pax_global_header00006660000000000000000000000064124767340620014525gustar00rootroot0000000000000052 comment=d14f4511b2235906ad66c375ed9d4ad34db0283c lmms-1.1.3/000077500000000000000000000000001247673406200124775ustar00rootroot00000000000000lmms-1.1.3/.gitmodules000066400000000000000000000000001247673406200146420ustar00rootroot00000000000000lmms-1.1.3/.mailmap000066400000000000000000000011351247673406200141200ustar00rootroot00000000000000Tobias Doerffel Paul Giblock Paul Giblock Andrew Kelley Andrew Kelley Janne Sinisalo Raine M. Ekman Raine M. Ekman Lukas W Vesa Jonathan Aquilina lmms-1.1.3/.svnignore000066400000000000000000000000741247673406200145130ustar00rootroot00000000000000Makefile.in *.moc .libs embedded_resources.h .deps Makefile lmms-1.1.3/.travis.yml000066400000000000000000000040651247673406200146150ustar00rootroot00000000000000language: cpp compiler: gcc env: - TARGET_OS=linux - TARGET_OS=win32 - TARGET_OS=win64 before_install: - if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw-x-precise -y; fi - sudo apt-get update -qq install: - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime; fi - if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime; fi - if [ $TARGET_OS == linux ]; then sudo apt-get install -y libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev; fi before_script: - mkdir build && cd build script: - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make -j4 VERBOSE=1; fi - if [ $TARGET_OS != linux ]; then make; fi before_deploy: make package deploy: provider: releases api_key: secure: d4a+x4Gugpss7JK2DcHjyBZDmEFFh4iVfKDfITSD50T6Mc6At4LMgojvEu+6qT6IyOY2vm3UVT6fhyeuWDTRDwW9tfFlaHVA0h8aTRD+eAXOA7pQ8rEMwQO3+WCKuKTfEqUkpL4wxhww8dpkv54tqeIs0S4TBqz9tk8UhzU7XbE= file: lmms-${TRAVIS_TAG:1}-$TARGET_OS.exe on: tags: true all_branches: true condition: "$TARGET_OS != linux" repo: LMMS/lmms lmms-1.1.3/AUTHORS000066400000000000000000000027101247673406200135470ustar00rootroot00000000000000Tobias Doerffel Development Manager Jonathan Aquilina Project Manager Paul Giblock Development Danny McRae Development Javier Serrano Polo Development Lukas Wohlschläger Development Andrew Kelley Development Wong Cho Ching Development Andreas Brandmaier BitInvader plugin Juan Fabián Simón Version 0.4 plugin artwork Sebastian Tilsch Recording of many samples Gabriel Additional artwork Vesa Kivimäki UI Lead developer Gurjot Singh Developer Hannu Haahti Developer Uroš Maravić UI Developer Tobiasz Karoń (unfa) UI Developer Johannes Lorenz Developer Rubén Ibarra Pastor Developer LocoMatt 3osc skin developer Chrissy McManus UI developer Oskar Wallgren Development lmms-1.1.3/CMakeLists.txt000066400000000000000000000566621247673406200152560ustar00rootroot00000000000000CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5) PROJECT(lmms) SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH}) IF(COMMAND CMAKE_POLICY) CMAKE_POLICY(SET CMP0005 NEW) CMAKE_POLICY(SET CMP0003 NEW) ENDIF(COMMAND CMAKE_POLICY) INCLUDE(AddFileDependencies) INCLUDE(CheckIncludeFiles) INCLUDE(FindPkgConfig) SET(VERSION_MAJOR "1") SET(VERSION_MINOR "1") SET(VERSION_PATCH "3") #SET(VERSION_SUFFIX "") SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") IF(VERSION_SUFFIX) SET(VERSION "${VERSION}-${VERSION_SUFFIX}") ENDIF(VERSION_SUFFIX) INCLUDE(DetectMachine) OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON) OPTION(WANT_CALF "Include CALF LADSPA plugins" ON) OPTION(WANT_CAPS "Include C* Audio Plugin Suite (LADSPA plugins)" ON) OPTION(WANT_CARLA "Include Carla plugin" ON) OPTION(WANT_CMT "Include Computer Music Toolkit LADSPA plugins" ON) OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON) OPTION(WANT_OGGVORBIS "Include OGG/Vorbis support" ON) OPTION(WANT_PULSEAUDIO "Include PulseAudio support" ON) OPTION(WANT_PORTAUDIO "Include PortAudio support" ON) OPTION(WANT_SDL "Include SDL (Simple DirectMedia Layer) support" ON) OPTION(WANT_SF2 "Include SoundFont2 player plugin" ON) OPTION(WANT_STK "Include Stk (Synthesis Toolkit) support" ON) OPTION(WANT_SWH "Include Steve Harris's LADSPA plugins" ON) OPTION(WANT_TAP "Include Tom's Audio Processing LADSPA plugins" ON) OPTION(WANT_VST "Include VST support" ON) OPTION(WANT_VST_NOWINE "Include partial VST support (without wine)" OFF) OPTION(WANT_WINMM "Include WinMM MIDI support" OFF) IF(LMMS_BUILD_APPLE) SET(WANT_SF2 OFF) SET(WANT_ALSA OFF) SET(WANT_PULSEAUDIO OFF) SET(WANT_VST OFF) SET(STATUS_ALSA "") SET(STATUS_PULSEAUDIO "") # MacPorts: /opt/local/lib LINK_DIRECTORIES(${LINK_DIRECTORIES} /opt/local/lib) ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) SET(WANT_ALSA OFF) SET(WANT_JACK OFF) SET(WANT_PULSEAUDIO OFF) SET(WANT_SYSTEM_SR OFF) SET(WANT_WINMM ON) SET(LMMS_HAVE_WINMM TRUE) SET(STATUS_ALSA "") SET(STATUS_JACK "") SET(STATUS_PULSEAUDIO "") SET(STATUS_WINMM "OK") ELSE(LMMS_BUILD_WIN32) SET(STATUS_WINMM "") ENDIF(LMMS_BUILD_WIN32) CHECK_INCLUDE_FILES(stdint.h LMMS_HAVE_STDINT_H) CHECK_INCLUDE_FILES(stdlib.h LMMS_HAVE_STDLIB_H) CHECK_INCLUDE_FILES(pthread.h LMMS_HAVE_PTHREAD_H) CHECK_INCLUDE_FILES(semaphore.h LMMS_HAVE_SEMAPHORE_H) CHECK_INCLUDE_FILES(unistd.h LMMS_HAVE_UNISTD_H) CHECK_INCLUDE_FILES(sys/types.h LMMS_HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILES(sys/ipc.h LMMS_HAVE_SYS_IPC_H) CHECK_INCLUDE_FILES(sys/shm.h LMMS_HAVE_SYS_SHM_H) CHECK_INCLUDE_FILES(sys/time.h LMMS_HAVE_SYS_TIME_H) CHECK_INCLUDE_FILES(sys/wait.h LMMS_HAVE_SYS_WAIT_H) CHECK_INCLUDE_FILES(sys/select.h LMMS_HAVE_SYS_SELECT_H) CHECK_INCLUDE_FILES(stdarg.h LMMS_HAVE_STDARG_H) CHECK_INCLUDE_FILES(signal.h LMMS_HAVE_SIGNAL_H) CHECK_INCLUDE_FILES(sched.h LMMS_HAVE_SCHED_H) CHECK_INCLUDE_FILES(sys/soundcard.h LMMS_HAVE_SYS_SOUNDCARD_H) CHECK_INCLUDE_FILES(soundcard.h LMMS_HAVE_SOUNDCARD_H) CHECK_INCLUDE_FILES(fcntl.h LMMS_HAVE_FCNTL_H) CHECK_INCLUDE_FILES(sys/ioctl.h LMMS_HAVE_SYS_IOCTL_H) CHECK_INCLUDE_FILES(ctype.h LMMS_HAVE_CTYPE_H) CHECK_INCLUDE_FILES(string.h LMMS_HAVE_STRING_H) CHECK_INCLUDE_FILES(process.h LMMS_HAVE_PROCESS_H) CHECK_INCLUDE_FILES(locale.h LMMS_HAVE_LOCALE_H) LIST(APPEND CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}") # check for Qt4 SET(QT_MIN_VERSION "4.3.0" COMPONENTS QtCore QtGui QtXml) FIND_PACKAGE(Qt4 REQUIRED) SET(QT_USE_QTXML 1) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_TRANSLATIONS" OUTPUT_VARIABLE QT_TRANSLATIONS_DIR) IF(WIN32) SET(QT_TRANSLATIONS_DIR "${MINGW_PREFIX}/share/qt4/translations/") ENDIF(WIN32) IF(EXISTS "${QT_TRANSLATIONS_DIR}") MESSAGE("-- Found Qt translations in ${QT_TRANSLATIONS_DIR}") ADD_DEFINITIONS(-D'QT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}"') ENDIF(EXISTS "${QT_TRANSLATIONS_DIR}") IF(NOT WIN32) STRING(REPLACE "-DQT_DLL" "" QT_DEFINITIONS "${QT_DEFINITIONS}") ENDIF(NOT WIN32) INCLUDE("${QT_USE_FILE}") # check for libsndfile PKG_CHECK_MODULES(SNDFILE REQUIRED sndfile>=1.0.11) IF(NOT SNDFILE_FOUND) MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.11 - please install, remove CMakeCache.txt and try again!") ENDIF(NOT SNDFILE_FOUND) IF(WANT_CALF) SET(LMMS_HAVE_CALF TRUE) SET(STATUS_CALF "OK") ELSE(WANT_CALF) SET(STATUS_CALF "not built as requested") ENDIF(WANT_CALF) IF(WANT_CAPS) SET(LMMS_HAVE_CAPS TRUE) SET(STATUS_CAPS "OK") ELSE(WANT_CAPS) SET(STATUS_CAPS "not built as requested") ENDIF(WANT_CAPS) IF(WANT_CMT) SET(LMMS_HAVE_CMT TRUE) SET(STATUS_CMT "OK") ELSE(WANT_CMT) SET(STATUS_CMT "not built as requested") ENDIF(WANT_CMT) IF(WANT_SWH) SET(LMMS_HAVE_SWH TRUE) SET(STATUS_SWH "OK") ELSE(WANT_SWH) SET(STATUS_SWH "not built as requested") ENDIF(WANT_SWH) IF(WANT_TAP) SET(LMMS_HAVE_TAP TRUE) SET(STATUS_TAP "OK") ELSE(WANT_TAP) SET(STATUS_TAP "not built as requested") ENDIF(WANT_TAP) # check for CARLA IF(WANT_CARLA) PKG_CHECK_MODULES(CARLA carla-standalone>=1.9.5) IF(CARLA_FOUND) SET(LMMS_HAVE_CARLA TRUE) SET(STATUS_CARLA "OK") ELSE(CARLA_FOUND) SET(STATUS_CARLA "not found, please install the latest carla") ENDIF(CARLA_FOUND) ENDIF(WANT_CARLA) # check for SDL IF(WANT_SDL) SET(SDL_BUILDING_LIBRARY TRUE) FIND_PACKAGE(SDL) IF(SDL_FOUND) SET(LMMS_HAVE_SDL TRUE) SET(STATUS_SDL "OK") ELSE(SDL_FOUND) SET(STATUS_SDL "not found, please install libsdl1.2-dev (or similiar) " "if you require SDL support") ENDIF(SDL_FOUND) ENDIF(WANT_SDL) IF(NOT LMMS_HAVE_SDL) SET(SDL_INCLUDE_DIR "") ELSE(NOT LMMS_HAVE_SDL) IF(NOT SDL_INCLUDE_DIR) SET(SDL_INCLUDE_DIR "${CMAKE_FIND_ROOT_PATH}/include") ENDIF(NOT SDL_INCLUDE_DIR) ENDIF(NOT LMMS_HAVE_SDL) # check for Stk IF(WANT_STK) FIND_PACKAGE(STK) IF(STK_FOUND) SET(LMMS_HAVE_STK TRUE) SET(STATUS_STK "OK") ELSE(STK_FOUND) SET(STK_INCLUDE_DIR "") SET(STATUS_STK "not found, please install libstk0-dev (or similiar) " "if you require the Mallets instrument") ENDIF(STK_FOUND) ENDIF(WANT_STK) # check for PortAudio IF(WANT_PORTAUDIO) FIND_PACKAGE(Portaudio) IF(PORTAUDIO_FOUND) SET(LMMS_HAVE_PORTAUDIO TRUE) SET(STATUS_PORTAUDIO "OK") ELSE(PORTAUDIO_FOUND) SET(STATUS_PORTAUDIO "not found, please install portaudio19-dev (or similiar, version >= 1.9) " "if you require PortAudio support") ENDIF(PORTAUDIO_FOUND) ENDIF(WANT_PORTAUDIO) # check for PulseAudio IF(WANT_PULSEAUDIO) FIND_PACKAGE(PulseAudio) IF(PULSEAUDIO_FOUND) SET(LMMS_HAVE_PULSEAUDIO TRUE) SET(STATUS_PULSEAUDIO "OK") ELSE(PULSEAUDIO_FOUND) SET(STATUS_PULSEAUDIO "not found, please install libpulse-dev (or similiar) " "if you require PulseAudio support") ENDIF(PULSEAUDIO_FOUND) ENDIF(WANT_PULSEAUDIO) IF(NOT LMMS_HAVE_PULSEAUDIO) SET(PULSEAUDIO_INCLUDE_DIR "") SET(PULSEAUDIO_LIBRARIES "") ENDIF(NOT LMMS_HAVE_PULSEAUDIO) # check for OGG/Vorbis-libraries IF(WANT_OGGVORBIS) FIND_PACKAGE(OggVorbis) IF(OGGVORBIS_FOUND) SET(LMMS_HAVE_OGGVORBIS TRUE) SET(STATUS_OGGVORBIS "OK") ELSE(OGGVORBIS_FOUND) SET(STATUS_OGGVORBIS "not found, libogg-dev and libvorbis-dev (or similiar) " "is highly recommended") ENDIF(OGGVORBIS_FOUND) ENDIF(WANT_OGGVORBIS) # check whether to enable OSS-support IF(LMMS_HAVE_SOUNDCARD_H OR LMMS_HAVE_SYS_SOUNDCARD_H) SET(LMMS_HAVE_OSS TRUE) SET(STATUS_OSS "OK") ELSE(LMMS_HAVE_SOUNDCARD_H OR LMMS_HAVE_SYS_SOUNDCARD_H) SET(STATUS_OSS "") ENDIF(LMMS_HAVE_SOUNDCARD_H OR LMMS_HAVE_SYS_SOUNDCARD_H) # check for ALSA IF(WANT_ALSA) FIND_PACKAGE(Alsa) IF(ALSA_FOUND) SET(LMMS_HAVE_ALSA TRUE) SET(STATUS_ALSA "OK") ELSE(ALSA_FOUND) SET(STATUS_ALSA "not found, please install libasound2-dev (or similiar) " "if you require ALSA support") ENDIF(ALSA_FOUND) ENDIF(WANT_ALSA) IF(NOT LMMS_HAVE_ALSA) SET(ASOUND_LIBRARY "") ENDIF(NOT LMMS_HAVE_ALSA) # check for JACK IF(WANT_JACK) PKG_CHECK_MODULES(JACK jack>=0.77) IF(JACK_FOUND) SET(LMMS_HAVE_JACK TRUE) SET(STATUS_JACK "OK") ELSE(JACK_FOUND) SET(STATUS_JACK "not found, please install libjack0.100.0-dev (or similiar) " "if you require JACK support") ENDIF(JACK_FOUND) ENDIF(WANT_JACK) # check for FFTW3F-library PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0) # check for Fluidsynth IF(WANT_SF2) PKG_CHECK_MODULES(FLUIDSYNTH fluidsynth>=1.0.7) IF(FLUIDSYNTH_FOUND) SET(LMMS_HAVE_FLUIDSYNTH TRUE) SET(STATUS_FLUIDSYNTH "OK") ELSE(FLUIDSYNTH_FOUND) SET(STATUS_FLUIDSYNTH "not found, libfluidsynth-dev (or similiar)" "is highly recommended") ENDIF(FLUIDSYNTH_FOUND) ENDIF(WANT_SF2) # check for pthreads IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) FIND_PACKAGE(Threads) ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) # check for WINE IF(WANT_VST) FIND_PACKAGE(Wine) IF(WINE_FOUND) SET(LMMS_SUPPORT_VST TRUE) SET(STATUS_VST "OK") ELSE(WINE_FOUND) SET(STATUS_VST "not found, please install (lib)wine-dev (or similiar) - 64 bit systems additionally need gcc-multilib and g++-multilib") ENDIF(WINE_FOUND) ENDIF(WANT_VST) IF(LMMS_BUILD_WIN32) SET(LMMS_SUPPORT_VST TRUE) SET(STATUS_VST "OK") ENDIF(LMMS_BUILD_WIN32) # check for libsamplerate PKG_CHECK_MODULES(SAMPLERATE REQUIRED samplerate>=0.1.8) CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/lmmsconfig.h.in" "${CMAKE_BINARY_DIR}/lmmsconfig.h") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/lmmsversion.h.in" "${CMAKE_BINARY_DIR}/lmmsversion.h") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/lmms.rc.in" "${CMAKE_BINARY_DIR}/lmms.rc") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/plugins/zynaddsubfx/zynaddsubfx.rc.in" "${CMAKE_BINARY_DIR}/plugins/zynaddsubfx/zynaddsubfx.rc") # set compiler flags SET(WERROR_FLAGS "-Wall -Werror=unused-function -Wno-sign-compare -Wno-strict-overflow") IF(NOT LMMS_BUILD_APPLE) SET(WERROR_FLAGS "${WERROR_FLAGS} -Werror") ENDIF() # Due to a regression in gcc-4.8.X, we need to disable array-bounds check IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8.0") OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.0"))) SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds") ENDIF() SET(CMAKE_C_FLAGS "-O2 -g ${WERROR_FLAGS} ${CMAKE_C_FLAGS}") SET(CMAKE_CXX_FLAGS "-O2 -g -fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "-DLMMS_DEBUG") # people simply updating git will still have this and mess up build with it FILE(REMOVE include/lmmsconfig.h) FILE(GLOB lmms_INCLUDES "${CMAKE_SOURCE_DIR}/include/*.h") FILE(GLOB lmms_UI "${CMAKE_SOURCE_DIR}/src/gui/dialogs/*.ui" "${CMAKE_SOURCE_DIR}/src/gui/Forms/*.ui") FILE(GLOB_RECURSE lmms_SOURCES "${CMAKE_SOURCE_DIR}/src/*.cpp") SET(lmms_MOC ${lmms_INCLUDES}) # Get list of all committers from git history, ordered by number of commits FIND_PACKAGE(Git) IF(GIT_FOUND) SET(CONTRIBUTORS "${CMAKE_BINARY_DIR}/CONTRIBUTORS") EXECUTE_PROCESS( COMMAND "${GIT_EXECUTABLE}" shortlog -sne COMMAND cut -c8- OUTPUT_FILE "${CONTRIBUTORS}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" TIMEOUT 1) ENDIF(GIT_FOUND) SET(lmms_EMBEDDED_RESOURCES "${CMAKE_SOURCE_DIR}/AUTHORS" "${CMAKE_SOURCE_DIR}/COPYING" "${CONTRIBUTORS}") QT4_WRAP_CPP(lmms_MOC_out ${lmms_MOC} OPTIONS -nw) QT4_WRAP_UI(lmms_UI_out ${lmms_UI}) # embedded resources stuff IF(WIN32 OR WIN64) # compile buildtools native SET(BIN2RES_CPP "${CMAKE_SOURCE_DIR}/buildtools/bin2res.cpp") SET(BIN2RES "${CMAKE_BINARY_DIR}/bin2res") ADD_CUSTOM_COMMAND(OUTPUT "${BIN2RES}" COMMAND g++ ARGS "\"${BIN2RES_CPP}\"" -o "\"${BIN2RES}\"" DEPENDS "${BIN2RES_CPP}") ELSE(WIN32 OR WIN64) ADD_EXECUTABLE(bin2res buildtools/bin2res.cpp) GET_TARGET_PROPERTY(BIN2RES bin2res LOCATION) ENDIF(WIN32 OR WIN64) SET(LMMS_ER_H "${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h") # we somehow have to make LMMS-binary depend on MOC-files ADD_FILE_DEPENDENCIES("${CMAKE_BINARY_DIR}/lmmsconfig.h" ${lmms_MOC_out}) ADD_CUSTOM_COMMAND(OUTPUT "${LMMS_ER_H}" COMMAND "${BIN2RES}" ARGS ${lmms_EMBEDDED_RESOURCES} > "\"${LMMS_ER_H}\"" DEPENDS "${BIN2RES}") IF(WIN32) SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj") ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}" COMMAND "${WINDRES}" "-I\"${CMAKE_SOURCE_DIR}\"" "-o\"${CMAKE_BINARY_DIR}/lmmsrc.obj\"" "-i\"${CMAKE_BINARY_DIR}/lmms.rc\"" DEPENDS "${CMAKE_BINARY_DIR}/lmms.rc") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") ELSE(WIN32) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") ENDIF(WIN32) # set up apple vars before traversing into data/scripts SET(MACOSX_BUNDLE_ICON_FILE "lmms.icns") SET(MACOSX_BUNDLE_GUI_IDENTIFIER "LMMS") SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_NAME "LMMS") SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns") SET(MACOSX_BUNDLE_MIMETYPE_ID "net.sourceforge.lmms") SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.io") # make sub-directories ADD_SUBDIRECTORY(plugins) ADD_SUBDIRECTORY(data) ADD_SUBDIRECTORY(doc) # # build LMMS-binary # IF(LMMS_BUILD_WIN32) SET(EXTRA_LIBRARIES "-lwinmm") ENDIF() # Paths relative to lmms executable FILE(RELATIVE_PATH LIB_DIR_RELATIVE "/${BIN_DIR}" "/${LIB_DIR}") FILE(RELATIVE_PATH PLUGIN_DIR_RELATIVE "/${BIN_DIR}" "/${PLUGIN_DIR}") ADD_DEFINITIONS(-D'LIB_DIR="${LIB_DIR_RELATIVE}/"' -D'PLUGIN_DIR="${PLUGIN_DIR_RELATIVE}/"' ${PULSEAUDIO_DEFINITIONS} ${PORTAUDIO_DEFINITIONS}) INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/include" "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/include" ${JACK_INCLUDE_DIRS} ${SAMPLERATE_INCLUDE_DIRS} ${SNDFILE_INCLUDE_DIRS}) IF(NOT ("${SDL_INCLUDE_DIR}" STREQUAL "")) INCLUDE_DIRECTORIES("${SDL_INCLUDE_DIR}") ENDIF() IF(NOT ("${PORTAUDIO_INCLUDE_DIR}" STREQUAL "")) INCLUDE_DIRECTORIES("${PORTAUDIO_INCLUDE_DIR}") ENDIF() IF(NOT ("${PULSEAUDIO_INCLUDE_DIR}" STREQUAL "")) INCLUDE_DIRECTORIES("${PULSEAUDIO_INCLUDE_DIR}") ENDIF() IF(NOT ("${OGGVORBIS_INCLUDE_DIR}" STREQUAL "")) INCLUDE_DIRECTORIES("${OGGVORBIS_INCLUDE_DIR}") ENDIF() ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz" COMMAND gzip -c "\"${CMAKE_SOURCE_DIR}/lmms.1\"" > "\"${CMAKE_BINARY_DIR}/lmms.1.gz\"" DEPENDS "${CMAKE_SOURCE_DIR}/lmms.1" COMMENT "Generating lmms.1.gz") ADD_EXECUTABLE(lmms ${lmms_SOURCES} ${lmms_INCLUDES} "${LMMS_ER_H}" ${lmms_UI_out} lmmsconfig.h lmmsversion.h "${WINRC}" "${CMAKE_BINARY_DIR}/lmms.1.gz") TARGET_LINK_LIBRARIES(lmms ${CMAKE_THREAD_LIBS_INIT} ${QT_LIBRARIES} ${ASOUND_LIBRARY} ${SDL_LIBRARY} ${PORTAUDIO_LIBRARIES} ${PULSEAUDIO_LIBRARIES} ${JACK_LIBRARIES} ${OGGVORBIS_LIBRARIES} ${SAMPLERATE_LIBRARIES} ${SNDFILE_LIBRARIES} ${EXTRA_LIBRARIES}) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows") ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_BINARY_DIR}/lmms.exe\"") INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") INSTALL(FILES "${MINGW_PREFIX}/bin/QtCore4.dll" "${MINGW_PREFIX}/bin/QtGui4.dll" "${MINGW_PREFIX}/bin/QtSvg4.dll" "${MINGW_PREFIX}/bin/QtXml4.dll" "${MINGW_PREFIX}/bin/libsamplerate-0.dll" "${MINGW_PREFIX}/bin/libsndfile-1.dll" "${MINGW_PREFIX}/bin/libvorbis-0.dll" "${MINGW_PREFIX}/bin/libvorbisenc-2.dll" "${MINGW_PREFIX}/bin/libvorbisfile-3.dll" "${MINGW_PREFIX}/bin/libjpeg-9.dll" "${MINGW_PREFIX}/bin/libogg-0.dll" "${MINGW_PREFIX}/bin/libfltk.dll" "${MINGW_PREFIX}/bin/libfluidsynth.dll" "${MINGW_PREFIX}/bin/libfftw3f-3.dll" "${MINGW_PREFIX}/bin/libFLAC-8.dll" "${MINGW_PREFIX}/bin/libportaudio-2.dll" "${MINGW_PREFIX}/bin/libpng16-16.dll" "${MINGW_PREFIX}/bin/SDL.dll" "${MINGW_PREFIX}/bin/libglib-2.0-0.dll" "${MINGW_PREFIX}/bin/libgthread-2.0-0.dll" "${MINGW_PREFIX}/bin/zlib1.dll" "${MINGW_PREFIX}/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32/bin/libwinpthread-1.dll" DESTINATION .) ELSE(LMMS_BUILD_WIN32) IF(NOT LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Wl,-E") ENDIF(NOT LMMS_BUILD_APPLE) INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") INSTALL(FILES "${CMAKE_BINARY_DIR}/lmms.1.gz" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1/" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) ENDIF(LMMS_BUILD_WIN32) # # rules for building localizations # FILE(GLOB lmms_LOCALES data/locale/*.ts) SET(ts_targets "") SET(qm_targets "") FOREACH(_ts_file ${lmms_LOCALES}) STRING(REPLACE "${CMAKE_SOURCE_DIR}/data/locale/" "" _ts_target "${_ts_file}") STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}") STRING(REPLACE ".ts" ".qm" _qm_target "${_ts_target}") ADD_CUSTOM_TARGET(${_ts_target} COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${lmms_SOURCES} ${lmms_INCLUDES} ${lmms_UI} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\"") ADD_CUSTOM_TARGET(${_qm_target} COMMAND "${QT_LRELEASE_EXECUTABLE}" "\"${_ts_file}\"" -qm "\"${_qm_file}\"") LIST(APPEND ts_targets "${_ts_target}") LIST(APPEND qm_targets "${_qm_target}") ENDFOREACH(_ts_file ${lmms_LOCALES}) ADD_CUSTOM_TARGET(update-locales) FOREACH(_item ${ts_targets}) ADD_DEPENDENCIES(update-locales "${_item}") ENDFOREACH(_item ${ts_targets}) ADD_CUSTOM_TARGET(finalize-locales) FOREACH(_item ${qm_targets}) ADD_DEPENDENCIES(finalize-locales "${_item}") ENDFOREACH(_item ${qm_targets}) # install headers IF(LMMS_BUILD_LINUX) INSTALL(FILES ${lmms_INCLUDES} "${CMAKE_BINARY_DIR}/lmmsconfig.h" "${CMAKE_BINARY_DIR}/lmmsversion.h" "${CMAKE_SOURCE_DIR}/src/gui/embed.cpp" DESTINATION "${CMAKE_INSTALL_PREFIX}/include/lmms/") ENDIF(LMMS_BUILD_LINUX) # package ZynAddSubFX into win32 build IF(LMMS_BUILD_WIN32) IF(EXISTS "${CMAKE_SOURCE_DIR}/extras") ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/extras/data/presets") FILE(GLOB ZASF_BINARIES "${CMAKE_SOURCE_DIR}/extras/plugins/zynaddsubfx/zynaddsubfx.dll" "${CMAKE_SOURCE_DIR}/extras/plugins/zynaddsubfx/remote_zynaddsubfx.exe") INSTALL(FILES "${ZASF_BINARIES}" DESTINATION "${PLUGIN_DIR}") ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/extras") ENDIF(LMMS_BUILD_WIN32) # # add distclean-target # ADD_CUSTOM_TARGET(distclean COMMAND make clean COMMAND rm -rf `find -name cmake_install.cmake` `find -name Makefile` `find -type d -name CMakeFiles` CMakeCache.txt lmmsconfig.h lmms.1.gz) # # add tarball-target # SET(TMP "lmms-${VERSION}") ADD_CUSTOM_TARGET(dist COMMAND make clean COMMAND rm -rf "${TMP}" COMMAND mkdir -p "${TMP}" COMMAND cp AUTHORS build_mingw32 build_mingw64 CMakeLists.txt configure COPYING INSTALL lmms.1 lmms.rc.in lmms.spec.in lmmsconfig.h.in lmmsversion.h.in README TODO "${TMP}" COMMAND cp -r buildtools cmake data doc include plugins src "${TMP}" COMMAND rm -rf `find "${TMP}" -name cmake_install.cmake` `find "${TMP}" -name Makefile` `find "${TMP}" -type d -name CMakeFiles` "${TMP}/CMakeCache.txt" COMMAND tar cjf lmms-${VERSION}-src.tar.bz2 "${TMP}" COMMAND rm -rf "${TMP}") SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${lmms_MOC_out} ${lmms_UI_out} lmmsconfig.h lmms.1.gz") # # display configuration information # MESSAGE("\n" "Installation Summary\n" "--------------------\n" "* Install Directory : ${CMAKE_INSTALL_PREFIX}\n" ) MESSAGE( "Supported audio interfaces\n" "--------------------------\n" "* ALSA : ${STATUS_ALSA}\n" "* JACK : ${STATUS_JACK}\n" "* OSS : ${STATUS_OSS}\n" "* PortAudio : ${STATUS_PORTAUDIO}\n" "* PulseAudio : ${STATUS_PULSEAUDIO}\n" "* SDL : ${STATUS_SDL}\n" ) MESSAGE( "Supported MIDI interfaces\n" "-------------------------\n" "* ALSA : ${STATUS_ALSA}\n" "* OSS : ${STATUS_OSS}\n" "* WinMM : ${STATUS_WINMM}\n" ) MESSAGE( "Supported file formats for project export\n" "-----------------------------------------\n" "* WAVE : OK\n" "* OGG/VORBIS : ${STATUS_OGGVORBIS}\n" ) MESSAGE( "Optional plugins\n" "----------------\n" "* Carla Patchbay & Rack : ${STATUS_CARLA}\n" "* SoundFont2 player : ${STATUS_FLUIDSYNTH}\n" "* Stk Mallets : ${STATUS_STK}\n" "* VST-instrument hoster : ${STATUS_VST}\n" "* VST-effect hoster : ${STATUS_VST}\n" "* CALF LADSPA plugins : ${STATUS_CALF}\n" "* CAPS LADSPA plugins : ${STATUS_CAPS}\n" "* CMT LADSPA plugins : ${STATUS_CMT}\n" "* TAP LADSPA plugins : ${STATUS_TAP}\n" "* SWH LADSPA plugins : ${STATUS_SWH}\n" ) MESSAGE( "\n" "-----------------------------------------------------------------\n" "IMPORTANT:\n" "after installing missing packages, remove CMakeCache.txt before\n" "running cmake again!\n" "-----------------------------------------------------------------\n" "\n\n") INCLUDE(InstallRequiredSystemLibraries) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LMMS - easy music production for everyone!") SET(CPACK_PACKAGE_VENDOR "LMMS Developers") IF(LMMS_BUILD_APPLE) CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/README" "${CMAKE_BINARY_DIR}/README.txt" COPYONLY) CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/COPYING" "${CMAKE_BINARY_DIR}/COPYING.txt" COPYONLY) SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_BINARY_DIR}/README.txt") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.txt") ELSE(LMMS_BUILD_APPLE) SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") ENDIF(LMMS_BUILD_APPLE) SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}") IF(VERSION_SUFFIX) SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}") ENDIF(VERSION_SUFFIX) SET(CPACK_PACKAGE_INSTALL_DIRECTORY "LMMS") IF(WIN32) SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data/nsis_branding.bmp") SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data/lmms.ico") SET(CPACK_NSIS_INSTALLED_ICON_NAME "lmms.exe") SET(CPACK_NSIS_DISPLAY_NAME "LMMS ${VERSION}") SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lmms.io") SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lmms.io") SET(CPACK_NSIS_CONTACT "lmms-devel@lists.sourceforge.net") SET(CPACK_PACKAGE_EXECUTABLES "lmms.exe;LMMS") SET(CPACK_NSIS_MENU_LINKS "lmms.exe;LMMS") SET(CPACK_NSIS_DEFINES "!include ${CMAKE_SOURCE_DIR}/cmake/nsis/FileAssociation.nsh") SET(CPACK_PACKAGE_FILE_NAME "lmms-${VERSION}-win32") SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " \\\${registerExtension} \\\"$INSTDIR\\\\lmms.exe\\\" \\\".mmp\\\" \\\"LMMS Project\\\" \\\${registerExtension} \\\"$INSTDIR\\\\lmms.exe\\\" \\\".mmpz\\\" \\\"LMMS Project (compressed)\\\" ") SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " \\\${unregisterExtension} \\\".mmp\\\" \\\"LMMS Project\\\" \\\${unregisterExtension} \\\".mmpz\\\" \\\"LMMS Project (compressed)\\\" DeleteRegKey HKCR \\\"LMMS Project\\\" DeleteRegKey HKCR \\\"LMMS Project (compressed)\\\" ") ELSE(WIN32) SET(CPACK_STRIP_FILES "bin/lmms;${PLUGIN_DIR}/*.so") SET(CPACK_PACKAGE_EXECUTABLES "lmms" "LMMS binary") ENDIF(WIN32) IF(WIN64) SET(CPACK_PACKAGE_FILE_NAME "lmms-${VERSION}-win64") SET(CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES} InstallDir \\\"\\\$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\"") ENDIF(WIN64) SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "lmms-${VERSION}") INCLUDE(CPack) lmms-1.1.3/COPYING000066400000000000000000000431031247673406200135330ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. lmms-1.1.3/INSTALL000066400000000000000000000022461247673406200135340ustar00rootroot00000000000000Building LMMS got quite simple since 0.4.0 as everything is managed by cmake now. Therefore make sure you have CMake (>= 2.6.0 recommended) and then run mkdir build cd build cmake ../ make sudo make install If your system does not have "sudo", become root with your preferred mechanism and run the "make install" command. With the above commands an out-of-tree build is performed. You can also run "cmake ." directly in the root of source tree although this is not recommended. When performing an out-of-tree build after there's already an in-tree build, make sure to run "make distclean" before running cmake inside build-directory. If you want to use custom compiler flags simply set the environment variables CFLAGS and CXXFLAGS. After running cmake (the 3rd command above) you can see a summary of things that are going to be built into LMMS or built as plugins. Install the according libraries and development files if a certain feature is not enabled. Then remove CMakeCache.txt and run cmake again. If you want to supply an install prefix to cmake, add the flag: -DCMAKE_INSTALL_PREFIX= Where can be /usr, /usr/local, /opt, etc. The default is /usr/local. lmms-1.1.3/README000066400000000000000000000067311247673406200133660ustar00rootroot00000000000000LMMS 1.0.93 =========== Copyright (c) 2004-2014 by LMMS developers This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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. What is LMMS? -------------- LMMS is a free cross-platform alternative to commercial programs like FL Studio (R), which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface. Features --------- * Song-Editor for composing songs * A Beat+Bassline-Editor for creating beats and basslines * An easy-to-use Piano-Roll for editing patterns and melodies * An FX mixer with 64 FX channels and arbitrary number of effects allow unlimited mixing possibilities * Many powerful instrument and effect-plugins out of the box * Full user-defined track-based automation and computer-controlled automation sources * Compatible with many standards such as SoundFont2, VST(i), LADSPA, GUS Patches, and full MIDI support * Import of MIDI and FLP (Fruityloops(R) Project) files Requirements ------------ The most important requirement is for sure a fast computer, so don't try to get LMMS working on a pentium I with 60 MHz... ;-) Therefore you should have at least 500 MHz, but for really enjoying LMMS less than 1 GHz makes no sense... Required libraries: - Qt >= 4.3.0 with devel-files (4.4.x recommended) Optional, but strongly recommended: - JACK with devel-files - libvorbis & libogg with devel-files - libalsa with devel-files - SDL with devel-files - libsamplerate >= 0.1.7 with devel-files - libsndfile with devel-files - WINE + WINE-devel-files - stk, libstk + libstk-dev - libfluidsynth with devel files - fftw3 with devel-files - libfltk1.3 with devel-files (needed by ZynAddSubFx) For compiling you should have an up to date GCC with g++. If you have problems with compiling or running LMMS, find any bug or have suggestions and so on, please feel free to e-mail me (for mail-address see below)! Building --------- See INSTALL for information on how to build LMMS. Join LMMS-development ---------------------- If you are interested in LMMS, it's programming, artwork, testing, writing demo-songs, (and improving this README...) or something like that, you're welcome to participate on the development of LMMS! The project-homepage of LMMS, mailingslists and a list of things you can do can be found at http://lmms.io/ Details on development can be found in the Wiki: https://github.com/LMMS/lmms/wiki Before coding a new big feature, please ALWAYS post your idea and suggestions about your feature and about the intended implementation to the LMMS-devel-mailinglist (lmms-devel@lists.sourceforge.net) and wait for replies! Maybe there're different ideas, improvements, hints or maybe your feature is not welcome/needed at the moment. lmms-1.1.3/README.md000066400000000000000000000050661247673406200137650ustar00rootroot00000000000000![LMMS Logo](http://lmms.sourceforge.net/Lmms_logo.png) LMMS ======================= [![Build Status](https://travis-ci.org/LMMS/lmms.png)](https://travis-ci.org/LMMS/lmms) What is LMMS? -------------- LMMS is a free cross-platform alternative to commercial programs like FL Studio®, which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface. [Homepage](http://lmms.io)
[Downloads/Releases](https://github.com/LMMS/lmms/releases)
[Developer Wiki](https://github.com/LMMS/lmms/wiki)
[Artist & User Wiki/Documentation](http://lmms.io/documentation)
[Sound Demos](http://lmms.io/showcase/)
[LMMS Sharing Platform](http://lmms.io/lsp/) Share your songs! Features --------- * Song-Editor for composing songs * A Beat+Bassline-Editor for creating beats and basslines * An easy-to-use Piano-Roll for editing patterns and melodies * An FX mixer with 64 FX channels and arbitrary number of effects allow unlimited mixing possibilities * Many powerful instrument and effect-plugins out of the box * Full user-defined track-based automation and computer-controlled automation sources * Compatible with many standards such as SoundFont2, VST(i), LADSPA, GUS Patches, and full MIDI support * Import of MIDI and FLP (FL Studio®/Fruityloops® Project) files [Latest Stable Release (1.0.3)](https://github.com/LMMS/lmms/releases/tag/v1.0.3) --------------------- * Fix zyn GUI crash on win32 * Fix SF2 note volume * Localization updates * Updated LADSPA search paths * Bugfixes in plugins Building --------- See [Compiling LMMS](https://github.com/LMMS/lmms/wiki/Compiling-lmms) on our wiki for information on how to build LMMS. Join LMMS-development ---------------------- If you are interested in LMMS, it's programming, artwork, testing, writing demo-songs, (and improving this readme…) or something like that, you're welcome to participate on the development of LMMS! Information about what you can do and how can be found in the [wiki](https://github.com/LMMS/lmms/wiki). Before coding a new big feature, please _always_ [file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and suggestions about your feature and about the intended implementation on GitHub or post to the LMMS-devel-mailinglist (lmms-devel@lists.sourceforge.net) and wait for replies! Maybe there're different ideas, improvements, hints or maybe your feature is not welcome/needed at the moment. lmms-1.1.3/TODO000066400000000000000000000027031247673406200131710ustar00rootroot00000000000000Version 0.4.x ============= - save tco-settings in trackContentWidget::saveSettings() etc. instead of track::... - resample sample-track-tcos when exporting at different samplerate - message to user when importing unsupported MIDI-file (track-count = 0) - piano roll: mouse cursor isn't updated correctly in selection mode (from resizing note edit area) - when you add vestige, have it automatically pop the find VST plugin dialog - try to make vestige-plugin-dlls relative - select all MIDI devices by default when you bring up the "connect to controller" window and wait for first event - then uncheck all other MIDI devices that no events were detected from - load asdlol.mmpz. if you render it without playing it, or if you play it the first time, you hear unwanted artifacts. (solution: apply automation before playing) - autosave every 30s (configurable!) and offer recovery at startup after crash - speed up painting of sampleTCO - do not process effects when playing frozen patterns - copy-pasted automation patterns have to be manually linked back to their knob for some reason - improve TrackLabelButton: split 80%-20% (80%=name, 20%=button showing a popup menu with track operations, make the midi input a top-level menu item) - when you click and drag a mixer bar, it doesn't click and drag, it sets absolutely. this is annoying See TODO file in master branch and/or the TODO list in the Wiki for details regarding the development series. lmms-1.1.3/build_mingw32000077500000000000000000000005521247673406200150740ustar00rootroot00000000000000MINGW=/opt/mingw32 export PATH=$PATH:$MINGW/bin #export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -fno-tree-vectorize" export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5" export CXXFLAGS="$CFLAGS" cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win32Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/ lmms-1.1.3/build_mingw64000077500000000000000000000003421247673406200150760ustar00rootroot00000000000000MINGW=/opt/mingw64 export PATH=$PATH:$MINGW/bin #export CFLAGS="-fno-tree-vectorize" export CXXFLAGS="$CFLAGS" cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win64Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/ lmms-1.1.3/buildtools/000077500000000000000000000000001247673406200146575ustar00rootroot00000000000000lmms-1.1.3/buildtools/bin2res.cpp000066400000000000000000000124431247673406200167330ustar00rootroot00000000000000/* * bin2res.cpp - generate embedded resources from binary data (based on qembed) * * Copyright (c) 2005-2008 Tobias Doerffel * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include static void embedData( const char * _input, int _size, std::ostream & _output ); static std::string convertFileNameToCIdentifier( const std::string & _s ); struct embed { unsigned int size; std::string name; std::string cname; } ; typedef std::vector stringlist; const int MAX_FILE_SIZE = 256*256*256; // = 16 MB int main( int argc, char * * argv ) { if( argc < 2 ) { std::cerr << "Usage:" << std::endl << "\t" << argv[0] << " files" << std::endl; return( 1 ); } std::cout << "// Generated by bin2res" << std::endl; std::vector embedded_data; std::cout << "#ifndef _EMBEDDED_RESOURCES_H" << std::endl; std::cout << "#define _EMBEDDED_RESOURCES_H" << std::endl; stringlist files; for( int i = 1; i < argc; ++i ) { files.push_back( std::string( argv[i] ) ); } for( stringlist::iterator it = files.begin(); it != files.end(); ++it ) { std::ifstream f( it->c_str(), std::ios::binary ); if( f.fail() ) { std::cerr << "Cannot open file " << *it << ", ignoring it" << std::endl; continue; } f.seekg( 0, std::ios::end ); int fsize = f.tellg(); f.seekg( 0 ); if( fsize == 0 || fsize > MAX_FILE_SIZE ) { std::cerr << "File " << *it << " has zero size or is " "too large to be processed with bin2res." << std::endl; } char * data = new char[fsize]; f.read( data, fsize ); embed * e = new embed; e->size = fsize; if( it->rfind( '/' ) != std::string::npos ) { e->name = std::string( it->c_str() + it->rfind( '/' ) + 1 ); } else { e->name = *it; } e->cname = convertFileNameToCIdentifier( e->name ); embedded_data.push_back( e ); std::string s; std::cout << "static const unsigned char " << e->cname << "_data[] = {"; embedData( data, fsize, std::cout ); std::cout << std::endl << "};" << std::endl << std::endl; delete[] data; } if( embedded_data.size() > 0 ) { std::cout << "static const unsigned char dummy_data[] =" "{ 0x00 };" << std::endl << std::endl; embed * dummy = new embed; dummy->size = 1; dummy->name = "dummy"; dummy->cname = convertFileNameToCIdentifier( std::string( "dummy" ) ); embedded_data.push_back( dummy ); std::cout << "#include " << std::endl << std::endl; std::cout << "#include \"embed.h\"" << std::endl << std::endl; std::cout << "static embed::descriptor embed_vec[] = {" << std::endl; /* << "{" << std::endl << " int size;" << std::endl << " const unsigned char * data;" << std::endl << " const char * name;" << std::endl << "} embed_vec[] = {" << std::endl;*/ while( embedded_data.size() > 0 ) { embed * e = embedded_data[0]; std::cout << " { " << e->size << ", " << e->cname << "_data, " << "\"" << e->name << "\" }," << std::endl; delete e; embedded_data.erase( embedded_data.begin() ); } std::cout << " { 0, 0, 0 }" << std::endl << "};" << std::endl << std::endl << "static const embed::descriptor & " "findEmbeddedData( const char * _name )" << std::endl << "{" << std::endl << " for( int i = 0; embed_vec[i].data; " "i++ )" << std::endl << " {" << std::endl << " if( strcmp( embed_vec[i].name, " "_name ) == 0 )" << std::endl << " {" << std::endl << " return( " "embed_vec[i] );" << std::endl << " }" << std::endl << " }" << std::endl /* << " printf( \"warning: embedded resource " "%s not found!\\n\", _name );" << std::endl*/ << " return( findEmbeddedData( " "\"dummy\" ) );" << std::endl << "}" << std::endl << std::endl; } std::cout << "#endif" << std::endl; return( 0 ); } std::string convertFileNameToCIdentifier( const std::string & _s ) { std::string r = _s; int len = r.length(); if ( len > 0 && !isalpha( (char)r[0] ) ) { r[0] = '_'; } for ( int i = 1; i < len; i++ ) { if ( !isalnum( (char)r[i] ) ) { r[i] = '_'; } } return( r ); } void embedData( const char * _input, int _nbytes, std::ostream & _output ) { static const char hexdigits[] = "0123456789abcdef"; std::string s; for( int i = 0; i < _nbytes; i++ ) { if( ( i%14 ) == 0 ) { s += "\n "; _output << s; s = ""; } unsigned int v = _input[i]; s += "0x"; s += hexdigits[(v >> 4) & 15]; s += hexdigits[v & 15]; if( i < _nbytes-1 ) { s += ','; } } if ( s.length() ) { _output << s; } } lmms-1.1.3/cmake/000077500000000000000000000000001247673406200135575ustar00rootroot00000000000000lmms-1.1.3/cmake/modules/000077500000000000000000000000001247673406200152275ustar00rootroot00000000000000lmms-1.1.3/cmake/modules/BuildPlugin.cmake000066400000000000000000000062121247673406200204500ustar00rootroot00000000000000# BuildPlugin.cmake - Copyright (c) 2008 Tobias Doerffel # # description: build LMMS-plugin # usage: BUILD_PLUGIN( MOCFILES EMBEDDED_RESOURCES UICFILES ) MACRO(CAR var) SET(${var} ${ARGV1}) ENDMACRO(CAR) MACRO(CDR var junk) SET(${var} ${ARGN}) ENDMACRO(CDR) MACRO(LIST_CONTAINS var value) SET(${var}) FOREACH (value2 ${ARGN}) IF (${value} STREQUAL ${value2}) SET(${var} TRUE) ENDIF (${value} STREQUAL ${value2}) ENDFOREACH (value2) ENDMACRO(LIST_CONTAINS) MACRO(PARSE_ARGUMENTS prefix arg_names option_names) SET(DEFAULT_ARGS) FOREACH(arg_name ${arg_names}) SET(${prefix}_${arg_name}) ENDFOREACH(arg_name) FOREACH(option ${option_names}) SET(${prefix}_${option} FALSE) ENDFOREACH(option) SET(current_arg_name DEFAULT_ARGS) SET(current_arg_list) FOREACH(arg ${ARGN}) LIST_CONTAINS(is_arg_name ${arg} ${arg_names}) IF (is_arg_name) SET(${prefix}_${current_arg_name} ${current_arg_list}) SET(current_arg_name ${arg}) SET(current_arg_list) ELSE (is_arg_name) LIST_CONTAINS(is_option ${arg} ${option_names}) IF (is_option) SET(${prefix}_${arg} TRUE) ELSE (is_option) SET(current_arg_list ${current_arg_list} ${arg}) ENDIF (is_option) ENDIF (is_arg_name) ENDFOREACH(arg) SET(${prefix}_${current_arg_name} ${current_arg_list}) ENDMACRO(PARSE_ARGUMENTS) MACRO(BUILD_PLUGIN) PARSE_ARGUMENTS(PLUGIN "MOCFILES;EMBEDDED_RESOURCES;UICFILES" "" ${ARGN} ) CAR(PLUGIN_NAME ${PLUGIN_DEFAULT_ARGS}) CDR(PLUGIN_SOURCES ${PLUGIN_DEFAULT_ARGS}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src/gui) ADD_DEFINITIONS(-DPLUGIN_NAME=${PLUGIN_NAME}) LIST(LENGTH PLUGIN_EMBEDDED_RESOURCES ER_LEN) IF(ER_LEN) SET(ER_H ${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h) ADD_CUSTOM_COMMAND(OUTPUT ${ER_H} COMMAND ${BIN2RES} ARGS ${PLUGIN_EMBEDDED_RESOURCES} > ${ER_H} DEPENDS ${BIN2RES}) ENDIF(ER_LEN) QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES}) QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES}) FOREACH(f ${PLUGIN_SOURCES}) ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_MOC_out} ${plugin_UIC_out}) ENDFOREACH(f) IF(LMMS_BUILD_APPLE) LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) LINK_LIBRARIES(${QT_LIBRARIES}) ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) LINK_LIBRARIES(-llmms ${QT_LIBRARIES}) ENDIF(LMMS_BUILD_WIN32) ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES}) INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") IF(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms") ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "") ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}.dll) ENDIF(LMMS_BUILD_WIN32) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}") ENDMACRO(BUILD_PLUGIN) lmms-1.1.3/cmake/modules/DetectMachine.cmake000066400000000000000000000023611247673406200207300ustar00rootroot00000000000000IF(WIN32) SET(LMMS_BUILD_WIN32 1) ELSE(WIN32) IF(APPLE) SET(LMMS_BUILD_APPLE 1) ELSE(APPLE) SET(LMMS_BUILD_LINUX 1) ENDIF(APPLE) ENDIF(WIN32) MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") SET(LMMS_HOST_X86 FALSE) SET(LMMS_HOST_X86_64 FALSE) IF(WIN32) IF(WIN64) SET(IS_X86_64 TRUE) SET(LMMS_BUILD_WIN64 TRUE) ELSE(WIN64) SET(IS_X86 TRUE) ENDIF(WIN64) ELSE(WIN32) EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine" OUTPUT_VARIABLE Machine ) MESSAGE("Machine: ${Machine}") STRING(REGEX MATCH "i.86" IS_X86 "${Machine}") STRING(REGEX MATCH "86_64" IS_X86_64 "${Machine}") ENDIF(WIN32) IF(IS_X86) MESSAGE("-- Target host is 32 bit") SET(LMMS_HOST_X86 TRUE) ELSEIF(IS_X86_64) MESSAGE("-- Target host is 64 bit") SET(LMMS_HOST_X86_64 TRUE) ELSE(IS_X86) MESSAGE("Can't identify target host. Assuming 32 bit platform.") ENDIF(IS_X86) IF(CMAKE_INSTALL_LIBDIR) SET(LIB_DIR "${CMAKE_INSTALL_LIBDIR}") ELSE(CMAKE_INSTALL_LIBDIR) SET(LIB_DIR lib) ENDIF(CMAKE_INSTALL_LIBDIR) IF(LMMS_BUILD_WIN32) SET(BIN_DIR .) SET(PLUGIN_DIR plugins) SET(DATA_DIR data) SET(LMMS_DATA_DIR data) ELSE(LMMS_BUILD_WIN32) SET(BIN_DIR bin) SET(PLUGIN_DIR ${LIB_DIR}/lmms) SET(DATA_DIR share) SET(LMMS_DATA_DIR ${DATA_DIR}/lmms) ENDIF(LMMS_BUILD_WIN32) lmms-1.1.3/cmake/modules/FindAlsa.cmake000066400000000000000000000052731247673406200177210ustar00rootroot00000000000000# Alsa check, based on libkmid/configure.in.in. # Only the support for Alsa >= 0.9.x was included; 0.5.x was dropped (but feel free to re-add it if you need it) # It defines ... # It offers the following macros: # ALSA_CONFIGURE_FILE(config_header) - generate a config.h, typical usage: # ALSA_CONFIGURE_FILE(${CMAKE_BINARY_DIR}/config-alsa.h) # ALSA_VERSION_STRING(version_string) looks for alsa/version.h and reads the version string into # the first argument passed to the macro # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Matthias Kretz # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. include(CheckIncludeFiles) include(CheckIncludeFileCXX) include(CheckLibraryExists) # Already done by toplevel find_library(ASOUND_LIBRARY asound) set(ASOUND_LIBRARY_DIR "") if(ASOUND_LIBRARY) get_filename_component(ASOUND_LIBRARY_DIR ${ASOUND_LIBRARY} PATH) endif(ASOUND_LIBRARY) check_library_exists(asound snd_seq_create_simple_port "${ASOUND_LIBRARY_DIR}" HAVE_LIBASOUND2) if(HAVE_LIBASOUND2) message(STATUS "Found ALSA: ${ASOUND_LIBRARY}") else(HAVE_LIBASOUND2) message(STATUS "ALSA not found") endif(HAVE_LIBASOUND2) set(ALSA_FOUND ${HAVE_LIBASOUND2}) find_path(ALSA_INCLUDES alsa/version.h) macro(ALSA_VERSION_STRING _result) # check for version in alsa/version.h if(ALSA_INCLUDES) file(READ "${ALSA_INCLUDES}/alsa/version.h" _ALSA_VERSION_CONTENT) string(REGEX REPLACE ".*SND_LIB_VERSION_STR.*\"(.*)\".*" "\\1" ${_result} ${_ALSA_VERSION_CONTENT}) else(ALSA_INCLUDES) message(STATUS "ALSA version not known. ALSA output will probably not work correctly.") endif(ALSA_INCLUDES) endmacro(ALSA_VERSION_STRING _result) check_include_files(sys/soundcard.h LMMS_HAVE_SYS_SOUNDCARD_H) check_include_files(machine/soundcard.h LMMS_HAVE_MACHINE_SOUNDCARD_H) check_include_files(linux/awe_voice.h LMMS_HAVE_LINUX_AWE_VOICE_H) check_include_files(awe_voice.h LMMS_HAVE_AWE_VOICE_H) check_include_files(/usr/src/sys/i386/isa/sound/awe_voice.h LMMS_HAVE__USR_SRC_SYS_I386_ISA_SOUND_AWE_VOICE_H) check_include_files(/usr/src/sys/gnu/i386/isa/sound/awe_voice.h LMMS_HAVE__USR_SRC_SYS_GNU_I386_ISA_SOUND_AWE_VOICE_H) check_include_file_cxx(sys/asoundlib.h LMMS_HAVE_SYS_ASOUNDLIB_H) check_include_file_cxx(alsa/asoundlib.h LMMS_HAVE_ALSA_ASOUNDLIB_H) check_library_exists(asound snd_pcm_resume "${ASOUND_LIBRARY_DIR}" ASOUND_HAS_SND_PCM_RESUME) if(ASOUND_HAS_SND_PCM_RESUME) set(HAVE_SND_PCM_RESUME 1) endif(ASOUND_HAS_SND_PCM_RESUME) mark_as_advanced(ALSA_INCLUDES ASOUND_LIBRARY) lmms-1.1.3/cmake/modules/FindOggVorbis.cmake000066400000000000000000000065751247673406200207500ustar00rootroot00000000000000# - Try to find the OggVorbis libraries # Once done this will define # # OGGVORBIS_FOUND - system has OggVorbis # OGGVORBIS_VERSION - set either to 1 or 2 # OGGVORBIS_INCLUDE_DIR - the OggVorbis include directory # OGGVORBIS_LIBRARIES - The libraries needed to use OggVorbis # OGG_LIBRARY - The Ogg library # VORBIS_LIBRARY - The Vorbis library # VORBISFILE_LIBRARY - The VorbisFile library # VORBISENC_LIBRARY - The VorbisEnc library # Copyright (c) 2006, Richard Laerkaeng, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. include (CheckLibraryExists) find_path(VORBIS_INCLUDE_DIR vorbis/vorbisfile.h) find_path(OGG_INCLUDE_DIR ogg/ogg.h) find_library(OGG_LIBRARY NAMES ogg) find_library(VORBIS_LIBRARY NAMES vorbis) find_library(VORBISFILE_LIBRARY NAMES vorbisfile) find_library(VORBISENC_LIBRARY NAMES vorbisenc) if (VORBIS_INCLUDE_DIR AND VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBISENC_LIBRARY) set(OGGVORBIS_FOUND TRUE) set(OGGVORBIS_LIBRARIES ${OGG_LIBRARY} ${VORBIS_LIBRARY} ${VORBISFILE_LIBRARY} ${VORBISENC_LIBRARY}) set(_CMAKE_REQUIRED_LIBRARIES_TMP ${CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${OGGVORBIS_LIBRARIES}) check_library_exists(vorbis vorbis_bitrate_addblock "" HAVE_LIBVORBISENC2) set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_TMP}) if (HAVE_LIBVORBISENC2) set (OGGVORBIS_VERSION 2) else (HAVE_LIBVORBISENC2) set (OGGVORBIS_VERSION 1) endif (HAVE_LIBVORBISENC2) else (VORBIS_INCLUDE_DIR AND VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBISENC_LIBRARY) set (OGGVORBIS_VERSION) set(OGGVORBIS_FOUND FALSE) endif (VORBIS_INCLUDE_DIR AND VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBISENC_LIBRARY) if (OGGVORBIS_FOUND) if (NOT OggVorbis_FIND_QUIETLY) message(STATUS "Found OggVorbis: ${OGGVORBIS_LIBRARIES}") endif (NOT OggVorbis_FIND_QUIETLY) else (OGGVORBIS_FOUND) if (OggVorbis_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find OggVorbis libraries") endif (OggVorbis_FIND_REQUIRED) if (NOT OggVorbis_FIND_QUITELY) message(STATUS "Could NOT find OggVorbis libraries") endif (NOT OggVorbis_FIND_QUITELY) endif (OGGVORBIS_FOUND) #check_include_files(vorbis/vorbisfile.h HAVE_VORBISFILE_H) #check_library_exists(ogg ogg_page_version "" HAVE_LIBOGG) #check_library_exists(vorbis vorbis_info_init "" HAVE_LIBVORBIS) #check_library_exists(vorbisfile ov_open "" HAVE_LIBVORBISFILE) #check_library_exists(vorbisenc vorbis_info_clear "" HAVE_LIBVORBISENC) #check_library_exists(vorbis vorbis_bitrate_addblock "" HAVE_LIBVORBISENC2) #if (HAVE_LIBOGG AND HAVE_VORBISFILE_H AND HAVE_LIBVORBIS AND HAVE_LIBVORBISFILE AND HAVE_LIBVORBISENC) # message(STATUS "Ogg/Vorbis found") # set (VORBIS_LIBS "-lvorbis -logg") # set (VORBISFILE_LIBS "-lvorbisfile") # set (VORBISENC_LIBS "-lvorbisenc") # set (OGGVORBIS_FOUND TRUE) # if (HAVE_LIBVORBISENC2) # set (HAVE_VORBIS 2) # else (HAVE_LIBVORBISENC2) # set (HAVE_VORBIS 1) # endif (HAVE_LIBVORBISENC2) #else (HAVE_LIBOGG AND HAVE_VORBISFILE_H AND HAVE_LIBVORBIS AND HAVE_LIBVORBISFILE AND HAVE_LIBVORBISENC) # message(STATUS "Ogg/Vorbis not found") #endif (HAVE_LIBOGG AND HAVE_VORBISFILE_H AND HAVE_LIBVORBIS AND HAVE_LIBVORBISFILE AND HAVE_LIBVORBISENC) lmms-1.1.3/cmake/modules/FindPortaudio.cmake000066400000000000000000000024001247673406200207740ustar00rootroot00000000000000# - Try to find Portaudio # Once done this will define # # PORTAUDIO_FOUND - system has Portaudio # PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory # PORTAUDIO_LIBRARIES - Link these to use Portaudio # PORTAUDIO_DEFINITIONS - Compiler switches required for using Portaudio # # Copyright (c) 2006 Andreas Schneider # # Redistribution and use is allowed according to the terms of the New BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # if (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) # in cache already set(PORTAUDIO_FOUND TRUE) else (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) include(FindPkgConfig) pkg_check_modules(PORTAUDIO portaudio-2.0) if (PORTAUDIO_FOUND) if (NOT Portaudio_FIND_QUIETLY) message(STATUS "Found Portaudio: ${PORTAUDIO_LIBRARIES}") endif (NOT Portaudio_FIND_QUIETLY) else (PORTAUDIO_FOUND) if (Portaudio_FIND_REQUIRED) message(FATAL_ERROR "Could not find Portaudio") endif (Portaudio_FIND_REQUIRED) endif (PORTAUDIO_FOUND) # show the PORTAUDIO_INCLUDE_DIRS and PORTAUDIO_LIBRARIES variables only in the advanced view mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES) endif (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS) lmms-1.1.3/cmake/modules/FindPulseAudio.cmake000066400000000000000000000033461247673406200211120ustar00rootroot00000000000000# - Try to find PulseAudioSimple # Once done this will define # # PULSEAUDIO_FOUND - system has PulseAudioSimple # PULSEAUDIO_INCLUDE_DIR - the PulseAudioSimple include directory # PULSEAUDIO_LIBRARIES - the libraries needed to use PulseAudioSimple # PULSEAUDIO_DEFINITIONS - Compiler switches required for using PulseAudioSimple # IF(NO_PULSE) message(status "") ELSE(NO_PULSE) IF (PULSEAUDIO_INCLUDE_DIR AND PULSEAUDIO_LIBRARIES) # in cache already SET(PULSEAUDIO_FIND_QUIETLY TRUE) ENDIF (PULSEAUDIO_INCLUDE_DIR AND PULSEAUDIO_LIBRARIES) IF (NOT WIN32) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls INCLUDE(FindPkgConfig) pkg_check_modules(PA libpulse) set(_PASIncDir ${PA_INCLUDE_DIRS}) set(_PASLinkDir ${PA_LIBRARY_DIRS}) set(_PASLinkFlags ${PA_LDFLAGS}) set(_PASCflags ${PA_CFLAGS}) SET(PULSEAUDIO_DEFINITIONS ${_PASCflags}) ENDIF (NOT WIN32) FIND_PATH(PULSEAUDIO_INCLUDE_DIR pulse/pulseaudio.h PATHS ${_PASIncDir} PATH_SUFFIXES pulse ) FIND_LIBRARY(PULSEAUDIO_LIBRARIES NAMES pulse libpulse PATHS ${_PASLinkDir} ) IF (PULSEAUDIO_INCLUDE_DIR AND PULSEAUDIO_LIBRARIES) SET(PULSEAUDIO_FOUND TRUE) ELSE (PULSEAUDIO_INCLUDE_DIR AND PULSEAUDIO_LIBRARIES) SET(PULSEAUDIO_FOUND FALSE) ENDIF (PULSEAUDIO_INCLUDE_DIR AND PULSEAUDIO_LIBRARIES) IF (PULSEAUDIO_FOUND) IF (NOT PULSEAUDIO_FIND_QUIETLY) MESSAGE(STATUS "Found PulseAudio Simple: ${PULSEAUDIO_LIBRARIES}") ENDIF (NOT PULSEAUDIO_FIND_QUIETLY) SET(USE_PULSE_ 1) ELSE (PULSEAUDIO_FOUND) MESSAGE(STATUS "Could NOT find LibXml2") ENDIF (PULSEAUDIO_FOUND) MARK_AS_ADVANCED(PULSEAUDIO_INCLUDE_DIR PULSEAUDIO_LIBRARIES) ENDIf(NO_PULSE) lmms-1.1.3/cmake/modules/FindSTK.cmake000066400000000000000000000012201247673406200174660ustar00rootroot00000000000000FIND_PATH(STK_INCLUDE_DIR Stk.h /usr/include/stk /usr/local/include/stk ${CMAKE_INSTALL_PREFIX}/include/stk ${CMAKE_FIND_ROOT_PATH}/include/stk) FIND_LIBRARY(STK_LIBRARY NAMES stk PATH /usr/lib /usr/local/lib ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_FIND_ROOT_PATH}/lib) IF (STK_INCLUDE_DIR AND STK_LIBRARY) SET(STK_FOUND TRUE) ENDIF (STK_INCLUDE_DIR AND STK_LIBRARY) IF (STK_FOUND) IF (NOT STK_FIND_QUIETLY) MESSAGE(STATUS "Found STK: ${STK_LIBRARY}") SET(HAVE_STK TRUE) ENDIF (NOT STK_FIND_QUIETLY) ELSE (STK_FOUND) IF (STK_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find STK") ENDIF (STK_FIND_REQUIRED) ENDIF (STK_FOUND) lmms-1.1.3/cmake/modules/FindWine.cmake000066400000000000000000000012551247673406200177370ustar00rootroot00000000000000# - Try to find the wine libraries # Once done this will define # # WINE_FOUND - System has wine # WINE_INCLUDE_DIRS - The wine include directories # WINE_LIBRARIES - The libraries needed to use wine # WINE_DEFINITIONS - Compiler switches required for using wine # FIND_PATH(WINE_INCLUDE_DIR windows/windows.h PATH_SUFFIXES wine) FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine) FIND_PROGRAM(WINE_CXX NAMES wineg++) set(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} ) set(WINE_LIBRARIES ${WINE_LIBRARY} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Wine DEFAULT_MSG WINE_LIBRARIES WINE_INCLUDE_DIRS) mark_as_advanced(WINE_INCLUDE_DIR WINE_LIBRARY) lmms-1.1.3/cmake/modules/InstallHelpers.cmake000066400000000000000000000022231247673406200211610ustar00rootroot00000000000000# # install all files matching certain wildcards below ${LMMS_DATA_DIR}/ # # example: # # INSTALL_DATA_SUBDIRS("samples" "*.ogg;*.wav;*.flac") # # Copyright (c) 2008 Tobias Doerffel # # helper-macro MACRO(LIST_CONTAINS var value) SET(${var}) FOREACH (value2 ${ARGN}) IF (${value} STREQUAL ${value2}) SET(${var} TRUE) ENDIF (${value} STREQUAL ${value2}) ENDFOREACH (value2) ENDMACRO(LIST_CONTAINS) MACRO(INSTALL_DATA_SUBDIRS _subdir _wildcards) FOREACH(_wildcard ${_wildcards}) FILE(GLOB_RECURSE files ${_wildcard}) SET(SUBDIRS) FOREACH(_item ${files}) GET_FILENAME_COMPONENT(_file "${_item}" PATH) STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" _file "${_file}") LIST_CONTAINS(contains _file ${SUBDIRS}) IF(NOT contains) LIST(APPEND SUBDIRS "${_file}") ENDIF(NOT contains) ENDFOREACH(_item ${files}) FOREACH(_item ${SUBDIRS}) FILE(GLOB files "${_item}/${_wildcard}") FOREACH(_file ${files}) INSTALL(FILES "${_file}" DESTINATION "${LMMS_DATA_DIR}/${_subdir}/${_item}/") ENDFOREACH(_file ${files}) ENDFOREACH(_item ${SUBDIRS}) ENDFOREACH(_wildcard ${_wildcards}) ENDMACRO(INSTALL_DATA_SUBDIRS) lmms-1.1.3/cmake/modules/MinGWCrossCompile.cmake000066400000000000000000000025251247673406200215410ustar00rootroot00000000000000# this one is important SET(CMAKE_SYSTEM_NAME Windows) #this one not so much SET(CMAKE_SYSTEM_VERSION 1) # where is the target environment SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX}) SET(MINGW_TOOL_PREFIX ${MINGW_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-) # specify the cross compiler SET(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}gcc) SET(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}g++) SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}gcc) IF(WIN64) # specify the cross compiler SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-) SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc) SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++) ENDIF() # specify location of some tools SET(STRIP ${MINGW_TOOL_PREFIX}strip) SET(WINDRES ${MINGW_TOOL_PREFIX}windres) SET(PKG_CONFIG_EXECUTABLE ${MINGW_TOOL_PREFIX}pkg-config) SET(PKG_CONFIG_FOUND TRUE) SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin) SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake) # search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include) LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin) lmms-1.1.3/cmake/modules/Win32Toolchain.cmake000066400000000000000000000001361247673406200207740ustar00rootroot00000000000000SET(MINGW_PREFIX /opt/mingw32) SET(CMAKE_SYSTEM_PROCESSOR i686) INCLUDE(MinGWCrossCompile) lmms-1.1.3/cmake/modules/Win64Toolchain.cmake000066400000000000000000000002661247673406200210050ustar00rootroot00000000000000SET(MINGW_PREFIX /opt/mingw64) SET(MINGW_PREFIX32 /opt/mingw32) SET(CMAKE_SYSTEM_PROCESSOR x86_64) SET(CMAKE_SYSTEM_PROCESSOR32 i686) SET(WIN64 TRUE) INCLUDE(MinGWCrossCompile) lmms-1.1.3/cmake/modules/config-alsa.h.cmake000066400000000000000000000023751247673406200206510ustar00rootroot00000000000000/* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_LINUX_AWE_VOICE_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_SYS_AWE_VOICE_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE__USR_SRC_SYS_GNU_I386_ISA_SOUND_AWE_VOICE_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE__USR_SRC_SYS_I386_ISA_SOUND_AWE_VOICE_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_AWE_VOICE_H 1 /* Define if you have libasound.so.2 (required for ALSA 0.9.x support) */ #cmakedefine LMMS_HAVE_LIBASOUND2 1 /* Define if libasound has snd_pcm_resume() */ #cmakedefine LMMS_HAVE_SND_PCM_RESUME 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_ALSA_ASOUNDLIB_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_SYS_ASOUNDLIB_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_SYS_SOUNDCARD_H 1 /* Define to 1 if you have the header file. */ #cmakedefine LMMS_HAVE_MACHINE_SOUNDCARD_H 1 lmms-1.1.3/cmake/nsis/000077500000000000000000000000001247673406200145335ustar00rootroot00000000000000lmms-1.1.3/cmake/nsis/FileAssociation.nsh000066400000000000000000000107061247673406200203250ustar00rootroot00000000000000/* _____________________________________________________________________________ File Association _____________________________________________________________________________ Based on code taken from http://nsis.sourceforge.net/File_Association Usage in script: 1. !include "FileAssociation.nsh" 2. [Section|Function] ${FileAssociationFunction} "Param1" "Param2" "..." $var [SectionEnd|FunctionEnd] FileAssociationFunction=[RegisterExtension|UnRegisterExtension] _____________________________________________________________________________ ${RegisterExtension} "[executable]" "[extension]" "[description]" "[executable]" ; executable which opens the file format ; "[extension]" ; extension, which represents the file format to open ; "[description]" ; description for the extension. This will be display in Windows Explorer. ; ${UnRegisterExtension} "[extension]" "[description]" "[extension]" ; extension, which represents the file format to open ; "[description]" ; description for the extension. This will be display in Windows Explorer. ; _____________________________________________________________________________ Macros _____________________________________________________________________________ Change log window verbosity (default: 3=no script) Example: !include "FileAssociation.nsh" !insertmacro RegisterExtension ${FileAssociation_VERBOSE} 4 # all verbosity !insertmacro UnRegisterExtension ${FileAssociation_VERBOSE} 3 # no script */ !ifndef FileAssociation_INCLUDED !define FileAssociation_INCLUDED !include Util.nsh !verbose push !verbose 3 !ifndef _FileAssociation_VERBOSE !define _FileAssociation_VERBOSE 3 !endif !verbose ${_FileAssociation_VERBOSE} !define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE` !verbose pop !macro FileAssociation_VERBOSE _VERBOSE !verbose push !verbose 3 !undef _FileAssociation_VERBOSE !define _FileAssociation_VERBOSE ${_VERBOSE} !verbose pop !macroend !macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION !verbose push !verbose ${_FileAssociation_VERBOSE} Push `${_DESCRIPTION}` Push `${_EXTENSION}` Push `${_EXECUTABLE}` ${CallArtificialFunction} RegisterExtension_ !verbose pop !macroend !macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION !verbose push !verbose ${_FileAssociation_VERBOSE} Push `${_EXTENSION}` Push `${_DESCRIPTION}` ${CallArtificialFunction} UnRegisterExtension_ !verbose pop !macroend !define RegisterExtension `!insertmacro RegisterExtensionCall` !define un.RegisterExtension `!insertmacro RegisterExtensionCall` !macro RegisterExtension !macroend !macro un.RegisterExtension !macroend !macro RegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R2 ;exe Exch Exch $R1 ;ext Exch Exch 2 Exch $R0 ;desc Exch 2 Push $0 Push $1 ReadRegStr $1 HKCR $R1 "" ; read current file association StrCmp "$1" "" NoBackup ; is it empty StrCmp "$1" "$R0" NoBackup ; is it our own WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value NoBackup: WriteRegStr HKCR $R1 "" "$R0" ; set our file association ReadRegStr $0 HKCR $R0 "" StrCmp $0 "" 0 Skip WriteRegStr HKCR "$R0" "" "$R0" WriteRegStr HKCR "$R0\shell" "" "open" Skip: WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' Pop $1 Pop $0 Pop $R2 Pop $R1 Pop $R0 !verbose pop !macroend !define UnRegisterExtension `!insertmacro UnRegisterExtensionCall` !define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall` !macro UnRegisterExtension !macroend !macro un.UnRegisterExtension !macroend !macro UnRegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R1 ;desc Exch Exch $R0 ;ext Exch Push $0 Push $1 ReadRegStr $1 HKCR $R0 "" StrCmp $1 $R1 0 NoOwn ; only do this if we own it ReadRegStr $1 HKCR $R0 "backup_val" StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key DeleteRegKey HKCR $R0 Goto NoOwn Restore: WriteRegStr HKCR $R0 "" $1 DeleteRegValue HKCR $R0 "backup_val" DeleteRegKey HKCR $R1 ;Delete key with association name settings NoOwn: Pop $1 Pop $0 Pop $R1 Pop $R0 !verbose pop !macroend !endif # !FileAssociation_INCLUDED lmms-1.1.3/configure000077500000000000000000000002601247673406200144040ustar00rootroot00000000000000#!/bin/sh echo "" echo "Usage of configure & Co is deprecated! Please use" echo "" echo " cmake . -DCMAKE_INSTALL_PREFIX=/usr" echo "" echo "or similiar instead." echo "" lmms-1.1.3/data/000077500000000000000000000000001247673406200134105ustar00rootroot00000000000000lmms-1.1.3/data/CMakeLists.txt000066400000000000000000000015511247673406200161520ustar00rootroot00000000000000ADD_SUBDIRECTORY(backgrounds) ADD_SUBDIRECTORY(locale) ADD_SUBDIRECTORY(presets) ADD_SUBDIRECTORY(projects) ADD_SUBDIRECTORY(samples) ADD_SUBDIRECTORY(themes) ADD_SUBDIRECTORY(wavetables) ADD_SUBDIRECTORY(scripts) IF(LMMS_BUILD_LINUX) INSTALL(FILES themes/default/icon.png DESTINATION "${DATA_DIR}/pixmaps" RENAME lmms.png) INSTALL(FILES lmms DESTINATION "${DATA_DIR}/menu") INSTALL(FILES lmms.desktop DESTINATION "${DATA_DIR}/applications") INSTALL(FILES lmms.xml DESTINATION "${DATA_DIR}/mime/packages") ENDIF(LMMS_BUILD_LINUX) IF(LMMS_BUILD_WIN32) FILE(GLOB RAWWAVES "${CMAKE_INSTALL_PREFIX}/share/stk/rawwaves/*.raw") INSTALL(FILES ${RAWWAVES} DESTINATION "${DATA_DIR}/stk/rawwaves") ENDIF(LMMS_BUILD_WIN32) IF(LMMS_BUILD_APPLE) CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") ENDIF(LMMS_BUILD_APPLE) lmms-1.1.3/data/application-x-lmms-project.svg000066400000000000000000002034161247673406200213210ustar00rootroot00000000000000 image/svg+xml mmpz mmpz mmpz lmms-1.1.3/data/backgrounds/000077500000000000000000000000001247673406200157125ustar00rootroot00000000000000lmms-1.1.3/data/backgrounds/CMakeLists.txt000066400000000000000000000001421247673406200204470ustar00rootroot00000000000000FILE(GLOB PNG_FILES *.png) INSTALL(FILES ${PNG_FILES} DESTINATION "${LMMS_DATA_DIR}/backgrounds") lmms-1.1.3/data/backgrounds/lmms_tile.png000066400000000000000000000006721247673406200204120ustar00rootroot00000000000000PNG  IHDR@@.bKGD#2sIDATXÝI Cu4?K/zFYB3HO`n7f6z|lf-u=@޿FSn> g}fcIUp{Xz|&I[_՛[_՛[_՛[_՛[_՛[_՛[_՛[_ȃ(CA *"TD< *j "rU"l[y#\3;\z^ʃRAA@Awădʃȃ:< uNyY O* *b@AIENDB`lmms-1.1.3/data/backgrounds/newbg.png000066400000000000000000001146211247673406200175270ustar00rootroot00000000000000PNG  IHDRU% pHYs  tIME9kqntEXtCommentCreated with GIMPW IDATxĝmrIdP'=tj=ݎQwݞ~ׯϝ߿ku<7|yvY?^ٹvxε;@?=/|׹[+.usߺϟn{|zzzzyyxogi_>===~^K?ׯO"Oދ{\6Y{ww~Y'۾us=C?sα[+gxY5HΘjG}v(}ti9}~~k>W`@?tX ~zWZgp!~ݞ^^^,*9=Scw^DcrN^ ?:#n@^cg}rϟ??[sOI硁QϏkS#qM 0~s_{?}{SF'&{?VϙZrܷ 8'p#vA~Yc+Yn6CshW?~|jgԆmwNgסU[-͂^{{ UNst)kxͥT#.S } -B>X5zgөy|^<|zp&wN} :y~~d mpkTxI#v1jX pĹ=4ЬNRG۳___#iݏ-^A' 95U(V8÷O߯VĹg tL^;ݳ C%l32}Ǧ~]`]ĴYj)CP=_wk@m.>t^o0 #sg)H[P`3uXc!?'j:ACƓp얮ղ| g.ݠ51STgP|,\Lx2Vw8 118gwHJ׀Q:ޭ1n8m~vsZXl;INgȈΎm>lh ֵt?oZ~P#ŞVç& kiTA^GoJ o\O+pS3V<ֵrFj` 7hjC2d2k͆Nq75~:'JT(dr\Թ^ ]8߫\CϏfM.eFOkZGH0} ``ytȝ1"]W;RBžz&5bkNg9b}~w)@k#/p\M(՜Ϟ ?YDx']İF0Q@tQnz"sdCuR$'8ܚ.Ш]@wn86#|w*{8,:F d !̩19䎔mӨ3`{{{MւT^WuYmf ɱsijz4g1yua,Fv-ID,h a:Pz/ٿb5ͬi"݌zxY褗&>u֮hh0T|"#L(nV`s)4RǙ(3~6YZuGspu?}3]Bv s|z \0A ޟj>WJI'Q@"׏vN6Wߋ ys{?h zvnS̈S[wWfZKX>ְQTUj* (=i)pq3[1* wlc_H5'П+*fkJ,Dvj3\\g-k6'?׷Z  \KI-aQ{UȊYTshqlmlLȨc$[Ϻ6庲Kud>U|i^⯓<~nD5Ǚ7v0]T4&^3ެ%Ra4|̩O$ȗo 2 coS){S M8{ݏz'kZJԩqܞv1ҕi=Ѧl;&w804HI{ZϑJ%5d43 n -~B .sZ9dQ}#dCݦ I̙)q31Մ2c!M4VVwooTԜ(#YPBF0QtΈ8v&؁\RׅG<5Qx/EϮp4pRX65ܺu qusl)軤ܴ/0(HQlR͇7CsSY!ewoy)A광GJvd>!)j[tZZZХptM}PǜsustaGӌkTW/h)>7c:KW qk;M҄Ji晴F uӦZfj>#| an9&AeTm? V0BBRWk W mcަИnh'XMYtvX*pC5tMnTOl]Lz°"pv99FLc dXUcBr8(,k!ې/qFʦ|IpE$'B ǩ@0N㞜?vi\"|IS5(ʼkYN=sʪt]ݱHvA#5pGNc9H2qA51IpZ }r'(Sy sC,Ukul }\E;熈]!UoH1Lm|.:TW2s9En:i I布F2"n=ӟ5 DXd-Eyw;T^H6,_nH$h4cgؔyG%\&Þ/ 0[raYuȝIJM)F] 1H)g-(z$$Gm7k@)9b[\s=={nSk`%!rDʺcʩ=ΈLO4i(*Io#XI-ty*Y*OFwHAMۗסi'kJϑ@?ů{6jSf[;unӌ˩qbJpcL?I1%2E^T3N| 9֜$VmE7SD%b@`9'TdӷDAdC6YDMhOXjw3ZrSHͪ"̧pe\P1 خOfʯh̀.Jlڪ&cd~T\VC'|O5dgR)wTIEtϼGp#T8l R -C1A~tM 8 jMrS]SbժoW\s-o͜˄R7F:I߸əjy̙9A4K t{NGgH)+oF}!<$Pu Ov)4`IX9Q%WsWR¶/jnjanO<2S$~ƢSI 8bꭦ|u*iiD@pۚf[MdD8a)E` `mJ2c53LQhO:(*]X"DkQӨ0M."b'(4Vvhr0EZrTlo{j͔C]$޾4MgJI?GkMA_F[nsMm bl&`A:۱3o NIcRrg)UC|CEGNa\[ᾓA0Sل Z/Ij1,:F:HIaLW\wM黚N{%HdI.vA[TlZR@ٰY:6Re5zs j,8ͥ)&/5:W0V'R>$z#&"x椤gtMMcwc\Mj:+79ivU*np9lZރcj:D2YHL,niifjOՎ')-"%)ro'n`>O v;Pb'C nq2Tr\⊟n4Yz nMAb1+j""QW2ԓF111?_цyZ+Ub2帮*ZHuH"mi Ϧd!Qj*0JBi[2G@60m7'N8;M).;jtb\6' 8aɔl"s]:MM(U*6V)m>Zҽ{S].RwلLfRvݻ9?mjdӛrq]T6 VIK $ibk0-osZ&i7Vq;uj$`>NtIcǶ,#+94'${Ag:GZ.k:xLv/ e/%Y?J t=cv+#>փƝ;ݪA3Qf:WHRGܘ8_Irluԇ;DFHSEE<;?G62WzI5mjULI dqGSyCfIz]*C9pLS'.e[h6✩@[4ZtÐ#N+.(YV3r%)=s\ilM09)ҟn=7̾vc8)z c5!5Fs {v6 t4 6s0{:FD7L+;(cĴ6QNr5ᵍ첍IgO`2 5M[XO>ge{XS M&;MuM2iCZkWI'sr0.Kؐ:v[mvsI8Qu d-spԑ<ًIӽ MS%'۸nQ{ 1-E21=9% Lp%DH nXcwКj&hhɽHSfrfVZty0L~v>,dfcd'9f6gkت's4ɆL6r,6e8S2$B=77谍m){);lܼ^IYئ`xy1LMshjL^s›̑Y2ybB6c hI~a)KR)'BThp,'WY|ӲKԩ_h#j Vsb"8(mrgkSǛlkQݶ8eXMMa9K/LI=`wIݦɆ_Bdü]7t&@J!W#;َMhe0m!n8?AڮuiZٵ(4 9QVqM9|b٦QxS`VSR3 |zLmQl7ȦDIP8>I=a׀ڊN&aS`0: rh\t/ba5M=sqZ)MdӚqߤ8a TGq0E:09N]W28=~L75^6.[jvK)ǔ-Lun2qM)[ SSorRM{3I(' f~_~=ݸ8'[PP'Ɇ11lj^jN hr&h OZZo6J#] D46:L@Svq5dDb VikH2Ε:F[ɠny!OdzɡMS2l.E884I t_|D=.ND. ڤ$rU=8!IMP'y6g<6l@"n TYQfv11TAYi ] C%GNtjR ^I2G ۞߉ Lf , 6^3E> ~MKD|uIZio"v$ l'p0s t٫J jL ɸQM~jAnզ co L~w5}:LܠS6z(ގ΋%K\FnrbJ[ڙ1tSuĴ)D벥j/QcМcws#Q4E[f Yk1~h*c2i©:+ 92}Y*(:Z$]RrSMMbMgRcf|LeLk9s;nչ2&X(,%fE|nZZFO{1M`V3Hk2­= .N~$(9ͬ+usƩwSWkLkEpSIM+ϷF~sޮcW+LuNH;C99P7Ry lQ(0Ff'ߖ7֎UGXFS6[? 3J4 mb: Ο4Nm=yRTIɘk`8}eP"-lUVl&)(pMc;(74~N9/!K A8" U7g jnNZvC΍R-g[ n.'<8&'BbBuj;NV_е^{s/`㤶 _7At϶`?{F_Ɋztٹb:=- 1Oڍ Ѡs/4uF/P|3pJQl"Ղ6mU5"E&*vq0&NMDindӹQ MhGeNA98ZeR_l9eg{tr8pU`bl64r''>0g`f%v>;TZnR5LHMtz&St4}J< CRhkM:ëSvIH )z0>%sLPKʢ&qI5~jn2m^C#Hif6ef_t[{ݶGڕk\y+ 5I<8|9Gɦ'[gkOVW-QfrڿMA "=C6LR'}&h705jMN9X66m8Q60l;ӻm§ ?Uz$sBh4,'YfT{+0~>zͰ}^qsn?C-͈Бv~clFYͼUgpe& i5JKx#wp'm]_NSzm4u;yd)gA#Tj Vms~@#*z7;o)s趘}:{3-*l |W6ߟqWa AfRiii!:E~ND?e]X'˽mm[c06vVѹ=]%r9{ ʜJ7Z9]h'j=]dzZĦj;(1*yب>˚eC-q]L0Z~Gnz{^\sS:Tt(YbW3MIĕC@lx8: NT7(|#cqvw*nk mEV:#*`q RN,QSD@3aӐ>]*5ޓl%7ţȽsW͕szog<̮/{:ޘFHS,[\U%ni5I{M)mE,“WuT7 0aN9AvP9h 5ܓS(Nz1d4x G#δ@b+6W&Z0#}4VMRmbg6mHjhRBhJ[Ȇ26ն;^o$h&ujs }<Fgb%GL>? ʛ4ylQ֧O== 6bj JZL0nK eot('xǟq,v l>Zܮve;`I p %I0қ$~^٨nX6X2A MpAQ3ІNf/|>wͥ|wN.kJHp% `==:bx+mcOq:0 zs`=bw'Zq$6ǍjT(3CH5s+#IZ,vOQrWj3ߑ8˽3&GVA=ns˾]>Cj-Tnwݒ0 6I퐲f9W(neRD~ckͱ]uG*ԫ U'8Pɍp[ؕh.h-B'R {kS~m{m뛈 _hW5ծ,4# kA: ԤM$ߢ+,ƒzZLb̠'a39mt"'p"CC2k6r",qNP=I-5}һR_ڔ 8Ks+K@%(BxboC:9Q!LTpn/{SVM>?hNą-hC_ms[F̱? nզ|ȄkߕZҳfj=$H1#}Q[ٳ1MPL%vEalix8N1G'4Ai(&&81jǩ]M7WPf y /o۩ɱ-֜!E 36M;njB [x3^ʙhWt˽lۻh83l 748M N^g칁}/urj mT6FmU ŵٔNjW$6`6[$LH|n!wꯚ֨LumpSoK:6?st,#MMbzP6#s{F>Ӝ)NuF\sStb9oW}Y}Սu ?m}۾{le?~4Xj2Ø~"&l},4)cJ<75iû<7{u.o߱ZkV~'s)U1}whF[gЂ\sԠW=mAx/?_ &ua]2~ӆlҦK3QLa ~#c6.'IqJ̚AjC5R9INEqFw9C0DORvsί|~alfSrPW aMd63ޙ:ףTJIHm[XޤixW*H-qEi$ƽZο___ccjbt+n›n9NKl̏D}&L@&H3-=Ie[ksh]hC'FY0onjޠ {mQZVZphj3A_c:zM8c(5Ķt|-Z: D:ѓaG3n@3ɀ0;07|K8SR 51.(t#ݠ56䕒F]jbBgLi#WaN{ wkWs=znۖ:RVT[rJ#4%A-?wf8xl09#\$0vM1twȻ\Q$Fi/4WʢJX˲;l3YfD&puߵoZ=%'XmaNZf-ګ+c4dL؟o%%?s|̭z85vJ2ECY'x*zWYs3Ժ2V#A f&DM4+n6W8Nuw\ȕk-okM^ =CN&n2ЫsڬUQz4 a7;ׯaٵVIJ WW0+=W.v||hڝ8OAv-t $)'8#9mq]s.KN MP z^y[D8Eh19}Cuw{ޱe7H:Ty&^'꽵V5_\7R10eR͋owASIC8礪kjR;IOp3IF}/aLP/׍ T@`M}uKwzĎKk+ҷ&P1#jל4_ell'kSƶlҙ~/ul)=4- =̏<:]Nw.mTEcCaZ( S#^c0$EJYt6k{D+fUq] .r% aq+`\kKpF |S8$""GW(5UƱo>2ESFFKZO͆WWژ޷.=M&Vm -H{S4 { F+`5^5sv8 [s3.=Q`8YkjK=s4II eF 2eN{'5VMɢoγkߕfL|AtΘb43e, hhm}k{\4 \?g}a%>^'sHF]кgҨjն;*ZH_AʸV,r cuչuLs9Nu:ʶSIH87mL:N~l"2lt76ux~~ Ğc6B6-2q\ɺȈk=GAH U‰D"st::3CZ_{96;jK$c^{|Ҩ #UCF_As> YWN&M5l8JԴs@~9^:QdM@AWt\(fDR#ΉgC?HYwYr&m=Y4g01J{(A4sc4=ES{c4qx.CJMuo-PGwD:Ӏƫa)%c9MjMkMܛ@ۚ#jo wFlj%@'륩5 IDATgݻ\muJJ _ThaRʡG 7y#M.A'(F sj[]&l04iuSCwݮʍgHVCH( ~]O 89 Yszt@]n?`w 8/E VjzTiW{'yH4=ur+G5CQg@]z>8Xo_H7ljLN@#ܔ(<#y=Z89@yOdXn \N혼jUĚϙCBׄq$ֳׂxJ،i2V[A*d$ۏw7`)Mm ܌\:c:6͞\f\,\MmsrCˋ63[Fm @sMpd ¶v\@` 9@>9\ڤ4@϶}W1&1)?Hوl9&He[[j̹)RW#?WwĐ:k1ObFcX տSh<7wE# lgsZfEHm}_ M*nU1t6h\5'hz维v{J09SSMj!AF{O4^mM5+R@aD>P+UI)Nu0$9on/4;Nǭއnx:GGNmwX\f";&пK\9/1W`I{pwN{$-.׋llS[㵓$_{qϛ4fgw.=\= t!5@sاyJ(JCrC8+PjkSsxSwꐚ,Ib9ϙ:I{狴Lp"3mJ-Ĉv < ֺLa?'ׯ/Q)L&ZhUf&:l%?hʚTXZ=EG9EƹgwVy#\Kj8&+6*{5$ҙ=e 6f#*L {@Iw,47ꘛ0ݨ;3j#T5Ы# a9TWj:Di|ʛu7fYshM}9'm.oPΔeN\Rp5[m}:e$ ІلFzNyš"-cv;F#Yps`NMipyt6]ANڹH]w6v&W~1Ң:&z^z'$-h1^_n0MgwK9Ooy]FHpX3CwpI|:tI7׆&f܆yEfrlٮR f4#ц45G[񞞟?k4G~;۟aŽTOJ'wZ\3q ;FwSBAR|-dV ֝آmc"5itx߳xW9o0 &;Ƶ`l)6ιg;P\9Aq (iCiiI^VcJtlܒsDitXB:d55лvr`&?66s-R N^d/VO%ّ:5ڌ. eZ | pЙ5J\g7g"&zW&2rtKW޵hNNvNHwrC.=sMr) ṽyh\+g[VJ?edԱ0H,ǁX15G{|QaҞalgߥQ#!đ~hD5eӰ-6Xc v|":` t&x|N:ĭ UdxT=?N'Q6LԒXq:m90(Qk3LJW|Bb]ҩ0zwAisVC.ii_3zL  APqwsg#)s&R?&3i1tSK#^&.)ch5B'ܫM 9xe1n(# )ʮWA"{"#N&;2I'/5pOrEzoHn<6N 6J, 4."kw.BK#)N C`%fv1qMӈb;d܄i5f.CuF, ˸c:i8ˈiܿ;zˊhpgADQ2 Hgyc :I}Cn{{%l1H ^OOOO 4a3j`HO,)UN0kl٠qLAJN6%3.p9a4g3^ņGfdʖЌ6,껃<5$5r(fdY "NgYVw#etɬ 1ZC8܍pxTtmMec9Y|נM9v[ӷJ ̄Zt_ܜswMtք`zHc^ܾtʺ׶_{tY`dܚe͝>;n&h٥Bd*V.i{X{@nSKNM<g,d##Y :@y1ڌզ<錹٠=LIkne9MhE3VӻQg6}KL7?ߵz:wɍfYyLQ>(GuXWYi46:)47G{un&xFo"$0^& ϹIwOkS4TOj)zEѓ]qL-:a"8Zs+߻[Q٦z9JFU1Aܟgz#p ۗsz6SS-)I49s3!iynmTCjM){o8ݶ\mm=銘IsE M۔t\N_GZho$Ks~W*^tz (u:܍@as`6 );XʰhDG!v\!m; A(󓞞ެޣkjw䂓ߟq7Nِd=I+vS (c2j@LC&~%tpяcCFvY)q4d7xLa2{X@z:T/M2tMϓ>{/yg$ 5b67|בROGAnOooo1zQq8 ^&a)^Y JQ=?dSPhϭA]qD#zѐ:EwuDI5|cV7]i& n׆)[H޹K-H&T1i@'Y|>wD֞'tMNR]Ndړ DȖ~ Y"3"yV7zgݤ8IT QǍs3fMϼ:ryI1VYjftٚQHvG68k IdJsny(I%r~]#n->єl'Hx*;V&b2–cޢ]/K2VN]ߍ?סJ6H* ndbϝFl::=%O|ӈ& mކ5٠u{oIlSt6&RZ4GFv2#}`8GN>mTWuފn6sowsɠ'6,*&ۚ}O1@rzZ|yykz.sn{d K]էZO}NknԾg}IZFk.m)Q9uddqޒõ9&( tl |7TT+0)8kkYG^|M8"%?$BWC\H,Q=w( Sy&^GVKMGc6ͥQG*{ªD9qSP3C:}΁ԃȃ m1M7NM|ҞjzShY'x. ,lSF]❉O5RvXS_}\+gEw ĘaWy$;+l 6bS_ؾҿ2멶n$ Қhveoۨ=iikr>juO///u&}MeSwX>YߤQ;yr- om1Nls46F8৏U^(#n"Xp],k[MzKr&hӬ>t4nC4WkoZq߮&`HPk'ݷ?O<'t kƪR"mio$47fh> TZD?o6c M=lt3:E&k\}Gg < \1j=6Od4]DsˊAN}WS"izwҵm21,NNȝ)=3z;{Q39#~2"|ʚfljLCaセ~颹i~}+ O ̺GњspJȥ1ΆV4169陶Q} IDAT#l73rΩ(8kޗӽKmd}*;Xƽ0q}A79Fʠڇ46c"l&凩e9 9Mp8џ[zQMk86Yp5HzCKi]6tz-Zn7zMf>Ng[KM&DѴIZF~U| r.1dFbL0Ұ@fiĆ~4GmwF Wl{9.cHpkx6EWZm긚t[8 9.'|Bdf-@(S}8mݾ{9&fmC3es^~752cx= JtgeWTNIʟ_ќk=t&nV5Q_9LwSȮ\a2S:|uZi蘜պؕ5ꜷL6e;1x6BN5Z]I/Ui/mUg>eFzX ]&84DJ[ao7tTO&6ؔGZpyd$lUeI1O/U2M!^ȳif vL]u?.ui6Fۉ0IfVνy:9TpђqIu2:g~%ZhYf<Ƅ8p]ׯ_&榖:Нq\AIFF) !E.49˫,!kp6Hoc@`QWEZVj?Wz!I@eE&d]yjL.ڨ L0tsq/ltjp;A{x~iC\HDy) c?A- Qn}Gƴ1SVkmd G9Y۫.`æw9K9mVl%$uZz^Bhjf P]N{dDjj|CJ(H1%t\4;=ޛFCCi;pmqQwRv8}r6{1G٫RSsWU]]mRHմk)cRF6C:2+.9\oΖjۉ'sDrs)хM0tqEeo037eL&h]ј'cRdmmhalb'er 澓im5m=$M3mn)Jb7fB-&1١Fb6S^֜9>/Iޫ~*mrtFw#¦@aIM}1rO}@m];1MmLNt.PBGdz/ fLnZE'apm=}3M/]@}5e`X h5[qV~6% p$u0LX1SDzNRfPeSn5==ʈJjiM'reu21 ݺ3Q nh7NPPal NeI}z1ZC,ebr+ۀ8DknGMMMM&5k̴앂OOBjH]GSLžIq v {;[ؚE]w^SO gKi 6g qp׸>[i*,Y@fqͨ7rʌ~hΖ۞Ն˔ s/:mlUg*z$6\:C&F4XILכzdӚ?q"ZϹb͛NEh L)hٗXT~4k{ʸIe-fG~'B;Yt :hn-@+ڠk~~qdtSwO9inN#LdO4KP𔕦{#KԪs};SpP/fvnBکG}? aWL0@.%w,&;`!4~sӿCиt&Ɖ ՛'{bmhMd679uoFsojؿBbjk?iI6`SOOuB&eǕzy H&+Frojŵ){Ǘ7#Q^M=;i֧l)u* ~Z&V6K{(uԠ^tXuM9'1A=LYU ,jưLb_Ԙm2OLDsm E^k!⺎1:h V|lv6j@U+u{T7ԓ2LӞPBm5`tϛ?~iP#I$d $*ݼIjMS6&7)k}h[b zYo(6Nyu:)뤞Pfr5iN*uL[ߴyJ?WGZo`Og/Oɕ3)F([pP8c_ֻg|u)jodcvߤ= ~Gs2ٛgvj6#jC h]*)0lp>w[sP j:t@d:%'/uɕ)N#jtܢ %1hatpoI({a.r@c":![p461wʔ箠Y07#LS6);|#\dI1" g?nبoOՒjY jxS!֭C:\='jJsҌ({2 $lee6|dO%45O0Քuo3d6*n/k`J 'ϟ?UCڤd:}M-52y ?t4UpVWGv\sF3k'-6ЭGPՠ1CtCMNEr5[# %|4osͷ/YݶLd†LM 73RPv3ƭm*STM*ZV 4}漇,l3M(C"蹇ԐM 9M49",Hۢ{m#WEG2孠4Ogq7v>{Q\!Ҵ߿Շj@gT߰_ޤe ᢂ#htp'̈́ݫ: n{cT:Rx*1s֬R=}iMkPT65dN !tT3kA;wnb;3Ǎ m@d4G Л8#r)1LNzDnw&Gt-ao 6!vb%x?|z4:ԃ,7&\ ?l?ou( Wz@{[d׈fmtJdu-ɮnIMQm>ux)}4٤Ŷp;[haKw&I<M3O}igSQN9R]/ nFP{MHI5M/=w gwA.mFmdG} Ύ'{}:gJfQ|؎Fϡ+gSgz4>8mѶab'RVd:6pIWA ';hPAVi:Jl`e j'%)Փ͏-j' A`[P36WhFx՝CDEλ^oo6Q7PC_k5{W]-ST:sM3m7"ics܁i\3ecm:M0 :%6g{|^uTmиZ9)lѤ2+n/ّTJ#fJs{V'g'Hݗ&9zFN ϧ+u)W7 U5+t=SB>7Fٰ7#y槧W l{)<}w"S℟7ëMA|mLl:N &N =ՠ<1NA*ns IWυ~{!CFL5$InRoAUAævY"W!%HVތ`5 ~~zz}}=wi}iMA|{{[mcLqY]rۂ"t ƺVDӵ1["Af7SOmF/J`{烗o 5:MFJ<1B緝m@v^[`JnXmdlm9ܚ=1[Ѡh$ר~6HnҡK .&o6ЮTՕɷAyW:IFEtJ1m- z EP+,&` c"c$*lFLGi4cjڿYgvhLlwl~cm(5sQ'z1-f'^ӡqD;hu¼Hk71ئ{Ks0h$ ՖApp;ޤǽ$f# ReCٶ8Ir9R]dېيrZLEц/bc}e 0RLfܧAijURKsLkOIRgKcP {I05퓩و )@ tvԖJv版~sljb]%ln{˯ԨU@t}hٝAJNB. 0'FJ "eImTvʴQmH5 ROk36%7ț&kf4*:)IG89כZkjLk7};f{SӘW6nZMuaV3mі^Җ쿃֜t"9qok sz*l͋CmaKOݼԷs)MO&-6ڸ 30 Nh`{6mow.QZ׺cF3|Lç(S[jDhw2ז:o'ۙm=Sܤ)(Քi>i/uHJ[c%&6c1Z]N0Y2" GvDv4o8/M\4س!9og?9ס<9''־?eKgL]WRSR gq=5iPss%B3ĭDs!yM69e:wJ5ػ|2~>UKXscFhwGU'9RQNht  =3s8V|#)S#a<8;Cmj$Ȟ=j;a9GςcTM8iD}纎w~Wk,ݙ8>$c=~Ү3ra358 uԃ46UoNΩgP&'G! '_ؓtcJhӬ ʰhT2lu hg'ʧ;.k=4 =4 `bnW7}Su'}C%#h 'a0L1BXY3ƹnar3xjf,aV"٦m`z2Cu"$A9?p~Cϑ9OOOO7W҃TB)J?pRQzZत"x/!֐"wG QN.fmdQdK |73Nhi9(H?|Nt ;{q5SV:ADhM p h JtȐv֓pگ"GtHTzb%Uff:(يA+0w{< yfn.ҢT<\1t6q27zOpXuvԶ[CSHF|CnInӿܭ-;M3fYVCIBzdMc2'(u&a.3I{W׸zmڋz\?4&ѢBI^ :x>D2`"}zxY`H:u*bSApW(S-EW ka5 i6aq}u]6Rz7)Q&ϣU2x=$'bfd4F:wՠup91uK껜R;ΙС~SO׆J4N0ru]6nH.S`:cw9QgͰPXAG<=G;oUmλw\DH%Ӂ`DlHu s&G|I2sAATF~0.bRokir;Pe3miʂ7w;Y8%J<\iH*|Z e"=%,=MgogbWϪ; 62I$iN[eպ3v༳o9 S#>i0r9;SjܩptSAi]ciqݵT ~WbD=-*'(DL7{)G75Z$#IJ:)druIjY=5'}8[ %pӲTsLF.e"ldlUкfsD6M@ڊ넉NTX}LCFEO!5n*q;αȦox$ʚjr=:!>,<:0|/3 =UY"W~:T'5<һr"lT^j# =5ҞrU &X`>}^%Ѿ821[(~//Ta:38XtT׍C2V)x+2lPG@OXIDθ޲3.ޯ.qDa3xBIfdXq,HtݻP ٰN0eܺLai:鬶zAzhPͬM=iLԍf2:2t\7V|Ov ]_6mZraÈ[ z`1nͩsO3V}'IDuqxZbY3Afg_+;ʫ|sHYQuPǣ,_Ĺ>GN<_!Smdt OjpDXkstfLoڟjcնH~|9O$\I5Vwr0 I%2z)rJW<2 >p87Vlaq¥;5k3 QG]@C3^Q(ղ~qmuNluϔ = w2q:fxGkژiVQ8{L3XuJ.>8eBA[b="#/jfA9Rr] 6}?Ep:9MJUlP_4G[g4,7WsI)N6[ʽI5LJ3T;@)prvR%.;h*i1 Z̦{g`M:{މ66&::^uF2aq SD{&= 1^^=}CYr%xOn&- eI+x"`4ZO gU&0ub0ܤ\i Vqu 1fԦ5M1Dnj4YZ-J/qgޜH+c5PNDh|w#v~ՎYiu.dhG6P:d%y A)3̷ui3ɿW*s8$4<j4"ެ2%ƪqx5;wֽmmdQ9V]"±;(SakO7G=nzľw@pIJR9 2!,v"<3O?d4"Z߷XwK,*=(lFz$H"SBR,w{[ЉneȮM笜򁳛@=;e@fYB.9,>nzFzjl΁qNGS T&eGTw9Chǩ:^3:݉G7*(A;th=))oMFF4?zXy:2rtY#U݇\ed\."o;d1a2w6ە]JNX#p8-9"P'NAP2Jb91)W$n©|Զ9m{O5$HX*ءzؠT"܆OV]ķO22nOt}ǍcOl!L2.up6 I)RjnwA֝צ <kl$B4aX7E1J!)|O"9IIMq 0ߟklrUwst5'ǎ=K"muj Y 8dEUJ8eDkΙ(&?sWshzRTFp Q 3 sn̄c9 l9 t=ۧ^u.Gj$m_ D{a>NiA͠.^Q)I閳6G9Hx$QOߔ#=Jō&Țښ|YKیy'$Ě͢}KAt.p>Eh۝<ܯ_>O%F\={z?c+)rZ44 𹱽`(-ڱGեFM?9+fbIKxuF3vN1q6#-'HEyqîd ͂t]݁p~垙wPms̜݈i_1.9reA\טvwvQe&r>#lHSQ:y&HL8;A%zكKd}}'ڶj&y(2QYӢWW<3wW׊tȤzYF6QcL3 TgKR)=wqr2˥a:jʩ'rfQ0 RNU]ַ(E%w~1Qu aA Ĩ ᘬd=zs6"Xkpk!ш_4HQjpwkgY5rNZ)s/ֶGӍ8W@r΋.|rz}Xy9_PK`Nٔ'\pݽ&H5úxZgG!A(]] :~lܛtLX QIcGk:SR*!F=NeH+-9pk====QSJ ?~x믿#N]mR4ۨE;KeuG.;w=}Џ5rx%ͬE I > 6qES2? K73s&T~?{RsEEgo)U\6jwLS,AjD~:"+Ti<E#'(;XYpNV}3wtҏqpzCp#L\6n{֍aSut GteNH,>մ4?ͣ/FzSs1詹X +8XG~i7(t@ƜrՐ;ܻҿKu2z8{v,;0{HhG( jTYRcIx:zRL:[$N S~5ק`6=d6sl86K6צYMFl*/`Gu9ؾkSya:g )i.hCd~qF-J'jz; w7դXC QP*p6XVvx`$\F !(:*j.NH!5BvzjU |YM)VX9#6&!)ՈAlj=csـZn_uB9\ݐIm5CN['Ѿ;:^z>u</{ _g=>r)Pa@9Gv4QHƊӍ%NiUB|I{4H$RI$Ӹ:}Fń)J%mGvoG7(ԧ@gIs>?đ\0DX-z؛5[i2vܟYsgUe1Na& ]է2s=Wp-X?ucJ`(4fF$Q9_s#V+u3.cJ4NKBܝg#D:((i%5s'`C~N#/R()Q j2/IV{ЦZ: fU3B9HֆZF8!aMʈ~A   h&F8XN>eCnr0.3w]K-n4kzT$kW3TbM,em$W,]wfsvȑԿdשIsC(Dxj%n4Iʵ,:cƟ ⍚^c:[cd8.OCt$J8L0+e@,Z"4FkZ佨 ރF꘩,_ 2]>uqsJLY)w&s W-6FY^ǝsVgP1}ݿXc ]?9K{`6펒JeM} ;G5fCbRs_8LuPGgN{ 565& 5??HA#MuxnI֛!q2=95JWb6ލPXQ^dC3t,"aBFgr*J"pUټ 5 !ٳN+$ՐHA85k6Om=N+ď)gQ3N%!5 1$l#q`k3otĄv~;jD8FlPqqՠ#}P om#SƘ.iEEB;'FC{1w5^^^>:׷Fu FHڨaW,+ 0^8efYn )YYu[g1:ae/G#+ƒXUez3ʪH*ʾ|ǜSYf)i&~oo]\Wr+B.ƅY4bi[#cEaRph)bN?[W36ou8pLCjfU>-Xػ\J3auڳNv{M ! 'z'ןXQ2OŮ­U%>+9kBӀq|}xX%y)7T/QLdS*?6`Uh[tfSz2w5Mַy 4!j׀`\6|0X'*[c兙b'_D4M\Z{sǵVSpSNJ 5{Sk=.&XoC5-i0BJIENDB`lmms-1.1.3/data/backgrounds/vinnie.png000066400000000000000000000361221247673406200177140ustar00rootroot00000000000000PNG  IHDR bKGD̿ pHYs  tIME /N IDATxiwF@pўwˮ?x>9}zv\vzKVc> b DI)yNI{qW@d@ B@ !@ @ "bA* x@D& !xDHѭ@R*F@*p䴀`bǜ .XIP̺X\!!.GʲG|) v9S=M B]$\fO86рDbiB|%Gxg_pHIʢ zό+4fCF(y!!@}㙐RrRp;^ {0b$B7r-3̝Qd[R2"\FSՆfv)\W eĤ8x)==erxX Mo9OCB wV%oң)) 4Y>\#2b2.8EBan=da㓒ʡ %T `[+MBebA+"!cq6u99W&*(&1nQF-; ;ɴ>#FL t Ԭ &T1c $`Y9?P .i S!{σN7H%ƌ9"! .SpML/@}  !$4gc$,I q%&3?eE*<~`$8d) k2Ƣo0z?ߩ_z!};@81Ŵ>Ϙ8ݷp,ſ#Έ8fzrHjj$%."Wuts" S5MnfIKv!ń@V7b|lg y b~3X7 o(9CK#^!}`f%)qݦ^H'{*U7_P o$MmC@qO=_G5MAP5ܱ+:33_ 5+i21 bU^I35)ˈ) b؀X>N(eBD `x88ii<'XFpAj|,Ä̏,@ '휱-dOB*Q[EF*ʮ6JL (|H# \Up\o}º"F^ը ]c\\'  5\16ely'Pqa}J31$,$x xxdd!IwAKJD` w$BaD^0uh)7 q0A11\'nU nOցb˒36`ɘ)#bgģ!R@Nn@+DHh^'םpIH{xx@j& $,31 7Wdu,eDJbl$AIU>ORLJ@8t @)_;== 9gQ֡>e'H,zjg$- Dz!\ }`Ek'Nq < > [g{s<] .=;?ia>VO<$] ֺ@=ܹJ QBEJ-ӆdlqj@,y iS%GVsd~h*cӹBЅH):;9e8UACb|*@}j<˷RTmfK xHOӴnJdY/uBcSٱ}XOK^G?ޯv6NPuq-Ϲ`*O)5׋.!k3еW+"aFjm ǽ;Ewߓa M;~~j''&)doi`IJ1ZH\&M1""-i'@@#p#NMRuUcxgĂ2*MQxaN<TtZt%đX`w vz.Z> 5ۂH"3 k%d6x:*=ŘH^>af,Z%D,I34@1tkQ)teEin:7zou蒾vM6]qBkiKH[̺b{_ ?8?]`Ps]!fn3fWNPV:w+')kD-4oFޮGS DGN%{79:Pom;eK$ 'm*U6ӿ `l ,E7 1@86|"`sp름 Ι_7䏙5( n#&@f*)ڀ!yGPnNbHzOz8 diG{3 EIN38S5q3f,<\ƜpM2"0cyEnЦknJ&=͌@ Pi\\{_QuU |Sqoi̽3B޻U>@x4Rɨ<7l@Wb%r] vS ccJN}tGo~Ȗ}vյVkl8 yJVf@O1=#Ŏp4@o Q#Rvd= %ިWX&<ܡz_v)̬$@~\2f,v8zHp6dcI,pv7? - K.8',፴;5G\}ǯ= ͜:%/ZC6%Ym,p'(4l;8hw,Xlܤ##n [dd|]53Ϭ_* T'Bqb\zFZ)hVx8FeB~!'-@jY`-G>bFwGo݇wp["<$ud nZ12XjG J\sSd3R&u="K'Gm$vCĒr5ǵb#"L`Gф @ X3AܹuLuM]O37T- PJTֲ=k2XzlwWbrJHº-1KfL v ˵%XtCG.ʈQy7t0ᐔVj|u['zնC;t) 1W`_TS7 ,T226LсTo,U;92idK*j95gv r; M۵C՞dKC׃ۭCc߲071c%n.(_τ 2-whb3}W6=h@$oL/> tHL1w*Ƅ&׳>wXC2%xy+DtVB<#sSvinU\YEfͰ`2s]f,,\Pгq .Pσ+?Ђ 9#BZBFLj4kop>X>vD~ϭ(侅dS&#u ?LhҩenȠ&<ޭL]U" Ep|Cy?g6iơwZssŨaԢjSUJ6f,cM7i%Dckg.2gYU-:D13p&xetѼ1{qjxF@8^vs7 ;9}$ĜRhpY4NX0q,zW-Yyv(iMO*q)KmoGq=ߊX$〽Acx'HY~1??Rː1P`}~E.)nn e&e#!@ Es,E "!x]LVYrff32dMYH8tSf!Vh0L{Nxҩ -aER2Ek?q»nzZ4aؚ39k)2ҖPxe<>T('dlձό93C~Ǭ삑d)Ň|P28tŽ2? &sV}9d%W\2[~t[0~{+4Ҹ_y;4q(mw1:-%EiݫuAJ99z欒,_rŒj;^wE@.+Ku8AYT;dρvkV'[v!}guW1>'!9bK$Edu*CԈ-دABVΦ;jJ^)ci ~Cai۴#sG>+YJV丢|bb7W>.kW@~}tHy'Qe?@]]FhMVx]@9&Egc+Le ɛ(ϋS?}Xٝ='*l-mbnl|wEU O $f3ˣLQUyaU#3'1ѽ;*UZU-?8nmҷ+ma@Ry׼KgHD<]lg$܀L±ޡ[^q,?Q51.d}("CNƐ浾&w|\, ƈ8 ?Qn- ׆98ؔ_!NxuEtV ţ6>o얉іj>z ƖKTAW6L6e@z;>4Mx|p8uEx㯜qR^a\ksH̨in8e0S 5-:7JEuG]= 䮩ziЕO-\d__zD]bTӀ"~#NGSg43/?^+)!Qmv}XD+|XO[mkRݩX]O|-iZUTiV~f UEqR{9#F ثݠ?piD<غ[MbxhL:ٛ% mX4e^p>wd:Kg|ʱw쓰4 b7Ry*bUB `ŸK,[^ЍZU[ezkvvdUe\ӎDO-#ͫ>c -xY~u͔ˊ'(\W(4sW3$\a|m6pF6ҍӕ4Ov@z|N_.~[_݄X =A_qXvWKB4#|V[Q<F#_Jd}n5 `גz-~5z[ٚy{KUyo9|t PjeGߝCk/7iv"%,kmS'9UPMmzb4$>zT@opu-C9nN*oY<c/WW޵6-Qhht_i\?ĭڪU%:>$1mT5ڊ E"{rBjj=~Jhr?2o(C|o*𞜒?Ė\ ݪ_KՎG=E#iCp=ܚs1rwI&E5bu#aWkm& [k],+CSB C\~'E+u^9iE)/MJI!yMS^jC6ej}~$fݚS\t)tqj!> ФLиL̮uW$c`%$։ߜ&PLFbq`˖LYs?ݏHS5ΐuuw Ե!#beS4GN̄$<PӞ^8'+2 E8y%XVL1))1 JDbXvt׺?].P7T U{ztr_xh*.*1t&c8| gkIrA渖E~$L{ Z _~]YxiՁڝ7R'VOu,ڴR<0][`t͂#l"=2%1"3i|H*66oƢ^q;lMncu\F۽5,@*ڒeŖY_t ϸG#. CY,ZJ\X6}~{ax((64(N+MzxnP3ԃ\M)sƓ+9-;=%ڐo*5@tIR~W %YvYblmDR[e- 8 ?8!S}NJ;VatexQq%U3@!!ӆI ,O5SBwo~5H푤- CPBq„|=y; ;R/o@Smv֊ͼ2ElUV=a GҶڌú@"8UP0w0.+^sFbRhHG >-O]AfMJf-u1|D`^6݂/~S׼F1*=5J];'oF|fnSFZȬuA tq7; ,[fZaKm04_X7$AYF1o믴WGDD3N3|4x51YT3o}+ U ahe#Ge݅vZ[#SjM+"ke~Q;{d$} #>ZY >_uA_[mTu[+↮Ϊ =!J4PAad xU5fr /9~K~{ּPqxLHBPRk"FJwjZ}[#$c-eΛK׹}06ߖ(Av?"0gpj'|Be6-_MܣZ5z*LzfTPpjBFEY2Uƀj"2!%!#$dT빰,Qdۢy&!R82`DBKvnriʢc|h:MJ8?!Lۖo|gjTcwG nO4cA(mdFTh]:49ݵ poAT2q@GB:mbƒqfc 2?(AքY')cDH)j:4Twxzʴ1!1{ƽ2=61z2+H=n.ZL6 G&wGkK8L9V(24B)G>WN$*P!LՒcB5VBގJ#cRCguPT(ZQg#!d!)D;Rqp(Od5 !}?r>?aVyɭ<9 ؀$m9y6*8s3Cl@H=cdqxu w@Ǐ"ܪ >?+Ƞa6@𾉿dkz#v<GxZ @%(T\ aɾsBXM<\[?i^ZŁVs H~m݇wd ,~Ist'\S˃xśȘWf;@l,kt6: j >EK2"BSz3scԯ0 @8V`Aȅ:cfzoDm(`zg\2hyr B6ʦh.Y&"baEJ kŅy)ߦV')|G`B>&9MU ɿg1r).+e3~ @q4ڝ9JMr}Ǖ8M[KCnX|]ȥ|(7>-Mn+4/A^6~X2P|/g= `E'gk+r=Y9!/mٷ,q9m2!cOG\fOze.|L8|f1e'쌔#`ۈx]v;/xC8seǙ5⛋!_ts\µ]{qX4B}#a6NheI8Xq_Hl= tEoBujf8"^v|W|53Ԝ0㫞/y-p846E `g'-I> 0^]bf|ٻ /QkK/ 9Ů::kΉxS-LEo΋@^y1疚\&|؏8A歆; d܇3g|')B]&\r_-STc!vwhN-lhCK9g7k8gW˒SKP?%ϙrfж9cWh9'@~YХ79dq#vߢ˫uB;ss=;BYgԱ_>8w/\Jn#B%x_8s_ W;n7hh< akwX9Wղ9)\&cFFy'!j|S w]nZ 0o$ `D;[.SNp8_KPV[ 3W:,ً X,`!sskTkKR&vG~8'3E䒷?qUa'4=r @!S;NqErV)K.-ŗʒX3}(s-TTwFpm){9kUng聘?i`ps!naX8ᶒEb) AU#NxǢLN@<^qj9qyaʜwO,,V,QII%ygl!ޛOơ%sAZy#N8g /F LYpjWcQ :6⮉+F<o;jVׄSaK_{ r}5-2L邝){bcΰ1)S.|}T{ocDUkc?ͅ) tnR|_`'ۣ<0^nf|Dbc.Q|Řcǒ,~ũ%Sk/k#.u9#N<%.`^f1._o_yfE, ߒ Nҕ;߰k]۲ 32T^;Cqa Cb L?k~D?$oC8 V'mVx<,˘̺ oD%x1w~lGsk|ʽҷ(9%?n7'.ϷjQ ݲG8e8$x[S4W[^1eOLZwczYq:c)1'!_и'Z\).1,=>E^?sLZA.AM:Ll=.{֛빓6̎#v:T ץmK5>CW{dNj8[0& {̤=̊j2ov{Z:ꚿ= B@ !@ @ B@ !@ @ B@ !@ @ B@ !@ !@ @ B@ !@ @ B@ !@ @ B@ !@ @ B@ !@ @ B@ !@ @ B@ !@ !@ @ B@ !@ @ B@ !@ @ B@ !@ @ B@ } IENDB`lmms-1.1.3/data/dmg_branding.png000066400000000000000000000434201247673406200165340ustar00rootroot00000000000000PNG  IHDR:x]0S:sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxwxU>{&Nz)@ P'T" uwub[]uuWQ@(H!$S~$Hf2./)w 9yќ7*ADDD$@bC/HWtHt`knm%H cbif#Ús[|܍BC/4Ġjxl^DV 3s|6ML=oK$"""5<χ7bI u¦U3$Dd( C/zgk O@t5Vԗwk)L"x:h1c݈)L6ЪH}.XcX89\+$N޽_Zw ty!+ wde(ѳ~:ߍvCWo@)|4'760؛r?$ALѳVcG0 YY'ૄ8~;DDDFFAF/C&\ lzueZy8\/Hb "n󉈈t$b ##?KR>2{SDe< .QP[#""".L s!+a%'7vxE([Z%Ci 潅})'}a77t8zbs*tþ>) 2\G5{D|f\y"""|q쇧c4ԕ⏧Sbn,Չcb_23c4"4!ai,6yXI,q:*>%Ñ^ BѳG!4M׊ 03_f R=RDDDzb;: BW ь; MfK9'+{"zp22Q&׾ơ翍(4hxŝzƤ@l[`s;D"T4VBW|N;4=j툅ӑY-7ww9HH˧>0l Y9C&aG~ϼ FDDטDбSA0/Wl]At iH41X RgfXDؙ לωx,>/y cK.1""ʨHŨ(ğ?M ͹XHCѐʛzic1igPZ_k2|?g\p8sbXA3ڠ3vHl ]K; Gu;ba@Mgk U8}]c#gDxù8}ۏoiZEc5>Fcsjl6>ݷj<1i7BW"l@ZC3[jt- U*}!dfn_deȩ.ĶؽZI-ߝ|Ӽbcr<:t2ۇSYWXCDD FtY :n&aӑ7[S׷<Ej]L 8ve }Xy~ aW^y=븜Wc[e:{O"0!`]"AG,cT<xq0YoV3/P*q8&yQgծT;w58}m dify~`.`cz4}R^=3OxWڰuBTY8F ZY#iv1BT6VvY&' 8M=(@DdР8['+|xigyD4ɛ?\6p B~8q_SP^ށx>t56>]Q=e͡wq%?^oT"<FTM s+WOKGסx7%D"4ʤ p#`Gp?oafwg8#y0OGmS=v&ƁӐ)d7&O!&ġ̓ab p`AhhnDvuAGGS)e,v7֌31gDlۇw깆b!6W}Jmnfzߍ!+mz}Y9Q uؘ[z_[h3״>M ah\$Qy &)JH`gi WkGۺ@˱s+?^X~6xr,d|t+A&ņe}s<RN(B[s~G2}03NŝxaxiSX?܅LI(Ǒs~&7g|LkW㍢ӫgEb>e3&z~,8oE\Q Ki7Ӽ`Y~nxwo&"R^H~ŨEhRr-v/&xcC2D!.8Yc%xtdύQ p)/ 8`: Y-9 !S]av\![q4<֏^z^qPjD0űk[/`}6d9,,<kG<1j35acngF/s[ 95Muxrk [U3d2$b3a4Ȥy?(CV_%vpDu5p | FGUg1Kt,9y5x]ng2}'2/xwK{z9AqCѨhJ+/p046 ]G&]odL}`kqZY8qZvO=9r!{!X?@KߩN_ᕯZƬ":z2: :>\JwN㻤td Vx%8uc#zt43CVJb-1sn_W%Ci)t5{ SN`gRTXwF 0{20g<6/\)&]/2 FY"5&D"< ^-U4Vfb3r鏴TyǒڦzQ"ό^[>NH- /8sȴ@~xqZ|hV4ccԛ<>JZ "υDC߷[WC=Ꮣ6\ <8VMfe^=޹9xaǂᱡS)8~֍^7'l݃hy?f\Kdz^0!j=/+`-s+ Cp,ش7bnzA+:-M`&6|3FaLuUc"2~Z :ˇƎ`1< k{܌\|vs7-!x9ۺzG+;zܓGڦ:lzݥXlz{ns+96ufif k,v&ٜh}m!? JY jث UT9) ӗ~6X7z1QᓘUBWZbgAA?(p0Y#ŕt"۴t&y`7r/6b{0|SrcuL Ś}nѹ;#Kb9N =EkE2 {n3AJYޟ;en"L##UM9ffxvt=xo㉑ `ifRة=ص@Ó]R4WS=W/6I+Kgp +,K#>W5:N^ լ;Y!k7sr q22PBԮyG0 ] 5>Q#*uܫ߉U6؛rA&憻 A8Dg_yͭ yLMSZ f.yT;'Ea#puka򒀙&&i,B漚"it}u֕M7TaG~8`s)"8 r;'30sY?=B\ <:d8 #2Qo:w.ĪON';aW0ݫ:/Lf-7w[Tބ-7w)0Ol=Czuka.t S^@nMe˝S~s}blzӕKyV%39l5Jh4P7 $ь  *OW oaL~5 XI,\JVD`^ԣ~0{ 0vHUa.;&^5eOmj`ga DDPF~ *[t5^@o6$b ^_yroTmh_s0|_]BjmsqFQ]e]D`ŘDE Œ{+ 9Լ~>2n }0{$-%Cll5NDhX\%q9_OB"u4䟘OouQ>UIk[ѷa-ė = +=߂quSA;\oUl,Uʁȩ.{tWSo 0Q yV?A+5qq%b3y#I#Bˍigp05g`TE=N N?'/lW~38ukg>Jxcg(~XO,U +%V GagR^'e9 kG{[P\n̄@>G0µٜ/Fg_SF=1r\*4vit tMSKDRI6/ChZ]`G+;-WߣAQ]9G2_sb1l ]"0,6 3/Pj =qTu%P_X7/S 4uC*o–*Lk%6/4ɛ5v֞WSc󰷴oа;fri-l Yo;wS22 &E_L|0k2냗"*%FuT}EKarMdm23OUdhyPR_]G{d 9޹~׬? #"ѸFad 9F#*, 9C&3翍ߎ2.`Wsѧl>W{q½%`ߴLwIq)/V+6R]^a!U7d_3hPϭ)1ɛBW\ҡb[^ɮ. ?scRDa W8`FpitzZZ)³1=qoÙg?=?Ogsn`W _.|Q+K8zZ'[e8q@ %VXZ"7ak^QS;k09l@ &z̢J,IC-v3G aksxwo)NDt{VU5/[W-;CJ(aaf`/J5f _'/l|47pqq#\bC2dWCB?#h{dM>1jjaTބn+L~qZa&Z>|V0'.㹨7"0YH,#p4)Zޘy7"ݬ+u]΋$ +%Ƞxկp2>d*-wy_/;L)ǺKZmF; dU|^VKlTc;ח[گ_(LƘvS #T;AG3.jE %'j~1k ½bDA"`g&yҢq)N%"ӡQMBhi#\q|tR-NtMDxËc\,S*i'DcCvq)=zUڞ{'7gs߄DlBWJ~<zpD`O-57˄^CU4V`iL= gkL T0rX$F? <8Kf`GO8zڨ{nFAFaňȨE>B`LwQބS1gȤ^?iZJ[rSi3r2`@$|pG`Ո`-ypsF\_%2AĨz|֨s97S Lq%Wp QokԆĒ4q o g? /^郆5:סXYUyWuFT *,a31{Dhpqb3WI4ɖ@l| pΐI^F}tvʭu=CGEMSv&FJY֏^z_sFRݸW1wwC&h{֯t[S)t]jcpoӝSȭ)eU˦z1jH4<ؙtsYcVKD՜zVig+LnχV}vs7ůbgaְ/Lvqƪ*km!Qd ۺ@,ڧ@"22bfŚiw4"ci?ΰ)d<6t ḽq(5 FC/m݇ɞa5+rHW?bMWN}+a]xG~7bNV(k4Hfpq no[Z;B,?vijL řk:uC)L;~X6lp{JZ//<k%^C;e ):s7n!/0;xeVV^ERiW]ZNU6֘\-pv cwm 56Ϊcq](7Ta/&z#2-ZBjy~Ӑ^yq2K2iɥ8~s}hg%#{ۺ3@N^d7"}Xb-8MˏG? ,҆ Ⱥ,m!439 .h $"$U $ͅ{o\^N8 IDAT5Tb_ w?  uBriVL%Xz$׬r~֞MdjUc 4i/;c GϡL& 8T0ɾ3 G&݈;YSQTn YW'@dj4YLVL1cVN[%VLVu!%sv|iȬvކ#<N oC\ߩX0PThcD]}̌>t;ػe6 Jq*FSϩgpT#h7zID3~Asg _q)j?K$a] ?.nEx >huG-C=>x. ꊪ=pYvx%ASŽޟ;Dg_QȬ"0#O-{ROb~PMk'2G+v0oҡc΂N\l$QigU-Is>=goluC/G#g`GVWigLҿ*i ~wxay=UKyq(+EI}J+!W`n6qGuZ܀w/mC>}>hvJkscq-?\,hM޺svܭǶXo2u(F@|½!2ɥZ}._MS޻wWcPv`=CT+: /HV>|Gf =V>\S]%,H +{Ǯ(HM'4 MgaՕpwv =Cq17V'[ 0Կ|%?µDwʐY 7gķNWǕx<3=B`-|kr q Qg9bcnծ」0ӣ~1Hj\O@xtL! vTHDb SA,RZ&XAm Ahy0޾7i|[?jGT`ѿ2Wp5?b svsUuSȮ. =cmu02-#2b޲MǗ 7q(5gZ Upr? +rn\O`q7I rk[Sd襐a} uEoA¡}r͘屿ᱡt,g7w M0~PƷPT#CVUvoQGϱ 3s8uꆆ}|ȴ3]6R*8~gxs -Jg7w#MHXaX6l&bR[_΋$K3 DA#3 {P}L cH: pT8sGW=n/bc l"SM!A !>x)%?2J{(> A'A t8*=N+%O> V ~'χ;Kā;dX%iלq).z5X$c+׬!c 3sDZEW~~sNźыUjg#{,~θkK߾9#wHw!#^c0CJ%L5i;fX9|VŝlX\O<ߩ03gu1$T#7y˹eݯ[cpY<j;Ӽ`c WBde w~rkw;4q|pdW i"ocSjXI㭣EpvKT<j7$b ~=I<m(}x]KAzE&{!t@ MtQ_"iu;2!ktؙt6ѹkI;b "@*oʳ%X &FBi幺lۋ񃂰>xCAmwX q@d4""kսUsHW8;#wV ^nA~n8*i:C[&㱡S`knCiѨon}=gsnG)a} QߦYW-|>x).Lꋉ!8} Nf]2a1O#2 -m4`Jq<jo-|lHWk8$"[ BTYvsfySZq$pFjiK`l^+yH(I}kfbJ>B"ca.ގL+ج!и:.j~ YCD2tjc[]BD/L;j}-ɨ]΋n+Fh-3ro|NaI -i샍!+܈":{#wOZqGcq8'H$jcsoGsw_ / kGLƝLTIk13U(o响*yמD,A8T6 8y IiZY#у<>N L"뎎9J%~H>G ՅRgܮ0#X$b3+%>5vg*uA9ycC2\ȹ[e:\-D,;czMbdC蘋%7 f"1~u~9=^GY!ᴳ&3 W] 2GϡTJFZE6z:%c%V]Tb} iuGgg~Nk_d&} 6xr)X<ې|as97p%?!iM\}dZHD'h% qtsj)/Ǘ?a YYWYҖJt-mo:J+=n]{Iތ)'lՁp*gا@XCDd:4oK;,ۯBؤ4$cG03ԨJxw*,lΉ^M)*|p΃1dd_ǝ,c} phtD{SNjJ̺ k%OGLj - ?C=q$ jK;YSpnKImX 0;2펖XCD$A)L;A&[G/{ՁX }cFg!oL}y5E].>ڨtf^>%f7tn ua1e(># ɭ)Ļ>mlkZ; [<q9/cuVw16ΰXzDDd$Dsߨ6~n=~_'@VgL AQ]+rz-C'|N Eq]Z'K3 (Vx iw%fU9m# a&ct<9j!i."Kftc&7gQO8 vV%E`iVݠ#K$`4fKR{|rqƳ!5'.}j 2U7BV_s:>- sNźыQTnn_NЙBWZbq,hkj6J>){TӠm?BW!pH=#Qܠw1DDdDtؚ[㉑ 8`S%f = :<9lFc LBLWuMfgF/L!ָ8}.[Zp$ⳛWS5DprzG!""#ݠυĸAA8v_'DMS}coiF-|i{ r5[׬%X8ˇFJY܅<(HfX'G-Dycd""6a9t\MAJ\P|WAG"6Bxr(Ֆx.t&yxE|A]񃂰)t%,uAN;qgC=<1DD$t : /U|vs7$?}Ѷ0Y}Z=~H¾A'tDFC]XyX1|:ZODDdLttbt&㳛e?EuehZg.Iųƨ}qw [c\ dS dzj㤧_Q_ie?BW!l@ $ӼZ~>Qų}q 4ɛ1y0*5揸u/1Ϛk%Zo)#1bM$t BWa0|pRO=W-֍^yS!K!""2 :@K^%CgMmQ.oqg7w#2aaf~;b|b%WCDDdc*?FThy|pV=18:zjDDD2o`cD"NE8LhVȺ} ^>u>"""S'vt$]´}"q)+Ŷؽ8s˟7Kb nDDD]Uoc]bI*ݡ[`l] 2"""gA%8yG3y;pDDDd _#ƹSqVи8A; =dBDDdRt L>AG1DDDdtD"n:k """$R4[WDDDDˉDDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :DDD$X :D U^A :D_7 "ctH/xp17K!>AB,Aoݫ^ :D" W*8q+"AB,FTS\ :D":|_ %>o5Њ/`!"; [շ  $"tH/Da%?bYD$p :Dvn$1~P>\J( <"("ҋGW fxc 5F+_BTbD$@ :D폮l$b3iF"&@d޹02  F cqmrG#RboֹSߟFG+;‹c~onğ?Friz,lzf}BYߟ'*{f"[|7 "Se%D~8ׇwu2; w8?c0f@ d <toPBji-.bGHi߉!ؙkxv[ 8鿅WFDFn.{kS;> 2"2v :Dd&zi/PXO}l1_Zb SViWFDƊALhcKb/xeDdtp2)r?Vha!"=Mfy\ȍ1ʈȘ0qg=2 \^1ʈX0IsLJ3_~nR/# 2"2 :Ddۺ/@t_^5ʈtHn$J7pWDDƀˉq5hhw s+ ALZ揷j*HD}!'1^ "2IC؁#Ɣ`: `!"9L_&oRM7'"j DdR:ɞaӤ 2"2F :Dd2:qxe)ƠCD&sș9x~:r!tzFK1);v֣r ߎ"HK$"_zA %>CuÐCD=ŠC gWbeV3g<^~"1]B,02L˧>@|}l=LXϐCDj!gW0q HmADFsș?N+D~ "U?OfD1"2 CAAxm2C\W:_<$]EDĠCD97D :Dd0CN05EXxeD$+ı̋8yYrv%CiKorῂWDDBģ+"2C_Zbi1 s+C/A "5lrHwtH񏈗K!"c!"sƻrH?x늈kG·BD}HT* "J%D"AD}\]01`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`JЋ """ח Ee(+ܛtȨɕ W e(+Gq}Q\W2H]Vu ԕ5д25TB}"""%-J˽]26tHc2%;1媣c 4=XIt;eU+QvTTW:Zjfuz :DDD%SP5uIDATԺzKhV Lb!""2Q͍Z{7-U4TC =V"""#XIsxDJCDDd2 㤶]v7~ :DDD:о ^޶_c$ :DDDhT֮^Y>25Mu^"A>re(PK᳕ȸ0Q(GaRˮLYC%JIZCDDS%m7[LI}9^" RT*+Tde`!"""7:vTT_ yD=ĠCDDzUTe߶PSXc%0(J5VuŷmWA&52a!"kVT0kcvfJ* S L"""Rmﲋoۭƚ>?$L Q ]vmۡon42AH d J+bJ+ HctLD}sc]|ێxD PB2$.mj L"àCD2 jc:,@Di4Ȥg+T2$R1@.mj D"yreژcQR_)L To6TB!DĠCD&ZZn$AۭPS*iHD CDFMT.ŭ9$A J*oFI]|jeJ+ iAt :V6zD$` :D1Rƪ}c:Zj=PBM҆ rC/tڦյ+qH$2"RBjUߖwwePhejYTW֡o[)L!32 AHIMb)/H"`!2ڦ3T(+G׮zAHG*kP\_BձRǂߺC/Ht4y,A:N&"2 :D])d/vcZBLQ])eR1Rݘ:*!"72TK D""29J(QXºzǴ]n1+(@QȎZL3Q05ɛUSTP  }H tHd|;pP$ JZ:u;3M^"DTNmoI L""ac&^w,k""&ʛﻡr a11u ]vm1N&""AȴMpk4 GJ ]t-k"""`"B:M./k"""=bQCn-q5Qbi-GKxMDDdzLixR[E '^ `B@io-q5Q_d2AAB '^QgFt&^wˉDDD)n+/q5iVRDycսN&"""#У~u[}Lam'^Q]Onva'^i[ee#'^rHĆ^0`1`1v@`=`Kt-D`Kt-D`Kt-D`Kt-D`Kt-D`Kt-D`Kt-+ZIENDB`lmms-1.1.3/data/lmms000066400000000000000000000002431247673406200143020ustar00rootroot00000000000000?package(lmms):needs="X11" section="Apps/Sound" \ title="LMMS" hints="Audio" command="/usr/bin/lmms" \ longtitle="LMMS" \ icon="/usr/share/pixmaps/lmms.png" lmms-1.1.3/data/lmms.desktop000066400000000000000000000006341247673406200157560ustar00rootroot00000000000000[Desktop Entry] Name=LMMS GenericName=music production suite GenericName[ca]=Programari de producció musical GenericName[de]=Software zur Musik-Produktion Comment=easy music production for everyone! Comment[ca]=Producció fàcil de música per a tothom! Icon=lmms Exec=env QT_X11_NO_NATIVE_MENUBAR=1 lmms Terminal=false Type=Application Categories=Qt;AudioVideo;Audio;Midi; MimeType=application/x-lmms-project; lmms-1.1.3/data/lmms.icns000066400000000000000000010427271247673406200152530ustar00rootroot00000000000000icnsEis32D8 $c2GnB3\6_e>}d:"X`;|f0NL2#T[9l?[4SU6U';1%CRRL3X4GLvrBUOJcJRSsKOD0Pw:0&!7MrE4 .!s8mkO-(} Xg5G),HNj **1i -luvU&+K [c| il32 ߇ )&3  !?F   /ZyR20   EptrN.77' (C_o_ctS02-2/" l!7cuboohf=(223-30   !"Nttm`qt`*%34,.13' !Jdn^ephg9 ).0-(,,!@jsbpni`=9a&,-.),,  VvskasrU!  ,/((,-%3l^gog`- $!()(#)/qnf]4 [c >  &'*0ppqH:  (')1nafS   &!'*civU  )$$'dovU '$#1j^kU $#0rnlI'#"%0qplU     !"#1labmaH!!+gjqmbwf;%! StslapsqG ##! # 2`rfn`ea  ,I0&>Sckt` #$ALO-)'#?gjt` "?FHO-+$&!Pr_ea !GE>J0 '/-#MtrqI  FLME 0)Pzf<   HN9 NM#=! 0X <0  ̏    bW%/ 7 a}R-^$MS OcN۩^ 9V 8e:ؗK]G C> gpy2]3_b״n\>Gɷ qB)_5)ĘsLG@8'v˻IE>5%źwƾIE>5%ĹһNEB:)c9F3'Y:S@'H -púvnS[D<&"!+:_Mԃ & SF: )!& 1 ""!,_1 F<av&Hb:!B39:O7ua> D<)N*dsw[2F1 0+MPotxoO%E#FtE}ororuhFA)0<7O7o~ptprmqu`: $m8(P%[W;fwrmnnrnT.D.Rk# GlsmljjoiL"Ezw6i &PmojkhiobAJG ; !1ZplghginIc[! 6("YTQTD _N.3OZSRQSB ]x@ 'HYUQQNNO? D0K#"QZPPQOKETU =Pe5<), QRRNNHJdhE_MOr3:(*OOM\}eGh^XJy3:(+MLKJReLmddX6:*.!LJLGO}h@rnha);" JQGEPX8athp(7); 6cxdctcXbs`Ua%"!.FP? %#E`_]]oqq_Ua%!!(ANJK> "'$$"Bhvomr_Ua%! .LNIIL> #)(& \]]oqq_Ua% C  &-&!#&"btcXct`Ua%HK@;DN?  ''%**(#arqo]\[Wa!GKLH=?> -1-++&armouj= AVFKIKNC$&0/-(`qppY/ >( FKKJ7 *1*bub: #%$GL>!  *\J *!;@*  &!  # %5     bV( h>D 63.Soʓ(`'8K#-2Ͽ˽=Y@.Gkq)$  G6Y]#EUO&&(^7Y@O&" ,34#6YDJ"!!6XzT+ ɶ6Zs 9'#Ⱦ7SwmMĻ3MwmM1ZwmM7Xo\K ɷļ5X5X%X 5ſ5XҔ?p0$.E5X}),&H0{5Ze$f³6SQ  R¾1FII6%P7LY9=a>LU53(]<M¹U55(^=MõU55^=Nŷ U55(^=NǻT55(]<U˽ʽ[55(cA8<54(F)01$q;<(C8!,AG%;N=$! I6 += Wc CRD8! l]P(F[ZDo|=Mt$ (snAP=1 4J :L)($  ^I^C +XHZP-1 )%"A,J *(TkC(+ D|qze6 " 'D (4r~prvxY)+ 2#[~ptsrxrK%)R~pstsonvj@)%r> ( @~|ptqnpsooxa3! )80nrnoronostU&x) _uDdysqompnmsoI%2KNEpwopnlonnmkqd;  - >}a +!Rtslknnmjijkq]0# Y/lt,!2N-^tmlkdikllhhnoQ$#\|=0<19eqjklkjhiigniE*P,5#2.(Empijjghfgn_Cc &3- "Rpmgfghggebi&>u-1FK.\pgfgfdf">@/96  :chdbe">h,6 "$"^fdcb`d">[-3m Tgaa`^b">`O:Te__^]`!>_K  Sd^^][_!;_MO+ Rb\\[Y^!8_MO+ Ra[ZYX^!>_MO+ Q_YW[ =`HC*P]XYWTY =^|P]VUTRX >` E #VXSTSQV >j/3&$  ,U[UTQQOU>Y $!8!I_YRRTSPMS?I$>\[QTSPOOQOS>)IV *4N$GG ,6+"]#3a  '4?2@/ :0a>h8mk  BH=(  eX@5" w\P9/ї c2moZpA"J<L"9(֏X- U d8u>qB&HŀM#>GڎY-  YG8rGkGkGkGkGkGmGjG G[lG8DG#GtG0#G\$G_$G_%G_%G_&G_&G_'G`&HLNb@vF,m=7̆Q'I{I Tߗ^2 iӌV+ ug<_4it32f,  %93?N# /=IVg,+)! *:ESalr-03-&    $6BO^jooq-0541+$2>KZgopooq,054 0)# .JYfopoq,154 3/)"   ;cwpnop+1544347007436&$522.("/=HVenponvLRunonqv\7Dlvonop,154373"+7535&$51221,%  *9ESalponvLRunonssP4Ortok'/466'&56315&$5221 0*$   $6AO^jpponvLRunonnvmE7ZiW&1,!37325&$51 .(! 2>KYgoponvLSunonpv\.-;*742325ྪ ,&   -;HVdmponvKSunoppj[RJ&"&*0324%#410/*$  )IU^kponvKSunoplaRF8  %,233213%#4010//-'#   >//[wqmonvKSunopndVI=& !'-12113(/.02' 2:)Zk_9BjvononvKSunopogZLA. "(.2213/2.',% ,:HP6nnssS5Mqtnno$nvKSunooppj]OD4   $)/13%"30/10##00.-  '7CPae=qonnunG6Xurno-nvKTunoplaSG:   $+01102%"30/02'-1./('   "4@M[hqi=qo novf>(   &,002%"300/2+*1.-.+-*% 0]_3.-    (()1.-.-,-*-,+ (# /*    $)--,),+*)*+!A\R5Mqtnnoqh=qopoh[MB0   %*,++)+*)+%'' ?WtnG6Yurnoqg=qopk_PE6    &+,,+),*)+(#+*$ ?Xmpvf=rh[MB1  $(*(*)+&&+)( $ ?Xno!novlE7[vqmqh;aPE7   %(*)+)"+*( # ?Xnonpwd<=fvo[.J;#  $*+ **( '# ?XnonruY6CYH",    (+(' # ?Xnonnun9 '    *)(' # ?Xnonk\9     &(' # ?XnonqsI     ))(' " ?XnonovlB*1  + '*('& " ?XnonntrN5OW<  ()'& " ?XnonrvZ7FnsS:  (' )(& " ?Xnonpwe<;cvpkT:  #&%$$# "" ?Xnonqv\7DmsS9  $"%#"  ?XnonssQ5MV=  %#"  ?XnonnumD)0  %$#"  ?XnonpsK  @#" ! ?Xno nk\8  "##"!  ?Xnonnum8$  "$"!  ?XnonruW5CUC.   ##"!  ?Xnonpvb;?hvlW+D5)  "$ $"!  ?XnonovkC8]vqmrf9^L?2$  !""#$ #! * ?XnoonntrM5Rssnooqf>qdWI;/ rnppj^OA5'   "!"!""  ?WumE7[vrnoqf>rnoopogZK>1#   " ! !"! B[P5Ortnoqf>rnopmdVH;.  " ! !  4,Clvonoqf>rno pk`RD7* !"!! ! !  %Nuqnoqf>rnopoi]N@4%  "! !  ! 3`omoqf>rnopogXIA24 "!   'bwpmoqf>rno nphA"! ##"!    ?lvnnoqf>rnonpvb;:F3  $#"!   %80  Mstmnoqf>rnonovkC7^lL/   !$!   rnonntrN5QstdJ0   ##""!   4LMI>.   !"4fvonoqf>rnonrvY6FnunofJ0   "!#!#" C +HNIIJ>.  !"! !!Bnunnooqf>rnoonpwe<=evpnopfJ0  !#"  #BOKIJ >.  "!! " Ptsmnqf>ronnvmE6Zvrno pfJ0  !""   :NLIJ >.  #""! "*]vqof>rmssQ5Ortno pfJ0  ! !!  2KNIIJ >.  $##""! !"7gxg.  %$#"!! !!GeDi=;cwpno pfJ0  !  !!@OKIJ >.  &%%$##""!! " :]trno pfJ0     =MLIJ!>.  ''&&%%$$##""!"" ;^tqno pfJ0    &;LMIJ >.   (('&%%$$##$7k:OKIJ%>.   ))((''&&%%&"%1wuZ6Fmvnno pfJ0    IOB(+EOJIJ&>.  !**))(('&(&%$$2tmtrO5Qssno pfJ0  IILN;%1JNIJ(>.  !*+**)())&&$$%3tnnovlD7\vqno pfJ0   IJJINK3$8MMIJ8>.  #+,+**,%%)&%%$&3tnoonpwc;>fvonopfJ0   HJ IJOG-'@OKIJ>.  #,-,.*$+)'&&'3tnonruX6HounofJ0   HJIKO@(,FOJIJ>.  $-0. "-,)(('&(3tnonntqL5SttdJ0   HJIMM9%3KNI>.  %1&-/+**)()3tnonovjB8`lK/   HJINJ2%:N@-  "+1.--,,+*)(* 3tnonpva;;G3   HJIJOF,)70   /0/.-,+**)*!3tnonqi@!#  HKJKI1  !(.0/.-,+*,"3tnopogYJE1   HKJ"F=3.%  #*.0/..--,,+,#4tnoppj^OC6   HKJ$H@6.& $ %+/0/..--,-$4tnoplaSF:%    HKJIB90(   $ !'-00.-.%4tnopneWI>, $ HKJ?IE<2*  #).0/../&4tnoopoh[LA2    HKJCG>5-# $*.0/0'4tnopj_PD7    IHKJKHA7.&   %+/2'4tombTG;'  ,  HKIC:0)  )  !'.(5seWJ>- (  HF<3+! & $"0aLB3 #  =6-% ! #H7" % .'    +                                    @I fb:2 I˝H  /֤0 zŸu"y ^\ PI C˽B  )Ǻ+ t܀ķp* X܂V sm =܃ʼ=  (܅ƹ) ")[܇\6 U܈ܶS  7ͮ¸܆ΧЧ7 ؼ܄ׯݷ}!4<gڱ܂޺༵ӿd:,L˲܁ƣ߻ɻK  1 &Щ߼Ÿ2 }ٲڀ߻w  [k aװՀ ߽ڂ޻ց ʽ^ F? FǴߠȥڃ޼ƸD  ,橭ʗڂـ޻ׁµ-  {ݪKEځقݻՁւ ʾt% y P{mق ݻւՀŽP \WCǭЗ/ '؁ܺ܃Ղ›@ *ťԭI $?؁ܻԀՂЫ)  "uصڰ&վf  '-70 XܻՁֶРl, [ʳ-ʂ %/9A;6=&sۺۂӥŶS |u A .ќ4 ",6@FSUG78<+ۻӀ ʥЀӤ; *DԱO )3=FURDMSPB597CڻҭЁҤǼ~% !t"ֱl '0;COW7GUM<5<. ]˷׸ЂҤøg3   Z<Ǵƿʈ! $.7ALV@#,$LRJ86=$w ؃сңπO  @붼9 "+5?HSL 4W[]QPE68:/ŨЁтУЃǽ7;4/)ʠJ(3LWƦҢ< !+4>GRT*<2#ol@QRC5994ЁπϢ΀͂жE66DTٱյV(2;EOV8`^),DRO?5;3Mσ͂źE%,=Uʲq &09CKVM:56FWL:5<* f΢΁ȧ̾E&9T͌% #-7@JTS .8(+KVG77<"~΢̀ ͰɿE#5Tӣ< !*4=HPY8DG]dX,PQC5898͡йʾF"5TֱյV(2;ENYD! 8RO>5;1 P͢ ȁ E"5S#Ǵr &/9BKXK,)PWI:5=(jɩȀɾE"5Š% #-7@ITT*!05 QUG77<$βȁɀ ɽE"5Rҫ< !*5>GQZ6UV3atq@YQA697;ȀɁ ȽE"5RK(2;EM[A0*@WM<5<0 MȀɂȽE"5Rd &/9BKYK ,+KTJ95='lĀɂȁ ȼE"5QШh #-7@ITT*"08(*PSF3I"kǁȄ E"5Qåw *4>HPY6UV3zCW:tȂǼE"5PԱt +;FMZA0rƀǀ ǼE"5Pu0FVD# ,) sȨŃ E"5Pu0ER)7 rƻE"5Oȳu0FV17 r̷ƻD"5Oذu0FV.& rɮĺD"5N u0FV/ rāĥǹD"5M u0FV/ rÀƀʼD"5OӸ u0FV/ rǃɳE"5G u0FV/ rÂŁţ?"5< u0FV/ r€łĀ7"5G u0FV/ rƂĀȷC"5OԺ u0FV/ rĀȾD"5M u0FV/ rĀĨƺD"5N u0FV/ rĀ-DZD"5Nڱu0FV/7 rȹ·D"5N˲u0FV/ r·D"5Nu0FV/ rŪ D"5Nu0FV/ rij D"5Oױt0FV/ r D"5OǤw/FU/  q D"5Oҩh)36JJ.  iC"5O }4   | C"5OY ar Xƿ C"5P߱˟™= >ÄC"5P% &ż C"5Pŵl< gŴľ,C"5PӰQ M›ëC"5P¿8 4 þC"5Q»! u ø½C"5Qdzf<4  7? \°C"5PձK )+ CB"5SŦ2 *?l *D"5Fz %=ws# l;"5Aâ6\Az :"5Eś)N8KW#'ÿL"5G'01CXt%N"5GŴտ("*>UR~ &ľM"5GºԱ(&:P5` &ë½M"5H³(%9N:b &Ŀ"M"5H(%9N9a"'ø¾M"5Hȳ (%9N9a'°'M"5I¹װ (%9N9a'%M"5I² (%9N9a(#M"5J (%9N9a(!M"5J (%9N9a( !M"5K (%9N9a) #M"5Kų (%9N9a)ó%M"5Kɽǵ (%9N9a)츽'M"5Kƨµձ (%9N9a)ޱM"5L̳ĶŴ (%9N9a*ϰ8M"5LѾƸ(%9N9a*M"5Mɦʀǹ(%9N9a *M"5MұЀȺѱ(%9N9a +۰M"5M׾Ԁ ʼõԾ(%9N9a +&̰M"5M˽칺'%9N9a+$M"5S̾ž*%9N9a."̞Q"5mο׽W%9N:bW$l"52ǂ';Q7a t%˔/$7Kö͜6-?UV 44'ΫJ *<<|5 eĶаQ&5EYQ3 &2zCL)лf #3B7T:;@ !~Ŷѿn (3@O[%?TJ`;9B(dKƂ &1=LKWC5997ƶɉ$ $.8AM]K_McYH67;$z̚5 ",6@JZSYO>5;2QȶΡ< !+5?GRQ) 8]'Zh5SPA5979ϯP )3HOU9GG#y@VOA5:6?W)2GOW6ADHUN<75(%&,4=HRRbWYt2 RPR@77)%&*2 4$ KTH><9:=DPVE-*><;IVL><99=CLVG3tOVSOKKNRRm ][\QQMKKOTR'-  .4 JnD (#5xotl3 "jpkpw_" XsopmruQ UeDspsqnmtqA 72 1usptsrqnowi/ fspts rpmpw] Tspts qomruN @~spts qnmup=QL -rspts rpnowf+   bsqts rompvZ  Gysqts qontqG&>s~rsqts tslejsk9(n{~sqtstphipqikwd( ^}sqtstrjhotsslimqvV&, KzsqtsttlgmtsrrslkqmlsrF )7z{sqtstogkstrslkrpommuk4 $k ~sqtstqiiqtsrskkrqqpnknv`$ Z|sqtsstskgotsrqrkkrp omkptR BM Gzqpsttmgmttrqrlkqp onkjrpB 0+ 3w|nmrohjrtrqrkjqpo mjkth1   h vzlskeotrqkjqppo nmljmu]    X z: 4jwnnqrqppqkjqon mkiosO  Xh=qWHssmoqpqkipon mmlkkpl<A=1s}yxj!Xvqloqpqjiponm njedjpe- fu}y4  *eunmpopjipoonmnmgdiljdltZU}zH  % ;mslmpopjipnmnnhdhlmllehhorK]qC{%\  '-($)Lsqlmopjhonmnjdflmlkejjhhql;XS0t 'm% $+28:/%&)Ztnknojionmnkfejmlkejkjigjsd*  f9||8 #)07nrjlihnmmnnidhlmlkdij ihggnpI# bxB<|` &,391#*:2'%)Orpfgnmnjdflmlkjjdijji hggpk8} 0ss) $+168 #09/%&( ]qikkfejmlkjdijihhgfira' esv7 ")059S)*"57,$($ /epdflkjdhihgekrU  WG   '-48&(-<4)$) ?nqijkjichihggfnoF )4:a %,3:+2:1&%)Qrmhjkjidhiihgfecu.<*5=ur+ $*09208:97.$&'#^rkhjidhgdbam,%%/1B=''- Ab]RNKHIE^Bz}~V !*2$7.$'''bvnkmnnmmgxa &-49oQ+90%%)NdYPMJHHIE^C{{e$ $+26%85*$(" 8ltllnnohyr+ $*195 ] KX78,$'% &XbUOMIHF^|zq6 #)077! 274($) Isrkloiy? ")/75)@=+.66*$) 6__SOLF]~zzI  !'.49- ) 560%%)XuoliwS !'-67+ )"-84'$)Dc\RL_z}Z &-371&79,$'&*evjpf %+38-!%% #/9/%&(QdV^|h( $*265 " )77*$)!,186336?/& "5=53348-t8mk@28kw FR&1bo>J + Yf6B$ xQ^/;n{ HU)4er AM"-`j>זzG#}|zh[){{n[I<4G`Ɍz|r`K5"$.Ud>ۙ{|veQ:%  &3jA"~{yjV@+ (;$z|o\F0!*H_͎z|saL5"  $.Y^=ޜ{|wfQ;&  '4o<${zkWA, (=!z|p]G1"+KБz|tbM7#  %/]||xgS<'  '6tB*{zlXB,)@_@z|p]H2#,NlL#ёz|tbN7#  %0apO%||xgS=(  '7wpO%{zlXC- )BpO%z|p]H2 #,QpO%ёz|tbN7#  %1epO%||xgS=( (9|pO%{zlXC- *DpO%Ć{|p]H2 #-SpO%|wcN7#  RpO%r\@) ?pO%dC".pO%[5)pO%X0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0(pO%W0*pO%Z1&pO%M-GpO%9pO%jdpO%?=pO%#pO% }pO%ZTpO%80pO%pO%x lpO%RDpO%1$pO%m`pO% pO%* pO%K4pO%^BpO%eHpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%fIpO%2̊kFٔqN$jݛ{xe>O~ykE  >{zhN- 0z{mT3 .`z|o\F.*Rˍz|r`K3  '7wАz|taM6" &2fݚ{|weQ;&  )B||xgS<' (:}~{zjWA+  #,Q﯀{zlXB,!*Ez|o\F0 %1ez|p^H2 $-Vϐz}saM6" (9|ӓz|ucN8$  &3k||xfR<'  *E||xhT=) (<{zlXB,  #-U{{mZD.!+Hz|p]H2 &3iy|q_J3  %/ZϏy|tcN8# '?gbqrcO9%  &7ccntgS=(  0HRN>* +DQPB-  (%'&  ic08 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2d#Creator: JasPer Version 1.900.1R \@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP P߂~rtJYiBg]}xΊ6+C-י/%)5p^]b}+ b8A'P߂X~s!\,نX vr's4Ox?g:H͢Mq3If@;[n_;UZ5#@/߂(~#wd<ϽD;6BԤBmOz2Pޖc9 wtOpdA<~Y߂P{PE*,3|t:h-Y@Ba~"~>QJVe`WgTp gi>P8M%NLJ (A9_u,%C#]//H5""4d0eO]b؄}RE5sT paIs$9V?;>EP^D}ɩzGYҾ|Kp U7~q"#r+TO8M:t5S?K|ҭe\Iu0Hm1R s|=Ev ۲!tyϕekj4vݩ=_RæϠCígnlp~ zA%FNm'72pľ1zUҊvKa.ߛ苫L8Ϧ7G05Q|^8s?}*-# i[S@m8I?71{b T8@JHoA"^ Iv<XB]c$v B|<:ۙd !Jl_8s٧+3bi DMeGՈm. l\T` %daEQ#EG}8 *U5Mt]w՞[H[ ᰗ[ 3¿>C{@XSdCd׍&/oV#rIF+UX+um>W 5NP~יuHRH9t}*ۼcFS^ծ %դ1|={*#(µo1JGLfOa~xj:ָ`&P!aӬ7\ORVN# @-SMvǙYzn[S:"}$ng2EKllD4=W*=*M`a;Bɾr*e FŒKQʁsi80 y^ BɨOsϩ/ y-fكOs-o8PQz44,C@,/&*H1dfLu#rbIoSvS^ݎ?Da Dg Ybu3oVvC:GHwngdYN/2t"=@i✷e)/@́.TEi =TuA! s~ٌ*"u$?Ueˤ3mVjZ*$p"}an-aee%@80EU%փ3Qi_Y#kߝ}? 2? 4?\UC݀>m=9'` a8OEW:K%9 *>b {]c|WXTHەF껝aI~_f,s &iy7059 S$VA?hZCo/GM 2ާR,uo}߉j1,+<Y+D 5i/ͪ­*=0}I*.uGBi܈ow#RD&R){oU0 ̈́.#ˍi25|q驣\`[HUv\ĵBb?S \S$ G " p@IrP)Z d`XϳA(;z&]}pC k=$^4Ge8NfKD 8Xj Hۤ/`^D?R| 6 V_[ťa54;9tĵHgԯ ozމgmRYEs7MćB NǞ͚tv5]ѻ">7n~#Ke_.C<(v0\<@>@w¬»?o`Q^6mI^! !Pަ$oq:D<5 8'u ylAkQyC,0Fˁ/[hT'++%: /aVmp-tLbE7(U2{K )9X .oڈ '"M_[(Ht+0g1_K5E!%,ާx?&t|&, Ӷ96A]@x ̃_ P=b=ܟD:AĕiUnJ`pT}'CH=C{-z\]~b[`K9_\9RXZgFޮ%2b&FV´wY8Ldن6(fJ4h<,)8%2fK뫃³QDL a"xۯ?cl:#SƢ6.c))`|zgk('J@oFW1e"ޢMX"qw?G88eO散a )KS%8FƳrntx]O%ƞ=d45?>zϧWpfˀ3B4t{.B.a@P[sϏ05啫hv:kFoz_;$ $[J܋{nɂ]C9ƥ:Kݒgq6oU _aK0ǕPI-߈ឬp!K|l*cI*ׄGpQrJ"zhF D8bo.@Bh2 1ꑗ0#AtC.VbC~1wT=20Ȼxp `(f?8I6u8ts:cvokŮI/W1te~>c֥\h}[_j`)g?!gvl5[ӁnyTm!jw(:xND,JYE0IB?`YGtp")Nsܺ=Qxz]atXPv\u_US j) p).R?Kf(p ^ˉ[U +hE?ъJ%rx ?SМۗe3\Hc!ճ~X]Y_)-2λ+t % Jug8I Gb) A \h?4'fe7y#?äitkH VuWBz#U W}D?nn w$<>`Nw5bH`*ă]),Ru~ `>k/e( NJʩez-/rOPtGMBK픽{xvϸr#pQE8Ze4mŋƩJY&!RDl*xp^2,?z )92n{q`$28͗v6 {x{ό0 %b/h$ dtE+gP~ oO )C%,(`peݚ+kBmBNmXwv3$Im7ZK ^4l˜D=-G /r358?S@ &x҄Dc g{sFK9Eiؼ*r(6 f| > f54~ޮ|0A1Vl5cT?ϋ6ٚR~V8Qhy\<[s< q3>vۊ\zhk0ĵƃ/iܖœ1vqݰ4G#ڳt'z#".:`(feěB |ц%ܴN;YRcc?0+8b9fJ㒜(ieCSlN3;BE6]ndiȑו(꜏)/HUqjLG QSEhlQ9XQ|-AJDz"7U` 9ڿD蜗Kƞm w /Lbg&R]XfƵ1EyP\xDCS}x60?~Yʬ^N5 FLM{)eĤ6 rqǴζ&N 2w^bl #6mqHz\f15a:3e 2P2[ZAį{.lgb<1qˁj1/^|^ZR|/k᫽JՒt:XlU ٘(Ƭj{ط̦N.A31GH8xQ+ ?X?zЋH@^ȐF8X乁Qf|%OEYا?Ė5魛VÅrޜ%9?0U4A px$XdWfv_G}V{A/(jCH,rQ48O#i_5"[%񋭐Oq{c{g3V[cI߯3ڵ[%6ʘ \*]H4{cE[cm)f'-Lj6Hٛ9Db٪0g8 !To|ZuCSP5D]cW`wP UF`H@ ez$Ǭ\ftB%҅lunzA ۾>_v.ʼrN P6i ζ,W0 X)=jHdR֗(& K1Q !)6QIҍ6D^Zx+'ķ [ FedQ&OiVi-NK֋"6Y$ZbD'%z ハO=@GzٔHDy_X,URgrLR6ֹ'߆fFK"qw^WT'%& JMˆɿkkvlgN+@D؇z$/ 2Z01MG) Şx1NHۀJ$41?gc8.HGIl;T^i4~8YbX%Ɇ=ԷQ+V9߄W{8_4/Ġy').Ӝ8nX˜2T; ?e+M򒹟oll9ul8 1.dtpV7$/H h ) J Aa *1ݱ''NtR?_›FT6jWiKth\81{KЈqa2R K0}$4ք.NX싇) 4 !ΖglТKW+KœGϦuEJݺt2`u4)BNnnL3qKSzAzpұ4j!lw~FTe)[MXώj'Hv9%Uw"cdDӯ[:J uts!a 4rT /-?׈T)Wp%O?v 崲 X-6 4>deP |b^Pr`s!b-R6;VDݯ٬KBDʁ.U+j xK|E3xG]=sv#"RK^*Ƭ_j w;%wQh`7a(^`g 0I%,PYFJhڢ$oRjD8w/ѢJMͮ0L#ePwu]t/L>{F X^~Q-tYM=W ~S eL{xgs}vHP##79ÆvZd G4U /Oil3zFf\K)KLls/9w ]BV_ƪ#Seك_ o:dS] 誉F"z oiwt.x2l=`uJx .#vM}e*KXD(f?~Ԟq9@+Bs( 5_dR*JscQQ~؇lxY} ϱV|q˯}gKe{WbӶ-ڿr""3)2wpp`|uڏ#5/7ǧbb~ذaQ9<>'"J80 #tndyϑ3!%9$ f?#0#h/qozInuڄ 42G,> `IH61s^oaqDQ})3I@BSr@v' `88D@$<} >Ԥ< /cP㻋`8,TJTdǏ Ibd K<*Kcd_SԗiCdxm\l *6y l,:oYvo6\DȦ)bkQh&Hx4gH?r2XoI0N%X*(s7Lg]I`$¥M Խ`a0? @e1f$Lm0KC(@8o.SKe pqdׅ6A|dӷo"yh_?<%xoä!38?q-z;HiE:IߓgutQ`@9$j*W65o+ڻ:,=jGsu2k<]=8o+ ~#ݐnj8XHƐ~vi;0T+AN/y /6L,>v\yr/OS[2.V0MD Z{YZwK Lt|q Me.Oה^1-k#σ&X/6N!h{ ,U8t.qS.#/E]JN:\DœmivG|b*ˉup9й) H&{Tok_<4"-uR=2̻FM4yS,?m ӧ-oqЭ$ ! >ᓗ`SK !1͵B=1!ԧr}aBztK뾜v)r׸6끇݋޿$,Sѩ]K,Ear# GsBB' FhP)ȝT0Rc/+*?~J(61(dH qRK\xl|WTM7qCW \9FlgƁߍ uhŶ $)ۄEXX-N e9ZMJ#U3d{}%XR,)[m; GT%c:*/h}IKwTB7$j!+P|?.9MaF'v4߭{Ӄ l!3zu|Vֱ3MfG" (gG!O8¡e!UtؑKoڢ| ,ip&e>:0Q?߹0 9KX,&;LdwufRIZR<̓[v-ўH$ K5wyRjI+7ofQˋZL+2ji 7R*H=|R8:R\IPm,啶j{9)\y!)<5z[EV~"Eɚ#msM Fб}LX?eeyR p- Ũu<\/d5_>pd~nY[$8"^'\Z 󓋥6:0@1GX5Nܦe,CI<WQ)Ƣ(QV@ےP#f.!jnIrݖϝ$VshYz?ଆM--<R/>O( SL?oK)QȪֈk!>$H]kL&hQ8H9lNqP?mXQܤd˒,:*yHK |`w9:u:T9Ilϕj[g63wצ@=]?PK # t.w &nguw3i"DT 劙؜&"g* ƚn6"%w# n^nҿ.` BAi; |=Mi\N 2l7jO d0%.'չP[F]z*lqjaiCeISA:dN=LBNeȰq!}N ~/ؑ&0G2 /wV.2*W *UPY:(8ExR@Xު[;6\Ъb=w^\L;B_Cʷ*R'\ -&esyLH uJػ$Cb)Yr"`YS:l!;zAV՟}_+G_kDsKh^ 4+e U_EuG *J] =iX}z[caͮ!q|ySB9J7J-4WJ]w>"@@\KO2 Z>.'=P,Ѕ$sQgz5k JnYs0̅mT@OKK_x{S &v}[um|R;Y+$L{[Ӊ0N)8Qw܀rt!OxVGBd=mZs\5f{r{>bH>cH)]nu.*qV ~]x9Go߯Z-?2C(''k){..|]VJm H5 Vڌrˆ|´X(;Vg 'pܗo?ۏNj+ECo-Kh^, >01!j+TǴtlK}p>*_C ?;lԆ^HY$ V@ڿ޻ֲqe_[ oRpfGmԺCq-}ugA'`Vv͋mk`߻KWQnz0Q ĻŽ(r-.cM,(|q~zl-`8Dn|7gt^Ѽ3eg&FkâS-&`)7icdd2w9D 'Y :~a5P͔r*3N[@^:U׻s8P<^ #8` Xs N}ʥ+׳잇*ۅ5d>oRt$Jfq(l8HL\pn6K`jX`fy_IB(Dj N[ =o\J_n_$ph?ZDJ1+k01cw);MagC07?GoWN-Y/P=2d-|8 SJtXr]Ym7p`mv*A`/ =^6nճ)f7Fܭ-9=GKiieqr,5J\q}O,}j;׌2By*cj"C3,Xk:$ÚdRûqDI[FK4BrL zH}*V Yq]ld^Ggm e*O*ŕM :9r3snkNSZJ^;!M`M7z` 51xsZF*ܖev!(ZZ-Kv2?/im!~*yb҇Cyw\cu| "r{~;| D ɠB.Wׇ,he3SMK'jAD[g}-(tFiݸZ2D:k#*}PK~(%m_W xctN$#Ņd)%DgYbOfAXX1œ|!Trc&dsW_m}qB`CH1Y\6oH u4R 1zb_޲oa.~Gr&Um%/ʵk1 G!_C;]8{J%! 5)kBef܆]zHAYpX0X˙>מ- Cyw P /:J 巠o Rge JNꀜUK pHL?^++iL;V> UHsKH=;k#yo#H-Lgz8[sp>@9bqRJN Ơj0|JPZJ[yQY-hjhKcJ4.(v8iM8dk{_c\?BImX>Ɔiw:VB&meYD[23G9;04W (| ,>~8+o͊ GGo WV]i*eSyq}NiE%H>)bPd E:!vCޑn?ڄ6s#ۤNJ$D=.s0W:IB̽~.>Uy_bOtp>(1]gqW|Q/?t2 Dk :@ۈPS|fG4K$'Tuv`>:p?!sbj^B?hfeM.#>?8;pIT <-ųFvm['62K-sx2n@ʴ#ʍ͎E GJ;gD¦&ɞt^"\sG6V@I*tܩiz!T tf͌88Քq+u8EoJKolPr kfe[EA?.Zr54ΗUo.]0L#%8*  ?#-۲-nawnIe&G NJFN 4g_mN<̴wk֦РVGZh~8AF& N~ r/UsX FilƩ >y1]TMgP>B,3(#{)"صgl<""X0_$Z2jW&<uiV.]TƁXagUpas4 [/ZU9Ds4 IM&~Vܳ|×!tm!= `ճ/ " OxN&v΍gus,GWF"<if܀,t݄N*6]̙p>+ W?;+#cHwni+ TWIb/Sr_NVjW(IS,xP8ɍw닜 ԅM8 6N"+oQ&~ǙsW]XRU,q.ڧ8:O%;ZR\U _j:Nvr^"Z;A1?t,-XU]lHR*Nʼnw @v=UGQ/J/ 2#63N_5YTGymKG!"++V!`@Ʃc<{OU.?ǑlJi35VD_d^6{1ٓweQDBRR =H$ {0ʆRg_; ՐZ ֥\q3bD?ݴ2qfCi::O۟Jg7TKH{y6# ,ʊ@<'U[Juͻx{Rug 3`FSR0郍:mܪ߆5Fヨ5b9ȰFCPpFzL$Yo=OJ>tA"X2i'Q5 MF\Hnq 'QTOJyP(˻"k. 2ʚ%"+4}$i#DB)4$vp:3)[>ה˸h4 $N?Y1N/*``w${,T]Ϸ_ :*F+z˯q2QC5t+eڍu1ʨzm#P~nM߰Śm3v`Kp5T%t+mcqH_FQ ,-k$$VѤI 3Pb'EC\BR8$apft]3{ dšHcV$nCLVkLds#tds~_eg,t3&Q<3u1 jN5vZOx s6P;}8}~|FM5މMd&5:zZIt\ SkCeQzNfX^ {cra Ͷv07GŨ'=Չ*Έ+17w\ÓZ_; `ζb4t$TCIMGK8U7 (<{=9 %y_/f%c̕ q^2]zgc(/W*?DAk:95h@s_D0TؐdM!MeMgew&O#}/6<,$Th= So9| OGTrMjĵ.iHyTfjrWcb@D%B^%vikoL~yl|oEB%:\" BB%<)lN,% L]V&S#6s7`})?bon VمO%, .~YIKQB?[T^`Jƒj}L]M ߼ 3* dQT#x:pNcb%drsΒeCjֶVu"aӊ } wϴȵg.(:w^9׍a5%U1ʅfK([yȹrt\ Hg19%,όoNL!j0RI~/z8BMB 1_Ygr 8a-~~\wefN=5 9,eoﲶ5L~4; GL^q-@8Hރ1o `35 kwlڦil} kinO|8 Ӷi9D|쪊'ᆄxYAw;-\ HԜ)nMT9@塚p[Ll?M<7~q(N+%ʏ ǽ,IIYkJ0Rc~&@L.e ݰrsd-).^>GZ yE\_cw+wM =%zqvϝASR'ZGyEySmC!b09,3s^(TN`ʉ gS(78&t.$/7~TKG 'Պƴyj":1z3V0~&foo#'Y4wA%ݬL:2!s" y]2:˽7z\C< \։Q$ZE-:d髏o]غM[ Q6L?lb5 t QPlt,2D!}Eu]?IMNǘEU޺jfN3Aٺ}ɚ_P~+^ϒYw"ճ2:@Q$d!J_|Uo `L94^/9") 8elE ܭ,m]wEMiAeJ֝e\܃THbX cBDgdB̻B0,vt6fY?.R햓%luy/ݐ2C3 }ӯ$^*d-DbhO@qgx@[ժk]]W>L3@ XMbIjhمG Gb&#@j0f[7ZuE^Ȑ.5k 3kc1`)QԏBv +- Yo, l)7׈Jj۽EiZ!ʖj01l_jlhVQiu#sAomssѨ .,ylA:S2->3[nvꥠ0V֗KL sOQCicmo/b3]mj@uwbŸW= maYZB(>fAKS)a=@[k/KZ}>~=dx@GFjs7 =x*iS߉}np͔,ӆOV:2~8/l4Wy01⁎]}]]<]{+xI<۟>DJfk9"-{:pMg3453/1bG|!2k,i U+ccSWDŐ&bZ?DG|W`[}>c_]P62 >M'.4c9N0Cj-[rWLkj?azdrNI/T O<UTX͡7?ADqBaJBv5&5lQ|i+4D=4.Hl+zߘ+s.>0]XUuI5$ez?2$ p\ [xx gE樄{"gs-νX-AiZ 򏩽P>sjSw!`2Yh$ ~ }$p=< ]Zv~"^~}_7 +HCoo|^`y)`S nh-!x'nadžmfkzlf5hU+tjA,D*zV_.ro$..9+Y21",|Ky~$;E2t'|QjUso17pq*Vcie`mvE?sXe7&ۀ0O*_|;R ;Ez zƟ(ߘ|)kK5GbN}!pE%FB2րWQ@k q_ؾAɧ}7fzT"2#ONT1sp(oD}W"3;%=u !`/-i,1A aAr6P/"F){>Thnmsg!gTʾcu3!l bBIG慇~?VM$ZrjW4<m+e1-h6%mJ t|H/]٢e92}zV\%PUw"9/iKh$"6ށYSsj-'{Ac;Rb<[ڊE-V7m #F?OI/3́/DͅxcQnWnGOH9zZTjh;5 1jG L[uڎWzI G:ͱA+3]SIZzڑcbVpi@ԣ\6H61X:9.tNOeq 1ʐLrN/9Nc]=+y6YKpj;1_ueﶞP€8C;n,=P_pXb8.ϷVp\9vfoߗm69FӓJʒAV7ڝkᏃֶY/n&u%yA L{XN(d&aִlG@;?ðusM>R1X=0LeX03x̼,y<'K&B(? )6RȂ^?CuF8hfl]IN'B|pш*.gєNP{ HCK w 0]}a\7 ׹ïYĔUߨ6A>~[N:ׁL"U隓/su~s |>eŦKG{+-*`=7UPAEVv!Qxq,yCqBgt7}JpN3e>n)q{|p)xgc .`\nNVs`FJ/!#HwR'' Ǻ?H)0znW-'F)cCNbqv\ۣXb#q܁`uÍHkktT J|-퀑dNP+t[l}{_6wr>id/!ڷM V5o9oCM6 $@g99+H}0&&P3Z1}]4NcgG8!U\BXM\9_P[n O36I^eJcw`)ڋwid(EF\rt~+NjVrzU Q<QљU%9U)$OdrR݋nXMG*lk#s$'#p;X•:Xf>={9r:{-|NZl8FU0(ÜTJ@p]]$\ɣ&+0a%ʵnwY<)տٛexoiQmy MʘoO8>r3&2 ˲`DZ$_§tv t A \}ϵ٭2D~*t^o-쪞D؊uX|+[{!YUۆ<~ Ly-ZEi9-m0XOYuP^@78(QcMC^pJ7m8=L{P! 0<{(rԱ.^CnѮK _ē)cdXewl1&aUJ8첲W԰1,d|oR oT4UԻɬXH }tukmoKY)+]xV2I)KN LbZ#oYF{=P 95r !+Z|7.M5gi&:ŃjMuSƍ DK !*CǍEqbP %AGM;)0`7$\L&>gMײ h&dWpŚ_MAf8E<[дs:pj[-C Agw/$}h9@[ _ DxXyC:R~f|Oզ_o[ôK^}]P}];~޹\! ڊ$A C.ƹ_sX-.DYjBM^8])i:T)JMd)M~ rĂ~a_\ȫci;4<=cy Q7|Q54)xq邯7;M,G"T8]g,QϴMx6AXo9wHQ`yƜI-/{\y Ӟ/iil3-q!4-x30:֒n(מ [D?cT1(﹍R7]l_#^x\3n%LVN2v_J.SgZꇚQ+. *`-ȸ{KF*14k`~B}Fh1߆?- \iln1$KWpq}[[l5y#9S8PmbiEi)6oXX/8E%]Y %wdN`2_Z[>$vld4\l`]w|(:]*lW/mÁ|& y G)$ Qjz'"A~ 3sպ[)y/!D|{bXC ˰JeQ 쭽* ԘsR"QtVN-',r<#ޫ`X} oE Z|v fW|#tr)ZF,_a3~ϿhWa \kCv񶇴$f Ԗ*zmX< $zl GZs1*X(AgW6g~z/C) ] ǾE93 'a!A~WIV-{!+#I# # (7co w/ٻ{X\#i${+Pzdc[_RX>T)_|f$ښ&쯸hqY*'j{tfp}dȈ#A/P!4B?`5X^Xd﷠L?!ų٭mL:>|;S׈{cvL O̢LbVS(jl*7,zu0\k1Z7v!#1k <̻DtU5<Y9thJ*dmo{k<,; ( tsn+S5:x@ q>v}-7j]?5IGy97_ؼTqۧf9ߣ|ka FzQDwo JM)2E!@Ɠ߸G ձh&S-9\V:J iF!ǐlš6XAڭ÷t6vAkw6]*R)WƅWk=9,+pr 5I 鵘d_l\QF8Fl6kY}vBqO2 ߤ1mn_&Vf]rKf;X'3K5a01h*^H=1iʌf]C,50r;tXм.~|}aPAŐ4T$SWIsq9*6V:A)r d{b}4eM0 eV~`h#? EE"o͐o?o!@ѻme奣nTrC ?ކ)(E tf~ireRp&wRz9lHn%)r% -D,ۢ&Y4N]Կ-}a19<N͝ :g6-q1fowCv[tv˦wr>Fh4cpa((Gh%]ID{ *qJ2>mG%&SCXPӌ:`DDfSq8Sf'$ Wk\ɬdueۨY5lۍ-i`)XVq,Z Uf]dSm zf?QW@%IL1Ց(KofU ~IȍBY]?Y1"5XYٞAӿNG#Fh%Ɠ9&厮"[JTy愎^oWQBW\0ށŲIrӲIgmM߃lLC[ :j5R8O=D7:캧rZ?)$7%/)#ΥAxYq _U e<[G ^)ճ.Cc:QFc= wIwڣtY)XEm.mCyp4chՄdE [".voK0#?z~/eHwp2;i">yg7)l fY)|G+Q{Ew-K*y4}FAL|NOW`Œ¿5AƉ1e1M?n`UN̞5>%@ag.Mf([H']]| fV!z\*I.DZbSu͟~ Yx0+N{jWP >lܹr~eM) 6Mcy:E^ȁps(0~ jL$ 5"= J[ QE# b–y !re`h$lJ˅GEE56 iji n KYNfll^uJ`oKZt4 8ze:ꔲu&)~˖K o~jCjZSD]yM2g5Wv5tafLN#j0E(Mh֑톐޷xªcMUhn+E6\5.#u=A_8;']s* )&Oٻ4ժ$nV!CLyYW{1coXlжGLEXB攡u *LU֙lqU2YТg1 lȨq}|zAD1k`k$օ Zlbʓ^a \-ZL\oi);pε('&X4ُ/k1 t/."i$ՅQ"շ:qƝ p'ʓ!o%ZX DTn\YfA6v0"<)nc s5"P\ fUZ @^ȘlV1-Gȹ-& ^^fw),6z&=:@vyB1fP@P 1<32h)E_6)hjz.d~}CdHfJ7bΜ dI -J:'1քƪ~/[ʫ 7^4Dve:/!欯wW _no@#z`\%d^vJ3kT\X] Z,^ĴEAl=@y5\8?^7*TQx&TM|J+h$N3K:6|a*Ӣ4[C9`ݡ)mUyQ:2">堠"󃴚w3TE{;c5oJI(a=a=>O45UFa8E!6+=pYKZc,7L?re(jeN~^ĸ\4WvdT$3㍟C.t~HV[l?M9"q<\qsPmGu6x&aʥu0<6`<`Jll4!M2D.`ϤgfZk%ͻ !R96'Hl@"mgՖddQ}ʑOjC_aP?)fS9tubhDl=!{1ZŤjޔc8~U'V;J(|[Kum Uđq.2qFLxHIz.D&|}2`*{g#(s  F҆>ܫ ha55P?nFÿzXRSHJoTOe߱bZ'DžgFb_O/&ERyGA'FS~9; p Y:*Pڹ?`$3qTkp.j G|!aiPSh3O_ 0BH$9n[z`) KwnY=~ʖb/uBwnπA.%Xh\EKR7׉8?t5>߳Ho:#2T1t^ѓA(l}t+.*ԇ 列"*& XB!Rh .p_TV ΃*t{a[ouHf-kʋ>!#lҎ7pYY 1|eͣs6M\Խ6!*7I+i J/c03;|߷TH0`NQh2oBSPo-uc7`Ak7°MD#[î|q,^m"|̘W鹁9ǥ|O1+x*8=BҀ@,>v[)ToQ3ULEMhρ xC0=<}}=b{m]k;!|&I`j,l{ށ<~cchQK֝=K:׎ pգ=߂οN{JXE`?~+X#|YdU :hBw<6!Ra|VP(׺JO}0}64]ܫQ{a֒# |eQf;XMApR99o?ǩUpKO=]g \\[ 0-V\/q ;?~XDP(p@ b4S*zG}G`z/>ZwF}^9Uqh@1!2[V$NuCPr9_gK:Eņ_T?x7žJs ED9^V v/]'/7Z係c,:W0ו}?|'E4Hr;?|66;s\rѰ=IkN?Sew]OHH co'Kf6N pu $::tgyMy+9twʰ'*-!X tvUٹ`3UY^`س;̲t.it߅dd=3\ďeJ/.6aXq $锘t 7/C w\}[ˬZL_n: [I/3p4,u( ,rXY٭gTۑO;~C.!yg2"h噷k`7|֥n'F}PM+{ސ_5'ͼ2$B :Mʟ'^l"4}0ho4e3n #o`RJͶ_r >)Wp\OW͕v"%Vƶ 0SFy&s %W)).1poj;Ê) w 3BXbxF'5YDGqޖ؃!GWҊ{9Hf"I9D Aմl$EQWL͔.*x T˼D̗ ?̃ =]}rgB"G ,-w>T݋sT\_5q&Et5]vCu>gt%l!]~3.Ṽْ DPE2Q.ukUǺ[荅>#|BF`F28!M P/\ȫђ]$(K/Guhq~yT%/ʏXnNRG\}0,rDe˼H X"'ʄ% a 66;6a$`ѕDv&0%oj kͮOOqfJS_q PQ}:_O[0>6{r`h`G}"cItG{1U|s(|@[vAq["]^<(N~3s6+Q4H?P ˲Nt !wAI&\D[,b+%t$HnJ|mB>KQϥr<0fG-+RStT &SL,h)M޷Rӭ4* w~us>D(8fGj#xMUQHy@LfƴpMCl4vB sKm9Ĩ`v9}@?J-*M^FAI{+a2OuB } =vRrGcoD1)guMN6Oؕz4_G^F˘;"ggޒFT` SF;fuGshvm@OlNB1gBt+ٶG^"4ȵ xnfB7ɼaHߜh`׾. -?f6lcW@Poi'07nԬ>@ N\׵2x"`\dֳz*7ԅuڪ`ThWJZ`6&>J~jD7SÁ\-l2/b,7Dح9 ev02ۉbR8RVF% Bc/hRa2`jH #Msx>B Z>pG_ޟJ[gFީ&}hmjU{C޻6V)W-Z>~ "Z"ȳ2ݞR^ 5ssfYV} kr  G350Խ6W77I5%|c|Cdc_Hwr MN{=3_&S 5-|.KA#ę&57 *O1ȴLUCu&~!=B i?7 !1/R,X 7n}sUkفa;׀>Ȥ 9#wpA$:Dd]ܨɵ?eҟ||oGJM>/X<:Xg6x`ir hxI$@:3|IEН.!内QPB_m @/1fIz!Ĕ&Ru&mYd2<|r;?B>>½bwrbtɲ*%Z5E+MH_JcyOc6GjEh}6/xjؕրQR]z@$`XP=n䍝 d]S,!uڱ_P"'H4Ĝڵ4$Rd(q@cNW$aGcJޢ4ˋ{eԶGvCmz|}fj9_N{ςql!BF'xUF2ߗG /n$%5ÿFSr6+h`*`L]EiMݲv]|TZ-l y5k?wP$idZ:ར )\ =|у&|ehR5W>4hv3Q _ o!wrW%WiyuT_| [6}Rw#0ӽn(LD\-1 ~p.b.] >%`DOrSPl#,M?j:ftE 3ge%Qw0Bӱ|{gY[\nr%s>"k7?TykC oc5UD8$v8\~.QJ]?T֭~+[$^DJH_ YlWD?hօt m\ՠI>44FK EQ>(lWf;UKDHq?–<=7 qd%5mOKM@o/w1kt}/'/Xj{~X$BE=lCc$b w$anqcz*IHB`BVN`/gF QJ-!k"j?_],v Y&.\UQ=)5' {ܵUB*[-H]:Ma\߇{8^Hg<1N}:]KX>%D_CK׻mJ!SL;e8NTj=6}s*3:C=64B_۹IGd淵=t9ɫs%Gg|R󗋢A -В"f+!0^ ϏZ<&.z (Ye#;Hx`tj6J{0%pꎨiMÿLg7jP =JG4uF\zl;(h/RcкH,NѨEI"T2o_{nzg~T׽#;iPiKbLlvl%S$Z * '8Ie Rե<&A e.{e"&/O蕳kSQVq2}3-bD#\Q6$@ 9* ?X>헐Fйl߈A%LQ>DV6u?"mHjvoSw8?qMsȬVrߞXSP(3:/S=sjҼ<{*Rٓ?pʒ]wi]+nc$\3Wp:M8P#]ِ 戙 0 {~U2A`3t h%5|]h5ѩ35(>Yp8zYeZC?D#%Ķ [ ?/P6􈀠$`C%zݢש$KPȋH]g@p=:4b)sp`M;"ẁK)*P$X %n !yvY=B s vExt}ǃO3(ܰ/ p~pāNKm@y}p,5a\]O,tUV?Q4WJ;/tJzZ`ΔՌJDGGR.;3{\6mjXcR?eK7J}P7$IQ)cAE-+@{̌AI)6dve< *BAwpG7m4qV'22uɨt|Iᥨ@^Ta!6ҲN,-17n!u b, @ήe.ccƉssQoz/.9ݗDc+l$_&f˴5 SU郩tʴW2䍛2 3|NaXʵX`!;4yʦ7) s#MZ!]4{Z]#wC80jmxD5[2 PڬdYGx ^ g {u'ʯCa[Ң:,Tq߱NҞW-mp{ `⎡h[ʌXcB\ik4ቲllC,i~ IyH kM& .m=MXu_(^/H|GEu]@i2 A@CDtRAA]CB=gFWӛ.\]Ѱ/s) G3EFY0".6B(5c"=H_1ЯnAc x3,,Ɍ oE #=ursi\ƴ*ޘ)gS~{K΢Xf+Y5Slp١BJ{iO^~rW[v.3jyJ Z#(}olԇ%S"yR@դ@4wo ãriy |%vU O廌ہ Brb~RQ hA:c]έ}{[: M#Y?Q].*4k_ݷ,BxZsf*rccm^c^9Ux2 >A+sg~QNoxtzG_L@}XoUNy O՘ ^XwÚ#=t7+0bkYgqv)-@.?Ows*j_Mҧt%FX\5AVUC kʉͲ/y`rDP^Tta2BEKZW ݧM5^c˨G [mxPzʒ3~-bFp&M;)g8c]`=17`NzKY5Bz)Ƥ.>H)ΞZJigqbĵk%nz6״NBq];t@ ے|뾥0%.?O܍HPfS>ΑS_e=Rn8} Ow(Tn^/̳TF6iG,'LAɄ,04ՅȺf,UB10JDAoX"ĹE; `S*ć{Ou\ˢ8l !'*_q"_ .v[E7WE=]Q$,wz'\ĢJg"]/, Z{Q!`~M"IĤǷ zZwii;Ns5j_7{Eƽ Won c!p~o8g[~R9v`v^7 :ɠWz-_R5Z&mm|mvLzU7'@3r Zi;#Z72 vg 1g5rSu*HB*r/ƒڦ92 5=q6`XhGoޔc]eå:rb겺}'Ԑ<ᘅ<&_ZA3/x)LX]ɯ:ۙS1ZbMAc"ۺP|XlK7 k~:6( :عԋ<)YRNAaM3PDS% ys5b'j{ hh?T..(IW5}~KVM;I]$ ;MBISKaցlS@be?TRT)%ZCv|9Ú!5:6r)o=\jhO'7q"z+͆5~qhmEJY*d@+ 0mT R]O2VNm~\G=7Ҟ JzÆpKZ,5$#:)ٟ<f&Tu"9sVvK{ Q, V0)-+*wIL\#}*Oj67+u\>UX%%G6s뫘)@@A'0}0?;k#/rS UpՎ]DOy&b=z:%y(?eڨ3sSC1D!9j~>~uvz}Pbh[Qbsv"΀xWNγ9W?GLJaugaǤgHdLa綿r[!X^1 ZHUD]P/f A/xZxc`yD_t뒢LS ڭ9x3Q>em,tL?ë^5Qˁ`Fv29!Z1Q9xuV8 nשּׂ$+d$0uf.e'E['DlcVWDQU$R8\sB9ݼ5zh*:1x8h=ZĊy?!c6.-R'X1ծ:ʫH<(*m}164+3I_dEJwF[G4]`%e.C0$Vo3hBޒ_hM\Ruî6P ~`JYJQJ1Jsaxr)*]ZIc/Lu&?GMzQ/q"iTY`AKU9Cene[B:xS2Ԏ/憊ͣ2~N]39}j<V,(]s*a{|y/>.WRWVߎȐ~k\n+8wMOҩr#+ QC5xɠ; x|4osσxk1LݿdVRK:BNET׼4bSOUEZ* \եpxO 33ػ~3p׶VTwO%=V4{ XH\6'3tnN(b(Ucŗڜ΀  {pCLba =7[sGryJSez)хh[~J 1{㎌r "7~~h1v/J{@v>֘_p.r,yyyf>)y#r]- <3|j-ƭxI1:aiVP:iPyx }d*d4wXd2=#}Y@@[RM4Tn8cf=*@f'ϙӇoo5|),9ϣ3ػw#uqvy,ekcaV*-O 4!*HG7cfmU>c$,HJ!Ⱥ"RD%gHSh</X1 Rͩ\vd^rbݹH SZR~X\<ޕkv-lcM2t4d_Fe;{>ĔBɡ:Sh 0SVf~XQw [_;Wf8w4A]@ 5*㸹 !5{E!]qSYD2/ DF0 }՟lr O$*"UQyٍQ_c+][¹b\zv`eVlKAVߜ?/|4=he!9Yvh&S'(NGpqјdYO z¤&(u3&:/'A/uCVn)9&]{23qH]DŽ*;}Ł/recCx`иh#Ha9YSm..*U,z4Z<%.kKDtؔ1w]8^a86AbSK=WH:ӛ<4 E'zK:?KE VY1MQN: ic}.T̫7—|U'/^)z=j,x&7l~2ߝ8*4 jA(+X,7L1tڴu1NGʟ3T(naD (_(4cb{Z?8#{(:R; I`=59xe?-t+8U1SUKߍ?@OHm>^$m> ԭGJ&3}>OoCUe–Bȸ=rS'+I ̾M=ZUf;.Qs #{)[zhZq{C)Hx(S8/Z9F&/_3Ѝ X5 qMCl5/SD=!ģo@S&ۻ;րeLR?# hX\::Lvv,xzi&t.ȹzP(A{D\B|'{(e).75rCٻۦÆN"<G|'^_02껓h}zs#cz_Z_+2A+~)#X_\T"#p_2PU[q"6_>5^z<?$Y,MSĈkXIgX$6|"04ucm>Œj.0TuʰRv )~)ܹh(pۺ Fr o~SP,xn?3ƛdX@3y_C Xn,؇ {O5nQF7 |xk5'F)7P+__ҋ> ~;( $ݾvuVy٧cwb܇\<o0¯ha>S6^F?7Ͷ_ .R;l#֣X%q= =kKWdǫ\Ec#Nbr1`Gn쐤522JJ|bpԐ=|d >l".- yI?ۋf@_(ZgLpg\UNMq>.$3ŲT_Y"+)GYh*ܿusyu#I ;!cNVӂZeJR 6adDd( ] $mmBɸE>|I$} Cqe6++"R50!fj9=/bthS{jDX%C7 0ί!cGWP UxjHVݓΪ<:H ]HeWU҂Go4J$d[UI>ܹG~71 R~u7g(=r5ok6L׍+""X" so@=':BHCɋGeRI}'5'YhdO,%{Oul$M`Hs|^Vsߗqڈ %MB?i@v6׀@AǞH07OHj( a~/|a5Dd3őhyhJLi ,J.{"mxDmӇf)ཛ5 +ge\`.nԧmii<Bjt:ES35kvB}f Ŋ'BJpAy9^{u0lJa#RNw.8A,78?h*I*zlc'-1\%glQ-ojsmզ38 q43c*6&RQDK<u["`}M(GQyɥI-, C~_թP٩{0zǪDatcU.cF-M+menSv]y$ ͦwhhMYY c*t <~CFv -7?xAxiaqJSKeL|,R3]=@ʁ 8(56h/ µ@S 9[#Glj$dk:4xd|bKDs-WUg :`uDPܨRP_mʵ fDr:]##i_)W/eHu~ʟIKIjCNTIX0&)DG_C:Zl$MtG-&)_9%BEG]uݷܛANitp\e(J/:bF:/}"brNEʝ$.آ=#o=$e4nlb=5Ge80U՟\~/<JPx@M> f9v[?p" Ҭ[&!2NNɮ[Nw@uTֈxG)HԄ1,o)zHE;a%Qa2?h䉇DAV Lx 0p~W^ˆ=ɒ'~wq3_s_ozóW^õzoh_ëPxy]@ &h^%x#KqV CPRCOv @ۋ4|3 <+LQ ]ݧN#G``JuoD]k}69vE:T۫%\)S_(&[w x-qfݞfX7 C<$94h=rúL ֊1lyGrEeɃqO7b>ti@1Q 1*rݦ"'pl& @K'PFˈ,raP@vX0JrH;L]{L (Mu+Hlֽ&Ơ̋ YqʼW"j4p2'W ^v8+ 6m‡ bG=!w@I5c]pl~qfe;)-%Fwd[HF$ 9;Xul^^jiL߄źdb rMfxP@\ ;$z鯸U'<.ǚd䠳8{%Ox xUTvi5_vYEKz/7ї;,]Tp8^ {0Rv}*U}b9)N ;OCMEd߶ё&y(5IepJXq\ZQ #@{C׬vhڷ#a,*_#j^0JyQL א97n2Դ66DP)\6 Д= d9BPe#`棵qz*@绸bC0Ra'ïi2_ u<ƾg qYjN.mokB8^l\_WEI'KG* Q!{xX hZ-K,kϿRcb:{J Oԟ]$u%Z*oΦ$U*s|Cw]WsS0 G wqAW' W;(3K20bR0+:PbE0SHZcTE\- 6ãjɁN!ҟrH$-NvBa5}E*bD;qWR/]#H03:Ea<"yk$']b2:Dz$[e8f_Wh%W9 AМkUΚƴg lP'S$dҧb1S>Aߌ!ǁ^ZVAFP|)+Snk&mu*sϥ{P}}ۿm6{uŁ}e?I?Kx:Qhم'/jOTO:5d?olfBN<79i.}֢ Y{}e50afUٮWb5 b®HC8`}H}G"Ʉn_#9D.X1d MB#^zY2÷$쳤8.2ьFw SX\oԑgڟ1 r2 Ӻ_-EDž݂ɴ$c ď{ᓉ; P`9H4J/H9{fjƊs{,Jz=т (y7AGkma!+5y_մm?tA 6`%Tg1Scvm uy4]35ĤIDТP\י/VW*nCNj۲B v&W 5rLzu]@)쪮^YUuU4Z:cRF&o2)wMR "Ow:c`Z:Ҏ1"m/bn+eJ-?h;8C8Zal{@Hj8m|N;b(%9 G[6UtW.xiF e".@ZiY>uklI7p _c%vsp֕.h8Skx-5J()F` x`27nԫ02{6m.N~wmH.|sT$4tY9,e+[C*0wp[Qt"y}U*M}`Fd`LJesG xZ”4akpmٔ9afig30KXX"7YCbeMEY&tVӟOX PM_bq/et2>1;UUQhKh, b)vDb/r/YWWA4O,og w==eQl龈٤h4;|]L.U VXoœ'r璓F/HNS~d J8uOΙ }Ej?>̥SdB)5:xy-| s$0`es O k)+M+c%SK׺Ҡ+Hp`F )LW"/kUnpZ|6.ZHC(wX?̚-Vk!+9<{Ϧw\CO,<.y]]B` H@Mxr㖞t{vƋYё'[BJ6v6N!$_ a4qȹo@#Ab?:&'tҳ -a{WeX3Y!Z[4Vٚb^#"a$ޡO_\3vccXbAu1tXlK0yลw*(Nho.j:xf9sf᐀o'87mۯبWv.Vڗ> cD_~? ;PYU׶BoCF)u=,,3OO:;ÈCOd~CMdz]*$MnT^UҮ!S+|*? Ex\O75E6Lha9 Fw /afut);Fb1cr X.GӒ@!ר,Q9^JnqLpG^)ѣsk<0wI*P`nm $l}2.kCKtf@W\tAOR)QB2yl$rFdw/ ҧr'jDmRâ]0nh7uEK>7&C*mbXiGRiդ@819 ;ȉ͌#0=i1.gtҘgC'mCfNf:Ĥ]$ը79k~7>[?rD'Jk8]Yn)Wʆ\=/VX!bW4ĵ%=ˮj ٕ7aiZӲȮsESOW3 OJB# / ND*PIl/` E29 )8}z 8F|/CPXJ&0XGc)h 0^^yWXo"J])3ŦňvA"X u@ߴ{&"Owb z(b>% Xs-94=)ɚ7NoHGQV9-[&kd~ ;(F\+N{*yM QV3ok"W.Nnh]E,OnfBx%㋙:4{^-4$Ccd`u|LϥgJ3F ?ud)^ژV04. $mA@s";WFxfgq$A|"I`6pmk_2JDx-%+/ RD򓷬E >} )øRa7F ubf9ӿFݩXù+ǢKLF;\ 5G-`}],i+gPx߀Za'kqmWj߂Ao(F꯼I&V "^[]f9ԧAY0أ5E9Sa{ZR=juvހ֊;5D=f>c O B|hvJouX! V r*%閉Vj8;& =HcC8WNPS 4 McSw%ntɗ>~p7ced]C62_(bCEg_Gܲ/0oҔρzf6ETK3-e2lPɞob? )/Y) #),g u\76vMRr =Z,I([Q}}OYWʅHíЦfX 0ҤlىI)Etq3^ve 4o /2cY6y#+ZNj!4OAF7ľwYf\9 ;\ͧ9-&%Z /|؎sL0zA[ݑ܈9n`fssyɭ^fA1n+hkKAXG]ܯUtl՝ c;2saԑKSP\=@:n6o=@_8g5/ -N9hƲXvww=ʫXjmNS$C۔lĤèlv[xo)w]^\Bt ?ˋᄓji&\WF m1Yd=ޏ1xM{ti|Qa?[x> (?1}0.,Z։G"ޥtdvOsL_}x zfe2n2j~QVsLiBꦖu5b4&;M&lCsj٤Gfh(>XY蜑L%hh-Dv!ʟ<ƜNF`iF*?sPϲzu3sZLwIqgHXb6aʒZQl-~쌫ou/zBB^+ImaN({&Kw}k[/;|a4I+L(7DLLYJFP[xv OJD7Qw' :Ha_}dn MovS™Gq ' X9G@% dT/yI\+һG^*a ,78l63#[D{,( Ev[ s=IlVR'g߂(ɏ@}V>4?'>'qh ,G̖p#ωC 2iŕ.vADF:ူm?7lV}|]t!`2&fe;L*aJ5"s$贗٥AQ1' ` s({^}B~j%<d9&VJ\~BvN^x9u$?| b~AUX0g/p`Τ.G.rbC帷щ%mİɞr5ZB4A}gXԖ۹^"ߡ=QyAx6.SZW=r,hnL—% Xӂ5"TʉK]i ;K$jqiNq^' Ŕ3@%j~xk G_,!g }mr(YntiIe,ЃuDONp,"j)%ckEj[;^|ؾ]N@Dodq 6;po^V>?@0gVIB3H}{^(ˌKZNɌvd^Y ^5)3^ߡ׼_|x)iAa9lDl)ʚu+X &ڣV^9Knkb;P%ۓ݋714ؑG~L?K=B_@+;g@3;w].4$REn[m>ˀPs? JHf ZhP3M%w^B< /.C&0n1HE&j2 =ٓQJjW]2hEag~h\a)w۾ ٸ+(þj* 䜦/!`$2aK QdeIcǕȞΠsλ 堭s']B"vwV [7U8fH4j=_yJx =(w;ǩMpfH8CRY`T9hPST=Wj6!`7=8EImcvSXN?n݇tۮ[_Am,C^bb9ׁ[3ˡjj)FWLBGfj$vPkj8 °iQSy%8v xbhWoyſ0vH^`}M{gMȒH^m!ȡ)Z3jZg} e _ʧC7JJ,s1e=cr2լN9{H"ぷS4nTr;!v wײNxu~j dX 0_Y_Z!"shZ 0%_?H 2>K+6| /]7m}:sρ?JI^'s&[m$2f#bˎbov>u%P#>)QS?Dʴy(N)YA 󛺡j+@h}pq0ls L#lshO]S"[(Xs5P> 6>l }5sK(_x!y\]>oVRN&dHFbQqZj-pǜ`T` X0;%bwJRd0Zvț&X bOBf}|#",[%mgcWˤX$S>·٘+' (n}X[#b)1O͔l4+w~ ˽+qk,k e {\a2Zλ=luS=dfB%/]QV+" D 3'?IxrCDy/u]Ks:剮{QiIЅvï$//]N;ؒVPõK%UA1NԖꠕ߫5`7F[$oLj#}e0_aYge73W$L_ Q :V#1@f VK6z~6m 9Ox&aw2SU>-6o&h1rlFLj}2'W^6g L[ۆՃMG:͎O͠/VMfv.GFO{^" XWz2"!襪K(kSg/ }rn(gDK="H [刌&,T@XQ{u#dm3Nj!N)b0E: (1!p%DNUHS8s8_8/F a3 {ֳ :46VLYR7b'IH:~=Ee|C*;RxI!PMQt@6;[H"r;=(7 X $_⿷ƚwih^5[%n>e:`?v2j`AgqqN0tB =eh*%@dmpHuO G$![';c)^?v; rA~(AJ,0g9ɭ ڿ%MQvkW )PQm a-SJ8y8i*5:0z0ޫ?9:_-Auc9+9HQQwwHouE:O Հ`kSJDS([Wy'5 3:A\uhC^)Kl;`RQ0; >}=DЮ\Dy_ҙ KwR;Gܸ_w4.ܣ\B14 A9וbgtFlq0:6v'ʝAmCLP:N->̠UIOuf#;5 ~VdW'ۺ {|2?̘"fj媧$AL {IrY xC\_N s-\LS* ]gm:J ;ϻcEָQYZ-&IBwBP"+sǼ455Ŏn]fA"}|^pE.*ܜEU6_A8y8oxnPjO5VEE1σ?C$P`Y1'@5S9QbAD]]\RCMGP!a"aA>PO=PE~jBZRwj8pd87Ɍu6znSSUB @ MhwsC;ݦnϕqS4$aخ5s짚#^wGNFAմL$; ."9\;).0JcG)hT>rp~( :WJftxiC!,ҧ&-34Oϒ@"Q{i . FVS\@{,[4d}}"S9a6;j (eNdP lpGiocʉ`C ;F1)c9p1E)'NFBG>h%{f&zJECDޡp/zD}=[D*f̴]Yk>4{?J~F=Ԉ 'p Q:R9e u `À1y?9 HF?Sd";Yt<[ +T<_* 0iΎW!i8aύznБa,Eܰ<4K='o>+pGZFJ&$A2Wډwf%[z$g:7$ɔ&;]گBB~S;B֝lpTҽe S=F-܇#*.fLᣕ,PNi*]DW[ס`ph LcWb7 _)2 _J - ԅ{Ti2%U&g-[qAivPÓ̀\G#K_fv5Xc#}Sn53olMC _@A>}hDipd47e@2yw00fPP]33j 'N/i##iUlE04ƙ\5ic09 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2d#Creator: JasPer Version 1.900.1R \@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP ߆%Okz“q/(&aƠVl JqLCi]ѻBˊjBhGtQ:/:gUyRaʼnY& //X VJ7KM/ʊØɢ#&h/]?<퇳Kޢ_cDc:6ScfF_߆~S(9)eCBSTćE(j_ycM k5 4j^\uuĠ BKf>T;hp۲p(6/Gv)6hd`ۃgiXɆeLmV5`ɊfhgV$x"Jn yҞlftMDiN`[<ͭӻ04Z;NߒfkoG5X4埓(zOnDA &[}z @kV&nǨ]foU~~h`9>ݕ%i#u٨&dp\h A ?߅O )o~P;E{,'U0_#-ίx_ 1G6GL1Nts5‘j_%r 2D1QʋwQ"SO }E)*&GWI͘tҔ<~&8+&lCJO3D+:ē~2j({)q O*O46*15_0+Aއ_A*~yC>˟?;Hrm|Ud(n1]:N{qSmcS5_bMZFԑM-Y ;st29r҈סKxa禩[ӣê~k&t(_oꗛ$SIGd8f/y20XZ 0\_`8Y~ # dMjؚp|Y-;=DN ,w ZbfCn /Y- TuGSœ';5 Hqi+ŚJ[YO[@Y;=KlK=9S dZ%C nwL:Ǿ2hDXqZzJ8G. Kx{oE?$ AF疽|@]Fb A"p/&UL-8G اXnŃݓgX5voƉE$uA}X^!(1k#5kUE+)u2.isRMU~wД|-lO0 ;]4poɀR:1i~is3u+;j7wY)y3@ 8pf<@jkN<ߝ? n~w?rs~3뵶9-`>@Ƴp>f<<6{q%&]rni~ mrSS6? 3*s%6{s?ͷ,Roϰs~؝ad;PEx(KlRfs̲cT1ܨG o >ˆpB1+Q7i>2܈{-V oUo·^C}M;?Dz!S1+8A4cowDuӄ߸AR_CC+O!3gJ9<+KGOkV$:2~i}WQr-kYE^< u՛J;lDE^] 0>Z\jXrM^?ۺMs-Y`b2kdvEhNHrؑѣx, n%'3RntM|8?yDAwjD.0꧞"}4Z΅Q3Ck'< e};\+4b޲V=VLd&X9In5AZbK} ЉC{<{jA2ѳ{MI9YJ0?͟?;P.HN߻&}N(9'ͼ*;{*3(w;:gInCM_jUU-I>꧳x*[g^`h,VM) +t[RpX0k`G}E ~]yq g3z)G?}b)Eef eHPkPEgP]w&aWr%P5&Ӥ]Qe)v!W,y-_29ߛp_iGR[DLچn].ve O13^ +9&YxRu|J8n@.X5I/+_[tz\=: !g2aqnQC?| SE#Q-_2ŷOh fPTUd .k3ҋi.*\^ &i~ĘVыp/&&$^0p=`IYBHu44lQ ,p:1ᬚTwCYMGD6Yn J}A t7HCڣWIKd앾 ̵D{S Lm_ z^yחMh85{` uwxŃ&gK@>[Bڬ7+?/Lݧ6[<C"q ]=!ͳ%R'#lŒB$(N[hMrTޱ ~Bs9,&k,r)x1]}`\s/@(upDghԝw5Ss*&Zz {yIrP ^؄uO%-92%eNP9K?aȻ 1 =( o$ܢTZ!фSZhUq7_1Pe`d\GgE4`[}<鳁< 4,iJ֓(*cI*ׄG<;s{s٨-/Q{+Oz~Ta+RCx(e*’R"R|#H ǑE/E"֫P`=V`^scۤ@·^x[+:HM.,0,!.,rُä~}ʵ֡y=gȞc($sR*Q;j$]o6)ArKS,R}?Pף$;:ֈ(gPfSx%]5[K!cCti?`vPW//|;?IMy}]\ 3̠ҼlYT!w#;:I8$vd!b澬Oܸx'y<;tZe eQPT9<)CZЯY{z^Y#.cNP ꆹh rl׶L&Gj, a}K@kL?:*zɔ5Ag^&{QCLKzSF ?VHrleU; h_WBNWV^:,0Ueb$UV\C4r 'ipXN}>~> bPJq, ++H=1n_p Cvv@#CCqHS- =A Œy ZcHP]F]v Vt V~u?M~kU<]+hkwOCe9JNdV{ןUvnJ>.|G0,Ou2^'BSɼ{]-X?L}ak Δ ^S W ù>{_8a9V T⏁\Na2GeAn檱RIlɡC,t2-6먙͵,aSo?hw*'6xu9.BxJbry'(9q9;>(*5͇z' J@72, 0J=9Xv7fe=]-:0. UZ}gbC=݁"]{:mš& 7x|~=؞=7bBhY͓LP 5>݉A-ޣDp8kL?IrV?؊?{E0gS00KcF$Q߅0J^BTzܭVX/+B.ø91y\)T v1[0ZG2B!uzVzOX)(;W9GBj RdKcEaypB hN`ZƝnWm#ŦxZLVQj&!m/?o&Hht Q<ޑ4NFFB4\lS×(&٩~=a 8Lf[0D {Zvp*ZO_wc   |k5k$砥N,CR?m z,9F$% N UFݱRҠ݇rl:p:M]!;l),P{6X[XU  xam}M3*̿ËQo eb.t),3DZ̙k$g,W3 ˂CZ۠HtxuhIP'=b2z\IuD$5V+㣽IvnA(RPF/[[C6Xe5ًw]_WJçK~}6Ȝ;p߂4}2:j#L4R(A#}lm3-,bX*oML{TnJM:ľ9)<`i`NaֵGܓ廎`$<7ԉUHZIKlX c5np]ZSXw~)jdI{Yx<ҕYۓiim(@z[e^`q8 "x]usDj܃aXxDla-ww@mr&g㤎ZckZ(oQ1a/)a|ۛ{|kϛ7VnNhZ))2͓`􊬆$S Á-jrP9(vB|kA;`>Hʖs5P7rˡH ׎hX:tMCi[Oiz_]1^ο,\&w1RW=4rR?).S`Sat26܎Cq/359sKL1>+]b@QEga`w_7a[$ŨΠ)3/eXPBC)W'̐L>Ki. ;#g, X.MQ1LgnGƏЧ pLl0g\sC-gs` (^Em=7˼ԥrdl6bWcWp''Vp=^;Lhl*D6y5vgZ >m]>ٯB9_]AO݄HyKo!?4qX ^(7@]hksel#uTA֚ -XB\Źݸo0dip mn~01;8㿳L)7gƈl-)ʪwo&:|'=~Z(!$?F̸8v =y>/)pl>*JjKy"V44fDrALӌI?y5>g7B$. Ì-}OO^\K$n'3w亝ΈxRY)Hȣmh\áeϹ_pѝ`Uld'od}kqb` P},lUCmq `TzVDzbƷgTckq%m*wT7Ċ>z#([$\.,1^ v$#8>lW:cMrќ2*EVۜ>g9Won;"'w甭{@˓qD(Pf@ {:dK:48D+"9Km :DfaE: NJ;2[!,/r~yUf1 0̍GU5sm2^NՉX.&}uq47AGzvO4nmT"m> /:.3'^*YL*+sI7l F[XtT䠞&Μs=EsVE{aX{y@,оi]|||@G{E "N cqruHkHN&iieω.dDH;S$}.c΋_#@4}J+zX2(N)Ș.:6ܕH; +kE fTQݬ3B!2kt%&8}4A@ OS߅73$ZB65z|e4'l,MAB"P1u-mbhcJ'~ dcC|>FHe^N6^H's%A(쐘ätS?>@ˬ]1aB{nj]^cM̜1ÜjmJ.v-SQcM>SM q#Cx[ь? A݉ "R(`6uC CBp mf*VqȖ6o1MCg6/z:3/?|L Nxe,X:8^(tl*jAS24Qmt~),=!I;(E?]P/*.I!I)|ݭV.qRHxה6|;ђ4pyÅG) ư?ɴ;ߦCdɋJ>Btv\ޕ[}~'rdHW*Vi'BC"seBr'naOS<0E{/wͼYOS ^{y u4ί9a]?gk:~a7EV.vkm:B\,˜j#Ę:)Ԩ ^-$-̌8š3_NMPYcoTv;\}a_2'&-a EDo;E)9*F }m3n gZ`ړa%S 3%ˏ@8= HkOR BE ݐx;"1mwNGDHA$b?oPMˌZS8\/-PRO +}4^uL7-]#-}~T苊GxU>E%з$ BdPv/GFb7sL)10$z aځ;l?ƼKgq2̕Gfb!n!87;PuP݇z0 )0Sb߂kw򛞃}aá"{0%sm0`8_J?hy: 5?j % p%/..}Fɗ>1T|ӷnbjhx&Ea18˃}#ԫM7:],B]dkNUסrDhD |teM*%`7`_n*œl=!PLmSǮ=^x{Ļ*|m.PEA|l6sò 1SSLZ@䍐 iN"#HE h¡vJYc8*]%[)޸3U*|]Eã[V A7Ėm[lGa|6/c|hS;wS 3v Ra>2h;aGa]5t hdBج[PٙR}_,E sT#oBb׽#]'ʩyܟMrjm>УD^$M ۄAW2F Pc72N€/s($M:4@">3iE'1h}M$/J 4-yEb6_+^^r+BWj`!b!)yyw&+>÷meA4۷M 3}G~y(ҾAΈs(Mv0*fPw$@!7d+<)륡ǧ-~Yۤնv? ngv!C UV>Xw䈙QPd֘Diדvk'YP ug~. ħՈy_ĀL&ו`d4)GHJII|RewΠwYMC2:ԅb&*ԯ{&U7dyA+(,b{O:2OқJ˦Bu#h sç9"O+QmpG,wdž7(q-uNLV6)w20ǮoaF 9dkԅO.HA?>zHN g#JM[rd'UNAiQ/7\|%ohvzvY`WشO0ԿmUlIf只J`vɰsI7*F*O't^B8D_y yv+kX [k^iIsK-z4{n@$JeRχ݌XXϳ)پ&a/A2;R.,:dӋpi\kz4S:܂BMz42@]*׹~3>t,1>N2s 9p*xnC_G 2.NF1'jHuv &بq(U?ziO#|Ąa:hud~sGo6N\p~:^/}DCMC ('ˊ[Hߛ\? Id#Fہ[ݛ#On oc[qE(]͸^Z{FiC|\7BţڔZg9˶[Kp2XGF;se{2+ݿՎ+XrԮBnݱj.,@A"1)cַm֛}< G.VjPvtʚ X<>jm;}E'W#pj5OJ&~ϊ?0E|ڱl s&gQ&I3$u?*Ԩu@:JTrt>uUrٓO؄rA0E DZ!Ote=0\D7i{ !KwLGShf\>LcvOL!H_<ِ`pp,1ČZpszHؘsgٓ 㟚trR;Uޖܖb9 ;{YׂkxTٓ;Jr%/gV[DT8:a146Y:/NFbZ ] xvlduφ_9_ V[,@͵bw]1HПuGYK" ]_G:QPaz,RK ۨZ ŭU]"Ol U:7пpm\H)х ϳxu:bG?Z>Wr"_4uܣ n*6br EUBb`͛X{c2π& 9zS p!IZZT}0=w){$"fQnn |X$Ⓗ!|Cl.LVU)iK3<ܲLςYkoQn*,| xtvkݰ, o@mx푛C@F`Nb<Ҕg_cBDk>oԆq\O5 ؠVemk:g=zgd`nY?צ\7cF.H4o3H/ַ26X\zq>2pQk @ͣ(F R9 ?-:sl kz.V*P7~[ \+~2-ny(LIVS)LZ0!M B p9)x'.]p"؈bt |,~#ؘ^Zlʎ2`v'dg s2 { |ڿ8H<Nhw} KSwW:>)s|!㙦 JVh6#|aS gg*w׋֯ނվEglWYۺ7nR{]@ cUD /HqKC]6Z]5#}Stm7E R}!ct˩,xe+Г@bxw ArŦ)B2B>&ZNy-dk]Ջ9_-j2 };n"FxKcNxZtj;-ELm r?Jog6rhacEu$-&;0FAz<j@w01:xoWB SMuȏ%|] DLe*1~%y6y_vXTqIBȿW;*HN[)=`[qFMwr~5Cg3Ǡf䝊1 $ լ*$~!^ )bBfi( a]{wa #"a@ct)xQ3}x~P4wSfTd%S⼹tx*lڜ{Fha\&l`#Tٝw\N;GG\. e⚟ml#%vm< bhӡ⚀Ma(:>wpå >C;=h Q E-M)XoͬX!0CEb}qYo=KO.90/noA)xCe! \=F^^CkueCZZ\&Kpb ;Nf쭁1HI)fx ,!44)2* uD/{܇pIѥ& f~XO;hrS.4$V0çȤ! -]I,ڠ`%<d뤁k@A'}@ Pڊݗ7Uw.LʙuQiPB=\I _OW}6"q!g?Ě0mעX|ISݎWeMoXY@]pwM.@ wRl!y{)ȸCHIe]rZB%ɣ!Y]Nxj8s[F ".uńGUnPsVd}o) 䇣Wũe7U8B|6ɒLe,uV)jl֒M<<\<2ГA"\&fqjrŀ܉\}lL^RHr2"TͣqnzT/iɅ#ߖk"ʯF/H2ZX1QFS>ng]ﭲo` Uې%oBCc] PM ٓ:Gg'g8wך[Hf/{nvSMɧ=JK"^Ci|(17n=wѼmgO^Ҙ)pi8a3;Tj Pwg#Gyŝ&M]EC#e>`:!ԩJl5:kcG!:\LʹN2At0LFEL-p6'>i#ۅx߮bc"f+mCn98܃s>`-T =bK -YE}s܅U6O(QA7Y "6[)Y1h}ZHy[֫E[/8J\4ުC#iNTG"\Pt@ wZRo2M)P23t@|b  (d[/,3't0a-Z…+גvܼNSy5J/]N6ANn6YMk7f (g@ΩO\j̄wݢL%~炿,lx WÕGQ$g qRk9+ =n9sF̆\/5_ž(~d݈5莔W1Ħ.0r:DydQC?H*X4SlrD‡ F2dGW0Dv\g,M L(ޕp,5X~ b"]>$*蛺65 LH''R+ ԰.>B)ׯI:4!\p!Hl` >| 4F3Ճ5\]4Id:%Q+c$<T^MUFS^0>eQ͸Zxg7:X5k?˖9z K`p=$wnV\&9!;OX x#_;FmJ-] %Ϭ8Ce͎a\4mzư-v3z"L:T&*[rMјxB_(;~sxgYg> hDcv|Čϯ|_#g#*7(`v6*څeL8"8}j5ZZI5poZ8u@&"8Kԋ;ye-}HaZZqq!nه^UQ`тN8  B <fX_[ 8alv{=G2l)&E eҦz܌0/P<EUWNdF%Br,57]ZŲN|d#F\*N#,|LxUaZ?tƾ^݊Fw< eJP?.#Xt%>^HY$HIЉQc|PJ0W{hqΚn0ƪ\dTq gtxIQ;RAޡwRvCS}~)Is\Ⱥ,Ֆ錜&$+g'K 7`%;;Aa4Hj,|4j&í.j9]2ݩYIΪJ69@Lgnk${ΪQju:ۛGȪSt聶H*OXTy@:n*9$Eq#܇YJ;50?4ÔDY 0Lí UxI3R3 IѠ\.P9Dauw&j$(&1b%)b@:bI(b{1# JMc= ڳ_a`zk&X9z͇(`F} O+ZA&G[8oa%l=`+ˆ3jM`\kȤjL ğ\ 筩qIe8cB~U@CȑctZklzg],X?P},˘2 GmT$GV%>h_g-[´a*? V@NhҙV֨@":l #+*u0U+ Gq@@i ARjhW$>vˀ#?Ƚ߿vxJVA@np*} B$⟽K`Yr7}@BxhZ)Ű\F$ZGV~)qn}Udͪ9]9p-q2M2"07#5 !Z[M_d;r$P@dǍ&nkW Ll?;|>y8D 򍣱ds/0BifmEFd^);τAG]}&Yv=e{b8FaT$-7T&Sa PN Z: &,agu?7BCOJ7]|&tyIz(JI3M6c.2BA݌ `wt` ns˸PJ?Νs]tCX,}GO8;뗯V0PՔBzfB*5,dS( GŨGמo_آ\;0D5viTVSK(Z#cv\~zu[-:4}[sh#]$)fC@oVBnSu3 \?/At}NVNiv¾~9>% eGGXPՉhV߄=V2B_4>CtؓAcAl1 k6Sc/qpފ,jkY:+I8R0S5W;%iȈZ ʚ.(4U&)Ix/)K:I gsA<Ѧ͙y*+U:ӣ!:U.s[iŤt8c 37[dB6W BjF_Z<եU>=efk\uP@95;7)xpVpOMN]P}o#W_aSn[4_ך':;SY$I䢮#6>1*. C4u6BVpLk񼭞G(H'eFD kU?_* ;d潚'&=>FP>6mts9\sU!~o.&І4@j!M笔T9< H3ы]7\2lzLߝW r GW"8@~rqԎ65r :tS 'w=@:[y>X~v,jIc;eT[)zC[VW3RʑEԳlŇ8q88aJ_g8Em${ ]hݔ]z7ǀ#o^bauqlVgTYFA} BtNrɰ&#NBk*ax}I8j֦ !5KNĽ `+ULD͘d䵖mOVc|>`Ȋ=}^04s18u J|_""vA6*NkX[I% kV`HezVK/$R>;`J8{Te0HG+N>nus6PO᷸DY% "ezEVWJweQ'k/'lG'-$-'T2ŅsX%N7N=Erq;);Zg&~mٞ'b ?wt]Q$!ᗀ`(lh +*-ǸQNҏ4j%|R , VaC\Sr'FH[ *T[ R/}Ŕw)eҪA,\wa+@ ~;}?񤈮8t˩g,pwƨ\IVM<ߦ-&T!޻PPH<zvV[H:' ѽ@6؝ 6yQ*߸wUu=U"ߐiL tݸǏ&R #w Zɗ*Z,,n dV}_yuK({y &:smxÙ3nv[VP+_HzBtOq1SR7fxFK=n0k~W1#qrT0f*֩v1n;]a%d+h]SɃrAӁ *oy 85&kg7L|QsC>JhX^uljuG7I57p?7˷^;XQKߕ ~y??G3Aan7 S*i&e+TOWPpZǹ\Rقx)&TgWl[z1n R0sڶaSRh"02'¶~MӇVo4Ɂ=A6YKR[3'q&ϡ U=G GثisVqBwF7 - /) G69 2[PEQ~azR)-X~8!f@#qhWBz~}-w?~f7eW#z4sh> nU}Yo}RHg'w2]"V*6s#FޙpϋkY+l_ kr{nў X aӻ3.JJvim.8j1[@uƇŃv񂗋c|`W4q9N؄Jt/Qn?F7?EI (b.=$̄uf+#$nОTJY@_ic)_N> Hj@IFjkf"ԉ0Y22w)vuXKSi骾+`f~TB6p&?cr ؃uVe/f0Q6׭>_&;c>!Fo`e͌#`Aኦ_՝ òu}P`|_!WVmy_)ߖʆӢP ^ц$ -{GyzH. *]C wpm\LCw骾ZxADd#s6uX2ȬN~Rq<‹QWzH zW,b#C'IIZVe,6000D{{C7ljĥ#}-+C5?s!R k"3 5&;ZQ[ DS@%j?kehEP;SNUi_'T^|Ndhia xP%YĔ}q<1K;eAxX]:ok^%D3tL0Uƿ I- dDE1)7S붙D,C2ÿ̀~ލR9,b:ZuN赼Pyg@<[; R1f#Ar6 Natx!E謉!Z2!:,*kh` 1|9<3uQ |b[-4q4셙CAج4GmvWVt-)6tmaAFհZAȇzʬ3)xOr`8"'~~4#&88 a,,}= )c^&X%׺kj{ڿ\TzGP6 eLV-xm4װ{dJy^3{Ȫb\ cUe߂]ڡ'%ĎUKC.:WKDwwl@gŀ9yw>IBr4l%s( Q=5[8Jb? }?^;wr}Ð(^:Oa/eLRjk3\ p~jy+\p(L5]&c1i\Ol,YAx[F[uFRHꌿw+ |ǯ03. V+VT "Yt\mJl0qSY.y柚xLԺJ[4ɅY6RI2xU!- @^2<+zB=*( vȀy~*u %kĠP{._冋Aݧ AW m3]{0޺fBǝw'Ա։HAp)u3P2>xۗLҞr!ͣ أz!qfk];M[ Btx6vʭrHRuC~o nAq Bfm.5U8NC% }MYM(B { =RiMlFz]s; &[[(.ld=ǯ5a2[~\TpGߌ”6sš.OEX 0rv@`T<ŵaFaH`{d|o(f> sT;ONb;FtX+P@NWx'jV&U.*!y̪1$F4cn1TO/Wj]+"y'b+@&l)6RãN*n1[\= ԥ_W!o>KqR7y..\Ρ¶IrK քz}*D6C/EQ쉣BҕIK痺f'qHB0<Ec5l#1a,*X4,4'Jf3Yr.>^o$CkwûKi/wQ;%s`2te۝h;sϬhp]͂`4z*n)ka"Kw;M9`c*JnG+8Ĩ=ԙ\,j6$MBCҤֲ/jo{0bU~nji'P}MĬH/ h|#[9q`Rk̉цn0ґLZMi$GV5`\Fb(9K[PoM>.Z@^/@52Y~7p}HՅGtWj`a' ` +8m!=2h^G} j,Y6 2/~R&6z|!@;tلLXw@d h%E ^wN4ClNd}"&v [,StbO+%x1UƟan}eI0A Խ7dDvouԾ#\V$YׇBWK&|s33kN[yd^wsEh؏#\e2O%G`l.NQ-)<9/xhՙ) ¶wlV^ATxaz=)-0וH`t^W:kE$G?i6] QԘ/*}X\s7 E7ݾi7x?I: lBr-́1)Ĭ\2i:kIRQ/[0*<"E+ĘwTIZ&n{*h ə$zGRA*c:t ܡ|)PXt*AOP|\gpp[_|◞ SשY%E^^;WWi^s5pF2`\*Pו˳ح{To(ye hԚcp90X3EYNQYY}0Ctsz7{}`q§C% V!MXǐ#[de@Nm~tQ@1ap <"f;Q)̐CrǡuVU ,Br]SE_|+ĵ:.!doŌcMaLV{ҹH:Bty/UoQR.P}zN/0Z *wvXXAX=qsZM (wJCougKF.r(!P]xbF!dkyLܿXf:բ1$D@kRxM">{}<yXO@܍D?kPEPax fSHDѤF? L${`+]}qy1~Q)NxlZibiV:~A2 0gB0^, @pس-He'>;}}.c{|Ko9|/ jkN^9.0݇iPPq\{$ ˲g<Bdc 6iu_cs3|P뷫@ŊZK 4ZIe%E(H ^T*qz$>t 1Y/%e5g9t?]#UH9B 3Eڄ))^8ߏ/YohAYWF7tI"3~*N1) $֯0󲕍H|KW1q:^Qxk&ፓ8 6|_p(ߵMڦfvw N)N܃J<]a432S#'N#r.r}د! ȸ̜\;da07V@6p#֫}h?G+ǥJUM@0_t>)+{YHj`u*7+*Oߧn,w xx{O߉RGɀÃx&~M FY'CLWXukJ .+ #_+ O|h fgz0+ޛt l&^ETqGutEvv1N땲 {[I|)PH&FޞipՎsZ*L0NF~?$LxxiaAo'ո9MkRsi0)x\cY @-s[aRnѤ.kdppcᏈ0"UMw ; %#" Q9\Ż0Ox/OmFH6`G`SY5?YSݮlYtnzUYuMg$uNLGwP2َ].cH=孞֯8ٮ A$p [f+jCF\\ ({X>wO03x fDl|(oݱHL[-7x^)3~Ffrze{8#p} c8_-3{p&DVF%`n›r[zL7)EY|=JU f%Yf)2?SlxZ^\N5T0 *E[w%iR!OÆ.n|AB%+yՅxp*چcՊN1<}i[zNe{I_&\[_F-]%sɿMy¡=hg>jg\fP͑O{fߎa$_W~?] SeAXgGԺJ_@ӄN$rC7,fin??ݩēr\wtMTPs4IȞ ot)yҝ3k͕1N-xVE $u;&z\=vWceuA!^6̙}zt RxYO I WͿqk*Z #fdszHR‚ $]IWj g+Ad^ˍc˗i*a%d(3 ) M ;*8N-Dl9r-N S焋i9u0 SW:3&qC`?$L"v . mma^`n}r{9uWSѶt].˴K\Բ 0͚}旅aiI`@' #bm@ i=?[PHlJw۽!BZ8ޥV8,S8.} )˛ bF#!L_Xޮޞ+F,Ts=Lkon6VF@]|&ZX=H/x;W U28(M=nY%E)9-*|6ղxo;˛ y'X|uH@<G vKWZ 2ɴvks{ɨe v8څ(> m6lczt?ڌIޭ3N ;?fN2,7 GN73#pLTEC 2Twej`ι\챆 *nb>:g_f9AjO՝& tf#˨2S/X'ۼ9`I걀)eYNt^z-ƕ$4høD]V^*(eem} 7@#50<@[qLj2\ʆiAL迼Yl?@0'tE>8(Yocn_@omW(5;[8>JqOO>Nj$LmHE2Sjݤ/;6K44(5d0y'A\? P{J)q~pV/]ٱejp0}в> .zBSp/1 *5`j oT6+FTe~塐A#8~Q3r zq/H޿5&xT.rYPl"ˁ7u`ݕzrzZWq S7-i/L^ɏ;*A~qS6 O%a3`?vGD A=rL9EU8RUCF=Ud+ƎlfDK<h?n,bc'jY2@oK)ģhSuK4Kֱ ~2fUB߫ht; ]{H,=܃p)B:Vlxȱ_I? 2\I*ӳ[9v%sY2=`ơ7`㜭UhҔE/j~_ȕQJhEKsqns[Q+ϓ»n,"a]q^+ w[Sި?ΥHX><3X}8hQ:NGEqhAtc>.xyw;;Ѯ73x{VFXfF2''(hķT[#;f~MC$ڔeg>~>eYh'CZ ,OpUHihu+|z JCdbְޕsfT 13op~yV(~WPƼq,j;pjVJ]d)I!.,ZP"SQޠIN<]pg r0ԍqʞY\Vh m`2c8M;y36kђj1MlXFdYDꗟhV!e"qbs,w2O#v4D rM}kWI< !h ӰVDZJ.v2D숑2HjZ7P/ 391A 56"&?;J~'W\zM.ϝռʴ|G$Ӗr]E^//p, !e!fČT}˘Ij6?@CEXTmnCg˭,p6p}eMBSr"6I,Q,"wnڸxqY;Rٌx{Df^C=H-XeCٓ;MIZ0*.#O1q>fj;?<>VĖk9T [vC;ItYD"kzuSI@罋'DJRKw*(UJf?"PhpMlJeu$ ʩ֟<?Y?l};W?ByJ8]#_[U__3$"eu# v * !BQ?rt\Joب2H1q}䜶>t9*JȠrClRk75?uW,lxFR\#w͚jFH[m jjBy S)94/9<>82֪J䡈ͪ'*${ q8མnwKP`\z[p0n yQ=r\`mz‚k+HpC"ޔݍ7yC5wNN҇+nRc֦Ul&G'4G/>3e(YnŐB+p֜+yNKʖS<<'FJPTĦIa{g)RM+蠹v 3fnO4km-Y5,Y(l࠙ X N,·%C^bR W>eUO»M4r(AjJvc?`G6ϬNÊϘ^N8OW6((-t[L7(;}RM ҰsO\~iǧ&BCg2iX`o~j vZ@<_>nﺼԡ+r[ _clo2<)c,: .mF=-UR v^n6aIץ ;Ȫ)|t0ai'8+Ki|6Ğn.;S 7$ӣ]w|G?CXLWAT"2Q9PKr=V b'?v&XLtI}T%d5$݊gu&#&_vjOS`9$(?{pBB6W*6]RQX;hkp+fLĩ$Vn;qcy4q:s\8# 4jj7=|bt$0\:~'ujl9 GK{*30Eu3U7,뢙{ۖUnp-҆| I7D*u':qg#5a+^FT?P!XB2$\U ej_;q`ZQ`Eٰ0G9!`]t Dz@}bo bb(ޡڐd$=1k)fuNĻߝĊmFvLdUIniz_ytC^yF&>ixO`)f0 ԏKh[OAwS.k>`XM#$u{9ak,j.;xLV/ te]N5`38vP ;yx v5Zˉb6_Ѱ[NHn,W}{xY/n%]rx@И )%#!UxnZnW 1cgT*q(a©kBlg{kN`KZk\_jp(B 1)E>y&CeU)VU7hGVõ\ [i5B*U >l{.YF+!<}kge3xl\|ٗ{;Hu>>6%FTHgu(6HkŤtf1Esv K.?NlOn!$f*X/ 2-CodۿLPJI8)>2GHqiX* 7ƂiPRANj + ؗ{$[L{|Ayv\6wq)fS5n4(Nhٟw6m4QȸJl:~dhx-6DQ`3Ԯ|N0<}`@M`xD:(Qd"{g{pذISSOe )YU TѳZQf1*[?%•䙕g`W6>0GD%h5ŽNrІƺS_^ 2P$pu]Sx^Dh}AW^ lZGDI*E!"}GA|:0./(vlskBV8:B&+ܝ+x7ᴑ?ٹUƏ! 읰V뢀tvD56bQ_f."*nj,lל#7q^΍-x;ydsD+Q푺!Y':9VO[ 3 L3/tiXB]m6JvXb|jh]lrM3D>F,]󍆠R P@*dT>tkn!o/cKc+~#f:[ `KAQS`\H4o>u&0ww-WT4>ALX;U / ;٣}89"'!Q -ޑpm'$yGT0ڳ9[7 p|(vsu01,)C-@6"}՟ W<6A )b-wɬ+j4e:f:m |r> GZ.ؙ-f{7_Fi y}A' vS7y|=\KI80|mgʹ_ʢm.;q#8{ 3"be%6o#G4,.܊:;x0uNSe#_WuyղG8ҥL|. E٬v#nKO9=)z.ezo#}%s՜j57;vy3{Ei,̕(Y}x٧RY\rK&7Y|X]A4ŋ쩀DH t!"j'[ۆ$VN2 Dr%ɜ=Ud-X^ Ix)4`9UZ S^vDx̉sQY+qKEs;Y|bۦG4R :0!@cոLGRDwf}V'T'p=.765&W.2 ww_oJ@b_ct ;SF=#_OEG+ln0I 0 LVuy|Cf8Ti`C9HkzX+\*6*ׁUil6q*0I^v蟗|Lͭk'*Y2ERK 9Fp/:u'*ꊯI'ƙ|偢c1Knn"\>_V4kI~0t@5 A$h-hj3BJ}H4߷VBazUTQ`o:^N*/jK<2)lH}hQ=O*+Ӯ^ b *#\xHv*T]Fo)h$6ۗLmT?u&qAL]%2)$fnpSM/n2ڼR3`]K^$Ռ(eX ܸt xef ŵ@j^@s;QM+=d=d /n G܄^-dW9m=1GJ uT6:"9Bsr2G;.X7ړ5/\ j6w30D|@%73 ^w4gr%@RbG cC$3Z2Nf{FMdŵO!A啪izeeݿ  {snRj f ПrxIF⨋קC><|(]rtd #ֺi fX^]ޘuM_B4&%#Eb;el3*fk?}3G3Tʽu8D3-#\0:/y.G@#~yVmN_H8OtEO3`ٻ2:pK]iP+$1Xy;86?=2M %+V`3_C +drv jaďKk&vX7WNʖs0{eA.6i?eIII"Ųko fnyRSD(AYo!/P@͢dxK P;>EkF̷lm9CRަ~0@Q"Ѭ5m]5k۶_[ ηX7(gE)NϾk?$۸-aEM tKx"|3ffkejךZyl,MNvOhN]mXi/ymqLeG?[F9k/0|g,\"NtО# { k-OJbMp9WP NG_QA( U4oLNb,7̭\22~d $Qd7v ӛxx9Ẇ NXt_ ax[sѶ ԣ8įR_FV&  ;K"MSʵXƫ4$&}'\v2ao"YӼ`M^~Ւ+Gf1Y& gC^RN<0a;NLo:$'wwhOI~Kuv?)u7Co5O$EN0y kvՋr-gl;Sfo !WF) Df:%3{l>ZD;FeԹcm sAH{efx_ =N6Ax^UyEjp5Ko;vv#>^wm%_?4p4ABU6@o>P8xp 0kbFM`31Lts pK+oYzDK- `Nrbx,VuT?$$7vݷ`#م-=vmIS//wk&sv)@ĩ; p[:͖cX:36APvtٲ6M]r㓤pUu|?6R,U}^ˏԇR& tHe)k@'NvDQ\d.n9VM S^9xF l,b^Id{JBJZgUPͬ$.ǂ^8-NV]Kh l !]KS˻nq,xUmdR?Aį?*eϲcF)U*"*<.M(/zoP|Ë\Jwƞgruk$*k_/$hx3,V-o_0jN+ ,بPPv {4o̖t +}Uߪe '!x8rj {N1,(3r/Alcˀ@ zaƯˆϵ IΘJ!kAUo9|F'R0U xZ`gDxcf "OW‹tx$mBu;{1YUט/-HypǂMLB{>$tK7^GjV /O'0hMRZv鈑|Q% zE(~R.MR.':hچTk? ',PSѩ04 ( @ J⸂{^Gk@M1IڅYC>GƔD3+omV>R skν`|"t z,@CfLF] yru6JzPׂ2d`KKG1 &KF5fQN7ՁgT(lb dʁ|Pvzn<@N=ۢAf`4˱qg8V$F/hk|T_pн(W-&&yY0{Yp|?~9uhROgq\7Bv`ljgټ~{u햘bZST;}}䮋yoP2ci*a T-vYU{YL)C >$x ^X$rfQq!({޲hc%vG2&Ea05alR?d y &KkF Xj"$x .WԱ4q M&nWz4;Ac`%$-~H$\Vnu1Z"BN ^ 8h!Oichl^飏a:\ˉuW1dVEfm0~iC}/}&Ut:&B 齇4m;C;yy IhYIY,̊r'٪: Ip[%/kX8A+܏"wbS{wib&:x6K$ Sa1**와u8G eY{.~PſN|Ÿ`^!9͓= 2]Şd1u5`J}NOu0fxǤ ۔+/c6I<9CϦLD/wʵ&D\L#,6ݝebxp5,dڑ2&]vv\퀾a?AڷMw 7Tp'V\^[/pj+(d=;{_W|FoG!7Yy5ERke0P2J , .܅kxWɊSDh& WT-8nޔ5FwMV\8߇K7 ]k-u"xEkm#r{-³׫: 5zБ9#Prn rYTC4z Z{QA\2G(mZ pP9^Gg|kUqA͝1UfKF-\ݕۚ~a #wnM/mOy7$ʂmTe.,tv".)L_1zyl|c_1̀g\p?݀с3S':Qzۯ@2K>"]2ut~I|-TeXRH?Q&&~CTyP̾E).ӝx4ܒ/-0[N9!C7glyپ% ϫHNj*Oߧn,w wN'$>GOq8.&>=7#mò]a05JY:;Q&ZjivP8 ]B^}Aw8,.= +xDG뵨]MUc?Ti$Y-DS޾LiN_Qfܼ^9%80D.r@ a.$|R:ϥ 9G<(3w5ݷ9h! *Hڙa~nA|f ]$ p9 <*u﵅ FCI$M8bɛ_ ⳾cwir o1#V0>APd<$`6'i#]$7ݸb`S&8V08'wAa&rMEf .Pi/Tms:Ms=-(]qbm7S47D WM<>._(>. ^GjfUbs(*7~sO MFwmܜI/ەWa /zWxUG2Xa*K>%Z^g?McWD^$O$4ӥ8[*  ( o(*E. 1u~˚kic@sq|jjX~C0#jѷ睟qA[g1ű*R(aU9/eN,ҍPP;4)N[)Y:cxhHf 8 < lISIZX*aBU>G>o#,Ǻ[IXDtI,FӍCv#*![9p؜: '! ^ H-*ķJI|*nʽs%`Uaa *9*O]i<'rkZ-Wlhwxi\U8bc6I0OhW_Lp<{1_>\igUJ U5=>N}/`f-t DZ,x[+NS4{g j)[ ʲr0#"~\s΀i; D,,Dc ?( V?řSXq7tՌҩQ.]7T:uMz+kZzP 1_ip1gA@qy +fswܭYwq;e]t@J]uZ}vz0&[[4\d!jM=SRGIH+^l>쀘cK@5 YO ec)(7VL%R>S=e@wFts˲u ?5 *d64|P * SV=/OrK+3?_)<㤆f1~t$:mxq>.j+8UڃO}xSwf!WvqdS;crq яBt$\\y,d]XJrɛ aApi TH4>t ~f 4FcyDW=L@qcϞou X1]][33RO`پ?4CֳԤPZ6nJzЮN]L*l'. `ш E}ie{>qޫ)Wt;@@6md5z3D0]2 /w'3KL75?ZĬZ"\`:77~~21'UcJ+&~DL$W,0vPLp5`۵}> C6퐶 VG΄[d|`n#(huE|2ˑQ1_veÕ5Vb7A9uӌ-֙\1ufzXO 'HBACAVN :GJCk5M-eG0\ ?ABh L$M,8NmVT&ۖ[avviK%9vbUpd6TMn3Yg YZ/Irt3K-/oq@X&Z+~aFcdsb&RfE(Z:"[* j@[)+Ek1!b8 s d9oMV{T]z$"V >V]֨(D뎵:="BD?餏ec@rq%4B"}W)a }QC* Mо鵏Wɿ}U#?>x.@z>f)SpbzWlY*tfQ =8_sDLb񏟤xLq[~ީx:q0?j`UTZfX42Iի`ԯx,,jeq $_/M~r#e'hoA6J:T^r"k\Q"jç-E2+!2|g$Xn TM |5 9a`+ U Jju>l+(90Osv!) ;p+v)qem@"bz jqV-52-nYWBnLjbISB'cՍB&2Y>Hf8;,I@ͨ_ÒF8,OeJm3|0a隞a,! ol΅2_LHʏqA@Bǻ[9TrYW- 1 M%ZKE۹-|%d+?Fc0<_R'\UȧzyCvo TmEIJ:s.]x B̼Z[U^y)㰀1BJljՠBV/Xm[,KP)j^Xχp9eWP1Lۑ\dl!k9\K2z8Ȭ$";[FH}v0]-9ؖ<*c06erBmWPK)}.eȟFz+dzFTwT ߀(CTţkJ9P?2܋=+bύ4)l[1_]팟Sr"VLbRܗ||'lws\rSM$ڃ#d]*l-2hYDel~3Ѻ15CsGoGbh8]9>{Di nnC~yPSW/j_OVޗˤtS&vH F]km#/ Ô/Ůc+`{tJQ&͙ tR^XT+zl &qٔKbl} D7I*>73!w䭂{Z]m]ot3> q(Wz^x ›_%_ J*vWõ~$QD /HDroNClOCXyh8bF8 05D֣ZH51-R3 &ݢ) V#j94GQ1mw{J)XȌT}٥DDLN`ƙ.J7"'n]!77QDtɰ5kxU \ ]c߈/$Q-߮)*p6D|<.+HҗEhL g9WƊ:Tbl<7aD2!hR9z+h}9GTHG*ɲ$jO2@~2Md%)MˬY{6j7Ȱvl4sqnW5؞,1 |XUd`~㇘"@_Rg]%DJ9;ZguY>8ZA=r!>>N5nl>vmb}A"Q ^M~%ʽڞ;k4 EW'oPK JgB \K^)7#)7CqR$&S w?z|c}lƵ P^w, 촽.@.zTQJw\) W>i:)% ;%AѨeC8C_ımY3%17|  XݏnovtGvM*]_tei]zTڬve捀KvO^{ =Y9qd~DQt!4_/1:~'>^gf_Ze \d(s52s&R, "K- [Nh Q=$cAg,&HR[:ko }3D>uh_{lvǘP5AcWa%KwE#?QrQkI/L^/S_+‡(0c ؝%BtחgnD zmLS$pW-.=,#ҙB&YQ}Ό3|}xt9z&@vm`kZd?0۠cTM[7? 6HZݩ7yV=0IbiwýBWB7t2oO,%~qiʊû1 qz"-*9A*y"q(Uh@ɎmumUI d[W %%ggv8T. hŅgv3OH1į*wެvüvL JDwmNA f04#ƨ\O"8~Lb4ڝ}2Epk_:D,JW^86* ,!M."U}/zz/Ww%c1% CHngM"DUTj۰!4Nd 4J5xsdu#:)^m9V vrXD GU,RRR u+US Wd%ԉ;E}?jpe:'iO N2dxurc{7x3hbayє%5h"!K<5)Yc2 DC x?'.p`(  o;1kTnɃS_V tw0>"؅C\#DTʃV9{@_AV+edh驗ZvNv$=,K j,zG]ٍO=.,K+|<:Plq|+`闦(1l d9|wDF5+^-n ^hˀ#G¬cdm* OqvN-,:ͱswhBS6t*,{\# 2OKaeQIIpwhg ]vy~R@>p D SӃWQRM[I"k][0Ts#TuAJef~j۾<=h[!HQٻ>Ď>rq3*'Y܄v5Z/ábN +Tij*,_xgwC%sBW]eOl`-7UqQ&jGsOsr!7.jׇRy|A:uh;-lor3E]@3 >y3r$>T-D2욥ORhN>_[!P(Ġ1x,9{˱{~2}ϔD$D@O^v (M>KY5:,},C`̾nNe~O݄8gDTH9_ʘUQ~*VM%a q.6ԫO,;>|QǾB> ~%ؼԫhwg"\PSpV_6Hlَ7d%"%ӏ?@dfF0K j($Gk9|s;ՍH\*ETEk9s]4Ky\(we j/#"YC ١,ח/Nu8:eU}ՏHtԆk lH,*^ WHp˄qe x⤗EĿir: Q5/Z"Uy{."pIheרj$WM>0(g6t!H7=cZCB{gػ @,_Ea~A*9$*}DMQ5h4RҊʦ(Q{HZOh@ʯVPq]/q:ES5C];h\)\^X~8T ?<4_S+7Ceʽ8֧q/yHXNv5]V.s"c4.I l0ƞ޷U'`9^"hF TS*=c5mRm كSKLGī|)~ ^ oӦF5{q-8*fc,ˬ6@hAgMm&H L*'˸U}ʰ6mկiW^Ba`|bXFtq1cֶC ">t:Xn&,Ib^(N3\7y\ȧT7K^_R͢î6Dr+Q>xr(v<;,"J=V*5Sc7l)1T&;*N=.Ց! =JV5Uѕ+77> P9\| O p%qv1,lKT>Wd2Mә NК @NΕ<uZ(/- &&Hp_d#p>"4*jl ?́ls>{Kx2P_oڱxL<-*TjTnFR8hl9n A)g6ҕdp.4/4uDWS0'g;+(K0`7\E`EIN|hsE].wx`MiL$9v’t~J&=l`ᙛyg1kt"l뎏!c j9io1؇u7m݄t]V":#Ei*~K9ZXCKTToٌ$\ Q+iNqvfJUDd=)'Ro T#TPps'Ȧl&=:n-Dre){ ^mibQ Zu;閴^T'WB, 53#VŒѶHf. ,̥$[W:e C̿J[؆uM{ \op#cy邳p%4vknvcg=_]4$r QԽ7-C1x-KX:vfY6j$/8 dnЈibSZT{17uCO%oTyN{pN`^w̗a9IOt0 +x]D3_ }G_B(v?:"&C 0?o'B^Pӓ ׷4>@Bu j==x\GzJV&?w>d@7)WA-dCv=&XQO98\fB0A ϡ3!ubWZҠ+rAN6 V\H^;6'rWAdl[}JQ$GKT苣H$:ʻVϨ֩6 a#型8ݸӕµO>;}}rLDeu{TҚ]5iEɗ0/tJb(~Nw6 uNsS 'i|LQY.*SM"7KE`J.N 4:XA6vu 4nrbM#Vg@#M.vo=)#sPk5أ.-a=BQ8@sNRἃx{\JIO[(;_$)(mZX.k{} ]h1au\BakA|`)TQݑ9n⚢3m7i4KUO*XHa `H,KU!XQ*Ea؊TITi߶ n&&IWR.»Ot(& 27'HRi́p>-M8AQj2npؘ1a g[ %q}D8r%u " &Tj’K!| KAIGXf~d \Fz՘rBbixg'ɬ)`Jc?9/\Ie^ (#_?_M}C1|MoIK=aYXGѥ" 0Njdtb<7`U^L[xyHai 2ԗqU-g)-N?d (\Gr e|/;sJܤii͈*26""$!|sϰ⿲g.-4=1 *Oߧn,w xx{O߉RGɀÃx&~M FWjDi"&@MTʲ6y7F@X.CݒVӯ DF3Q?O]hcy^+h36(_doMTJD>GCeXpx#4:-'Xο9ť~l/ˋ} f8*>܍Vbȡ^ufZrbMsvl.}X,Z&ŲJ[0T\# e%2 h,-5 59d\?/ʞlMhvl0Z.v>˲U GRQɬh(1V,!O0(P;,pE& )jl eeGt]I'h '߶hӧiZAZE_Աi ZLGF[F{N&Yյ/:#+wtFݼ*:i_׋>AkeSAVaevxƃ f|Zg)=$Uø\cʭ Z J 8w0$0C@P$cfVWB 򏷏`5,@f}#x_y15 ZԻ)Wj''po 4lynž[J(t\^,@y j>f̤1l[76 #x%pkn"\p̣1hrx6=0w$03xG ?lb,ܲWE~ױ!ٯJz퐕d  8V }Lt \,|9'?k63V#l'`.2e4h+*y{QJd4y;xDWy̏T˫}<tbkQIlsgʝAYB.`ĸFUA6NI?GԔ`h%cK*if9AjO՝& E]OQee񘃫Zo$<~W{`S$Q3JA,[?ט飃>wҼlK<<:doWR*ABRNO g.}/[aʂy#X_2A]d3"%5(K^Ǐ N gã$^{dE-r̳)hlhˀFwz?)no璵ˮ&'VdF)"Uhx?($*D CooJOoXv7פaVtA/fV 7[IUB,P+?O1= ƠbwW3-oiwBi #N]kr5\>*AѶ2/@qړM'%Q*r?&YV>0I> \跹?2f))4l5=T$"pm@ -+E6[MIs_,${P9PD(:K|Ȣm׭]&ZD^rtM?V]ƙ)iawlWs[*^t_Nu2":s*%N,P(7mY 氾(8c3}r&0' _`/a[{>kJ!ZwQއ(yMHEo.`S#tѰZ0d;m-ڠ`g^0۹R.Q`>HQumכ+mT!,y'@͸.Pl=0ӕ0BðuY1y/:_j6%Kq܄a:N{J2HX.GV00aj7Uپl E~:Qqd`<܇;a{P`A)C.}iӏ*>:!022L:CQ<]a\BK[;K0ˑ  #`HBQ ȥ0M"Ȫexy!b*<% ӊ-KZ@ʦqfe(L`VL™ARXI<+[rY3{`bTPCǽ!N=pώBH`JûfT\7UW[CFEKqi}V_#VGD?ehjZxߛYr_J@#aCƤ:_16kWZ x#Q=(, ӯE{88S4Z 3IhK&O00?(Bs*jC~A_tl}Mtr=ggQU@̙/b< ppOlRgnƷlooGu/-SKsGv2Pt9V ^6Sr"6 `U}1eV|BLDvDY"N!E2bA'pzz$մŢ:F$ܝӋfeĔSnvNc6ŴGOAڙ#у'njӸdexmWDTñ\BaM(J՚> aӥObH)ZHr~~MkS%Lc A-BoGZ"U$ jHJ̮$Ņt?p1`aTnqU˒9)Ӝa^J3Tenh@@s C!ZL o $Ó:C>WO6D73$tNn${+>Yg*{ q` IFpSБ=] \.V1L"oǁJĽSD ([>o)X \ 0a?|ѵ %$?t&7qtL'lh-kivK8xí]-\b90>>Jq&Bci}u1H['`mz3Pcm63 ㋷@fvsY.ry{I: މ1t4[猁?CMoLa|G{ʕ3cw -_\wRTpoE؜Ёl]?+}:jAʼf"o&4zfp㰴zI90ŚK;Hncq4Rl2hv+ޖP;󰸌ѸeYu\^'{UY=U4[vgp<41G$p뒆TpF?dE8^OPL҉Ć2 oͥywwpf&Ta W Ca9\MaͿ11wAqb. lG _!*jmh|?n(>*Brc\ ̖_2g,& m쥽 a1xOC&|  \Џ[7El>yVUir(q_vq"f|۞{{܆PXgW6{{\;0rB<:r ~ i9(_[8`OiXjX ,n'U)Pq]X:Rx/XUD Mٖؐ[;ZVаbQ'j|;3f{L B0+n4'HcģHM=Ȝ@33ߟbay,؉t-&lyi^qDKn?]zyp64)JZ$r.Ha5P6YB &աgSӦ W3Öom AB"KF0pw n%tw9 ֧&"dj7sz|e\ !٩)%~b sr)Jq0j/ v=Gkj+z1,Em zm;FD8q,c._ cVUSN(+Xd՛wˋ4$&2}JrQ[~?JRh©nhgpf$ƨm03>P(ռ)waX f&yī-t!JЈkޖR WV/a@А &b۞.A8dJ8sD|D9ddf(Iw|V$"wcR6 U 4"WwN,e=ok:Ԕ[c<.\oܙeُy|Ifي JޓƝ,>OV\TGf9`u$V8 suY^:!q';tOBwmIAN'=BM8sBNR1Ԗӑ>~A |AKiz>$cA`YFDjx[߳^{-uKC},|#|)]KY!aݜ{=M/1] i&3:bHuՋ0Ms}1K(|g ]s . XJ"/HHTDJb Q<Ψ(SRWonW䒓oӳ4(< ?\?eK~li.ss  u-g /K qیDKTnLֲuvn{eWZK(GAXث;&+P{v}4H}szXVi;e˽6>+ MP2@ۑ`8N1-|BUYʈmlFQ˜F* ԖӨ%kN;mfVMo2wff0C"J'~&Dfn =&$ w/BMӟW"+6GnXk{H1^`lԬU-; C-9!{g)-Ǵ%|? \">YC/ˉ!χVMꊤ$5vnTP NGޜEU .#ǣ]2ݍY.Ljppk>fOgR8T"gXq5=iodN'ed{Ny;z/V~DO5^a/ABa!4#I@f}C"j"Z$38_Ƥ\TV}VOw?5AՁ'2;ܰTW |זA-Ro|_6@$ѮT<ȑ>D=uLc·nPx5/fG&W+qf ?tHo@_3UY'f2\]ʇNDw(M炪P&l(5a;0/7d0а#sHbfnf*GD+ǀ%#1 $zz_c?LB,qq6]ɧڴ&r])90O6ac[;=2U7cI.2 +o@iP՟6:޺>>1Z J.Rn{Z)X ܎Rv#[ y6(ay~<)+8BOͮ􋟼S sw WO ƛ ,]9c;p˸m''?iħiN&tn+|TIKHRdKh3!|*a\{[,8 og9M OFiT%3䠧Z26s/n#F}N5n`@jLFhwPN4NʯVt/"5a1 ѭSVdCaLD]Heay咓ׄ}liohJD/)Օ(0XW]L^]Ά C#i!eN" .5Q,&cWؓ[;gx:k0c*)x;<uq [PnG2 ޛ-DIf7bL)/FR ?hkuS釷*mZ^lȖډX\bYe8~M 'zC)": oemC[zfJNL8 g` ]E*0fׄ Q%d/-t]ѨQ1h8/&oi?cG=Wacʶ/[by_nFhTKU pp`|G׼QPz',mixz@Kx?ȏKwdٹq,م fSN2ICۼKX'Jt|+O0T&k(4IwLAM%^LK#Yp $Lӄ&G[mS|>2ǖ֋,TNE Q(>7 Kok1jvdv 35"}®5 8ey\Q*C#~`p&(#ْE:ŕ-ӌX>kV.:ц6P.fNHoE1(Օe9<]۽u%bjo r]Ȉ.]!0ډ|]D8@ar,;w4Qj>S^1S Ncr5){vFglݐ#0=*?(IXEq+h$ۦqsoRm2eDʕ Flzb>vkS?_biTeƞ1eO0Jxm`w"N 3(b& RKG}?M2()k9(S0a|0POƹu޴Dol:k_I\EB’X: ʡJ#/kSE;WjQAs!qpL. ţ|q+<^mMM`xXI?CHM5ɿBrZc'3[i6+H=7 MoG U,^wᱯCT'IH Շ1TPu(52_=΋[c/oq>ӔjRG/(5N#HQ`'ljpu4u$fa"̔g#'b!q8.hbq*wo*{~]*W7%2w]%VFpy mge_mv+Y pl^ăٞ8r*^>޾&Pfo(Å_t'e-2K-.#zlXv*[ 5jx 4J/0'O;"Ҏ3hEAS.9y̭fPש*ښr ijt#K@WH6Hah6Bۦ.E*s9R`YNGLtǠbԣ澘<eC:!? $5 HKh#>3b/ -5˘X jk^d['Hx(qNI8Z5nJT:{ ,@w X{cЋ6jXSK/j1ªtC(ذ k-c梥y 6A@~zdXuSg-^tc;/rWݓZ?.DN6"(jC7Ou-Qs?*@ʁ(a$\Z I<^:q8juRPys"0hŅIVş0:;W7HpUki'|;5^ _>9 j׭_K">CC1en(-W$zkZvx^ s!ӸBNge>Wa K]J& K55]J#kuN[6)]q򴦊| ݻ]=DKvWrf5WB^3;=GkE)"-lLq?@R؜7fR_,^*[.b?\x}fúɉ,w 6Zt: Fk{+"[; JlICF rJ;zG),IW\/KE BTyY6B/l쏠]")RJѵa;7_$~фJAsHYVd *)ڍ1pdHtbDzNSeyN01CPfRV} vwpf a7z{m]pf  8n%5}oVL6ol553XU/Zʛ9N`J}HcNڋHV3'%dL-4[l;_#!T޵r^KC3c7_$C% e2 p+o?WաHgɍy.LhV})AqsQHg7\UsR wVxp1{k)YRcÅ%aсdr:n]$snٻCF}YoP7yowե;C?CKoo?֟яշu:C_ó>?ê/éouyAMa  `nX"G1@ 掵lJ7)T %'ɿjHk౫8vPNɄ9CPWhUۚ4jRu|˄*UVpH.Opby`xGg-D]Lֲ^;,cP!)v .'!@9Z!Ӳwo_Ii]#zd\\@rnAXiҨpr;$bo@1'u*Mz7s1N҄?`ͮzBR)ÊT `PglzTB[.tbXD_ae0|V 99,~8 扝c; =ZZ,י҆NK:T:fmV!iRu^zRCW~Rŷ$Np'C/o=I:" ij~"&^3\3тuPi3JCeu։W ϩ奌9LQ'{֮1f&߲kx`H ?]Fj$ݢ|3/∠D0EHKj0CjYbJ^$L-݅[AE)c#rs.+V[/NcڪSe'EFeM SNO'9#Q)z&#sLAl7:=pD"bהDx1n!HePK+l[: LuKNx "3j7^g>GK:Ո))׽ .>s#'x$sj &^ÓaPh=^_8WvзbԐڪ(B֖.zzr!6w6}9 cb .ù+RٰٕzN//U# خq1]wٲ`߇ kHû67BAAMoBX[*τCzGcyQJ6 X XSlғ&|\ A`U 6}DIvLڟEei}d+V6ѕ-ԥ#(*Tz%7@}dC#;Tғ `?T]5LmxߧiC!o zҡhd7>ID%{C/3(cnwD17eq1JORP+!ꗺ~W }%!Y9q ڃ, JԅE4ݗOiFaU6Fy~Q5$Ȅf@E'G*w|n(^z0ઈ@LVfkBHW'|\4 {%]WPeqX<9ӂm,xOZ/lLݴbYz]P~E`A@it (! *%@OFӹ/ݮy%}P &A ?IWQzS̴*6D`zu苉Z҅?X6f+H R]56s$^sH@ޘm{"7\H>+F) *j[\rjjK|>H{PJ;6-AyX/sR@f-puHqb R2P))DY[u zv&'3wf v!ӣBݻ /1~I`Y2Od~'+g1Ӥ]ZT&@,NH]'>XWaqh- p2y@]^F3"bdj= `A{Ȋ̌B#?M@9$j0 5noO igLBjeֵk=^0YE/|H @苙̻+"x3;؎(gAY` G\mԬ! y"{e< g)|.w_hގ~OBRv:}zp[<e- SdiNjNqShVbE1pV' ,u/cT#Y 5tfu( s1u} G|XAne- pggo?N epvoW^>V/%ȣ7-VJh {SeםBb1졵9>;3oK ɣr| po&zzmF;pnRY95I:OTN9?ƨhq<KtL`,/:f$΅$p_D*j $(&E%a*E\(/׽uG)x]%U\JA,i3Tx5s 6 [' 3{ȢME YcaĊ̓4ooYTh% |$ӖwO4-nȁs,8EX6}K`9c2e), 4:@A'_GEϥȐ ="hFgb \w=c$v4-p SAtq#u?9߭@\" އ!G5 X,$xP֑vQXݝbO E^ }~췉dY{<֊ %)zZ~Lo;wsl[>֮: Z? j߄K($sz Q33fTDd]JE_1 .3 ǡ{Y>Q$r W e NyK/E+PL!6$$z1%i!s}2Q=@f(&Ln+ 8Bȥ֐tE^}S Gf#{~ٵpR|!qfb{+)mX3&#ƖT}%b35Q9ʱ9$$Zׅ=bPfZe(E]Z:(Vs9``4(kLR0-S.Gd@?BEvɥCࠦH~)M ak !? ] 뒞fIH,%lsT(W!z𐂯\56 ~@cE%١t =< ؐiGB̀`-KI춊[?R2Q_GoU=lO9[[x ggK Jm0% Ԋi)8=-?d0Pe:j\ܠguڷIdYup)u•x= 5o[ń_ + z11FF?~gӀYAS×E+&g;aT^g*ow֒LO熮RĜ-\|!66q7Zz-'_j~*VD2`$'GC}v8۠n9%>PF=YG} N2 Ёn&wVFCaJ?0|TC~v#SFXT \? d <0Xc<@#0]pg [:>}82=m+f#Kjw=Jka@a|ॲ1Qm'tX@t؏YuQ6Zk;m8bP=~ 2s湾}-xՖ6N/#+0}|r0u9?܀;n=*χΎ;=hX(k 7.*A8]ʈB7%1@ԗr4a7LyGaF^gO @#n}3>+զcKBo_E*\K, YD [$קe1<Ĝ t#{1@q cߣܱSɉI"z?HG3@T DG戼!*tɑ]`I4P̙_)LfhH> #SY-|\e7sW)UIJJWL`d+goXnITKۏ .&yө=TYϰ O0s^nJ'b"_G0js`P>I]1n<1=%Im.TzrN{s? 6}Ç''pM36e"D-윐M]JMIZؘ.0 Ug%Yo `VRi \SXgpG&('I5l9O!P֨ttTZ!.=-ȐR}j$#="]zu`)y_kG}d"]7L1. ݝ!W*J_'~B0~2q>/o:Ϩ-|0yRZ1 9bi>|3Vo\?CO֬ȏ4EW lcK0;0b(3p7}0F$aDs8{A8RMd//{uP7t-mZ߅$JctHފ<-Rv֑"^T\:[ usBI*XuP\BgT x!"4F"ϲe6Ryrz{'P!^>F988ǁE w\^m?<DSITe]~?/ sM;c&IhX-RPj= ݮ^G+KIGl% /B Q& BBW-HQ#§W{  ,MxˇbF:gYǓsgf{'ak-iDkc6؄((yk:Kxn96Z1F2;w%LAIR@Jcabe7'(:ipB\8A<m'I6V Bn?{cL9֩ }kjR4*/#.꧎OUʎLfCA䗆@!v"lH^5#6͐Ai XM  kK Bc0Id/!T[kϐ!\{"{~|ɰ Mhl[ Ivثq{." /D1Ҵӻ9eh6;QpUkVbl( ^fmqDBM}Hk8nQdPl9P& '$Q1fp&=Nʩ/uH0Εl]ZAiۻH Z &{2\F,̔-|tL$94׶Xk";vsJW8K?;_-D+A7葙1x^ӑ܁YPv";+ڕn_sdQ!U5,f-ܾoX]2:M`Ls6. m/+FR x{:9"BY>yM!4ݯ,(fR 'ET{t|t3voe+;f*$y=EΜY4{ G$Q)|X ¸$i[Btw[3>TyG_X$k>%@/1Y`im1Sg 0 Zݲ_l=>ߑ8N,U[^x@Q0+ʆ<;ͪCh 7uJQBg|Դoo訢Ȝ!cB0 (~{/7Ў> +öh]ZakP&RXTKN+w7]UAVsvŚdRDUaEf887L*e(6̞ S|Evq 7 `<d5(DMϰZMS˔Х53|$3J\1=׌;[Vչ siK 'Oddudpg̭v…( B?a1-s\+%~Q54;z }i%ZSZ߅Ht-k@y J&kv>Ck_]FB~>k?ɑB!cg!E{iT(įܵ KHw74Qe]Գܴ> WI/ )56t[Ch q¼-vXv?y>H WPdtw#If 5R-΁^̾xUP6)˚|'0s~yUlT3%,lTO ~*mm0,=2]T ',`\lAVb6R N*i09t[jMv '&h_ |y}&V0Dv+yu .j-ZΦD ,5 zn.m~I1g@R{#(>@0[lW@/iߖVs"ۑD}/H'Y֪\K r!P7{]5T>.K2'1 `${` m^CȞڄwꍱf۳r$gKR)V"O4fy$ M)wz]Sw{插:ЮV'e)s*!gbЗNC?H}8"0CH >}͸ZDfAٹ)eGe^5L@s @~ v}b(:it7ϒPEl;?4DXS^@SЖ_t&Y,,1b*g}5m0Ss&\Jt(-JdLyf/l2$o8pыj*`/nH?w A(jyL~@/{;Ӻ:8lkZoh?DCI 6L!u|vyZ%Yd;V<*0C(tZEP.s s*/~)X{sb;"$µ_\7vRG_#[bM,ڎiyXcP cSƏh0wd`PtYP6P{|jԄhX!1+_Tи#6Em1~}6Nw _ XZ l,.n bRڪ^P4P1t3Jn6X޿?fޤ qm%nw@_kZr .%v[gc+T9t3sſi&9k^-| ta:VZC&ɞU4Ԝ8}xYzn Zn(x"SPC 4lϠrf熦ITW1oijܟ٢d3}JT}i9iN.Ukŗ?ӜgQV$WVzBI`]>z Vge2ab SLs (t[/;Z3/%mMeCa~gʻa.F>fJ #kdJ%aVx=I6rz,[7w\N%Rߦ0CjqFWPY|x4fLX2iheP6/C vARgOv%JIW7T-$кh}C_O!AINFԋO p+#lG4|`':'eUjO-?qVĺ+˷C%b#\_3}3y˜Zt}BtFcLiz4i`e&}JEF:(^ёav>"K2TZJDzz! zd<ڄ63@{ ;.d4*b OYW9\? GHPeؽOg @F-ќ;*9v7!?*Wb*CNB?Kw# l5Jq`x4j""f cMz({t3Bo#Y'= )u绠(i|U~ݪOFЙ6/lkf Ņ`W9&f/oͤ=Et N|w;=uqR>9vO[%.e\$-<6_z#kAMgo4h'b<;phtIr8 Wq'b XF7YJ[)h #*en۸PVJe҉"r!Q}I#~9% x7ˠcuR2}w(?[T -Sopo0}t{›GO9H4TJk'|fb>Ѡ8~A$^_tB!DY:Z?up|]ؗ'7~Yh':A[Ҋz)LH#ܘPǶIRpRlC੽>ǘxt 3!؃#uA@QYVkfcW 2f[hp$\@BDG#Mœ%'7HMvVRȸA0 tVpޚ4 (R<AU>4`_1S*ΔRwIB VHu ;jrxnݴaѹ=`(()$_@U} I9fQai{MNCX ^@&xd€cl2&z!-}OIZSuE476~hJ9=H{g|sQ@zirk#==P``2LV)& >jxwsjrkmO'@a e<7~ɻirp>]. ِ$hsB ÿTͯ^ݦ%'QRJGWW4T}O N5j[ޖ-6!q )ɗCzȔФ=PaRDtK:[اlCjݙc\ҧ\%[X1|?FDTg+<\) hN RIfI+uTWgMɴ6$m&?QVt$y6aڳQx}=1Җ߶]ÂYg2{PrkA]ԍV MW%7gL?R?s.|2N,1+GX&H 2,I⺱LrHxѱBe~l#Ty bQ}RK8B4:߀’«?B@(eΧY/Q&`i|&t![RJ*'s@^\:X+#hS-Ow!'%B) jnuEߕAߕ_N{CeH?3wu[8cѬum}FTT'86GފL*OpY*'piĤ6z;Gk-]TL \;7dk2 b/Nث&ǧ*^w{@o j}mbT>k8emRpw8JU\=X28*5Z]ӿ)=1[}%B_$U_H&󨻤P}st_/P%Zm4ZY,n} @{n]ߚ)OTQǓeC'St9=[*|M{G# ;҄[7B HtF$/aV~DOQߠE􂋠ÿUO ghm!e hC<;'b2ͼZGRx?cFwnճ?X?; .iH@z/Û0KM>5.rju AA&R:')$f_kpW.9`H"8A#ŻvϣQUw}ATj,H]n9*Ei&˝]@5T5jUCu ۛ"?ܓ|ʣ[|}*N ZV`^-/&zXLD]yt5̼@יx6I:V S JV@i{V]Óbn}'S& ].]X%ꋮS2:].Z - }8}S{Z¾/bjҀf@,W O9o|X;t Hu6 ;joP1]rbrZJ 6KQ1x;(]2 F籨%~=OvXyW#-V?:0rb os QO=?w3&$~ ѩOL1"eS΀n0pe?l֏emvlVf܍wH IO5Cctm ݲsd>/ȫ@PA:ںw&=\너sg#zwl#@^$IT\a=|bX EQ`(WGУh]xȋŁ 9N9s4c6!Fǐ|.Uj[u1Z^sPi ;'XaJHAX17`wMk5Z1r*)g]2d,%\D)杛ftT-Lz9CI5+W'Lq橳F{nlIEv>|9jy3̪:ыtn[.„_JxR:Z1p80W \+ѵXu;W$pS2r '`E`]'?^N{GxB?1Vz8濕ERe[ŵS,0f 9y! - l\@y^d1 >oI? pYFxPnB~$2Ԑ5!o`(}ra [ӦJVœ\ikM3| @]^, CC4xϤ+䗅}WZ i:@ $آTT9=7Y:T _w)%#1/xvSP2эTA(m-D|g? 0YFBlƒ[.dBdn0<WϷS,UDNL{ 9d)pjY!i$.."’TnCv&و/VNpW$T+vȕAzv/)ΖNRHz[5fY*~Um`AuI(*:'4=Y]ҷv_y:C'>gV(m: ^1j9B. {U\uSC4@,Rz3/W".=#<4~g p "oUBNWbxMhm@`\ $ +f㪎n0F̔J_+#> vjLx_t{%Q$d0TK88"l A)tU2r9P3P}Z6<#)V^61 B<4/62e3;|Vr]7DakSʯe\baZ W̺a2F2: TW;O.ӫr ҉筲4(n|;%;s];H&(8ҡs_E8K{v٦2Ԕ,e63ir߇HďKoEI1L`Q)n0+1J:x8Wzoe!m'%O =!~ 1evMls׈ILzN~**`E3yY3QC%dN >ou["a<ɷV#[L? I۪6 V$P|Djvg ⚵QZB"3ya[( '"Ư^1Y9ާ`HsL(*=|[T[T"(`._HSRj+Rю;_!;PC|p1d bؙڳD;q a P+tTXoVV uy6q lK>(M;Z1fy~:F.ϝOr+r~)DbEYcm(?MqM'ebsc!g ͊tmq1̮WT5B&nN5/0I47+%zЫqSW1pe]C(U<5`9S ;<ۤU"L6t]f9KR}mhhЖKYS$# Wo,(8-ԁP~'>7vi1K_CJ/>X}MJ^+_l,xJj$YuY>?&oEGmO 9eפ8RTzN| $%'7Y 'ٔ%a/51sm2y;U>Z0yՐ}lDŽH T)7ۣ9oZb&茂:> .#h˖XeQ쯎^|W j; B15NY߶͞ڒ{Qkk%2*?$`rUhm%C.)Z_>< &]̨!u^8eɨ6!%鶚)<}K^0a=\MG'`2N\ ,t${bFxѠ2=WҺTp;c֮,i3̾º}^khBщ}TG R eTЦPw\OG5~oMΏsot+`+Î[ޑ'ڈ9NY+Q" Hڃפ_OAp~-=A2.Pz lhC@ZY#_tV-N[#7bOk гӃ:RzIkfEU]P=-QKv).$%Sd}.ew.*@WlczwDυJ9uF54BBt#.dK9Fǵ{ 2ҿBe(l)WUurz8!%êNmzN'-o/Xy"Ԡ] 7˫ =;v]O[ٶ+8MACIiH3Yf(l~nselgY> 5K=yȸs5^cgkC= ! Fg9I$9Q^ mg`я$ܫfc>6?"WFX2RkX cXMF*~( k/8_GM ƾa-nX!gЋ׮GzFU(S],wpqޯto=2p.eVVڈ\8e= -|2ְdD N3y3.R#7#cW!-sib);&)@f9@/ΪeZ'ḐeNΤQq='~3PzKzp @¼ueBLf<0ΕN66>Ŭti{hDpn5Ci'zKtچj&p-C QLRT@\/ρd&$6Mv/VDN pq.%D*v",u5 RuʬIB˟Z޽,. }}ӽCcBvޱ P,pHh&o48PvN f^NJ5?P~hgp TFN

ћYUsya%7d%?P 팀 m =QJZ@n0"+[ 㭅jJ=[1L)Fc9q{ΦNJ`<ɕ8Wh.B:z$؇/c RtyflD,])MyHW@8"_4J". ).9ܓqD}.19еYb6tMQ!ǀF)4.TtZ%rȅ8!zƤT<ؼ>, ir E:1-d'|vMrz5 BUA_Xw׭ecYUTZqR-J<'5sA PΕdVԳ`EO0ЏN[36Uɝŀ?}>2TJʫ{EfܰacӿEL:+ZsKkcFR4{ilKPTU0H;pB}Ks,L~./Fi\TrQnCI;KI RM6..&!Ñ'H?* ;tAEq,Y9#EU0B7H dK#Wv!ze*Ax x lRwGե`/)2 fJi9<dl S $ĂиA!9 "5C!:~n9A"#d_2 1ĔUV,3u|C)msu @o!Ziɒ2<80P3Q7 撳L)}iN,]cM*t h]ЎOlyt b%\*0Ds_Gݣ}f)!vJ$yʩP4G{pvR[}S}HUX+jf!= 9-53}7++i Y$9WХ cA)ە%3""` `.^eiVl/M_{3HLQh❣҈vjnxѩּw]z"qvUo0+O%2&RqAk]>w*2Wb+ZMGM uQIIEK(/EK} +=w?[md.u%oifGE|LSQ,R*nĄ3U; JD #(߮F&>Ky.;@:.ig wJ <̉//NĔZse.IɠD  '\Hn]=> oc>RA\/;|Dq򗁑q{# GWz"{MO0k&:1[S%saD&~#ꞓS RW󅹃-wip??] & i%tتw 6}.?ܨ!:qlw[3Q5*(*A?q: k60ɇPԾf9`eH۟$v砭wN)eb;,wGI0S.Kar L)d{6c5=x oҹ~Tj?ʂtoC<,`d-y,]+0 bUƻp1IY,ӾH#I&"̌@Yj=NJE 6oŅg*wcZJݳT}uz#"2X T>w^x<V⭅;.jbOT vZo<Af6*cy  t*n?TTBgX c>}ebE{FYqwIM ۴st9 GI%>`S:T`#<#9>edA'F۫j;m5!h%e膼T*nSC, [Ekt(HNƒlIʯKņ[7`4xN;aJc"x 0 [~1L1G֛}]#{^`eV]@KB[l_'|yଃpsZ m㻚 ϼ(x>.J ٌʹiۿHv&{Ķ <U?S[La[C#[b&uN" 䣦1+p;lܚz fNHBLwDFsygAƨ3R `KesGNSHUwq1#pĕClDVnD[sR-:ip"'x^C Y귗9}fa!3o|ycFBњ wסEI"҂S]XM n7g( 5h29DEkgÆ^Z0H.qͶYQZ#},'<+:īpg߳# ҄,T9Kuvҥddc{#a^4 bAю{.1DwŒWʱwt&OF݋'*)k N; UR;Pg-r&qK-VWfJ8Hb$=ezlimvkQV8/Ɛ /v!)\wWKxIy'8[#(:S~?U8Q_XDKFn"¿ "!:)#,i\P^nGuAױ O z;:4AYo&VAy57#w2~(SNsg&c [EGVW"wqMݱ)1٭"0 菦 z\1o8xF@ ƯD<:As lT_,jXxY;w+}qP=ߢcw6 ꥔ U$@U`4eyty휤 krTqhחN ,] MhX%387R)\Ğ&O'|SN>;HMG~0'B@9f(v UꡳR``(hY)׉/YȆl؏UZ%6Ml}9fBe5=ڂpFOKݛ26d>.\2 =ׄXO,>?WﻃMėE.w-ڍ1dI᥉TqS8#X2SDZ0u-v7-! FulwM5~$VaAeīɟWNWr<ǚK\#N`(瓮kywǮm@Ǝ֏gAG 60VC$7s/ SyB VA{r7 9ɵeKK]~ 1v3`P˥FCh+-e{(3 vG|?h~񴂹y+I~W zU"2l7Z:]nb_Lp޿tʏok YMiM5-Ͳ ːp1@LD?恧}<{9מcQJ|,.ZU[Fm 0ߡ IL:Jy <q\p2x3D'$\0R /sUd[ !C[!̋a P"9X66mj>wcu5]EX_TR8Ԟ+*v$x۵oU(nOafYqoZWu @`-My;E)zT(9Op2n"D?Dl S68rߣ'_p}5U.FI33PҎL,>hq(Z.&&ck%"+Pt ( gМs'_,\yEJ UdoH8wXNLO {X'8BܠEYFY4yR-T3A9@Lւ MݧfS;2Hc4TQQ4sB5;}NR%#.G q;!fALn T)ɏl1к,\_Zb3J=]ܠld|[81!kf dP6PpVhj zvq_ Ymһ`>OB0{A{"Ǩ /~q"79[)VM#oꆼ=\3ieGA)$pL~QE X(Ӓ α*c }f@2c@Ŧ%nGΝPT!*\H88( cյٟ G6YVrMq#.¸0'"[׿@6%ƜЭ`sD-疾h5/MIGRdKFyآ/SJN?B CN*'kJ)Z۝9v]6xJ[2/vc&rw G_m9vT x nOտo7!t"F njUט"OJuzU\˞y*DdդZACx 4i8`ф)bPyDˇ\~]JV<4"U[ 7($G@QIOH]Q$(TT5"unE" w[ct~9Z3ޔ ~RPjeuKR1R[' ' OKFA-23 KRStFÅ: C*BanVx}WQ lqiQ|e` U?|dx :O稿Ϯ_oK?\{;@z`nX"G1@ 掵lJ7)T %'ɿjHk౫8vv sbWr|) ,S͋"lrp/nְXoLoq)h r *s${S<ܽ5C;J#9jue_rh7L3^H-cD䛯&B/;~'2ʄPHJ 8nyP '7bo@1'엻Z> ~'ȇN:b42cL4WyB `있V,8祗}eS`&pE#+xW,'*†?t\@zYɔk308-"ss+݀xFJ1*Pt%J=l؆Js$7mP;v3N'}qKd^Ut -Nj2a954곶M.t:YOosʗAߟ*cnֵԖiY_̚mяJ GKJ>bsR?n C˼\\r f O[SK'XZQF;Tvo4*{N&A4%UL492sBpA,9"Yh"ȹ~qa]Q0F&JjtPcO!z+z%@O] #_e3$Rj€ZAs#A5 WKñu{cm'(J"F^Z4paLn(_Tǂgn^'`U$i)ܑs* .< w:'Z<:RV[.CAS$j,Բ`s=bB9m=ǟj |jq*)wDC.gvi!aq3Y-Eёïݗ]q2kCt|:v_Ey%E\4E6>hNt]0h't~rxb@͈Vײ,* AN0}~ư+\0Ϸ.Y&V}~ h׷5^pn~ι)}РTHe)Կ4x=Mu#XKG ^Q'Nr8 W61gIJ[:Jߎ۩-K 7`RD+gN m=7ξϏ`gig:UF1|[:=,O(Z"U'2ױg|Ԟv+#KɈ8 -O ҭv%OoYOh;SEo;*3ͅwQ,}OQ~NZlA7FŧV?⻗֩C5Qt]YPn\wx\rnʠ=؍.$;[?*>F3n [l)B O;13PH*ɇ^j;)l$MdKZ8ߤ\mN mL wbirӖo'uK n}4QlQϜrD^l$cYt|2K/.;^~ \9(عZ,;;kZ#ZJ V\q:]q1_v V%0&*B8:AL.Ӌ("Yywx%9/3 MmzIRBYp c[% H~F޷%XY*ewL# Mx&Oo}fZnDd~ }<|v^P"EÅX!Z$zI~OS'ys{!o4n "FdDƒ,<%- ޼xRM0d9T%q8y :}/[UN0w=D]߮Lw[*];1xl[d3O =<ߏ]20*CJ.XHA4{,lY9fVo3=/:ehP(ԮpugH\*n? ]LwGܒ /7KJܬ.Iw ڃBI^.,BJ%t?5V+"<M$r",.QYa>ڏJ$7*bq# [{t^(Ё2"cjlE!(K i+OSb#76;X2qW6cĤ6UxV^g)mU5 yĩ "4J5DA2`R~ 8rÝ PԒ 7D 85g4iխ2?|H]98&gזa:{7N^J>OPp;qd$A>7$r6*36^~4E q].pfia'AtTL8BC`6݊M-> )J$p?v 5(\ NtGQ܊y/Po/D><[TCKvS,\;r/Q?hɯׅ,C @ *б-@eafPA^ !4'z(·sA١1Փd}2bM)TS3( sqXfIi*,o2ra ;$rF3uzJE,R8'/e{-<ñu31ќM}-Et6p^ ʙp߈ <;C.4בٔ.4#c<Ղ(&ql}@@-⿔j)ENO(NB8Oxs|JDw&¢)>>SʮOv"֒buL11C5G*J)@/,)ۿH M=m5OJ,0/FH2^bkcGMˇ r =.ITWn@ -@\[a׻:pS ym?fJ$_t0F?`.aD΀G. Mc#-A w:(i&=l Ib! TefZƮ'I PxŮSܡB*hJ@XDrTڗ VsԑXھ݆/!ŏ:z^X SL"{MdI($[gX-]N1}Zw);op맥MFkSw ϧ3&IՐx˳1t+_::$Nf|=gQSR8NvP2VcN#$ XtjYdFͻ nm /̾GGGTN<߻t枼^G 6TNgB6` ޻F %,y瘓} UI(G4FD̫p0Qby+ߗB; A2,d!ogm%x~#^7nNRS]{$]>WZ憍GQgeB ?J!ө.acAQ|j=JGطQ7 Rٰx]eK&I0쬱\.@X {7&-ڊ3_ }cG? n.5< 5 xJ|.M-m{”w~2bFpre樃+mtsPP L_7dV *W<_2ٴU 8\a/E ٻ19'(ma#HS >0J8f7JF{~@5>u>4 Mƌ7s'Z of qno޽SvcajqSFwm{d%ysʬ ZFGZ#O戮wj/#bҽb$8|r(Z ? Ue̚i csOKןܤ)6 ZfJ +Bj ʹI/h V'cKDOb,2 GܑVQ"Nzi =t侚tF?CZƟ)fwOo6zs}8d^ -oŧnin$JYߓtWC/=BClX?5-iYW3If{jzۢ= @I3VeWZ8:NT(:@~|Ayd7 _*8哩h,_2.J J:T '(="T-U}%v!ovco7vot3SǦ. d+75DOttS1":|YIR08t_ [?8sQ|8nJC rgC @ )0Q#rn2}Pni=VR;Wl ?\4J8p#2< n A@͢I=}yO(O1w<<]?؟QJ]1[!T< k*ĸߖ͌{Cʐ4oikDƣacM_L 3DNPR&SGԆhbi 5{0Yk2>yHB2Zl"ӃA hyw2Aʕj_Pgmi%  ."n0 ;g^Nҡ*Pb1D40MguP`@S8ǁ Aqƾ C*PL{8U:U} &YB`w#Ioau8,T(-O3Ī /e[ E(u2$G6̡!FLi>*t%)M&| &yF1kbwsMBQrV6 o\.=?r;b-pAbz"7gtއ\A(0)+}ӆ=J F *| p/%V,W'G#Qt?Mc)m4wg ːjYj|% dߌ!pN4;l6-$dV (b +pǤVzAռTFIxtT#'߿?`iH:Ա1xÉ=$x_*;2!oޒ%tAhNak8nY:{ʘ]xCȔ<{侠^i%Jp =>QL@&+=VwYk wSLOHs nzajjQ`y]f`KlYԕu-U$˥X*no 9SJ'[4CXM*ͤ/ɾXp;L3CZҽ`/Z٪Fnvʐl@`ֺl,s+ HV5*3<R0 ~0wc Sbg4Z=HI}GI ͳcNj ,SEywwZׇz\8{#4PYh"o(ձ9`js516j$?Gi O3O򟃚\Khj1ne~9^( /ٟ_a{6_ ~UᨮfV/-8lʴ>4H0%oȸL!jSz9N'T7V[ BPqSh$`BS-{h#X=gd 0$t}04݄z:4Eর?uYs?iF /sOcZ-s;@ eqt#Xf=M;Uy&稕U yĤT܂&pi: z%n׹B*/BGqKY/h CO֬ȏ4EW lcK/̜NFh۝FM،v(0+5%:U3#H$llNZ {\V |+e\UM06B3 Aiz;)5{jwPC+EW)vA\v]yaжbkR/,П[Jo9ۄk/;,m'&cj:]Ax4.vX2Ɔ,ɝ3j \+VoZY`s?ެp+0D1rOW-ֿ26WB<2Vm7r=V #ZofZHsbw,ѦegxOO0rCJnډKj̠1}c=rht`}kVJ:TbG}*<d Yb\Ctt#zQv|"Mۂtd $UH)bT}"J^L/ͯZH4SRF. ."^'6D[Ƿ:i tS @N{XԛCD[ԫC?MUvBx{=qrq9t+j>3r!03YtD'gs1B]]絠ukyW{Tu. w,i,4V+dSqwAMƘ~GE\T"wv4v̟;c!QA\5\̀Ms cҩs+pTs2[n3$ ]pGλ"g(T~>V@t-/V7@E~r4-5Ԋ.qލ_I=7u%=eہڎvhm%Vg$\Pz`{]Fݳ$vig> zM-t1@ ]?ZCJ  xu w>a!(/uYI;d?s Ѥ|v~Gp)5Gt :ڂ9nG x[Ϣl/W{ʧJ]R}i%!mHA}PzD>vW(F|\~91K9Ar׬NQZ? Dka]–Ԏl m}в7C\-0"hT A~c?ƥWY:g/9r>B7 ATc >uxoʸo[꒳s1NU=4u*huʤdFm RȻԅ¸[F Tcmxx{']ы -VI<:$ WaJd$NZ12ܰkk-ONȉ讨qeMHZ>l 9JDO0YR۶LVsZ(Q$@9:ɯX 0˱Spõ0pHrp,Lr"'ҋCkcD8B7J>Y&G/:o} ap9>6DG#ͭ:5=0YؘFu!&춴)FgA?HMh0Lq#-L_$48t߱ECw")ݻA؂|ݎya>N|{CE\G=yf9@W1 FMyeT40&{m#_(g3$[uۢXʏt'Y҄zU mzl!JQF c4F^D,_D:87WtHVPd p*I.mL<ziW|vl, @BE K+z2\sXԎر!@x%ԑ \E{ik`g+C(' PZCv&ndPSbͱѻsN0'gH=&8h$p7ވkR88\7~Χ*k:UDuZV< ^̃q`'Ou2pƾWՅ,Ix!ݚq3w(7&dܬusMi?KouUv8!qIHmwD_ҁѮ[.S~HXѴQ{JlMGG7eIS1uX0~56)_2%>8f>"}8y@7՘rf@f Ó|WO _.JO;8H*ą[Hݣkn;\vF`__m٦HSCq"]a;qVG֗MԴz+>ջ^y[^ mr~,o2'^ pH}SA 0և^'D+jhew0R4HOӄeG@vߘX2A\*r7o "G:`'*;9T`PKY.FvTR0rIT\v) @0W=ĵ̭O݅h3%nX]8aS-Idxߘ%UL"sdVܴ5 H*C/BrO~c e:CrK v@!I[L)HMiSe 1FgnxQ\h >[o։!H ğp8EǍ2Ǽ[ ꓱXEPN9ct!BI S)DhV8cѣC|_*Pw-̓9(¤cXj*^7c 2 F1c (1ƗF];='#ڽ4P3_Z6cs0 fu|׷t`P4m63dwq@rYKswr;aihJ= g*p:x?ϠV0u]j4V$A^wvXg_"Q"t 1.Aڐ7᠝^IwR S8ε[b~O'in0y_dQUn;ґXv^`HM;\tX2 Q:lykvk=Y?5du0ؗT2ֈv|K>ثczSIY X;ު;8Zn$$wۃ%j1rC 04qwI>}.&]1>;btEg׷*R̒}~zt̟&"'}.#)Zy)j>vMc+͕gz\ܸq.>uݺp$'F焖! ±sjH'Ƕ&iqӨF%.joo0`B>nʼnGMC+wwc`顿'[h~}RY<, n[=9lә,ww<j_{{t'è hO)-h tw-$:L#`.b;Nv:[&?iG"c661߶J 9GS= ,BZLo48r*N=i~t~)=f/Cap (+N>*]8lFyGY3 Ly?B#9"xAWtT糧%uw)Ka0*GzG #Pn6fŬk!r)jQcKoK띭*? qZy7P`|;{%euIW%.bǥ0ӵ! I)\L!ow-`ffDˁDˌ;i UUƿ?[#X5;7J:֌ JfιNTo@{KM̈́ašUD/Iܭ"adbPhiDks<<@lP"^ܒa8HZ_EF?AEϤ3U?ؔZ UXl%E,9IT,RҦ t)f,b;}D)/+%H0k'0Cp¿T[#ss wZu&؍B)"L@ 3a\[kW%*3W@ Qm.6퇚U@Ƒ)zc1BU(-m?&D? 6`q(*1w^ؠBt㻋VJz\ ! y<*WfdcM{sp+EQ->75Q{9(k l)idMؖ1sT0qzh >TYaw̿^ 80I̓Α ࿀ۛwY^lzbպXKZ[(n ۃCCpi ܯX}ޣ sهbaT.D߹z#Ms=GeH=Aq ںoFZʹ)ts8p)EO@vk#AaTse̷hWzZ 7>h-[ZHhrcU0 Jfxegvk>VQvoӋz03<&ײß[vO4OV!>qyȷ+!#hWnh!0$2C&T(կ\TOxFNLF0İ)Ój('9gjh \A nקG2}XOU[9/4ݬ,gxjŴ `5)JAr|.vI9yIi, ƛn`#@m$SH_68\aM64҄Vzn;qaS v5u L'5U )l V^[aNI٨GIpb9Kt.W7l0y+P,rx{E55]xgjI7-퍖 vX3 F^s':QL`Y! )ǕR)mrVPG[`Pp`e- i^W@]bX]mo*UH~MiuSK#$ҽ B)gA>:%89숛{{A'УeH~"].ġV]k/nrh޵IgҷrúZ/J\{D1T:+9P2m/ا%fP?idX|n^^"$掘Pp` q>B>=IEõ9-W,b@Tbu8!q $%ۂH`on bޞGFKYEQA>;Sc/+ʡ郃" s"nlvU@{UN?lZ3*q{r ~fG]GkʁCOp0 "O*Sϱ}уc m=)%X)Uk-ξ1cu 8Q,[eCHʧ { $s@AJ KN=u|ҢTg-܎1-U~Tq7N / C];~+" bn WaH(A( |= 5.{Z/zM'Ϻ`{L8_qDTgӭRIǚqF^q]b K]V懄f><%J>v\Pf-yI*yɿk_aⷊ:J\D5ĺk1:s'"翏"+!p+$`wQ45>}7T2 _4ykk]š| ͆!$wCsr O_I'ڲ'7l?uN\@PKN8"I8ZG~+UfZrNN-B_rc%:ft)§C#ꤱ`VuBI6b.$xpT$`dXի t6QwhRtl:lݏ'M* QcbzŲ.svY=BQ͉e73tkg-Aո3I2yf+_kQ4ҵ5^$uIь΂):1% ,ikۺƟod;߼lԼYբrHUVF,g|.C{4Si~,d³Q_F,] ΂O!4BȯkeHm~yPU(P{լ޼4Yg;fr"_a"2% 0 I|E[,F24Oq(MOk]":/2 pR.dmBN̾S,`kf҃j X_z+2x .@?3CQK̐H~3M[`Ib;9p3)#T#I ~R b!ӼO*xRbZ%ZSaS؎ݾO9 aՒ `4K}E(v/ۍ|fj*O: w7Ml;Zǵ SxfVR,(x#,OC?ث֏ iC FYϋS#*y3tƝ^AqVdNa} `2| zq2\~jw)^М{A2Lrf:>T~%`zt"5Av 2{ $ǭ#Kj^=Ͳ_Pd!e_Y xYنz$Q%/JlΟ6R7! ou ȬΥ=8aD]ٴ_R@od3[`jv5\SyBԄB{.Gvl/ gBy<9ev@!,kƴdlǶѸj͈'E,6zE' S4 Ϸw=%zyCGǍ( ގ,f%g+Ԭײ,wt#ulS X=*wJ7F3{ǁ.lMk#ԯ_MuZ#'۪BX35~~W/q2N"3,gf]o̮KkgHm’mFs;2⁅}]Wr[y.:Ɯo8m"5=Ha $HbEw:hJ CmchPtQBo\$ B/G9x уGUݎDCeC;eY.K0_0۫ڳr"ZEx!NT*:H%z{dmAd!x;CxW[Rҍ$g~ _(྄ߊC=CHw>ApJ&[g"vIi"ɣt MnpIeW­l "(q;m3,mbR-ј#-Fv N;n䵝HTyJp5<+ItٚW{ٵ Ql8M-"y:I#&V:яڏLL妴iaи| FLY!xwwjzLNͦ ma0|d9EI-A>5-6j ^w*W8;j7($^҇s^9l 5-X-:r^֭J_˰J>q[ 2RRY?,>`U=( $Fx_ƋrȂ/f_تU߰B\`|x{II"9Z+V-SCN#擼 p`L=xpjUO  FNYTVaap)4t ;!eo3BYJ 7BEZ$x@=7*3QT^K\L?;2Ăa4m(ϰȫ3yDx LYsP/Wܱ&mk=haaY3S$I*:"T7R>fG/ q$L7H$˨e5Xo"6-ˡqGAvml.y kI\}VIwA:7J\w@?T[Eu"c,^.o+fA]'؂Y,pd,cSU:7{ߝ?9txl@,x ~ 53Sۙ FC)Zq>eg9R}|0]>[FYPh0€"av=.NV4;2Z5 ً+y&,y7ӎP )Rt?/êyyaBS:qG߼2ڮ-F,RKE`Jemz'/6 [-з&8Gg? ؓIZpP=f|:É~@f8-dӷ~TCDkT7w5{YX\ˤiY6sބ},&v% I:ݥC噗#2w,Hq|e39!mFApۼ7~ͳ0j Ԛ; VFQl4w䉢߈yzLU!@kN$I[- RP2 '0gzGVQMApGyp9"7f_!%ʓ{ǐv5ؤPYmRq(`;@XNjE3٧NT+s?Â,͗}J6fbpS!4jt}fR?zr R 0N~^0 4cG@QI~jU2YOe_N]JFKsfTQbb3{(1N0~h՜_M ar5Ѣ*ka&|.#A;If=eqrA X[:s]L%lF ;,  TYQ",3fj ͒[)C'M,ut71_{]I$0DSXHcR1HȂ KzF->{,&6{BdkXlQBp>^H= |")#(** VƦҹdF!JC.a FBqiunq}O.N6zq3W_VɇbK\I սsEz{ǹ85M.Jiʼnz''\6&$w׮w`k?M2^JO e=ѧ1K Zhqr3,g36!\g(fB]!Lkj4V>WVnZ~0Dµ\^ xmN)C5:#N c<~~*" `+$e(#c\*1Ce6D:4%wD}w a\%Za74:U6 MuȂ^R%m*o^_BuEσ)ZQ.n h<}* W}!"U=.D2>qxѶnxS^gqWWkIr~ /_5Pxs+_LD%u]D{x4f(DK!]uѫY*b\◷%a|S ܇ q4ډa-v.X+jɋQ\z0u=Z9'JKE^Eӌ~HG)DRn|yLyfsarwwwa[]J{Z̺ =hwV^pf|ظK`h|!<ݸ3djI4vbm.M%&0(sٮ)_wqT ˘E~Oj z1*eO\hTs:QMe 9U+ Tys鞗0{lNBzG Ifb)ajeE8#Ip4ZB-B )ֈ{B`$Z{Usؑn0.*oh~(ѾHN ;~t3}wB;)iIQo9㵥}ډnYr gEKF7q1HfL(<~$Yvb;#߶Z/V^7x)A-p#Y<0ΕN66>Ŭti{hDpn5Ci'zKtچj&p-C QLR xtkʇh V(Vm!^ OT),96!cp HJ Lȅ_lbvv53%C|̅} :CC[1>Q_?vVI# Hc!=P=(xyC-LiGmB J1[g!A xoe#Nd~Udogb~!]x8h#KK' lKblz(|'<^5vᒼx_ Ǫ&נY@OZwuu 2;d/r&R408=;j=Ͷ sѣ 3s$,7&;D2m`ҵl[=  sUruesP++\#y-k{S|'XivS;MݷUֈY.0qC5D22 i(WanMX$+˝~qbt[Xj7WT(15knj?@CM9uH2]PO/ [fz!:BWm Luy\`s2=m' e28L؛zĦj, I]a'L*7 r 5H:|ZP6H߃?b-e]G[hp}vrPDh;'d/Bl¢GN$ rSR%F˂M혰1, c۰>JJ kW%qr .v/@.]<Q[wǒA(93`bMsMHkgG.:\( K} Tt٦١rkӏ~;GVKzRt$Sʼn O "Ў.x_$wjA8ޛiQ [}aӉY&{/0/fUonYQa92 $+[HNܻPQf9 ͮ$d)μOj"))RAe# (}@U99W nx.18$הgpUʞBbxet ~s = g{ɽ!An($&pbY|}"kvgK]KQJ >hcyٲkv"XHwR[Vq߸Ɖ_Ǚ!t 9r&|N*' (f)=k",e=k5ovQ{PH2#~Z!Bi,gAʽ o7 Y>Un(mȷCVOҚ$:^γJ%"+Io+= 9 ؊P4US.͙#a\fo"݂3-u G##W-{~M4&Fk/&5j ﯬ={FiTadjfÐO y8 (j(i/]8'm? j} Ջ3~:5L'םF^s-FT`*Ll*KIAN%`t zH:U(AL)nvWՊ?Fq}VƠ,N7$m`vLJX{yV2&+xtPw'C+~֬ڴzUuBxOvzqXj`f`'QaH:a6ƜS0{wNv7i# +,W !]]I]iKLUiid3VaK|b"ejS\J8/I-( oSoc,h@ZY\qlJ;{ tR墹8b]l?n8y஗sO3$-U b~hL~*nÛ8xg?{e Q@][?r#1w* \ 72' )碦:2|Y)|o"Hۻ \eOb&#_e ݡ7Ds{RFwEAjՄhx0n0̓LiDŽp~-)@ y6DQC>GJG]ddH)N iEMo/6_D>J!10LQ|1bO1u6chaM=@U ;C$$G;lKK"9&J7^qQj B';Ş q$A.0~QS([rU cd.b>g`|^؞|FvnԅDXT oqFǘ wPuČ zfLN) ˔Ӊ% q[0kmA'f|Cm1urWsXmn4qf1e]@ڴ^Z֜0+jQ;нhq!07եȍT ½TmA%s"i!m{32<>1JOD wYy8/ZFe:99YAg3MܱE%Dpq,ucN[GV0ENFCif^]DO*${_ KCoѝ(5 RgR+%E~ߟ[J .r RVX136r L]ȡ!JĎ/li"8JPΰnj>ApcssJ Z/̧Jk)nĞʹp&= P;[%Kf .9{+Mhk ~\|4'76ϟ7_')6>z+u!TLh=񍖏RKXtk-vy:Yt;O(b:vTz ,/uk^mF#\v\$-KFM阳)U@kmQFr`*O8n1,ꃰ]Q7\j3@u&]h5oA{U,5Ib-IinW2dBN 0G -FsӍ@m)o[xrc!%nՒKߦ~= xVW>oN3o{H󭁚S6G.V[r?U5]Z)-pv|2J|7ZJpٺ]+[ bqbD~ \pO59*w)@"}rLVCu)ػf`Z)htӱVRh:Fp|kݕȖK_8Ūg6k&1Aߋj?Ϝ ? s*9j&g\6 ccCSaDo}J 6Ih֏έG{rQ`yE)6^4-+p)#)";'сSm͛$k 1.%S2A-veT4P鈰 2r殙x(N0KoHmc:1~:bUd%|̂UM:i~Z.0 (%Q~XIhև'Z>?#,ڡ/Vs37ЖS?xj{HeN(Գ` Z6dE$8h HgK#+lI(cAXTيC Vi]vu7~)R-ΞG_m/rszFtU_*Iv5v|1N9xTWC m*M7 &_\4&jw}z<I h!As,)othY`7?)!N5VuWAg hxD#4jXB?K|_R h^ݸ y|dʣSiLrZ4 ?҃N!;h\g`%$K;Hg0~9G ~H\'|GO;yA􋝨"Yhq0GJQ<@ă֋t0ϼ#Zy:B`)5Ja9-1ИN"\LdZo;]H}*.MS-&u)̣DE>"q`ih~"M}i'%uI&fŀfL%KJLZPSS8 =gnL*![6mNL-껾9۩ܢZMbu\%PЯMʪ:, 7X8r'!]ٮ>ˊ%}-Jc_QkFek^ ,Q.߭Soǐ;mf1CIwաY\xU0;YȻ(}*0Zp8 oziI: I SI>T8 ̫VBy2T&[Y6hIp F6፺(p4 2,}i}"Ryn*ˣ&[$D l̫{ZP6c?ߨE^%RF#پT MĨcփFaJU*1eR7XcB {x>5d'0{aW \ݎxTr":r|.f^xXglbEhļi>piPm7j#2/ Fw^ٯ?Sgu8r";.(Z+V6H)4ϮOt2 -*z ̍ņ',R% }vDZf-q^q 0:S~?U8Q_XDKFn"¿ "5^13iml7ÙKY*B8f>]-=r D0QySuo˥EUԯ=xeTYA[xwj»xQ *$UVuꮲVx(}/OtAN] U:; )V8Ρ )ZB̳#+`uZAQr{ڃEX ?Wv38%uL菦 z\1o8xF@x7% =XTcghhIMb '~Q턉I t?PORךFNuvL qP MS0(z{6Ugq:[s5]n:PYGɔ:LkQ1gu߹y^͉{/'ѐ*Wdw.;U)f7嘬4w)afL/ԏb[ 3B߿t(v1cБg!~(}.jA,@,A7t7>SGD7".t:FlSƫ4쵞e 52XӀto^\BkeJ DG*ȵ1W/H'(HVٜ)J> =@֫d׏Ypʤe>&˵f9<%;dQN5n8SFۑQٔxyISC6)f+ȓ_'ke=);U.> H.Q쬖aOizEW _'b T5=Bw_+N3=j)8fwUH q"l.Rd\OɘG50U=(.\1Z1C dWzU<2jFLIU?&<]?E~Q<xL|y!Nٱ1'5{*[–cCl3C jGZ <ʫ yt(OR7|7hB|S:{+2Zw IW s߸m͞FiB @(ݓҘuκi\WdUb.a5jۙYCd 6kUWj٬>3WjeD-ZV+;R,X)/t;RBK4/I >`B2.1f!'D-]i1<-[7\L4.×4#&ȓBǩ[{/w׉B8X~@2'<^9~O!o%m,iXt%q4Z-- 3AmeWv3V<5Y N,=GXp0醽?[KRڐ3ڜh]Wf|К*ӌibPqHn.0C[ςҙ{ٯ^|?0SoQ͸RvĨ]BJn*ToAN%@c]y6`'{)TȌD8c-g-4~iT1x)o9_: Hr^ "JdO Tɒ68:*t̕y7vϹF?uO_/=Գpq~2g 8QO`~!rqX:C"D?ߐNZ@0Z- eRLiOh}|&D\ T/@z'U6oXzh@P8 (їr(̗|*y\HdL{ڨKĩPCOѣ;6-i*ІY í͍B=5-0估MN^-ٻtL:;[ * gͪjpJΗ Hպ176w+!K]soD7PCA&Chf td`eްar:D->燌bbdnqw,^$ی" #?o㡐cI%Eq&}uafK'P5=8*1;.8~'<̳Y L06;Txb!2 ӏ֭YP"}]ƻ~nsX8wm;_L:'N/z]lb+WNtjG1$rʽٶd̥WI0 Ȧڸ_>^Fo!M"PMV&SvbSpTDI~}%r޽QBή$=oR}yS5czE\n,\.PڛVq_)Hw qĚmqW#Rհ& iV~2 *þ: vIy!:k}*~J:Ǟxb% qө/yc : t{UD•auP"8A<2@w4 Q쥬^5mdz`2Vt0ʣp<zVia5dk`f$دSo,C߅ټ=#H]Hsn`>HAR]TSoG#!w0_) m@Vpa#(| phVRt-]qFu(P񔮑Ú4 ÙӵdTz@yAu؉i7a`'*h}}L Y˨f#ܙ*3+ l`KbwI-qXo'3*IIMlϰhT qw&Occ,a  :q@eD‚+QP[>*g(Put7|+tGk]VF)D6c2cS^2Y#I3 8[fl^ P41ݕ '#-ݟ[%I'idM#~VJs |#- a,<@ 2n"p]P`)7MZbnەYxR{N7e2KDĸmCy _-636}5o_ۣûzaٟڏhzH?t:sCíOKv%H_^?áo6cno#J_iGu:wá_C~?/?ønX"G1@ 掵lJ7)T %'ɿjHk౫8vɄ,&t͖յ)汇߭UwC73CHw8N@Aݪ]SQzfA {dUT Cr^Fò 6!Bu_$o?(f(8@oܞ S%_:4b31֓X N>2bჺIOYbbo@1'u*Mz7s1N҄?`ͮzBR)ÊT `P;lVG"Dqj1{﹌ۻ=L AlE?#}Y J"tƨ)*#0]m)A-j!)}"F|N705RӳP(u]JS_J1{+I"_@0#WEGz-̈oA|1^`Ty܂"CG4?Uf@%RqnCwϪ%[8ER0:6P"&]Z>an!Ǵ 2 8Ġu(r5-9~1uЉgnTXYO99m2MesQCkJ .Ӏ.JR -IC<2਱IoݨGNh G, JUQf`jU7FZ9TQV|?HᗕX.cJS ގ1׹/VxGXT|ZcPzObf PH XاIWT$0Z?I5>:EYN=d5C" xFJ5͌̾3id6CO?dm4J=< vO83y:~ªUHgfejFF  ;di;7VA[G~^n8Y֝PT_P2HoEoKlKtXގmϪhnM* hy5#qt:4 QDN+|shʋ/Ra&`'j~ x1;ϊk+a?a%Wf5&b.SI*) Uf d6 ;Д؟-e;AY5C9 JP=#6#\[g*Cٙ"^@kj=k0OKVp8x_ #H@`܊}puHqb R2P))DH9hZ06'"5 d٘+-_hMkz&L(-暎 3<=5Aycy 6:,pO*qk0e{MM=݆< E+}r<.CfV*ͯ=Cp,tΧs%ESYm=Q4ބWToNQs8Q&0"7N 6۸pP(z?%a^NDltDݩH{12A>?/_@|ݎZE 4$5䧡G:۩}`-dCb uX+f{r{f0{Œ ,HSjD,Aݵ0ƨPL0)|D0}RpNdB-ʎDHql q;OW|v.뮱?2sS~F&rz:4#=l"R_v(Dmś"AK!cCjrl!WԷ؁bɖ={~,"eul_oֳٓL/24|g`H .*;ܝAreWslŒ}$+bP$VlSj Lpk៼J't%!,o 1`r, EAD)\8TU%C3ʲ;5R]X;O(K㊺ R$b˭0'r;̸AtDu nA@e1`b'DiP RF #Xˆ$E,=8ANՃ𑐇`([s}7Yglvh_XbbYǗťZ ɶgZ Y2Γ->0r%]f6 'f5,3);w' 3+g+$²#?_PK)k0x7H/ҏadA?CڔY8Wy^(KW=5!A!% CmJUP5eOQ.jy /T&)džym8A9aÓ;Ra՟ЬoCWO} Gv&cԏuJoUai wP>'T7`|\0,B93!̀`h̡_U>Ȳ-Cx>첵M]-vc8ݔNdDbLԶj_(FKT4ۜ`fE4۠W()H8LR|f)9oT3}ʶVfqlEbƘHcl6'wMb7k+v(NFGy^h. ֱUg2!O3*?wnbXyig='.YW, B_l`ތ>U Դ)G!ՙ 7bߡeAUT% rg 3B -}jseC "wôfG8Ek'nn4`h">|IԒe%s8B갊PjmJ}3:7znPf=~L|ỷf܄_D@g@W*l]Y2%]KڛՖCQ!e 耹hKҲ1>z|uH @_N'jpY,KT~AQwA=ZV P;G eTJM#|xY4杞=;^@F?UrPGY+ǂҸDKAW,M5XZ?DUl5 ;sȢ$Ĵ)`8giH1[){bN3пwn KJf½P$Xl oE3ݭ˟2kwSrp50zfS/Ѧ@3/Ůlw'iטj,-'5y #> (i+ND*^dh`<z9Cm/D0Ku bl_Jw;b.E[ܘN>xAAؗ; *cZLEถj,c9? A伷q)G2uCn#z!ٓF"Ht&r3($0YvmDwpGG8/nFiI{B\t_t"҈3;8ItCp/W*ym;n+O,aPPry?_r ~?ңE$(0PZ o#/n1Bc5J\Wp?P ׫d*=~X#Uy(c$j1~BehϷmb4c8fKM?2LwM"{`Jn(oރ+ul&0W:Y{;Om Ɓ<1 ]E++SorhW_?7|m#ZI#+_qú\Q$ -Lu.?u 8dDc@fg P=bϖnT@JSl-MC"k IL U_p~ SR&]y$˶DBOſ{p8\GX8ObY5%* Po<@c\U(5Kyܱ[iX*!Kk ^l@TGCB,͛N<[4@{ɵ[x3]ogPrŦ R ImVN(ݶ/!ʺ*Uf[^tf3KS~ǘ-8VL֠SdwE* 09 _Fʀ/Ntv |{uQG0jD,\i], 5]=\-"K!]v*=ĎѤr `$ԇyQ 9hykzNu[ڎ#HɭW#l30X~A;iؓ IN>ۼL bͅ)6F]Q4u.ZumL* KȪ< jG=7>R!}"d2 5/v5}E{.˩ag:55&)E"ˢ_ {V>Zm,v^gخ7JWg~ I5|r*xk:T (6pD!ᨇy /nL:+ٓoRbX?20&f PxE{gmQ#&479ͬ릌Q7^A",-]i_ͨɿCO֬ȏ4EW lcK0;0b(3p7}0F6&)( ,gRC [fd7b/ S=H,==e{;×2=l% :lgXmF2׺R.N.]iMs^FC[~|]u,:aۊN-qڊ$w _p{kVV%\p!ISM)KF@=X9pk~JB%M>Wx@3 qnG0PC ƿgvYp;fDJ#ȏRibOyARjH>?N)0_ޑgN/@x+229;#Cf`urrЁ1z|ʽypׂA*@eJغG (T)"bz@giDDL ҚUvY#H>Gob@Z]3Y/1l%獢ÈztR,T&sHGƵЀJ_wu[ 9 =L=4| 6?z'y)|Y_)aI1jGqY#ή$T5b;Z6_ߒ"vʌL'I Qjy/5$ `NRն-sAU<8^A/$i֢z"Ph miX@#|p1WM\F~U00ީX ȿeS#Zng7f n]]%-e& ӑ>V ^ ?.ugcFhnvDtt hwlrd.OBZ@(BWHeDDݙ| E[^<^DcelpbaW9ohG\ǫq]y=PAt/UoCX3Q h Q1~/A{{s<" =!E|qa>wc&) CY+àπ`94J>#6Z}!vN`uD?pi[֟NJ2Sb!̠@`ʩT'AF(XV|ܢ%@%5Ҷs6p+ޫK9].V5AZFYG̈́m ϽJ2zRCXg *+1S'&}"v< cDIS1IYfokͼ S[sO6&+w'i7r@LRƒH!ʹ T^6N}}QPzכM85\qM&N_}b0i%zɹ̄d}\kpaA5lU^-EV;ؾR%gpwݖoSCl|/.zǫJ%PjDG/)A$],E&|z#;"^Yk<);YR7 <'0lw +BfClld(0A@ )M[B=2#a1Ͻ$kPr4 PU{xd*[SEwH56M琧8ˢM>W/yH H\+H,Ȋ.ðPTϹ|@{,w0WVwH` K~,Tdfc.#GRd.wwuLxhgB)5}vp:rTC~nRb˪dB6X,'el@糈e ZbqEw;1AؓM!Ap ðϵu-YZx8Cj֛}"8ˇ,2W29 G]ŮQWqfo_AaArM (oP/^Q>moZlo$XWӀg2FD7]":n"f!2H>T_<>D|/ұm˴n=L~ aaxXſ>UH}k=Lmo균 M)|+h.RG1Wu+퐸eۏtdvȣKg&Ԏ!hqC'BMfx. ~m? P{"FĀ!_]E<`S!qmZn W Y5Y3ѣ?|!,*w=~k6tMul# &[p7% ) 4VjԀ:dx x\`e}tϻm<`~<Ԓ?rd`YS܆HX\-tXإ!R2GBt$r1`Mt/ ͒'C*nȖ'Qi;D;uhUiKf`lAɏz΂.oU:vcO8kGbC@O@G$3\SFu%3!>33 [8@r+>:@m+dtQ{Һz|UHU(,7)BCX,8ݮ׮ڒRss(!3d9JXBV\)[39@&If&!5  p!5ɵ[6SR ]0Hɶt>z&QU#dXV?{mh313Hr=b3㑝45>D@@.bWc{ȸ'f;led8Wzl"ltT32|o?gBJfPS"R>IFϿLݟ~{íj6T(h R܇,Hb-;. @DkIޢ4( NJ D{f NjT9N .fAG{~=L?`?P{A+pXq)@Vm&eBrPC鶥*$`6Z#7jKŇqC"7I&Sqҩ,x!] `}X%^~PFT$(R$LP9aLs֍BfEԕ07Yi'ʣC`M3`%ԜFH>!/f 6]j&TG[1_2r"6h3DyLs9xa|R9MHc.010t|1BxSC wuPxcQv wLs8i4@s1|q~?7eHg3:Y0Ԝ8}xYzn Zn(x"SPCPL +7F6ѥ#{~j窧CݸS0? 5_b`1Lq@3 %27SBnl>m?ٌ@uګ4E8Y]8awa"~#ɸ9.ya_ͪq)3u:؀@{DÌ q[3P\{oR$#kdJ%aVx=I6rz,[7w\N%Rߦ0CjqFO\ mo\7 rNzz}=X60ob(g ?uJ{Hޤ`ӣ[>,ؠf E n)H7Ue@hxiWaY%7mf[@>xm⵻h|ӖZ5sMr KIBtMdU( RDGmlx ;+x0 Ŧ,e]Y(\kfF5^O,@CvJQVM.nb:%^, d,[~g - ĕA̳l-͝^n)=`ƠQ5rW0N ӟ?艸md 1#-e٢+&SJVk@ppmrV>3xpצh4j aMk^z6RlgVD&O5mq}\Pl[yG { w kX<̓oujxlT t0pc4b~)Ԃ$&*Cd"<;#$F-$! i*T}PUJA:8{45.c0_1&:{@#ѻp!%䜠=Donn76QNԷgL De$X)0,h% YtwW30Z/ҘO~>"=rB!\Z#Kn>h{ ]h͇do^+;Vnq#ހ]ձSV3lL 0p)Ϛx̡Ube&P1( V?an]016f>i]jb6eAy={g|sQ@ziR5`Dl$ɁIc)@ʼ1+1jGُ0ۼnH0J3$B`0Qůvs?ȸ c1LKz>.Qѯ%Yx!hӄ>+LI(xQ0Q-E1" vC|M=NkqO؎_@2):K]1YϽǑ> K!]<"G쿷?Oi2~j|1?(nSNC= t o퓳W8Zpg;}ZṷQR.&d]h`C: {\۪ϖ.\?bprW. ª)m8`e;ifZ]_:R˅Gv.~ͲwR1}b(ي^K@ >.֟Xê&kk/ZwC" kO#uȣa?4}7'GJt'w =yx.DUб:ZGs!2oKBȋ7(=FWٍÎI0$P1 s1b _cvmg曭J, >iE/Ɇ'JOƾʴ}I,ᬂµZd3ƒ#Upy33GccMrz$ 2r#bH$.6pr~6(2DvHe US鶯T>gYBοm >A% ,1DymÂ(* KUYUBЄk $D":)["zӠhUvjl#)&hqYJ@,>C2)F Iq~wUd xOʊ\%H|Ќ^I2`nl,G &-hssɑ5_5оe,칰*UurNDȑd>c/okΦHsV'6"L~_5U}7q#Ԓ)- hL'rF~Qld{ŝɎ҆ NGmROVGPl.nf}{2;5BE2dOB) jnuEߕAߕ_N\OPj!m:S?rX琹n!Uo CCrlBJvgԅBA,4mK \aQ\-:AT.,FGY{ d=Z/%F.@UEB2Ge΅]Hgv,"# nEtk#ZaQp^ǮFvU guYpZmbzhIf#dlw;KuNE 4NCa !X4caCk3Of/JhY$̪>kt{"@]8:676~߾Gn`K^ c`]م 稘~$To9KΉS-vڜT| K7!3j ;bP_w% )]mo`E|#B7W_}耄؇ IokOHj@H*(hkc6{Bb!縑xD6 Mc߯>fžb1!zY<$zj\d-9R|/F ص6U[QDTbvj +и1#ni?!;b<ALANvL("Q~ L2,Ċd+F%{B1HN<:Wx(P΃ۭo!nz1A*͓2{[?o=MjPh%z3g}M9s4c]Q鮑ل7q6C9Pgkt~#j^=T#dB"T+EDP=IrMf\ntYvsRʿغjHept81YZ=V& Qܝ#(9`E 9 ζa dDd=s)`V>rAeg#W=C#ۇ A9/-aL Z\G*~a^F H퍮4&U&.Q7pË.LQ ^@Jqo)pHyŔD؟St{1nr;J*˒fRy3yުI&4DAZ -I4GC/W".=#<4~g p "ح!Έ.0yJNF!(&ڬќѴRȚ[%lZxi>'2Ai.Y2s1#W ᶠB@Vط@RfWl5{SW!S\ tC-@MJ%i@&^@[EM*m兤9anޘDWNmw8 Em^6V#'_qd:ǤڑUepXII Sʯe\baZ W̺[uxF\|=ZUj;;}gtkD 5d.In6]SP6i, ).DgPj3DB&ˉQ;z s&cUǼ֖ @\״um3^d/ٶ'$#t W7SM[~s|6R8FŽ+Hc{' FGPjkH0;/#HJ \QGnS㰦_q6w71uOT̞Cr3N(4?",Ul2MH3ÇN0/5K{'x7hH*⡧#T{ 7y6F$`c[Ez6)mlL{TsPEG(lhlV/'MĢRGge:5\pZxk?4Ox M-Ѝ9VV?~t|D %R TpRю;_!;PC|p1cAough+EqM !7"hCxSFsr\fimS$YS%䘋*@[/I 97h|APd~nu=6آ %cwvgG$'š6^/.1viğ* 6;& u_mli xakrIm"-v̇#S )i {gwZU?vѭpׂ-9FrZ# XHf]f/qvQy@W9omeE*m>uy~K]Za鹈n_'taq%"׮e. unFƒ3$z0sR"&\" |u:I(wϻ%]FDlA#*9|& Vpn0|fnZe1LS$ ؽ"6ftܡ';sGP&ؑ4]8o!&5zߙ_PN.p\#%ߑakd]Ŗkr_Fϵѧwsm{e=ćS{滓OAk0U.D G{[eLwUD'АJ3:0@DSSUjv. ]Kxw|K{K|7HM -9!A+ " C,)ѫ@- za&р8y*L* }Lޑt\Ḱk;28+wc?~U]w!#"\ctK#|y?Z٪%~ȥMw+(/ޟ4vpZ&-<@:j7 dxNk+hʟT}RX0H4_++@Df%c: IBb4Y8P| KR}kٿ!t+`Jkb<#7!3KhOxn*KyvR+A8hꝗ* MU539i##w'DR+Z@ZA̡*=@'OUqpq!\{Mh"$:cqbk2H茑ܛ )?6$`rUhm%C.)Z_.:O|NF@Hm]M"$D1 j˺#\#]ڣEHHZL1=)qTp#9C̱ۗ[$}x_*4́ʗV8}}ֲ~*YƐ~‰ȇJ edZHKT( !!}~*w!;yVl)Y=kop_U;CȏsxB Lr!tSMy y»Dkl؆ oj*wyD|6i}j_.ew.*@Wlc$O D:$fM v 2L mD$=· e82[65\1F]I?ٌ:&J(b"# ɱ/jj6#2S~&:)%2\Zr["=33\/bDj\-'«b AUyǸhVvXlM#V`wFANj}fb'-&Q_ XӁ*@aQTL2~/12Z0+U .%e4K!aޏ V>8CYC1*,1KX%U:-6&FkV ^;i\@DU1Ydih{բ;ͳ42:'wN~| ̾}H:nX!gЋ׮GzFU(S])ɱ]=1VM8P S/c[¨[ EBQ:ܫGMv[x9,&ltMVuDsm<0A]O85m3jUm&ul4t+A]dC#3ڇC$ 8ՋLΒ=B4;>NlVO۰S]>9K6"F^oư)>4\O]v>=>FKu{6u,a,@ANYYv-8Ԗ|p;ZBm<5 srX}Li ޫI6E -7?*Nx|*_d[8ij3)i]Oia .ҍ\,C:M-:.8PZ_<}^-l|Sr?u9|[j:t$NKsLx@ fNCAOHH|W{Oq+ z5D71PrjYuǙ1H)CT`K2[9# Zv=U]}>ҥBʺ<0ΕN66>Ŭti{hDpn5Ci'zKtچj&p-C QLR (Zu4|,`ELr6)$נ͝4 #mnip*8Iy%~UcA0󅻾1jyydl-PcAx oa!!4%;-t F,z ,xѻxP32vkb /Xi` iXCir2mJΦNJ`<ɕ8Wh.B:zCe%0zܩ슊ҳ{;&m<f'&%3g zF!6iW8\sO ?xnBlX0\ Ƽ!;^>Ց3p8b)Ǿ8APźwO:2;snς6Sr!w52NTIҘ]#wotڍg j`aq%_`Lh=mO];3Ϲ8v.?`ў^V E\ "u{; )uZ,K\SKmUߗD8S){({|NQp|/Vn X2,_"HN;ǡ6tPo]T]~_Y?Q,R*nĄ3U; JD k Êոtu%k1vdNwahf3VK@^$~tXc)DX!.iS, ރ6Swgj+Bi*'z8#yQt:66H;g T FZ1̒30apE/i@(*>j坕ܪj,澥!es6Tï=ާrjg;xR,v kksMLDe,E,CD(5z"ME]} oA:=Pg)&1b̈́bW0]@8 uUe+4 [smw>iǡZ)ߞjLpARpD3Qt1MS5w^x<aXT SK>E(l5 [5 IֻQxQ\aco"9k ΘMy̦_baJ]k~_ ynLX>F|!L8U]cH*;D5qN<} g7a[/l'} \ tI#Kq0]bW9 _io q4Q8 ¬qS1Cr).Z|Bu{GL(p@g-^ƗY#R=zĭUIǔm05+JhyV42M(:H!<RռEa[pa!PW׻K[ú8`,7z{Z8 pX޶^p߁u;VȪMg.z67E!h]_GtԽ1VU NS#V*GvAD13 y ='ݠ4,tIahVBLgXu 󀠘ü׮b-ϰ5W&P$9TM NZ)#qv؏DQD0@ E$$u}ص\0YvM:%BXL0r\!.~&*æ1ʄF!rc U/"G 9" +a K Fu pO5M.uO`Hy5% 3;¿q }\'ycG͗a k68rN=1dRgdvCYjik}N B2>I \*S͛9o\ڮG*FZzZШ*&U*5or0WW96bi07[>j1ğwk1 wv!u?rv\o"b^qَ6!-J9ƖS^u|@R.4(xk5+U/u0AZV 0[V@!PpfϕÁM/C?;uHfllmVm4=e [DzL> 7 3ˈ(œîSd\+D`S屛 F?Ş*>sEhQʱzO;fU\kCNXj"^]57`HpU1\t˚Vfxu2xfcF?}n~މM @ס;v^Y,^rUp$Dўvk<%"P3wUh7$e تУvA[C{ķĭ~MωLQ)\@ h>׃kG%/c6"@\`b{a[VlpB.AYGnLY>dd; + L˷*':lw JM6Ś$B]zq3-IۭW~7-ӺdNi^ ͇F5PlھkNYv0툗ᔂ$޸S@SuhG,<Ḛ }bhbK=jM9=un0V \17 (`uPH8ʎ 9ȷQJB63L:"Kx(JET. S(f v"k5$78:S~?U8Q_XDKFn"¿ "6_O6*w*;n<%]U?OE4*}*NDNhZN1q=|ƿ#|3.Bˏ>` (!||.dhli3UT(\0- koMzP|L]1c4DgC00s!B;p@>2ԡF&f:!U 7,菦 z\1o8xF@xI={7uVptv(`jw ) `_Ĉ/"["'Ğ ,DjϏH+̧%?nds)U \fmW~(֥gpN;0~W'00./@Wa,cQHݕcǪEhm?X\B)=xX ~`9|{+wX^XaH<Sld@ٛ;v֯t?P h;{"4|{z~mU#|@8LEH!Vٌ %i,d v0̈8|<32/ΔA{|v/ரG)zlDϩV"0y绬f%,ay$c~i/K 0}Q0u];l(iںs <[fj._z__!!ML$C` =X) K۠[ `##@X{# WϘG&X$R؛z؆ⵇLSm !BdDz\#lć0x 4鶘/)z+!]:zppm-r"!x%r{C9Q(@l,Z<Pl{, & np 8݂u88sNt7W%GVc:)d M;ȅϟ.m_ªtk℘.fn*RczroZT4#E"hdG |ťY3=d3/!ˁ?Ei"pA vSp2dnCG.W9g-Vͮ{w߽{w -,ӣ0=BQ8taN' 50н_}!_ɍKa5 2 VO6:|l{Ճ"3`'gq%CN1@Cnt:m=RJ]/EP|!*/$gÝ_!(-vuF'H_Bm.'hEuJҀUΕD]0X֖LI$IM_\50~xg4 X[ۀey-R#hOŸߏ8,YY%uZvHx&k{$r{TƄySIq(Գz}+>n#}0/|N`!ԮYֱ1{y2^+o[* ^b{T)ߕ?N+Fr,aCZbJ*0kCt8UDp Q.kO~CWFHl>tx%:" 'C[ 7t+Ca_ڙ)egx#"g lHs-blU L2Np3C^ ]Q"ʂgh@-jhP M<~% I{5&MG WJ͛KH؟=|#>ڻ[0'mXߪZ~۳yiG\Z]?ڵL7KoL8ks~aVV~-R[FV*u,[P"_YXc?E 3[##fG*xU0-tsSO:-EIdjijL"^yHktd(R}-Ax.p _=>":׽<"#Y-23@z/M Y>O =LK%>9LrFz3 #Ŷֺ,܌dMx!]BM@0ք h])403_iI/F q2}H sMiqD]TS7*ar=lyO0"?aBJ ɞO= w>X0ۯbNzCanDٱㅛ3ܨ<Ǐ~ua>U3L2*3g <)Y"3KK&R17 8ɚ [^&jF0 S-ItvRzs (9ج_ueljb]Oఠ7##|*s!-Tԗʧk~'3J]$O\hUȂS_̷^l>]{4X X3ԂYɝӯl3XeV[/ $+_Pd,^30"nBշKFؤ~Ƃe]q}M߃KR$5_X<8ߧ|KiGg{)/s)ݖb_yЎ$ϛ2p8lٔ6ia cdFɩ&kLB_c@cpЯs<}5Nt2)i[79cg˗U-pۚ J/:?x4BpKes*q ¹jIG;'C1%^R)d=4k ]/| ě?ԣ5B,zNRI~־w\tP'Ihr,v; g[ S7jE/ы'XP'*094X0:g!;~hBO:7 er/S^Gϔ l` UTŏ0ˈM`.m;( LѦo}zj9Ppe`ƽ)hUIzˆz0cHysHTz %gVV TF9 KQ5ۄu3cgp;+Փ̇9!Bs[9&r'a٠&2fU|2-8| 4gmD ֊mlTP2oPN0q$>Ti336o09wfo‹ zae]\H6k$_VɊ[Ϛ cXy C稿O$P.9v)M1:ΪX㾧[ %:12:fܫ`]lo5=D9٥H.sZ48CrƨDL ~& y/GK9u+iL1*٥RXwןc цrI ҹxhGx/dr+ǘ<`OXC}v#C > $2a;[?DKo)1Gd14?QgX~SٚmIMеDt "<a NQX}sa F9|kCBGmk JȘ E?4N#' |L;w(~UX0@F_Z\},(ћ =/A$;5eOg}TR؈)K)e\ (OY[_3jk z;&,ؘiV:7|{aZ@Z颂d9 D9_#y,5VJdRhUx9/N\~iiC,5ITE4Jrk(B$/&+˳E~-B3?c4@c(a ؙh*>2ؾz^:uͦ1O|ԦHIxH7T\D{TJlX`g+lEya,N{ GUtuR aٿԼT숖Y[ۼwMeӟ ?'! Ϡ (J`@. K1qЦ: =UșZ%yHIϝϡd%ȫTBbȜW9n{vܵBlժp+e3N b]++mIc-=.WE'ZB/&_3m d]<6h¼4TEHh% DAM\"57<yKImib$^Le>'qݘ'샋-KOY]ﰠh~_7[>Ze92)8¶E[tDzvgkRNTDdެ"}\u>_$Lk}$?!W>A"huS#hѤmVkpI V<$gڌ_Oe*oYJ;Vfq#۰zge_w}g Q10#GO!].ËV?|z 6,,g;JSaHY/EԚz? m1!!gth) tcST\a7߂@ \靶+Q# y n!=ik*{һ~4Wֱfl@ 嬕h5NET3}>sKWOWꍩOˆ\%dg0.]|n^O6̼Uv& @[UoF;8є%E2w,ؗŕwc!F&`F;]sn~6mNL/8!h}|}\j(lv8z_vK{`OwqUG 4⧧ \No1G[H`I*d*r³9͎Aҷ@;$d)|޻U)Ԡ'l`8vgՕ#Ĝ6u kVGɹ MF|e+:)?ރGڨY2a F<  э"\3(lZV ~p-F*eT.e+R2 6.v6g9AI}*цǸpɫ:g]HpB!-hLOMQ]ZfmEVp,`/~[@!VDGq')myVÚu5 hK蝛3Yq%#(!iXn2@!d]e8k,TVD0 }eZEr~="οxD{'F9`d3Ȑ@+@ D_2_ WŬQ1ӥx;)hi6ܳJq9&`X"tT9xQ Z^/x"V)mfhCKi$BP|@mPx%9JSH=0:E3+wyžł-?\ЎԤ Pц}Jq;꽐=h~+S=t04`濗\I,2iȴ=ۼ!; d\#l4(~y}Y@vj:E[֭oUPTi~@!\_Z@5=N]n$1 rll6Q|Wq_:WmF{eODH8V':0`G #}mR8͚Nx9b@*Q'R587v th<^ѳi>eGy[||>9WQŀ/'4S]>MZw탸 Zᙆmdo%pw"J2O5Ti]4xMV?yK*E9YiTsD>m(%'y~RMfxIT>OCU֕w+e ilpM'FTN6yΊ*k#bjzYX97}>)9H Kx-p$mR2F4S}r\ĽlEf3Fk0 ZF[t&@97cֽJ嬱EAZOj  JP=:) '!^1%l7nDo_{֚p8ޢo{%Qp5,5/J.Q:ݟyP?OYOW8eƻS 2b$rvJ+ IqãjC _ǣuV S>%eKp(rFh[wAr@hB߬ zb}O (;nHm")ʀm?*㗫 й(#7 1=Hhэ_x|LV F@;; B7ŨfZ[gLHiLMx܆StX*D%v4يg^A2=0Ɯbg=npX]ſ2dec\_| 1z<+8f?ۗ~2];wBS0}6].gP1mN6 -rJKDX Oiކxt? >>|m SQڧoqZTWn+ߧ;"P2n GEL jIѥ;2q>f'"X#< d Fr03 *tpt-KSF^WOYcjQ)mpc^0JpP߽=!"`O4))6=e SzcA@7t >,i+8G5όj d:e8FGRX?u~ ^ޏ>]n'")D(m8}/0! r%ŰT,VxJ0sK|:vm@7%9|`G| ޙAoy1c3{K Tbf9k7G{lx"=(ZEpšJCUTN𓃋amtY^M+Fih>5T\g"=ݿrVp/k }?um3 L*m(+>s9MO~OHGDn %\@fG_R7*g8 \9H2UڮQ rt+CG[?jY6Ov#\dRѶ|W GR 2BOWFʗK^仢2nty@!]ѩbq (k(t ,RpTh"B{ϋx(n:CKi|ZUB{')x ̋n7/K_ovx+ޘL:uqh*7JH*dxt\%KS,suo+2 vŮ09hx@:dbtu G'ZlSўػOOB3ufP%$yΦ\ɝ3O\=wסd34PX))^ͼ3o/7޷UrQTAG@1V?ghVT>њ+\"Ǵ?%є]Gv5!X9NS 8xeUB8cxaa9%dzA:p^B2rPNWU}h,8Tk@)4@Ѐ$B Ipk?YMDAAW2́m|PБy7]OHvOgt&wVT FߌKӶӴ0 ѪhYAOŬ\P8@]2QJl4chPX CE<{Q) Oks,`|ik J 'vi 0 Tl(6FNm3gu0pk},$=nЖ\i[VI}usMm|DSxҽXL9#nߍ$/5ɄWh@_oh#~Tz/~j(ϟu_y-zߔ!2˕X?+цv  9ë`Bd^#=4̓~. ~w2'O1c9ⱭDe%8Kn󑁯%Cpƛ*=w:||Fzi*x.ޠ0YpMowO`WVA bWF3Y" 3>[Y((v7 bH(r1.r'8ٮGju:S|g={rys.˯3VfSyto?zk^+UgX߼c:FfrJBB1ݨ$U;{5QRB6euC0v#5\IpX =nKW-,Roثlmms-1.1.3/data/lmms.ico000066400000000000000000004150261247673406200150640ustar00rootroot00000000000000 (f`` @@ (B600 %^   h( @/6Z 6S6O 2I 3L 7O?V(N i-Q=P4N3J 2K 3O:T/Y.W=S1H *@(; &8(&8%);.C3OCZ>'MAY3L,@(:%8'&8'(<,B2KAXEEAX3L-B&8 / 3( F% P& M+ ="3))<0G 7S5Z *@ UC[3P.C'9!0/) B% O% O* A!1-(:,E7K@]$P$]@]7K,E(:!1 -+ > Yh r oc" O, 9#5$*>1H #5$, 8" O | rb# M, 8%7#*@1F 8R7e7T8R1F *@%7#, 7$ K 6G xkY' D!1 .':-D6N>Z$WEAW1J,A&8. 3) B 4E  z n]% H . 1&9,B4L:["0"0;]4J,B&8 . 2+ A _ c z!:W  wj W' A"1,(;-D 6L=c4?=c7L,C (;!1,+ > r):kmm pE7m#  } rb# M- 7%6#*?1I 8Q6bU4^ 7P/G )<#3(+ <_#W] V^{1x&o%7 ~ uf R* ;#5')>0E 5P:_%%:Y5P0E )>#4'+ :X^oll"n*t+]M@3Vy z n]% H / 2&9-B5K8Y"C5b9S1F *@$7#, 7$ L Gna WSN\A|5y,y$_ | qa# L- 6%7",A3I 7S6M$ 6M7S3I ,A$6"- 5& HKo rml!m&m,n1v.peWJ<0?Y wj X( B"2,(;-C 6N:`&5#09Z4L,B&8 . 2+ A 6Rb YTOLH[ME~<{2x){!Ko z m\& F 0 0'8-B1M?S#2TC?]0M-A'8 0 1+ @ 8Qqml m%m+n/m/m0v.pomaTF9z))9  ~ uf! R* <#4'*>0E 6O8[  -:W5M,C (:!1,+ = s%8^ ZUPLIHG[MJIC}9z0x'w6O  wi V( @!2+(<.E 6Q#4'+ ;YT^ VRMJHGHG[MJIJH@}7y.x%l 0 ~ te! Q+ :$5&*?1H 6\#L:S/H&9!- 8 U[pll"m'm-m/m.l.l.k-k.v/pooooohZL?3Qq z m\' F"2.+?3MC] !2:Y0H (</4& HDgb XSNKHGHHHG[MJJJIJF>|5y+z#[  | p_% J 0 2)<2L 2\5O)=$55 Gh rml!m'm,n/m/l.l.k-j,j,j-u.poooonondVI;.:Q wg% N#4-.E;WATCK 4P+@(<. 3Ma YUPLIGHHHHHG[MJJJJJJID~;{2x){!Fh yk" S"23,B9gR a3Komll$m*n/m/l.l.k-k-j,i,i+i,u.poooooonolaSE8v($1  zc, >)>9TJFUVi0A"2\ [ UQMIHGHHHHHHG[MJJJJJJIJIB}8z/w'u1I  }i) E(;  .fnml$m)m.m/m.l.k.k-j,i,i+h+h*g+v.pooooooooooj]OA5cl' E':4P71  Q|_ WRNJGGHHHHHHHHG[LJJJJJJJJIJG?|6y-y$i) q# N%6# Ux qml!m'n-m/m.l.l.k-j-j,i,h+h*g*f)f*v.pooooooooooongYL>4F\  l% G%82M82BZa XSOKHGHHHHHHHHHHG[MJJJJJJJJJJJJF={4y*{#Ty n! O#5$9Tiel$m,n/m/l.l.k-j,j,i,i+h+g*g*f)e(d)u.pooooooooooonomeKn|"% l% G%82M82,b ^SKIGHHHHHHHHHHHHG[MJJJJJJJJJJJJJID}9ip4Q n! O#5$7Qll%dem0l.k-k-j,i,i+h*g*g*f)e)d(b(a(u.pooooooooooooonx2}7M0# l% G%82M82)` STUHGHHHHHHHHHHHHG[MJJJJJJJJJJJJILq)n$>z,2M n! O#5$7Plk$m.j+bf k.i,i+h+h*g*f)f(e(c(b'`'^(u.poooooooooons@w/mfJ0# l% G%82M82)` TLHUSGHHHHHHHHHHHG[MJJJJJJJJJJILx5jCK>z,2M n! O#5$7Pkj#l-k-k.f#ag&h+g*f)f)e(d(b'a&_&^&\&u.poooooooonrTr(_pofJ0# l% G%82M82)` ULHHJWNGHHHHHHHHHG[LJJJJJJJJIKAjy7LIJ>z,2M n! O#5$6Pki#j,j,i+h+h,caf(e)c(b'a'`&^&]%[$Y%u.pooooooopes*KsnoofJ0# l% G%82M82(b UMIIIGNWJGHHHHHHHG[LJJJJJJJJIm"r*LIJJJ>z,2M n! O#5$6Oji"i+i+h+g*g)f)e(``a(_'^&]%\%Z$Y$V%u.poooooooz4}9rnoooofJ0# l% G%82M82(b UNJJIIIGSTHGHHHHHG[LJJJJJILs+m!HJJJJJJ>z,2M n! O#5$6Ojh!h*h*g*f)f)e(c'b'`#^^[&Z%Y$X#V#T$t.pooonsDu-jooooooofJ0# l% G%82M82'b UNJJJJIHHHUQFHHHHG[LJJJILz8j@KIJJJJJJ>z,2M n! O#5$6Nig!g)f)f)e(d(b'a'_&]%\&[\X V#U#T"Q#t.ponqXq'\qnooooooofJ0# l% G%82M82'b VOKKKJIJIIHKWMGHHG[LJJJDjw3LIJJJJJJJJ>z,2M n! O#5$5Mif f(e)d(c'a'`&^&]%[%Y$X#V$YZR!Q!O"t.poht,GsnooooooooofJ0# l% G%82M82'b VOLLKJKJJIIIGOVIGG[LJJn$q(LIJJJJJJJJJJ>z,2M n! O#5$5Mhed'c(b'`'_&]%\%Z$Y$W#U#T"R"R XUK"t.s|7{6qoooooooooooofJ0# l% G%82M82&b WPL L KLKKJJJIHIGSTG[Ot-l GJJJJJJJJJJJJJ>z,2M n! O#5$4Mgca'`'_&^&\%[%Y$X#V#U"S"Q!P!N M NVhv/goooooooooooooofJ0# l% G%82M82&c WPM L ML KKKKJIJIHHIU]m }>KIJJJJJJJJJJJJJ>z,2M n! O#5$4Lfa_&]%\%[%Z$X$W#U#T"R!P!O M LJKdlv-epooooooooooooofJ0# l% G%82M82%c XQM N M L LLLKJKJIJHJVY `~=KIJJJJJJJJJJJJJ>z,2M n! O#5$3Ld_\$[%Y$X#W#V#T"S"Q!P!N LKJXFxx2s}9z4ooooooooooooofJ0# l% G%82M82%c XQN NM M M M L KLKJKIUUHVF MjFJJJJJJJJJJJJJ>z,2M n! O#5$3Kc]Z$X$W#U#T"S!R!P!O M LIP{5ootx2poju-DsnooooooooofJ0# l% G%82M82%c XRO!N N NN M L M L KK RWLJIUGIHRr(KIJJJJJJJJJJ>z,2M n! O#5$2Kb[W#V#T"S"Q!P!O NLJLm$epnotx2ponq[q'XqnooooooofJ0# l% G%82M82%c YSO!O!O!O N M N ML PXPKKKJUI IHHIYy4LIJJJJJJJJ>z,2M n! O#5$2J`YU"T"R"P!O M LJK`Urnoootx2pooonsGt,hooooooofJ0# l% G%82M82$e YSP!P!P!O!N!O N NXTL!LLLKJVI IIIIHLb?KIJJJJJJ>z,2M n! O#5$1J_XR!Q!O!N L KJUBsnoooootx2pooooooq{6|7qooooofJ0# l% G%82M82#d ZTQ!Q!P!O!P O!VWN M M M M L KKVJ JJJIIIGOk HJJJJJJ>z,2M n! O#5$1J]UP O M KIOx1nooooooootx2poooooooogt+HsnoofJ0# l% G%82M82#d ZTQ"Q!P P"UYQO!O N NN M L ML WJKKJJJIHIHSs*LIJJJ>z,2M n! O#5$0I\TMLJLi!bpnooooooootx2poooooooonrWr']qofJ0# k& E'94N81#e ZVR"Q"SZTP!P P!O!O!O NM N M L WK!LKKKJIJIHHJ[{6LIJ>z,2M n! O#5$0I[RKK]Psnooooooooootx2poooooooooonsCv.kfJ0#d+ @)=9RGC"e [US!ZXQ#R!Q!Q P!P!P!O N!O NM M WL!L LLKJKJIIIIHLdBK>z,2M n! O#5$/IZPT>rnooooooooooootx2pooooooooooooooy4{5M0#$ R"21-C5WEj"f [ZZS!R"R"R"R"Q!Q!Q!P!O!P!O N!N M WM!M M L KLKJJJJIHIGOm"=z,2M n! O#5$.I[r$koooooooooooooootx2pooooooooooonomcMn{ #"23(>2J C]"g ^ WT"S"S!S"S"R"R"R"Q!P Q!P!O!O!O!N!XM!N M L ML KKKKJIJIHIHWq3N n! O#5$5E5Ynoooooooooooooootx2pooooooooooonfXJ=1~/F0G >[3j _[XVT"S!S"S"S"R"Q!R"Q!P P!P!P!O!WN!NM N M L LL LKJKJIJIHKT): n! O#5$5ErXnoooooooooooooootx2pooooooooooi[N@3%`nDc =^%?` Jqe^ZXU!T"T!S"R"S"R"Q"Q!Q!Q P!O!YN"N!O NM M M M L KLKJKJJIK\ *: n! O#5$;T9q#Dsnoooooooooooootx2poooooonol_RD6)r". !)M$Z b]YWU!S"T!S"S"R"R"R"Q!Q P!XO"P!O N N NN M L M L KLKKI QXV'C n! O#5$;S=ZZr'Yqnoooooooooootx2poooonomcUH:,}8L I*J"8,Bd `\YWT"S"S"S"S"R"Q!R"Q"XP"P!O!O!O!O N M N M L ML K OXOLU(B n! O#5$;S=XnsFu,ioooooooooootx2poooonfYK>0#Niv8O  R h?_f_[XV T"T!S"R"S"R"Q"YQ"P P!P!P!O!N!O NM N M MWSK KMU(B n! O#5$;S=Xnooq{6|7qoooooooootx2poooi\OA4&d- g!:aR} d^ZXU!T"T!S"R"R"YQ#Q!Q!Q!P!O!P!O N!O M VWM L L KNV(B n! O#5$;S=Xnoooogt+Isnooooootx2pol`RE7*u(5 )4?#!0_ a\YWU!S"T"R"YR#R"R"Q!P Q!P!O O"TYPN N M L M OV(B n! O#5$;S=XnoooonrWr']qnooootx2odVI;. =R S3H$L4Mf _\YVT!S"YR#S"R"Q!R"Q!P!RYSO!O!O NM N M OV(B n! O#5$:R=XnoooooonsBv.kooootv.\L?1$Tp ;X B| Gkg^[XV ZS#S"R"S"R"R!YWP!P P!P!O N!O NM PW'C n! O#5$:R=Xnooooooooooy3~;rojar#C5'iu-#0S X c^Z\U"T"T!R#XYR!Q"Q!Q!Q!P!O!P!O N!N PW(C n! O#5$:R=Xnooooooooonpds)EVIp,x-; 15N/)<c `` YWW[US"S!R"R"R"Q!P Q!P!O!O!O!QX(C n! O#5$:R=Xnooooooooooonp>n~*tCY  e+L_;[i__ [T"T"T!S"S"S"R"Q!R"Q!P Q!P!O!RX(C n! O#5$:Q=XnoooooooooooolS;d #6,,F.U ^~_ZU!U"T#T"T!S"R"S"R"Q"R!Q!Q P!RY(C n! O#5$:Q=XnoooooooooooolUrQg  X 0/,F6['Tm`ZV!U#U#U"T#S"T!S"S"R"R"R"Q!Q SY)C n! O#5$9Q=XnoooooooooonsFp 5Yz wZ 0/,F5[Sya ^ W V#V#U#T#U#T"T"S!S"S"R"Q!R"SY)C n! O#5$9P=Xnoooooooonq[q'WV8Yz wZ 0/,F5[Sxa[ZZV#U#V#U#T#T#T"T!S"R"S"R"TZ)C n! O#5$9P=Xnooooooooju-DslS9Yz wZ 0/,F5[Sxa[X"X"[ZV$U"U#U#U"T#S"T!S"R"UZ)C n! O#5$9P=Xnooooonr}9z4ooolS9Yz wZ 0/,F5[Txa\X"W#W$Y[XV#V"U#T#U"T"S"T"U[)C n! O#5$9P=XnooonsKs*epooolS9Yz wZ 0/,F5[Txb\Y"Y$X$W#W%Z[W"U#V#U#T#U#T"U[)C n! O#5$9P=Xnonp_r(TrnoooolS9Yz wZ 0/,F5[Txb\Z#Y#X$X$X$W$W$[ZV#U"V#U#T#V[*C n! O#5$9O=Xnolw/@snoooooolS9Yz wZ 0/,F5[Txb^Z#Y%Y$Y#Y$X$W$W$X![YU$V"U#W\)D n! O#5$8O=Wr=x1nooooooooolS9Yz wZ 0/,F5[Tyc^[#Z%Z$Z$Y$X#Y$X$W#W$Y\WV#X\)D n! O#5$8O??r(bpnooooooooolS9Yz wZ 0/,F5[Tyc_[#[%[%Z%Y%Z$Y$X$Y$X$X#W%Z[X])D n! O#5$6I n?rnooooooooooolS9Yz wZ 0/,F5[Tyc_\#\$[%Z%[%Z%Y%Z$Y#Y$X$X$W$W#\`*D n! O#5$1@AWnoooooooooooolS9Yz wZ 0/,F5[Tyc_]$\%[%\$[%Z%[%Z$Z%Y$Y#Y$X$W$Y!^+6 n! O#5%5H nCqnooooooooooolS9Yz wZ 0/,F5[Tyc`]$\&]&\%[$\%[%[%Z%Z$Z$Y$X#X$[a *? n! O#5$8O?;s*epnooooooooolS9Yz wZ 0/,F5[Tye`^$^&]&\%]&\%\$[%[%[%Z%Y%Z"\[^*D n! O#5$9P=Wq}:z3pooooooooolS9Yz wZ 0/,F5[Txda^$^&]&^&]&]%\%\%\$[%[%\\Y%[ _*D n! O#5$9P=Xnoju-CsnoooooolS9Yz wZ 0/,F5[Uyda_%^&_%^&^&]&]&]%\'\][#Z%Z%[!`*D n! O#5$9P=Xnonq[r'XqnoooolS9Yz wZ 0/,F5[Uxea_%`&_&_&^%^%^&] ]]\&[$[%[%[!`*D n! O#5$:Q=XnooonsGt,hoooolS9Yz wZ 0/,F5[Uyeba%`'`'_'_'_$^]^']%\%]&\%\%\!`*D n! O#5$:R=Xnooooooq{6|7qoolS9Yz wZ 0/+E-T@Uyeba%a'`&`'_^_'_%^&]&^&]&]%\%]!a+D n! O#5$:R=Xnooooooooht+HslS9Yz x^ 04-F8TAUyfca&a(__`$_'`&_'^&_%^&^&]&]&^"a+D n! O#5$;S=XnoooooooonqXq'ZU8Yz {f+ C&9#-E6J<`$\ ?7[Vzfcb"_aa'`&a'`'_'`'_&_&^%^&^&^"a+D n! O#5$;S=XnoooooooooonsAr#6Yz s[) @"4((</F 7P:h U&T9]7L.E " +Vzfb`c)b'a(b'a&`'a'`'`'_'_&_%^&^"b+D n! O#5$;S=XnoooooooooooomTqQi  tb# M, 7$5#*@1G :T2d6] 6P/E )<#4( IUpe dd&c(b(c(b'a'b'a&a'`'`'`&_'^&_"b+E n! O#5$ r%9fe fe abe*d(e(d'd(c(c(c(b'a(b'a&`'a#c+E n! O#5$W=Xnooooiu,Esnoooooosy2poneWJV 4P/D ';!1++ =m#4djgg"h(g+h+h+bg+f*g*g*g)g*f)e)e&`be*d)d(d'd(c(b$e,E n! O#5$>WW=XnsJt*fpoooooooooosx2pooonoj^PC7Su z n]% H. 2&8-C4J9Y!?!(L;Y3J*@%6!- 5' FEi nii h&h*h,i+i+i+h+h+bh,h+h*g)g*f*g*g*f*g)f(f*bae'e)e(d$f,Ek& K&8">XW2)*OA[3M+?%7 . 4( D A[pjj!j'k,j-k-k-k-k-j-j,i-j,j+i,j,i,bi-i+i*i+h+g+h+h*h*h*g)g*g(g$fghnHhڈ64S9T"l-;HVcmonooooooosx2qooooooooooooooiSo{,|$:O wj W( A"2 +(;-C 5N=[ B l /Djhc i"l+l.k.l.k.j-k,k-k-k-j-i-j,j,j,j,ci-h+i,i+h*i+h+g+h+h+g*h%g ghlZ 7M/o/.? z"1>LZgnooooooosx2qooooooooooooopz6}8fW}23x+%5  ~ td! R+ ;#4&)>1H 5N:Q$@,6\ 8N/F (<"2), <c+bjgk$l,ecl.l.l.k.l-k.j-k,k-j-k-j-i-j,j,cj-i,h,i+i,i+h*h+h*g(g"ghjg &5 -4J ZC[(4BO]joooooosy2qoooooooooonsFu,ioolBFE9f# | p`# K- 5%6!+@2J9V5@#.W=S0H +>$5$, 8" N S~okigl.l/m/l-cel/k-l.l.k.k-k-k,k-j-j-j,j-cj-i,j,i,h,i,i+h)g#ghio9PW2R% Yy,8FSalonoosx2qoooooooonqZq'ZqnoooKY]PB6No z m[& F 00'9.A2N?X2bDAX2K,A&8. 3* B ?` pkk"l)j&h"m.l/m/l.m/j(bh%l/k-l.l.k.j-k,k-k-k-k-cj.j,j+i+i,i+h&g hioKl  y,Blll l&m-n0k(h"n/m.l/m/m/l.m0g bk+l.l.k.l-k.j-k,k-k-ck.i-j,j+i'h"iil] y+.,0/? z#2?MZhosy2qooooonq|8z5pooooooooK]nomdVI;u* -  } sd! P+ :#5%*?3H 7R8R.H )<#3(, <^%anl l&m,n/o0n0k(h"n/m0n/m.l/m/m/m/m0edl.l.l.k.k-k.j-k-ck.k-i*h$hijj )9 34O[D\)5CP^ox2qooonsJs*fpoooooooooK]oonol`SE9a"  { p_% J/ 4&7"+@*?%5$- 7$ K Oxqlm$m*n/o1o1o0o/k(h"n0n0n/m/m/m.l/m/m/m/l,cfl/k-l.l.k.k.ck,i&i ijo02G vk_ |(<jmm!n'o.p1p2p1p0p1o1o1n1k)i#n0o/n0m0n0n/n0n/m.l/m/m/l.m0gbk+k*j$ejl` #9H1/@ |&qCy,s'hoooooooooooooooL\ooooooonomcVH :1b\>Pr0EQ_lonoooooooooooM[ooooooooonok`RE9\ Ksrnn&p,q1q3q2q1q2p2p2p2o1p1p1o0l(j$n1o0o1o0o/n0n0n0n0n0m/m/m/l-k(k"kjm>Qf1S  U Z|-:HUcmonoooooooooM[oooooooooooooi\OB1:I5Dpnn$o*q0r3q2r3q2p3q2q1q2q2p2p2p2p1l(j$o1o1n1o0o0o0o/n0m0n/n0m/m)k$kkpSw OjJm#W%o0>KYfnoooooooooM[oooooooooooooooiu)v(Apohfr0r4r3q2r3r3q3r3q3p2q2q1q2q2p2o1l)j$p0p1o1o1o1o1o0n0o0n/l,l%k kmc ( ~D32D }&4AO\iooooooooMZoooooooooooonsFt,fdXkp(q.r1ej!s5r4q3r2r3r3q3q3q3p2q1q2p2q2l(j%p2p1p0p1o1n1o1o1m-m(l"klm1DB*O/aIc+7ER`lonooooNZoooooooooonq[q'Yqnoom!r3s4r3s5o+dn*s5r3q3r2r3r3r3q2q3q2q1q2m(k%p2o2p1p1o0p1o/m*l$llrC`o/P ,@ _.;IVdnonooNZooooooooooju-Dsnooorn$s5s4s4s4r3t5k#eq1r4r3q2r3r3r3r3q2p2q2l(k%q2p2p2p2o0n+m%llpW} (> _;!,r!1?LZgoooNYooooooonr}9z4ooooooorn$s5s4s4s4s4s4s4s4ggs4r4r3r2r3r3q3r3q3l)k%q2p2q1o.m'm"lmg!. #'L=7K '5BP]joNYooooonsKs*epoooooooro%s5s4s4s4s4s4s4s4s4q1ek#t5r4q3r2r3r3r3m)k&q2p/n)m#mmo5KL)L:kMj,8FSaMYnoonp_r'Trnooooooooro%s5s4s4s4s4s4s4s4s4r3s5n*do,s5r3q3r2r2m)l%p,n&nmsHg y7Q Sd/[k>x1noooooooooooooro%s5s4s4s4s4s4s4s4s4s4s4s4s4s4s4fhr1o*kjnj%5 ,4?$Hg'U "m1>LYgnoooro&s5s4s4r4r3r/p)o#noc%MG//A |%4BO]joorp's5r3s4r1q+o$non.A>*Q]F`+7ESalrp's5r2q,o&nnsB^k/P ,@ \/;IVhp&q/p'n!nrV{ 4PPt l)q!2?Omp$nof+ !)O:4H ~'7lop3HI*LhKhtGf t9N  R&e!#nP!#_?_???_???/????(` 4 A4R2J /E/F5K1P  68(S#[*X8L0G /E/H 5O*H2)O*X N7S4K*="3*- ;. 7$5#,B8R8^/@8,?5T0F ':!02- < 01&9/G 8Q)D &&h$F-M9S0F )<'9* lBa Lg"| t`% D"2)+?3N=W> -F 6Q-B(;* < 1Ki:X  x mV* :%6 -C6P,L 6:[3I*>#5(" J>[ fn~1}4Nm | pY* =$6"-C5P7`)I C8T0G (9#3/eKuX^z-i(< yi O. 2(;0G 6TI/F&F,K3M+@%7"# D ,epm#n*HTCx,%4  yj Q, 5&9/D 5R0O+> $6+6X 1F)>!1+S 1L^ VNYB|4}(Z vc$ G!1 +)=2H6P 4-Q 5Q.B (< 03 ~)Nvqm"m)n.n/QmaO>^"#1  ve# J 0 .)<2J 7P3[,g/:T3M+?)<"" G(?P \QLGXMF<}0s#Cg y q\( ?#4%+A6N<^ 41S2J (<$5+Y Nt imm'm.m/l.m.Qonk\J7\ } s^' C"4'+A6P-S#P+ @!u6Q/D %7 / 6 %P XSMHHFXLJIE~9z-m:X  { m U+ 8%8/E 5U/O 5O (;  L*>knm%m,m0l.l.j-k,QonoohWE37N  } nW- 8*?7S849X/G!1.] @daUNJHGHFXLJIJIA}6}*g' xf$ L"3+.E(;&8Xsm#m*n.m/l.k-j-i,j+PoonoomcSBj(/B v^!211J GS 4 1LV YPKHGGHHFXLJJIJJG?}3z&Oy&} q$ O':.Ykm!m(n.m/m.k-k-i,i+h+h*Poooooonl`N;g$ o* =-C;Cu(<T XRLHHGHHHHFXLJJJIJJIF<{0r"Mt_"2(6Jomm&m-m0l.l-j-j,i,h*g*g)g)Qoooooooooj[I3CY  z' @+@8AS No_SNIGHHHHHHHFXLJJJJJJIJJC}8z+m&\ 0 * Wihl+m/l.k-j,i,i+g*g*f)d(d'QooooooonnqjE~4t%  z' A+A8AN%d VQHGGHHHHHHHFXLJJJJJJJJJL|;u,z(@d] 0 * Tl"k+f f k.i,i+h+g*f)e)b(a'a'QoooooooosN>cOt)  z' A+A8AN"a PKSLGHHHHHHHFXLJJJJJJIJJs,{9E7>b] 0 * Tk"k-k.g&cg&g)f)e(c'a'_&]%_&Qoooooond?YslOt)  z' A+A8AM"a PIHPPIHGHHHHFXLJJJIIJH~>p'DKH7>b] 0 * Sj!j,i,h,g*dcc"b(`&^&\%Z$[%QoonnqaLNipolOt)  z' A+A8AM!b QJIHKPOIGHHHFXLJJIJL{9w2{9LJIH7>b] 0 * Rh i*h*g*f)d(b&`^\&[%X$V#X$QonosFJgoonolOt)  z' A+A8AL!b RKJIIHJRNFGHFXLJIJDp&}=HJIIJH7>b] 0 * R~hg)f)d(c'`'_&]&["[XU"S"U"Ppm_|6arooooolOt)  z' A+A8AL!b RLKKJIIHMRJHFXLJF{:s,JJIJJJJH7>b] 0 * Q~ge)c(a'_&]&[%Z$X$V$VWSR"TXLRppnooooolOt)  z' A+A8AL b SLLKKJJIIJOOIWLy6w3}b] 0 * Q}eb'`'^&\%Z$X$V#T"R"Q!OPVt+XjooooooooolOt)  z' A+A8AK c TNL LKKJJIIHJN[t+@IJIIJJJJJJH7>b] 0 * O| b_&]%Z$Y$W#T#S!Q!O MKQo)u-WioonoooooolOt)  z' A+A8AKcTNNM MLLKKJJJPW`}?IJIIJJJJJJH7>b] 0 * N{ `[$Y$W#U#S"Q!O!M INn2XmSYKQopnooooolOt)  z' A+A8AJdUO N NMM L LKLPQKTFOh(=LJJJJJJJH7>b] 0 * Mz ]X#V#T"R"P!N K Hb[mogPpm_|8_rooooolOt)  z' A+A8AJcUP O N N MM L QTMJJTIIIQo(JJIJJJJH7>b] 0 * Lz [U"S"P!O LKW?ponogPonotHIgoonolOt)  z' A+A8AIeVQ P P O!O PVRL!L LJTJJIHHZz:HJJIJH7>b] 0 * Jy XQ O!M!ITv:`soooogPooonqbLNhpolOt)  z' A+A8AHeWQ!Q!P!RTTON MML K UJJJIIGLb#{9LJIH7>b] 0 * Iy WMJ Jj(`nonnooogPoooooone@WslOt)  y( ?,A8@HeXS!Q"VUQO!O!N N NM L UK KKJJIIHNf EKH7>b] 0 * Hx TL\NtonoooooogPoooooooosP>cOt) q. 70FENGfXTXTQ"Q!Q!P P!O!O!N M UL L LKKKJIIHTu4E7>b] 0 * Er^}AhqnoooooooogPooooooonnqjE5p# S&9#5N%;Gg [XS"S"R!R"Q!Q!P P!P O N!VM M M LLKJJJIGI\v'?a] 0 *Z~MoonooooooooogPoooooooooiYH2n ! ,/F 7U Hk ^XV!T"S"R!R"R"Q!Q P O!O!VN!NMM L LKKJJIHIU3M] 0 * WvGkooooooooooogPoooooonl_M;{(Ur " 7\. Ny _\XT!T!S"S!R"R"Q!Q!P!WO!O!O NMML LLKJIKW2I] 0 * d(>KWqonooooooogPoonoomcR?-Xx*M,F_$6N} b[VT!S"S!R!R"Q!Q"WP!P O!N N NM M L KKPQW/T] 0 * c'TlX|8jqnoooooogPonoofWD2q +T 0 p *@c^YV T"S"S!R"Q"XQ!P P!O!O N NML OTMLT0S] 0 * c'Sopp=QioonooogPonj[I7w$G`]&P Hn _]XU!T!S"R"XQ"Q!Q!P P P!O!OUTL M LU0T] 0 * c'Soooq\LPmpnongQl`N<)Kg5M*Ir d\XT!S#XR"R"R"Q!Q!P TTPM!NMMU0T] 0 * c'Sooooolb~;bqnogGS@/c6 S/ V-\ `ZVYS"S!R!R"UWQP O!O N N NV0T] 0 * c'SooooonoqDFihS}04p 4E y$F@b]]\U!T!T XUQ"Q!Q!Q!P!P O!OW0T] 0 * c'SoooooonoreD63oAW i);8 Bg e \ZXT!S"S!R"R"Q!Q P P O X0T] 0 * b'Soooooooono`;[y C(B H:` ]V!T#T"S"S"R!R"Q!Q!P Q X0T] 0 * b'Sooooooonoo[{&BV ["2)1P Wu_W U#U"U#T"S"S!R"R"R"Q Y1T] 0 * b'SoooooooqhKB8Id_"2)1P ##V `ZWU#U#U#T"T"S!S!R!R!Z1U] 0 * b'SoooonoqOCh`>Ic_"2)1P  V `Y YZW"U#U"T#T"S"S!S!Z1U ] 0 * b'Soonomg>Uqna=Ic_"2)1P  V `Y"W$X"ZXV"V#U#U#T"T![2U ] 0 * b'SoorcJLlqona=Ic_"2)1P  W `Z"Y#X$W%YYXV#U#U#T"[2U ] 0 * b'Sop@Ijoonona=Ic_"2)1P  W a["Y$Y$X#X$X#YZWU#U"\3U ] 0 * b'Q`~;eqnnooona=Ic_"2)1P  W a\"Z%Z%Z$Y$Y#X$W$ZXV!]3U ] 0 * [9Qoonooooona=Ic_"2)1P  X b\"[%[%Z%Z$Y$Y$X#W%XY_3T] 0 *\Qponoooooona=Ic_"2)1P  X c^#\%[$[$Z%Z%Y$Y$X#X$X#_4I] 0 * Vt:ioonooooona=Ic_"2)1P  X c^#]&]&\%[%[$[%Z%Z$Y#Y `4M] 0 * c)HKMkqnnooona=Ic_"2)1P  X d^#^&]&]&\&\%[$[%[!\[`3V ] 0 * b'Tne=Psoooona=Ic_"2)1P  X d`$^&^%]&]%\&\'\\["Z$a4U ] 0 * b'SoosVAdnonna=Ic_"2)1P  Y e`$_'_&_&^%^!^]!\&\%[$a4V ] 0 * b'SoonqhNMbqna=Ic_"2*0P  Y ea$`'`(_ ^^^&]&]&\&\%b4V ] 0 * c'SooonoogHIta=Icb"3-3O &J*Y!Y fa%a&___%_'_&^%]&]%\%b4V ] 0 * c'Sooooooor^|7S3L6P,m :]6Q.B&8!Y{fbc)b(b(a'a&`&`'_'_&_&d4V ] 0 * c'Soooooooonnb#5#,B7O3] *Y3O6R/F &9!1 0 pX| gd&c'c(c'b'a'a'`&`'`'_&d5V ] 0 * d'SoooooonnolSu&v*&3 zk S, 7%6.C 5S/X6 &6R1G )< / -T 7Lged%e)d(d(c'c'b(b'a&a&a&e5V ] 0 * d'SooooonorWKReP.b'(8  vf" L / 0';0H 6R4h0@5U5O*>';"! I-E[gg#d"ccd(d(d(c'c(b(b'b'a&e5V ] 0 * d'Soooonpm>XjoofEQ<_# } u`& E!2**?4L:[ *Y$;"9X6O.E%7 !14 .[gg"bg*g*e(e%bd$e*d(d'c(c(b(a'g5V ] 0 * d'SooookX|9ipnoohQk]K9@[  ~ pZ( >#4#+A5M1W 1 9"G+F8M-E (;+ 4c Gn mhh&h*cg*f)g*f*f*bbe'e)d(d(c'c'g 5W ] 0 * e'SoprRJWsonooogPpngXGq/6L x k R, 7&7.E 7S3W  0;V8U1I )<%7([ 8V dkh%h)g+h,ch+g)f*g*g)f*e&ccd&d)d(c'g 6W ] 0 * e(Sqb}8_lonnoooogPoooneTAo+"/ | xf" L/ 0(;2I 8V (@.7Z 6N*@$6%, ;0Hbii#h*i+i+h*h,ch,g*g)f*f*g*g)f)e'bce)d(h 7W Y#4 ( e(PPCoonooooooogPooonom`O>Tx  t`% E!2))=3J5S5T $=\$H7N-B&9' = wWlh"i(j,i,i+i,h+i,ch,g+g+h*g*g)f*g*g*f)d!bd&i 7W ) G'9 `|0LnoonooooooogPoooooooj]K6C`  { pY( =$5#+B5N2O 1$<4Y8U/F );$5, pCh kk j'j+j-i,j,j+i,i,i,di+h*h*g+h*h*g)f*f)g*f*e%cj9V /E!0E7J +>OamoooooooogQooooonoonhXF|44E } z l R, 6&8/G 7S&?$F'`/>[3L)=$4*" I=Wgkk&k,j,k,j-j-i-i,j+j,i-ci,i+h*h+g+g+g*g)g*f(f"gjb 7P^0BUfmoonooogPooooooonnomYx-2c  wf" J 0 .(;0G 9T'H$/ Ai 0Z 3M,@$5#$ D !/djfj(l.l.l.k-j,j,k-j-j-i,j-di-i,h,i+i*h+g+g*h%gidA] 4 U%2 ^6HZhoonoogPoooooooor^KOi^::Qu { s_% C"3(*>4L1S3: 7Y4R/C )< 0 3 .Nzmhl+k*h"g!k+l.k-k-k-j,k,k,j-j.dj-i,i+h,i+i*g'g!jkCa7 [&6 w&:L^loongQooooonopENioojMZJ6Ih | pX) <$6".B5R5N .=U0H ';"3-_ Luhm"l&h"m/m/m.k+fh$l/l.k.k-j-j,j-k.dj-j+j,i,h)h#hoX 7o/Nlz,?QcmogPooonola}9`qnoojQmgWF|1'7  zj P- 4&9/F 9Q-K3T3H)?"3) M/Hnn m'm.l,h"n0m/m/l/m0i$ej*k-l.l.k.j-k.ek.j-i*h%iia/C|$F7"Pp1DVfgQonosYJQqpnooojQlomcSA^%#2 | ud$ I 0 -*=1I ,A(;!' >'<Ypm&n-o0o0m,h#n0n0n/m.l.m/m.h"g!i'l/l.k-k.ek-j'i le8R  $;5!h 7HTNopk}9UkoonoooojQloonl`N:Z! } s^( D!14#45 v Zjm%o-o0o0n1o1m,i#o0m/m0m/m/m.l/m/l,h"fl.l.l/ej#jqKm " 0|7Lt'7:^Y=lpnooooooojQloooooj[J77O | p u >_ pn"o*p1p2o1p1p1o1m-i#o0o0n/m0m0n0m/m.l.m/k)di'k&gk[ )R2@Xp}+=gnoonoooooojQlooonoongWFl,/C2L dr"o*p0q2q2q1p2o2o1p1n,i$o1o0o0n/n0m/n/n/m/l/m.l)gn[| /Cw(M Vw4EWgoonoooookQlooooonoondRAg"#-bn o(p/q2q3q3p2p1p2p1p2o1n-j$p1n1n1o0n/n/m/n0n/l*k"lo9Q  j L"-l"7J]knoooookQlooooooonooe~9~4,qil!q1r4r3q3r3r3q3p2p2q1p2n-j$p1p0o0o1n1o0n/m-k%ljV~  +)S t6Jo&>OaloonokQloooooooqhKLgk@p+r2o-l%l&r2r4q2r2r2q3q2p2q2n-j%p2o1p1p1o1n.m(l rU$3`5O B\/BSdnookQloooonoqOChnooKr1s4s4r3p.hp-s5q3q2r3q3q3p2o-k%q2p2o2p1n*m"ni(9l @&d4FXhnkQloonomg>UqnnooKr1s4s4s4s4s5j"j!q1r4r3q2q2q3o.k%q2q1o-m%mhLm  A(6 \)9 d":L^gQlnorbKLlqoooooKr1s4s4s4r3r3s5q0k$l$q1s4r3r3o.k&p/n(oqLp &Hi.@ |*>MGkop@IjoonoooooLr2s4s4s4s4s4r3s4r3q1j!l's4r4o,kn#qc(I @ Wx|.~0QZ~;eqnnoooooooKr2s4s4s4s4s4s4s4s4r3s4n(io+m!kf#1[ %[ Q@??????(@ 7Y 1K,@-A5O$H8(T4d5M+A,A2N6O*P'%H7Q*= /5\Y. 1,A6S M@#O:U*?!03Y[+ 6*?9SI 15S+B&8*  s P"3'0F 3N6V.B(;%   tU!1+.D 7W5M/F )<! oFi st0%| l% E&83L3U )I9^ 2H )<b7Va p" 1 o# J$6!3K 7YG0R4M(< O2Jom%p+dF\!  xc* ;*=5O9c $6+F5O)<# E&:Z QQE~0\ yg( >(;5O"?5Q)=, 7-fn"m,m/o-slY>D_ vY //,B5Q5+ @5P*>"20!R UKHOMI=},Fl w]- 3+@4S4O6PVpm*m/l.j-n+rnoiR5,>  q$ K*?8W5P:V } DmZMHGHPMIJG~8x&1I  s" P)=1Ab rm'm/m.k-i,i+m*rooooeKn* s 1.AU %3P]PIGHHHPMJJJJD}3k) x- 4km%m-l/l-j,i,g*g)k)rooooona68L - 29O `RJGHHHHHPMJJJJJJAz'Cb ) 8%p!h#h$k.i+h+g*e(b(i(rooooofKPOp- 29O ]ONGHHHHHPMJJJJJGw2}KIJJJJEY) 8#f]%Z%W#T#R!O JZ |:PapnooooYOp- 29O aONMLKKIPS[!@KIJJJJEY) 8#cX#U#R"O K PGsPt]KlooooYOp- 29O aQO N ML PRJPHHg'GJJJJEY) 8#_S"P!M Jt8mooPrnsRNrnoYOp- 29O cRP O!PTNL LPJIHMq/LIJEY) 8"\N Ie)cpnooProonpLXrYOp- 2:P cS Q!URO!N NM RKKJIGTz8LEY) 8"XWSrnooooProoooofKOOp $5'C] dWVQ#Q!P P!O!N RL LKKJIG^ =Y) 8 |/rnooooooProoooon_6Ke f0H #4 j WT"S"R!R"Q!P O!SN!MM LKJJHJKw) 8$聹3goooooooProooocI.=S "L[R ^VT"S!R"Q!Q!TO!O NM L LKIOCn ) 8&NYKpnooooPrnohQ6Ut F!2^[U S"S!R"UP!P!O!N NL ORLAx ) 8&KorNRsnooPrlX=l s4OcXU!S"VQ"Q!P P!PTOM MBx ) 8&KooolJ^poPcD|(,; / 0F Gp bWWS"R!R"USO!O N NBx ) 8&Kooonp`J`92B[%$Fv"X _V VWR"Q!Q!P!O!OBx ) 8&Kooooonr7Yv a *:a WT"S"S"R"Q!P Q Cx ) 8%Kooooooh/$0c%8"=^ YU#U#T"S!R"R"R Cy ) 8%KooonpLWI'4 f%8"=^ ZYW!U#T#T"S!S!Dz) 8%KonrSMrnG'4 f%8"=^ [X$YYV#U"T"T!Dy) 8%Kq^KkoooG'4 f%8"=_ [Y$X#W%YXU#V"Ez) 8%HK`pnoooG'4 f%8"=_ ]Z%Z$Y$X$W#YXF{) 8a a"_'_'^!^]%\%[#H|) 8&KoonrNSsF'4 g&: -R*Ya a"a%__"_&^%]%\$H|) 8&KooooolJ;'5 r+ ?*?8VJ ' FS}bba a(a&`'_&^&^$I|) 8'KooooonpA ) uU!1+-D6V15Q+@'9(a d#c'c'b'a'`&`'_%I}) 8'Koooonq[;p'%3  o" J$5"1J :c 5N/G );! oB^gce*d(c'b(b'a&`%J|) 8'KoooogJcpJPg) yg' @&94P.Q*Y$<4U4M(<O0Hidg*f(cd#d)d'c(b(b&K|) 8(KonpLWrnoQq`FPq w_, 5+?7V J 99V7O)=, 7-ah!h)e g+g*f*e%cd&d(c'c&K~) 8(KsSNrnoooProlZ>8P tU!1+.D7U87T,A'9(Skh(i+h*e h+g)f*g*g*d!ce)d&L}, 6) ?JkooooooPronoiSz4#1  o" J$5"2I ;Y:[1G )< i@c ni'j,i+i,h+e h,g+h*g)f*g*f*ccL%7$|(KdooooooProooooeMg* yg( ?':5P(D$F'a2T5N)< J-Dkj%j,k-j-i,j+i,e!i,h*h+g+g*g*f(f l:Pv3L$D^6RionooProooonpaA8Ll w]- 4+?8S60 J7T*> 0 3)`jgl/l-k-j,k-j-i,f!i-h,i+h+g*g$j]  vM \>YlonProooomJ]q[Q=6M tS"1*/E 4R6R-C);%  Qp!h m/m/h!h%l/k.k-j,j-f"j-j+i,h'hi(9& 0w%q&E`nPronrORrno]giRx2, ~ m$ H%7 4L7X1I (=b>_ pm)n0i$n0m/m/l,g!j)l.k.j-g"k.i*h n;U&$F0A 0LIrqYKpnooo]fooeLb'  xe) =%8'$ E*@kn'o/n1o1j$n0m0m/m.m/j(g k-l.g"j%nOt Q$E`~(NHgoooooo]eooon_EIi u#`o%p/p2o1p1o1j%o1n/m0n0m/m.m0h#gja$}M WwB[monooo^eooonolX=.? O{s#p.q3q2p1p2p2p2j%o1n1o0n/m0n0l+k l*6  y's(Gaoooo^eoooooohFKql!m&s5q3r3q3p2q1q2j%p1o0o1o1n.k$p?\-*T 2E 2Ngoo^dooonpLWrsn)s4r3k$o,r4q2r3q3q2k&p2o1o0m(pT| Y)If;Vk_donrSMrnoso*s4s4s4p.k$q1r3q2r3k&q2o,nd))Vb BNcp^Jkooooso+s4s4s4r3s5n)l%s4r4l#n$o0E  A!-r#?D`pnooooso*s4s4s4s4s4r3s5k$l pEe 6$<2A7Phonooosp+s4s4s4s4s4r3p+qYc3On`6R=_"2E 4WWQDt**B   |N!2 -D9Y ' 3M Zp(m/k,hn_s99RvI#42N70OMPGNMH=^!,C  l# @':>.\l%n.l.j-i)goolYq2,  K.Bg(=QNIGGNLJIG{7_' 9-qm,l/k-h+g*f'gonophA4G e,? 4NWJGGHGNLJIJJBu&&7H(>o%h'h&h)e)b'a%gnoo]^YGcd,? 8_OLKGGGNLIJI~>~?|=1OG'<n%h+e(b _#Z%[#fpdSko_Ead,? 9_OIJNIFNLK~?{:HJ~@0LG&;k#d(`'\'YWV c[^pnp_Ead,? 8^PKJHMKOI|:DKIJ~@0LG%:g!]&Z$V#Q"L_ Geroop_Ead,? 9_QM LKIKRp.HKIJJ~@0LG$:aW#S"M N~F\h[]pnp_Ead,?  9_SN NL OMOL]%CKIJ~@0LG#9[O P h1hq_kpdTko_Ead,? :^UQ!PSNL PJHJn0GJ~@0LG"8Ue1Tpoo_knop]_XFc_0D:` XSSP!O!N QLKJGV!q5~>1NG&8Ikoono_konopgAC\9@_Llonno^joojPKn  Dnp&p0p2p1o/l+o0n/n/m/l.i cJn  ,BF,:['Phpoo^joooq^s5@`bt-r4q3q2p2o0m+o1n0n0n,m Hp$/? F): z3Xmp_ioopV\ow3r2o+o,r4q3q2p0n,p2o0q%[( CKi?b^jmhSlprx6s4s4p/m(q0q2q1n+p+d9T/"/Qt *<fWKKGJMG~>Gp2nCnc)^&X#S{A]png-> *<eXKILMBCJJo2n@l Y%T"Kr>T]ong-> *<e[N L NOZ%BJJo2n=j Lc.dr_q^`i,> )<d\QRM OJHd,Ho2nAjWrnp_onpN1C DdgcS Q!P QM KJK^!nU{$^pnp_pi>8N-+A /NW R"SO!N L MInX*s]ar^NJgZ,.HYVR"RRNInX)qomV[)E\;\[T Q!Q!KnX)qofO;Z 9\V T#S"MnX*n]h^!/G @]Y#XV!NnTz#dpo^!/G @_[%Z$X!QnT{$^no^!/G @`]&\&[ RnX)s`^`!1L ,L@b_$^!]&SnX*qnpO" E/G 1IBXdb&a'_&VnX*qpc[n3' w( 2<[5P [!0Fpf"d$d(b'WnX*l]jq`d],  b / #]5N\*s9\ k#g&g*f)e#d&YnMn\qnp_ooZGhQ':)E7J,Ddk,i,g&h+h*g*f%XI0_ [[LmV`k]ipajr:$t) 0(=Gus+l+n0m/j(j*i)n'Ly)KZ Uqnp`opc[, 9[q(p2p1m+o1n/m0m)[&6,C+; v8hq`oof^Bp-p.r4q2n,p2o0j5N64>W݋J^m\goNs4r3o,p0o-t(Cg dbLjLqooNs4r3s5s*Qz"1U "e,cpOs4s1c*=' 0B{8N  m5_???(  )9 xF2L'Qi,B*GQ}=R/E " 7j JB?kCYg)q9mf +wAw JGLGJ}QQ r9hn#.tA}K Lz CFBundleDevelopmentRegion English CFBundleIconFile @MACOSX_BUNDLE_ICON_FILE@ CFBundlePackageType APPL CFBundleGetInfoString @MACOSX_BUNDLE_GUI_IDENTIFIER@ @MACOSX_BUNDLE_LONG_VERSION_STRING@ CFBundleSignature @MACOSX_BUNDLE_GUI_IDENTIFIER@ CFBundleExecutable @MACOSX_BUNDLE_GUI_IDENTIFIER@ CFBundleVersion @MACOSX_BUNDLE_LONG_VERSION_STRING@ CFBundleShortVersionString @MACOSX_BUNDLE_LONG_VERSION_STRING@ CFBundleName @MACOSX_BUNDLE_BUNDLE_NAME@ CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier @MACOSX_BUNDLE_MIMETYPE_ID@ CFBundleDocumentTypes CFBundleTypeExtensions mmpz CFBundleTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ CFBundleTypeName @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project CFBundleTypeOSTypes mmpz CFBundleTypeRole Editor CFBundleTypeMIMETypes @MACOSX_BUNDLE_MIMETYPE@ CFBundleTypeExtensions mmp CFBundleTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ CFBundleTypeName @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project (uncompressed) CFBundleTypeOSTypes mmp CFBundleTypeRole Editor CFBundleTypeMIMETypes @MACOSX_BUNDLE_MIMETYPE@ UTExportedTypeDeclarations UTTypeIdentifier @MACOSX_BUNDLE_MIMETYPE_ID@.mmpz UTTypeReferenceURL @MACOSX_BUNDLE_PROJECT_URL@ UTTypeDescription @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project UTTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ UTTypeConformsTo public.data UTTypeTagSpecification public.filename-extension mmpz UTTypeIdentifier @MACOSX_BUNDLE_MIMETYPE_ID@.mmp UTTypeReferenceURL @MACOSX_BUNDLE_PROJECT_URL@ UTTypeDescription @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project (uncompressed) UTTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ UTTypeConformsTo public.xml public.data UTTypeTagSpecification public.filename-extension mmp lmms-1.1.3/data/lmms.png000066400000000000000000002721561247673406200151030ustar00rootroot00000000000000PNG  IHDRxsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw[y}眃핽wrIuE"%R]l+7$cr{IrVkǖ,ɶ,b'*^圙sbry %;%! BP.`O@P( BP(% B(P( (D BP(F!J( B1 Q@P(Q BPBP( bBP(% B(P( (D BP(F!J( B1 Q@P(Q BPBP(F0DTFDIDoB:(P@MD_pcCDBD:9B1$ !`AP!Dt'0!Xu@/ bġB1B yY^rD< |I@bdB1!B?hxW-<1sb@ bxB1L!" _E@/wu3@@xO#8 1PB@(P CF?0;@>-/ƾwg|y\nW{;hLP H@ bAD3mƺCcQc!v&;eB{[\ޚśW<.xZ;pV[,@,5dR% 0r|_0ҍ Ƚ-rVσ? yB\MeﺩgtZE~i_Ԁ ŰC bCD 6c]:@]н.:}Tp 80a fL S`zُY%酀J (%! ] ,4ֻb\:ctM4n !Amx ]lpK0(m5@J(%!Mw4֘TG?w<4M~f0SgS(18' y6w* nӼ}++vFEZ_\a oxҍe~wrPn Mcu 8E~#a/swDA U+__w/_Z9>@&(P 2DD}cӎ5oZO]#^tMO M= S|M;%?C-Lo#]Ycs;4աa BD +2\5؂.y~MK5}={P^L-!wB@8lXMa_ڊ{p/x]O&.UB@P("{FJb?)о;~@cV n"i\ ,Щ>L8t67A._Y3KTbB1,E"ƫ 'مI;&@` }\ Ȉ\Oq}64eziܥtSeu#(C %>i;)@!pbݷo"%~_c?&~;o0H"vpڃk!BLot&*Fb1\B( E?CD6e?gbqbG#: ~ :s?0<0},o!I $jir:fD7J!m|l݂h"D( E?ADŐK7V/+@7 t;LeZ1?(Hc ?fi3D?uJ+Q'9`>ub6țFEGunP(%> s#UȽmtCs,1Fvy~g@3 x?]f$n)xdsJIŁIێ"FLO4؂KBџ(P!Dt 03@@wuMF;~|1ƀYٛ>D[aa 7v"@$p-WϰõP)ભB10(PD4 ܔikx% kȮDS!G{a7~$cm|bmc*-P9J(WA.K@O7V+Ek\5K5^Sck]bϒBm/H!4OA$D4s}s\Za] Ǫg3^rYfE5ؠB(P"o(J;m x{%\m$~sD^1b].cZ~B <ՍD(7bGP\k Myq#DsF0i_KNYܢ + E!x+plߛ1(KR$tG6 |> UOR`u w#\JUKB(} EF>we:o.y~O߾Ws u?x-N?^p8eQХpUBkl>oZ0 #O+} E(> n@"z~bwߍMo.?UXڮ z*btH V8e}sjڌS!FϹ _s/wA(} E76@kܲϝ7sޮ}`iSO|gL vf箁"E}S)l @#lI~QO49](W E h%MLcf!.ϳ zоנ=29~%[yQ:gKJ(aP@p@DJ͛+.cg>i #Xol D<߀г:p&d6>{ê>@% Dy_K7}Ƚw5r-yͯytEk+ ?!T81%9pUlbCD! ij Kw5p=fgj߫8[CH_йo@²p@ #i6ͤk]0@X(١bBD!_ig4<q}o̓!zGx]6PvYl J(F DW 'X %za{%{1 _p<B6g|뤱@%#"* L6%{zWO϶}ov6E4b"0}M[5 $h%RImO\mOVe W NŠю鐋7q!wr#C,mz}o_2@k+,X5T¤M(>YTVPhdnȿ \Emz}o_ [xCC v8E[v7v". jfN5sO e;(4;2u'mz';ۦwL>04@pu /|s̓!ڭy*nQÊфa @+tc޿kM|zj;p{*b rB^0_,w.e}@7B@pE Űd(M;e x Y J;(`aI[[@xD~=l:H~Zc6M(F2J(D ҦwqޕsQZJriߛM KpŽ@>5}w/`Z'C8\WW<@m{i;l+\ՈЯ?dm}{WTRÊ!  -z?n,#5Y[}oV6о/ wbX$#> LSOY4J(2J(,Dv!p2~r\(Чa B2ͦt9s+T}bbADK zo{LA<6{ɦwG_On0LMmSx de;B_L$s_*[WP gP  <)5b?{e;%#EĸRx*aATpg7:x6dǽPÊA> Ʋ9wF 2ށ"3#HȪpm 'ˍbƞ}˘W^vX(J(" v c y\ #כullzZ޾$3߰ Yv'm[pލȫہP$lо[pՔBO$VSj/T}b(bP ڌcOt5SJPX۫ {ށbD D[ᾱDVwA:, :/[n S䓨 b@!"ZEyn^ihkBPX@ 6lmz g*+7}i;QgKqA` &̓a>]QqLr7Ӛ'bb@mz./X;F ŠX9׌0H.3Q2.'e8KFq%&-gMaA)2yNE"N#-!w\Y%: Xؠb(! mzgeߚ(:A00sQi-w!0K-䄺`NrD\mCM02}<*nl Fx>@V J("5nVGrvM5qbO5ta]:1qbw5.h sc1py!m;Pv#h:B!!.А7ݧB47H#;#=^% 8b[#egRϰmz]mm xG%Xզ 8 t659W XvL]P<*hoR@p[U!To  s=Rd@V0LBt! -lBO-6UV J("Z پ"@{<<nmz!o:`}ZM\}C5Yc((0DQ Az[+ 7 !7A(tj RD+пVfs!/b Q@qE$LcicQzxgjXRp˥OLm(``鍓FHڛ#G@i7] J,u[ag!;pV-ԍpg~Cg$vzܷbV J(z<sߙ0~GM'¸Vi+5P^X<*0}B Gc;X}?LW݋^R0(DD}cҎ5tn]se1-al}8\^7=66U'c +??h&6R`J7͝% )o4B2:gB @dLjn DkG鷑}ά>@_("Z_iwl?t=ܥy^=hƇ9 OYڦ7B^?P\&.DmӐ[ҏeH/DHц#!@L'-hLO"o#8r3:bN\ /oGv s_.[_;e;C"zK:O"ވBn:%xy=TG1qIpy?@v\k_T7ʖ`R]o )Ŝ1`0`ԟ%&k2XkZ=_k4o yWw}ݏ{/g( yĤA/8pDZ)!H(<9'-g9>sr-LߍɑΦ!1~nY6մcqP7)4:#LDZDPfYq-QVOn{8O{pS4 ] MX*N1w6_j6-3o0"5jۣH  Y?)8]} w6)vrk}ھ7؇hǖWr;6x6_@1fjZ!`jKZK^Pԏq,1F;{9ZMw1z"'p @̎ N>!WA&,ǡOkZ`OB,rΣ1/<^8RD}(HB4ֳh^ϸh]şw5Jhk0l?c/ÁۧPWՊW~ScmO{aX0m?\8߇E>0W<2K _e & ŝd;mOX1 nca(5´߸effHo )TiEWPw +>yG^;֦W eO#KS8"NCuXpx,Z;+kf| m}'P2WNGW߲KVsb--$.#PڣkaY`9n3x8Wwe=_,$V`"GL;'܁T}"5JrȀ52O]ғ&gk;Щx5wܕccppGw^²`Qa;Ti=AՖ6;_GJ?\/E[bNrϐHp@ﳣ.L%@DAYp(#Bh~a#DmS5;3&ƜFh iۼxPF Q  7#@F_Kwv{{j;X_Ke~8}[^9Y IDAT!Y(38%q7F-TmiE܄%~yNŸ [)I9xKcD..@˧¨[y}v7CX/:U33ZĤH޿8P*0Q`BDƺMBTo:;v3Yֺ5in,afbSO˻Q=/E?4w?}]ɓɓ툁 GQ,$N]D(< ۗz/nP?[E>)b|cO(F QC_^+GC#|fMfOվ7רS'6stk&bƒrl|t vUǵXf*VOn>G GBC6 s|).w{3FdpE]?'y\sd Ui'Y^+%ϲ, mD"-F+JHPvDž;W!e0zvlz=h `H.\wḽM/C&xoŠ[bʂbp]Vt<+GC0ۅP?Ib< nQ,6ڗAt_ĸ#vcmXC>ŊD:6P`CDk!0k 5pwT̗}owCi*ĝTck'd_@ }:{Òh+ǥmh:!3dO'n Ď?(q.#f &®!!:+I3/!G@nnaϵ~zɚ iP %F(D4ܙik8?r#3jߛMo<*7δ4{;EFwb2,i nvŸ$7jv_% Kн=hzCe}_H0'u~" vD{r`<͔Ko5>[pd) Q# " 2RM+AkfnRt6=)膆%'cֲrl}N콌۫pr_ _?WF#aTokEͶ-mzJp=#Y<1d:1(c? ˗w/T`[6mȻ 5~ռ-yAFJc]D'V]lz&&v,fJ σyW - v+oswC쫺ƶ魶mz eȝڍV {{1 bfاs’mEqA-V GȎ fO#i;Tk[n3U}C UB.4[9$mzuD4yX)OU8qMǸ}Kz)oAvmh8`.h7+.w+ zJ&b3/E1? vj죅( {\K#vD Vw JRn ;Tр"4֘\G7w|f^͹gӾw6# "¬嘺@xcd$}8ԍP%P5rțF ?8]3E4E0 ^<d65`P݆;[.;cby2ϯJ?w1kiP^&CŝÏ< ~ZbAȴ}їB ?n+nrL7e;e3~yU)>`J|cd;br/mz}3s+b|4nkqH=O@| 95mވ|IngmM2ܟːm0DTSy~ #;]Pհs`8%,i f.-{,hČV g}jK+2)y~wtq/.YeplovI]Mb`ɽh\>މS?!4כ-[[SOyw XV:a .(0!O{ k`=hߛMӹoYR?n 9X-GSm>xᰬtMs[0Mh$ ^,Y8hVmz= K|ȟM-.j* ܟG[a;9`N "ABpH$8p]5 ׶Hw3҅|.3C%D4o ƺ+"u/^E0qm;SPzf\U?#;.8s'` Ѝ,8,ӂ[-+*E@$"WA 0&ӐhpyG̐m;ޅFS}𧿒HSal ,{EqaH ]-8>v=c.m/_xikF ':q@(0x@Aڱ>rZ[piКM Yr6| U;qxGV2&_ LK{Lш+J2,4 ,HYv1-I9w' *=Mɕ` ;28p?O'-  b9&AS<![ F֙l7߄9ͱ!iE A19i2u0]=iۇ6(J(sN콌@kc >|W1 se9~79Q X|YƸ2,8tV \~)ތe?E?kla +!C<3 @k.)&˦X0v!@8l\v|7J"i{{zxfnߛMo炿!ܾd#^/- fcg0@R,~\-E 4ׇ' <:TALcdnGϘu:dߒ;߂Y,C }8j19iFfW|% ' Ӓ~J1mwBc7~8ԉhe 7#0j׈ssi{RҀAD9 /5׊TM CH!}Հ .+bjEI_вȀ%wNK`%O,9E>\w,>X.%=R?Tp92 ev `-h 򦻑? ˺fx@ <_O$]F@=}Z$'4B.!@2@i(-!OضĂ@jSy}'{şh9zve+~  h"MyƺEޣ9K?ѷ?]ޑj;zsQ)sW58{ 5gQ<.) 0@4*. QpA%Q]v[Bt [rŎ j#I,+pQId &GIsv1! x>U)m8ͧ/3oEGvxpQ5}|H5ȹvcwܾ7;ޡӾ/pqߌEŞ;IQ`~g[s>A}u[Gƃӷ Ba?] yY˽cȝ;%j(v8Zc6Iw[a4`0EbED(Q) pP Țf.=|68b]E'݋Wi'>`eAU(y eiǺtnY;+]Yf۾wlz(,./]y[4u‰F--G^tJ1`̀PK> &B !JH {d݈h+Ǥs-F FGO*/cѷ㡉BePn8N1a6yi DKG]άqF?HJJ\!v,4ֻ|6\bm{{Ҿ7}_FF",;o</I Dc}" H"8;hoO:WhS|9 ϊᝧai4=4$目cktaRJd2]dCYZB7@$E -+^aӾ9=Ec_ &o ;o r_PѺpOR#5, vSR vxhqFD[8&ݚoIZϮ bi+90I8SZx f._1;p6}?w偰{;cWej&q4\jEkCP>)erBM^G4$Wy.?nuf@++3jhN"@8uG`9pMtyr(ӑA%6ܟzHwK[a $( ,W[LD<Wh@ذ|R)p/_F S䓨@zTGKQw>3 p[U'7E(ʦ7ohKk?݋A|ꯖ tzE<èLwM@{j~L/`jb?6*xo ŏuI dA/ t `hS]p+O=]S v$jS$ |DU6 [Ak㈴A F/z?tl8z)O@Og~޷5 -\>s9 !(Ĝ)}IL 9n=<&o-΢#|*){ lk7&e\,6͊}z+'#M@ ݘY0ȫNЄH/ g\"H !QW2b=-jH32N0B5ޖI,Ƽ*- %yG!i:7/C]WC.G0׃J\:;T9#LYPy+0FU?a(<~-dU z^O!$/"zLOëaL. ~\H¿N죅fB+  O_Z$bbGQ4oxd$c֋|<.{}mdN=w O*kD -kSSTB %J*eҾ"'ߋR5!-Puձ K{sGφHO,1*(@=6ᷛ!"fo>}Q?I ~4D0"jMm"Yv|UB& &r  ]u ;b"o W^ pp^0Q7hǐ;%wBAzDPPO Z:"+aͭ?^vwDw[)'}Ie{x|& {SMN\"/_=~53hiPX@'aCOlV7Ty~3z/ߏgށYۜ-h3ݿ4p\C\c0[C+x$z#|^.x? ޛ* Dn_ N b-ӊ~\ue6`$/N"Mwʄ @w3q?V7 9rDGoOn  ֙i;|B 1z>]^qܟt` HBy3țŁ @I:z1Dn7CMuq4q35?68WOvC<2ݹ FMoVQ2?#p{;:[/sMgXpx,~" ו;n@5@XGS^<>W1 s# %9`V<|.5Mo#Z-*m$ E1.sdAs, &1fF&1fL"م  k"=p62{rxo2:c-I \<:b`B,0T}oB9܄…nMwe܈8&@"8ɀh,: ‚`,Nfq,K\ߗ<VɌh@D~<ߢFMu̺b^nqx=HHso :P:!wHw2oo;UDG:c'c}uYq0Qlq F Ȅ Ď? .4X.;ц{Hhc {ZOHi-$ opS7S~;X՛!Q}a4 KrgPXARt x0ZF3Յ$!d?v&`Ĺ&<ۓhs;VKCӻ.ԣh |1&> \ÁPi Pnl~4fWVH>r{CW΁ &1Ap@@<4"ܕ3`,?B]@#naϵ ;[5~1 3|R$q _(mGDT @^]պMӷB([3^owܕcct ;:;Z>EnuwU[\ Pv=x[(ˇl^M;oF&2L΢`!(JEI̾'"aA Hh4aqMH'KeA7#mV{^Q>gYW]ˠ] ^H3i9,,¾m?LlS<f/:.B^zK4H:ν̬*Tv  \!j,J"E9z&b<1==rc즧{ƞivtMܶ6k$ pF @ *Ԛ=̏r,,8d&*_Uι ܜGSHd2aY 8t `B+Q(.'~ & R6BgnC|5(}w]jߎ߶k][6>Ëv-wS%8]݀S鵖@ XCgd|_oWOb|;–O_%zNkX;痬#cѿ9ܡ^^ C0U)vɇo1`pRYㄌ'$$Z)VH 9I~:dI~6vb#%y0NHYW@?  3uk! r9m;᾿ :6jQ?yz._g[4"F ӿ"-NɅ|-o®>pJ6OWDU3?݋=/Ͻ} a]kqu=3[Ug[,p%8,^D:mÐۀSCߦ#cRȘT#!GȇZ gWBjsF RcA>6B &1VX=yz(%p'&*wz@O vTQw50 H"I|2yL'3{a"T-,XzsE'ٱ~v%_.l~yU.Fk+;*_ޯQm"ۉMof3~<8ql?ױEѿlV s24~3pJloY' 8otN:abf)ί  2Ș"S2Rc"g,9p֒ {1&&^(!8!%H sbYQLzbDCaȁ%OQKO|VJ#hqQ(yODK[φjOSd7p v E@#?gi7^* 6e"¢_kMl'[@Feb_Њ%CBq@=D _ iZڋ 7ކ'!v,=> LAH^od Ð#MMcR"FrbE6,QQDDs9*,3T 1;bJHL$lcfXeB`{c +JBܲӥ_VL`^CWߏe~iv̆j j!zT+mp:+ÿ*ać^cɦ<;9|@&uE]}9ه$U~@6.ʝԐDv] p?x:1ju">>Ɵ^ymt0}ALUS#f=6-ܝf`v~n3sz>8Vśۇ}QKq+vmq:5pCF~ Ե1`ӻ=wMq0g9yOiHOp68E<[*8vQޓ$$L.PH E(VD#T cc"bV*q`[x%*E^A T}dl!S7:uOSխ>0l:/vTMeܿvР:)e`H 9V.C/&Ο_bQw Ip]'"a3e 660&u`xI, d L,=1b% KqoaGz|..C̪֝p/AS7#M9 E-QШV  qũe;]#lF1u$D’My^68B`Q/O0T0aZ@2>A@P uN{C'm_z2}p \?+h ocKaWFukk{mz6I6`'-{ |0ś9:+Xw]<+rb(J_矡WLPs%_p-_ 8- QG0:cS EKG9v1Ž?OvdW*95)$cB4b6'H P D"`2YTI4}DؐuH ƓP쓥j귥'~SR!MZt(={DCr'ӟAdl],Bوoj{Kc/1; au Lt'ceU@`M q)'my|0)LGd2F@bBA~~[HYŧ&}GrA6=KixΙpAG8]|=_uk/ۉMdܱ 7. ac80nxjlkyj; _/ ѿ}OEh6_&S1q~& $?8")pb[{QKH|$"SYÎ2h/A}qkO`hǵE8N.?ȸjM G!ۢem$LzI ث1a0y[7D떄do1?# wJ砪)@bEp:;v 0Z X)$GOw(!K,#+Tc+\ 8ST@YBU=:OV*?fߴ+;gȪce^R˯ "[8w a˧5¶_/ n^~_z_G#?#kv5c~~c[1R[)Ыf L3FߑTRHpFNqF%"o,y{γ5Q2Mh}90P`=!qZp){Fɝ$g ftĤ) sъNF5Fˆh$ $H,$*|z|\J?El>?{+ S6KUah;UQDֶ5?G8c]Y7;g?pΑ 䡀]` ?z z? 3mz ;CtmocwpWϟ@cg[ onXqټ?+icUƸg6h<}Y Itrdmz֦סj˛TMML  Bl>(OI4['s)b{Rx3I?'B6%>4\T4&D9tT$VʱO 5A`>;VkT4V; 3O|HfۗsV/8A<XWϊW;Gމy,>!0q̭oD|`3֤58#kRHTq~2SKހ\-\QDle]Rvgk /0C D.&F'F4D1ʅhw?)E)bRԓG#u@ZB M4gw?&7pCrųѴ8 uPhH\Be~Ba]o_Wݍܜ==CMug ;0e W֏_gvx+G?Ċ{`3g=0Q 1N?kM! 7N# k[&"p(H%ysOES~@ cGmTNm,% xPƆMK0e!S n :m+vbt}H[vTӯ-h`=<0cՇг v}:p~~_Umz^`lg{R]pU|m ' ;HFTnk+P&j*i/lkȔoU(~Ũ.yZ㾳8@‚/~ e=[@S?6p7.q)> (X tv|P Ylks+2˃x;;҅x3pr_w58zb C(FB`#oq6u8?lH'1PKșx䍒l#yȴr.\8GҢvɡJ/ _`x6&ؗ,F#ҘXcav<'Շn76u%O߯,[g2tw'M? M S( {|_\U>7ű]# ܒGn7BؔCUPX *ZCC=9@h4tT(Д> ^ڏ8Ki_"V[ER)| pϾqo~^mzt\@9awc@x{poǺkOvg/ `7Ö\Q?ɾAǧ֦Hl 9VqX_ModR |Wc>ƒ }ƒUkq~K,2?2)<PkE#4a"+Xn@`;y*kZGnDgn@Ih`y" {)#˷tguT̪AL1FXզw`s=8lq" ']̕)<&(4P W 6Ԍ D/π~mD\l|./y<-݆ Xx߇[)ߑ|IWvv|>'n~lX|nRIUO`%}͎Y{q7Hd cLhf[kmzq<E:ϏL'J5G62ڄ[4$ZapSH4h`M\wz|3Rr0kF.tݳ];iMFㄵp>3t~% ߶7RfrWdzCb߿^śX݋Z7ﳶ#?}|aW';=rr8? 8`7~1C)['9cp(_|<Eg K)ij@b:19NT%JW_VϷ[]]Ɇ~@,`gN XD:؜Cʸ2UPh eǷec,А+nKprɿYT*p5"`AgsixeȚZ;DW// "* `_x?|h#Ĵ魇:=I3#E<=zq nR\eLK8_Nub^b| )^Td_{p5Yt}w.۩Mo9*{:'p}ל{o[]W`͕ۻFַhe}U_`8G'&-x!7Qo 8 n?R26(aF8Gv&Q|} O6fÆ hV~шX Hr< 3'y:TgY$B&؂Q ܘ`1 ˢȃ0c"3.M9,==/^yG*b@'M?S,Z?%P;5P˅JYK$m?Aw%ֵeӵt\ѭ8m2_tOA<=X2uﻯUϽ~ɀoj1nإ^b糇pY7yE_&(ye D0֦7:M/o<1)Eaׯf>ܧΨ 8%oܬ8|+Na=MdZ5fH$)1)*eI,ioz|F,AK[۲!t\LaĮnpCP[Tv+EW]tmM@ݦw1PS s軲U液&69z?1gj@5P)AN*xhCwAE?CV!O7^,=^|x?o}x0ִeő'e7, I LRӟaBC{_1txoq XqB5G۲iU޴G ^"jkp~%( q~}4Mٔ=1~e~R,F, ?ws1,άR>A767a(O [hd. :F=A 0Q@3Vq%ry :_d^fL 3:uPQ}L rl w_~=DB;n|Tú`N8+ @S޳!{:\ mTwN֎c \vHW`Uac[)NQGGnEqסN Da-_m ֽ6 8?R P@&qFQ] o*>Pc;e F~iD\f2T XJ~GRס{ET0ua$Ԛݫ#]TCqO \`@]PX(V qBܷ/Q2=69= yBZ_;m*;6M/_}3/~SL8c8r` #X݇ūz 8g0]|2plzUך4lIg#r8$ *8ْ<`ȑ7^0m D%1PU,~l~eiKW;02eLzlϠwmk] e?{T8 +:]co|2U_oX6F&3ja{j'U0IU MV$*W<ӽrr|K~|FW1qa"_}?}^S{02}h,6awU8?8rj7酏l^nO6   im$pp:Z $ (*TC ,wjtd: p[~/5t"0[, ?'&58sUb== @Ϳkq~ j1N/O_Bm(h^' (vb8Ŧ7IkጵN`5csLF9LS^إ`4?Jb: @͗.&ρok `?~)e<}XL攻6I(D)+GPX'JĈH %m_NO|\J駡7](ہv|p3 % 0)ɐ ŀjgc á@;PY;j=­d D!J bP=:Q@ e-!u0_؂}ע 9۲T_ 1M MG?PË \xD߶8'M8= _v5! }pod vAg6޲MIM74"|l(>SL.T1($Fە7s17BfL)qZoWIE1a *pLEa&8ȀKP6zxؓb=XL{; - n;DnZݿf>0&H4ԭ ͹8G'=]PQ` P @_Q")  UʞI΃H$K1b$>g]BNbq|H}HŽq`o͗DBSʿQZ:Ns4+ҼZ 4s]Αa~_;<M M/YF댥T yD䬍q5&#<'dҤ"KXX'GuG`v/n@T ۆcT:v ME4e8J6%aC bKx/lc96x5ns$_Hzǧ,[Q`O+E?5|o02@5 H5\ h P f}l,_P:?*$uj@KQ Y's@a͗ ?}kL⌉w,JH%+O"C݀ ؁2.XI޶vg˦b|Եw8mQPwb{[D)TlzeFUް dí5rI qpSS(!q$좼-$SRT=_4.*ݓ j%@b{̀ʅ{hWڑNv/M)D.`K6]|#Rzj(V"qFܛ =>.}vؿ~cߑ(|V`Ayzc(@*1f Ą._b?8],-ph +(<@Ya BBD`Q_ v9r.70P\JQ.] \8BqpOMEoO65Y\Ӆ1N{y OT ?k6i _XZ߹)"Nɴt ;\@=*ޖShob?`zFŝ*ڜ1`#(A irlz%B`#ƋO$B>Y:bz|SOB9{M_tۯmuLDY?g?21PC@] rmğCY~yd '}bA>e';G " Zjќ%epuNSca M11J6/cqLOc?:UW.Ɗu KyyV[d{q%Gs;g8IvGkSwTn[q~0Kܝ)KXeI(@&{?SQ߱F~OEK#F`rlC%xk ze6b8 IF=&`D }K_RǷ\D8_nG;\ h5km3dSR cl%m:k~)i |5RX-O d~A f~D8$|G@~e ͳd=J 0yC.!䊣( (=Ҝ8gf"&RwX ot˰xyye{1G矱oWZc8G0X8?(A؝T1ަ,\*y`68 IDATn/#ɕ}c}-a~@&+.? )ƍ`#0X 8"b-) yV1b!jM^ů*˺VC1~Ku+zC_1oi4#a5U>vs28GD>ʎ#ItIDFrg;N`V abPF=yC'Q/H= < Ě'KQMO|FR1h*(=2ҭo#kZaZ@myr-[ +ЀJ&< ZnqU8z` >;}r\zy1N-T!ٷg7!Np~z Cg/Vp~눐L_,"³>lz)/$3.h4?x!ۢe-E,H#a" +# [$~7pX_]j[d9:5!b! !VD"0"%clQA.^ं+nZK[=?{G\}JKn}^Y8 י8lw-_M G6v֒Fc죘cE*H.^ ,Pa1XvXkm J d+FL,=6G ^z ws}pK&?yS(ꑩָjߢr\v@v8CN/|nɿEFy%~q"{EWG0u)^KVE-eJbdaժQH"cQlqG.U?݋WžWõ[V_4:M!]1isĿ*=0v 5Mq~kq&22]]56u85qwq̅`klDTh>"e_@SFROdX``AOD~k:2hJԣ>/ށ+; LT՟5T@ ?\\MΧ>.<:}U BQ"%ojmLI29IZ2̜ӳN$nk-k%D+$$}G{_xPUcPu}~b@~nUNL`#`H@@ f&"Ef@>g'x 8j;/lź^‚Bt>ytɓ~Iu~gOJW!m:0nLrZxDF!k5~W| \@p b/易>?: V$~ixo |FWAJ~dL H O(bK F;4*d8 j矟/,0-­~ywO.8VR0 )UW=ί3:_n̽(/2LJLKX:e~L*+]ON7&Fb)4. L-H3A;%beA( ! A _ x[.k#M0HlAO0% 8<(r8"oA:K`Uج4Fԟ3;*B~k(JlLK̙ +,,-87:wg)lۄ'߂b/qEdMV_+@iZ1}w0t~1楣3t~cu~0wIL J)D#IZ+h-ᰊ0> rYKc\[I565.-F7=$C(`3 50Uo@F=Ud((?LK ulsR3_VOCA+-'<`1Bnq?։kzpb:< p4 %ݓί"|u~A pn_D* [JJmQYaFr5C R12-PFt|fCmU'LJXE^+H|!P5bA7 juz ye?,g ]R%: )K2.VonCkpvܺ܏S^wp[UZh/j d i":n߁tVaβ|:v?M(Q ͮ%6Ċ5+IPF /P\[Y3.kO!}sH|ixlQA2cfUQԏ@dȺ_{։ qKPȶóp8ЮLM,"m%BOVlfx,Tx35<]fkuAאڻ~NK]XA}RDrAf&A4Y (aH^?hwR! 4sP. mcsXg?O߾[iƓ_߂잰E!s+t7_s/F?=1ۈ`u~H0v8hQR2*Z@+ NM%o)=䌚Vn`ًoW{Qa m\u/Jx+~Ł>>o|7[1[g7"^'#M0]0$3' Pb3R) m LW^~':" )D}{'jWp q ?'ۂ-sZ2uuls뷊^u~ !PG (NA`u~'y2>l4# ZRRIm +(Ap9IIkɜkMb?wΡwPTj`# 0 L: *apߎb k\YJb*_>gqgW02[O+}x _܆EYW:SZ~>߄moF: [ d|/EB0RF9aO+%\VP0*m04Mk1:~W> \];8Y^xkU D_pKQ޻SmzrPqfvYSr7iVb88 tu 8 *o ?OVˮOo[/0 tu~2F9Vw+g1:`kBa|X1 OYKŚ44)[0&:Sسc@7(2+@@0 Oytf׻V+z2v]4+<'"XNȆtF8 NOʙn<ō8tYttd-Ng[,=0X!]!֞f~H*2P؅ x0os|~`~SO?ro=v0=`gt`0M R$dpOƿ:mzX+Ѹ߁SP{ ,).CoT,1s {S`x2+ 8ٜ9O5?xƇ]W.5 <y} ~y ?ǿ bz~qVU} Z)EhړS現 L> S&A '*̸:Œf$8%#T|R@0Fʸ&b Fxb5 yN)+? '6-֨ob-HS++#/R“mDa(f~(:HEmz7B4s^ٟdH%|")\, ll6?Ԅ^_Dg_}OlB"{|IBȨ֗C7Zc7`Bt~9 c/_8P{- e?3@,kMA$Ie r%Xb#=hn}i&qN߁\ _Ap/^ܹ:_nCߝQ|Jġa4jί ֌=Bt~3gu~e3~Ks@JJ@@Kr1p1aꠁJ(>5 IDATbZƿJϹơqL_oOloF_d* %H;3)DMS7lDmz6Οx\|U tqv5[QT1'4OY:4m~ 6VXJɜ]d&S`8p8 ZSJ;Z+:SPX@&F(ZtJ_XwYչ֩uc '![ +ADOn2$&kl;La':qFmzw;:6yn犹/οE`v=[ĉ:p[~7/cS-xٍٝ#){RNF3@f3>ϦkT(ۅ61%'!bu~oBIY`O|*> w9W }F#iXx (I)4@ZTF $Đ"Wpk/T-y* >j:y =˩vQA@0BD4Y;@? ^TѦwSԦ7|tdKȼ/ ŋ;8V~b ֎p7qD~u3v\,gOV&L4 uE߽?/E[D/V2 |~e1'N:FaTVQ F!]gekZ ȇg &m\5?MgZL}˟9 Pؘҍ8ES6ã74(o u~ACr)y$l6Ukhn^W0=_Zv дz??-/|L5HGfa:3`~s: VXy Dit|@¶Ü@hG2)5eIFSTZJxa|X MBbFoeZgn^Q$.T`&zf'Fm!`B?j[mY6b ?Pj 4movtw{Iߵ? o*of>7&}3c8_@~GvBOu~ o, FcZ|@FA)$Y{14#>q$VXbJ1ʩN\u?S߇6M֩`H|d}δb! jɘɊ287uxq 5%v8:/4˾@lׄ_˟v^lǶGVa0;? 0 6@BSKO'R2K9)p"L͌v - f J0 ZxDF!k>ĩTW| ^:~C+ilFap;5n @$v^%|/ | O|}36[ow0.}rah^_;g 0 hH*?YpHS:r +[,K9iZJV R5IRhivvZ+0X 2< `6U暗M2x.qLTyĿwށM+ Fg6@0d0zB)թ O:tӏԟP +xqR.|tI~؉qO4_0~ ?}0_0݂t$d-NmSi ~ 4. L-H3A;ю`0mJBxФdBW{>xKL.+#:M0u;ւtl3&hQ0@15Os/0O?vzl~P jQTyc=c8Aujc-#ÿ H'uN(:/(3^VX sj;<#>@$k5FtVF;kMpXGiX T0uk*.ձ?ǞToC\T:?=  }PG5HT$H2vXY?, e}9ؼ_'l^0 u;P /sCCG]} >['O\gJ*o,30P$F4CF ibbeZ24RncR'猯^a/"c\;3 % Gr}/g[j_rf7&n 4Wcq /B>uLw-K(&> 7J5)@]WKbmkV2p b Qb+kb&_@?sIO|f?jg>y,/g?(ǃ6O!2>#QaͶw180{ Cs)^YoX9n\chW&h6&0͆Pt JO OGZoɵNVBL_UW}tfLSz}9wC0o?ݿ:ML#mUтaVQYa- r nM=S7{}Ӿ/39ԟJ@jBa?@ /,iw?д:\VXb):> 0 1 rZ|`(0>##Jx+7ݙ b<}ؖ/h΂ECy { Hitu cx0&IO`ČS t~%Lg$ZbƜY'9!$+AFF{YAKrLƝФ@ C$)g|7?)?uU+K(iF׵AtaW!1i'J@$I IiIB) =e"87#Bi!ICD~'ORD:?o߁VX,)*>WΌ cu0X;ej2>lN&jУ?d 3*  5x/gT&@ do@8/bZīH4R.I CBh"$EذG2 AaT#EI___:sO VHjWF;S$(α@^`wzMxS.؆AbgX `Nw/-h\[ R?a^K@ _ HIP*)"@H@uYbL2Rd ȸ4#ĜsFƁ z2znW^M+_~>h֣8~'|_VmÆM낦% H4B ?:$()R$OB,(ERBP $FLtoXA> N a7A&G3/izBA"u7G6δ}7  6 ȫmQj\DMJfD/ Q'B/|rd I!eL %_;nH {-K- Qm d|+p @.H*V:4Rk5wKToy6j X?|l@gچ1@êJ~qnh5VBK"Od (*#}!dw4+Hqv[,E#O|,'>1sq$;jH溺#=r_K]C8Jznj*pXq+KJGu{ 7L2$HC C`#X0X IVcM=`lu~ŲZV aw4>"Pe 7 T\71m9K}_VLᣟT7;xٍT ,`ExDJn,aiXeexWBo bY̐܉:ªo1qcUaWWm@A@{7pPa8͈W)O^&rJB0 p3r0h&b,f }~NTC^λUu{2N/#~.>}VoS؆U2L O2LZ0RI;,$&`?:bܗ5PFjw6΅NFBVԟI r9dW1bCMpA+dH +Y ɱxly2,}tdX8zKX?1F1ԟ6sW⌁e+WqǓx s  !]YlX,ˉOi%_=X  5teWnVοX,; @+§ow Hi폮oFe,1bX,˄fDXkC#@6zP "杇_з49 G_kp`<6\_+X,KY?i}u{UU`vP sR/GX:1y ʚ~}3?j!%[,e)|~X! eCi`P_%tOg,i 9/GQ[G'bX,ˋRL7v`H7N%JoMW~ßfIJ07!5j“oEu}|WgX,SF?3>%jP ]Fw]z P'ϵ oX}8Jkԋ۰ze,Ų(5֭V>͘ #q8a*! Dž "+_7pW7 ®'lBbZ,e9@vy5 0H̸hi_ eom{cPӐb6bX 2Ns_> Tm" %nu{ ͜sNߟG(06ǿ˟v1G=ݲZ,eQSƫg41~0x^@ Wn͌릹3 4@ &>}:q`~m *,bX,-?օ[X0|Y`] KzOjANe;񗟒^=ۃccd hP M-:bXJMo$] Z%oF aP`*b͛1|]W1<l}$X,@?B>q*5z !9B~{;0/ h&p\_?kZ,p +.?EY?b^#c7C%(#XSXQs3PqWOuC5 [QUgZ,,nZ_k1S'r#`5d!'Xˈ5Sc2 `r:`b(WVW6e[==[,,??ǜ Ѩ8 "uPbJB~ wO0%~b >܄xVX,K)YN{33q* )LܕnPh`fܽ>Q6~ l.hk[,g~ZܼFM[z0ApKg{snt bF l~h%p\[bX,T+p?w>$hN~!pOi7Y1O8hZ b 7bX,|_:FJ9@E[y.rZXPbqgX,E zΙȘAbA_$P097J0-bF99ߞH ANA?+wgtwX,%E;9."Xuys~~EdL2X*.$T`procC+ѴtwX,eK|ow5*0.H@D 00*)4oAa8-\_ݏOb/w0>a蒃.@7 JiD@êJ4B!FaևWb5%\bX, .崾o3$/K(?dXˀ$hE&9%ݍX`kOt^×_bAnY½ IDATR9$ wgn!|mz~+6m*Z-rRЉ{Z#quk{bfY&_I 77G~. Fxoa͖z~q+WbF-da較+.Ҍ{WԻ7pW7p~c5x+,a #bL3KWe$؄:F*_߾q%|yv\c?+qX'OŁg7bY~mbX,˔iF4 ݔ(S7Qp*9 pϤl=~x{Zy#8j;/lź庵bX=///0xA0~QG!?獖X@1TocI>~*{:< p= kX,RblѫmXVӨ٥!cq _bgHوUx۰yqtltYbXRf 1]a^5n[{/:}eP \}}s%q^mP h=҉؆bϙfpáΟ&kBwY<@nZw 8-|utO l{O|} *kc@b,wo0|IbzԦW[hyqI  d$l)sUINŵ^ uH1jviT-?rrY2-Wb88 ܹ:*f$^bXd~f8w 6Smz6kToS '%Jxx5,3@&+س8+h?y?gz7ࡧ[ X,%M<.vZ!1tQ6#ʠfSPi}^堲6/n=]n[a^bXR^w/j;V&c+οpX @V7[.ǿ WgѲ_؊^bXM`\:xئwNԦcШpmz ]oƫ !te;j;Mܺ܏OZ&labYfg Emz 6iToW,οA5t='Xc]s=8-_ބOm-eɓԟHߒ 'Wmz/>KнRӐ^t+m?´labYz@Ԧ*+_ހZn ڭ< '1Sظg=5^bX1~ Z+Tn\6Jjrk@&$ևqkh=҉^ܸ؏}i_7f[,Pg9FH9` 5;5{Os_K886~r-چqt ;r& jk4ݫ,?n((oC13HS_ƅ>yC=Տ.N~qZ{`#/%9 O*)m#bFloo[5Oe_a#+ X,‘~+`@NF|:η/poP}]7vwpL:.aklAb)' cK yKHhҐ}ٔ/O6@ +]|7w`ৗqcvl?kj{rZ``WcPC!h 5Y:؂ ?P4A*<wq8 ԮĦ+%ܹ'X,K`eTnTX!669-f O *o+aîF4EN\:хq|:VԢyS:Y,K`5Da`ě *jH#sao9bB́Vc:?vw0aT7T,-eIb F* 3/9g1N%#7MŞkѼm1:!ߝ@4hX,@0" + J/N+@=ĒIMc{ņݍp= sk}nZZ,˒Cy[X$nAbɈ/6"-0pf?C@@ê*l{ *A:,=S("Ngx7Ōe6(y/O#o5RqM5l]0yH&I~ { sfJbX:D~ megd/QT%q0y._\@(+Ѹ捩t9P_z(;p H_:t*h,˲*\ck*:-/HO3%;vR4i!bT*sM\REV ng0Հ0.t8q!SI ==@uX, K]Ńo{}0 0?KH 0ŸKAYP~$5Ղ琼toy-kjdMouM0L0X29NLqR.!Gy/Pp-YG@|IL$k4nMW]U\{@ I^ȧ?wMy_'CH] :(0L d[CJۑHо;I~*|OOvJ*GlHGryxNxa>?~ȯb٨tT q)Pٵ_BhhtXć%sָ`]6 [ht  3[x;I2nma5,'[@jH[`ˬS t,5)ҭ`I7C`Y )p7hkOlOW+'g-N:Wەm;P^}!a_/̯@6AT/1 pHPwfRB"c3y vY'1 )C/`gz|{p]8؈ۮston\ce$`kRؖD-_Py @'’ mm 4Ґm)doH|dݮYG=HZaR[Nƾ6[)Z`NNxbu1*ѩ;?^,X~K|elAHōk\ݐnQeck?+k5Y@ m'KHm-v` AC7@SCӪ2:6KΧw JǾiw6#**{B$ρU;1ٍ<θ;\oO[e\`ցjS[L3H= eٚFڂ˪bfQ(Co#6`}3Gӛ M MB\F& OfMTp3i-a_|c{HHsv2{l FIŸq\6>sEӮ '}J&NĆuwX6B.r @iYrS -4]e[[<(;$N2]iK>e;;v_Wƞol'ҲSRy<ܻBh/h6Cvc2 EQPhܴq0f̓qWu&N'Zm0"S˂矱1Gm-߼̇_J `˾xz9Y I FR`inv .h"p3l#Ӳ-Ra H4L|;$>Y-餭?eojc81H'jÙl}@mЫaB(ngn}Ȉ /|U/w w"|ɾ wDDϛ4F$ԝ!94kjOl!x%T,Ī22yǭm/YY:@.4,)u̸5- NF& ;_@ˎsFHM)N_yoݿ˖iPgßyc=xXB ZkeZ%[W2ȗ-n+<ןT|O?i&NH\Ӊ $҄zխ߂זrIVƮE9λ [P4I՘OfB2Aö_.$ex;95Rdף=~ЖfSt]IeKX[gIŃR˪ "O tl! [ȣ; FcN@?yɋ7~]auA tU]hO|j'KxH|ʿ /D=o djb+>{|m S!{~j )V|z zt5z9L?&΅#;"rk.3N@.`g %Al@Q &L=JuR)Eh]8CejaCw|Cj{05T<7gs@9_RߋyXk19ddNhCH Wy7W74]1z,㣮^[W# йqwVRH- %rŁ)YJ ?((UsP@vX*w"m?I%7*oJV,onX>aYC.@&tN͍f]jrr#| yOr/O芆m)i&NIԉ]0I\5lN*Wm}]qݛqzi˃@ӛزh MhR!u)" B!B=uΒ lLًo{CR/k ?!`,fd݁@N r f ;@6{/ÎV֕r&on˾?HJ_&ؐnq@@<ٿb^'Cg|2Oayu917 &N4lc4US޷39, @&msK|9gߓV eHvز 羖֞9}$T٬2?;>KO'vI۾>Y\p3x<BCm}/mf̟:l 2δ~4~n!3 k2/D;!.Mxs_9{_߮ê*:~ Wks GQLjC>@j2_f g 2;0r; C?4GIXySJmF^9-# ­(x0K!Q-{]S{A_y|{ f/] @{P6~WL#&M)BS4Y `9W1k\]m4iS@VVOb*# (';hBԉWIdߩ)G=zj' [ʲ^۠ {@چO8yϟ6:dz+KaL\I1y*@N4D$wVTi-yT/L ,a 6qCwPx/?ԅ.ӻP*;l۹1Δ&4 .';<+eoſط%q?Ц4ȝi{hJ5ÏN z`29GcellɁ6ϯLjCmt3f(;96вڗ&}R-֮2ֿg7~bAط3"';Ce!xZ^̟9h( j{O%K63{m _{ ~ҷun ؕ"<@*].#T]}|㯜#z׭:_# f}lLv 5˙찫:XAvxM_ʛRjHwi4~ӿKd=x!D3<+DGW5K1wꂅgMOJ39 y$~GI/A7YdNg]OEܺ:ɱ~qHѷ}1~BS+T^W9*찴@ۼ7~[dnMTܓrWҷd^{_6usǷ&{B!_!P)`b<3L}5CӮd&4&$lcefu߅\P Mw3LƞzhXaPaPs [NvLpqA%qKdt~>{m.Nگ,עC~V^:u=+w>Q90Kg8Yw7p~:zLjCXa;37a&(+;,;VySJף;F,e='J"w%)C^/ Ͽӗ"9N+`M%?8as#[/ʐ+l09tv.F1,}7?&D+mI(щH?mغL{+ B论п]6 ީV[RhA= &OB$laҩKPR }<wez5]n<ދa0Ն*îր;~|7[WGe*)~~/;v[qֵa<Ϻ%ӻڐ d~EáeG[S7;NleW+|\$HVޔRc7| c\?j˰mwV';aCnOSյ!ۆs2wR(CLbį70[Ma݌(x4B)|AGX2 ;/pnla*6ܳ_ $_d▔BݟJN=CR>2I)~۪.=|LL  MFM&CXqPmG';w+`[bl`#݄_Wv87VxNO#px#@eeV(!Djc~0ZWsQGHħt|[;Q+}Z_[_kKAFّA,5k1nv>EkGÿ<Ԅ=&;D'?˭ʛRlvo|FVxX!o *\"Z#?}}Ƃa= V?킥XD= ̶ A>w 2FX1x*RōOoQ#tnc#߫_mp.# 'PNvxCC #c7ԓc@We\UɲXaS?V]lO|b'§[U[̊K|pncIauRc&bdrRCoo jj-+:ʲy:AjXtarXB޿>b}+oaRd(w?l SD|RڶS(xNy"m_?OD]]w&{WL*܁en~R)hAP_%L_$ 75 "Sc e d-`PnK`ἣ lG !2O@SFHgL aq-Ll4O 4vn~ٽ/AV`|=-[vtu.:{h8[>җgpHDcW#Y{lT{`SPNvrӜd[? GwI!tiYL㗎}Q섔"7MJ8;F99I+~y.Â@D_><- dםW%_˟f!0Ba6g`MT3D kQ̦>_̫tcKeupWMY2-PVv\m,ԎQ tR ?^ I/cY^W[L/t=:x:PjUzc EH'l.---|^=΍[DX^K&]e%"#4e2" Ȥ8A8s* G {Y! 3`6T-jSi~o|ԁ{0_{*ҷL2 Apfoa}k=Lel{`*eq-1i- f)!-M I>I`4M9aΘar +*f0U^Uy|ﲓ]$_T835 m5&:Pѕ#—pcܼt::OoaPvXH,͙T2Vز`vgƸquD35׆1}ek\m&qfed5 %2S #F9Ig=e$#_aM$d؄l/ ,zxwYW"~ܬI%w2zHqS$UUs P:R8 Af a0ORi&fe (#м.eC2Vn5AltM"4DF '0Be:TG~;V-.)A; `%$g 6 ix2(-ݿ kYLFJ_ʢm-pБrqc8)LHȤ6­<UzPѰ&sW,;ĆuwځX%k]T߅539!sdh =2)UWp4{T(Ok#bc'=jd|,_'t p~;B gV7aM;~xHI:iLXҕ:PJ HVېض)lǑҊ%h;鱤HQyPaucVr56 NzL2C?n-Yh =_>酏$:&9@3%@BXXßC͆BŎQ4uI$.2to{8}On4n}|㯜#z7 MMj&?E*5d-lǑA[-[HrRIC3ʹ~}n`txB(^\ ] 4:Ehc0Z}r`G5N/bB(K= =ՆֱR65mU(Qp$\G@jJ ӷ0u=#嬜h+Nr!WD 49>6l'I%VJslǐNF MDZ5H iKGґi6H'm.&7O N\Qj]i2'M2Sai4+*ݿ H`ZfEp3SϾ@84 u z:L* =‘h{Xr$iy߿R XA(T)8#,lqrt]ϑNF>mg2EJ`>μ=  /L X1låV`u+_]^J͊DäoR0KriP ܱB<|ĕA܈|̆k8tVmpñ~+x" tp>BCPh؎.ck4%HkKJ#e O5?e&^L1;\5DT c_g2]0HjAPo p/E `a+HbgC$@=k4syt |E",zBIkΆ_p[ qC} D\q6˫&n& LsQ &äo|0g>ƁزQ%ĝ18!ג|xzv.F*K(G !DI(rQP#tG0:_C4=xb%zȡeԨd3VT2%)|矾v) +jӷLg"X1y^c6.Ϭwe@RTAˠBMsܯzȡi8[&aQxOOs+yn0H3 |v|(4]s|/-&?Di)Ajnf@̭Q``*y PP]ml8N䐉5){'âa[=P%Kkgc[.o56=3X|Ԧ(ur=1%_d? 0Kd0[o;(/Ρ/na.pgo_^WoC_'ҲB(A8Bh: D.{-f/z)ܶ:!ذANjT'!M?1C3 Pt!(&>̆[˃篆b@|KjD* ,E6W BIRĆ$8M.~v]tc"Keqmz,wnh]s[LM d{ eSR8Bel1g5Qy/4;R{2L򑺥=ojْ"B}CCIlvTb8i'Z-L1gK*(i߭>_U*Thf(G t'm'^{8L;"cV_>˥n&\}ZrS<*A}RGlZIЙ8ÎK'~ɠa{ ί^Y\Yox;&0֤k>C&GiXyok Z (ƍNh}wI="63Nu맭ۓ^h'^'?c;HMpߑ.xbpT 5aeb>RYN_ "v$z$31v -)4=o9'4g¤nmz@c?ԄXj< Q[#O9Z][>ߑlK v!ȍK||潝|`I(|:~OS[pw2ŌGQĔVZY͐ Mi3L_5H$o6oJ#r.F[uJ+["q)KXg IDATOcE@Ey @d7(:ʴڔ>It(DrϙsQ<·uܽkKCܺ=ȑto&6zPsFy@-_ sh?A7g~w4g}$DL{-f!uM䈟YW?vB 0l Pp7Dـ\zmZ}Ox$a2s?ǿ71y'Wq70:Ȏ#fe0?]2C[hi=#q`rЇ(@IöFcy}{'?{?3nwc@Y=\{ T~f˹jSYC_o}z/Ѧ]|DLN)9\?kWa>~srR:?hyMa9fI] Yb|Dϛhz+L+MdsnK=cNR=&y-+l|+5#QU>- z%X"KsfTP6 66 Aßv`-3`ՠ`sSostU?9_LIį$R79tYqvy~G$~1]@#}O /"@E @L;<p[rǠ9TA?+ALu7y Hת悛'x!n Oг}C=slWzcд+NGcT̸䠟eȖ$t7e.)xWHndezԴ!v"WPK>BDQ6`cU~Ɲ W_`~,ph?=[[gY%Mx9s:(0LrWDܑ~00mZDI\5c%w? b4lMGԺ%3ˆhK[:3w챿ɠ6:vE|(AAu_亰 H5ZfRA`6[CbOl(8ӽ#~ﵱٖÏpLڕݲOxm<N+*TϏ/=Xߑ&zGέ"SHCU$ݿxtVwĕ I#->҂4 r.G"_ v6@2@ GZ*OH;$111tG ',wt6hwbgXqwpO4.OBݿ gE$Xaz#P>-E 0> иgIt0D2 ?>{{#yNd,û9wB7$a'<"p+>TkKaX92AP+q0 ]dgb\<+?=&=={@ԠJs#M}ޯL 䮜^ Z3]q>ZV؊O]W/N2 Ȣ#3l ;l(4sb|F R BI}I`W3gYI\J5V4WCA@s}@Oڤ[q%OG>=·x/"cYGuE8xg<܋ϯT9WbFm_PD t< 5j'1#<'>5H^+lA;W$dez3v-ެR{5NT.rQyM >|h4lctЇ_b}Wvxe{3[/ qy6Ɂ7e_zQ޿95/Q|RAQRt&Ob'CćD0[ݷFjօILg"XQ7 w8Ns߽ V/ *諬.+YcaIz4fe;z_NX |*d]}|oee/@⪏8uJ{Z >+zLcw/pkR}e>4FZ3 =v< 7M/9K|ؖ׳ɍ)<(̸VQ@.6_:ҘmȌ~ͱpU;h'< _XC&'7kԴ.Uq_l^D d_רٵ!;Әi/~qoٲ-D <)&\o#>tumn~;<փe9ZBEhcѡ k>R7MB7$=fYKS2k75!zB~5e{N (YG [Ӣr9ud# [}X3a|~粲?ԅVp8^b$k>:@6OЃey1kS io@w0[0xOxs G~Uk~bgIYۼ)vkH{ uu */>`ae5 =a2ps:>¡lؾfj_9ُn`u{ 饲a@3>7PW8|01BZq  LEcZA牁Ymp~ErhJ [W9 =ȱ2[/q8f?ǦZ9L,T'fxz];)+4CN:<ƚpW7G#z&py퉚-Ls gے4zVk-sf#;ph=A[±m{Nī\^Scc=zM&TyQd!XƆJ}1Cˁ;$FΆ5tv5| :}Oѹa3A-De(U׬(6LTrXCJE/F ``o^=x0+TfCKՋo >#IBp'AVLCꂞϵh GY@E>bjo*Pp_A۠ɭ+yߒy_ʼo~?%?OȾw'j>Ћ?R 'F͘ucnQk87\{ٵN;8u_)7/MJCbFt]ԜX,=P偳2@Z>,i+s@)-h\`V9&{=xXM(J2N5@U^][& ],A'5aq\=~{ҽ:iB#;wdO!-P>`O8V4=c Dφ_"؛IKW頣^>ݛqӜ| G`Ʀr<,'KzoJ%Nt0LzmsC?F斏Mܡgw؍ߗY= 0Y2<;EQy lcK}ϸmPA|$z6q׻Z1ɩ[[N^(/g4{<T63Jבj__e\`>8 t'm!tEf̭jsw,5h>XHTqJ"c[D"ے7G` gEv8yKg+ꦲMö8fs&R 8>œh{A7V,m[WTK+H\ ;ɸז"9+\;51MnŸm}0ASk|qKB]r`H@)_H %4Z OJX1~R7]I@`Wz(2x+qd=^bNzq>vw EDY >,qc336@It0uz"%ٚC&[}e4:Wv6fsx5(干(0%7WUP^WP0?c)x)Z`rG좙І4$*{2?Ot8wsQ| _>+ 5E,]՟YޛٴE tWްf[!ƘĿcgg7y@^1 DTʁs+ta ~YgbIgyvm)TVub}mlm^k1<ؼOlG] B}1Cj|νQ?΍O2z*JZy(|JNelZBG>> =ے& å0+\4]^6?wss\d=e纽Ɂ<,=V6꟟t +j]Qp~ْ&%7Ka? t\xm]^t.0S_B i\וs HJ(J-5={c&fcaGێiZn[R% AA؉}Bw=㾗[eVf- @~@^2os}b"PD@K0YΐǾsC5a,)Lf>1prA=:w~ss [u7uh9A4_! h/< =†j3ؘBK~ίe-¹]8 r#!v4NlsEsGL6@*j@!(SfVx>Rpn|vV f_] .ѤkRD( $ }ɦF)#~M=\bKV& % ̤sWskq]KWph9v ?8M"o ⦩]YgHh9I y9gY0tyb==9oqQli=L/) t ֶ A5. t v{H~tm4XgE|o):zxx`z >v <[0&-W &u"u,JoH#$7}qѵw8c~3p]?=C4ha׺f?9W+ۀ:ЁܩHW5L `]迱G k9?;ew`# 7;VbjBm4qQ- eTI@\7V? s 3>AMDsy[ "uw.57/{/7Na;w9xd-MLM1f__utV?ihw%9tlHN)Ts n|nvMQ9/Ċ{z@ܔNc4-L秒+"_JϣL- LF>C VH @u6m/toQ5~2l{ ®7Nskq˚&.;?0H qm ~O8=?q㷗ap=<<{0vx/r+@JـBo$kTRGе  >v{A+>7MN/oxh E `:O tw+u_wF:*;mXBrE/ig]58}Bf0k۱Kuw\ x%7*dBPDQת( L+Q۶U.h_sqXO;g)l'>/t C4hbŷz~2ۑ=,h]U@HXvW܅#/ Qߗ#XqO>^ڰ`<P2!0{g%@X @™a=;h+Lm?R0prm1'I| =XZ 9v&r k>c*_6CBw-1^i-²{pp~o7pWU7vxqeTysʫB,ds! NYzn`t.lЋVҢ}_ـ6/ga|Q4z\i%a)h2,%\?8MGcz;1}ж0[pq>`뮞Uq$@ʯLNk Dbk=zys'.yx݂{/bl(-?}_ـū/!6u~Q׉`(}i.o`LƥK6'#u:~7vbww\#Dw5m0( ){ew%I#ѶwW0u/rJBC IDAT7,kx<1_klDFɯ?JbLvdNSm+3h& .uȍ0NĄbm]8N=&p~o A%\@〫%HED`?`mٳܝnB-Jt G?`>Wa%x7oqG>­Y[\9[&jaf!kF烙ٓHj/]sTգ~µ_Y][ᑃyw!4N5/Bת+kGUz/7 td8Z0'> e{eL?YF"0c9.m89l!Lv7?`K}M41Q>῰dR;?d<h[\NEXp];1#/aɭ]~t]WP $`hJnkLO4 ar% ow@ ܍|EX}B|vr ggc ztZ;&M49p:_]UoC|҆6uY_cz4"~Ko¡p11)tV};\?)iS XƒY! v$,5e*n+\9vX*2?D7t~AyZkX}vqs5`4qU%:̬}otH q] ^m N?č~ƎfqC8} ؏E7]iuPRoaqz@t>:1}Pmk.7p-7n+q!}6i= ,ԇD|u tlLeQlѹ{dL V_&cz X|K'oWqa~ŻэuGZ3TN Ueq?`Ў?Jـ8ZfV?8@MK~x(>|8NOvܰyZ]M2h",$ jJ緄̑6dA{fri4/7T)'}xٍC q>sN`C ^N `/&"sOP3[ Gvm nKcW|P@IlL_C':\2lA5[Oskq=ͱM\"Ė@*yJ?Ecz1ݗ+ n\'r8 N3c4EI@ȩh$niJWtV0A"f;@N'P*Ys(&.\Vt%܈SF8:7l;{_.!6Ŕ_87rs=ab_'ǮqEdžK/Ҙދ+ tnŝYC>Imhdž}QUpY9^z{[&"Ȟsk-ݏ8]JG#$YqPr +quGXvM~݁>4~vb pнjD&~kTUQјS1mk2h[4cz/wtcM8ysx?=Xm@ ,NDN8*PaI$rI+D6/[࣭'p87޷^DhDJkRyCt[ݘ^ٲ8ӛ^U¸~,uS8ug?Gb=nw<4N~XA.9y'ѵ.2ITQ(H[s/$y|=߼ o={LJǁ/õw.i+k_~c~03":5:{WG>7r:([7^Q*L ڑEЂZ@򵨐LV)db" e( "hp? c0z.Wn/vu>K\Cl٢F&[{^Uw7괇Ծ1hLK? kp矬wFq!;7t`ch]pSK>1To>cL4sMI\$`gV="jl;|b}xr]ؽ$} LwݼY) 4q٢A@5 Cmȝ,+h_76q@ ,܃ŷtpQ Iax_+Ś@]5$*݄iYߧV.P^ϥ)v iW/ 7ݿn[} ?<#{˰ŗhbPrRGiAX+$t'Hou&kelx|og463c#  Oopp2gB@B迭erdUw '%KhxHxq˰8uxywcʮK}M41VWqS0HohߐB pkD[ ~_ "3`/q}xZ|\ 6.*P1D# X0JX?R'[`D`vFd (1^+FѓCߺG !5/}v} Z&$0r-УbߢuEɥy[XM &yo5խ_Sq|RgrSX (` !3#9 €%nGQH%}~J W)~ZhmaтEko]0z>w_<]XMڤeea`$=A{Hr? \(k XX ؁581t(Y,uB,FO)7k'lH 3`46+)@,-K$@I"0-Y@ ̑? :aDB?%X=ЏY>2s'0t:Eѽ9dylf>q3Drqm]_0G'ψ5<)iC HՍum88CN,҉Do5% Z>" pѾGRVр!E&uտ#`\|춒WlP =lfʶWu]1 0F@̸Xw "5̑Q ɠoYw5)ؐ`F<ؼ E˂<D1q3DdR D6L.9. ]}(y-0x]a?œ;Hv{XtSǜ䎧XѲ@m XセDYH  .stX[@Jـme9BW"b?$@Kҟ I7-Si>2048{t ~{Lv|<ߡu`X IT I$B,,ApCLԣ ߚ(TtY }-Xr9!8m-GF'"/zp܊E> Ff)abgsq}Dzh[r2ShP? ?G9WV!0V֓Ībo!ƎK5D%&}y' 5Cr܊;E(@U8.&%׋'M,C\"pWVGT.׍D@pP D ]@$=>"7`km@B^s/o}DP%H1P趈OrYL?%5pӓ&\u meBol1c}{~RM48F' <{KAOlLNw;捸$I$ ,\=V*y*~ h%WZ#9?lG mLE~UH~`%Q{L ? Ic`0+?BJX0=Y=pZhS/\`LkCXw]́ DGAnI*}2?&.5>G<k= !? ]bK`Pp(1.2rCokm?(?6 Rdڏ_n97V@0U!\*{=BlLWZR0Y0V" F #C>V SCx]pMI.EO~Ob_' w"ܶ-ɇnW%.vW +TI`u#yж+e&ʊߔ:ژ?Z ̇ym٠!d:)16).ThTKV 7ϔMN-[;?  ?Ĥ3B.0oP,Hȑamtb#RRW8yY 8E6(V_rnGs7}i3Oab~C eSkrcg^h_oG%tKkR+j?w:~~x{ \5~Ag r]F~R:+s{_hL/eʍ~N7~r-r>i0>ы`4~gJ/"K/fexaSbnJKG `aW6Z::$skw&$;0ȊZϱ{O  =v;wKw̓ȝFվ2(b=b@eM.R}Eh+5B`{/Üw`'^QYJϑ$`` QT( TDdoc#%<}R/M6_!Rsy"-hݐ6QѢ, ,4&9@,# t@P\f/ L\FѾ@߀oױ`$?~/5@8@OE3[nZaeG IXȋ/[uC, ?u/2g&^N;?ڼZ>ZWwl?Kw{:WG?yI,AeU]e`0A=ʾ+RA:Epb{ÍqY=N>YM'eL&bF?[g`yg{6y8ڒ:x;6!\A߽-DM`,JQπ(xMX +; 6ii@-Y?`m/#)tIU~LkSW[<#?y6]OV0m'DؠW6ZQ[~R|?! nY451{H,(` Zs=YgQԪ3y蟼 x{ Kbi\XwD@ƞ)k+|9{}uu~  <&Md~0QeJϏ(gR2`l9ݲP- a=΁|mȯrG5߳  ?D>+Uq(! Ak`,sV8XVxcz{ޯݿw`/ <9T`ztWH 4!&K 1k"6P0DdI[@-XRV|K^(|'ujBc#'@)OHYa/ %{dgpc:rz~v7xqcƨ[P^='Tnj˶—9!ߔ0@&}v|ʝx LoΑdIÝ+51ibȈ,,t.딱[:N% k-YcZO{]H;b캚oA#cx^Kd 3jPR#0mg. _T-նF"mb! }d;aы )hHHـbMC (E!+h(DlG"I6v_z x V7q%ᩧ{;!d!lGkZW/ٲ珳'rZ/kwE~q[AI{݃1c`, Drha@Ŗ*&꣑;MLa{/Cl0>&0I{oؐcD5k0i(ɚĬI!%H$Tx ^MXVbu.oĀў6dY'hY'Ït[@0Z /Iz.PV8b%g5"*~ގJf^]y?RZX7qy[oφ-1R8d!1*$\H0&lB0!*Eu.G.>=0Ӵ&%&VPzPh ߲%l łCPFtܩo\8 NطC}Nxl@DFti0BKa`|:czY(&~*oo0NE:BqT#;W_8G*8 bw~d04g%r·LΗvO@V[Eh6*=Rz*|s6+vl>$6&:%LC*0쑆%m`CM._}=y9Ihs[z$̟?D~H^;brVX,XSV8I{ IDATӱBޘH}xC{n0`b2X &bM CfP␘Pgr@CQ׊aDAיId/i$*&&CDO[wK)1-{0d Ɛb(eEXzK.Iߢ3 VV}LJ_o_w m U(2HͱtV 4t=ү|_;w;`J@X酢H-/`I%g.#ů@ Hq(OQ*E!y/ ! Uaa)P9vX9Cea;aVx@[v όb/ Ǎ:9%4 b &Ln3hYʳyGxzk#Fy&ђiۖI(y/M\ݛĚEdBV6 T` hc`!!XL6x"~}0A=|3Gnr-Q8!(Ace~[޾?> }t#7D(ldzP(b IqHèH HyRcy!q ġXh'5 ݏ= Y+ЄZiN0ds5Aǻ~wۮ`hs&|R֏;cw w8`Dʱ&n+,KVazczKMѾ7H1o`mRY[!*'Ĕ38 TX̔<'8oYЂYC!"֚vsrf\0~ <}a?&@<[ h=.I6ۚYX),ľ!2!#aY Iw?/A-8?5PS:0~}~.;ס890ʧÅ%;y* ٮs95Ns_}H-ϖ]0؀ccCHP@1%X=2>Zx(.< IMbV$ aIe)x ɐbHX&Ya+ kmC"X+ SO@5zgK>Dgo!|m7w?w/&qPp@A'4&Rw±cÒ| q(+hB C@bZ(aZr/o6i=zÓ `m+<@ hdLŠ^ӫvd~6$_wLo`I UҬFq~E# IGyQ*`‣$S^hɆ>&C&J&D"O$m=LNʚar> U^z1 Ob}oDb$a$_$؄Xu*Fe-{kW O_5+*"*~. aR?) mݻCfnUㄸza@M fLAzI }yl0ETh]*5*+^ج&ڊ7aYy{R RMҾɷ۞݃OZx|زi ]G * a"t}Н' ktBsABM-#H6}s*;=I,E;\[+'$EAɄP~Eh+9ЇY5-0$tN[uot_-Cuv0I@~5ꉋ#&ņ(8\QC"gf أBh ,VI/Nn!d0d$BbbZ|$HX qbDbX&-V{m+IaoʢZwă7"Pݭ 57?8{E:]*+hkQYHgHQP!{Bx}Z$ۂe@`wdkYiI cbQ]6q$CFȀYh%2 a1K k}ݺ+8_J:5oPbpa;vx&cz1ݗ~|8|jϓBvV,@ RdS!T搈\Q <Jkz8ԚodZV_ OTI;Zm><A°GVX+:À`QBXh[b)چ.Ap>_-`.oGWF[~?Gc/D[ F6:о7q[17^um+T]F~x:#K #(@ "m==>id`UmA^Aٽp?S꿉Hݴw :-]pIACz"*Z k@a(#h5n1:Yӯ#'m?Zc!3a;wCݾ8vl4v? =_+5b:(=OjGDt祿8"2@}f B(B6dHȴ(c|?-PR v;+L)8s(ZhbOӡ()-1≱>Aֈ/$'~ Eo3`4!xI/Z)qs T490czzG*< T.,ip #4<ј7?|zp!xLoL*dE*KG{TS/DQW0#dVqȠPyGڳ0:ZI$`)+#njM ȝi`nBaZ|rG (Ì5q XIۄH# ]&t `:xow$f'%^ĉ@G`:hXo}oI;1W`ԝ"dg^/ss~ *)zYV>6Id(fΑ~N$` ;29 9Hr۰iUlBQ2zJaX&!b-{E>`F⡛D/TR% y8P co)~UwJ<9-9+ %LEX=SQYUȊˤ٣p<2ڃQZ(c<. ĂN)]ąB$P OP@I֜ 0&%Bql59ϑJ;?X_BIn ΧN:MNy xm^D&$@/G1c*^ފN~:-&C+>ew:ZH~&#`R/&YHT1ـrDp.Pcz6Fl&_r{BTVQ篠\w+/$piQ,Ą^R{ `26;ow)]k& %l(HXBJڦT(6Xs1 YOxƝ'}ڷ;fRV-eAD2Lb }H}a $21e{m_h+1z, 42w$bE+ Ş'5t~cF98R^kNhaKiX_uYΌiuscyEry(ʷy5,9E+ kbQ 7$4Qb;<, ( Q! =L&1[צ T߲Rr4eEq PY^(4R*+ EXѶt+}EB)bU@o߀r!&`f^8"plhI"+x!+ (h%K#EfX;0+~]9\yq QuƋ<2)(z-rmX <gI|2勼 h' Enp5@d&U\Ht?2$1Tq{PC!^% ]VEN6u~7ۤ⨨#$CZ tYqgN&M/rQ 8-'bj.rci(cE)- -r}+Hc8+>i SLuLyBnCw[If$*\Pi[&kW c ͫFш?T<͂\g t*QVRYJi*i<6GWfMZހjJC/|EԑNё;ݿHW- %{_'`*@-dak^/p/ؘޓ#+m8:GgfÍeDQI&hWϏm= YG^bzQpPx…Zj +bćDԗm>j֎ 'CחmY?`FczM) P}o`0{-zL}ou*Kc)K~r*Ky! 9W-i4&D-YF!:E[N3`,{H|6qIJ`9PP0ՍmhLoqK`_MH4TV8wTV3GY-SJTb4x,[e9hrNM:X%l{b35  jVph/R(}hVf Vk3!lӮS{LoiqT6Ԭ0|RqP@(ʒQ>鐭Ri޿@W;_:vؤs+±gkP[͢'`|7y5S+i_Ӎ|{"*k*F1`T0Dܬ*dŎM&pQSmH*NoӕS$w;eo+\؂(tV=71g^ۋ ; ő \%_0EqnΎ9Sޯ;۵Dl"| ~l <~5(6+OܰyYQاAо7qoܟ:;=[ْ1NB" ;cGJ*BTJC1$'cw{w޳sgwdΨ9o|/W6,l;wfW,2gC$񽥕eZ'%eN=7 hy~,_s0>5K(#L+ܻelepcq{bzE.4{;uH!75Gcf(bc4h+ϡ9"2r(&֊戩.%ʢl{e/?"kRq!^M]a|dvd)kSQ|1}qm`w>t >zfǘKkpӾZ.*b_YYcHT;O:zut6ѩt\tپzJps`1OL90;\]B量+c1.^h~4<=9j~JeSTi y2؆m2=L/rf;92 w54GVӳ:,<0Vvغ֭_=f=8+\ ;|hSݏ|맯 gIDATUW>ѽ5 BRe 9Yke!g\VU$ij.]?IISѩP$VN׷>'Uy.?}\q~w`|@qn w }0.M:`Qwe 6G\!;@ `"8;}wcwcy<֮}A#z—~F][w|TNM\oU0磕czǓ>.*IIj0I&NI1:]!j ea:1N>/WylwP*_Fdx|/r"SbzCsT Mma>6GWލ- {ĊwnlbuS[1}pFH lY8<9XƏp񟞅i_Y ^XYy29sa{+kӛrh fNѩdHduD*)<쳏o6{ڻcz[h|Y2 S##5Gړà`66Gl+czyE `J5aObkF"N|?8j2P+ڍot<'8z5q{/=Xo]5푕5 ;ZYC$*لEv5]::=Lov*= N#vx @4s֭nc)rϴ{nDϬtqcy'ZƉ/;ƿͯՙ~ g azGs0L#m`(lA4G3bz?^Nad;on/"ssO<{XpVߴv<8o|5G1^ʚțl9azKW4:]k~5;_NN~ClMiű/ǎm:]wצ}- halF1G9?-ԐcPalc>,YNuv5;[\vaR{aZ|7;_ֶO|0xZͱ.8yz7~^z{;X3֋Uhe+kVVA!bBKeʊ{#P5g˯Dji; i-䫛,S,a!؏ ߨízܶ0V3_zWFl K>tbzWhM+J l a; [0m8:W}Qp8u2ٞ;V ޞ5`zpxEneII[{`I3FaJDtD}%vXu5[tfF_}[eǿW5G3czCο 6` MgͤV\MNz;ί׫'1{:c37, >YZY)ف`z9?~c^pbS󅇳+{YYIIGQ{Pt6Ӟ%n  7.bd O ͯ>٘L?&W&{Ou1BZ9yUj˫ԗa !xk@kF.h?~:[;{=ż⯪|7A-"N*G)pʲ!+k_}+.wtetڏk[0{:~U>˱9#go@?P[bz#o!cԞYڸdeQK쵕e [Y%LoRaeNL`Lb1_tOm 믅V6km19"X&c1a6)#&j*9:P@.rWlL>w6kRhFw֞Dӏ9E9Lo8YY=LX5ZYf*y1~2vRQ՞GLd}66:Uദ";/jŔt .1t# #2hOjahG#g!ldLYb=L`k-r?VG@Zz u<ω ?,E7ZY=$L/V-ąrCfe%%% jWt;,>D*J/PswF)'?B25G0w&LnlP"nԸla'ՎURs]\jA&Oo'˟Li v?̆=VVRRx;<>:ͭ:zFtNVm>ONÙ69 B&6G1/=܇=с/J픭=0;;ڄ pf?D ޓ.9rT5a|/keyCnӛ-*++))i{ ;Y;-F~SwfIqCڷGHsaGLə5Gv=fY䕱"/⤬~XW7?+ >cge(x~,Օn'ZYJ T1ŌVV&%jitB4^2c[zIu0 o' er<7f 樻Gbz{6U/6V;M\)\3)c+1Eվm,=K\UUU%- 0so1cz¨7|ie\k*vx8:;mt}VSkCQH5PeUthdR"FmR6GW r~6G({|lckE@}Vz2T$`^6.%"tD&׮BLRalRke]-$+bgNaVE,"#AG8?6GM#M`z >Lo]L~PZq}ekZq"Z;;4hm/(bн"`i1a@(J8DŽA^ce azsUNgN}W+bՊP^ NwQ8"SjtLo]͘ґ(J c> dl.TMt>"GSvRRҐfNG=09iju,$0PP)`IB|=PNM(eY7k$WK6GG-.vo76d| [w>@gdj7d >\V8A b$g*RغV}V0*&hGѩoBjtZP_@3 gbsRIT*>92mcs,uttnx`œ; 3{ekCxX*R=BOF4bo3EX{:jG #*2հ_QC-Ha>DLoflPjON-S9;ۅEF+SR8ڻR>D8B3D++$/yuRRiS%HьU*VAWA~(Y3׈=;dӑ/fg%rf^lmF iEvXFUeOF!J i,)' frSbȨ5𬞌ti ()+3e+aƢMVVRR~kѩ-x2ި0#fu"̙cg"L~)h72!XΈQbVxVQsW20Yqpȯєӻ(݅tyTPdD+1+ (1)Aa=A3; \+X ak w @:PaXaɑyk d(xe%YYIIIWfNiw  #q['kHR\C"ge27Kz0TTTEB4MN 2T VQ@fRby\-єDtxTeptبB2p-KX=e_hfիu%sZ;sm2R0.l"ۂS'8`2TXzG֕6Wr1de%%%U=۴Qc̑Ad:;YeQSϴ)p+r);,v 6<-/xR.d5-٦rfi^EmMte%))ilХX{l;R,L#[ 5595j.f_9TBܷF~"I;?~-I;vA)`.*` LMMS project Projecte LMMS lmms-1.1.3/data/locale/000077500000000000000000000000001247673406200146475ustar00rootroot00000000000000lmms-1.1.3/data/locale/CMakeLists.txt000066400000000000000000000003241247673406200174060ustar00rootroot00000000000000FILE(GLOB QM_FILES *.qm) IF(LMMS_BUILD_WIN32) FILE(GLOB QT_QM_FILES "${QT_TRANSLATIONS_DIR}/qt*[^h].qm") ENDIF(LMMS_BUILD_WIN32) INSTALL(FILES ${QM_FILES} ${QT_QM_FILES} DESTINATION "${LMMS_DATA_DIR}/locale") lmms-1.1.3/data/locale/ca.qm000066400000000000000000003500261247673406200155770ustar00rootroot00000000000000**0*0!*0G_*0J*0*0`*01*0++>+?++C+į?/N'5f 6uz9giTD9kYT93KdVH@dW@TpE g5EZ)gF|BGGGDG uHi!H HNHzHzH'I;XIm Im)J+J<@!JJ%KGLbM5MMM"FN(!Obz*FPWt-PW2S}A\<S}C\~SU_6Sb_|T.YnTZN\TxxAUQ UjUjmVbNVbj2VbyVh'V2V]VpVwW rW y1WiWW$X SX-Z/Z/yZk$RZk.ZjZoĔZol[$[j \,]6 ]n^eq'l^er'iųzAių&ių4szyh tUhNtbhv=|}x}Ui~#W;)_ϙJ}Hjv\C4e3N7g)F7iy yק1f>ק3f@Q&On'ewJy bL b 6 C>6+z+unD"R2Ib7"Y9}b`9C ; M@۴_J" J+;MUT%OXOXkBP0b/VxZ;"VZ;+aUDw80~ uY t]NɄy-ʭi>o7(_\ՙծh\l8fv<^lߺ=oüo`;CB|\]Dlu{a3C^ (^B(^}F.: {RoZr%btͅ9F%ɛC?"?>?Mf3qh9>GGkt>u6gs~+ss=sBDu%iuI`3% :2Q8J:)y@HH>x*I[YRUOXUP~P~^Z.[]yv]YB2lh;lhm"ook|Z|Z2}"}\}^^~)~&Ő "ĩVy˗xk|%:#WWĽѫJ66&קAUקCUIքrjܗjBp q=왞B =չJY  0(1019m;:_<<s<<A U~EJM$1 Mt~Mк0Qq.}` `Œ`%`%`%kyd ZFg5Ihjzt8kJ-JrJw~e ww{ww,yT=yT{ Zz9DDxX:lFuuuEuuuuuIIFIIEi\>Zq+@+@^@@@A*A]AAA B) B\(u2inB%x4~ZՔ1E[22{(`AhhlVC u u7 @xTΎ!(}$0K|%C)%|-UV7e]G7e^7U]8G?~[Ez=lF^#lF^- H8EQmQxtZaE"a*nfS*hglG#ltlqpyd}o. AAAkq*k̂]Fc/wTn3j,-fffoz.t$t/GtmtÞ'Jn);|EUZ?<5[<5nd<5r<5u<5<52{<5is.ߺnPD}'ljkZCcN^ EE3WE_i=x#ECX'vM'v1UX1^6{=:gN:a2?[sC*qaC*|C*C*j M9.sN9u WjZ+[z[!lrgVzHz|'PPrtPu Px"-~#RFiV.#.-95!O5)2D`u77)("^=2R&A2yޔrXtiF7>t87d"q[f EJ zyeE) ) EYBa' )' )h)"v*Gr,D5n5t8}d;[<; >Z8:ILiUI UIZh[tV\X.czhFaiANm.w?>y %|y % >j>/>W22j]dcT^G)Hw2Q#8S L: MmUJsٚ$ϞlH-SEI-SE-SE-SE3h3hkU;G/0Gx!ЩQ6'S6NUgUuHUxc?YdRdRjDnqvSe5IJK"5J;&$6kHC!HC*t0d n l%U8UU<d*J0Ny'yyiJ^PZcJ aʩ#ʩ.]]beY $ " )8 6Ek 8e 8e 8e 9 ItY_ Il Mg T| Ys p,1 w%q w% xZ |b}, 3 O B1~[ b FI wO 7 *#+ I9Y ".g $ rH +L - * NJ1 Om STn| \ \ ]V m  m > m 29 u:^  $no t G ?* N N!N J+I VM hu 2#+ 2,} 8AC Ƶ8 ^ 4r ӗ` Y:* Y: Y: ~; i l h sH ʓ "Z( $&yI + + + O + i -#U -#k -, 4Yz].ad^vcgdyDOpzq<U`9d`9 Ș%WamzaNe ] |[z"c)37WCgD>0D0@I<U&Z +[x*o[oG^ E9l` m4&Ry,1F*$*/ tL,ӣƳZ]%^iQuant aAbout AboutDialogPANPANAmplifierControlDialogPanorama:Panning:AmplifierControlDialogVOLVOLAmplifierControlDialog Volum:Volume:AmplifierControlDialogPanoramaPanningAmplifierControls VolumVolumeAmplifierControls CANALSCHANNELSAudioAlsa::setupWidgetDISPOSITIUDEVICEAudioAlsa::setupWidgetAmplificar:Amplify:AudioFileProcessorViewPunt final: Endpoint:AudioFileProcessorViewSi actives aquest bot, la mostra sencera ser invertida. Aix s til per a efectes interessants, p.e. un xoc invertit.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView"Obre altra mostraOpen other sampleAudioFileProcessorView Inverteix mostraReverse sampleAudioFileProcessorViewPunt inicial: Startpoint:AudioFileProcessorView CANALSCHANNELSAudioJack::setupWidgetNOM-CLIENT CLIENT-NAMEAudioJack::setupWidget CANALSCHANNELSAudioOss::setupWidgetDISPOSITIUDEVICEAudioOss::setupWidgetDISPOSITIUDEVICEAudioPortAudio::setupWidget CANALSCHANNELSAudioPulseAudio::setupWidgetDISPOSITIUDEVICEAudioPulseAudio::setupWidgetDISPOSITIUDEVICEAudioSdl::setupWidget&&Copia valor (%1%2)&Copy value (%1%2)AutomatableModel*&Enganxa valor (%1%2)&Paste value (%1%2)AutomatableModel &Restaura (%1%2) &Reset (%1%2)AutomatableModel2Connecta a controlador...Connect to controller...AutomatableModelConnectat a %1Connected to %1AutomatableModel.Connectat a controladorConnected to controllerAutomatableModel"Edita connexi...Edit connection...AutomatableModel6Edita automatitzaci globalEdit song-global automationAutomatableModel Elimina connexiRemove connectionAutomatableModelrTots els valors seleccionats s'han copiat al portapapers.1All selected values were copied to the clipboard.AutomationEditor8Editor d'Automatitzaci - %1Automation Editor - %1AutomationEditorJEditor d'Automatitzaci - sense patrAutomation Editor - no patternAutomationEditorLCopia els valors seleccionats (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditorLTalla els valors seleccionats (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor*Mode dibuixar (Maj+D)Draw mode (Shift+D)AutomationEditor*Mode esborrar (Maj+E)Erase mode (Shift+E)AutomationEditorVEnganxa valors des del portapapers (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorPReprodueix/pausa el patr actual (Espai)"Play/pause current pattern (Space)AutomationEditorPer favor, obre un patr d'automatitzaci amb el men contextual d'un control!EPlease open an automation pattern with the context menu of a control!AutomationEditorZAtura la reproducci del patr actual (Espai)'Stop playing of current pattern (Space)AutomationEditorValors copiats Values copiedAutomationEditorCanvia nom Change nameAutomationPatternView BuidaClearAutomationPatternView Desconnecta "%1"Disconnect "%1"AutomationPatternView@Obre a l'Editor d'automatitzaciOpen in Automation editorAutomationPatternViewRestaura nom Reset nameAutomationPatternViewpica dos cops per a obrir aquest patr a l'editor d'automatitzaci6double-click to open this pattern in automation editorAutomationPatternViewFREQFREQBassBoosterControlDialogFreqncia: Frequency:BassBoosterControlDialog GUANYGAINBassBoosterControlDialog Guany:Gain:BassBoosterControlDialogPROPORCIRATIOBassBoosterControlDialogProporci:Ratio:BassBoosterControlDialogFreqncia FrequencyBassBoosterControls GuanyGainBassBoosterControlsProporciRatioBassBoosterControlsControlador %1 Controller %1 Controller,Detecta automticament Auto DetectControllerConnectionDialog CANALCHANNELControllerConnectionDialogCONTROLADOR CONTROLLERControllerConnectionDialogCancellaCancelControllerConnectionDialog0Configuraci de ConnexiConnection SettingsControllerConnectionDialogCanal d'entrada Input channelControllerConnectionDialog*Controlador d'entradaInput controllerControllerConnectionDialog"FUNCI DE MAPATGEMAPPING FUNCTIONControllerConnectionDialog CONTROLADOR MIDIMIDI CONTROLLERControllerConnectionDialogdDispositius MIDI des d'on rebre esdeveniments MIDI(MIDI-devices to receive MIDI-events fromControllerConnectionDialogD'acordOKControllerConnectionDialog(CONTROLADOR D'USUARIUSER CONTROLLERControllerConnectionDialogAfegeixAddControllerRackView2Prestatge de ControladorsController RackControllerRackView &Ajuda&HelpControllerView,&Treu aquest connector&Remove this pluginControllerViewControlsControlsControllerView\Introdueix el nou nom per a aquest controlador&Enter the new name for this controllerControllerView:Canvia el nom del controladorRename controllerControllerView2x Passa-Baixa 2x LowPassDualFilterControlsPassa-TotAllpassDualFilterControlsPassa-Banda csg BandPass csgDualFilterControls Passa-Banda czpg BandPass czpgDualFilterControlsPassa-AltaHiPassDualFilterControlsPassa-BaixaLowPassDualFilterControlsMoogMoogDualFilterControlsOscaNotchDualFilterControlsDecamentDecayEffect Efecte habilitatEffect enabledEffect PortaGateEffectMescla Moll/Sec Wet/Dry mixEffect CADENA D'EFECTES EFFECTS CHAINEffectRackView &Ajuda&Help EffectView,&Treu aquest connector&Remove this plugin EffectViewControlsControls EffectViewDECAMENTDECAY EffectView PORTAGATE EffectView Porta:Gate: EffectViewMou a&vall Move &down EffectViewMou a&muntMove &up EffectViewEncs/ApagatOn/Off EffectViewLa roda Porta controla el nivell de senyal que s considerat 'silenci' mentre es decideix quan aturar de processar senyals.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectView Temps:Time: EffectView.Encn o apaga l'efecte.Toggles the effect on or off. EffectViewM/SW/D EffectViewNivell de Moll: Wet Level: EffectViewDecamentDecayEnvelopeAndLfoParametersFreq x 100 Freq x 100EnvelopeAndLfoParametersModula AmplitudModulate Env-AmountEnvelopeAndLfoParametersQUAAMTEnvelopeAndLfoViewATACATTEnvelopeAndLfoView Atac:Attack:EnvelopeAndLfoViewfPica aqu per a que aquest OBF controli l'amplitud.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewRETDELEnvelopeAndLfoViewDecament:Decay:EnvelopeAndLfoViewArrossega una mostra d'on sigui i amolla-la en aquesta finestra.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoViewMANTHOLDEnvelopeAndLfoViewConsellHintEnvelopeAndLfoViewManteniment:Hold:EnvelopeAndLfoViewMODULA AMPLITUDMODULATE ENV-AMOUNTEnvelopeAndLfoView.Quantitat de modulaci:Modulation amount:EnvelopeAndLfoViewPreretard: Predelay:EnvelopeAndLfoViewALLRELEnvelopeAndLfoViewAlliberament:Release:EnvelopeAndLfoViewVELSPDEnvelopeAndLfoViewSOSTSUSTEnvelopeAndLfoViewSosteniment:Sustain:EnvelopeAndLfoView@Usa aquesta roda per a ajustar el temps d'atac de l'OBF actual. Quan ms gran aquest valor, ms temps necessita l'OBF per a augmentar la seva amplitud al mxim.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewUsa aquesta roda per a ajustar el temps d'atac de l'envoltant actual. Quan ms gran aquest valor, ms temps necessita l'envoltant per a augmentar cap al nivell d'atac. Escull un valor petit per a instruments com el piano i un valor gran per a corda.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewUsa aquesta roda per a ajustar el temps de decament de l'envoltant actual. Quan ms gran aquest valor, ms temps necessita l'envoltant per a reduir des del nivell d'atac fins al de sosteniment. Escull un valor petit per a instruments com el piano.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewUsa aquesta roda per a ajustar el temps de manteniment de l'envoltant actual. Quan ms gran aquest valor, ms temps mant l'envoltant el nivell d'atac abans de comenar a reduir cap al nivell de sosteniment.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewhUsa aquesta roda per a ajustar la quantitat de modulaci de l'OBF actual. Quan ms gran aquest valor, ms influir l'OBF la magnitud seleccionada (p.e. volum o freqncia de tall).Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewUsa aquesta roda per a ajustar la quantitat de modulaci de l'envoltant actual. Quan ms gran aquest valor, ms influir l'envoltant la magnitud corresponent (p.e. volum o freqncia de tall).Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView$Usa aquesta roda per a ajustar el preretard de l'envoltant actual. Quan ms gran aquest valor, major el temps abans de comenar l'envoltant en s.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView*Usa aquesta roda per a ajustar el temps de preretard de l'OBF actual. Quan ms gran aquest valor, major el temps abans que l'OBF comenci a oscillar.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewUsa aquesta roda per a ajustar el temps d'alliberament de l'envoltant actual. Quan ms gran aquest valor, ms temps necessita l'envoltant per a disminuir des del nivell de sosteniment a zero. Escull un valor gran per a instruments suaus com els de corda.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewUsa aquesta roda per a ajustar la velocitat de l'OBF actual. Quan ms gran aquest valor, ms rpid oscilla l'OBF i ms rpid ser l'efecte.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoViewTUsa aquesta roda per a ajustar el nivell de sosteniment de l'envoltant actual. Quan ms gran aquest valor, a major nivell roman l'envoltant abans de disminuir cap a zero.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoViewDamplitud controlada per aquest OBF#control envelope-amount by this LFOEnvelopeAndLfoViewms/OBF:ms/LFO:EnvelopeAndLfoViewCancellaCancelExportProjectDialogSortidaOutputExportProjectDialog &Ajuda&HelpFxLine FX %1FX %1FxMixer MestreMasterFxMixerVIntrodueix el nou nom per a aquest canal FX&Enter the new name for this FX channel FxMixerViewMesclador FXFX-Mixer FxMixerView4Canvia el nom del canal FXRename FX channel FxMixerView ApagaMuteFxMixerView::FxChannelView"Direcci d'arpegiArpeggio directionInstrumentFunctionArpeggioPorta d'arpegi Arpeggio gateInstrumentFunctionArpeggioMode d'arpegi Arpeggio modeInstrumentFunctionArpeggioRang d'arpegiArpeggio rangeInstrumentFunctionArpeggioTemps d'arpegi Arpeggio timeInstrumentFunctionArpeggioTipus d'arpegi Arpeggio typeInstrumentFunctionArpeggio LliureFreeInstrumentFunctionArpeggio OrdenaSortInstrumentFunctionArpeggioSincSyncInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioView ARPEGIARPEGGIOInstrumentFunctionArpeggioViewPorta d'arpegi:Arpeggio gate:InstrumentFunctionArpeggioViewRang d'arpegi:Arpeggio range:InstrumentFunctionArpeggioViewTemps d'arpegi:Arpeggio time:InstrumentFunctionArpeggioViewDirecci: Direction:InstrumentFunctionArpeggioView PORTAGATEInstrumentFunctionArpeggioView Mode:Mode:InstrumentFunctionArpeggioViewRANGRANGEInstrumentFunctionArpeggioView TEMPSTIMEInstrumentFunctionArpeggioViewUsa aquesta roda per a ajustar el temps d'arpegi en millisegons. El temps d'arpegi especifica la durada de cada nota de l'arpegi.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoctava(es) octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11&m911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13&o913#9InstrumentFunctionNoteStacking 13&m5&m913b5b9InstrumentFunctionNoteStacking13&m913b9InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking 6add96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7&o117#11InstrumentFunctionNoteStacking7&o57#5InstrumentFunctionNoteStacking 7&o5&o97#5#9InstrumentFunctionNoteStacking 7&o5&m97#5b9InstrumentFunctionNoteStacking7&o97#9InstrumentFunctionNoteStacking 7ms117add11InstrumentFunctionNoteStacking 7ms137add13InstrumentFunctionNoteStacking7&m57b5InstrumentFunctionNoteStacking 7&m5&m97b5b9InstrumentFunctionNoteStacking7&m97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9&o119#11InstrumentFunctionNoteStacking9&o59#5InstrumentFunctionNoteStacking9&m139b13InstrumentFunctionNoteStacking9&m59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStackingEoliAeolianInstrumentFunctionNoteStacking ArbicArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingRang d'acord Chord rangeInstrumentFunctionNoteStackingTipus d'acord Chord typeInstrumentFunctionNoteStackingDisminut DiminishedInstrumentFunctionNoteStackingBebop dominantDominant bebopInstrumentFunctionNoteStacking DricDorianInstrumentFunctionNoteStackingEnigmtic EnigmaticInstrumentFunctionNoteStackingHarmnic menorHarmonic minorInstrumentFunctionNoteStackingHongars menorHungarian minorInstrumentFunctionNoteStackingJap in sen Jap in senInstrumentFunctionNoteStacking LocriLocrianInstrumentFunctionNoteStackingLidiLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7&o11Maj7#11InstrumentFunctionNoteStacking Maj7&o5Maj7#5InstrumentFunctionNoteStackingMaj7ms13 Maj7add13InstrumentFunctionNoteStacking Maj7&m5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9&o11Maj9#11InstrumentFunctionNoteStacking Maj9&o5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStackingMajor&m5Majb5InstrumentFunctionNoteStacking MajorMajorInstrumentFunctionNoteStackingBebop major Major bebopInstrumentFunctionNoteStacking Pentatnic majorMajor pentatonicInstrumentFunctionNoteStackingMeldic menor Melodic minorInstrumentFunctionNoteStacking Pentatnic menorMinor pentatonicInstrumentFunctionNoteStackingMixolidi MixolydianInstrumentFunctionNoteStackingNeopolit NeopolitanInstrumentFunctionNoteStackingNeopolit menorNeopolitan minorInstrumentFunctionNoteStackingFrigolidi PhrygolydianInstrumentFunctionNoteStackingTo sencer Whole toneInstrumentFunctionNoteStackingms9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7ms11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7ms13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6ms9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7ms11m7add11InstrumentFunctionNoteStackingm7ms13m7add13InstrumentFunctionNoteStackingm7&m5m7b5InstrumentFunctionNoteStackingm7&m9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9&m5m9b5InstrumentFunctionNoteStacking mms9madd9InstrumentFunctionNoteStackingmenor&m5minb5InstrumentFunctionNoteStacking menorminorInstrumentFunctionNoteStacking octavaoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStackingRang d'acord: Chord range:"InstrumentFunctionNoteStackingViewRANGRANGE"InstrumentFunctionNoteStackingViewoctava(es) octave(s)"InstrumentFunctionNoteStackingView CANALCHANNELInstrumentMidiIOView2x Passa-Baixa 2x LowPassInstrumentSoundShapingPassa-TotAllpassInstrumentSoundShapingPassa-Banda csg BandPass csgInstrumentSoundShaping Passa-Banda czpg BandPass czpgInstrumentSoundShapingFREQ TALLCUTOFFInstrumentSoundShapingTipus de filtre Filter typeInstrumentSoundShapingPassa-AltaHiPassInstrumentSoundShapingPassa-BaixaLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShapingOscaNotchInstrumentSoundShapingQ/Ressonncia Q/ResonanceInstrumentSoundShaping VOLUMVOLUMEInstrumentSoundShaping VolumVolumeInstrumentSoundShaping FILTREFILTERInstrumentSoundShapingViewFREQFREQInstrumentSoundShapingViewHAqu pots seleccionar el filtre integrat que vols usar per a aquesta pista d'instrument. Els filtres sn molt importants per a canviar les caracterstiques d'un so.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRessonncia: Resonance:InstrumentSoundShapingViewOBJECTIUTARGETInstrumentSoundShapingViewNota base Base noteInstrumentTrackCanal FX FX channelInstrumentTrackPanoramaPanningInstrumentTrackToPitchInstrumentTrack VolumVolumeInstrumentTracknAmb aquesta roda pots ajustar el volum del canal obert. + clic del mig)#Mute/unmute ( + middle click) SampleTCOViewEnganxaPaste SampleTCOViewRpica dos cops per a seleccionar la mostradouble-click to select sample SampleTCOViewPista de mostra Sample track SampleTrack VolumVolume SampleTrackVolum de canal:Channel volume:SampleTrackViewVolum de pista Track volumeSampleTrackViewVOLVOLSampleTrackView<Afegeix pista d'automatitzaciAdd automation-track SongEditor$Afegeix ritme baseAdd beat/bassline SongEditor.Afegeix pista de mostraAdd sample-track SongEditor.Pica aqu si vols reproduir la can sencera. La reproducci comenar al marcador de posici de can (verd). Tamb pots moure'l mentre es reprodueix.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorPica aqu si vols aturar la reproducci de la can. El marcador de posici de can ser collocat a l'inici de la can.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor2No es pot obrir el fitxerCould not open file SongEditor8No es pot escriure el fitxerCould not write file SongEditorMode dibuixar Draw mode SongEditor<Mode editar (selecciona i mou)Edit mode (select and move) SongEditor$Mode alta qualitatHigh quality mode SongEditorTo mestre Master pitch SongEditorVolum mestre Master volume SongEditor0Reprodueix can (Espai)Play song (Space) SongEditorEditor de Can Song-Editor SongEditor&Atura can (Espai)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditor$Valor: %1 semitonsValue: %1 semitones SongEditorValor: %1% Value: %1% SongEditorto mestre master pitch SongEditorvolum mestre master volume SongEditortempo de can tempo of song SongEditorEix Y lineal Linear Y axisSpectrumAnalyzerControlDialogEspectre linealLinear spectrumSpectrumAnalyzerControlDialogMode del canal Channel modeSpectrumAnalyzerControlsEix Y lineal Linear Y axisSpectrumAnalyzerControlsEspectre linealLinear spectrumSpectrumAnalyzerControls &Ajuda&Help TempoSyncKnob16 de nota 16th note TempoSyncKnob32 de nota 32nd note TempoSyncKnob8 de nota8th note TempoSyncKnobPersonalitzat Custom  TempoSyncKnob Personalitzat... Custom... TempoSyncKnobVuit batecs Eight beats TempoSyncKnobMitja nota Half note TempoSyncKnobSense SincNo Sync TempoSyncKnobQuart de nota Quarter note TempoSyncKnob4Sincronitzat a 16 de NotaSynced to 16th Note TempoSyncKnob4Sincronitzat a 32 de NotaSynced to 32nd Note TempoSyncKnob2Sincronitzat a 8 de NotaSynced to 8th Note TempoSyncKnob4Sincronitzat a Vuit BatecsSynced to Eight Beats TempoSyncKnob2Sincronitzat a Mitja NotaSynced to Half Note TempoSyncKnob8Sincronitzat a Quart de NotaSynced to Quarter Note TempoSyncKnob6Sincronitzat a Nota SenceraSynced to Whole Note TempoSyncKnobSinc Tempo Tempo Sync TempoSyncKnobNota sencera Whole note TempoSyncKnobCancellaCancelTrackContainer*No es pot trobar un filtre per a importar el fitxer %1. Hauries de convertir aquest fitxer a un format suportat per LMMS utilitzant altre programari.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer8No es pot importar el fitxerCouldn't import fileTrackContainer2No es pot obrir el fitxerCouldn't open fileTrackContainerNo es pot llegir el fitxer %1. Per favor, assegura't que tens perms de lectura per al fitxer i el directori que el cont i torna-ho a provar!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer.Important fitxer FLP...Importing FLP-file...TrackContainer0Important fitxer MIDI...Importing MIDI-file...TrackContainer*Carregant projecte...Loading project...TrackContainer(Per favor, espera...Please wait...TrackContainer<Desafinament gruixut d'osc %1:Osc %1 coarse detuning:TripleOscillatorViewDDesafinament fi esquerre d'osc %1:Osc %1 fine detuning left:TripleOscillatorView<Desafinament fi dret d'osc %1:Osc %1 fine detuning right:TripleOscillatorView$Panorama d'osc %1:Osc %1 panning:TripleOscillatorView*Desfasament d'osc %1:Osc %1 phase-offset:TripleOscillatorView:Desfasament estreo d'osc %1:Osc %1 stereo phase-detuning:TripleOscillatorViewVolum d'osc %1:Osc %1 volume:TripleOscillatorView~Amb aquesta roda pots ajustar el desafinament gruixut de l'oscillador %1. Pots desafinar l'oscillador 12 semitons (1 octava) cap a dalt i a baix. Aix s til per a crear sons amb un acord.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewAmb aquesta roda pots ajustar el desafinament fi de l'oscillador %1 per al canal esquerre. El desafinament fi est graduat entre -100 cents i +100 cents. Aix s til per a crear sons "gruixuts".With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewAmb aquesta roda pots ajustar el desafinament fi de l'oscillador %1 per al canal dret. El desafinament fi est graduat entre -100 cents i +100 cents. Aix s til per a crear sons "gruixuts".With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewRAmb aquesta roda pots ajustar el panorama de l'oscillador %1. Un valor de -100 significa 100% a l'esquerra i un valor de 100 mou la sortida de l'oscillador a la dreta.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewTAmb aquesta roda pots ajustar el desfasament de l'oscillador %1. Aix significa que pots moure el punt d'una oscillaci on l'oscillador comena a oscillar. Per exemple, si tens una ona sinusodal amb un desfasament de 180 graus, l'ona anir primer cap a baix. s el mateix amb una ona quadrada.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorViewXAmb aquesta roda pots ajustar el volum de l'oscillador %1. Quan poses un valor de 0 l'oscillador s'apaga. Altrament, pots sentir l'oscillador tan alt com l'ajustis aqu.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorView centscentsTripleOscillatorView grausdegreesTripleOscillatorViewsemitons semitonesTripleOscillatorViewPica aqu per a mostrar o amagar la interfcie grfica d'usuari (GUI) del connector VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentView"Pica aqu si vols obrir un altre connector VST. Desprs de picar aquest bot, apareix un dileg d'obrir fitxers i pots seleccionar el teu fitxer.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentView&Fitxers DLL (*.dll)DLL-files (*.dll)VestigeInstrumentView&Fitxers EXE (*.exe)EXE-files (*.exe)VestigeInstrumentView4Cap connector VST carregatNo VST-plugin loadedVestigeInstrumentView$Obre connector VSTOpen VST-pluginVestigeInstrumentView0Obre altre connector VSTOpen other VST-pluginVestigeInstrumentView*Apaga totes les notesTurn off all notesVestigeInstrumentView&Carregant connectorLoading plugin VstPluginNormalitza Normalize WatsynViewOna sinusodal Sine wave WatsynViewSuavitzaSmooth WatsynViewOna quadrada Square wave WatsynViewOna triangular Triangle wave WatsynViewFREQFREQZynAddSubFxViewRESRESZynAddSubFxViewAmplificarAmplifyaudioFileProcessorFi de la mostra End of sampleaudioFileProcessorMode Bucle Loop modeaudioFileProcessor Inverteix mostraReverse sampleaudioFileProcessor$Inici de la mostraStart of sampleaudioFileProcessor<Afegeix pista d'automatitzaciAdd automation-trackbbEditor*Afegeix ritme de baseAdd beat/basslinebbEditorAfegeix passos Add stepsbbEditor(Editor de Ritme BaseBeat+Bassline EditorbbEditorZReprodueix/pausa el ritme base actual (Espai)(Play/pause current beat/bassline (Space)bbEditorElimina passos Remove stepsbbEditorCanvia color Change color bbTCOViewCanvia nom Change name bbTCOView:Obre a l'Editor de Ritme BaseOpen in Beat+Bassline-Editor bbTCOViewRestaura nom Reset name bbTCOViewRitme base %1Beat/Bassline %1bbTrack$Longitud de mostra Samplelength bitInvaderRPica aqu per a suavitzar la forma d'ona.Click here to smooth waveform.bitInvaderViewInterpolaci InterpolationbitInvaderViewNormalitza NormalizebitInvaderView*Longitud de la Mostra Sample LengthbitInvaderViewOna de serraSaw wavebitInvaderViewOna sinusodal Sine wavebitInvaderViewSuavitzaSmoothbitInvaderViewOna quadrada Square wavebitInvaderViewOna triangular Triangle wavebitInvaderViewOna arbitrriaUser defined wavebitInvaderView&Ona de soroll blancWhite noise wavebitInvaderView2No es pot obrir el fitxerCould not open fileexportProjectDialog<No es pot obrir el fitxer %1 per a escriure. Per favor, assegura't que tens perms d'escriptura per al fitxer i el directori que el cont i torna-ho a provar!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog ErrorErrorexportProjectDialogError determinant el dispositiu de codificaci de fitxer. Per favor, prova amb un format de sortida diferent.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog*Exporta projecte a %1Export project to %1exportProjectDialog"Representant: %1%Rendering: %1%exportProjectDialogbPer favor, introdueix un nou valor entre %1 i %2:+Please enter a new value between %1 and %2:fader Freqncia final End frequencykickerInstrument GuanyGainkickerInstrument$Freqncia inicialStart frequencykickerInstrument"Freqncia final:End frequency:kickerInstrumentView Guany:Gain:kickerInstrumentView&Freqncia inicial:Start frequency:kickerInstrumentView &Ajuda&HelpknobbPer favor, introdueix un nou valor entre %1 i %2:+Please enter a new value between %1 and %2:knobzPer favor, introdueix un nou valor entre -96,0 dBV i 6,0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knobEines d'AnlisiAnalysis ToolsladspaBrowserView&Efectes DisponiblesAvailable EffectsladspaBrowserViewDesconeguts Don't knowladspaBrowserViewInstruments InstrumentsladspaBrowserView|Aquest dileg mostra informaci de tots els connectors LADSPA que LMMS ha pogut trobar. Els connectors estan dividits en cinc categories basades en la interpretaci dels tipus i noms dels ports. Efectes Disponibles sn aquells que LMMS pot usar. Per a que LMMS pugui usar un efecte, primerament, ha de ser un efecte, s a dir, ha de tenir canals d'entrada i de sortida. LMMS identifica un canal d'entrada com a un port d'udio que cont 'in' al nom. Els canals de sortida sn identificats amb les lletres 'out'. A ms, l'efecte ha de tenir el mateix nombre d'entrades que de sortides i ser capa de temps real. Efectes No Disponibles sn aquells que han estat identificats com a efectes, per no tenen el mateix nombre d'entrades que de sortides o no sn capaos de temps real. Instruments sn connectors on noms s'han identificat canals de sortida. Eines d'Anlisi sn connectors on noms s'han identificat canals d'entrada. Desconeguts sn connectors on no s'han identificat canals d'entrada o sortida. Fent doble clic a qualsevol connector mostrar informaci sobre els ports.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView Tipus:Type:ladspaBrowserView,Efectes No DisponiblesUnavailable EffectsladspaBrowserViewDescripci DescriptionladspaDescriptionConnectorsPluginsladspaDescription udioAudioladspaPortDialogControlControlladspaPortDialogDirecci DirectionladspaPortDialogFlotantFloatladspaPortDialogEntradaInputladspaPortDialog EnterIntegerladspaPortDialogLogartmic LogarithmicladspaPortDialog&Mn < Defecte < MxMin < Default < MaxladspaPortDialogNomNameladspaPortDialogSortidaOutputladspaPortDialog PortsPortsladspaPortDialogTaxaRateladspaPortDialogDepenent SR SR DependentladspaPortDialogCommutatToggledladspaPortDialog TipusTypeladspaPortDialogSYesladspaPortDialogFiltre 24dB/oct24dB/oct Filter lb302Synth AccentAccent lb302SynthMortDead lb302SynthDistorsi Distortion lb302SynthLliscamentSlide lb302Synth.Decament de Lliscament Slide Decay lb302Synth,Freqncia de Tall VCFVCF Cutoff Frequency lb302Synth.Decament Envoltant VCFVCF Envelope Decay lb302Synth"Mod Envoltant VCFVCF Envelope Mod lb302SynthRessonncia VCF VCF Resonance lb302SynthForma d'onaWaveform lb302SynthL303-es-que, 24dB/octava, filtre 3 pols&303-es-que, 24dB/octave, 3 pole filterlb302SynthViewFreq Tall: Cutoff Freq:lb302SynthView DIST:DIST:lb302SynthViewDecament:Decay:lb302SynthViewMod Env:Env Mod:lb302SynthViewRessonncia: Resonance:lb302SynthViewOna de serraSaw wavelb302SynthViewOna sinusodal Sine wavelb302SynthView0Decament de Lliscament: Slide Decay:lb302SynthViewOna quadrada Square wavelb302SynthViewOna triangular Triangle wavelb302SynthView&Ona de soroll blancWhite noise wavelb302SynthViewFiltre 24dB/oct24dB/oct Filter lb303Synth AccentAccent lb303SynthMortDead lb303SynthDistorsi Distortion lb303SynthLliscamentSlide lb303Synth.Decament de Lliscament Slide Decay lb303Synth,Freqncia de Tall VCFVCF Cutoff Frequency lb303Synth.Decament Envoltant VCFVCF Envelope Decay lb303Synth"Mod Envoltant VCFVCF Envelope Mod lb303SynthRessonncia VCF VCF Resonance lb303SynthForma d'onaWaveform lb303SynthL303-es-que, 24dB/octava, filtre 3 pols&303-es-que, 24dB/octave, 3 pole filterlb303SynthViewTALLCUTlb303SynthViewFreq Tall: Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthView DIST:DIST:lb303SynthViewDecament:Decay:lb303SynthViewMOD ENVENV MODlb303SynthViewMod Env:Env Mod:lb303SynthViewRESRESlb303SynthViewRessonncia: Resonance:lb303SynthView LLISCASLIDElb303SynthView0Decament de Lliscament: Slide Decay:lb303SynthViewONAWAVElb303SynthViewONA:WAVE:lb303SynthViewADSRADSRmalletsInstrument AgogoAgogomalletsInstrument BatecsBeatsmalletsInstrumentDoblegatBowedmalletsInstrumentGrupClumpmalletsInstrumentEntremescla CrossfademalletsInstrumentCristallGlassmalletsInstrument DuresaHardnessmalletsInstrumentProfunditat OBF LFO DepthmalletsInstrumentVelocitat OBF LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrumentFitxers absents Missing filesmalletsInstrumentModulador ModulatormalletsInstrumentMovimentMotionmalletsInstrumentPosiciPositionmalletsInstrumentPressiPressuremalletsInstrumentResoResomalletsInstrumentVelocitatSpeedmalletsInstrumentDispersiSpreadmalletsInstrumentMescla de Pals Stick MixmalletsInstrumentBol Tibet Tibetan BowlmalletsInstrument"Campanes Tubulars Tubular BellsmalletsInstrumentBarra Afinada Tuned BarmalletsInstrumentFixat a Dos Two FixedmalletsInstrumentBarra Uniforme Uniform BarmalletsInstrumentVibrfon VibraphonemalletsInstrumentFreq de Vibrat Vibrato FreqmalletsInstrumentGuany de Vibrat Vibrato GainmalletsInstrument Fusta1Wood1malletsInstrument Fusta2Wood2malletsInstrumentLa installaci de Stk sembla estar incompleta. Assegura't de que el paquet complet Stk est installat!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR:ADSR:malletsInstrumentViewDoblegatBowedmalletsInstrumentViewEntremescla CrossfademalletsInstrumentViewEntremescla: Crossfade:malletsInstrumentView DuresaHardnessmalletsInstrumentViewDuresa: Hardness:malletsInstrumentViewInstrument InstrumentmalletsInstrumentViewProfunditat OBF LFO DepthmalletsInstrumentView Profunditat OBF: LFO Depth:malletsInstrumentViewVelocitat OBF LFO SpeedmalletsInstrumentViewVelocitat OBF: LFO Speed:malletsInstrumentViewModulador ModulatormalletsInstrumentViewModulador: Modulator:malletsInstrumentViewMovimentMotionmalletsInstrumentViewMoviment:Motion:malletsInstrumentViewPosiciPositionmalletsInstrumentViewPosici: Position:malletsInstrumentViewPressiPressuremalletsInstrumentViewPressi: Pressure:malletsInstrumentViewVelocitatSpeedmalletsInstrumentViewVelocitat:Speed:malletsInstrumentViewDispersiSpreadmalletsInstrumentViewDispersi:Spread:malletsInstrumentViewMescla de Pals Stick MixmalletsInstrumentViewMescla de Pals: Stick Mix:malletsInstrumentViewFreq VibVib FreqmalletsInstrumentViewFreq Vib: Vib Freq:malletsInstrumentViewGuany VibVib GainmalletsInstrumentViewGuany Vib: Vib Gain:malletsInstrumentView VibratVibratomalletsInstrumentViewVibrat:Vibrato:malletsInstrumentView &Ajuda&HelpnineButtonSelector PedaPatchopl2instrumentDistorsi DistortionorganicInstrument VolumVolumeorganicInstrumentDistorsi: Distortion:organicInstrumentView$Panorama d'osc %1:Osc %1 panning:organicInstrumentViewVolum d'osc %1:Osc %1 volume:organicInstrumentView*Forma d'ona d'osc %1:Osc %1 waveform:organicInstrumentViewAleatoritza RandomiseorganicInstrumentView Volum:Volume:organicInstrumentView centscentsorganicInstrumentViewXSintetitzador Additiu per a sons com d'orgue*Additive Synthesizer for organ-like sounds pluginBrowser`Filtre per a importar projectes FL Studio a LMMS1Filter for importing FL Studio projects into LMMS pluginBrowserRFiltre per a importar fitxers MIDI a LMMS)Filter for importing MIDI-files into LMMS pluginBrowserDInstrument de peda compatible GUSGUS-compatible patch instrument pluginBrowserHImitaci monofnica incompleta tb303%Incomplete monophonic imitation tb303 pluginBrowser.Connectors d'instrumentInstrument plugins pluginBrowserHLlista connectors LADSPA installatsList installed LADSPA plugins pluginBrowser\Connector per a controlar rodes amb pics de so-Plugin for controlling knobs with sound peaks pluginBrowserZConnector per a millorar la separaci estreo=Plugin for enhancing stereo separation of a stereo input file pluginBrowsernConnector per a manipular lliurement la sortida estreo,Plugin for freely manipulating stereo output pluginBrowserBCoses meldiques per a fer sorollTuneful things to bang on pluginBrowserdservidor VST per a usar connectors VST(i) amb LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser4Modelador de corda vibrantVibrating string modeler pluginBrowser sense descripcino description pluginBrowserlconnector per a usar efectes LADSPA arbitraris a LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowser&Negreta&Bold projectNotes&Color... &Color... projectNotes &Copia&Copy projectNotesCurs&iva&Italic projectNotes&Justifica&Justify projectNotes&Esquerra&Left projectNotes&Enganxa&Paste projectNotes &Refs&Redo projectNotes &Dreta&Right projectNotes&Subratllat &Underline projectNotes&Desfs&Undo projectNotesCen&treC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotes &TallaCu&t projectNotes Accions d'Editar Edit Actions projectNotes"Accions de FormatFormat Actions projectNotes$Notes del projecte Project notes projectNotesREscriu aqu les teves notes del projecte.!Put down your project notes here. projectNotes Canvia el nom... Rename... renameDialog$INTERFCIE D'UDIOAUDIO INTERFACE setupDialog8Directori de material grficArtwork directory setupDialog(Configuraci d'udioAudio settings setupDialog4MIDA DE MEMRIA INTERMDIA BUFFER SIZE setupDialogCancellaCancel setupDialog^Escull el directori d'installaci de FL Studio'Choose FL Studio installation directory setupDialogPEscull un directori de connectors LADSPAChoose LADSPA plugin directory setupDialogLEscull el directori de treball de LMMSChoose LMMS working directory setupDialogHEscull el directori d'ones crues STKChoose STK rawwave directory setupDialogLEscull el directori de material grficChoose artwork-theme directory setupDialogREscull el teu directori de connectors VST Choose your VST-plugin directory setupDialog\Comprimeix per defecte els fitxers de projecte"Compress project files per default setupDialog,Mostra el volum en dBVDisplay volume as dBV  setupDialog0Activa els avisos d'einaEnable tooltips setupDialogJDirectori d'installaci de FL Studio FL Studio installation directory setupDialog2Marcs: %1 Latncia: %2 msFrames: %1 Latency: %2 ms setupDialog(Configuraci generalGeneral settings setupDialogXMode AQ per al dispositiu de sortida d'udioHQ-mode for output audio-device setupDialogAqu pots seleccionar la teva interfcie MIDI preferida. Depenent de la configuraci del teu sistema durant el temps de compilaci, pots escollir entre ALSA, OSS i ms. Abaix pots veure una caixa amb controls per a configurar la interfcie MIDI seleccionada.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialog"Aqu pots seleccionar la teva interfcie d'udio preferida. Depenent de la configuraci del teu sistema durant el temps de compilaci, pots escollir entre ALSA, JACK, OSS i altres. Abaix pots veure una caixa amb controls per a configurar la interfcie d'udio seleccionada.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialogAqu pots configurar la mida de la memria intermdia interna usada per LMMS. Els valors ms petits donen menor latncia per tamb poden causar so inservible o baix rendiment, especialment a ordinadors antics o sistemes amb un nucli sense temps real.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog8Directori de treball de LMMSLMMS working directory setupDialogINTERFCIE MIDIMIDI INTERFACE setupDialog"Configuraci MIDI MIDI settings setupDialogMISCMISC setupDialogD'acordOK setupDialog2Configuraci de rendimentPerformance settings setupDialogPer favor, tingues en compte que la majoria de canvis no s'aplicaran fins que reinicis LMMS!GPlease note that most changes won't take effect until you restart LMMS! setupDialog:Restaura al valor per defecteReset to default-value setupDialogReinicia LMMS Restart LMMS setupDialog4Directori d'ones crues STKSTK rawwave directory setupDialog(Configuraci de LMMS Setup LMMS setupDialogvMostra l'avs de reinici desprs de canviar la configuraci,Show restart warning after changing settings setupDialog0Efectes UI vs. rendimentUI effects vs. performance setupDialog6Directori de connectors VSTVST-plugin directory setupDialogBancBank sf2InstrumentCorChorus sf2Instrument$Profunditat de Cor Chorus Depth sf2InstrumentNivell de Cor Chorus Level sf2InstrumentLnies de Cor Chorus Lines sf2Instrument Velocitat de Cor Chorus Speed sf2Instrument GuanyGain sf2Instrument PedaPatch sf2InstrumentReverberaciReverb sf2Instrument8Esmortement de ReverberaciReverb Damping sf2Instrument,Nivell de Reverberaci Reverb Level sf2Instrument,Cambra de ReverberaciReverb Roomsize sf2Instrument.Amplada de Reverberaci Reverb Width sf2Instrument:Aplica cor (si est suportat)Apply chorus (if supported)sf2InstrumentViewLAplica reverberaci (si est suportat)Apply reverb (if supported)sf2InstrumentViewEscull el pedaChoose the patchsf2InstrumentView&Profunditat de Cor: Chorus Depth:sf2InstrumentViewNivell de Cor: Chorus Level:sf2InstrumentViewLnies de Cor: Chorus Lines:sf2InstrumentView"Velocitat de Cor: Chorus Speed:sf2InstrumentViewRPica aqu per a obrir un altre fitxer SF2#Click here to open another SF2 filesf2InstrumentView GuanyGainsf2InstrumentView*Obre fitxer SoundFontOpen SoundFont filesf2InstrumentView6Obre altre fitxer SoundFontOpen other SoundFont filesf2InstrumentView:Esmortement de Reverberaci:Reverb Damping:sf2InstrumentView.Nivell de Reverberaci: Reverb Level:sf2InstrumentView.Cambra de Reverberaci:Reverb Roomsize:sf2InstrumentView0Amplada de Reverberaci: Reverb Width:sf2InstrumentViewAquest bot habilita l'efecte de cor. Aix aconsegueix efectes d'eco genials, per noms funciona amb fitxers que ho suportin.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewAquest bot habilita l'efecte de reverberaci. Aix aconsegueix efectes genials, per noms funciona amb fitxers que ho suportin.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewTipus de filtre Filter type sidInstrument VolumVolume sidInstrument Atac:Attack:sidInstrumentViewDecament:Decay:sidInstrumentViewAlliberament:Release:sidInstrumentViewRessonncia: Resonance:sidInstrumentViewSosteniment:Sustain:sidInstrumentViewSincSyncsidInstrumentView Volum:Volume:sidInstrumentViewImporta fitxer Import filesongTo mestre Master pitchsongVolum mestre Master volumesong$Projecte NO desat.Project NOT saved.songProjecte desat Project savedsongXSelecciona fitxer per a exportar projecte...!Select file for project-export...song TempoTemposong4El projecte %1 est desat.The project %1 is now saved.song:El projecte %1 no est desat!The project %1 was not saved!songsense ttoluntitledsong AMPLEWIDEstereoEnhancerControlDialogAmplada:Width:stereoEnhancerControlDialogAmpladaWidthstereoEnhancerControls4Volum Esquerra a Esquerra:Left to Left Vol:stereoMatrixControlDialog.Volum Esquerra a Dreta:Left to Right Vol:stereoMatrixControlDialog.Volum Dreta a Esquerra:Right to Left Vol:stereoMatrixControlDialog(Volum Dreta a Dreta:Right to Right Vol:stereoMatrixControlDialog&Esquerra a Esquerra Left to LeftstereoMatrixControls Esquerra a Dreta Left to RightstereoMatrixControls Dreta a Esquerra Right to LeftstereoMatrixControlsDreta a DretaRight to RightstereoMatrixControlsJDesprs d'aturar torna al comenamentAfter stopping go back to begintimeLineDesprs d'aturar torna a la posici on va comenar la reproducci?After stopping go back to position at which playing was startedtimeLineBDesprs d'aturar mant la posiciAfter stopping keep positiontimeLineBActiva/desactiva autodesplaamentEnable/disable auto-scrollingtimeLine>Activa/desactiva punts de bucleEnable/disable loop-pointstimeLineConsellHinttimeLineSoloSolotrack*%1:%2 (%3:%4 a %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView CopiaCopytrackContentObjectViewLongitud actualCurrent lengthtrackContentObjectViewPosici actualCurrent positiontrackContentObjectView TallaCuttrackContentObjectViewBEsborra (bot del mig del ratol)Delete (middle mousebutton)trackContentObjectViewConsellHinttrackContentObjectViewFApaga/encn (<Ctrl> + clic del mig)#Mute/unmute ( + middle click)trackContentObjectViewEnganxaPastetrackContentObjectViewZPitja <Ctrl> i arrossega per a fer una cpia.%Press and drag to make a copy.trackContentObjectViewXPitja <Ctrl> per a redimensionar lliurement.Press for free resizing.trackContentObjectView6Accions per a aquesta pistaActions for this tracktrackOperationsWidget&Clona aquesta pistaClone this tracktrackOperationsWidget ApagaMutetrackOperationsWidget&Apaga aquesta pistaMute this tracktrackOperationsWidgetPitja <Ctrl> quan piquis el control de moviment per a iniciar una nova acci d'arrossegar i amollar.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget*Elimina aquesta pistaRemove this tracktrackOperationsWidgetSoloSolotrackOperationsWidgetLHa fallat la crrega del connector VSTFailed loading VST-pluginvestigeInstrument&Carregant connectorLoading pluginvestigeInstrumentnPer favor, espera mentre es carrega el connector VST...'Please wait while loading VST-plugin...vestigeInstrument:El connector VST %1 no s'ha pogut carregar per alguna ra. Si funciona amb altre programari VST sota Linux, per favor contacta amb un desenvolupador de LMMS!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentDesafinament %1 Detune %1vibedArrissada %1 Fuzziness %1 vibedImpuls %1 Impulse %1vibedLongitud %1 Length %1vibedOctava %1 Octave %1vibedPanorama %1Pan %1vibed,Posici per a tocar %1Pick %1 positionvibed2Posici per a recollir %1Pickup %1 positionvibed(Rigidesa de corda %1String %1 stiffnessvibed"Volum de corda %1String %1 volumevibed &Ajuda&Help vibedViewdPica aqu per a activar/desactivar la forma d'ona.&Click here to enable/disable waveform. vibedViewVPica aqu per a normalitzar la forma d'ona.!Click here to normalize waveform. vibedViewRPica aqu per a suavitzar la forma d'ona.Click here to smooth waveform. vibedViewDesafinament:Detune: vibedView(Habilita forma d'onaEnable waveform vibedViewArrissada: Fuzziness: vibedViewEditor d'ImpulsImpulse Editor vibedView,Impuls o estat inicialImpulse or initial state vibedViewLongitud:Length: vibedViewNormalitza Normalize vibedView OctavaOctave vibedViewPanorama:Pan: vibedView(Posici per a tocar:Pick position: vibedView.Posici per a recollir:Pickup position: vibedViewOna de serraSaw wave vibedViewOna sinusodal Sine wave vibedViewSuavitzaSmooth vibedViewOna quadrada Square wave vibedView CordaString vibedView$Rigidesa de corda:String stiffness: vibedView,El selector 'Imp' determina si la forma d'ona del grfic s'ha de tractar com un impuls impartit a la corda quan es toca o l'estat inicial de la corda.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewLa roda 'P' ajusta la posici on ser tocada la corda seleccionada. Quan ms baix el valor, es toca ms a prop del pont.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewFLa roda 'PU' ajusta la posici on les vibracions seran monitoritzades per a la corda seleccionada. Quan ms baix aquest valor, la recollida s ms a prop del pont.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewVLa roda 'S' ajusta la rigidesa de la corda seleccionada. La rigidesa de la corda afecta el temps que la corda ressonar. Quan ms baix el valor, ms temps sonar la corda.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewjLa roda 'V' ajusta el volum de la corda seleccionada.4The 'V' knob sets the volume of the selected string. vibedView`La roda Detune modifica el to de la corda seleccionada. Valors menors que zero faran que la corda soni amb bemoll. Valors majors que zero faran que la corda soni amb sostingut.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedView\La roda Length ajusta la longitud de la corda seleccionada. Les cordes ms llargues sonaran a la vegada ms temps i ms brillants, emper tamb es menjaran ms cicles de CPU.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewTEl selector Octava s'usa per a escollir a quin harmnic de la nota la corda sonar. Per exemple, '-2' significa que la corda sonar dues octaves per sota de la fonamental, 'F' significa que la corda sonar a la fonamental, i '6' significa que la corda sonar sis octaves per sobre de la fonamental.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewLa roda Pan determina la localitzaci de la corda seleccionada al camp estreo.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewTLa roda Slap afegeix una mica d'arrissada a la corda seleccionada que s ms notable durant l'atac, encara que tamb pot usar-se per a que la corda soni ms 'metllica'.The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewEl selector String s'usa per a escollir quina corda estan editant els controls. Un instrument Vibed pot tenir fins a nou cordes vibrants independents. El LED a la cantonada dreta baixa de l'editor de forma d'ona indica si la corda seleccionada est activa.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedView^L'editor de forma d'ona dna control sobre l'estat inicial o impuls que s'utilitza per a iniciar la corda vibrant. Els botons de la dreta del grfic inicialitzaran la forma d'ona al tipus seleccionat. El bot '?' carregar la forma d'ona des d'un fitxer; noms es carregaran les primeres 128 mostres. La forma d'ona tamb pot dibuixar-se al grfic. El bot 'S' suavitzar la forma d'ona. El bot 'N' normalitzar la forma d'ona.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedViewOna triangular Triangle wave vibedViewOna arbitrriaUser defined wave vibedViewpVibed modela fins a nou cordes vibrants independents. El selector 'String' et permet escollir quina corda s'est editant. El selector 'Imp' escull si el grfic representa un impuls o l'estat inicial de la corda. El selector 'Octave' escull a quin harmnic la corda ha de vibrar. El grfic et permet controlar l'estat inicial o impuls usat per a posar la corda en marxa. La roda 'V' controla el volum. La roda 'S' controla la rigidesa de la corda. La roda 'P' controla la posici per a tocar. La roda 'PU' controla la posici per a recollir. Probablement no cal explicar 'Pan' i 'Detune'. La roda 'Slap' afegeix una mica d'arrissada al so de la corda. La roda 'Length' controla la longitud de la corda. El LED a la cantonada dreta baixa de l'editor de forma d'ona determina si la corda est activa a l'instrument actual.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedView Volum:Volume: vibedView&Ona de soroll blancWhite noise wave vibedViewpica per a activar/desactivar la visualitzaci de la sortida mestra6click to enable/disable visualization of master-outputvisualizationWidgetlmms-1.1.3/data/locale/ca.ts000066400000000000000000011215601247673406200156100ustar00rootroot00000000000000 AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About Quant a LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL VOL Volume: Volum: PAN PAN Panning: Panorama: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Volum Panning Panorama Left gain Right gain AudioAlsa::setupWidget DEVICE DISPOSITIU CHANNELS CANALS AudioFileProcessorView Open other sample Obre altra mostra Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample Inverteix mostra If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Si actives aquest botó, la mostra sencera serà invertida. Això és útil per a efectes interessants, p.e. un xoc invertit. Amplify: Amplificar: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: Punt inicial: Endpoint: Punt final: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME NOM-CLIENT CHANNELS CANALS AudioOss::setupWidget DEVICE DISPOSITIU CHANNELS CANALS AudioPortAudio::setupWidget BACKEND DEVICE DISPOSITIU AudioPulseAudio::setupWidget DEVICE DISPOSITIU CHANNELS CANALS AudioSdl::setupWidget DEVICE DISPOSITIU AutomatableModel &Reset (%1%2) &Restaura (%1%2) &Copy value (%1%2) &Copia valor (%1%2) &Paste value (%1%2) &Enganxa valor (%1%2) Edit song-global automation Edita automatització global Connected to %1 Connectat a %1 Connected to controller Connectat a controlador Edit connection... Edita connexió... Remove connection Elimina connexió Connect to controller... Connecta a controlador... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Reprodueix/pausa el patró actual (Espai) Stop playing of current pattern (Space) Atura la reproducció del patró actual (Espai) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. Draw mode (Shift+D) Mode dibuixar (Maj+D) Erase mode (Shift+E) Mode esborrar (Maj+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) Talla els valors seleccionats (Ctrl+X) Copy selected values (Ctrl+C) Copia els valors seleccionats (Ctrl+C) Paste values from clipboard (Ctrl+V) Enganxa valors des del portapapers (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern Editor d'Automatització - sense patró Automation Editor - %1 Editor d'Automatització - %1 Please open an automation pattern with the context menu of a control! Per favor, obre un patró d'automatització amb el menú contextual d'un control! Values copied Valors copiats All selected values were copied to the clipboard. Tots els valors seleccionats s'han copiat al portapapers. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor pica dos cops per a obrir aquest patró a l'editor d'automatització Open in Automation editor Obre a l'Editor d'automatització Clear Buida Reset name Restaura nom Change name Canvia nom %1 Connections Disconnect "%1" Desconnecta "%1" Set/clear record AutomationTrack Automation track BassBoosterControlDialog FREQ FREQ Frequency: Freqüència: GAIN GUANY Gain: Guany: RATIO PROPORCIÓ Ratio: Proporció: BassBoosterControls Frequency Freqüència Gain Guany Ratio Proporció CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Controlador %1 ControllerConnectionDialog Connection Settings Configuració de Connexió MIDI CONTROLLER CONTROLADOR MIDI Input channel Canal d'entrada CHANNEL CANAL Input controller Controlador d'entrada CONTROLLER CONTROLADOR Auto Detect Detecta automàticament MIDI-devices to receive MIDI-events from Dispositius MIDI des d'on rebre esdeveniments MIDI USER CONTROLLER CONTROLADOR D'USUARI MAPPING FUNCTION FUNCIÓ DE MAPATGE OK D'acord Cancel Cancel·la LMMS Cycle Detected. ControllerRackView Controller Rack Prestatge de Controladors Add Afegeix Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Controls Controllers are able to automate the value of a knob, slider, and other controls. Rename controller Canvia el nom del controlador Enter the new name for this controller Introdueix el nou nom per a aquest controlador &Remove this plugin &Treu aquest connector &Help &Ajuda DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass Passa-Baixa HiPass Passa-Alta BandPass csg Passa-Banda csg BandPass czpg Passa-Banda czpg Notch Osca Allpass Passa-Tot Moog Moog 2x LowPass 2x Passa-Baixa RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Efecte habilitat Wet/Dry mix Mescla Moll/Sec Gate Porta Decay Decaïment EffectChain Effects enabled EffectRackView EFFECTS CHAIN CADENA D'EFECTES Add effect EffectSelectDialog Add effect Plugin description EffectView Toggles the effect on or off. Encén o apaga l'efecte. On/Off Encès/Apagat W/D M/S Wet Level: Nivell de Moll: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY DECAÏMENT Time: Temps: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE PORTA Gate: Porta: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. La roda Porta controla el nivell de senyal que és considerat 'silenci' mentre es decideix quan aturar de processar senyals. Controls Controls Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Mou a&munt Move &down Mou a&vall &Remove this plugin &Treu aquest connector &Help &Ajuda EnvelopeAndLfoParameters Predelay Attack Hold Decay Decaïment Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Freq x 100 Modulate Env-Amount Modula Amplitud EnvelopeAndLfoView DEL RET Predelay: Preretard: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Usa aquesta roda per a ajustar el preretard de l'envoltant actual. Quan més gran aquest valor, major el temps abans de començar l'envoltant en sí. ATT ATAC Attack: Atac: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Usa aquesta roda per a ajustar el temps d'atac de l'envoltant actual. Quan més gran aquest valor, més temps necessita l'envoltant per a augmentar cap al nivell d'atac. Escull un valor petit per a instruments com el piano i un valor gran per a corda. HOLD MANT Hold: Manteniment: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Usa aquesta roda per a ajustar el temps de manteniment de l'envoltant actual. Quan més gran aquest valor, més temps manté l'envoltant el nivell d'atac abans de començar a reduir cap al nivell de sosteniment. DEC DEC Decay: Decaïment: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Usa aquesta roda per a ajustar el temps de decaïment de l'envoltant actual. Quan més gran aquest valor, més temps necessita l'envoltant per a reduir des del nivell d'atac fins al de sosteniment. Escull un valor petit per a instruments com el piano. SUST SOST Sustain: Sosteniment: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Usa aquesta roda per a ajustar el nivell de sosteniment de l'envoltant actual. Quan més gran aquest valor, a major nivell roman l'envoltant abans de disminuir cap a zero. REL ALL Release: Alliberament: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Usa aquesta roda per a ajustar el temps d'alliberament de l'envoltant actual. Quan més gran aquest valor, més temps necessita l'envoltant per a disminuir des del nivell de sosteniment a zero. Escull un valor gran per a instruments suaus com els de corda. AMT QUA Modulation amount: Quantitat de modulació: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Usa aquesta roda per a ajustar la quantitat de modulació de l'envoltant actual. Quan més gran aquest valor, més influirà l'envoltant la magnitud corresponent (p.e. volum o freqüència de tall). LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Usa aquesta roda per a ajustar el temps de preretard de l'OBF actual. Quan més gran aquest valor, major el temps abans que l'OBF comenci a oscil·lar. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Usa aquesta roda per a ajustar el temps d'atac de l'OBF actual. Quan més gran aquest valor, més temps necessita l'OBF per a augmentar la seva amplitud al màxim. SPD VEL LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Usa aquesta roda per a ajustar la velocitat de l'OBF actual. Quan més gran aquest valor, més ràpid oscil·la l'OBF i més ràpid serà l'efecte. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Usa aquesta roda per a ajustar la quantitat de modulació de l'OBF actual. Quan més gran aquest valor, més influirà l'OBF la magnitud seleccionada (p.e. volum o freqüència de tall). Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT MODULA AMPLITUD Click here to make the envelope-amount controlled by this LFO. Pica aquí per a que aquest OBF controli l'amplitud. control envelope-amount by this LFO amplitud controlada per aquest OBF ms/LFO: ms/OBF: Hint Consell Drag a sample from somewhere and drop it in this window. Arrossega una mostra d'on sigui i amolla-la en aquesta finestra. Click here for random wave. ExportProjectDialog Export project Output Sortida File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel Cancel·la Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &Ajuda FxMixer Master Mestre FX %1 FX %1 FxMixerView Rename FX channel Canvia el nom del canal FX Enter the new name for this FX channel Introdueix el nou nom per a aquest canal FX FX-Mixer Mesclador FX FxMixerView::FxChannelView FX Fader %1 Mute Apaga Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio type Tipus d'arpegi Arpeggio range Rang d'arpegi Arpeggio time Temps d'arpegi Arpeggio gate Porta d'arpegi Arpeggio direction Direcció d'arpegi Arpeggio mode Mode d'arpegi Up Down Up and down Random Free Lliure Sort Ordena Sync Sinc Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPEGI An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE RANG Arpeggio range: Rang d'arpegi: octave(s) octava(es) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME TEMPS Arpeggio time: Temps d'arpegi: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Usa aquesta roda per a ajustar el temps d'arpegi en mil·lisegons. El temps d'arpegi especifica la durada de cada nota de l'arpegi. GATE PORTA Arpeggio gate: Porta d'arpegi: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: Direcció: Mode: Mode: InstrumentFunctionNoteStacking octave octava Major Major Majb5 Major♭5 minor menor minb5 menor♭5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 6add9 m6 m6 m6add9 m6més9 7 7 7sus4 7sus4 7#5 7♯5 7b5 7♭5 7#9 7♯9 7b9 7♭9 7#5#9 7♯5♯9 7#5b9 7♯5♭9 7b5b9 7♭5♭9 7add11 7més11 7add13 7més13 7#11 7♯11 Maj7 Maj7 Maj7b5 Maj7♭5 Maj7#5 Maj7♯5 Maj7#11 Maj7♯11 Maj7add13 Maj7més13 m7 m7 m7b5 m7♭5 m7b9 m7♭9 m7add11 m7més11 m7add13 m7més13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7més11 m-Maj7add13 m-Maj7més13 9 9 9sus4 9sus4 add9 més9 9#5 9♯5 9b5 9♭5 9#11 9♯11 9b13 9♭13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9♯5 Maj9#11 Maj9♯11 m9 m9 madd9 mmés9 m9b5 m9♭5 m9-Maj7 m9-Maj7 11 11 11b9 11♭9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13♯9 13b9 13♭9 13b5b9 13♭5♭9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Harmònic menor Melodic minor Melòdic menor Whole tone To sencer Diminished Disminuït Major pentatonic Pentatònic major Minor pentatonic Pentatònic menor Jap in sen Jap in sen Major bebop Bebop major Dominant bebop Bebop dominant Blues Blues Arabic Aràbic Enigmatic Enigmàtic Neopolitan Neopolità Neopolitan minor Neopolità menor Hungarian minor Hongarès menor Dorian Dòric Phrygolydian Frigolidi Lydian Lidi Mixolydian Mixolidi Aeolian Eoli Locrian Locri Chords Chord type Tipus d'acord Chord range Rang d'acord Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE RANG Chord range: Rang d'acord: octave(s) octava(es) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL CANAL VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME VOLUM Volume Volum CUTOFF FREQ TALL Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Tipus de filtre Q/Resonance Q/Ressonància LowPass Passa-Baixa HiPass Passa-Alta BandPass csg Passa-Banda csg BandPass czpg Passa-Banda czpg Notch Osca Allpass Passa-Tot Moog Moog 2x LowPass 2x Passa-Baixa RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET OBJECTIU These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER FILTRE Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Aquí pots seleccionar el filtre integrat que vols usar per a aquesta pista d'instrument. Els filtres són molt importants per a canviar les característiques d'un so. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Ressonància: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track pista_sense_nom Volume Volum Panning Panorama Pitch To FX channel Canal FX Default preset With this knob you can set the volume of the opened channel. Amb aquesta roda pots ajustar el volum del canal obert. Base note Nota base Pitch range InstrumentTrackView Volume Volum Volume: Volum: VOL VOL Panning Panorama Panning: Panorama: PAN PAN MIDI MIDI Input Entrada Output Sortida InstrumentTrackWindow GENERAL SETTINGS CONFIGURACIÓ GENERAL Instrument volume Volum d'instrument Volume: Volum: VOL VOL Panning Panorama Panning: Panorama: PAN PAN Pitch To Pitch: To: cents cents PITCH TO FX channel Canal FX ENV/LFO ENV/OBF FUNC FUNC FX FX MIDI MIDI Save preset XML preset file (*.xpf) PLUGIN CONN Pitch range (semitones) RANGE RANG Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Enllaça canals LadspaControlDialog Link Channels Enllaça Canals Channel Canal LadspaControlView Link channels Enllaça canals Value: Valor: Sorry, no help available. Ajuda no disponible. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: LfoController LFO Controller Controlador OBF Base value Valor base Oscillator speed Velocitat d'oscil·lador Oscillator amount Amplitud d'oscil·lador Oscillator phase Fase d'oscil·lador Oscillator waveform Forma d'ona d'oscil·lador Frequency Multiplier Multiplicador de Freqüència LfoControllerDialog LFO OBF LFO Controller Controlador OBF BASE BASE Base amount: Amplitud base: todo todo SPD VEL LFO-speed: Velocitat OBF: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Usa aquesta roda per a ajustar la velocitat de l'OBF. Quan més gran aquest valor, més ràpid oscil·la l'OBF i més ràpid serà l'efecte. AMT QUA Modulation amount: Quantitat de modulació: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS FAS Phase offset: Desfasament: degrees graus With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file No s'ha pogut desar el fitxer de configuració Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. No s'ha pogut desar el fitxer de configuració %1. Per favor, comprova que tens permís d'escriptura per a aquest fitxer i torna-ho a provar. &Project &Projecte &New &Nou &Open... &Obre... Recently opened projects Projectes oberts recentment &Save &Desa Save &As... &Anomena i desa... Import... Importa... E&xport... E&xporta... &Quit &Surt &Edit &Edita Settings Configuració &Tools E&ines &Help &Ajuda Online help Ajuda en línia Help Ajuda What's this? Què és això? About Quant a Create new project Crea nou projecte Create new project from template Crea nou projecte des de plantilla Open existing project Obre projecte existent Recently opened project Projecte obert recentment Save current project Desa projecte actual Export current project Exporta projecte actual Show/hide Song-Editor Mostra/amaga Editor de Cançó By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor Mostra/amaga Editor de Ritme Base By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll Mostra/amaga Rotlle de Piano Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor Mostra/amaga Editor d'Automatització Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer Mostra/amaga Mesclador FX Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes Mostra/amaga les notes del projecte Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack Untitled Sense títol LMMS %1 LMMS %1 Project not saved Projecte no desat The current project was modified since last saving. Do you want to save it now? El projecte actual ha estat modificat des del darrer desament. Vols desar-lo ara? Open project Obre projecte Save project Desa projecte Help not available Ajuda no disponible Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Actualment no hi ha ajuda disponible a LMMS. Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Numerador de Mesurador Meter Denominator Denominador de Mesurador TIME SIG COMPÀS MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE DISPOSITIU MidiAlsaSeq::setupWidget DEVICE DISPOSITIU MidiController MIDI Controller unnamed_midi_controller controlador_midi_sense_nom MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE DISPOSITIU MidiPort Input channel Canal d'entrada Output channel Canal de sortida Input controller Controlador d'entrada Output controller Controlador de sortida Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Rep esdeveniments MIDI Send MIDI-events Envia esdeveniments MIDI Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Volum mestre Vibrato Vibrat OscillatorObject Osc %1 volume Volum d'osc %1 Osc %1 panning Panorama d'osc %1 Osc %1 coarse detuning Desafinament gruixut d'osc %1 Osc %1 fine detuning left Desafinament fi esquerre d'osc %1 Osc %1 fine detuning right Desafinament fi dret d'osc %1 Osc %1 phase-offset Desfasament d'osc %1 Osc %1 stereo phase-detuning Desfasament estèreo d'osc %1 Osc %1 wave shape Forma d'ona d'osc %1 Modulation type %1 Tipus de modulació %1 Osc %1 waveform Forma d'ona d'osc %1 Osc %1 harmonic PatmanView Open other patch Obre altre pedaç Click here to open another patch-file. Loop and Tune settings are not reset. Pica aquí per a obrir un altre fitxer pedaç. La configuració de Bucle i Afina no es reinicia. Loop Bucle Loop mode Mode Bucle Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Aquí pots canviar el mode Bucle. Si és actiu, PatMan farà servir la informació de bucle disponible al fitxer. Tune Afina Tune mode Mode Afina Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Aquí pots canviar el mode Afina. Si és actiu, PatMan afinarà la mostra a la freqüència de la nota. No file selected Cap fitxer seleccionat Open patch file Obre fitxer pedaç Patch-Files (*.pat) Fitxers Pedaç (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step pica dos cops per a obrir aquest patró al rotlle de piano usa la roda del ratolí per a ajustar el volum d'un pas Open in piano-roll Obre al rotlle de piano Clear all notes Esborra totes les notes Reset name Restaura nom Change name Canvia nom Add steps Afegeix passos Remove steps Elimina passos PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK PIC LFO Controller Controlador OBF PeakControllerEffectControlDialog BASE BASE Base amount: Amplitud base: Modulation amount: Quantitat de modulació: Attack: Atac: Release: Alliberament: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Valor base Modulation amount Quantitat de modulació Mute output Apaga la sortida Attack Release Abs Value Amount Multiplicator PianoRoll Cut selected notes (Ctrl+X) Talla les notes seleccionades (Ctrl+X) Copy selected notes (Ctrl+C) Copia les notes seleccionades (Ctrl+C) Paste notes from clipboard (Ctrl+V) Enganxa notes des del portapapers (Ctrl+V) Play/pause current pattern (Space) Reprodueix/pausa el patró actual (Espai) Stop playing of current pattern (Space) Atura la reproducció del patró actual (Espai) Piano-Roll - no pattern Rotlle de Piano - sense patró Please open a pattern by double-clicking on it! Per favor, obre un patró picant-lo dos cops! Piano-Roll - %1 Rotlle de Piano - %1 Record notes from MIDI-device/channel-piano Enregistra notes des d'un dispositiu MIDI o piano de canal Last note Darrera nota Draw mode (Shift+D) Mode dibuixar (Maj+D) Erase mode (Shift+E) Mode esborrar (Maj+E) Select mode (Shift+S) Mode seleccionar (Maj+S) Record notes from MIDI-device/channel-piano while playing song or BB track Enregistra notes des d'un dispositiu MIDI o piano de canal mentre es reprodueix la cançó o pista RB Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: PianoView Base note Nota base Plugin Plugin not found Connector no trobat The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Error while loading plugin Error en carregar el connector Failed to load plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Fitxer WAV (*.wav) Compressed OGG-File (*.ogg) Fitxer OGG Comprimit (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Nom: Maker: Fabricant: Copyright: Copyright: Requires Real Time: Requereix Temps Real: Yes No No Real Time Capable: Capaç de Temps Real: In Place Broken: Trencat En Lloc: Channels In: Canals d'Entrada: Channels Out: Canals de Sortida: File: Fitxer: File: %1 SampleBuffer Open audio file Obre fitxer d'àudio Wave-Files (*.wav) Fitxers WAV (*.wav) OGG-Files (*.ogg) Fitxers OGG (*.ogg) DrumSynth-Files (*.ds) Fitxers DrumSynth (*.ds) FLAC-Files (*.flac) Fitxers FLAC (*.flac) SPEEX-Files (*.spx) Fitxers SPEEX (*.spx) VOC-Files (*.voc) Fitxers VOC (*.voc) AIFF-Files (*.aif *.aiff) Fitxers AIFF (*.aif *.aiff) AU-Files (*.au) Fitxers AU (*.au) RAW-Files (*.raw) Fitxers RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample pica dos cops per a seleccionar la mostra Delete (middle mousebutton) Esborra (botó del mig del ratolí) Cut Talla Copy Copia Paste Enganxa Mute/unmute (<Ctrl> + middle click) Apaga/encén (<Ctrl> + clic del mig) Set/clear record SampleTrack Sample track Pista de mostra Volume Volum SampleTrackView Track volume Volum de pista Channel volume: Volum de canal: VOL VOL SongEditor Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó. Could not open file No es pot obrir el fitxer Could not write file No es pot escriure el fitxer Song-Editor Editor de Cançó Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Pica aquí si vols reproduir la cançó sencera. La reproducció començarà al marcador de posició de cançó (verd). També pots moure'l mentre es reprodueix. Play song (Space) Reprodueix cançó (Espai) Stop song (Space) Atura cançó (Espai) Add beat/bassline Afegeix ritme base Add sample-track Afegeix pista de mostra Draw mode Mode dibuixar Edit mode (select and move) Mode editar (selecciona i mou) Add automation-track Afegeix pista d'automatització Record samples from Audio-device Record samples from Audio-device while playing song or BB track Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song tempo de cançó The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode Mode alta qualitat Master volume Volum mestre master volume volum mestre Master pitch To mestre master pitch to mestre Value: %1% Valor: %1% Value: %1 semitones Valor: %1 semitons Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Espectre lineal Linear Y axis Eix Y lineal SpectrumAnalyzerControls Linear spectrum Espectre lineal Linear Y axis Eix Y lineal Channel mode Mode del canal TempoSyncKnob Tempo Sync Sinc Tempo No Sync Sense Sinc Eight beats Vuit batecs Whole note Nota sencera Half note Mitja nota Quarter note Quart de nota 8th note 8è de nota 16th note 16è de nota 32nd note 32è de nota Custom... Personalitzat... &Help &Ajuda Custom Personalitzat Synced to Eight Beats Sincronitzat a Vuit Batecs Synced to Whole Note Sincronitzat a Nota Sencera Synced to Half Note Sincronitzat a Mitja Nota Synced to Quarter Note Sincronitzat a Quart de Nota Synced to 8th Note Sincronitzat a 8è de Nota Synced to 16th Note Sincronitzat a 16è de Nota Synced to 32nd Note Sincronitzat a 32è de Nota TimeDisplayWidget click to change time units TrackContainer Couldn't import file No es pot importar el fitxer Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. No es pot trobar un filtre per a importar el fitxer %1. Hauries de convertir aquest fitxer a un format suportat per LMMS utilitzant altre programari. Couldn't open file No es pot obrir el fitxer Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! No es pot llegir el fitxer %1. Per favor, assegura't que tens permís de lectura per al fitxer i el directori que el conté i torna-ho a provar! Loading project... Carregant projecte... Cancel Cancel·la Please wait... Per favor, espera... Importing MIDI-file... Important fitxer MIDI... Importing FLP-file... Important fitxer FLP... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: Volum d'osc %1: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Amb aquesta roda pots ajustar el volum de l'oscil·lador %1. Quan poses un valor de 0 l'oscil·lador s'apaga. Altrament, pots sentir l'oscil·lador tan alt com l'ajustis aquí. Osc %1 panning: Panorama d'osc %1: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Amb aquesta roda pots ajustar el panorama de l'oscil·lador %1. Un valor de -100 significa 100% a l'esquerra i un valor de 100 mou la sortida de l'oscil·lador a la dreta. Osc %1 coarse detuning: Desafinament gruixut d'osc %1: semitones semitons With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Amb aquesta roda pots ajustar el desafinament gruixut de l'oscil·lador %1. Pots desafinar l'oscil·lador 12 semitons (1 octava) cap a dalt i a baix. Això és útil per a crear sons amb un acord. Osc %1 fine detuning left: Desafinament fi esquerre d'osc %1: cents cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Amb aquesta roda pots ajustar el desafinament fi de l'oscil·lador %1 per al canal esquerre. El desafinament fi està graduat entre -100 cents i +100 cents. Això és útil per a crear sons "gruixuts". Osc %1 fine detuning right: Desafinament fi dret d'osc %1: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Amb aquesta roda pots ajustar el desafinament fi de l'oscil·lador %1 per al canal dret. El desafinament fi està graduat entre -100 cents i +100 cents. Això és útil per a crear sons "gruixuts". Osc %1 phase-offset: Desfasament d'osc %1: degrees graus With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Amb aquesta roda pots ajustar el desfasament de l'oscil·lador %1. Això significa que pots moure el punt d'una oscil·lació on l'oscil·lador comença a oscil·lar. Per exemple, si tens una ona sinusoïdal amb un desfasament de 180 graus, l'ona anirà primer cap a baix. És el mateix amb una ona quadrada. Osc %1 stereo phase-detuning: Desfasament estèreo d'osc %1: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Obre altre connector VST Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Pica aquí si vols obrir un altre connector VST. Després de picar aquest botó, apareix un diàleg d'obrir fitxers i pots seleccionar el teu fitxer. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Pica aquí per a mostrar o amagar la interfície gràfica d'usuari (GUI) del connector VST. Turn off all notes Apaga totes les notes Open VST-plugin Obre connector VST DLL-files (*.dll) Fitxers DLL (*.dll) EXE-files (*.exe) Fitxers EXE (*.exe) No VST-plugin loaded Cap connector VST carregat Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Carregant connector Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normalitza Click to normalize Invert Click to invert Smooth Suavitza Click to smooth Sine wave Ona sinusoïdal Click for sine wave Triangle wave Ona triangular Click for triangle wave Click for saw wave Square wave Ona quadrada Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ FREQ Filter Resonance: RES RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify Amplificar Start of sample Inici de la mostra End of sample Fi de la mostra Reverse sample Inverteix mostra Stutter Loopback point Loop mode Mode Bucle Interpolation mode None Linear Sinc bbEditor Play/pause current beat/bassline (Space) Reprodueix/pausa el ritme base actual (Espai) Beat+Bassline Editor Editor de Ritme Base Add beat/bassline Afegeix ritme de base Add automation-track Afegeix pista d'automatització Stop playback of current beat/bassline (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Click here to stop playing of current beat/bassline. Remove steps Elimina passos Add steps Afegeix passos bbTCOView Open in Beat+Bassline-Editor Obre a l'Editor de Ritme Base Reset name Restaura nom Change name Canvia nom Change color Canvia color Reset color to default bbTrack Beat/Bassline %1 Ritme base %1 Clone of %1 bitInvader Samplelength Longitud de mostra bitInvaderView Sample Length Longitud de la Mostra Sine wave Ona sinusoïdal Triangle wave Ona triangular Saw wave Ona de serra Square wave Ona quadrada White noise wave Ona de soroll blanc User defined wave Ona arbitrària Smooth Suavitza Click here to smooth waveform. Pica aquí per a suavitzar la forma d'ona. Interpolation Interpolació Normalize Normalitza Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file No es pot obrir el fitxer Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! No es pot obrir el fitxer %1 per a escriure. Per favor, assegura't que tens permís d'escriptura per al fitxer i el directori que el conté i torna-ho a provar! Error Error Error while determining file-encoder device. Please try to choose a different output format. Error determinant el dispositiu de codificació de fitxer. Per favor, prova amb un format de sortida diferent. Rendering: %1% Representant: %1% Export project to %1 Exporta projecte a %1 fader Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: graphModel Graph kickerInstrument Start frequency Freqüència inicial End frequency Freqüència final Gain Guany Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: Freqüència inicial: End frequency: Freqüència final: Gain: Guany: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &Ajuda Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: Please enter a new value between -96.0 dBV and 6.0 dBV: Per favor, introdueix un nou valor entre -96,0 dBV i 6,0 dBV: ladspaBrowserView Available Effects Efectes Disponibles Unavailable Effects Efectes No Disponibles Instruments Instruments Analysis Tools Eines d'Anàlisi Don't know Desconeguts This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Aquest diàleg mostra informació de tots els connectors LADSPA que LMMS ha pogut trobar. Els connectors estan dividits en cinc categories basades en la interpretació dels tipus i noms dels ports. Efectes Disponibles són aquells que LMMS pot usar. Per a que LMMS pugui usar un efecte, primerament, ha de ser un efecte, és a dir, ha de tenir canals d'entrada i de sortida. LMMS identifica un canal d'entrada com a un port d'àudio que conté 'in' al nom. Els canals de sortida són identificats amb les lletres 'out'. A més, l'efecte ha de tenir el mateix nombre d'entrades que de sortides i ser capaç de temps real. Efectes No Disponibles són aquells que han estat identificats com a efectes, però no tenen el mateix nombre d'entrades que de sortides o no són capaços de temps real. Instruments són connectors on només s'han identificat canals de sortida. Eines d'Anàlisi són connectors on només s'han identificat canals d'entrada. Desconeguts són connectors on no s'han identificat canals d'entrada o sortida. Fent doble clic a qualsevol connector mostrarà informació sobre els ports. Type: Tipus: ladspaDescription Plugins Connectors Description Descripció ladspaPortDialog Name Nom Rate Taxa Direction Direcció Type Tipus Min < Default < Max Mín < Defecte < Màx Logarithmic Logarítmic SR Dependent Depenent SR Audio Àudio Control Control Input Entrada Output Sortida Toggled Commutat Integer Enter Float Flotant Yes Ports Ports lb302Synth VCF Cutoff Frequency Freqüència de Tall VCF VCF Resonance Ressonància VCF VCF Envelope Mod Mod Envoltant VCF VCF Envelope Decay Decaïment Envoltant VCF Slide Lliscament Accent Accent Dead Mort Slide Decay Decaïment de Lliscament Distortion Distorsió Waveform Forma d'ona 24dB/oct Filter Filtre 24dB/oct lb302SynthView Cutoff Freq: Freq Tall: Resonance: Ressonància: Env Mod: Mod Env: Decay: Decaïment: 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/octava, filtre 3 pols Slide Decay: Decaïment de Lliscament: DIST: DIST: Saw wave Ona de serra Click here for a saw-wave. Triangle wave Ona triangular Click here for a triangle-wave. Square wave Ona quadrada Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Ona sinusoïdal Click for a sine-wave. White noise wave Ona de soroll blanc Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency Freqüència de Tall VCF VCF Resonance Ressonància VCF VCF Envelope Mod Mod Envoltant VCF VCF Envelope Decay Decaïment Envoltant VCF Distortion Distorsió Waveform Forma d'ona Slide Decay Decaïment de Lliscament Slide Lliscament Accent Accent Dead Mort 24dB/oct Filter Filtre 24dB/oct lb303SynthView Cutoff Freq: Freq Tall: CUT TALL Resonance: Ressonància: RES RES Env Mod: Mod Env: ENV MOD MOD ENV Decay: Decaïment: DEC DEC 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/octava, filtre 3 pols Slide Decay: Decaïment de Lliscament: SLIDE LLISCA DIST: DIST: DIST DIST WAVE: ONA: WAVE ONA malletsInstrument Hardness Duresa Position Posició Vibrato Gain Guany de Vibrat Vibrato Freq Freq de Vibrat Stick Mix Mescla de Pals Modulator Modulador Crossfade Entremescla LFO Speed Velocitat OBF LFO Depth Profunditat OBF ADSR ADSR Pressure Pressió Motion Moviment Speed Velocitat Bowed Doblegat Spread Dispersió Marimba Marimba Vibraphone Vibràfon Agogo Agogo Wood1 Fusta1 Reso Reso Wood2 Fusta2 Beats Batecs Two Fixed Fixat a Dos Clump Grup Tubular Bells Campanes Tubulars Uniform Bar Barra Uniforme Tuned Bar Barra Afinada Glass Cristall Tibetan Bowl Bol Tibetà Missing files Fitxers absents Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! La instal·lació de Stk sembla estar incompleta. Assegura't de que el paquet complet Stk està instal·lat! malletsInstrumentView Instrument Instrument Spread Dispersió Spread: Dispersió: Hardness Duresa Hardness: Duresa: Position Posició Position: Posició: Vib Gain Guany Vib Vib Gain: Guany Vib: Vib Freq Freq Vib Vib Freq: Freq Vib: Stick Mix Mescla de Pals Stick Mix: Mescla de Pals: Modulator Modulador Modulator: Modulador: Crossfade Entremescla Crossfade: Entremescla: LFO Speed Velocitat OBF LFO Speed: Velocitat OBF: LFO Depth Profunditat OBF LFO Depth: Profunditat OBF: ADSR ADSR ADSR: ADSR: Bowed Doblegat Pressure Pressió Pressure: Pressió: Motion Moviment Motion: Moviment: Speed Velocitat Speed: Velocitat: Vibrato Vibrat Vibrato: Vibrat: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &Ajuda opl2instrument Patch Pedaç Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Distorsió Volume Volum organicInstrumentView Distortion: Distorsió: Volume: Volum: Randomise Aleatoritza Osc %1 waveform: Forma d'ona d'osc %1: Osc %1 volume: Volum d'osc %1: Osc %1 panning: Panorama d'osc %1: cents cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description sense descripció Instrument plugins Connectors d'instrument Vibrating string modeler Modelador de corda vibrant Filter for importing MIDI-files into LMMS Filtre per a importar fitxers MIDI a LMMS VST-host for using VST(i)-plugins within LMMS servidor VST per a usar connectors VST(i) amb LMMS Filter for importing FL Studio projects into LMMS Filtre per a importar projectes FL Studio a LMMS Additive Synthesizer for organ-like sounds Sintetitzador Additiu per a sons com d'orgue Tuneful things to bang on Coses melòdiques per a fer soroll plugin for using arbitrary LADSPA-effects inside LMMS. connector per a usar efectes LADSPA arbitraris a LMMS. GUS-compatible patch instrument Instrument de pedaç compatible GUS Plugin for enhancing stereo separation of a stereo input file Connector per a millorar la separació estèreo List installed LADSPA plugins Llista connectors LADSPA instal·lats Incomplete monophonic imitation tb303 Imitació monofònica incompleta tb303 Plugin for freely manipulating stereo output Connector per a manipular lliurement la sortida estèreo Plugin for controlling knobs with sound peaks Connector per a controlar rodes amb pics de so Instrument browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Put down your project notes here. Escriu aquí les teves notes del projecte. Project notes Notes del projecte Edit Actions Accions d'Editar &Undo &Desfés Ctrl+Z Ctrl+Z &Redo &Refés Ctrl+Y Ctrl+Y &Copy &Copia Ctrl+C Ctrl+C Cu&t &Talla Ctrl+X Ctrl+X &Paste &Enganxa Ctrl+V Ctrl+V Format Actions Accions de Format &Bold &Negreta Ctrl+B Ctrl+B &Italic Curs&iva Ctrl+I Ctrl+I &Underline &Subratllat Ctrl+U Ctrl+U &Left &Esquerra Ctrl+L Ctrl+L C&enter Cen&tre Ctrl+E Ctrl+E &Right &Dreta Ctrl+R Ctrl+R &Justify &Justifica Ctrl+J Ctrl+J &Color... &Color... renameDialog Rename... Canvia el nom... setupDialog Setup LMMS Configuració de LMMS General settings Configuració general BUFFER SIZE MIDA DE MEMÒRIA INTERMÈDIA Reset to default-value Restaura al valor per defecte MISC MISC Display volume as dBV Mostra el volum en dBV LMMS working directory Directori de treball de LMMS VST-plugin directory Directori de connectors VST Artwork directory Directori de material gràfic FL Studio installation directory Directori d'instal·lació de FL Studio Performance settings Configuració de rendiment UI effects vs. performance Efectes UI vs. rendiment Audio settings Configuració d'àudio AUDIO INTERFACE INTERFÍCIE D'ÀUDIO MIDI settings Configuració MIDI MIDI INTERFACE INTERFÍCIE MIDI OK D'acord Cancel Cancel·la Restart LMMS Reinicia LMMS Please note that most changes won't take effect until you restart LMMS! Per favor, tingues en compte que la majoria de canvis no s'aplicaran fins que reiniciïs LMMS! Frames: %1 Latency: %2 ms Marcs: %1 Latència: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Aquí pots configurar la mida de la memòria intermèdia interna usada per LMMS. Els valors més petits donen menor latència però també poden causar so inservible o baix rendiment, especialment a ordinadors antics o sistemes amb un nucli sense temps real. Choose LMMS working directory Escull el directori de treball de LMMS Choose your VST-plugin directory Escull el teu directori de connectors VST Choose artwork-theme directory Escull el directori de material gràfic Choose FL Studio installation directory Escull el directori d'instal·lació de FL Studio Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Aquí pots seleccionar la teva interfície d'àudio preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, JACK, OSS i altres. Abaix pots veure una caixa amb controls per a configurar la interfície d'àudio seleccionada. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Aquí pots seleccionar la teva interfície MIDI preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, OSS i més. Abaix pots veure una caixa amb controls per a configurar la interfície MIDI seleccionada. STK rawwave directory Directori d'ones crues STK Choose LADSPA plugin directory Escull un directori de connectors LADSPA Choose STK rawwave directory Escull el directori d'ones crues STK Enable tooltips Activa els avisos d'eina Show restart warning after changing settings Mostra l'avís de reinici després de canviar la configuració Compress project files per default Comprimeix per defecte els fitxers de projecte HQ-mode for output audio-device Mode AQ per al dispositiu de sortida d'àudio Paths LADSPA plugin paths Default Soundfont File Background artwork Choose default SoundFont Choose background artwork One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Banc Patch Pedaç Gain Guany Reverb Reverberació Reverb Roomsize Cambra de Reverberació Reverb Damping Esmorteïment de Reverberació Reverb Width Amplada de Reverberació Reverb Level Nivell de Reverberació Chorus Cor Chorus Lines Línies de Cor Chorus Level Nivell de Cor Chorus Speed Velocitat de Cor Chorus Depth Profunditat de Cor sf2InstrumentView Open other SoundFont file Obre altre fitxer SoundFont Click here to open another SF2 file Pica aquí per a obrir un altre fitxer SF2 Choose the patch Escull el pedaç Gain Guany Apply reverb (if supported) Aplica reverberació (si està suportat) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Aquest botó habilita l'efecte de reverberació. Això aconsegueix efectes genials, però només funciona amb fitxers que ho suportin. Reverb Roomsize: Cambra de Reverberació: Reverb Damping: Esmorteïment de Reverberació: Reverb Width: Amplada de Reverberació: Reverb Level: Nivell de Reverberació: Apply chorus (if supported) Aplica cor (si està suportat) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Aquest botó habilita l'efecte de cor. Això aconsegueix efectes d'eco genials, però només funciona amb fitxers que ho suportin. Chorus Lines: Línies de Cor: Chorus Level: Nivell de Cor: Chorus Speed: Velocitat de Cor: Chorus Depth: Profunditat de Cor: Open SoundFont file Obre fitxer SoundFont SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance Filter type Tipus de filtre Voice 3 off Volume Volum Chip model sidInstrumentView Volume: Volum: Resonance: Ressonància: Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: Atac: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Decaïment: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: Sosteniment: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: Alliberament: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync Sinc Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Project saved Projecte desat The project %1 is now saved. El projecte %1 està desat. Project NOT saved. Projecte NO desat. The project %1 was not saved! El projecte %1 no està desat! Import file Importa fitxer untitled sense títol Select file for project-export... Selecciona fitxer per a exportar projecte... Tempo Tempo Master volume Volum mestre Master pitch To mestre Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! MIDI sequences FL Studio projects All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE AMPLE Width: Amplada: stereoEnhancerControls Width Amplada stereoMatrixControlDialog Left to Left Vol: Volum Esquerra a Esquerra: Left to Right Vol: Volum Esquerra a Dreta: Right to Left Vol: Volum Dreta a Esquerra: Right to Right Vol: Volum Dreta a Dreta: stereoMatrixControls Left to Left Esquerra a Esquerra Left to Right Esquerra a Dreta Right to Left Dreta a Esquerra Right to Right Dreta a Dreta timeLine Enable/disable auto-scrolling Activa/desactiva autodesplaçament Enable/disable loop-points Activa/desactiva punts de bucle After stopping go back to begin Després d'aturar torna al començament After stopping go back to position at which playing was started Després d'aturar torna a la posició on va començar la reproducció After stopping keep position Després d'aturar manté la posició Hint Consell Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Solo Solo trackContentObject Muted trackContentObjectView Current position Posició actual Hint Consell Press <Ctrl> and drag to make a copy. Pitja <Ctrl> i arrossega per a fer una còpia. Current length Longitud actual Press <Ctrl> for free resizing. Pitja <Ctrl> per a redimensionar lliurement. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 a %5:%6) Delete (middle mousebutton) Esborra (botó del mig del ratolí) Cut Talla Copy Copia Paste Enganxa Mute/unmute (<Ctrl> + middle click) Apaga/encén (<Ctrl> + clic del mig) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Pitja <Ctrl> quan piquis el control de moviment per a iniciar una nova acció d'arrossegar i amollar. Clone this track Clona aquesta pista Remove this track Elimina aquesta pista Actions for this track Accions per a aquesta pista Mute Apaga Mute this track Apaga aquesta pista Solo Solo Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Carregant connector Please wait while loading VST-plugin... Per favor, espera mentre es carrega el connector VST... Failed loading VST-plugin Ha fallat la càrrega del connector VST The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! El connector VST %1 no s'ha pogut carregar per alguna raó. Si funciona amb altre programari VST sota Linux, per favor contacta amb un desenvolupador de LMMS! vibed String %1 volume Volum de corda %1 String %1 stiffness Rigidesa de corda %1 Pick %1 position Posició per a tocar %1 Pickup %1 position Posició per a recollir %1 Pan %1 Panorama %1 Detune %1 Desafinament %1 Fuzziness %1 Arrissada %1 Length %1 Longitud %1 Impulse %1 Impuls %1 Octave %1 Octava %1 vibedView Volume: Volum: The 'V' knob sets the volume of the selected string. La roda 'V' ajusta el volum de la corda seleccionada. String stiffness: Rigidesa de corda: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. La roda 'S' ajusta la rigidesa de la corda seleccionada. La rigidesa de la corda afecta el temps que la corda ressonarà. Quan més baix el valor, més temps sonarà la corda. Pick position: Posició per a tocar: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. La roda 'P' ajusta la posició on serà tocada la corda seleccionada. Quan més baix el valor, es toca més a prop del pont. Pickup position: Posició per a recollir: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. La roda 'PU' ajusta la posició on les vibracions seran monitoritzades per a la corda seleccionada. Quan més baix aquest valor, la recollida és més a prop del pont. Pan: Panorama: The Pan knob determines the location of the selected string in the stereo field. La roda Pan determina la localització de la corda seleccionada al camp estèreo. Detune: Desafinament: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. La roda Detune modifica el to de la corda seleccionada. Valors menors que zero faran que la corda soni amb bemoll. Valors majors que zero faran que la corda soni amb sostingut. Fuzziness: Arrissada: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. La roda Slap afegeix una mica d'arrissada a la corda seleccionada que és més notable durant l'atac, encara que també pot usar-se per a que la corda soni més 'metàl·lica'. Length: Longitud: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. La roda Length ajusta la longitud de la corda seleccionada. Les cordes més llargues sonaran a la vegada més temps i més brillants, emperò també es menjaran més cicles de CPU. Impulse or initial state Impuls o estat inicial The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. El selector 'Imp' determina si la forma d'ona del gràfic s'ha de tractar com un impuls impartit a la corda quan es toca o l'estat inicial de la corda. Octave Octava The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. El selector Octava s'usa per a escollir a quin harmònic de la nota la corda sonarà. Per exemple, '-2' significa que la corda sonarà dues octaves per sota de la fonamental, 'F' significa que la corda sonarà a la fonamental, i '6' significa que la corda sonarà sis octaves per sobre de la fonamental. Impulse Editor Editor d'Impuls The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. L'editor de forma d'ona dóna control sobre l'estat inicial o impuls que s'utilitza per a iniciar la corda vibrant. Els botons de la dreta del gràfic inicialitzaran la forma d'ona al tipus seleccionat. El botó '?' carregarà la forma d'ona des d'un fitxer; només es carregaran les primeres 128 mostres. La forma d'ona també pot dibuixar-se al gràfic. El botó 'S' suavitzarà la forma d'ona. El botó 'N' normalitzarà la forma d'ona. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modela fins a nou cordes vibrants independents. El selector 'String' et permet escollir quina corda s'està editant. El selector 'Imp' escull si el gràfic representa un impuls o l'estat inicial de la corda. El selector 'Octave' escull a quin harmònic la corda ha de vibrar. El gràfic et permet controlar l'estat inicial o impuls usat per a posar la corda en marxa. La roda 'V' controla el volum. La roda 'S' controla la rigidesa de la corda. La roda 'P' controla la posició per a tocar. La roda 'PU' controla la posició per a recollir. Probablement no cal explicar 'Pan' i 'Detune'. La roda 'Slap' afegeix una mica d'arrissada al so de la corda. La roda 'Length' controla la longitud de la corda. El LED a la cantonada dreta baixa de l'editor de forma d'ona determina si la corda està activa a l'instrument actual. Enable waveform Habilita forma d'ona Click here to enable/disable waveform. Pica aquí per a activar/desactivar la forma d'ona. String Corda The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. El selector String s'usa per a escollir quina corda estan editant els controls. Un instrument Vibed pot tenir fins a nou cordes vibrants independents. El LED a la cantonada dreta baixa de l'editor de forma d'ona indica si la corda seleccionada està activa. Sine wave Ona sinusoïdal Triangle wave Ona triangular Saw wave Ona de serra Square wave Ona quadrada White noise wave Ona de soroll blanc User defined wave Ona arbitrària Smooth Suavitza Click here to smooth waveform. Pica aquí per a suavitzar la forma d'ona. Normalize Normalitza Click here to normalize waveform. Pica aquí per a normalitzar la forma d'ona. &Help &Ajuda Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output pica per a activar/desactivar la visualització de la sortida mestra Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/cs.qm000066400000000000000000003267151247673406200156310ustar00rootroot00000000000000GBH1QJJy[<[<x[<{[<S__)PyӟyxOgK|d7[="llإHص\0uTV{TwTz#N#@xz6`H5(LXL}hjqjuL)MVe/x/~\C\CnEe)j8 t*$J)*yJ**0E/*0J{*0*0>++KV+K++%+įL5f6u93[}F|cG*GGQfHiKFH'/HI;iJ+9HJH#JRKWLbM<MMKNhPWxSPW'T.jTZdxTʴwTʴx-UQVbdVbmVb{KVh<V&V{fVfWi)WWX=Z/*Z/0KZk4Zk<"ZocZoq[Q\&+]6 p]t|}}UJ~#f;U;_5lϙZ^?vCAQue)iy2yq@Q5On5z }^ C>O/N+׀+unSitY"RG2Y7"9O; c3@۴FzPFz-J2J8OXOXp<V|VZ;3 Z;9aU~o>uhɄyʭiK ՙ 8@ zl!ߺ?ogCBAdA Dq$s}a3P (^(^c,´:,´Y.H: }G)Ro)r%lt`~zfO9S%v8nCKLf3W39> ѻt>4 C0gv~+p\sus/sOD9%mp2Q8JB:)yCBHH>{OXAP~ NP~=Wa -]|l#|Z||Z?}"q~V6~RŐά3gĩe0R$VyG#gNW9ĽѫY63\6NHքui  왞XgBչFY2.e=S 0{(10W19:^]m;:kZ<<+<<0A UQFA>gJM$=MtMк=`PJ9PJ *PJ+Qq.`10``%`%X`%pc=g5*hYjztfkJ:rJ8w~eww w.wyT*yT/{ j"9Q  N}puuuGuuu)uluo{rI? IW IIRaq9CMM6MiMMNN5NhNN O O4U0-1mrx@žՔͥr2L2G(|`>1vjfnnVPp u u @|lYTְΎ*($0[)RA-Ue15oF^48F^:H8PeQXQ{Z\C.LaELefalWZlxl(vA R}o.kuK]\[*=wM!7j9ff,fz2;l77'IRI(L2E?k2ޔrtiS+tr RY`!E{!EW!E)K,Dh5nCS7 ;k;&ZF[I]UI4UIZm+[t\X.@iANlF+m.y %Ny %S j>82>2o]dY)U5@kS bRix: cUZ$Ϟqf-SE-SEc-SE.-SEH;G2G/Gx!QD W~^bsohc?j_jDnqvSe5Z0[;[5Z(Q;5Q$Dp%HC2HC850dHUXn %U U.iUHd 8uJgAp^'PG <=ʩ4ʩ;]+^]1"nCe࣓8YI $ & )8 6Eo 8eJ 8e  8ed 9 Gq; I= Mg& T~W Ys( kY p,( w%v w%ʘ x> |b 9  B>3 _ B1Z @ k n( FWS Kn E 7  UU} u 1) NP_ ͸ - ·~ ʵ ˔LH  J\X DB Nr ؋z ہ" ɺ J *N I9` ".g $ rXM +\P NX7 Omn STn~ \ \s ]) m *L m 0 m > s Tp9 u:  $ns( z T ?8 NEg NJ Vc hy 23 2:( Ƶ8H 1 4 ӗ` Ӱo$ eW S|S +k2 iĨ q m! v7 .T .> . ., ʓ?M "i4 $&yVx -:m ==^ Vw aC[ c.c c.c: c.c c.c cԉ cz d̥:[ d̥ d̥ U t |`τ )=? } {V {n] ; vV T< s ^A   k Ɉls I ޖ 9- 91} 鼣h ]I E" >, +h 5z (d .˙l_ @u8 @uz @u W` ao bS#e c4 cyi c| cA cn c fb3 l8A |H57 | } }O }NO t  > n.{ ‚ 0^ ɶ. Չ96f Չ9 rj* ^ fryn~ؔiT ),ҐJ(!N&ʮUq2;}@g<)BD>SGzzP4ad^ylcgn dyQOp}< Y:`9*`90A-  |[}LC$e'2()3Ȇ7W?ICgD>=D=IIcU& Z ^ EF` yMY>k7K  ¥I~ ܹ i\<html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html>

http://lmms.sourceforge.net

 AboutDialog O LMMSAbout AboutDialog O LMMS About LMMS AboutDialog AutoYiAuthors AboutDialogBCopyright (c) 2004-2014, vvojYi(Copyright (c) 2004-2014, LMMS developers AboutDialogLMMSLMMS AboutDialog\LMMS - jednoduch hudebn produkce pro ka~dho)LMMS - easy music production for everyone AboutDialogLicenceLicense AboutDialogPYeklad Translation AboutDialog6Verze %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogVOLVOLAmplifierControlDialogHlasitost:Volume:AmplifierControlDialogHlasitostVolumeAmplifierControls KANLYCHANNELSAudioAlsa::setupWidgetZAXZENDEVICEAudioAlsa::setupWidgetZeslen:Amplify:AudioFileProcessorViewKliknutm sem mo~ete otevYt jin audio soubor. Uk~e se dialog, pomoc kterho si soubor mo~ete vybrat. Nastaven jako re~im smy kovn, po te n a koncov body, hodnota zeslen apod. zostanou stejn, tak~e to nemus znt jako povodn sampl.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorView6PYehrvat sampl napY tny%Continue sample playback across notesAudioFileProcessorView@Povolen tto mo~nosti zposob, ~e se sampl bude pYehrvat pYes rozn tny - pokud zmnte ladn (pitch), nebo kdy~ tn skon pYed koncem samplu, tak bude dala pYehrvan tn pokra ovat kde pYestal. Pro obnoven pYehrvn na za tek samplu, vlo~te tn do spodn  sti klves (< 20 Hz)>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)AudioFileProcessorViewKoncov bod: Endpoint:AudioFileProcessorViewZapnete-li toto tla tko, cel sampl bude pYehrvn pozptku. Tato volba je u~ite n pro zajmav efekty jako napY. pozptku pYehran sr~ka.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView$OtevYt jin samplOpen other sampleAudioFileProcessorView$PYehrvat pozptkuReverse sampleAudioFileProcessorViewPo te n bod: Startpoint:AudioFileProcessorView@Tmto ovlada em mo~ete nastavit pomr zeslen. Pokud nastavte hodnotu 100%, sampl se nezmn. Jinak se zesl nebo ztia (soubor samplu se tm vobec nezmn!)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorViewDlka samplu:Sample length:AudioFileProcessorWaveView KANLYCHANNELSAudioJack::setupWidgetJMNO-KLIENTA CLIENT-NAMEAudioJack::setupWidget KANLYCHANNELSAudioOss::setupWidgetZAXZENDEVICEAudioOss::setupWidgetZAXZENDEVICEAudioPortAudio::setupWidget KANLYCHANNELSAudioPulseAudio::setupWidgetZAXZENDEVICEAudioPulseAudio::setupWidgetZAXZENDEVICEAudioSdl::setupWidget2&Koprovat hodnoty (%1%2)&Copy value (%1%2)AutomatableModel,&Vlo~it hodnoty (%1%2)&Paste value (%1%2)AutomatableModel"&Resetovat (%1%2) &Reset (%1%2)AutomatableModel2PYipojit ke kontrolru...Connect to controller...AutomatableModelPYipojeno k %1Connected to %1AutomatableModel.PYipojeno ke kontrolruConnected to controllerAutomatableModel*Editovat pYipojen...Edit connection...AutomatableModelFEditovat automatizaci pro cel songEdit song-global automationAutomatableModelBOdebrat vaechny propjen ovlada eRemove all linked controlsAutomatableModel"Odebrat pYipojenRemove connectionAutomatableModel8Odebrat obecnou automatizaciRemove song-global automationAutomatableModel6Vta hodnota napt vytvoY plynuleja kYivku ale pYekro nkter hodnoty. Mal hodnota napt zposob vyrovnn sklonu kYivky na ka~dm ovldacm bod.A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.AutomationEditorlVaechny ozna en hodnoty byly zkoprovny do schrnky.1All selected values were copied to the clipboard.AutomationEditor2Automatiza n editor - %1Automation Editor - %1AutomationEditorHAutomatiza n editor - ~dn patternAutomation Editor - no patternAutomationEditorKliknte zde, pokud chcete aktivovat re~im kreslen. V tomto vchozm a nej astji u~vanm re~imu lze pYidvat a pYesunovat jednotliv hodnoty. Pro aktivaci mo~ete vyu~t t~ klvesov zkratky Shift+D.Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditor2Kliknte zde, pokud chcete aktivovat re~im mazn. V tomto re~imu lze mazat jednotliv hodnoty. Pro aktivaci mo~ete vyu~t t~ klvesov zkratky Shift+E.Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditor Kliknte zde, pokud chcete ozna en hodnoty zkoprovat do schrnky. Vlo~it je pak mo~ete kdekoliv v libovolnho patternu pomoc tla tka Vlo~it.Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor*Kliknte zde, pokud chcete ozna en hodnoty vyjmout a ulo~it do schrnky. Vlo~it je pak mo~ete kdekoliv v libovolnm patternu pomoc tla tka Vlo~it.Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorKliknete-li zde, budou hodnoty ze schrnky vlo~eny do prvnho viditelnho taktu.YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditorKliknte zde, pokud chcete pYehrt aktuln pattern. To je aikovn pYi editaci, neboe pattern je automaticky pYehrvn ve smy ce.Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditorKliknte zde, pokud chcete zastavit pYehrvn aktulnho patternu.>Click here if you want to stop playing of the current pattern.AutomationEditor\Kliknutm sem vyberte cubic hermite vvoj pro tento automatiza n pattern. Hodnota pYipojenho objektu se zmn po plynul kYivce a lehce pYejde do vrchnch a spodnch bodo.Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.AutomationEditorKliknutm sem vyberete oddlen vvoj pro tento automatiza n pattern. Hodnota pYipojenho objektu zostane konstantn mezi ovldacmi body a okam~it nastavena na novou hodnotu kdy~ se doshne ka~dho ovldacho bodu.Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.AutomationEditorKliknutm sem vyberete linern vvoj pro tento automatiza n pattern. Hodnota pYipojenho objektu se zmn ve stabiln frekvenci mezi ovldacmi body, aby postupn doalo k dosa~en dalaho kontrolnho bodu.Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.AutomationEditorFKoprovat ozna en hodnoty (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor&Cubic Hermite vvojCubic Hermite progressionAutomationEditorBVyjmout ozna en hodnoty (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditorOddlen vvojDiscrete progressionAutomationEditor0Re~im kreslen (Shift+D)Draw mode (Shift+D)AutomationEditor,Re~im mazn (Shift+E)Erase mode (Shift+E)AutomationEditorLinern vvojLinear progressionAutomationEditorFVlo~it hodnoty ze schrnky (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorPYehrt nebo pozastavit pYehrvn aktulnho patternu (mezernk)"Play/pause current pattern (Space)AutomationEditorOtevYete prosm automatiza n pattern pomoc kontextovho menu ovldn!EPlease open an automation pattern with the context menu of a control!AutomationEditordZastavit pYehrvn aktulnho patternu (mezernk)'Stop playing of current pattern (Space)AutomationEditor2Hodnota napt pro splineTension value for splineAutomationEditorNapt:  Tension: AutomationEditor&Hodnoty zkoprovny Values copiedAutomationEditorFOvlada thni pYi stisknutm <CTRL>$Drag a control while pressing AutomationPattern%1 PYipojen%1 ConnectionsAutomationPatternViewZmnit jmno Change nameAutomationPatternViewVy istitClearAutomationPatternViewOdpojit "%1"Disconnect "%1"AutomationPatternView@OtevYt v automatiza nm editoruOpen in Automation editorAutomationPatternViewResetovat jmno Reset nameAutomationPatternView*Nastav/vy isti zznamSet/clear recordAutomationPatternViewrdvojklikem otevYt tento pattern v automatiza nm editoru6double-click to open this pattern in automation editorAutomationPatternView&Automatiza n stopaAutomation trackAutomationTrackFrekvence: Frequency:BassBoosterControlDialog Zisk:Gain:BassBoosterControlDialog POMRRATIOBassBoosterControlDialog Pomr:Ratio:BassBoosterControlDialogFrekvence FrequencyBassBoosterControlsZiskGainBassBoosterControls PomrRatioBassBoosterControlsKontrolr %1 Controller %1 ControllerAutodetekce Auto DetectControllerConnectionDialog KANLCHANNELControllerConnectionDialogKONTROLR CONTROLLERControllerConnectionDialog ZruaitCancelControllerConnectionDialog&Nastaven pYipojenConnection SettingsControllerConnectionDialog"Detekovn cyklus.Cycle Detected.ControllerConnectionDialogVstupn kanl Input channelControllerConnectionDialog"Vstupn kontrolrInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialogMAPOVAC FUNKCEMAPPING FUNCTIONControllerConnectionDialogMIDI KONTROLRMIDI CONTROLLERControllerConnectionDialogHMIDI-zaYzen k pYijmu MIDI-udlosti(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog*U}IVATELSK KONTROLRUSER CONTROLLERControllerConnectionDialog PYidatAddControllerRackView Potvrdit SmaznConfirm DeleteControllerRackViewOpravdu smazat? Tento kontrolr m jedno nebo vce existujcch pYipojen. Tento krok nelze vrtit zpt.iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackViewKontrolryController RackControllerRackViewNpovda&HelpControllerView.&Odstranit tento plugin&Remove this pluginControllerViewKontrolry jsou schopny automatizovat nastaven ovlada o, aouptek a dalach Ydicch prvko.QControllers are able to automate the value of a knob, slider, and other controls.ControllerViewOvlada eControlsControllerViewJVlo~te nov jmno pro tento kontrolr&Enter the new name for this controllerControllerView*PYejmenovat kontrolrRename controllerControllerViewDoznvnDecayEffectEfekt aktivovnEffect enabledEffect BrnaGateEffectWet/Dry mix Wet/Dry mixEffect"Efekty aktivovnyEffects enabled EffectChainPYidat efekt Add effectEffectRackViewXETZ EFEKTn EFFECTS CHAINEffectRackViewPYidat efekt Add effectEffectSelectDialogPopis pluginuPlugin descriptionEffectSelectDialogNpovda&Help EffectView.&Odstranit tento plugin&Remove this plugin EffectViewOvlada eControls EffectViewDOZNVNDECAY EffectView BRNAGATE EffectView Brna:Gate: EffectViewPosunout &dolu Move &down EffectView Posunout &nahoruMove &up EffectViewZap/VypOn/Off EffectViewZOvlada Doznvn ovld, kolik buffero ticha mus projt pYed tm, ne~ plugin pYestane zpracovvat. Mena hodnoty zredukuj vyu~it CPU, ale mo~ou zposobit uYznut ozvn.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectViewTla tko Brna ur uje slu signlu kter je pova~ovn za ticho pYi rozhodovn kdy skon it se zpracovnm signlo.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewWet/Dry ovlada nastavuje pomr mezi vstupnm signlem a signlem efektu, kter formuje vstup.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView as:Time: EffectView8Zapnout nebo vypnout efekty.Toggles the effect on or off. EffectViewWet Hodnota: Wet Level: EffectViewDoznvnDecayEnvelopeAndLfoParametersFrek x 100 Freq x 100EnvelopeAndLfoParameters@Kliknte zde pro pilovitou vlnu.&Click here for a saw-wave for current.EnvelopeAndLfoView@Kliknte zde pro sinusovou vlnu.Click here for a sine-wave.EnvelopeAndLfoViewBKliknte zde pro pravohlou vlnu.Click here for a square-wave.EnvelopeAndLfoViewDKliknte zde pro trianglovou vlnu.Click here for a triangle-wave.EnvelopeAndLfoViewDoznvn:Decay:EnvelopeAndLfoViewfSampl odnkud pYethnte a pusete jej v tomto okn.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREK x 100 FREQ x 100EnvelopeAndLfoViewRadaHintEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewSustain:Sustain:EnvelopeAndLfoView ZruaitCancelExportProjectDialog VstupOutputExportProjectDialog FX %1FX %1FxMixerHVlo~te nov jmno pro tento FX kanl&Enter the new name for this FX channel FxMixerViewFX-MixerFX-Mixer FxMixerView(PYejmenovat FX kanlRename FX channel FxMixerViewZtlumitMuteFxMixerView::FxChannelView,Ztlumit tento FX kanlMute this FX channelFxMixerView::FxChannelViewArpeggioArpeggioInstrumentFunctionArpeggioArpeggio smrArpeggio directionInstrumentFunctionArpeggioBrna arpeggia Arpeggio gateInstrumentFunctionArpeggioRe~im arpeggia Arpeggio modeInstrumentFunctionArpeggioRozsah arpeggiaArpeggio rangeInstrumentFunctionArpeggio as arpeggia Arpeggio timeInstrumentFunctionArpeggioTyp arpeggia Arpeggio typeInstrumentFunctionArpeggioDoluDownInstrumentFunctionArpeggio VolnFreeInstrumentFunctionArpeggioNhodnRandomInstrumentFunctionArpeggioTYdnSortInstrumentFunctionArpeggioSynchronizovanSyncInstrumentFunctionArpeggio NahoruUpInstrumentFunctionArpeggioNahoru a dolo Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGGIOARPEGGIOInstrumentFunctionArpeggioViewArpeggio je zposob hran (zejmna na drnkac nstroje), kter  in hudbu mnohem ~ivja. Struny tchto nstrojo (napY. harfy) jsou rozechvny jako v akordech. Jedinm rozdlem je, ~e se tak stane sekven n, tak~e tny nejsou zahrny ve stejnou dobu. Typickm arpeggiem jsou durov a mollov trojzvuky, ale mo~nch dalach akordo, kter si mo~ete vybrat, je spousta.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioViewBrna arpeggia:Arpeggio gate:InstrumentFunctionArpeggioView Rozsah arpeggia:Arpeggio range:InstrumentFunctionArpeggioView as arpeggia:Arpeggio time:InstrumentFunctionArpeggioView Smr: Direction:InstrumentFunctionArpeggioView BRNAGATEInstrumentFunctionArpeggioView Re~im:Mode:InstrumentFunctionArpeggioView ROZSAHRANGEInstrumentFunctionArpeggioView ASTIMEInstrumentFunctionArpeggioViewvTento ovlada u~vejte pro nastaven brny arpeggia. Brna arpeggia ur uje procento celho arpeggio-tnu, kter m bt zahrn. Pomoc brny arpeggia mo~ete udlat bezva arpeggio staccato.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewTento ovlada u~vejte pro nastaven rozsahu arpeggia v oktvch. Vybran arpeggio bude zahrno ve zvolenm po tu oktv.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoktva(y) octave(s)InstrumentFunctionArpeggioView BluesBluesInstrumentFunctionNoteStackingRozsah akordu Chord rangeInstrumentFunctionNoteStackingTyp akordu Chord typeInstrumentFunctionNoteStackingSn~en DiminishedInstrumentFunctionNoteStackingHarmonick mollHarmonic minorInstrumentFunctionNoteStackingDurov bebop Major bebopInstrumentFunctionNoteStacking$Durov pentatonikaMajor pentatonicInstrumentFunctionNoteStackingMelodick moll Melodic minorInstrumentFunctionNoteStacking&Mollov pentatonikaMinor pentatonicInstrumentFunctionNoteStackingCel nota Whole toneInstrumentFunctionNoteStacking oktvaoctaveInstrumentFunctionNoteStackingRozsah akordu: Chord range:"InstrumentFunctionNoteStackingView ROZSAHRANGE"InstrumentFunctionNoteStackingViewTento ovlada u~vejte pro nastaven rozsahu akordo v oktvch. Vybran akord bude zahrn ve zvolenm po tu oktv.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewoktva(y) octave(s)"InstrumentFunctionNoteStackingView KANLCHANNELInstrumentMidiIOView$POVOLIT MIDI VSTUPENABLE MIDI INPUTInstrumentMidiIOView&POVOLIT MIDI VSTUPENABLE MIDI OUTPUTInstrumentMidiIOViewSEXZNUTCUTOFFInstrumentSoundShaping&Frekvence seYznutCutoff frequencyInstrumentSoundShapingTyp filtru Filter typeInstrumentSoundShapingREZORESOInstrumentSoundShapingRezonance ResonanceInstrumentSoundShapingHLASITOSTVOLUMEInstrumentSoundShapingHlasitostVolumeInstrumentSoundShaping FILTRFILTERInstrumentSoundShapingView&Zde si mo~ete vybrat z vestavnch filtro, kter chcete pou~t pro tuto stopu nstroje. Filtry jsou velmi dole~it pro zmnu charakteristiky zvuku.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewREZORESOInstrumentSoundShapingViewRezonance: Resonance:InstrumentSoundShapingViewCLTARGETInstrumentSoundShapingViewZkladn nota Base noteInstrumentTrack"Vchoz nastavenDefault presetInstrumentTrackFX kanl FX channelInstrumentTrackHlasitostVolumeInstrumentTrackxTmto ovlada em mo~ete nastavit hlasitost otevYenho kanlu. Nastaven.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowAktuln projekt byl od poslednho ulo~en zmnn. Chcete jej nyn ulo~it?OThe current project was modified since last saving. Do you want to save it now? MainWindowNepojmenovanUntitled MainWindowCo je to? What's this? MainWindow Pracovn adresYWorking directory MainWindowZAXZENDEVICEMidiAlsaRaw::setupWidgetZAXZENDEVICEMidiAlsaSeq::setupWidgetMIDI kontrolrMIDI ControllerMidiController8nepojmenovan_midi_kontrolrunnamed_midi_controllerMidiControllerZAXZENDEVICEMidiOss::setupWidget,Pevn vstupn rychlostFixed input velocityMidiPort.Pevn vstupn rychlostFixed output velocityMidiPortVstupn kanl Input channelMidiPort"Vstupn kontrolrInput controllerMidiPort*Vstupn MIDI programOutput MIDI programMidiPortVstupn kanlOutput channelMidiPort$Vstupn kontrolrOutput controllerMidiPort,PYijmat MIDI-udlostiReceive MIDI-eventsMidiPort*Poslat MIDI-udlostiSend MIDI-eventsMidiPort Hlavn hlasitost Master volume NesInstrumentVibrtoVibrato NesInstrument8Osc %1 jemn rozladn vlevoOsc %1 fine detuning leftOscillatorObjectOsc %1 panoramaOsc %1 panningOscillatorObject Osc %1 hlasitost Osc %1 volumeOscillatorObject"Osc %1 forma vlnyOsc %1 wave shapeOscillatorObjectOsc %1 vlnaOsc %1 waveformOscillatorObjectKliknte zde, pokud chcete otevYt dala patch-soubor. Nastaven smy ky a re~imu ladn budou zachovna.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewZde mo~ete zapnout re~im smy ky, Jestli~e je re~im aktivn PatMan pou~ije dostupn informace o smy cem ze souboru.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewZde mo~ete zapnout re~im smy ky, Jestli~e je re~im aktivn PatMan nalad sampl tak, aby frekvence odpovdala tnu.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanView Smy kaLoop PatmanViewRe~im smy ky Loop mode PatmanView0}dn soubor nen vybrnNo file selected PatmanView$OtevYt jin patchOpen other patch PatmanView(OtevYt patch souborOpen patch file PatmanView*Patch-Soubory (*.pat)Patch-Files (*.pat) PatmanView LaditTune PatmanViewRe~im ladn Tune mode PatmanViewPYidat kroky Add steps PatternViewZmnit jmno Change name PatternView*Vy istit vaechny notyClear all notes PatternView(OtevYt v piano-rollOpen in piano-roll PatternViewOdstranit kroky Remove steps PatternViewResetovat jmno Reset name PatternViewdvojitm kliknutm otevYete tento pattern v piano-roll k nastaven zeslen kroku pou~ijte kole ko myaiWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewZkladn mra: Base amount:!PeakControllerEffectControlDialog Zkladn hodnota Base valuePeakControllerEffectControls0StupeH (amount) modulaceModulation amountPeakControllerEffectControlsKliknete-li zde, budou noty ze schrnky vlo~eny do prvnho viditelnho taktu.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRollKliknte zde pokud chcete ozna en noty zkoprovat do schrnky. Vlo~it je pak mo~ete kdekoliv v libovolnho patternu pomoc tla tka Vlo~it.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll"Kliknte zde pokud chcete ozna en noty vyjmout a ulo~it do schrnky. Vlo~it je pak mo~ete kdekoliv v libovolnm patternu pomoc tla tka Vlo~it.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollKliknte zde, pokud chcete pYehrt aktuln pattern. To je aikovn pYi editaci. Pattern je automaticky pYehrvn ve smy ce.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRollKliknte zde pokud chcete nahrvat z MIDI zaYzen nebo virtulnho testovacho pina pYsluanho kanlovho okna do aktulnho patternu. PYi nahrvn zaznamente vaechny zahran noty do tohoto patternu, nsledn si je mo~ete pYehrt nebo upravit.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRollKliknte zde pokud chcete nahrvat z MIDI zaYzen nebo virtulnho testovacho pina pYsluanho kanlovho okna do aktulnho patternu. PYi nahrvn zaznamente vaechny zahran noty do tohoto patternu a na pozad uslyate skladbu nebo BB stopu.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRollKliknte zde, pokud chcete zastavit pYehrvn aktulnho patternu./Click here to stop playback of current pattern. PianoRoll@Koprovat ozna en noty (Ctrl+C)Copy selected notes (Ctrl+C) PianoRoll<Vyjmout ozna en noty (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll0Re~im kreslen (Shift+D)Draw mode (Shift+D) PianoRoll,Re~im mazn (Shift+E)Erase mode (Shift+E) PianoRollTrvn noty Last note PianoRollZmek noty Note lock PianoRoll@Vlo~it noty ze schrnky (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRollPiano-Roll - %1Piano-Roll - %1 PianoRoll4Piano-Roll - ~dn patternPiano-Roll - no pattern PianoRollPYehrt nebo pozastavit pYehrvn aktulnho patternu (mezernk)"Play/pause current pattern (Space) PianoRollRVlo~te prosm novou hodnotu mezi %1 a %2:+Please enter a new value between %1 and %2: PianoRollbOtevYete prosm pattern jeho dvojitm poklepnm!/Please open a pattern by double-clicking on it! PianoRollTNahrvat noty z MIDI-zaYzen/piano kanlu+Record notes from MIDI-device/channel-piano PianoRollNahrvat tny z MIDI zaYzen / kanlu pina pYi pYehrvn skladby nebo BB stopyJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll,Re~im vbru (Shift+S)Select mode (Shift+S) PianoRolldZastavit pYehrvn aktulnho patternu (mezernk)'Stop playing of current pattern (Space) PianoRollZkladn nota Base note PianoViewDPYi na tn pluginu doalo k chybError while loading pluginPlugin:Na ten pluginu "%1" selhalo!Failed to load plugin "%1"!Plugin Plugin nenalezenPlugin not foundPluginzPlugin "%1" nebyl nalezen nebo nemo~e bt na ten! Dovod: "%2"AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin>Komprimovan soubor OGG (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer$WAV soubor (*.wav)WAV-File (*.wav)ProjectRendererKanly vstup: Channels In: QWidgetKanly vstup:Channels Out: QWidgetCopyright: Copyright: QWidgetSoubor:File: QWidgetTvorce:Maker: QWidget Nzev:Name: QWidgetNeNoQWidget(Real time schopnost:Real Time Capable: QWidget(Vy~adovn Real Time:Requires Real Time: QWidgetAnoYesQWidget6AIFF soubory (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBuffer"AU soubory (*.au)AU-Files (*.au) SampleBuffer0DrumSynth soubory (*.ds)DrumSynth-Files (*.ds) SampleBuffer*FLAC soubory (*.flac)FLAC-Files (*.flac) SampleBuffer&OGG soubory (*.ogg)OGG-Files (*.ogg) SampleBuffer(OtevYt audio souborOpen audio file SampleBuffer&RAW soubory (*.raw)RAW-Files (*.raw) SampleBuffer*SPEEX soubory (*.spx)SPEEX-Files (*.spx) SampleBuffer&VOC soubory (*.voc)VOC-Files (*.voc) SampleBuffer&Wav soubory (*.wav)Wave-Files (*.wav) SampleBufferKoprovatCopy SampleTCOViewVyjmoutCut SampleTCOViewBSmazat (prostYedn tla tko myai)Delete (middle mousebutton) SampleTCOViewXZtlumit/neztlumit (<Ctrl> + prostYedn klik)#Mute/unmute ( + middle click) SampleTCOView Vlo~itPaste SampleTCOView*Nastav/vy isti zznamSet/clear record SampleTCOView@dvojitm kliknutm vyberte sampldouble-click to select sample SampleTCOViewStopa samplo Sample track SampleTrackHlasitostVolume SampleTrack"Hlasitost kanlu:Channel volume:SampleTrackViewHlasitost stopy Track volumeSampleTrackViewVOLVOLSampleTrackView4PYidat automatiza n stopuAdd automation-track SongEditor(PYidat beat/basslineAdd beat/bassline SongEditor&PYidat stopu samploAdd sample-track SongEditor8Kliknte zde, pokud chcete pYehrt celou skladbu. PYehrvn za ne v mst kde se nalz zelen ozna ova pozice se kterm lze t~ pYi pYehrvn pohybovat.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorKliknte zde, pokud chcete zastavit pYehrvn skladby. Ozna ova pozice bude odesln na za tek skladby.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor\Nelze zapisovat do souboru %1. Pravdpodobn nemte oprvnn zapisovat do tohoto souboru. Ujistte se prosm, ~e mte oprvnn zapisovat do tohoto souboru a zkuse to znovu.Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditor*Nemohu otevYt souborCould not open file SongEditor:Nelze otevYt soubor %1. Pravdpodobn nemte oprvnn  st tento soubor. Ujistte se prosm, ~e mt oprvnn alespoH  st tento soubor a zkuste to znovu.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor(Nemohu zapsat souborCould not write file SongEditorRe~im kreslen Draw mode SongEditorFRe~im editace (ozna it a pYesunout)Edit mode (select and move) SongEditorChyba v souboru Error in file SongEditor(Re~im vysok kvalityHigh quality mode SongEditor*Hlavn ladn (pitch) Master pitch SongEditor Hlavn hlasitost Master volume SongEditor4PYehrt skladbu (mezernk)Play song (Space) SongEditor<Nahrt samply z audio zaYzen Record samples from Audio-device SongEditorNahrt samply z audio zaYzen pYi pYehrvn skladby nebo BB stopy?Record samples from Audio-device while playing song or BB track SongEditorEditor skladby Song-Editor SongEditorLZastavit pYehrvn skladby (mezernk)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorlSoubor %1 nejspae obsahuje chyby a nemohl bt na ten.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditorTempo skladby je uvedeno v derech za minutu (BPS). Chcete-li zmnit tempo skladby, zmHte tuto hodnotu. Ka~d takt m  tyYi beaty, tak~e tempo v BPS specifikuje kolik takto / 4 bude za minutu pYehrno (nebo kolik takto bude pYehrno ve  tyYech minutch).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor&Hodnota: %1 poltnoValue: %1 semitones SongEditorHodnota: %1% Value: %1% SongEditorhlavn ladn master pitch SongEditor hlavn hlasitost master volume SongEditortempo skladby tempo of song SongEditorLinern osa Y Linear Y axisSpectrumAnalyzerControlDialog"Linern spektrumLinear spectrumSpectrumAnalyzerControlDialogRe~im kanlu Channel modeSpectrumAnalyzerControlsLinern osa Y Linear Y axisSpectrumAnalyzerControls"Linern spektrumLinear spectrumSpectrumAnalyzerControls$`estnctinov nota 16th note TempoSyncKnob(DvaatYicetinov nota 32nd note TempoSyncKnobOsminov nota8th note TempoSyncKnobVlastnCustom  TempoSyncKnobVlastn... Custom... TempoSyncKnobOsm beato Eight beats TempoSyncKnobPolov nota Half note TempoSyncKnob"NesynchronizovanNo Sync TempoSyncKnob tvreov nota Quarter note TempoSyncKnob8Synchro k aestnctinov notSynced to 16th Note TempoSyncKnob<Synchro k dvaatYicetinov notSynced to 32nd Note TempoSyncKnob.Synchro k osminov notSynced to 8th Note TempoSyncKnob*Synchro k osmi beatomSynced to Eight Beats TempoSyncKnob*Synchro k polov notSynced to Half Note TempoSyncKnob0Synchro ke  tvreov notSynced to Quarter Note TempoSyncKnob&Synchro k cel notSynced to Whole Note TempoSyncKnob&Synchronizace tempa Tempo Sync TempoSyncKnobCel nota Whole note TempoSyncKnob<kliknut zmn  asov jednotkyclick to change time unitsTimeDisplayWidget ZruaitCancelTrackContainerNemohu najt filtr pro import souboru %1. Mli byste tento soubor zkonvertovat do formtu podporovanho LMMS pomoc jinho software.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer0Nemohu importovat souborCouldn't import fileTrackContainer*Nemohu otevYt souborCouldn't open fileTrackContainerNemohu otevYt soubor %1 pro  ten. PYesvd te se prosm, ~e mte prvo ke  ten tohoto souboru a pYsluanho adresYe a zkuste to znovu!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer.Importuji FLP soubor...Importing FLP-file...TrackContainer0Importuji MIDI soubor...Importing MIDI-file...TrackContainer$Na tm projekt...Loading project...TrackContainer"Prosm  ekejte...Please wait...TrackContainer:Osc %1 jemn rozladn vlevo:Osc %1 fine detuning left:TripleOscillatorView Osc %1 panorama:Osc %1 panning:TripleOscillatorView"Osc %1 hlasitost:Osc %1 volume:TripleOscillatorView stupndegreesTripleOscillatorViewKliknte zde pro zobrazen nebo skryt grafickho rozhran (GUI) pro vaae VST pluginy.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewKliknte zde, pokud chcete otevYt ostatn VST pluginy. Po kliknut na toto tla tko se objev okno ve kterm mo~ete soubor vybrat.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentView&DLL soubory (*.dll)DLL-files (*.dll)VestigeInstrumentView&EXE soubory (*.exe)EXE-files (*.exe)VestigeInstrumentView:}dn VST plugin nebyl na tenNo VST-plugin loadedVestigeInstrumentView$OtevYt VST pluginOpen VST-pluginVestigeInstrumentView6OtevYt ostatn VST pluginyOpen other VST-pluginVestigeInstrumentView Ulo~it pYedvolbu Save presetVestigeInstrumentView Ulo~it pYedvolbu Save presetVstEffectControlDialogNa tm pluginLoading plugin VstPluginNormalizovat Normalize WatsynViewSinusov vlna Sine wave WatsynViewUhladitSmooth WatsynView.Pravohl (square) vlna Square wave WatsynViewTrianglov vlna Triangle wave WatsynViewZeslenAmplifyaudioFileProcessorKonec samplu End of sampleaudioFileProcessorRe~im smy ky Loop modeaudioFileProcessor$PYehrvat pozptkuReverse sampleaudioFileProcessorZa tek sampluStart of sampleaudioFileProcessor4PYidat automatiza n stopuAdd automation-trackbbEditor2PYidat beat/basovou linkuAdd beat/basslinebbEditorPYidat kroky Add stepsbbEditor(Beat+Baseline EditorBeat+Bassline EditorbbEditorKliknte zde, pokud chcete pYehrt aktuln beat/baseline. Beat/baseline je automaticky pYehrvn ve smy ce.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorKliknte zde, pokud chcete zastavit pYehrvn aktuln beat/bassline.4Click here to stop playing of current beat/bassline.bbEditorZPYehrt nebo pozastavit pYehrvn (mezernk)(Play/pause current beat/bassline (Space)bbEditorOdstranit kroky Remove stepsbbEditorjZastavit pYehrvn aktuln beat/bassline (mezernk).Stop playback of current beat/bassline (Space)bbEditorZmnit barvu Change color bbTCOViewZmnit jmno Change name bbTCOView@OtevYt v Beat+Bassline editoruOpen in Beat+Bassline-Editor bbTCOViewResetovat jmno Reset name bbTCOView Beat/Bassline %1Beat/Bassline %1bbTrackDlka samplu Samplelength bitInvader@Kliknte zde pro pilovitou vlnu.Click here for a saw-wave.bitInvaderViewBKliknte zde pro pravohlou vlnu.Click here for a square-wave.bitInvaderViewDKliknte zde pro trianglovou vlnu.Click here for a triangle-wave.bitInvaderViewXKliknte zde pro u~ivatelem definovan tvar.$Click here for a user-defined shape.bitInvaderView>Pro uhlazen vlny kliknte zde.Click here to smooth waveform.bitInvaderViewInterpolovat InterpolationbitInvaderViewNormalizovat NormalizebitInvaderViewDlka samplu Sample LengthbitInvaderViewPilovit vlnaSaw wavebitInvaderViewSinusov vlna Sine wavebitInvaderViewUhladitSmoothbitInvaderView.Pravohl (square) vlna Square wavebitInvaderViewTrianglov vlna Triangle wavebitInvaderView4Vlna definovan u~ivatelemUser defined wavebitInvaderViewBl aumWhite noise wavebitInvaderView*Nemohu otevYt souborCould not open fileexportProjectDialogNemohu ulo~it soubor %1 pro zpis. PYesvd te se prosm, ~e mte prvo zpisu do tohoto souboru a pYsluanho adresYe a zkuste to znovu!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog ChybaErrorexportProjectDialogChyba pYi ur en souboru zaYzen enkodru. Zkuste prosm vybrat jin vstupn formt.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog0Exportovat projekt do %1Export project to %1exportProjectDialogRenderuji: %1%Rendering: %1%exportProjectDialogRVlo~te prosm novou hodnotu mezi %1 a %2:+Please enter a new value between %1 and %2:faderGrafGraph graphModel"Kone n frekvence End frequencykickerInstrumentZiskGainkickerInstrument&Po te n frekvenceStart frequencykickerInstrument$Kone n frekvence:End frequency:kickerInstrumentView Zisk:Gain:kickerInstrumentView(Po te n frekvence:Start frequency:kickerInstrumentViewNpovd&a&HelpknobRVlo~te prosm novou hodnotu mezi %1 a %2:+Please enter a new value between %1 and %2:knobjVlo~te prosm novou hodnotu mezi -96.0 dBV a 6.0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob&Analyza n nstrojeAnalysis ToolsladspaBrowserViewDostupn efektyAvailable EffectsladspaBrowserViewNeznm Don't knowladspaBrowserViewNstroje InstrumentsladspaBrowserViewbToto dialogov okno zobrazuje informace o vaech LADSPA pluginech, kter bylo LMMS schopno nalzt. Zsuvn moduly jsou rozdleny do pti kategori podle porto a nzvo. (new line) (new line) K dispozici jsou ty efekty, kter mohou bt pou~ity v LMMS. Aby v LMMS bylo mo~n u~t efektu, mus se o efekt skute n jednat, to znamen, ~e mus mt oba vstupn a vstupn kanly. LMMS identifikuje vstupn kanl jako audio podle 'in' v nzvu. Vstupn kanly jsou identifikovny pole ozna en psmeny 'out'. Krom toho efekt mus mt stejn po et vstupo a vstupo a bt real time kompatibiln. Nedostupn efekty jsou ty, kter byly identifikovny jako efekty, ale bu nemaj stejn po et vstupnch a vstupnch kanlo nebo nejsou real time kompatibiln. Nstroje jsou pluginy u kterch byly identifikovny pouze vstupn kanly. Analyza n nstroje jsou pluginy u kterch byly identifikovny pouze vstupn kanly. Neznm jsou pluginy, pro kter nebyly identifikovny ~dn vstupn nebo vstupn kanly. Dvojitm kliknutm na kterkoli z modulo se zobraz informace o portech.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserViewTyp:Type:ladspaBrowserView"Nedostupn efektyUnavailable EffectsladspaBrowserView Popis DescriptionladspaDescriptionPluginyPluginsladspaDescription AudioAudioladspaPortDialogOvldnControlladspaPortDialogSmr DirectionladspaPortDialog VstupInputladspaPortDialogLogaritmick LogarithmicladspaPortDialog&Min < Vchoz < MaxMin < Default < MaxladspaPortDialog NzevNameladspaPortDialog VstupOutputladspaPortDialog PortyPortsladspaPortDialogRychlostRateladspaPortDialogZapnutoToggledladspaPortDialogTypTypeladspaPortDialogAnoYesladspaPortDialog DorazAccent lb302SynthZkreslen Distortion lb302SynthKlouznSlide lb302Synth*VCF frekvence vypnutVCF Cutoff Frequency lb302SynthVCF rezonance VCF Resonance lb302SynthVlnaWaveform lb302Synth@Kliknte zde pro pilovitou vlnu.Click here for a saw-wave.lb302SynthViewBKliknte zde pro pravohlou vlnu.Click here for a square-wave.lb302SynthViewDKliknte zde pro trianglovou vlnu.Click here for a triangle-wave.lb302SynthViewHKliknte zde pro exponenciln vlnu.#Click here for an exponential wave.lb302SynthViewFrek. vypnut: Cutoff Freq:lb302SynthViewDoznvn:Decay:lb302SynthViewRezonance: Resonance:lb302SynthViewPilovit vlnaSaw wavelb302SynthViewSinusov vlna Sine wavelb302SynthView.Pravohl (square) vlna Square wavelb302SynthViewTrianglov vlna Triangle wavelb302SynthViewBl aumWhite noise wavelb302SynthView DorazAccent lb303SynthZkreslen Distortion lb303SynthKlouznSlide lb303Synth*VCF frekvence vypnutVCF Cutoff Frequency lb303SynthVCF rezonance VCF Resonance lb303SynthVlnaWaveform lb303SynthCUTCUTlb303SynthViewFrek. vypnut: Cutoff Freq:lb303SynthViewDoznvn:Decay:lb303SynthViewRezonance: Resonance:lb303SynthView*Prolnn (crossfade) CrossfademalletsInstrumentTvrdostHardnessmalletsInstrumentLFO Hloubka LFO DepthmalletsInstrumentLFO Rychlost LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrument"Chybjc soubory Missing filesmalletsInstrumentModultor ModulatormalletsInstrument PohybMotionmalletsInstrument PozicePositionmalletsInstrumentTlakPressuremalletsInstrumentRychlostSpeedmalletsInstrument RozsahSpreadmalletsInstrumentVibrafon VibraphonemalletsInstrument"Frekvence vibrta Vibrato FreqmalletsInstrumentZisk vibrta Vibrato GainmalletsInstrumentZda se, ~e Vaae Stk instalace nen kompletn. PYesvd te se, ze STK bal ek je pln nainstalovn!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrument*Prolnn (crossfade) CrossfademalletsInstrumentView,Prolnn (crossfade): Crossfade:malletsInstrumentViewTvrdostHardnessmalletsInstrumentViewTvrdost: Hardness:malletsInstrumentViewNstroj InstrumentmalletsInstrumentViewLFO Hloubka LFO DepthmalletsInstrumentViewLFO Hloubka: LFO Depth:malletsInstrumentViewLFO Rychlost LFO SpeedmalletsInstrumentViewLFO Rychlost: LFO Speed:malletsInstrumentViewModultor ModulatormalletsInstrumentViewModultor: Modulator:malletsInstrumentView PohybMotionmalletsInstrumentView Pohyb:Motion:malletsInstrumentView PozicePositionmalletsInstrumentViewPozice: Position:malletsInstrumentViewTlakPressuremalletsInstrumentView Tlak: Pressure:malletsInstrumentViewRychlostSpeedmalletsInstrumentViewRychlost:Speed:malletsInstrumentView RozsahSpreadmalletsInstrumentViewRozsah:Spread:malletsInstrumentViewVib frekVib FreqmalletsInstrumentViewVib frek: Vib Freq:malletsInstrumentViewVib ziskVib GainmalletsInstrumentViewVib zisk: Vib Gain:malletsInstrumentViewVibrtoVibratomalletsInstrumentViewVibrto:Vibrato:malletsInstrumentView&Npovda&HelpnineButtonSelectorZkreslen DistortionorganicInstrumentHlasitostVolumeorganicInstrumentZkreslen: Distortion:organicInstrumentView Osc %1 panorama:Osc %1 panning:organicInstrumentView"Osc %1 hlasitost:Osc %1 volume:organicInstrumentViewOsc %1 vlna:Osc %1 waveform:organicInstrumentView Nastavit nhodn RandomiseorganicInstrumentViewHlasitost:Volume:organicInstrumentView\Aditivn synteztor pro zvuky podobn varhanm*Additive Synthesizer for organ-like sounds pluginBrowserNstroj pYethnte bu do Editoru skladby, Beat+Bassline Editoru nebo do existujc nstrojov stopy.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowserdFiltr ur en k import projekto z FL Studia do LMMS1Filter for importing FL Studio projects into LMMS pluginBrowserJFiltr pro import MIDI souboro do LMMS)Filter for importing MIDI-files into LMMS pluginBrowserBGUS kompatibiln patch instrumentGUS-compatible patch instrument pluginBrowserFNekompletn monofonn imitace tb303%Incomplete monophonic imitation tb303 pluginBrowser$Prohl~e nstrojoInstrument browser pluginBrowser Pluginy nstrojoInstrument plugins pluginBrowserFSeznam instalovanch LADSPA pluginoList installed LADSPA plugins pluginBrowservPlugin pro zvaen stereo separace vstupnch stereo souboro=Plugin for enhancing stereo separation of a stereo input file pluginBrowser&Libozvu n kleptkaTuneful things to bang on pluginBrowserPVST host pro u~it VST(i) plugino v LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser0Vibra n modeltor strunVibrating string modeler pluginBrowserbez popisuno description pluginBrowsernplugin pro u~it libovolnch LADSPA efekto uvnitY LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowser &Tu n&Bold projectNotes&Barva... &Color... projectNotes&Koprovat&Copy projectNotes&Kurzva&Italic projectNotes$Zarovnat &do bloku&Justify projectNotesZarovnat &vlevo&Left projectNotesV&lo~it&Paste projectNotes &Znovu&Redo projectNotes Zarovnat v&pravo&Right projectNotes&Podtr~en &Underline projectNotes &Zpt&Undo projectNotes$Zarovnat &na stYedC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+RCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+ZCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotes&VyjmoutCu&t projectNotesEditace Edit Actions projectNotesFormtovnFormat Actions projectNotes&Poznmky k projektu Project notes projectNotesnDo tohoto okna mo~ete vkldat Vaae poznmky k projektu.!Put down your project notes here. projectNotesPYejmenovat... Rename... renameDialogAUDIO ROZHRANAUDIO INTERFACE setupDialog$AdresY pro tmataArtwork directory setupDialogAudio nastavenAudio settings setupDialog(VELIKOST VYR. PAMTI BUFFER SIZE setupDialog"Obrzek na pozadBackground artwork setupDialog ZruaitCancel setupDialogHVyberte instala n adresY FL Studia'Choose FL Studio installation directory setupDialogDVyberte adresY pro LADSPA pluginyChoose LADSPA plugin directory setupDialogBVyberte pro LMMS pracovn adresYChoose LMMS working directory setupDialog>Vyberte adresY pro STK rawwaveChoose STK rawwave directory setupDialog0Vyberte adresY s tmatyChoose artwork-theme directory setupDialog2Vyberte obrzek na pozadChoose background artwork setupDialog2Vyberte vchoz SoundFontChoose default SoundFont setupDialog>Vyberte adresY pro VST pluginy Choose your VST-plugin directory setupDialog(Mal tla tka u stopCompact track buttons setupDialog<Komprimovat soubory s projekty"Compress project files per default setupDialog0Vchoz Soundfont souborDefault Soundfont File setupDialog:Zobrazovat hlasitost jako dBVDisplay volume as dBV  setupDialog8Povolit automatick ukldnEnable auto save feature setupDialog@Povolit nzvy tno v piano rollu Enable note labels in piano roll setupDialog2Aktivovat nstrojov tipyEnable tooltips setupDialogbPovolit zobrazen waveformu ve vchozm nastaven"Enable waveform display by default setupDialog8Instala n adresY FL Studia FL Studio installation directory setupDialog0Rmce: %1 Zpo~dn %2 msFrames: %1 Latency: %2 ms setupDialog Hlavn nastavenGeneral settings setupDialogDHQ re~im pro vstup audio zaYzenHQ-mode for output audio-device setupDialogZde vyberte preferovan MIDI rozhran. V zvislosti na konfiguraci Vaaeho systmu pYi kompilaci mo~ete volit mezi ALSA OSS a dalami. N~e vidte pol ko, kter nabz mo~nost nastaven vybranho MIDI rozhran.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogZde vyberte preferovan audio rozhran. V zvislosti na konfiguraci Vaaeho systmu pYi kompilaci mo~ete volit mezi ALSA, JACK, OSS a dalami. N~e vidte pol ko, kter nabz mo~nost nastaven vybranho audio rozhran.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialogZde mo~ete nastavit intern velikost vyrovnvac pamti, kter je u~vna LMMS. Nzk hodnoty vedou k menamu zpo~dn, ale tak zposobuj nepou~iteln zvuk nebo apatn vkon, zejmna na starch po ta ch  i systmech s jdrem nepodporujcm real time.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog.Cesty k LADSPA pluginomLADSPA plugin paths setupDialog2Pracovn adresY pro LMMSLMMS working directory setupDialogMIDI ROZHRANMIDI INTERFACE setupDialogMIDI nastaven MIDI settings setupDialogOKOK setupDialog<Re~im jedn stopy pro nstroje One instrument track window mode setupDialog CestyPaths setupDialog Nastaven vkonuPerformance settings setupDialogjMnoh zmny nastaven se projev a~ po restartu LMMS!GPlease note that most changes won't take effect until you restart LMMS! setupDialog0Nastavit vchoz hodnotyReset to default-value setupDialog Restartovat LMMS Restart LMMS setupDialog.AdresY pro STK rawwaveSTK rawwave directory setupDialogNastavit LMMS Setup LMMS setupDialog`Zobrazit pYehrvac kurzor v AudioFileProcessoru*Show playback cursor in AudioFileProcessor setupDialogHVyzvat k restartu po zmn nastaven,Show restart warning after changing settings setupDialog@Plynul posouvn v Song EditoruSmooth scroll in Song Editor setupDialogdSynchronizace VST plugino s hostujcm pYehrvnm!Sync VST plugins to host playback setupDialogNEfekty u~ivatelskho rozhran vs. vkonUI effects vs. performance setupDialog.AdresY pro VST pluginyVST-plugin directory setupDialogZiskGain sf2InstrumentZiskGainsf2InstrumentViewTyp filtru Filter type sidInstrumentRezonance Resonance sidInstrumentHlasitostVolume sidInstrumentDoznvn:Decay:sidInstrumentViewRezonance: Resonance:sidInstrumentViewSustain:Sustain:sidInstrumentViewSynchronizovanSyncsidInstrumentViewHlasitost:Volume:sidInstrumentViewPrzdn projekt Empty projectsong"FL Studio projektFL Studio projectssong"Importovat soubor Import filesongMIDI sekvenceMIDI sequencessong*Hlavn ladn (pitch) Master pitchsong Hlavn hlasitost Master volumesong(Projekt NEN ulo~en.Project NOT saved.songProjekt ulo~en Project savedsongHZvolte soubor pro export projektu...!Select file for project-export...song TempoTemposong4Projekt %1 je nyn ulo~en.The project %1 is now saved.song0Projekt %1 nebyl ulo~en!The project %1 was not saved!songTento projekt je przdn, jeho exportovn nem smysl. NejdYve prosm vlo~te njak polo~ky do Editoru skladby!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songnepojmenovanuntitledsong `Yka:Width:stereoEnhancerControlDialog `YkaWidthstereoEnhancerControls>Po skon en jdi zpt na za tekAfter stopping go back to begintimeLinerPo skon en jdi zpt na pozici ze kter pYehrvn za alo?After stopping go back to position at which playing was startedtimeLine2Po skon en udr~uj poziciAfter stopping keep positiontimeLineBPovolit/zakzat automatick posunEnable/disable auto-scrollingtimeLineZPovolit/zakzat body pro pYehrvn ve smy ceEnable/disable loop-pointstimeLineRadaHinttimeLineZtlumenMutedtrackSloSolotrackZtlumenMutedtrackContentObject,%1:%2 (%3:%4 do %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectViewKoprovatCopytrackContentObjectViewAktuln dlkaCurrent lengthtrackContentObjectViewAktuln poziceCurrent positiontrackContentObjectViewVyjmoutCuttrackContentObjectViewBSmazat (prostYedn tla tko myai)Delete (middle mousebutton)trackContentObjectViewRadaHinttrackContentObjectViewXZtlumit/neztlumit (<Ctrl> + prostYedn klik)#Mute/unmute ( + middle click)trackContentObjectView Vlo~itPastetrackContentObjectViewdK vytvoYen kopie stisknte <Ctrl> a thnte mya.%Press and drag to make a copy.trackContentObjectViewXStisknte <Ctrl> pro voln mnn velikosti.Press for free resizing.trackContentObjectView&Akce pro tuto stopuActions for this tracktrackOperationsWidget&Klonovat tuto stopuClone this tracktrackOperationsWidgetZtlumitMutetrackOperationsWidget$Ztlumit tuto stopuMute this tracktrackOperationsWidget(Odstranit tuto stopuRemove this tracktrackOperationsWidgetSloSolotrackOperationsWidget4Chyba na tn VST pluginuFailed loading VST-pluginvestigeInstrumentNa tm pluginLoading pluginvestigeInstrumentZProsm  ekejte dokud se nena te VST plugin...'Please wait while loading VST-plugin...vestigeInstrument"VST plugin %1 nemohl bt z ur itch dovodo na ten. Jestli~e tento plugin funguje v Linuxu v jinm VST softwaru, kontaktujte prosm LMMS vvojYe!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentLPro zapnut/vypnut vlny kliknte zde.&Click here to enable/disable waveform. vibedViewDPro normalizaci vlny kliknte zde.!Click here to normalize waveform. vibedView>Pro uhlazen vlny kliknte zde.Click here to smooth waveform. vibedViewRozladit:Detune: vibedViewZapnout vlnuEnable waveform vibedView Dlka:Length: vibedViewNormalizovat Normalize vibedView OktvaOctave vibedViewPan:Pan: vibedView Pozice drnknut:Pick position: vibedViewPozice snma e:Pickup position: vibedViewPilovit vlnaSaw wave vibedViewSinusov vlna Sine wave vibedViewUhladitSmooth vibedView.Pravohl (square) vlna Square wave vibedView StrunaString vibedViewOvlada 'P' nastavuje pozici na kter bude na vybranou strunu drnknuto. Ni~a nastaven znamen hoz bl~e ke kobylce.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewOvlada 'PU' nastavuje pozici snma e pro vybranou strunu. Ni~a nastaven znamen snma bl~e u kobylky.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedView^Ovlada 'V' nastavuje hlasitost vybran struny.4The 'V' knob sets the volume of the selected string. vibedViewOvlada Rozladn mn ladn vybran struny. Hodnoty ni~a ne~ nula zposob ploch zvuk, hodnoty vyaa ne~ nula zposob ostYeja zvuk.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewOvlada Dlka nastavuje dlku vybran struny. Dela struny budou znt dle a jasnji, tak vaak spoYdaj vce CPU cyklo.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewzPan ovlada ur uje pozici vybran struny ve stereo prostoru. PThe Pan knob determines the location of the selected string in the stereo field. vibedViewVoli strun se u~v k vbru struny, kter bude upravovna. Nstroj Vibed mo~e obsahovat maximln devt nezvisle vibrujcch strun. LED v pravm dolnm rohu editoru tvaru vlny indikuje zda je vybran struna aktivn.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewTrianglov vlna Triangle wave vibedView4Vlna definovan u~ivatelemUser defined wave vibedViewHlasitost:Volume: vibedViewBl aumWhite noise wave vibedViewfKliknut zapn/vypn vizualizaci hlavnho vstupu6click to enable/disable visualization of master-outputvisualizationWidgetlmms-1.1.3/data/locale/cs.ts000066400000000000000000011244551247673406200156400ustar00rootroot00000000000000 AboutDialog About LMMS O LMMS Version %1 (%2/%3, Qt %4, %5) Verze %1 (%2/%3, Qt %4, %5) About O LMMS LMMS - easy music production for everyone LMMS - jednoduchá hudební produkce pro každého Authors Autoři Translation Překlad Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Licence Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2014, vývojáři <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS LMMS AmplifierControlDialog VOL VOL Volume: Hlasitost: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Hlasitost Panning Left gain Right gain AudioAlsa::setupWidget DEVICE ZAŘÍZENÍ CHANNELS KANÁLY AudioFileProcessorView Open other sample Otevřít jiný sampl Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Kliknutím sem můžete otevřít jiný audio soubor. Ukáže se dialog, pomocí kterého si soubor můžete vybrat. Nastavení jako režim smyčkování, počáteční a koncové body, hodnota zesílení apod. zůstanou stejná, takže to nemusí znít jako původní sampl. Reverse sample Přehrávat pozpátku If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Zapnete-li toto tlačítko, celý sampl bude přehráván pozpátku. Tato volba je užitečná pro zajímavé efekty jako např. pozpátku přehraná srážka. Amplify: Zesílení: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Tímto ovladačem můžete nastavit poměr zesílení. Pokud nastavíte hodnotu 100%, sampl se nezmění. Jinak se zesílí nebo ztiší (soubor samplu se tím vůbec nezmění!) Startpoint: Počáteční bod: Endpoint: Koncový bod: Continue sample playback across notes Přehrávat sampl napříč tóny Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Povolení této možnosti způsobí, že se sampl bude přehrávat přes různé tóny - pokud změníte ladění (pitch), nebo když tón skončí před koncem samplu, tak bude další přehrávaný tón pokračovat kde přestal. Pro obnovení přehrávání na začátek samplu, vložte tón do spodní části kláves (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: Délka samplu: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME JMÉNO-KLIENTA CHANNELS KANÁLY AudioOss::setupWidget DEVICE ZAŘÍZENÍ CHANNELS KANÁLY AudioPortAudio::setupWidget BACKEND DEVICE ZAŘÍZENÍ AudioPulseAudio::setupWidget DEVICE ZAŘÍZENÍ CHANNELS KANÁLY AudioSdl::setupWidget DEVICE ZAŘÍZENÍ AutomatableModel &Reset (%1%2) &Resetovat (%1%2) &Copy value (%1%2) &Kopírovat hodnoty (%1%2) &Paste value (%1%2) &Vložit hodnoty (%1%2) Edit song-global automation Editovat automatizaci pro celý song Connected to %1 Připojeno k %1 Connected to controller Připojeno ke kontroléru Edit connection... Editovat připojení... Remove connection Odebrat připojení Connect to controller... Připojit ke kontroléru... Remove song-global automation Odebrat obecnou automatizaci Remove all linked controls Odebrat všechny propjené ovladače AutomationEditor Play/pause current pattern (Space) Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník) Stop playing of current pattern (Space) Zastavit přehrávání aktuálního patternu (mezerník) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci, neboť pattern je automaticky přehráván ve smyčce. Click here if you want to stop playing of the current pattern. Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu. Draw mode (Shift+D) Režim kreslení (Shift+D) Erase mode (Shift+E) Režim mazání (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Klikněte zde, pokud chcete aktivovat režim kreslení. V tomto výchozím a nejčastěji užívaném režimu lze přidávat a přesunovat jednotlivé hodnoty. Pro aktivaci můžete využít též klávesové zkratky Shift+D. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Klikněte zde, pokud chcete aktivovat režim mazání. V tomto režimu lze mazat jednotlivé hodnoty. Pro aktivaci můžete využít též klávesové zkratky Shift+E. Cut selected values (Ctrl+X) Vyjmout označené hodnoty (Ctrl+X) Copy selected values (Ctrl+C) Kopírovat označené hodnoty (Ctrl+C) Paste values from clipboard (Ctrl+V) Vložit hodnoty ze schránky (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klikněte zde, pokud chcete označené hodnoty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klikněte zde, pokud chcete označené hodnoty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit. Click here and the values from the clipboard will be pasted at the first visible measure. Kliknete-li zde, budou hodnoty ze schránky vloženy do prvního viditelného taktu. Automation Editor - no pattern Automatizační editor - žádný pattern Automation Editor - %1 Automatizační editor - %1 Please open an automation pattern with the context menu of a control! Otevřete prosím automatizační pattern pomocí kontextového menu ovládání! Values copied Hodnoty zkopírovány All selected values were copied to the clipboard. Všechny označené hodnoty byly zkopírovány do schránky. Discrete progression Oddělený vývoj Linear progression Lineární vývoj Cubic Hermite progression Cubic Hermite vývoj Tension: Napětí: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Kliknutím sem vyberete oddělený vývoj pro tento automatizační pattern. Hodnota připojeného objektu zůstane konstantní mezi ovládacími body a okamžitě nastavena na novou hodnotu když se dosáhne každého ovládacího bodu. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Kliknutím sem vyberete lineární vývoj pro tento automatizační pattern. Hodnota připojeného objektu se změní ve stabilní frekvenci mezi ovládacími body, aby postupně došlo k dosažení dalšího kontrolního bodu. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Kliknutím sem vyberte cubic hermite vývoj pro tento automatizační pattern. Hodnota připojeného objektu se změní po plynulé křivce a lehce přejde do vrchních a spodních bodů. Tension value for spline Hodnota napětí pro spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. Větší hodnota napětí vytvoří plynulejší křivku ale překročí některé hodnoty. Malá hodnota napětí způsobí vyrovnání sklonu křivky na každém ovládacím bodě. AutomationPattern Drag a control while pressing <Ctrl> Ovladač táhni při stisknutém <CTRL> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor dvojklikem otevřít tento pattern v automatizačním editoru Open in Automation editor Otevřít v automatizačním editoru Clear Vyčistit Reset name Resetovat jméno Change name Změnit jméno %1 Connections %1 Připojení Disconnect "%1" Odpojit "%1" Set/clear record Nastav/vyčisti záznam AutomationTrack Automation track Automatizační stopa BassBoosterControlDialog FREQ Frequency: Frekvence: GAIN Gain: Zisk: RATIO POMĚR Ratio: Poměr: BassBoosterControls Frequency Frekvence Gain Zisk Ratio Poměr CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Kontrolér %1 ControllerConnectionDialog Connection Settings Nastavení připojení MIDI CONTROLLER MIDI KONTROLÉR Input channel Vstupní kanál CHANNEL KANÁL Input controller Vstupní kontrolér CONTROLLER KONTROLÉR Auto Detect Autodetekce MIDI-devices to receive MIDI-events from MIDI-zařízení k přijmu MIDI-události USER CONTROLLER UŽIVATELSKÝ KONTROLÉR MAPPING FUNCTION MAPOVACÍ FUNKCE OK OK Cancel Zrušit LMMS LMMS Cycle Detected. Detekován cyklus. ControllerRackView Controller Rack Kontroléry Add Přidat Confirm Delete Potvrdit Smazání Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. Opravdu smazat? Tento kontrolér má jedno nebo více existujících připojení. Tento krok nelze vrátit zpět. ControllerView Controls Ovladače Controllers are able to automate the value of a knob, slider, and other controls. Kontroléry jsou schopny automatizovat nastavení ovladačů, šoupátek a dalších řídicích prvků. Rename controller Přejmenovat kontrolér Enter the new name for this controller Vložte nové jméno pro tento kontrolér &Remove this plugin &Odstranit tento plugin &Help Nápověda DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Efekt aktivován Wet/Dry mix Wet/Dry mix Gate Brána Decay Doznívání EffectChain Effects enabled Efekty aktivovány EffectRackView EFFECTS CHAIN ŘETĚZ EFEKTŮ Add effect Přidat efekt EffectSelectDialog Add effect Přidat efekt Plugin description Popis pluginu EffectView Toggles the effect on or off. Zapnout nebo vypnout efekty. On/Off Zap/Vyp W/D Wet Level: Wet Hodnota: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. Wet/Dry ovladač nastavuje poměr mezi vstupním signálem a signálem efektu, který formuje výstup. DECAY DOZNÍVÁNÍ Time: Čas: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. Ovladač Doznívání ovládá, kolik bufferů ticha musí projít před tím, než plugin přestane zpracovávat. Menší hodnoty zredukují využití CPU, ale můžou způsobit uříznutí ozvěn. GATE BRÁNA Gate: Brána: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Tlačítko Brána určuje sílu signálu který je považován za ticho při rozhodování kdy skončit se zpracováním signálů. Controls Ovladače Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Posunout &nahoru Move &down Posunout &dolu &Remove this plugin &Odstranit tento plugin &Help Nápověda EnvelopeAndLfoParameters Predelay Attack Hold Decay Doznívání Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Frek x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. ATT Attack: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. HOLD Hold: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. DEC Decay: Doznívání: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. SUST SUST Sustain: Sustain: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. REL Release: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. AMT Modulation amount: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Click here for a sine-wave. Klikněte zde pro sinusovou vlnu. Click here for a triangle-wave. Klikněte zde pro trianglovou vlnu. Click here for a saw-wave for current. Klikněte zde pro pilovitou vlnu. Click here for a square-wave. Klikněte zde pro pravoúhlou vlnu. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 FREK x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. control envelope-amount by this LFO ms/LFO: Hint Rada Drag a sample from somewhere and drop it in this window. Sampl odněkud přetáhněte a pusťte jej v tomto okně. Click here for random wave. ExportProjectDialog Export project Output Výstup File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel Zrušit Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help FxMixer Master FX %1 FX %1 FxMixerView Rename FX channel Přejmenovat FX kanál Enter the new name for this FX channel Vložte nové jméno pro tento FX kanál FX-Mixer FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute Ztlumit Mute this FX channel Ztlumit tento FX kanál FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio Arpeggio type Typ arpeggia Arpeggio range Rozsah arpeggia Arpeggio time Čas arpeggia Arpeggio gate Brána arpeggia Arpeggio direction Arpeggio směr Arpeggio mode Režim arpeggia Up Nahoru Down Dolu Up and down Nahoru a dolů Random Náhodně Free Volný Sort Tříděný Sync Synchronizovaný Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Arpeggio je způsob hraní (zejména na drnkací nástroje), které činí hudbu mnohem živější. Struny těchto nástrojů (např. harfy) jsou rozechvěny jako v akordech. Jediným rozdílem je, že se tak stane sekvenčně, takže tóny nejsou zahrány ve stejnou dobu. Typickým arpeggiem jsou durové a mollové trojzvuky, ale možných dalších akordů, které si můžete vybrat, je spousta. RANGE ROZSAH Arpeggio range: Rozsah arpeggia: octave(s) oktáva(y) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Tento ovladač užívejte pro nastavení rozsahu arpeggia v oktávách. Vybrané arpeggio bude zahráno ve zvoleném počtu oktáv. TIME ČAS Arpeggio time: Čas arpeggia: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. GATE BRÁNA Arpeggio gate: Brána arpeggia: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Tento ovladač užívejte pro nastavení brány arpeggia. Brána arpeggia určuje procento celého arpeggio-tónu, který má být zahrán. Pomocí brány arpeggia můžete udělat bezva arpeggio staccato. Chord: Direction: Směr: Mode: Režim: InstrumentFunctionNoteStacking octave oktáva Major Majb5 minor minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Harmonický moll Melodic minor Melodický moll Whole tone Celá nota Diminished Snížený Major pentatonic Durová pentatonika Minor pentatonic Mollová pentatonika Jap in sen Major bebop Durový bebop Dominant bebop Blues Blues Arabic Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Chord type Typ akordu Chord range Rozsah akordu Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE ROZSAH Chord range: Rozsah akordu: octave(s) oktáva(y) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Tento ovladač užívejte pro nastavení rozsahu akordů v oktávách. Vybraný akord bude zahrán ve zvoleném počtu oktáv. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT POVOLIT MIDI VSTUP CHANNEL KANÁL VELOCITY ENABLE MIDI OUTPUT POVOLIT MIDI VÝSTUP PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME HLASITOST Volume Hlasitost CUTOFF SEŘÍZNUTÍ Cutoff frequency Frekvence seříznutí RESO REZO Resonance Rezonance Envelopes/LFOs Filter type Typ filtru Q/Resonance LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET CÍL These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER FILTR Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Zde si můžete vybrat z vestavěných filtrů, které chcete použít pro tuto stopu nástroje. Filtry jsou velmi důležité pro změnu charakteristiky zvuku. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO REZO Resonance: Rezonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track nepojmenovaná_stopa Volume Hlasitost Panning Pitch FX channel FX kanál Default preset Výchozí nastavení With this knob you can set the volume of the opened channel. Tímto ovladačem můžete nastavit hlasitost otevřeného kanálu. Base note Základní nota Pitch range InstrumentTrackView Volume Hlasitost Volume: Hlasitost: VOL VOL Panning Panning: PAN MIDI MIDI Input Vstup Output Výstup InstrumentTrackWindow GENERAL SETTINGS HLAVNÍ NASTAVENÍ Instrument volume Hlasitost nástroje Volume: Hlasitost: VOL VOL Panning Panning: PAN Pitch Pitch: cents PITCH FX channel FX kanál ENV/LFO FUNC FX FX MIDI MIDI Save preset Uložit předvolbu XML preset file (*.xpf) XML soubor předvoleb (*.xpf) PLUGIN PLUGIN Pitch range (semitones) RANGE ROZSAH Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Spojit kanály LadspaControlDialog Link Channels Spojit s kanály Channel Kanál LadspaControlView Link channels Spojit kanály Value: Hodnota: Sorry, no help available. Promiňte, nápověda není k dispozici. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: Vložte prosím novou hodnotu mezi %1 a %2: LfoController LFO Controller Base value Základní hodnota Oscillator speed Rychlost oscilátoru Oscillator amount Míra oscilátoru Oscillator phase Fáze oscilátoru Oscillator waveform Vlna oscilátoru Frequency Multiplier Frekvenční multiplikátor LfoControllerDialog LFO LFO Controller BASE Base amount: Základní míra: todo SPD LFO-speed: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees stupně With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Klikněte zde pro sinusovou vlnu. Click here for a triangle-wave. Klikněte zde pro trianglovou vlnu. Click here for a saw-wave. Klikněte zde pro pilovitou vlnu. Click here for a square-wave. Klikněte zde pro pravoúhlou vlnu. Click here for a a moog saw-wave. Klikněte zde pro pilovitou vlnu typu Moog. Click here for an exponential wave. Klikněte zde pro exponenciální vlnu. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory Pracovní adresář The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Pracovní adresář LMMS %1 neexistuje. Chcete jej nyní vytvořit? Tento adresář můžete změnit později přes Upravit > Nastavení. Could not save config-file Nemohu uložit konfigurační soubor Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Nemohu uložit konfigurační soubor %1. Pravděpodobně nemáte právo k zápisu do tohoto souboru. Ujistěte se prosím, že máte k souboru právo zápisu a zkuste to znovu. &Project &Projekt &New &Nový &Open... &Otevřít... Recently opened projects Nedávno otevřené projekty &Save &Uložit Save &As... Uložit &jako... Import... Importovat... E&xport... E&xportovat... &Quit &Ukončit &Edit Úp&ravy Settings Nastavení &Tools Nás&troje &Help Online help Nápověda online Help Nápověda What's this? Co je to? About O LMMS Create new project Vytvořit nový projekt Create new project from template Vytvořit nový projekt ze šablony Open existing project Otevřít existující projekt Recently opened project Naposledy otevřené projekty Save current project Uložit aktuální projekt Export current project Exportovat aktuální projekt Show/hide Song-Editor Ukaž/schovej Editor skladby By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Zmačknutím tohoto knoflíku zobrazíte nebo schováte Editor skladby. S jeho pomocí můžete editovat playlist skladby a specifikovat, kdy a která stopa má být přehrána. Můžete také vložit a přesunovat samply (např. rapové) přímo do playlistu. Show/hide Beat+Bassline Editor Ukaž/schovej Beat+Bassline editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Zmačknutím tohoto knoflíku zobrazíte nebo schováte Beat+Bassline editor. Beat+Bassline editor je nezbytný pro tvorbu beatů a pro otevírání, přidávání a odebírání kanálů. Dále pro vyjmutí, kopírování a vložení beatů, Beat+Bassline patternů a dalších podobných věcí. Show/hide Piano-Roll Ukaž/schovej Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Klikněte zde, pokud chcete ukázat nebo schovat Piano-Roll. S pomocí Piano-Roll můžete jednoduchým způsobem editovat melodie. Show/hide Automation Editor Ukaž/schovej Automatizační editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Klikněte zde, pokud chcete ukázat nebo schovat Automatizační editor. S pomocí Automatizačního editoru můžete jednoduchým způsobem editovat dynamické hodnoty. Show/hide FX Mixer Ukaž/schovej FX Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Klikněte zde, pokud chcete ukázat nebo schovat FX Mixer. FX Mixer je velmi mocný nástroj pro správu efektů ve vaší skladbě. Efekty můžete vkládat do různých efektových kanálů. Show/hide project notes Ukaž/schovej poznámky k projektu Click here to show or hide the project notes window. In this window you can put down your project notes. Klikněte zde, pokud chcete ukázat nebo schovat okno pro poznámky. V tomto okně lze vkládat vaše poznámky k projektu. Show/hide controller rack Ukaž/schovej kontrolér rack Untitled Nepojmenovaný LMMS %1 LMMS %1 Project not saved Projekt není uložen The current project was modified since last saving. Do you want to save it now? Aktuální projekt byl od posledního uložení změněn. Chcete jej nyní uložit? Open project Otevřít projekt Save project Uložit projekt Help not available Nápověda není dostupná Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. V současnosti není v LMMS nápověda dostupná. Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/wiki. My projects My samples My presets My home My computer Root directory LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Save as new &version E&xport tracks... Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE ZAŘÍZENÍ MidiAlsaSeq::setupWidget DEVICE ZAŘÍZENÍ MidiController MIDI Controller MIDI kontrolér unnamed_midi_controller nepojmenovaný_midi_kontrolér MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE ZAŘÍZENÍ MidiPort Input channel Vstupní kanál Output channel Výstupní kanál Input controller Vstupní kontrolér Output controller Výstupní kontrolér Fixed input velocity Pevná vstupní rychlost Fixed output velocity Pevná výstupní rychlost Output MIDI program Výstupní MIDI program Receive MIDI-events Přijímat MIDI-události Send MIDI-events Posílat MIDI-události Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Hlavní hlasitost Vibrato Vibráto OscillatorObject Osc %1 volume Osc %1 hlasitost Osc %1 panning Osc %1 panorama Osc %1 coarse detuning Osc %1 fine detuning left Osc %1 jemné rozladění vlevo Osc %1 fine detuning right Osc %1 phase-offset Osc %1 stereo phase-detuning Osc %1 wave shape Osc %1 forma vlny Modulation type %1 Osc %1 waveform Osc %1 vlna Osc %1 harmonic PatmanView Open other patch Otevřít jiný patch Click here to open another patch-file. Loop and Tune settings are not reset. Klikněte zde, pokud chcete otevřít další patch-soubor. Nastavení smyčky a režimu ladění budou zachována. Loop Smyčka Loop mode Režim smyčky Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Zde můžete zapnout režim smyčky, Jestliže je režim aktivní PatMan použije dostupné informace o smyčcem ze souboru. Tune Ladit Tune mode Režim ladění Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Zde můžete zapnout režim smyčky, Jestliže je režim aktivní PatMan naladí sampl tak, aby frekvence odpovídala tónu. No file selected Žádný soubor není vybrán Open patch file Otevřít patch soubor Patch-Files (*.pat) Patch-Soubory (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step dvojitým kliknutím otevřete tento pattern v piano-roll k nastavení zesílení kroku použijte kolečko myši Open in piano-roll Otevřít v piano-roll Clear all notes Vyčistit všechny noty Reset name Resetovat jméno Change name Změnit jméno Add steps Přidat kroky Remove steps Odstranit kroky PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Základní míra: Modulation amount: Attack: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Základní hodnota Modulation amount Stupeň (amount) modulace Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník) Record notes from MIDI-device/channel-piano Nahrávat noty z MIDI-zařízení/piano kanálu Stop playing of current pattern (Space) Zastavit přehrávání aktuálního patternu (mezerník) Draw mode (Shift+D) Režim kreslení (Shift+D) Erase mode (Shift+E) Režim mazání (Shift+E) Select mode (Shift+S) Režim výběru (Shift+S) Cut selected notes (Ctrl+X) Vyjmout označené noty (Ctrl+X) Copy selected notes (Ctrl+C) Kopírovat označené noty (Ctrl+C) Paste notes from clipboard (Ctrl+V) Vložit noty ze schránky (Ctrl+V) Last note Trvání noty Piano-Roll - no pattern Piano-Roll - žádný pattern Piano-Roll - %1 Piano-Roll - %1 Please open a pattern by double-clicking on it! Otevřete prosím pattern jeho dvojitým poklepáním! Record notes from MIDI-device/channel-piano while playing song or BB track Nahrávat tóny z MIDI zařízení / kanálu piána při přehrávání skladby nebo BB stopy Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci. Pattern je automaticky přehráván ve smyčce. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu, následně si je můžete přehrát nebo upravit. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu a na pozadí uslyšíte skladbu nebo BB stopu. Click here to stop playback of current pattern. Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klikněte zde pokud chcete označené noty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klikněte zde pokud chcete označené noty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit. Click here and the notes from the clipboard will be pasted at the first visible measure. Kliknete-li zde, budou noty ze schránky vloženy do prvního viditelného taktu. Note lock Zámek noty Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Vložte prosím novou hodnotu mezi %1 a %2: PianoView Base note Základní nota Plugin Plugin not found Plugin nenalezen The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Plugin "%1" nebyl nalezen nebo nemůže být načten! Důvod: "%2" Error while loading plugin Při načítání pluginu došlo k chybě Failed to load plugin "%1"! Načtení pluginu "%1" selhalo! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) WAV soubor (*.wav) Compressed OGG-File (*.ogg) Komprimovaný soubor OGG (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Název: File: Soubor: Maker: Tvůrce: Copyright: Copyright: Requires Real Time: Vyžadován Real Time: Yes Ano No Ne Real Time Capable: Real time schopnost: Channels In: Kanály vstup: Channels Out: Kanály výstup: In Place Broken: File: %1 SampleBuffer Open audio file Otevřít audio soubor Wave-Files (*.wav) Wav soubory (*.wav) OGG-Files (*.ogg) OGG soubory (*.ogg) DrumSynth-Files (*.ds) DrumSynth soubory (*.ds) FLAC-Files (*.flac) FLAC soubory (*.flac) SPEEX-Files (*.spx) SPEEX soubory (*.spx) VOC-Files (*.voc) VOC soubory (*.voc) AIFF-Files (*.aif *.aiff) AIFF soubory (*.aif *.aiff) AU-Files (*.au) AU soubory (*.au) RAW-Files (*.raw) RAW soubory (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample dvojitým kliknutím vyberte sampl Delete (middle mousebutton) Smazat (prostřední tlačítko myši) Cut Vyjmout Copy Kopírovat Paste Vložit Mute/unmute (<Ctrl> + middle click) Ztlumit/neztlumit (<Ctrl> + prostřední klik) Set/clear record Nastav/vyčisti záznam SampleTrack Sample track Stopa samplů Volume Hlasitost SampleTrackView Track volume Hlasitost stopy Channel volume: Hlasitost kanálu: VOL VOL SongEditor Song-Editor Editor skladby Play song (Space) Přehrát skladbu (mezerník) Stop song (Space) Zastavit přehrávání skladby (mezerník) Add beat/bassline Přidat beat/bassline Add sample-track Přidat stopu samplů Draw mode Režim kreslení Edit mode (select and move) Režim editace (označit a přesunout) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Klikněte zde, pokud chcete přehrát celou skladbu. Přehrávání začne v místě kde se nalézá zelený označovač pozice se kterým lze též při přehrávání pohybovat. Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Klikněte zde, pokud chcete zastavit přehrávání skladby. Označovač pozice bude odeslán na začátek skladby. Could not open file Nemohu otevřít soubor Could not write file Nemohu zapsat soubor Add automation-track Přidat automatizační stopu Record samples from Audio-device Nahrát samply z audio zařízení Record samples from Audio-device while playing song or BB track Nahrát samply z audio zařízení při přehrávání skladby nebo BB stopy Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Nelze otevřít soubor %1. Pravděpodobně nemáte oprávnění číst tento soubor. Ujistěte se prosím, že mát oprávnění alespoň číst tento soubor a zkuste to znovu. Error in file Chyba v souboru The file %1 seems to contain errors and therefore can't be loaded. Soubor %1 nejspíše obsahuje chyby a nemohl být načten. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song tempo skladby The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). Tempo skladby je uvedeno v úderech za minutu (BPS). Chcete-li změnit tempo skladby, změňte tuto hodnotu. Každý takt má čtyři beaty, takže tempo v BPS specifikuje kolik taktů / 4 bude za minutu přehráno (nebo kolik taktů bude přehráno ve čtyřech minutách). High quality mode Režim vysoké kvality Master volume Hlavní hlasitost master volume hlavní hlasitost Master pitch Hlavní ladění (pitch) master pitch hlavní ladění Value: %1% Hodnota: %1% Value: %1 semitones Hodnota: %1 půltónů Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. Nelze zapisovat do souboru %1. Pravděpodobně nemáte oprávnění zapisovat do tohoto souboru. Ujistěte se prosím, že máte oprávnění zapisovat do tohoto souboru a zkuse to znovu. SpectrumAnalyzerControlDialog Linear spectrum Lineární spektrum Linear Y axis Lineární osa Y SpectrumAnalyzerControls Linear spectrum Lineární spektrum Linear Y axis Lineární osa Y Channel mode Režim kanálu TempoSyncKnob Tempo Sync Synchronizace tempa No Sync Nesynchronizovaný Eight beats Osm beatů Whole note Celá nota Half note Půlová nota Quarter note Čtvrťová nota 8th note Osminová nota 16th note Šestnáctinová nota 32nd note Dvaatřicetinová nota Custom... Vlastní... &Help Custom Vlastní Synced to Eight Beats Synchro k osmi beatům Synced to Whole Note Synchro k celé notě Synced to Half Note Synchro k půlové notě Synced to Quarter Note Synchro ke čtvrťové notě Synced to 8th Note Synchro k osminové notě Synced to 16th Note Synchro k šestnáctinové notě Synced to 32nd Note Synchro k dvaatřicetinové notě TimeDisplayWidget click to change time units kliknutí změní časové jednotky TrackContainer Couldn't import file Nemohu importovat soubor Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Nemohu najít filtr pro import souboru %1. Měli byste tento soubor zkonvertovat do formátu podporovaného LMMS pomocí jiného software. Couldn't open file Nemohu otevřít soubor Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Nemohu otevřít soubor %1 pro čtení. Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslušného adresáře a zkuste to znovu! Loading project... Načítám projekt... Cancel Zrušit Please wait... Prosím čekejte... Importing MIDI-file... Importuji MIDI soubor... Importing FLP-file... Importuji FLP soubor... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: Osc %1 hlasitost: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Osc %1 panning: Osc %1 panorama: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Osc %1 coarse detuning: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Osc %1 fine detuning left: Osc %1 jemné rozladění vlevo: cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 fine detuning right: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 phase-offset: degrees stupně With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Otevřít ostatní VST pluginy Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Klikněte zde, pokud chcete otevřít ostatní VST pluginy. Po kliknutí na toto tlačítko se objeví okno ve kterém můžete soubor vybrat. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Klikněte zde pro zobrazení nebo skrytí grafického rozhraní (GUI) pro vaše VST pluginy. Turn off all notes Open VST-plugin Otevřít VST plugin DLL-files (*.dll) DLL soubory (*.dll) EXE-files (*.exe) EXE soubory (*.exe) No VST-plugin loaded Žádný VST plugin nebyl načten Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Uložit předvolbu Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Uložit předvolbu Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Načítám plugin Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normalizovat Click to normalize Invert Click to invert Smooth Uhladit Click to smooth Sine wave Sinusová vlna Click for sine wave Triangle wave Trianglová vlna Click for triangle wave Click for saw wave Square wave Pravoúhlá (square) vlna Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Reverse sample Přehrávat pozpátku Amplify Zesílení Start of sample Začátek samplu End of sample Konec samplu Stutter Loopback point Loop mode Režim smyčky Interpolation mode None Linear Sinc bbEditor Play/pause current beat/bassline (Space) Přehrát nebo pozastavit přehrávání (mezerník) Add beat/bassline Přidat beat/basovou linku Beat+Bassline Editor Beat+Baseline Editor Add automation-track Přidat automatizační stopu Stop playback of current beat/bassline (Space) Zastavit přehrávání aktuální beat/bassline (mezerník) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Klikněte zde, pokud chcete přehrát aktuální beat/baseline. Beat/baseline je automaticky přehráván ve smyčce. Click here to stop playing of current beat/bassline. Klikněte zde, pokud chcete zastavit přehrávání aktuální beat/bassline. Remove steps Odstranit kroky Add steps Přidat kroky bbTCOView Open in Beat+Bassline-Editor Otevřít v Beat+Bassline editoru Reset name Resetovat jméno Change name Změnit jméno Change color Změnit barvu Reset color to default bbTrack Beat/Bassline %1 Beat/Bassline %1 Clone of %1 bitInvader Samplelength Délka samplu bitInvaderView Sample Length Délka samplu Sine wave Sinusová vlna Triangle wave Trianglová vlna Saw wave Pilovitá vlna Square wave Pravoúhlá (square) vlna White noise wave Bílý šum User defined wave Vlna definovaná uživatelem Smooth Uhladit Click here to smooth waveform. Pro uhlazení vlny klikněte zde. Interpolation Interpolovat Normalize Normalizovat Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Klikněte zde pro trianglovou vlnu. Click here for a saw-wave. Klikněte zde pro pilovitou vlnu. Click here for a square-wave. Klikněte zde pro pravoúhlou vlnu. Click here for white-noise. Click here for a user-defined shape. Klikněte zde pro uživatelem definovaný tvar. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file Nemohu otevřít soubor Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Nemohu uložit soubor %1 pro zápis. Přesvědčte se prosím, že máte právo zápisu do tohoto souboru a příslušného adresáře a zkuste to znovu! Error Chyba Error while determining file-encoder device. Please try to choose a different output format. Chyba při určení souboru zařízení enkodéru. Zkuste prosím vybrat jiný výstupní formát. Rendering: %1% Renderuji: %1% Export project to %1 Exportovat projekt do %1 fader Please enter a new value between %1 and %2: Vložte prosím novou hodnotu mezi %1 a %2: graphModel Graph Graf kickerInstrument Start frequency Počáteční frekvence End frequency Konečná frekvence Gain Zisk Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: Počáteční frekvence: End frequency: Konečná frekvence: Gain: Zisk: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help Nápověd&a Please enter a new value between %1 and %2: Vložte prosím novou hodnotu mezi %1 a %2: Please enter a new value between -96.0 dBV and 6.0 dBV: Vložte prosím novou hodnotu mezi -96.0 dBV a 6.0 dBV: ladspaBrowserView Available Effects Dostupné efekty Unavailable Effects Nedostupné efekty Instruments Nástroje Analysis Tools Analyzační nástroje Don't know Neznámé This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Toto dialogové okno zobrazuje informace o všech LADSPA pluginech, které bylo LMMS schopno nalézt. Zásuvné moduly jsou rozděleny do pěti kategorií podle portů a názvů. (new line) (new line) K dispozici jsou ty efekty, které mohou být použity v LMMS. Aby v LMMS bylo možné užít efektu, musí se o efekt skutečně jednat, to znamená, že musí mít oba vstupní a výstupní kanály. LMMS identifikuje vstupní kanál jako audio podle 'in' v názvu. Výstupní kanály jsou identifikovány pole označení písmeny 'out'. Kromě toho efekt musí mít stejný počet vstupů a výstupů a být real time kompatibilní. Nedostupné efekty jsou ty, které byly identifikovány jako efekty, ale buď nemají stejný počet vstupních a výstupních kanálů nebo nejsou real time kompatibilní. Nástroje jsou pluginy u kterých byly identifikovány pouze výstupní kanály. Analyzační nástroje jsou pluginy u kterých byly identifikovány pouze vstupní kanály. Neznámé jsou pluginy, pro které nebyly identifikovány žádné vstupní nebo výstupní kanály. Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech. Type: Typ: ladspaDescription Plugins Pluginy Description Popis ladspaPortDialog Ports Porty Name Název Rate Rychlost Direction Směr Type Typ Min < Default < Max Min < Výchozí < Max Logarithmic Logaritmický Audio Audio Control Ovládání Input Vstup Output Výstup Toggled Zapnuto Yes Ano SR Dependent Integer Float lb302Synth VCF Cutoff Frequency VCF frekvence vypnutí VCF Resonance VCF rezonance Slide Klouzání Accent Důraz Distortion Zkreslení Waveform Vlna VCF Envelope Mod VCF Envelope Decay Slide Decay Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Frek. vypnutí: Resonance: Rezonance: Env Mod: Decay: Doznívání: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Pilovitá vlna Click here for a saw-wave. Klikněte zde pro pilovitou vlnu. Triangle wave Trianglová vlna Click here for a triangle-wave. Klikněte zde pro trianglovou vlnu. Square wave Pravoúhlá (square) vlna Click here for a square-wave. Klikněte zde pro pravoúhlou vlnu. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Sinusová vlna Click for a sine-wave. White noise wave Bílý šum Click here for an exponential wave. Klikněte zde pro exponenciální vlnu. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF frekvence vypnutí VCF Resonance VCF rezonance Distortion Zkreslení Waveform Vlna Slide Klouzání Accent Důraz VCF Envelope Mod VCF Envelope Decay Slide Decay Dead 24dB/oct Filter lb303SynthView Cutoff Freq: Frek. vypnutí: CUT CUT Resonance: Rezonance: RES Env Mod: ENV MOD Decay: Doznívání: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Tvrdost Position Pozice Vibrato Gain Zisk vibráta Vibrato Freq Frekvence vibráta Modulator Modulátor Crossfade Prolínání (crossfade) LFO Speed LFO Rychlost LFO Depth LFO Hloubka Pressure Tlak Motion Pohyb Speed Rychlost Spread Rozsah Marimba Marimba Vibraphone Vibrafon Missing files Chybějící soubory Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Zda se, že Vaše Stk instalace není kompletní. Přesvědčte se, ze STK balíček je plně nainstalován! Stick Mix ADSR Bowed Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl malletsInstrumentView Instrument Nástroj Spread Rozsah Spread: Rozsah: Hardness Tvrdost Hardness: Tvrdost: Position Pozice Position: Pozice: Vib Gain Vib zisk Vib Gain: Vib zisk: Vib Freq Vib frek Vib Freq: Vib frek: Modulator Modulátor Modulator: Modulátor: Crossfade Prolínání (crossfade) Crossfade: Prolínání (crossfade): LFO Speed LFO Rychlost LFO Speed: LFO Rychlost: LFO Depth LFO Hloubka LFO Depth: LFO Hloubka: Pressure Tlak Pressure: Tlak: Motion Pohyb Motion: Pohyb: Speed Rychlost Speed: Rychlost: Vibrato Vibráto Vibrato: Vibráto: Stick Mix Stick Mix: ADSR ADSR: Bowed manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &Nápověda opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Zkreslení Volume Hlasitost organicInstrumentView Distortion: Zkreslení: Volume: Hlasitost: Randomise Nastavit náhodně Osc %1 waveform: Osc %1 vlna: Osc %1 volume: Osc %1 hlasitost: Osc %1 panning: Osc %1 panorama: cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Shift Register width Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass papuInstrumentView Sweep Time: Sweep Time The amount of increase or decrease in frequency Sweep RtShift amount: Sweep RtShift amount The rate at which increase or decrease in frequency occurs Wave pattern duty: Wave Pattern Duty The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume: Square Channel 1 Volume Length of each step in sweep: Length of each step in sweep The delay between step change Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern Draw the wave here pluginBrowser no description bez popisu Instrument plugins Pluginy nástrojů Filter for importing MIDI-files into LMMS Filtr pro import MIDI souborů do LMMS GUS-compatible patch instrument GUS kompatibilní patch instrument Additive Synthesizer for organ-like sounds Aditivní syntezátor pro zvuky podobné varhanám Plugin for enhancing stereo separation of a stereo input file Plugin pro zvýšení stereo separace vstupních stereo souborů Vibrating string modeler Vibrační modelátor strun List installed LADSPA plugins Seznam instalovaných LADSPA pluginů plugin for using arbitrary LADSPA-effects inside LMMS. plugin pro užití libovolných LADSPA efektů uvnitř LMMS. VST-host for using VST(i)-plugins within LMMS VST host pro užití VST(i) pluginů v LMMS Incomplete monophonic imitation tb303 Nekompletní monofonní imitace tb303 Filter for importing FL Studio projects into LMMS Filtr určený k import projektů z FL Studia do LMMS Tuneful things to bang on Libozvučná klepátka Instrument browser Prohlížeč nástrojů Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Nástroj přetáhněte buď do Editoru skladby, Beat+Bassline Editoru nebo do existující nástrojové stopy. Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Customizable wavetable synthesizer Player for SoundFont files Emulation of GameBoy (TM) APU Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes Poznámky k projektu Put down your project notes here. Do tohoto okna můžete vkládat Vaše poznámky k projektu. Edit Actions Editace &Undo &Zpět Ctrl+Z Ctrl+Z &Redo &Znovu Ctrl+Y Ctrl+Z &Copy &Kopírovat Ctrl+C Ctrl+C Cu&t &Vyjmout Ctrl+X Ctrl+X &Paste V&ložit Ctrl+V Ctrl+V Format Actions Formátování &Bold &Tučné Ctrl+B Ctrl+B &Italic &Kurzíva Ctrl+I Ctrl+I &Underline &Podtržené Ctrl+U Ctrl+U &Left Zarovnat &vlevo Ctrl+L Ctrl+L C&enter Zarovnat &na střed Ctrl+E Ctrl+E &Right Zarovnat v&pravo Ctrl+R Ctrl+R &Justify Zarovnat &do bloku Ctrl+J Ctrl+R &Color... &Barva... renameDialog Rename... Přejmenovat... setupDialog Setup LMMS Nastavit LMMS General settings Hlavní nastavení BUFFER SIZE VELIKOST VYR. PAMĚTI Reset to default-value Nastavit výchozí hodnoty MISC Enable tooltips Aktivovat nástrojové tipy Show restart warning after changing settings Vyzvat k restartu po změně nastavení Display volume as dBV Zobrazovat hlasitost jako dBV Compress project files per default Komprimovat soubory s projekty LMMS working directory Pracovní adresář pro LMMS VST-plugin directory Adresář pro VST pluginy Artwork directory Adresář pro témata FL Studio installation directory Instalační adresář FL Studia STK rawwave directory Adresář pro STK rawwave Performance settings Nastavení výkonu UI effects vs. performance Efekty uživatelského rozhraní vs. výkon Audio settings Audio nastavení AUDIO INTERFACE AUDIO ROZHRANÍ MIDI settings MIDI nastavení MIDI INTERFACE MIDI ROZHRANÍ OK OK Cancel Zrušit Restart LMMS Restartovat LMMS Please note that most changes won't take effect until you restart LMMS! Mnohé změny nastavení se projeví až po restartu LMMS! Frames: %1 Latency: %2 ms Rámce: %1 Zpoždění %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Zde můžete nastavit interní velikost vyrovnávací paměti, která je užívána LMMS. Nízké hodnoty vedou k menšímu zpoždění, ale také způsobují nepoužitelný zvuk nebo špatný výkon, zejména na starých počítačích či systémech s jádrem nepodporujícím real time. Choose LMMS working directory Vyberte pro LMMS pracovní adresář Choose your VST-plugin directory Vyberte adresář pro VST pluginy Choose artwork-theme directory Vyberte adresář s tématy Choose FL Studio installation directory Vyberte instalační adresář FL Studia Choose LADSPA plugin directory Vyberte adresář pro LADSPA pluginy Choose STK rawwave directory Vyberte adresář pro STK rawwave Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Zde vyberte preferované audio rozhraní. V závislosti na konfiguraci Vašeho systému při kompilaci můžete volit mezi ALSA, JACK, OSS a dalšími. Níže vidíte políčko, které nabízí možnost nastavení vybraného audio rozhraní. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Zde vyberte preferované MIDI rozhraní. V závislosti na konfiguraci Vašeho systému při kompilaci můžete volit mezi ALSA OSS a dalšími. Níže vidíte políčko, které nabízí možnost nastavení vybraného MIDI rozhraní. HQ-mode for output audio-device HQ režim pro výstup audio zařízení Paths Cesty Background artwork Obrázek na pozadí LADSPA plugin paths Cesty k LADSPA pluginům Default Soundfont File Výchozí Soundfont soubor Choose default SoundFont Vyberte výchozí SoundFont Choose background artwork Vyberte obrázek na pozadí One instrument track window mode Režim jedné stopy pro nástroje Compact track buttons Malá tlačítka u stop Sync VST plugins to host playback Synchronizace VST pluginů s hostujícím přehráváním Enable note labels in piano roll Povolit názvy tónů v piano rollu Enable waveform display by default Povolit zobrazení waveformu ve výchozím nastavení Smooth scroll in Song Editor Plynulé posouvání v Song Editoru Enable auto save feature Povolit automatické ukládání Show playback cursor in AudioFileProcessor Zobrazit přehrávací kurzor v AudioFileProcessoru sf2Instrument Gain Zisk Bank Patch Reverb Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Gain Zisk Open other SoundFont file Click here to open another SF2 file Choose the patch Apply reverb (if supported) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Filter type Typ filtru Volume Hlasitost Cutoff Resonance Rezonance Voice 3 off Chip model sidInstrumentView Volume: Hlasitost: Resonance: Rezonance: Sustain: Sustain: Sync Synchronizovaný Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Doznívání: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo Tempo Master volume Hlavní hlasitost Master pitch Hlavní ladění (pitch) Project saved Projekt uložen The project %1 is now saved. Projekt %1 je nyní uložen. Project NOT saved. Projekt NENÍ uložen. The project %1 was not saved! Projekt %1 nebyl uložen! Import file Importovat soubor untitled nepojmenovaný Select file for project-export... Zvolte soubor pro export projektu... MIDI sequences MIDI sekvence FL Studio projects FL Studio projekt Empty project Prázdný projekt This project is empty so exporting makes no sense. Please put some items into Song Editor first! Tento projekt je prázdný, jeho exportování nemá smysl. Nejdříve prosím vložte nějaké položky do Editoru skladby! All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog Width: Šířka: WIDE stereoEnhancerControls Width Šířka stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling Povolit/zakázat automatický posun Enable/disable loop-points Povolit/zakázat body pro přehrávání ve smyčce After stopping go back to begin Po skončení jdi zpět na začátek After stopping go back to position at which playing was started Po skončení jdi zpět na pozici ze které přehrávání začalo After stopping keep position Po skončení udržuj pozici Hint Rada Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Ztlumený Solo Sólo trackContentObject Muted Ztlumený trackContentObjectView Current position Aktuální pozice Hint Rada Press <Ctrl> and drag to make a copy. K vytvoření kopie stiskněte <Ctrl> a táhněte myší. Current length Aktuální délka Press <Ctrl> for free resizing. Stiskněte <Ctrl> pro volné měnění velikosti. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 do %5:%6) Delete (middle mousebutton) Smazat (prostřední tlačítko myši) Cut Vyjmout Copy Kopírovat Paste Vložit Mute/unmute (<Ctrl> + middle click) Ztlumit/neztlumit (<Ctrl> + prostřední klik) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Actions for this track Akce pro tuto stopu Mute Ztlumit Clone this track Klonovat tuto stopu Remove this track Odstranit tuto stopu Mute this track Ztlumit tuto stopu Solo Sólo Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Načítám plugin Please wait while loading VST-plugin... Prosím čekejte dokud se nenačte VST plugin... Failed loading VST-plugin Chyba načítání VST pluginu The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! VST plugin %1 nemohl být z určitých důvodů načten. Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte prosím LMMS vývojáře! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: Hlasitost: The 'V' knob sets the volume of the selected string. Ovladač 'V' nastavuje hlasitost vybrané struny. Pick position: Pozice drnknutí: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Ovladač 'P' nastavuje pozici na které bude na vybranou strunu drnknuto. Nižší nastavení znamená úhoz blíže ke kobylce. Pickup position: Pozice snímače: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Ovladač 'PU' nastavuje pozici snímače pro vybranou strunu. Nižší nastavení znamená snímač blíže u kobylky. Pan: Pan: The Pan knob determines the location of the selected string in the stereo field. Pan ovladač určuje pozici vybrané struny ve stereo prostoru. Detune: Rozladit: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Ovladač Rozladění mění ladění vybrané struny. Hodnoty nižší než nula způsobí plochý zvuk, hodnoty vyšší než nula způsobí ostřejší zvuk. Length: Délka: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Ovladač Délka nastavuje délku vybrané struny. Delší struny budou znít déle a jasněji, také však spořádají více CPU cyklů. Octave Oktáva Enable waveform Zapnout vlnu Click here to enable/disable waveform. Pro zapnutí/vypnutí vlny klikněte zde. String Struna The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Volič strun se užívá k výběru struny, které bude upravována. Nástroj Vibed může obsahovat maximálně devět nezávisle vibrujících strun. LED v pravém dolním rohu editoru tvaru vlny indikuje zda je vybraná struna aktivní. Sine wave Sinusová vlna Triangle wave Trianglová vlna Saw wave Pilovitá vlna Square wave Pravoúhlá (square) vlna White noise wave Bílý šum User defined wave Vlna definovaná uživatelem Smooth Uhladit Click here to smooth waveform. Pro uhlazení vlny klikněte zde. Normalize Normalizovat Click here to normalize waveform. Pro normalizaci vlny klikněte zde. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. &Help visualizationWidget click to enable/disable visualization of master-output Kliknutí zapíná/vypíná vizualizaci hlavního výstupu Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/de.qm000066400000000000000000011161441247673406200156060ustar00rootroot00000000000000I[#LؔLmTtVEh# jj8ho?mYC%/P/ݵ6CC9U~E e@Lįv?zyA U@ YU?bdP2jRI i  i!|l|l50|DtD#}1#}3L(Ql(?*$ *y*Pv*0P*0\++7++Q}+Q+į\.Gd=/N2J4ʩȕ5f3r6H6u9gi%9kYg93:dcd)@d@T<E EZ_F|nGGR"G)GVHjHiv"HVTH<HzLAHzSHqI;jImVIm_TJ'J+T=J/$J<@VJsJJ‰g KL]!oL]"p!Lb!|M5=MWM*1MSN$oN$N(W>N5/N5[Nh$dObzwPW/PW=PיS}ALS}CSUFSbSDTbT.TZVTTʴ'TʴvTx5UQ2U`' U`UjoUjMVbVbVb7VhX=Vw=VۦVtVVͺV W -W 6Wi?\WwWKX TXYEZ/AZ/PZkYZkd;ZZ>ZoZo[u[jU\;]6 ]^Gdn^eq]^er]7`~y`~kc^cNFh _@ihių9iųiųrr!r|rszy~tUtbt i v=wwD|}}U~#;;c_O|ϙwz$G %GGG _^\FD>6E}#vw Chu1e vj( T9_PDN iieiuV7)E7!i%nи@}yLyFק1ק3@Q\lOn\LW3e){G|Gu}GDDW^4tJ! bN bU- 'd$ `  C>.V/N+w]+unit" r"Rh/V/V 2ڈ7"q37o9}9;n$; =8@1x@۴kC_FzDDFzHqJWJ`MUT[OX8OXMP0TdVY1,Z;WZ;at`1x`[aUFaiNGmq >w80yuNz;={)~ n*80~0Go>Auψje =MEtɄypʭi7(ՙծhHT[*z8*݊sR<Ql-ߺx$oo8; je CB^A |ڎD5٨/hTA`+ 8Ja3 'V= q9Ձ!-~$#a$#b$#qy$#r(^(^p)u3,´U,´u,.o4N9q: ;f;sGBItP Rol_/b#VlYn Rr%txż~z:9%qjYqlvjvmN܎8n4\΋A~CvL$&*JGG]G7Gh<Dž..u7ŗ?B?Q)Y))*)+.@Kyif3QrZU)"ky9>96>>Hh,ѻ;GkGҩBpҩB,һBpmһB|_t>v  `g H~nl!t]s sOfsQB-YQwDTUP%CuIݷ"ݎ"ݎ% :F01002Q-3N48J_:)$;<<%?}"@1@@?BWhBaNnCByPHH>I[YOXFO۹p P~ P~ SSkWa7sWqZ.]G]Y] i'@ klOl;lhnlhloko4uS(x(xxSxI|Z|Zy:}"o>}}n~~)ŐmyX?ĩR$tW#S#C8y0s.h>BNx?|Z#OA~Ϗp~US)! )"U)1)2WTĽexFP:^PxyϯKc2ѫ6Mj6GקAקC*ؖ]]K{@N9ք oܗjR3왞-7g\BYj =YչsqYLTH.U'E 0ks'E(,(h)eT10r19:q:^t;:<<C<<R/A U>FA>JbK.M$fMt?)MкfO۹sPJA*PJ lPJFaQq.R.ۜWuWRW]_XYZ+`J``%`%`%c=d Z,g5;hui{jztb3kJbl rJ mw~e<ww7wwNEw$xYZ[yT@yTP{ ѣ|9D xK N^=GDfx!*v`u 2u*u*u+u+Guxuy u(R{I\ IßIIhzhzhUi'ZE evPqa,:m9l  LsSBqrBBqBzjwh0gkh0kfB[axz~ej[ˤ<9(.žZ[Ք)Eͥ6e2@S2%ϟ(l51n)2npDKT݄o݄sߗT`[-A'hnhvG@nfn DK#PC_dCzVK2u̔ t1Y u~ u @zlTvΎ(>!EE$0%#(c΁)G)|,N&-U3.Y0K153:3 7eW7e7U8??~EzF^YF^bH8mJiJ\PeTQ#Q5QDRNV *iZoZ"\C.\\D%'aE+a*Taqa!a"3bQtbQf'ggaggahh93Uh;UhIhIY iVjTv}jTwGll/l?#p7Xs JvA lvXvXDxS}o.cALAT9kK]pK]*XŷFw'KMcQREO [jaNfsff$TzdtZ;tdG$?tgtvvn1Þl%% o^?mN!Zů ֮;;EUuZuN/69<5 <5<5-<50<5vK<5xG<5s 3ߺD6}]nljnFFWLZC;X9NQe^- cErEzEs|bjix̡#ECX'vK'v(*#A+#1U1^65 6{P:gN:RFrR] R]LSYlWjWd*<Z+3[d[u_Hy.aaaaaabb]b]>hUlQ mBdrgs5zz)rߪ'r ɥP $P,P/P6%"qa-?#fFirh>S%.YJ.c9  i9U5V5_  >Dd2V }797FtTtO(2h-K7xR[2o;  ޔrp2Tti><tQ{o0 F/]7qjr=gƺ Ů&  zy2)A)P Y(B2!E8!E!E&rz~' )B_' )Qo($z)*G*m8+,,D.d5nL7y8})n;h;<Zb? AAB^!B^"BC'IJ5MNj*NjVPQQR^!R^"FUINUIQZD[tm)\X.caMaab^! b^"JcsczihFhJViANfizslFDm.dwy %=y %(jA QF#?j>5j/>2[2 ]hd+?E&Uxx_TA잂ru잂E )2a]v#"g-w$% A% {% nS c!  [ ߅ ߕrR: $8Uۙٚ$w$ϞM-I-;\*$[>NbS#HCWqHC`$0dsOn/C%UeU[UNU#>V>!wcdegLuf``J+8`ls /yy%$ytL^=\Pe Wq¸¸)ʩYʩcEc8]Cc]Rsn`e࣓SXOEmcn#aYYt  w  j R $ ,D )8 * .5n%G 3': 6E 8e 8e 8e" 9JQ 9 ?w @UnY G ItY$ IZ MgH bL)~ c cU hI. hI.A kA l8 p,Q pz tETB w%, w%cy x[ x |b= >] >EK 9k0 -e .8 MW ~ B>M Ķ C B1k p L ^d s v # EI ` `Ek 9 ]9 2 nA 2 FF w KnX ڢd ڢ c] _ |?   UUz u R iN N Uܕ 1Q  N k T]  O ! h i ~C  U 7 ·~r Ɓ(wo *= ʧ ʵ ˔  J\0 Dc N Ԍ ؋N ڮiy ڮm ہ9 z f-  ׾u i  ɺ#  *: B ]ʥ _     I9iX ".`$ $ r\ +] - 3' 7% 9yl :G Fp N@ Om S'J± STn [% \o \ ]@ _`^ cth8 ctl: eE m AW m Pg m x m: s T u: m  $n > ,   -Y B ?` Nc Nu  C J V !& " 1 2^ hZ [f@ Rl 2X 2b)  8As Hx ƟGL Ƶ8s K~ ^ 4 ӗ`l' Ӱ 2Y < <B e S9 Y:? Y:F) Y:& ~ + iP K #   9 ." .B . .G} ʓ\g  " "Х $&y] % (c )& *X_ + 2 + '# +  -#k -# -dd - -bn 0 0^} 1e 5ݙ 7Òه t t c |`nU )X   U@ UO  t t { { c ,M  d so h l ^f  ED    Ɉ |Q S # Yu SI ޖ( 9K 9R E # 鼣 ]t f 6 Os /c /״ l f 9 `etA gp s +B Z K 5: r Uu (:@ (d. .˙ 0  0  0  0  8+ @uS @u @u W`0 W" Zކ \ a' aoS bS#̅ cÓv c c0 c9D co c! cQ c) et e~+ fbXz fN l8^ p0 p0 p0 |H5QN |.1 :3 ; : }N U S" lh  E pV ;q 4 , 1 3- . .D~ fr Nw Z6 nG D E= ɶ. QO sO Չ9P Չ9V 3 )>3  r* u  /^ /^C Zi ~jz rPԀsI ^-    :L~ERWxCfnn~xi+B ]Grcu>!N0%!З$<2g&ʮ264,em::Gq:Gub;}z<)Bp>%>2D,emG4PN6Q>8Rx Ux :WxtY[ yf]~ad^cg-ne}Iody~Op: A:H*)%KK]?<))ӵS'Rع`9B `9QȘFO^-FS|Wz" n7y%P^%CN%F v sVvars›[nZ X |[ g55L"$eRN'L(7()3T7W?I?AAABXqBXrCgD>fcDeE'<I+JiJivM|QEQRXqRXrU&ͭXҾ<head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html>

http://lmms.io

 AboutDialogberAbout AboutDialogber LMMS About LMMS AboutDialogAutorenAuthors AboutDialoglMitwirkende sortiert nach der Anzahl an Einreichungen:*Contributors ordered by number of commits: AboutDialogPCopyright (c) 2004-2014, LMMS-Entwickler(Copyright (c) 2004-2014, LMMS developers AboutDialogDeutsche bersetzung von Tobias Doerffel und Daniel Winzen. Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu bersetzen oder eine bereits existierende bersetzung verbessern mchten, knnen Sie uns gerne helfen! Kontaktieren Sie einfach den Betreiber!Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialogBeteiligtInvolved AboutDialogLMMSLMMS AboutDialogHLMMS - Musikproduktion fr jedermann)LMMS - easy music production for everyone AboutDialog LizenzLicense AboutDialogbersetzung Translation AboutDialog:Version %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialog LINKSLEFTAmplifierControlDialog$Linke Verstrkung: Left gain:AmplifierControlDialogPANPANAmplifierControlDialogBalance:Panning:AmplifierControlDialog RECHTSRIGHTAmplifierControlDialog&Rechte Verstrkung: Right gain:AmplifierControlDialogVOLVOLAmplifierControlDialogLautstrke:Volume:AmplifierControlDialog"Linke Verstrkung Left gainAmplifierControlsBalancePanningAmplifierControls$Rechte Verstrkung Right gainAmplifierControlsLautstrkeVolumeAmplifierControls KANLECHANNELSAudioAlsa::setupWidget GERTDEVICEAudioAlsa::setupWidgetVerstrkung:Amplify:AudioFileProcessorView<Klicken Sie hier, um eine andere Audio-Datei zu ffnen. Danach erscheint ein Dialog, in dem Sie Ihre Datei whlen knnen. Einstellungen wie Wiederhol-Modus, Start- und Endpunkt sowie Verstrkung werden nicht zurckgesetzt, weshalb die Datei mglicherweise nicht wie das Original klingt.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorViewLSamplewiedergabe ber Noten fortsetzen%Continue sample playback across notesAudioFileProcessorView2Wiederholung deaktivieren Disable loopAudioFileProcessorView.Wiederholung aktivieren Enable loopAudioFileProcessorViewWenn Sie diese Option aktivieren, wird das Sample ber verschiedene Noten weitergespielt. Wenn Sie die Tonhhe ndern oder die Note endet, bevor das Ende des Samples erreicht ist, dann fngt die nchste Note da an, wo aufgehrt wurde. Um die Wiedergabe an den Anfang des Samples zurckzusetzen, fgen Sie eine Note am unteren Ende des Keyboards ein (< 20Hz)>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)AudioFileProcessorViewEndpunkt: Endpoint:AudioFileProcessorViewWenn Sie diesen Knopf aktivieren, wird das gesamte Sample umgekehrt. Das kann ntzlich fr coole Effekte sein, wie z.B. eine umgekehrte Crash.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView&Wiederholungspunkt:Loopback point:AudioFileProcessorView*Anderes Sample ffnenOpen other sampleAudioFileProcessorViewSample umkehrenReverse sampleAudioFileProcessorViewStartpunkt: Startpoint:AudioFileProcessorViewDieser Regler deaktiviert Wiederholung. Das Sample wird nur einmal vom Anfang bis zum Ende wiedergegeben .LThis button disables looping. The sample plays only once from start to end. AudioFileProcessorViewDieser Knopf aktiviert Vorwrts-Wiederholung. Das Sample wird zwischen dem Endpunkt und dem Loop-Punkt wiederholt.`This button enables forwards-looping. The sample loops between the end point and the loop point.AudioFileProcessorViewDieser Knopf aktiviert Ping-Pong-Wiederholung. Das Sample wird zwischen dem Endpunkt und dem Loop-Punkt rckwrts und vorwrts wiederholt.xThis button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.AudioFileProcessorViewMit diesem Regler knnen Sie die Verstrkungsrate festlegen. Wenn Sie einen Wert von 100% setzen, wird das Sample nicht gendert. Ansonsten wird es hoch oder runter verstrkt (Ihre Audio-Datei wird dabei nicht verndert!)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorViewMit diesem Regler knnen Sie festlegen, wo AudioFileProcessor anfangen soll, Ihr Sample zu spielen. `With this knob you can set the point where AudioFileProcessor should begin playing your sample. AudioFileProcessorViewMit diesem Regler knnen Sie festlegen, wo AudioFileProcessor aufhren soll, Ihr Sample zu spielen. _With this knob you can set the point where AudioFileProcessor should stop playing your sample. AudioFileProcessorViewMit diesem Regler knnen Sie festlegen, wo die Wiederholung beginnt.Click here if you want to stop playing of the current pattern.AutomationEditorKlicken Sie hier, um kubisches, hermetisches Fortschreiten als Automationsmuster auszuwhlen. Der Wert des verbundenen Objekts wird in einer nahtlosen Kurve gendert und in Spitzen und Tler bergehen.Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.AutomationEditorKlicken Sie hier, um diskretes Fortschreiten als Automationsmuster auszuwhlen. Der Wert des verbundenen Objekts bleibt konstant zwischen den Kontrollpunkten und wird sofort auf den neuen Wert gesetzt, wenn ein Kontrollpunkt erreicht wird.Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.AutomationEditorKlicken Sie hier, um lineares Fortschreiten als Automationsmuster auszuwhlen. Der Wert des verbundenen Objekts wird ber die Zeit kontinuierlich zwischen Kontrollpunkten auf den korrekten Wert am jeweiligen Kontrollpunkt gendert, ohne pltzliche nderungen.Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.AutomationEditorFAusgewhlte Werte kopieren (Strg+C)Copy selected values (Ctrl+C)AutomationEditorLKubisches, hermetisches Fortschrieten Cubic Hermite progressionAutomationEditorNAusgewhlte Werte ausschneiden (Strg+X)Cut selected values (Ctrl+X)AutomationEditor.Diskretes FortschreitenDiscrete progressionAutomationEditor4Zeichnenmodus (Umschalt+D)Draw mode (Shift+D)AutomationEditor0Radiermodus (Umschalt+E)Erase mode (Shift+E)AutomationEditor,Lineares FortschreitenLinear progressionAutomationEditorTWerte aus Zwischenablage einfgen (Strg+V)$Paste values from clipboard (Ctrl+V)AutomationEditorbAktuellen Pattern abspielen/pausieren (Leertaste)"Play/pause current pattern (Space)AutomationEditorBitte ffnen Sie einen Automation-Pattern mit Hilfe des Kontextmens eines Steuerelements!EPlease open an automation pattern with the context menu of a control!AutomationEditorhAbspielen des aktuellen Patterns stoppen (Leertaste)'Stop playing of current pattern (Space)AutomationEditor0Spannungswert fr SplineTension value for splineAutomationEditorSpannung:  Tension: AutomationEditorWerte kopiert Values copiedAutomationEditorXEin Steuerelement mit <Strg> hier her ziehen$Drag a control while pressing AutomationPattern`Modell ist bereits mit diesem Pattern verbunden.+Model is already connected to this pattern.AutomationPattern%1 Verbindungen%1 ConnectionsAutomationPatternViewName ndern Change nameAutomationPatternViewZurcksetzenClearAutomationPatternView%1 trennenDisconnect "%1"AutomationPatternView6Im Automation-Editor ffnenOpen in Automation editorAutomationPatternView"Name zurcksetzen Reset nameAutomationPatternView.Aufnahme setzen/lschenSet/clear recordAutomationPatternViewzDoppelklick, um diesen Pattern im Automation-Editor zu ffnen6double-click to open this pattern in automation editorAutomationPatternViewAutomation-SpurAutomation trackAutomationTrackFREQFREQBassBoosterControlDialogFrequenz: Frequency:BassBoosterControlDialogGAINGAINBassBoosterControlDialogVerstrkung:Gain:BassBoosterControlDialog RATIORATIOBassBoosterControlDialogVerhltnis:Ratio:BassBoosterControlDialogFrequenz FrequencyBassBoosterControlsVerstrkungGainBassBoosterControlsVerhltnisRatioBassBoosterControlsKlicken Sie hier, um die grafische Oberflche von Carla anzuzeigen bzw. auszublenden.GClick here to show or hide the graphical user interface (GUI) of Carla.CarlaInstrumentViewGUI anzeigenShow GUICarlaInstrumentViewController %1 Controller %1 Controller,Automatische Erkennung Auto DetectControllerConnectionDialog KANALCHANNELControllerConnectionDialogCONTROLLER CONTROLLERControllerConnectionDialogAbbrechenCancelControllerConnectionDialog0VerbindungseinstellungenConnection SettingsControllerConnectionDialog"Schleife erkannt.Cycle Detected.ControllerConnectionDialogEingangskanal Input channelControllerConnectionDialog$EingangscontrollerInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialog&ABBILDUNGS-FUNKTIONMAPPING FUNCTIONControllerConnectionDialogMIDI CONTROLLERMIDI CONTROLLERControllerConnectionDialogtMIDI-Gerte, von denen MIDI-Events empfangen werden sollen(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog:BENUTZERDEFINIETER CONTROLLERUSER CONTROLLERControllerConnectionDialogHinzufgenAddControllerRackView$Lschen besttigenConfirm DeleteControllerRackViewLschen besttigen? Es bestehen Verbindungen, die an diesen Controller angeschlossen sind. Es gibt keine Mglichkeit dies rckgngig zu machen.iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackView$Controller-EinheitController RackControllerRackView"Plugin entfe&rnen&Remove this pluginControllerViewMit Controller knnen Sie den Wert eines Reglers, Schiebereglers und anderer Steuerelemente automatisieren.QControllers are able to automate the value of a knob, slider, and other controls.ControllerView ReglerControlsControllerViewjGeben Sie einen neuen Namen fr diesen Controller ein&Enter the new name for this controllerControllerView*Controller umbenennenRename controllerControllerView"Samples verzgern Delay Samples DelayControlsRckkopplungFeedback DelayControlsLFO-Strke Lfo Amount DelayControlsLFO-Frequenz Lfo Frequency DelayControlsVerzgerungDelayDelayControlsDialog Verzgerungszeit Delay TimeDelayControlsDialog&RckkopplungsstrkeFeedback AmountDelayControlsDialogLFOLfoDelayControlsDialogLFO-StrkeLfo AmtDelayControlsDialogRateRateDelayControlsDialog"Noten-Verstimmung Note detuningDetuningHelperfKlicken Sie, um Filter 1 zu aktivieren/deaktivieren Click to enable/disable Filter 1DualFilterControlDialogfKlicken Sie, um Filter 2 zu aktivieren/deaktivieren Click to enable/disable Filter 2DualFilterControlDialog$Filter 1 aktiviertFilter 1 enabledDualFilterControlDialog$Filter 2 aktiviertFilter 2 enabledDualFilterControlDialog2x Tiefpass 2x LowPassDualFilterControlsAllpassAllpassDualFilterControlsBandpass csg BandPass csgDualFilterControlsBandpass czpg BandPass czpgDualFilterControlsKennfrequenz 1Cutoff 1 frequencyDualFilterControlsKennfrequenz 2Cutoff 2 frequencyDualFilterControls$Filter 1 aktiviertFilter 1 enabledDualFilterControlsFiltertyp 1 Filter 1 typeDualFilterControls$Filter 2 aktiviertFilter 2 enabledDualFilterControlsFiltertyp 2 Filter 2 typeDualFilterControlsVerstrkung 1Gain 1DualFilterControlsVerstrkung 2Gain 2DualFilterControlsHochpassHiPassDualFilterControlsTiefpassLowPassDualFilterControlsMischungMixDualFilterControlsMoogMoogDualFilterControls NotchNotchDualFilterControlsQ/Resonanz 1 Q/Resonance 1DualFilterControlsQ/Resonanz 2 Q/Resonance 2DualFilterControls RC-Bandpass 12dBRC BandPass 12dBDualFilterControls RC-Bandpass 24dBRC BandPass 24dBDualFilterControls RC-Hochpass 12dBRC HighPass 12dBDualFilterControls RC-Hochpass 24dBRC HighPass 24dBDualFilterControls RC-Tiefpass 12dBRC LowPass 12dBDualFilterControls RC-Tiefpass 24dBRC LowPass 24dBDualFilterControls&Vokalformant-FilterVocal Formant FilterDualFilterControlsNICHT GEFUNDEN NOT FOUND DummyEffectAbfallzeitDecayEffect(Effekt eingeschaltetEffect enabledEffectGateGateEffectWet/Dry-Mix Wet/Dry mixEffect"Effekte aktiviertEffects enabled EffectChain"Effekt hinzufgen Add effectEffectRackViewEFFEKT-KETTE EFFECTS CHAINEffectRackView"Effekt hinzufgen Add effectEffectSelectDialog$PluginbeschreibungPlugin descriptionEffectSelectDialog"Plugin entfe&rnen&Remove this plugin EffectView ReglerControls EffectView DECAYDECAY EffectView fEffektplugins funktionieren als eine Aneinanderreihung von Effekten, wo das Signal von oben nach unter verarbeitet wird. Der Ein-/Ausschalter ermglicht es Ihnen ein Plugin jeder Zeit zu umgehen. Der Wet/Dry-Regler legt das Verhltnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest. Der Eingag dieses Effekts ist der Ausgang des vorherigen Effekts. Somit enthlt das dry-Signal, fr Effekte weiter unten in der Kette, alle vorherigen Effekte. Der Abfallzeit-Regler legt fest, wie lange das Signal weiterverarbeitet werden soll, nachdem die Noten losgelassen wurde. Der Effekt hrt auf Signale zu verarbeiten, wenn die Lautstrke eines Signals fr eine festgelegte Zeit unter einen festgelegten Schwellwert gefallen ist. Dieser Regler legt die festgelegte Zeit fest. Lngere Zeiten brauchen mehr Rechenleistung, deshalb sollte diese Zahl fr die meisten Effekte niedrig sein. Es muss fr Effekte, die ber lngere Zeit Stille erzeugen, z.B. Verzgerungen, erhht werden. Der Gate-Regler kontrolliert den festgelegten Schwellwert fr das automatische Ausschalten des Effekts. Die Uhr fr die festgelegte Zeit beginnt sobald der Pegel des verarbeiteten Signals unter den mit diesem Knopf festgelegten Pegel fllt. Der Regler-Knopf ffnet einen Dialog zum Bearbeiten der Parameter des Effekts. Ein Recktsklick ffnet ein Kontextmen, in dem Sie die Reihenfolge der Effekte ndern oder einen Effekt entfernen knnen.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectViewGATEGATE EffectView Gate:Gate: EffectView.Nach &unten verschieben Move &down EffectView,Nach &oben verschiebenMove &up EffectView An/ausOn/Off EffectViewDer Abfallzeit-Regler legt fest, wie viele Puffer mit Stille durchgelaufen sein mssen, bis der Effekt mit der Verarbeitung stoppt. Kleinere Werte reduzieren die CPU-Last, knnen jedoch unter Umstnden das Ende von Delay-Effekten o.. abschneiden.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectView:Der Gate-Regler legt die Strke des Signals fest, welches als Stille angesehen wird, um zu entscheiden, wann das Plugin mit der Verarbeitung aufhren soll.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewDer Wet/Dry-Regler legt das Verhltnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView Zeit:Time: EffectView@Schaltet den Effekt an oder aus.Toggles the effect on or off. EffectViewW/DW/D EffectViewWet-Level: Wet Level: EffectView,Anschwellzeit (attack)AttackEnvelopeAndLfoParametersAbfallzeitDecayEnvelopeAndLfoParametersFreq x 100 Freq x 100EnvelopeAndLfoParameters Haltezeit (hold)HoldEnvelopeAndLfoParameters<LFO-Anschwellzeit (LFO-attack) LFO AttackEnvelopeAndLfoParametersLFO ModulationLFO ModulationEnvelopeAndLfoParametersLFO-Verzgerung LFO PredelayEnvelopeAndLfoParametersLFO-WellenformLFO Wave ShapeEnvelopeAndLfoParameters&LFO-Geschwindigkeit LFO speedEnvelopeAndLfoParameters(Hllkurve modulierenModulate Env-AmountEnvelopeAndLfoParametersModulation ModulationEnvelopeAndLfoParameters,Verzgerung (predelay)PredelayEnvelopeAndLfoParameters,Ausklingzeit (release)ReleaseEnvelopeAndLfoParameters(Haltepegel (sustain)SustainEnvelopeAndLfoParametersAMTAMTEnvelopeAndLfoViewATTATTEnvelopeAndLfoView.Anschwellzeit (attack):Attack:EnvelopeAndLfoView:Klick fr eine Sgezahnwelle.&Click here for a saw-wave for current.EnvelopeAndLfoView4Klick fr eine Sinuswelle.Click here for a sine-wave.EnvelopeAndLfoView:Klick fr eine Rechteckwelle.Click here for a square-wave.EnvelopeAndLfoView8Klick fr eine Dreieckwelle.Click here for a triangle-wave.EnvelopeAndLfoViewHier klicken fr eine benutzerdefinierte Wellenform. Danach eine entsprechende Sampledatei auf den LFO-Graphen ziehen.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoView>Klick fr eine zufllige Welle.Click here for random wave.EnvelopeAndLfoViewHier klicken, wenn die Frequenz des LFOs mit 100 multipliziert werden soll.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewKlicken Sie hier, um die Hllkurvenintensitt durch diesen LFO kontrollieren zu lassen.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewDELDELEnvelopeAndLfoView&Abfallzeit (decay):Decay:EnvelopeAndLfoViewZiehen Sie ein Sample von irgendwo und lassen es in diesem Fenster fallen.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoViewHOLDHOLDEnvelopeAndLfoViewTippHintEnvelopeAndLfoView"Haltezeit (hold):Hold:EnvelopeAndLfoView LFO-Verzgerung: LFO predelay:EnvelopeAndLfoView(LFO-Geschwindigkeit: LFO speed:EnvelopeAndLfoView>LFO-Anschwellzeit (LFO-attack): LFO- attack:EnvelopeAndLfoView"HLLK. MODULIERENMODULATE ENV-AMOUNTEnvelopeAndLfoView,Modulationsintensitt:Modulation amount:EnvelopeAndLfoView.Verzgerung (predelay): Predelay:EnvelopeAndLfoViewRELRELEnvelopeAndLfoView.Ausklingzeit (release):Release:EnvelopeAndLfoViewSPDSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoView*Dauerpegel (sustain):Sustain:EnvelopeAndLfoView~Benutzen Sie diesen Regler, um die Anschwellzeit fr den aktuellen LFO einzustellen. Je grer dieser Wert, desto lnger dauert es, bis die Amplitude des LFOs bis zum Maximum angestiegen ist.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewtBenutzen Sie diesen Regler, um die Anschwellzeit (attack) fr die aktuelle Hllkurve einzustellen. Je grer dieser Wert, desto lnger braucht die Hllkurve, um bis zum Anschwellpegel (attack-level) zu steigen. Whlen Sie einen kleinen Wert fr Instrumente wie Klavier und einen groen Wert fr Streichinstrumente.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewHBenutzen Sie diesen Regler, um die Abfallzeit (decay) fr die aktuelle Hllkurve einzustellen. Je grer dieser Wert, desto lnger braucht die Hllkurve, um vom Anschwellpegel (attack-level) zum Dauerpegel (sustain-level) abzufallen. Whlen Sie einen kleinen Wert fr Instrumente wie Klavier.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewBenutzen Sie diesen Regler, um die Haltezeit (hold) der aktuellen Hllkurve zu setzen. Je grer der Wert, desto lnger hlt die Hllkurve den Anschwellpegel, bevor sie zum Haltepegel (sustain-level) abfllt.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewBenutzen Sie diesen Regler, um die Modulationsintensitt des aktuellen LFOs einzustellen. Je grer der Wert, desto mehr wird die gewhlte Gre (z.B. Lautstrke oder Cuttoff-Frequenz) von diesem LFO beeinflusst.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewBenutzen Sie diesen Regler, um die Modulationsintensitt fr die aktuelle Hllkurve einzustellen. Je grer dieser Wert, desto mehr wird die gewhlte Gre (z.B. Lautstrke oder Cutoff-Frequenz) von der Hllkurve beeinflusst.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoViewrBenutzen Sie diesen Regler, um die Verzgerung (predelay) fr die aktuelle Hllkurven einzustellen. Je grer dieser Wert, desto lnger dauert es, bis die eigentliche Hllkurve beginnt.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoViewNBenutzen Sie diesen Regler, um die Verzgerungszeit fr den aktuellen LFO einzustellen. Je grer dieser Wert, desto lnger die Zeit, bis der LFO anfngt zu schwingen.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewBenutzen Sie diesen Regler, um die Ausklingzeit der aktuellen Hllkurve einzustellen. Je grer der Wert, desto lnger braucht die Hllkurve um vom Dauerpegel (sustain-level) auf Null abzufallen. Whlen Sie einen groen Wert fr weiche Instrumente, wie z.B. Streicher.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewzBenutzen Sie diesen Regler, um die Geschwindigkeit fr den aktuellen LFO einzustellen. Je grer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoViewBenutzen Sie diesen Regler, um den Dauerpegel (sustain-level) fr die aktuelle Hllkurve einzustellen. Je grer dieser Wert, desto hher der Pegel, den die Hllkurve hlt, bevor sie auf Null abfllt.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoViewfHllkurvenintensitt durch diesen LFO kontrollieren#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoViewFLFO-Frequenz mit 100 multiplizierenmultiply LFO-frequency by 100EnvelopeAndLfoView128 KBit/s 128 KBit/sExportProjectDialog"16 Bit Ganzzahlen16 Bit IntegerExportProjectDialog160 KBit/s 160 KBit/sExportProjectDialog192 KBit/s 192 KBit/sExportProjectDialog192000 Hz 192000 HzExportProjectDialog1x (keine) 1x (None)ExportProjectDialog256 KBit/s 256 KBit/sExportProjectDialog2x2xExportProjectDialog.32-Bit-Gleitkommazahlen 32 Bit FloatExportProjectDialog320 KBit/s 320 KBit/sExportProjectDialog44100 Hz44100 HzExportProjectDialog48000 Hz48000 HzExportProjectDialog4x4xExportProjectDialog64 KBit/s 64 KBit/sExportProjectDialog88200 Hz88200 HzExportProjectDialog8x8xExportProjectDialog96000 Hz96000 HzExportProjectDialogBitrate:Bitrate:ExportProjectDialogAbbrechenCancelExportProjectDialogGenauigkeit:Depth:ExportProjectDialogfAls Schleife exportieren (Stille am Ende entfernen)#Export as loop (remove end silence)ExportProjectDialog&Projekt exportierenExport projectExportProjectDialogDateiformat: File format:ExportProjectDialogInterpolation:Interpolation:ExportProjectDialogAusgabeOutputExportProjectDialoghberabtastung (oversampling) (mit Vorsicht nutzen!):Oversampling (use with care!):ExportProjectDialogBitte beachten Sie, dass nicht alle der obigen Parameter fr alle Dateiformate relevant sind.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog,QualittseinstellungenQuality settingsExportProjectDialogAbtastrate: Samplerate:ExportProjectDialog@Sinc - am besten (sehr langsam!)Sinc Best (very slow!)ExportProjectDialog*Sinc - am schnellsten Sinc FastestExportProjectDialog2Sinc - Normal (empfohlen)Sinc Medium (recommended)ExportProjectDialog StartStartExportProjectDialogZero Order HoldZero Order HoldExportProjectDialogBrowserBrowser FileBrowser:--- Mitgelieferte Dateien ------ Factory files ---FileBrowserTreeWidgetLade SampleLoading sampleFileBrowserTreeWidgetXIn neuer Instrumentspur im B+B-Editor ffnen'Open in new instrument-track/B+B EditorFileBrowserTreeWidgetZIn neuer Instrumentspur im Song-Editor ffnen(Open in new instrument-track/Song-EditorFileBrowserTreeWidgetNBitte warten, lade Sample fr Vorschau &*Please wait, loading sample for preview...FileBrowserTreeWidget>An aktive Instrumentspur sendenSend to active instrument-trackFileBrowserTreeWidget Kanal SendemengeChannel send amountFxLine.Nach &links verschieben Move &leftFxLine0Nach &rechts verschieben Move &rightFxLine Kanal &EntfernenR&emove channelFxLine"&Kanal umbenennenRename &channelFxLine$Der FX Kanal erhlt von ein oder mehr Instrumentenspuren Eingabesignale. Er kann wiederum durch mehrere andere FX Kanle gesendet werden. LMMS verhindert Endlosschleifen automatisch fr Sie und erlaubt es nicht eine Verbindung zu erstellen, die in einer Endlosschleife resultiert. Um den Kanal an einen anderen Kanal zu senden, whlen Sie den FX Kanal aus und klicken Sie auf den Senden Knopf in dem Kananl, an den Sie den Kanal senden mchten. Der Knopf unter dem Sendeknopf kontrolliert die Strke des gesendeten Signals. Sie knnen FX Kanle im Kontextmen entfernen und verschieben, welches durch einen Rechtsklick auf dem FX Kanal aufgerufen wird. ^The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. FxLine FX %1FX %1FxMixer MasterMasterFxMixerbBitte einen neuen Namen fr den FX-Kanal eingeben&Enter the new name for this FX channel FxMixerViewFX Schieber %1 FX Fader %1 FxMixerViewFX-MixerFX-Mixer FxMixerView StummMute FxMixerView:Diesen FX-Kanal stummschaltenMute this FX channel FxMixerView&FX-Kanal umbenennenRename FX channel FxMixerViewrAnteil, der von Kanal %1 zu Kanal %2 gesendet werden soll,Amount to send from channel %1 to channel %2FxRouteArpeggioArpeggioInstrumentFunctionArpeggio"Arpeggio-RichtungArpeggio directionInstrumentFunctionArpeggioArpeggio-Gate Arpeggio gateInstrumentFunctionArpeggioArpeggio-Modus Arpeggio modeInstrumentFunctionArpeggio Arpeggio-BereichArpeggio rangeInstrumentFunctionArpeggioArpeggio-Zeit Arpeggio timeInstrumentFunctionArpeggioArpeggiotyp Arpeggio typeInstrumentFunctionArpeggio RunterDownInstrumentFunctionArpeggioHoch und runter Down and upInstrumentFunctionArpeggioFreiFreeInstrumentFunctionArpeggioZuflligRandomInstrumentFunctionArpeggioSortiertSortInstrumentFunctionArpeggioSynchronSyncInstrumentFunctionArpeggioHochUpInstrumentFunctionArpeggioHoch und runter Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGGIOARPEGGIOInstrumentFunctionArpeggioView^Ein Arpeggio ist eine Art, (vorallem gezupfte) Instrumente zu spielen, die die Musik viel lebendiger macht. Die Seiten von solchen Instrumenten (z.B. Harfen) werden wie Akkorde gezupft, der einzige Unterschied besteht darin, dass dies nacheinander geschieht. Die Noten werden also nicht zur gleichen Zeit gespielt. Typische Arpeggios sind Dur- oder Moll-Dreiklnge, aber es gibt noch viele andere Akkorde, die Sie auswhlen knnen.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioViewArpeggio-Gate:Arpeggio gate:InstrumentFunctionArpeggioView"Arpeggio-Bereich:Arpeggio range:InstrumentFunctionArpeggioViewArpeggio-Zeit:Arpeggio time:InstrumentFunctionArpeggioViewAkkord:Chord:InstrumentFunctionArpeggioViewRichtung: Direction:InstrumentFunctionArpeggioViewGATEGATEInstrumentFunctionArpeggioView Modus:Mode:InstrumentFunctionArpeggioView RANGERANGEInstrumentFunctionArpeggioViewZEITTIMEInstrumentFunctionArpeggioViewBenutzen Sie diesen Regler, um das Arpeggio-Gate zu setzen. Das Arpeggio-Gate gibt an, wie viel Prozent eines ganzen Arpeggio-Tons gespielt werden sollen. Damit knnen Sie coole Staccato-Arpeggios erzeugen.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioView8Benutzen Sie diesen Regler, um den Arpeggio-Bereich in Oktaven zu setzen. Das gewhle Arpeggio wird innerhalb der angegebenen Anzahl von Oktaven abgespielt.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewFBenutzen Sie diesen Regler, um die Arpeggio-Zeit in Millisekunden zu setzen. Die Arpeggio-Zeit gibt an, wie lange jeder einzelne Arpeggio-Ton gespielt werden soll.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewOktave(n) octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13#913#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking55InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking 6add96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#119#11InstrumentFunctionNoteStacking9#59#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStackingolischAeolianInstrumentFunctionNoteStackingArabischArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingAkkord-Bereich Chord rangeInstrumentFunctionNoteStackingAkkordtyp Chord typeInstrumentFunctionNoteStackingAkkordeChordsInstrumentFunctionNoteStackingChromatisch ChromaticInstrumentFunctionNoteStackingVermindert DiminishedInstrumentFunctionNoteStacking Dominanter BebopDominant bebopInstrumentFunctionNoteStackingDorischDorianInstrumentFunctionNoteStackingEnigmatisch EnigmaticInstrumentFunctionNoteStacking,Halbton-Ganzton-LeiterHalf-Whole DiminishedInstrumentFunctionNoteStacking"Harmonisches MollHarmonic minorInstrumentFunctionNoteStackingZigeunermollHungarian minorInstrumentFunctionNoteStackingJap in sen Jap in senInstrumentFunctionNoteStackingLocrischLocrianInstrumentFunctionNoteStackingLydischLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9#11Maj9#11InstrumentFunctionNoteStacking Maj9#5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStacking Durb5Majb5InstrumentFunctionNoteStackingDurMajorInstrumentFunctionNoteStackingDur Bebop Major bebopInstrumentFunctionNoteStacking$Pentatonisches DurMajor pentatonicInstrumentFunctionNoteStacking Melodisches Moll Melodic minorInstrumentFunctionNoteStackingMollMinorInstrumentFunctionNoteStacking&Pentatonisches MollMinor pentatonicInstrumentFunctionNoteStackingMixolydisch MixolydianInstrumentFunctionNoteStackingNeopolitanisch NeopolitanInstrumentFunctionNoteStacking*Neopolitanisches MollNeopolitan minorInstrumentFunctionNoteStackingPhrygisch PhrygolydianInstrumentFunctionNoteStackingGanze Tne Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9b5m9b5InstrumentFunctionNoteStacking madd9madd9InstrumentFunctionNoteStacking mollb5minb5InstrumentFunctionNoteStackingmollminorInstrumentFunctionNoteStacking OktaveoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStackingAkkord-Bereich: Chord range:"InstrumentFunctionNoteStackingViewAkkord:Chord:"InstrumentFunctionNoteStackingView RANGERANGE"InstrumentFunctionNoteStackingViewSTACKINGSTACKING"InstrumentFunctionNoteStackingView0Benutzen Sie diesen Regler, um den Akkord-Bereich in Oktaven zu setzen. Der gewhle Akkord wird innerhalb der angegebenen Anzahl von Oktaven abgespielt.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewOktave(n) octave(s)"InstrumentFunctionNoteStackingViewGRUNDLAUTSTRKE BASE VELOCITYInstrumentMidiIOView KANALCHANNELInstrumentMidiIOViewDBENUTZERDEFINIERTE GRUNDLAUTSTRKECUSTOM BASE VELOCITYInstrumentMidiIOView.MIDI-EINGANG AKTIVIERENENABLE MIDI INPUTInstrumentMidiIOView.MIDI-AUSGANG AKTIVIERENENABLE MIDI OUTPUTInstrumentMidiIOViewtMIDI Gerte, von denen MIDI-Events empfangen werden sollen(MIDI devices to receive MIDI events fromInstrumentMidiIOViewlMIDI-Gerte, an die MIDI-Events gesendet werden sollen#MIDI devices to send MIDI events toInstrumentMidiIOViewNOTENOTEInstrumentMidiIOViewPROGRAMMPROGRAMInstrumentMidiIOViewGeben Sie die Lautstrken-Normalisationsbasis fr MIDI-basierende Instrumente bei einer Notenlautstrke von 100% anVSpecify the velocity normalization base for MIDI-based instruments at note volume 100%InstrumentMidiIOViewLAUTSTRKEVELOCITYInstrumentMidiIOView2x Tiefpass 2x LowPassInstrumentSoundShapingAllpassAllpassInstrumentSoundShapingBandpass csg BandPass csgInstrumentSoundShapingBandpass czpg BandPass czpgInstrumentSoundShapingKENNFREQCUTOFFInstrumentSoundShapingKennfrequenzCutoff frequencyInstrumentSoundShapingHllkurven/LFOsEnvelopes/LFOsInstrumentSoundShapingFiltertyp Filter typeInstrumentSoundShapingHochpassHiPassInstrumentSoundShapingTiefpassLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShaping NotchNotchInstrumentSoundShapingQ/Resonanz Q/ResonanceInstrumentSoundShaping RC-Bandpass 12dBRC BandPass 12dBInstrumentSoundShaping RC-Bandpass 24dBRC BandPass 24dBInstrumentSoundShaping RC-Hochpass 12dBRC HighPass 12dBInstrumentSoundShaping RC-Hochpass 24dBRC HighPass 24dBInstrumentSoundShaping RC-Tiefpass 12dBRC LowPass 12dBInstrumentSoundShaping RC-Tiefpass 24dBRC LowPass 24dBInstrumentSoundShapingRESORESOInstrumentSoundShapingResonanz ResonanceInstrumentSoundShapingLAUTSTRKEVOLUMEInstrumentSoundShaping&Vokalformant-FilterVocal Formant FilterInstrumentSoundShapingLautstrkeVolumeInstrumentSoundShapingHllkurven, LFOs und Filter sind vom aktuellen Instrument nicht untersttzt.HEnvelopes, LFOs and filters are not supported by the current instrument.InstrumentSoundShapingView FILTERFILTERInstrumentSoundShapingViewFREQFREQInstrumentSoundShapingViewTHier knnen Sie den eingebauten Filter whlen, den Sie in dieser Instrument-Spur nutzen wollen. Filter sind sehr wichtig, um die Charakteristik eines Klangs zu verndern.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRESORESOInstrumentSoundShapingViewResonanz: Resonance:InstrumentSoundShapingViewZIELTARGETInstrumentSoundShapingViewDiese Tabs enthalten Hllkurven. Diese sind sehr wichtig, um einen Klang zu verndern, insbesondere bei der substraktiven Synthese. Wenn Sie zum Beispiel eine Lautstrke-Hllkurve haben, knnen Sie festlegen, wann der Klang welchen Lautstrke-Pegel haben soll. Vielleicht wollen Sie ein weiches Streichinstrument erstellen. Dann muss ihr Sound sehr sanft ein- und ausgeblendet werden. Das kann man ganz einfach erreichen, indem man eine groe Anschwell(attack)- und Ausklingzeit (release) einstellt. Mit anderen Hllkurven, wie Balance, Kennfrequenz des benutzten Filters usw., ist es genau das Gleiche. Probieren Sie einfach ein bisschen herum! Mit ein paar Hllkurven kann man aus einer Sgezahnwelle wirklich coole Klnge machen...!_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingViewBenutzen Sie diesen Regler, um Q/die Resonanz fr den gewhlten Filter einzustellen. Q/Resonanz teilt dem Filter mit, wie stark er die Frequenzen in der Nhe der Cutoff-Frequenz verstrken soll.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingViewBenutzen Sie diesen Regler, um die Kennfrequenz (cutoff-frequency) fr den gewhlten Filter einzustellen. Die Kennfrequenz wird vom Filter zum Beschneiden des Signals verwendet. Zum Beispiel filtert ein Tiefpass-Filter alle Frequenzen oberhalb der Kennfrequenz heraus. Ein Hochpass-Filter filtert alle Frequenzen unterhalb der Kennfrequenz heraus usw...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingViewKennfrequenz:cutoff frequency:InstrumentSoundShapingViewGrundton Base noteInstrumentTrackStandard-PresetDefault presetInstrumentTrackFX-Kanal FX channelInstrumentTrackBalancePanningInstrumentTrackTonhhePitchInstrumentTrackTonhhenbereich Pitch rangeInstrumentTrackLautstrkeVolumeInstrumentTrackMit diesem Regler knnen Sie die Lautstrke des geffneten Kanals ndern.Zeige/verstecke Controller-RackShow/hide controller rack MainWindow>Zeige/verstecke Projekt-NotizenShow/hide project notes MainWindow2Das LMMS-Arbeitsverzeichnis %1 existiert nicht. Soll es jetzt erstellt werden? Sie knnen das Verzeichnis spter ber Bearbeiten -> Einstellungen ndern.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowDas aktuelle Projekt wurde seit dem letzten Speichern gendert. Wollen Sie es jetzt speichern?OThe current project was modified since last saving. Do you want to save it now? MainWindowRckgngigUndo MainWindowUnbenanntUntitled MainWindowVersion %1 Version %1 MainWindowVolumesVolumes MainWindowWas ist das? What's this? MainWindow$ArbeitsverzeichnisWorking directory MainWindowTakt/NennerMeter Denominator MeterDialogTakt/ZhlerMeter Numerator MeterDialogTAKTARTTIME SIG MeterDialog Nenner Denominator MeterModel Zhler Numerator MeterModel GERTDEVICEMidiAlsaRaw::setupWidget GERTDEVICE MidiAlsaSeqMIDI-ControllerMIDI ControllerMidiController6unbenannter_midi_controllerunnamed_midi_controllerMidiController4Unvollstndige EinrichtungSetup incomplete MidiImportSie haben LMMS ohne das SoundFont2-Player-Plugin gebaut. Dieses Plugin wird normalerweise benutzt, um Standardklnge bei importierten MIDI-Dateien einzurichten. Aus diesem Grund werden Sie nach dem Import der MIDI-Datei nichts hren.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImporthSie haben keine Standard-Soundfont im Einstellungsdialog (Bearbeiten->Einstellungen) festgelegt. Aus diesem Grund werden Sie nach dem Import der MIDI-Datei whrend der Wiedergabe nichts hren. Sie sollten eine General-MIDI-Soundfont herunterladen, diese im Einstellungsdialog angeben und es erneut versuchen.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImport GERTDEVICEMidiOss::setupWidgetGrundlautstrke Base velocityMidiPort0Feste EingangslautstrkeFixed input velocityMidiPort"Feste AusgangnoteFixed output noteMidiPort0Feste AusgangslautstrkeFixed output velocityMidiPortEingangskanal Input channelMidiPort$EingangscontrollerInput controllerMidiPort,Ausgangs-MIDI-ProgrammOutput MIDI programMidiPortAusgangskanalOutput channelMidiPort$AusgangscontrollerOutput controllerMidiPort2MIDI-Ereignisse empfangenReceive MIDI-eventsMidiPort,MIDI-Ereignisse sendenSend MIDI-eventsMidiPortAbs. SinuswelleAbs. sine waveMonstroInstrument&Absolute SinuswelleAbsolute sine waveMonstroInstrument@Bandbegrenzte Moog-SgezahnwelleBandlimited Moog saw waveMonstroInstrument6Bandbegrenzte SgezahnwelleBandlimited Ramp waveMonstroInstrument6Bandbegrenzte SgezahnwelleBandlimited Saw waveMonstroInstrument6Bandbegrenzte RechteckwelleBandlimited Square waveMonstroInstrument8Bandlimittierte DreieckwelleBandlimited Triangle waveMonstroInstrument6Digitale Moog-SgezahnwelleDigital Moog saw waveMonstroInstrument,Digitale SgezahnwelleDigital Ramp waveMonstroInstrument,Digitale SgezahnwelleDigital Saw waveMonstroInstrument,Digitale RechteckwelleDigital Square waveMonstroInstrument*Digitale DreieckwelleDigital Triangle waveMonstroInstrument2Hllkurve 1 Anschwellzeit Env 1 AttackMonstroInstrument,Hllkurve 1 Abfallzeit Env 1 DecayMonstroInstrument*Hllkurve 1 Haltezeit Env 1 HoldMonstroInstrument.Hllkurve 1 VerzgerungEnv 1 Pre-delayMonstroInstrument0Hllkurve 1 Ausklingzeit Env 1 ReleaseMonstroInstrument&Hllkurve 1 Neigung Env 1 SlopeMonstroInstrument,Hllkurve 1 Dauerpegel Env 1 SustainMonstroInstrument2Hllkurve 2 Anschwellzeit Env 2 AttackMonstroInstrument,Hllkurve 2 Abfallzeit Env 2 DecayMonstroInstrument*Hllkurve 2 Haltezeit Env 2 HoldMonstroInstrument.Hllkurve 2 VerzgerungEnv 2 Pre-delayMonstroInstrument0Hllkurve 2 Ausklingzeit Env 2 ReleaseMonstroInstrument&Hllkurve 2 Neigung Env 2 SlopeMonstroInstrument,Hllkurve 2 Dauerpegel Env 2 SustainMonstroInstrument&Exponentielle WelleExponential waveMonstroInstrument&LFO 1 Anschwellzeit LFO 1 AttackMonstroInstrumentLFO 1 Phase LFO 1 PhaseMonstroInstrumentLFO 1 Rate LFO 1 RateMonstroInstrument LFO 1 WellenformLFO 1 WaveformMonstroInstrument&LFO 2 Anschwellzeit LFO 2 AttackMonstroInstrument"Hllkurve 2 Phase LFO 2 PhaseMonstroInstrumentLFO 2 Rate LFO 2 RateMonstroInstrument LFO 2 WellenformLFO 2 WaveformMonstroInstrument$Moog-Sgezahnwelle Moog saw waveMonstroInstrument:Oszillator 1 Grob-VerstimmungOsc 1 Coarse detuneMonstroInstrumentFOszillator 1 Fein-Verstimmung linksOsc 1 Fine detune leftMonstroInstrumentHOszillator 1 Fein-Verstimmung rechtsOsc 1 Fine detune rightMonstroInstrument(Oszillator 1 Balance Osc 1 PanningMonstroInstrument*Oszilator 1 PulsweiteOsc 1 Pulse widthMonstroInstrumentLOszillator 1 Stereo PhasenverschiebungOsc 1 Stereo phase offsetMonstroInstrumentLOszillator 2 Sync beim Abfallen sendenOsc 1 Sync send on fallMonstroInstrumentJOszillator 1 Sync beim Steigen sendenOsc 1 Sync send on riseMonstroInstrument.Oszillator 1 Lautstrke Osc 1 VolumeMonstroInstrument:Oszillator 2 Grob-VerstimmungOsc 2 Coarse detuneMonstroInstrumentFOszillator 2 Fein-Verstimmung linksOsc 2 Fine detune leftMonstroInstrumentHOszillator 2 Fein-Verstimmung rechtsOsc 2 Fine detune rightMonstroInstrument(Oszillator 2 Balance Osc 2 PanningMonstroInstrumentLOszillator 2 Stereo PhasenverschiebungOsc 2 Stereo phase offsetMonstroInstrumentBOszillator 2 hart synchronisierenOsc 2 Sync HardMonstroInstrumentLOszillator 2 rckwrts synchronisierenOsc 2 Sync ReverseMonstroInstrument.Oszillator 2 Lautstrke Osc 2 VolumeMonstroInstrument.Oszillator 2 WellenformOsc 2 WaveformMonstroInstrument:Oszillator 3 Grob-VerstimmungOsc 3 Coarse detuneMonstroInstrument(Oszillator 3 Balance Osc 3 PanningMonstroInstrumentLOszillator 3 Stereo PhasenverschiebungOsc 3 Stereo phase offsetMonstroInstrumentLOszillator 3 Unter-Oszillator MischungOsc 3 Sub-oscillator mixMonstroInstrumentBOszillator 2 hart synchronisierenOsc 3 Sync HardMonstroInstrumentLOszillator 2 rckwrts synchronisierenOsc 3 Sync ReverseMonstroInstrument.Oszillator 3 Lautstrke Osc 3 VolumeMonstroInstrument2Oszillator 3 Wellenform 1Osc 3 Waveform 1MonstroInstrument2Oszillator 3 Wellenform 2Osc 3 Waveform 2MonstroInstrument0Oszillator2-3 ModulationOsc2-3 modulationMonstroInstrumentPW1-Env1PW1-Env1MonstroInstrumentPW1-Env2PW1-Env2MonstroInstrumentPW1-LFO1PW1-LFO1MonstroInstrumentPW1-LFO2PW1-LFO2MonstroInstrumentPhs1-Env1 Phs1-Env1MonstroInstrumentPhs1-Env2 Phs1-Env2MonstroInstrumentPhs1-LFO1 Phs1-LFO1MonstroInstrumentPhs1-LFO2 Phs1-LFO2MonstroInstrumentPhs2-Env1 Phs2-Env1MonstroInstrumentPhs2-Env2 Phs2-Env2MonstroInstrumentPhs2-LFO1 Phs2-LFO1MonstroInstrumentPhs2-LFO2 Phs2-LFO2MonstroInstrumentPhs3-Env1 Phs3-Env1MonstroInstrument Phs3-Env2MonstroInstrumentPhs3-LFO1 Phs3-LFO1MonstroInstrumentPhs3-LFO2 Phs3-LFO2MonstroInstrumentPit1-Env1 Pit1-Env1MonstroInstrumentPit1-Env2 Pit1-Env2MonstroInstrumentPit1-LFO1 Pit1-LFO1MonstroInstrumentPit1-LFO2 Pit1-LFO2MonstroInstrumentPit2-Env1 Pit2-Env1MonstroInstrumentPit2-Env2 Pit2-Env2MonstroInstrumentPit2-LFO1 Pit2-LFO1MonstroInstrumentPit2-LFO2 Pit2-LFO2MonstroInstrumentPit3-Env1 Pit3-Env1MonstroInstrumentPit3-Env2 Pit3-Env2MonstroInstrumentPit3-LFO1 Pit3-LFO1MonstroInstrumentPit3-LFO2 Pit3-LFO2MonstroInstrumentSgezahnwelle Ramp waveMonstroInstrumentZuflligRandomMonstroInstrument"Zufllig gleitend Random smoothMonstroInstrumentSgezahnwelleSaw waveMonstroInstrument&Ausgewhlte Ansicht Selected viewMonstroInstrumentSinuswelle Sine waveMonstroInstrument(Weiche RechteckwelleSoft square waveMonstroInstrumentRechteckwelle Square waveMonstroInstrumentSub3-Env1 Sub3-Env1MonstroInstrumentSub3-Env2 Sub3-Env2MonstroInstrumentSub3-LFO1 Sub3-LFO1MonstroInstrumentSub3-LFO2 Sub3-LFO2MonstroInstrumentDreieckwelle Triangle waveMonstroInstrumentVol1-Env1 Vol1-Env1MonstroInstrumentVol1-Env2 Vol1-Env2MonstroInstrumentVol1-LFO1 Vol1-LFO1MonstroInstrumentVol1-LFO2 Vol1-LFO2MonstroInstrumentVol2-Env1 Vol2-Env1MonstroInstrumentVol2-Env2 Vol2-Env2MonstroInstrumentVol2-LFO1 Vol2-LFO1MonstroInstrumentVol2-LFO2 Vol2-LFO2MonstroInstrumentVol3-Env1 Vol3-Env1MonstroInstrumentVol3-Env2 Vol3-Env2MonstroInstrumentVol3-LFO1 Vol3-LFO1MonstroInstrumentVol3-LFO2 Vol3-LFO2MonstroInstrumentWeies Rauschen White noiseMonstroInstrumentATT, oder Anschwellzeit, kontrolliert wie schnell die Hllkurve am Anfang steigt, in Millisekunden gemessen. Ein Wert von 0 bedeutet sofort. xATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant.  MonstroViewAnschwellzeit verursacht, dass der LFO allmhlich vom Anfang der Note angeht. GAttack causes the LFO to come on gradually from the start of the note.  MonstroViewNWellenform fr Oszillator 2 auswhlen. "Choose waveform for oscillator 2.  MonstroView4Wellenform fr den ersten Unter-Oszillator von Oszillator 3 auswhlen. Oszillator 3 kann gleitend zwischen zwei verschiedenen Wellenformen interpolieren. yChoose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms.  MonstroView6Wellenform fr den zweiten Unter-Oszillator von Oszillator 3 auswhlen. Oszillator 3 kann gleitend zwischen zwei verschiedenen Wellenformen interpolieren. zChoose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms.  MonstroViewDEC, oder Abschwellzeit, kontrolliert, wie schnell die Hllkurve von ihrer Spitze auf Null abfllt, in Millisekunden gemessen. Die tatschliche Abschwellzeit ist mglicherweise krzer, wenn Dauerpegel benutzt wird. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used.  MonstroViewFTL und FTR ndern die Feinabstimmung des Oszillators jeweils fr den linken und rechten Kanal. Diese knnen Stereoverstimmug zum Oszillator hinzufgen, was das Stereobild weitet und eine Illusion von Raum erzeugt. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space.  MonstroViewHOLD kontrolliert, wie lange die Hllkurve nach der Anschwellphase an der Spitze bleibt. JHOLD controls how long the envelope stays at peak after the attack phase.  MonstroView6Hard sync: Jedes Mal, wenn der Oszillator ein sync-Signal von Oszillator 1 empfng, wird die Phase auf 0 zurckgesetzt, egal was die Phasendifferenz ist. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is.  MonstroViewZustzlich zu fest zugeordneten Modulatoren, ermglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. AM bedeutet Amplituden-Modulation: Die Amplitude (Lautstrke) von Oszillator 3 wird durch Oszillator 2 moduliert. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2.  MonstroViewZustzlich zu fest zugeordneten Modulatoren, ermglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. FM bedeutet Frequenz-Modulation: Die Frequenz (Tonhhe) von Oszillator 3 wird durch Oszillator 2 Moduliert. Die Frequenz-Modulation ist als Phasen-Modulation implementiert, was eine stabielere Gesamttonhhe erzeugt, als reine Frequenz-Modulation. WIn addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation.  MonstroViewZustzlich zu fest zugeordneten Modulatoren, ermglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. Mix-Modus bedeutet keine Modulation: Die Ausgaben der Oszillatoren werden einfach zusammengemischt. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together.  MonstroViewZustzlich zu fest zugeordneten Modulatoren, ermglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. PM bedeutet Phasen-Modulation: Die Phase von Oszillator 3 wird durch Oszillator 2 moduliert. Es unterscheidet sich von der Frequenz-Modulation dadurch, dass die Phasennderungen nicht zunehmend sind. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative.  MonstroViewMatrix-Ansicht Matrix view MonstroViewJOszillator 2 mit Oszillator 3 MischenMix Osc2 with Osc3 MonstroViewlAmplitude von Oszillator 3 mit Oszillator 2 modulieren$Modulate amplitude of Osc3 with Osc2 MonstroViewjFrequenz von Oszillator 3 mit Oszillator 2 modulieren$Modulate frequency of Osc3 with Osc2 MonstroViewdPhase von Oszillator 3 mit Oszillator 2 modulieren Modulate phase of Osc3 with Osc2 MonstroView Operator-AnsichtOperators view MonstroViewbPHS kontrolliert die Phasenverschiebung des LFO. *PHS controls the phase offset of the LFO.  MonstroViewPRE, oder Vor-Verzgerung, verzgert den Beginn der Hllkurve vom Anfang der Note. 0 bedeutet keine Verzgerung. bPRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay.  MonstroViewREL, oder Ausklingzeit, kontrolliert, wie lange die Ausklingzeit fr die Note von ihrer Spitze auf Null ist, gemessen in Millisekunden. Die tatschliche Ausklingzeit ist mglicherweise krzer, abhngig davon, in welcher Phase die Note losgelassen wird. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released.  MonstroViewRate setzt die Geschwindigkeit des LFO, in Millisekunden pro Durchlauf gemessen. Kann zum Tempo synchronisiert werden. \Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo.  MonstroView Reverse sync: Jedes Mal, wenn der Oszillator ein sync-Signal von Oszillator 1 empfng, wird die Amplitude des Oszillators invertiert. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted.  MonstroView SUS, oder Dauerpegel, kontrolliert den Dauerpgel der Hllkurve. Die Abfall-Phase geht nicht unter diesen Pegel, solange die Note gehalten wird. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held.  MonstroView`Die Wellenform fr LFO 1 auswhlen. Zufllig und Zufllig gleitend sind spzielle Wellenformen: Sie erzeugen zufllige Ausgabe, wobei die Rate des LFO kontrolliert, wie oft sich der Zustand des LFO ndert. Die gleitende Version intrpoliert zwischen diesen Zustnden mit Cosinus-Interpolation. Diese zuflligen Modi knnen benutzt werden um Ihren Presets Leben zu geben - Etwas von der analogen Unberechenbarkeit hinzuzufgen & wSelect the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability...  MonstroView`Die Wellenform fr LFO 2 auswhlen. Zufllig und Zufllig gleitend sind spzielle Wellenformen: Sie erzeugen zufllige Ausgabe, wobei die Rate des LFO kontrolliert, wie oft sich der Zustand des LFO ndert. Die gleitende Version intrpoliert zwischen diesen Zustnden mit Cosinus-Interpolation. Diese zuflligen Modi knnen benutzt werden um Ihren Presets Leben zu geben - Etwas von der analogen Unberechenbarkeit hinzuzufgen & wSelect the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability...  MonstroView:Sync beim Absteigen senden: Wenn aktiviert, wird das Sync-Signal jedes Mal gesendet, wenn sich der Zustand von Oszillator 1 von hoch nach niedrig ndert, z.B. wenn sich die Amplitude von 1 nach -1 ndert. Die Tonhhe, Phase und Pulsweite von Oszillator 1 knnen das Timing von Syncs beeinflussen, aber die Lautstrke hat keinen Effekt darauf. Sync-Signale werden unabhngig vom linken und rechten Kanal gesendet. ]Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels.  MonstroView:Sync beim Ansteigen senden: Wenn aktiviert, wird das Sync-Signal jedes Mal gesendet, wenn sich der Zustand von Oszillator 1 von niedrig nach hoch ndert, z.B. wenn sich die Amplitude von -1 nach 1 ndert. Die Tonhhe, Phase und Pulsweite von Oszillator 1 knnen das Timing von Syncs beeinflussen, aber die Lautstrke hat keinen Effekt darauf. Sync-Signale werden unabhngig vom linken und rechten Kanal gesendet. ]Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels.  MonstroViewDer CRS Regler ndert die Stimmung des Oszillators 1 in Halbtonschritten. CThe CRS knob changes the tuning of oscillator 1 in semitone steps.  MonstroViewDer CRS Regler ndert die Stimmung des Oszillators 2 in Halbtonschritten. CThe CRS knob changes the tuning of oscillator 2 in semitone steps.  MonstroViewDer CRS Regler ndert die Stimmung des Oszillators 3 in Halbtonschritten. CThe CRS knob changes the tuning of oscillator 3 in semitone steps.  MonstroViewDie Matrix-Ansicht enthlt die Modulationsmatrix. Hier knnen Sie die Modulationsverhltnisse zwischen den verschiedenen Operatoren definieren: Jeder hrbare Oberator (Oszillatorern 1-3) hat 3-4 Einstellungen, die durch jeden der Modulatoren moduliert werden knnen. Mehr Modulation braucht mehr Rechenleistung. Die Ansicht ist in Modulationsziele, gruppiert nach dem Zieloszillator, eingeteilt. Verfgbare Ziele sind Lautstrke, Tonhhe, Phase, Pulsweite und Unter-Oszillator Rate. Hinweis: einige Ziele sind speziell fr einen Oszillator. Jedes Modulationsziel hat 4 Regler, einen fr jeden Modulator. Standardmig sind alle Regler bei 0, was keine Modulation bedeutet. Wenn der Regler auf 1 gestellt wird, wird das Modulationsziel vom Modulator so viel wie mglich beeinflusst. Wenn er auf -1 gestellt wird, passiert das gleiche, aber die Modulation ist invertiert. The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed.  MonstroViewDie Operator-Ansicht enthlt alle Operatoren. Diese beinhalten beide, hrbare Operatoren (Oszillatoren) und nicht hrbare Operatoren oder Modulatoren: Niedrig-Frequenz-Oszillatoren und Hllkurven. Regler und andere Dinge in der Operator-Ansicht haben ihren eigenen Was ist das? Texte, sodass Sie auf diese Weise spezifischere Hilfe fr diese bekommen knnen. ;The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way.  MonstroViewvDer PW Regler kontrolliert die Pulsweite, auch bekannt als Tastgrad, von Oszillator 1. Oszillator 1 ist ein digitaler Pulswellen Oszillator, es erzeugt keine bandbegrenzte Ausgabe, was bedeutet, dass Sie es als einen hrbaren Oszillator einsetzen knnen, aber es wird Aliasing verursachen. Sie knnen es auch als eine nicht hrbare Quelle fr ein sync Signal benutzen, dass benutzt werden kann, um die Oszillatoren 2 und 3 zu synchronisieren. qThe PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3.  MonstroViewDer SPO Regler ndert die Phasendifferenz zwischen dem linken und rechten Kanal. Hhere Differenz erzeugt ein breiteres Stereobild. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image.  MonstroViewDer SUB Regler ndert das Mischverhltnis der beiden Unter-Oszillatoren von Oszillator 3. Jeder Unter-Oszillator kann auf eine andere Wellenform eingestellt werden und Oszillator 3 kann zwischen diesen gleitend interpolieren. Alle eingehenden Modulationen zu Oszillator 3 werden auf beide Unter-Oszillator/Wellenformen auf gleiche Weise angewandt. #The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way.  MonstroViewDer Neigung-Regler kontrolliert die Kurve oder Form der Hllkurve. Ein Wert von 0 erzeugt einen direkten Anstieg und Abfall. Negative Werte erzeugen Kurven, die langsam starten, schnell die Spitze erreichen und wieder langsam abfallen. Positive Werte erzeugen Kurven, die schnell starten und enden und lnger in der Nhe der Spitze bleiben. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks.  MonstroView0Kanal 1 Grob-VerstimmungChannel 1 Coarse detune NesInstrument Kanal 1 TastgradChannel 1 Duty cycle NesInstrument.Kanal 1 HllkurvenlngeChannel 1 Envelope length NesInstrument(Kanal 1 StreichmengeChannel 1 Sweep amount NesInstrument&Kanal 1 StreichrateChannel 1 Sweep rate NesInstrument$Kanal 1 LautstrkeChannel 1 Volume NesInstrument0Kanal 2 Grob-VerstimmungChannel 2 Coarse detune NesInstrument Kanal 2 TastgradChannel 2 Duty cycle NesInstrument.Kanal 2 HllkurvenlngeChannel 2 Envelope length NesInstrument(Kanal 2 StreichmengeChannel 2 Sweep amount NesInstrument&Kanal 2 StreichrateChannel 2 Sweep rate NesInstrument$Kanal 2 LautstrkeChannel 2 Volume NesInstrument0Kanal 3 Grob-VerstimmungChannel 3 Coarse detune NesInstrument$Kanal 3 LautstrkeChannel 3 Volume NesInstrument.Kanal 4 HllkurvenlngeChannel 4 Envelope length NesInstrument,Kanal 4 RauschfrequenzChannel 4 Noise frequency NesInstrument@Kanal 4 Rauschfrequenz-StreichenChannel 4 Noise frequency sweep NesInstrument$Kanal 4 LautstrkeChannel 4 Volume NesInstrument"Master-Lautstrke Master volume NesInstrumentVibratoVibrato NesInstrument"Modulationsart %1Modulation type %1OscillatorObject<Oszillator %1 Grob-VerstimmungOsc %1 coarse detuningOscillatorObjectHOszillator %1 Fein-Verstimmung linksOsc %1 fine detuning leftOscillatorObjectJOszillator %1 Fein-Verstimmung rechtsOsc %1 fine detuning rightOscillatorObject,Oszillator %1 HarmonieOsc %1 harmonicOscillatorObject*Oszillator %1 BalanceOsc %1 panningOscillatorObject@Oszillator %1 PhasenverschiebungOsc %1 phase-offsetOscillatorObjectNOszillator %1 Stereo PhasenverschiebungOsc %1 stereo phase-detuningOscillatorObject0Oszillator %1 Lautstrke Osc %1 volumeOscillatorObject0Oszillator %1 WellenformOsc %1 wave shapeOscillatorObject0Oszillator %1 WellenformOsc %1 waveformOscillatorObjectKlicken Sie hier, um eine andere Patch-Datei zu laden. Wiederholungs- und Stimmungseinstellungen werden nicht zurckgesetzt.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanView&Hier knnen Sie den Wiederholen-Modus (de-)aktivieren. Wenn aktiviert, verwendet PatMan die in der Datei verfgbaren Informationen zum Wiederholen.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewHier knnen Sie den Stimmungs-Modus (de-)aktivieren. Wenn aktiviert, wird der Klang automatisch an die Frequenz der Note angepasst.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanViewWiederholenLoop PatmanView,Modus beim Wiederholen Loop mode PatmanView,Keine Datei ausgewhltNo file selected PatmanView2Andere Patch-Datei ffnenOpen other patch PatmanView$Patch-Datei ffnenOpen patch file PatmanView*Patch-Dateien (*.pat)Patch-Files (*.pat) PatmanViewStimmungTune PatmanViewStimmungsmodus Tune mode PatmanView&Schritte hinzufgen Add steps PatternViewName ndern Change name PatternView$Alle Noten lschenClear all notes PatternView(Im Piano-Roll ffnenOpen in piano-roll PatternView$Schritte entfernen Remove steps PatternView"Name zurcksetzen Reset name PatternViewDoppelklick, um dieses Pattern im Piano-Roll zu ffnen Lautstrke eines Schritts kann mit dem Mausrad gendert werdenWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewFAufgrud eines Fehlers in einer lteren Version von LMMS, sind die Peak Controller mglicherweise nicht richtig verbunden. Bitte stellen Sie sicher, dass die Peak Controller richtig verbunden sind und speichern Sie die Datei erneut. Entschuldigung fr jegliche verursachte Unannehmlichkeiten.Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.PeakControllerPeak ControllerPeak ControllerPeakController,Peak Controller FehlerPeak Controller BugPeakControllerLFO-ControllerLFO ControllerPeakControllerDialogPEAKPEAKPeakControllerDialogAMNTAMNT!PeakControllerEffectControlDialogATCKATCK!PeakControllerEffectControlDialog*Strkenmultiplikator:Amount Multiplicator:!PeakControllerEffectControlDialog.Anschwellzeit (attack):Attack:!PeakControllerEffectControlDialogBASEBASE!PeakControllerEffectControlDialogGrundstrke: Base amount:!PeakControllerEffectControlDialogDCAYDCAY!PeakControllerEffectControlDialogMULTMULT!PeakControllerEffectControlDialog,Modulationsintensitt:Modulation amount:!PeakControllerEffectControlDialog.Ausklingzeit (release):Release:!PeakControllerEffectControlDialogAbsoluter Wert Abs ValuePeakControllerEffectControls(StrkenmultiplikatorAmount MultiplicatorPeakControllerEffectControls,Anschwellzeit (attack)AttackPeakControllerEffectControlsGrundwert Base valuePeakControllerEffectControls*ModulationsintensittModulation amountPeakControllerEffectControls*Ausgang stummschalten Mute outputPeakControllerEffectControls,Ausklingzeit (release)ReleasePeakControllerEffectControlsjKlicken Sie hier und der Verstimmungmodus wird aktivert. In diesem Modus knnen Sie auf eine Note klicken, um die Automations-Verstimmung zu ffnen. Sie knnen diese benutzen, um von einer Note in eine andere zu rutschen. Sie knnen auch Umschalt+T auf Ihrer Tastatur drcken, um diesen Modus zu aktivieren.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollKlicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus knnen Sie Noten hinzufgen, in der Lnge ndern und verschieben. Das ist der Standardmodus, der meistens benutzt wird. Sie knnen auch Umschalt+D auf Ihrer Tastatur drcken, um in diesen Modus zu gelangen. Halten Sie in diesem Modus Strg gedrckt, um vorbergehend in den Auswahlmodus zu wechslen.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRoll|Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus knnen Sie einzelne Noten lschen. Sie knnen auch Umschalt+E auf Ihrer Tastatur drcken, um diesen Modus zu aktivieren.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRollKlicken Sie hier, um den Auswahlmodus zu aktivieren. In diesem Modus knnen Sie einzelne Noten auswhlen. Alternativ knnen Sie auch Strg im Zeichnenmodus gedrckt halten, um vorrbergehend den Auswahlmodus zu benutzen.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRollKlicken Sie hier, um die Noten aus der Zwischenablage im ersten sichtbaren Takt einzufgen.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRolltKlicken Sie hier, um die markierten Noten in die Zwischenablage zu kopieren. Sie knnen sie berall in einem beliebigen Pattern wieder einfgen, indem Sie auf den Einfgen-Knopf klicken.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollzKlicken Sie hier, um die markierten Noten in die Zwischenablage auszuschneiden. Sie knnen sie berall in einem beliebigen Pattern wieder einfgen, indem Sie auf den Einfgen-Knopf klicken.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll>Klicken Sie hier, um den aktuellen Pattern abzuspielen. Das ist ntzlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn sein Ende erreicht ist.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRoll>Klicken Sie hier, um Noten von einem MIDI-Gert oder dem virtuellen Test-Klavier des zugehrigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und hinterher knnen Sie diese abspielen und bearbeiten.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRollJKlicken Sie hier, um Noten von einem MIDI-Gert oder dem virtuellen Test-Klavier des zugehrigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und Sie werden den Song oder die BB-Spur im Hintergrund hren.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRollKlicken Sie hier, um die Wiedergabe des aktuellen Patterns zu stoppen./Click here to stop playback of current pattern. PianoRollFAusgewhlte Noten kopieren (Strg+C)Copy selected notes (Ctrl+C) PianoRollNAusgewhlte Noten ausschneiden (Strg+X)Cut selected notes (Ctrl+X) PianoRoll6Verstimmungsmodus (Shift+T)Detune mode (Shift+T) PianoRoll4Zeichnenmodus (Umschalt+D)Draw mode (Shift+D) PianoRoll0Radiermodus (Umschalt+E)Erase mode (Shift+E) PianoRollLetzte Note Last note PianoRollLsst Sie einen Akkord auswhlen, den LMMS dann eintragen oder markieren kann. Sie knnen die am hufigsten benutzten Akkorde in diesem Aufklapp-Men finden. Nachdem Sie einen Akkord ausgewhlt haben, klicken Sie irgendwo hin, um den Akkord dort zu platzieren oder machen Sie einen Rechtsklick auf dem virtuellen Keyboard, um das Kontextmen zu ffnen und den Akkord zu makieren. Um Noten wieder einzeln einzutragen, mssen Sie Kein Akkord in diesem Aufklapp-Men auswhlen.lLet you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. PianoRoll4Aktuellen Akkord markierenMark current chord PianoRoll8Aktuelle Tonleiter markierenMark current scale PianoRollNAktuellen Halbton markieren/demarkierenMark/unmark current semitone PianoRollKein AkkordNo chord PianoRollKeine TonleiterNo scale PianoRollNoten-Balance Note Panning PianoRoll Noten-Lautstrke Note Volume PianoRollNotenraster Note lock PianoRoll$Balance: %1% linksPanning: %1% left PianoRoll&Balance: %1% rechtsPanning: %1% right PianoRollBalance: mittigPanning: center PianoRollTNoten aus Zwischenablage einfgen (Strg+V)#Paste notes from clipboard (Ctrl+V) PianoRollPiano-Roll - %1Piano-Roll - %1 PianoRoll2Piano-Roll - Kein PatternPiano-Roll - no pattern PianoRollbAktuellen Pattern abspielen/pausieren (Leertaste)"Play/pause current pattern (Space) PianoRollpBitte geben Sie einen neuen Wert zwischen %1 und %2 ein:+Please enter a new value between %1 and %2: PianoRollxBitte ffnen Sie einen Pattern, indem Sie ihn doppelklicken!/Please open a pattern by double-clicking on it! PianoRollXNoten von MIDI-Gert/Kanal-Klavier aufnehmen+Record notes from MIDI-device/channel-piano PianoRollNoten vom MIDI-Gert/Kanal-Klavier aufnehmen whrend der Song oder BB-Track abgespielt wirdJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll4Auswahl-Modus (Umschalt+S)Select mode (Shift+S) PianoRollhAbspielen des aktuellen Patterns stoppen (Leertaste)'Stop playing of current pattern (Space) PianoRollDas Q steht fr Quantisierung und kontrolliert die Rastergre an denen Noten und Kontrollpunkte einrasten. Mit kleineren Quantisierungswerten knnen Sie kleinere Noten im Piano Roll und exaktere Kontrollpunkte im Automation-Editor eintragen.The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. PianoRollTDiese Funktion ist direkt mit dem Kontextmen auf dem virtuellen Keyboard, links im Piano Roll, verbunden. Nachdem Sie die Tonleiter ausgewhlt haben, die Sie im Aufklapp-Men haben mchten, knnen Sie auf eine gewnschte Taste auf dem virtuellen Keyboard einen Rechtsklick machen und Aktuelle Tonleiter markieren auswhlen. LMMS markiert dann alle Noten, die zu dieser Tonleiter und Taste gehren, die Sie ausgewhlt haben!pThe feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! PianoRollDies kontrolliert die Vergrerung einer Axe. Es kann hilfreich fr bestimmte Aufgaben sein, eine Vergrerung auszuwhlen. Fr normales Bearbeiten, sollte die Vergrerung an Ihre kleinsten Noten angepasst sein. This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes.  PianoRoll*Dies lsst Sie die Lnge von neuen Noten auswhlen. Letzte Note bedeutet, dass LMMS die Lnge der Note benutz, die Sie als letzes bearbeitet haben.~This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited PianoRoll8Alles Markierungen entfernen Unmark all PianoRollLautstrke: %1% Volume: %1% PianoRollGrundton Base note PianoView:Fehler beim Laden des PluginsError while loading pluginPluginXDas Plugin %1 konnte nicht geladen werden!Failed to load plugin "%1"!PluginlLMMS Plugin %1 hat keinen Plugin-Deskriptor namens %2!:LMMS plugin %1 does not have a plugin descriptor named %2!Plugin*Plugin nicht gefundenPlugin not foundPluginDas Plugin %1 konnte nicht gefunden oder geladen werden! Grund: %2AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"PluginZiehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. PluginBrowser$Instrument-BrowserInstrument browser PluginBrowser$Instrument-PluginsInstrument plugins PluginBrowser<Komprimierte OGG-Datei (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer"WAV-Datei (*.wav)WAV-File (*.wav)ProjectRendererAAQObjectA#A#QObjectAbAbQObjectHBQObjectBBbQObjectCCQObjectC#C#QObjectDDQObjectD#D#QObjectDbDbQObjectEEQObjectEbEbQObjectF#F#QObjectFbFbQObjectGGQObjectG#G#QObjectGbGbQObject"Eingangs-Kanle:  Channels In: QWidget"Ausgangs-Kanle: Channels Out: QWidgetCopyright:  Copyright: QWidgetDatei: File: QWidgetDatei: %1File: %1QWidget6Operationen nicht In-Place:In Place Broken: QWidgetHersteller: Maker: QWidget Name: Name: QWidgetNeinNoQWidgetEchtzeitfhig: Real Time Capable: QWidget&Bentigt Echtzeit: Requires Real Time: QWidgetJaYesQWidget6AIFF-Dateien (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBuffer"AU-Dateien (*.au)AU-Files (*.au) SampleBufferAlle Audiodateien (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)MAll Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleBuffer0DrumSynth-Dateien (*.ds)DrumSynth-Files (*.ds) SampleBuffer*FLAC-Dateien (*.flac)FLAC-Files (*.flac) SampleBuffer&OGG-Dateien (*.ogg)OGG-Files (*.ogg) SampleBuffer"Audiodatei ffnenOpen audio file SampleBuffer&RAW-Dateien (*.raw)RAW-Files (*.raw) SampleBuffer*SPEEX-Dateien (*.spx)SPEEX-Files (*.spx) SampleBuffer&VOC-Dateien (*.voc)VOC-Files (*.voc) SampleBuffer(Wave-Dateien (*.wav)Wave-Files (*.wav) SampleBufferKopierenCopy SampleTCOViewAusschneidenCut SampleTCOView8Lschen (mittlere Maustaste)Delete (middle mousebutton) SampleTCOViewTStumm/Laut schalten (<Strg> + Mittelklick)#Mute/unmute ( + middle click) SampleTCOViewEinfgenPaste SampleTCOView.Aufnahme setzen/lschenSet/clear record SampleTCOView@Doppelklick, um Sample zu whlendouble-click to select sample SampleTCOViewSamplespur Sample track SampleTrackLautstrkeVolume SampleTrack"Kanal Lautstrke:Channel volume:SampleTrackView&Lautstrke der Spur Track volumeSampleTrackViewVOLVOLSampleTrackView4Automation-Spur hinzufgenAdd automation-track SongEditor0Beat/Bassline hinzufgenAdd beat/bassline SongEditor,Sample-Spur hinzufgenAdd sample-track SongEditornKlicken Sie hier, wenn Sie Ihren ganzen Song abspielen wollen. Das Abspielen wird am Song-Positions-Marker (grn) gestartet. Sie knnen diesen auch whrend des Abspielens verschieben.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditor Klicken Sie hier, wenn Sie das Abspielen des Songs stoppen wollen. Der Song-Positions-Marker wird automatisch auf den Song-Anfang zurckgesetzt.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditorKonnte %1 nicht zum Schreiben ffnen. Sie sind wahrscheinlich nicht dazu berechtigt in diese Datei zu schreiben. Bitte stellen Sie sicher, dass Sie Schreibrechte fr diese Datei haben und versuchen Sie es erneut.Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditor2Konnte Datei nicht ffnenCould not open file SongEditorKonnte die Datei %1 nicht ffnen. Sie sind wahrscheinlich nicht berechtigt, diese Datei zu lesen. Bitte stellen Sie sicher, dass Sie wenigstens Leserechte auf diese Datei besitzen und versuchen es erneut.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor8Konnte Datei nicht schreibenCould not write file SongEditorZeichenmodus Draw mode SongEditorREditier-Modus (auswhlen und verschieben)Edit mode (select and move) SongEditorFehler in Datei Error in file SongEditor$High-Quality-ModusHigh quality mode SongEditorMaster-Tonhhe Master pitch SongEditor"Master-Lautstrke Master volume SongEditor4Song abspielen (Leertaste)Play song (Space) SongEditor@Samples vom Audiogert aufnehmen Record samples from Audio-device SongEditorSamples vom Audiogert whrend der Wiedergabe des Songs oder BB-Tracks aufnehmen?Record samples from Audio-device while playing song or BB track SongEditorSong-Editor Song-Editor SongEditorNAbspielen des Songs stoppen (Leertaste)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorDie Datei %1 scheint fehlerhaft zu sein und kann daher nicht geladen werden.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditorDas Tempo eines Liedes wird in Beats pro Minute (BPM) angegeben. Wenn Sie das Tempo Ihres Songs ndern wollen, ndern Sie diesen Wert. Jeder Takt hat vier Schlge (Beats); das Tempo gibt also an, wie viele Takte / 4 innerhalb einer Minute gespielt werden sollen (bzw. wie viele Takte innerhalb von vier Minuten gespielt werden sollen).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor"Wert: %1 HalbtneValue: %1 semitones SongEditorWert: %1% Value: %1% SongEditorMaster-Tonhhe master pitch SongEditor"Master-Lautstrke master volume SongEditor2Geschwindigkeit des Songs tempo of song SongEditorLineare Y-Achse Linear Y axisSpectrumAnalyzerControlDialog"Lineares SpektrumLinear spectrumSpectrumAnalyzerControlDialogKanalmodus Channel modeSpectrumAnalyzerControlsLineare Y-Achse Linear Y axisSpectrumAnalyzerControls"Lineares SpektrumLinear spectrumSpectrumAnalyzerControls16tel Note 16th note TempoSyncKnob32tel Note 32nd note TempoSyncKnobAchtelnote8th note TempoSyncKnob$ BenutzerdefiniertCustom  TempoSyncKnob(Benutzerdefiniert... Custom... TempoSyncKnobAcht Schlge Eight beats TempoSyncKnobHalbe Note Half note TempoSyncKnob*Keine SynchronisationNo Sync TempoSyncKnobViertelnote Quarter note TempoSyncKnob:Mit 16tel Note synchronisiertSynced to 16th Note TempoSyncKnob:Mit 32tel Note synchronisiertSynced to 32nd Note TempoSyncKnob:Mit Achtelnote synchronisiertSynced to 8th Note TempoSyncKnob@Mit acht Schlgen synchronisiertSynced to Eight Beats TempoSyncKnob<Mit halber Note synchronisiertSynced to Half Note TempoSyncKnob<Mit Viertelnote synchronisiertSynced to Quarter Note TempoSyncKnob<Mit ganzer Note synchronisiertSynced to Whole Note TempoSyncKnob*Tempo-Synchronisation Tempo Sync TempoSyncKnobGanze Note Whole note TempoSyncKnob\Klicken Sie hier, um die Zeiteinheit zu ndernclick to change time unitsTimeDisplayWidgetAbbrechenCancelTrackContainerPEs konnte kein Filter gefunden werden, um die Datei %1 zu importieren. Sie sollten diese Datei mit Hilfe anderer Software in ein von LMMS untersttzes Format umwandeln.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainerHDatei konnte nicht importiert werdenCouldn't import fileTrackContainerDDatei konnte nicht geffnet werdenCouldn't open fileTrackContainerLDatei %1 konnte nicht zum Lesen geffnet werden. Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeichnis besitzen und probieren es erneut!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer*Importiere FLP-Datei &Importing FLP-file...TrackContainer,Importiere MIDI-Datei &Importing MIDI-file...TrackContainerLade Projekt &Loading project...TrackContainerBitte warten &Please wait...TrackContainerFMische Ausgang von Oszillator 1 & 2Mix output of oscillator 1 & 2TripleOscillatorViewFMische Ausgang von Oszillator 2 & 3Mix output of oscillator 2 & 3TripleOscillatorView>Oszillator %1 Grob-Verstimmung:Osc %1 coarse detuning:TripleOscillatorViewJOszillator %1 Fein-Verstimmung links:Osc %1 fine detuning left:TripleOscillatorViewLOszillator %1 Fein-Verstimmung rechts:Osc %1 fine detuning right:TripleOscillatorView,Oszillator %1 Balance:Osc %1 panning:TripleOscillatorViewBOszillator %1 Phasenverschiebung:Osc %1 phase-offset:TripleOscillatorViewPOszillator %1 Stereo Phasenverschiebung:Osc %1 stereo phase-detuning:TripleOscillatorView2Oszillator %1 Lautstrke:Osc %1 volume:TripleOscillatorViewXSynchronisiere Oszillator 1 mit Oszillator 2*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewXSynchronisiere Oszillator 2 mit Oszillator 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorViewxMoog-hnliche Sgezahnwelle fr aktuellen Oszillator nutzen.0Use a moog-like saw-wave for current oscillator.TripleOscillatorView\Sgezahnwelle fr aktuellen Oszillator nutzen.&Use a saw-wave for current oscillator.TripleOscillatorViewVSinuswelle fr aktuellen Oszillator nutzen.'Use a sine-wave for current oscillator.TripleOscillatorView\Rechteckwelle fr aktuellen Oszillator nutzen.)Use a square-wave for current oscillator.TripleOscillatorViewZDreieckwelle fr aktuellen Oszillator nutzen.+Use a triangle-wave for current oscillator.TripleOscillatorView|Benutzerdefinierte Wellenform fr aktuellen Oszillator nutzen.3Use a user-defined waveform for current oscillator.TripleOscillatorViewAmplitudenmodulation benutzen, um Oszillator 2 mit Oszillator 1 zu modulierenFUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewAmplitudenmodulation benutzen, um Oszillator 3 mit Oszillator 2 zu modulierenFUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewhExponentielle Welle fr aktuellen Oszillator nutzen./Use an exponential wave for current oscillator.TripleOscillatorViewFrequenzmodulation benutzen, um Oszillator 2 mit Oszillator 1 zu modulierenFUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewFrequenzmodulation benutzen, um Oszillator 3 mit Oszillator 2 zu modulierenFUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewPhasenmodulation benutzen, um Oszillator 2 mit Oszillator 1 zu modulierenBUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewPhasenmodulation benutzen, um Oszillator 3 mit Oszillator 2 zu modulierenBUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorView`Weies Rauschen fr aktuellen Oszillator nutzen.'Use white-noise for current oscillator.TripleOscillatorViewMit diesem Regler knnen Sie die grobe Verstimmung von Oszillator %1 setzen. Sie knnen den Oszillator 12 Halbtne (1 Oktave) nach oben und unten verstimmen. Das ist ntzlich, wenn Sie einen Sound mit einem Akkord erstellen mchten.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewMit diesem Regler knnen Sie die Fein-Verstimmung von Oszillator %1 fr den linken Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist ntzlich, um fette Sounds zu erzeugen.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewMit diesem Regler knnen Sie die Fein-Verstimmung von Oszillator %1 fr den rechten Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist ntzlich, um fette Sounds zu erzeugen.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewRMit diesem Regler knnen Sie die Balance von Oszillator %1 setzen. Ein Wert von -100 heit 100% links und ein Wert von 100 verschiebt den Oszillator-Ausgang nach rechts.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewMit diesem Regler knnen Sie die Phasenverschiebung von Oszillator %1 setzen. Das heit, Sie knnen den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinuswelle haben und eine Phasenverschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteckwelle zu.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorView4Mit diesem Regler knnen Sie die Stereo Phasenverschiebung von Oszillator %1 setzen. Die Stereo Phasenverschiebung gibt die Differenz zwischen den Phasenverschiebungen zwischen dem linken und rechten Kanal an. Dies eignet sich gut, um grorumig-klingende Stereo-Klnge zu erzeugen.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorViewMit diesem Regler knnen Sie die Lautstrke von Oszillator %1 setzen. Wenn Sie einen Wert von 0 setzen, wird der Oszillator ausgeschaltet. Ansonsten knnen Sie ihn so laut hren, wie Sie es hier einstellen.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorViewCentcentsTripleOscillatorViewGraddegreesTripleOscillatorViewHalbtne semitonesTripleOscillatorView2Versionsnummer vermindernDecrement version numberVersionedSaveDialog,Versionsnummer erhhenIncrement version numberVersionedSaveDialog0 - VST Plugin Controller - VST plugin controlVestigeInstrumentView|Klicken Sie hier, um aktuell geladene VST-Presets auszuwhlen.>Click here to select presets that are currently loaded in VST.VestigeInstrumentViewKlicken Sie hier, um die grafische Oberflche (GUI) Ihres VST-Plugins anzuzeigen bzw. zu verstecken.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentView~Klicken Sie hier, um das VST-Plugin von LMMS aus fernzusteuern.8Click here, if you want to control VST-plugin from host.VestigeInstrumentViewKlicken Sie hier, um eine andere *.fxp, *.fxb-Preset-Datei fr das VST-Plugin zu laden.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VestigeInstrumentViewNKlicken Sie hier, um ein anderes VST-Plugin zu ffnen. Nachdem Sie auf diesen Knopf geklickt haben, erscheint ein Datei-ffnen-Dialog und Sie knnen Ihre Datei whlen.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentViewKlicken Sie hier, um das aktuelle VST-Plugin-Presetprogramm zu speichern.BClick here, if you want to save current VST-plugin preset program.VestigeInstrumentViewKlicken Sie hier, um zu einem anderen VST-Plugin-Presetprogramm zu wechseln.GClick here, if you want to switch to another VST-plugin preset program.VestigeInstrumentView>VST-Plugin von LMMS fernsteuern!Control VST-plugin from LMMS hostVestigeInstrumentView&DLL-Dateien (*.dll)DLL-files (*.dll)VestigeInstrumentView&EXE-Dateien (*.exe)EXE-files (*.exe)VestigeInstrumentViewNchstes (+)Next (+)VestigeInstrumentView.Kein VST-Plugin geladenNo VST-plugin loadedVestigeInstrumentView"VST-Plugin ffnenOpen VST-pluginVestigeInstrumentView0VST-Plugin-Preset ffnenOpen VST-plugin presetVestigeInstrumentView0Anderes VST-Plugin ladenOpen other VST-pluginVestigeInstrumentView PresetPresetVestigeInstrumentViewVorheriges (-) Previous (-)VestigeInstrumentView Preset speichern Save presetVestigeInstrumentView*GUI zeigen/verstecken Show/hide GUIVestigeInstrumentView,Alle Noten ausschaltenTurn off all notesVestigeInstrumentViewvon by VestigeInstrumentView`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />0       
VstEffectControlDialog|Klicken Sie hier, um aktuell geladene VST-Presets auszuwhlen.>Click here to select presets that are currently loaded in VST.VstEffectControlDialog~Klicken Sie hier, um das VST-Plugin von LMMS aus fernzusteuern.8Click here, if you want to control VST-plugin from host.VstEffectControlDialogKlicken Sie hier, um eine andere *.fxp, *.fxb-Preset-Datei fr das VST-Plugin zu laden.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VstEffectControlDialogKlicken Sie hier, um das aktuelle VST-Plugin-Presetprogramm zu speichern.BClick here, if you want to save current VST-plugin preset program.VstEffectControlDialogKlicken Sie hier, um zu einem anderen VST-Plugin-Presetprogramm zu wechseln.GClick here, if you want to switch to another VST-plugin preset program.VstEffectControlDialog>VST-Plugin von LMMS fernsteuern!Control VST-plugin from LMMS hostVstEffectControlDialogEffekt von: Effect by: VstEffectControlDialogNchstes (+)Next (+)VstEffectControlDialog0VST-Plugin-Preset ffnenOpen VST-plugin presetVstEffectControlDialogVorheriges (-) Previous (-)VstEffectControlDialog Preset speichern Save presetVstEffectControlDialog&Anzeigen/ausblenden Show/hideVstEffectControlDialog"" VstPlugin'' VstPlugin.FXB.FXB VstPlugin.FXP.FXP VstPlugin.fxb.fxb VstPlugin.fxp.fxp VstPlugin: Standard : default VstPluginHLaden des VST-Plugins fehlgeschlagenFailed loading VST plugin VstPluginLade PluginLoading plugin VstPluginPreset ffnen Open Preset VstPlugindBitte warten, whrend das VST-Plugin geladen wird &'Please wait while loading VST plugin... VstPlugin Preset speichern Save Preset VstPluginDas VST-Plugin %1 konnte aus irgend einem Grund nicht geladen werden.6The VST plugin %1 could not be loaded for some reason. VstPlugin>VST-Plugin-Preset (*.fxp *.fxb)Vst Plugin Preset (*.fxp *.fxb) VstPluginA-B MischungA-B MixWatsynInstrumentBA-B Mischung HllkurvenintensittA-B Mix envelope amountWatsynInstrumentHA-B Mischung HllkurvenanschwellzeitA-B Mix envelope attackWatsynInstrumentBA-B Mischung HllkurvenabfallzeitA-B Mix envelope decayWatsynInstrument@A-B Mischung HllkurvenhaltezeitA-B Mix envelope holdWatsynInstrument$A1-B2 berlagerungA1-B2 CrosstalkWatsynInstrument A2-A1 ModulationA2-A1 modulationWatsynInstrument B2-B1 ModulationB2-B1 modulationWatsynInstrument0Frequenzmultiplikator-A1Freq. multiplier A1WatsynInstrument0Frequenzmultiplikator-A2Freq. multiplier A2WatsynInstrument0Frequenzmultiplikator-B1Freq. multiplier B1WatsynInstrument0Frequenzmultiplikator-B2Freq. multiplier B2WatsynInstrument(Links-Verstimmung A1Left detune A1WatsynInstrument(Links-Verstimmung A2Left detune A2WatsynInstrument(Links-Verstimmung B1Left detune B1WatsynInstrument(Links-Verstimmung B2Left detune B2WatsynInstrumentBalance A1 Panning A1WatsynInstrumentBalance A2 Panning A2WatsynInstrumentBalance B1 Panning B1WatsynInstrumentBalance B2 Panning B2WatsynInstrument*Rechts-Verstimmung A1Right detune A1WatsynInstrument*Rechts-Verstimmung A2Right detune A2WatsynInstrument*Rechts-Verstimmung B1Right detune B1WatsynInstrument*Rechts-Verstimmung B2Right detune B2WatsynInstrument$Ausgewhlter GraphSelected graphWatsynInstrumentLautstrke A1 Volume A1WatsynInstrumentLautstrke A2 Volume A2WatsynInstrumentLautstrke B1 Volume B1WatsynInstrumentLautstrke B2 Volume B2WatsynInstrument2Klicken fr SgezahnwelleClick for saw wave WatsynView,Klicken fr SinuswelleClick for sine wave WatsynView2Klicken fr RechteckwelleClick for square wave WatsynView0Klicken fr DreieckwelleClick for triangle wave WatsynView.Klicken zum InvertierenClick to invert WatsynViewKlicken Sie hier, um eine Wellenform aus einer Sampledatei zu laden+Click to load a waveform from a sample file WatsynView2Klicken zum NormalisierenClick to normalize WatsynViewrKlicken Sie hier, um die Phase um +15 Grad zu verscheiben#Click to shift phase by +15 degrees WatsynViewrKlicken Sie hier, um die Phase um -15 Grad zu verscheiben#Click to shift phase by -15 degrees WatsynView&Klicken zum GlttenClick to smooth WatsynViewZeichnen Sie heier eigene Wellenformen, indem Sie die Maus ber den Graph ziehen.ADraw your own waveform here by dragging your mouse on this graph. WatsynViewInvertierenInvert WatsynView Wellenform laden Load waveform WatsynView6Mische Ausgang von A2 zu A1Mix output of A2 to A1 WatsynView6Mische Ausgang von B2 zu B1Mix output of B2 to B1 WatsynViewdAmplitude von A1 mit der Ausgabe von A2 modulieren*Modulate amplitude of A1 with output of A2 WatsynViewdAmplitude von B1 mit der Ausgabe von B2 modulieren*Modulate amplitude of B1 with output of B2 WatsynView\Phase von A1 mit der Ausgabe von A2 modulieren&Modulate phase of A1 with output of A2 WatsynView\Phase von B1 mit der Ausgabe von B2 modulieren&Modulate phase of B1 with output of B2 WatsynViewNormalisieren Normalize WatsynView,Nach links verschieben Phase left WatsynView.Nach rechts verschieben Phase right WatsynView0A1 und A2 ringmodulierenRing-modulate A1 and A2 WatsynView0B1 und B2 ringmodulierenRing-modulate B1 and B2 WatsynView,Oszilator A1 auswhlenSelect oscillator A1 WatsynView,Oszilator A2 auswhlenSelect oscillator A2 WatsynView,Oszilator B1 auswhlenSelect oscillator B1 WatsynView,Oszilator B2 auswhlenSelect oscillator B2 WatsynViewSinuswelle Sine wave WatsynViewGlttenSmooth WatsynViewRechteckwelle Square wave WatsynViewDreieckwelle Triangle wave WatsynViewBandbreite BandwidthZynAddSubFxInstrumentFM-VerstrkungFM GainZynAddSubFxInstrumentFilterfrequenzFilter FrequencyZynAddSubFxInstrumentFilterresonanzFilter ResonanceZynAddSubFxInstrumentVMIDI-Control-Change-Ereignisse weiterleiten"Forward MIDI Control Change EventsZynAddSubFxInstrumentPortamento PortamentoZynAddSubFxInstrument$ResonanzbandbreiteResonance BandwidthZynAddSubFxInstrument2Zentrale ResonanzfrequenzResonance Center FrequencyZynAddSubFxInstrumentBWBWZynAddSubFxViewBandbreite: Bandwidth:ZynAddSubFxViewKlicken Sie hier, um die grafische Oberflche von ZynAddSubFX anzuzeigen bzw. auszublenden.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewFM GAINFM GAINZynAddSubFxViewFM-Verstrkung:FM Gain:ZynAddSubFxViewFREQFREQZynAddSubFxViewFilterfrequenz:Filter Frequency:ZynAddSubFxViewFilterresonanz:Filter Resonance:ZynAddSubFxViewHMIDI-Control-nderungen weiterleitenForward MIDI Control ChangesZynAddSubFxViewPORTPORTZynAddSubFxViewPortamento: Portamento:ZynAddSubFxViewRESRESZynAddSubFxView RES BWRES BWZynAddSubFxView RES CFRES CFZynAddSubFxView&Resonanzbandbreite:Resonance bandwidth:ZynAddSubFxView4Zentrale Resonanzfrequenz:Resonance center frequency:ZynAddSubFxViewGUI anzeigenShow GUIZynAddSubFxViewVerstrkungAmplifyaudioFileProcessorSample-Ende End of sampleaudioFileProcessor&InterpolationsmodusInterpolation modeaudioFileProcessor LinearLinearaudioFileProcessor$Wiederholungsmodus Loop modeaudioFileProcessor$WiederholungspunktLoopback pointaudioFileProcessor KeinerNoneaudioFileProcessorSample umkehrenReverse sampleaudioFileProcessorSincSincaudioFileProcessorSample-AnfangStart of sampleaudioFileProcessorStotternStutteraudioFileProcessor4Automation-Spur hinzufgenAdd automation-trackbbEditor0Beat/Bassline hinzufgenAdd beat/basslinebbEditor&Schritte hinzufgen Add stepsbbEditor(Beat+Bassline EditorBeat+Bassline EditorbbEditorKlicken Sie hier, um den aktuelle Beat/Bassline abzuspielen. Der Beat/Bassline wird am Ende automatisch wiederholt.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorKlicken Sie hier, um das Abspielen des aktuellen Beats/Bassline zu stoppen (Leertaste).4Click here to stop playing of current beat/bassline.bbEditornAktuellen Beat/Bassline abspielen/pausieren (Leertaste)(Play/pause current beat/bassline (Space)bbEditor$Schritte entfernen Remove stepsbbEditortAbspielen des aktuellen Beats/Bassline stoppen (Leertaste).Stop playback of current beat/bassline (Space)bbEditorFarbe ndern Change color bbTCOViewName ndern Change name bbTCOView<Im Beat+Bassline-Editor ffnenOpen in Beat+Bassline-Editor bbTCOView>Farbe auf Standard zurcksetzenReset color to default bbTCOView"Name zurcksetzen Reset name bbTCOView Beat/Bassline %1Beat/Bassline %1bbTrackKlon von %1 Clone of %1bbTrackSample-Lnge Samplelength bitInvader4Klick fr eine Sinuswelle.Click for a sine-wave.bitInvaderView:Klick fr eine Sgezahnwelle.Click here for a saw-wave.bitInvaderView:Klick fr eine Rechteckwelle.Click here for a square-wave.bitInvaderView8Klick fr eine Dreieckwelle.Click here for a triangle-wave.bitInvaderViewZKlick fr eine benutzerdefinierte Wellenform.$Click here for a user-defined shape.bitInvaderView4Klick fr weies Rauschen.Click here for white-noise.bitInvaderView^Klicken Sie hier, um die Wellenform zu gltten.Click here to smooth waveform.bitInvaderViewZeichnen Sie eigene Wellenformen, indem Sie die Maus ber den Graph ziehen.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderViewInterpolation InterpolationbitInvaderViewNormalisieren NormalizebitInvaderViewSample-Lnge Sample LengthbitInvaderViewSgezahnwelleSaw wavebitInvaderViewSinuswelle Sine wavebitInvaderViewGlttenSmoothbitInvaderViewRechteckwelle Square wavebitInvaderViewDreieckwelle Triangle wavebitInvaderView0Benutzerdefinierte WelleUser defined wavebitInvaderViewWeies RauschenWhite noise wavebitInvaderView &Hilfe&Help captionMenu.Hilfe (nicht verfgbar)Help (not available) captionMenu ATTACKATTACKdynProcControlDialog^Klicken Sie hier, um den Wellengraph zu gltten*Click here to apply smoothing to wavegraphdynProcControlDialogKlicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu vermindern1Click here to decrease wavegraph amplitude by 1dBdynProcControlDialogKlicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu erhhen1Click here to increase wavegraph amplitude by 1dBdynProcControlDialogKlicken Sie hier, um den Wellengraph zum Standard zurckzusetzen1Click here to reset the wavegraph back to defaultdynProcControlDialog`Die Amplitude des Wellengraphs um 1dB vermindern#Decrease wavegraph amplitude by 1dBdynProcControlDialog INPUTINPUTdynProcControlDialogZDie Amplitude des Wellengraphs um 1dB erhhen#Increase wavegraph amplitude by 1dBdynProcControlDialog(Eingangsverstrkung: Input gain:dynProcControlDialog OUTPUTOUTPUTdynProcControlDialog&Ausgabeverstrkung: Output gain:dynProcControlDialog,Spitzen Anschwellzeit:Peak attack time:dynProcControlDialog*Spitzen Ausklingzeit:Peak release time:dynProcControlDialog|Basierend auf dem Durchschnitt beider Stereokanle verarbeiten4Process based on the average of both stereo channelsdynProcControlDialogrBasierend auf dem Maximum beider Stereokanle verarbeiten4Process based on the maximum of both stereo channelsdynProcControlDialogPJeden Stereokanal unabhngig verarbeiten)Process each stereo channel independentlydynProcControlDialogRELEASERELEASEdynProcControlDialog.Wellenform zurcksetzenReset waveformdynProcControlDialog$Wellenform glttenSmooth waveformdynProcControlDialog0Stereomodus DurchschnittStereomode AveragedynProcControlDialog&Stereomodus MaximumStereomode MaximumdynProcControlDialog.Stereomodus UnverknpftStereomode UnlinkeddynProcControlDialogAnschwellzeit Attack timedynProcControls&Eingangsverstrkung Input gaindynProcControls$Ausgabeverstrkung Output gaindynProcControlsAusklingzeit Release timedynProcControlsStereomodus Stereo modedynProcControls2Konnte Datei nicht ffnenCould not open fileexportProjectDialogDie Datei %1 konnte nicht zum Schreiben geffnet werden. Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeichnis, das diese Datei enthlt, besitzen und versuchen es erneut!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog FehlerErrorexportProjectDialogFehler beim Bestimmen des Datei-Enkoder-Gerts. Bitte whlen Sie ein anderes Ausgabeformat.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog6Projekt nach %1 exportierenExport project to %1exportProjectDialogRendere: %1%Rendering: %1%exportProjectDialogpBitte geben Sie einen neuen Wert zwischen %1 und %2 ein:+Please enter a new value between %1 and %2:fader GraphGraph graphModel KlickClickkickerInstrumentVerzerrungsendeDistortion EndkickerInstrument"VerzerrungsanfangDistortion StartkickerInstrumentEndfrequenz End frequencykickerInstrumentEnde bei Note End to notekickerInstrument"HllkurvenneigungEnvelope SlopekickerInstrumentFrequenzabfallFrequency SlopekickerInstrumentGainGainkickerInstrument LngeLengthkickerInstrumentRauschenNoisekickerInstrumentStartfrequenzStart frequencykickerInstrumentStarte bei NoteStart from notekickerInstrument Klick:Click:kickerInstrumentView Verzerrungsende:Distortion End:kickerInstrumentView$Verzerrungsanfang:Distortion Start:kickerInstrumentViewEndfrequenz:End frequency:kickerInstrumentView Hllkurvenlnge:Envelope Length:kickerInstrumentView$Hllkurvenneigung:Envelope Slope:kickerInstrumentViewFrequenzabfall:Frequency Slope:kickerInstrumentView Gain:Gain:kickerInstrumentViewRauschen:Noise:kickerInstrumentViewStartfrequenz:Start frequency:kickerInstrumentViewpBitte geben Sie einen neuen Wert zwischen %1 und %2 ein:+Please enter a new value between %1 and %2:knob|Bitte geben Sie einen Wert zwischen -96.0 dBV und 6.0 dBV ein:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob"Linear einstellen Set linearknob0Logarithmisch einstellenSet logarithmicknob AnalysewerkzeugeAnalysis ToolsladspaBrowserView$Verfgbare EffekteAvailable EffectsladspaBrowserViewWei nicht Don't knowladspaBrowserViewInstrumente InstrumentsladspaBrowserViewDieser Dialog zeigt Informationen zu allen LADSPA Plugins an, dieLMMS gefunden hat. Die Plugins werden in fnf Kategorien eingeteilt, basierend auf der Interpretation der Porttypen und Namen. Verfgbare Effekte sind die, die von LMMS benutzt werden knnen. Um in LMMS einen Effekt benutzen zu knnen, muss er vor allem ein Effekt sein, was bedeutet, dass er beides, Eingabe- und Ausgabekanle, haben muss. LMMS identifiziert Eingabekanle als einen Audioport, der in im Namen enthlt. Ausgabekanle werden durch die Buchstaben out identifizert. Des weiteren muss der Effekt die gleiche Anzahl an Ein- und Ausgngen besitzen und muss echtzeitfhig sein. Nicht verfgbare Effekte sind die, die als Effekt identifiziert wurden, aber entweder nicht die gleiche Anzahl an Ein- und Ausgabekanlen besizen oder nicht echtzeitfhig sind. Instrumente sind Plugins, fr die nur Ausgabekanle identifiziert wurden. Analysewerkzeuge sind Plugins, fr die nur Eingabekanle identifiziert wurden. Wei nicht sind Plugins, fr die kein Ein- oder Ausgabekanal identifiziert wurde. Doppelklicken auf eines der Plugins zeigt Informaitonen ber die Ports an.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserViewTyp:Type:ladspaBrowserView0Nicht verfgbare EffekteUnavailable EffectsladspaBrowserViewBeschreibung DescriptionladspaDescriptionPluginsPluginsladspaDescription AudioAudioladspaPortDialogSteuerungControlladspaPortDialogRichtung DirectionladspaPortDialogKommazahlFloatladspaPortDialogEingangInputladspaPortDialogGanzahlIntegerladspaPortDialogLogarithmisch LogarithmicladspaPortDialog(Min < Standard < MaxMin < Default < MaxladspaPortDialogNameNameladspaPortDialogAusgangOutputladspaPortDialog PortsPortsladspaPortDialogRateRateladspaPortDialogSR-abhngig SR DependentladspaPortDialogUmgeschaltetToggledladspaPortDialogTypTypeladspaPortDialogJaYesladspaPortDialog24db/Okt Filter24dB/oct Filter lb302SynthBetonungAccent lb302Synth StumpfDead lb302SynthVerzerrung Distortion lb302Synth SlideSlide lb302Synth Slide-Abfallzeit Slide Decay lb302Synth VCF-KennfrequenzVCF Cutoff Frequency lb302Synth0VCF-HllkurvenabfallzeitVCF Envelope Decay lb302Synth0VCF-HllkurvenintensittVCF Envelope Mod lb302SynthVCF-Resonanz VCF Resonance lb302SynthWellenformWaveform lb302Synth@Bandbegrenzte Moog-SgezahnwelleBandlimited moog saw wavelb302SynthView6Bandbegrenzte SgezahnwelleBandlimited saw wavelb302SynthView6Bandbegrenzte RechteckwelleBandlimited square wavelb302SynthView8Bandlimittierte DreieckwelleBandlimited triangle wavelb302SynthView4Klick fr eine Sinuswelle.Click for a sine-wave.lb302SynthViewFKlick fr eine Moog-hnliche Welle. Click here for a moog-like wave.lb302SynthView:Klick fr eine Sgezahnwelle.Click here for a saw-wave.lb302SynthViewRKlick fr eine abgerundete Rechteckwelle.0Click here for a square-wave with a rounded end.lb302SynthView:Klick fr eine Rechteckwelle.Click here for a square-wave.lb302SynthView8Klick fr eine Dreieckwelle.Click here for a triangle-wave.lb302SynthViewFKlick fr eine exponentielle-Welle.#Click here for an exponential wave.lb302SynthView`Klick fr eine bandbegrenzte Moog-Sgezahnwelle.)Click here for bandlimited moog saw wave.lb302SynthViewVKlick fr eine bandbegrenzte Sgezahnwelle.$Click here for bandlimited saw wave.lb302SynthViewVKlick fr eine bandbegrenzte Rechteckwelle.'Click here for bandlimited square wave.lb302SynthViewTKlick fr eine bandbegrenzte Dreieckwelle.)Click here for bandlimited triangle wave.lb302SynthView4Klick fr weies Rauschen.Click here for white-noise.lb302SynthViewKennfrequenz: Cutoff Freq:lb302SynthView DIST:DIST:lb302SynthView&Abfallzeit (decay):Decay:lb302SynthView,Hllkurven-Modulation:Env Mod:lb302SynthViewMoog-Welle Moog wavelb302SynthViewResonanz: Resonance:lb302SynthView2Abgerundete RechteckwelleRounded square wavelb302SynthViewSgezahnwelleSaw wavelb302SynthViewSinuswelle Sine wavelb302SynthView"Slide-Abfallzeit: Slide Decay:lb302SynthViewRechteckwelle Square wavelb302SynthViewDreieckwelle Triangle wavelb302SynthViewWeies RauschenWhite noise wavelb302SynthView24db/Okt Filter24dB/oct Filter lb303SynthBetonungAccent lb303Synth StumpfDead lb303SynthVerzerrung Distortion lb303Synth SlideSlide lb303Synth Slide-Abfallzeit Slide Decay lb303Synth VCF-KennfrequenzVCF Cutoff Frequency lb303Synth0VCF-HllkurvenabfallzeitVCF Envelope Decay lb303Synth0VCF-HllkurvenintensittVCF Envelope Mod lb303SynthVCF-Resonanz VCF Resonance lb303SynthWellenformWaveform lb303SynthFREQCUTlb303SynthViewKennfrequenz: Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthView DIST:DIST:lb303SynthView&Abfallzeit (decay):Decay:lb303SynthViewENV-MODENV MODlb303SynthView,Hllkurven-Modulation:Env Mod:lb303SynthViewRESRESlb303SynthViewResonanz: Resonance:lb303SynthView SLIDESLIDElb303SynthView"Slide-Abfallzeit: Slide Decay:lb303SynthView WELLEWAVElb303SynthViewWellenform:WAVE:lb303SynthViewADSRADSRmalletsInstrument AgogoAgogomalletsInstrument BeatsBeatsmalletsInstrumentGestrichenBowedmalletsInstrument ClumpClumpmalletsInstrumentCrossfade CrossfademalletsInstrumentGlasGlassmalletsInstrument HrteHardnessmalletsInstrumentLFO-Tiefe LFO DepthmalletsInstrument&LFO-Geschwindigkeit LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrument Fehlende Dateien Missing filesmalletsInstrumentModulator ModulatormalletsInstrumentBewegungMotionmalletsInstrumentPositionPositionmalletsInstrument DruckPressuremalletsInstrumentResoResomalletsInstrumentGeschwindigkeitSpeedmalletsInstrument WeiteSpreadmalletsInstrumentStick Mix Stick MixmalletsInstrument*Tibetanische Schssel Tibetan BowlmalletsInstrument Glocken in Rhre Tubular BellsmalletsInstrumentTuned Bar Tuned BarmalletsInstrumentTwo Fixed Two FixedmalletsInstrumentUniform Bar Uniform BarmalletsInstrumentVibraphon VibraphonemalletsInstrumentVibrato-Freq Vibrato FreqmalletsInstrumentVibrato Gain Vibrato GainmalletsInstrument Holz 1Wood1malletsInstrument Holz 2Wood2malletsInstrumentIhre Stk-Installation scheint unvollstndig zu sein. Bitte stellen Sie sicher, dass das volle Stk-Paket installiert ist!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR:ADSR:malletsInstrumentViewGestrichenBowedmalletsInstrumentViewCrossfade CrossfademalletsInstrumentViewCrossfade: Crossfade:malletsInstrumentView HrteHardnessmalletsInstrumentView Hrte: Hardness:malletsInstrumentViewInstrument InstrumentmalletsInstrumentViewLFO-Tiefe LFO DepthmalletsInstrumentViewLFO-Tiefe: LFO Depth:malletsInstrumentView&LFO-Geschwindigkeit LFO SpeedmalletsInstrumentView(LFO-Geschwindigkeit: LFO Speed:malletsInstrumentViewModulator ModulatormalletsInstrumentViewModulator: Modulator:malletsInstrumentViewBewegungMotionmalletsInstrumentViewBewegung:Motion:malletsInstrumentViewPositionPositionmalletsInstrumentViewPosition: Position:malletsInstrumentView DruckPressuremalletsInstrumentView Druck: Pressure:malletsInstrumentViewGeschwindigkeitSpeedmalletsInstrumentView Geschwindigkeit:Speed:malletsInstrumentView WeiteSpreadmalletsInstrumentView Weite:Spread:malletsInstrumentViewStick Mix Stick MixmalletsInstrumentViewStick Mix: Stick Mix:malletsInstrumentViewVib-FreqVib FreqmalletsInstrumentViewVib-Freq: Vib Freq:malletsInstrumentViewVib GainVib GainmalletsInstrumentViewVib Gain: Vib Gain:malletsInstrumentViewVibratoVibratomalletsInstrumentViewVibrato:Vibrato:malletsInstrumentView" Schlieen  Close manageVSTEffectView6 - VST Parameter Controller - VST parameter controlmanageVSTEffectViewAutomatisiert AutomatedmanageVSTEffectViewKlicken Sie hier, wenn Sie nur automatisierte Parameter anzeigen mchten.Flexibler Wavetable-Synthesizer"Customizable wavetable synthesizer pluginBrowser@Eingebettetes ZynAddSubFX-PluginEmbedded ZynAddSubFX pluginBrowser<Emulation des GameBoy (TM) APUEmulation of GameBoy (TM) APU pluginBrowserEmulation des MOS6581 und MOS8580 SID Chips. Dieser Chip wurde in Commodore 64 Computern genutzt.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserbFilter fr Import von FL Studio Projekten in LMMS1Filter for importing FL Studio projects into LMMS pluginBrowserdFilter zum importieren von Hydrogendateien in LMMS-Filter for importing Hydrogen files into LMMS pluginBrowser\Filter, um MIDI-Dateien in LMMS zu importieren)Filter for importing MIDI-files into LMMS pluginBrowser@GUS-kompatibles Patch-InstrumentGUS-compatible patch instrument pluginBrowserFGraphisches Spektrumanalyzer Plugin"Graphical spectrum analyzer plugin pluginBrowserRUnvollstndiger monophonischer TB303-Klon%Incomplete monophonic imitation tb303 pluginBrowser0LMMS-Portierung von sfxrLMMS port of sfxr pluginBrowserJInstallierte LADSPA-Plugins auflistenList installed LADSPA plugins pluginBrowserfMonstrser 3-Oszillator Synth mit Modulationsmatrix3Monstrous 3-oscillator synth with modulation matrix pluginBrowser@Wiedergabe von SoundFont-DateienPlayer for SoundFont files pluginBrowservPlugin zur Kontrolle von Knpfen mit Hilfe von Klangspitzen-Plugin for controlling knobs with sound peaks pluginBrowser`Plugin zur Erweiterung des Stereo-Klangeindrucks=Plugin for enhancing stereo separation of a stereo input file pluginBrowser`Plugin zur freien Manipulation der Stereoausgabe,Plugin for freely manipulating stereo output pluginBrowserEinfacher Sampler mit verschiedenen Einstellungen zum Benutzen von Samples (z.B. Trommeln) in einer InstrumentenspurZSimple sampler with various settings for using samples (e.g. drums) in an instrument-track pluginBrowserDrei mchtige Oszillatoren, die Sie auf mehrere Weisen modulieren knnen;Three powerful oscillators you can modulate in several ways pluginBrowserzGegenstnde, die nach etwas klingen, wenn man drauf rumklopptTuneful things to bang on pluginBrowservVST-Host zum Benutzen von VST(i)-Plugins innerhalb von LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser@Vielseitiger Trommel-SynthesizerVersatile drum synthesizer pluginBrowser@Modellierung schwingender SaitenVibrating string modeler pluginBrowser$keine Beschreibungno description pluginBrowserpEin Plugin, um Dynamik auf Flexible Weise zu verarbeiten0plugin for processing dynamics in a flexible way pluginBrowserzPlugin, um beliebige LADSPA-Effekte in LMMS nutzen zu knnen.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowserhPlugin um beliebige VST-Effekte in LMMS zu benutzen.3plugin for using arbitrary VST effects inside LMMS. pluginBrowser.Plugin fr Wellenformenplugin for waveshaping pluginBrowser &Fett&Bold projectNotes&Farbe... &Color... projectNotes&Kopieren&Copy projectNotes&Kursiv&Italic projectNotes&Blocksatz&Justify projectNotes &Links&Left projectNotes&Einfgen&Paste projectNotesWiede&rholen&Redo projectNotes&Rechts&Right projectNotes&Unterstrichen &Underline projectNotes&Rckgngig&Undo projectNotesZ&entriertC&enter projectNotes Strg+FCtrl+B projectNotes Strg+CCtrl+C projectNotes Strg+ZCtrl+E projectNotes Strg+KCtrl+I projectNotes Strg+JCtrl+J projectNotes Strg+LCtrl+L projectNotes Strg+RCtrl+R projectNotes Strg+UCtrl+U projectNotes Strg+VCtrl+V projectNotes Strg+XCtrl+X projectNotes Strg+YCtrl+Y projectNotes Strg+ZCtrl+Z projectNotesA&usschneidenCu&t projectNotesBearbeiten Edit Actions projectNotesFormatierungFormat Actions projectNotesProjekt-Notizen Project notes projectNotesXSchreiben Sie hier Ihre Projekt-Notizen auf.!Put down your project notes here. projectNotesUmbenennen... Rename... renameDialog&AUDIO-SCHNITTSTELLEAUDIO INTERFACE setupDialog&Artwork-VerzeichnisArtwork directory setupDialog&Audio-EinstellungenAudio settings setupDialogPUFFERGRSSE BUFFER SIZE setupDialogHintergrundbildBackground artwork setupDialogAbbrechenCancel setupDialogRFL Studio Installationsverzeichnis whlen'Choose FL Studio installation directory setupDialogPWhlen Sie Ihr LADSPA-Plugin-VerzeichnisChoose LADSPA plugin directory setupDialog<LMMS-Arbeitsverzeichnis whlenChoose LMMS working directory setupDialogLWhlen Sie Ihr STK-RawWave-VerzeichnisChoose STK rawwave directory setupDialog4Artwork-Verzeichnis whlenChoose artwork-theme directory setupDialog,Hintergrundbild whlenChoose background artwork setupDialog2Standard-Soundfont whlenChoose default SoundFont setupDialogLWhlen Sie Ihre VST-Plugin-Verzeichnis Choose your VST-plugin directory setupDialog(Kompakte Spur-KnpfeCompact track buttons setupDialogRProjektdateien standardmig komprimieren"Compress project files per default setupDialog0Standard SoundFont-DateiDefault Soundfont File setupDialog4Lautstrke in dBV anzeigenDisplay volume as dBV  setupDialogDAutomatisches Speichern aktivierenEnable auto save feature setupDialogTNotenbeschriftung in Piano-Roll aktivieren Enable note labels in piano roll setupDialog&Tooltips aktivierenEnable tooltips setupDialogBWellenform standardmig anzeigen"Enable waveform display by default setupDialogDFL Studio Installationsverzeichnis FL Studio installation directory setupDialog0Frames: %1 Latenz: %2 msFrames: %1 Latency: %2 ms setupDialog0Allgemeine EinstellungenGeneral settings setupDialog>HQ-Modus fr Ausgabe-AudiogertHQ-mode for output audio-device setupDialogFHier knnen Sie Ihre bevorzugte MIDI-Schnittstelle auswhlen. Abhngig von der Konfiguration Ihres Systems whrend der Compilierung knnen Sie zwischen ALSA, OSS und mehr whlen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewhlte MIDI-Schnittstelle einzurichten.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogVHier knnen Sie Ihre bevorzugte Audio-Schnittstelle auswhlen. Abhngig von der Konfiguration Ihres Systems whrend der Compilierung knnen Sie zwischen ALSA, JACK, OSS und mehr whlen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewhlte Audio-Schnittstelle einzurichten.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialogTHier knnen Sie die interne Puffergre einstellen, die von LMMS genutzt wird. Kleinere Werte machen sich in einer geringeren Latenz bemerkbar, knnen aber auch zu unbrauchbarem Sound oder schlechter Performance fhren, vor allem auf lteren Computern oder Systemen mit einem Nicht-Echtzeit-Kernel.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog$LADSPA-PluginpfadeLADSPA plugin paths setupDialog.LMMS-ArbeitsverzeichnisLMMS working directory setupDialog$MIDI-SCHNITTSTELLEMIDI INTERFACE setupDialog$MIDI-Einstellungen MIDI settings setupDialogVERSCHIEDENESMISC setupDialogOKOK setupDialog@Instrumente im Ein-Fenster-Modus One instrument track window mode setupDialog PfadePaths setupDialog2Performance-EinstellungenPerformance settings setupDialogBitte beachten Sie, dass die meisten nderungen erst wirksam werden, nachdem Sie LMMS neugestartet haben!GPlease note that most changes won't take effect until you restart LMMS! setupDialog:Auf Standardwert zurcksetzenReset to default-value setupDialogLMMS neustarten Restart LMMS setupDialog.STK RawWave-VerzeichnisSTK rawwave directory setupDialog(Einrichtung von LMMS Setup LMMS setupDialogbWiedergabe-Courser im AudioFileProcessor anzeigen*Show playback cursor in AudioFileProcessor setupDialogXMeldung nach Schlieen dieses Dialogs zeigen,Show restart warning after changing settings setupDialog>Weiches Scrollen im Song-EditorSmooth scroll in Song Editor setupDialogfVST Plugins mit der Host-Wiedergabe synchronisieren!Sync VST plugins to host playback setupDialog4UI-Effekte vs. PerformanceUI effects vs. performance setupDialog,VST-Plugin-VerzeichnisVST-plugin directory setupDialogPALSA (Advanced Linux Sound Architecture)(ALSA (Advanced Linux Sound Architecture) setupWidgetbALSA Raw-MIDI (Advanced Linux Sound Architecture)1ALSA Raw-MIDI (Advanced Linux Sound Architecture) setupWidgetdALSA-Sequencer (Advanced Linux Sound Architecture)2ALSA-Sequencer (Advanced Linux Sound Architecture) setupWidget@Dummy (Keine MIDI-Untersttzung)Dummy (no MIDI support) setupWidget4Dummy (Keine Soundausgabe)Dummy (no sound output) setupWidget@JACK (JACK Audio Connection Kit) JACK (JACK Audio Connection Kit) setupWidget.OSS (Open Sound System)OSS (Open Sound System) setupWidget@OSS Raw-MIDI (Open Sound System) OSS Raw-MIDI (Open Sound System) setupWidgetPortAudio PortAudio setupWidget<PulseAudio (Schlechte Latenz!)PulseAudio (bad latency!) setupWidget<SDL (Simple DirectMedia Layer)SDL (Simple DirectMedia Layer) setupWidgetWinMM MIDI WinMM MIDI setupWidgetBankBank sf2Instrument ChorusChorus sf2InstrumentChorus/Tiefe Chorus Depth sf2InstrumentChorus/Strke Chorus Level sf2InstrumentChorus/Anzahl Chorus Lines sf2Instrument,Chorus/Geschwindigkeit Chorus Speed sf2InstrumentGainGain sf2Instrument PatchPatch sf2InstrumentHallReverb sf2InstrumentHall/DmpfungReverb Damping sf2InstrumentHall/Strke Reverb Level sf2InstrumentHall/RaumgreReverb Roomsize sf2InstrumentHall/Weite Reverb Width sf2InstrumentRChorus-Effekt anwenden (wenn untersttzt)Apply chorus (if supported)sf2InstrumentView@Hall anwenden (wenn untersttzt)Apply reverb (if supported)sf2InstrumentViewPatch whlenChoose the patchsf2InstrumentViewChorus/Tiefe: Chorus Depth:sf2InstrumentViewChorus/Strke: Chorus Level:sf2InstrumentViewChorus/Anzahl: Chorus Lines:sf2InstrumentView.Chorus/Geschwindigkeit: Chorus Speed:sf2InstrumentViewhKlicken Sie hier, um eine andere SF2-Datei zu ffnen#Click here to open another SF2 filesf2InstrumentViewGainGainsf2InstrumentView,SoundFont-Datei ffnenOpen SoundFont filesf2InstrumentViewDEine andere SoundFont-Datei ffnenOpen other SoundFont filesf2InstrumentViewHall/Dmpfung:Reverb Damping:sf2InstrumentViewReverb/Strke: Reverb Level:sf2InstrumentViewHall/Raumgre:Reverb Roomsize:sf2InstrumentViewHall/Weite: Reverb Width:sf2InstrumentView4SoundFont2-Dateien (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewDieser Knopf aktiviert den Chorus-Effekt. Das ist ntzlich fr Echo-Effekte, funktioniert jedoch nur mit Dateien, die dies untersttzen.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewDieser Knopf aktiviert den Hall-Effekt, welcher jedoch nur mit Dateien funktioniert, die dies untersttzen.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewWellenform Wave FormsfxrInstrumentChipmodell Chip model sidInstrumentKennfrequenzCutoff sidInstrumentFiltertyp Filter type sidInstrumentResonanz Resonance sidInstrument Stimme 3 lautlos Voice 3 off sidInstrumentLautstrkeVolume sidInstrumentAnschwellzeit gibt an, wie schnell die Ausgabe von Stimme %1 von Null zur Spitzenamplitude anschwellt.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentView.Anschwellzeit (attack):Attack:sidInstrumentViewBandpass-FilterBand-Pass filter sidInstrumentView Grob:Coarse:sidInstrumentViewKennfrequenz:Cutoff frequency:sidInstrumentViewAbfallzeit gibt an, wie schnell die Ausgabe von der Spitzenamplitude bis zum ausgewhlten Dauerpegel fllt.iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentView&Abfallzeit (decay):Decay:sidInstrumentViewGefiltertFilteredsidInstrumentViewHochpass-FilterHigh-Pass filter sidInstrumentViewTiefpass-FilterLow-Pass filter sidInstrumentViewMOS6581 SID  MOS6581 SID sidInstrumentViewMOS8580 SID  MOS8580 SID sidInstrumentViewRauschenNoisesidInstrumentViewDie Ausgabe von Stimme %1 wird solange bei dem ausgewhlten Dauerpegel verbleiben, wie die Note gehalten wird.]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentViewPuls-Signal Pulse WavesidInstrumentViewPulsweite: Pulse Width:sidInstrumentView.Ausklingzeit (release):Release:sidInstrumentViewResonanz: Resonance:sidInstrumentViewRingmodulationRing-ModsidInstrumentViewRingmodus ersetzt die Dreieck-Wellenfrom-Ausgabe von Oszillator %1 mit einer ringmodulierten Kombination der Oszillatoren %1 und %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentViewSgezahnwelleSawToothsidInstrumentView*Dauerpegel (sustain):Sustain:sidInstrumentViewSynchronSyncsidInstrumentViewSync synchronisiert die Grundfrequenz von Oszillator %1 mit der Grundfrequenz von Oszillator %2, was einen Hard Sync Effekt hervorruft.Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentViewTestTestsidInstrumentViewTest, wenn aktiviert, wird Oszillator %1 zurckgesetzt und auf Null gesperrt, bis Test ausgeschaltet wird.PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewDie Grob-Verstimmung ermglicht es die Stimme %1 um eine Oktave nach oben oder unten zu verstimmen.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewzDie Pulsweitenauflsung ermglicht es die Weite gleitend, ohne erkennbare Schritte zu ndern. Die Puls-Wellenform von Oszillator %1 muss ausgewhlt werden, um eine hrbaren Effekt zu haben.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentViewDie Ausgabe von Stimme %1 wird vom Dauerpegel mit der ausgewhlten Ausklingzeit auf Null abfallen.jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentViewDreieckwelle Triangle WavesidInstrumentView Stimme 3 lautlos Voice3 Off sidInstrumentViewLautstrke:Volume:sidInstrumentViewvWenn gefilter an ist, wird Stimme %1 durch den Filter verarbeitet. Wenn gefiltert aus ist, wird Stimme %1 direckt an die Ausgabe weitergeleitet und der Filter hat keine Auswirkung darauf.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentViewAlle DateitypenAll file typessongLeeres Projekt Empty projectsong$FL Studio ProjekteFL Studio projectssong"Hydrogen-ProjekteHydrogen projectssong"Datei importieren Import filesongMIDI-DateienMIDI sequencessongMaster-Tonhhe Master pitchsong"Master-Lautstrke Master volumesong4Projekt NICHT gespeichert.Project NOT saved.song&Projekt gespeichert Project savedsongWhlen Sie einen Ordner zum schreiben der exportierten Spuren aus &/Select directory for writing exported tracks...songDDatei fr Projekt-Export whlen...!Select file for project-export...song TempoTemposongFDas Projekt %1 ist nun gespeichert.The project %1 is now saved.songNDas Projekt %1 wurde nicht gespeichert!The project %1 was not saved!songDIeses Projekt ist leer, weshalb das Exportieren keinen Sinn macht. Bitte erstellen Sie erst ein paar Eintrge im Song-Editor!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songunbenanntuntitledsong WEITEWIDEstereoEnhancerControlDialog Weite:Width:stereoEnhancerControlDialog WeiteWidthstereoEnhancerControls8Links-nach-links Lautstrke:Left to Left Vol:stereoMatrixControlDialog:Links-nach-rechts Lautstrke:Left to Right Vol:stereoMatrixControlDialog:Rechts-nach-links Lautstrke:Right to Left Vol:stereoMatrixControlDialog<Rechts-nach-rechts Lautstrke:Right to Right Vol:stereoMatrixControlDialog Links-nach-links Left to LeftstereoMatrixControls"Links-nach-rechts Left to RightstereoMatrixControls"Rechts-nach-links Right to LeftstereoMatrixControls$Rechts-nach-rechtsRight to RightstereoMatrixControls(Einstellungen fr %1Settings for %1 tabWidgetBNach Stop zum Anfang zurckkehrenAfter stopping go back to begintimeLinenNach Stop zur Position zurckkehren, an der es los ging?After stopping go back to position at which playing was startedtimeLine<Nach Stop Position beibehaltenAfter stopping keep positiontimeLine\Automatisches Scrollen aktivieren/deaktivierenEnable/disable auto-scrollingtimeLineFLoop-Punkte aktivieren/deaktivierenEnable/disable loop-pointstimeLineTippHinttimeLineHalten Sie <Umschalt>, um den Anfangs-Loop-Punkt zu verschieben; Drcken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren.XHold to move the begin loop point; Press to disable magnetic loop points.timeLine~Drcken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren.-Press to disable magnetic loop points.timeLine StummMutedtrackSoloSolotrack StummMutedtrackContentObject.%1:%2 (%3:%4 bis %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectViewKopierenCopytrackContentObjectViewAktuelle LngeCurrent lengthtrackContentObjectView"Aktuelle PositionCurrent positiontrackContentObjectViewAusschneidenCuttrackContentObjectView8Lschen (mittlere Maustaste)Delete (middle mousebutton)trackContentObjectViewTippHinttrackContentObjectViewTStumm/Laut schalten (<Strg> + Mittelklick)#Mute/unmute ( + middle click)trackContentObjectViewEinfgenPastetrackContentObjectViewl<Strg> drcken und ziehen, um eine Kopie zu erstellen.%Press and drag to make a copy.trackContentObjectViewXDrcken Sie <Strg> fr freie Grennderung.Press for free resizing.trackContentObjectView.Aktionen fr diese SpurActions for this tracktrackOperationsWidget"Diese Spur leerenClear this tracktrackOperationsWidget"Diese Spur klonenClone this tracktrackOperationsWidget StummMutetrackOperationsWidget0Diese Spur stummschaltenMute this tracktrackOperationsWidgetDrcken Sie <Strg> whrend des Klicks auf den Verschiebe-Griff, um eine neue Klicken und Ziehen-Aktion zu beginnen.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget(Diese Spur entfernenRemove this tracktrackOperationsWidgetSoloSolotrackOperationsWidget4Alle Aufnahmen ausschaltenTurn all recording offtrackOperationsWidget4Alle Aufnahmen einschaltenTurn all recording ontrackOperationsWidgetHLaden des VST-Plugins fehlgeschlagenFailed loading VST-pluginvestigeInstrumentLade PluginLoading pluginvestigeInstrumentdBitte warten, whrend das VST-Plugin geladen wird &'Please wait while loading VST-plugin...vestigeInstrumentZDas VST-Plugin %1 konnte aus irgendeinem Grund nicht geladen werden. Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitte einen LMMS-Entwickler!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentVerstimmung %1 Detune %1vibedUnschrfe %1 Fuzziness %1 vibedImpuls %1 Impulse %1vibedLnge %1 Length %1vibedOktave %1 Octave %1vibedBalance %1Pan %1vibed Zupf-Position %1Pick %1 positionvibed(Abnehmer-Position %1Pickup %1 positionvibedSeite %1 HrteString %1 stiffnessvibed&Seite %1 LautstrkeString %1 volumevibedtHier klicken, um die Wellenform zu aktivieren/deaktiveren.&Click here to enable/disable waveform. vibedViewbHier klicken, um die Wellenform zu normalisieren.!Click here to normalize waveform. vibedView^Klicken Sie hier, um die Wellenform zu gltten.Click here to smooth waveform. vibedViewVerstimmung:Detune: vibedView*Wellenform aktivierenEnable waveform vibedViewUnschrfe: Fuzziness: vibedViewImpuls-EditorImpulse Editor vibedView2Impuls oder GrundstellungImpulse or initial state vibedView Lnge:Length: vibedViewNormalisieren Normalize vibedView OkatveOctave vibedViewBalance:Pan: vibedViewZupf-Position:Pick position: vibedView$Abnehmer-Position:Pickup position: vibedViewSgezahnwelleSaw wave vibedViewSinuswelle Sine wave vibedViewGlttenSmooth vibedViewRechteckwelle Square wave vibedView SaiteString vibedView Hrte der Saite:String stiffness: vibedViewBMit dem Imp-Knopf legen Sie fest, ob die Wellenform in diesem Graph als Impuls zum Anzupfen der Saite oder als Grundstellung fr die Saite genutzt werden soll.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedView Der P-Regler bestimmt die Position, an der die Saite angezupft wird. Je kleiner die Einstellung, desto nher wird am Steg gezupft.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewVDer PU-Regler bestimmt die Position, an der die Schwingungen an der gewhlten Saite abgenommen werden. Je kleiner die Einstellung, desto nher ist der Abnehmer am Steg.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewTDer S-Regler setzt die Hrte der gewhlten Saite. Die Hrte der Saite beeinflusst deren Ausklang-Dauer. Je kleiner die Einstellung, desto lnger klingt die Saite aus.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewpDer V-Regler setzt die Lautstrke der gewhlten Saite.4The 'V' knob sets the volume of the selected string. vibedViewvDer Verstimmungs-Regler verndert die Tonhhe der gewhlten Saite. Einstellungen kleiner als 0 lassen die Saite flacher klingen, whrend Werte ber 0 zu einem eher scharfen Klang fhren.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewDDer Lnge-Regler bestimmt die Lnge der gewhlten Saite. Lngere Saiten klingen lnger und klingen heller, wobei sie gleichzeitig auch mehr CPU-Leistung fressen.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedView Mit dem Oktaven-Whler kann der Oktavenversatz gegenber der Note verndert werden. So meint beispielsweise eine Einstellung von -2, dass die Saite zwei Oktaven unterhalb des Grundtons (F) schwingen wird und 6 dementsprechend 6 Oktaven ber dem Grundton.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewDer Balance-Regler bestimmt den Ort der gewhlten Saite im Stereo-Raum.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewDer Unschrfe-Regler fgt dem Klang der Saite etwas Fuzz hinzu, welcher hauptschlich whrend des Anschlages zum Tragen kommt, wenngleich er auch genutzt werden kann, um den Klang etwas metallischer zu gestalten.The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewDer Saiten-Whler bestimmt die derzeit bearbeitete Saite. Ein Vibed-Instrument kann aus bis zu neun voneinander unabhngig schwingenden Saiten bestehen. Die LED in der Ecke rechts unterhalb der Wellenform gibt an, ob die gewhlte Saite aktiv ist.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewDer Wellenform-Editor ermglicht die Kontrolle ber die Grundstellung oder den Impuls, der genutzt wird, um die Saite zum Schwingen zu bringen. Die Knpfe rechts des Graphes initialisieren die Wellenform mit dem gewnschten Typ. Der ?-Knopf lsst Sie eine Wellenform aus einer Datei laden - allerdings werden nur die ersten 128 Samples geladen. Die Wellenform kann ebenfalls in dem Graph gezeichnet werden. Der S-Knopf glttet die Wellenform. Der N-Knopf normalisiert die Wellenform.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedViewDreieckwelle Triangle wave vibedView\Sgezahnwelle fr aktuellen Oszillator nutzen.&Use a saw-wave for current oscillator. vibedViewVSinuswelle fr aktuellen Oszillator nutzen.'Use a sine-wave for current oscillator. vibedView\Rechteckwelle fr aktuellen Oszillator nutzen.)Use a square-wave for current oscillator. vibedViewZDreieckwelle fr aktuellen Oszillator nutzen.+Use a triangle-wave for current oscillator. vibedView|Benutzerdefinierte Wellenform fr aktuellen Oszillator nutzen.3Use a user-defined waveform for current oscillator. vibedView`Weies Rauschen fr aktuellen Oszillator nutzen.'Use white-noise for current oscillator. vibedView0Benutzerdefinierte WelleUser defined wave vibedView2Vibed modelliert bis zu 9 unabhngige schwingende Saiten. Der Saiten-Whler ermglicht die Wahl der gerade aktiven Saite. Der Imp-Knopf bestimmt, ob der Graph einen Impuls oder die Grundstellung der Saite reprsentiert. Der Oktaven-Whler gibt den Oktavenversatz der Saite gegenber dem Grundton an. Der Graph ermglicht die Kontrolle ber die Grundstellung der Saite oder den Impuls, der zum Anzupfen der Saite genutzt wird. Der V-Regler bestimmt die Lautstrke. Mit dem S-Regler wird die Hrte der Saite eingestellt. Der P-Regler beeinflusst den Ort, an dem die Saite angezupft wird, whrend der PU-Regler die Position des Abnehmers bestimmt. Balance und Verstimmung bedrfen hoffentlich keiner Erklrung. Der Unschrfe-Regler fgt dem Klang der Saite etwas Fuzz hinzu. Der Lnge-Regler bestimmt die Lnge der Saite. Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewLautstrke:Volume: vibedViewWeies RauschenWhite noise wave vibedView*Klick zur AktivierungClick to enablevisualizationWidget~klicken, um Visualisierung des Masterausgangs an-/auszuschalten6click to enable/disable visualization of master-outputvisualizationWidget.Stimme %1 AnschwellzeitVoice %1 attack voiceObject4Stimme %1 Grob-VerstimmungVoice %1 coarse detuning voiceObject(Stimme %1 AbfallzeitVoice %1 decay voiceObject&Stimme %1 gefiltertVoice %1 filtered voiceObject&Stimme %1 PulsweiteVoice %1 pulse width voiceObject"Stimme %1 ReleaseVoice %1 release voiceObject0Stimme %1 RingmodulationVoice %1 ring modulate voiceObject(Stimme %1 HaltepegelVoice %1 sustain voiceObjectStimme %1 Sync Voice %1 sync voiceObjectStimme %1 Test Voice %1 test voiceObject(Stimme %1 WellenformVoice %1 wave shape voiceObject^Klicken Sie hier, um den Wellengraph zu gltten*Click here to apply smoothing to wavegraphwaveShaperControlDialogKlicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu vermindern1Click here to decrease wavegraph amplitude by 1dBwaveShaperControlDialogKlicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu erhhen1Click here to increase wavegraph amplitude by 1dBwaveShaperControlDialogKlicken Sie hier, um den Wellengraph zum Standard zurckzusetzen1Click here to reset the wavegraph back to defaultwaveShaperControlDialog"Eingang begrenzen Clip inputwaveShaperControlDialog@Eingangssignal auf 0dB begrenzenClip input signal to 0dBwaveShaperControlDialog`Die Amplitude des Wellengraphs um 1dB vermindernDecrease graph amplitude by 1dBwaveShaperControlDialog INPUTINPUTwaveShaperControlDialogZDie Amplitude des Wellengraphs um 1dB erhhenIncrease graph amplitude by 1dBwaveShaperControlDialog(Eingangsverstrkung: Input gain:waveShaperControlDialog OUTPUTOUTPUTwaveShaperControlDialog&Ausgabeverstrkung: Output gain:waveShaperControlDialog.Wellenform zurcksetzenReset waveformwaveShaperControlDialog$Wellenform glttenSmooth waveformwaveShaperControlDialog&Eingangsverstrkung Input gainwaveShaperControls$Ausgabeverstrkung Output gainwaveShaperControlslmms-1.1.3/data/locale/de.ts000066400000000000000000012065521247673406200156220ustar00rootroot00000000000000 AboutDialog About LMMS Über LMMS Version %1 (%2/%3, Qt %4, %5) Version %1 (%2/%3, Qt %4, %5) About Über LMMS - easy music production for everyone LMMS - Musikproduktion für jedermann Authors Autoren Translation Übersetzung Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! Deutsche Übersetzung von Tobias Doerffel und Daniel Winzen. Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder eine bereits existierende Übersetzung verbessern möchten, können Sie uns gerne helfen! Kontaktieren Sie einfach den Betreiber! License Lizenz Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2014, LMMS-Entwickler LMMS LMMS <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> Involved Beteiligt Contributors ordered by number of commits: Mitwirkende sortiert nach der Anzahl an Einreichungen: AmplifierControlDialog VOL VOL Volume: Lautstärke: PAN PAN Panning: Balance: LEFT LINKS Left gain: Linke Verstärkung: RIGHT RECHTS Right gain: Rechte Verstärkung: AmplifierControls Volume Lautstärke Panning Balance Left gain Linke Verstärkung Right gain Rechte Verstärkung AudioAlsa::setupWidget DEVICE GERÄT CHANNELS KANÄLE AudioFileProcessorView Open other sample Anderes Sample öffnen Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Klicken Sie hier, um eine andere Audio-Datei zu öffnen. Danach erscheint ein Dialog, in dem Sie Ihre Datei wählen können. Einstellungen wie Wiederhol-Modus, Start- und Endpunkt sowie Verstärkung werden nicht zurückgesetzt, weshalb die Datei möglicherweise nicht wie das Original klingt. Reverse sample Sample umkehren If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Wenn Sie diesen Knopf aktivieren, wird das gesamte Sample umgekehrt. Das kann nützlich für coole Effekte sein, wie z.B. eine umgekehrte Crash. Amplify: Verstärkung: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Mit diesem Regler können Sie die Verstärkungsrate festlegen. Wenn Sie einen Wert von 100% setzen, wird das Sample nicht geändert. Ansonsten wird es hoch oder runter verstärkt (Ihre Audio-Datei wird dabei nicht verändert!) Startpoint: Startpunkt: Endpoint: Endpunkt: Continue sample playback across notes Samplewiedergabe über Noten fortsetzen Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Wenn Sie diese Option aktivieren, wird das Sample über verschiedene Noten weitergespielt. Wenn Sie die Tonhöhe ändern oder die Note endet, bevor das Ende des Samples erreicht ist, dann fängt die nächste Note da an, wo aufgehört wurde. Um die Wiedergabe an den Anfang des Samples zurückzusetzen, fügen Sie eine Note am unteren Ende des Keyboards ein (< 20Hz) Disable loop Wiederholung deaktivieren This button disables looping. The sample plays only once from start to end. Dieser Regler deaktiviert Wiederholung. Das Sample wird nur einmal vom Anfang bis zum Ende wiedergegeben . Enable loop Wiederholung aktivieren This button enables forwards-looping. The sample loops between the end point and the loop point. Dieser Knopf aktiviert Vorwärts-Wiederholung. Das Sample wird zwischen dem Endpunkt und dem Loop-Punkt wiederholt. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. Dieser Knopf aktiviert Ping-Pong-Wiederholung. Das Sample wird zwischen dem Endpunkt und dem Loop-Punkt rückwärts und vorwärts wiederholt. With this knob you can set the point where AudioFileProcessor should begin playing your sample. Mit diesem Regler können Sie festlegen, wo AudioFileProcessor anfangen soll, Ihr Sample zu spielen. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Mit diesem Regler können Sie festlegen, wo AudioFileProcessor aufhören soll, Ihr Sample zu spielen. Loopback point: Wiederholungspunkt: With this knob you can set the point where the loop starts. Mit diesem Regler können Sie festlegen, wo die Wiederholung beginnt. AudioFileProcessorWaveView Sample length: Samplelänge: AudioJack JACK client restarted JACK-Client neugestartet LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS wurde aus irgendeinem Grund von JACK verbannt. Aus diesem Grund wurde das JACK-Backend von LMMS neu gestartet. Sie müssen manuelle Verbindungen erneut vornehmen. JACK server down JACK-Server nicht erreichbar The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Der JACK-Server scheint heruntergefahren worden zu sein und es war nicht möglich, eine neue Instanz zu starten. LMMS ist daher nicht in der Lage, fortzufahren. Sie sollten Ihr Projekt speichern und JACK und LMMS neustarten. CLIENT-NAME CLIENT-NAME CHANNELS KANÄLE AudioOss::setupWidget DEVICE GERÄT CHANNELS KANÄLE AudioPortAudio::setupWidget BACKEND BACKEND DEVICE GERÄT AudioPulseAudio::setupWidget DEVICE GERÄT CHANNELS KANÄLE AudioSdl::setupWidget DEVICE GERÄT AutomatableModel &Reset (%1%2) &Zurücksetzen (%1%2) &Copy value (%1%2) Wert &kopieren (%1%2) &Paste value (%1%2) Wert &einfügen (%1%2) Edit song-global automation Song-globale Automation editieren Connected to %1 Verbunden mit %1 Connected to controller Verbunden mit Controller Edit connection... Verbindung bearbeiten... Remove connection Verbindung entfernen Connect to controller... Mit Controller verbinden... Remove song-global automation Song-globale Automation entfernen Remove all linked controls Alle verknüpften Controller entfernen AutomationEditor Play/pause current pattern (Space) Aktuellen Pattern abspielen/pausieren (Leertaste) Stop playing of current pattern (Space) Abspielen des aktuellen Patterns stoppen (Leertaste) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Klicken Sie hier, wenn Sie den aktuellen Pattern spielen wollen. Das ist nützlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn das Ende erreicht ist. Click here if you want to stop playing of the current pattern. Klicken Sie hier, wenn Sie das Abspielen des aktuellen Patterns stoppen wollen. Draw mode (Shift+D) Zeichnenmodus (Umschalt+D) Erase mode (Shift+E) Radiermodus (Umschalt+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie einzelne Werte hinzufügen und verschieben. Das ist der Standard-Modus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Werte löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. Cut selected values (Ctrl+X) Ausgewählte Werte ausschneiden (Strg+X) Copy selected values (Ctrl+C) Ausgewählte Werte kopieren (Strg+C) Paste values from clipboard (Ctrl+V) Werte aus Zwischenablage einfügen (Strg+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klicken Sie hier, um die markierten Werte auszuschneiden und in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klicken Sie hier, um die markierten Werte in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. Click here and the values from the clipboard will be pasted at the first visible measure. Klicken Sie hier, um die Werte in der Zwischenablage im ersten sichtbaren Takt einzufügen. Automation Editor - no pattern Automation-Editor - Kein Pattern Automation Editor - %1 Automation-Editor - %1 Please open an automation pattern with the context menu of a control! Bitte öffnen Sie einen Automation-Pattern mit Hilfe des Kontextmenüs eines Steuerelements! Values copied Werte kopiert All selected values were copied to the clipboard. Alle ausgewählten Werte wurden in die Zwischenablage kopiert. Discrete progression Diskretes Fortschreiten Linear progression Lineares Fortschreiten Cubic Hermite progression Kubisches, hermetisches Fortschrieten Tension: Spannung: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Klicken Sie hier, um diskretes Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts bleibt konstant zwischen den Kontrollpunkten und wird sofort auf den neuen Wert gesetzt, wenn ein Kontrollpunkt erreicht wird. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Klicken Sie hier, um lineares Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts wird über die Zeit kontinuierlich zwischen Kontrollpunkten auf den korrekten Wert am jeweiligen Kontrollpunkt geändert, ohne plötzliche Änderungen. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Klicken Sie hier, um kubisches, hermetisches Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts wird in einer nahtlosen Kurve geändert und in Spitzen und Täler übergehen. Tension value for spline Spannungswert für Spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. Ein höherer Spannungswert erzeugt möglicherweise eine nahtlosere Kurve, aber überschwingt einige Werte. Ein niedrigerer Spannungswert wird ein Abfallen und dann Abflachen der Kurve an jedem Kontrollpunkt verursachen. AutomationPattern Drag a control while pressing <Ctrl> Ein Steuerelement mit <Strg> hier her ziehen Model is already connected to this pattern. Modell ist bereits mit diesem Pattern verbunden. AutomationPatternView double-click to open this pattern in automation editor Doppelklick, um diesen Pattern im Automation-Editor zu öffnen Open in Automation editor Im Automation-Editor öffnen Clear Zurücksetzen Reset name Name zurücksetzen Change name Name ändern %1 Connections %1 Verbindungen Disconnect "%1" »%1« trennen Set/clear record Aufnahme setzen/löschen AutomationTrack Automation track Automation-Spur BassBoosterControlDialog FREQ FREQ Frequency: Frequenz: GAIN GAIN Gain: Verstärkung: RATIO RATIO Ratio: Verhältnis: BassBoosterControls Frequency Frequenz Gain Verstärkung Ratio Verhältnis CarlaInstrumentView Show GUI GUI anzeigen Click here to show or hide the graphical user interface (GUI) of Carla. Klicken Sie hier, um die grafische Oberfläche von Carla anzuzeigen bzw. auszublenden. Controller Controller %1 Controller %1 ControllerConnectionDialog Connection Settings Verbindungseinstellungen MIDI CONTROLLER MIDI CONTROLLER Input channel Eingangskanal CHANNEL KANAL Input controller Eingangscontroller CONTROLLER CONTROLLER Auto Detect Automatische Erkennung MIDI-devices to receive MIDI-events from MIDI-Geräte, von denen MIDI-Events empfangen werden sollen USER CONTROLLER BENUTZERDEFINIETER CONTROLLER MAPPING FUNCTION ABBILDUNGS-FUNKTION OK OK Cancel Abbrechen LMMS LMMS Cycle Detected. Schleife erkannt. ControllerRackView Controller Rack Controller-Einheit Add Hinzufügen Confirm Delete Löschen bestätigen Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. Löschen bestätigen? Es bestehen Verbindungen, die an diesen Controller angeschlossen sind. Es gibt keine Möglichkeit dies rückgängig zu machen. ControllerView Controls Regler Controllers are able to automate the value of a knob, slider, and other controls. Mit Controller können Sie den Wert eines Reglers, Schiebereglers und anderer Steuerelemente automatisieren. Rename controller Controller umbenennen Enter the new name for this controller Geben Sie einen neuen Namen für diesen Controller ein &Remove this plugin Plugin entfe&rnen DelayControls Delay Samples Samples verzögern Feedback Rückkopplung Lfo Frequency LFO-Frequenz Lfo Amount LFO-Stärke DelayControlsDialog Delay Verzögerung Delay Time Verzögerungszeit Regen Feedback Amount Rückkopplungsstärke Rate Rate Lfo LFO Lfo Amt LFO-Stärke DetuningHelper Note detuning Noten-Verstimmung DualFilterControlDialog Filter 1 enabled Filter 1 aktiviert Filter 2 enabled Filter 2 aktiviert Click to enable/disable Filter 1 Klicken Sie, um Filter 1 zu aktivieren/deaktivieren Click to enable/disable Filter 2 Klicken Sie, um Filter 2 zu aktivieren/deaktivieren DualFilterControls Filter 1 enabled Filter 1 aktiviert Filter 1 type Filtertyp 1 Cutoff 1 frequency Kennfrequenz 1 Q/Resonance 1 Q/Resonanz 1 Gain 1 Verstärkung 1 Mix Mischung Filter 2 enabled Filter 2 aktiviert Filter 2 type Filtertyp 2 Cutoff 2 frequency Kennfrequenz 2 Q/Resonance 2 Q/Resonanz 2 Gain 2 Verstärkung 2 LowPass Tiefpass HiPass Hochpass BandPass csg Bandpass csg BandPass czpg Bandpass czpg Notch Notch Allpass Allpass Moog Moog 2x LowPass 2x Tiefpass RC LowPass 12dB RC-Tiefpass 12dB RC BandPass 12dB RC-Bandpass 12dB RC HighPass 12dB RC-Hochpass 12dB RC LowPass 24dB RC-Tiefpass 24dB RC BandPass 24dB RC-Bandpass 24dB RC HighPass 24dB RC-Hochpass 24dB Vocal Formant Filter Vokalformant-Filter DummyEffect NOT FOUND NICHT GEFUNDEN Effect Effect enabled Effekt eingeschaltet Wet/Dry mix Wet/Dry-Mix Gate Gate Decay Abfallzeit EffectChain Effects enabled Effekte aktiviert EffectRackView EFFECTS CHAIN EFFEKT-KETTE Add effect Effekt hinzufügen EffectSelectDialog Add effect Effekt hinzufügen Plugin description Pluginbeschreibung EffectView Toggles the effect on or off. Schaltet den Effekt an oder aus. On/Off An/aus W/D W/D Wet Level: Wet-Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. Der Wet/Dry-Regler legt das Verhältnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest. DECAY DECAY Time: Zeit: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. Der Abfallzeit-Regler legt fest, wie viele Puffer mit Stille durchgelaufen sein müssen, bis der Effekt mit der Verarbeitung stoppt. Kleinere Werte reduzieren die CPU-Last, können jedoch unter Umständen das Ende von Delay-Effekten o.ä. abschneiden. GATE GATE Gate: Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Der Gate-Regler legt die Stärke des Signals fest, welches als »Stille« angesehen wird, um zu entscheiden, wann das Plugin mit der Verarbeitung aufhören soll. Controls Regler Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Effektplugins funktionieren als eine Aneinanderreihung von Effekten, wo das Signal von oben nach unter verarbeitet wird. Der Ein-/Ausschalter ermöglicht es Ihnen ein Plugin jeder Zeit zu umgehen. Der Wet/Dry-Regler legt das Verhältnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest. Der Eingag dieses Effekts ist der Ausgang des vorherigen Effekts. Somit enthält das »dry«-Signal, für Effekte weiter unten in der Kette, alle vorherigen Effekte. Der Abfallzeit-Regler legt fest, wie lange das Signal weiterverarbeitet werden soll, nachdem die Noten losgelassen wurde. Der Effekt hört auf Signale zu verarbeiten, wenn die Lautstärke eines Signals für eine festgelegte Zeit unter einen festgelegten Schwellwert gefallen ist. Dieser Regler legt die »festgelegte Zeit« fest. Längere Zeiten brauchen mehr Rechenleistung, deshalb sollte diese Zahl für die meisten Effekte niedrig sein. Es muss für Effekte, die über längere Zeit Stille erzeugen, z.B. Verzögerungen, erhöht werden. Der Gate-Regler kontrolliert den »festgelegten Schwellwert« für das automatische Ausschalten des Effekts. Die Uhr für die »festgelegte Zeit« beginnt sobald der Pegel des verarbeiteten Signals unter den mit diesem Knopf festgelegten Pegel fällt. Der Regler-Knopf öffnet einen Dialog zum Bearbeiten der Parameter des Effekts. Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte ändern oder einen Effekt entfernen können. Move &up Nach &oben verschieben Move &down Nach &unten verschieben &Remove this plugin Plugin entfe&rnen EnvelopeAndLfoParameters Predelay Verzögerung (predelay) Attack Anschwellzeit (attack) Hold Haltezeit (hold) Decay Abfallzeit Sustain Haltepegel (sustain) Release Ausklingzeit (release) Modulation Modulation LFO Predelay LFO-Verzögerung LFO Attack LFO-Anschwellzeit (LFO-attack) LFO speed LFO-Geschwindigkeit LFO Modulation LFO Modulation LFO Wave Shape LFO-Wellenform Freq x 100 Freq x 100 Modulate Env-Amount Hüllkurve modulieren EnvelopeAndLfoView DEL DEL Predelay: Verzögerung (predelay): Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Benutzen Sie diesen Regler, um die Verzögerung (predelay) für die aktuelle Hüllkurven einzustellen. Je größer dieser Wert, desto länger dauert es, bis die eigentliche Hüllkurve beginnt. ATT ATT Attack: Anschwellzeit (attack): Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Benutzen Sie diesen Regler, um die Anschwellzeit (attack) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto länger braucht die Hüllkurve, um bis zum Anschwellpegel (attack-level) zu steigen. Wählen Sie einen kleinen Wert für Instrumente wie Klavier und einen großen Wert für Streichinstrumente. HOLD HOLD Hold: Haltezeit (hold): Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Benutzen Sie diesen Regler, um die Haltezeit (hold) der aktuellen Hüllkurve zu setzen. Je größer der Wert, desto länger hält die Hüllkurve den Anschwellpegel, bevor sie zum Haltepegel (sustain-level) abfällt. DEC DEC Decay: Abfallzeit (decay): Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Benutzen Sie diesen Regler, um die Abfallzeit (decay) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto länger braucht die Hüllkurve, um vom Anschwellpegel (attack-level) zum Dauerpegel (sustain-level) abzufallen. Wählen Sie einen kleinen Wert für Instrumente wie Klavier. SUST SUST Sustain: Dauerpegel (sustain): Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Benutzen Sie diesen Regler, um den Dauerpegel (sustain-level) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto höher der Pegel, den die Hüllkurve hält, bevor sie auf Null abfällt. REL REL Release: Ausklingzeit (release): Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Benutzen Sie diesen Regler, um die Ausklingzeit der aktuellen Hüllkurve einzustellen. Je größer der Wert, desto länger braucht die Hüllkurve um vom Dauerpegel (sustain-level) auf Null abzufallen. Wählen Sie einen großen Wert für weiche Instrumente, wie z.B. Streicher. AMT AMT Modulation amount: Modulationsintensität: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Benutzen Sie diesen Regler, um die Modulationsintensität für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cutoff-Frequenz) von der Hüllkurve beeinflusst. LFO predelay: LFO-Verzögerung: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Benutzen Sie diesen Regler, um die Verzögerungszeit für den aktuellen LFO einzustellen. Je größer dieser Wert, desto länger die Zeit, bis der LFO anfängt zu schwingen. LFO- attack: LFO-Anschwellzeit (LFO-attack): Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Benutzen Sie diesen Regler, um die Anschwellzeit für den aktuellen LFO einzustellen. Je größer dieser Wert, desto länger dauert es, bis die Amplitude des LFOs bis zum Maximum angestiegen ist. SPD SPD LFO speed: LFO-Geschwindigkeit: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Benutzen Sie diesen Regler, um die Geschwindigkeit für den aktuellen LFO einzustellen. Je größer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Benutzen Sie diesen Regler, um die Modulationsintensität des aktuellen LFOs einzustellen. Je größer der Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cuttoff-Frequenz) von diesem LFO beeinflusst. Click here for a sine-wave. Klick für eine Sinuswelle. Click here for a triangle-wave. Klick für eine Dreieckwelle. Click here for a saw-wave for current. Klick für eine Sägezahnwelle. Click here for a square-wave. Klick für eine Rechteckwelle. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Hier klicken für eine benutzerdefinierte Wellenform. Danach eine entsprechende Sampledatei auf den LFO-Graphen ziehen. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. Hier klicken, wenn die Frequenz des LFOs mit 100 multipliziert werden soll. multiply LFO-frequency by 100 LFO-Frequenz mit 100 multiplizieren MODULATE ENV-AMOUNT HÜLLK. MODULIEREN Click here to make the envelope-amount controlled by this LFO. Klicken Sie hier, um die Hüllkurvenintensität durch diesen LFO kontrollieren zu lassen. control envelope-amount by this LFO Hüllkurvenintensität durch diesen LFO kontrollieren ms/LFO: ms/LFO: Hint Tipp Drag a sample from somewhere and drop it in this window. Ziehen Sie ein Sample von irgendwo und lassen es in diesem Fenster fallen. Click here for random wave. Klick für eine zufällige Welle. ExportProjectDialog Export project Projekt exportieren Output Ausgabe File format: Dateiformat: Samplerate: Abtastrate: 44100 Hz 44100 Hz 48000 Hz 48000 Hz 88200 Hz 88200 Hz 96000 Hz 96000 Hz 192000 Hz 192000 Hz Bitrate: Bitrate: 64 KBit/s 64 KBit/s 128 KBit/s 128 KBit/s 160 KBit/s 160 KBit/s 192 KBit/s 192 KBit/s 256 KBit/s 256 KBit/s 320 KBit/s 320 KBit/s Depth: Genauigkeit: 16 Bit Integer 16 Bit Ganzzahlen 32 Bit Float 32-Bit-Gleitkommazahlen Please note that not all of the parameters above apply for all file formats. Bitte beachten Sie, dass nicht alle der obigen Parameter für alle Dateiformate relevant sind. Quality settings Qualitätseinstellungen Interpolation: Interpolation: Zero Order Hold Zero Order Hold Sinc Fastest Sinc - am schnellsten Sinc Medium (recommended) Sinc - Normal (empfohlen) Sinc Best (very slow!) Sinc - am besten (sehr langsam!) Oversampling (use with care!): Überabtastung (oversampling) (mit Vorsicht nutzen!): 1x (None) 1x (keine) 2x 2x 4x 4x 8x 8x Start Start Cancel Abbrechen Export as loop (remove end silence) Als Schleife exportieren (Stille am Ende entfernen) FileBrowser Browser Browser FileBrowserTreeWidget Send to active instrument-track An aktive Instrumentspur senden Open in new instrument-track/Song-Editor In neuer Instrumentspur im Song-Editor öffnen Open in new instrument-track/B+B Editor In neuer Instrumentspur im B+B-Editor öffnen Loading sample Lade Sample Please wait, loading sample for preview... Bitte warten, lade Sample für Vorschau… --- Factory files --- --- Mitgelieferte Dateien --- FxLine Channel send amount Kanal Sendemenge The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Der FX Kanal erhält von ein oder mehr Instrumentenspuren Eingabesignale. Er kann wiederum durch mehrere andere FX Kanäle gesendet werden. LMMS verhindert Endlosschleifen automatisch für Sie und erlaubt es nicht eine Verbindung zu erstellen, die in einer Endlosschleife resultiert. Um den Kanal an einen anderen Kanal zu senden, wählen Sie den FX Kanal aus und klicken Sie auf den »Senden« Knopf in dem Kananl, an den Sie den Kanal senden möchten. Der Knopf unter dem Sendeknopf kontrolliert die Stärke des gesendeten Signals. Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch einen Rechtsklick auf dem FX Kanal aufgerufen wird. Move &left Nach &links verschieben Move &right Nach &rechts verschieben Rename &channel &Kanal umbenennen R&emove channel Kanal &Entfernen FxMixer Master Master FX %1 FX %1 FxMixerView Rename FX channel FX-Kanal umbenennen Enter the new name for this FX channel Bitte einen neuen Namen für den FX-Kanal eingeben FX-Mixer FX-Mixer FX Fader %1 FX Schieber %1 Mute Stumm Mute this FX channel Diesen FX-Kanal stummschalten FxRoute Amount to send from channel %1 to channel %2 Anteil, der von Kanal %1 zu Kanal %2 gesendet werden soll InstrumentFunctionArpeggio Arpeggio Arpeggio Arpeggio type Arpeggiotyp Arpeggio range Arpeggio-Bereich Arpeggio time Arpeggio-Zeit Arpeggio gate Arpeggio-Gate Arpeggio direction Arpeggio-Richtung Arpeggio mode Arpeggio-Modus Up Hoch Down Runter Up and down Hoch und runter Random Zufällig Free Frei Sort Sortiert Sync Synchron Down and up Hoch und runter InstrumentFunctionArpeggioView ARPEGGIO ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Ein Arpeggio ist eine Art, (vorallem gezupfte) Instrumente zu spielen, die die Musik viel lebendiger macht. Die Seiten von solchen Instrumenten (z.B. Harfen) werden wie Akkorde gezupft, der einzige Unterschied besteht darin, dass dies nacheinander geschieht. Die Noten werden also nicht zur gleichen Zeit gespielt. Typische Arpeggios sind Dur- oder Moll-Dreiklänge, aber es gibt noch viele andere Akkorde, die Sie auswählen können. RANGE RANGE Arpeggio range: Arpeggio-Bereich: octave(s) Oktave(n) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Benutzen Sie diesen Regler, um den Arpeggio-Bereich in Oktaven zu setzen. Das gewähle Arpeggio wird innerhalb der angegebenen Anzahl von Oktaven abgespielt. TIME ZEIT Arpeggio time: Arpeggio-Zeit: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Benutzen Sie diesen Regler, um die Arpeggio-Zeit in Millisekunden zu setzen. Die Arpeggio-Zeit gibt an, wie lange jeder einzelne Arpeggio-Ton gespielt werden soll. GATE GATE Arpeggio gate: Arpeggio-Gate: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Benutzen Sie diesen Regler, um das Arpeggio-Gate zu setzen. Das Arpeggio-Gate gibt an, wie viel Prozent eines ganzen Arpeggio-Tons gespielt werden sollen. Damit können Sie coole Staccato-Arpeggios erzeugen. Chord: Akkord: Direction: Richtung: Mode: Modus: InstrumentFunctionNoteStacking octave Oktave Major Dur Majb5 Durb5 minor moll minb5 mollb5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 6add9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9#5 9b5 9b5 9#11 9#11 9b13 9b13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9#5 Maj9#11 Maj9#11 m9 m9 madd9 madd9 m9b5 m9b5 m9-Maj7 m9-Maj7 11 11 11b9 11b9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Harmonisches Moll Melodic minor Melodisches Moll Whole tone Ganze Töne Diminished Vermindert Major pentatonic Pentatonisches Dur Minor pentatonic Pentatonisches Moll Jap in sen Jap in sen Major bebop Dur Bebop Dominant bebop Dominanter Bebop Blues Blues Arabic Arabisch Enigmatic Enigmatisch Neopolitan Neopolitanisch Neopolitan minor Neopolitanisches Moll Hungarian minor Zigeunermoll Dorian Dorisch Phrygolydian Phrygisch Lydian Lydisch Mixolydian Mixolydisch Aeolian Äolisch Locrian Locrisch Chords Akkorde Chord type Akkordtyp Chord range Akkord-Bereich Minor Moll Chromatic Chromatisch Half-Whole Diminished Halbton-Ganzton-Leiter 5 5 InstrumentFunctionNoteStackingView RANGE RANGE Chord range: Akkord-Bereich: octave(s) Oktave(n) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Benutzen Sie diesen Regler, um den Akkord-Bereich in Oktaven zu setzen. Der gewähle Akkord wird innerhalb der angegebenen Anzahl von Oktaven abgespielt. STACKING STACKING Chord: Akkord: InstrumentMidiIOView ENABLE MIDI INPUT MIDI-EINGANG AKTIVIEREN CHANNEL KANAL VELOCITY LAUTSTÄRKE ENABLE MIDI OUTPUT MIDI-AUSGANG AKTIVIEREN PROGRAM PROGRAMM MIDI devices to receive MIDI events from MIDI Geräte, von denen MIDI-Events empfangen werden sollen MIDI devices to send MIDI events to MIDI-Geräte, an die MIDI-Events gesendet werden sollen NOTE NOTE CUSTOM BASE VELOCITY BENUTZERDEFINIERTE GRUNDLAUTSTÄRKE Specify the velocity normalization base for MIDI-based instruments at note volume 100% Geben Sie die Lautstärken-Normalisationsbasis für MIDI-basierende Instrumente bei einer Notenlautstärke von 100% an BASE VELOCITY GRUNDLAUTSTÄRKE InstrumentSoundShaping VOLUME LAUTSTÄRKE Volume Lautstärke CUTOFF KENNFREQ Cutoff frequency Kennfrequenz RESO RESO Resonance Resonanz Envelopes/LFOs Hüllkurven/LFOs Filter type Filtertyp Q/Resonance Q/Resonanz LowPass Tiefpass HiPass Hochpass BandPass csg Bandpass csg BandPass czpg Bandpass czpg Notch Notch Allpass Allpass Moog Moog 2x LowPass 2x Tiefpass RC LowPass 12dB RC-Tiefpass 12dB RC BandPass 12dB RC-Bandpass 12dB RC HighPass 12dB RC-Hochpass 12dB RC LowPass 24dB RC-Tiefpass 24dB RC BandPass 24dB RC-Bandpass 24dB RC HighPass 24dB RC-Hochpass 24dB Vocal Formant Filter Vokalformant-Filter InstrumentSoundShapingView TARGET ZIEL These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Diese Tabs enthalten Hüllkurven. Diese sind sehr wichtig, um einen Klang zu verändern, insbesondere bei der substraktiven Synthese. Wenn Sie zum Beispiel eine Lautstärke-Hüllkurve haben, können Sie festlegen, wann der Klang welchen Lautstärke-Pegel haben soll. Vielleicht wollen Sie ein weiches Streichinstrument erstellen. Dann muss ihr Sound sehr sanft ein- und ausgeblendet werden. Das kann man ganz einfach erreichen, indem man eine große Anschwell(attack)- und Ausklingzeit (release) einstellt. Mit anderen Hüllkurven, wie Balance, Kennfrequenz des benutzten Filters usw., ist es genau das Gleiche. Probieren Sie einfach ein bisschen herum! Mit ein paar Hüllkurven kann man aus einer Sägezahnwelle wirklich coole Klänge machen...! FILTER FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hier können Sie den eingebauten Filter wählen, den Sie in dieser Instrument-Spur nutzen wollen. Filter sind sehr wichtig, um die Charakteristik eines Klangs zu verändern. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Benutzen Sie diesen Regler, um die Kennfrequenz (cutoff-frequency) für den gewählten Filter einzustellen. Die Kennfrequenz wird vom Filter zum Beschneiden des Signals verwendet. Zum Beispiel filtert ein Tiefpass-Filter alle Frequenzen oberhalb der Kennfrequenz heraus. Ein Hochpass-Filter filtert alle Frequenzen unterhalb der Kennfrequenz heraus usw... RESO RESO Resonance: Resonanz: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Benutzen Sie diesen Regler, um Q/die Resonanz für den gewählten Filter einzustellen. Q/Resonanz teilt dem Filter mit, wie stark er die Frequenzen in der Nähe der Cutoff-Frequenz verstärken soll. FREQ FREQ cutoff frequency: Kennfrequenz: Envelopes, LFOs and filters are not supported by the current instrument. Hüllkurven, LFOs und Filter sind vom aktuellen Instrument nicht unterstützt. InstrumentTrack unnamed_track Unbenannter_Kanal Volume Lautstärke Panning Balance Pitch Tonhöhe FX channel FX-Kanal Default preset Standard-Preset With this knob you can set the volume of the opened channel. Mit diesem Regler können Sie die Lautstärke des geöffneten Kanals ändern. Base note Grundton Pitch range Tonhöhenbereich InstrumentTrackView Volume Lautstärke Volume: Lautstärke: VOL VOL Panning Balance Panning: Balance: PAN PAN MIDI MIDI Input Eingang Output Ausgang InstrumentTrackWindow GENERAL SETTINGS GRUNDLEGENDE EINSTELLUNGEN Instrument volume Instrument-Lautstärke Volume: Lautstärke: VOL VOL Panning Balance Panning: Balance: PAN PAN Pitch Tonhöhe Pitch: Tonhöhe: cents Cent PITCH PITCH FX channel FX-Kanal ENV/LFO ENV/LFO FUNC FUNC FX FX MIDI MIDI Save preset Preset speichern XML preset file (*.xpf) XML Preset Datei (*.xpf) PLUGIN PLUGIN Pitch range (semitones) Tonhöhenbereich (Halbtöne) RANGE RANGE Save current instrument track settings in a preset file Aktuelle Instrumentenspur-Einstelungen in einer Presetdatei speichern Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. Klicken Sie hier, wenn Sie die aktuellen Instrumentenspur-Einstellungen in einer Presetdatei speichern möchten. Sie können dieses Preset später durch Doppelklicken auf die Datei im Preset-Browser öffnen. LadspaControl Link channels Kanäle verbinden LadspaControlDialog Link Channels Kanäle verbinden Channel Kanal LadspaControlView Link channels Kanäle verbinden Value: Wert: Sorry, no help available. Sorry, keine Hilfe verfügbar. LadspaEffect Effect Effekt Unknown LADSPA plugin %1 requested. Unbekanntes LADSPA-Plugin %1 angefordert. LcdSpinBox Please enter a new value between %1 and %2: Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: LfoController LFO Controller LFO-Controller Base value Grundwert Oscillator speed Oszillator-Geschwindigkeit Oscillator amount Oszillator-Stärke Oscillator phase Oszillator-Phase Oscillator waveform Oszillator-Wellenform Frequency Multiplier Frequenzmultiplikator LfoControllerDialog LFO LFO LFO Controller LFO-Controller BASE BASE Base amount: Grundstärke: todo Zu erledigen SPD SPD LFO-speed: LFO-Geschwindigkeit: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Benutzen Sie diesen Regler, um die Geschwindigkeit des LFOs einzustellen. Je größer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt. AMT AMT Modulation amount: Modulationsintensität: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Benutzen Sie diesen Regler, um die Modulationsintensität des LFOs einzustellen. Je größer der Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cuttoff-Frequenz) von diesem LFO beeinflusst. PHS PHS Phase offset: Phasenverschiebung: degrees Grad With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Mit diesem Regler können Sie die Phasenverschiebung des LFOs einstellen. Das heißt, Sie können den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinuswelle haben und eine Phasenverschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteckwelle zu. Click here for a sine-wave. Klick für eine Sinuswelle. Click here for a triangle-wave. Klick für eine Dreieckwelle. Click here for a saw-wave. Klick für eine Sägezahnwelle. Click here for a square-wave. Klick für eine Rechteckwelle. Click here for an exponential wave. Klick für eine exponentielle Welle. Click here for white-noise. Klick für weißes Rauschen. Click here for a user-defined shape. Double click to pick a file. Klicken Sie hier für eine benutzerdefinierte From. Doppelklicken Sie, um eine Datei auszuwählen. Click here for a moog saw-wave. Klick für eine Moog-Sägezahnwelle. MainWindow Working directory Arbeitsverzeichnis The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Das LMMS-Arbeitsverzeichnis %1 existiert nicht. Soll es jetzt erstellt werden? Sie können das Verzeichnis später über Bearbeiten -> Einstellungen ändern. Could not save config-file Konnte Konfigurationsdatei nicht speichern Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Konnte die Konfigurationsdatei %1 nicht speichern. Sie haben möglicherweise keine Schreibrechte auf diese Datei. Bitte überprüfen Sie Ihre Rechte und versuchen es erneut. &Project &Projekt &New &Neu &Open... Ö&ffnen... Recently opened projects Zuletzt geöffnete Projekte &Save &Speichern Save &As... Speichern &als... Import... Importieren... E&xport... E&xportieren... &Quit &Beenden &Edit &Bearbeiten Settings Einstellungen &Tools &Werkzeuge &Help &Hilfe Online help Online-Hilfe Help Hilfe What's this? Was ist das? About Über Create new project Neues Projekt erstellen Create new project from template Neues Projekt aus Vorlage erstellen Open existing project Existierendes Projekt öffnen Recently opened project Zuletzt geöffnete Projekte Save current project Aktuelles Projekt speichern Export current project Aktuelles Projekt exportieren Show/hide Song-Editor Zeige/verstecke Song-Editor By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Mit diesem Knopf können Sie den Song-Editor zeigen oder verstecken. Mit Hilfe des Song-Editors können Sie die Song-Playliste bearbeiten und angeben, wann welche Spur abgespielt werden soll. Außerdem können Sie Samples (z.B. Rap samples) direkt in die Playliste einfügen und verschieben. Show/hide Beat+Bassline Editor Zeige/verstecke Beat+Bassline Editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Mit diesem Knopf können Sie den Beat+Bassline-Editor zeigen oder verstecken. Mit dem Beat+Bassline-Editor kann man Beats erstellen, Bassline-Patterns bearbeiten uvm. Show/hide Piano-Roll Zeige/verstecke Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Hier klicken, um das Piano-Roll zu zeigen oder verstecken. Mit Hilfe des Piano-Rolls können Sie Melodien auf einfache Art und Weise bearbeiten. Show/hide Automation Editor Zeige/Verstecke Automation-Editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Hier klicken, um den Automation-Editor zu zeigen oder verstecken. Mit Hilfe des Automation-Editors können Sie Automation-Patterns auf einfache Art und Weise bearbeiten. Show/hide FX Mixer Zeige/verstecke FX-Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Hier klicken, um den FX-Mixer zu zeigen oder verstecken. Der FX-Mixer ist ein leistungsfähiges Werkzeug, um Effekte für Ihren Song zu verwalten. Sie können verschiedene Effekte in unterschiedliche Effekt-Kanäle einfügen. Show/hide project notes Zeige/verstecke Projekt-Notizen Click here to show or hide the project notes window. In this window you can put down your project notes. Hier klicken, um die Projektnotizen zu zeigen oder verstecken. Show/hide controller rack Zeige/verstecke Controller-Rack Untitled Unbenannt LMMS %1 LMMS %1 Project not saved Projekt nicht gespeichert The current project was modified since last saving. Do you want to save it now? Das aktuelle Projekt wurde seit dem letzten Speichern geändert. Wollen Sie es jetzt speichern? Open project Projekt öffnen Save project Projekt speichern Help not available Hilfe nicht verfügbar Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Derzeit ist in LMMS keine Hilfe verfügbar. Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS. My projects Meine Projekte My samples Meine Samples My presets Meine Presets My home Persönlicher Ordner My computer Mein Computer Root directory Wurzelverzeichnis Project recovery Projektwiederherstellung It looks like the last session did not end properly. Do you want to recover the project of this session? Es sieht so aus, als ob die letzte Sitzung nicht ordentlich beendet wurde. Möchten Sie das Projekt dieser Sitzung wiederherstellen? Configuration file Konfigurationsdatei Error while parsing configuration file at line %1:%2: %3 Fehler beim Parsen der Konfigurationsdatei in Zeile %1:%2: %3 Save as new &version Als neue &Version speichern E&xport tracks... Spuren E&xportieren… LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) Version %1 Version %1 Undo Rückgängig Redo Wiederholen LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) LMMS Projekt (*.mmpz *.mmp);;LMMS Projektvorlage (*.mpt) Volumes Volumes MeterDialog Meter Numerator Takt/Zähler Meter Denominator Takt/Nenner TIME SIG TAKTART MeterModel Numerator Zähler Denominator Nenner MidiAlsaRaw::setupWidget DEVICE GERÄT MidiAlsaSeq DEVICE GERÄT MidiController MIDI Controller MIDI-Controller unnamed_midi_controller unbenannter_midi_controller MidiImport Setup incomplete Unvollständige Einrichtung You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Sie haben keine Standard-Soundfont im Einstellungsdialog (Bearbeiten->Einstellungen) festgelegt. Aus diesem Grund werden Sie nach dem Import der MIDI-Datei während der Wiedergabe nichts hören. Sie sollten eine General-MIDI-Soundfont herunterladen, diese im Einstellungsdialog angeben und es erneut versuchen. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. Sie haben LMMS ohne das SoundFont2-Player-Plugin gebaut. Dieses Plugin wird normalerweise benutzt, um Standardklänge bei importierten MIDI-Dateien einzurichten. Aus diesem Grund werden Sie nach dem Import der MIDI-Datei nichts hören. MidiOss::setupWidget DEVICE GERÄT MidiPort Input channel Eingangskanal Output channel Ausgangskanal Input controller Eingangscontroller Output controller Ausgangscontroller Fixed input velocity Feste Eingangslautstärke Fixed output velocity Feste Ausgangslautstärke Output MIDI program Ausgangs-MIDI-Programm Receive MIDI-events MIDI-Ereignisse empfangen Send MIDI-events MIDI-Ereignisse senden Fixed output note Feste Ausgangnote Base velocity Grundlautstärke MonstroInstrument Osc 1 Volume Oszillator 1 Lautstärke Osc 1 Panning Oszillator 1 Balance Osc 1 Coarse detune Oszillator 1 Grob-Verstimmung Osc 1 Fine detune left Oszillator 1 Fein-Verstimmung links Osc 1 Fine detune right Oszillator 1 Fein-Verstimmung rechts Osc 1 Stereo phase offset Oszillator 1 Stereo Phasenverschiebung Osc 1 Pulse width Oszilator 1 Pulsweite Osc 1 Sync send on rise Oszillator 1 Sync beim Steigen senden Osc 1 Sync send on fall Oszillator 2 Sync beim Abfallen senden Osc 2 Volume Oszillator 2 Lautstärke Osc 2 Panning Oszillator 2 Balance Osc 2 Coarse detune Oszillator 2 Grob-Verstimmung Osc 2 Fine detune left Oszillator 2 Fein-Verstimmung links Osc 2 Fine detune right Oszillator 2 Fein-Verstimmung rechts Osc 2 Stereo phase offset Oszillator 2 Stereo Phasenverschiebung Osc 2 Waveform Oszillator 2 Wellenform Osc 2 Sync Hard Oszillator 2 hart synchronisieren Osc 2 Sync Reverse Oszillator 2 rückwärts synchronisieren Osc 3 Volume Oszillator 3 Lautstärke Osc 3 Panning Oszillator 3 Balance Osc 3 Coarse detune Oszillator 3 Grob-Verstimmung Osc 3 Stereo phase offset Oszillator 3 Stereo Phasenverschiebung Osc 3 Sub-oscillator mix Oszillator 3 Unter-Oszillator Mischung Osc 3 Waveform 1 Oszillator 3 Wellenform 1 Osc 3 Waveform 2 Oszillator 3 Wellenform 2 Osc 3 Sync Hard Oszillator 2 hart synchronisieren Osc 3 Sync Reverse Oszillator 2 rückwärts synchronisieren LFO 1 Waveform LFO 1 Wellenform LFO 1 Attack LFO 1 Anschwellzeit LFO 1 Rate LFO 1 Rate LFO 1 Phase LFO 1 Phase LFO 2 Waveform LFO 2 Wellenform LFO 2 Attack LFO 2 Anschwellzeit LFO 2 Rate LFO 2 Rate LFO 2 Phase Hüllkurve 2 Phase Env 1 Pre-delay Hüllkurve 1 Verzögerung Env 1 Attack Hüllkurve 1 Anschwellzeit Env 1 Hold Hüllkurve 1 Haltezeit Env 1 Decay Hüllkurve 1 Abfallzeit Env 1 Sustain Hüllkurve 1 Dauerpegel Env 1 Release Hüllkurve 1 Ausklingzeit Env 1 Slope Hüllkurve 1 Neigung Env 2 Pre-delay Hüllkurve 2 Verzögerung Env 2 Attack Hüllkurve 2 Anschwellzeit Env 2 Hold Hüllkurve 2 Haltezeit Env 2 Decay Hüllkurve 2 Abfallzeit Env 2 Sustain Hüllkurve 2 Dauerpegel Env 2 Release Hüllkurve 2 Ausklingzeit Env 2 Slope Hüllkurve 2 Neigung Osc2-3 modulation Oszillator2-3 Modulation Selected view Ausgewählte Ansicht Vol1-Env1 Vol1-Env1 Vol1-Env2 Vol1-Env2 Vol1-LFO1 Vol1-LFO1 Vol1-LFO2 Vol1-LFO2 Vol2-Env1 Vol2-Env1 Vol2-Env2 Vol2-Env2 Vol2-LFO1 Vol2-LFO1 Vol2-LFO2 Vol2-LFO2 Vol3-Env1 Vol3-Env1 Vol3-Env2 Vol3-Env2 Vol3-LFO1 Vol3-LFO1 Vol3-LFO2 Vol3-LFO2 Phs1-Env1 Phs1-Env1 Phs1-Env2 Phs1-Env2 Phs1-LFO1 Phs1-LFO1 Phs1-LFO2 Phs1-LFO2 Phs2-Env1 Phs2-Env1 Phs2-Env2 Phs2-Env2 Phs2-LFO1 Phs2-LFO1 Phs2-LFO2 Phs2-LFO2 Phs3-Env1 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO1 Phs3-LFO2 Phs3-LFO2 Pit1-Env1 Pit1-Env1 Pit1-Env2 Pit1-Env2 Pit1-LFO1 Pit1-LFO1 Pit1-LFO2 Pit1-LFO2 Pit2-Env1 Pit2-Env1 Pit2-Env2 Pit2-Env2 Pit2-LFO1 Pit2-LFO1 Pit2-LFO2 Pit2-LFO2 Pit3-Env1 Pit3-Env1 Pit3-Env2 Pit3-Env2 Pit3-LFO1 Pit3-LFO1 Pit3-LFO2 Pit3-LFO2 PW1-Env1 PW1-Env1 PW1-Env2 PW1-Env2 PW1-LFO1 PW1-LFO1 PW1-LFO2 PW1-LFO2 Sub3-Env1 Sub3-Env1 Sub3-Env2 Sub3-Env2 Sub3-LFO1 Sub3-LFO1 Sub3-LFO2 Sub3-LFO2 Sine wave Sinuswelle Bandlimited Triangle wave Bandlimittierte Dreieckwelle Bandlimited Saw wave Bandbegrenzte Sägezahnwelle Bandlimited Ramp wave Bandbegrenzte Sägezahnwelle Bandlimited Square wave Bandbegrenzte Rechteckwelle Bandlimited Moog saw wave Bandbegrenzte Moog-Sägezahnwelle Soft square wave Weiche Rechteckwelle Absolute sine wave Absolute Sinuswelle Exponential wave Exponentielle Welle White noise Weißes Rauschen Digital Triangle wave Digitale Dreieckwelle Digital Saw wave Digitale Sägezahnwelle Digital Ramp wave Digitale Sägezahnwelle Digital Square wave Digitale Rechteckwelle Digital Moog saw wave Digitale Moog-Sägezahnwelle Triangle wave Dreieckwelle Saw wave Sägezahnwelle Ramp wave Sägezahnwelle Square wave Rechteckwelle Moog saw wave Moog-Sägezahnwelle Abs. sine wave Abs. Sinuswelle Random Zufällig Random smooth Zufällig gleitend MonstroView Operators view Operator-Ansicht Matrix view Matrix-Ansicht Mix Osc2 with Osc3 Oszillator 2 mit Oszillator 3 Mischen Modulate amplitude of Osc3 with Osc2 Amplitude von Oszillator 3 mit Oszillator 2 modulieren Modulate frequency of Osc3 with Osc2 Frequenz von Oszillator 3 mit Oszillator 2 modulieren Modulate phase of Osc3 with Osc2 Phase von Oszillator 3 mit Oszillator 2 modulieren The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Die Operator-Ansicht enthält alle Operatoren. Diese beinhalten beide, hörbare Operatoren (Oszillatoren) und nicht hörbare Operatoren oder Modulatoren: Niedrig-Frequenz-Oszillatoren und Hüllkurven. Regler und andere Dinge in der Operator-Ansicht haben ihren eigenen »Was ist das?« Texte, sodass Sie auf diese Weise spezifischere Hilfe für diese bekommen können. The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Die Matrix-Ansicht enthält die Modulationsmatrix. Hier können Sie die Modulationsverhältnisse zwischen den verschiedenen Operatoren definieren: Jeder hörbare Oberator (Oszillatorern 1-3) hat 3-4 Einstellungen, die durch jeden der Modulatoren moduliert werden können. Mehr Modulation braucht mehr Rechenleistung. Die Ansicht ist in Modulationsziele, gruppiert nach dem Zieloszillator, eingeteilt. Verfügbare Ziele sind Lautstärke, Tonhöhe, Phase, Pulsweite und Unter-Oszillator Rate. Hinweis: einige Ziele sind speziell für einen Oszillator. Jedes Modulationsziel hat 4 Regler, einen für jeden Modulator. Standardmäßig sind alle Regler bei 0, was keine Modulation bedeutet. Wenn der Regler auf 1 gestellt wird, wird das Modulationsziel vom Modulator so viel wie möglich beeinflusst. Wenn er auf -1 gestellt wird, passiert das gleiche, aber die Modulation ist invertiert. The CRS knob changes the tuning of oscillator 1 in semitone steps. Der CRS Regler ändert die Stimmung des Oszillators 1 in Halbtonschritten. The CRS knob changes the tuning of oscillator 2 in semitone steps. Der CRS Regler ändert die Stimmung des Oszillators 2 in Halbtonschritten. The CRS knob changes the tuning of oscillator 3 in semitone steps. Der CRS Regler ändert die Stimmung des Oszillators 3 in Halbtonschritten. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. FTL und FTR ändern die Feinabstimmung des Oszillators jeweils für den linken und rechten Kanal. Diese können Stereoverstimmug zum Oszillator hinzufügen, was das Stereobild weitet und eine Illusion von Raum erzeugt. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. Der SPO Regler ändert die Phasendifferenz zwischen dem linken und rechten Kanal. Höhere Differenz erzeugt ein breiteres Stereobild. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Der PW Regler kontrolliert die Pulsweite, auch bekannt als Tastgrad, von Oszillator 1. Oszillator 1 ist ein digitaler Pulswellen Oszillator, es erzeugt keine bandbegrenzte Ausgabe, was bedeutet, dass Sie es als einen hörbaren Oszillator einsetzen können, aber es wird Aliasing verursachen. Sie können es auch als eine nicht hörbare Quelle für ein sync Signal benutzen, dass benutzt werden kann, um die Oszillatoren 2 und 3 zu synchronisieren. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Sync beim Ansteigen senden: Wenn aktiviert, wird das Sync-Signal jedes Mal gesendet, wenn sich der Zustand von Oszillator 1 von niedrig nach hoch ändert, z.B. wenn sich die Amplitude von -1 nach 1 ändert. Die Tonhöhe, Phase und Pulsweite von Oszillator 1 können das Timing von Syncs beeinflussen, aber die Lautstärke hat keinen Effekt darauf. Sync-Signale werden unabhängig vom linken und rechten Kanal gesendet. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Sync beim Absteigen senden: Wenn aktiviert, wird das Sync-Signal jedes Mal gesendet, wenn sich der Zustand von Oszillator 1 von hoch nach niedrig ändert, z.B. wenn sich die Amplitude von 1 nach -1 ändert. Die Tonhöhe, Phase und Pulsweite von Oszillator 1 können das Timing von Syncs beeinflussen, aber die Lautstärke hat keinen Effekt darauf. Sync-Signale werden unabhängig vom linken und rechten Kanal gesendet. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Hard sync: Jedes Mal, wenn der Oszillator ein sync-Signal von Oszillator 1 empfäng, wird die Phase auf 0 zurückgesetzt, egal was die Phasendifferenz ist. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Reverse sync: Jedes Mal, wenn der Oszillator ein sync-Signal von Oszillator 1 empfäng, wird die Amplitude des Oszillators invertiert. Choose waveform for oscillator 2. Wellenform für Oszillator 2 auswählen. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Wellenform für den ersten Unter-Oszillator von Oszillator 3 auswählen. Oszillator 3 kann gleitend zwischen zwei verschiedenen Wellenformen interpolieren. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Wellenform für den zweiten Unter-Oszillator von Oszillator 3 auswählen. Oszillator 3 kann gleitend zwischen zwei verschiedenen Wellenformen interpolieren. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. Der SUB Regler ändert das Mischverhältnis der beiden Unter-Oszillatoren von Oszillator 3. Jeder Unter-Oszillator kann auf eine andere Wellenform eingestellt werden und Oszillator 3 kann zwischen diesen gleitend interpolieren. Alle eingehenden Modulationen zu Oszillator 3 werden auf beide Unter-Oszillator/Wellenformen auf gleiche Weise angewandt. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. Mix-Modus bedeutet keine Modulation: Die Ausgaben der Oszillatoren werden einfach zusammengemischt. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. AM bedeutet Amplituden-Modulation: Die Amplitude (Lautstärke) von Oszillator 3 wird durch Oszillator 2 moduliert. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. FM bedeutet Frequenz-Modulation: Die Frequenz (Tonhöhe) von Oszillator 3 wird durch Oszillator 2 Moduliert. Die Frequenz-Modulation ist als Phasen-Modulation implementiert, was eine stabielere Gesamttonhöhe erzeugt, als »reine« Frequenz-Modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren. PM bedeutet Phasen-Modulation: Die Phase von Oszillator 3 wird durch Oszillator 2 moduliert. Es unterscheidet sich von der Frequenz-Modulation dadurch, dass die Phasenänderungen nicht zunehmend sind. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Die Wellenform für LFO 1 auswählen. »Zufällig« und »Zufällig gleitend« sind spzielle Wellenformen: Sie erzeugen zufällige Ausgabe, wobei die Rate des LFO kontrolliert, wie oft sich der Zustand des LFO ändert. Die gleitende Version intrpoliert zwischen diesen Zuständen mit Cosinus-Interpolation. Diese zufälligen Modi können benutzt werden um Ihren Presets »Leben« zu geben - Etwas von der analogen Unberechenbarkeit hinzuzufügen… Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Die Wellenform für LFO 2 auswählen. »Zufällig« und »Zufällig gleitend« sind spzielle Wellenformen: Sie erzeugen zufällige Ausgabe, wobei die Rate des LFO kontrolliert, wie oft sich der Zustand des LFO ändert. Die gleitende Version intrpoliert zwischen diesen Zuständen mit Cosinus-Interpolation. Diese zufälligen Modi können benutzt werden um Ihren Presets »Leben« zu geben - Etwas von der analogen Unberechenbarkeit hinzuzufügen… Attack causes the LFO to come on gradually from the start of the note. Anschwellzeit verursacht, dass der LFO allmählich vom Anfang der Note angeht. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. Rate setzt die Geschwindigkeit des LFO, in Millisekunden pro Durchlauf gemessen. Kann zum Tempo synchronisiert werden. PHS controls the phase offset of the LFO. PHS kontrolliert die Phasenverschiebung des LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. PRE, oder Vor-Verzögerung, verzögert den Beginn der Hüllkurve vom Anfang der Note. 0 bedeutet keine Verzögerung. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. ATT, oder Anschwellzeit, kontrolliert wie schnell die Hüllkurve am Anfang steigt, in Millisekunden gemessen. Ein Wert von 0 bedeutet sofort. HOLD controls how long the envelope stays at peak after the attack phase. HOLD kontrolliert, wie lange die Hüllkurve nach der Anschwellphase an der Spitze bleibt. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. DEC, oder Abschwellzeit, kontrolliert, wie schnell die Hüllkurve von ihrer Spitze auf Null abfällt, in Millisekunden gemessen. Die tatsächliche Abschwellzeit ist möglicherweise kürzer, wenn Dauerpegel benutzt wird. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. SUS, oder Dauerpegel, kontrolliert den Dauerpgel der Hüllkurve. Die Abfall-Phase geht nicht unter diesen Pegel, solange die Note gehalten wird. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. REL, oder Ausklingzeit, kontrolliert, wie lange die Ausklingzeit für die Note von ihrer Spitze auf Null ist, gemessen in Millisekunden. Die tatsächliche Ausklingzeit ist möglicherweise kürzer, abhängig davon, in welcher Phase die Note losgelassen wird. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. Der Neigung-Regler kontrolliert die Kurve oder Form der Hüllkurve. Ein Wert von 0 erzeugt einen direkten Anstieg und Abfall. Negative Werte erzeugen Kurven, die langsam starten, schnell die Spitze erreichen und wieder langsam abfallen. Positive Werte erzeugen Kurven, die schnell starten und enden und länger in der Nähe der Spitze bleiben. NesInstrument Channel 1 Coarse detune Kanal 1 Grob-Verstimmung Channel 1 Volume Kanal 1 Lautstärke Channel 1 Envelope length Kanal 1 Hüllkurvenlänge Channel 1 Duty cycle Kanal 1 Tastgrad Channel 1 Sweep amount Kanal 1 Streichmenge Channel 1 Sweep rate Kanal 1 Streichrate Channel 2 Coarse detune Kanal 2 Grob-Verstimmung Channel 2 Volume Kanal 2 Lautstärke Channel 2 Envelope length Kanal 2 Hüllkurvenlänge Channel 2 Duty cycle Kanal 2 Tastgrad Channel 2 Sweep amount Kanal 2 Streichmenge Channel 2 Sweep rate Kanal 2 Streichrate Channel 3 Coarse detune Kanal 3 Grob-Verstimmung Channel 3 Volume Kanal 3 Lautstärke Channel 4 Volume Kanal 4 Lautstärke Channel 4 Envelope length Kanal 4 Hüllkurvenlänge Channel 4 Noise frequency Kanal 4 Rauschfrequenz Channel 4 Noise frequency sweep Kanal 4 Rauschfrequenz-Streichen Master volume Master-Lautstärke Vibrato Vibrato OscillatorObject Osc %1 volume Oszillator %1 Lautstärke Osc %1 panning Oszillator %1 Balance Osc %1 coarse detuning Oszillator %1 Grob-Verstimmung Osc %1 fine detuning left Oszillator %1 Fein-Verstimmung links Osc %1 fine detuning right Oszillator %1 Fein-Verstimmung rechts Osc %1 phase-offset Oszillator %1 Phasenverschiebung Osc %1 stereo phase-detuning Oszillator %1 Stereo Phasenverschiebung Osc %1 wave shape Oszillator %1 Wellenform Modulation type %1 Modulationsart %1 Osc %1 waveform Oszillator %1 Wellenform Osc %1 harmonic Oszillator %1 Harmonie PatmanView Open other patch Andere Patch-Datei öffnen Click here to open another patch-file. Loop and Tune settings are not reset. Klicken Sie hier, um eine andere Patch-Datei zu laden. Wiederholungs- und Stimmungseinstellungen werden nicht zurückgesetzt. Loop Wiederholen Loop mode Modus beim Wiederholen Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Hier können Sie den Wiederholen-Modus (de-)aktivieren. Wenn aktiviert, verwendet PatMan die in der Datei verfügbaren Informationen zum Wiederholen. Tune Stimmung Tune mode Stimmungsmodus Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Hier können Sie den Stimmungs-Modus (de-)aktivieren. Wenn aktiviert, wird der Klang automatisch an die Frequenz der Note angepasst. No file selected Keine Datei ausgewählt Open patch file Patch-Datei öffnen Patch-Files (*.pat) Patch-Dateien (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Doppelklick, um dieses Pattern im Piano-Roll zu öffnen Lautstärke eines Schritts kann mit dem Mausrad geändert werden Open in piano-roll Im Piano-Roll öffnen Clear all notes Alle Noten löschen Reset name Name zurücksetzen Change name Name ändern Add steps Schritte hinzufügen Remove steps Schritte entfernen PeakController Peak Controller Peak Controller Peak Controller Bug Peak Controller Fehler Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. Aufgrud eines Fehlers in einer älteren Version von LMMS, sind die Peak Controller möglicherweise nicht richtig verbunden. Bitte stellen Sie sicher, dass die Peak Controller richtig verbunden sind und speichern Sie die Datei erneut. Entschuldigung für jegliche verursachte Unannehmlichkeiten. PeakControllerDialog PEAK PEAK LFO Controller LFO-Controller PeakControllerEffectControlDialog BASE BASE Base amount: Grundstärke: Modulation amount: Modulationsintensität: Attack: Anschwellzeit (attack): Release: Ausklingzeit (release): AMNT AMNT MULT MULT Amount Multiplicator: Stärkenmultiplikator: ATCK ATCK DCAY DCAY PeakControllerEffectControls Base value Grundwert Modulation amount Modulationsintensität Mute output Ausgang stummschalten Attack Anschwellzeit (attack) Release Ausklingzeit (release) Abs Value Absoluter Wert Amount Multiplicator Stärkenmultiplikator PianoRoll Cut selected notes (Ctrl+X) Ausgewählte Noten ausschneiden (Strg+X) Copy selected notes (Ctrl+C) Ausgewählte Noten kopieren (Strg+C) Paste notes from clipboard (Ctrl+V) Noten aus Zwischenablage einfügen (Strg+V) Play/pause current pattern (Space) Aktuellen Pattern abspielen/pausieren (Leertaste) Stop playing of current pattern (Space) Abspielen des aktuellen Patterns stoppen (Leertaste) Piano-Roll - %1 Piano-Roll - %1 Piano-Roll - no pattern Piano-Roll - Kein Pattern Please open a pattern by double-clicking on it! Bitte öffnen Sie einen Pattern, indem Sie ihn doppelklicken! Record notes from MIDI-device/channel-piano Noten von MIDI-Gerät/Kanal-Klavier aufnehmen Last note Letzte Note Draw mode (Shift+D) Zeichnenmodus (Umschalt+D) Erase mode (Shift+E) Radiermodus (Umschalt+E) Select mode (Shift+S) Auswahl-Modus (Umschalt+S) Record notes from MIDI-device/channel-piano while playing song or BB track Noten vom MIDI-Gerät/Kanal-Klavier aufnehmen während der Song oder BB-Track abgespielt wird Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Klicken Sie hier, um den aktuellen Pattern abzuspielen. Das ist nützlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn sein Ende erreicht ist. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Klicken Sie hier, um Noten von einem MIDI-Gerät oder dem virtuellen Test-Klavier des zugehörigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und hinterher können Sie diese abspielen und bearbeiten. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Klicken Sie hier, um Noten von einem MIDI-Gerät oder dem virtuellen Test-Klavier des zugehörigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und Sie werden den Song oder die BB-Spur im Hintergrund hören. Click here to stop playback of current pattern. Klicken Sie hier, um die Wiedergabe des aktuellen Patterns zu stoppen. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klicken Sie hier, um die markierten Noten in die Zwischenablage auszuschneiden. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Klicken Sie hier, um die markierten Noten in die Zwischenablage zu kopieren. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. Click here and the notes from the clipboard will be pasted at the first visible measure. Klicken Sie hier, um die Noten aus der Zwischenablage im ersten sichtbaren Takt einzufügen. Note lock Notenraster Note Volume Noten-Lautstärke Note Panning Noten-Balance Detune mode (Shift+T) Verstimmungsmodus (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie Noten hinzufügen, in der Länge ändern und verschieben. Das ist der Standardmodus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen. Halten Sie in diesem Modus Strg gedrückt, um vorübergehend in den Auswahlmodus zu wechslen. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Noten löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Klicken Sie hier, um den Auswahlmodus zu aktivieren. In diesem Modus können Sie einzelne Noten auswählen. Alternativ können Sie auch Strg im Zeichnenmodus gedrückt halten, um vorrübergehend den Auswahlmodus zu benutzen. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Klicken Sie hier und der Verstimmungmodus wird aktivert. In diesem Modus können Sie auf eine Note klicken, um die Automations-Verstimmung zu öffnen. Sie können diese benutzen, um von einer Note in eine andere zu rutschen. Sie können auch »Umschalt+T« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. Mark/unmark current semitone Aktuellen Halbton markieren/demarkieren Mark current scale Aktuelle Tonleiter markieren Mark current chord Aktuellen Akkord markieren Unmark all Alles Markierungen entfernen No scale Keine Tonleiter No chord Kein Akkord Volume: %1% Lautstärke: %1% Panning: %1% left Balance: %1% links Panning: %1% right Balance: %1% rechts Panning: center Balance: mittig Please enter a new value between %1 and %2: Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. Dies kontrolliert die Vergrößerung einer Axe. Es kann hilfreich für bestimmte Aufgaben sein, eine Vergrößerung auszuwählen. Für normales Bearbeiten, sollte die Vergrößerung an Ihre kleinsten Noten angepasst sein. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. Das »Q« steht für Quantisierung und kontrolliert die Rastergröße an denen Noten und Kontrollpunkte einrasten. Mit kleineren Quantisierungswerten können Sie kleinere Noten im Piano Roll und exaktere Kontrollpunkte im Automation-Editor eintragen. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited Dies lässt Sie die Länge von neuen Noten auswählen. »Letzte Note« bedeutet, dass LMMS die Länge der Note benutz, die Sie als letzes bearbeitet haben. The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Diese Funktion ist direkt mit dem Kontextmenü auf dem virtuellen Keyboard, links im Piano Roll, verbunden. Nachdem Sie die Tonleiter ausgewählt haben, die Sie im Aufklapp-Menü haben möchten, können Sie auf eine gewünschte Taste auf dem virtuellen Keyboard einen Rechtsklick machen und »Aktuelle Tonleiter markieren« auswählen. LMMS markiert dann alle Noten, die zu dieser Tonleiter und Taste gehören, die Sie ausgewählt haben! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Lässt Sie einen Akkord auswählen, den LMMS dann eintragen oder markieren kann. Sie können die am häufigsten benutzten Akkorde in diesem Aufklapp-Menü finden. Nachdem Sie einen Akkord ausgewählt haben, klicken Sie irgendwo hin, um den Akkord dort zu platzieren oder machen Sie einen Rechtsklick auf dem virtuellen Keyboard, um das Kontextmenü zu öffnen und den Akkord zu makieren. Um Noten wieder einzeln einzutragen, müssen Sie »Kein Akkord« in diesem Aufklapp-Menü auswählen. PianoView Base note Grundton Plugin Plugin not found Plugin nicht gefunden The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Das Plugin »%1« konnte nicht gefunden oder geladen werden! Grund: »%2« Error while loading plugin Fehler beim Laden des Plugins Failed to load plugin "%1"! Das Plugin »%1« konnte nicht geladen werden! LMMS plugin %1 does not have a plugin descriptor named %2! LMMS Plugin %1 hat keinen Plugin-Deskriptor namens %2! PluginBrowser Instrument plugins Instrument-Plugins Instrument browser Instrument-Browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Ziehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur. ProjectRenderer WAV-File (*.wav) WAV-Datei (*.wav) Compressed OGG-File (*.ogg) Komprimierte OGG-Datei (*.ogg) QObject C Note name C Db Note name Db C# Note name C# D Note name D Eb Note name Eb D# Note name D# E Note name E Fb Note name Fb Gb Note name Gb F# Note name F# G Note name G Ab Note name Ab G# Note name G# A Note name A Bb Note name B A# Note name A# B Note name H QWidget Name: Name: Maker: Hersteller: Copyright: Copyright: Requires Real Time: Benötigt Echtzeit: Yes Ja No Nein Real Time Capable: Echtzeitfähig: In Place Broken: Operationen nicht In-Place: Channels In: Eingangs-Kanäle: Channels Out: Ausgangs-Kanäle: File: Datei: File: %1 Datei: %1 SampleBuffer Open audio file Audiodatei öffnen Wave-Files (*.wav) Wave-Dateien (*.wav) OGG-Files (*.ogg) OGG-Dateien (*.ogg) DrumSynth-Files (*.ds) DrumSynth-Dateien (*.ds) FLAC-Files (*.flac) FLAC-Dateien (*.flac) SPEEX-Files (*.spx) SPEEX-Dateien (*.spx) VOC-Files (*.voc) VOC-Dateien (*.voc) AIFF-Files (*.aif *.aiff) AIFF-Dateien (*.aif *.aiff) AU-Files (*.au) AU-Dateien (*.au) RAW-Files (*.raw) RAW-Dateien (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) Alle Audiodateien (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample Doppelklick, um Sample zu wählen Delete (middle mousebutton) Löschen (mittlere Maustaste) Cut Ausschneiden Copy Kopieren Paste Einfügen Mute/unmute (<Ctrl> + middle click) Stumm/Laut schalten (<Strg> + Mittelklick) Set/clear record Aufnahme setzen/löschen SampleTrack Sample track Samplespur Volume Lautstärke SampleTrackView Track volume Lautstärke der Spur Channel volume: Kanal Lautstärke: VOL VOL SongEditor Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Klicken Sie hier, wenn Sie das Abspielen des Songs stoppen wollen. Der Song-Positions-Marker wird automatisch auf den Song-Anfang zurückgesetzt. Could not open file Konnte Datei nicht öffnen Could not write file Konnte Datei nicht schreiben Song-Editor Song-Editor Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Klicken Sie hier, wenn Sie Ihren ganzen Song abspielen wollen. Das Abspielen wird am Song-Positions-Marker (grün) gestartet. Sie können diesen auch während des Abspielens verschieben. Play song (Space) Song abspielen (Leertaste) Stop song (Space) Abspielen des Songs stoppen (Leertaste) Add beat/bassline Beat/Bassline hinzufügen Add sample-track Sample-Spur hinzufügen Draw mode Zeichenmodus Edit mode (select and move) Editier-Modus (auswählen und verschieben) Add automation-track Automation-Spur hinzufügen Record samples from Audio-device Samples vom Audiogerät aufnehmen Record samples from Audio-device while playing song or BB track Samples vom Audiogerät während der Wiedergabe des Songs oder BB-Tracks aufnehmen Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Konnte die Datei %1 nicht öffnen. Sie sind wahrscheinlich nicht berechtigt, diese Datei zu lesen. Bitte stellen Sie sicher, dass Sie wenigstens Leserechte auf diese Datei besitzen und versuchen es erneut. Error in file Fehler in Datei The file %1 seems to contain errors and therefore can't be loaded. Die Datei %1 scheint fehlerhaft zu sein und kann daher nicht geladen werden. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song Geschwindigkeit des Songs The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). Das Tempo eines Liedes wird in Beats pro Minute (BPM) angegeben. Wenn Sie das Tempo Ihres Songs ändern wollen, ändern Sie diesen Wert. Jeder Takt hat vier Schläge (Beats); das Tempo gibt also an, wie viele Takte / 4 innerhalb einer Minute gespielt werden sollen (bzw. wie viele Takte innerhalb von vier Minuten gespielt werden sollen). High quality mode High-Quality-Modus Master volume Master-Lautstärke master volume Master-Lautstärke Master pitch Master-Tonhöhe master pitch Master-Tonhöhe Value: %1% Wert: %1% Value: %1 semitones Wert: %1 Halbtöne Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. Konnte %1 nicht zum Schreiben öffnen. Sie sind wahrscheinlich nicht dazu berechtigt in diese Datei zu schreiben. Bitte stellen Sie sicher, dass Sie Schreibrechte für diese Datei haben und versuchen Sie es erneut. SpectrumAnalyzerControlDialog Linear spectrum Lineares Spektrum Linear Y axis Lineare Y-Achse SpectrumAnalyzerControls Linear spectrum Lineares Spektrum Linear Y axis Lineare Y-Achse Channel mode Kanalmodus TempoSyncKnob Tempo Sync Tempo-Synchronisation No Sync Keine Synchronisation Eight beats Acht Schläge Whole note Ganze Note Half note Halbe Note Quarter note Viertelnote 8th note Achtelnote 16th note 16tel Note 32nd note 32tel Note Custom... Benutzerdefiniert... Custom Benutzerdefiniert Synced to Eight Beats Mit acht Schlägen synchronisiert Synced to Whole Note Mit ganzer Note synchronisiert Synced to Half Note Mit halber Note synchronisiert Synced to Quarter Note Mit Viertelnote synchronisiert Synced to 8th Note Mit Achtelnote synchronisiert Synced to 16th Note Mit 16tel Note synchronisiert Synced to 32nd Note Mit 32tel Note synchronisiert TimeDisplayWidget click to change time units Klicken Sie hier, um die Zeiteinheit zu ändern TrackContainer Couldn't import file Datei konnte nicht importiert werden Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Es konnte kein Filter gefunden werden, um die Datei %1 zu importieren. Sie sollten diese Datei mit Hilfe anderer Software in ein von LMMS unterstützes Format umwandeln. Couldn't open file Datei konnte nicht geöffnet werden Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Datei %1 konnte nicht zum Lesen geöffnet werden. Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeichnis besitzen und probieren es erneut! Loading project... Lade Projekt… Cancel Abbrechen Please wait... Bitte warten… Importing MIDI-file... Importiere MIDI-Datei… Importing FLP-file... Importiere FLP-Datei… TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Phasenmodulation benutzen, um Oszillator 2 mit Oszillator 1 zu modulieren Use amplitude modulation for modulating oscillator 2 with oscillator 1 Amplitudenmodulation benutzen, um Oszillator 2 mit Oszillator 1 zu modulieren Mix output of oscillator 1 & 2 Mische Ausgang von Oszillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Synchronisiere Oszillator 1 mit Oszillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Frequenzmodulation benutzen, um Oszillator 2 mit Oszillator 1 zu modulieren Use phase modulation for modulating oscillator 3 with oscillator 2 Phasenmodulation benutzen, um Oszillator 3 mit Oszillator 2 zu modulieren Use amplitude modulation for modulating oscillator 3 with oscillator 2 Amplitudenmodulation benutzen, um Oszillator 3 mit Oszillator 2 zu modulieren Mix output of oscillator 2 & 3 Mische Ausgang von Oszillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Synchronisiere Oszillator 2 mit Oszillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Frequenzmodulation benutzen, um Oszillator 3 mit Oszillator 2 zu modulieren Osc %1 volume: Oszillator %1 Lautstärke: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Mit diesem Regler können Sie die Lautstärke von Oszillator %1 setzen. Wenn Sie einen Wert von 0 setzen, wird der Oszillator ausgeschaltet. Ansonsten können Sie ihn so laut hören, wie Sie es hier einstellen. Osc %1 panning: Oszillator %1 Balance: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Mit diesem Regler können Sie die Balance von Oszillator %1 setzen. Ein Wert von -100 heißt 100% links und ein Wert von 100 verschiebt den Oszillator-Ausgang nach rechts. Osc %1 coarse detuning: Oszillator %1 Grob-Verstimmung: semitones Halbtöne With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Mit diesem Regler können Sie die grobe Verstimmung von Oszillator %1 setzen. Sie können den Oszillator 12 Halbtöne (1 Oktave) nach oben und unten verstimmen. Das ist nützlich, wenn Sie einen Sound mit einem Akkord erstellen möchten. Osc %1 fine detuning left: Oszillator %1 Fein-Verstimmung links: cents Cent With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Mit diesem Regler können Sie die Fein-Verstimmung von Oszillator %1 für den linken Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist nützlich, um »fette« Sounds zu erzeugen. Osc %1 fine detuning right: Oszillator %1 Fein-Verstimmung rechts: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Mit diesem Regler können Sie die Fein-Verstimmung von Oszillator %1 für den rechten Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist nützlich, um »fette« Sounds zu erzeugen. Osc %1 phase-offset: Oszillator %1 Phasenverschiebung: degrees Grad With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Mit diesem Regler können Sie die Phasenverschiebung von Oszillator %1 setzen. Das heißt, Sie können den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinuswelle haben und eine Phasenverschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteckwelle zu. Osc %1 stereo phase-detuning: Oszillator %1 Stereo Phasenverschiebung: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Mit diesem Regler können Sie die Stereo Phasenverschiebung von Oszillator %1 setzen. Die Stereo Phasenverschiebung gibt die Differenz zwischen den Phasenverschiebungen zwischen dem linken und rechten Kanal an. Dies eignet sich gut, um großräumig-klingende Stereo-Klänge zu erzeugen. Use a sine-wave for current oscillator. Sinuswelle für aktuellen Oszillator nutzen. Use a triangle-wave for current oscillator. Dreieckwelle für aktuellen Oszillator nutzen. Use a saw-wave for current oscillator. Sägezahnwelle für aktuellen Oszillator nutzen. Use a square-wave for current oscillator. Rechteckwelle für aktuellen Oszillator nutzen. Use a moog-like saw-wave for current oscillator. Moog-ähnliche Sägezahnwelle für aktuellen Oszillator nutzen. Use an exponential wave for current oscillator. Exponentielle Welle für aktuellen Oszillator nutzen. Use white-noise for current oscillator. Weißes Rauschen für aktuellen Oszillator nutzen. Use a user-defined waveform for current oscillator. Benutzerdefinierte Wellenform für aktuellen Oszillator nutzen. VersionedSaveDialog Increment version number Versionsnummer erhöhen Decrement version number Versionsnummer vermindern VestigeInstrumentView Open other VST-plugin Anderes VST-Plugin laden Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Klicken Sie hier, um ein anderes VST-Plugin zu öffnen. Nachdem Sie auf diesen Knopf geklickt haben, erscheint ein Datei-öffnen-Dialog und Sie können Ihre Datei wählen. Show/hide GUI GUI zeigen/verstecken Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Klicken Sie hier, um die grafische Oberfläche (GUI) Ihres VST-Plugins anzuzeigen bzw. zu verstecken. Turn off all notes Alle Noten ausschalten Open VST-plugin VST-Plugin öffnen DLL-files (*.dll) DLL-Dateien (*.dll) EXE-files (*.exe) EXE-Dateien (*.exe) No VST-plugin loaded Kein VST-Plugin geladen Control VST-plugin from LMMS host VST-Plugin von LMMS fernsteuern Click here, if you want to control VST-plugin from host. Klicken Sie hier, um das VST-Plugin von LMMS aus fernzusteuern. Open VST-plugin preset VST-Plugin-Preset öffnen Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Klicken Sie hier, um eine andere *.fxp, *.fxb-Preset-Datei für das VST-Plugin zu laden. Previous (-) Vorheriges (-) Save preset Preset speichern Next (+) Nächstes (+) Click here to select presets that are currently loaded in VST. Klicken Sie hier, um aktuell geladene VST-Presets auszuwählen. Preset Preset Click here, if you want to switch to another VST-plugin preset program. Klicken Sie hier, um zu einem anderen VST-Plugin-Presetprogramm zu wechseln. Click here, if you want to save current VST-plugin preset program. Klicken Sie hier, um das aktuelle VST-Plugin-Presetprogramm zu speichern. by von - VST plugin control - VST Plugin Controller VstEffectControlDialog Control VST-plugin from LMMS host VST-Plugin von LMMS fernsteuern Click here, if you want to control VST-plugin from host. Klicken Sie hier, um das VST-Plugin von LMMS aus fernzusteuern. Open VST-plugin preset VST-Plugin-Preset öffnen Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Klicken Sie hier, um eine andere *.fxp, *.fxb-Preset-Datei für das VST-Plugin zu laden. Previous (-) Vorheriges (-) Next (+) Nächstes (+) Click here to select presets that are currently loaded in VST. Klicken Sie hier, um aktuell geladene VST-Presets auszuwählen. Save preset Preset speichern Click here, if you want to switch to another VST-plugin preset program. Klicken Sie hier, um zu einem anderen VST-Plugin-Presetprogramm zu wechseln. Click here, if you want to save current VST-plugin preset program. Klicken Sie hier, um das aktuelle VST-Plugin-Presetprogramm zu speichern. Show/hide Anzeigen/ausblenden Effect by: Effekt von: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Lade Plugin Open Preset Preset öffnen Vst Plugin Preset (*.fxp *.fxb) VST-Plugin-Preset (*.fxp *.fxb) : default : Standard " " ' ' Save Preset Preset speichern .fxp .fxp .FXP .FXP .FXB .FXB .fxb .fxb Please wait while loading VST plugin... Bitte warten, während das VST-Plugin geladen wird… Failed loading VST plugin Laden des VST-Plugins fehlgeschlagen The VST plugin %1 could not be loaded for some reason. Das VST-Plugin %1 konnte aus irgend einem Grund nicht geladen werden. WatsynInstrument Volume A1 Lautstärke A1 Volume A2 Lautstärke A2 Volume B1 Lautstärke B1 Volume B2 Lautstärke B2 Panning A1 Balance A1 Panning A2 Balance A2 Panning B1 Balance B1 Panning B2 Balance B2 Freq. multiplier A1 Frequenzmultiplikator-A1 Freq. multiplier A2 Frequenzmultiplikator-A2 Freq. multiplier B1 Frequenzmultiplikator-B1 Freq. multiplier B2 Frequenzmultiplikator-B2 Left detune A1 Links-Verstimmung A1 Left detune A2 Links-Verstimmung A2 Left detune B1 Links-Verstimmung B1 Left detune B2 Links-Verstimmung B2 Right detune A1 Rechts-Verstimmung A1 Right detune A2 Rechts-Verstimmung A2 Right detune B1 Rechts-Verstimmung B1 Right detune B2 Rechts-Verstimmung B2 A-B Mix A-B Mischung A-B Mix envelope amount A-B Mischung Hüllkurvenintensität A-B Mix envelope attack A-B Mischung Hüllkurvenanschwellzeit A-B Mix envelope hold A-B Mischung Hüllkurvenhaltezeit A-B Mix envelope decay A-B Mischung Hüllkurvenabfallzeit A1-B2 Crosstalk A1-B2 Überlagerung A2-A1 modulation A2-A1 Modulation B2-B1 modulation B2-B1 Modulation Selected graph Ausgewählter Graph WatsynView Select oscillator A1 Oszilator A1 auswählen Select oscillator A2 Oszilator A2 auswählen Select oscillator B1 Oszilator B1 auswählen Select oscillator B2 Oszilator B2 auswählen Mix output of A2 to A1 Mische Ausgang von A2 zu A1 Modulate amplitude of A1 with output of A2 Amplitude von A1 mit der Ausgabe von A2 modulieren Ring-modulate A1 and A2 A1 und A2 ringmodulieren Modulate phase of A1 with output of A2 Phase von A1 mit der Ausgabe von A2 modulieren Mix output of B2 to B1 Mische Ausgang von B2 zu B1 Modulate amplitude of B1 with output of B2 Amplitude von B1 mit der Ausgabe von B2 modulieren Ring-modulate B1 and B2 B1 und B2 ringmodulieren Modulate phase of B1 with output of B2 Phase von B1 mit der Ausgabe von B2 modulieren Draw your own waveform here by dragging your mouse on this graph. Zeichnen Sie heier eigene Wellenformen, indem Sie die Maus über den Graph ziehen. Load waveform Wellenform laden Click to load a waveform from a sample file Klicken Sie hier, um eine Wellenform aus einer Sampledatei zu laden Phase left Nach links verschieben Click to shift phase by -15 degrees Klicken Sie hier, um die Phase um -15 Grad zu verscheiben Phase right Nach rechts verschieben Click to shift phase by +15 degrees Klicken Sie hier, um die Phase um +15 Grad zu verscheiben Normalize Normalisieren Click to normalize Klicken zum Normalisieren Invert Invertieren Click to invert Klicken zum Invertieren Smooth Glätten Click to smooth Klicken zum Glätten Sine wave Sinuswelle Click for sine wave Klicken für Sinuswelle Triangle wave Dreieckwelle Click for triangle wave Klicken für Dreieckwelle Click for saw wave Klicken für Sägezahnwelle Square wave Rechteckwelle Click for square wave Klicken für Rechteckwelle ZynAddSubFxInstrument Portamento Portamento Filter Frequency Filterfrequenz Filter Resonance Filterresonanz Bandwidth Bandbreite FM Gain FM-Verstärkung Resonance Center Frequency Zentrale Resonanzfrequenz Resonance Bandwidth Resonanzbandbreite Forward MIDI Control Change Events MIDI-Control-Change-Ereignisse weiterleiten ZynAddSubFxView Show GUI GUI anzeigen Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Klicken Sie hier, um die grafische Oberfläche von ZynAddSubFX anzuzeigen bzw. auszublenden. Portamento: Portamento: PORT PORT Filter Frequency: Filterfrequenz: FREQ FREQ Filter Resonance: Filterresonanz: RES RES Bandwidth: Bandbreite: BW BW FM Gain: FM-Verstärkung: FM GAIN FM GAIN Resonance center frequency: Zentrale Resonanzfrequenz: RES CF RES CF Resonance bandwidth: Resonanzbandbreite: RES BW RES BW Forward MIDI Control Changes MIDI-Control-Änderungen weiterleiten audioFileProcessor Amplify Verstärkung Start of sample Sample-Anfang End of sample Sample-Ende Reverse sample Sample umkehren Stutter Stottern Loopback point Wiederholungspunkt Loop mode Wiederholungsmodus Interpolation mode Interpolationsmodus None Keiner Linear Linear Sinc Sinc bbEditor Play/pause current beat/bassline (Space) Aktuellen Beat/Bassline abspielen/pausieren (Leertaste) Beat+Bassline Editor Beat+Bassline Editor Add beat/bassline Beat/Bassline hinzufügen Add automation-track Automation-Spur hinzufügen Stop playback of current beat/bassline (Space) Abspielen des aktuellen Beats/Bassline stoppen (Leertaste) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Klicken Sie hier, um den aktuelle Beat/Bassline abzuspielen. Der Beat/Bassline wird am Ende automatisch wiederholt. Click here to stop playing of current beat/bassline. Klicken Sie hier, um das Abspielen des aktuellen Beats/Bassline zu stoppen (Leertaste). Remove steps Schritte entfernen Add steps Schritte hinzufügen bbTCOView Open in Beat+Bassline-Editor Im Beat+Bassline-Editor öffnen Reset name Name zurücksetzen Change name Name ändern Change color Farbe ändern Reset color to default Farbe auf Standard zurücksetzen bbTrack Beat/Bassline %1 Beat/Bassline %1 Clone of %1 Klon von %1 bitInvader Samplelength Sample-Länge bitInvaderView Sample Length Sample-Länge Sine wave Sinuswelle Triangle wave Dreieckwelle Saw wave Sägezahnwelle Square wave Rechteckwelle White noise wave Weißes Rauschen User defined wave Benutzerdefinierte Welle Smooth Glätten Click here to smooth waveform. Klicken Sie hier, um die Wellenform zu glätten. Interpolation Interpolation Normalize Normalisieren Draw your own waveform here by dragging your mouse on this graph. Zeichnen Sie eigene Wellenformen, indem Sie die Maus über den Graph ziehen. Click for a sine-wave. Klick für eine Sinuswelle. Click here for a triangle-wave. Klick für eine Dreieckwelle. Click here for a saw-wave. Klick für eine Sägezahnwelle. Click here for a square-wave. Klick für eine Rechteckwelle. Click here for white-noise. Klick für weißes Rauschen. Click here for a user-defined shape. Klick für eine benutzerdefinierte Wellenform. captionMenu &Help &Hilfe Help (not available) Hilfe (nicht verfügbar) dynProcControlDialog INPUT INPUT Input gain: Eingangsverstärkung: OUTPUT OUTPUT Output gain: Ausgabeverstärkung: ATTACK ATTACK Peak attack time: Spitzen Anschwellzeit: RELEASE RELEASE Peak release time: Spitzen Ausklingzeit: Reset waveform Wellenform zurücksetzen Click here to reset the wavegraph back to default Klicken Sie hier, um den Wellengraph zum Standard zurückzusetzen Smooth waveform Wellenform glätten Click here to apply smoothing to wavegraph Klicken Sie hier, um den Wellengraph zu glätten Increase wavegraph amplitude by 1dB Die Amplitude des Wellengraphs um 1dB erhöhen Click here to increase wavegraph amplitude by 1dB Klicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu erhöhen Decrease wavegraph amplitude by 1dB Die Amplitude des Wellengraphs um 1dB vermindern Click here to decrease wavegraph amplitude by 1dB Klicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu vermindern Stereomode Maximum Stereomodus Maximum Process based on the maximum of both stereo channels Basierend auf dem Maximum beider Stereokanäle verarbeiten Stereomode Average Stereomodus Durchschnitt Process based on the average of both stereo channels Basierend auf dem Durchschnitt beider Stereokanäle verarbeiten Stereomode Unlinked Stereomodus Unverknüpft Process each stereo channel independently Jeden Stereokanal unabhängig verarbeiten dynProcControls Input gain Eingangsverstärkung Output gain Ausgabeverstärkung Attack time Anschwellzeit Release time Ausklingzeit Stereo mode Stereomodus exportProjectDialog Could not open file Konnte Datei nicht öffnen Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Die Datei %1 konnte nicht zum Schreiben geöffnet werden. Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeichnis, das diese Datei enthält, besitzen und versuchen es erneut! Error Fehler Error while determining file-encoder device. Please try to choose a different output format. Fehler beim Bestimmen des Datei-Enkoder-Geräts. Bitte wählen Sie ein anderes Ausgabeformat. Rendering: %1% Rendere: %1% Export project to %1 Projekt nach %1 exportieren fader Please enter a new value between %1 and %2: Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: graphModel Graph Graph kickerInstrument Start frequency Startfrequenz End frequency Endfrequenz Gain Gain Length Länge Distortion Start Verzerrungsanfang Distortion End Verzerrungsende Envelope Slope Hüllkurvenneigung Noise Rauschen Click Klick Frequency Slope Frequenzabfall Start from note Starte bei Note End to note Ende bei Note kickerInstrumentView Start frequency: Startfrequenz: End frequency: Endfrequenz: Gain: Gain: Frequency Slope: Frequenzabfall: Envelope Length: Hüllkurvenlänge: Envelope Slope: Hüllkurvenneigung: Click: Klick: Noise: Rauschen: Distortion Start: Verzerrungsanfang: Distortion End: Verzerrungsende: knob Please enter a new value between %1 and %2: Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: Please enter a new value between -96.0 dBV and 6.0 dBV: Bitte geben Sie einen Wert zwischen -96.0 dBV und 6.0 dBV ein: Set linear Linear einstellen Set logarithmic Logarithmisch einstellen ladspaBrowserView Available Effects Verfügbare Effekte Unavailable Effects Nicht verfügbare Effekte Instruments Instrumente Analysis Tools Analysewerkzeuge Don't know Weiß nicht This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Dieser Dialog zeigt Informationen zu allen LADSPA Plugins an, dieLMMS gefunden hat. Die Plugins werden in fünf Kategorien eingeteilt, basierend auf der Interpretation der Porttypen und Namen. Verfügbare Effekte sind die, die von LMMS benutzt werden können. Um in LMMS einen Effekt benutzen zu können, muss er vor allem ein Effekt sein, was bedeutet, dass er beides, Eingabe- und Ausgabekanäle, haben muss. LMMS identifiziert Eingabekanäle als einen Audioport, der »in« im Namen enthält. Ausgabekanäle werden durch die Buchstaben »out« identifizert. Des weiteren muss der Effekt die gleiche Anzahl an Ein- und Ausgängen besitzen und muss echtzeitfähig sein. Nicht verfügbare Effekte sind die, die als Effekt identifiziert wurden, aber entweder nicht die gleiche Anzahl an Ein- und Ausgabekanälen besizen oder nicht echtzeitfähig sind. Instrumente sind Plugins, für die nur Ausgabekanäle identifiziert wurden. Analysewerkzeuge sind Plugins, für die nur Eingabekanäle identifiziert wurden. Weiß nicht sind Plugins, für die kein Ein- oder Ausgabekanal identifiziert wurde. Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an. Type: Typ: ladspaDescription Plugins Plugins Description Beschreibung ladspaPortDialog Name Name Rate Rate Direction Richtung Type Typ Min < Default < Max Min < Standard < Max Logarithmic Logarithmisch SR Dependent SR-abhängig Audio Audio Control Steuerung Input Eingang Output Ausgang Toggled Umgeschaltet Integer Ganzahl Float Kommazahl Yes Ja Ports Ports lb302Synth VCF Cutoff Frequency VCF-Kennfrequenz VCF Resonance VCF-Resonanz VCF Envelope Mod VCF-Hüllkurvenintensität VCF Envelope Decay VCF-Hüllkurvenabfallzeit Slide Slide Accent Betonung Dead Stumpf Slide Decay Slide-Abfallzeit Distortion Verzerrung Waveform Wellenform 24dB/oct Filter 24db/Okt Filter lb302SynthView Cutoff Freq: Kennfrequenz: Resonance: Resonanz: Env Mod: Hüllkurven-Modulation: Decay: Abfallzeit (decay): 303-es-que, 24dB/octave, 3 pole filter Slide Decay: Slide-Abfallzeit: DIST: DIST: Saw wave Sägezahnwelle Click here for a saw-wave. Klick für eine Sägezahnwelle. Triangle wave Dreieckwelle Click here for a triangle-wave. Klick für eine Dreieckwelle. Square wave Rechteckwelle Click here for a square-wave. Klick für eine Rechteckwelle. Rounded square wave Abgerundete Rechteckwelle Click here for a square-wave with a rounded end. Klick für eine abgerundete Rechteckwelle. Moog wave Moog-Welle Click here for a moog-like wave. Klick für eine Moog-ähnliche Welle. Sine wave Sinuswelle Click for a sine-wave. Klick für eine Sinuswelle. White noise wave Weißes Rauschen Click here for an exponential wave. Klick für eine exponentielle-Welle. Click here for white-noise. Klick für weißes Rauschen. Bandlimited saw wave Bandbegrenzte Sägezahnwelle Click here for bandlimited saw wave. Klick für eine bandbegrenzte Sägezahnwelle. Bandlimited square wave Bandbegrenzte Rechteckwelle Click here for bandlimited square wave. Klick für eine bandbegrenzte Rechteckwelle. Bandlimited triangle wave Bandlimittierte Dreieckwelle Click here for bandlimited triangle wave. Klick für eine bandbegrenzte Dreieckwelle. Bandlimited moog saw wave Bandbegrenzte Moog-Sägezahnwelle Click here for bandlimited moog saw wave. Klick für eine bandbegrenzte Moog-Sägezahnwelle. lb303Synth VCF Cutoff Frequency VCF-Kennfrequenz VCF Resonance VCF-Resonanz VCF Envelope Mod VCF-Hüllkurvenintensität VCF Envelope Decay VCF-Hüllkurvenabfallzeit Distortion Verzerrung Waveform Wellenform Slide Decay Slide-Abfallzeit Slide Slide Accent Betonung Dead Stumpf 24dB/oct Filter 24db/Okt Filter lb303SynthView Cutoff Freq: Kennfrequenz: CUT FREQ Resonance: Resonanz: RES RES Env Mod: Hüllkurven-Modulation: ENV MOD ENV-MOD Decay: Abfallzeit (decay): DEC DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: Slide-Abfallzeit: SLIDE SLIDE DIST: DIST: DIST DIST WAVE: Wellenform: WAVE WELLE malletsInstrument Marimba Marimba Vibraphone Vibraphon Agogo Agogo Wood1 Holz 1 Reso Reso Wood2 Holz 2 Beats Beats Two Fixed Two Fixed Clump Clump Tubular Bells Glocken in Röhre Uniform Bar Uniform Bar Tuned Bar Tuned Bar Glass Glas Tibetan Bowl Tibetanische Schüssel Hardness Härte Position Position Vibrato Gain Vibrato Gain Vibrato Freq Vibrato-Freq Stick Mix Stick Mix Modulator Modulator Crossfade Crossfade LFO Speed LFO-Geschwindigkeit LFO Depth LFO-Tiefe ADSR ADSR Pressure Druck Motion Bewegung Speed Geschwindigkeit Bowed Gestrichen Spread Weite Missing files Fehlende Dateien Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Ihre Stk-Installation scheint unvollständig zu sein. Bitte stellen Sie sicher, dass das volle Stk-Paket installiert ist! malletsInstrumentView Instrument Instrument Spread Weite Spread: Weite: Hardness Härte Hardness: Härte: Position Position Position: Position: Vib Gain Vib Gain Vib Gain: Vib Gain: Vib Freq Vib-Freq Vib Freq: Vib-Freq: Stick Mix Stick Mix Stick Mix: Stick Mix: Modulator Modulator Modulator: Modulator: Crossfade Crossfade Crossfade: Crossfade: LFO Speed LFO-Geschwindigkeit LFO Speed: LFO-Geschwindigkeit: LFO Depth LFO-Tiefe LFO Depth: LFO-Tiefe: ADSR ADSR ADSR: ADSR: Bowed Gestrichen Pressure Druck Pressure: Druck: Motion Bewegung Motion: Bewegung: Speed Geschwindigkeit Speed: Geschwindigkeit: Vibrato Vibrato Vibrato: Vibrato: manageVSTEffectView VST Sync VST-Sync Click here if you want to synchronize all parameters with VST plugin. Klicken Sie hier, um alle Parameter mit dem VST-Plugin zu synchronisieren. - VST parameter control - VST Parameter Controller Automated Automatisiert Click here if you want to display automated parameters only. Klicken Sie hier, wenn Sie nur automatisierte Parameter anzeigen möchten. Close Schließen Close VST effect knob-controller window. VST Effekt Regler-Controllerfenster schließen. manageVestigeInstrumentView VST Sync VST-Sync Click here if you want to synchronize all parameters with VST plugin. Klicken Sie hier, um alle Parameter mit dem VST-Plugin zu synchronisieren. - VST plugin control - VST Plugin Controller Automated Automatisiert Click here if you want to display automated parameters only. Klicken Sie hier, wenn Sie nur automatisierte Parameter anzeigen möchten. Close Schließen Close VST plugin knob-controller window. VST Effekt Regler-Controllerfenster schließen. opl2instrument Patch Patch Op 1 Attack Op 1 Anschwellzeit Op 1 Decay Op 1-Abfallzeit Op 1 Sustain Op 1 Dauerpegel Op 1 Release Op 1 Ausklingzeit Op 1 Level Op 1 Strärke Op 1 Level Scaling Op 1 Stärkenskalierung Op 1 Frequency Multiple Op 1 Frequenzmultiplikator Op 1 Feedback Op 1 Rückkopplung Op 1 Key Scaling Rate Op 1 Tonart Skalierungsrate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Tremolo Op 1 Vibrato Op 1 Vibrato Op 1 Waveform Op 1 Wellenform Op 2 Attack Op 2 Anschwellzeit Op 2 Decay Op 2-Abfallzeit Op 2 Sustain Op 2 Dauerpegel Op 2 Release Op 2 Ausklingzeit Op 2 Level Op 2 Strärke Op 2 Level Scaling Op 2 Stärkenskalierung Op 2 Frequency Multiple Op 2 Frequenzmultiplikator Op 2 Key Scaling Rate Op 2 Tonart Skalierungsrate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Tremolo Op 2 Vibrato Op 2 Vibrato Op 2 Waveform Op 2 Wellenform FM FM Vibrato Depth Vibrato-Tiefe Tremolo Depth Tremolo-Tiefe organicInstrument Distortion Verzerrung Volume Lautstärke organicInstrumentView Osc %1 volume: Oszillator %1 Lautstärke: Randomise Zufallswerte Osc %1 waveform: Oszillator %1 Wellenform: Osc %1 panning: Oszillator %1 Balance: cents Cent Distortion: Verzerrung: Volume: Lautstärke: The distortion knob adds distortion to the output of the instrument. Der Verzerrungsregler fügt Verzerrung zur Ausgabe des Instruments hinzu. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. Der Lautstärkeregler kontrolliert die Lautstärke des Instruments. Er ist gleich dem Lautstärkeregler des Instrumentenfensters. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Der Zufallsknopf setzt alle Regler auf zufällige Werte, außer den Harmonien, der Hauptlautstärke und den Verzerrungsreglern. Osc %1 stereo detuning Oszillator %1 Stereo Verstimmung Osc %1 harmonic: Oszillator %1 Harmonie: papuInstrument Sweep time Streichzeit Sweep direction Streichrichtung Sweep RtShift amount Wave Pattern Duty Channel 1 volume Kanal 1 Lautstärke Volume sweep direction Lautstärken-Streichrichtung Length of each step in sweep Länge jedes Schritts beim Streichen Channel 2 volume Kanal 2 Lautstärke Channel 3 volume Kanal 3 Lautstärke Channel 4 volume Kanal 4 Lautstärke Right Output level Rechter Ausgabelevel Left Output level Linker Ausgabelevel Channel 1 to SO2 (Left) Kanal 1 zu SO2 (Links) Channel 2 to SO2 (Left) Kanal 2 zu SO2 (Links) Channel 3 to SO2 (Left) Kanal 3 zu SO2 (Links) Channel 4 to SO2 (Left) Kanal 4 zu SO2 (Links) Channel 1 to SO1 (Right) Kanal 1 zu SO1 (Rechts) Channel 2 to SO1 (Right) Kanal 2 zu SO1 (Rechts) Channel 3 to SO1 (Right) Kanal 3 zu SO1 (Rechts) Channel 4 to SO1 (Right) Kanal 4 zu SO1 (Rechts) Treble Höhe Bass Bass Shift Register width Schieberegister-Breite papuInstrumentView Sweep Time: Streichzeit: Sweep Time Streichzeit Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Quadratkanal 1 Lautstärke: Length of each step in sweep: Länge jedes Schritts beim Streichen: Length of each step in sweep Länge jedes Schritts beim Streichen Wave pattern duty Square Channel 2 Volume: Quadratkanal 2 Lautstärke: Square Channel 2 Volume Quadratkanal 2 Lautstärke Wave Channel Volume: Wellenkanal Lautstärke: Wave Channel Volume Wellenkanal Lautstärke Noise Channel Volume: Rauschkanal Lautstärke: Noise Channel Volume Rauschkanal Lautstärke SO1 Volume (Right): SO1 Lautstärke (Rechts): SO1 Volume (Right) SO1 Lautstärke (Rechts) SO2 Volume (Left): SO2 Lautstärke (Links): SO2 Volume (Left) SO2 Lautstärke (Links) Treble: Höhe: Treble Höhe Bass: Bass: Bass Bass Sweep Direction Streichrichtung Volume Sweep Direction Lautstärken-Streichrichtung Shift Register Width Schieberegister-Breite Channel1 to SO1 (Right) Kanal1 zu SO1 (Rechts) Channel2 to SO1 (Right) Kanal2 zu SO1 (Rechts) Channel3 to SO1 (Right) Kanal3 zu SO1 (Rechts) Channel4 to SO1 (Right) Kanal4 zu SO1 (Rechts) Channel1 to SO2 (Left) Kanal1 zu SO2 (Links) Channel2 to SO2 (Left) Kanal2 zu SO2 (Links) Channel3 to SO2 (Left) Kanal3 zu SO2 (Links) Channel4 to SO2 (Left) Kanal4 zu SO2 (Links) Wave Pattern Wellenmuster The amount of increase or decrease in frequency Die Menge an Erhöhung oder Verminderung in der Frequenz The rate at which increase or decrease in frequency occurs Die Rate, mit der Erhöhung oder Verminderung in der Frequenz geschieht The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Der Tastgrad ist das Verhältnis der Dauter (Zeit), in dem das Signal AN ist, im Gegensatz zur gesamten Periodendauer des Signals. Square Channel 1 Volume Quadratkanal 1 Lautstärke The delay between step change Die Verzögerung zwischen Schrittänderung Draw the wave here Die Welle hier zeichnen pluginBrowser VST-host for using VST(i)-plugins within LMMS VST-Host zum Benutzen von VST(i)-Plugins innerhalb von LMMS no description keine Beschreibung Additive Synthesizer for organ-like sounds Additiver Synthesizer für orgelähnliche Klänge Vibrating string modeler Modellierung schwingender Saiten Filter for importing MIDI-files into LMMS Filter, um MIDI-Dateien in LMMS zu importieren Filter for importing FL Studio projects into LMMS Filter für Import von FL Studio Projekten in LMMS Tuneful things to bang on Gegenstände, die nach etwas klingen, wenn man drauf rumkloppt plugin for using arbitrary LADSPA-effects inside LMMS. Plugin, um beliebige LADSPA-Effekte in LMMS nutzen zu können. Incomplete monophonic imitation tb303 Unvollständiger monophonischer TB303-Klon GUS-compatible patch instrument GUS-kompatibles Patch-Instrument Plugin for enhancing stereo separation of a stereo input file Plugin zur Erweiterung des Stereo-Klangeindrucks List installed LADSPA plugins Installierte LADSPA-Plugins auflisten Plugin for freely manipulating stereo output Plugin zur freien Manipulation der Stereoausgabe Plugin for controlling knobs with sound peaks Plugin zur Kontrolle von Knöpfen mit Hilfe von Klangspitzen Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Emulation des MOS6581 und MOS8580 SID Chips. Dieser Chip wurde in Commodore 64 Computern genutzt. Player for SoundFont files Wiedergabe von SoundFont-Dateien Emulation of GameBoy (TM) APU Emulation des GameBoy (TM) APU Customizable wavetable synthesizer Flexibler Wavetable-Synthesizer Embedded ZynAddSubFX Eingebettetes ZynAddSubFX-Plugin 2-operator FM Synth 2-Operator FM-Synth Filter for importing Hydrogen files into LMMS Filter zum importieren von Hydrogendateien in LMMS LMMS port of sfxr LMMS-Portierung von sfxr plugin for processing dynamics in a flexible way Ein Plugin, um Dynamik auf Flexible Weise zu verarbeiten A native amplifier plugin Ein natives Verstärker-Plugin Graphical spectrum analyzer plugin Graphisches Spektrumanalyzer Plugin A NES-like synthesizer Ein NES ähnlicher Synthesizer Boost your bass the fast and simple way Verstärken Sie Ihren Bass auf schnellen und einfachen Wege 4-oscillator modulatable wavetable synth 4-Oszillator modulierbarer Wellenformtabellen Synth plugin for waveshaping Plugin für Wellenformen Monstrous 3-oscillator synth with modulation matrix Monströser 3-Oszillator Synth mit Modulationsmatrix plugin for using arbitrary VST effects inside LMMS. Plugin um beliebige VST-Effekte in LMMS zu benutzen. Versatile drum synthesizer Vielseitiger Trommel-Synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track Einfacher Sampler mit verschiedenen Einstellungen zum Benutzen von Samples (z.B. Trommeln) in einer Instrumentenspur Three powerful oscillators you can modulate in several ways Drei mächtige Oszillatoren, die Sie auf mehrere Weisen modulieren können Carla Rack Instrument Carla Rack Instrument Carla Patchbay Instrument Carla Patchbay Instrument A native delay plugin Ein natives Verzögerung-Plugin projectNotes Put down your project notes here. Schreiben Sie hier Ihre Projekt-Notizen auf. Project notes Projekt-Notizen Edit Actions Bearbeiten &Undo &Rückgängig Ctrl+Z Strg+Z &Redo Wiede&rholen Ctrl+Y Strg+Y &Copy &Kopieren Ctrl+C Strg+C Cu&t A&usschneiden Ctrl+X Strg+X &Paste &Einfügen Ctrl+V Strg+V Format Actions Formatierung &Bold &Fett Ctrl+B Strg+F &Italic &Kursiv Ctrl+I Strg+K &Underline &Unterstrichen Ctrl+U Strg+U &Left &Links Ctrl+L Strg+L C&enter Z&entriert Ctrl+E Strg+Z &Right &Rechts Ctrl+R Strg+R &Justify &Blocksatz Ctrl+J Strg+J &Color... &Farbe... renameDialog Rename... Umbenennen... setupDialog Setup LMMS Einrichtung von LMMS General settings Allgemeine Einstellungen BUFFER SIZE PUFFERGRÖSSE Reset to default-value Auf Standardwert zurücksetzen MISC VERSCHIEDENES Audio settings Audio-Einstellungen AUDIO INTERFACE AUDIO-SCHNITTSTELLE MIDI settings MIDI-Einstellungen MIDI INTERFACE MIDI-SCHNITTSTELLE OK OK Cancel Abbrechen Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Hier können Sie die interne Puffergröße einstellen, die von LMMS genutzt wird. Kleinere Werte machen sich in einer geringeren Latenz bemerkbar, können aber auch zu unbrauchbarem Sound oder schlechter Performance führen, vor allem auf älteren Computern oder Systemen mit einem Nicht-Echtzeit-Kernel. Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Hier können Sie Ihre bevorzugte Audio-Schnittstelle auswählen. Abhängig von der Konfiguration Ihres Systems während der Compilierung können Sie zwischen ALSA, JACK, OSS und mehr wählen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewählte Audio-Schnittstelle einzurichten. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Hier können Sie Ihre bevorzugte MIDI-Schnittstelle auswählen. Abhängig von der Konfiguration Ihres Systems während der Compilierung können Sie zwischen ALSA, OSS und mehr wählen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewählte MIDI-Schnittstelle einzurichten. Restart LMMS LMMS neustarten Please note that most changes won't take effect until you restart LMMS! Bitte beachten Sie, dass die meisten Änderungen erst wirksam werden, nachdem Sie LMMS neugestartet haben! LMMS working directory LMMS-Arbeitsverzeichnis VST-plugin directory VST-Plugin-Verzeichnis Choose LMMS working directory LMMS-Arbeitsverzeichnis wählen Choose your VST-plugin directory Wählen Sie Ihre VST-Plugin-Verzeichnis Performance settings Performance-Einstellungen UI effects vs. performance UI-Effekte vs. Performance Frames: %1 Latency: %2 ms Frames: %1 Latenz: %2 ms Artwork directory Artwork-Verzeichnis Choose artwork-theme directory Artwork-Verzeichnis wählen Display volume as dBV Lautstärke in dBV anzeigen FL Studio installation directory FL Studio Installationsverzeichnis Choose FL Studio installation directory FL Studio Installationsverzeichnis wählen STK rawwave directory STK RawWave-Verzeichnis Choose LADSPA plugin directory Wählen Sie Ihr LADSPA-Plugin-Verzeichnis Choose STK rawwave directory Wählen Sie Ihr STK-RawWave-Verzeichnis Enable tooltips Tooltips aktivieren Show restart warning after changing settings Meldung nach Schließen dieses Dialogs zeigen Compress project files per default Projektdateien standardmäßig komprimieren HQ-mode for output audio-device HQ-Modus für Ausgabe-Audiogerät Paths Pfade LADSPA plugin paths LADSPA-Pluginpfade Default Soundfont File Standard SoundFont-Datei Background artwork Hintergrundbild Choose default SoundFont Standard-Soundfont wählen Choose background artwork Hintergrundbild wählen One instrument track window mode Instrumente im Ein-Fenster-Modus Compact track buttons Kompakte Spur-Knöpfe Smooth scroll in Song Editor Weiches Scrollen im Song-Editor Sync VST plugins to host playback VST Plugins mit der Host-Wiedergabe synchronisieren Enable note labels in piano roll Notenbeschriftung in Piano-Roll aktivieren Enable waveform display by default Wellenform standardmäßig anzeigen Enable auto save feature Automatisches Speichern aktivieren Show playback cursor in AudioFileProcessor Wiedergabe-Courser im AudioFileProcessor anzeigen setupWidget OSS (Open Sound System) OSS (Open Sound System) SDL (Simple DirectMedia Layer) SDL (Simple DirectMedia Layer) ALSA-Sequencer (Advanced Linux Sound Architecture) ALSA-Sequencer (Advanced Linux Sound Architecture) JACK (JACK Audio Connection Kit) JACK (JACK Audio Connection Kit) ALSA Raw-MIDI (Advanced Linux Sound Architecture) ALSA Raw-MIDI (Advanced Linux Sound Architecture) PulseAudio (bad latency!) PulseAudio (Schlechte Latenz!) Dummy (no sound output) Dummy (Keine Soundausgabe) Dummy (no MIDI support) Dummy (Keine MIDI-Unterstützung) WinMM MIDI WinMM MIDI OSS Raw-MIDI (Open Sound System) OSS Raw-MIDI (Open Sound System) ALSA (Advanced Linux Sound Architecture) ALSA (Advanced Linux Sound Architecture) PortAudio PortAudio sf2Instrument Bank Bank Patch Patch Gain Gain Reverb Hall Reverb Roomsize Hall/Raumgröße Reverb Damping Hall/Dämpfung Reverb Width Hall/Weite Reverb Level Hall/Stärke Chorus Chorus Chorus Lines Chorus/Anzahl Chorus Level Chorus/Stärke Chorus Speed Chorus/Geschwindigkeit Chorus Depth Chorus/Tiefe sf2InstrumentView Open other SoundFont file Eine andere SoundFont-Datei öffnen Click here to open another SF2 file Klicken Sie hier, um eine andere SF2-Datei zu öffnen Choose the patch Patch wählen Open SoundFont file SoundFont-Datei öffnen Gain Gain Apply reverb (if supported) Hall anwenden (wenn unterstützt) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Dieser Knopf aktiviert den Hall-Effekt, welcher jedoch nur mit Dateien funktioniert, die dies unterstützen. Reverb Roomsize: Hall/Raumgröße: Reverb Damping: Hall/Dämpfung: Reverb Width: Hall/Weite: Reverb Level: Reverb/Stärke: Apply chorus (if supported) Chorus-Effekt anwenden (wenn unterstützt) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Dieser Knopf aktiviert den Chorus-Effekt. Das ist nützlich für Echo-Effekte, funktioniert jedoch nur mit Dateien, die dies unterstützen. Chorus Lines: Chorus/Anzahl: Chorus Level: Chorus/Stärke: Chorus Speed: Chorus/Geschwindigkeit: Chorus Depth: Chorus/Tiefe: SoundFont2 Files (*.sf2) SoundFont2-Dateien (*.sf2) sfxrInstrument Wave Form Wellenform sidInstrument Cutoff Kennfrequenz Resonance Resonanz Filter type Filtertyp Voice 3 off Stimme 3 lautlos Volume Lautstärke Chip model Chipmodell sidInstrumentView Volume: Lautstärke: Resonance: Resonanz: Cutoff frequency: Kennfrequenz: High-Pass filter Hochpass-Filter Band-Pass filter Bandpass-Filter Low-Pass filter Tiefpass-Filter Voice3 Off Stimme 3 lautlos MOS6581 SID MOS6581 SID MOS8580 SID MOS8580 SID Attack: Anschwellzeit (attack): Decay: Abfallzeit (decay): Sustain: Dauerpegel (sustain): Release: Ausklingzeit (release): Pulse Width: Pulsweite: Coarse: Grob: Pulse Wave Puls-Signal Triangle Wave Dreieckwelle SawTooth Sägezahnwelle Noise Rauschen Sync Synchron Ring-Mod Ringmodulation Filtered Gefiltert Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Anschwellzeit gibt an, wie schnell die Ausgabe von Stimme %1 von Null zur Spitzenamplitude anschwellt. Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Abfallzeit gibt an, wie schnell die Ausgabe von der Spitzenamplitude bis zum ausgewählten Dauerpegel fällt. Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Die Ausgabe von Stimme %1 wird solange bei dem ausgewählten Dauerpegel verbleiben, wie die Note gehalten wird. The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Die Ausgabe von Stimme %1 wird vom Dauerpegel mit der ausgewählten Ausklingzeit auf Null abfallen. The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Die Pulsweitenauflösung ermöglicht es die Weite gleitend, ohne erkennbare Schritte zu ändern. Die Puls-Wellenform von Oszillator %1 muss ausgewählt werden, um eine hörbaren Effekt zu haben. The Coarse detuning allows to detune Voice %1 one octave up or down. Die Grob-Verstimmung ermöglicht es die Stimme %1 um eine Oktave nach oben oder unten zu verstimmen. Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Sync synchronisiert die Grundfrequenz von Oszillator %1 mit der Grundfrequenz von Oszillator %2, was einen »Hard Sync« Effekt hervorruft. Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Ringmodus ersetzt die Dreieck-Wellenfrom-Ausgabe von Oszillator %1 mit einer ringmodulierten Kombination der Oszillatoren %1 und %2. When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Wenn gefilter an ist, wird Stimme %1 durch den Filter verarbeitet. Wenn gefiltert aus ist, wird Stimme %1 direckt an die Ausgabe weitergeleitet und der Filter hat keine Auswirkung darauf. Test Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Test, wenn aktiviert, wird Oszillator %1 zurückgesetzt und auf Null gesperrt, bis Test ausgeschaltet wird. song Project saved Projekt gespeichert The project %1 is now saved. Das Projekt %1 ist nun gespeichert. Project NOT saved. Projekt NICHT gespeichert. The project %1 was not saved! Das Projekt %1 wurde nicht gespeichert! Import file Datei importieren untitled unbenannt Select file for project-export... Datei für Projekt-Export wählen... Tempo Tempo Master volume Master-Lautstärke Master pitch Master-Tonhöhe Empty project Leeres Projekt This project is empty so exporting makes no sense. Please put some items into Song Editor first! DIeses Projekt ist leer, weshalb das Exportieren keinen Sinn macht. Bitte erstellen Sie erst ein paar Einträge im Song-Editor! MIDI sequences MIDI-Dateien FL Studio projects FL Studio Projekte All file types Alle Dateitypen Hydrogen projects Hydrogen-Projekte Select directory for writing exported tracks... Wählen Sie einen Ordner zum schreiben der exportierten Spuren aus… stereoEnhancerControlDialog WIDE WEITE Width: Weite: stereoEnhancerControls Width Weite stereoMatrixControlDialog Left to Left Vol: Links-nach-links Lautstärke: Left to Right Vol: Links-nach-rechts Lautstärke: Right to Left Vol: Rechts-nach-links Lautstärke: Right to Right Vol: Rechts-nach-rechts Lautstärke: stereoMatrixControls Left to Left Links-nach-links Left to Right Links-nach-rechts Right to Left Rechts-nach-links Right to Right Rechts-nach-rechts tabWidget Settings for %1 Einstellungen für %1 timeLine Enable/disable auto-scrolling Automatisches Scrollen aktivieren/deaktivieren Enable/disable loop-points Loop-Punkte aktivieren/deaktivieren After stopping go back to begin Nach Stop zum Anfang zurückkehren After stopping go back to position at which playing was started Nach Stop zur Position zurückkehren, an der es los ging After stopping keep position Nach Stop Position beibehalten Hint Tipp Press <Ctrl> to disable magnetic loop points. Drücken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. Halten Sie <Umschalt>, um den Anfangs-Loop-Punkt zu verschieben; Drücken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren. track Muted Stumm Solo Solo trackContentObject Muted Stumm trackContentObjectView Current position Aktuelle Position Hint Tipp Current length Aktuelle Länge Press <Ctrl> for free resizing. Drücken Sie <Strg> für freie Größenänderung. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 bis %5:%6) Delete (middle mousebutton) Löschen (mittlere Maustaste) Cut Ausschneiden Copy Kopieren Paste Einfügen Mute/unmute (<Ctrl> + middle click) Stumm/Laut schalten (<Strg> + Mittelklick) Press <Ctrl> and drag to make a copy. <Strg> drücken und ziehen, um eine Kopie zu erstellen. trackOperationsWidget Clone this track Diese Spur klonen Remove this track Diese Spur entfernen Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Drücken Sie <Strg> während des Klicks auf den Verschiebe-Griff, um eine neue Klicken und Ziehen-Aktion zu beginnen. Actions for this track Aktionen für diese Spur Mute Stumm Mute this track Diese Spur stummschalten Solo Solo Turn all recording on Alle Aufnahmen einschalten Turn all recording off Alle Aufnahmen ausschalten Clear this track Diese Spur leeren vestigeInstrument Failed loading VST-plugin Laden des VST-Plugins fehlgeschlagen The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! Das VST-Plugin %1 konnte aus irgendeinem Grund nicht geladen werden. Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitte einen LMMS-Entwickler! Loading plugin Lade Plugin Please wait while loading VST-plugin... Bitte warten, während das VST-Plugin geladen wird… vibed String %1 volume Seite %1 Lautstärke String %1 stiffness Seite %1 Härte Pick %1 position Zupf-Position %1 Pickup %1 position Abnehmer-Position %1 Pan %1 Balance %1 Detune %1 Verstimmung %1 Fuzziness %1 Unschärfe %1 Length %1 Länge %1 Impulse %1 Impuls %1 Octave %1 Oktave %1 vibedView Volume: Lautstärke: The 'V' knob sets the volume of the selected string. Der »V«-Regler setzt die Lautstärke der gewählten Saite. String stiffness: Härte der Saite: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Der »S«-Regler setzt die Härte der gewählten Saite. Die Härte der Saite beeinflusst deren Ausklang-Dauer. Je kleiner die Einstellung, desto länger klingt die Saite aus. Pick position: Zupf-Position: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Der »P«-Regler bestimmt die Position, an der die Saite angezupft wird. Je kleiner die Einstellung, desto näher wird am Steg gezupft. Pickup position: Abnehmer-Position: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Der »PU«-Regler bestimmt die Position, an der die Schwingungen an der gewählten Saite abgenommen werden. Je kleiner die Einstellung, desto näher ist der Abnehmer am Steg. Pan: Balance: The Pan knob determines the location of the selected string in the stereo field. Der Balance-Regler bestimmt den Ort der gewählten Saite im Stereo-Raum. Detune: Verstimmung: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Der Verstimmungs-Regler verändert die Tonhöhe der gewählten Saite. Einstellungen kleiner als 0 lassen die Saite flacher klingen, während Werte über 0 zu einem eher scharfen Klang führen. Fuzziness: Unschärfe: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Der Unschärfe-Regler fügt dem Klang der Saite etwas »Fuzz« hinzu, welcher hauptsächlich während des Anschlages zum Tragen kommt, wenngleich er auch genutzt werden kann, um den Klang etwas metallischer zu gestalten. Length: Länge: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Der Länge-Regler bestimmt die Länge der gewählten Saite. Längere Saiten klingen länger und klingen heller, wobei sie gleichzeitig auch mehr CPU-Leistung fressen. Impulse or initial state Impuls oder Grundstellung The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Mit dem »Imp«-Knopf legen Sie fest, ob die Wellenform in diesem Graph als Impuls zum Anzupfen der Saite oder als Grundstellung für die Saite genutzt werden soll. Octave Okatve The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Mit dem Oktaven-Wähler kann der Oktavenversatz gegenüber der Note verändert werden. So meint beispielsweise eine Einstellung von »-2«, dass die Saite zwei Oktaven unterhalb des Grundtons (»F«) schwingen wird und »6« dementsprechend 6 Oktaven über dem Grundton. Impulse Editor Impuls-Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Der Wellenform-Editor ermöglicht die Kontrolle über die Grundstellung oder den Impuls, der genutzt wird, um die Saite zum Schwingen zu bringen. Die Knöpfe rechts des Graphes initialisieren die Wellenform mit dem gewünschten Typ. Der »?«-Knopf lässt Sie eine Wellenform aus einer Datei laden - allerdings werden nur die ersten 128 Samples geladen. Die Wellenform kann ebenfalls in dem Graph gezeichnet werden. Der »S«-Knopf glättet die Wellenform. Der »N«-Knopf normalisiert die Wellenform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modelliert bis zu 9 unabhängige schwingende Saiten. Der Saiten-Wähler ermöglicht die Wahl der gerade aktiven Saite. Der »Imp«-Knopf bestimmt, ob der Graph einen Impuls oder die Grundstellung der Saite repräsentiert. Der Oktaven-Wähler gibt den Oktavenversatz der Saite gegenüber dem Grundton an. Der Graph ermöglicht die Kontrolle über die Grundstellung der Saite oder den Impuls, der zum Anzupfen der Saite genutzt wird. Der »V«-Regler bestimmt die Lautstärke. Mit dem »S«-Regler wird die Härte der Saite eingestellt. Der »P«-Regler beeinflusst den Ort, an dem die Saite angezupft wird, während der »PU«-Regler die Position des Abnehmers bestimmt. »Balance« und »Verstimmung« bedürfen hoffentlich keiner Erklärung. Der Unschärfe-Regler fügt dem Klang der Saite etwas »Fuzz« hinzu. Der Länge-Regler bestimmt die Länge der Saite. Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist. Enable waveform Wellenform aktivieren Click here to enable/disable waveform. Hier klicken, um die Wellenform zu aktivieren/deaktiveren. String Saite The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Der Saiten-Wähler bestimmt die derzeit bearbeitete Saite. Ein Vibed-Instrument kann aus bis zu neun voneinander unabhängig schwingenden Saiten bestehen. Die LED in der Ecke rechts unterhalb der Wellenform gibt an, ob die gewählte Saite aktiv ist. Sine wave Sinuswelle Triangle wave Dreieckwelle Saw wave Sägezahnwelle Square wave Rechteckwelle White noise wave Weißes Rauschen User defined wave Benutzerdefinierte Welle Smooth Glätten Click here to smooth waveform. Klicken Sie hier, um die Wellenform zu glätten. Normalize Normalisieren Click here to normalize waveform. Hier klicken, um die Wellenform zu normalisieren. Use a sine-wave for current oscillator. Sinuswelle für aktuellen Oszillator nutzen. Use a triangle-wave for current oscillator. Dreieckwelle für aktuellen Oszillator nutzen. Use a saw-wave for current oscillator. Sägezahnwelle für aktuellen Oszillator nutzen. Use a square-wave for current oscillator. Rechteckwelle für aktuellen Oszillator nutzen. Use white-noise for current oscillator. Weißes Rauschen für aktuellen Oszillator nutzen. Use a user-defined waveform for current oscillator. Benutzerdefinierte Wellenform für aktuellen Oszillator nutzen. visualizationWidget click to enable/disable visualization of master-output klicken, um Visualisierung des Masterausgangs an-/auszuschalten Click to enable Klick zur Aktivierung voiceObject Voice %1 pulse width Stimme %1 Pulsweite Voice %1 attack Stimme %1 Anschwellzeit Voice %1 decay Stimme %1 Abfallzeit Voice %1 sustain Stimme %1 Haltepegel Voice %1 release Stimme %1 Release Voice %1 coarse detuning Stimme %1 Grob-Verstimmung Voice %1 wave shape Stimme %1 Wellenform Voice %1 sync Stimme %1 Sync Voice %1 ring modulate Stimme %1 Ringmodulation Voice %1 filtered Stimme %1 gefiltert Voice %1 test Stimme %1 Test waveShaperControlDialog INPUT INPUT Input gain: Eingangsverstärkung: OUTPUT OUTPUT Output gain: Ausgabeverstärkung: Reset waveform Wellenform zurücksetzen Click here to reset the wavegraph back to default Klicken Sie hier, um den Wellengraph zum Standard zurückzusetzen Smooth waveform Wellenform glätten Click here to apply smoothing to wavegraph Klicken Sie hier, um den Wellengraph zu glätten Increase graph amplitude by 1dB Die Amplitude des Wellengraphs um 1dB erhöhen Click here to increase wavegraph amplitude by 1dB Klicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu erhöhen Decrease graph amplitude by 1dB Die Amplitude des Wellengraphs um 1dB vermindern Click here to decrease wavegraph amplitude by 1dB Klicken Sie hier, um die Amplitude des Wellengraphs um 1dB zu vermindern Clip input Eingang begrenzen Clip input signal to 0dB Eingangssignal auf 0dB begrenzen waveShaperControls Input gain Eingangsverstärkung Output gain Ausgabeverstärkung lmms-1.1.3/data/locale/en.qm000066400000000000000000000000201247673406200156000ustar00rootroot00000000000000 AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers LMMS <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> AmplifierControlDialog VOL Volume: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Panning Left gain Right gain AudioAlsa::setupWidget DEVICE CHANNELS AudioFileProcessorView Open other sample Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Amplify: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: Endpoint: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME CHANNELS AudioOss::setupWidget DEVICE CHANNELS AudioPortAudio::setupWidget BACKEND DEVICE AudioPulseAudio::setupWidget DEVICE CHANNELS AudioSdl::setupWidget DEVICE AutomatableModel &Reset (%1%2) &Copy value (%1%2) &Paste value (%1%2) Edit song-global automation Connected to %1 Connected to controller Edit connection... Remove connection Connect to controller... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Stop playing of current pattern (Space) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. Draw mode (Shift+D) Erase mode (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) Copy selected values (Ctrl+C) Paste values from clipboard (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern Automation Editor - %1 Please open an automation pattern with the context menu of a control! Values copied All selected values were copied to the clipboard. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Open in Automation editor Clear Reset name Change name %1 Connections Disconnect "%1" Set/clear record AutomationTrack Automation track BassBoosterControlDialog FREQ Frequency: GAIN Gain: RATIO Ratio: BassBoosterControls Frequency Gain Ratio CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 ControllerConnectionDialog Connection Settings MIDI CONTROLLER Input channel CHANNEL Input controller CONTROLLER Auto Detect MIDI-devices to receive MIDI-events from USER CONTROLLER MAPPING FUNCTION OK Cancel LMMS Cycle Detected. ControllerRackView Controller Rack Add Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Controllers are able to automate the value of a knob, slider, and other controls. Rename controller Enter the new name for this controller &Remove this plugin &Help DelayControls Delay Samples Feedback Lfo Frequency Lfo Amount DelayControlsDialog Delay Delay Time Samples: Feedback Feedback Amount: Lfo Hz Lfo Hz: Lfo Amt Lfo Amt: DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Wet/Dry mix Gate Decay EffectChain Effects enabled EffectRackView EFFECTS CHAIN Add effect EffectSelectDialog Add effect Plugin description EffectView Toggles the effect on or off. On/Off W/D Wet Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY Time: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Move &down &Remove this plugin &Help EnvelopeAndLfoParameters Predelay Attack Hold Decay Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. ATT Attack: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. HOLD Hold: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. DEC Decay: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. SUST Sustain: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. REL Release: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. AMT Modulation amount: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. control envelope-amount by this LFO ms/LFO: Hint Drag a sample from somewhere and drop it in this window. Click here for random wave. ExportProjectDialog Export project Output File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help FxMixer Master FX %1 FxMixerView Rename FX channel Enter the new name for this FX channel FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio type Arpeggio range Arpeggio time Arpeggio gate Arpeggio direction Arpeggio mode Up Down Up and down Random Free Sort Sync Down and up InstrumentFunctionArpeggioView ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE Arpeggio range: octave(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME Arpeggio time: ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. GATE Arpeggio gate: % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: Mode: InstrumentFunctionNoteStacking octave Major Majb5 minor minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Melodic minor Whole tone Diminished Major pentatonic Minor pentatonic Jap in sen Major bebop Dominant bebop Blues Arabic Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Chord type Chord range Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE Chord range: octave(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME Volume CUTOFF Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Q/Resonance LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume Panning Pitch FX channel Default preset With this knob you can set the volume of the opened channel. Base note Pitch range InstrumentTrackView Volume Volume: VOL Panning Panning: PAN MIDI Input Output InstrumentTrackWindow GENERAL SETTINGS Instrument volume Volume: VOL Panning Panning: PAN Pitch Pitch: cents PITCH FX channel ENV/LFO FUNC FX MIDI Save preset XML preset file (*.xpf) PLUGIN Pitch range (semitones) RANGE Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels LadspaControlDialog Link Channels Channel LadspaControlView Link channels Value: Sorry, no help available. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD LFO-speed: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. &Project &New &Open... Recently opened projects &Save Save &As... Import... E&xport... &Quit &Edit Settings &Tools &Help Online help Help What's this? About Create new project Create new project from template Open existing project Recently opened project Save current project Export current project Show/hide Song-Editor By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack Untitled LMMS %1 Project not saved The current project was modified since last saving. Do you want to save it now? Open project Save project Help not available Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE MidiAlsaSeq::setupWidget DEVICE MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE MidiPort Input channel Output channel Input controller Output controller Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Send MIDI-events Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Vibrato OscillatorObject Osc %1 volume Osc %1 panning Osc %1 coarse detuning Osc %1 fine detuning left Osc %1 fine detuning right Osc %1 phase-offset Osc %1 stereo phase-detuning Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch Click here to open another patch-file. Loop and Tune settings are not reset. Loop Loop mode Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Tune Tune mode Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. No file selected Open patch file Patch-Files (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Open in piano-roll Clear all notes Reset name Change name Add steps Remove steps PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: Attack: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) Stop playing of current pattern (Space) Cut selected notes (Ctrl+X) Copy selected notes (Ctrl+C) Paste notes from clipboard (Ctrl+V) Piano-Roll - no pattern Piano-Roll - %1 Please open a pattern by double-clicking on it! Record notes from MIDI-device/channel-piano Record notes from MIDI-device/channel-piano while playing song or BB track Draw mode (Shift+D) Erase mode (Shift+E) Select mode (Shift+S) Last note Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: PianoView Base note Plugin Plugin not found The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Error while loading plugin Failed to load plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Compressed OGG-File (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Maker: Copyright: Requires Real Time: Yes No Real Time Capable: In Place Broken: Channels In: Channels Out: File: File: %1 SampleBuffer Open audio file Wave-Files (*.wav) OGG-Files (*.ogg) DrumSynth-Files (*.ds) FLAC-Files (*.flac) SPEEX-Files (*.spx) VOC-Files (*.voc) AIFF-Files (*.aif *.aiff) AU-Files (*.au) RAW-Files (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample Delete (middle mousebutton) Cut Copy Paste Mute/unmute (<Ctrl> + middle click) Set/clear record SampleTrack Sample track Volume SampleTrackView Track volume Channel volume: VOL SongEditor Song-Editor Play song (Space) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Stop song (Space) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Add beat/bassline Add sample-track Could not open file Could not write file Add automation-track Draw mode Edit mode (select and move) Record samples from Audio-device Record samples from Audio-device while playing song or BB track Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Tempo TEMPO/BPM tempo of song The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode Master volume master volume Master pitch master pitch Value: %1% Value: %1 semitones Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Linear Y axis SpectrumAnalyzerControls Linear spectrum Linear Y axis Channel mode TempoSyncKnob Tempo Sync No Sync Eight beats Whole note Half note Quarter note 8th note 16th note 32nd note Custom... &Help Custom Synced to Eight Beats Synced to Whole Note Synced to Half Note Synced to Quarter Note Synced to 8th Note Synced to 16th Note Synced to 32nd Note TimeDisplayWidget click to change time units TrackContainer Couldn't import file Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Couldn't open file Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Loading project... Cancel Please wait... Importing MIDI-file... Importing FLP-file... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Osc %1 panning: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Osc %1 coarse detuning: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Osc %1 fine detuning left: cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 fine detuning right: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 phase-offset: degrees With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Turn off all notes Open VST-plugin DLL-files (*.dll) EXE-files (*.exe) No VST-plugin loaded Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Click to normalize Invert Click to invert Smooth Click to smooth Sine wave Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify Start of sample End of sample Reverse sample Stutter Loopback point Loop mode Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Play/pause current beat/bassline (Space) Add beat/bassline Add automation-track Stop playback of current beat/bassline (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Click here to stop playing of current beat/bassline. Remove steps Add steps bbTCOView Open in Beat+Bassline-Editor Reset name Change name Change color Reset color to default bbTrack Beat/Bassline %1 Clone of %1 bitInvader Samplelength bitInvaderView Sample Length Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Interpolation Normalize Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Error Error while determining file-encoder device. Please try to choose a different output format. Rendering: %1% Export project to %1 fader Please enter a new value between %1 and %2: graphModel Graph kickerInstrument Start frequency End frequency Gain Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: End frequency: Gain: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help Please enter a new value between -96.0 dBV and 6.0 dBV: Please enter a new value between %1 and %2: ladspaBrowserView Available Effects Unavailable Effects Instruments Analysis Tools Don't know This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: ladspaDescription Plugins Description ladspaPortDialog Ports Name Rate Direction Type Min < Default < Max Logarithmic SR Dependent Audio Control Input Output Toggled Integer Float Yes lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Click here for a saw-wave. Triangle wave Click here for a triangle-wave. Square wave Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Click for a sine-wave. White noise wave Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Volume organicInstrumentView Distortion: Volume: Randomise Osc %1 waveform: Osc %1 volume: Osc %1 panning: cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description Instrument plugins Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins Filter for importing FL Studio projects into LMMS GUS-compatible patch instrument Additive Synthesizer for organ-like sounds Tuneful things to bang on VST-host for using VST(i)-plugins within LMMS Vibrating string modeler plugin for using arbitrary LADSPA-effects inside LMMS. Filter for importing MIDI-files into LMMS Instrument browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer A native delay plugin projectNotes Project notes Put down your project notes here. Edit Actions &Undo Ctrl+Z &Redo Ctrl+Y &Copy Ctrl+C Cu&t Ctrl+X &Paste Ctrl+V Format Actions &Bold Ctrl+B &Italic Ctrl+I &Underline Ctrl+U &Left Ctrl+L C&enter Ctrl+E &Right Ctrl+R &Justify Ctrl+J &Color... renameDialog Rename... setupDialog Setup LMMS General settings BUFFER SIZE Reset to default-value MISC Enable tooltips Show restart warning after changing settings Display volume as dBV Compress project files per default HQ-mode for output audio-device LMMS working directory VST-plugin directory Artwork directory FL Studio installation directory STK rawwave directory Performance settings UI effects vs. performance Audio settings AUDIO INTERFACE MIDI settings MIDI INTERFACE OK Cancel Restart LMMS Please note that most changes won't take effect until you restart LMMS! Frames: %1 Latency: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Choose LMMS working directory Choose your VST-plugin directory Choose artwork-theme directory Choose FL Studio installation directory Choose LADSPA plugin directory Choose STK rawwave directory Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Paths LADSPA plugin paths Default Soundfont File Background artwork Choose default SoundFont Choose background artwork One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Patch Gain Reverb Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Open other SoundFont file Click here to open another SF2 file Choose the patch Gain Apply reverb (if supported) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance Filter type Voice 3 off Volume Chip model sidInstrumentView Volume: Resonance: Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo Master volume Master pitch Project saved The project %1 is now saved. Project NOT saved. The project %1 was not saved! Import file untitled Select file for project-export... Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! MIDI sequences FL Studio projects All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling Enable/disable loop-points After stopping go back to begin After stopping go back to position at which playing was started After stopping keep position Hint Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Solo trackContentObject Muted trackContentObjectView Current position Hint Press <Ctrl> and drag to make a copy. Current length Press <Ctrl> for free resizing. %1:%2 (%3:%4 to %5:%6) Delete (middle mousebutton) Cut Copy Paste Mute/unmute (<Ctrl> + middle click) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Actions for this track Mute Mute this track Solo Clone this track Remove this track Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Please wait while loading VST-plugin... Failed loading VST-plugin The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: The 'V' knob sets the volume of the selected string. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pick position: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pickup position: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pan: The Pan knob determines the location of the selected string in the stereo field. Detune: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Length: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Enable waveform Click here to enable/disable waveform. String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Normalize Click here to normalize waveform. &Help Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/es.qm000066400000000000000000001130751247673406200156240ustar00rootroot00000000000000C(9e,9i,;e/=U-=Y.?U/J[8Jh:pA<pC<{A4G{Ei*)GY)IY*A+A.C/Ny[yk @0I74A75FWWFWCzy:l U>k Y>U?jb@d@#}1;/#}3;w(1*$*y *0*0*0$o*0GK*0c*0}*0~m*0v+++#+H+HF+į6u|9gi,W9kY,d.[@d/I;0Obz sS}A3S}C3SU6Sb6T.14UjUjDV[iVW\Wz,\}iųF!iųx~ių`szy?tU?tb@/v=N|}e;QfvMeNh!7?")Sק1=ק3># und"RI9'; &W@۴J.P09aUPtʭiwՙߺ]oba3|.Kr%:YGGC\!~K1J%ApI[Y*hOXc<Z.32]YlhlhCooB%|Zf|Z~}"X}4}5xOקA-קC-\{ =xչZY(W;:7=d Z#hL-jztIrJ9Vx0SIAI$1IdIZFZ?r >q  = p ~~8]~1ՔRE2hhCWV ua9 u| @_T\m%!Z7e47e6'7U5[?~3zEzDQE}o.Wzt6Þ,DEU[Zs|DQ ljXyNU*EgE 1U06{:8M9.ElG'Y"Y?FiZO9M72K{tW7; zy=] pB9a*GjUIUIUZ@qczfghF9w G/>0 dT6lS %: &U$$Ϟ3h3hBpG/y6nqHze5$%ZUdIhyyQy": $ ? 6E w'$ LUDK :_v: Fyb Se\ ]0r, ub wJgW )* A 1T G x ~mW ˔ Da ? Om0 u:I J  4yx Y: Y:F Y:R ~w iTJ " + X + R + -#? -#B =wO { { z 7 Ɉ8\  @u @uP @u{ J  1< 3W] V1 y7WO,Cgc` d=}>#ML eƳ2)i;Amplificar:Amplify:AudioFileProcessorViewPunto final: Endpoint:AudioFileProcessorViewSi activa este botn la muestra ser reproducida al revs. Esto es til para buenos efectos, como por ejemplo, golpes del revs.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorViewPunto inicial: Startpoint:AudioFileProcessorView(&Copiar valor (%1%2)&Copy value (%1%2)AutomatableModel&&Pegar valor (%1%2)&Paste value (%1%2)AutomatableModel"&Restaurar (%1%2) &Reset (%1%2)AutomatableModel^Reproducir/Pausar el patrn actual (Espaciador)"Play/pause current pattern (Space)AutomationEditorlDetener la reproduccin del patrn actual (Espaciador)'Stop playing of current pattern (Space)AutomationEditorCambiar nombre Change nameAutomationPatternViewCancelarCancelControllerConnectionDialog &Ayuda&HelpControllerView2x PasoBajo 2x LowPassDualFilterControlsPasaTodoAllpassDualFilterControlsPasoBanda csg BandPass csgDualFilterControlsPasoBanda czpg BandPass czpgDualFilterControlsPasoAltoHiPassDualFilterControlsPasoBajoLowPassDualFilterControlsMoogMoogDualFilterControls NotchNotchDualFilterControls &Ayuda&Help EffectViewAtaque:Attack:EnvelopeAndLfoViewvClick aqu para crear la envolvente controlada por este LFO>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoView Decay:Decay:EnvelopeAndLfoViewHOLDHOLDEnvelopeAndLfoView Hold:Hold:EnvelopeAndLfoView.Cantidad de modulacin:Modulation amount:EnvelopeAndLfoViewPre retraso: Predelay:EnvelopeAndLfoViewRelease:Release:EnvelopeAndLfoViewSustain:Sustain:EnvelopeAndLfoView,Use este control para configurar el tiempo de ataque del LFO actual. A mayor valor mayor tiempo necesitara el LFO para aumentar su amplitud al mximo.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewUse este control para configurar el tiempo de ataque de la envolvente actual. A mayor valor mayor tiempo necesitar la envolvente para alcanzar el nivel de ataque. Escoja un valor pequeo para instrumentos como pianos y alto para cuerdas.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewUse este control para configurar el tiempo de cada de la envolvente actual. A mayor valor mayor tiempo necesitar la envolvente para pasar del nivel de ataque a sostenido. Escoja un valor pequeo para instrumentos como pianos.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewUse este control para configurar el tiempo de mantenimiento de la envolvente actual. A mayor valor mayor tiempo se mantendr el nivel de ataque hasta que comience a disminuir hasta el nivel de sostenido.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewnUse este control para configurar la modulacin del actual LFO. A mayor valor mayor cantidad seleccionada (por ejemplo de volumen o frecuencia de corte) ser influenciado por este LFO.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewUse este control para configurar la cantidad de modulacin de la envolvente actual. A mayor valor mayor valor de acorde (ejemplo volumen o corte de frecuencia) ser influenciado por esta envolvente.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView Use este control para configurar el pre-retraso de la envolvente actual. A mayor valor mayor el tiempo antes del inicio de la envolvente actual.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoViewUse este control para configurar el pre-retraso del LFO actual. A mayor valor, mayor tiempo hasta que el LFO comience a oscilar.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewUse este control para configurar el intervalo de sostenido de la envolvente actual. A mayor valor, la envolvente necesitar ms tiempo para pasar de sostenido a cero. Escoja un valor grande para instrumentos suaves como cuerdas.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewUse este control para configurar la velocidad del LFO actual: A mayor valor ms rpido oscilar el LFO y mayor ser el efecto.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView*Use este control para configurar el nivel de sostenido de la envolvente actual. A mayor valor mayor tiempo tardar la envolvente hasta llegar a cero.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView^controla la cantidad de envolventepara este LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoViewCancelarCancelExportProjectDialog &Ayuda&HelpFxLine$Puerto de Arpeggio Arpeggio gateInstrumentFunctionArpeggio"Rango de ArpeggioArpeggio rangeInstrumentFunctionArpeggio$Tiempo de Arpeggio Arpeggio timeInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioView&Puerto de Arpeggio:Arpeggio gate:InstrumentFunctionArpeggioView$Rango de Arpeggio:Arpeggio range:InstrumentFunctionArpeggioView&Tiempo de Arpeggio:Arpeggio time:InstrumentFunctionArpeggioViewUse este control para ajustar el intervalo arpeggio en milisegundos. El intervalo de arpeggion indica cuanto durar cada tono de arpeggio.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoctava(s) octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13#913#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking madd96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#119#11InstrumentFunctionNoteStacking9#59#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStackingAeolianAeolianInstrumentFunctionNoteStacking rabeArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingRango de acorde Chord rangeInstrumentFunctionNoteStackingDisminuido DiminishedInstrumentFunctionNoteStackingBebop dominanteDominant bebopInstrumentFunctionNoteStacking DorianDorianInstrumentFunctionNoteStackingEnigmatico EnigmaticInstrumentFunctionNoteStackingMenor armnicoHarmonic minorInstrumentFunctionNoteStackingMenor HngaroHungarian minorInstrumentFunctionNoteStackingLocrianLocrianInstrumentFunctionNoteStacking LidioLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9#11Maj9#11InstrumentFunctionNoteStacking Maj9#5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStacking Mayor5Majb5InstrumentFunctionNoteStacking MayorMajorInstrumentFunctionNoteStackingMayor Bebop Major bebopInstrumentFunctionNoteStacking"Mayor pentatnicoMajor pentatonicInstrumentFunctionNoteStacking&Menor de la meloda Melodic minorInstrumentFunctionNoteStacking"Menor pentatnicoMinor pentatonicInstrumentFunctionNoteStackingMixolydian MixolydianInstrumentFunctionNoteStackingNeopolita NeopolitanInstrumentFunctionNoteStackingMenor NeopolitaNeopolitan minorInstrumentFunctionNoteStackingPhrygolydian PhrygolydianInstrumentFunctionNoteStackingTono entero Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9b5m9b5InstrumentFunctionNoteStacking madd9madd9InstrumentFunctionNoteStacking menor5minb5InstrumentFunctionNoteStacking menorminorInstrumentFunctionNoteStacking OctavaoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStacking Rango de acorde: Chord range:"InstrumentFunctionNoteStackingViewoctava(s) octave(s)"InstrumentFunctionNoteStackingView2x PasoBajo 2x LowPassInstrumentSoundShapingPasaTodoAllpassInstrumentSoundShapingPasoBanda csg BandPass csgInstrumentSoundShapingPasoBanda czpg BandPass czpgInstrumentSoundShapingPasoAltoHiPassInstrumentSoundShapingPasoBajoLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShaping NotchNotchInstrumentSoundShapingQ/Resonancia. Q/ResonanceInstrumentSoundShapingVOLUMENVOLUMEInstrumentSoundShapingHzHzInstrumentSoundShapingViewvCon este control puede indicar el volumen del canal actual.Reproducir cancin (Espaciador)Play song (Space) SongEditor"Editor de cancin Song-Editor SongEditor8Detener cancin (Espaciador)Stop song (Space) SongEditortono principal master pitch SongEditor"tiempo de cancin tempo of song SongEditor &Ayuda&Help TempoSyncKnobCancelarCancelTrackContainer0Importar archivo MIDI...Importing MIDI-file...TrackContainer(Cargando proyecto...Loading project...TrackContainer(Por favor, espere...Please wait...TrackContainer<Osc %1 desintonizacin gruesa:Osc %1 coarse detuning:TripleOscillatorViewLOsc %1 desintonizacin fina izquierda:Osc %1 fine detuning left:TripleOscillatorViewHOsc %1 desintonizacin fina derecha:Osc %1 fine detuning right:TripleOscillatorView,Osc %1 encuadramiento:Osc %1 panning:TripleOscillatorView8Osc %1 fase de compensacin:Osc %1 phase-offset:TripleOscillatorViewOsc %1 Volumen:Osc %1 volume:TripleOscillatorViewCon este control usted podr establecer la desintonizacin gruesa del oscilador %1. Usted puede desintonizar el oscilador 12 semitonos (1 octava) arriba y abajo. Esto es til para la creacin de sonidos con acorde.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewCon este control usted podra establecer la desintonizacin fina del oscilador %1 para el canal derecho La desintonizacin fina esta comprendida entre -100 cents y +100 cents. Esto es til para la creacin de sonidos \"gordos\".With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewCon este control usted podr establecer la desintonizacin fina del oscilador %1 para el canal derecho. La desintonizacin fina esta comprendida entre -100 cents y +100 cents. Esto es til para la creacin de sonidos \"gordos\".With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewpCon este control usted podr establecer el encuadramiento del oscilador %1. Un valor de -100 significa 100% a la izquierda y un valor de 100 mueve el oscilador totalmente a la derecha.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewCon este control usted podr establecer la fase de compensacin del oscilador %1. Esto significa que usted puede mover el punto dentro de una oscilacin donde el oscilador comienza a oscilar. Por ejemplo si usted tiene una onda senoidal y tiene una fase de compensacin de 180 grados, la onda ira primero abajo. Lo mismo sucede con una onda cuadrada.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorViewjCon este control usted puede establecer el volumen del oscilador %1. Al fijar un valor de 0 se apaga. De lo contrario usted podr oir al oscilador tan alto como lo especifique aqu.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorView centscentsTripleOscillatorView gradosdegreesTripleOscillatorViewsemitonos semitonesTripleOscillatorViewAmplificarAmplifyaudioFileProcessor"Fin de la muestra End of sampleaudioFileProcessor(Inicio de la muestraStart of sampleaudioFileProcessor*Agregar beat/basslineAdd beat/basslinebbEditor.Editor Ritmo+Lnea baseBeat+Bassline EditorbbEditor`Reproducir/pausar el ritmo base actual (espacio)(Play/pause current beat/bassline (Space)bbEditorCambiar color Change color bbTCOViewCambiar nombre Change name bbTCOView:Abrir en Editor de Ritmo BaseOpen in Beat+Bassline-Editor bbTCOViewRitmo base %1Beat/Bassline %1bbTrack8No se puede abrir el archivoCould not open fileexportProjectDialog,Exportar proyecto a %1Export project to %1exportProjectDialog &Ayuda&HelpknobTipoType:ladspaBrowserView Decay:Decay:lb302SynthView Decay:Decay:lb303SynthView &Ayuda&HelpnineButtonSelector,Osc %1 encuadramiento:Osc %1 panning:organicInstrumentViewOsc %1 Volumen:Osc %1 volume:organicInstrumentView centscentsorganicInstrumentView&Negrita&Bold projectNotes&Color... &Color... projectNotes&Copiar&Copy projectNotes&Cursiva&Italic projectNotes&Justificar&Justify projectNotes&Izquierda&Left projectNotes &Pegar&Paste projectNotes&Rehacer&Redo projectNotes&Derecha&Right projectNotes&Subrayado &Underline projectNotes&Deshacer&Undo projectNotesC&entrarC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotesCortar(&X)Cu&t projectNotesEditar Acciones Edit Actions projectNotes&Acciones de formatoFormat Actions projectNotes$Notas del Proyecto Project notes projectNotesFColoque aqu sus notas del proyecto!Put down your project notes here. projectNotesRenombrar... Rename... renameDialogCancelarCancel setupDialog*Configuracin de LMMS Setup LMMS setupDialogAtaque:Attack:sidInstrumentView Decay:Decay:sidInstrumentViewRelease:Release:sidInstrumentViewSustain:Sustain:sidInstrumentView Importar archivo Import filesong*Proyecto NO guardado.Project NOT saved.songRSeleccione archivo para exportar proyecto!Select file for project-export...songSin ttulountitledsong CopiarCopytrackContentObjectView CortarCuttrackContentObjectView PegarPastetrackContentObjectView"Clonar esta pistaClone this tracktrackOperationsWidget &Ayuda&Help vibedView2Posicin de la seleccin:Pick position: vibedView&Posicin de agarre:Pickup position: vibedViewclick, para activar/desactivar visualizacin de la salida principal6click to enable/disable visualization of master-outputvisualizationWidgetlmms-1.1.3/data/locale/es.ts000066400000000000000000010702331247673406200156340ustar00rootroot00000000000000 AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL Volume: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Panning Left gain Right gain AudioAlsa::setupWidget DEVICE CHANNELS AudioFileProcessorView Open other sample Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Si activa este botón la muestra será reproducida al revés. Esto es útil para buenos efectos, como por ejemplo, golpes del revés. Amplify: Amplificar: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: Punto inicial: Endpoint: Punto final: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME CHANNELS AudioOss::setupWidget DEVICE CHANNELS AudioPortAudio::setupWidget BACKEND DEVICE AudioPulseAudio::setupWidget DEVICE CHANNELS AudioSdl::setupWidget DEVICE AutomatableModel &Reset (%1%2) &Restaurar (%1%2) &Copy value (%1%2) &Copiar valor (%1%2) &Paste value (%1%2) &Pegar valor (%1%2) Edit song-global automation Connected to %1 Connected to controller Edit connection... Remove connection Connect to controller... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Reproducir/Pausar el patrón actual (Espaciador) Stop playing of current pattern (Space) Detener la reproducción del patrón actual (Espaciador) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. Draw mode (Shift+D) Erase mode (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) Copy selected values (Ctrl+C) Paste values from clipboard (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern Automation Editor - %1 Please open an automation pattern with the context menu of a control! Values copied All selected values were copied to the clipboard. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Open in Automation editor Clear Reset name Change name Cambiar nombre %1 Connections Disconnect "%1" Set/clear record AutomationTrack Automation track BassBoosterControlDialog FREQ Frequency: GAIN Gain: RATIO Ratio: BassBoosterControls Frequency Gain Ratio CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 ControllerConnectionDialog Connection Settings MIDI CONTROLLER Input channel CHANNEL Input controller CONTROLLER Auto Detect MIDI-devices to receive MIDI-events from USER CONTROLLER MAPPING FUNCTION OK Cancel Cancelar LMMS Cycle Detected. ControllerRackView Controller Rack Add Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Controllers are able to automate the value of a knob, slider, and other controls. Rename controller Enter the new name for this controller &Remove this plugin &Help &Ayuda DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass PasoBajo HiPass PasoAlto BandPass csg PasoBanda csg BandPass czpg PasoBanda czpg Notch Notch Allpass PasaTodo Moog Moog 2x LowPass 2x PasoBajo RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Wet/Dry mix Gate Decay EffectChain Effects enabled EffectRackView EFFECTS CHAIN Add effect EffectSelectDialog Add effect Plugin description EffectView Toggles the effect on or off. On/Off W/D Wet Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY Time: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Move &down &Remove this plugin &Help &Ayuda EnvelopeAndLfoParameters Predelay Attack Hold Decay Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: Pre retraso: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Use este control para configurar el pre-retraso de la envolvente actual. A mayor valor mayor el tiempo antes del inicio de la envolvente actual. ATT Attack: Ataque: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Use este control para configurar el tiempo de ataque de la envolvente actual. A mayor valor mayor tiempo necesitará la envolvente para alcanzar el nivel de ataque. Escoja un valor pequeño para instrumentos como pianos y alto para cuerdas. HOLD HOLD Hold: Hold: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Use este control para configurar el tiempo de mantenimiento de la envolvente actual. A mayor valor mayor tiempo se mantendrá el nivel de ataque hasta que comience a disminuir hasta el nivel de sostenido. DEC Decay: Decay: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Use este control para configurar el tiempo de caída de la envolvente actual. A mayor valor mayor tiempo necesitará la envolvente para pasar del nivel de ataque a sostenido. Escoja un valor pequeño para instrumentos como pianos. SUST Sustain: Sustain: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Use este control para configurar el nivel de sostenido de la envolvente actual. A mayor valor mayor tiempo tardará la envolvente hasta llegar a cero. REL Release: Release: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Use este control para configurar el intervalo de sostenido de la envolvente actual. A mayor valor, la envolvente necesitará más tiempo para pasar de sostenido a cero. Escoja un valor grande para instrumentos suaves como cuerdas. AMT Modulation amount: Cantidad de modulación: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Use este control para configurar la cantidad de modulación de la envolvente actual. A mayor valor mayor valor de acorde (ejemplo volumen o corte de frecuencia) será influenciado por esta envolvente. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Use este control para configurar el pre-retraso del LFO actual. A mayor valor, mayor tiempo hasta que el LFO comience a oscilar. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Use este control para configurar el tiempo de ataque del LFO actual. A mayor valor mayor tiempo necesitara el LFO para aumentar su amplitud al máximo. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use este control para configurar la velocidad del LFO actual: A mayor valor más rápido oscilará el LFO y mayor será el efecto. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Use este control para configurar la modulación del actual LFO. A mayor valor mayor cantidad seleccionada (por ejemplo de volumen o frecuencia de corte) será influenciado por este LFO. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. Click aquí para crear la envolvente controlada por este LFO control envelope-amount by this LFO controla la cantidad de envolventepara este LFO ms/LFO: ms/LFO: Hint Drag a sample from somewhere and drop it in this window. Click here for random wave. ExportProjectDialog Export project Output File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel Cancelar Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &Ayuda FxMixer Master FX %1 FxMixerView Rename FX channel Enter the new name for this FX channel FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio type Arpeggio range Rango de Arpeggio Arpeggio time Tiempo de Arpeggio Arpeggio gate Puerto de Arpeggio Arpeggio direction Arpeggio mode Up Down Up and down Random Free Sort Sync Down and up InstrumentFunctionArpeggioView ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE Arpeggio range: Rango de Arpeggio: octave(s) octava(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME Arpeggio time: Tiempo de Arpeggio: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Use este control para ajustar el intervalo arpeggio en milisegundos. El intervalo de arpeggion indica cuanto durará cada tono de arpeggio. GATE Arpeggio gate: Puerto de Arpeggio: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: Mode: InstrumentFunctionNoteStacking octave Octava Major Mayor Majb5 Mayor5 minor menor minb5 menor5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 madd9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9#5 9b5 9b5 9#11 9#11 9b13 9b13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9#5 Maj9#11 Maj9#11 m9 m9 madd9 madd9 m9b5 m9b5 m9-Maj7 m9-Maj7 11 11 11b9 11b9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Menor armónico Melodic minor Menor de la melodía Whole tone Tono entero Diminished Disminuido Major pentatonic Mayor pentatónico Minor pentatonic Menor pentatónico Jap in sen Major bebop Mayor Bebop Dominant bebop Bebop dominante Blues Blues Arabic Árabe Enigmatic Enigmatico Neopolitan Neopolita Neopolitan minor Menor Neopolita Hungarian minor Menor Húngaro Dorian Dorian Phrygolydian Phrygolydian Lydian Lidio Mixolydian Mixolydian Aeolian Aeolian Locrian Locrian Chords Chord type Chord range Rango de acorde Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE Chord range: Rango de acorde: octave(s) octava(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME VOLUMEN Volume CUTOFF Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Q/Resonance Q/Resonancia. LowPass PasoBajo HiPass PasoAlto BandPass csg PasoBanda csg BandPass czpg PasoBanda czpg Notch Notch Allpass PasaTodo Moog Moog 2x LowPass 2x PasoBajo RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume Panning Pitch FX channel Default preset With this knob you can set the volume of the opened channel. Con este control puede indicar el volumen del canal actual. Base note Pitch range InstrumentTrackView Volume Volume: VOL Panning Panning: PAN MIDI Input Output InstrumentTrackWindow GENERAL SETTINGS Instrument volume Volume: VOL Panning Panning: PAN Pitch Pitch: cents cents PITCH FX channel ENV/LFO FUNC FX MIDI Save preset XML preset file (*.xpf) PLUGIN PLUGIN Pitch range (semitones) RANGE Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels LadspaControlDialog Link Channels Channel LadspaControlView Link channels Value: Sorry, no help available. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD LFO-speed: LFO-velocidad: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: Cantidad de modulación: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees grados With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file No se pudo guardar el archivo de configuración Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. &Project &Proyecto &New &Nuevo &Open... &Abrir Recently opened projects &Save &Guardar Save &As... Guardar &Como... Import... E&xport... &Quit &Salir &Edit Settings &Tools &Help &Ayuda Online help Help Ayuda What's this? ¿Qué es esto? About Create new project Crear nuevo proyecto Create new project from template Open existing project Abrir proyecto existente Recently opened project Save current project Guardar el proyecto actual Export current project Exportar proyecto actual Show/hide Song-Editor By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack Untitled LMMS %1 LMMS %1 Project not saved Proyecto no guardado The current project was modified since last saving. Do you want to save it now? El proyecto actual ha sido modificado desde la ultima vez que se guardo. Desea usted guardarlo ahora? Open project Abrir Proyecto Save project Guardar proyecto Help not available Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE MidiAlsaSeq::setupWidget DEVICE MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE MidiPort Input channel Output channel Input controller Output controller Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Send MIDI-events Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Vibrato OscillatorObject Osc %1 volume Osc. %1 Volumen Osc %1 panning Osc %1 encuadramiento Osc %1 coarse detuning Osc %1 desintonización gruesa Osc %1 fine detuning left Osc %1 desintonización fina izquierda Osc %1 fine detuning right Osc %1 desintonización fina derecha Osc %1 phase-offset Osc %1 fase de compensación Osc %1 stereo phase-detuning Osc %1 fase de desintonización Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch Click here to open another patch-file. Loop and Tune settings are not reset. Loop Loop mode Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Tune Tune mode Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. No file selected Open patch file Patch-Files (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Open in piano-roll Abrir en piano-roll Clear all notes Borrar todas las notas Reset name Change name Cambiar nombre Add steps Remove steps PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: Cantidad de modulación: Attack: Ataque: Release: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Cantidad de modulación Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Cut selected notes (Ctrl+X) Cortar las notas seleccionadas (Ctrl+X) Copy selected notes (Ctrl+C) Copiar las notas seleccionadas (Ctrl+C) Paste notes from clipboard (Ctrl+V) Pegar notas desde el portapapeles (Ctrl+V) Play/pause current pattern (Space) Reproducir/Pausar el patrón actual (Espaciador) Stop playing of current pattern (Space) Detener la reproducción del patrón actual (Espaciador) Piano-Roll - no pattern Piano Roll - ningún patrón Please open a pattern by double-clicking on it! Por favor abra el patrón haciendo doble click sobre él! Piano-Roll - %1 Piano-Roll - %1 Record notes from MIDI-device/channel-piano Record notes from MIDI-device/channel-piano while playing song or BB track Draw mode (Shift+D) Erase mode (Shift+E) Select mode (Shift+S) Last note Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: PianoView Base note Plugin Plugin not found The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Error while loading plugin Error al cargar plugin Failed to load plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Compressed OGG-File (*.ogg) Archivo OGG comprimido (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Maker: Copyright: Requires Real Time: Yes No Real Time Capable: In Place Broken: Channels In: Channels Out: File: File: %1 SampleBuffer Open audio file Abrir archivo de audio Wave-Files (*.wav) Archivos Wave (*.wav) OGG-Files (*.ogg) Archivos OGG (*.ogg) DrumSynth-Files (*.ds) FLAC-Files (*.flac) SPEEX-Files (*.spx) VOC-Files (*.voc) Archivos VOC (*.voc) AIFF-Files (*.aif *.aiff) Archivos AIFF (*.aif *.aiff) AU-Files (*.au) Archivos AU (*.au) RAW-Files (*.raw) Archivos RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample doble click para seleccionar ejemplo Delete (middle mousebutton) Cut Cortar Copy Copiar Paste Pegar Mute/unmute (<Ctrl> + middle click) Set/clear record SampleTrack Sample track Pista de ejemplo Volume SampleTrackView Track volume Channel volume: Volumen del canal VOL SongEditor Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Click aquí si usted desea detener la reproducción de su canción. El marcador de posición de la canción va a ser puesta al inicio de la canción. Could not open file No se puede abrir el archivo Could not write file No se puede escribir en el archivo Song-Editor Editor de canción Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Click aquí, si usted desea reproducir su canción completa. La reproducción se iniciara en el marcador de posición (verde). Usted puede también moverla mientras se reproduce. Play song (Space) Reproducir canción (Espaciador) Stop song (Space) Detener canción (Espaciador) Add beat/bassline Agregar beat/bassline Add sample-track Agregar pista de ejemplo. Add automation-track Draw mode Edit mode (select and move) Record samples from Audio-device Record samples from Audio-device while playing song or BB track Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Tempo TEMPO/BPM tempo of song tiempo de canción The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode Master volume master volume Master pitch master pitch tono principal Value: %1% Value: %1 semitones Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Linear Y axis SpectrumAnalyzerControls Linear spectrum Linear Y axis Channel mode TempoSyncKnob Tempo Sync No Sync Eight beats Whole note Half note Quarter note 8th note 16th note 32nd note Custom... &Help &Ayuda Custom Synced to Eight Beats Synced to Whole Note Synced to Half Note Synced to Quarter Note Synced to 8th Note Synced to 16th Note Synced to 32nd Note TimeDisplayWidget click to change time units TrackContainer Couldn't import file Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Couldn't open file Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Loading project... Cargando proyecto... Cancel Cancelar Please wait... Por favor, espere... Importing MIDI-file... Importar archivo MIDI... Importing FLP-file... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: Osc %1 Volumen: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Con este control usted puede establecer el volumen del oscilador %1. Al fijar un valor de 0 se apaga. De lo contrario usted podrá oir al oscilador tan alto como lo especifique aquí. Osc %1 panning: Osc %1 encuadramiento: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Con este control usted podrá establecer el encuadramiento del oscilador %1. Un valor de -100 significa 100% a la izquierda y un valor de 100 mueve el oscilador totalmente a la derecha. Osc %1 coarse detuning: Osc %1 desintonización gruesa: semitones semitonos With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Con este control usted podrá establecer la desintonización gruesa del oscilador %1. Usted puede desintonizar el oscilador 12 semitonos (1 octava) arriba y abajo. Esto es útil para la creación de sonidos con acorde. Osc %1 fine detuning left: Osc %1 desintonización fina izquierda: cents cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Con este control usted podra establecer la desintonización fina del oscilador %1 para el canal derecho La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es útil para la creación de sonidos \"gordos\". Osc %1 fine detuning right: Osc %1 desintonización fina derecha: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Con este control usted podrá establecer la desintonización fina del oscilador %1 para el canal derecho. La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es útil para la creación de sonidos \"gordos\". Osc %1 phase-offset: Osc %1 fase de compensación: degrees grados With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Con este control usted podrá establecer la fase de compensación del oscilador %1. Esto significa que usted puede mover el punto dentro de una oscilación donde el oscilador comienza a oscilar. Por ejemplo si usted tiene una onda senoidal y tiene una fase de compensación de 180 grados, la onda ira primero abajo. Lo mismo sucede con una onda cuadrada. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Turn off all notes Open VST-plugin DLL-files (*.dll) EXE-files (*.exe) No VST-plugin loaded Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Click to normalize Invert Click to invert Smooth Click to smooth Sine wave Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify Amplificar Start of sample Inicio de la muestra End of sample Fin de la muestra Reverse sample Stutter Loopback point Loop mode Interpolation mode None Linear Sinc bbEditor Play/pause current beat/bassline (Space) Reproducir/pausar el ritmo base actual (espacio) Beat+Bassline Editor Editor Ritmo+Línea base Add beat/bassline Agregar beat/bassline Add automation-track Stop playback of current beat/bassline (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Click here to stop playing of current beat/bassline. Remove steps Add steps bbTCOView Open in Beat+Bassline-Editor Abrir en Editor de Ritmo Base Reset name Change name Cambiar nombre Change color Cambiar color Reset color to default bbTrack Beat/Bassline %1 Ritmo base %1 Clone of %1 bitInvader Samplelength bitInvaderView Sample Length Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Interpolation Normalize Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file No se puede abrir el archivo Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Error Error while determining file-encoder device. Please try to choose a different output format. Rendering: %1% Export project to %1 Exportar proyecto a %1 fader Please enter a new value between %1 and %2: graphModel Graph kickerInstrument Start frequency End frequency Gain Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: End frequency: Gain: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &Ayuda Please enter a new value between -96.0 dBV and 6.0 dBV: Please enter a new value between %1 and %2: ladspaBrowserView Available Effects Unavailable Effects Instruments Analysis Tools Don't know This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: Tipo ladspaDescription Plugins Description ladspaPortDialog Ports Name Rate Direction Type Min < Default < Max Logarithmic SR Dependent Audio Control Input Output Toggled Integer Float Yes lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: Decay: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Click here for a saw-wave. Triangle wave Click here for a triangle-wave. Square wave Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Click for a sine-wave. White noise wave Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: Decay: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &Ayuda opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Volume organicInstrumentView Distortion: Volume: Randomise Osc %1 waveform: Osc %1 volume: Osc %1 Volumen: Osc %1 panning: Osc %1 encuadramiento: cents cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description Instrument plugins Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins Filter for importing FL Studio projects into LMMS GUS-compatible patch instrument Additive Synthesizer for organ-like sounds Tuneful things to bang on VST-host for using VST(i)-plugins within LMMS Vibrating string modeler plugin for using arbitrary LADSPA-effects inside LMMS. Filter for importing MIDI-files into LMMS Instrument browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Put down your project notes here. Coloque aquí sus notas del proyecto Project notes Notas del Proyecto Edit Actions Editar Acciones &Undo &Deshacer Ctrl+Z Ctrl+Z &Redo &Rehacer Ctrl+Y Ctrl+Y &Copy &Copiar Ctrl+C Ctrl+C Cu&t Cortar(&X) Ctrl+X Ctrl+X &Paste &Pegar Ctrl+V Ctrl+V Format Actions Acciones de formato &Bold &Negrita Ctrl+B Ctrl+B &Italic &Cursiva Ctrl+I Ctrl+I &Underline &Subrayado Ctrl+U Ctrl+U &Left &Izquierda Ctrl+L Ctrl+L C&enter C&entrar Ctrl+E Ctrl+E &Right &Derecha Ctrl+R Ctrl+R &Justify &Justificar Ctrl+J Ctrl+J &Color... &Color... renameDialog Rename... Renombrar... setupDialog Setup LMMS Configuración de LMMS General settings BUFFER SIZE Reset to default-value MISC Enable tooltips Show restart warning after changing settings Display volume as dBV Compress project files per default HQ-mode for output audio-device LMMS working directory VST-plugin directory Artwork directory FL Studio installation directory STK rawwave directory Performance settings UI effects vs. performance Audio settings AUDIO INTERFACE MIDI settings MIDI INTERFACE OK Cancel Cancelar Restart LMMS Please note that most changes won't take effect until you restart LMMS! Frames: %1 Latency: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Choose LMMS working directory Choose your VST-plugin directory Choose artwork-theme directory Choose FL Studio installation directory Choose LADSPA plugin directory Choose STK rawwave directory Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Paths LADSPA plugin paths Default Soundfont File Background artwork Choose default SoundFont Choose background artwork One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Patch Gain Reverb Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Open other SoundFont file Click here to open another SF2 file Choose the patch Gain Apply reverb (if supported) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance Filter type Voice 3 off Volume Chip model sidInstrumentView Volume: Resonance: Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: Ataque: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Decay: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: Sustain: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: Release: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo Master volume Master pitch Project saved The project %1 is now saved. Project NOT saved. Proyecto NO guardado. The project %1 was not saved! Import file Importar archivo untitled Sin título Select file for project-export... Seleccione archivo para exportar proyecto Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! MIDI sequences FL Studio projects All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling Enable/disable loop-points After stopping go back to begin After stopping go back to position at which playing was started After stopping keep position Hint Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Solo trackContentObject Muted trackContentObjectView Current position Hint Press <Ctrl> and drag to make a copy. Current length Press <Ctrl> for free resizing. %1:%2 (%3:%4 to %5:%6) Delete (middle mousebutton) Cut Cortar Copy Copiar Paste Pegar Mute/unmute (<Ctrl> + middle click) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Actions for this track Mute Mute this track Solo Clone this track Clonar esta pista Remove this track Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Please wait while loading VST-plugin... Failed loading VST-plugin The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: The 'V' knob sets the volume of the selected string. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pick position: Posición de la selección: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pickup position: Posición de agarre: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pan: The Pan knob determines the location of the selected string in the stereo field. Detune: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Length: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Enable waveform Click here to enable/disable waveform. String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Normalize Click here to normalize waveform. &Help &Ayuda Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output click, para activar/desactivar visualización de la salida principal Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/fa.qm000066400000000000000000001105611247673406200156000ustar00rootroot00000000000000C([9e+9i,C;e.z=U- =Y-?U.JZ8Jh:pA<pC<{A(GcEi)GY)IY*A+DA.;C.yZ y إ0I74M75FW*FWCzy:h U>g Y>U?fb@d@#}1;+#}3;s(1>*$z*y{[*0W*0*0#*0G1*0a*0x*0y*0++{+|W+G+H,+į|6uw'9gi+9kY,d-@d/1GGHbHiI;0Obz S}A3S}C4 SU6Sb7T.0UjeUjD VZcVW[Wuj\yiųFiųt*iųzszy?tU?tb@+v=N|}c;PvMNf[7?)S5ק1=ק3>8 unb"RI93; %@۴JP09aUOʭi{ՙߺ\o`a3.Kr%:| |G_GB[~K Jt%AdI[Y)OXaNZ.3<]YlhlhCooB|Zd|Zz}"W}4}5xNקA,קC,ܗjevչYX(V;:7Gd Z#%hKjztHrJ19lx/II#aIbIh0ZFV}[}}}~'~Z~~~& Y  Sy9yc~1ՔRaE2hhCGV u_ ux @^OT[Y% 7e47e637U5g?~3EzQE}o.Vwut`ÞnDEUZZ})swDPOljWeNT~EfEz^1U0B6{{#:8M9.DlG'X"X3FiYK9MD72KWtU7;q2 zy=Y lB9]*GhUIUITZ@mczd?hF9 w G/>/sdwT6xS %O: & U$l$Ϟ3h3hBdG/tnqHe5$$dITy$yQDy: $ 6 6EE k# w& LUD? :_q Fy` Sc\ ]0n u`d wJe ( A 1T3 F t` ~j ˔| D` { Om) u:p J V&c 4t Y: ) Y:F Y:Q ~) iS " + + R + -# -#B =wOG d̥ d̥Q d̥w { ' { v/ 7 Ɉ8X @u @uP @uv J  1< 3] MUS u 7WNCga` bGxv"L tc Ƴ1i /1('1GAbout AboutDialog *BH*:Amplify:AudioFileProcessorViewFB7G  ~''F: Endpoint:AudioFileProcessorView'1 'F /EG 1' A9'D F/,*E'E FEHFG E9H3 E 4H/.'F (1' ,DHG G' ,'D( E'FF/  *5'/A E9H3 EF'3( '3*.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorViewFB7G  41H9: Startpoint:AudioFileProcessorView$~ &EB/'1 (%1%2)&Copy value (%1%2)AutomatableModel,3('F/F &EB/'1 (%1%2)&Paste value (%1%2)AutomatableModel"&('2 F4'F (%1%2) &Reset (%1%2)AutomatableModel4~.4/E+ 'DH ,'1 (A'5DG)"Play/pause current pattern (Space)AutomationEditor6*HBA ~.4 'DH ,'1 (A'5DG)'Stop playing of current pattern (Space)AutomationEditor*:1 F'E Change nameAutomationPatternView('2 F4'F F'E Reset nameAutomationPatternViewD:HCancelControllerConnectionDialog&1'GFE'&HelpControllerView~'F 01 2x 2x LowPassDualFilterControls*E'E 01AllpassDualFilterControlsE'F 01 csg BandPass csgDualFilterControlsE'F 01 czpg BandPass czpgDualFilterControls('D' 01HiPassDualFilterControls~'F 01LowPassDualFilterControlsEH MoogMoogDualFilterControlsFNotchDualFilterControlsE/.DGateEffect&1'GFE'&Help EffectViewE-H-DECAYDECAY EffectView*G',E(Attack):Attack:EnvelopeAndLfoView(1' 'FG E2'F ~'* *H37 'F LFO F*1D 4H/ 'F,' 1' D F/.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewE-H 4/F(Decay):Decay:EnvelopeAndLfoViewFG/'1-HOLDHOLDEnvelopeAndLfoViewFG/'1(Hold):Hold:EnvelopeAndLfoView E2'F E/HD'3HF:Modulation amount:EnvelopeAndLfoView(~(4 *'.1(Predelay): Predelay:EnvelopeAndLfoView1G'(Release):Release:EnvelopeAndLfoView*BH*(Sustain):Sustain:EnvelopeAndLfoView$'2 'F /3*1G (1' *F8E 2E'F *G',E LFO ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ LFO 2E'F (4*2 (1' 'A2'4 /'EFG (G EB/'1 E'2EE F'2 /'2/.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoView'2 'F /3*1G (1' *F8E 2E'F *G',E ~'* ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ ~'* 2E'F (4*2 (1' 'A2'4 *' 37- *G',E F'2 /'2/.EB/'1 E 1' (1' /3*'G G' E'FF/ ~'FH H EB/'1 2'/ 1' (1' 2G '3*A'/G F/.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoView'2 'F /3*1G (1' *F8E 2E'F E-H 4/F ~'* ,'1 '3*A'/G F/. G1G 'F EB/'1 (4*1 ('4/ 2E'F (4*1 (1' 'G4 '2 37- *G',E (G 37- *BH* 7HD 4/.EB/'1 E 1' (1' /3*'G G' E'FF/ ~'FH 'F*.'( F/.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewV'2 'F /3*1G (1' *F8E 2E'F *'ED ~'* ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ (4*1 7HD E 4/ *' ~'* 37- *G',E 1' B(D '2 'G4 G 37- *BH*(sustain-level) FG/'1/.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewZ'2 'F /3*G (1' *F8E EB/'1 E0HD'3HF LFO ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ 'F/'2G  EF*.( (4*1((1' E+'D -,E ' A1'F3 H4G ') *-* *'+1 'F LFO B1'1 E 1/.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoView^'2 'F /3*G (1' *F8E EB/'1 E0HD'3HF ~'* ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ 'F/'2G  EF*.( (4*1((1' E+'D -,E ' A1'F3 H4G ') *-* *'+1 'F ~'* B1'1 E 1/.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView'2 'F /3*1G (1' *F8E ~4 *'.1 ~'* ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ 2E'F (4*1 B(D '2 41H9 H'B9 ~'* 7HD E 4/.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView'1 'F /3*1G (1' *F8E 2E'F ~4 *'.1 LFO ,'1 '3*A'/G F/.G1G 'F EB/'1 (4*1 ('4/ 2E'F (4*2 *' 41H9 FH3'F LFO 7HD E 4/.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewn'2 'F /3*1G (1' *F8E 2E'F 1G' ~'* ,'1 '3*A'/G F/. G1G 'F EB/'1 (4*1 ('4/ 2E'F (4*1 (1' 'G4 '2 37- *BH* (G 5A1 7HD 4/.EB/'1 2'/ 1' (1' /3*'G G' 2G 'F*.'( F/.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoView'2 'F /3*1G (1' *F8E 319* LFO '3*A'/G F/. G1G 'F EB/'1 (4*1 ('4/ LFO 319 *1 FH3'F E F/ H ,DHG  4E' 319 *1 .H'G/ (H/.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView2'2 'F /3*1G (1' *F8E 37- *BH*(Sustain Level) ~'* ,'1 '3*A'/G F/. G1G 'F EB/'1 (4*1 ('4/ ~'* /1 37- ('D'*1 B(D '2 F2HD (G 5A1 B1'1 E 1/.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView:F*1D EB/'1 ~'* *H37 'F LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoViewD:HCancelExportProjectDialog&1'GFE'&HelpFxLine "1~H(Arpeggio)ArpeggioInstrumentFunctionArpeggioE/.D #1~H Arpeggio gateInstrumentFunctionArpeggioE-/H/G  "1~HArpeggio rangeInstrumentFunctionArpeggio2E'F #1~H Arpeggio timeInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewE/.D "1~H:Arpeggio gate:InstrumentFunctionArpeggioView E-/H/G  #1~H:Arpeggio range:InstrumentFunctionArpeggioView2E'F "1~H:Arpeggio time:InstrumentFunctionArpeggioView,G*: Direction:InstrumentFunctionArpeggioView'2 'F /3*1G (1' *F8E 2E'F /1 "1~H (G ED +'FG '3*A'/G F/.2E'F "1~H E4.5 E F/ G G E/* G1 "GF "1~H ~.4 4H/.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewE +msInstrumentFunctionArpeggioViewF* (G') octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13#913#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking madd96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#119#11InstrumentFunctionNoteStacking9#59#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStackingAeolianAeolianInstrumentFunctionNoteStacking ArabicArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingE-/H/G  *'1 Chord rangeInstrumentFunctionNoteStacking*'1 G'(Chords)ChordsInstrumentFunctionNoteStackingDiminished DiminishedInstrumentFunctionNoteStackingDominant bebopDominant bebopInstrumentFunctionNoteStacking DorianDorianInstrumentFunctionNoteStackingEnigmatic EnigmaticInstrumentFunctionNoteStackingHarmonic minorHarmonic minorInstrumentFunctionNoteStackingHungarian minorHungarian minorInstrumentFunctionNoteStackingJap in sen Jap in senInstrumentFunctionNoteStackingLocrianLocrianInstrumentFunctionNoteStacking LydianLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9#11Maj9#11InstrumentFunctionNoteStacking Maj9#5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStacking Majb5Majb5InstrumentFunctionNoteStacking MajorMajorInstrumentFunctionNoteStackingMajor bebop Major bebopInstrumentFunctionNoteStacking Major pentatonicMajor pentatonicInstrumentFunctionNoteStackingMelodic minor Melodic minorInstrumentFunctionNoteStacking Minor pentatonicMinor pentatonicInstrumentFunctionNoteStackingMixolydian MixolydianInstrumentFunctionNoteStackingNeopolitan NeopolitanInstrumentFunctionNoteStacking Neopolitan minorNeopolitan minorInstrumentFunctionNoteStackingPhrygolydian PhrygolydianInstrumentFunctionNoteStackingWhole tone Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9b5m9b5InstrumentFunctionNoteStacking madd9madd9InstrumentFunctionNoteStacking mollb5minb5InstrumentFunctionNoteStacking minorminorInstrumentFunctionNoteStackingF*octaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStacking"E-/H/G  *'1 G' : Chord range:"InstrumentFunctionNoteStackingViewF* (G') octave(s)"InstrumentFunctionNoteStackingView~'F 01 2x 2x LowPassInstrumentSoundShaping*E'E 01AllpassInstrumentSoundShapingE'F 01 csg BandPass csgInstrumentSoundShapingE'F 01 czpg BandPass czpgInstrumentSoundShaping('D' 01HiPassInstrumentSoundShaping~'F 01LowPassInstrumentSoundShapingEH MoogMoogInstrumentSoundShapingFNotchInstrumentSoundShapingQ/12HF'F3 Q/ResonanceInstrumentSoundShaping-,EVOLUMEInstrumentSoundShapingHzHzInstrumentSoundShapingViewMit diesem Knopf knnen Sie die Lautstrke des geffneten Kanals ndern. AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About درباره LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL Volume: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Panning Left gain Right gain AudioAlsa::setupWidget DEVICE CHANNELS AudioFileProcessorView Open other sample Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. اگر این دکمه را فعال کنید,تمام نمونه معکوس می شود.این برای جلوه های جالب مانند یک تصادف معکوس مناسب است. Amplify: تقویت: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: نقطه ی شروع: Endpoint: نقطه ی پایان: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME CHANNELS AudioOss::setupWidget DEVICE CHANNELS AudioPortAudio::setupWidget BACKEND DEVICE AudioPulseAudio::setupWidget DEVICE CHANNELS AudioSdl::setupWidget DEVICE AutomatableModel &Reset (%1%2) &باز نشانی (%1%2) &Copy value (%1%2) کپی &مقدار (%1%2) &Paste value (%1%2) چسباندن &مقدار (%1%2) Edit song-global automation Connected to %1 Connected to controller Edit connection... Remove connection Connect to controller... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) پخش/مکث الگوی جاری (فاصله) Stop playing of current pattern (Space) توقف پخش الگوی جاری (فاصله) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. Draw mode (Shift+D) Erase mode (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) Copy selected values (Ctrl+C) Paste values from clipboard (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern Automation Editor - %1 Please open an automation pattern with the context menu of a control! Values copied All selected values were copied to the clipboard. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Open in Automation editor Clear Reset name باز نشانی نام Change name تغییر نام %1 Connections Disconnect "%1" Set/clear record AutomationTrack Automation track BassBoosterControlDialog FREQ Frequency: GAIN Gain: RATIO Ratio: BassBoosterControls Frequency Gain Ratio CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 ControllerConnectionDialog Connection Settings MIDI CONTROLLER Input channel CHANNEL Input controller CONTROLLER Auto Detect MIDI-devices to receive MIDI-events from USER CONTROLLER MAPPING FUNCTION OK Cancel لغو LMMS Cycle Detected. ControllerRackView Controller Rack Add Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Controllers are able to automate the value of a knob, slider, and other controls. Rename controller Enter the new name for this controller &Remove this plugin &Help &راهنما DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass پایین گذر HiPass بالا گذر BandPass csg میان گذر csg BandPass czpg میان گذر czpg Notch نچ Allpass تمام گذر Moog موگ Moog 2x LowPass پایین گذر 2x RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Wet/Dry mix Gate مدخل Decay EffectChain Effects enabled EffectRackView EFFECTS CHAIN Add effect EffectSelectDialog Add effect Plugin description EffectView Toggles the effect on or off. On/Off W/D Wet Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY محو-DECAY Time: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Move &down &Remove this plugin &Help &راهنما EnvelopeAndLfoParameters Predelay Attack Hold Decay Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: پبش تاخیر(Predelay): Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. از این دستگیره برای تنظیم پیش تاخیر پاکت جاری استفاده کنید.هرچه این مقدار بیشتر باشد زمان بیشتری قبل از شروع واقعی پاکت طول می کشد. ATT Attack: تهاجم(Attack): Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. از این دستگیره برای تنظیم زمان تهاجم پاکت جاری استفاده کنید.هرچه این مقدار بیشتر باشد پاکت زمان بیشتزی برای افزایش تا سطح تهاجم نیاز دازد.مقدار کم را برای دستگاه هایی مانند پیانو و مقدار زیاد را برای زهی استفاده کنید. HOLD نگهداری-HOLD Hold: نگهداری(Hold): Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. از این دستگیره برای تنظیم زمان تامل پاکت جاری استفاده کنید.هرچه این مقدار بیشتر باشد بیشتر طول می کشد تا پاکت سطح تهاجم را قبل از کاهش یه سطح تقویت(sustain-level) نگهدارد. DEC Decay: محو شدن(Decay): Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. از این دستگیره برای تنظیم زمان محو شدن پاکت جاری استفاده کنید. هرچه این مقدار بیشتر باشد زمان بیشتری برای کاهش از سطح تهاجم به سطح تقویت طول کشد.مقدار کمی را برای دستگاه هایی مانند پیانو انتخاب کنید. SUST Sustain: تقویت(Sustain): Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. از این دستگیره برای تنظیم سطح تقویت(Sustain Level) پاکت جاری استفاده کنید. هرچه این مقدار بیشتر باشد پاکت در سطح بالاتری قبل از نزول به صفر قرار می گیرد. REL Release: رهایی(Release): Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. از این دستگیره برای تنظیم زمان رهایی پاکت جاری استفاده کنید. هرچه این مقدار بیشتر باشد زمان بیشتری برای کاهش از سطح تقویت به صفر طول کشد.مقدار زیاد را برای دستگاه های زهی انتخاب کنید. AMT Modulation amount: میزان مدولاسیون: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. از این دسته برای تنظیم مقدار مذولاسیون پاکت جاری استفاده کنید.هرچه این مقدار بیشتر باشد اندازه ی منتخب بیشتری(برای مثال حجم یا فرکانس گوشه ای) تحت تاثیر این پاکت قرار می گیرد. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. ار این دستگیره برای تنظیم زمان پیش تاخیر LFO جاری استفاده کنید.هرچه این مقدار بیشتر باشد زمان بیشتزی تا شروع نوسان LFO طول می کشد. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. از این دستگیره برای تنظیم زمان تهاجم LFO جاری استفاده کنید.هرچه این مقدار بیشتر باشد LFO زمان بیشتزی برای افزایش دامنه به مقدار ماکزیمم نیاز دازد. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. از این دستگیره برای تنظیم سرعت LFO استفاده کنید. هرچه این مقدار بیشتر باشد LFO سریع تر نوسان می کند و جلوه ی شما سریع تر خواهد بود. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. از این دسته برای تنظیم مقدار مذولاسیون LFO جاری استفاده کنید.هرچه این مقدار بیشتر باشد اندازه ی منتخب بیشتری(برای مثال حجم یا فرکانس گوشه ای) تحت تاثیر این LFO قرار می گیرد. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. برای اینکه میزان پاکت توسط این LFO کنترل شود اینجا را کلیک کنید. control envelope-amount by this LFO کنترل مقدار پاکت توسط این LFO ms/LFO: ms/LFO: Hint Drag a sample from somewhere and drop it in this window. Click here for random wave. ExportProjectDialog Export project Output File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel لغو Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &راهنما FxMixer Master FX %1 FxMixerView Rename FX channel Enter the new name for this FX channel FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio آرپگیو(Arpeggio) Arpeggio type Arpeggio range محدوده ی آرپگیو Arpeggio time زمان أرپگیو Arpeggio gate مدخل أرپگیو Arpeggio direction Arpeggio mode Up Down Up and down Random Free Sort Sync Down and up InstrumentFunctionArpeggioView ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE Arpeggio range: محدوده ی أرپگیو: octave(s) نت (ها) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME Arpeggio time: زمان آرپگیو: ms م ث Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. از این دستگیره برای تنظیم زمان در آرپگیو به میلی ثانیه استفاده کنید.زمان آرپگیو مشخص می کند که چه مدت هر آهنگ آرپگیو پخش شود. GATE Arpeggio gate: مدخل آرپگیو: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: جهت: Mode: InstrumentFunctionNoteStacking octave نت Major Major Majb5 Majb5 minor minor minb5 mollb5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 madd9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9#5 9b5 9b5 9#11 9#11 9b13 9b13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9#5 Maj9#11 Maj9#11 m9 m9 madd9 madd9 m9b5 m9b5 m9-Maj7 m9-Maj7 11 11 11b9 11b9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Harmonic minor Melodic minor Melodic minor Whole tone Whole tone Diminished Diminished Major pentatonic Major pentatonic Minor pentatonic Minor pentatonic Jap in sen Jap in sen Major bebop Major bebop Dominant bebop Dominant bebop Blues Blues Arabic Arabic Enigmatic Enigmatic Neopolitan Neopolitan Neopolitan minor Neopolitan minor Hungarian minor Hungarian minor Dorian Dorian Phrygolydian Phrygolydian Lydian Lydian Mixolydian Mixolydian Aeolian Aeolian Locrian Locrian Chords تار ها(Chords) Chord type Chord range محدوده ی تار Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE Chord range: محدوده ی تار ها : octave(s) نت (ها) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME حجم Volume CUTOFF Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Q/Resonance Q/رزونانس LowPass پایین گذر HiPass بالا گذر BandPass csg میان گذر csg BandPass czpg میان گذر czpg Notch نچ Allpass تمام گذر Moog موگ Moog 2x LowPass پایین گذر 2x RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume Panning Pitch FX channel Default preset With this knob you can set the volume of the opened channel. Mit diesem Knopf können Sie die Lautstärke des geöffneten Kanals ändern. Base note Pitch range InstrumentTrackView Volume Volume: VOL Panning Panning: PAN MIDI Input Output InstrumentTrackWindow GENERAL SETTINGS Instrument volume Volume: VOL Panning Panning: PAN Pitch Pitch: cents درصد PITCH FX channel ENV/LFO FUNC FX MIDI Save preset XML preset file (*.xpf) PLUGIN اضافات Pitch range (semitones) RANGE Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels LadspaControlDialog Link Channels Channel LadspaControlView Link channels Value: Sorry, no help available. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD LFO-speed: سرعت-LFO: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: میزان مدولاسیون: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees درجه ها With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file پرونده ی تنظیمات ذخیره نشد Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. &Project &پروژه &New &جدید &Open... &باز کن... Recently opened projects &Save &ذخیره کن Save &As... ذ&خیره به صورت... Import... E&xport... &Quit &خروج &Edit Settings &Tools &Help &راهنما Online help Help راهنما What's this? این چیست؟ About درباره Create new project ایجاد پروژه ی جدید Create new project from template Open existing project باز کردن پروژه ی موجود Recently opened project Save current project ذخیره ی پروژه ی جاری Export current project استخراج پروژه ی جاری Show/hide Song-Editor By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack Untitled LMMS %1 LMMS %1 Project not saved پروژه ذخیره نشده The current project was modified since last saving. Do you want to save it now? پروژه جاری بعد از آخرین ذخیره تغییر یافته است.آیا اکنون مایل به ذخیره ی آن هستید؟ Open project باز کردن پروژه Save project ذخیره ی پروژه Help not available Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE MidiAlsaSeq::setupWidget DEVICE MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE MidiPort Input channel Output channel Input controller Output controller Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Send MIDI-events Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Vibrato OscillatorObject Osc %1 volume حجم نوسان ساز %1 Osc %1 panning تراز نوسان ساز %1 Osc %1 coarse detuning کوک زمختی نوسان ساز %1 Osc %1 fine detuning left کوک دقیق چپ نوسان ساز %1 Osc %1 fine detuning right کوک دقیق راست نوسان ساز %1 Osc %1 phase-offset انحراف فاز نوسان ساز %1 Osc %1 stereo phase-detuning کوک فاز استریوی نوسان ساز %1 Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch Click here to open another patch-file. Loop and Tune settings are not reset. Loop Loop mode Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Tune Tune mode Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. No file selected Open patch file Patch-Files (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Open in piano-roll در غلتک پیانو باز کن Clear all notes پاک کردن تمامی نت ها Reset name باز نشانی نام Change name تغییر نام Add steps Remove steps PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: میزان مدولاسیون: Attack: تهاجم(Attack): Release: رهایی(Release): AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount مقدار مدولاسیون Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Cut selected notes (Ctrl+X) برش نت های انتخاب شده(Ctrl+X) Copy selected notes (Ctrl+C) کپی نت های انتخاب شده(Ctrl+C) Paste notes from clipboard (Ctrl+V) چسباندن نت ها از حافظه ی موقت(Ctrl+V) Play/pause current pattern (Space) پخش/مکث الگوی جاری (فاصله) Stop playing of current pattern (Space) توقف پخش الگوی جاری (فاصله) Piano-Roll - %1 غلتک پیانو - %1 Piano-Roll - no pattern غلتک پیانو - بدون الگو Please open a pattern by double-clicking on it! لطفا یک الگو را با دوبار کلیک روی أن باز کنید! Record notes from MIDI-device/channel-piano Record notes from MIDI-device/channel-piano while playing song or BB track Draw mode (Shift+D) Erase mode (Shift+E) Select mode (Shift+S) Last note Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: PianoView Base note Plugin Plugin not found The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Error while loading plugin در بارگذاری اضافات اشتباه رخ داد Failed to load plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Compressed OGG-File (*.ogg) پرونده ی OGG فشرده شده(*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Maker: Copyright: Requires Real Time: Yes No Real Time Capable: In Place Broken: Channels In: Channels Out: File: File: %1 SampleBuffer Open audio file باز کردن پرونده ی صوتی Wave-Files (*.wav) Wave- پرونده های(*.wav) OGG-Files (*.ogg) OGG-پرونده های (*.ogg) DrumSynth-Files (*.ds) FLAC-Files (*.flac) SPEEX-Files (*.spx) VOC-Files (*.voc) VOC-پرونده های (*.voc) AIFF-Files (*.aif *.aiff) AIFF-پرونده های (*.aif *.aiff) AU-Files (*.au) AU-پرونده های (*.au) RAW-Files (*.raw) RAW-پرونده های (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample برای انتخاب نمونه دوبار کلیک کنید Delete (middle mousebutton) Cut برش Copy کپی Paste چسباندن Mute/unmute (<Ctrl> + middle click) Set/clear record SampleTrack Sample track تراک نمونه Volume SampleTrackView Track volume Channel volume: حجم کانال: VOL SongEditor Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. اگر می خواهید پخش ترانه ی خود را متوقف کنید اینجا را کلیک کنید.سازنده موقعیت ترانه به شروع ترانه تنظیم خواهد شد. Could not open file پرونده باز نشد Could not write file پرونده نوشته نشد Song-Editor ویرایشگر ترانه Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. اگر می خواهید تمام ترانه ی خود را پخش کنید اینجا را کلیک کنید.پخش از محل سازنده ی موقعیت شروع خواهد شد(سبز).همچنین می توانید در حال پخش آن را جابجا کنید. Play song (Space) پخش ترانه(فاصله) Stop song (Space) توقف ترانه (فاصله) Add beat/bassline اضافه ی خط بم/تپش (beat/baseline) Add sample-track اضافه ی باریکه ی نمونه Add automation-track Draw mode Edit mode (select and move) Record samples from Audio-device Record samples from Audio-device while playing song or BB track Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Tempo TEMPO/BPM tempo of song گام ترانه(tempo) The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode Master volume master volume Master pitch master pitch دانگ صدا(Pitch) Value: %1% Value: %1 semitones Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Linear Y axis SpectrumAnalyzerControls Linear spectrum Linear Y axis Channel mode TempoSyncKnob Tempo Sync No Sync Eight beats Whole note Half note Quarter note 8th note 16th note 32nd note Custom... &Help &راهنما Custom Synced to Eight Beats Synced to Whole Note Synced to Half Note Synced to Quarter Note Synced to 8th Note Synced to 16th Note Synced to 32nd Note TimeDisplayWidget click to change time units TrackContainer Couldn't import file Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Couldn't open file Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Loading project... بارگذاری پروژه... Cancel لغو Please wait... لطفا صبر کنید... Importing MIDI-file... وارد کردن پرونده ی MIDI... Importing FLP-file... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: حجم نوسان ساز %1: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. با این دستگیره می توانید حجم نوسان ساز %1 را تنظیم کنید.هنگام تنظیم به ۰ ,نوسان ساز خاموش است.در غیر این صورت همان قدر که تنظیم کنید صدای نوسان سار را بلند خواهید شنید. Osc %1 panning: تراز نوسان ساز %1: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. با این دستگیره می توانید تراز نوسان ساز %1 را تنظیم کنید.مقدار ۱۰۰- یعنی ۱۰۰٪ چپ و مقدار ۱۰۰ خروجی نوسان ساز را به راست منتقل می کند. Osc %1 coarse detuning: کوک زمختی نوسان ساز %1: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. با این دستگیره می توانید کوک زمختی نوسان ساز %1 را تنظیم کنید.شما می توانید کوک نوسان ساز را در ۱۲ نیم صدا (۱ نت) بالا یا پایین کنید. این برای ایجاد صدا به همراه زه (Chord) مفید خواهد بود. Osc %1 fine detuning left: کوک دقیق چپ نوسان ساز %1: cents درصد With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. با این دستگیره می توانید کانال چپ نوسان ساز %1 را کوک دقیق کنید.کوک دقیق بین ۱۰۰- در صد و ۱۰۰ در صد محدود شده است.این برای ایجاد صدا های چاق (fat) مفید است. Osc %1 fine detuning right: کوک دقیق راست نوسان ساز %1: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. با این دستگیره می توانید کانال راست نوسان ساز %1 را کوک دقیق کنید.کوک دقیق بین ۱۰۰- در صد و ۱۰۰ در صد محدود شده است.این برای ایجاد صدا های چاق (fat) مفید است. Osc %1 phase-offset: انحراف فاز نوسان ساز %1: degrees درجه ها With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. با این دستگیره می توانید انحراف فاز نوسان ساز %1 را تنظیم کنید.این یعنی اینکه شما می توانید نقطه ی شروع نوسان نوسان ساز را جابجا کنید.برای مثال اگر یک موج سینوسی و انحراف فاز ۱۸۰ داشته باشید, موج در ابتدا به پایین می رود.برای موج مربعی نیز شبیه همین است. Osc %1 stereo phase-detuning: کوک فاز استریوی نوسان ساز %1: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Turn off all notes Open VST-plugin DLL-files (*.dll) EXE-files (*.exe) No VST-plugin loaded Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Click to normalize Invert Click to invert Smooth Click to smooth Sine wave Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify تقویت Start of sample شروع نمونه End of sample پایان نمونه Reverse sample Stutter Loopback point Loop mode Interpolation mode None Linear Sinc bbEditor Play/pause current beat/bassline (Space) پخش/درنگ خط-بم/تپش جاری(فاصله) Beat+Bassline Editor ویرایشگر خط-بم/تپش Add beat/bassline اضافه ی خط بم/تپش (beat/baseline) Add automation-track Stop playback of current beat/bassline (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Click here to stop playing of current beat/bassline. Remove steps Add steps bbTCOView Open in Beat+Bassline-Editor در ویرایشگر خط-بم/تپش باز کن Reset name باز نشانی نام Change name تغییر نام Change color تغییر رنگ Reset color to default bbTrack Beat/Bassline %1 خط-بم/تپش %1 Clone of %1 bitInvader Samplelength bitInvaderView Sample Length Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Interpolation Normalize Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file پرونده باز نشد Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Error Error while determining file-encoder device. Please try to choose a different output format. Rendering: %1% Export project to %1 استخراج پرونده به %1 fader Please enter a new value between %1 and %2: graphModel Graph kickerInstrument Start frequency End frequency Gain Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: End frequency: Gain: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &راهنما Please enter a new value between -96.0 dBV and 6.0 dBV: Please enter a new value between %1 and %2: ladspaBrowserView Available Effects Unavailable Effects Instruments Analysis Tools Don't know This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: نوع: ladspaDescription Plugins Description ladspaPortDialog Ports Name Rate Direction Type Min < Default < Max Logarithmic SR Dependent Audio Control Input Output Toggled Integer Float Yes lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: محو شدن(Decay): 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Click here for a saw-wave. Triangle wave Click here for a triangle-wave. Square wave Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Click for a sine-wave. White noise wave Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: محو شدن(Decay): DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &راهنما opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Volume organicInstrumentView Distortion: Volume: Randomise Osc %1 waveform: Osc %1 volume: حجم نوسان ساز %1: Osc %1 panning: تراز نوسان ساز %1: cents درصد The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description Instrument plugins Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins Filter for importing FL Studio projects into LMMS GUS-compatible patch instrument Additive Synthesizer for organ-like sounds Tuneful things to bang on VST-host for using VST(i)-plugins within LMMS Vibrating string modeler plugin for using arbitrary LADSPA-effects inside LMMS. Filter for importing MIDI-files into LMMS Instrument browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Put down your project notes here. یادداشت های پروژه ی خود را اینجا قرار دهید. Project notes یادداشت های پروژه Edit Actions ویرایش کنش ها &Undo &واچینی Ctrl+Z Ctrl+Z &Redo &بازچینی Ctrl+Y Ctrl+Y &Copy &کپی Ctrl+C Ctrl+C Cu&t &برش Ctrl+X Ctrl+X &Paste &چسباندن Ctrl+V Ctrl+V Format Actions قالب بندی کنش ها &Bold &برجسته Ctrl+B Ctrl+B &Italic &خوابیده Ctrl+I Ctrl+I &Underline &زیرخط Ctrl+U Ctrl+U &Left &چپ Ctrl+L Ctrl+L C&enter &مرکز Ctrl+E Ctrl+E &Right &راست Ctrl+R Ctrl+R &Justify &تراز Ctrl+J Ctrl+J &Color... &رنگ... renameDialog Rename... تغییر نام... setupDialog Setup LMMS برپایی LMMS General settings BUFFER SIZE Reset to default-value MISC Enable tooltips Show restart warning after changing settings Display volume as dBV Compress project files per default HQ-mode for output audio-device LMMS working directory VST-plugin directory Artwork directory FL Studio installation directory STK rawwave directory Performance settings UI effects vs. performance Audio settings AUDIO INTERFACE MIDI settings MIDI INTERFACE OK Cancel لغو Restart LMMS Please note that most changes won't take effect until you restart LMMS! Frames: %1 Latency: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Choose LMMS working directory Choose your VST-plugin directory Choose artwork-theme directory Choose FL Studio installation directory Choose LADSPA plugin directory Choose STK rawwave directory Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Paths LADSPA plugin paths Default Soundfont File Background artwork Choose default SoundFont Choose background artwork One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Patch Gain Reverb Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Open other SoundFont file Click here to open another SF2 file Choose the patch Gain Apply reverb (if supported) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance Filter type Voice 3 off Volume Chip model sidInstrumentView Volume: Resonance: Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: تهاجم(Attack): Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: محو شدن(Decay): Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: تقویت(Sustain): Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: رهایی(Release): The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo Master volume Master pitch Project saved The project %1 is now saved. Project NOT saved. پروژه ذخیره نشد. The project %1 was not saved! Import file وارد کردن پرونده untitled بدون نام Select file for project-export... پرونده را برای استخراج پروژه مشخص کنید... Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! MIDI sequences FL Studio projects All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling Enable/disable loop-points After stopping go back to begin After stopping go back to position at which playing was started After stopping keep position Hint Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Solo trackContentObject Muted trackContentObjectView Current position Hint Press <Ctrl> and drag to make a copy. Current length Press <Ctrl> for free resizing. %1:%2 (%3:%4 to %5:%6) Delete (middle mousebutton) Cut برش Copy کپی Paste چسباندن Mute/unmute (<Ctrl> + middle click) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Actions for this track Mute Mute this track Solo Clone this track تکثیر این تراک Remove this track Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Please wait while loading VST-plugin... Failed loading VST-plugin The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: The 'V' knob sets the volume of the selected string. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pick position: برگزیدن موقعیت: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pickup position: برداشتن موقعیت: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pan: The Pan knob determines the location of the selected string in the stereo field. Detune: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Length: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Enable waveform Click here to enable/disable waveform. String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Normalize Click here to normalize waveform. &Help &راهنما Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output برای فعال / غیرفعال کردن تصور خروجی اصلی کلیک کنید Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/fr.qm000066400000000000000000007043131247673406200156250ustar00rootroot00000000000000P T^T^T^ *TMV2V `VeXDXDZ4zq[<O[< x[<[<i__Rhi pA߲pC{&+]+Ei(GY̼IY͘MMAA~CYfkYob4pEfu[fuqh{pirCK_%cyyotS`t_KrfK k# aL;%ڗLإ]ص0>TT T${# #PJ s *r46`f&77FWZFW{H5QFI[pLlLOTth#Ej|jQjnŽ//JCCfEh)eRzy U5 YlUbBdy& jF  DD#}1މ#}3(Ԥ*$*y*&Z*0U*0_*08*0&*0Ņ*0<*0*0'++++']+'+į/N23y{4ʩ5f(6u*9giV9kYώ93ij:d6d@dX@T E 2EZoF| G*G(GGfHj\Hi`HfHOJHz[HzcHIaI;ImgImoJ'wJ+GJ<@gHJ]J{)KbLb7M5OMKM<=MrN(gNh:ObzPWPWP*S}A]S}CוSUSb S4TbpT.WTZ7TTʴcTʴTx ]UQ'U`;VU`UjZUjVb{VbVbcVhLVVVVVW .W  gWiQWW$X ewXMZ/SZ/`#ZkjZku!ZRZP`ZoZoJ[y[jf7\N.]6 g]^eqm^erm`~`~|c^cNXhh 6iųiųiųszyItUtbv=^|}}U[~#,;;i_Cϙäzp^OH=ovNYCueNS7)o7!i:yAoy_ק1ק3@QmOnmrW3=S 'J! b] be   C>?/N'++$qunvit"R@/V/V02_7"Hw7o9}߫9g;n; Ù=|J@1x@۴BCFzFzZ;JhCJqMUTlDOXOXP0.T<VZ;hZ;rP`1xaU`4imw80yuz;}a nv ~0o>utGɄyʭii7(cՙ6ծhUV[*Q8fߺoo;$CBQA )|٫D/hU+w8J)a3 sX H(^<(^_)u,´Ir,´9.F4NU: lG7kRo_/:bbjr%݋t˗xż$~zc9%Y8n)CGkGGG.. ?U*?a)))) Ef3')"Qh9>9>>{ѻ GYGKҩB[cҩBһB[һBD|t>я< Sg H~ECdi)Es4s^sRyb,DH%uIV"ݎ"ݎ % :~2Q"J348JR8:)i?T@RBWABaNECBQHH>I[Y_OXO۹-P~01P~ SkWa,WZ.]]Y] l1!lhZQlh7lJoXo_uTvxx|ZC|Z/}"C}}#~<~{kŐZhĩR$#%#Dyɉ0se.>Nx_ |kX#ҜA~ +~VWH6Ľ[.PFPPϯѫ©6A6קAקC5Nք qܗjH  ) P왞-*[g3Bg = չ,Y@{.; 0B(()eVu10J]19p:^;:M<<U<<aA UFA>eJ:KDM$wMtYMкvPJPJ-aPJWQq.XYZ`?m`0`%[`%&`%c=Z/d Zg5hLjzt:kJsl rJ w~eh^ww3w]w$mxYZyTS/yT_{ 9/Z N5Uxu uuu u fuPuPuX>ztZ{/{kINI IkIhz\hzIhi!Z e`qq%Ls6]  [d2B\BeB[BzGrh0xMh0|^Bkx~eAˤ/("ž1_ՔtBEͥ22q(5 ݄`NA(hZhv@fn-DdK#JPC_dCV t1] u u4 @,lǖTΎT(!E$0D%)z)|-Ur.15]3:7e>7e]7Uس8?~EzQF^iF^sH8Pe+QZQ QDZ#\C.s\D%saEsga*fRhh93WKh;WjTv jTw l`l~lQups vA Wx}o.nA\AdkPK]*L]̂F~w' \|[c%F REogkjrNfcf3af$zu^tjtuG%#ttMn}XÞ%9%3o^4D!Z;EUZuN$9<5 <5<5<5 <5<5<5us+ߺKDi0}n,ljZCNeN^# EEE3|bAhiXx#EC'vfW'v#(*oI+pZ+#1U_1^76{:gN:FiT.i.t9\U5g5p5>D2I77^_9(s423Rl2FUޔrGHTti>=6tS3/7qgrg@ Ů  zyS;)S)`[ Y)vB!E!E {!Ea&rz ' )T' )a(&)r*G,Df5n78}u`; ;O ZH?,BC'.IUIC6UI|Z[tDd\X.;9a\c@czաhFrhJV.iAN?%iR+lF9sm.=wy %y %tA  '(#j>6j/>Ґ2Nr2']Zd TٖA잂]&잂8\{)_2xPY#COS 8 RF: Uxٚ%Q$Ϟ-I-:Zu7qJ=yyqJy~~^OPXxO KY¸~¸uʩj0ʩtc8]U]bBnSeȦ࣓GV^OWDmct9Yj^S X Ok  B1 T $ !} )8 * .5n 3': 6E 8e 8e2 8e" 9JR 9 G ItY IM MgN OUN T) YsP hI.ڲ hI.C9 k l8, p, p= w% w%/ xN |b > >F 9Bq " #c  B>B<  B1~ _ ^  `, `V 9I P* Y n6  F w Kn/ N E # k t2v ztQ LU {9 #C0 %ӴFN ' +a -Pp /Eg 8Rtdo 9"9 9@ " :_7 FyS K\ P R^ Sj X ]0 ^eX dV` p  s UUH uŶ RR U 1  Nxq  T $/ %  ~k ·~a Ɓ( *H ʧ ʵƎ ˔z !# J\ D Nh ؋& ڮzO ڮ~y ہ/ z  ׾u ɺ / *v ]- _+     I9k ".7 $ r_ +Ŝ - ' 3'n 9yD N Om S'J STn \M \#l ]RH cty ct}* eE߄ m S m _ m f s Ta u:  ¢ $nX j !   ?qY NV N`  J Vģ h R 2iq 2r 8Av Ɵ Ƶ8^# @ ^ 4" ӗ`B Ӱ 2 <o <C e Sw Y: Y: Y:r ~ +t i    ' . . .- .Y) ʓOB  " " $&y (cU + b + s; +  -#Yc -# -~3 -s: 5ݙ] \D w g s +ԛ Z " 58 r (d# .˙؅ 0  0 [ 0 - 0  @uG @uh @u* W` ZE \ aol bS#м c c c6 c cf cR[ fbi l8Q |H5E |.N ;   }NS S"g C 4, G\ Z ;  . 16 3t .ݏ .E f | N Z nu  & a /^ /^E9 ~{\mr՞]i ^. F: #RWOfn~i!6.tYr_!N%h! {&ʮ_1 1 +2:G;}<)BG>G PBQ>2Y]2ad^cg?ndy1Op :~?<2`)) `9TT`9`ȘGQ"FSWޤz E5y1.PT^pN%s[l # |[ ?cLC`"$e(4'A()3M7W^?IWCgxD>wADvEIJilJiM|/U&XҾ`Z !X[x*[F^ E` eR\eR eR\veRiI MTiI !m4}pڸmyĀ9Bx *k*v)U7KI ,P¥IXLO֩<x2ƳL~/I kܹY6iXj\<html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html>

http://lmms.sourceforge.net

 AboutDialog proposAbout AboutDialog propos de LMMS About LMMS AboutDialogAuteursAuthors AboutDialogbCopyright (c) 2004-2014, les dveloppeurs de LMMS(Copyright (c) 2004-2014, LMMS developers AboutDialogSi vous tes intress par la traduction de LMMS dans une nouvelle langue ou si vous souhaitez amliorer des traductions existantes, votre aide est la bienvenue ! Contactez simplement le mainteneur !Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialogLMMSLMMS AboutDialogbLMMS - la production musicale la porte de tous)LMMS - easy music production for everyone AboutDialogLicenceLicense AboutDialogTraduction Translation AboutDialog:Version %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogPANPANAmplifierControlDialogPanoramique :Panning:AmplifierControlDialogVOLVOLAmplifierControlDialogVolume :Volume:AmplifierControlDialogPanoramiquePanningAmplifierControls VolumeVolumeAmplifierControls CANAUXCHANNELSAudioAlsa::setupWidgetPRIPHRIQUEDEVICEAudioAlsa::setupWidgetAmplifier :Amplify:AudioFileProcessorViewCliquez ici si vous souhaitez ouvrir un autre fichier audio. Une bote de dialogue dans laquelle vous pourrez choisir le fichier apparatra. Des rglages comme le mode de jeu en boucle, les marqueurs de dbut et de fin, la valeur d'amplication, et ainsi de suite ne sont pas rinitialiss. Par consquent, il peut ne pas ressembler l'chantillon original.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorViewfContinuer de jouer l'chantillon traver les notes%Continue sample playback across notesAudioFileProcessorViewActiver cette option fait que l'chantillon continue de jouer traver les diffrentes notes - si vous changez la hauteur, ou si la longueur de la note s'arrte avant la fin de l'chantillon, alors la note suivante joue continuera o elle aura t arrte. Pour remettre zro le jeu au dbut de l'chantillon, insrez une note en bas du clavier (< 20 Hz)>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)AudioFileProcessorView"Marqueur de fin : Endpoint:AudioFileProcessorView Si vous activez ce bouton, l'chantillon complet est invers. Ceci est utile pour certains effets, p. ex. une cymbale crash inverse.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView6Ouvrir un autre chantillonOpen other sampleAudioFileProcessorView,Inverser l'chantillonReverse sampleAudioFileProcessorView&Marqueur de dbut : Startpoint:AudioFileProcessorViewAvec ce bouton vous pouvez rgler le facteur d'amplification. Lorsque vous indiquez une valeur de 100 % votre chantillon n'est pas chang. Sinon il sera plus ou moins amplifi (votre fichier d'chantillon n'est pas modifi !)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView4Longueur de l'chantillon:Sample length:AudioFileProcessorWaveView4Le client JACK a redmarrJACK client restarted AudioJack4Le serveur JACK est arrtJACK server down AudioJack4LMMS a t rejet par JACK pour une raison quelconque. Par consquent le serveur de JACK a t redmarr. Vous devrez refaire les connexions manuellement.LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. AudioJackLe serveur JACK semble avoir t arrt et le dmarrage d'une nouvelle instance a chou. Par consquent LMMS ne peut pas continuer. Vous devriez enregistrer votre projet puis redmarrer JACK et LMMS.The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack CANAUXCHANNELSAudioJack::setupWidgetNOM DU CLIENT CLIENT-NAMEAudioJack::setupWidget CANAUXCHANNELSAudioOss::setupWidgetPRIPHRIQUEDEVICEAudioOss::setupWidgetSERVEURBACKENDAudioPortAudio::setupWidgetPRIPHRIQUEDEVICEAudioPortAudio::setupWidget CANAUXCHANNELSAudioPulseAudio::setupWidgetPRIPHRIQUEDEVICEAudioPulseAudio::setupWidgetPRIPHRIQUEDEVICEAudioSdl::setupWidget0&Copier la valeur (%1%2)&Copy value (%1%2)AutomatableModel0&Coller la valeur (%1%2)&Paste value (%1%2)AutomatableModel*&Rinitialiser (%1%2) &Reset (%1%2)AutomatableModel4Connecter le contrleur...Connect to controller...AutomatableModelConnect %1Connected to %1AutomatableModel,Connect au contrleurConnected to controllerAutomatableModel,diter la connexion...Edit connection...AutomatableModelLditer l'automation globale du morceauEdit song-global automationAutomatableModel@Supprime tous les contrles lisRemove all linked controlsAutomatableModel,Supprimer la connexionRemove connectionAutomatableModelVSupprime l'automation globale de la chansonRemove song-global automationAutomatableModelUne valeur de tension leve donne une courbe plus lisse mais introduit des dpassements pour certaines valeurs. Une valeur de tension basse fera que la pente de la courbe se stabilisera chaque point de contrle.A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.AutomationEditorrToutes les valeurs ont t copies dans le presse-papier.1All selected values were copied to the clipboard.AutomationEditor2diteur d'automation - %1Automation Editor - %1AutomationEditorFditeur d'automation - pas de motifAutomation Editor - no patternAutomationEditor"Cliquez ici et le mode dessin sera activ. Dans ce mode vous pourrez ajouter et dplacer des valeurs particulires. Ceci est le mode par dfaut qui est utilis la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode.Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditorCliquez ici et le mode effacement sera activ. Dans ce mode vous pourrez effacer des valeurs particulires. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode.Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditor`Cliquez ici et les valeurs slectionnes seront copies dans le presse-papier. Vous pourrez les coller n'importe o dans n'importe quel motif en cliquant sur le bouton coller.Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorvCliquez ici et les valeurs slectionnes seront coupes et copies dans le presse-papier. Vous pourrez les coller n'importe o dans n'importe quel motif en cliquant sur le bouton coller.Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorCliquez ici et les valeurs se trouvant dans le presse-papier seront colles sur la premire mesure visible.YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditor6Cliquez ici si vous souhaitez jouer le motif courant. Ceci est utile pendant son dition. Le motif est automatiquement rejou lorsque sa fin est atteinte.Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditorCliquez ici si vous souhaitez arrter de jouer le motif courant.>Click here if you want to stop playing of the current pattern.AutomationEditor0Cliquez ici pour choisir la progression cubique de Hermite pour ce motif d'automation. La valeur de l'objet connect changera suivant une courbe lisse.Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.AutomationEditorCliquez ici pour choisir la progression discrte pour ce motif d'automation. La valeur de l'objet connect restera contante entre les points de contrle et se verra affecter immdiatement une nouvelle valeur quand un point de contrle est atteint.Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.AutomationEditorCliquez ici pour choisir la progression linaire pour ce motif d'automation. La valeur de l'objet connect changera un taux contant entre les points de contrle et atteindra la valeur correcte chaque point de contrle sans changement soudain.Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.AutomationEditorRCopier les valeurs slectionnes (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor<Progression cubique de HermiteCubic Hermite progressionAutomationEditorRCouper les valeurs slectionnes (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor(Progression discrteDiscrete progressionAutomationEditor*Mode dessin (Shift+D)Draw mode (Shift+D)AutomationEditor2Mode effacement (Shift+E)Erase mode (Shift+E)AutomationEditor(Progression linaireLinear progressionAutomationEditorRColler les valeurs slectionnes (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditor^Jouer/Mettre en pause le motif (Barre d'espace)"Play/pause current pattern (Space)AutomationEditorVeuillez ouvrir un motif d'automation avec le menu contextuel d'un contrle !EPlease open an automation pattern with the context menu of a control!AutomationEditordArrter de jouer le motif courant (Barre d'espace)'Stop playing of current pattern (Space)AutomationEditor@Valeur de tension pour la splineTension value for splineAutomationEditorTension :  Tension: AutomationEditor6Les valeurs ont t copies Values copiedAutomationEditorVDplacer un contrle en appuyant sur <Ctrl>$Drag a control while pressing AutomationPattern%1 connexions%1 ConnectionsAutomationPatternViewChanger le nom Change nameAutomationPatternViewEffacerClearAutomationPatternView Dconnecter "%1"Disconnect "%1"AutomationPatternViewDOuvrir dans l'diteur d'automationOpen in Automation editorAutomationPatternView(Rinitialiser le nom Reset nameAutomationPatternView>Rgler/Effacer l'enregistrementSet/clear recordAutomationPatternView~double-cliquer pour ouvrir ce motif dans l'diteur d'automation6double-click to open this pattern in automation editorAutomationPatternView$Piste d'automationAutomation trackAutomationTrackFRQFREQBassBoosterControlDialogFrquence : Frequency:BassBoosterControlDialogGAINGAINBassBoosterControlDialog Gain :Gain:BassBoosterControlDialogRAPPORTRATIOBassBoosterControlDialogRapport :Ratio:BassBoosterControlDialogFrquence FrequencyBassBoosterControlsGainGainBassBoosterControlsRapportRatioBassBoosterControlsRMontrer l'interface utilisateur graphiqueShow GUICarlaInstrumentViewContrleur %1 Controller %1 ControllerAuto-dtection Auto DetectControllerConnectionDialog CANALCHANNELControllerConnectionDialogCONTRLEUR CONTROLLERControllerConnectionDialogAnnulerCancelControllerConnectionDialog:Configuration de la connexionConnection SettingsControllerConnectionDialog.Un cycle a t dtect.Cycle Detected.ControllerConnectionDialogCanal d'entre Input channelControllerConnectionDialog&Contrleur d'entreInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialog&FONCTION DE MAPPAGEMAPPING FUNCTIONControllerConnectionDialogCONTRLEUR MIDIMIDI CONTROLLERControllerConnectionDialogpPriphriques MIDI desquels recevoir des vnements MIDI(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog,CONTRLEUR UTILISATEURUSER CONTROLLERControllerConnectionDialogAjouterAddControllerRackView0Confirmer la suppressionConfirm DeleteControllerRackViewConfirmer la suppression ? Il existe des connection(s) associe(s) avec ce contrleur. Il n'est pas possible d'annuler cette action.iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackViewRack d'effetsController RackControllerRackView Aid&e&HelpControllerView*Supp&rimer ce greffon&Remove this pluginControllerViewLes contrleurs sont capables d'automatiser le rglage d'un bouton, d'un curseur et d'autres contrles.QControllers are able to automate the value of a knob, slider, and other controls.ControllerViewContrlesControlsControllerViewPEntrez un nouveau nom pour ce contrleur&Enter the new name for this controllerControllerView,Renommer un contrleurRename controllerControllerViewPasse-bas x2 2x LowPassDualFilterControlsPasse-toutAllpassDualFilterControls"Passe-bande "csg" BandPass csgDualFilterControls$Passe-bande "czpg" BandPass czpgDualFilterControlsPasse-hautHiPassDualFilterControlsPasse-basLowPassDualFilterControlsMoogMoogDualFilterControlsCoupe-bandeNotchDualFilterControls&RC Passe Bande 12dBRC BandPass 12dBDualFilterControls&RC Passe Bande 24dBRC BandPass 24dBDualFilterControls$RC Passe Haut 12dBRC HighPass 12dBDualFilterControls$RC Passe Haut 24dBRC HighPass 24dBDualFilterControls"RC Passe Bas 12dBRC LowPass 12dBDualFilterControls"RC Passe Bas 24dBRC LowPass 24dBDualFilterControls(Filtre Formant VocalVocal Formant FilterDualFilterControlsDescenteDecayEffectEffet activEffect enabledEffect SeuilGateEffect Ratio Wet/Dry mixEffectEffets activsEffects enabled EffectChain Ajouter un effet Add effectEffectRackViewCHANE D'EFFETS EFFECTS CHAINEffectRackView Ajouter un effet Add effectEffectSelectDialog,Description du greffonPlugin descriptionEffectSelectDialog Aid&e&Help EffectView*Supp&rimer ce greffon&Remove this plugin EffectViewContrlesControls EffectView DECAYDECAY EffectView Les greffons d'effet agissent comme une srie d'effets enchans dans laquelle le signal sera trait du haut vers le bas. Le bouton On/Off vous permet de court-circuiter un greffon donn n'importe quel moment. Le bouton Mix Wet/Dry contrle l'quilibre entre le signal en entre et le signal trait qui est le rsultat en sortie de l'effet. L'entre d'un tage est la sortie de l'tage prcdent. De ce fait, l'importance du signal 'original' diminue au fur et mesure de l'application des effets. Le bouton Decay contrle le temps pendant lequel le signal continuera d'tre trait aprs que les notes aient t relaches. L'effet arrtera de traiter le signal lorsque le volume sera pass en dessous d'un seuil donn pendant une priode de temps donne. Ce bouton rgle la 'priode de temps donne'. Les priodes longues ncessiteront plus de processeur, ce qui fait que ce nombre devrait tre rgl assez bas pour la plupart des effets. Il a besoin d'tre augment pour les effets qui produisent de longues priodes de silence, p. ex. les dlais. Le bouton Gate contrle le 'seuil donn' pour l'arrt automatique de l'effet. L'horloge pour la 'priode de temps donne' dmarrera ds que le niveau du signal trait passera sous le niveau spcifi avec ce bouton. Le bouton Contrles ouvre un bote de dialogue permettant de modifier la configuration de l'effet. Un clic-droit fera apparatre un menu contextuel o vous pourrez changer l'ordre dans lequel les effets sont traits ou bien galement supprimer un effet.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectViewGATEGATE EffectView Gate :Gate: EffectView*&Dplacer vers le bas Move &down EffectView,Dplacer vers le ha&utMove &up EffectView On/OffOn/Off EffectViewLe bouton Decay contrle le nombre de tampons de silence qui doivent s'couler avant que le greffon arrte le traitement. Les valeurs faibles rduiront la charge du processeur mais feront courrir le risque de couper la fin sur des effets de dlai et de rverbration.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectView2Le bouton Gate contrle le niveau du signal qui est considr comme tant un 'silence' lorsque l'on doit dcider d'arrter le traitement des signaux.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewLe bouton Wet/Dry rgle le rapport entre le signal d'entre et le signal d'effet qui produit la sortie.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectViewDure :Time: EffectView8Active ou dsactive l'effet.Toggles the effect on or off. EffectViewW/DW/D EffectView&Niveau avec effet : Wet Level: EffectViewAttaqueAttackEnvelopeAndLfoParametersDescenteDecayEnvelopeAndLfoParametersFrq x 100 Freq x 100EnvelopeAndLfoParametersMaintienHoldEnvelopeAndLfoParametersAttaque du LFO LFO AttackEnvelopeAndLfoParameters"Modulation du LFOLFO ModulationEnvelopeAndLfoParameters Pr-dlai du LFO LFO PredelayEnvelopeAndLfoParameters&Forme d'onde du LFOLFO Wave ShapeEnvelopeAndLfoParametersVitesse du LFO LFO speedEnvelopeAndLfoParameters@Moduler le niveau de l'enveloppeModulate Env-AmountEnvelopeAndLfoParametersModulation ModulationEnvelopeAndLfoParametersPr-dlaiPredelayEnvelopeAndLfoParametersRelchementReleaseEnvelopeAndLfoParametersSoutienSustainEnvelopeAndLfoParametersAMTAMTEnvelopeAndLfoViewATTATTEnvelopeAndLfoViewAttaque :Attack:EnvelopeAndLfoViewTCliquez ici pour une onde en dent de scie.&Click here for a saw-wave for current.EnvelopeAndLfoViewLCliquez ici pour une onde sinusodale.Click here for a sine-wave.EnvelopeAndLfoViewBCliquez ici pour une onde carre.Click here for a square-wave.EnvelopeAndLfoViewNCliquez ici pour une onde triangulaire.Click here for a triangle-wave.EnvelopeAndLfoViewCliquez ici pour une onde dfinie par l'utilisateur. Ensuite, faites glisser un fichier d'chantillon correspondant sur le graphique du LFO.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoViewCliquez ici si la frquence de ce LFO doit tre multiplie par 100.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewCliquez ici pour que le niveau de l'enveloppe soit contrl par ce LFO.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewDELDELEnvelopeAndLfoViewDescente :Decay:EnvelopeAndLfoView~Faites glisser un chantillon et dposez-le dans cette fentre.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFRQ x 100 FREQ x 100EnvelopeAndLfoViewHOLDHOLDEnvelopeAndLfoView AstuceHintEnvelopeAndLfoViewMaintien :Hold:EnvelopeAndLfoView$Pr-dlai du LFO : LFO predelay:EnvelopeAndLfoView Vitesse du LFO : LFO speed:EnvelopeAndLfoView Attaque du LFO : LFO- attack:EnvelopeAndLfoView&MODULER L'ENVELOPPEMODULATE ENV-AMOUNTEnvelopeAndLfoView,Niveau de modulation :Modulation amount:EnvelopeAndLfoViewPr-dlai : Predelay:EnvelopeAndLfoViewRELRELEnvelopeAndLfoViewRelchement :Release:EnvelopeAndLfoViewSPDSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewSoutien :Sustain:EnvelopeAndLfoView.Utilisez ce bouton pour rgler le temps d'attaque du LFO. Plus la valeur est importante, plus le LFO met du temps pour monter son amplitude maximale.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoView Utilisez ce bouton pour rgler le temps d'attaque de l'enveloppe. Plus la valeur est importante, plus l'enveloppe met du temps pour monter au niveau d'attaque. Choisissez une petite valeur pour des instruments comme le piano et une grande valeur pour les cordes.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewUtilisez ce bouton pour rgler le temps de descente de l'enveloppe. Plus la valeur est importante, plus l'enveloppe met du temps pour descendre du niveau d'attaque au niveau de soutien. Choisissez une petite valeur pour des instruments comme le piano.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewUtilisez ce bouton pour rgler le temps de maintien de l'enveloppe. Plus la valeur est importante, plus l'enveloppe maintien longtemps le niveau d'attaque avant de commencer descendre vers le niveau de soutien.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewxUtilisez ce bouton pour rgler le niveau de modulation du LFO. Plus la valeur est importante, plus la composante choisie (p. ex. volume ou frquence de coupure) sera influence par le LFO.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewUtilisez ce bouton pour rgler le niveau de modulation de l'enveloppe. Plus la valeur est importante, plus la composante correspondante (p. ex. volume ou frquence de coupure) sera influence par l'enveloppe.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView"Utilisez ce bouton pour rgler le pr-dlai de l'enveloppe. Plus la valeur est importante, plus le temps sera long avant le dbut de l'enveloppe.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView&Utilisez ce bouton pour rgler le temps de pr-dlai du LFO. Plus la valeur est importante, plus le LFO met du temps avant de commencer osciller.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewUtilisez ce bouton pour rgler le temps de relchement de l'enveloppe. Plus la valeur est importante, plus l'enveloppe met du temps pour descendre du niveau de soutien zro. Choisissez une grande valeur pour des instruments comme les cordes.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewUtilisez ce bouton pour rgler la vitesse du LFO. Plus la valeur est importante, plus le LFO oscillera vite et plus votre effet sera rapide.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView`Utilisez ce bouton pour rgler le niveau de soutien de l'enveloppe. Plus la valeur est importante, plus l'enveloppe reste longtemps un niveau lev avant de descendre zro.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView\Contrler le niveau de l'enveloppe avec ce LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO :ms/LFO:EnvelopeAndLfoViewLmultiplier la frquence du LFO par 100multiply LFO-frequency by 100EnvelopeAndLfoView128 kbit/s 128 KBit/sExportProjectDialog$Entier sur 16 bits16 Bit IntegerExportProjectDialog160 kbit/s 160 KBit/sExportProjectDialog192 kbit/s 192 KBit/sExportProjectDialog192000 Hz 192000 HzExportProjectDialog1x (Aucun) 1x (None)ExportProjectDialog256 kbit/s 256 KBit/sExportProjectDialog2x2xExportProjectDialog(Flottant sur 32 bits 32 Bit FloatExportProjectDialog320 kbit/s 320 KBit/sExportProjectDialog44100 Hz44100 HzExportProjectDialog48000 Hz48000 HzExportProjectDialog4x4xExportProjectDialog64 kbit/s 64 KBit/sExportProjectDialog88200 Hz88200 HzExportProjectDialog8x8xExportProjectDialog96000 Hz96000 HzExportProjectDialogDbit :Bitrate:ExportProjectDialogAnnulerCancelExportProjectDialogProfondeur :Depth:ExportProjectDialogExporter sous la forme d'une boucle (supprime le silence de fin)#Export as loop (remove end silence)ExportProjectDialog$Exporter le projetExport projectExportProjectDialog&Format de fichier : File format:ExportProjectDialogInterpolation :Interpolation:ExportProjectDialog SortieOutputExportProjectDialog`Surchantillonage (Utiliser avec prcaution !) :Oversampling (use with care!):ExportProjectDialogVeuillez noter que tous les paramtres ne s'appliquent pas tous les formats.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog&Rglages de qualitQuality settingsExportProjectDialog4Vitesse d'chantillonage : Samplerate:ExportProjectDialog6Sync optimale (Trs lent !)Sinc Best (very slow!)ExportProjectDialog Sync plus rapide Sinc FastestExportProjectDialog4Sync moyenne (Recommande)Sinc Medium (recommended)ExportProjectDialogDmarrerStartExportProjectDialog*Bloqueur d'ordre zroZero Order HoldExportProjectDialogExplorateurBrowser FileBrowser,--- Fichiers usine ------ Factory files ---FileBrowserTreeWidget6Chargement de l'chantillonLoading sampleFileBrowserTreeWidgetOuvrir dans une nouvelle piste d'instrument/diteur de rythme et de ligne de basse'Open in new instrument-track/B+B EditorFileBrowserTreeWidget|Ouvrir dans une nouvelle piste d'instrument/diteur de morceau(Open in new instrument-track/Song-EditorFileBrowserTreeWidgetVeuillez patienter, chargement de l'chantillon pour un aperu...*Please wait, loading sample for preview...FileBrowserTreeWidgetPEnvoyer vers la piste d'instrument actifSend to active instrument-trackFileBrowserTreeWidget Aid&e&HelpFxLineEffet %1FX %1FxMixerGnralMasterFxMixerVEntrer un nouveau nom pour ce canal d'effet&Enter the new name for this FX channel FxMixerView$Mlangeur d'effetsFX-Mixer FxMixerView2Renommer le canal d'effetRename FX channel FxMixerView$Curseur d'effet %1 FX Fader %1FxMixerView::FxChannelView CouperMuteFxMixerView::FxChannelView.Couper ce canal d'effetMute this FX channelFxMixerView::FxChannelView ArpgeArpeggioInstrumentFunctionArpeggio*Direction de l'arpgeArpeggio directionInstrumentFunctionArpeggioDure d'arpge Arpeggio gateInstrumentFunctionArpeggioMode d'arpge Arpeggio modeInstrumentFunctionArpeggioPlage d'arpgeArpeggio rangeInstrumentFunctionArpeggioTemps d'arpge Arpeggio timeInstrumentFunctionArpeggioType d'arpge Arpeggio typeInstrumentFunctionArpeggioDescendantDownInstrumentFunctionArpeggio LibreFreeInstrumentFunctionArpeggioAlatoireRandomInstrumentFunctionArpeggioTriSortInstrumentFunctionArpeggioSyncSyncInstrumentFunctionArpeggioAscendantUpInstrumentFunctionArpeggio.Ascendant et descendant Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioView ARPGEARPEGGIOInstrumentFunctionArpeggioViewUn arpge est une faon de jouer des instruments (en particulier ceux cordes pinces), qui rend la musique plus vivante. Les cordes de tels instruments (p. ex. les harpes) sont pinces comme des accords. La seule diffrence est que cela est fait de manire squentielle, ce qui fait que les notes ne sont pas joues en mme temps. Les arpges typiques sont des triades majeures ou mineures, mais il y a beaucoup d'autres accords possibles, vous pouvez choisr.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView Dure d'arpge :Arpeggio gate:InstrumentFunctionArpeggioView Plage d'arpge :Arpeggio range:InstrumentFunctionArpeggioView Temps d'arpge :Arpeggio time:InstrumentFunctionArpeggioViewAccord:Chord:InstrumentFunctionArpeggioViewDirection : Direction:InstrumentFunctionArpeggioView DUREEGATEInstrumentFunctionArpeggioView Mode :Mode:InstrumentFunctionArpeggioView PLAGERANGEInstrumentFunctionArpeggioView TEMPSTIMEInstrumentFunctionArpeggioViewUtilisez ce bouton pour rgler la dure d'arpge. La dure d'arpge indique le pourcentage d'une note complte de l'arpge qui sera jou. Avec ceci vous pouvez faire de beaux arpges staccato.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewUtilisez ce bouton pour rgler la plage de l'arpge en octaves. L'arpge slectionn sera jou sur le nombre d'octaves choisi.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioView2Utilisez ce bouton pour rgler le temps d'arpge en millisecondes. Le temps d'arpge indique la dure pendant laquelle chaque note de l'arpge sera jou.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoctave(s) octave(s)InstrumentFunctionArpeggioView11InstrumentFunctionNoteStacking11b9InstrumentFunctionNoteStacking13InstrumentFunctionNoteStacking13#9InstrumentFunctionNoteStacking13b5b9InstrumentFunctionNoteStacking13b9InstrumentFunctionNoteStacking8x {5?}5InstrumentFunctionNoteStacking6InstrumentFunctionNoteStacking6add9InstrumentFunctionNoteStacking6sus4InstrumentFunctionNoteStacking7InstrumentFunctionNoteStacking7#11InstrumentFunctionNoteStacking7#5InstrumentFunctionNoteStacking7#5#9InstrumentFunctionNoteStacking7#5b9InstrumentFunctionNoteStacking7#9InstrumentFunctionNoteStacking7add11InstrumentFunctionNoteStacking7add13InstrumentFunctionNoteStacking7b5InstrumentFunctionNoteStacking7b5b9InstrumentFunctionNoteStacking7b9InstrumentFunctionNoteStacking7sus4InstrumentFunctionNoteStacking9InstrumentFunctionNoteStacking9#11InstrumentFunctionNoteStacking9#5InstrumentFunctionNoteStacking9b13InstrumentFunctionNoteStacking9b5InstrumentFunctionNoteStacking9sus4InstrumentFunctionNoteStackingolienneAeolianInstrumentFunctionNoteStacking ArabeArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingGamme d'accord Chord rangeInstrumentFunctionNoteStackingType d'accord Chord typeInstrumentFunctionNoteStackingAccordsChordsInstrumentFunctionNoteStackingDiminue DiminishedInstrumentFunctionNoteStackingBebop dominanteDominant bebopInstrumentFunctionNoteStackingDorienneDorianInstrumentFunctionNoteStackingnigmatique EnigmaticInstrumentFunctionNoteStacking$Mineure harmoniqueHarmonic minorInstrumentFunctionNoteStacking"Hongroise mineureHungarian minorInstrumentFunctionNoteStacking$Japonaise "in sen" Jap in senInstrumentFunctionNoteStackingLocrienneLocrianInstrumentFunctionNoteStackingLydienneLydianInstrumentFunctionNoteStackingMaj11InstrumentFunctionNoteStackingMaj13InstrumentFunctionNoteStackingMaj7InstrumentFunctionNoteStackingMaj7#11InstrumentFunctionNoteStackingMaj7#5InstrumentFunctionNoteStacking Maj7add13InstrumentFunctionNoteStackingMaj7b5InstrumentFunctionNoteStackingMaj9InstrumentFunctionNoteStackingMaj9#11InstrumentFunctionNoteStackingMaj9#5InstrumentFunctionNoteStackingMaj9sus4InstrumentFunctionNoteStackingMajb5InstrumentFunctionNoteStacking MajeurMajorInstrumentFunctionNoteStackingBebop majeure Major bebopInstrumentFunctionNoteStacking&Pentatonique majeurMajor pentatonicInstrumentFunctionNoteStacking"Mineure mlodique Melodic minorInstrumentFunctionNoteStacking MineurMinorInstrumentFunctionNoteStacking&Pentatonique mineurMinor pentatonicInstrumentFunctionNoteStackingMixolydienne MixolydianInstrumentFunctionNoteStackingNapolitaine NeopolitanInstrumentFunctionNoteStacking&Napolitaine mineureNeopolitan minorInstrumentFunctionNoteStackingPhrygo-Lydienne PhrygolydianInstrumentFunctionNoteStackingNote complte Whole toneInstrumentFunctionNoteStackingadd9InstrumentFunctionNoteStackingaugInstrumentFunctionNoteStackingaugsus4InstrumentFunctionNoteStackingm-Maj11InstrumentFunctionNoteStackingm-Maj13InstrumentFunctionNoteStackingm-Maj7InstrumentFunctionNoteStacking m-Maj7add11InstrumentFunctionNoteStacking m-Maj7add13InstrumentFunctionNoteStackingm11InstrumentFunctionNoteStackingm13InstrumentFunctionNoteStackingm6InstrumentFunctionNoteStackingm6add9InstrumentFunctionNoteStackingm7InstrumentFunctionNoteStackingm7add11InstrumentFunctionNoteStackingm7add13InstrumentFunctionNoteStackingm7b5InstrumentFunctionNoteStackingm7b9InstrumentFunctionNoteStackingm9InstrumentFunctionNoteStackingm9-Maj7InstrumentFunctionNoteStackingm9b5InstrumentFunctionNoteStackingmadd9InstrumentFunctionNoteStackingminb5InstrumentFunctionNoteStacking mineurminorInstrumentFunctionNoteStacking octaveoctaveInstrumentFunctionNoteStackingsus2InstrumentFunctionNoteStackingsus4InstrumentFunctionNoteStackingtriInstrumentFunctionNoteStacking Gamme d'accord : Chord range:"InstrumentFunctionNoteStackingViewAccord:Chord:"InstrumentFunctionNoteStackingView GAMMERANGE"InstrumentFunctionNoteStackingViewEMPILEMENTSTACKING"InstrumentFunctionNoteStackingViewUtilisez ce bouton pour rgler la gamme d'accord en octaves. L'accord slectionn sera jou sur le nombre d'octaves choisi.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewoctave(s) octave(s)"InstrumentFunctionNoteStackingView CANALCHANNELInstrumentMidiIOView*ACTIVER L'ENTRE MIDIENABLE MIDI INPUTInstrumentMidiIOView,ACTIVER LA SORTIE MIDIENABLE MIDI OUTPUTInstrumentMidiIOViewpPriphriques MIDI desquels recevoir des vnements MIDI(MIDI devices to receive MIDI events fromInstrumentMidiIOViewnPriphriques MIDI auxquels envoyer des vnements MIDI#MIDI devices to send MIDI events toInstrumentMidiIOViewNOTENOTEInstrumentMidiIOViewPROGRAMMEPROGRAMInstrumentMidiIOViewVLOCITVELOCITYInstrumentMidiIOViewPasse-bas x2 2x LowPassInstrumentSoundShapingPasse-toutAllpassInstrumentSoundShaping"Passe-bande "csg" BandPass csgInstrumentSoundShaping$Passe-bande "czpg" BandPass czpgInstrumentSoundShapingCOUPURECUTOFFInstrumentSoundShaping(Frquence de coupureCutoff frequencyInstrumentSoundShapingEnveloppes/LFOsEnvelopes/LFOsInstrumentSoundShapingType de filtre Filter typeInstrumentSoundShapingPasse-hautHiPassInstrumentSoundShapingPasse-basLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShapingCoupe-bandeNotchInstrumentSoundShapingQ/Rsonance Q/ResonanceInstrumentSoundShaping&RC Passe Bande 12dBRC BandPass 12dBInstrumentSoundShaping&RC Passe Bande 24dBRC BandPass 24dBInstrumentSoundShaping$RC Passe Haut 12dBRC HighPass 12dBInstrumentSoundShaping$RC Passe Haut 24dBRC HighPass 24dBInstrumentSoundShaping"RC Passe Bas 12dBRC LowPass 12dBInstrumentSoundShaping"RC Passe Bas 24dBRC LowPass 24dBInstrumentSoundShaping RSONRESOInstrumentSoundShapingRsonance ResonanceInstrumentSoundShaping VOLUMEVOLUMEInstrumentSoundShaping(Filtre Formant VocalVocal Formant FilterInstrumentSoundShaping VolumeVolumeInstrumentSoundShaping FILTREFILTERInstrumentSoundShapingViewFRQFREQInstrumentSoundShapingViewpIci vous pouvez choisir le filtre intgr que vous souhaitez utiliser pour cette piste d'instrument. Les filtres sont trs important pour la modification des caractristiques d'un son.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRESORESOInstrumentSoundShapingViewRsonance : Resonance:InstrumentSoundShapingViewCOMPOSANTETARGETInstrumentSoundShapingViewCes onglets contiennent des enveloppes. Elles sont trs important pour la modification d'un son, dans le sens o elles sont presque toujours ncessaires pour la synsthse soustractive. Par exemple si vous avez une enveloppe de volume, vous pouvez rgler quand le son devra avoir un volume spcifique. Si vous souhaitez crer des cordes douces alors votre son doit commencer et se terminer trs doucement. Ceci peut tre obtenu en rglant des temps d'attaque et de descente longs. C'est la mme chose pour les autres composantes comme le panoramique, la frquence de coupure pour le filtre utilis et ainsi de suite. Amusez-vous un peu avec ! Vous pouvez vraiment faire de beaux sons partir d'une onde en dent de scie avec juste quelques enveloppes... !_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingViewUtilisez ce bouton pour rgler la Q/Rsonance pour le filtre choisi. La Q/Rsonance indique au filtre dans quelle proportion il devra amplifier les frquences proches de la frquence de coupure.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingViewUtilisez ce bouton pour rgler la frquence de coupure du filtre choisi. La frquence de coupure spcifie la frquence laquelle un filtre coupera le signal. Par exemple un filtre passe-bas coupera toutes les frquences au-dessus de la frquence de coupure. Un filtre passe-haut coupera toutes les frquences en-dessous de la frquence de coupure, et ainsi de suite...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingView*Frquence de coupure:cutoff frequency:InstrumentSoundShapingViewNote de base Base noteInstrumentTrack*Prrglage par dfautDefault presetInstrumentTrackCanal d'effet FX channelInstrumentTrackPanoramiquePanningInstrumentTrackTonalitPitchInstrumentTrack Plage de hauteur Pitch rangeInstrumentTrack VolumeVolumeInstrumentTrackxAvec ce bouton vous pouvez rgler le volume du canal ouvert.Montrer/Cacher le piano virtuelShow/hide Piano-Roll MainWindowFMontrer/Cacher l'diteur de morceauShow/hide Song-Editor MainWindowJMontrer/Cacher le rack de contrleursShow/hide controller rack MainWindowDMontrer/Cacher les notes du projetShow/hide project notes MainWindow@Le rpertoire de travail %1 de LMMS n'existe pas. Souhaitez-vous le crer maintenant ? Vous pourrez changer le rpertoire plus tard via diter -> Configuration.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowCe projet t modifi depuis son dernier enregistrement. Souhaitez-vous l'enregistrer maintenant ?OThe current project was modified since last saving. Do you want to save it now? MainWindowSans titreUntitled MainWindowVersion %1 Version %1 MainWindow*Qu'est-ce que c'est ? What's this? MainWindow*Rpertoire de travailWorking directory MainWindow2Dnominateur de la mesureMeter Denominator MeterDialog.Numrateur de la mesureMeter Numerator MeterDialogSIGN RYTHMTIME SIG MeterDialogDnominateur Denominator MeterModelNumrateur Numerator MeterModelPRIPHRIQUEDEVICEMidiAlsaRaw::setupWidgetPRIPHRIQUEDEVICEMidiAlsaSeq::setupWidgetContrleur MIDIMIDI ControllerMidiController0contrleur_midi_sans_nomunnamed_midi_controllerMidiController*Paramtrage incompletSetup incomplete MidiImportVous n'avez pas compil LMMS avec la prise en charge du lecteur SoundFont2, qui est utilis pour ajouter un son par dfaut aux fichiers MIDI imports. Par consquent aucun son ne sera jou aprs l'importation de ce fichier MIDI.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImportZVous n'avez pas choisi de SoundFont par dfaut dans la bote de dialogue de configuration (diter -> Configuration). Par consquent aucun son ne sera jou lorsque vous aurez import ce fichier MIDI. Vous devriez tlcharger une Soundfont General MIDI, la rfrencer dans la configuration et ressayer.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImportPRIPHRIQUEDEVICEMidiOss::setupWidget,Vlocit d'entre fixeFixed input velocityMidiPort&Note de sortie fixeFixed output noteMidiPort.Vlocit de sortie fixeFixed output velocityMidiPortCanal d'entre Input channelMidiPort&Contrleur d'entreInput controllerMidiPort0Programme de sortie MIDIOutput MIDI programMidiPortCanal de sortieOutput channelMidiPort(Contrleur de sortieOutput controllerMidiPort8Recevoir des vnements MIDIReceive MIDI-eventsMidiPort6Envoyer des vnements MIDISend MIDI-eventsMidiPortVolume gnral Master volume NesInstrumentVibratoVibrato NesInstrument*Modulation de type %1Modulation type %1OscillatorObjectRDsaccordage grossier de l'oscillateur %1Osc %1 coarse detuningOscillatorObjectZDsaccordage fin (gauche) de l'oscillateur %1Osc %1 fine detuning leftOscillatorObjectZDsaccordage fin (droite) de l'oscillateur %1Osc %1 fine detuning rightOscillatorObject>Panoramique de l'oscillateur %1Osc %1 panningOscillatorObjectJDcalage de phase de l'oscillateur %1Osc %1 phase-offsetOscillatorObjectfDsaccordage stro de la phase de l'oscillateur %1Osc %1 stereo phase-detuningOscillatorObject4Volume de l'oscillateur %1 Osc %1 volumeOscillatorObjectBForme d'onde de l'oscillateur %1Osc %1 wave shapeOscillatorObject@Forme d'onde de l'oscillateur %1Osc %1 waveformOscillatorObjectCliquez ici pour ouvrir un autre fichier de son. Les rglages de tonalit et d'accordage ne sont pas rinitialiss.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanView(Ici vous pouvez permuter le mode de jeu en boucle. Si il est activ, PatMan utilisera les informations de jeu en boucle disponibles dans le fichier.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewIci vous pouvez permuter le mode d'accordage. Si il est activ, PatMan accordera l'chantillon pour en fonction de la frquence de la note.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanViewRejouerLoop PatmanView*Mode de jeu en boucle Loop mode PatmanView>Aucun fichier n'est slectionnNo file selected PatmanView&Ouvrir un autre sonOpen other patch PatmanView0Ouvrir un fichier de sonOpen patch file PatmanView.Fichiers de son (*.pat)Patch-Files (*.pat) PatmanViewAccordageTune PatmanViewMode accordage Tune mode PatmanViewAjouter des pas Add steps PatternViewChanger le nom Change name PatternView0Effacer toutes les notesClear all notes PatternView8Ouvrir dans le piano virtuelOpen in piano-roll PatternView"Supprimer des pas Remove steps PatternView(Rinitialiser le nom Reset name PatternViewdouble-cliquer pour ouvrir ce motif dans le piano virtuel utilisez la molette de la souris pour rgler le volume d'un pasWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewA cause d'un bug dans les anciennes versions de LMMS, les contrleurs de crtes peuvent ne pas s'tre connect correctement. Verifiez que les contrleurs de crtes sont connects correctement et re-sauvegardez ce fichier. Dsol pour la gne occasionne.Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.PeakController(Contrleur de crtesPeak ControllerPeakController6Bug du contrleur de crtesPeak Controller BugPeakController"Contrleur du LFOLFO ControllerPeakControllerDialog CRTEPEAKPeakControllerDialogAMNTAMNT!PeakControllerEffectControlDialogATCKATCK!PeakControllerEffectControlDialog6Multiplicateur de quantit:Amount Multiplicator:!PeakControllerEffectControlDialogAttaque :Attack:!PeakControllerEffectControlDialogBASEBASE!PeakControllerEffectControlDialog&Niveau de la base : Base amount:!PeakControllerEffectControlDialogDCAYDCAY!PeakControllerEffectControlDialogMULTMULT!PeakControllerEffectControlDialog,Niveau de modulation :Modulation amount:!PeakControllerEffectControlDialogRelchement :Release:!PeakControllerEffectControlDialogValeur Abs Abs ValuePeakControllerEffectControls4Multiplicateur de quantitAmount MultiplicatorPeakControllerEffectControlsAttaqueAttackPeakControllerEffectControlsValeur de base Base valuePeakControllerEffectControls(Niveau de modulationModulation amountPeakControllerEffectControls Couper la sortie Mute outputPeakControllerEffectControlsRelchementReleasePeakControllerEffectControlsLCliquez ici et le mode dsaccordage sera activ. Dans ce mode vous pourrer cliquer sur une note pour accder l'automation de son dsaccordage. Vous pouvez utiliser ceci pour lier des notes entre-elles. Vous pouvez aussi appuyer sur les touches 'Shift+T' de votre clavier pour activer ce mode.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollCliquez ici et le mode dessin sera activ. Dans ce mode vous pourrez ajouter, redimensionner et dplacer des notes. Ceci est le mode par dfaut qui est utilis la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Dans ce mode, appuyez sur Ctrl pour passer temporairement dans le mode slection.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRolllCliquez ici et le mode effacement sera activ. Dans ce mode vous pourrez effacer des notes. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRollbCliquez ici et le mode slection sera activ. Dans ce mode vous pourrez slectionner des notes. Dans ce mode, appuyez appuyer sur Ctrl pour passer temporairement en mode dessin.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRollCliquez ici et les valeurs se trouvant dans le presse-papier seront colles sur la premire mesure visible.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRoll^Cliquez ici et les valeurs slectionnes seront copies dans le presse-papier. Vous pourrez les coller n'importe o dans n'importe quel motif en cliquant sur le bouton coller.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRolltCliquez ici et les valeurs slectionnes seront coupes et copies dans le presse-papier. Vous pourrez les coller n'importe o dans n'importe quel motif en cliquant sur le bouton coller.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll Cliquez ici pour jouer le motif. Ceci est utile pendant son dition. Le motif est automatiquement rejou lorsque sa fin est atteinte.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRollCliquez ici pour enregistrer des notes partir d'un priphrique MIDI ou du piano de test virtuel de la fentre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront crites dans ce motif et vous pourrez ensuite les jouer et les diter.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRollXCliquez ici pour enregistrer des notes partir d'un priphrique MIDI ou du piano de test virtuel de la fentre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront crites dans ce motif et vous entendrez le morceau ou bien le rythme ou la ligne de basse en fond sonore.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRollVCliquez ici pour arrter de jouer le motif./Click here to stop playback of current pattern. PianoRollNCopier les notes slectionnes (Ctrl+C)Copy selected notes (Ctrl+C) PianoRollNCouper les notes slectionnes (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll6Mode dsaccordage (Shift+T)Detune mode (Shift+T) PianoRoll*Mode dessin (Shift+D)Draw mode (Shift+D) PianoRoll2Mode effacement (Shift+E)Erase mode (Shift+E) PianoRollDernire note Last note PianoRoll.Cocher l'accord courantMark current chord PianoRoll0Cocher la gamme couranteMark current scale PianoRollFCocher/dcocher le demi-ton courantMark/unmark current semitone PianoRollPas d'accordNo chord PianoRollPas de gammeNo scale PianoRoll,Panoramique de la note Note Panning PianoRoll$Volume de la note  Note Volume PianoRoll$Vrouiller la note Note lock PianoRollvColler les notes se trouvant dans le presse-papier (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRoll$Piano virtuel - %1Piano-Roll - %1 PianoRoll8Piano virtuel - pas de motifPiano-Roll - no pattern PianoRoll^Jouer/Mettre en pause le motif (Barre d'espace)"Play/pause current pattern (Space) PianoRollTVeuillez entrer un valeur entre %1 et %2 :+Please enter a new value between %1 and %2: PianoRollhVeuillez ouvrir un motif en double-cliquant dessus !/Please open a pattern by double-clicking on it! PianoRollEnregistrez des notes partir d'un priphrique MIDI ou d'un canal du piano+Record notes from MIDI-device/channel-piano PianoRoll:Enregistrez des notes partir d'un priphrique MIDI ou d'un canal du piano pendant l'coute d'un morceau ou bien d'une piste de rythme ou de ligne de basseJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll0Mode slection (Shift+S)Select mode (Shift+S) PianoRollTArrter de jouer le motif (Barre d'espace)'Stop playing of current pattern (Space) PianoRollDchocher tout Unmark all PianoRollNote de base Base note PianoViewpUne erreur est survenue pendant le chargement du greffonError while loading pluginPluginPLe chargement du greffon "%1" a chou !Failed to load plugin "%1"!Plugin:Le greffon n'a pas t trouvPlugin not foundPluginLe greffon "%1" n'a pas t trouv ou n'a pas pu tre charg ! Raison : "%2"AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin:Fichier OGG compress (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer&Fichier WAV (*.wav)WAV-File (*.wav)ProjectRendererAAQObjectA#A#QObjectAbAbQObjectBBQObjectBbBbQObjectCCQObjectC#C#QObjectDDQObjectD#D#QObjectDbDbQObjectEEQObjectEbEbQObjectF#F#QObjectFbFbQObjectGGQObjectG#G#QObjectGbGbQObject$Canaux d'entre :  Channels In: QWidget(Canaux de sorties : Channels Out: QWidgetCopyright :  Copyright: QWidgetFichier : File: QWidget$Cass sur place : In Place Broken: QWidgetFabricant : Maker: QWidget Nom : Name: QWidgetNonNoQWidget2Supporte le temps rel : Real Time Capable: QWidget4Ncessite le temps rel : Requires Real Time: QWidgetOuiYesQWidget8Fichiers AIFF (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBuffer$Fichiers AU (*.au)AU-Files (*.au) SampleBuffer2Fichiers DrumSynth (*.ds)DrumSynth-Files (*.ds) SampleBuffer,Fichiers FLAC (*.flac)FLAC-Files (*.flac) SampleBuffer(Fichiers OGG (*.ogg)OGG-Files (*.ogg) SampleBuffer.Ouvrir un fichier audioOpen audio file SampleBuffer(Fichiers RAW (*.raw)RAW-Files (*.raw) SampleBuffer,Fichiers SPEEX (*.spx)SPEEX-Files (*.spx) SampleBuffer(Fichiers VOC (*.voc)VOC-Files (*.voc) SampleBuffer*Fichiers WAVE (*.wav)Wave-Files (*.wav) SampleBuffer CopierCopy SampleTCOView CouperCut SampleTCOViewRSupprimer (bouton du milieu de la souris)Delete (middle mousebutton) SampleTCOViewFCouper/Jouer (<Ctrl> + clic-milieu)#Mute/unmute ( + middle click) SampleTCOView CollerPaste SampleTCOView>Rgler/Effacer l'enregistrementSet/clear record SampleTCOViewTDouble-cliquez pour choisir un chantillondouble-click to select sample SampleTCOView&Piste d'chantillon Sample track SampleTrack VolumeVolume SampleTrack"Volume du canal :Channel volume:SampleTrackView$Volume de la piste Track volumeSampleTrackViewVOLVOLSampleTrackView<Ajouter une piste d'automationAdd automation-track SongEditor`Ajouter une piste de rythme ou de ligne de basseAdd beat/bassline SongEditor>Ajouter une piste d'chantillonAdd sample-track SongEditorzCliquez ici si vous souhaitez jouer le morceau en entier. L'coute commencera partir du marquer (vert) de position dans le morceau. Vous pouvez aussi dplacer ce curseur pendant l'coute.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorCliquez ici si vous souhaitez ne plus jouer le morceau. Le curseur de position sera plac au dbut du morceau.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditorNe peux pas ouvrir %1 en criture. Vous n'avez probablement pas les droits pour crire dans ce fichier. Assurez vous que vous avez les droits d'accs en criture pour ce fichier et essayez nouveau.Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditorBLe fichier n'a pas pu tre ouvertCould not open file SongEditorLe fichier %1 n'a pas pu tre ouvert. Vos n'avez probablement pas le droit de lire ce fichier. Veuillez vrifier que vous avez les droits en lecture pour ce fichier et le rpertoire qui contient ce fichier et ressayez.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor@Le fichier n'a pas pu tre critCould not write file SongEditorMode dessin Draw mode SongEditorNMode dition (Slectionner et dplacer)Edit mode (select and move) SongEditor^Il y a une ou plusieurs erreurs dans le fichier Error in file SongEditor$Mode haute qualitHigh quality mode SongEditor"Tonalit gnrale Master pitch SongEditorVolume gnral Master volume SongEditorBJouer le morceau (Barre d'espace)Play song (Space) SongEditorzEnregistrer des chantillons partir d'un priphrique audio Record samples from Audio-device SongEditorEnregistrer des chantillons partir d'un priphrique audio pendant l'coute d'un morceau ou bien d'un rythme ou d'une ligne de basse?Record samples from Audio-device while playing song or BB track SongEditor$diteur de morceau Song-Editor SongEditorXArrter de jouer le morceau (Barre d'espace)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorLe fichier %1 semble contenir des erreurs et ne peut donc pas tre chargs.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditorLe tempo de ce morceau est spcifi en battements par minute (BPM). Si vous souhaitez changer le tempo de votre morceau, modifiez cette valeur. Chaque mesure quatre battements, ce qui fait que le tempo en BPM indique le nombre de mesures / 4 qui doivent tre joues dans une minute (ou le nombre de mesures qui doivent tre joues en quatre minutes).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor*Valeur : %1 demi-tonsValue: %1 semitones SongEditorValeur : %1% Value: %1% SongEditor"tonalit gnrale master pitch SongEditorvolume gnral master volume SongEditor tempo du morceau tempo of song SongEditorAxe Y linaire Linear Y axisSpectrumAnalyzerControlDialog Spectre linaireLinear spectrumSpectrumAnalyzerControlDialogMode du canal Channel modeSpectrumAnalyzerControlsAxe Y linaire Linear Y axisSpectrumAnalyzerControls Spectre linaireLinear spectrumSpectrumAnalyzerControls Aid&e&Help TempoSyncKnob16 ime de note 16th note TempoSyncKnob32 ime de note 32nd note TempoSyncKnob8 ime de note8th note TempoSyncKnobPersonnalisCustom  TempoSyncKnobPersonnalis... Custom... TempoSyncKnobHuit temps Eight beats TempoSyncKnobDemi-note Half note TempoSyncKnob,Pas de synchronisationNo Sync TempoSyncKnobQuart de note Quarter note TempoSyncKnob>Synchronis sur 16 ime de noteSynced to 16th Note TempoSyncKnob>Synchronis sur 32 ime de noteSynced to 32nd Note TempoSyncKnob<Synchronis sur 8 ime de noteSynced to 8th Note TempoSyncKnob4Synchronis sur huit tempsSynced to Eight Beats TempoSyncKnob2Synchronis sur demi-noteSynced to Half Note TempoSyncKnob:Synchronis sur quart de noteSynced to Quarter Note TempoSyncKnob8Synchronis sur note entireSynced to Whole Note TempoSyncKnob0Synchronisation du tempo Tempo Sync TempoSyncKnobNote entire Whole note TempoSyncKnobPcliquez pour changer les units de tempsclick to change time unitsTimeDisplayWidgetAnnulerCancelTrackContainerJAucun filtre n'a pu tre trouv pour importer le fichier %1. Vous devriez convertir ce fichier dans un format pris en charge par LMMS en utilisant un autre logiciel.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainerDLe fichier n'a pas pu tre importCouldn't import fileTrackContainerBLe fichier n'a pas pu tre ouvertCouldn't open fileTrackContainer\Le fichier %1 n'a pas pu tre ouvert en lecture. Veuillez vrifier que vous avez les droits en lecture pour ce fichier et le rpertoire qui contient ce fichier et ressayez !Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer:Importation du fichier FLP...Importing FLP-file...TrackContainer<Importation du fichier MIDI...Importing MIDI-file...TrackContainer.Chargement du projet...Loading project...TrackContainer*Veuillez patienter...Please wait...TrackContainerTMlanger la sortie des oscillateurs 1 et 2Mix output of oscillator 1 & 2TripleOscillatorViewTMlanger la sortie des oscillateurs 2 et 3Mix output of oscillator 2 & 3TripleOscillatorViewVDsaccordage grossier de l'oscillateur %1 :Osc %1 coarse detuning:TripleOscillatorView^Dsaccordage fin (gauche) de l'oscillateur %1 :Osc %1 fine detuning left:TripleOscillatorView^Dsaccordage fin (droite) de l'oscillateur %1 :Osc %1 fine detuning right:TripleOscillatorViewBPanoramique de l'oscillateur %1 :Osc %1 panning:TripleOscillatorViewNDcalage de phase de l'oscillateur %1 :Osc %1 phase-offset:TripleOscillatorViewjDsaccordage stro de la phase de l'oscillateur %1 :Osc %1 stereo phase-detuning:TripleOscillatorView8Volume de l'oscillateur %1 :Osc %1 volume:TripleOscillatorViewbSynchroniser l'oscillateur 1 avec l'oscillateur 2*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewbSynchroniser l'oscillateur 2 avec l'oscillateur 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorViewUtiliser une onde en dent de scie de type Moog pour cet oscillateur.0Use a moog-like saw-wave for current oscillator.TripleOscillatorViewnUtiliser une onde en dent de scie pour cet oscillateur.&Use a saw-wave for current oscillator.TripleOscillatorViewfUtiliser une onde sinusodale pour cet oscillateur.'Use a sine-wave for current oscillator.TripleOscillatorView\Utiliser une onde carre pour cet oscillateur.)Use a square-wave for current oscillator.TripleOscillatorViewhUtiliser une onde triangulaire pour cet oscillateur.+Use a triangle-wave for current oscillator.TripleOscillatorViewUtiliser une onde dfinie par l'utilisateur pour cet oscillateur.3Use a user-defined waveform for current oscillator.TripleOscillatorViewUtiliser la modulation d'amplitude pour moduler l'oscillateur 2 avec l'oscillateur 1FUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUtiliser la modulation d'amplitude pour moduler l'oscillateur 3 avec l'oscillateur 2FUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewjUtiliser une onde exponentielle pour cet oscillateur./Use an exponential wave for current oscillator.TripleOscillatorViewUtiliser la modulation de frquence pour moduler l'oscillateur 2 avec l'oscillateur 1FUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUtiliser la modulation de frquence pour moduler l'oscillateur 3 avec l'oscillateur 2FUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewUtiliser la modulation de phase pour moduler l'oscillateur 2 avec l'oscillateur 1BUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUtiliser la modulation de phase pour moduler l'oscillateur 3 avec l'oscillateur 2BUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewZUtiliser un bruit blanc pour cet oscillateur.'Use white-noise for current oscillator.TripleOscillatorViewAvec ce bouton vous pouvez rgler le dsaccord grossier de l'oscillateur %1. Vous pouvez dsaccorder l'oscillateur de 12 demi-tons (1 octave) vers le haut et vers le bas. Ceci est utile pour la cration de sons avec un accord.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewAvec ce bouton vous pouvez rgler le dsaccord fin du canal gauche de l'oscillateur %1. Le dsaccordage fin varie entre -100 centimes et +100 centimes. Ceci est utile pour la cration de sons 'gras'.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewAvec ce bouton vous pouvez rgler le dsaccord fin du canal droit de l'oscillateur %1. Le dsaccordage fin varie entre -100 centimes et +100 centimes. Ceci est utile pour la cration de sons 'gras'.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewjAvec ce bouton vous pouvez rgler le panoramique de l'oscillateur %1. Une valeur de -100 corespond 100 % gauche et une valeur de 100 dplace la sortie de l'oscillateur droite.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewAvec ce bouton vous pouvez rgler le dcalage de phase de l'oscillateur %1. Cela signifie que vous pouvez dplacer dans une oscillation le point o l'oscillateur commence osciller. Par exemple si vous avez une onde sinusodale et un dcalage de phase de 180 degrs l'onde commencera par descendre. C'est la mme chose avec une onde carre.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorView$Avec ce bouton vous pouvez rgler le dsaccordage stro de la phase de l'oscillateur %1. Le dsaccordage stro de la phase prcise l'importance de la diffrence entre le dcalage de phase du canal gauche et droit. Ceci est trs bien pour la cration de sons stro amples.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorViewAvec ce bouton vous pouvez rgler le volume de l'oscillateur %1. Lorsque mettez la valeur 0 l'oscillateur est arrt. Sinon vous pouvez entendre l'oscillateur aussi fort que vous l'avez rgl.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorViewcentimescentsTripleOscillatorView degrsdegreesTripleOscillatorViewdemi-tons semitonesTripleOscillatorViewXContributeurs classs par nombre de commits:*Contributors ordered by number of commits:UiImpliquInvolvedUi@Dcrmenter le numro de versionDecrement version numberVersionedSaveDialog@Incrmenter le numro de versionIncrement version numberVersionedSaveDialog4 - contrle de greffon VST - VST plugin controlVestigeInstrumentViewCliquez ici pour slectionner les pr-rglages qui sont actuellement chargs dans le VST.>Click here to select presets that are currently loaded in VST.VestigeInstrumentViewCliquez ici pour montrer ou cacher l'interface utilisateur graphique de votre greffon VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewCliquez ici si vous voulez contrler le greffon VST partir de l'hte.8Click here, if you want to control VST-plugin from host.VestigeInstrumentViewCliquez ici si vous voulez ouvrir un autre pr-rglage de greffon VST *.fxp, *.fxb.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VestigeInstrumentViewCliquez ici si vous souhaitez ouvrir un autre greffon VST. Aprs avoir cliqu sur ce bouton, une bote de dialogue d'ouverture de fichier apparatra et vous pourrez slectionner votre fichier.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentViewCliquez ici si vous voulez sauvegarder le programme de pr-rglage de greffon VST courant.BClick here, if you want to save current VST-plugin preset program.VestigeInstrumentViewCliquez ici si vous voulez passer un autre programme de pr-rglage de plugin VST.GClick here, if you want to switch to another VST-plugin preset program.VestigeInstrumentView`Contrler le greffon VST partir de l'hte LMMS!Control VST-plugin from LMMS hostVestigeInstrumentView(Fichiers DLL (*.dll)DLL-files (*.dll)VestigeInstrumentView(Fichiers EXE (*.exe)EXE-files (*.exe)VestigeInstrumentViewSuivant (+)Next (+)VestigeInstrumentView@Aucun greffon VST n'a t chargNo VST-plugin loadedVestigeInstrumentView*Ouvrir un greffon VSTOpen VST-pluginVestigeInstrumentViewLOuvrir les pr-rglages du greffon VSTOpen VST-plugin presetVestigeInstrumentView6Ouvrir un autre greffon VSTOpen other VST-pluginVestigeInstrumentViewPr-rglagePresetVestigeInstrumentViewPrcdent (-) Previous (-)VestigeInstrumentView4Enregistrer le pr-rglage Save presetVestigeInstrumentView`Montrer/Cacher l'interface utilisateur graphique Show/hide GUIVestigeInstrumentViewBArrter de jouer toutes les notesTurn off all notesVestigeInstrumentViewpar by VestigeInstrumentView`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />0       
VstEffectControlDialogCliquez ici pour slectionner les pr-rglages qui sont actuellement chargs dans le VST.>Click here to select presets that are currently loaded in VST.VstEffectControlDialogCliquez ici si vous voulez contrler le greffon VST partir de l'hte.8Click here, if you want to control VST-plugin from host.VstEffectControlDialogCliquez ici si vous voulez ouvrir un autre pr-rglage de greffon VST *.fxp, *.fxb.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VstEffectControlDialogCliquez ici si vous voulez sauvegarder le programme de pr-rglage de greffon VST courant.BClick here, if you want to save current VST-plugin preset program.VstEffectControlDialogCliquez ici si vous voulez passer un autre programme de pr-rglage de plugin VST.GClick here, if you want to switch to another VST-plugin preset program.VstEffectControlDialog`Contrler le greffon VST partir de l'hte LMMS!Control VST-plugin from LMMS hostVstEffectControlDialogEffet par: Effect by: VstEffectControlDialogSuivant (+)Next (+)VstEffectControlDialogHOuvrir le pr-rglage du greffon VSTOpen VST-plugin presetVstEffectControlDialogPrcdent (-) Previous (-)VstEffectControlDialog4Enregistrer le pr-rglage Save presetVstEffectControlDialogMontrer/Cacher Show/hideVstEffectControlDialog"" VstPlugin'' VstPlugin.FXB.FXB VstPlugin.FXP.FXP VstPlugin.fxb.fxb VstPlugin.fxp.fxp VstPlugin: dfaut : default VstPlugin*Chargement du greffonLoading plugin VstPlugin*Ouvrir le Pr-rglage Open Preset VstPlugin4Enregistrer le pr-rglage Save Preset VstPluginPPr-rglage de Greffon VST (*.fxp *.fxb)Vst Plugin Preset (*.fxp *.fxb) VstPluginDessinez ici votre propre forme d'onde en faisant glisser votre souris sur ce graphique.ADraw your own waveform here by dragging your mouse on this graph. WatsynViewNormaliser Normalize WatsynView Onde sinusodale Sine wave WatsynView LisserSmooth WatsynViewOnde carre Square wave WatsynView"Onde triangulaire Triangle wave WatsynView Largeur de bande BandwidthZynAddSubFxInstrumentGain FMFM GainZynAddSubFxInstrument&Frquence du FiltreFilter FrequencyZynAddSubFxInstrument&Rsonance du FiltreFilter ResonanceZynAddSubFxInstrumentVTransmet les vnements MIDI Control Change"Forward MIDI Control Change EventsZynAddSubFxInstrumentPortamento PortamentoZynAddSubFxInstrument@Largeur de Bande de la RsonanceResonance BandwidthZynAddSubFxInstrumentDFrquence Centrale de la RsonanceResonance Center FrequencyZynAddSubFxInstrumentBWBWZynAddSubFxView"Largeur de bande: Bandwidth:ZynAddSubFxViewCliquez ici pour montrer ou cacher l'interface utilisateur graphique de ZynAddSubFX.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewGAIN FMFM GAINZynAddSubFxViewGain FM:FM Gain:ZynAddSubFxViewFRQFREQZynAddSubFxView(Frquence du Filtre:Filter Frequency:ZynAddSubFxView(Rsonance du Filtre:Filter Resonance:ZynAddSubFxViewVTransmet les vnements MIDI Control ChangeForward MIDI Control ChangesZynAddSubFxViewPORTPORTZynAddSubFxViewPortamento: Portamento:ZynAddSubFxViewRESRESZynAddSubFxView RES BWRES BWZynAddSubFxView RES CFRES CFZynAddSubFxViewBLargeur de Bande de la Rsonance:Resonance bandwidth:ZynAddSubFxViewFFrquence centrale de la rsonance:Resonance center frequency:ZynAddSubFxViewRMontrer l'interface utilisateur graphiqueShow GUIZynAddSubFxViewAmplifierAmplifyaudioFileProcessor(Fin de l'chantillon End of sampleaudioFileProcessor*Mode de jeu en boucle Loop modeaudioFileProcessor,Inverser l'chantillonReverse sampleaudioFileProcessor,Dbut de l'chantillonStart of sampleaudioFileProcessorBgaiementStutteraudioFileProcessor<Ajouter une piste d'automationAdd automation-trackbbEditorNAjouter un ryhtme ou une ligne de basseAdd beat/basslinebbEditorAjouter des pas Add stepsbbEditorLditeur de rythme et de ligne de basseBeat+Bassline EditorbbEditorCliquez ici pour jouer le rythme ou la ligne de basse. Le rythme ou la ligne de basse est rejou lorsque sa fin est atteinte.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorCliquez ici pour arrter de jouer le rythme ou la ligne de basse.4Click here to stop playing of current beat/bassline.bbEditorJouer/Mettre en pause le rythme ou la ligne de basse (Barre d'espace)(Play/pause current beat/bassline (Space)bbEditor"Supprimer des pas Remove stepsbbEditorArrter de jouer le rythme ou la ligne de basse (Barre d'espace).Stop playback of current beat/bassline (Space)bbEditor$Changer la couleur Change color bbTCOViewChanger le nom Change name bbTCOViewhOuvrir dans l'diteur de rythme et de ligne de basseOpen in Beat+Bassline-Editor bbTCOView(Rinitialiser le nom Reset name bbTCOView6Ryhtme ou ligne de basse %1Beat/Bassline %1bbTrackClone de %1 Clone of %1bbTrack2Longueur de l'chantillon Samplelength bitInvaderLCliquez ici pour une onde sinusodale.Click for a sine-wave.bitInvaderViewTCliquez ici pour une onde en dent de scie.Click here for a saw-wave.bitInvaderViewBCliquez ici pour une onde carre.Click here for a square-wave.bitInvaderViewNCliquez ici pour une onde triangulaire.Click here for a triangle-wave.bitInvaderViewhCliquez ici pour une onde dfinie par l'utilisateur.$Click here for a user-defined shape.bitInvaderView@Cliquez ici pour un bruit blanc.Click here for white-noise.bitInvaderViewPCliquez ici pour lisser la forme d'onde.Click here to smooth waveform.bitInvaderViewDessinez ici votre propre forme d'onde en faisant glisser votre souris sur ce graphique.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderViewInterpolation InterpolationbitInvaderViewNormaliser NormalizebitInvaderView2Longueur de l'chantillon Sample LengthbitInvaderView(Onde en dent de scieSaw wavebitInvaderView Onde sinusodale Sine wavebitInvaderView LisserSmoothbitInvaderViewOnde carre Square wavebitInvaderView"Onde triangulaire Triangle wavebitInvaderView<Onde dfinie par l'utilisateurUser defined wavebitInvaderViewBruit blancWhite noise wavebitInvaderViewBLe fichier n'a pas pu tre ouvertCould not open fileexportProjectDialogrLe fichier %1 ne peut pas tre ouvert en criture. Veuillez vrifier que vous avez les droits d'accs en criture pour ce fichier et le rpertoire qui contient ce fichier et ressayez !Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog ErreurErrorexportProjectDialogErreur pendant la dtection du priphrique d'encodage du fichier. Veuillez essayer de choisir un format de sortie diffrent.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog4Exporter le projet vers %1Export project to %1exportProjectDialogEncodage : %1%Rendering: %1%exportProjectDialogTVeuillez entrer un valeur entre %1 et %2 :+Please enter a new value between %1 and %2:faderGraphiqueGraph graphModel Frquence de fin End frequencykickerInstrumentGainGainkickerInstrument BruitNoisekickerInstrument$Frquence de dbutStart frequencykickerInstrument$Frquence de fin :End frequency:kickerInstrumentView Gain :Gain:kickerInstrumentView(Frquence de dbut :Start frequency:kickerInstrumentView Aid&e&HelpknobTVeuillez entrer un valeur entre %1 et %2 :+Please enter a new value between %1 and %2:knob~Veuillez entrer un nouvelle valeur entre -96,0 dBV et 6,0 dBV :7Please enter a new value between -96.0 dBV and 6.0 dBV:knob Outils d'analyseAnalysis ToolsladspaBrowserView$Effets disponiblesAvailable EffectsladspaBrowserView Divers Don't knowladspaBrowserViewInstruments InstrumentsladspaBrowserView Cette bote de dialogue affiche des informations sur tous les greffons LADSPA que LMMS a pu localiser. Ces greffons sont rpartis en cinq catgories en fonction de l'interprtation des types et des noms de port. Les Effets disponibles sont ceux qui peuvent tre utiliss par LMMS. Pour que LMMS puisse utiliser un effet, il doit, tout d'abord, tre un effet, ce qui revient dire qu'il doit avoir la fois des canaux d'entre et de sortie. LMMS identifie un canal d'entre comme un port audio contenant 'in' dans son nom. Les canaux de sortie sont identifis par les lettres 'out'. De plus, l'effet doit avoir le mme nombre d'entre que de sorties et doit pouvoir fonctionner en temps rel. Les Effets indisponibles sont ceux qui ont t identifis comme des effets, mais qui soit n'ont pas le mme nombre de canaux d'entre et de sortie, soit ne peuvent fonctionner en temps rel. Les Instruments sont des greffons pour lesquels seuls des canaux de sortie ont t identifis. Les Outils d'analyse sont des greffons pour lesquels seuls des canaux d'entre ont t identifis. Les Divers sont des greffons pour lesquels aucun canaux d'entre ou de sortie n'ont t identifis. En double-cliquant sur ces greffons vous ferez apparatre des informations sur les ports.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView Type :Type:ladspaBrowserView(Effets indisponiblesUnavailable EffectsladspaBrowserViewDescription DescriptionladspaDescriptionGreffonsPluginsladspaDescription AudioAudioladspaPortDialogContrleControlladspaPortDialogSens DirectionladspaPortDialogFlottantFloatladspaPortDialog EntreInputladspaPortDialog EntierIntegerladspaPortDialogLogarythmique LogarithmicladspaPortDialog,Min < par dfaut < MaxMin < Default < MaxladspaPortDialogNomNameladspaPortDialog SortieOutputladspaPortDialog PortsPortsladspaPortDialogVitesseRateladspaPortDialog SR DependentladspaPortDialogPermutToggledladspaPortDialogTypeTypeladspaPortDialogOuiYesladspaPortDialog Filtre 24 dB/oct24dB/oct Filter lb302Synth AccentAccent lb302Synth teintDead lb302SynthDistorsion Distortion lb302SynthLiaisonSlide lb302Synth,Descente de la liaison Slide Decay lb302Synth6Frquence de coupure du VCFVCF Cutoff Frequency lb302Synth<Descente de l'enveloppe du VCFVCF Envelope Decay lb302Synth@Modulation de l'enveloppe du VCFVCF Envelope Mod lb302Synth Rsonance du VCF VCF Resonance lb302SynthForme d'ondeWaveform lb302SynthR303-esque, 24 dB/octave, filtre 3 ples&303-es-que, 24dB/octave, 3 pole filterlb302SynthViewLCliquez ici pour une onde sinusodale.Click for a sine-wave.lb302SynthViewNCliquez ici pour une onde de type Moog. Click here for a moog-like wave.lb302SynthViewVCliquez ici pour une onde en dent de scie.Click here for a saw-wave.lb302SynthViewnCliquez ici pour une onde carre avec une fin arrondie.0Click here for a square-wave with a rounded end.lb302SynthViewBCliquez ici pour une onde carre.Click here for a square-wave.lb302SynthViewNCliquez ici pour une onde triangulaire.Click here for a triangle-wave.lb302SynthViewPCliquez ici pour une onde exponentielle.#Click here for an exponential wave.lb302SynthView@Cliquez ici pour un bruit blanc.Click here for white-noise.lb302SynthView,Frquence de coupure : Cutoff Freq:lb302SynthView DIST :DIST:lb302SynthViewDescente :Decay:lb302SynthView6Modulation de l'enveloppe :Env Mod:lb302SynthViewOnde Moog Moog wavelb302SynthViewRsonance : Resonance:lb302SynthView(Onde carre arrondieRounded square wavelb302SynthView(Onde en dent de scieSaw wavelb302SynthView Onde sinusodale Sine wavelb302SynthView0Descente de la liaison : Slide Decay:lb302SynthViewOnde carre Square wavelb302SynthView"Onde triangulaire Triangle wavelb302SynthViewBruit blancWhite noise wavelb302SynthView Filtre 24 dB/oct24dB/oct Filter lb303Synth AccentAccent lb303Synth teintDead lb303SynthDistorsion Distortion lb303SynthGlissementSlide lb303Synth,Descente du glissement Slide Decay lb303Synth6Frquence de coupure du VCFVCF Cutoff Frequency lb303Synth<Descente de l'enveloppe du VCFVCF Envelope Decay lb303Synth@Modulation de l'enveloppe du VCFVCF Envelope Mod lb303Synth Rsonance du VCF VCF Resonance lb303SynthForme d'ondeWaveform lb303SynthR303-esque, 24 dB/octave, filtre 3 ples&303-es-que, 24dB/octave, 3 pole filterlb303SynthViewCUTCUTlb303SynthView,Frquence de coupure : Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthView DIST :DIST:lb303SynthViewDescente :Decay:lb303SynthViewENV MODENV MODlb303SynthView6Modulation de l'enveloppe :Env Mod:lb303SynthViewRESRESlb303SynthViewRsonance : Resonance:lb303SynthView SLIDESLIDElb303SynthView0Descente de la liaison : Slide Decay:lb303SynthViewWAVEWAVElb303SynthView WAVE :WAVE:lb303SynthViewADSRADSRmalletsInstrument AgogoAgogomalletsInstrumentBattementsBeatsmalletsInstrument CourbBowedmalletsInstrumentBruit lourdClumpmalletsInstrumentFondu enchain CrossfademalletsInstrument VerreGlassmalletsInstrument DuretHardnessmalletsInstrument"Profondeur du LFO LFO DepthmalletsInstrumentVitesse du LFO LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrument$Fichiers manquants Missing filesmalletsInstrumentModulateur ModulatormalletsInstrumentMouvementMotionmalletsInstrumentPositionPositionmalletsInstrumentPressionPressuremalletsInstrumentRsoResomalletsInstrumentVitesseSpeedmalletsInstrumentDiffusionSpreadmalletsInstrumentStick Mix Stick MixmalletsInstrumentBol tibtain Tibetan BowlmalletsInstrument$Cloches tubulaires Tubular BellsmalletsInstrumentBarre accorde Tuned BarmalletsInstrumentDeux fixes Two FixedmalletsInstrumentBarre uniforme Uniform BarmalletsInstrumentVibraphone VibraphonemalletsInstrument(Frquence du vibrato Vibrato FreqmalletsInstrumentGain du vibrato Vibrato GainmalletsInstrument Bois1Wood1malletsInstrument Bois2Wood2malletsInstrumentVotre installation de STK semble incomplte. Veuillez vous assurer que le paquet Stk complet est install !aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR :ADSR:malletsInstrumentView CourbBowedmalletsInstrumentViewFondu enchain CrossfademalletsInstrumentView Fondu enchain : Crossfade:malletsInstrumentView DuretHardnessmalletsInstrumentViewDuret : Hardness:malletsInstrumentViewInstrument InstrumentmalletsInstrumentView"Profondeur du LFO LFO DepthmalletsInstrumentView&Profondeur du LFO : LFO Depth:malletsInstrumentViewVitesse du LFO LFO SpeedmalletsInstrumentView Vitesse du LFO : LFO Speed:malletsInstrumentViewModulateur ModulatormalletsInstrumentViewModulateur : Modulator:malletsInstrumentViewMouvementMotionmalletsInstrumentViewMouvement :Motion:malletsInstrumentViewPositionPositionmalletsInstrumentViewPosition : Position:malletsInstrumentViewPressionPressuremalletsInstrumentViewPression : Pressure:malletsInstrumentViewVitesseSpeedmalletsInstrumentViewVitesse :Speed:malletsInstrumentViewDiffusionSpreadmalletsInstrumentViewDiffusion :Spread:malletsInstrumentViewStick Mix Stick MixmalletsInstrumentViewStick Mix : Stick Mix:malletsInstrumentViewFrq VibVib FreqmalletsInstrumentViewFrq Vib : Vib Freq:malletsInstrumentViewGain VibVib GainmalletsInstrumentViewGain Vib : Vib Gain:malletsInstrumentViewVibratoVibratomalletsInstrumentViewVibrato :Vibrato:malletsInstrumentView Fermer  Close manageVSTEffectView8 - Paramtre de contrle VST - VST parameter controlmanageVSTEffectViewAutomatique AutomatedmanageVSTEffectViewCliquez ici si vous voulez seulement afficher les paramtres automatiques.Largeur du registre de dcalageShift Register widthpapuInstrumentZNiveau de dcalage vers la droite du balayageSweep RtShift amountpapuInstrument Sens de balayageSweep directionpapuInstrument"Temps de balayage Sweep timepapuInstrument AigusTreblepapuInstrument4Sens du volume du balayageVolume sweep directionpapuInstrumentMotif d'ondeWave Pattern DutypapuInstrument GravesBasspapuInstrumentViewGraves :Bass:papuInstrumentView2Canal 1 vers SO1 (droite)Channel1 to SO1 (Right)papuInstrumentView2Canal 1 vers SO2 (gauche)Channel1 to SO2 (Left)papuInstrumentView2Canal 2 vers SO1 (droite)Channel2 to SO1 (Right)papuInstrumentView2Canal 2 vers SO2 (gauche)Channel2 to SO2 (Left)papuInstrumentView2Canal 3 vers SO1 (droite)Channel3 to SO1 (Right)papuInstrumentView2Canal 3 vers SO2 (gauche)Channel3 to SO2 (Left)papuInstrumentView2Canal 4 vers SO1 (droite)Channel4 to SO1 (Right)papuInstrumentView2Canal 4 vers SO2 (gauche)Channel4 to SO2 (Left)papuInstrumentView.Dessinez votre onde iciDraw the wave herepapuInstrumentViewDLongueur de chaque pas du balayageLength of each step in sweeppapuInstrumentViewHLongueur de chaque pas du balayage :Length of each step in sweep:papuInstrumentView*Volume du canal bruitNoise Channel VolumepapuInstrumentView.Volume du canal bruit :Noise Channel Volume:papuInstrumentView&Volume SO1 (droite)SO1 Volume (Right)papuInstrumentView*Volume SO1 (droite) :SO1 Volume (Right):papuInstrumentView&Volume SO2 (droite)SO2 Volume (Left)papuInstrumentView*Volume SO2 (droite) :SO2 Volume (Left):papuInstrumentView>Largeur du registre de dcalageShift Register WidthpapuInstrumentView.Volume du canal carr 1Square Channel 1 VolumepapuInstrumentView2Volume du canal carr 1 :Square Channel 1 Volume:papuInstrumentView.Volume du canal carr 2Square Channel 2 VolumepapuInstrumentView2Volume du canal carr 2 :Square Channel 2 Volume:papuInstrumentView Sens de balayageSweep DirectionpapuInstrumentViewZNiveau de dcalage vers la droite du balayageSweep RtShift amountpapuInstrumentView^Niveau de dcalage vers la droite du balayage :Sweep RtShift amount:papuInstrumentView"Temps de balayage Sweep TimepapuInstrumentView&Temps de balayage : Sweep Time:papuInstrumentViewrLe niveau d'augmentation ou de diminution de la frquence/The amount of increase or decrease in frequencypapuInstrumentViewNLe dlai entre chaque changement de pasThe delay between step changepapuInstrumentViewLe cycle de travail est le rapport entre la dure (temps) pendant laquelle un signal est prsent et la priode totale du signal.mThe duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.papuInstrumentViewLa vitesse laquelle l'augmentation ou la diminution de la frquence se produit:The rate at which increase or decrease in frequency occurspapuInstrumentView AigusTreblepapuInstrumentViewAigus :Treble:papuInstrumentView4Sens du volume du balayageVolume Sweep DirectionpapuInstrumentView(Volume du canal ondeWave Channel VolumepapuInstrumentView,Volume du canal onde :Wave Channel Volume:papuInstrumentViewMotif d'onde Wave PatternpapuInstrumentViewMotif d'ondeWave Pattern DutypapuInstrumentViewMotif d'ondeWave pattern dutypapuInstrumentViewMotif d'onde :Wave pattern duty:papuInstrumentView0Synth FM 2 oprateurs2-operator FM Synth pluginBrowserLSynthtiseur additif pour sons d'orgue*Additive Synthesizer for organ-like sounds pluginBrowser\Synthtiseur de table d'ondes personnalisables"Customizable wavetable synthesizer pluginBrowser Faites glisser un instrument dans l'diteur de morceau, dans l'diteur de rythme et de ligne de basse, ou dans une piste d'instrument existante.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowser&ZynAddSubFX intgrEmbedded ZynAddSubFX pluginBrowserJmulateur de l'APU de la GameBoy (TM)Emulation of GameBoy (TM) APU pluginBrowsermulateur des SID MOS6581 et MOS8580. Ce composant tait utilis dans l'ordinateur Commodore 64.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserFiltre pour l'importation de projets Fruity Loops Studio dans LMMS1Filter for importing FL Studio projects into LMMS pluginBrowserhFiltre pour importer des fichiers Hydrogen dans LMMS-Filter for importing Hydrogen files into LMMS pluginBrowserhFiltre pour l'importation de fichiers MIDI dans LMMS)Filter for importing MIDI-files into LMMS pluginBrowserSons d'instruments compatibles avec la carte Gravis UltraSound (GUS)GUS-compatible patch instrument pluginBrowserTImitation incomplte de TB303 monophonique%Incomplete monophonic imitation tb303 pluginBrowser.Slecteur d'instrumentsInstrument browser pluginBrowser*Greffons d'instrumentInstrument plugins pluginBrowser"Port LMMS de sfxrLMMS port of sfxr pluginBrowserFListe des greffons LADSPA installsList installed LADSPA plugins pluginBrowser:Lecteur de fichiers SoundFontPlayer for SoundFont files pluginBrowservGreffon pour le contrle les boutons avec des crtes de son-Plugin for controlling knobs with sound peaks pluginBrowserGreffon pour l'amlioration de la sparation stro d'un fichier stro en entre=Plugin for enhancing stereo separation of a stereo input file pluginBrowser`Greffon pour la manipulation de la sortie stro,Plugin for freely manipulating stereo output pluginBrowser>Instruments frapper mlodieuxTuneful things to bang on pluginBrowserpHte VST pour l'utilisation de greffons VST(i) dans LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser4Modeleur de corde vibranteVibrating string modeler pluginBrowser$pas de descriptionno description pluginBrowserGreffon pour l'utilisation arbitraire d'effets LADSPA dans LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowser Gr&as&Bold projectNotesC&ouleurs... &Color... projectNotes&Copier&Copy projectNotes&Italique&Italic projectNotes&Justifier&Justify projectNotes&Gauche&Left projectNotesCo&ller&Paste projectNotes&Refaire&Redo projectNotesD&roite&Right projectNotes&Soulign &Underline projectNotes&Dfaire&Undo projectNotesC&entrerC&enter projectNotesCtrl+B projectNotesCtrl+C projectNotesCtrl+E projectNotesCtrl+I projectNotesCtrl+J projectNotesCtrl+L projectNotesCtrl+R projectNotesCtrl+U projectNotesCtrl+V projectNotesCtrl+X projectNotesCtrl+Y projectNotesCtrl+Z projectNotesCou&perCu&t projectNotesdition Edit Actions projectNotes FormatFormat Actions projectNotesNotes du projet Project notes projectNotestIci vous pouvez prendre des notes concernant votre projet.!Put down your project notes here. projectNotesRenommer... Rename... renameDialogINTERFACE AUDIOAUDIO INTERFACE setupDialog@Rpertoire des thmes graphiquesArtwork directory setupDialog&Configuration audioAudio settings setupDialog6TAILLE DE LA MMOIRE TAMPON BUFFER SIZE setupDialog<Thme graphique d'arrire-planBackground artwork setupDialogAnnulerCancel setupDialog|Choisissez le rpertoire d'installation de Fruity Loops Studio'Choose FL Studio installation directory setupDialogXChoisissez le rpertoire des greffons LADSPAChoose LADSPA plugin directory setupDialogVChoisissez le rpertoire de travail de LMMSChoose LMMS working directory setupDialog>Choisissez le rpertoire de STKChoose STK rawwave directory setupDialog\Choisissez le rpertoire des thmes graphiquesChoose artwork-theme directory setupDialogXChoisissez le thme graphique d'arrire-planChoose background artwork setupDialogDChoisissez la SoundFont par dfautChoose default SoundFont setupDialogRChoisissez le rpertoire des greffons VST Choose your VST-plugin directory setupDialog2Boutons de piste compacteCompact track buttons setupDialogXCompresser par dfaut les fichiers de projet"Compress project files per default setupDialog8Fichier SoundFont par dfautDefault Soundfont File setupDialog2Afficher le volume en dBVDisplay volume as dBV  setupDialogZActiver la fonction de sauvegarde automatiqueEnable auto save feature setupDialoghActiver les tiquettes de note dans le piano virtuel Enable note labels in piano roll setupDialog.Activer les info-bullesEnable tooltips setupDialog\Activer l'affichage de forme d'onde par dfaut"Enable waveform display by default setupDialog`Rpertoire d'installation de Fruity Loops Studio FL Studio installation directory setupDialog6Trames : %1 Latence : %2 msFrames: %1 Latency: %2 ms setupDialog,Configuration gnraleGeneral settings setupDialogNPriphrique de sortie audio en mode HQHQ-mode for output audio-device setupDialogBIci vous pouvez choisir l'interface MIDI que vous prfrez. En fonction de la configuration de votre systme au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fentres contenant des contrles pour rgler l'interface MIDI choisie.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogFIci vous pouvez choisir l'interface audio que vous prfrez. En fonction de la configuration de votre systme au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fentres contenant des contrles pour rgler l'interface audio choisie.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialog<Ici vous pouvez rgler la taille de la mmoire tampon interne utilise par LMMS. Les valeurs faibles rduisent la latence mais peuvent aussi rendre le son inutilisable ou induire de mauvaises performances, en particulier sur des ordinateurs anciens ou des systme sans noyau temps-rel.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialogDChemin d'accs aux greffons LADSPALADSPA plugin paths setupDialog:Rpertoire de travail de LMMSLMMS working directory setupDialogINTERFACE MIDIMIDI INTERFACE setupDialog$Configuration MIDI MIDI settings setupDialog DIVERSMISC setupDialogOKOK setupDialogFMode fentre une piste d'instrument One instrument track window mode setupDialogChemins d'accsPaths setupDialog<Configuration des performancesPerformance settings setupDialogVeuillez noter que la plupart des modifications ne prendront pas effet tant n'aurez pas redmarr LMMS !GPlease note that most changes won't take effect until you restart LMMS! setupDialogHRinitialiser la valeur par dfautReset to default-value setupDialogRedmarrer LMMS Restart LMMS setupDialog"Rpertoire de STKSTK rawwave directory setupDialog*Configuration de LMMS Setup LMMS setupDialoglAfficher le curseur de lecture dans AudioFileProcessor*Show playback cursor in AudioFileProcessor setupDialogAfficher l'invitation redmarrer aprs la modification de le configuration,Show restart warning after changing settings setupDialogXDplacement fluide dans l'Editeur de ChansonSmooth scroll in Song Editor setupDialogXSync les greffons VST la lecture de l'hte!Sync VST plugins to host playback setupDialog>Effets graphique vs PerfomancesUI effects vs. performance setupDialog6Rpertoire des greffons VSTVST-plugin directory setupDialog BanqueBank sf2Instrument ChorusChorus sf2Instrument(Profondeur de chorus Chorus Depth sf2Instrument Niveau de chorus Chorus Level sf2Instrument Lignes de chorus Chorus Lines sf2Instrument"Vitesse de chorus Chorus Speed sf2InstrumentGainGain sf2InstrumentSonPatch sf2InstrumentRverbrationReverb sf2InstrumentBAmortissement de la rverbrationReverb Damping sf2Instrument4Niveau de la rverbration Reverb Level sf2Instrument*Rverbration (Salle)Reverb Roomsize sf2Instrument6Largeur de la rverbration Reverb Width sf2InstrumentNAppliquer le chorus (si pris en charge)Apply chorus (if supported)sf2InstrumentView\Appliquer la rverbration (si pris en charge)Apply reverb (if supported)sf2InstrumentViewChoisir un sonChoose the patchsf2InstrumentView,Profondeur de chorus : Chorus Depth:sf2InstrumentView$Niveau de chorus : Chorus Level:sf2InstrumentView$Lignes de chorus : Chorus Lines:sf2InstrumentView&Vitesse de chorus : Chorus Speed:sf2InstrumentViewXCliquez ici pour ouvrir un autre fichier SF2#Click here to open another SF2 filesf2InstrumentViewGainGainsf2InstrumentView6Ouvrir un fichier SoundFontOpen SoundFont filesf2InstrumentView6Ouvrir un fichier SoundFontOpen other SoundFont filesf2InstrumentViewFAmortissement de la rverbration :Reverb Damping:sf2InstrumentView8Niveau de la rverbration : Reverb Level:sf2InstrumentView.Rverbration (Salle) :Reverb Roomsize:sf2InstrumentView:Largeur de la rverbration : Reverb Width:sf2InstrumentView6Fichiers SoundFont2 (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentView Ce bouton active l'effet chorus. Ceci est utile pour de beaux effets, mais ne fonctionne que sur les fichier qui le prenne en charge.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewCe bouton active l'effet rverbration. Ceci est utile pour de beaux effets, mais ne fonctionne que sur les fichier qui le prenne en charge.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewForme d'Onde Wave FormsfxrInstrument"Modle de circuit Chip model sidInstrumentCoupureCutoff sidInstrumentType de filtre Filter type sidInstrumentRsonance Resonance sidInstrumentVoix 3 coupe Voice 3 off sidInstrument VolumeVolume sidInstrumentLa vitesse d'attaque dtermine la rapidit laquelle la sortie de la Voix %1 passera de zro l'amplitude de crte.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentViewAttaque :Attack:sidInstrumentView&Filtre passe-bande Band-Pass filter sidInstrumentViewGrossier :Coarse:sidInstrumentView,Frquence de coupure :Cutoff frequency:sidInstrumentViewLa vitesse de descente dtermine la rapidit laquelle la vitesse la sortie passera de l'amplitude de crte au niveau de soutien choisi.iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentViewDescente :Decay:sidInstrumentView FiltrFilteredsidInstrumentView$Filtre passe-haut High-Pass filter sidInstrumentView"Filtre passe-bas Low-Pass filter sidInstrumentViewSID MOS6581  MOS6581 SID sidInstrumentViewSID MOS8580  MOS8580 SID sidInstrumentView BruitNoisesidInstrumentViewLa sortie de la Voix %1 restera au niveau d'amplitude de soutien choisi tant que la note sera maintenu.]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentView Onde d'impulsion Pulse WavesidInstrumentView*Largeur d'impulsion : Pulse Width:sidInstrumentViewRelchement :Release:sidInstrumentViewRsonance : Resonance:sidInstrumentViewMode anneauRing-ModsidInstrumentView*Le mode anneau remplace la sortie en forme d'onde triangulaire de l'oscillateur %1 par une combinaison "Module en anneau" des oscillateurs %1 et %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentViewDent de scieSawToothsidInstrumentViewSoutien :Sustain:sidInstrumentViewSyncSyncsidInstrumentView.Sync synchronise la frquence fondamentale de l'oscillateur %1 avec la frquence fondamentale de l'oscillateur %2 en produisant des effets "Hard Sync".Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentViewTestTestsidInstrumentViewLorsqu'il est activ, Test rinitialise et vrouille l'oscillateur %1 zro jusqu' ce que Test soit dsactiv.PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewLe dsaccordage grossier permet de dsaccorder la Voix %1 d'une octave vers le haut ou vers le bas.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewLa rsolution de la largeur d'impulsion permet la largeur d'tre balaye doucement sans pas discernable. La forme d'onde de l'impulsion de l'oscillateur %1 doit tre choisie pour n'avoir aucun effet audible.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentViewLa sortie de la Voix %1 descendra de l'amplitude de soutien l'amplitude zro la vitesse de relchement choisie.jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentView"Onde triangulaire Triangle WavesidInstrumentViewVoix 3 coupe  Voice3 Off sidInstrumentViewVolume :Volume:sidInstrumentViewVLorsque Filtr est activ, la Voix %1 sera traite par le filtre. Lorsque Filtr est dsactiv, la Voix %1 va directement en sortie, et le filtre n'a aucun effet sur elle.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentView2Tous les types de fichierAll file typessong$Le projet est vide Empty projectsong6Projets Fruity Loops StudioFL Studio projectssong Projets HydrogenHydrogen projectssong&Importer un fichier Import filesongSquences MIDIMIDI sequencessong"Tonalit gnrale Master pitchsongVolume gnral Master volumesong,Projet NON enregistr.Project NOT saved.song4Le projet a t enregistr Project savedsong|Slectionnez un rpertoire pour crire les pistes exportes.../Select directory for writing exported tracks...songrSlectionnez un fichier vers lequel exporter le projet...!Select file for project-export...songTemposongNLe projet %1 est maintenant enregistr.The project %1 is now saved.songJLe projet %1 n'a pas t enregistr !The project %1 was not saved!songL'exportation n'a pas de sens car ce projet est vide. Veuillez d'abord mettre quelques lments dans l'diteur de morceau !`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songsans titreuntitledsongAMPLWIDEstereoEnhancerControlDialogAmpleur :Width:stereoEnhancerControlDialogAmpleurWidthstereoEnhancerControls6Volume de gauche gauche :Left to Left Vol:stereoMatrixControlDialog6Volume de gauche droite :Left to Right Vol:stereoMatrixControlDialog6Volume de droite gauche :Right to Left Vol:stereoMatrixControlDialog6Volume de droite droite :Right to Right Vol:stereoMatrixControlDialogGauche gauche Left to LeftstereoMatrixControlsGauche droite Left to RightstereoMatrixControlsDroite gauche Right to LeftstereoMatrixControlsDroite droiteRight to RightstereoMatrixControls<Revenir au dbut aprs l'arrtAfter stopping go back to begintimeLineZRevenir la position de dpart aprs l'arrt?After stopping go back to position at which playing was startedtimeLine8Ne rien faire aprs l'arrtAfter stopping keep positiontimeLineHActiver/Dsactiver l'auto-dfilementEnable/disable auto-scrollingtimeLinebActiver/Dsactiver les marqueurs de jeu en boucleEnable/disable loop-pointstimeLine AstuceHinttimeLine*Maintenez <Shift> pour dplacer le marqueur de dbut de jeu en boucle. Appuyez sur <Ctrl> pour dsactiver les marqueurs magntiques de jeu en boucle.XHold to move the begin loop point; Press to disable magnetic loop points.timeLineAppuyez sur <Ctrl> pour dsactiver les marqueur magntiques de jeu en boucle.-Press to disable magnetic loop points.timeLine CoupeMutedtrackJoue en soloSolotrack CoupeMutedtrackContentObject0%1:%2 (%3:%4 vers %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView CopierCopytrackContentObjectViewLongueurCurrent lengthtrackContentObjectViewPositionCurrent positiontrackContentObjectView CouperCuttrackContentObjectViewRSupprimer (bouton du milieu de la souris)Delete (middle mousebutton)trackContentObjectView AstuceHinttrackContentObjectViewFCouper/Jouer (<Ctrl> + clic-milieu)#Mute/unmute ( + middle click)trackContentObjectView CollerPastetrackContentObjectViewfAppuyez sur <Ctrl> et glissez pour faire une copie.%Press and drag to make a copy.trackContentObjectViewfAppuyez sur <Ctrl> pour un redimensionnement libre.Press for free resizing.trackContentObjectView0Actions pour cette pisteActions for this tracktrackOperationsWidget$Cloner cette pisteClone this tracktrackOperationsWidget CouperMutetrackOperationsWidget$Couper cette pisteMute this tracktrackOperationsWidgetAppuyez sur <Ctrl> en cliquant sur la poigne de dplacement pour commencer un nouveau glisser/dposer.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget*Supprimer cette pisteRemove this tracktrackOperationsWidgetJouer en soloSolotrackOperationsWidgetJLe chargement du greffon VST a chouFailed loading VST-pluginvestigeInstrument*Chargement du greffonLoading pluginvestigeInstrumenttVeuillez patienter pendant le chargement du greffon VST...'Please wait while loading VST-plugin...vestigeInstrumentJLe greffon VST %1 n'a pas pu tre charg pour une raison quelconque. S'il fonctionne avec d'autres logiciels VST sous Linux, merci de contacter un dveloppeur LMMS !The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentDsaccordage %1 Detune %1vibedFlou %1 Fuzziness %1 vibedImpulsion %1 Impulse %1vibedLongueur %1 Length %1vibedOctave %1 Octave %1vibedPanoramique %1Pan %1vibed(Position du micro %1Pick %1 positionvibed(Position du micro %1Pickup %1 positionvibed.Rigidit de la corde %1String %1 stiffnessvibed*Volume de la corde %1String %1 volumevibed Aid&e&Help vibedViewhCliquez ici pour activer/dsactiver la forme d'onde.&Click here to enable/disable waveform. vibedViewXCliquez ici pour normaliser la forme d'onde.!Click here to normalize waveform. vibedViewPCliquez ici pour lisser la forme d'onde.Click here to smooth waveform. vibedViewDetune :Detune: vibedView.Activer la forme d'ondeEnable waveform vibedView Flou : Fuzziness: vibedView&diteur d'impulsionImpulse Editor vibedView2Impulsion ou tat initialImpulse or initial state vibedViewLongueur :Length: vibedViewNormaliser Normalize vibedView OctaveOctave vibedViewPanoramique :Pan: vibedView$Point de contact :Pick position: vibedView Point d'coute :Pickup position: vibedView(Onde en dent de scieSaw wave vibedView Onde sinusodale Sine wave vibedView LisserSmooth vibedViewOnde carre Square wave vibedView CordeString vibedView,Rigidit de la corde :String stiffness: vibedViewRLe slecteur Imp dtermine si la forme d'onde dans le graphique doit tre traite comme une impulsion donne la corde par le contact ou l'tat initial de la corde.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewLe bouton P rgle l'endroit o la corde sera 'gratte'. Plus la valeur est faible, plus le point de contact sera proche du chevalet.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewDLe bouton PU rgle l'endroit o les vibrations de la corde choisie seront coutes. Plus la valeur est faible, plus le point d'coute sera proche du chevalet.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewxLe bouton S rgle la rigidit de la corde choisie. La rigidit de la corde affecte le temps pendant lequel la corde sonnera. Plus la valeur est faible, plus la corde sonnera longtemps.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewhLe bouton V rgle le volume de la corde choisie.4The 'V' knob sets the volume of the selected string. vibedView2Le bouton Detune modifie la hauteur de la corde choisie. Les valeurs ngatives produiront un son grave. Les valeurs positives produiront un son aigu.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewLe bouton Length rgle la longueur de la corde choisie. Les cordes les plus longues vibrent plus longtemps et sonnent plus brillament; cependant, elles consommeront galement plus de cycles du processeur.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewxLe slecteur Octave est utilis pour choisir l'harmonique de la note laquelle la corde sonnera. Par exemple, '-2' signifie que la corde sonnera deux octaves sous la fondamentale, 'F' signifie que la corde sonnera la fondamentale, et '6' signifie que la corde sonnera six octaves au-dessus de la fondamentale.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewLe bouton Pan dtermine l'emplacement de la corde choisie dans le champ stro.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewhLe bouton Slap ajoute un peu de flou la corde choisie, plus sensible pendant l'attauqe, bien qu'il puisse aussi tre utilis pour rendre le son de la corde plus 'mtallique'.The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedView4Le slecteur String est utilis pour choisir la corde que les contrles sont en train d'diter. Un instrument Vibed peut contenir jusqu' neuf cordes vibrant indpendament. Le LED situ dans le coin en bas droite de l'diteur de forme indique si la corde choisie est utilise.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewL'diteur de forme d'onde permet de contrler l'tat initial ou l'impulsion qui sera utilis pour commencer faire vibrer la corde. Les boutons situs droite du graphique initialiseront la forme d'onde en fonction du type choisi. Le bouton ? chargera la forme d'onde partir d'un fichier - seuls les 128 premiers chantillons seront chargs. La forme d'onde peu galement tre dessine dans le graphique. Le bouton S lissera la forme d'onde. Le bouton N normalisera la forme d'onde.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedView"Onde triangulaire Triangle wave vibedViewnUtiliser une onde en dent de scie pour cet oscillateur.&Use a saw-wave for current oscillator. vibedViewfUtiliser une onde sinusodale pour cet oscillateur.'Use a sine-wave for current oscillator. vibedView\Utiliser une onde carre pour cet oscillateur.)Use a square-wave for current oscillator. vibedViewhUtiliser une onde triangulaire pour cet oscillateur.+Use a triangle-wave for current oscillator. vibedViewUtiliser une onde dfinie par l'utilisateur pour cet oscillateur.3Use a user-defined waveform for current oscillator. vibedViewZUtiliser un bruit blanc pour cet oscillateur.'Use white-noise for current oscillator. vibedView<Onde dfinie par l'utilisateurUser defined wave vibedViewVibed modlise jusqu' neuf cordes vibrant indpendament. Le slecteur Corde vous permet de choisir la corde diter. Le slecteur Imp choisi si le graphique reprsente une impulsion ou l'tat initial de la corde. Le slecteur Octave choisi quelle harmonique la corde devra vibrer. Le graphique vous permet de contrler l'tat initial ou l'impulsion utilise pour mettre la corde en mouvement. Le bouton V contrle le volume. Le bouton S contrle la rigidit de la corde. Le bouton P contrle le point de contact. Le bouton PU contrle le point d'coute. Pan et Dsaccorder n'ont heureusement pas besoin d'explications. Le bouton Slap ajoute un peu de flou au son de la corde. Le bouton Longueur contrle la longueur de la corde. Le LED situ dans le coin en bas droite de l'diteur de forme d'onde indique si la corde est utilis dans l'instrument.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewVolume :Volume: vibedViewBruit blancWhite noise wave vibedView(Cliquez pour activerClick to enablevisualizationWidgetCliquez pour activer/dsactiver la visualisation de la sortie gnrale6click to enable/disable visualization of master-outputvisualizationWidget*Attaque de la voix %1Voice %1 attack voiceObjectFDsaccordage grossier de la voix %1Voice %1 coarse detuning voiceObject,Descente de la voix %1Voice %1 decay voiceObjectVoix %1 filtreVoice %1 filtered voiceObjectBLargeur d'impulsion de la voix %1Voice %1 pulse width voiceObject2Relchement de la voix %1Voice %1 release voiceObjectFModulation en anneaux de la voix %1Voice %1 ring modulate voiceObject*Soutien de la voix %1Voice %1 sustain voiceObject:Synchronisation de la voix %1 Voice %1 sync voiceObject$Test de la voix %1 Voice %1 test voiceObject4Forme d'onde de la voix %1Voice %1 wave shape voiceObjectlmms-1.1.3/data/locale/fr.ts000066400000000000000000011570231247673406200156370ustar00rootroot00000000000000 AboutDialog About LMMS À propos de LMMS Version %1 (%2/%3, Qt %4, %5) Version %1 (%2/%3, Qt %4, %5) About À propos LMMS - easy music production for everyone LMMS - la production musicale à la portée de tous Authors Auteurs Translation Traduction Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! Si vous êtes intéressé par la traduction de LMMS dans une nouvelle langue ou si vous souhaitez améliorer des traductions existantes, votre aide est la bienvenue ! Contactez simplement le mainteneur ! License Licence Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2014, les développeurs de LMMS <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS LMMS AmplifierControlDialog VOL VOL Volume: Volume : PAN PAN Panning: Panoramique : LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Volume Panning Panoramique Left gain Right gain AudioAlsa::setupWidget DEVICE PÉRIPHÉRIQUE CHANNELS CANAUX AudioFileProcessorView Open other sample Ouvrir un autre échantillon Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Cliquez ici si vous souhaitez ouvrir un autre fichier audio. Une boîte de dialogue dans laquelle vous pourrez choisir le fichier apparaîtra. Des réglages comme le mode de jeu en boucle, les marqueurs de début et de fin, la valeur d'amplication, et ainsi de suite ne sont pas réinitialisés. Par conséquent, il peut ne pas ressembler à l'échantillon original. Reverse sample Inverser l'échantillon If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Si vous activez ce bouton, l'échantillon complet est inversé. Ceci est utile pour certains effets, p. ex. une cymbale crash inversée. Amplify: Amplifier : With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Avec ce bouton vous pouvez régler le facteur d'amplification. Lorsque vous indiquez une valeur de 100 % votre échantillon n'est pas changé. Sinon il sera plus ou moins amplifié (votre fichier d'échantillon n'est pas modifié !) Startpoint: Marqueur de début : Endpoint: Marqueur de fin : Continue sample playback across notes Continuer de jouer l'échantillon à traver les notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Activer cette option fait que l'échantillon continue de jouer à traver les différentes notes - si vous changez la hauteur, ou si la longueur de la note s'arrête avant la fin de l'échantillon, alors la note suivante jouée continuera où elle aura été arrêtée. Pour remettre à zéro le jeu au début de l'échantillon, insérez une note en bas du clavier (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: Longueur de l'échantillon: AudioJack JACK client restarted Le client JACK a redémarré LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS a été rejeté par JACK pour une raison quelconque. Par conséquent le serveur de JACK a été redémarré. Vous devrez refaire les connexions manuellement. JACK server down Le serveur JACK est arrêté The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Le serveur JACK semble avoir été arrêté et le démarrage d'une nouvelle instance a échoué. Par conséquent LMMS ne peut pas continuer. Vous devriez enregistrer votre projet puis redémarrer JACK et LMMS. AudioJack::setupWidget CLIENT-NAME NOM DU CLIENT CHANNELS CANAUX AudioOss::setupWidget DEVICE PÉRIPHÉRIQUE CHANNELS CANAUX AudioPortAudio::setupWidget BACKEND SERVEUR DEVICE PÉRIPHÉRIQUE AudioPulseAudio::setupWidget DEVICE PÉRIPHÉRIQUE CHANNELS CANAUX AudioSdl::setupWidget DEVICE PÉRIPHÉRIQUE AutomatableModel &Reset (%1%2) &Réinitialiser (%1%2) &Copy value (%1%2) &Copier la valeur (%1%2) &Paste value (%1%2) &Coller la valeur (%1%2) Edit song-global automation Éditer l'automation globale du morceau Connected to %1 Connecté à %1 Connected to controller Connecté au contrôleur Edit connection... Éditer la connexion... Remove connection Supprimer la connexion Connect to controller... Connecter le contrôleur... Remove song-global automation Supprime l'automation globale de la chanson Remove all linked controls Supprime tous les contrôles liés AutomationEditor Play/pause current pattern (Space) Jouer/Mettre en pause le motif (Barre d'espace) Stop playing of current pattern (Space) Arrêter de jouer le motif courant (Barre d'espace) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Cliquez ici si vous souhaitez jouer le motif courant. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. Click here if you want to stop playing of the current pattern. Cliquez ici si vous souhaitez arrêter de jouer le motif courant. Draw mode (Shift+D) Mode dessin (Shift+D) Erase mode (Shift+E) Mode effacement (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter et déplacer des valeurs particulières. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des valeurs particulières. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode. Cut selected values (Ctrl+X) Couper les valeurs sélectionnées (Ctrl+X) Copy selected values (Ctrl+C) Copier les valeurs sélectionnées (Ctrl+C) Paste values from clipboard (Ctrl+V) Coller les valeurs sélectionnées (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. Click here and the values from the clipboard will be pasted at the first visible measure. Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible. Automation Editor - no pattern Éditeur d'automation - pas de motif Automation Editor - %1 Éditeur d'automation - %1 Please open an automation pattern with the context menu of a control! Veuillez ouvrir un motif d'automation avec le menu contextuel d'un contrôle ! Values copied Les valeurs ont été copiées All selected values were copied to the clipboard. Toutes les valeurs ont été copiées dans le presse-papier. Discrete progression Progression discrète Linear progression Progression linéaire Cubic Hermite progression Progression cubique de Hermite Tension: Tension : Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Cliquez ici pour choisir la progression discrète pour ce motif d'automation. La valeur de l'objet connecté restera contante entre les points de contrôle et se verra affecter immédiatement une nouvelle valeur quand un point de contrôle est atteint. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Cliquez ici pour choisir la progression linéaire pour ce motif d'automation. La valeur de l'objet connecté changera à un taux contant entre les points de contrôle et atteindra la valeur correcte à chaque point de contrôle sans changement soudain. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Cliquez ici pour choisir la progression cubique de Hermite pour ce motif d'automation. La valeur de l'objet connecté changera suivant une courbe lisse. Tension value for spline Valeur de tension pour la spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. Une valeur de tension élevée donne une courbe plus lisse mais introduit des dépassements pour certaines valeurs. Une valeur de tension basse fera que la pente de la courbe se stabilisera à chaque point de contrôle. AutomationPattern Drag a control while pressing <Ctrl> Déplacer un contrôle en appuyant sur <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor double-cliquer pour ouvrir ce motif dans l'éditeur d'automation Open in Automation editor Ouvrir dans l'éditeur d'automation Clear Effacer Reset name Réinitialiser le nom Change name Changer le nom %1 Connections %1 connexions Disconnect "%1" Déconnecter "%1" Set/clear record Régler/Effacer l'enregistrement AutomationTrack Automation track Piste d'automation BassBoosterControlDialog FREQ FRÉQ Frequency: Fréquence : GAIN GAIN Gain: Gain : RATIO RAPPORT Ratio: Rapport : BassBoosterControls Frequency Fréquence Gain Gain Ratio Rapport CarlaInstrumentView Show GUI Montrer l'interface utilisateur graphique Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Contrôleur %1 ControllerConnectionDialog Connection Settings Configuration de la connexion MIDI CONTROLLER CONTRÔLEUR MIDI Input channel Canal d'entrée CHANNEL CANAL Input controller Contrôleur d'entrée CONTROLLER CONTRÔLEUR Auto Detect Auto-détection MIDI-devices to receive MIDI-events from Périphériques MIDI desquels recevoir des évènements MIDI USER CONTROLLER CONTRÔLEUR UTILISATEUR MAPPING FUNCTION FONCTION DE MAPPAGE OK OK Cancel Annuler LMMS LMMS Cycle Detected. Un cycle a été détecté. ControllerRackView Controller Rack Rack d'effets Add Ajouter Confirm Delete Confirmer la suppression Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. Confirmer la suppression ? Il existe des connection(s) associée(s) avec ce contrôleur. Il n'est pas possible d'annuler cette action. ControllerView Controls Contrôles Controllers are able to automate the value of a knob, slider, and other controls. Les contrôleurs sont capables d'automatiser le réglage d'un bouton, d'un curseur et d'autres contrôles. Rename controller Renommer un contrôleur Enter the new name for this controller Entrez un nouveau nom pour ce contrôleur &Remove this plugin Supp&rimer ce greffon &Help Aid&e DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass Passe-bas HiPass Passe-haut BandPass csg Passe-bande "csg" BandPass czpg Passe-bande "czpg" Notch Coupe-bande Allpass Passe-tout Moog Moog 2x LowPass Passe-bas x2 RC LowPass 12dB RC Passe Bas 12dB RC BandPass 12dB RC Passe Bande 12dB RC HighPass 12dB RC Passe Haut 12dB RC LowPass 24dB RC Passe Bas 24dB RC BandPass 24dB RC Passe Bande 24dB RC HighPass 24dB RC Passe Haut 24dB Vocal Formant Filter Filtre Formant Vocal Effect Effect enabled Effet activé Wet/Dry mix Ratio Gate Seuil Decay Descente EffectChain Effects enabled Effets activés EffectRackView EFFECTS CHAIN CHAÎNE D'EFFETS Add effect Ajouter un effet EffectSelectDialog Add effect Ajouter un effet Plugin description Description du greffon EffectView Toggles the effect on or off. Active ou désactive l'effet. On/Off On/Off W/D W/D Wet Level: Niveau avec effet : The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. Le bouton « Wet/Dry » règle le rapport entre le signal d'entrée et le signal d'effet qui produit la sortie. DECAY DECAY Time: Durée : The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. Le bouton « Decay » contrôle le nombre de tampons de silence qui doivent s'écouler avant que le greffon arrête le traitement. Les valeurs faibles réduiront la charge du processeur mais feront courrir le risque de couper la fin sur des effets de délai et de réverbération. GATE GATE Gate: Gate : The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Le bouton « Gate » contrôle le niveau du signal qui est considéré comme étant un 'silence' lorsque l'on doit décider d'arrêter le traitement des signaux. Controls Contrôles Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Les greffons d'effet agissent comme une série d'effets enchaînés dans laquelle le signal sera traité du haut vers le bas. Le bouton « On/Off » vous permet de court-circuiter un greffon donné à n'importe quel moment. Le bouton « Mix Wet/Dry » contrôle l'équilibre entre le signal en entrée et le signal traité qui est le résultat en sortie de l'effet. L'entrée d'un étage est la sortie de l'étage précédent. De ce fait, l'importance du signal 'original' diminue au fur et à mesure de l'application des effets. Le bouton « Decay » contrôle le temps pendant lequel le signal continuera d'être traité après que les notes aient été relachées. L'effet arrêtera de traiter le signal lorsque le volume sera passé en dessous d'un seuil donné pendant une période de temps donnée. Ce bouton règle la 'période de temps donnée'. Les périodes longues nécessiteront plus de processeur, ce qui fait que ce nombre devrait être réglé assez bas pour la plupart des effets. Il a besoin d'être augmenté pour les effets qui produisent de longues périodes de silence, p. ex. les délais. Le bouton « Gate » contrôle le 'seuil donné' pour l'arrêt automatique de l'effet. L'horloge pour la 'période de temps donnée' démarrera dès que le niveau du signal traité passera sous le niveau spécifié avec ce bouton. Le bouton « Contrôles » ouvre un boîte de dialogue permettant de modifier la configuration de l'effet. Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l'ordre dans lequel les effets sont traités ou bien également supprimer un effet. Move &up Déplacer vers le ha&ut Move &down &Déplacer vers le bas &Remove this plugin Supp&rimer ce greffon &Help Aid&e EnvelopeAndLfoParameters Predelay Pré-délai Attack Attaque Hold Maintien Decay Descente Sustain Soutien Release Relâchement Modulation Modulation LFO Predelay Pré-délai du LFO LFO Attack Attaque du LFO LFO speed Vitesse du LFO LFO Modulation Modulation du LFO LFO Wave Shape Forme d'onde du LFO Freq x 100 Fréq x 100 Modulate Env-Amount Moduler le niveau de l'enveloppe EnvelopeAndLfoView DEL DEL Predelay: Pré-délai : Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Utilisez ce bouton pour régler le pré-délai de l'enveloppe. Plus la valeur est importante, plus le temps sera long avant le début de l'enveloppe. ATT ATT Attack: Attaque : Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Utilisez ce bouton pour régler le temps d'attaque de l'enveloppe. Plus la valeur est importante, plus l'enveloppe met du temps pour monter au niveau d'attaque. Choisissez une petite valeur pour des instruments comme le piano et une grande valeur pour les cordes. HOLD HOLD Hold: Maintien : Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Utilisez ce bouton pour régler le temps de maintien de l'enveloppe. Plus la valeur est importante, plus l'enveloppe maintien longtemps le niveau d'attaque avant de commencer à descendre vers le niveau de soutien. DEC DEC Decay: Descente : Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Utilisez ce bouton pour régler le temps de descente de l'enveloppe. Plus la valeur est importante, plus l'enveloppe met du temps pour descendre du niveau d'attaque au niveau de soutien. Choisissez une petite valeur pour des instruments comme le piano. SUST SUST Sustain: Soutien : Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Utilisez ce bouton pour régler le niveau de soutien de l'enveloppe. Plus la valeur est importante, plus l'enveloppe reste longtemps à un niveau élevé avant de descendre à zéro. REL REL Release: Relâchement : Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Utilisez ce bouton pour régler le temps de relâchement de l'enveloppe. Plus la valeur est importante, plus l'enveloppe met du temps pour descendre du niveau de soutien à zéro. Choisissez une grande valeur pour des instruments comme les cordes. AMT AMT Modulation amount: Niveau de modulation : Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Utilisez ce bouton pour régler le niveau de modulation de l'enveloppe. Plus la valeur est importante, plus la composante correspondante (p. ex. volume ou fréquence de coupure) sera influencée par l'enveloppe. LFO predelay: Pré-délai du LFO : Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Utilisez ce bouton pour régler le temps de pré-délai du LFO. Plus la valeur est importante, plus le LFO met du temps avant de commencer à osciller. LFO- attack: Attaque du LFO : Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Utilisez ce bouton pour régler le temps d'attaque du LFO. Plus la valeur est importante, plus le LFO met du temps pour monter à son amplitude maximale. SPD SPD LFO speed: Vitesse du LFO : Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Utilisez ce bouton pour régler la vitesse du LFO. Plus la valeur est importante, plus le LFO oscillera vite et plus votre effet sera rapide. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Utilisez ce bouton pour régler le niveau de modulation du LFO. Plus la valeur est importante, plus la composante choisie (p. ex. volume ou fréquence de coupure) sera influencée par le LFO. Click here for a sine-wave. Cliquez ici pour une onde sinusoïdale. Click here for a triangle-wave. Cliquez ici pour une onde triangulaire. Click here for a saw-wave for current. Cliquez ici pour une onde en dent de scie. Click here for a square-wave. Cliquez ici pour une onde carrée. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Cliquez ici pour une onde définie par l'utilisateur. Ensuite, faites glisser un fichier d'échantillon correspondant sur le graphique du LFO. FREQ x 100 FRÉQ x 100 Click here if the frequency of this LFO should be multiplied by 100. Cliquez ici si la fréquence de ce LFO doit être multipliée par 100. multiply LFO-frequency by 100 multiplier la fréquence du LFO par 100 MODULATE ENV-AMOUNT MODULER L'ENVELOPPE Click here to make the envelope-amount controlled by this LFO. Cliquez ici pour que le niveau de l'enveloppe soit contrôlé par ce LFO. control envelope-amount by this LFO Contrôler le niveau de l'enveloppe avec ce LFO ms/LFO: ms/LFO : Hint Astuce Drag a sample from somewhere and drop it in this window. Faites glisser un échantillon et déposez-le dans cette fenêtre. Click here for random wave. ExportProjectDialog Export project Exporter le projet Output Sortie File format: Format de fichier : Samplerate: Vitesse d'échantillonage : 44100 Hz 44100 Hz 48000 Hz 48000 Hz 88200 Hz 88200 Hz 96000 Hz 96000 Hz 192000 Hz 192000 Hz Bitrate: Débit : 64 KBit/s 64 kbit/s 128 KBit/s 128 kbit/s 160 KBit/s 160 kbit/s 192 KBit/s 192 kbit/s 256 KBit/s 256 kbit/s 320 KBit/s 320 kbit/s Depth: Profondeur : 16 Bit Integer Entier sur 16 bits 32 Bit Float Flottant sur 32 bits Please note that not all of the parameters above apply for all file formats. Veuillez noter que tous les paramètres ne s'appliquent pas à tous les formats. Quality settings Réglages de qualité Interpolation: Interpolation : Zero Order Hold Bloqueur d'ordre zéro Sinc Fastest Sync plus rapide Sinc Medium (recommended) Sync moyenne (Recommandée) Sinc Best (very slow!) Sync optimale (Trés lent !) Oversampling (use with care!): Suréchantillonage (Utiliser avec précaution !) : 1x (None) 1x (Aucun) 2x 2x 4x 4x 8x 8x Start Démarrer Cancel Annuler Export as loop (remove end silence) Exporter sous la forme d'une boucle (supprime le silence de fin) FileBrowser Browser Explorateur FileBrowserTreeWidget Send to active instrument-track Envoyer vers la piste d'instrument actif Open in new instrument-track/Song-Editor Ouvrir dans une nouvelle piste d'instrument/Éditeur de morceau Open in new instrument-track/B+B Editor Ouvrir dans une nouvelle piste d'instrument/Éditeur de rythme et de ligne de basse Loading sample Chargement de l'échantillon Please wait, loading sample for preview... Veuillez patienter, chargement de l'échantillon pour un aperçu... --- Factory files --- --- Fichiers usine --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help Aid&e FxMixer Master Général FX %1 Effet %1 FxMixerView Rename FX channel Renommer le canal d'effet Enter the new name for this FX channel Entrer un nouveau nom pour ce canal d'effet FX-Mixer Mélangeur d'effets FxMixerView::FxChannelView FX Fader %1 Curseur d'effet %1 Mute Couper Mute this FX channel Couper ce canal d'effet FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpège Arpeggio type Type d'arpège Arpeggio range Plage d'arpège Arpeggio time Temps d'arpège Arpeggio gate Durée d'arpège Arpeggio direction Direction de l'arpège Arpeggio mode Mode d'arpège Up Ascendant Down Descendant Up and down Ascendant et descendant Random Aléatoire Free Libre Sort Tri Sync Sync Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPÈGE An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Un arpège est une façon de jouer des instruments (en particulier ceux à cordes pincées), qui rend la musique plus vivante. Les cordes de tels instruments (p. ex. les harpes) sont pincées comme des accords. La seule différence est que cela est fait de manière séquentielle, ce qui fait que les notes ne sont pas jouées en même temps. Les arpèges typiques sont des triades majeures ou mineures, mais il y a beaucoup d'autres accords possibles, vous pouvez choisr. RANGE PLAGE Arpeggio range: Plage d'arpège : octave(s) octave(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Utilisez ce bouton pour régler la plage de l'arpège en octaves. L'arpège sélectionné sera joué sur le nombre d'octaves choisi. TIME TEMPS Arpeggio time: Temps d'arpège : ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Utilisez ce bouton pour régler le temps d'arpège en millisecondes. Le temps d'arpège indique la durée pendant laquelle chaque note de l'arpège sera joué. GATE DUREE Arpeggio gate: Durée d'arpège : % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Utilisez ce bouton pour régler la durée d'arpège. La durée d'arpège indique le pourcentage d'une note complète de l'arpège qui sera joué. Avec ceci vous pouvez faire de beaux arpèges staccato. Chord: Accord: Direction: Direction : Mode: Mode : InstrumentFunctionNoteStacking octave octave Major Majeur Majb5 minor mineur minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Mineure harmonique Melodic minor Mineure mélodique Whole tone Note complète Diminished Diminuée Major pentatonic Pentatonique majeur Minor pentatonic Pentatonique mineur Jap in sen Japonaise "in sen" Major bebop Bebop majeure Dominant bebop Bebop dominante Blues Blues Arabic Arabe Enigmatic Énigmatique Neopolitan Napolitaine Neopolitan minor Napolitaine mineure Hungarian minor Hongroise mineure Dorian Dorienne Phrygolydian Phrygo-Lydienne Lydian Lydienne Mixolydian Mixolydienne Aeolian Éolienne Locrian Locrienne Chords Accords Chord type Type d'accord Chord range Gamme d'accord Minor Mineur Chromatic Half-Whole Diminished 5 8x {5?} InstrumentFunctionNoteStackingView RANGE GAMME Chord range: Gamme d'accord : octave(s) octave(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Utilisez ce bouton pour régler la gamme d'accord en octaves. L'accord sélectionné sera joué sur le nombre d'octaves choisi. STACKING EMPILEMENT Chord: Accord: InstrumentMidiIOView ENABLE MIDI INPUT ACTIVER L'ENTRÉE MIDI CHANNEL CANAL VELOCITY VÉLOCITÉ ENABLE MIDI OUTPUT ACTIVER LA SORTIE MIDI PROGRAM PROGRAMME MIDI devices to receive MIDI events from Périphériques MIDI desquels recevoir des évènements MIDI MIDI devices to send MIDI events to Périphériques MIDI auxquels envoyer des évènements MIDI NOTE NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME VOLUME Volume Volume CUTOFF COUPURE Cutoff frequency Fréquence de coupure RESO RÉSON Resonance Résonance Envelopes/LFOs Enveloppes/LFOs Filter type Type de filtre Q/Resonance Q/Résonance LowPass Passe-bas HiPass Passe-haut BandPass csg Passe-bande "csg" BandPass czpg Passe-bande "czpg" Notch Coupe-bande Allpass Passe-tout Moog Moog 2x LowPass Passe-bas x2 RC LowPass 12dB RC Passe Bas 12dB RC BandPass 12dB RC Passe Bande 12dB RC HighPass 12dB RC Passe Haut 12dB RC LowPass 24dB RC Passe Bas 24dB RC BandPass 24dB RC Passe Bande 24dB RC HighPass 24dB RC Passe Haut 24dB Vocal Formant Filter Filtre Formant Vocal InstrumentSoundShapingView TARGET COMPOSANTE These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Ces onglets contiennent des enveloppes. Elles sont très important pour la modification d'un son, dans le sens où elles sont presque toujours nécessaires pour la synsthèse soustractive. Par exemple si vous avez une enveloppe de volume, vous pouvez régler quand le son devra avoir un volume spécifique. Si vous souhaitez créer des cordes douces alors votre son doit commencer et se terminer très doucement. Ceci peut être obtenu en réglant des temps d'attaque et de descente longs. C'est la même chose pour les autres composantes comme le panoramique, la fréquence de coupure pour le filtre utilisé et ainsi de suite. Amusez-vous un peu avec ! Vous pouvez vraiment faire de beaux sons à partir d'une onde en dent de scie avec juste quelques enveloppes... ! FILTER FILTRE Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Ici vous pouvez choisir le filtre intégré que vous souhaitez utiliser pour cette piste d'instrument. Les filtres sont très important pour la modification des caractéristiques d'un son. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Utilisez ce bouton pour régler la fréquence de coupure du filtre choisi. La fréquence de coupure spécifie la fréquence à laquelle un filtre coupera le signal. Par exemple un filtre passe-bas coupera toutes les fréquences au-dessus de la fréquence de coupure. Un filtre passe-haut coupera toutes les fréquences en-dessous de la fréquence de coupure, et ainsi de suite... RESO RESO Resonance: Résonance : Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Utilisez ce bouton pour régler la Q/Résonance pour le filtre choisi. La Q/Résonance indique au filtre dans quelle proportion il devra amplifier les fréquences proches de la fréquence de coupure. FREQ FRÉQ cutoff frequency: Fréquence de coupure: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track piste_sans_nom Volume Volume Panning Panoramique Pitch Tonalité FX channel Canal d'effet Default preset Préréglage par défaut With this knob you can set the volume of the opened channel. Avec ce bouton vous pouvez régler le volume du canal ouvert. Base note Note de base Pitch range Plage de hauteur InstrumentTrackView Volume Volume Volume: Volume : VOL VOL Panning Panoramique Panning: Panoramique : PAN PAN MIDI MIDI Input Entrée Output Sortie InstrumentTrackWindow GENERAL SETTINGS CONFIGURATION GÉNÉRALE Instrument volume Volume de l'instrument Volume: Volume : VOL VOL Panning Panoramique Panning: Panoramique : PAN PAN Pitch Tonalité Pitch: Tonalité : cents centièmes PITCH PITCH FX channel Canal d'effet ENV/LFO ENV/LFO FUNC FONCTIONS FX EFFETS MIDI MIDI Save preset Enregistrer le préréglage XML preset file (*.xpf) Fichier XML de préréglage (*.xpf) PLUGIN GREFFON Pitch range (semitones) Plage de hauteur (demi-tons) RANGE PLAGE Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Relier les canaux LadspaControlDialog Link Channels Lier les canaux Channel Canal LadspaControlView Link channels Lier les canaux Value: Valeur : Sorry, no help available. Désolé, l'aide n'est pas disponible. LadspaEffect Effect Effet Unknown LADSPA plugin %1 requested. Le greffon LDASPA %1 demandé est inconnu. LcdSpinBox Please enter a new value between %1 and %2: Veuillez entrer un valeur entre %1 et %2 : LfoController LFO Controller Contrôleur du LFO Base value Valeur de base Oscillator speed Vitesse de l'oscillateur Oscillator amount Niveau de l'oscillateur Oscillator phase Phase de l'oscillateur Oscillator waveform Forme d'onde de l'oscillateur Frequency Multiplier Multiplicateur de fréquence LfoControllerDialog LFO LFO LFO Controller Contrôleur du LFO BASE BASE Base amount: Niveau de base : todo à faire SPD SPD LFO-speed: Vitesse du LFO : Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Utilisez ce bouton pour régler la vitesse du LFO. Plus la valeur est importante, plus l'oscillateur LFO oscille vite et l'effet est rapide. AMT AMT Modulation amount: Niveau de modulation : Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Utilisez ce bouton pour régler le niveau de modulation du LFO. Plus la valeur est important, plus le contrôle connecté (p. ex. volume ou fréquence de coupure) sera influencé par le LFO. PHS PHS Phase offset: Décalage de phase : degrees degrés With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Avec ce bouton vous pouvez régler le décalage de phase du LFO. Cela signifie que vous pouvez déplacer dans une oscillation le point où l'oscillateur commence à osciller. Par exemple si vous avez une onde sinusoïdale et un décalage de phase de 180 degrés l'onde commencera par descendre. C'est la même chose avec une onde carrée. Click here for a sine-wave. Cliquez ici pour une onde sinusoïdale. Click here for a triangle-wave. Cliquez ici pour une onde triangulaire. Click here for a saw-wave. Cliquez ici pour une onde en dent de scie. Click here for a square-wave. Cliquez ici pour une onde carrée. Click here for a a moog saw-wave. Cliquez ici pour une onde Moog en dent de scie. Click here for an exponential wave. Cliquez ici pour une onde exponentielle. Click here for white-noise. Cliquez ici pour un bruit blanc. Click here for a user-defined shape. Double click to pick a file. Cliquez ici pour une forme définie par l'utilisateur. Double cliquez pour choisir un fichier. MainWindow Working directory Répertoire de travail The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Le répertoire de travail %1 de LMMS n'existe pas. Souhaitez-vous le créer maintenant ? Vous pourrez changer le répertoire plus tard via Éditer -> Configuration. Could not save config-file Le fichier de configuration n'a pas pu être enregistré Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Le fichier de configuration %1 n'a pas pu être écrit. Vous n'avez probablement pas le droit d'écrire dans ce fichier. Veuillez vérifier que vous avez les droits d'accès en écriture pour ce fichier et le répertoire qui contient ce fichier et réessayez. &Project &Projet &New &Nouveau &Open... &Ouvrir... Recently opened projects Projets ouverts récemment &Save &Enregistrer Save &As... Enregistrer &sous... Import... Importer... E&xport... E&xporter... &Quit &Quitter &Edit &Éditer Settings Configuration &Tools Ou&tils &Help Aid&e Online help Aide en ligne Help Aide What's this? Qu'est-ce que c'est ? About À propos Create new project Créer un nouveau projet Create new project from template Open existing project Ouvrir un projet existant Recently opened project Projets ouverts récemment Save current project Enregistrer le projet Export current project Exporter le projet Show/hide Song-Editor Montrer/Cacher l'éditeur de morceau By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. En appuyant sur ce bouton, vous pouvez montrer ou cacher l'éditeur de morceau. À l'aide de l'éditeur de morceau vous pouvez éditer la liste de lecture du morceau et indiquer quelle piste devra être jouée. Vous pouvez également insérer et déplacer des échantillons (p. ex. des échantillons de Rap) directement dans la liste de lecture. Show/hide Beat+Bassline Editor Montrer/Cacher l'éditeur de rythme et de ligne de basse By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. En appuyant sur ce bouton, vous pouvez montrer ou cacher l'éditeur de rythme et de ligne de basse. L'éditeur de rythme et de ligne de basse est nécessaire pour la création de rythmes, pour ouvrir, ajouter et supprimer des canaux, pour couper, copier et coller des motifs rythmiques, et pour d'autres choses similaires. Show/hide Piano-Roll Montrer/Cacher le piano virtuel Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Cliquez ici pour montrer ou cacher le piano virtuel. À l'aide du piano virtuel vous pouvez éditer facilement des mélodies. Show/hide Automation Editor Montrer/Cacher l'éditeur d'automation Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Cliquez ici pour montrer ou cacher l'éditeur d'automation. À l'aide de l'éditeur d'automation vous pouvez éditer facilement des valeurs dynamiques. Show/hide FX Mixer Montrer/Cacher le mélangeur d'effets Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Cliquez ici pour montrer et cacher le mélangeur d'effets. Le mélangeur d'effet est un outil très puissant pour la gestion des effets de votre morceau. Vous pouvez insérer des effets dans différents canaux d'effets. Show/hide project notes Montrer/Cacher les notes du projet Click here to show or hide the project notes window. In this window you can put down your project notes. Cliquez ici pour montrer et cacher la fenêtre de notes du projet. Dans cette fenêtre vous pouvez inscrire les notes de votre projet. Show/hide controller rack Montrer/Cacher le rack de contrôleurs Untitled Sans titre LMMS %1 LMMS %1 Project not saved Projet non enregistré The current project was modified since last saving. Do you want to save it now? Ce projet à été modifié depuis son dernier enregistrement. Souhaitez-vous l'enregistrer maintenant ? Open project Ouvrir un projet Save project Enregistrer le projet Help not available L'aide n'est pas disponible Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Il n'y a pour l'instant pas de d'aide dans LMMS. Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. My projects Mes projets My samples Mes échantillons My presets Mes préréglages My home Mon dossier My computer Mon ordinateur Root directory Répertoire principal Save as new &version Enregistrer comme nouvelle &version E&xport tracks... E&xporter les pistes... LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) Version %1 Version %1 Project recovery Récupération de projet It looks like the last session did not end properly. Do you want to recover the project of this session? Il semble que la dernière session ne se soit pas terminée correctement. Voulez-vous récupérer le projet de cette session? Configuration file Fichier de configuration Error while parsing configuration file at line %1:%2: %3 Erreur pendant l'analyse du fichier de configuration à la ligne %1:%2:%3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Numérateur de la mesure Meter Denominator Dénominateur de la mesure TIME SIG SIGN RYTHM MeterModel Numerator Numérateur Denominator Dénominateur MidiAlsaRaw::setupWidget DEVICE PÉRIPHÉRIQUE MidiAlsaSeq::setupWidget DEVICE PÉRIPHÉRIQUE MidiController MIDI Controller Contrôleur MIDI unnamed_midi_controller contrôleur_midi_sans_nom MidiImport Setup incomplete Paramétrage incomplet You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Vous n'avez pas choisi de SoundFont par défaut dans la boîte de dialogue de configuration (Éditer -> Configuration). Par conséquent aucun son ne sera joué lorsque vous aurez importé ce fichier MIDI. Vous devriez télécharger une Soundfont General MIDI, la référencer dans la configuration et réessayer. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. Vous n'avez pas compilé LMMS avec la prise en charge du lecteur SoundFont2, qui est utilisé pour ajouter un son par défaut aux fichiers MIDI importés. Par conséquent aucun son ne sera joué après l'importation de ce fichier MIDI. MidiOss::setupWidget DEVICE PÉRIPHÉRIQUE MidiPort Input channel Canal d'entrée Output channel Canal de sortie Input controller Contrôleur d'entrée Output controller Contrôleur de sortie Fixed input velocity Vélocité d'entrée fixe Fixed output velocity Vélocité de sortie fixe Output MIDI program Programme de sortie MIDI Receive MIDI-events Recevoir des évènements MIDI Send MIDI-events Envoyer des évènements MIDI Fixed output note Note de sortie fixe Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Volume général Vibrato Vibrato OscillatorObject Osc %1 volume Volume de l'oscillateur %1 Osc %1 panning Panoramique de l'oscillateur %1 Osc %1 coarse detuning Désaccordage grossier de l'oscillateur %1 Osc %1 fine detuning left Désaccordage fin (gauche) de l'oscillateur %1 Osc %1 fine detuning right Désaccordage fin (droite) de l'oscillateur %1 Osc %1 phase-offset Décalage de phase de l'oscillateur %1 Osc %1 stereo phase-detuning Désaccordage stéréo de la phase de l'oscillateur %1 Osc %1 wave shape Forme d'onde de l'oscillateur %1 Modulation type %1 Modulation de type %1 Osc %1 waveform Forme d'onde de l'oscillateur %1 Osc %1 harmonic PatmanView Open other patch Ouvrir un autre son Click here to open another patch-file. Loop and Tune settings are not reset. Cliquez ici pour ouvrir un autre fichier de son. Les réglages de tonalité et d'accordage ne sont pas réinitialisés. Loop Rejouer Loop mode Mode de jeu en boucle Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Ici vous pouvez permuter le mode de jeu en boucle. Si il est activé, PatMan utilisera les informations de jeu en boucle disponibles dans le fichier. Tune Accordage Tune mode Mode accordage Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Ici vous pouvez permuter le mode d'accordage. Si il est activé, PatMan accordera l'échantillon pour en fonction de la fréquence de la note. No file selected Aucun fichier n'est sélectionné Open patch file Ouvrir un fichier de son Patch-Files (*.pat) Fichiers de son (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step double-cliquer pour ouvrir ce motif dans le piano virtuel utilisez la molette de la souris pour régler le volume d'un pas Open in piano-roll Ouvrir dans le piano virtuel Clear all notes Effacer toutes les notes Reset name Réinitialiser le nom Change name Changer le nom Add steps Ajouter des pas Remove steps Supprimer des pas PeakController Peak Controller Contrôleur de crêtes Peak Controller Bug Bug du contrôleur de crêtes Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. A cause d'un bug dans les anciennes versions de LMMS, les contrôleurs de crêtes peuvent ne pas s'être connecté correctement. Verifiez que les contrôleurs de crêtes sont connectés correctement et re-sauvegardez ce fichier. Désolé pour la gène occasionnée. PeakControllerDialog PEAK CRÊTE LFO Controller Contrôleur du LFO PeakControllerEffectControlDialog BASE BASE Base amount: Niveau de la base : Modulation amount: Niveau de modulation : Attack: Attaque : Release: Relâchement : AMNT AMNT MULT MULT Amount Multiplicator: Multiplicateur de quantité: ATCK ATCK DCAY DCAY PeakControllerEffectControls Base value Valeur de base Modulation amount Niveau de modulation Mute output Couper la sortie Attack Attaque Release Relâchement Abs Value Valeur Abs Amount Multiplicator Multiplicateur de quantité PianoRoll Play/pause current pattern (Space) Jouer/Mettre en pause le motif (Barre d'espace) Stop playing of current pattern (Space) Arrêter de jouer le motif (Barre d'espace) Cut selected notes (Ctrl+X) Couper les notes sélectionnées (Ctrl+X) Copy selected notes (Ctrl+C) Copier les notes sélectionnées (Ctrl+C) Paste notes from clipboard (Ctrl+V) Coller les notes se trouvant dans le presse-papier (Ctrl+V) Piano-Roll - no pattern Piano virtuel - pas de motif Piano-Roll - %1 Piano virtuel - %1 Please open a pattern by double-clicking on it! Veuillez ouvrir un motif en double-cliquant dessus ! Record notes from MIDI-device/channel-piano Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano Record notes from MIDI-device/channel-piano while playing song or BB track Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano pendant l'écoute d'un morceau ou bien d'une piste de rythme ou de ligne de basse Draw mode (Shift+D) Mode dessin (Shift+D) Erase mode (Shift+E) Mode effacement (Shift+E) Select mode (Shift+S) Mode sélection (Shift+S) Last note Dernière note Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Cliquez ici pour jouer le motif. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous pourrez ensuite les jouer et les éditer. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous entendrez le morceau ou bien le rythme ou la ligne de basse en fond sonore. Click here to stop playback of current pattern. Cliquez ici pour arrêter de jouer le motif. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. Click here and the notes from the clipboard will be pasted at the first visible measure. Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible. Note lock Vérouiller la note Note Volume Volume de la note Note Panning Panoramique de la note Detune mode (Shift+T) Mode désaccordage (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter, redimensionner et déplacer des notes. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Dans ce mode, appuyez sur Ctrl pour passer temporairement dans le mode sélection. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des notes. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Cliquez ici et le mode sélection sera activé. Dans ce mode vous pourrez sélectionner des notes. Dans ce mode, appuyez appuyer sur Ctrl pour passer temporairement en mode dessin. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Cliquez ici et le mode désaccordage sera activé. Dans ce mode vous pourrer cliquer sur une note pour accéder à l'automation de son désaccordage. Vous pouvez utiliser ceci pour lier des notes entre-elles. Vous pouvez aussi appuyer sur les touches 'Shift+T' de votre clavier pour activer ce mode. Mark/unmark current semitone Cocher/décocher le demi-ton courant Mark current scale Cocher la gamme courante Mark current chord Cocher l'accord courant Unmark all Déchocher tout No scale Pas de gamme No chord Pas d'accord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Veuillez entrer un valeur entre %1 et %2 : PianoView Base note Note de base Plugin Plugin not found Le greffon n'a pas été trouvé The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Le greffon "%1" n'a pas été trouvé ou n'a pas pu être chargé ! Raison : "%2" Error while loading plugin Une erreur est survenue pendant le chargement du greffon Failed to load plugin "%1"! Le chargement du greffon "%1" a échoué ! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Fichier WAV (*.wav) Compressed OGG-File (*.ogg) Fichier OGG compressé (*.ogg) QObject C Note name C Db Note name Db C# Note name C# D Note name D Eb Note name Eb D# Note name D# E Note name E Fb Note name Fb Gb Note name Gb F# Note name F# G Note name G Ab Note name Ab G# Note name G# A Note name A Bb Note name Bb A# Note name A# B Note name B QWidget Name: Nom : Maker: Fabricant : Copyright: Copyright : Requires Real Time: Nécessite le temps réel : Yes Oui No Non Real Time Capable: Supporte le temps réel : In Place Broken: Cassé sur place : Channels In: Canaux d'entrée : Channels Out: Canaux de sorties : File: Fichier : File: %1 SampleBuffer Open audio file Ouvrir un fichier audio Wave-Files (*.wav) Fichiers WAVE (*.wav) OGG-Files (*.ogg) Fichiers OGG (*.ogg) DrumSynth-Files (*.ds) Fichiers DrumSynth (*.ds) FLAC-Files (*.flac) Fichiers FLAC (*.flac) SPEEX-Files (*.spx) Fichiers SPEEX (*.spx) VOC-Files (*.voc) Fichiers VOC (*.voc) AIFF-Files (*.aif *.aiff) Fichiers AIFF (*.aif *.aiff) AU-Files (*.au) Fichiers AU (*.au) RAW-Files (*.raw) Fichiers RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample Double-cliquez pour choisir un échantillon Delete (middle mousebutton) Supprimer (bouton du milieu de la souris) Cut Couper Copy Copier Paste Coller Mute/unmute (<Ctrl> + middle click) Couper/Jouer (<Ctrl> + clic-milieu) Set/clear record Régler/Effacer l'enregistrement SampleTrack Sample track Piste d'échantillon Volume Volume SampleTrackView Track volume Volume de la piste Channel volume: Volume du canal : VOL VOL SongEditor Song-Editor Éditeur de morceau Play song (Space) Jouer le morceau (Barre d'espace) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Cliquez ici si vous souhaitez jouer le morceau en entier. L'écoute commencera à partir du marquer (vert) de position dans le morceau. Vous pouvez aussi déplacer ce curseur pendant l'écoute. Stop song (Space) Arrêter de jouer le morceau (Barre d'espace) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Cliquez ici si vous souhaitez ne plus jouer le morceau. Le curseur de position sera placé au début du morceau. Add beat/bassline Ajouter une piste de rythme ou de ligne de basse Add sample-track Ajouter une piste d'échantillon Could not open file Le fichier n'a pas pu être ouvert Could not write file Le fichier n'a pas pu être écrit Add automation-track Ajouter une piste d'automation Draw mode Mode dessin Edit mode (select and move) Mode édition (Sélectionner et déplacer) Record samples from Audio-device Enregistrer des échantillons à partir d'un périphérique audio Record samples from Audio-device while playing song or BB track Enregistrer des échantillons à partir d'un périphérique audio pendant l'écoute d'un morceau ou bien d'un rythme ou d'une ligne de basse Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Le fichier %1 n'a pas pu être ouvert. Vos n'avez probablement pas le droit de lire ce fichier. Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le répertoire qui contient ce fichier et réessayez. Error in file Il y a une ou plusieurs erreurs dans le fichier The file %1 seems to contain errors and therefore can't be loaded. Le fichier %1 semble contenir des erreurs et ne peut donc pas être chargés. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song tempo du morceau The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). Le tempo de ce morceau est spécifié en battements par minute (BPM). Si vous souhaitez changer le tempo de votre morceau, modifiez cette valeur. Chaque mesure à quatre battements, ce qui fait que le tempo en BPM indique le nombre de mesures / 4 qui doivent être jouées dans une minute (ou le nombre de mesures qui doivent être jouées en quatre minutes). High quality mode Mode haute qualité Master volume Volume général master volume volume général Master pitch Tonalité générale master pitch tonalité générale Value: %1% Valeur : %1% Value: %1 semitones Valeur : %1 demi-tons Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. Ne peux pas ouvrir %1 en écriture. Vous n'avez probablement pas les droits pour écrire dans ce fichier. Assurez vous que vous avez les droits d'accès en écriture pour ce fichier et essayez à nouveau. SpectrumAnalyzerControlDialog Linear spectrum Spectre linéaire Linear Y axis Axe Y linéaire SpectrumAnalyzerControls Linear spectrum Spectre linéaire Linear Y axis Axe Y linéaire Channel mode Mode du canal TempoSyncKnob Tempo Sync Synchronisation du tempo No Sync Pas de synchronisation Eight beats Huit temps Whole note Note entière Half note Demi-note Quarter note Quart de note 8th note 8 ième de note 16th note 16 ième de note 32nd note 32 ième de note Custom... Personnalisé... &Help Aid&e Custom Personnalisé Synced to Eight Beats Synchronisé sur huit temps Synced to Whole Note Synchronisé sur note entière Synced to Half Note Synchronisé sur demi-note Synced to Quarter Note Synchronisé sur quart de note Synced to 8th Note Synchronisé sur 8 ième de note Synced to 16th Note Synchronisé sur 16 ième de note Synced to 32nd Note Synchronisé sur 32 ième de note TimeDisplayWidget click to change time units cliquez pour changer les unités de temps TrackContainer Couldn't import file Le fichier n'a pas pu être importé Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Aucun filtre n'a pu être trouvé pour importer le fichier %1. Vous devriez convertir ce fichier dans un format pris en charge par LMMS en utilisant un autre logiciel. Couldn't open file Le fichier n'a pas pu être ouvert Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Le fichier %1 n'a pas pu être ouvert en lecture. Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le répertoire qui contient ce fichier et réessayez ! Loading project... Chargement du projet... Cancel Annuler Please wait... Veuillez patienter... Importing MIDI-file... Importation du fichier MIDI... Importing FLP-file... Importation du fichier FLP... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Utiliser la modulation de phase pour moduler l'oscillateur 2 avec l'oscillateur 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Utiliser la modulation d'amplitude pour moduler l'oscillateur 2 avec l'oscillateur 1 Mix output of oscillator 1 & 2 Mélanger la sortie des oscillateurs 1 et 2 Synchronize oscillator 1 with oscillator 2 Synchroniser l'oscillateur 1 avec l'oscillateur 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Utiliser la modulation de fréquence pour moduler l'oscillateur 2 avec l'oscillateur 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Utiliser la modulation de phase pour moduler l'oscillateur 3 avec l'oscillateur 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Utiliser la modulation d'amplitude pour moduler l'oscillateur 3 avec l'oscillateur 2 Mix output of oscillator 2 & 3 Mélanger la sortie des oscillateurs 2 et 3 Synchronize oscillator 2 with oscillator 3 Synchroniser l'oscillateur 2 avec l'oscillateur 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Utiliser la modulation de fréquence pour moduler l'oscillateur 3 avec l'oscillateur 2 Osc %1 volume: Volume de l'oscillateur %1 : With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Avec ce bouton vous pouvez régler le volume de l'oscillateur %1. Lorsque mettez la valeur 0 l'oscillateur est arrêté. Sinon vous pouvez entendre l'oscillateur aussi fort que vous l'avez réglé. Osc %1 panning: Panoramique de l'oscillateur %1 : With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Avec ce bouton vous pouvez régler le panoramique de l'oscillateur %1. Une valeur de -100 corespond à 100 % à gauche et une valeur de 100 déplace la sortie de l'oscillateur à droite. Osc %1 coarse detuning: Désaccordage grossier de l'oscillateur %1 : semitones demi-tons With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Avec ce bouton vous pouvez régler le désaccord grossier de l'oscillateur %1. Vous pouvez désaccorder l'oscillateur de 12 demi-tons (1 octave) vers le haut et vers le bas. Ceci est utile pour la création de sons avec un accord. Osc %1 fine detuning left: Désaccordage fin (gauche) de l'oscillateur %1 : cents centièmes With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Avec ce bouton vous pouvez régler le désaccord fin du canal gauche de l'oscillateur %1. Le désaccordage fin varie entre -100 centièmes et +100 centièmes. Ceci est utile pour la création de sons 'gras'. Osc %1 fine detuning right: Désaccordage fin (droite) de l'oscillateur %1 : With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Avec ce bouton vous pouvez régler le désaccord fin du canal droit de l'oscillateur %1. Le désaccordage fin varie entre -100 centièmes et +100 centièmes. Ceci est utile pour la création de sons 'gras'. Osc %1 phase-offset: Décalage de phase de l'oscillateur %1 : degrees degrés With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Avec ce bouton vous pouvez régler le décalage de phase de l'oscillateur %1. Cela signifie que vous pouvez déplacer dans une oscillation le point où l'oscillateur commence à osciller. Par exemple si vous avez une onde sinusoïdale et un décalage de phase de 180 degrés l'onde commencera par descendre. C'est la même chose avec une onde carrée. Osc %1 stereo phase-detuning: Désaccordage stéréo de la phase de l'oscillateur %1 : With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Avec ce bouton vous pouvez régler le désaccordage stéréo de la phase de l'oscillateur %1. Le désaccordage stéréo de la phase précise l'importance de la différence entre le décalage de phase du canal gauche et droit. Ceci est très bien pour la création de sons stéréo amples. Use a sine-wave for current oscillator. Utiliser une onde sinusoïdale pour cet oscillateur. Use a triangle-wave for current oscillator. Utiliser une onde triangulaire pour cet oscillateur. Use a saw-wave for current oscillator. Utiliser une onde en dent de scie pour cet oscillateur. Use a square-wave for current oscillator. Utiliser une onde carrée pour cet oscillateur. Use a moog-like saw-wave for current oscillator. Utiliser une onde en dent de scie de type Moog pour cet oscillateur. Use an exponential wave for current oscillator. Utiliser une onde exponentielle pour cet oscillateur. Use white-noise for current oscillator. Utiliser un bruit blanc pour cet oscillateur. Use a user-defined waveform for current oscillator. Utiliser une onde définie par l'utilisateur pour cet oscillateur. Ui Contributors ordered by number of commits: Contributeurs classés par nombre de commits: Involved Impliqué VersionedSaveDialog Increment version number Incrémenter le numéro de version Decrement version number Décrémenter le numéro de version VestigeInstrumentView Open other VST-plugin Ouvrir un autre greffon VST Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Cliquez ici si vous souhaitez ouvrir un autre greffon VST. Après avoir cliqué sur ce bouton, une boîte de dialogue d'ouverture de fichier apparaîtra et vous pourrez sélectionner votre fichier. Show/hide GUI Montrer/Cacher l'interface utilisateur graphique Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Cliquez ici pour montrer ou cacher l'interface utilisateur graphique de votre greffon VST. Turn off all notes Arrêter de jouer toutes les notes Open VST-plugin Ouvrir un greffon VST DLL-files (*.dll) Fichiers DLL (*.dll) EXE-files (*.exe) Fichiers EXE (*.exe) No VST-plugin loaded Aucun greffon VST n'a été chargé Control VST-plugin from LMMS host Contrôler le greffon VST à partir de l'hôte LMMS Click here, if you want to control VST-plugin from host. Cliquez ici si vous voulez contrôler le greffon VST à partir de l'hôte. Open VST-plugin preset Ouvrir les pré-réglages du greffon VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Cliquez ici si vous voulez ouvrir un autre pré-réglage de greffon VST *.fxp, *.fxb. Previous (-) Précédent (-) Click here, if you want to switch to another VST-plugin preset program. Cliquez ici si vous voulez passer à un autre programme de pré-réglage de plugin VST. Save preset Enregistrer le pré-réglage Click here, if you want to save current VST-plugin preset program. Cliquez ici si vous voulez sauvegarder le programme de pré-réglage de greffon VST courant. Next (+) Suivant (+) Click here to select presets that are currently loaded in VST. Cliquez ici pour sélectionner les pré-réglages qui sont actuellement chargés dans le VST. Preset Pré-réglage by par - VST plugin control - contrôle de greffon VST VstEffectControlDialog Show/hide Montrer/Cacher Control VST-plugin from LMMS host Contrôler le greffon VST à partir de l'hôte LMMS Click here, if you want to control VST-plugin from host. Cliquez ici si vous voulez contrôler le greffon VST à partir de l'hôte. Open VST-plugin preset Ouvrir le pré-réglage du greffon VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Cliquez ici si vous voulez ouvrir un autre pré-réglage de greffon VST *.fxp, *.fxb. Previous (-) Précédent (-) Click here, if you want to switch to another VST-plugin preset program. Cliquez ici si vous voulez passer à un autre programme de pré-réglage de plugin VST. Next (+) Suivant (+) Click here to select presets that are currently loaded in VST. Cliquez ici pour sélectionner les pré-réglages qui sont actuellement chargés dans le VST. Save preset Enregistrer le pré-réglage Click here, if you want to save current VST-plugin preset program. Cliquez ici si vous voulez sauvegarder le programme de pré-réglage de greffon VST courant. Effect by: Effet par: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Chargement du greffon Open Preset Ouvrir le Pré-réglage Vst Plugin Preset (*.fxp *.fxb) Pré-réglage de Greffon VST (*.fxp *.fxb) : default : défaut " " ' ' Save Preset Enregistrer le pré-réglage .fxp .fxp .FXP .FXP .FXB .FXB .fxb .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Dessinez ici votre propre forme d'onde en faisant glisser votre souris sur ce graphique. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normaliser Click to normalize Invert Click to invert Smooth Lisser Click to smooth Sine wave Onde sinusoïdale Click for sine wave Triangle wave Onde triangulaire Click for triangle wave Click for saw wave Square wave Onde carrée Click for square wave ZynAddSubFxInstrument Portamento Portamento Filter Frequency Fréquence du Filtre Filter Resonance Résonance du Filtre Bandwidth Largeur de bande FM Gain Gain FM Resonance Center Frequency Fréquence Centrale de la Résonance Resonance Bandwidth Largeur de Bande de la Résonance Forward MIDI Control Change Events Transmet les évènements MIDI Control Change ZynAddSubFxView Show GUI Montrer l'interface utilisateur graphique Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Cliquez ici pour montrer ou cacher l'interface utilisateur graphique de ZynAddSubFX. Portamento: Portamento: PORT PORT Filter Frequency: Fréquence du Filtre: FREQ FRÉQ Filter Resonance: Résonance du Filtre: RES RES Bandwidth: Largeur de bande: BW BW FM Gain: Gain FM: FM GAIN GAIN FM Resonance center frequency: Fréquence centrale de la résonance: RES CF RES CF Resonance bandwidth: Largeur de Bande de la Résonance: RES BW RES BW Forward MIDI Control Changes Transmet les évènements MIDI Control Change audioFileProcessor Amplify Amplifier Start of sample Début de l'échantillon End of sample Fin de l'échantillon Reverse sample Inverser l'échantillon Stutter ?? Bégaiement Loopback point Loop mode Mode de jeu en boucle Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Éditeur de rythme et de ligne de basse Play/pause current beat/bassline (Space) Jouer/Mettre en pause le rythme ou la ligne de basse (Barre d'espace) Add beat/bassline Ajouter un ryhtme ou une ligne de basse Add automation-track Ajouter une piste d'automation Stop playback of current beat/bassline (Space) Arrêter de jouer le rythme ou la ligne de basse (Barre d'espace) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Cliquez ici pour jouer le rythme ou la ligne de basse. Le rythme ou la ligne de basse est rejoué lorsque sa fin est atteinte. Click here to stop playing of current beat/bassline. Cliquez ici pour arrêter de jouer le rythme ou la ligne de basse. Remove steps Supprimer des pas Add steps Ajouter des pas bbTCOView Open in Beat+Bassline-Editor Ouvrir dans l'éditeur de rythme et de ligne de basse Reset name Réinitialiser le nom Change name Changer le nom Change color Changer la couleur Reset color to default bbTrack Beat/Bassline %1 Ryhtme ou ligne de basse %1 Clone of %1 Clone de %1 bitInvader Samplelength Longueur de l'échantillon bitInvaderView Sample Length Longueur de l'échantillon Sine wave Onde sinusoïdale Triangle wave Onde triangulaire Saw wave Onde en dent de scie Square wave Onde carrée White noise wave Bruit blanc User defined wave Onde définie par l'utilisateur Smooth Lisser Click here to smooth waveform. Cliquez ici pour lisser la forme d'onde. Interpolation Interpolation Normalize Normaliser Draw your own waveform here by dragging your mouse on this graph. Dessinez ici votre propre forme d'onde en faisant glisser votre souris sur ce graphique. Click for a sine-wave. Cliquez ici pour une onde sinusoïdale. Click here for a triangle-wave. Cliquez ici pour une onde triangulaire. Click here for a saw-wave. Cliquez ici pour une onde en dent de scie. Click here for a square-wave. Cliquez ici pour une onde carrée. Click here for white-noise. Cliquez ici pour un bruit blanc. Click here for a user-defined shape. Cliquez ici pour une onde définie par l'utilisateur. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file Le fichier n'a pas pu être ouvert Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Le fichier %1 ne peut pas être ouvert en écriture. Veuillez vérifier que vous avez les droits d'accès en écriture pour ce fichier et le répertoire qui contient ce fichier et réessayez ! Error Erreur Error while determining file-encoder device. Please try to choose a different output format. Erreur pendant la détection du périphérique d'encodage du fichier. Veuillez essayer de choisir un format de sortie différent. Rendering: %1% Encodage : %1% Export project to %1 Exporter le projet vers %1 fader Please enter a new value between %1 and %2: Veuillez entrer un valeur entre %1 et %2 : graphModel Graph Graphique kickerInstrument Start frequency Fréquence de début End frequency Fréquence de fin Gain Gain Length Distortion Start Distortion End Envelope Slope Noise Bruit Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: Fréquence de début : End frequency: Fréquence de fin : Gain: Gain : Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help Aid&e Please enter a new value between -96.0 dBV and 6.0 dBV: Veuillez entrer un nouvelle valeur entre -96,0 dBV et 6,0 dBV : Please enter a new value between %1 and %2: Veuillez entrer un valeur entre %1 et %2 : ladspaBrowserView Available Effects Effets disponibles Unavailable Effects Effets indisponibles Instruments Instruments Analysis Tools Outils d'analyse Don't know Divers This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Cette boîte de dialogue affiche des informations sur tous les greffons LADSPA que LMMS a pu localiser. Ces greffons sont répartis en cinq catégories en fonction de l'interprétation des types et des noms de port. Les « Effets disponibles » sont ceux qui peuvent être utilisés par LMMS. Pour que LMMS puisse utiliser un effet, il doit, tout d'abord, être un effet, ce qui revient à dire qu'il doit avoir à la fois des canaux d'entrée et de sortie. LMMS identifie un canal d'entrée comme un port audio contenant 'in' dans son nom. Les canaux de sortie sont identifiés par les lettres 'out'. De plus, l'effet doit avoir le même nombre d'entrée que de sorties et doit pouvoir fonctionner en temps réel. Les « Effets indisponibles » sont ceux qui ont été identifiés comme des effets, mais qui soit n'ont pas le même nombre de canaux d'entrée et de sortie, soit ne peuvent fonctionner en temps réel. Les « Instruments » sont des greffons pour lesquels seuls des canaux de sortie ont été identifiés. Les « Outils d'analyse » sont des greffons pour lesquels seuls des canaux d'entrée ont été identifiés. Les « Divers » sont des greffons pour lesquels aucun canaux d'entrée ou de sortie n'ont été identifiés. En double-cliquant sur ces greffons vous ferez apparaître des informations sur les ports. Type: Type : ladspaDescription Plugins Greffons Description Description ladspaPortDialog Ports Ports Name Nom Rate Vitesse Direction Sens Type Type Min < Default < Max Min < par défaut < Max Logarithmic Logarythmique SR Dependent Audio Audio Control Contrôle Input Entrée Output Sortie Toggled Permuté Integer Entier Float Flottant Yes Oui lb302Synth VCF Cutoff Frequency Fréquence de coupure du VCF VCF Resonance Résonance du VCF VCF Envelope Mod Modulation de l'enveloppe du VCF VCF Envelope Decay Descente de l'enveloppe du VCF Distortion Distorsion Waveform Forme d'onde Slide Decay Descente de la liaison Slide Liaison Accent Accent Dead Éteint 24dB/oct Filter Filtre 24 dB/oct lb302SynthView Cutoff Freq: Fréquence de coupure : Resonance: Résonance : Env Mod: Modulation de l'enveloppe : Decay: Descente : 303-es-que, 24dB/octave, 3 pole filter 303-esque, 24 dB/octave, filtre à 3 pôles Slide Decay: Descente de la liaison : DIST: DIST : Saw wave Onde en dent de scie Click here for a saw-wave. Cliquez ici pour une onde en dent de scie. Triangle wave Onde triangulaire Click here for a triangle-wave. Cliquez ici pour une onde triangulaire. Square wave Onde carrée Click here for a square-wave. Cliquez ici pour une onde carrée. Rounded square wave Onde carrée arrondie Click here for a square-wave with a rounded end. Cliquez ici pour une onde carrée avec une fin arrondie. Moog wave Onde Moog Click here for a moog-like wave. Cliquez ici pour une onde de type Moog. Sine wave Onde sinusoïdale Click for a sine-wave. Cliquez ici pour une onde sinusoïdale. White noise wave Bruit blanc Click here for an exponential wave. Cliquez ici pour une onde exponentielle. Click here for white-noise. Cliquez ici pour un bruit blanc. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency Fréquence de coupure du VCF VCF Resonance Résonance du VCF VCF Envelope Mod Modulation de l'enveloppe du VCF VCF Envelope Decay Descente de l'enveloppe du VCF Distortion Distorsion Waveform Forme d'onde Slide Decay Descente du glissement Slide Glissement Accent Accent Dead Éteint 24dB/oct Filter Filtre 24 dB/oct lb303SynthView Cutoff Freq: Fréquence de coupure : CUT CUT Resonance: Résonance : RES RES Env Mod: Modulation de l'enveloppe : ENV MOD ENV MOD Decay: Descente : DEC DEC 303-es-que, 24dB/octave, 3 pole filter 303-esque, 24 dB/octave, filtre à 3 pôles Slide Decay: Descente de la liaison : SLIDE SLIDE DIST: DIST : DIST DIST WAVE: WAVE : WAVE WAVE malletsInstrument Hardness Dureté Position Position Vibrato Gain Gain du vibrato Vibrato Freq Fréquence du vibrato Stick Mix Stick Mix Modulator Modulateur Crossfade Fondu enchainé LFO Speed Vitesse du LFO LFO Depth Profondeur du LFO ADSR ADSR Pressure Pression Motion Mouvement Speed Vitesse Bowed Courbé Spread Diffusion Marimba Marimba Vibraphone Vibraphone Agogo Agogo Wood1 Bois1 Reso Réso Wood2 Bois2 Beats Battements Two Fixed Deux fixes Clump Bruit lourd Tubular Bells Cloches tubulaires Uniform Bar Barre uniforme Tuned Bar Barre accordée Glass Verre Tibetan Bowl Bol tibétain Missing files Fichiers manquants Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Votre installation de STK semble incomplète. Veuillez vous assurer que le paquet Stk complet est installé ! malletsInstrumentView Instrument Instrument Spread Diffusion Spread: Diffusion : Hardness Dureté Hardness: Dureté : Position Position Position: Position : Vib Gain Gain Vib Vib Gain: Gain Vib : Vib Freq Fréq Vib Vib Freq: Fréq Vib : Stick Mix Stick Mix Stick Mix: Stick Mix : Modulator Modulateur Modulator: Modulateur : Crossfade Fondu enchainé Crossfade: Fondu enchainé : LFO Speed Vitesse du LFO LFO Speed: Vitesse du LFO : LFO Depth Profondeur du LFO LFO Depth: Profondeur du LFO : ADSR ADSR ADSR: ADSR : Bowed Courbé Pressure Pression Pressure: Pression : Motion Mouvement Motion: Mouvement : Speed Vitesse Speed: Vitesse : Vibrato Vibrato Vibrato: Vibrato : manageVSTEffectView - VST parameter control - Paramètre de contrôle VST VST Sync VST Sync Click here if you want to synchronize all parameters with VST plugin. Cliquez ici si vous voulez synchroniser tous les paramètres avec le greffon VST. Automated Automatique Click here if you want to display automated parameters only. Cliquez ici si vous voulez seulement afficher les paramètres automatiques. Close Fermer Close VST effect knob-controller window. Fermer la fenêtre des boutons contrôleurs des effets VST. manageVestigeInstrumentView - VST plugin control - contrôle de greffon VST VST Sync VST Sync Click here if you want to synchronize all parameters with VST plugin. Cliquez ici si vous voulez synchroniser tous les paramètres avec le greffon VST. Automated Automatique Click here if you want to display automated parameters only. Cliquez ici si vous voulez seulement afficher les paramètres automatiques. Close Fermer Close VST plugin knob-controller window. Fermer la fenêtre des boutons contrôleurs des effets VST. nineButtonSelector &Help Aid&e opl2instrument Patch Son Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM FM Vibrato Depth Profondeur de Vibrato Tremolo Depth Profondeur de Trémolo organicInstrument Distortion Distorsion Volume Volume organicInstrumentView Distortion: Distorsion : Volume: Volume : Randomise Randomiser Osc %1 waveform: Form d'onde de l'oscillateur %1 : Osc %1 volume: Volume de l'oscillateur %1 : Osc %1 panning: Panoramique de l'oscillateur %1 : cents centièmes The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Temps de balayage Sweep direction Sens de balayage Sweep RtShift amount Niveau de décalage vers la droite du balayage Wave Pattern Duty Motif d'onde Channel 1 volume Volume du canal 1 Volume sweep direction Sens du volume du balayage Length of each step in sweep Longueur de chaque pas du balayage Channel 2 volume Volume du canal 2 Channel 3 volume Volume du canal 3 Channel 4 volume Volume du canal 4 Right Output level Niveau de sortie droite Left Output level Niveau de sortie gauche Channel 1 to SO2 (Left) Canal 1 vers SO2 (gauche) Channel 2 to SO2 (Left) Canal 2 vers SO2 (gauche) Channel 3 to SO2 (Left) Canal 3 vers SO2 (gauche) Channel 4 to SO2 (Left) Canal 4 vers SO2 (gauche) Channel 1 to SO1 (Right) Canal 1 vers SO2 (droite) Channel 2 to SO1 (Right) Canal 2 vers SO2 (droite) Channel 3 to SO1 (Right) Canal 3 vers SO2 (droite) Channel 4 to SO1 (Right) Canal 4 vers SO2 (droite) Treble Aigus Bass Graves Shift Register width Largeur du registre de décalage papuInstrumentView Sweep Time: Temps de balayage : Sweep Time Temps de balayage Sweep RtShift amount: Niveau de décalage vers la droite du balayage : Sweep RtShift amount Niveau de décalage vers la droite du balayage Wave pattern duty: Motif d'onde : Wave Pattern Duty Motif d'onde Square Channel 1 Volume: Volume du canal carré 1 : Length of each step in sweep: Longueur de chaque pas du balayage : Length of each step in sweep Longueur de chaque pas du balayage Wave pattern duty Motif d'onde Square Channel 2 Volume: Volume du canal carré 2 : Square Channel 2 Volume Volume du canal carré 2 Wave Channel Volume: Volume du canal onde : Wave Channel Volume Volume du canal onde Noise Channel Volume: Volume du canal bruit : Noise Channel Volume Volume du canal bruit SO1 Volume (Right): Volume SO1 (droite) : SO1 Volume (Right) Volume SO1 (droite) SO2 Volume (Left): Volume SO2 (droite) : SO2 Volume (Left) Volume SO2 (droite) Treble: Aigus : Treble Aigus Bass: Graves : Bass Graves Sweep Direction Sens de balayage Volume Sweep Direction Sens du volume du balayage Shift Register Width Largeur du registre de décalage Channel1 to SO1 (Right) Canal 1 vers SO1 (droite) Channel2 to SO1 (Right) Canal 2 vers SO1 (droite) Channel3 to SO1 (Right) Canal 3 vers SO1 (droite) Channel4 to SO1 (Right) Canal 4 vers SO1 (droite) Channel1 to SO2 (Left) Canal 1 vers SO2 (gauche) Channel2 to SO2 (Left) Canal 2 vers SO2 (gauche) Channel3 to SO2 (Left) Canal 3 vers SO2 (gauche) Channel4 to SO2 (Left) Canal 4 vers SO2 (gauche) Wave Pattern Motif d'onde The amount of increase or decrease in frequency Le niveau d'augmentation ou de diminution de la fréquence The rate at which increase or decrease in frequency occurs La vitesse à laquelle l'augmentation ou la diminution de la fréquence se produit The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Le cycle de travail est le rapport entre la durée (temps) pendant laquelle un signal est présent et la période totale du signal. Square Channel 1 Volume Volume du canal carré 1 The delay between step change Le délai entre chaque changement de pas Draw the wave here Dessinez votre onde ici pluginBrowser no description pas de description Instrument plugins Greffons d'instrument Incomplete monophonic imitation tb303 Imitation incomplète de TB303 monophonique Plugin for freely manipulating stereo output Greffon pour la manipulation de la sortie stéréo Plugin for controlling knobs with sound peaks Greffon pour le contrôle les boutons avec des crêtes de son Plugin for enhancing stereo separation of a stereo input file Greffon pour l'amélioration de la séparation stéréo d'un fichier stéréo en entrée List installed LADSPA plugins Liste des greffons LADSPA installés Filter for importing FL Studio projects into LMMS Filtre pour l'importation de projets Fruity Loops Studio dans LMMS GUS-compatible patch instrument Sons d'instruments compatibles avec la carte Gravis UltraSound (GUS) Additive Synthesizer for organ-like sounds Synthétiseur additif pour sons d'orgue Tuneful things to bang on Instruments à frapper mélodieux VST-host for using VST(i)-plugins within LMMS Hôte VST pour l'utilisation de greffons VST(i) dans LMMS Vibrating string modeler Modeleur de corde vibrante plugin for using arbitrary LADSPA-effects inside LMMS. Greffon pour l'utilisation arbitraire d'effets LADSPA dans LMMS. Filter for importing MIDI-files into LMMS Filtre pour l'importation de fichiers MIDI dans LMMS Instrument browser Sélecteur d'instruments Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Faites glisser un instrument dans l'éditeur de morceau, dans l'éditeur de rythme et de ligne de basse, ou dans une piste d'instrument existante. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Émulateur des SID MOS6581 et MOS8580. Ce composant était utilisé dans l'ordinateur Commodore 64. Player for SoundFont files Lecteur de fichiers SoundFont Emulation of GameBoy (TM) APU Émulateur de l'APU de la GameBoy (TM) Customizable wavetable synthesizer Synthétiseur de table d'ondes personnalisables Embedded ZynAddSubFX ZynAddSubFX intégré 2-operator FM Synth Synthé FM à 2 opérateurs Filter for importing Hydrogen files into LMMS Filtre pour importer des fichiers Hydrogen dans LMMS LMMS port of sfxr Port LMMS de sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes Notes du projet Put down your project notes here. Ici vous pouvez prendre des notes concernant votre projet. Edit Actions Édition &Undo &Défaire Ctrl+Z &Redo &Refaire Ctrl+Y &Copy &Copier Ctrl+C Cu&t Cou&per Ctrl+X &Paste Co&ller Ctrl+V Format Actions Format &Bold Gr&as Ctrl+B &Italic &Italique Ctrl+I &Underline &Souligné Ctrl+U &Left &Gauche Ctrl+L C&enter C&entrer Ctrl+E &Right D&roite Ctrl+R &Justify &Justifier Ctrl+J &Color... C&ouleurs... renameDialog Rename... Renommer... setupDialog Setup LMMS Configuration de LMMS General settings Configuration générale BUFFER SIZE TAILLE DE LA MÉMOIRE TAMPON Reset to default-value Réinitialiser à la valeur par défaut MISC DIVERS Enable tooltips Activer les info-bulles Show restart warning after changing settings Afficher l'invitation à redémarrer après la modification de le configuration Display volume as dBV Afficher le volume en dBV Compress project files per default Compresser par défaut les fichiers de projet HQ-mode for output audio-device Périphérique de sortie audio en mode HQ LMMS working directory Répertoire de travail de LMMS VST-plugin directory Répertoire des greffons VST Artwork directory Répertoire des thèmes graphiques FL Studio installation directory Répertoire d'installation de Fruity Loops Studio STK rawwave directory Répertoire de STK Performance settings Configuration des performances UI effects vs. performance Effets graphique vs Perfomances Audio settings Configuration audio AUDIO INTERFACE INTERFACE AUDIO MIDI settings Configuration MIDI MIDI INTERFACE INTERFACE MIDI OK OK Cancel Annuler Restart LMMS Redémarrer LMMS Please note that most changes won't take effect until you restart LMMS! Veuillez noter que la plupart des modifications ne prendront pas effet tant n'aurez pas redémarré LMMS ! Frames: %1 Latency: %2 ms Trames : %1 Latence : %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Ici vous pouvez régler la taille de la mémoire tampon interne utilisée par LMMS. Les valeurs faibles réduisent la latence mais peuvent aussi rendre le son inutilisable ou induire de mauvaises performances, en particulier sur des ordinateurs anciens ou des système sans noyau temps-réel. Choose LMMS working directory Choisissez le répertoire de travail de LMMS Choose your VST-plugin directory Choisissez le répertoire des greffons VST Choose artwork-theme directory Choisissez le répertoire des thèmes graphiques Choose FL Studio installation directory Choisissez le répertoire d'installation de Fruity Loops Studio Choose LADSPA plugin directory Choisissez le répertoire des greffons LADSPA Choose STK rawwave directory Choisissez le répertoire de STK Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Ici vous pouvez choisir l'interface audio que vous préférez. En fonction de la configuration de votre système au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fenêtres contenant des contrôles pour régler l'interface audio choisie. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Ici vous pouvez choisir l'interface MIDI que vous préférez. En fonction de la configuration de votre système au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fenêtres contenant des contrôles pour régler l'interface MIDI choisie. Paths Chemins d'accès LADSPA plugin paths Chemin d'accès aux greffons LADSPA Default Soundfont File Fichier SoundFont par défaut Background artwork Thème graphique d'arrière-plan Choose default SoundFont Choisissez la SoundFont par défaut Choose background artwork Choisissez le thème graphique d'arrière-plan One instrument track window mode Mode fenêtre une piste d'instrument Compact track buttons Boutons de piste compacte Sync VST plugins to host playback Sync les greffons VST à la lecture de l'hôte Enable note labels in piano roll Activer les étiquettes de note dans le piano virtuel Enable waveform display by default Activer l'affichage de forme d'onde par défaut Smooth scroll in Song Editor Déplacement fluide dans l'Editeur de Chanson Enable auto save feature Activer la fonction de sauvegarde automatique Show playback cursor in AudioFileProcessor Afficher le curseur de lecture dans AudioFileProcessor sf2Instrument Bank Banque Patch Son Gain Gain Reverb Réverbération Reverb Roomsize Réverbération (Salle) Reverb Damping Amortissement de la réverbération Reverb Width Largeur de la réverbération Reverb Level Niveau de la réverbération Chorus Chorus Chorus Lines Lignes de chorus Chorus Level Niveau de chorus Chorus Speed Vitesse de chorus Chorus Depth Profondeur de chorus sf2InstrumentView Open other SoundFont file Ouvrir un fichier SoundFont Click here to open another SF2 file Cliquez ici pour ouvrir un autre fichier SF2 Choose the patch Choisir un son Gain Gain Apply reverb (if supported) Appliquer la réverbération (si pris en charge) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Ce bouton active l'effet réverbération. Ceci est utile pour de beaux effets, mais ne fonctionne que sur les fichier qui le prenne en charge. Reverb Roomsize: Réverbération (Salle) : Reverb Damping: Amortissement de la réverbération : Reverb Width: Largeur de la réverbération : Reverb Level: Niveau de la réverbération : Apply chorus (if supported) Appliquer le chorus (si pris en charge) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Ce bouton active l'effet chorus. Ceci est utile pour de beaux effets, mais ne fonctionne que sur les fichier qui le prenne en charge. Chorus Lines: Lignes de chorus : Chorus Level: Niveau de chorus : Chorus Speed: Vitesse de chorus : Chorus Depth: Profondeur de chorus : Open SoundFont file Ouvrir un fichier SoundFont SoundFont2 Files (*.sf2) Fichiers SoundFont2 (*.sf2) sfxrInstrument Wave Form Forme d'Onde sidInstrument Cutoff Coupure Resonance Résonance Filter type Type de filtre Voice 3 off Voix 3 coupée Volume Volume Chip model Modèle de circuit sidInstrumentView Volume: Volume : Resonance: Résonance : Cutoff frequency: Fréquence de coupure : High-Pass filter Filtre passe-haut Band-Pass filter Filtre passe-bande Low-Pass filter Filtre passe-bas Voice3 Off Voix 3 coupée MOS6581 SID SID MOS6581 MOS8580 SID SID MOS8580 Attack: Attaque : Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. La vitesse d'attaque détermine la rapidité à laquelle la sortie de la Voix %1 passera de zéro à l'amplitude de crête. Decay: Descente : Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. La vitesse de descente détermine la rapidité à laquelle la vitesse la sortie passera de l'amplitude de crête au niveau de soutien choisi. Sustain: Soutien : Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. La sortie de la Voix %1 restera au niveau d'amplitude de soutien choisi tant que la note sera maintenu. Release: Relâchement : The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. La sortie de la Voix %1 descendra de l'amplitude de soutien à l'amplitude zéro à la vitesse de relâchement choisie. Pulse Width: Largeur d'impulsion : The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. La résolution de la largeur d'impulsion permet à la largeur d'être balayée doucement sans pas discernable. La forme d'onde de l'impulsion de l'oscillateur %1 doit être choisie pour n'avoir aucun effet audible. Coarse: Grossier : The Coarse detuning allows to detune Voice %1 one octave up or down. Le désaccordage grossier permet de désaccorder la Voix %1 d'une octave vers le haut ou vers le bas. Pulse Wave Onde d'impulsion Triangle Wave Onde triangulaire SawTooth Dent de scie Noise Bruit Sync Sync Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Sync synchronise la fréquence fondamentale de l'oscillateur %1 avec la fréquence fondamentale de l'oscillateur %2 en produisant des effets "Hard Sync". Ring-Mod Mode anneau Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Le mode anneau remplace la sortie en forme d'onde triangulaire de l'oscillateur %1 par une combinaison "Modulée en anneau" des oscillateurs %1 et %2. Filtered Filtré When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Lorsque Filtré est activé, la Voix %1 sera traitée par le filtre. Lorsque Filtré est désactivé, la Voix %1 va directement en sortie, et le filtre n'a aucun effet sur elle. Test Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Lorsqu'il est activé, Test réinitialise et vérouille l'oscillateur %1 à zéro jusqu'à ce que Test soit désactivé. song Tempo Master volume Volume général Master pitch Tonalité générale Project saved Le projet a été enregistré The project %1 is now saved. Le projet %1 est maintenant enregistré. Project NOT saved. Projet NON enregistré. The project %1 was not saved! Le projet %1 n'a pas été enregistré ! Import file Importer un fichier untitled sans titre Select file for project-export... Sélectionnez un fichier vers lequel exporter le projet... Empty project Le projet est vide This project is empty so exporting makes no sense. Please put some items into Song Editor first! L'exportation n'a pas de sens car ce projet est vide. Veuillez d'abord mettre quelques éléments dans l'éditeur de morceau ! MIDI sequences Séquences MIDI FL Studio projects Projets Fruity Loops Studio All file types Tous les types de fichier Hydrogen projects Projets Hydrogen Select directory for writing exported tracks... Sélectionnez un répertoire pour écrire les pistes exportées... stereoEnhancerControlDialog WIDE AMPL Width: Ampleur : stereoEnhancerControls Width Ampleur stereoMatrixControlDialog Left to Left Vol: Volume de gauche à gauche : Left to Right Vol: Volume de gauche à droite : Right to Left Vol: Volume de droite à gauche : Right to Right Vol: Volume de droite à droite : stereoMatrixControls Left to Left Gauche à gauche Left to Right Gauche à droite Right to Left Droite à gauche Right to Right Droite à droite timeLine Enable/disable auto-scrolling Activer/Désactiver l'auto-défilement Enable/disable loop-points Activer/Désactiver les marqueurs de jeu en boucle After stopping go back to begin Revenir au début après l'arrêt After stopping go back to position at which playing was started Revenir à la position de départ après l'arrêt After stopping keep position Ne rien faire après l'arrêt Hint Astuce Press <Ctrl> to disable magnetic loop points. Appuyez sur <Ctrl> pour désactiver les marqueur magnétiques de jeu en boucle. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. Maintenez <Shift> pour déplacer le marqueur de début de jeu en boucle. Appuyez sur <Ctrl> pour désactiver les marqueurs magnétiques de jeu en boucle. track Muted Coupée Solo Jouée en solo trackContentObject Muted Coupée trackContentObjectView Current position Position Hint Astuce Press <Ctrl> and drag to make a copy. Appuyez sur <Ctrl> et glissez pour faire une copie. Current length Longueur Press <Ctrl> for free resizing. Appuyez sur <Ctrl> pour un redimensionnement libre. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 vers %5:%6) Delete (middle mousebutton) Supprimer (bouton du milieu de la souris) Cut Couper Copy Copier Paste Coller Mute/unmute (<Ctrl> + middle click) Couper/Jouer (<Ctrl> + clic-milieu) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Appuyez sur <Ctrl> en cliquant sur la poignée de déplacement pour commencer un nouveau glisser/déposer. Actions for this track Actions pour cette piste Mute Couper Mute this track Couper cette piste Solo Jouer en solo Clone this track Cloner cette piste Remove this track Supprimer cette piste Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Chargement du greffon Please wait while loading VST-plugin... Veuillez patienter pendant le chargement du greffon VST... Failed loading VST-plugin Le chargement du greffon VST a échoué The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! Le greffon VST %1 n'a pas pu être chargé pour une raison quelconque. S'il fonctionne avec d'autres logiciels VST sous Linux, merci de contacter un développeur LMMS ! vibed String %1 volume Volume de la corde %1 String %1 stiffness Rigidité de la corde %1 Pick %1 position Position du micro %1 Pickup %1 position Position du micro %1 Pan %1 Panoramique %1 Detune %1 Désaccordage %1 Fuzziness %1 Flou %1 Length %1 Longueur %1 Impulse %1 Impulsion %1 Octave %1 Octave %1 vibedView Volume: Volume : The 'V' knob sets the volume of the selected string. Le bouton « V » règle le volume de la corde choisie. String stiffness: Rigidité de la corde : The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Le bouton « S » règle la rigidité de la corde choisie. La rigidité de la corde affecte le temps pendant lequel la corde sonnera. Plus la valeur est faible, plus la corde sonnera longtemps. Pick position: Point de contact : The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Le bouton « P » règle l'endroit où la corde sera 'grattée'. Plus la valeur est faible, plus le point de contact sera proche du chevalet. Pickup position: Point d'écoute : The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Le bouton « PU » règle l'endroit où les vibrations de la corde choisie seront écoutées. Plus la valeur est faible, plus le point d'écoute sera proche du chevalet. Pan: Panoramique : The Pan knob determines the location of the selected string in the stereo field. Le bouton « Pan » détermine l'emplacement de la corde choisie dans le champ stéréo. Detune: Detune : The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Le bouton « Detune » modifie la hauteur de la corde choisie. Les valeurs négatives produiront un son grave. Les valeurs positives produiront un son aigu. Fuzziness: Flou : The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Le bouton « Slap » ajoute un peu de flou à la corde choisie, plus sensible pendant l'attauqe, bien qu'il puisse aussi être utilisé pour rendre le son de la corde plus 'métallique'. Length: Longueur : The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Le bouton « Length » règle la longueur de la corde choisie. Les cordes les plus longues vibrent plus longtemps et sonnent plus brillament; cependant, elles consommeront également plus de cycles du processeur. Impulse or initial state Impulsion ou état initial The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Le sélecteur « Imp » détermine si la forme d'onde dans le graphique doit être traitée comme une impulsion donnée à la corde par le contact ou l'état initial de la corde. Octave Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Le sélecteur « Octave » est utilisé pour choisir l'harmonique de la note à laquelle la corde sonnera. Par exemple, '-2' signifie que la corde sonnera deux octaves sous la fondamentale, 'F' signifie que la corde sonnera à la fondamentale, et '6' signifie que la corde sonnera six octaves au-dessus de la fondamentale. Impulse Editor Éditeur d'impulsion The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. L'éditeur de forme d'onde permet de contrôler l'état initial ou l'impulsion qui sera utilisé pour commencer à faire vibrer la corde. Les boutons situés à droite du graphique initialiseront la forme d'onde en fonction du type choisi. Le bouton « ? » chargera la forme d'onde à partir d'un fichier - seuls les 128 premiers échantillons seront chargés. La forme d'onde peu également être dessinée dans le graphique. Le bouton « S » lissera la forme d'onde. Le bouton « N » normalisera la forme d'onde. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modélise jusqu'à neuf cordes vibrant indépendament. Le sélecteur « Corde » vous permet de choisir la corde à éditer. Le sélecteur « Imp » choisi si le graphique représente une impulsion ou l'état initial de la corde. Le sélecteur « Octave » choisi à quelle harmonique la corde devra vibrer. Le graphique vous permet de contrôler l'état initial ou l'impulsion utilisée pour mettre la corde en mouvement. Le bouton « V » contrôle le volume. Le bouton « S » contrôle la rigidité de la corde. Le bouton « P » contrôle le point de contact. Le bouton « PU » contrôle le point d'écoute. « Pan » et « Désaccorder » n'ont heureusement pas besoin d'explications. Le bouton « Slap » ajoute un peu de flou au son de la corde. Le bouton « Longueur » contrôle la longueur de la corde. Le LED situé dans le coin en bas à droite de l'éditeur de forme d'onde indique si la corde est utilisé dans l'instrument. Enable waveform Activer la forme d'onde Click here to enable/disable waveform. Cliquez ici pour activer/désactiver la forme d'onde. String Corde The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Le sélecteur « String » est utilisé pour choisir la corde que les contrôles sont en train d'éditer. Un instrument Vibed peut contenir jusqu'à neuf cordes vibrant indépendament. Le LED situé dans le coin en bas à droite de l'éditeur de forme indique si la corde choisie est utilisée. Sine wave Onde sinusoïdale Triangle wave Onde triangulaire Saw wave Onde en dent de scie Square wave Onde carrée White noise wave Bruit blanc User defined wave Onde définie par l'utilisateur Smooth Lisser Click here to smooth waveform. Cliquez ici pour lisser la forme d'onde. Normalize Normaliser Click here to normalize waveform. Cliquez ici pour normaliser la forme d'onde. &Help Aid&e Use a sine-wave for current oscillator. Utiliser une onde sinusoïdale pour cet oscillateur. Use a triangle-wave for current oscillator. Utiliser une onde triangulaire pour cet oscillateur. Use a saw-wave for current oscillator. Utiliser une onde en dent de scie pour cet oscillateur. Use a square-wave for current oscillator. Utiliser une onde carrée pour cet oscillateur. Use white-noise for current oscillator. Utiliser un bruit blanc pour cet oscillateur. Use a user-defined waveform for current oscillator. Utiliser une onde définie par l'utilisateur pour cet oscillateur. visualizationWidget click to enable/disable visualization of master-output Cliquez pour activer/désactiver la visualisation de la sortie générale Click to enable Cliquez pour activer voiceObject Voice %1 pulse width Largeur d'impulsion de la voix %1 Voice %1 attack Attaque de la voix %1 Voice %1 decay Descente de la voix %1 Voice %1 sustain Soutien de la voix %1 Voice %1 release Relâchement de la voix %1 Voice %1 coarse detuning Désaccordage grossier de la voix %1 Voice %1 wave shape Forme d'onde de la voix %1 Voice %1 sync Synchronisation de la voix %1 Voice %1 ring modulate Modulation en anneaux de la voix %1 Voice %1 filtered Voix %1 filtrée Voice %1 test Test de la voix %1 waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/gl.qm000066400000000000000000006015161247673406200156210ustar00rootroot00000000000000GYIYAACYY fufu=2Kbm& ykGyF/tt3W <3Qxn#k5diإD0ص0aTkT{Tc$_#&#9 s] 6`6y7E7FW@FWH5I[<L#Lh0jjFo3 //1~5CrC|,(E8r[ezy0 U YRUb<d{j. #}1#}3-(\*$A+*yA**0<*0FM*0*04*0*0*0*0++BD+B++1+įC]/N[3y14ʩl5f6u%9gi9kY93QX:dud@d@TE njEZ F|GGGH2GHj HiGHHHzHz:HI;Im'Im :J'yJ+02J<@bJCJ_KLbӑM5@M4M/MW7N(Nh֍ObzlPWKPWS}AS}C SUSbST. TZ}T|TʴTʴTxsUQU`JU`wUj@UjVbVbaVbVh4TVVd;VlVbV]pW W {WiWoW_X X5LZ/VZ/yZkZkZZZo| Zo[][jW\v]6 8]^eq ^er =c^cNiųių:iųszy;tUstbv=.|}}U,~#];M ;9_-ϙP[^7Xۀ/N+oX+un3"R-/Vd/VJ2@7"7o3e9}h9F;n ; "=`*@1xA@۴FzNFzJoJ MUTzOXxOXP0VJZ;Z; `1x'aU0mw80z;a] n@P~Vo>Tu_tcɄyh?ʭiB7(eՙ ծhb֐8o0jk<el<ߺp?o{8og;;CB9A |c#ckD/h,8J+v|a3G\ (^(^)u#,´1,´m.@4Ns: Ro{_/fZbb*7r%tHxżo9J%8nCnG,GG|GT??) )"e)!)#>B|Bf3c"[9>>[>$ѻOG?GǤҩBAҩBһBA.һBʛlW|t>Ln gf~:"ƚss+sICPFbD0%uIf% :2Q3Zw48J; 82\:)?%@wCB"HH>I[YuOXFP~̷P~|Sk1AWa tZ.L]]Y] &]l$;lh@}lhɐlo?oƼux)x)|Z|Z}"g}}~kb~_KŐfĩ[R$M|#\#yb.>NYx/|>a#^zA~g~XW0mĽ+!7P ϯ;}ѫP6+`6YקAZקCNMք ܗjf왞Ǥg B7O =չjinY*_~ 0a((c)e1019:^;: <<<<@A UFA>JJK+M$MtMкPJPJPJ?Qq.`)``%,`%x`%Gc=+d Zg5Jh%jztnkJHl rJw~e8wwswwPxYZsvyTyT{ `9G?9 N 9xuuuuuu!qu!u)W^>_{I7(IIIIhibwZGDq pCCD1DdDDDE0EcE E EjH0luRBB=B˶BABYzYpF7B/xi~ˤž QՔ?4tEͥJ2 2=t(e5,`6/A)h@<hK@fnDVK#<PC_ dCVGT t1d ut uC @rlhTnΎ=(/$0P%)^y)|-U\k153:7e7e7U_8?~EzOF^F^H8fEPePQ+bQQD(Z\C.XaEWa*fXghh93״h;lllps 7vA Ix}o.aAoAkыK]*4̂dnFiwf,kcy REZ7j!NwNffϹfztt Gt&t;nFÞhN%%/xo^';*!Z%;xEUm{ZC<5<5<5<5<5nX<5<5qGsߺ-D9w} xljguZCN\5^| vEaEE>iQx#ECE'v6'v+pZ*1U 1^6{Aa:gN:?[C*<C*C*JC*ycGk2M9.0N9GQ)WjWdZ+Ѿ[=[FlmBb!rg<z8z'iPPP#P"i-B#FijՃ.".9-55 y>W622 77(DE(Wd2: R2ޔrTytiJ>!t/Ń7gqrQago Ůq{ H zy)) YB-!E5!Eb!E&rzY' )M' )p()Wg*Gc,D65n78}?;as;WZ:C'2IUI,vUI\Z[t\X.^a5c|lcz.hFhJVqiANi#:m.w%y %/y %>d Zj>jl/>@262ù]+dBTNA잂CJ잂͋-R)Ly2m8*#; S  : UYٚ.$Ϟ0-I G-G/[Gx!|Q8[S6NUUfU3W~}5\~ibsc?mdRdReEjDbnqvS<e55D; $8&S#iHC5HC N0dCnm%wUUU?d(u( JوeL_ycy<yrbt^P> 3¸b¸@ʩ`ʩqc8{]k]e࣓/OդY:D   n  $  )8 * .5nh 3': 6Eq 8eR 8eΆ 8e 9Jӟ 9 GA ItYf5 I5 Mg O T Ys hI. hI.Đ k l8 p, px w%ߝ w%ae x6 |bo >h >   UZ B1 ^= `| `? 9Ȣ 8G *c n)  FN Kn %Ӵ. '= +a 8Rt 9$ 9@T :_ Fy{ K\ R^ S XsA ]0' d<   wZ UU} u R6v Ueh 1[  N\Y d r ~ ·~2 *k| ʧc ʵ ˔C  J\8 Dv N ؋z ہ"n A *Z _lY  (  )b I9dU ".9 $ r +R] - mm 3'r NO Om S'J# STn' \ j \9 ] eE m  m < m Q s T u: C e  $nγ / ] K ? NL + y -#? -#Q -b) - 5ݙ% L5` P'jh V aC/ c"; c.cF c.c c.cG c.cj cl- c d̥1I d̥:j d̥ȱ tx2 |`f )4  j  Uc U {of {{ T  KX s ^4  4  g Ɉ(  ޖ 9 9 $ 鼣_ ]EE 9 - d +_ Z  5R rk .˙a 0 : 0  0  0  @u/ @u94 @u W` Zg \% ao^h bS#\ c c c c c c fbP l8: |. [ }Nt S" d Ѐ ȟ ;b | 1 3 . .= fm ` W 0^\ ɶ. Q0  Չ9- Չ9` 3 )>H k 1 /^ /^ƐvrT.2 ^b vRW fkn~pie j*E!D&ʮj1 1 12;}<)B\>dGP+Q>wY]]qad^DcgnbdyHOp&:'/?v+<]`9`9 Ș9IWgzh?Pr^uNf  |[L|N1;"j5$e(L)3_7W/U?IeCgD>DHEtI@YJi Ji/U&XҾZ C[x*[^ E<` eRBeRqeRBeRiI 5iI m4apڸ5y8*A*7Ks Q¥I)Lo.Ƴ~˖I&ܹ*iؽ SobreAbout AboutDialogSobre o LMMS About LMMS AboutDialogAutoresAuthors AboutDialogCopyright (c) 2004-2009, os desenvolvedores do LMMS {2004-2013,?} {2004-2014,?}(Copyright (c) 2004-2014, LMMS developers AboutDialogEste idioma non est traducido (ou ingls nativo). Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducins existentes, sntase vontade axudndonos! Simplemente contacte co mantedor!Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialogLMMSLMMS AboutDialogXLMMS - producin musical fcil para calquera)LMMS - easy music production for everyone AboutDialogLicenzaLicense AboutDialogTraducin Translation AboutDialog:Versin %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogPANPANAmplifierControlDialogPanormica:Panning:AmplifierControlDialogVOLVOLAmplifierControlDialogVolume:Volume:AmplifierControlDialogPanormicaPanningAmplifierControls VolumeVolumeAmplifierControls CANLESCHANNELSAudioAlsa::setupWidgetDISPOSITIVODEVICEAudioAlsa::setupWidgetAmplificar:Amplify:AudioFileProcessorViewPrema aqu se desexa abrir outro ficheiro de son. Aparecer un dilogo no que se pode escoller un ficheiro. As opcins tipo modo de bucle, puntos iniciais e final, valor da amplificacin, etc. non se reinician. Polo tanto, pode non soar igual que a mostra orixinal.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorViewPunto final: Endpoint:AudioFileProcessorViewAo activar este botn invrtese a mostra completa. Isto til para efectos gaioleiros, como un crash invertido.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView$Abrir outra mostraOpen other sampleAudioFileProcessorView"Inverter a mostraReverse sampleAudioFileProcessorViewPunto inicial: Startpoint:AudioFileProcessorViewCon este botn pdese indicar a relacin de amplificacin. Cando se indica un valor de 100%, a mostra fica como estaba. Se non, amplifcase para arriba ou para abaixo (o ficheiro mesmo coa mostra non se toca!)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView:Reiniciouse o cliente de JACKJACK client restarted AudioJackNO servidor de JACK non est a funcionarJACK server down AudioJackBLMMS foi expulsado por JACK por algunha razn. En consecuencia, reiniciouse a infraestrutura de JACK do LMMS. Ter que realizar as conexins manualmente de novo.LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. AudioJack~Semella que o servidor de JACK foi apagado e non foi posbel iniciar unha instancia nova. En consecuencia, o LMMS non pode preseguir. Hai que gravar este proxecto e reiniciar o JACK e o LMMS.The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack CANLESCHANNELSAudioJack::setupWidgetCLINTE-NOME CLIENT-NAMEAudioJack::setupWidget CANLESCHANNELSAudioOss::setupWidgetDISPOSITIVODEVICEAudioOss::setupWidgetINFRAESTRUTURABACKENDAudioPortAudio::setupWidgetDISPOSITIVODEVICEAudioPortAudio::setupWidget CANLESCHANNELSAudioPulseAudio::setupWidgetDISPOSITIVODEVICEAudioPulseAudio::setupWidgetDISPOSITIVODEVICEAudioSdl::setupWidget,&Copiar o valor (%1%2)&Copy value (%1%2)AutomatableModel,A&pegar o valor (%1%2)&Paste value (%1%2)AutomatableModel"&Reiniciar (%1%2) &Reset (%1%2)AutomatableModel2Ligar a un controlador...Connect to controller...AutomatableModelLigado a %1Connected to %1AutomatableModel*Ligado ao controladorConnected to controllerAutomatableModel(Editar a conexin...Edit connection...AutomatableModelREditar a automatizacin global da cancinEdit song-global automationAutomatableModel&Eliminar a conexinRemove connectionAutomatableModelrCopironse todos os valores escollidos no porta-retallos.1All selected values were copied to the clipboard.AutomationEditor:Editor de automatizacin - %1Automation Editor - %1AutomationEditor`Editor de automatizacin - non hai ningn padrnAutomation Editor - no patternAutomationEditorPrema aqu e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este o modo por omisin que se emprega a maior parte do tempo. Tamn pode premer Maisculas+D no teclado para activar este modo.Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditor:Prema aqu e activarase o modo de borrado. Neste modo pdense borrar valores individuais. Tamn pode premer Maisculas+E no teclado para activar este modo.Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditorPrema aqu e os valores escollidos cpianse no porta-retallos. Pdeos apegar en calquera lugar de calquera padrn premendo o botn de apegar.Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor2Prema aqu e os valores escollidos recrtanse e van para o porta-retallos. Pdeos apegar en calquera lugar de calquera padrn premendo o botn de apegar.Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorPrema aqu e os valores do porta-retallos apegaranse no primeiro comps visbel.YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditorPrema aqu se desexa reproducir este padrn. Isto til mentres se edita. O padrn reptese en bucle automaticamente ao chegar ao final.Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditorlPrema aqu se desexa parar a reproducin deste padrn.>Click here if you want to stop playing of the current pattern.AutomationEditorJCopiar os valores escollidos (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditorNRecortar os valores escollidos (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor:Modo de debuxo (Maisculas+D)Draw mode (Shift+D)AutomationEditor<Modo de borrado (Maisculas+E)Erase mode (Shift+E)AutomationEditorXApegar os valores do porta-retallos (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorRReproducir/Deter o padrn actual (Espazo)"Play/pause current pattern (Space)AutomationEditorAbra un padrn de automatizacin co men de contexto dun control!EPlease open an automation pattern with the context menu of a control!AutomationEditorVParar a execucin do padrn actual (Espazo)'Stop playing of current pattern (Space)AutomationEditor Valores copiados Values copiedAutomationEditor\Arrastre un control mentres ten <Ctrl> premido$Drag a control while pressing AutomationPattern%1 conexins%1 ConnectionsAutomationPatternViewMudar o nome Change nameAutomationPatternView LimparClearAutomationPatternView Desconectar %1Disconnect "%1"AutomationPatternView@Abrir o editor de automatizacinOpen in Automation editorAutomationPatternView Restaurar o nome Reset nameAutomationPatternView4Indicar/Limpar a gravacinSet/clear recordAutomationPatternViewfaga duplo clic para abrir este padrn no editor de automatizacin6double-click to open this pattern in automation editorAutomationPatternView.Pista de automatizacinAutomation trackAutomationTrackFREQFREQBassBoosterControlDialogFrecuencia: Frequency:BassBoosterControlDialogGAINGAINBassBoosterControlDialogGanancia:Gain:BassBoosterControlDialogTAXARATIOBassBoosterControlDialog Taxa:Ratio:BassBoosterControlDialogFrecuencia FrequencyBassBoosterControlsGananciaGainBassBoosterControlsTaxaRatioBassBoosterControls6Mostrar a interface grficaShow GUICarlaInstrumentViewControlador %1 Controller %1 Controller0Detectar automaticamente Auto DetectControllerConnectionDialog CANLECHANNELControllerConnectionDialogCONTROLADOR CONTROLLERControllerConnectionDialogCancelarCancelControllerConnectionDialog2Configuracin da conexinConnection SettingsControllerConnectionDialog(Detectouse un ciclo.Cycle Detected.ControllerConnectionDialog Canle de entrada Input channelControllerConnectionDialog,Controlador de entradaInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialog*FUNCIN DE ASIGNACINMAPPING FUNCTIONControllerConnectionDialog&CONTROLADOR DE MIDIMIDI CONTROLLERControllerConnectionDialog`Dispositivos MIDI dos que recibir acontecementos(MIDI-devices to receive MIDI-events fromControllerConnectionDialogAceptarOKControllerConnectionDialog,CONTROLADOR DO USUARIOUSER CONTROLLERControllerConnectionDialogEngadirAddControllerRackView2Bastidor de controladoresController RackControllerRackView &Axuda&HelpControllerView.Elimina&r este engadido&Remove this pluginControllerViewOs controladores poden automatizar o valor dun botn xiratorio ou linear e outros controles.QControllers are able to automate the value of a knob, slider, and other controls.ControllerViewControlesControlsControllerViewNIntroduza o novo nome deste controlador&Enter the new name for this controllerControllerView,Renomear o controladorRename controllerControllerView2x Pasa-baixas 2x LowPassDualFilterControlsPasa-todoAllpassDualFilterControlsPasa-faixa csg BandPass csgDualFilterControlsPasa-faixa czpg BandPass czpgDualFilterControlsPasa-altasHiPassDualFilterControlsPasa-baixasLowPassDualFilterControlsMoogMoogDualFilterControlsEntalleNotchDualFilterControls$RC pasa-faixa 12dBRC BandPass 12dBDualFilterControls$RC pasa-faixa 24dBRC BandPass 24dBDualFilterControls"RC pasa-alta 12dBRC HighPass 12dBDualFilterControls"RC pasa-alta 24dBRC HighPass 24dBDualFilterControls$RC pasa-baixa 12dBRC LowPass 12dBDualFilterControls$RC pasa-baixa 24dBRC LowPass 24dBDualFilterControls0Filtro de formante vocalVocal Formant FilterDualFilterControlsDecaementoDecayEffectEfecto activadoEffect enabledEffect PortaGateEffect&Mestura hmida/seca Wet/Dry mixEffect"Efectos activadosEffects enabled EffectChain"Engadir un efecto Add effectEffectRackView CADEA DE EFECTOS EFFECTS CHAINEffectRackView"Engadir un efecto Add effectEffectSelectDialog,Descricin do engadidoPlugin descriptionEffectSelectDialog &Axuda&Help EffectView.Elimina&r este engadido&Remove this plugin EffectViewControlesControls EffectView DECAEDECAY EffectView TOs engadidos de efectos funcionan como unha serie encadeada de efectos na que o sinal se procesa desde arriba para abaixo. O interruptor Activar/Desactivar permite omitir un engadido dado en calquera momento. O botn Hmido/Seco controla o balance entre o sinal de entrada eo sinal producido que a sada resultante do efecto. A entrada da etapa a sada da etapa anterior. Polo tanto, o sinal seco dos efectos de abaixo na cadea contn todos os efectos previos. O botn Decaemento controla como se contina a procesar o sinal despois de relaxar as notas. O efecto para o procesamento dos sinais cando o volume baixa por debaixo dun limiar dado durante un tempo dado. Este botn indica o tempo dado. Tempos maiores requiren mis CPU, polo que este nmero debera ser baixo para a maiora dos efectos. Haino que subir para os efectos que producen perodos de silencio longos, como por exemplo as demoras. O botn Porta controla o limiar dado do apagado automtico do efecto. O reloxo do tempo dado comeza as que o nivel do sinal procesado cae por debaixo do nivel indicado con este botn. O botn Controles abre un dilogo para editar os parmetros do efecto. Ao premer co botn dereito aparece un men de contexto no que se pode cambiar a orden na que se procesan os efectos ou eliminar un efecto de vez.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectView PORTAGATE EffectView Porta:Gate: EffectView&Baixar Move &down EffectView S&ubirMove &up EffectView$Activar/DesactivarOn/Off EffectViewO botn Decaemento controla cantos bferes de silencio han de pasar antes de que o engadido pare de procesar. Valores mis pequenos reducen o esforzo da CPU a risco de recortar a cola nos efectos de demora e reverberacin.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectViewO botn Porta controla o nivel do sinal que se considere como silencio mentres se decide cando parar de procesar os sinais.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewO botn Hmido/Seco indica a relacin entre o sinal de entrada e o sinal de efecto que forma a sada.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView Tempo:Time: EffectView>Conmuta a activacin do efecto.Toggles the effect on or off. EffectViewH/SW/D EffectView$Nivel de humidade: Wet Level: EffectView AtaqueAttackEnvelopeAndLfoParametersDecaementoDecayEnvelopeAndLfoParametersFreq x 100 Freq x 100EnvelopeAndLfoParametersRetencinHoldEnvelopeAndLfoParametersAtaque do LFO LFO AttackEnvelopeAndLfoParameters"Modulacin do LFOLFO ModulationEnvelopeAndLfoParameters:Tempo de reverberacin do LFO LFO PredelayEnvelopeAndLfoParameters(Forma da onda do LFOLFO Wave ShapeEnvelopeAndLfoParameters"Velocidade do LFO LFO speedEnvelopeAndLfoParameters4Modular a cantidade de envModulate Env-AmountEnvelopeAndLfoParametersModulacin ModulationEnvelopeAndLfoParameters,Tempo de reverberacinPredelayEnvelopeAndLfoParametersRelaxamentoReleaseEnvelopeAndLfoParametersSustentacinSustainEnvelopeAndLfoParametersCANTIDADEAMTEnvelopeAndLfoViewATAQATTEnvelopeAndLfoViewAtaque:Attack:EnvelopeAndLfoViewXPrema aqu para unha onda de dente de serra.&Click here for a saw-wave for current.EnvelopeAndLfoViewFPrema aqu para unha onda senoidal.Click here for a sine-wave.EnvelopeAndLfoViewDPrema aqu para unha onda cadrada.Click here for a square-wave.EnvelopeAndLfoViewJPrema aqu para unha onda triangular.Click here for a triangle-wave.EnvelopeAndLfoView Prema aqu para unha onda definida polo usuario. Posteriormente, arrastre un ficheiro de mostra correspondente sobre o grfico de LFO.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoViewPrema aqu se desexa multiplicar por 100 a frecuencia deste LFO.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewPrema aqu para facer que a cantidade de envolvente sexa controlada por este LFO.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewTMP REVDELEnvelopeAndLfoViewDecaemento:Decay:EnvelopeAndLfoViewxArrastre un exemplo doutro sitio e slteo sobre esta xanela.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoView RETENHOLDEnvelopeAndLfoViewSuxestinHintEnvelopeAndLfoViewRetencin:Hold:EnvelopeAndLfoView<Tempo de reverberacin do LFO: LFO predelay:EnvelopeAndLfoView$Velocidade do LFO: LFO speed:EnvelopeAndLfoViewAtaque do LFO: LFO- attack:EnvelopeAndLfoView$MODULAR CANT. ENVOMODULATE ENV-AMOUNTEnvelopeAndLfoView0Cantidade de modulacin:Modulation amount:EnvelopeAndLfoView.Tempo de reverberacin: Predelay:EnvelopeAndLfoViewRELEnvelopeAndLfoViewRelaxamento:Release:EnvelopeAndLfoViewSPDSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewSustentacin:Sustain:EnvelopeAndLfoViewPEmpregue este botn para indicar o tempo de ataque do LFO escollido. Canto maior for este valor mis tempo lle levar ao LFO para aumentar a sa amplitude at o mximo.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewEmpregue este botn para indicar o tempo de ataque da envolvente escollida. Canto maior for o valor mis tempo lle levar envolvente aumentar at o nivel de ataque. Escolla un valor pequeno para instrumentos como os pianos e un valor grande para as cordas.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewEmpregue este botn para indicar o tempo de decaemento da envolvente escollida. Canto maior for este valor mis tempo lle levar envolvente para diminur desde o nivel de ataque at o nivel de sustentacin. Escolla un valor pequenos para instrumentos como o piano.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewEmpregue este botn para indicar o tempo de retencin da envolvente escollida. Canto maior for este valor mis tempo mantn a envolvente o nivel de ataque antes de comezar a diminur at o nivel de sustentacin.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewEmpregue este botn para indicar a cantidade de modulacin do LFO escollido. Canto maior for este valor mis se ver influenciado o tamao escollido (p.ex. o volume ou a frecuencia de corte) por este LFO.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewEmpregue este botn para indicar a cantidade de modulacin da envolvente escollida. Canto maior for este valor maior mis se ver influenciado o tamao correspondente (p.ex. o volume ou a frecuencia de corte) por esta envolvente.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView@Empregue este botn para indicar o tempo de reverberacin desta envolvente. Canto maior for este valor maior ser o intervalo at que comece a envolvente en si.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView.Empregue este botn para indicar o tempo de reverberacin deste LFO. Canto maior for este valor, maior ser o intervalo at que o LFO comece a oscilar.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewEmpregue este botn para indicar o tempo de relaxamento da envolvente escollida. Canto maior for este valor mis tempo lle leva diminur desde o nivel de sustentacin at cero. Escolla un valor grande para instrumentos como as cordas.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewEmpregue este botn para indicar a velocidade do LFO escollido. Canto maior for este valor mis rpido oscila o LFO e mis rpido o efecto.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoViewfEmpregue este botn para indicar o nivel de sustentacin da envolvente escollida. Canto maior for este valor mis alto o nivel no que fica a envolvente antes de baixar at cero.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView`controlar a cantidade de envolvente con este LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:EnvelopeAndLfoViewNmultiplicar a frecuencia de LFO por 100multiply LFO-frequency by 100EnvelopeAndLfoView128 KBit/s 128 KBit/sExportProjectDialog$Enteiro de 16 bits16 Bit IntegerExportProjectDialog160 KBit/s 160 KBit/sExportProjectDialog192 KBit/s 192 KBit/sExportProjectDialog192000 Hz 192000 HzExportProjectDialog1x (Ningn) 1x (None)ExportProjectDialog256 KBit/s 256 KBit/sExportProjectDialog2x2xExportProjectDialog8Vrgula flutuante de 32 bits 32 Bit FloatExportProjectDialog320 KBit/s 320 KBit/sExportProjectDialog44100 Hz44100 HzExportProjectDialog48000 Hz48000 HzExportProjectDialog4x4xExportProjectDialog64 KBit/s 64 KBit/sExportProjectDialog88200 Hz88200 HzExportProjectDialog8x8xExportProjectDialog96000 Hz96000 HzExportProjectDialogTaxa de bits:Bitrate:ExportProjectDialogCancelarCancelExportProjectDialogProfundidade:Depth:ExportProjectDialog&Exportar o proxectoExport projectExportProjectDialog(Formato de ficheiro: File format:ExportProjectDialogInterpolacin:Interpolation:ExportProjectDialog SadaOutputExportProjectDialogFSobresampleado (usar con coidado!):Oversampling (use with care!):ExportProjectDialogTea en conta que non todos os parmetros de enriba se poden aplicar a todos os formatos de ficheiro.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog2Configuracin da calidadeQuality settingsExportProjectDialog"Taxa de mostraxe: Samplerate:ExportProjectDialogJWhittaker Shannon mellor (moi lenta!)Sinc Best (very slow!)ExportProjectDialog:Whittaker Shannon mis rpida Sinc FastestExportProjectDialogJWhittaker Shannon media (recomendada)Sinc Medium (recommended)ExportProjectDialogComezarStartExportProjectDialog,Retencin de orde ceroZero Order HoldExportProjectDialog &Axuda&HelpFxLineEfecto %1FX %1FxMixer GlobalMasterFxMixertIntroduza o novo nome para esta canle de efectos especiais&Enter the new name for this FX channel FxMixerView>Mesturador de efectos especiaisFX-Mixer FxMixerViewZMudar o nome desta canle de efectos especiaisRename FX channel FxMixerView&Fader de efectos %1 FX Fader %1FxMixerView::FxChannelViewSilenciarMuteFxMixerView::FxChannelViewRSilenciar esta canle de efectos especiaisMute this FX channelFxMixerView::FxChannelView ArpexoArpeggioInstrumentFunctionArpeggio&Direccin do arpexoArpeggio directionInstrumentFunctionArpeggioPorta do arpexo Arpeggio gateInstrumentFunctionArpeggioModo do arpexo Arpeggio modeInstrumentFunctionArpeggio&Intervalo do arpexoArpeggio rangeInstrumentFunctionArpeggioTempo do arpexo Arpeggio timeInstrumentFunctionArpeggioTipo de arpexo Arpeggio typeInstrumentFunctionArpeggio AbaixoDownInstrumentFunctionArpeggio LibreFreeInstrumentFunctionArpeggioAleatorioRandomInstrumentFunctionArpeggioOrdenarSortInstrumentFunctionArpeggioSincronizarSyncInstrumentFunctionArpeggio ArribaUpInstrumentFunctionArpeggioArriba e abaixo Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioView ARPEXOARPEGGIOInstrumentFunctionArpeggioView<Un arpexo unha tcnica de tocar instrumentos (especialmente de corda), que fai que a msica sexa mis viva. As cordas deses instrumentos (harpas, por exemplo), plsanse como acordes. A nica diferenza que se fai de maneira secuencial, polo que as notas non se tocan todas ao mesmo tempo. Os arpexos tpicos son tradas maiores ou menores, anda que existen moitos outros acordes posbeis que se poden escoller.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView Porta do arpexo:Arpeggio gate:InstrumentFunctionArpeggioView&Tesitura do arpexo:Arpeggio range:InstrumentFunctionArpeggioView Tempo do arpexo:Arpeggio time:InstrumentFunctionArpeggioViewDireccin: Direction:InstrumentFunctionArpeggioView PORTAGATEInstrumentFunctionArpeggioView Modo:Mode:InstrumentFunctionArpeggioViewINTERVALORANGEInstrumentFunctionArpeggioView TempoTIMEInstrumentFunctionArpeggioViewEmpregue este botn para indicar a tesitura do arpexo en oitavas. O arpexo escollido reproducirase dentro do nmero de oitavas indicado.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoitava(s) octave(s)InstrumentFunctionArpeggioView11InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking13InstrumentFunctionNoteStacking13#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking55InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking 6add96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#11InstrumentFunctionNoteStacking9#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStacking EolioAeolianInstrumentFunctionNoteStacking rabeArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStacking&Intervalo do acorde Chord rangeInstrumentFunctionNoteStackingTipo de acorde Chord typeInstrumentFunctionNoteStackingAcordesChordsInstrumentFunctionNoteStackingDiminudo DiminishedInstrumentFunctionNoteStacking$Dominante de bebopDominant bebopInstrumentFunctionNoteStacking DorioDorianInstrumentFunctionNoteStackingEnigmtico EnigmaticInstrumentFunctionNoteStackingHarmnico menorHarmonic minorInstrumentFunctionNoteStackingHngaro menorHungarian minorInstrumentFunctionNoteStacking Jap in senInstrumentFunctionNoteStacking LocrioLocrianInstrumentFunctionNoteStacking LidioLydianInstrumentFunctionNoteStackingMaj11InstrumentFunctionNoteStackingMaj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9InstrumentFunctionNoteStackingMaj9#11InstrumentFunctionNoteStackingMaj9#5InstrumentFunctionNoteStackingMaj9sus4InstrumentFunctionNoteStacking Majb5Majb5InstrumentFunctionNoteStacking MaiorMajorInstrumentFunctionNoteStackingMaior de bebop Major bebopInstrumentFunctionNoteStacking"Pentatnico maiorMajor pentatonicInstrumentFunctionNoteStackingMeldico menor Melodic minorInstrumentFunctionNoteStacking"Pentatnico menorMinor pentatonicInstrumentFunctionNoteStackingMixolidio MixolydianInstrumentFunctionNoteStackingNapolitano NeopolitanInstrumentFunctionNoteStacking Napolitano menorNeopolitan minorInstrumentFunctionNoteStackingFrixio-lidio PhrygolydianInstrumentFunctionNoteStacking Un ton Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaumaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11InstrumentFunctionNoteStackingm-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7InstrumentFunctionNoteStackingm9b5InstrumentFunctionNoteStackingmadd9InstrumentFunctionNoteStacking minb5minb5InstrumentFunctionNoteStacking menorminorInstrumentFunctionNoteStacking oitavaoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStacking(Intervalo do acorde: Chord range:"InstrumentFunctionNoteStackingViewINTERVALORANGE"InstrumentFunctionNoteStackingViewEmpregue este botn para indicar a tesitura do acorde en oitavas. O acorde escollido tocarase dentro do nmero indicado de oitavas.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewoitava(s) octave(s)"InstrumentFunctionNoteStackingView CANLECHANNELInstrumentMidiIOView2ACTIVAR A ENTRADA DE MIDIENABLE MIDI INPUTInstrumentMidiIOView.ACTIVAR A SADA DE MIDIENABLE MIDI OUTPUTInstrumentMidiIOViewjDispositivos MIDI dos que recibir acontecementos MIDI(MIDI devices to receive MIDI events fromInstrumentMidiIOViewhDispositivos MIDI aos que enviar acontecementos MIDI#MIDI devices to send MIDI events toInstrumentMidiIOViewPROGRAMAPROGRAMInstrumentMidiIOViewVELOCIDADEVELOCITYInstrumentMidiIOView2x Pasa-baixas 2x LowPassInstrumentSoundShapingPasa-todoAllpassInstrumentSoundShapingPasa-faixa csg BandPass csgInstrumentSoundShapingPasa-faixa czpg BandPass czpgInstrumentSoundShapingFREC. CORTECUTOFFInstrumentSoundShaping&Frecuencia de corteCutoff frequencyInstrumentSoundShapingEnvolventes/LFOEnvelopes/LFOsInstrumentSoundShapingTipo de filtro Filter typeInstrumentSoundShapingPasa-altasHiPassInstrumentSoundShapingPasa-baixasLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShapingEntalleNotchInstrumentSoundShapingQ/Resonancia Q/ResonanceInstrumentSoundShaping$RC pasa-faixa 12dBRC BandPass 12dBInstrumentSoundShaping$RC pasa-faixa 24dBRC BandPass 24dBInstrumentSoundShaping"RC pasa-alta 12dBRC HighPass 12dBInstrumentSoundShaping"RC pasa-alta 24dBRC HighPass 24dBInstrumentSoundShaping$RC pasa-baixa 12dBRC LowPass 12dBInstrumentSoundShaping$RC pasa-baixa 24dBRC LowPass 24dBInstrumentSoundShapingRESORESOInstrumentSoundShapingResonancia ResonanceInstrumentSoundShaping VOLUMEVOLUMEInstrumentSoundShaping0Filtro de formante vocalVocal Formant FilterInstrumentSoundShaping VolumeVolumeInstrumentSoundShaping FILTROFILTERInstrumentSoundShapingViewFREQFREQInstrumentSoundShapingViewPAqu pdese escoller o filtro incorporado que se desexe empregar para esta pista de instrumento. Os filtros son moi importantes para cambiar as caractersticas dun son.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRESORESOInstrumentSoundShapingViewResonancia: Resonance:InstrumentSoundShapingViewDESTINOTARGETInstrumentSoundShapingView Estas lapelas conteen envolventes. Son moi importantes para modificar un son dado que son case sempre necesarias para as snteses subtractivas. Por exemplo, se se ten unha envolvente de volume pdese indicar cando se desexa que o son tea un volume determinado. Se se desexan crear cordas brandas o son ten que entrar e sar moi suavemente. Isto pdese facer indicando tempos de ataque e relaxamento longos. o mesmo para outros destinos de envolvente, como panning, frecuencia de corte do filtro empregado e as por diante. Fedelle! Seguro que pode crear sons interesantes a partir dunha onde de dente de serra con unhas imples envolventes...!_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingViewLEmpregue este botn para indicar a Q/Resonancia do filtro escollido. A Q/Resonancia indcalle ao filtro canto se desexa amplificar as frecuencias prximas de corte.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingViewEmpregue este botn para indicar a frecuencia de corte do filtro escollido. A frecuencia de corte indica a frecuencia que un filtro corta o sinal. Por exemplo, un filtro pasa-baixas corta todas as frecuencias que ultrapasen a frecuencia de corte. Un filtro pasa-altas corta todas as frecuencias por debaixo da frecuencia de corte, e as por diante...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingViewNota base Base noteInstrumentTrackPredefinidoDefault presetInstrumentTrack4Canle de efectos especiais FX channelInstrumentTrackPanormicaPanningInstrumentTrack AlturaPitchInstrumentTrack VolumeVolumeInstrumentTracknCon este botn pdese indicar o volume da canle aberta. Configuracin.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowEste proxecto foi modificado desde que se gardou a ltima vez. Desexa gardalo agora?OThe current project was modified since last saving. Do you want to save it now? MainWindowSen ttuloUntitled MainWindowQue isto? What's this? MainWindow,Directorio de traballoWorking directory MainWindow*Denominador do compsMeter Denominator MeterDialog&Numerador do compsMeter Numerator MeterDialog COMPSTIME SIG MeterDialogDenominador Denominator MeterModelNumerador Numerator MeterModelDISPOSITIVODEVICEMidiAlsaRaw::setupWidgetDISPOSITIVODEVICEMidiAlsaSeq::setupWidget&Controlador de MIDIMIDI ControllerMidiController8controlador_de_midi_sen_nomeunnamed_midi_controllerMidiController>A configuracin est incompletaSetup incomplete MidiImportO LMMS non foi compilado para que admitise un reprodutor de SoundFont2, que se utiliza para engadir un son por omisin aos ficheiros de MIDI. En consecuencia, non se ha de reproducir ningn son unha vez importado este ficheiro de MIDI.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImportVNon se indicou unha fonte de son por omisin no dilogo de configuracin (Editar->Configuracin). En consecuencia, non se ha de reproducir ningn son unha vez importado este ficheiro de MIDI. Debera descargar unha fonte de son de General MIDI, indicala no dilogo de configuracin e tentar de novo.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImportDISPOSITIVODEVICEMidiOss::setupWidget4Velocidade de entrada fixaFixed input velocityMidiPort0Velocidade de sada fixaFixed output velocityMidiPort Canle de entrada Input channelMidiPort,Controlador de entradaInput controllerMidiPort,Programa MIDI de sadaOutput MIDI programMidiPortCanle de sadaOutput channelMidiPort(Controlador de sadaOutput controllerMidiPort<Recibir acontecementos de MIDIReceive MIDI-eventsMidiPort:Enviar acontecementos de MIDISend MIDI-eventsMidiPortVolume global Master volume NesInstrumentVibratoVibrato NesInstrument*Tipo de modulacin %1Modulation type %1OscillatorObjectDDesafinacin bruta do oscilador %1Osc %1 coarse detuningOscillatorObjectTDesafinacin fina esquerda do oscilador %1Osc %1 fine detuning leftOscillatorObjectRDesafinacin fina dereita do oscilador %1Osc %1 fine detuning rightOscillatorObject4Panormica do oscilador %1Osc %1 panningOscillatorObjectJDesprazamento da fase do oscilador %1Osc %1 phase-offsetOscillatorObject^Desafinacin de fase en estreo do oscilador %1Osc %1 stereo phase-detuningOscillatorObject,Volume do oscilador %1 Osc %1 volumeOscillatorObject:Forma da onda do oscilador %1Osc %1 wave shapeOscillatorObject:Forma de onda do oscilador %1Osc %1 waveformOscillatorObjectPrema aqu para abrir outro ficheiro de parche. A configuracin dos bucles e a afinacin non se restauran.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewAqu pdese alternar entre modos de bucle. Cando est activado, o PatMan emprega a informacin sobre o bucle dispobel no ficheiro.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewAqu pdese alternar entre modos de afinacin. Cando est activado o Patman afina a mostra para que coincida coa frecuencia da nota.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanView BucleLoop PatmanViewModo de bucle Loop mode PatmanView8Non escolleu ningn ficheiroNo file selected PatmanView$Abrir outro parcheOpen other patch PatmanView8Abrir un ficheiro de parchesOpen patch file PatmanView8Ficheiros de parches (*.pat)Patch-Files (*.pat) PatmanViewAfinacinTune PatmanView"Modo de afinacin Tune mode PatmanViewEngadir pasos Add steps PatternViewMudar o nome Change name PatternView*Limpar todas as notasClear all notes PatternView Abrir na pianolaOpen in piano-roll PatternViewEliminar pasos Remove steps PatternView Restaurar o nome Reset name PatternViewfaga duplo clic para abrir este padrn na pianola empregue a roda do rato para modificar o volume un pasoWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternView(Controlador de picosPeak ControllerPeakController$Controlador do LFOLFO ControllerPeakControllerDialogPICOPEAKPeakControllerDialogAtaque:Attack:!PeakControllerEffectControlDialogBASEBASE!PeakControllerEffectControlDialogCantidade base: Base amount:!PeakControllerEffectControlDialog0Cantidade de modulacin:Modulation amount:!PeakControllerEffectControlDialogRelaxamento:Release:!PeakControllerEffectControlDialog AtaqueAttackPeakControllerEffectControlsValor base Base valuePeakControllerEffectControls.Cantidade de modulacinModulation amountPeakControllerEffectControls"Silenciar a sada Mute outputPeakControllerEffectControlsRelaxamentoReleasePeakControllerEffectControlsPrema aqu e actvase o modo de desafinacin.Neste modo pdese premer unhanota para abrir a sa desafinacin de automatizacin. Pdese empregar isto para escorregar entre as notas. Tamn se pode premer Maisculas+T no teclado para activar este mdo.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollTPrema aqu e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este o modo por omisin que se emprega a maior parte do tempo. Tamn pode premer Maisculas+D no teclado para activar este modo. Neste modo, mantea Ctrl para ir temporalmente ao modo de seleccin.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRoll:Prema aqu e activarase o modo de borrado. Neste modo pdense borrar valores individuais. Tamn pode premer Maisculas+E no teclado para activar este modo.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRoll|Prema aqu e activarase o modo de borrado. Neste modo pdense borrar valores individuais. Como alternativa pode premer Ctrl no modo de debuxo para empregar temporalmente o modo de seleccin.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRollPrema aqu e os valores do porta-retallos apegaranse no primeiro comps visbel.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRollPrema aqu e os valores escollidos cpianse no porta-retallos. Pdeos apegar en calquera lugar de calquera padrn premendo o botn de apegar.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll2Prema aqu e os valores escollidos recrtanse e van para o porta-retallos. Pdeos apegar en calquera lugar de calquera padrn premendo o botn de apegar.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollPrema aqu para reproducir este padrn. Isto til mentres se edita. O padrn reptese en bucle automaticamente ao chegar ao final.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRollPrema aqu para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrn actual. As notas tocadas ao gravar escrbense neste padrn e despois pdense editar.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRollPrema aqu para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrn actual. As notas tocadas ao gravar escrbense neste padrn e escitase a cancin ou pista de ritmos/lia do baixo no fondo.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRollbPrema aqu para parar a reproducin deste padrn./Click here to stop playback of current pattern. PianoRollFCopiar as notas escollidas (Ctrl+C)Copy selected notes (Ctrl+C) PianoRollJRecortar as notas escollidas (Ctrl+X)Cut selected notes (Ctrl+X) PianoRollFModo de desafinacin (Maisculas+T)Detune mode (Shift+T) PianoRoll:Modo de debuxo (Maisculas+D)Draw mode (Shift+D) PianoRoll<Modo de borrado (Maisculas+E)Erase mode (Shift+E) PianoRollltima nota Last note PianoRoll*Panormmica das notas Note Panning PianoRoll Volume das notas Note Volume PianoRoll Bloqueo de notas Note lock PianoRollTApegar as notas do porta-retallos (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRollPianola - %1Piano-Roll - %1 PianoRoll>Pianola - non hai ningn padrnPiano-Roll - no pattern PianoRollRReproducir/Deter o padrn actual (Espazo)"Play/pause current pattern (Space) PianoRollLIntroduza un valor novo entre %1 e %2:+Please enter a new value between %1 and %2: PianoRollLAbra un padrn facendo duplo clic nel!/Please open a pattern by double-clicking on it! PianoRoll`Gravar notas dun dispositivo MIDI/piano de canle+Record notes from MIDI-device/channel-piano PianoRollGravar notas dun dispositivo MIDI/piano de canle mentres se reproduce a cancin ou pista de ritmos/lia do baixoJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll>Modo de seleccin (Maiscula+S)Select mode (Shift+S) PianoRollVParar a execucin do padrn actual (Espazo)'Stop playing of current pattern (Space) PianoRollNota base Base note PianoViewNProduciuse un erro ao cargar o engadidoError while loading pluginPlugin@Fallou a carga do engadido %1!Failed to load plugin "%1"!Plugin0Non se atopou o engadidoPlugin not foundPluginNon se atopou o engadido %1 ou non foi posbel cargalo! Razn: %2AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin>Ficheiro OGG comprimido (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer(Ficheiro wav (*.wav)WAV-File (*.wav)ProjectRenderer&Canles de entrada:  Channels In: QWidget"Canles de sada: Channels Out: QWidgetCopyright:  Copyright: QWidgetFicheiro: File: QWidget$En sitio rachado: In Place Broken: QWidgetCreador: Maker: QWidget Nome: Name: QWidgetNonNoQWidget4Capacidade de tempo real: Real Time Capable: QWidget(Require tempo real: Requires Real Time: QWidgetSiYesQWidget:Ficheiros AIFF (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBuffer&Ficheiros AU (*.au)AU-Files (*.au) SampleBuffer:Ficheiros do DrumSynth (*.ds)DrumSynth-Files (*.ds) SampleBuffer.Ficheiros FLAC (*.flac)FLAC-Files (*.flac) SampleBuffer*Ficheiros OGG (*.ogg)OGG-Files (*.ogg) SampleBuffer0Abrir un ficheiro de sonOpen audio file SampleBuffer*Ficheiros RAW (*.raw)RAW-Files (*.raw) SampleBuffer.Ficheiros SPEEX (*.spx)SPEEX-Files (*.spx) SampleBuffer*Ficheiros VOC (*.voc)VOC-Files (*.voc) SampleBuffer,Ficheiros wave (*.wav)Wave-Files (*.wav) SampleBuffer CopiarCopy SampleTCOViewRecortarCut SampleTCOViewBEliminar (botn do medio do rato)Delete (middle mousebutton) SampleTCOViewpSilenciar/Darlle volume (<Ctrl> + botn central do rato)#Mute/unmute ( + middle click) SampleTCOView ApegarPaste SampleTCOView4Indicar/Limpar a gravacinSet/clear record SampleTCOViewRfaga duplo clic para escoller unha mostradouble-click to select sample SampleTCOView Pista de mostras Sample track SampleTrack VolumeVolume SampleTrack Volume da canle:Channel volume:SampleTrackViewVolume da pista Track volumeSampleTrackViewVOLVOLSampleTrackViewHEngaidr unha pista de automatizacinAdd automation-track SongEditor<Engadir un ritmo/lia do baixoAdd beat/bassline SongEditor8Engadir unha pista de mostraAdd sample-track SongEditor<Prema aqu se desexa reproducir a cancin enteira. A reproducin comeza no marcador de posicin da cancin (verde). Tamn se pode mover durante a reproducin.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorPrema aqu se desexa parar a reproducin da cancin. O marcador de posicin da cancin ir para o principio da cancin.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor@Non foi posbel abrir o ficheiroCould not open file SongEditor\Non foi posbel abrir o ficheiro %1. Probabelmente vostede non tea permiso para ler este ficheiro. Asegrese de ter cando menos permiso para ler o ficheiro e tnteo de novo.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditorHNon foi posbel escribir no ficheiroCould not write file SongEditorModo de debuxo Draw mode SongEditorDModo de edicin (escoller e mover)Edit mode (select and move) SongEditor.Hai un erro no ficheiro Error in file SongEditor*Modo de alta calidadeHigh quality mode SongEditorAltura global Master pitch SongEditorVolume global Master volume SongEditor@Reproducir unha cancin (Espazo)Play song (Space) SongEditorJGravar mostras dun dispositivo de son Record samples from Audio-device SongEditorGravar mostras dun dispositivo de son mentres se reproduce a cancin ou pista de ritmos/lia do baixo?Record samples from Audio-device while playing song or BB track SongEditor$Editor de cancins Song-Editor SongEditor0Parar a cancin (Espazo)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorParece que o ficheiro %1 contn erros e por iso non se pode cargar.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditor2O tempo dunha cancin indcase en pulsos por minuto (BPM). Para cambiar o tempo da cancin hai que cambiar este valor. Cada comps ten catro pulsos, polo que o tempo en BPM indica cantos compases / 4 hai que tocar nun minuto (ou cantos compases habera que tocar en catro minutos).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor$Valor: %1 semitnsValue: %1 semitones SongEditorValor: %1% Value: %1% SongEditoraltura global master pitch SongEditorvolume global master volume SongEditor tempo da cancin tempo of song SongEditorEixo linear Y Linear Y axisSpectrumAnalyzerControlDialogEspectro linearLinear spectrumSpectrumAnalyzerControlDialogModo da canle Channel modeSpectrumAnalyzerControlsEixo linear Y Linear Y axisSpectrumAnalyzerControlsEspectro linearLinear spectrumSpectrumAnalyzerControls &Axuda&Help TempoSyncKnobSemicorchea 16th note TempoSyncKnobFusa 32nd note TempoSyncKnobCorchea8th note TempoSyncKnobPersonalizada Custom  TempoSyncKnob Personalizada... Custom... TempoSyncKnobOito tempos Eight beats TempoSyncKnob Branca Half note TempoSyncKnobNon sincronizarNo Sync TempoSyncKnob Negra Quarter note TempoSyncKnob4Sincronizado semicorcheaSynced to 16th Note TempoSyncKnob&Sincronizado fusaSynced to 32nd Note TempoSyncKnob,Sincronizado corcheaSynced to 8th Note TempoSyncKnob4Sincronizado a oito temposSynced to Eight Beats TempoSyncKnob*Sincronizado brancaSynced to Half Note TempoSyncKnob(Sincronizado negraSynced to Quarter Note TempoSyncKnob,Sincronizado redondaSynced to Whole Note TempoSyncKnob.Sincronizacin do tempo Tempo Sync TempoSyncKnobRedonda Whole note TempoSyncKnobCancelarCancelTrackContainer*Non foi posbel atopar un filtro para importar o ficheiro %1. Debera converter este ficheiro a un formato que o LMMS recoeza usando outro software.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainerFNon foi posbel importar o ficheiroCouldn't import fileTrackContainer@Non foi posbel abrir o ficheiroCouldn't open fileTrackContainer Non foi posbel abrir o ficheiro %1 para lelo. Asegrese de ter permiso de lectura sobre o ficheiro e o directorio que o contn e tente de novo!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer:A importar un ficheiro FLP...Importing FLP-file...TrackContainer<A importar un ficheiro MIDI...Importing MIDI-file...TrackContainer,A cargar o proxecto...Loading project...TrackContainer$Agarde un anaco...Please wait...TrackContainerLMisturar a sada dos osciladores 1 e 2Mix output of oscillator 1 & 2TripleOscillatorViewLMisturar a sada dos osciladores 2 e 3Mix output of oscillator 2 & 3TripleOscillatorViewFDesafinacin bruta do oscilador %1:Osc %1 coarse detuning:TripleOscillatorViewVDesafinacin fina esquerda do oscilador %1:Osc %1 fine detuning left:TripleOscillatorViewTDesafinacin fina dereita do oscilador %1:Osc %1 fine detuning right:TripleOscillatorView4Panormica do oscilador %1Osc %1 panning:TripleOscillatorViewLDesprazamento da fase do oscilador %1:Osc %1 phase-offset:TripleOscillatorView`Desafinacin de fase en estreo do oscilador %1:Osc %1 stereo phase-detuning:TripleOscillatorView.Volume do oscilador %1:Osc %1 volume:TripleOscillatorViewPSincronizar o oscilador 1 co oscilador 2*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewPSincronizar o oscilador 2 co oscilador 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorViewEmpregar unha onda de dente de serra tipo Moog para este oscilador.0Use a moog-like saw-wave for current oscillator.TripleOscillatorViewrEmpregar unha onda de dente de serra para este oscilador.&Use a saw-wave for current oscillator.TripleOscillatorView`Empregar unha onda senoidal para este oscilador.'Use a sine-wave for current oscillator.TripleOscillatorView^Empregar unha onda cadrada para este oscilador.)Use a square-wave for current oscillator.TripleOscillatorViewdEmpregar unha onda triangular para este oscilador.+Use a triangle-wave for current oscillator.TripleOscillatorViewxEmpregar unha forma de onda predefinida para este oscilador.3Use a user-defined waveform for current oscillator.TripleOscillatorViewEmpregar a modulacin de amplitude para modular o oscilador 2 co oscilador 1FUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewEmpregar a modulacin de amplitude para modular o oscilador 3 co oscilador 2FUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewfEmpregar unha onda exponencial para este oscilador./Use an exponential wave for current oscillator.TripleOscillatorViewEmpregar a modulacin de frecuencia para modular o oscilador 2 co oscilador 1FUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewEmpregar a modulacin de frecuencia para modular o oscilador 3 co oscilador 2FUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewEmpregar a modulacin de fase para modular o oscilador 2 co oscilador 1BUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewEmpregar a modulacin de fase para modular o oscilador 3 co oscilador 2BUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewTEmpregar rudo branco para este oscilador.'Use white-noise for current oscillator.TripleOscillatorViewzCon este botn pdese definir a desafinacin bruta do oscilador %1. Pdese desafinar o oscilador 12 semitns (unha oitava) para arriba e para abaixo. Isto til para crear sons cun acorde.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewxCon este botn pdese indicar a desafinacin fina do oscilador %1 pola canle esquerda. A desafinacin fina ten como intervalo -100 cents e +100 cents. Isto til para crear sons gordos.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewvCon este botn pdese indicar a desafinacin fina do oscilador %1 pola canle dereita. A desafinacin fina ten como intervalo -100 cents e +100 cents. Isto til para crear sons gordos.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewTCon este botn pdese indicar o panorama (panning) do oscilador %1. Un valor de -100 significa 100% esquerda e un valor de 100 move a sada do oscilador para a dereita.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewzCon este botn pdese indicar o desprazamento de fase do oscilador %1. Iso significa que se pode mover o punto dunha oscilacin no que o oscilador comeza a oscilar. Por exemplo, se se ten unha onda senoidal e un desprazamento de fase de 180 graos, a onda vai primeiro para abaixo. O mesmo acontece cunha onda cadrada.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorViewConte este botn pdese indicar a desafinacin de fase en estreo do oscilador %1. A desafinacin de fase en estreo indica o tamao da diferenza entre o desprazamento de fase das canles esquerda e dereita. Isto moi bon para crear sons con estreo amplo.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorViewXCon este botn pdese indicar o volume do oscilador %1. Ao indicar un valor de 0 o oscilador apgase. Caso contrario pdese ouvir o oscilador tan alto como se indique aqu.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorView centscentsTripleOscillatorView graosdegreesTripleOscillatorViewsemitns semitonesTripleOscillatorViewPrema aqu para mostrar ou agochar a interface grfica de usuario do engadido de VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentView$Prema aqu se desexa abrir outro engadido de VST. Ao premer este botn aparece un dilogo para abrir ficheiros no que se pode escoller o ficheiro.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentView*Ficheiros DLL (.*dll)DLL-files (*.dll)VestigeInstrumentView*Ficheiros EXE (*.exe)EXE-files (*.exe)VestigeInstrumentViewHNon se cargou ningn engadido de VSTNo VST-plugin loadedVestigeInstrumentView.Abrir o engadido de VSTOpen VST-pluginVestigeInstrumentView6Abrir outro engadido de VSTOpen other VST-pluginVestigeInstrumentViewPredefinicinPresetVestigeInstrumentView0Gardar as predefinicins Save presetVestigeInstrumentViewFMostrar/Agochar a interface grfica Show/hide GUIVestigeInstrumentView*Apagar todas as notasTurn off all notesVestigeInstrumentView0Gardar as predefinicins Save presetVstEffectControlDialog(A cargar un engadidoLoading plugin VstPluginDebuxe aqu a sa propia forma de onda arrastrando o rato polo grfico.ADraw your own waveform here by dragging your mouse on this graph. WatsynViewNormalizar Normalize WatsynViewOnda senoidal Sine wave WatsynView SuaveSmooth WatsynViewOnda cadrada Square wave WatsynViewOnda triangular Triangle wave WatsynViewPrema aqu para mostrar ou agochar a interface grfica deusuario de ZynAddSubFX.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewFREQFREQZynAddSubFxViewRESRESZynAddSubFxView6Mostrar a interface grficaShow GUIZynAddSubFxViewAmplificarAmplifyaudioFileProcessorFinal da mostra End of sampleaudioFileProcessorModo de bucle Loop modeaudioFileProcessor"Inverter a mostraReverse sampleaudioFileProcessor Inicio da mostraStart of sampleaudioFileProcessorHEngadir unha pista de automatizacinAdd automation-trackbbEditor<Engadir un ritmo/lia do baixoAdd beat/basslinebbEditorEngadir pasos Add stepsbbEditor@Editor de ritmos e lia do baixoBeat+Bassline EditorbbEditorPrema aqu para reproducir o ritmo/lia do baixo actual. O ritmo/lia do baixo reptese en bucle automaticamente ao chegar ao final.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorPrema aqu para parar a reproducin do ritmo/lia do baixo actual.4Click here to stop playing of current beat/bassline.bbEditorpReproducir/Deter o ritmo/a lia do baixo actual (Espazo)(Play/pause current beat/bassline (Space)bbEditorEliminar pasos Remove stepsbbEditorzParar a reproducin do ritmo/da lia do baixo actual (Espazo).Stop playback of current beat/bassline (Space)bbEditorMudar a cor Change color bbTCOViewMudar o nome Change name bbTCOViewRAbrir no editor de ritmos e lia do baixoOpen in Beat+Bassline-Editor bbTCOView Restaurar o nome Reset name bbTCOView,Ritmo/Lia do baixo %1Beat/Bassline %1bbTrack Samplelength bitInvader<Prema para unha onda senoidal.Click for a sine-wave.bitInvaderViewXPrema aqu para unha onda de dente de serra.Click here for a saw-wave.bitInvaderViewDPrema aqu para unha onda cadrada.Click here for a square-wave.bitInvaderViewJPrema aqu para unha onda triangular.Click here for a triangle-wave.bitInvaderViewbPrema aqu para unha forma definida polo usuario.$Click here for a user-defined shape.bitInvaderView:Prema aqu para rudo branco.Click here for white-noise.bitInvaderViewRPrema aqu para unha forma de onda suave.Click here to smooth waveform.bitInvaderViewDebuxe aqu a sa propia forma de onda arrastrando o rato polo grfico.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderViewInterpolacin InterpolationbitInvaderViewNormalizar NormalizebitInvaderView&Lonxitude da mostra Sample LengthbitInvaderView,Onda de dente de serraSaw wavebitInvaderViewOnda senoidal Sine wavebitInvaderView SuaveSmoothbitInvaderViewOnda cadrada Square wavebitInvaderViewOnda triangular Triangle wavebitInvaderView4Onda definida polo usuarioUser defined wavebitInvaderView(Onda de rudo brancoWhite noise wavebitInvaderView@Non foi posbel abrir o ficheiroCould not open fileexportProjectDialogNon foi posbel abrir o ficheiro %1 para escribir nel. Asegrese de ter permisos sobre o ficheiro e o directorio que o contn e tente de novo!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialogErroErrorexportProjectDialogProduciuse un erro ao determinar o dispositivo codificador do ficheiro. Tente escollendo un formato de sada diferente.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog0Exportar o proxecto a %1Export project to %1exportProjectDialog"A renderizar: %1%Rendering: %1%exportProjectDialogLIntroduza un valor novo entre %1 e %2:+Please enter a new value between %1 and %2:faderGrficoGraph graphModel Frecuencia final End frequencykickerInstrumentGananciaGainkickerInstrument RudoNoisekickerInstrument$Frecuencia inicialStart frequencykickerInstrument"Frecuencia final:End frequency:kickerInstrumentViewGanancia:Gain:kickerInstrumentView&Frecuencia inicial:Start frequency:kickerInstrumentView &Axuda&HelpknobLIntroduza un valor novo entre %1 e %2:+Please enter a new value between %1 and %2:knobdIntroduza un valor novo entre -96,0 dBV e 6,0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob,Ferramentas de anliseAnalysis ToolsladspaBrowserView&Efectos dispobeisAvailable EffectsladspaBrowserViewNon sei Don't knowladspaBrowserViewInstrumentos InstrumentsladspaBrowserView |Este dilogo mostra informacin sobre todos os engadidos de LADSPA que o LMMS deu localizado. Os engadidos divdense en cinco categoras basendose nunha interpretacin dos tipos e nomes dos portos. Os efectos dispobeis son os que se poden empregar co LMMS. Para que o LMMS poida utilizar un efecto ten que ser, en primeiro lugar e o mis importante, un efecto, o que quere dicir que ten que ter tanto canles de entrada como canles de sada. O LMMS identifica unha canle de entrada como un porto de taxa de son que contea in no nome. As canles de sada identifcanse coas letras out. Aln disto, o efecto ten que ter o mesmo nmero de entradas que de sadas e ter capacidade de tempo real. Os efectos non dispobeis son os que foron identificados como efectos mais que non tian o mesmo nmero de canles de entrada que de sada ou non tian capacidade de tempo real. Os instrumentos son engadidos nos que s se identificaron canles de sada . As ferramentas de anlise son engadidos nos que s se identificaron canles de entrada. Os non sei son engadidos nos que non se identificaron canles de entrada nin de sada. Facendo duplo clic sobre calquera dos engadidos mostra informacin sobre os portos.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView Tipo:Type:ladspaBrowserView.Efectos non dispobeisUnavailable EffectsladspaBrowserViewDescricin DescriptionladspaDescriptionEngadidosPluginsladspaDescriptionSonAudioladspaPortDialogControlControlladspaPortDialogDireccin DirectionladspaPortDialog"Vrgula flutuanteFloatladspaPortDialogEntradaInputladspaPortDialogEnteiroIntegerladspaPortDialogLogartmica LogarithmicladspaPortDialog.Mn < Predefinido < MxMin < Default < MaxladspaPortDialogNomeNameladspaPortDialog SadaOutputladspaPortDialog PortosPortsladspaPortDialogTaxaRateladspaPortDialog Dependente de SR SR DependentladspaPortDialogConmutadoToggledladspaPortDialogTipoTypeladspaPortDialogSiYesladspaPortDialog*Filtro de 24dB/oitava24dB/oct Filter lb302Synth AcentoAccent lb302Synth MorteDead lb302SynthDistorsin Distortion lb302SynthEscorregarSlide lb302Synth.Decamento ao escorregar Slide Decay lb302Synth4Frecuencia de corte do VCFVCF Cutoff Frequency lb302Synth>Decaemento da envolvente do VCFVCF Envelope Decay lb302Synth2Modo de envolvente do VCFVCF Envelope Mod lb302Synth"Resonancia do VCF VCF Resonance lb302SynthForma da ondaWaveform lb302SynthJFiltro tipo 303, 24dB/oitava, 3 polos&303-es-que, 24dB/octave, 3 pole filterlb302SynthView<Prema para unha onda senoidal.Click for a sine-wave.lb302SynthViewHPrema aqu para unha onda tipo Moog. Click here for a moog-like wave.lb302SynthViewXPrema aqu para unha onda de dente de serra.Click here for a saw-wave.lb302SynthViewpPrema aqu para unha onda cadrada con final arredondado.0Click here for a square-wave with a rounded end.lb302SynthViewDPrema aqu para unha onda cadrada.Click here for a square-wave.lb302SynthViewJPrema aqu para unha onda triangular.Click here for a triangle-wave.lb302SynthViewLPrema aqu para unha onda exponencial.#Click here for an exponential wave.lb302SynthView:Prema aqu para rudo branco.Click here for white-noise.lb302SynthViewFrec. de corte: Cutoff Freq:lb302SynthView DIST:DIST:lb302SynthViewDecaemento:Decay:lb302SynthViewMod env:Env Mod:lb302SynthViewOnda tipo Moog Moog wavelb302SynthViewResonancia: Resonance:lb302SynthView0Onda cadrada arredondadaRounded square wavelb302SynthView,Onda de dente de serraSaw wavelb302SynthViewOnda senoidal Sine wavelb302SynthView0Decamento ao escorregar: Slide Decay:lb302SynthViewOnda cadrada Square wavelb302SynthViewOnda triangular Triangle wavelb302SynthView(Onda de rudo brancoWhite noise wavelb302SynthView*Filtro de 24dB/oitava24dB/oct Filter lb303Synth AcentoAccent lb303Synth MorteDead lb303SynthDistorsin Distortion lb303SynthEscorregarSlide lb303Synth.Decamento ao escorregar Slide Decay lb303Synth4Frecuencia de corte do VCFVCF Cutoff Frequency lb303Synth>Decaemento da envolvente do VCFVCF Envelope Decay lb303Synth2Modo de envolvente do VCFVCF Envelope Mod lb303Synth"Resonancia do VCF VCF Resonance lb303SynthForma da ondaWaveform lb303SynthJFiltro tipo 303, 24dB/oitava, 3 polos&303-es-que, 24dB/octave, 3 pole filterlb303SynthView CORTECUTlb303SynthViewFrec. de corte: Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthView DIST:DIST:lb303SynthViewDecaemento:Decay:lb303SynthViewMOD ENVENV MODlb303SynthViewMod env:Env Mod:lb303SynthViewRESRESlb303SynthViewResonancia: Resonance:lb303SynthViewEscorregarSLIDElb303SynthView0Decamento ao escorregar: Slide Decay:lb303SynthViewONDAWAVElb303SynthView ONDA:WAVE:lb303SynthViewADSRADSRmalletsInstrument AgogAgogomalletsInstrument GolpesBeatsmalletsInstrumentCon arcoBowedmalletsInstrumentEsmagarClumpmalletsInstrument6Transicin por esvaecemento CrossfademalletsInstrument VidroGlassmalletsInstrument DurezaHardnessmalletsInstrument&Profundidade do LFO LFO DepthmalletsInstrument"Velocidade do LFO LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrument Faltan ficheiros Missing filesmalletsInstrumentModulador ModulatormalletsInstrumentMovementoMotionmalletsInstrumentPosicinPositionmalletsInstrumentPresinPressuremalletsInstrumentResomalletsInstrumentVelocidadeSpeedmalletsInstrumentPropagarSpreadmalletsInstrumentMestura de paus Stick MixmalletsInstrumentCunca tibetana Tibetan BowlmalletsInstrument Camps tubulares Tubular BellsmalletsInstrumentLmina afinada Tuned BarmalletsInstrumentDous fixos Two FixedmalletsInstrumentLmina uniforme Uniform BarmalletsInstrumentVibrfono VibraphonemalletsInstrument*Frecuencia do vibrato Vibrato FreqmalletsInstrument&Ganancia do vibrato Vibrato GainmalletsInstrumentMadeira1Wood1malletsInstrumentMadeira2Wood2malletsInstrumentA instalacin de Stk semella estar incompleta. Asegrese de que o paquete Stk completo est instalado!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR:ADSR:malletsInstrumentViewCon arcoBowedmalletsInstrumentView6Transicin por esvaecemento CrossfademalletsInstrumentView8Transicin por esvaecemento: Crossfade:malletsInstrumentView DurezaHardnessmalletsInstrumentViewDureza: Hardness:malletsInstrumentViewInstrumento InstrumentmalletsInstrumentView&Profundidade do LFO LFO DepthmalletsInstrumentView(Profundidade do LFO: LFO Depth:malletsInstrumentView"Velocidade do LFO LFO SpeedmalletsInstrumentView$Velocidade do LFO: LFO Speed:malletsInstrumentViewModulador ModulatormalletsInstrumentViewModulador: Modulator:malletsInstrumentViewMovementoMotionmalletsInstrumentViewMovemento:Motion:malletsInstrumentViewPosicinPositionmalletsInstrumentViewPosicin: Position:malletsInstrumentViewPresinPressuremalletsInstrumentViewPresin: Pressure:malletsInstrumentViewVelocidadeSpeedmalletsInstrumentViewVelocidade:Speed:malletsInstrumentViewPropagarSpreadmalletsInstrumentViewPropagar:Spread:malletsInstrumentViewMestura de paus Stick MixmalletsInstrumentView Mestura de paus: Stick Mix:malletsInstrumentViewFrec. vib.:Vib FreqmalletsInstrumentViewFrec. vib.: Vib Freq:malletsInstrumentViewGan. vib.Vib GainmalletsInstrumentViewGan. vib.: Vib Gain:malletsInstrumentViewVibratoVibratomalletsInstrumentViewVibrato:Vibrato:malletsInstrumentView &Axuda&HelpnineButtonSelector ParchePatchopl2instrumentDistorsin DistortionorganicInstrument VolumeVolumeorganicInstrumentDistorsin: Distortion:organicInstrumentView6Panormica do oscilador %1:Osc %1 panning:organicInstrumentView.Volume do oscilador %1:Osc %1 volume:organicInstrumentViewBForma de onda do osciloscopio %1:Osc %1 waveform:organicInstrumentViewAleatorio RandomiseorganicInstrumentViewVolume:Volume:organicInstrumentView centscentsorganicInstrumentView GravesBasspapuInstrument.Canle 1 a SO1 (Dereita)Channel 1 to SO1 (Right)papuInstrument0Canle 1 a SO1 (Esquerda)Channel 1 to SO2 (Left)papuInstrument"Volume da canle 1Channel 1 volumepapuInstrument.Canle 2 a SO1 (Dereita)Channel 2 to SO1 (Right)papuInstrument0Canle 2 a SO2 (Esquerda)Channel 2 to SO2 (Left)papuInstrument"Volume da canle 2Channel 2 volumepapuInstrument.Canle 3 a SO1 (Dereita)Channel 3 to SO1 (Right)papuInstrument0Canle 3 a SO2 (Esquerda)Channel 3 to SO2 (Left)papuInstrument"Volume da canle 3Channel 3 volumepapuInstrument.Canle 4 a SO1 (Dereita)Channel 4 to SO1 (Right)papuInstrument0Canle 4 a SO2 (Esquerda)Channel 4 to SO2 (Left)papuInstrument"Volume da canle 4Channel 4 volumepapuInstrument.Nivel da sada esquerdaLeft Output levelpapuInstrumentFLonxitude de cada paso en varreduraLength of each step in sweeppapuInstrument,Nivel da sada dereitaRight Output levelpapuInstrument:Cambiar a largura do rexistroShift Register widthpapuInstrument@Cantidade de Cambio de varreduraSweep RtShift amountpapuInstrument,Direccin da varreduraSweep directionpapuInstrument$Tempo da varredura Sweep timepapuInstrument AgudosTreblepapuInstrument@Direccin da varredura do volumeVolume sweep directionpapuInstrumentPadrn de ondaWave Pattern DutypapuInstrument GravesBasspapuInstrumentViewGraves:Bass:papuInstrumentView.Canle 1 a SO1 (Dereita)Channel1 to SO1 (Right)papuInstrumentView0Canle 1 a SO2 (Esquerda)Channel1 to SO2 (Left)papuInstrumentView.Canle 1 a SO1 (Dereita)Channel2 to SO1 (Right)papuInstrumentView0Canle 2 a SO2 (Esquerda)Channel2 to SO2 (Left)papuInstrumentView.Canle 3 a SO1 (Dereita)Channel3 to SO1 (Right)papuInstrumentView0Canle 3 a SO2 (Esquerda)Channel3 to SO2 (Left)papuInstrumentView.Canle 4 a SO1 (Dereita)Channel4 to SO1 (Right)papuInstrumentView0Canle 4 a SO2 (Esquerda)Channel4 to SO2 (Left)papuInstrumentView$Debuxe a onda aquDraw the wave herepapuInstrumentViewFLonxitude de cada paso en varreduraLength of each step in sweeppapuInstrumentViewHLonxitude de cada paso en varredura:Length of each step in sweep:papuInstrumentView0Volume da canle de rudoNoise Channel VolumepapuInstrumentView2Volume da canle de rudo:Noise Channel Volume:papuInstrumentView.Volume de SO1 (Dereita)SO1 Volume (Right)papuInstrumentView0Volume de SO1 (Dereita):SO1 Volume (Right):papuInstrumentView0Volume de SO2 (Esquerda)SO2 Volume (Left)papuInstrumentView2Volume de SO2 (Esquerda):SO2 Volume (Left):papuInstrumentView:Cambiar a largura do rexistroShift Register WidthpapuInstrumentView2Volume da canle cadrada 1Square Channel 1 VolumepapuInstrumentView4Volume da canle cadrada 1:Square Channel 1 Volume:papuInstrumentView2Volume da canle cadrada 2Square Channel 2 VolumepapuInstrumentView4Volume da canle cadrada 2:Square Channel 2 Volume:papuInstrumentView,Direccin da varreduraSweep DirectionpapuInstrumentView@Cantidade de cambio de varreduraSweep RtShift amountpapuInstrumentViewBCantidade de cambio de varredura:Sweep RtShift amount:papuInstrumentView$Tempo da varredura Sweep TimepapuInstrumentView&Tempo da varredura: Sweep Time:papuInstrumentView`A cantidade de aumento ou reducin da frecuencia/The amount of increase or decrease in frequencypapuInstrumentView<A demora entre cambios de pasoThe delay between step changepapuInstrumentViewO ciclo de deber a relacin entre a duracin (tempo) durante a que un sinal est ACTIVO fronte ao perodo total do sinal.mThe duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.papuInstrumentViewzA taxa que se produce o aumento ou a reducin da frecuencia:The rate at which increase or decrease in frequency occurspapuInstrumentView AgudosTreblepapuInstrumentViewAgudos:Treble:papuInstrumentView@Direccin da varredura do volumeVolume Sweep DirectionpapuInstrumentView0Volume da canle de ondasWave Channel VolumepapuInstrumentView2Volume da canle de ondas:Wave Channel Volume:papuInstrumentViewPadrn de onda Wave PatternpapuInstrumentView.Padrn de onda de deberWave Pattern DutypapuInstrumentView.Padrn de onda de deberWave pattern dutypapuInstrumentView0Padrn de onda de deber:Wave pattern duty:papuInstrumentViewTSintetizador aditivo para sons tipo rgano*Additive Synthesizer for organ-like sounds pluginBrowserZSintetizador de tboa de ondas personalizbel"Customizable wavetable synthesizer pluginBrowserArrastre un instrumento para o Editor de cancins, o Editor de ritmos+lia do baixo ou para unha pista de instrumento existente.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowser.ZynAddSubFX incorporadoEmbedded ZynAddSubFX pluginBrowser@Emulacin da APU da GameBoy (TM)Emulation of GameBoy (TM) APU pluginBrowserEmulacin dos SID MOS6581 e o MOS8580. Este chip empregbase no computador Commodore 64.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserfFiltro para importar proxectos do FL Studio ao LMMS1Filter for importing FL Studio projects into LMMS pluginBrowserVFiltro para importar ficheiros MIDI ao LMMS)Filter for importing MIDI-files into LMMS pluginBrowserRInstrumento de parcheo compatbel con GUSGUS-compatible patch instrument pluginBrowserJImitacin monofnica incompleta tb303%Incomplete monophonic imitation tb303 pluginBrowser2Navegador de instrumentosInstrument browser pluginBrowser0Engadidos de instrumentoInstrument plugins pluginBrowserTEnumerar os engadidos de LADSPA instaladosList installed LADSPA plugins pluginBrowserBReprodutor de ficheiros SoundFontPlayer for SoundFont files pluginBrowser^Engadido para controlar botns con picos de son-Plugin for controlling knobs with sound peaks pluginBrowserEngadido para mellorar a separacin en estreo dun ficheiro de entrada en estreo=Plugin for enhancing stereo separation of a stereo input file pluginBrowserjEngadido para manipular libremente a sada en estreo,Plugin for freely manipulating stereo output pluginBrowser>Cousas melodiosas nas que baterTuneful things to bang on pluginBrowserpHspede de VST para empregar engadidos de VST(i) co LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser:Modelador de cordas vibrantesVibrating string modeler pluginBrowsersen descricinno description pluginBrowserzengadido para empregar efectos de LADSPA arbitrarios no LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowser&Negrita&Bold projectNotes&Cor... &Color... projectNotes&Copiar&Copy projectNotesCursi&va&Italic projectNotes&Xustificar&Justify projectNotes&Esquerda&Left projectNotesA&pegar&Paste projectNotes&Refacer&Redo projectNotesDe&reita&Right projectNotesS&ubliado &Underline projectNotesDesfa&cer&Undo projectNotesC&entroC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotesCor&tarCu&t projectNotes"Editar as accins Edit Actions projectNotes$Accins de formatoFormat Actions projectNotes"Notas do proxecto Project notes projectNotesTAnote aqu as sas notas sobre o proxecto.!Put down your project notes here. projectNotesMudar o nome... Rename... renameDialog INTERFACE DO SONAUDIO INTERFACE setupDialog<Directorio do material grficoArtwork directory setupDialog(Configuracin do sonAudio settings setupDialogTAMAO DO BFER BUFFER SIZE setupDialog"Grficos do fondoBackground artwork setupDialogCancelarCancel setupDialogbEscoller o directorio de instalacin do FL Studio'Choose FL Studio installation directory setupDialogZEscoller o directorio dos engadidos de LADSPAChoose LADSPA plugin directory setupDialogREscoller o directorio de traballo do LMMSChoose LMMS working directory setupDialogVEscoller o directorio de ondas cruas de STKChoose STK rawwave directory setupDialogREscoller o directorio do material grficoChoose artwork-theme directory setupDialog:Escoller os grficos do fondoChoose background artwork setupDialog@Escoller a SoundFont por omisinChoose default SoundFont setupDialogTEscoller o directorio dos engadidos de VST Choose your VST-plugin directory setupDialog`Comprimir os ficheiros dos proxectos por omisin"Compress project files per default setupDialog<Ficheiro Soundfont por omisinDefault Soundfont File setupDialog4Mostrar o volume como dBV Display volume as dBV  setupDialog&Activar as axudiasEnable tooltips setupDialogLDirectorio de instalacin do FL Studio FL Studio installation directory setupDialog8Cadencia: %1 Latencia: %2 msFrames: %1 Latency: %2 ms setupDialog&Configuracin xeralGeneral settings setupDialogpModo de calidade alta para o dispositivo de son de sadaHQ-mode for output audio-device setupDialogAqu pdese escoller a interface de MIDI preferida. Dependendo da configuracin do sistema durante a compilacin pdese escoller entre ALSA, OSS e mis. Embaixo vese unha caixa que oferece controles para configurar a interface de MIDI escollida.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogAqu pdese escoller a interface de son preferida. Dependendo da configuracin do sistema durante a compilacin pdese escoller entre ALSA, JACK, OSS e mis. Embaixo vese unha caixa que oferece controles para configurar a interface de son escollida.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialog(Aqu pdese configurar o tamao do bfer interno empregado polo LMMS. Valores mis pequenos resultan nunha latencia menor mais poden tamn causar son non usbel ou desempeo inadecuado, especialmente en computadores vellos ou en sistemas cun kernel que non sexa de tempo real.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog:Rutas aos engadidos de LADSPALADSPA plugin paths setupDialog<Directorio de traballo do LMMSLMMS working directory setupDialogINTERFACE MIDIMIDI INTERFACE setupDialog*Configuracin do MIDI MIDI settings setupDialogDIVERSOSMISC setupDialogAceptarOK setupDialog RutasPaths setupDialog4Configuracin do desempeoPerformance settings setupDialogTea en conta que a maiora dos cambios non sern efectivos at que se reinicie o LMMS!GPlease note that most changes won't take effect until you restart LMMS! setupDialog:Restaurar o valor por omisinReset to default-value setupDialog Reiniciar o LMMS Restart LMMS setupDialog@Directorio de ondas cruas de STKSTK rawwave directory setupDialog*Configuracin do LMMS Setup LMMS setupDialogMostrar o aviso sobre o reinicio despois de cambiar a configuracin,Show restart warning after changing settings setupDialogNEfectos da interface fronte a desempeoUI effects vs. performance setupDialog>Directorio dos engadidos de VSTVST-plugin directory setupDialog BancoBank sf2InstrumentCoroChorus sf2Instrument(Profundidade do coro Chorus Depth sf2InstrumentNivel do coro Chorus Level sf2InstrumentLias do coro Chorus Lines sf2Instrument$Velocidade do coro Chorus Speed sf2InstrumentGananciaGain sf2Instrument ParchePatch sf2InstrumentReverberacinReverb sf2Instrument.Tampn de reverberacinReverb Damping sf2Instrument,Nivel de reverberacin Reverb Level sf2Instrument>Tamao da sala de reverberacinReverb Roomsize sf2Instrument0Largura da reverberacin Reverb Width sf2Instrument<Aplicar un coro (se o admitir)Apply chorus (if supported)sf2InstrumentViewHAplicar reverberacin (se o admitir)Apply reverb (if supported)sf2InstrumentView"Escoller o parcheChoose the patchsf2InstrumentView*Profundidade do coro: Chorus Depth:sf2InstrumentViewNivel do coro: Chorus Level:sf2InstrumentViewLias de coro: Chorus Lines:sf2InstrumentView&Velocidade do coro: Chorus Speed:sf2InstrumentViewVPrema aqu para abrir outro ficheiro de SF2#Click here to open another SF2 filesf2InstrumentViewGananciaGainsf2InstrumentView<Abrir un ficheiro de SoundFontOpen SoundFont filesf2InstrumentViewBAbrir outro ficheiro de SoundFontOpen other SoundFont filesf2InstrumentView0Tampn de reverberacin:Reverb Damping:sf2InstrumentView.Nivel de reverberacin: Reverb Level:sf2InstrumentView@Tamao da sala de reverberacin:Reverb Roomsize:sf2InstrumentView2Largura da reverberacin: Reverb Width:sf2InstrumentView>Ficheiros de SoundFont2 (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewEste botn activa o efecto de coro. Isto til para efectos de echo gaioleiros, mais s funciona cos ficheiros que o admiten.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewEste botn activa o efecto de reverberacin. Isto til para efectos gaioleiros, mais s funciona cos ficheiros que o admiten.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewModelo de chip Chip model sidInstrument CorteCutoff sidInstrumentTipo de filtro Filter type sidInstrumentResonancia Resonance sidInstrumentVoz 3 apagada Voice 3 off sidInstrument VolumeVolume sidInstrumentA taxa de ataque determina como de rpido sobe a Voz %1 desde cero amplitude de pico.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentViewAtaque:Attack:sidInstrumentView$Filtro pasa-faixa Band-Pass filter sidInstrumentViewCr:Coarse:sidInstrumentView(Frecuencia de corte:Cutoff frequency:sidInstrumentViewA taxa de decaemento determina como de rpido cae a sada desde a amplitude de pico ao nivel de Sustentacin escollido.iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentViewDecaemento:Decay:sidInstrumentViewFiltradoFilteredsidInstrumentView"Filtro pasa-alta High-Pass filter sidInstrumentView$Filtro pasa-baixa Low-Pass filter sidInstrumentViewSID MOS6581  MOS6581 SID sidInstrumentViewSID MOS6580  MOS8580 SID sidInstrumentView RudoNoisesidInstrumentViewA sada da voz %1 fica na amplitude de sustentacin indicada mentres se mantea a nota.]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentViewOnda de pulso Pulse WavesidInstrumentView"Largura do pulso: Pulse Width:sidInstrumentViewRelaxamento:Release:sidInstrumentViewResonancia: Resonance:sidInstrumentViewModo anelRing-ModsidInstrumentViewO modo anel substite a sada da onda de forma triangular do oscilador %1 cunha combinacin modulada en anel dos osciladores %1 e %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentViewDente de serraSawToothsidInstrumentViewSustentacin:Sustain:sidInstrumentViewSincronizarSyncsidInstrumentViewSincroniza a frecuencia fundamental do oscilador %1 coa frecuencia fundamental do oscilador %2, producindo efectos de sincronizacin dura.Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentView ProbaTestsidInstrumentViewProba, cando escollido, restaura e bloquea o oscilador %1 a cero at que remate a proba.PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewA desafinacin cra permite desafinar a voz %1 unha oitava para arriba ou para abaixo.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewA resolucin da largura do pulso permite varrer a largura suavemente sen que sexa posbel discernir os pasos. Hai que escoller a forma de onda pulso no oscilador %1 para que se ouza un efecto audbel.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentViewA sada da voz %1 cae desde a amplitude de sustentacin at cero na relacin de relaxamento escollida.jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentViewOnda triangular Triangle WavesidInstrumentViewVoz3 apagada  Voice3 Off sidInstrumentViewVolume:Volume:sidInstrumentViewpCando Filtrado est activado, a voz %1 procsase a travs do filtro. Cando Filtrado est desactivado, a voz %1 aparece directamente na sada e o filtro non ten ningn efecto sobre ela.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentView4Todos os tipos de ficheiroAll file typessong Proxecto baleiro Empty projectsong,Proxectos de FL StudioFL Studio projectssong(Importar un ficheiro Import filesong$Secuencias de MIDIMIDI sequencessongAltura global Master pitchsongVolume global Master volumesong8O proxecto NON est gravado.Project NOT saved.song Proxecto gravado Project savedsonghEscolla o ficheiro para a exportacin do proxecto...!Select file for project-export...song TempoTemposong<O proxecto %1 xa est gravado.The project %1 is now saved.song>O proxecto %1 no nest gravado!The project %1 was not saved!songEste proxecto est baleiro, polo que exportalo non ten xeito. Poa algo primeiro no Editor de cancins!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songsen ttulountitledsong LARGOWIDEstereoEnhancerControlDialogLargura:Width:stereoEnhancerControlDialogLarguraWidthstereoEnhancerControls<Volume esquerda para esquerda:Left to Left Vol:stereoMatrixControlDialog:Volume esquerda para dereita:Left to Right Vol:stereoMatrixControlDialog:Volume dereita para esquerda:Right to Left Vol:stereoMatrixControlDialog8Volume dereita para dereita:Right to Right Vol:stereoMatrixControlDialog,Esquerda para esquerda Left to LeftstereoMatrixControls*Esquerda para dereita Left to RightstereoMatrixControls*Dereita para esquerda Right to LeftstereoMatrixControls(Dereita para dereitaRight to RightstereoMatrixControlsHDespois de parar voltar ao principioAfter stopping go back to begintimeLineDespois de parar voltar posicin na que se iniciou a reproducin?After stopping go back to position at which playing was startedtimeLineDDespois de parar manter a posicinAfter stopping keep positiontimeLineZActivar/Desactivar o desprazamento automticoEnable/disable auto-scrollingtimeLineJActivar/Desactivar os puntos de bucleEnable/disable loop-pointstimeLineSuxestinHinttimeLineSilenciadoMutedtrackSoloSolotrackSilenciadoMutedtrackContentObject*%1:%2 (%3:%4 a %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView CopiarCopytrackContentObjectViewDuracin actualCurrent lengthtrackContentObjectViewPosicin actualCurrent positiontrackContentObjectViewRecortarCuttrackContentObjectViewBEliminar (botn do medio do rato)Delete (middle mousebutton)trackContentObjectViewSuxestinHinttrackContentObjectViewpSilenciar/Darlle volume (<Ctrl> + botn central do rato)#Mute/unmute ( + middle click)trackContentObjectView ApegarPastetrackContentObjectView\Prema <Ctrl> e arrastre para facer unha copia.%Press and drag to make a copy.trackContentObjectView^Prema <Ctrl> para modificar o tamao librementePress for free resizing.trackContentObjectView.Accins para esta pistaActions for this tracktrackOperationsWidget"Clonar esta pistaClone this tracktrackOperationsWidgetSilenciarMutetrackOperationsWidget(Silenciar esta pistaMute this tracktrackOperationsWidgetPrema <Ctrl> mentres ten a asa de mover premida para iniciar unha accin de arrastrar e soltar.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget&Eliminar esta pistaRemove this tracktrackOperationsWidgetSoloSolotrackOperationsWidgetBFallou a carga do engadido de VSTFailed loading VST-pluginvestigeInstrument(A cargar un engadidoLoading pluginvestigeInstrumentXAgarde mentres se carga o engadido de VST...'Please wait while loading VST-plugin...vestigeInstrument$Non foi posbel cargar o engadido de VST %1 por algunha razn. Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LMMS!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentDesafinar %1 Detune %1vibedDifuso %1  Fuzziness %1 vibedImpulso %1 Impulse %1vibedLonxitude %1 Length %1vibedOitava %1 Octave %1vibed Pan %1Pan %1vibed$Posicin da pa %1Pick %1 positionvibed.Posicin do captador %1Pickup %1 positionvibed&Tensin da corda %1String %1 stiffnessvibed$Volume da corda %1String %1 volumevibed &Axuda&Help vibedViewfPrema aqu para activar/desactivar a forma da onda.&Click here to enable/disable waveform. vibedViewVPrema aqu para normalizar a forma da onda.!Click here to normalize waveform. vibedViewRPrema aqu para unha forma de onda suave.Click here to smooth waveform. vibedViewDesafinar:Detune: vibedView.Activar a forma de ondaEnable waveform vibedViewDifuso: Fuzziness: vibedView$Editor de impulsosImpulse Editor vibedView2Impulso ou estado inicialImpulse or initial state vibedViewLonxitude:Length: vibedViewNormalizar Normalize vibedView OitavaOctave vibedViewPan:Pan: vibedView Posicin da pa:Pick position: vibedView*Posicin do captador:Pickup position: vibedView,Onda de dente de serraSaw wave vibedViewOnda senoidal Sine wave vibedView SuaveSmooth vibedViewOnda cadrada Square wave vibedView CordaString vibedView"Tensin da corda:String stiffness: vibedView$O selector Imp determina se hai que tratar a forma de onda do grfico como un impulso impartido na corda pola pba ou o estado inicial da corda.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewO botn P indica a posicin na que se pulsa a corda escollida. Canto menor sexa, mis prxima estar da ponte.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedView O botn PU indica a posicin desde a que se recollen as vibracins da corda escollida. Canto menor sexa, mis prximo ser da ponte.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedView(O botn S indica a tensin da corda escollida. A tensin da corda afecta ao tempo durante o que esta soa. Canto menor sexa, mis tempo ha de soar.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedView^O botn V indica o volume da corda escollida.4The 'V' knob sets the volume of the selected string. vibedViewO botn Desafinar modifica a altura da corda escollida. Indicar menos de cero fai que a corda soe plana. Con mis de cero a corda soar viva.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewFO botn Lonxitude indica a lonxitude da corda escollida. As cordas mis longas soan durante mis tempo e con mis brillo; porn, tamn consumen mis ciclos da CPU.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedView0O selector Oitava emprgase para escoller con que harmnico da nota soa a corda. Por exemplo, -2 significa que a corda soa das oitavas por debaixo da fundamental, F significa que a corda soa na fundamental e 6 significa que a cadea soa seix oitavas por riba da fundamental.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewO botn Pan determina o lugar que ocupa a cadea escollida no campo estreo.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewfO botn Slap engdelle algo de distorsin tipo fuzz corda escollida que se nota mis durante o ataque, anda que tamn se pode usar para facer que a corda soe mis metlica.The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewO selector Corda emprgase para escoller a corda que editan os controles. Un instrumento de Vibed pode conter at nove cordas vibrando independentemente. O LED do recanto inferior dereito do editor da forma da onda indica se a corda escollida esst activada.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewZO editor de formas de onda permite controlar o estado inicial ou impulso usado para facer que a corda comece a vibrar. Os botns que hai dereita da grfica inicializan a forma de onda no tipo escollido. O botn ? carga unha forma de onda desde un ficheiro - s se cargan as primeiras 128 mostras. A forma de onda tamn se pode debuxar na grfica. O botn S suaviza a forma de onda. O botn N normaliza a forma de onda.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedViewOnda triangular Triangle wave vibedViewrEmpregar unha onda de dente de serra para este oscilador.&Use a saw-wave for current oscillator. vibedView`Empregar unha onda senoidal para este oscilador.'Use a sine-wave for current oscillator. vibedView^Empregar unha onda cadrada para este oscilador.)Use a square-wave for current oscillator. vibedViewdEmpregar unha onda triangular para este oscilador.+Use a triangle-wave for current oscillator. vibedViewxEmpregar unha forma de onda predefinida para este oscilador.3Use a user-defined waveform for current oscillator. vibedViewTEmpregar rudo branco para este oscilador.'Use white-noise for current oscillator. vibedView4Onda definida polo usuarioUser defined wave vibedViewVibed modela at nove cordas vibrando independentemente. O selector Corda permite escoller a corda que se desexe editar. O selector Imp escolle se o grfico representa un impulso ou o estado inicial da corda. O selector Oitava escolle o harmnico co que debera vibrar a corda. A grfica permite controlar o estado inicial ou o impulso usados para pr a corda en movemento. O botn V controla o volume. O botn S controla a tensin.da corda. O botn P controla a posicin da pa. O botn PU controla a posicin de observacin. Pan e Detune non deberan precisar explicacin. O botn Slap engdelle un pouco de distorsin tipo fuzz ao son da corda. O botn Lonxitude controla a lonxitude da corda. O LED do recanto inferior dereito do editor da forma da onda determina se a corda est activa no instrumento.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewVolume:Volume: vibedView(Onda de rudo brancoWhite noise wave vibedView$Prema para activarClick to enablevisualizationWidgetlPrema para des/activar a visualizacin da sada global6click to enable/disable visualization of master-outputvisualizationWidget Ataque da voz %1Voice %1 attack voiceObject8Desafinacin bruta da voz %1Voice %1 coarse detuning voiceObject&Decamento da voz %1Voice %1 decay voiceObject$Filtrado da voz %1Voice %1 filtered voiceObject0Largo do pulso da voz %1Voice %1 pulse width voiceObject*Relaxamento da voz %1Voice %1 release voiceObject8Modulacin de anel da voz %1Voice %1 ring modulate voiceObject,Sustentacin da voz %1Voice %1 sustain voiceObject0Sincronizacin da voz %1 Voice %1 sync voiceObjectProba da voz %1 Voice %1 test voiceObject.Fonda da onda da voz %1Voice %1 wave shape voiceObjectlmms-1.1.3/data/locale/gl.ts000066400000000000000000011365411247673406200156340ustar00rootroot00000000000000 AboutDialog About LMMS Sobre o LMMS Version %1 (%2/%3, Qt %4, %5) Versión %1 (%2/%3, Qt %4, %5) About Sobre LMMS - easy music production for everyone LMMS - produción musical fácil para calquera Authors Autores Translation Tradución Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! Este idioma non está traducido (ou é inglés nativo). Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións existentes, síntase á vontade axudándonos! Simplemente contacte co mantedor! License Licenza Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2009, os desenvolvedores do LMMS {2004-2013,?} {2004-2014,?} <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS LMMS AmplifierControlDialog VOL VOL Volume: Volume: PAN PAN Panning: Panorámica: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Volume Panning Panorámica Left gain Right gain AudioAlsa::setupWidget DEVICE DISPOSITIVO CHANNELS CANLES AudioFileProcessorView Open other sample Abrir outra mostra Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Prema aquí se desexa abrir outro ficheiro de son. Aparecerá un diálogo no que se pode escoller un ficheiro. As opcións tipo modo de bucle, puntos iniciais e final, valor da amplificación, etc. non se reinician. Polo tanto, pode non soar igual que a mostra orixinal. Reverse sample Inverter a mostra If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Ao activar este botón invértese a mostra completa. Isto é útil para efectos gaioleiros, como un crash invertido. Amplify: Amplificar: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Con este botón pódese indicar a relación de amplificación. Cando se indica un valor de 100%, a mostra fica como estaba. Se non, amplifícase para arriba ou para abaixo (o ficheiro mesmo coa mostra non se toca!) Startpoint: Punto inicial: Endpoint: Punto final: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted Reiniciouse o cliente de JACK LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS foi expulsado por JACK por algunha razón. En consecuencia, reiniciouse a infraestrutura de JACK do LMMS. Terá que realizar as conexións manualmente de novo. JACK server down O servidor de JACK non está a funcionar The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Semella que o servidor de JACK foi apagado e non foi posíbel iniciar unha instancia nova. En consecuencia, o LMMS non pode preseguir. Hai que gravar este proxecto e reiniciar o JACK e o LMMS. AudioJack::setupWidget CLIENT-NAME CLINTE-NOME CHANNELS CANLES AudioOss::setupWidget DEVICE DISPOSITIVO CHANNELS CANLES AudioPortAudio::setupWidget BACKEND INFRAESTRUTURA DEVICE DISPOSITIVO AudioPulseAudio::setupWidget DEVICE DISPOSITIVO CHANNELS CANLES AudioSdl::setupWidget DEVICE DISPOSITIVO AutomatableModel &Reset (%1%2) &Reiniciar (%1%2) &Copy value (%1%2) &Copiar o valor (%1%2) &Paste value (%1%2) A&pegar o valor (%1%2) Edit song-global automation Editar a automatización global da canción Connected to %1 Ligado a %1 Connected to controller Ligado ao controlador Edit connection... Editar a conexión... Remove connection Eliminar a conexión Connect to controller... Ligar a un controlador... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Reproducir/Deter o padrón actual (Espazo) Stop playing of current pattern (Space) Parar a execución do padrón actual (Espazo) Draw mode (Shift+D) Modo de debuxo (Maiúsculas+D) Erase mode (Shift+E) Modo de borrado (Maiúsculas+E) Cut selected values (Ctrl+X) Recortar os valores escollidos (Ctrl+X) Copy selected values (Ctrl+C) Copiar os valores escollidos (Ctrl+C) Paste values from clipboard (Ctrl+V) Apegar os valores do porta-retallos (Ctrl+V) Automation Editor - no pattern Editor de automatización - non hai ningún padrón Automation Editor - %1 Editor de automatización - %1 Please open an automation pattern with the context menu of a control! Abra un padrón de automatización co menú de contexto dun control! Values copied Valores copiados All selected values were copied to the clipboard. Copiáronse todos os valores escollidos no porta-retallos. Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Prema aquí se desexa reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final. Click here if you want to stop playing of the current pattern. Prema aquí se desexa parar a reprodución deste padrón. Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo. Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. Click here and the values from the clipboard will be pasted at the first visible measure. Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Arrastre un control mentres ten <Ctrl> premido Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor faga duplo clic para abrir este padrón no editor de automatización Open in Automation editor Abrir o editor de automatización Clear Limpar Reset name Restaurar o nome Change name Mudar o nome %1 Connections %1 conexións Disconnect "%1" Desconectar «%1» Set/clear record Indicar/Limpar a gravación AutomationTrack Automation track Pista de automatización BassBoosterControlDialog FREQ FREQ Frequency: Frecuencia: GAIN GAIN Gain: Ganancia: RATIO TAXA Ratio: Taxa: BassBoosterControls Frequency Frecuencia Gain Ganancia Ratio Taxa CarlaInstrumentView Show GUI Mostrar a interface gráfica Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Controlador %1 ControllerConnectionDialog Connection Settings Configuración da conexión MIDI CONTROLLER CONTROLADOR DE MIDI Input channel Canle de entrada CHANNEL CANLE Input controller Controlador de entrada CONTROLLER CONTROLADOR Auto Detect Detectar automaticamente MIDI-devices to receive MIDI-events from Dispositivos MIDI dos que recibir acontecementos USER CONTROLLER CONTROLADOR DO USUARIO MAPPING FUNCTION FUNCIÓN DE ASIGNACIÓN OK Aceptar Cancel Cancelar LMMS LMMS Cycle Detected. Detectouse un ciclo. ControllerRackView Controller Rack Bastidor de controladores Add Engadir Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Controles Controllers are able to automate the value of a knob, slider, and other controls. Os controladores poden automatizar o valor dun botón xiratorio ou linear e outros controles. Rename controller Renomear o controlador Enter the new name for this controller Introduza o novo nome deste controlador &Remove this plugin Elimina&r este engadido &Help &Axuda DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass Pasa-baixas HiPass Pasa-altas BandPass csg Pasa-faixa csg BandPass czpg Pasa-faixa czpg Notch Entalle Allpass Pasa-todo Moog Moog 2x LowPass 2x Pasa-baixas RC LowPass 12dB RC pasa-baixa 12dB RC BandPass 12dB RC pasa-faixa 12dB RC HighPass 12dB RC pasa-alta 12dB RC LowPass 24dB RC pasa-baixa 24dB RC BandPass 24dB RC pasa-faixa 24dB RC HighPass 24dB RC pasa-alta 24dB Vocal Formant Filter Filtro de formante vocal Effect Effect enabled Efecto activado Wet/Dry mix Mestura húmida/seca Gate Porta Decay Decaemento EffectChain Effects enabled Efectos activados EffectRackView EFFECTS CHAIN CADEA DE EFECTOS Add effect Engadir un efecto EffectSelectDialog Add effect Engadir un efecto Plugin description Descrición do engadido EffectView Toggles the effect on or off. Conmuta a activación do efecto. On/Off Activar/Desactivar W/D H/S Wet Level: Nivel de humidade: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. O botón Húmido/Seco indica a relación entre o sinal de entrada e o sinal de efecto que forma a saída. DECAY DECAE Time: Tempo: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. O botón Decaemento controla cantos búferes de silencio han de pasar antes de que o engadido pare de procesar. Valores máis pequenos reducen o esforzo da CPU a risco de recortar a cola nos efectos de demora e reverberación. GATE PORTA Gate: Porta: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. O botón Porta controla o nivel do sinal que se considere como «silencio» mentres se decide cando parar de procesar os sinais. Controls Controles Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Os engadidos de efectos funcionan como unha serie encadeada de efectos na que o sinal se procesa desde arriba para abaixo. O interruptor Activar/Desactivar permite omitir un engadido dado en calquera momento. O botón Húmido/Seco controla o balance entre o sinal de entrada eo sinal producido que é a saída resultante do efecto. A entrada da etapa é a saída da etapa anterior. Polo tanto, o sinal «seco» dos efectos de abaixo na cadea contén todos os efectos previos. O botón Decaemento controla como se continúa a procesar o sinal despois de relaxar as notas. O efecto para o procesamento dos sinais cando o volume baixa por debaixo dun limiar dado durante un tempo dado. Este botón indica o «tempo dado». Tempos maiores requiren máis CPU, polo que este número debería ser baixo para a maioría dos efectos. Haino que subir para os efectos que producen períodos de silencio longos, como por exemplo as demoras. O botón Porta controla o «limiar dado» do apagado automático do efecto. O reloxo do «tempo dado» comeza así que o nivel do sinal procesado cae por debaixo do nivel indicado con este botón. O botón Controles abre un diálogo para editar os parámetros do efecto. Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar a orden na que se procesan os efectos ou eliminar un efecto de vez. Move &up S&ubir Move &down &Baixar &Remove this plugin Elimina&r este engadido &Help &Axuda EnvelopeAndLfoParameters Predelay Tempo de reverberación Attack Ataque Hold Retención Decay Decaemento Sustain Sustentación Release Relaxamento Modulation Modulación LFO Predelay Tempo de reverberación do LFO LFO Attack Ataque do LFO LFO speed Velocidade do LFO LFO Modulation Modulación do LFO LFO Wave Shape Forma da onda do LFO Freq x 100 Freq x 100 Modulate Env-Amount Modular a cantidade de env EnvelopeAndLfoView DEL TMP REV Predelay: Tempo de reverberación: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Empregue este botón para indicar o tempo de reverberación desta envolvente. Canto maior for este valor maior será o intervalo até que comece a envolvente en si. ATT ATAQ Attack: Ataque: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Empregue este botón para indicar o tempo de ataque da envolvente escollida. Canto maior for o valor máis tempo lle levará á envolvente aumentar até o nivel de ataque. Escolla un valor pequeno para instrumentos como os pianos e un valor grande para as cordas. HOLD RETEN Hold: Retención: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Empregue este botón para indicar o tempo de retención da envolvente escollida. Canto maior for este valor máis tempo mantén a envolvente o nivel de ataque antes de comezar a diminuír até o nivel de sustentación. DEC DEC Decay: Decaemento: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Empregue este botón para indicar o tempo de decaemento da envolvente escollida. Canto maior for este valor máis tempo lle levará á envolvente para diminuír desde o nivel de ataque até o nivel de sustentación. Escolla un valor pequenos para instrumentos como o piano. SUST SUST Sustain: Sustentación: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Empregue este botón para indicar o nivel de sustentación da envolvente escollida. Canto maior for este valor máis alto é o nivel no que fica a envolvente antes de baixar até cero. REL Release: Relaxamento: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Empregue este botón para indicar o tempo de relaxamento da envolvente escollida. Canto maior for este valor máis tempo lle leva diminuír desde o nivel de sustentación até cero. Escolla un valor grande para instrumentos como as cordas. AMT CANTIDADE Modulation amount: Cantidade de modulación: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Empregue este botón para indicar a cantidade de modulación da envolvente escollida. Canto maior for este valor maior máis se verá influenciado o tamaño correspondente (p.ex. o volume ou a frecuencia de corte) por esta envolvente. LFO predelay: Tempo de reverberación do LFO: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Empregue este botón para indicar o tempo de reverberación deste LFO. Canto maior for este valor, maior será o intervalo até que o LFO comece a oscilar. LFO- attack: Ataque do LFO: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Empregue este botón para indicar o tempo de ataque do LFO escollido. Canto maior for este valor máis tempo lle levará ao LFO para aumentar a súa amplitude até o máximo. SPD SPD LFO speed: Velocidade do LFO: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Empregue este botón para indicar a velocidade do LFO escollido. Canto maior for este valor máis rápido oscila o LFO e máis rápido é o efecto. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Empregue este botón para indicar a cantidade de modulación do LFO escollido. Canto maior for este valor máis se verá influenciado o tamaño escollido (p.ex. o volume ou a frecuencia de corte) por este LFO. Click here for a sine-wave. Prema aquí para unha onda senoidal. Click here for a triangle-wave. Prema aquí para unha onda triangular. Click here for a saw-wave for current. Prema aquí para unha onda de dente de serra. Click here for a square-wave. Prema aquí para unha onda cadrada. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Prema aquí para unha onda definida polo usuario. Posteriormente, arrastre un ficheiro de mostra correspondente sobre o gráfico de LFO. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. Prema aquí se desexa multiplicar por 100 a frecuencia deste LFO. multiply LFO-frequency by 100 multiplicar a frecuencia de LFO por 100 MODULATE ENV-AMOUNT MODULAR CANT. ENVO Click here to make the envelope-amount controlled by this LFO. Prema aquí para facer que a cantidade de envolvente sexa controlada por este LFO. control envelope-amount by this LFO controlar a cantidade de envolvente con este LFO ms/LFO: Hint Suxestión Drag a sample from somewhere and drop it in this window. Arrastre un exemplo doutro sitio e sólteo sobre esta xanela. Click here for random wave. ExportProjectDialog Export project Exportar o proxecto Output Saída File format: Formato de ficheiro: Samplerate: Taxa de mostraxe: 44100 Hz 44100 Hz 48000 Hz 48000 Hz 88200 Hz 88200 Hz 96000 Hz 96000 Hz 192000 Hz 192000 Hz Bitrate: Taxa de bits: 64 KBit/s 64 KBit/s 128 KBit/s 128 KBit/s 160 KBit/s 160 KBit/s 192 KBit/s 192 KBit/s 256 KBit/s 256 KBit/s 320 KBit/s 320 KBit/s Depth: Profundidade: 16 Bit Integer Enteiro de 16 bits 32 Bit Float Vírgula flutuante de 32 bits Please note that not all of the parameters above apply for all file formats. Teña en conta que non todos os parámetros de enriba se poden aplicar a todos os formatos de ficheiro. Quality settings Configuración da calidade Interpolation: Interpolación: Zero Order Hold Retención de orde cero Sinc Fastest Whittaker–Shannon máis rápida Sinc Medium (recommended) Whittaker–Shannon media (recomendada) Sinc Best (very slow!) Whittaker–Shannon mellor (moi lenta!) Oversampling (use with care!): Sobresampleado (usar con coidado!): 1x (None) 1x (Ningún) 2x 2x 4x 4x 8x 8x Start Comezar Cancel Cancelar Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &Axuda FxMixer Master Global FX %1 Efecto %1 FxMixerView Rename FX channel Mudar o nome desta canle de efectos especiais Enter the new name for this FX channel Introduza o novo nome para esta canle de efectos especiais FX-Mixer Mesturador de efectos especiais FxMixerView::FxChannelView FX Fader %1 Fader de efectos %1 Mute Silenciar Mute this FX channel Silenciar esta canle de efectos especiais FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpexo Arpeggio type Tipo de arpexo Arpeggio range Intervalo do arpexo Arpeggio time Tempo do arpexo Arpeggio gate Porta do arpexo Arpeggio direction Dirección do arpexo Arpeggio mode Modo do arpexo Up Arriba Down Abaixo Up and down Arriba e abaixo Random Aleatorio Free Libre Sort Ordenar Sync Sincronizar Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPEXO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Un arpexo é unha técnica de tocar instrumentos (especialmente de corda), que fai que a música sexa máis viva. As cordas deses instrumentos (harpas, por exemplo), púlsanse como acordes. A única diferenza é que se fai de maneira secuencial, polo que as notas non se tocan todas ao mesmo tempo. Os arpexos típicos son tríadas maiores ou menores, aínda que existen moitos outros acordes posíbeis que se poden escoller. RANGE INTERVALO Arpeggio range: Tesitura do arpexo: octave(s) oitava(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Empregue este botón para indicar a tesitura do arpexo en oitavas. O arpexo escollido reproducirase dentro do número de oitavas indicado. TIME Tempo Arpeggio time: Tempo do arpexo: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. GATE PORTA Arpeggio gate: Porta do arpexo: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: Dirección: Mode: Modo: InstrumentFunctionNoteStacking octave oitava Major Maior Majb5 Majb5 minor menor minb5 minb5 sus2 sus2 sus4 sus4 aug aum augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 6add9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9b5 9b5 9#11 9b13 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 m9 madd9 m9b5 m9-Maj7 11 11b9 11b9 Maj11 m11 m11 m-Maj11 13 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 m13 m13 m-Maj13 Harmonic minor Harmónico menor Melodic minor Melódico menor Whole tone Un ton Diminished Diminuído Major pentatonic Pentatónico maior Minor pentatonic Pentatónico menor Jap in sen Major bebop Maior de bebop Dominant bebop Dominante de bebop Blues Blues Arabic Árabe Enigmatic Enigmático Neopolitan Napolitano Neopolitan minor Napolitano menor Hungarian minor Húngaro menor Dorian Dorio Phrygolydian Frixio-lidio Lydian Lidio Mixolydian Mixolidio Aeolian Eolio Locrian Locrio Chords Acordes Chord type Tipo de acorde Chord range Intervalo do acorde Minor Chromatic Half-Whole Diminished 5 5 InstrumentFunctionNoteStackingView RANGE INTERVALO Chord range: Intervalo do acorde: octave(s) oitava(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Empregue este botón para indicar a tesitura do acorde en oitavas. O acorde escollido tocarase dentro do número indicado de oitavas. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT ACTIVAR A ENTRADA DE MIDI CHANNEL CANLE VELOCITY VELOCIDADE ENABLE MIDI OUTPUT ACTIVAR A SAÍDA DE MIDI PROGRAM PROGRAMA MIDI devices to receive MIDI events from Dispositivos MIDI dos que recibir acontecementos MIDI MIDI devices to send MIDI events to Dispositivos MIDI aos que enviar acontecementos MIDI NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME VOLUME Volume Volume CUTOFF FREC. CORTE Cutoff frequency Frecuencia de corte RESO RESO Resonance Resonancia Envelopes/LFOs Envolventes/LFO Filter type Tipo de filtro Q/Resonance Q/Resonancia LowPass Pasa-baixas HiPass Pasa-altas BandPass csg Pasa-faixa csg BandPass czpg Pasa-faixa czpg Notch Entalle Allpass Pasa-todo Moog Moog 2x LowPass 2x Pasa-baixas RC LowPass 12dB RC pasa-baixa 12dB RC BandPass 12dB RC pasa-faixa 12dB RC HighPass 12dB RC pasa-alta 12dB RC LowPass 24dB RC pasa-baixa 24dB RC BandPass 24dB RC pasa-faixa 24dB RC HighPass 24dB RC pasa-alta 24dB Vocal Formant Filter Filtro de formante vocal InstrumentSoundShapingView TARGET DESTINO These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Estas lapelas conteñen envolventes. Son moi importantes para modificar un son dado que son case sempre necesarias para as sínteses subtractivas. Por exemplo, se se ten unha envolvente de volume pódese indicar cando se desexa que o son teña un volume determinado. Se se desexan crear cordas brandas o son ten que entrar e saír moi suavemente. Isto pódese facer indicando tempos de ataque e relaxamento longos. É o mesmo para outros destinos de envolvente, como panning, frecuencia de corte do filtro empregado e así por diante. Fedelle! Seguro que pode crear sons interesantes a partir dunha onde de dente de serra con unhas imples envolventes...! FILTER FILTRO Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Aquí pódese escoller o filtro incorporado que se desexe empregar para esta pista de instrumento. Os filtros son moi importantes para cambiar as características dun son. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Empregue este botón para indicar a frecuencia de corte do filtro escollido. A frecuencia de corte indica a frecuencia á que un filtro corta o sinal. Por exemplo, un filtro pasa-baixas corta todas as frecuencias que ultrapasen a frecuencia de corte. Un filtro pasa-altas corta todas as frecuencias por debaixo da frecuencia de corte, e así por diante... RESO RESO Resonance: Resonancia: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Empregue este botón para indicar a Q/Resonancia do filtro escollido. A Q/Resonancia indícalle ao filtro canto se desexa amplificar as frecuencias próximas á de corte. FREQ FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track pista_sen_nome Volume Volume Panning Panorámica Pitch Altura FX channel Canle de efectos especiais Default preset Predefinido With this knob you can set the volume of the opened channel. Con este botón pódese indicar o volume da canle aberta. Base note Nota base Pitch range InstrumentTrackView Volume Volume Volume: Volume: VOL VOL Panning Panorámica Panning: Panorámica: PAN PAN MIDI MIDI Input Entrada Output Saída InstrumentTrackWindow GENERAL SETTINGS CONFIGURACIÓN XERAL Instrument volume Volume do instrumento Volume: Volume: VOL VOL Panning Panorámica Panning: Panorámica: PAN PAN Pitch Altura Pitch: Altura: cents cents PITCH ALTURA FX channel Canlde de FX ENV/LFO ENV/LFO FUNC FUNC FX FX MIDI MIDI Save preset Gardar as predefinicións XML preset file (*.xpf) Ficheiro de predefinicións en XML (*.xpf) PLUGIN ENGADIDO Pitch range (semitones) RANGE INTERVALO Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Ligar canles LadspaControlDialog Link Channels Ligar canles Channel Canle LadspaControlView Link channels Ligar canles Value: Valor: Sorry, no help available. Desculpe, non hai axuda dispoñíbel. LadspaEffect Effect Efecto Unknown LADSPA plugin %1 requested. Solicitouse un engadido de LADSPA, %1, que é descoñecido. LcdSpinBox Please enter a new value between %1 and %2: Introduza un valor novo entre %1 e %2: LfoController LFO Controller Controlador de LFO Base value Valor base Oscillator speed Velocidade do oscilador Oscillator amount Cantidade de oscilador Oscillator phase Fase do oscilador Oscillator waveform Forma de onda do oscilador Frequency Multiplier Multiplicador de frecuencia LfoControllerDialog LFO LFO LFO Controller Controlador de LFO BASE BASE Base amount: Cantidade base: todo por facer SPD SPD LFO-speed: Velocidade de SPD: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Empregue este botón para indicar a velocidade do oscilador de frecuencia baixa (LFO). Canto maior sexa este valor, máis rápido oscila o LFO e máis rápido resulta o efecto. AMT Modulation amount: Cantidade de modulación: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Empregue este botón para indicar a cantidade de modulación do LFO. Canto maior for este valor, máis se verá influenciado o control conectado (p.ex. volume ou frecuencia de corte) polo LFO. PHS FASE Phase offset: Desprazamento da fase: degrees graos With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Con este botón pódese indicar o desprazamento da fase do oscilador de frecuencia baixa (LFO). Iso significa que se pode mover o punto dunha oscilación no que o oscilador comeza a oscilar. Se, por exemplo, se ten unha onda senoidal e un desprazamento de fase de 180 graos, a onda baixo primeiro. Cunha onda cadrada é o mesmo. Click here for a sine-wave. Prema aquí para unha onda senoidal. Click here for a triangle-wave. Prema aquí para unha onda triangular. Click here for a saw-wave. Prema aquí para unha onda de dente de serra. Click here for a square-wave. Prema aquí para unha onda cadrada. Click here for a a moog saw-wave. Prema aquí para unha onda de dente de serra tipo Moog. Click here for an exponential wave. Prema aquí para unha onda exponencial. Click here for white-noise. Prema aquí para ruído branco. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory Directorio de traballo The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. O directorio de traballo do LMMS %1 non existe. Desexa crealo agora? Pode cambiar o directorio máis tarde indo a Editar -> Configuración. Could not save config-file Non foi posíbel gravar o ficheiro de configuración Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Non foi posíbel gravar o ficheiro de configuración %1. Probabelmente non se lle permita escribir neste ficheiro. Asegúrese de dispor de acceso para escribir neste ficheiro e ténteo de novo. &Project &Proxecto &New &Novo &Open... &Abrir... Recently opened projects Proxectos abertos recentemente &Save &Gardar Save &As... Gr&avar como... Import... Importar... E&xport... E&xportar... &Quit &Saír &Edit &Editar Settings Configuración &Tools Ferramen&tas &Help &Axuda Online help Axuda na Internet Help Axuda What's this? Que é isto? About Sobre Create new project Crear un proxecto novo Create new project from template Crear un proxecto novo a partir dun modelo Open existing project Abrir un projecto existente Recently opened project Proxecto aberto recentemente Save current project Gravar este proxecto Export current project Exportar este proxecto Show/hide Song-Editor Mostrar/Agochar o editor de cancións By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Premendo este botón pódese mostrar ou agochar o Editor de Cancións. Coa axuda do Editor de Cancións pódese editar listas de reprodución e indicar cando tocar unha pista. Tamén se poden inserir e mover mostras (p.ex. mostras de rap) directamente na lista de reprodución. Show/hide Beat+Bassline Editor Mostrar/Agochar o Editor de ritmos e liña do baixo By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Premendo este botón pódese mostrar ou agochar o Editor de ritmos e liña do baixo. Este Editor de ritmos e liña do baixo é necesario para crear ritmos e para abrir, engadir e eliminar canles, así como para recortar, copiar e pegar ritmos e padróns de liñas do baixo e para outras cousas semellantes. Show/hide Piano-Roll Mostrar/Agochar a pianola Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Prema aquí para mostrar ou agochar a pianola. Coa axuda da pianola pódense editar melodías facilmente. Show/hide Automation Editor Mostrar/Agochar o Editor de automatización Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Prema aquí para mostrar ou agochar o Editor de automatización. Coa axuda do Editor de automatización pódense editar os valores dinámicos facilmente. Show/hide FX Mixer Mostrar/Agochar os Mesturador de efectos especiais Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Prema aquí para mostrar ou agochar o Mesturador de efectos especiais. O Mesturador de efectos especiais é unha ferramenta potente para xestionar os efectos das cancións. Pódense inserir efectos nas diferentes canles de efectos. Show/hide project notes Mostrar/Agochar as notas do proxecto Click here to show or hide the project notes window. In this window you can put down your project notes. Prema aquí para mostrar ou agochar a xanela coas notas do proxecto. Nela pódense apuntar as notas do proxecto. Show/hide controller rack Mostrar/Agochar o bastidor de controladores Untitled Sen título LMMS %1 LMMS %1 Project not saved Proxecto non gardado The current project was modified since last saving. Do you want to save it now? Este proxecto foi modificado desde que se gardou a última vez. Desexa gardalo agora? Open project Abrir un proxecto Save project Gardar o proxecto Help not available Non hai axuda dispoñíbel Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. De momento non hai axuda dispoñíbel no LMMS. Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. My projects My samples My presets My home My computer Root directory E&xport tracks... Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Save as new &version LMMS (*.mmp *.mmpz) Version %1 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Numerador do compás Meter Denominator Denominador do compás TIME SIG COMPÁS MeterModel Numerator Numerador Denominator Denominador MidiAlsaRaw::setupWidget DEVICE DISPOSITIVO MidiAlsaSeq::setupWidget DEVICE DISPOSITIVO MidiController MIDI Controller Controlador de MIDI unnamed_midi_controller controlador_de_midi_sen_nome MidiImport Setup incomplete A configuración está incompleta You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Non se indicou unha fonte de son por omisión no diálogo de configuración (Editar->Configuración). En consecuencia, non se ha de reproducir ningún son unha vez importado este ficheiro de MIDI. Debería descargar unha fonte de son de General MIDI, indicala no diálogo de configuración e tentar de novo. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. O LMMS non foi compilado para que admitise un reprodutor de SoundFont2, que se utiliza para engadir un son por omisión aos ficheiros de MIDI. En consecuencia, non se ha de reproducir ningún son unha vez importado este ficheiro de MIDI. MidiOss::setupWidget DEVICE DISPOSITIVO MidiPort Input channel Canle de entrada Output channel Canle de saída Input controller Controlador de entrada Output controller Controlador de saída Fixed input velocity Velocidade de entrada fixa Fixed output velocity Velocidade de saída fixa Output MIDI program Programa MIDI de saída Receive MIDI-events Recibir acontecementos de MIDI Send MIDI-events Enviar acontecementos de MIDI Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Volume global Vibrato Vibrato OscillatorObject Osc %1 volume Volume do oscilador %1 Osc %1 panning Panorámica do oscilador %1 Osc %1 coarse detuning Desafinación bruta do oscilador %1 Osc %1 fine detuning left Desafinación fina esquerda do oscilador %1 Osc %1 fine detuning right Desafinación fina dereita do oscilador %1 Osc %1 phase-offset Desprazamento da fase do oscilador %1 Osc %1 stereo phase-detuning Desafinación de fase en estéreo do oscilador %1 Osc %1 wave shape Forma da onda do oscilador %1 Modulation type %1 Tipo de modulación %1 Osc %1 waveform Forma de onda do oscilador %1 Osc %1 harmonic PatmanView Open other patch Abrir outro parche Click here to open another patch-file. Loop and Tune settings are not reset. Prema aquí para abrir outro ficheiro de parche. A configuración dos bucles e a afinación non se restauran. Loop Bucle Loop mode Modo de bucle Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Aquí pódese alternar entre modos de bucle. Cando está activado, o PatMan emprega a información sobre o bucle dispoñíbel no ficheiro. Tune Afinación Tune mode Modo de afinación Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Aquí pódese alternar entre modos de afinación. Cando está activado o Patman afina a mostra para que coincida coa frecuencia da nota. No file selected Non escolleu ningún ficheiro Open patch file Abrir un ficheiro de parches Patch-Files (*.pat) Ficheiros de parches (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step faga duplo clic para abrir este padrón na pianola empregue a roda do rato para modificar o volume un paso Open in piano-roll Abrir na pianola Clear all notes Limpar todas as notas Reset name Restaurar o nome Change name Mudar o nome Add steps Engadir pasos Remove steps Eliminar pasos PeakController Peak Controller Controlador de picos Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK PICO LFO Controller Controlador do LFO PeakControllerEffectControlDialog BASE BASE Base amount: Cantidade base: Modulation amount: Cantidade de modulación: Attack: Ataque: Release: Relaxamento: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Valor base Modulation amount Cantidade de modulación Attack Ataque Release Relaxamento Mute output Silenciar a saída Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) Reproducir/Deter o padrón actual (Espazo) Stop playing of current pattern (Space) Parar a execución do padrón actual (Espazo) Cut selected notes (Ctrl+X) Recortar as notas escollidas (Ctrl+X) Copy selected notes (Ctrl+C) Copiar as notas escollidas (Ctrl+C) Paste notes from clipboard (Ctrl+V) Apegar as notas do porta-retallos (Ctrl+V) Piano-Roll - no pattern Pianola - non hai ningún padrón Piano-Roll - %1 Pianola - %1 Please open a pattern by double-clicking on it! Abra un padrón facendo duplo clic nel! Record notes from MIDI-device/channel-piano Gravar notas dun dispositivo MIDI/piano de canle Record notes from MIDI-device/channel-piano while playing song or BB track Gravar notas dun dispositivo MIDI/piano de canle mentres se reproduce a canción ou pista de ritmos/liña do baixo Draw mode (Shift+D) Modo de debuxo (Maiúsculas+D) Erase mode (Shift+E) Modo de borrado (Maiúsculas+E) Select mode (Shift+S) Modo de selección (Maiúscula+S) Last note Última nota Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Prema aquí para reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e despois pódense editar. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e escóitase a canción ou pista de ritmos/liña do baixo no fondo. Click here to stop playback of current pattern. Prema aquí para parar a reprodución deste padrón. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. Click here and the notes from the clipboard will be pasted at the first visible measure. Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel. Note lock Bloqueo de notas Note Volume Volume das notas Note Panning Panormámica das notas Detune mode (Shift+T) Modo de desafinación (Maiúsculas+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Neste modo, manteña Ctrl para ir temporalmente ao modo de selección. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Como alternativa pode premer Ctrl no modo de debuxo para empregar temporalmente o modo de selección. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Prema aquí e actívase o modo de desafinación.Neste modo pódese premer unhanota para abrir a súa desafinación de automatización. Pódese empregar isto para escorregar entre as notas. Tamén se pode premer «Maiúsculas+T» no teclado para activar este mdo. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Introduza un valor novo entre %1 e %2: PianoView Base note Nota base Plugin Plugin not found Non se atopou o engadido The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Non se atopou o engadido «%1» ou non foi posíbel cargalo! Razón: «%2» Error while loading plugin Produciuse un erro ao cargar o engadido Failed to load plugin "%1"! Fallou a carga do engadido «%1»! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Ficheiro wav (*.wav) Compressed OGG-File (*.ogg) Ficheiro OGG comprimido (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Nome: Maker: Creador: Copyright: Copyright: Requires Real Time: Require tempo real: Yes Si No Non Real Time Capable: Capacidade de tempo real: In Place Broken: En sitio rachado: Channels In: Canles de entrada: Channels Out: Canles de saída: File: Ficheiro: File: %1 SampleBuffer Open audio file Abrir un ficheiro de son Wave-Files (*.wav) Ficheiros wave (*.wav) OGG-Files (*.ogg) Ficheiros OGG (*.ogg) DrumSynth-Files (*.ds) Ficheiros do DrumSynth (*.ds) FLAC-Files (*.flac) Ficheiros FLAC (*.flac) SPEEX-Files (*.spx) Ficheiros SPEEX (*.spx) VOC-Files (*.voc) Ficheiros VOC (*.voc) AIFF-Files (*.aif *.aiff) Ficheiros AIFF (*.aif *.aiff) AU-Files (*.au) Ficheiros AU (*.au) RAW-Files (*.raw) Ficheiros RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample faga duplo clic para escoller unha mostra Delete (middle mousebutton) Eliminar (botón do medio do rato) Cut Recortar Copy Copiar Paste Apegar Mute/unmute (<Ctrl> + middle click) Silenciar/Darlle volume (<Ctrl> + botón central do rato) Set/clear record Indicar/Limpar a gravación SampleTrack Sample track Pista de mostras Volume Volume SampleTrackView Track volume Volume da pista Channel volume: Volume da canle: VOL VOL SongEditor Song-Editor Editor de cancións Play song (Space) Reproducir unha canción (Espazo) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Prema aquí se desexa reproducir a canción enteira. A reprodución comeza no marcador de posición da canción (verde). Tamén se pode mover durante a reprodución. Stop song (Space) Parar a canción (Espazo) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Prema aquí se desexa parar a reprodución da canción. O marcador de posición da canción irá para o principio da canción. Add beat/bassline Engadir un ritmo/liña do baixo Add sample-track Engadir unha pista de mostra Could not open file Non foi posíbel abrir o ficheiro Could not write file Non foi posíbel escribir no ficheiro Add automation-track Engaidr unha pista de automatización Draw mode Modo de debuxo Edit mode (select and move) Modo de edición (escoller e mover) Record samples from Audio-device Gravar mostras dun dispositivo de son Record samples from Audio-device while playing song or BB track Gravar mostras dun dispositivo de son mentres se reproduce a canción ou pista de ritmos/liña do baixo Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Non foi posíbel abrir o ficheiro %1. Probabelmente vostede non teña permiso para ler este ficheiro. Asegúrese de ter cando menos permiso para ler o ficheiro e ténteo de novo. Error in file Hai un erro no ficheiro The file %1 seems to contain errors and therefore can't be loaded. Parece que o ficheiro %1 contén erros e por iso non se pode cargar. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song tempo da canción The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). O tempo dunha canción indícase en pulsos por minuto (BPM). Para cambiar o tempo da canción hai que cambiar este valor. Cada compás ten catro pulsos, polo que o tempo en BPM indica cantos compases / 4 hai que tocar nun minuto (ou cantos compases habería que tocar en catro minutos). High quality mode Modo de alta calidade Master volume Volume global master volume volume global Master pitch Altura global master pitch altura global Value: %1% Valor: %1% Value: %1 semitones Valor: %1 semitóns Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Espectro linear Linear Y axis Eixo linear Y SpectrumAnalyzerControls Linear spectrum Espectro linear Linear Y axis Eixo linear Y Channel mode Modo da canle TempoSyncKnob Tempo Sync Sincronización do tempo No Sync Non sincronizar Eight beats Oito tempos Whole note Redonda Half note Branca Quarter note Negra 8th note Corchea 16th note Semicorchea 32nd note Fusa Custom... Personalizada... &Help &Axuda Custom Personalizada Synced to Eight Beats Sincronizado a oito tempos Synced to Whole Note Sincronizado á redonda Synced to Half Note Sincronizado á branca Synced to Quarter Note Sincronizado á negra Synced to 8th Note Sincronizado á corchea Synced to 16th Note Sincronizado á semicorchea Synced to 32nd Note Sincronizado á fusa TimeDisplayWidget click to change time units TrackContainer Couldn't import file Non foi posíbel importar o ficheiro Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Non foi posíbel atopar un filtro para importar o ficheiro %1. Debería converter este ficheiro a un formato que o LMMS recoñeza usando outro software. Couldn't open file Non foi posíbel abrir o ficheiro Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Non foi posíbel abrir o ficheiro %1 para lelo. Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o contén e tente de novo! Loading project... A cargar o proxecto... Cancel Cancelar Please wait... Agarde un anaco... Importing MIDI-file... A importar un ficheiro MIDI... Importing FLP-file... A importar un ficheiro FLP... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Empregar a modulación de fase para modular o oscilador 2 co oscilador 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Empregar a modulación de amplitude para modular o oscilador 2 co oscilador 1 Mix output of oscillator 1 & 2 Misturar a saída dos osciladores 1 e 2 Synchronize oscillator 1 with oscillator 2 Sincronizar o oscilador 1 co oscilador 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Empregar a modulación de frecuencia para modular o oscilador 2 co oscilador 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Empregar a modulación de fase para modular o oscilador 3 co oscilador 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Empregar a modulación de amplitude para modular o oscilador 3 co oscilador 2 Mix output of oscillator 2 & 3 Misturar a saída dos osciladores 2 e 3 Synchronize oscillator 2 with oscillator 3 Sincronizar o oscilador 2 co oscilador 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Empregar a modulación de frecuencia para modular o oscilador 3 co oscilador 2 Osc %1 volume: Volume do oscilador %1: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Con este botón pódese indicar o volume do oscilador %1. Ao indicar un valor de 0 o oscilador apágase. Caso contrario pódese ouvir o oscilador tan alto como se indique aquí. Osc %1 panning: Panorámica do oscilador %1 With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Con este botón pódese indicar o panorama («panning») do oscilador %1. Un valor de -100 significa 100% esquerda e un valor de 100 move a saída do oscilador para a dereita. Osc %1 coarse detuning: Desafinación bruta do oscilador %1: semitones semitóns With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Con este botón pódese definir a desafinación bruta do oscilador %1. Pódese desafinar o oscilador 12 semitóns (unha oitava) para arriba e para abaixo. Isto é útil para crear sons cun acorde. Osc %1 fine detuning left: Desafinación fina esquerda do oscilador %1: cents cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Con este botón pódese indicar a desafinación fina do oscilador %1 pola canle esquerda. A desafinación fina ten como intervalo -100 cents e +100 cents. Isto é útil para crear sons «gordos». Osc %1 fine detuning right: Desafinación fina dereita do oscilador %1: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Con este botón pódese indicar a desafinación fina do oscilador %1 pola canle dereita. A desafinación fina ten como intervalo -100 cents e +100 cents. Isto é útil para crear sons «gordos». Osc %1 phase-offset: Desprazamento da fase do oscilador %1: degrees graos With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Con este botón pódese indicar o desprazamento de fase do oscilador %1. Iso significa que se pode mover o punto dunha oscilación no que o oscilador comeza a oscilar. Por exemplo, se se ten unha onda senoidal e un desprazamento de fase de 180 graos, a onda vai primeiro para abaixo. O mesmo acontece cunha onda cadrada. Osc %1 stereo phase-detuning: Desafinación de fase en estéreo do oscilador %1: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Conte este botón pódese indicar a desafinación de fase en estéreo do oscilador %1. A desafinación de fase en estéreo indica o tamaño da diferenza entre o desprazamento de fase das canles esquerda e dereita. Isto é moi bon para crear sons con estéreo amplo. Use a sine-wave for current oscillator. Empregar unha onda senoidal para este oscilador. Use a triangle-wave for current oscillator. Empregar unha onda triangular para este oscilador. Use a saw-wave for current oscillator. Empregar unha onda de dente de serra para este oscilador. Use a square-wave for current oscillator. Empregar unha onda cadrada para este oscilador. Use a moog-like saw-wave for current oscillator. Empregar unha onda de dente de serra tipo Moog para este oscilador. Use an exponential wave for current oscillator. Empregar unha onda exponencial para este oscilador. Use white-noise for current oscillator. Empregar ruído branco para este oscilador. Use a user-defined waveform for current oscillator. Empregar unha forma de onda predefinida para este oscilador. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Abrir outro engadido de VST Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Prema aquí se desexa abrir outro engadido de VST. Ao premer este botón aparece un diálogo para abrir ficheiros no que se pode escoller o ficheiro. Show/hide GUI Mostrar/Agochar a interface gráfica Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Prema aquí para mostrar ou agochar a interface gráfica de usuario do engadido de VST. Turn off all notes Apagar todas as notas Open VST-plugin Abrir o engadido de VST DLL-files (*.dll) Ficheiros DLL (.*dll) EXE-files (*.exe) Ficheiros EXE (*.exe) No VST-plugin loaded Non se cargou ningún engadido de VST Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Gardar as predefinicións Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset Predefinición by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Gardar as predefinicións Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin A cargar un engadido Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Debuxe aquí a súa propia forma de onda arrastrando o rato polo gráfico. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normalizar Click to normalize Invert Click to invert Smooth Suave Click to smooth Sine wave Onda senoidal Click for sine wave Triangle wave Onda triangular Click for triangle wave Click for saw wave Square wave Onda cadrada Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Mostrar a interface gráfica Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Prema aquí para mostrar ou agochar a interface gráfica deusuario de ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ FREQ Filter Resonance: RES RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify Amplificar Start of sample Inicio da mostra End of sample Final da mostra Reverse sample Inverter a mostra Stutter Loopback point Loop mode Modo de bucle Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Editor de ritmos e liña do baixo Play/pause current beat/bassline (Space) Reproducir/Deter o ritmo/a liña do baixo actual (Espazo) Add beat/bassline Engadir un ritmo/liña do baixo Add automation-track Engadir unha pista de automatización Stop playback of current beat/bassline (Space) Parar a reprodución do ritmo/da liña do baixo actual (Espazo) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Prema aquí para reproducir o ritmo/liña do baixo actual. O ritmo/liña do baixo repítese en bucle automaticamente ao chegar ao final. Click here to stop playing of current beat/bassline. Prema aquí para parar a reprodución do ritmo/liña do baixo actual. Remove steps Eliminar pasos Add steps Engadir pasos bbTCOView Open in Beat+Bassline-Editor Abrir no editor de ritmos e liña do baixo Reset name Restaurar o nome Change name Mudar o nome Change color Mudar a cor Reset color to default bbTrack Beat/Bassline %1 Ritmo/Liña do baixo %1 Clone of %1 bitInvader Samplelength bitInvaderView Sample Length Lonxitude da mostra Sine wave Onda senoidal Triangle wave Onda triangular Saw wave Onda de dente de serra Square wave Onda cadrada White noise wave Onda de ruído branco User defined wave Onda definida polo usuario Smooth Suave Click here to smooth waveform. Prema aquí para unha forma de onda suave. Interpolation Interpolación Normalize Normalizar Draw your own waveform here by dragging your mouse on this graph. Debuxe aquí a súa propia forma de onda arrastrando o rato polo gráfico. Click for a sine-wave. Prema para unha onda senoidal. Click here for a triangle-wave. Prema aquí para unha onda triangular. Click here for a saw-wave. Prema aquí para unha onda de dente de serra. Click here for a square-wave. Prema aquí para unha onda cadrada. Click here for white-noise. Prema aquí para ruído branco. Click here for a user-defined shape. Prema aquí para unha forma definida polo usuario. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Export project to %1 Exportar o proxecto a %1 Error Erro Error while determining file-encoder device. Please try to choose a different output format. Produciuse un erro ao determinar o dispositivo codificador do ficheiro. Tente escollendo un formato de saída diferente. Rendering: %1% A renderizar: %1% Could not open file Non foi posíbel abrir o ficheiro Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Non foi posíbel abrir o ficheiro %1 para escribir nel. Asegúrese de ter permisos sobre o ficheiro e o directorio que o contén e tente de novo! fader Please enter a new value between %1 and %2: Introduza un valor novo entre %1 e %2: graphModel Graph Gráfico kickerInstrument Start frequency Frecuencia inicial End frequency Frecuencia final Gain Ganancia Length Distortion Start Distortion End Envelope Slope Noise Ruído Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: Frecuencia inicial: End frequency: Frecuencia final: Gain: Ganancia: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &Axuda Please enter a new value between -96.0 dBV and 6.0 dBV: Introduza un valor novo entre -96,0 dBV e 6,0 dBV: Please enter a new value between %1 and %2: Introduza un valor novo entre %1 e %2: ladspaBrowserView Available Effects Efectos dispoñíbeis Unavailable Effects Efectos non dispoñíbeis Instruments Instrumentos Analysis Tools Ferramentas de análise Don't know Non sei This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Este diálogo mostra información sobre todos os engadidos de LADSPA que o LMMS deu localizado. Os engadidos divídense en cinco categorías baseándose nunha interpretación dos tipos e nomes dos portos. Os efectos dispoñíbeis son os que se poden empregar co LMMS. Para que o LMMS poida utilizar un efecto ten que ser, en primeiro lugar e o máis importante, un efecto, o que quere dicir que ten que ter tanto canles de entrada como canles de saída. O LMMS identifica unha canle de entrada como un porto de taxa de son que conteña «in» no nome. As canles de saída identifícanse coas letras «out». Alén disto, o efecto ten que ter o mesmo número de entradas que de saídas e ter capacidade de tempo real. Os efectos non dispoñíbeis son os que foron identificados como efectos mais que non tiñan o mesmo número de canles de entrada que de saída ou non tiñan capacidade de tempo real. Os instrumentos son engadidos nos que só se identificaron canles de saída . As ferramentas de análise son engadidos nos que só se identificaron canles de entrada. Os «non sei» son engadidos nos que non se identificaron canles de entrada nin de saída. Facendo duplo clic sobre calquera dos engadidos mostra información sobre os portos. Type: Tipo: ladspaDescription Plugins Engadidos Description Descrición ladspaPortDialog Ports Portos Name Nome Rate Taxa Direction Dirección Type Tipo Min < Default < Max Mín < Predefinido < Máx Logarithmic Logarítmica SR Dependent Dependente de SR Audio Son Control Control Input Entrada Output Saída Toggled Conmutado Integer Enteiro Float Vírgula flutuante Yes Si lb302Synth VCF Cutoff Frequency Frecuencia de corte do VCF VCF Resonance Resonancia do VCF VCF Envelope Mod Modo de envolvente do VCF VCF Envelope Decay Decaemento da envolvente do VCF Distortion Distorsión Waveform Forma da onda Slide Decay Decamento ao escorregar Slide Escorregar Accent Acento Dead Morte 24dB/oct Filter Filtro de 24dB/oitava lb302SynthView Cutoff Freq: Frec. de corte: Resonance: Resonancia: Env Mod: Mod env: Decay: Decaemento: 303-es-que, 24dB/octave, 3 pole filter Filtro tipo 303, 24dB/oitava, 3 polos Slide Decay: Decamento ao escorregar: DIST: DIST: Saw wave Onda de dente de serra Click here for a saw-wave. Prema aquí para unha onda de dente de serra. Triangle wave Onda triangular Click here for a triangle-wave. Prema aquí para unha onda triangular. Square wave Onda cadrada Click here for a square-wave. Prema aquí para unha onda cadrada. Rounded square wave Onda cadrada arredondada Click here for a square-wave with a rounded end. Prema aquí para unha onda cadrada con final arredondado. Moog wave Onda tipo Moog Click here for a moog-like wave. Prema aquí para unha onda tipo Moog. Sine wave Onda senoidal Click for a sine-wave. Prema para unha onda senoidal. White noise wave Onda de ruído branco Click here for an exponential wave. Prema aquí para unha onda exponencial. Click here for white-noise. Prema aquí para ruído branco. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency Frecuencia de corte do VCF VCF Resonance Resonancia do VCF VCF Envelope Mod Modo de envolvente do VCF VCF Envelope Decay Decaemento da envolvente do VCF Distortion Distorsión Waveform Forma da onda Slide Decay Decamento ao escorregar Slide Escorregar Accent Acento Dead Morte 24dB/oct Filter Filtro de 24dB/oitava lb303SynthView Cutoff Freq: Frec. de corte: CUT CORTE Resonance: Resonancia: RES RES Env Mod: Mod env: ENV MOD MOD ENV Decay: Decaemento: DEC DEC 303-es-que, 24dB/octave, 3 pole filter Filtro tipo 303, 24dB/oitava, 3 polos Slide Decay: Decamento ao escorregar: SLIDE Escorregar DIST: DIST: DIST DIST WAVE: ONDA: WAVE ONDA malletsInstrument Hardness Dureza Position Posición Vibrato Gain Ganancia do vibrato Vibrato Freq Frecuencia do vibrato Stick Mix Mestura de paus Modulator Modulador Crossfade Transición por esvaecemento LFO Speed Velocidade do LFO LFO Depth Profundidade do LFO ADSR ADSR Pressure Presión Motion Movemento Speed Velocidade Bowed Con arco Spread Propagar Marimba Marimba Vibraphone Vibráfono Agogo Agogó Wood1 Madeira1 Reso Wood2 Madeira2 Beats Golpes Two Fixed Dous fixos Clump Esmagar Tubular Bells Campás tubulares Uniform Bar Lámina uniforme Tuned Bar Lámina afinada Glass Vidro Tibetan Bowl Cunca tibetana Missing files Faltan ficheiros Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! A instalación de Stk semella estar incompleta. Asegúrese de que o paquete Stk completo está instalado! malletsInstrumentView Instrument Instrumento Spread Propagar Spread: Propagar: Hardness Dureza Hardness: Dureza: Position Posición Position: Posición: Vib Gain Gan. vib. Vib Gain: Gan. vib.: Vib Freq Frec. vib.: Vib Freq: Frec. vib.: Stick Mix Mestura de paus Stick Mix: Mestura de paus: Modulator Modulador Modulator: Modulador: Crossfade Transición por esvaecemento Crossfade: Transición por esvaecemento: LFO Speed Velocidade do LFO LFO Speed: Velocidade do LFO: LFO Depth Profundidade do LFO LFO Depth: Profundidade do LFO: ADSR ADSR ADSR: ADSR: Bowed Con arco Pressure Presión Pressure: Presión: Motion Movemento Motion: Movemento: Speed Velocidade Speed: Velocidade: Vibrato Vibrato Vibrato: Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &Axuda opl2instrument Patch Parche Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Distorsión Volume Volume organicInstrumentView Distortion: Distorsión: Volume: Volume: Randomise Aleatorio Osc %1 waveform: Forma de onda do osciloscopio %1: Osc %1 volume: Volume do oscilador %1: Osc %1 panning: Panorámica do oscilador %1: cents cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Tempo da varredura Sweep direction Dirección da varredura Sweep RtShift amount Cantidade de Cambio de varredura Wave Pattern Duty Padrón de onda Channel 1 volume Volume da canle 1 Volume sweep direction Dirección da varredura do volume Length of each step in sweep Lonxitude de cada paso en varredura Channel 2 volume Volume da canle 2 Channel 3 volume Volume da canle 3 Channel 4 volume Volume da canle 4 Right Output level Nivel da saída dereita Left Output level Nivel da saída esquerda Channel 1 to SO2 (Left) Canle 1 a SO1 (Esquerda) Channel 2 to SO2 (Left) Canle 2 a SO2 (Esquerda) Channel 3 to SO2 (Left) Canle 3 a SO2 (Esquerda) Channel 4 to SO2 (Left) Canle 4 a SO2 (Esquerda) Channel 1 to SO1 (Right) Canle 1 a SO1 (Dereita) Channel 2 to SO1 (Right) Canle 2 a SO1 (Dereita) Channel 3 to SO1 (Right) Canle 3 a SO1 (Dereita) Channel 4 to SO1 (Right) Canle 4 a SO1 (Dereita) Treble Agudos Bass Graves Shift Register width Cambiar a largura do rexistro papuInstrumentView Sweep Time: Tempo da varredura: Sweep Time Tempo da varredura Sweep RtShift amount: Cantidade de cambio de varredura: Sweep RtShift amount Cantidade de cambio de varredura Wave pattern duty: Padrón de onda de deber: Wave Pattern Duty Padrón de onda de deber Square Channel 1 Volume: Volume da canle cadrada 1: Length of each step in sweep: Lonxitude de cada paso en varredura: Length of each step in sweep Lonxitude de cada paso en varredura Wave pattern duty Padrón de onda de deber Square Channel 2 Volume: Volume da canle cadrada 2: Square Channel 2 Volume Volume da canle cadrada 2 Wave Channel Volume: Volume da canle de ondas: Wave Channel Volume Volume da canle de ondas Noise Channel Volume: Volume da canle de ruído: Noise Channel Volume Volume da canle de ruído SO1 Volume (Right): Volume de SO1 (Dereita): SO1 Volume (Right) Volume de SO1 (Dereita) SO2 Volume (Left): Volume de SO2 (Esquerda): SO2 Volume (Left) Volume de SO2 (Esquerda) Treble: Agudos: Treble Agudos Bass: Graves: Bass Graves Sweep Direction Dirección da varredura Volume Sweep Direction Dirección da varredura do volume Shift Register Width Cambiar a largura do rexistro Channel1 to SO1 (Right) Canle 1 a SO1 (Dereita) Channel2 to SO1 (Right) Canle 1 a SO1 (Dereita) Channel3 to SO1 (Right) Canle 3 a SO1 (Dereita) Channel4 to SO1 (Right) Canle 4 a SO1 (Dereita) Channel1 to SO2 (Left) Canle 1 a SO2 (Esquerda) Channel2 to SO2 (Left) Canle 2 a SO2 (Esquerda) Channel3 to SO2 (Left) Canle 3 a SO2 (Esquerda) Channel4 to SO2 (Left) Canle 4 a SO2 (Esquerda) Wave Pattern Padrón de onda The amount of increase or decrease in frequency A cantidade de aumento ou redución da frecuencia The rate at which increase or decrease in frequency occurs A taxa á que se produce o aumento ou a redución da frecuencia The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. O ciclo de deber é a relación entre a duración (tempo) durante a que un sinal está ACTIVO fronte ao período total do sinal. Square Channel 1 Volume Volume da canle cadrada 1 The delay between step change A demora entre cambios de paso Draw the wave here Debuxe a onda aquí pluginBrowser no description sen descrición Instrument plugins Engadidos de instrumento Incomplete monophonic imitation tb303 Imitación monofónica incompleta tb303 Plugin for freely manipulating stereo output Engadido para manipular libremente a saída en estéreo Plugin for controlling knobs with sound peaks Engadido para controlar botóns con picos de son Plugin for enhancing stereo separation of a stereo input file Engadido para mellorar a separación en estéreo dun ficheiro de entrada en estéreo List installed LADSPA plugins Enumerar os engadidos de LADSPA instalados Filter for importing FL Studio projects into LMMS Filtro para importar proxectos do FL Studio ao LMMS GUS-compatible patch instrument Instrumento de parcheo compatíbel con GUS Additive Synthesizer for organ-like sounds Sintetizador aditivo para sons tipo órgano Tuneful things to bang on Cousas melodiosas nas que bater VST-host for using VST(i)-plugins within LMMS Hóspede de VST para empregar engadidos de VST(i) co LMMS Vibrating string modeler Modelador de cordas vibrantes plugin for using arbitrary LADSPA-effects inside LMMS. engadido para empregar efectos de LADSPA arbitrarios no LMMS. Filter for importing MIDI-files into LMMS Filtro para importar ficheiros MIDI ao LMMS Instrument browser Navegador de instrumentos Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Arrastre un instrumento para o Editor de cancións, o Editor de ritmos+liña do baixo ou para unha pista de instrumento existente. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Emulación dos SID MOS6581 e o MOS8580. Este chip empregábase no computador Commodore 64. Player for SoundFont files Reprodutor de ficheiros SoundFont Emulation of GameBoy (TM) APU Emulación da APU da GameBoy (TM) Customizable wavetable synthesizer Sintetizador de táboa de ondas personalizábel Embedded ZynAddSubFX ZynAddSubFX incorporado Filter for importing Hydrogen files into LMMS 2-operator FM Synth LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes Notas do proxecto Put down your project notes here. Anote aquí as súas notas sobre o proxecto. Edit Actions Editar as accións &Undo Desfa&cer Ctrl+Z Ctrl+Z &Redo &Refacer Ctrl+Y Ctrl+Y &Copy &Copiar Ctrl+C Ctrl+C Cu&t Cor&tar Ctrl+X Ctrl+X &Paste A&pegar Ctrl+V Ctrl+V Format Actions Accións de formato &Bold &Negrita Ctrl+B Ctrl+B &Italic Cursi&va Ctrl+I Ctrl+I &Underline S&ubliñado Ctrl+U Ctrl+U &Left &Esquerda Ctrl+L Ctrl+L C&enter C&entro Ctrl+E Ctrl+E &Right De&reita Ctrl+R Ctrl+R &Justify &Xustificar Ctrl+J Ctrl+J &Color... &Cor... renameDialog Rename... Mudar o nome... setupDialog Setup LMMS Configuración do LMMS General settings Configuración xeral BUFFER SIZE TAMAÑO DO BÚFER Reset to default-value Restaurar o valor por omisión MISC DIVERSOS Enable tooltips Activar as axudiñas Show restart warning after changing settings Mostrar o aviso sobre o reinicio despois de cambiar a configuración Display volume as dBV Mostrar o volume como dBV Compress project files per default Comprimir os ficheiros dos proxectos por omisión HQ-mode for output audio-device Modo de calidade alta para o dispositivo de son de saída LMMS working directory Directorio de traballo do LMMS VST-plugin directory Directorio dos engadidos de VST Artwork directory Directorio do material gráfico FL Studio installation directory Directorio de instalación do FL Studio STK rawwave directory Directorio de ondas cruas de STK Performance settings Configuración do desempeño UI effects vs. performance Efectos da interface fronte a desempeño Audio settings Configuración do son AUDIO INTERFACE INTERFACE DO SON MIDI settings Configuración do MIDI MIDI INTERFACE INTERFACE MIDI OK Aceptar Cancel Cancelar Restart LMMS Reiniciar o LMMS Please note that most changes won't take effect until you restart LMMS! Teña en conta que a maioría dos cambios non serán efectivos até que se reinicie o LMMS! Frames: %1 Latency: %2 ms Cadencia: %1 Latencia: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Aquí pódese configurar o tamaño do búfer interno empregado polo LMMS. Valores máis pequenos resultan nunha latencia menor mais poden tamén causar son non usábel ou desempeño inadecuado, especialmente en computadores vellos ou en sistemas cun kernel que non sexa de tempo real. Choose LMMS working directory Escoller o directorio de traballo do LMMS Choose your VST-plugin directory Escoller o directorio dos engadidos de VST Choose artwork-theme directory Escoller o directorio do material gráfico Choose FL Studio installation directory Escoller o directorio de instalación do FL Studio Choose LADSPA plugin directory Escoller o directorio dos engadidos de LADSPA Choose STK rawwave directory Escoller o directorio de ondas cruas de STK Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Aquí pódese escoller a interface de son preferida. Dependendo da configuración do sistema durante a compilación pódese escoller entre ALSA, JACK, OSS e máis. Embaixo vese unha caixa que oferece controles para configurar a interface de son escollida. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Aquí pódese escoller a interface de MIDI preferida. Dependendo da configuración do sistema durante a compilación pódese escoller entre ALSA, OSS e máis. Embaixo vese unha caixa que oferece controles para configurar a interface de MIDI escollida. Paths Rutas LADSPA plugin paths Rutas aos engadidos de LADSPA Default Soundfont File Ficheiro Soundfont por omisión Background artwork Gráficos do fondo Choose default SoundFont Escoller a SoundFont por omisión Choose background artwork Escoller os gráficos do fondo One instrument track window mode Compact track buttons Sync VST plugins to host playback Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor Enable note labels in piano roll Enable waveform display by default sf2Instrument Bank Banco Patch Parche Gain Ganancia Reverb Reverberación Reverb Roomsize Tamaño da sala de reverberación Reverb Damping Tampón de reverberación Reverb Width Largura da reverberación Reverb Level Nivel de reverberación Chorus Coro Chorus Lines Liñas do coro Chorus Level Nivel do coro Chorus Speed Velocidade do coro Chorus Depth Profundidade do coro sf2InstrumentView Open other SoundFont file Abrir outro ficheiro de SoundFont Click here to open another SF2 file Prema aquí para abrir outro ficheiro de SF2 Choose the patch Escoller o parche Gain Ganancia Apply reverb (if supported) Aplicar reverberación (se o admitir) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Este botón activa o efecto de reverberación. Isto é útil para efectos gaioleiros, mais só funciona cos ficheiros que o admiten. Reverb Roomsize: Tamaño da sala de reverberación: Reverb Damping: Tampón de reverberación: Reverb Width: Largura da reverberación: Reverb Level: Nivel de reverberación: Apply chorus (if supported) Aplicar un coro (se o admitir) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Este botón activa o efecto de coro. Isto é útil para efectos de echo gaioleiros, mais só funciona cos ficheiros que o admiten. Chorus Lines: Liñas de coro: Chorus Level: Nivel do coro: Chorus Speed: Velocidade do coro: Chorus Depth: Profundidade do coro: Open SoundFont file Abrir un ficheiro de SoundFont SoundFont2 Files (*.sf2) Ficheiros de SoundFont2 (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Corte Resonance Resonancia Filter type Tipo de filtro Voice 3 off Voz 3 apagada Volume Volume Chip model Modelo de chip sidInstrumentView Volume: Volume: Resonance: Resonancia: Cutoff frequency: Frecuencia de corte: High-Pass filter Filtro pasa-alta Band-Pass filter Filtro pasa-faixa Low-Pass filter Filtro pasa-baixa Voice3 Off Voz3 apagada MOS6581 SID SID MOS6581 MOS8580 SID SID MOS6580 Attack: Ataque: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. A taxa de ataque determina como de rápido sobe a Voz %1 desde cero á amplitude de pico. Decay: Decaemento: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. A taxa de decaemento determina como de rápido cae a saída desde a amplitude de pico ao nivel de Sustentación escollido. Sustain: Sustentación: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. A saída da voz %1 fica na amplitude de sustentación indicada mentres se manteña a nota. Release: Relaxamento: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. A saída da voz %1 cae desde a amplitude de sustentación até cero na relación de relaxamento escollida. Pulse Width: Largura do pulso: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. A resolución da largura do pulso permite varrer a largura suavemente sen que sexa posíbel discernir os pasos. Hai que escoller a forma de onda pulso no oscilador %1 para que se ouza un efecto audíbel. Coarse: Crú: The Coarse detuning allows to detune Voice %1 one octave up or down. A desafinación crúa permite desafinar a voz %1 unha oitava para arriba ou para abaixo. Pulse Wave Onda de pulso Triangle Wave Onda triangular SawTooth Dente de serra Noise Ruído Sync Sincronizar Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Sincroniza a frecuencia fundamental do oscilador %1 coa frecuencia fundamental do oscilador %2, producindo efectos de «sincronización dura». Ring-Mod Modo anel Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. O modo anel substitúe a saída da onda de forma triangular do oscilador %1 cunha combinación «modulada en anel» dos osciladores %1 e %2. Filtered Filtrado When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Cando Filtrado está activado, a voz %1 procésase a través do filtro. Cando Filtrado está desactivado, a voz %1 aparece directamente na saída e o filtro non ten ningún efecto sobre ela. Test Proba Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Proba, cando escollido, restaura e bloquea o oscilador %1 a cero até que remate a proba. song Tempo Tempo Master volume Volume global Master pitch Altura global Project saved Proxecto gravado The project %1 is now saved. O proxecto %1 xa está gravado. Project NOT saved. O proxecto NON está gravado. The project %1 was not saved! O proxecto %1 no nestá gravado! Import file Importar un ficheiro untitled sen título Select file for project-export... Escolla o ficheiro para a exportación do proxecto... Empty project Proxecto baleiro This project is empty so exporting makes no sense. Please put some items into Song Editor first! Este proxecto está baleiro, polo que exportalo non ten xeito. Poña algo primeiro no Editor de cancións! MIDI sequences Secuencias de MIDI FL Studio projects Proxectos de FL Studio All file types Todos os tipos de ficheiro Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE LARGO Width: Largura: stereoEnhancerControls Width Largura stereoMatrixControlDialog Left to Left Vol: Volume esquerda para esquerda: Left to Right Vol: Volume esquerda para dereita: Right to Left Vol: Volume dereita para esquerda: Right to Right Vol: Volume dereita para dereita: stereoMatrixControls Left to Left Esquerda para esquerda Left to Right Esquerda para dereita Right to Left Dereita para esquerda Right to Right Dereita para dereita timeLine Enable/disable auto-scrolling Activar/Desactivar o desprazamento automático Enable/disable loop-points Activar/Desactivar os puntos de bucle After stopping go back to begin Despois de parar voltar ao principio After stopping go back to position at which playing was started Despois de parar voltar á posición na que se iniciou a reprodución After stopping keep position Despois de parar manter a posición Hint Suxestión Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Silenciado Solo Solo trackContentObject Muted Silenciado trackContentObjectView Current position Posición actual Hint Suxestión Press <Ctrl> and drag to make a copy. Prema <Ctrl> e arrastre para facer unha copia. Current length Duración actual Press <Ctrl> for free resizing. Prema <Ctrl> para modificar o tamaño libremente %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 a %5:%6) Delete (middle mousebutton) Eliminar (botón do medio do rato) Cut Recortar Copy Copiar Paste Apegar Mute/unmute (<Ctrl> + middle click) Silenciar/Darlle volume (<Ctrl> + botón central do rato) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Prema <Ctrl> mentres ten a asa de mover premida para iniciar unha acción de arrastrar e soltar. Actions for this track Accións para esta pista Mute Silenciar Mute this track Silenciar esta pista Solo Solo Clone this track Clonar esta pista Remove this track Eliminar esta pista Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin A cargar un engadido Please wait while loading VST-plugin... Agarde mentres se carga o engadido de VST... Failed loading VST-plugin Fallou a carga do engadido de VST The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! Non foi posíbel cargar o engadido de VST %1 por algunha razón. Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LMMS! vibed String %1 volume Volume da corda %1 String %1 stiffness Tensión da corda %1 Pick %1 position Posición da púa %1 Pickup %1 position Posición do captador %1 Pan %1 Pan %1 Detune %1 Desafinar %1 Fuzziness %1 Difuso %1 Length %1 Lonxitude %1 Impulse %1 Impulso %1 Octave %1 Oitava %1 vibedView Volume: Volume: The 'V' knob sets the volume of the selected string. O botón «V» indica o volume da corda escollida. String stiffness: Tensión da corda: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. O botón «S» indica a tensión da corda escollida. A tensión da corda afecta ao tempo durante o que esta soa. Canto menor sexa, máis tempo ha de soar. Pick position: Posición da púa: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. O botón «P» indica a posición na que se pulsa a corda escollida. Canto menor sexa, máis próxima estará da ponte. Pickup position: Posición do captador: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. O botón «PU» indica a posición desde a que se recollen as vibracións da corda escollida. Canto menor sexa, máis próximo será da ponte. Pan: Pan: The Pan knob determines the location of the selected string in the stereo field. O botón Pan determina o lugar que ocupa a cadea escollida no campo estéreo. Detune: Desafinar: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. O botón Desafinar modifica a altura da corda escollida. Indicar menos de cero fai que a corda soe plana. Con máis de cero a corda soará viva. Fuzziness: Difuso: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. O botón Slap engádelle algo de distorsión tipo «fuzz» á corda escollida que se nota máis durante o ataque, aínda que tamén se pode usar para facer que a corda soe máis «metálica». Length: Lonxitude: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. O botón Lonxitude indica a lonxitude da corda escollida. As cordas máis longas soan durante máis tempo e con máis brillo; porén, tamén consumen máis ciclos da CPU. Impulse or initial state Impulso ou estado inicial The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. O selector «Imp» determina se hai que tratar a forma de onda do gráfico como un impulso impartido na corda pola púba ou o estado inicial da corda. Octave Oitava The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. O selector Oitava emprégase para escoller con que harmónico da nota soa a corda. Por exemplo, «-2» significa que a corda soa dúas oitavas por debaixo da fundamental, «F» significa que a corda soa na fundamental e «6» significa que a cadea soa seix oitavas por riba da fundamental. Impulse Editor Editor de impulsos The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. O editor de formas de onda permite controlar o estado inicial ou impulso usado para facer que a corda comece a vibrar. Os botóns que hai á dereita da gráfica inicializan a forma de onda no tipo escollido. O botón «?» carga unha forma de onda desde un ficheiro - só se cargan as primeiras 128 mostras. A forma de onda tamén se pode debuxar na gráfica. O botón «S» suaviza a forma de onda. O botón «N» normaliza a forma de onda. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modela até nove cordas vibrando independentemente. O selector «Corda» permite escoller a corda que se desexe editar. O selector «Imp» escolle se o gráfico representa un impulso ou o estado inicial da corda. O selector «Oitava» escolle o harmónico co que debería vibrar a corda. A gráfica permite controlar o estado inicial ou o impulso usados para pór a corda en movemento. O botón «V» controla o volume. O botón «S» controla a tensión.da corda. O botón «P» controla a posición da púa. O botón «PU» controla a posición de observación. «Pan» e «Detune» non deberían precisar explicación. O botón «Slap» engádelle un pouco de distorsión tipo «fuzz» ao son da corda. O botón «Lonxitude» controla a lonxitude da corda. O LED do recanto inferior dereito do editor da forma da onda determina se a corda está activa no instrumento. Enable waveform Activar a forma de onda Click here to enable/disable waveform. Prema aquí para activar/desactivar a forma da onda. String Corda The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. O selector Corda emprégase para escoller a corda que editan os controles. Un instrumento de Vibed pode conter até nove cordas vibrando independentemente. O LED do recanto inferior dereito do editor da forma da onda indica se a corda escollida esstá activada. Sine wave Onda senoidal Triangle wave Onda triangular Saw wave Onda de dente de serra Square wave Onda cadrada White noise wave Onda de ruído branco User defined wave Onda definida polo usuario Smooth Suave Click here to smooth waveform. Prema aquí para unha forma de onda suave. Normalize Normalizar Click here to normalize waveform. Prema aquí para normalizar a forma da onda. &Help &Axuda Use a sine-wave for current oscillator. Empregar unha onda senoidal para este oscilador. Use a triangle-wave for current oscillator. Empregar unha onda triangular para este oscilador. Use a saw-wave for current oscillator. Empregar unha onda de dente de serra para este oscilador. Use a square-wave for current oscillator. Empregar unha onda cadrada para este oscilador. Use white-noise for current oscillator. Empregar ruído branco para este oscilador. Use a user-defined waveform for current oscillator. Empregar unha forma de onda predefinida para este oscilador. visualizationWidget click to enable/disable visualization of master-output Prema para des/activar a visualización da saída global Click to enable Prema para activar voiceObject Voice %1 pulse width Largo do pulso da voz %1 Voice %1 attack Ataque da voz %1 Voice %1 decay Decamento da voz %1 Voice %1 sustain Sustentación da voz %1 Voice %1 release Relaxamento da voz %1 Voice %1 coarse detuning Desafinación bruta da voz %1 Voice %1 wave shape Fonda da onda da voz %1 Voice %1 sync Sincronización da voz %1 Voice %1 ring modulate Modulación de anel da voz %1 Voice %1 filtered Filtrado da voz %1 Voice %1 test Proba da voz %1 waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/it.qm000066400000000000000000010742171247673406200156360ustar00rootroot00000000000000d@d@T[E EZ:&F|oG*GFG.G1HHjdHipH1}HHz&Hz.HgI;Im1Im:_J'J+QWJ/J<@1Jm2JRKL]!iL]"jQLb8M5;MU)MM@N$yfN${N(2]N5N58NhrObzPW$PWS}AS}CSUSbSsTbKT.PTZۼTthTʴTʴTx*UQ1fU`gU`UjiUj _VbVb}Vb,VhUmVSVVMV3VVW ":W +WiWPWX 00XVkZ/_Z/+(Zk5%Zk?BZ1ZZo_6Zo[[j0\m]6 s];^Gdv^eq85^er8l`~`~Fc^,cN h T8ihių.biųių[gr;rrr^szytU$tbft i2v=w|}u]}Ukd~#<;;7_Lϙz)GGwGG^Y#2;˫vl@Cyu\evjT&PNiieiu7[)#7iи@YmyJy#ק1ק3\@Q7On7W3ZW{G |Gs}GDWh(J b) b0b 'd I  C>]/N݅+PO+ڣuns/it;" 0"R]/VŖ/V2ϐ7"f+7o{9}U9;n#; =@1xa@۴`CFz9Fz"J2J;MUT6OX[OXTP0TYV%Y&Z;3#Z;<`1xk`KaUa[i*mXq >w80yu+z;{) n r} ~o>kuje-=Jt3ɄyIʭi7(CՙծhI2:[*N8Ltr݊DL<lߺQ$o^4o;jeCB[A X|DP/h1{`1v8Joefa3 A3 f!-^$#aN$#ḇ$#q$#rw(^(^X)uh#,´R,´N.d4NƓ9L : /;sG@IP P yRo^_/b#bbLbnl7n Pr%Rtlhxżl~zs9%hqd!qfvd}vgN/8n3&>CO$2*%BG\G`8G_ G]E<DžR..u7??,v)e#)f)e)gvKUjbf3Fir7)o)9>6#>`>hѻGeGҩBkҩB DһBjһB |t>rLN ]gHE~c|a/p:Lss)s. Y~,yvDQUz%uI"ݎi"ݎ|% :qI[YLOXdfO۹JP~AP~SkuAWa6?WLwZ.]]Yd] ji'@kl+l:Tlhilhl`odo u0xxbxnE|Zv~|ZU}"H.}g}~)~ŐFo3tĩR$|t?W#{#!yj0Vs_c.^5>]N[x|5#]A~ U~2)!)" )1L)2WQĽxnF,wPmϯ9K>(ѫ6Jp6$VקA;קCؖ]]~KVNքuܗjwKRw2왞 gQ$BYY{ = չKJYITH.܇U}< 0`(U(A)e210h19a::^Ӱ;:(<<<<,A U3oFA>JWKp#M$AMt3MкAO۹OFPJ6PJPJ Qq.R.mWPyW.W:XYZ `H`d`%`%[`%ܝc=wd Z g5ghjOi{+jztWqkJ=l rJ Aw~ewwSw(wxYZ4yTyT*{ |9:C% NRxs*>^u u(u)-u)u*unKunuuy.av{IY<IfImHIhzhz hiZKZ;a epq<=ExDw  '/*BkB Bk_B z¶h0Bbh0FAB6txV~e_kˤ09u(žN Ք\iEhͥ2529ϟ.(E5p1hA2hDK݄J݄Oߗ`XGA#hhhv@kfnz|DK#sPCA_dCV^]̔ t1 uW u @Sl0iTOsΎO(3!E$00%8(c-))|{,N*-U..0KV153:3 7e7e7UB8H?~aEzF^4?F^=H8FJ5J:PeIQx"Q*UQDjV ZoZ2\C.C\D%aEa*{aa!a"bQ@bQofggaMggaǴhh933@h;3hIhI6i3=jTvjTwոll$lp+s nvA vXqx}o.>A'HA/kK]Ҩ*ÛF&w'ycڭ۴NRE+{!Ąj<N&f"ffz?t5`t?GL?Vttkn\Þ %cV%so^=^b^!Zj;0WEUNVZuN.m69<5 <5 D<5"<5%<5OA<5T2<5÷sߺqUD6}8ljGFF4ZC5N-^, DEwEUEi|b_iux#ECh'v'vؑ(*+pZo+#1U1^56{C:gN{:,-9U525: V>!2S47eU7fnnuo,\(j$2TjR62d1 ޔreTti>#t/0/7qrMgW Ů  zyl ))+V YuB!E-(!E^!E&rzA' )>' ),(#5)n*G*m,Do.d 5n7)8};;PZ?A]AB^!B^"C'I0NjhNj4=PJQQHR^!wR^"UIKUI.\Z[tb%\X.XUa(aab^!3b^"bcXczuhFEhJVpiAN\GiolFB>m.Zwxy %1y %_6 Ej>j/>/2X2]xmd*K?ExixTSAͣ잂l잂 O)u2sZwk#gl%{%%SIQS ّ  9* ߅ ߕR:: h Uпٚzw$Ϟ@-Id-e5(ъ5_9;7=$*<6=S#xHC2HC;%0dmhn.%Z UU(fU<>Z>qld[\lwum^;eJi8`}EyyyQ^Pbk  Tr¸$¸ *ʩ4ʩ>c8Ό]f]-/n]ei࣓POmc)Yn$  m>  _ 0 $ + )8k * .5n 3': 6E 8eʏ 8ed 8e 9J/7 9 ? @UnV G ItY IX Mg O1 T YD Ys bL c cU hI.z] hI. kI l8 p,jH pg tET w%! w%>g xX x§ |b2F >N >#< 9`: ,# , ) B>J } C[ B1Y )g ^u Ng Ri l E? `x ` 9 ZM w n?;  F w KnL ڢ ڢ p LU {9 #C %L %ӴO% '5 +a{ -Pp= /E"q 8Rt/P 9X 9@' :_z Aq A Bq Br E'Hs Fy^t K\v PI R^y St T` Tr X;<, X ]0 ^eve d`Y : W  ZR UUg ugQ R} ^P Nx U 1- hP Nx D T8 u D  b cs ~ r  ,U ·~ Ɓ(S4 * ʧh ʵh ˔ 8 J\H DY N Ԍ ؋ ڮDT ڮHR ہ8q z f = ׾   ɺ"  *  ] _*  l  m I9B@ ".U< $ r + - < 3' 7/ 9ya :% Fp N OmZ S'J STn [ \ \y ] _`:R ctC' ctG eE; m  m * m S mz s T3 u:V F" d' $n s +b ݔ  -5  ?; N_ No  8s J V, ! " 1c 2 h R 23 2=(  8Am HT Ɵ< Ƶ8m H ^ 4י ӗ`E; Ӱ 2 <{ < j e S- Y: Y:; Y:! ~ +J i- M  } g . .7= . .!m ʓY o "c " $&y %í (cԨ ) *X + +  +  -#ef -# -ddzR - -=o 0 0; 1e 5ݙjr 7ÒΥ !_ V ? sd Cr Gh ^{ V E x o  Ɉ T SĔ  S ޖH 9& 9.3 i 鼣= ]n ' / /  A 1 `eO gK s + ZӍ A 5 r6 (:@ (d- .˙ 0 _ 0 ^ 0 ]p 0 \B 8+= @uQ @u @u5 W` W!- Z \i a ao0T bS# cÓl c W c% c- c[( c: c. ch e e~ fb3 fN l8\ p0ͅ p0r p0_ |H5Nf |.. . / /, }NW S"x, at t # KG ;  7 1= 3 .}P ."y f NS Z+O nE D " 0^5[ ɶ. Qt h Չ9M Չ92 3 )> i M Q D /^| /^! Zr ~EK ɧr P ^ p  c ` d:$_RWmf}n~Qi*7L!K3oe!N/!"$<2S&ʮ^1 c1 u2k4,eg>:GL:GP;}V0<)Be>L>2D,egG)HPK>Q>ARxNUxWxY]oad^cgn5Qn5Mn@}IHzdyOp.x:kH*KK; ?<))/`9`9+Ș$F[OFSۋWZz c'yPŎ^#ȬN R NR"N s,[fF8d  |[; \5gL_d4"$eF'I()307Wj?I AABXqBXr+CgeD>AZD@E%IJicJitM|vQZQRXqRXrU&XҾ0Z u[x*n[] ^ Ej` raaEbXqtbXrcX. 3eRlkeR eRleR ]iI WiI m4pڸ}(yf|0A6$B _*5*@F_QM7Kg +W&$¥IvLv.@ ֩<BsrƳC~Ik36'ܹvi<\<html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html>

http://lmms.sourceforge.net

 AboutDialogInformazioni suAbout AboutDialogAbout LMMS About LMMS AboutDialog AutoriAuthors AboutDialogPCopyright (c) 2004-2014, LMMS developers(Copyright (c) 2004-2014, LMMS developers AboutDialog Roberto Giaconia <derobyj@gmail.com> Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, sei il benvenuto!Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialog<LMMS (Linux MultiMedia Studio)LMMS (Linux MultiMedia Studio) AboutDialogZLMMS - Produzione musicale semplice per tutti)LMMS - easy music production for everyone AboutDialogLicenzaLicense AboutDialogTraduzione Translation AboutDialog<Versione %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogSXLEFTAmplifierControlDialog(Guadagno a sinistra: Left gain:AmplifierControlDialogBILPANAmplifierControlDialogBilanciamento:Panning:AmplifierControlDialogDXRIGHTAmplifierControlDialog$Guadagno a destra: Right gain:AmplifierControlDialogVOLVOLAmplifierControlDialogVolume:Volume:AmplifierControlDialog&Guadagno a sinistra Left gainAmplifierControlsBilanciamentoPanningAmplifierControls"Guadagno a destra Right gainAmplifierControls VolumeVolumeAmplifierControls CANALICHANNELSAudioAlsa::setupWidgetPERIFERICADEVICEAudioAlsa::setupWidgetAmplificazione:Amplify:AudioFileProcessorView Clicca qui per aprire un altro file audio. Apparir una finestra di dialogo dove sar possibile scegliere il file. Impostazioni come la modalit ripetizione, amplificazione e cos via non vengono reimpostate, pertanto potrebbe non suonare come il file originale.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorView`Continua la ripetizione del campione tra le note%Continue sample playback across notesAudioFileProcessorView,Disabilit ripetizione Disable loopAudioFileProcessorView&Abilita ripetizione Enable loopAudioFileProcessorViewAttivando questa opzione, il campione audio viene riprodotto tra note differenti: se cambi l'altezza, o la nota finisce prima del punto di fine del campione, allora la nota seguente riprodurr il campione da dove si era fermata la precedente. Se invece si vuol far ripartire il campione dal punto d'inizio, bisogna inserire una nota molto grave (< 20 Hz)>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)AudioFileProcessorViewPunto di fine: Endpoint:AudioFileProcessorViewAttivando questo pulsante, l'intero campione viene invertito. Ci utile per effetti particolari, ad es. un crash invertito.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorViewPunto LoopBack:Loopback point:AudioFileProcessorView,Apri un altro campioneOpen other sampleAudioFileProcessorView&Inverti il campioneReverse sampleAudioFileProcessorView Punto di inizio: Startpoint:AudioFileProcessorViewQuesto pulsante disabilit la ripetizione. Il suono viene eseguito solo una volta dall'inizio alla fine.LThis button disables looping. The sample plays only once from start to end. AudioFileProcessorViewQuesto pulsante abilit la ripetizione diretta. Il suono viene ripetuto indefinitamente dal loop point al punto di fine.`This button enables forwards-looping. The sample loops between the end point and the loop point.AudioFileProcessorViewQuesto pulsante abilita la ripetizione ing-pong. Il suono viene eseguito avanti e indietro tra il punto di fine e il loop point.xThis button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.AudioFileProcessorViewQuesta manopola regola l'amplificaione. Con un valore pari a 100% il campione non viene modificato, altrimenti verr amplificato della percentuale specificata (il file originale non viene modificato!)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorViewCon questa manopola puoi impostare il punto da cui AudioFileProcessor inizia a riprodurre il suono.`With this knob you can set the point where AudioFileProcessor should begin playing your sample. AudioFileProcessorViewCon questa manopola puoi impostare il punti in cui AudioFileProcessor finisce di riprodurre il suono._With this knob you can set the point where AudioFileProcessor should stop playing your sample. AudioFileProcessorView6Con questa modalit puoi impostare il punto dove la ripetizione comincia: la parte del suono tra il LoopBack e il punto di fine quella che ver ripetuta.Click here if you want to stop playing of the current pattern.AutomationEditorbClicca qui per scegliere il metodo di progressione a cubica di Hermite per questo pattern di automazione. Il valore della variabile connessa cambier seguendo una curva morbida.Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.AutomationEditorClicca qui per scegliere il metodo di progressione discreta per questo pattern di automazione. Il valore della variabile connessa rimarr costante tra i punti disegnati, cambier immediatamente non appena raggiunto ogni punto.Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.AutomationEditorClicca qui per scegliere il metodo di progressione lineare per questo pattern di automazione. Il valore della variabile connessa cambier in modo costante nel tempo tra i punti disegnati per arrivare al valore di ogni punto senza cambiamenti bruschi.Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.AutomationEditorFCopia i valori selezionati (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor@Progressione a cubica di HermiteCubic Hermite progressionAutomationEditorHTaglia i valori selezionati (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor*Progressione discretaDiscrete progressionAutomationEditor4Modalit disegno (Shift+D)Draw mode (Shift+D)AutomationEditor6Modalit cancella (Shift+E)Erase mode (Shift+E)AutomationEditor(Progressione lineareLinear progressionAutomationEditorJIncolla i valori selezionati (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorvRiproduci/metti in pausa questo pattern (Barra Spaziatrice)"Play/pause current pattern (Space)AutomationEditor necessario aprire un pattern di automazione con il menu contestuale di un controllo!EPlease open an automation pattern with the context menu of a control!AutomationEditorvFerma la riproduzione di questo pattern (Barra Spaziatrice)'Stop playing of current pattern (Space)AutomationEditor@Valore di tensione per la splineTension value for splineAutomationEditortensione:  Tension: AutomationEditorValori copiati Values copiedAutomationEditorXTrascina un controllo tenendo premuto <Ctrl>$Drag a control while pressing AutomationPatternXIl cntrollo gi connesso a questo pattern.+Model is already connected to this pattern.AutomationPattern%1 connessioni%1 ConnectionsAutomationPatternViewRinomina Change nameAutomationPatternViewPulisciClearAutomationPatternView Disconnetti "%1"Disconnect "%1"AutomationPatternViewBApri nell'editor dell'AutomazioneOpen in Automation editorAutomationPatternViewReimposta nome Reset nameAutomationPatternView8Accendi/spegni registrazioneSet/clear recordAutomationPatternViewxFai doppio-click per disegnare questo pattern di automazione6double-click to open this pattern in automation editorAutomationPatternView,Traccia di automazioneAutomation trackAutomationTrackFREQFREQBassBoosterControlDialogFrequenza: Frequency:BassBoosterControlDialogGUADGAINBassBoosterControlDialogGuadagno:Gain:BassBoosterControlDialogRAPPRATIOBassBoosterControlDialogRapporto:Ratio:BassBoosterControlDialogFrequenza FrequencyBassBoosterControlsGuadagnoGainBassBoosterControls"Rapporto dinamicoRatioBassBoosterControlsClicca qui per mostrare o nascondere l'interfaccia grafica (GUI) di Carla.GClick here to show or hide the graphical user interface (GUI) of Carla.CarlaInstrumentViewMostra GUIShow GUICarlaInstrumentViewController %1 Controller %1 Controller,Rilevamento automatico Auto DetectControllerConnectionDialog CANALECHANNELControllerConnectionDialogCONTROLLER CONTROLLERControllerConnectionDialogAnnullaCancelControllerConnectionDialog0Impostazioni connessioneConnection SettingsControllerConnectionDialogCiclo rilevato.Cycle Detected.ControllerConnectionDialog$Canale di ingresso Input channelControllerConnectionDialog(Controller di inputInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialog*FUNZIONE DI MAPPATURAMAPPING FUNCTIONControllerConnectionDialogCONTROLLER MIDIMIDI CONTROLLERControllerConnectionDialogVLe periferiche MIDI ricevono eventi MIDI da(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog2CONTROLLER PERSONALIZZATOUSER CONTROLLERControllerConnectionDialogAggiungiAddControllerRackView*Conferma eliminazioneConfirm DeleteControllerRackViewConfermi l'eliminazione? Ci sono connessioni associate a questo controller: non sar possibile ripristinarle.iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackView$Rack di ControllerController RackControllerRackView &Aiuto&HelpControllerView,&Elimina questo plugin&Remove this pluginControllerViewI controller possono automatizzare il valore di una manopola, di uno slider e di altri controlli.QControllers are able to automate the value of a knob, slider, and other controls.ControllerViewControlliControlsControllerViewVInserire il nuovo nome di questo controller&Enter the new name for this controllerControllerView&Rinomina controllerRename controllerControllerViewbClicca qui per abilitare/disabilitare il filtro 1 Click to enable/disable Filter 1DualFilterControlDialogbClicca qui per abilitare/disabilitare il filtro 2 Click to enable/disable Filter 2DualFilterControlDialog Abilita filtro 1Filter 1 enabledDualFilterControlDialog Abilita filtro 2Filter 2 enabledDualFilterControlDialogPassaBasso 2x 2x LowPassDualFilterControlsPassatuttoAllpassDualFilterControlsPassaBanda csg BandPass csgDualFilterControlsPassaBanda czpg BandPass czpgDualFilterControls8Frequenza di taglio Filtro 1Cutoff 1 frequencyDualFilterControls8Frequenza di taglio Filtro 2Cutoff 2 frequencyDualFilterControlsAttiva Filtro 1Filter 1 enabledDualFilterControls"Tipo del Filtro 1 Filter 1 typeDualFilterControls Abilita Filtro 2Filter 2 enabledDualFilterControls"Tipo del Filtro 2 Filter 2 typeDualFilterControls"Guadagno Filtro 1Gain 1DualFilterControls"Guadagno Filtro 2Gain 2DualFilterControlsPassaAltoHiPassDualFilterControlsPassaBassoLowPassDualFilterControlsMixMixDualFilterControlsMoogMoogDualFilterControls NotchNotchDualFilterControls$Risonanza Filtro 1 Q/Resonance 1DualFilterControls$Risonanza Filtro 2 Q/Resonance 2DualFilterControls$RC PassaBanda 12dBRC BandPass 12dBDualFilterControls$RC PassaBanda 24dBRC BandPass 24dBDualFilterControls"RC PassaAlto 12dBRC HighPass 12dBDualFilterControls"RC PassaAlto 24dBRC HighPass 24dBDualFilterControls$RC PassaBasso 12dBRC LowPass 12dBDualFilterControls$RC PassaBasso 24dBRC LowPass 24dBDualFilterControls2Filtro a Formante di VoceVocal Formant FilterDualFilterControlsDecadimentoDecayEffectEffetto attivoEffect enabledEffectGateGateEffect*Bilanciamento Wet/Dry Wet/Dry mixEffect"Effetti abilitatiEffects enabled EffectChain Aggiungi effetto Add effectEffectRackView"CATENA DI EFFETTI EFFECTS CHAINEffectRackView Aggiungi effetto Add effectEffectSelectDialog$Descrizione PluginPlugin descriptionEffectSelectDialog &Aiuto&Help EffectView,&Elimina questo plugin&Remove this plugin EffectViewControlliControls EffectView DECAYDECAY EffectView I plugin di effetti funzionano come una catena di effetti sottoposti al segnale dall'alto verso il basso. L'interruttore On/Off permette di saltare un certo plugin in qualsiasi momento. La manopola Wet/Dry controlla il bilanciamento tra il segnale in ingresso e quello processato che viene emesso dall'effetto. L'ingresso di ogni stadio costituito dall'uscita dello stadio precedente, cos il segnale 'dry' degli effetti sottostanti contiene tutti i precedenti effetti. La manopola Decadimento controlla il tempo per cui il segnale viene processato dopo che le note sono state rilasciate. L'effetto smette di processare il segnale quando questo scende sotto una certa soglia per un certo periodo ti tempo. La manopola imposta questo periodo di tempo. Tempi maggiori richiedono una maggiore potenza del processore, quindi il tempo dovrebbe rimanere basso per la maggior parte degli effetti. necessario aumentarlo per effetti che producono lunghi periodi di silenzio, ad es. i delay. La manopola Gate regola la soglia sotto la quale l'effetto smette di processare il segnale. Il conteggio del tempo di silenzio necessario inizia non appena il sengale processato scende sotto la soglia specificata. Il pulsante Controlli apre una finestra per modificare i parametri dell'effetto. Con il click destro si apre un menu conestuale che permette di cambiare l'ordine degli effetti o di eliminarli.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectViewGATEGATE EffectView Gate:Gate: EffectView,Sposta verso il &basso Move &down EffectView(Sposta verso l'&altoMove &up EffectView On/OffOn/Off EffectViewLa manopola Decadimento controlla quanto silenzio deve esserci prima che il plugin si fermi. Valori pi piccoli riducono il carico del processore ma rischiano di troncare la parte finale degli effetti di delay.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectViewLa manopola Gate controlla il livello del segnale che considerato 'silenzio' per decidere quando smettere di processare i segnali.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewLa manopola Wet/Dry imposta il rapporto tra il segnale in ingresso e la quantit di effetto udibile in uscita.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView Tempo:Time: EffectView>Abilita o disabilita l'effetto.Toggles the effect on or off. EffectViewW/DW/D EffectView>Livello del segnale modificato: Wet Level: EffectViewAttaccoAttackEnvelopeAndLfoParametersDecadimentoDecayEnvelopeAndLfoParametersFreq x 100 Freq x 100EnvelopeAndLfoParametersMantenimentoHoldEnvelopeAndLfoParameters Attacco dell'LFO LFO AttackEnvelopeAndLfoParameters(Modulazione dell'LFOLFO ModulationEnvelopeAndLfoParameters2Ritardo iniziale dell'LFO LFO PredelayEnvelopeAndLfoParameters*Forma d'onda dell'LFOLFO Wave ShapeEnvelopeAndLfoParameters"Velocit dell'LFO LFO speedEnvelopeAndLfoParameters2Modula la quantit di EnvModulate Env-AmountEnvelopeAndLfoParametersModulazione ModulationEnvelopeAndLfoParameters Ritardo inizialePredelayEnvelopeAndLfoParametersRilascioReleaseEnvelopeAndLfoParametersSostegnoSustainEnvelopeAndLfoParametersQ.TAMTEnvelopeAndLfoViewATTATTEnvelopeAndLfoViewAttacco:Attack:EnvelopeAndLfoViewXCliccando qui si ha un'onda a dente di sega.&Click here for a saw-wave for current.EnvelopeAndLfoViewPCliccando qui si ha un'onda sinusoidale.Click here for a sine-wave.EnvelopeAndLfoViewPCliccando qui si ottiene un'onda quadra.Click here for a square-wave.EnvelopeAndLfoViewZCliccando qui si ottiene un'onda triangolare.Click here for a triangle-wave.EnvelopeAndLfoView(Cliccando qui possibile definire una forma d'onda personalizzata. Successivamente possibile trascinare un file di campione nel grafico dell'LFO.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoViewBClicca qui per un'onda randomica.Click here for random wave.EnvelopeAndLfoViewCliccando qui la frequenza di questo LFO viene moltiplicata per 100.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewvCliccando qui questo LFO controlla la quantit di envelope.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewRITDELEnvelopeAndLfoViewDecadimento:Decay:EnvelopeAndLfoViewl possibile trascinare un campione in questa finestra.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoViewMANTHOLDEnvelopeAndLfoViewSuggerimentoHintEnvelopeAndLfoViewMantenimento:Hold:EnvelopeAndLfoView4Ritardo iniziale dell'LFO: LFO predelay:EnvelopeAndLfoView$Velocit dell'LFO: LFO speed:EnvelopeAndLfoView"Attacco dell'LFO: LFO- attack:EnvelopeAndLfoView>MODULA LA QUANTITA' DI ENVELOPEMODULATE ENV-AMOUNTEnvelopeAndLfoView0Quantit di modulazione:Modulation amount:EnvelopeAndLfoView"Ritardo iniziale: Predelay:EnvelopeAndLfoViewRILRELEnvelopeAndLfoViewRilascio:Release:EnvelopeAndLfoViewVELSPDEnvelopeAndLfoViewSOSTSUSTEnvelopeAndLfoViewSostegno:Sustain:EnvelopeAndLfoView6Questa manopola imposta il tempo di attaco dell'LFO selezionato. Pi grande questo valore pi tempo l'LFO impiegher per raggiungere la massima ampiezza.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewQuesta manopola imposta il tempo di attacco dell'envelope selezionato. Pi grande questo valore pi tempo passa prima di raggiungere il livello di attacco. Scegliere un valore contenuto per strumenti come pianoforti e un valore grande per gli archi.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewQuesta manopola imposta il tempo di decdimento dell'envelope selezionato. Pi grande questo valore pi lentamente l'envelope decadr dal livello di attacco a quello di sustain. Scegliere un valore piccolo per strumenti come i pianoforti.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewQuesta manopola imposta il tempo di mantenimento dell'envelope selezionato. Pi grande questo valore pi a lungo l'envelope manterr il livello di attacco prima di cominciare a scendere verso il livello di sostegno.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewQuesta manopola imposta la quantit di modulazione dell'LFO selezionato. Pi grande questo valore pi la grandezza selezionata (ad es. il volume o la frequenza di taglio) sar influenzata da questo LFO.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewQuesta manopola imposta la quantit di modulazione dell'envelope selezionato. Pi grande questo valore, pi la grandezza corrispondente (ad es. il volume o la frequenza di taglio) sar influenzata da questo envelope.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView2Questa manopola imposta il ritardo iniziale dell'envelope selezionato. Pi grande questo valore pi tempo passer prima che l'envelope effettivo inizi.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView"Questa manopola imposta il ritardo iniziale dell'LFO selezionato. Pi grande questo valore pi tempo passer prima che l'LFO inizi a oscillare.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewQuesta manopola imposta il tempo di rilascio dell'anvelope selezionato. Pi grande questo valore pi tempo l'envelope impiegher per scendere dal livello di sustain a zero. Scegliere un valore grande per strumenti dal suono morbido, come gli archi.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoView"Questa manopola imposta la velocit dell'LFO selezionato. Pi grande questo valore pi velocemente l'LFO osciller e pi veloce sar l'effetto.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView^Questa manopola imposta il livello di sostegno dell'envelope selezionato. Pi grande questo valore pi sar alto il livello che l'envelope manterr prima di scendere a zero.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView`controlla la quantit di envelope con questo LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoViewPmoltiplica la frequenza dell'LFO per 100multiply LFO-frequency by 100EnvelopeAndLfoView 128 KBit/sExportProjectDialog16 Bit IntegerExportProjectDialog 160 KBit/sExportProjectDialog 192 KBit/sExportProjectDialog 192000 HzExportProjectDialog1x (Nessuna) 1x (None)ExportProjectDialog 256 KBit/sExportProjectDialog2xExportProjectDialog 32 Bit FloatExportProjectDialog 320 KBit/sExportProjectDialog44100 HzExportProjectDialog48000 HzExportProjectDialog4xExportProjectDialog 64 KBit/sExportProjectDialog88200 HzExportProjectDialog8xExportProjectDialog96000 HzExportProjectDialogBitrate:Bitrate:ExportProjectDialogAnnullaCancelExportProjectDialog Risoluzione Bit:Depth:ExportProjectDialog\Esporta come loop (rimuove il silenzio finale)#Export as loop (remove end silence)ExportProjectDialog&Esporta il progettoExport projectExportProjectDialogFormato file: File format:ExportProjectDialogInterpolazione:Interpolation:ExportProjectDialogCodificaOutputExportProjectDialog>Oversampling (usare con cura!):Oversampling (use with care!):ExportProjectDialogNon tutti i parametri si applicano nella creazione di tutti i formati.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog(Impostazioni qualitQuality settingsExportProjectDialog6Frequenza di campionamento: Samplerate:ExportProjectDialog0Sinc Best (molto lento!)Sinc Best (very slow!)ExportProjectDialog Sinc FastestExportProjectDialog.Sinc Medium (suggerito)Sinc Medium (recommended)ExportProjectDialog IniziaStartExportProjectDialogZero Order HoldExportProjectDialogBrowserBrowser FileBrowser0--- File di fabbrica ------ Factory files ---FileBrowserTreeWidget(Caricamento campioneLoading sampleFileBrowserTreeWidgetNUsa in una nuova traccia nel B+B Editor'Open in new instrument-track/B+B EditorFileBrowserTreeWidgetPUsa in una nuova traccia nel Song-Editor(Open in new instrument-track/Song-EditorFileBrowserTreeWidgetlAttendere, stiamo caricando il file per l'anteprima...*Please wait, loading sample for preview...FileBrowserTreeWidget`Sostituisci questo strumento alla traccia attivaSend to active instrument-trackFileBrowserTreeWidget &Aiuto&HelpFxLineLQuantit di segnale inviata dal canaleChannel send amountFxLine$Sposta a &sinistra Move &leftFxLine Sposta a $destra Move &rightFxLineR&imuovi canaleR&emove channelFxLine Rinomina &canaleRename &channelFxLineIl canale FX riceve input da uno o pi tracce strumentali. Il segnale cos ricevuto pu essere girato ad altri canali FX. LMMS eviter che si creino cicli infiniti non permettendo la creazione di connessioni pericolose in tal senso. Per inviare il suono di un canale ad un altro, seleziona il canale FX e premi sul pulsante "send" su un altro canale a cui vuoi inviare segnale. La manopola sotto il pulsante send controlla il livello di segnale che viene ricevuto dal canale. Puoi rimuovere e muovere i canali con il men contestuale, cliccando con il tasto destro su un canale FX.^The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. FxLine FX %1FX %1FxMixer MasterMasterFxMixerTInserire il nuovo nome di questo canale FX&Enter the new name for this FX channel FxMixerViewMixer FXFX-Mixer FxMixerView*Rinomina il canale FXRename FX channel FxMixerViewVolume FX %1 FX Fader %1FxMixerView::FxChannelViewMutoMuteFxMixerView::FxChannelView2Silenzia questo canale FXMute this FX channelFxMixerView::FxChannelView\Quantit da mandare dal canale %1 al canale %2,Amount to send from channel %1 to channel %2FxRouteArpeggioArpeggioInstrumentFunctionArpeggio.Direzione dell'arpeggioArpeggio directionInstrumentFunctionArpeggio$Gate dell'arpeggio Arpeggio gateInstrumentFunctionArpeggio$Modo dell'arpeggio Arpeggio modeInstrumentFunctionArpeggio,Ampiezza dell'arpeggioArpeggio rangeInstrumentFunctionArpeggio&Tempo dell'arpeggio Arpeggio timeInstrumentFunctionArpeggio Tipo di arpeggio Arpeggio typeInstrumentFunctionArpeggioGiDownInstrumentFunctionArpeggioGi e su Down and upInstrumentFunctionArpeggio LiberoFreeInstrumentFunctionArpeggioCasualeRandomInstrumentFunctionArpeggioOrdinatoSortInstrumentFunctionArpeggioSincronizzatoSyncInstrumentFunctionArpeggioSuUpInstrumentFunctionArpeggioSu e gi Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGGIOARPEGGIOInstrumentFunctionArpeggioView^Un arpeggio un modo di suonare alcuni strumenti (pizzicati in particolare), che rende la musica pi viva. Le corde di tali strumenti (ad es. un'arpa) vengono pizzicate come accordi. L'unica differenza che ci viene fatto in ordine sequenziale, in modo che le note non vengano suonate allo stesso tempo. Arpeggi tipici sono quelli sulle triadi maggiore o minore, ma ci sono molte altre possibilit tra le quali si pu scegliere.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView&Gate dell'arpeggio:Arpeggio gate:InstrumentFunctionArpeggioView.Ampiezza dell'arpeggio:Arpeggio range:InstrumentFunctionArpeggioView(Tempo dell'arpeggio:Arpeggio time:InstrumentFunctionArpeggioView"Tipo di arpeggio:Chord:InstrumentFunctionArpeggioViewDirezione: Direction:InstrumentFunctionArpeggioViewGATEGATEInstrumentFunctionArpeggioView Modo:Mode:InstrumentFunctionArpeggioViewAMPIEZZARANGEInstrumentFunctionArpeggioView TEMPOTIMEInstrumentFunctionArpeggioViewQuesta manopola imposta il gate dell'arpeggio. Il gate dell'arpeggio specifica la percentuale di ogni nota che deve essere eseguita. In questo modo si possono creare arpeggi particolari, con le note staccate.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewQuesta manopola imposta l'ampiezza in ottave dell'arpeggio. L'arpeggio selezionato verr suonato all'interno del numero di ottave impostato.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewBQuesta manopola imposta l'ampiezza dell'arpeggio in millisecondi. Il tempo dell'arpeggio specifica per quanto tempo ogni nota dell'arpeggio deve essere eseguita.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewottava(e) octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13#913#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking Quinta5InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking 6add96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#119#11InstrumentFunctionNoteStacking9#59#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStacking EoliaAeolianInstrumentFunctionNoteStacking ArabaArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStacking*Ampiezza dell'accordo Chord rangeInstrumentFunctionNoteStackingTipo di accordo Chord typeInstrumentFunctionNoteStackingAccordiChordsInstrumentFunctionNoteStackingCromatica ChromaticInstrumentFunctionNoteStackingDiminuita DiminishedInstrumentFunctionNoteStackingBebop dominanteDominant bebopInstrumentFunctionNoteStacking DoricaDorianInstrumentFunctionNoteStackingEnigmatica EnigmaticInstrumentFunctionNoteStacking.Diminuita semitono-tonoHalf-Whole DiminishedInstrumentFunctionNoteStackingMinore armonicaHarmonic minorInstrumentFunctionNoteStacking Ungherese minoreHungarian minorInstrumentFunctionNoteStackingJap in sen Jap in senInstrumentFunctionNoteStacking LocriaLocrianInstrumentFunctionNoteStacking LidiaLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9#11Maj9#11InstrumentFunctionNoteStacking Maj9#5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStacking Majb5Majb5InstrumentFunctionNoteStackingMaggioreMajorInstrumentFunctionNoteStackingBebop maggiore Major bebopInstrumentFunctionNoteStacking(Pentatonica maggioreMajor pentatonicInstrumentFunctionNoteStackingMinore melodica Melodic minorInstrumentFunctionNoteStacking MinoreMinorInstrumentFunctionNoteStacking$Pentatonica minoreMinor pentatonicInstrumentFunctionNoteStackingMisolidia MixolydianInstrumentFunctionNoteStackingNapoletana NeopolitanInstrumentFunctionNoteStacking"Napoletana minoreNeopolitan minorInstrumentFunctionNoteStackingPhrygolydian PhrygolydianInstrumentFunctionNoteStackingToni interi Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9b5m9b5InstrumentFunctionNoteStacking madd9madd9InstrumentFunctionNoteStacking minb5minb5InstrumentFunctionNoteStacking minoreminorInstrumentFunctionNoteStacking ottavaoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStacking triadetriInstrumentFunctionNoteStacking.Ampiezza degli accordi: Chord range:"InstrumentFunctionNoteStackingView Tipo di accordo:Chord:"InstrumentFunctionNoteStackingViewAMPIEZZARANGE"InstrumentFunctionNoteStackingViewACCORDISTACKING"InstrumentFunctionNoteStackingViewQuesta manopola imposta l'ampiezza degli accordi in ottave. L'accordo selezionato verr eseguito all'interno del numero di ottave impostato.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewottava(e) octave(s)"InstrumentFunctionNoteStackingViewVELOCITY BASE BASE VELOCITYInstrumentMidiIOView CANALECHANNELInstrumentMidiIOView8VELOCITY BASE PERSONALIZZATACUSTOM BASE VELOCITYInstrumentMidiIOView*ABILITA INGRESSO MIDIENABLE MIDI INPUTInstrumentMidiIOView&ABILITA USCITA MIDIENABLE MIDI OUTPUTInstrumentMidiIOViewXPeriferica MIDI da cui ricevere segnali MIDi(MIDI devices to receive MIDI events fromInstrumentMidiIOViewTPeriferica MIDI a cui mandare segnali MIDI#MIDI devices to send MIDI events toInstrumentMidiIOViewNOTEInstrumentMidiIOViewPROGRAMMAPROGRAMInstrumentMidiIOViewSpecifica la normalizzazione della velocity per strumenti MIDI al volume della nota 100%VSpecify the velocity normalization base for MIDI-based instruments at note volume 100%InstrumentMidiIOViewVALOCITYVELOCITYInstrumentMidiIOViewPassaBasso 2x 2x LowPassInstrumentSoundShapingPassatuttoAllpassInstrumentSoundShapingPassaBanda csg BandPass csgInstrumentSoundShapingPassaBanda czpg BandPass czpgInstrumentSoundShaping CUTOFFCUTOFFInstrumentSoundShaping&Frequenza di taglioCutoff frequencyInstrumentSoundShapingEnvelope/LFOEnvelopes/LFOsInstrumentSoundShapingTipo di filtro Filter typeInstrumentSoundShapingPassaAltoHiPassInstrumentSoundShapingPassaBassoLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShaping NotchNotchInstrumentSoundShapingQ/Risonanza Q/ResonanceInstrumentSoundShaping$RC PassaBanda 12dBRC BandPass 12dBInstrumentSoundShaping$RC PassaBanda 24dBRC BandPass 24dBInstrumentSoundShaping"RC PassaAlto 12dBRC HighPass 12dBInstrumentSoundShaping"RC PassaAlto 24dBRC HighPass 24dBInstrumentSoundShaping$RC PassaBasso 12dBRC LowPass 12dBInstrumentSoundShaping$RC PassaBasso 24dBRC LowPass 24dBInstrumentSoundShapingRISORESOInstrumentSoundShapingRisonanza ResonanceInstrumentSoundShaping VOLUMEVOLUMEInstrumentSoundShaping2Filtro a Formante di VoceVocal Formant FilterInstrumentSoundShaping VolumeVolumeInstrumentSoundShapingGli inviluppi, gli LFO e i filtri non sono supportati dallo strumento corrente.HEnvelopes, LFOs and filters are not supported by the current instrument.InstrumentSoundShapingView FILTROFILTERInstrumentSoundShapingViewFREQFREQInstrumentSoundShapingViewQui possibile selezionare il filtro da usare per questa traccia. I filtri sono molto importanti per cambiare le caratteristiche del suono.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRISORESOInstrumentSoundShapingViewRisonanza: Resonance:InstrumentSoundShapingViewOBIETTIVOTARGETInstrumentSoundShapingViewQueste schede contengono envelopes. Sono molto importanti per modificare i suoni, senza contare che sono quasi sempre necessarie per la sintesi sottrattiva. Per esempio se si usa un envelope per il volume, si pu impostare quando un suono avr un certo volume. Si potrebbero voler creare archi dal suono morbido, allora il suono deve iniziare e finire in modo molto morbido; ci si ottiene impostando tempi di attacco e di rilascio ampi. Lo stesso vale per le altre funzioni degli envelope, come il panning, la frequenza di taglio dei filtri e cos via. Bisogna semplicemente giocarci un po'! Si possono ottenere suoni veramente interessanti a partire da un'onda a dente di sega usando soltanto qualche envelope...!_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingViewQuesta manopola imposta il parametro (Q) per la risonanza del filtro selezionato. Il parametro per la risonanza specifica l'ampiezza della campana di frequenze intorno alla frequenza di taglio che devono essere amplificate.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingViewQuesta manopola imposta la frequenza di taglio del filtro. La frequenza di taglio specifica la frequenza a cui viene tagliato il segnate di un filtro. Per esempio un filtro passa-basso taglia tutte le frequenze sopra la frequenza di taglio, mentre un filtro passa-alto taglia tutte le frequenza al di sotto della frequenza di taglio e cos via...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingView*Frequenza del cutoff:cutoff frequency:InstrumentSoundShapingViewNota base Base noteInstrumentTrack0Impostazioni predefiniteDefault presetInstrumentTrackCanale FX FX channelInstrumentTrackPanningPanningInstrumentTrackAltezzaPitchInstrumentTrack.Estenzione dell'altezza Pitch rangeInstrumentTrack VolumeVolumeInstrumentTrackZQuesta manopola imposta il volume del canale. Impostazioni.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowQuesto progetto stato modificato dopo l'ultimo salvataggio. Vuoi salvarlo adesso?OThe current project was modified since last saving. Do you want to save it now? MainWindowAnnullaUndo MainWindowSenza_nomeUntitled MainWindowVersione %1 Version %1 MainWindow VolumiVolumes MainWindowCos' questo? What's this? MainWindow&Directory di lavoroWorking directory MainWindow2Denominatore della misuraMeter Denominator MeterDialog.Numeratore della misuraMeter Numerator MeterDialog TEMPOTIME SIG MeterDialogDenominatore Denominator MeterModelNumeratore Numerator MeterModelPERIFERICADEVICEMidiAlsaRaw::setupWidgetPERIFERICADEVICEMidiAlsaSeq::setupWidgetController MIDIMIDI ControllerMidiController4controller_midi_senza_nomeunnamed_midi_controllerMidiController.Impostazioni incompleteSetup incomplete MidiImportNon hai compilato LMMS con il supporto per SoundFont2 Player, che viene usato per aggiungere suoni predefiniti ai file MIDI importati. Quindi, nessun suono verr riprodotto dopo aver aperto questo file MIDI.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImportNon hai impostato un soundfont di base (Modifica->Impostazioni). Quindi non sar riprodotto alcun suono dopo aver importato questo file MIDI. Prova a scaricare un soundfont MIDI generico, specifica la sua posizione nelle impostazioni e prova di nuovo.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImportPERIFERICADEVICEMidiOss::setupWidgetVelocity base Base velocityMidiPort4Velocity fissa in ingressoFixed input velocityMidiPort(Nota fissa in uscitaFixed output noteMidiPort0Velocity fissa in uscitaFixed output velocityMidiPort$Canale di ingresso Input channelMidiPort*Controller in entrataInput controllerMidiPort0Programma MIDI in uscitaOutput MIDI programMidiPort Canale di uscitaOutput channelMidiPort(Controller in uscitaOutput controllerMidiPort$Ricevi eventi MIDIReceive MIDI-eventsMidiPort"Invia eventi MIDISend MIDI-eventsMidiPortEnv 1 Attacco Env 1 AttackMonstroInstrument"Env 1 Decadimento Env 1 DecayMonstroInstrument$Env 1 Mantenimento Env 1 HoldMonstroInstrument"Env 1 Pre-ritardoEnv 1 Pre-delayMonstroInstrumentEnv 1 Rilascio Env 1 ReleaseMonstroInstrument$Env 1 Inclinazione Env 1 SlopeMonstroInstrumentEnv 1 Sostegno Env 1 SustainMonstroInstrumentEnv 2 Attacco Env 2 AttackMonstroInstrument"Env 2 Decadimento Env 2 DecayMonstroInstrument$Env 2 Mantenimento Env 2 HoldMonstroInstrument"Env 2 Pre-ritardoEnv 2 Pre-delayMonstroInstrumentEnv 2 Rilascio Env 2 ReleaseMonstroInstrument$Env 2 Inclinazione Env 2 SlopeMonstroInstrumentEnv 2 Sostegno Env 2 SustainMonstroInstrumentLFO 1 Attacco LFO 1 AttackMonstroInstrumentLFO 1 Fase LFO 1 PhaseMonstroInstrumentLFO 1 Rate LFO 1 RateMonstroInstrument$LFO 1 Forma d'ondaLFO 1 WaveformMonstroInstrumentLFO 2 Attacco LFO 2 AttackMonstroInstrumentLFO 2 Fase LFO 2 PhaseMonstroInstrumentLFO 2 Rate LFO 2 RateMonstroInstrument$LFO 2 Forma d'ondaLFO 2 WaveformMonstroInstrument0Osc 1 Intonazione GrezzaOsc 1 Coarse detuneMonstroInstrumentDOsc 1 Intonazione precisa sinistraOsc 1 Fine detune leftMonstroInstrument@Osc 1 Intonazione precisa destraOsc 1 Fine detune rightMonstroInstrument&Osc 1 Bilanciamento Osc 1 PanningMonstroInstrument0Osc 1 Profondit impulsoOsc 1 Pulse widthMonstroInstrument@Osc 1 Spostamento di fase stereoOsc 1 Stereo phase offsetMonstroInstrument6Osc 1 Manda sync in discesaOsc 1 Sync send on fallMonstroInstrument4Osc 1 Manda sync in salitaOsc 1 Sync send on riseMonstroInstrumentOsc 1 Volume Osc 1 VolumeMonstroInstrument0Osc 2 Intonazione GrezzaOsc 2 Coarse detuneMonstroInstrumentDOsc 2 Intonazione precisa sinistraOsc 2 Fine detune leftMonstroInstrument@Osc 2 Intonazione precisa destraOsc 2 Fine detune rightMonstroInstrument&Osc 2 Bilanciamento Osc 2 PanningMonstroInstrument@Osc 2 Spostamento di fase stereoOsc 2 Stereo phase offsetMonstroInstrument$Osc 2 Sync pesanteOsc 2 Sync HardMonstroInstrument$Osc 2 Sync inversoOsc 2 Sync ReverseMonstroInstrumentOsc 2 Volume Osc 2 VolumeMonstroInstrument$Osc 2 Forma d'ondaOsc 2 WaveformMonstroInstrument0Osc 3 Intonazione GrezzaOsc 3 Coarse detuneMonstroInstrument&Osc 3 Bilanciamento Osc 3 PanningMonstroInstrument@Osc 3 Spostamento di fase stereoOsc 3 Stereo phase offsetMonstroInstrument:Osc 3 Miscela sub-oscillatoriOsc 3 Sub-oscillator mixMonstroInstrument$Osc 3 Sync pesanteOsc 3 Sync HardMonstroInstrument$Osc 3 Sync inversoOsc 3 Sync ReverseMonstroInstrumentOsc 3 Volume Osc 3 VolumeMonstroInstrument(Osc 3 Forma d'onda 1Osc 3 Waveform 1MonstroInstrument(Osc 3 Forma d'onda 2Osc 3 Waveform 2MonstroInstrument$Modulazione Osc2-3Osc2-3 modulationMonstroInstrumentPW1-Env1MonstroInstrumentPW1-Env2MonstroInstrumentPW1-LFO1MonstroInstrumentPW1-LFO2MonstroInstrument Phs1-Env1MonstroInstrument Phs1-Env2MonstroInstrument Phs1-LFO1MonstroInstrument Phs1-LFO2MonstroInstrument Phs2-Env1MonstroInstrument Phs2-Env2MonstroInstrument Phs2-LFO1MonstroInstrument Phs2-LFO2MonstroInstrument Phs3-Env1MonstroInstrument Phs3-Env2MonstroInstrument Phs3-LFO1MonstroInstrument Phs3-LFO2MonstroInstrument Pit1-Env1MonstroInstrument Pit1-Env2MonstroInstrument Pit1-LFO1MonstroInstrument Pit1-LFO2MonstroInstrument Pit2-Env1MonstroInstrument Pit2-Env2MonstroInstrument Pit2-LFO1MonstroInstrument Pit2-LFO2MonstroInstrument Pit3-Env1MonstroInstrument Pit3-Env2MonstroInstrument Pit3-LFO1MonstroInstrument Pit3-LFO2MonstroInstrumentSeleziona vista Selected viewMonstroInstrument Sub3-Env1MonstroInstrument Sub3-Env2MonstroInstrument Sub3-LFO1MonstroInstrument Sub3-LFO2MonstroInstrument Vol1-Env1MonstroInstrument Vol1-Env2MonstroInstrument Vol1-LFO1MonstroInstrument Vol1-LFO2MonstroInstrument Vol2-Env1MonstroInstrument Vol2-Env2MonstroInstrument Vol2-LFO1MonstroInstrument Vol2-LFO2MonstroInstrument Vol3-Env1MonstroInstrument Vol3-Env2MonstroInstrument Vol3-LFO1MonstroInstrument Vol3-LFO2MonstroInstrumenttATT, o attacco, controlla quanto velocemente l'inviluppo arriva al suo masimmo, misurando questo tempo in millisecondi. 0 vuol dire che il valore massimo viene raggiunto istantaneamente.xATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant.  MonstroViewL'attacco fa s che l'LFO arrivi gradualmente al suo stato da quello della nota suonata.GAttack causes the LFO to come on gradually from the start of the note.  MonstroViewJSeleziona la forma d'onda per l'Osc2."Choose waveform for oscillator 2.  MonstroViewSeleziona la forma d'onda per il primo sub-oscillatore dell'Osc3. L'Osc3 pu interpolare morbidamente tra due forme d'onda diverse.yChoose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms.  MonstroView Seleziona la forma d'onda per il secondo sub-oscillatore dell'Osc3. L'Osc3 pu interpolare morbidamente tra due forme d'onda diverse.zChoose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms.  MonstroView|DEC, o decadimento, controlla in quanto tempo l'inviluppo cade dal suo massimo, misurandolo in missilecondi. Il decadimento effettivo potrebbe essere pi lento se viene alterato il sostegno.DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used.  MonstroViewBFTL e FTR cambiano l'intonazione precisa dell'oscillatore per i canali sinistro e destro rispettivamente. Possono essere usati per creare un'illusione di spazio.FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space.  MonstroViewHOLD controlla per quanto tempo l'inviluppo rimane al suo massimo dopo l'attacco.JHOLD controls how long the envelope stays at peak after the attack phase.  MonstroViewSync potente: ogni volta che l'oscillatore siceve un segnale di sync dall'Osc1, la sua fase viene resettata alla sua origine.Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is.  MonstroViewOltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2. AM vuol dire modulazione di amplificazione: quella dell'Osc3 (il suo volume) modulata dall'output dell'Osc2.In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2.  MonstroViewOltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2. FM vuol dire modulazione di frequenza: quella dell'Osc3 (la sua altezza) modulata dall'Osc2. Questa modulazione implementata come una modulazione di fase, in modo da avere una frequenza risultate pi stabile di una FM pura.WIn addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation.  MonstroViewOltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2. La modalit Mix non produce nessuna modulazione: i due oscillatori sono semplicemente miscelati tra di loro.In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together.  MonstroView8Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'outpit dell'Osc2. PM la modulazione di fase: quella dell'Osc3 modulata dall'Osc2. La differenza con la modulazione di frequenza consiste nel fatto che in quella i cambiamenti di fase non sono cumulativi.In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative.  MonstroViewVista Matrice Matrix view MonstroView2Mescola l'Osc2 con l'Osc3Mix Osc2 with Osc3 MonstroViewXModula l'amplificazione dell'Osc3 con l'Osc2$Modulate amplitude of Osc3 with Osc2 MonstroViewPModula la frequenza dell'Osc3 con l'Osc2$Modulate frequency of Osc3 with Osc2 MonstroViewFModula la fase dell'Osc3 con l'Osc2 Modulate phase of Osc3 with Osc2 MonstroViewVista operatoriOperators view MonstroView\PHS controlla lo spostamento di fase dell'LFO.*PHS controls the phase offset of the LFO.  MonstroViewPRE, o pre-ritardo, ritarda l'inizio dell'inviluppo dal momento in cui la nota viene suonata. 0 vuol dire nessun ritardo.bPRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay.  MonstroViewREL, o rilascio, controlla il tempo di rilascio della nota, misurandola in millisecondi. Se l'inviluppo non si trova al suo valore massimo quando la nota rilasciata, il rilascio potrebbe durare di meno.REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released.  MonstroViewIl rate setta la velocit dell'LFO, misurata in millisecondi per ciclo. Pu essere sincronizzata al tempo nel suo men a tendina.\Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo.  MonstroViewSync di inversione: ogni volta che l'oscillatore riceve un segnale di sync dall'Osc1, l'amplificazione dell'oscillatore viene invertita.Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted.  MonstroView8SUS, o sostegno, controlla il livello di sostegno dell'inviluppo. La fase di decadimento non scender oltre questo livello fino a che la nota viene suonata.SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held.  MonstroViewtSelezioa la forma d'onda per l'LFO 1. Vi sono due forme speciali: "Random" e "Random morbido" sono onde speciali che producono un aoutup randomico, dove il rate dell'LFO controlla quanto spesso lo stato dell'LFO cambia. La versione morbila interpola tra questi stati con una interpolazione a coseno. Queste modalit possono essere usate per ridare "vita" ai toi preset o aggiungere un po' di quella imprevedibilit degli stumenti analogici...wSelect the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability...  MonstroViewtSelezioa la forma d'onda per l'LFO 2. Vi sono due forme speciali: "Random" e "Random morbido" sono onde speciali che producono un aoutup randomico, dove il rate dell'LFO controlla quanto spesso lo stato dell'LFO cambia. La versione morbila interpola tra questi stati con una interpolazione a coseno. Queste modalit possono essere usate per ridare "vita" ai toi preset o aggiungere un po' di quella imprevedibilit degli stumenti analogici...wSelect the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability...  MonstroViewManda sync in discesa: se abilitato, il segnale di sync viene mandato ogni volta che lo stato dell'oscillatore 1 cambia da alto a basso, per esempio se l'amplificazione passa da 1 a -1. Sia l'altezza che la fase che i'mpulso possono interessare il tempo dei sync, ma il volume no. I segnali di sync vengono trattati indipendentemente per i canali destro e sinistro.]Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels.  MonstroViewManda sync in salita: se abilitato, il segnale di sync viene mandato ogni volta che lo stato dell'oscillatore 1 cambia da basso ad alto, per esempio se l'amplificazione passa da -1 a 1. Sia l'altezza che la fase che i'mpulso possono interessare il tempo dei sync, ma il volume no. I segnali di sync vengono trattati indipendentemente per i canali destro e sinistro.]Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels.  MonstroViewLa manopola CRS cambia l'intonazione dell'oscillatore 1 per semitoni.CThe CRS knob changes the tuning of oscillator 1 in semitone steps.  MonstroViewLa manopola CRS cambia l'intonazione dell'oscillatore 2 per semitoni.CThe CRS knob changes the tuning of oscillator 2 in semitone steps.  MonstroViewLa manopola CRS cambia l'intonazione dell'oscillatore 3 per semitoni.CThe CRS knob changes the tuning of oscillator 3 in semitone steps.  MonstroView\La vista matrice contiene la matrice di modulazione. Qui puoi definire le relazioni di modulazione tra i vari operatori: ogni operatore udibile (gli oscillatori da 1 a 3) ha 3-4 propriet che possono essere modulate da qualsiasi modulatore. L'utilizzo eccessivo di modulazioni pu appesantire la CPU. La vista divisa in obiettivi di modulazione, raggruppati dagli oscillatori. Possono essere modulati il volume, l'altezza, la fase, la larghezza dell'impulso e il rateo del sottooscillatorie. Nota: alcune propriet sono esclusive di un solo oscillatore. Ogni propriet modulabile ha 4 manopole, una per ogni modulatore. Sono tutti a 0 di default, ossia non vi modulazione. Il massimo della modulazione si ottiene portando una manopola a 1. I valori negativi invertono l'effetto che avrebbero quelli positivi.The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed.  MonstroViewLa vista operatori contiene tutti gli operatori. Vi sono sia operatori udibili (oscillatori), che silenziosi, o modulatori: LFO e inviluppi. Usa il "Cos' questo?" su tutte le manopole di questa vista per avere informazioni specifiche su di esse.;The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way.  MonstroViewDLa manopola PW controlla la profondit dell'impulso, conosciuta anche come duty cycle, dell'oscillatore 1. L'oscillatore 1 un oscillatore d'onda a impulso digitale, non produce un output con banda limitata, il che vuol dire che possibile usarlo come un oscillatore udibile ma ci creer aliasing. Puoi anche usarlo come fonte silenziosa di un segnale di sincronizzazione, che sincronizza gli altri due oscillatori.qThe PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3.  MonstroViewLa manopola SPO altera la differenza in fase tra i canali sinistro e destro. Una differenza maggiore crea un'immagine stereo pi larga.The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image.  MonstroViewLa manopola SUB cambia le qualtit per la miscela tra i due sub-oscillatori.#The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way.  MonstroViewSLOPE, o inclinazione, controlla la curva (o la forma) dell'inviluppo. Un valore pari a 0 lascia le salite e le discese come linee dritte. Valori negativi creeranno dei movimenti che partono lentamente, arrivano a un picco ripido, e poi terminano di nuovo lentamente. Valori positivi daranno curve che salgono e scendono velocemente, ma si fermano ai picchi.The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks.  MonstroView6Intonazione grezza Canale 1Channel 1 Coarse detune NesInstrument.Duty cycle del Canale 1Channel 1 Duty cycle NesInstrument8Lunghezza inviluppo Canale 1Channel 1 Envelope length NesInstrument4Quantit di sweep Canale 1Channel 1 Sweep amount NesInstrument4Velocit di sweep Canale 1Channel 1 Sweep rate NesInstrumentVolume Canale 1Channel 1 Volume NesInstrument6Intonazione grezza Canale 2Channel 2 Coarse detune NesInstrument.Duty cycle del Canale 2Channel 2 Duty cycle NesInstrument8Lunghezza inviluppo Canale 2Channel 2 Envelope length NesInstrument4Quantit di sweep Canale 2Channel 2 Sweep amount NesInstrument4Velocit di sweep Canale 2Channel 2 Sweep rate NesInstrumentVolume Canale 2Channel 2 Volume NesInstrument6Intonazione grezza Canale 3Channel 3 Coarse detune NesInstrumentVolume Canale 3Channel 3 Volume NesInstrument8Lunghezza inviluppo Canale 4Channel 4 Envelope length NesInstrument2Frequenza rumore Canale 4Channel 4 Noise frequency NesInstrumentDFrequenza rumore di sweep Canale 4Channel 4 Noise frequency sweep NesInstrumentVolume Canale 4Channel 4 Volume NesInstrument"Volume principale Master volume NesInstrumentVibratoVibrato NesInstrument,Modulazione di tipo %1Modulation type %1OscillatorObject$Intonazione osc %1Osc %1 coarse detuningOscillatorObjectFIntonazione precisa osc %1 sinistraOsc %1 fine detuning leftOscillatorObjectBIntonazione precisa osc %1 destraOsc %1 fine detuning rightOscillatorObject Armoniche Osc %1Osc %1 harmonicOscillatorObjectPanning osc %1Osc %1 panningOscillatorObject.Scostamento fase osc %1Osc %1 phase-offsetOscillatorObject<Intonazione fase stereo osc %1Osc %1 stereo phase-detuningOscillatorObjectVolume osc %1 Osc %1 volumeOscillatorObject&Forma d'onda Osc %1Osc %1 wave shapeOscillatorObject&Forma d'onda osc %1Osc %1 waveformOscillatorObjectClicca qui per aprire un altro file di patch. Le impostazioni di ripetizione e intonazione non vengono reimpostate.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewQui puoi scegliere la modalit di ripetizione. Se abilitata, PatMan user l'informazione sulla ripetizione disponibile nel file.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewQui puoi scegliere la modalit di intonazione. Se abilitata, PatMan intoner il campione alla frequenza della nota.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanViewRipetizioneLoop PatmanView(Modalit ripetizione Loop mode PatmanView.Nessun file selezionatoNo file selected PatmanView&Apri un'altra patchOpen other patch PatmanView$Apri file di patchOpen patch file PatmanView*File di patch (*.pat)Patch-Files (*.pat) PatmanViewIntonazioneTune PatmanView(Modalit intonazione Tune mode PatmanViewAggiungi note Add steps PatternViewCambia nome Change name PatternView,Cancella tutte le noteClear all notes PatternView&Apri nel piano-rollOpen in piano-roll PatternViewElimina note Remove steps PatternView"Reimposta il nome Reset name PatternViewun doppio click apre questo pattern nel piano-roll la rotellina del mouse impostare il volume delle noteWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewA causa di un bug nelle versioni precedenti di LMMS, i controller dei picchi potrebbero non essere connessi come dovuto. Assicurati che i controller dei picchi siano connessi e salva questo file di nuovo. Ci scusiamo per gli inconvenienti causati.Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.PeakController*Controller dei picchiPeak ControllerPeakController:Bug del controller dei picchiPeak Controller BugPeakController&Controller dell'LFOLFO ControllerPeakControllerDialog PICCOPEAKPeakControllerDialogQ.TAMNT!PeakControllerEffectControlDialogATCCATCK!PeakControllerEffectControlDialog6Moltiplicatore di quantit:Amount Multiplicator:!PeakControllerEffectControlDialogAttacco:Attack:!PeakControllerEffectControlDialogBASEBASE!PeakControllerEffectControlDialog"Quantit di base: Base amount:!PeakControllerEffectControlDialogDCADDCAY!PeakControllerEffectControlDialogMOLTMULT!PeakControllerEffectControlDialog0Quantit di modulazione:Modulation amount:!PeakControllerEffectControlDialogRilascio:Release:!PeakControllerEffectControlDialogValore Assoluto Abs ValuePeakControllerEffectControls:Moltiplicatore della quantitAmount MultiplicatorPeakControllerEffectControlsAttaccoAttackPeakControllerEffectControlsValore di base Base valuePeakControllerEffectControls.Quantit di modulazioneModulation amountPeakControllerEffectControls"Silenzia l'output Mute outputPeakControllerEffectControlsRilascioReleasePeakControllerEffectControlsCliccando qui viene attivata la modalit intonazione. Puoi cliccare una nota per aprire la finestra di automazione dell'intonazione. Puoi usare questa modalit per fare uno slide da una nota ad un'altra. Puoi anche premere Shift+T per attivare questa modalit.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollCliccando qui si attiva la modalit disegno. In questa modalit possibile aggiungere e spostare singoli valori. Questa la modalit predefinita, che viene usata la maggior parte del tempo. Questa modalit si attiva anche premendo la combinazione di tasti 'Shift+D'. Tieni premuto Ctfl per andare temporaneamente in modalit selezione.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRollrCliccando qui si attiva la modalit cancellazione. In questa modalit possibile cancellare singoli valori. Questa modalit si attiva anche premendo la combinazione di tasti 'Shift+E'.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRollrCliccando qui viene attivata la modalit selezione. Puoi selezionare le note. Puoi anche tenere premuto Ctrl durante la modalit disegno per usare la modalit selezione temporaneamente.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRollCliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRoll.Cliccando qui le note selezionate verranno copiate negli appunti. possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll0Cliccando qui le note selezionate verranno spostate negli appunti. possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll&Cliccando qui si riproduce il pattern selezionato. Questo utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRollCliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern e in seguito le si potr riprodurre e modificare.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRoll>Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern, sentendo contemporaneamente la canzone o la traccia BB in sottofondo.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRolltCliccando qui si ferma la riproduzione del pattern attivo./Click here to stop playback of current pattern. PianoRollDCopia le note selezionate (Ctrl+C)Copy selected notes (Ctrl+C) PianoRollFTaglia le note selezionate (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll>Modalit intonanzione (Shift+T)Detune mode (Shift+T) PianoRoll4Modalit disegno (Shift+D)Draw mode (Shift+D) PianoRoll@Modalit cancellazione (Shift+E)Erase mode (Shift+E) PianoRollUltima nota Last note PianoRollTi permette di selezionare un accordo che LMMS pu scriviere o evidenziare. Trovi tutti gli accordi pi comuni in questo men a tendina. Dopo averne selezionato uno, clicca dove vuoi per posizionarlo, oppure fai tasto destro sulla tastiera virtuale per evidenziare l'accordo. Per tornare alla scrittura per singola nota, devi selezionare '-Accordi' in questo men.lLet you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. PianoRoll6Evidenza l'accordo correnteMark current chord PianoRoll4Evidenza la scala correnteMark current scale PianoRollbEvidenza (o togli evidenziazione) questo semitonoMark/unmark current semitone PianoRoll- AccordiNo chord PianoRoll- ScaleNo scale PianoRollPanning Note Note Panning PianoRollVolume Note Note Volume PianoRollNote lock Note lock PianoRoll:Bilanciamento: %1% a sinistraPanning: %1% left PianoRoll6Bilanciamento: %1% a destraPanning: %1% right PianoRoll.Bilanciamento: centratoPanning: center PianoRollHIncolla le note selezionate (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRollPiano-Roll - %1Piano-Roll - %1 PianoRoll6Piano-Roll - nessun patternPiano-Roll - no pattern PianoRoll`Riproduci/metti in pausa questo pattern (Spazio)"Play/pause current pattern (Space) PianoRollPInserire un valore compreso tra %1 e %2:+Please enter a new value between %1 and %2: PianoRollrAprire un pattern con un doppio-click sul pattern stesso!/Please open a pattern by double-clicking on it! PianoRollbRegistra note da una periferica/canale piano MIDI+Record notes from MIDI-device/channel-piano PianoRollRegistra note da una periferica MIDI/canale piano mentre la traccia o la BB track in riproduzioneJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll8Modalit selezione (Shift+S)Select mode (Shift+S) PianoRoll`Ferma la riproduzione di questo pattern (Spazio)'Stop playing of current pattern (Space) PianoRollla 'Q' sta per quantizzazione, e controlla la lunghezza minima di modifica della nota. Con quantit minori, puoi scrivere note pi piccole nel Piano Roll, o punti di controllo pi precisi nell'Editor di Automazione.The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. PianoRollQuesta funzionalit connessa al men contestuale della tastiera viruale a sinistra. Dopo aver scelto la scala in questo men a tendina, puoi cliccare con il tasto destro sulla nota desiderata nella tastiera, e selezionare 'Evidenza la scala corrente'. LMMS evidenzier tutte le note che compongono la scala selezionata partendo dalla nota selezionata come tonica!pThe feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! PianoRollControlla l'ingrandimento di un asse. Normalmente, l'ingrandimento dev'essere adatto alle note pi piccole che si sta scrivendo.This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes.  PianoRollPuoi selezionare la grandezza delle nuove note. 'Ultima nota' significa che LMMS user la lunghezza dell'ultima nota modificata~This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited PianoRoll:Togli tutte le evidenziazioni Unmark all PianoRollVolume: %1% Volume: %1% PianoRollNota base Base note PianoViewBErrore nel caricamento del pluginError while loading pluginPlugin\Non stato possibile caricare il plugin "%1"!Failed to load plugin "%1"!PluginjIl plugin LMMS %1 non ha una descrizione chiamata %2!:LMMS plugin %1 does not have a plugin descriptor named %2!Plugin$Plugin non trovatoPlugin not foundPluginIl plugin "%1" non stato trovato o non stato possibile caricarlo! Motivo: "%2"AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"PluginJFile in formato OGG compresso (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer File WAV (*.wav)WAV-File (*.wav)ProjectRendererLaAQObjectLa#A#QObjectLabAbQObjectSiBQObjectSibBbQObjectDoCQObjectDo#C#QObjectReDQObjectRe#D#QObjectDobDbQObjectMiEQObjectMibEbQObjectFa#F#QObjectFabFbQObjectSolGQObjectSol#G#QObjectSolbGbQObject&Canali in ingresso: Channels In: QWidget"Canali in uscita:Channels Out: QWidgetCopyright: Copyright: QWidget File:File: QWidgetFile: %1File: %1QWidget In Place Broken:In Place Broken: QWidgetAutore:Maker: QWidget Nome:Name: QWidgetNoNoQWidget.Abilitato al Real Time:Real Time Capable: QWidget&Richiede Real Time:Requires Real Time: QWidgetSYesQWidget0File AIFF (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBufferFile AU (*.au)AU-Files (*.au) SampleBufferTutti i file audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)MAll Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleBuffer*File DrumSynth (*.ds)DrumSynth-Files (*.ds) SampleBuffer$File FLAC (*.flac)FLAC-Files (*.flac) SampleBuffer File OGG (*.ogg)OGG-Files (*.ogg) SampleBufferApri file audioOpen audio file SampleBuffer File RAW (*.raw)RAW-Files (*.raw) SampleBuffer$File SPEEX (*.spx)SPEEX-Files (*.spx) SampleBuffer File VOC (*.voc)VOC-Files (*.voc) SampleBuffer"File wave (*.wav)Wave-Files (*.wav) SampleBuffer CopiaCopy SampleTCOView TagliaCut SampleTCOViewDElimina (tasto centrale del mouse)Delete (middle mousebutton) SampleTCOViewvAttiva/disattiva la modalit muta (<Ctrl> + tasto centrale)#Mute/unmute ( + middle click) SampleTCOViewIncollaPaste SampleTCOView Set/clear recordSet/clear record SampleTCOViewZFare doppio click per selezionare il campionedouble-click to select sample SampleTCOView&Traccia di campione Sample track SampleTrack VolumeVolume SampleTrack$Volume del canale:Channel volume:SampleTrackView(Volume della traccia Track volumeSampleTrackViewVOLVOLSampleTrackViewFAggiungi una traccia di automazioneAdd automation-track SongEditor,Aggiungi beat/basslineAdd beat/bassline SongEditor8Aggiungi traccia di campioneAdd sample-track SongEditorRCliccando qui si riproduce l'intera canzone. La riproduzione inizier alla posizione attuale del segnaposto (verde). possibile spostarlo anche durante la riproduzione.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorCliccando qui si ferma la riproduzione della canzone. Il segnaposto verr portato all'inizio della canzone.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditorfImpossibile aprire il file %1 per la scrittura. Probabilmente non disponi dei permessi necessari alla scrittura di questo file. Assicurati di avere tali permessi e prova di nuovo.Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditorHNon stato possibile aprire il fileCould not open file SongEditorZImpossibile aprire il file %1. Probabilmente non disponi dei permessi necessari alla sua lettura. Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor8Impossibile scrivere il fileCould not write file SongEditor Modalit disegno Draw mode SongEditorLModalit modifica (seleziona e sposta)Edit mode (select and move) SongEditorErrore nel file Error in file SongEditor0Modalit ad alta qualitHigh quality mode SongEditor$Altezza principale Master pitch SongEditor"Volume principale Master volume SongEditor:Riproduci la canzone (Spazio)Play song (Space) SongEditorRRegistra campioni da una periferica audio Record samples from Audio-device SongEditorRegistra campioni da una periferica audio mentre la canzone o la BB track sono in riproduzione?Record samples from Audio-device while playing song or BB track SongEditorSong-Editor Song-Editor SongEditorXFerma la riproduzione della canzone (Spazio)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorIl file %1 sembra contenere errori, quindi non pu essere caricato.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditor8Il tempo della canzone specificato in battiti al minuto (BPM). Per cambiare il tempo della canzone bisogna cambiare questo valore. Ogni marcatore ha 4 battiti, pertanto il tempo in BPM specifica quanti marcatori / 4 verranno riprodotti in un minuto (o quanti marcatori in 4 minuti).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor&Valore: %1 semitoniValue: %1 semitones SongEditorValore: %1% Value: %1% SongEditor$altezza principale master pitch SongEditor"volume principale master volume SongEditor&tempo della canzone tempo of song SongEditorAsse Y lineare Linear Y axisSpectrumAnalyzerControlDialogSpettro lineareLinear spectrumSpectrumAnalyzerControlDialog&Modalit del canale Channel modeSpectrumAnalyzerControlsAsse Y lineare Linear Y axisSpectrumAnalyzerControlsSpettro lineareLinear spectrumSpectrumAnalyzerControls &Aiuto&Help TempoSyncKnobSedicesimo 16th note TempoSyncKnobTrentaduesimo 32nd note TempoSyncKnob Ottavo8th note TempoSyncKnobPersonalizzatoCustom  TempoSyncKnob"Personalizzato... Custom... TempoSyncKnobOtto battiti Eight beats TempoSyncKnobUna met Half note TempoSyncKnobNon in SyncNo Sync TempoSyncKnob Quarto Quarter note TempoSyncKnob$In sync con 16simiSynced to 16th Note TempoSyncKnob$In sync con 32simiSynced to 32nd Note TempoSyncKnob$In sync con ottaviSynced to 8th Note TempoSyncKnob0In sync con otto battitiSynced to Eight Beats TempoSyncKnob(In sync con un mezzoSynced to Half Note TempoSyncKnob$In sync con quartiSynced to Quarter Note TempoSyncKnob*In sync con un interoSynced to Whole Note TempoSyncKnobSync del tempo Tempo Sync TempoSyncKnobUn intero Whole note TempoSyncKnobbClicca per cambiare l'unit di tempo visualizzataclick to change time unitsTimeDisplayWidgetAnnullaCancelTrackContainerBNon stato possibile trovare un filtro per importare il file %1. necessario convertire questo file in un formato supportato da LMMS usando un altro programma.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainerNNon stato possibile importare il fileCouldn't import fileTrackContainerHNon stato possibile aprire il fileCouldn't open fileTrackContainer4Non stato possibile aprire il file %1 in lettura. Assicurarsi di avere i permessi in lettura per il file e per la directory che lo contiene e riprovare!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer8Importazione del file FLP...Importing FLP-file...TrackContainer:Importazione del file MIDI...Importing MIDI-file...TrackContainer6Caricamento del progetto...Loading project...TrackContainerAttendere...Please wait...TrackContainer>Miscelare gli oscillatori 1 e 2Mix output of oscillator 1 & 2TripleOscillatorView>Miscelare gli oscillatori 2 e 3Mix output of oscillator 2 & 3TripleOscillatorView0Intonazione dell'osc %1:Osc %1 coarse detuning:TripleOscillatorViewHIntonazione precisa osc %1 sinistra:Osc %1 fine detuning left:TripleOscillatorViewRIntonazione precisa dell'osc %1 - destra:Osc %1 fine detuning right:TripleOscillatorViewPanning osc %1:Osc %1 panning:TripleOscillatorView:Scostamento fase dell'osc %1:Osc %1 phase-offset:TripleOscillatorViewHIntonazione fase stereo dell'osc %1:Osc %1 stereo phase-detuning:TripleOscillatorViewVolume osc %1:Osc %1 volume:TripleOscillatorViewbSincronizzare l'oscillatore 1 con l'oscillatore 2*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewbSincronizzare l'oscillatore 2 con l'oscillatore 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorViewnUtilizzare un'onda di tipo moog per questo oscillatore.0Use a moog-like saw-wave for current oscillator.TripleOscillatorViewtUtilizzare un'onda a dente di sega per questo oscillatore.&Use a saw-wave for current oscillator.TripleOscillatorViewlUtilizzare un'onda sinusoidale per questo oscillatore.'Use a sine-wave for current oscillator.TripleOscillatorViewbUtilizzare un'onda quadra per questo oscillatore.)Use a square-wave for current oscillator.TripleOscillatorViewlUtilizzare un'onda triangolare per questo oscillatore.+Use a triangle-wave for current oscillator.TripleOscillatorViewrUtilizzare un'onda personalizzata per questo oscillatore.3Use a user-defined waveform for current oscillator.TripleOscillatorViewUsare la modulazione di amplificazione per modulare l'oscillatore 2 con l'oscillatore 1FUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUsare la modulazione di amplificazione per modulare l'oscillatore 3 con l'oscillatore 2FUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewnUtilizzare un'onda esponenziale per questo oscillatore./Use an exponential wave for current oscillator.TripleOscillatorViewUsare la modulazione di frequenza per modulare l'oscillatore 2 con l'oscillatore 1FUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUsare la modulazione di frequenza per modulare l'oscillatore 3 con l'oscillatore 2FUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewUsare la modulazione di fase per modulare l'oscillatore 2 con l'oscillatore 1BUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUsare la modulazione di fase per modulare l'oscillatore 3 con l'oscillatore 2BUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorView`Utilizzare rumore bianco per questo oscillatore.'Use white-noise for current oscillator.TripleOscillatorViewQuesta manopola regola l'intonazione, con la precisione di 1 semitono, dell'oscillatore %1. L'intonazione pu essere variata di 24 semitoni (due ottave) in positivo e in negativo. Pu essere usata per creare suoni con un accordo.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewQuesta manopola regola l'intonazione precisa dell'oscillatore %1 per il canale sinistro. La gamma per l'intonazione di precisione va da -100 a +100 centesimi. Pu essere usata per creare suoni "grossi".With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewQuesta manopola regola l'intonazione precisa dell'oscillatore %1 per il canale destro. La gamma per l'intonazione di precisione va da -100 a +100 centesimi. Pu essere usata per creare suoni "grossi".With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewrQuesta manopola regola il posizionamento nello spettro stereo dell'oscillatore %1. Un valore pari a -100 significa tutto a sinistra mentre un valore pari a 100 significa tutto a destra.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewFQuesta manopola regola lo scostamento della fase dell'oscillatore %1. Ci significa che possibile spostare il punto in cui inizia l'oscillazione. Per esempio, un'onda sinusoidale e uno scostamento della fase di 180 gradi, fanno iniziare l'onda scendendo. Lo stesso vale per un'onda quadra.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorViewQuesta manopola regola l'intonazione stereo della fase dell'oscillatore %1. L'intonazione stereo della fase specifica la differenza tra lo scostamento della fase del canale sinistro e quello destro. Questo molto utile per creare suoni con grande ampiezza stereo.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorView>Questa manopola regola il volume dell'oscillatore %1. Un valore pari a 0 equivale a un oscillatore spento, gli altri valori impostano il volume corrispondente.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorViewcentesimicentsTripleOscillatorView gradidegreesTripleOscillatorViewsemitoni semitonesTripleOscillatorViewlHanno collaborato (ordinati per numero di contributi):*Contributors ordered by number of commits:UiCoinvoltiInvolvedUi,Riduci numero versioneDecrement version numberVersionedSaveDialogNuova versioneIncrement version numberVersionedSaveDialog6 - Controllo del plugin VST - VST plugin controlVestigeInstrumentViewCliccando qui, possibile selezionare i preset che sono caricati nel VST al momento.>Click here to select presets that are currently loaded in VST.VestigeInstrumentViewClicca qui per mostrare o nascondere l'interfaccia grafica (GUI) per i plugin VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewCliccando qui, si apre una finestra di LMMS dove possibile modificare le variabili del plugin VST.8Click here, if you want to control VST-plugin from host.VestigeInstrumentViewCliccando qui, possibile aprire un altro preset del plugin VST (*fxp, *fxb).GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VestigeInstrumentView"Clicca qui per aprire un altro plugin VST. Una volta cliccato questo pulsante, si aprir una finestra di dialogo dove potrai selezionare il file.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentViewCliccando qui possibile salvare il preset corrente del plugin VST.BClick here, if you want to save current VST-plugin preset program.VestigeInstrumentViewnCliccando qui, viene cambiato il preset del plugin VST.GClick here, if you want to switch to another VST-plugin preset program.VestigeInstrumentViewTControlla il plugin VST dal terminale LMMS!Control VST-plugin from LMMS hostVestigeInstrumentView File DLL (*.dll)DLL-files (*.dll)VestigeInstrumentView File EXE (*.exe)EXE-files (*.exe)VestigeInstrumentViewSuccessivo (+)Next (+)VestigeInstrumentView4Nessun plugin VST caricatoNo VST-plugin loadedVestigeInstrumentViewApri plugin VSTOpen VST-pluginVestigeInstrumentView:Apri un preset del plugin VSTOpen VST-plugin presetVestigeInstrumentView0Apri un altro plugin VSTOpen other VST-pluginVestigeInstrumentView PresetPresetVestigeInstrumentViewPrecedente (-) Previous (-)VestigeInstrumentViewSalva il preset Save presetVestigeInstrumentView:Mostra/nascondi l'interfaccia Show/hide GUIVestigeInstrumentView0Disabilita tutte le noteTurn off all notesVestigeInstrumentViewda by VestigeInstrumentView`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />0       
VstEffectControlDialogCliccando qui, possibile selezionare i preset che sono caricati nel VST al momento.>Click here to select presets that are currently loaded in VST.VstEffectControlDialogCliccando qui, si apre una finestra di LMMS dove possibile modificare le variabili del plugin VST.8Click here, if you want to control VST-plugin from host.VstEffectControlDialogCliccando qui, possibile aprire un altro preset del plugin VST (*fxp, *fxb).GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VstEffectControlDialogCliccando qui possibile salvare il preset corrente del plugin VST.BClick here, if you want to save current VST-plugin preset program.VstEffectControlDialognCliccando qui, viene cambiato il preset del plugin VST.GClick here, if you want to switch to another VST-plugin preset program.VstEffectControlDialogTControlla il plugin VST dal terminale LMMS!Control VST-plugin from LMMS hostVstEffectControlDialogEffetto da:  Effect by: VstEffectControlDialogSuccessivo (+)Next (+)VstEffectControlDialog:Apri un preset del plugin VSTOpen VST-plugin presetVstEffectControlDialogPrecedente (-) Previous (-)VstEffectControlDialogSalva il preset Save presetVstEffectControlDialogMostra/nascondi Show/hideVstEffectControlDialog"" VstPlugin'' VstPlugin.FXB.FXB VstPlugin.FXP.FXP VstPlugin.fxb.fxb VstPlugin.fxp.fxp VstPlugin: default : default VstPlugin6Caricamento del VST fallitoFailed loading VST plugin VstPlugin$Caricamento pluginLoading plugin VstPluginApri preset Open Preset VstPlugin<Sto caricando il plugin VST...'Please wait while loading VST plugin... VstPluginSalva Preset Save Preset VstPluginIl VST %1 non stato caricato correttamente per qualche ragione.6The VST plugin %1 could not be loaded for some reason. VstPluginDPreset di plugin VST (*.fxp *.fxb)Vst Plugin Preset (*.fxp *.fxb) VstPluginMix A-BA-B MixWatsynInstrument:Quantit di inviluppo Mix A-BA-B Mix envelope amountWatsynInstrument2Attacco inviluppo Mix A-BA-B Mix envelope attackWatsynInstrument:Decadimento inviluppo Mix A-BA-B Mix envelope decayWatsynInstrument<Mantenimento inviluppo Mix A-BA-B Mix envelope holdWatsynInstrumentScambio A1-B2A1-B2 CrosstalkWatsynInstrument"Modulazione A2-A1A2-A1 modulationWatsynInstrument"Modulazione B2-B1B2-B1 modulationWatsynInstrument4Moltiplicatore di freq. A1Freq. multiplier A1WatsynInstrument4Moltiplicatore di freq. A2Freq. multiplier A2WatsynInstrument4Moltiplicatore di freq. B1Freq. multiplier B1WatsynInstrument4Moltiplicatore di freq. B2Freq. multiplier B2WatsynInstrument.Intonazione Sinistra A1Left detune A1WatsynInstrument.Intonazione Sinistra A2Left detune A2WatsynInstrument.Intonazione Sinistra B1Left detune B1WatsynInstrument.Intonazione Sinistra B2Left detune B2WatsynInstrument Bilanciamento A1 Panning A1WatsynInstrument Bilanciamento A2 Panning A2WatsynInstrument Bilanciamento B1 Panning B1WatsynInstrument Bilanciamento B2 Panning B2WatsynInstrument*Intonazione Destra A1Right detune A1WatsynInstrument*Intonazione Destra A2Right detune A2WatsynInstrument*Intonazione Destra B1Right detune B1WatsynInstrument*Intonazione Destra B2Right detune B2WatsynInstrument&Grafico selezionatoSelected graphWatsynInstrumentVolume A1 Volume A1WatsynInstrumentVolume A2 Volume A2WatsynInstrumentVolume B1 Volume B1WatsynInstrumentVolume B2 Volume B2WatsynInstrumentClicca per rimpiazzare il grafico con una forma d'onda a dente si segaClick for saw wave WatsynViewClicca per rimpiazzare il grafico con una forma d'onda sinusoidaleClick for sine wave WatsynViewzClicca per rimpiazzare il grafico con una forma d'onda quadraClick for square wave WatsynViewClicca per rimpiazzare il grafico con una forma d'onda triangolareClick for triangle wave WatsynView(Clicca per invertireClick to invert WatsynViewfClicca per usare la forma d'onda di un file esterno+Click to load a waveform from a sample file WatsynView.Clicca per normalizzareClick to normalize WatsynViewFClicca per spostare la fase di +15#Click to shift phase by +15 degrees WatsynViewFClicca per spostare la fase di -15#Click to shift phase by -15 degrees WatsynViewLClicca per ammorbidire la forma d'ondaClick to smooth WatsynViewCliccando e trascinando il mouse in questo grafico possibile disegnare una forma d'onda personalizzata.ADraw your own waveform here by dragging your mouse on this graph. WatsynViewInvertiInvert WatsynView&Carica forma d'onda Load waveform WatsynView2Mescola output di A2 a A1Mix output of A2 to A1 WatsynView2Mescola output di B2 a B1Mix output of B2 to B1 WatsynView^Modula l'amplificzione di A1 con l'output di A2*Modulate amplitude of A1 with output of A2 WatsynView^Modula l'amplificzione di B1 con l'output di B2*Modulate amplitude of B1 with output of B2 WatsynViewNModula la fase di A1 con l'output di A2&Modulate phase of A1 with output of A2 WatsynViewNModula la fase di B1 con l'output di B2&Modulate phase of B1 with output of B2 WatsynViewNormalizza Normalize WatsynView,Sposta fase a sinistra Phase left WatsynView(Sposta fase a destra Phase right WatsynView8Modulazione Ring tra A1 e A2Ring-modulate A1 and A2 WatsynView8Modulazione Ring tra B1 e B2Ring-modulate B1 and B2 WatsynView0Passa all'oscillatore A1Select oscillator A1 WatsynView0Passa all'oscillatore A2Select oscillator A2 WatsynView0Passa all'oscillatore B1Select oscillator B1 WatsynView0Passa all'oscillatore B2Select oscillator B2 WatsynView Onda sinusoidale Sine wave WatsynViewAmmorbidisciSmooth WatsynViewOnda quadra Square wave WatsynView Onda triangolare Triangle wave WatsynView BandwidthZynAddSubFxInstrumentGuadagno FMFM GainZynAddSubFxInstrument(Frequenza del filtroFilter FrequencyZynAddSubFxInstrument(Risonanza del filtroFilter ResonanceZynAddSubFxInstrumentDInoltra segnali dai controlli MIDI"Forward MIDI Control Change EventsZynAddSubFxInstrument PortamentoZynAddSubFxInstrument,Bandwidth di RisonanzaResonance BandwidthZynAddSubFxInstrument>Frequenza Centrale di RisonanzaResonance Center FrequencyZynAddSubFxInstrumentBWZynAddSubFxView Bandwidth:ZynAddSubFxViewClicca qui per mostrare o nascondere l'interfaccia grafica (GUI) di ZynAddSubFX.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewGUAD FMFM GAINZynAddSubFxViewGuadagno FM:FM Gain:ZynAddSubFxViewFREQFREQZynAddSubFxView*Frequenza del Filtro:Filter Frequency:ZynAddSubFxView*Risonanza del Filtro:Filter Resonance:ZynAddSubFxViewLInoltra cambiamenti dai controlli MIDIForward MIDI Control ChangesZynAddSubFxViewPORTZynAddSubFxView Portamento:ZynAddSubFxViewRISRESZynAddSubFxView BW RISRES BWZynAddSubFxView FC RISRES CFZynAddSubFxView4Bandwidth della Risonanza:Resonance bandwidth:ZynAddSubFxView@Frequenza Centrale di Risonanza:Resonance center frequency:ZynAddSubFxViewMostra GUIShow GUIZynAddSubFxViewAmplificazioneAmplifyaudioFileProcessor"Fine del campione End of sampleaudioFileProcessor.Modalit InterpolazioneInterpolation modeaudioFileProcessorLineareLinearaudioFileProcessor(Modalit ripetizione Loop modeaudioFileProcessor"Punto di LoopBackLoopback pointaudioFileProcessorNessunaNoneaudioFileProcessor&Inverti il campioneReverse sampleaudioFileProcessorSincronizzataSincaudioFileProcessor&Inizio del campioneStart of sampleaudioFileProcessorStutteraudioFileProcessorFAggiungi una traccia di automazioneAdd automation-trackbbEditor,Aggiungi beat/basslineAdd beat/basslinebbEditorAggiungi note Add stepsbbEditor(Beat+Bassline EditorBeat+Bassline EditorbbEditorCliccando qui si riprodurre il beat/bassline selezionato. Il beat/bassline ricomincia automaticamente quando finisce.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorCliccando qui si ferma la riproduzione del beat/bassline attivo.4Click here to stop playing of current beat/bassline.bbEditor|Riproduci/metti in pausa il beat/bassline selezionato (Spazio)(Play/pause current beat/bassline (Space)bbEditorElimina note Remove stepsbbEditorNFerma il beat/bassline attuale (Spazio).Stop playback of current beat/bassline (Space)bbEditorCambia colore Change color bbTCOViewCambia nome Change name bbTCOViewBApri nell'editor di Beat+BasslineOpen in Beat+Bassline-Editor bbTCOView:Reimposta il colore a defaultReset color to default bbTCOViewReimposta nome Reset name bbTCOView Beat/Bassline %1Beat/Bassline %1bbTrackClone di %1 Clone of %1bbTrack"LunghezzaCampione Samplelength bitInvaderlCliccando qui si ottiene una forma d'onda sinusoidale.Click for a sine-wave.bitInvaderViewbCliccando qui si ottiene un'onda a dente di sega.Click here for a saw-wave.bitInvaderViewPCliccando qui si ottiene un'onda quadra.Click here for a square-wave.bitInvaderViewZCliccando qui si ottiene un'onda triangolare.Click here for a triangle-wave.bitInvaderViewCliccando qui possibile definire una forma d'onda personalizzata.$Click here for a user-defined shape.bitInvaderViewNCliccando qui si ottiene rumore bianco.Click here for white-noise.bitInvaderView`Cliccando qui la forma d'onda viene ammorbidita.Click here to smooth waveform.bitInvaderViewCliccando e trascinando il mouse in questo grafico possibile disegnare una forma d'onda personalizzata.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderViewInterpolazione InterpolationbitInvaderViewNormalizza NormalizebitInvaderView,Lunghezza del campione Sample LengthbitInvaderView(Onda a dente di segaSaw wavebitInvaderView Onda sinusoidale Sine wavebitInvaderViewAmmorbidisciSmoothbitInvaderViewOnda quadra Square wavebitInvaderView Onda triangolare Triangle wavebitInvaderView6Forma d'onda personalizzataUser defined wavebitInvaderViewRumore biancoWhite noise wavebitInvaderViewATTACCOATTACKdynProcControlDialogLClicca per ammorbidire la forma d'onda*Click here to apply smoothing to wavegraphdynProcControlDialogClicca qui per diminuire l'amplificazione del grafico d'onda di 1dB1Click here to decrease wavegraph amplitude by 1dBdynProcControlDialog~Clicca per aumentare l'amplificazione del grafico d'onda di 1dB1Click here to increase wavegraph amplitude by 1dBdynProcControlDialogrClicca per riportare la forma d'onda allo stato originale1Click here to reset the wavegraph back to defaultdynProcControlDialogDDiminuisci l'amplificazione di 1dB#Decrease wavegraph amplitude by 1dBdynProcControlDialog INPUTINPUTdynProcControlDialog>Aumenta l'amplificazione di 1dB#Increase wavegraph amplitude by 1dBdynProcControlDialog$Guadagno in Input: Input gain:dynProcControlDialog OUTPUTOUTPUTdynProcControlDialog&Guadagno in Output: Output gain:dynProcControlDialog$Attacco del picco:Peak attack time:dynProcControlDialog&Rilascio del picco:Peak release time:dynProcControlDialogtL'effetto si basa sul valore medio tra i due canali stereo4Process based on the average of both stereo channelsdynProcControlDialogxL'effetto si basa sul valore massimo tra i due canali stereo4Process based on the maximum of both stereo channelsdynProcControlDialoglL'effetto tratta i due canali stereo indipendentemente)Process each stereo channel independentlydynProcControlDialogRILASCIORELEASEdynProcControlDialog(Resetta forma d'ondaReset waveformdynProcControlDialog2Ammorbidisci forma d'ondaSmooth waveformdynProcControlDialog,Modalit stereo: MediaStereomode AveragedynProcControlDialog0Modalit stereo: MassimoStereomode MaximumdynProcControlDialog:Modalit stereo: IndipendentiStereomode UnlinkeddynProcControlDialog Tempo di Attacco Attack timedynProcControls"Guadagno in input Input gaindynProcControls$Guadagno in output Output gaindynProcControls"Tempo di Rilascio Release timedynProcControlsModalit stereo Stereo modedynProcControlsHNon stato possibile aprire il fileCould not open fileexportProjectDialog.Impossibile aprire in scrittura il file %1. Assicurarsi di avere i permessi in scrittura per il file e per la directory contenente il file e riprovare!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog ErroreErrorexportProjectDialogSi verificato un errore nel tentativo di determinare il dispositivo per la codifica del file. Si prega di selezionare un formato differente.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog2Esporta il progetto in %1Export project to %1exportProjectDialog(Renderizzazione: %1%Rendering: %1%exportProjectDialogPInserire un valore compreso tra %1 e %2:+Please enter a new value between %1 and %2:faderGraficoGraph graphModel ClickClickkickerInstrument$Distorsione finaleDistortion EndkickerInstrument(Distorsione inizialeDistortion StartkickerInstrument Frequenza finale End frequencykickerInstrument$Finisci sulla nota End to notekickerInstrument,Inclinazione InviluppoEnvelope SlopekickerInstrument,Inclinazione FrequenzaFrequency SlopekickerInstrumentGuadagnoGainkickerInstrumentLunghezzaLengthkickerInstrument RumoreNoisekickerInstrument$Frequenza inizialeStart frequencykickerInstrument"Inizia dalla notaStart from notekickerInstrument Click:Click:kickerInstrumentView&Distorsione finale:Distortion End:kickerInstrumentView*Distorsione iniziale:Distortion Start:kickerInstrumentView"Frequenza finale:End frequency:kickerInstrumentView(Lunghezza Inviluppo:Envelope Length:kickerInstrumentView.Inclinazione Inviluppo:Envelope Slope:kickerInstrumentView.Inclinazione Frequenza:Frequency Slope:kickerInstrumentViewGuadagno:Gain:kickerInstrumentViewRumore:Noise:kickerInstrumentView&Frequenza iniziale:Start frequency:kickerInstrumentView &Aiuto&HelpknobPInserire un valore compreso tra %1 e %2:+Please enter a new value between %1 and %2:knobbInserire un nuovo valore tra -96.0 dBV e 6.0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob(Strumenti di analisiAnalysis ToolsladspaBrowserView&Effetti disponibiliAvailable EffectsladspaBrowserViewSconosciuto Don't knowladspaBrowserViewStrumenti InstrumentsladspaBrowserViewQuesta finestra mostra le informazioni relative ai plugin LADSPA che LMMS stato in grado di localizzare. I plugin sono divisi in cinque categorie, in base all'interpretazione dei tipi di porta e ai nomi. Gli Effetti Disponibili sono quelli che possono essere usati con LMMS. Perch LMMS possa usare un effetto deve, prima di tutto, essere un effetto, cio deve avere sia ingressi che uscite. LMMS identifica un ingresso come una porta con una frequenza audio associata e che contiene 'in' nel nome. Le uscite sono identificate dalle lettere 'out'. Inoltre, l'effetto deve avere lo stesso numero di ingressi e di uscite e deve poter funzionare in real time. Gli Effetti non Disponibili sono quelli che sono stati identificati come effetti ma che non hanno lo stesso numero di ingressi e uscite oppure non supportano il real time. Gli Strumenti sono plugin che hanno solo uscite. Gli Strumenti di Analisi sono plugin che hanno solo ingressi. Quelli Sconosciuti sono plugin che non hanno n ingressi n uscite. Facendo doppio click sui plugin verranno fornite informazioni sulle relative porte.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView Tipo:Type:ladspaBrowserView.Effetti non disponibiliUnavailable EffectsladspaBrowserViewDescrizione DescriptionladspaDescription PluginPluginsladspaDescription AudioAudioladspaPortDialogControlloControlladspaPortDialogDirezione DirectionladspaPortDialogVirgola mobileFloatladspaPortDialogIngressoInputladspaPortDialog InteroIntegerladspaPortDialogLogaritmico LogarithmicladspaPortDialog<Minimo < Predefinito < MassimoMin < Default < MaxladspaPortDialogNomeNameladspaPortDialog UscitaOutputladspaPortDialog PortePortsladspaPortDialogFrequenzaRateladspaPortDialog Dipendente da SR SR DependentladspaPortDialogAbilitatoToggledladspaPortDialogTipoTypeladspaPortDialogSYesladspaPortDialog$Filtro 24dB/ottava24dB/oct Filter lb302SynthAccentoAccent lb302SynthDeadDead lb302SynthDistorsione Distortion lb302Synth SlideSlide lb302Synth"Decadimento slide Slide Decay lb302Synth2VCF - frequenza di taglioVCF Cutoff Frequency lb302Synth>VCF - decadimento dell'envelopeVCF Envelope Decay lb302Synth@VCF - modulazione dell'envelopeVCF Envelope Mod lb302SynthVCF - Risonanza VCF Resonance lb302SynthForma d'ondaWaveform lb302SynthPfiltro tripolare "tipo 303", 24dB/ottava&303-es-que, 24dB/octave, 3 pole filterlb302SynthView$Onda Moog limitataBandlimited moog saw wavelb302SynthView:Onda a dente di sega limitataBandlimited saw wavelb302SynthView(Onda quadra limitataBandlimited square wavelb302SynthView2Onda triangolare limitataBandlimited triangle wavelb302SynthViewlCliccando qui si ottiene una forma d'onda sinusoidale.Click for a sine-wave.lb302SynthViewLCliccando qui si ottieme un'onda moog. Click here for a moog-like wave.lb302SynthViewbCliccando qui si ottiene un'onda a dente di sega.Click here for a saw-wave.lb302SynthViewhCliccando qui si ottiene un'onda quadra arrotondata.0Click here for a square-wave with a rounded end.lb302SynthViewPCliccando qui si ottiene un'onda quadra.Click here for a square-wave.lb302SynthViewZCliccando qui si ottiene un'onda triangolare.Click here for a triangle-wave.lb302SynthViewRCliccando qui si ha un'onda esponenziale.#Click here for an exponential wave.lb302SynthView^Clicca per usare un'onda Moog a banda limitata.)Click here for bandlimited moog saw wave.lb302SynthViewtClicca per usare un'onda a dente di sega a banda limitata.$Click here for bandlimited saw wave.lb302SynthViewbClicca per usare un'onda quadra a banda limitata.'Click here for bandlimited square wave.lb302SynthViewlClicca per usare un'onda triangolare a banda limitata.)Click here for bandlimited triangle wave.lb302SynthViewNCliccando qui si ottiene rumore bianco.Click here for white-noise.lb302SynthView Freq. di taglio: Cutoff Freq:lb302SynthView DIST:DIST:lb302SynthViewDecadimento:Decay:lb302SynthViewEnv Mod:Env Mod:lb302SynthViewOnda moog Moog wavelb302SynthViewRisonanza: Resonance:lb302SynthView.Onda quadra arrotondataRounded square wavelb302SynthView(Onda a dente di segaSaw wavelb302SynthView Onda sinusoidale Sine wavelb302SynthView$Decadimento slide: Slide Decay:lb302SynthViewOnda quadra Square wavelb302SynthView Onda triangolare Triangle wavelb302SynthViewRumore biancoWhite noise wavelb302SynthView$Filtro 24dB/ottava24dB/oct Filter lb303SynthAccentoAccent lb303SynthDeadDead lb303SynthDistorsione Distortion lb303Synth SlideSlide lb303Synth"Decadimento slide Slide Decay lb303Synth2VCF - frequenza di taglioVCF Cutoff Frequency lb303Synth>VCF - decadimento dell'envelopeVCF Envelope Decay lb303Synth@VCF - modulazione dell'envelopeVCF Envelope Mod lb303SynthVCF - Risonanza VCF Resonance lb303SynthForma d'ondaWaveform lb303SynthPfiltro tripolare "tipo 303", 24dB/ottava&303-es-que, 24dB/octave, 3 pole filterlb303SynthViewTAGCUTlb303SynthView Freq. di taglio: Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthView DIST:DIST:lb303SynthViewDecadimento:Decay:lb303SynthViewENV MODENV MODlb303SynthViewEnv Mod:Env Mod:lb303SynthViewRISRESlb303SynthViewRisonanza: Resonance:lb303SynthView SLIDESLIDElb303SynthView$Decadimento slide: Slide Decay:lb303SynthViewONDAWAVElb303SynthView ONDA:WAVE:lb303SynthViewADSRADSRmalletsInstrument AgogoAgogomalletsInstrument BeatsBeatsmalletsInstrument BowedBowedmalletsInstrument ClumpClumpmalletsInstrumentCrossfade CrossfademalletsInstrument GlassGlassmalletsInstrumentDurezzaHardnessmalletsInstrument&Profondit dell'LFO LFO DepthmalletsInstrument"Velocit dell'LFO LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrumentFile mancanti Missing filesmalletsInstrumentModulatore ModulatormalletsInstrumentMotoMotionmalletsInstrumentPosizionePositionmalletsInstrumentPressionePressuremalletsInstrumentResoResomalletsInstrumentVelocitSpeedmalletsInstrumentAperturaSpreadmalletsInstrumentStick Mix Stick MixmalletsInstrumentTibetan Bowl Tibetan BowlmalletsInstrumentTubular Bells Tubular BellsmalletsInstrumentTuned Bar Tuned BarmalletsInstrumentTwo Fixed Two FixedmalletsInstrumentUniform Bar Uniform BarmalletsInstrumentVibraphone VibraphonemalletsInstrument(Fequenza del vibrato Vibrato FreqmalletsInstrument(Guadagno del vibrato Vibrato GainmalletsInstrument Legno1Wood1malletsInstrument Legno2Wood2malletsInstrumentL'installazione di Stk sembra incompleta. Assicurarsi che sia installato il pacchetto Stk completo!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR:ADSR:malletsInstrumentView BowedBowedmalletsInstrumentViewCrossfade CrossfademalletsInstrumentViewCrossfade: Crossfade:malletsInstrumentViewDurezzaHardnessmalletsInstrumentViewDurezza: Hardness:malletsInstrumentViewStrumento InstrumentmalletsInstrumentViewProfondit LFO LFO DepthmalletsInstrumentViewProfondit LFO: LFO Depth:malletsInstrumentViewVelocit LFO LFO SpeedmalletsInstrumentViewVelocit LFO: LFO Speed:malletsInstrumentViewModulatore ModulatormalletsInstrumentViewModulatore: Modulator:malletsInstrumentViewMotoMotionmalletsInstrumentView Moto:Motion:malletsInstrumentViewPosizionePositionmalletsInstrumentViewPosizione: Position:malletsInstrumentViewPressionePressuremalletsInstrumentViewPressione: Pressure:malletsInstrumentViewVelocitSpeedmalletsInstrumentViewVelocit:Speed:malletsInstrumentViewAperturaSpreadmalletsInstrumentViewApertura:Spread:malletsInstrumentViewStick Mix Stick MixmalletsInstrumentViewStick Mix: Stick Mix:malletsInstrumentViewFreq VibVib FreqmalletsInstrumentViewFreq Vib: Vib Freq:malletsInstrumentViewGuad VibVib GainmalletsInstrumentViewGuad Vib: Vib Gain:malletsInstrumentViewVibratoVibratomalletsInstrumentViewVibrato:Vibrato:malletsInstrumentView Chiudi  Close manageVSTEffectView4 - Controllo parametri VST - VST parameter controlmanageVSTEffectViewAutomatizzati AutomatedmanageVSTEffectView~Clicca qui se vuoi visualizzare solo i parametri automatizzati.Sintetizzatore FM a 2 operatori2-operator FM Synth pluginBrowserjSintetizzatore wavetable con 4 oscillatori modulabili(4-oscillator modulatable wavetable synth pluginBrowserUn sintetizzatore che imita i suoni del Nintendo Entertainment SystemA NES-like synthesizer pluginBrowserDUn plugin di amplificazione nativoA native amplifier plugin pluginBrowserZSintetizzatore additivo per suoni tipo organo*Additive Synthesizer for organ-like sounds pluginBrowser^Potenzia il tuo basso in modo veloce e semplice'Boost your bass the fast and simple way pluginBrowser0Strumento Patchbay CarlaCarla Patchbay Instrument pluginBrowser*Strutmento Rack CarlaCarla Rack Instrument pluginBrowserLSintetizzatore wavetable configurabile"Customizable wavetable synthesizer pluginBrowser possibile trascinare uno strumento nel Song-Editor, nel Beat+Bassline Editor o direttamente in un canale esistente.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowser.ZynAddSubFX incorporatoEmbedded ZynAddSubFX pluginBrowser2Emulatore di GameBoy!" APUEmulation of GameBoy (TM) APU pluginBrowserEmulazione di MOS6581 and MOS8580 SID. Questo chip era utilizzato nel Commode 64.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserdFiltro per importare progetti di FL Studio in LMMS1Filter for importing FL Studio projects into LMMS pluginBrowserrStrumento per l'importazione di file Hydrogen dentro LMMS-Filter for importing Hydrogen files into LMMS pluginBrowserLFiltro per importare file MIDI in LMMS)Filter for importing MIDI-files into LMMS pluginBrowser:strumento compatibile con GUSGUS-compatible patch instrument pluginBrowser>Analizzatore di spettro grafico"Graphical spectrum analyzer plugin pluginBrowserTImitazione monofonica del tb303 incompleta%Incomplete monophonic imitation tb303 pluginBrowser4Navigatore degli strumentiInstrument browser pluginBrowser$Plugin strumentaliInstrument plugins pluginBrowser(Port di sfxr su LMMSLMMS port of sfxr pluginBrowserBElenca i plugin LADSPA installatiList installed LADSPA plugins pluginBrowserSintetizzatore mostruoso con 3 oscillatori e matrice di modulazione3Monstrous 3-oscillator synth with modulation matrix pluginBrowser:Riproduttore di file SounFontPlayer for SoundFont files pluginBrowserlPlugin per controllare le manopole con picchi di suono-Plugin for controlling knobs with sound peaks pluginBrowserlPlugin per migliorare la separazione stereo di un file=Plugin for enhancing stereo separation of a stereo input file pluginBrowserdPlugin per manipolare liberamente un'uscita stereo,Plugin for freely manipulating stereo output pluginBrowserSemplice sampler con varie impostazioni, per usare suoni (come percussioni) in una traccia strumentaleZSimple sampler with various settings for using samples (e.g. drums) in an instrument-track pluginBrowser^Tre potenti oscillatori modulabili in vari modi;Three powerful oscillators you can modulate in several ways pluginBrowser\Oggetti dotati di intonazione su cui picchiareTuneful things to bang on pluginBrowserPHost VST per usare i plugin VST con LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowserNSintetizzatore di percussioni versatileVersatile drum synthesizer pluginBrowser8Modulatore di corde vibrantiVibrating string modeler pluginBrowser&nessuna descrizioneno description pluginBrowserDUn versatile processore di dynamic0plugin for processing dynamics in a flexible way pluginBrowserdPlugin per usare qualsiasi effetto LADSPA in LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowserfPlugin per usare effetti VST arbitrari dentro LMMS.3plugin for using arbitrary VST effects inside LMMS. pluginBrowserRPlugin per la modifica della forma d'ondaplugin for waveshaping pluginBrowser&Grassetto&Bold projectNotes&Colore... &Color... projectNotes &Copia&Copy projectNotes&Corsivo&Italic projectNotes&Giustifica&Justify projectNotes&Sinistra&Left projectNotes&Incolla&Paste projectNotes$&Ripeti operazione&Redo projectNotes&Destra&Right projectNotes&Sottolineato &Underline projectNotes&&Annulla operazione&Undo projectNotes&CentroC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotes&TagliaCu&t projectNotesModifica azioni Edit Actions projectNotesFormatta azioniFormat Actions projectNotes"Note del progetto Project notes projectNotesNScrivi qui le note per il tuo progetto.!Put down your project notes here. projectNotesRinomina... Rename... renameDialog"INTERFACCIA AUDIOAUDIO INTERFACE setupDialog4DIrectory del tema graficoArtwork directory setupDialog$Impostazioni audioAudio settings setupDialog*DIMENSIONE DEL BUFFER BUFFER SIZE setupDialog(Grafica dello sfondoBackground artwork setupDialogAnnullaCancel setupDialoghSeleziona la directory di installazione di FL Studio'Choose FL Studio installation directory setupDialogPSeleziona le directory dei plugin LADSPAChoose LADSPA plugin directory setupDialogPSeleziona la directory di lavoro di LMMSChoose LMMS working directory setupDialogVSeleziona le directory dei file rawwave STKChoose STK rawwave directory setupDialogNSeleziona la directory del tema graficoChoose artwork-theme directory setupDialogBScegliere la grafica dello sfondoChoose background artwork setupDialogDScegliere il SoundFont predefinitoChoose default SoundFont setupDialogRSeleziona la tua directory dei plugin VST Choose your VST-plugin directory setupDialog>Pulsanti della traccia compattiCompact track buttons setupDialogrPer impostazione predefinita, comprimi i file di progetto"Compress project files per default setupDialog4File SoundFont predefinitoDefault Soundfont File setupDialog0Mostra il volume in dBV Display volume as dBV  setupDialogZAbilita la funzione di salvataggio automaticoEnable auto save feature setupDialogPAbilita i nomi delle note nel piano-roll Enable note labels in piano roll setupDialog,Abilita i suggerimentiEnable tooltips setupDialogbAbilit il display della forma d'onda per default"Enable waveform display by default setupDialogNDirectory di installazione di FL Studio FL Studio installation directory setupDialog2Frames: %1 Latenza: %2 msFrames: %1 Latency: %2 ms setupDialog*Impostazioni generaliGeneral settings setupDialogPModalit alta qualit per l'uscita audioHQ-mode for output audio-device setupDialogQui possibile selezionare l'interfaccia MIDI. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, OSS e altri. Sotto si trova una casella che offre dei controlli per l'interfaccia MIDI selezionata.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogQui possibile selezionare l'interfaccia audio. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, JACK, OSS e altri. Sotto trovi una casella che offre dei controlli per l'interfaccia audio selezionata.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialog*Qui possibile impostare la dimensione del buffer interno usato da LMMS. Valori pi piccoli danno come risultato una latenza pi bassa ma possono causare una qualit audio inutilizzabile o cattive prestazioni, specialmente su computer datati o sistemi con kernel non-realtime.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog4Percorsi dei plugin LADSPALADSPA plugin paths setupDialog6Directory di lavoro di LMMSLMMS working directory setupDialog INTERFACCIA MIDIMIDI INTERFACE setupDialog"Impostazioni MIDI MIDI settings setupDialog VARIEMISC setupDialogOKOK setupDialogTModalit finestra ad una traccia strumento One instrument track window mode setupDialogPercorsiPaths setupDialog0Impostazioni prestazioniPerformance settings setupDialogSi prega di notare che la maggior parte delle modifiche non avr effetto fino al riavvio di LMMS!GPlease note that most changes won't take effect until you restart LMMS! setupDialog>Reimposta al valore predefinitoReset to default-value setupDialogRiavvia LMMS Restart LMMS setupDialog@Directory per i file rawwave STKSTK rawwave directory setupDialogCofigura LMMS Setup LMMS setupDialogvMostra il cursore di riproduzione dentro AudioFileProcessor*Show playback cursor in AudioFileProcessor setupDialogDopo aver modificato le impostazioni, mostra un avviso al riavvio,Show restart warning after changing settings setupDialogFScorrimento morbido nel Song-EditorSmooth scroll in Song Editor setupDialog\Sincronizza i plugin VST al playback dell'host!Sync VST plugins to host playback setupDialog`Effetti UI (interfaccia grafica) vs. prestazioniUI effects vs. performance setupDialog0Directory dei plugin VSTVST-plugin directory setupDialog BancoBank sf2Instrument ChorusChorus sf2Instrument&Chorus - profondit Chorus Depth sf2Instrument Chorus - livello Chorus Level sf2InstrumentChorus - voci Chorus Lines sf2Instrument"Chorus - velocit Chorus Speed sf2InstrumentGuadagnoGain sf2Instrument PatchPatch sf2InstrumentRiverberoReverb sf2Instrument0Riverbero - attenuazioneReverb Damping sf2Instrument&Riverbero - livello Reverb Level sf2Instrument:Riverbero - dimensione stanzaReverb Roomsize sf2Instrument(Riverbero - ampiezza Reverb Width sf2InstrumentBApplica il chorus (se supportato)Apply chorus (if supported)sf2InstrumentViewHApplica il riverbero (se supportato)Apply reverb (if supported)sf2InstrumentView$Seleziona il patchChoose the patchsf2InstrumentView(Chorus - profondit: Chorus Depth:sf2InstrumentView"Chorus - livello: Chorus Level:sf2InstrumentViewChorus - voci: Chorus Lines:sf2InstrumentView$Chorus - velocit: Chorus Speed:sf2InstrumentViewNClicca qui per aprire un altro file SF2#Click here to open another SF2 filesf2InstrumentViewGuadagnoGainsf2InstrumentView,Apri un file SoundFontOpen SoundFont filesf2InstrumentView8Apri un altro file SoundFontOpen other SoundFont filesf2InstrumentView2Riverbero - attenuazione:Reverb Damping:sf2InstrumentView(Riverbero - livello: Reverb Level:sf2InstrumentView<Riverbero - dimensione stanza:Reverb Roomsize:sf2InstrumentView*Riverbero - ampiezza: Reverb Width:sf2InstrumentView.File SoundFont2 (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewQuesto pulsante abilita l'effetto chorus, che utile per effetti di eco particolari ma funziona solo su file che lo supportano.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewQuesto pulsante abilita l'effetto riverbero, che utile per effetti particolari ma funziona solo su file che lo supportano.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewForma d'onda Wave FormsfxrInstrumentModello di chip Chip model sidInstrument TaglioCutoff sidInstrumentTipo di filtro Filter type sidInstrumentRisonanza Resonance sidInstrumentVoce 3 spenta Voice 3 off sidInstrument VolumeVolume sidInstrumentIl livello di attacco determina quanto rapidamente l'uscita della voce %1 sale da zero al picco di amplificazione.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentViewAttacco:Attack:sidInstrumentView$Filtro passa-bandaBand-Pass filter sidInstrumentViewApprossimativo:Coarse:sidInstrumentView(Frequenza di taglio:Cutoff frequency:sidInstrumentViewIl livello di decadimento determina quanto rapidamente l'uscita ricade dal picco di amplificazione al livello di sostegno impostato.iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentViewDecadimento:Decay:sidInstrumentViewFiltratoFilteredsidInstrumentView"Filtro passa-altoHigh-Pass filter sidInstrumentView$Filtro passa-bassoLow-Pass filter sidInstrumentViewMOS6581 SID MOS6581 SID sidInstrumentViewMOS8580 SID MOS8580 SID sidInstrumentView RumoreNoisesidInstrumentViewL'uscita della voce %1 rimarr al livello di sostegno impostato per tutta la durata della nota.]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentViewOnda pulse Pulse WavesidInstrumentViewAmpiezza pulse: Pulse Width:sidInstrumentViewRilascio:Release:sidInstrumentViewRisonanza: Resonance:sidInstrumentView Modulazione ringRing-ModsidInstrumentViewRing-mod rimpiazza l'uscita della forma d'onda triangolare dell'oscillatore %1 con la combinazione "Ring Modulated" degli oscillatori %1 e %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentViewDente di segaSawToothsidInstrumentViewSostegno:Sustain:sidInstrumentViewSincronizzatoSyncsidInstrumentViewIl Sync sincronizza la frequenza fondamentale dell'oscillatore %1 con quella dell'oscillatore %2 producendo effetti di "Hard Sync".Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentViewTestTestsidInstrumentViewQuando Test attivo, e finch non viene spento, reimposta e blocca l'oscillatore %1 a zero.PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewL'intonazione permette di "stonare" la voce %1 verso l'alto o verso il basso di un'ottava.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewLa risoluzione dell'ampiezza del Pulse permette di impostare che l'ampiezza venga variata in modo continuo senza salti udibili. Sull'oscillatore %1 deve essere selezionata la forma d'onda Pulse perch si abbia un effetto udibile.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentViewL'uscita della voce %1 ricadr dal livello di sostegno verso il silenzio con la velocit di rilascio impostata.jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentView Onda triangolare Triangle WavesidInstrumentViewVoce 3 spenta Voice3 Off sidInstrumentViewVolume:Volume:sidInstrumentViewlQuando il filtraggio attivo, la voce %1 verr processata dal filtro. Quando il filtraggio spento, la voce %1 arriva direttamente all'uscita e il filtro non ha effetto su di essa.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentView(Tutti i tipi di fileAll file typessongEmpty project Empty projectsong$Progetti FL StudioFL Studio projectssong"Progetti HydrogenHydrogen projectssongImporta file Import filesongSequenze MIDIMIDI sequencessong$Altezza principale Master pitchsong"Volume principale Master volumesong@Il progetto NON stato salvato.Project NOT saved.songProgeto salvato Project savedsongdSeleziona una directory per le tracce esportate.../Select directory for writing exported tracks...songhScegliere il file per l'esportazione del progetto...!Select file for project-export...song TempoTemposong>Il progetto %1 stato salvato.The project %1 is now saved.songFIl progetto %1 non stato salvato!The project %1 was not saved!songQuesto progetto vuoto, pertanto non c' nulla da esportare. Prima di esportare necessario inserire alcuni elementi nel Song Editor!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songsenza_nomeuntitledsong AMPIOWIDEstereoEnhancerControlDialogAmpiezza:Width:stereoEnhancerControlDialogAmpiezzaWidthstereoEnhancerControls<Volume da Sinistra a Sinistra:Left to Left Vol:stereoMatrixControlDialog8Volume da Sinistra a Destra:Left to Right Vol:stereoMatrixControlDialog8Volume da Destra a Sinistra:Right to Left Vol:stereoMatrixControlDialog4Volume da Destra a Destra:Right to Right Vol:stereoMatrixControlDialog,Da Sinistra a Sinistra Left to LeftstereoMatrixControls(Da Sinistra a Destra Left to RightstereoMatrixControls(Da Destra a Sinistra Right to LeftstereoMatrixControls$Da Destra a DestraRight to RightstereoMatrixControlsfUna volta fermata la riproduzione, torna all'inizioAfter stopping go back to begintimeLineUna volta fermata la riproduzione, torna alla posizione da cui si partiti?After stopping go back to position at which playing was startedtimeLinepUna volta fermata la riproduzione, mantieni la posizioneAfter stopping keep positiontimeLineXAbilita/disabilita lo scorrimento automaticoEnable/disable auto-scrollingtimeLineRAbilita/disabilita i punti di ripetizioneEnable/disable loop-pointstimeLineSuggerimentoHinttimeLineTieni premuto <Shift> per spostare l'inizio del punto di loop; premi <Ctrl> per disabilitare i punti di loop magnetici.XHold to move the begin loop point; Press to disable magnetic loop points.timeLinepPremi <Ctrl> per disabilitare i punti di loop magnetici.-Press to disable magnetic loop points.timeLineMutoMutedtrackSoloSolotrackMutoMutedtrackContentObject0%1:%2 (da %3:%4 a %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView CopiaCopytrackContentObjectView"Lunghezza attualeCurrent lengthtrackContentObjectView"Posizione attualeCurrent positiontrackContentObjectView TagliaCuttrackContentObjectViewDElimina (tasto centrale del mouse)Delete (middle mousebutton)trackContentObjectViewSuggerimentoHinttrackContentObjectViewvAttiva/disattiva la modalit muta (<Ctrl> + tasto centrale)#Mute/unmute ( + middle click)trackContentObjectViewIncollaPastetrackContentObjectViewdPremere <Ctrl>, cliccare e trascinare per copiare.%Press and drag to make a copy.trackContentObjectView\Premere <Ctrl> per ridimensionare liberamente.Press for free resizing.trackContentObjectView2Azioni per questa tracciaActions for this tracktrackOperationsWidget,Pulisci questa tracciaClear this tracktrackOperationsWidget(Clona questa tracciaClone this tracktrackOperationsWidgetMutoMutetrackOperationsWidgetJMetti questa traccia in modalit mutaMute this tracktrackOperationsWidgetPremere <Ctrl> mentre si clicca sulla maniglia per lo spostamento per iniziare una nuova azione di drag'n'drop.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget,Elimina questa tracciaRemove this tracktrackOperationsWidgetSoloSolotrackOperationsWidgetPSpegni tutti i processi di registrazioneTurn all recording offtrackOperationsWidgetRAccendi tutti i processi di registrazioneTurn all recording ontrackOperationsWidgetJErrore nel caricamento del plugin VSTFailed loading VST-pluginvestigeInstrument$Caricamento pluginLoading pluginvestigeInstrument\Prego attendere, caricamento del plugin VST...'Please wait while loading VST-plugin...vestigeInstrumentfNon stato possibile caricare il plugin VST %1 a causa di alcuni errori. Se, con altre applicazioni GNU/Linux il plugin funziona, si prega di contattare uno sviluppatore di LMMS!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentIntonazione %1 Detune %1vibedFuzziness %1 Fuzziness %1 vibedImpulso %1 Impulse %1vibedLunghezza %1 Length %1vibedOttava %1 Octave %1vibed Pan %1Pan %1vibed0Posizione del plettro %1Pick %1 positionvibed.Posizione del pickup %1Pickup %1 positionvibed,Durezza della corda %1String %1 stiffnessvibed*Volume della corda %1String %1 volumevibed &Aiuto&Help vibedViewhCliccando qui si abilita/disabilita la forma d'onda.&Click here to enable/disable waveform. vibedViewbCliccando qui la forma d'onda viene normalizzata.!Click here to normalize waveform. vibedView`Cliccando qui la forma d'onda viene ammorbidita.Click here to smooth waveform. vibedViewIntonazione:Detune: vibedView(Abilita forma d'ondaEnable waveform vibedViewFuzziness: Fuzziness: vibedView&Editor dell'impulsoImpulse Editor vibedView0Impulso o stato inizialeImpulse or initial state vibedViewLunghezza:Length: vibedViewNormalizza Normalize vibedView OttavaOctave vibedViewPan:Pan: vibedView,Posizione del plettro:Pick position: vibedView*Posizione del pickup:Pickup position: vibedView(Onda a dente di segaSaw wave vibedView Onda sinusoidale Sine wave vibedViewAmmorbidisciSmooth vibedViewOnda quadra Square wave vibedView CordaString vibedView(Durezza della corda:String stiffness: vibedView:Il selettore 'Imp' determina se la forma d'onda nel grafico deve essere trattata come l'impulso del plettro sulla corda o come lo stato iniziale della corda.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewLa manopola 'P' regola il punto in cui verr 'pizzicata' la corda. Pi basso sar il valore, pi vicino al ponte sar il plettro.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewDLa manopola 'PU' regola la posizione in cui verranno rilevate le vibrazioni della corda selezionata. Pi basso sar il valore, pi vicino al ponte sar il pickup.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedView`La manopola 'S' regola la durezza della corda selezionata. La durezza della corda influenza la durata della vibrazione. Pi basso sar il valore, pi a lungo suoner la corda.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewrLa manopola 'V' regola il volume della corda selezionata.4The 'V' knob sets the volume of the selected string. vibedViewLa manopola Intonazione regola l'altezza del suono della corda selezionata. Valori sotto lo zero sposteranno l'intonazione della corda verso il bemolle. Valori sopra lo zero spostarenno l'intonazione della corda verso il diesis.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewvLa manopola Lunghezza regola la lunghezza della corda selezionata. Corde pi lunghe suonano pi a lungo e hanno un suono pi brillante. Tuttavia richiedono anche pi tempo del processore.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewFIl seletore Ottava serve per scegliere a quale armonico della nota risuona la corda. Per esempio, '-2' significa che la corda risuona due ottave sotto la fondamentale, 'F' significa che la corda risuona alla fondamentale e '6' significa che la corda risuona sei ottave sopra la fondamentale.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewLa manopola Pan determina la posizione della corda selezionata nello spettro stereo.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewbLa manopola Slap aggiungeun po' di "sporco" al suono della corda selezionata, sensibile soprattutto nell'attacco, anche se pu essere usato per rendere il suono pi "metallico".The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewIl selettore della Corda serve per scegliere su quale corda hanno effetto i controlli. Uno strumento Vibed pu contenere fino a nove corde che indipendenti. Il LED nell'angolo in basso a destra dell'editor della forma d'onda indica se la corda attiva.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewxL'editor della forma d'onda fornisce il controllo sull'impulso iniziale usato per far vibrare la corda. I pulsanti a destra del grafico predispongono una forma d'onda del tipo selezionato. Il pulsante '?' carica la forma d'onda da un file--verranno caricati solo i primi 128 campioni. La forma d'onda pu anche essere disegnata direttamente sul grafico. Il pulsante 'S' ammorbisce la forma d'onda. Il pulsante 'N' normalizza la forma d'onda.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedView Onda triangolare Triangle wave vibedViewtUtilizzare un'onda a dente di sega per questo oscillatore.&Use a saw-wave for current oscillator. vibedViewlUtilizzare un'onda sinusoidale per questo oscillatore.'Use a sine-wave for current oscillator. vibedViewbUtilizzare un'onda quadra per questo oscillatore.)Use a square-wave for current oscillator. vibedViewlUtilizzare un'onda triangolare per questo oscillatore.+Use a triangle-wave for current oscillator. vibedViewrUtilizzare un'onda personalizzata per questo oscillatore.3Use a user-defined waveform for current oscillator. vibedView`Utilizzare rumore bianco per questo oscillatore.'Use white-noise for current oscillator. vibedView6Forma d'onda personalizzataUser defined wave vibedViewVibed modella fino a nove corde che vibrano indipendentemente. Il selettore 'Corda' permettedi scegliere quale corda modificare. Il selettore 'Imp' sceglie se il grafico sar l'impulso dato o lo stato iniziale della corda. Il selettore 'Ottava' imposta l'armonico a cui risuoner la corda. Il grafico permette di controllare l'impulso (o lo stato iniziale) per far vibrare la corda. La manopola 'V' reogla il volume. La manopola 'S' regola la durezza della corda. La manopola 'P' regola la posiziona del plettro. La manopola 'PU' regola la posizione del pickup. 'Pan' e 'Detune' non dovrebbero aver bisogno di spiegazioni. La manopola 'Slap' aggiunge un po' di "sporco" al suono della corda. La manopola 'Lunghezza' regola la lunghezza della corda. Il LED nell'angolo in basso a destra sull'editor della forma d'onda determina se la corda attiva nello strumento selezionato.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewVolume:Volume: vibedViewRumore biancoWhite noise wave vibedView(Clicca per abilitareClick to enablevisualizationWidgetcliccando si abilita/disabilita la visualizzazione dell'uscita principale6click to enable/disable visualization of master-outputvisualizationWidgetAttacco voce %1Voice %1 attack voiceObject&Intonazione voce %1Voice %1 coarse detuning voiceObject&Decadimento voce %1Voice %1 decay voiceObject$Filtraggio voce %1Voice %1 filtered voiceObject,Ampiezza pulse voce %1Voice %1 pulse width voiceObject Rilascio voce %1Voice %1 release voiceObject0Modulazione ring voce %1Voice %1 ring modulate voiceObject Sostegno voce %1Voice %1 sustain voiceObject0Sincronizzazione voce %1 Voice %1 sync voiceObjectTest voce %1 Voice %1 test voiceObject(Forma d'onda voce %1Voice %1 wave shape voiceObjectTClicca qui per addolcire il grafico d'onda*Click here to apply smoothing to wavegraphwaveShaperControlDialogClicca qui per diminuire l'amplificazione del grafico d'onda di 1dB1Click here to decrease wavegraph amplitude by 1dBwaveShaperControlDialogClicca qui per aumentare l'amplificazione del grafico d'onda di 1dB1Click here to increase wavegraph amplitude by 1dBwaveShaperControlDialogClicca qui per resettare il grafico d'onda alla condizione originale1Click here to reset the wavegraph back to defaultwaveShaperControlDialogTaglia input Clip inputwaveShaperControlDialog@Taglia in segnale di input a 0dBClip input signal to 0dBwaveShaperControlDialog@Diminuisi l'amplificatore di 1dBDecrease graph amplitude by 1dBwaveShaperControlDialog INPUTINPUTwaveShaperControlDialog>Aumenta l'amplificazione di 1dBIncrease graph amplitude by 1dBwaveShaperControlDialog$Guadagno in Input: Input gain:waveShaperControlDialog OUTPUTOUTPUTwaveShaperControlDialog&Guadagno in output: Output gain:waveShaperControlDialog(Resetta forma d'ondaReset waveformwaveShaperControlDialog&Spiana forma d'ondaSmooth waveformwaveShaperControlDialog"Guadagno in input Input gainwaveShaperControls$Guadagno in output Output gainwaveShaperControlslmms-1.1.3/data/locale/it.ts000066400000000000000000011710621247673406200156430ustar00rootroot00000000000000 AboutDialog About LMMS About LMMS LMMS (Linux MultiMedia Studio) LMMS (Linux MultiMedia Studio) Version %1 (%2/%3, Qt %4, %5) Versione %1 (%2/%3, Qt %4, %5) About Informazioni su LMMS - easy music production for everyone LMMS - Produzione musicale semplice per tutti Authors Autori Translation Traduzione Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! Se hai partecipato alla traduzione ed il tuo nome non è presente in questa lista, aggiungilo! Roberto Giaconia <derobyj@gmail.com> Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, sei il benvenuto! License Licenza Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> AmplifierControlDialog VOL VOL Volume: Volume: PAN BIL Panning: Bilanciamento: LEFT SX Left gain: Guadagno a sinistra: RIGHT DX Right gain: Guadagno a destra: AmplifierControls Volume Volume Panning Bilanciamento Left gain Guadagno a sinistra Right gain Guadagno a destra AudioAlsa::setupWidget DEVICE PERIFERICA CHANNELS CANALI AudioFileProcessorView Open other sample Apri un altro campione Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Clicca qui per aprire un altro file audio. Apparirà una finestra di dialogo dove sarà possibile scegliere il file. Impostazioni come la modalità ripetizione, amplificazione e così via non vengono reimpostate, pertanto potrebbe non suonare come il file originale. Reverse sample Inverti il campione If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Attivando questo pulsante, l'intero campione viene invertito. Ciò è utile per effetti particolari, ad es. un crash invertito. Amplify: Amplificazione: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Questa manopola regola l'amplificaione. Con un valore pari a 100% il campione non viene modificato, altrimenti verrà amplificato della percentuale specificata (il file originale non viene modificato!) Startpoint: Punto di inizio: Endpoint: Punto di fine: Continue sample playback across notes Continua la ripetizione del campione tra le note Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Attivando questa opzione, il campione audio viene riprodotto tra note differenti: se cambi l'altezza, o la nota finisce prima del punto di fine del campione, allora la nota seguente riprodurrà il campione da dove si era fermata la precedente. Se invece si vuol far ripartire il campione dal punto d'inizio, bisogna inserire una nota molto grave (< 20 Hz) Disable loop Disabilità ripetizione This button disables looping. The sample plays only once from start to end. Questo pulsante disabilità la ripetizione. Il suono viene eseguito solo una volta dall'inizio alla fine. Enable loop Abilita ripetizione This button enables forwards-looping. The sample loops between the end point and the loop point. Questo pulsante abilità la ripetizione diretta. Il suono viene ripetuto indefinitamente dal loop point al punto di fine. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. Questo pulsante abilita la ripetizione ing-pong. Il suono viene eseguito avanti e indietro tra il punto di fine e il loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. Con questa manopola puoi impostare il punto da cui AudioFileProcessor inizia a riprodurre il suono. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Con questa manopola puoi impostare il punti in cui AudioFileProcessor finisce di riprodurre il suono. Loopback point: Punto LoopBack: With this knob you can set the point where the loop starts. Con questa modalità puoi impostare il punto dove la ripetizione comincia: la parte del suono tra il LoopBack e il punto di fine è quella che verà ripetuta. AudioFileProcessorWaveView Sample length: Lunghezza del campione: AudioJack JACK client restarted Il client JACK è ripartito LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS è stato kickato da JACK per qualche motivo. Quindi il collegamento JACK di LMMS è ripartito. Dovrai rifare le connessioni. JACK server down Il server JACK è down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Il server JACK sembra essere stato spento e non sono partite nuove istanze. Quindi LMMS non è in grado di procedere. Salva il progetto attivo e fai ripartire JACK ed LMMS. AudioJack::setupWidget CLIENT-NAME NOME DEL CLIENT CHANNELS CANALI AudioOss::setupWidget DEVICE PERIFERICA CHANNELS CANALI AudioPortAudio::setupWidget BACKEND USCITA POSTERIORE DEVICE PERIFERICA AudioPulseAudio::setupWidget DEVICE PERIFERICA CHANNELS CANALI AudioSdl::setupWidget DEVICE PERIFERICA AutomatableModel &Reset (%1%2) &Reimposta (%1%2) &Copy value (%1%2) &Copia valore (%1%2) &Paste value (%1%2) &Incolla valore (%1%2) Edit song-global automation Modifica l'automazione globale della traccia Connected to %1 Connesso a %1 Connected to controller Connesso a un controller Edit connection... Modifica connessione... Remove connection Rimuovi connessione Connect to controller... Connetti a un controller... Remove song-global automation Rimuovi l'automazione globale della traccia Remove all linked controls Rimuovi tutti i controlli collegati AutomationEditor Play/pause current pattern (Space) Riproduci/metti in pausa questo pattern (Barra Spaziatrice) Stop playing of current pattern (Space) Ferma la riproduzione di questo pattern (Barra Spaziatrice) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. Click here if you want to stop playing of the current pattern. Cliccando qui si ferma la riproduzione del pattern. Draw mode (Shift+D) Modalità disegno (Shift+D) Erase mode (Shift+E) Modalità cancella (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'. Cut selected values (Ctrl+X) Taglia i valori selezionati (Ctrl+X) Copy selected values (Ctrl+C) Copia i valori selezionati (Ctrl+C) Paste values from clipboard (Ctrl+V) Incolla i valori selezionati (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliccando qui i valori selezionati vengono spostati nella clipboard. È possibile incollarli ovunque, in qualsiasi pattern, cliccando il pulsante Incolla. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliccando qui i valori selezionati vengono copiati della clipboard. È possibile incollarli ovunque, in qualsiasi pattern, cliccando il pulsante Incolla. Click here and the values from the clipboard will be pasted at the first visible measure. Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. Automation Editor - no pattern Editor dell'automazione - nessun pattern Automation Editor - %1 Editor dell'automazione - %1 Please open an automation pattern with the context menu of a control! È necessario aprire un pattern di automazione con il menu contestuale di un controllo! Values copied Valori copiati All selected values were copied to the clipboard. Tutti i valori sono stati copiati nella clipboard. Discrete progression Progressione discreta Linear progression Progressione lineare Cubic Hermite progression Progressione a cubica di Hermite Tension: tensione: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Clicca qui per scegliere il metodo di progressione discreta per questo pattern di automazione. Il valore della variabile connessa rimarrà costante tra i punti disegnati, cambierà immediatamente non appena raggiunto ogni punto. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Clicca qui per scegliere il metodo di progressione lineare per questo pattern di automazione. Il valore della variabile connessa cambierà in modo costante nel tempo tra i punti disegnati per arrivare al valore di ogni punto senza cambiamenti bruschi. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Clicca qui per scegliere il metodo di progressione a cubica di Hermite per questo pattern di automazione. Il valore della variabile connessa cambierà seguendo una curva morbida. Tension value for spline Valore di tensione per la spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. Un'alta tensione può creare una curva più morbida, ma potrebbe non eseguire alcuni valori con precisione. Una bassa tensione farà stabilizzare la pendenza della curva verso i valori dei punti disegnati. AutomationPattern Drag a control while pressing <Ctrl> Trascina un controllo tenendo premuto <Ctrl> Model is already connected to this pattern. Il cntrollo è già connesso a questo pattern. AutomationPatternView double-click to open this pattern in automation editor Fai doppio-click per disegnare questo pattern di automazione Open in Automation editor Apri nell'editor dell'Automazione Clear Pulisci Reset name Reimposta nome Change name Rinomina %1 Connections %1 connessioni Disconnect "%1" Disconnetti "%1" Set/clear record Accendi/spegni registrazione AutomationTrack Automation track Traccia di automazione BassBoosterControlDialog FREQ FREQ Frequency: Frequenza: GAIN GUAD Gain: Guadagno: RATIO RAPP Ratio: Rapporto: BassBoosterControls Frequency Frequenza Gain Guadagno Ratio Rapporto dinamico CarlaInstrumentView Show GUI Mostra GUI Click here to show or hide the graphical user interface (GUI) of Carla. Clicca qui per mostrare o nascondere l'interfaccia grafica (GUI) di Carla. Controller Controller %1 Controller %1 ControllerConnectionDialog Connection Settings Impostazioni connessione MIDI CONTROLLER CONTROLLER MIDI Input channel Canale di ingresso CHANNEL CANALE Input controller Controller di input CONTROLLER CONTROLLER Auto Detect Rilevamento automatico MIDI-devices to receive MIDI-events from Le periferiche MIDI ricevono eventi MIDI da USER CONTROLLER CONTROLLER PERSONALIZZATO MAPPING FUNCTION FUNZIONE DI MAPPATURA OK OK Cancel Annulla LMMS LMMS Cycle Detected. Ciclo rilevato. ControllerRackView Controller Rack Rack di Controller Add Aggiungi Confirm Delete Conferma eliminazione Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. Confermi l'eliminazione? Ci sono connessioni associate a questo controller: non sarà possibile ripristinarle. ControllerView Controls Controlli Controllers are able to automate the value of a knob, slider, and other controls. I controller possono automatizzare il valore di una manopola, di uno slider e di altri controlli. Rename controller Rinomina controller Enter the new name for this controller Inserire il nuovo nome di questo controller &Remove this plugin &Elimina questo plugin &Help &Aiuto DualFilterControlDialog Filter 1 enabled Abilita filtro 1 Filter 2 enabled Abilita filtro 2 Click to enable/disable Filter 1 Clicca qui per abilitare/disabilitare il filtro 1 Click to enable/disable Filter 2 Clicca qui per abilitare/disabilitare il filtro 2 DualFilterControls Filter 1 enabled Attiva Filtro 1 Filter 1 type Tipo del Filtro 1 Cutoff 1 frequency Frequenza di taglio Filtro 1 Q/Resonance 1 Risonanza Filtro 1 Gain 1 Guadagno Filtro 1 Mix Mix Filter 2 enabled Abilita Filtro 2 Filter 2 type Tipo del Filtro 2 Cutoff 2 frequency Frequenza di taglio Filtro 2 Q/Resonance 2 Risonanza Filtro 2 Gain 2 Guadagno Filtro 2 LowPass PassaBasso HiPass PassaAlto BandPass csg PassaBanda csg BandPass czpg PassaBanda czpg Notch Notch Allpass Passatutto Moog Moog 2x LowPass PassaBasso 2x RC LowPass 12dB RC PassaBasso 12dB RC BandPass 12dB RC PassaBanda 12dB RC HighPass 12dB RC PassaAlto 12dB RC LowPass 24dB RC PassaBasso 24dB RC BandPass 24dB RC PassaBanda 24dB RC HighPass 24dB RC PassaAlto 24dB Vocal Formant Filter Filtro a Formante di Voce Effect Effect enabled Effetto attivo Wet/Dry mix Bilanciamento Wet/Dry Gate Gate Decay Decadimento EffectChain Effects enabled Effetti abilitati EffectRackView EFFECTS CHAIN CATENA DI EFFETTI Add effect Aggiungi effetto EffectSelectDialog Add effect Aggiungi effetto Plugin description Descrizione Plugin EffectView Toggles the effect on or off. Abilita o disabilita l'effetto. On/Off On/Off W/D W/D Wet Level: Livello del segnale modificato: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. La manopola Wet/Dry imposta il rapporto tra il segnale in ingresso e la quantità di effetto udibile in uscita. DECAY DECAY Time: Tempo: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. La manopola Decadimento controlla quanto silenzio deve esserci prima che il plugin si fermi. Valori più piccoli riducono il carico del processore ma rischiano di troncare la parte finale degli effetti di delay. GATE GATE Gate: Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. La manopola Gate controlla il livello del segnale che è considerato 'silenzio' per decidere quando smettere di processare i segnali. Controls Controlli Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. I plugin di effetti funzionano come una catena di effetti sottoposti al segnale dall'alto verso il basso. L'interruttore On/Off permette di saltare un certo plugin in qualsiasi momento. La manopola Wet/Dry controlla il bilanciamento tra il segnale in ingresso e quello processato che viene emesso dall'effetto. L'ingresso di ogni stadio è costituito dall'uscita dello stadio precedente, così il segnale 'dry' degli effetti sottostanti contiene tutti i precedenti effetti. La manopola Decadimento controlla il tempo per cui il segnale viene processato dopo che le note sono state rilasciate. L'effetto smette di processare il segnale quando questo scende sotto una certa soglia per un certo periodo ti tempo. La manopola imposta questo periodo di tempo. Tempi maggiori richiedono una maggiore potenza del processore, quindi il tempo dovrebbe rimanere basso per la maggior parte degli effetti. È necessario aumentarlo per effetti che producono lunghi periodi di silenzio, ad es. i delay. La manopola Gate regola la soglia sotto la quale l'effetto smette di processare il segnale. Il conteggio del tempo di silenzio necessario inizia non appena il sengale processato scende sotto la soglia specificata. Il pulsante Controlli apre una finestra per modificare i parametri dell'effetto. Con il click destro si apre un menu conestuale che permette di cambiare l'ordine degli effetti o di eliminarli. Move &up Sposta verso l'&alto Move &down Sposta verso il &basso &Remove this plugin &Elimina questo plugin &Help &Aiuto EnvelopeAndLfoParameters Predelay Ritardo iniziale Attack Attacco Hold Mantenimento Decay Decadimento Sustain Sostegno Release Rilascio Modulation Modulazione LFO Predelay Ritardo iniziale dell'LFO LFO Attack Attacco dell'LFO LFO speed Velocità dell'LFO LFO Modulation Modulazione dell'LFO LFO Wave Shape Forma d'onda dell'LFO Freq x 100 Freq x 100 Modulate Env-Amount Modula la quantità di Env EnvelopeAndLfoView DEL RIT Predelay: Ritardo iniziale: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Questa manopola imposta il ritardo iniziale dell'envelope selezionato. Più grande è questo valore più tempo passerà prima che l'envelope effettivo inizi. ATT ATT Attack: Attacco: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Questa manopola imposta il tempo di attacco dell'envelope selezionato. Più grande è questo valore più tempo passa prima di raggiungere il livello di attacco. Scegliere un valore contenuto per strumenti come pianoforti e un valore grande per gli archi. HOLD MANT Hold: Mantenimento: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Questa manopola imposta il tempo di mantenimento dell'envelope selezionato. Più grande è questo valore più a lungo l'envelope manterrà il livello di attacco prima di cominciare a scendere verso il livello di sostegno. DEC DEC Decay: Decadimento: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Questa manopola imposta il tempo di decdimento dell'envelope selezionato. Più grande è questo valore più lentamente l'envelope decadrà dal livello di attacco a quello di sustain. Scegliere un valore piccolo per strumenti come i pianoforti. SUST SOST Sustain: Sostegno: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Questa manopola imposta il livello di sostegno dell'envelope selezionato. Più grande è questo valore più sarà alto il livello che l'envelope manterrà prima di scendere a zero. REL RIL Release: Rilascio: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Questa manopola imposta il tempo di rilascio dell'anvelope selezionato. Più grande è questo valore più tempo l'envelope impiegherà per scendere dal livello di sustain a zero. Scegliere un valore grande per strumenti dal suono morbido, come gli archi. AMT Q.TÀ Modulation amount: Quantità di modulazione: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Questa manopola imposta la quantità di modulazione dell'envelope selezionato. Più grande è questo valore, più la grandezza corrispondente (ad es. il volume o la frequenza di taglio) sarà influenzata da questo envelope. LFO predelay: Ritardo iniziale dell'LFO: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Questa manopola imposta il ritardo iniziale dell'LFO selezionato. Più grande è questo valore più tempo passerà prima che l'LFO inizi a oscillare. LFO- attack: Attacco dell'LFO: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Questa manopola imposta il tempo di attaco dell'LFO selezionato. Più grande è questo valore più tempo l'LFO impiegherà per raggiungere la massima ampiezza. SPD VEL LFO speed: Velocità dell'LFO: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Questa manopola imposta la velocità dell'LFO selezionato. Più grande è questo valore più velocemente l'LFO oscillerà e più veloce sarà l'effetto. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Questa manopola imposta la quantità di modulazione dell'LFO selezionato. Più grande è questo valore più la grandezza selezionata (ad es. il volume o la frequenza di taglio) sarà influenzata da questo LFO. Click here for a sine-wave. Cliccando qui si ha un'onda sinusoidale. Click here for a triangle-wave. Cliccando qui si ottiene un'onda triangolare. Click here for a saw-wave for current. Cliccando qui si ha un'onda a dente di sega. Click here for a square-wave. Cliccando qui si ottiene un'onda quadra. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Cliccando qui è possibile definire una forma d'onda personalizzata. Successivamente è possibile trascinare un file di campione nel grafico dell'LFO. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. Cliccando qui la frequenza di questo LFO viene moltiplicata per 100. multiply LFO-frequency by 100 moltiplica la frequenza dell'LFO per 100 MODULATE ENV-AMOUNT MODULA LA QUANTITA' DI ENVELOPE Click here to make the envelope-amount controlled by this LFO. Cliccando qui questo LFO controlla la quantità di envelope. control envelope-amount by this LFO controlla la quantità di envelope con questo LFO ms/LFO: ms/LFO: Hint Suggerimento Drag a sample from somewhere and drop it in this window. È possibile trascinare un campione in questa finestra. Click here for random wave. Clicca qui per un'onda randomica. ExportProjectDialog Export project Esporta il progetto Output Codifica File format: Formato file: Samplerate: Frequenza di campionamento: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: Risoluzione Bit: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Non tutti i parametri si applicano nella creazione di tutti i formati. Quality settings Impostazioni qualità Interpolation: Interpolazione: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Medium (suggerito) Sinc Best (very slow!) Sinc Best (molto lento!) Oversampling (use with care!): Oversampling (usare con cura!): 1x (None) 1x (Nessuna) 2x 4x 8x Start Inizia Cancel Annulla Export as loop (remove end silence) Esporta come loop (rimuove il silenzio finale) FileBrowser Browser Browser FileBrowserTreeWidget Send to active instrument-track Sostituisci questo strumento alla traccia attiva Open in new instrument-track/Song-Editor Usa in una nuova traccia nel Song-Editor Open in new instrument-track/B+B Editor Usa in una nuova traccia nel B+B Editor Loading sample Caricamento campione Please wait, loading sample for preview... Attendere, stiamo caricando il file per l'anteprima... --- Factory files --- --- File di fabbrica --- FxLine Channel send amount Quantità di segnale inviata dal canale The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Il canale FX riceve input da uno o più tracce strumentali. Il segnale così ricevuto può essere girato ad altri canali FX. LMMS eviterà che si creino cicli infiniti non permettendo la creazione di connessioni pericolose in tal senso. Per inviare il suono di un canale ad un altro, seleziona il canale FX e premi sul pulsante "send" su un altro canale a cui vuoi inviare segnale. La manopola sotto il pulsante send controlla il livello di segnale che viene ricevuto dal canale. Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tasto destro su un canale FX. Move &left Sposta a &sinistra Move &right Sposta a $destra Rename &channel Rinomina &canale R&emove channel R&imuovi canale &Help &Aiuto FxMixer Master Master FX %1 FX %1 FxMixerView Rename FX channel Rinomina il canale FX Enter the new name for this FX channel Inserire il nuovo nome di questo canale FX FX-Mixer Mixer FX FxMixerView::FxChannelView FX Fader %1 Volume FX %1 Mute Muto Mute this FX channel Silenzia questo canale FX FxRoute Amount to send from channel %1 to channel %2 Quantità da mandare dal canale %1 al canale %2 InstrumentFunctionArpeggio Arpeggio Arpeggio Arpeggio type Tipo di arpeggio Arpeggio range Ampiezza dell'arpeggio Arpeggio time Tempo dell'arpeggio Arpeggio gate Gate dell'arpeggio Arpeggio direction Direzione dell'arpeggio Arpeggio mode Modo dell'arpeggio Up Su Down Giù Up and down Su e giù Random Casuale Free Libero Sort Ordinato Sync Sincronizzato Down and up Giù e su InstrumentFunctionArpeggioView ARPEGGIO ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Un arpeggio è un modo di suonare alcuni strumenti (pizzicati in particolare), che rende la musica più viva. Le corde di tali strumenti (ad es. un'arpa) vengono pizzicate come accordi. L'unica differenza è che ciò viene fatto in ordine sequenziale, in modo che le note non vengano suonate allo stesso tempo. Arpeggi tipici sono quelli sulle triadi maggiore o minore, ma ci sono molte altre possibilità tra le quali si può scegliere. RANGE AMPIEZZA Arpeggio range: Ampiezza dell'arpeggio: octave(s) ottava(e) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Questa manopola imposta l'ampiezza in ottave dell'arpeggio. L'arpeggio selezionato verrà suonato all'interno del numero di ottave impostato. TIME TEMPO Arpeggio time: Tempo dell'arpeggio: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Questa manopola imposta l'ampiezza dell'arpeggio in millisecondi. Il tempo dell'arpeggio specifica per quanto tempo ogni nota dell'arpeggio deve essere eseguita. GATE GATE Arpeggio gate: Gate dell'arpeggio: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Questa manopola imposta il gate dell'arpeggio. Il gate dell'arpeggio specifica la percentuale di ogni nota che deve essere eseguita. In questo modo si possono creare arpeggi particolari, con le note staccate. Chord: Tipo di arpeggio: Direction: Direzione: Mode: Modo: InstrumentFunctionNoteStacking octave ottava Major Maggiore Majb5 Majb5 minor minore minb5 minb5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri triade 6 6 6sus4 6sus4 6add9 6add9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9#5 9b5 9b5 9#11 9#11 9b13 9b13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9#5 Maj9#11 Maj9#11 m9 m9 madd9 madd9 m9b5 m9b5 m9-Maj7 m9-Maj7 11 11 11b9 11b9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Minore armonica Melodic minor Minore melodica Whole tone Toni interi Diminished Diminuita Major pentatonic Pentatonica maggiore Minor pentatonic Pentatonica minore Jap in sen Jap in sen Major bebop Bebop maggiore Dominant bebop Bebop dominante Blues Blues Arabic Araba Enigmatic Enigmatica Neopolitan Napoletana Neopolitan minor Napoletana minore Hungarian minor Ungherese minore Dorian Dorica Phrygolydian Phrygolydian Lydian Lidia Mixolydian Misolidia Aeolian Eolia Locrian Locria Chords Accordi Chord type Tipo di accordo Chord range Ampiezza dell'accordo Minor Minore Chromatic Cromatica Half-Whole Diminished Diminuita semitono-tono 5 Quinta InstrumentFunctionNoteStackingView RANGE AMPIEZZA Chord range: Ampiezza degli accordi: octave(s) ottava(e) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Questa manopola imposta l'ampiezza degli accordi in ottave. L'accordo selezionato verrà eseguito all'interno del numero di ottave impostato. STACKING ACCORDI Chord: Tipo di accordo: InstrumentMidiIOView ENABLE MIDI INPUT ABILITA INGRESSO MIDI CHANNEL CANALE VELOCITY VALOCITY ENABLE MIDI OUTPUT ABILITA USCITA MIDI PROGRAM PROGRAMMA MIDI devices to receive MIDI events from Periferica MIDI da cui ricevere segnali MIDi MIDI devices to send MIDI events to Periferica MIDI a cui mandare segnali MIDI NOTE CUSTOM BASE VELOCITY VELOCITY BASE PERSONALIZZATA Specify the velocity normalization base for MIDI-based instruments at note volume 100% Specifica la normalizzazione della velocity per strumenti MIDI al volume della nota 100% BASE VELOCITY VELOCITY BASE InstrumentSoundShaping VOLUME VOLUME Volume Volume CUTOFF CUTOFF Cutoff frequency Frequenza di taglio RESO RISO Resonance Risonanza Envelopes/LFOs Envelope/LFO Filter type Tipo di filtro Q/Resonance Q/Risonanza LowPass PassaBasso HiPass PassaAlto BandPass csg PassaBanda csg BandPass czpg PassaBanda czpg Notch Notch Allpass Passatutto Moog Moog 2x LowPass PassaBasso 2x RC LowPass 12dB RC PassaBasso 12dB RC BandPass 12dB RC PassaBanda 12dB RC HighPass 12dB RC PassaAlto 12dB RC LowPass 24dB RC PassaBasso 24dB RC BandPass 24dB RC PassaBanda 24dB RC HighPass 24dB RC PassaAlto 24dB Vocal Formant Filter Filtro a Formante di Voce InstrumentSoundShapingView TARGET OBIETTIVO These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Queste schede contengono envelopes. Sono molto importanti per modificare i suoni, senza contare che sono quasi sempre necessarie per la sintesi sottrattiva. Per esempio se si usa un envelope per il volume, si può impostare quando un suono avrà un certo volume. Si potrebbero voler creare archi dal suono morbido, allora il suono deve iniziare e finire in modo molto morbido; ciò si ottiene impostando tempi di attacco e di rilascio ampi. Lo stesso vale per le altre funzioni degli envelope, come il panning, la frequenza di taglio dei filtri e così via. Bisogna semplicemente giocarci un po'! Si possono ottenere suoni veramente interessanti a partire da un'onda a dente di sega usando soltanto qualche envelope...! FILTER FILTRO Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Qui è possibile selezionare il filtro da usare per questa traccia. I filtri sono molto importanti per cambiare le caratteristiche del suono. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Questa manopola imposta la frequenza di taglio del filtro. La frequenza di taglio specifica la frequenza a cui viene tagliato il segnate di un filtro. Per esempio un filtro passa-basso taglia tutte le frequenze sopra la frequenza di taglio, mentre un filtro passa-alto taglia tutte le frequenza al di sotto della frequenza di taglio e così via... RESO RISO Resonance: Risonanza: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Questa manopola imposta il parametro (Q) per la risonanza del filtro selezionato. Il parametro per la risonanza specifica l'ampiezza della campana di frequenze intorno alla frequenza di taglio che devono essere amplificate. FREQ FREQ cutoff frequency: Frequenza del cutoff: Envelopes, LFOs and filters are not supported by the current instrument. Gli inviluppi, gli LFO e i filtri non sono supportati dallo strumento corrente. InstrumentTrack unnamed_track traccia_senza_nome Volume Volume Panning Panning Pitch Altezza FX channel Canale FX Default preset Impostazioni predefinite With this knob you can set the volume of the opened channel. Questa manopola imposta il volume del canale. Base note Nota base Pitch range Estenzione dell'altezza InstrumentTrackView Volume Volume Volume: Volume: VOL VOL Panning Panning Panning: Panning: PAN PAN MIDI MIDI Input Ingresso Output Uscita InstrumentTrackWindow GENERAL SETTINGS IMPOSTAZIONI GENERALI Instrument volume Volume dello strumento Volume: Volume: VOL VOL Panning Panning Panning: Panning: PAN PAN Pitch Altezza Pitch: Altezza: cents centesimi PITCH ALTEZZA FX channel Canale FX ENV/LFO ENV/LFO FUNC FUNC FX FX MIDI MIDI Save preset Salva il preset XML preset file (*.xpf) File di preset XML (*.xpf) PLUGIN PLUGIN Pitch range (semitones) Ampiezza dell'altezza (in semitoni) RANGE AMPIEZZA Save current instrument track settings in a preset file Salva le impostazioni di questa traccia in un file preset Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. Clicca qui per salvare lo strumento corrente come preset. Al prossimo avvio, questo preset sarà visibile nel preset browser ("I miei preset"). LadspaControl Link channels Abbina i canali LadspaControlDialog Link Channels Canali abbinati Channel Canale LadspaControlView Link channels Abbina i canali Value: Valore: Sorry, no help available. Spiacente, nessun aiuto disponibile. LadspaEffect Effect Effetto Unknown LADSPA plugin %1 requested. Il plugin LADSPA %1 richiesto è sconosciuto. LcdSpinBox Please enter a new value between %1 and %2: Inserire un valore compreso tra %1 e %2: LfoController LFO Controller Controller dell'LFO Base value Valore di base Oscillator speed Velocità dell'oscillatore Oscillator amount Quantità di oscillatore Oscillator phase Fase dell'oscillatore Oscillator waveform Forma d'onda dell'oscillatore Frequency Multiplier Moltiplicatore della frequenza LfoControllerDialog LFO LFO LFO Controller Controller dell'LFO BASE BASE Base amount: Quantità di base: todo da fare SPD VEL LFO-speed: Velocità dell'LFO: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Questa manopola imposta la velocità dell'LFO selezionato. Più grande è questo valore più velocemente l'LFO oscillerà e più veloce sarà l'effetto. AMT Q.TÀ Modulation amount: Quantità di modulazione: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Questa manopola imposta la quantità di modulazione dell'LFO selezionato. Più grande è questo valore più la variabile selezionata (ad es. il volume o la frequenza di taglio) sarà influenzata da questo LFO. PHS FASE Phase offset: Scostamento della fase: degrees gradi With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Questa manopola regola lo scostamento della fase per l'LFO. Ciò significa spostare il punto dell'oscillazione da cui parte l'oscillatore. Per esempio, con un'onda sinusoidale e uno scostamento della fase di 180 gradi, l'onda inizierà scendendo. Lo stesso vale per un'onda quadra. Click here for a sine-wave. Cliccando qui si ha un'onda sinusoidale. Click here for a triangle-wave. Cliccando qui si ottiene un'onda triangolare. Click here for a saw-wave. Cliccando qui si ottiene un'onda a dente di sega. Click here for a square-wave. Cliccando qui si ottiene un'onda quadra. Click here for a a moog saw-wave. Cliccando qui si ha un'onda a dente di sega moog. Click here for an exponential wave. Cliccando qui si ha un'onda esponenziale. Click here for white-noise. Cliccando qui si ottiene rumore bianco. Click here for a user-defined shape. Double click to pick a file. Cliccando qui si usa un'onda definita dall'utente. Fare doppio click per scegliere il file dell'onda. MainWindow Working directory Directory di lavoro The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. La directory di lavoro di LMMS %1 non esiste. La creo adesso? Questa directory può essere cambiata in un secondo momento dal menu Modifica -> Impostazioni. Could not save config-file Non è stato possibile salvare il file di configurazione Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Non è stato possibile salvare il file di configurazione %1. Probabilmente non hai i permessi di scrittura per questo file. Assicurati di avere i permessi in scrittura per il file e riprova. &Project &Progetto &New &Nuovo &Open... &Apri... Recently opened projects Progetti aperti di recente &Save &Salva Save &As... Salva &Con Nome... Import... Importa... E&xport... E&sporta... &Quit &Esci &Edit &Modifica Settings Impostazioni &Tools S&trumenti &Help &Aiuto Online help Aiuto in linea Help Aiuto What's this? Cos'è questo? About Informazioni su Create new project Crea un nuovo progetto Create new project from template Crea un nuovo progetto da un modello Open existing project Apri un progetto esistente Recently opened project Progetti aperti di recente Save current project Salva questo progetto Export current project Esporta questo progetto Show/hide Song-Editor Mostra/nascondi il Song-Editor By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Questo pulsante mostra o nasconde il Song-Editor. Con l'aiuto del Song-Editor è possibile modificare la playlist e specificare quando ogni traccia viene riprodotta. Si possono anche inserire e spostare i campioni (ad es. campioni rap) direttamente nella lista di riproduzione. Show/hide Beat+Bassline Editor Mostra/nascondi il Beat+Bassline Editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Questo pulsante mostra o nasconde il Beat+Bassline Editor. Il Beat+Bassline Editor serve per creare beats, aprire, aggiungere e togliere canali, tagliare, copiare e incollare pattern beat e pattern bassline. Show/hide Piano-Roll Mostra/nascondi il Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Questo pulsante mostra o nasconde il Piano-Roll. Con l'aiuto del Piano-Roll è possibile modificare sequenze melodiche in modo semplice. Show/hide Automation Editor Mostra/nascondi l'Editor dell'automazione Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Questo pulsante mostra o nasconde l'editor dell'automazione. Con l'aiuto dell'editor dell'automazione è possibile rendere dinamici alcuni valori in modo semplice. Show/hide FX Mixer Mostra/nascondi il mixer degli effetti Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Questo pulsante mostra o nasconde il mixer degli effetti. Il mixer degli effetti è uno strumento molto potente per gestire gli effetti della canzone. È possibile inserire effetti in più canali. Show/hide project notes Mostra/nascondi le note del progetto Click here to show or hide the project notes window. In this window you can put down your project notes. Questo pulsante mostra o nasconde la finestra delle note del progetto. Qui è possibile scrivere le note per il progetto. Show/hide controller rack Mostra/nascondi il rack di controller Untitled Senza_nome LMMS %1 LMMS %1 Project not saved Progetto non salvato The current project was modified since last saving. Do you want to save it now? Questo progetto è stato modificato dopo l'ultimo salvataggio. Vuoi salvarlo adesso? Open project Apri progetto Save project Salva progetto Help not available Aiuto non disponibile Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Al momento non è disponibile alcun aiuto in LMMS. Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. My projects I miei progetti My samples I miei campioni My presets I miei preset My home Cartelle utente My computer Cartelle computer Root directory Directory principale Save as new &version Salva come nuova &versione E&xport tracks... E&sporta tracce... LMMS (*.mmp *.mmpz) Version %1 Versione %1 Project recovery Recupero del progetto It looks like the last session did not end properly. Do you want to recover the project of this session? Sembra che l'ultima sessione non sia stata chiusa correttamente. Vuoi recuperare il progetto di quella sessione? Configuration file File di configurazione Error while parsing configuration file at line %1:%2: %3 Si è riscontrato un errore nell'analisi del file di configurazione alle linee %1:%2: %3 Volumes Volumi Undo Annulla Redo Rifai LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) Progetto LMMS (*mmpz *.mmp);;Progetto Template LMMS (*.mpt) MeterDialog Meter Numerator Numeratore della misura Meter Denominator Denominatore della misura TIME SIG TEMPO MeterModel Numerator Numeratore Denominator Denominatore MidiAlsaRaw::setupWidget DEVICE PERIFERICA MidiAlsaSeq::setupWidget DEVICE PERIFERICA MidiController MIDI Controller Controller MIDI unnamed_midi_controller controller_midi_senza_nome MidiImport Setup incomplete Impostazioni incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Non hai impostato un soundfont di base (Modifica->Impostazioni). Quindi non sarà riprodotto alcun suono dopo aver importato questo file MIDI. Prova a scaricare un soundfont MIDI generico, specifica la sua posizione nelle impostazioni e prova di nuovo. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. Non hai compilato LMMS con il supporto per SoundFont2 Player, che viene usato per aggiungere suoni predefiniti ai file MIDI importati. Quindi, nessun suono verrà riprodotto dopo aver aperto questo file MIDI. MidiOss::setupWidget DEVICE PERIFERICA MidiPort Input channel Canale di ingresso Output channel Canale di uscita Input controller Controller in entrata Output controller Controller in uscita Fixed input velocity Velocity fissa in ingresso Fixed output velocity Velocity fissa in uscita Output MIDI program Programma MIDI in uscita Receive MIDI-events Ricevi eventi MIDI Send MIDI-events Invia eventi MIDI Fixed output note Nota fissa in uscita Base velocity Velocity base MonstroInstrument Osc 1 Volume Osc 1 Volume Osc 1 Panning Osc 1 Bilanciamento Osc 1 Coarse detune Osc 1 Intonazione Grezza Osc 1 Fine detune left Osc 1 Intonazione precisa sinistra Osc 1 Fine detune right Osc 1 Intonazione precisa destra Osc 1 Stereo phase offset Osc 1 Spostamento di fase stereo Osc 1 Pulse width Osc 1 Profondità impulso Osc 1 Sync send on rise Osc 1 Manda sync in salita Osc 1 Sync send on fall Osc 1 Manda sync in discesa Osc 2 Volume Osc 2 Volume Osc 2 Panning Osc 2 Bilanciamento Osc 2 Coarse detune Osc 2 Intonazione Grezza Osc 2 Fine detune left Osc 2 Intonazione precisa sinistra Osc 2 Fine detune right Osc 2 Intonazione precisa destra Osc 2 Stereo phase offset Osc 2 Spostamento di fase stereo Osc 2 Waveform Osc 2 Forma d'onda Osc 2 Sync Hard Osc 2 Sync pesante Osc 2 Sync Reverse Osc 2 Sync inverso Osc 3 Volume Osc 3 Volume Osc 3 Panning Osc 3 Bilanciamento Osc 3 Coarse detune Osc 3 Intonazione Grezza Osc 3 Stereo phase offset Osc 3 Spostamento di fase stereo Osc 3 Sub-oscillator mix Osc 3 Miscela sub-oscillatori Osc 3 Waveform 1 Osc 3 Forma d'onda 1 Osc 3 Waveform 2 Osc 3 Forma d'onda 2 Osc 3 Sync Hard Osc 3 Sync pesante Osc 3 Sync Reverse Osc 3 Sync inverso LFO 1 Waveform LFO 1 Forma d'onda LFO 1 Attack LFO 1 Attacco LFO 1 Rate LFO 1 Rate LFO 1 Phase LFO 1 Fase LFO 2 Waveform LFO 2 Forma d'onda LFO 2 Attack LFO 2 Attacco LFO 2 Rate LFO 2 Rate LFO 2 Phase LFO 2 Fase Env 1 Pre-delay Env 1 Pre-ritardo Env 1 Attack Env 1 Attacco Env 1 Hold Env 1 Mantenimento Env 1 Decay Env 1 Decadimento Env 1 Sustain Env 1 Sostegno Env 1 Release Env 1 Rilascio Env 1 Slope Env 1 Inclinazione Env 2 Pre-delay Env 2 Pre-ritardo Env 2 Attack Env 2 Attacco Env 2 Hold Env 2 Mantenimento Env 2 Decay Env 2 Decadimento Env 2 Sustain Env 2 Sostegno Env 2 Release Env 2 Rilascio Env 2 Slope Env 2 Inclinazione Osc2-3 modulation Modulazione Osc2-3 Selected view Seleziona vista Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view Vista operatori The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. La vista operatori contiene tutti gli operatori. Vi sono sia operatori udibili (oscillatori), che silenziosi, o modulatori: LFO e inviluppi. Usa il "Cos'è questo?" su tutte le manopole di questa vista per avere informazioni specifiche su di esse. Matrix view Vista Matrice The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. La vista matrice contiene la matrice di modulazione. Qui puoi definire le relazioni di modulazione tra i vari operatori: ogni operatore udibile (gli oscillatori da 1 a 3) ha 3-4 proprietà che possono essere modulate da qualsiasi modulatore. L'utilizzo eccessivo di modulazioni può appesantire la CPU. La vista è divisa in obiettivi di modulazione, raggruppati dagli oscillatori. Possono essere modulati il volume, l'altezza, la fase, la larghezza dell'impulso e il rateo del sottooscillatorie. Nota: alcune proprietà sono esclusive di un solo oscillatore. Ogni proprietà modulabile ha 4 manopole, una per ogni modulatore. Sono tutti a 0 di default, ossia non vi è modulazione. Il massimo della modulazione si ottiene portando una manopola a 1. I valori negativi invertono l'effetto che avrebbero quelli positivi. Mix Osc2 with Osc3 Mescola l'Osc2 con l'Osc3 Modulate amplitude of Osc3 with Osc2 Modula l'amplificazione dell'Osc3 con l'Osc2 Modulate frequency of Osc3 with Osc2 Modula la frequenza dell'Osc3 con l'Osc2 Modulate phase of Osc3 with Osc2 Modula la fase dell'Osc3 con l'Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. La manopola CRS cambia l'intonazione dell'oscillatore 1 per semitoni. The CRS knob changes the tuning of oscillator 2 in semitone steps. La manopola CRS cambia l'intonazione dell'oscillatore 2 per semitoni. The CRS knob changes the tuning of oscillator 3 in semitone steps. La manopola CRS cambia l'intonazione dell'oscillatore 3 per semitoni. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. FTL e FTR cambiano l'intonazione precisa dell'oscillatore per i canali sinistro e destro rispettivamente. Possono essere usati per creare un'illusione di spazio. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. La manopola SPO altera la differenza in fase tra i canali sinistro e destro. Una differenza maggiore crea un'immagine stereo più larga. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. La manopola PW controlla la profondità dell'impulso, conosciuta anche come duty cycle, dell'oscillatore 1. L'oscillatore 1 è un oscillatore d'onda a impulso digitale, non produce un output con banda limitata, il che vuol dire che è possibile usarlo come un oscillatore udibile ma ciò creerà aliasing. Puoi anche usarlo come fonte silenziosa di un segnale di sincronizzazione, che sincronizza gli altri due oscillatori. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Manda sync in salita: se abilitato, il segnale di sync viene mandato ogni volta che lo stato dell'oscillatore 1 cambia da basso ad alto, per esempio se l'amplificazione passa da -1 a 1. Sia l'altezza che la fase che i'mpulso possono interessare il tempo dei sync, ma il volume no. I segnali di sync vengono trattati indipendentemente per i canali destro e sinistro. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Manda sync in discesa: se abilitato, il segnale di sync viene mandato ogni volta che lo stato dell'oscillatore 1 cambia da alto a basso, per esempio se l'amplificazione passa da 1 a -1. Sia l'altezza che la fase che i'mpulso possono interessare il tempo dei sync, ma il volume no. I segnali di sync vengono trattati indipendentemente per i canali destro e sinistro. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Sync potente: ogni volta che l'oscillatore siceve un segnale di sync dall'Osc1, la sua fase viene resettata alla sua origine. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Sync di inversione: ogni volta che l'oscillatore riceve un segnale di sync dall'Osc1, l'amplificazione dell'oscillatore viene invertita. Choose waveform for oscillator 2. Seleziona la forma d'onda per l'Osc2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Seleziona la forma d'onda per il primo sub-oscillatore dell'Osc3. L'Osc3 può interpolare morbidamente tra due forme d'onda diverse. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Seleziona la forma d'onda per il secondo sub-oscillatore dell'Osc3. L'Osc3 può interpolare morbidamente tra due forme d'onda diverse. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. La manopola SUB cambia le qualtità per la miscela tra i due sub-oscillatori. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2. La modalità Mix non produce nessuna modulazione: i due oscillatori sono semplicemente miscelati tra di loro. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2. AM vuol dire modulazione di amplificazione: quella dell'Osc3 (il suo volume) è modulata dall'output dell'Osc2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2. FM vuol dire modulazione di frequenza: quella dell'Osc3 (la sua altezza) è modulata dall'Osc2. Questa modulazione è implementata come una modulazione di fase, in modo da avere una frequenza risultate più stabile di una FM pura. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'outpit dell'Osc2. PM è la modulazione di fase: quella dell'Osc3 è modulata dall'Osc2. La differenza con la modulazione di frequenza consiste nel fatto che in quella i cambiamenti di fase non sono cumulativi. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Selezioa la forma d'onda per l'LFO 1. Vi sono due forme speciali: "Random" e "Random morbido" sono onde speciali che producono un aoutup randomico, dove il rate dell'LFO controlla quanto spesso lo stato dell'LFO cambia. La versione morbila interpola tra questi stati con una interpolazione a coseno. Queste modalità possono essere usate per ridare "vita" ai toi preset o aggiungere un po' di quella imprevedibilità degli stumenti analogici... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Selezioa la forma d'onda per l'LFO 2. Vi sono due forme speciali: "Random" e "Random morbido" sono onde speciali che producono un aoutup randomico, dove il rate dell'LFO controlla quanto spesso lo stato dell'LFO cambia. La versione morbila interpola tra questi stati con una interpolazione a coseno. Queste modalità possono essere usate per ridare "vita" ai toi preset o aggiungere un po' di quella imprevedibilità degli stumenti analogici... Attack causes the LFO to come on gradually from the start of the note. L'attacco fa sì che l'LFO arrivi gradualmente al suo stato da quello della nota suonata. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. Il rate setta la velocità dell'LFO, misurata in millisecondi per ciclo. Può essere sincronizzata al tempo nel suo menù a tendina. PHS controls the phase offset of the LFO. PHS controlla lo spostamento di fase dell'LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. PRE, o pre-ritardo, ritarda l'inizio dell'inviluppo dal momento in cui la nota viene suonata. 0 vuol dire nessun ritardo. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. ATT, o attacco, controlla quanto velocemente l'inviluppo arriva al suo masimmo, misurando questo tempo in millisecondi. 0 vuol dire che il valore massimo viene raggiunto istantaneamente. HOLD controls how long the envelope stays at peak after the attack phase. HOLD controlla per quanto tempo l'inviluppo rimane al suo massimo dopo l'attacco. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. DEC, o decadimento, controlla in quanto tempo l'inviluppo cade dal suo massimo, misurandolo in missilecondi. Il decadimento effettivo potrebbe essere più lento se viene alterato il sostegno. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. SUS, o sostegno, controlla il livello di sostegno dell'inviluppo. La fase di decadimento non scenderà oltre questo livello fino a che la nota viene suonata. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. REL, o rilascio, controlla il tempo di rilascio della nota, misurandola in millisecondi. Se l'inviluppo non si trova al suo valore massimo quando la nota è rilasciata, il rilascio potrebbe durare di meno. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. SLOPE, o inclinazione, controlla la curva (o la forma) dell'inviluppo. Un valore pari a 0 lascia le salite e le discese come linee dritte. Valori negativi creeranno dei movimenti che partono lentamente, arrivano a un picco ripido, e poi terminano di nuovo lentamente. Valori positivi daranno curve che salgono e scendono velocemente, ma si fermano ai picchi. NesInstrument Channel 1 Coarse detune Intonazione grezza Canale 1 Channel 1 Volume Volume Canale 1 Channel 1 Envelope length Lunghezza inviluppo Canale 1 Channel 1 Duty cycle Duty cycle del Canale 1 Channel 1 Sweep amount Quantità di sweep Canale 1 Channel 1 Sweep rate Velocità di sweep Canale 1 Channel 2 Coarse detune Intonazione grezza Canale 2 Channel 2 Volume Volume Canale 2 Channel 2 Envelope length Lunghezza inviluppo Canale 2 Channel 2 Duty cycle Duty cycle del Canale 2 Channel 2 Sweep amount Quantità di sweep Canale 2 Channel 2 Sweep rate Velocità di sweep Canale 2 Channel 3 Coarse detune Intonazione grezza Canale 3 Channel 3 Volume Volume Canale 3 Channel 4 Volume Volume Canale 4 Channel 4 Envelope length Lunghezza inviluppo Canale 4 Channel 4 Noise frequency Frequenza rumore Canale 4 Channel 4 Noise frequency sweep Frequenza rumore di sweep Canale 4 Master volume Volume principale Vibrato Vibrato OscillatorObject Osc %1 volume Volume osc %1 Osc %1 panning Panning osc %1 Osc %1 coarse detuning Intonazione osc %1 Osc %1 fine detuning left Intonazione precisa osc %1 sinistra Osc %1 fine detuning right Intonazione precisa osc %1 destra Osc %1 phase-offset Scostamento fase osc %1 Osc %1 stereo phase-detuning Intonazione fase stereo osc %1 Osc %1 wave shape Forma d'onda Osc %1 Modulation type %1 Modulazione di tipo %1 Osc %1 waveform Forma d'onda osc %1 Osc %1 harmonic Armoniche Osc %1 PatmanView Open other patch Apri un'altra patch Click here to open another patch-file. Loop and Tune settings are not reset. Clicca qui per aprire un altro file di patch. Le impostazioni di ripetizione e intonazione non vengono reimpostate. Loop Ripetizione Loop mode Modalità ripetizione Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Qui puoi scegliere la modalità di ripetizione. Se abilitata, PatMan userà l'informazione sulla ripetizione disponibile nel file. Tune Intonazione Tune mode Modalità intonazione Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Qui puoi scegliere la modalità di intonazione. Se abilitata, PatMan intonerà il campione alla frequenza della nota. No file selected Nessun file selezionato Open patch file Apri file di patch Patch-Files (*.pat) File di patch (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step un doppio click apre questo pattern nel piano-roll la rotellina del mouse impostare il volume delle note Open in piano-roll Apri nel piano-roll Clear all notes Cancella tutte le note Reset name Reimposta il nome Change name Cambia nome Add steps Aggiungi note Remove steps Elimina note PeakController Peak Controller Controller dei picchi Peak Controller Bug Bug del controller dei picchi Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. A causa di un bug nelle versioni precedenti di LMMS, i controller dei picchi potrebbero non essere connessi come dovuto. Assicurati che i controller dei picchi siano connessi e salva questo file di nuovo. Ci scusiamo per gli inconvenienti causati. PeakControllerDialog PEAK PICCO LFO Controller Controller dell'LFO PeakControllerEffectControlDialog BASE BASE Base amount: Quantità di base: Modulation amount: Quantità di modulazione: Attack: Attacco: Release: Rilascio: AMNT Q.TÀ MULT MOLT Amount Multiplicator: Moltiplicatore di quantità: ATCK ATCC DCAY DCAD PeakControllerEffectControls Base value Valore di base Modulation amount Quantità di modulazione Mute output Silenzia l'output Attack Attacco Release Rilascio Abs Value Valore Assoluto Amount Multiplicator Moltiplicatore della quantità PianoRoll Play/pause current pattern (Space) Riproduci/metti in pausa questo pattern (Spazio) Record notes from MIDI-device/channel-piano Registra note da una periferica/canale piano MIDI Stop playing of current pattern (Space) Ferma la riproduzione di questo pattern (Spazio) Cut selected notes (Ctrl+X) Taglia le note selezionate (Ctrl+X) Copy selected notes (Ctrl+C) Copia le note selezionate (Ctrl+C) Paste notes from clipboard (Ctrl+V) Incolla le note selezionate (Ctrl+V) Piano-Roll - no pattern Piano-Roll - nessun pattern Piano-Roll - %1 Piano-Roll - %1 Please open a pattern by double-clicking on it! Aprire un pattern con un doppio-click sul pattern stesso! Last note Ultima nota Record notes from MIDI-device/channel-piano while playing song or BB track Registra note da una periferica MIDI/canale piano mentre la traccia o la BB track è in riproduzione Draw mode (Shift+D) Modalità disegno (Shift+D) Erase mode (Shift+E) Modalità cancellazione (Shift+E) Select mode (Shift+S) Modalità selezione (Shift+S) Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern e in seguito le si potrà riprodurre e modificare. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern, sentendo contemporaneamente la canzone o la traccia BB in sottofondo. Click here to stop playback of current pattern. Cliccando qui si ferma la riproduzione del pattern attivo. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliccando qui le note selezionate verranno spostate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Cliccando qui le note selezionate verranno copiate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla. Click here and the notes from the clipboard will be pasted at the first visible measure. Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. Note lock Note lock Note Volume Volume Note Note Panning Panning Note Detune mode (Shift+T) Modalità intonanzione (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. Tieni premuto Ctfl per andare temporaneamente in modalità selezione. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto Ctrl durante la modalità disegno per usare la modalità selezione temporaneamente. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Cliccando qui viene attivata la modalità intonazione. Puoi cliccare una nota per aprire la finestra di automazione dell'intonazione. Puoi usare questa modalità per fare uno slide da una nota ad un'altra. Puoi anche premere Shift+T per attivare questa modalità. Mark/unmark current semitone Evidenza (o togli evidenziazione) questo semitono Mark current scale Evidenza la scala corrente Mark current chord Evidenza l'accordo corrente Unmark all Togli tutte le evidenziazioni No scale - Scale No chord - Accordi This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. Controlla l'ingrandimento di un asse. Normalmente, l'ingrandimento dev'essere adatto alle note più piccole che si sta scrivendo. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. la 'Q' sta per quantizzazione, e controlla la lunghezza minima di modifica della nota. Con quantità minori, puoi scrivere note più piccole nel Piano Roll, o punti di controllo più precisi nell'Editor di Automazione. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited Puoi selezionare la grandezza delle nuove note. 'Ultima nota' significa che LMMS userà la lunghezza dell'ultima nota modificata The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Questa funzionalità è connessa al menù contestuale della tastiera viruale a sinistra. Dopo aver scelto la scala in questo menù a tendina, puoi cliccare con il tasto destro sulla nota desiderata nella tastiera, e selezionare 'Evidenza la scala corrente'. LMMS evidenzierà tutte le note che compongono la scala selezionata partendo dalla nota selezionata come tonica! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Ti permette di selezionare un accordo che LMMS può scriviere o evidenziare. Trovi tutti gli accordi più comuni in questo menù a tendina. Dopo averne selezionato uno, clicca dove vuoi per posizionarlo, oppure fai tasto destro sulla tastiera virtuale per evidenziare l'accordo. Per tornare alla scrittura per singola nota, devi selezionare '-Accordi' in questo menù. Volume: %1% Volume: %1% Panning: %1% left Bilanciamento: %1% a sinistra Panning: %1% right Bilanciamento: %1% a destra Panning: center Bilanciamento: centrato Please enter a new value between %1 and %2: Inserire un valore compreso tra %1 e %2: PianoView Base note Nota base Plugin Plugin not found Plugin non trovato The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Il plugin "%1" non è stato trovato o non è stato possibile caricarlo! Motivo: "%2" Error while loading plugin Errore nel caricamento del plugin Failed to load plugin "%1"! Non è stato possibile caricare il plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! Il plugin LMMS %1 non ha una descrizione chiamata %2! ProjectRenderer WAV-File (*.wav) File WAV (*.wav) Compressed OGG-File (*.ogg) File in formato OGG compresso (*.ogg) QObject C Note name Do Db Note name Dob C# Note name Do# D Note name Re Eb Note name Mib D# Note name Re# E Note name Mi Fb Note name Fab Gb Note name Solb F# Note name Fa# G Note name Sol Ab Note name Lab G# Note name Sol# A Note name La Bb Note name Sib A# Note name La# B Note name Si QWidget Name: Nome: Maker: Autore: Requires Real Time: Richiede Real Time: Yes No No Real Time Capable: Abilitato al Real Time: Channels In: Canali in ingresso: Channels Out: Canali in uscita: File: File: Copyright: Copyright: In Place Broken: In Place Broken: File: %1 File: %1 SampleBuffer Open audio file Apri file audio Wave-Files (*.wav) File wave (*.wav) OGG-Files (*.ogg) File OGG (*.ogg) DrumSynth-Files (*.ds) File DrumSynth (*.ds) FLAC-Files (*.flac) File FLAC (*.flac) SPEEX-Files (*.spx) File SPEEX (*.spx) VOC-Files (*.voc) File VOC (*.voc) AIFF-Files (*.aif *.aiff) File AIFF (*.aif *.aiff) AU-Files (*.au) File AU (*.au) RAW-Files (*.raw) File RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) Tutti i file audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample Fare doppio click per selezionare il campione Delete (middle mousebutton) Elimina (tasto centrale del mouse) Cut Taglia Copy Copia Paste Incolla Mute/unmute (<Ctrl> + middle click) Attiva/disattiva la modalità muta (<Ctrl> + tasto centrale) Set/clear record Set/clear record SampleTrack Sample track Traccia di campione Volume Volume SampleTrackView Track volume Volume della traccia Channel volume: Volume del canale: VOL VOL SongEditor Song-Editor Song-Editor Play song (Space) Riproduci la canzone (Spazio) Stop song (Space) Ferma la riproduzione della canzone (Spazio) Add beat/bassline Aggiungi beat/bassline Add sample-track Aggiungi traccia di campione Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Cliccando qui si riproduce l'intera canzone. La riproduzione inizierà alla posizione attuale del segnaposto (verde). È possibile spostarlo anche durante la riproduzione. Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Cliccando qui si ferma la riproduzione della canzone. Il segnaposto verrà portato all'inizio della canzone. Could not open file Non è stato possibile aprire il file Could not write file Impossibile scrivere il file Draw mode Modalità disegno Edit mode (select and move) Modalità modifica (seleziona e sposta) Add automation-track Aggiungi una traccia di automazione Record samples from Audio-device Registra campioni da una periferica audio Record samples from Audio-device while playing song or BB track Registra campioni da una periferica audio mentre la canzone o la BB track sono in riproduzione Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Impossibile aprire il file %1. Probabilmente non disponi dei permessi necessari alla sua lettura. Assicurati di avere almeno i permessi di lettura del file e prova di nuovo. Error in file Errore nel file The file %1 seems to contain errors and therefore can't be loaded. Il file %1 sembra contenere errori, quindi non può essere caricato. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song tempo della canzone The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). Il tempo della canzone è specificato in battiti al minuto (BPM). Per cambiare il tempo della canzone bisogna cambiare questo valore. Ogni marcatore ha 4 battiti, pertanto il tempo in BPM specifica quanti marcatori / 4 verranno riprodotti in un minuto (o quanti marcatori in 4 minuti). High quality mode Modalità ad alta qualità Master volume Volume principale master volume volume principale Master pitch Altezza principale master pitch altezza principale Value: %1% Valore: %1% Value: %1 semitones Valore: %1 semitoni Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. Impossibile aprire il file %1 per la scrittura. Probabilmente non disponi dei permessi necessari alla scrittura di questo file. Assicurati di avere tali permessi e prova di nuovo. SpectrumAnalyzerControlDialog Linear spectrum Spettro lineare Linear Y axis Asse Y lineare SpectrumAnalyzerControls Linear spectrum Spettro lineare Linear Y axis Asse Y lineare Channel mode Modalità del canale TempoSyncKnob Tempo Sync Sync del tempo No Sync Non in Sync Eight beats Otto battiti Whole note Un intero Half note Una metà Quarter note Quarto 8th note Ottavo 16th note Sedicesimo 32nd note Trentaduesimo Custom... Personalizzato... &Help &Aiuto Custom Personalizzato Synced to Eight Beats In sync con otto battiti Synced to Whole Note In sync con un intero Synced to Half Note In sync con un mezzo Synced to Quarter Note In sync con quarti Synced to 8th Note In sync con ottavi Synced to 16th Note In sync con 16simi Synced to 32nd Note In sync con 32simi TimeDisplayWidget click to change time units Clicca per cambiare l'unità di tempo visualizzata TrackContainer Couldn't import file Non è stato possibile importare il file Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Non è stato possibile trovare un filtro per importare il file %1. È necessario convertire questo file in un formato supportato da LMMS usando un altro programma. Couldn't open file Non è stato possibile aprire il file Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Non è stato possibile aprire il file %1 in lettura. Assicurarsi di avere i permessi in lettura per il file e per la directory che lo contiene e riprovare! Loading project... Caricamento del progetto... Cancel Annulla Please wait... Attendere... Importing MIDI-file... Importazione del file MIDI... Importing FLP-file... Importazione del file FLP... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Usare la modulazione di fase per modulare l'oscillatore 2 con l'oscillatore 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Usare la modulazione di amplificazione per modulare l'oscillatore 2 con l'oscillatore 1 Mix output of oscillator 1 & 2 Miscelare gli oscillatori 1 e 2 Synchronize oscillator 1 with oscillator 2 Sincronizzare l'oscillatore 1 con l'oscillatore 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Usare la modulazione di frequenza per modulare l'oscillatore 2 con l'oscillatore 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Usare la modulazione di fase per modulare l'oscillatore 3 con l'oscillatore 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Usare la modulazione di amplificazione per modulare l'oscillatore 3 con l'oscillatore 2 Mix output of oscillator 2 & 3 Miscelare gli oscillatori 2 e 3 Synchronize oscillator 2 with oscillator 3 Sincronizzare l'oscillatore 2 con l'oscillatore 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Usare la modulazione di frequenza per modulare l'oscillatore 3 con l'oscillatore 2 Osc %1 volume: Volume osc %1: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Questa manopola regola il volume dell'oscillatore %1. Un valore pari a 0 equivale a un oscillatore spento, gli altri valori impostano il volume corrispondente. Osc %1 panning: Panning osc %1: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Questa manopola regola il posizionamento nello spettro stereo dell'oscillatore %1. Un valore pari a -100 significa tutto a sinistra mentre un valore pari a 100 significa tutto a destra. Osc %1 coarse detuning: Intonazione dell'osc %1: semitones semitoni With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Questa manopola regola l'intonazione, con la precisione di 1 semitono, dell'oscillatore %1. L'intonazione può essere variata di 24 semitoni (due ottave) in positivo e in negativo. Può essere usata per creare suoni con un accordo. Osc %1 fine detuning left: Intonazione precisa osc %1 sinistra: cents centesimi With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Questa manopola regola l'intonazione precisa dell'oscillatore %1 per il canale sinistro. La gamma per l'intonazione di precisione va da -100 a +100 centesimi. Può essere usata per creare suoni "grossi". Osc %1 fine detuning right: Intonazione precisa dell'osc %1 - destra: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Questa manopola regola l'intonazione precisa dell'oscillatore %1 per il canale destro. La gamma per l'intonazione di precisione va da -100 a +100 centesimi. Può essere usata per creare suoni "grossi". Osc %1 phase-offset: Scostamento fase dell'osc %1: degrees gradi With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Questa manopola regola lo scostamento della fase dell'oscillatore %1. Ciò significa che è possibile spostare il punto in cui inizia l'oscillazione. Per esempio, un'onda sinusoidale e uno scostamento della fase di 180 gradi, fanno iniziare l'onda scendendo. Lo stesso vale per un'onda quadra. Osc %1 stereo phase-detuning: Intonazione fase stereo dell'osc %1: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Questa manopola regola l'intonazione stereo della fase dell'oscillatore %1. L'intonazione stereo della fase specifica la differenza tra lo scostamento della fase del canale sinistro e quello destro. Questo è molto utile per creare suoni con grande ampiezza stereo. Use a sine-wave for current oscillator. Utilizzare un'onda sinusoidale per questo oscillatore. Use a triangle-wave for current oscillator. Utilizzare un'onda triangolare per questo oscillatore. Use a saw-wave for current oscillator. Utilizzare un'onda a dente di sega per questo oscillatore. Use a square-wave for current oscillator. Utilizzare un'onda quadra per questo oscillatore. Use a moog-like saw-wave for current oscillator. Utilizzare un'onda di tipo moog per questo oscillatore. Use an exponential wave for current oscillator. Utilizzare un'onda esponenziale per questo oscillatore. Use white-noise for current oscillator. Utilizzare rumore bianco per questo oscillatore. Use a user-defined waveform for current oscillator. Utilizzare un'onda personalizzata per questo oscillatore. Ui Contributors ordered by number of commits: Hanno collaborato (ordinati per numero di contributi): Involved Coinvolti VersionedSaveDialog Increment version number Nuova versione Decrement version number Riduci numero versione VestigeInstrumentView Open other VST-plugin Apri un altro plugin VST Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Clicca qui per aprire un altro plugin VST. Una volta cliccato questo pulsante, si aprirà una finestra di dialogo dove potrai selezionare il file. Show/hide GUI Mostra/nascondi l'interfaccia Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Clicca qui per mostrare o nascondere l'interfaccia grafica (GUI) per i plugin VST. Turn off all notes Disabilita tutte le note Open VST-plugin Apri plugin VST DLL-files (*.dll) File DLL (*.dll) EXE-files (*.exe) File EXE (*.exe) No VST-plugin loaded Nessun plugin VST caricato Control VST-plugin from LMMS host Controlla il plugin VST dal terminale LMMS Click here, if you want to control VST-plugin from host. Cliccando qui, si apre una finestra di LMMS dove è possibile modificare le variabili del plugin VST. Open VST-plugin preset Apri un preset del plugin VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Cliccando qui, è possibile aprire un altro preset del plugin VST (*fxp, *fxb). Previous (-) Precedente (-) Click here, if you want to switch to another VST-plugin preset program. Cliccando qui, viene cambiato il preset del plugin VST. Save preset Salva il preset Click here, if you want to save current VST-plugin preset program. Cliccando qui è possibile salvare il preset corrente del plugin VST. Next (+) Successivo (+) Click here to select presets that are currently loaded in VST. Cliccando qui, è possibile selezionare i preset che sono caricati nel VST al momento. Preset Preset by da - VST plugin control - Controllo del plugin VST VstEffectControlDialog Show/hide Mostra/nascondi Control VST-plugin from LMMS host Controlla il plugin VST dal terminale LMMS Click here, if you want to control VST-plugin from host. Cliccando qui, si apre una finestra di LMMS dove è possibile modificare le variabili del plugin VST. Open VST-plugin preset Apri un preset del plugin VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Cliccando qui, è possibile aprire un altro preset del plugin VST (*fxp, *fxb). Previous (-) Precedente (-) Click here, if you want to switch to another VST-plugin preset program. Cliccando qui, viene cambiato il preset del plugin VST. Next (+) Successivo (+) Click here to select presets that are currently loaded in VST. Cliccando qui, è possibile selezionare i preset che sono caricati nel VST al momento. Save preset Salva il preset Click here, if you want to save current VST-plugin preset program. Cliccando qui è possibile salvare il preset corrente del plugin VST. Effect by: Effetto da: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Caricamento plugin Open Preset Apri preset Vst Plugin Preset (*.fxp *.fxb) Preset di plugin VST (*.fxp *.fxb) : default : default " " ' ' Save Preset Salva Preset .fxp .fxp .FXP .FXP .FXB .FXB .fxb .fxb Please wait while loading VST plugin... Sto caricando il plugin VST... Failed loading VST plugin Caricamento del VST fallito The VST plugin %1 could not be loaded for some reason. Il VST %1 non è stato caricato correttamente per qualche ragione. WatsynInstrument Volume A1 Volume A1 Volume A2 Volume A2 Volume B1 Volume B1 Volume B2 Volume B2 Panning A1 Bilanciamento A1 Panning A2 Bilanciamento A2 Panning B1 Bilanciamento B1 Panning B2 Bilanciamento B2 Freq. multiplier A1 Moltiplicatore di freq. A1 Freq. multiplier A2 Moltiplicatore di freq. A2 Freq. multiplier B1 Moltiplicatore di freq. B1 Freq. multiplier B2 Moltiplicatore di freq. B2 Left detune A1 Intonazione Sinistra A1 Left detune A2 Intonazione Sinistra A2 Left detune B1 Intonazione Sinistra B1 Left detune B2 Intonazione Sinistra B2 Right detune A1 Intonazione Destra A1 Right detune A2 Intonazione Destra A2 Right detune B1 Intonazione Destra B1 Right detune B2 Intonazione Destra B2 A-B Mix Mix A-B A-B Mix envelope amount Quantità di inviluppo Mix A-B A-B Mix envelope attack Attacco inviluppo Mix A-B A-B Mix envelope hold Mantenimento inviluppo Mix A-B A-B Mix envelope decay Decadimento inviluppo Mix A-B A1-B2 Crosstalk Scambio A1-B2 A2-A1 modulation Modulazione A2-A1 B2-B1 modulation Modulazione B2-B1 Selected graph Grafico selezionato WatsynView Select oscillator A1 Passa all'oscillatore A1 Select oscillator A2 Passa all'oscillatore A2 Select oscillator B1 Passa all'oscillatore B1 Select oscillator B2 Passa all'oscillatore B2 Mix output of A2 to A1 Mescola output di A2 a A1 Modulate amplitude of A1 with output of A2 Modula l'amplificzione di A1 con l'output di A2 Ring-modulate A1 and A2 Modulazione Ring tra A1 e A2 Modulate phase of A1 with output of A2 Modula la fase di A1 con l'output di A2 Mix output of B2 to B1 Mescola output di B2 a B1 Modulate amplitude of B1 with output of B2 Modula l'amplificzione di B1 con l'output di B2 Ring-modulate B1 and B2 Modulazione Ring tra B1 e B2 Modulate phase of B1 with output of B2 Modula la fase di B1 con l'output di B2 Draw your own waveform here by dragging your mouse on this graph. Cliccando e trascinando il mouse in questo grafico è possibile disegnare una forma d'onda personalizzata. Load waveform Carica forma d'onda Click to load a waveform from a sample file Clicca per usare la forma d'onda di un file esterno Phase left Sposta fase a sinistra Click to shift phase by -15 degrees Clicca per spostare la fase di -15° Phase right Sposta fase a destra Click to shift phase by +15 degrees Clicca per spostare la fase di +15° Normalize Normalizza Click to normalize Clicca per normalizzare Invert Inverti Click to invert Clicca per invertire Smooth Ammorbidisci Click to smooth Clicca per ammorbidire la forma d'onda Sine wave Onda sinusoidale Click for sine wave Clicca per rimpiazzare il grafico con una forma d'onda sinusoidale Triangle wave Onda triangolare Click for triangle wave Clicca per rimpiazzare il grafico con una forma d'onda triangolare Click for saw wave Clicca per rimpiazzare il grafico con una forma d'onda a dente si sega Square wave Onda quadra Click for square wave Clicca per rimpiazzare il grafico con una forma d'onda quadra ZynAddSubFxInstrument Portamento Filter Frequency Frequenza del filtro Filter Resonance Risonanza del filtro Bandwidth FM Gain Guadagno FM Resonance Center Frequency Frequenza Centrale di Risonanza Resonance Bandwidth Bandwidth di Risonanza Forward MIDI Control Change Events Inoltra segnali dai controlli MIDI ZynAddSubFxView Show GUI Mostra GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Clicca qui per mostrare o nascondere l'interfaccia grafica (GUI) di ZynAddSubFX. Portamento: PORT Filter Frequency: Frequenza del Filtro: FREQ FREQ Filter Resonance: Risonanza del Filtro: RES RIS Bandwidth: BW FM Gain: Guadagno FM: FM GAIN GUAD FM Resonance center frequency: Frequenza Centrale di Risonanza: RES CF FC RIS Resonance bandwidth: Bandwidth della Risonanza: RES BW BW RIS Forward MIDI Control Changes Inoltra cambiamenti dai controlli MIDI audioFileProcessor Reverse sample Inverti il campione Amplify Amplificazione Start of sample Inizio del campione End of sample Fine del campione Stutter Loopback point Punto di LoopBack Loop mode Modalità ripetizione Interpolation mode Modalità Interpolazione None Nessuna Linear Lineare Sinc Sincronizzata bbEditor Play/pause current beat/bassline (Space) Riproduci/metti in pausa il beat/bassline selezionato (Spazio) Beat+Bassline Editor Beat+Bassline Editor Add beat/bassline Aggiungi beat/bassline Add automation-track Aggiungi una traccia di automazione Stop playback of current beat/bassline (Space) Ferma il beat/bassline attuale (Spazio) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Cliccando qui si riprodurre il beat/bassline selezionato. Il beat/bassline ricomincia automaticamente quando finisce. Click here to stop playing of current beat/bassline. Cliccando qui si ferma la riproduzione del beat/bassline attivo. Remove steps Elimina note Add steps Aggiungi note bbTCOView Open in Beat+Bassline-Editor Apri nell'editor di Beat+Bassline Reset name Reimposta nome Change name Cambia nome Change color Cambia colore Reset color to default Reimposta il colore a default bbTrack Beat/Bassline %1 Beat/Bassline %1 Clone of %1 Clone di %1 bitInvader Samplelength LunghezzaCampione bitInvaderView Sample Length Lunghezza del campione Sine wave Onda sinusoidale Triangle wave Onda triangolare Saw wave Onda a dente di sega Square wave Onda quadra White noise wave Rumore bianco User defined wave Forma d'onda personalizzata Smooth Ammorbidisci Click here to smooth waveform. Cliccando qui la forma d'onda viene ammorbidita. Interpolation Interpolazione Normalize Normalizza Draw your own waveform here by dragging your mouse on this graph. Cliccando e trascinando il mouse in questo grafico è possibile disegnare una forma d'onda personalizzata. Click for a sine-wave. Cliccando qui si ottiene una forma d'onda sinusoidale. Click here for a triangle-wave. Cliccando qui si ottiene un'onda triangolare. Click here for a saw-wave. Cliccando qui si ottiene un'onda a dente di sega. Click here for a square-wave. Cliccando qui si ottiene un'onda quadra. Click here for white-noise. Cliccando qui si ottiene rumore bianco. Click here for a user-defined shape. Cliccando qui è possibile definire una forma d'onda personalizzata. dynProcControlDialog INPUT INPUT Input gain: Guadagno in Input: OUTPUT OUTPUT Output gain: Guadagno in Output: ATTACK ATTACCO Peak attack time: Attacco del picco: RELEASE RILASCIO Peak release time: Rilascio del picco: Reset waveform Resetta forma d'onda Click here to reset the wavegraph back to default Clicca per riportare la forma d'onda allo stato originale Smooth waveform Ammorbidisci forma d'onda Click here to apply smoothing to wavegraph Clicca per ammorbidire la forma d'onda Increase wavegraph amplitude by 1dB Aumenta l'amplificazione di 1dB Click here to increase wavegraph amplitude by 1dB Clicca per aumentare l'amplificazione del grafico d'onda di 1dB Decrease wavegraph amplitude by 1dB Diminuisci l'amplificazione di 1dB Click here to decrease wavegraph amplitude by 1dB Clicca qui per diminuire l'amplificazione del grafico d'onda di 1dB Stereomode Maximum Modalità stereo: Massimo Process based on the maximum of both stereo channels L'effetto si basa sul valore massimo tra i due canali stereo Stereomode Average Modalità stereo: Media Process based on the average of both stereo channels L'effetto si basa sul valore medio tra i due canali stereo Stereomode Unlinked Modalità stereo: Indipendenti Process each stereo channel independently L'effetto tratta i due canali stereo indipendentemente dynProcControls Input gain Guadagno in input Output gain Guadagno in output Attack time Tempo di Attacco Release time Tempo di Rilascio Stereo mode Modalità stereo exportProjectDialog Could not open file Non è stato possibile aprire il file Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Impossibile aprire in scrittura il file %1. Assicurarsi di avere i permessi in scrittura per il file e per la directory contenente il file e riprovare! Error Errore Error while determining file-encoder device. Please try to choose a different output format. Si è verificato un errore nel tentativo di determinare il dispositivo per la codifica del file. Si prega di selezionare un formato differente. Rendering: %1% Renderizzazione: %1% Export project to %1 Esporta il progetto in %1 fader Please enter a new value between %1 and %2: Inserire un valore compreso tra %1 e %2: graphModel Graph Grafico kickerInstrument Start frequency Frequenza iniziale End frequency Frequenza finale Gain Guadagno Length Lunghezza Distortion Start Distorsione iniziale Distortion End Distorsione finale Envelope Slope Inclinazione Inviluppo Noise Rumore Click Click Frequency Slope Inclinazione Frequenza Start from note Inizia dalla nota End to note Finisci sulla nota kickerInstrumentView Start frequency: Frequenza iniziale: End frequency: Frequenza finale: Gain: Guadagno: Frequency Slope: Inclinazione Frequenza: Envelope Length: Lunghezza Inviluppo: Envelope Slope: Inclinazione Inviluppo: Click: Click: Noise: Rumore: Distortion Start: Distorsione iniziale: Distortion End: Distorsione finale: knob &Help &Aiuto Please enter a new value between %1 and %2: Inserire un valore compreso tra %1 e %2: Please enter a new value between -96.0 dBV and 6.0 dBV: Inserire un nuovo valore tra -96.0 dBV e 6.0 dBV: ladspaBrowserView Available Effects Effetti disponibili Unavailable Effects Effetti non disponibili Instruments Strumenti Analysis Tools Strumenti di analisi Don't know Sconosciuto This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Questa finestra mostra le informazioni relative ai plugin LADSPA che LMMS è stato in grado di localizzare. I plugin sono divisi in cinque categorie, in base all'interpretazione dei tipi di porta e ai nomi. Gli Effetti Disponibili sono quelli che possono essere usati con LMMS. Perché LMMS possa usare un effetto deve, prima di tutto, essere un effetto, cioè deve avere sia ingressi che uscite. LMMS identifica un ingresso come una porta con una frequenza audio associata e che contiene 'in' nel nome. Le uscite sono identificate dalle lettere 'out'. Inoltre, l'effetto deve avere lo stesso numero di ingressi e di uscite e deve poter funzionare in real time. Gli Effetti non Disponibili sono quelli che sono stati identificati come effetti ma che non hanno lo stesso numero di ingressi e uscite oppure non supportano il real time. Gli Strumenti sono plugin che hanno solo uscite. Gli Strumenti di Analisi sono plugin che hanno solo ingressi. Quelli Sconosciuti sono plugin che non hanno né ingressi né uscite. Facendo doppio click sui plugin verranno fornite informazioni sulle relative porte. Type: Tipo: ladspaDescription Plugins Plugin Description Descrizione ladspaPortDialog Ports Porte Name Nome Rate Frequenza Direction Direzione Type Tipo Min < Default < Max Minimo < Predefinito < Massimo Logarithmic Logaritmico SR Dependent Dipendente da SR Control Controllo Input Ingresso Output Uscita Toggled Abilitato Integer Intero Float Virgola mobile Yes Audio Audio lb302Synth VCF Cutoff Frequency VCF - frequenza di taglio VCF Resonance VCF - Risonanza VCF Envelope Mod VCF - modulazione dell'envelope VCF Envelope Decay VCF - decadimento dell'envelope Distortion Distorsione Waveform Forma d'onda Slide Decay Decadimento slide Slide Slide Accent Accento Dead Dead 24dB/oct Filter Filtro 24dB/ottava lb302SynthView Cutoff Freq: Freq. di taglio: Resonance: Risonanza: Env Mod: Env Mod: Decay: Decadimento: 303-es-que, 24dB/octave, 3 pole filter filtro tripolare "tipo 303", 24dB/ottava Slide Decay: Decadimento slide: DIST: DIST: Saw wave Onda a dente di sega Click here for a saw-wave. Cliccando qui si ottiene un'onda a dente di sega. Triangle wave Onda triangolare Click here for a triangle-wave. Cliccando qui si ottiene un'onda triangolare. Square wave Onda quadra Click here for a square-wave. Cliccando qui si ottiene un'onda quadra. Rounded square wave Onda quadra arrotondata Click here for a square-wave with a rounded end. Cliccando qui si ottiene un'onda quadra arrotondata. Moog wave Onda moog Click here for a moog-like wave. Cliccando qui si ottieme un'onda moog. Sine wave Onda sinusoidale Click for a sine-wave. Cliccando qui si ottiene una forma d'onda sinusoidale. White noise wave Rumore bianco Click here for an exponential wave. Cliccando qui si ha un'onda esponenziale. Click here for white-noise. Cliccando qui si ottiene rumore bianco. Bandlimited saw wave Onda a dente di sega limitata Click here for bandlimited saw wave. Clicca per usare un'onda a dente di sega a banda limitata. Bandlimited square wave Onda quadra limitata Click here for bandlimited square wave. Clicca per usare un'onda quadra a banda limitata. Bandlimited triangle wave Onda triangolare limitata Click here for bandlimited triangle wave. Clicca per usare un'onda triangolare a banda limitata. Bandlimited moog saw wave Onda Moog limitata Click here for bandlimited moog saw wave. Clicca per usare un'onda Moog a banda limitata. lb303Synth VCF Cutoff Frequency VCF - frequenza di taglio VCF Resonance VCF - Risonanza VCF Envelope Mod VCF - modulazione dell'envelope VCF Envelope Decay VCF - decadimento dell'envelope Distortion Distorsione Waveform Forma d'onda Slide Decay Decadimento slide Slide Slide Accent Accento Dead Dead 24dB/oct Filter Filtro 24dB/ottava lb303SynthView Cutoff Freq: Freq. di taglio: CUT TAG Resonance: Risonanza: RES RIS Env Mod: Env Mod: ENV MOD ENV MOD Decay: Decadimento: DEC DEC 303-es-que, 24dB/octave, 3 pole filter filtro tripolare "tipo 303", 24dB/ottava Slide Decay: Decadimento slide: SLIDE SLIDE DIST: DIST: DIST DIST WAVE: ONDA: WAVE ONDA malletsInstrument Hardness Durezza Position Posizione Vibrato Gain Guadagno del vibrato Vibrato Freq Fequenza del vibrato Modulator Modulatore LFO Speed Velocità dell'LFO LFO Depth Profondità dell'LFO Pressure Pressione Motion Moto Speed Velocità Spread Apertura Stick Mix Stick Mix Crossfade Crossfade ADSR ADSR Bowed Bowed Missing files File mancanti Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! L'installazione di Stk sembra incompleta. Assicurarsi che sia installato il pacchetto Stk completo! Marimba Marimba Vibraphone Vibraphone Agogo Agogo Wood1 Legno1 Reso Reso Wood2 Legno2 Beats Beats Two Fixed Two Fixed Clump Clump Tubular Bells Tubular Bells Uniform Bar Uniform Bar Tuned Bar Tuned Bar Glass Glass Tibetan Bowl Tibetan Bowl malletsInstrumentView Instrument Strumento Spread Apertura Spread: Apertura: Hardness Durezza Hardness: Durezza: Position Posizione Position: Posizione: Vib Gain Guad Vib Vib Gain: Guad Vib: Vib Freq Freq Vib Vib Freq: Freq Vib: Stick Mix Stick Mix Stick Mix: Stick Mix: Modulator Modulatore Modulator: Modulatore: Crossfade Crossfade Crossfade: Crossfade: LFO Speed Velocità LFO LFO Speed: Velocità LFO: LFO Depth Profondità LFO LFO Depth: Profondità LFO: ADSR ADSR ADSR: ADSR: Pressure Pressione Pressure: Pressione: Motion Moto Motion: Moto: Speed Velocità Speed: Velocità: Bowed Bowed Vibrato Vibrato Vibrato: Vibrato: manageVSTEffectView - VST parameter control - Controllo parametri VST VST Sync Sync VST Click here if you want to synchronize all parameters with VST plugin. Clicca qui se vuoi sincronizzare tutti i parametri con il plugin VST. Automated Automatizzati Click here if you want to display automated parameters only. Clicca qui se vuoi visualizzare solo i parametri automatizzati. Close Chiudi Close VST effect knob-controller window. Chiudi la finestra delle manopole dell'effetto VST. manageVestigeInstrumentView - VST plugin control - Controllo del plugin VST VST Sync Sync VST Click here if you want to synchronize all parameters with VST plugin. Clicca qui se vuoi sincronizzare tutti i parametri con il plugin VST. Automated Automatizzati Click here if you want to display automated parameters only. Clicca qui se vuoi visualizzare solo i parametri automatizzati. Close Chiudi Close VST plugin knob-controller window. Chiudi la finestra delle manopole del plugin VST. nineButtonSelector &Help &Aiuto opl2instrument Patch Patch Op 1 Attack Attacco Op 1 Op 1 Decay Decadimento Op 1 Op 1 Sustain Sostegno Op 1 Op 1 Release Rilascio Op 1 Op 1 Level Livello Op 1 Op 1 Level Scaling Scala di livello Op 1 Op 1 Frequency Multiple Moltiplicatore di frequenza Op 1 Op 1 Feedback Feedback Op 1 Op 1 Key Scaling Rate Rateo del Key Scaling Op 1 Op 1 Percussive Envelope Envelope a percussione Op 1 Op 1 Tremolo Tremolo Op 1 Op 1 Vibrato Vibrato Op 1 Op 1 Waveform Forma d'onda Op 1 Op 2 Attack Attacco Op 2 Op 2 Decay Decadimento Op 2 Op 2 Sustain Sostegno Op 2 Op 2 Release Rilascio Op 2 Op 2 Level Livello Op 2 Op 2 Level Scaling Scala di livello Op 2 Op 2 Frequency Multiple Moltiplicatore di frequenza Op 2 Op 2 Key Scaling Rate Rateo del Key Scaling Op 2 Op 2 Percussive Envelope Envelope a percussione Op 2 Op 2 Tremolo Tremolo Op 2 Op 2 Vibrato Vibrato Op 2 Op 2 Waveform Forma d'onda Op 2 FM FM Vibrato Depth Profondità del Vibrato Tremolo Depth Profondità del Tremolo organicInstrument Distortion Distorsione Volume Volume organicInstrumentView Distortion: Distorsione: Volume: Volume: Randomise Rendi casuale Osc %1 waveform: Onda osc %1: Osc %1 volume: Volume osc %1: Osc %1 panning: Panning osc %1: cents centesimi The distortion knob adds distortion to the output of the instrument. La manopola di distorsione aggiunge distorsione all'ouyput dello strumento. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. La manopola di volume cntrolla il volume di output dello strumento. Si rapporta al volume della finestra del plugin in modo cumulativo. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Il pulsante randomize genera un nuovo suono randomizzando tutte le manopole tranne le Armoniche, il volume principale e la distorsione. Osc %1 stereo detuning Osc %1 intonazione stereo Osc %1 harmonic: Osc %1 armoniche: papuInstrument Sweep time Tempo di sweep Sweep direction Direzione sweep Sweep RtShift amount Quantità RtShift per lo sweep Wave Pattern Duty Wave Pattern Duty Channel 1 volume Volume del canale 1 Volume sweep direction Direzione sweep del volume Length of each step in sweep Lunghezza di ogni passo nello sweep Channel 2 volume Volume del canale 2 Channel 3 volume Volume del canale 3 Channel 4 volume Volume del canale 4 Right Output level Volume uscita destra Left Output level Volume uscita sinistra Channel 1 to SO2 (Left) Canale 1 a SO2 (sinistra) Channel 2 to SO2 (Left) Canale 2 a SO2 (sinistra) Channel 3 to SO2 (Left) Canale 3 a SO2 (sinistra) Channel 4 to SO2 (Left) Canale 4 a SO2 (sinistra) Channel 1 to SO1 (Right) Canale 1 a SO1 (destra) Channel 2 to SO1 (Right) Canale 2 a SO1 (destra) Channel 3 to SO1 (Right) Canale 3 a SO1 (destra) Channel 4 to SO1 (Right) Canale 4 a SO1 (destra) Treble Alti Bass Bassi Shift Register width Ampiezza spostamento del registro papuInstrumentView Sweep Time: Tempo di sweep: Sweep Time Tempo di sweep Sweep RtShift amount: Quantità RtShift per lo sweep: Sweep RtShift amount Quantità RtShift per lo sweep Wave pattern duty: Wave Pattern Duty: Wave Pattern Duty Wave Pattern Duty Square Channel 1 Volume: Volume del canale 1 square: Length of each step in sweep: Lunghezza di ogni passo nello sweep: Length of each step in sweep Lunghezza di ogni passo nello sweep Wave pattern duty Wave Pattern Duty Square Channel 2 Volume: Volume square del canale 2: Square Channel 2 Volume Volume square del canale 2 Wave Channel Volume: Volume wave del canale: Wave Channel Volume Volume wave del canale Noise Channel Volume: Volume rumore del canale: Noise Channel Volume Volume rumore del canale SO1 Volume (Right): Volume SO1 (destra): SO1 Volume (Right) Volume SO1 (destra) SO2 Volume (Left): Volume SO2 (sinistra): SO2 Volume (Left) Volume SO2 (sinistra) Treble: Alti: Treble Alti Bass: Bassi: Bass Bassi Sweep Direction Direzione sweep Volume Sweep Direction Direzione sweep del volume Shift Register Width Ampiezza spostamento del registro Channel1 to SO1 (Right) Canale 1 a SO1 (destra) Channel2 to SO1 (Right) Canale 2 a SO1 (destra) Channel3 to SO1 (Right) Canale 3 a SO1 (destra) Channel4 to SO1 (Right) Canale 4 a SO1 (destra) Channel1 to SO2 (Left) Canale 1 a SO2 (sinistra) Channel2 to SO2 (Left) Canale 1 a SO2 (sinistra) Channel3 to SO2 (Left) Canale 3 a SO2 (sinistra) Channel4 to SO2 (Left) Canale 4 a SO2 (sinistra) Wave Pattern Wave Pattern The amount of increase or decrease in frequency La quantità di aumento o diminuzione di frequenza The rate at which increase or decrease in frequency occurs La velocità a cui l'aumento o la diminuzione di frequenza avvengono The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Il duty cycle è il rapporto tra il tempo in cui il segnale è ON e il periodo completo del segnale. Square Channel 1 Volume Volume square del canale 1 The delay between step change Ritardo tra i cambi di step Draw the wave here Disegnare l'onda qui pluginBrowser Instrument plugins Plugin strumentali no description nessuna descrizione VST-host for using VST(i)-plugins within LMMS Host VST per usare i plugin VST con LMMS Filter for importing FL Studio projects into LMMS Filtro per importare progetti di FL Studio in LMMS Filter for importing MIDI-files into LMMS Filtro per importare file MIDI in LMMS Additive Synthesizer for organ-like sounds Sintetizzatore additivo per suoni tipo organo Vibrating string modeler Modulatore di corde vibranti Plugin for enhancing stereo separation of a stereo input file Plugin per migliorare la separazione stereo di un file Plugin for controlling knobs with sound peaks Plugin per controllare le manopole con picchi di suono GUS-compatible patch instrument strumento compatibile con GUS plugin for using arbitrary LADSPA-effects inside LMMS. Plugin per usare qualsiasi effetto LADSPA in LMMS. Plugin for freely manipulating stereo output Plugin per manipolare liberamente un'uscita stereo Incomplete monophonic imitation tb303 Imitazione monofonica del tb303 incompleta Tuneful things to bang on Oggetti dotati di intonazione su cui picchiare List installed LADSPA plugins Elenca i plugin LADSPA installati Instrument browser Navigatore degli strumenti Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. È possibile trascinare uno strumento nel Song-Editor, nel Beat+Bassline Editor o direttamente in un canale esistente. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Emulazione di MOS6581 and MOS8580 SID. Questo chip era utilizzato nel Commode 64. Player for SoundFont files Riproduttore di file SounFont Emulation of GameBoy (TM) APU Emulatore di GameBoy™ APU Customizable wavetable synthesizer Sintetizzatore wavetable configurabile Embedded ZynAddSubFX ZynAddSubFX incorporato 2-operator FM Synth Sintetizzatore FM a 2 operatori Filter for importing Hydrogen files into LMMS Strumento per l'importazione di file Hydrogen dentro LMMS LMMS port of sfxr Port di sfxr su LMMS Monstrous 3-oscillator synth with modulation matrix Sintetizzatore mostruoso con 3 oscillatori e matrice di modulazione Three powerful oscillators you can modulate in several ways Tre potenti oscillatori modulabili in vari modi A native amplifier plugin Un plugin di amplificazione nativo Carla Rack Instrument Strutmento Rack Carla 4-oscillator modulatable wavetable synth Sintetizzatore wavetable con 4 oscillatori modulabili plugin for waveshaping Plugin per la modifica della forma d'onda Boost your bass the fast and simple way Potenzia il tuo basso in modo veloce e semplice Versatile drum synthesizer Sintetizzatore di percussioni versatile Simple sampler with various settings for using samples (e.g. drums) in an instrument-track Semplice sampler con varie impostazioni, per usare suoni (come percussioni) in una traccia strumentale plugin for processing dynamics in a flexible way Un versatile processore di dynamic Carla Patchbay Instrument Strumento Patchbay Carla plugin for using arbitrary VST effects inside LMMS. Plugin per usare effetti VST arbitrari dentro LMMS. Graphical spectrum analyzer plugin Analizzatore di spettro grafico A NES-like synthesizer Un sintetizzatore che imita i suoni del Nintendo Entertainment System projectNotes Project notes Note del progetto Put down your project notes here. Scrivi qui le note per il tuo progetto. Edit Actions Modifica azioni &Undo &Annulla operazione Ctrl+Z Ctrl+Z &Redo &Ripeti operazione Ctrl+Y Ctrl+Y &Copy &Copia Ctrl+C Ctrl+C Cu&t &Taglia Ctrl+X Ctrl+X &Paste &Incolla Ctrl+V Ctrl+V Format Actions Formatta azioni &Bold &Grassetto Ctrl+B Ctrl+B &Italic &Corsivo Ctrl+I Ctrl+I &Underline &Sottolineato Ctrl+U Ctrl+U &Left &Sinistra Ctrl+L Ctrl+L C&enter &Centro Ctrl+E Ctrl+E &Right &Destra Ctrl+R Ctrl+R &Justify &Giustifica Ctrl+J Ctrl+J &Color... &Colore... renameDialog Rename... Rinomina... setupDialog Setup LMMS Cofigura LMMS General settings Impostazioni generali BUFFER SIZE DIMENSIONE DEL BUFFER Reset to default-value Reimposta al valore predefinito MISC VARIE Audio settings Impostazioni audio AUDIO INTERFACE INTERFACCIA AUDIO MIDI settings Impostazioni MIDI MIDI INTERFACE INTERFACCIA MIDI OK OK Cancel Annulla Restart LMMS Riavvia LMMS Please note that most changes won't take effect until you restart LMMS! Si prega di notare che la maggior parte delle modifiche non avrà effetto fino al riavvio di LMMS! Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Qui è possibile impostare la dimensione del buffer interno usato da LMMS. Valori più piccoli danno come risultato una latenza più bassa ma possono causare una qualità audio inutilizzabile o cattive prestazioni, specialmente su computer datati o sistemi con kernel non-realtime. Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Qui è possibile selezionare l'interfaccia audio. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, JACK, OSS e altri. Sotto trovi una casella che offre dei controlli per l'interfaccia audio selezionata. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Qui è possibile selezionare l'interfaccia MIDI. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, OSS e altri. Sotto si trova una casella che offre dei controlli per l'interfaccia MIDI selezionata. Display volume as dBV Mostra il volume in dBV LMMS working directory Directory di lavoro di LMMS VST-plugin directory Directory dei plugin VST Artwork directory DIrectory del tema grafico FL Studio installation directory Directory di installazione di FL Studio Performance settings Impostazioni prestazioni UI effects vs. performance Effetti UI (interfaccia grafica) vs. prestazioni Frames: %1 Latency: %2 ms Frames: %1 Latenza: %2 ms Choose LMMS working directory Seleziona la directory di lavoro di LMMS Choose your VST-plugin directory Seleziona la tua directory dei plugin VST Choose artwork-theme directory Seleziona la directory del tema grafico Choose FL Studio installation directory Seleziona la directory di installazione di FL Studio Enable tooltips Abilita i suggerimenti Show restart warning after changing settings Dopo aver modificato le impostazioni, mostra un avviso al riavvio Compress project files per default Per impostazione predefinita, comprimi i file di progetto HQ-mode for output audio-device Modalità alta qualità per l'uscita audio STK rawwave directory Directory per i file rawwave STK Choose LADSPA plugin directory Seleziona le directory dei plugin LADSPA Choose STK rawwave directory Seleziona le directory dei file rawwave STK Paths Percorsi LADSPA plugin paths Percorsi dei plugin LADSPA Default Soundfont File File SoundFont predefinito Background artwork Grafica dello sfondo Choose default SoundFont Scegliere il SoundFont predefinito Choose background artwork Scegliere la grafica dello sfondo One instrument track window mode Modalità finestra ad una traccia strumento Compact track buttons Pulsanti della traccia compatti Sync VST plugins to host playback Sincronizza i plugin VST al playback dell'host Enable note labels in piano roll Abilita i nomi delle note nel piano-roll Enable waveform display by default Abilità il display della forma d'onda per default Smooth scroll in Song Editor Scorrimento morbido nel Song-Editor Enable auto save feature Abilita la funzione di salvataggio automatico Show playback cursor in AudioFileProcessor Mostra il cursore di riproduzione dentro AudioFileProcessor sf2Instrument Bank Banco Gain Guadagno Reverb Riverbero Reverb Roomsize Riverbero - dimensione stanza Reverb Damping Riverbero - attenuazione Reverb Width Riverbero - ampiezza Reverb Level Riverbero - livello Chorus Lines Chorus - voci Chorus Level Chorus - livello Chorus Speed Chorus - velocità Chorus Depth Chorus - profondità Patch Patch Chorus Chorus sf2InstrumentView Open other SoundFont file Apri un altro file SoundFont Click here to open another SF2 file Clicca qui per aprire un altro file SF2 Choose the patch Seleziona il patch Gain Guadagno Apply reverb (if supported) Applica il riverbero (se supportato) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Questo pulsante abilita l'effetto riverbero, che è utile per effetti particolari ma funziona solo su file che lo supportano. Reverb Roomsize: Riverbero - dimensione stanza: Reverb Damping: Riverbero - attenuazione: Reverb Width: Riverbero - ampiezza: Reverb Level: Riverbero - livello: Apply chorus (if supported) Applica il chorus (se supportato) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Questo pulsante abilita l'effetto chorus, che è utile per effetti di eco particolari ma funziona solo su file che lo supportano. Chorus Lines: Chorus - voci: Chorus Level: Chorus - livello: Chorus Speed: Chorus - velocità: Chorus Depth: Chorus - profondità: Open SoundFont file Apri un file SoundFont SoundFont2 Files (*.sf2) File SoundFont2 (*.sf2) sfxrInstrument Wave Form Forma d'onda sidInstrument Cutoff Taglio Resonance Risonanza Filter type Tipo di filtro Voice 3 off Voce 3 spenta Volume Volume Chip model Modello di chip sidInstrumentView Volume: Volume: Resonance: Risonanza: Cutoff frequency: Frequenza di taglio: High-Pass filter Filtro passa-alto Band-Pass filter Filtro passa-banda Low-Pass filter Filtro passa-basso Voice3 Off Voce 3 spenta MOS6581 SID MOS6581 SID MOS8580 SID MOS8580 SID Attack: Attacco: Decay: Decadimento: Sustain: Sostegno: Release: Rilascio: Pulse Width: Ampiezza pulse: Coarse: Approssimativo: Pulse Wave Onda pulse Triangle Wave Onda triangolare SawTooth Dente di sega Noise Rumore Sync Sincronizzato Ring-Mod Modulazione ring Filtered Filtrato Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Il livello di attacco determina quanto rapidamente l'uscita della voce %1 sale da zero al picco di amplificazione. Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Il livello di decadimento determina quanto rapidamente l'uscita ricade dal picco di amplificazione al livello di sostegno impostato. Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. L'uscita della voce %1 rimarrà al livello di sostegno impostato per tutta la durata della nota. The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. L'uscita della voce %1 ricadrà dal livello di sostegno verso il silenzio con la velocità di rilascio impostata. The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. La risoluzione dell'ampiezza del Pulse permette di impostare che l'ampiezza venga variata in modo continuo senza salti udibili. Sull'oscillatore %1 deve essere selezionata la forma d'onda Pulse perché si abbia un effetto udibile. The Coarse detuning allows to detune Voice %1 one octave up or down. L'intonazione permette di "stonare" la voce %1 verso l'alto o verso il basso di un'ottava. Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Il Sync sincronizza la frequenza fondamentale dell'oscillatore %1 con quella dell'oscillatore %2 producendo effetti di "Hard Sync". Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Ring-mod rimpiazza l'uscita della forma d'onda triangolare dell'oscillatore %1 con la combinazione "Ring Modulated" degli oscillatori %1 e %2. When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Quando il filtraggio è attivo, la voce %1 verrà processata dal filtro. Quando il filtraggio è spento, la voce %1 arriva direttamente all'uscita e il filtro non ha effetto su di essa. Test Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Quando Test è attivo, e finché non viene spento, reimposta e blocca l'oscillatore %1 a zero. song Project saved Progeto salvato The project %1 is now saved. Il progetto %1 è stato salvato. Project NOT saved. Il progetto NON è stato salvato. The project %1 was not saved! Il progetto %1 non è stato salvato! Import file Importa file untitled senza_nome Select file for project-export... Scegliere il file per l'esportazione del progetto... Tempo Tempo Master volume Volume principale Master pitch Altezza principale Empty project Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! Questo progetto è vuoto, pertanto non c'è nulla da esportare. Prima di esportare è necessario inserire alcuni elementi nel Song Editor! MIDI sequences Sequenze MIDI FL Studio projects Progetti FL Studio All file types Tutti i tipi di file Hydrogen projects Progetti Hydrogen Select directory for writing exported tracks... Seleziona una directory per le tracce esportate... stereoEnhancerControlDialog WIDE AMPIO Width: Ampiezza: stereoEnhancerControls Width Ampiezza stereoMatrixControlDialog Left to Left Vol: Volume da Sinistra a Sinistra: Left to Right Vol: Volume da Sinistra a Destra: Right to Left Vol: Volume da Destra a Sinistra: Right to Right Vol: Volume da Destra a Destra: stereoMatrixControls Left to Left Da Sinistra a Sinistra Left to Right Da Sinistra a Destra Right to Left Da Destra a Sinistra Right to Right Da Destra a Destra timeLine Enable/disable auto-scrolling Abilita/disabilita lo scorrimento automatico Enable/disable loop-points Abilita/disabilita i punti di ripetizione After stopping go back to begin Una volta fermata la riproduzione, torna all'inizio After stopping go back to position at which playing was started Una volta fermata la riproduzione, torna alla posizione da cui si è partiti After stopping keep position Una volta fermata la riproduzione, mantieni la posizione Hint Suggerimento Press <Ctrl> to disable magnetic loop points. Premi <Ctrl> per disabilitare i punti di loop magnetici. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. Tieni premuto <Shift> per spostare l'inizio del punto di loop; premi <Ctrl> per disabilitare i punti di loop magnetici. track Muted Muto Solo Solo trackContentObject Muted Muto trackContentObjectView Current position Posizione attuale Hint Suggerimento Press <Ctrl> and drag to make a copy. Premere <Ctrl>, cliccare e trascinare per copiare. Current length Lunghezza attuale Press <Ctrl> for free resizing. Premere <Ctrl> per ridimensionare liberamente. %1:%2 (%3:%4 to %5:%6) %1:%2 (da %3:%4 a %5:%6) Delete (middle mousebutton) Elimina (tasto centrale del mouse) Cut Taglia Copy Copia Paste Incolla Mute/unmute (<Ctrl> + middle click) Attiva/disattiva la modalità muta (<Ctrl> + tasto centrale) trackOperationsWidget Clone this track Clona questa traccia Remove this track Elimina questa traccia Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Premere <Ctrl> mentre si clicca sulla maniglia per lo spostamento per iniziare una nuova azione di drag'n'drop. Actions for this track Azioni per questa traccia Mute Muto Mute this track Metti questa traccia in modalità muta Solo Solo Clear this track Pulisci questa traccia Turn all recording on Accendi tutti i processi di registrazione Turn all recording off Spegni tutti i processi di registrazione vestigeInstrument Loading plugin Caricamento plugin Please wait while loading VST-plugin... Prego attendere, caricamento del plugin VST... Failed loading VST-plugin Errore nel caricamento del plugin VST The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! Non è stato possibile caricare il plugin VST %1 a causa di alcuni errori. Se, con altre applicazioni GNU/Linux il plugin funziona, si prega di contattare uno sviluppatore di LMMS! vibed String %1 volume Volume della corda %1 String %1 stiffness Durezza della corda %1 Pick %1 position Posizione del plettro %1 Pickup %1 position Posizione del pickup %1 Detune %1 Intonazione %1 Length %1 Lunghezza %1 Impulse %1 Impulso %1 Octave %1 Ottava %1 Pan %1 Pan %1 Fuzziness %1 Fuzziness %1 vibedView Volume: Volume: The 'V' knob sets the volume of the selected string. La manopola 'V' regola il volume della corda selezionata. String stiffness: Durezza della corda: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. La manopola 'S' regola la durezza della corda selezionata. La durezza della corda influenza la durata della vibrazione. Più basso sarà il valore, più a lungo suonerà la corda. Pick position: Posizione del plettro: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. La manopola 'P' regola il punto in cui verrà 'pizzicata' la corda. Più basso sarà il valore, più vicino al ponte sarà il plettro. Pickup position: Posizione del pickup: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. La manopola 'PU' regola la posizione in cui verranno rilevate le vibrazioni della corda selezionata. Più basso sarà il valore, più vicino al ponte sarà il pickup. Pan: Pan: The Pan knob determines the location of the selected string in the stereo field. La manopola Pan determina la posizione della corda selezionata nello spettro stereo. Detune: Intonazione: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. La manopola Intonazione regola l'altezza del suono della corda selezionata. Valori sotto lo zero sposteranno l'intonazione della corda verso il bemolle. Valori sopra lo zero spostarenno l'intonazione della corda verso il diesis. Fuzziness: Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. La manopola Slap aggiungeun po' di "sporco" al suono della corda selezionata, sensibile soprattutto nell'attacco, anche se può essere usato per rendere il suono più "metallico". Length: Lunghezza: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. La manopola Lunghezza regola la lunghezza della corda selezionata. Corde più lunghe suonano più a lungo e hanno un suono più brillante. Tuttavia richiedono anche più tempo del processore. Impulse or initial state Impulso o stato iniziale The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Il selettore 'Imp' determina se la forma d'onda nel grafico deve essere trattata come l'impulso del plettro sulla corda o come lo stato iniziale della corda. Octave Ottava The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Il seletore Ottava serve per scegliere a quale armonico della nota risuona la corda. Per esempio, '-2' significa che la corda risuona due ottave sotto la fondamentale, 'F' significa che la corda risuona alla fondamentale e '6' significa che la corda risuona sei ottave sopra la fondamentale. Impulse Editor Editor dell'impulso The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. L'editor della forma d'onda fornisce il controllo sull'impulso iniziale usato per far vibrare la corda. I pulsanti a destra del grafico predispongono una forma d'onda del tipo selezionato. Il pulsante '?' carica la forma d'onda da un file--verranno caricati solo i primi 128 campioni. La forma d'onda può anche essere disegnata direttamente sul grafico. Il pulsante 'S' ammorbisce la forma d'onda. Il pulsante 'N' normalizza la forma d'onda. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modella fino a nove corde che vibrano indipendentemente. Il selettore 'Corda' permettedi scegliere quale corda modificare. Il selettore 'Imp' sceglie se il grafico sarà l'impulso dato o lo stato iniziale della corda. Il selettore 'Ottava' imposta l'armonico a cui risuonerà la corda. Il grafico permette di controllare l'impulso (o lo stato iniziale) per far vibrare la corda. La manopola 'V' reogla il volume. La manopola 'S' regola la durezza della corda. La manopola 'P' regola la posiziona del plettro. La manopola 'PU' regola la posizione del pickup. 'Pan' e 'Detune' non dovrebbero aver bisogno di spiegazioni. La manopola 'Slap' aggiunge un po' di "sporco" al suono della corda. La manopola 'Lunghezza' regola la lunghezza della corda. Il LED nell'angolo in basso a destra sull'editor della forma d'onda determina se la corda è attiva nello strumento selezionato. Enable waveform Abilita forma d'onda Click here to enable/disable waveform. Cliccando qui si abilita/disabilita la forma d'onda. String Corda The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Il selettore della Corda serve per scegliere su quale corda hanno effetto i controlli. Uno strumento Vibed può contenere fino a nove corde che indipendenti. Il LED nell'angolo in basso a destra dell'editor della forma d'onda indica se la corda è attiva. Sine wave Onda sinusoidale Triangle wave Onda triangolare Saw wave Onda a dente di sega Square wave Onda quadra White noise wave Rumore bianco User defined wave Forma d'onda personalizzata Smooth Ammorbidisci Click here to smooth waveform. Cliccando qui la forma d'onda viene ammorbidita. Normalize Normalizza Click here to normalize waveform. Cliccando qui la forma d'onda viene normalizzata. &Help &Aiuto Use a sine-wave for current oscillator. Utilizzare un'onda sinusoidale per questo oscillatore. Use a triangle-wave for current oscillator. Utilizzare un'onda triangolare per questo oscillatore. Use a saw-wave for current oscillator. Utilizzare un'onda a dente di sega per questo oscillatore. Use a square-wave for current oscillator. Utilizzare un'onda quadra per questo oscillatore. Use white-noise for current oscillator. Utilizzare rumore bianco per questo oscillatore. Use a user-defined waveform for current oscillator. Utilizzare un'onda personalizzata per questo oscillatore. visualizationWidget click to enable/disable visualization of master-output cliccando si abilita/disabilita la visualizzazione dell'uscita principale Click to enable Clicca per abilitare voiceObject Voice %1 pulse width Ampiezza pulse voce %1 Voice %1 attack Attacco voce %1 Voice %1 decay Decadimento voce %1 Voice %1 sustain Sostegno voce %1 Voice %1 release Rilascio voce %1 Voice %1 coarse detuning Intonazione voce %1 Voice %1 wave shape Forma d'onda voce %1 Voice %1 sync Sincronizzazione voce %1 Voice %1 ring modulate Modulazione ring voce %1 Voice %1 filtered Filtraggio voce %1 Voice %1 test Test voce %1 waveShaperControlDialog INPUT INPUT Input gain: Guadagno in Input: OUTPUT OUTPUT Output gain: Guadagno in output: Reset waveform Resetta forma d'onda Click here to reset the wavegraph back to default Clicca qui per resettare il grafico d'onda alla condizione originale Smooth waveform Spiana forma d'onda Click here to apply smoothing to wavegraph Clicca qui per addolcire il grafico d'onda Increase graph amplitude by 1dB Aumenta l'amplificazione di 1dB Click here to increase wavegraph amplitude by 1dB Clicca qui per aumentare l'amplificazione del grafico d'onda di 1dB Decrease graph amplitude by 1dB Diminuisi l'amplificatore di 1dB Click here to decrease wavegraph amplitude by 1dB Clicca qui per diminuire l'amplificazione del grafico d'onda di 1dB Clip input Taglia input Clip input signal to 0dB Taglia in segnale di input a 0dB waveShaperControls Input gain Guadagno in input Output gain Guadagno in output lmms-1.1.3/data/locale/ja.qm000066400000000000000000002401111247673406200155770ustar00rootroot00000000000000/ND++un/VI/V2G7"x[7oה@۴u/Fz`FzԠOXpOX/V ~o>uՙPlߺo6CBA D a3J x(^ (^ ,´,´S.w"4NRo_/2t9%8n Cf3gA|9>Iѻt>Xgt~vuydD2Q 4T8J:)CB|HH> OXP~£P~Wa ] ]YBlŐĩR$##%y|4#qA~3{WĽRϯHѫv66RNdք \왞gn^BY=.L 0t(U10y19FA>NHJrOPJPJ:Qq. !``4`%`%`%bc=~g5h{ jztr w~e{ -9I No_uquuu=u|u|6u|qu}L{nIIENII "žl8NͥV(`fnP u uÚ @lG=ITfΎ+$0%C-UU158EEz?H8PeiQ~\C.-fs RvA }o.wNqÞ4So^vLEU<5<5SJ<5^<5^<58<5<5xsD6}{ZCѱN^ Eix#EC'v'vM1^:gN^Gk~M9.^8Q)dWj+Z+[ ["lfqmBzz#t>2!|!(-~2Q2vޔrwTDti;>Pt.Cr Ů PY)-E,DQ5ng;ZUIUI[tv\X.rcuiANtm.swA29`Q fj>92J2Q] d)~B#ݨUH$Ϟ#; QG/Gx!QS6NbW~\bssjDdnqpXvSe5H2II_5H~$ۃE0d!n 5%o{dtJ:}RIP e࣓#OƫY/!? $ e )8N .5nY 6E 9 I Mg T  hI. hI.$ kG p,: w%] w% x > >& F B1 ^ ` `Ҋ  ~ nB Fb wOv Knk L  UUG u Ro 1 N0  ·~ ʵy J\F D] N ؋. ہ */ I9 ".p $ rF} + N& STn | \ \ m ] m N m ֬ s TQ  $nS  y N N"j h Ɵa 4 ӗ`E Ӱ? < <%F e ~> i  % .> . ʓ " $&y ==^ V c" c.c4 c.c c.cH c.c c cG d̥J d̥ d̥ t, |`  sw_ ^   鼣` ]! + ZF c .˙ @u @uN ao bS# |. u =$ .d .&w D 0^_ ɶ.W y Չ9 Չ9 /^ /^& ^' zfn~i N!&ʮ42<)Bw>1PUQ>:Y (]6ad^?cg[ndyȘ'[YNNJM  |[ $egt( )3 CgpIU&JXҾ_^ E+` K7KyI a¥I}L5\~ܹ}i.0000VolumeAmplifierControls 00000CHANNELSAudioAlsa::setupWidget0000DEVICEAudioAlsa::setupWidget00000Y00h00{0K0n00000000000r00M0~0Y000000x0y0X4b@0k000000Lhy:0U00~0Y00000000Yp0h}BNp0P s0j0i0n-[0o00000U00~0[00000000n00000h0oup0j00k0j00K00W00~0[00Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorViewv0S0n0000g R0k0Y00p00Y0y0f0n00000LVގ0U00~0Y000000000000h0D0F0K0c0S0D0D000000kO0H0~0Y0pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorViewN0n000000OOpen other sampleAudioFileProcessorView0000VގReverse sampleAudioFileProcessorView0S0n0d0~00gX^Es0et0g0M0~0Y00S0nP$0100%0k0Y00h00000oY S0W0~0[000]0F0g0j0D0h0M0oX^Es0LN N 0W0~0Y[0n000000000]0n0~0~0g 0With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView 00000CHANNELSAudioJack::setupWidget000000T  CLIENT-NAMEAudioJack::setupWidget 00000CHANNELSAudioOss::setupWidget0000DEVICEAudioOss::setupWidget0000DEVICEAudioPortAudio::setupWidget 00000CHANNELSAudioPulseAudio::setupWidget0000DEVICEAudioPulseAudio::setupWidget0000DEVICEAudioSdl::setupWidget P$0000(&C) (%1%2)&Copy value (%1%2)AutomatableModel"P$00000(&P) (%1%2)&Paste value (%1%2)AutomatableModel0000(&R) (%1%2) &Reset (%1%2)AutomatableModel0000000kc}Connect to controller...AutomatableModel%1 0kc}nConnected to %1AutomatableModel0000000kc}nConnected to controllerAutomatableModel c}0}Edit connection...AutomatableModelkLQhOS0n000000000}Edit song-global automationAutomatableModel c}0mSRemove connectionAutomatableModel4xb0U00_P$0o0Y0y0f00000000k0000U00~0W0_1All selected values were copied to the clipboard.AutomationEditor"000000000000 - %1Automation Editor - %1AutomationEditor*000000000000 - 00000j0WAutomation Editor - no patternAutomationEditor00000Y00h0000000ON0k0W0~0Y00000000g0o0r0h0d0nP$0R0W0_0yR0W0_00W0~0Y00S0n0000L000000gfnk0d0K0D0~0Y0 'Shift+D' 00J0W0f00000000ON0k0g0M0~0Y0Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditor00000Y00hmS0000ON0k0W0~0Y0mS0000g0o0r0h0d0nP$0mS0g0M0~0Y0 'Shift+E' 00J0W0f0mS0000ON0k0g0M0~0Y0Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditor00000Y00hxb0W0_P$000000000k0000W0~0Y00]0nP$0o00000000b0Y0hNa0n0000nNa0nX4b@0k00000g0M0~0Y0Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor00000Y00hxb0W0_P$000000000k0000W0~0Y00]0nP$0o00000000b0Y0hNa0n0000nNa0nX4b@0k00000g0M0~0Y0Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorL00000Y00h00000000K0P$0LgR0nSraK0n\{0k00000U00~0Y0YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditor|00000Y00hsW(0n00000oYO0W0~0Y00000}N-0noYO0kOR)0g0Y0}BNOMn0k0O00h00000oRv0k0000U00~0Y0Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditor000000Y00hsW(0n00000noYO0P\kb0W0~0Y0>Click here if you want to stop playing of the current pattern.AutomationEditor&xb0W0_P$0000 (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor&xb0W0_P$0000 (Shift+M)Cut selected values (Ctrl+X)AutomationEditor 000000 (shift+D)Draw mode (Shift+D)AutomationEditor mS 000 (shift+E)Erase mode (Shift+E)AutomationEditor0P$000000000K00000 (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditor,sW(0n00000nQu/000 (Space)"Play/pause current pattern (Space)AutomationEditorL0000000n00000000000g0000000000000x00g0O0`0U0DEPlease open an automation pattern with the context menu of a control!AutomationEditor(sW(0n00000noYOP\kb (Space)'Stop playing of current pattern (Space)AutomationEditorP$0o0000U00~0W0_ Values copiedAutomationEditor([LN-0n0000000000<Ctrl>$Drag a control while pressing AutomationPattern%1 P 0nc}%1 ConnectionsAutomationPatternView000ClearAutomationPatternView"%1" 0ReDisconnect "%1"AutomationPatternView 000000000000N-0k0OOpen in Automation editorAutomationPatternViewT RM00000 Reset nameAutomationPatternView20000/000Set/clear recordAutomationPatternViewD00000000g0S0n00000000000000000N-0k0r00M0~0Y6double-click to open this pattern in automation editorAutomationPatternView000000000000Automation trackAutomationTrack000000 %1 Controller %1 ControllerRiQ Auto DetectControllerConnectionDialog 00000CHANNELControllerConnectionDialog 000000 CONTROLLERControllerConnectionDialog 00000CancelControllerConnectionDialog000000-[Connection SettingsControllerConnectionDialog00000omS0U00~0W0_0Cycle Detected.ControllerConnectionDialogQeR00000 Input channelControllerConnectionDialog00000 000000Input controllerControllerConnectionDialog00000epMAPPING FUNCTIONControllerConnectionDialogMIDI 000000MIDI CONTROLLERControllerConnectionDialog0000000000USER CONTROLLERControllerConnectionDialogRAddControllerRackView0000000000Controller RackControllerRackView000(&H)&HelpControllerView0S0n000000dS(&R)&Remove this pluginControllerViewZ00000000o00d0~000000000]0nN0n0000000nP$0RS0Y00S0h0L0g0M0~0Y0QControllers are able to automate the value of a knob, slider, and other controls.ControllerView 000000ControlsControllerView(0000000ne0W0DT RM0Qe00f0O0`0U0D&Enter the new name for this controllerControllerView0000000ne9T Rename controllerControllerView00000g REffect enabledEffect00000g REffects enabled EffectChain00000ȏR Add effectEffectRackView000000000 EFFECTS CHAINEffectRackView00000ȏR Add effectEffectSelectDialog000(&H)&Help EffectView0S0n000000dS(&R)&Remove this plugin EffectView 000000Controls EffectView0000000000ep0o0D0d0d0K0n000000n0r0h#0j00g0Y000000oN 0K0N 0kQt0U00~0Y0 On/Off 00000g0D0d0g0c[0W0_00000000000Y00S0h0L0g0M0~0Y. Wet/Dry00d0~00g0000000nQRN-0nQeR00000h0000000000n000000000000g0M0~0Y0 QeR00000oN0dRM0n00000K00nQR0g0Y00j0n0g#0nN 0ne0n000000n 'dry'00000o0]00~0g0n0000000Y0y0fT+00g0D0Y0 Decay 0d0~00g00000L}B00c0_0B0h0i00`0Q0nfB00000Qt0Y00K00M00~0Y0N0H000_fBQ0kN0H000_0W0M0DP$NN 0k0L=0a0_0h0M0k000000oQt0P\kb0W0~0Y00S0n0d0~00g N0H000_fB 00M00~0Y00S0nfB0w0O0Y00hCPU00D0~0Y00Y0j00a0_Y'b0n000000k0d0D0f0o Decay0o\0U0O0Y00y0M0g0Y000000n00F0jw0DfB0nl0u0X0000000nX4T0oDecay0X00Y_ʼn0L0B00~0Y0 Gate 0n0d0~00g0000000LRP\kb0Y00_00n N0H000_0W0M0DP$"0lz00~0Y00S0n000glz00_000NN 0k00000000L=0a00h0h0Y0P0k N0H000_fB 0L0o0X0~00~0Y0 00000000000g0000000n00000n}0000000r00M0~0Y0 S00000Y00h00000000000L0M0~0Y00]0S0g000000L[L0U00uj00K0H0_0000000[Qh0kmS0W0_00g0M0~0Y0 SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectViewN eyR(&d) Move &down EffectViewN eyR(&u)Move &up EffectView000000d0~00o00D0O0d0nq!00000L000000L00000}BN0Y00~0H0kn!0U00j0D0h0D0Q0j0D0K0et0W0~0Y0\0U0O0Y00hCPU0n00000000x00[0~0Y0L000000h000000000n\;\>0L0000000Y0Sqz0L0B00~0Y0The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectView0000d0~00o00000000000000W0~0Y00S0n00000000o0000Qt00D0d}BN0Y00Klz[0Y00kq!0hR$e0U000000g0Y0zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewTWet/Dry 0d0~00g0QRN-0nQeR00000h0000000000nRrT00M00~0Y0eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView000000n 00/00Toggles the effect on or off. EffectView00000g0n0S0N0l&Click here for a saw-wave for current.EnvelopeAndLfoView00000g000lClick here for a sine-wave.EnvelopeAndLfoViewf00000g0000[l_b00B0h0g0[_0Y0000000000LFO0000nN 0k00000W0f0O0`0U0D0aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoView 00000gLFOThlep0P DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewD00000Y00h00000000n0L0S0nLFO0g0000000U00~0Y0>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewJ0i0c0K0K00000000000W0f0M0f0S0n000000k00000W0f0O0`0U0D08Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoView000HintEnvelopeAndLfoViewz0S0n0d0~00gsW(0nLFO0n00000000c[0W0~0Y0Y'0M0O0Y00hLFO0nc/^E0LgY'0k0j00~0g0k0K0K0fB0Lw0O0j00~0Y0Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n00000000c[0W0~0Y00S0nP$0Y'0M0O0Y00h0000000n00000000X00Y0n0kw0DfB0L_ʼn0k0j00~0Y0Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n00000000c[0W0~0Y00S0nP$0Y'0M0O0Y00h0000000L00000000K0000000000knp0Y00n0k_ʼn0jfB0Lw0O0j00~0Y00000n00F0ji}Vh0k0ow0DfB0x0s0~0Y0Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n00000000c[0W0~0Y000S0nP$0Y'0M0O0Y00h0000000L000000000x0nnp0Y00RM0k0000000000i00O00DOc0Y0fB0Lw0O0j00~0Y0Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoView0S0n0d0~00gsW(0nLFO0n000000000c[0W0~0Y00B0_00Y'0M0O0Y00hLFO0n_q00F0Q0x00`P$00000h0K00000Thlep0h0K 0L0J0J0M0O0j00~0Y0Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n000000000c[0W0~0Y00S0nP$0Y'0M0O0Y00h0S0n00000L_q0Y0[_0Y0P$0h0K000000Thlep0h0K 0LY'0M0O0j00~00~0Y0Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n0000000c[0W0~0Y00S0nfB0w0O0Y00h[0n0000000L00000Y0RM0nfB0Lw0O0j00~0Y0Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView0S0n0d0~00gsW(0nLFO0n0000000000c[0W0~0Y00S0nP$0Y'0M0O0Y00h0LSFO0L000000Y000~0g0nfB0Lw0O0j00~0Y0Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n00000000c[0W0~0Y0P$0Y'0M0O0Y00h000000000K0000kn\0Y00n0k_ʼn0jfB0Lw0O0j00~0Y0000000n00F0ji}Vh0g0o0S0nP$0Y'0M0O0W0f0O0`0U0DUse this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewx0S0n0d0~00gsW(0nLFO0n00000c[0W0~0Y0P$0Y'0M0O0Y00hLFO0n000000Le0O0j0c0f000000e0O0j00~0Y0Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView0S0n0d0~00gsW(0n0000000n000000000c[0W0~0Y0P$0Y'0M0O0Y00h000000L000k0j0RM0k0h0i0~0c0f00000L0O0j00~0Y0Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView 00000CancelExportProjectDialog000(&H)&HelpFxLine00000 %1FX %1FxMixer000MasterFxMixer*0S0n00000000000ne0W0DT RM0QeR&Enter the new name for this FX channel FxMixerView000000000FX-Mixer FxMixerView00000000000ne9T Rename FX channel FxMixerView0000MuteFxMixerView::FxChannelView"0S0n000000000000000Mute this FX channelFxMixerView::FxChannelView 00000ArpeggioInstrumentFunctionArpeggio00000eTArpeggio directionInstrumentFunctionArpeggio00000000 Arpeggio gateInstrumentFunctionArpeggio00000000 Arpeggio modeInstrumentFunctionArpeggio00000^Arpeggio rangeInstrumentFunctionArpeggio00000fB Arpeggio timeInstrumentFunctionArpeggio00000000 Arpeggio typeInstrumentFunctionArpeggioV000000o0r*_>0O0000ni}Vh0g O000oYOl0g0Y0000000O0F0hu0Mu0M0h0W0_i}0k0j00~0Y00000n00F0j i}Vh0n_&0oT0n00F0kr*_>0K00~0Y00Y0y0f0n0T fB0k0j00YT0h0oU0c0f0000000g0o_&000k00W0~0Y0Nhv0j000000ow0Kw튿0n0g0Y000a0000_0O0U00B00]0nN0nS0jT0x0v0S0h00g0M0~0Y0An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView0S0n0d0~00g000000000c[0W0~0Y0000000000o00000000QhOS0nOU000000oYO0Y00K0g0Y00S00O0H0p0K0c0S0D0D000000000000O\00~0Y0Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewz0S0n0d0~00g00000SXOM0g00000{V0xb0W0~0Y0xb0U00_000000oc[0W0_00000ep0n{VQ0goYO0U00~0Y0Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewp0S0n0d0~00g00ySXOM0g00000fB00000W0~0Y000000fB0k0oT00n000000n0nw0U0c[0W0~0Y0Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewl0S0n0d0~00g000{V0000000g-[0g0M0~0Y0c[0W0_000000n{VQ0gxb0W0_0000LoYO0U00~0Y0{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingView 00000CHANNELInstrumentMidiIOViewMIDI00000g RSENABLE MIDI INPUTInstrumentMidiIOViewMIDI000000g RENABLE MIDI OUTPUTInstrumentMidiIOView 00000PROGRAMInstrumentMidiIOView 00000VELOCITYInstrumentMidiIOView0000VOLUMEInstrumentSoundShaping0000VolumeInstrumentSoundShaping0S0S0g00S0n0000000000000g0d0K0D0_0D00000000000x0s0~0Y00nry`'00K0H00n0k000000o0h0f0͉0g0Y0Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewz0S000n000k0o0000000LT+0~00f0~0Y00000000o0Y f0Y00nY'Y ͉0g0Y00000000o0000000000jTb00Y00h0M0o0{0h00i0D0d0_ʼn0g0Y00_0h0H0p00000000000nX4T00Llz0~0c0_0k0j0fB00000g0M0~0Y0000000000O\00_0D0j000000000000000^^80k0000k0Y0_ʼn0L0B00~0Y00]00o00000000h00000000w0O0Y00S0h0g[s0g0M0~0Y0000000000000n00000Thlep0h0D0c0_0{0K0n0000000R6_0g0M000n0k0d0D0f0N`0o0D0c0W00g0Y00S00g0a00c0hJ00g00f0O0`0U0D!00n0S0N0ko0k0D0O0d0K0n0000000O0F0`0Q0g[0k0000j00000O\00S0h0S0g0M0~0Y0_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingView0S0n0d0~00g0xb0W0_000000n Q/0000000000W0~0Y00Q/000000k0o00000ThlepN؏0g0i00O00DThlep0X^E0U0[00K0c[0W0~0Y0Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingView60S0n000gxb0W0_000000n00000Thlep00000W0~0Y000000Thlep0o000000L000000000Y0Thlep00M00~0Y00_0h0H0p0000000000o00000ThlepNN 0n0Y0y0f0nThlep00000W0~0Y00000000000o00000ThlepNN 0n0Y0y0f0nThlep00000W0~0Y00_0n000000g0T i0g0Y02Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingView0000000 Base noteInstrumentTrack0000VolumeInstrumentTrack40S0n0d0~00g00D0_000000n00000W0~0Y0000000 0g0S0n0000000Y f0g0M0~0YuThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowJsW(0n0000000og_0000W0f0K0Y f0U00f0D0~0Y0N0000W0~0Y0KOThe current project was modified since last saving. Do you want to save it now? MainWindow 0S00oOU What's this? MainWindowO\im000000Working directory MainWindow0000DEVICEMidiAlsaRaw::setupWidget0000DEVICEMidiAlsaSeq::setupWidgetMIDI0000000MIDI ControllerMidiControllerT 0j0W_MIDI_000000unnamed_midi_controllerMidiController0000DEVICEMidiOss::setupWidgetQeR00000V[Fixed input velocityMidiPortQR00000V[Fixed output velocityMidiPortQeR00000 Input channelMidiPort00000 000000Input controllerMidiPortQR MIDI 00000Output MIDI programMidiPortQR00000Output channelMidiPort000000 000000Output controllerMidiPortMIDI 00000SOReceive MIDI-eventsMidiPortMIDI 00000OSend MIDI-eventsMidiPort00000000 Master volume NesInstrument`0S0S000000W0f00{0K0n000000000M0~0Y00000h00000n-[0o00000U00~0[00LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewt0S0S0g0000000ON/OFf0W0~0Y0000000ON0j00PatMan0o0000N-0k0B0000`X100O0D0~0Y0jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanView0S0S0g00000000ON/OFF0W0~0Y00000000ON0j00PatMan 0o0000nThlep0k0B0F00F0k0000000000W0~0Y0iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanView000Loop PatmanView 000000 Loop mode PatmanView00000Lxb0U00f0~0[0No file selected PatmanView0{0K0n00000OOpen other patch PatmanView000000000OOpen patch file PatmanView0000000 (*.pat)Patch-Files (*.pat) PatmanView0000Tune PatmanView0000000 Tune mode PatmanView 0000׏R Add steps PatternViewT RMY f Change name PatternView0Y0y0f0n0000000Clear all notes PatternView00000000OOpen in piano-roll PatternView 0000זdS Remove steps PatternViewT RM00000 Reset name PatternViewj00000000g0S0n000000000000k0M0~0Y0 00000000g00000n000000000W0~0Y0Wdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternView000 000000Peak ControllerPeakControllerT00000Y00h00000000nN-0n0000LgR0nhy:0U00f0\{0k00000U00~0Y0XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRoll00000Y00hxb0W0f0D00000L00000000k0000U00~0Y000000000b0Y0hNa0n00000n0i0S0k0g00000W0_000000000g0M0~0Y0Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll00000Y00hxb0W0f0D00000L00000000k0000U00~0Y000000000b0Y0hNa0n00000n0i0S0k0g00000W0_000000000g0M0~0Y0Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollf00000Y00hsW(0n00000Qu00S00o0000}N-0kOR)000000ng_0gRv0k0000W0~0Y0Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRoll00000Y00h0MIDI00000~0_0o[_0Y000000000000n000000000000K00n0000sW(0n00000k20W0~0Y020nQu0W0_0Y0y0f0n0000osW(0n00000kf0M0~00~0Y0f0M0~00_0000o_0K0Qu/}0g0M0~0Y0Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRoll00000Y00h0MIDI00000~0_0o[_0Y000000000000n000000000000K00n0000sW(0n00000k20W0~0Y020nQu0W0_0Y0y0f0n0000osW(0n00000kf0M0~00~0Y0f0~0_0oBB00000L000000000goYO0U00~0Y0Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRoll:00000Y00h sW(0n00000n0000000P\kb0W0~0Y0/Click here to stop playback of current pattern. PianoRoll$xb0000n000 (Ctrl+C)Copy selected notes (Ctrl+C) PianoRoll&xb0000nR0S0 (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll 000000 (shift+D)Draw mode (Shift+D) PianoRoll mS 000 (shift+E)Erase mode (Shift+E) PianoRoll g_0n000 Last note PianoRoll0000000 Note lock PianoRoll400000000K000000000 (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRoll000000 - %1Piano-Roll - %1 PianoRoll000000 - 00000j0WPiano-Roll - no pattern PianoRoll,sW(0n00000nQu/000 (Space)"Play/pause current pattern (Space) PianoRoll2%1 0h %2 0n0ne0W0DP$0QeR0W0f0O0`0U0D:+Please enter a new value between %1 and %2: PianoRollB 0000 0nN 0g00000000W0f 0000 00D0f0O0`0U0D/Please open a pattern by double-clicking on it! PianoRoll6MIDI-0000/00000-0000K000002+Record notes from MIDI-device/channel-piano PianoRollRf0BB00000QuN-0k0MIDI-0000/00000-0000K000002JRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRollxb000 (Shift+S)Select mode (Shift+S) PianoRoll(sW(0n00000noYOP\kb (Space)'Stop playing of current pattern (Space) PianoRoll0000000 Base note PianoView00000000N-0n000Error while loading pluginPlugin&00000 "%1" 0n0000kY1eWFailed to load plugin "%1"!Plugin000000L0d0K00~0[0Plugin not foundPluginP00000 "%1" 0o0d0K00j0D0K0000g0M0~0[00 SV0o "%2"0g0Y0AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin&W'~. OGG-0000 (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer WAV-0000 (*.wav)WAV-File (*.wav)ProjectRendererQeR00000 Channels In: QWidgetQR00000Channels Out: QWidget 000000 Copyright: QWidget0000File: QWidget QCMaker: QWidgetT RMName: QWidget0D0D0HNoQWidget000000S: Real Time Capable: QWidget0000000L_ʼn: Requires Real Time: QWidget0o0DYesQWidget000Copy SampleTCOView000Cut SampleTCOViewmS000N-000 Delete (middle mousebutton) SampleTCOView<0000/0000ȉd(<Ctrl> + N-0000000 #Mute/unmute ( + middle click) SampleTCOView0000Paste SampleTCOView20000/000Set/clear record SampleTCOView00000000g0000xbdouble-click to select sample SampleTCOViewSample track Sample track SampleTrack0000Volume SampleTrack000000000Channel volume:SampleTrackView000000000 Track volumeSampleTrackView&automation-track0RAdd automation-track SongEditor beat/bassline RAdd beat/bassline SongEditorsample-track RAdd sample-track SongEditor00000Y00hfQhOS0oYO0W0~0Y0000000000000}тr 0nOMn0K0QuY0W0~0Y0QuN-0k00000yR0U0Y0S0h00g0M0~0Y0Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorb00000Y00h0f0nQu0P\kb0W0~0Y00Qu_0000000000000of0ngR0k0000U00~0Y0uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor0000000000g0M0~0[0Could not open file SongEditor00000kf0M00~0[0Could not write file SongEditor 000000 Draw mode SongEditor}0000(xb{I Edit mode (select and move) SongEditor0000000000High quality mode SongEditor0000000 Master pitch SongEditor00000000 Master volume SongEditor000Qu (Space)Play song (Space) SongEditor$0000000000K0000002 Record samples from Audio-device SongEditorF0000~0_0oBB00000QuN-0k0000000000K0000002?Record samples from Audio-device while playing song or BB track SongEditor0000000 Song-Editor SongEditor000P\kb (Space)Stop song (Space) SongEditor000/BPM TEMPO/BPM SongEditor000Tempo SongEditorf0n0000oRk0n000ep(BPM)0gc[0W0~0Y0f0n0000Y f0Y0X4T0o0S0nP$0Y f0W0f0O0`0U0D0T\{0o0d0n000000a0~0Y0K00BPM0g0B000U000000o0NR0k00D0O0d0n\{000/4) 0LoYO0U00(0B00D0oR0k0D0O0d0n\{0LoYO0U000K 0K00M00~0Y0-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor0000 %1 SJValue: %1 semitones SongEditor0000 %1% Value: %1% SongEditor0000 000 master pitch SongEditor00000000 master volume SongEditor f0n000 tempo of song SongEditor000(&H)&Help TempoSyncKnob SAQmR{& 16th note TempoSyncKnob N SANR{& 32nd note TempoSyncKnobQkR{&8th note TempoSyncKnob0000Custom  TempoSyncKnob0000 Custom... TempoSyncKnob 000000 Eight beats TempoSyncKnobNR{& Half note TempoSyncKnob^T gNo Sync TempoSyncKnobVR{& Quarter note TempoSyncKnobSAQmR{&0kT gSynced to 16th Note TempoSyncKnobN SANR{&0kT gSynced to 32nd Note TempoSyncKnobQkR{&0kT gSynced to 8th Note TempoSyncKnob0000000kT gSynced to Eight Beats TempoSyncKnobNR{&0kT gSynced to Half Note TempoSyncKnobVR{&0kT gSynced to Quarter Note TempoSyncKnob Qh{&0kT gSynced to Whole Note TempoSyncKnob 000T g Tempo Sync TempoSyncKnobQh{& Whole note TempoSyncKnob 00000CancelTrackContainer0000 %1000000N-000000L0d0K00~0[00g0W0_0 0{0K0n0000000g00S0n00000LMMS0g00000W0f00000000kY c0W0f0O0`0U0D0Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer00000000000g0M0~0[0Couldn't import fileTrackContainer0000000000g0M0~0[00Couldn't open fileTrackContainer0000 %1 000u(0k00000g0M0~0[00 00000h00000nQe0c0f00000000L00S0K00000W0f00FN^000g0O0`0U0D0Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer$FLP-0000000000N-...Importing FLP-file...TrackContainer&MIDI-0000000000N-...Importing MIDI-file...TrackContainer000000000N-Loading project...TrackContainer0J_0a0O0`0U0D...Please wait...TrackContainer"0n0S0N0l0sW(0n000000gOu(&Use a saw-wave for current oscillator.TripleOscillatorView 000l0sW(0n000000gOu('Use a sine-wave for current oscillator.TripleOscillatorViewe_bl0sW(0n000000gOu()Use a square-wave for current oscillator.TripleOscillatorViewN l0sW(0n000000gOu(+Use a triangle-wave for current oscillator.TripleOscillatorView(0000[l_b0sW(0n000000gOu(3Use a user-defined waveform for current oscillator.TripleOscillatorView&00000000sW(0n000000gOu('Use white-noise for current oscillator.TripleOscillatorView~0S0S000000Y00h0VST-000000n000000000000000000GUI)0Lhy:0U00_0^hy:0k0j0c0_00W0~0Y0QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentView0{0K0n VST-00000000000W0_0D0j0000000S0n000000000Y00h00000000000000Ls00f00000x0y0~0Y0Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentView DLL-0000 (*.dll)DLL-files (*.dll)VestigeInstrumentView EXE-0000 (*.exe)EXE-files (*.exe)VestigeInstrumentView(VST-plugin0o0000U00f0~0[0No VST-plugin loadedVestigeInstrumentViewVST-0000000OOpen VST-pluginVestigeInstrumentView$0{0K0n VST-0000000000Open other VST-pluginVestigeInstrumentViewGUI0nhy:/^hy: Show/hide GUIVestigeInstrumentView0Y0y0f0n0000000k0W0~0Y0Turn off all notesVestigeInstrumentView000000000N-Loading plugin VstPlugin20000nN 0g00000000W0f0S0S0kl_b0c0M0~0YADraw your own waveform here by dragging your mouse on this graph. WatsynViewP sAmplifyaudioFileProcessor 0000}BN End of sampleaudioFileProcessor 000000 Loop modeaudioFileProcessor0000VގReverse sampleaudioFileProcessor 0000땋YStart of sampleaudioFileProcessor0000000000000RAdd automation-trackbbEditor"beat/bassline 0RAdd beat/basslinebbEditor 0000׏R Add stepsbbEditor000 00000000000Beat+Bassline EditorbbEditor00000Y00hsW(0n beat/bassline 0oYO0W0~0Y00beat/bassline00o}BNOMn0k0O00hRv0k0000U00~0Y0qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorF00000Y00hsW(0n beat/bassline 0noYO0P\kb0W0~0Y04Click here to stop playing of current beat/bassline.bbEditorDsW(0n beat/bassline 0 Qu/000 (Space)(Play/pause current beat/bassline (Space)bbEditor 0000זdS Remove stepsbbEditor8beat/bassline 0nQu0P\kb (Space).Stop playback of current beat/bassline (Space)bbEditorr0Y f Change color bbTCOView T RM0Y f Change name bbTCOView$000+000000-000000OOpen in Beat+Bassline-Editor bbTCOViewT RM00000 Reset name bbTCOView beat/bassline %1Beat/Bassline %1bbTrack00000nw0U Samplelength bitInvader00000Y00h000lClick for a sine-wave.bitInvaderView00000Y00h0n0S0N0lClick here for a saw-wave.bitInvaderView00000Y00he_blClick here for a square-wave.bitInvaderView00000Y00hN lClick here for a triangle-wave.bitInvaderView00000Y00h0000l_b$Click here for a user-defined shape.bitInvaderView00000Y00h0000000Click here for white-noise.bitInvaderView 00000Y00hl_b0^snS0W0~0YClick here to smooth waveform.bitInvaderView20000nN 0g00000000W0f0S0S0kl_b0c0M0~0YADraw your own waveform here by dragging your mouse on this graph.bitInvaderView0000000000g0M0~0[0Could not open fileexportProjectDialog0000 %1 0f0M0u(0k00000g0M0~0[00 0S0n00000h00000T+00000000nf0M0j)P0L0B00K0x0W0fQ^f0M00g0O0`0U0D0Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog000ErrorexportProjectDialogX00000000000000lz[0Y00n0000up0j0QR0000000x00g0O0`0U0D0\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog$0000000 %1 0k000000Export project to %1exportProjectDialog000000: %1%Rendering: %1%exportProjectDialog2%1 0h %2 0n0ne0W0DP$0QeR0W0f0O0`0U0D:+Please enter a new value between %1 and %2:fader000Graph graphModel000(&H)&Helpknob2%1 0h %2 0n0ne0W0DP$0QeR0W0f0O0`0U0D:+Please enter a new value between %1 and %2:knobJ-96.0 dBV 0h 6.0 dBV00n0ne0W0DP$0QeR0W0f0O0`0U0D:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob g000Analysis ToolsladspaBrowserViewR)u(S00000Available EffectsladspaBrowserView N f0j000 Don't knowladspaBrowserViewi}Vh InstrumentsladspaBrowserView:0S0n000000oLMMS0g0d0K0H00Y0y0f0nLADSPA000000n`X10hy:0W0~0Y0000000o0000000hT RM0k00c0f0d0n00000k00Q0f0B00~0Y0 hy:0U00000000oLMME0gR)u(S0j00n0g0Y00B0000000LLMMS0gR)u(S0g0B00_00k0o00~0Z{,N0k000000g0B00S0h0d0~0QeR000000hQR000000c0c0f0j0D0h0D0Q0~0[00LMMS0oT RM0k 'in' 0LT+0~00000000000000QeR000000hX0W0~0Y0QR0000h0W0fX0Y00n0o 'out'00LT+0~0000n0g0Y00U00k000000nQeR0hQR0nep0LT 0X0g0000000nRO\0LS0g0B0_ʼn0L0B00~0Y0 i}Vh000000oQR000000W0K0j0D00n0g0Y0 g0000oQeR000000W0K0j0D00n0g0Y0 N f0j0000oQeR000000QR00000000d0K00j0K0_00n0g0Y 00000000000000Y00h0000n`X10Lhy:0U00~0Y0TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView000Type:ladspaBrowserViewR)u(N S00000Unavailable EffectsladspaBrowserViewf DescriptionladspaDescription0o0DYesladspaPortDialogf Distortion lb302Synth00000g000lClick for a sine-wave.lb302SynthView"00000g Moog 00_0D0jl_b Click here for a moog-like wave.lb302SynthView00000g0n0S0N0lClick here for a saw-wave.lb302SynthView 00000g\;\>0L0~00~0c0_e_bl0Click here for a square-wave with a rounded end.lb302SynthView00000ge_blClick here for a square-wave.lb302SynthView00000gN lClick here for a triangle-wave.lb302SynthView00000gcepl_b#Click here for an exponential wave.lb302SynthView00000g0000000Click here for white-noise.lb302SynthViewf Distortion lb303SynthpStk-0000000L[Qh0g0j0D00F0g0Y00Stk-000000L0Y0y0f0000000U00f00S0h0x0W0f0O0`0U0DaYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrument000(&H)&HelpnineButtonSelectorf DistortionorganicInstrument0000VolumeorganicInstrument4000000_0D0j00000n0_00nNRv0000000*Additive Synthesizer for organ-like sounds pluginBrowser0000000S0j000000000000000"Customizable wavetable synthesizer pluginBrowserfi}Vh0000000000~0_0o000 00000000000~0_0o[XW(0Y0i}Vh00000k00000g0M0~0Y0nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowser2GameBoy (TM) APU0n00000000Emulation of GameBoy (TM) APU pluginBrowser|MOS6581 and MOS8580 SID0n000000000 0S0n0000o00000640000000gcu(0U00f0D0_0ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserFFL Studio 0n0000000LMMS0k000000Y0000001Filter for importing FL Studio projects into LMMS pluginBrowser8MIDI00000LMMS0k000000Y00_00n0000)Filter for importing MIDI-files into LMMS pluginBrowserGUSNc0000ni}VhGUS-compatible patch instrument pluginBrowser0tb3030nN [Qh0j00000000000000%Incomplete monophonic imitation tb303 pluginBrowser i}Vh0000Instrument browser pluginBrowseri}Vh00000Instrument plugins pluginBrowser60000000U00f0 LADSPA 000000n000List installed LADSPA plugins pluginBrowser$0000000000000n00000Player for SoundFont files pluginBrowser400000n0000g0d0~000000000Y000000-Plugin for controlling knobs with sound peaks pluginBrowser80000QeR00000n00000000_70Y000000=Plugin for enhancing stereo separation of a stereo input file pluginBrowser$0000QR0u10k0D0X000000,Plugin for freely manipulating stereo output pluginBrowser"0i00i00_0_0Oi}v0j00`0Y00nTuneful things to bang on pluginBrowser< VST(i)000000LMMS0g0d0K0F0_00nVST000-VST-host for using VST(i)-plugins within LMMS pluginBrowser(00000000000000000000Vibrating string modeler pluginBrowser0j0Wno description pluginBrowser + N-0000000 #Mute/unmute ( + middle click)trackContentObjectView0000PastetrackContentObjectView20000Y00k0o<Ctl> 000000W0f0O0`0U0D0%Press and drag to make a copy.trackContentObjectView.0000d0k0o<Ctrl>0b0W0f0O0`0U0D0Press for free resizing.trackContentObjectView0S0n00000n00000Actions for this tracktrackOperationsWidget00000Clone this tracktrackOperationsWidget0000MutetrackOperationsWidget0S0n000000000Mute this tracktrackOperationsWidgetdyR000000000N-0k <Ctl >0b0[0p0e0W0D00000000000000Y0000~0Y0KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget00000mSRemove this tracktrackOperationsWidget00SolotrackOperationsWidgetVST-000000n000Y1eWFailed loading VST-pluginvestigeInstrument000000000N-Loading pluginvestigeInstrument.VST-0000000000Y00J_0a0O0`0U0D'Please wait while loading VST-plugin...vestigeInstrumentVST-plugin %100L0D0O0d0K0ntu10g0000g0M0~0[00g0W0_0 00W0]0nVST0LLinux0n0{0K0nVST-0000000gR0O0j0 LMMS 0nvz0k#}a0W0f0O0`0U0D0The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrument000(&H)&Help vibedView&00000Y00h0l_b0ng R/q!R0nRc&Click here to enable/disable waveform. vibedView 00000Y00hl_b0000000!Click here to normalize waveform. vibedView00000Y00hl_b00000SClick here to smooth waveform. vibedViewImp 00000o00000nl_b0L000000k00c0f000000kN0H000000000h0W0fbq0000K000000nRgraK0h0W0fbq0000K00M00~0Y0The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewtP 0d0~00g000000L000000U00OMn00000W0~0Y0P$0L\0U0D0{0i00000k0D0h0S00L000000U00~0Y0The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewPU0d0~00gxb0W0_000000n0i0nOMn0gc/R000000Y00K00000W0~0Y00\0U0DP$0{0i00000h0000000nOMn0L0a0K0D0S0h0k0j00~0Y0The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewS 0d0~00gxb0W0_000000n00000X0U 00000W0~0Y00000000n000000o000000L0i00`0Qw0O0j00O0K0k_q0W0~0Y0P$00a0D0U0O0Y00h000000ow0O00M0~0Y0The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedView8V 0d0~00gxb0W0_000000n000000000W0~0Y04The 'V' knob sets the volume of the selected string. vibedViewDetune 0d0~00oxb0W0_000000n0000Y f0W0~0Y00000\0U0DP$0-[0Y00h00000k0j00~0Y00000Y'0M0DP$0c[0Y00h00000k0j00~0Y0The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewLength 0d0~00gxb0U00_000000nw0U00000W0~0Y000w0D000000o000w0D0c0f000f00O^0S0H00g0W00F00W0K0W000CPU000000D0~0Y0The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedView0000000000o000000g0000n0i0nP 0L00K00x0y0~0Y0'-2'0oW0n0W0_000000~0g00S0h0aTs0W0~0Y0'F'0o000000LW0g00S0h0aTs0W0~0Y0'6'0o000000LWg,0K0000000n0g0j00S0h0aTs0W0~0Y0#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewFPan 0d0~00o0000X4N-0nxb0W0_000000nOMn0c[0W0~0Y0PThe Pan knob determines the location of the selected string in the stereo field. vibedViewSlap0d0~00oxb0U00_000000k\0W0`0Q0000R0H0~0Y00000g0k00c0h0fx0j_q0L0B00~0Y0000000\^0}0D0k0Y00n0k0d0K0H0~0Y0The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedView0000000000o00000000L}0W0f0D0000000x0v0n0k0d0K0D0~0Y0Vibed i}Vh0o 9g,0~0g0nrz0W0_c/R0W0f0000000T+00g0D0~0Y0l_b00000nSN 0Y00nLED0o0i0n000000L000000K0y:0W0f0D0~0Y0The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewThe waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. l_b00000o0000000nc/RՕY[W0kO000RgraK0~0_0o000000n0000000kO0D0~0Y00000nSPt0n0000gl_b00xb0W0_0000kRgS0W0~0Y0'?' 0|0_00g00000K0l_b00000W0~0Y--gR0n128P 0n00000`0Q0L0000U00~0Y0 l_b00000nN-0k0K0Q0~0Y 'S'0000gl_b0^snS0W0~0Y0 'N' 0000gl_b00000000W0~0Y0The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedView"0n0S0N0l0sW(0n000000gOu(&Use a saw-wave for current oscillator. vibedView 000l0sW(0n000000gOu('Use a sine-wave for current oscillator. vibedViewe_bl0sW(0n000000gOu()Use a square-wave for current oscillator. vibedViewN l0sW(0n000000gOu(+Use a triangle-wave for current oscillator. vibedView(0000[l_b0sW(0n000000gOu(3Use a user-defined waveform for current oscillator. vibedView&00000000sW(0n000000gOu('Use white-noise for current oscillator. vibedViewbVibed 0oP 0~0g0nrz0W0fc/R0W0f0D0000000000S0W0~0Y00'String'00000gsW(000000W0f0D0000000x0y0~0Y0'Imp' 00000g00000L0000000B000W0f00n0L000000nRgraK0h0W0f0D00n0Kx0v0S0h0L0g0M0~0Y0'Octavve' 00000g0i0nP 0g000000Lc/R0Y00n0K0Lx0y0~0Y0 0000gRgraK0~0_0o000000R0K0Y0h0M0k0d0K0F000000000000g0M0~0Y0 V 0d0~00g0000000000000'S'0d0~00g00000X0U 00000000 P'0d0~00g_0OOMn0 PU'0d0~00g20000000nOMn 'Pan' 0h0'Detune' 0nf0o0D00j0D0g0W00F00'Slap'0n0d0~00o0000000n0k0000Y\R0H0~0Y0 'length' 0d0~00o000000nw0U00000000W0~0Y l_b00000nSN 0Y00nLED0osW(0ni}Vh0g0i0n000000L000000j0n0Kh0W0f0D0~0Y0hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedView600000Y00h00000000000nh/y:^hy:0Rc6click to enable/disable visualization of master-outputvisualizationWidgetlmms-1.1.3/data/locale/ja.ts000066400000000000000000012042361247673406200156210ustar00rootroot00000000000000 AboutDialog About LMMS LMMS について Version %1 (%2/%3, Qt %4, %5) About LMMS について LMMS - easy music production for everyone Authors 製作者 Translation 翻訳 Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! 現在、この言語では翻訳されていません(もしくは英語のままです)。 もし、あなたがLMMSを他の言語に翻訳することや既に存在する翻訳を改善することに興味があるならば、ぜひとも私たちを助けてください! ただ Maintainer にコンタクトを取るだけです! License ライセンス Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL Volume: 音量: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume 音量 Panning Left gain Right gain AudioAlsa::setupWidget DEVICE デバイス CHANNELS チャンネル AudioFileProcessorView Open other sample 他のサンプルを開く Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. ここをクリックすると、他のオーディオファイルを開きます。ファイルを選択することができるダイアログが表示されます。ループモード・開始点と終了点・増幅率などの設定はリセットされませんが、オリジナルのサンプルとは異なる音になるかもしれません。 Reverse sample サンプルを逆回転 If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. このボタンを有効にすると、すべてのサンプルが逆回転されます。例えばリバースドクラッシュといったクールなエフェクトで役立ちます。 Amplify: 増幅: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) このつまみでは増幅率を設定することができます。この値を100%にするとサンプルは変化しません。そうでないときは増幅率が上下します(実際のサンプルファイルは変更されません!) Startpoint: 開始点: Endpoint: 終了点: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME CHANNELS AudioOss::setupWidget DEVICE CHANNELS AudioPortAudio::setupWidget BACKEND DEVICE AudioPulseAudio::setupWidget DEVICE CHANNELS AudioSdl::setupWidget DEVICE AutomatableModel &Reset (%1%2) リセット(&R) (%1%2) &Copy value (%1%2) 値をコピー(&C) (%1%2) &Paste value (%1%2) 値を貼り付け(&P) (%1%2) Edit song-global automation 曲全体のオートメーションを編集 Connected to %1 %1 に接続済 Connected to controller コントローラーに接続済 Edit connection... 接続を編集... Remove connection 接続を削除 Connect to controller... コントローラーに接続... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) 現在のパターンの再生/一時停止 (Space) Stop playing of current pattern (Space) 現在のパターンの演奏停止 (Space) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. クリックすると現在のパターンを演奏します。パターン編集中の演奏に便利です。終了位置にくるとパターンは自動的にループされます。 Click here if you want to stop playing of the current pattern. クリックすると現在のパターンの演奏を停止します。 Draw mode (Shift+D) ドローモード (shift+D) Erase mode (Shift+E) 消去モード (shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. クリックするとドローモードをONにします。ドローモードではひとつの値を追加したり移動したりします。このモードがデフォルトで普段つかいます。 'Shift+D' をおしてもドローモードをONにできます。 Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. クリックすると消去モードをONにします。消去モードではひとつの値を消去できます。 'Shift+E' をおしても消去モードをONにできます。 Cut selected values (Ctrl+X) 選択した値を切り取り (Shift+M) Copy selected values (Ctrl+C) 選択した値をコピー (Ctrl+C) Paste values from clipboard (Ctrl+V) クリップボードから値を貼り付け (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. クリックすると選択した値をクリップボードにカットします。その値はペーストボタンを押すと任意のパタンの任意の場所にペーストできます。 Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. クリックすると選択した値をクリップボードにコピーします。その値はペーストボタンを押すと任意のパタンの任意の場所にペーストできます。 Click here and the values from the clipboard will be pasted at the first visible measure. クリックするとクリップボードから値が最初の可視状態の小節にペーストされます。 Automation Editor - no pattern Automation Editor - %1 Please open an automation pattern with the context menu of a control! コントロールのコンテキストメニューでオートメーションパターンを選択してください! Values copied 値をコピーしました All selected values were copied to the clipboard. 選択された値はすべてクリップボードにコピーされました。 Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> <Ctrl>を押しながらコントロールをドラッグしてください Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor ダブルクリックすると、このパターンをAutomation Editorで開きます Open in Automation editor Automation Editor で開く Clear クリア Reset name 名前をリセット Change name 名前を変更 %1 Connections %1 個の接続 Disconnect "%1" "%1" を切断 Set/clear record 録音をセット/クリア AutomationTrack Automation track Automation track BassBoosterControlDialog FREQ Frequency: 周波数: GAIN Gain: ゲイン: RATIO Ratio: 比率: BassBoosterControls Frequency 周波数 Gain ゲイン Ratio 比率 CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Controller %1 ControllerConnectionDialog Connection Settings 接続設定 MIDI CONTROLLER MIDI コントローラー Input channel 入力チャンネル CHANNEL チャンネル Input controller 入力コントローラー CONTROLLER コントローラー Auto Detect 自動検出 MIDI-devices to receive MIDI-events from USER CONTROLLER ユーザー コントローラー MAPPING FUNCTION マッピング関数 OK OK Cancel キャンセル LMMS LMMS Cycle Detected. サイクルが検出されました。 ControllerRackView Controller Rack Add 追加 Confirm Delete 削除の確認 Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls コントロール Controllers are able to automate the value of a knob, slider, and other controls. コントローラーでは、つまみやスライダー、その他のコントロールの値を自動化することができます。 Rename controller コントローラー名の変更 Enter the new name for this controller コントローラーの新しい名前を入力してください &Remove this plugin このプラグインを削除(&R) &Help ヘルプ(&H) DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled エフェクト有効 Wet/Dry mix Gate ゲート Decay ディケイ EffectChain Effects enabled エフェクト有効 EffectRackView EFFECTS CHAIN エフェクトチェイン Add effect エフェクトを追加 EffectSelectDialog Add effect エフェクトを追加 Plugin description プラグインの説明 EffectView Toggles the effect on or off. エフェクトの有効/無効を切り替えます。 On/Off W/D Wet Level: Wet レベル: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. Wet/Dry つまみでは、出力中の入力シグナルとエフェクトシグナルの割合を設定します。 DECAY Time: 時間: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. ディケイつまみでは、プラグインがプロセスを終了する前にいくつの無音バッファが渡されなければならないかをコントロールします。値を小さくするほどCPUのオーバヘッドは減少しますが、ディレイとリバーブエフェクトの末尾がクリッピングする危険があります。 GATE Gate: ゲート: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. ゲートつまみではシグナルレベルをコントロールします。このシグナルレベルとはシグナル処理をいつ終了するか決定する際に無音と判断されるレベルです。 Controls コントロール Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. エフェクトプラグイン関数とは連鎖するエフェクト系列です。シグナルは上から下に処理されます。 On/Off スイッチでいつでも指定したプラグインをバイパスすることができます。 Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエフェクトシグナルのバランスをコントロールします。ステージの入力とは一つ前のステージからの出力です。そのため連鎖の下の方のエフェクトの 'dry'シグナルはそれまでのエフェクトをすべて含んでいます。 ディケイつまみでは、ノートのリリース後に処理されるシグナルの長さをコントロールします。与えられた時間内に与えられた閾値以下に音量が落ちたときにエフェクトは処理を停止します。このつまみで”与えられた時間”を設定します。この時間を長くするほどCPUを必要とするので、多くのエフェクトでは小さい値を指定するべきでしょう。ディレイのような長時間の沈黙が発生するエフェクトの場合は値を増やす必要があります。 ゲートつまみでは、エフェクトの自動停止ために”与えられる閾値”をコントロールします。このつまみで指定したレベル以下にシグナルレベルが落ちるとすぐに”与えられた時間長”が開始します。 コントロールボタンはエフェクトのパラメータの編集ダイアログを開きます。 右クリックするとコンテキストメニューが開きます。メニューではエフェクトが実行される順番を変更したり、エフェクトを完全に消去することができます。 Move &up 一つ上へ(&u) Move &down 一つ下へ(&d) &Remove this plugin このプラグインを削除(&R) &Help ヘルプ(&H) EnvelopeAndLfoParameters Predelay プレディレイ Attack アタック Hold ホールド Decay ディケイ Sustain サスティン Release リリース Modulation モジュレーション LFO Predelay LFO プレディレイ LFO Attack LFO アタック LFO speed LFO の速度 LFO Modulation LFO のモジュレーション LFO Wave Shape LFO の波形 Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: プレディレイ: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. このつまみで現在のエンベロープのプレディレイを指定します。この値を大きくするほど実際のエンベロープの開始前の時間が長くなります。 ATT Attack: アタック: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. このつまみで現在のエンベロープのアタック時間を指定します。この値を大きくするほどエンベロープのアタックレベルを増やすのに長い時間が必要になります。ピアノのようなインストゥルメントには小さい値を、ストリングスには大きい値を選択してください。 HOLD Hold: ホールド: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. このつまみで現在のエンベロープのホールド時間を指定します。この値を大きくするほどエンベロープがサスティンレベルへの減衰の開始前にアタックレベルを保持する時間が長くなります。 DEC Decay: ディケイ: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. このつまみで現在のエンベロープのディケイ時間を指定します。この値を大きくするほどエンベロープがアタックレベルからサスティンレベルに減衰するのに必要な時間が長くなります。ピアノのようなインストゥルメントには小さい値を選択してください。 SUST Sustain: サスティン: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. このつまみで現在のエンベロープのサスティンレベルを指定します。この値を大きくするほどエンベロープがゼロになる前に留まるレベルが高くなります。 REL Release: リリース: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. このつまみで現在のエンベロープのリリース時間を指定します。この値を大きくするほどサスティンレベルからゼロに減少するのに必要な時間が長くなります。ストリングスのようなインストゥルメントでは大きい値を指定してください。 AMT Modulation amount: モジュレーション量: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. このつまみで現在のエンベロープのモジュレーション量を指定します。この値を大きくするほど対応する値(音量やカットオフ周波数など)はエンベロープの影響を受けます。 LFO predelay: LFO プレディレイ: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. このつまみで現在のLFOのプレディレイ時間を指定します。この値を大きくするほどLFOがオシレートを開始するまでの時間が長くなります。 LFO- attack: LFO アタック: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. このつまみで現在のLFOのアタック時間を指定します。この値を大きくするほどLFOの振幅が最大になるまでにかかる時間が長くなります。 SPD LFO speed: LFO の速度: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. このつまみで現在のLFOの速度を指定します。この値を大きくするほどLFOのオシレートが速くなり、エフェクトも速くなります。 Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. このつまみで現在のLFOのモジュレーション量を指定します。この値を大きくするほど選んだ値(音量やカットオフ周波数等)はLFOの影響を受けます。 Click here for a sine-wave. ここをクリックするとサイン波形にします。 Click here for a triangle-wave. ここをクリックすると三角波形にします。 Click here for a saw-wave for current. ここをクリックするとのこぎり波形にします。 Click here for a square-wave. ここをクリックすると方形波形にします。 Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. ここをクリックするとユーザー定義波形にします。その後、対応するサンプルファイルをLFOグラフの上にドラッグしてください。 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. ここをクリックするとLFO周波数を100倍にします。 multiply LFO-frequency by 100 LFO周波数を100倍にする MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. ここをクリックするとエンベロープ量をこのLFOでコントロールします。 control envelope-amount by this LFO ms/LFO: Hint ヒント Drag a sample from somewhere and drop it in this window. 任意の場所からサンプルをドラッグし、このウィンドウ内にドロップしてください。 Click here for random wave. ExportProjectDialog Export project プロジェクトのエクスポート Output 出力 File format: ファイル フォーマット: Samplerate: サンプルレート: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: ビットレート: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 深度: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings 品質設定 Interpolation: 補間: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): オーバーサンプリング(慎重に扱ってください!): 1x (None) 2x 4x 8x Start 開始 Cancel キャンセル Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help ヘルプ(&H) FxMixer Master マスター FX %1 FxMixerView Rename FX channel FXチャンネル名を変更 Enter the new name for this FX channel このFXチャンネルの新しい名前を入力してください FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute ミュート Mute this FX channel このFXチャンネルをミュート FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio アルペジオ Arpeggio type アルペジオタイプ Arpeggio range アルペジオ速度 Arpeggio time アルペジオ時間 Arpeggio gate アルペジオゲート Arpeggio direction アルペジオ方向 Arpeggio mode アルペジオモード Up Down Up and down Random Free Sort Sync Down and up InstrumentFunctionArpeggioView ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. アルペジオは、(爪弾くタイプの楽器で)使われる演奏法です。アルベジオを使うと生き生きとした音楽になります。(ハープのような)楽器の弦は和音のように爪弾かれます。すべての音階を同時にならす和音とは違って、アルペジオでは弦を順々に鳴らします。代表的なアルペジオは長調か短調の3音です。もちろん、たくさんあるその他の可能な和音を選ぶこともできます。 RANGE Arpeggio range: octave(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. このつまみでオクターブ単位でアルペジオ範囲を選択します。選択されたアルペジオは指定したオクターブ数の範囲内で演奏されます。 TIME Arpeggio time: ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. このつまみでミリ秒単位でアルペジオ時間をセットします。アルペジオ時間には各々のアルペジオの音の長さを指定します。 GATE Arpeggio gate: % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. このつまみでアルペジオゲートを指定します。アルペジオゲートはアルペジオトーン全体の何パーセントを演奏するかです。これを使えばかっこいいスタッカートアルペジオを作れます。 Chord: Direction: Mode: InstrumentFunctionNoteStacking octave Major Majb5 minor minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Melodic minor Whole tone Diminished Major pentatonic Minor pentatonic Jap in sen Major bebop Dominant bebop Blues Arabic Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Chord type Chord range Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE Chord range: octave(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. このつまみでコード範囲をオクターブで設定できます。指定したオクターブの範囲内で選択したコードが演奏されます。 STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT MIDIインプット有効化 CHANNEL チャンネル VELOCITY ベロシティ ENABLE MIDI OUTPUT MIDIアウトプット有効 PROGRAM プログラム MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME ボリウム Volume ボリウム CUTOFF Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Q/Resonance LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! これらのタブにはエンペロープが含まれてます。エンベロープは音を変更するの大変重要です。エンベロープはサブストラクティブな合成をするときはほとんどいつも必要です。たとえばボリウムエンベロープの場合、音が決まった音量になる時間をセットできます。ソフトストリングを作りたいならフェードインフェードアウトを非常にソフトにする必要があります。それはアタックタイムとリリースタイムを長くすることで実現できます。パンニング、フィルターのカットオフ周波数といったほかのエンベロープを制御できるものについても事情はいっしょです。これでちょっと遊んでみてください! のこぎり歯にいくつかのエンベロープを使うだけで実にクールなサウンドを作ることこできます。 FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. ここで、このインスツルメントトラックでつかいたいビルトインフィルターを選びます。音の特性をかえるのにフィルターはとても重要です。 Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... このノブで選択したフィルターのカットオフ周波数をセットします。カットオフ周波数はフィルターがシグナルをカットする周波数をきめます。たとえばローパスフィルターはカットオフ周波数以上のすべての周波数をカットします。ハイパスフィルターはカットオフ周波数以下のすべての周波数をカットします。たのフィルターでも同様です。 RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. このつまみで、選択したフィルターの Q/レゾナンスをセットします。 Q/レゾナンスにはカットオフ周波数付近でどれくらい周波数を増幅させるかを指定します。 FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume ボリウム Panning Pitch FX channel Default preset With this knob you can set the volume of the opened channel. このつまみで 開いたチャンネルの音量をセットします。 Base note ベース ノート Pitch range InstrumentTrackView Volume ボリウム Volume: VOL Panning Panning: PAN MIDI Input Output InstrumentTrackWindow GENERAL SETTINGS Instrument volume Volume: VOL Panning Panning: PAN Pitch Pitch: cents PITCH FX channel ENV/LFO FUNC FX MIDI Save preset XML preset file (*.xpf) PLUGIN Pitch range (semitones) RANGE Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels LadspaControlDialog Link Channels Channel LadspaControlView Link channels Value: Sorry, no help available. LadspaEffect Effect Unknown LADSPA plugin %1 requested. 不明なLADSPA プラグイン %1 LcdSpinBox Please enter a new value between %1 and %2: %1 と %2 の間の新しい値を入力してください: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD LFO-speed: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. このつまみでLFOのスピードをセットします。この値を大きくするとLFOのオシレートが早くなってエフェクトが早くなります。 AMT Modulation amount: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. このつまみで LFOのモジュレーション量をセットします。 この値を大きくすると 接続されたコントロール(ボリウムやカットオフ周波数等)がよりいっそうLFOに影響されるようになります。 PHS Phase offset: degrees With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. このつまみで LFO のフェイズオフセットをセットします。フェイズオフセットはオシレータがオシレートを始める場所動かすことができます。たとえばサイン波でフェイズオフセットが180度なら波は減少からはじめまります。方形波でも同じことです。 Click here for a sine-wave. クリックでサイン波 Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. クリックで moog のこぎり波 Click here for an exponential wave. クリックで指数波形 Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory 作業ディレクトリ The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. LMMSの作業ディレクトリ %1 は存在しません。 今作成しますか? 編集->セッティング でこのディレクトリを変更できます Could not save config-file 設定ファイルをセーブできません Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. 設定ファイル %1 をセーブできません。 多分 ファイルへの書き込み許可がありません。 このファイルの書き込み許可ががあることを確認して再度書き込んでください。 &Project プロジェクト(&P) &New 新規(&N) &Open... 開く(&O) Recently opened projects 最近開いたプロジェクト &Save セーブ(&S) Save &As... 別名セーブ(&A) Import... インポート E&xport... エクスポート(&x) &Quit 終了(&Q) &Edit 編集(&E) Settings セッティング &Tools ツール(&T) &Help ヘルプ(&H) Online help オンラインヘルプ Help ヘルプ What's this? これは何? About Create new project 新規プロジェクト作成 Create new project from template テンプレートから新規プロジェクト作成 Open existing project 既存プロジェクトを開く Recently opened project 最近開いたプロジェクト Save current project 現在のプロジェクトをセーブ Export current project 現在のプロジェクトをエクスポート Show/hide Song-Editor ソングエディタ 表示/非表示 By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. このボタンを押すと。ソングエディタ表示/非表示にできます。ソングエディタの利用によってプレイリストの編集とどのトラックをいつ演奏するかを編集できます。プレイリストの中で直接サンプルを挿入したり移動(rap samples)したりすることもできます。 Show/hide Beat+Bassline Editor ビート+ ベースラインエディタ 表示/非表示 By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. このボタンで、ビート+ベースラインエディタの表示/非表示を切り替えます。ビート+ベースラインエディタで、ビートをつくったり、チャンネルを開いたり足したり除去したり、ベースラインパターンをカット・コピー・ペーストしたり、いろいろできます。 Show/hide Piano-Roll ピアノロール 表示/非表示 Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. ここをクリックして ピアノロールの表示/非表示を切り替えます。 ピアノロールを使うとメロディを簡単に編集できます。 Show/hide Automation Editor オートメーションエディタ 表示/非表示 Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. ここをクリックして オートメーションエディタの表示/非表示を切り替えます。オートメーションエディタでダイナミックな値を簡単に編集できます。 Show/hide FX Mixer エフェクトミキサー 表示/非表示 Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. ここをクリックして エフェクトミキサーの表示/非表示を切り替えます。エフェクトミキサーは曲のエフェクトを管理するパワフルなツールです。エフェクトを異なったエフェクトチャンネルに挿入することができます。 Show/hide project notes プロジェクトノート 表示/非表示 Click here to show or hide the project notes window. In this window you can put down your project notes. ここをクリックして ノートウインドウの表示非表示を切り替えます。ノートウインドウにプロジェクトノートを記入します。 Show/hide controller rack コントローラトラック 表示/非表示 Untitled LMMS %1 Project not saved プロジェクトは未セーブです The current project was modified since last saving. Do you want to save it now? 現在のプロジェクトは最後セーブしてから変更されています。今セーブしますか? Open project プロジェクトを開く Save project プロジェクトを保存 Help not available ヘルプはありません Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. 今のところ LMMSの中にヘルプはありません。 http://lmms.sf.net/wiki に LMMSのドキュメントがあります。 My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE デバイス MidiAlsaSeq::setupWidget DEVICE デバイス MidiController MIDI Controller unnamed_midi_controller 名称未設定_MIDI_コントローラー MidiImport Setup incomplete セットアップの未完了 You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. 設定ダイアログ (編集->設定)でデフォルトのサウンドフォントを設定していません。そのため、MIDIファイルをインポート後に音声が再生されません。一般的なMIDI サウンドフォントダウンロードして設定ダイアログにて設定を行い、その後で再試行してください。 You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE MidiPort Input channel 入力チャンネル Output channel 出力チャンネル Input controller 入力コントローラー Output controller 出力コントローラー Fixed input velocity 固定入力ベロシティ Fixed output velocity 固定出力ベロシティ Output MIDI program 出力 MIDI プログラム Receive MIDI-events MIDI イベントを受信 Send MIDI-events MIDI イベントを送信 Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume マスターボリウム Vibrato OscillatorObject Osc %1 volume Osc %1 panning Osc %1 coarse detuning Osc %1 fine detuning left Osc %1 fine detuning right Osc %1 phase-offset Osc %1 stereo phase-detuning Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch ほかのパッチを開く Click here to open another patch-file. Loop and Tune settings are not reset. ここをクリックして ほかのパッチファイルを開きます。ループとチューンの設定はリセットされません。 Loop ループ Loop mode ループモード Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. ここでループモードをON/OFfします。ループモードONなら、PatManはファイル中にあるループ情報をを使います。 Tune チューン Tune mode チューンモード Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. ここでチューンモードをON/OFFします。チューンモードONなら、PatMan はノートの周波数にあうようにサンプルをチューンします。 No file selected ファイルが選択されてません Open patch file パッチファイルを開く Patch-Files (*.pat) パッチファイル (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step ダプルクリックでこのパターンをピアノロールに開きます。 マウスホイールでステップの音量をセットします。 Open in piano-roll ピアノロールを開く Clear all notes すべてのノートをクリア Reset name 名前をリセット Change name 名前変更 Add steps ステップ追加 Remove steps ステップ除去 PeakController Peak Controller ピーク コントローラ Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: Attack: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) 現在のパターンの再生/一時停止 (Space) Stop playing of current pattern (Space) 現在のパターンの再生を停止 (Space) Cut selected notes (Ctrl+X) 選択したノートの切り取り (Ctrl+X) Copy selected notes (Ctrl+C) 選択したノートのコピー (Ctrl+C) Paste notes from clipboard (Ctrl+V) クリップボードからノートを貼り付け (Ctrl+V) Piano-Roll - no pattern Piano-Roll - %1 Please open a pattern by double-clicking on it! パターン上でダブルクリックして、パターンを開いてください! Record notes from MIDI-device/channel-piano MIDI-デバイス/チャンネル-ピアノからノートを録音 Record notes from MIDI-device/channel-piano while playing song or BB track 曲やBBトラックを再生中に MIDI-デバイス/チャンネル-ピアノからノートを録音 Draw mode (Shift+D) ドローモード (shift+D) Erase mode (Shift+E) 消去モード (shift+E) Select mode (Shift+S) 選択モード (Shift+S) Last note 最後に使用したノート Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. ここをクリックすると現在のパターンを再生します。これはパターン編集する際に便利です。パターンの最後で自動的にループします。 Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. ここをクリックすると、MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノからノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。書き込まれたノートは後から再生/編集できます。 Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. ここをクリックすると MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノから、ノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。曲またはBBトラックがバックグラウンドで演奏されます。 Click here to stop playback of current pattern. ここをクリックすると現在のパターンの録音再生を停止します。 Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. ここをクリックすると選択しているノートをクリップボードへ切り取ります。貼り付けボタンを押すと任意のパターンの任意の場所に切り取ったノートを貼り付けることができます。 Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. ここをクリックすると選択しているノートをクリップボードへコピーします。貼り付けボタンを押すと任意のパターンの任意の場所にコピーしたノートを貼り付けることができます。 Click here and the notes from the clipboard will be pasted at the first visible measure. ここをクリックするとクリップボード内のノートが最初に表示されている小節に貼り付けられます。 Note lock ノートをロック Note Volume ノートの音量 Note Panning ノートのパンニング Detune mode (Shift+T) ディチューン モード (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. ここをクリックするとドローモードになります。ドローモードでは個々のノートを追加・リサイズ・移動することができます。普段このモードをデフォルトで使用します。'Shift+D' を押してもこのモードになります。このモードではCtrlを長押しすることで一時的に選択モードにすることができます。 Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. ここをクリックすると消去モードになります。消去モードでは個々のノートを消去することができます。'Shift+E' を押してもこのモードにすることができます。 Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. ここをクリックすると選択モードになります。選択モードでは個々のノートを選択することができます。また、ドローモード中にCtrlを長押しすることで一時的に選択モードを使用することができます。 Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: %1 と %2 の間の新しい値を入力してください: PianoView Base note ベース ノート Plugin Plugin not found プラグインが見つかりません The plugin "%1" wasn't found or could not be loaded! Reason: "%2" プラグイン "%1" は見つからないかロードできません。 原因は "%2"です。 Error while loading plugin プラグインロード中のエラー Failed to load plugin "%1"! プラグイン "%1" のロードに失敗! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) WAV-ファイル (*.wav) Compressed OGG-File (*.ogg) 圧縮 OGG-ファイル (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: 名前 Maker: 製造元 Copyright: コピーライト Requires Real Time: リアルタイムが必要: Yes はい No いいえ Real Time Capable: リアルタイム可能: In Place Broken: Channels In: 入力チャンネル Channels Out: 出力チャンネル File: ファイル: File: %1 ファイル: %1 SampleBuffer Open audio file オーディオファイルを開く Wave-Files (*.wav) WAV ファイル (*.wav) OGG-Files (*.ogg) OGG ファイル (*.ogg) DrumSynth-Files (*.ds) DrumSynth ファイル (*.ds) FLAC-Files (*.flac) FLAC ファイル (*.flac) SPEEX-Files (*.spx) SPEEX ファイル (*.spx) VOC-Files (*.voc) VOC ファイル (*.voc) AIFF-Files (*.aif *.aiff) AIFF ファイル (*.aif *.aiff) AU-Files (*.au) AU ファイル (*.au) RAW-Files (*.raw) RAW ファイル (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) すべてのオーディオファイル (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3) SampleTCOView double-click to select sample ダブルクリックでサンプル選択 Delete (middle mousebutton) 削除 (マウス中ボタン) Cut 切り取り Copy コピー Paste 貼り付け Mute/unmute (<Ctrl> + middle click) ミュート/ミュート解除(<Ctrl> + 中ボタンクリック) Set/clear record 録音をセット/クリア SampleTrack Sample track Sample track Volume 音量 SampleTrackView Track volume トラック音量 Channel volume: チャンネル音量: VOL SongEditor Song-Editor Play song (Space) 曲を再生 (Space) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. ここをクリックすると曲全体を再生します。ソングポジションマーカー(緑色)の位置から再生開始します。再生中にマーカーを移動させることもできます。 Stop song (Space) 曲を停止 (Space) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. ここをクリックすると曲の再生を停止します。再生後、ソングポジションマーカーは曲の最初にセットされます。 Add beat/bassline Beat/Bassline を追加 Add sample-track Sample-Track を追加 Could not open file ファイルを開くことができませんでした Could not write file ファイルに書き込むことができませんでした Add automation-track Automation-Track を追加 Draw mode ドローモード Edit mode (select and move) 編集モード (選択と移動) Record samples from Audio-device オーディオデバイスからサンプルを録音 Record samples from Audio-device while playing song or BB track 曲またはBBトラックを再生中にオーディオデバイスからサンプルを録音 Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. ファイル %1 を開くことができませんでした。おそらくこのファイルの読み込み権限がありません。 ファイルが読み込み可能か確認してから再度読み込んでください。 Error in file ファイルの内部エラー The file %1 seems to contain errors and therefore can't be loaded. ファイル %1 は内部エラーを含んでいるか、読み込むことができません。 Tempo テンポ TEMPO/BPM テンポ/BPM tempo of song 曲のテンポ The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). 曲のテンポは分毎のビート数(BPM)で指定します。曲のテンポを変更する場合はこの値を変更してください。各小節は4つのビートをもちますから、BPMであらわされるテンポは 一分間に いくつの小節(テンポ/4) が演奏される(あるいは4分間にいくつの小節が演奏されるか)かをきめます。 High quality mode ハイクオリティモード Master volume マスター音量 master volume マスター音量 Master pitch マスターピッチ master pitch マスター ピッチ Value: %1% 音量: %1% Value: %1 semitones 音量: %1 半音 Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Linear Y axis SpectrumAnalyzerControls Linear spectrum Linear Y axis Channel mode TempoSyncKnob Tempo Sync テンポの同期 No Sync 非同期 Eight beats 8ビート Whole note 全音符 Half note 二分音符 Quarter note 四分音符 8th note 八分音符 16th note 十六分音符 32nd note 三十二分音符 Custom... カスタム... &Help ヘルプ(&H) Custom カスタム Synced to Eight Beats 8ビートに同期 Synced to Whole Note 全音符に同期 Synced to Half Note 二分音符に同期 Synced to Quarter Note 四分音符に同期 Synced to 8th Note 八分音符に同期 Synced to 16th Note 十六分音符に同期 Synced to 32nd Note 三十二分音符に同期 TimeDisplayWidget click to change time units TrackContainer Couldn't import file ファイルをインポートすることができませんでした Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. インポート中のファイル %1のフィルターが見つかりませんでした。 他のソフトウェアで、このファイルをLMMSがサポートしてるフォーマットに変換してください。 Couldn't open file ファイルを開くことができませんでした Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! ファイル %1 を読み込み用に開くことができませんでした。 ファイルとファイルのディレクトリが読み込み可能かチェックしてから再度読み込んでください! Loading project... プロジェクトをロードしています... Cancel キャンセル Please wait... お待ちください... Importing MIDI-file... MIDI-ファイルをインポートしています... Importing FLP-file... FLP-ファイルをインポートしています... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Osc %1 panning: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Osc %1 coarse detuning: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Osc %1 fine detuning left: cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 fine detuning right: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 phase-offset: degrees With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. サイン波を現在のオシレータで使用 Use a triangle-wave for current oscillator. 三角波を現在のオシレータで使用 Use a saw-wave for current oscillator. のこぎり波を現在のオシレータで使用 Use a square-wave for current oscillator. 方形波を現在のオシレータで使用 Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. ホワイトノイズを現在のオシレータで使用 Use a user-defined waveform for current oscillator. ユーザー定義波形を現在のオシレータで使用 Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin 他の VST-プラグインを開く Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. 他の VST-プラグインを開くときはここをクリックします。クリックすると「ファイルを開く」ダイアログが表示され、ファイルを選択することができます。 Show/hide GUI GUIを表示/非表示 Click here to show or hide the graphical user interface (GUI) of your VST-plugin. ここをクリックするとVST-プラグインのグラフィカルユーザーインターフェース(GUI)の表示/非表示を切り替えます。 Turn off all notes すべてのノートをオフにします。 Open VST-plugin VST-プラグインを開く DLL-files (*.dll) DLL-ファイル (*.dll) EXE-files (*.exe) EXE-ファイル (*.exe) No VST-plugin loaded VST-pluginはロードされてません Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin プラグインをロード中 Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. グラフの上でマウスドラッグしてここに波形を描きます Load waveform 波形の読み込み Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Click to normalize Invert Click to invert Smooth Click to smooth Sine wave Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI GUI を表示 Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify 倍率 Start of sample サンプル開始 End of sample サンプル終了 Reverse sample サンプル逆回転 Stutter Loopback point Loop mode ループモード Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Beat+Bassline-Editor Play/pause current beat/bassline (Space) 現在の beat/bassline を 再生/一時停止 (Space) Add beat/bassline beat/bassline を追加 Add automation-track オートメーショントラックを追加 Stop playback of current beat/bassline (Space) beat/bassline の再生を停止 (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. クリックすると現在の beat/bassline を演奏します。 beat/bassline は終了位置にくると自動的にループされます。 Click here to stop playing of current beat/bassline. クリックすると現在の beat/bassline の演奏を停止します。 Remove steps ステップ除去 Add steps ステップ追加 bbTCOView Open in Beat+Bassline-Editor Beat+Bassline-Editor を開く Reset name 名前をリセット Change name 名前を変更 Change color 色を変更 Reset color to default bbTrack Beat/Bassline %1 beat/bassline %1 Clone of %1 bitInvader Samplelength サンプルの長さ bitInvaderView Sample Length Sine wave サイン波 Triangle wave 三角波 Saw wave のこぎり波 Square wave 矩形波 White noise wave User defined wave Smooth Click here to smooth waveform. クリックすると波形を平滑化します Interpolation Normalize Draw your own waveform here by dragging your mouse on this graph. グラフの上でマウスドラッグしてここに波形を描きます Click for a sine-wave. クリックするとサイン波 Click here for a triangle-wave. クリックすると三角波 Click here for a saw-wave. クリックするとのこぎり波 Click here for a square-wave. クリックすると矩形波 Click here for white-noise. クリックするとホワイトノイズ Click here for a user-defined shape. クリックするとユーザー波形 dynProcControlDialog INPUT Input gain: 入力ゲイン: OUTPUT Output gain: 出力ゲイン: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform 波形をリセット Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain 入力ゲイン Output gain 出力ゲイン Attack time Release time Stereo mode exportProjectDialog Could not open file ファイルをオープンできません Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! ファイル %1 を書き込み用にオープンできません。 このファイルとファイルを含むディレクトリの書き込み権限があるかを確認して再度書き込んでください。 Error エラー Error while determining file-encoder device. Please try to choose a different output format. ファイルエンコーダデバイスを決定する際のエラー。異なる出力フォーマットを選んでください。 Rendering: %1% レンダリング: %1% Export project to %1 プロジェクトを %1 にエクスポート fader Please enter a new value between %1 and %2: %1 と %2 の間の新しい値を入力してください: graphModel Graph グラフ kickerInstrument Start frequency End frequency Gain Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: End frequency: Gain: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help ヘルプ(&H) Please enter a new value between -96.0 dBV and 6.0 dBV: -96.0 dBV と 6.0 dBV の間の新しい値を入力してください: Please enter a new value between %1 and %2: %1 と %2 の間の新しい値を入力してください: ladspaBrowserView Available Effects 利用可能エフェクト Unavailable Effects 利用不可エフェクト Instruments 楽器 Analysis Tools 解析ツール Don't know 不明なツール This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. このダイアログはLMMSでつかえるすべてのLADSPAプラグインの情報を表示します。プラグインはポートタイプと名前によって5つのカテゴリにわけてあります。 表示されるエフェクトはLMMEで利用可能なものです。あるエフェクトがLMMSで利用可能であるためには、まず第一にエフェクトであることつまり入力チャンネルと出力チャンネルを持ってないといけません。LMMSは名前に 'in' が含まれるオーディオレートポートを入力チャンネルと認識します。出力ポートとして認識するのは 'out' が含まれるものです。さらにエフェクトの入力と出力の数が同じでリアルタイムの動作が可能である必要があります。 楽器プラグインは出力チャンネルしかないものです。 解析ツールは入力チャンネルしかないものです。 不明なツールは入力チャンネルも出力チャンネルもみつからなかたものです プラグインをダブルクリックするとポートの情報が表示されます。 Type: タイプ ladspaDescription Plugins Description 説明 ladspaPortDialog Ports Name Rate Direction Type Min < Default < Max Logarithmic SR Dependent Audio Control Input Output Toggled Integer Float Yes はい lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion 説明 Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Click here for a saw-wave. クリックでのこぎり波 Triangle wave Click here for a triangle-wave. クリックで三角波 Square wave Click here for a square-wave. クリックで方形波 Rounded square wave Click here for a square-wave with a rounded end. クリックで尻尾がまるまった方形波 Moog wave Click here for a moog-like wave. クリックで Moog みたいな波形 Sine wave Click for a sine-wave. クリックでサイン波 White noise wave Click here for an exponential wave. クリックで指数波形 Click here for white-noise. クリックでホワイトノイズ Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion 説明 Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Stk-インストールが完全でないようです。 Stk-パッケージがすべてインストールされてることを確認してください malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help ヘルプ(&H) opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion 説明 Volume ボリウム organicInstrumentView Distortion: Volume: Randomise Osc %1 waveform: Osc %1 volume: Osc %1 panning: cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description 説明なし Instrument plugins Instrument Plugins Incomplete monophonic imitation tb303 不完全なモノフォニック イミテーション tb303 Plugin for freely manipulating stereo output ステレオ出力を自由に操作するプラグイン Plugin for controlling knobs with sound peaks サウンドのピークをつまみでコントロールするプラグイン Plugin for enhancing stereo separation of a stereo input file ステレオ入力ファイルのセパレーションを強調するプラグイン List installed LADSPA plugins インストールされている LADSPA プラグインのリスト Filter for importing FL Studio projects into LMMS FL Studio プロジェクトを LMMS にインポートするためのフィルター GUS-compatible patch instrument GUS互換パッチのインストゥルメント Additive Synthesizer for organ-like sounds オルガン風サウンドのアディティブ シンセサイザー Tuneful things to bang on 打楽器風の音色を奏でるインストゥルメント VST-host for using VST(i)-plugins within LMMS VST(i)プラグインを LMMS で使用するためのVSTホスト Vibrating string modeler バイブレーティング ストリング モジュレーター plugin for using arbitrary LADSPA-effects inside LMMS. 任意の LADSPA エフェクトを LMMS で使うためのプラグイン Filter for importing MIDI-files into LMMS MIDI ファイルを LMMS にインポートするためのフィルター Instrument browser Instrument Browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. インストゥルメントをSong-EditorやBeat+Bassline Editorまたは存在する Instrument Trackにドラッグしてください。 Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. MOS6581やMOS8580 SIDのエミュレーション。 このチップはCommodore 64 computerで採用されていました。 Player for SoundFont files サウンドフォント ファイル用プレイヤー Emulation of GameBoy (TM) APU GameBoy (TM) APUのエミュレーション Customizable wavetable synthesizer カスタマイズ可能なウェーブテーブルシンセサイザー Embedded ZynAddSubFX 埋め込み ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways 様々な方法でモジュレートできる3つのパワフルなオシレータ群 A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes Put down your project notes here. ここにプロジェクトに関するメモを記入してください。 Edit Actions 編集機能 &Undo 元に戻す(&U) Ctrl+Z &Redo やり直し(&R) Ctrl+Y &Copy コピー(&C) Ctrl+C Cu&t 切り取り(&t) Ctrl+X &Paste 貼り付け(&P) Ctrl+V Format Actions フォーマット機能 &Bold 太字(&B) Ctrl+B &Italic 斜体(&I) Ctrl+I &Underline 下線(&U) Ctrl+U &Left 左揃え(&L) Ctrl+L C&enter 中央揃え(&e) Ctrl+E &Right 右揃え(&R) Ctrl+R &Justify 両端揃え(&J) Ctrl+J &Color... 文字の色(&C)... renameDialog Rename... 名前の変更... setupDialog Setup LMMS LMMS 設定 General settings 一般設定 BUFFER SIZE バッファ サイズ Reset to default-value デフォルト値にリセット MISC その他 Enable tooltips ツールチップを有効にする Show restart warning after changing settings 設定変更後に「再起動警告」を表示する Display volume as dBV 音量を dBV で表示する Compress project files per default プロジェクト ファイルの圧縮をデフォルトにする HQ-mode for output audio-device 出力オーディオデバイスを高品質モードにする LMMS working directory LMMS作業ディレクトリー VST-plugin directory VST-プラグイン ディレクトリー Artwork directory アートワーク ディレクトリー FL Studio installation directory FL Studio のディレクトリー STK rawwave directory STK rawwave のディレクトリー Performance settings パフォーマンス設定 UI effects vs. performance UI エフェクト vs. パフォーマンス Audio settings オーディオ設定 AUDIO INTERFACE オーディオ インターフェース MIDI settings MIDI 設定 MIDI INTERFACE MIDI インターフェース OK Cancel キャンセル Restart LMMS LMMS の再起動 Please note that most changes won't take effect until you restart LMMS! 変更した設定の大部分は、LMMSの再起動後に有効になります! Frames: %1 Latency: %2 ms フレーム: %1 レイテンシー: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. ここではLMMSで使用する内部バッファサイズを指定します。値が小さいとレイテンシーが小さくなるだけでなく、特に古いコンピュータやリアルタイムカーネルではないシステムでは酷い音やパフォーマンスの低下を引き起こします。 Choose LMMS working directory LMMSの作業ディレクトリーを選択してください Choose your VST-plugin directory VSTプラグインディレクトリーを選択してください Choose artwork-theme directory アートワークテーマディレクトリーを選択してください Choose FL Studio installation directory FL Studioがインストールされているディレクトリーを選択してください Choose LADSPA plugin directory LADSPAプラグインのディレクトリーを選択してください Choose STK rawwave directory STK rawwave のディレクトリーを選択してください Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. ここでは優先するオーディオインターフェースを選択することができます。コンパイル時のシステム設定によってALSA,JACK, OSS 等を選択することができます。選択したオーディオインターフェースのコントロール設定項目は下部にあります。 Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. ここではMIDI インターフェースを選択することができます。コンパイル時のシステム設定によって、ALSAやOSS等を選択することができます。選択したMIDIインターフェースのコントロール設定項目は下部にあります。 Paths パス LADSPA plugin paths LADSAPA プラグインのパス Default Soundfont File デフォルト サウンドフォントファイル Background artwork 背景用アートワーク Choose default SoundFont デフォルトのサウンドフォントを選択してください Choose background artwork 背景用アートワークを選択してください One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default デフォルトで波形表示を有効にする Smooth scroll in Song Editor Song Editor でスムーズ スクロールする Enable auto save feature 自動保存機能を有効にする Show playback cursor in AudioFileProcessor sf2Instrument Bank バンク Patch パッチ Gain ゲイン Reverb リバーブ Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Open other SoundFont file 他のサウンドフォント ファイルを開く Click here to open another SF2 file ここをクリックすると他のSF2 ファイルを開きます Choose the patch パッチを選択 Gain ゲイン Apply reverb (if supported) (サポートしているならば)リバーブを適用 This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. このボタンでリバーブ エフェクトを有効にします。クールなエフェクトには有効ですが、リバーブをサポートしたファイルにしか効果がありません。 Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) (サポートしているならば)コーラスを適用 This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. このボタンでコーラス エフェクトを有効にします。クールなエコー エフェクトには有効ですが、コーラスをサポートしたファイルにしか効果がありません。 Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file サウンドフォント ファイルを開く SoundFont2 Files (*.sf2) SoundFont2 ファイル (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff カットオフ Resonance レゾナンス Filter type フィルターの種類 Voice 3 off Volume 音量 Chip model チップモデル sidInstrumentView Volume: 音量: Resonance: レゾナンス: Cutoff frequency: カットオフ周波数: High-Pass filter ハイパスフィルター Band-Pass filter バンドパスフィルター Low-Pass filter ローパスフィルター Voice3 Off MOS6581 SID MOS8580 SID Attack: アタック: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. アタック速度は、ボイス %1 の出力がゼロからピーク振幅にどれだけ早く大きくなるかを決定します。 Decay: ディケイ: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. ディケイ速度では、出力がピーク振幅から選択したサスティン レベルまでどれだけ早く小さくなるかを設定します。 Sustain: サスティン: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. ボイス %1 の出力はノートが保持されてる間、選択されたサスティン振幅を保持します。 Release: リリース: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. ボイス %1 の出力は、選択されたリリースレートでサスティンの大きさから0へと小さくなります。 Pulse Width: パルス幅: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. パルス幅解像度は認識可能なステップを生じることなくスムーズにスイープ可能な幅を与えます。オシレータ %1 のパルス波形は聞き取り可能なエフェクトを持つように選択しなければなりません。 Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Coarseデチューンで ボイス %1 を1オクターブ上下にデチューンできます。 Pulse Wave パルス波形 Triangle Wave 三角波 SawTooth Noise ノイズ Sync 同期 Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. オシレータ %1 の基本周波数と、"同期の難しい"エフェクトを生み出しているオシレータ %2 の基本周波数を同期します。 Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Ring-mod オシレーター %1 の出力の三角形の波形を オシレータ %1 と %2のリングモジュレートされてた組み合わせに置き換えます。 Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. FilteredがONなら ボイス %1 はフィルターを通って処理されます。 Filteredがオフなら ボイス $1 は直接出力におくられてフィルターは出力に適用されません。 Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Test オシレータ %1 を セット・リセット・ロックしたとき Test が停止されるまでの間 ゼロです。 song Tempo テンポ Master volume マスター音量 Master pitch マスターピッチ Project saved プロジェクトを保存しました The project %1 is now saved. プロジェクト %1 を保存しました Project NOT saved. プロジェクトは保存されていません。 The project %1 was not saved! プロジェクト %1 は保存されませんでした! Import file ファイルのインポート untitled Select file for project-export... プロジェクトをエクスポートするファイルを選択してください... Empty project 空のプロジェクト This project is empty so exporting makes no sense. Please put some items into Song Editor first! プロジェクトが空なのでエクスポートは無効です。Song Editor にアイテムを置いてからエクスポートしてください! MIDI sequences MIDI シーケンス FL Studio projects FL Studio プロジェクト All file types すべてのファイル Hydrogen projects Hydrogen プロジェクト Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling オートスクロールを有効/無効 Enable/disable loop-points ループポイントを有効/無効 After stopping go back to begin 終了後、開始位置に戻る After stopping go back to position at which playing was started 終了後、再生が開始された位置に戻る After stopping keep position 終了後、位置を保持する Hint ヒント Press <Ctrl> to disable magnetic loop points. マグネティック ループポイントを無効化するには<Ctrl>を押してください。 Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted ミュート Solo ソロ trackContentObject Muted ミュート trackContentObjectView Current position 現在位置 Hint ヒント Press <Ctrl> and drag to make a copy. コピーするには<Ctl>+ドラッグをしてください。 Current length 現在の長さ Press <Ctrl> for free resizing. フリーズ解除には<Ctrl>を押してください。 %1:%2 (%3:%4 to %5:%6) Delete (middle mousebutton) 消去(マウス中ボタン) Cut 切り取り Copy コピー Paste 貼り付け Mute/unmute (<Ctrl> + middle click) ミュート/ミュート解除(<Ctrl> + 中ボタンクリック) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. 新しいドラッグ&ドロップアクションを開始するには、移動グリップをクリック中に <Ctrl>を押してください。 Actions for this track このトラックのアクション Mute ミュート Mute this track このトラックをミュート Solo ソロ Clone this track このトラックを複製 Remove this track このトラックを削除 Clear this track このトラックをクリア Turn all recording on Turn all recording off vestigeInstrument Loading plugin プラグインを読み込んでいます Please wait while loading VST-plugin... VST-プラグインを読み込む間お待ちください... Failed loading VST-plugin VST-プラグインの読み込みに失敗しました The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! VST-plugin %1 がいくつかの理由で読み込みできませんでした。 もしその VST が Linuxの他のVST-ソフトウェアで動作するならば LMMS の開発者に連絡してください! vibed String %1 volume ストリング %1 の音量 String %1 stiffness ストリング %1 のスティフネス Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: 音量: The 'V' knob sets the volume of the selected string. V つまみでは選択したストリングの音量を設定します。 String stiffness: ストリングのスティフネス: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. S つまみで選択したストリングのスティフネス(堅さ)を設定します。ストリングのスティフネスはストリングがどれだけ長く鳴り響くかに影響します。値を小さくするほどストリングは長く鳴り響きます。 Pick position: ピック位置: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. P つまみでは、選択したストリングをピッキングする位置を指定します。指定した値が小さいほど、ブリッジに近い箇所がピッキングされます。 Pickup position: ピックアップ位置: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. PU つまみでは選択したストリングのどの位置で振動をモニターするかを設定します。値が小さくなるほどブリッジとピックアップの位置が近くなります。 Pan: パン: The Pan knob determines the location of the selected string in the stereo field. Pan つまみではステレオ音場中の選択したストリングの位置を指定します。 Detune: ディチューン: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Detune つまみでは選択したストリングのピッチを変更します。ゼロより小さい値を指定すると音がフラットになります。ゼロより大きい値を指定すると音がシャープになります。 Fuzziness: ファジネス: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Slap つまみでは選択したストリングに少しだけファズを追加します。アタックの際にとてもはっきりとこの効果を理解できます。ストリングを金属風の音にするのに使用できます。 Length: 長さ: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Length つまみでは選択したストリングの長さを指定します。ストリングを長くすれば、長い時間鳴り、より明るく聞こえます。しかし、よりCPUサイクルを消費します。 Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Imp セレクタは、グラフの波形がピッキングによってストリングに与えられるインパルスとして扱われるのか、ストリングの初期状態として扱われるのかを指定します。 Octave オクターブ The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. オクターブセレクタは、ストリングをノートのどの倍音で鳴らすかを選択するために使用します。例えば、'-2'は基音の2オクターブ下まで鳴ることを意味し、'F'は、ストリングが基音で鳴ることを意味します。そして'6'は、ストリングが基本から6オクターブ上で鳴ることを意味します。 Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. 波形エディターは、ストリングの振動開始時に使われる初期状態またはインパルスのコントロールに使用します。グラフの右側のボタンで波形を選択した種類に初期化します。'?' ボタンでファイルから波形を--最初の128個のサンプルのみ読み込みます。 波形はグラフ内に描くこともできます。 'S'ボタンは、波形を平滑化します。 'N' ボタンは、波形をノーマライズ化します。 Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed は独立して振動しているストリングを9つまでモデル化します。'String'セレクタでは、現在編集しているストリングを選ぶことができます。'Imp' セレクタでは、インパルスと、ストリングの初期状態のどちらをグラフで表すのかを選択します。'Octave' セレクタでは、どの倍音でストリングを振動させるのかを選択します。 グラフでは、動作中のストリングを設定する際に使用する、初期状態またはインパルスをコントールすることができます。 'V' つまみでは音量を、'S' つまみではスティフネス(堅さ)をコントロールします。'P' つまみでは弾く位置を、'PU' つまみではピックアップの位置をコントロールします。 'Pan' と 'Detune' の説明は不要でしょう。'Slap'のつまみは、ストリングの音にファズを少し加えます。 'Length' つまみでは、ストリングの長さをコントロールします。 波形エディターの右下隅のLEDは、現在のインストゥルメントのストリングがアクティブなのかどうかを示しています。 Enable waveform 波形を有効 Click here to enable/disable waveform. ここをクリックすると波形の有効/無効を切り替えます。 String ストリング The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. ストリングセレクタはコントローラーが編集しているストリングを選択するのに使用します。Vibed インストゥルメントは 最大9本の独立した振動したストリングを含むことができます。波形エディターの右下隅のLEDはどのストリングがアクティブかを示しています。 Sine wave サイン波形 Triangle wave 三角波形 Saw wave のこぎり波形 Square wave 方形波形 White noise wave ホワイトノイズ波形 User defined wave ユーザー定義波形 Smooth 平滑化 Click here to smooth waveform. ここをクリックすると波形を平滑化します。 Normalize ノーマライズ Click here to normalize waveform. ここをクリックすると波形をノーマライズ化します。 &Help ヘルプ(&H) Use a sine-wave for current oscillator. サイン波形を現在のオシレータで使用する。 Use a triangle-wave for current oscillator. 三角波形を現在のオシレータで使用する。 Use a saw-wave for current oscillator. のこぎり波形を現在のオシレータで使用する。 Use a square-wave for current oscillator. 方形波形を現在のオシレータで使用する。 Use white-noise for current oscillator. ホワイトノイズ波形を現在のオシレータで使用する。 Use a user-defined waveform for current oscillator. ユーザー定義波形を現在のオシレータで使用する。 visualizationWidget click to enable/disable visualization of master-output ここをクリックするとマスター出力の表示/非表示を切り替えます Click to enable 有効にするにはここをクリック voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain 入力ゲイン Output gain 出力ゲイン lmms-1.1.3/data/locale/ko.qm000066400000000000000000002220471247673406200156260ustar00rootroot00000000000000z/Nm+V+jund"R5:/Vs287"87o9}̓9o; 4@1x@۴5FzJJoMUTOXYOXUVZ;.Z;`1xw80~o>CutɄyPʭiy7(Wծh7J8x-SxJ<lyߺVo[=o?;rCBA nm|qɫD/h8J]^Za3r 9 (^hk(^)ui,´r,´Ts.74N9: ,Ro[bbr%"tcxż9J%`CUGGG@G??)))6),Wf319> >O>ѻB8t>dUg~75> n:suZss8D uI2Qx8J8:)@WHH>OX\P~rP~Ske]] lumx1x|Z}"PWŐNiĩķR$#yas.>#N{|d#+Z~W ϯѫ6 6F[NAք왞nչRQY wv 05n(M)ez10919f:^V<< <<J2KM$Mк2PJ/)PJpPJMQq.A``\`%<`%Y`%ކg5_h:Pjzt2MkJrJwhwt;wwxYZyT]yTb{ 9H/r3ueuuuuu;u;u<{dIkI.Ic>Ii q/V}@g  Bxˤ-dͥ@i2.2?(Nc5`AV uX8 uu @W`STUxΎ$0A-U15"F^F^H8NQ)ZaEa*fkh(h93h;3l`l'lvA u}o.KAAqK]z*̂tF*ww*kj NBfi ftqfztt8Gat9t; %%X6!Zd;-4EUTZ<55<5$<5&s<5'<5UN<5<5ҵsoߺcD=}XljOZCMNG^EeJEOE`iexe#EC_+pZ*1^G6{C*%%C*VC*C*UGkRN9Q)gWdL[P[l0mBKrgsfz=zk'QPP&P'cP)"QP#4FiR.B.5k5k>D27]77^\ʢ2R'27Lޔr7Tti>,trB Ů b))Y!E*!EgG!Eh%' )' )X5nt8}@#;G;ZLIUI UIHZ#F[t6k\X.2achJV҈iAN5m.4 1aj>22$ d2)[2<}# S  G: U#ٚ$Ϟ/-I}-u > $  )8b 6E 8eh 8es 8e 9\ ItYˑ Iv Mg O T Ys" hI.# k p,a\ p w%%d w%KM x, >  I P B1 ^ܫ `pX ` : ? d̥o tYO |`O ) ξ U U4 {ؒ % s7 ^ m E ޖw 9W 9z  鼣 ]" +T Zگ rψ .˙ȕ 0 0  0 ^ 0 @u  @u=M @uo( Z \) aoIv bS#? c c(- c+@ c cx c fb l8^ |.ۄ + , ,M 6' u .< EK Q* Չ9 Չ9J  /^ ^ \կf n~ViqhoR.!g1 1 2a;}<)B8SG(P *Yad^cgz1nLldyOp,5:K?k<sH`96`9%ȘWzPӐ&NOI j |[a"c(@)3ICg]D>eDIJiJiU&fCXҾ-Z [x*[[^ EZ` d[y]u*+*7K9 p#e~qIi LMMSAbout AboutDialog(PANAmplifierControlDialog(:Panning:AmplifierControlDialoghVOLAmplifierControlDialogh:Volume:AmplifierControlDialog(PanningAmplifierControlshVolumeAmplifierControls00DEVICEAudioAlsa::setupWidgetɝAmplify:AudioFileProcessorView] Endpoint:AudioFileProcessorViewx 0Open other sampleAudioFileProcessorView <\Reverse sampleAudioFileProcessorViewǑ Startpoint:AudioFileProcessorView t|tŸҸ CLIENT-NAMEAudioJack::setupWidget00DEVICEAudioOss::setupWidget1ԴBACKENDAudioPortAudio::setupWidget00DEVICEAudioPortAudio::setupWidget00DEVICEAudioPulseAudio::setupWidget00DEVICEAudioSdl::setupWidget (%1%2)(&C)&Copy value (%1%2)AutomatableModel  t0 (%1%2)(&P)&Paste value (%1%2)AutomatableModel0T (%1%2)(&R) &Reset (%1%2)AutomatableModelŴ0 Connect to controller...AutomatableModel %1 𬰴(Connected to %1AutomatableModelŴ0 𬰴(Connected to controllerAutomatableModel Ӹ...Edit connection...AutomatableModelx- ǐT ӸEdit song-global automationAutomatableModel pRemove connectionAutomatableModel.̴ ݴ D tܸ\ ՈµȲ.1All selected values were copied to the clipboard.AutomationEditorǐT ӸѮ0 - %1Automation Editor - %1AutomationEditorǐT ӸѮ0 - (4 LAutomation Editor - no patternAutomationEditor2Ǭ (4X ǬD X$t 0| t8Ɣ>Click here if you want to stop playing of the current pattern.AutomationEditor" ݴ  (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor& ݴ  ǘ|0 (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor 0 (Shift+D)Draw mode (Shift+D)AutomationEditor ư0 (Shift+E)Erase mode (Shift+E)AutomationEditor,t  #0 (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditor,Ǭ (4 Ǭ/Ǡ  (Space)"Play/pause current pattern (Space)AutomationEditor8Ŵ 8 Tt| ǐT (4<\ Ŵ8Ɣ!EPlease open an automation pattern with the context menu of a control!AutomationEditor(Ǭ (4 ǬD  (Space)'Stop playing of current pattern (Space)AutomationEditor   Values copiedAutomationEditor(<Ctrl> t H Ŵ| L0$Drag a control while pressing AutomationPattern %1 %1 ConnectionsAutomationPatternView t  Change nameAutomationPatternViewpClearAutomationPatternViewt "%1"Disconnect "%1"AutomationPatternViewǐT ӸѮ0 0Open in Automation editorAutomationPatternView t 0T Reset nameAutomationPatternViewyL $/tSet/clear recordAutomationPatternView6ǐT ӸѮ0 t (4D 0X t t6double-click to open this pattern in automation editorAutomationPatternView ǐT ҸAutomation trackAutomationTrack FREQBassBoosterControlDialog : Frequency:BassBoosterControlDialogtGAINBassBoosterControlDialogt:Gain:BassBoosterControlDialogDRATIOBassBoosterControlDialogD:Ratio:BassBoosterControlDialog  FrequencyBassBoosterControlstGainBassBoosterControlsDRatioBassBoosterControls Ŵ0 %1 Controller %1 Controller ǐ  Auto DetectControllerConnectionDialogDCHANNELControllerConnectionDialogŴ0 CONTROLLERControllerConnectionDialogCancelControllerConnectionDialog $Connection SettingsControllerConnectionDialog X x.Cycle Detected.ControllerConnectionDialog Dž% D Input channelControllerConnectionDialog Dž% Ŵ0Input controllerControllerConnectionDialog Q hMAPPING FUNCTIONControllerConnectionDialog  Ŵ0MIDI CONTROLLERControllerConnectionDialog$ tҸ| 0\  00(MIDI-devices to receive MIDI-events fromControllerConnectionDialogUxOKControllerConnectionDialogƩǐ Ŵ0USER CONTROLLERControllerConnectionDialogTX0AddControllerRackView Ŵ0 Controller RackControllerRackView(&H)&HelpControllerViewt x p(&R)&Remove this pluginControllerViewŴControlsControllerView"t Ŵ0| \ t Dž%&Enter the new name for this controllerControllerViewŴ0 x t<\Rename controllerControllerViewDecayEffect ֨ Effect enabledEffecttҸGateEffect ֨ Effects enabled EffectChain ֨ TX0 Add effectEffectRackView ֨ ̴x EFFECTS CHAINEffectRackView ֨ TX0 Add effectEffectSelectDialog(&H)&Help EffectViewt x p(&R)&Remove this plugin EffectViewŴControls EffectViewDECAY EffectViewtҸGATE EffectViewtҸ:Gate: EffectView,/TOn/Off EffectViewܬ:Time: EffectView֨ ,  T ѠToggles the effect on or off. EffectViewDecayEnvelopeAndLfoParametersDECEnvelopeAndLfoView:Decay:EnvelopeAndLfoView׌ҸHintEnvelopeAndLfoViewCancelExportProjectDialog͜%OutputExportProjectDialog(&H)&HelpFxLine4LMuteFxMixerView::FxChannelView DtӘ$ArpeggioInstrumentFunctionArpeggioDtӘ$ )եArpeggio directionInstrumentFunctionArpeggioDtӘ$ tҸ Arpeggio gateInstrumentFunctionArpeggioDtӘ$  Arpeggio modeInstrumentFunctionArpeggioDtӘ$ Arpeggio rangeInstrumentFunctionArpeggioDtӘ$ ܬ Arpeggio timeInstrumentFunctionArpeggioDtӘ$ Dž Arpeggio typeInstrumentFunctionArpeggioDDownInstrumentFunctionArpeggioǐ mFreeInstrumentFunctionArpeggio4ǑRandomInstrumentFunctionArpeggio,SortInstrumentFunctionArpeggioٮ0SyncInstrumentFunctionArpeggioUpInstrumentFunctionArpeggio @ D Up and downInstrumentFunctionArpeggio DtӘ$ARPEGGIOInstrumentFunctionArpeggioViewDtӘ$ tҸ:Arpeggio gate:InstrumentFunctionArpeggioViewDtӘ$ Arpeggio range:InstrumentFunctionArpeggioViewDtӘ$ ܬArpeggio time:InstrumentFunctionArpeggioView)ե Direction:InstrumentFunctionArpeggioViewtҸGATEInstrumentFunctionArpeggioViewMode:InstrumentFunctionArpeggioViewRANGEInstrumentFunctionArpeggioViewܬTIMEInstrumentFunctionArpeggioViewmsInstrumentFunctionArpeggioView%  octave(s)InstrumentFunctionArpeggioViewTtMajorInstrumentFunctionNoteStacking̴ Ѥ Whole toneInstrumentFunctionNoteStackingtminorInstrumentFunctionNoteStacking% octaveInstrumentFunctionNoteStackingRANGE"InstrumentFunctionNoteStackingView%  octave(s)"InstrumentFunctionNoteStackingViewDCHANNELInstrumentMidiIOView D0  Filter typeInstrumentSoundShaping ResonanceInstrumentSoundShapinghVolumeInstrumentSoundShaping FREQInstrumentSoundShapingView: Resonance:InstrumentSoundShapingView t¤ ǐ Base noteInstrumentTrack0  $Default presetInstrumentTrack FX D FX channelInstrumentTrack(PanningInstrumentTrackD  LPlugin not foundPluginL x "%1" >D  Ŵ }Ŵ,  µȲ! t : "%2"AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin"U͕ OGG | (*.ogg)Compressed OGG-File (*.ogg)ProjectRendererWAV | (*.wav)WAV-File (*.wav)ProjectRenderer D x:  Channels In: QWidgetD D: Channels Out: QWidget Ǒ:  Copyright: QWidget |: File: QWidgeth X: In Place Broken: QWidget Ǒǐ: Maker: QWidgett: Name: QWidgetD$NoQWidget ܬ : Real Time Capable: QWidget ܬ DƔ: Requires Real Time: QWidgetYesQWidget,AIFF | (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBufferAU | (*.au)AU-Files (*.au) SampleBuffer&DrumSynth | (*.ds)DrumSynth-Files (*.ds) SampleBuffer FLAC | (*.flac)FLAC-Files (*.flac) SampleBufferOGG | (*.ogg)OGG-Files (*.ogg) SampleBuffer$$ | 0Open audio file SampleBufferRAW | (*.raw)RAW-Files (*.raw) SampleBuffer SPEEX | (*.spx)SPEEX-Files (*.spx) SampleBufferVOC | (*.voc)VOC-Files (*.voc) SampleBufferWave | (*.wav)Wave-Files (*.wav) SampleBufferCopy SampleTCOViewǘ|0Cut SampleTCOView ( ư¤Ҽ)Delete (middle mousebutton) SampleTCOView04L/4Lt (<Ctrl> +  t)#Mute/unmute ( + middle click) SampleTCOView#0Paste SampleTCOViewyL $/tSet/clear record SampleTCOView$ D X0 X t tdouble-click to select sample SampleTCOView Ҹ Sample track SampleTrackhVolume SampleTrack D hChannel volume:SampleTrackView Ҹ h Track volumeSampleTrackViewhVOLSampleTrackViewǐT Ҹ TX0Add automation-track SongEditor"beat/bassline TX0Add beat/bassline SongEditor Ҹ TX0Add sample-track SongEditorClick here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditoruClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor |D  LCould not open file SongEditor |D  LCould not write file SongEditor 0  Draw mode SongEditorӸ (  t)Edit mode (select and move) SongEditor ő High quality mode SongEditor ¤0 x Ǭ  BBҸ H $$ 00 yL?Record samples from Audio-device while playing song or BB track SongEditor x-ӸѮ0 Song-Editor SongEditorx  (Space)Stop song (Space) SongEditor \/BPM TEMPO/BPM SongEditorTempo SongEditor: %1 8ѤValue: %1 semitones SongEditor : %1% Value: %1% SongEditor ¤0 LMMS ǬՉ L t եD X JµȲ.GPlease note that most changes won't take effect until you restart LMMS! setupDialog0<\ 0TReset to default-value setupDialogLMMS ǬՉ Restart LMMS setupDialogSTK  TSTK rawwave directory setupDialogLMMS $ Setup LMMS setupDialog"$ ǬՉ t0,Show restart warning after changing settings setupDialogUI ֨ ՉUI effects vs. performance setupDialogVST- x TVST-plugin directory setupDialogElBank sf2InstrumentT¤Chorus sf2Instrument T¤ Jt Chorus Depth sf2Instrument T¤  Chorus Level sf2Instrument T¤ |x Chorus Lines sf2Instrument T¤  Chorus Speed sf2InstrumenttGain sf2Instrument(XPatch sf2Instrument Reverb sf2Instrument QReverb Damping sf2Instrument  Reverb Level sf2Instrument l0Reverb Roomsize sf2Instrument D Reverb Width sf2InstrumentT¤ Ʃ()Apply chorus (if supported)sf2InstrumentView Ʃ()Apply reverb (if supported)sf2InstrumentView (X Choose the patchsf2InstrumentViewT¤ : Chorus Depth:sf2InstrumentViewT¤ : Chorus Level:sf2InstrumentViewT¤ |x: Chorus Lines:sf2InstrumentViewT¤ : Chorus Speed:sf2InstrumentView0x SF2 |D 0 X 0| t#Click here to open another SF2 filesf2InstrumentViewtGainsf2InstrumentViewOpen SoundFont filesf2InstrumentViewx ƴܰL4 | 0Open other SoundFont filesf2InstrumentView Q:Reverb Damping:sf2InstrumentView : Reverb Level:sf2InstrumentView l0:Reverb Roomsize:sf2InstrumentView D: Reverb Width:sf2InstrumentView L142 | (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewuThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewnt Ҽ@ ֨ . t@ ֨ ƩX. 찘 X | Ǒt .pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewi x Chip model sidInstrumentCutoff sidInstrument D0  Filter type sidInstrument Resonance sidInstrument Voice 3 off sidInstrumenthVolume sidInstrument\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentViewAttack:sidInstrumentView4(¤ D0Band-Pass filter sidInstrumentViewCoarse:sidInstrumentViewCutoff frequency:sidInstrumentViewiDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentViewDecay:sidInstrumentViewD0FilteredsidInstrumentViewXt(¤ D0High-Pass filter sidInstrumentView\ư(¤ D0Low-Pass filter sidInstrumentView MOS6581 SID sidInstrumentView MOS8580 SID sidInstrumentViewǡLNoisesidInstrumentView]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentView Pulse WavesidInstrumentView Pulse Width:sidInstrumentViewRelease:sidInstrumentView: Resonance:sidInstrumentView-Ring-ModsidInstrumentView}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentViewSawToothsidInstrumentViewSustain:sidInstrumentViewٮ0SyncsidInstrumentViewSync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentViewL¤ҸTestsidInstrumentViewPTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewDThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewThe Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentViewjThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentView Triangle WavesidInstrumentView Voice3 Off sidInstrumentViewh:Volume:sidInstrumentViewWhen Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentView H \Ҹ Empty projectsongFL Studio \ҸFL Studio projectssong | }Ŵ$0 Import filesong  ¤MIDI sequencessong ¤0 +  t)#Mute/unmute ( + middle click)trackContentObjectView#0PastetrackContentObjectView4<Ctrl> t D ̴0 X L0%Press and drag to make a copy.trackContentObjectView4ǐ l0 ǬpX0 X <Ctrl> t0Press for free resizing.trackContentObjectViewt ҸX ǑActions for this tracktrackOperationsWidgett ҸD Clone this tracktrackOperationsWidget4LMutetrackOperationsWidgett ҸD 4LMute this tracktrackOperationsWidgetKPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidgett ҸD pRemove this tracktrackOperationsWidget\SolotrackOperationsWidget VST x }  $XFailed loading VST-pluginvestigeInstrument x } Loading pluginvestigeInstrument.VST x }@ H Ǡ 0...'Please wait while loading VST-plugin...vestigeInstrumentThe VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrument Detune %1vibed Fuzziness %1 vibed Impulse %1vibed 8t %1 Length %1vibed Octave %1vibedPan %1vibedPick %1 positionvibedPickup %1 positionvibedString %1 stiffnessvibedString %1 volumevibed&Help vibedView&Click here to enable/disable waveform. vibedView!Click here to normalize waveform. vibedViewClick here to smooth waveform. vibedViewDetune: vibedViewEnable waveform vibedView Fuzziness: vibedViewImpulse ӸѮ0Impulse Editor vibedViewImpulse or initial state vibedView8t:Length: vibedView Normalize vibedViewOctave vibedViewPan: vibedView X :Pick position: vibedViewPickup position: vibedViewSaw wave vibedView Sine wave vibedViewSmooth vibedView Square wave vibedViewString vibedViewString stiffness: vibedViewThe 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewThe 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewThe 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewThe 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedView4The 'V' knob sets the volume of the selected string. vibedViewThe Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewThe Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedView#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewPThe Pan knob determines the location of the selected string in the stereo field. vibedViewThe Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewThe String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewThe waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedView Triangle wave vibedView&Use a saw-wave for current oscillator. vibedView'Use a sine-wave for current oscillator. vibedView)Use a square-wave for current oscillator. vibedView+Use a triangle-wave for current oscillator. vibedView3Use a user-defined waveform for current oscillator. vibedView'Use white-noise for current oscillator. vibedViewUser defined wave vibedViewhVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewh:Volume: vibedViewWhite noise wave vibedView6click to enable/disable visualization of master-outputvisualizationWidgetVoice %1 attack voiceObjectVoice %1 coarse detuning voiceObjectVoice %1 decay voiceObject %1 D0(Voice %1 filtered voiceObjectVoice %1 pulse width voiceObjectVoice %1 release voiceObject %1 pVoice %1 ring modulate voiceObjectVoice %1 sustain voiceObject %1 ٮ0T Voice %1 sync voiceObject %1 L¤Ҹ Voice %1 test voiceObject %1 Voice %1 wave shape voiceObjectlmms-1.1.3/data/locale/ko.ts000066400000000000000000010562051247673406200156410ustar00rootroot00000000000000 AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About LMMS란 LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL 볼륨 Volume: 볼륨: PAN 패닝 Panning: 패닝: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume 볼륨 Panning 패닝 Left gain Right gain AudioAlsa::setupWidget DEVICE 기기 CHANNELS AudioFileProcessorView Open other sample 다른 샘플 열기 Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample 샘플 역으로 If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Amplify: 증폭 With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: 시작점 Endpoint: 끝점 Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME 클라이언트명 CHANNELS AudioOss::setupWidget DEVICE 기기 CHANNELS AudioPortAudio::setupWidget BACKEND 백엔드 DEVICE 기기 AudioPulseAudio::setupWidget DEVICE 기기 CHANNELS AudioSdl::setupWidget DEVICE 기기 AutomatableModel &Reset (%1%2) 초기화 (%1%2)(&R) &Copy value (%1%2) 값 복사 (%1%2)(&C) &Paste value (%1%2) 값 붙이기 (%1%2)(&P) Edit song-global automation 노래-전역 자동화 편집 Connected to %1 %1 연결됨 Connected to controller 제어기 연결됨 Edit connection... 연결 편집... Remove connection 연결 제거 Connect to controller... 제어기에 연결 Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) 현재 패턴 재생/잠시 중지 (Space) Stop playing of current pattern (Space) 현재 패턴 재생을 중지 (Space) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. 현재 패턴의 재생을 중지하려면 여기를 누르세요 Draw mode (Shift+D) 그리기 모드 (Shift+D) Erase mode (Shift+E) 지우기 모드 (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) 선택된 값 잘라내기 (Ctrl+X) Copy selected values (Ctrl+C) 선택된 값 복사 (Ctrl+C) Paste values from clipboard (Ctrl+V) 클립보드에서 값 붙여넣기 (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern 자동화 편집기 - 패턴 없음 Automation Editor - %1 자동화 편집기 - %1 Please open an automation pattern with the context menu of a control! 제어 문맥 메뉴를 가진 자동화 패턴으로 열어주세요! Values copied 복사된 값 All selected values were copied to the clipboard. 전체 선택된 값을 클립보드로 복사했습니다. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> <Ctrl> 누르는 동안 제어를 끌기 Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor 자동화 편집기에서 이 패턴을 열기위하여 이중 클릭 Open in Automation editor 자동화 편집기에서 열기 Clear 제거 Reset name 이름 초기화 Change name 이름 변경 %1 Connections %1 연결 Disconnect "%1" 연결해제 "%1" Set/clear record 녹음 설정/해제 AutomationTrack Automation track 자동화 트랙 BassBoosterControlDialog FREQ 주파수 Frequency: 주파수: GAIN 이득 Gain: 이득: RATIO Ratio: 비: BassBoosterControls Frequency 주파수 Gain 이득 Ratio CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 제어기 %1 ControllerConnectionDialog Connection Settings 연결 설정 MIDI CONTROLLER 미디 제어기 Input channel 입력 채널 CHANNEL 채널 Input controller 입력 제어기 CONTROLLER 제어기 Auto Detect 자동 탐색 MIDI-devices to receive MIDI-events from 미디 이벤트를 받기위한 미디 기기 USER CONTROLLER 사용자 제어기 MAPPING FUNCTION 매핑 함수 OK 확인 Cancel 취소 LMMS Cycle Detected. 순환 인지. ControllerRackView Controller Rack 제어기 랙 Add 더하기 Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls 제어 Controllers are able to automate the value of a knob, slider, and other controls. Rename controller 제어기 다른 이름으로 Enter the new name for this controller 이 제어기를 위한 새 이름 입력 &Remove this plugin 이 플러그인 제거(&R) &Help 도움말(&H) DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled 효과 가능 Wet/Dry mix Gate 게이트 Decay 감쇄 EffectChain Effects enabled 효과 가능 EffectRackView EFFECTS CHAIN 효과 체인 Add effect 효과 더하기 EffectSelectDialog Add effect 효과 더하기 Plugin description EffectView Toggles the effect on or off. 효과 켬 또는 끔 토글 On/Off 켬/끔 W/D Wet Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY 감쇄 Time: 시간: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE 게이트 Gate: 게이트: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls 제어 Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Move &down &Remove this plugin 이 플러그인 제거(&R) &Help 도움말(&H) EnvelopeAndLfoParameters Predelay Attack Hold Decay 감쇄 Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. ATT Attack: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. HOLD Hold: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. DEC 감쇄 Decay: 감쇄: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. SUST Sustain: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. REL Release: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. AMT Modulation amount: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. control envelope-amount by this LFO ms/LFO: Hint 힌트 Drag a sample from somewhere and drop it in this window. Click here for random wave. ExportProjectDialog Export project Output 출력 File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel 취소 Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help 도움말(&H) FxMixer Master FX %1 FxMixerView Rename FX channel Enter the new name for this FX channel FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute 무음 Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio 아르페지오 Arpeggio type 아르페지오 타입 Arpeggio range 아르페지오 범위 Arpeggio time 아르페지오 시간 Arpeggio gate 아르페지오 게이트 Arpeggio direction 아르페지오 방향 Arpeggio mode 아르페지오 모드 Up Down 아래 Up and down 위와 아래 Random 무작위 Free 자유롭게 Sort 정렬 Sync 동기 Down and up InstrumentFunctionArpeggioView ARPEGGIO 아르페지오 An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE 범위 Arpeggio range: 아르페지오 범위 octave(s) 옥타브 Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME 시간 Arpeggio time: 아르페지오 시간 ms 밀리초 Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. GATE 게이트 Arpeggio gate: 아르페지오 게이트: % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: 방향 Mode: 모드 InstrumentFunctionNoteStacking octave 옥타브 Major 메이저 Majb5 minor 마이너 minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Melodic minor Whole tone 전체 톤 Diminished Major pentatonic Minor pentatonic Jap in sen Major bebop Dominant bebop Blues Arabic Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Chord type Chord range Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE 범위 Chord range: octave(s) 옥타브 Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL 채널 VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME Volume 볼륨 CUTOFF Cutoff frequency RESO Resonance 공명 Envelopes/LFOs Filter type 필터 형태 Q/Resonance LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: 공명: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ 주파수 cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume 볼륨 Panning 패닝 Pitch 피치 FX channel FX 채널 Default preset 기본 사전 설정 With this knob you can set the volume of the opened channel. Base note 베이스 박자 Pitch range InstrumentTrackView Volume 볼륨 Volume: 볼륨: VOL 볼륨 Panning 패닝 Panning: 패닝: PAN 패닝 MIDI 미디 Input 입력 Output 출력 InstrumentTrackWindow GENERAL SETTINGS 일반 설정 Instrument volume 기기 볼륨 Volume: 볼륨: VOL 볼륨 Panning 패닝 Panning: 패닝: PAN 패닝 Pitch 피치 Pitch: cents PITCH 피치 FX channel FX 채널 ENV/LFO FUNC FX MIDI 미디 Save preset 사전 설정 저장 XML preset file (*.xpf) XML 사전 설정 파일 (*.xpf) PLUGIN 플러그인 Pitch range (semitones) RANGE 범위 Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels 채널 링크 LadspaControlDialog Link Channels 채널 링크 Channel 채널 LadspaControlView Link channels 채널 링크 Value: 값: Sorry, no help available. 미안합니다. 도움말을 사용할 수 없습니다 LadspaEffect Effect 효과 Unknown LADSPA plugin %1 requested. 요청된 미지의 LADSPA 플러그인 %1 LcdSpinBox Please enter a new value between %1 and %2: %1 과 %2 사이 새로운 값을 입력하시오: LfoController LFO Controller LFO 제어기 Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller LFO 제어기 BASE 베이스 Base amount: 베이스 양: todo SPD LFO-speed: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. 톱니 파형을 위해 여기를 클릭 Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. 화이트 노이즈를 위해 여기를 클릭 Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory 작업 폴더 The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file 설정 파일을 저장할 수 없음 Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. &Project 프로젝트(&P) &New 새로(&N) &Open... 열기(&O)... Recently opened projects 최근 열린 프로젝트 &Save 저장(&S) Save &As... 다른 이름으로 저장(&A)... Import... 읽어오기... E&xport... 내보내기(&X)... &Quit 종료(&Q) &Edit 편집(&E) Settings 기본설정 &Tools 도구(&T) &Help 도움말(&H) Online help 온라인 도움말 Help 도움말 What's this? 이것은 무엇? About LMMS란 Create new project 새 프로젝트 생성 Create new project from template 서식에서 새 프로젝트 생성 Open existing project 기존 프로젝트 열기 Recently opened project 최근 열린 프로젝트 Save current project 현재 프로젝트 저장 Export current project 현재 프로젝트 내보내기 Show/hide Song-Editor 노래 편집기 보이기/숨기기 By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor Beat+Bassline 편집기 보이기/숨기기 By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll 피아노-롤 보이기/숨기기 Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor 자동화 편집기 보이기/숨기기 Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer FX 믹서 보이기/숨기기 Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes 프로젝트 박자 보이기/숨기기 Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack 제어기 랙 보이기/숨기기 Untitled 무제 LMMS %1 LMMS %1 Project not saved 프로젝트 저장 안함 The current project was modified since last saving. Do you want to save it now? 마지막 저장 후 현재 프로젝트가 수정되었습니다. 지금 저장하겠습니까? Open project 프로젝트 열기 Save project 프로젝트 저장 Help not available 도움말을 이용할 수 없습니다 Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. 현재 LMMS에 사용할 수 있는 도움말이 없습니다. LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE 기기 MidiAlsaSeq::setupWidget DEVICE 기기 MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE 기기 MidiPort Input channel 입력 채널 Output channel Input controller 입력 제어기 Output controller Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Send MIDI-events Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume 마스터 볼륨 Vibrato OscillatorObject Osc %1 volume Osc %1 panning Osc %1 coarse detuning Osc %1 fine detuning left Osc %1 fine detuning right Osc %1 phase-offset Osc %1 stereo phase-detuning Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch Click here to open another patch-file. Loop and Tune settings are not reset. Loop 반복 Loop mode Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Tune Tune mode Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. No file selected Open patch file Patch-Files (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step 피아노-롤에서 이 패턴을 열기위해 이중 클릭 한 단계 볼륨을 설정하기위하여 마우스 휠 사용 Open in piano-roll 피아노-롤에서 열기 Clear all notes 전체 박자 지우기 Reset name 이름 초기화 Change name 이름 변경 Add steps 단계 더하기 Remove steps 단계 제거 PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller LFO 제어기 PeakControllerEffectControlDialog BASE 베이스 Base amount: 베이스 양: Modulation amount: Attack: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Mute output 무음 출력 Attack Release Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) 현재 패턴 재생/잠시 중지 (Space) Stop playing of current pattern (Space) 현재 패턴 재생을 중지 (Space) Cut selected notes (Ctrl+X) 선택 박자를 잘라내기 (Ctrl+X) Copy selected notes (Ctrl+C) 선택 박자를 복사 (Ctrl+C) Paste notes from clipboard (Ctrl+V) 클립보드에서 박자 붙여넣기 (Ctrl+V) Piano-Roll - no pattern 피아노-롤 - 패턴 없음 Piano-Roll - %1 피아노-롤 - %1 Please open a pattern by double-clicking on it! 이것을 이중 클릭을 함으로서 패턴을 열어주세요. Record notes from MIDI-device/channel-piano 미디 기기/채널 피아노에서 박자 기록 Record notes from MIDI-device/channel-piano while playing song or BB track 노래 또는 BB 트랙 재생시 미디 기기/채널에서 박자 기록 Draw mode (Shift+D) 그리기 모드 (Shift+D) Erase mode (Shift+E) 지우기 모드 (Shift+E) Select mode (Shift+S) 선택 모드 (Shift+S) Last note 마지막 박자 Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock 박자 잠금 Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: %1 과 %2 사이 새로운 값을 입력하시오: PianoView Base note 베이스 박자 Plugin Plugin not found 플러그인 찾을 수 없음 The plugin "%1" wasn't found or could not be loaded! Reason: "%2" 플러그인 "%1" 찾을 수 없어 읽어올 수 없습니다! 이유: "%2" Error while loading plugin 플러그인 읽는 중 오류 Failed to load plugin "%1"! 플러그인 "%1"을 읽는 중 실패! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) WAV 파일 (*.wav) Compressed OGG-File (*.ogg) 압축 OGG 파일 (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: 이름: Maker: 제작자: Copyright: 저작권: Requires Real Time: 실제 시간 필요: Yes No 아니오 Real Time Capable: 실제 시간 가능: In Place Broken: 깨진 곳에 위치: Channels In: 채널 인: Channels Out: 채널 아웃: File: 파일: File: %1 SampleBuffer Open audio file 오디오 파일 열기 Wave-Files (*.wav) Wave 파일 (*.wav) OGG-Files (*.ogg) OGG 파일 (*.ogg) DrumSynth-Files (*.ds) DrumSynth 파일 (*.ds) FLAC-Files (*.flac) FLAC 파일 (*.flac) SPEEX-Files (*.spx) SPEEX 파일 (*.spx) VOC-Files (*.voc) VOC 파일 (*.voc) AIFF-Files (*.aif *.aiff) AIFF 파일 (*.aif *.aiff) AU-Files (*.au) AU 파일 (*.au) RAW-Files (*.raw) RAW 파일 (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample 샘플을 선택하기 위하여 이중 클릭 Delete (middle mousebutton) 삭제 (중간 마우스버튼) Cut 잘라내기 Copy 복사 Paste 붙여넣기 Mute/unmute (<Ctrl> + middle click) 무음/무음해제 (<Ctrl> + 중간 클릭) Set/clear record 녹음 설정/해제 SampleTrack Sample track 샘플 트랙 Volume 볼륨 SampleTrackView Track volume 트랙 볼륨 Channel volume: 채널 볼륨 VOL 볼륨 SongEditor Song-Editor 노래-편집기 Play song (Space) 노래 재생 (Space) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Stop song (Space) 노래 정지 (Space) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Add sample-track 샘플 트랙 더하기 Could not open file 파일을 열 수 없음 Could not write file 파일을 쓸 수 없음 Add automation-track 자동화 트랙 더하기 Draw mode 그리기 모드 Edit mode (select and move) 편집 모드(선택 및 이동) Record samples from Audio-device 오디오 기기에서 샘플 녹음 Record samples from Audio-device while playing song or BB track 노래 재생 또는 BB트랙 동안 오디오 기기에서 샘플 녹음 Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Add beat/bassline beat/bassline 더하기 Tempo 탬포 TEMPO/BPM 템포/BPM tempo of song 노래 템포 The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode 고 양질 모드 Master volume 마스터 볼륨 master volume 마스터 볼륨 Master pitch 마스터 피치 master pitch 마스터 피치 Value: %1% 값: %1% Value: %1 semitones 값: %1 세미톤 Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum 선형 스펙트럼 Linear Y axis 선형 Y 축 SpectrumAnalyzerControls Linear spectrum 선형 스펙트럼 Linear Y axis 선형 Y 축 Channel mode 채널 모드 TempoSyncKnob Tempo Sync 템포 동기화 No Sync 동기화 없음 Eight beats 8 비트 Whole note 전체 박자 Half note 1/2 박자 Quarter note 1/4 박자 8th note 1/8 박자 16th note 1/16 박자 32nd note 1/32 박자 Custom... 사용자... &Help 도움말(&H) Custom 사용자 Synced to Eight Beats 8비트로 동기화 Synced to Whole Note 전체 박자로 동기화 Synced to Half Note 1/2 박자로 동기화 Synced to Quarter Note 1/4 박자로 동기화 Synced to 8th Note 1/8 박자로 동기화 Synced to 16th Note 1/16 박자로 동기화 Synced to 32nd Note 1/32 박자로 동기화 TimeDisplayWidget click to change time units TrackContainer Couldn't import file 파일을 읽어올 수 없음 Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Couldn't open file 파일을 열 수 없음 Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Loading project... 프로젝트 읽어오는 중... Cancel 취소 Please wait... 잠시 기다리세요... Importing MIDI-file... 미디 파일 읽어오는 중... Importing FLP-file... FLP 파일 읽어오는 중... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: Osc %1 볼류: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Osc %1 panning: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Osc %1 coarse detuning: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Osc %1 fine detuning left: cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 fine detuning right: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 phase-offset: degrees With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin 다른 VST 플러그인 열기 Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Show/hide GUI GUI 보이기/숨기기 Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Turn off all notes 전체 박자 끄기 Open VST-plugin VST 플러그인 열기 DLL-files (*.dll) DLL 파일 (*.dll) EXE-files (*.exe) EXE 파일 (*.exe) No VST-plugin loaded 읽은 VST 플러그인 없음 Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset 사전 설정 저장 Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset 사전 설정 저장 Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin 플러그인 읽는 중 Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize 일반화 Click to normalize Invert Click to invert Smooth 부드럽게 Click to smooth Sine wave 사인 파형 Click for sine wave Triangle wave 삼각 파형 Click for triangle wave Click for saw wave Square wave 사각 파형 Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ 주파수 Filter Resonance: RES 해상도 Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify 증폭 Start of sample 샘플 시작 End of sample 샘플 끝 Reverse sample 샘플 역으로 Stutter Loopback point Loop mode Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Beat+Bassline 편집기 Play/pause current beat/bassline (Space) 현재 beat/bassline 재생/잠시 정지(Space) Add beat/bassline beat/bassline 더하기 Add automation-track 자동화 트랙 더하기 Stop playback of current beat/bassline (Space) 현재 beat/bassline 재생 중지 (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. 현재 beat/bassline를 재생하기 위하여 여기를 클릭. beat/bassline은 끝에 도달시 자동으로 반복됩니다. Click here to stop playing of current beat/bassline. 현재 beat/bassline 재생을 정지하기 위하여 여기를 클릭. Remove steps 단계 제거 Add steps 단계 더하기 bbTCOView Open in Beat+Bassline-Editor Beat+Bassline 편집기에서 ㅇ려기 Reset name 이름 초기화 Change name 이름 변경 Change color 색상 변경 Reset color to default bbTrack Beat/Bassline %1 Clone of %1 bitInvader Samplelength 샘플 길이 bitInvaderView Sample Length 샘플 길이 Sine wave 사인 파형 Triangle wave 삼각 파형 Saw wave 톱니 파형 Square wave 사각 파형 White noise wave 화이트 노이즈 파형 User defined wave 사용자 정의 파형 Smooth 부드럽게 Click here to smooth waveform. 파형을 부드럽게 하기 위하여 여기를 클릭 Interpolation 내삽 Normalize 일반화 Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. 사인 파형을 위해 클릭. Click here for a triangle-wave. 삼각 파형을 위해 여기를 클릭 Click here for a saw-wave. 톱니 파형을 위해 여기를 클릭 Click here for a square-wave. 사각 파형을 위해 여기를 클릭 Click here for white-noise. 화이트 노이즈를 위해 여기를 클릭 Click here for a user-defined shape. 사용자 정의를 위해 여기를 클릭 dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file 파일을 열 수 없음 Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Error Error while determining file-encoder device. Please try to choose a different output format. Rendering: %1% Export project to %1 %1로 프로젝트 내보내기 fader Please enter a new value between %1 and %2: %1 과 %2 사이 새로운 값을 입력하시오: graphModel Graph kickerInstrument Start frequency 시작 주파수 End frequency 끝 주파수 Gain 이득 Length Distortion Start Distortion End Envelope Slope Noise 잡음 Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: 시작 주파수: End frequency: 끝 주파수: Gain: 이득: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help 도움말(&H) Please enter a new value between -96.0 dBV and 6.0 dBV: -96.0 dBV 과 6.0 dBV 사이 새로운 값을 입력하시오: Please enter a new value between %1 and %2: %1 과 %2 사이 새로운 값을 입력하시오: ladspaBrowserView Available Effects 사용 가능 효과 Unavailable Effects 사용 불가능한 효과 Instruments 기기 Analysis Tools 분석 도구 Don't know 알 수 없음 This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: 형태: ladspaDescription Plugins 플러그인 Description 요약 ladspaPortDialog Ports 포트 Name 이름 Rate Direction 방향 Type 형태 Min < Default < Max 최소 < 기본 < 최대 Logarithmic SR Dependent SR 의존 Audio 오디오 Control 제어 Input 입력 Output 출력 Toggled 토글 Integer 정수 Float 유동 Yes lb302Synth VCF Cutoff Frequency VCF Cutoff 주파수 VCF Resonance VCF 공명 VCF Envelope Mod VCF 감싸기 모드 VCF Envelope Decay VCF 감싸기 감쇄 Distortion 왜곡 Waveform 파형 Slide Decay 슬라이드 감소 Slide 슬라이드 Accent Dead 24dB/oct Filter 24dB/oct 필터 lb302SynthView Cutoff Freq: Cutoff 주파수: Resonance: 공명: Env Mod: 환경 모드: Decay: 감쇄: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: 슬라이드 감쇄: DIST: Saw wave 톱니 파형 Click here for a saw-wave. Triangle wave 삼각 파형 Click here for a triangle-wave. 삼각 파형을 위하여 여기를 클릭 Square wave 사각 파형 Click here for a square-wave. 사각 파형을 위하여 여기를 클릭 Rounded square wave 둥근 사각 파형 Click here for a square-wave with a rounded end. 둥근 끝의 사가 파형을 위하여 여기를 클릭. Moog wave Click here for a moog-like wave. Sine wave 사인 파형 Click for a sine-wave. 사인 파형을 위해 클릭 White noise wave 화이트 노이즈 파형 Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion 왜곡 Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position 위치 Vibrato Gain 떨림 이득 Vibrato Freq 떨림 주파수 Stick Mix 스틱 믹스 Modulator 모듈레이트 Crossfade 크로스페이드 LFO Speed LFO 속도 LFO Depth ADSR Pressure 압력 Motion 모션 Speed 속도 Bowed Spread Marimba 마림바 Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files 없는 파일 Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument 기기 Spread Spread: Hardness Hardness: Position 위치 Position: 위치: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help opl2instrument Patch 패치 Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Volume organicInstrumentView Distortion: Volume: Randomise Osc %1 waveform: Osc %1 volume: Osc %1 panning: cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description 요약 없음 Instrument plugins 기기 플러그인 Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins 설치된 LADSPA 플러그인 목록 Filter for importing FL Studio projects into LMMS GUS-compatible patch instrument Additive Synthesizer for organ-like sounds Tuneful things to bang on VST-host for using VST(i)-plugins within LMMS Vibrating string modeler plugin for using arbitrary LADSPA-effects inside LMMS. LMMS안에서 임의 LADSPA 효과를 이용하기 위한 플러그인 Filter for importing MIDI-files into LMMS 미디 파일을 LMMS로 읽어오기 위한 필터 Instrument browser 기기 브라우저 Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. 각 노래 편집기, Beat+Bassline 편집기 또는 기존 기기 트랙으로 끌기 Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files 소리 글꼴 파일을 위한 재생기 Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes 프로젝트 박자 Put down your project notes here. 프로젝트 박자를 여기에 두시오. Edit Actions 작업 편집 &Undo 작업 취소(&U) Ctrl+Z &Redo 작업 재실행(&R) Ctrl+Y &Copy 복사(&C) Ctrl+C Cu&t 잘라내기(&T) Ctrl+X &Paste 붙여넣기(&P) Ctrl+V Format Actions 형식 작업 &Bold 진하게(&B) Ctrl+B &Italic 기울임(&I) Ctrl+I &Underline 밑줄(&U) Ctrl+U &Left 왼쪽(&L) Ctrl+L C&enter 중앙(&E) Ctrl+E &Right 오른쪽(&R) Ctrl+R &Justify 양쪽 배분(&J) Ctrl+J &Color... 색상(&C)... renameDialog Rename... 다른 이름으로... setupDialog Setup LMMS LMMS 설정 General settings 일반 설정 BUFFER SIZE 버퍼 크기 Reset to default-value 기본값으로 초기화 MISC 기타 Enable tooltips 도구 도움말 가능 Show restart warning after changing settings 설정 변경후 재실행 경고 보이기 Display volume as dBV dBV로 볼륨 보이기 Compress project files per default 기본 당 프로젝트 파일 압축 HQ-mode for output audio-device 출력 오디오 기기의 HQ 모드 LMMS working directory LMMS 작업 폴더 VST-plugin directory VST-플러그인 폴더 Artwork directory 아트작업 폴더 FL Studio installation directory FL Studio 설치 폴더 STK rawwave directory STK 원시 파형 폴더 Performance settings 실행 설정 UI effects vs. performance UI 효과 대 실행 Audio settings 오디오 설정 AUDIO INTERFACE 오디오 인터페이스 MIDI settings 미디 설정 MIDI INTERFACE 미디 인터페이스 OK 확인 Cancel 취소 Restart LMMS LMMS 재실행 Please note that most changes won't take effect until you restart LMMS! LMMS 재실행 전까지는 변경이 영향을 미치지 않습니다. Frames: %1 Latency: %2 ms 프레임: %1 래턴시: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Choose LMMS working directory LMMS 작업 폴더 선택 Choose your VST-plugin directory VST 플러그인 폴더 선택 Choose artwork-theme directory 아트워크 테마 폴더 선택 Choose FL Studio installation directory FL Studio 설치 폴더 선택 Choose LADSPA plugin directory LADSPA 플러그인 폴더 선택 Choose STK rawwave directory STK 원시 파형 폴더 선택 Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Paths 경로 LADSPA plugin paths LADSPA 플러그인 폴더 Default Soundfont File 기본 사운드글꼴 파일 Background artwork 배경 아트워크 Choose default SoundFont 기본 사운드글꼴 선택 Choose background artwork 배경 아트워크 선택 One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank 뱅크 Patch 패치 Gain 이득 Reverb 리버브 Reverb Roomsize 리버브 룸크기 Reverb Damping 리버브 댐핑 Reverb Width 리버브 너비 Reverb Level 리버브 레벨 Chorus 코러스 Chorus Lines 코러스 라인 Chorus Level 코러스 레벨 Chorus Speed 코러스 속도 Chorus Depth 코러스 깊이 sf2InstrumentView Open other SoundFont file 다른 사운드끌꼴 파일 열기 Click here to open another SF2 file 다른 SF2 파일을 열기 위하여 여기를 클릭 Choose the patch 패치 선택 Gain 이득 Apply reverb (if supported) 리버브 적용(지원시) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. 이 버튼은 리버브 효과 가능. 이것은 쿨 효과에 유용하다. 그러나 지원하는 파일에서만 작업이 가능. Reverb Roomsize: 리버브 룸크기: Reverb Damping: 리버브 댐핑: Reverb Width: 리버브 너비: Reverb Level: 리버브 레벨: Apply chorus (if supported) 코러스 적용(지원시) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: 코러스 라인: Chorus Level: 코러스 레벨: Chorus Speed: 코러스 속도: Chorus Depth: 코러스 심도: Open SoundFont file SoundFont2 Files (*.sf2) 음성글꼴2 파일 (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance 공명 Filter type 필터 형태 Voice 3 off Volume 볼륨 Chip model 칩 모델 sidInstrumentView Volume: 볼륨: Resonance: 공명: Cutoff frequency: High-Pass filter 하이패스 필터 Band-Pass filter 밴드패스 필터 Low-Pass filter 로우패스 필터 Voice3 Off MOS6581 SID MOS8580 SID Attack: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise 잡음 Sync 동기 Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod 링-모드 Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered 필터 When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test 테스트 Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo 탬포 Master volume 마스터 볼륨 Master pitch 마스터 피치 Project saved 저장된 프로젝트 The project %1 is now saved. 프로젝트 %1 이 지금 저장됨. Project NOT saved. 프로젝트가 저장 안됨 The project %1 was not saved! 프로젝트 %1이 저장되지 않음! Import file 파일 읽어오기 untitled 무제 Select file for project-export... 내보내기 위한 프로젝트 파일 선택... Empty project 빈 프로젝트 This project is empty so exporting makes no sense. Please put some items into Song Editor first! 이 프로젝트가 비어있어 내보내기가 무의미함. 몇 항목을 노래 편집기에 우선 두세요! MIDI sequences 미디 시퀀스 FL Studio projects FL Studio 프로젝트 All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE 넓게 Width: 너비: stereoEnhancerControls Width 너비 stereoMatrixControlDialog Left to Left Vol: 왼쪽에서 왼쪽 볼륨: Left to Right Vol: 왼쪽에서 오른쪽 볼륨: Right to Left Vol: 오른쪽에서 왼쪽 볼륨: Right to Right Vol: 오른쪽에서 오른쪽 볼륨: stereoMatrixControls Left to Left 왼쪽에서 왼쪽 Left to Right 왼쪽에서 오른쪽 Right to Left 오른쪽에서 왼쪽 Right to Right 오른쪽에서 오른쪽 timeLine Enable/disable auto-scrolling 자동 스크롤링 가능/불가능 Enable/disable loop-points 순환 점 가능/불가능 After stopping go back to begin 중지 후 처음으로 뒤로 이동 After stopping go back to position at which playing was started 중지 후 재생을 시작한 위치로 뒤로 이동 After stopping keep position 중지 후 위치 유지 Hint 힌트 Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted 무음 Solo 솔로 trackContentObject Muted 무음 trackContentObjectView Current position 현재 위치 Hint 힌트 Press <Ctrl> and drag to make a copy. <Ctrl> 누르고 복사본을 만들기 위하여 끌기 Current length 현재 길이 Press <Ctrl> for free resizing. 자유 크기 재조정하기 위하여 <Ctrl> 누르기 %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 를 %5:%6 로) Delete (middle mousebutton) 삭제 (중간 마우스버튼) Cut 잘라내기 Copy 복사 Paste 붙여넣기 Mute/unmute (<Ctrl> + middle click) 무음/무음해제 (<Ctrl> + 중간 클릭) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Actions for this track 이 트랙의 작업 Mute 무음 Mute this track 이 트랙을 무음 Solo 솔로 Clone this track 이 트랙을 복제 Remove this track 이 트랙을 제거 Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin 플러그인 읽는 중 Please wait while loading VST-plugin... VST 플러그인 읽은 동안 잠시 대기... Failed loading VST-plugin VST 플러그인 읽는 중 오류 The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 길이 %1 Impulse %1 Octave %1 vibedView Volume: 볼륨: The 'V' knob sets the volume of the selected string. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pick position: 위치 지정: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pickup position: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pan: The Pan knob determines the location of the selected string in the stereo field. Detune: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Length: 길이: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor Impulse 편집기 The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Enable waveform Click here to enable/disable waveform. String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Sine wave Triangle wave Saw wave Square wave White noise wave User defined wave Smooth Click here to smooth waveform. Normalize Click here to normalize waveform. &Help Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape 소리 %1 파형 Voice %1 sync 소리 %1 동기화 Voice %1 ring modulate 소리 %1 링 조정 Voice %1 filtered 소리 %1 필터됨 Voice %1 test 소리 %1 테스트 waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/nl.qm000066400000000000000000002267031247673406200156310ustar00rootroot00000000000000s9i?3;eAj=U?=Y@w?UAF$F$_zFH HYH<JJV`XDXD`]hMpAOpCO{T a-Ei<GY< IY=A>4AA+CAy{y8Tص50cTT[T\]sٽ7G7HcFWFWWL3HLh%95C6#CzyME UQD YQURCbSdS #}1N#}3NP(D8*$*y8*`*0Q*0{*03*0`*0*0*0*0+++N+a+b+į/N5ff6uq9gi>9kY>93 d@@dB!F|GGb:GʧHgI;BObz#S}AFS}CFSUIzSbIT.CTZ8UQUjEUjWVb8VbTVb^`VVqW,W>Zo Zok\szyRtURtbSv=m|}}U~#;;p_ Nϙ&viCeMN 7Q)ty eyurק1Pק3PJ #1un"Rd239Z; 7F@۴dOOX>OX߭P0LVaUo~uʭiĨՙߺo-Da3ɕ g3(^h(^<.eRor%Lt#%Ŋ9>GOGVXt>/gh~eNdqsXss%TI:)I[Y<OXZ.E]M]Y.KlhlhWpooU|Z7|Z(}"|}GC}H~z~ĩyxn#ڟĽk36 6uקA?oקC?ք)ܗj왞' =չ~ Y (|10g19;:JQq.` P`!`%k`%`%d Z2g5hhljztbrJ'www<w-9exBVuu!uauu5uiuj&ujiII2IaIZ_ƄƷPǃǶO Ȃ ȵl:XxU~DՔt LEEhhW3V u[ u @ΎD$0Θ%0-U$7eG7eH7UH?~F9Ez)QjQ^$fՑ}o.{Qk['w7kf(ffhtÞ+EU)ZH<5m<5Xo<5[<5]1<5<5<5s-Dphlj|Nw0EEEiox #EC1UC61^6{:gN:KM9.\N9Wjla\rgzp!z'~d"}#cFi~9l-J2eޔrf:ti > tW7N ; zyP6 YBL4*G~5n;I6UI UIwZSJczhFKw+ aUj>/>Bc22UDduTI/)S 6: 7U4ٚ$Ϟ-SEc-SEV-SE|-SE3h3hUG/Gx!_QFc?CjD{nqbfvS@e5345I54@4%"UUUdc0JyyryMeYq $ > )8] 6Ee 8e 8e 8e 9 Th p, w%[d w%{ p B1%  j w9Z = i z [ ] \U \U \U \U Eˍ # LUX! #CG %Ӵ 9K :_D Fym S ]0 fy}N g$%v% mb| u wJ ; T D ^ D x) D v D 9  ` UUX u 1v ` J ~ ˔ſ D N p +c - Y N Om STn \ \ u:r  $nX J V8 h0 45 Y: Y:_ Y:sG ~' ivd V ݈  "܂ $&y\ +  + s + r -# -#V =wnz V c.c c.cT c.c c.c ca c d̥< d̥qk d̥ t {2 {ް ̍ 7 JV ɈK 鼣8 .˙8 aoy{ bS#n c- c]k c^ c c* c l8m d _ % 1N 3O1 tu ɶ. Չ9 H Չ9z 3G orE.l ^ ;fn~i!&ʮ2t;}<)BfP &Q> YK]xad^dy<HxȘN4 o_7WmCggU&Z ` m42 yLq[ƳDi1OverAbout AboutDialogVolume:Volume:AmplifierControlDialog VolumeVolumeAmplifierControlsKANALENCHANNELSAudioAlsa::setupWidgetAPPARAATDEVICEAudioAlsa::setupWidgetVersterking:Amplify:AudioFileProcessorViewEindpunt: Endpoint:AudioFileProcessorViewMet deze knop word de sample achterste voren gespeeld. Dit is goed bruikbaar voor leuke effecten, zoals een 'reversed crash'.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView(Andere sample openenOpen other sampleAudioFileProcessorView Sample omdraaienReverse sampleAudioFileProcessorViewStartpunt: Startpoint:AudioFileProcessorViewKANALENCHANNELSAudioJack::setupWidgetCLIENT-NAAM CLIENT-NAMEAudioJack::setupWidgetKANALENCHANNELSAudioOss::setupWidgetAPPARAATDEVICEAudioOss::setupWidgetAPPARAATDEVICEAudioPortAudio::setupWidgetKANALENCHANNELSAudioPulseAudio::setupWidgetAPPARAATDEVICEAudioPulseAudio::setupWidgetAPPARAATDEVICEAudioSdl::setupWidget.Waarde &kopieren (%1%2)&Copy value (%1%2)AutomatableModel,Waarde &plakken (%1%2)&Paste value (%1%2)AutomatableModel$&Herstellen (%1%2) &Reset (%1%2)AutomatableModel|Alle geselecteerde waarden zijn naar het klembord gekopieerd. 1All selected values were copied to the clipboard.AutomationEditor,Automation-Editor - %1Automation Editor - %1AutomationEditor@Automation-Editor - geen PatternAutomation Editor - no patternAutomationEditorLKopieer geselecteerde waarden (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditorFKnip geselecteerde waarden (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor*Teken modus (Shift+D)Draw mode (Shift+D)AutomationEditor&Wis modus (Shift+E)Erase mode (Shift+E)AutomationEditorDPlak waarden van klembord (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorTHuidige pattern afspelen/pauseren (Spatie)"Play/pause current pattern (Space)AutomationEditorOpen aub een automation pattern met het context menu van een controller!EPlease open an automation pattern with the context menu of a control!AutomationEditorRAfspelen huidige pattern stoppen (Spatie)'Stop playing of current pattern (Space)AutomationEditor$Waarden gekopieerd Values copiedAutomationEditorNaam herstellen Reset nameAutomationPatternView KANAALCHANNELControllerConnectionDialogAnnulerenCancelControllerConnectionDialogIngang kanaal Input channelControllerConnectionDialogXMIDI-apparaat voor ontvangen van MIDI-events(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog &Help&HelpControllerView2x LowPass 2x LowPassDualFilterControlsAllpassAllpassDualFilterControlsBandpass csg BandPass csgDualFilterControlsBandpass czpg BandPass czpgDualFilterControls HiPassHiPassDualFilterControlsLowPassLowPassDualFilterControlsMoogMoogDualFilterControls NotchNotchDualFilterControls &Help&Help EffectViewGATEGATE EffectViewFreq x 100 Freq x 100EnvelopeAndLfoParameters0Moduleer Env-IntensiteitModulate Env-AmountEnvelopeAndLfoParametersAMTAMTEnvelopeAndLfoViewATTATTEnvelopeAndLfoViewAttack:Attack:EnvelopeAndLfoView|Klik hier, om de envelope-waarde door de LFO te laten regelen.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewDELDELEnvelopeAndLfoView Decay:Decay:EnvelopeAndLfoViewvSleep een willekeurige sample en plaats hem in dit venster.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoViewHOLDHOLDEnvelopeAndLfoViewTipHintEnvelopeAndLfoView Hold:Hold:EnvelopeAndLfoView&MODULEER-ENV-INTENSMODULATE ENV-AMOUNTEnvelopeAndLfoView,Modulatie-intensiteit:Modulation amount:EnvelopeAndLfoViewPredelay: Predelay:EnvelopeAndLfoViewRELRELEnvelopeAndLfoViewRelease:Release:EnvelopeAndLfoViewSPDSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewSustain:Sustain:EnvelopeAndLfoViewRGebruik deze knop om de attack-tijd van de huidige LFO in te stellen. Hoe groter de waarde, hoe langer het duurt voordat de LFO aan zijn maximaal ingestelde waarde komt.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewGebruik deze knop om de attack-tijd van de huidige envelope in te stellen. Dit is de tijd welke de envelope nodig heeft om aan zijn maximale waarde te komen. Kies een korte tijd voor bv. piano's en een lange tijd voor bv. strijkers.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewGebruik deze knop om de decay-tijd van de huidige envelope in te stellen. Dit is de tijd die nodig is om van het maximale attack-niveau naar het sustain-niveau te gaan. Voor bv. piano moet je een lage waarde kiezen.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewjGebruik deze knop voor het instellen van de hold-tijd van de huidige LFO. Hoe groter de waarde, hoe groter het effect van de LFO op zijn doel heeft (bv. volume, cutoff-frequentie). Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewvGebruik deze knop voor het instellen van de modulatiewaarde ven de huidige LFO. Hoe groter de waarde, hoe groter het effect van de LFO op zijn doel heeft (bv. volume, cutoff-frequentie). Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewGebruik deze knop om de modulatiewaarde voor de huidige envelope in te stellen. Hoe groter de waarde, hoe meer het gewenste doel (bv. volume of cutoff-frequentie) word beinvloed door de envelope.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView:Gebruik deze knop om de attack-tijd van de huidige envelope in te stellen. Dit is de tijd die nodig is totdat de envelope zijn maximale waarde heeft bereikt.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView.Gebruik deze knop om de predelay-tijd van de huidige LFO in te stellen. Hoe groter de waarde, hoe langer het duurt voordat de LFO begint te oscilleren.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewGebruik deze knop om de release-tijd van de huidige envelope in te stellen. Dit is de tijd die de envelope nodig heeft om van sustain-niveau weer naar nul te gaan. Kies een grote waarde voor bijvoorbeeld strijkers.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewGebruik deze knop voor het instellen van de LFO-snelheid. Hoe groter de waarde, hoe sneller de LFO oscilleerd en hoe sneller het effect is.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView<Gebruik deze knop om het sustain-niveau van de huidige envelope in te stellen. Dit is de waarde van de envelope welke word aangehouden zolang de noot aanhoud.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView@envelope-waarde door LFO regelen#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoViewAnnulerenCancelExportProjectDialog &Help&HelpFxLine DempenMuteFxMixerView::FxChannelView"Arpeggio richtingArpeggio directionInstrumentFunctionArpeggioArpeggio gate Arpeggio gateInstrumentFunctionArpeggioArpeggio modus Arpeggio modeInstrumentFunctionArpeggioArpeggio bereikArpeggio rangeInstrumentFunctionArpeggioArpeggio tijd Arpeggio timeInstrumentFunctionArpeggioArpeggio soort Arpeggio typeInstrumentFunctionArpeggioVrijFreeInstrumentFunctionArpeggioGesorteerdSortInstrumentFunctionArpeggioSynchroonSyncInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGGIOARPEGGIOInstrumentFunctionArpeggioViewArpeggio gate:Arpeggio gate:InstrumentFunctionArpeggioView Arpeggio bereik:Arpeggio range:InstrumentFunctionArpeggioViewArpeggio tijd:Arpeggio time:InstrumentFunctionArpeggioViewRichting: Direction:InstrumentFunctionArpeggioViewGATEGATEInstrumentFunctionArpeggioView Modus:Mode:InstrumentFunctionArpeggioView BEREIKRANGEInstrumentFunctionArpeggioViewTIJDTIMEInstrumentFunctionArpeggioView6Gebruik deze knop om de arpeggio-tijd in miliseconden in te stellen. De arpeggio-tijd geeft aan hoe lang elke noot binnen de arpeggio gespeeld moet worden.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoktave(n) octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13#913#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking madd96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#119#11InstrumentFunctionNoteStacking9#59#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStackingAeolianAeolianInstrumentFunctionNoteStackingArabischArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingAkkoord bereik Chord rangeInstrumentFunctionNoteStackingAkkoord soort Chord typeInstrumentFunctionNoteStackingVermindert DiminishedInstrumentFunctionNoteStackingDominante BebopDominant bebopInstrumentFunctionNoteStacking DorianDorianInstrumentFunctionNoteStackingEnigmatisch EnigmaticInstrumentFunctionNoteStacking"Harmonisch mineurHarmonic minorInstrumentFunctionNoteStackingZigeunermineurHungarian minorInstrumentFunctionNoteStackingLocrischLocrianInstrumentFunctionNoteStackingLydischLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9#11Maj9#11InstrumentFunctionNoteStacking Maj9#5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStacking Majb5Majb5InstrumentFunctionNoteStacking MajeurMajorInstrumentFunctionNoteStackingMajeur bebop Major bebopInstrumentFunctionNoteStacking&Pentatonisch majeurMajor pentatonicInstrumentFunctionNoteStacking Melodisch mineur Melodic minorInstrumentFunctionNoteStacking&Pentatonisch mineurMinor pentatonicInstrumentFunctionNoteStackingMixolydisch MixolydianInstrumentFunctionNoteStackingNeopolitanisch NeopolitanInstrumentFunctionNoteStacking.Neopolitanisches mineurNeopolitan minorInstrumentFunctionNoteStackingPhrygisch PhrygolydianInstrumentFunctionNoteStackingHele noot Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9b5m9b5InstrumentFunctionNoteStacking madd9madd9InstrumentFunctionNoteStacking minb5minb5InstrumentFunctionNoteStacking mineurminorInstrumentFunctionNoteStacking oktaafoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStackingAkkoord bereik: Chord range:"InstrumentFunctionNoteStackingView BEREIKRANGE"InstrumentFunctionNoteStackingViewoktave(n) octave(s)"InstrumentFunctionNoteStackingView KANAALCHANNELInstrumentMidiIOView2x LowPass 2x LowPassInstrumentSoundShapingAllpassAllpassInstrumentSoundShapingBandpass csg BandPass csgInstrumentSoundShapingBandpass czpg BandPass czpgInstrumentSoundShaping CUTOFFCUTOFFInstrumentSoundShapingFiltersoort Filter typeInstrumentSoundShaping HiPassHiPassInstrumentSoundShapingLowPassLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShaping NotchNotchInstrumentSoundShapingQ/Resonantie Q/ResonanceInstrumentSoundShaping VolumeVolumeInstrumentSoundShaping FILTERFILTERInstrumentSoundShapingView<Hier kun je een ingebouwd filter selecteren, welke je in dit kanaal kunt gebruiken. Filters zijn zeer belangrijk om het karakter van een geluid te veranderen.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewDOELTARGETInstrumentSoundShapingViewGrandtoon Base noteInstrumentTrackFX-Kanaal FX channelInstrumentTrack VolumeVolumeInstrumentTrackMet deze knop kun je het volume van het geopende kanaal instellen. + middelklik)#Mute/unmute ( + middle click) SampleTCOViewPlakkenPaste SampleTCOViewNdubbel-klik om een sample te selecterendouble-click to select sample SampleTCOViewSample spoor Sample track SampleTrack VolumeVolume SampleTrack.Beat/Bassline toevoegenAdd beat/bassline SongEditor,Sample spoor toevoegenAdd sample-track SongEditor&Klik hier, als je de gehele song wil afspelen. Het afspelen start bij de song-positie-marker (groen). Je kunt ook verplaatsen tijdens het afspelen.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditor Klik hier, wanneer je het afspelen van de song wilt stoppen. De song-position-marker zal weer naar het begin van je song worden gezet.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor.Kan bestand niet openenCould not open file SongEditor4Kan bestand niet schrijvenCould not write file SongEditorTeken modus Draw mode SongEditorPBewerk modus (selecteren en verplaatsen)Edit mode (select and move) SongEditor$High quality modusHigh quality mode SongEditor"Master toonhoogte Master pitch SongEditorMaster volume Master volume SongEditor,Song afspelen (Spatie)Play song (Space) SongEditorSong-Editor Song-Editor SongEditor6Stop afspelen song (Spatie)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditor(Waarde: %1 semitonenValue: %1 semitones SongEditorWaarde: %1% Value: %1% SongEditor"master toonhoogte master pitch SongEditormaster volume master volume SongEditorafspeelsnelheid tempo of song SongEditor &Help&Help TempoSyncKnob16e noot 16th note TempoSyncKnob32e noot 32nd note TempoSyncKnobAchtste noot8th note TempoSyncKnobAcht beats Eight beats TempoSyncKnobHalve noot Half note TempoSyncKnob&Geen synchronisatieNo Sync TempoSyncKnobKwart noot Quarter note TempoSyncKnob:Met 16e noot gesynchroniseerdSynced to 16th Note TempoSyncKnob:Met 32e noot gesynchroniseerdSynced to 32nd Note TempoSyncKnobBMet achtste noot gesynchroniseerdSynced to 8th Note TempoSyncKnob>Met acht beats gesynchroniseerdSynced to Eight Beats TempoSyncKnob>Met halve noot gesynchroniseerdSynced to Half Note TempoSyncKnob>Met kwart noot gesynchroniseerdSynced to Quarter Note TempoSyncKnob<Met hele noot gesynchroniseerdSynced to Whole Note TempoSyncKnob(Tempo synchronisatie Tempo Sync TempoSyncKnobHele noot Whole note TempoSyncKnobAnnulerenCancelTrackContainerNKan geen filter vinden voor het te importeren bestand %1. Je zult dit bestand met behulp van andere software moeten converteren naar een door LMMS ondersteund formaat.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer6Kan bestand niet importerenCouldn't import fileTrackContainer.Kan bestand niet openenCouldn't open fileTrackContainer Kan bestand %1 niet openen voor het schrijven. Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en probeer het opnieuw!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer2Importeren FLP-bestand...Importing FLP-file...TrackContainer4Importeren MIDI-bestand...Importing MIDI-file...TrackContainer Project laden...Loading project...TrackContainerWachten aub...Please wait...TrackContainer2Osc %1 grove ontstemming:Osc %1 coarse detuning:TripleOscillatorViewJOscillator %1 Fijn ontstemming links:Osc %1 fine detuning left:TripleOscillatorViewLOscillator %1 Fijn ontstemming rechts:Osc %1 fine detuning right:TripleOscillatorView*Oscillator %1 Balans:Osc %1 panning:TripleOscillatorViewBOscillator %1 fase-verschuiving: Osc %1 phase-offset:TripleOscillatorViewLOscillator %1 stereo fase-veschuiving:Osc %1 stereo phase-detuning:TripleOscillatorView*Oscillator %1 Volume:Osc %1 volume:TripleOscillatorViewMet deze knop stel je de grove ontstemming van oscillator %1 in. Je kunt de oscillator 12 seminote (1oktaaf) naar boven of beneden ontstemmen.Dit is bruikbaar voor het maken van geluiden met een akkoord.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewMet deze knop stel je de fijne ontstemming van oscillator %1 in voor het linker kanaal. Je kunt fijn-ontstemmen met een bereik van -100 cents en +100 cents. Dit is bruikbaar voor het maken van 'vette' geluiden.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewMet deze knop stel je de fijne ontstemming van oscillator %1 in voor het rechter kanaal. Je kunt fijn-ontstemmen met een bereik van -100 cents en +100 cents. Dit is bruikbaar voor het maken van 'vette' geluiden.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewXMet deze knop stel je de balans in voor oscillator %1. Een waarde van -100 betekent 100% links en een waarde van 100 verplaatst het geluid volledig naar het rechter kanaal.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewPMet deze knop stel je de fase-verschuiving van oscillator %1 in. Dit betekend dat je het punt in de oscillatie waar de oscillator begint te oscilleren kunt verplaatsen.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorView,Met deze knop stel je het volume van oscillator %1 in. Als deze op 0 staat is de oscillator uit. Anders hoor je de oscillator zo hard als jij hem wil.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorView gradendegreesTripleOscillatorViewsemitonen semitonesTripleOscillatorViewKlik hier, wanneer je de Grafische Gebruiker Interface (GUI) van je VST-plugin wilt tonen/verbergen.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewHKlik hier, wanner je een andere VST-plugin wilt openen. Nadat je op deze knop gedrukt hebt zal er een bestand-openen-dialoog openen en kun je je bestand selecteren.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentView*DLL-Bestanden (*.dll)DLL-files (*.dll)VestigeInstrumentView*EXE-Bestanden (*.exe)EXE-files (*.exe)VestigeInstrumentView.Geen VST-plugin geladenNo VST-plugin loadedVestigeInstrumentViewOpen VST-pluginOpen VST-pluginVestigeInstrumentView*Open ander VST-pluginOpen other VST-pluginVestigeInstrumentView,Alle noten verwijderenTurn off all notesVestigeInstrumentViewPlugin ladenLoading plugin VstPluginNormaliseren Normalize WatsynViewSinus golf Sine wave WatsynViewUitstrijkerSmooth WatsynViewVierkants golf Square wave WatsynViewDriehoeks golf Triangle wave WatsynViewVersterkingAmplifyaudioFileProcessor$Eind van de sample End of sampleaudioFileProcessor Sample omdraaienReverse sampleaudioFileProcessor&Begin van de sampleStart of sampleaudioFileProcessor.Beat/Bassline toevoegenAdd beat/basslinebbEditorSteps toevoegen Add stepsbbEditor(Beat+Bassline EditorBeat+Bassline EditorbbEditor`Huidige beat/bassline afspelen/pauseren (Spatie)(Play/pause current beat/bassline (Space)bbEditor"Steps verwijderen Remove stepsbbEditor Kleur veranderen Change color bbTCOView<In Beat+Bassline-Editor openenOpen in Beat+Bassline-Editor bbTCOViewNaam herstellen Reset name bbTCOView Beat/Bassline %1Beat/Bassline %1bbTrackSamplelengte Samplelength bitInvaderInterpolatie InterpolationbitInvaderViewNormaliseren NormalizebitInvaderViewSample Lengte Sample LengthbitInvaderViewZaagtand golfSaw wavebitInvaderViewSinus golf Sine wavebitInvaderViewUitstrijkerSmoothbitInvaderViewVierkants golf Square wavebitInvaderViewDriehoeks golf Triangle wavebitInvaderView8Gebruiker gedefinieerde golfUser defined wavebitInvaderViewWitte ruisWhite noise wavebitInvaderView.Kan bestand niet openenCould not open fileexportProjectDialog2Exporteer project naar %1Export project to %1exportProjectDialogVVoer aub. een waarde in tussen %1 en %2 in:+Please enter a new value between %1 and %2:fader &Help&HelpknobVVoer aub. een waarde in tussen %1 en %2 in:+Please enter a new value between %1 and %2:knobhVoer aub. een waarde tussen -96.0 dBV en 6.0 dBV in:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob Soort:Type:ladspaBrowserView Decay:Decay:lb302SynthViewZaagtand golfSaw wavelb302SynthViewSinus golf Sine wavelb302SynthViewVierkants golf Square wavelb302SynthViewDriehoeks golf Triangle wavelb302SynthViewWitte ruisWhite noise wavelb302SynthViewDECDEClb303SynthView Decay:Decay:lb303SynthView &Help&HelpnineButtonSelector VolumeVolumeorganicInstrument*Oscillator %1 Balans:Osc %1 panning:organicInstrumentView*Oscillator %1 Volume:Osc %1 volume:organicInstrumentView.Oscillator %1 Golfvorm:Osc %1 waveform:organicInstrumentViewWillekeurig RandomiseorganicInstrumentViewVolume:Volume:organicInstrumentView^Additive Synthesizer voor orgelachtige geluiden*Additive Synthesizer for organ-like sounds pluginBrowserlFilter voor importeren van FL Studio Projecten in LMMS1Filter for importing FL Studio projects into LMMS pluginBrowser^Filter, om MIDI-bestanden in LMMS te importeren)Filter for importing MIDI-files into LMMS pluginBrowser$Instrument PluginsInstrument plugins pluginBrowserhVST-Host voor bebruik van VST(i)-Plugins binnen LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowserDVibrerende snaarinstrument modelerVibrating string modeler pluginBrowser"geen beschrijvingno description pluginBrowser&Vet&Bold projectNotes&Kleur... &Color... projectNotes&Kopieren&Copy projectNotes&Cursief&Italic projectNotes&Uitgevuld&Justify projectNotes &Links&Left projectNotes&Plakken&Paste projectNotes&Herstellen&Redo projectNotes&Rechts&Right projectNotes&Onderstrepen &Underline projectNotes&Ongedaan maken&Undo projectNotesC&entrerenC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotesK&nippenCu&t projectNotesBewerken Edit Actions projectNotes OpmaakFormat Actions projectNotes Project notities Project notes projectNotes@Plaats hier je Project notities.!Put down your project notes here. projectNotesHernoemen... Rename... renameDialogAUDIO INTERFACEAUDIO INTERFACE setupDialogArtwork mapArtwork directory setupDialog$Audio instellingenAudio settings setupDialogBUFFERGROOTTE BUFFER SIZE setupDialogAnnulerenCancel setupDialog<Kies FL Studio installatie map'Choose FL Studio installation directory setupDialog$Kies LMMS-werkmap Choose LMMS working directory setupDialog0Artwork-thema map kiezenChoose artwork-theme directory setupDialog,Kies je VST-Plugin map Choose your VST-plugin directory setupDialog(Volume in dBV tonen Display volume as dBV  setupDialog2FL Studio installatie map FL Studio installation directory setupDialog8Frames: %1 Vertraging: %2 msFrames: %1 Latency: %2 ms setupDialog*Algemene instellingenGeneral settings setupDialogHier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogHier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, JACK, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialogHHier kun je de interne buffer-grootte instellen welke door LMMS gebruikt zal worden. Lagere waarden zorgen voor een lagere latency (vertraging) maar kunnen de geluidskwaliteit en de performance wel negatief beinvloeden. Dit geld zeker voor oudere computers en systemen zonder realtime-kernel.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialogLMMS werkmapLMMS working directory setupDialogMIDI INTERFACEMIDI INTERFACE setupDialog"MIDI Instellingen MIDI settings setupDialog4VERSCHILLENDE INSTELLINGENMISC setupDialogOKOK setupDialog0Performance instellingenPerformance settings setupDialogHoud er rekening mee dat je LMMS opnieuw moet opstarten om sommige instellingen te activeren!GPlease note that most changes won't take effect until you restart LMMS! setupDialogBTerugzetten naar standaardwaardenReset to default-value setupDialogLMMS herstarten Restart LMMS setupDialogLMMS instellen Setup LMMS setupDialog6UI effecten vs. performanceUI effects vs. performance setupDialogVST-Plugin mapVST-plugin directory setupDialogFiltersoort Filter type sidInstrument VolumeVolume sidInstrumentAttack:Attack:sidInstrumentView Decay:Decay:sidInstrumentViewRelease:Release:sidInstrumentViewSustain:Sustain:sidInstrumentViewSynchroonSyncsidInstrumentViewVolume:Volume:sidInstrumentView$Bestand importeren Import filesong"Master toonhoogte Master pitchsongMaster volume Master volumesong0Project NIET opgeslagen.Project NOT saved.song$Project opgeslagen Project savedsongXSelecteer bestand voor exporteren project...!Select file for project-export...song TempoTemposong@Het project %1 is nu opgeslagen.The project %1 is now saved.songHHet project %1 werd niet opgeslagen!The project %1 was not saved!songnaamloosuntitledsong6Na stoppen terug naar beginAfter stopping go back to begintimeLinepNa stoppen terug naar positie waar afspelen werd gestart?After stopping go back to position at which playing was startedtimeLine:Na stoppen op positie blijvenAfter stopping keep positiontimeLineJAutomatisch scrollen in-/uitschakelenEnable/disable auto-scrollingtimeLine8Loop-punten in-/uitschakelenEnable/disable loop-pointstimeLineTipHinttimeLine.%1:%2 (%3:%4 tot %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectViewKopierenCopytrackContentObjectViewHuidige lengteCurrent lengthtrackContentObjectViewHuidige positieCurrent positiontrackContentObjectViewKnippenCuttrackContentObjectView@Verwijderen (middelste muisknop)Delete (middle mousebutton)trackContentObjectViewTipHinttrackContentObjectViewNDempen/geluid aan (<Ctrl> + middelklik)#Mute/unmute ( + middle click)trackContentObjectViewPlakkenPastetrackContentObjectViewTDruk <Ctrl> voor vrije grootteverandering.Press for free resizing.trackContentObjectView*Acties voor dit spoorActions for this tracktrackOperationsWidget Dit spoor klonenClone this tracktrackOperationsWidget DempenMutetrackOperationsWidgetDruk <Ctrl> tijdens klikken op move-grip om een nieuwe drag'n'drop-actie te starten.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget*Dit spoor verwijderenRemove this tracktrackOperationsWidget0VST-plugin laden misluktFailed loading VST-pluginvestigeInstrumentPlugin ladenLoading pluginvestigeInstrumentPWacht aub, de VST-plugin word geladen...'Please wait while loading VST-plugin...vestigeInstrumentDDe VST-plugin %1 kan om onbekende reden niet worden geladen. Als het wel werkt met andere VST-software onder Linux, neem dan contact op met een LMMS-ontwikkelaar!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrument &Help&Help vibedViewhKlik hier, om een golfvorm te activeren/deactiveren.&Click here to enable/disable waveform. vibedViewTKlik hier, om de golfvorm te normaliseren.!Click here to normalize waveform. vibedViewOntstemming:Detune: vibedView$Golfvorm activerenEnable waveform vibedViewRuigheid: Fuzziness: vibedView2Impuls of begininstellingImpulse or initial state vibedViewLengte:Length: vibedViewNormaliseren Normalize vibedViewBalans:Pan: vibedView Aanslag-positie:Pick position: vibedViewPickup positie:Pickup position: vibedViewZaagtand golfSaw wave vibedViewSinus golf Sine wave vibedViewUitstrijkerSmooth vibedViewVierkants golf Square wave vibedViewHardheid snaar:String stiffness: vibedView@De 'Imp'-knop legt vast of de golfvorm in de grafiek word behandeld als een impulsgever op de snaar tijdens aanslaan, of als de begininstelling van een snaar. The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewDe 'P' knop stelt de aanslagpositie in van de snaar aangeven. Hoe lager de waarde hoe dichter er bij de brug word aangeslagen.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedView$De 'PU' knop stelt de positie in waar de trilling van de snaar word opgepikt. Hoe lager de waarde, hoe dichter de pickup bij de brug geplaatst is.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewVDe 'S' knop stelt de stijfheid in van de geselecteerde snaar. De stijfheid van de snaar bepaalt hoe lang de snaar uittrilt. Hoe lager de waarde, hoe langer de snaar trilt.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewvDe 'V' knop stelt het volume in van de geselecteerde snaar.4The 'V' knob sets the volume of the selected string. vibedViewzDe ontstemknop verandert de toonhoogte van de aangelsgen snaar. Instellingen lager dan 0 zullen het geluid vlakker laten klinken, terwijl het geluid met waarden boven 0 scherper zal worden.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedView0De lengteknop stelt de lengte van de geselecteerde snaar in. Langere snaren klinken langer en helderder, maar dit vergt wel weer meer van de processor. The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewlDe oktaaf-kiezer word gebruikt voor het kiezen met welke harmonische van de noot de snaar zal klinken. Bij '-2' betekent dit bv. dat de snaar 2 oktaven onder de grondtoon ('F') komt.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewDe Balans knop bepaalt de plek van het geluid in het stereo-beeld. PThe Pan knob determines the location of the selected string in the stereo field. vibedViewfDe Slap knop voegt ruigheid toe aan de geselecteerde snaar en is het meest merkbaar in de attack-fase. Tevens kan dit gebruikt worden om de snaar meer 'metallic' te laten klinken.The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewDe snaar-kiezer word gebruikt voor het kiezen van de snar welke bewerkt word. Een Vibed instrument kan tot 9 individueel trillende snaren bevatten. De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de geselecteerde snaar actief is.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewzDe golfvorm bewerker levert controle over de aanvangstoestand of impuls welke word gebruikt om een snaar te laten trillen. De knoppen aan de rechterkant van de grafiek geven aan welke golfvorm geselecteerd is. De '?' knop laadt een golfvorm-bestand-alleen de eerste 128 samples worden geladen. De golfvorm kan ook in de grafiek getekend worden. De 'S' knop zal de golfvorm uitstrijken (egaler maken). De 'N; knop zal de golfvorm normaliseren.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedViewDriehoeks golf Triangle wave vibedView8Gebruiker gedefinieerde golfUser defined wave vibedViewVibed modeleert tot 9 individuele snaren. De 'Snaren' kiezer maakt het mogelijk om de geselecteerde snaar te bewerken. Met 'Imp' kiezer geef je aan of de grafiek de impuls of de beginwaarde weergeeft. Met de 'Octave' kiezer selecteer je de harmonischen waar de snaar mee trilt. De grafiek geeft je de mogelijkheid de beginwaarde en de impuls te beheren om de snaar in beweging te zetten. De 'V' knop stelt het volume in. De 'S' knop stelt de stijfheid in. De 'P' knop stelt de aanslagpositie in. De 'PU' knop stelt de positie van de pichup in. 'Pan' (balans) en 'Detune' (ontstemming) behoeven geen uitleg. De 'Slap' knop voegt wat ruigheid toe aan het geluid van de snaar. De lengteknop stelt de lengte van de snaar in. De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de snaar actief is in het huidige instrument.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewVolume:Volume: vibedViewWitte ruisWhite noise wave vibedView|Klik om de master-output visuallisatie in- of uit te schakelen6click to enable/disable visualization of master-outputvisualizationWidgetlmms-1.1.3/data/locale/nl.ts000066400000000000000000011077601247673406200156440ustar00rootroot00000000000000 AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About Over LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL Volume: Volume: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Volume Panning Left gain Right gain AudioAlsa::setupWidget DEVICE APPARAAT CHANNELS KANALEN AudioFileProcessorView Open other sample Andere sample openen Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample Sample omdraaien If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Met deze knop word de sample achterste voren gespeeld. Dit is goed bruikbaar voor leuke effecten, zoals een 'reversed crash'. Amplify: Versterking: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: Startpunt: Endpoint: Eindpunt: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME CLIENT-NAAM CHANNELS KANALEN AudioOss::setupWidget DEVICE APPARAAT CHANNELS KANALEN AudioPortAudio::setupWidget BACKEND DEVICE APPARAAT AudioPulseAudio::setupWidget DEVICE APPARAAT CHANNELS KANALEN AudioSdl::setupWidget DEVICE APPARAAT AutomatableModel &Reset (%1%2) &Herstellen (%1%2) &Copy value (%1%2) Waarde &kopieren (%1%2) &Paste value (%1%2) Waarde &plakken (%1%2) Edit song-global automation Connected to %1 Connected to controller Edit connection... Remove connection Connect to controller... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Huidige pattern afspelen/pauseren (Spatie) Stop playing of current pattern (Space) Afspelen huidige pattern stoppen (Spatie) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. Draw mode (Shift+D) Teken modus (Shift+D) Erase mode (Shift+E) Wis modus (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) Knip geselecteerde waarden (Ctrl+X) Copy selected values (Ctrl+C) Kopieer geselecteerde waarden (Ctrl+C) Paste values from clipboard (Ctrl+V) Plak waarden van klembord (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern Automation-Editor - geen Pattern Automation Editor - %1 Automation-Editor - %1 Please open an automation pattern with the context menu of a control! Open aub een automation pattern met het context menu van een controller! Values copied Waarden gekopieerd All selected values were copied to the clipboard. Alle geselecteerde waarden zijn naar het klembord gekopieerd. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Open in Automation editor Clear Reset name Naam herstellen Change name %1 Connections Disconnect "%1" Set/clear record AutomationTrack Automation track BassBoosterControlDialog FREQ Frequency: GAIN Gain: RATIO Ratio: BassBoosterControls Frequency Gain Ratio CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 ControllerConnectionDialog Connection Settings MIDI CONTROLLER Input channel Ingang kanaal CHANNEL KANAAL Input controller CONTROLLER Auto Detect MIDI-devices to receive MIDI-events from MIDI-apparaat voor ontvangen van MIDI-events USER CONTROLLER MAPPING FUNCTION OK OK Cancel Annuleren LMMS Cycle Detected. ControllerRackView Controller Rack Add Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Controllers are able to automate the value of a knob, slider, and other controls. Rename controller Enter the new name for this controller &Remove this plugin &Help &Help DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass LowPass HiPass HiPass BandPass csg Bandpass csg BandPass czpg Bandpass czpg Notch Notch Allpass Allpass Moog Moog 2x LowPass 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Wet/Dry mix Gate Decay EffectChain Effects enabled EffectRackView EFFECTS CHAIN Add effect EffectSelectDialog Add effect Plugin description EffectView Toggles the effect on or off. On/Off W/D Wet Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY Time: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE GATE Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Move &down &Remove this plugin &Help &Help EnvelopeAndLfoParameters Predelay Attack Hold Decay Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Freq x 100 Modulate Env-Amount Moduleer Env-Intensiteit EnvelopeAndLfoView DEL DEL Predelay: Predelay: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Gebruik deze knop om de attack-tijd van de huidige envelope in te stellen. Dit is de tijd die nodig is totdat de envelope zijn maximale waarde heeft bereikt. ATT ATT Attack: Attack: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Gebruik deze knop om de attack-tijd van de huidige envelope in te stellen. Dit is de tijd welke de envelope nodig heeft om aan zijn maximale waarde te komen. Kies een korte tijd voor bv. piano's en een lange tijd voor bv. strijkers. HOLD HOLD Hold: Hold: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Gebruik deze knop voor het instellen van de hold-tijd van de huidige LFO. Hoe groter de waarde, hoe groter het effect van de LFO op zijn doel heeft (bv. volume, cutoff-frequentie). DEC DEC Decay: Decay: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Gebruik deze knop om de decay-tijd van de huidige envelope in te stellen. Dit is de tijd die nodig is om van het maximale attack-niveau naar het sustain-niveau te gaan. Voor bv. piano moet je een lage waarde kiezen. SUST SUST Sustain: Sustain: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Gebruik deze knop om het sustain-niveau van de huidige envelope in te stellen. Dit is de waarde van de envelope welke word aangehouden zolang de noot aanhoud. REL REL Release: Release: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Gebruik deze knop om de release-tijd van de huidige envelope in te stellen. Dit is de tijd die de envelope nodig heeft om van sustain-niveau weer naar nul te gaan. Kies een grote waarde voor bijvoorbeeld strijkers. AMT AMT Modulation amount: Modulatie-intensiteit: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Gebruik deze knop om de modulatiewaarde voor de huidige envelope in te stellen. Hoe groter de waarde, hoe meer het gewenste doel (bv. volume of cutoff-frequentie) word beinvloed door de envelope. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Gebruik deze knop om de predelay-tijd van de huidige LFO in te stellen. Hoe groter de waarde, hoe langer het duurt voordat de LFO begint te oscilleren. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Gebruik deze knop om de attack-tijd van de huidige LFO in te stellen. Hoe groter de waarde, hoe langer het duurt voordat de LFO aan zijn maximaal ingestelde waarde komt. SPD SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Gebruik deze knop voor het instellen van de LFO-snelheid. Hoe groter de waarde, hoe sneller de LFO oscilleerd en hoe sneller het effect is. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Gebruik deze knop voor het instellen van de modulatiewaarde ven de huidige LFO. Hoe groter de waarde, hoe groter het effect van de LFO op zijn doel heeft (bv. volume, cutoff-frequentie). Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT MODULEER-ENV-INTENS Click here to make the envelope-amount controlled by this LFO. Klik hier, om de envelope-waarde door de LFO te laten regelen. control envelope-amount by this LFO envelope-waarde door LFO regelen ms/LFO: ms/LFO: Hint Tip Drag a sample from somewhere and drop it in this window. Sleep een willekeurige sample en plaats hem in dit venster. Click here for random wave. ExportProjectDialog Export project Output File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel Annuleren Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &Help FxMixer Master FX %1 FxMixerView Rename FX channel Enter the new name for this FX channel FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute Dempen Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio type Arpeggio soort Arpeggio range Arpeggio bereik Arpeggio time Arpeggio tijd Arpeggio gate Arpeggio gate Arpeggio direction Arpeggio richting Arpeggio mode Arpeggio modus Up Down Up and down Random Free Vrij Sort Gesorteerd Sync Synchroon Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE BEREIK Arpeggio range: Arpeggio bereik: octave(s) oktave(n) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME TIJD Arpeggio time: Arpeggio tijd: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Gebruik deze knop om de arpeggio-tijd in miliseconden in te stellen. De arpeggio-tijd geeft aan hoe lang elke noot binnen de arpeggio gespeeld moet worden. GATE GATE Arpeggio gate: Arpeggio gate: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: Richting: Mode: Modus: InstrumentFunctionNoteStacking octave oktaaf Major Majeur Majb5 Majb5 minor mineur minb5 minb5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 madd9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9#5 9b5 9b5 9#11 9#11 9b13 9b13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9#5 Maj9#11 Maj9#11 m9 m9 madd9 madd9 m9b5 m9b5 m9-Maj7 m9-Maj7 11 11 11b9 11b9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Harmonisch mineur Melodic minor Melodisch mineur Whole tone Hele noot Diminished Vermindert Major pentatonic Pentatonisch majeur Minor pentatonic Pentatonisch mineur Jap in sen Major bebop Majeur bebop Dominant bebop Dominante Bebop Blues Blues Arabic Arabisch Enigmatic Enigmatisch Neopolitan Neopolitanisch Neopolitan minor Neopolitanisches mineur Hungarian minor Zigeunermineur Dorian Dorian Phrygolydian Phrygisch Lydian Lydisch Mixolydian Mixolydisch Aeolian Aeolian Locrian Locrisch Chords Chord type Akkoord soort Chord range Akkoord bereik Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE BEREIK Chord range: Akkoord bereik: octave(s) oktave(n) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL KANAAL VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME Volume Volume CUTOFF CUTOFF Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Filtersoort Q/Resonance Q/Resonantie LowPass LowPass HiPass HiPass BandPass csg Bandpass csg BandPass czpg Bandpass czpg Notch Notch Allpass Allpass Moog Moog 2x LowPass 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET DOEL These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hier kun je een ingebouwd filter selecteren, welke je in dit kanaal kunt gebruiken. Filters zijn zeer belangrijk om het karakter van een geluid te veranderen. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume Volume Panning Pitch FX channel FX-Kanaal Default preset With this knob you can set the volume of the opened channel. Met deze knop kun je het volume van het geopende kanaal instellen. Base note Grandtoon Pitch range InstrumentTrackView Volume Volume Volume: Volume: VOL Panning Panning: PAN MIDI MIDI Input Output InstrumentTrackWindow GENERAL SETTINGS Instrument volume Volume: Volume: VOL Panning Panning: PAN Pitch Pitch: cents PITCH FX channel FX-Kanaal ENV/LFO FUNC FX MIDI MIDI Save preset XML preset file (*.xpf) PLUGIN PLUGIN Pitch range (semitones) RANGE BEREIK Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels LadspaControlDialog Link Channels Channel LadspaControlView Link channels Value: Sorry, no help available. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: Voer aub. een waarde in tussen %1 en %2 in: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD SPD LFO-speed: LFO-snelheid: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT AMT Modulation amount: Modulatie-intensiteit: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees graden With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file Kan config-bestand opslaan Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. &Project &Project &New &Nieuw &Open... &Openen... Recently opened projects &Save Op&slaan Save &As... Opslaan &als... Import... E&xport... &Quit &Afsluiten &Edit &Bewerken Settings &Tools &Help &Help Online help Help Help What's this? Wat is dit? About Over Create new project Nieuw project aanmaken Create new project from template Open existing project Open bestaand project Recently opened project Save current project Sla huidig project op Export current project Exporteer huidig project Show/hide Song-Editor Toon/Verberg Song-Bewerker By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor Toon/Verberg Beat+Bassline Bewerker By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll Toon/Verberg Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor Toon/verberg Automation Editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes Toon/Verberg Project notities Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack Untitled LMMS %1 LMMS %1 Project not saved Project niet opgeslagen The current project was modified since last saving. Do you want to save it now? Het huidige project is gewijzigd sinds de laatste keer dat het is opgeslagen. Wil je het nu opslaan? Open project Open project Save project Sla project op Help not available Hulp niet beschikbaar Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE APPARAAT MidiAlsaSeq::setupWidget DEVICE APPARAAT MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE APPARAAT MidiPort Input channel Ingang kanaal Output channel Uitgang kanaal Input controller Output controller Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Ontvangen MIDI-events Send MIDI-events verzenden MIDI-events Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Master volume Vibrato OscillatorObject Osc %1 volume Oscillator %1 Volume Osc %1 panning Oscillator %1 Balans Osc %1 coarse detuning Osc %1 grove ontstemming Osc %1 fine detuning left Oscillator %1 Fijn ontstemming links Osc %1 fine detuning right Oscillator %1 Fijn ontstemming rechts Osc %1 phase-offset Oscillator %1 fase-verschuiving Osc %1 stereo phase-detuning Oscillator %1 stereo fase-veschuiving Osc %1 wave shape Oscillator %1 Golfvorm Modulation type %1 Osc %1 waveform Oscillator %1 Golfvorm Osc %1 harmonic PatmanView Open other patch Click here to open another patch-file. Loop and Tune settings are not reset. Loop Loop mode Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Tune Tune mode Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. No file selected Open patch file Patch-Files (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step dubbel-klik om deze pattern in Piano-Roll te openen volume van de steps is met het muiswiel te veranderen Open in piano-roll In Piano-Roll openen Clear all notes Alle noten verwijderen Reset name Naam herstellen Change name Add steps Steps toevoegen Remove steps Steps verwijderen PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: Modulatie-intensiteit: Attack: Attack: Release: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Modulatie-intensiteit Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Cut selected notes (Ctrl+X) Knip geselecteerde noten (Ctrl+X) Copy selected notes (Ctrl+C) Kopieer geselecteerde noten (Ctrl+C) Paste notes from clipboard (Ctrl+V) Plak noten van klembord (Ctrl+V) Play/pause current pattern (Space) Huidige pattern afspelen/pauseren (Spatie) Stop playing of current pattern (Space) Afspelen huidige pattern stoppen (Spatie) Piano-Roll - %1 Piano-Roll - %1 Piano-Roll - no pattern Piano-Roll -geen pattern Please open a pattern by double-clicking on it! Open aub. een pattern door er op te dubbel-klikken! Record notes from MIDI-device/channel-piano Noten van MIDI-apparaat/kanaal-piano opnemen Last note Laatste noot Draw mode (Shift+D) Teken modus (Shift+D) Erase mode (Shift+E) Wis modus (Shift+E) Select mode (Shift+S) Selecteer modus (Shift+S) Record notes from MIDI-device/channel-piano while playing song or BB track Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Voer aub. een waarde in tussen %1 en %2 in: PianoView Base note Grandtoon Plugin Plugin not found Plugin niet gevonden The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Error while loading plugin Fout bij laden Plugin Failed to load plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Compressed OGG-File (*.ogg) Gecomprimeerd OGG-Bestand (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Maker: Copyright: Requires Real Time: Yes No Real Time Capable: In Place Broken: Channels In: Channels Out: File: File: %1 SampleBuffer Open audio file Audio-bestand openen Wave-Files (*.wav) Wave-Bestanden (*.wav) OGG-Files (*.ogg) OGG-Bestanden (*.ogg) DrumSynth-Files (*.ds) FLAC-Files (*.flac) FLAC-Bestanden (*.flac) SPEEX-Files (*.spx) VOC-Files (*.voc) VOC-Bestanden (*.voc) AIFF-Files (*.aif *.aiff) AIFF-Bestanden (*.aif *.aiff) AU-Files (*.au) AU-Bestanden (*.au) RAW-Files (*.raw) RAW-Bestanden (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample dubbel-klik om een sample te selecteren Delete (middle mousebutton) Verwijderen (middelste muisknop) Cut Knippen Copy Kopieren Paste Plakken Mute/unmute (<Ctrl> + middle click) Dempen/geluid aan (<Ctrl> + middelklik) Set/clear record SampleTrack Sample track Sample spoor Volume Volume SampleTrackView Track volume Channel volume: VOL SongEditor Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Klik hier, wanneer je het afspelen van de song wilt stoppen. De song-position-marker zal weer naar het begin van je song worden gezet. Could not open file Kan bestand niet openen Could not write file Kan bestand niet schrijven Song-Editor Song-Editor Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Klik hier, als je de gehele song wil afspelen. Het afspelen start bij de song-positie-marker (groen). Je kunt ook verplaatsen tijdens het afspelen. Play song (Space) Song afspelen (Spatie) Stop song (Space) Stop afspelen song (Spatie) Add beat/bassline Beat/Bassline toevoegen Add sample-track Sample spoor toevoegen Draw mode Teken modus Edit mode (select and move) Bewerk modus (selecteren en verplaatsen) Add automation-track Record samples from Audio-device Record samples from Audio-device while playing song or BB track Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song afspeelsnelheid The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode High quality modus Master volume Master volume master volume master volume Master pitch Master toonhoogte master pitch master toonhoogte Value: %1% Waarde: %1% Value: %1 semitones Waarde: %1 semitonen Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Linear Y axis SpectrumAnalyzerControls Linear spectrum Linear Y axis Channel mode TempoSyncKnob Tempo Sync Tempo synchronisatie No Sync Geen synchronisatie Eight beats Acht beats Whole note Hele noot Half note Halve noot Quarter note Kwart noot 8th note Achtste noot 16th note 16e noot 32nd note 32e noot Custom... &Help &Help Custom Synced to Eight Beats Met acht beats gesynchroniseerd Synced to Whole Note Met hele noot gesynchroniseerd Synced to Half Note Met halve noot gesynchroniseerd Synced to Quarter Note Met kwart noot gesynchroniseerd Synced to 8th Note Met achtste noot gesynchroniseerd Synced to 16th Note Met 16e noot gesynchroniseerd Synced to 32nd Note Met 32e noot gesynchroniseerd TimeDisplayWidget click to change time units TrackContainer Couldn't import file Kan bestand niet importeren Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Kan geen filter vinden voor het te importeren bestand %1. Je zult dit bestand met behulp van andere software moeten converteren naar een door LMMS ondersteund formaat. Couldn't open file Kan bestand niet openen Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Kan bestand %1 niet openen voor het schrijven. Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en probeer het opnieuw! Loading project... Project laden... Cancel Annuleren Please wait... Wachten aub... Importing MIDI-file... Importeren MIDI-bestand... Importing FLP-file... Importeren FLP-bestand... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: Oscillator %1 Volume: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Met deze knop stel je het volume van oscillator %1 in. Als deze op 0 staat is de oscillator uit. Anders hoor je de oscillator zo hard als jij hem wil. Osc %1 panning: Oscillator %1 Balans: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Met deze knop stel je de balans in voor oscillator %1. Een waarde van -100 betekent 100% links en een waarde van 100 verplaatst het geluid volledig naar het rechter kanaal. Osc %1 coarse detuning: Osc %1 grove ontstemming: semitones semitonen With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Met deze knop stel je de grove ontstemming van oscillator %1 in. Je kunt de oscillator 12 seminote (1oktaaf) naar boven of beneden ontstemmen.Dit is bruikbaar voor het maken van geluiden met een akkoord. Osc %1 fine detuning left: Oscillator %1 Fijn ontstemming links: cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Met deze knop stel je de fijne ontstemming van oscillator %1 in voor het linker kanaal. Je kunt fijn-ontstemmen met een bereik van -100 cents en +100 cents. Dit is bruikbaar voor het maken van 'vette' geluiden. Osc %1 fine detuning right: Oscillator %1 Fijn ontstemming rechts: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Met deze knop stel je de fijne ontstemming van oscillator %1 in voor het rechter kanaal. Je kunt fijn-ontstemmen met een bereik van -100 cents en +100 cents. Dit is bruikbaar voor het maken van 'vette' geluiden. Osc %1 phase-offset: Oscillator %1 fase-verschuiving: degrees graden With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Met deze knop stel je de fase-verschuiving van oscillator %1 in. Dit betekend dat je het punt in de oscillatie waar de oscillator begint te oscilleren kunt verplaatsen. Osc %1 stereo phase-detuning: Oscillator %1 stereo fase-veschuiving: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Open ander VST-plugin Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Klik hier, wanner je een andere VST-plugin wilt openen. Nadat je op deze knop gedrukt hebt zal er een bestand-openen-dialoog openen en kun je je bestand selecteren. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Klik hier, wanneer je de Grafische Gebruiker Interface (GUI) van je VST-plugin wilt tonen/verbergen. Turn off all notes Alle noten verwijderen Open VST-plugin Open VST-plugin DLL-files (*.dll) DLL-Bestanden (*.dll) EXE-files (*.exe) EXE-Bestanden (*.exe) No VST-plugin loaded Geen VST-plugin geladen Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Plugin laden Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normaliseren Click to normalize Invert Click to invert Smooth Uitstrijker Click to smooth Sine wave Sinus golf Click for sine wave Triangle wave Driehoeks golf Click for triangle wave Click for saw wave Square wave Vierkants golf Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify Versterking Start of sample Begin van de sample End of sample Eind van de sample Reverse sample Sample omdraaien Stutter Loopback point Loop mode Interpolation mode None Linear Sinc bbEditor Play/pause current beat/bassline (Space) Huidige beat/bassline afspelen/pauseren (Spatie) Beat+Bassline Editor Beat+Bassline Editor Add beat/bassline Beat/Bassline toevoegen Add automation-track Stop playback of current beat/bassline (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Click here to stop playing of current beat/bassline. Remove steps Steps verwijderen Add steps Steps toevoegen bbTCOView Open in Beat+Bassline-Editor In Beat+Bassline-Editor openen Reset name Naam herstellen Change name Change color Kleur veranderen Reset color to default bbTrack Beat/Bassline %1 Beat/Bassline %1 Clone of %1 bitInvader Samplelength Samplelengte bitInvaderView Sample Length Sample Lengte Sine wave Sinus golf Triangle wave Driehoeks golf Saw wave Zaagtand golf Square wave Vierkants golf White noise wave Witte ruis User defined wave Gebruiker gedefinieerde golf Smooth Uitstrijker Click here to smooth waveform. Interpolation Interpolatie Normalize Normaliseren Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file Kan bestand niet openen Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Error Error while determining file-encoder device. Please try to choose a different output format. Rendering: %1% Export project to %1 Exporteer project naar %1 fader Please enter a new value between %1 and %2: Voer aub. een waarde in tussen %1 en %2 in: graphModel Graph kickerInstrument Start frequency End frequency Gain Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: End frequency: Gain: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &Help Please enter a new value between %1 and %2: Voer aub. een waarde in tussen %1 en %2 in: Please enter a new value between -96.0 dBV and 6.0 dBV: Voer aub. een waarde tussen -96.0 dBV en 6.0 dBV in: ladspaBrowserView Available Effects Unavailable Effects Instruments Analysis Tools Don't know This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: Soort: ladspaDescription Plugins Description ladspaPortDialog Ports Name Rate Direction Type Min < Default < Max Logarithmic SR Dependent Audio Control Input Output Toggled Integer Float Yes lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: Decay: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Zaagtand golf Click here for a saw-wave. Triangle wave Driehoeks golf Click here for a triangle-wave. Square wave Vierkants golf Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Sinus golf Click for a sine-wave. White noise wave Witte ruis Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: Decay: DEC DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &Help opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Volume Volume organicInstrumentView Distortion: Volume: Volume: Randomise Willekeurig Osc %1 waveform: Oscillator %1 Golfvorm: Osc %1 volume: Oscillator %1 Volume: Osc %1 panning: Oscillator %1 Balans: cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser Instrument plugins Instrument Plugins VST-host for using VST(i)-plugins within LMMS VST-Host voor bebruik van VST(i)-Plugins binnen LMMS no description geen beschrijving Additive Synthesizer for organ-like sounds Additive Synthesizer voor orgelachtige geluiden Vibrating string modeler Vibrerende snaarinstrument modeler Filter for importing MIDI-files into LMMS Filter, om MIDI-bestanden in LMMS te importeren Filter for importing FL Studio projects into LMMS Filter voor importeren van FL Studio Projecten in LMMS Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins GUS-compatible patch instrument Tuneful things to bang on plugin for using arbitrary LADSPA-effects inside LMMS. Instrument browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Put down your project notes here. Plaats hier je Project notities. Project notes Project notities Edit Actions Bewerken &Undo &Ongedaan maken Ctrl+Z Ctrl+Z &Redo &Herstellen Ctrl+Y Ctrl+Y &Copy &Kopieren Ctrl+C Ctrl+C Cu&t K&nippen Ctrl+X Ctrl+X &Paste &Plakken Ctrl+V Ctrl+V Format Actions Opmaak &Bold &Vet Ctrl+B Ctrl+B &Italic &Cursief Ctrl+I Ctrl+I &Underline &Onderstrepen Ctrl+U Ctrl+U &Left &Links Ctrl+L Ctrl+L C&enter C&entreren Ctrl+E Ctrl+E &Right &Rechts Ctrl+R Ctrl+R &Justify &Uitgevuld Ctrl+J Ctrl+J &Color... &Kleur... renameDialog Rename... Hernoemen... setupDialog Setup LMMS LMMS instellen General settings Algemene instellingen BUFFER SIZE BUFFERGROOTTE Reset to default-value Terugzetten naar standaardwaarden MISC VERSCHILLENDE INSTELLINGEN Audio settings Audio instellingen AUDIO INTERFACE AUDIO INTERFACE MIDI settings MIDI Instellingen MIDI INTERFACE MIDI INTERFACE OK OK Cancel Annuleren Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Hier kun je de interne buffer-grootte instellen welke door LMMS gebruikt zal worden. Lagere waarden zorgen voor een lagere latency (vertraging) maar kunnen de geluidskwaliteit en de performance wel negatief beinvloeden. Dit geld zeker voor oudere computers en systemen zonder realtime-kernel. Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Hier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, JACK, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Hier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen. Restart LMMS LMMS herstarten Please note that most changes won't take effect until you restart LMMS! Houd er rekening mee dat je LMMS opnieuw moet opstarten om sommige instellingen te activeren! LMMS working directory LMMS werkmap VST-plugin directory VST-Plugin map Choose LMMS working directory Kies LMMS-werkmap Choose your VST-plugin directory Kies je VST-Plugin map Performance settings Performance instellingen UI effects vs. performance UI effecten vs. performance Frames: %1 Latency: %2 ms Frames: %1 Vertraging: %2 ms Artwork directory Artwork map Choose artwork-theme directory Artwork-thema map kiezen Display volume as dBV Volume in dBV tonen FL Studio installation directory FL Studio installatie map Choose FL Studio installation directory Kies FL Studio installatie map Enable tooltips Show restart warning after changing settings Compress project files per default HQ-mode for output audio-device STK rawwave directory Choose LADSPA plugin directory Choose STK rawwave directory Paths LADSPA plugin paths Default Soundfont File Background artwork Choose default SoundFont Choose background artwork One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Patch Gain Reverb Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Open other SoundFont file Click here to open another SF2 file Choose the patch Gain Apply reverb (if supported) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance Filter type Filtersoort Voice 3 off Volume Volume Chip model sidInstrumentView Volume: Volume: Resonance: Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: Attack: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Decay: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: Sustain: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: Release: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync Synchroon Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo Tempo Master volume Master volume Master pitch Master toonhoogte Project saved Project opgeslagen The project %1 is now saved. Het project %1 is nu opgeslagen. Project NOT saved. Project NIET opgeslagen. The project %1 was not saved! Het project %1 werd niet opgeslagen! Import file Bestand importeren untitled naamloos Select file for project-export... Selecteer bestand voor exporteren project... Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! MIDI sequences FL Studio projects All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling Automatisch scrollen in-/uitschakelen Enable/disable loop-points Loop-punten in-/uitschakelen After stopping go back to begin Na stoppen terug naar begin After stopping go back to position at which playing was started Na stoppen terug naar positie waar afspelen werd gestart After stopping keep position Na stoppen op positie blijven Hint Tip Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Solo trackContentObject Muted trackContentObjectView Current position Huidige positie Hint Tip Press <Ctrl> and drag to make a copy. Current length Huidige lengte Press <Ctrl> for free resizing. Druk <Ctrl> voor vrije grootteverandering. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 tot %5:%6) Delete (middle mousebutton) Verwijderen (middelste muisknop) Cut Knippen Copy Kopieren Paste Plakken Mute/unmute (<Ctrl> + middle click) Dempen/geluid aan (<Ctrl> + middelklik) trackOperationsWidget Clone this track Dit spoor klonen Remove this track Dit spoor verwijderen Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Druk <Ctrl> tijdens klikken op move-grip om een nieuwe drag'n'drop-actie te starten. Actions for this track Acties voor dit spoor Mute Dempen Mute this track Solo Clear this track Turn all recording on Turn all recording off vestigeInstrument Failed loading VST-plugin VST-plugin laden mislukt The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! De VST-plugin %1 kan om onbekende reden niet worden geladen. Als het wel werkt met andere VST-software onder Linux, neem dan contact op met een LMMS-ontwikkelaar! Loading plugin Plugin laden Please wait while loading VST-plugin... Wacht aub, de VST-plugin word geladen... vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: Volume: The 'V' knob sets the volume of the selected string. De 'V' knop stelt het volume in van de geselecteerde snaar. String stiffness: Hardheid snaar: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. De 'S' knop stelt de stijfheid in van de geselecteerde snaar. De stijfheid van de snaar bepaalt hoe lang de snaar uittrilt. Hoe lager de waarde, hoe langer de snaar trilt. Pick position: Aanslag-positie: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. De 'P' knop stelt de aanslagpositie in van de snaar aangeven. Hoe lager de waarde hoe dichter er bij de brug word aangeslagen. Pickup position: Pickup positie: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. De 'PU' knop stelt de positie in waar de trilling van de snaar word opgepikt. Hoe lager de waarde, hoe dichter de pickup bij de brug geplaatst is. Pan: Balans: The Pan knob determines the location of the selected string in the stereo field. De Balans knop bepaalt de plek van het geluid in het stereo-beeld. Detune: Ontstemming: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. De ontstemknop verandert de toonhoogte van de aangelsgen snaar. Instellingen lager dan 0 zullen het geluid vlakker laten klinken, terwijl het geluid met waarden boven 0 scherper zal worden. Fuzziness: Ruigheid: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. De Slap knop voegt ruigheid toe aan de geselecteerde snaar en is het meest merkbaar in de attack-fase. Tevens kan dit gebruikt worden om de snaar meer 'metallic' te laten klinken. Length: Lengte: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. De lengteknop stelt de lengte van de geselecteerde snaar in. Langere snaren klinken langer en helderder, maar dit vergt wel weer meer van de processor. Impulse or initial state Impuls of begininstelling The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. De 'Imp'-knop legt vast of de golfvorm in de grafiek word behandeld als een impulsgever op de snaar tijdens aanslaan, of als de begininstelling van een snaar. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. De oktaaf-kiezer word gebruikt voor het kiezen met welke harmonische van de noot de snaar zal klinken. Bij '-2' betekent dit bv. dat de snaar 2 oktaven onder de grondtoon ('F') komt. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. De golfvorm bewerker levert controle over de aanvangstoestand of impuls welke word gebruikt om een snaar te laten trillen. De knoppen aan de rechterkant van de grafiek geven aan welke golfvorm geselecteerd is. De '?' knop laadt een golfvorm-bestand-alleen de eerste 128 samples worden geladen. De golfvorm kan ook in de grafiek getekend worden. De 'S' knop zal de golfvorm uitstrijken (egaler maken). De 'N; knop zal de golfvorm normaliseren. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modeleert tot 9 individuele snaren. De 'Snaren' kiezer maakt het mogelijk om de geselecteerde snaar te bewerken. Met 'Imp' kiezer geef je aan of de grafiek de impuls of de beginwaarde weergeeft. Met de 'Octave' kiezer selecteer je de harmonischen waar de snaar mee trilt. De grafiek geeft je de mogelijkheid de beginwaarde en de impuls te beheren om de snaar in beweging te zetten. De 'V' knop stelt het volume in. De 'S' knop stelt de stijfheid in. De 'P' knop stelt de aanslagpositie in. De 'PU' knop stelt de positie van de pichup in. 'Pan' (balans) en 'Detune' (ontstemming) behoeven geen uitleg. De 'Slap' knop voegt wat ruigheid toe aan het geluid van de snaar. De lengteknop stelt de lengte van de snaar in. De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de snaar actief is in het huidige instrument. Enable waveform Golfvorm activeren Click here to enable/disable waveform. Klik hier, om een golfvorm te activeren/deactiveren. String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. De snaar-kiezer word gebruikt voor het kiezen van de snar welke bewerkt word. Een Vibed instrument kan tot 9 individueel trillende snaren bevatten. De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de geselecteerde snaar actief is. Sine wave Sinus golf Triangle wave Driehoeks golf Saw wave Zaagtand golf Square wave Vierkants golf White noise wave Witte ruis User defined wave Gebruiker gedefinieerde golf Smooth Uitstrijker Click here to smooth waveform. Normalize Normaliseren Click here to normalize waveform. Klik hier, om de golfvorm te normaliseren. &Help &Help Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output Klik om de master-output visuallisatie in- of uit te schakelen Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/pl.qm000066400000000000000000005704241247673406200156350ustar00rootroot00000000000000d@dG@T~E [DEZ ~F|}GGG7GHjHiDmHHHzWHz_HLI;ImDIm J'gJ+0J<@JANJZKLbM5}M4`MPMRPN(Nh׌Obzh2PW!PWS}AS}C<SUxSbST.TZ(T5TʴZTʴTxSUQU`WU`dsUjAUj VbjVbpVbVh4VVR=V]VVKW oW cWiWW`hWX X5Z/Z/ZkZkZZZolZoy[Y[jn\]6 )]|^eq w^er c^cNih iųmiųiųszytUtbv=!|}6}Uy~#K;;;+_-qϙ>a^8JjލA.fvuC!uie N7)I7i׼y+ryJק1ק3>@QOn Z W3 +Jf b b : p C>ܭ/Nj+`+´un"RP/V/V΋27"|7o"{9}V96;n; =\)@۴ FzFzJJ VMUT.OXhOXwP0VZ;Z; aU#Ymw80z;]. n2~o>EuLtQɄyYXʭi1/7(Sՙ ծhP(8ٖ݊\u<Rlsߺ`okoT;CB9A G|Q!QkDx/hâ,8J ?sta36N (^Q(^@)u8,´2,´]. 4N`: RolK_/bar%t{xż\z~zJ99%v8nC_GGGGK{?? 12f3Z>9>Z>>ѻAG?GY||t>'^gFH~ ^ X+ !sEss45D18%uITj"ݎ"ݎk% :v2Q"3K4º8J; :)k?@CBHH>>I[YNOXr5P~P~XWa Z.]]Ywl$lh@lhlJo>oqu‡xx|ZS|Z}"Y }}~g}~[:ŐW ĩIR$;##yx0x"p|-s#L%jsA~d1~W0ĽX(Pϯ*ѫ>6+6K2קAקC$N?քܗj0XL왞g|B)! =sչ[ZiY*.؉ 0 ((U()eĄ10*19h:^;:<<L<<kA U8FA>rJM$ Mt߈MкPJPJʺPJQq.`*a`r`%iH`%xc=_d Zzg5uhjztkJal rJw~e*]wМwCw2xYZ`yTyT{ NY97:W^b Nxuuuuu\ubuuZ0d[%{zI7hI,I{OI8hiPh[Z eDq 3+3^3334*4]444 5) 5\fwbzf\ x~\eˤܐ(žՔ1nEͥ<22/.(V`6Ah@6hFvO@~fnD{K#|qPC|+_}=dC}V6 t1K ud uҌ @cl%wT_5Ύ'(!E$0>%x)Zd)|}-UI.15w3:|7e7e7UZ8#?~Ezu`F^F^)H8W<PeQQ׌QDZ\C.SEaESa*}%fF)hgh93Th;ůjTvjTwllӐlpبs vA 8x}o.RAAkyK]*4̂RpFW`wfxcv}ùREL')|jJNdfffztt+Gt|t:n8Þe%'% o^' ;TEU^2Z2<5P<5<5Ѯ<5<5^<5Z<5^sSߺ|D+%} ljXZCNM}^ QEENEw|bix##ECv'v(z'v1U*1^B6{0:gN:?[C*C*EC*qC*g{Gk3CK9M9.N9Q)SY%Wj{Wd=Z+[=[D<lmBS[rguz*z}'ZP P*PP"Z-#xFi[i..9 55 >H22ii7s7tEBC"(RR2)`2 ޔr Th?ti9/>Std/D7@qTrBg| Ů^? 8  zyz))  YBf!E+!Ea!E&rzd' )' )(f)R*G,D(5n&8}1t;O;Z*$?ɝC'~CI7UI,UIMZ4[t P\X.aacjczhF)hJV]iANi m.wvny %y %0 `qw <j>@jh/>262]dT=A J);#2O8 #+S l s: 9{Uٚ>$Ϟy-SE)-SE-SE3h?%3h;=G/5Gx!~AQ'sS6NPUBUFUW~m\lbswc?hdRdReEee<jDSm4$nqvSe5DY5;{$(x_&S#HCHHC 0dAn%gUMUU.d JڽVFy_y.y_^C^?P>p 3¸^¸1ʩ[ʩc8j]]ex࣓0 IOmca֧Y,pBB  _   ? > $ e )8zK * .5nZ 3': 6EwQ 8e 8eϽ 8e 9J 9 G$ ItYS I6G MgY OI T& YsA hI.. hI.8 k l8 p,x pfk w%Q w%R x7 |b+ ># > 9 y v A C B11 \ ^tm `! `r 9 8q  n)t  F< w4 Kn <  ?  g UUu uuN R%b US@ 1M& vI NWT U T 7 ~ ·~$W *X ʧ^ ʵv ˔2Z  J\# Dg& Ny ؋ ڮ ڮ+ ہ" z  ׾T 0 *U ] _hz I9U ". $ r +@9 - i\ 3'~ 9y N= Om S'J4 STn \T \ ] eE m Z m y m  s T u: q $n   : ?  N<0 NC Jj7 V h Rj 2 2 8AI Ɵ Ƶ8A ^ 4u ӗ`VD Ӱv 2n < < e=Z S Y:i Y: Y:/ ~t iL ] $  .a .. .Y .Z ʓ7  " "N $&y<^ (c` + j + 0 + g7 -#?u -# -] - :_ X $ /^E /^.d)r! ^ q:cRWfz3n~a1ia[Ci!&ʮf2yl;}<)B >_GևP,GQ>oY]lad^cg&nT*dy7Op?c{<))]O`9)`9HȘ9kWUzU  P_^#cNW ` |[ Ll#"W$e(=)3Pc7W"?ICgrD>D?EI/[Ji^Ji! M|,U&'XҾZ [x*~[}^ E+` iI 6iI m4]|pڸ$eys?z;*N*7K ¥ILkl]Ƴ~ܹ̓ViSInformacjeAbout AboutDialog O programie LMMS About LMMS AboutDialogAutorzyAuthors AboutDialoglCopyright (c) 2004-2010, LMMS developers {2004-2014,?}(Copyright (c) 2004-2014, LMMS developers AboutDialogSpolszczenie LMMS: Radek SBowik Podzikowania dla: Marii SBowik - za wstpn korekt, Tomasza Gradowskiego - za cenne uwagi i sugestie zmian. Zauwa|one bBdy i propozycje zmian tBumaczenia prosz zgBasza na e-mail: radek[maBpka]vibender[kropka]comCurrent language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialogLMMSLMMS AboutDialogVLMMS - Batwa produkcja muzyczna dla ka|dego)LMMS - easy music production for everyone AboutDialogLicencjaLicense AboutDialogTBumaczenie Translation AboutDialog8Wersja %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogPANPANAmplifierControlDialogPanoramowanie:Panning:AmplifierControlDialogVOLVOLAmplifierControlDialogGBo[no[:Volume:AmplifierControlDialogPanoramowaniePanningAmplifierControlsGBo[no[VolumeAmplifierControls KANAAYCHANNELSAudioAlsa::setupWidgetURZDZENIEDEVICEAudioAlsa::setupWidgetWzmocnienie:Amplify:AudioFileProcessorViewNKliknij w tym miejscu je[li chcesz zaBadowa inny plik audio. Otworzy si okno gdzie bdziesz mgB zaznaczy wybrany plik. Ustawienia takie jak tryb ptli, punkty pocztku i koDca, warto[ wzmocnienia i inne nie zostan zresetowane wic to co uzyskasz mo|e brzmie inaczej ni| oryginalna prbka.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorView"Znacznik koDcowy: Endpoint:AudioFileProcessorView>Je[li uaktywnisz t kontrolk caBa prbka bdzie odtwarzana wstecz. Mo|e to by przydatne do stworzenia efektw dzwikowych np. puszczonej wstecz blachy crash.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView$Otwrz inn prbkOpen other sampleAudioFileProcessorViewOdwr prbkReverse sampleAudioFileProcessorView(Znacznik-pocztkowy: Startpoint:AudioFileProcessorView~Za pomoc tego pokrtBa mo|esz ustawi wspBczynnik wzmocnienia. Domy[ln warto[ci jest 100%. Poni|ej prbka jest [ciszana a powy|ej podgBa[niana (zmiany nie maj wpBywu na sam plik sampla!)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView2Klient JACK zrestartowanyJACK client restarted AudioJack*Serwer JACK wyBczonyJACK server down AudioJackLMMS zostaB odrzucony przez JACK z jakiego[ powodu. Back-end LMMSa zostaB zrestartowany wic mo|esz ponownie dokona rcznych poBczeD.LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. AudioJackWydaje si, |e serwer JACK zostaB wyBczony i uruchomienie nowej instancji nie powiodBo si wic LMMS nie mo|e kontynuowa pracy. Nale|y zapisa projekt i uruchomi serwer JACK i LMMSa ponownie.The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack KANAAYCHANNELSAudioJack::setupWidgetNAZWA-KLIENTA CLIENT-NAMEAudioJack::setupWidget KANAAYCHANNELSAudioOss::setupWidgetURZDZENIEDEVICEAudioOss::setupWidgetBACKENDBACKENDAudioPortAudio::setupWidgetURZDZENIEDEVICEAudioPortAudio::setupWidget KANAAYCHANNELSAudioPulseAudio::setupWidgetURZDZENIEDEVICEAudioPulseAudio::setupWidgetURZDZENIEDEVICEAudioSdl::setupWidget,&Kopiuj warto[ (%1%2)&Copy value (%1%2)AutomatableModel*&Wklej warto[ (%1%2)&Paste value (%1%2)AutomatableModel&Resetuj (%1%2) &Reset (%1%2)AutomatableModel0PodBcz do kontrolera...Connect to controller...AutomatableModel PodBczony do %1Connected to %1AutomatableModel0PodBczony do kontroleraConnected to controllerAutomatableModel(Edytuj poBczenie...Edit connection...AutomatableModelBEdytuj globaln automatyk utworuEdit song-global automationAutomatableModelUsuD poBczenieRemove connectionAutomatableModelxWszystkie zaznaczone warto[ci zostaBy skopiowane do schowka.1All selected values were copied to the clipboard.AutomationEditor,Edytor Automatyki - %1Automation Editor - %1AutomationEditorBEdytor automatyki - brak patternuAutomation Editor - no patternAutomationEditorKliknij tutaj aby przej[ do trybu rysowania. W tym trybie mo|esz dodawa i przemieszcza pojedyDcze warto[ci. To domy[lny tryb, ktry bdziesz wykorzystywa przez wikszo[ czasu. Mo|esz go aktywowa z poziomu klawiatury za pomoc skrtu 'Shift+D'.Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditorDKliknij tutaj aby przej[ do trybu kasowania. W tym trybie mo|esz usuwa pojedyDcze warto[ci. Mo|esz go aktywowa z poziomu klawiatury za pomoc skrtu 'Shift+E'.Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditor$Kliknij tutaj a zaznaczone elementy zostan skopiowane do schowka. Mo|esz je wklei gdziekolwiek w dowolnym patternie za pomoc przycisku 'Wklej'.Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor8Kliknij tutaj a zaznaczone elementy zostan wycite i umieszczone w schowku. Mo|esz je wklei gdziekolwiek w dowolnym patternie za pomoc przycisku 'Wklej'.Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorKliknij tutaj a elementy ze schowka zostan przeklejone w miejsce zaznaczenia.YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditorKliknij tutaj je[li chcesz odtworzy aktualny pattern. Ta opcja jest przydatna przy edytowaniu patternu - zostanie on automatycznie zaptlony.Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditorKliknij tutaj je[li chcesz zatrzyma odtwarzanie aktualnego patternu.>Click here if you want to stop playing of the current pattern.AutomationEditorHSkopiuj zaznaczone elementy (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditorFWytnij zaznaczone elementy (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor0Tryb rysowania (Shift+D)Draw mode (Shift+D)AutomationEditor4Tryb wymazywania (Shift+E)Erase mode (Shift+E)AutomationEditorDWklej zaznaczone elementy (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorVOdtwrz/zatrzymaj aktualny pattern (Spacja)"Play/pause current pattern (Space)AutomationEditorOtwrz pattern automatyki za pomoc menu kontekstowego regulatora!EPlease open an automation pattern with the context menu of a control!AutomationEditordZatrzymaj odtwarzanie aktualnego patternu (Spacja)'Stop playing of current pattern (Space)AutomationEditor&Warto[ci skopiowane Values copiedAutomationEditor\Przecignij trzymajc wci[nity klawisz <Ctrl>$Drag a control while pressing AutomationPattern%1 PoBczenia%1 ConnectionsAutomationPatternViewZmieD nazw Change nameAutomationPatternViewWyczy[ClearAutomationPatternViewRozBcz "%1"Disconnect "%1"AutomationPatternView8Otwrz w Edytorze AutomatykiOpen in Automation editorAutomationPatternViewZresetuj nazw Reset nameAutomationPatternView,Ustaw/wyczy[ nagranieSet/clear recordAutomationPatternViewzPodwjne kliknicie otwiera ten pattern w edytorze automatyki6double-click to open this pattern in automation editorAutomationPatternView$Zcie|ka automatykiAutomation trackAutomationTrackFREQFREQBassBoosterControlDialogCzstotliwo[: Frequency:BassBoosterControlDialogGAINGAINBassBoosterControlDialogWzmocnienie:Gain:BassBoosterControlDialog RATIORATIOBassBoosterControlDialogWspBczynnik:Ratio:BassBoosterControlDialogCzstotliwo[ FrequencyBassBoosterControlsWzmocnienieGainBassBoosterControlsWspBczynnikRatioBassBoosterControlsPoka| GUIShow GUICarlaInstrumentViewKontroler %1 Controller %1 ControllerAutodetekcja Auto DetectControllerConnectionDialog KANAACHANNELControllerConnectionDialogKONTROLER CONTROLLERControllerConnectionDialog AnulujCancelControllerConnectionDialog*Ustawienia PoBczeniaConnection SettingsControllerConnectionDialogDetekcja Cyklu.Cycle Detected.ControllerConnectionDialogKanaB wej[ciowy Input channelControllerConnectionDialog&Kontroler wej[ciowyInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialog"FUNKCJA MAPOWANIAMAPPING FUNCTIONControllerConnectionDialogKONTROLER MIDIMIDI CONTROLLERControllerConnectionDialogXUrzdzenia MIDI odbierajce zdarzenia MIDI z(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog*KONTROLER U{YTKOWNIKAUSER CONTROLLERControllerConnectionDialog DodajAddControllerRackView Rack KontrolerwController RackControllerRackView &Pomoc&HelpControllerView &UsuD t wtyczk&Remove this pluginControllerViewKontrolery umo|liwiaj automatyzacj warto[ci pokrteB, suwakw i innych regulatorw.QControllers are able to automate the value of a knob, slider, and other controls.ControllerView UstawControlsControllerViewNWprowadz now nazw dla tego kontrolera&Enter the new name for this controllerControllerView,ZmieD nazw kontroleraRename controllerControllerView$2xDolnoprzepustowy 2x LowPassDualFilterControls"WszechprzepustowyAllpassDualFilterControls,Pasmowoprzepustowy csg BandPass csgDualFilterControls.Pasmowoprzepustowy czpg BandPass czpgDualFilterControls GrnoprzepustowyHiPassDualFilterControls DolnoprzepustowyLowPassDualFilterControlsMoogMoogDualFilterControlsPasmowozaporowyNotchDualFilterControlsZanikanieDecayEffectEfekt wBczonyEffect enabledEffect BramkaGateEffect,Miksowanie Suchy/Mokry Wet/Dry mixEffectEfekty wBczoneEffects enabled EffectChainDodaj efekt Add effectEffectRackView AACCUCH EFEKTOWY EFFECTS CHAINEffectRackViewDodaj efekt Add effectEffectSelectDialogOpis wtyczkiPlugin descriptionEffectSelectDialog &Pomoc&Help EffectView &UsuD t wtyczk&Remove this plugin EffectView UstawControls EffectView ZANIK.DECAY EffectViewAaDcuch wtyczek efektowych w ktrym sygnaB przetwarzany jest od gry do doBu. Kontrolka 'On/Off' umo|liwia pominicie danej wtyczki w ka|dej chwili. PokrtBo 'Suchy/Mokry' (Wet/Dry) okre[la wspBczynnik mieszania sygnaBu wej[ciowego z sygnaBem przetworzonym przez wtyczk. SygnaB wyj[ciowy wtyczki jest rwnocze[nie sygnaBem wej[ciowym wtyczki nastpnej. PokrtBo 'Zanikanie' okre[la jak dBugo sygnaB bdzie przetwarzany przez wtyczk po zakoDczeniu nuty. Wtyczka zakoDczy przetwarzanie gdy poziom sygnaBu zmniejszy si poni|ej zadanego progu w danym okresie czasu. Ta gaBka okre[la wBa[nie ten czas. Krtszy bdzie skutkowa mniejszym obci|eniem procesora ale w przypadku dBugo wybrzmiewajcych efektw - np. delay czy reverb - lepiej go zwikszy. PokrtBo 'Bramka' okre[la prg sygnaBu przy ktrym wtyczka koDczy dziaBanie. Przycisk 'Regulatory' otwiera okno w ktrym mo|na dostosowa parametry wtyczki. Prawoklik otwiera menu kontekstowe z pomoc ktrego mo|na zmieni porzdek efektw w BaDcuchu lub usun wybrane efekty.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectView BRAM.GATE EffectViewBramka:Gate: EffectView Przemie[ w &dB Move &down EffectView"Przemie[ w &grMove &up EffectView On/OffOn/Off EffectViewPokrtBo zanikania okre[la jak dBugo bdzie trwaBo przetwarzanie sygnaBu przez wtyczk. Ni|sze warto[ci zmniejszaj obci|enie procesora ale mog skutkowa obcinaniem ogona pogBosowego w deley'ach i reverb'ach.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectViewPokrtBo bramki okre[la poziom sygnaBu, ktry zostanie rozpoznany jako cisza aby zatrzyma przetwarzanie sygnaBu.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewPokrtBo Mokry/Suchy (Wet/Dry) okre[la wspBczynnik pomidzy sygnaBem nieprzetworzonym a sygnaBem po naBo|eniu efektu. Warto[ci dodatnie domiksowywuj sygnaB przetworzony w fazie a ujemne w przeciwfazie do sygnaBu nieprzetworzonego.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView Czas:Time: EffectView*WBcza/wyBcza efekt.Toggles the effect on or off. EffectViewW/DW/D EffectView.Poziom 'Mokrego' (Wet): Wet Level: EffectViewAtakAttackEnvelopeAndLfoParametersZanikanieDecayEnvelopeAndLfoParameters&Czstotliwo[ x 100 Freq x 100EnvelopeAndLfoParametersPrzetrzymanieHoldEnvelopeAndLfoParametersAtak LFO LFO AttackEnvelopeAndLfoParametersModulacja LFOLFO ModulationEnvelopeAndLfoParametersOpznienie LFO LFO PredelayEnvelopeAndLfoParameters KsztaBt fali LFOLFO Wave ShapeEnvelopeAndLfoParametersSzybko[ LFO LFO speedEnvelopeAndLfoParameters>WspBczynnik modulacji obwiedniModulate Env-AmountEnvelopeAndLfoParametersModulacja ModulationEnvelopeAndLfoParametersOpznieniePredelayEnvelopeAndLfoParametersWybrzmiewanieReleaseEnvelopeAndLfoParametersPodtrzymanieSustainEnvelopeAndLfoParametersAMTAMTEnvelopeAndLfoViewATTATTEnvelopeAndLfoView Atak:Attack:EnvelopeAndLfoViewfKliknij tutaj aby przeBczy na fal piBoksztaBtn.&Click here for a saw-wave for current.EnvelopeAndLfoViewdKliknij tutaj aby przeBczy na fal sinusoidaln.Click here for a sine-wave.EnvelopeAndLfoViewbKliknij tutaj aby przeBczy na fal prostoktn.Click here for a square-wave.EnvelopeAndLfoView^Kliknij tutaj aby przeBczy na fal trjktn.Click here for a triangle-wave.EnvelopeAndLfoViewHKliknij tutaj aby przeBczy na ksztaBt fali zdefiniowany przez u|ytkownika. Po tym fakcie przecignij do okna LFO prbk ze zdefiniowanym wcze[niej ksztaBtem fali.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoViewtKliknij tutaj aby 100-krotnie zwikszy czstotliwo[ LFO.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewKliknij tutaj aby LFO kontrolowaB wspBczynnik modulacji sygnaBu przez obwiedni.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewDELDELEnvelopeAndLfoViewZanikanie:Decay:EnvelopeAndLfoViewfPrzecignij prbk skdkolwiek i upu[ w tym oknie.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoViewHOLDHOLDEnvelopeAndLfoViewWskazwkaHintEnvelopeAndLfoViewPrzetrzymanie:Hold:EnvelopeAndLfoViewOpznienie LFO: LFO predelay:EnvelopeAndLfoViewSzybko[ LFO: LFO speed:EnvelopeAndLfoViewAtak LFO: LFO- attack:EnvelopeAndLfoView:MODULUJ WSPACZYNNIK OBWIEDNIMODULATE ENV-AMOUNTEnvelopeAndLfoView.WspBczynnik modulacji:Modulation amount:EnvelopeAndLfoViewOpznienie: Predelay:EnvelopeAndLfoViewRELRELEnvelopeAndLfoViewWybrzmiewanie:Release:EnvelopeAndLfoViewSPDSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewPodtrzymanie:Sustain:EnvelopeAndLfoView\U|yj tego pokrtBa aby ustawi czas ataku LFO.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewfU|yj tego pokrtBa aby ustawi czas ataku obwiedni.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewnU|yj tego pokrtBa aby ustawi czas zanikania obwiedni.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewvU|yj tego pokrtBa aby ustawi czas przetrzymania obwiedni.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewU|yj tego pokrtBa aby ustawi wspBczynnik modulacji sygnaBu przez Generator Przebiegw Wolnozmiennych (LFO).Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoViewU|yj tego pokrtBa aby ustawi wspBczynnik modulacji sygnaBu przez generator obwiedni.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoViewU|yj tego pokrtBa aby ustawi czas wstpnego opznienia dla obwiedni sygnaBu.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoViewfU|yj tego pokrtBa aby ustawi czas opznienia LFO.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewvU|yj tego pokrtBa aby ustawi czas wybrzmiewania obwiedni.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewlU|yj tego pokrtBa aby ustawi prdko[ oscylacji LFO.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoViewxU|yj tego pokrtBa aby ustawi poziom podtrzymania obwiedni.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoViewZkontroluj wspBczynnik obwiedni przez ten LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoView4czstotliwo[ LFO razy 100multiply LFO-frequency by 100EnvelopeAndLfoView128 KBit/s 128 KBit/sExportProjectDialog16 Bit Integer16 Bit IntegerExportProjectDialog160 KBit/s 160 KBit/sExportProjectDialog192 KBit/s 192 KBit/sExportProjectDialog192000 Hz 192000 HzExportProjectDialog1x (Brak) 1x (None)ExportProjectDialog256 KBit/s 256 KBit/sExportProjectDialog2x2xExportProjectDialog32 Bit Float 32 Bit FloatExportProjectDialog320 KBit/s 320 KBit/sExportProjectDialog44100 Hz44100 HzExportProjectDialog48000 Hz48000 HzExportProjectDialog4x4xExportProjectDialog64 KBit/s 64 KBit/sExportProjectDialog88200 Hz88200 HzExportProjectDialog8x8xExportProjectDialog96000 Hz96000 HzExportProjectDialogPrzepBywno[:Bitrate:ExportProjectDialog AnulujCancelExportProjectDialog*Rozdzielczo[ bitowa:Depth:ExportProjectDialog"Eksportuj projektExport projectExportProjectDialogFormat pliku: File format:ExportProjectDialogInterpolacja:Interpolation:ExportProjectDialogWyj[cieOutputExportProjectDialogFNadprbkowanie (u|ywa ostro|nie!):Oversampling (use with care!):ExportProjectDialogZauwa|, |e nie wszystkie powy|sze parametry odnosz si do wszystkich formatw zapisu.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog$Ustawienia jako[ciQuality settingsExportProjectDialog4Czstotliwo[ prbkowania: Samplerate:ExportProjectDialogDSinc Najlepsza (koszmarnie wolna!)Sinc Best (very slow!)ExportProjectDialogSinc Najszybsza Sinc FastestExportProjectDialog.Sinc Zrednia (zalecana)Sinc Medium (recommended)ExportProjectDialogRozpocznijStartExportProjectDialogBPodtrzymanie Zerowego Rzdu (ZOH)Zero Order HoldExportProjectDialogPrzegldarkaBrowser FileBrowser8--- Pliki preinstalowane ------ Factory files ---FileBrowserTreeWidget Aadowanie prbkiLoading sampleFileBrowserTreeWidget^Otwrz na nowej [cie|ce Edytora Perkusji i Basu'Open in new instrument-track/B+B EditorFileBrowserTreeWidgetPOtwrz na nowej [cie|ce Edytora Piosenki(Open in new instrument-track/Song-EditorFileBrowserTreeWidgetVAadowanie podgldu prbki, prosz czeka...*Please wait, loading sample for preview...FileBrowserTreeWidgetJWy[lij na aktywn [cie|k instrumentuSend to active instrument-trackFileBrowserTreeWidget FX %1FX %1FxMixer MasterMasterFxMixerTWprowadz now nazw tego kanaBu efektowego&Enter the new name for this FX channel FxMixerViewFX-MixerFX-Mixer FxMixerView:ZmieD nazw kanaBu efektowegoRename FX channel FxMixerViewFX Fader %1 FX Fader %1FxMixerView::FxChannelViewWyciszenieMuteFxMixerView::FxChannelView2Wycisz ten kanaB efektowyMute this FX channelFxMixerView::FxChannelViewArpeggioArpeggioInstrumentFunctionArpeggio"Kierunek arpeggioArpeggio directionInstrumentFunctionArpeggio(Bramkowanie arpeggio Arpeggio gateInstrumentFunctionArpeggioTryb arpeggio Arpeggio modeInstrumentFunctionArpeggioZakres arpeggioArpeggio rangeInstrumentFunctionArpeggioOkres arpeggio Arpeggio timeInstrumentFunctionArpeggioRodzaj arpeggio Arpeggio typeInstrumentFunctionArpeggio W dBDownInstrumentFunctionArpeggioAsynchronicznyFreeInstrumentFunctionArpeggio LosowoRandomInstrumentFunctionArpeggioPosortowanySortInstrumentFunctionArpeggioSynchronizacjaSyncInstrumentFunctionArpeggio W grUpInstrumentFunctionArpeggioNaprzemiennie Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGGIOARPEGGIOInstrumentFunctionArpeggioView2Arpeggio jest metod odtwarzania (zwBaszcza krtkobrzmicych) instrumentw, ktra czyni muzyk o wiele |ywsz. W odr|nieniu od zwyczajnego wykonania akordu, gdzie dzwiki odtwarzane s rwnocze[nie w przypadku wykonywania arpeggio nuty uderzane s sekwencyjnie jedna po drugiej. Typowe arpeggia skBadaj si z trjdzwikw durowych lub molowych ale istnieje te| wiele innych akordw, ktre mo|esz zastosowa.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView*Bramkowanie arpeggio:Arpeggio gate:InstrumentFunctionArpeggioView Zakres arpeggio:Arpeggio range:InstrumentFunctionArpeggioViewOkres arpeggio:Arpeggio time:InstrumentFunctionArpeggioViewKierunek: Direction:InstrumentFunctionArpeggioView BRAM.GATEInstrumentFunctionArpeggioView Tryb:Mode:InstrumentFunctionArpeggioView ZAKRESRANGEInstrumentFunctionArpeggioView OKRESTIMEInstrumentFunctionArpeggioViewU|yj tego pokrtBa do ustawienia bramkowania arpeggio. Bramka arpeggio okre[la procentowo jak dBugo ma by odtwarzana ka|da nuta arpeggio. Za jej pomoc mo|na dokona artykulacji dzwikw w formie staccato.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewU|yj tego pokrtBa do ustawienia rozpito[ci arpeggio w oktawach. Wybrane arpeggio bdzie odgrywane w zakresie okre[lonej liczby oktaw.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewU|yj tego pokrtBa do ustawienia okresu arpeggio w milisekundach. Okres arpeggio ustala jak dBugo bdzie odtwarzany ka|dy dzwik.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoktawa(y) octave(s)InstrumentFunctionArpeggioView11InstrumentFunctionNoteStacking11b9InstrumentFunctionNoteStacking13InstrumentFunctionNoteStacking13#9InstrumentFunctionNoteStacking13b5b9InstrumentFunctionNoteStacking13b9InstrumentFunctionNoteStacking8x {5?}5InstrumentFunctionNoteStacking6InstrumentFunctionNoteStacking6add9InstrumentFunctionNoteStacking6sus4InstrumentFunctionNoteStacking7InstrumentFunctionNoteStacking7#11InstrumentFunctionNoteStacking7#5InstrumentFunctionNoteStacking7#5#9InstrumentFunctionNoteStacking7#5b9InstrumentFunctionNoteStacking7#9InstrumentFunctionNoteStacking7add11InstrumentFunctionNoteStacking7add13InstrumentFunctionNoteStacking7b5InstrumentFunctionNoteStacking7b5b9InstrumentFunctionNoteStacking7b9InstrumentFunctionNoteStacking7sus4InstrumentFunctionNoteStacking9InstrumentFunctionNoteStacking9#11InstrumentFunctionNoteStacking9#5InstrumentFunctionNoteStacking9b13InstrumentFunctionNoteStacking9b5InstrumentFunctionNoteStacking9sus4InstrumentFunctionNoteStackingAeolianInstrumentFunctionNoteStackingArabicInstrumentFunctionNoteStackingBluesInstrumentFunctionNoteStacking Chord rangeInstrumentFunctionNoteStacking Chord typeInstrumentFunctionNoteStackingChordsInstrumentFunctionNoteStacking DiminishedInstrumentFunctionNoteStackingDominant bebopInstrumentFunctionNoteStackingDorianInstrumentFunctionNoteStacking EnigmaticInstrumentFunctionNoteStackingHarmonic minorInstrumentFunctionNoteStackingHungarian minorInstrumentFunctionNoteStacking Jap in senInstrumentFunctionNoteStackingLocrianInstrumentFunctionNoteStackingLydianInstrumentFunctionNoteStackingMaj11InstrumentFunctionNoteStackingMaj13InstrumentFunctionNoteStackingMaj7InstrumentFunctionNoteStackingMaj7#11InstrumentFunctionNoteStackingMaj7#5InstrumentFunctionNoteStacking Maj7add13InstrumentFunctionNoteStackingMaj7b5InstrumentFunctionNoteStackingMaj9InstrumentFunctionNoteStackingMaj9#11InstrumentFunctionNoteStackingMaj9#5InstrumentFunctionNoteStackingMaj9sus4InstrumentFunctionNoteStackingMajb5InstrumentFunctionNoteStackingMajorInstrumentFunctionNoteStacking Major bebopInstrumentFunctionNoteStackingMajor pentatonicInstrumentFunctionNoteStacking Melodic minorInstrumentFunctionNoteStackingMinor pentatonicInstrumentFunctionNoteStacking MixolydianInstrumentFunctionNoteStacking NeopolitanInstrumentFunctionNoteStackingNeopolitan minorInstrumentFunctionNoteStacking PhrygolydianInstrumentFunctionNoteStacking Whole toneInstrumentFunctionNoteStackingadd9InstrumentFunctionNoteStackingaugInstrumentFunctionNoteStackingaugsus4InstrumentFunctionNoteStackingm-Maj11InstrumentFunctionNoteStackingm-Maj13InstrumentFunctionNoteStackingm-Maj7InstrumentFunctionNoteStacking m-Maj7add11InstrumentFunctionNoteStacking m-Maj7add13InstrumentFunctionNoteStackingm11InstrumentFunctionNoteStackingm13InstrumentFunctionNoteStackingm6InstrumentFunctionNoteStackingm6add9InstrumentFunctionNoteStackingm7InstrumentFunctionNoteStackingm7add11InstrumentFunctionNoteStackingm7add13InstrumentFunctionNoteStackingm7b5InstrumentFunctionNoteStackingm7b9InstrumentFunctionNoteStackingm9InstrumentFunctionNoteStackingm9-Maj7InstrumentFunctionNoteStackingm9b5InstrumentFunctionNoteStackingmadd9InstrumentFunctionNoteStackingminb5InstrumentFunctionNoteStackingminorInstrumentFunctionNoteStackingoctaveInstrumentFunctionNoteStackingsus2InstrumentFunctionNoteStackingsus4InstrumentFunctionNoteStackingtriInstrumentFunctionNoteStackingZakres akordu: Chord range:"InstrumentFunctionNoteStackingView ZAKRESRANGE"InstrumentFunctionNoteStackingViewU|yj tego pokrtBa aby ustawi zakres akordu w oktawach. Wybrany akord bdzie odgrywany w ramach okre[lonej liczby oktaw.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewoktawa(y) octave(s)"InstrumentFunctionNoteStackingView KANAACHANNELInstrumentMidiIOView$WACZ WEJZCIE MIDIENABLE MIDI INPUTInstrumentMidiIOView$WACZ WYJZCIE MIDIENABLE MIDI OUTPUTInstrumentMidiIOViewNUrzdzenia MIDI odbierajce zdarzenia z(MIDI devices to receive MIDI events fromInstrumentMidiIOViewNUrzdzenia MIDI wysyBajce zdarzenia do#MIDI devices to send MIDI events toInstrumentMidiIOViewPROGRAMPROGRAMInstrumentMidiIOView$PRDKOZ UDERZENIAVELOCITYInstrumentMidiIOView$2xDolnoprzepustowy 2x LowPassInstrumentSoundShaping"WszechprzepustowyAllpassInstrumentSoundShaping,Pasmowoprzepustowy csg BandPass csgInstrumentSoundShaping.Pasmowoprzepustowy czpg BandPass czpgInstrumentSoundShaping CUTOFFCUTOFFInstrumentSoundShaping.Czstotliwo[ granicznaCutoff frequencyInstrumentSoundShaping0Obwiednie/Oscylatory LFOEnvelopes/LFOsInstrumentSoundShapingRodzaj filtru Filter typeInstrumentSoundShaping GrnoprzepustowyHiPassInstrumentSoundShaping DolnoprzepustowyLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShapingPasmowozaporowyNotchInstrumentSoundShapingDDobro/Zafalowanie charakterystyki Q/ResonanceInstrumentSoundShapingRESORESOInstrumentSoundShaping6Zafalowanie charakterystyki ResonanceInstrumentSoundShapingGAOZNOZVOLUMEInstrumentSoundShapingGBo[no[VolumeInstrumentSoundShaping FILTRFILTERInstrumentSoundShapingViewFREQFREQInstrumentSoundShapingViewJW tym miejscu mo|esz wybra wbudowany filtr, ktry chcesz naBo|y na t [cie|k instrumentu. Filtry s bardzo istotne z punktu ksztaBtowania charakterystyki dzwiku.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRESORESOInstrumentSoundShapingView8Zafalowanie charakterystyki: Resonance:InstrumentSoundShapingView TARGETTARGETInstrumentSoundShapingViewTe zakBadki zawieraj obwiednie. S bardzo wa|ne przy modyfikacji dzwiku. Praktycznie zawsze s konieczne przy syntezie subtraktywnej. PrzykBadowo je[li mamy do czynienia z obwiedni amplitudy mo|esz ustali w ktrych momentach dzwik ma mie okre[lon gBo[no[. Je[li chcesz stworzy parti Bagodnych smykw ich dzwik powinien narasta i opada bardzo powoli. Mo|esz to uzyska przez ustawienie dBugich czasw ataku i wybrzmiewania. Podobnie jest w przypadku obwiedni innych parametrw jak panoramowanie czy czstotliwo[ graniczna. Mo|esz uzyska atrakcyjne dzwiki modyfikujc brzmienie ju| samej fali piBoksztaBtnej za pomoc r|nych obwiedni!_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingViewPU|yj tego pokrtBa aby ustawi dobro albo zafalowanie charakterystyki wybranego filtru. Te parametry okre[laj zachowanie filtru w okolicach czstotliwo[ci granicznej.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingView~U|yj tego pokrtBa aby ustawi czstotliwo[ graniczn wybranego filtru. Czstotliwo[ ta okre[la ktre czstotliwo[ci bd wycinane przez filtr. PrzykBadowo filtr dolnoprzepustowy wycina caBe pasmo czstotliwo[ciowe powy|ej czstotliwo[ci granicznej. W przypadku filtru grnoprzepustowego jest odwrotnie i tak dalej...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingViewNuta bazowa Base noteInstrumentTrack&Ustawienia domy[lneDefault presetInstrumentTrackKanaB FX FX channelInstrumentTrackPanoramowaniePanningInstrumentTrackOdstrojeniePitchInstrumentTrackGBo[no[VolumeInstrumentTrackZa pomoc tego pokrtBa mo|esz okre[li gBo[no[ otwartego kanaBu.Poka|/ukryj notatki do projektuShow/hide project notes MainWindowKatalog roboczy LMMSa %1 nie istnieje. Stworzy go teraz? Mo|esz zmieni katalog pzniej poprzez Edycja -> Ustawienia.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowBie|cy projekt zostaB zmodyfikowany od ostatniego zapisu. Czy chcesz go zapisa teraz?OThe current project was modified since last saving. Do you want to save it now? MainWindowNienazwaneUntitled MainWindowCo to jest? What's this? MainWindowKatalog roboczyWorking directory MainWindow*Denominator MetrycznyMeter Denominator MeterDialog&Numerator MetrycznyMeter Numerator MeterDialog METRUMTIME SIG MeterDialogDenominator Denominator MeterModelNumerator Numerator MeterModelURZDZENIEDEVICEMidiAlsaRaw::setupWidgetURZDZENIEDEVICEMidiAlsaSeq::setupWidgetKontroler MIDIMIDI ControllerMidiController0kontroler midi bez nazwyunnamed_midi_controllerMidiController2Konfiguracja niekompletnaSetup incomplete MidiImportTego LMMS nie skompilowano ze wsparciem odtwarzacza SoundFont2, ktry jest wykorzystywany do dodawania domy[lnych dzwikw do zaimportowanych plikw MIDI. Wskutek tego po zaimportowaniu pliku MIDI nie usByszysz |adnego dzwiku.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImportNie masz skonfigurowanego domy[lnego soundfonta w oknie dialogowym (Edycja->Ustawienia). Bdzie to skutkowa brakiem dzwiku po zaimportowaniu pliku MIDI. Powiniene[ pobra soundfonty General MIDI, dokona zmiany ustawieD i sprbowa ponownie.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImportURZDZENIEDEVICEMidiOss::setupWidget<Zafiksowana prdko[ wej[ciowaFixed input velocityMidiPort<Zafiksowana prdko[ wyj[ciowaFixed output velocityMidiPortKanaB wej[ciowy Input channelMidiPort&Kontroler wej[ciowyInput controllerMidiPort,Wyj[ciowy program MIDIOutput MIDI programMidiPortKanaB wyj[ciowyOutput channelMidiPort&Kontroler wyj[ciowyOutput controllerMidiPort0Odbieraj komunikaty MIDIReceive MIDI-eventsMidiPort.WysyBaj komunikaty MIDISend MIDI-eventsMidiPortVibratoVibrato NesInstrument&Rodzaj modulacji %1Modulation type %1OscillatorObject4Osc %1 zgrubne odstrojenieOsc %1 coarse detuningOscillatorObject@Osc %1 dokBadne odstrojenie lewoOsc %1 fine detuning leftOscillatorObjectBOsc %1 dokBadne odstrojenie prawoOsc %1 fine detuning rightOscillatorObject(Osc %1 panoramowanieOsc %1 panningOscillatorObject4Osc %1 przesunicie fazoweOsc %1 phase-offsetOscillatorObject<Osc %1 odstrojenie fazy stereoOsc %1 stereo phase-detuningOscillatorObjectOsc %1 gBo[no[ Osc %1 volumeOscillatorObject&Osc %1 ksztaBt faliOsc %1 wave shapeOscillatorObjectOsc %1 przebiegOsc %1 waveformOscillatorObjectKliknij tutaj, aby otworzy inny plik Patch. Ustawienia ptli i dostrojenia nie zostan zresetowane.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewW tym miejscu mo|esz uruchomi tryb zaptlenia. Je[li to zrobisz PatMan bdzie u|ywaB informacji o ptli dostpnych w pliku.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewW tym miejscu mo|esz uruchomi tryb dostrojenia. Patman dostroi prbk do czstotliwo[ci nut.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanView PtlaLoop PatmanViewTryb zaptlenia Loop mode PatmanView2Nie wybrano |adnego plikuNo file selected PatmanView,Otwrz inny plik PatchOpen other patch PatmanView"Otwrz plik PatchOpen patch file PatmanView&Pliki Patch (*.pat)Patch-Files (*.pat) PatmanViewDostrojenieTune PatmanView Tryb dostrojenia Tune mode PatmanViewDodaj kroki Add steps PatternViewZmieD nazw Change name PatternView,Wyczy[ wszystkie nutyClear all notes PatternView8Otwrz w Edytorze PianolowymOpen in piano-roll PatternViewUsuD kroki Remove steps PatternViewZresetuj nazw Reset name PatternViewPodwjne kliknicie otwiera pattern w Edytorze Pianolowym u|yj kBka myszy aby ustawi gBo[no[ poszczeglnych krokwWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewPeak KontrolerPeak ControllerPeakControllerKontroler LFOLFO ControllerPeakControllerDialogPEAKPEAKPeakControllerDialog Atak:Attack:!PeakControllerEffectControlDialogBAZABASE!PeakControllerEffectControlDialog$WspBczynnik bazy: Base amount:!PeakControllerEffectControlDialog.WspBczynnik modulacji:Modulation amount:!PeakControllerEffectControlDialogWybrzmiewanie:Release:!PeakControllerEffectControlDialogNarastanieAttackPeakControllerEffectControlsWarto[ bazowa Base valuePeakControllerEffectControls,WspBczynnik modulacjiModulation amountPeakControllerEffectControlsWycisz wyj[cie Mute outputPeakControllerEffectControlsWybrzmiewanieReleasePeakControllerEffectControlsKliknij tutaj, aby przej[ do trybu odstrojenia. W tym trybie mo|esz odstraja nuty w oknie, ktre otworzy si po klikniciu na nich. Ten tryb mo|esz aktywowa z poziomu klawiatury przez wci[nicie kombinacji 'Shift+T'.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollrKliknij tutaj, aby przej[ do trybu rysowania. W tym trybie mo|esz dodawa, przemieszcza i zmienia rozmiar nut To domy[lny tryb, ktry bdziesz u|ywa przez wikszo[ czasu. Mo|esz go aktywowa z poziomu klawiatury za pomoc skrtu 'Shift+D'. Przytrzymaj klawisz 'Ctrl' aby czasowo przej[ do trybu zaznaczenia.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRoll(Kliknij tutaj, aby przej[ do trybu kasowania. W tym trybie mo|esz usuwa nuty. Mo|esz go aktywowa z poziomu klawiatury za pomoc skrtu 'Shift+E'.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRollKliknij tutaj, aby przej[ do trybu zaznaczania. W tym trybie mo|esz zaznacza pojedyncze nuty lub caBe ich grupy. Alternatywnie mo|esz przytrzyma klawisz 'Ctrl' w trybie rysowania aby tymczasowo przej[ do trybu zaznaczania.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRollKliknij tutaj a nuty ze schowka zostan przeklejone w miejsce zaznaczenia.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRollKliknij tutaj a zaznaczone nuty zostan skopiowane do schowka. Mo|esz wklei je gdziekolwiek w dowolnym patternie za pomoc przycisku 'Wklej'.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll0Kliknij tutaj a zaznaczone nuty zostan wycite i umieszczone w schowku. Mo|esz wklei je gdziekolwiek w dowolnym patternie za pomoc przycisku 'Wklej'.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollKliknij tutaj je[li chcesz odtworzy bie|cy pattern. Pattern zostanie automatycznie zaptlony.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRollKliknij tutaj, aby nagra nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanaBu. Podczas nagrywania wszystkie nuty ktre zagrasz zostan zapisane na pattern i bdziesz mgB odtworzy i edytowa je pzniej.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRollKliknij tutaj, aby nagra nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanaBu. Podczas nagrywania bdziesz sBysze utwr lub lini perkusyjn/basow a wszystkie nuty ktre zagrasz zostan zapisane na pattern.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRollKliknij tutaj je[li chcesz zatrzyma odtwarzanie bie|cego patternu./Click here to stop playback of current pattern. PianoRoll@Skopiuj zaznaczone nuty (Ctrl+C)Copy selected notes (Ctrl+C) PianoRoll>Wytnij zaznaczone nuty (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll4Tryb odstrojenia (Shift+T)Detune mode (Shift+T) PianoRoll0Tryb rysowania (Shift+D)Draw mode (Shift+D) PianoRoll4Tryb wymazywania (Shift+E)Erase mode (Shift+E) PianoRollOstatnia nuta Last note PianoRoll$Panoramowanie Nuty Note Panning PianoRollGBo[no[ Nuty Note Volume PianoRollBlokada nuty Note lock PianoRoll<Wklej nuty ze schowka (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRoll*Edytor Pianolowy - %1Piano-Roll - %1 PianoRoll@Edytor Pianolowy - brak patternuPiano-Roll - no pattern PianoRollVOdtwrz/zatrzymaj aktualny pattern (Spacja)"Play/pause current pattern (Space) PianoRollNWprowadz now warto[ pomidzy %1 a %2:+Please enter a new value between %1 and %2: PianoRollJOtwrz pattern podwjnym klikniciem!/Please open a pattern by double-clicking on it! PianoRolldNagraj nuty za pomoc zewntrznego kontrolera MIDI+Record notes from MIDI-device/channel-piano PianoRollNagraj nuty za pomoc zewntrznego kontrolera MIDI w trakcie odtwarzania podkBadu dzwikowegoJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll4Tryb zaznaczania (Shift+S)Select mode (Shift+S) PianoRollbZatrzymaj odtwarzanie bie|cego patternu (Spacja)'Stop playing of current pattern (Space) PianoRollNuta podstawowa Base note PianoViewNWystpiB bBd podczas Badowania wtyczkiError while loading pluginPluginBNie mo|na zaBadowa wtyczki "%1"!Failed to load plugin "%1"!Plugin,Nie znaleziono wtyczkiPlugin not foundPluginWtyczka "%1" Nie zostaBa odnaleziona albo nie mo|e zosta zaBadowana! Powd: "%2"AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin<Skompresowany plik OGG (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer Plik WAV (*.wav)WAV-File (*.wav)ProjectRenderer$KanaBy wej[ciowe:  Channels In: QWidget$KanaBy wyj[ciowe: Channels Out: QWidget"Prawa autorskie:  Copyright: QWidget Plik: File: QWidgetTwrca: Maker: QWidgetNazwa: Name: QWidgetNieNoQWidgetRZdolno[ do pracy w czasie rzeczywistym: Real Time Capable: QWidget8Wymaga czasu rzeczywistego: Requires Real Time: QWidgetTakYesQWidget2Pliki AIFF (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBufferPliki AU (*.au)AU-Files (*.au) SampleBuffer,Pliki DrumSynth (*.ds)DrumSynth-Files (*.ds) SampleBuffer&Pliki FLAC (*.flac)FLAC-Files (*.flac) SampleBuffer"Pliki OGG (*.ogg)OGG-Files (*.ogg) SampleBuffer"Otwrz plik audioOpen audio file SampleBuffer"Pliki RAW (*.raw)RAW-Files (*.raw) SampleBuffer&Pliki SPEEX (*.spx)SPEEX-Files (*.spx) SampleBuffer"Pliki VOC (*.voc)VOC-Files (*.voc) SampleBuffer"Pliki WAV (*.wav)Wave-Files (*.wav) SampleBuffer KopiujCopy SampleTCOView WytnijCut SampleTCOView8Kasuj (naci[nij rolk myszy)Delete (middle mousebutton) SampleTCOViewtWycisz/anuluj wyciszenie (<Ctrl> + kliknicie rolk myszy)#Mute/unmute ( + middle click) SampleTCOView WklejPaste SampleTCOView,Ustaw/wyczy[ nagranieSet/clear record SampleTCOViewHwybierz sampla podwjnym klikniciemdouble-click to select sample SampleTCOViewZcie|ka audio Sample track SampleTrackGBo[no[Volume SampleTrack GBo[no[ kanaBu:Channel volume:SampleTrackView GBo[no[ [cie|ki Track volumeSampleTrackViewVOLVOLSampleTrackView0Dodaj [cie|k automatykiAdd automation-track SongEditor:Dodaj lini basow/perkusyjnAdd beat/bassline SongEditor0Dodaj [cie|k z samplamiAdd sample-track SongEditor<Kliknij tutaj, je[li chcesz odtworzy caB piosenk. Odtwarzanie rozpocznie si od zielonego znacznika pozycji. Mo|esz go przemieszcza w trakcie odtwarzania.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorKliknij tutaj, je[li chcesz zatrzyma odtwarzanie piosenki. Znacznik pozycji zostanie ustawiony na pocztek utworu.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor0Nie mo|na otworzy plikuCould not open file SongEditortNie da si otworzy pliku %1. Prawdopodobnie nie posiadasz uprawnieD do odczytu tego pliku. Upewnij si, |e masz przynajmniej uprawnienia odczytu tego pliku a nastpnie sprbuj ponownie.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor.Nie mo|na zapisa plikuCould not write file SongEditorTryb rysowania Draw mode SongEditorVTryb edycji (zaznaczanie i przemieszczanie)Edit mode (select and move) SongEditorBBd w pliku Error in file SongEditor*Tryb wysokiej jako[ciHigh quality mode SongEditor$Odstrojenie gBwne Master pitch SongEditorGBo[no[ gBwna Master volume SongEditor2Odtwrz piosenk (Spacja)Play song (Space) SongEditor@Nagraj sample z urzdzenia audio Record samples from Audio-device SongEditorNagrywa sample z urzdzenia audio podczas odtwarzania piosenki lub [cie|ki perkusji/basu?Record samples from Audio-device while playing song or BB track SongEditor"Edytor Kompozycji Song-Editor SongEditorNZatrzymaj odtwarzanie piosenki (Spacja)Stop song (Space) SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorWyglda na to, |e plik %1 zawiera bBdy i nie mo|e zosta zaBadowany.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditorTempo piosenki jest wyra|ane w uderzeniach na minut (BPM, Beats Per Minute). Je[li chcesz zmieni szybko[ swojej piosenki zmodyfikuj t warto[. Ka|dy takt zawiera cztery uderzenia, std tempo w BPM wyra|a jak wiele taktw / 4 powinno by odtworzone w cigu minuty (albo - je[li wolisz - jak wiele taktw ma by odtworzonych w cigu 4 minut).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor(Warto[: %1 pBtonwValue: %1 semitones SongEditorWarto[: %1% Value: %1% SongEditor$odstrojenie gBwne master pitch SongEditorgBo[no[ gBwna master volume SongEditortempo piosenki tempo of song SongEditor,O[ Y skalowana liniowo Linear Y axisSpectrumAnalyzerControlDialog4Spektrum skalowane liniowoLinear spectrumSpectrumAnalyzerControlDialogTryb kanaBu Channel modeSpectrumAnalyzerControls,O[ Y skalowana liniowo Linear Y axisSpectrumAnalyzerControls4Spektrum skalowane liniowoLinear spectrumSpectrumAnalyzerControls &Pomoc&Help TempoSyncKnobSzesnastka 16th note TempoSyncKnob&Trzydziestka dwjka 32nd note TempoSyncKnob semka8th note TempoSyncKnob WBasneCustom  TempoSyncKnobWBasne... Custom... TempoSyncKnobOsiem uderzeD Eight beats TempoSyncKnobPBnuta Half note TempoSyncKnob&Brak synchronizacjiNo Sync TempoSyncKnobwiernuta Quarter note TempoSyncKnob<Zsynchronizowane do szesnastkiSynced to 16th Note TempoSyncKnobNZsynchronizowane do trzydziestki dwjkiSynced to 32nd Note TempoSyncKnob4Zsynchronizowane do semkiSynced to 8th Note TempoSyncKnobBZsynchronizowane do o[miu uderzeDSynced to Eight Beats TempoSyncKnob6Zsynchronizowane do pBnutySynced to Half Note TempoSyncKnob<Zsynchronizowane do wiernutySynced to Quarter Note TempoSyncKnob<Zsynchronizowane do caBej nutySynced to Whole Note TempoSyncKnob(Synchronizacja tempa Tempo Sync TempoSyncKnobCaBa nuta Whole note TempoSyncKnob AnulujCancelTrackContainerDNie mo|na odnalez filtra do zaimportowania pliku %1. Powinienie[ przekonwertowa ten plik do formatu wspieranego przez LMMS z pomoc zewntrznego oprogramowania.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer8Nie mo|na zaimportowa plikuCouldn't import fileTrackContainer0Nie mo|na otworzy plikuCouldn't open fileTrackContainer6Nie da si otworzy pliku %1 do odczytu. Upewnij si, |e masz uprawnienia do odczytu tego pliku i katalogu zawierajcego plik a nastpnie sprbuj ponownie!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer2Importowanie pliku FLP...Importing FLP-file...TrackContainer4Importowanie pliku MIDI...Importing MIDI-file...TrackContainer*Aadowanie projektu...Loading project...TrackContainer Prosz czeka...Please wait...TrackContainer@Miksuj wyj[cia oscylatorw 1 & 2Mix output of oscillator 1 & 2TripleOscillatorView@Miksuj wyj[cia oscylatorw 2 & 3Mix output of oscillator 2 & 3TripleOscillatorView:Osc %1 - zgrubne odstrojenie:Osc %1 coarse detuning:TripleOscillatorViewJOsc %1 - dokBadne odstrojenie w lewo:Osc %1 fine detuning left:TripleOscillatorViewLOsc %1 - dokBadne odstrojenie w prawo:Osc %1 fine detuning right:TripleOscillatorView.Osc %1 - panoramowanie:Osc %1 panning:TripleOscillatorView:Osc %1 - przesunicie fazowe:Osc %1 phase-offset:TripleOscillatorViewBOsc %1 - odstrojenie fazy stereo:Osc %1 stereo phase-detuning:TripleOscillatorView$Osc %1 - gBo[no[:Osc %1 volume:TripleOscillatorViewPSynchronizuj oscylator 1 z oscylatorem 2*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewPSynchronizuj oscylator 2 z oscylatorem 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorView|U|yj piBoksztaBtnego przebiegu mooga dla bie|cego oscylatora.0Use a moog-like saw-wave for current oscillator.TripleOscillatorViewdU|yj fali piBoksztaBtnej dla bie|cego oscylatora.&Use a saw-wave for current oscillator.TripleOscillatorViewbU|yj fali sinusoidalnej dla bie|cego oscylatora.'Use a sine-wave for current oscillator.TripleOscillatorView`U|yj fali prostoktnej dla bie|cego oscylatora.)Use a square-wave for current oscillator.TripleOscillatorView\U|yj fali trjktnej dla bie|cego oscylatora.+Use a triangle-wave for current oscillator.TripleOscillatorViewTU|yj fali zdefiniowanej przez u|ytkownika.3Use a user-defined waveform for current oscillator.TripleOscillatorViewU|yj modulacji amplitudowej aby zmodulowa oscylator 2 oscylatorem 1FUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewU|yj modulacji amplitudowej aby zmodulowa oscylator 3 oscylatorem 2FUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorView`U|yj fali wykBadniczej dla bie|cego oscylatora./Use an exponential wave for current oscillator.TripleOscillatorViewU|yj modulacji czstotliwo[ciowej aby zmodulowa oscylator 2 oscylatorem 1FUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewU|yj modulacji czstotliwo[ciowej aby zmodulowa oscylator 3 oscylatorem 2FUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorView~U|yj modulacji fazowej aby zmodulowa oscylator 2 oscylatorem 1BUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorView~U|yj modulacji fazowej aby zmodulowa oscylator 3 oscylatorem 2BUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewXU|yj biaBego szumu dla bie|cego oscylatora.'Use white-noise for current oscillator.TripleOscillatorView$Za pomoc tego pokrtBa mo|esz ustawi zgrubne odstrojenie oscylatora %1. Mo|esz odstraja oscylator o 12 pBtonw (caB oktaw) w gr lub w dB.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorView:Za pomoc tego pokrtBa mo|esz ustawi dokBadne odstrojenie oscylatora %1 dla lewego kanaBu. Zakres regulacji mie[ci si w przedziale od -100 do +100 centw.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorView<Za pomoc tego pokrtBa mo|esz ustawi dokBadne odstrojenie oscylatora %1 dla prawego kanaBu. Zakres regulacji mie[ci si w przedziale od -100 do +100 centw.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewZa pomoc tego pokrtBa mo|esz ustawi panoramowanie oscylatora %1. Warto[ -100 przesuwa oscylator 100% w lewo, warto[ 100 - 100% w prawo.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorView`Za pomoc tego pokrtBa mo|esz ustawi przesunicie fazowe oscylatora %1. Oznacza to, |e mo|esz przemie[ci w czasie moment w ktrym oscylator rozpoczyna drgania. Na przykBad je[li mamy do czynienie z fal sinusoidaln, wprowadzenie przesunicia fazowego o warto[ci 180 stopni spowoduje, |e pierwsza poBwka fali zacznie by generowana w stron warto[ci ujemnych, odwrotnie ni| w przypadku przesunicia fazowego o warto[ci 0 stopni.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorViewZa pomoc tego pokrtBa mo|esz ustawi odstrojenie fazy stereo oscylatora %1. Oznacza to, |e masz wpByw na r|nic fazy pomidzy lewym i prawym kanaBem. Ta gaBka pomo|e Ci stworzy szeroko brzmice dzwiki.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorViewZa pomoc tego pokrtBa mo|esz ustawi gBo[no[ oscylatora %1. Je[li zadasz warto[ 0 oscylator zostanie wyBczony.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorView centycentsTripleOscillatorView stopnidegreesTripleOscillatorViewpBtony semitonesTripleOscillatorViewKliknij tutaj, aby zaznaczy presety aktualnie zaBadowane do wtyczki VST.>Click here to select presets that are currently loaded in VST.VestigeInstrumentViewKliknij tutaj aby pokaza graficzny interfejs u|ytkownika (GUI) wtyczki VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewKliknij tutaj, je[li chcesz kontrolowa wtyczk VST z hosta LMMS.8Click here, if you want to control VST-plugin from host.VestigeInstrumentViewKliknij tutaj, je[li chcesz otworzy inny preset wtyczki VST w formacie *.fxp lub *.fxb.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VestigeInstrumentViewKliknij tutaj je[li chcesz otworzy inn wtyczk VST. Po klikniciu otworzy si okno dialogowe w ktrym bdziesz mgB zaznaczy wybrany plik.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentViewDKontroluj wtyczk VST z hosta LMMS!Control VST-plugin from LMMS hostVestigeInstrumentView"Pliki DLL (*.dll)DLL-files (*.dll)VestigeInstrumentView"Pliki EXE (*.exe)EXE-files (*.exe)VestigeInstrumentViewNastpny (+)Next (+)VestigeInstrumentView4Nie zaBadowano wtyczki VSTNo VST-plugin loadedVestigeInstrumentView$Otwrz wtyczk VSTOpen VST-pluginVestigeInstrumentView2Otwrz preset wtyczki VSTOpen VST-plugin presetVestigeInstrumentView.Otwrz inn wtyczk VSTOpen other VST-pluginVestigeInstrumentView PresetPresetVestigeInstrumentViewPoprzedni (-) Previous (-)VestigeInstrumentViewZapisz preset Save presetVestigeInstrumentViewPoka|/ukryj GUI Show/hide GUIVestigeInstrumentView*Wycisz wszystkie nutyTurn off all notesVestigeInstrumentViewKliknij tutaj, je[li chcesz zaznaczy presety aktualnie zaBadowane do wtyczki VST.>Click here to select presets that are currently loaded in VST.VstEffectControlDialogKliknij tutaj, je[li chcesz kontrolowa wtyczk VST z hosta LMMS.8Click here, if you want to control VST-plugin from host.VstEffectControlDialogKliknij tutaj, je[li chcesz otworzy inny preset wtyczki VST w formacie *.fxp lub *.fxb.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VstEffectControlDialogDKontroluj wtyczk VST z hosta LMMS!Control VST-plugin from LMMS hostVstEffectControlDialogNastpny (+)Next (+)VstEffectControlDialog2Otwrz preset wtyczki VSTOpen VST-plugin presetVstEffectControlDialogPoprzedni (-) Previous (-)VstEffectControlDialogZapisz preset Save presetVstEffectControlDialog.FXB.FXB VstPlugin.FXP.FXP VstPlugin.fxb.fxb VstPlugin.fxp.fxp VstPlugin: domy[lne : default VstPlugin"Aadowanie wtyczkiLoading plugin VstPluginOtwrz Preset Open Preset VstPluginZapisz Preset Save Preset VstPlugin@Preset wtyczki VST (*.fxp *.fxb)Vst Plugin Preset (*.fxp *.fxb) VstPluginNarysuj swj wBasny przebieg przecigajc kursorem po tym wykresie.ADraw your own waveform here by dragging your mouse on this graph. WatsynViewNormalizacja Normalize WatsynViewWygBadzanieSmooth WatsynViewSzeroko[ Pasma BandwidthZynAddSubFxInstrumentWzmocnienie FMFM GainZynAddSubFxInstrument(Czstotliwo[ FiltraFilter FrequencyZynAddSubFxInstrument$Zafalowanie FiltraFilter ResonanceZynAddSubFxInstrumentTPrzeka| Zdarzenia MIDI typu Control Change"Forward MIDI Control Change EventsZynAddSubFxInstrumentPortamento PortamentoZynAddSubFxInstrument6Szeroko[ Pasma ZafalowaniaResonance BandwidthZynAddSubFxInstrumentDCzstotliwo[ Zrodkowa ZafalowaniaResonance Center FrequencyZynAddSubFxInstrumentBWBWZynAddSubFxView Szeroko[ Pasma: Bandwidth:ZynAddSubFxViewKliknij tutaj, aby pokaza lub ukry graficzny interfejs u|ytkownika (GUI) syntezatora ZynAddSubFX.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewFM GAINFM GAINZynAddSubFxViewWzmocnienie FM:FM Gain:ZynAddSubFxViewFREQFREQZynAddSubFxView*Czstotliwo[ Filtra:Filter Frequency:ZynAddSubFxView&Zafalowanie Filtra:Filter Resonance:ZynAddSubFxViewTPrzeka| zdarzenia MIDI typu Control ChangeForward MIDI Control ChangesZynAddSubFxViewPORTPORTZynAddSubFxViewPortamento: Portamento:ZynAddSubFxViewRESRESZynAddSubFxView RES BWRES BWZynAddSubFxView RES-CFRES CFZynAddSubFxView8Szeroko[ pasma zafalowania:Resonance bandwidth:ZynAddSubFxViewFCzstotliwo[ [rodkowa zafalowania:Resonance center frequency:ZynAddSubFxViewPoka| GUIShow GUIZynAddSubFxViewWzmacniajAmplifyaudioFileProcessorKoniec sampla End of sampleaudioFileProcessorTryb zaptlenia Loop modeaudioFileProcessorOdwr prbkReverse sampleaudioFileProcessorPocztek samplaStart of sampleaudioFileProcessor0Dodaj [cie|k automatykiAdd automation-trackbbEditor:Dodaj lini perkusyjn/basowAdd beat/basslinebbEditorDodaj kroki Add stepsbbEditor,Edytor Perkusji i BasuBeat+Bassline EditorbbEditorKliknij tutaj, aby odtworzy bie|c lini perkusyjn/basow. Zostanie ona automatycznie zaptlona.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorKliknij tutaj, aby zatrzyma odtwarzanie bie|cej linii perkusyjnej/basowej.4Click here to stop playing of current beat/bassline.bbEditorrOdtwrz/ZapaBzuj bie|c lini perkusyjn/basow (Spacja)(Play/pause current beat/bassline (Space)bbEditorUsuD kroki Remove stepsbbEditorZatrzymaj odtwarzanie bie|cej linii perkusyjnej/basowej (Spacja).Stop playback of current beat/bassline (Space)bbEditorZmieD kolor Change color bbTCOViewZmieD nazw Change name bbTCOViewBOtwrz w Edytorze Perkusji i BasuOpen in Beat+Bassline-Editor bbTCOViewZresetuj nazw Reset name bbTCOViewPerkusja/Bas %1Beat/Bassline %1bbTrackDuplikat %1 Clone of %1bbTrackDBugo[ prbki Samplelength bitInvader`Kliknij aby przeBczy na przebieg sinusoidalny.Click for a sine-wave.bitInvaderViewbKliknij aby przeBczy na przebieg piBoksztaBtny.Click here for a saw-wave.bitInvaderView^Kliknij aby przeBczy na przebieg prostoktny.Click here for a square-wave.bitInvaderViewZKliknij aby przeBczy na przebieg trjktny.Click here for a triangle-wave.bitInvaderViewKliknij aby przeBczy na przebieg zdefiniowany przez u|ytkownika.$Click here for a user-defined shape.bitInvaderViewbKliknij aby przeBczy na przebieg stochastyczny.Click here for white-noise.bitInvaderViewLKliknij tutaj, aby wygBadzi przebieg.Click here to smooth waveform.bitInvaderViewNarysuj swj wBasny przebieg przecigajc kursorem po tym wykresie.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderViewInterpolacja InterpolationbitInvaderViewNormalizacja NormalizebitInvaderViewDBugo[ Prbki Sample LengthbitInvaderView$Fala piBoksztaBtnaSaw wavebitInvaderView"Fala sinusoidalna Sine wavebitInvaderViewWygBadzanieSmoothbitInvaderView Fala prostoktna Square wavebitInvaderViewFala trjktna Triangle wavebitInvaderViewNPrzebieg zdefiniowany przez u|ytkownikaUser defined wavebitInvaderViewBiaBy szumWhite noise wavebitInvaderView0Nie mo|na otworzy plikuCould not open fileexportProjectDialog8Nie da si otworzy pliku %1 do zapisu. Upewnij si, |e masz uprawnienia zapisu do tego pliku i katalogu w ktrym si znajduje a nastpnie sprbuj ponownie!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialogBBdErrorexportProjectDialogWystpiB bBd podczas okre[lania enkodera. Sprbuj wybra inny format wyj[ciowy.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog,Eksport projektu do %1Export project to %1exportProjectDialogRendering: %1%Rendering: %1%exportProjectDialogNWprowadz now warto[ pomidzy %1 a %2:+Please enter a new value between %1 and %2:fader WykresGraph graphModel*Czstotliwo[ koDcowa End frequencykickerInstrumentWzmocnienieGainkickerInstrumentSzumNoisekickerInstrument0Czstotliwo[ pocztkowaStart frequencykickerInstrument,Czstotliwo[ koDcowa:End frequency:kickerInstrumentViewWzmocnienie:Gain:kickerInstrumentView2Czstotliwo[ pocztkowa:Start frequency:kickerInstrumentView &Pomoc&HelpknobNWprowadz now warto[ pomidzy %1 a %2:+Please enter a new value between %1 and %2:knobfWprowadz now warto[ pomidzy -96.0 dBV a 6.0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob*Narzdzia AnalizujceAnalysis ToolsladspaBrowserViewDostpne EfektyAvailable EffectsladspaBrowserViewNieznane Don't knowladspaBrowserViewInstrumenty InstrumentsladspaBrowserViewTo okno dialogowe wy[wietla informacje o wszystkich wtyczkach LADSPA jakie LMMS byB w stanie zlokalizowa. Wtyczki s podzielone na pi kategorii bazujcych na intepretacji ich portw i nazw. Efekty dostpne to te, ktre mog zosta u|yte przez LMMS. Aby wtyczka efektowa mogBa zosta wykorzystana musi posiada zarwno kanaBy wej[ciowe jak i wyj[ciowe. KanaBy wej[ciowe s identyfikowane jako zawierajce wyraz 'in' w nazwie kanaBu, kanaBy wyj[ciowe natomiast powinny w nazwie zawiera sBowo 'out'. Ponadto efekt musi posiada tak sam liczb wej[ i wyj[ a tak|e obsBugiwa tryb pracy w czasie rzeczywistym. Efekty niedostpne to takie, ktre posiadaj r|n liczb wej[ i wyj[ albo nie potrafi pracowa w czasie rzeczywistym. Instrumenty to wtyczki, w ktrych udaBo si zidentyfikowa jedynie kanaBy wyj[ciowe. Narzdzia Analizujce to wtyczki, w ktrych rozpoznano tylko kanaBy wej[ciowe. Nieznane to wtyczki, ktrych kanaBy zarwno wej[ciowe jak i wyj[ciowe pozostaj niezidentyfikowane. Podwjne kliknicie na ktrejkolwiek wtyczce otworzy okienko z informacjami o dostpnych portach.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserViewRodzaj:Type:ladspaBrowserView$Niedostpne EfektyUnavailable EffectsladspaBrowserViewOpis DescriptionladspaDescriptionWtyczkiPluginsladspaDescription AudioAudioladspaPortDialogRegulatorControlladspaPortDialogKierunek DirectionladspaPortDialog$ZmiennoprzecinkoweFloatladspaPortDialogWej[cieInputladspaPortDialogCaBkowiteIntegerladspaPortDialogLogarytmiczny LogarithmicladspaPortDialog(Min < Domy[lne < MaxMin < Default < MaxladspaPortDialog NazwaNameladspaPortDialogWyj[cieOutputladspaPortDialog PortyPortsladspaPortDialog TempoRateladspaPortDialogZale|ny od SR SR DependentladspaPortDialogPrzeBczalneToggledladspaPortDialog RodzajTypeladspaPortDialogTakYesladspaPortDialogFiltr 24dB/okt24dB/oct Filter lb302Synth AkcentAccent lb302Synth MartwyDead lb302SynthZnieksztaBcenie Distortion lb302SynthZlizganieSlide lb302Synth(Zlizgajce Zanikanie Slide Decay lb302Synth4Czstotliwo[ Odcicia VCFVCF Cutoff Frequency lb302Synth,Zanikanie Obwiedni VCFVCF Envelope Decay lb302Synth0Modyfikacja Obwiedni VCFVCF Envelope Mod lb302SynthRezonans VCF VCF Resonance lb302Synth"KsztaBt PrzebieguWaveform lb302SynthP303-es-que, 24dB/oktaw, filtr III rzdu&303-es-que, 24dB/octave, 3 pole filterlb302SynthViewnKliknij tutaj, aby przeBczy na przebieg sinusoidalny.Click for a sine-wave.lb302SynthView`Kliknij tutaj, aby przeBczy na przebieg mooga. Click here for a moog-like wave.lb302SynthViewpKliknij tutaj, aby przeBczy na przebieg piBoksztaBtny.Click here for a saw-wave.lb302SynthViewKliknij tutaj, aby przeBczy na przebieg prostoktny z zaokrglonymi naro|ami.0Click here for a square-wave with a rounded end.lb302SynthViewlKliknij tutaj, aby przeBczy na przebieg prostoktny.Click here for a square-wave.lb302SynthViewhKliknij tutaj, aby przeBczy na przebieg trjktny.Click here for a triangle-wave.lb302SynthViewlKliknij tutaj, aby przeBczy na przebieg wykBadniczy.#Click here for an exponential wave.lb302SynthViewpKliknij tutaj, aby przeBczy na przebieg stochastyczny.Click here for white-noise.lb302SynthViewCzst. Odc.: Cutoff Freq:lb302SynthView DIST:DIST:lb302SynthViewZanikanie:Decay:lb302SynthViewMod. Obw.:Env Mod:lb302SynthViewFala Mooga Moog wavelb302SynthViewRezonans: Resonance:lb302SynthView:Fala prostoktna, zaokrglonaRounded square wavelb302SynthView$Fala piBoksztaBtnaSaw wavelb302SynthView"Fala sinusoidalna Sine wavelb302SynthView.Zanikanie z po[lizgiem: Slide Decay:lb302SynthView Fala prostoktna Square wavelb302SynthViewFala trjktna Triangle wavelb302SynthViewBiaBy szumWhite noise wavelb302SynthViewFiltr 24dB/okt24dB/oct Filter lb303Synth AkcentAccent lb303Synth MartwyDead lb303SynthZnieksztaBcenie Distortion lb303SynthPo[lizgSlide lb303Synth,Zanikanie z po[lizgiem Slide Decay lb303Synth4Czstotliwo[ Odcicia VCFVCF Cutoff Frequency lb303Synth,Zanikanie Obwiedni VCFVCF Envelope Decay lb303Synth0Modyfikacja Obwiedni VCFVCF Envelope Mod lb303SynthRezonans VCF VCF Resonance lb303Synth"KsztaBt PrzebieguWaveform lb303SynthP303-es-que, 24dB/oktaw, filtr III rzdu&303-es-que, 24dB/octave, 3 pole filterlb303SynthViewCUTCUTlb303SynthViewCzst. Odc.: Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthView DIST:DIST:lb303SynthViewZanikanie:Decay:lb303SynthViewENV MODENV MODlb303SynthViewMod. Obw.:Env Mod:lb303SynthViewRESRESlb303SynthViewRezonans: Resonance:lb303SynthView SLIDESLIDElb303SynthView.Zanikanie z po[lizgiem: Slide Decay:lb303SynthViewFALAWAVElb303SynthView FALA:WAVE:lb303SynthViewADSRADSRmalletsInstrument AgogoAgogomalletsInstrumentUderzeniaBeatsmalletsInstrumentPochylenieBowedmalletsInstrumentStpnicieClumpmalletsInstrumentCrossfade CrossfademalletsInstrumentHarfa SzklanaGlassmalletsInstrumentTwardo[HardnessmalletsInstrumentLFO - GBboko[ LFO DepthmalletsInstrumentLFO - Szybko[ LFO SpeedmalletsInstrumentMarimbaMarimbamalletsInstrumentPominite pliki Missing filesmalletsInstrumentModulator ModulatormalletsInstrumentRuchMotionmalletsInstrumentPozycjaPositionmalletsInstrumentCi[nieniePressuremalletsInstrumentRezonansResomalletsInstrumentPrdko[SpeedmalletsInstrumentRozstrzaBSpreadmalletsInstrumentStick Mix Stick MixmalletsInstrument Misy TybetaDskie Tibetan BowlmalletsInstrumentDzwony Rurowe Tubular BellsmalletsInstrumentDwa Zafiksowane Two FixedmalletsInstrumentWibrafon VibraphonemalletsInstrument.Vibrato - Czstotliwo[ Vibrato FreqmalletsInstrument*Vibrato - Wzmocnienie Vibrato GainmalletsInstrument Wood1Wood1malletsInstrument Wood2Wood2malletsInstrumentWyglda na to, |e Twoja instalacja Stk jest niekompletna. Upewnij si, |e caBa paczka Stk zostaBa zainstalowana!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR:ADSR:malletsInstrumentViewPochylenieBowedmalletsInstrumentViewCrossfade CrossfademalletsInstrumentViewCrossfade: Crossfade:malletsInstrumentViewTwardo[HardnessmalletsInstrumentViewTwardo[: Hardness:malletsInstrumentViewInstrument InstrumentmalletsInstrumentViewLFO - GBboko[ LFO DepthmalletsInstrumentView LFO - GBboko[: LFO Depth:malletsInstrumentViewLFO - Szybko[ LFO SpeedmalletsInstrumentViewLFO - Szybko[: LFO Speed:malletsInstrumentViewModulator ModulatormalletsInstrumentViewModulator: Modulator:malletsInstrumentViewRuchMotionmalletsInstrumentView Ruch:Motion:malletsInstrumentViewPozycjaPositionmalletsInstrumentViewPozycja: Position:malletsInstrumentViewCi[nieniePressuremalletsInstrumentViewCi[nienie: Pressure:malletsInstrumentViewPrdko[SpeedmalletsInstrumentViewPrdko[:Speed:malletsInstrumentViewRozstrzaBSpreadmalletsInstrumentViewRozstrzaB:Spread:malletsInstrumentViewStick Mix Stick MixmalletsInstrumentViewStick Mix: Stick Mix:malletsInstrumentViewVib-CzstVib FreqmalletsInstrumentViewVib-Czst: Vib Freq:malletsInstrumentViewVib-WzmVib GainmalletsInstrumentViewVib-Wzm: Vib Gain:malletsInstrumentViewVibratoVibratomalletsInstrumentViewVibrato:Vibrato:malletsInstrumentViewKliknij tutaj, je[li chcesz zsynchronizowa wszystkie parametry z wtyczk VST.EClick here if you want to synchronize all parameters with VST plugin.manageVSTEffectView$Synchronizacja VSTVST SyncmanageVSTEffectViewKliknij tutaj, je[li chcesz zsynchronizowa wszystkie parametry z wtyczk VST.EClick here if you want to synchronize all parameters with VST plugin.manageVestigeInstrumentView$Synchronizacja VSTVST SyncmanageVestigeInstrumentViewPomoc [&H]&HelpnineButtonSelector PrbkaPatchopl2instrumentZnieksztaBcenie DistortionorganicInstrumentGBo[no[VolumeorganicInstrument ZnieksztaBcenie: Distortion:organicInstrumentView*Osc %1 panoramowanie:Osc %1 panning:organicInstrumentView Osc %1 gBo[no[:Osc %1 volume:organicInstrumentView Osc %1 przebieg:Osc %1 waveform:organicInstrumentViewRandomizuj RandomiseorganicInstrumentViewGBo[no[:Volume:organicInstrumentViewcent(y)centsorganicInstrumentViewBasyBasspapuInstrument"GBo[no[ kanaBu 1Channel 1 volumepapuInstrument"GBo[no[ kanaBu 2Channel 2 volumepapuInstrument"GBo[no[ kanaBu 3Channel 3 volumepapuInstrument"GBo[no[ kanaBu 4Channel 4 volumepapuInstrument*Poziom Wyj[cia LewegoLeft Output levelpapuInstrument>DBugo[ ka|dego kroku wobulacjiLength of each step in sweeppapuInstrument,Poziom Wyj[cia PrawegoRight Output levelpapuInstrument$Kierunek wobulacjiSweep directionpapuInstrumentOkres wobulacji Sweep timepapuInstrumentSopranyTreblepapuInstrument8Kierunek wobulacji gBo[no[ciVolume sweep directionpapuInstrumentBasyBasspapuInstrumentView Basy:Bass:papuInstrumentView Narysuj przebiegDraw the wave herepapuInstrumentView>DBugo[ ka|dego kroku wobulacjiLength of each step in sweeppapuInstrumentView@DBugo[ ka|dego kroku wobulacji:Length of each step in sweep:papuInstrumentView$Kierunek wobulacjiSweep DirectionpapuInstrumentViewOkres wobulacji Sweep TimepapuInstrumentView Okres wobulacji: Sweep Time:papuInstrumentViewSopranyTreblepapuInstrumentViewSoprany:Treble:papuInstrumentView8Kierunek wobulacji gBo[no[ciVolume Sweep DirectionpapuInstrumentViewSyntezator Addytywny umo|liwiajcy stworzenie dzwikw zbli|onych brzmieniem do organw.*Additive Synthesizer for organ-like sounds pluginBrowser`Konfigurowalny syntezator tablicowy (wavetable)."Customizable wavetable synthesizer pluginBrowserPrzecignij instrument do Edytora Piosenki, Edytora Perkusji i Basu lub na wybran [cie|k.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowserBWbudowany syntezator ZynAddSubFX.Embedded ZynAddSubFX pluginBrowserFEmulator ukBadu APU GameBoy'a (TM).Emulation of GameBoy (TM) APU pluginBrowserEmulator ukBadu dzwikowego SID (MOS6581 i MOS8580) Te ukBady scalone byBy stosowane w komputerach Commodore 64.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserbFiltr do importowania projektw FL Studio w LMMS.1Filter for importing FL Studio projects into LMMS pluginBrowserTFiltr do importowania plikw MIDI do LMMS.)Filter for importing MIDI-files into LMMS pluginBrowser`Instrument kompatybilny z standardem sampli GUS.GUS-compatible patch instrument pluginBrowserfNiezupeBna monofoniczna emulacja syntezatora tb303.%Incomplete monophonic imitation tb303 pluginBrowser2Przegldarka instrumentwInstrument browser pluginBrowser*Instrumenty wtyczkoweInstrument plugins pluginBrowserDPoka| zainstalowane wtyczki LADSPAList installed LADSPA plugins pluginBrowser8Odtwarzacz plikw SoundFont.Player for SoundFont files pluginBrowserWtyczka do kontrolowania regulatorw za po[rednictwem szczytw dzwiku.-Plugin for controlling knobs with sound peaks pluginBrowserDWtyczka rozszerzajca baz stereo.=Plugin for enhancing stereo separation of a stereo input file pluginBrowserWtyczka do nieograniczonego manipulowania wyj[ciami stereofonicznymi.,Plugin for freely manipulating stereo output pluginBrowser@Melodyjny instrument paBeczkowy.Tuneful things to bang on pluginBrowserjHost VST pozwalajcy na u|ycie wtyczek VST(i) w LMMS.-VST-host for using VST(i)-plugins within LMMS pluginBrowser6Symulator drgajcej struny.Vibrating string modeler pluginBrowserbrak opisuno description pluginBrowserWtyczka umo|liwiajca zaBadowanie dowolnego efektu LADSPA wewntrz LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowserWytBu[ [&B]&Bold projectNotesKolor... &Color... projectNotes&Kopiuj&Copy projectNotesKursywa [&I]&Italic projectNotesJustowanie [&J]&Justify projectNotesLewo [&L]&Left projectNotes &Wklej&Paste projectNotesPowtrz [&R]&Redo projectNotesPrawo [&R]&Right projectNotes"Podkre[lenie [&U] &Underline projectNotesCofnij [&U]&Undo projectNotes Centrowanie [&E]C&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotesWy&tnijCu&t projectNotesEdytuj Akcje Edit Actions projectNotesFormatowanieFormat Actions projectNotes Notatki projektu Project notes projectNotes\Umie[ tutaj swoje zapiski dotyczce projektu.!Put down your project notes here. projectNotesZmieD nazw... Rename... renameDialogINTERFEJS AUDIOAUDIO INTERFACE setupDialog"Katalog z grafikArtwork directory setupDialog Ustawienia audioAudio settings setupDialogROZMIAR BUFORA BUFFER SIZE setupDialogGrafika tBaBackground artwork setupDialog AnulujCancel setupDialogLWybierz katalog z instalacj FL Studio'Choose FL Studio installation directory setupDialog<Wybierz katalog wtyczek LADSPAChoose LADSPA plugin directory setupDialog8Wybierz katalog roboczy LMMSChoose LMMS working directory setupDialog6Wybierz katalog STK rawwaveChoose STK rawwave directory setupDialog2Wybierz katalog z grafikChoose artwork-theme directory setupDialog&Wybierz grafik tBaChoose background artwork setupDialog4Wybierz domy[lny SoundFontChoose default SoundFont setupDialog6Wybierz katalog wtyczek VST Choose your VST-plugin directory setupDialogDDomy[lnie kompresuj pliki projektu"Compress project files per default setupDialog.Domy[lny plik SoundfontDefault Soundfont File setupDialogGBo[no[ w dBVDisplay volume as dBV  setupDialog"WBcz podpowiedziEnable tooltips setupDialog8Katalog instalacji FL Studio FL Studio installation directory setupDialog2Ramki: %1 Latencja: %2 msFrames: %1 Latency: %2 ms setupDialog*Podstawowe ustawieniaGeneral settings setupDialog\Tryb wysokiej jako[ci wyj[cia urzdzenia audioHQ-mode for output audio-device setupDialogTutaj mo|esz wybra preferowany interfejs MIDI. W zale|no[ci od konfiguracji systemu podczas kompilacji mo|esz wybiera pomidzy ALSA, OSS i innymi. Poni|ej znajduje si sekcja w ktrej mo|esz zmieni ustawienia wybranego interfejsu.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogTutaj mo|esz wybra preferowany interfejs audio. W zale|no[ci od konfiguracji Twojego systemu podczas kompilacji mo|esz wybiera pomidzy ALSA, JACK, OSS i innymi. Poni|ej znajduje si sekcja w ktrej mo|esz zmieni ustawienia wybranego interfejsu.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialog Tutaj mo|esz ustawi rozmiar wewntrznego bufora u|ywanego przez LMMS. Ni|sze warto[ci skutkuj mniejsz latencj ale mog powodowa znieksztaBcenia dzwiku lub kiepsk wydajno[, zwBaszcza na starszych komputerach lub kernelach bez obsBugi czasu rzeczywistego.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog2Zcie|ki do wtyczek LADSPALADSPA plugin paths setupDialog(Katalog roboczy LMMSLMMS working directory setupDialogINTERFEJS MIDIMIDI INTERFACE setupDialogUstawienia MIDI MIDI settings setupDialogDODATKOWEMISC setupDialogOKOK setupDialogpTryb jednego, wsplnego okna dla wszystkich instrumentw One instrument track window mode setupDialogZcie|kiPaths setupDialog*Ustawienia wydajno[ciPerformance settings setupDialogpWikszo[ zmian da efekt dopiero po zrestartowaniu LMMS!GPlease note that most changes won't take effect until you restart LMMS! setupDialog<Zresetuj do warto[ci domy[lnejReset to default-value setupDialogRestart LMMS Restart LMMS setupDialog&Katalog STK rawwaveSTK rawwave directory setupDialog"Konfiguracja LMMS Setup LMMS setupDialogrOstrze|enie o konieczno[ci restartu po zmianie parametrw,Show restart warning after changing settings setupDialogLPBynne przewijanie w Edytorze PiosenkiSmooth scroll in Song Editor setupDialog<Efekty interfejsu vs wydajno[UI effects vs. performance setupDialog&Katalog wtyczek VSTVST-plugin directory setupDialogBankBank sf2Instrument ChorusChorus sf2Instrument"GBboko[ chorusu Chorus Depth sf2InstrumentPoziom chorusu Chorus Level sf2InstrumentLinie chorusu Chorus Lines sf2Instrument Prdko[ chorusu Chorus Speed sf2InstrumentWzmocnienieGain sf2Instrument PrbkaPatch sf2Instrument PogBosReverb sf2Instrument"TBumienie pogBosuReverb Damping sf2InstrumentPoziom pogBosu Reverb Level sf2Instrument*Rozmiar pomieszczeniaReverb Roomsize sf2Instrument$Rozpito[ pogBosu Reverb Width sf2Instrument<NaB| chorus (je[li wspierane)Apply chorus (if supported)sf2InstrumentView<NaB| pogBos (je[li wspierane)Apply reverb (if supported)sf2InstrumentViewWybierz prbkChoose the patchsf2InstrumentView$GBboko[ chorusu: Chorus Depth:sf2InstrumentViewPoziom chorusu: Chorus Level:sf2InstrumentViewLinie chorusu: Chorus Lines:sf2InstrumentView"Prdko[ chorusu: Chorus Speed:sf2InstrumentViewRKliknij tutaj, aby otworzy inny plik SF2#Click here to open another SF2 filesf2InstrumentViewWzmocnienieGainsf2InstrumentView*Otwrz plik SoundFontOpen SoundFont filesf2InstrumentView4Otwrz inny plik SoundFontOpen other SoundFont filesf2InstrumentView$TBumienie pogBosu:Reverb Damping:sf2InstrumentViewPoziom pogBosu: Reverb Level:sf2InstrumentView,Rozmiar pomieszczenia:Reverb Roomsize:sf2InstrumentView&Rozpito[ pogBosu: Reverb Width:sf2InstrumentView0Pliki SoundFont2 (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewTen przycisk wBcza chorus. DziaBa tylko na plikach, ktre wspieraj t funkcj.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewTen przycisk wBcza pogBos. DziaBa tylko na plikach, ktre wspieraj t funkcj.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewRodzaj scalaka Chip model sidInstrument.Czstotliwo[ granicznaCutoff sidInstrumentRodzaj filtru Filter type sidInstrument6Zafalowanie charakterystyki Resonance sidInstrumentWyBcz gBos 3 Voice 3 off sidInstrumentGBo[no[Volume sidInstrumentWarto[ ataku (Attack) okre[la jak szybko sygnaB wyj[ciowy gBosu %1 narasta od zera do warto[ci szczytowej.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentView Atak:Attack:sidInstrumentView2Filtr pasmowoprzepustowy Band-Pass filter sidInstrumentView(Zgrubne odstrojenie:Coarse:sidInstrumentView0Czstotliwo[ graniczna:Cutoff frequency:sidInstrumentViewWarto[ zanikania (Decay) decyduje jak szybko sygnaB wyj[ciowy opada od warto[ci szczytowej do ustalonego poziomu podtrzymania (Sustain).iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentViewZanikanie:Decay:sidInstrumentViewFiltrowanyFilteredsidInstrumentView.Filtr grnoprzepustowy High-Pass filter sidInstrumentView.Filtr dolnoprzepustowy Low-Pass filter sidInstrumentViewMOS6581 SID  MOS6581 SID sidInstrumentViewMOS8580 SID  MOS8580 SID sidInstrumentViewSzumNoisesidInstrumentViewBSygnaB wyj[ciowy gBosu %1 bdzie utrzymywaB poziom podtrzymania (Sustain) tak dBugo, jak nuta bdzie odtwarzania (klawisz klawiatury muzycznej bdzie wci[nity).]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentView(Przebieg Prostoktny Pulse WavesidInstrumentViewBWspBczynnik wypeBnienia impulsu: Pulse Width:sidInstrumentViewZwolnienie:Release:sidInstrumentView8Zafalowanie charakterystyki: Resonance:sidInstrumentView.Modulacja Pier[cieniowaRing-ModsidInstrumentView"Modulacja Pier[cieniowa (koBowa) podmienia sygnaB trjktny na wyj[ciu oscylatora %1 na pier[cieniowo zmodulowan kombinacj oscylatorw %1 i %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentView,Przebieg PiBoksztaBtnySawToothsidInstrumentViewPodtrzymanie:Sustain:sidInstrumentViewSynchronizacjaSyncsidInstrumentViewSynchronizacja koordynuje w czasie fundamentalne czstotliwo[ci oscylatorw %1 i %2 tworzc efekty "Hard Sync".Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentViewTestTestsidInstrumentViewKiedy wBczony jest Test, oscylator %1 zostanie czasowo zresetowany i zablokowany.PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewZgrubne odstrojenie pozwala zmieni wysoko[ gBosu %1 o oktaw w gr lub w dB.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentView*WspBczynnik wypeBnienia impulsu okre[la stosunek czasu trwania impulsu do okresu tego impulsu. Pozwala na pBynn zmian wysoko[ci tonu bez dostrzegalnego przej[cia midzy dzwikami. Nale|y wybra prostoktny ksztaBt fali oscylatora %1 aby dostrzec jakikolwiek sByszalny efekt.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentView(SygnaB wyj[ciowy gBosu %1 opadnie od poziomu podtrzymania (Sustain) do poziomu zerowego po czasie okre[lonym przez parametr wybrzmiewania (Release).jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentView$Przebieg Trjktny Triangle WavesidInstrumentViewWyBcz gBos 3  Voice3 Off sidInstrumentViewGBo[no[:Volume:sidInstrumentViewDKiedy wBczona jest filtracja, gBos %1 bdzie przetwarzany przez filtr. Kiedy filtracja jest wyBczona, gBos %1 pojawi si bezpo[rednio na wyj[ciu, bez filtracji.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentViewwszystkie plikiAll file typessongPusty projekt Empty projectsong$projekty FL StudioFL Studio projectssongImportuj plik Import filesongsekwencje MIDIMIDI sequencessong$GBwne odstrojenie Master pitchsongGBwna gBo[no[ Master volumesong4Projekt NIE JEST zapisany.Project NOT saved.song Projekt zapisany Project savedsongRWybierz plik aby wyeksportowa projekt...!Select file for project-export...song TempoTemposongFProjekt %1 zostaB wBa[nie zapisany.The project %1 is now saved.song:Projekt %1 nie jest zapisany!The project %1 was not saved!songTen projekt jest pusty wic eksportowanie go nie ma najmniejszego sensu. Najpierw umie[ kilka elementw w Edytorze Piosenki!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songniezatytuBowaneuntitledsongROZSZERZWIDEstereoEnhancerControlDialogSzeroko[:Width:stereoEnhancerControlDialogSzeroko[WidthstereoEnhancerControls4GBo[no[ Lewy IN Lewy OUT:Left to Left Vol:stereoMatrixControlDialog6GBo[no[ Lewy IN Prawy OUT:Left to Right Vol:stereoMatrixControlDialog6GBo[no[ Prawy IN Lewy OUT:Right to Left Vol:stereoMatrixControlDialog8GBo[no[ Prawy IN Prawy OUT:Right to Right Vol:stereoMatrixControlDialog&Lewy IN >> Lewy OUT Left to LeftstereoMatrixControls(Lewy IN >> Prawy OUT Left to RightstereoMatrixControls(Prawy IN >> Lewy OUT Right to LeftstereoMatrixControls*Prawy IN >> Prawy OUTRight to RightstereoMatrixControlsBPo zatrzymaniu powr do pocztkuAfter stopping go back to begintimeLinePo zatrzymaniu powr do pozycji z ktrej rozpoczto odtwarzanie?After stopping go back to position at which playing was startedtimeLine>Po zatrzymaniu utrzymaj pozycjAfter stopping keep positiontimeLine8WBcz/wyBcz autoprzewijanieEnable/disable auto-scrollingtimeLine8WBcz/wyBcz znaczniki ptliEnable/disable loop-pointstimeLineWskazwkaHinttimeLineWyciszoneMutedtrackSoloSolotrackWyciszoneMutedtrackContentObject,%1:%2 (%3:%4 do %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView KopiujCopytrackContentObjectView Aktualna dBugo[Current lengthtrackContentObjectViewBie|ca pozycjaCurrent positiontrackContentObjectView WytnijCuttrackContentObjectView8Kasuj (naci[nij rolk myszy)Delete (middle mousebutton)trackContentObjectViewWskazwkaHinttrackContentObjectViewtWycisz/anuluj wyciszenie (<Ctrl> + kliknicie rolk myszy)#Mute/unmute ( + middle click)trackContentObjectView WklejPastetrackContentObjectViewbNaci[nij <Ctrl> i przecignij aby stworzy kopi.%Press and drag to make a copy.trackContentObjectViewHNaci[nij <Ctrl> aby zmieni rozmiar.Press for free resizing.trackContentObjectView*Akcje dla tej [cie|kiActions for this tracktrackOperationsWidget"Klonuj t [cie|kClone this tracktrackOperationsWidgetWyciszenieMutetrackOperationsWidget"Wycisz t [cie|kMute this tracktrackOperationsWidgetNaci[nij <Ctrl> podczas przecigania elementu kursorem aby rozpocz now akcj 'przecignij i upu['.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidgetUsuD t [cie|kRemove this tracktrackOperationsWidgetSoloSolotrackOperationsWidgetLAadowanie wtyczki VST nie powiodBo siFailed loading VST-pluginvestigeInstrument"Aadowanie wtyczkiLoading pluginvestigeInstrumentNAadowanie wtyczki VST. Prosz czeka...'Please wait while loading VST-plugin...vestigeInstrumentjWtyczka VST %1 nie mo|e zosta zaBadowana z jakiego[ powodu. Je[li pracuje normalnie z innym oprogramowaniem VST pod Linuksem prosz koniecznie skontaktowa si z developerami LMMS!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentOdstrojenie %1 Detune %1vibedRozmycie %1 Fuzziness %1 vibedImpuls %1 Impulse %1vibedDBugo[ %1 Length %1vibedOktawa %1 Octave %1vibed Panoramowanie %1Pan %1vibed&Punkt Wymuszenia %1Pick %1 positionvibed,Punkt Monitorowania %1Pickup %1 positionvibed*String %1 - sztywno[String %1 stiffnessvibed(String %1 - gBo[no[String %1 volumevibed &Pomoc&Help vibedViewZKliknij tutaj, aby wBczy/wyBczy przebieg.&Click here to enable/disable waveform. vibedViewTKliknij tutaj, aby znormalizowa przebieg.!Click here to normalize waveform. vibedViewLKliknij tutaj, aby wygBadzi przebieg.Click here to smooth waveform. vibedViewOdstrojenie:Detune: vibedViewWBcz przebiegEnable waveform vibedViewRozmycie: Fuzziness: vibedViewEdytor ImpulsuImpulse Editor vibedView<Wymuszenie lub stan pocztkowyImpulse or initial state vibedViewDBugo[:Length: vibedViewNormalizacja Normalize vibedView OktawaOctave vibedViewPanoramowanie:Pan: vibedView"Punkt Wymuszenia:Pick position: vibedView(Punkt Monitorowania:Pickup position: vibedView,Przebieg PiBoksztaBtnySaw wave vibedView*Przebieg Sinusoidalny Sine wave vibedViewWygBadzanieSmooth vibedView(Przebieg Prostoktny Square wave vibedView StrunaString vibedView"Sztywno[ struny:String stiffness: vibedViewPrzeBcznik 'Imp' okre[la czy przebieg z wykresu ma by wymuszeniem przyBo|onym struny czy ma odpowiada za pocztkowy jej stan (ksztaBt).The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewPokrtBo 'P' ustala pozycj punktu w ktrym wymuszenie zostanie przyBo|one do struny.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedViewPokrtBo 'PU' ustala pozycj punktu w ktrym bd monitorowane (nasBuchiwane) drgania struny.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewPokrtBo 'S' ustala sztywno[ wybranej struny. Sztywno[ struny okre[la jak dBugo bdzie ona drga. Ni|sze sztywno[ci wydBu|aj czas drgaD.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewZPokrtBo 'V' ustala gBo[no[ wybranej struny.4The 'V' knob sets the volume of the selected string. vibedViewbPokrtBo 'Odstrojenie' modyfikuje wysoko[ tonu wybranej struny. Warto[ci ni|sze ni| zero powoduj spBaszczenie brzmienia. Warto[ci powy|ej zera skutkuj wyostrzeniem brzmienia.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedView8PokrtBo dBugo[ci sBu|y do zmiany dBugo[ci wybranej struny. DBu|sza struna bdzie drga dBu|ej i ja[niej, jednak zu|yje wicej mocy obliczeniowej procesora.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewPrzeBcznik oktawy sBu|y do wyboru, na jakich czstotliwo[ciach harmonicznych bdzie drga struna. Na przykBad ustawienie warto[ci -2 sprawi, |e otrzymamy dzwik dwie oktawy ni|szy od czstotliwo[ci podstawowej struny, warto[ 'F' oznacza, |e otrzymany dzwik bdzie miaB czstotliwo[ zgodn z czstotliwo[ci fundamentaln za[ warto[ '6' przesunie czstotliwo[ drgaD o 6 oktaw w gr.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewPokrtBo 'Pan' determinuje poBo|enie wybranej struny w przestrzeni stereo.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewTPokrtBo Slap dodaje nieco efektu fuzz do wybranej struny, sByszalnego zwBaszcza podczas fazy ataku. Mo|e by u|ywane aby uczyni brzmienie struny bardziej 'metalicznym'.The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedViewPrzeBcznik struny sBu|y wyboru struny, ktr bdziemy modyfikowa. Instrument Vibed mo|e zawiera do 9 niezale|nych ukBadw drgajcych. Kontrolka LED w prawym dolnym rogu edytora ksztaBtu fali pokazuje, czy wybrana struna jest aktywna.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewEdytor ksztaBtu przebiegu pozwala kontrolowa struktur impulsu, ktry powoduje wzbudzenie drgaD struny. Przycisk po prawej umo|liwia wybr ksztaBtu fali. Przycisk '?' zaBaduje przebieg z pliku - jedynie pierwsze 128 prbek zostanie zaBadowanych. Przebieg mo|e zosta narysowany rcznie. Przycisk 'S' wygBadza przebieg. Przycisk 'N' normalizuje przebieg.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedView$Przebieg Trjktny Triangle wave vibedViewdU|yj fali piBoksztaBtnej dla bie|cego oscylatora.&Use a saw-wave for current oscillator. vibedViewbU|yj fali sinusoidalnej dla bie|cego oscylatora.'Use a sine-wave for current oscillator. vibedView`U|yj fali prostoktnej dla bie|cego oscylatora.)Use a square-wave for current oscillator. vibedView\U|yj fali trjktnej dla bie|cego oscylatora.+Use a triangle-wave for current oscillator. vibedViewU|yj fali zdefiniowanej przez u|ytkownika dla bie|cego oscylatora.3Use a user-defined waveform for current oscillator. vibedViewXU|yj biaBego szumu dla bie|cego oscylatora.'Use white-noise for current oscillator. vibedViewNPrzebieg zdefiniowany przez u|ytkownikaUser defined wave vibedViewDSymulator do dziewiciu niezale|nych, wibrujcych strun. PrzeBcznik struny umo|liwia wybr strun, ktre maj by edytowane. PrzeBcznik oktawy okre[la czstotliwo[ci harmoniczne, na ktrych bdzie drga struna. Wykres umo|liwia zadanie ksztaBtu wymuszenia, ktre wprawia strun w drgania. PokrtBo 'V' reguluje gBo[no[. GaBka 'S' modyfikuje sztywno[ struny. PokrtBo 'P' zmienia poBo|enie Punktu Wymuszenia. GaBka 'PU' zmienia poBo|enie Punktu Monitorowania. PokrtBo 'Slap' dodaje do dzwiku struny troch efektu fuzz. PokrtBo 'DBugo[' reguluje dBugo[ struny. Kontrolka LED w prawym dolnym rogu edytora ksztaBtu fali pokazuje, czy wybrana struna jest aktywna.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewGBo[no[:Volume: vibedViewBiaBy SzumWhite noise wave vibedView&Kliknij aby wBczyClick to enablevisualizationWidget|Kliknij tutaj, aby wBczy/wyBczy wizualizacj kanaBu master6click to enable/disable visualization of master-outputvisualizationWidgetAtak gBosu %1Voice %1 attack voiceObject8Zgrubne odstrojenie gBosu %1Voice %1 coarse detuning voiceObject$Zanikanie gBosu %1Voice %1 decay voiceObject(Filtrowanie gBosu %1Voice %1 filtered voiceObjectRWspBczynnik wypeBnienia impulsu gBosu %1Voice %1 pulse width voiceObject,Wybrzmiewanie gBosu %1Voice %1 release voiceObject@Modulacja pier[cieniowa gBosu %1Voice %1 ring modulate voiceObject*Podtrzymanie gBosu %1Voice %1 sustain voiceObject.Synchronizacja gBosu %1 Voice %1 sync voiceObjectTest gBosu %1 Voice %1 test voiceObject*KsztaBt fali gBosu %1Voice %1 wave shape voiceObject , lmms-1.1.3/data/locale/pl.ts000066400000000000000000011341661247673406200156460ustar00rootroot00000000000000 AboutDialog About LMMS O programie LMMS Version %1 (%2/%3, Qt %4, %5) Wersja %1 (%2/%3, Qt %4, %5) About Informacje LMMS - easy music production for everyone LMMS - łatwa produkcja muzyczna dla każdego Authors Autorzy Translation Tłumaczenie Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! Spolszczenie LMMS: Radek Słowik Podziękowania dla: Marii Słowik - za wstępną korektę, Tomasza Gradowskiego - za cenne uwagi i sugestie zmian. Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: radek[małpka]vibender[kropka]com License Licencja Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2010, LMMS developers {2004-2014,?} <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS LMMS AmplifierControlDialog VOL VOL Volume: Głośność: PAN PAN Panning: Panoramowanie: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Głośność Panning Panoramowanie Left gain Right gain AudioAlsa::setupWidget DEVICE URZĄDZENIE CHANNELS KANAŁY AudioFileProcessorView Open other sample Otwórz inną próbkę Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Kliknij w tym miejscu jeśli chcesz załadować inny plik audio. Otworzy się okno gdzie będziesz mógł zaznaczyć wybrany plik. Ustawienia takie jak tryb pętli, punkty początku i końca, wartość wzmocnienia i inne nie zostaną zresetowane więc to co uzyskasz może brzmieć inaczej niż oryginalna próbka. Reverse sample Odwróć próbkę If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Jeśli uaktywnisz tę kontrolkę cała próbka będzie odtwarzana wstecz. Może to być przydatne do stworzenia efektów dźwiękowych np. puszczonej wstecz blachy crash. Amplify: Wzmocnienie: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Za pomocą tego pokrętła możesz ustawić współczynnik wzmocnienia. Domyślną wartością jest 100%. Poniżej próbka jest ściszana a powyżej podgłaśniana (zmiany nie mają wpływu na sam plik sampla!) Startpoint: Znacznik-początkowy: Endpoint: Znacznik końcowy: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted Klient JACK zrestartowany LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS został odrzucony przez JACK z jakiegoś powodu. Back-end LMMSa został zrestartowany więc możesz ponownie dokonać ręcznych połączeń. JACK server down Serwer JACK wyłączony The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Wydaje się, że serwer JACK został wyłączony i uruchomienie nowej instancji nie powiodło się więc LMMS nie może kontynuować pracy. Należy zapisać projekt i uruchomić serwer JACK i LMMSa ponownie. AudioJack::setupWidget CLIENT-NAME NAZWA-KLIENTA CHANNELS KANAŁY AudioOss::setupWidget DEVICE URZĄDZENIE CHANNELS KANAŁY AudioPortAudio::setupWidget BACKEND BACKEND DEVICE URZĄDZENIE AudioPulseAudio::setupWidget DEVICE URZĄDZENIE CHANNELS KANAŁY AudioSdl::setupWidget DEVICE URZĄDZENIE AutomatableModel &Reset (%1%2) &Resetuj (%1%2) &Copy value (%1%2) &Kopiuj wartość (%1%2) &Paste value (%1%2) &Wklej wartość (%1%2) Edit song-global automation Edytuj globalną automatykę utworu Connected to %1 Podłączony do %1 Connected to controller Podłączony do kontrolera Edit connection... Edytuj połączenie... Remove connection Usuń połączenie Connect to controller... Podłącz do kontrolera... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Odtwórz/zatrzymaj aktualny pattern (Spacja) Stop playing of current pattern (Space) Zatrzymaj odtwarzanie aktualnego patternu (Spacja) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Kliknij tutaj jeśli chcesz odtworzyć aktualny pattern. Ta opcja jest przydatna przy edytowaniu patternu - zostanie on automatycznie zapętlony. Click here if you want to stop playing of the current pattern. Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie aktualnego patternu. Draw mode (Shift+D) Tryb rysowania (Shift+D) Erase mode (Shift+E) Tryb wymazywania (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Kliknij tutaj aby przejść do trybu rysowania. W tym trybie możesz dodawać i przemieszczać pojedyńcze wartości. To domyślny tryb, który będziesz wykorzystywać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Kliknij tutaj aby przejść do trybu kasowania. W tym trybie możesz usuwać pojedyńcze wartości. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'. Cut selected values (Ctrl+X) Wytnij zaznaczone elementy (Ctrl+X) Copy selected values (Ctrl+C) Skopiuj zaznaczone elementy (Ctrl+C) Paste values from clipboard (Ctrl+V) Wklej zaznaczone elementy (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Kliknij tutaj a zaznaczone elementy zostaną wycięte i umieszczone w schowku. Możesz je wkleić gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Kliknij tutaj a zaznaczone elementy zostaną skopiowane do schowka. Możesz je wkleić gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. Click here and the values from the clipboard will be pasted at the first visible measure. Kliknij tutaj a elementy ze schowka zostaną przeklejone w miejsce zaznaczenia. Automation Editor - no pattern Edytor automatyki - brak patternu Automation Editor - %1 Edytor Automatyki - %1 Please open an automation pattern with the context menu of a control! Otwórz pattern automatyki za pomocą menu kontekstowego regulatora! Values copied Wartości skopiowane All selected values were copied to the clipboard. Wszystkie zaznaczone wartości zostały skopiowane do schowka. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Przeciągnij trzymając wciśnięty klawisz <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Podwójne kliknięcie otwiera ten pattern w edytorze automatyki Open in Automation editor Otwórz w Edytorze Automatyki Clear Wyczyść Reset name Zresetuj nazwę Change name Zmień nazwę %1 Connections %1 Połączenia Disconnect "%1" Rozłącz "%1" Set/clear record Ustaw/wyczyść nagranie AutomationTrack Automation track Ścieżka automatyki BassBoosterControlDialog FREQ FREQ Frequency: Częstotliwość: GAIN GAIN Gain: Wzmocnienie: RATIO RATIO Ratio: Współczynnik: BassBoosterControls Frequency Częstotliwość Gain Wzmocnienie Ratio Współczynnik CarlaInstrumentView Show GUI Pokaż GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Kontroler %1 ControllerConnectionDialog Connection Settings Ustawienia Połączenia MIDI CONTROLLER KONTROLER MIDI Input channel Kanał wejściowy CHANNEL KANAŁ Input controller Kontroler wejściowy CONTROLLER KONTROLER Auto Detect Autodetekcja MIDI-devices to receive MIDI-events from Urządzenia MIDI odbierające zdarzenia MIDI z USER CONTROLLER KONTROLER UŻYTKOWNIKA MAPPING FUNCTION FUNKCJA MAPOWANIA OK OK Cancel Anuluj LMMS LMMS Cycle Detected. Detekcja Cyklu. ControllerRackView Controller Rack Rack Kontrolerów Add Dodaj Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Ustaw Controllers are able to automate the value of a knob, slider, and other controls. Kontrolery umożliwiają automatyzację wartości pokręteł, suwaków i innych regulatorów. Rename controller Zmień nazwę kontrolera Enter the new name for this controller Wprowadź nową nazwę dla tego kontrolera &Remove this plugin &Usuń tę wtyczkę &Help &Pomoc DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass Dolnoprzepustowy HiPass Górnoprzepustowy BandPass csg Pasmowoprzepustowy csg BandPass czpg Pasmowoprzepustowy czpg Notch Pasmowozaporowy Allpass Wszechprzepustowy Moog Moog 2x LowPass 2xDolnoprzepustowy RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Efekt włączony Wet/Dry mix Miksowanie Suchy/Mokry Gate Bramka Decay Zanikanie EffectChain Effects enabled Efekty włączone EffectRackView EFFECTS CHAIN ŁAŃCUCH EFEKTOWY Add effect Dodaj efekt EffectSelectDialog Add effect Dodaj efekt Plugin description Opis wtyczki EffectView Toggles the effect on or off. Włącza/wyłącza efekt. On/Off On/Off W/D W/D Wet Level: Poziom 'Mokrego' (Wet): The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. Pokrętło Mokry/Suchy (Wet/Dry) określa współczynnik pomiędzy sygnałem nieprzetworzonym a sygnałem po nałożeniu efektu. Wartości dodatnie domiksowywują sygnał przetworzony w fazie a ujemne w przeciwfazie do sygnału nieprzetworzonego. DECAY ZANIK. Time: Czas: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. Pokrętło zanikania określa jak długo będzie trwało przetwarzanie sygnału przez wtyczkę. Niższe wartości zmniejszają obciążenie procesora ale mogą skutkować obcinaniem ogona pogłosowego w deley'ach i reverb'ach. GATE BRAM. Gate: Bramka: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Pokrętło bramki określa poziom sygnału, który zostanie rozpoznany jako cisza aby zatrzymać przetwarzanie sygnału. Controls Ustaw Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Łańcuch wtyczek efektowych w którym sygnał przetwarzany jest od góry do dołu. Kontrolka 'On/Off' umożliwia pominięcie danej wtyczki w każdej chwili. Pokrętło 'Suchy/Mokry' (Wet/Dry) określa współczynnik mieszania sygnału wejściowego z sygnałem przetworzonym przez wtyczkę. Sygnał wyjściowy wtyczki jest równocześnie sygnałem wejściowym wtyczki następnej. Pokrętło 'Zanikanie' określa jak długo sygnał będzie przetwarzany przez wtyczkę po zakończeniu nuty. Wtyczka zakończy przetwarzanie gdy poziom sygnału zmniejszy się poniżej zadanego progu w danym okresie czasu. Ta gałka określa właśnie ten czas. Krótszy będzie skutkować mniejszym obciążeniem procesora ale w przypadku długo wybrzmiewających efektów - np. delay czy reverb - lepiej go zwiększyć. Pokrętło 'Bramka' określa próg sygnału przy którym wtyczka kończy działanie. Przycisk 'Regulatory' otwiera okno w którym można dostosować parametry wtyczki. Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek efektów w łańcuchu lub usunąć wybrane efekty. Move &up Przemieść w &górę Move &down Przemieść w &dół &Remove this plugin &Usuń tę wtyczkę &Help &Pomoc EnvelopeAndLfoParameters Predelay Opóźnienie Attack Atak Hold Przetrzymanie Decay Zanikanie Sustain Podtrzymanie Release Wybrzmiewanie Modulation Modulacja LFO Predelay Opóźnienie LFO LFO Attack Atak LFO LFO speed Szybkość LFO LFO Modulation Modulacja LFO LFO Wave Shape Kształt fali LFO Freq x 100 Częstotliwość x 100 Modulate Env-Amount Współczynnik modulacji obwiedni EnvelopeAndLfoView DEL DEL Predelay: Opóźnienie: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Użyj tego pokrętła aby ustawić czas wstępnego opóźnienia dla obwiedni sygnału. ATT ATT Attack: Atak: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Użyj tego pokrętła aby ustawić czas ataku obwiedni. HOLD HOLD Hold: Przetrzymanie: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Użyj tego pokrętła aby ustawić czas przetrzymania obwiedni. DEC DEC Decay: Zanikanie: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Użyj tego pokrętła aby ustawić czas zanikania obwiedni. SUST SUST Sustain: Podtrzymanie: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Użyj tego pokrętła aby ustawić poziom podtrzymania obwiedni. REL REL Release: Wybrzmiewanie: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Użyj tego pokrętła aby ustawić czas wybrzmiewania obwiedni. AMT AMT Modulation amount: Współczynnik modulacji: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Użyj tego pokrętła aby ustawić współczynnik modulacji sygnału przez generator obwiedni. LFO predelay: Opóźnienie LFO: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Użyj tego pokrętła aby ustawić czas opóźnienia LFO. LFO- attack: Atak LFO: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Użyj tego pokrętła aby ustawić czas ataku LFO. SPD SPD LFO speed: Szybkość LFO: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Użyj tego pokrętła aby ustawić prędkość oscylacji LFO. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Użyj tego pokrętła aby ustawić współczynnik modulacji sygnału przez Generator Przebiegów Wolnozmiennych (LFO). Click here for a sine-wave. Kliknij tutaj aby przełączyć na falę sinusoidalną. Click here for a triangle-wave. Kliknij tutaj aby przełączyć na falę trójkątną. Click here for a saw-wave for current. Kliknij tutaj aby przełączyć na falę piłokształtną. Click here for a square-wave. Kliknij tutaj aby przełączyć na falę prostokątną. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Kliknij tutaj aby przełączyć na kształt fali zdefiniowany przez użytkownika. Po tym fakcie przeciągnij do okna LFO próbkę ze zdefiniowanym wcześniej kształtem fali. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. Kliknij tutaj aby 100-krotnie zwiększyć częstotliwość LFO. multiply LFO-frequency by 100 częstotliwość LFO razy 100 MODULATE ENV-AMOUNT MODULUJ WSPÓŁCZYNNIK OBWIEDNI Click here to make the envelope-amount controlled by this LFO. Kliknij tutaj aby LFO kontrolował współczynnik modulacji sygnału przez obwiednię. control envelope-amount by this LFO kontroluj współczynnik obwiedni przez ten LFO ms/LFO: ms/LFO: Hint Wskazówka Drag a sample from somewhere and drop it in this window. Przeciągnij próbkę skądkolwiek i upuść w tym oknie. Click here for random wave. ExportProjectDialog Export project Eksportuj projekt Output Wyjście File format: Format pliku: Samplerate: Częstotliwość próbkowania: 44100 Hz 44100 Hz 48000 Hz 48000 Hz 88200 Hz 88200 Hz 96000 Hz 96000 Hz 192000 Hz 192000 Hz Bitrate: Przepływność: 64 KBit/s 64 KBit/s 128 KBit/s 128 KBit/s 160 KBit/s 160 KBit/s 192 KBit/s 192 KBit/s 256 KBit/s 256 KBit/s 320 KBit/s 320 KBit/s Depth: Rozdzielczość bitowa: 16 Bit Integer 16 Bit Integer 32 Bit Float 32 Bit Float Please note that not all of the parameters above apply for all file formats. Zauważ, że nie wszystkie powyższe parametry odnoszą się do wszystkich formatów zapisu. Quality settings Ustawienia jakości Interpolation: Interpolacja: Zero Order Hold Podtrzymanie Zerowego Rzędu (ZOH) Sinc Fastest Sinc Najszybsza Sinc Medium (recommended) Sinc Średnia (zalecana) Sinc Best (very slow!) Sinc Najlepsza (koszmarnie wolna!) Oversampling (use with care!): Nadpróbkowanie (używać ostrożnie!): 1x (None) 1x (Brak) 2x 2x 4x 4x 8x 8x Start Rozpocznij Cancel Anuluj Export as loop (remove end silence) FileBrowser Browser Przeglądarka FileBrowserTreeWidget Send to active instrument-track Wyślij na aktywną ścieżkę instrumentu Open in new instrument-track/Song-Editor Otwórz na nowej ścieżce Edytora Piosenki Open in new instrument-track/B+B Editor Otwórz na nowej ścieżce Edytora Perkusji i Basu Loading sample Ładowanie próbki Please wait, loading sample for preview... Ładowanie podglądu próbki, proszę czekać... --- Factory files --- --- Pliki preinstalowane --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help FxMixer Master Master FX %1 FX %1 FxMixerView Rename FX channel Zmień nazwę kanału efektowego Enter the new name for this FX channel Wprowadź nową nazwę tego kanału efektowego FX-Mixer FX-Mixer FxMixerView::FxChannelView FX Fader %1 FX Fader %1 Mute Wyciszenie Mute this FX channel Wycisz ten kanał efektowy FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio Arpeggio type Rodzaj arpeggio Arpeggio range Zakres arpeggio Arpeggio time Okres arpeggio Arpeggio gate Bramkowanie arpeggio Arpeggio direction Kierunek arpeggio Arpeggio mode Tryb arpeggio Up W górę Down W dół Up and down Naprzemiennie Random Losowo Free Asynchroniczny Sort Posortowany Sync Synchronizacja Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Arpeggio jest metodą odtwarzania (zwłaszcza krótkobrzmiących) instrumentów, która czyni muzykę o wiele żywszą. W odróżnieniu od zwyczajnego wykonania akordu, gdzie dźwięki odtwarzane są równocześnie w przypadku wykonywania arpeggio nuty uderzane są sekwencyjnie jedna po drugiej. Typowe arpeggia składają się z trójdźwięków durowych lub molowych ale istnieje też wiele innych akordów, które możesz zastosować. RANGE ZAKRES Arpeggio range: Zakres arpeggio: octave(s) oktawa(y) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Użyj tego pokrętła do ustawienia rozpiętości arpeggio w oktawach. Wybrane arpeggio będzie odgrywane w zakresie określonej liczby oktaw. TIME OKRES Arpeggio time: Okres arpeggio: ms ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Użyj tego pokrętła do ustawienia okresu arpeggio w milisekundach. Okres arpeggio ustala jak długo będzie odtwarzany każdy dźwięk. GATE BRAM. Arpeggio gate: Bramkowanie arpeggio: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Użyj tego pokrętła do ustawienia bramkowania arpeggio. Bramka arpeggio określa procentowo jak długo ma być odtwarzana każda nuta arpeggio. Za jej pomocą można dokonać artykulacji dźwięków w formie staccato. Chord: Direction: Kierunek: Mode: Tryb: InstrumentFunctionNoteStacking octave Major Majb5 minor minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Melodic minor Whole tone Diminished Major pentatonic Minor pentatonic Jap in sen Major bebop Dominant bebop Blues Arabic Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Chord type Chord range Minor Chromatic Half-Whole Diminished 5 8x {5?} InstrumentFunctionNoteStackingView RANGE ZAKRES Chord range: Zakres akordu: octave(s) oktawa(y) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Użyj tego pokrętła aby ustawić zakres akordu w oktawach. Wybrany akord będzie odgrywany w ramach określonej liczby oktaw. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT WŁĄCZ WEJŚCIE MIDI CHANNEL KANAŁ VELOCITY PRĘDKOŚĆ UDERZENIA ENABLE MIDI OUTPUT WŁĄCZ WYJŚCIE MIDI PROGRAM PROGRAM MIDI devices to receive MIDI events from Urządzenia MIDI odbierające zdarzenia z MIDI devices to send MIDI events to Urządzenia MIDI wysyłające zdarzenia do NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME GŁOŚNOŚĆ Volume Głośność CUTOFF CUTOFF Cutoff frequency Częstotliwość graniczna RESO RESO Resonance Zafalowanie charakterystyki Envelopes/LFOs Obwiednie/Oscylatory LFO Filter type Rodzaj filtru Q/Resonance Dobroć/Zafalowanie charakterystyki LowPass Dolnoprzepustowy HiPass Górnoprzepustowy BandPass csg Pasmowoprzepustowy csg BandPass czpg Pasmowoprzepustowy czpg Notch Pasmowozaporowy Allpass Wszechprzepustowy Moog Moog 2x LowPass 2xDolnoprzepustowy RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Te zakładki zawierają obwiednie. Są bardzo ważne przy modyfikacji dźwięku. Praktycznie zawsze są konieczne przy syntezie subtraktywnej. Przykładowo jeśli mamy do czynienia z obwiednią amplitudy możesz ustalić w których momentach dźwięk ma mieć określoną głośność. Jeśli chcesz stworzyć partię łagodnych smyków ich dźwięk powinien narastać i opadać bardzo powoli. Możesz to uzyskać przez ustawienie długich czasów ataku i wybrzmiewania. Podobnie jest w przypadku obwiedni innych parametrów jak panoramowanie czy częstotliwość graniczna. Możesz uzyskać atrakcyjne dźwięki modyfikując brzmienie już samej fali piłokształtnej za pomocą różnych obwiedni! FILTER FILTR Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. W tym miejscu możesz wybrać wbudowany filtr, który chcesz nałożyć na tę ścieżkę instrumentu. Filtry są bardzo istotne z punktu kształtowania charakterystyki dźwięku. Hz Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Użyj tego pokrętła aby ustawić częstotliwość graniczną wybranego filtru. Częstotliwość ta określa które częstotliwości będą wycinane przez filtr. Przykładowo filtr dolnoprzepustowy wycina całe pasmo częstotliwościowe powyżej częstotliwości granicznej. W przypadku filtru górnoprzepustowego jest odwrotnie i tak dalej... RESO RESO Resonance: Zafalowanie charakterystyki: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Użyj tego pokrętła aby ustawić dobroć albo zafalowanie charakterystyki wybranego filtru. Te parametry określają zachowanie filtru w okolicach częstotliwości granicznej. FREQ FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track nienazwana ścieżka Volume Głośność Panning Panoramowanie Pitch Odstrojenie FX channel Kanał FX Default preset Ustawienia domyślne With this knob you can set the volume of the opened channel. Za pomocą tego pokrętła możesz określić głośność otwartego kanału. Base note Nuta bazowa Pitch range InstrumentTrackView Volume Głośność Volume: Głośność: VOL VOL Panning Panoramowanie Panning: Panoramowanie: PAN PAN MIDI MIDI Input Wejście Output Wyjście InstrumentTrackWindow GENERAL SETTINGS GŁÓWNE USTAWIENIA Instrument volume Głośność instrumentu Volume: Głośność: VOL VOL Panning Panoramowanie Panning: Panoramowanie: PAN PAN Pitch Odstrojenie Pitch: Odstrojenie: cents cent(y) PITCH PITCH FX channel Kanał FX ENV/LFO ENV/LFO FUNC FUNC FX FX MIDI MIDI Save preset Zachowaj ustawienia XML preset file (*.xpf) Plik XML presetu (*.xpf) PLUGIN WTYCZKA Pitch range (semitones) RANGE ZAKRES Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Połącz kanały LadspaControlDialog Link Channels Połącz kanały Channel Kanał LadspaControlView Link channels Połącz kanały Value: Wartość: Sorry, no help available. Przepraszamy, pomoc jest niedostępna. LadspaEffect Effect Efekt Unknown LADSPA plugin %1 requested. Nieznana wtyczka LADSPA %1 żądanie. LcdSpinBox Please enter a new value between %1 and %2: Wprowadź nową wartość pomiędzy %1 a %2: LfoController LFO Controller Kontroler LFO Base value Wartość bazowa Oscillator speed Prędkość oscylatora Oscillator amount Współczynnik oscylatora Oscillator phase Faza oscylatora Oscillator waveform Kształt fali oscylatora Frequency Multiplier Mnożnik częstotliwości LfoControllerDialog LFO LFO LFO Controller Kontroler LFO BASE BASE Base amount: Współczynnik bazowy: todo do zrobienia SPD SPD LFO-speed: Prędkość LFO: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Użyj tego pokrętła aby ustawić szybkość LFO. Wyższe wartości przyspieszają drgania Generatora Przebiegów Wolnozmiennych. AMT AMT Modulation amount: Współczynnik modulacji: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Użyj tego pokrętła aby ustawić współczynnik modulacji sygnału przez LFO. Wyższe wartości zwiększają wpływ LFO na podłączone do niego regulatory (np. głośność lub częstotliwość graniczną). PHS PHS Phase offset: Przesunięcie fazowe: degrees stopni(e) With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Za pomocą tego pokrętła możesz ustawić przesunięcie fazowe LFO, czyli punkt w którym oscylator rozpoczyna przebieg. Przykładowo jeśli mamy do czynienia z falą sinusoidalną i wprowadzimy przesunięcie fazowe o wartości 180 stopni pierwsza połówka fali zostanie wygenerowana w dół a nie w górę jak bez przesunięcia. Click here for a sine-wave. Kliknij tutaj aby przestawić kształt fali na sinusoidalny. Click here for a triangle-wave. Kliknij tutaj aby przestawić kształt fali na trójkątny. Click here for a saw-wave. Kliknij tutaj aby przestawić kształt fali na piłokształtny. Click here for a square-wave. Kliknij tutaj aby przestawić kształt fali na prostokątny. Click here for a a moog saw-wave. Kliknij tutaj aby przestawić kształt fali na piłę Moog'a. Click here for an exponential wave. Kliknij tutaj aby przestawić kształt fali na wykładniczy. Click here for white-noise. Kliknij tutaj aby przestawić kształt fali na stochastyczny. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory Katalog roboczy The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Katalog roboczy LMMSa %1 nie istnieje. Stworzyć go teraz? Możesz zmienić katalog później poprzez Edycja -> Ustawienia. Could not save config-file Nie można zapisać pliku konfiguracyjnego Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Nie można zapisać pliku konfiguracyjnego %1. Prawdopodobnie nie masz uprawnień zapisu do tego pliku. Upewnij się, że masz prawo zapisu do tego pliku i spróbuj ponownie. &Project &Projekt &New &Nowy &Open... &Otwórz... Recently opened projects Ostatnie projekty &Save &Zapisz Save &As... Zapisz &Jako... Import... Import... E&xport... Eksport [&X]... &Quit Zakończ [&Q] &Edit &Edycja Settings Ustawienia &Tools &Narzędzia &Help &Pomoc Online help Pomoc on-line Help Pomoc What's this? Co to jest? About O LMMS Create new project Stwórz nowy projekt Create new project from template Stwórz nowy projekt jako szablon Open existing project Otwórz istniejący projekt Recently opened project Ostatnio otwierane projekty Save current project Zapisz bieżący projekt Export current project Eksportuj bieżący projekt Show/hide Song-Editor Pokaż/ukryj Edytor Kompozycji By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Poprzez naciśnięcie tego przycisku możesz pokazać lub ukryć Edytor Kompozycji. Za pomocą Edytora Kompozycji możesz modyfikować playlistę utworu oraz określić gdzie i kiedy ścieżki będą odtwarzane. Możesz też wstawiać sample bezpośrednio na playlistę. Show/hide Beat+Bassline Editor Pokaż/ukryj Edytor Perkusji i Basu By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Poprzez naciśnięcie tego przycisku możesz pokazać lub ukryć Edytor Perkusji i Basu. Edytor Perkusji i Basu służy do stworzenia linii perkusyjnej i basowej utworu. Możesz wprowadzać w nim zmiany podobne jak w Edytorze Piosenki. Show/hide Piano-Roll Pokaż/ukryj Edytor Pianolowy Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Kliknij tutaj aby pokazać lub ukryć Edytor Pianolowy. Za jego pomocą możesz w prosty sposób modyfikować melodię. Show/hide Automation Editor Pokaż/ukryj Edytor Automatyki Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Kliknij tutaj aby pokazać lub ukryć Edytor Automatyki. Za jego pomocą możesz w prosty sposób modyfikować dynamiczne wartości wszelkich regulatorów. Show/hide FX Mixer Pokaż/ukryj Mikser Efektów Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Kliknij tutaj aby pokazać lub ukryć Mikser Efektów. Mikser Efektów jest potężnym narzędziem wspomagającym zarządzanie efektami i ścieżkami w Twojej produkcji. Możesz wstawiać wtyczki efektowe na różne kanały dodatkowo wzbogacając brzmienie utworu. Show/hide project notes Pokaż/ukryj notatki do projektu Click here to show or hide the project notes window. In this window you can put down your project notes. Kliknij tutaj aby pokazać lub ukryć okno z notatkami do projektu. W tym oknie możesz zapisywać wszystko co przychodzi Ci na myśl w związku z projektem. Show/hide controller rack Pokaż/ukryj rack kontrolerów Untitled Nienazwane LMMS %1 LMMS %1 Project not saved Projekt nie zapisany The current project was modified since last saving. Do you want to save it now? Bieżący projekt został zmodyfikowany od ostatniego zapisu. Czy chcesz go zapisać teraz? Open project Otwórz projekt Save project Zapisz projekt Help not available Pomoc niedostępna Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Aktualnie pomoc dla LMMS jest niedostępna. Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS. My projects Projekty My samples Sample My presets Presety My home Katalog domowy My computer Mój komputer Root directory Katalog główny Project recovery Odzyskiwanie projektu It looks like the last session did not end properly. Do you want to recover the project of this session? Wygląda na to, że ostatnia sesja nie została zakończona poprawnie. Czy chcesz ją teraz przywrócić? Configuration file Plik konfiguracyjny Error while parsing configuration file at line %1:%2: %3 Błąd podczas parsowania pliku konfiguracyjnego w linii %1:%2: %3 Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Numerator Metryczny Meter Denominator Denominator Metryczny TIME SIG METRUM MeterModel Numerator Numerator Denominator Denominator MidiAlsaRaw::setupWidget DEVICE URZĄDZENIE MidiAlsaSeq::setupWidget DEVICE URZĄDZENIE MidiController MIDI Controller Kontroler MIDI unnamed_midi_controller kontroler midi bez nazwy MidiImport Setup incomplete Konfiguracja niekompletna You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Nie masz skonfigurowanego domyślnego soundfonta w oknie dialogowym (Edycja->Ustawienia). Będzie to skutkować brakiem dźwięku po zaimportowaniu pliku MIDI. Powinieneś pobrać soundfonty General MIDI, dokonać zmiany ustawień i spróbować ponownie. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. Tego LMMS nie skompilowano ze wsparciem odtwarzacza SoundFont2, który jest wykorzystywany do dodawania domyślnych dźwięków do zaimportowanych plików MIDI. Wskutek tego po zaimportowaniu pliku MIDI nie usłyszysz żadnego dźwięku. MidiOss::setupWidget DEVICE URZĄDZENIE MidiPort Input channel Kanał wejściowy Output channel Kanał wyjściowy Input controller Kontroler wejściowy Output controller Kontroler wyjściowy Fixed input velocity Zafiksowana prędkość wejściowa Fixed output velocity Zafiksowana prędkość wyjściowa Output MIDI program Wyjściowy program MIDI Receive MIDI-events Odbieraj komunikaty MIDI Send MIDI-events Wysyłaj komunikaty MIDI Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Vibrato Vibrato OscillatorObject Osc %1 volume Osc %1 głośność Osc %1 panning Osc %1 panoramowanie Osc %1 coarse detuning Osc %1 zgrubne odstrojenie Osc %1 fine detuning left Osc %1 dokładne odstrojenie lewo Osc %1 fine detuning right Osc %1 dokładne odstrojenie prawo Osc %1 phase-offset Osc %1 przesunięcie fazowe Osc %1 stereo phase-detuning Osc %1 odstrojenie fazy stereo Osc %1 wave shape Osc %1 kształt fali Modulation type %1 Rodzaj modulacji %1 Osc %1 waveform Osc %1 przebieg Osc %1 harmonic PatmanView Open other patch Otwórz inny plik Patch Click here to open another patch-file. Loop and Tune settings are not reset. Kliknij tutaj, aby otworzyć inny plik Patch. Ustawienia pętli i dostrojenia nie zostaną zresetowane. Loop Pętla Loop mode Tryb zapętlenia Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. W tym miejscu możesz uruchomić tryb zapętlenia. Jeśli to zrobisz PatMan będzie używał informacji o pętli dostępnych w pliku. Tune Dostrojenie Tune mode Tryb dostrojenia Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. W tym miejscu możesz uruchomić tryb dostrojenia. Patman dostroi próbkę do częstotliwości nut. No file selected Nie wybrano żadnego pliku Open patch file Otwórz plik Patch Patch-Files (*.pat) Pliki Patch (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Podwójne kliknięcie otwiera pattern w Edytorze Pianolowym użyj kółka myszy aby ustawić głośność poszczególnych kroków Open in piano-roll Otwórz w Edytorze Pianolowym Clear all notes Wyczyść wszystkie nuty Reset name Zresetuj nazwę Change name Zmień nazwę Add steps Dodaj kroki Remove steps Usuń kroki PeakController Peak Controller Peak Kontroler Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK PEAK LFO Controller Kontroler LFO PeakControllerEffectControlDialog BASE BAZA Base amount: Współczynnik bazy: Modulation amount: Współczynnik modulacji: Attack: Atak: Release: Wybrzmiewanie: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Wartość bazowa Modulation amount Współczynnik modulacji Mute output Wycisz wyjście Attack Narastanie Release Wybrzmiewanie Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) Odtwórz/zatrzymaj aktualny pattern (Spacja) Stop playing of current pattern (Space) Zatrzymaj odtwarzanie bieżącego patternu (Spacja) Cut selected notes (Ctrl+X) Wytnij zaznaczone nuty (Ctrl+X) Copy selected notes (Ctrl+C) Skopiuj zaznaczone nuty (Ctrl+C) Paste notes from clipboard (Ctrl+V) Wklej nuty ze schowka (Ctrl+V) Piano-Roll - no pattern Edytor Pianolowy - brak patternu Piano-Roll - %1 Edytor Pianolowy - %1 Please open a pattern by double-clicking on it! Otwórz pattern podwójnym kliknięciem! Record notes from MIDI-device/channel-piano Nagraj nuty za pomocą zewnętrznego kontrolera MIDI Record notes from MIDI-device/channel-piano while playing song or BB track Nagraj nuty za pomocą zewnętrznego kontrolera MIDI w trakcie odtwarzania podkładu dźwiękowego Draw mode (Shift+D) Tryb rysowania (Shift+D) Erase mode (Shift+E) Tryb wymazywania (Shift+E) Select mode (Shift+S) Tryb zaznaczania (Shift+S) Last note Ostatnia nuta Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Kliknij tutaj jeśli chcesz odtworzyć bieżący pattern. Pattern zostanie automatycznie zapętlony. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania wszystkie nuty które zagrasz zostaną zapisane na pattern i będziesz mógł odtworzyć i edytować je później. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania będziesz słyszeć utwór lub linię perkusyjną/basową a wszystkie nuty które zagrasz zostaną zapisane na pattern. Click here to stop playback of current pattern. Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie bieżącego patternu. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Kliknij tutaj a zaznaczone nuty zostaną wycięte i umieszczone w schowku. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Kliknij tutaj a zaznaczone nuty zostaną skopiowane do schowka. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. Click here and the notes from the clipboard will be pasted at the first visible measure. Kliknij tutaj a nuty ze schowka zostaną przeklejone w miejsce zaznaczenia. Note lock Blokada nuty Note Volume Głośność Nuty Note Panning Panoramowanie Nuty Detune mode (Shift+T) Tryb odstrojenia (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Kliknij tutaj, aby przejść do trybu rysowania. W tym trybie możesz dodawać, przemieszczać i zmieniać rozmiar nut To domyślny tryb, który będziesz używać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. Przytrzymaj klawisz 'Ctrl' aby czasowo przejść do trybu zaznaczenia. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Kliknij tutaj, aby przejść do trybu kasowania. W tym trybie możesz usuwać nuty. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Kliknij tutaj, aby przejść do trybu zaznaczania. W tym trybie możesz zaznaczać pojedyncze nuty lub całe ich grupy. Alternatywnie możesz przytrzymać klawisz 'Ctrl' w trybie rysowania aby tymczasowo przejść do trybu zaznaczania. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Kliknij tutaj, aby przejść do trybu odstrojenia. W tym trybie możesz odstrajać nuty w oknie, które otworzy się po kliknięciu na nich. Ten tryb możesz aktywować z poziomu klawiatury przez wciśnięcie kombinacji 'Shift+T'. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Wprowadź nową wartość pomiędzy %1 a %2: PianoView Base note Nuta podstawowa Plugin Plugin not found Nie znaleziono wtyczki The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Wtyczka "%1" Nie została odnaleziona albo nie może zostać załadowana! Powód: "%2" Error while loading plugin Wystąpił błąd podczas ładowania wtyczki Failed to load plugin "%1"! Nie można załadować wtyczki "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Plik WAV (*.wav) Compressed OGG-File (*.ogg) Skompresowany plik OGG (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Nazwa: Maker: Twórca: Copyright: Prawa autorskie: Requires Real Time: Wymaga czasu rzeczywistego: Yes Tak No Nie Real Time Capable: Zdolność do pracy w czasie rzeczywistym: In Place Broken: Channels In: Kanały wejściowe: Channels Out: Kanały wyjściowe: File: Plik: File: %1 SampleBuffer Open audio file Otwórz plik audio Wave-Files (*.wav) Pliki WAV (*.wav) OGG-Files (*.ogg) Pliki OGG (*.ogg) DrumSynth-Files (*.ds) Pliki DrumSynth (*.ds) FLAC-Files (*.flac) Pliki FLAC (*.flac) SPEEX-Files (*.spx) Pliki SPEEX (*.spx) VOC-Files (*.voc) Pliki VOC (*.voc) AIFF-Files (*.aif *.aiff) Pliki AIFF (*.aif *.aiff) AU-Files (*.au) Pliki AU (*.au) RAW-Files (*.raw) Pliki RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample wybierz sampla podwójnym kliknięciem Delete (middle mousebutton) Kasuj (naciśnij rolkę myszy) Cut Wytnij Copy Kopiuj Paste Wklej Mute/unmute (<Ctrl> + middle click) Wycisz/anuluj wyciszenie (<Ctrl> + kliknięcie rolką myszy) Set/clear record Ustaw/wyczyść nagranie SampleTrack Sample track Ścieżka audio Volume Głośność SampleTrackView Track volume Głośność ścieżki Channel volume: Głośność kanału: VOL VOL SongEditor Song-Editor Edytor Kompozycji Play song (Space) Odtwórz piosenkę (Spacja) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Kliknij tutaj, jeśli chcesz odtworzyć całą piosenkę. Odtwarzanie rozpocznie się od zielonego znacznika pozycji. Możesz go przemieszczać w trakcie odtwarzania. Stop song (Space) Zatrzymaj odtwarzanie piosenki (Spacja) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Kliknij tutaj, jeśli chcesz zatrzymać odtwarzanie piosenki. Znacznik pozycji zostanie ustawiony na początek utworu. Add beat/bassline Dodaj linię basową/perkusyjną Add sample-track Dodaj ścieżkę z samplami Could not open file Nie można otworzyć pliku Could not write file Nie można zapisać pliku Add automation-track Dodaj ścieżkę automatyki Draw mode Tryb rysowania Edit mode (select and move) Tryb edycji (zaznaczanie i przemieszczanie) Record samples from Audio-device Nagraj sample z urządzenia audio Record samples from Audio-device while playing song or BB track Nagrywa sample z urządzenia audio podczas odtwarzania piosenki lub ścieżki perkusji/basu Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Nie da się otworzyć pliku %1. Prawdopodobnie nie posiadasz uprawnień do odczytu tego pliku. Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie spróbuj ponownie. Error in file Błąd w pliku The file %1 seems to contain errors and therefore can't be loaded. Wygląda na to, że plik %1 zawiera błędy i nie może zostać załadowany. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song tempo piosenki The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). Tempo piosenki jest wyrażane w uderzeniach na minutę (BPM, Beats Per Minute). Jeśli chcesz zmienić szybkość swojej piosenki zmodyfikuj tę wartość. Każdy takt zawiera cztery uderzenia, stąd tempo w BPM wyraża jak wiele taktów / 4 powinno być odtworzone w ciągu minuty (albo - jeśli wolisz - jak wiele taktów ma być odtworzonych w ciągu 4 minut). High quality mode Tryb wysokiej jakości Master volume Głośność główna master volume głośność główna Master pitch Odstrojenie główne master pitch odstrojenie główne Value: %1% Wartość: %1% Value: %1 semitones Wartość: %1 półtonów Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Spektrum skalowane liniowo Linear Y axis Oś Y skalowana liniowo SpectrumAnalyzerControls Linear spectrum Spektrum skalowane liniowo Linear Y axis Oś Y skalowana liniowo Channel mode Tryb kanału TempoSyncKnob Tempo Sync Synchronizacja tempa No Sync Brak synchronizacji Eight beats Osiem uderzeń Whole note Cała nuta Half note Półnuta Quarter note Ćwierćnuta 8th note Ósemka 16th note Szesnastka 32nd note Trzydziestka dwójka Custom... Własne... &Help &Pomoc Custom Własne Synced to Eight Beats Zsynchronizowane do ośmiu uderzeń Synced to Whole Note Zsynchronizowane do całej nuty Synced to Half Note Zsynchronizowane do półnuty Synced to Quarter Note Zsynchronizowane do ćwierćnuty Synced to 8th Note Zsynchronizowane do ósemki Synced to 16th Note Zsynchronizowane do szesnastki Synced to 32nd Note Zsynchronizowane do trzydziestki dwójki TimeDisplayWidget click to change time units TrackContainer Couldn't import file Nie można zaimportować pliku Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Nie można odnaleźć filtra do zaimportowania pliku %1. Powinienieś przekonwertować ten plik do formatu wspieranego przez LMMS z pomocą zewnętrznego oprogramowania. Couldn't open file Nie można otworzyć pliku Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Nie da się otworzyć pliku %1 do odczytu. Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierającego plik a następnie spróbuj ponownie! Loading project... Ładowanie projektu... Cancel Anuluj Please wait... Proszę czekać... Importing MIDI-file... Importowanie pliku MIDI... Importing FLP-file... Importowanie pliku FLP... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Użyj modulacji fazowej aby zmodulować oscylator 2 oscylatorem 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Użyj modulacji amplitudowej aby zmodulować oscylator 2 oscylatorem 1 Mix output of oscillator 1 & 2 Miksuj wyjścia oscylatorów 1 & 2 Synchronize oscillator 1 with oscillator 2 Synchronizuj oscylator 1 z oscylatorem 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Użyj modulacji częstotliwościowej aby zmodulować oscylator 2 oscylatorem 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Użyj modulacji fazowej aby zmodulować oscylator 3 oscylatorem 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Użyj modulacji amplitudowej aby zmodulować oscylator 3 oscylatorem 2 Mix output of oscillator 2 & 3 Miksuj wyjścia oscylatorów 2 & 3 Synchronize oscillator 2 with oscillator 3 Synchronizuj oscylator 2 z oscylatorem 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Użyj modulacji częstotliwościowej aby zmodulować oscylator 3 oscylatorem 2 Osc %1 volume: Osc %1 - głośność: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Za pomocą tego pokrętła możesz ustawić głośność oscylatora %1. Jeśli zadasz wartość 0 oscylator zostanie wyłączony. Osc %1 panning: Osc %1 - panoramowanie: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Za pomocą tego pokrętła możesz ustawić panoramowanie oscylatora %1. Wartość -100 przesuwa oscylator 100% w lewo, wartość 100 - 100% w prawo. Osc %1 coarse detuning: Osc %1 - zgrubne odstrojenie: semitones półtony With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Za pomocą tego pokrętła możesz ustawić zgrubne odstrojenie oscylatora %1. Możesz odstrajać oscylator o 12 półtonów (całą oktawę) w górę lub w dół. Osc %1 fine detuning left: Osc %1 - dokładne odstrojenie w lewo: cents centy With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Za pomocą tego pokrętła możesz ustawić dokładne odstrojenie oscylatora %1 dla lewego kanału. Zakres regulacji mieści się w przedziale od -100 do +100 centów. Osc %1 fine detuning right: Osc %1 - dokładne odstrojenie w prawo: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Za pomocą tego pokrętła możesz ustawić dokładne odstrojenie oscylatora %1 dla prawego kanału. Zakres regulacji mieści się w przedziale od -100 do +100 centów. Osc %1 phase-offset: Osc %1 - przesunięcie fazowe: degrees stopni With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Za pomocą tego pokrętła możesz ustawić przesunięcie fazowe oscylatora %1. Oznacza to, że możesz przemieścić w czasie moment w którym oscylator rozpoczyna drgania. Na przykład jeśli mamy do czynienie z falą sinusoidalną, wprowadzenie przesunięcia fazowego o wartości 180 stopni spowoduje, że pierwsza połówka fali zacznie być generowana w stronę wartości ujemnych, odwrotnie niż w przypadku przesunięcia fazowego o wartości 0 stopni. Osc %1 stereo phase-detuning: Osc %1 - odstrojenie fazy stereo: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Za pomocą tego pokrętła możesz ustawić odstrojenie fazy stereo oscylatora %1. Oznacza to, że masz wpływ na różnicę fazy pomiędzy lewym i prawym kanałem. Ta gałka pomoże Ci stworzyć szeroko brzmiące dźwięki. Use a sine-wave for current oscillator. Użyj fali sinusoidalnej dla bieżącego oscylatora. Use a triangle-wave for current oscillator. Użyj fali trójkątnej dla bieżącego oscylatora. Use a saw-wave for current oscillator. Użyj fali piłokształtnej dla bieżącego oscylatora. Use a square-wave for current oscillator. Użyj fali prostokątnej dla bieżącego oscylatora. Use a moog-like saw-wave for current oscillator. Użyj piłokształtnego przebiegu mooga dla bieżącego oscylatora. Use an exponential wave for current oscillator. Użyj fali wykładniczej dla bieżącego oscylatora. Use white-noise for current oscillator. Użyj białego szumu dla bieżącego oscylatora. Use a user-defined waveform for current oscillator. Użyj fali zdefiniowanej przez użytkownika. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Otwórz inną wtyczkę VST Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Kliknij tutaj jeśli chcesz otworzyć inną wtyczkę VST. Po kliknięciu otworzy się okno dialogowe w którym będziesz mógł zaznaczyć wybrany plik. Show/hide GUI Pokaż/ukryj GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Kliknij tutaj aby pokazać graficzny interfejs użytkownika (GUI) wtyczki VST. Turn off all notes Wycisz wszystkie nuty Open VST-plugin Otwórz wtyczkę VST DLL-files (*.dll) Pliki DLL (*.dll) EXE-files (*.exe) Pliki EXE (*.exe) No VST-plugin loaded Nie załadowano wtyczki VST Control VST-plugin from LMMS host Kontroluj wtyczkę VST z hosta LMMS Click here, if you want to control VST-plugin from host. Kliknij tutaj, jeśli chcesz kontrolować wtyczkę VST z hosta LMMS. Open VST-plugin preset Otwórz preset wtyczki VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Kliknij tutaj, jeśli chcesz otworzyć inny preset wtyczki VST w formacie *.fxp lub *.fxb. Previous (-) Poprzedni (-) Save preset Zapisz preset Next (+) Następny (+) Click here to select presets that are currently loaded in VST. Kliknij tutaj, aby zaznaczyć presety aktualnie załadowane do wtyczki VST. Preset Preset Click here, if you want to switch to another VST-plugin preset program. Click here, if you want to save current VST-plugin preset program. by - VST plugin control VstEffectControlDialog Control VST-plugin from LMMS host Kontroluj wtyczkę VST z hosta LMMS Click here, if you want to control VST-plugin from host. Kliknij tutaj, jeśli chcesz kontrolować wtyczkę VST z hosta LMMS. Open VST-plugin preset Otwórz preset wtyczki VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Kliknij tutaj, jeśli chcesz otworzyć inny preset wtyczki VST w formacie *.fxp lub *.fxb. Previous (-) Poprzedni (-) Next (+) Następny (+) Click here to select presets that are currently loaded in VST. Kliknij tutaj, jeśli chcesz zaznaczyć presety aktualnie załadowane do wtyczki VST. Save preset Zapisz preset Show/hide Click here, if you want to switch to another VST-plugin preset program. Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Ładowanie wtyczki Open Preset Otwórz Preset Vst Plugin Preset (*.fxp *.fxb) Preset wtyczki VST (*.fxp *.fxb) : default : domyślne Save Preset Zapisz Preset .fxp .fxp .FXP .FXP .FXB .FXB .fxb .fxb " ' Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Narysuj swój własny przebieg przeciągając kursorem po tym wykresie. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normalizacja Click to normalize Invert Click to invert Smooth Wygładzanie Click to smooth Sine wave Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave Click for square wave ZynAddSubFxInstrument Portamento Portamento Filter Frequency Częstotliwość Filtra Filter Resonance Zafalowanie Filtra Bandwidth Szerokość Pasma FM Gain Wzmocnienie FM Resonance Center Frequency Częstotliwość Środkowa Zafalowania Resonance Bandwidth Szerokość Pasma Zafalowania Forward MIDI Control Change Events Przekaż Zdarzenia MIDI typu Control Change ZynAddSubFxView Show GUI Pokaż GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Kliknij tutaj, aby pokazać lub ukryć graficzny interfejs użytkownika (GUI) syntezatora ZynAddSubFX. Portamento: Portamento: PORT PORT Filter Frequency: Częstotliwość Filtra: FREQ FREQ Filter Resonance: Zafalowanie Filtra: RES RES Bandwidth: Szerokość Pasma: BW BW FM Gain: Wzmocnienie FM: FM GAIN FM GAIN Resonance center frequency: Częstotliwość środkowa zafalowania: RES CF RES-CF Resonance bandwidth: Szerokość pasma zafalowania: RES BW RES BW Forward MIDI Control Changes Przekaż zdarzenia MIDI typu Control Change audioFileProcessor Amplify Wzmacniaj Start of sample Początek sampla End of sample Koniec sampla Reverse sample Odwróć próbkę Stutter Loopback point Loop mode Tryb zapętlenia Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Edytor Perkusji i Basu Play/pause current beat/bassline (Space) Odtwórz/Zapałzuj bieżącą linię perkusyjną/basową (Spacja) Add beat/bassline Dodaj linię perkusyjną/basową Add automation-track Dodaj ścieżkę automatyki Stop playback of current beat/bassline (Space) Zatrzymaj odtwarzanie bieżącej linii perkusyjnej/basowej (Spacja) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Kliknij tutaj, aby odtworzyć bieżącą linię perkusyjną/basową. Zostanie ona automatycznie zapętlona. Click here to stop playing of current beat/bassline. Kliknij tutaj, aby zatrzymać odtwarzanie bieżącej linii perkusyjnej/basowej. Remove steps Usuń kroki Add steps Dodaj kroki bbTCOView Open in Beat+Bassline-Editor Otwórz w Edytorze Perkusji i Basu Reset name Zresetuj nazwę Change name Zmień nazwę Change color Zmień kolor Reset color to default bbTrack Beat/Bassline %1 Perkusja/Bas %1 Clone of %1 Duplikat %1 bitInvader Samplelength Długość próbki bitInvaderView Sample Length Długość Próbki Sine wave Fala sinusoidalna Triangle wave Fala trójkątna Saw wave Fala piłokształtna Square wave Fala prostokątna White noise wave Biały szum User defined wave Przebieg zdefiniowany przez użytkownika Smooth Wygładzanie Click here to smooth waveform. Kliknij tutaj, aby wygładzić przebieg. Interpolation Interpolacja Normalize Normalizacja Draw your own waveform here by dragging your mouse on this graph. Narysuj swój własny przebieg przeciągając kursorem po tym wykresie. Click for a sine-wave. Kliknij aby przełączyć na przebieg sinusoidalny. Click here for a triangle-wave. Kliknij aby przełączyć na przebieg trójkątny. Click here for a saw-wave. Kliknij aby przełączyć na przebieg piłokształtny. Click here for a square-wave. Kliknij aby przełączyć na przebieg prostokątny. Click here for white-noise. Kliknij aby przełączyć na przebieg stochastyczny. Click here for a user-defined shape. Kliknij aby przełączyć na przebieg zdefiniowany przez użytkownika. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file Nie można otworzyć pliku Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Nie da się otworzyć pliku %1 do zapisu. Upewnij się, że masz uprawnienia zapisu do tego pliku i katalogu w którym się znajduje a następnie spróbuj ponownie! Error Błąd Error while determining file-encoder device. Please try to choose a different output format. Wystąpił błąd podczas określania enkodera. Spróbuj wybrać inny format wyjściowy. Rendering: %1% Rendering: %1% Export project to %1 Eksport projektu do %1 fader Please enter a new value between %1 and %2: Wprowadź nową wartość pomiędzy %1 a %2: graphModel Graph Wykres kickerInstrument Start frequency Częstotliwość początkowa End frequency Częstotliwość końcowa Gain Wzmocnienie Length Distortion Start Distortion End Envelope Slope Noise Szum Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: Częstotliwość początkowa: End frequency: Częstotliwość końcowa: Gain: Wzmocnienie: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &Pomoc Please enter a new value between -96.0 dBV and 6.0 dBV: Wprowadź nową wartość pomiędzy -96.0 dBV a 6.0 dBV: Please enter a new value between %1 and %2: Wprowadź nową wartość pomiędzy %1 a %2: ladspaBrowserView Available Effects Dostępne Efekty Unavailable Effects Niedostępne Efekty Instruments Instrumenty Analysis Tools Narzędzia Analizujące Don't know Nieznane This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. To okno dialogowe wyświetla informacje o wszystkich wtyczkach LADSPA jakie LMMS był w stanie zlokalizować. Wtyczki są podzielone na pięć kategorii bazujących na intepretacji ich portów i nazw. Efekty dostępne to te, które mogą zostać użyte przez LMMS. Aby wtyczka efektowa mogła zostać wykorzystana musi posiadać zarówno kanały wejściowe jak i wyjściowe. Kanały wejściowe są identyfikowane jako zawierające wyraz 'in' w nazwie kanału, kanały wyjściowe natomiast powinny w nazwie zawierać słowo 'out'. Ponadto efekt musi posiadać taką samą liczbę wejść i wyjść a także obsługiwać tryb pracy w czasie rzeczywistym. Efekty niedostępne to takie, które posiadają różną liczbę wejść i wyjść albo nie potrafią pracować w czasie rzeczywistym. Instrumenty to wtyczki, w których udało się zidentyfikować jedynie kanały wyjściowe. Narzędzia Analizujące to wtyczki, w których rozpoznano tylko kanały wejściowe. Nieznane to wtyczki, których kanały zarówno wejściowe jak i wyjściowe pozostają niezidentyfikowane. Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o dostępnych portach. Type: Rodzaj: ladspaDescription Plugins Wtyczki Description Opis ladspaPortDialog Ports Porty Name Nazwa Rate Tempo Direction Kierunek Type Rodzaj Min < Default < Max Min < Domyślne < Max Logarithmic Logarytmiczny SR Dependent Zależny od SR Audio Audio Control Regulator Input Wejście Output Wyjście Toggled Przełączalne Integer Całkowite Float Zmiennoprzecinkowe Yes Tak lb302Synth VCF Cutoff Frequency Częstotliwość Odcięcia VCF VCF Resonance Rezonans VCF VCF Envelope Mod Modyfikacja Obwiedni VCF VCF Envelope Decay Zanikanie Obwiedni VCF Distortion Zniekształcenie Waveform Kształt Przebiegu Slide Decay Ślizgające Zanikanie Slide Ślizganie Accent Akcent Dead Martwy 24dB/oct Filter Filtr 24dB/okt lb302SynthView Cutoff Freq: Częst. Odc.: Resonance: Rezonans: Env Mod: Mod. Obw.: Decay: Zanikanie: 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/oktawę, filtr III rzędu Slide Decay: Zanikanie z poślizgiem: DIST: DIST: Saw wave Fala piłokształtna Click here for a saw-wave. Kliknij tutaj, aby przełączyć na przebieg piłokształtny. Triangle wave Fala trójkątna Click here for a triangle-wave. Kliknij tutaj, aby przełączyć na przebieg trójkątny. Square wave Fala prostokątna Click here for a square-wave. Kliknij tutaj, aby przełączyć na przebieg prostokątny. Rounded square wave Fala prostokątna, zaokrąglona Click here for a square-wave with a rounded end. Kliknij tutaj, aby przełączyć na przebieg prostokątny z zaokrąglonymi narożami. Moog wave Fala Mooga Click here for a moog-like wave. Kliknij tutaj, aby przełączyć na przebieg mooga. Sine wave Fala sinusoidalna Click for a sine-wave. Kliknij tutaj, aby przełączyć na przebieg sinusoidalny. White noise wave Biały szum Click here for an exponential wave. Kliknij tutaj, aby przełączyć na przebieg wykładniczy. Click here for white-noise. Kliknij tutaj, aby przełączyć na przebieg stochastyczny. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency Częstotliwość Odcięcia VCF VCF Resonance Rezonans VCF VCF Envelope Mod Modyfikacja Obwiedni VCF VCF Envelope Decay Zanikanie Obwiedni VCF Distortion Zniekształcenie Waveform Kształt Przebiegu Slide Decay Zanikanie z poślizgiem Slide Poślizg Accent Akcent Dead Martwy 24dB/oct Filter Filtr 24dB/okt lb303SynthView Cutoff Freq: Częst. Odc.: CUT CUT Resonance: Rezonans: RES RES Env Mod: Mod. Obw.: ENV MOD ENV MOD Decay: Zanikanie: DEC DEC 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/oktawę, filtr III rzędu Slide Decay: Zanikanie z poślizgiem: SLIDE SLIDE DIST: DIST: DIST DIST WAVE: FALA: WAVE FALA malletsInstrument Hardness Twardość Position Pozycja Vibrato Gain Vibrato - Wzmocnienie Vibrato Freq Vibrato - Częstotliwość Stick Mix Stick Mix Modulator Modulator Crossfade Crossfade LFO Speed LFO - Szybkość LFO Depth LFO - Głębokość ADSR ADSR Pressure Ciśnienie Motion Ruch Speed Prędkość Bowed Pochylenie Spread Rozstrzał Marimba Marimba Vibraphone Wibrafon Agogo Agogo Wood1 Wood1 Reso Rezonans Wood2 Wood2 Beats Uderzenia Two Fixed Dwa Zafiksowane Clump Stąpnięcie Tubular Bells Dzwony Rurowe Uniform Bar Tuned Bar Glass Harfa Szklana Tibetan Bowl Misy Tybetańskie Missing files Pominięte pliki Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Wygląda na to, że Twoja instalacja Stk jest niekompletna. Upewnij się, że cała paczka Stk została zainstalowana! malletsInstrumentView Instrument Instrument Spread Rozstrzał Spread: Rozstrzał: Hardness Twardość Hardness: Twardość: Position Pozycja Position: Pozycja: Vib Gain Vib-Wzm Vib Gain: Vib-Wzm: Vib Freq Vib-Częst Vib Freq: Vib-Częst: Stick Mix Stick Mix Stick Mix: Stick Mix: Modulator Modulator Modulator: Modulator: Crossfade Crossfade Crossfade: Crossfade: LFO Speed LFO - Szybkość LFO Speed: LFO - Szybkość: LFO Depth LFO - Głębokość LFO Depth: LFO - Głębokość: ADSR ADSR ADSR: ADSR: Bowed Pochylenie Pressure Ciśnienie Pressure: Ciśnienie: Motion Ruch Motion: Ruch: Speed Prędkość Speed: Prędkość: Vibrato Vibrato Vibrato: Vibrato: manageVSTEffectView VST Sync Synchronizacja VST Click here if you want to synchronize all parameters with VST plugin. Kliknij tutaj, jeśli chcesz zsynchronizować wszystkie parametry z wtyczką VST. - VST parameter control Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView VST Sync Synchronizacja VST Click here if you want to synchronize all parameters with VST plugin. Kliknij tutaj, jeśli chcesz zsynchronizować wszystkie parametry z wtyczką VST. - VST plugin control Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help Pomoc [&H] opl2instrument Patch Próbka Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Zniekształcenie Volume Głośność organicInstrumentView Distortion: Zniekształcenie: Volume: Głośność: Randomise Randomizuj Osc %1 waveform: Osc %1 przebieg: Osc %1 volume: Osc %1 głośność: Osc %1 panning: Osc %1 panoramowanie: cents cent(y) The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Okres wobulacji Sweep direction Kierunek wobulacji Sweep RtShift amount Wave Pattern Duty Channel 1 volume Głośność kanału 1 Volume sweep direction Kierunek wobulacji głośności Length of each step in sweep Długość każdego kroku wobulacji Channel 2 volume Głośność kanału 2 Channel 3 volume Głośność kanału 3 Channel 4 volume Głośność kanału 4 Right Output level Poziom Wyjścia Prawego Left Output level Poziom Wyjścia Lewego Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Soprany Bass Basy Shift Register width papuInstrumentView Sweep Time: Okres wobulacji: Sweep Time Okres wobulacji Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Długość każdego kroku wobulacji: Length of each step in sweep Długość każdego kroku wobulacji Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Soprany: Treble Soprany Bass: Basy: Bass Basy Sweep Direction Kierunek wobulacji Volume Sweep Direction Kierunek wobulacji głośności Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here Narysuj przebieg pluginBrowser no description brak opisu Instrument plugins Instrumenty wtyczkowe Incomplete monophonic imitation tb303 Niezupełna monofoniczna emulacja syntezatora tb303. Plugin for freely manipulating stereo output Wtyczka do nieograniczonego manipulowania wyjściami stereofonicznymi. Plugin for controlling knobs with sound peaks Wtyczka do kontrolowania regulatorów za pośrednictwem szczytów dźwięku. Plugin for enhancing stereo separation of a stereo input file Wtyczka rozszerzająca bazę stereo. List installed LADSPA plugins Pokaż zainstalowane wtyczki LADSPA Filter for importing FL Studio projects into LMMS Filtr do importowania projektów FL Studio w LMMS. GUS-compatible patch instrument Instrument kompatybilny z standardem sampli GUS. Additive Synthesizer for organ-like sounds Syntezator Addytywny umożliwiający stworzenie dźwięków zbliżonych brzmieniem do organów. Tuneful things to bang on Melodyjny instrument pałeczkowy. VST-host for using VST(i)-plugins within LMMS Host VST pozwalający na użycie wtyczek VST(i) w LMMS. Vibrating string modeler Symulator drgającej struny. plugin for using arbitrary LADSPA-effects inside LMMS. Wtyczka umożliwiająca załadowanie dowolnego efektu LADSPA wewnątrz LMMS. Filter for importing MIDI-files into LMMS Filtr do importowania plików MIDI do LMMS. Instrument browser Przeglądarka instrumentów Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Przeciągnij instrument do Edytora Piosenki, Edytora Perkusji i Basu lub na wybraną ścieżkę. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Emulator układu dźwiękowego SID (MOS6581 i MOS8580) Te układy scalone były stosowane w komputerach Commodore 64. Player for SoundFont files Odtwarzacz plików SoundFont. Emulation of GameBoy (TM) APU Emulator układu APU GameBoy'a (TM). Customizable wavetable synthesizer Konfigurowalny syntezator tablicowy (wavetable). Embedded ZynAddSubFX Wbudowany syntezator ZynAddSubFX. 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes Notatki projektu Put down your project notes here. Umieść tutaj swoje zapiski dotyczące projektu. Edit Actions Edytuj Akcje &Undo Cofnij [&U] Ctrl+Z Ctrl+Z &Redo Powtórz [&R] Ctrl+Y Ctrl+Y &Copy &Kopiuj Ctrl+C Ctrl+C Cu&t Wy&tnij Ctrl+X Ctrl+X &Paste &Wklej Ctrl+V Ctrl+V Format Actions Formatowanie &Bold Wytłuść [&B] Ctrl+B Ctrl+B &Italic Kursywa [&I] Ctrl+I Ctrl+I &Underline Podkreślenie [&U] Ctrl+U Ctrl+U &Left Lewo [&L] Ctrl+L Ctrl+L C&enter Centrowanie [&E] Ctrl+E Ctrl+E &Right Prawo [&R] Ctrl+R Ctrl+R &Justify Justowanie [&J] Ctrl+J Ctrl+J &Color... Kolor... renameDialog Rename... Zmień nazwę... setupDialog Setup LMMS Konfiguracja LMMS General settings Podstawowe ustawienia BUFFER SIZE ROZMIAR BUFORA Reset to default-value Zresetuj do wartości domyślnej MISC DODATKOWE Enable tooltips Włącz podpowiedzi Show restart warning after changing settings Ostrzeżenie o konieczności restartu po zmianie parametrów Display volume as dBV Głośność w dBV Compress project files per default Domyślnie kompresuj pliki projektu HQ-mode for output audio-device Tryb wysokiej jakości wyjścia urządzenia audio LMMS working directory Katalog roboczy LMMS VST-plugin directory Katalog wtyczek VST Artwork directory Katalog z grafiką FL Studio installation directory Katalog instalacji FL Studio STK rawwave directory Katalog STK rawwave Performance settings Ustawienia wydajności UI effects vs. performance Efekty interfejsu vs wydajność Audio settings Ustawienia audio AUDIO INTERFACE INTERFEJS AUDIO MIDI settings Ustawienia MIDI MIDI INTERFACE INTERFEJS MIDI OK OK Cancel Anuluj Restart LMMS Restart LMMS Please note that most changes won't take effect until you restart LMMS! Większość zmian da efekt dopiero po zrestartowaniu LMMS! Frames: %1 Latency: %2 ms Ramki: %1 Latencja: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Tutaj możesz ustawić rozmiar wewnętrznego bufora używanego przez LMMS. Niższe wartości skutkują mniejszą latencją ale mogą powodować zniekształcenia dźwięku lub kiepską wydajność, zwłaszcza na starszych komputerach lub kernelach bez obsługi czasu rzeczywistego. Choose LMMS working directory Wybierz katalog roboczy LMMS Choose your VST-plugin directory Wybierz katalog wtyczek VST Choose artwork-theme directory Wybierz katalog z grafiką Choose FL Studio installation directory Wybierz katalog z instalacją FL Studio Choose LADSPA plugin directory Wybierz katalog wtyczek LADSPA Choose STK rawwave directory Wybierz katalog STK rawwave Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Tutaj możesz wybrać preferowany interfejs audio. W zależności od konfiguracji Twojego systemu podczas kompilacji możesz wybierać pomiędzy ALSA, JACK, OSS i innymi. Poniżej znajduje się sekcja w której możesz zmienić ustawienia wybranego interfejsu. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Tutaj możesz wybrać preferowany interfejs MIDI. W zależności od konfiguracji systemu podczas kompilacji możesz wybierać pomiędzy ALSA, OSS i innymi. Poniżej znajduje się sekcja w której możesz zmienić ustawienia wybranego interfejsu. Paths Ścieżki LADSPA plugin paths Ścieżki do wtyczek LADSPA Default Soundfont File Domyślny plik Soundfont Background artwork Grafika tła Choose default SoundFont Wybierz domyślny SoundFont Choose background artwork Wybierz grafikę tła One instrument track window mode Tryb jednego, wspólnego okna dla wszystkich instrumentów Smooth scroll in Song Editor Płynne przewijanie w Edytorze Piosenki Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Bank Patch Próbka Gain Wzmocnienie Reverb Pogłos Reverb Roomsize Rozmiar pomieszczenia Reverb Damping Tłumienie pogłosu Reverb Width Rozpiętość pogłosu Reverb Level Poziom pogłosu Chorus Chorus Chorus Lines Linie chorusu Chorus Level Poziom chorusu Chorus Speed Prędkość chorusu Chorus Depth Głębokość chorusu sf2InstrumentView Open other SoundFont file Otwórz inny plik SoundFont Click here to open another SF2 file Kliknij tutaj, aby otworzyć inny plik SF2 Choose the patch Wybierz próbkę Gain Wzmocnienie Apply reverb (if supported) Nałóż pogłos (jeśli wspierane) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Ten przycisk włącza pogłos. Działa tylko na plikach, które wspierają tę funkcję. Reverb Roomsize: Rozmiar pomieszczenia: Reverb Damping: Tłumienie pogłosu: Reverb Width: Rozpiętość pogłosu: Reverb Level: Poziom pogłosu: Apply chorus (if supported) Nałóż chorus (jeśli wspierane) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Ten przycisk włącza chorus. Działa tylko na plikach, które wspierają tę funkcję. Chorus Lines: Linie chorusu: Chorus Level: Poziom chorusu: Chorus Speed: Prędkość chorusu: Chorus Depth: Głębokość chorusu: Open SoundFont file Otwórz plik SoundFont SoundFont2 Files (*.sf2) Pliki SoundFont2 (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Częstotliwość graniczna Resonance Zafalowanie charakterystyki Filter type Rodzaj filtru Voice 3 off Wyłącz głos 3 Volume Głośność Chip model Rodzaj scalaka sidInstrumentView Volume: Głośność: Resonance: Zafalowanie charakterystyki: Cutoff frequency: Częstotliwość graniczna: High-Pass filter Filtr górnoprzepustowy Band-Pass filter Filtr pasmowoprzepustowy Low-Pass filter Filtr dolnoprzepustowy Voice3 Off Wyłącz głos 3 MOS6581 SID MOS6581 SID MOS8580 SID MOS8580 SID Attack: Atak: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Wartość ataku (Attack) określa jak szybko sygnał wyjściowy głosu %1 narasta od zera do wartości szczytowej. Decay: Zanikanie: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Wartość zanikania (Decay) decyduje jak szybko sygnał wyjściowy opada od wartości szczytowej do ustalonego poziomu podtrzymania (Sustain). Sustain: Podtrzymanie: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Sygnał wyjściowy głosu %1 będzie utrzymywał poziom podtrzymania (Sustain) tak długo, jak nuta będzie odtwarzania (klawisz klawiatury muzycznej będzie wciśnięty). Release: Zwolnienie: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Sygnał wyjściowy głosu %1 opadnie od poziomu podtrzymania (Sustain) do poziomu zerowego po czasie określonym przez parametr wybrzmiewania (Release). Pulse Width: Współczynnik wypełnienia impulsu: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Współczynnik wypełnienia impulsu określa stosunek czasu trwania impulsu do okresu tego impulsu. Pozwala na płynną zmianę wysokości tonu bez dostrzegalnego przejścia między dźwiękami. Należy wybrać prostokątny kształt fali oscylatora %1 aby dostrzec jakikolwiek słyszalny efekt. Coarse: Zgrubne odstrojenie: The Coarse detuning allows to detune Voice %1 one octave up or down. Zgrubne odstrojenie pozwala zmienić wysokość głosu %1 o oktawę w górę lub w dół. Pulse Wave Przebieg Prostokątny Triangle Wave Przebieg Trójkątny SawTooth Przebieg Piłokształtny Noise Szum Sync Synchronizacja Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Synchronizacja koordynuje w czasie fundamentalne częstotliwości oscylatorów %1 i %2 tworząc efekty "Hard Sync". Ring-Mod Modulacja Pierścieniowa Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Modulacja Pierścieniowa (kołowa) podmienia sygnał trójkątny na wyjściu oscylatora %1 na pierścieniowo zmodulowaną kombinację oscylatorów %1 i %2. Filtered Filtrowany When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Kiedy włączona jest filtracja, głos %1 będzie przetwarzany przez filtr. Kiedy filtracja jest wyłączona, głos %1 pojawi się bezpośrednio na wyjściu, bez filtracji. Test Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Kiedy włączony jest Test, oscylator %1 zostanie czasowo zresetowany i zablokowany. song Tempo Tempo Master volume Główna głośność Master pitch Główne odstrojenie Project saved Projekt zapisany The project %1 is now saved. Projekt %1 został właśnie zapisany. Project NOT saved. Projekt NIE JEST zapisany. The project %1 was not saved! Projekt %1 nie jest zapisany! Import file Importuj plik untitled niezatytułowane Select file for project-export... Wybierz plik aby wyeksportować projekt... Empty project Pusty projekt This project is empty so exporting makes no sense. Please put some items into Song Editor first! Ten projekt jest pusty więc eksportowanie go nie ma najmniejszego sensu. Najpierw umieść kilka elementów w Edytorze Piosenki! MIDI sequences sekwencje MIDI FL Studio projects projekty FL Studio All file types wszystkie pliki Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE ROZSZERZ Width: Szerokość: stereoEnhancerControls Width Szerokość stereoMatrixControlDialog Left to Left Vol: Głośność Lewy IN Lewy OUT: Left to Right Vol: Głośność Lewy IN Prawy OUT: Right to Left Vol: Głośność Prawy IN Lewy OUT: Right to Right Vol: Głośność Prawy IN Prawy OUT: stereoMatrixControls Left to Left Lewy IN >> Lewy OUT Left to Right Lewy IN >> Prawy OUT Right to Left Prawy IN >> Lewy OUT Right to Right Prawy IN >> Prawy OUT timeLine Enable/disable auto-scrolling Włącz/wyłącz autoprzewijanie Enable/disable loop-points Włącz/wyłącz znaczniki pętli After stopping go back to begin Po zatrzymaniu powróć do początku After stopping go back to position at which playing was started Po zatrzymaniu powróć do pozycji z której rozpoczęto odtwarzanie After stopping keep position Po zatrzymaniu utrzymaj pozycję Hint Wskazówka Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Wyciszone Solo Solo trackContentObject Muted Wyciszone trackContentObjectView Current position Bieżąca pozycja Hint Wskazówka Press <Ctrl> and drag to make a copy. Naciśnij <Ctrl> i przeciągnij aby stworzyć kopię. Current length Aktualna długość Press <Ctrl> for free resizing. Naciśnij <Ctrl> aby zmienić rozmiar. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 do %5:%6) Delete (middle mousebutton) Kasuj (naciśnij rolkę myszy) Cut Wytnij Copy Kopiuj Paste Wklej Mute/unmute (<Ctrl> + middle click) Wycisz/anuluj wyciszenie (<Ctrl> + kliknięcie rolką myszy) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Naciśnij <Ctrl> podczas przeciągania elementu kursorem aby rozpocząć nową akcję 'przeciągnij i upuść'. Actions for this track Akcje dla tej ścieżki Mute Wyciszenie Mute this track Wycisz tę ścieżkę Solo Solo Clone this track Klonuj tę ścieżkę Remove this track Usuń tę ścieżkę Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Ładowanie wtyczki Please wait while loading VST-plugin... Ładowanie wtyczki VST. Proszę czekać... Failed loading VST-plugin Ładowanie wtyczki VST nie powiodło się The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! Wtyczka VST %1 nie może zostać załadowana z jakiegoś powodu. Jeśli pracuje normalnie z innym oprogramowaniem VST pod Linuksem proszę koniecznie skontaktować się z developerami LMMS! vibed String %1 volume String %1 - głośność String %1 stiffness String %1 - sztywność Pick %1 position Punkt Wymuszenia %1 Pickup %1 position Punkt Monitorowania %1 Pan %1 Panoramowanie %1 Detune %1 Odstrojenie %1 Fuzziness %1 Rozmycie %1 Length %1 Długość %1 Impulse %1 Impuls %1 Octave %1 Oktawa %1 vibedView Volume: Głośność: The 'V' knob sets the volume of the selected string. Pokrętło 'V' ustala głośność wybranej struny. String stiffness: Sztywność struny: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pokrętło 'S' ustala sztywność wybranej struny. Sztywność struny określa jak długo będzie ona drgać. Niższe sztywności wydłużają czas drgań. Pick position: Punkt Wymuszenia: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pokrętło 'P' ustala pozycję punktu w którym wymuszenie zostanie przyłożone do struny. Pickup position: Punkt Monitorowania: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pokrętło 'PU' ustala pozycję punktu w którym będą monitorowane (nasłuchiwane) drgania struny. Pan: Panoramowanie: The Pan knob determines the location of the selected string in the stereo field. Pokrętło 'Pan' determinuje położenie wybranej struny w przestrzeni stereo. Detune: Odstrojenie: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Pokrętło 'Odstrojenie' modyfikuje wysokość tonu wybranej struny. Wartości niższe niż zero powodują spłaszczenie brzmienia. Wartości powyżej zera skutkują wyostrzeniem brzmienia. Fuzziness: Rozmycie: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Pokrętło Slap dodaje nieco efektu fuzz do wybranej struny, słyszalnego zwłaszcza podczas fazy ataku. Może być używane aby uczynić brzmienie struny bardziej 'metalicznym'. Length: Długość: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Pokrętło długości służy do zmiany długości wybranej struny. Dłuższa struna będzie drgać dłużej i jaśniej, jednak zużyje więcej mocy obliczeniowej procesora. Impulse or initial state Wymuszenie lub stan początkowy The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Przełącznik 'Imp' określa czy przebieg z wykresu ma być wymuszeniem przyłożonym struny czy ma odpowiadać za początkowy jej stan (kształt). Octave Oktawa The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Przełącznik oktawy służy do wyboru, na jakich częstotliwościach harmonicznych będzie drgać struna. Na przykład ustawienie wartości -2 sprawi, że otrzymamy dźwięk dwie oktawy niższy od częstotliwości podstawowej struny, wartość 'F' oznacza, że otrzymany dźwięk będzie miał częstotliwość zgodną z częstotliwością fundamentalną zaś wartość '6' przesunie częstotliwość drgań o 6 oktaw w górę. Impulse Editor Edytor Impulsu The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Edytor kształtu przebiegu pozwala kontrolować strukturę impulsu, który powoduje wzbudzenie drgań struny. Przycisk po prawej umożliwia wybór kształtu fali. Przycisk '?' załaduje przebieg z pliku - jedynie pierwsze 128 próbek zostanie załadowanych. Przebieg może zostać narysowany ręcznie. Przycisk 'S' wygładza przebieg. Przycisk 'N' normalizuje przebieg. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Symulator do dziewięciu niezależnych, wibrujących strun. Przełącznik struny umożliwia wybór strun, które mają być edytowane. Przełącznik oktawy określa częstotliwości harmoniczne, na których będzie drgać struna. Wykres umożliwia zadanie kształtu wymuszenia, które wprawia strunę w drgania. Pokrętło 'V' reguluje głośność. Gałka 'S' modyfikuje sztywność struny. Pokrętło 'P' zmienia położenie Punktu Wymuszenia. Gałka 'PU' zmienia położenie Punktu Monitorowania. Pokrętło 'Slap' dodaje do dźwięku struny trochę efektu fuzz. Pokrętło 'Długość' reguluje długość struny. Kontrolka LED w prawym dolnym rogu edytora kształtu fali pokazuje, czy wybrana struna jest aktywna. Enable waveform Włącz przebieg Click here to enable/disable waveform. Kliknij tutaj, aby włączyć/wyłączyć przebieg. String Struna The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Przełącznik struny służy wyboru struny, którą będziemy modyfikować. Instrument Vibed może zawierać do 9 niezależnych układów drgających. Kontrolka LED w prawym dolnym rogu edytora kształtu fali pokazuje, czy wybrana struna jest aktywna. Sine wave Przebieg Sinusoidalny Triangle wave Przebieg Trójkątny Saw wave Przebieg Piłokształtny Square wave Przebieg Prostokątny White noise wave Biały Szum User defined wave Przebieg zdefiniowany przez użytkownika Smooth Wygładzanie Click here to smooth waveform. Kliknij tutaj, aby wygładzić przebieg. Normalize Normalizacja Click here to normalize waveform. Kliknij tutaj, aby znormalizować przebieg. &Help &Pomoc Use a sine-wave for current oscillator. Użyj fali sinusoidalnej dla bieżącego oscylatora. Use a triangle-wave for current oscillator. Użyj fali trójkątnej dla bieżącego oscylatora. Use a saw-wave for current oscillator. Użyj fali piłokształtnej dla bieżącego oscylatora. Use a square-wave for current oscillator. Użyj fali prostokątnej dla bieżącego oscylatora. Use white-noise for current oscillator. Użyj białego szumu dla bieżącego oscylatora. Use a user-defined waveform for current oscillator. Użyj fali zdefiniowanej przez użytkownika dla bieżącego oscylatora. visualizationWidget click to enable/disable visualization of master-output Kliknij tutaj, aby włączyć/wyłączyć wizualizację kanału master Click to enable Kliknij aby włączyć voiceObject Voice %1 pulse width Współczynnik wypełnienia impulsu głosu %1 Voice %1 attack Atak głosu %1 Voice %1 decay Zanikanie głosu %1 Voice %1 sustain Podtrzymanie głosu %1 Voice %1 release Wybrzmiewanie głosu %1 Voice %1 coarse detuning Zgrubne odstrojenie głosu %1 Voice %1 wave shape Kształt fali głosu %1 Voice %1 sync Synchronizacja głosu %1 Voice %1 ring modulate Modulacja pierścieniowa głosu %1 Voice %1 filtered Filtrowanie głosu %1 Voice %1 test Test głosu %1 waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/pt.qm000066400000000000000000006704241247673406200156460ustar00rootroot00000000000000d@d̈@TE IEZWsF|KG*G&6G[GN=Hj} Hi\HNhH7bHzCHzKHF)I;SImNImWJ'ܢJ+CJ<@NJXJuK4Lb iM58MGM$MmN(OFNh#YObzPWPW8FS}AsS}CSUgSbԯS5TbT.ΗTZTTʴ<TʴTxUQ&UU`$U` UjUUj VbVbVb VhGVp{V4VVVW W Wi9WWX MXHZ/;Z/HZkR Zk\ZZ8ZoZo[tm[jM\6L]6 a:]0^eqU@^erU}`~&`~dkc^acN@h 4`ių TiųiųsszyݓtUtbv=X|}ƻ}U~#;;b_?ϙ/zj6^Kgi"vJgCu7e)N7)7 i#y=yק1۹ק3@QTOnTϴW3:J  bE bMU g  C>(n/N+S+Eun}it"R>/V/V2;7"E97on9}9;n; =v@1xz-@۴@@CtFzzFzBmJOJYIMUTSOXVOXP0ײT:&VZ;PZ;Y`1xaUZsimоw80yu&z;x nou~4o>untƮɄyʭiX7(ՙ~ծhź>[*^8%5݊E<l'(ߺ oo6;1CBLA R|`Di/h>j"8J;a3Y mL@p E(^(^)u,´E*,´$.C4N9i:  G4YImRop_/}bzbr%txż~z@9%8n(3CGuGxGwjGv<...?=L?Ie)}))~)dE8f3%) M<9>">yI>6ѻ GTGҩBVҩBһBV*һBB|'t>æ  NgH~B@c` ]ssFs;rDDS%buIɯ"ݎ"ݎ|% :$2Q!.3`48JN8:)m?Pv@:+BW>FBaNCCBLHH>I[YƝOXO۹hP~[P~ SkWa*Wj@Z.]4]Y}] l.lhUlhlxoTou=mx{x|ZǨ|Zr,}"<}<}ӑ~(~v%ŐP_ĩR$c#̔#,y0]sXw.v>u]Nt/xY|R#]A~~z~?WCĽVLPKϯѫ<6>6+קAɨקCN~քܗjg C'왞<g1VB` =չ#Y<.X$D 0?(}()e? 10G/19:^;:<<=<<IA UUFA>J8KM$_gMtMк^O۹lPJPJaPJ?Qq.WnXYZ<`<'``%Wa`%`%c=Ud Zg5hIjzt7kJ[tl rJ 2w~eawwwEw dxYZֵyT;eyTG~{ 9C  N2xu uuuuhuLXuLuSumvy{IJaIkIIhzhzhPiņZ5 e\.qYQP  ODKoBW9BBVBfzeF h0`!h0dBSwxsA~Ce>ˤ (ž.ՔnY`E5ͥz22kF(5Q݄h݄l`I~AYhU>h\vQ@$fnDK#PCX_jdC0V t1n u u @3lq%TΎQ(!E&$0%G)uI)|-UC.15Z3:7e҄7e7U8_?~0EzF^Q"F^[2H8TPe)QVQQDZ "\C.m\D%maEma*nf}hh93?h;@+jTv %jTw ll l9p }s LvA x0}o.AD?ALqkK]*ĜqF̿w}DzWc>ARE`jZMN?fYf z]tRKt]HGt{tInuÞ]%{%o^1B!Z; GEUZuN#9<5 t<5 <5D<51<5S<5q<5lsߺDb}UljZC6N*^! tEErE|b>ixh#EC'v_'v(*h+pZj+#M1U͕1^ 6{:gN:֭2Eժ7m7~YZ(mDZ2(qRT2CeޔrD:Tti>>%tZ??LC'vIUI?,UIZ][tA\X.8aDcߛcz6hFhJV!iANjq/>2I2]V`dTA잂XF잂W)d2KUd#>JgS  .R: UURٚJ$Ϟ_-I}C-@dRJYeEμecegjDm4 nq4vSe5 59;TP$0]S#HCOyHCXl0dX n#H%UUEeU  Jd;%uXJ&ho]yz]yjyy ^7PS F¸yi¸o'ʩQʩ\<c8]=]JnO"e࣓C(O?^mc$"\YcY  KU  ?s =$ $ k )84 * .5n 3': 6E 8e* 8e 9J; 9 GT ItY4 II6 Mg6 O> T Ys8 hI.E hI.+ k l8 p, pv w% w% xJ |b4 >Z >. 9? !~ "C  B>>n F B1 6  ^ l o * ` `> 9 Kx U n3z  F wS Kn-B Fy K\ P z R^ʄ SS Xn ]0 ^eTd dQr X$  4 UU ue Ra Ui 1 X Ns  TR  "  ~ڦ ·~[} Ɓ(p *i ʧy ʵ ˔o  & J\u D N% ؋ ڮb ڮf ہ, z  t ׾ ɺ  *p ]i _    6 I9z ".5P $ r- + -  3' 9yA9 N Om S'Jg STn; \ \\ ]:| ct` ctd eEϽ m ; m G m qu s T u:2  W $n -    ?X NQ N[q G J V h_ R: 2P 2Z 8A Ɵ Ƶ8YU < ^ 4 ӗ`# Ӱ/ 2 < <,@ e> S Y:m Y: Y:l2 ~2 + i0 ӗ   .{ . . .AG ʓJ  "{u "y $&y (c + L + l +  -#T -#l -x -Z 5ݙ  ͣ { U; UG2 t t { { \|  e sD a? e5 ^  ^3  E ɈH   ޖ$ 9C 9K  鼣 ]Z?  /. / _ `em$ gi^ s + Z  5 r (d" .˙ 0 x( 0 v 0 u 0 t @uCv @ub\ @u' W` Zʌ \G ao bS# c ck c cs c} c;| fbP l8M1 |H5Ag |.k   q   }NZ S"6 @ " /k i ; ! 1 36 . .. f wU Nq Z  n9 h 0^7 ɶ. QF G Չ9@ Չ9 3 )>v  kE o [! /^8 /^-p ~c rXh ^ : [٦RWKfn~mi |hAiZ!N$!&ʮ[1 |n1 2[:Gj:GnG;}r<)BD>zG P>Q>LY]ad^cg'n5nn5jn?dyOp :E?J<n))b`9<~`9HȘ/LzFSWz@ BqyP^N p' lAoks6[eS:  |[0 <LZ"*$e&d'=\(| )3`7WYG?ICgD>_!D^|EIJi{JigM| U&vXҾ Z  _[x*1[^ E` eRWeR~eRWeR iI HiI  @m4xepڸPy+!_L*R*]oZk7KF r¥ISL=d֩<`r9Ƴφ~ IS&ܹTi@\<html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html>

http://lmms.sourceforge.net

 AboutDialog SobreAbout AboutDialogSobre LMMS About LMMS AboutDialogAutoresAuthors AboutDialogPCopyright (c) 2004-2014, LMMS developers(Copyright (c) 2004-2014, LMMS developers AboutDialog>Este programa foi traduzido para o idioma portugus de forma voluntria. Qualquer sugesto para traduo, entre em contato pela lista de desenvolvedores do LMMS ou pelo meu email: <emviveros/arroba/users/ponto/sourceforge/ponto/net>. Sua contribuio muito bem vinda! Esteban ViverosCurrent language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialogLMMSLMMS AboutDialogPLMMS - produo musical fcil para todos)LMMS - easy music production for everyone AboutDialogLicenaLicense AboutDialogTraduo Translation AboutDialog8Verso %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogPANPANAmplifierControlDialogPanormico:Panning:AmplifierControlDialogVOLVOLAmplifierControlDialogVolume:Volume:AmplifierControlDialogPanormicoPanningAmplifierControls VolumeVolumeAmplifierControls CANAISCHANNELSAudioAlsa::setupWidgetDISPOSITIVODEVICEAudioAlsa::setupWidgetAmplificar:Amplify:AudioFileProcessorView4Clique aqui se voc precisa abrir outro arquivo de udio. O dilogo ir aparecer voc puder selecionar seu arquivo. Configuraes como modo de loop, ponto de incio e de final, valor de amplificao, e todo o resto no sero resetados. Mas no vai mais soar como a amostra original.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorViewRContinua a tocar a amostra entre as notas%Continue sample playback across notesAudioFileProcessorView\Ativando esta opo a amostra continuar tocando entre diferentes notas - se voc mudar a altura, ou o comprimento da nota antes do fim da amostra, a prxima nota ir continuar onde a anterior parou. Para retornar a reproduo a partir do comeo, utilize uma nota na parte inferior do teclado (< 20 Hz)>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)AudioFileProcessorViewPonto final: Endpoint:AudioFileProcessorViewSe voc ativar este boto, toda a amostra ser invertida. Isto til para fazer uns efeitos legais, ex. um rudo eltrico ao contrrio.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView&Abrir outra amostraOpen other sampleAudioFileProcessorView Inverter amostraReverse sampleAudioFileProcessorView Ponto de incio: Startpoint:AudioFileProcessorViewBom este boto voc pode aumentar a proporo.Quando voc coloca um valor de 100% sua amostra no mudar. De outro maneira ela ser amplificada para mais ou para menos (o arquivo original da amostra no ser modificado!)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView&Tamanho da amostra:Sample length:AudioFileProcessorWaveView.Cliente JACK reiniciadoJACK client restarted AudioJack(O servidor JACK caiuJACK server down AudioJack$LMMS foi chutado pelo JACK por alguma razo. Logo que o JACK restaure a comunicao com o LMMS voc poder precisar fazer as conexes manualmente.LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. AudioJackO servidor de udio JACK parece ter cado e ao reiniciar uma nova instncia falhou. De qualquer maneira LMMS capaz de prosseguir. Certifique-se de salvar seu projeto e reiniciar primeiro o JACK depois o LMMS.The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack CANAISCHANNELSAudioJack::setupWidgetNOME-DO-CLIENTE CLIENT-NAMEAudioJack::setupWidget CANAISCHANNELSAudioOss::setupWidgetDISPOSITIVODEVICEAudioOss::setupWidgetBACKENDBACKENDAudioPortAudio::setupWidgetDISPOSITIVODEVICEAudioPortAudio::setupWidget CANAISCHANNELSAudioPulseAudio::setupWidgetDISPOSITIVODEVICEAudioPulseAudio::setupWidgetDISPOSITIVODEVICEAudioSdl::setupWidget(&Copiar valor (%1%2)&Copy value (%1%2)AutomatableModel&C&olar valor (%1%2)&Paste value (%1%2)AutomatableModel&Resetar (%1%2) &Reset (%1%2)AutomatableModel6Conectado ao controlador...Connect to controller...AutomatableModelConectado a %1Connected to %1AutomatableModel0Conectado ao controladorConnected to controllerAutomatableModel"Editar conexo...Edit connection...AutomatableModelBEditar automao global da msicaEdit song-global automationAutomatableModelDApagar todos os controles linkadosRemove all linked controlsAutomatableModelApagar conexoRemove connectionAutomatableModelBApagar automao global da msicaRemove song-global automationAutomatableModellUm valor de tenso alto ir fazer suave a curva mas tambm extrapolar alguns valores. Um valor de tenso baixa ir causar um declive na curva de volume para cada ponto de controle.A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.AutomationEditorTodos os valores selecionados foram copiados para a rea de transferncia.1All selected values were copied to the clipboard.AutomationEditor0Editor de Automao - %1Automation Editor - %1AutomationEditorFEditor de Automao - sem sequnciaAutomation Editor - no patternAutomationEditorClique aqui e o lpis ser ativado. O lpis serve para adicionar ou mover valores simples. Ele estar ativado previamente e ser utilizado a maior parte do tempo. Voc pode usar 'Shift+D' no teclado para ativar o lpis.Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditor"Clique aqui e a borracha ser ativada. A borracha serve para apagar valores simples. Voc pode usar 'Shif+E' no teclado para utilizar a borracha.Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditorClique aqui para copiar valores para a rea de transferncia. Voc pode copiar os valores de qualquer sequncia utilizando o boto de colar.Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorClique aqui para cortar valores para a rea de transferncia. Voc pode colar os valores em qualquer sequncia utilizando o boto de colar.Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditorClique aqui e os valores na rea de transferncia sero colados no primeiro limite visvel.YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditor2Clique aqui se voc quiser tocar a sequncia atual. Isto til enquanto se est editando. A sequncia entra em loop automaticamente quando chega ao fim.Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditor|Clique aqui se voc que parar a reproduo da sequncia atual.>Click here if you want to stop playing of the current pattern.AutomationEditorrClique aqui para selecionar progresso cbica hermite-progressions para este sequenciador de automao. O valor do objeto conectado ir mudar em curva e suavemente entre picos e vales.Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.AutomationEditorClique aqui para selecionar progresses discretas para este sequenciador de automao. O valor do objeto conectado permanecer constante entre os pontos de controle e ser substituido por um novo valor assim que um novo ponto de controle for assinalado.Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.AutomationEditorlClique aqui para selecionar progresses lineares para este sequenciador de automao. O valor do objeto conectado variar de forma constante entre os pontos de controle assinalados.Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.AutomationEditorCopiar (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor8Cbica - Hermite progressionCubic Hermite progressionAutomationEditorCortar (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor&Progresso discretaDiscrete progressionAutomationEditorLpis (Shift+D)Draw mode (Shift+D)AutomationEditor$Borracha (Shift+E)Erase mode (Shift+E)AutomationEditor"Progresso linearLinear progressionAutomationEditorColar (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorNTocar/pausar a sequncia atual (Espao)"Play/pause current pattern (Space)AutomationEditorPor favor, abra o sequenciador de automao com o menu de contexto do controle!EPlease open an automation pattern with the context menu of a control!AutomationEditorRParar de tocar a sequncia atual (Espao)'Stop playing of current pattern (Space)AutomationEditorBValor de tenso para os estriadosTension value for splineAutomationEditorTenso:  Tension: AutomationEditor Valores copiados Values copiedAutomationEditorhArraste o controle enquanto pressiona a tecla <Ctrl>$Drag a control while pressing AutomationPattern%1 Conexes%1 ConnectionsAutomationPatternViewMudar nome Change nameAutomationPatternView LimparClearAutomationPatternView Desconectar "%1"Disconnect "%1"AutomationPatternViewDAbra dentro do Editor de AutomaoOpen in Automation editorAutomationPatternViewRestaurar nome Reset nameAutomationPatternView.Armar/desarmar gravaoSet/clear recordAutomationPatternViewzdois cliques para abrir esta sequncia no editor de automao6double-click to open this pattern in automation editorAutomationPatternView$Pista de AutomaoAutomation trackAutomationTrackFREQFREQBassBoosterControlDialogFrequncia: Frequency:BassBoosterControlDialog GANHOGAINBassBoosterControlDialog Ganho:Gain:BassBoosterControlDialog RAZORATIOBassBoosterControlDialog Razo:Ratio:BassBoosterControlDialogFrequncia FrequencyBassBoosterControls GanhoGainBassBoosterControls RazoRatioBassBoosterControlsMostrar GUIShow GUICarlaInstrumentViewControlador %1 Controller %1 ControllerAuto detectar Auto DetectControllerConnectionDialog CANALCHANNELControllerConnectionDialogCONTROLADOR CONTROLLERControllerConnectionDialogCancelarCancelControllerConnectionDialog2Configurao das ConexesConnection SettingsControllerConnectionDialog Ciclo Detectado.Cycle Detected.ControllerConnectionDialog Canal de entrada Input channelControllerConnectionDialog,Entrada do controladorInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialogMAPEAR FUNOMAPPING FUNCTIONControllerConnectionDialog CONTROLADOR MIDIMIDI CONTROLLERControllerConnectionDialog\Dispositivos MIDI para receber eventos MIDI de(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKOKControllerConnectionDialog,CONTROLADOR DO USURIOUSER CONTROLLERControllerConnectionDialogAdicionarAddControllerRackView.Confirmao para ApagarConfirm DeleteControllerRackViewPosso mesmo apagar? H uma ou mais conexes associadas a este controlador. No h como voltar depois.iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackView0Estante de ControladoresController RackControllerRackView Aj&uda&HelpControllerView&&Remova este plugin&Remove this pluginControllerViewOs controladores esto prontos para alterar o valor de botes, barras deslizantes e outros controles automaticamente.QControllers are able to automate the value of a knob, slider, and other controls.ControllerViewControlesControlsControllerViewVAdicione um novo nome para este controlador&Enter the new name for this controllerControllerView(Renomear controladorRename controllerControllerView2x Passa Baixa 2x LowPassDualFilterControlsPassa todasAllpassDualFilterControlsPassa Banda csg BandPass csgDualFilterControls Passa Banda czpg BandPass czpgDualFilterControlsPassa AltaHiPassDualFilterControlsPassa BaixaLowPassDualFilterControlsMoogMoogDualFilterControlsValeNotchDualFilterControls$RC PassaBanda 12dBRC BandPass 12dBDualFilterControls$RC PassaBanda 24dBRC BandPass 24dBDualFilterControls"RC PassaAlta 12dBRC HighPass 12dBDualFilterControls"RC PassaAlta 24dBRC HighPass 24dBDualFilterControls$RC PassaBaixa 12dBRC LowPass 12dBDualFilterControls$RC PassaBaixa 24dBRC LowPass 24dBDualFilterControls0Filtro de Formante VocalVocal Formant FilterDualFilterControlsDecaimentoDecayEffectEfeito ativadoEffect enabledEffect PortalGateEffect(Mix Processada/Limpa Wet/Dry mixEffect Efeitos ativadosEffects enabled EffectChain Adicionar Efeito Add effectEffectRackView"CADEIA DE EFEITOS EFFECTS CHAINEffectRackView Adicionar Efeito Add effectEffectSelectDialog&Descrio do pluginPlugin descriptionEffectSelectDialog Aj&uda&Help EffectView(&Remover este plugin&Remove this plugin EffectViewControlesControls EffectViewDECDECAY EffectView @Os plugins de efeitos tero o sinal processado de cima para baixo quando estiverem na cadeia de efeitos. O boto de Liga/Desliga permite que voc pule o plugin selecionado a qualquer momento. O boto de Processado/Limpo controla a quantidade de processamento do efeito que vai para o sinal (som). A entrada de um plugin a sada do plugin anterior. Ento o sinal "Limpo" de um efeito posicionado na parte de baixo na cadeia conter o processamento de todos os efeitos situados acima na cadeia. O boto de Decaimento controla quanto tempo o sinal continuar sendo processado aps a nota no estar mais sendo apertada. O efeito ir parar o processamento quando o volume estiver abaixo de um limite dado um tempo especfico. Tempos grandes precisaro de mais potncia da CPU (processador), este nmero dever ser pequeno para a maioria dos efeitos. Ser necessrio aumentar para efeitos que precisam ocupar perodos de silncio como os efeitos de Atraso por exemplo... O boto de Portal (Gate) especificar o nvel, o limite que o efeito parar de atuar. Por exemplo, um relgio comea a funcionar sempre que o nvel de sinal estiver abaixo do especificado por este boto. O boto Controles abre uma caixa de dilogo para edio de parmetros do efeito. Clicar com o boto direito no mouse ir exibir um menu de contexto onde voc pode alterar a ordem em que os efeitos so processados ou tambm apagar um efeito, tudo ao mesmo tempo.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectView PORTALGATE EffectViewPortal:Gate: EffectViewPara &Baixo Move &down EffectViewPara &CimaMove &up EffectViewLiga/DesligaOn/Off EffectViewO boto de Decaimento controla quanto tempo demora at que o processamento seja interrompido. Valores pequenos iro reduzir o consumo de CPU mas em contrapartida voc correr o risco de saturar o final do sinal ao utilizar efeitos de reverberao e atraso (delay).The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectViewO boto Portal (Gate) controla a passagem de snal de acordo no o seu nvel de intensidade (volume). o que estiver acima no nvel definido passa, se o nvel for menor que o definido haver silncio.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectViewO boto de Processado/Limpo especifica a quantidade de sinal de entrada que ser afetado pelo efeito.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView Tempo:Time: EffectViewHMantm o efeito ligado ou desligado.Toggles the effect on or off. EffectViewP/LW/D EffectView.Nvel de Processamento: Wet Level: EffectView AtaqueAttackEnvelopeAndLfoParametersDecaimentoDecayEnvelopeAndLfoParametersFreq x 100 Freq x 100EnvelopeAndLfoParameters EsperaHoldEnvelopeAndLfoParametersLFO - Ataque LFO AttackEnvelopeAndLfoParametersLFO - ModulaoLFO ModulationEnvelopeAndLfoParameters LFO - Pr-atraso LFO PredelayEnvelopeAndLfoParameters&LFO - Forma de OndaLFO Wave ShapeEnvelopeAndLfoParameters LFO - Velocidade LFO speedEnvelopeAndLfoParameters2Modular Tanto-de-EnvelopeModulate Env-AmountEnvelopeAndLfoParametersModulao ModulationEnvelopeAndLfoParametersPr-atrasoPredelayEnvelopeAndLfoParametersRelaxamentoReleaseEnvelopeAndLfoParametersSustentaoSustainEnvelopeAndLfoParametersQNTAMTEnvelopeAndLfoViewATQATTEnvelopeAndLfoViewAtaque:Attack:EnvelopeAndLfoView\Clique aqui para usar uma onda dente-de-serra.&Click here for a saw-wave for current.EnvelopeAndLfoViewPClique aqui para usar uma onda senoidal.Click here for a sine-wave.EnvelopeAndLfoViewPClique aqui para usar uma onda quadrada.Click here for a square-wave.EnvelopeAndLfoViewTClique aqui para usar uma onda triangular.Click here for a triangle-wave.EnvelopeAndLfoView,Clique aqui para usar uma forma de onda definida manualmente. Depois, arraste o aquivo com a amostra de udio correspondente dentro do grfico de LFO.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoViewClique aqui se quiser que a frequncia deste LFO seja multiplicada por 100.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoViewClique aqui para que a quantidade do envelope seja controlada por este LFO.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoView ATRASODELEnvelopeAndLfoViewDecaimento:Decay:EnvelopeAndLfoViewnArraste uma amostra de qualquer lugar para esta janela.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoViewFREQ x 100 FREQ x 100EnvelopeAndLfoView DURARHOLDEnvelopeAndLfoViewSugestoHintEnvelopeAndLfoViewDurao:Hold:EnvelopeAndLfoView$Pr-atraso do LFO: LFO predelay:EnvelopeAndLfoView$Velocidade do LFO: LFO speed:EnvelopeAndLfoViewAtaque do LFO: LFO- attack:EnvelopeAndLfoViewMODULAR QNT-ENVMODULATE ENV-AMOUNTEnvelopeAndLfoView0Quantidade de modulao:Modulation amount:EnvelopeAndLfoViewPr-atraso: Predelay:EnvelopeAndLfoViewRELRELEnvelopeAndLfoViewRelaxamento:Release:EnvelopeAndLfoViewVELSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewSustentao:Sustain:EnvelopeAndLfoViewUse este boto para ajustar o tempo de ataque do LFO atual. Quanto maior este valor, mais o tempo o LFO leva para atingir sua amplitude mxima.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoViewLUse este boto para ajustar o tempo de ataque do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisar para aumentar o nvel de ataque.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoViewUse este boto para ajustar o tempo de decaimento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nvel de ataque para o nvel sustentvel. Escolha um valor pequeno para instrumentos como piano.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoViewUse este boto para ajustar o tempo de durao do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope segura o nvel de ataque antes de diminuir para o nvel sustentvel.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoViewVUse este boto para ajustar a quantidade de modulao do LFO atual. Quanto maior este valor, mais o tamanho (ex. volume ou frequncia de corte) ser influnciado pelo LFO.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoView~Use este boto para ajustar a quantidade de modulao do envelope atual. Quanto maior este valor, mais o tamanho do acorde (ex. volume ou frequncia de corte) ser influnciado pelo envelope.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoViewUse este boto para ajustar o pr-atraso do envelope atual. Quanto maior este valor, mais longo o tempo antes de iniciar o envelope atual.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoView Use este boto para ajustar o tempo de pr-atraso do LFO atual. Quanto maior este valor, maior o tempo ontes do LFO comear a oscilar.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoViewUse este boto para ajustar o tempo de relaxamento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nvel de sustentao para zero. Escolha um valor grande para instrumentos com cordas.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoViewUse este boto para ajustar a velocidade do LFO atual. Quanto maior este valor, mais rapidamente o LFO oscila e mais rpido ser seu efeito.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView<Use este boto para ajustar o nvel de sustentao do envelope atual. Quanto maior este valor, maior ser o nvel que o envelope espera antes de ir para zero.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView\Controla a quantidade do envelope por este LFO#control envelope-amount by this LFOEnvelopeAndLfoViewms/LFO:ms/LFO:EnvelopeAndLfoViewLMultiplica a frequncia do LFO por 100multiply LFO-frequency by 100EnvelopeAndLfoView128 KBit/s 128 KBit/sExportProjectDialog16 Bits Inteiro16 Bit IntegerExportProjectDialog160 KBit/s 160 KBit/sExportProjectDialog192 KBit/s 192 KBit/sExportProjectDialog192000 Hz 192000 HzExportProjectDialog1x (Nada) 1x (None)ExportProjectDialog256 KBit/s 256 KBit/sExportProjectDialog2x2xExportProjectDialog32 Bits Decimal 32 Bit FloatExportProjectDialog320 KBit/s 320 KBit/sExportProjectDialog44100 Hz44100 HzExportProjectDialog48000 Hz48000 HzExportProjectDialog4x4xExportProjectDialog64 KBit/s 64 KBit/sExportProjectDialog88200 Hz88200 HzExportProjectDialog8x8xExportProjectDialog96000 Hz96000 HzExportProjectDialog&Velocidade em bits:Bitrate:ExportProjectDialogCancelarCancelExportProjectDialogPreciso:Depth:ExportProjectDialog^Renderizar como loop (remove silncio no final)#Export as loop (remove end silence)ExportProjectDialog$Renderizar projetoExport projectExportProjectDialog&Formato do arquivo: File format:ExportProjectDialogInterpolao:Interpolation:ExportProjectDialog SadaOutputExportProjectDialogDSobreamostragem (use com cuidado):Oversampling (use with care!):ExportProjectDialogPor favor, note que os parmetros acima se aplicam para todos os tipos de arquivos.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog4Configuraes de qualidadeQuality settingsExportProjectDialog&Taxa de Amostragem: Samplerate:ExportProjectDialogDSincronizao Melhor (muito lenta)Sinc Best (very slow!)ExportProjectDialog(Sincronizao Rpida Sinc FastestExportProjectDialogBSincronizao Mdia (recomendada)Sinc Medium (recommended)ExportProjectDialogComearStartExportProjectDialog,Retentor de Ordem ZeroZero Order HoldExportProjectDialog PastasBrowser FileBrowser6--- Arquivos de fbrica ------ Factory files ---FileBrowserTreeWidget$Carregando amostraLoading sampleFileBrowserTreeWidgetbAbrir nova pista de instrumento / Editor de Bases'Open in new instrument-track/B+B EditorFileBrowserTreeWidgetfAbrir nova pista de instrumento / Editor de Arranjo(Open in new instrument-track/Song-EditorFileBrowserTreeWidgetzPor favor espere, carregando a pr visualizao da amostra...*Please wait, loading sample for preview...FileBrowserTreeWidgetLEnvio para ativar pista de instrumentoSend to active instrument-trackFileBrowserTreeWidget Aj&uda&HelpFxLine FX %1FX %1FxMixer MestreMasterFxMixerZInsira o novo nome para este Canal de Efeitos&Enter the new name for this FX channel FxMixerView Mixer de EfeitosFX-Mixer FxMixerView2Renomear Canal de EfeitosRename FX channel FxMixerView$Fader de Efeito %1 FX Fader %1FxMixerView::FxChannelViewMudoMuteFxMixerView::FxChannelViewBDeixar mudo este Canal de EfeitosMute this FX channelFxMixerView::FxChannelViewArpegioArpeggioInstrumentFunctionArpeggio"Direo do ArpejoArpeggio directionInstrumentFunctionArpeggio Portal de Arpejo Arpeggio gateInstrumentFunctionArpeggioModo do Arpejo Arpeggio modeInstrumentFunctionArpeggio Escala de ArpejoArpeggio rangeInstrumentFunctionArpeggioTempo de Arpejo Arpeggio timeInstrumentFunctionArpeggioTipo de Arpegio Arpeggio typeInstrumentFunctionArpeggioPara BaixoDownInstrumentFunctionArpeggio LivreFreeInstrumentFunctionArpeggioAleatrioRandomInstrumentFunctionArpeggioTipoSortInstrumentFunctionArpeggioSincronizaoSyncInstrumentFunctionArpeggioPara CimaUpInstrumentFunctionArpeggio,Para cima e para baixo Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGIOARPEGGIOInstrumentFunctionArpeggioViewArpegio uma tcnica instrumental (especialmente para instrumentos musicais de cordas pinadas - Violo, Viola Caipira, Contra-baixo, etc) que consiste em tocar repetidamente uma srie de notas. Quando pinamos mais de uma corda ao mesmo tempo em um violo por exemplo, podemos criar um acorde, no arpegio, podemos tocar as notas de um acorde em tempos diferentes, nunca ao mesmo tempo. Arpegios tpicos so os das triades mair e menor, mas possivel arpejar qualquer acorde que seja possvel selecionar.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView"Portal de arpejo:Arpeggio gate:InstrumentFunctionArpeggioView&Extenso do arpejo:Arpeggio range:InstrumentFunctionArpeggioView Tempo de arpejo:Arpeggio time:InstrumentFunctionArpeggioViewAcorde:Chord:InstrumentFunctionArpeggioViewDireo: Direction:InstrumentFunctionArpeggioView PORTALGATEInstrumentFunctionArpeggioView Modo:Mode:InstrumentFunctionArpeggioViewEXTENSORANGEInstrumentFunctionArpeggioView TEMPOTIMEInstrumentFunctionArpeggioViewPUse este boto para ajustar o portal de arpejo. O Portal de arpejo especifica o quanto deve ser tocado o arpejo. Isto permite que voc faa arpejos stacatos bem legais.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewUse este boto para escolher a extenso do arpejo em oitavas. O arpejo selecionado ser tocado dentro do nmero de oitavas especificado.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioViewUse este boto para ajustar o tempo de arpejo em milissegundos. O tempo do arpejar especifica qual longo cada nota do arpejo ser tocada.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioViewmsmsInstrumentFunctionArpeggioViewoitava(s) octave(s)InstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking 11(b9)11b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking 13(#9)13#9InstrumentFunctionNoteStacking13(b5, b9)13b5b9InstrumentFunctionNoteStacking 13(b9)13b9InstrumentFunctionNoteStacking8x {5?}5InstrumentFunctionNoteStacking6InstrumentFunctionNoteStacking6(9)6add9InstrumentFunctionNoteStacking6sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking 7(#11)7#11InstrumentFunctionNoteStacking 7(#5)7#5InstrumentFunctionNoteStacking7(#5, #9)7#5#9InstrumentFunctionNoteStacking7(#5, b9)7#5b9InstrumentFunctionNoteStacking 7(#9)7#9InstrumentFunctionNoteStacking 7(11)7add11InstrumentFunctionNoteStacking 7(13)7add13InstrumentFunctionNoteStacking 7(b5)7b5InstrumentFunctionNoteStacking7(b5, b9)7b5b9InstrumentFunctionNoteStacking 7(b9)7b9InstrumentFunctionNoteStacking 7 sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking(9, #11)9#11InstrumentFunctionNoteStacking(9, #5)9#5InstrumentFunctionNoteStacking(b9, 13)9b13InstrumentFunctionNoteStacking(9, b5)9b5InstrumentFunctionNoteStacking 9 sus49sus4InstrumentFunctionNoteStacking ElioAeolianInstrumentFunctionNoteStacking rabeArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStacking$Extenso do acorde Chord rangeInstrumentFunctionNoteStackingTipo de acorde Chord typeInstrumentFunctionNoteStackingAcordesChordsInstrumentFunctionNoteStackingDiminuta DiminishedInstrumentFunctionNoteStackingBebop dominanteDominant bebopInstrumentFunctionNoteStacking DrioDorianInstrumentFunctionNoteStackingEnigmtica EnigmaticInstrumentFunctionNoteStackingMenor HarmnicaHarmonic minorInstrumentFunctionNoteStackingHngara menorHungarian minorInstrumentFunctionNoteStackingInsen Japonesa Jap in senInstrumentFunctionNoteStacking LcrioLocrianInstrumentFunctionNoteStacking LdioLydianInstrumentFunctionNoteStackingAcorde de 11Maj11InstrumentFunctionNoteStacking13MMaj13InstrumentFunctionNoteStacking7MMaj7InstrumentFunctionNoteStacking7M(#11)Maj7#11InstrumentFunctionNoteStacking 7M(#5)Maj7#5InstrumentFunctionNoteStacking 7M(13) Maj7add13InstrumentFunctionNoteStacking 7M(b5)Maj7b5InstrumentFunctionNoteStacking9MMaj9InstrumentFunctionNoteStacking9M(#11)Maj9#11InstrumentFunctionNoteStacking 9M(#5)Maj9#5InstrumentFunctionNoteStacking9M sus4Maj9sus4InstrumentFunctionNoteStackingMaior b5Majb5InstrumentFunctionNoteStacking MaiorMajorInstrumentFunctionNoteStackingBebop maior Major bebopInstrumentFunctionNoteStacking"Pentatnica maiorMajor pentatonicInstrumentFunctionNoteStackingMenor Meldica Melodic minorInstrumentFunctionNoteStacking MenorMinorInstrumentFunctionNoteStacking"Pentatnica menorMinor pentatonicInstrumentFunctionNoteStackingMixoldio MixolydianInstrumentFunctionNoteStackingNapolitana NeopolitanInstrumentFunctionNoteStacking"Neopolitana menorNeopolitan minorInstrumentFunctionNoteStacking Frgio PhrygolydianInstrumentFunctionNoteStackingTons inteiros Whole toneInstrumentFunctionNoteStacking(9)add9InstrumentFunctionNoteStackingaumaugInstrumentFunctionNoteStackingaum sus4augsus4InstrumentFunctionNoteStackingm (11M)m-Maj11InstrumentFunctionNoteStackingm (13M)m-Maj13InstrumentFunctionNoteStackingm-7Mm-Maj7InstrumentFunctionNoteStackingm-7M(11) m-Maj7add11InstrumentFunctionNoteStackingm-7M(13) m-Maj7add13InstrumentFunctionNoteStacking m(11)m11InstrumentFunctionNoteStacking m(13)m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6(9)m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStacking m7(11)m7add11InstrumentFunctionNoteStacking m7(13)m7add13InstrumentFunctionNoteStacking m7(b5)m7b5InstrumentFunctionNoteStacking m7(b9)m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm(9,7M)m9-Maj7InstrumentFunctionNoteStackingm(9, b5)m9b5InstrumentFunctionNoteStackingm(9)madd9InstrumentFunctionNoteStackingmenor b5minb5InstrumentFunctionNoteStacking menorminorInstrumentFunctionNoteStacking oitavaoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStacking tradetriInstrumentFunctionNoteStacking&Extenso do acorde: Chord range:"InstrumentFunctionNoteStackingViewAcorde:Chord:"InstrumentFunctionNoteStackingViewEXTENSORANGE"InstrumentFunctionNoteStackingViewEMPILHAMENTOSTACKING"InstrumentFunctionNoteStackingViewUse este boto para definir a extenso do acorde em oitavas. O acorde selecionado ser tocado no nmero de oitavas especificado.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingViewoitava(s) octave(s)"InstrumentFunctionNoteStackingView CANALCHANNELInstrumentMidiIOView,HABILITAR ENTRADA MIDIENABLE MIDI INPUTInstrumentMidiIOView(HABILITAR SADA MIDIENABLE MIDI OUTPUTInstrumentMidiIOView\Dispositivos MIDI para receber eventos MIDI de(MIDI devices to receive MIDI events fromInstrumentMidiIOView^Dispositivos MIDI para mandar eventos MIDI para#MIDI devices to send MIDI events toInstrumentMidiIOViewNOTANOTEInstrumentMidiIOViewPROGRAMAPROGRAMInstrumentMidiIOViewINTENSIDADEVELOCITYInstrumentMidiIOView2x Passa Baixa 2x LowPassInstrumentSoundShapingPassa todasAllpassInstrumentSoundShapingPassa Banda csg BandPass csgInstrumentSoundShaping Passa Banda czpg BandPass czpgInstrumentSoundShaping CORTECUTOFFInstrumentSoundShaping&Frequncia de corteCutoff frequencyInstrumentSoundShapingEnvelopes/LFOsEnvelopes/LFOsInstrumentSoundShapingTipo de filtro Filter typeInstrumentSoundShapingPassa AltaHiPassInstrumentSoundShapingPassa BaixaLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShapingValeNotchInstrumentSoundShapingQ/Ressonncia Q/ResonanceInstrumentSoundShaping$RC PassaBanda 12dBRC BandPass 12dBInstrumentSoundShaping$RC PassaBanda 24dBRC BandPass 24dBInstrumentSoundShaping"RC PassaAlta 12dBRC HighPass 12dBInstrumentSoundShaping"RC PassaAlta 24dBRC HighPass 24dBInstrumentSoundShaping$RC PassaBaixa 12dBRC LowPass 12dBInstrumentSoundShaping$RC PassaBaixa 24dBRC LowPass 24dBInstrumentSoundShapingRESSRESOInstrumentSoundShapingRessonncia ResonanceInstrumentSoundShaping VOLUMEVOLUMEInstrumentSoundShaping0Filtro de Formante VocalVocal Formant FilterInstrumentSoundShaping VolumeVolumeInstrumentSoundShaping FILTROFILTERInstrumentSoundShapingViewFREQFREQInstrumentSoundShapingView@Aqui voc pode selecionar o filtro embutido que voc precisar para sua pista de instrumento. Filtros so muito importantes para mudar as caractersticas do som.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewHzHzInstrumentSoundShapingViewRESSRESOInstrumentSoundShapingViewRessonncia: Resonance:InstrumentSoundShapingView OBJETOTARGETInstrumentSoundShapingViewEstas abas contm envelopes. Eles so muito importantes para modificar o som sendo especialmente teis toda vez que voc precisar fazer uma sntese subtrativa. Por exemplo, se voc tem um envelope de volume, voc pode fazer com que o volume do som varie de forma especfica. Se voc quiser criar um instrumento virtual onde seu som tem fade de entrada e sada bem suaves (fade no nosso caso o aumento ou diminuio de volume no comeo ou fim de um evento sonoro), isto poder ser feito colocanto tempos de ataque e relaxamento longos. Outros exemplos seriam fazer um envelope para o panormico (som no alto-falante esquerdo ou no direito), para frequncia de corte para o filtro que est sendo usado e por a vai... Apenas pense sobre isso! Voc consegue fazer muitos sons legais apenas com uma onda dente-de-serra e alguns envelopes...!_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingViewFUse este boto para modificar o Q/Ressonncia para o filtro selecionado. o Q/Ressonncia diz o quanto ser filtrado das frequncias prximas frequncia de corte.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingViewUse este boto para modificar a frequncia de corte do filtro selecionado. A frequncia de corte especifica a frequncia na qual o sinal vai ser filtrado. Por exemplo, um filtro Passa Baixa filtra todas as frequncias que estiverem depois da frequncia de corte. Um filtro PassaAlta filtra todas as frequncias que estiverem antes da frequncia de corte, e por a vai...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingView(frequncia de corte:cutoff frequency:InstrumentSoundShapingViewNota base Base noteInstrumentTrack.Pr configurao padroDefault presetInstrumentTrack Canal de Efeitos FX channelInstrumentTrackPanormicoPanningInstrumentTrack AlturaPitchInstrumentTrackExtenso Pitch rangeInstrumentTrack VolumeVolumeInstrumentTracktCom este boto voc pode ajustar o volume do canal aberto.Pressionando este boto voc pode mostrar ou esconder o Editor de Bases. No Editor de Bases voc pode criar as batidas e a linha de baixo para sua base adicionando ou removendo canais, copiando e colando sequncias de batidas e/ou sequncias de linha de baixo, ou o que mais voc quiser.By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. MainWindowVPressionando este boto voc pode mostrar ou esconder o Editor de Arranjo. Com a ajuda do Editor de Arranjo voc pode editar os trechos da sua msica especificando quando eles sero tocados. Voc tambm pode mover amostras (ex. amostras ou loops de rap ou funk) diretamente para o Editor de Arranjo.By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. MainWindowClique aqui para mostrar ou esconder o Editor de Automao. Com ele voc pode editar os valores dinmicos de automao facilmente.Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. MainWindowClique aqui para mostrar ou esconder o Mixer de Efeitos. O Mixer de Efeitos uma poderosa ferramenta para gerenciar os efeitos utilizados na sua msica. Voc pode inserir efeitos em diferentes canais de efeito.Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. MainWindowClique aqui para mostrar ou esconder o Editor de Notas MIDI. Com ele voc pode editar melodias facilmente.pClick here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. MainWindow Clique aqui para mostrar ou esconder a janela com comentrios do projeto. Nela voc pode escrever comentrios e observaes sobre o seu projeto.hClick here to show or hide the project notes window. In this window you can put down your project notes. MainWindow.Arquivo de configuraoConfiguration file MainWindowXO arquivo de configurao no pode ser salvoCould not save config-file MainWindowO arquivo de configurao %1 no pode ser salvo. Provavelmente voc6e no tem permisso de escrita para este arquivo. Por favor certifique-se que voc tem permisso de escrita para este arquivo e tente novamente.Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. MainWindow$Criar novo projetoCreate new project MainWindowPCriar novo projeto a partir de um modelo Create new project from template MainWindowAtualmente no h ajuda disponvel no LMMS. Por favor visite http://lmms.sf.net/wiki para ter acesso a mais infromaes sobre LMMS.lCurrently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. MainWindow*Re&nderizar pistas...E&xport tracks... MainWindow&Renderizar... E&xport... MainWindowvErro ao analisar arquivo de configurao na linha %1:%2: %38Error while parsing configuration file at line %1:%2: %3 MainWindow,Exportar projeto atualExport current project MainWindow AjudaHelp MainWindow(Ajuda no disponvelHelp not available MainWindowImportar... Import... MainWindowParece que a ltima sesso no foi encerrada corretamente. Voc quer recuperar o projeto da ltima sesso?hIt looks like the last session did not end properly. Do you want to recover the project of this session? MainWindowLMMS %1LMMS %1 MainWindow&LMMS (*.mmp *.mmpz)LMMS (*.mmp *.mmpz) MainWindowMeu computador My computer MainWindowMinha pastaMy home MainWindow*Minhas pr definies My presets MainWindowMeus projetos My projects MainWindowMinhas amostras My samples MainWindowAjuda Online Online help MainWindow.Abrir projeto existenteOpen existing project MainWindowAbrir projeto Open project MainWindow"Projeto no salvoProject not saved MainWindow,Recuperao de projetoProject recovery MainWindow8Projetos usados recentementeRecently opened project MainWindow8Arquivos usados recentementeRecently opened projects MainWindowDiretrio raizRoot directory MainWindowSalvar &como... Save &As... MainWindow0Salvar como nova &versoSave as new &version MainWindow(Salvar projeto atualSave current project MainWindowSalvar projeto Save project MainWindow OpesSettings MainWindowHMostrar/esconder Editor de AutomaoShow/hide Automation Editor MainWindow@Mostrar/esconder Editor de BasesShow/hide Beat+Bassline Editor MainWindowBMostrar/esconder Mixer de EfeitosShow/hide FX Mixer MainWindowJMostrar/esconder Editor de Notas MIDIShow/hide Piano-Roll MainWindowDMostrar/esconder Editor de ArranjoShow/hide Song-Editor MainWindowVMostrar/esconder a Estante de ControladorerShow/hide controller rack MainWindowNMostrar/esconder comentrios do projetoShow/hide project notes MainWindowA pasta de trabalho do LMMS %1 no existe. Posso cri-la? Voc pode mud-la depois indo em Editar -> Opes.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowhO projeto atual foi modificado. Quer salv-lo agora?OThe current project was modified since last saving. Do you want to save it now? MainWindowSem_nomeUntitled MainWindowVerso %1 Version %1 MainWindowO que isso? What's this? MainWindow"Pasta de trabalhoWorking directory MainWindow&Denominador MtricoMeter Denominator MeterDialog"Numerador MtricoMeter Numerator MeterDialogCOMPASSOTIME SIG MeterDialogDenominador Denominator MeterModelNumerador Numerator MeterModelDISPOSITIVODEVICEMidiAlsaRaw::setupWidgetDISPOSITIVODEVICEMidiAlsaSeq::setupWidget Controlador MIDIMIDI ControllerMidiController2controlador-midi-sem-nomeunnamed_midi_controllerMidiController.Configurao incompletaSetup incomplete MidiImportVoc no compilou o LMMS com suporte a SoundFont2 player, que usado para adicionar sons por padro a arquivos MIDI importados. Desta maneira nenhum som ser executado depois de importar arquivos MIDI.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImport.Voc no configurou um banco de sons (soundfont) padro na caixa de dilogo (Editar->Opes). Desta maneira nenhum som ser tocado depois de importar um arquivo MIDI. Voc pode baixar o banco de sons General MIDI soundfont dentro da caixa de dilogo de opes e tentar novamente.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImportDISPOSITIVODEVICEMidiOss::setupWidget6Intensidade fixa de entradaFixed input velocityMidiPort$Nota fixa na sadaFixed output noteMidiPort2Intensidade fixa de sadaFixed output velocityMidiPort Canal de entrada Input channelMidiPort,Entrada do controladorInput controllerMidiPort,Sada do programa MIDIOutput MIDI programMidiPortCanal de sadaOutput channelMidiPort(Sada do controladorOutput controllerMidiPort(Receber eventos MIDIReceive MIDI-eventsMidiPort&Enviar eventos MIDISend MIDI-eventsMidiPortVolume Final Master volume NesInstrument(Tipo de modulao %1Modulation type %1OscillatorObject&Ajuste bruto Osc %1Osc %1 coarse detuningOscillatorObject6Ajuste fino esquerdo Osc %1Osc %1 fine detuning leftOscillatorObject,Ajuste fino direito %1Osc %1 fine detuning rightOscillatorObject"Panormico Osc %1Osc %1 panningOscillatorObject$Defasamento Osc %1Osc %1 phase-offsetOscillatorObject:Ajuste de fase estreo Osc %1Osc %1 stereo phase-detuningOscillatorObjectVolume Osc %1 Osc %1 volumeOscillatorObject,Formato de onda Osc %1Osc %1 wave shapeOscillatorObject(Forma de Onda Osc %1Osc %1 waveformOscillatorObjectClique aqui para abrir outro aquivo com patch. Configuraes de Loop e Afinao no sero perdidas.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewAqui voc pode ligar ou desligar o modo de Loop. Se ligado, PartMan ir utilizar a informao disponvel no arquivo para loop.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewAqui voc pode ligar ou desligar o Modo de afinao. Se ligado, PatMan ir afinar a sua amostra de acordo com a frequncia da nota.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanViewLoopLoop PatmanViewModo de loop Loop mode PatmanView4Nenhum arquivo selecionadoNo file selected PatmanView"Abrir outro patchOpen other patch PatmanView,Abrir arquivo de patchOpen patch file PatmanView2Arquivos de Patch (*.pat)Patch-Files (*.pat) PatmanView AfinarTune PatmanView Modo de afinao Tune mode PatmanViewAdicionar passo Add steps PatternViewMudar nome Change name PatternView*Limpar todas as notasClear all notes PatternView:Abrir no Editor de Notas MIDIOpen in piano-roll PatternViewRemover passo Remove steps PatternViewRestaurar nome Reset name PatternViewduplo clique para abrir esta sequncia no Editor de notas MDll use a roda do mouse para midificar o volume de cada passoWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewDevido a um problema na verso mais antiga do LMMS, os controladores de pico no pode se conectar corretamente. Certifique-se de que os controladores de pico esto conectados corretamente e volte a salvar este arquivo. Desculpe por qualquer inconveniente causado.Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.PeakController(Controlador de PicosPeak ControllerPeakController@Problema no Controlador de PicosPeak Controller BugPeakController$Controlador de LFOLFO ControllerPeakControllerDialogPicoPEAKPeakControllerDialogQNTDAMNT!PeakControllerEffectControlDialogATQUATCK!PeakControllerEffectControlDialog8Multiplicador de quantidade:Amount Multiplicator:!PeakControllerEffectControlDialogAtaque:Attack:!PeakControllerEffectControlDialogBASEBASE!PeakControllerEffectControlDialog&Quantidade de base: Base amount:!PeakControllerEffectControlDialogDCAIDCAY!PeakControllerEffectControlDialogMULTMULT!PeakControllerEffectControlDialog0Quantidade de modulao:Modulation amount:!PeakControllerEffectControlDialogRelaxamento:Release:!PeakControllerEffectControlDialogValor Abs Abs ValuePeakControllerEffectControls6Multiplicador de quantidadeAmount MultiplicatorPeakControllerEffectControls AtaqueAttackPeakControllerEffectControlsValor base Base valuePeakControllerEffectControls.Quantidade de modulaoModulation amountPeakControllerEffectControls"Deixar sada muda Mute outputPeakControllerEffectControlsRelaxamentoReleasePeakControllerEffectControlsClique aqui e a automao para afinao ser ativada. Nela voc pode clicar na nota para abrir sua automao de afinao. Voc pode utilizar esta ferramenta para fazer glissandos de uma altura para outra.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollClique aqui e o lpis ser ativado. O lpis serve para adicionar ou mover valores simples. Ele estar ativado previamente e ser utilizado a maior parte do tempo. Voc pode usar 'Shift+D' no teclado para ativar o lpis.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRoll"Clique aqui e a borracha ser ativada. A borracha serve para apagar valores simples. Voc pode usar 'Shif+E' no teclado para utilizar a borracha.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRollRClique aqui e modo de seleo ser ativado. A borracha serve para apagar valores simples. Voc pode usar 'Shif+E' no teclado para utilizar a borracha.A borracha serve para apagar valores simples. Voc pode usar 'Shif+E' no teclado para utilizar a borracha. Este modo torna possvel a seleo de notas. Alternativamente voc pode pressionar Crtl enquanto estiver usando o lpis para utilizar o modo de seleo temporariamente.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRollClique aqui e as notas na rea de transferncia sero coladas no primeira grade visvel.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRollNClique aqui e as notas selecionadas sero copiadas para a rea de transferncia. Voc pode col-las em qualquer lugar de qualquer sequncia clicando no boto de colar.Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollXClique aqui e as notas selecionadas sero cortadas para dentro da rea de transferncia. Voc pode col-las em qualquer lugar de qualquer sequncia usando o boto de colar.Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRollClique aqui para tocar a sequncia atual. Isto til enquanto se edita. A sequncia ir entrar em loop automaticamente quando chegar ao fim.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRoll$Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que voc tocar sero escritas nesta sequncia e voc ainda pode edit-las depois.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRollClique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que voc tocar sero escritas nesta sequncia e voc ainda pode ouvir a msica feita no editor de arranjo ou no editor de batida tocando atrs.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRollnClique aqui para parar a reproduo da sequncia atual./Click here to stop playback of current pattern. PianoRollDCopiar notas selecionadas (Ctrl+C)Copy selected notes (Ctrl+C) PianoRollHRecortar notas selecionadas (Ctrl+X)Cut selected notes (Ctrl+X) PianoRollBAutomao para Afinao (Shift+T)Detune mode (Shift+T) PianoRollLpis (Shift+D)Draw mode (Shift+D) PianoRoll$Borracha (Shift+E)Erase mode (Shift+E) PianoRollltima nota Last note PianoRoll*Marcar o acorde atualMark current chord PianoRoll*Marcar a escala atualMark current scale PianoRoll@Marcar/desmarcar o semitom atualMark/unmark current semitone PianoRollSem acordeNo chord PianoRollSem escalaNo scale PianoRoll$Panormico da nota Note Panning PianoRollVolume da nota Note Volume PianoRollTravar nota Note lock PianoRollZColar notas da rea de transferncia (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRoll2Editor de Notas MIDI - %1Piano-Roll - %1 PianoRollPEditor de Notas MIDI - nenhuma sequnciaPiano-Roll - no pattern PianoRollJTocar/pausar sequncia atual (Espao)"Play/pause current pattern (Space) PianoRoll`Por favor entre com um novo valor entre %1 e %2:+Please enter a new value between %1 and %2: PianoRollxPor favor abra um a sequncia com um duplo clique sobre ela!/Please open a pattern by double-clicking on it! PianoRollpGravar notas do dispositivo MIDI ou Editor de Notas MIDI+Record notes from MIDI-device/channel-piano PianoRollGravar notas a partir do dispositivo MIDI ou do Editor de Notas MIDI enquanto toca o Arranjo ou uma BaseJRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll2Modo de Seleo (Shift+S)Select mode (Shift+S) PianoRollRParar de tocar a sequncia atual (Espao)'Stop playing of current pattern (Space) PianoRollDesmarcar tudo Unmark all PianoRollNota base Base note PianoView.Erro ao carregar pluginError while loading pluginPlugin@Falha ao carregar o plugin "%1"!Failed to load plugin "%1"!Plugin*Plugin no encontradoPlugin not foundPlugindO plugin "%1" no pode ser carregado! Motivo: "%2"AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin<Arquivo OGG compactado (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer&Arquivo WAV (*.wav)WAV-File (*.wav)ProjectRenderer&Canais de Entrada:  Channels In: QWidget"Canais de Sada: Channels Out: QWidget Copyright: QWidgetArquivo: File: QWidget(Com Local Quebrado: In Place Broken: QWidgetMarcador:Maker: QWidget Nome:Name: QWidgetNoNoQWidgetZCapacitado para Processamento em Tempo Real: Real Time Capable: QWidgetHRequer Processamento em Tempo Real: Requires Real Time: QWidgetSimYesQWidget8Arquivos AIFF (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBuffer$Arquivos AU (*.au)AU-Files (*.au) SampleBuffer2Arquivos DrumSynth (*.ds)DrumSynth-Files (*.ds) SampleBuffer,Arquivos FLAC (*.flac)FLAC-Files (*.flac) SampleBuffer(Arquivos OGG (*.ogg)OGG-Files (*.ogg) SampleBuffer,Abrir arquivo de udioOpen audio file SampleBuffer(Arquivos RAW (*.raw)RAW-Files (*.raw) SampleBuffer,Arquivos SPEEX (*.spx)SPEEX-Files (*.spx) SampleBuffer(Arquivos VOC (*.voc)VOC-Files (*.voc) SampleBuffer*Arquivos Wave (*.wav)Wave-Files (*.wav) SampleBuffer CopiarCopy SampleTCOViewRecortarCut SampleTCOView@Excluir (boto do meio do mouse)Delete (middle mousebutton) SampleTCOViewJMudo/No Mudo (<Ctrl> + middle click)#Mute/unmute ( + middle click) SampleTCOView ColarPaste SampleTCOView.Armar/desarmar gravaoSet/clear record SampleTCOViewHDuplo clique para selecionar amostradouble-click to select sample SampleTCOViewudio Amostras Sample track SampleTrack VolumeVolume SampleTrack Volume do canal:Channel volume:SampleTrackViewVolume da pista Track volumeSampleTrackViewVOLVOLSampleTrackView8Adicionar pista de automaoAdd automation-track SongEditorAdicionar BaseAdd beat/bassline SongEditor4Adicionar pista de amostraAdd sample-track SongEditorClique aqui se voc quer tocar toda a msica. A msica iniciar no posio do marcador (verde). Voc pode move-lo enquanto estiver tocando.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditorClique aqui se voc quer parar de tocar a msica. O marcador de posio (verde), ser ajustado para o incio da msica.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditorNo foi possvel abrir %1 para escrita. Provavelmente voc no tem permisso para escrita deste arquivo. Por favor, certifique-se de ter permisso para escrever nesse arquivo e tente novamente.Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditor<No possvel abrir o arquivoCould not open file SongEditor~No foi possvel abrir o arquivo %1. Provavelmente voc no tem permisso para ler este arquivo. Por favor certifique-se que voc tenha permisso de leitura para o arquivo e tente novamente.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor>No possivel salvar o arquivoCould not write file SongEditor Lpis Draw mode SongEditorBModo de Edio (seleciona e move)Edit mode (select and move) SongEditorErro no arquivo Error in file SongEditor,Modo de alta qualidadeHigh quality mode SongEditorAltura Final Master pitch SongEditorVolume Final Master volume SongEditor*Tocar msica (Espao)Play song (Space) SongEditorNGravar amostras do Dispositivo de udio Record samples from Audio-device SongEditorGravar amostras a partir do dispositivo de udio enquanto reproduz o arranjo ou base?Record samples from Audio-device while playing song or BB track SongEditor"Editor de Arranjo Song-Editor SongEditor*Parar msica (Espao)Stop song (Space) SongEditorANDAMENTO/BPM TEMPO/BPM SongEditorAndamentoTempo SongEditorO arquivo %1 parece conter erros e por isso no pode ser carregado.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditoro andamento de uma msica especificado em batidas por minuto (BPM). Se voc6e precisar mudar o andamento de sua msica, mude esse valor. Todo compasso tem 4 batidas, logo o andamento em BPM especificara a quantidade de batidas dividida por 4.-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor$Valor: %1 semitonsValue: %1 semitones SongEditorValor: %1% Value: %1% SongEditoraltura final master pitch SongEditorvolume final master volume SongEditor&andamento da msica tempo of song SongEditor Linear no eixo Y Linear Y axisSpectrumAnalyzerControlDialogEspectro linearLinear spectrumSpectrumAnalyzerControlDialogModo de Canal Channel modeSpectrumAnalyzerControls Linear no eixo Y Linear Y axisSpectrumAnalyzerControlsEspectro linearLinear spectrumSpectrumAnalyzerControls Aj&uda&Help TempoSyncKnob16 nota 16th note TempoSyncKnob32 nota 32nd note TempoSyncKnob8 nota8th note TempoSyncKnobPersonalizado Custom  TempoSyncKnob Personalizado... Custom... TempoSyncKnobOito batidas Eight beats TempoSyncKnobMeia nota Half note TempoSyncKnobSem SincroniaNo Sync TempoSyncKnob1/4 de nota Quarter note TempoSyncKnob6Sincronizado com a 16 NotaSynced to 16th Note TempoSyncKnob6Sincronizado com a 32 NotaSynced to 32nd Note TempoSyncKnob4Sincronizado com a 8 NotaSynced to 8th Note TempoSyncKnob:Sincronizado com Oito BatidasSynced to Eight Beats TempoSyncKnob4Sincronizado com Meia NotaSynced to Half Note TempoSyncKnob8Sincronizado com 1/4 de NotaSynced to Quarter Note TempoSyncKnob>Sincronizado com a Nota InteiraSynced to Whole Note TempoSyncKnobSincronia Tempo Sync TempoSyncKnobNota inteira Whole note TempoSyncKnobLclique para mudar as unidades de tempoclick to change time unitsTimeDisplayWidgetCancelarCancelTrackContainer>No foi possvel encontrar um filtro para inportar o arquivo %1. Voc poderia converter este arquivo em um formato suportado pelo LMMS usando outro aplicativo.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainerBno foi possivel importar arquivoCouldn't import fileTrackContainer<No possvel abrir o arquivoCouldn't open fileTrackContainer:No foi possvel abrir o arquivo %1 para leitura. Por favor certifique-se que voc tem permisses de leitura para o arquivo e para a pasta e tente novamente!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer2Importando arquivo FLP...Importing FLP-file...TrackContainer4Importando arquivo MIDI...Importing MIDI-file...TrackContainer*Carregando projeto...Loading project...TrackContainer(Por favor aguarde...Please wait...TrackContainerHMisture as sadas do oscilador 1 e 2Mix output of oscillator 1 & 2TripleOscillatorViewHMisture as sadas do oscilador 2 e 3Mix output of oscillator 2 & 3TripleOscillatorView(Ajuste bruto Osc %1:Osc %1 coarse detuning:TripleOscillatorView8Ajuste fino esquerdo Osc %1:Osc %1 fine detuning left:TripleOscillatorView.Ajuste fino direito %1:Osc %1 fine detuning right:TripleOscillatorView$Panormico Osc %1:Osc %1 panning:TripleOscillatorView&Defasamento Osc %1:Osc %1 phase-offset:TripleOscillatorView6Defasamento estreo Osc %1:Osc %1 stereo phase-detuning:TripleOscillatorViewVolume Osc %1:Osc %1 volume:TripleOscillatorViewTSincronize o oscilador 1 com o oscilador 2*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewTSincronize o oscilador 2 com o oscilador 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorViewhUse uma onda dente de serra moog no oscilador atual.0Use a moog-like saw-wave for current oscillator.TripleOscillatorView^Use uma onda dente de serra no oscilador atual.&Use a saw-wave for current oscillator.TripleOscillatorViewRUse uma onda senoidal no oscilador atual.'Use a sine-wave for current oscillator.TripleOscillatorViewRUse uma onda quadrada no oscilador atual.)Use a square-wave for current oscillator.TripleOscillatorViewVUse uma onda triangular no oscilador atual.+Use a triangle-wave for current oscillator.TripleOscillatorView~Use uma forma de onda definida pelo usurio no oscilador atual.3Use a user-defined waveform for current oscillator.TripleOscillatorViewUse o modulador de amplitude para modular o oscilador 2 com o oscilador 1FUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUse o modulador de amplitude para modular o oscilador 3 com o oscilador 2FUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewXUse uma onda exponencial no oscilador atual./Use an exponential wave for current oscillator.TripleOscillatorViewUse o modulador de frequncia para modular o oscilador 2 com o oscilador 1FUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUse o modulador de frequncia para modular o oscilador 3 com o oscilador 2FUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewUse o modulador de fase para modular o oscilador 2 com o oscilador 1BUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewUse o modulador de fase para modular o oscilador 3 com o oscilador 2BUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewHUse rudo branco no oscilador atual.'Use white-noise for current oscillator.TripleOscillatorView~Com este boto voc pode modificar Ajuste bruto do oscilador %1. Voc pode descer o tom do oscilador 12 semitons (1 oitava) para cima e para baixo. Isto til para criar sons com um acorde.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewtCom este boto voc pode manipular o Ajuste fino do oscilador %1 para o canal esquerdo. O Ajuste fino varia entre -100 centsimos e +100 centsimos. Isto til para criar sons 'gordos'.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewrCom este boto voc pode modificar o ajuste fino do oscilador %1 para o canal direito. O ajuste fino varia entre -100 centsimos e +100 centsimos. Isto til para criar sons 'gordos'.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorView$Com este boto voc pode ajustar o panning do oscilador %1. O valor -100 significa 100% esquerda e 100 move a saida do oscilador para a direita.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorViewRCom este boto voc pode ajustar o defasamento do oscilador %1. Isso significa que voc pode move o ponto de uma oscilao onde o oscilador comea oscilar. Por exemplo, se voc tem uma onda-seno e tem uma compensao de fase de 180 graus, a onda vai primeiro descer. o mesmo com onda-quadrada.)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorViewCom este boto voc pode ajustar o defasamento estreo do oscilador %1. O defasador estreo especifica o tamanho da diferena entre a defasagem entre os canais esquerdo e direito. Isto muito bom para abrir o som.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorViewCom este boto voc pode ajustar o volume do oscilador %1. Quando voc seleciona o valor 0, o oscilador desligado. Com outros valores voc vai escutar o oscilador to alto quanto voc o ajustar.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorViewcentsimoscentsTripleOscillatorView grausdegreesTripleOscillatorViewsemitons semitonesTripleOscillatorViewdColaboradores ordenados por ordem de contribuio:*Contributors ordered by number of commits:UiEnvolvidosInvolvedUi8Decrementar nmero da versoDecrement version numberVersionedSaveDialog8Incrementar nmero da versoIncrement version numberVersionedSaveDialog4 - Controle de plugins VST - VST plugin controlVestigeInstrumentViewClique aqui para selecionar a pr definio que est sendo carregada no VST.>Click here to select presets that are currently loaded in VST.VestigeInstrumentViewClique aqui para mostrar ou esconder a interface grfica do usurio (GUI) do plugin VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewClique aqui se voc precisa controlar o plugin VST por outro host.8Click here, if you want to control VST-plugin from host.VestigeInstrumentViewClique aqui se voc precisa abrir outro tipo de arquivo de pr definio de plugin VST como: *.fxp, *.fxb.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VestigeInstrumentViewClique aqui se voc quer abrir outro plugin VST. clicando neste boto, voc ver uma caixa da seleo para escolher o arquivo.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentViewClique aqui se voc precisa salvar o programa de pr definio do plugin VST.BClick here, if you want to save current VST-plugin preset program.VestigeInstrumentViewClique aqui se voc precisar trocar para outro programa de pr definies de plugin VST.GClick here, if you want to switch to another VST-plugin preset program.VestigeInstrumentViewTControlar plugin VST a partir do host LMMS!Control VST-plugin from LMMS hostVestigeInstrumentView(Arquivos DLL (*.dll)DLL-files (*.dll)VestigeInstrumentView(Arquivos EXE (*.exe)EXE-files (*.exe)VestigeInstrumentViewPrximo (+)Next (+)VestigeInstrumentView6Nenhum plugin VST carregadoNo VST-plugin loadedVestigeInstrumentView Abrir plugin VSTOpen VST-pluginVestigeInstrumentViewBAbrir pr definio de plugin VSTOpen VST-plugin presetVestigeInstrumentView,Abrir outro plugin VSTOpen other VST-pluginVestigeInstrumentViewPr definioPresetVestigeInstrumentViewAnterior (-) Previous (-)VestigeInstrumentView(Salvar pr definio Save presetVestigeInstrumentView(Mostrar/esconder GUI Show/hide GUIVestigeInstrumentView.Desligar todas as notasTurn off all notesVestigeInstrumentViewporby VestigeInstrumentView0       
VstEffectControlDialogClique aqui para selecionar a pr definio que est sendo carregada no VST.>Click here to select presets that are currently loaded in VST.VstEffectControlDialogClique aqui se voc deseja controlar o plugin VST por outro host.8Click here, if you want to control VST-plugin from host.VstEffectControlDialogClique aqui se voc precisa abrir outro tipo de arquivo de pr definio de plugin VST como: *.fxp, *.fxb.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VstEffectControlDialogClique aqui se voc precisa salvar o programa de pr definio do plugin VST.BClick here, if you want to save current VST-plugin preset program.VstEffectControlDialogClique aqui se voc precisar trocar para outro programa de pr definies de plugin VST.GClick here, if you want to switch to another VST-plugin preset program.VstEffectControlDialogTControlar plugin VST a partir do host LMMS!Control VST-plugin from LMMS hostVstEffectControlDialogEfeito por:  Effect by: VstEffectControlDialogPrximo (+)Next (+)VstEffectControlDialogBAbrir pr definio de plugin VSTOpen VST-plugin presetVstEffectControlDialogAnterior (-) Previous (-)VstEffectControlDialog(Salvar pr definio Save presetVstEffectControlDialog Mostrar/esconder Show/hideVstEffectControlDialog" VstPlugin' VstPlugin.FXB VstPlugin.FXP VstPlugin.fxb VstPlugin.fxp VstPlugin: padro : default VstPlugin"Carregando pluginLoading plugin VstPlugin&Abrir pr definio Open Preset VstPlugin(Salvar pr definio Save Preset VstPluginRPr definio de Plugin VST (*.fxp *.fxb)Vst Plugin Preset (*.fxp *.fxb) VstPluginDesenhe sua prpria forma de onda aqui utilizando seu mouse no grfico.ADraw your own waveform here by dragging your mouse on this graph. WatsynViewOnda senoidal Sine wave WatsynViewOnda quadrada Square wave WatsynViewOnda triangular Triangle wave WatsynView Largura da Banda BandwidthZynAddSubFxInstrumentGanho da FMFM GainZynAddSubFxInstrument(Frequncia do FiltroFilter FrequencyZynAddSubFxInstrument*Ressonncia do FiltroFilter ResonanceZynAddSubFxInstrumentTPrximo evento de mudana de controle MIDI"Forward MIDI Control Change EventsZynAddSubFxInstrument PortamentoZynAddSubFxInstrument(Banda de RessonnciaResonance BandwidthZynAddSubFxInstrumentBFrequncia Central de RessonnciaResonance Center FrequencyZynAddSubFxInstrumentLBndBWZynAddSubFxView"Largura da Banda: Bandwidth:ZynAddSubFxViewClique aqui para mostrar ou esconder a interface do usurio (GUI) do ZynAddSubFX.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewGANHO FMFM GAINZynAddSubFxViewGanho da FM:FM Gain:ZynAddSubFxViewFREQZynAddSubFxView*Frequncia do Filtro:Filter Frequency:ZynAddSubFxView,Ressonncia do Filtro:Filter Resonance:ZynAddSubFxViewTPrximo evento de mudana de controle MIDIForward MIDI Control ChangesZynAddSubFxViewPORTZynAddSubFxView Portamento:ZynAddSubFxViewRESZynAddSubFxViewRES BndRES BWZynAddSubFxView RES FCRES CFZynAddSubFxView*Banda de Ressonncia:Resonance bandwidth:ZynAddSubFxViewDFrequncia Central de Ressonncia:Resonance center frequency:ZynAddSubFxViewMostrar GUIShow GUIZynAddSubFxViewAmplificarAmplifyaudioFileProcessorFim da amostra End of sampleaudioFileProcessorModo de loop Loop modeaudioFileProcessorAmostra reversaReverse sampleaudioFileProcessor"Incio da amostraStart of sampleaudioFileProcessorGaguejarStutteraudioFileProcessor8Adicionar pista de automaoAdd automation-trackbbEditorAdicionar baseAdd beat/basslinebbEditor Adicionar passos Add stepsbbEditorEditor de BasesBeat+Bassline EditorbbEditorClique aqui se voc quiser tocar a base atual. A base entra em loop automaticamente quando chega ao fim.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorHClique aqui para parar a base atual.4Click here to stop playing of current beat/bassline.bbEditorDTocar/pausar a base atual (Espao)(Play/pause current beat/bassline (Space)bbEditorRemover passos Remove stepsbbEditorNParar reproduo da base atual (Espao).Stop playback of current beat/bassline (Space)bbEditorMudar cor Change color bbTCOViewMudar nome Change name bbTCOView0Abrir no editor de BasesOpen in Beat+Bassline-Editor bbTCOViewRestaurar nome Reset name bbTCOViewBase %1Beat/Bassline %1bbTrackClone de %1 Clone of %1bbTrack$Tamanho de amostra Samplelength bitInvaderPClique aqui para usar uma onda senoidal.Click for a sine-wave.bitInvaderView\Clique aqui para usar uma onda dente de serra.Click here for a saw-wave.bitInvaderViewPClique aqui para usar uma onda quadrada.Click here for a square-wave.bitInvaderViewTClique aqui para usar uma onda triangular.Click here for a triangle-wave.bitInvaderViewjClique aqui para usar uma onda definida pelo usurio.$Click here for a user-defined shape.bitInvaderViewLClique aqui para usar um rudo branco.Click here for white-noise.bitInvaderViewTClique aqui para suavizar a forma de onda.Click here to smooth waveform.bitInvaderViewDesenhe sua prpria forma de onda aqui utilizando seu mouse no grfico.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderViewInterpolao InterpolationbitInvaderViewNormalizao NormalizebitInvaderView$Tamanho da Amostra Sample LengthbitInvaderView&Onda dente de serraSaw wavebitInvaderViewOnda senoidal Sine wavebitInvaderView SuaveSmoothbitInvaderViewOnda quadrada Square wavebitInvaderViewOnda triangular Triangle wavebitInvaderView4Onda definida pelo usurioUser defined wavebitInvaderViewRudo brancoWhite noise wavebitInvaderView<No possvel abrir o arquivoCould not open fileexportProjectDialogfNo possvel abrir o arquivo %1 para gravao. Por favor certifique-se que voc tem permisso para gravao no arquivo e se o arquivo se encontra no diretrio e tente novamente!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialogErroErrorexportProjectDialogErro ao determinar o dispositivo codificador de arquivo. Por favor tente um formato de sada diferente.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog0Exportar projeto para %1Export project to %1exportProjectDialog"Renderizando: %1%Rendering: %1%exportProjectDialog`Por favor entre com um novo valor entre %1 e %2:+Please enter a new value between %1 and %2:faderGrficoGraph graphModel Frequncia final End frequencykickerInstrument GanhoGainkickerInstrument RudoNoisekickerInstrument*Frequncia de partidaStart frequencykickerInstrument"Frequncia final:End frequency:kickerInstrumentView Ganho:Gain:kickerInstrumentView,Frequncia de partida:Start frequency:kickerInstrumentView Aj&uda&Helpknob`Por favor entre com um novo valor entre %1 e %2:+Please enter a new value between %1 and %2:knobpPor favor entre um novo valor entre -96.0 dBV e 6.0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob,Ferramentas de AnliseAnalysis ToolsladspaBrowserView&Efeitos DisponveisAvailable EffectsladspaBrowserViewSei l.. Don't knowladspaBrowserViewInstrumentos InstrumentsladspaBrowserView dEsta caixa de dilogo contm informaes de todos os plugins LADSPA do LMMS que esto disponveis localmente. Os plugins esto divididos em cinco categorias baseadas em uma interpretao do tipo de portas e nomes. Efeitos Disponveis so todos os que podem ser usados pelo LMMS. Para o LMMS usar um efeito, necessrio antes de tudo que ele seja um efeito, ou seja, que ele tenha tanto canais de entrada como tamm canais de sada. O LMMS identifica um canal de entrada como uma porta de informaes de udio com o nome de "entrada". Canais de sada so identificados como "sada". Alm disso o efeito deve ter o mesmo nmero de entradas e sadas, assim como ter capacidade de processamento em tempo real. Efeitos Indisponveis so aqueles que so identificados como efeitos mas, ou no tem o mesmo nmero de entradas e sadas, ou no so capazes de executar processamento em tempo real. Instrumentos so plugins com somente canais de sada identificados. Ferramentas de anlise so plugins com somente canais de entrada identificados. Sei l.. so plugins que nenhuma entrada ou sada foi identificada. Clicando duas vezes com o mouse em qualquer plugin, voc6e ter informaes sobre as portas.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView Tipo:Type:ladspaBrowserView*Efeitos IndisponveisUnavailable EffectsladspaBrowserViewDescrio DescriptionladspaDescriptionPluginsPluginsladspaDescription udioAudioladspaPortDialogControleControlladspaPortDialogDireo DirectionladspaPortDialogDecimalFloatladspaPortDialogEntradasInputladspaPortDialogInteiroIntegerladspaPortDialogLogartmico LogarithmicladspaPortDialog$Min < Padro < MxMin < Default < MaxladspaPortDialogNomeNameladspaPortDialog SadasOutputladspaPortDialog PortasPortsladspaPortDialogTaxaRateladspaPortDialog Dependente de SR SR DependentladspaPortDialogAlternadoToggledladspaPortDialogTipoTypeladspaPortDialogSimYesladspaPortDialogFiltro 24dB/oct24dB/oct Filter lb302Synth RealceAccent lb302Synth MortoDead lb302SynthDistoro Distortion lb302SynthGradualSlide lb302Synth$Decaimento gradual Slide Decay lb302Synth2VCF - Frequncia de corteVCF Cutoff Frequency lb302Synth8VCF - Decaimento do EnvelopeVCF Envelope Decay lb302Synth6VCF - Modulao do EnvelopeVCF Envelope Mod lb302Synth"VCF - Ressonncia VCF Resonance lb302SynthForma de ondaWaveform lb302SynthL303-es-que, 24dB/octave, filtro 3 pole&303-es-que, 24dB/octave, 3 pole filterlb302SynthViewPClique aqui para usar uma onda senoidal.Click for a sine-wave.lb302SynthViewRClique aqui para usar uma onda tipo moog. Click here for a moog-like wave.lb302SynthView\Clique aqui para usar uma onda dente de serra.Click here for a saw-wave.lb302SynthViewhClique aqui para usar uma onda quadrada arredondada.0Click here for a square-wave with a rounded end.lb302SynthViewPClique aqui para usar uma onda quadrada.Click here for a square-wave.lb302SynthViewTClique aqui para usar uma onda triangular.Click here for a triangle-wave.lb302SynthViewVClique aqui para usar uma onda exponencial.#Click here for an exponential wave.lb302SynthViewLClique aqui para usar um rudo branco.Click here for white-noise.lb302SynthViewFreq Corte: Cutoff Freq:lb302SynthViewDIST:lb302SynthViewDecaimento:Decay:lb302SynthViewMod Env:Env Mod:lb302SynthViewOnda Moog Moog wavelb302SynthViewRessonncia: Resonance:lb302SynthView2Onda quadrada arredondadaRounded square wavelb302SynthView&Onda dente de serraSaw wavelb302SynthViewOnda senoidal Sine wavelb302SynthView&Decaimento gradual: Slide Decay:lb302SynthViewOnda quadrada Square wavelb302SynthViewOnda triangular Triangle wavelb302SynthViewRudo brancoWhite noise wavelb302SynthViewFiltro 24dB/oct24dB/oct Filter lb303Synth RealceAccent lb303Synth MortoDead lb303SynthDistoro Distortion lb303SynthGradualSlide lb303Synth$Decaimento gradual Slide Decay lb303Synth2VCF - Frequncia de corteVCF Cutoff Frequency lb303Synth8VCF - Decaimento do EnvelopeVCF Envelope Decay lb303Synth6VCF - Modulao do EnvelopeVCF Envelope Mod lb303Synth"VCF - Ressonncia VCF Resonance lb303SynthForma de ondaWaveform lb303SynthL303-es-que, 24dB/octave, filtro 3 pole&303-es-que, 24dB/octave, 3 pole filterlb303SynthView CORTECUTlb303SynthViewFreq Corte: Cutoff Freq:lb303SynthViewDECDEClb303SynthViewDISTDISTlb303SynthViewDISTORO:DIST:lb303SynthViewDecaimento:Decay:lb303SynthViewMOD ENVENV MODlb303SynthViewMod Env:Env Mod:lb303SynthViewRESSRESlb303SynthViewRessonncia: Resonance:lb303SynthViewGRADUALSLIDElb303SynthView&Decaimento gradual: Slide Decay:lb303SynthViewONDAWAVElb303SynthView ONDA:WAVE:lb303SynthViewADSRADSRmalletsInstrumentAgogomalletsInstrumentBatidasBeatsmalletsInstrumentDe ArcoBowedmalletsInstrumentClumpmalletsInstrumentTransio CrossfademalletsInstrumentTaaGlassmalletsInstrumentDificuldadeHardnessmalletsInstrument$LFO - Profundidade LFO DepthmalletsInstrument LFO - Velocidade LFO SpeedmalletsInstrumentMarimbamalletsInstrument"Arquivos perdidos Missing filesmalletsInstrumentModulador ModulatormalletsInstrumentMovimentoMotionmalletsInstrumentPosioPositionmalletsInstrumentPressoPressuremalletsInstrument RessoResomalletsInstrumentVelocidadeSpeedmalletsInstrumentPropagaoSpreadmalletsInstrumentPercussa Mix Stick MixmalletsInstrument"Tigelas Tibetanas Tibetan BowlmalletsInstrumentSinos Tubulares Tubular BellsmalletsInstrumentBarra Afinada Tuned BarmalletsInstrumentDuas Fixas Two FixedmalletsInstrumentBarra Uniforme Uniform BarmalletsInstrumentVibrafone VibraphonemalletsInstrument*Frequncia do Vibrato Vibrato FreqmalletsInstrument Ganho do Vibrato Vibrato GainmalletsInstrumentMadeira-1Wood1malletsInstrumentMadeira-2Wood2malletsInstrumentSua instalao Stk parece estar incompleta. Por favor certifique-se que o pacote Stk (Stk-package) esteja completamente instalado!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRmalletsInstrumentViewADSR:malletsInstrumentViewDe ArcoBowedmalletsInstrumentViewTransio CrossfademalletsInstrumentViewTransio: Crossfade:malletsInstrumentViewDificuldadeHardnessmalletsInstrumentViewDificuldade: Hardness:malletsInstrumentViewInstrumento InstrumentmalletsInstrumentView"Prondudade do LFO LFO DepthmalletsInstrumentView(Profundidade do LFO: LFO Depth:malletsInstrumentView LFO - Velocidade LFO SpeedmalletsInstrumentView$Velocidade do LFO: LFO Speed:malletsInstrumentViewModulador ModulatormalletsInstrumentViewModulador: Modulator:malletsInstrumentViewMovimentoMotionmalletsInstrumentViewMovimento:Motion:malletsInstrumentViewPosioPositionmalletsInstrumentViewPosio: Position:malletsInstrumentViewPressoPressuremalletsInstrumentViewPresso: Pressure:malletsInstrumentViewVelocidadeSpeedmalletsInstrumentViewVelocidade:Speed:malletsInstrumentViewPropagaoSpreadmalletsInstrumentViewPropagao:Spread:malletsInstrumentViewPercussa Mix Stick MixmalletsInstrumentView*Mistura da Percusso: Stick Mix:malletsInstrumentViewFreq VibrVib FreqmalletsInstrumentView.Frequncia de Vibrao: Vib Freq:malletsInstrumentViewGanho VibrVib GainmalletsInstrumentView$Ganho Vibracional: Vib Gain:malletsInstrumentViewVibratomalletsInstrumentViewVibrato:malletsInstrumentView Fechar  Close manageVSTEffectViewD - Controle de parmetros de VST's - VST parameter controlmanageVSTEffectViewAutomatizado AutomatedmanageVSTEffectViewxClique aqui para exibir somente os parmetros automatizados.Quantidade da varredura RtShiftSweep RtShift amountpapuInstrument(Direo da varreduraSweep directionpapuInstrument$Varredura temporal Sweep timepapuInstrument AgudoTreblepapuInstrument<Direo da varredura de volumeVolume sweep directionpapuInstrument4Trabalho da Frente de OndaWave Pattern DutypapuInstrument GraveBasspapuInstrumentView Grave:Bass:papuInstrumentView4Canal 1 para SO1 (Direita)Channel1 to SO1 (Right)papuInstrumentView6Canal 1 para SO2 (Esquerda)Channel1 to SO2 (Left)papuInstrumentView4Canal 2 para SO1 (Direita)Channel2 to SO1 (Right)papuInstrumentView6Canal 2 para SO2 (Esquerda)Channel2 to SO2 (Left)papuInstrumentView4Canal 3 para SO1 (Direita)Channel3 to SO1 (Right)papuInstrumentView6Canal 3 para SO2 (Esquerda)Channel3 to SO2 (Left)papuInstrumentView4Canal 4 para SO1 (Direita)Channel4 to SO1 (Right)papuInstrumentView6Canal 4 para SO2 (Esquerda)Channel4 to SO2 (Left)papuInstrumentView&Desenhe a onda aquiDraw the wave herepapuInstrumentViewDTamanho de cada passo na varreduraLength of each step in sweeppapuInstrumentViewFTamanho de cada passo na varredura:Length of each step in sweep:papuInstrumentView.Canal de Rudo - VolumeNoise Channel VolumepapuInstrumentView0Canal de Rudo - Volume:Noise Channel Volume:papuInstrumentView*SO1 Volume (Esquerdo)SO1 Volume (Right)papuInstrumentView,SO1 Volume (Esquerdo):SO1 Volume (Right):papuInstrumentView(SO2 Volume (Direito)SO2 Volume (Left)papuInstrumentView*SO2 Volume (Direito):SO2 Volume (Left):papuInstrumentViewBDesconsiderar Tamanho do registroShift Register WidthpapuInstrumentViewCanal 1 VolumeSquare Channel 1 VolumepapuInstrumentViewCanal 1 Volume:Square Channel 1 Volume:papuInstrumentViewCanal 2 VolumeSquare Channel 2 VolumepapuInstrumentViewCanal 2 Volume:Square Channel 2 Volume:papuInstrumentView(Direo da varreduraSweep DirectionpapuInstrumentView>Quantidade da varredura RtShiftSweep RtShift amountpapuInstrumentView@Quantidade da varredura RtShift:Sweep RtShift amount:papuInstrumentView$Varredura temporal Sweep TimepapuInstrumentView&Varredura temporal: Sweep Time:papuInstrumentViewhA quantidade de acrscimo e decrscimo em frequncia/The amount of increase or decrease in frequencypapuInstrumentViewHO atraso entre cada passo de mudanaThe delay between step changepapuInstrumentViewO ciclo de trabalho a razo da durao (tempo) do sinal LIGADO versus o total do perodo do sinal.mThe duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.papuInstrumentView\A taxa na qual cresce ou decresce a frequncia:The rate at which increase or decrease in frequency occurspapuInstrumentView AgudoTreblepapuInstrumentView Agudo:Treble:papuInstrumentView<Direo da varredura de volumeVolume Sweep DirectionpapuInstrumentView,Canal da Onda - VolumeWave Channel VolumepapuInstrumentView.Canal da Onda - Volume:Wave Channel Volume:papuInstrumentViewFrente de onda Wave PatternpapuInstrumentView4Trabalho da Frente de OndaWave Pattern DutypapuInstrumentView4Trabalho da frente de ondaWave pattern dutypapuInstrumentView6Trabalho da Frente de Onda:Wave pattern duty:papuInstrumentView:Dois Operadores de Sntese FM2-operator FM Synth pluginBrowsernSntetizador de Sntese Aditiva para sons tipo de rgo*Additive Synthesizer for organ-like sounds pluginBrowserXSintetizador de formas de onda customizveis"Customizable wavetable synthesizer pluginBrowserArraste um instrumento para uma pista existente no Editor de Arranjo ou no Editor de Bases.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowserdPoderoso sintetizador ZynAddSubFx embutido no LMMSEmbedded ZynAddSubFX pluginBrowser8Emulao do GameBoy (TM) APUEmulation of GameBoy (TM) APU pluginBrowserEmulao do MOS6581 e do MOS8580 SID. Este chip foi utilizado no computador Commodore 64.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowservFiltro para importao de projetos do FL Studio para o LMMS1Filter for importing FL Studio projects into LMMS pluginBrowsertFiltro para importao de arquivos do Hydrogen para o LMMS-Filter for importing Hydrogen files into LMMS pluginBrowserfFiltro para importao de arquivos MIDI para o LMMS)Filter for importing MIDI-files into LMMS pluginBrowserPr definio de instrumento compatvel com GUS (Gravis Ultrasound)GUS-compatible patch instrument pluginBrowserNImitao monofnica incompleta de tb303%Incomplete monophonic imitation tb303 pluginBrowser2Navegador de instrumentosInstrument browser pluginBrowser.Plugins de InstrumentosInstrument plugins pluginBrowsersfxr para LMMSLMMS port of sfxr pluginBrowserFLista dos plugins LADSPA instaladosList installed LADSPA plugins pluginBrowser>Tocador de arquivos de SounFontPlayer for SoundFont files pluginBrowserbPlugin para controlar botes com os picos sonoros-Plugin for controlling knobs with sound peaks pluginBrowserPlugin para melhorar a separao estreo de um arquivo de entrada estreo=Plugin for enhancing stereo separation of a stereo input file pluginBrowser`Plugin para livre manipulao das sadas estreo,Plugin for freely manipulating stereo output pluginBrowserhInstrumentos percussivos com afinao para voc usarTuneful things to bang on pluginBrowsernServidor (host) VST para usar plugins VST(i) com o LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser:Modelador de Cordas vibrantesVibrating string modeler pluginBrowsersem descriono description pluginBrowserzplugin para uso de efeitos LADSPA arbitrrios dentro do LMMS.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowser&Negrito&Bold projectNotes&Cor... &Color... projectNotes&Copiar&Copy projectNotes&Itlico&Italic projectNotes&Justificar&Justify projectNotes&Esquerda&Left projectNotes C&olar&Paste projectNotes&Refazer&Redo projectNotesDi&reita&Right projectNotesS&ublinhado &Underline projectNotesDes&fazer&Undo projectNotesC&entroC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotesRecor&tarCu&t projectNotesAes de edio Edit Actions projectNotes&Aes de formataoFormat Actions projectNotes Notas do projeto Project notes projectNotes2Faa suas anotaes aqui.!Put down your project notes here. projectNotesRenomear... Rename... renameDialog$INTERFACE DE UDIOAUDIO INTERFACE setupDialog2Pasta com Temas para LMMSArtwork directory setupDialog,Configuraes de udioAudio settings setupDialog"TAMANHO DO BUFFER BUFFER SIZE setupDialogPapel de paredeBackground artwork setupDialogCancelarCancel setupDialogVEscolher a pasta de instalao do FL Studio'Choose FL Studio installation directory setupDialogLEscolher a pasta com os plugins LADSPAChoose LADSPA plugin directory setupDialogHEscolher a pasta de trabalho do LMMSChoose LMMS working directory setupDialog>Escolher a pasta de STK rawwaveChoose STK rawwave directory setupDialogHEscolher a pasta com Temas para LMMSChoose artwork-theme directory setupDialog@Escolher Papel de Parede do LMMSChoose background artwork setupDialog2Escolher SoundFont padroChoose default SoundFont setupDialog@Escolher a pasta com plugins VST Choose your VST-plugin directory setupDialog2Botes de pista compactosCompact track buttons setupDialogHSempre compactar arquivos de projeto"Compress project files per default setupDialog6Arquivo padro de SoundfontDefault Soundfont File setupDialog*Mostrar volume em dBVDisplay volume as dBV  setupDialogVHabilitar a funo de salvamento automticoEnable auto save feature setupDialogdHabilitar camadas de notas no editor de notas MIDI Enable note labels in piano roll setupDialogHabilitar dicasEnable tooltips setupDialogdHabilitar visualizador de forma de onda por padro"Enable waveform display by default setupDialog@Pasta de instalao do FL Studio FL Studio installation directory setupDialog8Amostras: %1 Latncia: %2 msFrames: %1 Latency: %2 ms setupDialogOpes geraisGeneral settings setupDialogvModo de Alta Qualidade para a Sada do dispositivo de udioHQ-mode for output audio-device setupDialogAqui voc pode selecionar sua interface de MIDI preferida. Dependendo das configuraes do sistema durante a compilao, voc poder escolher entre ALSA, OSS entre outros. Abaixo voc ver uma caixa que oferece controles para ajustar a interface de MIDI selecionada.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialogAqui voc pode selecionar sua interface de udio preferida. Dependendo das configuraes do sistema durante a compilao, voc poder escolher entre ALSA, JACK, OSS e outros. Abaixo voc ver uma caixa que oferece controles para ajustar a interface de udio selecionada.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialogAqui voc pode ajustar o tamanho do buffer interno usado pelo LMMS. Valores menores resultam em menor latncia (atraso ao usar as teclas ou um controlador midi) mas podem provocar sons no desejados como plocs e bips ou m performance, esses problemas acontecem especialmente em computadores antigos ou sistema com kernel no compilado para trabalhar com processamento em tempo real.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog0Locais de plugins LADSPALADSPA plugin paths setupDialog2Pasta de trabalho do LMMSLMMS working directory setupDialog"INTERFACE DO MIDIMIDI INTERFACE setupDialog*Configuraes do MIDI MIDI settings setupDialog VRIOSMISC setupDialogOKOK setupDialogPModo janela com uma pista de instrumento One instrument track window mode setupDialog LocaisPaths setupDialog(Opes de desempenhoPerformance settings setupDialogPor favor note que a maioria das mudanas no tero efeito antes de reiniciar o LMMS!GPlease note that most changes won't take effect until you restart LMMS! setupDialog0Restaurar o valor padroReset to default-value setupDialogReiniciar LMMS Restart LMMS setupDialog(Pasta de STK rawwaveSTK rawwave directory setupDialogConfigurar LMMS Setup LMMS setupDialogvMostrar o cursor de reproduo dentro do AudioFileProcessor*Show playback cursor in AudioFileProcessor setupDialogMostrar aviso de reinicializao depois de mudana de configurao,Show restart warning after changing settings setupDialogDRolagem suave no Editor de ArranjoSmooth scroll in Song Editor setupDialogtSincronizar plugins VST no hospedeiro (host) de reproduo!Sync VST plugins to host playback setupDialog8Efeitos Visuais X DesempenhoUI effects vs. performance setupDialog*Pasta com plugins VSTVST-plugin directory setupDialog BancoBank sf2Instrument ChorusChorus sf2Instrument,Profundidade do Chorus Chorus Depth sf2InstrumentNvel de Chorus Chorus Level sf2Instrument Linhas de Chorus Chorus Lines sf2Instrument(Velocidade do Chorus Chorus Speed sf2Instrument GanhoGain sf2InstrumentProgramaoPatch sf2InstrumentReverberaoReverb sf2Instrument0Absoro da ReverberaoReverb Damping sf2Instrument*Nvel de Reverberao Reverb Level sf2Instrument>Tamanho da sala em ReverberaoReverb Roomsize sf2Instrument.Tamanho da Reverberao Reverb Width sf2Instrument:Aplicar chorus (se suportado)Apply chorus (if supported)sf2InstrumentViewFAplicar reverberao (se suportado)Apply reverb (if supported)sf2InstrumentView Escolher o patchChoose the patchsf2InstrumentView.Profundidade do Chorus: Chorus Depth:sf2InstrumentView Nvel de Chorus: Chorus Level:sf2InstrumentView"Linhas de Chorus: Chorus Lines:sf2InstrumentView*Velocidade do Chorus: Chorus Speed:sf2InstrumentViewPClique aqui para abrir outro arquivo SF2#Click here to open another SF2 filesf2InstrumentView GanhoGainsf2InstrumentView2Abrir o arquivo SoundFontOpen SoundFont filesf2InstrumentView:Abrir outro arquivo SoundFontOpen other SoundFont filesf2InstrumentView2Absoro da Reverberao:Reverb Damping:sf2InstrumentView,Nvel de Reverberao: Reverb Level:sf2InstrumentView@Tamanho da sala em Reverbarao:Reverb Roomsize:sf2InstrumentView0Tamanho da Reverberao: Reverb Width:sf2InstrumentView4Arquivos SoundFont2 (*sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewEste boto ativa o efeito de chorus. Ele til para efeitos de eco legais, mas s funciona se o arquivo tiver suporte a ele.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewEste boto ativa o efeito de reverberao. Ele til para efeitos legais, mas s funciona se o arquivo tiver suporte a ele.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewForma de Onda Wave FormsfxrInstrumentModelo do chip Chip model sidInstrument CorteCutoff sidInstrumentTipo de filtro Filter type sidInstrumentRessonncia Resonance sidInstrumentVoz 3 desligada Voice 3 off sidInstrumentVolume sidInstrumentA taxa de ataque determina o quo rpido a sada da Voz %1 sai do zaro para o pico de amplitude.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentViewAtaque:Attack:sidInstrumentView&Filtro Passa Banda Band-Pass filter sidInstrumentViewAjuste Bruto:Coarse:sidInstrumentView(Frequncia de corte:Cutoff frequency:sidInstrumentViewO Decaimento determina o quo rpido a sada vai cair do pico de amplitude at o nvel de sustentao.iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentViewDecaimento:Decay:sidInstrumentViewFiltradoFilteredsidInstrumentView$Filtro Passa Alta High-Pass filter sidInstrumentView&Filtro Passa Baixa Low-Pass filter sidInstrumentView MOS6581 SID sidInstrumentView MOS8580 SID sidInstrumentView RudoNoisesidInstrumentViewA sada da Voz %1 ir permanecer no nvel de Sustentao enquanto a nota estiver acionada.]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentViewOnda de Pulso Pulse WavesidInstrumentView"Tamanho do Pulso: Pulse Width:sidInstrumentViewRelaxamento:Release:sidInstrumentViewRessonncia: Resonance:sidInstrumentView"Modulao em AnelRing-ModsidInstrumentView2Mod em Anel (Modulao em Anel) substitui a sada da Onda Triangular do Oscilador %1 com a "Modulada em Anel" da combinao entre os Osciladores %1 e %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentViewDente de SerraSawToothsidInstrumentViewSustentao:Sustain:sidInstrumentViewSincronizaoSyncsidInstrumentView@A sincronizao sincroniza a frequncia fundamental do Oscilador %1 com a frequncia fundamental do Oscilador %2 produzindo um efeito de "Super Sincronizao".Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentView TesteTestsidInstrumentViewQuando o Teste est ativado, ele restaura e trava o Oscilador %1 at o Teste ser desligado.PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentViewO Ajuste bruto permite que voc ajuste a Voz %1 em uma oitava ou mais.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewA resoluo de Tamanho do Pulso permite que os movimentos sejam suaves de modo que no sejam percebidas mudanas bruscas. O Pulso da forma de onda em um Oscilador %1 pode ser selecionado para existir um efeito audvel.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentViewA sada da Voz %1 ir da amplitude do nvel Sustentao at a amplitude zero na razo selecionada no Relaxamento.jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentViewOnda Triangular Triangle WavesidInstrumentViewVoz3 Desligada  Voice3 Off sidInstrumentViewVolume:sidInstrumentView`Quando o Filtrado est ligado, a Voz %1 ser processada atravs do Filtro. Quando o Filtrado est desligado, a Voz %1 aparecer diretamente na sada e o Filtro no ter efeito.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentView2Todos os tipos de arquivoAll file typessongProjeto vazio Empty projectsong*Projetos do FL StudioFL Studio projectssong(Projetos do HydrogenHydrogen projectssong Importar arquivo Import filesongSequncias MIDIMIDI sequencessongAltura Final Master pitchsongVolume Final Master volumesong$Projeto NO salvo.Project NOT saved.songProjeto salvo Project savedsongnSelecionar pasta para escrita de pistas renderizadas.../Select directory for writing exported tracks...song\Selecione o arquivo para exportar o projeto...!Select file for project-export...songAndamentoTemposong<O projeto %1 est salvo agora.The project %1 is now saved.song6O projeto %1 no foi salvo!The project %1 was not saved!songEste projeto est vazio, ento export-lo no faz sentido. Por favor, coloque alguns itens dentro do Editor de Arranjo primeiro!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songsem nomeuntitledsong ABRIRWIDEstereoEnhancerControlDialogLargura:Width:stereoEnhancerControlDialogLarguraWidthstereoEnhancerControls"Esq para Esq Vol:Left to Left Vol:stereoMatrixControlDialog"Esq para Dir Vol:Left to Right Vol:stereoMatrixControlDialog"Dir para Esq Vol:Right to Left Vol:stereoMatrixControlDialog"Dir para Dir Vol:Right to Right Vol:stereoMatrixControlDialogEsq para Esq Left to LeftstereoMatrixControlsEsq para Dir Left to RightstereoMatrixControlsDir para Esq Right to LeftstereoMatrixControlsDir para DirRight to RightstereoMatrixControls@Quando parar volta para o comeoAfter stopping go back to begintimeLineQuando parar volta para a posio que estava quando comeou a tocar?After stopping go back to position at which playing was startedtimeLine:Quando parar mantm a posioAfter stopping keep positiontimeLine6Ativa/desativa auto-rolagemEnable/disable auto-scrollingtimeLine:Ativa/desativa pontos de loopEnable/disable loop-pointstimeLineSugestoHinttimeLinePressione <Shift> para mover o comeo do ponto de loop; Pressione <Ctrl> para desabilitar os pontos de loop magnticos.XHold to move the begin loop point; Press to disable magnetic loop points.timeLine~Pressione <Ctrl> para desabilitar os pontos de loop magnticos.-Press to disable magnetic loop points.timeLineMudoMutedtrackSolotrackMudoMutedtrackContentObject.%1:%2 (%3:%4 at %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView CopiarCopytrackContentObjectViewTamanho atualCurrent lengthtrackContentObjectViewPosio atualCurrent positiontrackContentObjectViewRecortarCuttrackContentObjectView>Apagar (boto do meio do mouse)Delete (middle mousebutton)trackContentObjectViewSugestoHinttrackContentObjectViewLMudo/no mudo (<Ctrl> + boto do meio)#Mute/unmute ( + middle click)trackContentObjectView ColarPastetrackContentObjectView`Pressione <Ctrl> e arraste para fazer uma cpia.%Press and drag to make a copy.trackContentObjectView^Pressione <Ctrl> para redimensionar livremente.Press for free resizing.trackContentObjectView*Aes para esta pistaActions for this tracktrackOperationsWidget"Clonar esta pistaClone this tracktrackOperationsWidgetMudoMutetrackOperationsWidget,Deixar esta pista mudaMute this tracktrackOperationsWidgetPressione <Ctrl> enquanto clica em mover-grip para o comeo, uma ao de arrastar.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget$Remover esta pistaRemove this tracktrackOperationsWidgetSolotrackOperationsWidget8Falha ao carregar plugin VSTFailed loading VST-pluginvestigeInstrument"Carregando pluginLoading pluginvestigeInstrumentdPor favor, espere enquanto carrego o plugin VST...'Please wait while loading VST-plugin...vestigeInstrument>O plugin VST %1 no pode ser carregado por alguma razo. Se ele rodar com outro programa VST no Linux, por favor entre em contato com um desenvolvedor do LMMS!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrumentDesafinar %1 Detune %1vibedEncrespar %1  Fuzziness %1 vibedImpulso %1 Impulse %1vibedTamanho %1 Length %1vibedOitava %1 Octave %1vibedPan %1vibed"Pegada %1 posioPick %1 positionvibed.Super Pegada %1 posioPickup %1 positionvibed Cordas %1 durezaString %1 stiffnessvibed Cordas %1 volumeString %1 volumevibed Aj&uda&Help vibedViewjClique aqui para habilitar/desabilitar forma de onda.&Click here to enable/disable waveform. vibedViewXClique aqui para normalizar a forma de onda.!Click here to normalize waveform. vibedViewTClique aqui para suavizar a forma de onda.Click here to smooth waveform. vibedViewDesafinar:Detune: vibedView.Habilitar forma de ondaEnable waveform vibedViewEncrespando:  Fuzziness: vibedView"Editor de ImpulsoImpulse Editor vibedView2Impulso ou estado inicialImpulse or initial state vibedViewTamanho:Length: vibedViewNormalizar Normalize vibedView OitavaOctave vibedViewPan: vibedView"Escolher pinada:Pick position: vibedView(Posio do captador:Pickup position: vibedView&Onda dente de serraSaw wave vibedViewOnda senoidal Sine wave vibedViewSuavizarSmooth vibedViewOnda quadrada Square wave vibedView CordaString vibedView Dureza da corda:String stiffness: vibedView4O seletor "Imp" determina como a forma de onda no grfico ser manipulada como um impulso comunicado corda pela pinada ou pelo estado inicial da corda.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedViewO boto "P" modifica a posio onde a corda ser "pinada". Valores baixos significam que a corda ser pinada perto da ponte.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedView4O boto "PU" modifica a posio onde as vibraes sero captadas na corda selecionada. Valores baixos significam que o captador est mais prximo ponte.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewDO boto "S" modifica a dureza da corda selecionada. A dureza da corda interfere no quo longa a vibrao da corda. Quanto menor o valor mais a corda vai soar.The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewfO boto "V" modifica o volume da corda selecionada.4The 'V' knob sets the volume of the selected string. vibedViewhO boto "Detune" modifica a altura da corda escolhida. Valores menores do que zero quase no afetaro o som da corda. Valores bem maiores do que zero faro o som ficar mais agudo.The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedViewlO boto de tamanho modifica o tamanho da corda escolhida. Cordas longas resultam em vibraes longas aliadas a um brilho no som, o porm que isto ocupa muito processamento da CPU.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewZO seletor "Octave" usado para escolher que harmnico da nota na corda ir soar mais. Por exemplo, "-2" significa que a corda vibrar duas oitavas abaixo da Fundamental, "F" significa que a corda vibrar na frequncia Fundamental e "6" significa que a corda vai vibrar 6 oitavas acima da fundamental.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewO boto de Pan determina a localizao da corda selecionada o campo estereofnico.PThe Pan knob determines the location of the selected string in the stereo field. vibedViewO boto "Slap" deixa mais "crespo" o som da corda escolhida que mais aparente na durao do ataque (como a tcnica de puxar a corda de um contrabaixo ou um violo chamada slap), embora possa ser usada tambm para deixar o som mais "metlico".The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedView O seletor de Corda usado para escolher que corda os controles estaro editando. O instrumento Vibed pode conter at nove cordas vibrando independentemente. O LED no canto direito inferior do editor de forma de onda indica que a corda selecionada est ativa.The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedViewO editor de forma de onda proporciona controle sobre o estado inicial, ou impulso, usado no incio da vibrao da corda. Os botes ao lado direito do grfico iro inicializar o tipo de forma de onda selecionada. O boto "?" ira carregar uma forma de onda de um arquivo (somente as primeiras 128 amostras sero carregadas). A forma de onda tambm pode ser desenhada no grfico. O boto "S" ir suavizar a forma de onda. O boto "N" ira normalizar a forma de onda.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedViewOnda triangular Triangle wave vibedView^Use uma onda dente de serra no oscilador atual.&Use a saw-wave for current oscillator. vibedViewRUse uma onda senoidal no oscilador atual.'Use a sine-wave for current oscillator. vibedViewRUse uma onda quadrada no oscilador atual.)Use a square-wave for current oscillator. vibedViewVUse uma onda triangular no oscilador atual.+Use a triangle-wave for current oscillator. vibedView~Use uma forma de onda definida pelo usurio no oscilador atual.3Use a user-defined waveform for current oscillator. vibedViewHUse rudo branco no oscilador atual.'Use white-noise for current oscillator. vibedView4Onda definida pelo usurioUser defined wave vibedView(Vibed modela independentemente a vibrao de at 8 cordas. O seletor "String" (Corda) permite escolher qual corda ser editada. O seletor "Imp" escolhe qual dos grficos representar o impulso no estado inicial da corda. O seletor "Octave" (Oitava) permite escolher qual harmnico da corda dever vibrar. O grfico permite que voc controle o estado inicial, ou impulso, usado para definir o movimento da corda. O boto "V" controla o volume. O boto "S" controla a dureza da corda. O boto "P" controla a posio de pinagem da corda. J o boto "PU" controla a posio do captador. O boto "Pan" posiciona o som no lado esquerdo ou direito, enquanto o boto "Detune" (Desafinar) permite modificar a afinao em termos de altura. Automatizar este boto permite criar glissandos bem interessantes! O boto "Slap" pode dar uma caracterstica mais metlica ao som da corda. O boto "Tamanho" controla o tamanho da corda. O LED no canto direito inferior do editor de forma de onda determina que a corda est ativa no presente instrumento.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedViewVolume: vibedViewRudo brancoWhite noise wave vibedView*Clique para habilitarClick to enablevisualizationWidget~Clique para habilitar/desabilitar a visualizao da sada final6click to enable/disable visualization of master-outputvisualizationWidgetVoz %1 ataqueVoice %1 attack voiceObject&Voz %1 ajuste brutoVoice %1 coarse detuning voiceObject"Voz %1 decaimentoVoice %1 decay voiceObjectVoz %1 filtradaVoice %1 filtered voiceObject.Voz %1 tamanho do pulsoVoice %1 pulse width voiceObject$Voz %1 relaxamentoVoice %1 release voiceObject.Voz %1 modulada em anelVoice %1 ring modulate voiceObject$Voz %1 sustentaoVoice %1 sustain voiceObject&Voz %1 sincronizada Voice %1 sync voiceObjectVoz %1 teste Voice %1 test voiceObject(Voz %1 forma da ondaVoice %1 wave shape voiceObjectlmms-1.1.3/data/locale/pt.ts000066400000000000000000011442141247673406200156510ustar00rootroot00000000000000 AboutDialog About Sobre License Licença Authors Autores Translation Tradução About LMMS Sobre LMMS LMMS - easy music production for everyone LMMS - produção musical fácil para todos Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2014, LMMS developers Version %1 (%2/%3, Qt %4, %5) Versão %1 (%2/%3, Qt %4, %5) <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! Este programa foi traduzido para o idioma português de forma voluntária. Qualquer sugestão para tradução, entre em contato pela lista de desenvolvedores do LMMS ou pelo meu email: <emviveros/arroba/users/ponto/sourceforge/ponto/net>. Sua contribuição é muito bem vinda! Esteban Viveros LMMS LMMS AmplifierControlDialog VOL VOL Volume: Volume: PAN PAN Panning: Panorâmico: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Volume Panning Panorâmico Left gain Right gain AudioAlsa::setupWidget DEVICE DISPOSITIVO CHANNELS CANAIS AudioFileProcessorView Open other sample Abrir outra amostra If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Se você ativar este botão, toda a amostra será invertida. Isto é útil para fazer uns efeitos legais, ex. um ruído elétrico ao contrário. Continue sample playback across notes Continua a tocar a amostra entre as notas Amplify: Amplificar: Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Ativando esta opção a amostra continuará tocando entre diferentes notas - se você mudar a altura, ou o comprimento da nota antes do fim da amostra, a próxima nota irá continuar onde a anterior parou. Para retornar a reprodução a partir do começo, utilize uma nota na parte inferior do teclado (< 20 Hz) Startpoint: Ponto de início: Reverse sample Inverter amostra Endpoint: Ponto final: Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Clique aqui se você precisa abrir outro arquivo de áudio. O diálogo irá aparecer você puder selecionar seu arquivo. Configurações como modo de loop, ponto de início e de final, valor de amplificação, e todo o resto não serão resetados. Mas não vai mais soar como a amostra original. With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Bom este botão você pode aumentar a proporção.Quando você coloca um valor de 100% sua amostra não mudará. De outro maneira ela será amplificada para mais ou para menos (o arquivo original da amostra não será modificado!) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: Tamanho da amostra: AudioJack JACK server down O servidor JACK caiu JACK client restarted Cliente JACK reiniciado LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS foi chutado pelo JACK por alguma razão. Logo que o JACK restaure a comunicação com o LMMS você poderá precisar fazer as conexões manualmente. The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. O servidor de áudio JACK parece ter caído e ao reiniciar uma nova instância falhou. De qualquer maneira LMMS é capaz de prosseguir. Certifique-se de salvar seu projeto e reiniciar primeiro o JACK depois o LMMS. AudioJack::setupWidget CLIENT-NAME NOME-DO-CLIENTE CHANNELS CANAIS AudioOss::setupWidget DEVICE DISPOSITIVO CHANNELS CANAIS AudioPortAudio::setupWidget DEVICE DISPOSITIVO BACKEND BACKEND AudioPulseAudio::setupWidget DEVICE DISPOSITIVO CHANNELS CANAIS AudioSdl::setupWidget DEVICE DISPOSITIVO AutomatableModel Connected to %1 Conectado a %1 Remove song-global automation Apagar automação global da música Edit connection... Editar conexão... &Copy value (%1%2) &Copiar valor (%1%2) Remove connection Apagar conexão &Reset (%1%2) &Resetar (%1%2) Connected to controller Conectado ao controlador Edit song-global automation Editar automação global da música Connect to controller... Conectado ao controlador... Remove all linked controls Apagar todos os controles linkados &Paste value (%1%2) C&olar valor (%1%2) AutomationEditor Automation Editor - %1 Editor de Automação - %1 All selected values were copied to the clipboard. Todos os valores selecionados foram copiados para a área de transferência. Please open an automation pattern with the context menu of a control! Por favor, abra o sequenciador de automação com o menu de contexto do controle! Draw mode (Shift+D) Lápis (Shift+D) Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Clique aqui para selecionar progressão cúbica hermite-progressions para este sequenciador de automação. O valor do objeto conectado irá mudar em curva e suavemente entre picos e vales. Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Clique aqui para cortar valores para a área de transferência. Você pode colar os valores em qualquer sequência utilizando o botão de colar. Erase mode (Shift+E) Borracha (Shift+E) Automation Editor - no pattern Editor de Automação - sem sequência Cut selected values (Ctrl+X) Cortar (Ctrl+X) Copy selected values (Ctrl+C) Copiar (Ctrl+C) Tension: Tensão: Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Clique aqui se você quiser tocar a sequência atual. Isto é útil enquanto se está editando. A sequência entra em loop automaticamente quando chega ao fim. Play/pause current pattern (Space) Tocar/pausar a sequência atual (Espaço) Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Clique aqui para selecionar progressões discretas para este sequenciador de automação. O valor do objeto conectado permanecerá constante entre os pontos de controle e será substituido por um novo valor assim que um novo ponto de controle for assinalado. Click here and the values from the clipboard will be pasted at the first visible measure. Clique aqui e os valores na área de transferência serão colados no primeiro limite visível. Linear progression Progressão linear Click here if you want to stop playing of the current pattern. Clique aqui se você que parar a reprodução da sequência atual. Values copied Valores copiados Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Clique aqui para copiar valores para a área de transferência. Você pode copiar os valores de qualquer sequência utilizando o botão de colar. Cubic Hermite progression Cúbica - Hermite progression Tension value for spline Valor de tensão para os estriados Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Clique aqui para selecionar progressões lineares para este sequenciador de automação. O valor do objeto conectado variará de forma constante entre os pontos de controle assinalados. Stop playing of current pattern (Space) Parar de tocar a sequência atual (Espaço) A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. Um valor de tensão alto irá fazer suave a curva mas também extrapolará alguns valores. Um valor de tensão baixa irá causar um declive na curva de volume para cada ponto de controle. Paste values from clipboard (Ctrl+V) Colar (Ctrl+V) Discrete progression Progressão discreta AutomationPattern Drag a control while pressing <Ctrl> Arraste o controle enquanto pressiona a tecla <Ctrl> Model is already connected to this pattern. AutomationPatternView Clear Limpar Open in Automation editor Abra dentro do Editor de Automação Disconnect "%1" Desconectar "%1" double-click to open this pattern in automation editor dois cliques para abrir esta sequência no editor de automação %1 Connections %1 Conexões Reset name Restaurar nome Change name Mudar nome Set/clear record Armar/desarmar gravação AutomationTrack Automation track Pista de Automação BassBoosterControlDialog FREQ FREQ Frequency: Frequência: GAIN GANHO Gain: Ganho: RATIO RAZÃO Ratio: Razão: BassBoosterControls Frequency Frequência Gain Ganho Ratio Razão CarlaInstrumentView Show GUI Mostrar GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Controlador %1 ControllerConnectionDialog OK OK LMMS LMMS Cycle Detected. Ciclo Detectado. MIDI CONTROLLER CONTROLADOR MIDI USER CONTROLLER CONTROLADOR DO USUÁRIO Cancel Cancelar Auto Detect Auto detectar CHANNEL CANAL Input controller Entrada do controlador CONTROLLER CONTROLADOR Input channel Canal de entrada Connection Settings Configuração das Conexões MIDI-devices to receive MIDI-events from Dispositivos MIDI para receber eventos MIDI de MAPPING FUNCTION MAPEAR FUNÇÃO ControllerRackView Add Adicionar Confirm Delete Confirmação para Apagar Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. Posso mesmo apagar? Há uma ou mais conexões associadas a este controlador. Não há como voltar depois. Controller Rack Estante de Controladores ControllerView &Help Aj&uda Controls Controles Enter the new name for this controller Adicione um novo nome para este controlador Rename controller Renomear controlador Controllers are able to automate the value of a knob, slider, and other controls. Os controladores estão prontos para alterar o valor de botões, barras deslizantes e outros controles automaticamente. &Remove this plugin &Remova este plugin DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass Passa Baixa HiPass Passa Alta BandPass csg Passa Banda csg BandPass czpg Passa Banda czpg Notch Vale Allpass Passa todas Moog Moog 2x LowPass 2x Passa Baixa RC LowPass 12dB RC PassaBaixa 12dB RC BandPass 12dB RC PassaBanda 12dB RC HighPass 12dB RC PassaAlta 12dB RC LowPass 24dB RC PassaBaixa 24dB RC BandPass 24dB RC PassaBanda 24dB RC HighPass 24dB RC PassaAlta 24dB Vocal Formant Filter Filtro de Formante Vocal Effect Gate Portal Decay Decaimento Effect enabled Efeito ativado Wet/Dry mix Mix Processada/Limpa EffectChain Effects enabled Efeitos ativados EffectRackView Add effect Adicionar Efeito EFFECTS CHAIN CADEIA DE EFEITOS EffectSelectDialog Add effect Adicionar Efeito Plugin description Descrição do plugin EffectView W/D P/L GATE PORTAL &Help Aj&uda DECAY DEC Gate: Portal: Time: Tempo: Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Os plugins de efeitos terão o sinal processado de cima para baixo quando estiverem na cadeia de efeitos. O botão de Liga/Desliga permite que você pule o plugin selecionado a qualquer momento. O botão de Processado/Limpo controla a quantidade de processamento do efeito que vai para o sinal (som). A entrada de um plugin é a saída do plugin anterior. Então o sinal "Limpo" de um efeito posicionado na parte de baixo na cadeia conterá o processamento de todos os efeitos situados acima na cadeia. O botão de Decaimento controla quanto tempo o sinal continuará sendo processado após a nota não estar mais sendo apertada. O efeito irá parar o processamento quando o volume estiver abaixo de um limite dado um tempo específico. Tempos grandes precisarão de mais potência da CPU (processador), este número deverá ser pequeno para a maioria dos efeitos. Será necessário aumentar para efeitos que precisam ocupar períodos de silêncio como os efeitos de Atraso por exemplo... O botão de Portal (Gate) especificará o nível, o limite que o efeito parará de atuar. Por exemplo, um relógio começa a funcionar sempre que o nível de sinal estiver abaixo do especificado por este botão. O botão Controles abre uma caixa de diálogo para edição de parâmetros do efeito. Clicar com o botão direito no mouse irá exibir um menu de contexto onde você pode alterar a ordem em que os efeitos são processados ou também apagar um efeito, tudo ao mesmo tempo. Wet Level: Nível de Processamento: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. O botão de Decaimento controla quanto tempo demora até que o processamento seja interrompido. Valores pequenos irão reduzir o consumo de CPU mas em contrapartida você correrá o risco de saturar o final do sinal ao utilizar efeitos de reverberação e atraso (delay). On/Off Liga/Desliga Controls Controles Move &up Para &Cima Move &down Para &Baixo Toggles the effect on or off. Mantém o efeito ligado ou desligado. The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. O botão de Processado/Limpo especifica a quantidade de sinal de entrada que será afetado pelo efeito. The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. O botão Portal (Gate) controla a passagem de sínal de acordo no o seu nível de intensidade (volume). o que estiver acima no nível definido passa, se o nível for menor que o definido haverá silêncio. &Remove this plugin &Remover este plugin EnvelopeAndLfoParameters Hold Espera Decay Decaimento LFO Modulation LFO - Modulação LFO speed LFO - Velocidade Freq x 100 Freq x 100 Attack Ataque LFO Attack LFO - Ataque Predelay Pré-atraso Release Relaxamento Sustain Sustentação Modulation Modulação LFO Wave Shape LFO - Forma de Onda LFO Predelay LFO - Pré-atraso Modulate Env-Amount Modular Tanto-de-Envelope EnvelopeAndLfoView AMT QNT ATT ATQ DEC DEC DEL ATRASO REL REL SPD VEL HOLD DURAR Hint Sugestão SUST SUST Hold: Duração: Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Use este botão para ajustar a quantidade de modulação do LFO atual. Quanto maior este valor, mais o tamanho (ex. volume ou frequência de corte) será influênciado pelo LFO. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Clique aqui para usar uma forma de onda definida manualmente. Depois, arraste o aquivo com a amostra de áudio correspondente dentro do gráfico de LFO. multiply LFO-frequency by 100 Multiplica a frequência do LFO por 100 Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use este botão para ajustar a velocidade do LFO atual. Quanto maior este valor, mais rapidamente o LFO oscila e mais rápido será seu efeito. FREQ x 100 FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. Clique aqui se quiser que a frequência deste LFO seja multiplicada por 100. ms/LFO: ms/LFO: Decay: Decaimento: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Use este botão para ajustar o tempo de decaimento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nível de ataque para o nível sustentável. Escolha um valor pequeno para instrumentos como piano. Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Use este botão para ajustar o nível de sustentação do envelope atual. Quanto maior este valor, maior será o nível que o envelope espera antes de ir para zero. Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Use este botão para ajustar o tempo de pré-atraso do LFO atual. Quanto maior este valor, maior o tempo ontes do LFO começar a oscilar. Click here to make the envelope-amount controlled by this LFO. Clique aqui para que a quantidade do envelope seja controlada por este LFO. Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Use este botão para ajustar o tempo de relaxamento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nível de sustentação para zero. Escolha um valor grande para instrumentos com cordas. Click here for a sine-wave. Clique aqui para usar uma onda senoidal. LFO speed: Velocidade do LFO: Attack: Ataque: LFO predelay: Pré-atraso do LFO: MODULATE ENV-AMOUNT MODULAR QNT-ENV Predelay: Pré-atraso: Modulation amount: Quantidade de modulação: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Use este botão para ajustar o pré-atraso do envelope atual. Quanto maior este valor, mais longo o tempo antes de iniciar o envelope atual. Click here for a square-wave. Clique aqui para usar uma onda quadrada. Release: Relaxamento: Sustain: Sustentação: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Use este botão para ajustar a quantidade de modulação do envelope atual. Quanto maior este valor, mais o tamanho do acorde (ex. volume ou frequência de corte) será influênciado pelo envelope. LFO- attack: Ataque do LFO: Click here for a triangle-wave. Clique aqui para usar uma onda triangular. Drag a sample from somewhere and drop it in this window. Arraste uma amostra de qualquer lugar para esta janela. Click here for a saw-wave for current. Clique aqui para usar uma onda dente-de-serra. Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Use este botão para ajustar o tempo de duração do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope segura o nível de ataque antes de diminuir para o nível sustentável. Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Use este botão para ajustar o tempo de ataque do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisará para aumentar o nível de ataque. control envelope-amount by this LFO Controla a quantidade do envelope por este LFO Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Use este botão para ajustar o tempo de ataque do LFO atual. Quanto maior este valor, mais o tempo o LFO leva para atingir sua amplitude máxima. Click here for random wave. ExportProjectDialog 2x 2x 4x 4x 8x 8x Sinc Best (very slow!) Sincronização Melhor (muito lenta) Start Começar Bitrate: Velocidade em bits: Samplerate: Taxa de Amostragem: 1x (None) 1x (Nada) Oversampling (use with care!): Sobreamostragem (use com cuidado): Cancel Cancelar Depth: Precisão: 64 KBit/s 64 KBit/s 128 KBit/s 128 KBit/s 192 KBit/s 192 KBit/s 160 KBit/s 160 KBit/s 256 KBit/s 256 KBit/s 320 KBit/s 320 KBit/s 32 Bit Float 32 Bits Decimal 192000 Hz 192000 Hz Zero Order Hold Retentor de Ordem Zero Output Saída Please note that not all of the parameters above apply for all file formats. Por favor, note que os parâmetros acima se aplicam para todos os tipos de arquivos. Interpolation: Interpolação: 44100 Hz 44100 Hz 16 Bit Integer 16 Bits Inteiro Export project Renderizar projeto Sinc Fastest Sincronização Rápida 96000 Hz 96000 Hz File format: Formato do arquivo: 48000 Hz 48000 Hz 88200 Hz 88200 Hz Sinc Medium (recommended) Sincronização Média (recomendada) Export as loop (remove end silence) Renderizar como loop (remove silêncio no final) Quality settings Configurações de qualidade FileBrowser Browser Pastas FileBrowserTreeWidget Send to active instrument-track Envio para ativar pista de instrumento Open in new instrument-track/Song-Editor Abrir nova pista de instrumento / Editor de Arranjo Open in new instrument-track/B+B Editor Abrir nova pista de instrumento / Editor de Bases Loading sample Carregando amostra Please wait, loading sample for preview... Por favor espere, carregando a pré visualização da amostra... --- Factory files --- --- Arquivos de fábrica --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help Aj&uda FxMixer FX %1 FX %1 Master Mestre FxMixerView Enter the new name for this FX channel Insira o novo nome para este Canal de Efeitos Rename FX channel Renomear Canal de Efeitos FX-Mixer Mixer de Efeitos FxMixerView::FxChannelView FX Fader %1 Fader de Efeito %1 Mute Mudo Mute this FX channel Deixar mudo este Canal de Efeitos FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Up Para Cima Down Para Baixo Free Livre Sort Tipo Sync Sincronização Arpeggio direction Direção do Arpejo Up and down Para cima e para baixo Random Aleatório Arpeggio range Escala de Arpejo Arpeggio gate Portal de Arpejo Arpeggio time Tempo de Arpejo Arpeggio type Tipo de Arpegio Arpeggio mode Modo do Arpejo Arpeggio Arpegio Down and up InstrumentFunctionArpeggioView % % ms ms GATE PORTAL TIME TEMPO Mode: Modo: RANGE EXTENSÃO Arpeggio range: Extensão do arpejo: Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Use este botão para ajustar o portal de arpejo. O Portal de arpejo especifica o quanto deve ser tocado o arpejo. Isto permite que você faça arpejos stacatos bem legais. Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Use este botão para escolher a extensão do arpejo em oitavas. O arpejo selecionado será tocado dentro do número de oitavas especificado. Chord: Acorde: ARPEGGIO ARPEGIO Arpeggio gate: Portal de arpejo: Arpeggio time: Tempo de arpejo: Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Use este botão para ajustar o tempo de arpejo em milissegundos. O tempo do arpejar especifica qual longo cada nota do arpejo será tocada. An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Arpegio é uma técnica instrumental (especialmente para instrumentos musicais de cordas pinçadas - Violão, Viola Caipira, Contra-baixo, etc) que consiste em tocar repetidamente uma série de notas. Quando pinçamos mais de uma corda ao mesmo tempo em um violão por exemplo, podemos criar um acorde, no arpegio, podemos tocar as notas de um acorde em tempos diferentes, nunca ao mesmo tempo. Arpegios típicos são os das triades mair e menor, mas é possivel arpejar qualquer acorde que seja possível selecionar. octave(s) oitava(s) Direction: Direção: InstrumentFunctionNoteStacking 6 7 7 9 9 11 11 13 13 m6 m6 m7 m7 m9 m9 7#5 7(#5) 7#9 7(#9) 9#5 (9, #5) 7b5 7(b5) 7b9 7(b9) 9b5 (9, b5) aug aum m11 m(11) m13 m(13) tri tríade 13#9 13(#9) 11b9 11(b9) 13b9 13(b9) 7#11 7(#11) 9#11 (9, #11) 9b13 (b9, 13) Maj7 7M Maj9 9M add9 (9) m7b5 m7(b5) m7b9 m7(b9) m9b5 m(9, b5) sus2 sus2 sus4 sus4 m-Maj11 m (11M) m-Maj13 m (13M) Dominant bebop Bebop dominante 7#5#9 7(#5, #9) 7#5b9 7(#5, b9) 6add9 6(9) 7b5b9 7(b5, b9) 6sus4 7sus4 7 sus4 9sus4 9 sus4 Blues Blues Maj11 Acorde de 11 Maj13 13M Majb5 Maior b5 Major Maior Minor Menor Diminished Diminuta madd9 m(9) minb5 menor b5 minor menor m9-Maj7 m(9,7M) m7add11 m7(11) m7add13 m7(13) Phrygolydian Frígio Whole tone Tons inteiros 13b5b9 13(b5, b9) Locrian Lócrio Maj7#11 7M(#11) Maj9#11 9M(#11) 7add11 7(11) 7add13 7(13) Major bebop Bebop maior Arabic Árabe Chords Acordes Dorian Dório Hungarian minor Húngara menor Maj7#5 7M(#5) Maj9#5 9M(#5) Maj7b5 7M(b5) Lydian Lídio Chord range Extensão do acorde Mixolydian Mixolídio Melodic minor Menor Melódica m-Maj7 m-7M Jap in sen Insen Japonesa m6add9 m6(9) Neopolitan minor Neopolitana menor octave oitava Neopolitan Napolitana Aeolian Eólio Maj9sus4 9M sus4 Chord type Tipo de acorde augsus4 aum sus4 Major pentatonic Pentatônica maior Minor pentatonic Pentatônica menor m-Maj7add11 m-7M(11) m-Maj7add13 m-7M(13) Maj7add13 7M(13) Harmonic minor Menor Harmônica Enigmatic Enigmática Chromatic Half-Whole Diminished 5 8x {5?} InstrumentFunctionNoteStackingView RANGE EXTENSÃO Chord range: Extensão do acorde: Chord: Acorde: Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Use este botão para definir a extensão do acorde em oitavas. O acorde selecionado será tocado no número de oitavas especificado. STACKING EMPILHAMENTO octave(s) oitava(s) InstrumentMidiIOView NOTE NOTA PROGRAM PROGRAMA MIDI devices to send MIDI events to Dispositivos MIDI para mandar eventos MIDI para CHANNEL CANAL ENABLE MIDI OUTPUT HABILITAR SAÍDA MIDI MIDI devices to receive MIDI events from Dispositivos MIDI para receber eventos MIDI de VELOCITY INTENSIDADE ENABLE MIDI INPUT HABILITAR ENTRADA MIDI CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping Moog Moog RESO RESS Notch Vale BandPass czpg Passa Banda czpg RC BandPass 24dB RC PassaBanda 24dB RC BandPass 12dB RC PassaBanda 12dB LowPass Passa Baixa 2x LowPass 2x Passa Baixa CUTOFF CORTE RC HighPass 24dB RC PassaAlta 24dB RC HighPass 12dB RC PassaAlta 12dB HiPass Passa Alta VOLUME VOLUME Volume Volume Vocal Formant Filter Filtro de Formante Vocal Allpass Passa todas Cutoff frequency Frequência de corte Envelopes/LFOs Envelopes/LFOs Q/Resonance Q/Ressonância Resonance Ressonância Filter type Tipo de filtro BandPass csg Passa Banda csg RC LowPass 24dB RC PassaBaixa 24dB RC LowPass 12dB RC PassaBaixa 12dB InstrumentSoundShapingView Hz Hz FREQ FREQ RESO RESS These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Estas abas contém envelopes. Eles são muito importantes para modificar o som sendo especialmente úteis toda vez que você precisar fazer uma síntese subtrativa. Por exemplo, se você tem um envelope de volume, você pode fazer com que o volume do som varie de forma específica. Se você quiser criar um instrumento virtual onde seu som tem fade de entrada e saída bem suaves (fade no nosso caso é o aumento ou diminuição de volume no começo ou fim de um evento sonoro), isto poderá ser feito colocanto tempos de ataque e relaxamento longos. Outros exemplos seriam fazer um envelope para o panorâmico (som no alto-falante esquerdo ou no direito), para frequência de corte para o filtro que está sendo usado e por aí vai... Apenas pense sobre isso! Você consegue fazer muitos sons legais apenas com uma onda dente-de-serra e alguns envelopes...! cutoff frequency: frequência de corte: FILTER FILTRO TARGET OBJETO Resonance: Ressonância: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Use este botão para modificar o Q/Ressonância para o filtro selecionado. o Q/Ressonância diz o quanto será filtrado das frequências próximas à frequência de corte. Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Use este botão para modificar a frequência de corte do filtro selecionado. A frequência de corte especifica a frequência na qual o sinal vai ser filtrado. Por exemplo, um filtro Passa Baixa filtra todas as frequências que estiverem depois da frequência de corte. Um filtro PassaAlta filtra todas as frequências que estiverem antes da frequência de corte, e por aí vai... Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Aqui você pode selecionar o filtro embutido que você precisar para sua pista de instrumento. Filtros são muito importantes para mudar as características do som. Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack Pitch Altura Volume Volume unnamed_track pista_sem_nome With this knob you can set the volume of the opened channel. Com este botão você pode ajustar o volume do canal aberto. Panning Panorâmico Base note Nota base FX channel Canal de Efeitos Pitch range Extensão Default preset Pré configuração padrão InstrumentTrackView PAN PAN VOL VOL MIDI MIDI Input Entradas Output Saídas Volume Volume Panning Panorâmico Panning: Panorâmico: Volume: Volume: InstrumentTrackWindow FX EFEITOS PAN PAN VOL VOL FUNC RECURSOS MIDI MIDI PITCH ALTURA RANGE EXTENSÃO Pitch Altura cents centésimos GENERAL SETTINGS AJUSTES GERAIS PLUGIN PLUGIN Pitch: Altura: Panning Panorâmico Save preset Salvar pré definição Panning: Panorâmico: FX channel Canal de Efeitos ENV/LFO ENV/LFO XML preset file (*.xpf) Arquivo de pré definições XML (*.xpf) Volume: Volume: Pitch range (semitones) Extensão (semitons) Instrument volume Volume do instrumento Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Conectar canais LadspaControlDialog Link Channels Conectar Canais Channel Canal LadspaControlView Sorry, no help available. Desculpe, ajuda indisponível... :(. Value: Valor: Link channels Conectar canais LadspaEffect Effect Efeito Unknown LADSPA plugin %1 requested. Plugin LADSPA %1 desconhecido requisitado. LcdSpinBox Please enter a new value between %1 and %2: Por favor entre com um novo valor entre %1 e %2: LfoController LFO Controller Controlador de LFO Oscillator phase Fase do oscilador Oscillator speed Velocidade do oscilador Oscillator amount Quantidade do oscilador Oscillator waveform Forma de onda do oscilador Base value Valor base Frequency Multiplier Multiplicador de frequência LfoControllerDialog AMT QNT LFO LFO PHS DFS SPD VEL BASE CENTRO todo O botão "CENTRO" regula o ponto de referência onde o seu oscilador irá variar. Podendo o "CENTRO" variar entre os valores zero e um, o ponto de referência será um valor entre zero e um no qual se iniciará o processo de oscilação do LFO (Oscilador de baixa frequência). LFO Controller Controlador de LFO Click here for an exponential wave. Clique aqui para usar uma onda exponencial. Phase offset: Defasamento: Click here for a saw-wave. Clique aqui para usar uma onda dente-de-serra. Click here for white-noise. Clique aqui para usar um ruído branco. LFO-speed: LFO - Velocidade: Base amount: Ponto de Referência: Click here for a sine-wave. Clique aqui para usar uma onda senoidal. Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Use este botão para mudar a velocidade do LFO. Quanto maior for este valor, mais rápido oscila o LFO e assim também o efeito a sofrer a modulação. degrees graus Click here for a user-defined shape. Double click to pick a file. Clique aqui para usar uma forma de onda definida manualmente. Dê dois cliques para buscar um arquivo. Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Use este botão para mudar a quantidade de modulação do LFO. Quanto maior for este valor, mais influenciado será o controle conectado (controle de volume ou frequência de corte por exemplo) pelo LFO. Modulation amount: Quantidade de modulação: Click here for a square-wave. Clique aqui para usar uma onda quadrada. With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Com este botão você pode mudar a posição da fase da onda de LFO. Fase é em que ponto a onda inicia o processo de oscilação, desta maneira você pode definir onde você quer que comece o processo de oscilação. Por exemplo, se você tiver uma onda senoidal com defasamento de 180 graus, ela vai começar para baixo. O mesmo acontece com outras formas de onda, como a dente de serra por exemplo. Click here for a a moog saw-wave. Clique aqui para usar uma onda dente-de-serra moog. Click here for a triangle-wave. Clique aqui para usar uma onda triangular. MainWindow &New &Novo Help Ajuda &Edit &Editar &Help Aj&uda &Quit Sai&r &Save &Salvar About Sobre Show/hide Song-Editor Mostrar/esconder Editor de Arranjo Configuration file Arquivo de configuração What's this? O que é isso? Error while parsing configuration file at line %1:%2: %3 Erro ao analisar arquivo de configuração na linha %1:%2: %3 LMMS %1 LMMS %1 Show/hide FX Mixer Mostrar/esconder Mixer de Efeitos Open existing project Abrir projeto existente E&xport tracks... Re&nderizar pistas... Show/hide Piano-Roll Mostrar/esconder Editor de Notas MIDI Save project Salvar projeto &Tools &Ferramentas Save &As... Salvar &como... Open project Abrir projeto LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) Save as new &version Salvar como nova &versão Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Clique aqui para mostrar ou esconder o Editor de Notas MIDI. Com ele você pode editar melodias facilmente. Online help Ajuda Online Show/hide project notes Mostrar/esconder comentários do projeto Create new project from template Criar novo projeto a partir de um modelo The current project was modified since last saving. Do you want to save it now? O projeto atual foi modificado. Quer salvá-lo agora? Create new project Criar novo projeto Click here to show or hide the project notes window. In this window you can put down your project notes. Clique aqui para mostrar ou esconder a janela com comentários do projeto. Nela você pode escrever comentários e observações sobre o seu projeto. My home Minha pasta Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Clique aqui para mostrar ou esconder o Mixer de Efeitos. O Mixer de Efeitos é uma poderosa ferramenta para gerenciar os efeitos utilizados na sua música. Você pode inserir efeitos em diferentes canais de efeito. By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Pressionando este botão você pode mostrar ou esconder o Editor de Arranjo. Com a ajuda do Editor de Arranjo você pode editar os trechos da sua música especificando quando eles serão tocados. Você também pode mover amostras (ex. amostras ou loops de rap ou funk) diretamente para o Editor de Arranjo. Untitled Sem_nome Recently opened projects Arquivos usados recentemente My computer Meu computador &Open... &Abrir... Help not available Ajuda não disponível Save current project Salvar projeto atual Show/hide Automation Editor Mostrar/esconder Editor de Automação Recently opened project Projetos usados recentemente Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Atualmente não há ajuda disponível no LMMS. Por favor visite http://lmms.sf.net/wiki para ter acesso a mais infromações sobre LMMS. Import... Importar... E&xport... &Renderizar... My presets Minhas pré definições &Project &Projeto Could not save config-file O arquivo de configuração não pode ser salvo Working directory Pasta de trabalho Export current project Exportar projeto atual My projects Meus projetos My samples Minhas amostras Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Clique aqui para mostrar ou esconder o Editor de Automação. Com ele você pode editar os valores dinâmicos de automação facilmente. Version %1 Versão %1 Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. O arquivo de configuração %1 não pode ser salvo. Provavelmente voc6e não tem permissão de escrita para este arquivo. Por favor certifique-se que você tem permissão de escrita para este arquivo e tente novamente. Project recovery Recuperação de projeto Settings Opções Project not saved Projeto não salvo The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. A pasta de trabalho do LMMS %1 não existe. Posso criá-la? Você pode mudá-la depois indo em Editar -> Opções. Show/hide Beat+Bassline Editor Mostrar/esconder Editor de Bases Root directory Diretório raiz It looks like the last session did not end properly. Do you want to recover the project of this session? Parece que a última sessão não foi encerrada corretamente. Você quer recuperar o projeto da última sessão? By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Pressionando este botão você pode mostrar ou esconder o Editor de Bases. No Editor de Bases você pode criar as batidas e a linha de baixo para sua base adicionando ou removendo canais, copiando e colando sequências de batidas e/ou sequências de linha de baixo, ou o que mais você quiser. Show/hide controller rack Mostrar/esconder a Estante de Controladorer Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Denominator Denominador Métrico Meter Numerator Numerador Métrico TIME SIG COMPASSO MeterModel Numerator Numerador Denominator Denominador MidiAlsaRaw::setupWidget DEVICE DISPOSITIVO MidiAlsaSeq::setupWidget DEVICE DISPOSITIVO MidiController unnamed_midi_controller controlador-midi-sem-nome MIDI Controller Controlador MIDI MidiImport You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Você não configurou um banco de sons (soundfont) padrão na caixa de diálogo (Editar->Opções). Desta maneira nenhum som será tocado depois de importar um arquivo MIDI. Você pode baixar o banco de sons General MIDI soundfont dentro da caixa de diálogo de opções e tentar novamente. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. Você não compilou o LMMS com suporte a SoundFont2 player, que é usado para adicionar sons por padrão a arquivos MIDI importados. Desta maneira nenhum som será executado depois de importar arquivos MIDI. Setup incomplete Configuração incompleta MidiOss::setupWidget DEVICE DISPOSITIVO MidiPort Receive MIDI-events Receber eventos MIDI Output MIDI program Saída do programa MIDI Output channel Canal de saída Send MIDI-events Enviar eventos MIDI Output controller Saída do controlador Input controller Entrada do controlador Input channel Canal de entrada Fixed output note Nota fixa na saída Fixed input velocity Intensidade fixa de entrada Fixed output velocity Intensidade fixa de saída Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Volume Final Vibrato OscillatorObject Osc %1 fine detuning right Ajuste fino direito %1 Osc %1 volume Volume Osc %1 Osc %1 phase-offset Defasamento Osc %1 Osc %1 coarse detuning Ajuste bruto Osc %1 Modulation type %1 Tipo de modulação %1 Osc %1 stereo phase-detuning Ajuste de fase estéreo Osc %1 Osc %1 waveform Forma de Onda Osc %1 Osc %1 fine detuning left Ajuste fino esquerdo Osc %1 Osc %1 wave shape Formato de onda Osc %1 Osc %1 panning Panorâmico Osc %1 Osc %1 harmonic PatmanView Loop Loop Tune Afinar Patch-Files (*.pat) Arquivos de Patch (*.pat) Open other patch Abrir outro patch Tune mode Modo de afinação Open patch file Abrir arquivo de patch Loop mode Modo de loop No file selected Nenhum arquivo selecionado Click here to open another patch-file. Loop and Tune settings are not reset. Clique aqui para abrir outro aquivo com patch. Configurações de Loop e Afinação não serão perdidas. Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Aqui você pode ligar ou desligar o modo de Loop. Se ligado, PartMan irá utilizar a informação disponível no arquivo para loop. Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Aqui você pode ligar ou desligar o Modo de afinação. Se ligado, PatMan irá afinar a sua amostra de acordo com a frequência da nota. PatternView Open in piano-roll Abrir no Editor de Notas MIDI Remove steps Remover passo Clear all notes Limpar todas as notas Add steps Adicionar passo double-click to open this pattern in piano-roll use mouse wheel to set volume of a step duplo clique para abrir esta sequência no Editor de notas MDll use a roda do mouse para midificar o volume de cada passo Reset name Restaurar nome Change name Mudar nome PeakController Peak Controller Bug Problema no Controlador de Picos Peak Controller Controlador de Picos Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. Devido a um problema na versão mais antiga do LMMS, os controladores de pico não pode se conectar corretamente. Certifique-se de que os controladores de pico estão conectados corretamente e volte a salvar este arquivo. Desculpe por qualquer inconveniente causado. PeakControllerDialog PEAK Pico LFO Controller Controlador de LFO PeakControllerEffectControlDialog AMNT QNTD BASE BASE ATCK ATQU DCAY DCAI MULT MULT Amount Multiplicator: Multiplicador de quantidade: Base amount: Quantidade de base: Attack: Ataque: Modulation amount: Quantidade de modulação: Release: Relaxamento: PeakControllerEffectControls Amount Multiplicator Multiplicador de quantidade Attack Ataque Modulation amount Quantidade de modulação Abs Value Valor Abs Mute output Deixar saída muda Base value Valor base Release Relaxamento PianoRoll Detune mode (Shift+T) Automação para Afinação (Shift+T) Cut selected notes (Ctrl+X) Recortar notas selecionadas (Ctrl+X) Draw mode (Shift+D) Lápis (Shift+D) No chord Sem acorde No scale Sem escala Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Clique aqui e a automação para afinação será ativada. Nela você pode clicar na nota para abrir sua automação de afinação. Você pode utilizar esta ferramenta para fazer glissandos de uma altura para outra. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode ouvir a música feita no editor de arranjo ou no editor de batida tocando atrás. Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Clique aqui para tocar a sequência atual. Isto é útil enquanto se edita. A sequência irá entrar em loop automaticamente quando chegar ao fim. Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis. Note Panning Panorâmico da nota Erase mode (Shift+E) Borracha (Shift+E) Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Clique aqui e as notas selecionadas serão cortadas para dentro da área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência usando o botão de colar. Click here and the notes from the clipboard will be pasted at the first visible measure. Clique aqui e as notas na área de transferência serão coladas no primeira grade visível. Note Volume Volume da nota Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Piano-Roll - no pattern Editor de Notas MIDI - nenhuma sequência Mark/unmark current semitone Marcar/desmarcar o semitom atual Click here to stop playback of current pattern. Clique aqui para parar a reprodução da sequência atual. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode editá-las depois. Play/pause current pattern (Space) Tocar/pausar sequência atual (Espaço) Unmark all Desmarcar tudo Mark current scale Marcar a escala atual Mark current chord Marcar o acorde atual Select mode (Shift+S) Modo de Seleção (Shift+S) Last note Última nota Note lock Travar nota Piano-Roll - %1 Editor de Notas MIDI - %1 Paste notes from clipboard (Ctrl+V) Colar notas da área de transferência (Ctrl+V) Record notes from MIDI-device/channel-piano Gravar notas do dispositivo MIDI ou Editor de Notas MIDI Copy selected notes (Ctrl+C) Copiar notas selecionadas (Ctrl+C) Stop playing of current pattern (Space) Parar de tocar a sequência atual (Espaço) Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Clique aqui e modo de seleção será ativado. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Este modo torna possível a seleção de notas. Alternativamente você pode pressionar Crtl enquanto estiver usando o lápis para utilizar o modo de seleção temporariamente. Please open a pattern by double-clicking on it! Por favor abra um a sequência com um duplo clique sobre ela! Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Clique aqui e as notas selecionadas serão copiadas para a área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência clicando no botão de colar. Record notes from MIDI-device/channel-piano while playing song or BB track Gravar notas a partir do dispositivo MIDI ou do Editor de Notas MIDI enquanto toca o Arranjo ou uma Base This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Por favor entre com um novo valor entre %1 e %2: PianoView Base note Nota base Plugin Error while loading plugin Erro ao carregar plugin Failed to load plugin "%1"! Falha ao carregar o plugin "%1"! Plugin not found Plugin não encontrado The plugin "%1" wasn't found or could not be loaded! Reason: "%2" O plugin "%1" não pode ser carregado! Motivo: "%2" LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer Compressed OGG-File (*.ogg) Arquivo OGG compactado (*.ogg) WAV-File (*.wav) Arquivo WAV (*.wav) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget No Não Yes Sim Maker: Marcador: File: Arquivo: Name: Nome: Copyright: Channels In: Canais de Entrada: In Place Broken: Com Local Quebrado: Channels Out: Canais de Saída: Requires Real Time: Requer Processamento em Tempo Real: Real Time Capable: Capacitado para Processamento em Tempo Real: File: %1 SampleBuffer DrumSynth-Files (*.ds) Arquivos DrumSynth (*.ds) AU-Files (*.au) Arquivos AU (*.au) Wave-Files (*.wav) Arquivos Wave (*.wav) Open audio file Abrir arquivo de áudio AIFF-Files (*.aif *.aiff) Arquivos AIFF (*.aif *.aiff) RAW-Files (*.raw) Arquivos RAW (*.raw) OGG-Files (*.ogg) Arquivos OGG (*.ogg) VOC-Files (*.voc) Arquivos VOC (*.voc) FLAC-Files (*.flac) Arquivos FLAC (*.flac) SPEEX-Files (*.spx) Arquivos SPEEX (*.spx) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView Cut Recortar Copy Copiar Paste Colar Delete (middle mousebutton) Excluir (botão do meio do mouse) Set/clear record Armar/desarmar gravação double-click to select sample Duplo clique para selecionar amostra Mute/unmute (<Ctrl> + middle click) Mudo/Não Mudo (<Ctrl> + middle click) SampleTrack Sample track Áudio Amostras Volume Volume SampleTrackView VOL VOL Track volume Volume da pista Channel volume: Volume do canal: SongEditor Add beat/bassline Adicionar Base Tempo Andamento Record samples from Audio-device Gravar amostras do Dispositivo de Áudio Add automation-track Adicionar pista de automação Master pitch Altura Final Add sample-track Adicionar pista de amostra Song-Editor Editor de Arranjo TEMPO/BPM ANDAMENTO/BPM master pitch altura final Record samples from Audio-device while playing song or BB track Gravar amostras a partir do dispositivo de Áudio enquanto reproduz o arranjo ou base master volume volume final Master volume Volume Final Error in file Erro no arquivo Could not open file Não é possível abrir o arquivo Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Clique aqui se você quer parar de tocar a música. O marcador de posição (verde), será ajustado para o início da música. The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). o andamento de uma música é especificado em batidas por minuto (BPM). Se voc6e precisar mudar o andamento de sua música, mude esse valor. Todo compasso tem 4 batidas, logo o andamento em BPM especificara a quantidade de batidas dividida por 4. Draw mode Lápis Stop song (Space) Parar música (Espaço) Play song (Space) Tocar música (Espaço) Edit mode (select and move) Modo de Edição (seleciona e move) Could not write file Não é possivel salvar o arquivo Value: %1% Valor: %1% High quality mode Modo de alta qualidade Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. Não foi possível abrir %1 para escrita. Provavelmente você não tem permissão para escrita deste arquivo. Por favor, certifique-se de ter permissão para escrever nesse arquivo e tente novamente. Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Não foi possível abrir o arquivo %1. Provavelmente você não tem permissão para ler este arquivo. Por favor certifique-se que você tenha permissão de leitura para o arquivo e tente novamente. Value: %1 semitones Valor: %1 semitons Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Clique aqui se você quer tocar toda a música. A música iniciará no posição do marcador (verde). Você pode move-lo enquanto estiver tocando. The file %1 seems to contain errors and therefore can't be loaded. O arquivo %1 parece conter erros e por isso não pode ser carregado. tempo of song andamento da música SpectrumAnalyzerControlDialog Linear spectrum Espectro linear Linear Y axis Linear no eixo Y SpectrumAnalyzerControls Linear spectrum Espectro linear Linear Y axis Linear no eixo Y Channel mode Modo de Canal TempoSyncKnob &Help Aj&uda Synced to Quarter Note Sincronizado com 1/4 de Nota Whole note Nota inteira Half note Meia nota Synced to Eight Beats Sincronizado com Oito Batidas 32nd note 32ª nota No Sync Sem Sincronia Synced to 16th Note Sincronizado com a 16ª Nota Eight beats Oito batidas Tempo Sync Sincronia Synced to 32nd Note Sincronizado com a 32ª Nota Synced to Whole Note Sincronizado com a Nota Inteira Synced to 8th Note Sincronizado com a 8ª Nota Quarter note 1/4 de nota 8th note 8ª nota 16th note 16ª nota Custom... Personalizado... Custom Personalizado Synced to Half Note Sincronizado com Meia Nota TimeDisplayWidget click to change time units clique para mudar as unidades de tempo TrackContainer Couldn't open file Não é possível abrir o arquivo Loading project... Carregando projeto... Importing FLP-file... Importando arquivo FLP... Cancel Cancelar Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Não foi possível encontrar um filtro para inportar o arquivo %1. Você poderia converter este arquivo em um formato suportado pelo LMMS usando outro aplicativo. Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Não foi possível abrir o arquivo %1 para leitura. Por favor certifique-se que você tem permissões de leitura para o arquivo e para a pasta e tente novamente! Couldn't import file não foi possivel importar arquivo Importing MIDI-file... Importando arquivo MIDI... Please wait... Por favor aguarde... TripleOscillatorView Mix output of oscillator 1 & 2 Misture as saídas do oscilador 1 e 2 Mix output of oscillator 2 & 3 Misture as saídas do oscilador 2 e 3 cents centésimos Osc %1 fine detuning left: Ajuste fino esquerdo Osc %1: With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Com este botão você pode modificar Ajuste bruto do oscilador %1. Você pode descer o tom do oscilador 12 semitons (1 oitava) para cima e para baixo. Isto é útil para criar sons com um acorde. Use phase modulation for modulating oscillator 3 with oscillator 2 Use o modulador de fase para modular o oscilador 3 com o oscilador 2 Use an exponential wave for current oscillator. Use uma onda exponencial no oscilador atual. Osc %1 panning: Panorâmico Osc %1: Use a square-wave for current oscillator. Use uma onda quadrada no oscilador atual. Osc %1 stereo phase-detuning: Defasamento estéreo Osc %1: semitones semitons With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Com este botão você pode ajustar o defasamento estéreo do oscilador %1. O defasador estéreo especifica o tamanho da diferença entre a defasagem entre os canais esquerdo e direito. Isto é muito bom para abrir o som. Use frequency modulation for modulating oscillator 2 with oscillator 1 Use o modulador de frequência para modular o oscilador 2 com o oscilador 1 Use phase modulation for modulating oscillator 2 with oscillator 1 Use o modulador de fase para modular o oscilador 2 com o oscilador 1 Osc %1 volume: Volume Osc %1: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Com este botão você pode ajustar o panning do oscilador %1. O valor -100 significa 100% à esquerda e 100 move a saida do oscilador para a direita. With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Com este botão você pode manipular o Ajuste fino do oscilador %1 para o canal esquerdo. O Ajuste fino varia entre -100 centésimos e +100 centésimos. Isto é útil para criar sons 'gordos'. Osc %1 fine detuning right: Ajuste fino direito %1: Use amplitude modulation for modulating oscillator 2 with oscillator 1 Use o modulador de amplitude para modular o oscilador 2 com o oscilador 1 Synchronize oscillator 2 with oscillator 3 Sincronize o oscilador 2 com o oscilador 3 Use a saw-wave for current oscillator. Use uma onda dente de serra no oscilador atual. Use white-noise for current oscillator. Use ruído branco no oscilador atual. Use frequency modulation for modulating oscillator 3 with oscillator 2 Use o modulador de frequência para modular o oscilador 3 com o oscilador 2 With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Com este botão você pode ajustar o volume do oscilador %1. Quando você seleciona o valor 0, o oscilador é desligado. Com outros valores você vai escutar o oscilador tão alto quanto você o ajustar. Use a moog-like saw-wave for current oscillator. Use uma onda dente de serra moog no oscilador atual. Osc %1 coarse detuning: Ajuste bruto Osc %1: With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Com este botão você pode ajustar o defasamento do oscilador %1. Isso significa que você pode move o ponto de uma oscilação onde o oscilador começa à oscilar. Por exemplo, se você tem uma onda-seno e tem uma compensação de fase de 180 graus, a onda vai primeiro descer. É o mesmo com onda-quadrada. Osc %1 phase-offset: Defasamento Osc %1: degrees graus With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Com este botão você pode modificar o ajuste fino do oscilador %1 para o canal direito. O ajuste fino varia entre -100 centésimos e +100 centésimos. Isto é útil para criar sons 'gordos'. Use amplitude modulation for modulating oscillator 3 with oscillator 2 Use o modulador de amplitude para modular o oscilador 3 com o oscilador 2 Use a sine-wave for current oscillator. Use uma onda senoidal no oscilador atual. Synchronize oscillator 1 with oscillator 2 Sincronize o oscilador 1 com o oscilador 2 Use a user-defined waveform for current oscillator. Use uma forma de onda definida pelo usuário no oscilador atual. Use a triangle-wave for current oscillator. Use uma onda triangular no oscilador atual. Ui Contributors ordered by number of commits: Colaboradores ordenados por ordem de contribuição: Involved Envolvidos VersionedSaveDialog Increment version number Incrementar número da versão Decrement version number Decrementar número da versão VestigeInstrumentView by por Open VST-plugin preset Abrir pré definição de plugin VST - VST plugin control - Controle de plugins VST Click here, if you want to save current VST-plugin preset program. Clique aqui se você precisa salvar o programa de pré definição do plugin VST. Click here to select presets that are currently loaded in VST. Clique aqui para selecionar a pré definição que está sendo carregada no VST. Previous (-) Anterior (-) Open other VST-plugin Abrir outro plugin VST Preset Pré definição Click here, if you want to control VST-plugin from host. Clique aqui se você precisa controlar o plugin VST por outro host. EXE-files (*.exe) Arquivos EXE (*.exe) DLL-files (*.dll) Arquivos DLL (*.dll) Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Clique aqui para mostrar ou esconder a interface gráfica do usuário (GUI) do plugin VST. Show/hide GUI Mostrar/esconder GUI Save preset Salvar pré definição Open VST-plugin Abrir plugin VST Control VST-plugin from LMMS host Controlar plugin VST a partir do host LMMS Next (+) Próximo (+) Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Clique aqui se você quer abrir outro plugin VST. clicando neste botão, você verá uma caixa da seleção para escolher o arquivo. Turn off all notes Desligar todas as notas Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Clique aqui se você precisa abrir outro tipo de arquivo de pré definição de plugin VST como: *.fxp, *.fxb. Click here, if you want to switch to another VST-plugin preset program. Clique aqui se você precisar trocar para outro programa de pré definições de plugin VST. No VST-plugin loaded Nenhum plugin VST carregado VstEffectControlDialog Open VST-plugin preset Abrir pré definição de plugin VST Click here, if you want to save current VST-plugin preset program. Clique aqui se você precisa salvar o programa de pré definição do plugin VST. Click here to select presets that are currently loaded in VST. Clique aqui para selecionar a pré definição que está sendo carregada no VST. Previous (-) Anterior (-) Click here, if you want to control VST-plugin from host. Clique aqui se você deseja controlar o plugin VST por outro host. Show/hide Mostrar/esconder Save preset Salvar pré definição Effect by: Efeito por: Control VST-plugin from LMMS host Controlar plugin VST a partir do host LMMS Next (+) Próximo (+) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Clique aqui se você precisa abrir outro tipo de arquivo de pré definição de plugin VST como: *.fxp, *.fxb. Click here, if you want to switch to another VST-plugin preset program. Clique aqui se você precisar trocar para outro programa de pré definições de plugin VST. VstPlugin " ' .FXB .FXP .fxb .fxp Loading plugin Carregando plugin Save Preset Salvar pré definição Open Preset Abrir pré definição Vst Plugin Preset (*.fxp *.fxb) Pré definição de Plugin VST (*.fxp *.fxb) : default : padrão Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Desenhe sua própria forma de onda aqui utilizando seu mouse no gráfico. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Click to normalize Invert Click to invert Smooth Click to smooth Sine wave Onda senoidal Click for sine wave Triangle wave Onda triangular Click for triangle wave Click for saw wave Square wave Onda quadrada Click for square wave ZynAddSubFxInstrument Resonance Center Frequency Frequência Central de Ressonância Filter Resonance Ressonância do Filtro Bandwidth Largura da Banda Filter Frequency Frequência do Filtro Resonance Bandwidth Banda de Ressonância Forward MIDI Control Change Events Próximo evento de mudança de controle MIDI Portamento FM Gain Ganho da FM ZynAddSubFxView BW LBnd RES FREQ PORT Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Clique aqui para mostrar ou esconder a interface do usuário (GUI) do ZynAddSubFX. Filter Frequency: Frequência do Filtro: RES CF RES FC RES BW RES Bnd Portamento: Resonance center frequency: Frequência Central de Ressonância: Filter Resonance: Ressonância do Filtro: FM GAIN GANHO FM Bandwidth: Largura da Banda: Forward MIDI Control Changes Próximo evento de mudança de controle MIDI Resonance bandwidth: Banda de Ressonância: FM Gain: Ganho da FM: Show GUI Mostrar GUI audioFileProcessor Amplify Amplificar Stutter Gaguejar Reverse sample Amostra reversa End of sample Fim da amostra Start of sample Início da amostra Loopback point Loop mode Modo de loop Interpolation mode None Linear Sinc bbEditor Add beat/bassline Adicionar base Click here to stop playing of current beat/bassline. Clique aqui para parar a base atual. Add automation-track Adicionar pista de automação Stop playback of current beat/bassline (Space) Parar reprodução da base atual (Espaço) Remove steps Remover passos Beat+Bassline Editor Editor de Bases Add steps Adicionar passos Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Clique aqui se você quiser tocar a base atual. A base entra em loop automaticamente quando chega ao fim. Play/pause current beat/bassline (Space) Tocar/pausar a base atual (Espaço) bbTCOView Open in Beat+Bassline-Editor Abrir no editor de Bases Change color Mudar cor Reset name Restaurar nome Change name Mudar nome Reset color to default bbTrack Beat/Bassline %1 Base %1 Clone of %1 Clone de %1 bitInvader Samplelength Tamanho de amostra bitInvaderView Draw your own waveform here by dragging your mouse on this graph. Desenhe sua própria forma de onda aqui utilizando seu mouse no gráfico. White noise wave Ruído branco Click here to smooth waveform. Clique aqui para suavizar a forma de onda. Click here for a saw-wave. Clique aqui para usar uma onda dente de serra. Sine wave Onda senoidal Click here for white-noise. Clique aqui para usar um ruído branco. Smooth Suave Interpolation Interpolação Square wave Onda quadrada Saw wave Onda dente de serra Normalize Normalização Click for a sine-wave. Clique aqui para usar uma onda senoidal. Triangle wave Onda triangular Click here for a square-wave. Clique aqui para usar uma onda quadrada. User defined wave Onda definida pelo usuário Click here for a triangle-wave. Clique aqui para usar uma onda triangular. Sample Length Tamanho da Amostra Click here for a user-defined shape. Clique aqui para usar uma onda definida pelo usuário. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Error Erro Could not open file Não é possível abrir o arquivo Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Não é possível abrir o arquivo %1 para gravação. Por favor certifique-se que você tem permissão para gravação no arquivo e se o arquivo se encontra no diretório e tente novamente! Error while determining file-encoder device. Please try to choose a different output format. Erro ao determinar o dispositivo codificador de arquivo. Por favor tente um formato de saída diferente. Rendering: %1% Renderizando: %1% Export project to %1 Exportar projeto para %1 fader Please enter a new value between %1 and %2: Por favor entre com um novo valor entre %1 e %2: graphModel Graph Gráfico kickerInstrument Gain Ganho End frequency Frequência final Start frequency Frequência de partida Length Distortion Start Distortion End Envelope Slope Noise Ruído Click Frequency Slope Start from note End to note kickerInstrumentView Gain: Ganho: Start frequency: Frequência de partida: End frequency: Frequência final: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help Aj&uda Please enter a new value between -96.0 dBV and 6.0 dBV: Por favor entre um novo valor entre -96.0 dBV e 6.0 dBV: Please enter a new value between %1 and %2: Por favor entre com um novo valor entre %1 e %2: ladspaBrowserView Type: Tipo: This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Esta caixa de diálogo contém informações de todos os plugins LADSPA do LMMS que estão disponíveis localmente. Os plugins estão divididos em cinco categorias baseadas em uma interpretação do tipo de portas e nomes. Efeitos Disponíveis são todos os que podem ser usados pelo LMMS. Para o LMMS usar um efeito, é necessário antes de tudo que ele seja um efeito, ou seja, que ele tenha tanto canais de entrada como tamém canais de saída. O LMMS identifica um canal de entrada como uma porta de informações de áudio com o nome de "entrada". Canais de saída são identificados como "saída". Além disso o efeito deve ter o mesmo número de entradas e saídas, assim como ter capacidade de processamento em tempo real. Efeitos Indisponíveis são aqueles que são identificados como efeitos mas, ou não tem o mesmo número de entradas e saídas, ou não são capazes de executar processamento em tempo real. Instrumentos são plugins com somente canais de saída identificados. Ferramentas de análise são plugins com somente canais de entrada identificados. Sei lá.. são plugins que nenhuma entrada ou saída foi identificada. Clicando duas vezes com o mouse em qualquer plugin, voc6e terá informações sobre as portas. Analysis Tools Ferramentas de Análise Unavailable Effects Efeitos Indisponíveis Instruments Instrumentos Available Effects Efeitos Disponíveis Don't know Sei lá.. ladspaDescription Plugins Plugins Description Descrição ladspaPortDialog Yes Sim Name Nome Rate Taxa Type Tipo Audio Áudio Float Decimal Input Entradas Ports Portas Integer Inteiro SR Dependent Dependente de SR Output Saídas Min < Default < Max Min < Padrão < Máx Direction Direção Logarithmic Logarítmico Control Controle Toggled Alternado lb302Synth Dead Morto Slide Gradual VCF Envelope Mod VCF - Modulação do Envelope VCF Resonance VCF - Ressonância Accent Realce Slide Decay Decaimento gradual VCF Envelope Decay VCF - Decaimento do Envelope Waveform Forma de onda Distortion Distorção 24dB/oct Filter Filtro 24dB/oct VCF Cutoff Frequency VCF - Frequência de corte lb302SynthView DIST: Click here for a square-wave with a rounded end. Clique aqui para usar uma onda quadrada arredondada. Slide Decay: Decaimento gradual: Click here for an exponential wave. Clique aqui para usar uma onda exponencial. White noise wave Ruído branco Click here for a saw-wave. Clique aqui para usar uma onda dente de serra. Sine wave Onda senoidal Click here for white-noise. Clique aqui para usar um ruído branco. Decay: Decaimento: Env Mod: Mod Env: Moog wave Onda Moog Resonance: Ressonância: Rounded square wave Onda quadrada arredondada Square wave Onda quadrada 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/octave, filtro 3 pole Saw wave Onda dente de serra Click here for a moog-like wave. Clique aqui para usar uma onda tipo moog. Click for a sine-wave. Clique aqui para usar uma onda senoidal. Triangle wave Onda triangular Click here for a square-wave. Clique aqui para usar uma onda quadrada. Cutoff Freq: Freq Corte: Click here for a triangle-wave. Clique aqui para usar uma onda triangular. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth Dead Morto Slide Gradual VCF Envelope Mod VCF - Modulação do Envelope VCF Resonance VCF - Ressonância Accent Realce Slide Decay Decaimento gradual VCF Envelope Decay VCF - Decaimento do Envelope Waveform Forma de onda Distortion Distorção 24dB/oct Filter Filtro 24dB/oct VCF Cutoff Frequency VCF - Frequência de corte lb303SynthView DEC DEC CUT CORTE RES RESS DIST DIST WAVE ONDA DIST: DISTORÇÃO: SLIDE GRADUAL WAVE: ONDA: Slide Decay: Decaimento gradual: Decay: Decaimento: Env Mod: Mod Env: Resonance: Ressonância: 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/octave, filtro 3 pole ENV MOD MOD ENV Cutoff Freq: Freq Corte: malletsInstrument ADSR ADSR Reso Resso Agogo Beats Batidas Bowed De Arco Clump Glass Taça Speed Velocidade Wood1 Madeira-1 Wood2 Madeira-2 Vibrato Freq Frequência do Vibrato Vibrato Gain Ganho do Vibrato LFO Depth LFO - Profundidade Two Fixed Duas Fixas LFO Speed LFO - Velocidade Marimba Tibetan Bowl Tigelas Tibetanas Tuned Bar Barra Afinada Motion Movimento Spread Propagação Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Sua instalação Stk parece estar incompleta. Por favor certifique-se que o pacote Stk (Stk-package) esteja completamente instalado! Position Posição Crossfade Transição Uniform Bar Barra Uniforme Vibraphone Vibrafone Hardness Dificuldade Pressure Pressão Modulator Modulador Missing files Arquivos perdidos Stick Mix Percussa Mix Tubular Bells Sinos Tubulares malletsInstrumentView ADSR ADSR: Bowed De Arco Speed Velocidade LFO Depth Prondudade do LFO LFO Speed LFO - Velocidade Vib Gain: Ganho Vibracional: Vib Freq: Frequência de Vibração: Motion: Movimento: LFO Depth: Profundidade do LFO: Motion Movimento LFO Speed: Velocidade do LFO: Speed: Velocidade: Spread Propagação Position Posição Crossfade Transição Hardness Dificuldade Hardness: Dificuldade: Pressure Pressão Stick Mix: Mistura da Percussão: Position: Posição: Spread: Propagação: Crossfade: Transição: Instrument Instrumento Modulator Modulador Modulator: Modulador: Pressure: Pressão: Vibrato Vib Gain Ganho Vibr Vib Freq Freq Vibr Vibrato: Stick Mix Percussa Mix manageVSTEffectView Close Fechar VST Sync Sincronização VST Click here if you want to synchronize all parameters with VST plugin. Clique aqui para sincronizar todos os parâmetros com o plugin VST. Automated Automatizado Click here if you want to display automated parameters only. Clique aqui para exibir somente os parâmetros automatizados. Close VST effect knob-controller window. Fechar janela de botões de controle do efeito VST. - VST parameter control - Controle de parâmetros de VST's manageVestigeInstrumentView - VST plugin control - Controle de plugins VST Close Fechar Close VST plugin knob-controller window. Fechar janela de botões de controle do efeito VST. VST Sync Sincronização VST Click here if you want to synchronize all parameters with VST plugin. Clique aqui para sincronizar todos os parâmetros com o plugin VST. Automated Automatizado Click here if you want to display automated parameters only. Clique aqui para exibir somente os parâmetros automatizados. nineButtonSelector &Help Aj&uda opl2instrument FM Patch Programação Op 1 Key Scaling Rate Op 1 Mudança de Tom da Escala Op 2 Key Scaling Rate Op 2 Mudança de Tom da Escala Op 1 Decay Op 1 Decaimento Op 1 Level Op 1 Nível Op 2 Decay Op 2 Decaimento Op 2 Level Op 2 Nível Op 1 Attack Op 1 Ataque Op 2 Attack Op 2 Ataque Op 1 Vibrato Op 2 Vibrato Tremolo Depth Profundidade do Tremolo Op 2 Frequency Multiple Op 2 Múltiplo da frequência Op 1 Frequency Multiple Op 1 Múltiplo da frequência Op 1 Feedback Op 1 Resposta Vibrato Depth Profundidade do Vibrato Op 1 Release Op 1 Relaxamento Op 2 Release Op 2 Relaxamento Op 1 Level Scaling Op 1 Nível Escalar Op 2 Level Scaling Op 2 Nível Escalar Op 2 Percussive Envelope Op 2 Envelope Percussivo Op 1 Percussive Envelope Op 1 Envelope Percussivo Op 2 Waveform Op 2 Forma de Onda Op 1 Waveform Op 1 Forma de Onda Op 2 Tremolo Op 2 Relaxamento Op 1 Tremolo Op 2 Sustain Op 2 Sustentação Op 1 Sustain Op 1 Sustentação organicInstrument Volume Distortion Distorção organicInstrumentView cents centésimos Osc %1 panning: Panorâmico Osc %1: Randomise Aleatorizar Osc %1 volume: Volume Osc %1: Distortion: Distorção: Volume: Osc %1 waveform: Forma de Onda Osc %1: The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Bass Grave Shift Register width Desconsiderar Tamanho do registro Sweep RtShift amount Quantidade da varredura RtShift Channel 1 volume Canal 1 volume Channel 4 volume Canal 4 volume Channel 3 volume Canal 3 volume Channel 2 volume Canal 2 volume Length of each step in sweep Tamanho de cada passo na varredura Left Output level Nível de Saída Esquerdo Sweep direction Direção da varredura Channel 4 to SO1 (Right) Canal 4 para SO1 (Direita) Channel 3 to SO1 (Right) Canal 3 para SO1 (Direita) Channel 2 to SO1 (Right) Canal 2 para SO1 (Direita) Channel 1 to SO1 (Right) Canal 1 para SO1 (Direita) Right Output level Nível de Saída Direito Treble Agudo Sweep time Varredura temporal Channel 4 to SO2 (Left) Canal 4 para SO2 (Esquerda) Channel 3 to SO2 (Left) Canal 3 para SO2 (Esquerda) Channel 2 to SO2 (Left) Canal 2 para SO2 (Esquerda) Channel 1 to SO2 (Left) Canal 1 para SO2 (Esquerda) Wave Pattern Duty Trabalho da Frente de Onda Volume sweep direction Direção da varredura de volume papuInstrumentView Bass Grave Wave pattern duty Trabalho da frente de onda Bass: Grave: Shift Register Width Desconsiderar Tamanho do registro Wave Channel Volume Canal da Onda - Volume Sweep Time: Varredura temporal: Draw the wave here Desenhe a onda aqui Sweep RtShift amount Quantidade da varredura RtShift Channel1 to SO2 (Left) Canal 1 para SO2 (Esquerda) Channel3 to SO2 (Left) Canal 3 para SO2 (Esquerda) Channel2 to SO2 (Left) Canal 2 para SO2 (Esquerda) Channel4 to SO2 (Left) Canal 4 para SO2 (Esquerda) Length of each step in sweep Tamanho de cada passo na varredura Wave pattern duty: Trabalho da Frente de Onda: Wave Pattern Frente de onda SO1 Volume (Right): SO1 Volume (Esquerdo): Sweep Direction Direção da varredura The amount of increase or decrease in frequency A quantidade de acréscimo e decréscimo em frequência The delay between step change O atraso entre cada passo de mudança Treble Agudo Noise Channel Volume: Canal de Ruído - Volume: The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. O ciclo de trabalho é a razão da duração (tempo) do sinal LIGADO versus o total do período do sinal. Sweep RtShift amount: Quantidade da varredura RtShift: Channel1 to SO1 (Right) Canal 1 para SO1 (Direita) Channel3 to SO1 (Right) Canal 3 para SO1 (Direita) Channel2 to SO1 (Right) Canal 2 para SO1 (Direita) Channel4 to SO1 (Right) Canal 4 para SO1 (Direita) Square Channel 1 Volume Canal 1 Volume Square Channel 2 Volume Canal 2 Volume Square Channel 1 Volume: Canal 1 Volume: Square Channel 2 Volume: Canal 2 Volume: Treble: Agudo: Sweep Time Varredura temporal SO1 Volume (Right) SO1 Volume (Esquerdo) Length of each step in sweep: Tamanho de cada passo na varredura: Noise Channel Volume Canal de Ruído - Volume Wave Channel Volume: Canal da Onda - Volume: Wave Pattern Duty Trabalho da Frente de Onda SO2 Volume (Left): SO2 Volume (Direito): Volume Sweep Direction Direção da varredura de volume The rate at which increase or decrease in frequency occurs A taxa na qual cresce ou decresce a frequência SO2 Volume (Left) SO2 Volume (Direito) pluginBrowser Additive Synthesizer for organ-like sounds Síntetizador de Síntese Aditiva para sons tipo de órgão Customizable wavetable synthesizer Sintetizador de formas de onda customizáveis 2-operator FM Synth Dois Operadores de Síntese FM LMMS port of sfxr sfxr para LMMS Filter for importing Hydrogen files into LMMS Filtro para importação de arquivos do Hydrogen para o LMMS Tuneful things to bang on Instrumentos percussivos com afinação para você usar Player for SoundFont files Tocador de arquivos de SounFont Instrument browser Navegador de instrumentos Filter for importing FL Studio projects into LMMS Filtro para importação de projetos do FL Studio para o LMMS List installed LADSPA plugins Lista dos plugins LADSPA instalados Plugin for controlling knobs with sound peaks Plugin para controlar botões com os picos sonoros Filter for importing MIDI-files into LMMS Filtro para importação de arquivos MIDI para o LMMS GUS-compatible patch instrument Pré definição de instrumento compatível com GUS (Gravis Ultrasound) Vibrating string modeler Modelador de Cordas vibrantes Instrument plugins Plugins de Instrumentos VST-host for using VST(i)-plugins within LMMS Servidor (host) VST para usar plugins VST(i) com o LMMS Plugin for freely manipulating stereo output Plugin para livre manipulação das saídas estéreo no description sem descrição Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Emulação do MOS6581 e do MOS8580 SID. Este chip foi utilizado no computador Commodore 64. Emulation of GameBoy (TM) APU Emulação do GameBoy (TM) APU Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Arraste um instrumento para uma pista existente no Editor de Arranjo ou no Editor de Bases. Incomplete monophonic imitation tb303 Imitação monofônica incompleta de tb303 plugin for using arbitrary LADSPA-effects inside LMMS. plugin para uso de efeitos LADSPA arbitrários dentro do LMMS. Plugin for enhancing stereo separation of a stereo input file Plugin para melhorar a separação estéreo de um arquivo de entrada estéreo Embedded ZynAddSubFX Poderoso sintetizador ZynAddSubFx embutido no LMMS Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Cu&t Recor&tar &Bold &Negrito &Copy &Copiar &Left &Esquerda &Redo &Refazer &Undo Des&fazer Format Actions Ações de formatação &Justify &Justificar Project notes Notas do projeto &Paste C&olar &Right Di&reita Edit Actions Ações de edição Ctrl+B Ctrl+B Ctrl+C Ctrl+C Ctrl+E Ctrl+E Ctrl+I Ctrl+I Ctrl+J Ctrl+J Ctrl+L Ctrl+L Ctrl+R Ctrl+R Ctrl+U Ctrl+U Ctrl+V Ctrl+V Ctrl+X Ctrl+X Ctrl+Y Ctrl+Y Ctrl+Z Ctrl+Z Put down your project notes here. Faça suas anotações aqui. C&enter C&entro &Color... &Cor... &Underline S&ublinhado &Italic &Itálico renameDialog Rename... Renomear... setupDialog OK OK MISC VÁRIOS General settings Opções gerais AUDIO INTERFACE INTERFACE DE ÁUDIO Paths Locais Performance settings Opções de desempenho Choose background artwork Escolher Papel de Parede do LMMS FL Studio installation directory Pasta de instalação do FL Studio Enable waveform display by default Habilitar visualizador de forma de onda por padrão Reset to default-value Restaurar o valor padrão One instrument track window mode Modo janela com uma pista de instrumento Choose LADSPA plugin directory Escolher a pasta com os plugins LADSPA LMMS working directory Pasta de trabalho do LMMS Choose default SoundFont Escolher SoundFont padrão Please note that most changes won't take effect until you restart LMMS! Por favor note que a maioria das mudanças não terão efeito antes de reiniciar o LMMS! Enable tooltips Habilitar dicas Show restart warning after changing settings Mostrar aviso de reinicialização depois de mudança de configuração Cancel Cancelar Smooth scroll in Song Editor Rolagem suave no Editor de Arranjo Frames: %1 Latency: %2 ms Amostras: %1 Latência: %2 ms MIDI INTERFACE INTERFACE DO MIDI Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Aqui você pode ajustar o tamanho do buffer interno usado pelo LMMS. Valores menores resultam em menor latência (atraso ao usar as teclas ou um controlador midi) mas podem provocar sons não desejados como plocs e bips ou má performance, esses problemas acontecem especialmente em computadores antigos ou sistema com kernel não compilado para trabalhar com processamento em tempo real. Background artwork Papel de parede Compact track buttons Botões de pista compactos Choose FL Studio installation directory Escolher a pasta de instalação do FL Studio Audio settings Configurações de Áudio UI effects vs. performance Efeitos Visuais X Desempenho LADSPA plugin paths Locais de plugins LADSPA Choose artwork-theme directory Escolher a pasta com Temas para LMMS Show playback cursor in AudioFileProcessor Mostrar o cursor de reprodução dentro do AudioFileProcessor Enable auto save feature Habilitar a função de salvamento automático Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Aqui você pode selecionar sua interface de áudio preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, JACK, OSS e outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de áudio selecionada. Compress project files per default Sempre compactar arquivos de projeto HQ-mode for output audio-device Modo de Alta Qualidade para a Saída do dispositivo de áudio BUFFER SIZE TAMANHO DO BUFFER Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Aqui você pode selecionar sua interface de MIDI preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, OSS entre outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de MIDI selecionada. Display volume as dBV Mostrar volume em dBV Choose STK rawwave directory Escolher a pasta de STK rawwave Default Soundfont File Arquivo padrão de Soundfont Sync VST plugins to host playback Sincronizar plugins VST no hospedeiro (host) de reprodução Setup LMMS Configurar LMMS Choose your VST-plugin directory Escolher a pasta com plugins VST Choose LMMS working directory Escolher a pasta de trabalho do LMMS Restart LMMS Reiniciar LMMS STK rawwave directory Pasta de STK rawwave VST-plugin directory Pasta com plugins VST MIDI settings Configurações do MIDI Artwork directory Pasta com Temas para LMMS Enable note labels in piano roll Habilitar camadas de notas no editor de notas MIDI sf2Instrument Bank Banco Gain Ganho Patch Programação Chorus Speed Velocidade do Chorus Reverb Width Tamanho da Reverberação Chorus Depth Profundidade do Chorus Reverb Level Nível de Reverberação Chorus Level Nível de Chorus Chorus Lines Linhas de Chorus Chorus Chorus Reverb Reverberação Reverb Damping Absorção da Reverberação Reverb Roomsize Tamanho da sala em Reverberação sf2InstrumentView Gain Ganho This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Este botão ativa o efeito de reverberação. Ele é útil para efeitos legais, mas só funciona se o arquivo tiver suporte a ele. This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Este botão ativa o efeito de chorus. Ele é útil para efeitos de eco legais, mas só funciona se o arquivo tiver suporte a ele. Click here to open another SF2 file Clique aqui para abrir outro arquivo SF2 Choose the patch Escolher o patch SoundFont2 Files (*.sf2) Arquivos SoundFont2 (*sf2) Apply reverb (if supported) Aplicar reverberação (se suportado) Open SoundFont file Abrir o arquivo SoundFont Apply chorus (if supported) Aplicar chorus (se suportado) Reverb Roomsize: Tamanho da sala em Reverbaração: Chorus Speed: Velocidade do Chorus: Reverb Damping: Absorção da Reverberação: Reverb Width: Tamanho da Reverberação: Chorus Depth: Profundidade do Chorus: Reverb Level: Nível de Reverberação: Chorus Level: Nível de Chorus: Chorus Lines: Linhas de Chorus: Open other SoundFont file Abrir outro arquivo SoundFont sfxrInstrument Wave Form Forma de Onda sidInstrument Chip model Modelo do chip Cutoff Corte Volume Voice 3 off Voz 3 desligada Resonance Ressonância Filter type Tipo de filtro sidInstrumentView Test Teste Sync Sincronização Filtered Filtrado Ring-Mod Modulação em Anel Noise Ruído Pulse Width: Tamanho do Pulso: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. O Decaimento determina o quão rápido a saída vai cair do pico de amplitude até o nível de sustentação. Cutoff frequency: Frequência de corte: Decay: Decaimento: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. A saída da Voz %1 irá permanecer no nível de Sustentação enquanto a nota estiver acionada. Resonance: Ressonância: Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Mod em Anel (Modulação em Anel) substitui a saída da Onda Triangular do Oscilador %1 com a "Modulada em Anel" da combinação entre os Osciladores %1 e %2. Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. A taxa de ataque determina o quão rápido a saída da Voz %1 sai do zaro para o pico de amplitude. Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. A sincronização sincroniza a frequência fundamental do Oscilador %1 com a frequência fundamental do Oscilador %2 produzindo um efeito de "Super Sincronização". Voice3 Off Voz3 Desligada Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Quando o Teste está ativado, ele restaura e trava o Oscilador %1 até o Teste ser desligado. Attack: Ataque: SawTooth Dente de Serra Pulse Wave Onda de Pulso When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Quando o Filtrado está ligado, a Voz %1 será processada através do Filtro. Quando o Filtrado está desligado, a Voz %1 aparecerá diretamente na saída e o Filtro não terá efeito. Triangle Wave Onda Triangular Coarse: Ajuste Bruto: Release: Relaxamento: Sustain: Sustentação: The Coarse detuning allows to detune Voice %1 one octave up or down. O Ajuste bruto permite que você ajuste a Voz %1 em uma oitava ou mais. The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. A resolução de Tamanho do Pulso permite que os movimentos sejam suaves de modo que não sejam percebidas mudanças bruscas. O Pulso da forma de onda em um Oscilador %1 pode ser selecionado para existir um efeito audível. Volume: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. A saída da Voz %1 irá da amplitude do nível Sustentação até a amplitude zero na razão selecionada no Relaxamento. MOS8580 SID MOS6581 SID Low-Pass filter Filtro Passa Baixa Band-Pass filter Filtro Passa Banda High-Pass filter Filtro Passa Alta song Tempo Andamento Master pitch Altura Final Project saved Projeto salvo Master volume Volume Final This project is empty so exporting makes no sense. Please put some items into Song Editor first! Este projeto está vazio, então exportá-lo não faz sentido. Por favor, coloque alguns itens dentro do Editor de Arranjo primeiro! MIDI sequences Sequências MIDI All file types Todos os tipos de arquivo untitled sem nome Select file for project-export... Selecione o arquivo para exportar o projeto... FL Studio projects Projetos do FL Studio Project NOT saved. Projeto NÃO salvo. Import file Importar arquivo The project %1 is now saved. O projeto %1 está salvo agora. Select directory for writing exported tracks... Selecionar pasta para escrita de pistas renderizadas... Empty project Projeto vazio The project %1 was not saved! O projeto %1 não foi salvo! Hydrogen projects Projetos do Hydrogen stereoEnhancerControlDialog WIDE ABRIR Width: Largura: stereoEnhancerControls Width Largura stereoMatrixControlDialog Left to Left Vol: Esq para Esq Vol: Right to Right Vol: Dir para Dir Vol: Right to Left Vol: Dir para Esq Vol: Left to Right Vol: Esq para Dir Vol: stereoMatrixControls Left to Left Esq para Esq Left to Right Esq para Dir Right to Left Dir para Esq Right to Right Dir para Dir timeLine Hint Sugestão After stopping go back to begin Quando parar volta para o começo Press <Ctrl> to disable magnetic loop points. Pressione <Ctrl> para desabilitar os pontos de loop magnéticos. Enable/disable auto-scrolling Ativa/desativa auto-rolagem After stopping go back to position at which playing was started Quando parar volta para a posição que estava quando começou a tocar Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. Pressione <Shift> para mover o começo do ponto de loop; Pressione <Ctrl> para desabilitar os pontos de loop magnéticos. After stopping keep position Quando parar mantém a posição Enable/disable loop-points Ativa/desativa pontos de loop track Solo Muted Mudo trackContentObject Muted Mudo trackContentObjectView Cut Recortar Copy Copiar Hint Sugestão Paste Colar Press <Ctrl> for free resizing. Pressione <Ctrl> para redimensionar livremente. Delete (middle mousebutton) Apagar (botão do meio do mouse) Press <Ctrl> and drag to make a copy. Pressione <Ctrl> e arraste para fazer uma cópia. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 até %5:%6) Current length Tamanho atual Mute/unmute (<Ctrl> + middle click) Mudo/não mudo (<Ctrl> + botão do meio) Current position Posição atual trackOperationsWidget Mute Mudo Solo Clone this track Clonar esta pista Actions for this track Ações para esta pista Remove this track Remover esta pista Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Pressione <Ctrl> enquanto clica em mover-grip para o começo, uma ação de arrastar. Mute this track Deixar esta pista muda Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Carregando plugin Please wait while loading VST-plugin... Por favor, espere enquanto carrego o plugin VST... The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! O plugin VST %1 não pode ser carregado por alguma razão. Se ele rodar com outro programa VST no Linux, por favor entre em contato com um desenvolvedor do LMMS! Failed loading VST-plugin Falha ao carregar plugin VST vibed Fuzziness %1 Encrespar %1 Pickup %1 position Super Pegada %1 posição Length %1 Tamanho %1 Pan %1 String %1 volume Cordas %1 volume String %1 stiffness Cordas %1 dureza Octave %1 Oitava %1 Detune %1 Desafinar %1 Pick %1 position Pegada %1 posição Impulse %1 Impulso %1 vibedView Pan: &Help Aj&uda The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. O seletor "Octave" é usado para escolher que harmônico da nota na corda irá soar mais. Por exemplo, "-2" significa que a corda vibrará duas oitavas abaixo da Fundamental, "F" significa que a corda vibrará na frequência Fundamental e "6" significa que a corda vai vibrar 6 oitavas acima da fundamental. Impulse Editor Editor de Impulso Fuzziness: Encrespando: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. O botão de tamanho modifica o tamanho da corda escolhida. Cordas longas resultam em vibrações longas aliadas a um brilho no som, o porém é que isto ocupa muito processamento da CPU. The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. O botão "S" modifica a dureza da corda selecionada. A dureza da corda interfere no quão longa é a vibração da corda. Quanto menor o valor mais a corda vai soar. Length: Tamanho: The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. O seletor de Corda é usado para escolher que corda os controles estarão editando. O instrumento Vibed pode conter até nove cordas vibrando independentemente. O LED no canto direito inferior do editor de forma de onda indica que a corda selecionada está ativa. White noise wave Ruído branco Click here to smooth waveform. Clique aqui para suavizar a forma de onda. Use a square-wave for current oscillator. Use uma onda quadrada no oscilador atual. The 'V' knob sets the volume of the selected string. O botão "V" modifica o volume da corda selecionada. Sine wave Onda senoidal Click here to enable/disable waveform. Clique aqui para habilitar/desabilitar forma de onda. Octave Oitava The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. O botão "P" modifica a posição onde a corda será "pinçada". Valores baixos significam que a corda será pinçada perto da ponte. Smooth Suavizar String Corda The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. O botão "Slap" deixa mais "crespo" o som da corda escolhida que é mais aparente na duração do ataque (como a técnica de puxar a corda de um contrabaixo ou um violão chamada slap), embora possa ser usada também para deixar o som mais "metálico". The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. O editor de forma de onda proporciona controle sobre o estado inicial, ou impulso, usado no início da vibração da corda. Os botões ao lado direito do gráfico irão inicializar o tipo de forma de onda selecionada. O botão "?" ira carregar uma forma de onda de um arquivo (somente as primeiras 128 amostras serão carregadas). A forma de onda também pode ser desenhada no gráfico. O botão "S" irá suavizar a forma de onda. O botão "N" ira normalizar a forma de onda. The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. O botão "PU" modifica a posição onde as vibrações serão captadas na corda selecionada. Valores baixos significam que o captador está mais próximo à ponte. Pick position: Escolher pinçada: The Pan knob determines the location of the selected string in the stereo field. O botão de Pan determina a localização da corda selecionada o campo estereofônico. String stiffness: Dureza da corda: Square wave Onda quadrada Saw wave Onda dente de serra Normalize Normalizar Click here to normalize waveform. Clique aqui para normalizar a forma de onda. Use a saw-wave for current oscillator. Use uma onda dente de serra no oscilador atual. Use white-noise for current oscillator. Use ruído branco no oscilador atual. Triangle wave Onda triangular Impulse or initial state Impulso ou estado inicial Detune: Desafinar: Use a sine-wave for current oscillator. Use uma onda senoidal no oscilador atual. Pickup position: Posição do captador: Volume: User defined wave Onda definida pelo usuário Use a user-defined waveform for current oscillator. Use uma forma de onda definida pelo usuário no oscilador atual. Use a triangle-wave for current oscillator. Use uma onda triangular no oscilador atual. The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. O botão "Detune" modifica a altura da corda escolhida. Valores menores do que zero quase não afetarão o som da corda. Valores bem maiores do que zero farão o som ficar mais agudo. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Vibed modela independentemente a vibração de até 8 cordas. O seletor "String" (Corda) permite escolher qual corda será editada. O seletor "Imp" escolhe qual dos gráficos representará o impulso no estado inicial da corda. O seletor "Octave" (Oitava) permite escolher qual harmônico da corda deverá vibrar. O gráfico permite que você controle o estado inicial, ou impulso, usado para definir o movimento da corda. O botão "V" controla o volume. O botão "S" controla a dureza da corda. O botão "P" controla a posição de pinçagem da corda. Já o botão "PU" controla a posição do captador. O botão "Pan" posiciona o som no lado esquerdo ou direito, enquanto o botão "Detune" (Desafinar) permite modificar a afinação em termos de altura. Automatizar este botão permite criar glissandos bem interessantes! O botão "Slap" pode dar uma característica mais metálica ao som da corda. O botão "Tamanho" controla o tamanho da corda. O LED no canto direito inferior do editor de forma de onda determina que a corda está ativa no presente instrumento. The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. O seletor "Imp" determina como a forma de onda no gráfico será manipulada como um impulso comunicado à corda pela pinçada ou pelo estado inicial da corda. Enable waveform Habilitar forma de onda visualizationWidget click to enable/disable visualization of master-output Clique para habilitar/desabilitar a visualização da saída final Click to enable Clique para habilitar voiceObject Voice %1 release Voz %1 relaxamento Voice %1 pulse width Voz %1 tamanho do pulso Voice %1 wave shape Voz %1 forma da onda Voice %1 coarse detuning Voz %1 ajuste bruto Voice %1 sustain Voz %1 sustentação Voice %1 ring modulate Voz %1 modulada em anel Voice %1 sync Voz %1 sincronizada Voice %1 test Voz %1 teste Voice %1 decay Voz %1 decaimento Voice %1 attack Voz %1 ataque Voice %1 filtered Voz %1 filtrada waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/ru.qm000066400000000000000000006316021247673406200156440ustar00rootroot00000000000000fufu?h{>i@K]@aJ[ysy•pt tFj7 ,#_~GإWصg0T~T}T0$s# #KRs*@46`5OFWTFW͝H5I[>qLLljTtxhӗjЊjHED//ɔC8CE7e jA DƃDt*$k*yl**0O*0Y*0*0**0*0*04Y*0ϕ++l+mK+ +?+įn/N3y[4ʩ5f%36u9gi93}+:d@T]E EZ$F|GGGrGHjJHiZHSHHziHzHImIm$9J'J+C!J<@JW|JsKLbM5IMFM MkN(ENhtObzPWPWSUSb1S3TZTTʴTʴTx7UQ$yU`+U`UjTUjVbVbŶVb=VhGV<VVtVVW JW 1WiWwzWX XHZ/ [Z/bZk Zk)ZIZZo0Zoh[q[j\]6 6]^eq"G^er"`~`~0c^؈cNh  \iųiųių@(tbyv=-|}}Uv~#;w ;8Z_?Cϙ|Jz?*^Ju[>vC]%ueN)["7'iy<y\ @Q!On!W3 J) bc b8 s  C>A/N+w +lun{it{"R/VӞ/V+27"7o]9}9q;n; =t9@1xG@۴CFzFz JJ%MUT OXtOXT,V Z;Z;&a`1xQaU/i^xmFw80?yu^z;u< nD;~o>VuMtɄyp>ʭil7(Eՙծh[*8JZQ݊sqð<lߺwo0o;΂CBLA |WD/he#8JUa3qf B& h(^(^A)uN,´D,´t.z4NK95: 4G3I9Ro_/z bHbTvtxżR~z#9u%8n&-CvGAGEGDGC =.0.̀? {?z)K4)L)L)M\mmf3{)em"9>>F>NaѻRGSG˥ҩBUpҩBһBUһB||t>u MgH~Xl8Vsas8shFpDC%uI"ݎ"ݎ(% :2Q.3^4 8JMH8\9:)O?%@BW(BaNCB"ZHH>[OXfO۹5P~P~Sk[0Wa)BW6o]Ʒ]Y] Pl-ClhTZlh_lFdoSou>xHxT|Z|Z>M}"o~~_~sTŐmHĩR$wz##y0זsbcD.Cp>BN@x.|h#NA~{QǾ~WC`Ľ+!P!RϯfCѫ{Y6=]6\NPքOܗj c%왞G\gB6  =չrqOY<.[ 0((hy)e1019:^<< <<A UsFA>JFKVM$+MtMк+O۹9.PJbPJPJQq.ʓW:EXYZ`:``%`%]c=*d Zg5hjzt kJ'l rJ $w~e7=wԘww%wԇxYZyT yT{ ~9rZ0 N uuuhuuBu!u"u(rBsGM{KIIIHIPItKhzhzkhòiZ eZq&nnnoo?ofooop pA pt}kBVBχBUB0z:h0,`h00IB jx?eˤ(žՔC5?ͥM22@0(mn5V݄4݄8`HA͸hT!h"vF@fnIDK#PCM_YdC#Vq t1 u}v u @zlDTv5Ύ((!EҺ$0|%n)rv)|-U>.g153:8Ez F^F^'H8n&PeQ+QlQDZg\C.k\D%AaEka*fh h93h;PjTvPjTwlallps HvA sxt}o.foAATkK]*GF̂FFw +cmwAXRE_>6`j&N6ff@fz)[tDt)G=ttnJ5Þ|%IO%Y]o^0;!ZO;EUu,ZnOuN!9q<5b<5ѳ<5<5<5u<5=<5sߺ=W0D8 }"ljoZCN`^ EE>E|bi xĢ#EC'v5~'v9(*=+pZT+#xn1U1^6{k:gNY2E7K7bXY<(k}t2d>R!2ޔrTtit>xt/qrT\g7 Ů sb:) ) rYh!E|!E!EJ&rz' ) &' )%(d)k.*G,D55na7 8}C;;XZe?C'iINUI>UIaZ[tb\X.ac,czlhJVBiAN}i#{lF5m.wy %6y %BxG j>Aj2I92]+DdA잂W잂B,)vy2K#*`#f 3ES  %R: Uٚm$Ϟ-IJ-6 > 9  Y ] B>=  B10 ]. ^ 8W <-  `s ` 9̅ J *. n2  Fx w` Knh P $  f UU uY R` U 1`A F Np l T , { L ~& ·~1= Ɓ(< *t ʧv ʵ ˔m q J\8 D N ؋ ڮ.X ڮ2X ہ+^ zj e ׾T ɺ lW *n ]& _Z  R  S I9h ".  $ r +~ - P 3' 9y Ny OmJ S'JV STn \ \ރ ] ct- ct1 eEu m  m ' m = s T3 u: m # $nr Y  6 v ?% NP3 NZ J V* h R 2 2& 8A ƟZ Ƶ8X ; ^L 4 ӗ`l Ӱ 24 < < eyS SY Y: Y:E Y:A ~ + i_  `M 9 .x . . .0 ʓJ Uc "H "r $&yw (c + { + A +  -#S -#X -u -'? 5ݙP/ d̥8 d̥_ t$ t  |`n )G   i U v U} t tA { { ( w u s -h 1` ^^S  3 _ {  ޖ 9 9 N 鼣 ]X d. /p /' ,K + `e9m g5 s + Zc  58 r (d .˙ 0 Eq 0 C 0 B 0 A @uB @u7 @u W` Z \Ob aob bS# c c c c? cn c/ fb l8Lv |H5@ |. }N} S"   | 5M ; m . . f t N=6 Zv n7 Z 0^ ɶ.w QZ U Չ9@/ Չ9eQ )>K ) 7~ ;T 0 /^R /^ ~/C-T ^ :܆RW!fn~x+iy^+qY!N"h!&ʮ}1 J1 [}2:G6:G:;}?$<)B>wGiP>#Q>Y$]Oad^)cgn5:n57ngdyrOpXn:Q^?_<u))˶b2`9 `9ȘKFS;W:z yYPt^!Nհ +DD*EIjJiIJiYM|ٞU&żXҾZ Ѭ[x*["^ Eg` eRVeR4eRVkeRiI HGiI _m4upڸ_y3z,Y*~**;77KU 0E¥I)L`b֩<,X~IP ܹ)i8<html><head/><body><p><a href="http://lmms.sf.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sf.net</span></a></p></body></html>

http://lmms.sourceforge.net

 AboutDialog>4@>1=55About AboutDialog  ?@>3@0<<5 LMMS About LMMS AboutDialog 2B>@KAuthors AboutDialog`@02>>1;040B5;8 (c) 2004-2014, LMMS-@07@01>BG8:8(Copyright (c) 2004-2014, LMMS developers AboutDialog0 MB>< O7K:5 =5 ?5@52545=> (8;8 CAB0=>2;5= =3;89A:89). A;8 K 708=B5@5A>20=K 2 ?5@52>45 LMMS =0 4@C3>9 O7K: 8;8 E>B8B5 C;CGH8BL ACI5AB2CNI89 ?5@52>4, <K ?@825BAB2C5< ;N1CN ?><>IL! @>AB> A2O68B5AL A @07@01>BG8:0<8!Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialog!LMMS AboutDialogLLMMS - ;Q3:>5 A>740=85 <C7K:8 4;O 2A5E)LMMS - easy music production for everyone AboutDialog8F5=78OLicense AboutDialog5@52>4 Translation AboutDialog85@A8O %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialogPANAmplifierControlDialog VOLAmplifierControlDialog@><:>ABL:Volume:AmplifierControlDialog@><:>ABLVolumeAmplifierControls +CHANNELSAudioAlsa::setupWidget#!" !"DEVICEAudioAlsa::setupWidget#A8;5=85:Amplify:AudioFileProcessorView06<8B5 745AL, GB>1K >B:@KBL 4@C3>9 72C:>2>9 D09;.  =>2>< >:=5 480;>30 2K A<>65B5 2K1@0BL =C6=K9 D09;. "0:85 =0AB@>9:8, :0: @568< ?>2B>@0, B>G:8 =0G0;0/:>=F0, CA8;5=85 8 ?@>G85 =5 A1@>AOBAO, ?>MB><C 72CG0=85 <>65B >B;8G0BLAO >B >@838=0;0.Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.AudioFileProcessorViewT@>4>;68BL 2>A?@>872545=85 70?8A8 ?> =>B0<%Continue sample playback across notesAudioFileProcessorViewN:;NG5=85 MB>9 >?F88 ?@>4>;68B 2>A?@>872545=85 70?8A8 ?> @07=K< =>B0< - 5A;8 87<5=8BL CA:>@5=85 8;8 4;8B5;L=>ABL =>BK >AB0=>28BAO 4> :>=F0 70?8A8, B> A> A;54CNI59 =>BK 70?8AL ?@>4>;68BAO B0<, 345 >AB0=>28;0AL, GB>1K A1@>A8BL 2>A?@>87245=85 =0 =0G0;> 70?8A8, 2AB02LB5 =>BC 2=87C C :;028H (<20 F)>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)AudioFileProcessorView >=5F: Endpoint:AudioFileProcessorViewA;8 2:;NG8BL MBC :=>?:C, 2AO 70?8AL ?>94QB 2 >1@0B=CN AB>@>=C, MB> C4>1=> 4;O :@CBKE MDD5:B>2, B8?0 >1@0B=>3> 3@>E>B0.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView*B:@KBL 4@C3CN 70?8ALOpen other sampleAudioFileProcessorView$B75@:0;8BL 70?8ALReverse sampleAudioFileProcessorView0G0;>: Startpoint:AudioFileProcessorView-B0 @CG:0 7040QB :>MDD8F85=B CA8;5=8O. @8 7=0G5=88 100% 8AE>4=K9 72C: =5 <5=O5BAO, 2 ?@>B82=>< A;CG05  >= 1C45B >A;01;5= 8;8 CA8;5=. (1@0B8B5 2=8<0=85, GB> 8AE>4=0O 70?8AL ?@8 MB>< >AB0=5BAO =5B@>=CB>9.)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView;8=0 70?8A8:Sample length:AudioFileProcessorWaveView.JACK-:;85=B ?5@570?CI5=JACK client restarted AudioJack.JACK-A5@25@ =5 4>ABC?5=JACK server down AudioJack(LMMS =5 1K; ?>4:;NG5= : JACK ?> :0:>9-B> ?@8G8=5, ?>MB><C LMMS ?>4:;NG5=85 : JACK 1K;> ?5@570?CI5=>. 0< ?@84QBAO 70=>2> 2@CG=CN A>740BL A>548=5=8O.LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. AudioJackP>7<>6=> JACK-A5@25@ 1K; 2K:;NG5= 8 70?CA: =>2>3> ?@>F5AA0 =5 C40;AO, ?>MB><C ! =5 <>65B ?@>4>;68BL @01>BC. 0< A;54C5B A>E@0=8BL ?@>5:B 8 ?5@570?CAB8BL JACK 8 LMMS.The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack +CHANNELSAudioJack::setupWidget/ " CLIENT-NAMEAudioJack::setupWidget +CHANNELSAudioOss::setupWidget#!" !"DEVICEAudioOss::setupWidget# BACKENDAudioPortAudio::setupWidget#!" !"DEVICEAudioPortAudio::setupWidget +CHANNELSAudioPulseAudio::setupWidget#!" !"DEVICEAudioPulseAudio::setupWidget#!" !"DEVICEAudioSdl::setupWidget:&C >?8@>20BL 7=0G5=85 (%1%2)&Copy value (%1%2)AutomatableModel6&P AB028BL 7=0G5=85 (%1%2)&Paste value (%1%2)AutomatableModel$&R !1@>A8BL (%1%2) &Reset (%1%2)AutomatableModel6!>548=8BL A :>=B@>;;5@><...Connect to controller...AutomatableModel">4A>548=5=> : %1Connected to %1AutomatableModel4>4A>548=5=> : :>=B@>;;5@CConnected to controllerAutomatableModel.0AB@>8BL A>548=5=85...Edit connection...AutomatableModelX7<5=8BL 3;>01;L=CN 02B><0B870F8N :><?>78F88Edit song-global automationAutomatableModelH#1@0BL 2AQ ?@8A>548=5==>5 C?@02;5=85Remove all linked controlsAutomatableModel$#40;8BL A>548=5=85Remove connectionAutomatableModelT#1@0BL 3;>10;L=CN 02B><0B870F8N :><?>78F88Remove song-global automationAutomatableModelFKA>:>5 =0?@O65=85 <>65B A<O3G8BL :@82CN, => ?5@53@C78BL =5:>B>@K5 7=0G5=85. 87:>5 =0?@O65=85 <>65B ?>4:>A8BL :@82CN 4> =87:>3> C@>2=O 2 :064>9 C?@02;ONI59 B>G:5.A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.AutomationEditordA5 2K1@0==K5 7=0G5=8O A:>?8@>20=K 2 1CD5@ >1<5=0.1All selected values were copied to the clipboard.AutomationEditor6 540:B>@ 02B><0B870F88  %1Automation Editor - %1AutomationEditorF 540:B>@ 02B><0B870F8  =5B H01;>=0Automation Editor - no patternAutomationEditor@8 =060B88 =0 MBC :=>?:C 0:B828@C5BAO @568< @8A>20=8O =>B, 2 =Q< 2K <>65B5 4>102;OBL/?5@5<5I0BL 8 87<5=OBL 4;8B5;L=>ABL >48=>G=KE =>B. -B> >A=>2=>9 @568< 8 8A?>;L7C5BAO 1>;LHCN G0ABL 2@5<5=8. ;O 2:;NG5=8O MB>3> @568<0 <>6=> 8A?>;L7>20BL :><18=0F8N :;028H Shift+D.Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditor\@8 =060B88 =0 MBC :=>?:C 0:B828@C5BAO @568< AB8@0=8O.  MB>< @568<5 2K <>65B5 AB8@0BL =>BK ?> >4=>9. ;O 2:;NG5=8O MB>3> @568<0 <>6=> 8A?>;L7>20BL :><18=0F8N :;028H Shift+E.Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditor2@8 =060B88 =0 MBC :=>?:C 2K45;5=K5 =>BK 1C4CB A:>?8@>20=K 2 1CD5@. >765 2K <>65B5 2AB028BL 8E 2 ;N1>5 <5AB> ;N1>3> H01;>=0 A ?><>ILN :=>?:8 "AB028BL".Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor,@8 =060B88 =0 MBC :=>?:C 2K45;5=K5 =>BK 1C4CB 2K@570=K 2 1CD5@. >765 2K <>65B5 2AB028BL 8E 2 ;N1>5 <5AB> ;N1>3> H01;>=0 A ?><>ILN :=>?:8 "AB028BL".Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor@8 =060B88 =0 MBC :=>?:C =>BK 87 1CD5@0 1C4CB 2AB02;5=K 2 ?5@2K9 2848<K9 B0:B.YClick here and the values from the clipboard will be pasted at the first visible measure.AutomationEditor&06<8B5 745AL GB>1K ?@>83@0BL B5:CI89 H01;>=. -B> <>65B ?@83>48BLAO ?@8 53> @540:B8@>20=88. (01;>= 02B><0B8G5A:8 70:>;LFC5BAO ?@8 4>AB865=88 :>=F0.Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditor06<8B5 745AL, 5A;8 2K E>B8B5 >AB0=>28BL 2>A?@>872545=85 B5:CI53> H01;>=0.>Click here if you want to stop playing of the current pattern.AutomationEditor8C18G5A:0O -@<8B>20 ?@>3@5AA8O 4;O MB>3> H01;>=0 02B><0B870F88. >;-2> ?>4A>548=5==KE >1J5:B>2 87<5=8BAO ?> A3;065==>9 :@82>9 8 A<O3G8BAO =0 ?8:0E 8 A?040E.Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.AutomationEditorK1>@ 48A:@5B=>9 ?@>3@5AA88 4;O MB>3> H01;>=0 02B><0B870F88. >;-2> ?>4A>548=5==KE >1J5:B>2 1C45B >AB020BLAO ?>AB>O==K< <564C C?@02;ONI8<8 B>G:0<8 8 1C45B CAB0=>2;5=> =0 =>2>5 7=0G5=85 A@07C ?> 4>AB865=88 :064>9 C?@02;ONI59 B>G:8. Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.AutomationEditorK1>@ ;8=59=>9 ?@>3@5AA88 4;O MB>3> H01;>=0 02B><0B870F88. >;-2> ?>4A>548=5==KE >1J5:B>2 1C45B <5=OBLAO A ?>AB>O==>9 A:>@>ABLN 2> 2@5<5=8 <564C C?@02;ONI8<8 B>G:0<8 4;O 4>AB865=8O B>G=>3> 7=0G5=8O 2 :064>9 C?@02;ONI59 B>G:8 157 2=570?=KE 87<5=5=89. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.AutomationEditorT>?8@>20BL 2K1@0==K5 =>BK 2 1CD5@ (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditor<C18G5A:0O -@<8B>20 ?@>3@5AA8OCubic Hermite progressionAutomationEditor@K@570BL 2K1@0==K5 =>BK (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor*8A:@5B=0O ?@>3@5AA8ODiscrete progressionAutomationEditor2 568< @8A>20=8O (Shift+D)Draw mode (Shift+D)AutomationEditor0 568< AB8@0=8O (Shift+E)Erase mode (Shift+E)AutomationEditor&8=59=0O ?@>3@5AA8OLinear progressionAutomationEditorHAB028BL 7=0G5=8O 87 1CD5@0 (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorH3@0/0C70 B5:CI53> H01;>=0 (@>15;)"Play/pause current pattern (Space)AutomationEditorB:@>9B5 @540B>@ 02B><0B870F88 G5@57 :>=B5:AB=>5 <5=N @53C;OB>@0!EPlease open an automation pattern with the context menu of a control!AutomationEditorbAB0=>28BL ?@>83@K20=85 B5:CI53> H01;>=0 (@>15;)'Stop playing of current pattern (Space)AutomationEditor>5;8G8=0 =0?@O65=8O 4;O A?;09=0Tension value for splineAutomationEditor0?@O65=85: Tension: AutomationEditor(=0G5=8O A:>?8@>20=K Values copiedAutomationEditor@"O=8B5 :>=B@>;L C45@6820O <Ctrl>$Drag a control while pressing AutomationPattern!>548=5=8O %1%1 ConnectionsAutomationPatternView5@58<5=>20BL Change nameAutomationPatternViewG8AB8BLClearAutomationPatternView BA>548=8BL %1Disconnect "%1"AutomationPatternViewBB:@KBL 2 @540:B>@5 02B><0B870F88Open in Automation editorAutomationPatternView"!1@>A8BL =0720=85 Reset nameAutomationPatternView4#AB0=>28BL/>G8AB8BL 70?8ALSet/clear recordAutomationPatternView2064K IQ;:=8B5 <KHLN GB>1K =0AB@>8BL 02B><0B870F8N 4;O MB>3> H01;>=06double-click to open this pattern in automation editorAutomationPatternView*>@>6:0 02B><0B870F88Automation trackAutomationTrack'0AB>B0: Frequency:BassBoosterControlDialog#!GAINBassBoosterControlDialog#A8;5=85:Gain:BassBoosterControlDialog"RATIOBassBoosterControlDialogB=>H5=85:Ratio:BassBoosterControlDialog'0AB>B0 FrequencyBassBoosterControls#A8;5=85GainBassBoosterControlsB=>H5=85RatioBassBoosterControls$>:070BL 8=B5@D59AShow GUICarlaInstrumentView>=B@>;;5@ %1 Controller %1 Controller2B>>?@545;5=85 Auto DetectControllerConnectionDialog CHANNELControllerConnectionDialog"   CONTROLLERControllerConnectionDialogB<5=8BLCancelControllerConnectionDialog(0@0<5B@K A>548=5=8OConnection SettingsControllerConnectionDialog1=0@C65= F8:;.Cycle Detected.ControllerConnectionDialog0=0; 22>40 Input channelControllerConnectionDialog >=B@>;;5@ 22>40Input controllerControllerConnectionDialog!LMMSControllerConnectionDialog  MAPPING FUNCTIONControllerConnectionDialogMIDI-"  MIDI CONTROLLERControllerConnectionDialogD#AB@>9AB20 MiDi 4;O ?@8Q<0 A>1KB89(MIDI-devices to receive MIDI-events fromControllerConnectionDialogOKControllerConnectionDialog",. "  USER CONTROLLERControllerConnectionDialog>1028BLAddControllerRackView(>4B25@48BL C40;5=85Confirm DeleteControllerRackView>4B25@6405B5 C40;5=85? ABL 2>7<>6=K5 A>548=5=8O A MB8< :>=B@>;;5@><, ?>B>< =5;L7O 1C45B 8E 2>72@0B8BL.iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackView" M:0 :>=B@>;;5@>2Controller RackControllerRackView&H !?@02:0&HelpControllerView*&R #1@0BL MB>B D8;LB@&Remove this pluginControllerView>=B@>;;5@K <>3CB 02B><0B878@>20BL 87<5=5=8O 7=0G5=89 @53C;OB>@>2, ?>;7C=:>2 8 ?@>G53> C?@02;5=8O.QControllers are able to automate the value of a knob, slider, and other controls.ControllerView#?@02;5=85ControlsControllerViewL2548B5 =>2>5 =0720=85 4;O :>=B@>;;5@0&Enter the new name for this controllerControllerView05@58<5=>20BL :>=B@>;;5@Rename controllerControllerView2E 87.'$ 2x LowPassDualFilterControlsA5 ?@>E>4OBAllpassDualFilterControls!@54.'$ csg BandPass csgDualFilterControls!@54.'$ czpg BandPass czpgDualFilterControls KA.'$HiPassDualFilterControls 87.'$LowPassDualFilterControlsC3MoogDualFilterControls(>;>A=>-703@0640NI89NotchDualFilterControls RC !@54.'$ 12 4RC BandPass 12dBDualFilterControlsRC !@54.'$ 244RC BandPass 24dBDualFilterControlsRC KA.'$ 124RC HighPass 12dBDualFilterControlsRC KA.'$ 244RC HighPass 24dBDualFilterControlsRC 87.'$ 124RC LowPass 12dBDualFilterControlsRC 87.'$ 244RC LowPass 24dBDualFilterControls2$8;LB@ >:0;L=>9 D>@<0=BKVocal Formant FilterDualFilterControls0B8E0=85DecayEffect-DD5:B 2:;NGQ=Effect enabledEffect(;N7GateEffect0AKI5==>ABL Wet/Dry mixEffect -DD5:BK 2:;NGQ=KEffects enabled EffectChain>1028BL MDD5:B Add effectEffectRackView&, -$$" EFFECTS CHAINEffectRackView>1028BL MDD5:B Add effectEffectSelectDialog?8A0=85 <>4C;OPlugin descriptionEffectSelectDialog&H !?@02:0&Help EffectView &R #1@0BL D8;LB@&Remove this plugin EffectView#?@02;5=85Controls EffectView "%DECAY EffectView !83=0; ?@>E>48B ?>A;54>20B5;L=> G5@57 2A5 CAB0=>2;5==K5 D8;LB@K (A25@EC 2=87). 5@5:;NG0B5;L :;/K:; ?>72>;O5B 2 ;N1>9 <><5=B 2:;NG0BL/2K:;NG0BL D8;LB@.  53C;OB>@ (wet / dry) =0AKI5==>AB8 >?@545;O5B 10;0=A <564C 2E>4OI8< A83=0;>< 8 A83=0;>< ?>A;5 MDD5:B0, :>B>@K9 AB0=>28BAO 2KE>4=K< A83=0;>< MDD5:B0. E>4=>9 A83=0; :064>3> D8;LB@0 O2;O5BAO 2KE>4>< ?@54K4CI53>, B0: GB> 4>;O G8AB>3> A83=0;0 ?@8 ?@>E>645=88 ?> F5?>G:5 ?>AB>O==> ?0405B.  53C;OB>@ (decay) 70B8E0=8O >?@545;O5B 2@5<O, :>B>@>5 1C45B 459AB2>20BL D8;LB@ ?>A;5 B>3> :0: =>BK 1K;8 >B?CI5=K. -DD5:B ?5@5AB0=5B >1@010BK20BL A83=0;K, :>340 3@<>:>ABL C?04QB =865 ?>@>30 4;O 7040==>9 4;8=K 2@5<5=8. -B0 @CG:0 (Knob) CAB0=02;8205B "7040==CN 4;8=C 2@5<5=8" '5< <5=LH5 7=0G5=85, B5< <5=LH5 B@51>20=8O : &, ?>MB><C ;CGH5 AB028BL MB> G8A;> =87:8< 4;O 1>;LH8=AB20 MDD5:B>2. >4=0:> MB> <>65B 2K720BL >1@57:C 72C:0 ?@8 8A?>;L7>20=88 MDD5:B>2 A 4;8B5;L=K<8 ?5@8>40<8 B8H8=K, B8?0 7045@6:8.  53C;OB>@ H;N70 A;C68B 4;O C:070=8O ?>@>30 A83=0;0 4;O 02B>->B:;NG5=8O MDD5:B0, >BAGQB 4;O "7040==>9 4;8=K 2@5<5=8" =0G=QBAO :0: B>;L:> >1@010BK205<K9 A83=0; C?04QB =865 C:070==>3> MB8< @53C;OB>@>< C@>2=O. =>?:0 #?@02;5=85  >B:@K205B >:=> 87<5=5=8O ?0@0<5B@>2 MDD5:B0. >=B5:AB=>5 <5=N, 2K7K205<>5 I5;G:>< ?@02>9 :=>?:>9 <KH8, ?>72>;O5B <5=OBL ?>@O4>: A;54>20=8O D8;LB@>2 8;8 C40;OBL 8E 2<5AB5 A 4@C38<8.SEffect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. EffectView(.GATE EffectView (;N7:Gate: EffectView&&d 5@5<5AB8BL =865 Move &down EffectView&&u 5@5<5AB8BL 2KH5Move &up EffectView:;/K:;On/Off EffectViewDecay (70B8E0=85) C?@02;O5B :>;8G5AB2>< 1CD5@>2 B8H8=K, :>B>@K5 4>;6=K ?@>9B8 4> :>=F0 @01>BK ?;038=0. 5=LH85 25;8G8=K A=860NB ?5@53@C7:C ?@>F5AA>@0, => 2>7=:05B @8A: ?>O2;5=8O ?>B@5A:820=8O 8;8 ?>4@570=8O 2 E2>AB5 =0 ?5@545@6:5 (delay) 8;8 ME> (reverb) MDD5:B0E.The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. EffectViewGATE ((;N7) >?@545;O5B C@>25=L A83=0;0, :>B>@K9 1C45B AG8B0BLAO "B8H8=>9" ?@8 >?@545;5=88 >AB0=>2:8 >1@010BK20=8O A83=0;>2.zThe Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. EffectView 53C;OB>@ =0AKI5==>AB8 >?@545;O5B 4>;N >1@01>B0==>3> A83=0;0, :>B>@0O 1C45B =0 2KE>45.eThe Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. EffectView @5<O:Time: EffectView :;/2K:; MDD5:B.Toggles the effect on or off. EffectView !+)W/D EffectView*#@>25=L =0AKI5==>AB8: Wet Level: EffectViewABC?;5=85AttackEnvelopeAndLfoParameters0B8E0=85DecayEnvelopeAndLfoParameters'!" x 100 Freq x 100EnvelopeAndLfoParameters#45@6820=85HoldEnvelopeAndLfoParametersABC?;5=85 LFO LFO AttackEnvelopeAndLfoParameters>4C;OF8O LFOLFO ModulationEnvelopeAndLfoParameters045@6:0 LFO LFO PredelayEnvelopeAndLfoParameters"$>@<0 A83=0;0 LFOLFO Wave ShapeEnvelopeAndLfoParameters!:>@>ABL LFO LFO speedEnvelopeAndLfoParameters,>4C;8@>20BL >3810NICNModulate Env-AmountEnvelopeAndLfoParameters>4C;OF8O ModulationEnvelopeAndLfoParameters045@6:0PredelayEnvelopeAndLfoParameters#1K20=85ReleaseEnvelopeAndLfoParametersK45@6:0SustainEnvelopeAndLfoParametersAMTAMTEnvelopeAndLfoViewATTATTEnvelopeAndLfoViewABC?;5=85:Attack:EnvelopeAndLfoViewJ!35=5@8@>20BL 783703>>1@07=K9 A83=0;.&Click here for a saw-wave for current.EnvelopeAndLfoViewf5=5@8@>20BL 30@<>=8G5A:89 (A8=CA>840;L=K9) A83=0;.Click here for a sine-wave.EnvelopeAndLfoViewR!35=5@8@>20BL :24@0B=K9 A83=0; (<50=4@) .Click here for a square-wave.EnvelopeAndLfoViewB!35=5@8@>20BL B@5C3>;L=K9 A83=0;.Click here for a triangle-wave.EnvelopeAndLfoView040BL A2>N D>@<C A83=0;0. ?>A;54AB288, ?5@5B0I8BL A>>B25BAB2CNI89 D09; A 70?8ALN 2 3@0D LFO.aClick here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.EnvelopeAndLfoViewb06<8B5, GB>1K C<=>68BL G0AB>BC MB>3> LFO =0 100.DClick here if the frequency of this LFO should be multiplied by 100.EnvelopeAndLfoView06<8B5 AN40, GB>1K 3;C18=0 <>4C;OF88 >3810NI59 704020;0AL MB8< LFO.>Click here to make the envelope-amount controlled by this LFO.EnvelopeAndLfoViewDECDECEnvelopeAndLfoViewDELDELEnvelopeAndLfoView0B8E0=85:Decay:EnvelopeAndLfoViewT5@5B0I8B5 2 MB> >:=> :0:CN-=81C4L 70?8AL.8Drag a sample from somewhere and drop it in this window.EnvelopeAndLfoView'!"" x 100 FREQ x 100EnvelopeAndLfoViewHOLDHOLDEnvelopeAndLfoView>4A:07:0HintEnvelopeAndLfoView#45@60=85:Hold:EnvelopeAndLfoView&@54. 7045@6:0 LFO: LFO predelay:EnvelopeAndLfoView!:>@>ABL LFO: LFO speed:EnvelopeAndLfoViewABC?;5=85 LFO: LFO- attack:EnvelopeAndLfoView"# .)#.MODULATE ENV-AMOUNTEnvelopeAndLfoView$;C18=0 <>4C;OF88:Modulation amount:EnvelopeAndLfoView045@6:0: Predelay:EnvelopeAndLfoViewRELRELEnvelopeAndLfoView#1K20=85:Release:EnvelopeAndLfoViewSPDSPDEnvelopeAndLfoViewSUSTSUSTEnvelopeAndLfoViewK45@6:0:Sustain:EnvelopeAndLfoView:A?>;L7C9B5 MBC @CG:C 4;O CAB0=>2;5=8O 2@5<5=8 2ABC?;5=8O MB>3> LFO. '5< 1>;LH5 7=0G5=85, B5< 4>;LH5 LFO =C6405BAO 2 C25;8G5=88 A2>59 0<?;8BC4K 4> <0:A8<C<0.Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.EnvelopeAndLfoView-B0 @CG:0 CAB0=02;8205B 2@5<O 2>7@0AB0=8O 4;O B5:CI59 >3810NI59. '5< 1>;LH5 7=0G5=85, B5< 4>;LH5 E0@0:B5@8AB8:0 (=-@, 3@><:>ABL) 2>7@0AB05B 4> <0:A8<C<0. ;O 8=AB@C<5=>2 2@>45 ?80=8=> E0@0:B5@=K <0;K5 2@5<5=0 =0@0AB0=8O, 0 4;O AB@C==KE - 1>;LH85.Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.EnvelopeAndLfoView-B0 @CG:0 CAB0=02;8205B 2@5<O A?040 4;O B5:CI59 >3810NI59. '5< 1>;LH5 7=0G5=85, B5< 4>;LH5 >3810NI0O 4>;6=0 A>:@0I0BLAO >B 2ABC?;5=8O 4> C@>2=O 2K45@6:8. ;O 8=AB@C<5=B>2 2@>45 ?80=8=> A;54C5B 2K18@0BL =51>;LH85 7=0G5=8O.Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.EnvelopeAndLfoView-B0 @CG:0 CAB0=02;8205B 4;8B5;L=>ABL >3810NI59. '5< 1>;LH5 7=0G5=85, B5< 4>;LH5 >3810NI0O 45@68BAO =0 =082KAH5< C@>2=5.Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.EnvelopeAndLfoView~-B0 @CG:0 CAB0=02;8205B 3;C18=C <>4C;OF88 4;O B5:CI53> LFO. '5< 1>;LH5 7=0G5=85, B5< 2 1>;LH59 AB5?5=8 2K1@0==0O E0@0:B5@8AB8:0 (=-@, 3@><:>ABL 8;8 G0AB>B0 A@570) 1C45B 7028A5BL >B MB>3> LFO.Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.EnvelopeAndLfoView-B0 @CG:0 CAB0=02;8205B 3;C18=C <>4C;OF88 4;O B5:CI59 >3810NI59. '5< 1>;LH5 7=0G5=85, B5< 2 1>;LH59 AB5?5=8 2K1@0==0O E0@0:B5@8AB8:0 (=-@, 3@><:>ABL 8;8 G0AB>B0 A@570) 1C45B 7028A5BL >B MB>9 >3810NI59.Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.EnvelopeAndLfoView-B0 @CG:0 >?@545;O5B 7045@6:C >3810NI59. '5< 1>;LH5 MB0 25;8G8=0, B5< 4>;LH5 2@5<O 4> AB0@B0 B5:CI59 >3810NI59.Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.EnvelopeAndLfoViewP-B0 @CG:0 >?@545;O5B 7045@6:C ?5@54 70?CA:>< LFO (LFO - 87:>'0AB>B=K9 >AF8;;OB>@ (35=5@0B>@)). '5< 1>;LH5 25;8G8=0, B5< 1>;LH5 2@5<5=8 4> B>3> :0: LFO =0G=QB @01>B0BL.Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.EnvelopeAndLfoView-B0 @CG:0 CAB0=02;8205B 2@5<O C1K20=8O 4;O B5:CI59 >3810NI59. '5< 1>;LH5 7=0G5=85, B5< 4>;LH5 E0@0:B5@8AB8:0 (=-@, 3@><:>ABL) C<5=LH05BAO >B C@>2=O 2K45@6:8 4> =C;O. ;O AB@C==KE 8=AB@C<5=B>2 A;54C5B 2K18@0BL 1>;LH85 7=0G5=8O.Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.EnvelopeAndLfoView-B0 @CG:0 CAB0=02;O205B A:>@>ABL B5:CI53> LFO. '5< 1>;LH5 7=0G5=85, B5< 1KAB@55 LFO >AF8;;8@C5B 8 1KAB@55 ?@>872>48BAO MDD5:B.Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.EnvelopeAndLfoView"-B0 @CG:0 CAB0=02;8205B C@>25=L 2K45@6:8. '5< 1>;LH5 MB0 25;8G8=0, B5< 2KH5 C@>25=L =0 :>B>@>< >AB0QBAO >3810NI0O, ?@5645 G5< >?CAB8BLAO 4> =C;O.Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.EnvelopeAndLfoView^ 07@5H8BL MB><C LFO 704020BL 7=0G5=85 >3810NI59#control envelope-amount by this LFOEnvelopeAndLfoView<A/LFO:ms/LFO:EnvelopeAndLfoView6#<=>68BL G0AB>BC LFO =0 100multiply LFO-frequency by 100EnvelopeAndLfoView128 8B/A 128 KBit/sExportProjectDialog16 8B F5;>5 16 Bit IntegerExportProjectDialog160 8B/A 160 KBit/sExportProjectDialog192 8B/A 192 KBit/sExportProjectDialog192 F 192000 HzExportProjectDialog1E (5B) 1x (None)ExportProjectDialog256 8B/A 256 KBit/sExportProjectDialog2E2xExportProjectDialog"32 8B ?;020NI0O  32 Bit FloatExportProjectDialog320 8B/A 320 KBit/sExportProjectDialog44.1 F44100 HzExportProjectDialog 48 F48000 HzExportProjectDialog4E4xExportProjectDialog64 8B/A 64 KBit/sExportProjectDialog88.2 F88200 HzExportProjectDialog8E8xExportProjectDialog 96 F96000 HzExportProjectDialog'0AB>B0 18B:Bitrate:ExportProjectDialogB<5=8BLCancelExportProjectDialog<:>ABL:Depth:ExportProjectDialog`-:A?>@B8@>20BL :0: ?5B;N (C1@0BL B8H8=C 2 :>=F5)#Export as loop (remove end silence)ExportProjectDialog-:A?>@B ?@>5:B0Export projectExportProjectDialog$>@<0B D09;0: File format:ExportProjectDialog=B5@?>;OF8O:Interpolation:ExportProjectDialog K2>4OutputExportProjectDialogX5@548A:@5B870F8O (8A?>;L7>20BL >AB>@>6=>!):Oversampling (use with care!):ExportProjectDialog0<5BLB5, GB> =5 2A5 ?0@0<5B@K =865 1C4CB ?@8<5=5=K 4;O 2A5E D>@<0B>2 D09;>2.LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog$0AB@>9:8 :0G5AB20Quality settingsExportProjectDialog,'0AB>B0 48A:@5B870F88: Samplerate:ExportProjectDialog>!8=E@. ;CGH0O (>G5=L <54;5==>!)Sinc Best (very slow!)ExportProjectDialog!8=E@. KAB@0O Sinc FastestExportProjectDialog<!8=E@. !@54=OO (@5:><5=4>20=>)Sinc Medium (recommended)ExportProjectDialog 0G0BLStartExportProjectDialog C;520O 7045@6:0Zero Order HoldExportProjectDialog&1>7@520B5;L D09;>2Browser FileBrowser.--- 02>4A:85 D09;K ------ Factory files ---FileBrowserTreeWidget03@C7:0 70?8A8Loading sampleFileBrowserTreeWidgetvB:@KBL 2 =>2>9 8=AB@C<5=B0;L=>9 4>@>6:5/8B+0AA @540:B>@5'Open in new instrument-track/B+B EditorFileBrowserTreeWidgethB@:@KBL 2 =>2>9 4>@>6:5 8=AB@C<5=B0/@540:B>@5 ?5A=8(Open in new instrument-track/Song-EditorFileBrowserTreeWidget\6. 648B5, 70?8AL 703@C605BAO 4;O ?@>A<>B@0...*Please wait, loading sample for preview...FileBrowserTreeWidgetT!>548=8BL A 0:B82=K< 8=AB@C<5=B><-4>@>6:>9Send to active instrument-trackFileBrowserTreeWidget&H !?@02:0&HelpFxLine-DD5:B %1FX %1FxMixer;02=K9MasterFxMixer^2548B5 =>2>5 =0720=85 4;O MB>3> :0=0;0 -DD5:B0&Enter the new name for this FX channel FxMixerView8:H5@ -DD5:B>2FX-Mixer FxMixerView65@58<5=>20BL :0=0; -DD5:B0Rename FX channel FxMixerView&>;7C=>: -DD5:B0 %1 FX Fader %1FxMixerView::FxChannelView03;CH8BLMuteFxMixerView::FxChannelView:"8H8=0 =0 MB>< :0=0;5 -DD5:B0Mute this FX channelFxMixerView::FxChannelView@?5468>ArpeggioInstrumentFunctionArpeggio(0?@02;5=85 0@?5468>Arpeggio directionInstrumentFunctionArpeggio(;N7 0@?5468> Arpeggio gateInstrumentFunctionArpeggio 568< 0@?5468> Arpeggio modeInstrumentFunctionArpeggio"80?07>= 0@?5468>Arpeggio rangeInstrumentFunctionArpeggio5@8>4 0@?5468> Arpeggio timeInstrumentFunctionArpeggio"8? 0@?5468> Arpeggio typeInstrumentFunctionArpeggio=87DownInstrumentFunctionArpeggio!2>1>4=>FreeInstrumentFunctionArpeggio!;CG09=>RandomInstrumentFunctionArpeggio#?>@O4>G8BLSortInstrumentFunctionArpeggio !8=E@>=878@>20BLSyncInstrumentFunctionArpeggio 25@EUpInstrumentFunctionArpeggio25@E 8 2=87 Up and downInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewARPEGGIOARPEGGIOInstrumentFunctionArpeggioViewn@?5468>  @07=>284=>ABL 8A?>;=5=8O 0::>@4>2 =0 D>@B5?80=> 8 AB@C==KE 8=AB@C<5=B0E, :>B>@0O >682;O5B 72CG0=85. !B@C=D B0:8E 8=AB@C<5=B>2 83@0NBAO ?5@51>@>< ?> 0::>@40<, :0: =0 0@D5, :>340 72C:8 0::>@40 A;54CNB >48= 70 4@C38<. "8?8G=K5 0@?5468> - <06>@=K5 8 <8=>@=K5 B@804K, A@548 :>B>@KE <>6=> 2K1@0BL 8 4@C385.An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.InstrumentFunctionArpeggioView(;N7 0@?5468>:Arpeggio gate:InstrumentFunctionArpeggioView$80?07>= 0@?5468>:Arpeggio range:InstrumentFunctionArpeggioView 5@8>4 0@?5468>:Arpeggio time:InstrumentFunctionArpeggioView::>@4:Chord:InstrumentFunctionArpeggioView0?@02;5=85: Direction:InstrumentFunctionArpeggioViewGATEGATEInstrumentFunctionArpeggioView  568<:Mode:InstrumentFunctionArpeggioView RANGERANGEInstrumentFunctionArpeggioViewTIMETIMEInstrumentFunctionArpeggioView. 53C;8@>2:0 H;N70 0@?5468>, ?>:07K205B ?@>F5=B=CN 4>;N :064>3> B>=0 0@?5468>, :>B>@0O 1C45B 2>A?@>872545=0. @>AB>9 A?>A>1 A>74020BL AB0::0B>-0@?5468>.Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.InstrumentFunctionArpeggioViewA?>;L7C9B5 MBC @CG:C, GB>1K CAB0=>28BL 480?07>= 0@?5468> (2 >:B020E). K1@0==K9 B8? 0@?5468> 1C45B >E20BK20BL C:070==>5 :>;8G5AB2> >:B02.Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.InstrumentFunctionArpeggioView 53C;8@>2:0 ?5@8>40 0@?5468> - 2@5<O (2 <8;;8A5:C=40E), :>B>@>5 4>;65= 72CG0BL :064K9 B>= 0@?5468>.Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.InstrumentFunctionArpeggioView<AmsInstrumentFunctionArpeggioView:B02[0/K] octave(s)InstrumentFunctionArpeggioView8E {11?}11InstrumentFunctionNoteStacking8E {13?}13InstrumentFunctionNoteStacking8E {13#9?}13#9InstrumentFunctionNoteStacking8E {5?}5InstrumentFunctionNoteStacking8E {6?}6InstrumentFunctionNoteStacking8E {7?}7InstrumentFunctionNoteStacking8E {7#11?}7#11InstrumentFunctionNoteStacking8E {7#5?}7#5InstrumentFunctionNoteStacking8E {7#5#9?}7#5#9InstrumentFunctionNoteStacking8E {7#9?}7#9InstrumentFunctionNoteStacking8E {9?}9InstrumentFunctionNoteStacking8E {9#11?}9#11InstrumentFunctionNoteStacking8E {9#5?}9#5InstrumentFunctionNoteStacking 80?07>= 0::>@40 Chord rangeInstrumentFunctionNoteStacking"8? 0::>@40 Chord typeInstrumentFunctionNoteStacking::>@4KChordsInstrumentFunctionNoteStackingMajb5InstrumentFunctionNoteStacking06>@=K9MajorInstrumentFunctionNoteStacking<8=>@=K9minorInstrumentFunctionNoteStacking :B020octaveInstrumentFunctionNoteStacking"80?07>= 0::>@40: Chord range:"InstrumentFunctionNoteStackingView::>@4:Chord:"InstrumentFunctionNoteStackingViewRANGE"InstrumentFunctionNoteStackingView!"+STACKING"InstrumentFunctionNoteStackingView-B0 @CG:0 87<5=O5B 480?07>= 0::>@40, :>B>@K9 1C45B A>45@60BL C:070==>5 G8A;> >:B02.{Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves."InstrumentFunctionNoteStackingView:B02[0/K] octave(s)"InstrumentFunctionNoteStackingViewCHANNELCHANNELInstrumentMidiIOView MIDI ENABLE MIDI INPUTInstrumentMidiIOView MIDI +ENABLE MIDI OUTPUTInstrumentMidiIOViewBMiDi CAB@>9AB20-8AB>G=8:8 A>1KB89(MIDI devices to receive MIDI events fromInstrumentMidiIOViewVMiDi CAB@>9AB20 4;O >B?@02:8 A>1KB89 =0 =8E#MIDI devices to send MIDI events toInstrumentMidiIOViewNOTENOTEInstrumentMidiIOViewPROGRAMPROGRAMInstrumentMidiIOViewVELOCITYVELOCITYInstrumentMidiIOView2E 87.'$ 2x LowPassInstrumentSoundShapingA5 ?@>E>4OBAllpassInstrumentSoundShaping!@54.'$ csg BandPass csgInstrumentSoundShaping!@54.'$ czpg BandPass czpgInstrumentSoundShaping CUTOFFCUTOFFInstrumentSoundShaping!@57 G0AB>BKCutoff frequencyInstrumentSoundShaping3810=85/LFOEnvelopes/LFOsInstrumentSoundShaping"8? D8;LB@0 Filter typeInstrumentSoundShaping KA.'$HiPassInstrumentSoundShaping 87.'$LowPassInstrumentSoundShapingC3MoogInstrumentSoundShaping(>;>A=>-703@0640NI89NotchInstrumentSoundShaping>;./ 57>=0=A0 Q/ResonanceInstrumentSoundShaping RC !@54.'$ 12 4RC BandPass 12dBInstrumentSoundShapingRC !@54.'$ 244RC BandPass 24dBInstrumentSoundShapingRC KA.'$ 124RC HighPass 12dBInstrumentSoundShapingRC KA.'$ 244RC HighPass 24dBInstrumentSoundShapingRC 87.'$ 124RC LowPass 12dBInstrumentSoundShapingRC 87.'$ 244RC LowPass 24dBInstrumentSoundShapingRESORESOInstrumentSoundShaping 57>=0=A ResonanceInstrumentSoundShaping VOLUMEVOLUMEInstrumentSoundShaping2$8;LB@ >:0;L=>9 D>@<0=BKVocal Formant FilterInstrumentSoundShaping@><:>ABLVolumeInstrumentSoundShaping $," FILTERInstrumentSoundShapingView'!"FREQInstrumentSoundShapingView45AL 2K <>65B5 2K1@0BL D8;LB@ 4;O 4>@>6:8 MB>3> 8=AB@C<5=B0. $8;LB@K <>3CB 4>2>;L=> A8;L=> <5=OBL 72CG0=85.Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.InstrumentSoundShapingViewFHzInstrumentSoundShapingViewRESORESOInstrumentSoundShapingView 57>=0=A: Resonance:InstrumentSoundShapingView&,TARGETInstrumentSoundShapingViewR-B0 2:;04:0 ?>72>;O5B 20< =0AB@>8BL >3810NI85. =8 >G5=L 206=K 4;O =0AB@>9:8 72CG0=8O. 0?@8<5@, A ?><>ILN >3810NI59 3@><:>AB8 2K <>65B5 7040BL 7028A8<>ABL 3@><:>AB8 72CG0=8O >B 2@5<5=8. A;8 20< ?>=04>18BAO M<C;8@>20BL <O3:85 AB@C==K5, ?@>AB> 70409B5 1>;LH5 2@5<5=8 =0@0AB0=8O 8 8AG57=>25=8O 72C:0. ! ?><>ILN >13810NI8E 8 =87:>G0AB>B=>3> >AF8;OB>@0 (LFO) 2K 2 =5A:>;L:> I5;G:>2 <KH8 A<>65B5 A>740BL ?@>AB> =525@>OB=K5 72C:8!_These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...!InstrumentSoundShapingView-B0 @CG:0 7040QB :>;8G5AB2> @57>=0=A0 4;O D8;LB@0, MB8< >?@545;O5BAO =0A:>;L:> =C6=> CA8;8BL 1;8609H85 : >B@570==K< G0AB>BK.Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.InstrumentSoundShapingView-B0 @CG:0 CAB0=02;8205B G0AB>BC A@570 4;O 2K1@0==>3> D8;LB@0.  ?@8<5@C, $' 1C45B A@570BL A83=0; =0 G0AB>B0E 2KH5 G0AB>BK A@570, ?>;>A=>-?@>?CA:0NI89 D8;LB@ 1C45B E>@>H> ?@>?CA:0BL A83=0; B>;L:> =0 7040==>9 G0AB>B5 8 B0: 40;55...2Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...InstrumentSoundShapingView!@57 G0AB>B:cutoff frequency:InstrumentSoundShapingView?>@=0O =>B0 Base noteInstrumentTrack,A=>2=0O ?@54CAB0=>2:0Default presetInstrumentTrack0=0; -$ FX channelInstrumentTrack !B5@5>PanningInstrumentTrack">=0;L=>ABLPitchInstrumentTrack(80?07>= B>=0;L=>AB8 Pitch rangeInstrumentTrack@><:>ABLVolumeInstrumentTrackL 53C;8@>2:0 3@><:>AB8 B5:CI53> :0=0;0.@>6:0 unnamed_trackInstrumentTrackE>4InputInstrumentTrackViewMIDIMIDIInstrumentTrackView KE>4OutputInstrumentTrackViewPANInstrumentTrackView 0;0=APanningInstrumentTrackView0;0=A:Panning:InstrumentTrackView VOLInstrumentTrackView@><:>ABLVolumeInstrumentTrackView@><:>ABL:Volume:InstrumentTrackView/LFOENV/LFOInstrumentTrackWindow $#&FUNCInstrumentTrackWindow-$FXInstrumentTrackWindow0=0; -$ FX channelInstrumentTrackWindow$!+ !" GENERAL SETTINGSInstrumentTrackWindow*@><:>ABL 8=AB@C<5=B0Instrument volumeInstrumentTrackWindowMIDIMIDIInstrumentTrackWindowPANInstrumentTrackWindow"PITCHInstrumentTrackWindow PLUGINInstrumentTrackWindow 0;0=APanningInstrumentTrackWindow!B5@5>10;0=A:Panning:InstrumentTrackWindow">=0;L=>ABLPitchInstrumentTrackWindow>80?07>= B>=0;L=>AB8 (?>;CB>=0)Pitch range (semitones)InstrumentTrackWindow">=0;L=>ABL:Pitch:InstrumentTrackWindowRANGEInstrumentTrackWindow.!>E@0=8BL ?@54CAB0=>2:C Save presetInstrumentTrackWindow VOLInstrumentTrackWindow@><:>ABL:Volume:InstrumentTrackWindow2XML D09; =0AB@>5: (*.xpf)XML preset file (*.xpf)InstrumentTrackWindow?@>F5=B>2centsInstrumentTrackWindow!2O70BL :0=0;K Link channels LadspaControl 0=0; Channel LadspaControlDialog!2O70BL :0=0;K Link ChannelsLadspaControlDialog!2O70BL :0=0;K Link channelsLadspaControlView,728=8B5, A?@02:8 =5B.Sorry, no help available.LadspaControlView=0G5=85: Value:LadspaControlView -DD5:BEffect LadspaEffectP0?@>H5= =58725AB=K9 <>4C;L LADSPA %1.#Unknown LADSPA plugin %1 requested. LadspaEffectF2548B5 =>2>5 7=0G5=85 >B %1 4> %2:+Please enter a new value between %1 and %2: LcdSpinBox"A=>2=>5 7=0G5=85 Base value LfoController"=>68B5;L G0AB>BKFrequency Multiplier LfoController>=B@>;;5@ LFOLFO Controller LfoController 07<5@ 2>;=KOscillator amount LfoController$070 2>;=KOscillator phase LfoController!:>@>ABL 2>;=KOscillator speed LfoController$>@<0 2>;=KOscillator waveform LfoControllerAMTLfoControllerDialogBASELfoControllerDialog>;-2> 107K: Base amount:LfoControllerDialogC3 783703.!Click here for a a moog saw-wave.LfoControllerDialog83703.Click here for a saw-wave.LfoControllerDialog!8=CA>840.Click here for a sine-wave.LfoControllerDialog204@0B.Click here for a square-wave.LfoControllerDialog"@5C3>;L=8:.Click here for a triangle-wave.LfoControllerDialog06<8B5 745AL 4;O >?@545;5=8O A2>59 D>@<K. 2>9=>5 =060B85 4;O 2K1>@0 D09;0.AClick here for a user-defined shape. Double click to pick a file.LfoControllerDialog-:A?>=5=B0.#Click here for an exponential wave.LfoControllerDialog5;K9 HC<.Click here for white-noise.LfoControllerDialogLFOLFOLfoControllerDialog>=B@>;;5@ LFOLFO ControllerLfoControllerDialog!:>@>ABL LFO: LFO-speed:LfoControllerDialog*>;8G5AB2> <>4C;OF88:Modulation amount:LfoControllerDialog$PHSLfoControllerDialog!4283 D07K: Phase offset:LfoControllerDialog! SPDLfoControllerDialogj-B0 @CG:0 CAB0=02;8205B 3;C18=C <>4C;OF88 4;O LFO. '5< 1>;LH5 7=0G5=85, B5< 2 1>;LH59 AB5?5=8 2K1@0==0O E0@0:B5@8AB8:0 (=-@, 3@><:>ABL 8;8 G0AB>B0 A@570) 1C45B 7028A5BL >B '(LFO).Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO.LfoControllerDialog-B0 @CG:0 CAB0=02;O205B A:>@>ABL LFO. '5< 1>;LH5 7=0G5=85, B5< 1>;LH5 G0AB>B0 >AF8;;OB>@0.zUse this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect.LfoControllerDialog@-B0 @CG:0 CAB0=02;8205B =0G0;L=CN D07C 87:>'0AB>B=>3> AF8;;OB>@0 (LFO), B. 5. B>G:C, A :>B>@>9 >AF8;;OB>@ =0G8=05B 2K@010BK20BL A83=0;. 0?@8<5@, 5A;8 2K 7040;8 A8=CA>840;L=CN D>@<C A83=0;0 8 =0G0;L=CN D07C 180, 2>;=0 A=0G0;0 ?>94QB 2=87, 0 =5 225@E, B0: 65 :0: 8 4;O :204@0B=>9 2>;=K.#With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.LfoControllerDialog3@04CAKdegreesLfoControllerDialog4>45;0BLtodoLfoControllerDialog&E @02:0&Edit MainWindow&H !?@02:0&Help MainWindow&N >2K9&New MainWindow&B:@KBL...&Open... MainWindow&P @>5:B&Project MainWindow&Q K9B8&Quit MainWindow&S !>E@0=8BL&Save MainWindow&T !5@28A&Tools MainWindow ?@>3@0<<5About MainWindowf!8< 70?CA:05BAO @8B<-10AA @540:B>@. = =5>1E>48< 4;O CAB0=>2:8 @8B<0, >B:@KB8O, 4>102;5=8O 8 C40;5=8O :0=0;>2, 0 B0:65 2K@570=8O, :>?8@>20=8O 8 2AB02:8 @8B<-10AA H01;>=>2 8 B. ?.By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. MainWindow!8< 70?CA:05BAO 8;8 A:@K205BAO <C7K:0;L=K9 @540:B>@. ! 53> ?><>ILN 2K <>65B5 @540:B8@>20BL :><?>78F8N 8 704020BL 2@5<O 2>A?@>872545=8O :064>9 4>@>6:8. "0:65 2K <>65B5 2AB02;OBL 8 ?5@542830BL 70?8A8 ?@O<> 2 A?8A:5 2>A?@>872545=8O.By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. MainWindow>:070BL/A:@KBL >:=> @540:B>@0 02B><0B870F88. ! 53> ?><>ILN 2K <>65B5 ;53:> @540:B8@>20BL48=0<8:C 2K1@0==KE 25;8G8=.Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. MainWindow!:@KBL/?>:070BL <8:H5@ -$D5:B>2. = O2;O5BAO <>I=K< 8=AB@C<5=B>< 4;O C?@02;5=8O MDD5:B0<8. K <>65B5 2AB02;OBL MDD5:BK 2 @07;8G=K5 :0=0;K.Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. MainWindow0?CA: @540B>@0 =>B. ! 53> ?><>ILN 2K <>65B5 ;53:> @540:B8@>20BL <5;>488.pClick here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. MainWindow-B0 :=>?:0 ?>:07K205B/?@OG5B >:=> A 70<5B:0<8.  MB>< >:=5 2K <>65B5 ?><5I0BL ;N1K5 :><<5=B0@88 : A2>59 :><?>78F88.hClick here to show or hide the project notes window. In this window you can put down your project notes. MainWindow$09; =0AB@>5:Configuration file MainWindow65 <>3C A>E@0=8BL =0AB@>9:8Could not save config-file MainWindow5 <>3C 70?8A0BL =0AB@>9:8 2 D09; %1. >7<>6=>, 2K =5 >1;0405B5 ?@020<8 =0 70?8AL 2 =53>. >60;C9AB0, ?@>25@LB5 A2>8 ?@020 8 ?>?@>1C9B5 A=>20.Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. MainWindow(!>740BL =>2K9 ?@>5:BCreate new project MainWindow>!>740BL =>2K9 ?@>5:B ?> H01;>=C Create new project from template MainWindow>:0 GB> A?@02:0 4;O LMMS =5 =0?8A0=0. 5@>OB=>, K A<>65B5 =09B8 =C6=K5 <0B5@80;K =0 http://lmms.sf.net/wiki .lCurrently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. MainWindow8&X M:A?>@B8@>20BL 4>@>6:8...E&xport tracks... MainWindow&X -:A?>@B... E&xport... MainWindowvH81:0 2> 2@5<O >1@01>B:8 D09;0 =0AB@>5: 2 AB@>:5 %1:%2: %38Error while parsing configuration file at line %1:%2: %3 MainWindow-:A?>@B ?@>5:B0Export current project MainWindow!?@02:0Help MainWindow$!?@02:0 =54>ABC?=0Help not available MainWindow<?>@B... Import... MainWindow065BAO, ?>A;54=OO A5AA8O 1K;0 =5?@028;L=> 70:@KB0. %>B8B5 2>AAB0=>28BL ?@>5:B MB>9 A5AA88?hIt looks like the last session did not end properly. Do you want to recover the project of this session? MainWindowLMMS %1LMMS %1 MainWindow&LMMS (*.mmp *.mmpz)LMMS (*.mmp *.mmpz) MainWindow>9 :><?LNB5@ My computer MainWindow ><>9My home MainWindow">8 ?@54CAB0=>2:8 My presets MainWindow>8 ?@>5:BK My projects MainWindow>8 70?8A8 My samples MainWindow!?@02:0 2 A5B8 Online help MainWindow6B:@KBL ACI5AB2CNI89 ?@>5:BOpen existing project MainWindowB:@KBL ?@>5:B Open project MainWindow$@>5:B =5 A>E@0=Q=Project not saved MainWindow,>AAB0=>2;5=85 ?@>5:B0Project recovery MainWindow 5402=85 ?@>5:BKRecently opened project MainWindow 5402=85 ?@>5:BKRecently opened projects MainWindow>@=520O ?0?:0Root directory MainWindow&&A !>E@0=8BL :0:... Save &As... MainWindow<&V !>E@0=8BL :0: =>2CN 25@A8N Save as new &version MainWindow0!>E@0=8BL B5:CI89 ?@>5:BSave current project MainWindow !>E@0=8BL ?@>5:B Save project MainWindow0@0<5B@KSettings MainWindowL>:070BL/A:@KBL @540:B>@ 02B><0B870F88Show/hide Automation Editor MainWindowD>:070BL/A:@KBL @8B<-10AA @540:B>@Show/hide Beat+Bassline Editor MainWindow2>:070BL/A:@KBL <8:H5@ -$Show/hide FX Mixer MainWindow>>:070BL/A:@KBL =>B=K9 @540:B>@Show/hide Piano-Roll MainWindowH>:070BL/A:@KBL <C7K:0;L=K9 @540:B>@Show/hide Song-Editor MainWindowP>:070BL/A:@KBL C?@02;5=85 :>=B@>;;5@0<8Show/hide controller rack MainWindowB>:070BL/A:@KBL 70<5B:8 : ?@>5:BCShow/hide project notes MainWindow 01>G89 :0B0;>3 LMMS (%1) =5 ACI5AB2C5B. !>740BL 53>? >765 2K A<>65B5 A<5=8BL 53> G5@57 @02:C -> 0@0<5B@K.uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindowR@>5:B 1K; 87<5=Q=. !>E@0=8BL 53> A59G0A?OThe current project was modified since last saving. Do you want to save it now? MainWindow5=0720==K9Untitled MainWindow5@A8O %1 Version %1 MainWindow'B> MB>? What's this? MainWindow( 01>G89 :0B0;>3 LMMSWorking directory MainWindow(:0;0 45;5=89Meter Denominator MeterDialog(:0;0 G8A5;Meter Numerator MeterDialog  TIME SIG MeterDialog=0<5=0B5;L Denominator MeterModel'8A;8B5;L Numerator MeterModel#!" !"DEVICEMidiAlsaRaw::setupWidget#!" !"DEVICEMidiAlsaSeq::setupWidget>=B@>;;5@ MIDIMIDI ControllerMidiController<=5@0A?>7=0==K9 <848 :>=B@>;;5@unnamed_midi_controllerMidiController,CAB0=>2:0 =5 7025@H5=0Setup incomplete MidiImportK =5 2:;NG8;8 ?>445@6:C ?@>83@K20B5;O SoundFont2 ?@8 :><?8;OF88 !, >= 8A?>;L7C5BAO 4;O 4>102;5=8O >A=>2=>3> 72C:0 2 8<?>@B8@C5<K5 848 D09;K, ?>MB><C 72C:0 =5 1C45B ?>A;5 8<?>@B0 MB>3> <848 D09;0.You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiImportK =5 CAB0=>28;8 SoundFont ?> C<>;G0=8N 2 ?0@0<5B@0E (@02:0->0AB@>9:8), ?>MB><C ?>A;5 8<?>@B0 <848 D09;0 72C: 2>A?@>872>48BLAO =5 1C45B. 0< A;54C5B 703@C78BL >A=>2=>9 MiDi SoundFont, C:070BL 53> 2 ?0@0<5B@0E 8 ?>?@>1>20BL A=>20.You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. MidiImport#!" !"DEVICEMidiOss::setupWidget2>AB>O==0O A:>@>ABL 22>40Fixed input velocityMidiPort(>AB>O==K9 2K2>4 =>BFixed output noteMidiPort4>AB>O==0O A:>@>ABL 2K2>40Fixed output velocityMidiPortE>4 Input channelMidiPort >=B@>;;5@ 2E>40Input controllerMidiPort2@>3@0<<0 4;O 2K2>40 MiDiOutput MIDI programMidiPort KE>4Output channelMidiPort">=B@>;;5@ 2KE>40Output controllerMidiPort,@8=8<0BL A>1KB8O MIDIReceive MIDI-eventsMidiPort.B?@02;OBL A>1KB8O MIDISend MIDI-eventsMidiPort81@0B>Vibrato NesInstrument "8? <>4C;OF88 %1Modulation type %1OscillatorObject@>4AB@>9:0 >AF8;;OB>@0 %1 3@C10OOsc %1 coarse detuningOscillatorObject\>4AB@>9:0 ;52>3> :0=0;0 >AF8;;OB>@0 %1 B>=:0OOsc %1 fine detuning leftOscillatorObject^>4AB@>9:0 ?@02>3> :0=0;0 >AF8;;OB>@0 %1 B>=:0OOsc %1 fine detuning rightOscillatorObject>!B5@5>10;0=A 4;O >AF8;;OB>@0 %1Osc %1 panningOscillatorObject:!4283 D07K 4;O >AF8;;OB>@0 %1Osc %1 phase-offsetOscillatorObjectJ>4AB@>9:0 AB5@5>-D07K >AF8;;OB>@0 %1Osc %1 stereo phase-detuningOscillatorObject0@><:>ABL >AF8;;OB>@0 %1 Osc %1 volumeOscillatorObject@;04:>ABL A83=0;0 >AF8;;OB>@0 %1Osc %1 wave shapeOscillatorObject8$>@<0 A83=0;0 >AF8;;OB>@0 %1Osc %1 waveformOscillatorObject06<8B5 GB>1K >B:@KBL 4@C3>9 ?0BG-D09;. &8:;8G=>ABL 8 =0AB@>9:8 ?@8 MB>< A>E@0=OBAO.LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanView45AL 2:;NG05BAO/2K:;NG05BAO @568< ?>2B>@0, ?@8 2:;NGQ=88 PatMan 1C45B 8A?>;L7>20BL 8=D>@<0F8N > ?>2B>@5 87 D09;0.jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanView 45AL 2:;NG05BAO/2K:;NG05BAO @568< ?>4AB@>9:8. A;8 >= 2:;NGQ=, B> PatMan 87<5=8B 70?8AL B0:, GB>1K >=0 A>2?040;0 ?> G0AB>B5 A =>B>9.iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanView >2B>@Loop PatmanView 568< ?>2B>@0 Loop mode PatmanView5 2K1@0= D09;No file selected PatmanView&B:@KBL 4@C3>9 ?0BGOpen other patch PatmanView"B:@KBL ?0BG-D09;Open patch file PatmanView$0BG-D09;K (*.pat)Patch-Files (*.pat) PatmanView>4AB@>8BLTune PatmanView"8? ?>4AB@>9:8 Tune mode PatmanView>1028BL H038 Add steps PatternView5@58<5=>20BL Change name PatternView"G8AB8BL 2A5 =>BKClear all notes PatternView.B:@KBL 2 @540:B>@5 =>BOpen in piano-roll PatternView#40;8BL H038 Remove steps PatternView"!1@>A8BL =0720=85 Reset name PatternView 'B>1K >B:@KBL MB>B H01;>= 2 =>B=>< @540:B>@5, 42064K =0 =Q< IQ;:=8B5 A?>;L7C9B5 :>;QA8:> <KH8 4;O CAB0=>2:8 3@><:>AB8 >B45;L=>3> H030Wdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternView7-70 >H81:8 2 AB0@>9 25@A88 LMMS :>=B@>;;5@K 25@H8= =5 <>3CB ?@028;L=> ?>4:;NG0BLAO. 6. C1548B5AL, GB> :>=B@>;;5@K 25@H8= ?@028;L=> ?>4A>548=5=K 8 ?5@5A>E@0=8B5 MB>B D09;, 8728=8B5, 70 ?@8G8=Q==K5 =5C4>1AB20.Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.PeakController">=B@>;;5@ 25@H8=Peak ControllerPeakController2>=B@>;;5@ 25@H8= A 103><Peak Controller BugPeakController>=B@>;;5@ LFOLFO ControllerPeakControllerDialogPEAKPeakControllerDialog#AMNT!PeakControllerEffectControlDialog !"#ATCK!PeakControllerEffectControlDialog&5;8G8=0 <=>68B5;O:Amount Multiplicator:!PeakControllerEffectControlDialogABC?;5=85:Attack:!PeakControllerEffectControlDialogBASE!PeakControllerEffectControlDialog"07>2>5 7=0G5=85: Base amount:!PeakControllerEffectControlDialog!DCAY!PeakControllerEffectControlDialogMULT!PeakControllerEffectControlDialog$;C18=0 <>4C;OF88:Modulation amount:!PeakControllerEffectControlDialog#1K20=85:Release:!PeakControllerEffectControlDialog1A 7=0G5=85 Abs ValuePeakControllerEffectControls$5;8G8=0 <=>68B5;OAmount MultiplicatorPeakControllerEffectControlsABC?;5=85AttackPeakControllerEffectControls ?>@=>5 7=0G5=85 Base valuePeakControllerEffectControls";C18=0 <>4C;OF88Modulation amountPeakControllerEffectControls03;CH8BL 2K2>4 Mute outputPeakControllerEffectControls#1K20=85ReleasePeakControllerEffectControlsr 568< ?>4AB@>9:8.  MB>< @568<5 <>6=> 2K18@0BL =>BK 4;O 02B><0B870F88 8E ?>4AB@0820=8O. >6=> 8A?>;L7>20BL MB> 4;O ?5@5E>4>2 =>B >B >4=>9 : 4@C3>9. ;O 0:B820F88 A :;0280BC@K <Shift+T>.Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. PianoRollH 568< @8A>20=8O =>B, 2 =Q< 2K <>65B5 4>102;OBL/?5@5<5I0BL 8 87<5=OBL 4;8B5;L=>ABL >48=>G=KE =>B. -B> @568< ?> C<>;G0=8N 8 8A?>;L7C5BAO 1>;LHCN G0ABL 2@5<5=8. ;O 2:;NG5=8O MB>3> @568<0 <>6=> 8A?>;L7>20BL :><18=0F8N :;028H Shift+D, C45@68209B5 Ctrl 4;O 2@5<5==>3> ?5@5:;NG5=8O 2 @568< 2K1>@0.Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. PianoRoll 568< AB8@0=8O.  MB>< @568<5 2K <>65B5 AB8@0BL =>BK. ;O 2:;NG5=8O MB>3> @568<0 <>6=> 8A?>;L7>20BL :><18=0F8N :;028H Shift+E.Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. PianoRoll, 568< 2K45;5=8O.  MB>< @568<5 <>6=> 2K45;OBL =>BK, <>6=> B0:65 C45@6820BL Ctrl 2 @568<5 @8A>20=8O, GB>1K <>6=> 1K;> =0 2@5<O 2>9B8 2 @568< 2K45;5=8O.Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. PianoRoll@8 =060B88 =0 MBC :=>?:C =>BK 87 1CD5@0 1C4CB 2AB02;5=K 2 ?5@2K9 2848<K9 B0:B.XClick here and the notes from the clipboard will be pasted at the first visible measure. PianoRoll2@8 =060B88 =0 MBC :=>?:C 2K45;5=K5 =>BK 1C4CB A:>?8@>20=K 2 1CD5@. >765 2K <>65B5 2AB028BL 8E 2 ;N1>5 <5AB> ;N1>3> H01;>=0 A ?><>ILN :=>?:8 "AB028BL".Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll,@8 =060B88 =0 MBC :=>?:C 2K45;5=K5 =>BK 1C4CB 2K@570=K 2 1CD5@. >765 2K <>65B5 2AB028BL 8E 2 ;N1>5 <5AB> ;N1>3> H01;>=0 A ?><>ILN :=>?:8 "AB028BL".Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. PianoRoll$06<8B5 745AL GB>1K ?@>83@0BL B5:CI89 H01;>=. -B> <>65B ?@83>48BLAO ?@8 53> @540:B8@>20=88. > >:>=G0=88 H01;>=0 2>A?@>872545=85 =0G=QBAO A=0G0;0.Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. PianoRollX06<8B5 MBC :=>?:C, 5A;8 2K E>B8B5 70?8A0BL =>BK A CAB@>9AB20 MIDI 8;8 28@BC0;L=>3> A8=B570B>@0 A>>B25BAB2CNI53> :0=0;0. >765 2K A<>65B5 >B@540:B8@>20BL 70?8A0==K9 H01;>=.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. PianoRoll06<8B5 MBC :=>?:C, 5A;8 2K E>B8B5 70?8A0BL =>BK A CAB@>9AB20 MIDI 8;8 28@BC0;L=>3> A8=B570B>@0 A>>B25BAB2CNI53> :0=0;0. > 2@5<O 70?8A8 2A5 =>BK 70?8AK20NBAO 2 MB>B H01;>=, 8 2K 1C45B5 A;KH0BL :><?>78F8N 8;8   4>@>6:C =0 704=5< ?;0=5.Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. PianoRoll06<8B5 745AL, 5A;8 2K E>B8B5 >AB0=>28BL 2>A?@>872545=85 B5:CI53> H01;>=0./Click here to stop playback of current pattern. PianoRollV>?8@>20BL 2K45;5==K5 =>BK 2 1CD5@ (Ctrl+X)Copy selected notes (Ctrl+C) PianoRollX5@5<5AB8BL 2K45;5==K5 =>BK 2 1CD5@ (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll: 568< ?>4AB@0820=8O (Shift+T)Detune mode (Shift+T) PianoRoll2 568< @8A>20=8O (Shift+D)Draw mode (Shift+D) PianoRoll8 568< AB8@0=8O =>B (Shift+E)Erase mode (Shift+E) PianoRoll> ?>A;. =>B5 Last note PianoRoll.B<5B8BL B5:CI89 0::>@4Mark current chord PianoRoll.B<5B8BL B5:CI89 ?>4JQ<Mark current scale PianoRollTB<5B8BL/!=OBL >B<5B:C A B5:CI53> ?>;CB>=0Mark/unmark current semitone PianoRoll#1@0BL 0::>@4KNo chord PianoRoll57 ?>4JQ<0No scale PianoRoll!B5@5>D>=8O =>B Note Panning PianoRoll@><:>ABL =>B Note Volume PianoRoll$8:A0F8O =>B Note lock PianoRoll@AB028BL =>BK 87 1CD5@0 (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRoll(>B=K9 @540:B>@ - %1Piano-Roll - %1 PianoRoll:>B=K9 @540:B>@ - 157 H01;>=0Piano-Roll - no pattern PianoRoll^>A?@>872545=85 B5:CI53> H01;>=0/?0C70 (@>15;)"Play/pause current pattern (Space) PianoRollF2548B5 =>2>5 7=0G5=85 >B %1 4> %2:+Please enter a new value between %1 and %2: PianoRoll`B:@>9B5 H01;>= A ?><>ILN 42>9=>3> I5;G:0 <KHLN!/Please open a pattern by double-clicking on it! PianoRollr0?8A0BL =>BK A F8D@>2>3> <C7K:0;L=>3> 8=AB@C<5=B0 (MIDI)+Record notes from MIDI-device/channel-piano PianoRoll0?8A0BL =>BK A F8D@>2>3> <C7K:0;L=>3> 8=AB@C<5=B0 (MIDI) 2> 2@5<O 2>A?@>872545=8O :><?>78F88 8;8 4>@>6:8  8B<-0AA0JRecord notes from MIDI-device/channel-piano while playing song or BB track PianoRoll4 568< 2K1>@0 =>B (Shift+S)Select mode (Shift+S) PianoRollTAB0=>28BL 2>A?@>87245=85 H01;>=0 (@>15;)'Stop playing of current pattern (Space) PianoRoll!=OBL 2K45;5=85 Unmark all PianoRoll?>@=0O =>B0 Base note PianoView,H81:0 703@C7:8 <>4C;OError while loading pluginPluginH5 ?>;CG8;>AL 703@C78BL <>4C;L %1!Failed to load plugin "%1"!Plugin >4C;L =5 =0945=Plugin not foundPlugin>4C;L %1 >BACBAB2C5B ;81> =5 <>65B 1KBL 703@C65=! @8G8=0: %2AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin.!60BK9 D09; OGG (*.ogg)Compressed OGG-File (*.ogg)ProjectRenderer $09; WAV (*.wav)WAV-File (*.wav)ProjectRendererO 4857 AAQObjectO-<06>@ A#A#QObjectO-15<>;L AbAbQObject!8-4857 BBQObject!8-15<>;L BbBbQObject>-4857 CCQObject>-<06>@ C#C#QObject 5-4857 DDQObject 5-<06>@ D#D#QObject 5-15<>;L DbDbQObject8-4857 EEQObject8-15<>;L EbEbQObject$0-<06>@ F#F#QObject$0-15<>;L FbFbQObject!>;L-4857 GGQObject!>;L-<06>@ G#G#QObject!>;L-15<>;L GbGbQObject0=0;K 2:  Channels In: QWidget0=0;K 87: Channels Out: QWidget"@02>>1;040B5;L:  Copyright: QWidget $09;: File: QWidget$<5AB> A;><0==>3>:In Place Broken: QWidget!>740B5;L: Maker: QWidget0720=85: Name: QWidget5BNoQWidget4 01>B0 2 @50;L=>< 2@5<5=8:Real Time Capable: QWidgetN"@51C5BAO >1@01>B:0 2 @50;L=>< 2@5<5=8:Requires Real Time: QWidget0YesQWidget2$09;K AIFF (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBuffer$09;K AU (*.au)AU-Files (*.au) SampleBuffer,$09;K DrumSynth (*.ds)DrumSynth-Files (*.ds) SampleBuffer&$09;K FLAC (*.flac)FLAC-Files (*.flac) SampleBuffer"$09;K OGG (*.ogg)OGG-Files (*.ogg) SampleBuffer*B:@KBL 72C:>2>9 D09;Open audio file SampleBuffer"$09;K RAW (*.raw)RAW-Files (*.raw) SampleBuffer&$09;K SPEEX (*.spx)SPEEX-Files (*.spx) SampleBuffer"$09;K VOC (*.voc)VOC-Files (*.voc) SampleBuffer$$09;K Wave (*.wav)Wave-Files (*.wav) SampleBuffer>?8@>20BLCopy SampleTCOViewK@570BLCut SampleTCOView:#40;8BL (A@54=OO :=>?:0 <KH8)Delete (middle mousebutton) SampleTCOViewb03;CH8BL/2:;NG8BL (<Ctrl> + A@54=OO :=>?:0 <KH8)#Mute/unmute ( + middle click) SampleTCOViewAB028BLPaste SampleTCOView4#AB0=>28BL/>G8AB8BL 70?8ALSet/clear record SampleTCOViewJK15@8B5 70?8AL 42>9=K< =060B85< <KH8double-click to select sample SampleTCOView>@>6:0 70?8A8 Sample track SampleTrack@><:>ABLVolume SampleTrack"@><:>ABL :0=0;0:Channel volume:SampleTrackView"@><:>ABL 4>@>6:8 Track volumeSampleTrackView VOLSampleTrackView<>1028BL 4>@>6:C 02B><0B870F88Add automation-track SongEditor$>1028BL @8B</10AAAdd beat/bassline SongEditor.>1028BL 4>@>6:C 70?8A8Add sample-track SongEditor606<8B5, GB>1K ?@>A;CH0BL A>740==CN <5;>48N. >A?@>872545=85 =0G=QBAO A ?>78F88 :C@A>@0 (75;Q=K9 B@5C3>;L=8:); 2K <>65B5 42830BL 53> 2> 2@5<O ?@>83@K20=8O.Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditor06<8B5 AN40, 5A;8 2K E>B8B5 >AB0=>28BL 2>A?@>872545=85 <5;>488. C@A>@ ?@8 MB>< 1C45B CAB0=>2;5= =0 =0G0;> :><?>78F88.uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditor.52>7<>6=> >B:@KBL %1 4;O 70?8A8, 2>7<>6=>, =5B @07@5H5=89 =0 70?8AL 2 MB>B D09;, ?6. C4>AB>25@LB5AL, GB> 5ABL 4>ABC? : MB><C D09;C 8 ?>?@>1C9B5 A=>20.Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditor(5 <>3C >B:@KBL D09;Could not open file SongEditor:52>7<>6=> >B:@KBL D09; %1, 25@>OB=>, =5B @07@5H5=89 =0 53> GB5=85. 6. C1548B5AL, GB> 5ABL ?> :@09=59 <5@5 ?@020 =0 GB5=85 MB>3> D09;0 8 ?>?@>1C9B5 5IQ @07.Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor*5 <>3C 70?8A0BL D09;Could not write file SongEditor 568< @8A>20=8O Draw mode SongEditor<@02:0 (2K45;5=85/?5@5<5I5=85)Edit mode (select and move) SongEditorH81:0 2 D09;5 Error in file SongEditor KA>:>5 :0G5AB2>High quality mode SongEditor*A=>2=0O B>=0;L=>ABL  Master pitch SongEditor$A=>2=0O 3@><:>ABL Master volume SongEditor>0G0BL 2>A?@>872545=85 (@>15;)Play song (Space) SongEditorL0?8A0BL AM<?; A> 72C:>2>3> CAB@>9AB20 Record samples from Audio-device SongEditor0?8A0BL AM<?; A 0C48>-CAB@>9AB20 2> 2@5<O 2>A?@>872545=8O 2 <C7K:0;L=>< 8;8 @8B</10AA @540:B>@5?Record samples from Audio-device while playing song or BB track SongEditor(C7K:0;L=K9 @540:B>@ Song-Editor SongEditorFAB0=>28BL 2>A?@>872545=85 (@>15;)Stop song (Space) SongEditor"/BPM TEMPO/BPM SongEditor"5<?Tempo SongEditor$09; %1 2>7<>6=> A>45@68B >H81:8 87-70 :>B>@KE =5 <>65B 703@C78BLAO.BThe file %1 seems to contain errors and therefore can't be loaded. SongEditor,-B> 7=0G5=85 7040QB B5<? <C7K:8 2 C40@0E 2 <8=CBC (0=3;. 011@. BPM). 0 :064K9 B0:B ?@8E>48BAO G5BK@5 C40@0, B0: GB> B5<? 2 C40@0E 2 <8=CBC D0:B8G5A:8 C:07K205B, A:>;L:> G5B25@B59 B0:B0 ?@>83@K205BAO 70 <8=CBC (8;8, GB> B> 65, :>;8G5AB2> B0:B>2, ?@>83@K205<KE 70 G5BK@5 <8=CBK).-The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). SongEditor4=0G5=85: %1 ?>;CB>=(0/>2)Value: %1 semitones SongEditor=0G5=85: %1% Value: %1% SongEditor(>A=>2=0O B>=0;L=>ABL master pitch SongEditor$>A=>2=0O 3@><:>ABL master volume SongEditor"5<? <C7K:8 tempo of song SongEditor(8=59=0O >AL >@48=0B Linear Y axisSpectrumAnalyzerControlDialog8=59=K9 A?5:B@Linear spectrumSpectrumAnalyzerControlDialog 568< :0=0;0 Channel modeSpectrumAnalyzerControls(8=59=0O >AL >@48=0B Linear Y axisSpectrumAnalyzerControls8=59=K9 A?5:B@Linear spectrumSpectrumAnalyzerControls&H !?@02:0&Help TempoSyncKnob1/16 =>BK 16th note TempoSyncKnob1/32 =>BK 32nd note TempoSyncKnob>AL<0O =>BK8th note TempoSyncKnob!2>OCustom  TempoSyncKnob!2>O... Custom... TempoSyncKnob0>A5<L C40@>2 (425 =>BK) Eight beats TempoSyncKnob>;C=>B0 Half note TempoSyncKnob"!8=E@>=870F88 =5BNo Sync TempoSyncKnob'5B25@BL =>BK Quarter note TempoSyncKnob&!8=E@> ?> 1/16 =>BKSynced to 16th Note TempoSyncKnob&!8=E@> ?> 1/32 =>BKSynced to 32nd Note TempoSyncKnob$!8=E@> ?> 1/8 =>BKSynced to 8th Note TempoSyncKnob$!8=E@> ?> 8 C40@0<Synced to Eight Beats TempoSyncKnob.!8=E@> ?> ?>;>28=5 =>BKSynced to Half Note TempoSyncKnob.!8=E@> ?> G5B25@B8 =>BKSynced to Quarter Note TempoSyncKnob(!8=E@> ?> F5;>9 =>B5Synced to Whole Note TempoSyncKnob&!8=E@>=870F8O B5<?0 Tempo Sync TempoSyncKnob&5;0O =>B0 Whole note TempoSyncKnobD=06<8 4;O 87<5=5=8O 548=8F 2@5<5=8click to change time unitsTimeDisplayWidgetB<5=8BLCancelTrackContainer5 <>3C =09B8 D8;LB@ 4;O 8<?>@B0 D09;0 %1. ;O ?>4:;NG5=8O MB>3> D09;0 ?@5>1@07C9B5 53> 2 D>@<0B, ?>445@68205<K9 LMMS.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer45 <>3C 8<?>@B8@>20BL D09;Couldn't import fileTrackContainer(5 <>3C >B:@KBL D09;Couldn't open fileTrackContainer5 <>3C >B:@KBL D09; %1 4;O 70?8A8. @>25@LB5, >1;0405B5 ;8 2K ?@020<8 =0 70?8AL 2 2K1@0==K9 D09; 8 A>45@60I89 53> :0B0;>3 8 ?>?@>1C9B5 A=>20!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer,<?>@B8@CN D09; FLP...Importing FLP-file...TrackContainer.<?>@B8@CN D09; MIDI...Importing MIDI-file...TrackContainer"'B5=85 ?@>5:B0...Loading project...TrackContainer0>4>648B5, ?>60;C9AB0...Please wait...TrackContainerB!<5H0BL 2K2>4K 1 8 2 >AF8;;OB>@>2Mix output of oscillator 1 & 2TripleOscillatorViewF!>2<5AB8BL 2K2>4 >AF8;;OB>@>2 2 8 3Mix output of oscillator 2 & 3TripleOscillatorViewB@C10O ?>4AB@>9:0 >AF8;;OB>@0 %1:Osc %1 coarse detuning:TripleOscillatorView^">G=0O ?>4AB@>9:0 ;52>3> :0=0;0 >AF8;;OB>@0 %1:Osc %1 fine detuning left:TripleOscillatorView`">G=0O ?>4AB@>9:0 ?@02>3> :0=0;0 >AF8;;OB>@0 %1:Osc %1 fine detuning right:TripleOscillatorView40;0=A 4;O >AF8;;OB>@0 %1:Osc %1 panning:TripleOscillatorView4!4283 D07K >AF8;;OB>@0 %1:Osc %1 phase-offset:TripleOscillatorViewL>4AB@>9:0 AB5@5> D07K >AF8;;OB>@0 %1:Osc %1 stereo phase-detuning:TripleOscillatorView2@><:>ABL >AF8;;OB>@0 %1:Osc %1 volume:TripleOscillatorViewZ!8=E@>=878@>20BL ?5@2K9 >AF8;;OB>@ ?> 2B>@><C*Synchronize oscillator 1 with oscillator 2TripleOscillatorViewB!8=E@>=878@>20BL >AF8;;OB>@ 2 8 3*Synchronize oscillator 2 with oscillator 3TripleOscillatorView\A?>;L7>20BL <C3-783703 4;O MB>3> >AF8;;OB>@0.0Use a moog-like saw-wave for current oscillator.TripleOscillatorViewtA?>;L7>20BL 783703>>1@07=K9 A83=0; 4;O MB>3> >AF8;;OB>@0.&Use a saw-wave for current oscillator.TripleOscillatorViewA?>;L7>20BL 30@<>=8G5A:89 (A8=CA>840;L=K9) A83=0; 4;O MB>3> >AF8;;OB>@0.'Use a sine-wave for current oscillator.TripleOscillatorView|A?>;L7>20BL :204@0B=K9 A83=0; (<50=4@) 4;O MB>3> >AF8;;OB>@0.)Use a square-wave for current oscillator.TripleOscillatorViewlA?>;L7>20BL B@5C3>;L=K9 A83=0; 4;O MB>3> >AF8;;OB>@0.+Use a triangle-wave for current oscillator.TripleOscillatorView*040BL D>@<C A83=0;0.3Use a user-defined waveform for current oscillator.TripleOscillatorViewn>4C;8@>20BL 0<?;8BC4C >AF8;;OB>@0 2 A83=0;>< A ?5@2>3>FUse amplitude modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewb>4C;8@>20BL 0<?;8BC4C >AF8;;OB>@0 3 A83=0;>< A 2FUse amplitude modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewvA?>;L7>20BL M:A?>=5=F80;L=K9 A83=0; 4;O MB>3> >AF8;;OB>@0./Use an exponential wave for current oscillator.TripleOscillatorView^>4C;8@>20BL G0AB>BC >AF8;;OB>@0 2 A83=0;>< A 1FUse frequency modulation for modulating oscillator 2 with oscillator 1TripleOscillatorView`>4C;8@>20BL G0AB>BC >AF8;;OB>@0 3 A83=0;>< A> 2FUse frequency modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewX>4C;8@>20BL D07C >AF8;;OB>@0 2 A83=0;>< A 1BUse phase modulation for modulating oscillator 2 with oscillator 1TripleOscillatorViewX>4C;8@>20BL D07C >AF8;;OB>@0 3 A83=0;>< A 2BUse phase modulation for modulating oscillator 3 with oscillator 2TripleOscillatorViewZA?>;L7>20BL 15;K9 HC< 4;O MB>3> >AF8;;OB>@0.'Use white-noise for current oscillator.TripleOscillatorView @C10O @53C;8@>2:0 ?>4AB@>9:8 >AF8;;OB>@0 %1. >7<>6=0 ?>4AB@>9:0 4> 12 ?>;CB>=>2 (4> >4=>9 >:B02K) 225@E 8 2=87. >;57=> 4;O A>740=8O 0::>@4>2.With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.TripleOscillatorViewd-B0 @CG:0 CAB0=02;8205B B>G=CN ?>4AB@>9:C 4;O ;52>3> :0=0;0 >AF8;;OB>@0 %1. >4AB@>9:0 7040QBAO 2 480?07>=5 >B -100 A>BKE 4> +100 A>BKE. -B> ?>;57=> 4;O A>740=8O "A>G=KE" 72C:>2.With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorViewf-B0 @CG:0 CAB0=02;8205B B>G=CN ?>4AB@>9:C 4;O ?@02>3> :0=0;0 >AF8;;OB>@0 %1. >4AB@>9:0 7040QBAO 2 480?07>=5 >B -100 A>BKE 4> +100 A>BKE. -B> ?>;57=> 4;O A>740=8O "A>G=KE" 72C:>2.With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.TripleOscillatorView 53C;OB>@ AB5@5>10;0=A0 >AF8;;OB>@0 %1. 5;8G8=0 -100 >1>7=0G05B, GB> 100% A83=0;0 84QB 2 ;52K9 :0=0;, 0 100 - 2 ?@02K9.With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.TripleOscillatorView6-B0 @CG:0 CAB0=02;8205B =0G0;L=CN D07C >AF8;;OB>@0 %1, B. 5. B>G:C, A :>B>@>9 >AF8;;OB>@ =0G8=05B 2K@010BK20BL A83=0;. 0?@8<5@, 5A;8 2K 7040;8 A8=CA>840;L=CN D>@<C A83=0;0 8 =0G0;L=CN D07C 180, 2>;=0 A=0G0;0 ?>94QB 2=87, 0 =5 225@E. "> 65 4;O <50=4@0 (A83=0;0 ?@O<>C3>;L=>9 D>@<K).)With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.TripleOscillatorView`-B0 @CG:0 CAB0=02;8205B D07>2CN ?>4AB@>9:C >AF8;;OB>@0 %1 <564C :0=0;0<8, B> 5ABL @07=>ABL D07 <564C ;52K< 8 ?@02K< :0=0;0<8. -B> C4>1=> 4;O A>740=8O @0AH8@5=8O AB5@5>MDD5:B>2.With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.TripleOscillatorView-B0 @CG:0 CAB0=02;8205B 3@><:>ABL >AF8;;OB>@0 %1. A;8 0, B> >AF8;;OB>@ 2K:;NG05BAO, 8=0G5 1C45B A;KH=> =0AB>;L:> 3@><:> , :0: BCB CAB0=>2;5=>.With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.TripleOscillatorView@>F5=BKcentsTripleOscillatorView3@04CAKdegreesTripleOscillatorView?>;CB>=[0,>2] semitonesTripleOscillatorViewZ 07@01>BG8:8 A>@B8@>20==K5 ?> G8A;C :><<8B>2:*Contributors ordered by number of commits:Ui#G0AB=8:8InvolvedUi2>=860NI89AO =><5@ 25@A88Decrement version numberVersionedSaveDialog8#25;8G820NI89AO =><5@ 25@A88Increment version numberVersionedSaveDialog2- C?@02;5=85 VST ?;038=>< - VST plugin controlVestigeInstrumentViewZK1>@ 87 C65 703@C65==KE 2 VST ?@54CAB0=>2>:.>Click here to select presets that are currently loaded in VST.VestigeInstrumentView!:@K205B/?>:07K205B 3@0D8G5A:89 ?>;L7>20B5;LA:89 8=B5@D59A (GUI) 2K1@0==>3> <>4C;O VST.QClick here to show or hide the graphical user interface (GUI) of your VST-plugin.VestigeInstrumentViewd06<8B5 745AL 4;O :>=B@>;O VST ?;038=0 G5@57 E>AB.8Click here, if you want to control VST-plugin from host.VestigeInstrumentViewXB:@KBL 4@C3CN .fxp . fxb ?@54CAB0=>2:C VST.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VestigeInstrumentViewB:@KBL 4@C3>9 <>4C;L VST. >A;5 =060B8O =0 :=>?:C ?>O28BAO AB0=40@B=K9 480;>3 2K1>@0 D09;0, 345 2K A<>65B5 2K1@0BL =C6=K9 <>4C;L.Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.VestigeInstrumentViewl!>E@0=8BL B5:CICN ?@54CAB0=>2:C ?@>3@0<<K VST ?;038=0.BClick here, if you want to save current VST-plugin preset program.VestigeInstrumentView06<8B5 745AL 4;O ?5@5:;NG5=8O =0 4@C3CN ?@54CAB0=>2:C ?@>3@0<<K VST ?;038=0.GClick here, if you want to switch to another VST-plugin preset program.VestigeInstrumentViewD#?@02;5=85 VST ?;038=>< G5@57 LMMS!Control VST-plugin from LMMS hostVestigeInstrumentView.818;8>B5:8 DLL (*.dll)DLL-files (*.dll)VestigeInstrumentView*@>3@0<<K EXE (*.exe)EXE-files (*.exe)VestigeInstrumentView!;54CNI89 <+>Next (+)VestigeInstrumentView,>4C;L VST =5 703@C65=No VST-plugin loadedVestigeInstrumentView$B:@KBL <>4C;L VSTOpen VST-pluginVestigeInstrumentView@B:@KBL ?@54CAB0=>2:C VST <>4C;OOpen VST-plugin presetVestigeInstrumentView2B:@KBL 4@C3>9 VST ?;038=Open other VST-pluginVestigeInstrumentView@54CAB0=>2:0PresetVestigeInstrumentView@54K4CI89 <-> Previous (-)VestigeInstrumentView.!>E@0=8BL ?@54CAB0=>2:C Save presetVestigeInstrumentView2>:070BL/A:@KBL 8=B5@D59A Show/hide GUIVestigeInstrumentView$K:;NG8BL 2A5 =>BKTurn off all notesVestigeInstrumentView>Bby VestigeInstrumentView`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />0       
VstEffectControlDialogZK1>@ 87 C65 703@C65==KE 2 VST ?@54CAB0=>2>:.>Click here to select presets that are currently loaded in VST.VstEffectControlDialogh06<8B5 745AL, 4;O :>=B@>;O VST ?;038=>< G5@57 E>AB.8Click here, if you want to control VST-plugin from host.VstEffectControlDialogXB:@KBL 4@C3CN .fxp . fxb ?@54CAB0=>2:C VST.GClick here, if you want to open another *.fxp, *.fxb VST-plugin preset.VstEffectControlDialogl!>E@0=8BL B5:CICN ?@54CAB0=>2:C ?@>3@0<<K VST ?;038=0.BClick here, if you want to save current VST-plugin preset program.VstEffectControlDialogv5@5:;NG5=85 =0 4@C3CN ?@54CAB0=>2:C ?@>3@0<<K VST ?;038=0.GClick here, if you want to switch to another VST-plugin preset program.VstEffectControlDialogN#?@02;5=85 VST ?;038=>< G5@57 LMMS E>AB!Control VST-plugin from LMMS hostVstEffectControlDialog-DD5:BK ?>: Effect by: VstEffectControlDialog!;54CNI89 <+>Next (+)VstEffectControlDialogBB:@KBL ?@54CAB0=>2:C VST ?;038=0Open VST-plugin presetVstEffectControlDialog@54K4CI89 <-> Previous (-)VstEffectControlDialog&!>E@0=8BL =0AB@>9:C Save presetVstEffectControlDialog>:070BL/!:@KBL Show/hideVstEffectControlDialog"" VstPlugin'' VstPlugin.FXB.FXB VstPlugin.FXP.FXP VstPlugin.fxb.fxb VstPlugin.fxp.fxp VstPlugin: >A=>2=K5 : default VstPlugin03@C7:0 <>4C;OLoading plugin VstPlugin*B:@KBL ?@54CAB0=>2:C Open Preset VstPlugin.!>E@0=8BL ?@54CAB0=>2:C Save Preset VstPluginP@54CAB0=>2:0 VST ?;038=0 (*.fxp, *.fxb)Vst Plugin Preset (*.fxp *.fxb) VstPluginX45AL 2K <>65B5 @8A>20BL A>1AB25==K9 A83=0;.ADraw your own waveform here by dragging your mouse on this graph. WatsynView>@<0;87>20BL Normalize WatsynView!8=CA>840 Sine wave WatsynView!3;048BLSmooth WatsynView(8@8=0 ?>;>AK BandwidthZynAddSubFxInstrument#A8; FMFM GainZynAddSubFxInstrument$8;LB@ '0AB>BFilter FrequencyZynAddSubFxInstrument $8;LB@ @57>=0=A0Filter ResonanceZynAddSubFxInstrumentV5@5A;0BL 87<5=5=85 A>1KB89 MiDi C?@02;5=8O"Forward MIDI Control Change EventsZynAddSubFxInstrument>@B0<5=B> PortamentoZynAddSubFxInstrument.(8@8=0 ?>;>AK @57>=0=A0Resonance BandwidthZynAddSubFxInstrument0'0AB>BK F5=B@0 @57>=0=A0Resonance Center FrequencyZynAddSubFxInstrumentBWBWZynAddSubFxView&>;>A0 ?@>?CA:0=8O: Bandwidth:ZynAddSubFxViewl!:@KBL 8;8 ?>:070BL 3@0D8G5A:89 8=B5@D59A ZynAddSubFX.MClick here to show or hide the graphical user interface (GUI) of ZynAddSubFX.ZynAddSubFxViewFM GAINFM GAINZynAddSubFxView@#A8;5=85 G0AB>BK <>4C;OF88 (FM):FM Gain:ZynAddSubFxViewFREQFREQZynAddSubFxView$8;LB@ G0AB>B:Filter Frequency:ZynAddSubFxView"$8;LB@ @57>=0=A0:Filter Resonance:ZynAddSubFxViewV5@5A;0BL 87<5=5=85 A>1KB89 MiDi C?@02;5=8OForward MIDI Control ChangesZynAddSubFxViewPORTPORTZynAddSubFxView>@B0<5=B>: Portamento:ZynAddSubFxViewRESRESZynAddSubFxView RES BWRES BWZynAddSubFxView RES CFRES CFZynAddSubFxView0(8@8=0 ?>;>AK @57>=0=A0:Resonance bandwidth:ZynAddSubFxView2'0AB>BK F5=B@0 @57>=0=A0:Resonance center frequency:ZynAddSubFxView$>:070BL 8=B5@D59AShow GUIZynAddSubFxView#A8;5=85AmplifyaudioFileProcessor>=5F 70?8A8 End of sampleaudioFileProcessor 568< ?>2B>@0 Loop modeaudioFileProcessor$5@525@=CBL 70?8ALReverse sampleaudioFileProcessor0G0;> 70?8A8Start of sampleaudioFileProcessor0?8=0=85StutteraudioFileProcessor<>1028BL 4>@>6:C 02B><0B870F88Add automation-trackbbEditor.>1028BL @8B</;59B<>B82Add beat/basslinebbEditor>1028BL B0:BK Add stepsbbEditor$ 8B< 0AA  540:B>@Beat+Bassline EditorbbEditor06<8B5 GB>1K ?@>83@0BL B5:CICN ;8=8N @8B<-10AA0. =0 1C45B 70:>;LF>20=0 ?> 4>AB865=88 >:>=G0=8O.qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditorHAB0=>28BL 2>A?@>872545=85 (@>15;).4Click here to stop playing of current beat/bassline.bbEditor\3@0/?0C70 B5:CI59 ;8=88 @8B<0/10AA0 (<Space>)(Play/pause current beat/bassline (Space)bbEditor#40;8BL B0:BK Remove stepsbbEditorxAB0=>28BL 2>A?@>872545=85 B5:CI59 ;8=88 @8B<-10AA0 ( ).Stop playback of current beat/bassline (Space)bbEditor7<5=8BL F25B Change color bbTCOView5@58<5=>20BL Change name bbTCOViewBB:@KBL 2 @540:B>@5 @8B<0 8 10AA0Open in Beat+Bassline-Editor bbTCOView"!1@>A8BL =0720=85 Reset name bbTCOView$ 8B<-0AA 8=8O %1Beat/Bassline %1bbTrack>?8O %1 Clone of %1bbTrack;8B5;L=>ABL Samplelength bitInvaderh!35=5@8@>20BL 30@<>=8G5A:89 (A8=CA>840;L=K9) A83=0;.Click for a sine-wave.bitInvaderViewJ!35=5@8@>20BL 703703>>1@07=K9 A83=0;.Click here for a saw-wave.bitInvaderViewP!35=5@8@>20BL :204@0B=CN 2>;=C (<50=4@).Click here for a square-wave.bitInvaderViewB!35=5@8@>20BL B@5C3>;L=K9 A83=0;.Click here for a triangle-wave.bitInvaderView:040BL D>@<C A83=0;0 2@CG=CN.$Click here for a user-defined shape.bitInvaderView0!35=5@8@>20BL 15;K9 HC<.Click here for white-noise.bitInvaderViewL)Q;:=8B5 GB>1K A3;048BL D>@<C A83=0;0.Click here to smooth waveform.bitInvaderViewX45AL 2K <>65B5 @8A>20BL A>1AB25==K9 A83=0;.ADraw your own waveform here by dragging your mouse on this graph.bitInvaderView=B5@?>;OF8O InterpolationbitInvaderView>@<0;87>20BL NormalizebitInvaderView&;8B5;L=>ABL 70?8A8 Sample LengthbitInvaderView 83703Saw wavebitInvaderView!8=CA>840 Sine wavebitInvaderView!3;048BLSmoothbitInvaderView 204@0B (50=4@) Square wavebitInvaderView"@5C3>;L=8: Triangle wavebitInvaderView >;L7>20B5;LA:0OUser defined wavebitInvaderView5;K9 HC<White noise wavebitInvaderView(5 <>3C >B:@KBL D09;Could not open fileexportProjectDialog5 <>3C >B:@KBL D09; %1 4;O 70?8A8. @>25@LB5, >1;0405B5 ;8 2K ?@020<8 =0 70?8AL 2 2K1@0==K9 D09; 8 A>45@60I89 53> :0B0;>3 8 ?>?@>1C9B5 A=>20!Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialog H81:0ErrorexportProjectDialogH81:0 ?@8 >?@545;5=88 :>45:0 D09;0. >?@>1C9B5 2K1@0BL 4@C3>9 D>@<0B 2K2>40.\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog(-:A?>@B ?@>5:B0 2 %1Export project to %1exportProjectDialog1@01>B:0: %1%Rendering: %1%exportProjectDialogF2548B5 =>2>5 7=0G5=85 >B %1 4> %2:+Please enter a new value between %1 and %2:fader@0DGraph graphModel >=5G=0O G0AB>B0 End frequencykickerInstrument#A8;5=85GainkickerInstrument(C<NoisekickerInstrument"0G0;L=0O G0AB>B0Start frequencykickerInstrument">=5G=0O G0AB>B0:End frequency:kickerInstrumentView#A8;5=85:Gain:kickerInstrumentView$0G0;L=0O G0AB>B0:Start frequency:kickerInstrumentView&H !?@02:0&HelpknobF2548B5 =>2>5 7=0G5=85 >B %1 4> %2:+Please enter a new value between %1 and %2:knob^2548B5 =>2>5 7=0G5=85 >B 96,0 4 4> 6,0 4:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob=0;870B>@KAnalysis ToolsladspaBrowserView">ABC?=K5 MDD5:BKAvailable EffectsladspaBrowserView58725AB=K5 Don't knowladspaBrowserView=AB@C<5=BK InstrumentsladspaBrowserView MB>< >:=5 ?>:070=0 8=D>@<0F8O >1> 2A5E <>4C;OE LADSPA, :>B>@K5 >1=0@C68;0 LMMS. =8 @0745;5=K =0 ?OBL :0B53>@89, 2 7028A8<>AB8 >B =0720=89 8 B8?>2 ?>@B>2. >ABC?=K5 MDD5:BK  MB> B5, :>B>@K5 <>3CB 1KBL 8A?>;L7>0=K 2 LMMS. 'B>1K MDD5:B LADSPA <>3 1KBL 8A?>;L7>20=, >= 4>;65=, 2>-?5@2KE, 1KBL A>1AB25==> MDD5:B><, B. 5. 8<5BL :0: 2E>4=K5 B0: 8 2KE>4=K5 :0=0;K. LMMS 2 :0G5AB25 2E>4=>3> :0=0;0 2>A?@8=8<05B 0C48>?>@B, A>45@60I89 2 =0720=88 in , 0 2KE>4=K5 C7=0QB ?> ?>4AB@>:5 out . ;O 8A?>;L7>20=8O 2 LMMS G8A;> 2E>4=KE :0=0;>2 4>;6=> A>2?040BL A G8A;>< 2KE>4=KE, 8 MDD5:B 4>;65= 8<5BL 2>7<>6=>ABL 8A?>;L7>20=8O 2 @50;L=>< 2@5<5=8. 54>ABC?=K5 MDD5:BK  MB> <>4C;8 LADSPA, >?>7=0==K5 2 :0G5AB25 MDD5:B>2, >4=0:> ;81> A =5A>2?040NI8<8 :>;8G5AB0<8 2E>4=KE/2KE>4=KE :0=0;>2, ;81> =5 ?@54=07=0G5==K5 4;O 8A?>;L7>20=8O 2 @50;L=>< 2@5<5=8. =AB@C<5=BK  MB> <>4C;8, C :>B>@KE 5ABL B>;L:> 2KE>4=K5 :0=0;K. =0;870B>@K  MB> <>4C;8, >1;040NI85 ;8HL 2E>4=K<8 :0=0;0<8. 58725AB=K5  <>4C;8, C :>B>@KE =5 1K;> >1=0@C65=> =8 2E>4=KE, =8 2KE>4=KE :0=0;>2. 2>9=>9 I5;G>: ;C2>9 :=>?:>9 <KH8 ?> <>4C;N 40AB 8=D>@<0F8N > 53> ?>@B0E.TThis dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports.ladspaBrowserView"8?:Type:ladspaBrowserView&54>ABC?=K5 MDD5:BKUnavailable EffectsladspaBrowserView?8A0=85 DescriptionladspaDescription >4C;8PluginsladspaDescription C48>AudioladspaPortDialog#?@02;5=85ControlladspaPortDialog0?@02;5=85 DirectionladspaPortDialog@>1=>5FloatladspaPortDialog2>4InputladspaPortDialog &5;>5IntegerladspaPortDialog>30@8D<8G5A:89 LogarithmicladspaPortDialog45=LH5 < !B0=40@B < >;LH5Min < Default < MaxladspaPortDialog0720=85NameladspaPortDialog K2>4OutputladspaPortDialog >@BKPortsladspaPortDialog'0AB>B0 2K1>@:8RateladspaPortDialog"028A8<>ABL >B SR SR DependentladspaPortDialog:;NG5=>ToggledladspaPortDialog"8?TypeladspaPortDialog0YesladspaPortDialog244/>:B D8;LB@24dB/oct Filter lb302Synth :F5=BAccent lb302Synth ;CE>Dead lb302SynthA:065=85 Distortion lb302Synth !4283Slide lb302Synth!4283 70BCE0=8O Slide Decay lb302Synth"'0AB>B0 A@570 VCFVCF Cutoff Frequency lb302Synth$!?04 >3810NI59 VCFVCF Envelope Decay lb302Synth.>4C;OF8O >3810NI59 VCFVCF Envelope Mod lb302Synth#A8;5=85 VCF VCF Resonance lb302Synth$>@<0 A83=0;0Waveform lb302SynthJ303-89, 244/>:B02C, 3-?>;L=K9 D8;LB@&303-es-que, 24dB/octave, 3 pole filterlb302SynthViewh!35=5@8@>20BL 30@<>=8G5A:89 (A8=CA>840;L=K9) A83=0;.Click for a sine-wave.lb302SynthViewF!35=5@8@>20BL 2>;=C ?>E>6CN =0 <C3. Click here for a moog-like wave.lb302SynthView*!35=5@8@>20BL 783703.Click here for a saw-wave.lb302SynthView\!>740BL :204@0B=CN 2>;=C 70:@C3;Q==CN 2 :>=F5.0Click here for a square-wave with a rounded end.lb302SynthView,!35=5@8@>20BL :204@0B.Click here for a square-wave.lb302SynthViewB!35=5@8@>20BL B@5C3>;L=K9 A83=0;.Click here for a triangle-wave.lb302SynthViewJ5=5@8@>20BL M:A?>=5=F80;L=K9 A83=0;.#Click here for an exponential wave.lb302SynthView0!35=5@8@>20BL 15;K9 HC<.Click here for white-noise.lb302SynthView'0AB>B0 A@570: Cutoff Freq:lb302SynthView!:DIST:lb302SynthView !?04:Decay:lb302SynthView>4 381:Env Mod:lb302SynthViewC3 2>;=0 Moog wavelb302SynthViewB72C:: Resonance:lb302SynthView6>;=0 A:@C3;5==>3> :204@0B0Rounded square wavelb302SynthView 83703Saw wavelb302SynthView!8=CA>840 Sine wavelb302SynthView!4283 A?040: Slide Decay:lb302SynthView204@0B Square wavelb302SynthView""@5C3>;L=0O 2>;=0 Triangle wavelb302SynthView5;K9 HC<White noise wavelb302SynthView244/>:B D8;LB@24dB/oct Filter lb303Synth :F5=BAccent lb303Synth ;CE>Dead lb303SynthA:065=85 Distortion lb303Synth !4283Slide lb303Synth!4283 A?040 Slide Decay lb303Synth"'0AB>B0 A@570 VCFVCF Cutoff Frequency lb303Synth$!?04 >3810NI59 VCFVCF Envelope Decay lb303Synth">4 3810NI59 VCFVCF Envelope Mod lb303Synth 57>=0=A VCF VCF Resonance lb303Synth$>@<0 A83=0;0Waveform lb303SynthJ303-89, 244/>:B02C, 3-?>;L=K9 D8;LB@&303-es-que, 24dB/octave, 3 pole filterlb303SynthView! CUTlb303SynthView'0AB>B0 A@570: Cutoff Freq:lb303SynthView!DEClb303SynthView!DISTlb303SynthView!:DIST:lb303SynthView !?04:Decay:lb303SynthView ENV MODlb303SynthView>4 3810NI59:Env Mod:lb303SynthView RESlb303SynthView 57>=0=A: Resonance:lb303SynthView !4283SLIDElb303SynthView!4283 A?040: Slide Decay:lb303SynthView >;=0WAVElb303SynthView >;=0:WAVE:lb303SynthViewADSRADSRmalletsInstrument8A:>B5:0AgogomalletsInstrument #40@KBeatsmalletsInstrument 0:;>=BowedmalletsInstrument"O6Q;0O ?>ABC?LClumpmalletsInstrument5@5E>4 CrossfademalletsInstrument !B5:;>GlassmalletsInstrumentQAB:>ABLHardnessmalletsInstrument;C18=0 LFO LFO DepthmalletsInstrument!:>@>ABL LFO LFO SpeedmalletsInstrument0@8<10MarimbamalletsInstrument&BACBAB2CNI85 D09;K Missing filesmalletsInstrument>4C;OB>@ ModulatormalletsInstrument2865=85MotionmalletsInstrument>;>65=85PositionmalletsInstrument02;5=85PressuremalletsInstrument 57>ResomalletsInstrument!:>@>ABLSpeedmalletsInstrument 071@>ASpreadmalletsInstrument!2545=85 @CG5: Stick MixmalletsInstrument"815BA:85 H0@K Tibetan BowlmalletsInstrument "@C1=K5 :>;>:>;0 Tubular BellsmalletsInstrument&>4AB@>5==K5 ?>;>AK Tuned BarmalletsInstrument"20 D8:A8@>20==KE Two FixedmalletsInstrument$ 02=><5@=K5 ?>;>AK Uniform BarmalletsInstrument81@0D>= VibraphonemalletsInstrument'0AB>B0 281@0B> Vibrato FreqmalletsInstrument #A8;5=85 281@0B> Vibrato GainmalletsInstrument5@52>1Wood1malletsInstrument5@52>2Wood2malletsInstrument>E>65, GB> CAB0=>2;5=K =5 2A5 ?0:5BK Stk. 0< A;54C5B MB> ?@>25@8BL!aYour Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!malletsInstrumentADSRADSRmalletsInstrumentView ADSR:ADSR:malletsInstrumentView 0:;>=BowedmalletsInstrumentView5@5E>4 CrossfademalletsInstrumentView5@5E>4: Crossfade:malletsInstrumentViewQAB:>ABLHardnessmalletsInstrumentViewQAB:>ABL: Hardness:malletsInstrumentView=AB@C<5=B InstrumentmalletsInstrumentView;C18=0 LFO LFO DepthmalletsInstrumentView;C18=0 LFO: LFO Depth:malletsInstrumentView!:>@>ABL LFO LFO SpeedmalletsInstrumentView!:>@>ABL LFO: LFO Speed:malletsInstrumentView>4C;OB>@ ModulatormalletsInstrumentView>4C;OB>@: Modulator:malletsInstrumentView2865=85MotionmalletsInstrumentView2865=85:Motion:malletsInstrumentView>;>65=85PositionmalletsInstrumentView>;>65=85: Position:malletsInstrumentView02;5=85PressuremalletsInstrumentView02;5=85: Pressure:malletsInstrumentView!:>@>ABLSpeedmalletsInstrumentView!:>@>ABL:Speed:malletsInstrumentView 071@>ASpreadmalletsInstrumentView 071@>A:Spread:malletsInstrumentView!2545=85 @CG5: Stick MixmalletsInstrumentView!2545=85 @CG5:: Stick Mix:malletsInstrumentView'0AB. 281Vib FreqmalletsInstrumentView81@0B>: Vib Freq:malletsInstrumentView#A8;. 281@0B>Vib GainmalletsInstrumentView#A8;. 281@0B>: Vib Gain:malletsInstrumentView81@0B>VibratomalletsInstrumentView81@0B>:Vibrato:malletsInstrumentView0:@KBL Close manageVSTEffectView4#?@02;5=85 VST ?0@0<5B@0<8 - VST parameter controlmanageVSTEffectView 2B><0B878@>20=> AutomatedmanageVSTEffectView06<8B5 745AL, 5A;8 E>B8B5 2845BL B>;L:> 02B><0B878@>20==K5 ?0@0<5B@K.=870F88 2A5E ?0@0<5B@>2 A VST ?;038=><.EClick here if you want to synchronize all parameters with VST plugin.manageVSTEffectViewd0:@KBL >:=> C?@02;5=8O @53C;OB>@0<8 VST MDD5:B>2.(Close VST effect knob-controller window.manageVSTEffectView"VST A8=E@>=870F8OVST SyncmanageVSTEffectView0:@KBL Close manageVestigeInstrumentView.#?@02;5=85 VST ?;038=>< - VST plugin controlmanageVestigeInstrumentView 2B><0B878@>20=> AutomatedmanageVestigeInstrumentView06<8B5 745AL, 5A;8 E>B8B5 2845BL B>;L:> 02B><0B878@>20==K5 ?0@0<5B@K.=870F88 2A5E ?0@0<5B@>2 VST ?;038=0.EClick here if you want to synchronize all parameters with VST plugin.manageVestigeInstrumentViewb0:@KBL >:=> C?@02;5=8O @53C;OB>@0<8 VST ?;038=0.(Close VST plugin knob-controller window.manageVestigeInstrumentView"VST A8=E@>=870F8OVST SyncmanageVestigeInstrumentView&H !?@02:0&HelpnineButtonSelectorFMFMopl2instrument 1 ABC?;5=85 Op 1 Attackopl2instrument 1 !?04 Op 1 Decayopl2instrument 1 >72@0B Op 1 Feedbackopl2instrument* 1 =>68B5;L G0AB>BOp 1 Frequency Multipleopl2instrument> 1 ;NG520O AB02:0 C25;8G5=8OOp 1 Key Scaling Rateopl2instrument 1 #@>25=L Op 1 Levelopl2instrument. 1 #@>25=L C25;8G5=8OOp 1 Level Scalingopl2instrument, 1 #40@=0O >3810NI0OOp 1 Percussive Envelopeopl2instrument 1 #1K20=85 Op 1 Releaseopl2instrument 1 K45@6:0 Op 1 Sustainopl2instrument 1 "@5<>;> Op 1 Tremoloopl2instrument? 1 81@0B> Op 1 Vibratoopl2instrument 1 >;=0 Op 1 Waveformopl2instrument 2 ABC?;5=85 Op 2 Attackopl2instrument 2 !?04 Op 2 Decayopl2instrument* 2 =>68B5;L G0AB>BOp 2 Frequency Multipleopl2instrument< 2 ;NG520O AB02:0 <=>68B5;OOp 2 Key Scaling Rateopl2instrument 2 #@>25=L Op 2 Levelopl2instrument. 2 #@>25=L C25;8G5=8OOp 2 Level Scalingopl2instrument, 2 #40@=0O >3810NI0OOp 2 Percussive Envelopeopl2instrument 2 #1K20=85 Op 2 Releaseopl2instrument 2 K45@6:0 Op 2 Sustainopl2instrument 2 "@5<>;> Op 2 Tremoloopl2instrument? 2 81@0B> Op 2 Vibratoopl2instrument 2 >;=0 Op 2 Waveformopl2instrument0BGPatchopl2instrument;C18=0 B@5<>;> Tremolo Depthopl2instrument;C18=0 281@0B> Vibrato Depthopl2instrumentA:065=85 DistortionorganicInstrument@><:>ABLVolumeorganicInstrumentA:065=85: Distortion:organicInstrumentView40;0=A 4;O >AF8;;OB>@0 %1:Osc %1 panning:organicInstrumentView2@><:>ABL >AF8;;OB>@0 %1:Osc %1 volume:organicInstrumentViewB$>@<0 A83=0;0 4;O >AF8;;OB>@0 %1:Osc %1 waveform:organicInstrumentView!;CG09=> RandomiseorganicInstrumentView@><:>ABL:Volume:organicInstrumentView A>BK5centsorganicInstrumentView 86=85BasspapuInstrumentLB ?5@2>3> :0=0;0 : SO1 (?@02K9 :0=0;)Channel 1 to SO1 (Right)papuInstrumentJB ?5@2>3> :0=0;0 : SO2 (;52K9 :0=0;)Channel 1 to SO2 (Left)papuInstrument0@><:>ABL ?5@2>3> :0=0;0Channel 1 volumepapuInstrumentLB 2B>@>3> :0=0;0 : SO1 (?@02K9 :0=0;)Channel 2 to SO1 (Right)papuInstrumentJB 2B>@>3> :0=0;0 : SO2 (;52K9 :0=0;)Channel 2 to SO2 (Left)papuInstrument0@><:>ABL 2B>@>3> :0=0;0Channel 2 volumepapuInstrumentNB B@5BL53> :0=0;0 : SO1 (?@02K9 :0=0;)Channel 3 to SO1 (Right)papuInstrumentLB B@5BL53> :0=0;0 : SO2 (;52K9 :0=0;)Channel 3 to SO2 (Left)papuInstrument2@><:>ABL B@5BL53> :0=0;0Channel 3 volumepapuInstrumentRB G5B2Q@B>3> :0=0;0 : SO1 (?@02K9 :0=0;)Channel 4 to SO1 (Right)papuInstrumentPB G5B2Q@B>3> :0=0;0 : SO2 (;52K9 :0=0;)Channel 4 to SO2 (Left)papuInstrument6@><:>ABL G5B2Q@B>3> :0=0;0Channel 4 volumepapuInstrument,KE>4=>9 C@>25=L A;520Left Output levelpapuInstrumentJ;8=0 :064>3> B0:B0 2 @0A?@>AB@0=5=88Length of each step in sweeppapuInstrument.KE>4=>9 C@>25=L A?@020Right Output levelpapuInstrument*!4283 H8@8=K @538AB@0Shift Register widthpapuInstrumentH>;-2> @0A?@>AB@0=5=8O A42830 2?@02>Sweep RtShift amountpapuInstrument60?@02;5=85 @0A?@>AB@0=5=8OSweep directionpapuInstrument*@5<O @0A?@>AB@0=5=8O Sweep timepapuInstrument5@E=85TreblepapuInstrumentB1JQ< =0?@02;5=8O @0A?@>AB@0=5=8OVolume sweep directionpapuInstrument& 01>G0O D>@<0 2>;=KWave Pattern DutypapuInstrument 86=85BasspapuInstrumentView86=85:Bass:papuInstrumentView*0=0;1 2 SO1 (@02K9)Channel1 to SO1 (Right)papuInstrumentView(0=0;1 2 SO2 (52K9)Channel1 to SO2 (Left)papuInstrumentView*0=0;2 2 SO1 (@02K9)Channel2 to SO1 (Right)papuInstrumentView(0=0;2 2 SO2 (52K9)Channel2 to SO2 (Left)papuInstrumentView*0=0;3 2 SO1 (@02K9)Channel3 to SO1 (Right)papuInstrumentView(0=0;2 2 SO2 (52K9)Channel3 to SO2 (Left)papuInstrumentView*0=0;4 2 SO1 (@02K9)Channel4 to SO1 (Right)papuInstrumentView(0=0;4 2 SO2 (52K9)Channel4 to SO2 (Left)papuInstrumentView( 8A>20BL 2>;=C 745ALDraw the wave herepapuInstrumentView<;8=0 :064>3> H030 2 @072Q@B:5Length of each step in sweeppapuInstrumentView>;8=0 :064>3> H030 2 @072Q@B:5:Length of each step in sweep:papuInstrumentView*@><:>ABL :0=0;0 HC<0Noise Channel VolumepapuInstrumentView,@><:>ABL :0=0;0 HC<0:Noise Channel Volume:papuInstrumentView,@><:>ABL SO1 (@02K9)SO1 Volume (Right)papuInstrumentView.@><:>ABL SO1 (@02K9):SO1 Volume (Right):papuInstrumentView*@><:>ABL SO2 (52K9)SO2 Volume (Left)papuInstrumentView,@><:>ABL SO2 (52K9):SO2 Volume (Left):papuInstrumentView*!4283 H8@8=K @538AB@0Shift Register WidthpapuInstrumentView<@><:>ABL :204@0B=>3> :0=0;0 1Square Channel 1 VolumepapuInstrumentView>@><:>ABL :204@0B=>3> :0=0;0 1:Square Channel 1 Volume:papuInstrumentView<@><:>ABL :204@0B=>3> :0=0;0 2Square Channel 2 VolumepapuInstrumentView>@><:>ABL :204@0B=>3> :0=0;0 2:Square Channel 2 Volume:papuInstrumentView*0?@02;5=85 @072Q@B:8Sweep DirectionpapuInstrumentView:>;-2> @072Q@B:8 A4283 2?@02>Sweep RtShift amountpapuInstrumentView<>;-2> @072Q@B:8 A4283 2?@02>:Sweep RtShift amount:papuInstrumentView@5<O @072Q@B:8 Sweep TimepapuInstrumentView @5<O @072Q@B:8: Sweep Time:papuInstrumentViewT>;-2> C25;8G5=8O 8;8 C<5=LH5=8O 2 G0AB>B5/The amount of increase or decrease in frequencypapuInstrumentView>045@6:0 <564C 87<5=5=8O<8 H030The delay between step changepapuInstrumentView 01>G89 F8:; MB> :>MDD8F85=B 4;8B5;L=>AB8 (2@5<5=8) 2:;NG5==>3> A83=0;0 >B=>A8B5;L=> 2A53> ?5@8>40 A83=0;0.mThe duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.papuInstrumentViewb"5<? ?@>O2;5=8O C25;8G5=8O 8;8 A=865=8O 2 G0AB>B5:The rate at which increase or decrease in frequency occurspapuInstrumentView5@E=85TreblepapuInstrumentView5@E=85:Treble:papuInstrumentView>@><:>ABL =0?@02;5=8O @072Q@B:8Volume Sweep DirectionpapuInstrumentView4@><:>ABL 2>;=>2>3> :0=0;0Wave Channel VolumepapuInstrumentView6@><:>ABL 2>;=>2>3> :0=0;0:Wave Channel Volume:papuInstrumentView 8AC=>: 2>;=K Wave PatternpapuInstrumentView& 01>G0O D>@<0 2>;=KWave Pattern DutypapuInstrumentView& 01>G0O D>@<0 2>;=KWave pattern dutypapuInstrumentView( 01>G0O D>@<0 2>;=K:Wave pattern duty:papuInstrumentViewV2-@568<=K9 A8=B <>4C;OF88 G0AB>B (FM synth)2-operator FM Synth pluginBrowser<!8=B570B>@ 72C:>2 2@>45 >@30=0*Additive Synthesizer for organ-like sounds pluginBrowserb0AB@08205<K9 A8=B570B>@ 72C:>70?8A59 (wavetable)"Customizable wavetable synthesizer pluginBrowserK <>65B5 ?5@5=>A8BL =C6=K5 20< 8=AB@C<5=BK 87 MB>9 ?0=5;8 2 <C7K:0;L=K9, @8B<-10AA @540:B>@ 8;8 2 ACI5AB2CNICN 4>@>6:C 8=AB@C<5=B0.nDrag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. pluginBrowser,AB@>5==K9 ZynAddSubFXEmbedded ZynAddSubFX pluginBrowser*-<C;OF8O GameBoy (TM)Emulation of GameBoy (TM) APU pluginBrowser-<C;OF8O MOS6581 8 MOS8580. A?>;L7>20;>AL =0 :><?LNB5@5 Commodore 64.ZEmulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. pluginBrowserR$8;LB@ 4;O 8<?>@B8@>20=8O D09;>2 FL Stuio1Filter for importing FL Studio projects into LMMS pluginBrowserR$8;LB@ 4;O 8<?>@B0 Hydrogen D09;>2 2 LMMS-Filter for importing Hydrogen files into LMMS pluginBrowserZ$8;LB@ 4;O 2:;NG5=8O D09;0 MIDI 2 ?@>5:B !)Filter for importing MIDI-files into LMMS pluginBrowserD0BG-8=AB@C<5=B, A>2<5AB8<K9 A GUSGUS-compatible patch instrument pluginBrowserV57025@HQ==0O <>=>D>=8G5A:0O 8<8B0F8O tb303%Incomplete monophonic imitation tb303 pluginBrowser$17>@ 8=AB@C<5=B>2Instrument browser pluginBrowser=AB@C<5=BKInstrument plugins pluginBrowserLMMS ?>@B SFXRLMMS port of sfxr pluginBrowserH>:070BL CAB0=>2;5==K5 <>4C;8 LADSPAList installed LADSPA plugins pluginBrowser<@>83@K20B5;L D09;>2 SoundFontPlayer for SoundFont files pluginBrowserx>4C;L 4;O CAB0=>2:8 7=0G5=89 @53C;OB>@>2 ?> ?8:0< 3@><:>AB8-Plugin for controlling knobs with sound peaks pluginBrowsern>4C;L, CA8;820NI89 @07=8FC <564C :0=0;0<8 AB5@5>70?8A8=Plugin for enhancing stereo separation of a stereo input file pluginBrowserb>4C;L 4;O ?@>872>;L=>3> C?@02;5=8O AB5@5>2KE>4><,Plugin for freely manipulating stereo output pluginBrowser$5;>48G=K5 C40@=K5Tuneful things to bang on pluginBrowser\VST - E>AB 4;O ?>445@6:8 <>4C;59 VST(i) 2 LMMS-VST-host for using VST(i)-plugins within LMMS pluginBrowser4-<C;OF8O 281@8@CNI8E AB@C=Vibrating string modeler pluginBrowser(>?8A0=85 >BACBAB2C5Bno description pluginBrowserz>4C;L, ?>72>;ONI89 8A?>;L7>20BL 2 LMMS ;N1K5 MDD5:BK LADSPA.6plugin for using arbitrary LADSPA-effects inside LMMS. pluginBrowser>;C&68@=K9&Bold projectNotes&&25B... &Color... projectNotes&C >?8@>20BL&Copy projectNotes&C@A82&Italic projectNotes> &H8@8=5&Justify projectNotes> &;52><C :@0N&Left projectNotes&P AB028BL&Paste projectNotes&R >2B>@8BL&Redo projectNotes > &?@02><C :@0N&Right projectNotes&>4G5@:=CBL &Underline projectNotes&U B<5=8BL&Undo projectNotes> &F5=B@CC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotesCtrl+E projectNotesCtrl+I projectNotesCtrl+J projectNotesCtrl+L projectNotesCtrl+R projectNotesCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotes&t K@570BLCu&t projectNotes @02:0 Edit Actions projectNotes$>@<0B8@>20=85Format Actions projectNotes"0<5B:8 : ?@>5:BC Project notes projectNotesb45AL 2K <>65B5 45@60BL 70<5B:8 : A2>5<C ?@>5:BC.!Put down your project notes here. projectNotes 5@58<5=>20BL... Rename... renameDialog #/ !!"AUDIO INTERFACE setupDialog>0B0;>3 A M;5<5=B0<8 >D>@<;5=8OArtwork directory setupDialog0@0<5B@K 72C:0Audio settings setupDialog  #$  BUFFER SIZE setupDialog&$>=>2>5 87>1@065=85Background artwork setupDialogB<5=8BLCancel setupDialogLK1>@ :0B0;>30 CAB0=>2;5==>9 FL Studio'Choose FL Studio installation directory setupDialogBK1>@ :0B0;>30 A <>4C;O<8 LADSPA Choose LADSPA plugin directory setupDialog8K1>@ @01>G53> :0B0;>30 LMMSChoose LMMS working directory setupDialog4K1>@ :0B0;>30 STK rawwaveChoose STK rawwave directory setupDialogTK1>@ :0B0;>30 A B5<>9 >D>@<;5=8O 4;O LMMSChoose artwork-theme directory setupDialog6K1@0BL D>=>2>5 87>1@065=85Choose background artwork setupDialog2K1@0BL 3;02=K9 SoundFontChoose default SoundFont setupDialogJK1>@ A2>53> :0B0;>30 4;O <>4C;59 VST Choose your VST-plugin directory setupDialog(#60BL :=>?:8 4>@>6:8Compact track buttons setupDialogF> C<>;G0=8N A68<0BL D09;K ?@>5:B>2"Compress project files per default setupDialog0A=>2=>9 Soundfont D09; Default Soundfont File setupDialogRB>1@060BL 3@><:>AB8 2 45F815;0E (=0?@.) Display volume as dBV  setupDialog@:;NG8BL DC=:F8N 02B>-A>E@0=5=8OEnable auto save feature setupDialog`:;NG8BL >1>7=0G5=85 =>B 2 <C7K:0;L=>< @540:B>@5 Enable note labels in piano roll setupDialog$:;NG8BL ?>4A:07:8Enable tooltips setupDialog\:;NG8BL >B>1@065=85 D>@<K 72C:>2 ?> C<>;G0=8N"Enable waveform display by default setupDialog60B0;>3 CAB0=>2:8 FL Studio FL Studio installation directory setupDialog2$@03<5=B>2: %1 B:;8:: %2Frames: %1 Latency: %2 ms setupDialog1I85 ?0@0<5B@KGeneral settings setupDialogP 568< 2KA>:>3> :0G5AB20 4;O 2K2>40 72C:0HQ-mode for output audio-device setupDialog>60;C9AB0, 2K15@8B5 8=B5@D59A MIDI.  7028A8<>AB8 >B :>=D83C@0F88 2> 2@5<O :><?8;8@>20=8O ?@>3@0<<K, 2K <>65B5 8A?>;L7>20BL ALSA, OSS 8 4@C385.  =86=59 G0AB8 >:=0 =0AB@>9:8 <>6=> 7040BL A?5F8D8G5A:85 ?0@0<5B@K 2K1@0==>3> 8=B5@D59A0.Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. setupDialog>60;C9AB0, 2K15@8B5 72C:>2CN A8AB5<C.  7028A8<>AB8 >B :>=D83C@0F88 2> 2@5<O :><?8;8@>20=8O ?@>3@0<<K, 2K <>65B5 8A?>;L7>20BL ALSA, JACK, OSS 8 4@C385.  =86=59 G0AB8 >:=0 =0AB@>9:8 <>6=> 7040BL A?5F8D8G5A:85 ?0@0<5B@K 2K1@0==>9 A8AB5<K.Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. setupDialog45AL 2K <>65B5 =0AB@>8BL @07<5@ 2=CB@5==53> 72C:>2>3> 1CD5@0 LMMS. 5=LH85 7=0G5=8O 40NB <5=LH55 2@5<O >B:;8:0 ?@>3@0<<K, => ?>2KH0NB ?>B@51;5=85 @5AC@A>2 - MB> >A>15==> 70<5B=> =0 AB0@KE <0H8=0E 8 A8AB5<0E, O4@> :>B>@KE =5 ?>445@68205B ?@8>@8B5B0 @50;L=>3> 2@5<5=8. A;8 =01;N405BAO ?@5@K28ABK9 72C:, ?>?@>1C9B5 C25;8G8BL @07<5@ 1CD5@0.Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. setupDialog&CB8 <>4C;59 LADSPALADSPA plugin paths setupDialog( 01>G89 :0B0;>3 LMMSLMMS working directory setupDialog" $! MIDIMIDI INTERFACE setupDialog0@0<5B@K MIDI MIDI settings setupDialog  MISC setupDialogOK setupDialogR 568< >:=0 >4=>9 8=AB@C<5=B0;L=>9 4>@>6:8 One instrument track window mode setupDialogCB8Paths setupDialog80@0<5B@K ?@>872>48B5;L=>AB8Performance settings setupDialog#GB8B5, GB> 1>;LH8=AB2> =0AB@>5: =5 2ABC?OB 2 A8;C 4> ?5@570?CA:0 ?@>3@0<<K!GPlease note that most changes won't take effect until you restart LMMS! setupDialogD>AAB0=>28BL 7=0G5=85 ?> C<>;G0=8NReset to default-value setupDialog$5@570?CAB8B5 LMMS Restart LMMS setupDialog&0B0;>3 STK rawwaveSTK rawwave directory setupDialog0AB@>9:0 LMMS Setup LMMS setupDialog|>:07K20BL C:070B5;L 2>A?@>872545=8O 2 ?@>F5AA>@5 0C48> D09;>2*Show playback cursor in AudioFileProcessor setupDialog|>:07K20BL ?@54C?@5645=85 > ?5@570?CA:5 ?@8 87<5=5=88 =0AB@>5:,Show restart warning after changing settings setupDialogR;02=0O ?@>:@CB:0 2 <C7K:0;L=>< @540:B>@5Smooth scroll in Song Editor setupDialogj!8=E@>=878@>20BL VST ?;038=K A E>AB>< 2>A?@>872545=8O!Sync VST plugins to host playback setupDialogJ87C0;L=K5 MDD5:BK/?@>872>48B5;L=>ABLUI effects vs. performance setupDialog&0B0;>3 <>4C;59 VSTVST-plugin directory setupDialog0=:Bank sf2Instrument%>@ (?@8?52)Chorus sf2Instrument;C18=0 E>@0 Chorus Depth sf2Instrument#@>25=L E>@0 Chorus Level sf2Instrument8=88 E>@0 Chorus Lines sf2Instrument!:>@>ABL E>@0 Chorus Speed sf2Instrument#A8;5=85Gain sf2Instrument0BGPatch sf2Instrument-E>Reverb sf2Instrument0BCE0=85 ME0Reverb Damping sf2Instrument#@>25=L ME0 Reverb Level sf2Instrument1JQ< ME0Reverb Roomsize sf2Instrument>;3>B0 ME0 Reverb Width sf2InstrumentR!>740BL MDD5:B E>@0 (5A;8 ?>445@68205BAO)Apply chorus (if supported)sf2InstrumentViewB!>740BL ME> (5A;8 ?>445@68205BAO)Apply reverb (if supported)sf2InstrumentViewK1@0BL ?0BGChoose the patchsf2InstrumentView;C18=0 E>@0: Chorus Depth:sf2InstrumentView#@>25=L E>@0: Chorus Level:sf2InstrumentView8=88 E>@0: Chorus Lines:sf2InstrumentView!:>@>ABL E>@0: Chorus Speed:sf2InstrumentViewV06<8B5 745AL GB>1K >B:@KBL 4@C3>9 D09; SF2#Click here to open another SF2 filesf2InstrumentView#A8;5=85Gainsf2InstrumentView.B:@KBL D09; SoundFrontOpen SoundFont filesf2InstrumentView<B:@KBL 4@C3>9 D09; SoundFrontOpen other SoundFont filesf2InstrumentView;CH5=85 ME0:Reverb Damping:sf2InstrumentView#@>25=L ME0: Reverb Level:sf2InstrumentView" 07<5@ ?><5I5=8O:Reverb Roomsize:sf2InstrumentView>;3>B0 ME0: Reverb Width:sf2InstrumentView0$09;K SoundFont2 (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentView-B0 :=>?:0 2:;NG05B MDD5:B E>@0. -B> <>65B ?@83>48BLAO, => @01>B05B =5 4;O 2A5E D09;>2.uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentView-B0 :=>?:0 2:;NG05B MDD5:B ME0. -B> <>65B ?@83>48BLAO, => @01>B05B =5 4;O 2A5E D09;>2.pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentView$>@<0 2>;=K Wave FormsfxrInstrument>45;L G8?0 Chip model sidInstrument!@57Cutoff sidInstrument"8? D8;LB@0 Filter type sidInstrument#A8;5=85 Resonance sidInstrument>;>A 3 >B:; Voice 3 off sidInstrument@><:>ABLVolume sidInstrument;8B5;L=>ABL 2ABC?;5=8O >?@545;O5B, =0A:>;L:> 1KAB@> 3@><:>ABL %1-3> 3>;>A0 2>7@0AB05B >B =C;O 4> =081>;LH53> 7=0G5=8O.\Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.sidInstrumentViewABC?;5=85:Attack:sidInstrumentView!@54.'$Band-Pass filter sidInstrumentView@C1>ABL:Coarse:sidInstrumentView'0AB>B0 A@570:Cutoff frequency:sidInstrumentView;8B5;L=>ABL A?040 >?@545;O5B, =0A:>;L:> 1KAB@> 3@><:>ABL ?0405B >B <0:A8<C<0 4> >AB0B>G=>3> C@>2=O.iDecay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.sidInstrumentView !?04:Decay:sidInstrumentView$8;LB@>20BLFilteredsidInstrumentView KA.'$High-Pass filter sidInstrumentView 87.'$Low-Pass filter sidInstrumentView MOS6581 SID sidInstrumentView MOS8580 SID sidInstrumentView(C<NoisesidInstrumentView@><:>ABL %1-3> 3>;>A0 1C45B >AB020BLAO =0 C@>2=5 0<?;8BC4K 2K45@6:8, ?>:0 4;8BAO =>B0.]Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.sidInstrumentView$C;LA8@CNI0O 2>;=0 Pulse WavesidInstrumentView,;8B5;L=>ABL 8<?C;LA0: Pulse Width:sidInstrumentView#1K20=85:Release:sidInstrumentView#A8;5=85: Resonance:sidInstrumentView@C3>2>9 @568<Ring-ModsidInstrumentView@C3>2>9 @568< 70<5=O5B B@5C3>;L=K5 2>;=K =0 2KE>45 >AF8;;OB>@0 %1 "@C3>2>9 <>4C;OF859" :><18=0F859 >AF8;;OB>@>2 %1 8 %2.}Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.sidInstrumentView 83703SawToothsidInstrumentViewK45@6:0:Sustain:sidInstrumentView !8=E@>SyncsidInstrumentView !8=E@> A8=E@>=878@C5B DC=40<5=B0;L=CN G0AB>BC >AF8;;OB>@>2 %1 DC=40<5=B0;L=>9 G0AB>B>9 >AF8;;OB>@0 %2, A>74020O MDD5:B "5;57=>9 A8=E@>=870F88".Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.sidInstrumentView"5ABTestsidInstrumentViewA;8 D;06>: CAB0=>2;5=, B> %1-9 >AF8;;OB>@ 2K40QB =C;52>9 A83=0; (?>:0 D;06>: =5 A=8<5BAO).PTest, when set, resets and locks Oscillator %1 at zero until Test is turned off.sidInstrumentView@C10O =0AB@>9:0 ?>72>;O5B ?>4AB@>8BL >;>A %1 =0 >4=C >:B02C 225@E 8;8 2=87.DThe Coarse detuning allows to detune Voice %1 one octave up or down.sidInstrumentViewX;8B5;L=>ABL 8<?C;LA0 ?>72>;O5B <O3:> @53C;8@>20BL ?@>E>645=85 8<?C;LA0 157 70<5B=KE A1>52. <?C;LA=0O 2>;=0 4>;6=0 1KBL 2K1@0=0 =0 >AF8;;OB>@5 %1, GB>1K ?>;CG8BL 72CG0=85.The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.sidInstrumentView@><:>ABL %1-3> 3>;>A0 1C45B ?040BL >B >AB0B>G=>3> C@>2=O 4> =C;O A C:070==>9 745AL A:>@>ABLN.jThe output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.sidInstrumentView"@5C3>;L=8: Triangle WavesidInstrumentView>;>A 3 >B:; Voice3 Off sidInstrumentView@><:>ABL:Volume:sidInstrumentViewA;8 MB>B D;06>: CAB0=>2;5=, B> %1-9 3>;>A 1C45B ?@>E>48BL G5@57 D8;LB@. =0G5 3>;>A !%1 1C45B ?>4020BLAO ?@O<> =0 2KE>4.When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.sidInstrumentViewA5 B8?K D09;>2All file typessong@>5:B ?CAB Empty projectsong"FL Studio ?@>5:BKFL Studio projectssong Hydrogen ?@>5:BKHydrogen projectssong<?>@B D09;0 Import filesong.MiDi ?>A;54>20B5;L=>AB8MIDI sequencessong"1I0O B>=0;L=>ABL Master pitchsong1I0O 3@><:>ABL Master volumesong&@>5:B  !% .Project NOT saved.song@>5:B A>E@0=Q= Project savedsongjK15@8B5 ?0?:C 4;O 70?8A8 M:A?>@B8@>20==KE 4>@>65:.../Select directory for writing exported tracks...songFK1>@ D09;0 4;O M:A?>@B0 ?@>5:B0...!Select file for project-export...song"5<?Temposong&@>5:B %1 A>E@0=Q=.The project %1 is now saved.song,@>5:B %1 =5 A>E@0=Q=!The project %1 was not saved!song@>5:B =8G53> =5 A>45@68B, B0: GB> 8 M:A?>@B8@>20BL =5G53>. !=0G0;0 4>102LB5 E>BO 1K >4=C 4>@>6:C A ?><>ILN <C7K:0;L=>3> @540:B>@0!`This project is empty so exporting makes no sense. Please put some items into Song Editor first!song5=0720==>5untitledsong( WIDEstereoEnhancerControlDialog(8@8=0:Width:stereoEnhancerControlDialog (8@8=0WidthstereoEnhancerControls&B ;52>3> =0 ;52K9:Left to Left Vol:stereoMatrixControlDialog(B ;52>3> =0 ?@02K9:Left to Right Vol:stereoMatrixControlDialog(B ?@02>3> =0 ;52K9:Right to Left Vol:stereoMatrixControlDialog*B ?@02>3> =0 ?@02K9:Right to Right Vol:stereoMatrixControlDialog$B ;52>3> =0 ;52K9 Left to LeftstereoMatrixControls&B ;52>3> =0 ?@02K9 Left to RightstereoMatrixControls&B ?@02>3> =0 ;52K9 Right to LeftstereoMatrixControls(B ?@02>3> =0 ?@02K9Right to RightstereoMatrixControlsF>A;5 >AB0=>2:8 ?5@5E>48BL : =0G0;CAfter stopping go back to begintimeLine>A;5 >AB0=>2:8 ?5@5E>48BL : <5ABC, A :>B>@>3> =0G0;>AL 2>A?@>872545=85?After stopping go back to position at which playing was startedtimeLine:AB020BLAO =0 <5AB5 >AB0=>2:8After stopping keep positiontimeLine,:;/2K:; 02B>?@>:@CB:CEnable/disable auto-scrollingtimeLine4:;/2K:; B>G:8 :>;LF520=8OEnable/disable loop-pointstimeLine>4A:07:0HinttimeLine06<8B5 <Shift> GB>1K A428=CBL =0G0;> B>G5: F8:;0; 06<8B5 <Ctrl>, GB>1K C1@0BL ?@8;8?0=85 B>G5: F8:;0XHold to move the begin loop point; Press to disable magnetic loop points.timeLinef06<8B5 <Ctrl>, GB>1K C1@0BL ?@8;8?0=85 B>G5: F8:;0-Press to disable magnetic loop points.timeLine"8E>Mutedtrack!>;>Solotrack"8E>MutedtrackContentObject2%1:%2 (>B %3:%4 4> %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectView>?8@>20BLCopytrackContentObjectView;8B5;L=>ABLCurrent lengthtrackContentObjectView>78F8OCurrent positiontrackContentObjectViewK@570BLCuttrackContentObjectView:#40;8BL (A@54=OO :=>?:0 <KH8)Delete (middle mousebutton)trackContentObjectView>4A:07:0HinttrackContentObjectView\03;CH8BL/2:;NG8BL (Crl + A@54=OO :=>?:0 <KH8)#Mute/unmute ( + middle click)trackContentObjectViewAB028BLPastetrackContentObjectViewb06<8B5 <Ctrl> 8 ?5@5B0I8B5, GB>1K A>740BL :>?8N.%Press and drag to make a copy.trackContentObjectView`;O A2>1>4=>3> 87<5=5=8O @07<5@0 =06<8B5 <Ctrl>.Press for free resizing.trackContentObjectView259AB28O 4;O MB>9 4>@>6:8Actions for this tracktrackOperationsWidget&;>=8@>20BL 4>@>6:CClone this tracktrackOperationsWidget03;CH8BLMutetrackOperationsWidget"B:;NG8BL 4>@>6:CMute this tracktrackOperationsWidget06<8B5 <!trl> 8 =068<09B5 <KHL 2> 2@5<O 42865=8O, GB>1K =0G0BL =>2CN ?5@51@>A:C.KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget#40;8BL 4>@>6:CRemove this tracktrackOperationsWidget!>;>SolotrackOperationsWidget85 A<>3 703@C78BL <>4C;L VSTFailed loading VST-pluginvestigeInstrument03@C7:0 <>4C;OLoading pluginvestigeInstrumentP>4>648B5, ?>:0 703@C78BAO <>4C;L VST...'Please wait while loading VST-plugin...vestigeInstrument$BG53>-B> <>4C;L VST %1 =5 <>3 1KBL 703@C65=. A;8 4@C3>5 ?@>3@0<<=>5 >15A?5G5=85 VST @01>B05B C 0A ?>4 Linux'><, A2O68B5AL A @07@01>BG8:>< LMMS!The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrument>4AB@>9:0 %1 Detune %1vibed5GQB:>ABL %1 Fuzziness %1 vibed<?C;LA %1 Impulse %1vibed;8=0 %1 Length %1vibed:B020 %1 Octave %1vibed 0; %1Pan %1vibed 04 %1Pick %1 positionvibed<>;>65=85 %1-3> 72C:>A=8<0B5;OPickup %1 positionvibed*QAB:>ABL %1-9 AB@C=KString %1 stiffnessvibed*@><:>ABL %1-9 AB@C=KString %1 volumevibed&H !?@02:0&Help vibedViewR06<8B5, GB>1K 2:;NG8BL/2K:;NG8BL A83=0;.&Click here to enable/disable waveform. vibedViewH06<8B5, GB>1K =>@<0;87>20BL A83=0;.!Click here to normalize waveform. vibedViewL)Q;:=8B5 GB>1K A3;048BL D>@<C A83=0;0.Click here to smooth waveform. vibedView>4AB@>8BL:Detune: vibedView:;NG8BLEnable waveform vibedView5GQB:>ABL: Fuzziness: vibedView  540:B>@ A83=0;0Impulse Editor vibedViewL0G0;L=0O A:>@>ABL/=0G0;L=>5 A>AB>O=85Impulse or initial state vibedView ;8=0:Length: vibedView>@<0;87>20BL Normalize vibedView :B020Octave vibedView0;:Pan: vibedView04:Pick position: vibedView2>;>65=85 72C:>A=8<0B5;O:Pickup position: vibedView 83703Saw wave vibedView!8=CA>840 Sine wave vibedView!3;048BLSmooth vibedView 204@0B=0O 2>;=0 Square wave vibedView !B@C=0String vibedViewQAB:>ABL:String stiffness: vibedView\5@5:;NG0B5;L Imp  CAB0=02;8205B @568< @01>BK AB@C=K: 5A;8 >= 2:;NGQ=, B> C:070==0O D>@<0 A83=0;0 8=B5@?@5B8@C5BAO :0: =0G0;L=K9 8<?C;LA, 8=0G5  :0: =0G0;L=0O D>@<0 AB@C=K.The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. vibedView 53C;OB>@ 'P' CAB0=02;8205B <5AB> AB@C=K, 345 >=0 1C45B ?@860B0 . '5< =865 7=0G5=85, B5< 1;865 MB> <5AB> 1C45B : :>1K;:5.The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. vibedView 53C;OB>@ 'PU' CAB0=02;8205B <5AB> AB@C=K, >B:C40 1C45B A=8<0BLAO 72C:. '5< =865 7=0G5=85, B5< 1;865 MB> <5AB> 1C45B : :>1K;:5.The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. vibedViewN 53C;OB>@ 'S' CAB0=02;8205B 6QAB:>ABL B5:CI59 AB@C=K. -B>B ?0@0<5B@ >B25G05B 70 4;8B5;L=>ABL 72CG0=8O AB@C=K (G5< 1>;LH5 7=0G5=85 6QAB:>AB8, B5< 4>;LH5 725=8B AB@C=0).The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. vibedViewj 53C;OB>@ 'V' CAB0=02;8205B 3@><:>ABL B5:CI59 AB@C=K.4The 'V' knob sets the volume of the selected string. vibedView< CG:0 ?>4AB@>9:8 87<5=O5B A4283 G0AB>BK 4;O B5:CI59 AB@C=K. B@8F0B5;L=K5 7=0G5=8O 70AB02OB AB@C=C 72CG0BL ?;>A:> (15<>;L=>), ?>;>68B5;L=K5  >AB@> (4857=>). The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. vibedView& CG:0 4;8=K CAB0=02;8205B 4;8=C B5:CI59 AB@C=K. '5< 4;8==55 AB@C=0, B5< 1>;55 G8ABK9 8 4>;389 72C: >=0 40QB; >4=0:> MB> B@51C5B 1>;LH5 @5AC@A>2 &.The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. vibedViewn5@5:;NG0B5;L >:B02 ?>72>;O5B C:070BL 30@<>=8:C >A=>2=>9 G0AB>BK, =0 :>B>@>9 1C45B 72CG0BL AB@C=0. 0?@8<5@, -2  >7=0G05B, GB> AB@C=0 1C45B 72CG0BL 42C<O >:B020<8 =865 >A=>2=>9 G0AB>BK, F  70AB028B AB@C=C 725=5BL =0 >A=>2=>9 G0AB>B5 8=AB@C<5=B0, 0 6   =0 G0AB>B5, =0 H5ABL >:B02 1>;55 2KA>:>9, G5< >A=>2=0O.#The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. vibedViewp-B0 @CG:0 CAB0=02;8205B AB5@5>10;0=A 4;O B5:CI59 AB@C=K.PThe Pan knob determines the location of the selected string in the stereo field. vibedView8-B0 @CG:0 4>102;O5B @07<KB>AB8 72C:C, GB> =081>;55 70<5B=> 2> 2@5<O =0@0AB0=8O, 2?@>G5<, MB> <>65B 8A?>;L7>20BLAO, GB>1K A45;0BL 72C: 1>;55 <5B0;;8G5A:8< .The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. vibedView5@5:;NG0B5;L AB@C= ?>72>;O5B 2K1@0BL AB@C=C, GL8 A2>9AB20 @540:B8@CNBAO. =AB@C<5=B Vibed A>45@68B 4> 452OB8 =57028A8<> 72CG0I8E AB@C=, 8=48:0B>@ 2 ;52>< =86=5< C3;C ?>:07K205B, 0:B82=0 ;8 B5:CI0O AB@C=0 (B. 5. 1C45B ;8 >=0 A;KH=0).The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. vibedView 540:B>@ D>@<K ?>72>;O5B O2=> C:070BL ?@>D8;L AB@C=K 2 =0G0;L=K9 <><5=B 2@5<5=8, ;81> 5Q =0G0;L=K9 8<?C;LA (2 708A8<>AB8 >B A>AB>O=8O ?5@5:;NG0B5;O Imp ). =>?:8 A?@020 >B @8AC=:0 ?>72>;ONB 704020BL =5:>B>@K5 AB0=40@B=K5 D>@<K, ?@8GQ< :=>?:0 '?' A;C68B 4;O 7040=8O D>@<K 87 ?@>872>;L=>3> 72C:>2>3> D09;0 (703@C60NBAO ?5@2K5 128 M;5<5=B>2 2K1>@:8). "0:65 D>@<0 A83=0;0 <>65B 1KBL ?@>AB> =0@8A>20=0 A ?><>ILN <KH8. =>?:0 'S' A3;048B B5:CICN D>@<C. =>?:0 'N' =>@<0;87C5B C@>25=L.The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. vibedView"@5C3>;L=8: Triangle wave vibedViewH5=5@8@>20BL 783703>>1@07=K9 A83=0;.&Use a saw-wave for current oscillator. vibedViewf5=5@8@>20BL 30@<>=8G5A:89 (A8=CA>840;L=K9) A83=0;.'Use a sine-wave for current oscillator. vibedView<5=5@8@>20BL :204@0B (<50=4@).)Use a square-wave for current oscillator. vibedView@5=5@8@>20BL B@5C3>;L=K9 A83=0;.+Use a triangle-wave for current oscillator. vibedView*040BL D>@<C A83=0;0.3Use a user-defined waveform for current oscillator. vibedView.5=5@8@>20BL 15;K9 HC<.'Use white-noise for current oscillator. vibedView >;L7>20B5;LA:0OUser defined wave vibedView=AB@C<5=B Vibed  <>45;8@C5B 4> 452OB8 =57028A8<KE >4=>2@5<5==> 72CG0I8E AB@C=. 5@5:;NG0B5;L Strings  ?>72>;O5B 2K1@0BL AB@C=C, GL8 A2>9AB20 @540:B8@CNBAO. 5@5:;NG0B5;L Imp  CAB0=02;8205B @568< @01>BK AB@C=K: 5A;8 >= 2:;NGQ=, B> C:070==0O D>@<0 A83=0;0 8=B5@?@5B8@C5BAO :0: =0G0;L=K9 8<?C;LA, 8=0G5  :0: =0G0;L=0O D>@<0 AB@C=K. 5@5:;NG0B5;L Octave  ?>72>;O5B C:070BL 30@<>=8:C >A=>2=>9 G0AB>BK, =0 :>B>@>9 1C45B 72CG0BL AB@C=0.  540:B>@ D>@<K ?>72>;O5B O2=> C:070BL ?@>D8;L AB@C=K 2 =0G0;L=K9 <><5=B 2@5<5=8, ;81> 5Q =0G0;L=K9 8<?C;LA.  CG:0 'V' CAB0=02;8205B 3@><:>ABL B5:CI59 AB@C=K, 'S'  6QAB:>ABL, 'P'  <5AB>, 345 ?@860B0 AB@C=0, 0 'PU''  ?>;>65=85 72C:>A=8<0B5;O  CG:0 ?>4AB@>9:8 8 AB5@5>10;0=A0, 5ABL =045640, =5 =C640NBAO 2 >1JOA=5=8OE.  CG:0 ;8=0  @53C;8@C5B 4;8=C AB@C=K =48:0B>@-?5@5:;NG0B5;L A;520 2=87C >?@545;O5B, 2:;NG5=0 ;8 B5:CI0O AB@C=0.hVibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. vibedView@><:>ABL:Volume: vibedView5;K9 HC<White noise wave vibedView(060BL 4;O 2:;NG5=8OClick to enablevisualizationWidget|06<8B5, GB>1K 2:;NG8BL/2K:;NG8BL 287C0;870F8N 3;02=>3> 2K2>406click to enable/disable visualization of master-outputvisualizationWidget.ABC?;5=85 %1-3> 3>;>A0Voice %1 attack voiceObject>>4AB@>9:0 %1-3> 3>;>A0 (3@C1>)Voice %1 coarse detuning voiceObject"!?04 %1-3> 3>;>A0Voice %1 decay voiceObject0$8;LB@>20==K9 %1-9 3>;>AVoice %1 filtered voiceObject,>;>A %1 4;8=0 A83=0;0Voice %1 pulse width voiceObject*#1K20=85 %1-3> 3>;>A0Voice %1 release voiceObject8>;>A %1 :>;LF52>9 <>4C;OB>@Voice %1 ring modulate voiceObject2K45@6:0 4;O %1-3> 3>;>A0Voice %1 sustain voiceObject4!8=E@>=870F8O %1-3> 3>;>A0 Voice %1 sync voiceObject>;>A %1 B5AB Voice %1 test voiceObject<$>@<0 A83=0;0 4;O %1-3> 3>;>A0Voice %1 wave shape voiceObject ) , lmms-1.1.3/data/locale/ru.ts000066400000000000000000012526411247673406200156600ustar00rootroot00000000000000 AboutDialog About LMMS Об LMMS О программе LMMS Version %1 (%2/%3, Qt %4, %5) Версия %1 (%2/%3, Qt %4, %5) About Подробнее LMMS - easy music production for everyone LMMS - лёгкое создание музыки для всех Authors Авторы Translation Перевод Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! На этом языке не переведено (или установлен Английский). Если Вы заинтересованы в переводе LMMS на другой язык или хотите улучшить существующий перевод, мы приветствуем любую помощь! Просто свяжитесь с разработчиками! License Лицензия Copyright (c) 2004-2014, LMMS developers Правообладатели (c) 2004-2014, LMMS-разработчики <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.sf.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sf.net</span></a></p></body></html> LMMS ЛММС AmplifierControlDialog VOL ГРОМ Volume: Громкость: PAN БАЛ Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Громкость Panning Left gain Right gain AudioAlsa::setupWidget DEVICE УСТРОЙСТВО CHANNELS КАНАЛЫ AudioFileProcessorView Open other sample Открыть другую запись Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Нажмите здесь, чтобы открыть другой звуковой файл. В новом окне диалога вы сможете выбрать нужный файл. Такие настройки, как режим повтора, точки начала/конца, усиление и прочие не сбросятся, поэтому звучание может отличаться от оригинала. Reverse sample Отзеркалить запись If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Прежний перевод : Перевернуть образец. Можно получать забавные эффекты - например, перевёрнутый взрыв. Если включить эту кнопку, вся запись пойдёт в обратную сторону, это удобно для крутых эффектов, типа обратного грохота. Amplify: Усиление: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Эта ручка задаёт коэффициент усиления. При значении 100% исходный звук не меняется, в противном случае ― он будет ослаблен или усилен. (Обратите внимание, что исходная запись при этом останется нетронутой.) Startpoint: Начало: Endpoint: Конец: Continue sample playback across notes Продолжить воспроизведение записи по нотам Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Включение этой опции продолжит воспроизведение записи по разным нотам - если изменить ускорение или длительность ноты остановится до конца записи, то со следующей ноты запись продолжится там, где остановилась, чтобы сбросить воспроизвдение на начало записи, вставьте ноту внизу у клавиш (<20 Гц) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: Длина записи: AudioJack JACK client restarted JACK-клиент перезапущен LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS не был подключен к JACK по какой-то причине, поэтому LMMS подключение к JACK было перезапущено. Вам придётся заново вручную создать соединения. JACK server down JACK-сервер не доступен The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Возможно JACK-сервер был выключен и запуск нового процесса не удался, поэтому ЛММС не может продолжить работу. Вам следует сохранить проект и перезапустить JACK и LMMS. AudioJack::setupWidget CLIENT-NAME ИМЯ КЛИЕНТА CHANNELS КАНАЛЫ AudioOss::setupWidget DEVICE УСТРОЙСТВО CHANNELS КАНАЛЫ AudioPortAudio::setupWidget BACKEND драйвер? УПРАВЛЕНИЕ DEVICE УСТРОЙСТВО AudioPulseAudio::setupWidget DEVICE УСТРОЙСТВО CHANNELS КАНАЛЫ AudioSdl::setupWidget DEVICE УСТРОЙСТВО AutomatableModel &Reset (%1%2) &R Сбросить (%1%2) &Copy value (%1%2) &C Копировать значение (%1%2) &Paste value (%1%2) &P Вставить значение (%1%2) Edit song-global automation Изменить глоабльную автоматизацию композиции Connected to %1 Подсоединено к %1 Connected to controller Подсоединено к контроллеру Edit connection... Настроить соединение... Remove connection Удалить соединение Connect to controller... Соединить с контроллером... Remove song-global automation Убрать глобальную автоматизацию композиции Remove all linked controls Убрать всё присоединенное управление AutomationEditor Play/pause current pattern (Space) Игра/Пауза текущего шаблона (Пробел) Stop playing of current pattern (Space) Остановить проигрывание текущего шаблона (Пробел) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. Шаблон автоматически закольцуется при достижении конца. Click here if you want to stop playing of the current pattern. Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона. Draw mode (Shift+D) Режим рисования (Shift+D) Erase mode (Shift+E) Режим стирания (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. При нажатии на эту кнопку активируется режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это основной режим и используется большую часть времени. Для включения этого режима можно использовать комбинацию клавиш Shift+D. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. При нажатии на эту кнопку активируется режим стирания. В этом режиме вы можете стирать ноты по одной. Для включения этого режима можно использовать комбинацию клавиш Shift+E. Cut selected values (Ctrl+X) Вырезать выбранные ноты (Ctrl+X) Copy selected values (Ctrl+C) Копировать выбранные ноты в буфер (Ctrl+C) Paste values from clipboard (Ctrl+V) Вставить значения из буфера (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". Click here and the values from the clipboard will be pasted at the first visible measure. При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. Automation Editor - no pattern Редактор автоматизаци — нет шаблона Automation Editor - %1 Редактор автоматизации — %1 Please open an automation pattern with the context menu of a control! Откройте редатор автоматизации через контекстное меню регулятора! Values copied Значения скопированы All selected values were copied to the clipboard. Все выбранные значения скопированы в буфер обмена. Discrete progression Дискретная прогрессия Linear progression Линейная прогрессия Cubic Hermite progression Кубическая Эрмитова прогрессия Tension: Напряжение: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Выбор дискретной прогрессии для этого шаблона автоматизации. Кол-во подсоединенных объектов будет оставаться постоянным между управляющими точками и будет установлено на новое значение сразу по достижении каждой управляющей точки. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Выбор линейной прогрессии для этого шаблона автоматизации. Кол-во подсоединенных объектов будет меняться с постоянной скоростью во времени между управляющими точками для достижения точного значения в каждой управляющей точки без внезапных изменений. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Кубическая Эрмитова прогрессия для этого шаблона автоматизации. Кол-во подсоединенных объектов изменится по сглаженной кривой и смягчится на пиках и спадах. Tension value for spline Величина напряжения для сплайна A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. Высокое напряжение может смягчить кривую, но перегрузить некоторые значение. Низкое напряжение может подкосить кривую до низкого уровня в каждой управляющей точке. AutomationPattern Drag a control while pressing <Ctrl> Тяните контроль удерживая <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Дважды щёлкните мышью чтобы настроить автоматизацию для этого шаблона Open in Automation editor Открыть в редакторе автоматизации Clear Очистить Reset name Сбросить название Change name Переименовать %1 Connections Соединения %1 Disconnect "%1" Отсоединить «%1» Set/clear record Установить/очистить запись AutomationTrack Automation track Дорожка автоматизации BassBoosterControlDialog FREQ Frequency: Частота: GAIN УСИЛ Gain: Усиление: RATIO ОТН Ratio: Отношение: BassBoosterControls Frequency Частота Gain Усиление Ratio Отношение CarlaInstrumentView Show GUI Показать интерфейс Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 Контроллер %1 ControllerConnectionDialog Connection Settings Параметры соединения MIDI CONTROLLER MIDI-КОНТРОЛЛЕР Input channel Канал ввода CHANNEL КАНАЛ Input controller Контроллер ввода CONTROLLER КОНТРОЛЛЕР Auto Detect Автоопределение MIDI-devices to receive MIDI-events from Устройства MiDi для приёма событий USER CONTROLLER ПОЛЬЗ. КОНТРОЛЛЕР MAPPING FUNCTION ПЕРЕОПРЕДЕЛЕНИЕ OK ОГА Cancel Отменить LMMS ЛММС Cycle Detected. Обнаружен цикл. ControllerRackView Controller Rack Рэка контроллеров Add Добавить Confirm Delete Подтвердить удаление Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. Подтверждаете удаление? Есть возможные соединения с этим контроллером, потом нельзя будет их возвратить. ControllerView Controls Управление Controllers are able to automate the value of a knob, slider, and other controls. Контроллеры могут автоматизировать изменения значений регуляторов, ползунков и прочего управления. Rename controller Переименовать контроллер Enter the new name for this controller Введите новое название для контроллера &Remove this plugin &R Убрать этот фильтр &Help &H Справка DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass Низ.ЧФ HiPass Выс.ЧФ BandPass csg Сред.ЧФ csg BandPass czpg Сред.ЧФ czpg Notch Полосно-заграждающий Allpass Все проходят Moog Муг 2x LowPass 2х Низ.ЧФ RC LowPass 12dB RC Низ.ЧФ 12дБ RC BandPass 12dB RC Сред.ЧФ 12 дБ RC HighPass 12dB RC Выс.ЧФ 12дБ RC LowPass 24dB RC Низ.ЧФ 24дБ RC BandPass 24dB RC Сред.ЧФ 24дБ RC HighPass 24dB RC Выс.ЧФ 24дБ Vocal Formant Filter Фильтр Вокальной форманты Effect Effect enabled Эффект включён Wet/Dry mix Насыщенность Gate Проход Шлюз Decay Затихание EffectChain Effects enabled Эффекты включёны EffectRackView EFFECTS CHAIN ЦЕПЬ ЭФФЕКТОВ Add effect Добавить эффект EffectSelectDialog Add effect Добавить эффект Plugin description Описание модуля EffectView Toggles the effect on or off. Вкл/выкл эффект. On/Off Вкл/Выкл W/D плотность, насыщенность НАСЫЩ Wet Level: Уровень насыщенности: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. Регулятор насыщенности определяет долю обработанного сигнала, которая будет на выходе. DECAY ЗАТИХ Time: Время: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. Decay (затихание) управляет количеством буферов тишины, которые должны пройти до конца работы плагина. Меньшие величины снижают перегрузку процессора, но вознкает риск появления потрескивания или подрезания в хвосте на передержке (delay) или эхо (reverb) эффектах. GATE заполнение ШЛЮЗ Gate: Уровень тишины: Шлюз: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. GATE (Шлюз) определяет уровень сигнала, который будет считаться "тишиной" при определении остановки обрабатывания сигналов. Controls Управление Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Сигнал проходит последовательно через все установленные фильтры (сверху вниз). Переключатель Вкл/Выкл позволяет в любой момент включать/выключать фильтр. Регулятор (wet / dry) насыщенности определяет баланс между входящим сигналом и сигналом после эффекта, который становится выходным сигналом эффекта. Входной сигнал каждого фильтра является выходом предыдущего, так что доля чистого сигнала при прохождении по цепочке постоянно падает. Регулятор (decay) затихания определяет время, которое будет действовать фильтр после того как ноты были отпущены. Эффект перестанет обрабатывать сигналы, когда грмокость упадёт ниже порога для заданной длины времени. Эта ручка (Knob) устанавливает "заданную длину времени" Чем меньше значение, тем меньше требования к ЦП, поэтому лучше ставить это число низким для большинства эффектов. однако это может вызвать обрезку звука при использовании эффектов с длительными периодами тишины, типа задержки. Регулятор шлюза служит для указания порога сигнала для авто-отключения эффекта, отсчёт для "заданной длины времени" начнётся как только обрабатываемый сигнал упадёт ниже указанного этим регулятором уровня. Кнопка „Управление“ открывает окно изменения параметров эффекта. Контекстное меню, вызываемое щелчком правой кнопкой мыши, позволяет менять порядок следования фильтров или удалять их вместе с другими. Move &up &u Переместить выше Move &down &d Переместить ниже &Remove this plugin &R Убрать фильтр &Help &H Справка EnvelopeAndLfoParameters Predelay Задержка Attack Вступление Hold Удерживание Decay Затихание Sustain Выдержка Release Убывание Modulation Модуляция LFO Predelay Задержка LFO LFO Attack Вступление LFO LFO speed Скорость LFO LFO Modulation Модуляция LFO LFO Wave Shape Форма сигнала LFO Freq x 100 ЧАСТ x 100 Modulate Env-Amount Модулировать огибающую EnvelopeAndLfoView DEL DEL Predelay: Задержка: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Эта ручка определяет задержку огибающей. Чем больше эта величина, тем дольше время до старта текущей огибающей. ATT ATT Attack: Вступление: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Эта ручка устанавливает время возрастания для текущей огибающей. Чем больше значение, тем дольше характеристика (н-р, громкость) возрастает до максимума. Для инструменов вроде пианино характерны малые времена нарастания, а для струнных - большие. HOLD HOLD Hold: Удержание: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Эта ручка устанавливает длительность огибающей. Чем больше значение, тем дольше огибающая держится на наивысшем уровне. DEC DEC Decay: Затихание: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Эта ручка устанавливает время спада для текущей огибающей. Чем больше значение, тем дольше огибающая должна сокращаться от вступления до уровня выдержки. Для инструментов вроде пианино следует выбирать небольшие значения. SUST SUST Sustain: Выдержка: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Эта ручка устанавливает уровень выдержки. Чем больше эта величина, тем выше уровень на котором остаётся огибающая, прежде чем опуститься до нуля. REL REL Release: Убывание: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Эта ручка устанавливает время убывания для текущей огибающей. Чем больше значение, тем дольше характеристика (н-р, громкость) уменьшается от уровня выдержки до нуля. Для струнных инструментов следует выбирать большие значения. AMT AMT Modulation amount: Глубина модуляции: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Эта ручка устанавливает глубину модуляции для текущей огибающей. Чем больше значение, тем в большей степени выбранная характеристика (н-р, громкость или частота среза) будет зависеть от этой огибающей. LFO predelay: Пред. задержка LFO: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Эта ручка определяет задержку перед запуском LFO (LFO - НизкоЧастотный осциллятор (генератор)). Чем больше величина, тем больше времени до того как LFO начнёт работать. LFO- attack: Вступление LFO: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Используйте эту ручку для установления времени вступления этого LFO. Чем больше значение, тем дольше LFO нуждается в увеличении своей амплитуды до максимума. SPD SPD LFO speed: Скорость LFO: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Эта ручка устанавлявает скорость текущего LFO. Чем больше значение, тем быстрее LFO осциллирует и быстрее производится эффект. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Эта ручка устанавливает глубину модуляции для текущего LFO. Чем больше значение, тем в большей степени выбранная характеристика (н-р, громкость или частота среза) будет зависеть от этого LFO. Click here for a sine-wave. Генерировать гармонический (синусоидальный) сигнал. Click here for a triangle-wave. Сгенерировать треугольный сигнал. Click here for a saw-wave for current. Сгенерировать зигзагообразный сигнал. Click here for a square-wave. Сгенерировать квдратный сигнал (меандр) . Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. Задать свою форму сигнала. Впоследствии, перетащить соответствующий файл с записью в граф LFO. FREQ x 100 ЧАСТОТА x 100 Click here if the frequency of this LFO should be multiplied by 100. Нажмите, чтобы умножить частоту этого LFO на 100. multiply LFO-frequency by 100 Умножить частоту LFO на 100 MODULATE ENV-AMOUNT МОДУЛИР ОГИБАЮЩУЮ Click here to make the envelope-amount controlled by this LFO. Нажмите сюда, чтобы глубина модуляции огибающей задавалась этим LFO. control envelope-amount by this LFO Разрешить этому LFO задавать значение огибающей ms/LFO: мс/LFO: Hint Подсказка Drag a sample from somewhere and drop it in this window. Перетащите в это окно какую-нибудь запись. Click here for random wave. ExportProjectDialog Export project Экспорт проекта Output Вывод File format: Формат файла: Samplerate: Частота дискретизации: 44100 Hz 44.1 КГц 48000 Hz 48 КГц 88200 Hz 88.2 КГц 96000 Hz 96 КГц 192000 Hz 192 КГц Bitrate: Частота бит: 64 KBit/s 64 КБит/с 128 KBit/s 128 КБит/с 160 KBit/s 160 КБит/с 192 KBit/s 192 КБит/с 256 KBit/s 256 КБит/с 320 KBit/s 320 КБит/с Depth: Емкость: 16 Bit Integer 16 Бит целое 32 Bit Float 32 Бит плавающая Please note that not all of the parameters above apply for all file formats. Заметьте, что не все параметры ниже будут применены для всех форматов файлов. Quality settings Настройки качества Interpolation: Интерполяция: Zero Order Hold Нулевая задержка Sinc Fastest Синхр. Быстрая Sinc Medium (recommended) Синхр. Средняя (рекомендовано) Sinc Best (very slow!) Синхр. лучшая (очень медленно!) Oversampling (use with care!): Передискретизация (использовать осторожно!): 1x (None) 1х (Нет) 2x 4x 8x Start Начать Cancel Отменить Export as loop (remove end silence) Экспортировать как петлю (убрать тишину в конце) FileBrowser Browser Обозреватель файлов FileBrowserTreeWidget Send to active instrument-track Соединить с активным инструментом-дорожкой Open in new instrument-track/Song-Editor Отркрыть в новой дорожке инструмента/редакторе песни Open in new instrument-track/B+B Editor Открыть в новой инструментальной дорожке/Бит+Басс редакторе Loading sample Загрузка записи Please wait, loading sample for preview... Пж. ждите, запись загружается для просмотра... --- Factory files --- --- Заводские файлы --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &H Справка FxMixer Master Главный FX %1 Эффект %1 FxMixerView Rename FX channel Переименовать канал Эффекта Enter the new name for this FX channel Введите новое название для этого канала Эффекта FX-Mixer Микшер Эффектов FxMixerView::FxChannelView FX Fader %1 Ползунок Эффекта %1 Mute Заглушить Mute this FX channel Тишина на этом канале Эффекта FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Арпеджио Arpeggio type Тип арпеджио Arpeggio range Диапазон арпеджио Arpeggio time Период арпеджио Arpeggio gate Шлюз арпеджио Arpeggio direction Направление арпеджио Arpeggio mode Режим арпеджио Up Вверх Down Вниз Up and down Вверх и вниз Random Случайно Free Свободно Sort Упорядочить Sync Синхронизировать Down and up InstrumentFunctionArpeggioView ARPEGGIO ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. Арпеджио — разновидность исполнения аккордов на фортепиано и струнных инструментах, которая оживляет звучание. Струнф таких инструментов играются перебором по аккордам, как на арфе, когда звуки аккорда следуют один за другим. Типичные арпеджио - мажорные и минорные триады, среди которых можно выбрать и другие. RANGE RANGE Arpeggio range: Диапазон арпеджио: octave(s) Октав[а/ы] Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Используйте эту ручку, чтобы установить диапазон арпеджио (в октавах). Выбранный тип арпеджио будет охватывать указанное количество октав. TIME TIME Arpeggio time: Период арпеджио: ms мс Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Регулировка периода арпеджио - время (в миллисекундах), которое должен звучать каждый тон арпеджио. GATE GATE Arpeggio gate: Шлюз арпеджио: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Регулировка шлюза арпеджио, показывает процентную долю каждого тона арпеджио, которая будет воспроизведена. Простой способ создавать стаккато-арпеджио. Chord: Аккорд: Direction: Направление: Mode: Режим: InstrumentFunctionNoteStacking octave Октава Major Мажорный Majb5 minor минорный minb5 sus2 sus4 aug augsus4 tri 6 8х {6?} 6sus4 6add9 m6 m6add9 7 8х {7?} 7sus4 7#5 8х {7#5?} 7b5 7#9 8х {7#9?} 7b9 7#5#9 8х {7#5#9?} 7#5b9 7b5b9 7add11 7add13 7#11 8х {7#11?} Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 8х {9?} 9sus4 add9 9#5 8х {9#5?} 9b5 9#11 8х {9#11?} 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 8х {11?} 11b9 Maj11 m11 m-Maj11 13 8х {13?} 13#9 8х {13#9?} 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Melodic minor Whole tone Diminished Major pentatonic Minor pentatonic Jap in sen Major bebop Dominant bebop Blues Arabic Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Аккорды Chord type Тип аккорда Chord range Диапазон аккорда Minor Chromatic Half-Whole Diminished 5 8х {5?} InstrumentFunctionNoteStackingView RANGE ДИАП Chord range: Диапазон аккорда: octave(s) Октав[а/ы] Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. Эта ручка изменяет диапазон аккорда, который будет содержать указанное число октав. STACKING СТЫКОВКА Chord: Аккорд: Аккорд: InstrumentMidiIOView ENABLE MIDI INPUT ВКЛ MIDI ВВОД CHANNEL CHANNEL VELOCITY VELOCITY ENABLE MIDI OUTPUT ВКЛ MIDI ВЫВОД PROGRAM PROGRAM MIDI devices to receive MIDI events from MiDi устройства-источники событий MIDI devices to send MIDI events to MiDi устройства для отправки событий на них NOTE NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME VOLUME Volume Громкость CUTOFF CUTOFF Cutoff frequency Срез частоты RESO RESO Resonance Резонанс Envelopes/LFOs Огибание/LFO Filter type Тип фильтра Q/Resonance или качество? Кол./Резонанса LowPass Низ.ЧФ HiPass Выс.ЧФ BandPass csg Сред.ЧФ csg BandPass czpg Сред.ЧФ czpg Notch Полосно-заграждающий Allpass Все проходят Moog Муг 2x LowPass 2х Низ.ЧФ RC LowPass 12dB RC Низ.ЧФ 12дБ RC BandPass 12dB RC Сред.ЧФ 12 дБ RC HighPass 12dB RC Выс.ЧФ 12дБ RC LowPass 24dB RC Низ.ЧФ 24дБ RC BandPass 24dB RC Сред.ЧФ 24дБ RC HighPass 24dB RC Выс.ЧФ 24дБ Vocal Formant Filter Фильтр Вокальной форманты InstrumentSoundShapingView TARGET ЦЕЛЬ These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Эта вкладка позволяет вам настроить огибающие. Они очень важны для настройки звучания. Например, с помощью огибающей громкости вы можете задать зависимость громкости звучания от времени. Если вам понадобится эмулировать мягкие струнные, просто задайте больше времени нарастания и исчезновения звука. С помощью обгибающих и низкочастотного осцилятора (LFO) вы в несколько щелчков мыши сможете создать просто невероятные звуки! FILTER ФИЛЬТР Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Здесь вы можете выбрать фильтр для дорожки этого инструмента. Фильтры могут довольно сильно менять звучание. Hz Гц Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... Эта ручка устанавливает частоту среза для выбранного фильтра. К примеру, ФНЧ будет срезать сигнал на частотах выше частоты среза, полосно-пропускающий фильтр будет хорошо пропускать сигнал только на заданной частоте и так далее... RESO RESO Resonance: Резонанс: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. Эта ручка задаёт количество резонанса для фильтра, этим определяется насколько нужно усилить ближайшие к отрезанным частоты. FREQ ЧАСТ cutoff frequency: Срез частот: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track безымянная_дорожка Volume Громкость Panning Стерео Pitch Тональность FX channel Канал ЭФ Default preset Основная предустановка With this knob you can set the volume of the opened channel. Регулировка громкости текущего канала. Base note Опорная нота Pitch range Диапазон тональности InstrumentTrackView Volume Громкость Volume: Громкость: VOL ГРОМ Panning Баланс Panning: Баланс: PAN БАЛ MIDI MIDI Input Вход Output Выход InstrumentTrackWindow GENERAL SETTINGS ОСНОВНЫЕ НАСТРОЙКИ Instrument volume Громкость инструмента Volume: Громкость: VOL ГРОМ Panning Баланс Panning: Стереобаланс: PAN БАЛ Pitch Тональность Pitch: Тональность: cents процентов PITCH ТОН FX channel Канал ЭФ ENV/LFO ОГИБ/LFO FUNC ФУНКЦ FX ЭФ MIDI MIDI Save preset Сохранить предустановку XML preset file (*.xpf) XML файл настроек (*.xpf) PLUGIN ПЛАГИН Pitch range (semitones) Диапазон тональности (полутона) RANGE ДИАПАЗОН Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels Связать каналы LadspaControlDialog Link Channels Связать каналы Channel Канал LadspaControlView Link channels Связать каналы Value: Значение: Sorry, no help available. Извините, справки нет. LadspaEffect Effect Эффект Unknown LADSPA plugin %1 requested. Запрошен неизвестный модуль LADSPA «%1». LcdSpinBox Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: LfoController LFO Controller Низко-частотный осциллятор (генератор) Контроллер LFO Base value Основное значение Oscillator speed Скорость волны Oscillator amount Размер волны Oscillator phase Фаза волны Oscillator waveform Форма волны Frequency Multiplier Множитель частоты LfoControllerDialog LFO LFO LFO Controller Контроллер LFO BASE БАЗА Base amount: Кол-во базы: todo доделать SPD СКОР LFO-speed: Скорость LFO: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. Эта ручка устанавлявает скорость LFO. Чем больше значение, тем больше частота осциллятора. AMT КОЛ Modulation amount: Глубина* Количество модуляции: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. Эта ручка устанавливает глубину модуляции для LFO. Чем больше значение, тем в большей степени выбранная характеристика (н-р, громкость или частота среза) будет зависеть от ГНЧ(LFO). PHS ФАЗА Phase offset: Сдвиг фазы: degrees градусы With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Эта ручка устанавливает начальную фазу НизкоЧастотного Осциллятора (LFO), т. е. точку, с которой осциллятор начинает вырабатывать сигнал. Например, если вы задали синусоидальную форму сигнала и начальную фазу 180º, волна сначала пойдёт вниз, а не вверх, так же как и для квадратной волны. Click here for a sine-wave. Генерировать гармонический (синусоидальный) сигнал. Синусоида. Click here for a triangle-wave. Треугольник. Click here for a saw-wave. Зигзаг. Click here for a square-wave. Сгенерировать меандр. Квадрат. Click here for a a moog saw-wave. Генерировать пилообразный сигнал как moog. Муг зигзаг. Click here for an exponential wave. Генерировать экспоненциальный сигнал. Экспонента. Click here for white-noise. Белый шум. Click here for a user-defined shape. Double click to pick a file. Нажмите здесь для определения своей формы. Двойное нажатие для выбора файла. MainWindow Working directory Рабочий каталог LMMS The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Рабочий каталог LMMS (%1) не существует. Создать его? Позже вы сможете сменить его через Правку -> Параметры. Could not save config-file Не могу сохранить настройки Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. Не могу записать настройки в файл %1. Возможно, вы не обладаете правами на запись в него. Пожалуйста, проверьте свои права и попробуйте снова. &Project &P Проект &New &N Новый &Open... &Открыть... Recently opened projects Недавние проекты &Save &S Сохранить Save &As... &A Сохранить как... Import... Импорт... E&xport... &X Экспорт... &Quit &Q Выйти &Edit &E Правка Settings Параметры &Tools &T Сервис &Help &H Справка Online help Справка в сети Help Справка What's this? Что это? About О программе Create new project Создать новый проект Create new project from template Создать новый проект по шаблону Open existing project Открыть существующий проект Recently opened project Недавние проекты Save current project Сохранить текущий проект Export current project Экспорт проекта Show/hide Song-Editor Показать/скрыть музыкальный редактор By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Сим запускается или скрывается музыкальный редактор. С его помощью вы можете редактировать композицию и задавать время воспроизведения каждой дорожки. Также вы можете вставлять и передвигать записи прямо в списке воспроизведения. Show/hide Beat+Bassline Editor Показать/скрыть ритм-басс редактор By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Сим запускается ритм-басс редактор. Он необходим для установки ритма, открытия, добавления и удаления каналов, а также вырезания, копирования и вставки ритм-басс шаблонов и т. п. Show/hide Piano-Roll Показать/скрыть нотный редактор Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Запуск редатора нот. С его помощью вы можете легко редактировать мелодии. Show/hide Automation Editor Показать/скрыть редактор автоматизации Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Показать/скрыть окно редактора автоматизации. С его помощью вы можете легко редактироватьдинамику выбранных величин. Show/hide FX Mixer Показать/скрыть микшер ЭФ Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Скрыть/показать микшер ЭФфектов. Он является мощным инструментом для управления эффектами. Вы можете вставлять эффекты в различные каналы. Show/hide project notes Показать/скрыть заметки к проекту Click here to show or hide the project notes window. In this window you can put down your project notes. Эта кнопка показывает/прячет окно с заметками. В этом окне вы можете помещать любые комментарии к своей композиции. Show/hide controller rack Показать/скрыть управление контроллерами Untitled Неназванный LMMS %1 LMMS %1 Project not saved Проект не сохранён The current project was modified since last saving. Do you want to save it now? Проект был изменён. Сохранить его сейчас? Open project Открыть проект Save project Сохранить проект Help not available Справка недоступна Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. Пока что справка для LMMS не написана. Вероятно, Вы сможете найти нужные материалы на http://lmms.sf.net/wiki . My projects Мои проекты My samples Мои записи My presets Мои предустановки My home Домой My computer Мой компьютер Root directory Корневая папка Save as new &version &V Сохранить как новую версию E&xport tracks... &X экспортировать дорожки... LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) Version %1 Версия %1 Project recovery Восстановление проекта It looks like the last session did not end properly. Do you want to recover the project of this session? Кажется, последняя сессия была неправильно закрыта. Хотите восстановить проект этой сессии? Configuration file Файл настроек Error while parsing configuration file at line %1:%2: %3 Ошибка во время обработки файла настроек в строке %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator числитель Шкала чисел Meter Denominator знаменатель Шкала делений TIME SIG ПЕРИОД MeterModel Numerator Числитель Denominator Знаменатель MidiAlsaRaw::setupWidget DEVICE УСТРОЙСТВО MidiAlsaSeq::setupWidget DEVICE УСТРОЙСТВО MidiController MIDI Controller Контроллер MIDI unnamed_midi_controller нераспознанный миди контроллер MidiImport Setup incomplete установка не завершена You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. Вы не установили SoundFont по умолчанию в параметрах (Правка->Настройки), поэтому после импорта миди файла звук воспроизводиться не будет. Вам следует загрузить основной MiDi SoundFont, указать его в параметрах и попробовать снова. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. Вы не включили поддержку проигрывателя SoundFont2 при компиляции ЛММС, он используется для добавления основного звука в импортируемые Миди файлы, поэтому звука не будет после импорта этого миди файла. MidiOss::setupWidget DEVICE УСТРОЙСТВО MidiPort Input channel Вход Output channel Выход Input controller Контроллер входа Output controller Контроллер выхода Fixed input velocity Постоянная скорость ввода Fixed output velocity Постоянная скорость вывода Output MIDI program Программа для вывода MiDi Receive MIDI-events Принимать события MIDI Send MIDI-events Отправлять события MIDI Fixed output note Постоянный вывод нот Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Vibrato Вибрато OscillatorObject Osc %1 volume Громкость осциллятора %1 Osc %1 panning Стереобаланс для осциллятора %1 Osc %1 coarse detuning Подстройка осциллятора %1 грубая Osc %1 fine detuning left Подстройка левого канала осциллятора %1 тонкая Osc %1 fine detuning right Подстройка правого канала осциллятора %1 тонкая Osc %1 phase-offset Сдвиг фазы для осциллятора %1 Osc %1 stereo phase-detuning Подстройка стерео-фазы осциллятора %1 Osc %1 wave shape Гладкость сигнала осциллятора %1 Modulation type %1 Тип модуляции %1 Osc %1 waveform Форма сигнала осциллятора %1 Osc %1 harmonic PatmanView Open other patch Открыть другой патч Click here to open another patch-file. Loop and Tune settings are not reset. Нажмите чтобы открыть другой патч-файл. Цикличность и настройки при этом сохранятся. Loop Повтор Loop mode Режим повтора Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Здесь включается/выключается режим повтора, при включёнии PatMan будет использовать информацию о повторе из файла. Tune Подстроить Tune mode Тип подстройки Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Здесь включается/выключается режим подстройки. Если он включён, то PatMan изменит запись так, чтобы она совпадала по частоте с нотой. No file selected Не выбран файл Open patch file Открыть патч-файл Patch-Files (*.pat) Патч-файлы (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Чтобы открыть этот шаблон в нотном редакторе, дважды на нём щёлкните Используйте колёсико мыши для установки громкости отдельного шага Open in piano-roll Открыть в редакторе нот Clear all notes Очистить все ноты Reset name Сбросить название Change name Переименовать Add steps Добавить шаги Remove steps Удалить шаги PeakController Peak Controller Контроллер вершин Peak Controller Bug Контроллер вершин с багом Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. Из-за ошибки в старой версии LMMS контроллеры вершин не могут правильно подключаться. Пж. убедитесь, что контроллеры вершин правильно подсоединены и пересохраните этот файл, извините, за причинённые неудобства. PeakControllerDialog PEAK ПИК LFO Controller Контроллер LFO PeakControllerEffectControlDialog BASE БАЗА Base amount: Базовое значение: Modulation amount: Глубина модуляции: Attack: Вступление: Release: Убывание: AMNT ГЛУБ MULT МНОЖ Amount Multiplicator: Величина множителя: ATCK ВСТУП DCAY СПАД PeakControllerEffectControls Base value Опорное значение Modulation amount Глубина модуляции Mute output Заглушить вывод Attack Вступление Release Убывание Abs Value Абс значение Amount Multiplicator Величина множителя PianoRoll Cut selected notes (Ctrl+X) Переместить выделенные ноты в буфер (Ctrl+X) Copy selected notes (Ctrl+C) Копировать выделенные ноты в буфер (Ctrl+X) Paste notes from clipboard (Ctrl+V) Вставить ноты из буфера (Ctrl+V) Play/pause current pattern (Space) Воспроизведение текущего шаблона/пауза (Пробел) Stop playing of current pattern (Space) Остановить воспроизвдение шаблона (Пробел) Piano-Roll - no pattern Нотный редактор - без шаблона Piano-Roll - %1 Нотный редактор - %1 Please open a pattern by double-clicking on it! Откройте шаблон с помощью двойного щелчка мышью! Record notes from MIDI-device/channel-piano Записать ноты с цифрового музыкального инструмента (MIDI) Last note По посл. ноте Draw mode (Shift+D) Режим рисования (Shift+D) Erase mode (Shift+E) Режим стирания нот (Shift+E) Select mode (Shift+S) Режим выбора нот (Shift+S) Record notes from MIDI-device/channel-piano while playing song or BB track Записать ноты с цифрового музыкального инструмента (MIDI) во время воспроизведения композиции или дорожки Ритм-Басса Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. По окончании шаблона воспроизведение начнётся сначала. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Позже вы сможете отредактировать записанный шаблон. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Во время записи все ноты записываются в этот шаблон, и вы будете слышать композицию или РБ дорожку на заднем плане. Click here to stop playback of current pattern. Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". Click here and the notes from the clipboard will be pasted at the first visible measure. При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. Note lock Фиксация нот Note Volume Громкость нот Note Panning Стереофония нот Detune mode (Shift+T) Режим подстраивания (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это режим по умолчанию и используется большую часть времени. Для включения этого режима можно использовать комбинацию клавиш Shift+D, удерживайте Ctrl для временного переключения в режим выбора. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Режим стирания. В этом режиме вы можете стирать ноты. Для включения этого режима можно использовать комбинацию клавиш Shift+E. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Режим выделения. В этом режиме можно выделять ноты, можно также удерживать Ctrl в режиме рисования, чтобы можно было на время войти в режим выделения. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Режим подстройки. В этом режиме можно выбирать ноты для автоматизации их подстраивания. Можно использовать это для переходов нот от одной к другой. Для активации с клавиатуры <Shift+T>. Mark/unmark current semitone Отметить/Снять отметку с текущего полутона Mark current scale Отметить текущий подъём Mark current chord Отметить текущий аккорд Unmark all Снять выделение No scale Без подъёма No chord Убрать аккорды This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: PianoView Base note Опорная нота Plugin Plugin not found Модуль не найден The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Модуль «%1» отсутствует либо не может быть загружен! Причина: «%2» Error while loading plugin Ошибка загрузки модуля Failed to load plugin "%1"! Не получилось загрузить модуль «%1»! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Файл WAV (*.wav) Compressed OGG-File (*.ogg) Сжатый файл OGG (*.ogg) QObject C Note name До-диез C Db Note name Ре-бемоль Db C# Note name До-мажор C# D Note name Ре-диез D Eb Note name Ми-бемоль Eb D# Note name Ре-мажор D# E Note name Ми-диез E Fb Note name Фа-бемоль Fb Gb Note name Соль-бемоль Gb F# Note name Фа-мажор F# G Note name Соль-диез G Ab Note name Ля-бемоль Ab G# Note name Соль-мажор G# A Note name Ля диез A Bb Note name Си-бемоль Bb A# Note name Ля-мажор A# B Note name Си-диез B QWidget Name: Название: File: Файл: Maker: Создатель: Copyright: Правообладатель: Requires Real Time: Требуется обработка в реальном времени: Yes Да No Нет Real Time Capable: Работа в реальном времени: In Place Broken: Вместо сломанного: Channels In: Каналы в: Channels Out: Каналы из: File: %1 SampleBuffer Open audio file Открыть звуковой файл Wave-Files (*.wav) Файлы Wave (*.wav) OGG-Files (*.ogg) Файлы OGG (*.ogg) DrumSynth-Files (*.ds) Файлы DrumSynth (*.ds) FLAC-Files (*.flac) Файлы FLAC (*.flac) SPEEX-Files (*.spx) Файлы SPEEX (*.spx) VOC-Files (*.voc) Файлы VOC (*.voc) AIFF-Files (*.aif *.aiff) Файлы AIFF (*.aif *.aiff) AU-Files (*.au) Файлы AU (*.au) RAW-Files (*.raw) Файлы RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample Для выбора файла-образца сделайте двойной щелчок мышью Выберите запись двойным нажатием мыши Delete (middle mousebutton) Удалить (средняя кнопка мыши) Cut Вырезать Copy Копировать Paste Вставить Mute/unmute (<Ctrl> + middle click) Заглушить/включить (<Ctrl> + средняя кнопка мыши) Set/clear record Установить/очистить запись SampleTrack Sample track Дорожка записи Volume Громкость SampleTrackView Track volume Громкость дорожки Channel volume: Громкость канала: VOL ГРОМ SongEditor Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции. Could not open file Не могу открыть файл Could not write file Не могу записать файл Song-Editor Музыкальный редактор Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания. Play song (Space) Начать воспроизведение (Пробел) Stop song (Space) Остановить воспроизведение (Пробел) Add beat/bassline Добавить ритм/басс Add sample-track Добавить дорожку записи Draw mode Режим рисования Edit mode (select and move) Правка (выделение/перемещение) Record samples from Audio-device Записать сэмпл со звукового устройства Record samples from Audio-device while playing song or BB track Записать сэмпл с аудио-устройства во время воспроизведения в музыкальном или ритм/басс редакторе Add automation-track Добавить дорожку автоматизации Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Невозможно открыть файл %1, вероятно, нет разрешений на его чтение. Пж. убедитесь, что есть по крайней мере права на чтение этого файла и попробуйте ещё раз. Error in file Ошибка в файле The file %1 seems to contain errors and therefore can't be loaded. Файл %1 возможно содержит ошибки из-за которых не может загрузиться. Tempo Темп TEMPO/BPM ТЕМП/BPM tempo of song Темп музыки The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). Это значение задаёт темп музыки в ударах в минуту (англ. аббр. BPM). На каждый такт приходится четыре удара, так что темп в ударах в минуту фактически указывает, сколько четвертей такта проигрывается за минуту (или, что то же, количество тактов, проигрываемых за четыре минуты). High quality mode Высокое качество Master volume Основная громкость master volume основная громкость Master pitch Основная тональность master pitch основная тональность Value: %1% Значение: %1% Value: %1 semitones Значение: %1 полутон(а/ов) Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. Невозможно открыть %1 для записи, возможно, нет разрешений на запись в этот файл, пж. удостоверьтесь, что есть доступ к этому файлу и попробуйте снова. SpectrumAnalyzerControlDialog Linear spectrum Линейный спектр Linear Y axis Линейная ось ординат SpectrumAnalyzerControls Linear spectrum Линейный спектр Linear Y axis Линейная ось ординат Channel mode Режим канала TempoSyncKnob Tempo Sync Синхронизация темпа No Sync Синхронизации нет Eight beats Восемь ударов (две ноты) Whole note Целая нота Half note Полунота Quarter note Четверть ноты 8th note Восьмая ноты 16th note 1/16 ноты 32nd note 1/32 ноты Custom... Своя... &Help &H Справка Custom Своя Synced to Eight Beats Синхро по 8 ударам Synced to Whole Note Синхро по целой ноте Synced to Half Note Синхро по половине ноты Synced to Quarter Note Синхро по четверти ноты Synced to 8th Note Синхро по 1/8 ноты Synced to 16th Note Синхро по 1/16 ноты Synced to 32nd Note Синхро по 1/32 ноты TimeDisplayWidget click to change time units нажми для изменения единиц времени TrackContainer Couldn't import file Не могу импортировать файл Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Не могу найти фильтр для импорта файла %1. Для подключения этого файла преобразуйте его в формат, поддерживаемый LMMS. Couldn't open file Не могу открыть файл Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Не могу открыть файл %1 для записи. Проверьте, обладаете ли вы правами на запись в выбранный файл и содержащий его каталог и попробуйте снова! Loading project... Чтение проекта... Cancel Отменить Please wait... Подождите, пожалуйста... Importing MIDI-file... Импортирую файл MIDI... Importing FLP-file... Импортирую файл FLP... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Модулировать фазу осциллятора 2 сигналом с 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Модулировать амплитуду осциллятора 2 сигналом с первого Mix output of oscillator 1 & 2 Смешать выводы 1 и 2 осцилляторов Synchronize oscillator 1 with oscillator 2 Синхронизировать первый осциллятор по второму Use frequency modulation for modulating oscillator 2 with oscillator 1 Модулировать частоту осциллятора 2 сигналом с 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Модулировать фазу осциллятора 3 сигналом с 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Модулировать амплитуду осциллятора 3 сигналом с 2 Mix output of oscillator 2 & 3 Совместить вывод осцилляторов 2 и 3 Synchronize oscillator 2 with oscillator 3 Синхронизировать осциллятор 2 и 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Модулировать частоту осциллятора 3 сигналом со 2 Osc %1 volume: Громкость осциллятора %1: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Эта ручка устанавливает громкость осциллятора %1. Если 0, то осциллятор выключается, иначе будет слышно настолько громко , как тут установлено. Osc %1 panning: Баланс для осциллятора %1: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Регулятор стереобаланса осциллятора %1. Величина -100 обозначает, что 100% сигнала идёт в левый канал, а 100 - в правый. Osc %1 coarse detuning: Грубая подстройка осциллятора %1: semitones полутон[а,ов] With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Грубая регулировка подстройки осциллятора %1. Возможна подстройка до 12 полутонов (до одной октавы) вверх и вниз. Полезно для создания аккордов. Osc %1 fine detuning left: Точная подстройка левого канала осциллятора %1: cents Проценты With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Эта ручка устанавливает точную подстройку для левого канала осциллятора %1. Подстройка задаётся в диапазоне от -100 сотых до +100 сотых. Это полезно для создания "сочных" звуков. Osc %1 fine detuning right: Точная подстройка правого канала осциллятора %1: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Эта ручка устанавливает точную подстройку для правого канала осциллятора %1. Подстройка задаётся в диапазоне от -100 сотых до +100 сотых. Это полезно для создания "сочных" звуков. Osc %1 phase-offset: Сдвиг фазы осциллятора %1: degrees градусы With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Эта ручка устанавливает начальную фазу осциллятора %1, т. е. точку, с которой осциллятор начинает вырабатывать сигнал. Например, если вы задали синусоидальную форму сигнала и начальную фазу 180º, волна сначала пойдёт вниз, а не вверх. То же для меандра (сигнала прямоугольной формы). Osc %1 stereo phase-detuning: Подстройка стерео фазы осциллятора %1: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Эта ручка устанавливает фазовую подстройку осциллятора %1 между каналами, то есть разность фаз между левым и правым каналами. Это удобно для создания расширения стереоэффектов. Use a sine-wave for current oscillator. Использовать гармонический (синусоидальный) сигнал для этого осциллятора. Use a triangle-wave for current oscillator. Использовать треугольный сигнал для этого осциллятора. Use a saw-wave for current oscillator. Использовать зигзагообразный сигнал для этого осциллятора. Use a square-wave for current oscillator. Использовать квадратный сигнал (меандр) для этого осциллятора. Use a moog-like saw-wave for current oscillator. Использовать муг-зигзаг для этого осциллятора. Use an exponential wave for current oscillator. Использовать экспоненциальный сигнал для этого осциллятора. Use white-noise for current oscillator. Использовать белый шум для этого осциллятора. Use a user-defined waveform for current oscillator. Задать форму сигнала. Ui Contributors ordered by number of commits: Разработчики сортированные по числу коммитов: Involved Участники VersionedSaveDialog Increment version number Увеличивающийся номер версии Decrement version number Понижающийся номер версии VestigeInstrumentView Open other VST-plugin Открыть другой VST плагин Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Открыть другой модуль VST. После нажатия на кнопку появится стандартный диалог выбора файла, где вы сможете выбрать нужный модуль. Show/hide GUI Показать/скрыть интерфейс Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Скрывает/показывает графический пользовательский интерфейс (GUI) выбранного модуля VST. Turn off all notes Выключить все ноты Open VST-plugin Открыть модуль VST DLL-files (*.dll) Бибилиотеки DLL (*.dll) EXE-files (*.exe) Программы EXE (*.exe) No VST-plugin loaded Модуль VST не загружен Control VST-plugin from LMMS host Управление VST плагином через LMMS Click here, if you want to control VST-plugin from host. Нажмите здесь для контроля VST плагина через хост. Open VST-plugin preset Открыть предустановку VST модуля Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Открыть другую .fxp . fxb предустановку VST. Previous (-) Предыдущий <-> Click here, if you want to switch to another VST-plugin preset program. Нажмите здесь для переключения на другую предустановку программы VST плагина. Save preset Сохранить предустановку Click here, if you want to save current VST-plugin preset program. Сохранить текущую предустановку программы VST плагина. Next (+) Следующий <+> Click here to select presets that are currently loaded in VST. Выбор из уже загруженных в VST предустановок. Preset Предустановка by от - VST plugin control - управление VST плагином VstEffectControlDialog Show/hide Показать/Скрыть Control VST-plugin from LMMS host Управление VST плагином через LMMS хост Click here, if you want to control VST-plugin from host. Нажмите здесь, для контроля VST плагином через хост. Open VST-plugin preset Открыть предустановку VST плагина Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Открыть другую .fxp . fxb предустановку VST. Previous (-) Предыдущий <-> Click here, if you want to switch to another VST-plugin preset program. Переключение на другую предустановку программы VST плагина. Next (+) Следующий <+> Click here to select presets that are currently loaded in VST. Выбор из уже загруженных в VST предустановок. Save preset Сохранить настройку Click here, if you want to save current VST-plugin preset program. Сохранить текущую предустановку программы VST плагина. Effect by: Эффекты по: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Загрузка модуля Open Preset Открыть предустановку Vst Plugin Preset (*.fxp *.fxb) Предустановка VST плагина (*.fxp, *.fxb) : default : основные " " ' ' Save Preset Сохранить предустановку .fxp .fxp .FXP .FXP .FXB .FXB .fxb .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Здесь вы можете рисовать собственный сигнал. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Нормализовать Click to normalize Invert Click to invert Smooth Сгладить Click to smooth Sine wave Синусоида Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave Click for square wave ZynAddSubFxInstrument Portamento Портаменто Filter Frequency Фильтр Частот Filter Resonance Фильтр резонанса Bandwidth Ширина полосы FM Gain Усил FM Resonance Center Frequency Частоты центра резонанса Resonance Bandwidth Ширина полосы резонанса Forward MIDI Control Change Events Переслать изменение событий MiDi управления ZynAddSubFxView Show GUI Показать интерфейс Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Скрыть или показать графический интерфейс ZynAddSubFX. Portamento: Портаменто: PORT PORT Filter Frequency: Фильтр частот: FREQ FREQ Filter Resonance: Фильтр резонанса: RES RES Bandwidth: Полоса пропускания: BW BW FM Gain: Усиление частоты модуляции (FM): FM GAIN FM GAIN Resonance center frequency: Частоты центра резонанса: RES CF RES CF Resonance bandwidth: Ширина полосы резонанса: RES BW RES BW Forward MIDI Control Changes Переслать изменение событий MiDi управления audioFileProcessor Amplify Усиление Start of sample Начало записи End of sample Конец записи Reverse sample Перевернуть запись Stutter Запинание Loopback point Loop mode Режим повтора Interpolation mode None Linear Sinc bbEditor Play/pause current beat/bassline (Space) Игра/пауза текущей линии ритма/басса (<Space>) Add beat/bassline Добавить ритм/лейтмотив Beat+Bassline Editor Ритм Басс Редактор Stop playback of current beat/bassline (Space) Остановить воспроизведение текущей линии ритм-басса (ПРОБЕЛ) Add automation-track Добавить дорожку автоматизации Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Нажмите чтобы проиграть текущую линию ритм-басса. Она будет закольцована по достижении окончания. Click here to stop playing of current beat/bassline. Остановить воспроизведение (Пробел). Remove steps Удалить такты Add steps Добавить такты bbTCOView Open in Beat+Bassline-Editor Открыть в пошаговом секвенсоре Открыть в редакторе ритма и басса Reset name Сбросить название Change name Переименовать Change color Изменить цвет Reset color to default bbTrack Beat/Bassline %1 Ритм-Басс Линия %1 Clone of %1 Копия %1 bitInvader Samplelength Длительность bitInvaderView Sample Length Длительность записи Draw your own waveform here by dragging your mouse on this graph. Здесь вы можете рисовать собственный сигнал. Sine wave Синусоида Click for a sine-wave. Сгенерировать гармонический (синусоидальный) сигнал. Triangle wave Треугольник Click here for a triangle-wave. Сгенерировать треугольный сигнал. Saw wave Зигзаг Click here for a saw-wave. Сгенерировать загзагообразный сигнал. Square wave Квадрат (Меандр) Click here for a square-wave. Сгенерировать квадратную волну (меандр). White noise wave Белый шум Click here for white-noise. Сгенерировать белый шум. User defined wave Пользовательская Click here for a user-defined shape. Задать форму сигнала вручную. Smooth Сгладить Click here to smooth waveform. Щёлкните чтобы сгладить форму сигнала. Interpolation Интерполяция Normalize Нормализовать dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file Не могу открыть файл Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Не могу открыть файл %1 для записи. Проверьте, обладаете ли вы правами на запись в выбранный файл и содержащий его каталог и попробуйте снова! Error Ошибка Error while determining file-encoder device. Please try to choose a different output format. Ошибка при определении кодировщика файла. Попробуйте выбрать другой целевой формат. Ошибка при определении кодека файла. Попробуйте выбрать другой формат вывода. Rendering: %1% Обработка: %1% Export project to %1 Экспорт композиции в файл %1 Экспорт проекта в %1 fader Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: graphModel Graph Граф kickerInstrument Start frequency Начальная частота End frequency Конечная частота Gain Усиление Length Distortion Start Distortion End Envelope Slope Noise Шум Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: Начальная частота: End frequency: Конечная частота: Gain: Усиление: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &H Справка Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: Please enter a new value between -96.0 dBV and 6.0 dBV: Введите новое значение между –96,0 дБ и 6,0 дБ (по напряжению): Введите новое значение от –96,0 дБВ до 6,0 дБВ: ladspaBrowserView Available Effects Доступные эффекты Unavailable Effects Недоступные эффекты Instruments Инструменты Analysis Tools Анализаторы Don't know Неизвестные This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. В этом окне показана информация обо всех модулях LADSPA, которые обнаружила LMMS. Они разделены на пять категорий, в зависимости от названий и типов портов. Доступные эффекты — это те, которые могут быть использоаны в LMMS. Чтобы эффект LADSPA мог быть использован, он должен, во-первых, быть собственно эффектом, т. е. иметь как входные так и выходные каналы. LMMS в качестве входного канала воспринимает аудиопорт, содержащий в названии „in“, а выходные узнаёт по подстроке „out“. Для использования в LMMS число входных каналов должно совпадать с числом выходных, и эффект должен иметь возможность использования в реальном времени. Недоступные эффекты — это модули LADSPA, опознанные в качестве эффектов, однако либо с несовпадающими количестами входных/выходных каналов, либо не предназначенные для использования в реальном времени. Инструменты — это модули, у которых есть только выходные каналы. Анализаторы — это модули, обладающие лишь входными каналами. Неизвестные — модули, у которых не было обнаружено ни входных, ни выходных каналов. Двойной щелчок лувой кнопкой мыши по модулю даст информацию о его портах. Type: Тип: ladspaDescription Plugins Модули Description Описание ladspaPortDialog Name Название Rate Частота выборки Direction Направление Type Тип Min < Default < Max Меньше < Стандарт < Больше Logarithmic Логарифмический SR Dependent Зависимость от SR Audio Аудио Control Управление Input Ввод Output Вывод Toggled Включено Integer Целое Float Дробное Yes Да Ports Порты lb302Synth VCF Cutoff Frequency Частота среза VCF VCF Resonance Усиление VCF VCF Envelope Mod Модуляция огибающей VCF VCF Envelope Decay Спад огибающей VCF Slide Сдвиг Accent Акцент Dead Глухо Slide Decay Сдвиг затухания Distortion Искажение Waveform Форма сигнала 24dB/oct Filter 24дБ/окт фильтр lb302SynthView Cutoff Freq: Частота среза: Resonance: отклик Отзвук: Env Mod: Мод Огиб: Decay: Длительность спада: Спад: 303-es-que, 24dB/octave, 3 pole filter 303-ий, 24дБ/октаву, 3-польный фильтр Slide Decay: Сдвиг спада: DIST: ИСК: Искажение ИСК: Saw wave Зазубренный Зигзаг Click here for a saw-wave. Сгенерировать зигзаг. Triangle wave Треугольная волна Click here for a triangle-wave. Сгенерировать треугольный сигнал. Square wave Меандр Квадрат Click here for a square-wave. Сгенерировать квадрат. Rounded square wave Волна скругленного квадрата Click here for a square-wave with a rounded end. Создать квадратную волну закруглённую в конце. Moog wave Муг волна Click here for a moog-like wave. Сгенерировать волну похожую на муг. Sine wave Синусоида Click for a sine-wave. Сгенерировать гармонический (синусоидальный) сигнал. White noise wave Белый шум Click here for an exponential wave. Генерировать экспоненциальный сигнал. Click here for white-noise. Сгенерировать белый шум. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency Частота среза VCF VCF Resonance Резонанс VCF VCF Envelope Mod Мод Огибающей VCF VCF Envelope Decay Спад огибающей VCF Distortion Искажение Waveform Форма сигнала Slide Decay Сдвиг спада Slide Сдвиг Accent Акцент Dead Глухо 24dB/oct Filter 24дБ/окт фильтр lb303SynthView Cutoff Freq: Частота среза: CUT СРЕЗ Resonance: Резонанс: RES РЕЗ Env Mod: Мод Огибающей: ENV MOD МОД ОГИБ Decay: Спад: DEC СПАД 303-es-que, 24dB/octave, 3 pole filter 303-ий, 24дБ/октаву, 3-польный фильтр Slide Decay: Сдвиг спада: SLIDE Сдвиг DIST: ИСК: DIST ИСК WAVE: Волна: WAVE Волна malletsInstrument Hardness Жёсткость Position Положение Vibrato Gain Усиление вибрато Vibrato Freq Частота вибрато Stick Mix Сведение ручек Modulator Модулятор Crossfade Переход LFO Speed Скорость LFO LFO Depth Глубина LFO ADSR ADSR Pressure Давление Motion Движение Speed Скорость Bowed Наклон Spread Разброс Missing files Отсутствующие файлы Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! Похоже, что установлены не все пакеты Stk. Вам следует это проверить! Marimba Маримба Vibraphone Вибрафон Agogo Дискотека Wood1 Дерево1 Reso Резо Wood2 Дерево2 Beats Удары Two Fixed Два фиксированных Clump Тяжёлая поступь Tubular Bells Трубные колокола Uniform Bar Равномерные полосы Tuned Bar Подстроенные полосы Glass Стекло Tibetan Bowl Тибетские шары malletsInstrumentView Instrument Инструмент Spread Разброс Spread: Разброс: Hardness Жёсткость Hardness: Жёсткость: Position Положение Position: Положение: Vib Gain Усил. вибрато Vib Gain: Усил. вибрато: Vib Freq Част. виб Vib Freq: Вибрато: Stick Mix Сведение ручек Stick Mix: Сведение ручек: Modulator Модулятор Modulator: Модулятор: Crossfade Переход Crossfade: Переход: LFO Speed Скорость LFO LFO Speed: Скорость LFO: LFO Depth Глубина LFO LFO Depth: Глубина LFO: ADSR ADSR ADSR: ADSR: Bowed Наклон Pressure Давление Pressure: Давление: Motion Движение Motion: Движение: Speed Скорость Speed: Скорость: Vibrato Вибрато Vibrato: Вибрато: manageVSTEffectView - VST parameter control Управление VST параметрами VST Sync VST синхронизация Click here if you want to synchronize all parameters with VST plugin. Нажмите здесь для синхронизации всех параметров с VST плагином. Automated Автоматизировано Click here if you want to display automated parameters only. Нажмите здесь, если хотите видеть только автоматизированные параметры. Close Закрыть Close VST effect knob-controller window. Закрыть окно управления регуляторами VST эффектов. manageVestigeInstrumentView - VST plugin control Управление VST плагином VST Sync VST синхронизация Click here if you want to synchronize all parameters with VST plugin. Нажмите здесь для синхронизации всех параметров VST плагина. Automated Автоматизировано Click here if you want to display automated parameters only. Нажмите здесь, если хотите видеть только автоматизированные параметры. Close Закрыть Close VST plugin knob-controller window. Закрыть окно управления регуляторами VST плагина. nineButtonSelector &Help &H Справка opl2instrument Patch Патч Op 1 Attack ОП 1 Вступление Op 1 Decay ОП 1 Спад Op 1 Sustain ОП 1 Выдержка Op 1 Release ОП 1 Убывание Op 1 Level ОП 1 Уровень Op 1 Level Scaling ОП 1 Уровень увеличения Op 1 Frequency Multiple ОП 1 Множитель частот Op 1 Feedback ОП 1 Возврат Op 1 Key Scaling Rate ОП 1 Ключевая ставка увеличения Op 1 Percussive Envelope ОП 1 Ударная огибающая Op 1 Tremolo ОП 1 Тремоло Op 1 Vibrato Оп 1 Вибрато Op 1 Waveform ОП 1 Волна Op 2 Attack ОП 2 Вступление Op 2 Decay ОП 2 Спад Op 2 Sustain ОП 2 Выдержка Op 2 Release ОП 2 Убывание Op 2 Level ОП 2 Уровень Op 2 Level Scaling ОП 2 Уровень увеличения Op 2 Frequency Multiple ОП 2 Множитель частот Op 2 Key Scaling Rate ОП 2 Ключевая ставка множителя Op 2 Percussive Envelope ОП 2 Ударная огибающая Op 2 Tremolo ОП 2 Тремоло Op 2 Vibrato Оп 2 Вибрато Op 2 Waveform ОП 2 Волна FM FM Vibrato Depth Глубина вибрато Tremolo Depth Глубина тремоло organicInstrument Distortion Искажение Volume Громкость organicInstrumentView Distortion: Искажение: Volume: Громкость: Randomise Случайно Osc %1 waveform: Форма сигнала для осциллятора %1: Osc %1 volume: Громкость осциллятора %1: Osc %1 panning: Баланс для осциллятора %1: cents сотые The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Время распространения Sweep direction Направление распространения Sweep RtShift amount Кол-во распространения сдвига вправо Wave Pattern Duty Рабочая форма волны Channel 1 volume Громкость первого канала Volume sweep direction Объём направления распространения Length of each step in sweep Длина каждого такта в распространении Channel 2 volume Громкость второго канала Channel 3 volume Громкость третьего канала Channel 4 volume Громкость четвёртого канала Right Output level Выходной уровень справа Left Output level Выходной уровень слева Channel 1 to SO2 (Left) От первого канала к SO2 (левый канал) Channel 2 to SO2 (Left) От второго канала к SO2 (левый канал) Channel 3 to SO2 (Left) От третьего канала к SO2 (левый канал) Channel 4 to SO2 (Left) От четвёртого канала к SO2 (левый канал) Channel 1 to SO1 (Right) От первого канала к SO1 (правый канал) Channel 2 to SO1 (Right) От второго канала к SO1 (правый канал) Channel 3 to SO1 (Right) От третьего канала к SO1 (правый канал) Channel 4 to SO1 (Right) От четвёртого канала к SO1 (правый канал) Treble Верхние Bass Нижние Shift Register width Сдвиг ширины регистра papuInstrumentView Sweep Time: Время развёртки: Sweep Time Время развёртки Sweep RtShift amount: Кол-во развёртки сдвиг вправо: Sweep RtShift amount Кол-во развёртки сдвиг вправо Wave pattern duty: Рабочая форма волны: Wave Pattern Duty Рабочая форма волны Square Channel 1 Volume: Громкость квадратного канала 1: Length of each step in sweep: Длина каждого шага в развёртке: Length of each step in sweep Длина каждого шага в развёртке Wave pattern duty Рабочая форма волны Square Channel 2 Volume: Громкость квадратного канала 2: Square Channel 2 Volume Громкость квадратного канала 2 Wave Channel Volume: Громкость волнового канала: Wave Channel Volume Громкость волнового канала Noise Channel Volume: Громкость канала шума: Noise Channel Volume Громкость канала шума SO1 Volume (Right): Громкость SO1 (Правый): SO1 Volume (Right) Громкость SO1 (Правый) SO2 Volume (Left): Громкость SO2 (Левый): SO2 Volume (Left) Громкость SO2 (Левый) Treble: Верхние: Treble Верхние Bass: Нижние: Bass Нижние Sweep Direction Направление развёртки Volume Sweep Direction Громкость направления развёртки Shift Register Width Сдвиг ширины регистра Channel1 to SO1 (Right) Канал1 в SO1 (Правый) Channel2 to SO1 (Right) Канал2 в SO1 (Правый) Channel3 to SO1 (Right) Канал3 в SO1 (Правый) Channel4 to SO1 (Right) Канал4 в SO1 (Правый) Channel1 to SO2 (Left) Канал1 в SO2 (Левый) Channel2 to SO2 (Left) Канал2 в SO2 (Левый) Channel3 to SO2 (Left) Канал2 в SO2 (Левый) Channel4 to SO2 (Left) Канал4 в SO2 (Левый) Wave Pattern Рисунок волны The amount of increase or decrease in frequency Кол-во увеличения или уменьшения в частоте The rate at which increase or decrease in frequency occurs Темп проявления увеличения или снижения в частоте The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Рабочий цикл это коэффициент длительности (времени) включенного сигнала относительно всего периода сигнала. Square Channel 1 Volume Громкость квадратного канала 1 The delay between step change Задержка между изменениями шага Draw the wave here Рисовать волну здесь pluginBrowser Instrument plugins Инструменты no description описание отсутствует VST-host for using VST(i)-plugins within LMMS VST - хост для поддержки модулей VST(i) в LMMS Additive Synthesizer for organ-like sounds Синтезатор звуков вроде органа Filter for importing MIDI-files into LMMS Фильтр для включения файла MIDI в проект ЛММС plugin for using arbitrary LADSPA-effects inside LMMS. Модуль, позволяющий использовать в LMMS любые эффекты LADSPA. Tuneful things to bang on Мелодичные ударные Vibrating string modeler Эмуляция вибрирующих струн Filter for importing FL Studio projects into LMMS Фильтр для импортирования файлов FL Stuio Incomplete monophonic imitation tb303 Незавершённая монофоническая имитация tb303 Instrument browser Обзор инструментов Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Вы можете переносить нужные вам инструменты из этой панели в музыкальный, ритм-басс редактор или в существующую дорожку инструмента. Plugin for enhancing stereo separation of a stereo input file Модуль, усиливающий разницу между каналами стереозаписи Emulation of GameBoy (TM) APU Эмуляция GameBoy (TM) Plugin for freely manipulating stereo output Модуль для произвольного управления стереовыходом Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Эмуляция MOS6581 и MOS8580. Использовалось на компьютере Commodore 64. List installed LADSPA plugins Показать установленные модули LADSPA Player for SoundFont files Проигрыватель файлов SoundFont Plugin for controlling knobs with sound peaks Модуль для установки значений регуляторов по пикам громкости GUS-compatible patch instrument Патч-инструмент, совместимый с GUS Customizable wavetable synthesizer Настраиваемый синтезатор звукозаписей (wavetable) Embedded ZynAddSubFX Встроенный ZynAddSubFX 2-operator FM Synth 2-режимный синт модуляции частот (FM synth) Filter for importing Hydrogen files into LMMS Фильтр для импорта Hydrogen файлов в LMMS LMMS port of sfxr LMMS порт SFXR Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Put down your project notes here. Здесь вы можете держать заметки к своему проекту. Project notes Заметки к проекту Edit Actions Правка &Undo &U Отменить Ctrl+Z Ctrl+Z &Redo &R Повторить Ctrl+Y Ctrl+Y &Copy &C Копировать Ctrl+C Ctrl+C Cu&t &t Вырезать Ctrl+X Ctrl+X &Paste &P Вставить Ctrl+V Ctrl+V Format Actions Форматирование &Bold Полу&жирный Ctrl+B Ctrl+B &Italic &Курсив Ctrl+I &Underline &Подчеркнуть Ctrl+U &Left По &левому краю Ctrl+L C&enter По &центру Ctrl+E &Right По &правому краю Ctrl+R &Justify По &ширине Ctrl+J &Color... &Цвет... renameDialog Rename... Переименовать... setupDialog Setup LMMS Настройка LMMS General settings Общие параметры BUFFER SIZE РАЗМЕР БУФЕРА Reset to default-value Восстановить значение по умолчанию MISC РАЗНОЕ Audio settings Параметры звука AUDIO INTERFACE ЗВУКОВАЯ СИСТЕМА MIDI settings Параметры MIDI MIDI INTERFACE ИНТЕРФЕЙС MIDI OK Cancel Отменить Restart LMMS Перезапустите LMMS Please note that most changes won't take effect until you restart LMMS! Учтите, что большинство настроек не вступят в силу до перезапуска программы! Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Здесь вы можете настроить размер внутреннего звукового буфера LMMS. Меньшие значения дают меньшее время отклика программы, но повышают потребление ресурсов - это особенно заметно на старых машинах и системах, ядро которых не поддерживает приоритета реального времени. Если наблюдается прерывистый звук, попробуйте увеличить размер буфера. Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Пожалуйста, выберите звуковую систему. В зависимости от конфигурации во время компилирования программы, вы можете использовать ALSA, JACK, OSS и другие. В нижней части окна настройки можно задать специфические параметры выбранной системы. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Пожалуйста, выберите интерфейс MIDI. В зависимости от конфигурации во время компилирования программы, вы можете использовать ALSA, OSS и другие. В нижней части окна настройки можно задать специфические параметры выбранного интерфейса. LMMS working directory Рабочий каталог LMMS VST-plugin directory Каталог модулей VST Choose LMMS working directory Выбор рабочего каталога LMMS Choose your VST-plugin directory Выбор своего каталога для модулей VST Performance settings Параметры производительности UI effects vs. performance Визуальные эффекты/производительность Frames: %1 Latency: %2 ms Фрагментов: %1 Отклик: %2 Artwork directory Каталог с элементами оформления Choose artwork-theme directory Выбор каталога с темой оформления для LMMS Display volume as dBV Отображать громкости в децибелах (напр.) FL Studio installation directory Каталог установки FL Studio STK rawwave directory Каталог STK rawwave Choose FL Studio installation directory Выбор каталога установленной FL Studio Choose LADSPA plugin directory Выбор каталога с модулями LADSPA Choose STK rawwave directory Выбор каталога STK rawwave Enable tooltips Включить подсказки Show restart warning after changing settings Показывать предупреждение о перезапуске при изменении настроек Compress project files per default По умолчанию сжимать файлы проектов HQ-mode for output audio-device Режим высокого качества для вывода звука Paths Пути LADSPA plugin paths Пути модулей LADSPA Default Soundfont File Основной Soundfont файл Background artwork Фоновое изображение Choose default SoundFont Выбрать главный SoundFont Choose background artwork Выбрать фоновое изображение One instrument track window mode Режим окна одной инструментальной дорожки Compact track buttons Ужать кнопки дорожки Sync VST plugins to host playback Синхронизировать VST плагины с хостом воспроизведения Enable note labels in piano roll Включить обозначение нот в музыкальном редакторе Enable waveform display by default Включить отображение формы звуков по умолчанию Smooth scroll in Song Editor Плавная прокрутка в музыкальном редакторе Enable auto save feature Включить функцию авто-сохранения Show playback cursor in AudioFileProcessor Показывать указатель воспроизведения в процессоре аудио файлов sf2Instrument Bank Банк Patch Патч Gain Усиление Reverb Эхо Reverb Roomsize Объём эха Reverb Damping Затухание эха Reverb Width Долгота эха Reverb Level Уровень эха Chorus Хор (припев) Chorus Lines Линии хора Chorus Level Уровень хора Chorus Speed Скорость хора Chorus Depth Глубина хора sf2InstrumentView Open other SoundFont file Открыть другой файл SoundFront Click here to open another SF2 file Нажмите здесь чтобы открыть другой файл SF2 Choose the patch Выбрать патч Gain Усиление Apply reverb (if supported) Создать эхо (если поддерживается) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Эта кнопка включает эффект эха. Это может пригодиться, но работает не для всех файлов. Reverb Roomsize: Размер помещения: Reverb Damping: Глушение эха: Reverb Width: Долгота эха: Reverb Level: Уровень эха: Apply chorus (if supported) Создать эффект хора (если поддерживается) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Эта кнопка включает эффект хора. Это может пригодиться, но работает не для всех файлов. Chorus Lines: не знаю как лучше Линии хора: Chorus Level: Уровень хора: Chorus Speed: Скорость хора: Chorus Depth: Глубина хора: Open SoundFont file Открыть файл SoundFront SoundFont2 Files (*.sf2) Файлы SoundFont2 (*.sf2) sfxrInstrument Wave Form Форма волны sidInstrument Cutoff Срез Resonance Усиление Filter type Тип фильтра Voice 3 off Голос 3 откл Volume Громкость Chip model Модель чипа sidInstrumentView Volume: Громкость: Resonance: Усиление: Cutoff frequency: Частота среза: High-Pass filter Выс.ЧФ Band-Pass filter Сред.ЧФ Low-Pass filter Низ.ЧФ Voice3 Off Голос 3 откл MOS6581 SID MOS8580 SID Attack: Вступление: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Длительность вступления определяет, насколько быстро громкость %1-го голоса возрастает от нуля до наибольшего значения. Decay: Спад: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Длительность спада определяет, насколько быстро громкость падает от максимума до остаточного уровня. Sustain: Выдержка: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Громкость %1-го голоса будет оставаться на уровне амплитуды выдержки, пока длится нота. Release: Убывание: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Громкость %1-го голоса будет падать от остаточного уровня до нуля с указанной здесь скоростью. Pulse Width: Длительность импульса: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Длительность импульса позволяет мягко регулировать прохождение импульса без заметных сбоев. Импульсная волна должна быть выбрана на осцилляторе %1, чтобы получить звучание. Coarse: Грубость: The Coarse detuning allows to detune Voice %1 one octave up or down. Грубая настройка позволяет подстроить Голос %1 на одну октаву вверх или вниз. Pulse Wave Пульсирующая волна Triangle Wave Треугольник SawTooth Зигзаг Noise Шум Sync Синхро Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Синхро синхронизирует фундаментальную частоту осцилляторов %1 фундаментальной частотой осциллятора %2, создавая эффект "Железной синхронизации". Ring-Mod Круговой режим Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Круговой режим заменяет треугольные волны на выходе осциллятора %1 "Круговой модуляцией" комбинацией осцилляторов %1 и %2. Filtered Фильтровать When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Если этот флажок установлен, то %1-й голос будет проходить через фильтр. Иначе голос №%1 будет подаваться прямо на выход. Test Тест Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. Если «флажок» установлен, то %1-й осциллятор выдаёт нулевой сигнал (пока флажок не снимется). song Tempo Темп Master volume Общая громкость Master pitch Общая тональность Project saved Проект сохранён The project %1 is now saved. Проект %1 сохранён. Project NOT saved. Проект НЕ СОХРАНЁН. The project %1 was not saved! Проект %1 не сохранён! Import file Импорт файла Empty project Проект пуст This project is empty so exporting makes no sense. Please put some items into Song Editor first! Проект ничего не содержит, так что и экспортировать нечего. Сначала добавьте хотя бы одну дорожку с помощью музыкального редактора! untitled Неназванное Select file for project-export... Выбор файла для экспорта проекта... MIDI sequences MiDi последовательности FL Studio projects FL Studio проекты All file types Все типы файлов Hydrogen projects Hydrogen проекты Select directory for writing exported tracks... Выберите папку для записи экспортированных дорожек... stereoEnhancerControlDialog WIDE ШИРЕ Width: Ширина: stereoEnhancerControls Width Ширина stereoMatrixControlDialog Left to Left Vol: От левого на левый: Left to Right Vol: От левого на правый: Right to Left Vol: От правого на левый: Right to Right Vol: От правого на правый: stereoMatrixControls Left to Left От левого на левый Left to Right От левого на правый Right to Left От правого на левый Right to Right От правого на правый timeLine Enable/disable auto-scrolling Вкл/выкл автопрокрутку Enable/disable loop-points Вкл/выкл точки кольцевания After stopping go back to begin После остановки переходить к началу After stopping go back to position at which playing was started После остановки переходить к месту, с которого началось воспроизведение After stopping keep position Оставаться на месте остановки Hint Подсказка Press <Ctrl> to disable magnetic loop points. Нажмите <Ctrl>, чтобы убрать прилипание точек цикла Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. примагничивание? Зажмите <Shift> чтобы сдвинуть начало точек цикла; Нажмите <Ctrl>, чтобы убрать прилипание точек цикла track Muted Тихо Solo Соло trackContentObject Muted Тихо trackContentObjectView Current position Позиция Hint Подсказка Press <Ctrl> and drag to make a copy. Нажмите <Ctrl> и перетащите, чтобы создать копию. Current length Длительность Press <Ctrl> for free resizing. Для свободного изменения размера нажмите <Ctrl>. %1:%2 (%3:%4 to %5:%6) %1:%2 (от %3:%4 до %5:%6) Delete (middle mousebutton) Удалить (средняя кнопка мыши) Cut Вырезать Copy Копировать Paste Вставить Mute/unmute (<Ctrl> + middle click) Заглушить/включить (Crl + средняя кнопка мыши) trackOperationsWidget Clone this track Клонировать дорожку Remove this track Удалить дорожку Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Зажмите <Сtrl> и нажимайте мышь во время движения, чтобы начать новую переброску. Actions for this track Действия для этой дорожки Mute Заглушить Mute this track Отключить дорожку Solo Соло Clear this track Turn all recording on Turn all recording off vestigeInstrument Failed loading VST-plugin Не смог загрузить модуль VST The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! Отчего-то модуль VST %1 не мог быть загружен. Если другое программное обеспечение VST работает у Вас под Linux'ом, свяжитесь с разработчиком LMMS! Loading plugin Загрузка модуля Please wait while loading VST-plugin... Подождите, пока загрузится модуль VST... vibed String %1 volume Громкость %1-й струны String %1 stiffness Жёсткость %1-й струны Pick %1 position Лад %1 Pickup %1 position Положение %1-го звукоснимателя Pan %1 Бал %1 Detune %1 Подстройка %1 Fuzziness %1 Нечёткость %1 Length %1 Длина %1 Impulse %1 Импульс %1 Octave %1 Октава %1 vibedView Volume: Громкость: The 'V' knob sets the volume of the selected string. Регулятор 'V' устанавливает громкость текущей струны. String stiffness: Жёсткость: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Регулятор 'S' устанавливает жёсткость текущей струны. Этот параметр отвечает за длительность звучания струны (чем больше значение жёсткости, тем дольше звенит струна). Pick position: Лад: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Регулятор 'P' устанавливает место струны, где она будет „прижата“. Чем ниже значение, тем ближе это место будет к кобылке. Pickup position: Положение звукоснимателя: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Регулятор 'PU' устанавливает место струны, откуда будет сниматься звук. Чем ниже значение, тем ближе это место будет к кобылке. Pan: Бал: The Pan knob determines the location of the selected string in the stereo field. Эта ручка устанавливает стереобаланс для текущей струны. Detune: Подстроить: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Ручка подстройки изменяет сдвиг частоты для текущей струны. Отрицательные значения заставят струну звучать плоско (бемольно), положительные — остро (диезно). Fuzziness: Нечёткость: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Эта ручка добавляет размытости звуку, что наиболее заметно во время нарастания, впрочем, это может использоваться, чтобы сделать звук более „металлическим“. Length: Длина: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Ручка длины устанавливает длину текущей струны. Чем длиннее струна, тем более чистый и долгий звук она даёт; однако это требует больше ресурсов ЦП. Impulse or initial state Начальная скорость/начальное состояние The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Переключатель „Imp“ устанавливает режим работы струны: если он включён, то указанная форма сигнала интерпретируется как начальный импульс, иначе — как начальная форма струны. Octave Октава The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Переключатель октав позволяет указать гармонику основной частоты, на которой будет звучать струна. Например, „-2“ означает, что струна будет звучать двумя октавами ниже основной частоты, „F“ заставит струну звенеть на основной частоте инструмента, а „6“ — на частоте, на шесть октав более высокой, чем основная. Impulse Editor Редактор сигнала The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Редактор формы позволяет явно указать профиль струны в начальный момент времени, либо её начальный импульс (в заисимости от состояния переключателя „Imp“). Кнопки справа от рисунка позволяют задавать некоторые стандартные формы, причём кнопка '?' служит для задания формы из произвольного звукового файла (загружаются первые 128 элементов выборки). Также форма сигнала может быть просто нарисована с помощью мыши. Кнопка 'S' сгладит текущую форму. Кнопка 'N' нормализует уровень. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Инструмент „Vibed“ моделирует до девяти независимых одновременно звучащих струн. Переключатель „Strings“ позволяет выбрать струну, чьи свойства редактируются. Переключатель „Imp“ устанавливает режим работы струны: если он включён, то указанная форма сигнала интерпретируется как начальный импульс, иначе — как начальная форма струны. Переключатель „Octave“ позволяет указать гармонику основной частоты, на которой будет звучать струна. Редактор формы позволяет явно указать профиль струны в начальный момент времени, либо её начальный импульс. Ручка 'V' устанавливает громкость текущей струны, 'S' — жёсткость, 'P' — место, где прижата струна, а 'PU'' — положение звукоснимателя Ручка подстройки и стереобаланса, есть надежда, не нуждаются в объяснениях. Ручка „Длина“ регулирует длину струны Индикатор-переключатель слева внизу определяет, включена ли текущая струна. Enable waveform Включить Click here to enable/disable waveform. Нажмите, чтобы включить/выключить сигнал. String Струна The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Переключатель струн позволяет выбрать струну, чьи свойства редактируются. Инструмент Vibed содержит до девяти независимо звучащих струн, индикатор в левом нижнем углу показывает, активна ли текущая струна (т. е. будет ли она слышна). Sine wave Синусоида Use a sine-wave for current oscillator. Генерировать гармонический (синусоидальный) сигнал. Triangle wave Треугольник Use a triangle-wave for current oscillator. Генерировать треугольный сигнал. Saw wave Зигзаг Use a saw-wave for current oscillator. Генерировать зигзагообразный сигнал. Square wave Квадратная волна Use a square-wave for current oscillator. Генерировать квадрат (меандр). White noise wave Белый шум Use white-noise for current oscillator. Генерировать белый шум. User defined wave Пользовательская Use a user-defined waveform for current oscillator. Задать форму сигнала. Smooth Сгладить Click here to smooth waveform. Щёлкните чтобы сгладить форму сигнала. Normalize Нормализовать Click here to normalize waveform. Нажмите, чтобы нормализовать сигнал. &Help &H Справка visualizationWidget click to enable/disable visualization of master-output Нажмите, чтобы включить/выключить визуализацию главного вывода Click to enable Нажать для включения voiceObject Voice %1 pulse width Голос %1 длина сигнала Voice %1 attack Вступление %1-го голоса Voice %1 decay Спад %1-го голоса Voice %1 sustain Выдержка для %1-го голоса Voice %1 release Убывание %1-го голоса Voice %1 coarse detuning Подстройка %1-го голоса (грубо) Voice %1 wave shape Форма сигнала для %1-го голоса Voice %1 sync Синхронизация %1-го голоса Voice %1 ring modulate Голос %1 кольцевой модулятор Voice %1 filtered Фильтрованный %1-й голос Voice %1 test Голос %1 тест waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/sv.qm000066400000000000000000000552641247673406200156520ustar00rootroot00000000000000.~DM:)'}"#Ő"ĩF3չ%t$Y("10191Qq.O`]`)^`%`%(`%HjztrJMw2w4wZ dP2 2n-SE2-SE4-SE<-SEQYGx!-c?{jD!nq'vS1mHdJ7^: $ W 6EH} 8e2w 8e4k 8eP Mg9 TNl Ys;m =,R  e 8 \U3- \U5- \U< \UQ U8K #> %Ӵ$ e: fy# g$% mb> u(X   D  D  D 6D D 6 ˔A NI ? NFF Om STnN N N V hL#  G "G c.c c.c c.cs c.c- d̥ d̥F d̥4' 3o 鼣GG @uv @u @u3 bS#F c] c c c= cHD cQ Չ9 Չ9 fJiPVad^Lvcg8Op Cg)U&1` /D50iR OmAbout AboutDialogVOLVOLAmplifierControlDialog Volym:Volume:AmplifierControlDialog VolymVolumeAmplifierControlsKANALERCHANNELSAudioAlsa::setupWidget ENHETDEVICEAudioAlsa::setupWidgetFrstrkning:Amplify:AudioFileProcessorViewStartpunkt: Startpoint:AudioFileProcessorViewKANALERCHANNELSAudioJack::setupWidgetKLIENT-NAMN CLIENT-NAMEAudioJack::setupWidgetKANALERCHANNELSAudioOss::setupWidget ENHETDEVICEAudioOss::setupWidget ENHETDEVICEAudioPortAudio::setupWidgetKANALERCHANNELSAudioPulseAudio::setupWidget ENHETDEVICEAudioPulseAudio::setupWidget ENHETDEVICEAudioSdl::setupWidget0&Klistra in vrde (%1%2)&Paste value (%1%2)AutomatableModel"&Nollstll (%1%2) &Reset (%1%2)AutomatableModel\Alla valda vrden blev kopierade till urklipp.1All selected values were copied to the clipboard.AutomationEditor:Kopiera valda vrden (ctrl+C)Copy selected values (Ctrl+C)AutomationEditor<klipp ut valda vrden (ctrl+X)Cut selected values (Ctrl+X)AutomationEditorLKlistra in vrden frn urklipp(ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorRSpela/pausa aktuellt mnster (mellanslag)"Play/pause current pattern (Space)AutomationEditorTSluta spela aktuellt mnster (mellanslag)'Stop playing of current pattern (Space)AutomationEditor Vrden kopierade Values copiedAutomationEditorByt namn Change nameAutomationPatternViewNollstll namn Reset nameAutomationPatternView KANALCHANNELControllerConnectionDialog AvbrytCancelControllerConnectionDialogLgg tillAddControllerRackView &Hjlp&HelpControllerView.&Ta bort denna pluginen&Remove this pluginControllerViewKontrollerControlsControllerView &Hjlp&Help EffectView.&Ta bort denna pluginen&Remove this plugin EffectViewKontrollerControls EffectViewFlytta &ner Move &down EffectViewFlytta &upMove &up EffectView P/AvOn/Off EffectViewTid:Time: EffectViewLedtrdHintEnvelopeAndLfoView AvbrytCancelExportProjectDialog &Hjlp&HelpFxLine FrittFreeInstrumentFunctionArpeggioSorteraSortInstrumentFunctionArpeggio%%InstrumentFunctionArpeggioViewRiktning: Direction:InstrumentFunctionArpeggioView Lge:Mode:InstrumentFunctionArpeggioView OMRDERANGEInstrumentFunctionArpeggioViewTIDTIMEInstrumentFunctionArpeggioViewoktav(er) octave(s)InstrumentFunctionArpeggioViewArabiskArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingackordtyp Chord typeInstrumentFunctionNoteStackingdurMajorInstrumentFunctionNoteStacking helnot Whole toneInstrumentFunctionNoteStackingmolnminorInstrumentFunctionNoteStacking oktavoctaveInstrumentFunctionNoteStacking OMRDERANGE"InstrumentFunctionNoteStackingViewoktav(er) octave(s)"InstrumentFunctionNoteStackingView KANALCHANNELInstrumentMidiIOViewFiltertyp Filter typeInstrumentSoundShaping VOLYMVOLUMEInstrumentSoundShaping VolymVolumeInstrumentSoundShaping FILTERFILTERInstrumentSoundShapingViewMLTARGETInstrumentSoundShapingView VolymVolumeInstrumentTrackMIDIMIDIInstrumentTrackViewVOLVOLInstrumentTrackView VolymVolumeInstrumentTrackView Volym:Volume:InstrumentTrackViewMIDIMIDIInstrumentTrackWindow PLUGINPLUGINInstrumentTrackWindow OMRDERANGEInstrumentTrackWindowVOLVOLInstrumentTrackWindow Volym:Volume:InstrumentTrackWindowKanalerChannel LadspaControlDialogFTyvrr, ingen hjlp r tillgnglig.Sorry, no help available.LadspaControlView Vrde:Value:LadspaControlViewLSKriv ett nytt vrde mellan %1 och %2:+Please enter a new value between %1 and %2: LcdSpinBox&Redigera&Edit MainWindow &Hjlp&Help MainWindow&Ny&New MainWindow&ppna...&Open... MainWindow&Projekt&Project MainWindow&Avsluta&Quit MainWindow &Spara&Save MainWindowOmAbout MainWindowDKunde inte spara konfigurationsfilCould not save config-file MainWindow$Skapa nytt projektCreate new project MainWindow4Exportera aktuellt projektExport current project MainWindow HjlpHelp MainWindow,Hjlp inte tillgngligHelp not available MainWindowLMMS %1LMMS %1 MainWindow2ppna existerande projektOpen existing project MainWindowppna projekt Open project MainWindowSpara &Som... Save &As... MainWindow,Spara aktuellt projektSave current project MainWindowSpara projekt Save project MainWindow(Visa/gm Sng-EditorShow/hide Song-Editor MainWindow8Visa/gm projektanteckningarShow/hide project notes MainWindowVad r detta? What's this? MainWindow ENHETDEVICEMidiAlsaRaw::setupWidget ENHETDEVICEMidiAlsaSeq::setupWidget ENHETDEVICEMidiOss::setupWidget&Snd MIDI-hndelserSend MIDI-eventsMidiPortHuvudvolym Master volume NesInstrumentByt namn Change name PatternViewNollstll namn Reset name PatternView8Klipp ut valda noter(Ctrl+X)Cut selected notes (Ctrl+X) PianoRollSenaste noten Last note PianoRollRSpela/pausa aktuellt mnster (mellanslag)"Play/pause current pattern (Space) PianoRollLSKriv ett nytt vrde mellan %1 och %2:+Please enter a new value between %1 and %2: PianoRoll0Markeringslge (shift+s)Select mode (Shift+S) PianoRollTSluta spela aktuellt mnster (mellanslag)'Stop playing of current pattern (Space) PianoRoll6Fel vid inlsning av pluginError while loading pluginPlugin(Plugin hittades intePlugin not foundPlugin6Komprimerad OGG-Fil (*.ogg)Compressed OGG-File (*.ogg)ProjectRendererSkapare:Maker: QWidget Name: Name: QWidgetJaYesQWidget2AIFF-Filer (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBufferAU-Filer (*.au)AU-Files (*.au) SampleBuffer&FLAC-Filer (*.flac)FLAC-Files (*.flac) SampleBuffer"OGG-Filer (*.ogg)OGG-Files (*.ogg) SampleBufferppna ljudfilOpen audio file SampleBuffer"RAW-Filer (*.raw)RAW-Files (*.raw) SampleBuffer$VOC-Filer (*.voc)VOC-Files (*.voc) SampleBuffer$Wave-Filer (*.wav)Wave-Files (*.wav) SampleBufferKopieraCopy SampleTCOViewKlipp utCut SampleTCOView8Ta bort (musens mittenknapp)Delete (middle mousebutton) SampleTCOViewKlistra inPaste SampleTCOView>Dubbelklicka fr att vlja sprdouble-click to select sample SampleTCOView VolymVolume SampleTrackVOLVOLSampleTrackView(kunde inte ppna filCould not open file SongEditorHuvudvolym Master volume SongEditor.Spela sng (mellanslag)Play song (Space) SongEditorSng-Editor Song-Editor SongEditorTEMPO/BPM TEMPO/BPM SongEditor TempoTempo SongEditorhuvudvolym master volume SongEditorSngtempo tempo of song SongEditor &Hjlp&Help TempoSyncKnobHalvnoter Half note TempoSyncKnob AvbrytCancelTrackContainer,Kunde inte hitta ett filter fr att importera filen %1. Du br konvertera filen till ett format som std av lLMMS genom att anvnda ett annat program.Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software.TrackContainer0Kunde inte importera filCouldn't import fileTrackContainer,Kunde inte ppna filenCouldn't open fileTrackContainerKunde inte ppna filen %1 fr lsning. Se till att du har lsningsrttigheter fr filen och katalogen som innehller filen och frsk igen!Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again!TrackContainer,Importerar FLP-file...Importing FLP-file...TrackContainer.Importerar MIDI-file...Importing MIDI-file...TrackContainer&Lser in projekt...Loading project...TrackContainerVnta...Please wait...TrackContainer"DLL-filer (*.dll)DLL-files (*.dll)VestigeInstrumentView"EXE-filer (*.exe)EXE-files (*.exe)VestigeInstrumentView.Inget VST-plugin inlstNo VST-plugin loadedVestigeInstrumentView ppna VST-pluginOpen VST-pluginVestigeInstrumentView,ppna andra VST-pluginOpen other VST-pluginVestigeInstrumentViewLaddar pluginLoading plugin VstPluginNormalisera Normalize WatsynViewSinusvg Sine wave WatsynViewFyrkantsvg Square wave WatsynViewtriganelvg Triangle wave WatsynView(Play/pause current beat/bassline (Space)bbEditorByt frg Change color bbTCOViewByt namn Change name bbTCOViewNollstll namn Reset name bbTCOViewNormalisera NormalizebitInvaderViewSinusvg Sine wavebitInvaderViewFyrkantsvg Square wavebitInvaderViewtriganelvg Triangle wavebitInvaderView(kunde inte ppna filCould not open fileexportProjectDialog2Exportera projekt till %1Export project to %1exportProjectDialogLSKriv ett nytt vrde mellan %1 och %2:+Please enter a new value between %1 and %2:fader &Hjlp&HelpknobLSKriv ett nytt vrde mellan %1 och %2:+Please enter a new value between %1 and %2:knoblSkriv in ett nytt vrde mellan -96.0 dBV och 6.0 dBV:7Please enter a new value between -96.0 dBV and 6.0 dBV:knob*Tillgngliga EffekterAvailable EffectsladspaBrowserViewVet inte Don't knowladspaBrowserViewInstrument InstrumentsladspaBrowserViewTyp:Type:ladspaBrowserView4Icke Tillgngliga EffekterUnavailable EffectsladspaBrowserViewBeskrivning DescriptionladspaDescription PluginPluginsladspaDescriptionLjudAudioladspaPortDialogKontrollControlladspaPortDialogRiktning DirectionladspaPortDialogFlyttalFloatladspaPortDialog HeltalIntegerladspaPortDialogLogaritmisk LogarithmicladspaPortDialogNamnNameladspaPortDialog PortarPortsladspaPortDialogTypTypeladspaPortDialogJaYesladspaPortDialogSinusvg Sine wavelb302SynthViewFyrkantsvg Square wavelb302SynthViewtriganelvg Triangle wavelb302SynthView &Hjlp&HelpnineButtonSelector VolymVolumeorganicInstrument Volym:Volume:organicInstrumentViewhFilter fr att importera FL Studio projekt till LMMS1Filter for importing FL Studio projects into LMMS pluginBrowser"Instrument pluginInstrument plugins pluginBrowser"ingen beskrivningno description pluginBrowser&Fet&Bold projectNotes&Frger... &Color... projectNotes&Kopiera&Copy projectNotes&Kursiv&Italic projectNotes&Vnster&Left projectNotes&Klistra in&Paste projectNotes&terstll&Redo projectNotes &Hger&Right projectNotes&Understruken &Underline projectNotes &ngra&Undo projectNotesC&entreraC&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotesKlipp& utCu&t projectNotes"Editera hndelser Edit Actions projectNotes(Projekt anteckningar Project notes projectNotesPSkriv ner dina projekt anteckningar hr.!Put down your project notes here. projectNotesByt namn... Rename... renameDialog"LjudinstllningarAudio settings setupDialog AvbrytCancel setupDialog Visa volym i dBVDisplay volume as dBV  setupDialog$LMMS arbetskatalogLMMS working directory setupDialog$MIDI instllningar MIDI settings setupDialogstarta om LMMS Restart LMMS setupDialogStll in LMMS Setup LMMS setupDialogFiltertyp Filter type sidInstrument VolymVolume sidInstrument Volym:Volume:sidInstrumentViewImportera fil Import filesongHuvudvolym Master volumesong(Projekt INTE sparat.Project NOT saved.songProjekt sparad Project savedsong TempoTemposong4Projektet %1 r nu sparad.The project %1 is now saved.song6Projektet %1 sparades inte!The project %1 was not saved!songnamnlsuntitledsongXEfter att ha stoppat g tillbaka till brjanAfter stopping go back to begintimeLineLedtrdHinttimeLine,%1:%2 (%3:%4 to %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectViewKopieraCopytrackContentObjectViewAktuell lngdCurrent lengthtrackContentObjectView Aktuell positionCurrent positiontrackContentObjectViewKlipp utCuttrackContentObjectView8Ta bort (musens mittenknapp)Delete (middle mousebutton)trackContentObjectViewLedtrdHinttrackContentObjectViewKlistra inPastetrackContentObjectView$Klona detta spretClone this tracktrackOperationsWidget(Ta bort detta spretRemove this tracktrackOperationsWidgetNMisslyckades med att lsa in VST_pluginFailed loading VST-pluginvestigeInstrumentLaddar pluginLoading pluginvestigeInstrumentFVnta medans VST-plugin lses in...'Please wait while loading VST-plugin...vestigeInstrument &Hjlp&Help vibedView Lngd:Length: vibedViewNormalisera Normalize vibedViewVlj position:Pick position: vibedViewSinusvg Sine wave vibedViewFyrkantsvg Square wave vibedViewtriganelvg Triangle wave vibedView Volym:Volume: vibedViewlmms-1.1.3/data/locale/sv.ts000066400000000000000000010575451247673406200156700ustar00rootroot00000000000000 AboutDialog About LMMS Version %1 (%2/%3, Qt %4, %5) About Om LMMS - easy music production for everyone Authors Translation Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License Copyright (c) 2004-2014, LMMS developers <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS AmplifierControlDialog VOL VOL Volume: Volym: PAN Panning: LEFT Left gain: RIGHT Right gain: AmplifierControls Volume Volym Panning Left gain Right gain AudioAlsa::setupWidget DEVICE ENHET CHANNELS KANALER AudioFileProcessorView Open other sample Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. Reverse sample If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Amplify: Förstärkning: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Startpoint: Startpunkt: Endpoint: Continue sample playback across notes Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop This button disables looping. The sample plays only once from start to end. Enable loop This button enables forwards-looping. The sample loops between the end point and the loop point. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. With this knob you can set the point where AudioFileProcessor should begin playing your sample. With this knob you can set the point where AudioFileProcessor should stop playing your sample. Loopback point: With this knob you can set the point where the loop starts. AudioFileProcessorWaveView Sample length: AudioJack JACK client restarted LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. JACK server down The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJack::setupWidget CLIENT-NAME KLIENT-NAMN CHANNELS KANALER AudioOss::setupWidget DEVICE ENHET CHANNELS KANALER AudioPortAudio::setupWidget BACKEND DEVICE ENHET AudioPulseAudio::setupWidget DEVICE ENHET CHANNELS KANALER AudioSdl::setupWidget DEVICE ENHET AutomatableModel &Reset (%1%2) &Nollställ (%1%2) &Copy value (%1%2) &Paste value (%1%2) &Klistra in värde (%1%2) Edit song-global automation Connected to %1 Connected to controller Edit connection... Remove connection Connect to controller... Remove song-global automation Remove all linked controls AutomationEditor Play/pause current pattern (Space) Spela/pausa aktuellt mönster (mellanslag) Stop playing of current pattern (Space) Sluta spela aktuellt mönster (mellanslag) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Click here if you want to stop playing of the current pattern. Draw mode (Shift+D) Erase mode (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Cut selected values (Ctrl+X) klipp ut valda värden (ctrl+X) Copy selected values (Ctrl+C) Kopiera valda värden (ctrl+C) Paste values from clipboard (Ctrl+V) Klistra in värden från urklipp(ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern Automation Editor - %1 Please open an automation pattern with the context menu of a control! Values copied Värden kopierade All selected values were copied to the clipboard. Alla valda värden blev kopierade till urklipp. Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> Model is already connected to this pattern. AutomationPatternView double-click to open this pattern in automation editor Open in Automation editor Clear Reset name Nollställ namn Change name Byt namn %1 Connections Disconnect "%1" Set/clear record AutomationTrack Automation track BassBoosterControlDialog FREQ Frequency: GAIN Gain: RATIO Ratio: BassBoosterControls Frequency Gain Ratio CarlaInstrumentView Show GUI Click here to show or hide the graphical user interface (GUI) of Carla. Controller Controller %1 ControllerConnectionDialog Connection Settings MIDI CONTROLLER Input channel CHANNEL KANAL Input controller CONTROLLER Auto Detect MIDI-devices to receive MIDI-events from USER CONTROLLER MAPPING FUNCTION OK Cancel Avbryt LMMS Cycle Detected. ControllerRackView Controller Rack Add Lägg till Confirm Delete Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. ControllerView Controls Kontroller Controllers are able to automate the value of a knob, slider, and other controls. Rename controller Enter the new name for this controller &Remove this plugin &Ta bort denna pluginen &Help &Hjälp DualFilterControlDialog Filter 1 enabled Filter 2 enabled Click to enable/disable Filter 1 Click to enable/disable Filter 2 DualFilterControls Filter 1 enabled Filter 1 type Cutoff 1 frequency Q/Resonance 1 Gain 1 Mix Filter 2 enabled Filter 2 type Cutoff 2 frequency Q/Resonance 2 Gain 2 LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter Effect Effect enabled Wet/Dry mix Gate Decay EffectChain Effects enabled EffectRackView EFFECTS CHAIN Add effect EffectSelectDialog Add effect Plugin description EffectView Toggles the effect on or off. On/Off På/Av W/D Wet Level: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. DECAY Time: Tid: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE Gate: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls Kontroller Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up Flytta &up Move &down Flytta &ner &Remove this plugin &Ta bort denna pluginen &Help &Hjälp EnvelopeAndLfoParameters Predelay Attack Hold Decay Sustain Release Modulation LFO Predelay LFO Attack LFO speed LFO Modulation LFO Wave Shape Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. ATT Attack: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. HOLD Hold: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. DEC Decay: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. SUST Sustain: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. REL Release: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. AMT Modulation amount: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. control envelope-amount by this LFO ms/LFO: Hint Ledtråd Drag a sample from somewhere and drop it in this window. Click here for random wave. ExportProjectDialog Export project Output File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz Bitrate: 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s Depth: 16 Bit Integer 32 Bit Float Please note that not all of the parameters above apply for all file formats. Quality settings Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Start Cancel Avbryt Export as loop (remove end silence) FileBrowser Browser FileBrowserTreeWidget Send to active instrument-track Open in new instrument-track/Song-Editor Open in new instrument-track/B+B Editor Loading sample Please wait, loading sample for preview... --- Factory files --- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help &Hjälp FxMixer Master FX %1 FxMixerView Rename FX channel Enter the new name for this FX channel FX-Mixer FxMixerView::FxChannelView FX Fader %1 Mute Mute this FX channel FxRoute Amount to send from channel %1 to channel %2 InstrumentFunctionArpeggio Arpeggio Arpeggio type Arpeggio range Arpeggio time Arpeggio gate Arpeggio direction Arpeggio mode Up Down Up and down Random Free Fritt Sort Sortera Sync Down and up InstrumentFunctionArpeggioView ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE OMRÅDE Arpeggio range: octave(s) oktav(er) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME TID Arpeggio time: ms Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. GATE Arpeggio gate: % % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: Direction: Riktning: Mode: Läge: InstrumentFunctionNoteStacking octave oktav Major dur Majb5 minor moln minb5 sus2 sus4 aug augsus4 tri 6 6sus4 6add9 m6 m6add9 7 7sus4 7#5 7b5 7#9 7b9 7#5#9 7#5b9 7b5b9 7add11 7add13 7#11 Maj7 Maj7b5 Maj7#5 Maj7#11 Maj7add13 m7 m7b5 m7b9 m7add11 m7add13 m-Maj7 m-Maj7add11 m-Maj7add13 9 9sus4 add9 9#5 9b5 9#11 9b13 Maj9 Maj9sus4 Maj9#5 Maj9#11 m9 madd9 m9b5 m9-Maj7 11 11b9 Maj11 m11 m-Maj11 13 13#9 13b9 13b5b9 Maj13 m13 m-Maj13 Harmonic minor Melodic minor Whole tone helnot Diminished Major pentatonic Minor pentatonic Jap in sen Major bebop Dominant bebop Blues Blues Arabic Arabisk Enigmatic Neopolitan Neopolitan minor Hungarian minor Dorian Phrygolydian Lydian Mixolydian Aeolian Locrian Chords Chord type ackordtyp Chord range Minor Chromatic Half-Whole Diminished 5 InstrumentFunctionNoteStackingView RANGE OMRÅDE Chord range: octave(s) oktav(er) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: InstrumentMidiIOView ENABLE MIDI INPUT CHANNEL KANAL VELOCITY ENABLE MIDI OUTPUT PROGRAM MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME VOLYM Volume Volym CUTOFF Cutoff frequency RESO Resonance Envelopes/LFOs Filter type Filtertyp Q/Resonance LowPass HiPass BandPass csg BandPass czpg Notch Allpass Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter InstrumentSoundShapingView TARGET MÅL These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track Volume Volym Panning Pitch FX channel Default preset With this knob you can set the volume of the opened channel. Base note Pitch range InstrumentTrackView Volume Volym Volume: Volym: VOL VOL Panning Panning: PAN MIDI MIDI Input Output InstrumentTrackWindow GENERAL SETTINGS Instrument volume Volume: Volym: VOL VOL Panning Panning: PAN Pitch Pitch: cents PITCH FX channel ENV/LFO FUNC FX MIDI MIDI Save preset XML preset file (*.xpf) PLUGIN PLUGIN Pitch range (semitones) RANGE OMRÅDE Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels LadspaControlDialog Link Channels Channel Kanaler LadspaControlView Link channels Value: Värde: Sorry, no help available. Tyvärr, ingen hjälp är tillgänglig. LadspaEffect Effect Unknown LADSPA plugin %1 requested. LcdSpinBox Please enter a new value between %1 and %2: SKriv ett nytt värde mellan %1 och %2: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD LFO-speed: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. Could not save config-file Kunde inte spara konfigurationsfil Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. &Project &Projekt &New &Ny &Open... &Öppna... Recently opened projects &Save &Spara Save &As... Spara &Som... Import... E&xport... &Quit &Avsluta &Edit &Redigera Settings &Tools &Help &Hjälp Online help Help Hjälp What's this? Vad är detta? About Om Create new project Skapa nytt projekt Create new project from template Open existing project Öppna existerande projekt Recently opened project Save current project Spara aktuellt projekt Export current project Exportera aktuellt projekt Show/hide Song-Editor Visa/göm Sång-Editor By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes Visa/göm projektanteckningar Click here to show or hide the project notes window. In this window you can put down your project notes. Show/hide controller rack Untitled LMMS %1 LMMS %1 Project not saved The current project was modified since last saving. Do you want to save it now? Open project Öppna projekt Save project Spara projekt Help not available Hjälp inte tillgänglig Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. My projects My samples My presets My home My computer Root directory Save as new &version E&xport tracks... LMMS (*.mmp *.mmpz) Version %1 Project recovery It looks like the last session did not end properly. Do you want to recover the project of this session? Configuration file Error while parsing configuration file at line %1:%2: %3 Volumes Undo Redo LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE ENHET MidiAlsaSeq::setupWidget DEVICE ENHET MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE ENHET MidiPort Input channel Output channel Input controller Output controller Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Send MIDI-events Sänd MIDI-händelser Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume Huvudvolym Vibrato OscillatorObject Osc %1 volume Osc %1 panning Osc %1 coarse detuning Osc %1 fine detuning left Osc %1 fine detuning right Osc %1 phase-offset Osc %1 stereo phase-detuning Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch Click here to open another patch-file. Loop and Tune settings are not reset. Loop Loop mode Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Tune Tune mode Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. No file selected Open patch file Patch-Files (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step Open in piano-roll Clear all notes Reset name Nollställ namn Change name Byt namn Add steps Remove steps PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: Attack: Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Mute output Attack Release Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) Spela/pausa aktuellt mönster (mellanslag) Record notes from MIDI-device/channel-piano Stop playing of current pattern (Space) Sluta spela aktuellt mönster (mellanslag) Draw mode (Shift+D) Erase mode (Shift+E) Select mode (Shift+S) Markeringsläge (shift+s) Cut selected notes (Ctrl+X) Klipp ut valda noter(Ctrl+X) Copy selected notes (Ctrl+C) Paste notes from clipboard (Ctrl+V) Last note Senaste noten Piano-Roll - no pattern Piano-Roll - %1 Please open a pattern by double-clicking on it! Record notes from MIDI-device/channel-piano while playing song or BB track Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume Note Panning Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all No scale No chord This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. Volume: %1% Panning: %1% left Panning: %1% right Panning: center Please enter a new value between %1 and %2: SKriv ett nytt värde mellan %1 och %2: PianoView Base note Plugin Plugin not found Plugin hittades inte The plugin "%1" wasn't found or could not be loaded! Reason: "%2" Error while loading plugin Fel vid inläsning av plugin Failed to load plugin "%1"! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) Compressed OGG-File (*.ogg) Komprimerad OGG-Fil (*.ogg) QObject C Note name Db Note name C# Note name D Note name Eb Note name D# Note name E Note name Fb Note name Gb Note name F# Note name G Note name Ab Note name G# Note name A Note name Bb Note name A# Note name B Note name QWidget Name: Name: Maker: Skapare: Copyright: Requires Real Time: Yes Ja No Real Time Capable: In Place Broken: Channels In: Channels Out: File: File: %1 SampleBuffer Open audio file Öppna ljudfil Wave-Files (*.wav) Wave-Filer (*.wav) OGG-Files (*.ogg) OGG-Filer (*.ogg) DrumSynth-Files (*.ds) FLAC-Files (*.flac) FLAC-Filer (*.flac) SPEEX-Files (*.spx) VOC-Files (*.voc) VOC-Filer (*.voc) AIFF-Files (*.aif *.aiff) AIFF-Filer (*.aif *.aiff) AU-Files (*.au) AU-Filer (*.au) RAW-Files (*.raw) RAW-Filer (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample Dubbelklicka för att välja spår Delete (middle mousebutton) Ta bort (musens mittenknapp) Cut Klipp ut Copy Kopiera Paste Klistra in Mute/unmute (<Ctrl> + middle click) Set/clear record SampleTrack Sample track Volume Volym SampleTrackView Track volume Channel volume: VOL VOL SongEditor Song-Editor Sång-Editor Play song (Space) Spela sång (mellanslag) Stop song (Space) Add beat/bassline Add sample-track Draw mode Edit mode (select and move) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Could not open file kunde inte öppna fil Could not write file Add automation-track Record samples from Audio-device Record samples from Audio-device while playing song or BB track Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. Error in file The file %1 seems to contain errors and therefore can't be loaded. Tempo Tempo TEMPO/BPM TEMPO/BPM tempo of song Sångtempo The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode Master volume Huvudvolym master volume huvudvolym Master pitch master pitch Value: %1% Value: %1 semitones Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SpectrumAnalyzerControlDialog Linear spectrum Linear Y axis SpectrumAnalyzerControls Linear spectrum Linear Y axis Channel mode TempoSyncKnob Tempo Sync No Sync Eight beats Whole note Half note Halvnoter Quarter note 8th note 16th note 32nd note Custom... &Help &Hjälp Custom Synced to Eight Beats Synced to Whole Note Synced to Half Note Synced to Quarter Note Synced to 8th Note Synced to 16th Note Synced to 32nd Note TimeDisplayWidget click to change time units TrackContainer Couldn't import file Kunde inte importera fil Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Kunde inte hitta ett filter för att importera filen %1. Du bör konvertera filen till ett format som stöd av lLMMS genom att använda ett annat program. Couldn't open file Kunde inte öppna filen Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Kunde inte öppna filen %1 för läsning. Se till att du har läsningsrättigheter för filen och katalogen som innehåller filen och försök igen! Loading project... Läser in projekt... Cancel Avbryt Please wait... Vänta... Importing MIDI-file... Importerar MIDI-file... Importing FLP-file... Importerar FLP-file... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Osc %1 panning: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Osc %1 coarse detuning: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Osc %1 fine detuning left: cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 fine detuning right: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 phase-offset: degrees With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Öppna andra VST-plugin Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Turn off all notes Open VST-plugin Öppna VST-plugin DLL-files (*.dll) DLL-filer (*.dll) EXE-files (*.exe) EXE-filer (*.exe) No VST-plugin loaded Inget VST-plugin inläst Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin Laddar plugin Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize Normalisera Click to normalize Invert Click to invert Smooth Click to smooth Sine wave Sinusvåg Click for sine wave Triangle wave triganelvåg Click for triangle wave Click for saw wave Square wave Fyrkantsvåg Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth FM Gain Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Reverse sample Amplify Start of sample End of sample Stutter Loopback point Loop mode Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor Play/pause current beat/bassline (Space) Add beat/bassline Add automation-track Stop playback of current beat/bassline (Space) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Click here to stop playing of current beat/bassline. Remove steps Add steps bbTCOView Open in Beat+Bassline-Editor Reset name Nollställ namn Change name Byt namn Change color Byt färg Reset color to default bbTrack Beat/Bassline %1 Clone of %1 bitInvader Samplelength bitInvaderView Sample Length Sine wave Sinusvåg Triangle wave triganelvåg Saw wave Square wave Fyrkantsvåg White noise wave User defined wave Smooth Click here to smooth waveform. Interpolation Normalize Normalisera Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain Output gain Attack time Release time Stereo mode exportProjectDialog Could not open file kunde inte öppna fil Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! Error Error while determining file-encoder device. Please try to choose a different output format. Rendering: %1% Export project to %1 Exportera projekt till %1 fader Please enter a new value between %1 and %2: SKriv ett nytt värde mellan %1 och %2: graphModel Graph kickerInstrument Start frequency End frequency Gain Length Distortion Start Distortion End Envelope Slope Noise Click Frequency Slope Start from note End to note kickerInstrumentView Start frequency: End frequency: Gain: Frequency Slope: Envelope Length: Envelope Slope: Click: Noise: Distortion Start: Distortion End: knob &Help &Hjälp Please enter a new value between %1 and %2: SKriv ett nytt värde mellan %1 och %2: Please enter a new value between -96.0 dBV and 6.0 dBV: Skriv in ett nytt värde mellan -96.0 dBV och 6.0 dBV: ladspaBrowserView Available Effects Tillgängliga Effekter Unavailable Effects Icke Tillgängliga Effekter Instruments Instrument Analysis Tools Don't know Vet inte This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: Typ: ladspaDescription Plugins Plugin Description Beskrivning ladspaPortDialog Name Namn Rate Direction Riktning Type Typ Min < Default < Max Logarithmic Logaritmisk SR Dependent Audio Ljud Control Kontroll Input Output Toggled Integer Heltal Float Flyttal Yes Ja Ports Portar lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave Click here for a saw-wave. Triangle wave triganelvåg Click here for a triangle-wave. Square wave Fyrkantsvåg Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Sinusvåg Click for a sine-wave. White noise wave Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion Waveform Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close Close VST plugin knob-controller window. nineButtonSelector &Help &Hjälp opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion Volume Volym organicInstrumentView Distortion: Volume: Volym: Randomise Osc %1 waveform: Osc %1 volume: Osc %1 panning: cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description ingen beskrivning Instrument plugins Instrument plugin Filter for importing FL Studio projects into LMMS Filter för att importera FL Studio projekt till LMMS Filter for importing MIDI-files into LMMS Additive Synthesizer for organ-like sounds VST-host for using VST(i)-plugins within LMMS Vibrating string modeler Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins GUS-compatible patch instrument Tuneful things to bang on plugin for using arbitrary LADSPA-effects inside LMMS. Instrument browser Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files Emulation of GameBoy (TM) APU Customizable wavetable synthesizer Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways A native amplifier plugin Carla Rack Instrument 4-oscillator modulatable wavetable synth plugin for waveshaping Boost your bass the fast and simple way Versatile drum synthesizer Simple sampler with various settings for using samples (e.g. drums) in an instrument-track plugin for processing dynamics in a flexible way Carla Patchbay Instrument plugin for using arbitrary VST effects inside LMMS. Graphical spectrum analyzer plugin A NES-like synthesizer projectNotes Project notes Projekt anteckningar Put down your project notes here. Skriv ner dina projekt anteckningar här. Edit Actions Editera händelser &Undo &Ångra Ctrl+Z Ctrl+Z &Redo &Återställ Ctrl+Y Ctrl+Y &Copy &Kopiera Ctrl+C Ctrl+C Cu&t Klipp& ut Ctrl+X Ctrl+X &Paste &Klistra in Ctrl+V Ctrl+V Format Actions &Bold &Fet Ctrl+B Ctrl+B &Italic &Kursiv Ctrl+I Ctrl+I &Underline &Understruken Ctrl+U Ctrl+U &Left &Vänster Ctrl+L Ctrl+L C&enter C&entrera Ctrl+E Ctrl+E &Right &Höger Ctrl+R Ctrl+R &Justify Ctrl+J Ctrl+J &Color... &Färger... renameDialog Rename... Byt namn... setupDialog Setup LMMS Ställ in LMMS General settings BUFFER SIZE Reset to default-value MISC Display volume as dBV Visa volym i dBV LMMS working directory LMMS arbetskatalog VST-plugin directory Artwork directory FL Studio installation directory Performance settings UI effects vs. performance Audio settings Ljudinställningar AUDIO INTERFACE MIDI settings MIDI inställningar MIDI INTERFACE OK Cancel Avbryt Restart LMMS starta om LMMS Please note that most changes won't take effect until you restart LMMS! Frames: %1 Latency: %2 ms Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Choose LMMS working directory Choose your VST-plugin directory Choose artwork-theme directory Choose FL Studio installation directory Choose LADSPA plugin directory Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Enable tooltips Show restart warning after changing settings Compress project files per default HQ-mode for output audio-device STK rawwave directory Choose STK rawwave directory Paths LADSPA plugin paths Default Soundfont File Background artwork Choose default SoundFont Choose background artwork One instrument track window mode Compact track buttons Sync VST plugins to host playback Enable note labels in piano roll Enable waveform display by default Smooth scroll in Song Editor Enable auto save feature Show playback cursor in AudioFileProcessor sf2Instrument Bank Patch Gain Reverb Reverb Roomsize Reverb Damping Reverb Width Reverb Level Chorus Chorus Lines Chorus Level Chorus Speed Chorus Depth sf2InstrumentView Open other SoundFont file Click here to open another SF2 file Choose the patch Gain Apply reverb (if supported) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. Reverb Roomsize: Reverb Damping: Reverb Width: Reverb Level: Apply chorus (if supported) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. Chorus Lines: Chorus Level: Chorus Speed: Chorus Depth: Open SoundFont file SoundFont2 Files (*.sf2) sfxrInstrument Wave Form sidInstrument Cutoff Resonance Filter type Filtertyp Voice 3 off Volume Volym Chip model sidInstrumentView Volume: Volym: Resonance: Cutoff frequency: High-Pass filter Band-Pass filter Low-Pass filter Voice3 Off MOS6581 SID MOS8580 SID Attack: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise Sync Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo Tempo Master volume Huvudvolym Master pitch Project saved Projekt sparad The project %1 is now saved. Projektet %1 är nu sparad. Project NOT saved. Projekt INTE sparat. The project %1 was not saved! Projektet %1 sparades inte! Import file Importera fil untitled namnlös Select file for project-export... Empty project This project is empty so exporting makes no sense. Please put some items into Song Editor first! MIDI sequences FL Studio projects All file types Hydrogen projects Select directory for writing exported tracks... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: Left to Right Vol: Right to Left Vol: Right to Right Vol: stereoMatrixControls Left to Left Left to Right Right to Left Right to Right timeLine Enable/disable auto-scrolling Enable/disable loop-points After stopping go back to begin Efter att ha stoppat gå tillbaka till början After stopping go back to position at which playing was started After stopping keep position Hint Ledtråd Press <Ctrl> to disable magnetic loop points. Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. track Muted Solo trackContentObject Muted trackContentObjectView Current position Aktuell position Hint Ledtråd Press <Ctrl> and drag to make a copy. Current length Aktuell längd Press <Ctrl> for free resizing. %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 to %5:%6) Delete (middle mousebutton) Ta bort (musens mittenknapp) Cut Klipp ut Copy Kopiera Paste Klistra in Mute/unmute (<Ctrl> + middle click) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Actions for this track Mute Clone this track Klona detta spåret Remove this track Ta bort detta spåret Mute this track Solo Clear this track Turn all recording on Turn all recording off vestigeInstrument Loading plugin Laddar plugin Please wait while loading VST-plugin... Vänta medans VST-plugin läses in... Failed loading VST-plugin Misslyckades med att läsa in VST_plugin The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 Detune %1 Fuzziness %1 Length %1 Impulse %1 Octave %1 vibedView Volume: Volym: The 'V' knob sets the volume of the selected string. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pick position: Välj position: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pickup position: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pan: The Pan knob determines the location of the selected string in the stereo field. Detune: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Length: Längd: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Enable waveform Click here to enable/disable waveform. String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Sine wave Sinusvåg Triangle wave triganelvåg Saw wave Square wave Fyrkantsvåg White noise wave User defined wave Smooth Click here to smooth waveform. Normalize Normalisera Click here to normalize waveform. &Help &Hjälp Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output Click to enable voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain Output gain lmms-1.1.3/data/locale/zh.qm000066400000000000000000002133461247673406200156400ustar00rootroot00000000000000LEL~I /y/}FCG'CEįzy\' U`& Y`eUa%bbodbj! l#}1\#}3]2(Qn(R*$*y5*r*0,*04 *0s*0N*0 +++7+s+t +į5f6u9giL9kYL93dN@dP@TtE wG*GtsGHi4HsI;PJ+"J/J2RJ6KCLbM%SMM5NhPWjPW&S}AUrS}CUSUXlSbXTbZT.RNTZHTʴVTʴTxmU`(U`fUj1UjguVbHVbcVbofVh%VV&ViVqW ilW nWWRX&_ZAZoZo[5\L]6 h u`iųpiųiųûszyadtUatba~#Ւ;;ϙ0^(vZu:e |vj TS>07`)eiyyק1_ק3_W3xl/N++it"Rz7"7oė9}9;n"=7j@۴}]COXOX1P0[TxdVz;8Cu]tEɄyKʭiǛ7(|ՙ ծh8 ݊Bl< lbߺoo^CB)]A |Dza3> 0(^A(^,´$,´ .: qRon !r%[9Φq.q0v/v08nC/@$Oif3tBG/GeV|;X *guHA~$}>sssvD#a%c)uI 2Q38J*]:)BW{2BaNbHH>ZI[YJnOXP~P~Wa6Z.T]<kllclh1nlhgxM}" }V5}WŐĩbR$<#W#FrϯKѫҥ66 קAMSקCMք LKBIչvJY1V 0}+(10:^G;:XJw Qq.```%<`%`%\h=jztvrJ w~e/{ 9 NtxP*fu Ru^uuFuuuu56q7%{VI'I>fI[IhzGhzcvhQi٭)=pɣ <oʢ ; n9(z>h0Wh0š~Re|gˤrJ(ET4(F`&Ah1=hfvD@=?D:K#:PC:_;dCZi?C'<UI UIZb*[t~A\X.wmhFZiANz m.x| s/>PG2'2c]d?ETX!AD잂2 잂h)ϭ(R^:G$ϞU-SE-SE--SEe-SE3h/h3he\;-iU8UkUnt^^-bsQc?QjjDnqu0d2v ne%UU4UdyfJdwy9kyQy?8P-\¸8¸]]n+࣓"dY2 ?;  | $ X 3':= 6E 8eu 8ee 8e` 9J 9 GfP ItY۲ I& Mg T8 bL cR w%h w%T x'B 9| /  B1> A3 (N h nZ ?y F# ӗn5 C i l  + U ' Eͪ #- kCH {9e' #C" %Ӵ!a /Ei FyE K\C d,  { U? 1 . .l ·~q * ʧ93 ˔Ȟ 5 J\D Dj N ؋ ہT zB ׾1 ɺ g ]A` I92 ".u $ rDX 3'< 9y~ N Om S'J= STnF [ \ \ m m m s Td- u: K   M N,N N4P VH hi RA 8AV Ƶ82 ӗ` Ӱ% 2l eu Sp@ +ؘ i f * ʓ' "( $&yЎ -#/ -#e -8 0 0 7ÒE ==^ L57 P'j V aCS c.c  c.c c.c& c.c cҎ cҎa ck c d̥# d̥r d̥> t] t Q |`L )% % Y h s H  YD ɈZC  ޖ 鼣֟ ]3l + 5h r (d .˙C 8+ @u" @u @u} W` Zܜ a ao bS# c clM cp cÄ c cK c] fNM l8) p q qK }N_ } _  1] 3^ 7 Zn O Չ9! Չ9 3V ޘrS hfn~Pi34,e0b<)BD,e0Gm0P 7Yad^cgnI}IUdy;Opq-H*?&<[)FS ~y>Pr^`C |[J z;L"?I)CgDEwXҾrw[x*[cX.S7K @>ƳSAi\<html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html>

http://lmms.sourceforge.net

 AboutDialogQsNAbout AboutDialog QsNLMMS About LMMS AboutDialogO\Authors AboutDialogBCopyright (c) 2004-2014, LMMS _Sр(Copyright (c) 2004-2014, LMMS developers AboutDialog_SRMf/N-eN-V T|рe9  TonyChyi {tonychee1989@gmail.com Min Zhang {zm1990s@gmail.com h![ Jeff Bai {jeffbaichina@gmail.comCurrent language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! AboutDialogLMMSLMMS AboutDialogLMMS - NNf/O\f[)LMMS - easy music production for everyone AboutDialogSLicense AboutDialog Translation AboutDialog0rHg, %1 (%2/%3, Qt %4, %5)Version %1 (%2/%3, Qt %4, %5) AboutDialog]LEFTAmplifierControlDialog]Xv Left gain:AmplifierControlDialogPANPANAmplifierControlDialogXvPanning:AmplifierControlDialogSRIGHTAmplifierControlDialogSXv Right gain:AmplifierControlDialogVOLVOLAmplifierControlDialogVolume:AmplifierControlDialog]Xv Left gainAmplifierControlsXvPanningAmplifierControlsSXv Right gainAmplifierControlsVolumeAmplifierControlsXSepCHANNELSAudioAlsa::setupWidgetYDEVICEAudioAlsa::setupWidgete>Y': Amplify:AudioFileProcessorViewYg`bS_SNN*eN pQّ0cw@OQseN b[hF0YsVj!_(looping-mode) wY/~g_p e>Y'P<(amplify-value)NK|{vPh7%Continue sample playback across notesAudioFileProcessorViewyu(_s Disable loopAudioFileProcessorView~p: Endpoint:AudioFileProcessorView\YgpQkdc etN*h7\OS͏l0u(NR6O\_wveHg OYreversed crash.pIf you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.AudioFileProcessorView bS_QvN֑h7Open other sampleAudioFileProcessorViewS͏lh7Reverse sampleAudioFileProcessorViewwYp  Startpoint:AudioFileProcessorViewnkde˔u(Nete>Y'ks0_SN:100% eh7N OSS0dkdNKY N f/e>Y'\1f/Q_1(SYvh7eNN Oe9S)With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)AudioFileProcessorView h7^Sample length:AudioFileProcessorWaveViewJACK[b7z]T/JACK client restarted AudioJackJACKg R])nJACK server down AudioJackjLMMSu1NgNSVNJACKe_c Sf/VN:LMMSvJACKTzT/[v O`bKRec0LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. AudioJacklJACKg RY}P])nN Ng*kc^8T/R LMMSN kc^8]O\ O`O[XO`v]O\q6TT/JACKTLMMS0The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. AudioJackXSepCHANNELSAudioJack::setupWidget [b7zT y CLIENT-NAMEAudioJack::setupWidgetXSepCHANNELSAudioOss::setupWidgetYDEVICEAudioOss::setupWidgetTzBACKENDAudioPortAudio::setupWidgetYDEVICEAudioPortAudio::setupWidgetXSepCHANNELSAudioPulseAudio::setupWidgetYDEVICEAudioPulseAudio::setupWidgetYDEVICEAudioSdl::setupWidgetY R6P<%1%2 &C &Copy value (%1%2)AutomatableModel|4P<%1%2 &P &Paste value (%1%2)AutomatableModeln%1%2 &R  &Reset (%1%2)AutomatableModelcR0cR6Vh...Connect to controller...AutomatableModel cR0%1Connected to %1AutomatableModel cR0cR6VhConnected to controllerAutomatableModelc...Edit connection...AutomatableModelkLfQh\@RcR6Edit song-global automationAutomatableModelR db@g ]cvcR6VhRemove all linked controlsAutomatableModelR dcRemove connectionAutomatableModelR dkLfQh\@RcR6Remove song-global automationAutomatableModelRcR6Vh - %1Automation Editor - %1AutomationEditorRcR6Vh - lg rGkAutomation Editor - no patternAutomationEditorpQّT/u(~R6j!_0W(kdj!_N O`SNXRbyRSUN*P<0 Y'ReN ؋Ou(kdj!_0O`N_SNc .vN v Shift+D om;kdj!_0Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.AutomationEditor^pQT/u(ddj!_0kdj!_N O`SNddSUN*P<0O`SNc .vN v 'Shift+E' T/u(kdj!_0Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.AutomationEditor\pQّ bvP<\OY R6R0RjRg0O`SNOu(|4c \[N|4R0NaW0e [XN:NarGk0Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor\pQّ bvP<\ORjRR0RjRg0O`SNOu(|4c \[N|4R0NaW0e [XN:NarGk0Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.AutomationEditor4pQّde>rGk0e_g u( rGkOR_sde>0Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.AutomationEditorpQّP\kbde>rGk0>Click here if you want to stop playing of the current pattern.AutomationEditorY R6 [P< (Ctrl+C)Copy selected values (Ctrl+C)AutomationEditorRjR [P< (Ctrl+X)Cut selected values (Ctrl+X)AutomationEditor~R6j!_ (Shift+D)Draw mode (Shift+D)AutomationEditorddj!_ (Shift+E)Erase mode (Shift+E)AutomationEditor NRj4g|4P< (Ctrl+V)$Paste values from clipboard (Ctrl+V)AutomationEditorde>/fP\_SRMrGkzzh< "Play/pause current pattern (Space)AutomationEditorP\kb_SRMrGkzzh< 'Stop playing of current pattern (Space)AutomationEditorP<]Y R6 Values copiedAutomationEditorc OO<Ctrl>bRcR6Vh$Drag a control while pressing AutomationPatternj!W]cR0kdrGk0+Model is already connected to this pattern.AutomationPattern %1N*c%1 ConnectionsAutomationPatternViewOe9T y Change nameAutomationPatternViewndClearAutomationPatternViewe_ %1 vcDisconnect "%1"AutomationPatternView:W(RVh Automation editor N-bS_Open in Automation editorAutomationPatternViewnT y Reset nameAutomationPatternViewn/nd_UR6Set/clear recordAutomationPatternViewSQW(RVhN-bS_kdrGk6double-click to open this pattern in automation editorAutomationPatternView RcR6hSAutomation trackAutomationTrackXvGAINBassBoosterControlDialogXvGain:BassBoosterControlDialogksRATIOBassBoosterControlDialogksRatio:BassBoosterControlDialogs FrequencyBassBoosterControlsXvGainBassBoosterControlsksRatioBassBoosterControls cR6Vh%1 Controller %1 ControllerRhmK Auto DetectControllerConnectionDialogSCHANNELControllerConnectionDialogcR6Vh CONTROLLERControllerConnectionDialogSmCancelControllerConnectionDialogcnConnection SettingsControllerConnectionDialog hmKR0s0Cycle Detected.ControllerConnectionDialogQeS Input channelControllerConnectionDialog QecR6VhInput controllerControllerConnectionDialogLMMSLMMSControllerConnectionDialogf \QepMAPPING FUNCTIONControllerConnectionDialogMIDIcR6VhMIDI CONTROLLERControllerConnectionDialog(u(gece6 MIDI NNvMIDI Y(MIDI-devices to receive MIDI-events fromControllerConnectionDialogxn[OKControllerConnectionDialog u(b7cR6VhUSER CONTROLLERControllerConnectionDialogXRAddControllerRackView R dRMxnConfirm DeleteControllerRackView8xn[R dTkdcR6VhNYNcr`0kddO\N Sd0iConfirm delete? There are existing connection(s) associted with this controller. There is no way to undo.ControllerRackView cR6Vhg:gController RackControllerRackView ^.R&H &HelpControllerViewR dN*cN&R &Remove this pluginControllerView,cR6VhSNRcR6e˔ nWWTQvNcNvP<0QControllers are able to automate the value of a knob, slider, and other controls.ControllerViewcR6VhControlsControllerViewQeN*cR6VhveT y&Enter the new name for this controllerControllerView T}T cR6VhRename controllerControllerViewpQT/u(/yu(nVh 1 Click to enable/disable Filter 1DualFilterControlDialogpQT/u(/yu(nVh 2 Click to enable/disable Filter 2DualFilterControlDialog]T/u(nVh 1Filter 1 enabledDualFilterControlDialog]T/u(nVh 2Filter 2 enabledDualFilterControlDialogQhAllpassDualFilterControls ^& csg BandPass csgDualFilterControls^& czpg BandPass czpgDualFilterControlsnVh1 ]T/u(Filter 1 enabledDualFilterControlsnVh 1 |{W Filter 1 typeDualFilterControls]T/u(nVh 2Filter 2 enabledDualFilterControlsnVh 1 |{W {2 ?} Filter 2 typeDualFilterControlsؐHiPassDualFilterControlsONLowPassDualFilterControlsMoogMoogDualFilterControls QSnlVhNotchDualFilterControlsNXydnVhVocal Formant FilterDualFilterControlspQDecayEffect T/u(eHgVhEffect enabledEffectPGateEffect ^r/nmT Wet/Dry mixEffect T/u(eHgVhEffects enabled EffectChain XReHgVh Add effectEffectRackVieweHgVh EFFECTS CHAINEffectRackView XReHgVh Add effectEffectSelectDialogcNcϏPlugin descriptionEffectSelectDialog ^.R(&H)&Help EffectViewydkdcN (&R)&Remove this plugin EffectViewcR6Controls EffectViewpQDECAY EffectViewPGATE EffectViewPGate: EffectViewTN y (&d) Move &down EffectViewTN y (&u)Move &up EffectView_/QsOn/Off EffectVieweTime: EffectViewbS_bQseHgToggles the effect on or off. EffectViewW/DW/D EffectViewbSXAttackEnvelopeAndLfoParameterspQDecayEnvelopeAndLfoParametersOcHoldEnvelopeAndLfoParametersLFO bSXattack  LFO AttackEnvelopeAndLfoParameters LFO R6LFO ModulationEnvelopeAndLfoParametersLFO ^ LFO PredelayEnvelopeAndLfoParametersLFO l_b_brLFO Wave ShapeEnvelopeAndLfoParameters LFO ^ LFO speedEnvelopeAndLfoParametersR6 ModulationEnvelopeAndLfoParameters^PredelayEnvelopeAndLfoParameterse>ReleaseEnvelopeAndLfoParametersc~SustainEnvelopeAndLfoParametersbSXAttack:EnvelopeAndLfoViewpQDecay:EnvelopeAndLfoViewcy:HintEnvelopeAndLfoView128 KBit/s 128 KBit/sExportProjectDialog 16 OMet_b16 Bit IntegerExportProjectDialog160 KBit/s 160 KBit/sExportProjectDialog192 KBit/s 192 KBit/sExportProjectDialog192000 Hz 192000 HzExportProjectDialog 1x (e) 1x (None)ExportProjectDialog256 KBit/s 256 KBit/sExportProjectDialog2x2xExportProjectDialog32 OMmnpW 32 Bit FloatExportProjectDialog320 KBit/s 320 KBit/sExportProjectDialog44100 Hz44100 HzExportProjectDialog48000 Hz48000 HzExportProjectDialog4x4xExportProjectDialog64 KBit/s 64 KBit/sExportProjectDialog88200 Hz88200 HzExportProjectDialog8x8xExportProjectDialog96000 Hz96000 HzExportProjectDialogxsBitrate:ExportProjectDialogSmCancelExportProjectDialogOMmDepth:ExportProjectDialog$[QN:Vsloopyd~\>vY #Export as loop (remove end silence)ExportProjectDialog[Q]z Export projectExportProjectDialog eNh<_ File format:ExportProjectDialogQOutputExportProjectDialog*laN bvSepN N[u(Nb@g eNh<_0LPlease note that not all of the parameters above apply for all file formats.ExportProjectDialog(ϋnQuality settingsExportProjectDialogh7s Samplerate:ExportProjectDialog_YStartExportProjectDialogmOVhBrowser FileBrowser---oN^&eN------ Factory files ---FileBrowserTreeWidget R}h7N-Loading sampleFileBrowserTreeWidget"W(eNPVhhS/B+B VhN-bS_'Open in new instrument-track/B+B EditorFileBrowserTreeWidgetW(eNPVhhS/kLfVhN-bS_(Open in new instrument-track/Song-EditorFileBrowserTreeWidgetz P R}h7N-...*Please wait, loading sample for preview...FileBrowserTreeWidgetSѐR0m;vNPVhhSSend to active instrument-trackFileBrowserTreeWidget FX %1FX %1FxMixerN;cMasterFxMixerN:kdeHgSQeNN*evT y&Enter the new name for this FX channel FxMixerView eHgmTVhFX-Mixer FxMixerViewT}T eHgSRename FX channel FxMixerViewFX pQVh %1 FX Fader %1FxMixerView::FxChannelViewYMuteFxMixerView::FxChannelViewYkdeHgSMute this FX channelFxMixerView::FxChannelView$NΐS %1 SѐR0S %2 v,Amount to send from channel %1 to channel %2FxRouteTN DownInstrumentFunctionArpeggioN TN  Down and upInstrumentFunctionArpeggiou1FreeInstrumentFunctionArpeggiog:RandomInstrumentFunctionArpeggioc^SortInstrumentFunctionArpeggioT keSyncInstrumentFunctionArpeggioTN UpInstrumentFunctionArpeggioN TN  Up and downInstrumentFunctionArpeggioT_&Chord:InstrumentFunctionArpeggioVieweT Direction:InstrumentFunctionArpeggioViewPGATEInstrumentFunctionArpeggioViewj!_Mode:InstrumentFunctionArpeggioViewVRANGEInstrumentFunctionArpeggioVieweTIMEInstrumentFunctionArpeggioViewkymsInstrumentFunctionArpeggioView1111InstrumentFunctionNoteStacking11b911b9InstrumentFunctionNoteStacking1313InstrumentFunctionNoteStacking13#913#9InstrumentFunctionNoteStacking 13b5b913b5b9InstrumentFunctionNoteStacking13b913b9InstrumentFunctionNoteStacking55InstrumentFunctionNoteStacking66InstrumentFunctionNoteStacking 6add96add9InstrumentFunctionNoteStacking 6sus46sus4InstrumentFunctionNoteStacking77InstrumentFunctionNoteStacking7#117#11InstrumentFunctionNoteStacking7#57#5InstrumentFunctionNoteStacking 7#5#97#5#9InstrumentFunctionNoteStacking 7#5b97#5b9InstrumentFunctionNoteStacking7#97#9InstrumentFunctionNoteStacking 7add117add11InstrumentFunctionNoteStacking 7add137add13InstrumentFunctionNoteStacking7b57b5InstrumentFunctionNoteStacking 7b5b97b5b9InstrumentFunctionNoteStacking7b97b9InstrumentFunctionNoteStacking 7sus47sus4InstrumentFunctionNoteStacking99InstrumentFunctionNoteStacking9#119#11InstrumentFunctionNoteStacking9#59#5InstrumentFunctionNoteStacking9b139b13InstrumentFunctionNoteStacking9b59b5InstrumentFunctionNoteStacking 9sus49sus4InstrumentFunctionNoteStackingAeolianAeolianInstrumentFunctionNoteStacking ArabicArabicInstrumentFunctionNoteStacking BluesBluesInstrumentFunctionNoteStackingChord range Chord rangeInstrumentFunctionNoteStackingChord type Chord typeInstrumentFunctionNoteStacking ChordsChordsInstrumentFunctionNoteStackingChromatic ChromaticInstrumentFunctionNoteStackingDiminished DiminishedInstrumentFunctionNoteStackingDominant bebopDominant bebopInstrumentFunctionNoteStacking DorianDorianInstrumentFunctionNoteStackingEnigmatic EnigmaticInstrumentFunctionNoteStackingHalf-Whole DiminishedInstrumentFunctionNoteStackingHarmonic minorHarmonic minorInstrumentFunctionNoteStackingHungarian minorHungarian minorInstrumentFunctionNoteStackingJap in sen Jap in senInstrumentFunctionNoteStackingLocrianLocrianInstrumentFunctionNoteStacking LydianLydianInstrumentFunctionNoteStacking Maj11Maj11InstrumentFunctionNoteStacking Maj13Maj13InstrumentFunctionNoteStackingMaj7Maj7InstrumentFunctionNoteStackingMaj7#11Maj7#11InstrumentFunctionNoteStacking Maj7#5Maj7#5InstrumentFunctionNoteStackingMaj7add13 Maj7add13InstrumentFunctionNoteStacking Maj7b5Maj7b5InstrumentFunctionNoteStackingMaj9Maj9InstrumentFunctionNoteStackingMaj9#11Maj9#11InstrumentFunctionNoteStacking Maj9#5Maj9#5InstrumentFunctionNoteStackingMaj9sus4Maj9sus4InstrumentFunctionNoteStacking Majb5Majb5InstrumentFunctionNoteStacking MajorMajorInstrumentFunctionNoteStackingMajor bebop Major bebopInstrumentFunctionNoteStacking Major pentatonicMajor pentatonicInstrumentFunctionNoteStackingMelodic minor Melodic minorInstrumentFunctionNoteStacking MinorMinorInstrumentFunctionNoteStacking Minor pentatonicMinor pentatonicInstrumentFunctionNoteStackingMixolydian MixolydianInstrumentFunctionNoteStackingNeopolitan NeopolitanInstrumentFunctionNoteStacking Neopolitan minorNeopolitan minorInstrumentFunctionNoteStacking PhrygolydianInstrumentFunctionNoteStacking Whole toneInstrumentFunctionNoteStackingadd9add9InstrumentFunctionNoteStackingaugaugInstrumentFunctionNoteStackingaugsus4augsus4InstrumentFunctionNoteStackingm-Maj11m-Maj11InstrumentFunctionNoteStackingm-Maj13m-Maj13InstrumentFunctionNoteStacking m-Maj7m-Maj7InstrumentFunctionNoteStackingm-Maj7add11 m-Maj7add11InstrumentFunctionNoteStackingm-Maj7add13 m-Maj7add13InstrumentFunctionNoteStackingm11m11InstrumentFunctionNoteStackingm13m13InstrumentFunctionNoteStackingm6m6InstrumentFunctionNoteStacking m6add9m6add9InstrumentFunctionNoteStackingm7m7InstrumentFunctionNoteStackingm7add11m7add11InstrumentFunctionNoteStackingm7add13m7add13InstrumentFunctionNoteStackingm7b5m7b5InstrumentFunctionNoteStackingm7b9m7b9InstrumentFunctionNoteStackingm9m9InstrumentFunctionNoteStackingm9-Maj7m9-Maj7InstrumentFunctionNoteStackingm9b5m9b5InstrumentFunctionNoteStacking madd9madd9InstrumentFunctionNoteStacking minb5minb5InstrumentFunctionNoteStacking minorminorInstrumentFunctionNoteStacking octaveoctaveInstrumentFunctionNoteStackingsus2sus2InstrumentFunctionNoteStackingsus4sus4InstrumentFunctionNoteStackingtritriInstrumentFunctionNoteStacking T_&V Chord range:"InstrumentFunctionNoteStackingViewT_&Chord:"InstrumentFunctionNoteStackingViewVRANGE"InstrumentFunctionNoteStackingViewSCHANNELInstrumentMidiIOViewT/u(MIDIQeENABLE MIDI INPUTInstrumentMidiIOViewT/u(MIDIQENABLE MIDI OUTPUTInstrumentMidiIOView{&NOTEInstrumentMidiIOViewNPVhPROGRAMInstrumentMidiIOViewR^VELOCITYInstrumentMidiIOViewQhAllpassInstrumentSoundShaping ^& csg BandPass csgInstrumentSoundShaping^& czpg BandPass czpgInstrumentSoundShapingRdCUTOFFInstrumentSoundShapingRdsCutoff frequencyInstrumentSoundShaping nVh|{W Filter typeInstrumentSoundShapingؐHiPassInstrumentSoundShapingONLowPassInstrumentSoundShapingMoogMoogInstrumentSoundShaping QSnlVhNotchInstrumentSoundShapingQq# ResonanceInstrumentSoundShapingVOLUMEInstrumentSoundShapingNXydnVhVocal Formant FilterInstrumentSoundShapingVolumeInstrumentSoundShapingWg, Base noteInstrumentTracknDefault presetInstrumentTrackeHgS FX channelInstrumentTrackXvPanningInstrumentTrackPitchInstrumentTrackW߃V Pitch rangeInstrumentTrackVolumeInstrumentTrack Ou(kde˔SN勾n_e>SvpQّf>y:b]z lz0W(kdzSN-O`SNQN ]z vl0hClick here to show or hide the project notes window. In this window you can put down your project notes. MainWindowMneNConfiguration file MainWindowN O[XMneNCould not save config-file MainWindowJN O[XMneN%1 O`Slg QgCP0 xnOO`SNQQeN*eN^v͋0Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. MainWindowe^]z Create new project MainWindowNj!rHe^]z  Create new project from template MainWindowlLMMSsW(lg Su(v^.R http://lmms.sf.net/wiki NLMMSvvQsehc0lCurrently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. MainWindow[Qh&E ...E&xport tracks... MainWindow[Q&E ... E&xport... MainWindow*gMneNSuL%1:%2:%3 8Error while parsing configuration file at line %1:%2: %3 MainWindow [Q_SRM]z Export current project MainWindow^.RHelp MainWindow ^.RN Su(Help not available MainWindow [Qe... Import... MainWindowy:/ρRcR6VhShow/hide Automation Editor MainWindowf>y:/ςb+e_VhShow/hide Beat+Bassline Editor MainWindowf>y:/mVhShow/hide FX Mixer MainWindowf>y:/ϔt4zShow/hide Piano-Roll MainWindowf>y:/kLfVhShow/hide Song-Editor MainWindowf>y:/cR6Vhg:gShow/hide controller rack MainWindowf>y:/]z lShow/hide project notes MainWindowZLMMS]O\v_U%1N [XW( sW(e^NN*TO`SNz TW(  -> n N-fe9kdn0uThe LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. MainWindow(kd]z N k!O[XTg NOe9 O``O[XTOThe current project was modified since last saving. Do you want to save it now? MainWindowdUndo MainWindowg*hUntitled MainWindow rHg, %1 Version %1 MainWindow f/NNH What's this? MainWindow]O\v_UWorking directory MainWindowYDEVICEMidiAlsaRaw::setupWidgetYDEVICEMidiAlsaSeq::setupWidgetYDEVICEMidiOss::setupWidgetQeS Input channelMidiPort QecR6VhInput controllerMidiPortQSOutput channelMidiPort QcR6VhOutput controllerMidiPortN; Master volume NesInstrument6pQّbS_SNN*reN0_sTnN O͋0LClick here to open another patch-file. Loop and Tune settings are not reset. PatmanViewJW(ّO`SN_Qs_sj!_0YgT/u( PatMan OOu(eNN-v_sO`o0jHere you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. PatmanViewLّSN_Qsj!_0YgT/u( PatMan O\h7bT{&Nh7vs0iHere you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. PatmanView_sLoop PatmanView_sj!_ Loop mode PatmanView g* beNNo file selected PatmanView bS_QvN֗rOpen other patch PatmanView bS_reNOpen patch file PatmanViewreN (*.pat)Patch-Files (*.pat) PatmanViewTune PatmanViewj!_ Tune mode PatmanViewmR6 Add steps PatternViewOe9T y Change name PatternView ndb@g {&Clear all notes PatternViewW(t4zN-bS_Open in piano-roll PatternViewyd6 Remove steps PatternViewnT y Reset name PatternView6SQW(t4zN-bS_kdrGk Ou( hnяnnkd6vWdouble-click to open this pattern in piano-roll use mouse wheel to set volume of a step PatternViewbSXAttack:!PeakControllerEffectControlDialogbSXAttackPeakControllerEffectControlse>ReleasePeakControllerEffectControlsY R6 [{& (Ctrl+C)Copy selected notes (Ctrl+C) PianoRollRjR [{& (Ctrl+X)Cut selected notes (Ctrl+X) PianoRoll~R6j!_ (Shift+D)Draw mode (Shift+D) PianoRollddj!_ (Shift+E)Erase mode (Shift+E) PianoRoll N NN*{& Last note PianoRoll {&XvPOy Note Panning PianoRoll{& Note Volume PianoRollXv%1% PO]Panning: %1% left PianoRollXv%1% POSPanning: %1% right PianoRoll Xv\EN-Panning: center PianoRoll"NRj4g|4{& (Ctrl+V)#Paste notes from clipboard (Ctrl+V) PianoRollt4z - %1Piano-Roll - %1 PianoRollt4z - lg rGkPiano-Roll - no pattern PianoRollde>/fP\_SRMrGkzzh< "Play/pause current pattern (Space) PianoRoll&QeNN*NN %1 T %2 vP<+Please enter a new value between %1 and %2: PianoRollSQbS_rGk/Please open a pattern by double-clicking on it! PianoRollDN MIDI Y/St4(channel-piano) _UR6{&+Record notes from MIDI-device/channel-piano PianoRoll bj!_ Shift+S Select mode (Shift+S) PianoRollP\kb_SRMrGkzzh< 'Stop playing of current pattern (Space) PianoRoll Smhb@g  Unmark all PianoRoll %1% Volume: %1% PianoRollWg, Base note PianoView}QecNeSuError while loading pluginPlugin}QecN %1 Y1%Failed to load plugin "%1"!Plugin g*b~R0cNPlugin not foundPlugin,cN %1 elb~R0belՏ}Qe SV%2AThe plugin "%1" wasn't found or could not be loaded! Reason: "%2"Plugin"S)v OGG eN(*.ogg)Compressed OGG-File (*.ogg)ProjectRendererWAV-eN (*.wav)WAV-File (*.wav)ProjectRendererAAQObjectA#A#QObjectAbAbQObjectBBQObjectBbBbQObjectCCQObjectC#C#QObjectDDQObjectD#D#QObjectDbDbQObjectEEQObjectEbEbQObjectF#F#QObjectFbFbQObjectGGQObjectG#G#QObjectGbGbQObject QeS Channels In: QWidget QSChannels Out: QWidgetrHgC Copyright: QWidgeteNFile: QWidget eN%1File: %1QWidgetR6O\Maker: QWidgetT yName: QWidgetT&NoQWidgetf/T&e/c[eReal Time Capable: QWidget [eRequires Real Time: QWidgetf/YesQWidget,AIFF-eN (*.aif *.aiff)AIFF-Files (*.aif *.aiff) SampleBufferAU-eN (*.au)AU-Files (*.au) SampleBufferb@g eN (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)MAll Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleBuffer&DrumSynth-eN (*.ds)DrumSynth-Files (*.ds) SampleBuffer FLAC-eN (*.flac)FLAC-Files (*.flac) SampleBufferOGG-eN (*.ogg)OGG-Files (*.ogg) SampleBuffer bS_eNOpen audio file SampleBufferRAW-eN (*.raw)RAW-Files (*.raw) SampleBuffer SPEEX-eN (*.spx)SPEEX-Files (*.spx) SampleBufferVOC-eN (*.voc)VOC-Files (*.voc) SampleBuffer Wavel_beN (*.wav)Wave-Files (*.wav) SampleBufferY R6Copy SampleTCOViewRjRCut SampleTCOViewR d ( hN-.)Delete (middle mousebutton) SampleTCOView.Y/SmY (<Ctrl> + hN-.)#Mute/unmute ( + middle click) SampleTCOView|4Paste SampleTCOViewn/nd_UR6Set/clear record SampleTCOView SQ bh7double-click to select sample SampleTCOViewh7hS Sample track SampleTrackVolume SampleTrack SChannel volume:SampleTrackViewhS Track volumeSampleTrackViewVOLVOLSampleTrackViewmRRShSAdd automation-track SongEditormRb/ON~Add beat/bassline SongEditor mRh7hSAdd sample-track SongEditorNpQّ[etde>kLf0\N~rkLfh_Yde>0W(de>vT eSN[[ۈLyR0Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. SongEditor0pQّP\kbde> kLfOMnhOR0kLfv_Y40uClick here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. SongEditorZelbS_ %1 QQeepcn0blg gCPOe9kdeN0xnO`bg [kdeNvQgCP q6T͋0Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. SongEditor elbS_eNCould not open file SongEditorRelbS_ %1 0blg gCPkdeN0 xnO`bg [kdeNvgCP q6T͋0Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. SongEditor elQQeeNCould not write file SongEditor~R6j!_ Draw mode SongEditorj!_ [TyR Edit mode (select and move) SongEditoreN Error in file SongEditor ؍(j!_High quality mode SongEditorN; Master pitch SongEditorN; Master volume SongEditorde>kLfzzh< Play song (Space) SongEditorNΗ󘑋Y_UR6h7g, Record samples from Audio-device SongEditor(W(de>kLfbBBhSeNΗ󘑋Y_UQeh7g,?Record samples from Audio-device while playing song or BB track SongEditor kLfVh Song-Editor SongEditorP\kbkLfzzh< Stop song (Space) SongEditor YO/BPM TEMPO/BPM SongEditorYOTempo SongEditor&eN %1 O_SRMb/ON~0_S~g_eb/ON~OR_sde>0qClick here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.bbEditor"pQّP\kbdS_SRMb/ON~04Click here to stop playing of current beat/bassline.bbEditor"de>/fP\_SRMb/ON~zzh< (Play/pause current beat/bassline (Space)bbEditoryd6 Remove stepsbbEditor P\kbde>_SRMb/ON~(zzh<).Stop playback of current beat/bassline (Space)bbEditore9Sؘr Change color bbTCOViewOe9T y Change name bbTCOViewW(b+ON~VhN-bS_Open in Beat+Bassline-Editor bbTCOViewnrReset color to default bbTCOViewnT y Reset name bbTCOViewb/ON~ %1Beat/Bassline %1bbTrack %1 vRog, Clone of %1bbTrackh7^ Samplelength bitInvaderpQّ^snl_b0Click here to smooth waveform.bitInvaderViewhQS NormalizebitInvaderViewh7^ Sample LengthbitInvaderView/lSaw wavebitInvaderView^snSmoothbitInvaderViewel Square wavebitInvaderViewu(b7[NIl_bUser defined wavebitInvaderViewv}VjWhite noise wavebitInvaderViewQeXv Input gaindynProcControlsQXv Output gaindynProcControls elbS_eNCould not open fileexportProjectDialogXelbS_eN %1 QQeepcn0 xnOO`bg [eNNS[XPeNvv_UvQgCP q6T͋Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again!exportProjectDialogErrorexportProjectDialog0[b~eNxYeQ0Ou(SYNy͏Qh<_0\Error while determining file-encoder device. Please try to choose a different output format.exportProjectDialog[QyvR0 %1Export project to %1exportProjectDialogn2gN-%1%Rendering: %1%exportProjectDialog*QeNN*NN %1 T %2 NKvP<+Please enter a new value between %1 and %2:faderV_bGraph graphModelR^ClickkickerInstrument~g_s End frequencykickerInstrumentR0TN*{&~g_ End to notekickerInstrument S~~P>e^Envelope SlopekickerInstrument sP>e^Frequency SlopekickerInstrumentXvGainkickerInstrument^LengthkickerInstrumentVjNoisekickerInstrumentwY˘sStart frequencykickerInstrumentNTN*{&_YStart from notekickerInstrumentR^Click:kickerInstrumentView ~g_Y1w^Distortion End:kickerInstrumentView wYY1w^Distortion Start:kickerInstrumentView ~g_sEnd frequency:kickerInstrumentView S~ܕ^Envelope Length:kickerInstrumentViewS~~P>e^Envelope Slope:kickerInstrumentView sP>e^Frequency Slope:kickerInstrumentViewXvGain:kickerInstrumentViewVjNoise:kickerInstrumentView wY˘sStart frequency:kickerInstrumentView ^.R&H &HelpknobQeNN%1T%2NKvP<+Please enter a new value between %1 and %2:knob8QeNN96.0 dBV T 6.0 dBVNKvP<7Please enter a new value between -96.0 dBV and 6.0 dBV:knobRg]QwAnalysis ToolsladspaBrowserView Su(eHgVhAvailable EffectsladspaBrowserViewg*w Don't knowladspaBrowserViewNPVhcN InstrumentsladspaBrowserView|{WType:ladspaBrowserView N Su(eHgVhUnavailable EffectsladspaBrowserViewcϏ DescriptionladspaDescriptioncNPluginsladspaDescriptionQeInputladspaPortDialogQOutputladspaPortDialogf/YesladspaPortDialogY1w Distortion lb302Synthl_bWaveform lb302SynthpQDecay:lb302SynthView/lSaw wavelb302SynthViewel Square wavelb302SynthViewv}VjWhite noise wavelb302SynthViewY1w Distortion lb303Synthl_bWaveform lb303SynthpQDecay:lb303SynthView Qs  Close manageVSTEffectView Qs  Close manageVestigeInstrumentViewY1w DistortionorganicInstrumentVolumeorganicInstrumentY1w Distortion:organicInstrumentViewVolume:organicInstrumentViewR centscentsorganicInstrumentViewONBasspapuInstrumentSXSQu5^sRight Output levelpapuInstrumentONBasspapuInstrumentViewS[R6vlhTbVh"Customizable wavetable synthesizer pluginBrowser NPVhmOVhInstrument browser pluginBrowserNPVhcNInstrument plugins pluginBrowser RQ][v LADSPA cNList installed LADSPA plugins pluginBrowserW(]z N-Ou(SoundFontPlayer for SoundFont files pluginBrowserLMMSvVST(i)cN[N;-VST-host for using VST(i)-plugins within LMMS pluginBrowserlg cϏno description pluginBrowser R|&B &Bold projectNotesr&C ... &Color... projectNotes Y R6&C &Copy projectNotes eOS&I &Italic projectNotes SP&J &Justify projectNotes][P&L &Left projectNotes |4&P &Paste projectNotes PZ&R &Redo projectNotesS[P&R &Right projectNotesN R~&U  &Underline projectNotes d&U)&Undo projectNotes \EN-&E C&enter projectNotes Ctrl+BCtrl+B projectNotes Ctrl+CCtrl+C projectNotes Ctrl+ECtrl+E projectNotes Ctrl+ICtrl+I projectNotes Ctrl+JCtrl+J projectNotes Ctrl+LCtrl+L projectNotes Ctrl+RCtrl+R projectNotes Ctrl+UCtrl+U projectNotes Ctrl+VCtrl+V projectNotes Ctrl+XCtrl+X projectNotes Ctrl+YCtrl+Y projectNotes Ctrl+ZCtrl+Z projectNotes RjR&T Cu&t projectNotesR Edit Actions projectNotesh<_RFormat Actions projectNotes]z l Project notes projectNotesW(ّQN O`v]z l0!Put down your project notes here. projectNotes T}T ... Rename... renameDialogcSAUDIO INTERFACE setupDialogcVv_UArtwork directory setupDialog󘑋nAudio settings setupDialogQY'\ BUFFER SIZE setupDialogfoVrGBackground artwork setupDialogSmCancel setupDialog bFL Studio[v_U'Choose FL Studio installation directory setupDialog bLADSPAcNv_UChoose LADSPA plugin directory setupDialog bLMMS]O\v_UChoose LMMS working directory setupDialog$ b STK rawwave eNY9Choose STK rawwave directory setupDialog bcVv_UChoose artwork-theme directory setupDialog bfoVrGChoose background artwork setupDialog b؋SoundFontChoose default SoundFont setupDialog bVSTcNv_U Choose your VST-plugin directory setupDialog}'QShSVhCompact track buttons setupDialog؋S)yveN"Compress project files per default setupDialog؋SoundFonteNDefault Soundfont File setupDialogf>y:N:dBVDisplay volume as dBV  setupDialogT/u(RO[XREnable auto save feature setupDialogW(t4zN-f>y:S Enable note labels in piano roll setupDialog T/u(]Qwcy:Enable tooltips setupDialog؋T/u(l_bV"Enable waveform display by default setupDialogFL Studio[v_U FL Studio installation directory setupDialog ^'ep: %1 ^: %2 kyFrames: %1 Latency: %2 ms setupDialog^8ċnGeneral settings setupDialogLADSPAcNv_ULADSPA plugin paths setupDialogLMMS]O\v_ULMMS working directory setupDialog MIDIcSMIDI INTERFACE setupDialog MIDIn MIDI settings setupDialoggByMISC setupDialogxn[OK setupDialog_Paths setupDialog`'nPerformance settings setupDialog(la_YnT/LMMSbMSueHGPlease note that most changes won't take effect until you restart LMMS! setupDialog nN:؋P<Reset to default-value setupDialog T/LMMS Restart LMMS setupDialogSTK rawwave v_USTK rawwave directory setupDialog nLMMS Setup LMMS setupDialog8W( AudioFileProcessor N-f>y:Ve>QIh*Show playback cursor in AudioFileProcessor setupDialogW(e9S؋nTf>y:T/fTJ,Show restart warning after changing settings setupDialogkLfVhN-T/u(^snnRSmooth scroll in Song Editor setupDialogT ke VST cNTN;g:Ve>!Sync VST plugins to host playback setupDialoguLbryeH vs `'UI effects vs. performance setupDialogVSTcNv_UVST-plugin directory setupDialog^Bank sf2InstrumentTU1Chorus sf2InstrumentTU1m^ Chorus Depth sf2InstrumentTU1u5^s Chorus Level sf2InstrumentTU1^ Chorus Speed sf2InstrumentXvGain sf2InstrumentmTReverb sf2InstrumentmT͖;\<Reverb Damping sf2InstrumentmT~R+ Reverb Level sf2Instrument mTzzY'\Reverb Roomsize sf2InstrumentmT[^ Reverb Width sf2Instrument^u(TU1 (Yge/c)Apply chorus (if supported)sf2InstrumentView^u(mTYge/c Apply reverb (if supported)sf2InstrumentView b_Choose the patchsf2InstrumentView TU1m^ Chorus Depth:sf2InstrumentView TU1^ Chorus Speed:sf2InstrumentViewpQkdYbS_SNN*SF2eN#Click here to open another SF2 filesf2InstrumentViewXvGainsf2InstrumentViewbS_SoundFonteNOpen SoundFont filesf2InstrumentViewbS_QvNSoundFonteNOpen other SoundFont filesf2InstrumentView mT͖;\<Reverb Damping:sf2InstrumentView mT~R+ Reverb Level:sf2InstrumentViewmTzzY'\Reverb Roomsize:sf2InstrumentView mT[^ Reverb Width:sf2InstrumentView0SoundFont2 Files (*.sf2)SoundFont2 Files (*.sf2)sf2InstrumentViewkdc OT/u(TU1eHgVh0uThis button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.sf2InstrumentViewDkdc OT/u(mTeHgVh0SNR6O\Q_wveHg OFN[e/cveNg eH0pThis button enables the reverb effect. This is useful for cool effects, but only works on files that support it.sf2InstrumentViewl_b Wave FormsfxrInstrumentRdCutoff sidInstrument nVh|{W Filter type sidInstrumentQq# Resonance sidInstrumentVolume sidInstrumentbSXAttack:sidInstrumentView ^&nlVhBand-Pass filter sidInstrumentViewpQDecay:sidInstrumentView ؐnlVhHigh-Pass filter sidInstrumentView ONnlVhLow-Pass filter sidInstrumentViewVjNoisesidInstrumentViewT keSyncsidInstrumentViewVolume:sidInstrumentViewb@g |{WAll file typessongzz]z  Empty projectsongFL Studio]z FL Studio projectssongHydrogen]z Hydrogen projectssong[QeeN Import filesongMIDI^VhMIDI sequencessongN; Master pitchsongN; Master volumesong]z lg O[X0Project NOT saved.song ]z ]O[X Project savedsong bQQe[Qhvv_U.../Select directory for writing exported tracks...songN:]z [Q beN...!Select file for project-export...songYOTemposong]z %1]O[X0The project %1 is now saved.song]z %1lg O[XThe project %1 was not saved!songFN*]z f/zzvb@N\1{[QN_lg aNI W(kLfVhN-RQeNpXT'`This project is empty so exporting makes no sense. Please put some items into Song Editor first!songg*huntitledsongN]R0]Left to Left Vol:stereoMatrixControlDialogN]R0SLeft to Right Vol:stereoMatrixControlDialogNSR0]Right to Left Vol:stereoMatrixControlDialogNSR0SRight to Right Vol:stereoMatrixControlDialogN]R0] Left to LeftstereoMatrixControlsN]R0S Left to RightstereoMatrixControlsNSR0] Right to LeftstereoMatrixControlsNSR0SRight to RightstereoMatrixControlsP\kbTRM__Y4After stopping go back to begintimeLineP\kbTRM_de>_YvW0e?After stopping go back to position at which playing was startedtimeLineP\kbTOcOMnN SAfter stopping keep positiontimeLineT/u(/yu(RnREnable/disable auto-scrollingtimeLineT/u(/yu(_spEnable/disable loop-pointstimeLinecy:HinttimeLineHc OO <Shift> yRwY_spc OO <Ctrl> yu(x`'T8D0XHold to move the begin loop point; Press to disable magnetic loop points.timeLine"c OO <Ctrl> yu(x`'T8D0-Press to disable magnetic loop points.timeLineYMutedtrackrYOSolotrackYMutedtrackContentObject*%1:%2 (%3:%4 R0 %5:%6)%1:%2 (%3:%4 to %5:%6)trackContentObjectViewY R6CopytrackContentObjectView_SRM^Current lengthtrackContentObjectView_SRMOMnCurrent positiontrackContentObjectViewRjRCuttrackContentObjectViewR d ( hN-.)Delete (middle mousebutton)trackContentObjectViewcy:HinttrackContentObjectView.Y/SmY (<Ctrl> + hN-.)#Mute/unmute ( + middle click)trackContentObjectView|4PastetrackContentObjectView&c OO <Ctrl> ^vbRNR^Rog,0%Press and drag to make a copy.trackContentObjectView"c OO <Ctrl> u1etY'\0Press for free resizing.trackContentObjectView[kdhSSۈLvdO\Actions for this tracktrackOperationsWidget ndkdhSClear this tracktrackOperationsWidget QKkdhSClone this tracktrackOperationsWidgetYMutetrackOperationsWidget YkdhSMute this tracktrackOperationsWidget6c OO <Ctrl> vT ebRyRgY R6^vyRkdhS0KPress while clicking on move-grip to begin a new drag'n'drop-action.trackOperationsWidget ydkdhSRemove this tracktrackOperationsWidgetrYOSolotrackOperationsWidget Qsb@g _UR6Turn all recording offtrackOperationsWidget bS_b@g _UR6Turn all recording ontrackOperationsWidgetR}VSTcNY1%Failed loading VST-pluginvestigeInstrument}QecNLoading pluginvestigeInstrument{I_VSTcNR}[b...'Please wait while loading VST-plugin...vestigeInstrumentjVSTcN%1u1NgNSVN R} Yg[W(LinuxN vQvNVST[N;N-ЈLkc^8 T|LMMS_SрThe VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer!vestigeInstrument S %1 Detune %1vibed ^ %1 Length %1vibed Qk^ %1 Octave %1vibed Xv %1Pan %1vibed ^.R(&H)&Help vibedViewpQّT/u(/yu(l_b0&Click here to enable/disable waveform. vibedViewpQّhQSl_b0!Click here to normalize waveform. vibedViewpQّ^snl_b0Click here to smooth waveform. vibedViewSDetune: vibedViewhQS Normalize vibedView/lSaw wave vibedView^snSmooth vibedViewel Square wave vibedViewu(b7[NIl_bUser defined wave vibedViewVolume: vibedViewv}VjWhite noise wave vibedViewpQT/u(Click to enablevisualizationWidgetpQT/u(/yu(ƉSN;Q6click to enable/disable visualization of master-outputvisualizationWidgetQeXv Input gainwaveShaperControlsQXv Output gainwaveShaperControlslmms-1.1.3/data/locale/zh.ts000066400000000000000000010563031247673406200156500ustar00rootroot00000000000000 AboutDialog About LMMS 关于LMMS Version %1 (%2/%3, Qt %4, %5) 版本 %1 (%2/%3, Qt %4, %5) About 关于 LMMS - easy music production for everyone LMMS - 人人都是作曲家 Authors 作者 Translation 翻译 Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! 当前语言是中文(中国) 您可以帮助我们改进翻译:https://github.com/LMMS/lmms/wiki/Creating-a-localization 主要译者: TonyChyi,邮箱:tonychee1989@gmail.com Min Zhang ,邮箱:zm1990s@gmail.com 校对: Jeff Bai,邮箱:jeffbaichina@gmail.com License 许可证 Copyright (c) 2004-2014, LMMS developers Copyright (c) 2004-2014, LMMS 开发者 <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> LMMS LMMS AmplifierControlDialog VOL VOL Volume: 音量: PAN PAN Panning: 声相: LEFT Left gain: 左增益: RIGHT Right gain: 右增益: AmplifierControls Volume 音量 Panning 声相 Left gain 左增益 Right gain 右增益 AudioAlsa::setupWidget DEVICE 设备 CHANNELS 声道数 AudioFileProcessorView Open other sample 打开其他采样 Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample. 如果想打开另一个音频文件,请点击这里。接着会出现文件选择对话框。 诸如环回模式(looping-mode)、起始/结束点、放大值(amplify-value)之类的值不会被重置,因此音频听起来会和原采样有差异。 Reverse sample 反转采样 If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. 如果点击此按钮,整个采样将会被反转。反转处理能用于制作很酷的效果,例如reversed crash。 Amplify: 放大: With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) 此旋钮用于调整振幅放大比率。当设为100%时采样不会变化。除此之外,振幅不是放大就是减弱。 (原始的采样文件不会被更改) Startpoint: 起始点: Endpoint: 终止点: Continue sample playback across notes 跨音符继续播放采样 Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz) Disable loop 禁用循环 This button disables looping. The sample plays only once from start to end. 点击此按钮可以禁止循环播放。 Enable loop 开启循环 This button enables forwards-looping. The sample loops between the end point and the loop point. 点击此按钮后,Forwards-looping 会被打开,采样将在终止点(End Point)和循环点(Loop Point)之间播放。 This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. 点击此按钮后,Ping-pong-looping 会被打开,采样将在终止点(End Point)和循环点(Loop Point)之间来回播放。 With this knob you can set the point where AudioFileProcessor should begin playing your sample. 调节此旋钮,以告诉 AudioFileProcessor 在哪里开始播放。 With this knob you can set the point where AudioFileProcessor should stop playing your sample. 调节此旋钮,以告诉 AudioFileProcessor 在哪里停止播放。 Loopback point: With this knob you can set the point where the loop starts. 调节此旋钮,以设置循环开始的地方。 AudioFileProcessorWaveView Sample length: 采样长度: AudioJack JACK client restarted JACK客户端已重启 LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again. LMMS由于某些原因与JACK断开连接。 这可能是因为LMMS的JACK后端重启导致的,你需要手动重新连接。 JACK server down JACK服务崩溃 The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. JACK服务好像崩溃了,而且未能正常启动。 LMMS不能正常工作,你需要保存你的工作然后重启JACK和LMMS。 AudioJack::setupWidget CLIENT-NAME 客户端名称 CHANNELS 声道数 AudioOss::setupWidget DEVICE 设备 CHANNELS 声道数 AudioPortAudio::setupWidget BACKEND 后端 DEVICE 设备 AudioPulseAudio::setupWidget DEVICE 设备 CHANNELS 声道数 AudioSdl::setupWidget DEVICE 设备 AutomatableModel &Reset (%1%2) 重置(%1%2)(&R) &Copy value (%1%2) 复制值(%1%2)(&C) &Paste value (%1%2) 粘贴值(%1%2)(&P) Edit song-global automation 编辑歌曲全局自动控制选项 Connected to %1 连接到%1 Connected to controller 连接到控制器 Edit connection... 编辑连接... Remove connection 删除连接 Connect to controller... 连接到控制器... Remove song-global automation 删除歌曲全局自动控制 Remove all linked controls 移除所有已连接的控制器 AutomationEditor Play/pause current pattern (Space) 播放/暂停当前片段(空格) Stop playing of current pattern (Space) 停止当前片段(空格) Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. 点击这里播放片段。编辑时很有用,片段会自动循环播放。 Click here if you want to stop playing of the current pattern. 点击这里停止播放片段。 Draw mode (Shift+D) 绘制模式 (Shift+D) Erase mode (Shift+E) 擦除模式 (Shift+E) Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. 点击这里启用绘制模式。在此模式下你可以增加或移动单个值。 大部分时间下默认使用此模式。你也可以按键盘上的 ‘Shift+D’激活此模式。 Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. 点击启用擦除模式。此模式下你可以擦除单个值。你可以按键盘上的 'Shift+E' 启用此模式。 Cut selected values (Ctrl+X) 剪切选定值 (Ctrl+X) Copy selected values (Ctrl+C) 复制选定值 (Ctrl+C) Paste values from clipboard (Ctrl+V) 从剪贴板粘贴值 (Ctrl+V) Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. 点击这里,选择的值将会被剪切到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. 点击这里,选择的值将会被复制到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 Click here and the values from the clipboard will be pasted at the first visible measure. Automation Editor - no pattern 自动控制编辑器 - 没有片段 Automation Editor - %1 自动控制编辑器 - %1 Please open an automation pattern with the context menu of a control! Values copied 值已复制 All selected values were copied to the clipboard. 所有选中的值已复制。 Discrete progression Linear progression Cubic Hermite progression Tension: Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. Tension value for spline A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. AutomationPattern Drag a control while pressing <Ctrl> 按住<Ctrl>拖动控制器 Model is already connected to this pattern. 模型已连接到此片段。 AutomationPatternView double-click to open this pattern in automation editor 双击以在自动编辑器中打开此片段 Open in Automation editor 在自动编辑器(Automation editor)中打开 Clear 清除 Reset name 重置名称 Change name 修改名称 %1 Connections %1个连接 Disconnect "%1" 断开“%1”的连接 Set/clear record 设置/清除录制 AutomationTrack Automation track 自动控制轨道 BassBoosterControlDialog FREQ 频率 Frequency: 频率: GAIN 增益 Gain: 增益: RATIO 比率 Ratio: 比率: BassBoosterControls Frequency 频率 Gain 增益 Ratio 比率 CarlaInstrumentView Show GUI 显示图形界面 Click here to show or hide the graphical user interface (GUI) of Carla. 点击此处可以显示或隐藏 Carla 的图形界面。 Controller Controller %1 控制器%1 ControllerConnectionDialog Connection Settings 连接设置 MIDI CONTROLLER MIDI控制器 Input channel 输入通道 CHANNEL 通道 Input controller 输入控制器 CONTROLLER 控制器 Auto Detect 自动检测 MIDI-devices to receive MIDI-events from 用来接收 MIDI 事件的 MIDI 设备 USER CONTROLLER 用户控制器 MAPPING FUNCTION 映射函数 OK 确定 Cancel 取消 LMMS LMMS Cycle Detected. 检测到环路。 ControllerRackView Controller Rack 控制器机架 Add 增加 Confirm Delete 删除前确认 Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. 确定要删除吗?此控制器仍处于被连接状态。此操作不可撤销。 ControllerView Controls 控制器 Controllers are able to automate the value of a knob, slider, and other controls. 控制器可以自动控制旋钮,滑块和其他控件的值。 Rename controller 重命名控制器 Enter the new name for this controller 输入这个控制器的新名称 &Remove this plugin 删除这个插件(&R) &Help 帮助(&H) DualFilterControlDialog Filter 1 enabled 已启用过滤器 1 Filter 2 enabled 已启用过滤器 2 Click to enable/disable Filter 1 点击启用/禁用过滤器 1 Click to enable/disable Filter 2 点击启用/禁用过滤器 2 DualFilterControls Filter 1 enabled 过滤器 1 已启用 Filter 1 type 过滤器 1 的类型 Cutoff 1 frequency 频谱刀 1 的频率 Q/Resonance 1 Gain 1 增益 1 Mix Filter 2 enabled 已启用过滤器 2 Filter 2 type 过滤器 2 的类型 Cutoff 2 frequency 频谱刀 2 的频率 Q/Resonance 2 Gain 2 增益 2 LowPass 低通 HiPass 高通 BandPass csg 带通 csg BandPass czpg 带通 czpg Notch 凹口滤波器 Allpass 全通 Moog Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter 人声移除过滤器 Effect Effect enabled 效果器已启用 Wet/Dry mix 干/湿混合 Gate 门限 Decay 衰减 EffectChain Effects enabled 效果器已启用 EffectRackView EFFECTS CHAIN 效果器链 Add effect 增加效果器 EffectSelectDialog Add effect 增加效果器 Plugin description 插件说明 EffectView Toggles the effect on or off. 打开/关闭效果。 On/Off 开/关 W/D 干/湿 Wet Level: 湿度: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. 旋转干湿度旋钮以调整原信号与有效果的信号的比例。 DECAY 衰减 Time: 时间: The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects. GATE 门限 Gate: 门限: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. Controls 控制 Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects. The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays. The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob. The Controls button opens a dialog for editing the effect's parameters. Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether. Move &up 向上移 (&u) Move &down 向下移 (&d) &Remove this plugin 移除此插件 (&R) &Help 帮助(&H) EnvelopeAndLfoParameters Predelay 预延迟 Attack 打进声 Hold 保持 Decay 衰减 Sustain 持续 Release 释放 Modulation 调制 LFO Predelay LFO 预延迟 LFO Attack LFO 打进声(attack) LFO speed LFO 速度 LFO Modulation LFO 调制 LFO Wave Shape LFO 波形形状 Freq x 100 Modulate Env-Amount EnvelopeAndLfoView DEL Predelay: Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. ATT ATT Attack: 打进: Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. (ADSR Attack) HOLD HOLD Hold: 持续: Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. DEC DEC Decay: 衰减: Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. (ADSR Decay) SUST SUST Sustain: 持幅: Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. (ADSR Sustain) REL REL Release: 消退: Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. (ADSR Release) AMT Modulation amount: Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. LFO predelay: Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. LFO- attack: Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. SPD LFO speed: Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave for current. Click here for a square-wave. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. FREQ x 100 Click here if the frequency of this LFO should be multiplied by 100. multiply LFO-frequency by 100 MODULATE ENV-AMOUNT Click here to make the envelope-amount controlled by this LFO. control envelope-amount by this LFO ms/LFO: Hint 提示 Drag a sample from somewhere and drop it in this window. Click here for random wave. ExportProjectDialog Export project 导出工程 Output 输出 File format: 文件格式: Samplerate: 采样率: 44100 Hz 44100 Hz 48000 Hz 48000 Hz 88200 Hz 88200 Hz 96000 Hz 96000 Hz 192000 Hz 192000 Hz Bitrate: 码率: 64 KBit/s 64 KBit/s 128 KBit/s 128 KBit/s 160 KBit/s 160 KBit/s 192 KBit/s 192 KBit/s 256 KBit/s 256 KBit/s 320 KBit/s 320 KBit/s Depth: 位深: 16 Bit Integer 16 位整形 32 Bit Float 32 位浮点型 Please note that not all of the parameters above apply for all file formats. 请注意:上面的参数不一定适用于所有文件格式。 Quality settings 质量设置 Interpolation: Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 1x (无) 2x 2x 4x 4x 8x 8x Start 开始 Cancel 取消 Export as loop (remove end silence) 导出为回环loop(移除结尾的静音) FileBrowser Browser 浏览器 FileBrowserTreeWidget Send to active instrument-track 发送到活跃的乐器轨道 Open in new instrument-track/Song-Editor 在新乐器轨道/歌曲编辑器中打开 Open in new instrument-track/B+B Editor 在新乐器轨道/B+B 编辑器中打开 Loading sample 加载采样中 Please wait, loading sample for preview... 请稍候,加载采样中... --- Factory files --- ---软件自带文件--- FxLine Channel send amount The FX channel receives input from one or more instrument tracks. It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop. In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel. You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel. Move &left Move &right Rename &channel R&emove channel &Help FxMixer Master 主控 FX %1 FX %1 FxMixerView Rename FX channel 重命名效果通道 Enter the new name for this FX channel 为此效果通道输入一个新的名称 FX-Mixer 效果混合器 FxMixerView::FxChannelView FX Fader %1 FX 衰减器 %1 Mute 静音 Mute this FX channel 静音此效果通道 FxRoute Amount to send from channel %1 to channel %2 从通道 %1 发送到通道 %2 的量 InstrumentFunctionArpeggio Arpeggio Arpeggio type Arpeggio range Arpeggio time Arpeggio gate Arpeggio direction Arpeggio mode Up 向上 Down 向下 Up and down 上和下 Random 随机 Free 自由 Sort 排序 Sync 同步 Down and up 下和上 InstrumentFunctionArpeggioView ARPEGGIO An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select. RANGE 范围 Arpeggio range: octave(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. TIME 时长 Arpeggio time: ms 毫秒 Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. GATE 门限 Arpeggio gate: % Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios. Chord: 和弦: Direction: 方向: Mode: 模式: InstrumentFunctionNoteStacking octave octave Major Major Majb5 Majb5 minor minor minb5 minb5 sus2 sus2 sus4 sus4 aug aug augsus4 augsus4 tri tri 6 6 6sus4 6sus4 6add9 6add9 m6 m6 m6add9 m6add9 7 7 7sus4 7sus4 7#5 7#5 7b5 7b5 7#9 7#9 7b9 7b9 7#5#9 7#5#9 7#5b9 7#5b9 7b5b9 7b5b9 7add11 7add11 7add13 7add13 7#11 7#11 Maj7 Maj7 Maj7b5 Maj7b5 Maj7#5 Maj7#5 Maj7#11 Maj7#11 Maj7add13 Maj7add13 m7 m7 m7b5 m7b5 m7b9 m7b9 m7add11 m7add11 m7add13 m7add13 m-Maj7 m-Maj7 m-Maj7add11 m-Maj7add11 m-Maj7add13 m-Maj7add13 9 9 9sus4 9sus4 add9 add9 9#5 9#5 9b5 9b5 9#11 9#11 9b13 9b13 Maj9 Maj9 Maj9sus4 Maj9sus4 Maj9#5 Maj9#5 Maj9#11 Maj9#11 m9 m9 madd9 madd9 m9b5 m9b5 m9-Maj7 m9-Maj7 11 11 11b9 11b9 Maj11 Maj11 m11 m11 m-Maj11 m-Maj11 13 13 13#9 13#9 13b9 13b9 13b5b9 13b5b9 Maj13 Maj13 m13 m13 m-Maj13 m-Maj13 Harmonic minor Harmonic minor Melodic minor Melodic minor Whole tone Diminished Diminished Major pentatonic Major pentatonic Minor pentatonic Minor pentatonic Jap in sen Jap in sen Major bebop Major bebop Dominant bebop Dominant bebop Blues Blues Arabic Arabic Enigmatic Enigmatic Neopolitan Neopolitan Neopolitan minor Neopolitan minor Hungarian minor Hungarian minor Dorian Dorian Phrygolydian Lydian Lydian Mixolydian Mixolydian Aeolian Aeolian Locrian Locrian Chords Chords Chord type Chord type Chord range Chord range Minor Minor Chromatic Chromatic Half-Whole Diminished 5 5 InstrumentFunctionNoteStackingView RANGE 范围 Chord range: 和弦范围: octave(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. STACKING Chord: 和弦: InstrumentMidiIOView ENABLE MIDI INPUT 启用MIDI输入 CHANNEL 通道 VELOCITY 力度 ENABLE MIDI OUTPUT 启用MIDI输出 PROGRAM 乐器 MIDI devices to receive MIDI events from MIDI devices to send MIDI events to NOTE 音符 CUSTOM BASE VELOCITY Specify the velocity normalization base for MIDI-based instruments at note volume 100% BASE VELOCITY InstrumentSoundShaping VOLUME 音量 Volume 音量 CUTOFF 切除 Cutoff frequency 切除频率 RESO Resonance 共鸣 Envelopes/LFOs Filter type 过滤器类型 Q/Resonance LowPass 低通 HiPass 高通 BandPass csg 带通 csg BandPass czpg 带通 czpg Notch 凹口滤波器 Allpass 全通 Moog Moog 2x LowPass RC LowPass 12dB RC BandPass 12dB RC HighPass 12dB RC LowPass 24dB RC BandPass 24dB RC HighPass 24dB Vocal Formant Filter 人声移除过滤器 InstrumentSoundShapingView TARGET These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff frequency for the used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! FILTER Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Hz Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on... RESO Resonance: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. FREQ cutoff frequency: Envelopes, LFOs and filters are not supported by the current instrument. InstrumentTrack unnamed_track 未命名轨道 Volume 音量 Panning 声相 Pitch 音高 FX channel 效果通道 Default preset 预置 With this knob you can set the volume of the opened channel. 使用此旋钮可以设置开放通道的音量 Base note 基本音 Pitch range 音域范围 InstrumentTrackView Volume 音量 Volume: 音量: VOL VOL Panning 声相 Panning: 声相: PAN PAN MIDI MIDI Input 输入 Output 输出 InstrumentTrackWindow GENERAL SETTINGS 一般设置 Instrument volume 乐器音量 Volume: 音量: VOL VOL Panning 声相 Panning: 声相: PAN PAN Pitch 音高 Pitch: 音高: cents 音分 cents PITCH FX channel 效果通道 ENV/LFO FUNC FX 效果 MIDI MIDI Save preset 保存预置 XML preset file (*.xpf) XML 预设文件 (*.xpf) PLUGIN 插件 Pitch range (semitones) 音域范围(半音) RANGE 范围 Save current instrument track settings in a preset file Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. LadspaControl Link channels 关联通道 LadspaControlDialog Link Channels 连接通道 Channel 通道 LadspaControlView Link channels 连接通道 Value: 值: Sorry, no help available. 啊哦,这个没有帮助文档。 LadspaEffect Effect 效果器 Unknown LADSPA plugin %1 requested. 已请求未知 LADSPA 插件 %1. LcdSpinBox Please enter a new value between %1 and %2: LfoController LFO Controller Base value Oscillator speed Oscillator amount Oscillator phase Oscillator waveform Frequency Multiplier LfoControllerDialog LFO LFO Controller BASE Base amount: todo SPD LFO-speed: Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. AMT Modulation amount: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. PHS Phase offset: degrees With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Click here for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for a a moog saw-wave. Click here for an exponential wave. Click here for white-noise. Click here for a user-defined shape. Double click to pick a file. MainWindow Working directory 工作目录 The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. LMMS工作目录%1不存在,现在新建一个吗?你可以稍后在 编辑 -> 设置 中更改此设置。 Could not save config-file 不能保存配置文件 Could not save configuration file %1. You're probably not permitted to write to this file. Please make sure you have write-access to the file and try again. 不能保存配置文件%1,你可能没有写权限。 请确保你可以写入这个文件并重试。 &Project 工程(&P) &New 新建(&N) &Open... 打开(&O)... Recently opened projects 最近打开的工程 &Save 保存(&S)... Save &As... 另存为(&A)... Import... 导入... E&xport... 导出(&E)... &Quit 退出(&Q) &Edit 编辑(&E) Settings 设置 &Tools 工具(&T) &Help 帮助(&H) Online help 在线帮助 Help 帮助 What's this? 这是什么? About 关于 Create new project 新建工程 Create new project from template 从模版新建工程 Open existing project 打开已有工程 Recently opened project 最近打开的工程 Save current project 保存当前工程 Export current project 导出当前工程 Show/hide Song-Editor 显示/隐藏歌曲编辑器 By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist. Show/hide Beat+Bassline Editor 显示/隐藏节拍+旋律编辑器 By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Show/hide Piano-Roll 显示/隐藏钢琴窗 Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Show/hide Automation Editor 显示/隐藏自动控制编辑器 Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Show/hide FX Mixer 显示/隐藏混音器 Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Show/hide project notes 显示/隐藏工程注释 Click here to show or hide the project notes window. In this window you can put down your project notes. 点击这里显示或隐藏工程注释窗。在此窗口中你可以写下工程的注释。 Show/hide controller rack 显示/隐藏控制器机架 Untitled 未标题 LMMS %1 LMMS %1 Project not saved 工程未保存 The current project was modified since last saving. Do you want to save it now? 此工程自上次保存后有了修改,你想保存吗? Open project 打开工程 Save project 保存工程 Help not available 帮助不可用 Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS现在没有可用的帮助 请访问 http://lmms.sf.net/wiki 了解LMMS的相关文档。 My projects 我的工程 My samples 我的采样 My presets 我的预置 My home 我的主目录 My computer 我的电脑 Root directory 根目录 Save as new &version 保存为新版本(&V) E&xport tracks... 导出音轨(&E)... LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) Version %1 版本 %1 Project recovery 工程恢复 It looks like the last session did not end properly. Do you want to recover the project of this session? 好像上次会话未能正常退出,你想要恢复上次会话未保存的工程吗? Configuration file 配置文件 Error while parsing configuration file at line %1:%2: %3 解析配置文件发生错误(行%1:%2:%3) Undo 撤销 Redo 重做 LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) LMMS 工程 (*.mmpz *.mmp);;LMMS 工程模板 (*.mpt) Volumes MeterDialog Meter Numerator Meter Denominator TIME SIG MeterModel Numerator Denominator MidiAlsaRaw::setupWidget DEVICE 设备 MidiAlsaSeq::setupWidget DEVICE 设备 MidiController MIDI Controller unnamed_midi_controller MidiImport Setup incomplete You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. MidiOss::setupWidget DEVICE 设备 MidiPort Input channel 输入通道 Output channel 输出通道 Input controller 输入控制器 Output controller 输出控制器 Fixed input velocity Fixed output velocity Output MIDI program Receive MIDI-events Send MIDI-events Fixed output note Base velocity MonstroInstrument Osc 1 Volume Osc 1 Panning Osc 1 Coarse detune Osc 1 Fine detune left Osc 1 Fine detune right Osc 1 Stereo phase offset Osc 1 Pulse width Osc 1 Sync send on rise Osc 1 Sync send on fall Osc 2 Volume Osc 2 Panning Osc 2 Coarse detune Osc 2 Fine detune left Osc 2 Fine detune right Osc 2 Stereo phase offset Osc 2 Waveform Osc 2 Sync Hard Osc 2 Sync Reverse Osc 3 Volume Osc 3 Panning Osc 3 Coarse detune Osc 3 Stereo phase offset Osc 3 Sub-oscillator mix Osc 3 Waveform 1 Osc 3 Waveform 2 Osc 3 Sync Hard Osc 3 Sync Reverse LFO 1 Waveform LFO 1 Attack LFO 1 Rate LFO 1 Phase LFO 2 Waveform LFO 2 Attack LFO 2 Rate LFO 2 Phase Env 1 Pre-delay Env 1 Attack Env 1 Hold Env 1 Decay Env 1 Sustain Env 1 Release Env 1 Slope Env 2 Pre-delay Env 2 Attack Env 2 Hold Env 2 Decay Env 2 Sustain Env 2 Release Env 2 Slope Osc2-3 modulation Selected view Vol1-Env1 Vol1-Env2 Vol1-LFO1 Vol1-LFO2 Vol2-Env1 Vol2-Env2 Vol2-LFO1 Vol2-LFO2 Vol3-Env1 Vol3-Env2 Vol3-LFO1 Vol3-LFO2 Phs1-Env1 Phs1-Env2 Phs1-LFO1 Phs1-LFO2 Phs2-Env1 Phs2-Env2 Phs2-LFO1 Phs2-LFO2 Phs3-Env1 Phs3-Env2 Phs3-LFO1 Phs3-LFO2 Pit1-Env1 Pit1-Env2 Pit1-LFO1 Pit1-LFO2 Pit2-Env1 Pit2-Env2 Pit2-LFO1 Pit2-LFO2 Pit3-Env1 Pit3-Env2 Pit3-LFO1 Pit3-LFO2 PW1-Env1 PW1-Env2 PW1-LFO1 PW1-LFO2 Sub3-Env1 Sub3-Env2 Sub3-LFO1 Sub3-LFO2 MonstroView Operators view The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes. Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. Matrix view The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power. The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only. Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. Mix Osc2 with Osc3 Modulate amplitude of Osc3 with Osc2 Modulate frequency of Osc3 with Osc2 Modulate phase of Osc3 with Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. The CRS knob changes the tuning of oscillator 2 in semitone steps. The CRS knob changes the tuning of oscillator 3 in semitone steps. FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Choose waveform for oscillator 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. Mix mode means no modulation: the outputs of the oscillators are simply mixed together. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2. PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. Select the waveform for LFO 1. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Select the waveform for LFO 2. "Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... Attack causes the LFO to come on gradually from the start of the note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. PHS controls the phase offset of the LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. HOLD controls how long the envelope stays at peak after the attack phase. DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. NesInstrument Channel 1 Coarse detune Channel 1 Volume Channel 1 Envelope length Channel 1 Duty cycle Channel 1 Sweep amount Channel 1 Sweep rate Channel 2 Coarse detune Channel 2 Volume Channel 2 Envelope length Channel 2 Duty cycle Channel 2 Sweep amount Channel 2 Sweep rate Channel 3 Coarse detune Channel 3 Volume Channel 4 Volume Channel 4 Envelope length Channel 4 Noise frequency Channel 4 Noise frequency sweep Master volume 主音量 Vibrato OscillatorObject Osc %1 volume Osc %1 panning Osc %1 coarse detuning Osc %1 fine detuning left Osc %1 fine detuning right Osc %1 phase-offset Osc %1 stereo phase-detuning Osc %1 wave shape Modulation type %1 Osc %1 waveform Osc %1 harmonic PatmanView Open other patch 打开其他音色 Click here to open another patch-file. Loop and Tune settings are not reset. 点击这里打开另一个音色文件。循环和调音设置不会被重设。 Loop 循环 Loop mode 循环模式 Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. 在这里你可以开关循环模式。如果启用,PatMan 会使用文件中的循环信息。 Tune 调音 Tune mode 调音模式 Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. 这里可以开关调音模式。如果启用,PatMan 会将采样调成和音符一样的频率。 No file selected 未选择文件 Open patch file 打开音色文件 Patch-Files (*.pat) 音色文件 (*.pat) PatternView double-click to open this pattern in piano-roll use mouse wheel to set volume of a step 双击在钢琴窗中打开此片段 使用鼠标滑轮设置此音阶的音量 Open in piano-roll 在钢琴窗中打开 Clear all notes 清除所有音符 Reset name 重置名称 Change name 修改名称 Add steps 添加音阶 Remove steps 移除音阶 PeakController Peak Controller Peak Controller Bug Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused. PeakControllerDialog PEAK LFO Controller PeakControllerEffectControlDialog BASE Base amount: Modulation amount: Attack: 打进声 Release: AMNT MULT Amount Multiplicator: ATCK DCAY PeakControllerEffectControls Base value Modulation amount Mute output Attack 打进声 Release 释放 Abs Value Amount Multiplicator PianoRoll Play/pause current pattern (Space) 播放/暂停当前片段(空格) Stop playing of current pattern (Space) 停止当前片段(空格) Cut selected notes (Ctrl+X) 剪切选定音符 (Ctrl+X) Copy selected notes (Ctrl+C) 复制选定音符 (Ctrl+C) Paste notes from clipboard (Ctrl+V) 从剪贴板粘贴音符 (Ctrl+V) Piano-Roll - no pattern 钢琴窗 - 没有片段 Piano-Roll - %1 钢琴窗 - %1 Please open a pattern by double-clicking on it! 双击打开片段! Record notes from MIDI-device/channel-piano 从 MIDI 设备/通道钢琴(channel-piano) 录制音符 Record notes from MIDI-device/channel-piano while playing song or BB track Draw mode (Shift+D) 绘制模式 (Shift+D) Erase mode (Shift+E) 擦除模式 (Shift+E) Select mode (Shift+S) 选择模式 (Shift+S) Last note 上一个音符 Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. Click here to stop playback of current pattern. Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. Click here and the notes from the clipboard will be pasted at the first visible measure. Note lock Note Volume 音符音量 Note Panning 音符声相偏移 Detune mode (Shift+T) Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. Mark/unmark current semitone Mark current scale Mark current chord Unmark all 取消标记所有 No scale No chord Volume: %1% 音量:%1% Panning: %1% left 声相:%1% 偏左 Panning: %1% right 声相:%1% 偏右 Panning: center 声相:居中 Please enter a new value between %1 and %2: 请输入一个介于 %1 和 %2 的值: This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. PianoView Base note 基本音 Plugin Plugin not found 未找到插件 The plugin "%1" wasn't found or could not be loaded! Reason: "%2" 插件“%1”无法找到或无法载入! 原因:%2 Error while loading plugin 载入插件时发生错误 Failed to load plugin "%1"! 载入插件“%1”失败! LMMS plugin %1 does not have a plugin descriptor named %2! ProjectRenderer WAV-File (*.wav) WAV-文件 (*.wav) Compressed OGG-File (*.ogg) 压缩的 OGG 文件(*.ogg) QObject C Note name C Db Note name Db C# Note name C# D Note name D Eb Note name Eb D# Note name D# E Note name E Fb Note name Fb Gb Note name Gb F# Note name F# G Note name G Ab Note name Ab G# Note name G# A Note name A Bb Note name Bb A# Note name A# B Note name B QWidget Name: 名称: Maker: 制作者: Copyright: 版权: Requires Real Time: 需要实时: Yes No Real Time Capable: 是否支持实时: In Place Broken: Channels In: 输入通道: Channels Out: 输出通道: File: 文件: File: %1 文件:%1 SampleBuffer Open audio file 打开音频文件 Wave-Files (*.wav) Wave波形文件 (*.wav) OGG-Files (*.ogg) OGG-文件 (*.ogg) DrumSynth-Files (*.ds) DrumSynth-文件 (*.ds) FLAC-Files (*.flac) FLAC-文件 (*.flac) SPEEX-Files (*.spx) SPEEX-文件 (*.spx) VOC-Files (*.voc) VOC-文件 (*.voc) AIFF-Files (*.aif *.aiff) AIFF-文件 (*.aif *.aiff) AU-Files (*.au) AU-文件 (*.au) RAW-Files (*.raw) RAW-文件 (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) 所有音频文件 (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample 双击选择采样 Delete (middle mousebutton) 删除 (鼠标中键) Cut 剪切 Copy 复制 Paste 粘贴 Mute/unmute (<Ctrl> + middle click) 静音/取消静音 (<Ctrl> + 鼠标中键) Set/clear record 设置/清除录制 SampleTrack Sample track 采样轨道 Volume 音量 SampleTrackView Track volume 轨道音量 Channel volume: 通道音量: VOL VOL SongEditor Song-Editor 歌曲编辑器 Play song (Space) 播放歌曲(空格) Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. 点击这里完整播放歌曲。将从绿色歌曲标记开始播放。在播放的同时可以对它进行移动。 Stop song (Space) 停止歌曲(空格) Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. 点击这里停止播放,歌曲位置标记会跳到歌曲的开头。 Add beat/bassline 添加节拍/低音线 Add sample-track 添加采样轨道 Could not open file 无法打开文件 Could not write file 无法写入文件 Add automation-track 添加自动化轨道 Draw mode 绘制模式 Edit mode (select and move) 编辑模式(选定和移动) Record samples from Audio-device 从音频设备录制样本 Record samples from Audio-device while playing song or BB track 在播放歌曲或BB轨道时从音频设备录入样本 Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. 无法打开 %1 。或许没有权限读此文件。 请确保您拥有对此文件的读权限,然后重试。 Error in file 文件错误 The file %1 seems to contain errors and therefore can't be loaded. 文件 %1 似乎包含错误,无法被加载。 Tempo 节奏 TEMPO/BPM 节奏/BPM tempo of song 歌曲的节奏 The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). High quality mode 高质量模式 Master volume 主音量 master volume 主音量 Master pitch 主音高 master pitch 主音高 Value: %1% 值: %1% Value: %1 semitones 值: %1 半音程 Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. 无法打开 %1 写入数据。或许没有权限修改此文件。请确保您拥有对此文件的写权限,然后重试。 SpectrumAnalyzerControlDialog Linear spectrum 线性频谱图 Linear Y axis SpectrumAnalyzerControls Linear spectrum 线性频谱图 Linear Y axis Channel mode TempoSyncKnob Tempo Sync No Sync Eight beats Whole note Half note Quarter note 8th note 16th note 32nd note Custom... &Help Custom Synced to Eight Beats Synced to Whole Note Synced to Half Note Synced to Quarter Note Synced to 8th Note Synced to 16th Note Synced to 32nd Note TimeDisplayWidget click to change time units 点击改变时间单位 TrackContainer Couldn't import file Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. Couldn't open file Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! Loading project... Cancel 取消 Please wait... Importing MIDI-file... Importing FLP-file... TripleOscillatorView Use phase modulation for modulating oscillator 2 with oscillator 1 Use amplitude modulation for modulating oscillator 2 with oscillator 1 Mix output of oscillator 1 & 2 Synchronize oscillator 1 with oscillator 2 Use frequency modulation for modulating oscillator 2 with oscillator 1 Use phase modulation for modulating oscillator 3 with oscillator 2 Use amplitude modulation for modulating oscillator 3 with oscillator 2 Mix output of oscillator 2 & 3 Synchronize oscillator 2 with oscillator 3 Use frequency modulation for modulating oscillator 3 with oscillator 2 Osc %1 volume: With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Osc %1 panning: With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Osc %1 coarse detuning: semitones With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Osc %1 fine detuning left: cents 音分 cents With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 fine detuning right: With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Osc %1 phase-offset: degrees With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Osc %1 stereo phase-detuning: With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds. Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use a moog-like saw-wave for current oscillator. Use an exponential wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. Ui Contributors ordered by number of commits: Involved VersionedSaveDialog Increment version number Decrement version number VestigeInstrumentView Open other VST-plugin Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Show/hide GUI Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Turn off all notes Open VST-plugin DLL-files (*.dll) EXE-files (*.exe) No VST-plugin loaded Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Save preset 保存预置 Click here, if you want to save current VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Preset by - VST plugin control VstEffectControlDialog Show/hide Control VST-plugin from LMMS host Click here, if you want to control VST-plugin from host. Open VST-plugin preset Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. Previous (-) Click here, if you want to switch to another VST-plugin preset program. Next (+) Click here to select presets that are currently loaded in VST. Save preset 保存预置 Click here, if you want to save current VST-plugin preset program. Effect by: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin 载入插件 Open Preset Vst Plugin Preset (*.fxp *.fxb) : default " ' Save Preset .fxp .FXP .FXB .fxb Please wait while loading VST plugin... Failed loading VST plugin The VST plugin %1 could not be loaded for some reason. WatsynInstrument Volume A1 Volume A2 Volume B1 Volume B2 Panning A1 Panning A2 Panning B1 Panning B2 Freq. multiplier A1 Freq. multiplier A2 Freq. multiplier B1 Freq. multiplier B2 Left detune A1 Left detune A2 Left detune B1 Left detune B2 Right detune A1 Right detune A2 Right detune B1 Right detune B2 A-B Mix A-B Mix envelope amount A-B Mix envelope attack A-B Mix envelope hold A-B Mix envelope decay A1-B2 Crosstalk A2-A1 modulation B2-B1 modulation Selected graph WatsynView Select oscillator A1 Select oscillator A2 Select oscillator B1 Select oscillator B2 Mix output of A2 to A1 Modulate amplitude of A1 with output of A2 Ring-modulate A1 and A2 Modulate phase of A1 with output of A2 Mix output of B2 to B1 Modulate amplitude of B1 with output of B2 Ring-modulate B1 and B2 Modulate phase of B1 with output of B2 Draw your own waveform here by dragging your mouse on this graph. Load waveform Click to load a waveform from a sample file Phase left Click to shift phase by -15 degrees Phase right Click to shift phase by +15 degrees Normalize 标准化 Click to normalize Invert Click to invert Smooth 平滑 Click to smooth Sine wave Click for sine wave Triangle wave Click for triangle wave Click for saw wave Square wave 方波 Click for square wave ZynAddSubFxInstrument Portamento Filter Frequency Filter Resonance Bandwidth 带宽 FM Gain FM 增益 Resonance Center Frequency Resonance Bandwidth Forward MIDI Control Change Events ZynAddSubFxView Show GUI Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. Portamento: PORT Filter Frequency: FREQ Filter Resonance: RES Bandwidth: 带宽: BW FM Gain: FM GAIN Resonance center frequency: RES CF Resonance bandwidth: RES BW Forward MIDI Control Changes audioFileProcessor Amplify Start of sample End of sample Reverse sample 反转采样 Stutter Loopback point Loop mode 循环模式 Interpolation mode None Linear Sinc bbEditor Beat+Bassline Editor 节拍+低音线编辑器 Play/pause current beat/bassline (Space) 播放/暂停当前节拍/低音线(空格) Add beat/bassline 添加节拍/低音线 Add automation-track 添加自动轨道 Stop playback of current beat/bassline (Space) 停止播放当前节拍/低音线(空格) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. 点击这里停止播放当前节拍/低音线。当结束时节拍/低音线会自动循环播放。 Click here to stop playing of current beat/bassline. 点击这里停止播发当前节拍/低音线。 Remove steps 移除音阶 Add steps 添加音阶 bbTCOView Open in Beat+Bassline-Editor 在节拍+低音线编辑器中打开 Reset name 重置名称 Change name 修改名称 Change color 改变颜色 Reset color to default 重置颜色 bbTrack Beat/Bassline %1 节拍/低音线 %1 Clone of %1 %1 的副本 bitInvader Samplelength 采样长度 bitInvaderView Sample Length 采样长度 Sine wave Triangle wave Saw wave 锯齿波 Square wave 方波 White noise wave 白噪音 User defined wave 用户自定义波形 Smooth 平滑 Click here to smooth waveform. 点击这里平滑波形。 Interpolation Normalize 标准化 Draw your own waveform here by dragging your mouse on this graph. Click for a sine-wave. Click here for a triangle-wave. Click here for a saw-wave. Click here for a square-wave. Click here for white-noise. Click here for a user-defined shape. dynProcControlDialog INPUT Input gain: OUTPUT Output gain: ATTACK Peak attack time: RELEASE Peak release time: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase wavegraph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease wavegraph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Stereomode Maximum Process based on the maximum of both stereo channels Stereomode Average Process based on the average of both stereo channels Stereomode Unlinked Process each stereo channel independently dynProcControls Input gain 输入增益 Output gain 输出增益 Attack time Release time Stereo mode exportProjectDialog Could not open file 无法打开文件 Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! 无法打开文件 %1 写入数据。 请确保你拥有对文件以及存储文件的目录的写权限,然后重试! Error 错误 Error while determining file-encoder device. Please try to choose a different output format. 寻找文件编码设备时出错。请使用另外一种输出格式。 Rendering: %1% 渲染中:%1% Export project to %1 导出项目到 %1 fader Please enter a new value between %1 and %2: 请输入一个介于 %1 和 %2 之间的值: graphModel Graph 图形 kickerInstrument Start frequency 起始频率 End frequency 结束频率 Gain 增益 Length 长度 Distortion Start Distortion End Envelope Slope 包络线倾斜度 Noise 噪音 Click 力度 Frequency Slope 频率倾斜度 Start from note 从哪个音符开始 End to note 到哪个音符结束 kickerInstrumentView Start frequency: 起始频率: End frequency: 结束频率: Gain: 增益: Frequency Slope: 频率倾斜度: Envelope Length: 包络长度: Envelope Slope: 包络线倾斜度: Click: 力度: Noise: 噪音: Distortion Start: 起始失真度: Distortion End: 结束失真度: knob &Help 帮助(&H) Please enter a new value between -96.0 dBV and 6.0 dBV: 请输入介于96.0 dBV 和 6.0 dBV之间的值: Please enter a new value between %1 and %2: 请输入介于%1和%2之间的值: ladspaBrowserView Available Effects 可用效果器 Unavailable Effects 不可用效果器 Instruments 乐器插件 Analysis Tools 分析工具 Don't know 未知 This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. Instruments are plugins for which only output channels were identified. Analysis Tools are plugins for which only input channels were identified. Don't Knows are plugins for which no input or output channels were identified. Double clicking any of the plugins will bring up information on the ports. Type: 类型 ladspaDescription Plugins 插件 Description 描述 ladspaPortDialog Ports Name Rate Direction Type Min < Default < Max Logarithmic SR Dependent Audio Control Input 输入 Output 输出 Toggled Integer Float Yes lb302Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion 失真 Waveform 波形 Slide Decay Slide Accent Dead 24dB/oct Filter lb302SynthView Cutoff Freq: Resonance: Env Mod: Decay: 衰减: 303-es-que, 24dB/octave, 3 pole filter Slide Decay: DIST: Saw wave 锯齿波 Click here for a saw-wave. Triangle wave Click here for a triangle-wave. Square wave 方波 Click here for a square-wave. Rounded square wave Click here for a square-wave with a rounded end. Moog wave Click here for a moog-like wave. Sine wave Click for a sine-wave. White noise wave 白噪音 Click here for an exponential wave. Click here for white-noise. Bandlimited saw wave Click here for bandlimited saw wave. Bandlimited square wave Click here for bandlimited square wave. Bandlimited triangle wave Click here for bandlimited triangle wave. Bandlimited moog saw wave Click here for bandlimited moog saw wave. lb303Synth VCF Cutoff Frequency VCF Resonance VCF Envelope Mod VCF Envelope Decay Distortion 失真 Waveform 波形 Slide Decay Slide Accent Dead 24dB/oct Filter lb303SynthView Cutoff Freq: CUT Resonance: RES Env Mod: ENV MOD Decay: 衰减: DEC 303-es-que, 24dB/octave, 3 pole filter Slide Decay: SLIDE DIST: DIST WAVE: WAVE malletsInstrument Hardness Position Vibrato Gain Vibrato Freq Stick Mix Modulator Crossfade LFO Speed LFO Depth ADSR Pressure Motion Speed Bowed Spread Marimba Vibraphone Agogo Wood1 Reso Wood2 Beats Two Fixed Clump Tubular Bells Uniform Bar Tuned Bar Glass Tibetan Bowl Missing files Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! malletsInstrumentView Instrument Spread Spread: Hardness Hardness: Position Position: Vib Gain Vib Gain: Vib Freq Vib Freq: Stick Mix Stick Mix: Modulator Modulator: Crossfade Crossfade: LFO Speed LFO Speed: LFO Depth LFO Depth: ADSR ADSR: Bowed Pressure Pressure: Motion Motion: Speed Speed: Vibrato Vibrato: manageVSTEffectView - VST parameter control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close 关闭 Close VST effect knob-controller window. manageVestigeInstrumentView - VST plugin control VST Sync Click here if you want to synchronize all parameters with VST plugin. Automated Click here if you want to display automated parameters only. Close 关闭 Close VST plugin knob-controller window. nineButtonSelector &Help opl2instrument Patch Op 1 Attack Op 1 Decay Op 1 Sustain Op 1 Release Op 1 Level Op 1 Level Scaling Op 1 Frequency Multiple Op 1 Feedback Op 1 Key Scaling Rate Op 1 Percussive Envelope Op 1 Tremolo Op 1 Vibrato Op 1 Waveform Op 2 Attack Op 2 Decay Op 2 Sustain Op 2 Release Op 2 Level Op 2 Level Scaling Op 2 Frequency Multiple Op 2 Key Scaling Rate Op 2 Percussive Envelope Op 2 Tremolo Op 2 Vibrato Op 2 Waveform FM Vibrato Depth Tremolo Depth organicInstrument Distortion 失真 Volume 音量 organicInstrumentView Distortion: 失真: Volume: 音量: Randomise Osc %1 waveform: Osc %1 volume: Osc %1 panning: cents 音分 cents The distortion knob adds distortion to the output of the instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. Osc %1 stereo detuning Osc %1 harmonic: papuInstrument Sweep time Sweep direction Sweep RtShift amount Wave Pattern Duty Channel 1 volume Volume sweep direction Length of each step in sweep Channel 2 volume Channel 3 volume Channel 4 volume Right Output level 右声道输出电平 Left Output level Channel 1 to SO2 (Left) Channel 2 to SO2 (Left) Channel 3 to SO2 (Left) Channel 4 to SO2 (Left) Channel 1 to SO1 (Right) Channel 2 to SO1 (Right) Channel 3 to SO1 (Right) Channel 4 to SO1 (Right) Treble Bass 低音 Shift Register width papuInstrumentView Sweep Time: Sweep Time Sweep RtShift amount: Sweep RtShift amount Wave pattern duty: Wave Pattern Duty Square Channel 1 Volume: Length of each step in sweep: Length of each step in sweep Wave pattern duty Square Channel 2 Volume: Square Channel 2 Volume Wave Channel Volume: Wave Channel Volume Noise Channel Volume: Noise Channel Volume SO1 Volume (Right): SO1 Volume (Right) SO2 Volume (Left): SO2 Volume (Left) Treble: Treble Bass: Bass 低音 Sweep Direction Volume Sweep Direction Shift Register Width Channel1 to SO1 (Right) Channel2 to SO1 (Right) Channel3 to SO1 (Right) Channel4 to SO1 (Right) Channel1 to SO2 (Left) Channel2 to SO2 (Left) Channel3 to SO2 (Left) Channel4 to SO2 (Left) Wave Pattern The amount of increase or decrease in frequency The rate at which increase or decrease in frequency occurs The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. Square Channel 1 Volume The delay between step change Draw the wave here pluginBrowser no description 没有描述 Instrument plugins 乐器插件 Incomplete monophonic imitation tb303 Plugin for freely manipulating stereo output Plugin for controlling knobs with sound peaks Plugin for enhancing stereo separation of a stereo input file List installed LADSPA plugins 列出已安装的 LADSPA 插件 Filter for importing FL Studio projects into LMMS GUS-compatible patch instrument Additive Synthesizer for organ-like sounds Tuneful things to bang on VST-host for using VST(i)-plugins within LMMS LMMS的VST(i)插件宿主 Vibrating string modeler plugin for using arbitrary LADSPA-effects inside LMMS. Filter for importing MIDI-files into LMMS Instrument browser 乐器浏览器 Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. Player for SoundFont files 在工程中使用SoundFont Emulation of GameBoy (TM) APU Customizable wavetable synthesizer 可自定制的波表合成器 Embedded ZynAddSubFX 2-operator FM Synth Filter for importing Hydrogen files into LMMS LMMS port of sfxr plugin for processing dynamics in a flexible way plugin for waveshaping Versatile drum synthesizer 4-oscillator modulatable wavetable synth A native amplifier plugin plugin for using arbitrary VST effects inside LMMS. Monstrous 3-oscillator synth with modulation matrix Three powerful oscillators you can modulate in several ways Boost your bass the fast and simple way A NES-like synthesizer Graphical spectrum analyzer plugin Simple sampler with various settings for using samples (e.g. drums) in an instrument-track Carla Rack Instrument Carla Patchbay Instrument projectNotes Project notes 工程注释 Put down your project notes here. 在这里写下你的工程注释。 Edit Actions 编辑功能 &Undo 撤销(&U) Ctrl+Z Ctrl+Z &Redo 重做(&R) Ctrl+Y Ctrl+Y &Copy 复制(&C) Ctrl+C Ctrl+C Cu&t 剪切(&T) Ctrl+X Ctrl+X &Paste 粘贴(&P) Ctrl+V Ctrl+V Format Actions 格式功能 &Bold 加粗(&B) Ctrl+B Ctrl+B &Italic 斜体(&I) Ctrl+I Ctrl+I &Underline 下划线(&U) Ctrl+U Ctrl+U &Left 左对齐(&L) Ctrl+L Ctrl+L C&enter 居中(&E) Ctrl+E Ctrl+E &Right 右对齐(&R) Ctrl+R Ctrl+R &Justify 匀齐(&J) Ctrl+J Ctrl+J &Color... 颜色(&C)... renameDialog Rename... 重命名... setupDialog Setup LMMS 设置LMMS General settings 常规设置 BUFFER SIZE 缓冲区大小 Reset to default-value 重置为默认值 MISC 杂项 Enable tooltips 启用工具提示 Show restart warning after changing settings 在改变设置后显示重启警告 Display volume as dBV 音量显示为dBV Compress project files per default 默认压缩项目文件 HQ-mode for output audio-device LMMS working directory LMMS工作目录 VST-plugin directory VST插件目录 Artwork directory 插图目录 FL Studio installation directory FL Studio安装目录 STK rawwave directory STK rawwave 目录 Performance settings 性能设置 UI effects vs. performance 界面特效 vs 性能 Audio settings 音频设置 AUDIO INTERFACE 音频接口 MIDI settings MIDI设置 MIDI INTERFACE MIDI接口 OK 确定 Cancel 取消 Restart LMMS 重启LMMS Please note that most changes won't take effect until you restart LMMS! 请注意很多设置需要重启LMMS才可生效! Frames: %1 Latency: %2 ms 帧数: %1 延迟: %2 毫秒 Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. 在这里,你可以设置 LMMS 所用缓冲区的大小。缓冲区越小,延迟越小,但声音质量和性能可能会受影响。 Choose LMMS working directory 选择 LMMS 工作目录 Choose your VST-plugin directory 选择 VST 插件目录 Choose artwork-theme directory 选择插图目录 Choose FL Studio installation directory 选择 FL Studio 安装目录 Choose LADSPA plugin directory 选择 LADSPA 插件目录 Choose STK rawwave directory 选择 STK rawwave 目录 Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Paths 路径 LADSPA plugin paths LADSPA 插件路径 Default Soundfont File 默认 SoundFont 文件 Background artwork 背景图片 Choose default SoundFont 选择默认的 SoundFont Choose background artwork 选择背景图片 One instrument track window mode Compact track buttons 紧凑化轨道图标 Sync VST plugins to host playback 同步 VST 插件和主机回放 Enable note labels in piano roll 在钢琴窗中显示音号 Enable waveform display by default 默认启用波形图 Smooth scroll in Song Editor 歌曲编辑器中启用平滑滚动 Enable auto save feature 启用自动保存功能 Show playback cursor in AudioFileProcessor 在 AudioFileProcessor 中显示回放光标 sf2Instrument Bank Patch Gain 增益 Reverb 混响 Reverb Roomsize 混响空间大小 Reverb Damping 混响阻尼 Reverb Width 混响宽度 Reverb Level 混响级别 Chorus 合唱 Chorus Lines Chorus Level 合唱电平 Chorus Speed 合唱速度 Chorus Depth 合唱深度 sf2InstrumentView Open other SoundFont file 打开其他SoundFont文件 Click here to open another SF2 file 点击此处打开另一个SF2文件 Choose the patch 选择路径 Gain 增益 Apply reverb (if supported) 应用混响(如果支持) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. 此按钮会启用混响效果器。可以制作出很酷的效果,但仅对支持的文件有效。 Reverb Roomsize: 混响空间大小: Reverb Damping: 混响阻尼: Reverb Width: 混响宽度: Reverb Level: 混响级别: Apply chorus (if supported) 应用合唱 (如果支持) This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. 此按钮会启用合唱效果器。 Chorus Lines: Chorus Level: Chorus Speed: 合唱速度: Chorus Depth: 合唱深度: Open SoundFont file 打开SoundFont文件 SoundFont2 Files (*.sf2) SoundFont2 Files (*.sf2) sfxrInstrument Wave Form 波形 sidInstrument Cutoff 切频谱 Resonance 共鸣 Filter type 过滤器类型 Voice 3 off 声音 3 关 Volume 音量 Chip model sidInstrumentView Volume: 音量: Resonance: 共鸣: Cutoff frequency: 频谱刀频率: High-Pass filter 高通滤波器 Band-Pass filter 带通滤波器 Low-Pass filter 低通滤波器 Voice3 Off 声音 3 关 MOS6581 SID MOS8580 SID Attack: 打进声: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Decay: 衰减: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. Sustain: 振幅持平: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. Release: 声音消失: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. Pulse Width: The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect. Coarse: The Coarse detuning allows to detune Voice %1 one octave up or down. Pulse Wave Triangle Wave SawTooth Noise 噪音 Sync 同步 Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. Ring-Mod Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. Filtered When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it. Test Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. song Tempo 节奏 Master volume 主音量 Master pitch 主音高 Project saved 工程已保存 The project %1 is now saved. 工程 %1 已保存。 Project NOT saved. 工程 **没有** 保存。 The project %1 was not saved! 工程%1没有保存! Import file 导入文件 untitled 有标题 Select file for project-export... 为工程导出选择文件... Empty project 空工程 This project is empty so exporting makes no sense. Please put some items into Song Editor first! 这个工程是空的所以就算导出也没有意义,请在歌曲编辑器中加入一点声音吧! MIDI sequences MIDI 音序器 FL Studio projects FL Studio 工程 All file types 所有类型 Hydrogen projects Hydrogen工程 Select directory for writing exported tracks... 选择写入导出音轨的目录... stereoEnhancerControlDialog WIDE Width: stereoEnhancerControls Width stereoMatrixControlDialog Left to Left Vol: 从左到左音量: Left to Right Vol: 从左到右音量: Right to Left Vol: 从右到左音量: Right to Right Vol: 从右到右音量: stereoMatrixControls Left to Left 从左到左 Left to Right 从左到右 Right to Left 从右到左 Right to Right 从右到右 timeLine Enable/disable auto-scrolling 启用/禁用自动滚动 Enable/disable loop-points 启用/禁用循环点 After stopping go back to begin 停止后前往开头 After stopping go back to position at which playing was started 停止后前往播放开始的地方 After stopping keep position 停止后保持位置不变 Hint 提示 Press <Ctrl> to disable magnetic loop points. 磁性吸附是指在一个完整音符的边缘吸附。 按住 <Ctrl> 禁用磁性吸附。 Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. 按住 <Shift> 移动起始循环点;按住 <Ctrl> 禁用磁性吸附。 track Muted 静音 Solo 独奏 trackContentObject Muted 静音 trackContentObjectView Current position 当前位置 Hint 提示 Press <Ctrl> and drag to make a copy. 按住 <Ctrl> 并拖动以创建副本。 Current length 当前长度 Press <Ctrl> for free resizing. 按住 <Ctrl> 自由调整大小。 %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 到 %5:%6) Delete (middle mousebutton) 删除 (鼠标中键) Cut 剪切 Copy 复制 Paste 粘贴 Mute/unmute (<Ctrl> + middle click) 静音/取消静音 (<Ctrl> + 鼠标中键) trackOperationsWidget Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. 未按照原文翻译,因为实际操作就是按住ctrl复制并移动此通道 按住 <Ctrl> 的同时拖动移动柄复制并移动此轨道。 Actions for this track 对此轨道可进行的操作 Mute 静音 Mute this track 静音此轨道 Solo 独奏 Clone this track 克隆此轨道 Remove this track 移除此轨道 Clear this track 清除此轨道 Turn all recording on 打开所有录制 Turn all recording off 关闭所有录制 vestigeInstrument Loading plugin 载入插件 Please wait while loading VST-plugin... 请等待VST插件加载完成... Failed loading VST-plugin 加载VST插件失败 The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! VST插件%1由于某些原因不能加载 如果它在Linux下的其他VST宿主中运行正常,请联系LMMS开发者! vibed String %1 volume String %1 stiffness Pick %1 position Pickup %1 position Pan %1 声相 %1 Detune %1 去谐 %1 Fuzziness %1 Length %1 长度 %1 Impulse %1 Octave %1 八度音 %1 vibedView Volume: 音量: The 'V' knob sets the volume of the selected string. String stiffness: The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. Pick position: The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. Pickup position: The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. Pan: The Pan knob determines the location of the selected string in the stereo field. Detune: 去谐: The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. Fuzziness: The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. Length: The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. Impulse or initial state The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. Octave The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. Impulse Editor The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position. 'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string. The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. Enable waveform Click here to enable/disable waveform. 点击这里启用/禁用波形。 String The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. Sine wave Triangle wave Saw wave 锯齿波 Square wave 方波 White noise wave 白噪音 User defined wave 用户自定义波形 Smooth 平滑 Click here to smooth waveform. 点击这里平滑波形。 Normalize 标准化 Click here to normalize waveform. 点击这里标准化波形。 &Help 帮助(&H) Use a sine-wave for current oscillator. Use a triangle-wave for current oscillator. Use a saw-wave for current oscillator. Use a square-wave for current oscillator. Use white-noise for current oscillator. Use a user-defined waveform for current oscillator. visualizationWidget click to enable/disable visualization of master-output 点击启用/禁用视觉化主输出 Click to enable 点击启用 voiceObject Voice %1 pulse width Voice %1 attack Voice %1 decay Voice %1 sustain Voice %1 release Voice %1 coarse detuning Voice %1 wave shape Voice %1 sync Voice %1 ring modulate Voice %1 filtered Voice %1 test waveShaperControlDialog INPUT Input gain: OUTPUT Output gain: Reset waveform Click here to reset the wavegraph back to default Smooth waveform Click here to apply smoothing to wavegraph Increase graph amplitude by 1dB Click here to increase wavegraph amplitude by 1dB Decrease graph amplitude by 1dB Click here to decrease wavegraph amplitude by 1dB Clip input Clip input signal to 0dB waveShaperControls Input gain 输入增益 Output gain 输出增益 lmms-1.1.3/data/nsis_branding.bmp000066400000000000000000000230161247673406200167320ustar00rootroot00000000000000BM&6(9!  9F%9O=M#BT@O&EM0EL69]=Z AN4AP.GL=HLD=ZES2D\JQ;9dHX%GW-CY*>c E\#BaMPNCiJdIaCa"Hh QSRBgN_,Ma'Fd&SZDO_5TXOQkPh%Jp Of.Sc9NnLk"Tb@DpAs\g8UcHPyZ][QqOn&Rh:JxYk8Vo-Ms$Qo2\o2WyP_b`Vv!`iKagWcn@K ^p=cjTP~U}!`qFJ bqOgm^X&PjtNUjmkU.]K gvTSH_ QotkpyZpvfHrus``[Qt|etyp_/ZSS x}tVN g+|}}sNk1b$|m%fMT`!FZ fL P [ m4Tp*ZbnJPy%SGeW"q:ko(`T|*N$JZ(iSc#TQ)qhz8m"},s#Vb _\)kh-b5e'b3jl3o#}<d#j0nw4g)r<i-Eu0q'k0;p#m5Ar'o8w3}KM|1w1RS{8WM.S?VX~>Z]FagB_bfjlL Qm 3i 7e m1VtQ-wHB Jof ^Ffú,?Z/vxN{dNþ ^$huע. 3A(ûXmrT|w %z+^APoxq"@^Fbx||x"@^Fbx||@^Fbu|u|t@^Fb|j"}@^Fbx|k"y@^Fb||uxx"@^Fb||uuxuo@iFbu׏&FPyuf)S0{Tu}xJ 9l'nKh}||T9ֈ,c6/v}u|uW9گ=On"Jy}||]9УX8[VvW9B*>yW;(vW97y]97W97])7J)7J 97b 92b97b9{(~b9{#2b9֡: 3Z7zg9" Qm$.g9l m1wg9R{BVb#:3ZDw(\EXp Q{$tþfcr9pl m1wþtKc5MLYàþ78U:+ ?dDǫûzPnE=" .ǫêz_[r'sX`Ǡǹz(Cc5ळǠǷ>)UHƳǪǹanEedzƫt[n9lªt(I[,ƹG!IMŸ`c lmms-1.1.3/data/presets/AudioFileProcessor/Erazor.xpf000066400000000000000000000063561247673406200226310ustar00rootroot00000000000000 lmms-1.1.3/data/presets/AudioFileProcessor/Fat-Reversed-Kick.xpf000066400000000000000000000031121247673406200245200ustar00rootroot00000000000000 lmms-1.1.3/data/presets/AudioFileProcessor/Kick-4-your-Subwoofer.xpf000066400000000000000000000031011247673406200253370ustar00rootroot00000000000000 lmms-1.1.3/data/presets/AudioFileProcessor/SString.xpf000066400000000000000000000105231247673406200227470ustar00rootroot00000000000000 lmms-1.1.3/data/presets/AudioFileProcessor/orion.xpf000066400000000000000000000063421247673406200225100ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/000077500000000000000000000000001247673406200171245ustar00rootroot00000000000000lmms-1.1.3/data/presets/BitInvader/alien_strings.xpf000066400000000000000000000043071247673406200225100ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/beehive.xpf000066400000000000000000000032621247673406200212550ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/bell.xpf000066400000000000000000000031021247673406200205550ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/cello.xpf000066400000000000000000000042731247673406200207470ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/drama.xpf000066400000000000000000000043031247673406200207270ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/epiano.xpf000066400000000000000000000032741247673406200211240ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/invaders_must_die.xpf000066400000000000000000000054361247673406200233570ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/pluck.xpf000066400000000000000000000043241247673406200207640ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/soft_pad.xpf000066400000000000000000000042751247673406200214520ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/spacefx.xpf000066400000000000000000000036011247673406200212740ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/subbass.xpf000066400000000000000000000043351247673406200213120ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/sweep_pad.xpf000066400000000000000000000031231247673406200216110ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/toy_piano.xpf000066400000000000000000000043051247673406200216460ustar00rootroot00000000000000 lmms-1.1.3/data/presets/BitInvader/wah_synth.xpf000066400000000000000000000035001247673406200216450ustar00rootroot00000000000000 lmms-1.1.3/data/presets/CMakeLists.txt000066400000000000000000000001521247673406200176330ustar00rootroot00000000000000INCLUDE(InstallHelpers) INSTALL_DATA_SUBDIRS("presets" "*.xpf") INSTALL_DATA_SUBDIRS("presets" "*.xiz") lmms-1.1.3/data/presets/Kicker/000077500000000000000000000000001247673406200163055ustar00rootroot00000000000000lmms-1.1.3/data/presets/Kicker/Clap dry.xpf000066400000000000000000000065031247673406200204660ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/Clap.xpf000066400000000000000000000057571247673406200177210ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/HihatClosed.xpf000066400000000000000000000035101247673406200212120ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/HihatOpen.xpf000066400000000000000000000035121247673406200207040ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/KickPower.xpf000066400000000000000000000036171247673406200207310ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/Shaker.xpf000066400000000000000000000035071247673406200202460ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/SnareLong.xpf000066400000000000000000000034771247673406200207270ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/SnareMarch.xpf000066400000000000000000000162331247673406200210540ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/TR909-RimShot.xpf000066400000000000000000000036151247673406200212030ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Kicker/TrapKick.xpf000066400000000000000000000036151247673406200205410ustar00rootroot00000000000000 lmms-1.1.3/data/presets/LB302/000077500000000000000000000000001247673406200156175ustar00rootroot00000000000000lmms-1.1.3/data/presets/LB302/AcidLead.xpf000066400000000000000000000047561247673406200200000ustar00rootroot00000000000000 lmms-1.1.3/data/presets/LB302/AngryLead.xpf000066400000000000000000000044741247673406200202150ustar00rootroot00000000000000 lmms-1.1.3/data/presets/LB302/DroneArp.xpf000066400000000000000000000034751247673406200200610ustar00rootroot00000000000000 lmms-1.1.3/data/presets/LB302/GoodOldTimes.xpf000066400000000000000000000033241247673406200206710ustar00rootroot00000000000000 lmms-1.1.3/data/presets/LB302/Oh Synth.xpf000066400000000000000000000035031247673406200177730ustar00rootroot00000000000000 lmms-1.1.3/data/presets/LB302/STrash.xpf000066400000000000000000000062421247673406200175460ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Monstro/000077500000000000000000000000001247673406200165365ustar00rootroot00000000000000lmms-1.1.3/data/presets/Monstro/Growl.xpf000066400000000000000000000136731247673406200203610ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Monstro/HorrorLead.xpf000066400000000000000000000110421247673406200213140ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Monstro/Phat.xpf000066400000000000000000000072761247673406200201650ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Monstro/ScaryBell.xpf000066400000000000000000000105451247673406200211420ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Nescaline/000077500000000000000000000000001247673406200167765ustar00rootroot00000000000000lmms-1.1.3/data/presets/Nescaline/Chomp.xpf000066400000000000000000000040251247673406200205640ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Nescaline/Detune_lead.xpf000066400000000000000000000045651247673406200217400ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Nescaline/Engine_overheats.xpf000066400000000000000000000040141247673406200230010ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Nescaline/Fireball_flick.xpf000066400000000000000000000045751247673406200224200ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Nescaline/Mega_weapon.xpf000066400000000000000000000040331247673406200217370ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/000077500000000000000000000000001247673406200164715ustar00rootroot00000000000000lmms-1.1.3/data/presets/OpulenZ/Bagpipe.xpf000066400000000000000000000045461247673406200205700ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Bells.xpf000066400000000000000000000037711247673406200202610ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Brass.xpf000066400000000000000000000037671247673406200202770ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Bubbly_days.xpf000066400000000000000000000040061247673406200214470ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Cheesy_synth.xpf000066400000000000000000000040011247673406200216500ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Clarinet.xpf000066400000000000000000000037731247673406200207630ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Combo_organ.xpf000066400000000000000000000045521247673406200214430ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Epiano.xpf000066400000000000000000000037701247673406200204320ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Funky.xpf000066400000000000000000000045421247673406200203110ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Halo_pad.xpf000066400000000000000000000037771247673406200207350ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Harp.xpf000066400000000000000000000045441247673406200201110ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Organ_leslie.xpf000066400000000000000000000047541247673406200216250ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Pad.xpf000066400000000000000000000037701247673406200177230ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Square.xpf000066400000000000000000000045451247673406200204600ustar00rootroot00000000000000 lmms-1.1.3/data/presets/OpulenZ/Vibraphone.xpf000066400000000000000000000037731247673406200213170ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/000077500000000000000000000000001247673406200164575ustar00rootroot00000000000000lmms-1.1.3/data/presets/Organic/Pwnage.xpf000066400000000000000000000163161247673406200204260ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/Rubberband.xpf000066400000000000000000000043421247673406200212470ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/organ_blues.xpf000066400000000000000000000037061247673406200215040ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/organ_risingsun.xpf000066400000000000000000000037171247673406200224150ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/organ_swish.xpf000066400000000000000000000037141247673406200215260ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/pad_ethereal.xpf000066400000000000000000000037311247673406200216170ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/pad_rich.xpf000066400000000000000000000037251247673406200207560ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/pad_sweep.xpf000066400000000000000000000037101247673406200211460ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/puresine.xpf000066400000000000000000000036771247673406200210450ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Organic/sequencer_64.xpf000066400000000000000000000037151247673406200215070ustar00rootroot00000000000000 lmms-1.1.3/data/presets/SID/000077500000000000000000000000001247673406200155145ustar00rootroot00000000000000lmms-1.1.3/data/presets/SID/Bass.xpf000066400000000000000000000042541247673406200171300ustar00rootroot00000000000000 lmms-1.1.3/data/presets/SID/CheesyGuitar.xpf000066400000000000000000000062631247673406200206360ustar00rootroot00000000000000 lmms-1.1.3/data/presets/SID/Lead.xpf000066400000000000000000000042551247673406200171060ustar00rootroot00000000000000 lmms-1.1.3/data/presets/SID/MadMind.xpf000066400000000000000000000072571247673406200175570ustar00rootroot00000000000000 lmms-1.1.3/data/presets/SID/Overdrive.xpf000066400000000000000000000072441247673406200202070ustar00rootroot00000000000000 lmms-1.1.3/data/presets/SID/Pad.xpf000066400000000000000000000042551247673406200167450ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/000077500000000000000000000000001247673406200203705ustar00rootroot00000000000000lmms-1.1.3/data/presets/TripleOscillator/AmazingBubbles.xpf000066400000000000000000000042141247673406200237750ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/AnalogBell.xpf000066400000000000000000000042171247673406200231130ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/AnalogDreamz.xpf000066400000000000000000000041221247673406200234520ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/AnalogTimes.xpf000066400000000000000000000042041247673406200233120ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Analogous.xpf000066400000000000000000000042151247673406200230410ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Arpeggio.xpf000066400000000000000000000030261247673406200226450ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/ArpeggioPing.xpf000066400000000000000000000042111247673406200234600ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Bell.xpf000066400000000000000000000052011247673406200217630ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/BellArp.xpf000066400000000000000000000041701247673406200224320ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/BlandModBass.xpf000066400000000000000000000041101247673406200233740ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/BrokenToy.xpf000066400000000000000000000062631247673406200230320ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/ChurchOrgan.xpf000066400000000000000000000037711247673406200233220ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/CryingPads.xpf000066400000000000000000000051321247673406200231530ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/DetunedGhost.xpf000066400000000000000000000052371247673406200235130ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/DirtyReece.xpf000066400000000000000000000110251247673406200231450ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/DistortedPMBass.xpf000066400000000000000000000042031247673406200241150ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Drums_HardKick.xpf000066400000000000000000000130201247673406200237350ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Drums_HihatC.xpf000066400000000000000000000041101247673406200234150ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Drums_HihatO.xpf000066400000000000000000000041101247673406200234310ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Drums_Kick.xpf000066400000000000000000000040761247673406200231510ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Drums_Snare.xpf000066400000000000000000000041031247673406200233270ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/DullBell.xpf000066400000000000000000000042001247673406200226020ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/E-Organ.xpf000066400000000000000000000040421247673406200223370ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/E-Organ2.xpf000066400000000000000000000051131247673406200224210ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/ElectricOboe.xpf000066400000000000000000000072701247673406200234540ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Erazzor.xpf000066400000000000000000000142231247673406200225450ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/FatCheese.xpf000066400000000000000000000041411247673406200227360ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/FatPMArp.xpf000066400000000000000000000041761247673406200225310ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/FatTB303Arp.xpf000066400000000000000000000041571247673406200227470ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Freaky-Bass.xpf000066400000000000000000000033241247673406200232200ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/FutureBass.xpf000066400000000000000000000042121247673406200231710ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/FuzzyAnalogBass.xpf000066400000000000000000000042141247673406200241720ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Garfunkel.xpf000066400000000000000000000102121247673406200230210ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/GhostBoy.xpf000066400000000000000000000105701247673406200226500ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Harmonium.xpf000066400000000000000000000042101247673406200230430ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Harp-of-a-Fairy.xpf000066400000000000000000000034661247673406200237020ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/HiPad.xpf000066400000000000000000000034511247673406200220770ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/HugeGrittyBass.xpf000066400000000000000000000041041247673406200240120ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Jupiter.xpf000066400000000000000000000041721247673406200225350ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/LFO-party.xpf000066400000000000000000000040641247673406200226700ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/LovelyDream.xpf000066400000000000000000000034671247673406200233440ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/MoogArpeggio.xpf000066400000000000000000000040601247673406200234660ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/MoveYourBody.xpf000066400000000000000000000041551247673406200235170ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/OldComputerGames.xpf000066400000000000000000000120641247673406200243240ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PM-FMstring.xpf000066400000000000000000000051321247673406200231530ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PMFMFTWbass.xpf000066400000000000000000000072351247673406200231070ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PMbass.xpf000066400000000000000000000106341247673406200223000ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PercussiveBass.xpf000066400000000000000000000057351247673406200240620ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Play-some-rock.xpf000066400000000000000000000053711247673406200237170ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PluckArpeggio.xpf000066400000000000000000000040551247673406200236470ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PluckBass.xpf000066400000000000000000000061061247673406200230010ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/PowerStrings.xpf000066400000000000000000000070521247673406200235610ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/RaveBass.xpf000066400000000000000000000040651247673406200226220ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Ravemania.xpf000066400000000000000000000041351247673406200230150ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/ResoBass.xpf000066400000000000000000000041361247673406200226340ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/ResonantPad.xpf000066400000000000000000000042021247673406200233230ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Rough!.xpf000066400000000000000000000041131247673406200222330ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/SEGuitar.xpf000066400000000000000000000127401247673406200225760ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/SawReso.xpf000066400000000000000000000041531247673406200224750ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/SpaceBass.xpf000066400000000000000000000035561247673406200227640ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Square.xpf000066400000000000000000000040231247673406200223460ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/SquarePing.xpf000066400000000000000000000051111247673406200231630ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/SuperSawLead.xpf000066400000000000000000000061321247673406200234500ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Supernova.xpf000066400000000000000000000133251247673406200230750ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/TB303.xpf000066400000000000000000000040341247673406200216430ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/TINTNpad.xpf000066400000000000000000000063741247673406200225020ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/TheFirstOne.xpf000066400000000000000000000034541247673406200233070ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/TheMaster.xpf000066400000000000000000000050561247673406200230110ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/TranceLead.xpf000066400000000000000000000032311247673406200231100ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/WarmStack.xpf000066400000000000000000000075521247673406200230140ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Whistle.xpf000066400000000000000000000035301247673406200225270ustar00rootroot00000000000000 lmms-1.1.3/data/presets/TripleOscillator/Xylophon.xpf000066400000000000000000000031401247673406200227250ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Vibed/000077500000000000000000000000001247673406200161265ustar00rootroot00000000000000lmms-1.1.3/data/presets/Vibed/Harpsichord.xpf000066400000000000000000000100141247673406200211070ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Vibed/SadPad.xpf000066400000000000000000000100421247673406200177760ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Watsyn/000077500000000000000000000000001247673406200163625ustar00rootroot00000000000000lmms-1.1.3/data/presets/Watsyn/Epic_lead.xpf000066400000000000000000000221631247673406200207520ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Watsyn/Phase_bass.xpf000066400000000000000000000155071247673406200211610ustar00rootroot00000000000000 lmms-1.1.3/data/presets/Watsyn/Pulse.xpf000066400000000000000000000165231247673406200202000ustar00rootroot00000000000000 lmms-1.1.3/data/presets/ZynAddSubFX/000077500000000000000000000000001247673406200171765ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/000077500000000000000000000000001247673406200211165ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0001-Arpeggio1.xiz000066400000000000000000000042271247673406200240530ustar00rootroot00000000000000\[s8~ϯ`yO$0&0e6,N/d֗4lIG4-OI#铔E˪Z!.q⏛}Ϛvg=>;8WGQxx>ZO\<9(Ǐ8qehŴrEz]g_+G[T(^}&Xp8#SUkL63ΨsםtGD׳h:.b Sdmr_!YhE| %aq`6LĖzh:`*2h-4&0cI,6SMTt#;pgl,DbOT:fg]ԒP,qs*-c+|^'¿A#DQV[(rU1Afԟt*sY=(!?. \3&5j"'Z@2 "ѥ+YH[s  =)y:cڹAσ-d ,|e'7I-XeZpB+L) \)_s.:5=nACh@Ыt;tר|MOMm1_s~g|ֵ/D;n~A"l.hNՐ]84ﲼOs3\)F,LȖ\&i.4J$Q9WvlE_@[ЫzD?EMpOzדPLZ.[~f{:Q_]r(13&6K[3|UBCg56K+iAoi44_5[ԲR`hVm2L!*م[.Vʡ97-j`'l~ŭl`'׌ /!R҈ 75+~lFM #Tm-x^6$ٜPSnE%@lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0002-Arpeggio2.xiz000066400000000000000000000037001247673406200240500ustar00rootroot00000000000000[Ks6W;զڲ+ə LB`Iʱ}AH~M=b/|N?<˃G'g }q@ӫƇwN~sZӁOVW8NBa?Km'͞EwƝ ␜5B&/Wsht_) 4IUHhZ͕΃lF̴\BCNN[܁:eth8uo_B(~X7ab $\E_AcHQʔQcT-ģmppy&FߌR% 33N/K3-yvm{`CGۖ#Y2/H׈o=Q)myJ@Q(H )+#9Y6qhS$ luuG;7WPu,&r#>YbUn"#IVIoheUklmb(&K"%|K\:R  _hKeo{D ~V胶~=^:775:TLpQ㸫9nua`s/g98EBuCr-cJ ^F ]*( q dPjFhaJ&ܻOep'*E91'B1*MNTkWXcm A/$/2Ug=*+SY f0r^)v;>2 @Ǯ͒T^,y*7/%S2g,ThcM%]K̕L.Jc}R j6WasEa.j=TVܟk£W5ǁXA6N rk#ųTV5B,imX~̒V *؝܎ K*,on/Kb0g&$O)bH(hN2 wQmB9V(Xhxh?#VZ/ =Z;F-gհwh;lvU-jTټM6p9j5ٰ1ddS|g*v鰥#7϶=!Iv(JU}ŏ% dY!o[(!UH2c1A I">͆aE#^K#þ z-Uľ-,vlO):-q"9 q<0 6YY%MRѺ;m^}N+_v4f8Tي6 yPtJ1 HT-4s p]0,-f9A4^PR6"\<ΆEe |sD1{4ԅ`>ޱMj3ЬGiM_Ue57GDiE,( 8qip#j p{gᦟ mp3Th?F3 a47ic'H;ki?TvDR'fcBREP:xwEܽq 枷PV{&6o\ ,~:UO:WOr'N֓\'I$HzOL2nQ*Sy,t. Cyy&ŭSqSy^]lrf<_r"m͟g%Rf@;bkL%!Yf6zLD`S}Re廱VENIV-q[ [N*+ M|f]6r2Z7r*-Ҵx$l&6{W:T ˿M:t+""&6%+A\&"0SQbM޷n:9ڢib2lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0003-Arpeggio3.xiz000066400000000000000000000037371247673406200240640ustar00rootroot00000000000000[[S8~`Ns2CdL3 MBg/a+X%~"Hv]st|tnY:/Iy~hX:C~ruxxo/w+wC|;Wr ģɓ{lcOј? px@O>4||G|<^,cy1bG( !hKиzTDSHo^U0ҤOҙx ]7Zx1TuSw`8o>^?|<`6a@f3ϚP /9 e;O)"B* Rc3kAbg.cl.*F f47PB(~Xqŝ0JrP/cIEfE AMcwuR "E16]!5lK42|ҊK?$LNz0,GU;MC/`Jy]Xd/^!>HԵ:V({]']akROsz 1uOIYȖ<Z{پSQ3_8G0/̼-I$"2GӀ2ܳ7D{UlbC\|^O` >'YjZ+Z4֥c{$چ]jQ[ecgh4ixxщB#ǭ^e '570F\6Ŕ!C)%./M:kΒp2% dWOX.haR{KSK\q5_K%Ճu0FAϪSM„.~⇉e*b.[Ծ(fYxV־W6/YZYpv-tsk׮~fI_ R6wRteLB98&3B?棬X%2ҁ@'LSK87W:/("abܗnj/h44, B'+fCW`W!M:O4Z+UEIBMCIG3|Lx30c[#{|;/ [A<®cKB1cEd<ňE' _$V B\YVАfmmFCTaHk0riӺ_ EkxV ~MV6aJT´M*+!+&S>OEUZ kڰn1!rUVUºh*YJ9 KL:PBby ) 2M?~ FuCa%*[E%5SB*`߉T.]EFsoj`9䦢ʢFbƚ`#&Z t.vV نꔭu" P2*(A56fnU־lT]&B3yPsB4`R)p^9e*dɜp[VIf'Y]X~k;S^mY}';nnyG rg^T\؆CM6ۛ4Izި4Izs=uRETOs45^ UWzB=~}.ٗݛWW$9=R!3mFVe=lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0004-Arpeggio4.xiz000066400000000000000000000043741247673406200240640ustar00rootroot00000000000000\s8_$.!Sҹދ܂& ȶd4m ]KV+]||]^,Y*3Lƞeit]x7ף/ݳפ8?;]yWϧRKDTJΰ;}w /K?#_+ZOa@l5Ke"7ċ-\jIʃdP궞:B^ӐێI8C/;|LtYUR? }>?ttbE,]u%N]~QfO! g_2={HDW(\/q l<>BW/%j9gϛ3pdۼAz`b?ϱqMJPXx}kٌVL A'ml5LQCji4}RK@Ǟ]otcoN+kA^ڄPkK У^ѩ"ef"4U-] 2D1 8D,qȷ-4Rc?wL*c7b򂖞yf#`KR QҘ<9?]霨xBP|ZoćiS;~-wx(=ڕ?mbt'I+jRHh0t-g(F=xHI k/s7\"th+.๝5z;7HHӆؖ3 ?HySŔn88\nmس#@̓=$!a9ӹ}"~}K@!l4cGz׮,17Zvuo:.wG0 S7JyͱP 0H:̓wZTq$=~!YDk )g}IBGU'A+͹6S,bBl5?=BLִc!Wڶh rn5uU'u+#y5k'J_找IvNYx.NHw"|SCjU^"=(mFsVTתM~.W_٢Zt!lJ)N?޽'_gnyu5V+zt3c a#p"GgEeՎ֣f䐉ȱEbnڃքsΆڥАLXsEygk?y* I,w.&]y7ɻn;8nO&Wj:wu:/N:#Z{"(%)H{{۽E=HF$U=v0zQ8LzS1J"NVll #}8#Y d5uI԰[Z$j,Z$m,X8[Ygy[-cƞ޴7f*ٴXߴ|Ӯ)ôtltp6>cp2Mf45dǵk7[%wPlmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0005-Arpeggio5.xiz000066400000000000000000000041151247673406200240570ustar00rootroot00000000000000\s8~_=%gI2\Br@:{(X[}I2eLk򔌽ZK߮]K}|Z.Iy>PqޟTGg*w~]>vqߝK\C"x4rRa~z;ƽ] pxD|,Zzإ8bb.;JUȋ2B G8\- u 2L% cf M,M@ıFkѣMXj?7ndv+0 7Ϫ](W+y'2bHl-|N6!RJ|]8 _d+pU1ojFqs3<%qs\3&: L,W"Sd X.} jtjPhy0C .YCH|:ݛ272V,(2,[y$ :N Z1:XIjHeUDhjhOr؆3pSoBL]IIY°]/iHb!>I."VQ=k'E!Y h+Xx51R"\.|sjw'4ΥH 54 =+.^o2tb`ᘧ~ߪu:5`99 8?01 c4L/>2$k) x,xeYj5YȟK6h7iHJ=ÒdU\ {ȆK>u:0\&># Gz[5vIL᥃X߮e, Mk;zJidkqd~g]tï՜0_"/g\v!&}>&8&3?OJ~GyW4a$^#@fRE!Eq'_Et>YDvq_:)^8(me4Y9~T)MO4iO2#ɱwIh,9t6Ӏ35yFfLyk CAN!n7sBӉ%yMM #o>TH*TU&crW9h~Tag}W0ai;F"_0cd}h3b}n2c;yU17bL1J_h+Ub ~ }k@_B?&}mNa|uV5`{/Zˊ}e wUZ_@_f@_ζ-W~kт;Q~>Z8{eUqk}n|ֳF]qaǏ@֏pc]XNcCO.~@52- i.rwa[6:%³ܜfHWؒ_/ AWšzȶ{> ?֗.zdvQlKvy v{w]ߵujrϡc| ~bR5/G5:SwCwa7 GK/ɇ?븈~#:/Vծonܘ,#^%Q:cN-L@Y0 ROԙ ySC'Z{=MRSuUIh< CL .`lͳz+$ëxsﶿLIB: [ fp _DJ>*wHJ&VPdÁdOʸMxht%0YbE&ম5ЃV@D<ž඙ר ]qXP=zQ%dnFtHhY gfozQ!!Z ! |7 L"h4P լ ]%& ɂX]eO,d%tZRs l9m¤EtsH5 k-?^oRt`⨥1tX'5r#9P1 apŋ4ٚx,xKYn5(Z0Γ^?.5g$=UAWpHkZ.È @#YVvʉ ~X߮D`ǹo(6uđ>e~:MЇ[=*΀FtyL:>lSacxۈCAf‘X!|&l3: TIj;4,9E4Y:v!M*O4i'`efH*iAIτ<35nO $C>/z̹g~!$a֞"2|IbG!_(tYDaRS"̄%4.Y9w4%)ЕkN -&EZDg% =)=&E+1QJ m5.j%$$䢼a kn5Vb@r0GV0GG@P4R)wJ594K改&P(g, Ү TV0K. =(۔p'R#εhN5U1ȴhTMإU4SՀulXyQ:ݟT7TB(EPm3~uZ)ɜO͜vʼ%MjaT2C2\ZW(Z7V1byZ:(a`2IO 0l V&1S b.8 P+@CHryML ZSZ*9+ M&_XP`ms(zGcnh!rͤ8!6 rHCn+@n!פ焯)y~=ZȬ5 gUfݸ66=| ŕV1W  }^ob}kg[8w}?iaCl(+=^_%+F-ݲ+y䜳.Qh̷{%^r_c;B/:i>yo~X^n;2 ^"4`o._z[ceڰ9#:1 E郗9k'ICF›ފe!]`ݜEV_M/a^;q.Sz*P6j@jj@j_&LqTS8ӗ.{@SLE֯Izqh^ RRgw~Zл]2#oNEv?1[hJqLD}CRy5'3ud@_`a4L;3NͺNH404òWQ<"j7d uF:[f%//シvgާЍE˖=4YheͺU+z(}zceo*hV6oG7G?Wc1h+g6kZMڠO[Ll͜rrvW~xbSݦ[,uv mGlmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0007-Arpeggio7.xiz000066400000000000000000000064411247673406200240670ustar00rootroot00000000000000][s~_=EgvIi$EXr-n}!‹D^Y HB /~|8~xWc_efGGhvSk ]ag͂pA>]n'/p[Q#+AJ'M"tB؟E2)Pmj5nS{G^XV3%hWI7ɖOyl0T5[s?yar\o S#o°d~R;SfD0vn 8p'1ᒝ]>erey^-|^~UT67q2ml0!s[zN׽&eK?`J;` *3]nU8Uy+>;ԆBSXmqva[ )B5!cݾj`S I8J0}[.BXsD uV륟lsn6,zK ?>r0HipX䞉XA*ng8:s6\/ckSXR~OW'W^kl8jzWEѨ.tvJM;q4n$cmdU#m#|TGHQׯD3wT_Qt" v}m;4},KF !y4ClԬITjOe`͗z{ Ū33Pcz3#]$s(²ȍv} a@!,?C9c Cl810ؼqb as1gYW(1}|% ٨1H% K2JLQb ˿7yCgX31,̙`% ϳ9<)1}F3,(mJLafQb j֙bð{(1}F3,Tin(1253e%(1}I~6,ͧ-t~}~2ۻZ?ԔolW+E1_;>tT.M+Sm'EY#LWHU/ MZ5ډ+t_}}wr~!)eY l<\Sz-~ZeyKmԷz_GI5fsMX3^INR<>UX:vH kXتDum⍐*-ȳk0^CE6pEe!YPiY1mEɳ+[<-?tM ?9Ev:\dܲ63TȰ +IU <46%uz{y}u~V-/vXVjBe]+:ڜP+ruw:Nat5*ZY+(CT uCt,ZRNsQq*EvZO_N6@yGK hc{Juԝy1oT]LL.gz-lwI6yY@v빸sqE{./Ao%7ay FMĎ Iٺf'i*_/xI굜5\ҥ4 Yu, ̆Q) 5Z2%Y_$ۏ'qSJad'5ꨔqoԑ).1#SndrRY񹡒[n-%D&ៗd&bD_=B0!Tb 4Ys_ XUKXkAіslZ55^Unopܦ%#Iw+lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0008-Arpeggio8.xiz000066400000000000000000000040351247673406200240660ustar00rootroot00000000000000[s8 ߿{[JgpmcН{񸉁삓G۲M&bKɒ}~\.H=5>uϧݤwة}췫sϊv=o>p/>G%DLjM<)ptӝW#tv۽W44&Nj=Ah*ݱn3qFc.,ďh{>bx#^ R QH"8%I9W")q/|2|$Q4Qw4{CDlJƓݍ3`?ؖse]tf~9 ZJ~ o]N]+uLum0uDpqT2[+@<=m6^3$ì%(˦Ѽz1 !^ cHދORS8CU%@wi ջ&,2Fuf0):{;f-=(ްQG֙Tj# 2SApmv?$+*r])Ӣ:cn(6m ?;-?Mɜhg{GFi9/iytz̥:m_s \Sue۝.pAƐE`YZt@췵øӓ~lj+Kb@P[widbk"f?U0V*WMr&V\ŝI$M]BO5ɧYM2> T/w^L!/ӑfpIְ[CN }l&OK.DPr= ͉Y:4ȭ󁶳ad-e-0>dXe>>fd+hbF"V:I%EP1ckO[SJkV1c+JsJCŷ0oe\|+#m3n Wڠ+qU BE4Ty̩*vXي´F~Ud`)u^{w}m;p9~=vp/]O)9kqiº}j;=hvF}Y`9P4wOaْ}*U"7$-\rNh+X" KL@ uSOL@!kȱ+Nѓڄ/5f]UGN{Ö.`r gGݯj 2z~n{HDud#x|џhW=oa*ɨAz$3lbx7_dBͺ + ٦vv! A'pbB*OQX̄ik4}V^р|i&f zK>s (d: є j?Мg d@ӂMNPŻI_$5Qtpbe8 =Yjv(Z_i,B$˗U9 HO> <=C$蒼 lc0]%^缞q.]v]~  p'"a1?8VkCM#PK1ZFYȱ/j'14BJᆹ7v[ uHPl@߭A@BWnݦi 7(ok42l'npvOWw0 m.y"+wfȂ|X} XHj'HdbS\Xj|OrMvK915%A}7tG7㻾مOb">!uN" dk2bv2N?'6Ɋ@ĝʡ < T ![hk)D je'⟧p\rYf0N#WJ?ndAS$//,~mƫ ZB.^{+'L9]^$x >/e]2 s>],BIKݰIQՅ2w!}\I/R.沃1 1!ytRgX| "3ay0b([r(tlo_R^X+UHhJP UFSRrFIMCK=;V Xg3P,hy鉋&3OǣʰuANdU~p/~z2CIRL]D/s` &XImqD rVlϬmlh?l<hUxF.ZFYD?@ VDE*Uz\ehpiS_7ƠV53&,7;C\,*X0`VB.rmO@YL[(!T0U20X;6na+` +"޷2ڷ1D,U09䪢ʢBCk`{ÐDmEQ_ڶj@hUl$7Wq{l?ȍPԛ[FiXJMgPe ZTۤ_]4Sٷ*7$*.=Sd;[p;W1NQqH~oE]9Y Qh^8\ l4`ߪ1oMRE_n7V&gVZ֒*mO ,?msp@}KY rKo-79k_&Eܸ7k7Dzwn@&ި;W~ vWo[Iy75fʷ˴v,oQJ[*zC_Y[^{=h kՆ>Z{nz$??۠n[/>}vEg{hw<=q{GԱz]2vgy~@pU`YrV\,Wz5˝ ITr,#wvY٨.KD.H{s҃`пgD_">Ni#1*Gӣ  uS|j<Ȯjଇ6 o0 0gP;MQ4|x_&_hKkaɭLYFݎ %hza4=Xe|/sKl=\SDZQJ$)ض l bzlO)%Ѧ?lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0011-Arpeggio11.xiz000066400000000000000000000041361247673406200241340ustar00rootroot00000000000000\]s8}I`&IM`lY h,[Yۤ~e˲+`t-}Ib_]IKGR><-$=WGB'чݸ{ج|x췫m5mhuxw } ֊|Q5M{_K{ߟP U BxbO_2٪nMgT?z=Ls(z"ђȣaFŭu 2CSIYڐnڥu8v]nGߛ9Ujw78u<.D{_B)f~P{?CMB>Z/If#dLb^s\Y&Ĕh5#/Z#6PtTb"!e0閉\):)=eb]D:rx 8§0DZ&?u3f!!-}/NLQ]$bpFأ x"!(S?dNp(/$ܣL=R!h#Wh+eo밦[ty*~=^=[tWbdGZUĜH__-gcϧ>Tk %vb9@"aPG\2EF5&>XxhXq*Οw&XG7ïƊ']E^åm nҡ>&8"~_ V4[C AQl( " V_K״4ejڏ3cM5<ϴtp11/()BUF\yK3(25yS š]M - xy,0D3YZ)MQز;5HYSvxwÛAw3dI>,MZ|BTW݂J\\_69%MUFT'_#)ZJ>+1F9,ޖ`21Or %1SO 6Bv szwǾ7^%mllh4N lDL0WXGX|~Zq[ʡ`msFpsCƨ|ϝMv] rӷMrK|^ru5 gf|0$sà5.Xfq |8`(dʀl~1{ knfc x_C^o11*'_V?zz} u^# _[Wqd¤n'"6>yVZW>#W} Hrø?"oyláyn˄vK5ʄe9eB2\NsP/Y|&inHrٱv h]zQ^:3]ns9(AA." ;|l篹B1@ˇj̗P?8gm3f7~dJY\6ff Z"unTwB3Um1>Ԣ]6\Tc=Z{d'}D=gDvA!ޓQG[A7r&Y[顲q@%{AFdoo*lM3Gjڝ +lp@lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0033-Sequence1.xiz000066400000000000000000000036461247673406200240770ustar00rootroot00000000000000[ms8_{ LG̔r@:Qlb d"i%;$M>ګٵr]oH:lZcB-ve~1:5>^]v=.ܙoG>0 ġ#qUxC OoLpn0h:, yc]rٸ\[PM1{JF6塿&œSe?!ױEa8)9r"'rhKhT=*܆l "%N50$K^:["шcN-𭦪ƓbvkN3?l "O4{̰Cfnn\<7b(IpG[nq1NVG%r=(e Af4^ǎ}h%Jk[fĤLqYC70sPE =N1zPFheEA@bJۻ4B7ޚEY11 u Y{mz(Ja1VhUjT,rU"kR֖ ԮpzԱP!z ֜|6ow e@|#n9I|Y8 0-dw2̰5 8YzEl5!{/kv20Bcl!Q^/ϻL|{ sç}կk 6 oj}ތ;v6N r!%FAz!MЋ]D.Sgnj !9lg5Z=@`eG#FXbW@ hfyoN_hMrp>t $ݎjRб,]pl!eN+},D%2uYNQ/цKJLRP|tv$>Gh=#] &CMKƜHC>OCvu] /KzR USr8?Q YI<ǟS!gKfR2~8T-.z.Et>H'HQ?-YtJII*#V(k,QU6 &VMD_U k6S o}pgV. VUX!(\aXLR]ݒbdŅ*aQNnV!>G5C ,BX1TyXat:=3RxQ&+B5\9K ђY- # 9 0[-UQƗRJ+oh}n0w'o?Rmm -Өky}Y =w@757誥RU (7SJ=dQy@;&_5"FAeфL#Хwv ]+G_+hkd,ZsG 9QHfׁMԠ;O;UsCw&~4X4$h+q?߹y#tR-KRT&yfqsw_4ًF0Ea~MAX!ԇi/ͭ5ׁ^=u`YOs\4ׁz=ͽATOs4_;,TBx84.G"  .jJ$*5m}*R@#oZYHS(72Tg@ra94urgh+9O3,[j.2V5-"0H)=_eS졄v2zr#z0F3h%,Q5y.co 1lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0034-Sequence2.xiz000066400000000000000000000041441247673406200240730ustar00rootroot00000000000000\S8NBg9H$tBvJI+ٱhSK]K9d[s>7c<7ã^W[ߍ30Yx?88RyG6zTj=τ`=c#voqjPp2G1{uWyvpo`Bt Sm4)mSds0`:t K ٖi!(3AVH Gk!/s XD1ID Hm96XceXtSVh-F!u .|f8h8&.Zmz܁>>Yw&%欩>KEu4E,'KrI]`/s < 0Ja1$AJwQm1jZѲZHhogV*rqb.G6~!(L%^@ ZFJRseGƴ WX]8!&ZD)SbDl[P0s f?/m4S&fIRc% B )'i 7b+mr9$]XRTqsLm㐲6:_l,@Mʤ(.$}Lo&eO/ZҲ;vQf*nN( i&mж@C-ү#۰4)t3=UQ)D($"nO(/6h4("&q#Нac6?Gu-TLq^@n `E0GHhn1 }{p޷Csk!H8*"_cOP5dBq8P6Dm!~m¯Rd]Öq `Mg4uUn `ZoBO=_dUxGÎo`{,,={]݁/$vMl `2hB `')?O۰pl[+`ˋ pHр=)_>|,gqwnޗ訬*SVt3"ā Wsz3y8n 88٥d'yvUS.dzN5=l8Tllɵr6ɦJCp桾»Qje$ W)nLQV[2MDŽԠmHlmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0036-Echoed Synth.xiz000066400000000000000000000040751247673406200245230ustar00rootroot00000000000000[ms8_= 0%fr@:Ql܂2~͑NOmJ}vJ\}|]j[KƇfF}?͇Ǜ_&Ϗf,|ynߜ]G5zLk?qhL`=cµୃi:?'Ӈ|46CϮQ&>Dxԭ7lC`ft`,VYWvlG)2.dN}!rxРxD b 3t40 K^:Y"ֈcێ-uƪF|`3?l ""OoLk6t_5b({~rב!}I?mHf&w~]"h|T䮵kÑH6,H֌FsfMPpc1`d*:}%;`P(p&Quƀ68CoJ|XxfI3xx͟rsXeSЖ \ ڒk9dUZ"/B_%hh^.pe]ruW,.VD#{xK yG/nĝŃi'~h]xhg$t6Efb#?Ld/L7YFYsϧr(aYHI} -diķ} Lz = nh]'=ӯ%sŞO_ƆYBFKWy#D `"%l%xQp,C R!\·LJֳa`t %өIϝ 9`8geH^v|N"p@^\gK8 S9 ta804ҋ[_9_Dl0sکHO+I]Hz9Ռ[$E}ȵeS6Q#x6u6{f4%-E^W(6qvl2o5S"%4ݚRL-mpP ׷NDCR{%s,Ĕl)s8+VZ+չ-b VcSCi|2 5~y(43ЂQw+\&yYytOOހhS7dT4uܰv6 n}p+ * /oP,&J.nI@YL7b;*QĄ a}Q(ˆm!6G1} ,Ajjnc}6Oq-ImoG⓬s/hK,Y-# &p.a<(.7Zi[Ne 6_myPjso#UwNu@rFQm-ecu3 NfNv!J = 1` 8UYk~aKi$T9 TQ 'ADmߖj-Θ)e1zф$D-L+`ae<}q"9izw9ПQ^(M b#48ye{s²+qK5ȑV䜈C5c w񝿦wԎ⯽^ <6ܦ_[s(&;74U[Wo_N,E9qpnY>7Xǯˊ(Wd"8UॹY*Ы ,ij*P9턖 j^5B *Evah]oYx_${s84oQXyȏc!^49͎ngDM] >j.uT'@Ӽfْ{8[?mn@)&4"{qXHpnS$Df3yΛC 'xpWK"j31!*ON\gW--Ms $o` ".k3!$׈*vүK7lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0037-Echo FX.xiz000066400000000000000000000037021247673406200234170ustar00rootroot00000000000000[Qs8~񞂁@I3\Br@:h[X& d,[J68!^ۧZvWG$kXo[#Bû|t|xo7O:t~ >s}9ՆxI~lt;='!(ɻb՚=z&K?F!G$Z&Z&f:,đ5|$QI4An=CV3MIl>'s~<ݰ?ؖYR6mg>5wPe5;0V$D|MH ?V)?p&@AwYT1lZF}}M~Eb^u"Y⋑Ql;T,v &EI aCG);Asxyf&? -H9ix}{5]cb)V`C!%d8^Al,h-hjM%ba#!YZ b'R"IM%ԃ).QG~@=EOI(Xc(db( 4=78-d`2ϔ%C\{S`+%fEY*Z +4 ֥ N' ;/mk~=S^:57u:TDp^X~kYI rp)Fj Cp%kS%ZNf|}.Y՗@' kx& Mŧ2dMO'QL^ΊX¡ S,yRVekeٯ9Inӂ@Oϝ͒4XQGzΣpd_TDP)а(E"E#}Bց.J"| S ҉Gr,Ƚ{4WHMFX!5]V-kFԜUI͎HS:V񣱙 lJ< ڳprah`3s$Y®6Wve Փ8:6K v<5D.]8b( y+3km -2Mc Oe5fv1RC5gZV6\T:l+$Jec +S~& f#=U):!c`ZU}ŏK\ðpPV6\:PBby Ed܏WB6Mg&0 a ZiZ:Abo;^!_SEKoar5EE /65."WzREYvi=Ն3e}f2H߷狕1CcmR2"WƝJ8Zp`o 2)gbs͂+\|N癒0攝%)) R>CՁ')e193llLaw6-oeu@׼.9[Wϔ>AD_)fjT}\wU_۰E_AM.0ju5~jfLVu*yvE'/H Ws{v!֯2\H~::Ыg,Yz:PgFճzriy z=蔦:v3q{ flò 6py`Æ_3~"G!k9hPdj!gZ{P]XD?[UDu`-_YPFZi'=M.x4lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0039-Soft Arpeggio1.xiz000066400000000000000000000041271247673406200247610ustar00rootroot00000000000000[[s8~`yO !0&0e6,v_4--^_Wd ʹk&k`)o N?yMgoRlӮe Rmf 1{A,_u8/,VayC-FR3zV<ܥ>[A+!v6<ۆU" x;T#2jpXUߊ.,@fRE篨3gd 5PLM;(N@Phf|RUhݎU #r O+ ]S OB.~so.ǼYHH%mV=[h4Z- v :nh ! ӟ=ܕA1K}y#8k ?|ڷK&36.Ư∍n∍kf،uVʶš:GR/Re?#2-DAH;Kr_Y!YNMzT DV+bp_8Q|$~H--I$Bfj'2[j-i2],t9CL=.Dr£rT(ܸ~ڱ)A?y0s99Y>M$*;vM8@ɤ^2dYE(!~rHQ vU3PbG f(^(t9fБuF8Fa>qLץniX8aDa;D!T9QgnXLCz\hq: J\tZ'E:XcC}7i'fvˠ](ϾH'Vy&E(2 5;Bt)u{V=2W%u?,ߟuN8H CP]H/8bZaJ& k((IjuhNHYH hb?C0I9 mp!<עSMl /YZZj?f^?Fb_#gKƾGWz=ډ&19O ڸ] 2Bnh,b K0Tga8F0(@\e?E/AkEd l+l9MIEM'F'iY7xHnZKl: #g4)-G^W(5q@eb6M,s4\k\C2ΈNA5+ʦ{YBI:1UHFOsXp,*I%JQT*+Bޱ w5Z;eV~O7jrUm)*4#-'Њq뫴v]!y Qv-tÍl@;vTV5{ذ^1vu0=3+* V+~"(`!Y]ݒvT U,5B[)#t!6?H5 ,@jFI.<+a"h*kŚ$ME+ME>e^Y%ZrFXqy#h~;N#/š(MTemlzՃ FYYD"|{UƉ η_vM!#tVބeMt%NC0:bx{ceĩ$q]Srqe2(7:;D+t))ivMݵIgt~aKo@64>BUj_.lP|;z=Lv6y ګ_˻yKPΧ?ݮyC,zYG{X.~+{Avαa8in= k4e3M Ls874m:!LAx6L?; Eza^jڷG"[[sXZ]^!;N/=α YOSQdP u0S|-Z 0i*ǁDM dv/=b_&UiV[ݿF7lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0041-Soft Arpeggio3.xiz000066400000000000000000000037031247673406200247530ustar00rootroot00000000000000[mS6ίHK3M 4SHhnz.]pW_$d'^ػ+iٵO$^6fP˳l>̇g͏WGGL_:Y8:r{.j?qhHTqJqhĊi&?'ӻ|4|G[7(ve~pnhBqHl6^)-&ےULt?̹92;.~Fc;=q5$}u"D O0 bШZ+܄LłX=$ "EL/M@jım{𥦦[F|pgY0dwI$W3o5OK^R(ƺyUĕ$m|R̓Y>M(*Jz6PYe Fe4w Ǿlt#ǵ pW#n`0PlFFpjAG)n6T }Svhmx(wwM|lz}k|L)C[KڳhCQ7~Lb"tJ-b#4$7Yҩ2); G ڞKIežXsɼܛ*d!Z|Ieb"0#BN|++zXFYpePNfEY 'ieoO` vV|Sz&VwT҆?NP% N; Y= BJ Cl̓!ډb]ΎA8YCHJlUg."hJs b!N?2a(g9/  #[gٲ,_;A@Kp/M|Nj<,?T&2A('k&e6>!wPCNǭL0ݲ2,;@:$كI)7vDX8"K/(OR J:ON[~5Y ]k6dKj馕:y({Na %Ӄov(sce޳#< q"OB>ƏFx'.@:Ss6ך֋9U>MFf풺+_A $((yZ {a" w. 1ce,[5+\OǡBn0ri̮GR.^VSGV1vVi%)I%BRdQX ϝ2dOTT9L[uaVc\deʂ WX6(J!a@YY/f2ՁBKͷamQϚI_X!!@+lKLm<Rݢ Ulp,41Ȳh!P+~0\j<@O(]JYot`E+/h6Mƣǟ=_e[tyPhso+qVw63ahÅvg,Jg )x&h}e[i{) ~OY_|=VTi([8 ">G]xpѷ12/Ιyf a+Fe ÷oV8/&5L6"~&ZM1+wJPwʹUq;*v`N_%NM$r}5]>=%_C:{ܯɭT"ދO^}"ڭ=oď{V>Vo KyEu*d>rxiU̹Yz@:pgY>Y>3Jmv!;loۈw" м'Q! I"> djDJ=[_֋ˌn5?ixR/GZꤥSa-U!Q3/ҺrxԲ/kRUSF~j-]XRٍhǕiWD~`sز{c[|/ST]ldi?N,1lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0042-Soft Arpeggio4.xiz000066400000000000000000000042071247673406200247550ustar00rootroot00000000000000\s8~_!a&IK`r@:{(`sdlYJ$״ᩭv]}ZzZ.*$]߻ZپzwtVtoëɗn埵qqp1{GK*zyxCWv]UpRAo8L /Esh8Cxӧ_Qٚ{gEwQ;Ʃ?븈>ܐ徹r# ъ(ċZ::L|$ADCH饳( 8vck>tMuR0oI 2H$˱?*`Ef3oR(ƺzY+CI?ZHc0џd\+ w&C(e0-{[qqN`xa! qM=U02T0 t=􍬁FV $"_nզl:hk42dh@@+;ۻ0=M\ {E[K·hCQв7سƋxh^h1\qT) y Z0S!q=F0DWcݛ]W4 D{>=&yJ,D"a]/PNJVl⠀,y^@,\ea D|* u-lA,G,DW|Jͯk8N,xff%[vny ') BeƋ4ŚB.^nsbQ6^?"UbwF)@HԢ7u\})bbCjt}AK'?.!tɟe, 'ܷ F }WH$ɉe'RwC Ҽ׿[ԇK=* CLA}8"3?(.R}GZ+N ˈ! K(7]:,"a-bܗ.j/hv)j/JhKMIUaeJӆΓ)MIYIa$6 6V3Kfpﳠ11f̨;:+nIU>Wݝ-?YDgkw$OCH/Td,)Ʃ5Vġ%6.Yv4~XpPW5ih WiK<3@SMWDI*iM,J7K!+RH>4!ޠRLjZ.m[̃\4U4;~$(cЄ+(%q7ɘŅ Se)@h |&?| PX04l[9উMǜVNlXܝjbMe B4MWKqxeVEQ]ʦݪVFWu~v8_% |beؼj T[{k4]7>Rg)X-m69&)hTcv7Q0d5Lo[.V 6Q(GqcE^6hP(L OaߧoҎtdKYڭgi]@+^)w{=~c~gyin ,w dw w w|CfjKz,u^mԯ%"=\ Ҝu&!?Η Ij<ӓEKsjܑ ۪I{k,Afud5ONXAӨegiuZXi 3sZB=@BE%1Et2*d Hch(uq:p2`̀kv[}dFi7M*örUvg`f/M aHk85ĐVv>/?kjqݜP_@!GBlmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0043-Soft Arpeggio5.xiz000066400000000000000000000041231247673406200247540ustar00rootroot00000000000000[]W8W;XDs9*sv&':i*~SڐMZ(g+}&yire< t=zY>T+ڞea;nU?_]v3|V^ю_|/w/`ZK'Gr#G6 ?Vq2Ao8L=zޢB\V;7FsaE̞RZc5qwF;2=K"( 7Z*Íe| Q/ [Ad:%CSIDnhq8Ş<&bn`<=u2 v'WcoU:Of3;"P6u*-S0'a?PEaKρ-A(9̋XFfԟt*sY=I(!?.H\1 'v5L2P#=t)AV FVAH"O,ttrAyܠ䋖a6pto|,6Z)eѶh!lDF+ĦʒUbjshke-Ұ^SDUd MMX8XzԵQ-) C4 ؗ'Z@X;ڽw_'{nI$"aFإ8 (rL& ȂP8 HK [zfBd ,A(0Fn-v$=#Xyl]3zV< 3OՒyПvS99I(0c^L=dR⥿pT%FN3?>,pQ?ۣ+w)%G(آ7\˃b*״6LAHᑾV 5=B:R9&Ff>3Շtw("eYay ˃eyRmd*.5g]ٙeiK^khcj߲mH^uhm/C8"3/ȯJ UEYN4)V&ld&m=`.%zQ`G:qF6Z0uM{+S)N@3A}^n2bY+U*U3*;~PY>P|uG¶m5[h|8tČMMc_"4_~*:ЯǠIzt/Ў|޶NOw _U tʏmU^պ{x\?~#|3c}B!nU¡y~˄6I5ʄe9eB2\NsP/U"infvyz,dmm%Ld7A^OCq.Rj8<CsT~zhB-KG ص3Coah;,;jlkYz،4C3~T؎,ezNV3y3{ xmZi>n(G&1.m6"UBN$^Jz0ceiM X͊R"=/Am]9[6q惞$I%&[({?lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0065-Hyper Organ1.xiz000066400000000000000000000043071247673406200244450ustar00rootroot00000000000000\Qs8~xO@I2@Hz/d6i'c˒ViS{w]V\|x^KO\^rPs\:,?'w.\?wJiqF?'ջ ;Y/ϸOɃ*E8qi`ŴtW2wû7賿G7/Q M Ⰹ|ŞR\auQݷθ3> "( RFنJ EG. B 46Ʉ %CiN qb=yMħƬ+zxpe'3$4Qf( )E%&WYmo 2P(C6E*Pf]|^P1*RsH$P%K@rFq:jMP8pfjא& $q u\Kpt)J@({v Г`H)C }?j&s`/}w?dZ7g֖;Ĕ2gܳpا2U1%ķ\Q{eLҺټB[:Ӗg_xԵ-( 4Rx1BྣCxb!Bs#;~ED4nhheqD2T&odNp T!LfR6 ƞ)Zr=h#GlCez6bېMZ7ءixŨZ;HTN?Z5 (i900%!ZdhO'Nj(,v5 s贲DDu˸9aEu `$[VU%Y7DP0J 5#S:jIPnWTˆ|* .0X"nT1V9$!A+ma¾M'”j}#\RS fP J&Zi;x |-P:)KH cO%ݠ߻J1(p~uX7^u35ba),E/]ϓvSFMnkm֞!AZ*8˦S(*?jvX=(ct9te$إ)ϬdZ-մCkg,JI rƚ5[h4YpkʵlvbLe0(dgT3}2d!7;&"m$"Z{LDDֲ{"([KD^v$ZUXkZ~ _AW!|1|m vn?xkuc*uc_G?rۯU48lsgw^j~~V:lTP~^x^痴27;ي|wkx^秣yN͏8|+;^Y=xqNf ]Wv93ُ.~@p5,GE`Ys\8z1μa,ƹUۓk(aM #ZO {r _4p֣AmDpؙkC#2 C5:.+̅ 0ncLdwxy;Y{G ON{HqqɆE b%kQ.1-lpf\CM K0oY̩f)ۆ'-s0L`*#"wi)귟wZ'ڰ  ͊]-}TƚL?IOeairTZuK.TQ7 gҟvk{S?Mቜ| - SRQ(PFߝAPS6 ѩq2;rCMyBw`Zm."ͯZz oWv+tP`(sg8h<hḧs?S Ϳ {c[mOyNYpy~d≮!&L zZ6Q Z.ˆ4<^2aȊ LF0 'w +5]E0@(J.+PVMT&tt66d_5Uq: }[F~(YgL*Y ګzȸ4X0E1b]M-yuXq]FyZH?&p1Wѩ[HW,V ݖ,(#Mt=F>L*1 SW-Hќ-9ͦˉ+**FYA`8vݬpu1MFκd8 ĶD4!χ GL'S<,x!+W8$֦{H}aj1g.TvPDj{C>)=cZYtֳcW:xs_DblܰVV>| I3b4H_ʃU'Vnb_i1)4wtQ e>ÀS".=K@'ꍻ_룅 q2.+wF#C3oj:ZޛEFbcPXU د!88f++c0{!K,b|x8,/Nq.r(&m}T1d3jpN9[Q9jp-,~\Rb_#:\!]jD,QP$9k8]QZWFv%NjcTN4z2 ԇ:;Dpc7eQLp^M5JᕛfJ~pȱu:O.0_<sh/ho;>^:CxNDkMPzu& 5Շ&brfͮ'3' ^ˍ~#}zbm>tI^ a-%VA uT^Wf$'X[lΖmXm+c daxA2 3f kK`퐝-z#BP@h[|Udk :@U`T^K4ŗDŸFFe:Fgu| VUPv~'`+e}^7FrWAm Bv/)lmms-1.1.3/data/presets/ZynAddSubFX/Arpeggios/0068-Glass Arpeggio.xiz000066400000000000000000000041651247673406200250420ustar00rootroot00000000000000[ms8_=%@BLr@:QlnA% dd[J64SSZKϳZ矟#ǥjP˵:Oz˃߮Wow?+ڱq!<8R}K֪xP@p?•GU? GI8`\wQxI.w`E9bEĞRZc5uquF;se%~BKv{zkH 2@CЏţU 2KzñL%CMmN&7 ض]"b\uM7R0oI [2Hb?8*#׸微^nؔ"!+?|׌oz>~| V"$̏0~ Ջ ZGB/^z 'L!:d$x KSg.6\t%O hbJvu%6 #*ݮkr!4ϪS^0e-/, FS ٯy~ݖb#3"QL"ȵ7옑}ۣ!07AH _r dP pV6cxhCL:Z@2zQcG9dlm_:TNS&hJӄyմ_fCT6$jRmX㤑zf.&(MQw<tW< )<-}`.<s2=y> \e*iȘ9V3C4Wi @q"ҴK2&sVInq,,M&K^+Ri1iZ&s4mӴ}.nTurV[Ԋ%V,0o/Ye1Y#2#{nqVVf'Re}+:%r[|ZlZ`sW$?kɳF5tѵ-{-ŧ r)]k۔twӼM23X ,i.r2P/]D4f]=_ zD?1Eu&P:q!Fi7kU!yWUC]*jZ|Kċ8pWn1]8,ŐaIϻqXD0ލhJðvј$iP1 Kz#۞k [Mj'zmO`'赅mk{mۼ +zmk&&l/ ؙde1j MҾSyi;n䷡UR6=&ӣU-sʲm?4G2l|[;lCwu܄PC+?|׌oz>~| V"$̏0~ Ջ ZGB/^z 'L!:d$x KSg.6\t%O hbJvu%6 #*ݮkr!4ϪS^0e-/, FS ٯy~ݖb#3"QL"ȵ7옑}ۣ!07AH _r dP pV6cxhCL:Z@2zQcG9dlm_:TNS&hJӄyմ_fCT6$jRmX㤑zf.&(MQw<tW< )<-}`.<s2=y> \e*iȘ9V3C4Wi @q"ҴK2&sVInq,,M&K^+Ri1iZ&s4mӴ}.nTurV[Ԋ%V,0o/Ye1Y#2#{nqVVf'Re}+:%r[|ZlZ`sW$?kɳF5tѵ-{-ŧ r)]k۔twӼM23X ,i.r2P/]D4f]=_ zD?1Eu&P:q!Fi7kU!yWUC]*jZ|Kċ8pWn1]8,ŐaIϻqXD0ލhJðvј$iP1 Kz#۞k [Mj'zmO`'赅mk{mۼ +zmk&&l/ ؙde1j MҾSyi;n䷡UR6=&ӣU-sʲm?4G2l|[;lCwu܄PCzZ݇OUyؗzنcZ~7u>ո7zۯ9 4.(Qwˎ0XFG7hmlv햆:Mw6/zqV5e{o`IB! k nmN;g4#Y[EQ৚X* O\/\3;(io|hD| OR0+H#[:yj`b\yj8&w7ь qp FRNJ~lX$+Oyc{YG 1eeӹv-'sU4m혨iƧLLU.'U775˼G~lz|rY9h2Zak-|g12* 4Oγ3$#1!V9H(WWdu4NV1V7Un>8+rr68^*FQVaeы6&ً`l!pKZ-02X.稛K2GmYsBWqї]x11f?ױXMfY:C? o96fx3V Rʲq 8S`8+)z=_e}K Ty VAC;`'c4YUa}rqqF < |`ʽKy!t Ԃ8_$h !>lE K E$kkiF.2z_(ɂib2d$Ua%S'z؁p\::$(Ds t4/@ x5iwB;P@Zvdv4ydͥ)l?klxh<ʲs@,Ix,m H5 T .Q@VR5KPPF%L^J,y LI_ZCS1mҟGQOYDS%2շř6K6Nac@߰ĆKŶjJ9x,rɺ¢l?Ec !փg'x^+KM]Evd{(IUĢ,E7URJ*"P W;XXyZw)*Y_U?#*I3Dd1<>Z 厬Ly**p h4.䍣$5A:Yi٥E7?qT*2b,iKk˹p P^LeIr(qBRٲ`W[aLDxNή U5vUh5 T0e'#"i/+HūՁń0L(^/ 0<(=|&!j*w `}x}4[©}hGhI7~?//<_>!xcƛ2qh.Ge/̅eo4ځg8{ygOk~Z}7v,wMлKW7:m=$T SSu%\>(0H%VS]ɯTwS5/Po $M^0$pY.ssJz Yt|rXHa JA:@wJ:(|ov-~d.ҍ 3g&m4L?_ҴK*풹ԵUv xjuKr:$ieհ"'U*gx'~PiU/į(m?T|nZew sKHi[/.4|N4GZZJ\:~:DCu,6qkS|Uɫz1obgr[xe!)v,FUϐo0"/q@lmms-1.1.3/data/presets/ZynAddSubFX/Bass/000077500000000000000000000000001247673406200200665ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Bass/0001-Bass 1.xiz000066400000000000000000000033361247673406200222160ustar00rootroot00000000000000Z[s8~$J̔@:}(Xr}%|eᩩtt|AuG//ZwYw\M?Yz?Ї^;ח ~!FbƵ%VWZاiƝ[`|a.Z!|a-ф-;'A= (L@bi0?lvy>X>X2gv\B}?`$P5c64ӻwJ *g07axF~)YP0\)R f 5}sEA("7l'8J}?%s` #bبs{=]U&Y+ϝ4"1DO&^@7Ȕ=={+*@$ Kz![FV)iGcqHpb% X$d2Yazrf>YY_(H9I&0v H!h`"^䔦:3/KeȜ>J<-kT}軪ߞ)NGvmXޖin1_+BI8yüSdQ^`)"ahjӹ%bCC|>Z:LrHE$=3@V!KE4Bd۪3 ^;u\aK=l_Ct]݈J;F7ȞVϊ]u}ۮMܮuU,fyd_T)Z*Y/>]qkX =8_@c}02l}ZIM{UDsg i^Rz&ZģB]Z4_sORXM+bžyEk&x`iVH/m3׶b F {"ǖxta$)-pqFĘUg k1M -2M1em5 isYek);.=5|hU~[G zCRN kU_lgc;z'$W kdU kHVP#L}`D5$F.`a,A_Klb l9/TD+35Y 1B,8'r}рEFqLݖ&)؝>ǶUUv}Oo&рO'T ~.J㓃J}y^If6ʨ@+[I_e~Bx㓜 ճv{dC>0o_];,t.6mQh_Z3sn.lmms-1.1.3/data/presets/ZynAddSubFX/Bass/0002-Bass 2.xiz000066400000000000000000000034631247673406200222210ustar00rootroot00000000000000Zms8_=%&% 3I:̔r@:eE6$s>5Wg~z㻦@mMoIl=۞ŋ6$V~;w?Z쉃'g"ux # 6&&?'|40 wzD[L M?ݘ>~Ee[Ͻ zޣ97TYǃ/slG$*W;E / #¤zUKdq_UBBCH3K8c߱j:i4ͧϏxCL!.D3Fe7[0$6@{/XpwGlU(Ϸl=Q,cñ *%%Å!pK=GIP`m%oHk 6 > 8N>(p@6{}Ͽ(k "Jh<(M΍+u cBJN r}![@!1ր Yz9#gUK XLb\*Vju[Rc!ĶaE`qo,y5&Oel#o@;IzVv[".ddw2Ա7:|w 'YCFoWn-9IR^_hC5BazXW3sbJQ ,gP3Bv1Y p؈ĘAb0exEgA]BӱrmYAf v(,yCGP 5IʢoYTmdCCc7;VI!hRVd2RA A+?,B p\oIs)YqK^@Bh(?QW<6J}Jw9k[q:5M)G9H"yMQ3.ԂYɉDshUK lCىH]#70jMd5-$_u2꛵{Yyz[.#?FBE>}98@6J_BTx F1OˑK{2E=& /%muTKq˯1`c T L2LgJ)Z>neL97c(Xa(XaOA ZCa֠xRc)*+ ՁbB[sF&CBh#jKeaŠƖB( yXHOEXY9`[U PdXq}4hnZq9 қ>Nƣ~21F6-lfI巕U+Tr7Wud ʃyR*MR9*=vLU1Es>;JʈDCʇ/BgB {2iR&Ñ4v:ߏ蛅E][Uv 17SWQW|ΫV_j[^Rv'T/İg!Qt>Nsxi;U\z4ׁe=u [Os8\4Hz蓮qb_tnyD4^rt{`f ϔ췦TH஺{1zێU7Ы7q_Ufz}/lmms-1.1.3/data/presets/ZynAddSubFX/Bass/0003-Bass 3 _analog_.xiz000066400000000000000000000060641247673406200237430ustar00rootroot00000000000000KsFZv Ye;HTEzES^PJI@ 3 do==懟ON{xxsvNO݇\};m+>~~eTaştI엣ۙy}tst1'k+8pe}3WQ谣F9\;zalVa9$Y,yIàFU VzR_:mV_Sًܲ'ߝ;EW; ]|]gWu&,x?bAg-}$e&zOMU;% ,O"puPt̵43EMYQ-F>f&ܱY:VX{,]ϡ.Q4%{#.YmuNNU[zSV[QG&=A;_VVuS'ܩݎ*pLUӨ7j$K$j/4Ad31\f.*kK7T }ؐ >YZM "r%6)LqOA8yvyhlO\THvbӊ&WGWtƧOx uN>C]KqfX͏ˇv0ܗi/rѨTh4 Z5K3QUW]Ƭ ;NYtw1hq;Vi\T8#s3<<94m{Q9)R16/,a(k0tΆśM߯Ύgoŗ ~/tkJYE"q{-i YRJHI!)sR%]ߋW_ρH ?)'__wR֗_n+ZJ,OTQt5[?j5剈S@ZT-\FXC+V֘7rla}ySMUPGwQ䶫MW-k. ,$4ka:rL,HEduiy7 T]5.7tc_n..ώ<`&U$fRNV_|?YF6ARKDdzd2LJQfZOW5=L^{<7puw^a|s_+}㾹,rZq_ cg5Kݐƙ"șj],tkO: 'EtHwvA;µC6U5?AVg4v ^v5]mmWsv5gN,v5g/_s~s~U}V:B+~(U׎JNOgwq`T8K U׺W)F,1?TTnt^o}4~M>\&COOcn0}mlmms-1.1.3/data/presets/ZynAddSubFX/Bass/0004-Bass 4.xiz000066400000000000000000000034561247673406200222270ustar00rootroot00000000000000ZrH}W;Xl" * Di1#tdKm*Sb}t3ן?M.Mb]-m(SrR[57d[T8U),Y *b1MmXWf0|X =lB?}0ǚӯTҢm|'μND8"lA:F;-dF,9^|q@(se"b-EkĿ*Jܜۖ=w7~^mos6x:D0?,iepۆ$GHyQ |hTkh6 ^Cb] '{)G)F.^D GcBJS \ j1=2a#c5ˇa$ht;JIEDˁ]rӱmYUB*!Ee=H_V#rI!,Jk6155ީFN!UR Ɠ;ڈNveRJ#\?|Q)$hS($)-;m:IO }ȹ$֏suólԧtsߺSޔ(Id>)jƅZ0+H}jipB}L=;q:yf&VMӡ[ƜHK&Cvo]9`/K OBbKkd=GÈ]{N9 Qee<[BK;k9Su*t`#O̘ȥ=[ 'w RtT6pLd :Y%'vZGe $st|e-˧`"X. V* VXP7㝗R# c@1~dD&sBhcjKea ֖ Y|AO X(+25:k6 rQ0b+ a@|+-/UQmyޭY+n9 _t2L o?Rmmq9V^h˞<&~*EꠂUҞۯ0祐ˇiG) OY_x=ah([; @\g&)nW~"#X7nCS$b7&7}ЭR~basjSy5ȔrlW)etr"SzRBrN_jO\]a< ~TKhKebWW|ny$^ٝPnw|;E1eKs/:Ы,iz:PW#if^*e~ih_3^•.hr.! UwT#Főgn.M<6_DյI_5.lmms-1.1.3/data/presets/ZynAddSubFX/Bass/0005-Bass 5.xiz000066400000000000000000000033561247673406200222300ustar00rootroot00000000000000Z[s8~CIL%flY h[[,ym9 ~%|lg7O!ѹ;ǺnPl9OZG{cn1:>o}|ⷫp=k?OGwP8I̸HI-m` e 8s_XPhqNߪhk;}=\<PwlZUvfT!Km;-˳"e~OWR8g_28ղbp-_*nWDh| oz`&@Uc{ÃH\ 'W!VRUG h J stN{)@$(ѬCZd]wT@oR˂Fkn}a͊XFo`jҚd0Z,tL[m[. p|\ eU=gX2Dͬ ﳉup TXLe-]x30knYy˺9\%U%'|@ YCp2}i %jZDZytI"֋?g͋z/׉e6\l9vKD"\HMRt8PD N #]@F4`Q,EץI 2*v,k#;'v_d"5>٧zUkdY8beI Wi2+Zd{)x'ꮯPHuCYO3*(huZ)ӗk)T66ҳ[oX%dR&9T^<L-z0etN2SyR bn_+߰x°,qRM,uBR"uC*Z[&A{>=h3V|#YD|RtA>yW3^3Mܲ&.یswnƹ7| qgm|ATh&zQ^:sx$ųݥ4FptƠ)B'uڿB|"qտjQ"p.lmms-1.1.3/data/presets/ZynAddSubFX/Bass/0006-Analogue Bass.xiz000066400000000000000000000034501247673406200236130ustar00rootroot00000000000000Zs8_$ f\9 h--l2Ч N\.O!j_Z7=Aai|8k6||xzxwrr`ҟ}4mq϶gb ;N=&{ cNad"p@xۤGdЛ&c_C}nAd t!)-JY?f&xM{ܜRa>ϱ@d\t(H{jhQKdq+\h"QHKk=uB~!Zl;b[MET#Ƴ3g?t4D2%h0tU`ݴR 4uu{%#YlTXxX%}hʸy-sJdS'dYhn>4y$ap@R'fa/I5xt0Qx+)&"m@|.0ReG7m!UrSGAin|[wr1W\)Ao9d ֣J P!"R#dᴺT*DIRtKEjxՖ6c!ĶaE`q+Յ1'!m0"$I[ IG:P-dFyH:#^El=`-{kNPy _τjNu-o$u`~tR_Bem^!z9$ XQ]@S3^:$֕ሓ=g#ViHZ>&,s!s4S'sZ?lDb5+'0B@"4:JIIDˎ]rñ9iz*!]U"(,yՈNe0*c %5BYq.]$dJptO !cH']Q@O$h%SrΔ 9qӑ!+$AFfV̸.jǂ>uQOuUӔ5j]";ZҤyzy谄?#1`,Ģ55gqo4r˘)d7kؕS[Qc-maPLY v$KoN>Qae8[BK;k9CeJtj#ϘҲҊ5GRt\U6ɨ\Ay%w^").dGFCL2LJ%bk`;ϾHh.V*VhnP8(Tnɂchň*Ql@gɼ蜣:#aPIof& I!nS`A?Ke"SB"҂FC@ġ"R%iz)іWܲq.7}Gd0F6-:zV.O>bd ʳPH`P-H:aDԒ30Bќ}yu}l}=AkSx<ٓ$^#91vbzQ޸ɲ xr՟ #kECr>;m^/5$ FyllK]?uҿgd)"hHċ ǣ8L|U:5̑PBIwҹAnsj;i8&7Wh-DrߥhI4NZ$ʢ<+w?ubH:@wcSa })VD r!~X U3쫆6R\"%ۥ56nB$,[# JV!!b%q 7SN7)hLf_5@,~Rr8(M` I]wCZQu[#Xl8^&H_%YwəXIVebGhlJ-gQD YlG_Cw2fĿdxi~E;8(`72XN;' tKBd4q/eq(K"c>q:z!OoDm>}SejcML[؊8uhq`Bp9͑@Ørh4T/1m _-81UpxJ}.[*U e:$.Ћ+c..ݵz8N@È$L6:JŃJ-߶+ 4Uvw("eՇR ,<(x>#+weu*ŭB0^E8`:@ѺR Q EqhZ*%'8)8i0_N}8Ώ3Nf[Oas_S^;RԴULe>*Qղno}',W+lU+{D 4RzqXrPV^s@ )q?hM۴KH⨆9pzc4yZ"_-*K^Z_t{b-ؗ(K[mU k-['W<ߜ0V޺EPoЗﴊd37+=ŮP+-ޤN WFڎJSvؗ8?oT.^!CyQ`?b麾L7Z6, 0)TuٛeM*w2%d&SՄLLYLiK)_KN;eO?K-.GҙV|΋Vh3Vv|Hx;YQъx!&ڼ^w?i/ë @:diz@n$f=/UBz<.g"Oxfy bL.']mGQ|YVyâEix0JÃexP\mV\:eć ønC9Ea@ ]p)p7X裥\N-4eg;Ȋ>/ wg+L~o*4Q4!TU8qanZag.U$,@ҠHگ(KŔ\Qd 0 P%[)hFr3%RZf 2KSS>`N{?Pe, d=P'5 -(URR]E0l%ڛQ?w9B"- ̺{<%#WK~|Uh3]H@]"+l"X:JU c!*]W] Ց4K'HIJϕԈLj)]V&LԆc]`?"UK:PljZ!*[z??r5꘻R ;RrtOOTV MtBj&g~ ^ق ^ _iv*:rAaTb *>]!1֋A3@Ĩ6wk4Hlv%6RVwRSo+ _ۜ?-]W7h]tsXaVv6;n%?.΅k?ٱr]Rѣ+v||yd<\u*t?x cx8NG8ob29N5 ,Q)ԗz\DC]7dAl뮪d=ɂMSL,X;p|Q瀞`smz>b,PJ6!*5| K$l]+?p呄<:KP$ "g0Z#Ib0|\#qCKyԕOW.g?FRh{w!B |TL`mxρAEMhpkt`Mܬw)f1&fWˮց%@WR)vV,Oʨ,83d X%Ȗ%IlW09 |GAAkfϧF9Ƚ`Q!CNG7v㾹g/ ?6yq^Ď*JBH.-]qFD h֤eVn})̈7!cتtAeo: l5}T]?f,I'K+c,PQ͜DRk؀7@?CQ SҪ;tXoa'9֘GmE YE ~gEc<%ύiULp "`PNj3+M6FW ^I?QcH ^J. E1EY*)ȼKحfkƊS}bbQGAB*-ɬ{eɺ B;1PK lx``3*hXsVԴ)Hd" 1*b|!y+h2Ârq|*4FG umiRǦadDeS"e撥f)Q|mK+po+*C_E$M:d._%rA%Wk_5hz\/xu$ҲQR2EROJ6Ydhc`Ψ:S#SٜEۇb*BOmCwNpL=av~4m#t$oőR{ؑ&Ȟ-NOݡT{vP! D(6d(MTlC[1M[ĐCnZUMWNLz*^^[\4q#-mp@aiqkO.TB cG$WlUzaB,v](dgN~i5奏5OmPX,d=:~W3^3M̲&&یssnƹ7|q3^4j&u8/r8G~ɭB~~ݝ{`͂*T2nk d]zs^蒯^ĭ5mVVDTU=S*lCW{Clmms-1.1.3/data/presets/ZynAddSubFX/Brass/000077500000000000000000000000001247673406200202505ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Brass/0001-FM Thrumpet.xiz000066400000000000000000000040621247673406200234570ustar00rootroot00000000000000\s8_$.sr@:{(nA# CJ6H/)ZK?IZ^O5BMDzMq?nWgM;5 X8ᣔ u<ƵΟ4~A`=aĵu0'l0\'Y(^Ci@O,! S!3Τ3zi,¯he[6b?cd6dov쀬|pEhP<_l "91/k>X/`&Qԉ [V6 j̺*i0&h`Sf..D?L. {H~tV}>X$)FTF r,8$97M4rMPp)ugm~0PZEod T|Uxo4/?Z(pN\H)s!7N_F?H9P}%UTgp?=vsYP]\L)s/dvFlHن\ f:BEcjž Y&ԂJx ʡLݶ|LKyk]bD6xxT({H BY @e>?h-.KX;Hgp> Cp*"9?g I^~RӤ,H}EH1q@/?afqiEFMb>,t!0E|Qa[,N ;)֎Z=϶vP%EWb`$5.xJR:i*o֙Qgt.`Q]tw]9ՠX xw(H*P 7m^( #Qmlc"L/C*%k\_ c⧵}Zcךnp/- Y;%МuƕuLIT.Q^N&ehOoDFT2QѰ~βag|ad2a2at AKh1J5NY\i4ņJL5 `.o#[_Q,)$]XQTTLۀ<˨\;Ѣ|* Ta9DdZ4=Pla7_xfTIQ]J[o(5fKx% cY!HXbb8>wfczKp|d,9o~ʱj~h?y$pieJciq/mĢ? l Pm90WyxvlUχ]~Bns>_PNP/gCB6]= ^neG9 2wCi6B.تr]<~*r֗+@@TT8htї{nxM+|q0~ SB\v\ƽ4 d.z8qr˸l9eܹ2^U *ǹfɇwP x0d L!o.ƒ^߻EGuL$2v4rZX:q[čWUFF?Blmms-1.1.3/data/presets/ZynAddSubFX/Brass/0003-Synth Brazz 1.xiz000066400000000000000000000036361247673406200236730ustar00rootroot00000000000000[Qs8~!d&I&Δr@:{(n& 'aI+`HrZe]}Y>Hy=Yj:SpoW;%hp硋c| >k25ģQM;c{8bO8<'5?#s=g j7/F^LI<'4.-#6Ʉ8/ ?T0fҤ;fMiǮ-iK.G [SYZt+j6tUPl*E}sU<pj t3 i\?<xAf|qFAɰD0ᥳ&)a`-_d,[&Goї~-oYp?>o}\I 8RHmrB2/*1y ZhX}â} q4G̀8ηQ}RLQ{QDcQ lfFSjZb˂D5Z#9OFƦ[UA;iuTuſ3G~i`7A$yA.=b0 $Q@1uMD.s? VJ6!D)C fin3$94*~\Rލr[M? ke9%*RyG*؜ +Ṓ7 ~ODEMk5᡺:U[U')V ^0 BKRL z4@;g,ŖF@X a x*R2̷bpp-5)]uFSob 9䢢ʢFbF`cF6MJ]%V \uVJ}o%W)No=;4n*! ]lQJ *1VL|P5e!d[)<8w8$POg)~/A$dJ&d./WəΖ[N:Hߵ40im : lV_{!_XVU{(Ɍ_1f_W6+*Usc_YWjjЮe$_ۍ>YGZZT_kf|mq_:fѯ|8 W*5ytfSB.݉|=mUlK_k—Euuo$WWe7.^V {-gtf}_,|7 |2;4oLF,LȖ\&i.4wJ$Q9ͧ9yo.gKCvھկ>p̾Ll}[z!A}Fol|P6zl*߶~+&/=?T?d.QztxK#m;أX/5QP4Mgs4KaKf!.Db+}Y#E-ύ-HzEr+so&>gGr=d3'biɚpf~'PB(_ fZ^@j` P􍬁Q@ )Pi:caVۿB/'%D ,|_Lտ S[tu8K^aJY&x$Kr5bKDIÀZ ļGC(r":´:ʴrU5u`' x gQB>Rd.ܲy=5hۗG8Kz Qb2pfXF/s(sϷ|$8$ҡL=sP.l#l譫e ..ģ*=^: oh]^Ʃ}o;^iTa^s$,.0~V 3JP/n !xZ:a+~#kb)Mlrhy4d% hbL?"a0BQ3z0_,A@mZ66t*wYl>˗. =]ȗC} / WNJJB ^@(Zԇ^f"/ |xSKg< ,#0MjdxN"-a!gj3cy"|^@jsIO/w.~(Ga@s<'!]ӈ[MK|ls)nmOqoei7gT; ?XMy<lmms-1.1.3/data/presets/ZynAddSubFX/Brass/0005-Synth Brass 3.xiz000066400000000000000000000041561247673406200236570ustar00rootroot00000000000000\[S8~`NsgYH$tBvJEґ8)P KX:7Xsj͏qMϲlpح}:q[4sh8?e)v_h0\go}ty;vӿ n@Q@,:/#ꔶ.?5Mҿ6fd0K89e#S䌚F"w;DvHl7!nX<*Xt "917t/,RIK]5u: ǖHM–B1ʠ%Sͧ5Q;HpsssbA~^\ ͼID٨X]g,C,5"3Ό:5bL|c*ʼn0qP6em}'k `fXA@\ gd_\ gZ|q'=v]jm91tL;\#AU DEprBܬd`Bq斐igxlw<6]s\d.Lq51d(-hٱ_f-& Ķoh`yi2d&OL홹wY.{N)9E`b}k.R̻A1=BhcQ؉RabhX*eW"(ZЅoEณK~jُe8@6\ "Bk}0(CpGr l羑6GHm&y8$BG.v6tuj"c(A|=K+KLq7kB\BMi1T0VqMJŴfK\;JvTk2ghc|Fo&!?P$e<0v̅=z|6sk*DZcY(/dl0ٖ'D.!{Ia1B4nQR3 @r=n-?l}EBbބ"M6ET+a"Yqž:"Ңl`` BE6E(I%%f ֲc%7>'"g/JrUE{?Ⱥg݃J9KzsAa I3qPW.n0i'H8Lm9+ܫbÎDB#}]E5i Q0]ä4._Q?cxfV ;y;mI<]qG*XqCG2Щjt\ bKo\T@ ʶ*3tk A}`BBQ4S >,Pet`琐b$Ubw$A HHzZA!6(D%ebykw ԮKMu}` `;ˀ{*II0ZXXXMX`#vtS@,oKeVG,v| 9b鶺`_Xۧ;aiˍ;}ysva%krҜD* U˾V9aJ=Us<`{Rct53]OVX҆(GgTw?e\*29~w1YMŜw㼋ƹƹl/8saHq?q1?~dߒ'DB#NAF/ tW=ō5)nLQH|DRlmms-1.1.3/data/presets/ZynAddSubFX/Brass/0006-Synth Brass 4.xiz000066400000000000000000000042741247673406200236620ustar00rootroot00000000000000\s8_=%6Lr@:{(nd!i%C4MܗfK[uq8x ~xYxT; َ{V۵O>q9~v=8Nᣌ|ʵƞ8n uw: VGw8pn ( MED^Ni?鎻׽iovmo @u%sa F7=dg>!Jg !ZyNYbI(4p*X^x3yElS{f.]K@S%s#OT,FCm]?6cW)twwYDYvױjx][?JumT1xlv:̋9P`n$^<̨8 #UN5khꡟMh&hynHSY|R@sRmoxUq$\fmi&?Nʦ*rf+j3jЅ7 _ 7al%GR{Rao߀)v(+1tw{$Fj3d7 Cr`(Dh~HL8Sj!PEl˄,D"]`=_a*ܟ~85e< Ij )ĨfH!SjVFbSU hU:C+3|3 ̸7 vh0ˑ!_F΀5L$\ZJV"/J %-QmlK"LB Y\h߭W82W&5j$M.W%/(@3e㺕' TqQœR$h0I _Ҡ k0X#2s`"a~9j - $$ǐc2BV[Kex:'USZ!ZswR]vO8;]*neMۋ-Ӄc(w]r'?90XDG7qelN*?]'Wp@Y/*jySA-+ؽk 5f]4Mgh(C&.Dt1|Wǵƪޛ*/P05ɤ\g:v,%kr-XE(%V$rFb['zd q3 p$V8&0m3AA?(h3cL7'krns46)9ρzG+tWח͹;%Q hZ[FЁ^uOiD=Hss,BU'6H*0'o1G v&c+>p͏+ `up9&;Q=qڵ#L#,[D~m'PdƛLb!, SsB'ʝ*ybAjقo'[8+xwz*uj^S='NgKI4z̋9@`n$^]̨8ūBUN4GciE8&hN@Y|S@sr.H:̺F:b'Bӌ_†Jmq-6sG{"*Bک FF  B0r#4NB5uP=, Ffrh´E)z\Ă%"3$fkݷ_S0D 364`OqC6i㓍dXtp;O~Xkʱˊz0l OI kM*İfH1S|kkDE"ZȮ) TB3LǣL/ bL(l3έ Xg];k$<MRBIǨLKc"Lf ɐZdhnִR+fLjPsq3 /$+|RȀF--伖cp0KygBe\?"Q^~͚Y&Q"aN_Eœ ,:pdC=&F |E1.@h xkZ*Nfyn922MeeTk' {1EEsY )^6,P2)KF8dj<EEv~1mVgEC𢌽da]ʌ : G+ *`肈#@$15JWp,;$<q|UFH=SDCP1.,_QH腙>NVN3^82mQ;5!WڹnEkA-at=CgJ($V35P>\(tE[PHfTǁBBBag, i놸D,/Xz%`Y*u'i?ջ,f q4vlĘPx,i,f,pkPon, ݔ=-<`\basIN}Xn Xjx@y7s’u7X]NHE8QYO%R0\ {sLcLp{R<诲?)j_1Y[e\URQz6TKBs#(z7J*nI'&W*.J G{&-xa[oRC۫؅AEǹ~T%\$Gߏ.&)Gnw18wwp8^3Zr^h/9tOW{ݸ,: '=dc"!ƒ5= .w9pj=YRӯEXu F, 4N&⩾*C^N4)%'}cK/ *jGIH5#>WSi3y( T-x@1zj3SJM:>:7}$.><'/[Na˳l=,n[޽z:Z|7mǛmw\߱ zڢO<Ȱù ᝹0gsć.l( xcՖ9p"GpppT>*܆d @%/ *QIjInqOc!:Tu[vx2_ɂOn2ew[WGоhoE1Gk/h][x1$h wRc3kqb%lq$f`b} ȱ| 7.l&:*J+3Woh+8g=r!Do>NU$}nk02Y|@ @xp-'oCʬw.V1&iWOhYNd!+its[k@"*ZkEci4TUdQMqijv Îm( *bXj 9lN@6(!eЉ |I*4o0#BF4|'CgX u%``DDԓ03B*!iu;og[)C@V }]szow:T`H);t !H"D9fC#efEId/tŪ^iF8CL>m`U2pDDL3>&碑¸=Qc`,!kiP o]"PX/Ri9Ii?:R2a?91放E5U~3% ]k=hA19a@ ,6n0:buDZ+bb1%A@~\8"abݷnjoi474=1H9{MWS.<<ҪaEJ?k a-+Qu9Nb ns<ҽ?}zzbK%zZEv!"K%q*D4 3Kn5Z[1EovAb0Ʒ Rl5]*Gd3d'W]"'nTR܇ȉ7-v3݀3 -zR'*oX "/X X>!!$HcK}[,qEJZz>ae_ Qn(̦dӪ%8+|;"}(p,SxYt9$/aEAZ]Ҏtb,?e~pv7G [_giPʔs}ɮN;/2"imM2Y V*E%L@)YMJr.I$$09^=/nτb2;!tNӛ5O05}9SCX*u֛:jGc)K$hR҉ JÝuRRC) 4X>)kz=eJ6`nD8!TΧ; wОtBq*.ԿAhճ~f{o7^4*P6=.P_klCpoy\~7I74d!kpcO_{k~.W>yW>ct♄{蹳KW\e:WuҲ:)[OstN|^iL3+r@w(XhpUh աqB4^_W²\1̛sH楇X*1֪_x)ȏ\~ϥ]UƟ]V,&ʮMKM|Tl+׳HF=ofɨASıSLŏKb2rc; psP#C7 Y|o4./(MG)*ZiM *Q&r`aOQSv0}) 'o,w #g)en`OdYNFlHitQkB-'d#N\[ -ΩHaU(p}ף|Lmϥ$DYsټݛQf>! ! <',=E$Aء9 |C+j#י$[F>Ypgat(aKbܙLDNDSgXx rсbyoײN\\:KGhb^/U,EAͶR+q~e]2߄(mG?q [Vg>ꑚЍ A2ɌpH_  Y(~,L̅S>sEsIG4ЄRVS))ZjJ !g5ÀD5[Zta'$fRFE3M7ВDb]Ѱ;i*X fIy4處 ڟ,z"@IQL-mK"/OHf6 m8!b̊ T 9KV3+e b쪔Aljh$I&䥦xh*ٸyUX%JTqÍP2)kDK,Kрx-TT6߰|wX'"LX"LX"wDPR'eJ59cꔥ`JSn(NT, ҮMb]ٸ QXra ⲕwA0ߦS>_N!ZTy gir9EE3%[`BE6gI%ѥ솂5c%gtvw7ňbզ63~uD[YKgIwk69A4h%T ~)GRk9sq=;}UmF l4.`ߦ>.75U2 Vߠ3eQ$j_41;4嬌IʁTwi0@kAҔI*75Q T|RvgRscvb+CVH=cE_ivox^U\c:>w}X%i@ǖuG/?O]v5ο޹Gg_> uwo$\[|%lE>n0ܺsw:+1L0V@KYJ0N2 F p%ypV+]t@7|0DIF QK4~ 'U:`rFBr4cv\%y"I#c*Qpemm|R[e|VD|u'%>uL 2g0G_Fa"+㚚Z (n@B|Gk$rLϝΙ)>ȈeoT4هw,{Yγ&-7ɘUЬg'wLߩNJU}#9 غ<-CXؽa7?{ï"EuK|=|_TlTUbݧ/{gny1'س!~ rTU}87 f27 fe3MB&܌sPoA5?gzAe49\:KCpy.g"Z-o ;ȿDҤt@Ff;Ӛ?=BoED-&u2 ?*DS/lmms-1.1.3/data/presets/ZynAddSubFX/Brass/0011-Brazz 1.xiz000066400000000000000000000040741247673406200226010ustar00rootroot00000000000000[[s8~`yO@n3I:41SflE"% +㋤#Y`'nT>H:7}H}xZ-$=7fPw=p޼ N.޽;j|9rk7оN.Ż38;X~6Gӑw"E2<¡c'[/Lp4Onxe9o (&˘Rb-cjc4Y'\(,YG[A27/B^DV!Zy4xEhd 7!Ad>'0CO3ID>Sg PȻr캩}!|薪h:أYf 2sLw%G:k QjEw_%: % h&~ܺ%C5rR+߅\f>,Y2웆7ۉ[!DM *BVqz|E8 uQ N*S23l+42}RBK|? ~1KpvwUVw| 6Ɣ2o+`<=x"ձ: FC(zKy²RHiQ%)KJxb8XsP( CZXY{پڪB7B#Z^yrNH8G - F3O~dIp G ;tfe!Ad˷G.OXW:G)+Y ׉5-3S$3ܣu:LID 9z!FqGt͍!8/^^2tvbO%6,Et|1sT` U &wKpIS')AH JIIdvϲwrZf4җNy\szўrġ1IX$%n,+G{]hG5Gt DْD.uTr$ ׬ )K 5Suh(Gsa*QȃPzDEQo'7 Rf}>h$ Z_Nk=hEBgGZ˰Jf`$5> {n+I(Go Lx]j X3HJd<^ڕjcg,I">HSLmP!?t<H]T[!tJĄm`򖬴Vs=5|˵ƦK3xz9"]3gE7ilUҌ',eR扗X YC2MҤL{J&2uu .L{샓XLhXLhXwHPRƂH\9S4 ʼn [CNA@ ׬c9+FN>C|>yj'R_:b|V|~[DtiOJ_ڭWu{y7Zɰ*_*N6*-zi7_M}櫩nM};ZdNg>5^\{Q>]TjWE-] Ugюţ8t֠&؉xɘo;KmQ~;& ޖ=fpYnA5{,xT>5.̣!{0Rck{e*df6O6lmms-1.1.3/data/presets/ZynAddSubFX/Brass/0012-Brazz 2.xiz000066400000000000000000000045401247673406200226010ustar00rootroot00000000000000ks8{H3I:4!s%ҹblΏ4ןV0ΣiOMJڗvW+zX.jm95☮e;w'^Ç?GgӯڿkgY= 1)\R_l'`<ľk#36vj8\)b4M! {u5/Iw`BXt 鯎[oP؆7޸w՟ǓXBgҶlD q!$}dd.Oq͈ɍV @I/";jdxK-+ؽk-5&ݐ4N㛫pCLU$]$gYk7o(r4.#{^L)C 92HRKׂ@,*>,2LW5:Gj .8\SF Upc Y9rrߍP8 \NiiVFu-w~&_?%)Prwu}9ޜ彻5VqeО5`} !Wcqy.cfu+$#4,wb[m";t; W0_뾬3޳\;ԷBE ~v2( e,ύg\$Ȃ`=U`. !t;ԩ9'.,枛P\6: 螓~lczC)\(GpQRatam@m## = ՜֋ixZArщ8h !Og^TA6s^M h2O bNBXq1}}͋6,Sхc P5"c)<ØBePT>HH$P oh_s%CR[RBh ߒ‡Ru[k.pJ&4܃vuˍK\ #ᆏd'ʌ# !YB<8 w $GPV҂N;.#(Kp;>HVȖpo[K>\ӁC(ѱI@tlfg;Dˆl"B>hN;;QM/2d4 0G2wNy?G|%J=) 6 mq DEB8d/h,ph߮WؗW5:4\&gKa %Ӈ4#@3Fe\QJm "(- ,ІqZB4LT+'ҡ5ˡ2t@\U'ȟcpmE.RjDqb@&@h! z+Z*FB`^`Ee$m820k83TnXCYca|!E«z19)غhBW\go|5΢}f1lVgEA$'݅BJ9%ZA#[  )@CѓG.o"7).E{UQ(/G~eE5hQ`$) " I_n+5 h23l,N FOWޑ /VfIU#GԩoK r9H/bpZPcQ_Rt-#xWBPQTeBa4:g+|Y8C -L(/{\&$IF A';Ȅ$F JkK(aiJbkG"A V(uP J4QG% o ^AXaQp!P~r\*Yr]TVvFnwQ(wv0(w2}]cYx>+۟mgxKog۸itAN%P譖nѻUt ֓`ˍ0qH25W=ij4pTLf!xYjtQSn:{FMc@!Ç.g]wߍ .:'#w6\E T`&ax#7q,e1&2$0I\hYElkQ!JHNɔ)ۋ(,M_|%1l5,o/K,rmh 1fIv|xt#blsk)vOF=I$>'.:B\BVb0 s@KCo%ӯN *Lx&jt X5!0LNPᥳ_EٯfHgQOK*(/F'g!v:20~ƭ4OXQY x8I)7*ÁIX^ Wk D#Y"d-z2qQ~ben05K(3}3+0fn/ftT8`dȮ);K R>P6S 2gwڄەRi}SeŤRY,XJm=J~%(U w*ϡw(2g52' 塔aw,@)h;z ,5/Y-bN7Tale"{>~ɳOnxI$;;BBJ檂;<7{O\'\'I$ zs=uBITO$o@=Bz<^/g"M/`J xl|Hg,A ]{n۝şAds*m귢iZ~ig^K!.lmms-1.1.3/data/presets/ZynAddSubFX/Brass/0034-Analog Brass 2.xiz000066400000000000000000000034221247673406200237470ustar00rootroot00000000000000Z[s8~`yO@n3i:YflEڲח4Eґ`f<5MGm=0r|m[Zr|txoW˭{KH8Ɨ.\ߑ!Oʟtl٧D\{EG>=.+bݹ6`JY'[NEl,i4] 6urɬ4?E$R*&͸TPSB!QEhI o,Ex֜~6gfjUHHie7Ja.%QZ@w2"6 Kp$؀P¶Ĵ(KB!Eφ_۹v!bGu]տ^(r-V<޵mP#2I\e^#quaAclhI|TҼENIɋu⤬_gZ{H&. |3$ϲI{b5s;s:R@l'T$qqajUgMM⌲ꇍ/Ya\[FmkmGVVG_Yp?] C_}ܩ(䚍UzwD*A2aᘬ* v8,d @\/Cl}>126)v9G7=рiNT0_jӜ*y 6Iq"O?vЌ a Ќ< t8Lp!l22OϵxY䭇$)VK#?4DVSR;%O!T)B$lfr,Jd檍A0ri-Fk)FM=ЊMƪ)NL26'q+U g8A|Z+[;lYXև]u}',WklUk6Xa\k}`B5[Kh6`,F@XNa-ZI 1ȷ#pWHw"ETQYrOQe #BA찼ȗ=A de~f68;_ N4uNvr}I2FnpJ_(NA=Кd0,rl3' r Th>eO+'AdJ dJ9EɧM>ẻ͆ ,a%ݾ{g[Y5/rW_WOpk=Ĭ=+}UJoU`7͟_UMkȖ}_/RlVRVzZ}էy3's ~ (UũT47If67Ife3MR&LsToA5|bمV#hx24^+D.s[s<6GKNj/p].ٖ+Wjz.m._kywIp/lmms-1.1.3/data/presets/ZynAddSubFX/Brass/0035-Analog Brass 3.xiz000066400000000000000000000041451247673406200237540ustar00rootroot00000000000000\[s8~n $2@Hg/۬/i+㋤#i6ѱtn:A#s/j'#⚞elpܭ}|q[4zsl_;2~k= 6 Ɠl8ѿG:rC.jw`KĢ*O]Vuq@wI֘i,'ؖ05NDv8ZnCܰxT Dsbr_h+>@Y?jtyKA-+أg-5a]4Mg[c4KAKOekvw[}q Qڥ9(?ܬI.̲iT٨Xag,E,5#3Ό#ۺ ?8KP rU`Dl̜ .J6@F =vSӑyFMؿFϣٟ ˿I{w3_k[QǝuЭ3p)בk.qR+,Y&X&$-! .xm"$5d.Lq33d(-hٱ_f!-& Ķoi`yi2d&OVL홹wY.N~I^E;I0T~K^9YRkfUbgHSq"}g.hl ,$b&ePĜ"b017FWuIEemǘ!4(Dl 0P?4,;J?V?ta/Ez08#_Zw3߄YPu7f|nH5Rզ$_Rd`(Dh~ݢ ݙm$-ZȂu>62t?St|t;iMqXkɱy$oS1`ÚIY͎I6Tk2JghctFo&!?Ri<2F̅Ԥz|2sk*DZSY,e/d2ٕ'D.r!{EQչcHS鼘IW1+:H}xEL1^*OoW$A xEz[_QҔ' b,5Ցq'"m!W1Æ lGL;aV=`IztOSTv9>(zm,`E,`NXj# v|RpK٭ =r{=? H󝰴nO}’"iN"sJ|wN*ymJ9OO:kI,?گuK\ʥ~pӻkӻ*DVȪ;L-^:[;l$~[TD*%hr w>;`t]0Cɟ | ≿g{9tL?aƹLU0er8c 49ySߏsw'ڏs8 0vnuq4^ /熍9b=ޢnVq5 *CHhU] Z;mSԙtW=ŭ5)nLQm~i|SCRlmms-1.1.3/data/presets/ZynAddSubFX/Brass/0036-Analog Brass 4.xiz000066400000000000000000000041201247673406200237470ustar00rootroot00000000000000[ms8_=%LM`\9 }( s~Iÿ?ٖ vç6fw%>z/?gGևzPs\:?NGG܎n_z68C|}t W3uĥɑp?Ƶguf0`4d$.>Kn!; 1^,g8/ Qbf2p[X7d<&ɒ@= ȗK ye@$+E0ZmX.b;O>n(?:67$>vbfӴX BCr-!K7L:c$x c)s~ [SR],B!qkpHQY0 V -=RuL+$ gr("ejᴰ@XB ޲@hfȊԇS˺8ԇ@ʘʯōBܱcH^qt54#*!{~~TJ8*vr"v&/2P3B߳JcAsi$hd+L5XO z4^EML*@ gߢƓFk}فވp{7I0h{Ѱ;1-i1PʗW@]?PAy> ~4JY_4 6R{^(H+V&lU+LWz^\zBܦ^ RbŽ>!us{am@嘡o2w@:9Lz3LI_n=EZcˡ&J.{3ws)X%buRڛ.&3*;ЁJ_]TJc.~S.wD..\y Ojq SfV iK;vK2uhLz7lLI0ۡ3^=ΙJ"S=TPk_}*WiWny6zڳ[^q[^Aݫi0Vۮf Q,l9e\r|Q"YevUpm_Z~h>I#AL㗖Cq; )<9cnhoŸC )p8z  "x++\)30yx)Lm,xi,òzi+Wh ,gzfE6+}Tm}٪O+ͳUџlUg?ٮvE{׮v6L%QpDV+bK+t $%utC@;Nbsm"nFOӃ5Y΀vͻo=0i%d]wܐ!hc1uB}c͘pW=F@`x)[L1?3GA/b)Ths<Ք=x۽}=N ǕC#b]f vJCMH"&!=S ?|ViX;A@zm@[L)3ԃpGZgW7r7Q8/p` -u? G7I8G7xAݫ`3Ħ^uz6ĦcvGsbƉT?c;^ \^+~8!rBВqЏ [Ad:%cJ%tG-v@o)ım'{&dtwc&3:d"bO/z8}q5P,qsBwAY>\-In#u?q/YW φ-AԁXAfԟ75>Ł Ϲ \Q&U؊3PB9s\􃬀@xrGqmz\ئQ#` &_k/Jfurwޜή]N%v]m@ vmo @-q%}a5_)'Dl }DKωe]c B츹 ZVm >NodNp /s%tE꩗_6.Y޺oû#n .>ot7e{>JI}vinHO0~35RTϧRk .zb9wHQM渨e"ܐE|'9G723tp&arI͐ra? LnƆNcs Nw2*C- ،_ ?AZ @~VAit,X*= b {D_ D @sA~hl#Lm)@6)Y1T GY8!a@㉨lVK& եYw;}&&9KEm CMu!'nj ?t]KYf< ,aC PbZ&Qe:- !gNj.W#i"|ZR2ejsI/  Pi֍I-m)HD (J hď ʄ72QQnZy\TKl(XWQw#A \ r4( TFpT3fSP x`%ekcv)QPa)bت([S<˥/f|3g`A"ʢĪ`/CE֌ehIY%K饺CTq'"UB[KK} ʔ+,ANi3@ 8g;55p握uךMj\m AGF{,=kl4aFD8Vșmb97O;s]!g_ť_<xAbW)b?ҹpOf|H .1ڭ"mv 0}+q֍KE%[Zb,+vb/1v X/v\fgn˼Msr7en gapMo$Nimm>1o7/7 CzƋg"=]0{=r+]dD$BQ!bpQNz]\G~wqEٴ/6 nVlmms-1.1.3/data/presets/ZynAddSubFX/Brass/0067-Brass Pad1.xiz000066400000000000000000000034771247673406200232310ustar00rootroot00000000000000[[s8~򞂁\Iҡę2@Hg/^_We>:>:7}$.><'/[Na˳l=,n[޽z:Z|7mǛmw\߱ zڢO<Ȱù ᝹0gsć.l( xcՖ9p"GpppT>*܆d @%/ *QIjInqOc!:Tu[vx2_ɂOn2ew[WGоhoE1Gk/h][x1$h wRc3kqb%lq$f`b} ȱ| 7.l&:*J+3Woh+8g=r!Do>NU$}nk02Y|@ @xp-'oCʬw.V1&iWOhYNd!+its[k@"*ZkEci4TUdQMqijv Îm( *bXj 9lN@6(!eЉ |I*4o0#BF4|'CgX u%``DDԓ03B*!iu;og[)C@V }]szow:T`H);t !H"D9fC#efEId/tŪ^iF8CL>m`U2pDDL3>&碑¸=Qc`,!kiP o]"PX/Ri9Ii?:R2a?91放E5U~3% ]k=hA19a@ ,6n0:buDZ+bb1%A@~\8"abݷnjoi474=1H9{MWS.<<ҪaEJ?k a-+Qu9Nb ns<ҽ?}zzbK%zZEv!"K%q*D4 3Kn5Z[1EovAb0Ʒ Rl5]*Gd3d'W]"'nTR܇ȉ7-v3݀3 -zR'*oX "/X X>!!$HcK}[,qEJZz>ae_ Qn(̦dӪ%8+|;"}(p,SxYt9$/aEAZ]Ҏtb,?e~pv7G [_giPʔs}ɮN;/2"imM2Y V*E%L@)YMJr.I$$09^=/nτb2;!tNӛ5O05}9SCX*u֛:jGc)K$hR҉ JÝuRRC) 4X>)kz=eJ6`nD8!TΧ; wОtBq*.ԿAhճ~f{o7^4*P6=.P_klCpoy\~7I74d!kpcO_{k~.W>yW>ct♄{蹳KW\e:WuҲ:)[OstN|^iL3+r@w(XhpUh աqB4^_W²\1̛sH楇X*1֪_x)ȏ\~ϥ]UƟ]V,&ʮM$5AHjJ)6=e0L\=iҐ2h!/t/ybBH31ȊQomcO Y+J1J;*Y ]%4#} eĠa|m5U6ȗIs *jlil],BVt SU|] GEt@{$LIZZe2b]QH_3ںsTR`}! uEZ*}UT=ZN'0YiO}Z7LqHWU_bxں9aIi.o[#GFU m)؆ȷSj+P~B_y5XF;kY5?}l0#^V5$ٕЮt%Q2QjY"Z 8JE#{Ʊg&^7V}M\CM^hYu(I 9hS)LqA-Sr{ $i{eLF,~Rf,eB&>jOPa  |t`zAC䴍#^ˀ6z=CAq= ВJ3c; :8Éܻ'*8R;6;* ɞ+*n,H7rMW96tLDjcKb[J]Z _kcNW@#de;OT_Oux_߅~##sĄtS9Yc\lнV^h )Pĸ—1l:n>N$jGEy.k q%ZƕGYg^:d&|WvlQ Ĥ |H{f X? vn oadJؓ6D얇~:J]G@7S,b<-~tꭃ0*lmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/000077500000000000000000000000001247673406200216535ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0001-AHH Choir 1.xiz000066400000000000000000000072731247673406200245440ustar00rootroot00000000000000]]s}ϯ{V}W%ҵjcV6Bam6 ~aNKN9O3gߗ{wzaj25B7>~X"}rw:n+V6FI<\*^eȒZBY!gk2yF+ԉ׋ HR֖r.` /!t}NJS}7Autrb]}>*;m잒)jtvi2|ݦNn`HZپO5]s/zhaR;o;WfWV/gIh .ibߔ`ahݮͪ8d,f?ǟ/*|o֮[ xfVp$܄6m$mtVMvE/ w=P[n|#ɭu[^}y#\~'+gu^7K6t׮MZghM- :VwŵQP ӝFrMNMq< waclrgBVqa!qz9|8nVm(oy`CגL~-/5oS0h|j !2 !"ŵf dwa@@]C!eۇҕ}0:F_^G>9 N>сDgd>`F- -6Gۑ{RҗQBn y3Zڞ;"H'LtJ3LF=P>*G%ˢY0fMFO5¦KA F?#<~&Zt4=.9]yչo`jz28|Rn-Nt"X7ߡً) |2Ipq>΄8AJ_=<ͬ,i%ʒʒʒʒʒʒʒʒdW}0JvG(' ĉ(%fH?W%NhbDMNjJ!-9Q&N)!4qM(@S"hD8QjL^ N)}t>hD8Q Z=!G"Wp6rv,E\ގED8YD{AԉE1+N኱+Nኑ"\1p"\1&p"\1p"\qW"\qWė^W,猝!""\W&c{WlናEd@{Ed8Y+Ƨ8Y+Nኑ \qW,'p"\qW#p5@bናEbdW"\1^kmNGC6c7Wm Ҍ{pEg U赎>íUC4jz\Һ31;hh{qV 8d5` ,} Nin^F[L t:l1@qvJ3 1Fg4HS@qicY;xnqb(o?:hF6FSV Ϫ  #Na(*qHPq Cy_OO8E|M+L?%z_K3{V>OVҳƚ!'ŌK>4( F̌C 10d,PО89bEG3(nOauȸ"d'sȗc!cT(| :}k\ @{n(s/:WrZ|XYd KƩg.[=7 P՟ p>+zqm K%& c;@0N9Gj\=F*# &(~P{j>w{L߀1| >VFlQ#H'sDq|. n8>w0Q?CDq|28"&.cd,Ior}[5r Ca1Ln,MOj̥RXbCOF/"\4P9\t MԔ)ޓ]xVu C} {yJIjrZm;J %3]!+$VvTɧKKcWǓOZڷ5Q/ZB\a^ M 6"x--W ď8&3H̬&7GބUlFX-`ҸrkTAIP hVJ7sK\tBRK(?T Tn\İW^XS`HpwV770v{5n qĶ֍s hث#hdbqu6 0",lP.8<;N*o]􆀌~mf]K^[dLخw.[AR)k_0K4Z.b9x*Fv\`O/I'zT|QXnɎIH:]:&]]yȸnԁ֚*SfVni(%;՚iJɲi2J_mM}K5v~N3UD0_tg#z571 1XyONX84fD5}Tb>d\﯑i_&_m o ͎5eb5OۭkC'C5-~GvRH0kq<*٬&JV Q:5OMG_u:gK&毿`fB_9-|zl(~5Kk_k.(~3k`f:rt6HYRﳅ_fZ/5tAZ/~MkM?}}T6Xؚ&ŗc_M`kX*U'pkT/G`߈B^Ba۰O{+-[`z?7Kh H7G''՗!{(nejvlSg_L簞4|XTy|96U8C~XYG]Vh{ޕ{UZ 0ۇr0ĦvѺOOdz8Wh1[:VrEYll"W=uT^V8]Cܢeq\^UnEʍ?r_o;?6lmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0002-AHH Choir 2.xiz000066400000000000000000000073571247673406200245510ustar00rootroot00000000000000]]s}ϯ{$lqm\6ƹ6Jf$.o IHi#N%|93Ӽb~=5~8ě{ίƟ?N|rS;߽z~za孤}"be<ʺk/xZ:[t+0g*› 2b15[d6}{ZT<'QoԝԷXEPg8s'E% V3fGS+2!T3kt!K7uy4~_l b +۶(p\k\Lm+)Zڮ+h̽,xd~dGڝث&vu|ߺ_yev\Q_RF>\}{rRH⸏қ&ZUaݖQ;)#jc,LęZ+g~: \s\GV]&9*2cշnu~{m(sҷd }heM?pqOʱuS&)iE94@adW|NN;*q)2,Xyx217u6}iϳxn ldB>a3c׃}> n S-f+߱*4ʎ&5׶bٿ c??-]fFKo/V C vTn3~McMmk3~݆*z !LbLVz_sjŢrt)C5^+Xٓ+}HmG+k;9MO8QǤIܚZd5z'V~c {ը?:+;vvk u1_)9WVqMR[kҶ $bݭݩ'o`E+\۝8>lEDQǫh "G6TKVdd?ZI`̓%[K,=XwPC`"p8HVRf D(@5"?w,ML4EDCa&& D%Ba&& DVa!ZcMQnm U& D-^MML)>pO@1Y jHzTv,]+&pEc"\q-+&pE\d "\OBbWLE"rWLZ?':5l7ڈ;j }C5X:mDx;W "d~;+gZ=߇Qqu"rsψ3=\ ^ltdpWgDډW3U` p#]bG|NG|%>GƤ_!U'#p29!U'!UgF,mtl6{p_H7,"^[C*0vFK#ݥQG0gli!Ј4iTB!&PΤQ݈/(nī(4qJ XkTbph-TbIaPiר4kTaMNLˆz3ָ4šIxpxR.ƥ֨4 \XPޠ3&p eaF55_cc!w|F܀|!535ᮀJmo=t8S1DOF[Pd_6xDi]2ۗ n%G)Z"NaȚ %(/tݖ Cwo蘑3c>ul hmg}0tcЋ1#μ cFcF~2sc"eRS1# \_Pb<1*yΨ?`NEп|G}2@`Iq;pJ?[F'T0at qc6H>cMlmU: R4_8T-p[a4)g!٤-nK-` mmݥJZwJrRS{X\T]Z2_Rol~ȆB?}y5T7K_~kI}RﰝZiH5"%d2(%XTJRºol}ę$=ᎋJ0f ?\~y"s9W 軛%e,q%3]TW+O S|SeL2D74M9] M"f1oZ!dY4/6iij*Ml^扇l VO"XL2_X mkٔ0J_ ̧@sv]K݆\(g+Ie"ե-I?M⯊{̈́7V5K?M5~VǾI(^mB*,Gk&7+ZͯVJ ku} [*?Mk.^z]v_ٟt>&+Z׊6z{׷?UV_sZW]-3KN'F_ e^} Lo;#l"lE`fvG`_5.| F'%z/z0?O5662l1b$>ҵuy4~1{彧AҞjcG7Om8\.4\vW.75W.w@ya5m:}༟~5'y_>꒤0_m־gzWcz|v >kybp6dJE)p瞎t`))l ߣJ+r=8IQ^ ,BZ(+&6ĔԡvRXOK[SrUeŒeTT%?UVlKje[N15?YnWэ;bgطoKݤ I'?ެo/x=ݫݻњlmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0003-EHH Choir 1.xiz000066400000000000000000000072421247673406200245460ustar00rootroot00000000000000]]s}ϯ= UI6Pc_lmE%#$.Nﷅ$ќGOq`z>ziu8ytסooƉ6>_{.Og'?#ǹܞڱ#ݫ7GY}?jmx~ɫ⏧v8O.ɕY4b4\N+{mķ,|k5d/64T)wt3Fףl|}TֳZK,( wmEb^dy xL &x~,c=B\鸕[Y?&q?sx#KJ8rh b)Ěl|q9oR%o. 0|"J[[R}MEϷ>OJ$7̾+ N!Y\t!K7ٙui:{b nk%SdLL- AA>]E0'K-Ck,;׿Z^mE^[=[y^ҹ*m{ |onm :جKkv^|f`+ҥcd9n˳uV#{]/~dFZ]eҹ?p~ڵ}9á)/xDz CCqnT/tQ@\-hSfͦP8Æ}waދ{^<#r[693BVqa"/z'/X5c(/y`Cג L-O-/S0h^~k !{!eBfU /\g dwa@lPC4R+3}0:F_G>kYM%8|:ɶl/>Dط- ܎`7 g[B y1ZڞoEW#`3)0U6j?ۣ- )YZ1k2z3kɪ)Ll:{y80j]o.iBw`ϫm~}9qDF>rC]7Zq1w#{}Jv+n.'әkqw7ˢFJ1&S+j/>^shxENj%-lRO ''NE2KAEd̔zbeҳ^\Wfbe䬢o2n"\qWå/'pxv+Eb?:d[Fd{Fd~~XYvi%VV;,+ p}beXY6c';W,.c';WlናEd8Y+NናEdp"\qW^F4^1QSzW͖^:}cv=+Gp_\u8]\u\u\xWՃv~W4]+, pc|o*׏Ϭ>U>\QzYW}+ ж;dο4&,s\ R:[ՐZ{{j`?@'LғX-fb[F4!ⱸ"c`_܂}f -b.3och 0.1ڠ5fVrn {rةD8xΧ6 slS":&c??s4YcPv ԖA,9x |DWFc #a0B+\afUxy5$=a[0-WAb };6COŁD/oXat V Fl QlW WAX ºUlǛnFMZbR*$d9q{^!vOq|n# ߳cF>/<}n@$@>wlQochϞNgyD䓡bQi>zq3./ sv,0fD-"Fb l(,|@t>9xLvaosFt>{C|>"BF$gI+ 1<^qIs6!U&ӗx ]u3D>YVFaȆqZq&n#Nmq^e"NvP`$gFFHO' FcF>gIO<0% .|d+0P4eVJ}8{J6;ψck #qFs; ܒD>]UENenI"NL2 6|UzqihpqKHwUE7yf 4V!Fa0B+B8K8}@>/ Cøah' C8a0z"N?}_\߻^NN'3/5ww<`S_#+^S鵒*-RJTEI!LHM-3wIۧ*Rr} .oN'+Kq~[J?r)yRq]I%XmPC'7L6*oyX{'LcybAW j`-'ёXLs%JJ+E0S "B`p)kH` qjFrʅVv*)6nqWj|q4[wg+My'uK((l^EA#ˍK,0%兑HsXȊC6@4ήb~mfQջvqdG!eI%AIiR.W*g&$$e Tb4[+e^(2[4qMy\Wǧ+]BۤQr+S,a L"p|j4%dY4/6Қ[ϕV~f楈`>̓ӭcXdͿv`ÁU<*2}NE/}M |N1=z>kQx~렝ަRWœm$.oϵ*Yџ|q5sl:C|a5gy_=V߾]gzWǡcz|4%爵WbSh]Y.P*0O_x:VDYRll"W=uT]]ܢvsQv-"WnlnzؑտtClmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0004-Voice OOH.xiz000066400000000000000000000041261247673406200244460ustar00rootroot00000000000000\[s8~`yO.Ia2@Hg/-ج/i+_%ƦeJS?5ҹ'Y^7 q\ӶfF,6L߽vz01F.DΞV*xĜ#`1 ~Nn>g xU5fnc%Ќ^g]+*>ey'*Pb&LBk/Uz8_J$u+]N qڸ]ad>\ij ␉~QH9{vPaf _Jggn]+Ayֿfϙ &7\&oi:^1.ˌZσ -]K+y&gz">P>h QeYZB暮 -#reV? =f|' js]%]@=-)!lE)㯱 dD J(YfY`"{z. U7B Y]e>Ԉ7Q"*3$eRvR:6raE#XfrHNR[a"$MTwe.͡$XDY463i\$8nd,8d `v?o>;_M|ʤ6}Pu+GurϳU줊s;+$P%0+R<(̛'s9Ii$^y0H'ɦlHʙ H8B5;MS@jj5Xy4fZ˳f!q`9~6D+(m17`>Hg,sF`=9q(oB?@ܩ!ڐc;À<~ SRnu-EׄNyWVL~Ewp5YV!0+ 'b¯JWF|R=X:g+5$PJ; _ F빧zI߀׊¯ǓG_{MįBkWkaLi׊ ?GZ!ƯWI tE_Ë9~aN?xz_忘:_oӳj;uS[,!np /Z.vaׯ9J|"<\~?Lsa˄⪜ r˄z9ITN4 TtXphBxi/WMGg" ܒ=FÛEHH8K!Fo(\ltW0OaTJeӆ 5%wA3Plmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0005-Choir Pad1.xiz000066400000000000000000000033121247673406200246020ustar00rootroot00000000000000Zms8_%&!!3I:1SH\F"-ΖI_kWL?ȫjgWR}֖ eMy{nc>^nOћ~owm?Oۓk}&Y ZbFȉ< | OpxKqzih:{, - ZMqp"FiB|X)HpG`l.Q('a6$F4Jx$ͳ]sY'pnYTCL ]0?c]eGNUwL'',h?eH,;ם.}[caD =[UgfYYB35AU,bThpZԿifԔ/ -Β\) S.(G#4?h;K  |ę6N96HߠNL偒l,s2͟'F*kqf$k .qR+J;:fxgU A 3Ȝ9*&@;>OY*uB>bJ.:&D2y-e췺)]z.)b"8XldAt>+]8dP_@*Tk] RYj[%Z@4TxwbU:V;ߕe5* Q6تBXwo JxbT4_xOn!l9MH5Z nHwx&'&纰a=B1pv!Q&Eʥ6UbS U&k]j7TYq"fex) &Z2(0Lwe~>$'.osͩdal`N/k.u:%5t2 );SNcqJ(,n,4h]!D50P4$H%#xOm.4/ڐdU$_Fb1.%b%Bc<^<՞,(Q:lp5ߖ̣|`s, 5D/RfT.W2;ӽ>Z ) ]ܑ@-NAeKۓ$@@gjr{G1 R#K4"p/4flc|/Nze&kS/w͟gfklhZc˛E{ѽ9;?Ac*`Ś]VX$AU[\\Hfc7Y_Z2<qJ 8I~], (8ɝ nwV3\ ~ΪD5H]߹3c8EЮGZ#z! HOwB#N##i,b~5Ep+} /:"iuj9L~&?f4?4_M4hk9^:KCxy/DbUvuG#wX%Rśr[ mq#ry6̩5qƟ=eQ:g~(*ˋ  O4x2)@h\hJ޴7%*- Sz0 Pb8W@qC|8id ϋVYRM Ⱦu˾]!D_:ƆpG~paCt_ #ɆnaVU1@{_FJtq@[G1#'[8H48 qb͔}\3L6D=udL9V!s*,@O2q))qn/dX OkGG^"Xw[Bqtp_e@]`B[ f68/dc%"E% {Kn+FbǻKHc@\Agx@ɿ_0 hpBY'iyX\~4-1廉D|8P Be91R:jyP% qR2֧ |}]otëT@<Ehnz'ç;k\-&J Ӿ(.i(gq9a@#C=oEI孉`Ĩjxh'QF4KѤEcYDǥN _+x3\!XUj( h@rhZJ'Ox1'4ϒj͔Q'1uTs Z|IqNu"oMjo^Cjo*4U#p^%j9EUQ[$0U̿:5ዘd=+Gy?N:"uώh/hw4y?hx]h uF}'"U2{*ZP|VV4۷,qwnKS?w{T,!x嗞fJw5WBܜ#lmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0007-Choir Pad3.xiz000066400000000000000000000067631247673406200246230ustar00rootroot00000000000000]kSH_{$WU)jy ~Q Kflk$+\M)ӷo>|.^I~ytEIzw>׳ֿӽ(X_}w/?$i;0["Kt,\{ WUͷp}6XqD5}zmJbw1 *:E=X$QGE 2RARċ=9OZytV?KYD+zgMf>XE'MϢ<,@ϕ&D_jy;zjUXn2u"I2<, 09V.2u Vei܆kubHmZdi2 #qNg `(IU{oYNZ@ۜ!^C}Y 0OE,GMej&uU} Fm0.jj䯓9=L:2GbE":U|⠳=:o%=FTO,Sبlie \`j}QV;SZ8|mce U. pY$D&<3+ͤA5A80v`&{;Uq*nW9,8lz[>8M~)ݘ~zʽjT'+ȡR6Y s[*FUV9'c(_y錖,)]fզ:Rq.^'@jn:V'a}uUlUOk}+va+so%j^EaGa+[;AX^k"N$ډôCa!nڈ\& A(}lp5z kL&k3}nMǕl_0kLDk\^q}x5bxEޅG |!cwWCf1^ njWѾ^ ^X+ xbX,Eby"^qX+]+^"^qX+xŬGWu@^qՀ+ xbbW^.bWKܱf="^qX+xa8,EⰈW%>3tWCY%@_tAAƶh3As2>=B E3FW vxH8,_=#^qX+nؾ/c9,rXc7(ao/Ebƈb'āWy~W\{^qXd8,W\hoǁY呺C(P<;/oǁ`Eɟ_m' 0 ]0sa mva9ąa(϶Ey0asaisg]zWy|PhwY aL-aLƂXØ>Ø>[2b F6#`dX^҇1}d>W2`cl. C1}n>va`ϗ0xŞ= v>aٳ`{>s}W}gKvl>_5C)V ,ᦡbܾG1}0MIg{IగaL^҇1}~L[]^ Y)EVL U2k 'uhRuqzLE%P  !Yxˊ &+5OҘ(w/IKJ^O ȪY9ec>/M.vNiL6q/dB; -P򽰋h0SBy~aR$[qUEJl*{,!JA1Z,K R[ )zZH^u􁢧wp>dMf:N,WDjqJ(.֩dYHEKh[:j;D[6mHː u5$ݺl6;bCŌ_E1&͈aHȊcEW{"$݊]m1$G6;Ԑ: 5cpMT*CPg -47*>ʌbkI?kXOafH)Q}NLv9_ķUӭ#ƪQ@a`kczOm_-$L,>hڔePctޔe{ݾƕe͖ediYΣeB1VQ'3w1Fh²R1/,k%vIĊolm!ElMX$_,2,4iS|P֪Ϫ0,XR V5LI]I?gUjk-}vhW-F^D[VL-[቙JIY ~)nNB^!nE_!G-p('hF/9t[v 96ވ(xtΈu8goyC>u7#qT?ҷ3We~3vT+8l?PbGMq_C?o#~Q==#Î8 舣ِ?Ϲ2Ϲy ěϹy!7`/c7Wc/P뗛 }&jg1`YƖdԪ>U+S~#*?yu sƟQk*|/}Z^0g2*ylmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0008-Choir Pad4.xiz000066400000000000000000000032751247673406200246200ustar00rootroot00000000000000Zms8_%&$pLKEPk[-rEv 3~jWϮܼ-ʢ۶"|ܶ7ww''7O{}.1w'7PM?yN:í5ip2{/F1- Zm{ڿOv_4!>,Fw$iw@?wѴ?? w6ϵBԧxRir.TO#I !xdDV+I+[$C.]`Yı.2ꁣJ;FbE42`]`h Qo:g].t̍"!\wRY{*41`gj8!X+h>>͠)!^Z%@S\RQX!Fi~)}wW3 lLrlAa,%7Y.d6?U$&H|]>_W .XBA%Fx4@d8zp AA~fS׵*&@;>OY*uB>bJ.:&D2y-e췺)]z.)"8XldAd>=(X8dP_@*TkĀR*`,Z@8Aי^$U:4tM;b>jUT5Ft}VuSº3xKP([`֦{*x2v -BJĥoZ nHwx&'&纰a=B1pv!Q&Eʥ6UbS U&k]2ohED08S@F9Mj9(ϯ0'e @RI_LqU2fܼ8}pчhԆ$Z$ 7-|q!'PR_+(؟]rYQ003xx==mY'JOO Fےyl.%{k-5^Xq/Ʃdե]&S=XkUNGOa2R$#5D[`%ʖP'IT1MN{mc Jb9yGhD!^iFt|2%z>N7+M ٦wIq .o&2ze~0gp9ȓXKkwYcaDUmqms! %FOd}]jɠXb(/$=w4\ g'wKJ" @M.ݙ}] C@3)9S 'u 3v Z 9aO/~{I G0tv 5[8و :Xƿʸ)¼ϫM 9G鑯`D|Mkszszbi,4KC<4KDruG#{&R.EygKf j"*.~ jU[AU-.zWVkI__Zdlmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0010-Choir Pad6.xiz000066400000000000000000000032731247673406200246110ustar00rootroot00000000000000Z[s8~ϯ`yoIBL) P ;}[2)_tK/tgbO\-ʢ"|ܴ7ۓ'w{ |.1Ƿ'ߛd1xm'4ʟȃp1N<ܚxo)ZSm?'b4ï ђܴd5JD8H$wԱ.fGw湷Q?#TޑjrD9 !1Q4$ojE {{a !8p[)w ɖIWժɚ:P h6}Q$V"Un BvvFU|7SI\&.9N!s*,0l5ĥצSĥLJ3>rC_{R~糣y>?狣y7]681F8!sGQ~ivaY2@A#lmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0033-Choir.xiz000066400000000000000000000017601247673406200240420ustar00rootroot00000000000000X[o0}`y cEj;14B;Ӻn6]sŎsi5Ҟcv0s}s: zؿ:?tr|?FP‹3{);OWWz:ih1yX- #|DDPaS~ đ[B]l>%BN* 1JiuJd"$Tn#WMeXͼɵPWVKt.FY7ٱMNnw. oqn/!2iP1dT`XGyE3O(":d` !F9ǽ6xNRNJňSB/(Ʊ?X1 0E@2#nӰ)c2-5;R%LXuyH3F` l %= -:+ϣz>}/5/ p7ݸ.n߾ˠC ]i* zݬ{Bia Ӌ8XF,BK1+聅YVZRUA2p"@e0-IeD7K$1iq+~ `H\nhGTl"v*mx>Hemr'(1`T(a(@Y.ՕRh9h̶ؗI`Qصώtټ,lxҷja,+o>-ۂQɮw~w ZM[.jϝiJiA2)vrR j`'7"5ʈy8=OO8c2Rhjnhfl܋0 eD#2䬵>r^$>5AkZC>m 9M^߃n6^^%hbu&oQ.E.*Uf7~ a$VS({g}=:cοl~;ķGRwTKPXpΙљ:cs3XYaa8"7VQD`IpkX/n;JhE,b&Oś L| 5H"$T[g*g58 KʩOUSnUdMcwh2|?pepX]u; [gjT\wS# iQ"f\P)>I9gQ(!N%.x`<.foPFF#whB^$(8n@c7 h-5ȌdcRn}>4"#&,@kќSSW VtxXwh44e'hzj\`EQ_PM(1H\Mq8dOBEx)97).ފ49l'%IwBg7f>k!m_.ٍtڌݐq}fލ.0 pgx?j3,%$JS}!=N 0čH}*7O[^]u'nNYR[c{E+Nu&&*e[)U%.| 7(vB\ A Um0[@=OSLݞyA04iо=+mWk״xַjiNNݿTi%;KE)W@)+3|ELaXSnGfY`@l4AC+k1ՌQ/vڲh>3| [;+͸JS, YY?ʖJRRBhI sN9$cSֱ݆%5nn ;qMx S;y{ћO_GΧ#gs</9r\ >\ڇKCpyh.gQbݾ_h2]TohZALp1bYXYgI{SFB*m~m5U~džlmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0035-Wah Choir.xiz000066400000000000000000000022071247673406200245410ustar00rootroot00000000000000X[s8~ϯ~OI$J̔i Y.f_4Ɩ,Wlo`'O!ѧ}- Ř[x4i֙Nzm͇k! gOɍF'eՑ+$+g83Sgxo4++F։pX8õXv/%9E1X!09[GS&gϑpQrD ,vt%~^" H>5n$h:daA\6KM35/)s}%,ƚ߬PYl|'ZS"'Qf/u1B7Ƞ? dd g! 72Т5W2uAۺ2|!F$*R%/کzfI朌_y8ZD$p8hx.@wH2љ|~7IoʹEbXȸnP8]_Lh7BThyAM}^mݠ s|]ܺ %V܏V ] {B_p]zf5`I`vO.Z!j]iW-j  d|D֌UIEwK}DUs*-2D^$"Zd4L 3ule8C_2E8i*QB0Yx@ O [ũ2^ݽHjw;@4ffkvIoVY:k VaxovX$ $&]k"-vMg)d1`9^F]43H8ҩ~CWVUv `lVz>hAYu+&u42]'Fsd3A:Zj{q(2,H4Jf=SUZƳEk,seu-wf"w^.NNjjmNӶk, Vḃdj5[gC͎yux ?wH>4E-ߣ*  hFz/qwe?TD6myB6H gcͱ+%&ùyhS(N/T'|Jz|n4% 9M]FqPnF/JdWɴ}|zΞa]ZNbz5Ęx[Np%D[@RclhU,r8rV8)% %nJ]cb0 C x+)}5O겋!3"kߡqVY$:8,dH:〰'VDl]`,[)sm%t9q_y*|Vuږ > Ʃcҟ77MC 138+Xx(^.|IBo:Q=Ĥ:)F.,|*%f9CE`blzߊj E1撚q# D@"7,*[6ꜤZj0&{g9tBS! Xvi0BPLJֲlnFg~h$vu(EA$I ' FhRHr~bGͥ-C?S P]F|r;WS%kգXB({ g҇SC"zGo`bҚ;i "u<왕uiS},(1Ėg'zZ+ϕڅ,}T;&j焈0+Rq .VZ$JmF֖M7|zpY^ ` viOI TSժcH1lBDl]'R`Mk7Okɧ8XrDVDA \A۠hRMSq ňJ"]Qʕ5i &GD̻( l=|.O9A,\H WB᳊H NJcp91i,ȪTIA^ 7r[3Wܲq,;y=;agYP_ٷ]r~Fv3w+vg+)'MQr].䅠ۯ%.uҔ3@vOa_xN4[8 @ yb*r|ʔYLhG¥epZHpO#e's/{*cH UfӒw6W]h $2ܐeu>o]T׸A>)8^IKҚ/;"dt +\ lpl(yQ6D\bvׁ/c_!<=<:ǹ{i\q8Wqjs5U\N 8O;*EqaH SH$O!ŋ2"Y_CF9G{yszwsEDU(M9v4lmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0037-Voiced Synth.xiz000066400000000000000000000065441247673406200253060ustar00rootroot00000000000000]r8|WxH],U%rkck;;h9HH9xA[gji2A:[G~|lYuZ'^0 ~w>߯x><\܍O>_kU~'Tn4sOgɍYz*rC.Nw}l݌ϣ ~v67F> V[ʶп&v|5ޥe,ݟҟ|GEE`[Qw?v[F[;~ b^#87SZ54 UzXVz\:@x;{ W5]7dzMG,lDפ]RvZ@/tYL UJƏ_W^aN9~tqtD%ӵ :R#\Z,#Qf~ru?: 7J}X(<|&Vm0b&SYa8߽WC-TcAs'fĩש.5!cܹ6dh%s|  H_+7mE[3?~udZYmٳ#OiW5HYDYU<+k+>-f⩭U쮗aϜeE7+u`i_JN_'o&u>=@Y~0s")mm1j (1\/qsrsh f RL!\cK'][=}2o+ؾ6'cGvuw nd=7.eSr=byNVIlv12Y=sS1tv9 }jǛ&1Jd R{ J*gaK))~LϾboCkY# L[?Ѳa|kM.Bf((Z0\qt-Dm5ƙ-??t,kCOߐa4 ="jK"t+ DLA ,OH'ǴJ2sc)\=&t-eonӿ<)%:ڝ}7OjMRafݷko4-c;=ƱuW䳫cKW2L|lRXkNYtfY2L4QZ*f ȋRbU:Eq7\ v[X5^n0Ð^ps}9cV'n) IӃÃdVvjI`"pY:HLhØ)21(`ڀM4;&lbP44wA)lbP&lJEw)0]&lbPj6`6eY@'|maEs5b 8ETv(JvR."^CbX+!+ W xE\da#^1,"^?GbX++Eyvm(>'Yo PN(HgvFQ:g>^@̯4q x%~G(V'|>E:)US>xeWb! 7 8CSg;;g!jD|m!UfƸ~W#sdL}C&i\ -ŜLxb!YfmeY υl)x4h1v:dXNVь @<yT# ے%fh$[ك`(tw"^Bh5,$3"# ~4mrӤs- H{z3=#ǠdXF~-{ƍG#ej@ۈkшk{.#lofRu|K$ou_c;Q5vQ=&\k,Fclr53ੀ᱀ͷ,Db&yy1ꡃ'59:y'4cF382>E%-md=$!F%؞/Y>cFΌGTaH-ÝAqm!՟r CI줈FʿPk#_4g2`8N vI ^P0(]00Q0`8h(1 '0"`Xm:e0b0[h1|ϭ}Yu!Hgۍtvqk#ٟ=?dɑ.m^^ +l$g?+أ"F1#=ϱ/RiZf!&mgc$_@NtD;s2.3vd=,iCY) !}l@>#Rjĺ>"4Tl 5}DfJUa 66r_HlFuC?wd`$6[U}S$zaI`m˳޹`:KCgkS?c'f~\}-gy\RJX΢TfmTIA/_?ooNA~x]Q-P9\iZ/#*Ҁ-'hA4%u%)*4EIYI^VJn­]> I6fiFQfwk'l%nd@0uZ*)zCr8ѳ[IVN-Uq=GJv=NV2O_QX2+"V'3_$wV!rza5C%ɂtTphg]XZ?r+Vj? T::*]ž0#)K5׋:B8ۀm۫YZ5v&6kUkGJW%##h&B;w4Ae-#ȘRPB6g+`TҸSFqJ3lm'n?%c%K׏~^LWkNΔӖ4VȘ`mt&,,|4MQǷev:pC!au:?Fn wz\̻ek56=Ɣx 5jއ^ռyZW>ݯ}_P}s9aE_͹5A_ __K_W-brvDKe%-T9BW]z*(#'_=5~I L!hwibYE-IJ4JלM0MUaYƱi ˒74sWh +~S 4هH^fMIemfnh6 .nźihPl melmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0039-Ohh Choir.xiz000066400000000000000000000032641247673406200245500ustar00rootroot00000000000000Z[o6~޺rn63ة ^ZcITZȺ<gSk\ŧQx̒4esbAtyX;޽fzxwCߟg}*ջ >_xZ;IO`x2t64!KãFs?IX,e>aO,tAy8wp6sl^h+E;? H&lHdĩHŢ}UMa aN,J!ݷKqEȞyAfƓbpNe6pR_.OEj^]y\tXfb͓U{GySMBF^l76ΨB8RsqDeCuv5½; Ǽ2ehBK %Q&J1ʶ(݈ ZM|()ګ  m˃— rB\GrJSSdYج.n/g> g|:Nѩnt%t<"_(4IrNZ:8PSuK>? oNjGm8bi#F<1R/@,(M`hu1zAs^8iNB኷O|(fiJjZ.as\,m7Z\drR^Xyfwrt C)AV&KWdD3q|&hףg[ 6 jڗ=p~C`Ġ80b[ˆ12(bͬ|8Neq%Fp x8p-܄!Xt,bGzT'4j+ H-IarD$G~ Ont+r %1wx[mC0?᫘y N͊ *~ +=t*y at6C[ z^$O9\NUnF?ݎfSlZs8w'a~:q޵u7S>>W%cMBR;+g#dNG*[ =C.YxXn{52BJx>, 8q&QeCRW y$T8s#Sj.p#V6%~bD!aǛ٧P}nv p@3_s?ya0X<ǒM0bxo&b," @Nli(͖ě8q`'[CS͹"n,=-4pUVˆ$bպT<ÿޫvlwI<~6ypmÛ-h8`+]~ eNc$)X(a'ui ^.BVҩuW륟l:"a||_x< 7)v&VhD~O㻋/e&=tqC79C5ϺŢ!e?vͥBpV FʇU78u4 ۸]W7p( }3; J B_xѣF@nHb!I͢{ xȣrzYr2*bjr;ar) x~KIo|@>"MpY.p,5BQ4[loqWmUIU]:,APL.E| ~u=%^JoNR۷:ū%=S=TB_J0q(uN;--UߡgOCʮ*%NP;L4EJu ~-~z K_;߁Ò9$wd+-(T_*kg>~ 5 ~7NGX:vJ^cZ x)tm xUx  ,2!?~-9vv v$ٯ.I{f\A_>xIW[R|k~v_KZ$a$$C )Rꕽz|f0}A$w+O), q&PrsOǩσɴ(y,\m" 5 t6UP#X^5E 5UP#\{vǮB+JH]JRUwe]և[֚l F˶Pײ[vaX϶6l"OYl+eZ;fMu^f7 0=~<܍͚\nM>O/WIǒtux.zF9Rx=aae|;W?Ls^W%ӜZԯyWPaA(t!TPWϚ=l[dT;  P4yx(N =kH5҃[AXTUO ,5C'GfDm(l*K޲RAJYh*GA̛=9˪ii!n 4m̿?n\fflmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0066-Vocal Morph 2.xiz000066400000000000000000000052041247673406200252350ustar00rootroot00000000000000\w:_ s&\&c[YۤWBkwbF|4fo]/fg;Qo޼j~ϳ;om34?ye=qm'y]5}~r<jݑ=ufѶ~M*aٛޱ1t_8!@}A VsPK街cIDSPȻ9m'{&[fzn:_`ؔ4ɳ]F]+[>d Qpzr8X6JY4R*޳aK`I6SLZ̙ӻco#Lk>C|fZB^-أ/ث MԵI vStd#jX'WDB -I[BV8aݚsk{{yAW2.vq?UwS|"}"ω4[($8'8H$3L6oQtG̀=3.;ǥl`ܙH}OcBl]km]opVb_ת.ru,R]tt2]/x1y15G> ӲVԍbջGrkC^s91Ӂ ,b)Mw&6"MܐE.GnYE,(B 4n~ί>6 j:~@ c *nHBa~/BpuY Ha, T(~Z>>j?n :0D(Vnٞ`<@΃dazܡXfH=%H !>IZ_iw`(C`_xM}#x8_DD]鳰boA ;kVzCoX|Km 2JCQy2UOMo#[{P~nUJV)vi;.PJRF})貃ti!}@Osn~EAG=tz#}*z9@z"]vt9BTY1I(+An˶/  1'+{%AtSy҆pG1c!F}+z&C=)Wn`kaW+ǡ{qX܇zwR3K ~5,}xS`WP`hk|C7KWcY*^LC߁ ~k*RHn}#: * L_CpO Cr/T]9;<# (`M!?~5z% } '8 RWOhӳj<8Z|k͠2NXfKe@_R J]:a1/2[J/\"Î ֶa@J :d48L}%zY~fTQRqG0@\R)o9K.=/VlpͰ8ΌB D .*CcOW *^ceJ cb۟<.VK ~uI+7yW _G<eh` }nR/\,EC#ڃ5&`zs3ZGGC~IۅO>搱Oޅg>(75!VR6!'R?(?hVlmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0067-Vocal Morph 3.xiz000066400000000000000000000053261247673406200252440ustar00rootroot00000000000000]w:~_彗Bi{ss6.v_t,ofm6F`V~jj#i4pK-4*y4~tM@vًw\ 5U֍t;&~;?0dv[>s{urٛv*Emֻ:dHY7|gӴYD/?n㞊Z؃ﯲQ80'-lx:O!%ܳV 8^HzI.I~z3FFQZ\ ȗ8s#]l.p#V65~ТMp_3ui>+}}Av=,W܍ =%/5U[od0y{F$b+zT&Vͅ&oXi/:H־Y`{xnq}>i9Yw Q- adNw+nTʍEpu\ǰP?le("[;IvOM,]Pdէ2hIf]bvrk?N'UtPرjx'b#*oя38*™kY׎~lvI,b#`)?<&mPs;~ ϶|7Eb9?_́}$þ.0CU* "(Z;x}p4/*k5$4i;f@`Ѥ33s9Ѥuj.Ѧg=Fz <3dT}3(_m' \ 8&iU!_ C=P-PM ;Z/'YL;ffஙg )Xy2)03w(tjkh': s|lpDUX;;+r$6$ nfFI`#O!`"RSOMÒk| jļMHYUf=E̺NoN+~kTgI^=sIȩ&)1xd˒2ZZJ={?X@B K{*tm 8HUf<~lf)6D )אPk.Q{i]i5&~4Is3 CMJU5(0@5tEM>ej.3;<|3|f09}0A$w+iJg?BId\i=z&AxZs";K?uCS\Sy{Κ4#ceUPTSN^555kUؙB L3"KJηӭ{d[k)U(AU.|>i^jϴ49=ϺQdmRD,Xh]S9Nǣ^؀KUn۫=du$]^ +V#U_|]Q`ZKzTd_~*B w'@X[ʾԪ4i/]wӫ8iGXfW bU` (KJX,PTᭉ* fەfŴPC#qnN+C*HU$zhYB'm*KSe#NIV,Rz1LC22g 7P;)ΟP_E .V mCLvR"Zv.݅*,Re Bqco""MukGc(KK+((leI &U\j]\ Edlbo;dv{(qYB@VcBG p.-X(R] U\QbV{WfkWATe/pX-/pb^qŁL2ê:s-KMZeQuҟjqmMs9\V+Oްc+0ɥa`Sjث٫fƆU:kG{͇௽y}/*xґm3&Ol߁Q_] eN__ն6Uzqk_92ǯ9z]_M~O{cS.g4\R+e: *N9d7\RN.%^t=%,*Ly jTC_:;j*/i %T~1;z@Ryť.=-:됻j}/. p}Jq<=Nss4W!i>eC0͇a_T 4UkRPm. -sa/O^,w,ZަW{ ?k}0L0^ LԺ=_#+.;[_v~)]MOt5-,Zplmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0068-Vocal Morph 4.xiz000066400000000000000000000053501247673406200252430ustar00rootroot00000000000000][w۸~ϯpsQmNm) MB7 Q u|C`Gpz[/u-vܧO뻷֯޼yտ^܉mw|k;x)voLk_qJŚua.W\sO߷wwlKaڛ#l [mE'O7㞺!*x XB7j =s:`*2)ң|tx/Gܴ s,ʧnFW姇|w 2[v[>{zH@Qn=#K_@OV$NGGI6F[Elؒ Gۥ"b k&ʱSJk>} 3p{c(K$㒯Ekѽ>P&'qFN\̍Hl'deM6Q z&gOX]2; a=ӝg9 aSD1<]kKQ)9 aT;BpU5)cK Gxj\"ޥA@|x界v:<_|&dS|"}&ω4CIhH$8'8XVfҐ<ߢ6鎚_,vKٔvXiO Vۇw! aGWm5^y۹/Ǩʧ =-O2][(HbaGq#9ͽJp_s91Ӂ @Ϧ;|Z2"q.`i-4|)" 6 .w1cyPk&ec'ʇPwCб~4N(.TQ+4 <:_]Y~LF525ڸ]w{Qp'* B2I̐>y>B@C6k}Gz܇^1ztq#T_v+qeѷWPʢo_Oۅۢnk}VPcZ LUeс0%5F8K cX GhTXzvMoO&ߑb諜wT*{0aL58M ~z,/< K ~ߞBwXms7FK`{0%,05`,#=, `(2MXyPe1tz&ˢÍPV/g1Zw>? C62`Ue1AC CiBgk:ŏ:ǰ8k%Z p.e04;s7qVAC 5(9C)W8shc 5 =>"pwb< H( 8\ d[)8SӨAͫ^%Iz,xKHRAߝ栋ΡdtV$9 &j*jVyV FEMѝUJ*RY Fjܯs.rK兠rmt㞔s*Yk89Z9sf]&I}¦K]&߲If &[KM#LN\NW!ZU nfzqqZo$O5ٶTC+ *Ld?'+91eE R , KMǗ)d_*MwEi;2ZWsaP&՗2˪J(EfE;}=K;BսdqXbLw zPF53ȳfVIyY}Q+ūj}rƘW_-.,[^OoS3Ek ד6 })|E 諲2 }\ua6|_45Ҧ z}suC_o^(xʡٛiN_ ?v6Ux*jkok_u-[T*iTCo6'ѫuH7*q_d7T*4y-}y?tONwy=*E$r*e<7TR *u6RͩTK7IIjkCR sQ RmYWY%%X2Y`M8gߡ)WMs49 Gl/q4_iΪe5j504!LHdYsa…fl(ym`"$՟:Yuoʼn>b썯{W!_O%,Iplmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0069-Vocal Morph 5.xiz000066400000000000000000000054651247673406200252540ustar00rootroot00000000000000]r8}WxLil5f_PYHx~4;]d4no_7GmX7Ψ{x0z=hի7\N.ޏgkǎwK/?`ZW٘MGx:cWvp븄]B^eh*r݈݄dKza6ԋVS\҅CGSIH襳(m8ȣ.(jn6~뻫 æ,]lƻ^vu}L%V~xWtobK_iKV>Oyk;% fE'`ٯV|"C"_̍Tَ./%D ,+ݾ, Gm߮?ڞ\o/Ѓ!Hz(Jv-V-USFK/W-&elX-ves$=x4 CұpÎ>o&5YjOzdq( 0]o/0ÊL,Cvȗ=,0Q6%-x#pĆu)Sn߈ͣ.3S]vmścSt屵pز{ec$*AD+qm^/}nTڛڍv:.s1P<>ml. &.HDj:ׇŧ"hqXC0 BJ tltQ2t[ßoBEmJEB_*_#}kW_,Aׇ@ ~ ϟ;a~u}8BnDEvr!A\&Q" ;~}͢}G-XeF웱lj ~5].p鲏h5=PSMCώaWa]rMLPWBߤPӇR}pSK }-eVV jf(% };f } uo* ]3A2ˠMp4ױ.a6bw` 1UN;N*{0KZ8M ~j,/<K ~s3{)m3o:j7AkK`7LvuO8Zbk KC?H: `j`CgW(, 3`peXqӇRefQlC4ز̐&C`C'gS`#Do'RjU7qVrg06JͰn94бҀp CB3`kI}xNY.HyNn+ h\~&U=w<.D'wg b;s(ja&]!55yIUTQQnt;u~\<"5YIYW/ OTk%MJVKW˦\}ºf+]*r8({lق{JC*͵,S9&w#ja,U&'K{$~ ]ܡ=&F?\൒ZDCRCySV/j8Ұ$Bk/u'8k[f_ b{V@&.+,b@. =[ef-AM\*X5k֬oֆ<ȁ˂XeAdt_X- WTPaQJ]r,)JL_(.L5,Y|-m/V_ .܅'qMMa}{OR[Fy(^p.5%X"Ȳd!oe~7iC"JR rl1N/R]n5C,$a[\T DH(jϠc MX *8ss-"bUٞZxaB(V/Ձ%ر "Q`/yʪzutsBkAeذ8z 238ҖIΘyquKyGUrzKآŲeKd$5:'YEU41Ik^| /ƹH*JBQ"mXYsċu518oY;㚾yx\yƏH_|*Ӝ짚&޹Q𠥡qM_cݚw>~nǺ5}~uC5|5}}x?}/OՏӜs 4ekWgPm. -saȞWu5T{$J˾B&\_]/q%rBRa]-+TjR%Ƿ<_W.ge͸3Kg@_ iꓶSYW@a.{AD+ެ3pvQZ:!g#]B6ɲrU1U&MWG'rlmms-1.1.3/data/presets/ZynAddSubFX/ChoirAndVoice/0070-Vocal Morph 6.xiz000066400000000000000000000051541247673406200252400ustar00rootroot00000000000000\[6~ϯ].$须)Ixmf/F`+O٘ь4O#y/^=0UzjQ \xx;ykٳ?]O z;ܵcQ;ɓV e07n8Ng|{M_5'\Gq۫-{luM/lhH*zB .4KLA uOOM@!?אۮ=<CRSMUIl>}{7̈́Ö .`WgwAYu^6S Hjoe6^DD?mhV:lF|Q2S>*:pHF@`eF`'ALFݙf>P߾_QSp}m,˦$ (Ekw>Q%q qF*OQ]̍Hjd~?ll~r-w̗*HIt}YxsY}-N`%GԨ| u>t]CσY4qƾF J_kYR[VQ 6g:n6BDE@ET}8vLc! I !HՂ=H:yPj˜ġ|("e},(n&ӻxN4+Yµ-&(й3IT]?8,%B ;\n#U^1NJl9Cu+(C\_0Ujf&(#RDZqҲ OGdy XsD@DZeC=2/m3 "Uv1gzD0DId9P9(S=0ϚJ\~/z˪o21U6zao&6jq uF=je07#_2Yyw8TMy -*J0* eo*15tbjY&*Wl8PקZ @* y̎˼z _2Y f|s3{)^Q, ~0X ~ E k=¯ewf.BeY, _f4ebܫ/}`^E/ ̸,ze,v7N[ .^"( w;wQh lȝ1/& f@C1Q/bE_ ՂϞ+`#=\_rT0/7Һ>J"_^nNH Tm3 i}T*=Vv<.Rvg8q(l+locYa^6q6 ɪK- &;R*Z*/H͢.)+/V}ku\q ,rեC%'\W-LfTpy~8ZoarUt8 վبpCMFWÃ{$cI%A4 |m{JG|)&AxR\H}T;&*S"Ƭ_VIdaIJ|KI̮FILv{֭@e'i+aj\&efە-U6 . a ;/Ե:8ɞ˄\eBdvY!-hLRMͲHUhpCq"d=eȔh'mXhҥh*|XtaEQIWMi{;pyՆ|tʥwVETdRKʥW\ꇹ:R VNRoZKa RϐJ{k+ T*I^jǍ΋:7:/q8dtj7\ٚ-"`rx*qqôq[=!|C\0ya :s_S?碆ksQh CSN0+kc$;+< K!/I 9ܰXZԗ2Q?K[fRSaز0P\){[J勒:T7IP(kgay?d̳*4=6?]o|Fڙ>͙knEdm駮hR٦?Nj ߌ&"Qٚ?ֱB? \яrߜ8 n?<bk[Ui!5$=,N; w MJfsV6j)OtX|̖1?tEҹ,[+ݟ 5 (f2$쇏;;qܱiSTdg''YԈXEf2]N}9'PbsG:Ѵ>a>G%G0)_D` =ΏS7u ),ΖklWןK?7Lץ {7  zKn 5ޅ׫~LUb%b={z"Zֵ~Ǐ+ z"ڷEbd9"N[$t\v<F>g=e[ķ70gqmCPXk cL,mh .FlL.T} ky=,-#p9CDfϓ2ae=4FЭV65ɆFPݱ8@KzY7B@"REy[=  NZ1>Z}Xz=Ƈ_ 7KrIr$K)D2CZBk.l'F . arD`b[zSlѩq$ #u)էbk,bT*@=Uy(AA8=0S}x^1{>sl)F6w iU:ʹ%M#=كN!Ul#Mi5 Ѯ&HfSO=I6fkӀz9@POCɎ!M!3J ('kjE x[ v(_ZUufiuUm`C bO6FvDZ0VCP 1% } L=wXDPLg(*Xèo3-¯֪iα}iCߞW鯚෭f_Ƙgz|`EȄ@`CE`>ưPU9z~oᇉ!pGk55 I jb(X(QVB6 pLpO/cƱPU3(Vs4WΆ¯JZ{KWa?8;Tb1h*| };jb(Y?Ԡ뛚6QUJZo_v~ٯήZh{)bKfeV .*p}3Ygc Kwo/?h$Sߡ|;\{R W#$^rX [)b%2!@(p6Q#,*N^'·;˽8hP_(eL^+5r[Z@ִ'*+-sA! (JS 2eDDIEcID\D* "NhIpo PFls))8J<:-7Bƚ"ۤp@q-/JMoZ > OQMi 8.A˥v)"qR{gʴ DYv=!iС=ҺX$J%m)%?+9j>G  (dmBmfjpNUj[F@`',҄<~CIh+f1/-VYa*rȭdk{zYmB> : L:=)Lx|YqfTĹ=&3yO[j[]lVR^^^zuU˖hh281:cp\V(fО&c2a-%qc28/&O/x&by+#5WT+isSxAk%%"vc킪jb_5;kv5P/X\WW9vk#/_pz3 ZWg_-_5heAkqɫKUL\k"ÖTrzߊnF>x/5׬n@W_5-C}:㯿`bmMW*Eݫ% 57[AN F Wbg`UM`5VX> tV`,:p_LWJ7 Ofhfj6ްs%\5{* 0FRc:VڻͮVXM`5Vؓ'u%B#Ѱ+P Cş9_\#n%Sx-δJ˛Wْ1]rrEoj)TcٍO\待4W;Ns4WI9NsqӜ~^PM TW[︙~%8Nju xJl$rr.M夒Z75 |o[ o;-b썯W.Sߙ&7GwlYo-34?q.lmms-1.1.3/data/presets/ZynAddSubFX/Collection/000077500000000000000000000000001247673406200212715ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0001-Xylophone.xiz000066400000000000000000000067321247673406200244000ustar00rootroot00000000000000]]WH}ϯ=cK>'΂ad'#,ؒWI[Zj-YάByTze #/?vݎ/?v?ߜw?/n^:;do܎vbۏw.ͲKO.Χ7s Xv|{~^N'?~6PCrCOQ^zf]N糛uZ[Va<dzQ5iMՂ߼bwYk7V 4'[x{Tίo>7ٚ?4n"J6ɂt? ~西֋oo8w˳Η ҎP^d'D6-8r럧JX)$٢\shrUNof'1ۥէd&:H/Mwo}s(G$],`uDXq ;VCb߈[rc7I*HNB8bg7b,I D}beQ@Gw,ɢGbCxh\>~POz[.EYܿ2u/3ޗ\xU{ +}'XnYaY˺SNlevvq9L6A٦?ZKD5_Di2&mϯ mds".cҵyj|6-7r.0RKv,:ݮ_\?S8x~]]U#׸ólCηZZLLi@Ђ~Hf.*\f{^zQgN( dCV.m8V\~LϦ0ϵ"jϳW/>6&/;\VRK{K*._/9$ IsH]i]8E gVF ZG.^Vq\>l9F#Ð^s9sS3:F|deTmzA}ed{oeיH6D# %^8H'U[qh/^Nqɥf*匥T JT%٠KoG祢$,rmNj<̈;*vԧ]U]ͮ/QAEy8CR n;5c\Z8utcm|L^nqUT>np+s]RT\^o*w+2F-O`9XS;5#ͮEz:촧lD%v>O6풡ZEbMI,, Ńx0 ^<`0l 8zҕ̪Rr fP50lih50lȩkURyȉ Ʒ ƃx0` `0ƭ10lƶ0f[a@atQw3 HqwύѬω!4cۆ*E#4T#ƣ!׸YCh-6rVƐk,rECqh?ECh5 Ƣ!X4kـ$t&Zz͠NF_KSjیr3&匾猾 :Na+0H84 ݄op5w :+P;Bω :(ۦs.7kNG#g.b^ #Ԟ+`|<0]l6nsd2wb4e vLʶyF2GqJ}eI>@Js$U"Ȕ=7nX2@~ ;P*YCh,\k6Pk-Ѐk-Ѐk-Ѐk-Ѐk-Јk |ϑۀ :1߀@+#ߔ]lu. LJ <Ey4:htq-7tmc(N*Z\#ppm#/Lm:KL4C)4s&rf >fRF l@ Dfo8}Iar;t莍;`CL;`M;` FZ}GwТ8Gy4:hxאsA ״^50× x׆Z\Iq|G#V w@Nnڿ\vO%Ȉא9͑zڹM#hᕙx݊-My*e="]ZimGr&!5 r%f"iE}䵺XIrEQSR,Z TR eYܡ4$LlʉT-%82VIȈz6cijIjIŠJ$XL^}I2 iY!fRhP,˵%'YS$iIyGҘI>7'JgMwȴY[]$AF]S2@QT [w^9#RHS*R$S5aiWǝo1M/GI6TP&mV漕36+^^cR/כlY<@Ւ@B)ߐNeM1mj%*/, Lp)A6RϕRgl^6kVU$T)gZ@?(5j%傄rR,զ(!*rv78-K Zfto9;w2{O9LA\>`\N 7oa宸7O 4s~|o'7N_o7o)f 1 p՘"B0POx=y+$^4Sg8k7wZѐ̄1F ^$b.,DnXp 4w&]2;iwN|rbPZg%S+  8L|;ԢMJ-lqb[0 q?S|KWoP;ʤ?o@`g> j).en\= E6>NјUsᧁÐ?zqYu5r3ϋc͎JaYbm *۝$ӭ*4p*TĆI`"4m{pq⼄lЙgô%&u_$l~h`6E0ԎZ2"$ZHZIyh]Ql 2yL?"0V1HYMQ c60qzzZZ!D=tGDiwc[h @JM9"=i dB.=Geh0GNNg8V3tzfxC`%Ow \sZ+,xx3*zDb稹u5}vQتߴY= 3d4hҸ̣[0՛bJTZ{`8OcEԂЛX.CX ]'ve.hݼ$i _j̟rg-l kcMMT\B L 67&4T5~jSOkfm\nWKy`0vi!)R8ٚ8['pnAhU FЏzEο'}hQ~qCCճ(g*||1yh(zP7e%Y}?9NGSFeٙ֬̇o~Wo/^GnYgpOgpgp/gpad:`=Xp~$[/P%5ɶuo鵮pC;ۘV!73.Z?C>2Rtm|DӦͲ^~odˡdk׭EBrթ c[NܭaQ=+MChHlA[w<7^n?RgE$ &`\&lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0003-Soft Vibes.xiz000066400000000000000000000036331247673406200243560ustar00rootroot00000000000000Zs8_zEfth-s(^4ֶ8rlI^H'Cػosws,njNk Mq}Ӫ=yn48mNY7.)+?ͽњzƒɉDx>hNgh*@Gaȟy@=o,k:P[9EΙfG0ެXm{VZu_JEbCǤ X0 Ioyp{S;Mq^B6 ̳ass/~k6r?40|e"jGZYUN \ $-VuKC]4Jf(Z<  &Z(1xY(G"za8ݑx;g4b1VN7#);?b8 w@A ԦM2\a0z@YE}+N\9gVreѫZU f'2{ '0^ Ty$F[R@c8 ,i苀ωO" iQcr%H[8u;^-&.QZ)Syx$M 䐽(}ޛ5%wytWu]H"rV4@2 MPJJ֌-DȈuW" Vi$KU1}+ȣ@$OMJ|(hj)L< ԥ&&% ˒ޡ0D<`Q6]4ҡ<};5lT# ԖfZo(KeG}zNd8hdɺjD::HVK9C!jqfBJ1 0wȧv7}2Hv7T8Q@D$Д#Ӝv@&2sT&sdtox_y[ ckK0@G\~k97vW%w \srxH`fMI*VN8 J+}Ŕ5POO^pST&ڥ\l Vή) 9sI+,xx3mjGuZk u6aG~bpjnʹz!3d4>II\͗___7QS5SbCK2$=}H-ĞF,H1]WH4i܎Pẹ;NePj%l.U9 dNqcgpTufr@lt [& BCw!Ya̟sW'0l$ k#eMTC \`@ =u) Y=HcAI0'XkL~]3i{ IƵs 4F9\>p2ͺsa\zEο Q/6B^Q+Ucp_y-ж{2Ǫ9%Y0;lvq,;OвK~pЩe|)Ǘ>;㙾8㙾:L_4?Y G Ï#djĸ&v4.{>g13*d>ff@_Tk@TJ-Kku^7zhkˡdkZ/'*^KrRƶܮaQYP-(.uCh ͊FKJo19-r[ԙE4h/71&lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0004-Simple Chimes.xiz000066400000000000000000000035261247673406200250360ustar00rootroot00000000000000Zs8_Rӆ$3M:8 h--Ak,[%>ػ+oW+}蹭 #ǧ7mvP˷i?,GW폷g~N˯3מm{F8(wo~BC'g"Nmx# VwN6OF}9Nhnbܴga%a!&V;2fy\E& #A( IF/$~wbċP@B([ XuKPAǶm;2Tb97'KzPSo5:>t22i>:$O֗V-$b|/uԾ(}@ ?t~zpԥosVxo68Z˱&Fyr%W}t5Ae%ŽxITd_k$`^$0eD(3|i{|J-!Z|,?+(X 2Fx0 B4JR@eAS"pG\r=#R1bPkqnm3‚[#,,u]2s,lqԱP{Dڄ~ʱp/tf%8kC嵐;Q1tJ%QZZYPj YEl[O)]8P`p!oAGחpɇ\|SΔ>qxBzjehލ!y ~cM{}Uaפx`+:I8c8x8ѦpTJ=ŵ*H˧1= :)ZTdxIP+Z0"D3{/] r]:OJKVDԡ?+2 34 ;9tҟ 4J -/t<0SMU$ECSKߴ<ȏ,7 j4k(A <q}9.4J_QC3>Z Ff t1I'MzxsuXAHS]"K5L &Y sttp3Sjj'A)){n2eAK p" goBq: ЏUJq'IlYG%zH-s b:=a +r xټnofihPi 'i)өUeQa|>pST]1H̨H&=th60^P&yuhJWrRe4z74CGP|>^b%懽9+]ڥjCs*}Q?f?)lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0005-Silver Bell.xiz000066400000000000000000000042361247673406200245170ustar00rootroot00000000000000\[w8~! &=4@ dt"q k$$l\z[3#inf,ͻ3?m'?y#2ux=E]튮OFe1NɍٚKvڸޑuLkxz MC>$WYr汴DCcGaIҏcI2W+$VȜO,7ܰ-Dr aC !X ȓ9 f{2_o"U5d~Q Fi-Il]3~'8˲mg.}yB<_i"^s"E{fjKs`8lxv {Ip͜etqXL x&xL:,K2Os\zc Nzsu-|eL/|mBzw& =!$wTH5H  d;]Q iyu1^\ #޳!x3.u]p== 7]5]cfv\",4,uMqY[[% N> /WCL{OVwjD&X!܌M~K uԥ$> њ r> -$Z2@|Mg>/qAMndo*^}F/퓓6Z< $Da';ZYVV$ BրJh2.AGab3<7!AHf4y=.B:& .w~"0DJG `BKgaU@S։C3IyC?ʧe)q-rC!<ȉ`AP?)szg}*(lၜ:P<| 8bb, lǔPdS)#Kێ=| V(PEISk|+“tQI@KIDJz'ВުKz RjCVNSC%U|$E'q'gp>'R%_fL4WRIq> <Gr:= ҩ$ۊ1+D U; ꯄf\0zވdCo+(?*+yIIdQ71#!%Bgi /Q:"h?16+ 45$ o,TM^˔)f@ u">Gס#WS8  FB Vz͔.O-.v'@ێR~2x`sgYKUEL621YZ~Y0*&]a&)O9h՘zV2t2>\o7!=igZެT_ujnUƉVL3re6߄m#؟fZub2*,|),\DJ-l59zԶ*j)Ȼ#47jJ+iYF64*FV]n 4N3tTnpgYEM];-uD.Dg_XW`QwtL`-Օ(ܣ#\Rw@֨XFl/AG YSa1jWJP~Z-zŲT Ux}E}8GGٓ*nTWzj՗(u9!\QwP=r_,(4c,E2mԐ7۟l_پ opyYk_ħTBoOG/yNwą[I%xpI$;iG ;=owfv+ċC=:'ޥJzZ>TZYOt-߭'_]N;x;zODj=a&Ddž?'Rň_1$ró {sW5hxfL$ I$_b1zIgD9⇞@3B$Q} R+H|IGRɗb좒/MT 촌1 ZZ14T'y(.8Uw{ N9srYn}%Vt+; @lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0006-Soft Hammer.xiz000066400000000000000000000041671247673406200245250ustar00rootroot00000000000000[s8_hL+s nA²%yeckgxj#VoW!޽Yk+^՛oNs-v/n۱Q4ئ!o١~z.G֏Ě>[9os3NۧEk++Gh7>tƽAր팺3ł,a|^ͳ>[x_Xk<6ad.HZa/,qtr{BN ]xz L~q\K'sf\ss&qT,PC/l"O ^%hγH kS.e ErOٹ%Od* p2<#A ].on3au!YT aϧѼ9t;adt)D0{ٜ!DU8ZB4I H?2E(wOͧfaJ_4/[F2Hw]M|ul%;ݹ@(3 QƗUm$pk4gkb^`0Y6vX\?8E,y89wIN{ aQ6kjb']8(P.#Ylyq$}V#䘍XpN!;Jގbwxؒ% u).(ޤd YΆѠl]꜏MzSm@h\'MY/%ҐKeq Mȑ+g05vJ`͔ C. 9V3u-s&x/0hd6[ f,ZA1JNczI$HYD F7{Ms}ޒAM #S(&Bc~B#҂ SZ hV0Vx9yhyoQU,wSW,Wb$QFF0 Y ڢ2IUt(e * ?C=i Ő敃O`44^7=' '"USy ]6Qq0yM^!ZS U7l`K`,zق1-X; lidʂЅ+%ǽ‚z+ױgrW}Z0p8zc3>!ke8 BG ڼA?s3DWtM!~-EdH6ta];L9QCr3h\Ei5,Vhp"&n@ZZzƍ#CyA#9@k$Ei3\ xeME7Ȼ.oR ~TO;$l?$ x˓jI∇siC̗Jk2q‰dH˩l {;M}=ӼKna4/sб} z|"=CJSR!.7ԣA i3IB 5ɥ>PgxϾgNq2UNMi!K܊E)@%, >rRy,=ݮT@t4OG/wGeMk}+)EcddBDI_d3QE,RiU?Y9BF^XYN`xgw8ځMysTT)*Y4^UhARNË%yZ,Td U4)eh'5p7K?N*-D6EZF4W8Y|j\ݗqS>B$ܗY7Ó+Hc1xhx,Cb)o~9QD w9fgԽ pJɉ]hn'B0YZs2rk]iZ #w]4L\ c?8'\yulgtq񯑝[n$yʪ, j}UaU07z4}MF*x7_Jkwz-^R^QVBYCS{\1m92iM{B#xڤ&ti3yZfFTwLjjCI!S(!RjCƴtcY=ihZ=4m*|4z)НbW0)s(DcҝulIswGS$o:!ɎFSFS@Hn<qC* CƁt]`_;?f!йi }Ozw]:B7~[2؞ͯ|pZL֚5 Wy*㞪kaAj᳞Zح멮zS=7S <[%yD4=> _p\to+Q޼]̐ۙg<6̜A.s@3&丶$յL4&M9BDr^4l*Poe\Ez^tt2tn~K@O!]~K_3u]5΋c'=n+\Tp3|y7zءRyK\5M{nHy' ij:ZĴCڴ1#ĩxk }o2 -z}h]5;Yr0uܲ_yDxĖ!Yp/ypa1!@( "X4"( s@38Ƌ6[XUd?nX͏,n&C+=OXw}gwύv.XPlX!װ1ea5тIohȐ6+&d%iŮ]WH ^m{L}Zpt:Oud07s<]Q0N]d&4R\Gt+s|el"%(T}wy|%s$ܐ//(ZULPtԻL>Bfh+y ?TIϱg/yhQՖ.JE+% ,} C2J]Tp7zcf8Ǽ'yͩcpF{3?C2J|'.D&HQpC#yިvYd=>^7;~~8nlo,?m!3X}C&*vBvqw ̑VW˕ˣxkHqJ0.AFe*پAD-^)l=%ۧAH3]W@ePO?qGAtr/LlPTժEw` 4N5԰Q/8 Phfq8=E°E4o7 TnyU vpUPjSE]aq)H1چl%XZچsyfF\}P|ŢIPk;W3ZlB/xo$QymTji-Q y(ѩ(yI()Ff)RjtE~d³qq4 J/hpݯ^t=B')-< ,'% mQLj! ӀF,(A4S 'KsFfV}Q6Wn"g#61NfII@\aɢa]0 j~䒂zYW `G wږK:QBM#3h&ĭ*]#[9BxZjkhґgqeE__pF#Ae>k4fSW,7HZW+N%yRzg5c‘wLR-8 FB9Oyjեց :ojd+7\l:;^:1 ,8=]E$哠TiI:}bD:ߏ&vODe-;THFs^x))"e%~w.|fhz֬tzAGOz:v9:z {.ZRW!Vz^cӳEF+ `.A뢺U^#kO]KZ>պZGڦ?jV|vj#jVjvj[WݺZjV gmq|68 5Ilmms-1.1.3/data/presets/ZynAddSubFX/Collection/0009-Trem Lead.xiz000066400000000000000000000077751247673406200241700ustar00rootroot00000000000000][s6~ϯ=HK<ֳd7¡%f#*I9= ݦ;yj*;pSa:?ﻝ Ƴ0zxx{vÛw;<|59:nVw'~;3VIv'n%_7Řo) U:WcO~rOuռK^\^ޞ^^tz?xWׇ N/݅[УfW3IՆ_ `z (͒"2,}N 44u$-Zk>4/栵=Wfs=zOq8 :x>-vC& ;cm,:g?{lsf /> ruq;qҙY؈"AjQM 3p6 0XY,i.?EqfJyY0@:΂/-B5@J42fVA-mf zϏ6edB9XhIxmzC+#5INK g&ɡMug!iUTmCWŠj ]]9"7\Dn YCێ?Dn0XT;ˍN,|Ш.AY-fLŲ5'@*B^]эJuAxy< ry^/@>ȶ^bfF;P9]J;<Ҏmvڽ"ci]n`d+Ɛr, GJN 5bGz>2@W 5| o>m00ZGv8d`Yb⎉|+G$ E3X<ր]1j`kj-xb!ۤ{HzqbI/I/!%F 80a- 01i#%FcXb01a산@7mZۤ7߆㸊bo֑I0F=fds:m3]d)3;KrTx)3;1g,Ɯsk(uȧs s# c:E#%9P@ώmaK#qMg=8l~g}dscf Gؒ]-pF:4IH6ț>EU8cl `e2B(ӝ 1@BW" aޡ<@.U48@Va,1B7m 2s#cNkL,ORvEA5YeZY잣>ő]sk6pQڀ3s> ѥ4O\8`ԅ_;Os.tW\D6wnH+GN({qeP?sJ]C2V0/bPd({@Xֽ˓'e(ČR~qQ5v]=`/({s(Ne vj<dž8Cۅ5QQ 0L4 j/0}t ]G2 QlT2]a_>Rtyz4i_IRP{Bz'(νtI%}zu\+TR4 ?˪wZK:ZۇTL+e($2X+o2/NaU^/fnZaVԝ\S>U PC祟uU.=9:=S U[L;*?@ږu*eS%.:~+)AC-4CtyMvtdCtZTZ^m櫶D3J/WJ/b~) ?ChV̰j\ b8YR%?>2'Ѧ!&XՙԪHQuuKuL{e58HVoW|2Sm݇IZKBBz[orZG/d ˋӣbZ)bQ$* ?3Ky-#w.^U ]'d2[O^.^@Zh!M31AV Y+{*v ۢ, s~ l:ebFeX*@:C L$je-Qkڱ[Oj]햮L{Z{kY#Q/vHj3LE5cmuʒEi%_ު^ VP}ȥuTdPJRIJQgkYi/GPYްYlxz~򚞞aOOnlN#!/鎠'O=ZN4"r"ƋTŕ?P oP+Ԅ/塎 _0{CO{#|!0ߟ*.TP'IL"2qKr!$q-EyKrqyGVwM奯"<1C}ce׭pn֭0خVlu+u S]W躼}"?w_cޯȑeɐט $}"mH6i?V7S6$k;$(.mѿŦ?<ś?L[cc&Ӊǫ9F2'ef-LSM3.)!(N܊2W-ӕJL3 [(2~K$ѺNZ5)C? v|mi<|R-S^46n/-7Vd)?kTa}-8QU,c:{b,Tc@/cB9D:tKN77m| K=c, R}lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0010-Trem Synth Piano 3.xiz000066400000000000000000000035071247673406200255570ustar00rootroot00000000000000ZMs6W<;T-)ֽ` %R Jǚɡr~bqevܲXrϏ[޻N_ӧc7fy4[Q]H?*h.)]4F4 Z? i84&3+!nw:J$K/AO,iYmnN2ꎻO wSH|RX.\'?eaB,&~q(ݱ,Y';L,N,ȼ`.b@&{yEVwt m`2?>8(  iLcZܵ52r}0uo{󘭏>/։c+)<nX쯘gcn@k~YtdZ Z6+wJ绕‡ܓKa#*aGRt@'@!RP5MپKVA&O'Dz JV'%mfh}tQ8׳V @bJ4a8ߒx;g4ab ūzsdkfA/u.AWXw=aW4y2WyL R;Dkܓz*Ku{ "5g)k^SfG,h0PdAGKB#Y̳Ǎ! ӊY2gwʦ:.ЬܶNeENL {Ijrm"NW$ +[b4HFZלI+eBjwj ҅;goa]MAQJ]N5Ic~lUSIڨU/"7VUX&k*Gg=Uej D^2 =j7|OW͗-ߣ{/s]޺_*u纼):@Bʋ<\B:s}u8>p_>j=6v}ߠ'k9Uߚayi9|}^plG5FAO?Q*0$U V)%lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0011-Trem Synth.xiz000066400000000000000000000040131247673406200243770ustar00rootroot00000000000000\[w8~ϯ`yO $@8IKlY (n}a}IÿHܚdS?%أ47}3tÓcWX{Q;Vkx>\Tfˣ]{/?+k~IC Rv*XnHnDph`E-*Mw6גKvQ^+7\(`&tD^ROnM֟Lcn #>2- ToŜToVH9Y2XnpK`@#sfH}A+<?SӌYMװlrw7J"AgNeYůtY]s>^W>Wϯ4d~QcsD!L(,/?|W㙢-AvLPJZʛ ge^TOlޖu{ӈS<' 5/٩olICHxh-%`IBOĺ4\屁uYvh gq_Mi(fDhk"pLd{L3@@f<9G-r¥:L"#]o;hu .`W[OhpmV`g4]lA jw:$ Qƹׄ" hr!+͞{D y̙:K #mODgMf wHsC=p -D(Iϻ,\);ȇ #9Jd+-B2hF(1gB3]ЯCr90p47GwB7ru th,:) u$u V#kHtF@CFq 6?xhyu\I zAAPR> <>kI,{ H1l&3TN~Y6d(/Q~B{^ZYiDס*EJ!ES!AQ^:AJ Y2ͣ)u҂ q=+'σKڝ%x~Ji*!~ 5d2JRDEg -J݂AJˆvRxXBA&)[,?QFŁrq] 㺨%gȖw&\ yPšJ.rQqIFQIӒP@4V]?I:ԝ܌G^I8ՊzNε#"TKbjVz\5YWS )OZ4]nO/X;oѶݷJV0IśvߙUf^+-`%>WV~^ =xo5w`N~cۇ4x=uSe ]zޥz ]]ͽԸ]z/ߏ>˱Ӹۯ8D/t zd] > w 宏~owXYLW+iஎp4qg\[ھ_(HO/|o=<|Klmms-1.1.3/data/presets/ZynAddSubFX/Collection/0012-Simple Square.xiz000066400000000000000000000040061247673406200250570ustar00rootroot00000000000000Z[w6 ~ϯ:9M:/qZ%vf;ݺZ I-%2f~=e;Z ZNjOٗ4qhӐoG%NK%9GaN͓VUCC ȊAGK;ԂMJ-̒HD< m7|"k[L75P Gn0?pn/W3#D(u;wg/|9xk|6: _lyuy幡9 82X{s/nVLxLiǁ=UvD0>Ћ=l{J%m2 n_@ud+̥s>7b#SVQ(!2w7W'RB0;P kГR ?Uyo~k22}B*T&jQv8{.@ 8B Qq"[3dzx!@ "Wk=sçrK[;0Z bX.nUNxsE|eA@}/ZɇK#>nLDq*g^De()ws!,cRr,N_$m-{S]^$) d0+MRl@sjPS/8p\'IiR*% *n1IHG*$M5$fҐTCJzM}gu-}B9$^`q4d˝b[3;{D ̕6-Jp TDzY "`bDW[%}D͡ # '\* c~ueBttj*x yk-\uQQy;.ɪkF'uAY ;WII!c4AJ ƌ&xFN&J;v[E<'y;Y۱h.~ 7x IU,<ɢ6]$0Ų$I94@1ܟhx^f:<bfkvT;PjgR;͝e4/Fla|.JvT"\@hXWCe}/8[iTJ4Jam8<"b㭒( Bm%+1-A! )|9"= fqR"J7^(eQb7z+4&~zixzyke[W(Mf V1 CquV1#+fX[1# X+5JZ;:VUn)ݦVMQ6EnST{MQ5EUx̏jֱ{P8|Rd,duomv+i?]Ğ-lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0013-Full Square.xiz000066400000000000000000000042131247673406200245310ustar00rootroot00000000000000[[w6 ~:r\iy,3ֽ0%WޯdQ")P$V@WoX֚Ec ]/x8ͯN;߽zbvh ;K8piB~ N#xAy<?(iY=+,&,Sve" (}Yuh}{#]Y1#;wL7LɯB/2taSr> (P0Tm|xcyy0)#[a[s'3zJ2M$>${6*DRBv .IB)84VH)dy<2U61p.OG6ס*@pcEP[s߭:^!X=A^\H r,xH뽝%cw d2#a9$.! ӕ|8zr;fDNdB/K" L Rm~+}R2ja0Dg4 (SD &,gӀ]?SޛjtP.t&Z]m-kf.-("M1.x4y QBVr0EH>GnL+KR-sCP2QھG0vR$~(tp|񹮰qY 'QHE3]u:{`+q]qvg'2qCrT[3mfNІY<܋5Q0mQe}Vg#q.U5U&ۛ9K[u@5AuQ-P$Z[sEH*յCʝޤ U }biDjWM@jE.}Y hzÓZq~Iv4QЅ Yd}e3T}\-l!N#["ˇ@'2e|h9jv}"dQ%vwIv2e1|\%QBJİ 9AJ9 #CMU9وP v*mFt"BX[ߙ)<8U,(*xE]Jq^w[+\o( Mp5ؤW0.=xKw[;1?]B]D 8E}]@Go+@4ОO8^! qMP/+WHYhߘF }iZ/_jnubD<&"3Pym S˭Q[pVzWzWm X;z>ib[y_pՖu_b 71lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0014-Super Square.xiz000066400000000000000000000046311247673406200247320ustar00rootroot00000000000000\[8~ϯC9̲ gHf/:nOf|!alI.Y`N:<%1U>W_ k͂a1o;tx?;lo&{6^q'(Vwu_\/i}lJ4 g"vg=xрN;VGCoˊG캱_u\FC1|U7bːX@\/xɼhZ Aͤ>:.QD0i$~Y"ǀfxq=Θ/oM'[yp &vl`kWL %ek],_|g͛_VkA#)eb_,?uj}BkOXhbb2OfH~'zɂ/}GF%S_p8秂jۤ?=Xs8M[a.sO҈,Vq$Cc#&EHYn]=)dC"_}V屁Yvoo`+ U qy6><'oK}/ Vg^s?[?s *fVyOsSȕvnh,Vg,}ϝzXWp{c0D40"dI(g&ȄqQ˅B``&-!%{f![0 'Ƚ c,8V~?_KɅ7"#} 㑶v-h& /?;HO ;Y^"䋹O(9ݨcYj(_W(f> BF Ƞ8NB>vHtȁC^ȫZ7ao%]fq/8Ekb݈-4J:pRU9]Y4A=2(r-M:lIﶝ* '?0]GI[i$bI$ a~,NDӿҥJwl Ǔ.ZIvRٔ-zhw{I,I35k$)F٨7 K)R 7\L{nEI Ņ򴔄+ȹEA%#q\|&HjIhIeRy(5TA)``/BKDp t?/wmIFR)h(4] HI69O 1O=p8+;nNi #s($r%UT~Ba-:2#XY^@I/9UJVs6QLEȨDZJ43]3>S,)uYZ*6!vDb1cD;)۬Th'ԔvM6{tBDMWJ!uvtAy\WyF&s7 eQ"$leIrb~޿vGA&9ݒm^>K֢jk㺒YIEΚrb|+jJPimΡf|שEϯחV?Mygx-ϩWͦ!5 R?5]w5]ɯ5]5}Y%5}rM´c/ i`HIx\x,}n&-+Q܀NۤQwCObf_W.[]wʊszhZRheeue+Qj PwZ tz M8_!YhM|dAG+%ÂM@!\{ǹ)C*@Ӑs=dߞ=$l)ܪd'T&n(i~8?l|h%?tg-}yMsC*` 7k„@5/ׂ*ظX+kE,e&Fa[gK:K\pں?b;UsYEB9=]lݠPdh_$q-zڥύjҮrp}_&_),qj nnƋk!?{|`?U1kT-s.x&gowCd6=;L`!1M!ݜL~K$IQJ|X'Ӂ\y$Ctlㄾ sQ Ŝ;5kXь}! g3mt]\0)foFT>qKS~6AeM|Mehċ *s Wk#މeD4ar8*4%ߜT@e4~?\}/ #|π1=I`K}2~mq./lSU s<}g}Cڠ{(V]0 ؑq] }y_ryx;:!:.ȂGj; ۤb_/>}`:W7\|D>6xG>L /4{EMށ8[r?gK {1jSℜkW W[XI69T6:5;ѧ͆d0Rd,r6`հ~ڮ*T$\%EZyi=z(rUJeS'T6`(ۡɻeBYFlse)ί7Q'+XA<-iFm ;b ei)QPg__ ݔM8qwGttUR}"e|Eʢ~OX6dP@>(&,eU"*4R. k+%JuJo>јq .9F,(7^hiluhS-1Ңx`0,8K_`v;;Adq~KpK^vϭ̼gއLl_z=oJx[iR4@%%,͍WO!b6A@Mf&8:5Fl1GsJ r(3E !w 4K;#Bn{ 56W)sK3@,L&0\Q0ЧH;Y)V]7У[Nh(L@+CzY)'ljub*’ǽ9ǟ!=4>Y)%YbzVxߒO}l?Y+}"B}5yo# B.|G1_z q$k@TH^A)> U/r*rE};`_WZÁ@A>xØNSㄝ6y k!ڃe/Q\yP&z'97Go@U][ BE[O xN xڶ$o@/BQrHM{ f-/t}f}|K]XVS墂hVs o7rᭊу\f~5뚦zm}u[;êXmuY֝\U>|w ҵs<]PƵ˪9ʵ.Hy 'J3W &kjiL'H܅6%]Gu:wڸҩ[[`ljbtK [-~WWugs7 ~.|}Dʵ쎬R;o)R!bzkiX׊걮cݫ:c?kn\ ~x>Iүg=o%,G܃h4Z!L.;kKr2: i$e'p+Α]/ݒtlzDBVd+II?ޢ+eJ\A9.Bqiy늖ZJ1ԒCK CA觊B`M( |;25KV/杴)I?QA<^>ٗ0G cW}Z<_n}WVMmO'|8? /]Rlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0016-Echo Bubbles.xiz000066400000000000000000000043661247673406200246370ustar00rootroot00000000000000\[w8~`yO!%9MzhBM KHw/:-ج/41-#s+I/SS33oƒ^}8T,];ZپzgI].nە^q(V|;~pVWKU_!6wUE8qBۥM+=;sz[O0h{ߴ^Roݵmߺi;x2AţSvVG2u(I fuɪ~q#Fl QOa !061[H7eA G'%|.hLk3^.U 7kup &z_yElɤwF[p{]XW2 ʘm:K/X㢯sHK>K#U)]e}~G(X (GbugpYsј3).jF=2hoтC)q{˕E4 a-dg TZcL}ϵI@=ǟz, C3yq|:Buﶍ=B@dIfFDNh8DhK"PK4#?C6a4>;O!' 4a08p0#wKd׾sq8 w\r5xx̙FW8f6O&Z{ADfcJ'#(iVg:M(p$d!1st؄\e}/H(ȼK2@kS?݋OeaQI):EAd4)P"}JGB:R.f܁p.wr^:T [u)\֚́~oX9f7ǖub2Dz>su]+IWk(uF@BFyXkHJGKy(o#%E 87M_)2>i򚰖*ʵ?U7Ze0VRԤ_u*\:FTҺg p{fH%C3sk]^hʕb)#0cs޾f/=D{nOjP]3ߢSKLZF(p; hGAD3PJB-f꡵ /8gCƀ@3%[Y[T vQQwAP9J q  F/z4pszJRC(Z I߱fWȒ~\QUiCsO<#,˻AV%崟 @YyuW)WW\5ïtH8J+@&x)U9w5&T$!WI?P3t̶H4ʠIzc[3dN62)hycw$:Pz<Cg N񉜃4iIqb n{v.3WyZo5mk}ne뫄i% NQru/mOvB_3%Z$# dYJ[;knRK\=b7#{;͈PqGZIԞsYThjK )nU}2@7T́w?,lp8w ] Mql0@{¢x-Pf^ 6ƯF2̠Qd ڟjШ𛻮Bed!M׵oBx AχF믇Fl7Q-e?P{ 5hT:,eШFM{M>=9mȠ˻*;<_܎TF 5hTp4zK4|hv^s􍁣8:a6gQ8HeNH-/{R{j6ЙPG6'/`hs8Ǡwamx]<܌KYk\q&v.EobGћwI-z;}M8m'D[oюƣi=aDZOb.-+=h_]/nP )jiŤpt@oKR=_b)6oܽ9_D|cMW8,e7%2W͓׎%* _~L]˘ cQ˗1 ƚfF-2[=%=ׯߌr56,曷|[82Ӯ/2=Ǚŋ(V~;W\-S>~md< ؆g654V툆65vD7ƄƮ /]o>_kS]mC۩- M }"޴wgͭ,uyqxU"~Bf~hϲp"–Kf+hW Z!ny?&n#+o漁S5;k4ϊ>Y}G4]#lVۼQ8ˀmO>NepiĂŶ4- 92!|f1溡Kq$+mLVJAnc.odrYRtO8r)tP @AEj&ugp|lӅ[銔TcHǡ`ɐ;RB5h:e4wH$.XU HʻT"TMxqb[h 6 DI[5 -|N*\FHEԛލG2qACF4L fe9輿b[n.gl XY=М"bv (z*E=,DgK΅Aor.hݚd sH8z Ju&jT c< 5h ģ ev2k`,Anm jhPQdeV3Crxǫ[>wa$\5^-ͪ]QWez]EKM,2+qZOX]\gl)F*Z2\J/uaek Ո."AR$1MZ|W+Z8\՚C7&Kr ԡ0LRaC$|z(# 9%RejrjMfzQ&oxwz#v3wiFeaFkdHuy%/Q/ux/yy~l!~iNؒWdkˇk/oNRayʤdpZt0J(<Ӆ)| (|*>`ɼe4QB t~{P:uǍh0RDNL1Ǔ)HaE 6TMa>-1/jhjb jY>5NN^ Ȭ|BgdÌr@0~xVԪjziW (:FT{n1'TKu63Bww+jݎ$'z^J&m~HzV!]vQl{ޕ=)E٥|w:{t ׀y >BHK!TT$C-|f1G!ė8REK`)Uއ \O3 ]s&x(q}/d&bk3L YD}X*I&=^i{h0z9ëvN74PcNOJҬU+L]Ѐu6 >`pUq*=3*EY4{]jd 蒑jv*wIYV"7lZp 2FxNR+If ȦIW4'* J5aBl= *7y'&I]L8*Ģ\Or)%Y un2 [bO]׽83%x󂫖|6s3 uf2WltXYjXi tzk.Zc!rrs#׬e-v2J?Z7?"X}]vΰKdO-kPPY_ueTTXp S?>S?>7ZWbÇ+Rx~{J5_.Xa?\Љb@#kS0r[v'/pv^1![WLr>,}|]<#ܮg(?R/_'2lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0019-Soft.xiz000066400000000000000000000040441247673406200233310ustar00rootroot00000000000000[s6 _=u|4k-3ֽhʒ7_?P$Jd)6 ox\٭ |:maӵp޾]?\yrn{-kί:h@[q(w_\mg##7rmN`)hG7ikltéӺ݆I?Gk: wIv0L0^ˡ+v^G'0j0l#ypnN.'S`ip3`2dcΆ].\51"RC?I#"PpNT,\dͨa Om0pM L}beQJz>Oݓq0^ƫߧ/hto)41@0?ߞv{Q\MP{^@KJ%T6Bm O !{XlZZ4]'L&̼ AbX@.; .?%- B'CNd)P]1I^s#߸Dzb_<| F>RuCD%:z/=:0#/E]wJQ! ң4Dslr׫@W顠JA)m $~PSdXQy/15 y/0a2&U2'ŮYNۧJڊnU/$]L QtVh7'ܔkȽFDlT,#r=$=Yuc|D3PJϡB=RFYfc/*N&1 o|:,V;"1 ĕ.r` )I(1|>2EDK Ûܱ+C-FYFFLtI+<-Bh5qW6=帋ی wґ:{E7C9ox42Cِ}wo5/}t$EEΝbׯsB1&&Gb}iWtKuFj+ا=:ip 暀O SGhgyF8kFl&>nfẙFo&;5{=f'hCB+t.iOpe`p}=~4nc[sV|Ϣ7w1-{=ő}BGWRz9>[˗M7j(iSj v$vj_Gd93 <vVT =|"j#ԧçۋ6OJ &U 9t0CLWŖP骶>:2Cc;`0 bT7lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0020-Ultra Soft.xiz000066400000000000000000000036071247673406200243750ustar00rootroot00000000000000Zs8~_R4?ft%һދF"52e-ɒ n=1+iOk{ [k'4bmv0? ({8oOO/r5~ڰ^L~+?.(>ow eQ@.y5k 8 !;ĉ[#5ŬuӰ ףmo: [ޤzmO -伽ďhIO`78Lwު_)GeV$F%1nM9~.eAk_Að! 1|i}ju[Q 1'q-&7+RA#`s~@Bx.@e,Bylʱ(4mۢy![! B #oԭ,S2lUԉ4^ Hê7LM@+ӰQf0uB*D|m|X"VIo8 EOlc)"G_T{{Tq1+[2cջ259keĨb̂hH8JWvO]߆0,q' ak PLB=L )#\#;z(P޵x|dulh-G5pݑc3͖5bs S(u=;zAEzlnV4^BS'KӤARbja/LPѤ* rxi|=0qsU2Ŝ8!$i3twh|N*c\amE˽;4.Йp:zo;+fp8:=;uYMĞY wݩ :UQ!M ʣkECi=S}]8V k%(A;wzW25bggF^KZe!K%gK_ut^I.R'aoxhWʽhQ:F~b`LhÜ5M )JVP{Q ml[!tcUm|ILmP)O {G鮬u0ndAO9.Af)5#ɤ\eb4XrI6+݂^Fhr91ݢ_ z14т:VO2 11-4MY0k`]i rdïj%'f4tRNswoJהw&(Y`cc;@#; ;B&MP3p/0]ځt=OP?ol;,VwRAE& :W#(w1g 9bpWJr=E:KmY5F yn/~oGx7{'{r^ ɹ[}NΛ;{̎͐s WxCw_>`2-c)|ѿP\0/:Dwԥ֧ۖlP*Gs׽C**Z[+7OS?zۧ?MG;{Jg ۯӊ9<ּlfᬙFlf>nfẙFofI:53}ra& `Fz/3$|NRD{п_NEj=TLhӍ~ʚ`("ٌff(XdLdw58#^H[*mW7XXqPruʩC(9 9Oy^1.)Csq4QSkCjSJ~b7з{tYp{b'ڥ`A%Su?]ñ<)lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0021-Whistle.xiz000066400000000000000000000036401247673406200240270ustar00rootroot00000000000000Zs8~_RLr@z{[FloeK7Mg)]I~Z݇eZ(桸hw_iBw\._6dvO%wG%Fö~EJ y5Wc-4TvHcFkNE&A Gt0:Iƽ?Z.E{Iɒ#lhi{j ~pɖ1Yp(Y2!wśϙgqHÑY?rSߏ7B.:U;Ud:ʳ PL~ǂ2`:ٻP1Am^}i}n¨Pɢ*e/\^ Y1iN ^e, >blˉ0mEM BǴ/Iq^ieHF>\olSQB!=|[ĪOdh[Aa՜@TwuE&_O(M&$,|ԻL*xWTe!ro͂rC)K 9&۫NkIOˌUfå`qL0YS?oFw} aYN/&d4Y("G2qKE!&[>:tFIFc =L `0`S^~ۏ^:W;O'Wc~if˚"Fs QPB9 &ay$ja =t4t L N@ S3GT"`"P긛TBBA<ڈ@lU\_jDhulF1#%IuwN%=T]mƩ<Ք[ԁӢ#w [R pY?܋:q'y>rA"x ͜3Y )WP}f΄{(5ETJ}$_8Ts8MQf"sأ$aq}~:5 ̗;ŶfvI2)0WyxJ@`P7gҳ͊\8\n}8/Î NcdͅX˰niͦiB-^Z#"B~U#zio96Ӄ#;B>kd|mɺ~kF<W?+!Ru ΓvzڭW/=0%]P'mcb;ˠ"2ma2QUpF}P˒,P#{ءl\So|;.ӫvKNzqYε;ŲjgebtwhLW7M'ep4.R@6jyt--yƫ*RGZGC9υs%P~=Wzli֧l+\t󴪻*e'q=V3O~4?,훟+ ;5k.;aF8kfnfaFnf曙>kNLi@G.^n/L3$|RHxп_NӚ=]L_Ŕz/Ÿ,O4Dh5TdNo'9+U񮃖ST[z^ЩC1CsD;;Q֗CN-gpu+á`04C|Q"u]VLv|;]0Ͽr7"'%vpj}m <)lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0022-Wipe Whistle.xiz000066400000000000000000000037671247673406200247270ustar00rootroot00000000000000Zms6 _{yir״%N[bgӮ£%:f#K^x~M@VzOMe"P?>/}gℇEmazgc+(Sp8?k@G6yy:HdrJmp2SY ~l}#|Y$V, }Sc>tw|vN;>MY\Kak'fԇ1q栜 ;l= iiT uT"mݒbJOzn`2 C_HrA4mpV`ޣ[a+ֹF,7w[Yff#_iU5N]U  9Eɺb~tM.wA r,xHގ6r)זvZc,u-U2 Kbx2`IB0(7>0d7' V$ H ipGǒ3rNA;w܍éQ׉,/(iȺ(/vˇ-&&jMVNs/'$F 3ւb2*Z,H 64ڛ09Lc qv9cDC $XSb<%Xu c|Պ7-wp:k0e ˰xJВq!h8:Atd4 /-X.K]hpo> dO`lCyK&ILnHR|g1MS5>$_LTshQbL1wa9%ard˝b3;̌4([: eDK&-KSAI09A!&&5)  Ɯ + "vaUI9vL)w}Mɺu+|+F5FXї9H!SRuΓAɈuSA g;pfHCZSjf㝅X> *7Yji 9K4(倒\O*XlSM:G-~~oGɥvL Xbx1֍ݶ]sJ9c^=.DM"qøh}4s1*R=3gf!FB(ꀰgSnZV8pӪ(z8ߩ~_ۏ_~2ӗWl(,\nmfᬙFlf>nfẙFofI:53}z.cߛpz~ŌbJv~@N‡8/pTԔ衚Zm ORˢIڮ)ŵxJHRokzГwVJr4fˉʢwv"/g!^Z0mah 4\&U:{[1ҁ_@w<"߬r؟h?aQ0a+lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0023-Ghost Whistle.xiz000066400000000000000000000042641247673406200251010ustar00rootroot00000000000000[w6_xO)9MwXB:Ȁ^t-Vc3в~F$_iӞ=5WW/ś֖ vv^09:ośW֟#~+V(l /'bˣmػm0tюhKӰuO7A6nƓl8:_Ow`2/kBbBV> =kKMO<%]Fɖ5nuX$4#f᪟ 8oٿ&ӏٯu,1 W,dԿpG4 . 3[DOw褯1M- h-uNrhgRO3sĭ%WQ=ЏV!KG~9q%v|?& >쎠싅[xRHMIRÂ>'2ZtIFe<1!߄ @rW`Z 9D>3ߧȬ&43ŌJY⢧T!d:&PyR`4{uӍUE6TgU?w]"T#)d55 셭}02+Y w/i #%J$ԑ"ԝ:i=ՆֺࡅVڅ8q$n@Gm;Hp8vr![ꊴHU Z{pm,{NXh,;VVn{~.#62~=2ŭ)D-Ts.X,gHLj_qFAcƍ ST=Aq7Ic}0 L^s#o i5!lML:10 F:`жd ZTs(5'Y_ݧ1Ȳ~pE4iejEhV4ve}:(ĺcrOoRVפ:ge$YR}a=AT2EUua OFf MwVcluIg {9o!YϬʃ M|@;ddD-):`%r6)ט]u-{_ڟ܍Gël$R9 `׸+oXf^*uhTϻ'EGBrm[q}u99l2;z !w? _m\fs ay Ϧ"ͫJ:3\IJ2^.ˏU~uOn-'{8}1\j{ZVU:y9 .h8 b?ey ΣɺJvj]1Dڲ+П» []FsCZ2R5Fctmo4ӭ#=LﴜQ~۹̱elbX|c!)qexFvVKxJRAi}>pqPr"ڋFC:5Oy-TtFZ3֍ҸfxX7Jn6c(mlIFڌX}F~7ڇjeG5Mtl9M; {6g^=G;˲0f"֕a^u]emR]lԺ*QWE*h]'QȲjDvU+òP$Kv54Cf ah4U i_י|noN[wtJ,༿k =m [48eQiAs1dj/#wlDy/xXnH )b/Gm'7Zo_{#=y?i}ju[dmd RvQ?Y_t;JraUH:.๡ۖ\_e0t mXr=Ju.~(>y(XvmՀob`uTMb8$.4xU$(q:4kIdq?Y~@$c*(˦يWI6n$v:_|: 5 ḧb{0 gsb_MS`-S/qCeQSؗ\,u i#꭫{ctq5&>}8(4Rc 213t[X w3ZKﲇsT'F4<TKSCb9|e|u˦~BՕN5+Z_֮IH5ZHՊyĈ1(8Q^|Ndl*1`"* ~bBUZ<\㍻RnLn.S ()I)ْ|CQH*q[*.턑%Q)%{HՆJRIUz߆2y9PEp1 &Wy>b,@bA5@9l\)VM4#r$9vv3$7VlOHO,xvHTN-HWavdzܸDF!$Iw׵GG)O**4F&[9VMߠBQ,xPd]*3;op؊.X&!m~QjFZL.:@MzPd'B\$H4d8;eb1JRw*+ -82sxyE&JEc_8.|,&:5>puۋOs]\^Q<}ڬ_\uxA NYG܏7uiqKZϰ'+p4^-VFGMk^ .-U.W㊋YxEJ 7+8Я2W_O 2~5Yt;F 1Q9jpY9gkc>BZP!]qQkkw*/ʝ wIFxR~2k 22=fTk,)Jkv?sF<)lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0025-Slow Strings.xiz000066400000000000000000000036611247673406200247550ustar00rootroot00000000000000Zs8~_rO=jҤ0Ӥ%e. w"-$[cْ!pӇ>eb%~8yYpgɇMsQˣ Wϖ:n_^G9u`~oÿΙC&0نL& e7bQ6S%[. I<7c¾mEu Y@ ҆%gO%F1n@mP+Vm$fCT@!:6@ RjCMCtlAGD| RV%eT5[yrdS8 =ObJ~n'&эqIcF4ƒ 8#ߜjIO =EUB]HaW/UǠ]ԇq%ÔAE+\QrrFmzhu>\,u i#꭫51c2h灻">}8(4Xe0r;fdNb:g趰fѥs'뾔4<H)!s9|exu˦>GF JA ikN܃$aU)ҪijWy>Gd>[   W.US=F{D$G8Nolnp3Zk)&egDeׂtn{(?d6v=IE Ј_aYɖjUӷBhrK\ed K vXJgX<anM;S<,5료꜇+qwDd* v9 =eN=&C kMBG}zeT)O77 }v x{ ?^hB}:bAZGH%i@MVW'[{8qBCCyGMcxnt..-*U`"%q 4i+{eZO!~5,KIǎ)⡆(a il8Aج  1GkqTjgA}|v~w5v=vg«]6 ;T v/]j-Ey=j<)lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0026-Pizzicato Strings.xiz000066400000000000000000000042601247673406200260020ustar00rootroot00000000000000\W6~'Hz2m aIֽ[eK'@GJ+Ov޽M{js-v|]{Ugvl{9{צ!߲u3AiMoN}rySå3v\K7#.Ռ:նwF]rv.pkf!( RMf+֤ ~uBl917\,XЈɄYR.@)C o1 }\]ƔklyAfslc{Ug^0\ΙUC ܒ?zdE3m!]xtAiC4rI@Ioܽ4z&KoRP/#7Ei8r12:gP&Rp;.ʖm4a6$!*[ BιsvFF(e^>e X7>{o 6lSׅ N%ZHM= ȢȈkp#soû|cr#U,.{OevDdH&X!uT ~%mO։[&>2Hc'ASe o$.!x!4Q?1^gk~) Z7v nWoQ RGYTp$ӉGꎦ&E3ͧNs^$h" GcٔNA Hir<79♬%(|?wl.\G(,#Idwȿ7PB[*vHrU4'W^ݲp4 I]9CfLh6M]r WBYcKѻQ^RbT6 ح*uh'H( Zn=RMBZ_ ޿2:IY?O&A ,tV$jkX*_󐓹T 'i3%qbhvjIvG~Yd)|Ns8 #Iy> <~,{ XX,b2Z<uP]ęšs0Yiѱ-u"`tڻP42wFo,n`A&x"(.M,pK d(2ZDETk̀"UVavhPf.BfUɢE#|wT!4(;d1} ^Ob5.RENvŔXJj*eh8Т%s>xqE(2{L$-MΙEdhjy2Iډ,eIq50h6x;Awm^$B&gSVpV_hD͵Dj'Ev024[,;2>wi!Y!!['ňW9V'a7#ЏzGI9ziLX4ZmjJgӔv݌h4+gR oRvy6A@¾1_¾O؜oPTW[txKsBsij?@{6j@3V_669U_`~+ La~+ P3*[Q|lcTo~An3Mss ۯyO^ Iϗ{~ iNih[ UL@GOU>cEUXz#BuN?MBۣ%XӚnӼ^6M#s./X]Wq9Ѹ2[.Cn RF;f7T7ITj}5[h`B/ 9 nePtϻP|N )w6e71$2"V r=M|Z9Pعo.]n*]I(i%G %JӮ]_R4튚%FCoΤ|hro`@+u7||*~0_}]o}E 4?o Plmms-1.1.3/data/presets/ZynAddSubFX/Collection/0027-Sweep Synth.xiz000066400000000000000000000047211247673406200245700ustar00rootroot00000000000000\[w6~ϯPʺsܪkK^InF"UR;H۩)5337oZ6Ͻh>^4̵O{V'dO7͊a[ łYJ=S ! g> z`熏d9[XUl>};Ϲf7`g֍Y$m+=MZG7^l添ƇF% nyHAB!'ܭh E|ќ<['z#䣴au:׋ ud46y"Ja._2;.HA(U)MPLq'KZ#R^%hw0&970To``$s+28Q3P.wDGۻU/o%c P"ܲg9 )qqG܇1[1](=;ZR_,,-?I XU3wOZƉo13RϨ0K#&qct@'+hCh(6ڂtsb´%}~^|cMBZdփH?ȳG$YBBNd0\txÇ`"%T͒~`'$M6&ҀS4*χrXgPٸNRH'*(ILI[#{Q[ާa(q56%fJ!Ui E] x6Ͼ ,G#bUHB#x1aKF޿p01Nrݚ)` -p2hnWAO葅# )DlE҄^zND5yKVK_TW+lp.BRy)zn V PT)\-&*2n$AUprzT_PV*-D6Z5i3d { Lg&o,d1ubp@0Bm0'c(%ǡJ>$}0GѶ{$yC" D/,k]\*R+qU6\M+&NS~# .E?3PKv!M5d uV℈0w"2w:*sEp*ki`CÐЛS\1;=nh m6%x/Ȋ#S×`z5|ZQ&_×L| 5~638qq) iE4 *esy @@6j ld@@=}ȭ1Qb5@έ@K>CBP_3薹~T;I}W?T(W>k hwMϴ#G_O}@>nW2Z 7zr>Xt4ӧUaock5Htfx!UCjU}OEчɊKg9]rKu9ѥlhq29os4xj^T*v~AlG2r~G}R(ytT}b"T{p%/PN{Aiw ܡx)噮RL|; `d8a72.H=c|"<X*(#_L\dG[&s5Sw¢2.}/2tto =9L,c{"@^{_/%u'|.6wފg^㟅3-qBPxOyGK`Ɂ.:D0#H{(k= boi` 8W)9p nK32Ѵ\k 3g2[r4' 2%ٽӶKؘ{BRa#An&9NWy㠑"첖ݣ-7k[n.Igt-YJi3 #-HRF֦VlFBA [k-VMH`  d;/f d0-ܿ,j1I`f]PRӲ3%+`U NZZJZDc)3 Ud̪Wnw^N$,Hy{ޅjf>MsG*#@LZE@ wjӆ,4錎#on;];zS*[-KÿtE,B[ ihPӬnqB eeq#8jE0qy,P05MAW,~0dN68C.֓GS}\of*eF,^+EIi jk#H:7_BK$,b&_g9, c*gZ${yi>APTɆtz`ρAYh }lZ9<9:k!5;@l8{BA̫{4[|4%ί?ָϡ,z -J*4 ܛez2*'x`r] ::˯i po K\Cmɀ,6?CriRbbnmZ]<`y;i΢hei+qY?܅eN|t9F6?ͼKj5|Qp^1U ꌵjO>%#'p c6h<订X <̃=o":y,5}0LfRg=$~HutZPEm;tx߬luTQ&FUw"EVߕJtQKO5k>F +Άo;N'.n0p/Re.\\ݟ>۟kPۿ~'=G%ؓƵɶsuչ;Wz% -y΂O8g|uHv}Rhۥ+xqkUnrk$8'g:m 8ǸSupWsYPc﫛}=aUUBL[~0^-hAج ZdaD(J"4#O]w'lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0029-Hard Synth.xiz000066400000000000000000000045041247673406200243640ustar00rootroot00000000000000\[w8~`yo B8Cr6,v_t[$n&)~Xd 6myjci4Ë-|uԛ5i9wo7wo_||6|=v9]^ҤwG1 i]< y] Z}S+?GגzuCM|f‡[5?5 &ӈg2-?<8 Zɒyr[- > "l>gc') "?Ր9 f$2X/g`4:``(\Bo?RϬMC֯,]ۿ-ۮ}p͹/>\_>Z5׫4`n.BAPN^2 6W@B.\S?j5bKK&foGgl9֖u?BUsYKvj9+['+,^&hYKc,[<7.]eL?f+,S<n=:Qr89:k/&{hK8` f ߗI;(,WqO@q̹ ŽK Y,0/mo ?;bp6 K>Cсn7?mzYBTK["6qSԧ{8&m&eSUuAq)7)Ŧ#B8P)%XM90C]~"Qcj\cJfWDsUDCeaдmȦ7s/2t1t8w0temޞ^{T7xWzT\C>G8ȶ=&z+UMEzIlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0030-Bright Synth.xiz000066400000000000000000000045251247673406200247200ustar00rootroot00000000000000\_wOAyOM9 iM vݾ(Mm.weK;IM6kfFhf4џw~Z6,]߻lZ?Λ پzO^>p=}4y}ǙnnsЈoO.zKNy7ij&Zp mݺkͲ G7]6-'l0—5 ]~'+q |B ]nuܳ_݈[dzalV̋ϙ55BYy/\у;/ZLWoaU G`4``B\͏?"jL KO[[ߙlF%Xn+QLNmad_C>'u;4UySy~L&:SnЎ*yaɜ;>\A 2iXUMKح둯l(GxJ`ϳ2!X6To`m$wk22\S0PT_uco%fC޶FR!-[?TI{tZo<{A`-Eҳ34#RXdKY1]n/Q/4XkzX߬HFfp_f iےrM&)ӄ0@N:2(F39$`K.'KcLD3Y+~~4Q?G'`x}'F-Tˏu0CxVq5QA "a`˹O؎X3]n1Fsj> 4}tؒA7HIU}/f#} -EZr3i08,xJ. > BF2Hz*B7Q]2vgLu9̋|NP:F8n^.2azaf=+6H]u܀0մA[=yA#<@s4ԒlG?(ZG+\ KQ<*Hr$ `zTSddeJ]e?OC`ZKp"T*uТRMcBNt k1n2Gѕdgw<ëAy̞S{@sC(E6DiJJ5۲RD!#r:}hIH %fJ!yCriN*`/f&x="~h1h櫃d{1HLrA%L *䤒a! РE W[mM>@P 52^1S@Pd*{xdx[n9>XT_%njE)zn T+Xh$*l +-FI'n1b"V6 5V[  wW4oLn-upeɜdd,u䂕$|2 bZ*XmKa`mOƣߠI/ʖ(kY5ѹH o?EIaiC|$*,Wgh2Tk=&--PlH.S鱋7t^r_PՀ!6fds'[;Ø qgYIi\9E=tq5Tn/[i2v`2zJ(9"5Ȩ 2|,/jA8-hkB cQÀԫ=|€5 0x HJ5 H-j6j}^C ⾙'40n50ÀYC%Ko\S#n@)8`@=z7 P#G5 ar7 w7}⨆o\35 PZV}(|mp({ H>SigOc?: ñ'?8NC ǜѪ(}Er.eDrK|9ѽ2TNˉyY/ :iK}ïKx|'aps3C裼ig~;,pu wf<_'G3-~J_^騢/s@Y|)[#_ |=qȗD!_[aL / 9'4G]УP9TOMl2stF>7 y)ςy,1&cyHdI``L ]>\VU 4_<>V*"٨XUZT*\xNf3?opq_¨_eϗ~:)k5߇GW7'%k'm"ٿ>9K[ &+1H:кwd 2G4 $ j~li^YqpoWUrR (D^Y7Sް8 ]e엟"ɾ 幫6sEqPM{AN5 "vnW~_eʔ1:B #cX"{T'4f^+$^aTum@^+Oμψ!U6'FgVNρGG-(Z~ 4=Tmz6q\g.e>1X6cWYҽ?YQ8?ŋ(HS>WK ^6|wu= ,@De*mt&]FU#u#`˞Ds'`% rn`Iߝ_'qT]pw$z8>pI-c„>= */0[Az ;bqTzNMƞ\'jPLz䵄/`m-X>%#q ߫RN.v'4LL4Â&3=+XI9؛]K>@z’%v3_]\2Z`j߮FZ@&NߟiԬRl%tJ5z݂mËV0U^הp;-R]qXD{ vT¿g[P@;Чs[[HԚ6BۂUi-utDD0k[F~]t7ن[ޒZޒZgSf6çŃFiM$dd+S"%Xs?L*jifi#F8Hk˒>'"2H" ]ſCx'.fEo݅I*`K?YT"IA[z!ہ"A9'7W#!} 92Jc>kɜ- ?@wU{±IhanJ>"{~cGV>@B {%fDo3ۇȏS0UOKim5cbAnrO{/l{.bUS3Åëžaذa%bv0pMf4 Zڝ?ZD:DRFp6Vs5frDHw}>n"W*rDPrZa9[@&n^ksp35v0XGP˒= øsQdkZ1GanSmp7!uKr!Aa]ئnInNcGO@ʳ$;3aRLPw0M*Bv b}9 oa}80dGOv) c;Upnۀ);aG K h%eS6Eamdk~6$a[w;p2;zrH6%Ak 6I - yLݒry@Q`v(0&im 1"bn(ufb!IBmh'( d'R:v_9uSr6La07{sP%bUTʺϞSs'*e%a!h ̔\oDT`Prw 8l15Q~)-K-[y@+(Q(W@UHn \f)X7!j t dW8E6/ײjCy9``#C1>g)׀xdZoX K(r(D [Doɮ(ܔ#G+ePyywĢ"&9AOd عMy x\"'N-TY JsoP^!-H: X< Λ2sS>.My PrJ?`сr"9uMXyrA.<`\yZk.<2rR΃Ft9jq)Kk.<jD6K9TrM:8lq)zp6ݥlK9XK9īvj VNt9)ŲB9D"[ץ,:P6ť70L9x:lK% nM^ S 'ݻ6.;(Or)߁s24]P=]6P@0TqKX&s^6rʅKxхr L`/a*@ԇ2@3 >r.C j% ^cr=.=`.hӥy e#H}Q2jjxK/Wmɾi0ly|C7xTN}JIgn v~-p庝HGk *)K bq27ՠ`EܸR^ ?=̍ lh&5,hSѮ]^7 yYEB+q]qoIAC%űTp)Ao`B)TS Cwꜩ%pUx^Ncct酚v%+J‘ơ,kUlZՇsCko/Vy׿ye6''FO vx9n^+4fd !_丬wX*\(nPMsW Ȳ.|X W⣈CAlSfCHj`Uq% W-e"U*q8tMrh l-%҄63 D4t=7Y.:҈SwL`hk@\И `gepL7$H[dȈ®#+Nϫ^<E+I]g!{^8DOZhp.R.[}px_-2b< 5|hsH@2 ,,) L|-= һ#`L8Y6(wPrZ^n+gHkhBpTM`@{$MgV,l#FB נK/i쉶jBGH'0LRn TfrfuJqRaC$rEPTxʺS1ai.EE6t bCU*꼽)eh -YcxJdGRL=QT٣p<1XD1 XjX4 g610:@AykRWgKh)sI|EyF|/dprʹG\IԷ.z=U__-vS?G׈%kRL=v.H%Bͳ8{BɣWJwݬ dqLJ^/vkP]\S6V%L*;NJ6(T O@OOj}AG҆0[eI*Dh] pTXZgr/rQ3hxL w9F3z . n/5,c,|xt;uc둌&UC'pwuS m#V+6 sj*ҁGh%KvSD}tGEy"eK:_ .ѝ*fuʅ,:!VJFzXI v wk/][#@6Q,~ݵ/QztWj*-E!45ժT Co8;7_溸8G|Yԝ>?\;㹾( xqKUorݬi$8k'c_ 3g㸂^ς ,Ky9aTUPCL{~ѰجilAج ZT`D(J"$#(Ok3o$&lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0033-Medium Saw.xiz000066400000000000000000000040501247673406200243420ustar00rootroot00000000000000[[W8~WdNrN' I7g!a֖+Dz%yv g7O#Ó=k-BMϲYv1?m8{bf{C5F[8]Qjn_<m'6MJ8 W Lܚ!~1mi3h:, k}tyNbo+bNĞR0Ꭺ`>D7z5nOȵ-GaY2z%U";$nG6 B?r +ԂMY.)}H f! ?-c:ylY<$bxj&9~|I^pѳ>}j}ju[rpH"escGsIB'ܬC^,^P׳.vm *"MƋu˶1s%9Z7iܩRK8)J67Č$F$P p.Uyl ]pK4\\9,3>S`I@=3pYB,pއbgr-Wb,4-8X(8z6幔h-OG8x84 !Y}֞jDX&4 1>ѧMb!8vryؔՄg,se,Qa\ʯ@\gCPbʹmëє'8]nY ]^eEY Kj JĹRсg%M;΃W鹤<o\8 O!}Hzҭۚ3WH9,m޿Eq ߲=<_&bpvhqxL6Uu"͒di;IC2=ow6u"dFJW,#~ (Xa'Cz $B!pgReNnAIAkP{)Kː7}-FMOfbkw-}'0Z~ T )^6I'j(EIƁFYq?`v=/Ⳉ*dq֫JMV_;$DR'-|,nf0'b섅j:!-I+fWwى A[0zʆBqiBPÞk[,;Mx?ԥMΧY/a{zrP=_76:[˪`iݑ]x~I-'oR~!w2ڊS7i7GFsD_0[pKj<sߞqX:w2χ~zo7wj=W@qyf虦Lsdԍ0t#|63L7u3Ӎ0itjfz xń4^1#WLIr] G"}(6R[5;H|W; 锯ǯEwbK=oRz)4KohR(iiBZZŴ iO85F:4- ZF*Pcê (8Xث9toC~SYlbOzidt+IRf U״i^:`ŋ4 ڿ. y6lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0034-Hard Saw.xiz000066400000000000000000000040451247673406200240050ustar00rootroot00000000000000[[w6~ϯgɅp&{h]NHl}QlklK}X$l쐴6OkfF7O#OOKܳ`Y{ּ O>t9}7\=˚Fw?-R-)5<6MJ4  L!}۸`<͆kE}ryNåKvּ]k7\(` D^ᖪso'7I?O5nhIҶl d$TvH-b> %s-j:%sfJc!*H@e%~{lr-h:^G3 @ /=6O][,ȽE+yq|:ї )y 8W "G2Av3!48X>=o2a4ȰCv%`- YJXRiϻRu"|qKx{mW~Kgj0qMZ_NnYxy6aI遈!Y-(a;s(yV3];%Q)Z2fzn'I1( e0v]|-". #W2=$?UA y-ڥk3}ҁFW:Tw.i*VI\W8ÕaW_l XP9aTc8P9+Z׎[Eb0sNQ31JBɘ 6{~I9-ʾ_'Kbi^%V+[(7—T6:*Usj/mzǘ)/UzI*IAaRޙJio9<(؊ϨXD;P%[G(҈ۦI72=`҃DmW%J>0,p1=H; IvQh qkZߠyi_񡹸qSRDV# G7Xsqѷ{Ta2@`RB- mI'j(%IơFY]qܛ\GË""f2x8kՊvMͭb| "J^jUz"f+1^q5Q F3/Uvb0ƭBbP>>A R9`(T0ys%ň_&SN웥GNsD_0[Kj,}*6R/cVp*5U ~qzʭ/o*W"Ut+fr}zUV/fōV/FyV/-TULːFٸV/1:Y֡i͔?ՊDKQk@}cyw:!/=,g!ك/J%xřzmkZ4r/U8ME jQ6lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0035-Voiced Saw.xiz000066400000000000000000000045761247673406200243520ustar00rootroot00000000000000[[w8~`yo)~N/&lY (X$n&)~X.#8Nژ47|?{]®獗7  c !{DS?]!%.Xx޹ӥaT˅W1xGySЋ!KrG˅9cbx !q dY #"Eg42IDhk"PC'̢Yh"}p#?dp JA-7%Lngs4NxYcwKZVCˇCnQq܂NsrYV* lMZ{qJwhVg:_~pl#KtJ豀na#Fa URFAQV,)_׽'Wt*)}h8aĠDו{It'L'W܁Ҹ-wrhw%摙0:p:2&> sK{hg%vˑ$YBDkTGEXSPFqI:-ڹsLB%lJoEX&1~)9oElɕz;<\i.ryy )6V$z\ymU1ТRy>wTUJR̒(޵}MIL}.<%dk1xN✥~thf9jA\KM+rǧ ):9n 3h3MFz]:- JK@T%G 9M| ޔA(>9j 6)֫S3Q Sɰq};iEyU{DT0Hn -2Ya pJjMrΚq*U [D,N sQNLf~HP.RDɬTiIr8hw"oa~_;e jsk%`ix%$fHh "=pk-VR9ܰ$Dz'YC~W9\+c8OjUzTZn}aMȲQ.:CG\8 ֲ\4a%n=G[Πr b>T5UpA';quf{ކbw5{BñzN;UF>*U_ ֝r/J55(%|\E_r"'̽ӮX޸;N84W@Tyx91qYW7SM|SSSR@/r&ՔmU>jAdQ)[DEʳ5eElZdwP(T[k^=&CJ ٺO )14TB4G:~Fr\ s$~yBӖf aꎶzYUXdq*;Yoϑl'GX¯nyT uw|KToVowU#Zk;Z 0THw 4{jKl6o;5-(VP׃h^-3%kuD뉮Ձ];'V^Ot:A=' (d'$ c{aDoڌϘ$LF%ic3xbK*~dbGQDFJ`lٜ? >:Js _>Tg]lE|͍R XYw?b%wT%w$N 4% -suҫrtm#,RfoN00>lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0036-Sweep Saw.xiz000066400000000000000000000036661247673406200242240ustar00rootroot00000000000000Z]w8}ϯ`yo &=lbZ&@t7#lږI_c,[G҆=}jcF;W2G?<^E˃fq;npѼ.r=OƟ8t1C 摒 wo|G)AHDd=ئG M&m>ௐFd.uIcDKF [_3L5ܝg⻎KQÅYI7&ME $J}$;\2[48eQeAs{䮝KW8oT GEQX7 Ed0HrXؘѧm,/wwiфEumgyMAG&ba9.96<7}ܺmE8Cp, τVC6Ui(P`[ِ+R;@Y+2xUcp*U8]kR@dv?B[ ŠdUPfFقΓ$Y%4"gԧv<^t<X4fDGq(8՜zUS@k^↞ˢ wRu}ؑ Ni`gMYYR@t[{ջa/(Ad)FH;C)'qE%eum"|+BK,](qipն [Pqr)kɎh*q0t{d7/f!ROWx.\4 ݘ,(C0P ()IUْ|CQQHo*n Nˤv.j ]TjiCWRɘU-ΏQ([F 5+>P}ZPnDF4  ;Wն YI)IF8Nn,3k)Z-ݿe#Yig?@tfsʍKd=]מ9:43#&k+Uw|ЕW> -YcJdg[%KQbͤQTY/xb76U)c6b#հh lb`tJZR̗Rl搈yLP9yn6Cs#^K8x;H]mtQdɖtL{i`j2Z>5bnڃoghwB3'[P(!fڕ[M7kXRwkPMQ$@*^m6J(?ϴ@Lwj>ʠ`iCIu$ $ h7ڜF*.&xzuA-D2h 0\o|'ǜ"^kKem ,C1g'V?%żj[5\Pp^/U` j2N>m}BUD1&1FeBHħdh{$M*DTSL*)S~JUUxXC Tg.D.;]g2ſzjc [@UՉRd .Oಫj( ʦdEGyڨ{'.SKsQMwj'U3Sז`yp] O"X^ù>;ws;ùn;!|>lpG%ۯ'+5XWbZ!ߚ9X/ r7{MGrRH .b\E״L*F'q\E:1Wt긞8+X0n۰aLm[^I3Euh j@8PeEƆ;2Zob' bCQ"DyKFC?%7(lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0037-Stereo Sweep Saw.xiz000066400000000000000000000047621247673406200254450ustar00rootroot00000000000000]wڸ򽿂=KHHiM.g{/: `smCw%Kvv婍I/_چ{zy3qYt5~z=ǙsЈo!AhIz.G\/9qu8]G1쐆3Z"qWE& Gt0Iƽ?Ȋ5.E}IVCknw:7"nĖ!Y^%=h6$s6S蘦,`,[/z$ߝ1_NY5N㏷s}p|D,`~mت6O P:]ÿŢ}MSUڂ<䙿?(RDvŤ(6.A{xX#qS֑{_: l@6L5׹TGI׹10UߥJeb¶,rGޫV7/!s3PU:Frwٻ" U`/MGۻU9oXdxllE=RBda F[U.bj yc>UVvj!$SUKKsg$/=!+us|9讏5L@6d廱 6Ä0*O9sHRRX&y+~C#tHnWXrnKj.:FQrf2c rO^@ܱD"zT%7Ds戫*jFkTM!a j݂U6"4'|V(zs^hIU?k#4@"~&L4{Ox:wwHLn-nC9RUy |kN5vϊsQr89An`~e RԵP )5@iO$(U8:78ƽh vH ͔L. &ʀ 9QCр73ݰÙ+S#+|lGfo@O]`P(' qZ% fj4hr9b8{r{HZ/qyV4vёBr P#DXf*+cNHi{^QhW4+Z$_/`ur_)D5#\j~\VUل ~W6USF|=99^0eҨxq̃c"#pT֛v* o>Ƅ'>adp Ok,HХ :AM{Ѿt< PU?Ub־OtE(l[B3E8X;I D˶['(U_-z-ow;;􁖌}މKfkoƳȥ)ZufL[5(= :+g(}F[#Z݊*f{nUjrٗZlA;LN>*WU -S*WU qTeU *X\w;p h7FPlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0038-Wipe Synth.xiz000066400000000000000000000045751247673406200244220ustar00rootroot00000000000000\[W8~WdNҞ,nBMBw/:VmbCɿq,[GP'=KsH;?>g5w{sLײr./nߕӱ]ޥvӦxb;ѓ]>M} {3 ߂zug YsعWNpO>Ctl3agԹNqč3G2-O8G';`s,Gl9AA3C#¦SfJ8}2/ rDM&˙zdtsON K0TH5!u.RwH95>cOëFz t硠B('X-PX^bN# QvB%ڂpfUTޤ7^7l묹ZpfCogB_ӈSܗ2XdCU" 1"e}9 \¹ui}"\\2 sNdԹ^&7h 8` 6sM;X/cfKǼ'8^[Qp"fٽlxO&cs>Bp{5v2cYv諱Cv"5X!LU6"1 43a0з7$r*b؎v!=@G;L</ ޏ'iz.\l z.lQ̓P<Npi-r+eIֺszW|b:lR.sf 0%Y2{dY-iib䵃v0tn-!ʌE^J*LՏȦ @eށ*oW0X0 CtZ_P)譟7pݜcO3qo&d ā{{]JL&ȡ]6XIND$RLK"C؁F:nczDdp8kdAysL3?aly2PF8"%^+6 pFAʰ=h`1Ke<'Fs~달|#,/?z.DD61Q462 ~\Yl:MAşXφkb ex) VO)5(hQzS6Zkj_D,mōدѰl3:$,%/wV-* %]Chh06.P=`gGEiNh\ly!8pۧУx_?őZlۗ-^\NS%Dn$=.X%Yg+%xU :7fnŁ[Nm2QjOˀ2D ) K",2jO-&a#qc^,Mxq-cJ!hi%+KqN_I,N ?;ޞ۳l۳e؞RvL $_<e8\CZTYrʧ<_.1ҝxYx: NbE"Ij.Z"I$CIn) 7 yzgyxjxCyx\ǝ'paIr=&[%Yfɦ|Am% B1]U2⺗2'.!2 YWO%:9dXWj+|5R*Z5_3:$q=L%-$ٖKzнOc@(􎈔C`i|Go KWWS.Epq\J.UU+FӶKUwya]p\nM6L]m8Vh>xj]OMnv9=Am*&cEe\M81F^d~^m x}2PGĘRlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0039-Hard Stereo Sweep Synth.xiz000066400000000000000000000054541247673406200266600ustar00rootroot00000000000000\Qs8~ȉc{/qKlvQ,:֖4((HNn/Omd$A#@|ou{OGzw۟o?y'o8o;⧔ۍv/oF.?Opif~pmumm?^nFl m}=:B@Gz_=qGm|̮G7b|3O F۸SfӄJՍMȶ<`FnýYB#W+8uLy A ?ێw<`L狛OWB E8y揜o[w(YV /M,AW*z|E@ 3 $R.^ݍm(Ȫtکd1jQ}T)^7lYc"KJz+ʤHRjra/P5 Wyljts62]|Dv)}d4,>ZzImm(N1>t'e>v-,ra't+`-s^x| QvSK؞o<.w[yrb8k0,A{`[ߍm5h$&܅z,Do+?Xr|0WLw vv=[ pC2bN]+\Oк?#p1u<}G׍}GˋX g?vC, Xn"{`Ƀmez^LAt$YIvF;-U!MNAUIi2-}/h[Ae-\܌4})sd< !2o!gJ$wUHoD]GtHd5:@C}1vU:$rrhFȁ 9˜e r"Qu".&Fс`B{J MT%xw~)Zx]oҎȾBd_1g+Iuq:]0t=ز)(XcGGfKj %F*f6dg/eOJ0#Ma3S"_t(ܭ%b(]] M%z(hcruNGz\z=)-FwSP4,eS)[ƺIwTDNSHjz:{tI(6J=!ccR mA(hoJ(ƱASR mYBFmJ iئOFicҍ Y{}cSæ t-c`^R(5\JyH0Җ m)H6O> Lc/budO`WeMMcLw.mHisHt8{˭ D~S=6w`J;6$ʑhs 6_ X#-s9Hp:4# cBSn+#icLA4zmJI66WD yohisHX yUaG Iv4j=;aY'ODRNV\mMq">i5@#>1O!J>E|ıX%l">B*pU& W,K5|7I\>ŷJ).nP+Ob^?4IjY,{׌umaI͌uEқ|6W=eyrϳʩ 0M~>_C߳akGRu˷6sYm*l*k!*`WZ4!aBn1 m N&ë3HO*L;PQNC6gIA[kDm(kmZVi,x"}q_E܀po*/}ݩlaÈ%IѲPIy[GÏtrBJics'=uRج,j-֬v.^ 2({4i9zVyEJ/_ZHYwۉ1.+j}vVpzZR^A1_^: ߠWInJĸcDGhw^PXRJj"R,8jF#lk4HQ_Rb5zTz$VzƆuc*pQk!,tjt9~:| >GzME ^{g6OH4>Hc}~ =Az}t0iX-s:ueueA{n7(m$၁.<*}_\!$D,zc#m'l𳧞KSDuX'|!ѮpG;Ҷ+$w mrng!Kn]+i;,$*Wi֚B:. T)mwJtt >*FU/nȪ)^cRtnUEEOG&ջBdm*dH*꓾퐰4`!WlߙѫJ_S85mUME/9g@D6BDSf ab٘6V)6HH)ط97\Ks/;nq eZuA>RbC==Ѻ8 x)ؙ`僀'gha CTF >`:gN"(,sV)3(>b\|]^)D,0 x d|#DCiB˰2R ~vx3vl3p&z/9ul'{LvoX%J➔& FzAJ-vѸٖT.LAςv9D^vF(XFtڅ .2[5Pѩ*(NZ|qHIM8>rn> leG)88}5pQ`dl6S+36EyhC|"2 ELU^[he] R7?`J`rKZ*/+ ŜkF33cCq8SיKlU،Yn ;1Й9!m9ބY)CtP7߮LJz8UڮoǮ_7e SigQ(҂f'GCSA!-F\ȶ`8+8_ll:=טَn7+)| B҄n_ gpE>iMfMܻ"eD ];\,ޅQtYWeycvt~E&s:t,1ב핌Aw@&huGDUd#Q߇D-/e7xu$*d푨q|$*^*!UQPЪ.hWD5wk EUEc }ʲU f&=5J`^kdpXx4:GE30D [&Mp:K>>+h>*OcT Z %G+!p4}JQIcZeEhgG Nyn FpFQ넣Xè,x_xTBފѣ#m(}V*ƣ5s-{G_QeB N&+ӯ(rpn=ޖGiz&3{vrڨr*6fP~|,fq_=kw֙bx4 9`0Ɓ:Rj@;sR6"PN-7h ]EFvkS6pmAZ4\};3֞3 ilYrʁBKK W e)3[O< G Yӡ)2 U-J[xd@sԩl̲1ަK%߇%dijJ_ọ( i7MZKos?<1b 9餑QaY*7X׼& [s ;aJ+Eޡ6ʝwcՊH7hRh*7+yt@k0 J[^C5EuVVJ*+U*nZ1j)R),$Ke\D_"W*: pSEafTF?3o$=֟z)45ʪ^U {tBDGSߏ?d•, r,ULh]JU%˖-tLT;*~]rNRhR7Zo*T{SU{ϵIFy-j3iQEUWQ |8s!sS=JJYhJ|Px+[>Wu_CR8k( - [ުd\} +(Sui(nld6Z<}yg/ByՓq;Y'0m~̈XZ| -[Vyk\MA;&I+Q[Qyb$&%N]^m|T׫mzoTwu5첯VWF0` BFXNH-X"K\r=7dnJPD27UUXK7СuZ!qJՖy=dJj1u])vZ4`TX~i t MSd_R)ˍU~- sWT [,=8=ą<8MdE Ux (:Ji7敔|RwiR%ɪ$pDI0vv u(Gb~]{)=-ժ+ݩkjɢZ^a(W%y%W++}~TQ^{#y<~=3ʪrյ*xU]eu 1MԊ#GseHC;u+fnkSy>:UlLUwHs43QM嵍NWWcx׷]ۊ;;ݣlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0041-Master Synth High.xiz000066400000000000000000000076501247673406200256000ustar00rootroot00000000000000][W8~WxN9=' a&g y1O'vv-ےu)B4ӡ$KRRjo?gS #/?{-'Z7ow>{g;kױc&D۝V~䗃n>y[B"~Lh/hb~l߸|ttqzy}>]^vhu58~h-"ׁtѮM?e0ZWfx=κ#ߝ?xȇw/؝E -Ϗp1sY߻O@nwyOCNƀaq؎)& s|Im̪|xqCa#&|nCctn=<~lgT2y&$SWgWc1]I0K>HHc|Mds ;2G(Kc0>Gޓ}IFlaaG$L%+eQ.Ypm"t~}[9Z{&wSՆQ,їе%GG0g/o}w9c#0;G2I"«%O!O-mkw@-Yo7 !| DօSh-x@<}ďy=uċ1>[Wח wvZ@ˋ:h`wgҚ-7znȡpg9~tF!rJ!_ F/8{X+Se=4S]N "h&~D?I)xRd0RtDpދ(RBCt꾔cPa>,\t%9 ,ȑsҊ9L!dxH)hI"D¤1Uф ՝{d4DĶ"KTL͋QW~!(v*dl1=z )D$0bMo;<%SPilѳ#IiE[q=˩FK<##吗I⠘?tȷir睂v'%# E۷Y0#)j<Џú9YzH#t FDMXNs-Yy΢dC)8//K D|;.#f)Q,vV =6JDJNAGܺbίΆ֟7`[Χn 4DA(3!3NE]Ϥ~) AnnO` v&) ɝ/^Z0È'UءY6xSG!J:'@Ӂ=Dy!VR'&vQ^R/j@]4ng*.b\LgA?W`J\~\ ] hmg(T jm'-8$$'p  Nr#Fľ88' `rs6)aTFS "JoR&B"-4Y*SvE0%0RjmeYb5#ufN%c>*ׁu tlFm@7gF]՜q ᶂho¬握.:eSWlCfS*Acȷc?7e SYgQ(҂f'GC3E!-F\ȶ`8+8_ll:=טَ9f;7oSOyVS0&/W2YG4fjXeEe(jN\xX?6X㌄}{ H".|vZ29s/Ix^(hUjvG{һE1z>ee*3edXWz0M5x8,m@hTIm-HD&8ZJo%aN4Qr[ +f{8=%(Ҥ bmsE5hgG NEn F5p>KQ넣Xè.x_4xTBފѣ#m(}V) s-{GQeB N+o( 7pn=ޖGi3{vrڨr66Vn=X\׿{3?&hrX/>~a}uzՀwj&E͝Xoxoa`6@c 0ڒ(Yvfm<ӍgҞj䚵wRfY)85x`Ix2C3S5ged[n6t[뙩>QJO s0X=zf.VS 7k}]13,HƷ_4>hH/F΁t5h3FF9䆽RwL87IآO=^^ySe\)%9V{$(F.` =WF.OGEjWx DS M\qͣZ1UeT*pP?%j__."PR'M W݇_7RyӚIV+5WONa!Y*.J&3rӠ$ .>s_f)m[Ked3jpFc)WnKsQzUUMK'Z+^Nt< &)ٓ`J z9Y&.NxUet:DU&j]P ?ҮwQ9'T)L4^ ޛxZ5R)|u=4KǞjTS~M͛|fqnN@D27UXK7СMZ!qVy9̐ZajV|irz]f}WpLg\/7*W nI(2O:b &)o#+[PTd@)eo<PʺtH9NoVwgx#!Ϻ $*v 8lW~)"ǿ}ҩID,cCl=]{v{EʮlY&fۛOL([q0Hݬ[w;?3X.[DzywmZK77&EJ?(-J$Oky Ut@WWFĮ1WۅѮaogv;hv7p ~-upհJu.mCi:_ī ,{TGJ쇞D 3tizU&rTf6w6]^.+ |Y]Q(lӣ ٝz/y(-9Ж Lzrsqu9;uof w*(t/Md©bqllE?92 $DVv]vDLѮh]]Jl=_$Yİq3iIL4P2K]6B/ZB, }] j~:; D* r샔mHH.\,nP S਽Z^RT𓌔iL~6T6>]DD3>NŦ F.`)J )kT6MЂVw} 1 m5Ft34('mUӮ:(& ?˨8`$Mz: &9]5xl4An;LWmusߟ]#+s wXdn *3uՑ:⼙ί.O.O33*kVubXą8{R-?66SgD=ݹxa.5"i~Q sUg3jvy[qL3Z,& mMr?DkWCh6q@FڡvL|iG٩8Lc띘iAv2b#?hegj ,[5fKu,q #z_66X&Fc+BlKه 3E 5OgFmٳ)1@XD" Ƒtamar5O#Qb0>m0ʰ@ P!g1GFnHzH1?$^ͻ1LuX!|d=d iUL¨OMl b {d\33U}0F+A+#lQ^!!c _l7 Ŵ`+C\=6!@vXGuebu&6+!YG@=ǃLnLT#0 l(ؖ!#kbbɘEE-di3$Ck$D_ TVLZ 1'dO '-z@&*l0}'#PLlY3U&!Sc0:4rUduτeu6E(c;"qj3>sd/Ь. s$.ftr5cEm `lLX(/'}>6Rj|lSXrrјb"s/ts("(_(/Jntde v@~zfl5괄h&=&jsԊ9Ɩ\C:P>s`C^C!zP_Σ(/XWQ䯡? Y(/;̼fQ?ש(ϭ ANT+?(OaX( "F9Q@Blle(F*N5vLfjs񙣳Fgz.A)=|[Rf+ȩQr %ByWeS}2ZbPs ـj@ F6z\(Am r ͶQ3zʶL(y ~3(yFɃ=Q@rX$ـ|tr*U=9bl=lb_7TѱQ0{b #GhehFكjӿWYY*{Hȓuy,.O˪0El|^BFe-O.ϧoNg+r:*~|(FŻ_ڞ\Da"e^vV>TL4fZYiM1ÿ6)~f:;]" FIԝmiMwcV|m~qE㔚)65x!_ʨNq_A/'Sf\~uz)W2h]qFG܏E:>,Rǘ+ɚƭ*6!(Dz6l}w4눇rZ\HeQ0%](mGGW tM]-ŶxLJgtj{XrTZ~ ŽN b6'n4i^Q^ x@'uMvES.7WS'Zdƴ =x O@^ y~IjeJ|Mong#+glmms-1.1.3/data/presets/ZynAddSubFX/Collection/0043-Fretless Bass.xiz000066400000000000000000000035351247673406200250570ustar00rootroot00000000000000Zr8 }Wh:rgtDn=YnHtV/d]H l2S<3Y?;vs3t>|2^̒_{)V}T ٓw"F65&vL]ʍkx?'ӫ|4_+ N}vڹ\Dk/I1^DctA{@dFW:VuCTQ}d8DW*.uϋ8k*6.4O*Ǧii_9֔QPkIGY6T( .RQRN8r/m8h._!6w2=)fCs/?{{>Ԫ=3Y:BYԼc ]iQlJeK׼, aߥڽ$m7#ORZӦl25J -ٗdtnokfVg!NoZrbD+=Ly@foۨ3)PWKՕiG Zdҷ :O^ b|t4eӻ--dt:k+_h"KQ0SJ`%+G['fCM\u`y"d^lگ*ٴ_hIv,A4 &`Ў05 m2ZP9NRR*-#+lA`ҖbWotb/0Ya$u*v&:QtO,r hv W<"Qs 츜ԊifJ/Bc=D~S[GI)mUC&Yf"*}mo!۬~nc'b:X%5^¨G#qB@G2ɢ~cPԴiK֫>ѭ5n@Tp_k?&GJ(c)|`qsq0 mp0L(BJrYI8~ ^)psaviˏ1˻;ވInwmrV߿ɗ6)qi6HխpfհVl>۩nv[ẝVoM:S9տGh`B/ 9 +Oph z(HeB 9oZ FwY *_.7~ENq =M7gQ/lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0044-Decay Bass.xiz000066400000000000000000000035531247673406200243160ustar00rootroot00000000000000ZKs8 Wh}S֑ۼfvXn=^na$:V+Q^=/h=H l1COm($ ݇G36,܀_u?N:vs_t>?z`r:8~ϱCc ߪKc~ Bڑ+.OWT&+}$⨐dʄݘ1#f!qyx-FDrle-@( c "!΀vͤ.6h<_n" zP2 tMGE*]]3>2dۣO3h:f;#Qnc,7>25a#¡kW"o׬pשvϑPW #Y!`2|teedn ׹W8Xon+HX ]Nma *;B*b!qBCTNCRe0 gAg_ب;- <Z&R|M9<$g(R7 l70@LN"9USUvOVm) /V{^Ց+wmR>gQD YeǑ_f@d|Cց+:"2(./wD`Y2H@O%<3x`p8#䷁,K;y~} o@`yyYuLY. 'CF{g\.&n=0&$ soRBGWLƉ6gO$P5amT Dygc? {ǜ\St/xW6'ZaI ډnv[᳝Vm'ۉnv/ڄS;ї'&߫+ibH/Ko&k8xErR;k(1]kj&A/MVh|Ic E>k7}+˺$;hl0Oqm7󗆯I?Һ=|-չ5[,A~ɘeb IpF=`wgجpJ}S0XeU`?O(lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0045-Steel Bass.xiz000066400000000000000000000102641247673406200243430ustar00rootroot00000000000000][SF~WxyĖ2r$&ɋJX2(%$3=R;Oɘ>ݭ߹e,潇0͢$~|?4 Ǜ7?'7.'?q\nOOk${LRt%_vd"?]Ls!ޥRgW7gzI2"|{9>[ea@f>?'jar3.zZ_EDyՕ3*{R^[Ya3dcFD^8Si}i,ZCKjZ=S{?J=$Ѵ`WU}Ug7W?LoEwR*+:y'?~n+{ݿsqzn/I{s?S4YvߝiY,z?Qt/hdNNz";~D.>wIKz{;DwaJ'(¬wG}IY}Ci6 eXm(n,g;$hHI*Qj8)}{g7(x;(%aMaX9#,Vԇ$Q>hH.Aq$L s# {֯xןo~Ѥ^2 m1pUg<$sF×~"&#M+=zĀLnzw\vn/HtOgOIM.YaywiZWMˉaRYLB/U]VYGqH15$Զ%(vl$šK CۉQvN\v?=9@ kQ{}:7??= }ai`{t/cZBlr{h[ˋ|>KiEi3w 6b"G[Nu+|Vt4ɧ4mɫ-꟩D3?^v+ CwPBǠkZ2R8zƏ]eVĤIfYh_E `H:ČY7[&Fj)"k7Ҭ!Ո˜ɞktRWJ5p\-o VT2pq~v\=SeLm4diͺ/z,2 H}6TVU|Y+Vd $ ~"w)X䕬~+$jPQW -$_6c p+K1䩅yEl/|֥ -mGp;vO!oXYn*KEHK}ZҾnQ|xS(wyuAK-Q C(.őׯXߒq ҥ;jzYn[5l0NuNI$.|Djq}yi&XUNarƤZℲ|kK,-udct :1}q̑.vR17UaE8fhzcr׍cu =Ulsвu/(1p+FR:sҷLhwn:D x6!xNieFHGIo0̬dL6 hZxm=&4FIVWv^b"˴B6\eJ",1͹r"&1 bmIT'vh=ӊm=VZ+NpFy ρ}dQe_C*_b}d/vdJGC: l6Ӳs8tXxaa3@δmLN 쐳GME'䰽tT{aYC:f0VX!  m#c>@ؐ3tHq uڬ"UcWH"tJr}a,8XZ!\|0#EQ~94_9nSƮ=9"/.Hqwt;2@tf6@) TKEnۜmFa2͜ɮ=Yn#a"3tMJ|)@1Sp ;@~r }bIva,8lS.<@:m$T/ܷsLA$(WfמG@By$a`[uF C$72)9O­B'ϔ#q:vlsREاGa{,8 Lv'\\N9-N&b92Qybd)9rLt*HۅS(YK~s9֌eY8g_oߧ K SΎ`U,2N-9tч=nt":t ?s56Hߍ2AcEzogUJ Q;Crd4߶ЊO V5&'7 JlAiʔp3GkP_l< l(ϑb㲔<V%8 a;Xc,85(Eˢe*C5~ #T ("Q (# )RZK,H I9*@YU,V3T`w80]2٨4U#Wc6XeE8g: .aH27 9Y݂*0Y)A5>=z_o*ٓM:k?l,5JL-VTT,Za\G6^ZAX0`U 6XodcF5ǘCEFU~ŎP|v@@Eϑ X v t.*Pԃ緸5ʉpc#*']t@\iwPc{E6ystw|IJg=k__\sq}ּ-SVnn+[8IoMtm]M_j.y8jn5WW4ư1=LIэYq/MER/ j7ec }mow4D]Yf?Af_ ֣_A>ɚoE l/bhKEМ2/N*W'"ND!YҀ8^f:FNt"q eA9l LGov"ߙbe̛XTh<|zlQ7h `"OYd㸮oO>l ?0\+A^㉿6>u7za fpebeNȘ;9 M4IBn^Tm&%@~RbXh 6J ʛñ?6N-QzYϮN5ˡNRbI<8$=wR~⡖AS݀-|@-~^%en l,y\^%ݩOD+鳵XNpf$x"+p hS*V*9ܦ\Hd-}PanKch u6hM|+)P"y&BG FcK/mt Ug;G{LlhvŦ,6د0rhY|r\\um96$wY ,GVq׻@)ldMQҧ]O "A1U<2^ʩF^8 L Y9&_ Np4Ӊ2)]d-5Qܥb$-2[m]'iÙm]"z$lڰ;;M CSKnyлVs`W$4=˛É#…w颔læO]_ Q;s|iB^ؔZ_{AEdnzI kV:S;:kwm"hFRW,7I8L N&ˏDIP%K&&w %14iR2,uJ1s>˸JLɖ7Z ΝrJLN&ؐXNX$RLK-p}Mcu)aw7px[&c rOMn8K,VzS2pi !/UB74 h.)OZAA8~W9;9aQ`(Q0TjY A}c[#aήȇT; JĪqiNDh3g^aHqPܹQ\sx`έ,#;^%>xns>&l}ppk<8g{E>KٗSF7؁GECԱɇ7;lpqCJ 5x/'akj잧3gsj_kryTiƭ{~z-t)fhs)U ñ#u9Qܧ8?/hq{|]W4onY z6fi@+jo"}$i|sENlEW"|̮W:M:(dr#\՗@~uU)N@HOrAg[$r j^T ^q!wmDzrg L^s|CCrٛi`h.32: LVgY`Ib2 L%`.^65[QO<"]Y5퐿)2i[N2S"CD#9D]S(7a|[<ڜcϏ: q¶YBƅ \[&ɲiJ\C:+* Պ.Ϸ*՟oJsӷe42?JÙ,++rj^I*qxjT@Jߛ9tM@ULQ5@4EmP]T?C&g6Շ$4܋ߨQߠ){H<.g2oz/L3QۼuV6N5ۤ{ȺEVQWƺX5֕.ǪtqVu;jۇc `;*ywy- 8ȫeuoqGEC*)B .MLw=_y<:fL$]yv[nBm.Rێ@+7viqLێ[I4/:lV}T4 i=󚇬.u eB}kz@_/KZ!Y_[fGRW7.^z=5|cԜ_1ik~>9`\lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0047-Distorted Bass.xiz000066400000000000000000000037711247673406200252370ustar00rootroot00000000000000[[w8~`yO &=4!]&El˖ eOS3Is77?g% B{giwگT¦GM?`҂ŽKF~1V"M 4@090{>޵qfoh&Ё)P hT%r!'ҒӔF-2OWA!&J_LbQT6 9namMɲe+F ut1~ -e$op*p 2FBbP IV.i`5aLlce%p6I70 TC0E]8DI:NUdR,KAI{ 6ޕ >&PnK<#ak!չj >S+--bovZ2y>HBRWߴACFAQ!ѻPTfu魂HUM'KmZ`B*4<xEh,|GTYfSF7\GwJl`S_JLf=lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0048-Variable Reed.xiz000066400000000000000000000037021247673406200250050ustar00rootroot00000000000000[[W8~WdNr9Г YH$}Qlu/)_"#;1=`F7fbLJZ wflq;=1>|bZ埻(+?W?83 {ɓCc'r7`Km(i> m]rnh0i9^wƽAՆ,rv5 Z3cNȜ;(P7摱 ~d½0 9 UN-q # l H@'O'\yь,}n3LyVY~;w4t֐1C;(~3;Ӏv>\Z-?h4bA`۟'sIB'Z-Xt e{ }aK#3Ǔ&p*u;g^DG¼DNUDƠ&e-8t됐=򍭊YĎ$q+!3|ik|]v..Kb%``, uozۋP^.D <@e!q"p\ъCYq{wͪE\ZQReի:UYkFqs~7-GYW #"@yKy0#ʽB-~- !s  Є o`G;ۅʯߗ!4^lx?RkxU:ZKs7uezEL:8!Gg˄ ȷEsGAv] #qOE^ĩLCzMvϨ*``/-KCDdũLj6V",Y%d!`23 Fޕro(&P)tVcin+bI,bh2F$gkݸpgP*^̦իuU%V. gTi`b8OJ1i(2 opp 2FB8Wh(m}YIO:j>D_o8S]IULy!E8$'H˒4PG .{/sgx=lf]-Z&۹Ʋjgu$h眼W]nE6s:|4&ʖlPۣ5' !|DR*!٭ܕRHy?OИP]ҿL+٩fXW<"s=CePU%ɠZV.rDV$ߊ[ejUq^WYhpH5[#B|(ފMV@M&~+v?~XsLbXbrSj{*J-.p rOӆ=mcO/(LX\s66#U7YU7`3ՍLu#6ST7|3'M©ӗS 6`~d̘/ i`Hpt^z`]^ZqGgTHdho UQW+Z%6[#mALV`4lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0049-Reed Organ.xiz000066400000000000000000000072331247673406200243320ustar00rootroot00000000000000]]W8}_>1@rNwB,_ t$vvfc+,떃ӛ(]JUrgG?N(е~vpyAxdg;0/߫+z^cLrE=]T7ןd?4n@!Lݏ׾u.{7|\-OZ㿃٬KMc/Wgŝ <晠cџE jmG՜=鬚ߗĥO =A\("9<X²G^ %phV#(/ގ;QڑkCn{n>eSUbter]e*$z#9?u[帤%!*?4@AZXG͗_*WAK)IB]Kjt~uvzظ-֒ _aH]8Θ7 'ƟE5!.,\H=;M䕙{IVUjn<`nEO> ypEwJ/>.:iM>:(Dm Ydn i_"+2)gU&4'wkT,}ZJլ/I_}m^?"yIGMJo, z3]xRbzf?%:C[[?4I9Sg ON4rV";_̂tY '$3g.BɜDaJ&ϲ\^䲖~P̘>/Oa߁5(:8JIMUk{GZkINL]WS<)ޠ;$] 3UG_:,:eU vh~߲oVs5Q]U6VUa :B&Q5!]ښ&1n1y=!>:z^w5{ҾVs/dU;iN{lu[+6Rz/m0DZ8TnU+jjj05zZ&&nk)՞hZJe*b<^'h 1#j`-܆\b2 Fbmfa݆a0ӓ[d#-#`0Nmc[F caC ca,1#`00òa<0`~qh503ظ0x0` a<13n F ca,1p&MV0L7 #`0Ɲa,1#`0j& &L 0b2b F ^r ̂X0b F 0Ɓh6g"`0Δ:D ca,1#`0Vڈa, a=)Ne' F ca,1#qwY61:Krc$g>X/-v!`7UC=\5 954 9M2 $%whrX (&}5Okxb39}ЈgJvȻL8Zj Ѐk-2Ghhhhh5NX4ݠm5m5|ϑHeή1Һf4[H9gpXDnmf\,Silƞ36`g1cv\#s5294kdshh52p \ۀk Ѐk Ѐkfv@h5:pR\k\kF\c{|1h5k^C:2zΧqG#h5ƢQ@}oe6F\H\;@\cmV Yc(4n(4toloF F F F,cPcH`td #!( XQOfntdmpՁ"[ x L$(J-&`]Gc7V F M bFvh>{pF}nQep<| d:FhMEOhQ@|/z&>h6@#3[%6  枣pA4k `m\k\kZ4?߈k<P7 4@ 4hPAۭ n5F>pAm. ppﵹmӝ󹄵 FZXgd%ƃJcvO F{' Faϟg!`I< H۴s@͘3v ӣy 촴00$oGKRZT$ Tf+jW״Z2cpiZ&k3*TJRՔ(KKU>O},>3I)˾NL2׎PLlU5l~UgLd7 fYj:Ci^i&zrzB—7Gg[瑛Lb;6dI.bYruѾE-KIKR]c 5D3[pY*o5iqg<(/_o5UF[x} ǑwW?J*ć%[gQsY=6ϢTZG(0QԼsSw qq=q-e՞,#=56B#?ee2}^c'rWߑ~V#>x&\|`Lb#x˻Zf5/Sl|QϬIU790=7fUoͪވU->:j6Z| U?*_q=Rڗ>?y#s ?e w/Wbȣ [iG8r3v9Q̜G;0pt7f-|wVrІ5a-GbA\eS n_9'6zyў%rBxTp4M? F3Y > 4v,3?RuN}9!ٿ;A ֱAE%ѹ|E ܅sFe Df m&ԍ&Yb^0^dͿ< !̓ )t:l4 ]w^^ Rsx4b!T\Cj'G+RC%_*"CeB+y >V`[Sì㳢q|ok~j[xbеZ~Orf@NT08?:h^{!Gj%EnVgo9\^bqrI7`Y[w)Hu|JDzJ#|ˤ_ rF( }J7;$zJL'gèylØ-wطԡ5<1s RG:u3K2!׻< s{F: S|SQ CGyHkeVd4m;WK-|]J7dDX,*Zde M@Ϟ^j\2m%=o'Ff?$ݵQԊBIS;=M?*>4/T͠y^;IfhODU 2E*o MZe|G!\f/Ph` )ԘZuxkD9OpD.ӑYb]KGR*Wڸh(0RRQ.R~#W=Zhx<kn񲦑C'+e9jŦtP~e#|1 |'F3uZNY5_jh5TJvj#טL1P32 *7h.sՌmϤ*Vt!'{1 #b"ZNK2>t ( 9DY_wa<8ɞ z\Kwٓs7X~\.4>)}al5f?1"4PY,EӪ =t(K˻ipd4ChA3"Dlљ(:W]mS&pNKMgIYFg!{йW[F(2-eHet6Um]etzݖ2x]zҖѲBλg+O#8F9mh2ܺEnE[4:|ޢѕ- uF'Z4:]34xіqf+s2:b٧<`?:cx {G5l> ufy=S搳'>zF>L!FLt#n&7}$z9p6{`H!&Id-apw7w dJ]7U\fcr{*| 68JWod׊qႂpcvW W_V,QY֗_2fx!TkWL#tm5[B^xp1ebUvK&_y}iڒb,'fi*8?=/Vx?&@lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0051-Thin Pipe.xiz000066400000000000000000000073611247673406200241770ustar00rootroot00000000000000]rF}WhPHTZ[J7 "! 0X n v|CMϥLO_fo~|v-#? u;^0 ~7?׫otz;ԍ][spcw_ y v=؝J*~L^=Wj֑A/.?ܞ_^t~r3vNO>o7]{יߜ?)d6l%?[ǝ5i~7t Ą,zi2Fi[p<;FA<+כuYu~qs{6G-8 nzTfg{~ǃ/A<4Ny^iQ&~^xewgOy,87_/nڅl'6aOWo?0p&܆n*&{fďa@.VyChv.k");'e_vYDV5֣?qn0 E2\-e)9<2xy5!,;k%Y~Ws)jND(vhM~Hlp9қynT@Om')šgvm|Pzץs?Tް;6JZk&,[znE(l zqb}DYJXڝ/f~jSZ' Y 8f.\FA,̪9V~(g~_~5.S/^%އHE]FSk3{|DO}+M7)mMʣp7EfG^QVC߀(M4GoYýX UQuנ"?cRu UQ:fžI.2Zr43B946vF_INt'AOrtufL~qrV%Kw"L(lRg6RJ\^\6*F?ϙޕ.fiL$ Q,0 >yQqi],X"@*J$ٚj~ҋ &^ݵYJXquy~q[ ?dfXc)DcW,v@FZL{F#3q2͹h3Li[Z[ЎZЊZ9X3ՈJ-Ndl!pF230>W?Sbzaa=f Ǧ-! ##qb0:6;jÎ8B$SCGdY\1n4˒2 i&LR2a|ai6@=1DfQQ!FAtff;!0&g1G,a>>B]3@ Lt:6@';bmf91z aa!DGd>F$;0كdӖ c 1@Bc{Ɣ t؉1@:ma0**C0%e'tȗd  Ha1>aCzCfSCһq l,S3,~31㶬mÙ DEax)I|I:2:%!21iYfx>nǬCvFÙu̱OɴuBkM!F}nX\QFwcL[(OeĒ{fEt#s kHE~jkX(/ FMX 5V,EjF 92(e#GK 4@!r9v<`ПS+YGRAFP?xt?MY0O KhQ#FԼ$-lF ݡ=F >vC .oCinݣ<zP"- 'LP fS,)6$SkhK%y?(!2t(% =x&'`PV@,"6s=q.wHLM ST(7@oJX(9 8$CKPzkd77- yu$0{RΘ퀒i86P@Ex>DQ\CQ@zfcL%(U@pgZbWtXcM3yv@(e5 zF\N^QހFy `͖ _ðQ@rMFyj(o@_O(o@a3Fy~U\Q@.m7 Q@Hn˥{X緍|J(o@6PĶ4*17vm|(7HQjTSFW85:C9u+90F/31>`֞ T+G,X\ц_b3(o5gR P Y"6> Q@n(Nyy ֝TQO?_O?TPng(|>Q>QA{@5OfNA=9SW,it /|r Ěh/vH߀ڑMh?wqFkMߓ.5Hna7.u{ ADt1icJxK*]Qܬv^+*7tu&ڳR8Y2-^ mjc1U}GpVEpfëvE̐E^;M's5q* .i&~f:aS#Gk`+ժtE5UCzεv/MYn~{NӛٯonǸClmms-1.1.3/data/presets/ZynAddSubFX/Collection/0052-Great Organ.xiz000066400000000000000000000045271247673406200245120ustar00rootroot00000000000000\[w8~_Oib'!pN0z8@}Ql< 6k_e,ْK2;8T7W%݇o֭=svg;Ua1>߮gŗQ_w`?OlR]`w{Ul_7r~ǧ.+(X]>Dӏqn\"a"4EV5|LnŎlAp>7HqN%Mӡdhc>&Q}S@Af:?iN$B'GQ{ѧalJ`ͤC.p Hyɵl >yQ#9ӳ!I f)%;)%1E/!9)%~Wc"妘a~ZWK,]O/zhzL̵27qv>:<ӎܵODwtrѫvşف}}ewEZ`v%ǝ^㶓^ Ɵ̏E0н3bk;CkHlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0053-64ft Organ.xiz000066400000000000000000000053701247673406200242310ustar00rootroot00000000000000V8e 8izNLv!a lO),%BO8T7ExAioԳ}N[w^뗏;q>>|}sϮcE.?i/Ǿv)w&s*1ؑږ1#ѵ0)) " 8'k@]8ȣT7AƤn'7wW$, 2Pѱ`>㟳p1ZpsWߙiK1[ :l}d1 3+Q'읝?hf>]FEhi/h)p ełӒ|Mhf& E c"1&$rh 1 '+uN[La 9ue>12$e$Q:u$|]&JY%qVC9$%JWU1~Nn&!eQ.hzJprwk*9h{:lj"GHܷCqFR!;\ieG"[닑myf smX/<!WKysrσK4 !{$Keր30\/B_eu6uH@]~dF.Stz? ?w' x^FoZFkHP9 #tzDvDd9Ye|>bY%Y˹|Ky="~h"lŮL`k4H rySwA_2ZZ!YN(<=^*gn/002˽)N),[pdi[APƏd#oxci8Q\od\e#E^,Z Yo#%R;2?O"%Z,%,KPTцZPPg9[J%M.i@a#uzdlE*p8s"|dYc-#Ą+p1,ueQ*~h6 ֿg>$fEV sc"#ı6e`8ү𣂅#&nejjHˑb].Fg ZvYGɧ Yz)-yv[®s9spKP2Wl^h)o{P=Ȅ%r!|cU2Od{ْa['9mKJsMlj\7 yuD)saeuHtλ߫Cl3ǞB) ?7&{J\^ͪ}0Zr&H; F."TbZ8E_ġʑSQd$]'u4Mr\"]❗٪4=~gM:('食Br2FM6hlPIܲJs_ei&{չ ZkRAo#$&t5&P ?ۊz)gx85q@;3MW$t/PCgr;/jxuJ[Ix=apq189G0Z uol0:OI;.<R;8|=.zե'7MqxybmWQٛ9ʢ^^P&ݺL~򷸵Mn/ wEZ v=?wВw:yKXzQn21_ۮ21Hmeʎ+ g2flmms-1.1.3/data/presets/ZynAddSubFX/Collection/0054-Hammond Organ.xiz000066400000000000000000000042641247673406200250330ustar00rootroot00000000000000\[w8~ϯ`yO!rN-gnEG56k4$lcBΦYښHzҪ<13}8V;i/ӛv_G~5S~Kٝ.7UŴ/' !tZ>}2]k Û;uɣX.e{mlA3`"jT+5 cN;$1Zg4 'K8i͐L鳥GV%zl``aӅ9USSD ր*zjܞSg|`8i I0PH3].ۨ9?B4i՟eU~s6'VTǭXgn`YW׏YD޷v]v t|(xBx PL̛ۚ i\VNY-%&@0B=/R+iC޴W`MM"CDJێl`)k{#^_3rN#OdֽL3]ɱ;-+j` Ey7Y'-4칿ȖvHҚH%s^x!]2[*?5uRp6<2wJ].Kvt& .Ԏ Od嘁ZDhSND `Q&j9 2Q@b<)ǴLABK QH=GZ?l< ~H+xdPS@b.ph;: *ω=q'%l!RG̙.W鯕1=Z@ld 'ghd/1ݱ}Ak \IZЈ[n?,4c0mssokddC]%g,tG!?LCvJ:Q!Z3r\ KC8l9jwf 9с E:Бv-#F n!ɊiAp =u$A`;u@s͉a^:v3t3 `/s!A.&K9g\(Fkta^j ?^Q~9{ }IPr)Y@y$ :r;9Ѱ;)rt"/q̗Ѡ/g"J%EL2ϱ²g8n- ɶl 1xH2iAގr Q?nVfO+1hJGM. yx  oIGC" ބ"*Lk(nܑed& jaq;@ .{4E)+S}b[PDɰ1<-Z'"CT0*oñS0(f0ZsP7}Z4ilhA+3nJ&d+.K[3^tQ|db23]ejЕoxA2Ŵ$9T9((΢ ?ww'o!-$'Z^TxѹsL3g3o# (*K@n o1G$sh-K'L.|wrAо3Ƙfவ}$-\Iu-XdкEBGj@໢ eL|!r$/%8̘0QTճƝG3ZAYHLF*[5*ʆXd^+mG O"[̆H"j Z?ڛZQIx&( ۾B]J{%Mړu)T0m/|ٓ(ǟG40iclѦnFNGu:'4\`͛Er9fDԉ5- ncMҿLۄgOda[6Oaq2: ';d,Ol7hܰbX `a39tSS懠D- k@:zjY=dby j8N)  %+yv|3 bsj~l%DyDͳ?mi|V{o_72h-bq3B(\-Y )Wn>"Z]x u/VRsSytpݰAl9e.w$]JgsfIDznZ^" 5n l GPrh'`EBO2{nrHhOg2_\ w9%u]Ҍ9i+dn//esdC8/vB:H#Yh ^x} ]*OUΩ\$>u-o -F_Wh` a}$Kώ]7U"tLDAHm7#B_eu&Faұ]G }Ka$q>DGj5Mh{}&^b*&-ǫu3F jGNkÑk’ CJV.^6r`,Z5Ev-#qABqp/Y Xϩ`mS%#:'@̓c$~IV"\(򋇼+h1~=yK\IR2W&{I<AsScdp;GD%fKe<< TG2Y5I )$^`"[ǐhfJ5JPB.af;CqՒ y%r oχWI P:CAfGu7Q,# ,Z+P]%sGQ4"(.&Nj l>ET^,[JY`NFa kÃĢx<2\TeNA%0YB9SRR*>Q& -NE@Y@uIbҌl`…|s{F%&3\á]6I:ND$SLKCufoO[r= sUR+*>:Ryb=j>,}6\8bGRuJ#[S/טU7XfJOʺ{n U37ȕe2s5e3 SQCK ViwSGP# R\SǭVRN:jQ,s]snL2}ZRgג kteh/ZN"YJ)٢ /@TS\i\")\) Nʍ/+%T;ȕpjK~TJw7E|Ro+tQ7ǝN ].w[hoZ߸5wUsU 5 vg)x!V۲wD/Gc5մ oHAE_͚mp8mrlJfO㶜d[>{7ZRFz '}ZOB/īMJ[$Mڒu-<*H-Ǻc]ˮ뱮eXyc=ֽ:Z54WҰWG}uG2Gצ҇|ߣ4!RZ9t[Eit ]RK/&lJSZ\ykԥ]kNz\$|\%I jvqǼE;.I$3lͳ|턹eeȨ*ΗQ6[(oNZ:kKǠak^]3zUv:,sv/V2y ;GjIl폥v.}]>qY 9HCP3.{M } ;b]7(衅ǿ5Dlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0056-Sines.xiz000066400000000000000000000042351247673406200235020ustar00rootroot00000000000000\[w8~`yO!!$=lBZ&b pkl֗4_%ydcHM[?554}T]R*H@<av{tL&[Tt6fɚ?0opĂ4/ͼVK^$^_e5;e7n6,3B{ AYɜ1 ϛKr " Yp X`Y.1Y7 8oVfKMh7!/dK]P#OZ*/xi/lP}Q@k}cA|GZűYhbeIlg6 gW!XY6xi&E,G7 { VB2{/|SYDs]x|Q븤ʱM6ĪG%>nwLH֎nСx>5L >6QqufYz2ťI -4\Y-ەy"FpgT]`㕷RAKMBC Qº}mQa%Vz)vsk)# LWkeJOF/H `-4;'Ad`tlZ9Pc$'.䐯!dt|^ZdDՖJrR(xk`CMyiѥC3'4)Ll|elf9-w- ᩾t!NZbR:cx@,Df)&b= 8HȂ]qnB09SjfG;`bw PYʮGi:c@CIIE/)]h+im+hiC\#WǥUuu Y#<0v#NFnڠ>G6K`u'tzW ^ tY oK W _oH6#׿\_&%%ŲrmM$\ڧIZB~'QgBEX\RT" %߭F5o(J j\#`^kҏKwVҭJJ#W>.lKU RT]SucԞwOU[任ɯwStpMuT)C{z\1~9/ F! mo&FcƒrVNL,$1 RU<-5V?`;YM?N?VNb]^ZURKM_ԕRU_NlviR%jziQuWj4}(& fTLiްrh ۷Z #2W4JlਬXpP @?wLʣJlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0057-Soft Flute.xiz000066400000000000000000000054701247673406200243770ustar00rootroot00000000000000\Ks8WhuSFdVU)-֖ͨE EjIʉoS|` )I*Sx/[L]㗳nzo;Uwfqx?j0kیL)czk˾8^GOZfgaEcz{svl>],bۙy}[{? _CjCG'mr|7YO[hk~![v|œ1L88݆dGxaԋ*/!4"tǹ `JȯJ1 ޴DnϾcQ6ߔyj6_&u J0VHD^s.Qwݟv~M@_^~A5#m,73{tp ʢem0l^xn]oiӂ ڠ|.?7'w~=zKx!a R~YO%<ѿ,OH=D>gIc#ܐ< 🀂s~h|w;[)ugSLc)[?S׷C8C"=뉀=K;nhC,!t⌞`{EӳGÐ<~.dar`OrG`Hg؇3-4>LˉD `^&}F[,jP[O]ǣ@q92fa>vsץ1+gtSJ]K)Ttj>f ìa4#Ǟ)tDdī HA۝D{)QCM]S9&6i^ОAeiD^?ObF{1B^dfRRDL~(ٱ9F:x  <{ vpXkH@PC^1څ%!U3X 9 r PUcPZ"C‚<tv 9PrQt2#Uhҧb[?O@/,<R[o`1\ꃰ1M>U#d3M:35H"+y4?%O] ~ZK^h6J(<vẐ9.(/6 qd Jx KMnNJt:.Y\8TTDZ*sGQ"(&N Rv- c4qFd5Z!|$|2 x2~HEDSsP)3P"ebs\4Ry#~ˋ[3*KΖϔs![ᓳauy# 䘶P1-I|F(=Jn1]ǻ߇UHky,%5962Es6d~QbCޣr#\P֗xekIe @2(ORbR^jB<2+k*Jy1gڒm^ublNrki\I1.y!q2"BebzgI J},)eZ"!LbYIB-e+U32wT$BZ֣oviXURUĬ3l!+)K]*2IYRzRR¨MZHJp ~VbIeZ,_-/Z!8W%n3  [ڈspvք#pI ;!?k3|l״ή&٦&/lj_F'<d$5c]h4 Ϛ)jP t終 J ByUH LJi('srvxy [>i)sBu펝2ŧ8ax/ 9BOFRx^bM;WJ^ Gq([is\qս^ Oah[^ zT͆Tjp,p2%b ""Lo[<t .@C+CCu;e4u!Z zjmU[`Kї(hK*69 3mݪ0.hK*֧X5DNKLʀ"c DP.D_RT[BP8E\U 'u 0ۀahKJ u)V IWpKm*AZ_]% } Q7ćZZT }m0Z[8ZuZrWHkC5HjG_[LWiC[iGIgG5١SX߭ }WUins+֣SUSqJks)%FkUCm6 ϵ u%*R6*_X8a%}p}J%ArP[dFk zTg} *ֶɠg|s7UϒW}VWjֶ)UEa sˮϢ2 \Xx*c<ɓ[mxj%IN8\o S{']e*IJ>@F|RYW)@,ⓝO4*SU@VQvK(T5+!;(-̄lYΑ39yf'G6̣Q^u/L6&DCp"{ܰ΅#Y73㋊Q7fg3֍lFv݌u#o:jS3YԦuZ鑾 F > >L:>@3!NȎ$thTm,sQQb(f7 |۸[lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0058-Warm Flute.xiz000066400000000000000000000042061247673406200243670ustar00rootroot00000000000000[[s8~ϯR4MfvH]fnE#ln% ~E%٘\&婍9:M>|r{G[-P˳8oM/>v5~i׶'# W{?2y<ġ{Sn ;4<נxE[ݫpM%CbËS굌6űIvݛ޴72E+V x&$$ t"Dd"ȡa+Ba:Aqz(%A^O5$#a)bkc.Ab6. gR <\n4n >oO򢤅PV89w(Iօ5؊<r(bV,Ү{u&߇ߥU@CV' uonӻ+my\bT|L){!q"e=q=ˉ%#1G"ZꍝE7 etKg)q QB}$ "b_\6f[ztۓ# Q?B9Iȝ(: 0-oAE"6 KpbR"+yRtͶ oWc·sb"j~+xTV:=2Cq7qp,ߝt:}|MTQ{A%%9ݹ.g]'5qϻ$) SLJ"˃-dwgPD+wLvHHU;jzkהftեC0t J7[U#<ݢrIW:LWmUԎۚ"\JW8E:*/ u^*_¾s&'ɻ/˂;6I)FQ{G(:۩qa=`jT/> v^J3oUHI^ZURӧNid4/A_oe]<(pKHQL-%1B^h9p(j6jj1x*`]89.ۥESǡme'fM.NSuWxQsx,wEtJ@SKHNJ}BF).EnD򢄏MiRyN`ٸ#if-Lnd|Eɪ>{%H p}1Z} eLjyR8\45&蔚ٖC:94W TBHU.sˍ(N!2mGDI>ɤ,JSN"̎+6g/; G6dfqA2RAs;XV~W~|VsuIVkr-S+rJ<^J¥U,lAb;'+삑~ORL ޭY 'K|<3-EcRR;5D p Ʌ_796t@1TiS\UFUn5RO0x~ŕqq|řlɁkcvn{ .PoiAncphYKfX' 3^* "_-+BB5̉!c^ŕ٢3*Q9Tu~x }LO5M.4yg/ph7ߐlz-X?mzRyv%4$bYKYv*8K#j/eJsrHH%[puͭMt:@mdSuh._ܢT)Z|㲛z ٙm+y҆m_[m*O$2؇д;n|vT̺*jbjjj k kTCpF;h`B/ 9 T>x46TH T0m|]}Ni]hVro~~C im#<lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0059-Ocarina.xiz000066400000000000000000000033401247673406200237740ustar00rootroot00000000000000Zs6 _=uirפr[b{ӭ{m(Md})]w6 G3v$݀t7o;vtsyXί:n>2_ggF;aV]*ĝ[_qir&2m mlLmw. '^'O'W# Ϡ'7Y)ۢ$&lVi1@ܕy/,4Қ/2i ?"u\K,.%$ːˈDȥ1Pv-zMla  D _ՐgPdvMjd?[eLҹnJsyYGdyvg|1zFf$c?rܹ(g>$GS8_M?p8oZ> ɲxisy·"PSRR0 }'\#"PILX ;Fx6ղ?7%E&ùQ~v7^> kxx%!`YR\*#^`l@X$1LE8B7l[o쌎.1Rϗ ?e-60u8F(HBQ8u7Y*!d>8ݡ0pX-:aDD`YMcO%=K`p83{Oc(~P:WG8|_H5a< j=Fe e|?a |1nE7@RbZ=%$<:U$:p 'a('aP&U[ J U.a x2(U({fe+]A:B+\OCatC9.y!1<1uW .9u7˦5k2|a BA/u!wTݭI4:uZC 5(,pS*m(7AԐNt\+0%RшEpoгͭI*VI &'RSj`y^Jst%ީM.3}f<6I2t+ND/j߲׌4uHPLm}㒗䑡 ]0EЬd1Gk Rzи+MΨWj}m W[x亂u}9<@kh!U,62-gdqslM|P3=jRv 9vz2e AKS p"}<0*OɁ|eI"(t$iR0NN#R7C:matdϒ, ~*7޺k>t/21ZQY1vp\@IǓbRe! ̞20zo 陸 }(|r\NkR3'n!15ŝE<:N=aZ*\K*öl. ,T3 ᩾v)*-͚{'c:[ jR?GBJ ŵ[!Cyם4iC֤.Ѧ5*/( Fu;ͥUwcx_>Sػ'$S3+>ڔ= KWѭpNt+  Dn;ѭpNt+̷}&ډ~=0>hp|x4_1 WHC|T~8!,X5Xիȧ)Ԧƽ] Rc?˨.%Oy@OSNq ?9*s&lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0060-Beyond.xiz000066400000000000000000000043141247673406200236320ustar00rootroot00000000000000[Ks6W;2G8b˩JrHfB*IQ}$H\CNILJŷ޻ߗaQy~sX,pB ;w·{~_̾Au_.M(VT_үatu/HuxE9]'NB7 [;0pt5g¿?r۟od _V4d%Nİ}Ɇ߼x [d"q,HX0GH7(eQFq$6;olBab\yj8&w7ь[}C p vȶa?Ueru)t}>[=+,&,2 vej" (}Yu`}}MBip[]1;I7l;tb\e花9< }y@ \PM睃4BaY gnmT.e-u"(!Eol["v$,`Vc(fKP}w qK22TV910.FҘЇ,-}h@ЖGh懎l ?Ebey 8'fc2ēVvR,q2*fU,x2 .tL߱4eSwVu"F #1r;͙DN J/Y=.›!QK f\^8;I:jptOk~18Y(BK~nhR\M F_L%˒u b>CNqBŌT$=U#]s@GϕpX*ntO{ҟܐp@F'12x6y򪨁Z7;1ƍ#$OܨZk5~LQPƂDlNvԿ(U0rWFG( \;=UM:j{4)͍ V~v{J=s} d]]t#Sl2GхR}u8RrKϷ+K |0}5Ӌr斷%oBF@'dy WTKS3ѡOV"4"< ~uR9vۍQ)^LUɺu+|F:v>@npp eh7O);Kݯ@(5M#+eD1LyR u o41 S^z’b6 44lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0061-Sweep Pad.xiz000066400000000000000000000040341247673406200241620ustar00rootroot00000000000000\[w8~`yO ~N6!]&EPkl_$ylsfS?G#i43ŻVc<;i~wl0pLnߝ6o';͏g>r1<|5^]˿vLPx}YЯw4n'wq;[󽦦\oSqCC uw-GnuoKM촹dMNQhasT[Pرy6g̅0?Yh͚grj|r̙V>\5>7: kX4`^QcY;3EBMr\)1p bXυcʶqx&.g;'7O U bf:Ε0Pg!0gXոE_2&eMUڣ@su& cGѪ θ{qA_PT* h<C2W?(cAX Ѥ\jࢩ! %+U#dD79Ed]0/6v$ped%C㋔2 s-ģ,lsBW\<isjx cB%q.6YDdh!~@ MCux3,F}db6(J%/hYG#]>^ޏ9Q5ms\%y v_"-PMJ6;$lEƅV~6Ry`ZJ2Ivoҁ\I'(%}TAR[$qlyN}=Sإ<r>9>Ga'.  ]@ے&A]HX|ɧ YOcHj 'se>Vq^6 Ƴ8ej6!+,X9̸ $KOW.q  zztlmiw )T`d\`%!"&TJڑgvvWjΈ"jHM%ƫK.T#uT1%E]^ǎaɤTل`0;)\ _N0Zl^8(7I ]bsd|&9|K&3 fI݀$dAŲ$8ĝ;l">nop?2[r;SZ9 W~nn%JF29ftf1&; U'1 #Qk(,\>mg<"L,κd'[, t]Lz5 p4Ώj8?( ZǢ x|hk4S4c G*8Rj8iEܳѣ#|jhL5ᨺپ1rPjhp!krlOGǸ5;py{^ GS39zg5rY}͎]iXM@zswQ~MUѰL(FEm3|'E%~?8xZç5?zL֖wgMms6_MqpT x_0/ db~"sʃe|"E-HHw:ʑ6FUuܩQՏr߯h/ <jGlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0062-Sweep Matrix.xiz000066400000000000000000000042531247673406200247260ustar00rootroot00000000000000v8_H&=lBM aD-ج/$˖䑍^~jkfFfFihs9kϛ X͝j݇.G/gۓpv۞M e?%5;M;ї;<^ao SqKE Ft06Z{>{7igơi ʼF'9bd9o]n1ɯ ¢ 'M8?o!H#c _>b,d|h|r6>^7>7: k,hp2'#~_n؂e1gMV.|5Q"t~@o@92QfzR8; \+;S2^h~"r'ȪFQ6dFMi+ezPM|1w[)jES#&B` h-d5Z@6JH K~,g僖\_#-}r3Dׅ.P3V"]:WLam6̧zNPc4Hz0rYA;`N0Y~,5]:l(IfA PŌl@JdCmS[߻(2x9E<:ȞWpDYE{5+I2*d\%کy84K^9I:>&Z;~Yk#mIR\Oƻ`8 975cV[[h_R?$qR@K1m+ $I"5AnR`hw&] ͒ >RM/IS'aoxa(粥z8G~FNoUp]>SidAYM.ZvF~G9̡eeq .j(:,t C~iaD jE _^~uw2H]!CP~HmcKޡ2A NAˈ)IVVta@o; ? ]lQv!wGVA|.+s9|~Ԧ$x2 bX6;ǀ ߌ*Pdd}stn%39JigO6~HPOl5(M;O$Vr켑(qY t =EyjkZLeA&mn#.RP${]8$i5B. ߞoX vѝD] (49^W qC%\UQHҞ-`?UR8+{i]Tʴ Yò2<$]d|&J6XM J[t%FW#}Rŝ>};21i7Gh~D}G%a2wʇUb zr6 VWBL?u\:~K[Ѥ HilˈDňQ:bֈ*1❈؈D!^ZaLbܨJzhA| ޫʪ̷{e" v.cO_bomClmms-1.1.3/data/presets/ZynAddSubFX/Collection/0063-Matrix.xiz000066400000000000000000000041441247673406200236620ustar00rootroot00000000000000\[w6 ~ϯ:v\i%Nl[CKt֦<]x~E@R.tzjK |OEc4>5: k,hbPKU2 ::|et#*AsEϸMWA@A6@eL>?!7TEx +|0Qf0u⵻?LоWseJq|oIW! 1_1](+;+K ] Rtcr]rsÕ9Sftef?c|MVjbD:<%Bstfz)x2p8ׄ J#ؑ\i?c?`#<^}`567ۘic4 `?$#  Qb-m)X BcN6BRF-hJryL(= AXʀ\r!P?m!\d(>uTz 7VB]b:Wejc='l(a@ 2ό]p=jV9xݠ0'j,Dn٪JY6nć T7y1#937gԒj דqE&=]f-asyuyP*4q$YE5-InTգeI+'I'gYsjeᮍH]dq=G*bGR,^&еY|qod] BfDdGx6OFPdk4Ry>EzN9SHd Ҍ+ȶekmyQkg 4v %fJ!ށ ҜOy@_[M) o9\lj̗;ɶbv!1-XYaP#'Գ͊F@ٳM.7ڡKAFKZkBFF JUZj!TyD`Z+:ql]^$ͮE)V Pɰ}HkqAdhÉW0(1n - @?iŐ:xyV1gJr"Jtdtb2w<_6*p% :H.'00n oGet}{(ENDv #4hwuG%ufpUi G1> ɧF3TC1 G v}TV~ a3̷kss"_J1h/-_at4[6~}Jԩ隟~|s"MKF &,1;Ⴋ;-h9YRWa6K6K&m=Kv0kNq;/BW$0]N).&~s/=aU gn 7 bв~JUb(2}()N%I8p:TuotzL~A(WgN7:!Dsst% %US,l8sc}2+{K~7(e|xM\eY-IJ;Jr;? ΑZg%+cNXAaSG; 9+k)O< Q򫭞qY Q9!bF CR]O!U: _,+@ ~e|iFG8Pħ;D.g4U)STvT2l}\(>ZQD&Te΂A[ƈPhRn.уyU-VAyso&'s%ŒcYԥ/dA*Ŵ$ P60nAd߾>!k p.srne9ʢf%d c NS`dB5/1w}pg NŎHG@b ˈ3yyvTP`xְJdNmz֦{rwyN奇p<K]Ȫ#Õn-'onQOuKd#"eqg^)Ww7P!~4֯ԯPNWt5u>TU崵y/靖F@wSNԄߺ.6-޲*lH&G036%c?zO~֎<}h|e(2>p}'(E3EtvfS[ƶ]Uj۹kO{P0l,NLJA|0q. :b@;(r:F6{SL97*pQm_'RSpN UC45#vAL7-+M v0E\2[\l'VIUOtrZX=ѵʴzkpD*>S9}zaz?m~ŀlbD_1$/iHA{9wR衜Iw#E:v#Bm8E^(j Bނpf|>b =w &zY2L F, ز cZTP=hfeC %X |*7%˭Ǿ]bD<'e9lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0065-Ice Field.xiz000066400000000000000000000053211247673406200241220ustar00rootroot00000000000000]_W۸;B͹XE xYۡ~;%KHG`Fh4X3{ղHݢw\};;;j]>]Z}3ܝgϱ#eq~{+o?8iwOwϽ>I罶D1vjُͲ 'W7j߿ #r=^f)B3_cPu<+x?U[hx7ZJ[,6-3r wDXɗ (mIzF1gN'03F.)( _6bsߋl% ?@+7?oGO& h ]?};)P"y&U[YyH]tip 7 ȫZl +fBOݚ  VCaqp >:_n74ZzZ8<&E (>=h94+'EMGx@c%?-m̛D=,_2:&ۼ݁J6oX)"VyD5z\PޫP cט=)cȐ5Is0"dT{v3^MS?S%x5>Uw  !"YDňҳk"TO~v"#rd8{Q$|jJ`M !z CjZe{sƐ<?ghB-BW$vFE] L2껧b7A(h&B9rSwePwcz"Ҕ{*-D6ݓ#0;e! ~yrͭ(3AS4z2o*e؏chtNK ;PMo %IApb;CH`YjY؁9yX+2%[_@tB0N%& 7EȲ{$9H$;O.r꼭}Û˫44j CmpqEfa@9/s̈́әe |p4!aq]yJ0;26#J2RU<7 *T[L3\(v tM  8u7&s|pY6h.n{󼁣謁c;85?SӼS,\gz9ls[Y~J+$|Q4$hC/"K$Jʱ9Se *B$*oVENTQ`.͸psrP$:%ySzݠ%j7p\XRKTnR:Y_qd[8ab/J4e^:X湶qaN2j5Yz\uk$5YKd] ]V[JȳJkJj9{֐6P\'X/!Hr~izϖ ԪG8E=k"r B3{ Ju;qHXL:v\4qG_ƵQjeviy0]Ƒ)-),"/:V=T4FE5 jd NuQ[e(W+s@m?_^n]xxz ;ad"KGׅ3Xcl0$Yc>M.'XaR}R}'޷""A4&LˈD `Q&Ɓr.6 K͐@ލAOր" ZCXvXxD;A\"'iGEPfsvh4 $6i hS,E#f^f÷@Z9 $r~3dvYelmȖcz~l&0lO f[[y!O#r0V6fMiNyӉ&!;7yJLގR;Dέdlб #%.#27JcKcGvH{]$!'j6*\/ͧ餾Ϯ= exN!*F-$\|l2"G?:wEܥ꟣T1hWK5U@A^g]7׈piC?YJɶlJ= i]qKDžA dwk3^W4=LWtfʼ/q#K'ıDvS"c)v6dZm 'rGkw+"@X$[L 7\8MeʢʔE#|2) L) 0),Sw*p)(e(' ʊcĴRhԢJcyš}h6VeF(@lΒG0N&&K'y2ms9$i;nsD1-Iv}yÏ˫4I= F kK.U7E/HEKLr^.vSaHe#SY.9Slg,EwS*(i TJ"kՈZ_P(^W#6#ë+ہr~"}-л,XWҨ] xRخxc^en0/"u)lW.̔GAM*,*l KV5 WP~-uO=M/jM -ipTaM:h*ASJuTæR6갩TM:%vna_x?md)flmms-1.1.3/data/presets/ZynAddSubFX/Collection/0067-Smooth.xiz000066400000000000000000000022211247673406200236650ustar00rootroot00000000000000X[s6~ϯp:& !3!;lbvKlh-ڂ `[eC}Jt|v5 -bY״Xa){s1?ݟ8~p'׎|Y}Dugc!CaKɑHJNm%9p086LN `ԓR_!zcI}TDG^f>}R)U f Fjh"Od*`wnY!FU3 OXFJ2_~sՍ%<JKGl`P]WO_|?ϟd<|LjE{.?_vCC䯾e7[)bS~DN5]''b_VcKT-'mkݢTIP6b_UDz'M>i:7N{_嵼}?vOn2Ǥ(Gb\]n)HUVeQ3(jpFUQlxTkA<:zy";8"4s( LH8!"nꚆ.FO'U N<8>BtzW}}xL|>Sy{ IXVVs3`tƏ/P=o<;Σ;S $yC,&2]N 0B YlVx߰dj3A&$KRR^4ZQ V*iZ4SVZ>bŁL)٨ ::-@TiStJ3ZNYF )hIw&#mⅴ[vW wP EM|\3P6Dҏ0z7"쑀PɅWJB0L0kD/ݯ0Gz ׽oevfUN0䶫;^V>ہ(0,b.B_j.j[i~)n|;4X̒_;Gw igtg|w!}q/p;׌vdGK/cŵ}kb'^|8_[;$ ,ЛƤxM:%F Mc6 8T>j]TnLܘn"!q( h]JkttKPƠ/D3= zP7>8^w˅7|8͹Q87 H#udcMhM͔HO_gϓm1 M`ô5> e[~S;!~L?ǐmyb;{ ^}]ax®c)6d|G6#xs;t~p>x\q΢Է.4ZIbIF]|\DRv|`ā4a5Re=Ò)ʤQ@yJ=}$O/D=~](bmwdc?AJ@T(T𖥠ms}>j.25f&(F#m[ݫ6˾,~MӶ{f-du۹`( wJ4Sa4seF%h_8#Joclq0?VBIBP(dbK"KA J9PrwVn#V#@lv0c0 pK%Hl/dfGBm Hx˵HmBU.CԎT^^Saz\)N"i*FF0h /LKҐjGk4{7v%PlE]}G@^]R7j%;*r㭮y]1]bnZt;WfVxjݔyDφb2ryCA dAxzȩDou4%}ML&g ߟ}R*4r+.hW, l#|.%.bUMI35^uH5*ɕH$mZA4Y8PIbWJ3 r)y76*rcik6W*`f@v\NjD_3DxaPii<>Ը@]ze"OZx7GċQoCnu u 74YO.0,<F|>!YrFOwgTIv)*Df49 R 4D 4pp}C!e)[|WU~d< 5ܪ!Cf9ߥsCN*E ۲\'+Y?1dqo@^,Ȱ m9 %: D_D2累u,pѝ@ty}x}Otk_:aH & WM=Г:PeCt4h;lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0070-Bright Rushes.xiz000066400000000000000000000046731247673406200250740ustar00rootroot00000000000000[_wϧpyO[b 6!-mH틎56MOX$d7ه} ̌߈?}Y{ #7oky<}xשûQ{wg=Ρ1eޭ?Ax[k'|Ҫ]5߅MotcRѭWE;׆d5ΏWd1V>ݱfՁ2Nzdwzx YKع(:~vcl Gq]3?`v0XFKea B9uPID]\x?LOsp &}UlъE)E45yßYZ?"dGV Bˣ1 M`h;}Zk.E}r M,n3;!~eL?ǐxlyD=zg>ޮw0aWpܱzȔB~'|G^v=Q %Tedm2B0<]h,$i e%>$w}rmIA$؍v)hjz%SJ;I )aL> b](bEusK8R i8%)(b\\-7EƯ߷3eo4h۪NYUy1amgngQH/QHoh h,Jz)qF3(sG' ?}ǭ~1ŖD$AK)PrxG F2i;loGq8K,_&p - M9(Y<_&D*\9h$B\Aw $muK-Ic2ZuG)򽦂ZKK*}øsop UA?ǿy29aBHk0JǾA1h1R4HR. 4w 'Æi\<<$+C]"djֺ*GZJc:z%m\yGCi^J}W諐i*C:\@K9 ׃$L9R3M[xm䪿v|܊cNɭYeFɭ?6bR+6r]uBΪo2yM@p=90څZG49O6ӣZeQzl-:'ARLz@EQH2h\c8?*e;U[afA!K\@af*-w# pN1 3UD9)PtQqSpʲ)+}a$Zэ|a >K(6 RFh?pSHQZv6U,i 0F5mW)b%܅ JLn |.xI':iIrYurW=vFTJ62H(+q EϚ~3V6o+7n;o# Gq+Ԣ۹ճ*8MNƘ0# p1^ j f#)ni*.K{M&' J#?wBQҫ]%tU/f J=R"VUG4#~\(Qݠ\K:DMJȈTBGL̻}wV7s7vm'(0H3\q]xTsd%~F5CĈ* >" '7ңG8~ (\KuS=x1* !"}s 9nnqfb8͸BS ; AQ-OHf?$\5ӝEz:U]>r05E٤&ͶoT| |= \_c}PHYUՄ_ )cj?uM.7fri;lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0071-Bright Rush Long Tail.xiz000066400000000000000000000047131247673406200262720ustar00rootroot00000000000000[_s8ϧrOB]`܋J`16?pZX$lkݭVwk_ʂFUbҷo}x?5~po,^YkytC Cfԍ= V:l@&iy0Lg8!iKc;~]j$tNDmCcq0 - pa[*ktLKPD`/D+ : z07p›Tl>}y)7 HYo"kɇs e%q}?׵~~UL?K#/-zз,X3zeW;WV?Y10chO}`-;Be=hcҿYc $xl}[^fP#نEeڸ% PZ*":6V}DžOl;("(MϷseFfz>ӾJ(it?N FPTx|C|'6$"LZfQIZ(6> BFr|ͱ#e$(!pqniMC]6#| rPY[J=U&Zgz%}\yKCY^kG&\rjFW Y&IϢpݹN+|+|g׿4"k5Rh̹ b'7MgY|PLV(]\=Ex>:= ´a'!lH9w-shQA p՞lc7r@9].ftiCE҃{T,Pmd C;-]DnǑEN=F6D1E:b~.чPYޒcFC@ng:K=pN)ZI7!L~"˰aF-p7L_L7H;Ƃ }Q+z%6]T8H,`pOaĸ) RE sjHw1fI-PFߔdpLOtbrP;.r JR>LK#֎&( xm+A bQ/* ?2J`!C銧M1Vy݈uᕊŚwJ.NMv+b\ifQto@c@# x6#2Q8$@WJVǀP Y2ݷzD*9(ŀ Wa_yGZrUg&x qj"%!?a5SnQI%i怢yk@&eW*)LpO芵}਄w})xc oz ^.A#Q 8us͐g]ƍtitp\^)b&v>/bT.zWB_rChhmhLkN37x^|[6P,}Lrn7黨3hZg;)Dg!Uѭ3d+\Փqp?/(&pG -E]B)_x6IE/D埣i`ˁ*_%M#gW938Șh+b?1h,xƺVZlb] +ֵ* "k2ֵU]^յU]MqQqMƺVԵjU;'YiGT0Sw+ըºuplUBdnSn#sB%w]VJ"/VIw&ƒIa 3HFdtr$ U.oqnS6ʯ|\f9@t;lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0072-Extended Rushes.xiz000066400000000000000000000060411247673406200254060ustar00rootroot00000000000000\_s8ϧrO! ]E9$>lInIƄ2Q/X$o`juZ ;qԎgɢlg=hg->V& 8,^X7ۮ',+GZPpr-\ - G/"(AW4 'N$h4ϊ {8NnWqmD+2LNjHAEҹﯴ)w/l)NIx+IT,dF`NbWX)^Y,p^I|N?E&F"D! Mbs"5X#QiA8 G@ s} &HLJC\о]o[P|}GsmDB*y?+NPɠhz6LvaÕ)mə v;b&qoɚ# l/Y;:%^5:Գ:N?8lO@YS9 zۿ/}9:@#J H{Y荢Gx:˶tvinڭk̆`D#81F@wk6X 6XW{!$UQt]c{7alF1r ~b}( 9z9c,d9a ^QȫIX8'? Q L2eR޹]T8L{"Ig?Kl71u)Es"RK΢#=vG~Ogvc zIl@ڼУH)FG$Z@͑4#fl1"G?<@ /h]HP8- !yD0$&.Oq4y)ٚMiR;m"%M$9MV ;9W4LƒeFry?K0'YL `D; ݈d"Y`3KppdwAPdo4e)M)M+|(f`dxq Sdi˚z*gBVF"VMΟ'}ڬ p`'רZɜ9"xhNUhndb2uÈ(؋-qDiIztxh"HK1Xv]&Šk`yVsVqs=,Ln,F7qw$TJ._qKtՑ|V|i@s*} sTr\]NIn\Ũ`DixU%kNC[jַ7'8tV9J%rDF$~`ۅ77:9~ ?y ?fx}ÚAoG_5eѬMʣu`M뎳:@o9)zM]1HY_$(}ROepuy^&7ж+߀A,;UV=; MT),sܛ&uD8ܥVnX!rEEi o3c^ YF3^p1 N tdzեHDd]/t+VMAk^cz}PY㍔$j1zBM1ҊjCv_,tJ-\IV+u}n!ՅmڄNWtm m.GEMEɀcR$wV39%(~`7_z g[2_ܒLNUȍX uLF1rblIm /g{` pU,^Pص696 kR9A5ޠVR -*h*h+h2[Iѓ޵åBMT3%*hHHWΫڬ`&&Zt//I]>+6̻6AV~Y({3Xr¤ zV";ǯ 2 6HxG[F \Ƌ7L4 ɿEAA9֯jtMRͪE*i|J¶.n9p[o+UharJ2flm+UH\q[*TXj]eC PR_q\:=Y~ke~ oVk'Mgwk*+iПvVV3iXᎃhZڷ.H+ـk](Ssv0/@YXlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0073-Bright Rush Pipe.xiz000066400000000000000000000061031247673406200254130ustar00rootroot00000000000000\Qwڸ~ϯrZ! 9]&B{{_t,`Iؖ,#ɘ]h$Fof8zyQExph0 =?xh]6~pqKo<7qGߛG]4 tGl7}O sw,Rڡ\g4K' Y6`z4 FCڍC.]ыƸwɂlbrи4؛ɸ7iΎqZ_|%0j9_ ]dM#qmV4H*/1 "t>3in `JȻrD;p=/SRq2M,pz7ء?oP&D>F"q&x5}̉7>_.ߜ_Boї_7'턑tU*hH7>eNq¹K/o#>Q7Y^6hAb=qK'^ώ$ӻU͡_IZЍeMu(0 *dm@T Udp׿u|qޠҝiײ$B_ iIN&hʊ '$.Sn WymĸK8G2<Y\Ԉpw;_SS  Ps3?y!X&=k%c0 ;K|ieЉfLzSNg^%{ 7Z?#ܷp8&QY˛c?oF>`TĜ4x"OM?D&ĉZ|F6DVyͨG"n,txJq3 5Z_EKF:=CAǧ}UT yԞz5: wzeفӎ^7D1H*O6Z͌Dnbe]-l0H ۈ K~.g=/?&&@vsЍbJJHБ{{G'VwLg6RufCdd8EWFn5[_/jhY|8=Eg͆9؍ͲT1d4ʞ+(,@6V x #)Ul<2]{s^6ugQ )kq}5hٻ۟TMgXC̎}r@H2'[j!+ڳI:{~gLjYF?Dx%`!xBƹ;Բ2D3}x~H|0Wd@$vƈE @% > <~xY1efM/7ʓ[+"zKHQN!w[KYˋQfT4"?XlRAqu6"ET^W}$^ 'ǎR`irő *ۆQxRj)vN>jsdnPq?ޓS܏b1XVӒ Ff1v4\ w(r^ zO,ʄ9FgjZxLY5B@5&ZTQKlC/Рd J.%u}ŽF 3Fz_VZ|?>'"Tw]k ac2וjg[j_3A-M,Wi-rqEsoۆsveo`NN?< ~ 1},;!|<^3Qt^?e)WI*q|Tuο:9,.ʻ Y\O^s-kpsOօ3EnAI*Ģ2o4h:}tL :qhHB0\P O*y*VAs2Y~߃  U#AHzôP*D,4Y_N\niEV/K-B%o緵oHy1_/A]ݘy|{vn4纳繋c 2ykwޘMx49ig!y[ ov#c';Sc Ft؛#l4M{C{nOgpAܘk֞!8#[8:U$|bd G8ܮ OEY.V]BIy(Y.ze7ޗ5ʶLUy3\EViJ)W:%JC4V]PJ;/=|o8y)1m0y 3vmR"L)4 )I8/#L@-S}[pݡM%&3Ij MќH(I<( t=G 'Ipߣ L'wrYQkI_+T`P!pe' +W]Pz;&=It齁 <~h2"DR$RŮu%8*PH;UL,Ȳb:A0/LkC^miFWе*.*FۻC x4S_ּuS_YDgwɆΚv ?H>WjGNoxCFdט0ޅ([߷p!̎ kI&$~}#w#@܄-y RLR‚3ˡ0|FWXxth e"ݧ$c|3*57TaxwipKD8΋f]kAІ*C0bTT&uTHSg!cRVϘvު /d%v6y}YV4yՙW|*Wp[,TKkvk/Zj5|QUjmd*B{w4Q\nh?a.(ɽfUTUQwjhVEUUxj* S\5UQmWE]Uhm*ů=lN3_-lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0075-Breathy Pad.xiz000066400000000000000000000041531247673406200245040ustar00rootroot00000000000000Zw~߿>mYs6CroH{/: ]cq]_-# =}nh$}}w-b-˖<xkwϓ.{,}y{&~+7ޯb[?e8i#/3^$tЙ4hxԟ#kC#ytn[} Ic4Hul@&ii0Lg;iM.]W'?alXD0Nt@xC'–Kچ,J/dޫ0s@7^ -.^鼍f`4!|$bGZ~MV;>c;lmxo~8?qoݻ&ίNЄEU|-[Yo,#vIœ~E7N61As2j/݆=-f|?ChO{c=:= .䙡 'n[Dėb%E} uh>yha hiD7p;=p@`xq`$Uj3MX ^ f ϣψ lYW4Q 1{U⪃-_bi<ޑt0|BcF(.o&sD')dYAoEz{)R~qviC0]̒c4#8] {hU}DFr"y#ӄ^DZYv$QYBc<>!њ %!Tiy PDɴE]0c %ͪD? ؐ_Ȳꠈ,nMQu5We$^ @E@8_HFƢ1ʪn-yĈuQx Kd_,[!}}YfHN"L TmWl1HWR)L0ҏb'}M" %# MmIvQ`rX\vOф6FFQmI̬OG|;Xvީq<߰J{(wOJof蠟8qz7(9UC^`A^ $"g`6GwR4陷Jo>*gCU 4t (*r{HlV.ܗ{'X9IO86@, f%ve`.tnD.093VQ4I1HlUZ@le_Ɏ c;%"PeUvY|HVR`q<803(e@[(Rq.lbȢWɡ@U:A_0D,`:MW7 [x1}lE!yovhCI~[mi0Wpۑ_W pIM%Ğ3Tm,#_,IQ%U5h<% &p]#~`#>L<Fw7ys_)Tfz8z,ICtF J'8V zs~AhTJŮ+B!\"0 vqe\ETuU1rAvў(jإ tF+,4EǩR`䡓i(˿p~,tWMm%\$/5U0EQ,T|$^c=u߽µIx5SNdTzu)Q^.xe1dn5u^uIecvś <qDz'bb4m\Dgp=Mry>Wskf}s>נV?;7 籸a6ԣ &b1.z37>06m9g!-n(Ӷ_ZЅ@>,]= %jXz>0:֎e#jN~ةvvP_lGaǦ^4EM)MQhESTnN)P4)ݦvOBmcwh8ځO^v[.pQ[==[ڼ0B.D^ncɚö~5S-WƖ?ړr.{-kSI7 }, syWF]k*i IE.lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0076-ReedBank.xiz000066400000000000000000000025671247673406200241040ustar00rootroot00000000000000Y[s6~ϯe&Ɏ]OKmgw rB7@ eڧ$O)ן}Oۡ t k]C&_naz|Y_{}|q]B tլ7B~6(.`#P !UhF࣭rA {,Ib&:N+F|̸!C5,5Y2do`~;Gȹ8~KS~s=OLugW@`"e1̡~+HD )m,8{zq:}pF X :4Y9LY`ƚ荘ԏhaƹя(Ro#FR7O |f7ϓaDD7ªRP +I4dtϓ嗢3i> `>|HPS?Œ>_t2E{&)/z [L:żqGaom7mj[%qnuf%^uf%_b,(}b$%FŔDE,Զr+8n#>Mq|z[rBvhe8-h-;|1mEl n慢hkMZә%Wvʐ?pGqK$˄[Z\ I<9ExM9f$")юESL~*pr)mAh/s{OR=|WW90V3pndM%Bvi(=~BqX&hy{f_M`",fF v~NI.T)ucTCJs8rZ(pHL-J(Po`8DSq*=L%d2͓ >h:5NL+rUN}!ɄTi;XE5Gix" d,f5Zx8qg2J P(a^n+L r7dzrw\T/KjB]zl0Tq.xg㒻z.Xܡ*[0& o` "rQNUr|e߫?5"V?AXBnôI(PNHz8J2/iW[W A92%"2vD;SB/f@={!|q^н`6̝;*!!G\&'F4XO)[ ֱd#C")&fItFHT7ƪ(RP E4d^GRxD1cw` @L"YAJ7GXb&whŏL3J-ۜ8m%NgnYm7n:N5ھ)I&LLhӀ7JTzV6eg'NGkYތ Pu޲[ABX#RO|x XŋdYg<'ZY#C 6BdV',=c"Y-$RhCG.IFR~3LnvDTjU[BDYv6jnvO?ëҟdD=; Uk"صofI%>&A$łci6·vJpuꔐvWD?xb#i,N:<_óLt76 LP6L:tZk0N5n0]W>LR XR xTѮ1!3Ү1%_/N<̓TEq{=ȿ:/9ERK=voFFf5oV@(C^(eWN^a(:•Lf.;)>넖f aHsʑAz]HƒCO N*'^I\Ffg- o $)Pځ,K^^vyg}ҮXjy *{wVEYfU6ڬj*ͪڪj*V osocFWwWyCG&$lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0078-Soft Voyager.xiz000066400000000000000000000025661247673406200247420ustar00rootroot00000000000000Y]S6}W~. NBf,8&h[[Jm%_9-r] =H]=ARrc] Myr{vn<;|u PGhr%H8kxoh^c1 m&6C[0Eǃl_ 'c-8#ka|d@o }@u\ȇXȣAކc75k22p蒐vdZ|ī5EKp8`|ӚyA;@F-um,+7tb8 ,9 q4nt {>mퟮoY8:6}O h<OCj`ae ;@!Wr?l L0X&ܣ׈x}#!Ť#^%T7Å5sc\\^0AK;iQIAJTHPt#Ԩfg[UN`hW56Pߥjni +?|2Wy #׆>zhpW,Yޟ&]\s3M|ԻNz{jx;7q wlpyogK`P#/7zi|=~|7\w^:uC[q(whxc 9dc5OCvsfEcoEx:0_{3NzОY#@0\!hVNy z \z$b:reN)ߴf~\Ġs ׍b^zMh6>\ }s]2DcC0I 3,إϸ}'& Mvh@%E٪5{Ob 9o]b'*<'! zx,&3vp H 4r^’rY ;y;Bwyp0so| &hc73N8)Q~`i =p"w#j]aBFc#([USwDFf2{ gϣ}|DX 0s`^` $U(+/tIVhp\n3<_$δbtE%1SE N󮖧#}h[WE~E/}U[L#1 SBU _v2<=9Ka0|>lK^+%`^uV2X yŋT Q#d~Ol˻  \Q/inтIl5EɌ4lXz/i``I"[NG0W?DzAWˮϗiBrYK wOKiVFs?xGwZwR 3sl7:bٚ^ZW/T=P%񂋯weai*\2yJpȸYjJ/ڧX̲~mf+!KUAR2UUR2e֑2߀T4 m]\wsNQSuԀL5h5x O~™,|}n(S.uow PB)-]؝Zv6碕l#TP1piT]~\: yl…L&.X/*v]H2`.!)d"^Hƒ@H$_@B2pT#VUjUά^HRKCTr(Ɯc{tɷy{§WlEwe+VZV]Tc,~>Ժڮv]TuQmE]N]T;uQESN]T$m~T8)ڔ>?6_lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0080-Echo Choir.xiz000066400000000000000000000041161247673406200243170ustar00rootroot00000000000000rH=_`IU"/f_i0JH:fF=&ڪT9[5~i.h6elppxoWۭ{{5惿,RxW|;XD͓'d$&m͐m4r@8'7p<<ꓹ: NWyۻ 6<\(`|:gwo_7Rd]ł4@65,n<&ӑ dO}3(b]\K!eF&ÙqӰalsfɐ7ji$]r* 5!ٱE"ؒ UYX`}~; WI' <\P׮#v68>)fk zE\\.V MAŏX)SI|-wȽF\z!`cո،7_1QRCKd"Mf9r)cs> GقDGzߞA>T3D~}Gsv*5^<hi-^Ʃ}Ft GnPĞ.,!a-e5a֝KD/4]yFH< :$R"@Z̡u=tyuQ$ /_Җt1ǝ1+n,F\yt0RDMޫRGCy-)e'}䯋診%C ryb8mZ 8elX;jI Jg(VI * McJmBV (x)yur/5@}L>5T{Bl%FS)x{V{z D-JK\IRr}iWISScĘGQ_ӬѼq}~^2~TUr)wF.-iC-\blKfg @Z]ilvPzhc![zQZ4y;z94dt<#Tg*p"Q0W`%GQ(&O > XOP އ*dyUȪ>5#*S ,8 V%Pb8  #Zp`O();NM:n+ JXi7s0}`U;poT`@1dx" bX;hdAVnқ܌G~Ct|OkR3GVF1ޕ_jes88-50lK沰 /b}iw!3̚ ޾'6xTZ|&GB*- 6ŅV1Z|NIWwDuEmt2͛zこã='h &?q<ֽD٢Kwz8F?zO~<\ESF.[Ben%QhF§4f{TM"wP/iHz l-`8j kZ)s't(Wˇ"Adse8?ed<]

peq$.?$adH?NbOX١Y<2dU2Ҹ |oNBwO@LʰDyݹ@h);WAu@T455ǁ]utnUB3XJstYaG;[Z +%x8&͡k Q9%zCZjt #_H~y$_ j~͓||dowR%cc d-aZޏC̎k̤4"2Iv4 'g/E@ Kz|6"Hl|/Mhc@]J5<@ G:i݇NswPS!`BF="ɪ!@/ǟ7f1 ݦ=lb,EɠmPo " [rA?{ 51C%r(|==_JWn𯜇-n=ad$h`H`IxraʰW@Hv>"N0fJ%,|[m(k6۟eR~2m2mߜ'JGG ``%N!g@[C6 z]5OqW,,s[2gQ=z ]IT720YxaćX:.qHaI&r( `y}6۫,yN. !kʹcTȏZwߌj;b : WC5DˋQ"<`!i񰤇dc$/4AZX|cݛ(P4nMX|*; P6jv,?$I~.̂GYRqgwn49|c}:1>:}Zlog~"$wjQ޷ai4IbaŕE?HĒ؛M 3z$F7PG+Xx?Q*IPs䏃6D%-_6NͽD~zD>YJm{{JZVVdasRf~*>zvbowd=1'Ū{>Ҍ(r/+cQGw^@5f,] SU4}2L;t@h17g:7Ha?, 4[Z*-SN:r2I; ldX\*.ZrSwRB1ZYׅG.bF.2͘ʏkX*bzmJB4_rs"Pxc6tEA];Tak:oYqNL*XMe^ujUu%J]5ԕjs 3\ u4j(bî&A}E쾢HBɋ >‡lT)B$Kzv..~ sBzއ7# ԜuGpӎSIzb?k) q\Dqݼ˜v`Z( Eّ jaޣ8XGeaa36]6E%f#D^Yt5b=O˹tDm@ Xy(5{,Z2i"&Jx^lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0082-Sharp and Warm.xiz000066400000000000000000000053451247673406200251120ustar00rootroot00000000000000v6=_ջ+9qzT[nu֖]KN}Ef#*I9~/ .@$#;qOMf?]-[O4?mw_[ԟ?f{?{٧Q?u?\'v7÷r vͿx~e~Ϲ'/ߖ;18i]cs֍Yaj8_OZ_F;+z^9_s=V,7{Nʀx1]EdMCQnVԏ #DbA1l5 xށѳ?Syj.oFXAc^"KT1:6Qx2B9uIHԉ £()&. LC DՓss@=$ qHNwqi{=A?0D `dwU+s{Ws$Mgc| rVoTtNɻC{s۹ :'ȋ>zA^Wġ3l9Ds6]dv-aH&Ԓ<]& MlnGpr Sp1g걺! "DNKIg0iЉcVc@j*PȩG0yբ0s};kLhi~XmKlF2(@g [8[cP K.2HA8!{r _OƗґ[D+aKuqY@J!I83X(2,$6ӫH&Y ,~qIZ9KV:2{)zҶ^Ҷ/%ѣ#v0De@[XơlfJA!.D)d^V͓D8qܿ EUhH'<&׶Y/ԦAFނ L^!8:@J8ntI1,TP=t7,ﻻOz2>Keؿ3ϋ5j]zaU=3ctV7>BڎCB[jRJ*$eI̒n @oXy(Q4wSiRRȉUh1 Bu4$J4 @N>Lr7l+ƍnsHOz8۸iEqOFݸiufW]v{r8܋-"wu=knPoŐ^~3IZXCPݛR$Պ&i$xU$&w|j&#rwY'KUSqW* ^ ^GeRqVij ur`%bx>b,?@3o(aNM<#5,M<4E,3"P)bIͦ%wz"!GxH@J7J@'>>}N_8nִȫ{b.OϡbYyQ2veSؙ< w+c?6M.Ua_i"'PIMmե,ԺT4gKU7#49"Vץ*<=ԺTz3㸚RuPTE[)[y+>rx_*?F?ljlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0083-Sharp and Deep.xiz000066400000000000000000000053451247673406200250620ustar00rootroot00000000000000][w8~=9Mxgg';hjKIN Ix)K&3zj+  D?|ji= t}iѲ7׻?mM/[?_g/7Cq&;7Qooen?qIs/n^KbnovlsۺGk{֍Yॣ`:[m/ɐ nWvOv`yV7r( <2W7"nDW!YӀ^-Xй,= vًȣ)_/cƢ'ۻx$ Ac9>M`mٞcSNITtZpKWYï7gk#U,^J_:D֓=X8XKc#˨kLlߣx|X+Cs/0PSB7MW뜶c\gϖɧTD#xy"&xd4WH =Ru*C"_`qs22Vd6P.\Fh6xֽ=78DH܍ ?I07 qԻ^'t+찀Y4RfY2=wN0a0$Yc?/oX;H־H1M #T6DT̩Cvu WG4a4 ?оϷt@Ϸ>~XA[e3c l_\:Dwl3Q߁"~wrə# lK7h7vu :st.\B)u^aφ[@YS9 Pvp|84x vRPvz4;<ݹ@h ;Gu@t45=A]u Ca)A{]G?wX[@vKȈLCB$9~POuQ;C@G/˽!Y(_ {1<پ.Zv,=%QKqyhٶrvM.;ӂ0I239ٟ'Lh|c>_ΆSusC@{BMMX_d z?mЗv;GNM>#J5,M>4E,2fiXx)baAOSjy_M>no7JNz=d}kzHqGa>7E5V7EMQ}곞:BQh.˭\:]3#\!?.8=hǔ_ŵ7v~IC˥ܚRʛmN4iiO+[>=T}fOwִx˧sbOar\L2"ɠrhge7uhlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0084-Sharp Reed.xiz000066400000000000000000000070361247673406200243410ustar00rootroot00000000000000]MsFWpuٓCbJTkKZIHBB\T C 0@Rr\9š랞ƛ:4ݎN/Iv>ݞ=vzyrjs|7 ܗ5Rս%TS_ ??_]s)ޕ?Hgo//f~%ɤi< iȟ8pf]_ݎoM4 "O~ʳUMzߣ܋py084s˞3y}85!i.b?/``9oOI4ͩ:qtq[G-D)gX7~:]acfrW4~I4|~ՇK'ba=A>M =~hjYZ# y8/X&A)1)oG{Qng waM4"?KS2PMyHhDby5%ո4 8AJY^h"PүVoB?:SU(y):xөUҟkCg~ oW%EuS8IQ3Qt6Ǐ,_?^#gƊT㪮}C,{6$B;Mh~$82!M3}pew ]|}<ۥ_?y$*Y-1L6r?W/ sm4I:/ 'UX!(ed5ḎT5xyhu \cOH^јS[~JW?~8,W^Ԯڐe[{tB!^N^)cLie2>O^7V#?M|ުK.2[( MNj99N\y%+9ڊ̘??.Nج qCȠ8,%\>މ# 4}^ŕa)mʣ}M諺3&::eU)ѺՏ]4p84kL7QCKC10p[9TGӊL5:0L(KlfiHRQk`q-ڗZ9 Nu{yn(YFZ+R|/m4R|i>נzFSwͷ&me;ZKC`-&V\^_XѺ'[!TPMj*)\aV/VR4Y@+qOed,x6X^) 2W5gD)@͡͡͡{C7l=z9Tξ-%*4vX*X+:ϥΕx!6^v(<0 xEW xU<>^Q,(bJ_uW xEW xEW*je3Qm}bXnJEl^Q,^)וC@,`@-`@.X'L|Vvq0~ ȹae0f{ȱ>Ƭ=0 F c{c`03#b1ØG cs1!XEr)XzSmΊetX`tZd: (9!(1)0 F c 1Ø[cp%c9]17= h4EqzS?&']1r@%9kTy<:k,(l@g\vm-4-#F[F'#K[=6|y~2Z?%y]KRDDKT=7Si9^*[3cbjhe)Κ驖+o-)xg~f&W-7k,gCDiSdUŻqўV>Y%4 KZ¹dKԫ7aC-9 3'FO[9J5ͬR u^9zI?$i=xfz1sͼ2Kf%ɊUЀP*ZefI "&HoFi|Y*ƛ&%")!itUlj"d$[ pW)3 {QU3 \z m,-EHFZq+ů//O\ߋm6CЮfC^6׽jE_dHiIg7e)Iv{+ԵlYVмyhOX^JrZ*mSy݌DUEut Ω%mZa %+NI> մaoٲLw4cߥuG!~ozF_֝dnX%G,;qgƝx]lfݷF?kI(g2tʵ\8uqF{٤3kH:T_:-oi kC%ZO+ܚVX6 i -mAKG>$n9?:Rܛ(\•C%mWLuu3|,7o,g#+7]VZz׫z-~WZ]x^kq~Ut8W BիtQ+k%r52)_k|Latv6:-<ƏUyY>ǙD5ny bYU8i!;Vo c%N="ڜd6\#̠Vy*pշ6ظnQJ-6-X+`mkk(w,oS+v3hw 5rߦ 2|G4'x}Eo~MmPslmms-1.1.3/data/presets/ZynAddSubFX/Collection/0085-Far Reed.xiz000066400000000000000000000072051247673406200237730ustar00rootroot00000000000000]r}W(zRDZ{K]UlIMDB$m}$`E9dK鞾7?}>-8M{?E$OwoήN>_L󿿝y(5?RӽKt$N6щUT||fpj_0ٻW}եo.4%98nf+'߃y<(Ϫf&s8EowЬnk^h< aak<컦v\_]\N)6ݒ-JҌ僴ƞ= .fah *2M^k1 \&WٷF0p1]`ƕ:| ˣYp*e8܋GR읫n^ߜ79egapQyX_=?W۠@);>bmp'}1O= l.[S2fxƤb {Fgr7oL&0I%FPA|jWNԨzK5]jBI:g̵;FPcq$:A1:)wIe\sTQ2m{L=ɣ9EʼnQ2n Ɖ81B=3B3C0#0Jry(č0f$&f*)Aate0JFwaWr30ļRt\b1 w©̆5\ihr֘vhCnF| _%(R%ugg9PzݛE(|M$,ہUFkצCU!*Hx@TOe86 9k6@Qɹ3tQ-*pbCF&!jȪQ˂MxPz%r:G%|Sw3i0mKm* *8P7)#$HAl $W|TIhAzq* 4;-ҝȉ5[eV@@Q)A'H:9z@rlm0އ9XpՑo>g"h 0):E-9V:_>=(*nڂqTIEtrtvw.gqj>ek 1G;T&7 dO|f>gRjh3;ҊHڦEA& isQP HGe.k!Ek?'~I8T ["AgOC98xYMb"%:KF!{kj'|8-&P#"6QvCvS36'o8Ss7\cnE':C2[mff?J"^Ҿ:iiSK4VojQ R^=\m.x5*AAԦ`o f:Mٶe麓䩣Gho2 &kQTlr/$WzBr罐\9/$WV低 W]svzu'sAVXjLζz+ n7Vnꭰ[zvSG'unjSWe1ǪD#5*}N4~B`|~>>+|J: d8j$m!I:=%zSmBgU5zbQu7z/̗F}@+^ڤ]{mR-?4#??qtWXl>1Z^ˇ_=^*~z@TTk ;Pzl cK^9WD Ȃ6_5@H_/toh+:SaSiΊllmms-1.1.3/data/presets/ZynAddSubFX/Collection/0086-Clarinet.xiz000066400000000000000000000071241247673406200241650ustar00rootroot00000000000000]]WH}ϯ%cI23Y0,f_t-@[X2 ~KX-{m I4jUߺ]wM[" [gDxFww>^ͻ^L&W˛/{;2NI>y >x'cu>NЏZr#󟌎/OGsQ2 & OxՖ?zxy-hf$4)frV3U~ S/LY̓FIX΂(%bc"B^p{g6=B& 1omO&+=8(7mdtu}l8D#-@5m·é/Qp:mOn?.N[Zn+^~,lx9(&} 4 O/&bf;(D<3SUhH6&Y&F cODNrx1&"~Rb@iBRrmhsS9&%v1R۫́'/h#lݸ凧/_m \zd3IȎ/Ro~o mUмg6鲑]Fg//qL} UDj9T:6+Pҙ =$z*43N8\Iu8$w&7R$WK`d$qG^D'JBlsvi+a슬g/dsʺ@67Xl:edٜ?{`Lv=>ekYbCcvvUd]*~|sa]0.^ܣ1Wل$4 c*2a LYƅTd.Ӷ(Ū0u(ٟ e&)A}Ra.@># L s L9vaala*M`2B.0ƞsq}2:#Had0ԽHXt`wrȜ;$l 9\gN8֕nCeB'3 P Smܱ:,i|GP"-;RmosX. c4(EV0 doRBw>wcF]nTaaLX˾lQYXy{q#}aG?6@Xq=cSQHɞ|uc̖wè0Bg FH Bm!8wM *0 @a[,Ω=:%(J%4I4sԵ+ PTI +ҳB-xsƢY٩tU,g3%"<̂8{Ġth}ghq` J[ [@NL 㠚ջP."M,KܿdQ m\5Ga@o ySKK2~ ԾQ Al7SNE5a-l\CҰ@FR]. k1!2 p+AzoE_)mQ9 @E5w (Z 4ƥQKF>4QJEQ[V,pQ@`l(ƥeqO'ͻY54inlـM-dݫޚxd{6Z鬝*i-nWo~b6k*_Z^1is*ڮ;FZaeYDzyqYbpXioΊlك֚*O̟ refbԕ[YR\:\.VU@xɽ_igN3wWQ(gʎ*̧쏪kj`ύ"XR"4d}}hS_YF#i^<6}^ Mۦ:T{")E.ğDi gfiVjt q̗hRg磓ì))TMJ2{6ss[X|T&Wjwgc@SX\쵮|s2ӎFQSgivɸj( JvҮUFu}[Ϋ?q+KK{nse0R5JQnv۲9hXFYNy?˪M:V-$zA^>A]dZe嬆esD3!WKS TuŮ ;ƨ⇟.~0٢F8?*M?+Z6Bqlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0087-Bassoon.xiz000066400000000000000000000071171247673406200240330ustar00rootroot00000000000000]]SH}ϯ%cL1`fnE%lؒǒI{RK>ƐIi2ou}ݯfCH8zi8o;~xGן/>F?o'~?LS~FOB2>oS!օ'˳_x7q74ٟͧal|ً,kSBuD(gYAuH?9ptLth;ÆƱH6U{#5hl޽\S4Q&h>ٿ suPy^,uham.?\9:_94ύPc8 ;\#@kz<ۜ=n[hTu}ϤQs ɷtЊ=.^FT_9z)ZK2wZxcc6.p >ڮv񢹚_^eڈ we\&Ӟ*>VoD|=6'-ioZYj25s|t0:lWh53)5$$S0Y*H,>_ĩ䀼e4I'_j# #?U 8?]W2]J@"ً&ٜf. *έvA~@k\Ta]zGc7c IhT9@v + a*ba*Kj2@Xi[bU:O2 ƾόHD)Va0 l 9R00]0&?!PqcOA8> $]}2@aE$a E,a컋|0ڻ[9adNW[Qq3HTyLa\2! } E[ (~X6X̴Gwtوʨ9,{aQTv1"]{gda) F]nTaaLX˾lQYXy{q#}aG?6@Xq=cSQHɞ|ua̖wè0Bg FH Bm!8wM *0 @a[,Ω=:%(J%4I4sԵ+ PTI +ҳB-xsƢY٩tIb#q$"<̂8{Ġth}ghq` J lN:pbJp)Q;(Ҥqxb?KfE&Us=E_9JriԠ K,٘a@o ySKK2~ ԾQ Al7SNE5a-l\CҰ@FQq\TAbZCI]LUe}@F稂@iU֐F)h_*&Fux.R\Fi6*!8Gn%[}EI4FWŷ?7gi䧹M;f6׷ԋqXvzkv13:ij5Jv4 7_4]yKBdϯON+SvmߑNV7 +0=-$ͫTcշ˥VJ{åtVL_Ef\uTybLN&#/S.0 _.jxlfՑrH¯KJ=sB}rF9+ WvTa>UeT]S{n Ɨ2̥E'ӟ)uDʺ004HŰy5( lZor65:ػ I)bv'< %JN7[7KsT[cDp8<;f=qտNZl"dV3j2Wk;[Z'fu /v$5Mj=KKMgWäEqOT?[vb7 &Zt^\YzXt+AMGI 4ڍ0ji¢2e7\6 dd|ӭœ^EI^> |wxX LP &7S<(,sܤO1X՟fDJ,GAOlO&7`^p'E,H*2 EJ7ۻ$w_Q0C@D l#17Uz0yYpј+X tf'ۏUd*pgǂdV>d&Ž-%D6X*MhK"x"`qLp4Aڷ?п1!p9$X&O#Vm$WqB B UtF.H9t 8 ヿ#$bKSX>+x}Tczfz˛"F Ex;B:(!˙ 4$m)HOVFTHXAbYԺUs \f%/?@O%@: (f u0d2B}O!;gg4s>9&P=[85p v0Y>܇9{PG;*V1*8$EOiƑ3vN-v!# j'$]_VM8bvH&Õ-%$,iK 4hnZ;tzAvQP)4frAɥ]\ú,tVSG(H'ƟM/)g]jzr:ًٵz]Ҷ^]ҶGf$QEa#pKr.eRʶa z:7˃%>-i*1`Bywmkmǔ2|d2ly3*;O殗.L~Kˢ]&>DIAŲ$8Cqڈ C>᯽h8H?Ɉg{yZ6m j39ĈiE%xsgG0vf M|kc&_C[Hr}iZEs߃'Ecg+͓JRޔЊժ7ũ/3\||ѻ\'N.!^2@Im+INPRkESY%im Yk!}?/Zn`]#QLe@V|5eN4_ˀ'؜uwUQ (<2ϫ*Î{%E!mq,gw~4㧩Qoy=muo2\1A˥}jCWYUW`+Е[mJ6t%WJ8U円k5/֌ζ[ F!&Alvo@iw} :_q>=ao d%@l`lϯ v[;tO /+Ͱ{:8W2򏅙bf6_iT=Yi6n.rGeVͺ~lcU-ݤ]dhf;EތpGb]vZ.\j]vZn[*\쯩XתpI挕J4 a2=lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0089-Daooww.xiz000066400000000000000000000042031247673406200236620ustar00rootroot00000000000000\Qs6~_AyO 0s 4ȵb;mƖ%yeɤyY+Om׹' sLײNjUr/]XxpבE qsG hU<'YYx@}Vf@lTj^ptۙkI=Czk',xV+5v=run{hY - YؖMQ'Ȓ*O#j@_DtL +( oec@:yjYߞ\dbvU0o{I{0 HK]s-)-z=WcO_n**U4`^.B'KIB&X/@< 6'0 qeYbULMmŶ.'!zSxe}KH]ߦq:Ky,UAQ!?:񆘑vY7(c#KcU dβ7 A ٜs{wӟw3ɝC&zzRK8lECq5oיi,l f/QB?>uXե"fMSx ^@39FxKr&.s;Xi x\$p"+89c؜NA4|@wV"V\zW߳Hł#2(Lz>#)IנHFu<eٶ/FGW=uCgȑݱv#xpx$iOMfpQ\6pi9 ͤ,=PF7YE#M4p$ɿy«M򏮗SI*䜢rB;"@ˣњ&G͟9LMx[q@mz:뎌̏8І@~w%4)oD Ż}<bȯI:1ɯ2m 8߭io9U_m=uͻ/t?L@~i\ցZ~ۢ ^=p߰Ǻ}8G>&m9O799ƍשNu]k[^aX=l]jI |oesf7NihzMҎKaPs&!Yt)3] L|9ӭ2TtLñ[Z;x|40!7H SCN…MAAw5 Oma$4իRXa|429r^1>A!kćjaqcxz&O{Z=7pZ=%J/+jy(kZ=^c4zM~+VP^@t#!kJECP\ fX؋n,U\~w'+# iw_ui:G;O/'? ~fGLuSʽwVT i- ڰAlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0090-Yaooww.xiz000066400000000000000000000042171247673406200237040ustar00rootroot00000000000000[ms8_=ya/%\9B{}(nI¿5,+In:]K>]o?<{~k:o wOo9;^mln/z4[0w6?ȞJt,c1qzӠqM7&/&ӫl4ÿ4"alt56Hd3^DxF [!LWpzYV|'(sKqfI'O*&k?hbAG-ƠD|\=+( ?-k@]%r\+ ;K\i1Df|b4Z^ X(ܬ n?/'CcH\f ?ܓu+b6ě8~ OI:#y$bKFc:l\C-2 d.ԹsN<̘jϷ}wQe |xa⸅s;h4k @jhK?yӝ"nde[Rt@*WI ́8)ZV\L|Ͼ.K6DG)4)H:G]Ax[SO_U2&@K}6{(lF&y!kW%%a |8umTp`"Oqp]>A+)# {rI󴈄td<b+alXu/ASTa@ܻ:=&$]_ jB<su%eݮid[x{1Óѥv n!shYBEjr0=Bݠ. ̵Tei64eά'"}^̾뒶꒶>{F=ĺ?>b,B i!;BD(lY`qS*^X9RRT?.H@K[ԌҞWbo7^s9w1|ta2XI:$BO(%YơA,`P L&Yz#!;>Aǵrdi՚ɹ%,!Z7SRQJr.L\mܳyblnZ6N tTZ|0z Ź/309q7w  R.=8V4xVSL{pFd4i1:Γj"Sg騿5 &;:7ZgdVڼE /vM8C6*_V}­d~<穟Qo=rsԣgMݨɂzSMF ӕpVt% V3] LWn5ӕp]t%W3}Z%ia]Ft||t^1!WHSyO )óYژʄ }R1RJ73? BS=>ehVrxsBezKyĨ'KDUO\nQQQАAQ|`c;*ĴRQR$Z&8+dk%U9@߭}QV:5]4$cAߦ'{^ϦgI,ݎu/;q,d= ځnX6J59w朴־TjmYXhg; ;;mf8vƱcիpҮXDìb]vz[׫!i=z5X׫P7jW_i6l2zG 9=<bBnwrrȤ傶w\8*%كLH͋mDv4$~K-z1NUCPƠD~^Aџ)V7[5-wn&e `ǯ2E/fc됾|{m}VZ'a*&[u>JZ?ď؊+AqK~g ={u t0M?ane:7.5t_&0xr+ CerrcyN/qo8cIԗІJ~.}p=|/nqlh]Ʃ Tr|yI_g_'"B (BGe%<pqg>vI1@~`/Cz$Ԑ7;=nfxd dªgٗV$t|74Cw >OlTDv8|D&G%|J ѬpE] u"fH|  瀣pj1qpw<8NF9&`.]~GSwzfSL6,NqXg6n+.>s{|h8aDD3]t$0s9+f:t QA2EtO +Lu9E9jf@zf@:$2@Č5$HU!G6JOAP9ޅt$[ ;ZX"ġ9x\gΖ ׇdAZNAMDb <D3a R"d$9d_&,iIsRbTe&ᤂS[txQt=?h\Ehת+ :uC! 1ԅݵmzVD] mLcfX\ChcƤ]iChg &}*&*:uC;uAEVF~um-VƜYm̫t =lթx@u%GՁtI8? ӽ.5atoҬ5 )?X )ɤsfBvAҤ EQȪ^{Pd5./<#0HHN r$GrVHNэP. dhNHNuI8j}Iv Vp-K&զ|-x^XdRQi˅I(TTHTX^WpZfOuh||wSj %WRGhϋ{E3)'s Uub~h+"s"wJsqU?:M*t3HvKͽ,1aey>4o.hSS?Q;M,{Lh֖c\4m-Y*_$q%BI*f6uF}s](/.I ۠+k<4C YCWPZO%%mH ͏{#˨HJz]:>WA0[Chf/R+Rf U$zt;. k'QV.ωjTƨt .BI;%EIF;hNh7{Z0itx' ^-+5Cd;HL8B=zkDbˆ`q\g{`$:dz>[(|6H^-$&&?Rھ_֋r[3_!#o \מ"mh0s'Ƥj4(ߡ]VVi^ADsC1oBH.[hnU J}~S+Uً,EJ+ًkW ػ~{`%'ҏBPOE4%&4Y3эlFLt#m&]7曉.^NDD/\M6P: oPoNA[IҏjrLWݦdDBQ*{*q*yճLn7pcL ^Ԩrn? .;U(gW'+n%b+o|ҋ x^ ,^SzMel4E8{MZg+%=M>RiOlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0092-Eeoow.xiz000066400000000000000000000054461247673406200235040ustar00rootroot00000000000000\sH_񞀰1vU-ƻ˔[!B35XT)ztok m}2p\caqӧ^-܏Z̷7s؆ʏrvALONA6~NOhi~qmuoo6Onb<_;dA|{?Ώ6Ld{[xQ:gûb42Nk 3VyI%̍:b2׏p~|`X`_JsX\f3g}I^, Iꐣk-*RʫYloG$Zm+Tn SJi1dpLM9U4wmW=J -rV-K2j0R73dS_?3sdCx>W~ Liw-L3v^KI0\ 6$‘1c Up9&1X"I$j쌐]9ܳ-TcVktJf6a4RUZ@ճ)a\d@xa]"{\vD_I=LUĆ.t4V1a*5~V,`R0c~߲.}96@LY֝ $rԺХ1hDes**OA(0<+p\I : k+᧟0gbb`wm9FS, x cK~K(CH b>O݊bdT3rQi8|l.PyRާz SMUqzЬĬ} 63bSc SF1QSP{E9iS^Z=c{IMkb,wESv X(mL ԙw ύeLe H66+MGSZL9`oLJ7MIiR l=J ؘI\.,55+}Y)нo$i icILBh9ԹR+MJ!4 hjV /͡F[=cKY{8όEW {`3c)gƂ- -0عR3&a /D~D H{,Bxd"a9RmBe? X͒ hsY6W#0\),t{BtW{#: =07Q(}j ZYZ1$Aj4m,uhwdL`ulDFEe^!dO +5Jm6emȓ[Śۆs]CIyǺ<< S{'yO)F|Fti#0ɂΡP|Jdf}O kW ڎ=AH4]u-vFypo;nS{?ZOc}+h?ȭtO )FpBGw?h:e 2$m{̲K\&Yf$.hoy @t~J:|B'r>XmuXN܏`Vsoku-`gX #4yi^ܓ { >1}ȊĴ=]/44"l>g)s} 2fGc@-=5oY2ߨvp4MoYy0Hb `2\s>6_faUsm>ԾԚ5ǭYgnVcY~Ebq "02?}!isISȂ(" lq&Mm4'~Se6}noS8S8W]@il;#w@kq1 #;–Wql-9~~C(vy2H(con48dbܰ #621f9o L-5:[@/\|SYE$4 :b.sgh .ԉKmYȣW ?$ nw`X΃ސcʃ&xkϧR>HYqufYz b2m ".Od2}b$Ԏv%E?Oğ[0OG0'ove/4{&J/x6~@]b𼭹C$:GSL+JN&3FY4w I*Rwl:ɁX}-DD(ד,b0mC);IYj-Ax/%=U^3C 1|k䁓p$22qzixq@I;[x v:YܑfꎘvqsUbzD8ʃJ-F5]YEٸ ANyL(oz %{i' J%OyQVLE׌(bYOwhw_M?TlXқXmBeU<Ǧ޻DB=t34c6eٮB%ZAw]ڄ?CGCzX%'yx<HM]ǂ-AA-{*d@m;BFVEA4,ibkLv@vQ"2sIlF/[Wa[P=MWmD3}Ȩ dUބyR0ؓ0rP7(>m-A-9qWX*xelr~0!\UvF6&s&C 6MxsG- 3U&ZyǺv<^_#wՎzmRTj=‚jqTLTXO,Pf4P̀?^+` L -y |2iP܈by7oF]A@bwA _+_, WoO ƴ26oc ۬r` ~Q*kO:}&+ wS=_8:xol^R/oPc-_;&Ծ͞j)\ 7>95?}Y˚=y]CR+oNw ,K&ZKrL]$=JTܺqH%|Vvu] պj]wS{5.L`kp/bJj{I92(<\_.g 09DI5Mt+8Ua 0g;y.>)/$j:blxa+:mlDZh׍lj];:lc8ɨF7c6TщJw~ӌ"cLqi=.>$`e '_{U(Wu.|,бI||ZX5s=ӱzٺcy~z}ԩxᷫ]dpϑA} Mт~u\`ZOZL;ly'v+4Hڤv펮: Gt0_KDZj6]]-5Q+\_'aoxHYh}>y{F2+ yMm]D,{f6hfB-H<v!dGB͒z8JNd Ix4HM.cA 9A۲SU,(&{L uDY=iX~*xggk!gZ˔y)fT*mtN9Ha4? TP-$% %5BQij h RČR1B͙"zLKR5҇4$iIhqzM[Y^wߎD iQ8&UKEGci#5,,+HNω !b-sTm^N9.pQD:"ʖ*-MtnT*((/fF]'(CK)+vD3S\NB]S68.褒ilCvum|l.#iա6災!}#":4r =R>I~X>aw0gN}RHyU'':F!G1̫pYUXUZEElLbZuvfZG.Pm\_ҪiUU*yGjMs'JUZ͛9Q*ڞYUՑRtSGznW'JO?QO#4ZˉR(+DC_Rw es7v|$zݒ'y3Ye"z/i|wɑɺ9sR Xn9֥p]u)̗cK;re,kxS^W4H-R{E`$=]h__/Al!tYB%,B6%Hࣛy4B#(N_΀bVtWُCI,_Qg;:dTbb#1oVl5J~Od\CJ N`hvG~sM6'Ph߁U[?v) 3FI%yn^,, p vlӜݱVc'=+x7wj;ˀ?r :tHHD K ۉqpxiI 9,vwP8w;y_n=flQ~Jt(qD"yV}׽ZDcs4tYHx![` a+Z뫀}/lf+c@`Kq@bk偖<^}K\m=(l!#I묇9( =|w=Po{y(dzqVLV1y`wgg͘=04l5@-:yܑ!H;R8L6dO~P@#Ѿ<t#@˓RU(o𓚡uvnBSZw| Z4|YJUS!1^xU/sWӋEɖgK)y 1|0Wz%[I:lr5_(B3't's5p4?%o) P{8>߹"Y^ Hjr](Pr]V^ԳuOُ \ԔV%-_]cP+$'\&ҏ q g-<{j_޴_ӧr1FEu/5[*,4ضS#d䍈'W4.-'z"*k2eoK.Y鎑jMY7a#p\eRh"(g^ʎ:@{Yi ҈A6B~CdTlgJ ݥ.Ln!EQO89ȢX$:)Vn6\[3OiZo mk37wƸۢY[.og59U=aSZCjי[k?Ϭى7rwOhjB4Z.nț[]rj$@xm54qfI?X,u⡏wp Vdwj+J`Y ީ}הV:/R<Jॕ@I^65@Rm*\ 5+*lΦhJGRgM%2yxZU)TwM @Ah*Jw'TpJ;sbMzM )h ^}K`?Gvg!Z^-0~Ŗ@B!0; ?{ xN ?Ǫ;&7*Ue煪T/T] R Tn=յp]Ou-S=NTN5\R(B`[oiaHZGI^W<܌yPMv tp*6Ya*|X/?[Wy"Չoy>79{d4p3 ֯qa``4 gP 6$cTrXPU`69CX]^%mz 2GƫUx\ܽ1GOv`W@wxq}+-/MsV-ci/jqFlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0096-Power Guitar 1.xiz000066400000000000000000000041501247673406200250520ustar00rootroot00000000000000\Ys6~ϯ`'GQ-)Qk &! E<w!@c)  o>||XƆ{-A<˷u>^Kor:lmϓG61V;Zo~B[_ވL8WG6&V7)N٨N]krٚv{֋W( a72@ܖyhڝuGE6O1Ak֎ G$4$~wbd8LċEY.%^7%a VQK=To߱_/VU5Q`6?`(L ƧĉAvJRMM޺q]o/C}izc|1 ?4\TQGBgClck޼_#C 1$3_v֊r6josV _2]擲l4\Gc_Q_/x7+ZQHq.$Ćюm "!6DStž 5RŹUv{=4:^|VV1xpq+ B挝y9ũo?I y#H]+&gZmǛ]Τ 6f0ߞ_\+16qW0y`%ZIsw#)+׉mgO I&M\\\꣄GA^u-XD*gײ*&qqw?7/ |F(}JW{Ic .3eܡKR DѩNfuP7MjdC2GcM5EE]KR`x-QY(HM5j<Ɣk {?HRW\(UߑԽ6{RFq;Xdlʅ2-?{{rV{jIT.,9/ %dNҶ3fTY9m֟OU)y%| ASU+Iq!|{ka,yYoԒhd;1{+ ĕRе+I LF/ezx#4y{Z;=:i Ǖ7+ 9")e#Q>>6;QvCreʪʔU37E+,AD| eD{LƩ~ Rt-?Ӽu-']w뉮DzS=/'^hȘ1_0 H#|~ɶŅ7‡`п^л]G~8%鶡R=ꥡTk'\c0MK< j2wӌwnuh2W D3?-]eNwT:-im-yɽgѣr8,wf*FK1=)UClmms-1.1.3/data/presets/ZynAddSubFX/Collection/0097-Power Guitar 2.xiz000066400000000000000000000041621247673406200250570ustar00rootroot00000000000000\Ks6WʴcٞQ-)Qk=*i &!D$X )ѶZg$v?9zi4$Ͻn4 Z׍YO˸kq۶=zۘb-)w_6ǍL8 yC #ⵃ]cedОGCyK+r;ƥ Ć20@ܔymOhܞYw2%V A$K 99B9nHhE\-܄|N,aw!@( (XE!, OПmz[{EzMUUt6t&% 3Hf}'1r(}3&&o,GϞdsq|g|6N /0VLaCgMlcx+M)1~#7!vdJLҵl~ٜ"&q/mp.IY6Ϻñ'sM\z,F(^^8UD5!xod)H <(Fb!CTqnpNM gE@L>LG?[B=L%Ǻ]7#i)&KrBBHtRL1atųn).F%T\DڙLtc}թ09 Z{EB4˹,Mpg9k4f/SW,w&(\` P'WI˻ēwS-8  AE) }@4mܥY\OP2n1cfd>Ke.qLNr6) (YGQJSpT{4͓dO`4߲S}Lp pgf*mH4qSJp֌QY8q5Hh iK}7 Z*, Rț RˢI) t#mUӢuPԝ: +jC[Wy;q<7g.T#Y Vtw=Jx)q۾CS^i]4Jf]DWj+u5ѕ|*TMD/:3<`@H! ދm s^{;cqL$5uC孺w[CMI eҩ{r۳K\/QI—;,֡K]I×>n/| w:yQv&(^]o K~y&uɭo[zCTZGsAClmms-1.1.3/data/presets/ZynAddSubFX/Collection/0098-Wet Brass.xiz000066400000000000000000000042211247673406200242140ustar00rootroot00000000000000\s8_LMHr@z{[`s$l\;?%W+݇墶aoEx{<טc<\'Gg߼jx9r׫u5^O>h@]QhIEYOl?iDsylct9& ̀nlzQI;;{ۛFcx^͡KvQ_G-nJOV#zɜ`aa39Z))eGk@3,,sqm y# `<H4X j=4Yh3 'ךylMsYsڂlKg^ + {n}.͹t-18Q"#tIһE{!#sa.,s˵ϙh9&f,@b/JrY!6R'9L`4;ic=r4 Wymh$SL~GQ)h: Daۻ*372A.P! a ״-}cIWkǜ"syCVBSjTe8F[m:t]dQBýB8 s6dY $p7 M5-=PFNVH'6*3$TlIJGFoڧKE'˃q;q$-g} Xu,h 9x;\T*L2 )uRl%pW3F+jd(˨RQkFNdnʑJvU$Irl%ˍz; 4L*/yaWgPY;! 4QRh?fCȈ厈|cO=RcOQk&2mOהZ.<GnQ%-0f,$۱)"!, `(&g!tYa =:p|ٿQ6/C#3h'c6LWxTlH*-tܓ#'Q_8ZAΏƝbdYMUʼy+N7su$aJ)|49rUqP0fh`uޫWh(2B4ʠw yW+3![ߙA_ܞNrQ|1jU`DA*Ŵ$ 9?1X VNwGAĿd#j'jѳtɹs=yF7 ~1S,_eKdpH !J%m[;y-LPKv?J 7͖fDV f3\cò*JNkZiC hګe_ywu.Ic 5 'N* G+T88R/*_` Tg T8@Q JS+3;N`qZNK+M2*Pʎ*T0nh.V0:Q~p.F O*4_{_OQn=3]wk惞59 l'{@V>Hj=o󆷟7=ZO=^QYrw9_sD ȺSH),Ǻc]ʯ˱.X r_5l_>ѱr~4^0" I1@_SKz׽ Å !WnkF!*wT1u+ ]F.K7oknqqьKi1 ;3 βK%Ρwڋ(*o*w +urWDlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0099-Wet Brass 2.xiz000066400000000000000000000043741247673406200243500ustar00rootroot00000000000000\s8_rO9!_3M:4!S]E"q 6g ˖䕍MȵYVkyi6-8{Vo?טky>W{'wor9^-ڳiHތ~z.8.ҮslD5t>r> ,ZX!]:ԭŴWMgk ΨKn;Mwɜ5Y}F̱VC x<_8!d|A/f 7 V "l2a2G40e~F'b dw@m;X#Yz~U?n,r{A&V?Oksw5f\A= ]"%F||oߴ՜%McxSߘu7MG\z?evW gbpΎUE0ر/lL)xJl-)`MBOa}H;d?\Ue3D`2ї|UD=uj#DdSr*q1[#-2!||M:ʎF"",$#?"U =R湎E|eA@|o1W7'#^n؜'>cf%{wXh#&X!u܄-~MIϷM|6eFr &+A;S2#]:T=@20qi N<42h,^'h AH=n2aNm!? &>xD H)| c,NX@~FMi2=T a熐,Ć?@_?OYi…D)ˣ~H3]:uc+.V\2S@6G|FP-a~hϊ݆ QèfH8z=u7!DIRJ9$ܲRO #r;ҹiJD?E RaȤw>ސ^Sj5ȋs= ,Gb=dlf#]&fQ0qTH&j fO[`tѻ u L (0kd*LP`[LYF>hV[nlG;@HHM)֫S+]2eP2F1ͼ "4̓6qPX.PىR9zT.W)7 &T+uҢ7u^L2]O'jp`:1a9tug2GeE&&:.WiǸ/ [8^yh $̈CZ fD7|w# el26BaPNcQFy NW28+sR8Ǚ9 5 T;5\l`@X  pI|/6T0@}eCy5  T3*^6G0@iS m@xݽei N:P@Y`#3.ʼ'T]XUn{p{vQ즍/tT $^v?_s]{- :=G=?8H3Z Evt4a[[7yÏ(&hۜ"B[.r%"fK֥쳜Kn9֥R6_Iw*X-&{9/r~Al'/ʃUb̻CFXD!]A ^aRJQ ׁ :bN6+ZiHjIK)8H%F ]VRa:ź`*bZŶܷ^ $9ߤ:L{Sd?~D̏lNk|/p>M%6?n Pܚ)U*?6WvΣ3d;Z|" P`D%Y-4<>nfhHW%Њ~~8C$:?8F'%7#McɜǗ7V?ʾ-; p8v҅'W x<0^= P`GGgz/qB*2Q/EͩDԧ$f&Pَ*}/?AoD2r\[ Vo_90q15~+X7J=()o>Ƛ0[.<]6z@Q3g\^Vzx\t"kN1') y$@lTlG5ߌx?~#C.Mx yH:RI$wQHw!=CrlCE*@C}2tpPkuO8DC/څkCfq8qD(>qq Sn:@U-@ SsH#Cٖ4P=0Ӧ$GCgh?N}%U7<0AoAK'r"_jARy%j$JH2wߝ) .5!v:MNVazq:}B(xK"q`[ K$N=0Ƥ,Ųf9x^ %n;rkXTQnP2B OoO/.tyY+}TXob_N, 5֑eH;JCy{];@[6saeF/ԍW,gH1CbXwC CnP+p((3&9+PJєRiޤNs}X cSj* ?Spo =bagE18%#)1Ae|šGEeqvtrqnBvDB,\𨱹[=uKlʡR&+[IPZi,x;5ZfP#@~`[\xe!̼л|Bd&zD4sT2b;`ŒQ@;,nfЁwx=y6%_o=3gC~1z!O X/b}_3^G~G(ojK~d]:ɗ.D~O}r`} %I"!)R cB@,l{jNE.Ne{Û=-o*rbqBͱs )JzG Fn6% {Ue/~w/Y,)tp 'TC% !jgI)˒.MfN,@=KXK§#[p "i޺.m}gQC9\KS]Cm؇K1RSH!)}^/ȇ."d)Nmux^#CanWUs=DlW=zD˦^"g%lCMev[TmH+Vo"c\5M'PZGhmkZ1SηE#tޚ4hUCc !7֭OmG:mc{pVRK#?FQ)_OG}L7Ӭw|i=~t7{_i2yC;4۶Z$]9ĞZv&%؃cp!0 liMY4Zݩ Iwɔ`d;o >|$|ٹyWf( EEIۣobbev oA`}"B/GնhdJ٣aؾ}3G&ķ(f۬.4~Ho18\) >|^ylП 7IZD<@~f&MI R἗-a4 iVWvQi@pڝbĈQEE/5 u8Y@Oy8{:Ȅ#fpStF!%!\|2=t'Ѱ{.YƮyrJ/d"k8#2qoL2!nX[C>e`¤Rw DhƼԻWSp^|f>}/RViMߟݳA .?o?f0@ƭG,!*ΕQQ@A҈2}jcLQ(PIVQ iz/1K[C*?٫6Sdxc49zg?Wc4-U,Wne%1U\Kdxi?(ZA0\%h#uEroU \kza|Eo5*;IKo+X=)[#p`,_52-vВl7-vВh7-ivВd7-)vWxTv G4x"d|ܻY:i}yv8V*Bƕ1ied!CPVX +DwwDjcU.2VRVx)$x:7W?7%g7a`˜< 7fb~On>}K $NWmaf~#*{lX Ay>.YԴ; $hrqRToFzQ𶿓ڑk cvU?+10W\lIu~Hbj4qqekZ<(OO7?j S"$斫7O1ʬ6' FCDry $ʞ<*=И8_Ɠ&.;rY$lTM*RЃ%q4~$8LS~, A0~I/[1@22( i_"[x".YL[Ok Ti,i4pIp jQS]mZݽ&ڎ=x5|}O߯ߝW Ɖ?_̜c&5ȿv|d@t/2o ϐ>])\ce6F(Ki'$u1>B+8N8#fY,rv572ĝs$i5Jj,~W4zKSHNL]ӭ e&u$7ۺElHb@2kJ=p7 }Zqmޞ6W/bC2h2z`gޱɌSǃUݨMEV,$"^n5VoEK̽dh+Oˊ`. PS;]VԤG+IrHhS"AWTLjt}1>tÄQ%0bh$#/wrę?]ѩn{,4x6)wtU+./7ǡ{eBA@2LuJolJn@;܀vwڽ hmH*N;/iwЊ 2T:*@KX;vbrۉv9f;]C!V4)y +(xb0c 9i]aN v!cs+HXy \vxar Zr2l r2[϶ Nm vp"uU3g0na 9bzfyEF\{%I#.B2@m0Vdg"q #?en"ϛz5Ola5j{a™h'hC`F[C n7{HMέ*և'"kgrXY=<9I*&z kى9f!3PhrB anagW9Hxb0v*.Ɉ08bwMffng^N:uk=VհRT5u - P*CۧQS*K_\Wd^un3n)Xa翴gSy;A,%w\RyC4e&Br?ɳ6LҬ.4 灨74bkL[jХf>k*K"?*e> y kY}ib>I$ҷ~Y,銾LvQ&op3ͪ\DM.o_jN/HS2X%."Q M2Nd~^7&mUgSMKGqEVi7[XNnCRc}[-)痵+t"hzqbzO>E,vA'qtHp-)tƅjJdk\D&NMd ^ӡ'4i4ʏ 2Vs4rC~a3W}`^B%ՖaNə 

Ҍ-"FBDj iܼߞ*G{[l^oO.Wwu]6ony=\m&m"<6/on=yc}byW}[-qPnۻ՛nOq\/o~}[&lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0103-Pan Pipe.xiz000066400000000000000000000103261247673406200240040ustar00rootroot00000000000000][w6~ϯ=IirNo/RlO) .W~y2z f0o{[A4GaMwo_}˓_[=Eǣ#?'U{<{s{0J^maNRHҲ|o]1+1Igo//7vp}#_l+'MQɧd. Ղ&dMFdQBOs!`ԄTQR 7 Ɓ?/1PaҔd5a.coT wCz'4o*;+7NtRf2 f[d5#=K>C&W[5,8L;vZt Q`@G؇Cha%,1?]apqMo"ĝsd0g4^eSOHujʞn\n(kFWFnЅ̊Rc`xEl8Xlfņ-Rqˏmޞ1W/bC2ب3og±ɌRTez(x$)flVdn|cuU{ޏbϘ+͹qy9=/wT䝩JWԤGe+I|HhEѤ"A=W#mJ FǼ8rfKRoG.Bm r ^Q c*.Bc-Jk*kgqX& {Lzh'^G]a]Rt-;1n˜"e 09la0N NvW%;s(FImlśag&yDYHb02ۇHuq& x„Xv;)1@aaZ].#$öiǑf}R9t̎hf8&LM`lu9HcXq!xk|Hˑ`#+=uES 5:nʬ#3<ԡ Wll;pDaOU;Lr?xu\$ؖk#.FKfߧXb٩TG.ܐ~rSAj8;kR39H͌1 ]c(CT20F:( &"Ģ,s 8BR}umm |ڰm(0b7D#u:V:(:@ig EQs oI{h3݊,U$HB7 -ȑ#9t#)'z%;tRH(PQk hY+nQ䀞s}JU;Dqcnꈲ<$Zò vuBTe"9 "7 g-QZ)#p@:cTP ;( 'Yc(\EM/i69:M r-GH񶑏*OUVD<S\Rph4E1yꢠ3\T\T+a"m'6mL7FG=(5 )FЂB -hkA񞣐FXcB ?:(|TUEEtaK3?I((Qt1Xj%g$OqZW.긋?_8?I/7,Ҭ.jl}U]?m&k"mi5Ri@uIG\QC^’ozJWAʤ [YtE_&(ɛLUfh.l@&o_ڜ^5EiϺJѐ&eV̪NYV28>TIƩϫٔMܔjӒ-MSg]V vhZ?./ij ͵Γ)"x4֠l U6VI_,nEX/V*̬`f XV*x oX*DWSr^Š{sBMdSB6 miZP=b,BGaD1 JumEr)]\m[\W$WNV-ϛ[޽RIԠ߰cjwv2dur.;Nn#++}*kS٩]q"zzʋk4h@kf+=7^:gydkphNͧ)cX9&xS3kg*1W":@NL5Sܨ,K#Br|Ї^{ԭ’_ko[WǾʦ13nSg<.;.N٢Dj6{j-b_|~*gnG7&UdVlprJe˻ߕRqe@n]̓hY5{^7"Vl? EqEW;tZЩK|M.TtEʦ&e*HDWstsY?Ti Ui4&0+@ŋ4[I : 7|w6 sIΔnK EB,ⱚFš˴ZoOVW{[_oO*WwuUon~=\'m"SPTb:J2'SJ3" r?E$S ,}#Q7^hF Z,[-ŚGޝ~8utJ˱&<2e~Q~v ^[+X'n%3 -P@?gl/4ŚɁܡ^A!s4PV l>U~WN*] bI: $p8Ne$|>(:F'TI/IyCciȢ@+i]eȧx":1uMO.7 Uܰo!YȬ)5 +bb,+6in>\ IbCg!ߑăSݨME*1]IEيMvic _?QVL8%si.ﶧ'ΜEޙ&}=\IWFG+G$M rdgףˋy4=UG1: 0&/wT d,̴:E<"/ yK (NX ,Q4(@M`=>FmFNysEM6aEXsЇw 8G6dh{G:` EX϶/mǗ}M` Pk(Ђ-ѩoV*‹.nOdcBs(:f}t0z(9}E`MpEZ.Elwa4^Fb)K#{f'~}L?'7i6]DT~[Uf*KQuYJ*xZ/@,afjFMUV,99ȼ:,d`EbqҝEO)V$[ԲqI%;P VMZ*Ԧe2nt UtrWKޫ%QՒ()F=J~Ar_BITb]D ¢:(CXp;e6dzƐ.r4k y * diK-̧tgH%}' ߜ4JWBȤ [YtE_&(7K8Rfhn~n@&۷/H4-b:gJdp2}, MƉ٤MlKHVs.+GUn;ilw͌o5 77iL}~H+-$K *UX*XH/Vl ˷^Be P4%*T\_ݛnE{CɦW["lmm4m‹E(z5PEX;QLRl[\DJ$G$q5E`U;wj5ꝝ1R09emr}OMt< 9Y6*;*׎iȕрkfsW.zrڹ-׎|IL}4ƛ R8cY-jW":@NͩoT6%co}7qaWڛ)?ձ.g̰[Y@NS:`Z?Ù[n"-EX<~5KjT8E~Q}k։WXsĻ ؞yr %d+sf,xؖQ>V=7p#Qrrm[&tUwr?tu'D;-UɥѭNnUwrtZέ,ݪ3T][Q3:usWdv959P 8)*?6w9ʿؒr~ٸ2@.2 ZYk7Sb$-{"贓V:͵ЉK| 2]F]D6:}'Ӊ{62?4;dB: a`CQ"]j&9.|!l+W2)9S郶WsnK "Z!]n%K~JL[e{BE[_oO.W{.W[/'\zR-Σ~yuz&JtŪ~W}Vq&۸_KmofW]뷧x2YޝzW:-@lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0105-Lite Guitar.xiz000066400000000000000000000035541247673406200245300ustar00rootroot00000000000000ZYs6~`'WQe:Ԗ\IN``Py8ֿB<pAJ12v}x`QYc7?/O;>r1οX?`8}&U}=@hG; .u,I3^ Oct>Yf0\[sk:ˤ|H|q -l:& fKk|-BYWi yD!tm&ͅwF|z{mO [;s~v1>nB}0w/ϡz͕adx4avsKǝ; .7,P~ jMimdbroBdQcUl~VH<&Pt T" Ud4 94 ';?M4 l]Ch$L`Na!I(z H 26Ay*4x7WEm?$jxگ*A![R|`^hɚLzJ{Iq,OWY2aUU^& X(LWrvWjrctf<ǂ ]Dž9M um~C40C"u"1PO%=7`ppnI-GT~ mi9_>  xLy67ղwn6+b8WO8Ϛãp{(&E3W ;+jأ<ڨNiA(9P▪%(rjyk`Ò4 G)d4P"{fU#A :R+\'v]@[U^S8B '֍ajRW:5Cfpqt|xWZj]ATW7E`maPM2rQ#^{A\4I"jh8exRٽ,~y/ZռK'H -aD-ET*Z:B_EK=wf#()NiSk6CMRBK%|VvfꠁUz()8 h`뛖DŽnacY[6bB bur=hQ_zEc mas OfѕrҔ}O|DH\}NN%yR s.Y< :fN\|౜"hݛHMV)>0/2ɰ(mCs->TM i%aDda3MR;LSD~Zjl/5׏2nfJ[zƒld"> *8^ E7*1YQ,X :t$:Ȣd)f)aV6 דhȿS7琙QWjƴ-$$JݢpnQ)*Rʤ-#/f"j}HSVZ4C]|T jR?QG@*- Ņ[0WNvz&3&;5]ښtF5ڴx }٨6\^ac*'yoOo[VQ2 |Z|wzPT÷[oGhZ*@U 3tHI< ?v*p}x؏~aһ]ŷor%E%t5J\_j5wDԟV1n׭ⳝVNtn'U̷}&ډh||4_1!anz6yŔ4_ 'iکs>CHСGw5tp/v R~|%60)_/lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0106-Trem Guitar.xiz000066400000000000000000000035601247673406200245400ustar00rootroot00000000000000ZYs6~`'WQe:Ԗ\IN``Py8ֿB<pAJ1)1Xb߮ӣ,08똿t ءgi_.&g g]Є»BݾO('n=ٓ4YcԘ }pi`r2G1 C:7x$ḰQ/A1 U>Yf0\[sk:˴|H|q -u [,-}E Dֈ{@:y8Bf\yj4ͧx!Qrtϩc7{_9fF6sH'beT sg |.FQ˜q]oʩa@7dŖ3=T xxAL$+R^߃_=rq& r/>h-WM?N{vv/ CǼK0 2CKRti CKGtiwCAþ ʔh.s}/l2VچK^u2ZV驤L)" l}ג3X0].c2 FV IZ_];kH"[h-|Ópt4e--t|W}*b|r(Sa KVRnfNRM|:cCtbQwo VE6J6m'}`$^Re='Y܇B[b& .ʂAKˆ(|L`g-W]s\ (fg,VO&J㥻Ѝ\dQbqCW IR~l:[gu:8k}xpvd˚GWX4(woB[͓'d&&5fHmʍ[9-?\Mg7x:'u; 6<\(`,Dre6`6-Fy"-'ږMQ:'$;dn@'6B?rw[.)q[2? tѳM&MƓbvw3,R%`pe| E4xOqOݧk5Tyo|T%,>LE@" Y nGn߅_=>qքd}YzD)H5)v0VIԱ"=Z̡*CDȁm-yDA0WwkXqu(L#Jdjt{(!?lK*vN_r hʡ?K T2ӰnW&us^l XR9n'#S\9hzƖc| mPY(kh h 6?x~E5U<^ʱGY..:z!\ƢIS{ ÓLUh yrhV{atPF*ZQEcUCNNݾO{JnF>R+b4Ԛ6ͧdT]hd/pT]/:h`J,8妾iI,{ 0l+f'O@\)VW/ہ5% jPo4XV/:1t>_+'MaGxW|*dPLQ'<)9,FGRuCTUҪ U[A VTi`dAiV) *`В0U m2Xø9MRLSvD~Zjlk.kdΔv9D  8XKE7*1Y~ X Zt$:Ȣ$).RBì9LJ͘V_ۙ;R;+;ghTz´5׬0iK ׌BD/iJ+fl|c<[*%f)ĨL Έ+';3&;%]A5鶍i[* XQK]ٻu>.~U 5o;VQ |R|S7 0{oßi|+U]#i$vz?C8 ߎ~<籟6aoy&߷YS|F0'_^TBWZ`\sB>@k`]׊zkn=ѵ⺞Z1_OYt'z3+ yńS9 O NpC=*!R>t(htms _\)/]rOV4ЎRW|yLjZ,j3fT1s1UgX1}u>(VnSotz.4jS¨ي26jU{Mkj^S5QSf~Rݽ xF'/t">fG~2[Q_Nۋˑo/8"9:9K[&DKy4ni~r3NOo7f7oNBOɦ'szao,0JrD)!K!`q\7t,R9yrߤ@ȁ/Ro }仱|ZKr:nK+mJlv.NLU;6ʳa':fv:`s}\=vP@W'GFR^+|`!Di L9a\jijd]s  ka%]06#.hnS1t#aGac׭HA2x|:L5)Lj}d$W)?udфVܖ{m=F-&}d0ۉQ#1ap F1@7Y6rCͺa%L @vTVbuߺf0&;a ⷲg&;c5jmfax;HQItJ en$)lg63HK2C6~TLct Fc]Kd&ןݱs+~Pbd1.&eDUi3+g+1U}0 D#oRD: ұtː0Ʒ a<@>S8xv1 )FbSus4>> qُ98pM"1 I @pd9g!S!2vѱ%:dHL;rzqdq1f|HQ8k"̑EA~ꐙ@Q#?5]3)"u#goIOHFr7r"{y9R_婀\<&=,W`{P GRHRyy!1ry(8( 1"Q@?k4n0:Pd.Ad_7`W(An3 'JE X=PF*ࠈc($l0]FQ; pFт< T91QGC4F@TzI~b(@ >;nE~2K`Kzksk(N@3E(h@kQ'sP n𙣬 W?b[GKPQ@BDJ˵Rb}z0h@do-jð?o7`c(n@{ ¸[WEq 0]7̨ѡ.0(n c6s$(5H. {ƨ޻'1x,y⢸Ms]Q;neurQ@s7XCqpQ܀\7z ƅoP >@p=m" CMtz OEqUHMcߛ?^^/gzWSŧrBFnX*x}K8EqWfis?VЊOVҝ4TW8^ʯosn}4Shc×7JhSVm?RUwR*{Ղ,KuJ"E);E3\JE{6lYɭl':YzN.vZAk)f_n[nfU*=xɣ_U 7 (eF̊VhŊ-x2P̥rEVӟ!uLH -a֤E"dMy5(xocx_WO8}H V?i(8Qt1l뭙Ψ eOU@VC\^&Ӭh{*")y\\Ք;߼3u([F[eZZS%r^=TjiVKuS۪eS=+hӂW,oRNTƄ}y(Y)>@c{)ʊ{m`pO-+N YxMmP[ig0 l1*iޭٿygZغ3k ?;5qa=*cY kp(֊g6MMEv$W.Uߎ*x# oEny] 7?&}F3b~>߱pV3?00][sv]o uB׍iU\;t}G~ܼA=9r3|[Q%|xz䌇EkݨF)݇sU~u77q颭Gx=cr-]ZwoV| +D +K$c4_֜Ә՜pӨs5q]fR5q]05ԜpWW+VBGf4'#jvLjN)K G|oYtQenS5~,W( UʶLQulmms-1.1.3/data/presets/ZynAddSubFX/Collection/0109-Tunnel Piano.xiz000066400000000000000000000044341247673406200247150ustar00rootroot00000000000000\[S6~_杆\ 0N n_4V]GN}n{˖#;vO}t;ѧo޾r[/g;aq}t~fOw֟[>#_O7#m~[FSl;E[3+64:^淣d6muFcr7nNjt.+!( 7ԍq+~vBl5ÃЏV{ \2Kic`j*e~Fg|G@m;lκ' O}j-(TH3f)W a*6 =^ZվH(GWWt E sE f>L #y(֔sefr"p\r-鰛w:c1|*vb:JДBKօҩO_yܱO8 {Zxq|3cC2s H2!kωc5E&:<3BUs\F <@t 4~o%o`[fw4mWsdd#/՞{Թx8.cM?aL(Nd!Y?.=r4.tv02oxh3΃Q龚,@f"XG+4r=a/㝟ɇΓ09yMCr)%NuM3]vA_ZgҰ==3ޥ8\o 4wo$H*QFII-08> CYBL o fB+(6אx f~`\5Uw#XAu;u KDžAG5 &AZ#Zxxv9іl{vP#Kbx 1R7I-5OADL0rr"V+Z#qX1ZtӲe]B7OTSuT3| U>6|4 h7|T. xMVGs%vq/GN}bjhG5>Zt@Hac{oQ -RQ5!N ߲@z86?$&gGp]BW));ke8k $>4'G*ש g "uMAvk܃?y^)9Cpl)fp#!jV}fՕ0X!YJحVu%\WU}V%U}zUÑwj}ŀz>yŐ@L5Bz|9bbN <߮vQPϾw:1JQ.û8wh.;ɡ _Sc{$W`ª8t΁LgѫUWZź^*~]z_׫^꠮Wu:UYJ^rxwt} QW[}g}'f>bPs^ʠ'+A ֞d'K3,[%SkXys0.%|VwY [CnQxֳ/C^,[tXR_u0-Ke+cAqFHYDf{)!t__ tRGlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0110-Home Piano.xiz000066400000000000000000000071421247673406200243270ustar00rootroot00000000000000]MsW0%RYbSȒV7q.(,I!@y_f0dL%U9moz1~$Kx? zq:Ϣ$Oo_n>]zxLzs{QXOl-4$WP)˟|.Ei2,󓋫7UnlKe}&#(\l8?u,<:0]]ﺫzZ$J+ol%)yAzӂ叹]<u !Bj>q4`vh,[u޷Uuz~}s[Riܑd˸w)no,n?[e",Kx-KEo"[Qn-ps޻.7:ix\>i8.K1iFe5b*0t@F]}7$zs0(Aނu.@w(\>PАVF"&RQPd TU/hR4>*{@"t~EhXM%ںQP6LIT]&mՍET9pq~.89=@ 8q3mgI;FNSF1XnEZ$ƚ7bFLUN-5z@Wy(&iݚAa~["&OFdJ 5>mgi܇ ;qq}^fi2g-P6 ']UUZ~q) qpF>(\DiEV`grh%}:Jo\/*EHw{I5a;sƉk jv}q~|<隚7aRX @v78w6gZg@f\C"\tԶugi]ʒZ? -8=1| rT4hDl Ϻl 줲#D1sʎܲSޖz/`mG`֕xd+rNB6@؄91q\֜#1lQ"kd0S!}1Bc n8q3@50#tJ}0m00qNIۇaB|ˡʹ-q7{2/Mtdazё„e„(!M[b_ac0FrÓ7ctJRm#Qa0zV1|nv O<¸0S0!?D%]N!j!a['n`([%d65% 0ٓ)lSRRH$.|d&|VM_!d# O}S0fqLMϬJϿ|9Ta}ls/ ytNd*I,˓4op&09R2Bd, TE)Px_.Dk(/t& ƭE%fXy/cɧ bEi֞n5m|kt(/4>5j(OU Ӏ'}06gr`o$b1i GQP_"%l6@"WԹK" SޓLSd'T0O -A Jh)s:G!ZeL0Gz(y.C/'XS//t7|<`{!(y@v=%hG OQ@yܷX5<'6o_50}@` G*uAzn((}D!hAa4x9zHQ@-AwPSoj\\6ªFZ]W&绝nnP8hP5g׏g7.M'~RyiOzE.R dk<6̚d9ӛDkjX%VaUJ2euyR<Rb*כ*t.lKr̶wp۰HTWożdOp9M񍶣76;( đ^W.U"6? m#ѕ: ReG:^zy d|sD]M*c}UQVAWq`)=wU|sN.v- UB?KQZ@ ɎG]FjԔieyPrZ5amE`"R7b,-䦩ԡmNFǓٯg>JA%ͽioJ&ؤ!LnLʪZis󪾉Sjҳf<ˁ^'YVosե]]~yߡ*DPtRw[/-v,*(Buj7ۺV=tr{Z%еkC*wUm]ps{X1=ZdǼM$MYS#ݏMYݿ W_IL[Ev%֥^w독 IUђJiW~\]NEZ:Zdr*5^#c*u%lug]P: ZSR v@:) M'^sgxUQvYn_4K"F~-cf:QN%flmms-1.1.3/data/presets/ZynAddSubFX/Collection/0111-Moonlight Piano.xiz000066400000000000000000000071471247673406200254050ustar00rootroot00000000000000]r}W0zɓHRe{K]Ut[IyAA$aM V>  ݘJejz.=tcz}byWiz{0%A}r}~wŴ 7G/kTv~ӽ(N},"?\|vt~yzp}|~&Z+&I_.>qv0Z~} ӽNWZwu\M˃j]- Lċ'(,\2\yQf"3">"䅷Lc6t2ҼѾhXoyTu)Y `#{N$GwYBv1ݶi6nާEy$]~8q;ɪ3pe%\ާC8Oaй]% fvmNMaY X6k+8_l-" jQ**A.N i' >r7ͼ -ZeΔ>y(pb[X)^bj5qeb[zU& Tf6M7Om^+F𮾞]j6/-k򉢶v:{dU~SkU#Oxo^c_.Oώ㓩? 634ɤ9zEyTy-vnM$AѮtPt WBeڍh6U*oaDF:/T^Su{^v޽?mPW'@"6@]dziyiY ˜ s<IPG%yrb E !Te{[- K9uk7Nifh.HT4Ҭfز`BE6Y^ KXm i0+J柅> 'me]Z~+ wZ<_fS]ʓzlXq.yIo)!rR,ej&Ues {W-ay5կIMͤăFɁ*ɯajmjJ2!ę?oi0Mb?DwZ LQQϿn) dxVeK[6ʎ ;uhs.8.;amX:Su̟'<.`c [Uv4ʹhQx8[xkt}da؅P&(/:2ظ s@XMӑ˜Aa.@؀ 6`\>KEi|ϘE3 X=d#cӖ˚uvq۪>@>0f0J}!UBg0j0@>; OYI*;0Q c<@$; Fc ˱jd&DMj}L'*OGFƨwq LXh L ش-kq56Dcd A.; LnB)F$l'a̞%c #1 OYc_~ ˜8s+%^szd̃= C'%,GD/wLLJӒP+@(Or! ZC}3i5n%(/1;66%A~%GߴG];(OEuh"^F~vQF~rPD9l^~;(=k ~G$p7I,]8X)a3GzI(&?=E9B}/:0Ou0A FLP9 R* X?@qP" wDɎT@3qpW&.o( 66:H*"x[_f55e$Jt4ᠼ2AwQj_(F=|VP((_i3G{06JS+A9~)^onJ7QVDic(O@O2O>Fn(UPɱ 8da  )ԾQ ltl3Jp/e MJ2r`:Gg(o;#%t.Jȭkͅ淸(y@%5ehqՀ$kK5kn ~1&f-.JЯ]=?8GsqQ@B>se^+-b %I͹0y@%S%hZEs<.z,@Ӛ.|-{}.5쌌 p}Ag&[ 8rV0q JЯ]>`E KF \=Q@XDk7>ĈepEE/%TEk5>~UJ2yuY=zRb*U\*{R+Kr6wp0A޲Y]ɜrәumFu5=}zr~RTA*!H#Y E mR)Gu5ƛF+uuR*HYxp5ԒEjyROTf\́U6)ג T,&xZCI߯U/[廭\xrtnѦ_0*`~\둺dP*ګ}z&FM^&YazUQ,{y8Yؖ p :"{S!6KLJIJ% ZA+xt9mC@MsS6^: awzWf:-{j-V/( 0b|`,_/eֹF0^kXF0c,i'Lo_+$4m TvB%RQ1PX݌15r&T ]+6>v| 9Ҳ]{ʟ}kN\s1U(Zh7缷yoTw5 HO@ʑ,R*zUis_ww =ѡm#V )o 5J _:s.s;L|2v.s;L2\.ޡ=V]{Yw17d;=:^>X[s q4nR_v_Dz»Շy$NhI!购`oM&W~& KT6&DRmr*W& 1m8'%`j݆gC ŏV 1q-aVo`^[gfA,UfD57o^jO.aflmms-1.1.3/data/presets/ZynAddSubFX/Collection/0112-Soft Piano1.xiz000066400000000000000000000037431247673406200244400ustar00rootroot00000000000000[[s8~ϯH0ӤhMF$=I>2\:m$sӧOKx`~`{Ud0,۝_'҇ ړ/ÎmY8v>(,ߔ;]үJKv "j1S~w0kMz>>zctɮJMv` z% eq []gcm%}"K۲ 4 TǚTo6'6gˀOl7~d.-XЉٌ!@)9x_'s@:yjYvz頁Uz()gRZ˞8Sy@f)QRkѹD% y'&۽[eɎK:qvugOE,tH=Uh1Y= HSJm;G{>k2+gH&Jn#}`$XPŰ(ձRƁF&miZ02. M2X71 dʎKAY-JiǙ1[yLPFžިdf9j!H~ bY"*UT4uWΒ?Fw~HC5ΘZVjXZ}u.*HpRLi 5Gf+1mq5THBFS^3CݾOT RLĨ0ʑN+F0;jt":ԤcV^/UVLu#`#B0|8B ].lρ` Mrg`Ew4# Y`E\B1tɰN=`;\G 1X`+N南\@QͻHQGE Bvn1*|PL˺^ֽt/y;ɥ/E;薿L| aTׇ>(S}yH:vJWؕ7&$dr}A%5tN{FnU,ϲF>WỾ*M$;Ӭ&*Yn%6pRk?nӄ:lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0113-Soft Piano2.xiz000066400000000000000000000043611247673406200244370ustar00rootroot00000000000000\ms6_\C2M rF"glj/` 3Y%틟}?{3 #7j5vUq|󧓏? _K8xr;r ?AJkONA4qF66.{5qoЇ-hH&AY>C&Z|F9"jV_:.y ;qw8JeK MvIrr6Ȃ#s âeN-L PBVAlHN:Noρk3LyoU?qf% O`ʭ_XO/ }7"D&#N]B_ {OH6sH(`Ny%(pvۿbBA/% ;aHIgȾ /#|bOމCJUw ])χM8 Ckfpjh!D:B*o@M;Ly ΡQVT SɦӼi&>Ig-_9}*%46QMxHk>O2:Y<`-CAK%Kdq-.2rfm(i-Yة9m P)|իu頁Uz()?dQS-e8 ";y@f:(RRΈ5L]jvT@T&=Y.h[x{وF׽;KSsv@APG'|TQpKSN#0Hޔp)5Ժqilf-BF}%iUt݄UuS|όD3Pxd1ldKu䢩+6;G6SR.$p 3ILei٩~%Uȸ6Ԍ"xa"1fTǸF&S7P. NY(%i!Di@3X]w4{o߻N5?C5.ZVjXZ}vCMO!|qc¤uz70Vi괰hٔػj"^G7wm C ;ȠT6c'lrrm!;aڣVۓY7#99V_n5Ww*-NqrƁUoÈ墨RdfC*U TWNTTS]JTM멆+Go'؍W+$'$ ҃mz*w>Rx+垺F#M Yrohx?&2Dlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0114-Space Piano.xiz000066400000000000000000000101431247673406200244710ustar00rootroot00000000000000]YsF~e uUN)6VWD)D@b`Pos~MRb6'=_=|oi)΋$KwNN(IwooNv>]~|59=_o ;#Y{$>vcd5t.ǪEXL 0\i=8>?9<˲i' g9-EG4z8]ЧquO%x< G7񪻺Y-%QG%]yԆ_2HxV8(,NKx.(46u%h~h^hO6WFъqOY2Ugb|s}{>7u|jV;0sE;뭾6t9Wg:~';Ӱs$U.>O4Q>fK茫U :wSLo² '_:r˕w胇<[4b > PWV=r|}~yq?oeo~>4lBӻjX}m <й'~1l_~2-WRu1ɼnZ{ʦd[Zm,z)iY R''IrӃvFgW#Sː(NyTY@զXd$iQѶ.Y>v'Okr14x4 8Z=4Iڐk8 ;~|oѴz֍>Uѯ m?F'txy4 ▩[\2֏ dL0/@kIUޅi5cCM@鴝и*>4r.p o)o{F(agn` *p!os` C7ps{<9= SԳܞ,Kg3t5-2|h84.!eE86%q6~nlǀݑ΍$U?:]J1,2O8O]E :eڭs7N 6b5ͫ\DdI2.D2C[I uT!աu4âT-;giҡ"5{ݶl@nu+E'9ENSJ9)$>B;mCZ=kI.yÚs&]$F:۪@kHq[5c lS-d  1l!a"dy&1gd9#%P>jl>5NNx(Ot/%(O1;nl5Vx}h9ǩ%ʸ3N{-<5 F=5v(O4f}XdـGf{pcs&5,`2̆?a5 ɲ GQ6Vŕ:QC֧P쟍Rz?z0Y-Htc#ʦ<`e x-^H8_@P"rD͆Rϑ;Z=8rt@`FuV}Ń)o$K{!=svQV QZfx(/ Pbw}PfwQj@qk}Wc=}ck+(= *K Hjdg2=%Y)A9Pv(K@&OPd䟸}6e x E&ǽn+u*J4/ a(]l`0a7(Ǝr12?st>`(q&<9sdCF_C:%ԃ(y%JshՀ(ˡG(yOQ1&8zQ{ s<`c.>JPP<`o(yN>Ų%Dup%Wl}<`%ا(>JiM%xplZӇ8_rGQ3 yIG^P33[U#OXňFX][,5J J >`0z?@A,kQW(}@4n(/7s 6P.sw|KRg%{CN-s9>mi9FzNMz[1#W+شjWZQ[ìp\U@SqϊVT5f"O[UdH{[dGt]ܥfY9vX/3&%(/E/)hSe}A*FfVe25Ue 7Z]2!hzܟRV*1!XM~Zؤag'+ʐ(T@4m-T*Y2˚G˳}ԧjd4.)n.+6XNC*kN2ދfMSN%$kn CW*NA-+^kJ6Ek6+ޯ\"MߧvŚN*X8Q+Y8.r8Y4Z`w[X"Vpʗh˜ܷ& E bnbXB^JCo^2JZa;Eq;QHk*brZԲ*4&k: ҏȿ?RK_[%pެkqyr]Dٮt-;ZdwеkA"nD.ޡ<6I]{$w1WIMvtr2xSUö󨸆f*fJPnrGT@)_YEFҬtZVg.t͓EWS v/EO1 e6dBq F4~DOD{64*H_"vyi'Η pn+㼹')eOmlbCxm.oWV mڔ wEx͍*ЗZQ^K X龈X꽳Au2u4 +!/L$zxrUT^t;InU*#nU#o' ~fŪ^3s7A+D/@`-xlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0115-Space Voice.xiz000066400000000000000000000026371247673406200245020ustar00rootroot00000000000000Y]W6}W~$`Oݜ&(\l9k;Y+'%Y F;W3է((I_ίͥm!~Wüڵ?ݜ\r7?M\ly o%4ɵݲJsymp8̖Mˎ`Akep@lM&ɡQ<j?f.;w3a(@X Yv~,d P5J@,DgGlhDpƹ%"ޭ6(g ;=mxߗ*ofͩgro܏l =d=ZeC?02A/{jYqb0CIf/rO ֈG^ao5m_#>,q;$βn0C+fDra_ع+S%df+N7 / 8N*)>b^m^|KBQ4,!`4J[Lfp%@PgD1<J,>hڛǣmNw)?Wz/.]J, CQRRZaY\k}Qv;u;NrGSJ8KmQy{pr??ܩoWBN$=} !y 8ak1!Be  Uy+ҳ7-XAΨJ1L!BHɲP{Kt2N<{S(ѕx`D@"лJy=Uz'~Vr*~*{D#gw N @ R=ӟ?'/%ߊ\Bq*nQ<]RA$E$YI&h%s?;W2T!M \o}3ސ[QIjTep+0)VqbxO ǹ,)˅`%$n%{1dJ $$ *9RF06B䪯P I'qkLUApQ]DE/iAcVCFTzCCAg>O5+)ku>Y{Pլ;Ae}qiEOSKҩ1#I/w|Q9YEl~߽MˇEj,RuRVj2Ǻ!̔ϏpLM7cpsq_$t:oq9%v2Ԝv~?an, @6Znn&l mJ%$1-vk\5ݣ`ƾXƚk80mxm~Lk PL >gMJe6*vcUg2k^.G1lt{u:2V%.@vLl@l1z>YDQ%0]8x!/[Nalmms-1.1.3/data/presets/ZynAddSubFX/Collection/0116-Far Space Voice.xiz000066400000000000000000000026221247673406200251660ustar00rootroot00000000000000Y]W6}W~p' nNG@K_t[ *NʉdKz}h4sjf8%)ɍ|-D8duc?]Oijؑ^6 V]N#g-\$_Oؙ 綤n\vSZc?[ 5ЦFt؛#ˡ<0M{CoMgte |0KYJ.m{U|RF $͒MHvd[K&K g\莠JQK+qf"O}A# G}rGu`4Ohhܛǣ]Nw)?W[ _]-WXa>)gNw^w[unrWW) k^_#"*/~CN{J ќgoD2qH U֐JD[y(}ͿT0pz'a)ASJzNů]sЀ"vLaکV *U47{VR?~e!PT-6a׽R0IHhYa$d%.E uaX&BCY`oNMTZ#U['JOU{S$J!++\5h% A-E_hl#}|/̭PZ;fnm7̭jkU 2N} *W}s`hxej8cCխwt#_9ͩen7g5o j!{v4tH,owe}n|/˶TbI2Y['(JeFH L)|xDb߱}&8TA y[wJI541vce!hCW t87 cPGV(A&Ȭl[ôu,UQ=V)+eaZ6ض w&P`MUI*{:Wzߋ`ۦ[#f> w*o4_:&b6e1w־XB1!0Xp?tFSalmms-1.1.3/data/presets/ZynAddSubFX/Collection/0117-Space Voice 2.xiz000066400000000000000000000044541247673406200246250ustar00rootroot00000000000000[s8=C j2SLBvK dv^Twچ-Y[In)ݒ݇O?V~kˢ vb^t~]?}|7ׇa߻`ຳ#&ޕ yG+G]{m ';QĶ^I[N7sJ;C['[۰h|;ɸՁ?fC0tO4jtŮ+<#(a7Y;c y ɚE $ڬXaw10\2GYoZ(C# rD:'lCa\xj4ͧk~\gk֗TjSIs?~]Fl֗VF-&,bvUQIvk&I[sD6]=.FaS`i.sB]6͇-ϽjPuT), >w R!T6"CColW"O^%`Y$T@f F*O9!U,rW,t4o*}y:8C.e~xɎc 3ñ)yV:K8gV4z{>*2eNحik 4Xhzt]EO{ T`d (fx]"ܘ:-6S.9҅WRʗ6QANP.rY߽NiۯNiwe$~ZW+N%ljRRZcɚNP;QR,AYƈP8[CS=mR'>6s`Y[mϚ:lT8p-eɜdEdm,uJ:H䮃'Jsw:Ȉ߳K;EZvl jstiE]#vb\l0f +꡵^;Ot0xR0 *o)-f0s2ӗ {fQ==~+\nFg5eΗ畱XL1 5ga.o|Xb- dQ.\ 0ɾCzT)kz&))/^pVu2B$73[}EKX3Z-.- xlGŌ7E6*CD36* VyuCƦZ=iU 7jSjTZ7jV?p֖ /TG8lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0118-Soft Choir.xiz000066400000000000000000000025471247673406200243640ustar00rootroot00000000000000Y[w6~ϯIs:xקl 'tArAH .6zX|Hߌ4߈OᄃP?WM>ಫzi_L-=9|y@ ٳP wÿI@u1ȅ-ІĦpBMpq/aCHxlf3%DHγ+U.]eTpRLB`2^|-ڵ#U`tA |]DY/e_l4ympRviՏoz#F̂DER!i8uz舙VM="^20r-}i/А](H a`UaAtE杒6A@ƲB٬ v~9v `}'krxHT&RjDe0|f[iħkL9X,jY)t+ņ _8ct,5Fбh: @2Xe4S:i~4ܐf;lpK'3'ntxE~J(JfP-GawIjhnF&*p|Mv4_w.UvLn+rߘiAOwi;f3ɎVKieUV]V_j3NN]VuYme]v]VuYmeSN]V;uYefesFShW mAVIJR~:l)~]*Šf@Rܕd^O6[_IenREgeb~?KC.T9/6,5F/1]lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0119-Full Choir.xiz000066400000000000000000000043531247673406200243510ustar00rootroot00000000000000[[s~ϯ<Uͥv@ξ;b}I뷍eKrKvp=[i-?)'?}3 #ZN[ UǓ̿< wAugb;ޕm<- ''*MuxL%u&˘>{4ph@h}(qetݪ{(S%08ۚ3!aMFC+Ob88|AIG g2%aRHk.@srK![m yȚANftL)$XxP9Yr 괠qT(8t_"h5߃4 ^l  jv_3#њn0=WSwHtL -PP-tӌw4mIa|M(Sk>fJbEw ɀ$)#%b(8Z{+ٞʮ]-X:1Yya$YA]=pOaiIsyPf}ߗ"c|Ťm۵:oxmnys:MaĴ(*,֓H"Tj: dPU刂H&0!J͐ ׀LV=- CL<(bx6+"l:i0KJ,@J-6!- "{SP<Ha*`0*Ŗ#(5J!!(9G!(wÉBF 97 f)2W11']"Ŵ M=Qq2.>܂Y:%b8_Kd,߲GD2Vxb+=f!@vxо-\tp '\$mr~WdtbH=Լ[ka %/?"j0T>,%@Rv8˯SܓzTF,ǁ VΫ=iN@^[+FfMGe`}dHݑ[9()0Dw_qWI[uxϏ'x/'x'NoJ5sĀ1";G d)v0nu#% eͬ;j! YidbsMT?? m%.[.gd@ F\]?[_Js/4'hfi7Rx0ceDu@$d+8E[:7KF(dfEd: F.GN;b\ eRBc b Q94j߁4<lKՖ(㊎4F_ȦHU(%q8S_`ϢU vT,TEl\6VD<zRK#J((b6qDTF`+!tН܍4zqS4[ԃ,h7g Cj x~,tR4 T%Kt&b*JؐdA.D1r%5[̺dO!??LOzP 1b7!m 2Fӛ@C'",]rʷ+JuYPwӺ:֎.ܴΚDUob?heɘ=D$Jlc#OxMP+h#bUZAC EIF2 !incXHɂ%Y2"`icKm-  ԔؓB&4Nt!J|UBхт&\b6}r2&˔Ey͕C @X~Vro'#iDb+VK0HRŘ$.ysMGjhFRhڗ'F Kvj PGTB Qz4pڽ<;FR qz(F0qS@ A #mnB8>f DZʍfő§|TQS%ďʼW#ǩbY2+vz+ .򆟼hl71 V4k@WTh$dR\LaPVBzg?B$@ Z꘤iHc{4}@21jM%wɱ`nh{O~XQqL.oLvsy19·#;Ȅ 1Ȣ)qD65SbW^JX+kx on+^ύ9>2H,[Y,K½4g8VMF*ҡ(@ dS#ØØe|5cM|9=u݋vٍuInewb01׎%lG.oYLlT#l\}Gey!`KC~Tǘ2[|Sl4|w)ou6՝g|ҩoS}|8'S}z8gS}~8S}y80VvX =`E,Ijrquz=f&.uom~ݘ-r {27+ZEVnQ[d 婸'1_ ݌$lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0121-Breathy Ahh.xiz000066400000000000000000000033741247673406200244740ustar00rootroot00000000000000Z[s8~ϯO-gthbZf P ;h-Zrm{/ln>::|H7Y$,ju^j9$OǫouD=ߟe_/|1}T{O,-F#uJ<xMqLp@`Ozxbc\&tRF8醤- m}E޴w,WWh 7R"xaysk?S('ab oX> O:T>>é>=é>?éУwr~s{_[?䞇1['-9MLhRgri<4hptߝkAcE9j=toUg$M OW,i9mn{;&8c'9W2=GKVIl&RB#03;׳ȏ?32iA)1[p|r(vYr7 i'?Rлe$9uR|th~0G!K)Ղ)5Evv.K_A&1<nIFɛ'{ZG JfB ޢY)x,*nN9(ZBHi>I-77dy09|-f rP?'7`R `y|% "+Ot DHCwF@q,|jagtNv4qW:G&>{e 3ϣwILC/$9҅~9y%Sn ~d,"_8zDtA ~Xï@2э<AhSrH(\ ؙS SבYܺ\#͆7YVcF'4_e Nk;d1UןR4T~y<ȍh0RD̾7L "ȋi.W:dej w"nhq@26ΐѩx۰"jXլ>&j!]ÆVՄERU(OlF{y sDR#ģe<7( [2ZiK&<YL{3E<޽](I82_%e)Y}PO2PG 'SZ2Fp\[ rY]Ouy^6 kNC?( r/$ ȶ>F(rHSUA{X3 `zB%Ӻ1 EC^4}$J\_L8|#ٚ:$vQ(4~Z-hkeh{٢>o(#SR`3V2xdAJU2#Դ2Kz@yRI)sc)s!Od^ z8=jxd`~ `: + "t7Cp,  SA ,O3W@FT2HL4j}$Bn%̈ˣ,mtȍEg!|rfbK#]64F@v`?n.S= ] ?2G-f tn?;j۶Ƽoj|)J+y% JCK8-x{?tHqh]Ï_'ATFfunYjƺQשFfunjIc WEC!;;HNokmz"fR4C>ThI::񣊱@g)Vݟrm)h38?lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0123-Light Choir.xiz000066400000000000000000000033441247673406200245100ustar00rootroot00000000000000ZKs6W;33LM4%G;u/$$|$D]ZrRk&d\, Я޾5KRGNiȋ}-iyw/m?f?|*(}T; 8vNGə(ako~i&RvHSFkN6 }w: M,VDCvJpINcweI^se)TŦߗE&gd)&jQLCISNN7d4{EC[75G:F77j@ P\Sc4TBMQ )=C8?ܹcn0}2G*[K*t QBIM;3 6Q.\ʑ8c) Gh5sņ.+$0h{V[95H IefG\"x*Twn`71 V4Ek+.OZecD&I(r5B J xg?B{' ^i#~vؗ.3t>CY/Ј%074='{ DwQqL-oD$v!-/ΆD;a0{lq4%L]?hҸ ,.0/TeJhi=0c;=,W<:2)[Yq` E/ q5srF/hRs삂iKg/.xƨ!k9Ovne7+"QBghxl{G[I0>] V _$A3Zh&>j"}n }~)K]9ZD1Ny 奤%Hsxty؋!g{z~ViR^)}~Z:G瞷sMϲ݇lw|oWٷ~ߵ۳it?gϢ!ߊ2v{KiqEyDfHmni䴁p4OnzxZQ{r钝o{W $ Q'nu#7ޤwӟ'ӄ[hIҶl d'dvH-b> %sÊa:A8TMLV<]?PSJ&MwlrwRo0TBD>u_dێYs?|n}mu[rh|`[rM^106k6@ƛb}.=7H.Z2CyӲ~le.wc]gSHSޥe* ^0S%?:ߑ`"=)J\`q)k"]hD8SeԻ~9]$G}?23pM@D\u悀.NB[X1R gױfR*O -\$>u-o ͥǷ}lLHV;kE&nN!kd"ZMf9r)xc .D̫fzJv9~F#`ߧ 7(tT>q Y7 \Xo’*CZZv="t$yra iDtJh1na+4=7q/IQւF$2.鰋~j!'2=(tvrLQotHUyh1_~]SxP*5skxitaC/+6l*xBP]Jlvk0<_h1-^Tb*rx-4y=diy\dY%L Y"{dDq4gcl;wmiV/SW,[OHRM N$ 1,4 q g^ !aD) rVPOkՔrs{ȸ)*Ũ̙r\UrLL!C- ml:H$.F}&72EdߜCFZ8΋^s'L,pVVSRPU52谸JBܴTjw%5jA& |5C 9]5PNMPcQ\Y"CWp2z H43"Jʯ[$qB(T#yC|<|Pͤ=K#*@b@7\L_O W~kfT(ǩϊx+h0x[[\$|yOi IΛxM@:T] )<[`mD}д ^AӉ(ۺut"ܙm:v"6ǁq*o褐biJMCjƿGȤ KO+w;ѕpsYm]}S_6p^,_Y#[%[%Ï^6eO3~یmE[%dl =$㏽\=63YײA;Բzkn=ֵZ6_iwXË4lxE4^#WtIc>  t9JnB$PUpL%y$lUד u!N\QtԼqk]r\fn2Wȯi}I9. Tr!Ӳ wV 4 ᅰji2dj6zEm!~njC߬3i+f}GC5- dzw$Clmms-1.1.3/data/presets/ZynAddSubFX/Collection/0125-Hyper Pad.xiz000066400000000000000000000042611247673406200241710ustar00rootroot00000000000000\s8_&.+s QlG[cْIgޕow%>~z^:'^sMϲNjlt]Y4zoѐ»t%0h[<ɞDp?';9m8'p 8g̥dX4TW)evwΤ!V$L`tO0"'87.ͨH*{du4!Kf|& > OdٱZD i(fDh"pLd{,3@Af=9OtlvK#jDpGzv*'kdm=F._W*5n<*Z<}F0'.BXo’*CZZv=t$yɞra ؜m۬ET^,JY6`ALՏAbY( ^ !aD( rVPOkՔ9rs{ȸ)*U|3#[y?Xe,칮"m?,C- mOD$RLKCu fuv<^Ž}X+ꕚ >:wmSR' |Toc̈́ :,"b}av!/Z)5sV5~ |5#P 9]5QNM3WcQ\Y,D^Q\S13TGVRW~ۺ^AR'ąUbRAO#,fRv8GegH0jq^bO@ @sTi x֯y P 8R1y>9s oz뚄oi;mY! 7EF/gNլiB&9:A[AR'U4"Jn5NQӈH6hD ”+^MB闿>dA4D:}& lai3>^S! ?ggp7uǯc?yK;[^MV_'nɷ67]/qk &_{еlPsD еlееlguܩo74\JB67tH =xC4vp:wVz W4z(&D UסT+8+>"u=$/?A%K*zܾ9c蕮ТKM#|N4|iT˗A GZ4Vhҫ{}!Dl >)k(]ٰx ه2o{<sr9N'9 6Nƀen^~zLqN' 4ru3?jޙogۚ4 O)SElmms-1.1.3/data/presets/ZynAddSubFX/Collection/0126-Hyper Matrix.xiz000066400000000000000000000075151247673406200247370ustar00rootroot00000000000000]w_=%9 r@n {}1X$Mm]_ٖ,#IVOIF|7sEؗ/'z 3Ǵǣ]Mkmiӛ?M7ߒ?ߎ{Yo/ҮoŊ>~Z7svhx36Ƌeص{c7d0߿}t{'1ee5Xi!5y^ Z>| Ȳ=]/t6|g7ڪOAE)@{B34?ǚa^:xj0O ,Y7J6$;F 2ڶYEwǜxsmsUsy,R{gZ_p-5-GG\#cYmzx|3}2[i J5 VX:7&2:΂$l!<6Lw5˼|K#mcfw?@yhIƂ;&ElM`(tq!.&2ew91TI2Y8L"åxm-WQ=ZO7+Ã6g4$GS W[II=#K)͉%r'#RamrM|5z"[Ke=^Y:w "kmf/̚2kߌgCrALFet(*kT`H(0I"fAx,e22q g{֜WjWn.g'qH ۢoS">'zw*v/儦Ię}tn'tNqpǖ;|Jc`]ɱ۲b+ co$7"Q ,N k "Rmu5-kșdNqp@'mBt|'~|bV|ftEbc$ 4M!^# OrBqGGoNuwk0V k=|m}Gh:*flTJ=vuEhu.=1T ;D8BkI?D ¢WyS ?VMCRԅ=M ^1QG7;y[ye;<x9p|KLkv-yv(,)@moo&B8mEq)*rnN>%@pyp7ɳYe\ϘWMŋ7w |ɱb 飳Aԋ"9+[a]{̥P(/Kc@p&U #f͓=,=H[LB33ِ^$^VяLy)z ) lzT-mbQCnPzӎ kXU b6cU؏%P~ Ad~+@KR _U,*?J<:k[^0_‡&cֽ:ʞ /DMNv*G7Zݯ>26gGgbؚYdgƾ4[t/f\)Lp;f'A1Rbq2;J{tA*UAUȠtbUV*W*uWXUzZTmWj*UUJVv){ l#믍3zziǣ֢3lmms-1.1.3/data/presets/ZynAddSubFX/Collection/0127-Extreme.xiz000066400000000000000000000051731247673406200240330ustar00rootroot00000000000000\[W8~_;r9M@Y,}Nа~KeI.ɷ =㧦RI*U*WǟW BNݟz'ްqvu:r=n9?{(}$~pOɜ{{rm9DvJ9m]#RuM76L:_\fiet;&ףx6'kv߲D?].["`/~h}nZ~Z҈sť?)d5KOu``z ߁s;r~*0rd{N1ΛLf˖뜴<*%seps&Q<Zנ~oYD G*Ec]|e/rQVgB9$]OU]ytvFnLg!TY DXd*dvwf5' V?wU#l #G[UVv,K^x}13*+HsPW Cd9R3/3[yOdp!"AspF&3Ve"3 ?3lh(U ՝U.]"'miDѱQ>B?x2~wc1|xu\^©!5Ctasruz>X h~mKQdZ/hct剫S&6cr%݂Ue^f#_"X ߌu7~EO*{L d$C {|sω˕i -39 -QioxPz5}AV8حhcKy.! pYI+t1H4`oΩA9?q&./~9B*!>z.J|̋&Q@_sn}vF?PR%cDI!j0uѵ$ uTSNνk 6R"iBNlNwh7۫hzjOg 1&%C(%!J1) ׀e`9r {(4V %fJzJB]%@=G 0Ūl˦05dPw R,_4QrB0@J$|u{:4_чb0T7ctISC dTH3tr'~yxV9V:/2{)z2o:e 'FGtT2|(:'\pd*o(e7 j:C6`YjUxͩLoL-5]RNщ B9'Cב J"I$iIlq({a~2o˫䔿onDOS2]kHS}sGpuplL9Y&&ϐe"YlVd=_ϐB7 WX$)HoY#V6̕Ex- hT~G &OGȑrڀѺ`Eh<ֳ_ AF*wF7poGQN-fwGU_35pdrڢNd07ZO$ٰeF3ui֘4ڠQQ$GOsry=3keS;͏@;{m_eZ4l۽o)$!%1VRGV>* FT/\w\\|$ſ}!|kņn;* 0y2q[Q! L@AɠDPV!㚏~}Ï l;o~tr˴r{[ MD[?%֠ jЎQ4MǢ^)Ar ܎P3Ok7'%T'fheyE{4^W7\)ӛ@}S ht^M5-]%=D~UzIrw<0$!>ahYʆ2)dی\\YOTe(N~G浢!w/$w4M=# z?i]~Hݳ(䨹ױEVu&݆|ħLvMe jj.j&JN5YW ~Uc])hzX%XCvjj_}Eדl`|~>>/PdDZ{f(hq?Ql >~- g".qvx>q'28Na>E%Lح'Rgq4:NDXq ֙fa ,N> 6t2$5EEE4nYͷk/Rskڵ&<\r3\O4BDvʸN0d9ƕ~0Ƹث[7׫+l+Ufg+~]BAst5Wuگ+~]JuPWRԕ꠮T[v}+CK)>. >Zlmms-1.1.3/data/presets/ZynAddSubFX/Collection/0128-Wind and Surf.xiz000066400000000000000000000045031247673406200247430ustar00rootroot00000000000000][w8~ϯ<=ĐrN a&,н`CC5y˘A+;-+`(4 O~ZoX:<3ǛzŘ|-m$tE!\ZmX1y,.2Q-*.ko2 ۺjRGGЍu'R2 %h/lsH/l]2`EBOЧTcY&ܐ7b>ڏGMx%.h@NAڞ դȝ-,sE9F#;_Y(/Zu\P`˂<^'3?Կ=m`j=g(dQR͉7D`'] B3F.ѱ]|`82o%m4Zױ!BD)8m>Żpٗv}<uR2exeʪgFq"YOeD[SUM8S xІ |&S}Zc\!O1nJ[VA {c.jE&&sxš]6HI֎RLKCa:N}dlCf8΃<`s31N_jfvsk4,mB5Y!֖ABUB/ jB Y"G߰^6W LZ!0Qw62A͂0(-(ryܛnS#wUU1ZA7 ~ /ΈS1=nTRVHǍTc57OL-y.i8B& z 0(ݡ4Jjr]*k4tlIu:d)D\\۵u#eWB!buo/h_ J;FE.DHr ѩmR9qơ{qIq։LN%5:'6z8EBDg e{/*t)?5ۇL) %'z'8Z8'(Dkqx ٸ QTD,SxH4/oޡ~|.Nkkŷ]EyBܲ~]{ըՕ:*/։h>Z"l{"ZDNDkxQ\QnD?I;ӷ캥#q[UJg냸 WWu]JK?T_.=Ľ܎uͺ }_H@_|m/iެyoX|EUeΛ[=.:'N]Iug;ɮeIwz'߭.[ח#~"bQ#*yD} w i@z SݭTKRǝF*(7Fˁ4 Ndlmms-1.1.3/data/presets/ZynAddSubFX/Companion/000077500000000000000000000000001247673406200211215ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Companion/.bankdir000066400000000000000000000000001247673406200225220ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0004-Muffled Bells.xiz000066400000000000000000001117441247673406200246520ustar00rootroot00000000000000 Muffled Bells Will J Godfrey GPL V 2 or later Originally derived from Paul's Bells 3 lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0006-Tinkle Bell.xiz000066400000000000000000005641141247673406200243400ustar00rootroot00000000000000 Tinkle Bell Will Godfrey GPL V2 or later Derived from Benji Flamings Mellow Bell Silver Bell with a little extra zing :) Benji Bell lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0010-Metal Sweep.xiz000066400000000000000000005636401247673406200243570ustar00rootroot00000000000000 Metal Sweep Will J Godfrey GPL V2 or later Derived from Paul's Plucked1 Responds to pitch modulation lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0011-Slow Steel.xiz000066400000000000000000006342421247673406200242300ustar00rootroot00000000000000 Slow Steel Will J Godfrey GPL V2 or later Derived from Pauls Clean Guitar1 lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0013-Bright Metal.xiz000066400000000000000000005665401247673406200245200ustar00rootroot00000000000000 Bright Metal Will Godfrey GPL V 2 or later Works best mid range high velocity lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0016-Soft Metal.xiz000066400000000000000000005657601247673406200242220ustar00rootroot00000000000000 Soft Metal Will J Godfrey GPL V 2 or later Best for mid and low pitches lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0019-Warm Square Swell.xiz000066400000000000000000005642711247673406200254610ustar00rootroot00000000000000 Warm Square Swell Will J Godfrey GPL V 2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0021-Bubbles.xiz000066400000000000000000005625041247673406200236270ustar00rootroot00000000000000 Bubbles Will J Godfrey GPL V 2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0024-Solo.xiz000066400000000000000000005640011247673406200231620ustar00rootroot00000000000000 Solo Will J Godfrey GPL V2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0025-Wind Whistle.xiz000066400000000000000000006354441247673406200245620ustar00rootroot00000000000000 Wind Whistle Will J Godfrey GPL V 2 or later Works best with middle to upper pitches lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0038-Smooth Saw.xiz000066400000000000000000001077411247673406200242430ustar00rootroot00000000000000 Smooth Saw Will J Godfrey GPL V 2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0041-Buzz.xiz000066400000000000000000005626341247673406200232110ustar00rootroot00000000000000 Buzz Will J Godfrey GPL V 2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0045-Bite.xiz000066400000000000000000006632261247673406200231450ustar00rootroot00000000000000 Bite Will J Godfrey GPL V 2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0055-Thick Bass.xiz000066400000000000000000005616011247673406200241700ustar00rootroot00000000000000 Thick Bass Will Godfrey GPL V2 lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0057-Ultra Bass.xiz000066400000000000000000013366651247673406200242320ustar00rootroot00000000000000 Ultra Bass Will J Godfrey GPL V 2 or later Also works as a nice lead instrument! lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0060-Stopped Pipe.xiz000066400000000000000000001123051247673406200245360ustar00rootroot00000000000000 Stopped Pipe Will Godfrey GPL V2 or later Based on Paul's Church Organ 4 lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0074-Smooth Expanded.xiz000066400000000000000000006313761247673406200252470ustar00rootroot00000000000000 Smooth Expanded Will Godfrey GPL V 2 or later Now has a slow long tail. Only really noticable on lower notes. lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0092-Wind Pipes.xiz000066400000000000000000000557651247673406200242310ustar00rootroot00000000000000 Wind Pipes Will J Godfrey GPL V 2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0106-Harpsichord.xiz000066400000000000000000005626231247673406200245250ustar00rootroot00000000000000 Harpsichord Will J Godfrey GPL V2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0107-Cathedral Harp.xiz000066400000000000000000005636131247673406200250220ustar00rootroot00000000000000 Cathedral Pad Will J Godfrey GPL V2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0108-Angel Harp.xiz000066400000000000000000006322701247673406200241560ustar00rootroot00000000000000 Angel Harp Will J Godfrey GPL V2 or later Has a long tail. Works best on very long slow notes. lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0116-Soprano.xiz000066400000000000000000001056601247673406200236730ustar00rootroot00000000000000 Soprano Will J Godfrey GPL V2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Companion/0119-Ghost Choir.xiz000066400000000000000000006342021247673406200243650ustar00rootroot00000000000000 Ghost Choir Will J Godfrey GPL V2 or later lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/000077500000000000000000000000001247673406200214045ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/.bankdir000066400000000000000000000000001247673406200230050ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0002-Sparo_01.xiz000066400000000000000000000040611247673406200241040ustar00rootroot00000000000000 [YSF~WFخulbM6/SciaO-KROIapղ>I`<^f뽽zߛ8t> ޻Q~>FŞAd_d=c;k8Z8'wpS(Gr8֡kՂu[Up4MYi [)uYu=%кl/eʭk{;3%S|Yysa&$[yDO$+H䌆ݾ\3=7LUq*i1}n~;VLJBkKQyaNLzh}4?"+T;ݻg uApmA޶%8 m7 zSZ1^"0 QYrbY%6W2x֑$\FH(LW Yfo}_EDNHF$NF<;"l⠈xa܀@F`f!f"lX~;vN$t$_OjNtZ۲qi`)0tڹX^Y$f+G Z-y(^-Bkf {$At^8l)(f*x *)xZO* !I滩pH̹ϭ 9`G1AkQٲQOZi0&[#\wBS< JPR[jz|Z=''u (@>eYm p1\ #W94/ ՎFf \'!\%4J6 ;X$OsN}+rBRoioU47-zKU"h8gh0Ԩ g &֤?B>._m<7>QW6KC)o="q3<'(mJ$ UdW\3S-TBj`|±R2e0 o=ޟq-ଛ5j*kę3H  xge7TҪ;ٲ˖^Sk죶"a"atOxMPBAOSVKjC1 c H9 +fAGĕ.k%_j>pFjt6*"-ZQV(mUce ZdU/Pou>feڝ܍GÛOUl~2T.ZmS~Y2ӦиY)v;%o' @Q0$77>YWX>Z͜_1zB1=CP8g(p) "{v[|viSLy>Ɋ)6M&RWwj 7h1>zW>yW>{vI:7__ :%Cu\ecμ.4".B\hϟt#n]0?SG35Bɳfh8f-s:,ܐ5 kѹ5ɲؐrrƔu;qz5Ipp495@[%U܈QrS U -k(Ls,X-G_N{HM &5NcA#Œ j![M-FL2;R#q_odWiDҐ_*M:. '3u/Qa.5 ::C,0yZ+^[@ټh f4r9МEpKS uAu|Yzeol*{evf&fAqn"iƹI&f]q>oi8リ |(/ :`̊H}.sAfH,\ _| GNvܸOy|"E̽63?4KV!4lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0003-Laser_01.xiz000066400000000000000000000037771247673406200241040ustar00rootroot00000000000000 [[SH~W;/U#PK 8/]MHf asA{r=$n7g=]7盃_鷇_[8x9Q~G+k=q"y<ġGv7.pl?wZ|ynC?Vd{u.Y@H<E>gѨPmʌ 1 #g9/ َ#f \'!\)4J4ĕ/%|Q`9>F~f&S8a.ܷƴz`͒$Q4!d=2k Lw-P"e;Zd4 o5\._u4ծK!gkˌ<$/Ce9|*e+uΈ)2!w UR3yF<ۮqdLjiYs2&;! ?3(jݤeg")tx%-H>4(VMI^2Zw.U$,3.kP$SVynbNS(FTrTz i#Gp ڤ=(7sԄlA=TkKk = 0V޲-ev]ۤ`Iqg3swRvr-J^EYOڣ`Hnn|}1%c#bt{>Pg(7w) "{v[|RԔeZ fDMd:/Mխ ̩OZ}^Z}͊xfL/t8K*Cy\ec4/4".UB\hϞp#nU0oˡgFͦO崿gz+ka#wb9UqHk\}wd4.wq Zf.~g?é&ȕOhL*)+VdHCd a[6c~mnP?ƫ?SXI>Q0uc*pIBKִ9+f(J0}\WkN^m ~qz) ΅+hp x8> p?8 ם]l҄pSXa ]y럃=Y'/(\K*FVH11$("1h4 5J6 Ad p©`Ib&Ѩ/ԅnu9_5gՕ4ӧ{ŸvV[ bTi‹C`G`xhQUܽn+_:Ώ2>Lƣl_fV>2.-Xb' 2ʃRaJǭ.$j'*1iܹgISjpOwzrnglwav%+/0ؕG-,yGY֕5![ ܾЗxM>}7Wmu7`ۆ.oLʴ!wxOXA}ݧo]ݻ_[ya'@|}-/@¹sxz8e;m ێs88_pv/?3Y]+87>sDn) phγH[ĜHW>!2lC!(t,[T*"vҷi]z(lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0006-Ronzio_01.xiz000066400000000000000000000076141247673406200243130ustar00rootroot00000000000000 ][s6~ϯ4::ԳNg/Fc镨4AfgXw.^ez9lYY$geWϞ뫳f.7:^yًG՟,SɳC._yjǟq][a뷧W!Dl<ˣwi~ ū>}LG'|~ӛYvv}f+'Z_rQfb^1Q{'l#K䕤Q&a+j|^ۛjt>{oYG8]d4nOlФKfٛwmdPk&![J#ErveZns'wf,MJm-=weLL)7g9Ѣ讴^7t^7nG$θu\?mR֛$޻J?J[C:@Fq7ypMOWwY4׵R57^?nK,i!B"YShtY|2oC7i[<ΓOf-[ŧ; !AizS#ڒ77qi8(,ԘTQ =iӓD+|PSFӐk)i Ej ™x l foWg3z&P9 6I$,`Qɗ<ʶeB [FBg5حHhBRˇ#;5CE5װtWr n.޴HOG r]Yͫ[d!n[sedR{nulDT䝷N=pbwƟh{j =5GE^*dXT=hԽ $1$ =]/}@VV(qLyw ˴v\5QٟɄT_ A-7^Y%^.+C#e^n{6VrzLV/ ++U.{O&uNШekb瞪NKDq^k5VJP}SbϘaxyݾ3zw܏ 21eL1sk'E79&ӜpOozozxxrHLJxG_J8aX:} muA 7 :?D Q!띯;YQZ#iܪpB '8W ,du8a*/$-Ց?#[aD}miastZzVd·z'!Sa?IxcetHE$uWϵ oH[\gqjWJ(Pk#@  iQijx`7aZlz>X^2j4K̸A64qߵA.]$gLkxDH=dLgxx->i_0G%yAt.m 1@ɌH##PDxNpbN .CsB[0CTD\]\.}ud]ޣ靬4y:A2܊zc}Q  uZ_G\. <@~}0Y^\C$kωj\06Cx0b _ݱ韣?T(d{kr<ٜ qEZ]׬̀i&v k'86[\6^ةJs@q`8r$.-AFADhrunP%6AQ6Cet^#U0|\j/#xDtG8Eꅠ\r6ps ]󹶞!k9EԠ]!o0b׀JxVw*qjǵieQSDdu C4̑ks̝]}莞k3ZI<.YXmd㲵s|ua^yK[Ҩ=Ҫ0P8JpQ.)-TD}|WD^AտmKZEݘ|oD[,L4ݨLr +ʞC/Ϣ_ߟnd~۽Nfy= *==kN̓mQNۍpNNh=v N;;> BCTY9A5nX?n|:>ߩꡭa[gmԓJO? cgELwllf_f343٤Q&Mf6i0f6sUmX8'S?+>5OoĶuv~>;@>N[U_i[A[nnwx6[,ˏ>kʿc7Iq olmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0007-Ronzio_02.xiz000066400000000000000000000065661247673406200243220ustar00rootroot00000000000000 ]Ms8Wx}X>,U%:rkcc+[h9HH9m_HHJ攄B7Ct}_'b4`]6n0:WX>lUfD+Q[>}^Uc;4lˬT6VxaJ0ZŢ]w9_ǝ -(lbCj**V( #klHhᥱ5MDxf֩%+KrnLf5&VWl1{};?Z| c7x✖5r\M'XޝZ\JHc3{.q2[qjL2 6U ԷK?7AT*ҾiFMH+iU]JӵViZUfi9[]Էiv ʺqxtH-ޞ_~zoVqνm4$m8*e#_gEc2͡Қ31$VGĺUPur h^xɣEéR17>\c(͒ )]m8>^kL$k se_MRs F6p2@yuMqʪʵA1!61tJו_buHqs-X?Jê rLծ]hd89]s?̭vӼFidܳknTsUKfrN'g"P1f 2pqWc\ΰS>vaAbj].כ8l_Mđ%,/C Z1r2-R5૊vsXE xbd*zZl^lTr>D:6S&:c5ө]tV!-f# J۷8uym"TD9Rϲ` @EehrWg/.Հ:%mvpu]䫈plE`sW. p#m\ dm\d) p5$\ qدYF\\pE+'EG_\\j+6dK,USeuYg{#\xpڌ+W=2%ڊńS/k3WdJlWCRܭRY+.:idۙ Ivl1Xug,]Ջpl:(>=p%qθ:E")UA7WTj p5$sWl|*>iu_>%~rx2%q3,!H0Dq;cWY2l\Fbs1Bq;QW!4B";W#2[!E>h,F3vX tPNkF;AA;t;_r:`B `,b#֌wgYr N<wFG;alJE֌FAK#Yg$<3beONwc=6Έ1x"& ƎWE5>Ct)6O B^6g ;8yv> Rb0a,28gN1̇!j׼ǭlC䈓{V!z^(e< ?f$|fg6%E/q# .#Ha(A<}!  $ Q4~| ]hp,arU~m") cUg1 O<\a¾`7h{P0@HӚsϖD JFfA;O:Z{V{|!ٱυm6@؈yA4-rdlb "_=|Qʠ#c*|v1Al>|v]qAcb(1@)}Z3a$Xw!O="N]v_=adrϮ㹈gܐ8}g0g>#NŞ.~܁8}.$5q3>yS#q{pq]xRGWD>#]3E>:8}^\tÞ.˷֫5q."NQ.PAN߆70Z!=F>{9}g9n /ܳB>;qN\{.%Gql"N_8B>FlsB61vt.[~z]g^ɩ-Ɋ7y(-/U*S(FqgWן>]ξhOT)AY7d"y]0/#E/)f }hM/%Vߏ"5FO2'K`ɵ$ay$S=( $<3PiVKJY:b6zk3'^ GMxDOS|3HV$d~X'1 RF̤R2\"`mePaH7Q/cdk[Y7>jߨ_<i[&(nOZbd1_&R;t~tJʅ = &Z3X&Y8Jc%^EAxU>&k2p39G qJNm}b-[b\c,"^PCtn4vc#YaV]O[b/v$jHL9$?ҞnG7bQs#Ks#t31mCn{֑?Ƌro/R4ٽi܁Bœʝ/֨8$kԢҮ&l52Vj=uAICjΥLnW%C5 )I¸i ~ħ46*^֋ b#S+ Hf2=6"NHkAd Jw""jsZ'YMHW-nvgecKKˣk.O:eI&w+b¶-6- ~g7cm M|Y\*MTP5c5wdblmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0008-Ronzio_03.xiz000066400000000000000000000066141247673406200243160ustar00rootroot00000000000000 ]r8}WxHݫLyƵ챕;h9HH9|68R5UOIFh4@ݯWˣ`qs|DxF?ߎͻ}:}9:],nwzSÛwRەG0ʿQ 1<t5OЏX_Lϯn.OgWSxwqOo'd6͵Vwo.BO>I(徆* $lWARs"e>+5Z*&1iHڥ4Ļ-b)bhꓦ.ϗ C,)l 83NI)p3M$Mx2&8LEyT#̲?.vץ[  ./5蚽(\?dX5le_mSEE a} ;U~wܡ$^+@.pԩKp[J&ۻWJr2TnLg5VWl {};?Z| c7d]ai->Mj-gZVĭ`. 4e݁8 Gyo:@\ݞ]|zoVqνm4ϖ$m8*Ųij1sy\TPiMP 36TVC~" h.Z _2Yah:fU98އK}:zLc2,i8ZHj &Zc&YK-mb*وۮBʴ2ruMqʪʵA1361tJוE_buعqs-X?Jê rLծ]xl89]s?խvӼFidܳknTsUKfr^MOgEeAbH.MT\BQ/[ـ&Hȏa![ b:-ۯR^ 5涱5([Ԣbb+jL-Z'[ѾMTc5^t֢#PAQWܾ l;zP@T *|S=fg*Z*wu"\\ ]!i p\ pfpE"_Eplpecp-rX]isj@l%,m#KQ^FjD~7W,/Ր7=+ \?)TW,:BoT[!s_gY'eY!1,#;l/W}+oXQ|E|{G_V[PvJemFA~jDꕝ^Z Ne*#av&~C|d$V?Ki/Ebco_Rp\I\3W$\T}pE\XFdQ|ኬv^%_'Gg sP|^?%c4BF(ng J0k_ >W6W2w7(n'#JJ Wd|{jAf+H ;ه h i(z't:(|gnqBNLHLvXlDӚN,7kvv^d߉'p h!MIh\ҚH8hi$K=8g}F,a =Ojv{`wxܢa2k#>"e# yO9ްSڈgS" VF>E@!F0D rmqrvO*D g٬=,̦$e>#:}Dwxe3l#83AD3 4үqDֳ <ؙEv]_\#LM@=Edپ R,&AsUZ Lm/ ) xlfܳQB>{DVAr>#_Hvlmh6 l D IO X9m61/L|veБ}Dd> 6Dt>. B_1r1ݘ` >0ӧ="N]v_=adrϮ㹈gܐ8}g0g>#NŞ.~܁8}^Ikg 9}ZF.yx"Nf=)8}Fg8}^x.y{r {F /Z#N׼ǹ8}FuӧC9}^g~޴  ANia/g}F=*鳳qE>g"N]rtv.e!ˆ`@Q;C&َE~#oTLWuEiKMJ#:K#@%PT2ubw{zyif$K"_ c|7d"$:i1ֳJ@r̃ 3BIJ/(lp^LǩnGYkq@~n⦭I?_3Yi_X@:N%BN%&R]Dyz),j,ch%K I*!5}"mbE^yp[(>AK*x~3dzŖk>.(İt-5vMQFN#k<7fhz2}9'16ObB͓f 8tt0`IuZIcMk#C[|V'#DPn4_H@Rj!f J֗AkP5jqOxS;UsqZsNk.gN6|& ̓PK7#SaaC;CG?^-Q[td^[Ǫj-LS+4ǵw6pǯ βeTٷ`:dnjޗT|l vK >+cKKæk.:9ei&w3,b¶-bXwk?inͱ6&,.&x_*O?(blmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0010-Interferenze.xiz000066400000000000000000000040221247673406200251540ustar00rootroot00000000000000 Zms8_%&Ls P 7n%-/V ݧ6fhjwO^핅7uy|;p\4|?ݞ]r??O~qfb?*> :ٓ3qMUxD#vL_]&4? |8_Ex5M}һ~"I؈z <ݲᆼެO&i?OgZu\D; Y7flXH\?dؼ*F 1Ds 8udk e Hl>}z782p$]ЏYd!F&%3WojwAȭujHA%nXysʅaz*:pJD2+n ǚS"ӅƒEXȵ+"; [+D9TLQ/ډQ8PrCU"!y4M gi/ $ C ;\'^MUH]Qs'[o8 d: 4bDbmk?5 -Y'^n<ģqʨYHVJ R EנS8LPP>׮J523KLO@uIngdE%G>gw+ߵɚȆ¦cvzSpXTHd&"Qa/n=t?`g(f"{4 ʂWFmYQJu9v ɓHQ8  -2ў+mJ/U|Iج)6R8CA I*bޱ߄t h.yWV,YaW(9u&v2^a[$K l"s5s]cNYEs(mVxjd-A_TCwp9~ro 9]ZPϏ2k^ y+tWfc_dOC$+A7 ~"Hhnܫ o+m~[4^FKo KoK"^qt\i6C#_dk3CB6!3Vh[*E?2ƣ.YJoKx3 .a4<`+o{;+ ^Z* !^}7[y3 o{ a=KTӈ|3gzmHr(Tcϭ?"i~j<^?,lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0012-Passa_astronave.xiz000066400000000000000000000047531247673406200256620ustar00rootroot00000000000000 \Ys6~ϯp*3I:%O5%Uۦ/,6p.H)Rb ,~ :8z qG O^z`r4=o])zbOxJtEq⣉GS?_Mf7h268FwQxMwA+%ă $t+؟Ѵ? ټW=489g9#"?%mH0IlM´~TDK _81|X8=Ѩl{^!wAP ]]H|1l7X2݊·)N0B@u {7ZSY&!Ք]ΧV2s莭#O((Q3-7G„.0Ab&,XYJ3yT(U!!HP^;:O@wm??k&&rIYjfz=Z`cո^|mjW$\?}DDth]!0ާ+79Y :J]I\:ŷ=e+wQC/Z$I}eqa\d߆דPeLQ|I6O t)I%)COsY,%I@p7t~H 2{fChGn ė'ۙw oPz.uf5-x}5a{\FL뿹Jxֻ9Z`vhF`!J%h/^o?L.E!D>?nM4Ѝk<&ARzq5z;_~eI+sZ8!H!TUx- [;p_|Ophl,!!ifjf`Y8=u(SvkqWk8؜ G6rJ[Ͽ(eN.N}۽U$ 5%FAӇjK/Jc~{1` 22ۧ+ih;!e=o_S+FWM!݁ Y!q똜l8KB=.98rD][/-$P]1kyZK]dF3ٖ:D̖bKZ;3eA|zM[s|Zݹ3L旣k)T5฀p֥-Z8{I“o>~*Vmߡz ;1:\&LX3/PC KMb"-gJY{Xd4ʼnjZAQ0@і8\%Uazk|y&Bj̥d/ eѩȴh  MbøkQE¼CS݆bdQv2 XْuZ9r+k)CZpOEJ\s.npP`){]hlD%`@* yeV9͢X'XPq CYlR,9=֜n+h AR@g+6+]nZ#G/X\ V{3\r7DROAQkS\RAj*(R?ǃGj42&(LdH(̓e=V|3`V6 =kgcIڃMW;C4AKH_Eخz櫯B٤9kŒZ\ j821Ҋhl&;c^c3;|]Z_--,l:Ϡ܊=TkE^×cT~΂ԇ?P ãXfj'-z`#Lp+R-#̝Lo6qI,Y'6Bq;7:j/H aAkOMKESQV'0MnNCm|ڂHij arXˀBʀ}#W*7OM4\yyvQ4Tpg0Ý!kwrghYXWIU;LQ{ iGN-n/S*‡Eζ,Z.}QKmZaqn&ێsv۴׶ܦ6m8imE3p;ZMnY|fX56io)3D閨Xٻ zFXrwhKUA7lf(Nkb/{V)ꢥ/<?/@THeNlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0013-Passa_asteroide.xiz000066400000000000000000000050271247673406200256330ustar00rootroot00000000000000 \YsH~ϯ%wU"RkX6 :xH#-$ROk{#b? ޵_ߴH/˸Sizk'B;@k?+N}<ıFn}qlz4!QW]kOA@iL<^ĭ6>w'?ژV#xĥ&,S$}'d5IHTbh|N\ 'J%&Yu@?6c˧1]brm}lrwj?0d6wt)Z810(=˨j޻e,IO֤Y׊~]U-c`e ̾ kFY޵PT/ h1a %4T^F+yRA1R9W !&P0^f;Nq ~~Ӷ ڽ fw=| v|8J3u_=eǢFӕ!YXgy%Э3嚴媬]<(]h"x* q0]g?ܿ#Bhtc08~Ix&k PaEdIpve,gBh[VS +'@h[͌ƕ\HѦNq׃8A bg_"''!h)AO;TCi4o A8}{EIݯv Fl|Nalriz`^m%Ziue+]G8jԄ|YcI:vWz\,b(D]/-8ax`'0v}B6IeJ6ι(R$/T͑<ZCVVW.Gjp#90=κ4e=WKR4g(dx%n7<Uwhv͎fǪO1=+* V~$(^`)נ͘(yəQVLBq[@ xT/!iKӃRf W0=-B,SRj~#ۥܩŸ "ȲhG1o:0fZԩEQCQ݆doh8IqXʶL󔡞u1oGw4nLfnNVN!E).Q"s<+,xީNOwj}S-ZkR'齕|}/GK9r[Iq\lgZ j!.←PDܺ`~Ys2,4h7s3 U_PuaZ:RV}Vfwi5=)~ɗa4=mGw w^5 3)MKdXM@& (@YT+¶Ģ 4 /ՍR1d3-؜zYAszav׉Z Q2c < tVrTTulG¡}j4wIh5̓6j`qGmD'U,_F8Tl R $3[e,\SǠAM8Z[ SXa[@Y$f'fYga{% &kw\wڝv5dkPPi |qjPꑯ:*V ]GԮ2ލʵ44s[{0uv9ȜܩŷAJ{ǔE݃gL eYEċGR[۞k%PͿ} Plf4 T+r ,Eh<:0λTTF%fdbiZR!h.*#VGbF܅.-Z, HY$tp#Ew-%l&ߨ7[(Qix!<^k8P䴘QVTp9^"7с#w;@:*/WzR2,bܔ} HGLyQMј!.&@BzkR(UodsYN[*JdYGY۱MZrUőMU͟rռ, f(?E|N;Ϸ ۆC6NT VFujF! 6?䥬RVCW1!-h:7Wv%k80|}\R}s@k?,~r 6a0oJŬrYw{1{У* u,'|Bxj dkr?6o wQ{0%zͩC< LuR$}hA*K4 tM 'ؓKm‡F]7J""OToz\Dlt4Ov5pJ _+G'YE}i׹Âd9X% \.%5}Wu(³08D0X0/2,;([s9>a \ tbl(oV ?F5@x;Zqw=rɝAPfPX`Od4X"/JZ֩bE)6 V*t,F$W\ֹX,uE{sQy9G p˶{ڷٱG| =K8NjHSɨ_ɀaEkd2"NƮgydFE erh/ "_>rx^W_^oOԀj *~=^:05]v=5`rD;_^-](FN@=Ȑ3bFД B5s ^ ﹈@e>!GHt3h5?!ྰ.x])鱖ibc![|Ӓ;IQdJj7MI" zQxqZ$,$43IhfFӋٹqٟ;I6dNV/yBHOj䲈4WX2qYƥ)ŲTD@DX#(5bl#a-) 11ھ6ImGD}~VFkMYyny$&&'A{5zMB]2DJlm^U>(.65J6DP. 2Z)Yǟc!Pdz%*Dgf*4 k[ >z. a{+ قt'Ť h ݨ Ke "IEEe1Ոe BAhleިD/P( myY+[zI-oNj,T)!bVeјz>oWdxnQm8UW /(C5+CvY]FMwGMzǀ&itc7&) ͒J[gdD :7UX4 b #=V_%?K6SFlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0017-Strano_01.xiz000066400000000000000000000073401247673406200242770ustar00rootroot00000000000000 ][s۶~ϯѻ-RuIQmyi,i¡Ef#*I9qED8-o^E!CI#!;4~vrD]^://̮)myG7'K}V`ەڣ!o0lX[_E }qi6\>9`1}Nr^, ^^%-'%aC ɍQ, hI~޿~+JElmp" p5M䁦Anx?bAէ>4-5,5-nrWx =,?&P)? 2~ǠH1(ң!zEbT/sؔ6 @MOd皼r H F }&aR_ᛍzʴUJ%rFFPɷeO]-)ҲEmz[-_7 [F>y@E1H}45q;&s\$[m/&>嬗S!uvYSzFhjxUw^ΫL8SuaQNP>N8eLxB\M/`̣>QpXFk ^8A0 NܻX$Ti.;S0M666Z hZvIlfTuJ3`v>X9`N3FU&X zC;>_T`j l>ͮmClF4*g~ 30ܻj0=+7V5Fh52j 63iXva)Lc ls8O C;}fY-v쮰mm+o@Xs[! ^r>ud0DILąg"Sޮ$ep6Mw]r:a?0*GL#Be$yY2Ȃ Î:7b+F BONc )4ʔ a#Ҹch],!t2/HU|jo>!#7 Ҡk 23cS &ԑB*Z}+5 w2`D4w{,RN.ҧ3!Ⰼo۞ͪMcֿ"I8b“H <[ iV1["M~ԨY"Vf¾Ȓf(m0c6He%.K:C澼Iry1p#"ј_ˏŵjR& pE]aPفfdƥV<$ډ_zȔcT=rڍ9=)-v6hmKĬyBWWk0QwF)%kIsG:m|n1H޾1^Դqtc< b e5*Zg^[/ZZc}@kߖ̊&ddPso>rYLŢ9=$^0[<࿲E5CeB*Q/Elmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0020-Acqua.xiz000066400000000000000000000052131247673406200235520ustar00rootroot00000000000000 \[s8~_ @Uwj ҳ/*f|Iwׯ/`tom#\>I/}lY?wZij}>6/}vy|?׫7vu8{GQk=q;6X~qwq]-|-wޓmE(C;»>VҶŦt?^dNe|ڻ(,Y##!7"H\/xOn "-.5P$Jꡞ:BӐcI%6aSMYU!a>Yl2e?tD2%h]bIRn`7~-#}"ΰuH1=DRȻô}b>^,3khn;rKɦN,'3m& $f*1!~q&JEX#9quHj]}!$c[+ B9(9#lHɏ*?/6)s%x~7<ܖ鋿VgS>`ϣW dz!;vWDس1\nXeXfJhutq=F0DOa,>Mh!Zg& :n9IH844Tzq8( ;Cb$۹+eOADlc0Vu˿U4ߎd# -z-Wmnû2u@prR]żAw4ZyQ5'^1QL9׍BHLaF#N&ӈo{\bfy!˘ӄhLWDq4.6H3Q4c>!*#@Ulw'S_4> DBKl[FATdLB-է;(lBERR*5 6eWu@;(Y#R}ˁ]f( tiudy7gdx \e’@O:Ќ. YYX, D43M Ÿ+}D]:=ǞoTE_Kʝ?}O~f\B_%,of } ߑ,q|ߌA|ef2 E#U`C,B&0UK,YӖf !p pnjh!6dC fA6B;} A*͸4K3,!5ew`FZB;03"ƿR~Dpo-.ZMX9W-C lFDco?͸ C}B nL>zKU57'3!p׌5f$ @ Gkf @(C<0#Zf, t KNw fIaGPSF%13 HR^|4Eye^ .FvtPH&K8FhM:)6*lR1d#&]1NQaI6ܝ) *j*haI"7)j::i&f)=RX CyC=}"2Bt8fʮtyuY%+[^5K{0)[ӲUYKnjyV3sJ9%$e&bLtN7Lj%Let$=L?!?]V^I$)#Si)eVV dm$R.#gmoS21ڵ/]Y$ST\HKЖV$ye*lU֣;,cI7IueZԬ{^^Ѭ'U#91rH+ME3 Tʕ(VTfݔj&&{I1#vXHC4-^   w)<5|vfKh!kv!raXVHQ^JUvwj[qV'j\n]5, {[ _sh*!WN|BPQ!G*DBUlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0021-Asteroide.xiz000066400000000000000000000040111247673406200244330ustar00rootroot00000000000000 ZKsHWh9 ~WN6TZej3а6뷅FdHV9%{f{e=8,j6<,Ua{wp}ppf8zNLYw|T{ğY V 'N"{<3ő7iAo8L11z^ƨs#@iBX)<]᦮{gEθsߝvǓܚ0įhIOJKӍ!] rLЊĈF %xVN@ ǎ$9Ē>wK XGq˞QrMId:~"0"|q݁Ō䲙587i3Ŝ$Jg̥I B==ydIoR-%BK`%,7eE^+EK,K$. eԟv=\53FHgTcrń؅e/dm>3(@)) hTDT$m)¶͂$q0h%0C8C/r C 4prK(e]hcg|?oh<ﺆjBq?3Y\H5Z!:,HCY5mB>zid /aO< S;59*Ԩ[J%RZL7 {Y,qܝ S+:"Yw8ˉC츶Ҡ T@)S!Ѡ67܏C?}ԊC-n4ǁ,RFX6)3i@r2d9 3 aRjI+ELBSFpVrq&ѓҺY+n8UuLq_666*wxM:;{79 9 }ړZ@g%QEShF8IV1mY62Ss X'IHUU:qC:GLߪ/y=1vՕD{mkRn:#+b ..92vimhrv^=Ac*p]V2"IʶP c+ !}UbY)xXRXyOcEќXR!H5nHy;!h-jYva{F#قEW_G"',ҲsY! ui$XI#a0.DҙHs# JF'j$)/P &aҠ}ۓVJI{5ݚ.Vm⫸l%ʗ?ZNǜ oz.4un?|~|7knÞ͒33|Z}TWj?qN*}<±kcW N:G7GGhAiP 'xJbF8H7䵿f}4M{y:r5־#xido>C>#mH0fQ&!1Ad$åa$ht&~aǞ.0ZЍ4ӧh{#Grۥ23DJen>Kkw4b$]N-oc?[&%l!)ιw߆|U5ԕ <,225߻U@H#Nk!7UVin$s:阢^@'k'J@ 1G^Dj A98[MJ1W) kF͝q<ޡt<>%-pLln'3Ki2"%h|^`F#5*X^B^²tB5 v+ U e\NMUkQ[eR0*$7 Z`#Ƴd4]/TLB7$8GL,*RX2^L^J۪@7}e&3Te"{4-ʂWeYQJwꖥ@泓'Ds5Z%2GU0@^̮*lpIvAԣTľc)߅t x/yWV,ZQWh9bT[(K C= k#;vEJJ+$*hT7 8Y윫eq?SUo 9] Z5PϏڱk^-y+tm/ۧҍP)$A7-~E֑[nܫ o+mz[4^XFK K[oK"^Ԯre|- mc۴Xm]noȴ?zg+>!.x6C1jxIԯh(dxY,+xݼSM~䡏<gq- o^C )SGBS4I ﱛ&ҝ,;dJk OWL骵x%u}Ep*>t`Eadc<P*5lg71Q{a<10JeO '+P?FRLEbfϛqɀ )x("fa J~H`&0a?}aC!!qz"NN\鑯hFs1;;wӹ^˷J~Q_:"|S6{$*)Vή7OGBgy-U b쟮-#MJwlUܱgQQw4-O#|,lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0026-beepA.xiz000066400000000000000000000062061247673406200235450ustar00rootroot00000000000000 ]w:~_K 9mar.gҽ/>oIWeKcL6 ~'ixD m뷓v۳޼yͤ׳?vϷ;޼nJmO9}l"zG{6lS?hwhَ\ľߎ'"los=~G k }bۋ6w$=?1^+zhd%pi$aLU>ӗfP4f)V5Q'i:[,o'%SD:7Hk/\ I^d:h.>z#q/{`BeyG -pH;4 s&4*Y.ƬLlOo$ ߹LLf>6Ǫ &g 3q 6,U/jYvlE t$(Zgg|}s5]]ާ`CW`Qoy>ʢ' V^lӡGh_=T_K'9+{BJ QKR* VvnIa߉'v28LT]hO/]%K6G`8IhŎe`2tb!:WĵC!N Xt'tנ⩖`뗏clćw: ɿ&Oe>Kϭ 0"6(/Zl{_=W@40˦!/Dn X8ABB eAYAзW|Rr|S) SEsZ91yr ⓴z;AMZJq>SMnӘ֔SzMH6|-ALӇ٠;zuw8jgٌg Z|6k .>X|z>Q(3Ivb$l[V!ch%]iˤxn`ϨszTKgK9Z~&P/5 ?}B f8(!30dcJxSB ߆`PF iAQ,+rZ7ѓQ`6k+ TZ!,y:8<!KK'jY#HE7/(fc{trq=a<#>縕#CwzYj5iJ#u &h4W > ZP桤)0'ArDT.gr)@6DdP;$溲lSlD[RֱmG@ AإnAě<xL h&a*nx3ԦJj4!Ҥ`Ҥi72L֑Z&1R-f'] Ӗ1kFZ]3mb{ ffߜ;v3mb;03=3. & V]v ӌZ6zMPN̬lfԌpߌ/#3 %ʵf&~Gf ~3ʝffuOL- r85kf`7a3_3Xfl߮ߞ&QL ~ ~ Cc ct ˥Z?~;0zP횙X=1&}3 _CW􃙝 u~ǏSz9{?ьL/c"?0;ͬY٥䦙u kk`3) Vng4q;}cH넗f/ȅ$IfYdOiBw" ,XI(bS%"̯^E *_%"]QnW`w ğ_U߿T^xBA?5aIMf#PxK%DX%?E.^f/uWe/=,Xm)fUf!|5+k1G9S^Jc]Nۉs=/r_ꚼp=YRJ9Ɓ/)sPSx昊RX@1X}3ΖZ/Pq:I ӥ+OLeKG#D PtDGһ,tx,B;QC7Q""4].#[M iVEj0*L,@Ñ:S!^S! A⧤Bʛpx*e#gB\YLUUGl*{P.ցl9Gs˒ vĞ?C.&IBhO&C )H3,LKE,WZ;qsڹW;qswN΁y{=s }V@Ӆ\}Sk|]LtQ4G'YBelmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0027-beepB.xiz000066400000000000000000000063421247673406200235500ustar00rootroot00000000000000 ]s6~_{*S?ly&IGulɵ^8l%R%)'@$bdSc XŷWGO,͢$~~8xQiqvÛ7qv|39s<o >yUޮߒK'Q\>yv cxdh̃(n_N/fl$8X9mB>P,ty|ߌoדv^JWY-; ~uoXGq5sW>>gKee.9ZLh޷4°TS-*.t!v/ۈ]wm~z-M=|ert9ˢd]3|6c9zdAǖ KdJg; :6x Jdb?I{S &d7.ٿ\L}縰^ b} T~bF;{z&Nd,Y=*6I7K>%{.yp|_].>kd*+hn[tq."*\!ce ,&|1$xXsA1J*YF-7@>ckGʬNm QR^ Y8CRG鯓ٍŞ gxR?q!-hqDEM޵ ;aF=c-YlTo֫(f< S:~(G! ;岙z~k?{(ںw+^]D$eA+?z77/υ22s:&OpXd,d#W 96K5e<ຕF/ J|di2=5r37&&>cRBocu# y)gBm}ȵxlPm%+Cj*QN %'Ҏ#֝py8b\a`Ĝ}n"PAO B @aM9AT*m4!\˥Gl@w4 mr< 7UވMe1pX*1e?[%_ <~%1)ppi8A~cr%_%joRR1#Ybv]1R#Jڂ@w3$u誄fHц<5"EN #fҬM!G2F 9p` KYO D7=c> h Af<Ȩ90m>fw|( O5 1aU~ SӃo`뉨k͢ۃ'7_";`DuЇ&7EsAQ[ghC0o 1< '4A0GcܧQ,J4 `# pԷ`"0O0\5j4֌r`xD_$09#( `w@c(#{w-zM !)cKtðw; `KDD1%x`;akKFZ11Ek&F_`7Yf 2aL3"wU=(ҬҌ<PvrW. +xI,[la͢2JhʊoK Lȳ-LdiM߆HC'cCo'@(jt!{U #@X˝hd6RK_S.]eoKʥm zKr.|'oɹ<_ 0Uԃ/QN;*O_3u(}- fH ~ om|~_"'&p4 }GQ,DtBA.l(u?/Axu |22l~Ʃc*`ܝ@a) ~8 N~H>L襅(TH엨<- ع}J_RDzO_xqW|nGwb|7/ FۄAQV=#K0㛔my(݆͒G=*}Ia _*3[&AP9 Rh)tO42舐]~η/8M,8x/M.δsn}XS=z~Ά'Gie~P,:Ԯ{Kq>y@>#xLu.P}JܴH{P&!>vȚR@-l(ǫncݍhz)qk:DFoD%i<ξeA >Y}^;/ɈnndY2$ez=MTp5W%}Raġڎ ,OX_~ ??ϵX6k=[j&*K Jhp>W s bǜdef^t&iʪ65UhV~}i .(JNP'EZnxz g6 lI;@M|l?`5{m0b$ $@rW38b=Z y1ri2ԃ&Dp`RC6ŌZ3'Uq[nU/0nc Q |Y/Q I(l4RW Rkj3Tl aLљ,~5I'h+o坒آv$"mzXYy=@]9Qڪ:)9i m3lSN1l\Lym8ngSb}:a‚l إg9̄[ DA7%;t3'@gn=$gn ǖFZ)%(5.e O;SRː۞**K߁s7SR{&` o|uGyS q)@;DѤΔt'( &HvK ɜuj&Tw?&JQMȈߓsMgn<;Y~pP ucpbJ | sQ;pHuK ~v:m 5!ى}}[[IS=v?ZF(uyS;t?wYutEBFG۵O~%ld뵗Ywo0Ms7G}sQ^/|A|4&sios.}ΥϹ9}ΥosϹL=\xvgps;%׻ĝ!B/*:ƗU[EC k + O`b~'maCLQ,!0]Di E<0ֈm" C961 <ڰRo*Æ"ٵxiIGO=l}} mWgнP2ou -~oP}4qa7^"qKUmC?jQjE-2>dCjw,z= -.R&֨]:ri? eHATlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0033-buao.xiz000066400000000000000000000074211247673406200234550ustar00rootroot00000000000000 ]rF}Wh[WjUkZIN%yAA$!!.:osIKԆOq9䫿(ز~NpyAw>|zvחpyw뇋{n~zAS^[Z[_0˻N?_=k'7zޒ//W]9Q4? ݅u3>_YǾ' 5Zm)ۮs|7qnƷ.Lճp9 So+~'HE,qZ/0RK,2J-64 UDVz\ZuVPLc_`Cͪnוty}wjr}&C#C(ݥ3vD6íOWjEďSYH>Eaph37pඅbRU~M;LPHӸ<]R's[-Uٹ\V'ŬV>_D勇X`uRx AhzА[ݲ:b?$*!Z^g_(4sj\,m[ɵ3|yܸhFsYx[Q6Őn bϣY82\:=;2a~<KRnmJfEMeU8>E3g^8vVzYX֗B&7:fWB~YFAVs˫k8- m2ز6NJ+1Z|Ysߍy[H2% p1ƻ#ّ;?U~I8?_L\|eT?d[@=ٖ/t$f #Jsyjj?FN.&^wɺDT8Zs<WXY&Ĭ 羆DT|L~1"Ck/Yb f&l}RTx%]-D,& (V|y.=]`VCm+xMP[jqf?bzCn wCpqYN'&㠻NFk}bsֲbuTNFKP4&̹ O#zd~7oOeOC TF6ڮ?OUHfM^n1kOQSfV.mG;o|*nz=>k8^NPt΄$blj`R6ɏMʫlfu &|#Vu*kG|(d2]p3OV'3#\@ ; YT3Vfnff|ٚ1hfEO`rFfѡb匐٦L26m,԰Gsm3T-=^ N>X)b#l+6G+d 2WgJ^fY~桘em+Itb(3U 2ҮfYbs.+b'2K|Wį_.UzȿbzF3UJ>25d~eICqW]+%Yd ʾa9on, pe gc-g+* pEe,WLvpEe6g4`rpv?Cc93!I%d.J{9aU,FWrip%[.X>Hdr0bSВ#=:[I$%ѩ* Ta_#;X!vіH%t+,W#Yі\.q҈Gr.͘dF{%߅5quG 6lNjo5 ySȫPIpK=W=6⸘]<[gidKR?D 9b̄#fyS0K-qa`Ǹ00AO¨0B69ېg b*ŒiˈbF1ꡄn"nPfzOY "kZ=DTЖƴ({L!Ξ #OyC=1kf!oϦ lUA) Q,DB=rLn#6* ]7RatH cD >QʑS̎+3"UxyEskG* 6S<}fIZFcD>/\2gV(dqF8 اcF>s\/>*77n B0`đ'F$ AD>lfLm lDF~zecTψr[l+Xxt6{, ƶ rS}vWg oaFԾ4IJnj12&ٚDr"cF: aцAlIBR\}2fH}Xa#RE(وgW^6$ٓ0& ,'3+}.kǃ7f E۳EۋFDؾ.fafMYBX0|Fڈϧ[3%AMN<{*0:fd 3F|>}Z|n#>]7(36fx>d f0 [!Nu-X)ԷĉYPTz_K#EԦ(+$RUr45:xPeƵTBxm̤O.?W6} $?S}f4&2J"SnTJJݣB m&%q7هubc)=}C8[IVX 0;*'( =wǣg|!zIN9S0pǦ ɱIܖZF`lWj<yYU:*.$j(\]&#+LzQ'[^iLR5blu9,M{h"wj--emIsHG!Zz|TZ$ IJuiTS '.Rn|t $^Z18~ULoל..72H޵M>Ukj<4W6ߐ#ʔ3-$Kw535U\2-'ۜL2]FԳU5ժzUIZV\X22f2z=^MϿ|O9xI$$b:O"űx)'i?) &'ˏGeK#WnH> Pۿ\^{2?GH_O#H#W\NG.V}Տ% %9H c($? 7#.Vwyaä7IQ̇IAHwBa([i9`7l!]Xj^ }zռ,yW>pޯ}_y.hHׯyT ~U}f~uM(_\׾]brvXĝg*o#.%nmgԿ9FM*Z I 򏦰ņ{vخ,gkӞS'MbK][iTƦ^l[%M&$*.aRD7hk7AIRvB>%_^2[7/-d DW@/}՟>5㪬b,ieMkU%)lZ ^uob K8=7q?Nlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0034-creepy.xiz000066400000000000000000000105711247673406200240170ustar00rootroot00000000000000 ]]s۶}ϯ{*S${&IGזƲtphJHR@9qR>.w?YUC맣ן3xiro޼g0ݮ.~;s"Ûw.?zX󓿼)91 4rѣ5W?8lQٖhо .mRYZb/gӟ0m*E^+h^~llޝZ8htWMRtx3%#xSxԤ:Hp"}سӖw^USiV6DzoWj4(u垤nrS&Rڠq)ח縢ƎocmʄAlUW?^\u޳^Tzb;`^>_ b,^p˹tJgXS̝;_6O?q]8,4Bwq3ߧ./ʉu*iBז @82MJI/)RwV|Zs*,w9珻k.e8 ْ=>=U:V?tu"Q?C\?>~PPV}dbӢN}Vzo)py[*,'9/VcِV&PX\_`Cʟ0{>Mw 8=[%ofሳ/q*@1dZ'<ԦGk"]u#a||j<Ultu,6y)Cl1熺Rp` ""?#ɏL *g冁SWޅ{Aj7E@vE¶";өe+mjjv Q-۞m_Xk zԷQ#l\1Bk#|`1BgFcM6AXam!oC%&$!"_njm"b[d}g-!Elllbkggp"\qW-gp"\qWW]\u p5UW]xXDǙEl8[+ƶp"\qW-gpgzs߅>UJѾm)~ı9jb>|Wb[6a\833!"\qW\W-kpōN pET;cka]OuWhd`?xj<5ЯZGh!dJ56ݭ# :bit13E,^c=`![tCm @W/-c&,%Ѳb|E ; y/vbMyxe} M9~B<|D׎hB<|*Z} Xk6s1@^1\v "H٦Z\&;`Q LкM5׺XSNU-1 ORweelb deЦXNTTn43';:Ӊ#Uc'UBpZJ*C5b+?'D+Ɵ趌}|X^Q: xE:q$bxl]IbtsHѥ90: UdK5)>KhkօĶ6gg^^ylxDC(UC$+KsJ9j-Qks1ns颋U:!bS=S` ,};% Zjl醚&7t]Qӯ+Ǫ yL\,/6 Yi$dK{ X&啴6t!ԮW &QYA r4O \}[jvUPoޕ_Kus[GJ(mnuZͅ.wY6~k~T2>_E݌%=DWnZi%4@baFL5qEsoINRirn:^qy[sa$^_Uz=u+OtlYd_+[HU?8"y,f(b21ɝtk% ه]&=mAFWQb00$_\(]}$ڟmsnI֜$4' I,h A絉g쉅ΒڜwslV=)j$ }F2|mv!2]Tws|\aݒj8y%]H؞8yE`OG駧2NPUlCu:/L6tA7q#M/in-Ѣveخz?{ݬ=n֙Bܾ
]MD^UUqռMZm6jކ*ݭ::Ws8׫՜mk_mDLvC4e`$'/{s&zm&Duxq1|>v1`hT.dL & cZ"j 0(,$Y:[&~fzl`񭦦[Fb8',2H$ͻE=/iT4ͻ1B"\&~(3*@opט/5J͵j*rYnwK«Ƒ,x,5Io7괘Po+9~( 81#k?3A`j YFΩ3VbKPNh /wV0~ٳХa:F}T/ټVlMH$s`S,؃m)$I˔G* 3P=b\eʂ Dk( D)=qrZ̐[(.T<#0G]`amBB;8W ̵b=ߞ~`! ~".ڳLxeAĪ"˂#*Ѕ0r5^[TW M/m:*mЕl}ɨ sQ)Cv1VVn/9 xj&n,KݤUa1jSZJn&ǒ7>XG]*WiJUڗҾzvWȡjע[ݱQ![ uUrճ\,ׁl=u\r׳7\v׳ܭ,/?xa_Z!kׯDp"qL$RA}tA|UPmHvKܣc/qꏲDCu}㮕ޓ 7[0$6@,%52$Ro˚l>Q,ÏhSñ MɈ ~ }s# B@aFg (`o0o%x !==?/Ҽ.ͭBm9Sr>m[R24^ȺɩqU]+*LYR֖*]MG ۾QUt-̱8y6U.CgExI2(tp!#/|'CZ!rXsH:󀚧Q Dl=`,Gk߼N+)$=@r oτjNu-ml$u`~NX v i/4IC(v>Дk  \ĺ .p'병 V-ڦ y7! U /ٰ1ѕa! LoΖcs- [{WUy Ql2~[},FeP,J6!0nׇ@*[%`8zGYqMNDq A+?,B pt喀4iJO7tȹ$֏3uw+Z3wM{NM{צG|& ,҇%EX8O%Xl2BW:u%'nCbK;fd'z%,JBE>}s*DB't.˥QiJ/Xk˕lr0GR\Uw :0%vR,%H%D#+R'v`[ge c2 J6BB>UٳrQb`~  l1^J rާ3V Ul5DYMAh$GJeaŠA۱<,'b %kFFz8]l>|ڝ/Ҿ`@HI@:gYz@:pgY)kYHz黯_1 O8]d>>uWWs84dW.27EG^1 IDsj Y/qƏ?y_\v3^~7ґm/_G6T;w?dR;C/"Nuy# άoLqvt<ߍٔ/!z}b\vG7іkDf a7a_2ڮha|tg." ASӝ #'&^"Fqx\6bu,bj%QB? čep˚ӯTcv |B7(41 -DIc4PM5@YEl;0C ;xfB 1B6[7FbNu~u]k,wuHpqN2W#өql H\]`k3JP+i5 \'Nt:?\t kO봯JG1-ƬMIx4?f&qByl0_,A8(ᗑYxvlN㚾w+("QfD^$~]8S#?D(馯ZMjIop> Z#Eڸ[Q Ɠ[6TU P6td߭()ɓVLò")-1%!ON8֏cI6 v3}^O 4}hӴeI#5tzÐnf=d<57hz/X4R"lyLG#G3" `z%?Q Q_P_6!HOknQ?tVбac:ejEi،qn"7?d^K#yNex#O?k0`2uɘ+!z}i}l3l "YҝhC& Mnܖn4b!Rķ%vw3|~a:G1*ݩC>,Ï ѱ4Z),B'ApB))*uKs)N V "A/6ÌS2Tnf_?Ԓ=0/ޒG;z{y{,qb0B(ؕuQ*'mrU/`K|(WDz$""O:f!!FM3'W$Jذ!e6qPH<#9`@x.%@`6K %XG9/ _;p_:U2е xxn:;\$t +OW~>Y JU1zヨ*}ei}FClO)~gWDAiX ^6ޏazЎ ;+疕D?G9?7K`0gG9j{Y7*clP8<+qҜTb'ȳtS(D} lbYpi*z,Qjz$f.C*:TyZB-{`Բg fٓ]a%-8Sf9ִ?;CwƼ| {JY@XR KISLmcU5F~d?ѪfXm8V=s#欬VhX_bhDq+QL^nu8&r ?WOe@ V5TdՔ<ߐI%JjTT5߰b)Qu}V0.tVDͥEiEvnJ ~"eG+.*VĵϭHSY͍Y;j5<}tMO4M4M/M0`vA'_\Ү\Qu d\Uyz:yzsaG"˚z;5ҳgv`=z4/Yn~{&K?橔=_͸aF ^n;DI}\ֶtf*Q?t6,ba9 2|3 òa9a9ޖ}6лF2"۲bMffs !6B @+{Cς(֌oYδ\;+$_4, fŵЂiㆪ)]3lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0041-Scherzo.xiz000066400000000000000000000045541247673406200241470ustar00rootroot00000000000000 \[w8~ϯ`yoI6=l&ڳ-XmҲ~el#itv<54i4I7_3 #j.uݤ]}s}vC:xxc|} ~X4dZ_Fxϒ2tcW*Τ?-q)W h3:j䦿v]uh*,=OqU47dO~,"$!(W V:bmN+p逩$a\H 8bw j?OFI 2Hf;#?U- N^K+74I䛄]H UY/ C '?ZIeAwX^c9,6s'~'/[yX ђ"Σ2D"Vza# ) ]⡐ sU7vY v[ۏ#lAl胶<~VH׼u-xf \7Gf3/'k$60F˙)Ep}!/s?^"t6pA8Ê5ydm/@1oVyM,8BJGzﺃ,#*n;WpA@/Y66t#}Og( ` pn(_xPmC Np,5}|z, iW0q z;VL i PJv\'a|,gNӂb;ȓPEqO=IL4 Rf=tL;TS&4i#6 A- 1Eeф4Dwb;9\=?P#8w댺3T`(a[GC6(&!hW[hd(#>O_( .vImʞS!̔eKɐ?gu44~\/qdlo4: 7;i֣ dYɀM0c))I%yEɳcI7hI7 RJ45b";F. Z* ZF?ͰD7(T+;~ Jk(.dj0Z27aBa+@odXҷaym3BfTCAEES?x X^>EތGhIUK:5m);iwo; l0NFnO 8i/[%O-;LHW: P@3;Tr3yae˙4e  Ǵ bfH cRCe1|Gi9 '\:Lu>OJ9~?F $Eiᙗі5-Sip8QU[i\-F< f{Rp%jM}J ᘪ.@AcFlhxaV5$J{(4*TqFaèPl +R/R68o! @ɑApL92}]XrRiE|s{uQYt.ڏHgj[δ;j7p1?ѢOw~<΅x6:,zB?γ(h(+(U|ĴiaVw[Y ;tx+AɦM})Rө`tj^osjuʦ?ͱӱďC&>V'|\j?xknxop]85r~Z7 2GZNǂKgmgc7$"~@Ob2, di.r@vETN4_oh1Msuo!S_kk>t{$E|:R!?>X5Tz6#aEz_43G ќhK"Rom3pho‡[vE77pClH_$At>Jch7Em)@&˜hZ@_:y?βT{U:|ѴKUC!{7v!޺N 8_#hgoY"TP[of \sŗX \s@G$Y5 öQGlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0043-Grave.xiz000066400000000000000000000107061247673406200235740ustar00rootroot00000000000000 ]]s6}ϯ=H}$hmy-{mCKV""~/EP$\QS A܋?ώecL©<<>{=ӻwuzy2r58)O7۳OspI/UyFr]1?]^_k.0x|?YEޔV ͗m[eS_\ǟOK12S ަ@[]Z,CU0yph>~0rZ, jk4O򖴾M{ر}p0' <ȹ_EҾ;68落[z^)Ggɺ̬:IhŮlʨ_-"Ně:KoQ>^E7jf` ߣLsKiǦjvU[wh1|#/ҹx~v)zٖIs?^϶x4'k$6e,Szv:%:zbǫ2 -BV䩘7f.6AL*G|XC\8`twLxZ=uLBwyRPn<ޒ۟ UOpC)3j?L}/@_% Z+73qjYV@d)Pfgs:8O<{l.%(i?>A4B[}KwyS/b(j7{hv(oaӀtӬƬeC&)Lm,ڛCI>[ZR㛍\n.GItbؠBpB-&ܑJ_t c"bU0%"ٺUjL<,d p4tֲjUK eU'ڠjjUj6U=\{6p{;}*=sa6m3S"Tj0FbplHc0 @%Tu%`\\qum+1al\LWZ:U62Vu%8M6Upoo palN[ +n-45^5!,m_c i\ 4KuغWl]Z16x3Gޚrýj"3q}f+E23o>{]&g+m$1뷅AnC<^k|.@ֵouucsW4ojh: |Ewp|3}f`U_}:8\}b͌U~Y]+W0s.~ m3`Z}#_qΔc>}~WFw>/eYsl=e=+gXc:@_XZG>0;;#cGn`CXuhOރɲhlĽәCBCnQ;`Ȁql9S XUg SE4-D tyܪBd=GXgDQwF|=YGg6;`aܒ.8{ǘC*gA5w}h{Un(anZOg}5Ou$PF{%_b u1!`.}.Fo#r;و96" .(WC "$Y$UvZ3Bz6b2㕁}`h${tۈ^6JgM7b#)A>9TcϾ3bw|eQr @ "zߪs%[a-jS%stQC?6- q\ F?wذQ>_y1q\8F?ǃڈhzq,H Yos q@?FU8rx2d N̂aFw'=U/R !,4d13Hlg-fSjYуW fh(Ν&;uOȪEJ./M)A`ԕ_Yҿ O;Q !MR=SV Ŧ5De!W3D-丂GmjYa`>kT3ef– PsLI(|ŖSX$He| uPhz*i) t}B[&PxSb 2 JNF{*B#IS{Q󀚜PAS^DSuty-$e/+ɦJBIږqgeϬSm)'oS븖+L0a툄5u9T™)Cy!MU^jIeATPpZ)-[_dK/Dxʰ\gy-4)WW..O?Ǘf7ήSt*`"Ό3Q :u :MS"/ADZyǬB8_+U?AU:4]Ƅ< CpRb). e[.C݄]):!UHXV@i2"WD)Y Z7J" e)wj^l:^UrcP_"jDM M)hOʂD2oA3u2grC[-!HuD (w.Ԍu Pl?MB,[F2QLJP]9dD{A+/u}o|jlZT7WE}>xwPcÊ@~yPB߳u_Z:ShҔߪ'u_&+ɇuSj'|7< ObCIj4 $@6|əCGB-k14+ B?hn:wGБPfrߒΡrI$h $?@B9vꐔC!|i -.j68j^2M2ੜޣLY%yv??7|);yV囃^uЈ2ɪ]|sЏr{1k`#wRdeQ tƒ&ND7]?WPc2|)(Z}v:鍢k=C:ڥ #&Zjh?/P3<+7qwhԤ4wKM"떹؅Q%BB䂸oCzrmv#4UJwԲ/|0UZOtvImV;KR?=unƿhD[MqeYSf|b0;p<ܵJZۼNDfS\m8Zj}j-Ws@Z ã.<<|ghz !z ~u$3zX.[d(JK)%ZIes)L(vznyh\.C:7OA:Yݞ~wE;lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0045-Fischia_01.xiz000066400000000000000000000035101247673406200243730ustar00rootroot00000000000000 ZrH}W;Xlj%25HDhXidm\%lrlDO33b› |>4Nowq6چ]ߟ%>ZT;^,Mqٕ#yN*<±cg'AFt؝#Z04B&7I.ކ|p#$puKf [Oݙ&iw,;ZhM}KOΑjrD9YhC"DØGɚ~Ua "%;Yn.Iġ&un`Ẕg){fԃDI\$ Fay5l0.-EOcoE1:q[׺]VFkXIL=Ns7o_V4 E9vC"-FŪk+5lPU,d;`Կip՜/ 4- T7(|pEIodAìӾpGIXΡd(!}":2N{Zngv4{?]܋0 |XKyC|U:8?ɀ%6+a;GL- Vv1͌:;ޢup ($ES'CnVz/]jL<5Hںޣy+V]c gj D:Y0 *V8Zzh@2 t2[Xv* G]}jXjX ~&(^ Ve1+}I`z6JF5[͍d"qo@C_GB8Үi{JAՆH|jlxEBCEKb1ȱ72eB4MQhҡFZuN> JrN8)ų9 6+LyjN>;rF)c"Qǧ:Kr|2c*fy=J ,*{ƣt2%/`<LZQ -TҦkKMj7'.н?a#cȸ0Џ:,=I'A~)+-Q}0 x0<=j9NεaXK$`[, 'ᓤ'V8ºۤ' /$?ĂgoP6% +izH+^$F 崳ܙd0j^<<_s`D믕 vs}6tׇ` QʮnzzqPYQ_PX"A5b2w;Te#qkIP]<h9:nrxQr;s|st_* g׶Bʑ|]í3QkӠ d6/11Z2"l#FiB|xR%IuY. WCh-AHTJ5_[UiYxgK͑Z9X1+.&A7&| !Mޟu//:Y*7:1k+<ɳYˆ$ lC'n2VXEX*h)y kofWh]$&7Ox p.u1 ͼe~Ԫ^,?Z] =_;YTiGcLz4ٱ1 cOǠ_ŎFvaީ\*vԟVQُKPqxQk aZaNX\?+~BS\yb $u"cKPzcN6$Eջ*e+_-eRZV_}d]TX.lQ}s/gsTT'T" uj>yMT×ru#|״R8.<<<_31;9\:kDwF*{ދKԓ_YhYvNm;4w~+!x嗮fXckd%lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0047-Fischia_03.xiz000066400000000000000000000037221247673406200244040ustar00rootroot00000000000000 [[s8~ϯ`yOɥ0Âe6@Hg/A2fMLёt.>/ki}:k6q|bxi~=9m0/ۍ6q )=V?N2Mˉ t|ȁC3qc&l[ktӼ +GeA/f_l1ٖYol/!q5AQB?usᆵ'_齭2D4yy!W5p"2ķ2̰drA<#<^0Al`ꙗ򗯣\Wbk[mOzmEnKzʺJ? C9_ӟn@ ߙ$a, @(6AŵA `sw ׁi,`Lp3ȃj12ijcIƄwQ0PUۤͲU>2xi,#T:R40Xn9/ %V !@F u۩ZDg*qٽ:B5>>h{_Pm2 ptN&&tPA:ɓ};ĝHѓr'Ke7ˮJB)|#j% 󃟳TO"ȖJ֘aDŽ 2!>j kħ*Y#5st@t*1*|U1Ts^MLx$f%̞O'I|s%v:ڇuhzq!|Szh1ziF^rOjdyN2ɖZ;se* `q[n564NA>#.y7v֏XQH%BRM(+wHI*iAQC"8Ia΋n*믰3wU1@RA(YPivTh[@΀@z `eܤḆ`)bkJbo[=`!/6V /y)?TdYa{h€by7?]saKKZx:vmq{[:Us۬Y/S}nVj.ئZcPJ:+%|!ze>j`I4$UI( b.;+_J#-e8gVym7@WM[nkiZkKXrhMӥMU_%)$u*̢ڑjtx3@ V@TpXqv_-_xԑKL cE&AL?žծ=xh,]b*_ZH$Y X31^G襱#5ߌD>UBi^%w̹N\',i4 zz=͝ITOs4Wi_*qϻ~4/KD3FE">gt_1?Pm?']-6?QQv{'ܧ? @46lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0049-Resonance Pad2.xiz000066400000000000000000000076521247673406200252300ustar00rootroot00000000000000 ]rF}Wh e;ŕ +TD@b`ж~2i8-r}LO͏_׫6m:qexևQw^G87__;vd{F(m=RO>yUd.edlޭZl~~y}1Y.ZA:u59 څC٫}6mU;ZWt1Is<>¬!coH.ɋ,/rסqvv CcwwCjF$RQui1RnEqqxK7jtHt hv$Z0mM;)MdzW!k]eW7lOI'aP+Rqsi93Hcf˒ͭPAO ,Mwrvf|/~*b qnlL?+ژY:Ѭ@݌UGKՒ|Hz=h9)yQ TAME˼ؒb`ahoݦ8d,NL_^Mۺn.{t&⭛*fu".lʨߗ^"Nur0{e<ߥÄ')Eɕ,Yۡ|{]E'gRUە?|~)u%ac^76ՉMT伍CQ8%\K* כ4]p<Y7z+[a\~DV.|'\@Jί0~+^3-{RT")!/j5ܒ9ft{#}nEJQRl(9~KW S%5aJ_R#9DiUJ&F,ZPW[*z"uZEnk=1:VYWvՓLo$%Q*v[֔MqpPS~ ԽN/8/}w;XVle4ۑ&VmD熞lTXVVmFG]2:nm N%F*VH64~T}TJQ2~,Vl3_)DY çJu]Oo.ieZƹ]U],@ F7%1䆺RʼnnAD4uG$~dd)GE8Eh.g)j!(1l몚]vADgh{iU!:U2:W'ΕLNIi4H4_qfuFI 5f eLnU0BJG}e,vZcF&n1Z01֪HL-,U3Wbm\1BjČ p51CެV͎E*+1 gNFj pj.SpŬUGtDk;++ 3+A;\q{:# dX^#\quGgdb1#\1zp5b$9Ku9}sH}An.#_bf?##ùA~=HyB VWA׻W\W:\u~%dK|N[scF"}ypE'H_q"}̗ls26>3"*BIFǒ}?˘hv_+NO`ӯI2bL^_1$ٹEEjA>"%Ig!\\]t2؈)==88%) ŹuF4:zg+?Am7pTtRhľsǸa<aa+7ˆ=9QضVTDV3=T  L2kDsʀBj4Ep6@qBO 3rٞ$㹍a[nc :> ^H#>~-X\H#ϞψSq':%<!Tm@<̕-a%$mt fb3!CSc'D@"/ DPDҳ$zJ;lJ@<=FAi#1e #6YADv.|=aϚ%WJ QA 9{N9;L}e.jJncwH sϭ6Y!^Di&Nrj}NT'0O )q"` bq@8|Uܜ!ѭ5y|nK""_<{ȝdtF:h}RpMH34)̷a"Z3'ai"Z P3iN[P|ȗdE XDsDx>s>/{@∋BF>0@$1ih}τ<皈gE#4Q4c0'ڮM0Eor[CcBZ'zmx}}.Մ>;kMr0A>fh{2>=A>^XpEsw&"6% Qa,1g'b9D>ǚ,Y5П~F>b9{vOx.d"V܈֏CN%π/4<<KRVBK/O2ܭRFEI!jLHJ4wIǍiJ˩kda/oNg%$?(n)WS}#ԦJ)bBRʖچ#3 q7qj$c1YZ7Ffy)zl4yB˪*Z'|rd)f aIbG|)h輘âm: )~DG$^믔$+s!,+elya* 8,t&[ǒ]捨 y#F1=n5q-ZN$L7/0ۇYwb[]E@P*0-V~ݿN/Nf.G<#ǹܜֱ#;K`M6_M.+{mȷ4|{kud/64T)Wzl]F:i,mgiYS mCr^dy ?Vbo,>N*M.7QYz}̗%  't}NJ)mEtZן_Jr)@vlF&Z~$y:Ѽ@Ow̽ѢbɡZrEENE0ESѼh4ve{skmN0f%+Ko2o׮[)E`/L1 7ad{~^F -lj8 sױµb3(|jvYBT4FS(TOſ eٯ*GXz?_K.vrs?]v씥Oph}$*4zX6#ku/M ֋Է*|jE*P8Æt܅n~DFΦ|fK,ld]q<=3U7V3{RluIJnA^Մ:*5JMtUFM(JW) S%%aD@xN%Qj%Qŏ;) cՍ,+ZuiOU"75lP*۹l;~IzlwZ4eC\9S0TT8=U #w꿸a+ZυR ݉6Gzl79܊8~6ClTf3ZEh&@n,dKtwQk}j*6T>܎ѧ}_z2) 9H PWJjDDXDAGb[M6/Kb+2Sb2IA?ͬ<[jCE-V5U)C &׎j'jW_55U{*}PYU H Lt88<j(I}]ArTH HSF4@!Q\e2@;e!&nm28ahRXL#J&V,U3W! bj m36Ր;ǐby$CFEJLE-6șgp\uuJIV| \1kA䈎h8 *UJ;\q@[gn`L,FW\]+NWL,W]+FOv$g`]G^~pv8{%L[K[ xAel:Jt+p pE3U鷏\Bf/cutirn,\W:H_q{p>W\H_1%\/9A #:cWDE1Xgs p,k`"1c&{S{E#1jAΌsϤ3sv__g.:lĔW"!e8h!3W6OP[F cT(E/M1nOAeJX/UleDsmmDVc4ˆqf*qg2kDsʀb>i Dç=`aĕ3WKaFL<1*LUd{Fg$cD<` :> ^H#>-X\H#ϞψSq':%<!#:`C :IJpWp Xl1}#]3dsjQ\Aȇ#&B,=+DOi]ig(>=FL=|'z8@d=k^zN@gDسf b[({=ir$93w\DU`wgn sϭ6Y!>Mȝ䤪}n}O5 8#SEƁqd#FC/Uܜ!ѭ5y|N$>{ȝdtg2OplH.(| j"Z 3OV( E>'&)P`H3糉he]qQ( vh}Η4ih}τ<皈g sG9ń<$IRV/'<=kVLDsQ&$Y#o "6E۳Ds4}>dQ=wj"b,1N(Q=3؞ѫF2k"V g@rX}ZUg a?ṐX}^s#Z?9Q,>ڿ]LN{6gSkԥ`BsH2.RFEI!jLHJ-4IǕ ӥ>|,<Ҿùn(US}'#&J R–Vw'L=jay52[(ʌ\.*Bi ޖvJ1TymIA ueFT3p)skUΧocE D'0ՔmqJ1m~?JͯK/n!-%{EʬrY[ER* ۱WGȪE]rQ+R‹88I/8)k\%z`*uo3k4#GR.g2I,)EYfrvBY4)b,e) wR8a^_{ʇe8s_UϵjRE'smlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0052-ImpossibleDream1.xiz000066400000000000000000000072251247673406200256720ustar00rootroot00000000000000 ]]sH}ϯ/ *k൝ɼd$ۚA‰^! \M2dp<}w?YUDSu 7o?y'Oߟ‘]oO{빉;" hE_0rCčgt\y?N.F7g ]9Q4?݅u9:YǾG5F6mjt1_]g,/"~JmFV q__9A'b8ݝ?JU@YDK=NW@KޭHz^cQ0˦fYN:\\}OnP"yߥ#pXFq.w,:և`5Uǁ),Z=xizsA4 |`L CD ֪ioSRgޢ(Q) "z 9YNN9gf|qx[J&~R~qKGbSeN)"0;?' ®='RS15ptr\[1X+?ږRq?Fs[@K7 }u>h$O5=SZtr0?O%KZHY%2'rY2cj " rC/Z~;hեrsn/⇏2 ]Xn$:N ܦQ+IC+ƶDE9+q9_I7BʝFY0-1ru"<&n&Yf0Pb^]zglhr\0-w[T HZ G25R=ʏMDo`wu&&|Km(tÙnl@p9=H@Ê|*ʥ*h/v}h>WzXگԇCCBn H Irp"Ve~y#ZqX+k#^qX+xa8,EⰈWۀW6U xmn^uۀW m^mlIF:3;sW\W!Z1EbT q CI3/ Y* Ev"3@3i~G&NC@'+.. Ēklo/ӏ(cbT,ZX+ xbX,3yakNX^f ]00+f4W+ l^ "^1wxuĕ x5dxEgFnZ xK~^ >ߍ=bxux3mtf=f0%p˲j#a<#ĮL62y팥="oKfrdd/R>02du8SmuК+ed6_2h]ڌTwd$s^WB;_2b[2b F ca,1#q`CE~$նl0  -[)Fp~/|bRTyd4릠c隀Fb< s-(s zf0\HgKF= a<0`0v Kn0"6j5[r! v!/ Ðϗ܄aHgKFJ>n0%7a& Cr>_& #%6a6#M7a0 |MVɣ& C>_& >VHm#Y7X%NH݀a60Τj@N냑϶< Ðϗ`& CWj#1Mw&$aa}VIƂ ca,1U7a^Ϗs!M-ݰ/њ.sH'?OC> m 4}5MC2꣍.smtӞAfsl`tٞ=`x0V 4}vJ"M{j#M?hb~4}gϝPF,ǐOBj}}xs"EnT.]|R>6]]Lzbv#e*k  %lߍkτ[_'gAE-TLLY"IVqeon\FOV3N=g׾wpqP[I>꟥1Rq$ˠfjF9)\])o5R ^j 6ƠCEZگBeK ˪j-} NJTkd2RyS4>hp" @zP=NCyG6QqlS-~9[AN!'9sEp=wDV+N6OmQ\8%.46mª$d`ZJ.K\ ȆTaיK ̟(nr(SHmΟ*;W/#_}R Ͻ'X'87-fu J%F7b \ҷ~b^Qzb^H}_Bau_ B̞BL0ȃD wh]xozRo5V~LPi`)XfХO;AwRЏ-S[]|[W[?ґz=B[~+.ֻFUgυ9{@7͢Kg]r~9rG^?y:P})Lr.<ۇS/m,P^g"}[t||^~,gaz겤k2?:FU`0ʪAŵ+Ly (jvUiʫfѣR#Ny0 }ieqcqܪZ*Oƙ>`mixB;Ny++-91GGG(\8MCiՎ 8Z\ѪdF,.W*asVIsJ!``F/MmF#[>ɞw>¯!)y/lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0053-ImpossibleDream4.xiz000066400000000000000000000075731247673406200257040ustar00rootroot00000000000000 ]rF}WhUS\JHHBB\tOs$GSjz.=gz?~[zQc,¥<|t~r跧`\l~ytӻOEaDWA;Q&ϗnpѕ]SgoF]w}tG$/M:l|, G0]=rC _U=V-Xt]TpJ*[Җr=;緳#BY \RW'ڎtj+/P<m#_8xO@  N @q)΋p8==un~I;bt^"/,G)3|~x+:$j7ezzp'O-=[Z m<$F-ov_PVUz&ueH_8,uűۍl.fg?>ϯf:f#ϫ~_/lB?=AV56qAF )^"Ph-[yn\m|ԭKm,D~uL`-uN?[ 2?kjUeF)gubuͭ~|67wqfݟ:iSM ms8Gqo4XC`W!]oV~$4Nװ%T0.]A;jvgeySof qxY *c0g)n1#pt+FxadW)](]W AAV?:I.0ߩ/S0Ws[r|jHnP H%1kz!=}sa( vͷz6'oOh4{<~ Kf~9+X{F.>/||^94yiHk~ XVX,>nHҭFI樎 Ϗ kVXl>k9WR8{ }rME~RI.160j0zNg<h1͋(}֧E> a!R5 Cp s5ඊ2ER1izsG|uȜCLz 6A摹}2Q znF0.@?݅(]F6F ;0"`Yaˆn"ya0 !S (59y(~)B?}c'ƙ^W,ܮ;EYODL.byaDq7 0 sF1'ΕDt9\cwѓ$okF+"JV0.XaNr ]døcD5H3Ft??2d-!A C΂Fc ! Φ3kgndDG6Fys0*Gr|S1*s6+8xڈ`׌F^4d9FFm`6(K}ƦȎ SX#SFWc0ӕC 4N9Oxވ{lO0bFnA29:96̚m ÌƘ!zB]浬6$9)O6^Yag5#lUЊ9;).`l}qtqIGB[XH*J-r Po[¯I P5j W)kD :IuwU.ag6n\QҕJcfߜPZ?[UJ__uKegR*Y!MvJ}u +tfVRdfbR,/ :Unf'tpGWmiLloVZ&C%<9rFUR3QM;ϩ]VgC)rw*g+EkJDv5eMWmƏ}Uvֹ qKwB-*Nvrail͘4_h.G!UͩDe]=NaF.)l#[=Sjy ֈJzI<+cͪ`TS Wm4-냾bNuGKz#V攗LGTW,|E,))MU,?"59i9Ikh8GJJŅ4smƔKs/I3Zju,ܲ*~W+W-m+ՕTVBT>K^QѽK^fd5KE ɹU2XՓ^zZl}£;QVb~v.ן|V#O6G9f R"O=f~Krh߈\ _F;"PCUjynDٗ=qU?}}ȿiRx5.rݞ!W`O{.vMb<$!9FOQ3m 7C|Xχ@\}a=Ys trLxY9,c۟D\6Mh~>FR:T"̄?u66>#:Exda6 Gy#k5lPNLFiĔLZi<ݺNLҖ:1%?[+Kb)Rc\IʢV)שG 'ڄ 5ZsanF6FѢCh m/-NL0N'BBpQ˖)9jo|ՋDM- hl*TU7K%8TlڔWF$K"GQܫ\55=f{wo?lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0054-Delayed Echo.xiz000066400000000000000000000042241247673406200247360ustar00rootroot00000000000000 [ms8_=%$3I:\)srtE#lnA2~M63ͧJ}vzV^[5Bmq0?]pGw|3z׫ǹfShy>Z_\| Q?p`iG:?Ǔag:mfQ&WN7p8l"WL!sCwIg؛&T?븈} \)徻!rCІȥAGkBQ6`cω-p$~\H(M8vbkDuC5`t?< {i ev'][zһl$P2tzWIֱU5w.ūl+ä;,nHc^kρ#wY, au1Bl%`w|{BcbybPZd P-n:(`Sub`C v]tu4ĤO|:`5bA;2mdnEl(yvlD_.ejLBWXVĨ+*eq*K=֔Z^w 퍾nw=s->ehX$40!"e6qOVb@ح\JQ3? )BO[9CGHH7j*SFcܺb{i 3`""jluNDJ_:IE$ tI"9"SuU",5P)B 7}z,#Z-:ߟ#N!"$m0d]_LHMKT2Q'lSaZΔSXO !d!Yϱ^n>Vbn05K'|rKj+⴦TRs6*>eZ6gS_hUEɾiikһ: RJe<镾XgvX2㣭rgnI d=B> <'e y .)I+!tI2bZwo3f֐g*mj˴FXV[sV\4Wz5W^6|j_/ ׋Cz~$?~w3Ix#'B/Wڶal]L˩'=H;~U#>UB/z)e>Ml34qw"N@aYFL>ҕΔps [ҏp_&@҃m}`S`KZ3-~Z`lX+hJ4WI&ao 4PԈ,\S5G{R 7lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0057-Glass_01.xiz000066400000000000000000000034621247673406200241070ustar00rootroot00000000000000 ZYs8~ϯ`y!&'UIPdk/*a-'mCRKvHLSj/>}/ /vNze~>ptuppz0[l¾./>k׶X|@DSʖG4qhkpѰ5`<χZӘ,o4`I&ل|E҄pSXݰ⎺&g,V0 wxG`''tHqq$db ӀyWI`a%s KsF}n.ȏ us=E*Jf=ր?peBw)W4Iȡub;/vusxuNdMW߬Y%VRZ0XD.މ\cda=ALs幗K҅oH \bQH!ol\Uznuϐ;$,t $.{._U N'u4n?d2z 0bZ!ݖ~fpiٿ)ϽXS(VkPU]$R @(LP6ֻqXEq9"m銋V08z#ԥK QȊK GwϮ`+Q9$;2 ,-Ԇ։J β;o9-gudLAlQu#;cgUYU#Ɋ!=[FYk5YA 6 jjA`(fx|,Rkf7č.fKn$#i>ZGbT(*JK^Z.]s<&j2 4RW$uRQ?WJ mcNU2 'k N)aև8˼Q=k1>gk\Tu8g|c5p;z& j>*Z:}X'?x2Iyjƣ躨pu;dzUPQ*?̈́4 @\*04 \ш Lp&_R$Y"~qјNqAqRw/Ts +rVML|+>z0l̼Ȍo\.i\C%"ͱQߒqOL>X+Y5#{};r3$>ArF39D9`KS{19ĠpKb39mHL{!9I}ċ#?᨜OC}]Z} wxױLS˽=~2.Mp_V.i(s"Caue|L̓˾G H8bN FNqO0 3-+wu2hP'"tLV#Xǝ!\TsDt(gQ\JIGHyF8KxLoQH Ut7:H3RGdԻ)F;E4g.}]!^/j"juj{Y%UZ rKO:b˩9cs.,|+Ҳ~Ye>7)ewoS~QXA!b5|BĪj<J//JQh@GB'h .Y5_[mrUDA_Z]HU "&lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Noise/0059-Tremulo_01.xiz000066400000000000000000000043521247673406200244660ustar00rootroot00000000000000 \s8_C d&Ic9 h-`sH2M%m^Wo\~zZ*m׹O☮e;Wջ]toIw_gt,k.X8.ᣔu=ʵʞN?Cx}W&fmTnqR`2uɘZ5vz P~Bq5J[ޙmg,fY'-G12Z;F"7;@v@>َx8A(1,peIDn$[VG6 j̺&+i8ͧwxS..DzurѩqY_Cnzm#1ŊHAd?efɚ F³Q ׮G粨]EıDh8*uU=0!^8RGVP 0ݛJAx-ިc9q&'/u&`C/Қ9E7Jf8i죻.wMyLFЂ 푬\Nϥ܄s75iÛ$1GpRS@4`0.8t1tQHL{GK!$'0%`[͙Cj7zg*j ;+)ӎ4 BP;yԚ5z.@Z#f=EZh8&.BΏ wRK5%:l2֋i<vK\TG#`TIJͲ)y$>}sLDl!W*su. ܖi~Z.d[HV}~ƿZj7B@!te_B< DPb;Ѱaٰ QXr0GV0G  hTT h+dCCoQ]5@(@rBRP7~bއ%ߊ*[ Ѭo0ڸ [/ #gK $*"-ZڞFH &gXl۩L%F,LGY'R |,#"wSϻ\NꖞO3u8?\i:cֳn4:h:@?SKαb[ŽUV<~F9~LyKrn\3G&A{bcHmY:2r6m ?B;-)fdZK@xbell6B5m0#k&p(|m/"5hCRRcauC5ĊvNvJi= 5HAڨy1*NChG:tv6arw ״NEسׅcz2ѤwwәOD$Y2 ԇ07r 5TG?R9-n>rR̍d8 _b*UF;jaԹ,cC2CC(+D Y;jrs%$Y&5d1{Ȃa9@3q#fQ~~,TY(".* /elegld:ȡS#/N$gaN{NއN;eF ^ rm|݄nI7="a˸]e\2nYs-ǹ;\qNpYD8s>_%K`owk0rypݴ>7,eo{tg}phLoR~!hm'n?9$^G4iclťA&^G;G׊dιϮhKD́Q/k5[ R~N;g4V(w⻎KQUL*͍3?"+70Yo^#XCbl JM,]l@?1SM] U-Wҍ4MghVx#F ۥhja͛{7yØEnԠQfKpm,iO(b5{wr? {))W#gg7fqN'Wl<пVzřo/ݏ7ŏM:!{y6dџw#fx;FwIeZzgџ0n+EZkhY~—d,ѝЮU#RIth@x8Ɉ} w5Qnv{=̄2?eX~07POz] =]y4Lj-lmLl2KŪ[*!}䚭lt}9ϛ1NJ\~X0Bcp,{ʰ.?e~7̞+ ( *Ylupxyi}~.͵b 4n}%R;Q l Q}@W`_E0’?H_=k9)yVuKʪyM%Ui[3>e{skmN0fUWҖ|`G_G72d׮[|x] xnVH #2j÷eh`G`=wk.\;Et wAP傁7rr{jc_uүEZ?I?OWTިTmWSk~T?t4t) )yYfJ^<VuQ\-hSe)pE>]بu8–M4P)ʸ~4 >79@/^Tq,<`τ[ylF!UBmfȺ[>Xx?ЁPC>muiTj6cFdRYĔ>C\PlƟi=3j4`m1R4#)X뭥dU$䞦N OEs\zT 4P4&cۦ+Ŧ5)iB zzoߨ*4]ǜ"IrQӜ%#`ѺM'EBXתCbP8'BҔ _Gn+UjDX!ÏVL(K ]udvhf:$b@/H*jNB3Hm'VD;XhgEPSE8q58(@u@Q=N@J,˵@6DK3,@U7zY+V5XY+VbeXY+V=W2U &-Q;1d9j=m\%W4Xō3+ pEc pb]~oJz:j\q\EV2`}xD#)W~LfӶYk΅+ pŶd9 f'kǹǍUGҶyg"ZLvb|Y+FG,ˌsAfS ...ɍ{A"_ezh~_+G'=6\\\WL)Wݠ]"羋փ#\1~1M+ p}9!?t>X=&yD^ L2 L1@q; _+V L<2dqf,F-\FY-l"6-V.$a,w.|0 &@gľ;|q[osQvSJ\@xʸ7b2}lN0a0a0a0 Y&X{^Da0a܀!2aǀ=+ #1C=%1GJ3{b]%R^(ӥ%~%ZI2h[*nC"k6b{OVcqnl&"i2}d rw@@/37mOf6ayf>ѧe9lD' l"a4! b]_1e"F3C6. F`WR_C`lLKF>wD>wxˤzSYڛ4̒^V&>8}RfI-=ҘӧCۈrLl`"N?SgڍHWr7{&dYephD>r5y{Ί!Z'gt6FLrV 7)'N3BN!^a"^5DN9bEfYձ!.g:_v\?j^gK GVν֗twzw1,&Y֯3+=Pb%ƟƭOB'TaO1 }sDz}z,P5ʊRldw7Yo[5<|Do)oBeӶ^_yctaE͉.lxtӅ;Fo.+)cYxVRd~k_j뙰',gc:܁O|t-MZ~yWܤ*kMņ>t^3}xr7Mf/5i`**خ!V.n5V.n5 ح]VռaӫG]#5g$^:Jn#exV<2WBjt1h1[W!!5Y!%[~PmQFgI3R1e[WLSK)V}M Sj+E)+\/Qޤm骯)"$1qҬJL^-JLIr#BQG ]`+3WVXP[-r8dԑM&zNU) [\ Dr|<")H3"M񓉽)maM]+XK~ߊ+V54쎆-* LTKZ!ennp{ǎON>Zlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0002-Bassoon2.xiz000066400000000000000000000070541247673406200242260ustar00rootroot00000000000000 ]rH+4ELE+"Z&sA@$$8([ *M:ld\ꡐ|ًb? [u`.޼yO/Wfs 7q?yTvFqd )xsh6Og XϮ/Ƿv#> G_?/Albo!ˍ|'D88Wvr}wr9+;Q=YmGjo;k/r N ,"x޼6BeҋٓFa{|ݖb9碨BiY'M%]Lon.'|7Y`$]>q$RomK?Ggaxoj<WFZj'WNSvŌ^ҽ[ ]RB6TmԞ呿xIu-SXjԺgQ8{/4־S ,$8GQEjvѲ0Л͗& d}F0}tZ@Q)C:jFlzqzʎ2#oy~Iџu/K[זz{uyG{;ky˫wN_gE^؈låH k7_[s?yqzQ涪yN|]M!VT :SYt=M؁m۶I"/?,0{ Gq¸5wOt/꨹O;J3 UT{]kcG6}_ߨ_Mukk*ϻK*Z-PC̺\x&mht,C7=Gkh]Y{"p0#ಚ[R5HJ(plgA%O r~YGIx&zb}_͈[8kO0ܽH0eh)su=E^^od<=PdyP?FN0/jLGYI6Jծ:U7-w%J6 ٴJ([ϡUB\"v6<=9Uւ*xs@P(;AAjjO|'_ĺ媺b*{kLsU}u='~r0jn #1l#>h6닻OGg̈{!U!ƾOA|}tdi$0! i{fF,B={o!^ ,A2kF4*{|B ~z G>{f1s,@,>h| oD㳻)8N8Oh|/F);|yKF>M?7,D\D`2mt(P2aDik:m0>2a\!N{!JO{DX}vM'g6I!^_\6IH3}122zɲ)yȈ#FTaGVb~~"1Y,zndG7[ 6YV`#jd-wF֌K"^_a\o#Vmk> rEռWTi[(Diɩo4ىF>5y.è0z!Mq,ٶυ}VrHMi*OD>vl[욄H}v.W#>m돘ql!, gl ;1 #d),'/s˛6(QUIы"m9F&w8ލr%iU)*>VZ 7Wʫ [*eclZfm2a' /ju|Zy/ kU#n%~[AU{|qوiEoW7e/[yCxAv(VYtEkh3DR_Z,01VtZ[T,B\%/jhqJ"EMy$R3xS{kXJe*޽^nU<jzUIC׊릴ՊԫՊl-f(^1*Eʅ 5)"SUYxiC2+ιxad0UO~iJUOQQ+Ҷg5giu1Uvv򷍝PZU1GԲR}w5Wb$5N+wi<ϊZʯ%oۋ1/(z2Sz.ذ\PesA){.\Ç﹠st㬰|%azK\]'瓳۴h]fVPZEQڊ^V>)nsOq\~)6Uno.$ɸilmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0003-Bassoon3.xiz000066400000000000000000000102431247673406200242220ustar00rootroot00000000000000 ]Qs6~ϯ=AY4TXvmCKtV"u"o)$ߊ|vFƂ aaoQXpr|hO.ͻ]\O> x3/>ygv ~y y)ySzx_/nQ.n nW.Mv𾹋`S=#_Aݥr0NV&X*~IӚP*5շ4o4flʾD&*VuFpIjtü5s :QP_1\ ̀D37KUTE(rm/8p>'?W6톕Uhraݩ_9B-}K/ ~Eþh$.z [.ɥɓufI[UU2-{-:3x'o`ꮼp-B?ϫhT+K9oÏ7*dW_rztoÜI/67mhbgCc3w}/.=ƦOGuO(RazBc\[.Bv]?i>3u['ݪ]ǏrW.Ca9!]w.LȭQ%zW g[$'3VY#Fʜ=1/ܝ.V{. Blt\Ifݺh\Vs4t_X \eIطgba\ e=YY,RY,X<#ŭ/\:k0&]3fV{|C\Q( Ϝ=rLwN1Wib;h>& [ݷ.̱3t/xʒֳt+++"ry;$"cS1Ɲ2hzJR!C4= Ds<Mњnv&"+qU:&!q_Y1_08&ٍzt2 gDٳBH{B=/HsUN1,r&$id'$@=G s: 1; W"8 FK{{ېg!MQvzC]ga,<U329gW~aw/wFT8(D況)0v[׋Y[lsրi쓭/bِMs1\@>G ̲_qVM :FR91vtO~&E> X}<3da#c CYi"^ Yw/ 3ZA>-a*3'C;_8'`H#'ʌc[wMix #bF+/ƾ3B'} dF~U'ƍy2 geg:H""}}v9}b,8Yt"S3)nsˆG3a@nQ/Wh'H ҹ]~pYrO(ͮdSW}K(e3qt>QgIZ*`~nS}*Ǭ[\m w磏ڮ,r-8a{J9 gi~Vi^E{ )[=o3M }Lp2YIĜIQx 3r!+%Jp'OKW1Uu+Z2Pj]xFU-S8߭}J%|H;z?)Cyl4ND9{6)VKSbWKFo> o-ŜjS7^B_9yp{u=ZOK*̾ZqY|[yf׆[vMx;du=&ֳP٘ wG܀lYoL)r̝V7S%T2jJiI!Kܣk=қ*W@%˿j92K/S]>IT*-XuҘj鋪Zq.'y֓טԧv%a]di&6ب PKBVաȕxCa#w( 7́,]Gq(ɴKUk: 8xQb݆K9̲{tTrtJE:̬Q/l˗^DȢ Et Kl.[[4.]I@keOT{ߔVYԮz[)Yך*2D<Jh5Mɯs@ {UaFTɛ?+k(IsI96cGG*CSҠPN*"ֽU94ST9HrXlE2\O~Q7EP'[ӓ*42C|d*K(Y:36FVe,{(ϫ[{{) =T%SoR̲V/4ښd03;pjjPC] _ڗu|PǷ4u|M( 5kiuTw͇@owx2}M@}f=7 Mhsf=7 ihspf=7 hsQždC6bW4E0ۇEWwbu:OR l-XCbj ~T:!n}qs|/CN.'7`6[?\v%އ73iڑlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0004-Volo.xiz000066400000000000000000000045761247673406200234670ustar00rootroot00000000000000 \s8",1$f%PK]!S7Rlxd_ٖԒ͒l&cZmkY~Y0r:# <>n=._?|;:iOQkK<)A%}<Ñn_}Lqn1xoC37s~xhxEx4hm[h9Z2@@A+±Fm/8e| K7"M(vI$OX9R`> Y;oT2'9åaR Vml yjK)_V>˩F&vLiJ{Ĵf=&vwI&a8o`jZP\r1O!_擛Q KrAy!k3QH?j #YmQʝ9cVc+fUuiaj~mqBlPu|ɝ?3'V0vSPRXN0RIēkRھj9nXօju3W -sU -_ ^6htk=7Jk]QȲC2N026;93IJ kJ r b9屿߉p]F/J!\DE+? X>3|-P:)Nކ꒝s߆|6Idm PIѷ;>ȹxKvt⤇qPH6 G"$sѕ^Sws3KhEJއ΢ p=% 4ԌWK#Y v 먒_^{vGVs[ 8C@>V~Na_ʂxs8+fL?E"Jnܣ&3ΫP&ѾRz]X=נ6:pOh c]붦Y ]4ćV6g͇Gr)b@3M3ßY3!א[yKyї?(y9WG]I;~h>u6&*81/=91ze=uL:\sSǹ_ÉqgKWsy;7tsDvşU# \#=ǣeP|hȉ֜rrV;_>'sĉ3/Ecv(n 2qdg*UtO܍o7aΖ)&j`ҠXt2P5 ݙ&}^)01Lׁ/M=%Gpm;y"^Jz5<[j? >&=Fy VX6هn*T|"&K@[8D$E x*VV\rD?YC]5#n_@Э= igV"_>1q9^Cc]?}A ۃ^H?zk֚?]l1KAfVNb$3vdVc}mxz ^skkok/ :nd;FXХkW| :3_x" $q}?cpi{3N`%@*X+ag`-J>Ҧa&0_ 8Az#xdT,H(dcuv&&es[Ap4)BZqF|JHˠ*'=:ຟ,RsʀB|z99lP!#'KL8&J#љSVESfk刮CLekG*G&5\FEc~ę;8;&$afdQ٭mI7ĻI7I2(*X5V&dV|Rpk1 .g 2CYgɖjrUNӍqqC劘2"(K7PhIvd͡4M҃K=x6Ly(6.5zVY/L'$w|k.15Z]xa415dL ~k&qbkȘh J`k(ł1xA@3qfNs[Ӏ7F([\W ;f0;*k&b샙b f87ogf.oQm«D_@r_NxQ)>h?(}i][q"+7b;k(jVopVd'+&ܧࢢ&/ۧc-𫦥^?Ԃ'7ݴZlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0007-Arpeggio_02.xiz000066400000000000000000000040151247673406200245750ustar00rootroot00000000000000 [[w6~ϯg\BrN=SN@t K6"i$˶S{f,|34R.?>m7GKƇfF]]듓_n;׎m{= tCuh2_d`SfI}G~=Z9.j.{(~=v|˭ \?$S$lةAZwޏ10}kšۺ6YJᑫa@:!s L~Ե!FBdXSњ^GZZϒ鉋$33I2l21cSʧh`VZvR(r.n8R"JBB`r{HjoN"-m ^+;t=Z&; ^cKt>JH+U9`d޸UߋÆ,Z=Ka+R?w.RZ26\ێ90pYU,X2o`TUQL 9\+RPJ 1f)@X nq>!^G9̡aX4 n!zʿKy7³EqY~H?ȲhP+^0`dj@O(ewo`kt)sgd4H[9ommdViA롈)4{_ 𻠟 )vBB6_" '.2s֪;rHD?;0Z6Fd) >Mɮkۤ/2gxgg eY$z|fi1{&IDʉMś~=iPU8JhBҴOvU?H~2̏ɤ.ԍIe2&uT>"JvEiH ƑU#&V/h❤!Ot ~*v*sU\,Wl5U\rW|^!Yx3ջ祊vYh]o%Ld}O9E9SSDH:ɐcDB(ia'Fԫԕvf܈[oMQ.j)uhAH3vr$UQKzZ,eV7ƤצZV=ujZYehg zNP$?$>> C?}~:t ':%-I좉n%^egZI>`Q^׈n:9?m?-ZH3lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0008-Arpeggio_03.xiz000066400000000000000000000130571247673406200246050ustar00rootroot00000000000000 ]]s}_}c4ݎ?bk3I_8Dl$RM_K$Α)Ë|v[F~|8~y$/~|ǿ\~z7 . ~qV7J~})|Ra !}Z3#?Q$|zco9 oA/Ws/U==yJ -#e,c(k/5QRܝN.騼G4;it0r=g!Wd} r=?x]-k9 >؋|]I8O:5:X)QDw^1oQ*y8U-TMe<łp]Ch<>; Px8keK_*<"kE~*w˾Pyԉ 35YmѽyfƷV}| K/l|ϣK5Vg@(p‰:,XG m'bҪ@'mKi[xa+}q0' iWP/=78e]"s߷-UdO$e,^#)tZu xbǫ6M6;$^ѷo\M8 XU L~OC-ʸexW]1UPbgՁ2VQr'L{zoYsM'iNՏEf"Ds\'^Ss5f ݷOWгOk-o©Me\ĝaIJ;K{pE.Uj.:%x\;W\Q[+j pEm-Eb@ba(UW@\z"W+fE Ea;g3$+cϑ"m>G"}uVlMpEV-k3Y_̃󠐝yW̓[@* v\]\ez.Ȝrp#H;Vu4kYE܎l雝2kز17ƈ¢F$5F5#1>B5Fcu=<هGC6ƴ5-㉿|ѮF",i/\ТY\Q[+j pEm-5YrY$oВZ#/f--1xbm$p,:]Qw]$<Qk9(hfué֍/^7 5:lL5o7g{kv#v3D˒l jTAcbeHmy6?$鹱ujdlY{@z}a!#QcȌh&ԫ1Bm6B56AРl0! jFc~[P5r#FψUg,9V_1F FL0dJ7-7$j F$>=C4> +(޿>j[j }j }鳕E1,HrC[3 {(gL=k YYoޘ tc̋ Aۈ~A 6WCfC?ПQk_PkϨ9~Z7oܝ&&Xuf ger@deZP1ZP;/n|%,ED GjF?JmHϖKOlNو002uو)g-[-*d6:/+"ƈ<5>7 F!0`&C'y&Cl?!yO>Eǧg*z׋Lde#Χ]my/U6!_7?3t6:nڈ>>Bl>cGQoJnORð)T)$9jOLV3pn &яLeY0K#UIA[A~'zqkojyC}%0zJ* W =z"9PYC"N%sRB8#H$x֒{¢"KF/S*]Q:O2*-b]ľ#7+}ڕ͢Ny5$1#K/ŶɉۛѧD{5zQ?Y#jhVߓy꣕mVEӕVoIѩ *x)룣(fc('D7h*ݕV,Z %c ߪJST~)+NKM22/de?):)?k$Dx4LVR@&NN\N^Կen:5B,[U ^β!5eOkk+K[mk鑛밚,bC9TBlh[ 1sa5Jn^ p pY^]-`S-"k,UoY":n #C]o/|oRߦ?E֗ ,Tv*{gTCPc#i@Vv%Cֽ{PꓳJ'7alN pRN)dA \n,Nu¯^|1{}t= S u x`_<0"4a=!ԁqoNQ]͕fwg[C]x㞞m,p&~7$n9cu~c76'^=nxt`s rWrȵvbf۳XjMܙ&>߁qoXExeE:sTuYK2a^rkPO <"W$4V W;lC7IqZȹVGu1CIΞ9ph4W*=;[mV0+huFkٸ!9J7O+ F=!`~Vv7M?0L;\%gO)JR6&&J(S94aC-)07Ɗ)GCJEJ|ȠtL`(]E:-JzLciE7L@DDe,Pݞ|Pܞ",=J?ң!sHXBn-W^䯘-W+fkௐ=g4"I& E64A|%IzMCms SA6I'6٢٢" {W0,٢ Eq;EkAfk+]OW0,y_~"l pϲ~FWrUhg4~aGRL 3WS/y-`ld%35BE"D"iԳ4IH^RZ5A^ə:T.e)T@X$LbQ$KOm vnkt^EiA-JD|1ZRc-j#zjl/c0KCYaYd)Ћo"9\ HRzl@ZH׌F; !#Qc0fi!znl0@k6Ag&C g; 囥5#:X5|Ro̒5̒gyjl!zaHaHl09~l\6w^Z9E϶,@,DҳEXzMύ ֑lzǙ%GfiQקaDfY: ,udىoAfAo׌Ua',o7;|(,768hAꞾ@ fAl0DqF >7F[Ck6a50 ΡZɧ5,଄|^3a,At>=G>֌F>a#YoԲ0lYey6m %@H9ʹ{VY9J¸1@=$5̒0;Gʲ7*6:VHU#N?S)i,I; ee< *{> U6K,0> g @`3C>;~b3,/"gS=6T=F| Oڳ3F>0UO''eO '-Xrн%5ŬL' ̸5b7 dX#Ce-TnFM P^Hcw6cM42;b>2;;ZF)͑:Nʼ 7ohVײd̙.1˚g8,į:j'́~$r>HmnFe5R>(Qnp?7NB=<\o?Fcg4^K_MR(nmy{6ʽ=yUힼvOF x'&:=9jp}92pbaZɼ= z׾4$".{')5&[Ӈu]{ؾ;WY'\GqVT?Y)y1bP@B(qh1L&QpdySI˜Đn٥ M8v]nGs\*W]3N9ÖB$]osEv5.y;"eIHˀ|('UJ=]8ĒܨeqkFq4<B\ %3qjX%$6Y Bod T8W7Sm,vPh?H1Uˁonz|,`dRmkWd;^Dl*y x؄PbO H +v*cr\,wp3.|9(D~ "- :fNBB/B# |/ML©HD1ZN|%,k(?tB2'8fQ6YA,:ȕ8 ux6ۈ=w]Hסmx[;|,6Ldۭ;bnLfRQAEE/] 1LB 4)xzze,\3߻J mׅY44.V }i\}OM@rr^Z" jV)$ jU^s垒`Zs _ w'V FM Rt8&6ʆ$.5h :` E=$Jcu>eU=P?b6\h[xDY^5UX ˚׭ÄmxϠuJ˰V$T,òFu, 눅 Eqǰt-^5[ff>{^vS^yyn=oVYY?mɟYu1lV'w9^w&UrS_Aj@⍀1,QA`7  a1.%/{sVWt?lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0011-abracadabra.xiz000066400000000000000000000056761247673406200247530ustar00rootroot00000000000000 \[s8~_<b%TugIH dNϋ`xl6I~e[#`2v;H:OGdvxAuvlPo;xÇO^/<?>:vd_}e>nim'> 7sxb+1]Ek{{i2tv?\7 ͇Mxg:7{@f Զ #0 Glj㊶7uGQkz"U7ېh@\/z*< 5]I=t 04O4K4&~a'5ًﮘ2[Ɠbx?,7?l,FbW4e`l'S+ n^ݻo\ADCHxocͫSC6쨱=4(sٙM8-:h>s|ɑ V[tU1OzP5btp8ˍ! fV'(vI*(u=@dK[>z|)y:q#pbtd_jY.!/ůE1?$tL~"`)=g:Gs(y ҅UOL|cŤMUKaU_⼓0FZ ᵰa w1:0 +7:,9H%8GGwӇRcjqR|7 G!"200(9.Hu6Ca,K([0zf 5pG{&k'Pa:$lQ6L \Yy\RF=&_4`#v~cfg|. š\ܥ5Ѱ 0`i{ΫD":]\k#30TH2-[θ߱ uP6UveGR, RbzE'`q-c$b5lyA$x !,)A˂S.hAnF{ .Q3<{в xv!<*91qxa*xCV-ݯ#5[l~ZnIDs+ L UPa6eeBޔ4ZH.*)]p9@϶o" toTZ1p\i9H#ħmlx b8+jqcP_]{(y7km4t~=S$<{oEhk$;>CPk @|9X|V08JC*UDFjP>;yM]]U b _$ѺBTВ%;Fc܇v7G@Xam,I,rR*Y᳻6Rʒ`T.rYddR%id+dڪSB*`,: bZ|fi;c4͌KT/Nº5h6O'ɵ(ZrMc5#Ҍf%*v:E@LQ>g 7w#O_ q(m-,}dzN?Nej+hp>y9?6bc7̍'FiYx}֣ahH`JzK򽈝EMM|:+1@5lƙ/*HŪ*~&ت.#JU:?VgNK.#ݮe]mht(zl角e~m|-`Sk8o!(|?_01L4>g;Grnx*_yCV1P5{iWY慴QFw,OtaC$gqS7Y>XS8vɡelC]( 졕.y2.Zuf@ r&>ͮV- T3M118%c&ѡ9Kq5ӼD,;j ]ZVL0Be\#˲Pbβ] !pnC[6| IW5vbkYpMYpYۮgGo[&@Tl]`K2toߋzfp#,ic5!o߶v\~MVooE_Sa|QO4p=ьRV=V -~j ,[ jP `yfh ܭk1@pe!&#O `5 Q k|ǰփ^%J@%J`;{YրIE^.eե V^Ģ[O!AoU%A{5E^3M |)CQ쭧>[c{Vhݫ>s>; &,xe\ptx@O߈/@Wsӝ+^HӶ%ckjkjҵo [MMGG0TS/ EM ucj~Tvv+"WE׃wvW_qz:Zz`pVS6~+%zgʗ޿{k[1}삷'%!bYq š4g(^ ثלa}3^s"T9[$לղkJ5l B;G$8TחwbUtގ$LR;[d\I]@C Ci*ѿ^~q5 /nL@.7@^7P+si+b-yCq>Çoyҽ,-@ &qʱ7}!& QPxy:Ulmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0012-Ghost Whistle.xiz000066400000000000000000000047661247673406200252340ustar00rootroot00000000000000 ]wڸ=K Ct9@6!}1MZlI# fS=3Ko<(C٠^06<:zKr5z;hw\~=k'{(niF@ɟxAHD"}#,dGI\ζdo^B.c8K$X&Bs_8|H((]=4[рۮq)ʷnLw7 -0ޥh^~Zqħ[Dݼ"'l\QBcve׸y9et"G/l~S#9t{h@÷ $͊r!sn,%c^UD@cZ(S&ǩr#u=EހRh-P\r otS0"Rq>G1 \3Si# }ru<]1PXPD+9wz7ףChOZ]`^AZa|~xɆcsoy1Y%33ᔔe+l#-hC";pe@c.\_^@T eC˽ }6;)ˬk /N ?N# 7;nAsӽh`0 H1G Y-D(jC"9ll˕%kE{XCc^K}*:X(諜0H YsϣcARt20_}5-.MWuvS1s2Tg,{Ҙ*ն4NIuD_Q>TEph8Ō' tT('< ~&Id;£GVc:fHWc,Da+~}FUsL¢`Jܙ9PBQ3 @ewɸ7N8#Ddt5]00=Ot8 ѦQl?Ǝ3wJ\ .-]ALy> >̛gʎ>%nr5ΐ"^ڏ !2\>-TZ42(PN#IYmUqEhu 6Qy2`Ze}(TKQ8&B9S\ l57 %(.tiA \c\io 5P;-1R7UOa܋bk#G (*TAIf^J`|dAI]8b<{`\ʈPwaLd]Zi 5Z44](e D6;9u=+h,#~-w;ܥ>V_h𲊀u{(i-OxA;uZfoKYTXVK_UniR?klHD1Flmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0013-Spazio1.xiz000066400000000000000000000021631247673406200240640ustar00rootroot00000000000000 X]s8}ϯ`ift0Sf`vh-mme{?$6m:0ۧ$\_Kt$)ggq[cίwgg7 qfw>d5tcn<P BYr‰xN{3R:3t>ԁ68B+΃!5f01񌒘 $ʸхn轵̚[۵ , O,2@ո/T *H e0qT "5'\6< I$$\q.:j<_0H{8Y" *{xtmdPX'E <(z(OA q>XvP^h k$F$X}-2Sw <2 ͋vdm4Z6GkmV _?-5=U1Cg/WS*ghe@_,l0ct($;v~2O~z?YG46%¶hi:o^4$N 11""{VDoS[#>K 2p>-;G SwylO`Jh]o*d4?.mgXk O{$2IΗODd;(&H lƩR3y]W_/޽W WUKJ@"O@,O?!|mL}8k2N_1͗=*4B߮*cJ«- 8p4~AWDݦG5NZpQ8ZjĐ*NA.56*^\LaϹ|u269_,ɐu>kV1Or?~<˯jwG#{ e]PuqvaA%ns{5)?.Kd]/wր jlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0014-Spazio2.xiz000066400000000000000000000024511247673406200240660ustar00rootroot00000000000000 Y[W6~W~-9cs6Iؖ(uc)w˖,lÞ>'雋fOBrve9a>({v0Znrq|}t/x!Gjʲ#U otyc&~_(f)ެ,] 'ck#|b8$W[o(!1yP}JS$5)(oKN6L-R<55 e1Red4\x vaxRr lS@MRul)CVAWӹ|"&,@ WXQS %; ~R]G!gG!~BdPD;M4俗,Z$'#Z~/gAmx:#}~ݮ촅AwOF}>G:U=|8=T4`:Kf. 0B>._Rl9zwH %]frΐ]PK ZG$VlvTM Pnb\!Դa Lj BUQIMk ߺ6PՊi;TDe$OnPD]f"}=R~zkiL`}aĕg#U8'pDxԭmMkwGI?O1_c[6b?cdvdv8>!4(o}6ł KL% u[O,@!ohȱe{vmƬkle?ؖDEN7$i cEWolt+= o կ<ש0@)^W+ Dl d:m+#}퓏 ph1d eh8?TlzA0!L=R4Җ7(Z%)J@F 'B+?S\`M?f))r`7%N~8{˵gw3wmz)ehZ&5`}ҸlBjS`+,ebDrMpV9)rxUlWs\jrJ|-=7܈%}ߏ*f!Z6rꠡ#?lӌ.|G+J#BYsxF)a1qgZ@.oBz'z 9B7E,pjV`(#і)oWNn|1=GVf/@녋4J/v6k;u>:Y@!dIN,E!W.btiC>IEH`?}KY,ûmtŘ.|!f,l9lKhɶ*˸ն4>hG$J:EpjK_I޷`qZ6aC[5x+رUXܕ7~sz`P}@;hrx{abP෰SD4N{rC(U2%e~tL{rzh4wV[ B2Z>2Wxyjw yJ`J`J`;I`as lN[\i| qWVQ׺r#_8%o@fթ*%)4 lz{J`)pw]r)/4 XF)͞p*|!ӀWoDeitUIM ^рMo %}^at/,y^%HY;x* -2>*K=SrRܪΖͰ͂VЌo]PjCAQ{y(=íۻv" NUF~CK_F@lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0016-SpaceAtmo.xiz000066400000000000000000000042701247673406200244160ustar00rootroot00000000000000 \KW8+2̪8<zR39 v:c ԏv_?-[ҕ*Ѯ[WOdNN Oov ^ivqn~w|fg} |T{&)fOzwrWcxfۚzq]m"<ήtBZ)K>m /u?U} Wi;mGa8lx=ZfJP"v_92) ,OWs}l>cpP@D4'.ZԭW{JV;Ɠbv{=,32e"v'ga%'-lV}v^:Og^&g 4Z0l)^J/I9E9zbq19֫pqg$|>،(VE<Ʊ{r&>)<08A~$*ß F_C3.N"'ñvlL~\$ 0CZ֦~@ϓ7&~r FIx(rDPr)z:Q.x1Cc}})GUwjqP>Io;fܧ idt/8юvЍ oƋ ym#w{uh{JB 4 a-8& 0\j~lf$ AED$Oh%tM$[< ̧M{TL}zG͘8 d'KԇK:,K .0_fcv ZJՙwG[Z.gnG fنM1! 8_ih#/L;7?gAu4M!ThiǵЀQlZmZ?$\X 10d!Y,gi "ȜK - _qԍvYSI0:e'`gz]#V_ WNjQe_g3asndd;oJZ/m#ٯ /}~~ɘki~|hM557o皂|l.to0o^:бg"B]GEe〸z{,Sqܷb"_ơT0Ά %S84 lan53RuLmJm3ݎ[yntKj ܜnEH@ŀWBmI){%a:*o҇B Yw륛Sh9m1 7Ec7ѣjkj\iF`˗[*|) "%ꂘ2UMO% O%Pmm#0N-F54L/ RIcv0@ Җ̅ mcՖk+ d- ȶ:r(܇( s/M)y!Hi37i)p-g8S84bNQGz ;y$_u"ڼJJJx`F%AJq֌N@4k~^׹tSؙˌJ;Tec!pҦ`Kh`zJw8S^N;ҍ23lJ* pҩ# c¶ .hW.x#E\h8oYK{f,C`Z1W,uLߘV`i!090ikgs`1+[J QQ vBYKv6:=R;'@8];1cs$l%KKq`2GwCsCٵa:*iiZC%%`K; -&IlQ-vY3m 4ivh[-;V7+[`2`sߵa={{.&n-dlGm++6&+:FY6 |6h_-4%_OOէW[\u~ߏzalΒzry%161E%161Jb襸mbڽSvT}]IU5Z=-&FG4Blmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0017-friendly sines.xiz000066400000000000000000000045471247673406200254700ustar00rootroot00000000000000 ]_s8Đjf؄R@0[7Rlcl6۟Hj)n%uտVKz&QLc"z4xЙI%癚?tiAL+(W] &/<%NN*\U*q'n) -À(.ȌSWrҺN#Bz/hR>jss ;84(h`ŷ4cͽ!<\⡈BA3ĦƞIY2 OX>NpD  SSQ$uDmMV&뿄J|޽:@I rBhCl؇3ǹ!7NŝCp3e8@w6NNEqrqB¨Z*&'e:Lih$狒_˧'ȺS0C۴Cy=/iuzN+ZZ:h$fcά\@a5jjÇx02` sJ.dt5|1 %a32|OPT5ׅ̗Lv)cVb+pď5V4\j&W[e)?U .9ú< V*+TRYELڴZ^_^Q]s*aEgVb ZTE)e%Xh%*b gx»<:?YZ!q sX[Ax?XPob#5^й]iZX{xPy1aZ`W(^w0 b(69I?`z7r@vqm@ ›j4 trӸ3 cg0y@+b 4(W 2h"\{;ZD *=lIԙ2n @BE8݋q#iJXiyST=,`ziNaɴ5#fveL:^l ܛe#㭁 TBm,nі,nIa;Hf[ɏ[LbqKzּl%-nٝ?- \ oV.4dP)%K)o \6.Nc.|rj\~4n5ӿ΂sޫh].hl r5h`쒋MUeYbE.|E.Z.4x"GrZrCT,b3Ŋqm^pB)AEkq-lnq֎<ϧoŜ)~Zsro{? {cWk)Y2rZk=pqomW\vtxY&c~S*cK+VXvR+S TY89Hk?u6ǹV8I܏s58Aq|j*mzV W?مbefx5lhōN)0l c&;nm6_e$WkV[>*]/=+Y_~lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0019-Acquoso_1.xiz000066400000000000000000000051671247673406200244050ustar00rootroot00000000000000 \s8_{q/4&ά;k;{0hkK^}IHl];秦?IOzOϗ>|j~pװϏ>MOqIbڒO|AD9gc%SЉA}n0Ȼr^A ۦlp7͸6X2]e;t>˷s.*S.b/Z"MZДů0Fb΋YQG"A:Y_9lpwZDž2-2K|I!^*;Gg,$SdTD\ __Wcé`G,2mv8{v֗h;NRr+`)f/lyAJ`Jy~YeL@a,|JR^diLԘU*$'cn%+ ώ i#1 h$!Oqus~܎cƬ/| $Y h ]̣c>قD*^8zA N{в!'շX>X6Sa'mrۛ1Wv̨쿥Mtzu}M] 9NYՍa֋yD,[ZbtZif<(2[ق~0%&I{)b偖mL= FW]I,}a"' Blk]X+Ѹ,e'rY|NGl>#n"W!N5ѩF0xOa5G3-UR]UL1!ux~)Y9RvʯU V7{'' ǯn"V-\N9go‡_2BOQZhud5O! /Ic}q Oj ؾ+, M|0k5C϶| ׳cZni\\^7qg4P ) Yxǥ9`:GWC>Pxx5h Ԣ#U$ iYO"k(yvhdd@2_*;Dut`p8yIKJ0^ oR 2C|9*@'*[39[¤'r}'vajX ֱuš5J_IS֫e!+J,Ul #(qOMcZΏn ?XQfT;5y߱":-q"G* 00Z(MRRn/2V_r'w*ej$XjVdDN[Ƶ(z ~{:؋NTA4LNƔrq>ztv0o,v-;D|~i(S'LE6))a4]*2G m|D*h~x'[>jF7 eΪGUI"!v#Z6+Pm7qE'y\c<~̰U37B\"N_vT߫.j\o_hmS:毕v JoUj^C̱@BXGdYm;,નc- mSA*>]T[2n"r{ب)Ԩs S *Y+>|SyH&%/&e6IdxZSh 5)Ԧ`IQ]=7,lζ;RY:4-YVT OY:_݊=kA$A4Nє@" A,01GXg&3QÝ}3We6ek)Cao㒴~^n!6K;g)jL4["hx9nXC {^M_8xlo?8kuF{XF s967B[Z?OJtP:)U45ŗF:@ޟn4b䷇>=ʎIQOLy6F$)Q~BB 7 %-jm\ mG_7[k5[훭zf]:9PÀ,9[42;|BI߾#[4޷.;nl[ܷ.e=tKo]&.$E48o]2d.䯵.<\WIk87iƹIN3Mztqnҿӌsޞf4ܤ'F8vn9lҝB[Ynvv8@սfp5w(ʛ"50E1q a7=u90] Uv^#.> 5[zP#6~㙍uL{?~%/d!o<^<Ɖx޵Seo4½^׽%LeO o/~ߢ-Um߽.mh}wg$pS99UFjA?ݹp0N˙&X*~IT‘_$4&'Ԣ䇆dusN˲nU;i0]#150".O?(·V,ObEď[q4K4o//Rr0_U=J ҊR͢.!kBc& U j`Կ &Rjw?5}jeϖ t/Z?h~w*b?I$!Y\/kk`ܽ2Zor4!~Tσݹu>GSpt;ƾl CB`ϲgťrʓ2?4`~ڬOeO,i鹓Riu.xz#ևJdG9V:_oL-ؖ?_\^^|XSBnhDÜΑĮah;Cu * l> IE%GJaIV~گq&d,K 4IuA5.ng_l&Oa T0[ľ%ԡv>*I+kYGCHQ AEƈIE4khrˉ7S!!*k65De`8R,1T:l*1Q 9¼BC= =YՍw'Vck>"M be 1ѓ2pDLfšL(CՈb~`ǀ]:0L!+2Zc 2E`GFxĪ.NON˃Y5A8+Wc[*fYD EN  "*0ۺZO;Iֱ}ZȌr4l1:9f809hΞm SgEtG SOter j0\UJi Pu$γ[:puLiNdfAʏX@aF Eڋrĉ],@+ dq4[beXY+VEb0IݼLJ{\8!U'X:wyQ8p6W,`72gcfE:F pu̵#:Omŕ`u&n. pŖ p\W,+ p\W,y 6FHl^n\Z.7ɭgeֲ.'WܧuwelkTH}f =F3Fnllyv,נ5.ˬeLjf`֣c3p}N%}+n. YO:(8Aˮc1:A ru OL?S]_q ][dbeX(?6E+9Yd"cݿqG4Fb[7vt9 4CLf6#1ZA;G 9}eDs$iwj0JFGH;a+NګƗ &4ASpm;++wh#M٘?tHv?N9y8lӝ Iˆqx9u a0@cr:8j L 5 b9+AsMhD;C|i䦦U(;e]f'9zvɡe+ӠziPzjs+%ɽAxz6(-;1V!5 a}V]qgfNt)Vb:_Zxadsq|M}ڳnb#ޞo3B<sOuϹeɔ &Q@qByaxa0^tq&WU{%#&C$>;Έ'# % ; 6$Yaˆg #6g"6p3<ܾ 8$Ч'bYӓt[CMBg~&nV"'@rCtYT$W6mXdsA'LP[2bTB\`^UӦ0e;u"Ya>zfT{D0"yaD2}d>bKF#VXa>v"yad}V ȧqxR|5A" sC}|H6n0pvaU}qnsF>¨{na0rqCuGA!>N7!b_<(!ޕ-9(Yad CbFJV!Fc 4vZrɘ򖋫A8 ;tfc;4ঈ"Mp*w^w[_v5!vʋ+;ZB:m}T/_ߤX՞mU*ȾI=9 .Yƫ7\ҫfrdXxؽ={ ??[ʓ/BdLۿ=Lw_ӢQ2ۼ>OX[xPqjM\ jOV.yIUHT+8Ht6 f$IOWG)q~-=P1GK2~2<ܷ'U[J[? F`Կ$Uyn{W\z9׹A^unׯs\Vz9׹^9m}s.<:oBk ~yXܧ n>5jEl+* T|:¦(˘n2G ,Wyh;;Ŋ$q*V:F.QӆQb)Si-24,jrC>)-Ӹʈ/ߊ4-@msh_'2Y nyXqMGWJ&9w-I3i1eV .)bZMTSS^hCLWk^drKO 3qHlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0021-Acquoso_6.xiz000066400000000000000000000100371247673406200243730ustar00rootroot00000000000000 ]sH_= [+J$" 'FHF\Gww{Wˣ'7߰~k5\,<}i7or|1|;8/_oN윿y'{r Bj}#';Gy1%!W>FTo|ܧ֙,0 #ז ʬ,.L;߼h`l '@DAD1 D/28B L""kZG3AS⡪ʹ0UzC+qٕT}ۥ *7he 6>VΙ 5%rГחzkr*Cܑs}O` J廀X6KgYI(*'~YNQ#oQybA`bA`tߜ'׎_j;)SFƸ0hC0YrpĵwhMLӉYCl70˅ANDԾxwXZ\@\ I{}G}(KYay)բv&^j8eja{D!3 fq̹>^U{O?ہw/i$eThJ"Utnm7ksn;ʎUx+-`0P{//cFzb [/W1:qبA,Z3NG[,mzo^_wK8Bct2U)zfStI'uZ\T d']9 ,-oɝ.pM='w!\pN<*B(=ƍ>\3RADpWk@!h FvVU ]**!n t)iB٬hˎxO"β%#>@8<ٖfTOeF ffy t!Хޛ%6ѵAi0ԥt11)1M{ g`h?!V_Y@3+ e@>_~;8Z &B{,͈Ao DUj4.!VNf |B4%g8 ~o63 i.!Z88]-_rrj7#?"xqR;8].!U|^<@$% vpNl i7ЪD28 9 ff 19rPQM to& Joਜy(sh]~`4Tupy`rQŤ(xl|!Lʹa*6K) =)*1L]Q0%PV uQtoZ_='yTC cL6`(&Q4t^dV1cxplҠ&&re\3+ _A(8, ^มncƄ'+aL8.`)SFK\NJ|Er< ͋><ˌ2f 7G__.AErq /K2⸫aLH7lj3MPEz)F1)I&^?F1h"-,h}0_uF3/R,4i- _$B3s28 voV0#YFAGOX!&HlJY5 b+2YX&@F"3  cd-8(pgkp ?chu`"cEB*2u S`:)1ŊՁLr,OY.:SwJV*`YԜ]u: 3˓@&5ake- 'u.&O.b:Q}jII5b*bRb88nGyDǤϓ c2X阔3$d&㘊$ߓ쩗pz:..mzT0=Gt^+!p{lδ_t:&Js ]XH!b'' A;cBă&o9Rk.5$ ÊcX~q/bF2lp)-sko(k 8/ȁe#EJ:q, =2 L_i ALH+5BU}ջ3>x/2;(s`7>8r pʯ ; i`z2QLH,@~`HQ#egcc&l0g A<7 If v f,Opt} EckAz̜ALuSHlL1D@6|Oj.||Y| |Y8ƴKfҞ~>طIf0L:)gBDMzǵ(+Ǜhf1tT+'n-Wr{Y˻ncޅ-wkyݭ]ywaZU*B[|i<)$c@S2BZxHi ::\t7rfAyͅBIЍܘ?g;?~@Vl|]WM: 2ۧ7Wޤ!_͢E$_3dEiB? MH^iyx'b$=m0ee3NH`V7YE[EMO\ RA0% 0씭go$Aw؛.Y T2~tswۅ;od)Ejlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0023-Fagotto_01.xiz000066400000000000000000000076671247673406200244600ustar00rootroot00000000000000 ]]s6}ϯeReK3I:Z[z6i¡%f+HK8Gv~jcx/`q~DxF?ݞ͛w:|5)7ގSx.W /oT#>f7Џd_?<^_oχ?xU4yGocy?Y_x%e[7ݿoʊzoCO&eEz `x`Q JU򔈍# *y*CR+m.]4V?j^u˛Ob0?eHl$?q^y6"⽓xIh+;1'aF%}+﷫_6lU6xlZ t5{緃p~֨$'q|?T>]u+ #]w=6ؓ! ] ^.Ag`ԻSk1SJ/>~:Dfʮ}EU#s}&(L,$}oL|zUU(4fQA6L+eg׃}\lKFA*pwݎG?O(hB3YwI#+vfBjCZ6՚CV\'>t:}e\/>.nYGٟ؂x~SiCm 1Rc5hkȆi7t(xd,֙F"Y6_m#>#Ui#f#Qc1fy(FQ(~٣?/0Զ>Y/b C"/.$I@"%C$=ۙ;amH؈*ѡtU6;<I/d6Fa20!^A ÖXD3A$= Ca,#Â!"'H ˆ#`;ľggZ^a,23e Eh( ƍĸ17F*0d0n Fqύ˜ÎvA\߲ɻ aa,FK@a,@^D{@^Xܭel@4>=sW2,)T>*H|xڞ#>ߡw94c"e0SJlj1rċ/{9,I}6EǑ,!~_68#~݈*4: #Qc1jW\n>- BzgAE>.b"v_@ۮzk"v_εȓ 137k ndG_v9[nڍ{h?f7X&o#D"Ys/n6""puDž?*t ](s%:q8lf )޽(~y՚dk."%E$?ӈ/^H g'A."eH1:F;#}F$?˨/6"S!*> E"{).e &C ?[)OC 11JʞDRc\P., qx~2X ʵU?Z4zWo\i/'_z[Ӕ"SVjY 4 Ie6#M&dףּJ=9TWmVG +D){~Z%Rba\/*{mo3 KzʬHޏzAV h%&WzSA-UKa(uU]- x1qD!SnǿnYX) $b5M^O]V EةKmωsXsS~=uN]I3ZNW|j]7vsWw@ 9Fd׏RSw7ܐƖdiDSX4Y-f%+Gݡ,Vzw(}w^,Ob E#yv?=u D1HF/dҩ.9J uNuy/m;v%ukS/<`WWARuj^'ޮMoM`Y͛@v7f5oj.9֙D\85~_n^~V<\]}V>[:$x28;fwzRk~j(6iu11hހ^%&.u.tWSowg?,lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0024-Fagotto_02.xiz000066400000000000000000000100231247673406200244360ustar00rootroot00000000000000 ]]s6}ϯeReK3I:Z[z6i¡%f+H%K8Gv?R?qA<|ds0O8z| Q<nvͻOnOo~x5K/aF5c󥟌(?~w/&R{>wǓȟS>z$˃B~m ubp;++_i8=)MV9Gˊr4f $/Ab)/F UTV\h@ACq<=9GAռVI7ן.`wH84,p>Ny$(f>M?~d0Ri߮~ϳTV8Nii l,+Х.vZ & @wPt1@3߂'t;$ƞ aQ:v <[ϗ?&ŽyRzqөu~'2Vv|.( s0GaId9E4zd!}z9/JjZUj˫65zϧqi$03cy[*.|^ ꘽A#+go4-CHHR?Vĕ/ˈcUo(">7&T#_"Ƙv/Y/~g%D3HWS_տEߓ%ɎSuL^7ٰy ;r{=1%͒bd7{T}5j0$LM1X|Y7&>j*GqJ _fв> .O~%# ]Dnnjԣ؟'g4YwIVtjs M!^SXuwQxvDm-xQjqd׉t_C ׋[@pvQ'`^=Fs}D-uiR 抮-'=3'Vj*+ȃ)1RVo5AM5rJ >wL{gIOm$Ik1넳tGHMͿӃfxٿ p%sPd.B oo peW]'en/ GWlG+1x{xEV#le(^1[N+cCi:F#I[Y6sV[F\&ĺ.UJΎeWW\Q[+jpplĝ, =H>VְM`jrD12EÓ֐>m 1rڻ 6 ^%˿ufѲHc 0&&@ccdqcca#jޡ(QcŨ1bl_Xj +)O;hȦ$53 Dҳ=HzIIv"1@7FFw6"i?cE@tv9]D$}qOD vb11.t'@:%tvIOB ﰠ C0ƴ;ﲡ:DH03|"΢;لzWj;z5xBw$Fc1J: qc1n ƍQ"F ? QcDsc0氣]&׷93}.C=wBK/gB$gQ졗-V=3#gx|n@&%%ʧC)163Aۓ};t.'vހf]DY frJ MQ:[x;sx/MIS83˦`S#~BŐf#Q!Qc1j FʖKٍا%!=\HSW,g1E>c@]bە[o\HugBW55Ln2ۣ/-7\=Y4\D݈g,~I]J"~Ƭ 7|pύwB .mӸw63 H[,\v/yn8"F$ȓQco _c$j1H~gD B`o#_8bPH~Q!`al"_`0q4"#!LI$5F5aK{ H՛?O+AE50Ek(eZVBRMH '{wO3?)UguxsrQCJ%l?`;q^eRV/T&X)s.׋bku dcdngv2+gE*i^U/ZEDWo>C^Sw!)c}U]- x1qD!mǿYXɍ$RkƶDYӇu6[[f3lVFiCXau|U.T-nOVavWZ~ qTTɕV0RҮкYjb!ZGU#b7ԪjZN ϩlAT9.l~VM݇e/jxϣͺk@ e*mSs)e6?dXR~*ҫiFZL*3|-ᮣ_֌E2NֳhWh,J5gidjY"< c0*l^R_T/ixwX+}ɚKTm! &г hhiJkSS/rQǛm,/-=[OC]Ivv>_ VE[jPLRdpYS G/~KM].2#9_ B[.ŕm Jjɠ4?򢾽U73 -u}kkxky"ieuRta>b.&|.y? '#I*;u9qPӾo8uy=u>eFg3./yROWBWu􌼺+TZ -8,ɑ/,5r&~W{_ӐƖdiie w^S ѕokg GݡbE-8ӳBHwOb!g̯ȫ73نtKҩBGS,mg]Kκ{uInbZԋ5lg~G//.}=|rwɷy5xcXnV&ݬMY͛@}su&f5/=ͫ7_ꗛ_/7WWm_ջĖI= 'ٝ^TcSom̤`&/!)7{zy%+8^7}Q=)e/ff%VqUL5+5q̌&+^]&3ҹRB8[ifw! WZM (~5iu1l&nT` %t$M\ĺkTSowg?tdFlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0025-Fagotto_03.xiz000066400000000000000000000102641247673406200244470ustar00rootroot00000000000000 ][s۶~ϯyJ%R-$TXαN-6[TE*} ouszJLaA`aX|v9X&a=uk$ӏ߽z?7O'y$ҋيFi6dއmz0/<=J"l]\04'"Xza oOhJȿ }&g6Q*1.@3߂gE t\GDSt(N](wi4Axb 43A\Nu~g4*^>u~glI>{D,+g&O X=OV-Ph֙֬tRפ5.sW퓿Q8~4Q$2^-Ďm5;4xacaF "iZ^UYd~UeԆːbEm "!^N f#_"Fvd/Z/~gD3Hߛ[KǶ빺^=Z?I?똼57[?|uS 2uߝ(qfIj714[CY ϐbdiSe/''G9U4#{#I;6sVY9qBDuz_N}/+ p\W,g+Nኙw3 CL{hkd`jtD0r !h7!f5d֐*i"Š$cwL&Zi &g1fqclXa1NQ+++7T/-j+Iq7;hMI53 Ds{ @c!ۙ;xai@Fds:nV}NI_Hz"1ZH0 "I̛QDw% 5C-0#6"'88A4}6G >ODhN{vnBAK Ez5xBwF1b)# b0rء  ˆ80 ߲Aby!q7l B, d9Ӌ(|6v-Vtn9#[1ўy=W2S|v % ;5h|ݽӉ7`=.,\ftJ J#wo9Ŋw@0.uq$gOFlOT l2Vad0+ #[.i7b Bzރ{uQ u1.bi R<[;=tγIKGL@5"֗ ΦW0f~,."ϹnDs,~r]m#D."9fE?Wو;.$BQ\@K>~fbB30J>a." G$?;O;!Ȏq7TO[GFHH.">#O6"SaQ(>gzT6@OqOK00s+%Y8~Vq0r9!݉ds ﱥtQ\Aa Qfx1:LVh#^Ԯn\k„T_R/N&az鵖Q<̹RJFy!̖HJPβ{OCujaZe 8=qʮOT_R,}bCU\RfTz&&K+g{n#1w7V%V8BuWA[傠uP/y$p՛b)}ȵ.9 0X?e@Յ@WB~ z#\쪘p)0k7BH$¥8܁p)Brw%/C+> }{VmfPإt+ʼnϧ ;vQ?u{x/@ʚu.C9/v97XO]p)%O]t'@Q _yuW6ٵ~k8Vg{_ KFdOh{>}b&80Ԕ-=X[X4b^l}Qb9bۢ >SGw~1w)qT2)3F TUg6J,kXC}mK_|{zI.?3mۭԀu:--!ч./n  I70v.C n//OZؠXM0lqO1`4~xpM,S&ٮMXry n5oڼ dy8oW6P߮2+'* TInR@_nV^Ć vٺfP*X_/)jLt_y%Ŧ/KǪ2w8fLA O raB+3CĔ RuA$ΔXd1)W/LrJԣ no(_G3QJ`%0x(kF%4_``kڊq.. M\kiZ_O/P׫P(ZM>fo͚I:HY6 97cvX ̈j9jP A2FЯ2_B@ K 4t)7T3l <eiQ/0*feΒ0cQ.ȴZՐjz߼-V~VaO #lRiNeV_Rsh7/l-zihM==0A> <׷\%@ieXv-^)\*tlvSTdk9HyZ]16 Loٴx7*ըVrR+z }**'b ohQ;%Fy`*نeQñR**gu[Բ]:o⊟Vfr։ kl p0DÁ{ZȶThzCzG!lR udv";MMj QswM"u>eXMf6Ω:2ٰ:&]BtlnWmsM4 #.Mqؕ%jqC jTYaC. t*;4=QEU.ӶJj02dkvYVlFR(Ǵ)Sb8ŕ&$\Sr6 ʃKUF׍ؚ+%U7мՍʆuknTW|Ub"">wڭ"r/1DF0?|q(YQ75_c"tP ŧl:bujlz@IڀBP$gdWQ->?[@uLZX9#*ZQ m'ʈJtieupנ.}k⤔qm7^7G 8]ѦrP;+nhVmRBU"PE€/* 6#-g5FKn RMsB ^} O7 GnzݔT;h~5ayc_hF!?qPdЩY'p.E]`ٍsv8wz7Mˉ&ƹi'99gܹ{z/ qgr|wQde~1S7㫫ż=uˋD@_Y1Óf>26DxefHh "H DØ9  1% m@19CaC 3rHѸک7҅;fEҚ^}q C _Be,uQ n>`Gmn=gxlvl-hȌUB< CbhQ,Gnq(N/UaTe FQT zʍBim m-e:;R5?b?LD5v}|"z(&uWL {2l! x\Tlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0028-Delicato_02.xiz000066400000000000000000000045501247673406200245730ustar00rootroot00000000000000 \s8" !$ǔ9 }(H܂MH$,[ocWJWkI]v/3 BkևFyu~>8}9:7ο}:3807GW ~̵ƞ^o<І;.`a`2uZ<؃+t]W/zq!Sϯ1m]lggwigԟ峂/`:.0cdmtZ`za+Eh@6S0KDX$ v@!oiȡ$36bCMXIg?Sa?xXEInzh0AyUO˄k7#7D(tMĶ"nf"⨘05&Dgiאt"[RR,T$J%ryt:׵U ÒWS\7oJLAj#K9 R0} f3OxSAZ_f|ANmھ26mA" !9F-Y4\*HIpG_D5&θ[Ȼ4| \L4%P{г jKvY.dFa-tN03S-DBoriH^0TB[6m۲?uv+?X.ksf b'^YZ&XWM!͚5keZS-0= s*|F |ؠO]T)sw&_P(g@d@@; kx:_1Ƒ2q }Yp̷y?Q(gd+5|r*"-XAZ( t:rb͘iR%RvVSƾ5m![s:d<?a, f9S~:SOMV0S+qJhg:*ɔ'T8 FXċ5.Xoז86*/@tX%WT_7(,MѮ'ͽlhJ`mmҾUMqrtC=\*-)bI ni [ Kی -bHnJˋ/8̄$tǷݠBfAw6wKv Kl0en.BL6 P4+lyxR&%:w0lmL>KiN^m@#l뻿1G TI2L%c1G$+ir* ujDYШKʂx7 >K2|!Ȅۻ:Jl_`EhhxM% #{Fmg>s)FSKtJO΍8hw+0mPЫL]F1x?Inɽ`r0iλS_ R0I WyU)dQq*SO^\,8?L  Ԓ*C/s0J1s0x_%aHH\N0CE2|0+<~y\ >?5>|7ÛOE}9պW/ot`d?Qv0JQ =s9>7Y0d6kE8ɒ~} {*1m9w׽a>MU4 8t;^Ud#J( (^4Slx]>=#ÊpҜXOKX*q>dhDU Z^uw3TAG&˦bE8FA?wL}dUxLA]}ORٺr6Y~rW-zo%֘&,'̚w6* qR̊3PtjU^hbw{`O3WBY!ɮS!w=ŅfhEZ׷WÅs~N&vgԗ< .pWpէG_e1aG؟0X^y&Q.A$kZ8_=wMɹO;}Ɵ+*TNm@M< ݓKD?;zQh% M+X&/b8G_T5eOv<rMDGqnmkUyN̖?n#<(f>6_ xD~vsjш(cn(cKr9ˁvg4!`{[}փ 5 |N}画eë@v?ioٌ|jUS?;y<oxcub416"ZXXI2)\Jl6ORde<&*#N +<\$qB~g Afh*5BxE幩*ӳ| Lۛloz0x{ӓMO7=ޔbMcӮ'' P-Bd %6ۏsTy `!\_ \H.QήRJ:bwWO: Lj>TdyBdc-K6蒍dc/L6NNW-|aD5h ˆn2B"!L4n&#ߺ h;ir5A ćР&;j0bADX~$uc0ju<;v:;Y轛@-!=p4ׁb u lYh Kz^z]l+ p0I|{) 8A~KtOpudd|`K {%[$[$[#JW-•dW䃷:m+ٺg pup%lgWwen?)gW. 1;nJ؞G}qƈ% K4Fei a1zS$^ƈ{0 L6F!Ln/QtZD>xcDctR4FGK0 L]q⧃ 1:I/S~wI"~Kٛn]Jo@w!/(~$0^jRB_te I9ˈBv8L f0L`u.bŤ.-%o6Ě6;~,F*$yK.+t;.Tp# eey(3:<:Wǩh ܙl lLn L4F|lފKό喛 rM~u\B|/]OYNؓ`_헲M0C_sU3>-0GBaP\Vaf}Acp+ѯn`[bZ՟,FQ)"OSԪI(/D yhdW+J?΂%DT>/+̟wpel-6 % R LЩHPR[,Jr|IP k&Ә̥-W;Yw;"596Y,zK`(Y#)0ReDB!I…~X23vȴI)Y:#Y$جK͒/!X/륺xJٺJ<cY2 3ME|}YjJ S)y:sR]n3yW czj|=V`Q!A̺YwAFf;^)4kV4;5sU"V0,"k+*HjR_AF{-(6Ί=uB}vb2n]êynsҨ\]ww\E>:A8Rd Q侳j"=Y5X\Hu[C+3œk hyΪ0x4g`Q*5Ż%6Kc-ќUQkisRpc@)T瀠zYYӨ"w {]8Gٶp{.Xc@Īs@WmC8Yg@3Tmok fv DuK_oLݣKwF^ʥu*kB,= o>Zb{eRcc͆ 1dVrm۟.:D>;xg+76?IPOQQ+j,%WΧUpخ~k?[N8JҎн6BK$L86TKjK8Ps.q[n~vL$9iMU1Id6!qCs\W?n 7h}|FqzI+-zc4ɡNTdO4lSN$ &T$ MN4r7a܈ @2v&FN B{Yy]}]yM" 2;J&U m-vS~gw%Uj'm,r$Dz+bR(kqp+?m+*1m0#C;BzNȶJs&Q/ڙJ}w4fW} TxߕOz; ! "n; nB&=|oQ X@"  /;I聕FGۓ =pփVO>fOXMn,r;r)1EiET*>GЖ/4N(*jlwWmO3V#,V&d;M"K"Q2$ vsDeERr;wNڄp{l(.E7cy^\!=k]|~p.{=« ,Գv<^>Fy='*Ց=1n֗)|<]&&#4xHjH&d$zcнAkOd$i"7 Q u2=?} 㼊d cm"zX*ֽ֯Brj;5n3ɬSk]旇-j]yz {cvO$$JZU^m֕z"_C "v/ڼ@>,;Ʒbysde" S+:U 2(h}x-O4|RZܬz.ڛV N@롨Zj[Z; s*FȤJZ¬ႅ Cy &OLx}ఃw$V C6?s0dy8WxEbSid+e=^̀7~l@8]IލZ0 ):)uk]ܓ@R]ecUu>zoW'l aYIZ8%X2JITjß{^urRvS}e?kbi4- ˪|=kŜ=T ?\朘*LvLu2TցUʐ!7X@e`Rugg}aW7r'I\*$8N~xp#ڿ~ػ&SEMr\'^u#\'w^u*\'^u1\۵d5D:Fzzwp۸^7_Ś޵wy8>šMTcy3Ǵ>FH/Wb=IeҊk(3uXF玲뗺Gt}McFsƸnV|xNl ̓ Wӫ?.vj0 aBN [Wv!"W*dA|x:tlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0031-Wah_dolce_1.xiz000066400000000000000000000041521247673406200246430ustar00rootroot00000000000000 [[SH~W;*uPK 8/]MHfBC{H+ֺU4crw/k @^x|/o~LvmsYu]5Fk>*{<'O 0hc[,L d|&}3f' r̖yo/ӈQ$d̹&'/lM@w`f%c9`PX~Hww;? u\KsӞ:^q%& Bc 9'K r͊Ud2pMX/\o|/IUH; qv.ȇUcN$Iœ:C1N?q qQԸ/0NP45/lQ *= h.!zD!m"Dyzt:u+>ڔ>>"nipt;]p H"'"W890Aa\NbI@3Mqydї2 SSJE w)=5^yK ,(+$Xpx02ZDQʤ w/"X:?{oz7OK0Vؖsʨ2,iи܏U`'9z(c2FA#UdAV3d=\ >C2Gh{1Fj]mSYiT$nטmbN^}goZy7xVI^f_42ùKhCuKfd".b:d#n`~"6f+vaM33/\iƙxTq& 3OXŒ3Doh0WB+#T&kˇB ݰ"ǟ*K148,&9M pcŎXrj`I[ Ɗ3_d&Mʩ| FaKIb_z_84}Q^i5򐣼xs7F3]<ˌ3._~Z~h6{8l#=y7'Ҫ (dϯԣrv%_wꏲEY_/ B4lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0032-Wah_dolce_2.xiz000066400000000000000000000054501247673406200246470ustar00rootroot00000000000000 ]w߿"]Yq&=l Hw" 6ɦlI#X@ڤOݘXF|O?Vˣ'F^_6ZGw/獟>|zNjuipߏ.Շ/Q k?qNEx#?y?ɲAF7ɰ;G5C,|"n/zJ"eBѤMy?O7hz>StHȋ*Bk"Ϗ0Y?.Dt "9q7|ּ$aLD>S ('r캙ȞϡʅnB?ՠLu.]x`~J7^GA3;*jԸ>=@W$~Y#o&2HgGk \8KV&dh0vU{ +Dz d-~W6.<$D\BK7hnAS(b V/ QOAdIp=`-=У,et 7\gDKE42k_]'M7c!J\?/.--t= ]0F노4V/ҘkTzʼnBcG N!y~.YW@'c$\6 rD,It Iy#p/|QbL}= &fLizllAe%$lV9pQќeghM;-m1!} u)&4⧇$ |;ks?ɏqPjՆ69#L. yKzVzOh?qx\jp20^nc@ hN)eWKT)@g>dR $KlH_"ڻ ;)3wTLX2Wdvh%AH}əR^MBqOͷA`(nbO q9$.UZk m0TlbF oAD"ӢF|`c*F>(JeKԷ֌?ud8 S?i1ĶpPE]ƷK/{i܊en*e3*ze(c*F-UWx8Z3%տ1tAq@鞡i1{ "M=Xrs)Aj͍Eu;SS23,;JqvCҸjowjoJ {TzS BZm_gG*;S9Wh%dhE7SUByFw}F7+'FxzՐOP( xQBW^P)E%ƾ*Վaʔyg9yp(>Gk4np@#m9m'ͶD ڝDs!s1 ,Be 6eyaО ۇMut W0 <܃bJE};m/(YAh]钃X_摾mJ(A\vG=Z wCU]aWkCXڔ{U(*UhW2ÿJFFf'Љ_O iYvjZMTΤ<XGIuA5d]pٰٶF3)X7wc@ZP#Y2NM! ;pJu,_e.+ Kff"0T#MekP*IMXkl.0v/0}J j4St7ScJ" 4ӵJos)Y1E,Z%أ^'@ <H,PM Wo$}GLCtR(i=S'B@ox9)rDІ_T, Miוu}[ݿBk bςBnuo%ŎJ7rȨTMnx}}v&EE'! ]bNQ %T[CW-T&ȥnY})p{GLf;z'wx͘zFoRzxݡSݡgEgUWݡl=ԖS7l8COӞbMkےUJdB;6Ivm 8$GqIlTi&ҎsU%֎Eg7n[zz۰zzN&V,mS#W%TP]CF{B 6@߻BtW?ō6)nLQm/,3almms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0033-Long Space Choir 2.xiz000066400000000000000000000035261247673406200256260ustar00rootroot00000000000000 Zms8_%&o0%fR 7neZ֫҆v>ȫjgWR.?|] IҀFWmqE"A|~.̟_hl1>ԇJ}M@k[Q1r$O[cz58j=,lx8~8A JV0M[,%>, F$mw@u0s`:wtVh+Z~`&|H00NQLD)K5XtDKI+Z$aCg'q64Q Il>}ws  CѾ00GZ7+$e勀{t3U$D6&";JS\1+ښL O>DRnU3V_sjJHI.Д3&VH8 "l5?h8; )|Ĩ_SqoPX'KbO: G7#sI5@5 _*']]  u6Oƣ0 GwN VX9W+-D ;rޢu GYMTN.ViTªL<52H6:ÞjWV5Ft6}"(3 p =NY S(uu )׮. Kdݐ4f'T]X8ޏ(x ~@C*X62I U-$32}QN޻H0TuE.w]ûY6 AtJ}y))q&N٧5FG"8w2ΠL׀@%ޞڌ \qp7?)!͋Iu4䡏(:%SV!+c qu%ʣL I{bi@Nݏg|!яY"~YID(N8DuEb/o#:xDGhLwB#N#4b vFV "ggYT'҈N _ \qXT4ok +*-yI=*qRNO* qYj$E,,7$<':sߚ~Hwj?>I#ŕGz>+_Q>SISswb31ባ! 1(_LG'lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0034-Choir Pad4.xiz000066400000000000000000000034711247673406200243610ustar00rootroot00000000000000 Zs8~_%$.1s%܋F"%Ζrl4!mSZvv%$>~!i1zޟ X|p}ttf0Bѥ9T{O,-9rHs*8 $%q ~0MkS`,>8!Wm|򌄰sݐ>GޟYM(JWDa`g&lHqqdhMRьyB(=+d0 =bbIKaXE8rZm;i4ͧx.#wE(Z7+w.?re[Mn4 zYUQaU+a9Q(ۮkFWB"v,$ adc g nlljlAi*=%Y.d6=YIJ?]`~Bu;j0m0G7a:| z @n+? ,_[,SwAIhG$m> sJMB^ºl<lyHw9Ý"P4#c]S3="eL%hF4Lf7;-+&FJX4(JA[ UREm,n{)˴n hVj9ota4Ai_ A :'ԩRu0ҬpB1C,e݌[혨B d)A%V!|n=nv#$=*$^Rj;(djl-ewW҆.QV!^QMmٲ٢.`vLw|^RE[EG\mr<=D]+0KRҧ]Ӯq&FNէ F[")w23xgA I"Zf2Dw2n6hUY$n4P2.̘tR!+mXivCMj?wdfh7{';zլ9Y7G8l#%"]JGiC톻sxSI;8>GixR5o=4L4Ls`/_ ;\zCp}&?7S!rP)K<~]l8ږ9&nZJ2P]*w)EUo甉ӌ}UX @ѸZ7YѲcڹ9v\'5bTǼNV] nFF*!WF _%lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0035-Ancient_Echos.xiz000066400000000000000000000024061247673406200252440ustar00rootroot00000000000000 Y[s6~ϯ~OpI83i0KE#lA2eNE_zD^}^}ֹ湍 B{M5}ݽ^ڗ/yn6>qf׵)^ݩK޵L+qKlІMCҘSc5Y= (<9EЍ*&m[ ˜+sLR;%@z$۽b 0E^(4?j,4zjZ4;2H] mh3i]3PMPkqDPVھP='=d1m{ͷű|omerX@eTQ22i;Z+"MDDydd^p'PċhQׂ1F\oI8S1Ez#0,3*|V_Ғ8 w@RJ $=|5ә5yAќW[on OS@Ռ;zv5rK}>wjDdd<z;֬*okN(O!5CD6j=*6A1Y 9KUwY jCBXWA@oczJ5?̧,VmPiA>{Hv1PmlF0`ۨr>Q%D`(]L0xƇxM ^"QӅV SuFeVxa6Bhou& 6vш*ۇAbvXrGRcʅծ4rr&4ۘ\Q٠c'ɋꝙ kd3SfYfܔef/? 3{j!2SW!efA=rf]KB۬䉍PYYuMJ׆+].%~2kBGrT9> Z]!wb}%'bUWwV@ob L;iDΝjc闵YLVުA^^?/qm%_z[Vmlxl[ě]SEs~l9?r6Ü9aΏoC{MG1Cf?}|X}GMa"{~xټ >7?]\r=?Q| zup>+AkS>Ɂb=ĥ+OM&mw6ɜѐ]6:K&̃h5K-nk?w}rםtodk+; }'H$&tH &dbGӐEbd *;[6,C.]?SM} U-W24MghVx+F eh^hhaͫ[?vycNafФy5gA4BxHKUw8nߜ<8m^\rDX7;pֿme0,R":,ഘP0 *|ckdZw}#+h.dT`"td 2Na4.:#C"6!|X@!b%V7z~Nnǣa/#G+xQn1f4Vn`Ƭ+>+BUQ\m]{{w3_d9Dq3xV t #t|_E 5p%d'SyoF"fr=3( j&x?d062"f]ZZncyh" TG s(\eqx ,w zO]oy 7-nY<`r "nbqQ&MBc"Νi06V.3F޳ XD"(G+Ha*A 8ہlNV?(&lK[}ES5UTg/ bxxWi$jr7! δ8Ҭ \B&a,thK*x՞6 :3B"Ы3nO+4u0-iz*p.jX`+T "Fc$@"ܬi(Aਔ<_߰` .n3Tr0f*#laّ=>;U;}O$KZTR~e +d 1%30YA7Y  ;V!l8|V'ȋKBfU&Ka;l˒'rQP(*%yA1&zZa>L픜vl7WKrNVU?+i%ӡUtew0?(ƩRG%#9N7 >r߅^A;Ia:,C )Uąe~R&lƼ!c3AYԼַŞaՈ]q#&|>wRhgUpQbj u{68^QK $fkv#LNn&fʬ|{.(#$*k'v>NP呀LE*Vf_?(BX&j} b]{0m9Ph4bHm0wX,bЛEwa9EZ`=`rV8([AmPH9t`ƭΫS46""I:/9^7mC7߫6JkhZl]xm /uf`f<eo7ϷU/' *5\}G;| P;4M4M4w8mU/ š@t~< YB=CKVھV|jǩ=?7UqyFKU۫Wf `#*lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0037-Chorus.xiz000066400000000000000000000023441247673406200240100ustar00rootroot00000000000000 Y]W6}W~8clNG]JPԖYwH馛H̽3#sZo,x 3ń\yxrrKoܝ?O֟a,^T[ TCph,_;q*Z{Fth!YgwE!_H1DVE`]>`l2ОY dT-PK%#f!"a3!w6!ld5HJHI:sb~QcN]7[^5nW4ӧ=gɀ@,vI&.0nIslynJ&c'xFƽfr 7kVLez^+mN%YD|r!eKed2w 4:n IpkV~A~,ֈyeDTmt4orhS?t40Ujzy@|"'8NL̙AEAE#M/7Ϛc(!k[T0͔F M(۹:#4)hAC`}K4ᆰy ,|m9YKA-hnXAV[-B/&'=ZQi __xO8n't? z=XvpsN 1"hxY6!MC]G"փ[ \Ah(LٖNA0Fl!;DõxQzt>9sD_b\f9aZ<`sQ h0 r٩VTn\yS' I=g e\@l3 D K~y0OTg9`ta:1eH1+tUG1yJP)SL)! u* eJ-lf'jL8Z݈2O9PWigJp^E̎r1e[J(Q$ۃ917Nly}E_ǒ19s;we}l#¯0hfj_X43#Ce63% v̇Z=;ׯ9  ;¯c܎bk 1c0 |OC_[H%vxP p0ZJEc0n5f v<> 3(!nFh\*&v -Oh4#ps4 p"-N]¯4 _J 4L:ڵfWo̔7簇_KD֜h \`__[c(;v ;Ďb<3%v S=D,u;77gI~|`"~RQkb^U4"yyq }6`67xʏ?-caCc˜ƆLƆ_Ʀrg1}l.jlmֽVST' $} LrMrB'/\e_  S r쨻.t\zKos s.A<粏<2]msZ`m wF'rN5=@㫫"2$H'itoch_8*k #S>oɾ5F\|uyDa d0[4@ ,dܴ8q6* #C/[W:opʐƖ+su`lEQzc;1SDT 5FcM~(]ynYV@4Y;S( Xlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0039-Chorus2.xiz000066400000000000000000000107131247673406200240730ustar00rootroot00000000000000 ]]WF}_>%sf&e g d3yk̰~KVK]R2FJOɘ[KWեw?~_we]NLY|}޼y'_&;='dz׷0?y{O%N_ޘUP|fprOq\.vqzy.4$"z{u1{N`E3((P]7vr}SZ߃E<)ꖼ!qyȂhI/W(q9:AtM[:&eN{(}^Z Q|x8KSZjʦE:irqvCS&+b m* ʿB.~/Ị,vbAUފ1G?e5_gŰubdюŒt݃rpv; F$e _r 5 q=u`x5 Ŷ<5p`l(ԣ3Kf K>6+[&Kn\԰`lW^ͯWyjovJsiR .oN-`ީB4\ E2 Z';)p*1&v$ք8샢c Զ=gk]68Y87Ug^F7r[\\S{MƥA^fPǛAC~ʰKq6nqh}wc-/}PדˋOs9 8dqJ6QG7cYJ#z\9zY3z2HpQ&a2%( ߿rQy"\]]Z!yK UyU_*çU\ց*ßYuTΪ `VUudc%UB{\> U\ru/ xOByP#aBTi11HJk0U=;û+\I` Vd *'*`>8aXZ҄1`Jo Jk45q5kT>"G{X3,t8 i,:wj,tdIG>7XYw(aI~aIc}H>}DX:$c`"BsBGm֙|?gӒ{Ҙ%tm/ <̈k%E순gR]Wt{ ;9[٨{׍[ }.H pu$l} A9X6Hr/+.•I¬c3NKkpu(p%)PXCW?C71mGxiqp%z  wn[߷upE _ѭϔ#a NR]+ %9¹%yI&^!4j8,4=we!$qRgIU1ax=|ѳքȁD!Rߥ9#];B#^">)"6rIL1n @!LNV!^ I"!^҇=$ī40W(&Y$q!9Cj<99W/z^ *Ҝ$/R/}JF<Y)O&q]nUyHIa@i^B=#?L|>/Zo‹}aҜD/FgkDz+dz1HP( D$ FH1zm-6ElN!$=#ŞTf2:%% ~,yH?LZw+Ұl/V~nѼʽ8l$K۞%B⽸Hٓb/=r~7שּׁ.:g$˕Q3B+8L =$GJm(K|)Cb>Bj!9_ PH'C3B#IJEKD> 8\idqB"M_2 &?D`U4}酀4}/XbŭBH'%CzXo|Ӄ0lH' <@54}`𜑦/,>8fj#5i+,zk$ &^ GOL/>RūH՗^"H՗$H՗8ڋgR ۋ@P+}HY "!U_|Wf/Y J'R(e{Ѫ/ >TXҁT})4Ç{:͙Y)/tcKUlE]2:Rws|%leE_}-GB׽um@׷ULZeY}<,|v3S:|\:π&zWx4Οʍ$!NQHs_qXH7ODHFk<q`sm{62oe-7o/f_=#(fAVϺNH*y6%ྦo@ޜ%9eL UwF2ߖ!"ߞ<|DVbA%@}]B;>p}eĽ@v(/[ ~|D"m~Ĥ}ӵ 1/ͱٷIDg:d eSU] ^}t.ۏؗK3חC?6b_kBݷEo#>@W]b3k5qa@elgu)ZѪ2*>MG1ȗ7Zt*۬GF7ߥfx* ތJ!5Cy3Ҙ Q1R3$oF]UW@)~mBXtҠE*':βm՗i*FȶT_B-XKbjFv̶k@[6{(&i n`mk7fAvڈWYT.qVUipg ǿ+Fe?_rݷ\Q{-Wl}}ՙ}1}˕3}˕}˵0CYaQQgu6FzKdktrr[|נGlխXƷw U.iIՓW_Q,Z%s17ެWnvR]m՘clV UcYXV=ZsSO9uM.p9Ķw=1P_l{@{6(-.ӕqach\.hj4vk b}QeG{}Tqlc7Fڅ5/)ښ$5>ncɸJjBmUb8 +]7&hZ 0xxu!Y@u[a!FaZolv;,oN#Almms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0041-DarkNight.xiz000066400000000000000000000107731247673406200244200ustar00rootroot00000000000000 ]]s۶}ϯ{*S1Xv-m¡%f+*I%w)g%t;]|,Ż^.qDC绣?E |zyzo޼闻/p>~{;RÛwOK(& ySsKf,^xpz|u{3^ߎ_+/vhqzK2y gws[?9Q*p2rÛtt?ɵ EKow~JRsQ3H c74^/0RKB2*5T@*891Jח 0|ȾF\udzf4٠P #b첩8p]/^,7A<>Fq',ZfC󑾬 Gr7M-t]Je3溤9MZ,65 ?<)CaQ͚dN+*D+* BOE ;3 4Y`Y]~%Wl]d~0Jtwe<Ѷ8C$*hkxe3w=5ARqxs;qBʌ,$1xV4_ٽB`Q}/4횏ڸخBlԇ7w/MVPw3|;E:'ߓn&q{| #wM7!:-25!m0C~;vfdv4!&Ŀl5,߮v~IA7^7Kt[fۑq2 B{ҍy7"uϻA{M<.mwXe_t.ߺY?~|톙[7O dno7~;>͔[ mZS&e4Ϥ,E%(M3yQ." dxӮѾaPo=NFΆ|}j45̪(P#NihaS)ԫJz Yt5.׈d],t] /Bpۊ-M<{ A#p^&h2UK ٯTG|WSdSzi㞊Hx|--4^a@q>W~92)*1ہ^zX>w(Vb\=/#&!fwI&@Z ejLjuCWc-׊exgYrgFju%_mxLv:葘b p\+ҿ~Rė%#(@AU^iAv#WvN{>ldb^آ[\-ڪFQn쭪w_2܈Uηp]t.6(YHvUˑ| U+]ЍLV a ͊`-KȔ Ƙr&cM*qe NqEś{4 hb2pE|,SVseƅ=p VջP܅=p84 sv\3"awkA#%Tk UէfLGnfóf͝]l|7͚ۤD[vӬG:A뜽MnCl3Z<N5oh7VqNhsޢL+(2Njv?=4 wi{rX8# MTw >v;.Du+cQWE}69ET_;6PBYTڬLvY*qmvY+^+wX89;Pb~n(W"r. p p%v{,gW"]Ž>kW[ib pŭcWX!\1ؠ&1cg+YëezXY+VbeXY+VN^+ p_ p5h+CYhݻ^:!_WtfQ<}_GVYd_ U태,)f+hf ^+j}2>+wdelcX2b ;+f!qso 5zK`_Ȋ=o`ӵHkv |r)W4CC8WKwR,G:Z8q9\_q\14IGSB#@8p;GT\T:"io3[/+,vftΰsAf)dY̝ o;.<'s]#;g:~l,[\vÐ0@l0Vya0^YQOmGڷEaG @>d1(̆؅ٚFNxq> ϝ:8tmq0_3/ 3vXaMFh#7AI4Aei&Cy$3 7A57A57A57Aг5#=/܄Ð Q4n0 (u>#g=l1.!9/ V`[ӞqbQ /R^cFqkw_\dHHk5Epȃ/Rf#qG>|.8AN|@ 4AH\"SȑOP侲K6"ya簍|( (ęFAά0:fȫύvya6G !t;xU?j>a}gk<#>_s`zM|| m (LqaL=7Ux۠5ȷ/aܝ>r;@9#~*y@QX!-w|':cQ/VyiKC$^FW,Y8/ ,ٖ7 j4ǦuCuCk4+ċчa@|KΩ0_$k\\\w9reP֖n'uSFIai!s뼌La^[9`83oDb`+t A;C܅/K&XBZ%7s6oy-o#|ZxU2ޓoϘ[2]xmVk+Ѳ-Q~?O,sUBzHlWu\汣3MVXnyU##mJjfUWSUb`V̤-hylCggkEY4XDbÛYǓxt=u*^& X`}Gͅ}ͅ}ͅ?}ͅ}ͅ}ͅ}ͅ}ͅ}l[}Z:,zu+Q#B]GWWӌ+(.V<5&_X+ڤ/+/1XA㿻*W~Ͷ_|>Y?\vއ7:lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0042-LightDawn.xiz000066400000000000000000000135031247673406200244210ustar00rootroot00000000000000 ]s~LLr,O5-ǖ^_8Dl$R}"H `Iי)9 Ïc1-\$iacOY?w?t>כănpO >Ti+YA{(9:XOi|MA`2_ÿH8X? /qo  %\pOyp7odx{&*ZhS.k~R?J_+?j㔶Zé¡2\0&FS{iFK`6˻[MN˫4_ 'b4?ʀwP}{c/+.h5M>~IVi\"ҵ^92,_a_Q>ʞ]Ze#Hfkêm zh2~* an@,6Rx Q~@UO0acc1-|-Q7X,QQXu;lqq?,OBp)80 y'.V~܍//_]^,L7j1$XC ɋ{4SX8oP>i4g&ch ,!ZxGNm1aYc8:w(HG.9bt A`7y-j4HçdfL1GiK js"Oʎ9OWw+zmr}"g5\ mgV;L>'x+>UY-5g}Hp  ;U2ud:q׃/MkۨZgr` hlc%IUJ*I!4?nD44otBu4O@'܌G-D @#x|+ 5[O98}V>XD\{D2"HjdwMv7bSF)֖kK@ Gam*BeDĶmKQ>}er/mL@ l< tylox {Q!uܶJN[}ZX[Y-,֖kKM{|~v)\qU/sξ:`Hn):c8> 9ߗ%٣&,dpoL c#j1%BG,GE?0xNX1L Hqw%ŵJ3%ęhLwGh:!@=pS#PKgKY6O lq:;@#wB`!ʥbKK,װnKkr8[ʥl)W\uΖr9[ W+ζ z3 m+pmwo2w| ˃px`+05h} ^S⢛Ԃȅs 2ރGM"NZ\4B fߚ2G=߾#=sʪ'ٶ eP`:p}D>['C8@^sRn=gK->pԇCpR9[!gK}8l3;/fxW>X[Z[]#&ø=}*ϥszgTjBN4T*Sy7cƷL 7&S f ܧbT,8N%c1aeZ0IT(UL V>}*YccS6α_NT~k*>1cLE[v*vL sNq'X )Ǧ2tXccvbZ& S|ޘ`1ޘ@oLqk -Sƙ -7Ag[qQQ}!C!l@0x*Ƙʪ`[nUѧB݅0*m;EEٖ>wOFǦr =T=;1 Qսqݨ4{3yy˰l&Q[ /EfOH )}2a+' Ae.#Mj&gωc/`mqフ.5_VUzQP4ShzeZL, 'רZ^4Ț!sF>e@Vs\/H<^xb௟M19䆞JaMOǼ =PCz&o}Cf z c0(0_*Q`Yj|t1*g9zjsV+f2ܕfQ?^)6g_8z%V- (KjZVCUf7j5cz5%_}C&rU׮l%^ڜX{SU7u$=%>A76%*x*8$KannR~JEy תLiEA>4(ɕצ^#L3J쎙uo2Մ n2~hY4 <3T삑xyE3 6 -nuۨά!X&*W.Fܦ3۹X+6 v+-W.(^n\;6cSԙ2[KZf,̫`2wU]v*~-_存S }վ-c[o{s[>'B镱;>Hcɼ7T6|; }SW^e{ۘ,;g}3IbHB[hz,=%ZU}.)YLLP2&Y tZ{BS5{İ)wN{p-g!Z=bt 1|ߊ n|O2u޷" I"έH[^BߊofH!ͺHͺͺ>ͺ8BQǺW̓3mgǕMŐK:Re*?<&: (;0L!; j&r ]k&rq5kQwvRk)JB^8!:^o"^}`q8^@-ȃ~ͤտuھeSyˬqwY_O,q`p${-9\]v_[ߖiگ'4;byB SUOoLqZ5yv"3)ּ*j8پzIɾz[U/ƷWoy,X'z?<|Q_ϓٍD") 6oKy&JF-樉mfZڼ3jȳڄ]4\>ݴABOӳ(_kY5)* 8JbAGH&,FM:~sm:~ך4ZL,Sf7(2u޵ĻM|*xru&W>ﯾ'NptH18(6OP ]&E▁_`~v$c/R ܑoD2pWt@Rp{nDTAC?4I/΂o> ƶ)"ߎ|Q{='kR+fn"_ bZR+n%i-I*+I-%k$LCLvڤWynVKh,If#h='i߮V2-iH[yte!}_E/¿)Z;H(LiD/ӅC)E]&VmMR ]_&o7MokmZw;YD']+3oa4I~{Cqesvsv( @t~ iv^vӯd~(2Sߛ0dSJWa:}.S8dtYT u(E3%]|&DNvn`i\:Uq5Bj?W ֨Ո)VHaj#3rz$q.9 |ynfFbhIDA_jI9_r[J[RH9AԦŬNyCVAY7{@; pcw鼆խoI9`RǵI} f 7s ZpLMy/ma1|ܼBM3tl5HLm M^<]<`)BF~8`b33uo>"[ЀbpN6V$B:#d'։&IAGMVTC#&q5<DZ ?Jː8pJMr3e]L]FbGIMpCro8`R,7a<֫SPv.n^Vīj"]h2_kFAk"}#,$Y ,$=]vtqr?MjϻΜdk]=L)u!A  ReKo؀d })EqOTqOeJvo?)>GZn˥Bfb}ɋ9Q??'>zJz3ܶOyp (&6_*J S7TWUҧ_ONer:poɇu6=l{;mEɇO\Ǖ-륿|`+Y1yb `'ͲE_LΧ7WtBZ[yZ9[ףًMؤ!k!z~Mʶ_Fy=]Y*,~+vMS~"/nBsQY9^>; #ADDdJP顸txWPܲtĞ|wЮx.&x2&CLT$x&Z'箻|jO`t['WnN rBWVx ['L :)Ntv_֊'m۰&P'$_,S%^y1_a@YwKF(c+4b6VhF]yynt@Bdzg7S,}/>3sm2 2VY3ߞI蓿$ˬwN=\ZO_ѳI*K7$xѣtb˼UU!*ZPIRQ7t@g`{ ,WColw;|_NXe=^{2׾fEMYW/!+ VO`f,+ XtKsȧ'D~i?FM _};~>ӑI>?r;S?qC-N.|MvX7LNw`kdELsGvnZ/}St6VmD}hq6T,-WQEdP- 8Dp?7a;ƣ=4J.|+8>N Z6a-uC@D_SEw+ ]lǙ>> h݈-Yc| cLJYbf"x|${8@{Y9OZ,9~ GK!>qch/\ l@Xo755h=Lc4]fOLj@mA k6UloFE8KG<lu3M'ɩ`s V:8Q+IPb ],o!gd#2pR#2]HUYDH"d&6g Kn^>-}Bda#méK;^\r_b;/d[1æ*S,&Nb,-N83YL9DaUUlW[TC EJޜ/xW[O>Z݀F-rV*YDBk!4c 5ancв",zJ7r "F_BVQjw˥X{O1—5 5b:rb(Etymсz"w8Lmts5\LcdmSBm\1%ԓܕK>z#;C[;䒇pZI%w_&y Xz}M$)bgxp8FxFN2zO{7ܧ9ύ^@κP8r.49qP-{w0$A&O9&+'J[҆F}3IA]]v`{Џ"N22]h^(X}#nj#|#ׅ>FA  1a() Fgs[0b8^|q o-Xb_ .wPB 5mPќ5OTj^,r=A h/WK[(I}svqk°3^}m<' R#J LGE悜y .Y$j|ER_/imE.71J9v/$RijqMy=Mkrwz>v~`K„^7$:EO QoL$m63 l l8m=iз6 UIp7 97i*Mx0D)ZYr- 'SO*>nfdU tSH=Mx{BOO/U2Q#ptTBpEU!0_7*FIVz4K(XO*43*F.=T(NO*I%7#!RAJ~pFp UQBۿJUC#i Tl4c)W@fVf@BMB43*>jf=Q 8YUА+Ht,TڿX% Wf`Beٵ*M`GiT(5^O?mf(YN,LޓDӐ+ hhժfYD2=Cd!Fzz7ðxL*F{zR&Mm(_lwʐ{BKkhwU.4p^rt&xJ"B\z@pf둿0HL(IR1otK Ebdebm;S8Sy J7_{#۞mh[u,Klmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0045-Spazio_profondo1.xiz000066400000000000000000000065361247673406200260070ustar00rootroot00000000000000 ]r8}WxXUI4\Xf_XHٜHx~R5Ft>c={$OCs Oq}bfvpyw#֎w2=O煛ݳ:u7uoJ}6pAjeTE!D t/4J[H#H⇞F N"N9ztrʒ{^g9i;w_jYi+c?YIC_ >U M]ULVob~._f wZʩ ܮ ucb86 ң|(=l4ZuЌ(U +WhkݑP% n6LW!YMĮ:::FPjByr5ayw1ѓ0X;;QՓ#6p-bMi\6WVYrP VI؎`W=`½ZV ;ɓP$Œ ddydEpU}]25BV5y 6kjYgĉ@Vrsi@(aOuY/\:F5\kQluJە9ߏU:-H\.O$N>j\umi{[}s͵%m5N)sLG~qQl~r‰}#Ax0wʍ '{F5D8/r1]\`^)*V:1lQkS)Y"ڠd}2+%Lm\O EA#)2{I 7biAdXmJ)X+ՌXm(n3Sbsخ6ބhw7X,UYSW}f.FNzĮUl2W6.2sWx^^X+ xbX,mA ^ [jx񊙃C+^Q8h2uYS4[.ͺ1~ۧ 8,ceֲՈYCGWcW4F`0 6n`ڲQ82X0 8p1 8`bFf (y Ƙ1 90k YԐ`Lf܆`cD0 nf܆`H0FaH0@1LGF '`Xsq"z1]VxvX0b Fbhd~`dX0" F 0"ς0 Fٖ0ͳY, -ZFm039JFq 3+e#mM%ӷ8V\5Nlsl+nYv_BtX4X4\cѐk,P#֊kV\C{^~B!|-6{K 31'іƃx0 F| XƃA(@ 3e`xp>2b璢>m@q}ƶƂX0b F ca,0܆a(ϒEyp?@A~ 2`0 2`t|^Ba|VaeHrX@/."?`lher*Ā[ұP/"t[Yh?2-;"A"騅B;E~(OtlP#-#q`glˈa,1#`t͕$ FG,08 F}z|# s?m6 .-.}tU`؀[}M4̛ 'q}N>bPyYlnJ҃`-k7"sn.qoP$6zzM7HQ?2"Fa^|9OW_'Y8HD˜O鑸Ȥs%m.RhmӃ/k]53KchKIDz=1 CBF }qs$SR'SᣔHKI*: Q5%JR"%=kG^(!jf;,o PJ5$ug ΀HBI\)'VXt19EYZr )s\z>%ifDCS)D fTL[WSGy|S~лmB7jOA9eahO&RH2"+Zq_h9NDvt]YZhIT٥B*\ӢO"ߺz. Ez)S: SJxVs%KdWg\m4DoHSC(l8 䪣ܘrhAf"MC'sjs&sɜ4&2Xt{&cR3-)l PlImNiKjmIȊ%mI-_2%z-Дo5%u썖DWdP2DJj2#`NkuzX(6T.[l=$lԊVůQ++_UP?QF`cԊmN}X/foͲ,_fRi9110S2ޅB2Tq8k.2wk.ç띾'TfaP'Haun?5Zbe͔eQdgMIa ^nRj1xd[wQ~kب>clmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0046-Spazio_Profondo2.xiz000066400000000000000000000043711247673406200257440ustar00rootroot00000000000000 [s7_AyOf&qx m0'zN_=CJ:sOV{ޟw|'F7 V͇/Wo޼fr86ם'ۿ޺4WoG[kS<yMMxLmLV1}hИov2,F1!Yr7eM I"‡=- nk? C2p6ϸ匶 zGQ#/fۈXH d˂zU` a5[I_83|X0hԗf\k {+PTuKWh<_En [uy5ѯ'ӐyλVF3s7p=r^ӹ@%1:),ɔQ(p?| ů QL% lh偷"[HpVctf: El(VjJ \?"UìY ϱyqUp!m5NީɸN3Ն #͈ \`n׮>.XU^ڌN;VežRHyN;3.w_]~'M(hp JYȸʈ=q ~_;PwE=ʋ}Pf$MCCƌ5Qʂ'^Z7;)I@J{ǁ&YH.,ns ؅H/"^{ꀸPh^p#Ƙo/wtR T+{3ѸS? ?jYQoM뒆0LI v)ni1(͌% Ϟ :lJ/;/˅@NGCA ? 7n?- [ށ)`*8x["3E\Y||:nSgy;CZP ",K:/t9vp&9:N.,QǡMkkTC,,vtegRXј=PYb)c~I7X8 |R$ꓽt!'`[^Hv"uVR^Ǝ/D-Y,oŴ S&1՛2E_>QW(@V;mJ=BFWLd:"Nd_BB)aZ~l? XhG4 K]LP:T&I]WTʸZo%CT$j7wX<`dC5F$ 0_DotX'*Ŋ6?PA^ T -5@L܉pPђ-gH;eVzy=L-9$QVs%~F;8Iauu:ĕ.@UBԓQg)j)C5xkX+ 0+憺t{2`]$0Hae'wVdKn#2d\ZEn `|m,-yȺH#I2Hp aQ5'(i*Bi*?2 7OA!aGu H}`FjS<tsM}pъܚ͊vl32B-؉5R0%AA Qw/bORZGEV~|XUl{=:ªM3U$VW& zhq{A?w?OQ~ @cj%/-w|(2Lک ֫Jz71\ID+\g*eJ NE x1n;Ojmuj 1Pp]CPpy;gѿFq2NϹRuzΗe_~s%Wcza^M D0Rfz^DP\VA=xY&y~G#}ıx[ăW(" /=M pd@3lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0047-Spazio_Profondo3.xiz000066400000000000000000000045041247673406200257440ustar00rootroot00000000000000 [_w6x!rN3Ȁl^tmOk,[ҕd`qwJO~^XMwScڐ_(F]D*<ɂ)} htHaGwC6_9YD}tE a#n%&7yO`2͹ Fk? )MJN^wH$H:! JxfQZ*%-.,Kg0r^xABY7M! Ga0 mpe!L~ 8yG>okD:Ww!)K3&[6ł)R-nʛKO\2̮ We\sD6vuw9lp"&,bAT}MmvHv߽%E>Ib¤L $6{ )Rnr 'VU>tgF挃ɹ% P,iq2}!/ &QY$B~a!_@HTʫa9ǁ1c+ɢAV  LFl!QIeIc.V2DT-y`>0H 0ġ" >e޹~ʘ&_˭Ʒ?O;8NlV*_jn2i0h$xM;XUJgY&tIu. mi0|rs*D$P[[M ҜA~nBU[b%-r- ҼRD.:+!-Vyw]ZwN'rt(4q6w7v']KTK g.CʱhnKeDRD}VQƗ1]|rg5o JyБcM[KFv̺elϗՎy6=5tp#f-=crܘnOZlaUjvElOT QSis}ϕr/&1F%{Εmj P| 掬aϱ؍pҔ:S"ȲȲ^lcb.0Q2(6+4Ea[kI@ +#+.%Q57{-cԹFݝ#tRa t2bklMH3jݼ}/$+QKCb*a|eA9+WEp3)njdL҄ch*KzTݒj?+O*XZ:55dĉ\aԧ4(I\$%F-k+{"9 L5B8YEԝ QtcmS]"x:Ox"\i+z0bxWJ[vüJX(lfƀpv,![Wٺz23n*{sZd5q@!e]3aw:H==+Pa{4PpǮ Չ;:O(OT0HëJ__׉A''`Rwc8njspcsu~Xshn(cHU+\\e[XXK.C*OgVK&t:;FZF#X'E^!z`jtKTNAqmS5mq>%@{%+I jWW7*7qwqvBn먺f$GuQ]:lG< ʊAZP3+?s1;V?bv~Xٱ9Ms.&\L4Ϲs9J X;/Bo}xHN޷sDx}Qգnp3˦+po,Ԫ>"YbL)L̡U@-/ qek4mФ2-Ccf|2k :y&ִW|G[9Wwa N+ш[{^ztHkj?"q}4lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0049-DolcePiano_01.xiz000066400000000000000000000033301247673406200250610ustar00rootroot00000000000000 ZKsHW,lbPk FamozS2ɚrJzz=#_}z3IҀmqEbAt~X ?\?]v;,nmy ]J}"&-qH^38pk15Yp2/F1-) [1u{ڿM1[,%>l nIpG]{iֿwlk+EE xJsS}  R! %YDbּ*ݦՊx @%IĐK'qyȞiAʠ;fFbpE6p0RĎ}sKCL!s;W\Bsݾ4a$ =9]&ɋİTl.@bOeD}}2t}+eh%2ޣI* +$t1FZ4J>bTBu*Sl  d4[)βqlԳ# -HShX^+nNw:>ghpt*[ ju; 4'KmUBɀ(Bl€$\]DzjD%W&t52HnqPT7B E"uKъg.!)tӘ5W:Y0FwakD4<=bwڒ߁y8X*ZebZ×y|IՉ=rUVULPhd֦|@|*xt/dTv%\-dEŗn`=_5\np-0A#.Ҽc%/J5]+i+F U$+>}a \&4 QWpӣ R]vJ3sݠN5E f t' 復چ)iw'xPtf9a5LG^"}2J mLTj:*dï͸y~z/Q;)0+2W1eB@ZnґBwcwle+4:LC8|Uz.8ngR/`[Υk:q'ɪ3 W<1_ Xky5#w{7Z t<Cg(ySO Iq ;Z%$$21H,1?Ig=Ï>vTL~{m^ߥo_ϕ&=l;䊇wIqL.oE8YOِgwVX4' YUo͔[$MQ5sN.ٿ\$MՖ * .2NRK+u7K@D?U",Lw\Q@"hc; _ޛHVb#6"|كG?F#== 84b{҈2,bͬxzsEl}=!tI 5;*#yI=*N> ]꓃GFυ>$ z-q%Vy䁤E{s{ Gj؃u82RjyH-R#:5W-N VXH}{|)\Xͧw0g|~0|y00| Õs:tWDbUvuCwෟ'2ھ[ _/mÜZwhMܡg1QƃH_k $lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0050-DolcePiano_02.xiz000066400000000000000000000054701247673406200250610ustar00rootroot00000000000000 kSH{~`=-*S`6lm˔Ǡ-$HF##>%=ӏ?m9zIi<1zG8Zƫ0?\{}㣿j]y G6;Nk~F`=Ot͖Yudz9_n&) tǛ("}O =|^_G1GW|A7 W!dx/a oS 4K[eͫҧ ^%C!(qL$a=t ܮV+rdq*ˇ4.nWM! X).E",5H.FO DP"U,8p6?ִwQ_1x*i+^ *ÞK?'9tU.mW Z`Q|cFQ: Hpmj(yY}3E F;}O9|oZ!)V(.J ]\o8K&<4PcD]E@4Gar䅣Ay, ] ]U%$퍠RгfdG%`,6ixc"{;14*N0{z8zD8̭t$ >͂0`č``OՓu, %xʽtmÍAʌ,gVҺ`to췖+dRRkE k\u~NpPޤ Q>Xo/ F2)'=zQJhoml_硋ۇyC oݷeeĜ;9b.츜O?U$HU|(;p_ ]Ò:!nCTpYAB ^AHVj%K?l\4tNx}#|9}d Pe8Q{K΅N|1$7t rϼJD[, _w=iGѯ8,}kE=]|ګ=${N #Bm{i5Z3rESl:׼-bCKMǝԍ9"dYOpGA}f'8]4?BYouP$Й2UEBһ>Z໧]J-=5 -Jx|@6oเs^4&%'8(f<`^y} 1J.  % ]Zr.TYP0d0G`tn VCYEFj i&XA⯸\*[MuM"u+<,ZIJWH`\Fx2("%=MKL׬Y6 Bj6+,rUA K?KSE_/Q-ijUeԉ},,,R=D$fi%1ǰmgUČ߳!y*54m-Mw]ݜjc;ٜ%xcTih4Mvi8sZ%jg赡:!qV!!gy5 2|>TO0 8z1N|[j2 hRpJc 3zږiV;]zkLL9zigUTu< i#\ F݁G IO~&mwo)_Bi2HܘOy?rM3/;3U[X&]QCµ9됒rRyJآ~i_fZIq&NxR=Co)$;g٢6N:jip'߭ZRWB}AVLo@:Z쒮ч/5KyyqQ<(_j{-^_oW=_Bl1Mn` } LC5bpns1Fߎ` 3 bo5DqV3hSN'"(hF0LЗ6t1ŪgG`fWm,R3ua2I $[?$;( |ay2G78?>/Bg qjLj7SHMi7n3&>0rdNd`$NJZsr9D?W| 3ʢ"|=]w7GGWNǩs}.17GW߻f1xm'4ʟɋp1N<ܚx?S8 4Nfh268FKƂVCrݞom(M/A O$iw?wѴ?߻ w6ϽBԧv_(G0A#%LBu*ӧ ɖIrMegCߣxg]Ą ZK r=΁%T6+0rvvx4@d8s A4'eoQnJh,V黂(*s!DSH!6ۺޥE+]{[r"vZ%[AzʙZp,"hGp ( fa*G]>ѶdL4S:Nt*-@lA)eS~Oƙ;A1?hDd>Lj" Pm $FʦE*AD7O\7Z<*!Ho"ϊ1nŎYv’xpV%˩cX(/$=O@OxXw_jIZD,ӾW4Twa@kf2?jrt5k#6"*_GGOJ#oI#Ȱ>,:,bXh&Y=9q B^6aNX\OV8ZD ~5$v"cK}IN"oMjozb+{Y5XD2jH:ڗ [zB;#,h"%EթBofג7/Cy>J<s``/w0Ϡ>_(cvׅ9\:kDwF*á;XdŧoEھ[b_.'m#whCܡg Qƃ(40b#lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0053-Ding_01.xiz000066400000000000000000000035521247673406200237260ustar00rootroot00000000000000 ZKsHW,lXj x6{K(A#Vo =)!ģVO?7x!ai}:k6uףӬzrrrGoܝ}nhusS3|r.N}#Akx4]97-; x6qj? ;xq`ՠ'wN/PDqD\x^ŰJf d[?;S=v&='TYo\ EV,ccďКȣ cPV+D8>^*I $Y:3@?7cM=xGMUt' FihfY082H$,3붕>S 7^n2yeN'۬I3}Ab0ߕ\uP.R˒I֌3{ܻYBJ 9mcE?F񃒩s}dCDX dp@N.H TvNGZBoɽ>> fO"} VPhž4kL)^!p Y6UJc,ċ[:9c`եfU9\f[«r%z 1u(B0R[c7ah); 1=w//hxI]@:8a2[pb̃!. Ɋ=V%p9zYst˱ZVO|Y}:/t?׫~<:1moc,! MRaNj D9dhCej \`ًc FNCRnKV}2 (%@H-Fbd:侶nԂqF)jjegA}x\вq+?!Ą&(@ÇJ*B > R31|q|SU #e࠶HMNFqr0# hBP%KɍFMYZK^B,SbU0sGcGu=u0C-Rs.PSV׳ԲYOkv ~RJ՗Y{:uF]hy %n6tt%%tCS8ed'yc(Z"sVɮ9eey+KreRϛ5Ζ ޭ.-;x.bbW f݄⌙ 90Ub )GNuEWXR"Rن5 YrUmkv޸s>";,+l+{/EK, D)C̕3JLH8 BW* @& vQ=تbkJoTZ׋V7HkS+ˢF|F`oࢆHEi}icVIo^Yp<t?2ζ 9g.FmP|O+ǝlnR;S)`,R^Q8DBLv $/qH9A"_poJ~s/A;&bn1/O3kLǝ4~{{*=L>sS|:`N汼=<=^gPH:SG]iPHcnVa]ՏU2;cNL~F3i"%I$o[Dmjߔ)>w_kv_y`W7uK>^' +4Iz^=uҲ:)[OstN|]i9fv4"<^Z+CxuhW"NY`vw"oR!3 ?Ia;~se&"E fk_DݵI/>{#/*lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0054-Ding_02.xiz000066400000000000000000000074761247673406200237410ustar00rootroot00000000000000 ]SF~߿=U"B.`nE%lJlgl_-k$ʹ_c\U5ofZom>{Y&{{Q2Iqrnw޿y/>|)9NWn7oOU{_%'/oJ*(~>Iw18L.l?;?|rsvqNZ6Mg{I8_|̞!Xeє: g+)[Ǔqpyruy|3.[3 ߂y<)ꖼ!ܯqy4ςE $˗yVQ &VGP25iv6h?(NxBV6}՗2aȮX釠=( ^$2̜ET׬zHclj+5O&є-ܖxnW5%Dr 3 |q=190pZc,JAZ5iia&lFgV:^1z~󓤄 C*}6p9Ox0v~:|q~+}-!.7ƪ9rOmxd4jOg7_>m yҖilzF-$!} zf$ΟWfzڌs|q[{Qԩ81Xqa"*GRVqR2^ɗQ>y蘒-t9-Jf*43՝ID{5OlUKOi>WЏ_<+Nu|m:t.ݞ^2>eǿ ]]&ixk2UҬq4LpE+ݎkn܆[<Tf"9:f\F9b pz-z֣Pkqz#@VWVuV`},DŽq00lђ4Dx͢ __emY3h[R,WbZz|rgkwuplk<vVxܵG kay MaG* k#Wە6>S<*& 7nc-J/2")fyL -Њjmu ۯ="p6[kyPYY*nW;k8<8QngOfi$ ٝR[xpaܒܭIY7fqJ xt mw"A .K976lσAy-ȝF5[C!]-wa4ivmWI8 B]jan F_DA|QFINA^؆Ƿ%9 %CElRmOxjUދܲ]̚p <&dT՚˲]4(qrN"dw?QgnA3sZl3f-䖏9vXj:.Cn*):m =@BqQ(G 9#x7|ra2qmlö_s`%w7ѯ&o[vR. 9GUڸ9n%*+Wm;DA\/O?t'MotBo;[$iq:eTm>bձ>Ց$\W}VWU- p/_dzp6_#W8}mGN>5~”@Gv#N_|k9};^ӧ $`!kؓ0a#?L*k8}HF1iL!Rw_|kqZjHa𺽶TW 2<э{ 5i#N_s}t^3uFs,>yzWgx^ۈW';^FJR?n]\5yefk[iz$1xQ_Yꆚ\JƐtH9~rBe:;+EY{+VB<Ŋy5da9LteY5@9myOkrb뤲ɽX[v[ 򚦺ӚɕĜAx'㤎leLrSGrxh]kN|:(U|'C?Qf̥E\NغNt&irMR2H*Γ(: th?'$MrT"fd%6.Ey: \+q;-]Uq$ ~-¬m#qƿכ_e6~-1rlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0056-Senza_tempo.xiz000066400000000000000000000102271247673406200250310ustar00rootroot00000000000000 ]]s۸}ϯpn_ř$;^[4]CK]TE*R $Υ$ʹyڍσO_/:ñyj,G'>{/7N˿̃,S2=YS(.~yW7 6K4Hg, DA|tlǔfJZk1IGq ?ߞ]qopN 'J;h|v?oή'"32/yOYZed5e~_k?lYqהl)Jp: ,uFCJ=N-*Jnw$Ǿ$,M-;jzpz2}A&DD#q>U~P]MX h=KΓu.,Y杚|"LZJ9 *:ސþkYqWyU>dZ*Ӹ6 `5s&GñU$E yOwtau/7Y5TFGMUϒyE`u <>ҚshRä*읳OW/KIWy&8&V FD.Y\mًOKU6]FhL*f2~JK/z_%qFFBt4. DḼdz&zYW+luP+5J&k6"jvQD !|=~C(4bJ/;DkuCphPdSz~Px!˫O5ёm)JlN -!7y ϵjg`\SU/jT-֜Vn.^X& Vz06ݞ;MV30&{qQ7ޝ 1AjՆ'aH'$u||ng!;/"Qs\ l!64PUö?X:0E@8h#vi3և>hyTxzsu>9 &SIk',ANZf(ӒK̈́uT$t1kEA;2#*H[d{l5â7W O?l<M)N~'qZA"HXͤo bhEV@dfgfWfTÀol*SfBPfBP?)4qjz+BKFtڜ戫HGJ*=.;0]Q\`jRM%z:4O:Z bJ9v [H/#(͡ѨTKȔ[3Bs4\SELT^):q&QRk#=.8ϙ&v hH/Z|dlu ( DTD1^tl4d3KTB/kq;P܃jcB7^:-|M^Ajd>8>݄݊W1Wp򠯪3*|SJ4bLʐĎra)28ݬ=({FC>AUylcNvO {FW]xc8ػ«y Gt0-qnpи CxCxOѤMyeO2f9#( FN{H'O"FK!?h Ab?t "q/j>@Y(*Q;z| {^&w _jƺ i0Lח4W.H.T ň.qfFI3U7N/ (!o"vE*ָq:dNX*I>WzlA:}>*U"H`^լL =O-0! HZ#Dy/Vj]N 1JBssRyL zhu8: 0t/.qއsq'8 mwK%v[1E,V w>m[QOՠGф|mA]C5*L| &;q2vgf,| j+&_BAq6O#Aa<.d(Z3) 3"bK?I1/,y\X m跡20 .F|h]ZJ!: Rg55xgR2CstXkaŰxVXG˄ʄ={;, DrFis8el  2]<%qSx{(a7sHl545[ 2| RΟipѫȴhG1*ħqEl{)Yӂfdg?r4?{}89d[T8d.fNޜ5^M)D է]yy!=&PMI-RXvqkfPmZ TFX\ ΃Afؾ@_jW@||Q)Wt{ "V_ozF /=>RvޔǗp3<)Z(h1է)aDzq ^Zz2bCVxCA89b}RWYzcvksPy.ʎ\јMOC. 3].*Ej_urQ].墚n[ <͛"&'&0"/u\p9tg_[-R":B}ܨ{UWbҭ*Wl~̈́Z #̀mvjCˇeQY%[p!Kn;Xaڂb`UΉ6<[[pկ֏鞆a( aw T }hVGO6+&mmVv3YXK\2ZA8n{mvm8kըTo`QX:0J##gKʭޜm5?%svlMI3HMc9jY(QbIYVmͣ|̿id}PƼ%H Ky%ہ*/vbf5Z\-^_nY޾qh$Av.QʹH|{zp V+8*W))*i,Ѱ6Jm.*Ai2EKvFqQxΫ&*u8m4-Ȗ9{q\'_ǹN.Us<gV&8Kqqmv|y}p7yg |-ѧ) ?*}y \[IO>hc,d׀FgO4 [4Ld miLgݰϭ]5ÇhKZm nk̆i0<&mw 48y{F: %A6 ٲQنEidV+Tг|X8vj!A޵S/Tʃ%(TZm*i4ͧϏ\X~GrSnf,▓vAI [nxny$p/&WkҺ$Q(IݖU8K[N5ŗr#nW":Y_9|x["&,%T=} !AD[׹B')WYS ܉ JT$[eΞ&//IJ_ iQ$B,N!b%Z|~L'm5VEƹĘo"%?ba}yvw+7g:kyvOK5k,fH<)-" X exnR$ >LfhbƬ-?âWATsvNdUAT`Ӥ1Kk˖Tͭxd>0HKD j"u(K/4$7yo ]_טԶm5T+#hZbpU֥,Rc_Xr' Blⵞn+4[a5XW&]k:R^ZS\V% r kpkqv{wdfpU-y ~M:)<Tra2_/8jYU8Xe kF_It[PTɱcZ04Z\:QY~$[CsHU6|$W3@ؓՖS3*nPMJvyC% N >ݦxFL=PZ7IIeq16ecț fL΍a6oM`t[ѭƹlus|UTثǖ.[ڸps O|]-Ι]p6ƷYKdqF)_u0r 8,"RJ1UD2vDV)`n$oS88x* psTE0=XYТAm7Bޏы2\ṧK)3=j+-D y՞, ak\BN0x81H?O3ZFh~#JP$-pۋ@sR!NtX!6+KNC0%R8 d!)T|<#X5m/]t/t$0rj'AZԆVZ'UXi?hU^ԂrvRaSc.geC2Ņ]?CZܙHtP`ɦ8;AY@Z#){̫Jhi@h0:R3F Nc_Sr¨v(S紓NzcZ] zV31\ {3tc_zš~R]y~yF ⡼cTuZg1Kk =L)9 *7/2O.CȽN1?`ya}u |i۟DuG~$?7[WвշPp lou mnC}„h5g>n϶-1;s-MLըBʴ7[I\"}"ȪVwvmx!FՒ##g"dx 3G Ichl*) ƚlO=Ň`QBmK:e @ qVn9 P0aq*syB2I j`D'ʵ^&|M 3\l)("4<>Ԧ/zmQY[eTYG 3ܕJv$X,6 @\D:ζˆ!`XNIt'TUnjn! WA0P酅Jpų+5oEqCuUaTKhKNv̖E)V2W&G{)تI$/Z*NȰ $XJ5 wRgK3|i >{z<4)'ճv-{vY={ =}*G/7Yzu,Y&C|ke^0/UVyyz伀;=r^9/O}A7/ߚ^q8/myp=/y6yE~a(ZߑHbѴ]!F"Գ397ڔDʧo~z!0xc;ڵ S -xPG٢~e4y+Slmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0060-Senza_tempo_5.xiz000066400000000000000000000027051247673406200252520ustar00rootroot00000000000000 Ys6_AyO@`& 9Gth-[BXlGD]vOoWې0[^k9K4띷ny=̞v-t=yߟ£L޹B..O(KOT&_!\91Pjc\~MY4pA]}},~A눸C[S~Nm4N{fO0!oȧ.E(rAVk'H{11#"!,õOX\m#΃bA ׆p$K m3P@~e ǮZlPȧE#i`g2]1O\yH) iNP{˜D ĬQ~F}(R(K䦿i~'Kĉ~BN/{V'%Ԩ{WH 瞂-zbk@q .)Cd p[7a.NE^N>P!Z )Oy8R!R%x Qx B%Zwrt'ѰwͣyX8/1$[~J㯑Ƀ-&t 9M/%[0)&\2̕@pz]̝%1Uy*~*~f` b]RDew0ڟ==kx I``doWkPf.ŰDo84"2#2KRS{u4Eab,RS6hФf T%!T:KY588& ,Ĵ m kx7J8ky,$J=0pA=cQilA0 <\ 3NjbB˝-x{XiDϝ{LH|i@ N|WxVЖuq@YwzYwza;gun}Xrzs6^g=RDž!/|4b>okjz,ڔDʝJ$d d6<ĴRnKWe:uS^#ᚖ3?L{7GGWݎoz1I!92}6Tk=?G"~<āk##Ovj8Z֩7:hH]wYsM` Ĥ/ˈ>uz6ġw&:;}'Tm Wr?Y!YNM|T Df3bpo8U$~H]"I_ H' qlŞ\ llp2? 4u.HjxC5F"%Ooo$ ׎P|ALN#\y${y}=l~vLvHFd.̰~7吝(㞙8Os8;3̅E(l-C '37|$8`~$r'ze e 9[h1k[At/*'rUJ粇wQll%' "q !Cic?Dނw˙`\.F*|NN8^@DIK1dٯ * )}Xg,Z6zc}VDBLF Ɯb? BI~ BO-uBi*"_R @ A7q]OMJײYK.d B6[T1@@7 ׿I:@>dr7 !~1 (ZN.NvS4B\5]E{ꜧ) SE{ ڗe.4ߊ&Jg[LKrskmJ %Nl斈Wc}2v]E]+Ō?C]r1]`?DPq> \;H'ym"3{Z $ΰI"- kI j&WY"p Zf5jtI'y!jy9:7ns1HX$HŭJRhȊo;I#Qa݆äsu0 3K* '~"(X`u^Hv'!YZ(a['&T,.\D=ڽN3 0Rd%- XiP0ܟ%DM)'2:0XT23H1} ۾h¶Kay [ Q P@bwhmU8$v-؏Lb5I #PضtTЄ۳+m\Maʍ} *EzDVjW8ᴈT9ifkjQd%;y"O_4E_4Ɩ4-?zX.cqַf[:.6OvӼMQ*CTb*aYMsJ8W\%ԫiD4_f bZ{,^/ CQ{y&#@4>#=d-!SݰTfꃆs)}OqeicsO<>lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0063-Sospirato_02.xiz000066400000000000000000000042351247673406200250310ustar00rootroot00000000000000 \s8_ILGs tQlnd!i%@B<1Zv՗żL\r^pL˞^WݓꗛO~t?+m}| ~J,wǥ\eG_>p}20|lay}{_K'ǙWl Շ ևYg_2-D?^Hkt?,Y>YxhI\dٞ bG 2LeI\DPSO4#=;AT#5YHh<|X:ej"BMToF\;޸E2tr q\xV,Bz5cWKʽδj2ng/;kjpᘰ%-U$Jzcbzh Ӝ3y(h V|ٺ9l􃬀rk0 &cے̓%5-}ρ 8i/twmz}vtͥ.#ճ)/mSL p=cX ѩ{6fSrldō)*e4`3.2mYu%?h,Lz~7xe(힉hXL|.pH-;Sfk*X4x;8AL9{b/`-}ZD~qY3Up˹*o9q8lg9f*_! 4ۧ%` (aN~[1̸/Khs] @L(nhOULΡ*cܵhD!0"o$|+4 =E}Zf8Ɗ.͚|,LxHڑl%>"b&_^:E \q.ۆ2Ĉ'y'l$&5aQfY[A֜RLAiĞjhPsNN;@th hB0\:EUˌ$EJ X` YV0c%%'׬]Ӵb#0r0g"a~g p_dK|dblzbD93Mӑfoü 6FH=@dYaH F뭳;TK'aE+]̚#hbk!%TE"i L%Zm)k?A ۋj?%­淪8ƍYYJ1͙ d(=DnBr\A+&zv d'FĽfC2 XogF/%exTLrV}s~V$r4{0 JBwK _ B蓍^p{?W0!/`e uDB?Eb#m]aH}RبgaUOG Ρ QASG˔ b2# .#R-2U%i=Kb{p$lݐju ʉ]LNKdp "R丗j3W{ɢJ~xpW7_ܑ{~ Z>frI.#B]>ԠEk쌺pф;a]vyUW@RVl!Ej͋fss<~)RA~j.k}{zvG~8([ S)N DBBWnukֵ󃧂EK,?`X O(R3"q.n؎sTH#2&[ss.ǹ|Qb|7δlS#ۙUoj[H8pnWûGv."dի: 2Ĉ 2~)_xC\[ Qm~k Llmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0064-Sospirato_03.xiz000066400000000000000000000115031247673406200250270ustar00rootroot00000000000000 ]rF}WhDIJTT$:h[ \0yS"kOwϙw?MqDCI>?8|{v7obx>t;9N&w?NSQۙWS/AFSKpz_/<C?^wG5b>7t/0}r?~}nܛm7嵉f7wL~J&dYZsAwn&iad\K-4@UqJkb>/-:`?)M&}1MT1iy s`$VCC&s-ᇻ(Fn]#/̗u(N$GlV:x|'Rj=_YE_Y+lgDԔkB˪ e jnԻ>&jw?͚T(lJU^HJgYMi;SM1?t2 ]2Eؽp> F[NDG^\G/K4=Wu򥯆<,p/4KCO`"?^~>Y'9/RN^U&oyU>y, {$~qRMlo{jx3U!Z(vga? Ί$$,w|Y&V I9eEy?qc{Iv4}T?-d!u'>Bk[S]].?w:ڊI7jr(;ƒbڝNZu6IZY-2ǩ;PC*ZoGR_o6D #ưn'ԫݨUeGaJ̢yNs,>laOagNG2ȋ ʗ=D2iVusFBHꌄuF &r,a @ ax]Zc[ڕ~\B猷Tlf!ZpmpAj%j]#Osb .WtF9B1k ~ֱk; }P (ϫ0lU*&Y%L=;7gha;4g}urл?&h/$?y̸pBxFzӥWO Ǿ~j&f@qبQ貎6mm!{d8c mm$˴{b=C\kO'ZEgQU :-+U;:4,P6>>s:J:hUP7^WNPh+\vaZtjqTK9>j3T/P#]ZGjjqfU#F+_#WxiL@̓͗!G(@f!OH]ps tEmd1YƾT\En31}  g7gdh 7^\L p t3PSf7ggV(@C3f(Qip?PH@XYlqڥ>W"؛= b(n?0蕸EaЕj1W2-"-̬)+p{ϤwvcǍg0cn,88SW-%!cw ,+ajŁ3\ȴ()FEJgPM2P)qgh d\/ NaNvtnUL A>Y$ev9vnd<ʍ(wX]&Ь3uo"kAwM7vzgG 1tp`& IC:Ǝ9DvQ9@q@xad[1@ǎ{ g0r7AmazB<0B܀b6#BHA`ۆ);nf䁙k*f1A<:`gwZt(G51yA<{y R!|6 }z:3wA섡#m*9 kgB@/@]Zsf!Z`%A={!3|$wwaLqk mxčŨ`0B*9C=.0{"A=3a3%Mq.'{vrϚ2݋3D=wwxE'DkyS{DŶŽ|LaϹg n|!D}Cjh8S| Qn#o7H8W#nɡLRq@6qб0i <mi`5.9WS2s3:{Ƃ ?+;f]pr  !%c4~6{~מ~&mA0ZMBf&mEk5]lqm<\r4LZp?+~NP=Ң:a\L y;-¶;-FBsi aܳLeGJ8, B)Z!s:[' FP?(BPx o_+sⳲ(f 'n9Y!9YɢVFA!E<\Q!'^!pz}t|EKA̡P}.@}BTDiFwB>"_s#yomr3V·!?.WaշԍqP-58dÌ+c1 Qe6#&f4y繗Cjrpw+%-fޣJ?'85VM+2D+ZSOv cY+dh𷵓6;*+XjAW W:p'O}3fL.eqNB.Q/TU >nx 96dD/bZhe 6&*#k,peyկvVQ"+iedu8$ oӀ,Neue`dIeU\~^~bU|_emUk.-.GN,&Ovek&朚Dw RZ-P0BKTwRʯP3}j&AQ.9L5h)5˴$ㇴDJ*Q7U ;e\2g.빿23đ Lܵt.4'.n%0/Į4ߊW! FEUw4T ^is}{/8l>7O37Xs%flc] mH S4.5oXBaWXqdWg6p)x}~hSA9&P{L-Xg׃Ĵ(ٝj[*;Up<4Mk֮> Mk-Lv)w;Q; <(nWkp=:ن_? :XpNO#j7|R\;lOD`xf FXjϱ^R[RG:A":| &SYA[Wr^W>..|K8вb;m;[L`> gۋwbS#gJ!PN4HzXv}kJmC8#?&R))K-FawȥMa᠎|xP7rlHSq kY wQ8PX``@Q6+>e%WYTu8zoW'Ij$oս *Pnu9C e,4sjF }v?L0p9T(?8c 4܂9^՟$┣fRɢY'[ y1I&^{iޒ (L02\yϧx}jb1J yR\; x񙙍 ]6^Ŋt[sVD↍S5xeƒ5h% ?R1+~"]?(ƍH.#g;ΣHla?k _,E^['xfoWoJ.-oS q[o/F,y5Ze|Yhi6+٨)G  hNwqK~-]4v頫s؝LxFalmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0065-Synth_piano_03.xiz000066400000000000000000000034141247673406200253420ustar00rootroot00000000000000 Zs8~_ 3I:\bK܋F"-ΖrI+ہښz|7ovw<|n;9a|?ح6augb zwr> k[>ɉ&b>ء#Gք&~G?G5ȂsҀݶ'xIb‹ 0kl2OOܞ2o~'zdut `AL,"^( X(Wś\2GyE %İ0+̩f){*If=Հ?`ˀ&7gw 1n]bU:8^t6ɗ0ʚi<ޓt<>4fDCe8 6eɌS\eN7$H|}EnS#k-ZVr{鲋 $)+WhMz\%zwpW@LYQ٨ QF=9M[,IA.<24n OA9[|OLeE16*LAvα }o+XYF2K˲|f6Z\P[IF #kP9H$͑bcF"lIp ɻY7LxnIےr1ƩKdˤê4%Y[sA°X T+9N6zq9B]eS Empmafzu4bVLxjBEYKφP#|jE$J(m$3抽*YihEq:Yi7\H<=T*g^ZCx5׈buv~*ԓ=ڳkTE7[l46OF8!nsEY~iza_^!$lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0066-Synth_Piano_02.xiz000066400000000000000000000033501247673406200253010ustar00rootroot00000000000000 Zs8~_LG̔(˽h-[l9) 酙=ثjo?ٹ=,=^7 zua1m~99v2X3y9I J= X@ԍ-\1BrpSd>ĭ ͼ1o՛1fZXoϵŭʋwI~-U -Nk[hCS9[ W|KBǤŵGH؜28_.uR!PD>,pfyǃǺ=+;@\/! 2躖N424An{f*JT"կ~D.pu1[Y! ߓDQ"bӎ9>Fp[5|opMq_A45Z'jС=T5QgFqH1͓"QOT=Da&Fo!wF]j D Y:%z6z3yRؼVYȿ&Z5d=cW!ynPo|v4G|q4ϝy<<::^ZkC8ӿrF}'""}ѪZvQ~V~kwYI6wYBT ˯\M56|#lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0068-Piano.xiz000066400000000000000000000077671247673406200236350ustar00rootroot00000000000000 ]]s}_ 0v7ŵql* $.O f>N\)={i>}1?"? >[?y4/?{?瓯7ãߞlv̍O>e/i=?wE!w?%h]OcG7z~LG۫dt=ʹQ.79uͨ"wOEe[wCfp;Nw2g~ww8*Ez?co9KoA /T=ESgpxQ^/,C?Y58)m24qYysύybx?z傁P7̵ټⷽ1oLgCTX뼞xr*BkVͼZ0oy0kYϜ s 9}Ͽr̋A79 U9FA6_ZBos^X &:IT UFb"nQ95aWjF(j#Q9NDzzڥx#aqt&,8eCYIk,ԍpśLhǵ=:1Q7y}p1S؉W~_},j]TV\8apgF:-1@fkJ/L($/Jr8`F4FX+/ 7zi h<ʛm/zhgg/JΦkׂSJPDJm=/ u&- eLSf_~C"XIsp+l6•_"xL R/o3UW*uQzFJ+\u:o4-qn\  pƹ p%s#6dch+sMણn8S3^k;b,=)-غS+EOmRq^JgdJl;W8w:]1):+dȮ sD}beA'%^VS:^ $A0GJ x&_K~?¾O+N:";7&^ UTsJKב4W9:ތe' :V0]H5>C'BaΐŒdlEGZ+,K蒙Wj3@yp!]g)WT/܅C;pR ;Cv:0G}T/bqFf+:@LgJ v2cpX'YҙB1@wNbѱP)閖0k$?_mN['h(qN'&v-0,DF7:bQ* #TFTp,qB> )| `,ipт 1['GuRWa tcҪDxLB iY?q̘YėY,DK4"+K 0 IA#ȗ z!uEYHאΗ,)Ih%*//OeψryΘpeQ@2IFľ:a!f_mDS`#*5c=lDK~3=<"gDKbDQ,1)1R8~ily/F w؈I1h+$);$1R~)F KCFziQD۴TUaӘTFU(ܞAA66!lt/Ds*ц6"ջOHKE#@O:Ao{y; զrvIR0@KI$lKV6—lpi]vc!rJHO / {{( dؾzt> &f˿ddo_VrP}0y1Ta!(HHKϓ{E M)G5M p4@QODlv{-$GSpE)zН $$I#\\=X{+عzAV hݟ\-[iĊ)H!seD)ExZT{2yNeђ26$9h, !dDIw6pRO,J<]e+௢\'`db|\IW).,O۫Sʹ=j+9DӭB>ʪx-NA誅f^8e4ي~m?hxsW&y 4eY]W{4z\hLeX=FqOK h,Юi)MQ__Z|Qܯ)N&}Ij^uͧHLLckdk |b''"S[q 貮j.ҧyTS3o~=Ͼf1&4j1)|48N:TJ8I|f*y\&%@NI ]bœ M$ u+p:x|zq9Xnr QRRѧSZhr|.8&͒4} KXrWNKWu*JUMƷUYi}I<0$q\j.+j` ?^]M/F`LY[}"2 qYFuѐqr,$XD(\V^E[/iA,K BߪDRڰlsy#+〶!;No?NU;ՏϮ\/;iSA MsFRY^Aճ$QdH ibÑ g}XbI4 7A8S2]V Cbi"KfO˓?l$JWq;8 ( >w*N$:y=gZEHпNEm!%/NAtV4 5RCk^Alcn )cʮ !nY4G:شn[T,qF]]*:\WP~2mj1SB>K'}-e"mT?˦0ZeZD1fBQjׯE#ͫ&lo Y>*Iv\TO̠#pL^(P|IARrG$%wLp'ňpSMJ谈IH?yaDp}u~9R\zV!˺­P#;`QڪDm ۀV;ku]eƸdYe&MeV0qT.+ ` `xZd2ֻ}xc]SKh={^܈z],cbeXY-V be92 C70"\1Gd8Y+NናEbGoWWSɁ?+p%"vC0h+:Lb$k,2Lv8k}] 6.23{\8=j3k pf0뷋w3{YyNdp9!=>Հ++Cb #w+ 0r7h7dv(Vہg]}/F~9(*˭[%ߍ]F_hCbc,:_v<]dg1v,83*ޥE,."' pVlY>2Ap\yv\̂p].3*E>l0y@";`HyqܮSf7t~ sF3ZFC.E.sC6=;`a<7 C>7>@ |dyqG:?!m!3F;Ɓy[m&gF 9\䝧 3Ssa,Sshd#<',rȏ"' ŭ%V1;tؖD#HxENzڽ ^zV%8mE[%<"Lry}F>/V lJ܀!w=#=1<ÞDǞ]eOg<泟7"=gJ B=E薇= t+|nawr'f:}g#Vrg~H lo 44so.rS4w8\b8Rtо(KHC>.)6}A*+>2_9;̶GyS0C|nU{țϥ>x+FI.y9?d-tZg%#oQ7UĪbߧ>CE6gDzȟ^~C/G6JL #KMFX v n >{C}yX!>{C,pʴ / J[h4*:|.x̑Ua`rs9p|39z(;Cxj7 Fa$v>a$&sgYYnY] {^,g1.mͲ[3;pcN3HV#./W`4HiE "\u%{Q^*)\4YvEu)}4P_j[0G'%!cs.eSv}Q VAR.#HLf!ʌGl5 jݕ@LF9W_ JCd!TߌKnP ]y]Rڟς^gaɶ7Nj@.@Lߠ3ɁBƵƊ~{y^bI^8bF ֨s fЦwT]faTVytߎѥ YQafag|F)AME z <>ޠ hM[P:nw8V{^2B T:c.yKn1:ngХM-,h&#Qv:Q6Z;w\AĴw{ aEߗpϥntiҭA El959΀ciܢf]"/җ 4i {mJji^[e f$,tG2]Tֺ#N[x)L˜Ze%Ţn-"}r@m~ L9*i 9NmW )N! t*k:3n]PskeҒj2ؤ\f}n`dQ{]OD>;N/.2׺Nvz>І܍rn4ל۞A*}=y{ۡ LPՈZwhz<|tVk.3jlCE2FH?W@&xu2K (80O)Vza׽|7$-(^ 鿆c!_J3(l'~Z XJߒ^9#.z55 ;]ǒ] } طu°{X *-H%rlJJ#B*c%ߍހx@}TǨX X HoD\P, A<.򻴧Jϰ\ˬPK J}9Y*\g5|ºB-,  n` j)8=[04hTMF{IO=֓N?d _|Sn])O&EgtquJ}u'{=8$o}4me7Cu&?P-C>/$ؿHf(}ԒwnYtdVteNz׀Dͳrse*wHq6yyY>.{{Kt h^Zm51^;FFQa~ ԿoIڮD G#jO#kllUBH(T3RU"UF&PeE>^I,Qn"׼%DDuXUP*7U7AH{̤TpZ.#HOv3CDz}qq.lFKu;qO%/b!QPW{j{+zoEgg e>o>{ )L}>K5ə#+Z[2L-wm~\܊KK*@]J pt)# .%V%V%ҭ/e՝=C^FUEYMb<oVssv5o;ynV&pެMY%-TEY%k5w_u{!WuXQ[[*$U:<;2fTcAo] *8r.QDySAX5 KlWao 1e Gmk,&"Q{sBZub{&=Zh^2Q ^]k& L^/QF.Zu?*Z$ ^O^kp$/ś/lLt!D+`|Y 4b-Mgz\5ןOdr;$Lo ,ݶlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0070-clavicembalo.xiz000066400000000000000000000073621247673406200251700ustar00rootroot00000000000000 ]]SH}ϯ`%0UI`j 253/*a Ќ-y-9^Y_l,Sɘq۷Ow_}|v_A~X?:~8 |rw~ӻwq69z|s8=7q?T~-NKfSU|S`2Mܯ\YG꿸:\.&W wG t,~'g4VkuR[v\nFmVY^/p$.+$NYK'daXd*-4 UDQz^:@aKq2}_ 5T͗]>@$]:OәLԟ߻C7+f2XNhq`*B>``(G[2X`CJYDEeZtBpoCU\l~ed%ۇ.MtYL,",aqMK0BZFK"K1q^'tC\$H%n|{Y-g96{B\ r[Ė\خxp9rYvlYč "{rZ`95-3aHdex6dѵL3ؒi lg Fq("s$vY, vsHKwpudQƋBx+a_`WL\0*L")NJ6]вz*ecqZ+t=DөBk"VZe*k 13-0NYA b1xqW&tA[P4τmUd@T .f6+A|qlOQ'n̲JZwbYXa o^t=H> +7" p&3IʬKĭ6 Bn#_#0iu,7 0peW?`Sz]yFl=ai! $ (2SPlɒcu =03 DS ^( D۳c o#>d6ITe\,7$Y1{O!}ςc3D[rlִiD[Pa*C%0[!O\1{A.1dѶ.<%qnNfF1< /̗',|ʪ!2ĖfJ4.!XL} B3 ؾLpȲ|h}yĮ@\ jΎ\DD1~KY6 j7%"F,?Na`@FۆH#Xo K."1ڈO u6iHǍTxSJ[.kv{l6؈KPxxs[ҭW؈gWlD LƌHPglWl˸&0lLlCڱ!ϥKb̦mVg&qos&p7X0H=^_ yۂa}va=i# -yLT@4ܚz hhkdhK-gjN ՚c7FoE6Yk5!}UtR* 4O{lۇB=N=זz>\[mgU\=&z\[vp\<ʁpa7}Ya|~>>K5~.9gjAFhE?^%eKv̚Uq}b7(KŴX|5P+2iXöML;S'>mRUEתILMNȮiR6 ?%kN/X/QێcΟ]\tEJ '>6ns?:țICb#OєͲ?w#fx;MFwieY3ߑGqn+*͏?֎DzKEϑ8|M -4 UzXTR)ݯ/:P)ޮ)f=ˇVݬNnrj4(e?2dDOl"t^*rӕ'g:"Tx.&?ߣ&s+o7\fwu JԸ g\L\s9]VY/p|>˼']3W ^@8yeSgpxQ<ͪ8/Ď?>_ߌ=@Y~L3ëOpR$D2zǷedbgyz3g-<7E[t ?YH傁P7Й[yh*:;ǯJNYkfNTt{``[XDFcQ5T/Scse.W ?Yhy 1l$v1o-\ p0YOqAv/WS$2Mo 3 u9ZAe/-Qo]b-MS:;FB7uFBf-؈| f":FXFTkڈj7DtVL}cpqY6(&NN-”{l1Kf\Q%2 Sm*UPؕ)׉7_}(Fj*}mZ>FUlNu"n V-]4*MȞ|lV#!Oi~+x8>_v >6`*/%KS1|a&yTqu 57L v[rTY=( `{!G2 7חIPlqp.j)bF4fAi1( wk7R`,9/#$2N"TzTYRV Tnn `Y-g @j{)sʷBɢcԞl}6OLP?FQ % B8\c63s(WΰGR\l6U[8t\ӠDGo;86#\1ZJb8W5#6^+U]d:B d$ ?ȸ3d\ɹ2Y+gSb'1WD#$Vrd1h N70rBaP-n#x5'$e AB,٭1!Que pDQ(x lm cх1>ha}:f0v6dA*n#^]0[Zb/ܘ4Ĭ!;Et<;~>b0 }#z,D+Oɇ6<44T(aۈgg"K]31݈&m߳FlUIb*0d3MA vqTTqLT `ȧDLFnXʗW[fħfa:vJ63Dg=8f;(}UIYJ8c!^3g<-H3}vB^F;"YPc#rI\]DTa}f0c~+$ѩ$81侍}vFcl#rDF>oM_g#r}.B1m l>2gDC~rI(F>*ٳM /F~*]h1vQO1 躽ZF ٷ gmHn16o#jN2b =ϾX[R,(> !}.CgYu j_}yn$ڧ_!jZDsat! Q5-'L˳މ`.!O+ԕt`Sc'~[}%_/Ym%,eQZH*36*G+7+msve[8ҽiJu& J墒Yop;HIF+I;1Z-d!xqA_AIr'ztKI*3V,U>O! t2XQy!0TUޓnS;=C4 IZFw= C'<;z]UeRG^h'erJF wb_EjQ']^ʨ-94_%WF^SVSZfVT;iFD',gǧeLsQJ٠.&tr*fZS/4ܥ4O,GdsTw (s.e5~ʹFzIJG:G zI*1B55 3Crdbp~V̙4Ml۬Y\aSp_ M)ێNCJP߯挰"گwGoPۭq.(?Fbt6Iᕇ9*qm%ʩc viVRq ˶Y4i7:^b-Js\ۚ[]K>(NL;,5ĴRךv(YˮĚuTK(ߴɏEWЭ1bU5.ngbuj$\駃ߎ/5Njlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0073-Zufolo_2.xiz000066400000000000000000000044311247673406200242430ustar00rootroot00000000000000 \s8_rO)$|$PW\QlG񇤕dl OmZ~h+>- |ug q ״lpڮ~99vܛ}}WiNçߧ&|;]GVˉp,#26baCJG;GГ/u{믝`BCSǭ(mM;{ߟ'ӘYg2-D~ƨ0~Xъxr GkAd>' (KT$u[ML@"?Wcӌwŵ –ɛ4MghCLU$ٻH՛oܵ]Ը/!U,ͽnz-.7ᚿ0cϤW$3&̈́٣? بHKׄ#T"Y]"g4+y]=0!~9]Ӎ[y]_K:Ωd .hcT:('?/QH-~>Ks7J;Vk/M-/׉EϖŽCU1#hBk{!kXѥ1ʋ8B1Y`qjJX$-fau,y1ݥC|={nυml7~*;Q=^⼠kEvz^N|CC7V] &M 0:r=-({*eA$E&s//,'%II}k\'5lû8GpzRYTC4`-T̑zChE#i=w]3apڋ+ BN8ZCHLb@uĄLXn1'!L=GP$A0n;` {>A~րS Dūer>1衝 KTNNS$2c,#ĻKQipH!YE(%rz{v#4`0E `Hd?Y:Љ(Oȳ=ơKiFzE5䙃%И"(C>Flک*){ (`!iBW"^-6N cs]e͟GD5Oǣ1q?xչyRK:1P# A[\߰X*.dFa-|(3]-BM4+K-6m(epdt'М(U")6. >e0Ģt߉5vv ;>: \$̙H3WBBA1jE MQRS 4@r=0W49pmDcM'}%9Y,EDZ4w'ѰoNz ,m(^޷wjkܚЄ €g,K9? GNT0OM-rt)ͥYWA,rS2H-("Ғ(ǧ 4&ϊM Rr8s+AD5}*æFpn՚:;yY"}7*"|/ K wv:jPU "ߊyӂŊȶ@<ť9Q |r Mm)Ci ,]eRW9GJC c#JevDGzDJ@ *C=Q*ʅn#LM:vnÜn疷0f\SUU#LMմ#L=T]rMeQ (Сce{苽F_5k'O?i:{Z|95mkB?]d/ "hkƸfIbL/SWLZ7;e-0v؎yH95gsNtjO8w::cLK ]JH7~mbk2^:IOHV޵}_Γ+˷YӄԝEfҥĬs{6Jah\iZ+[B7Rβ:\ɥ|O.Ԍ\o1YOśJ .s>1&T:-$[ΗO\-5}@ ˗ٵbNtӔ-R܍s3222ذ22v Zsa39 gb}KsA78@L$~%@AFL[~@}O:㫞F)nW_o FDlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0074-Zufolo_3.xiz000066400000000000000000000061211247673406200242430ustar00rootroot00000000000000 ]Ks8WxuS"S-*Δ֖wTkKKn悢E"5$|h-R&&IO3G7> _m'Fnwwǝ#;Wo:|x.Ϸߟ,vWyر{vckq3;ZGUl?tk?]n|!ȷ7s;"갎loǾ>Өe]?Ƌ ߍo&"3u\>Q:Mt_ܘ1DdKCQ6ԏVs^ӕ@cIØD>SPrq%{ [b2]ud̥æt$_Dցn#pㆫ"cUī`h|G GGW.l%{.yKˉs٧.FO5Mf[%rl Ta• AL͑wLo{ լWDk#_n9|q,&֪უ X|N!|T6 \ҵ9pjGZ|ɠu7YgمƿcaGM>ͧN5?VCFno1 H֛}T)}sFĘUْ)ẕ́Ψv|XPtdk)=ҍg k'QJZJ"uGLʢ<;n7HIBYdQ9WIk/!֘G˄XeBdt_'JG[ 8(+&RyǘDT-@Y|=mY87 ,΁9$FU8m5|iﰤ_)]ʝ=kM,DD0-؊eQ4R%%R<{ᚶ㬻_w7" 0V-ܦ -E`E$Z̻-P o,+ ݂A6YރKN. /vHRP|G+/ޮ ]q2.%D0!gDr\+gD̘~)re4nꝲZ"fUںW#q\xjZ^EO_zx@nʹSFV*֪9]Π!ƃUJn MɞfSdbdϗ BP)|{F gANtv}Iϴ-U%bj[HK=MWPdV;< .Ê8ڌ)r +y-L_X #ܹB]w''V"0%UV'% ~L(J |O̘(,15daЌ;h4؛nk2%ftztAuŠwdK{D1ֱcޞ(PH|Gf ĩAtE_C% } 7u-_A;5Pt5} >flB4(Վ)P=i/\//7ٳX2TǫL !MVVl]d/gM ]EVl;466@&W v6w4B6yuǾTa{GPI) 4 [5kl]zY`[) T⃯'/kz-fA\axzQ{L%u+.GT=x3M7y3M7~z3M7^{3΅%[畂f }ePks2 -s2D2N&m/Aq t/\VԾ>QtW?T!Z Q]D/߭Xflmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0075-Zufolo_4.xiz000066400000000000000000000134141247673406200242500ustar00rootroot00000000000000 ]]w8}ϯeL9rVLXӲtoQI$@Iwg pQ(\V]ߟof"_;a}6[bɧito_7oy^w"}'Ou{O zeFϓt;K̊"]'lzu3Mr˷){wb*6CGr]'#(;n|<=OǷwUci1_$b4Ă}Cr_E(m6b-6lU൶[dL6,It_?@S<ϫ/fY;ԪQw&wOɔ/ sW_v2OFՏjjO_/6y)BWx?3=y?}'rWdM묙|]@[\Ƨ|T6qp-'W݉]bVi$[K0lL<@O0d.Vɯٳ2 rߙ*fyR9mJtO?wlM7ԳsvӅv~͗zqjHl f-٢xN`[z=&^KX*lf:_۴6Em.VMe`bgCCed-tۮ{e-  hVY0|8KVWBSu|eI8~n۾޵m&KC?-c)ce.H70ʛ"Y?KA!OzuzӧrQ,4?yvo-SM8W0񵫡Nqy;Og'2ϊݪwbut uU%Vo`FBJ}Fٌ6bLڈi6MDʶ42~"DtfPx1W3Kt`GQrfi}7z)qFIGJ霨/­DLeIIg/bԌOk|Wu|p ,y>j Vma]JٳwyL6Z㻛~1}{mPM _$K1|y&e[])qM^5!D(ӏc]c)&a>I'I''#a 61r{x3}3d)Ux2I$' !' # jc+:OvŃQx~ x~*x~*zh~ccaԄa$?KFTNI2ZbSҁ^GPn1zEk_CRjF7ӆ ,%27TR([xrh♨EZPiU`(oAcZ?FU(~2@iSRH0n}80:'g,]))CQTDQTȴC/>aAL<8X4>?1(O@⇆B1c? ']ЗD;GO&' K:dn|Lڵ̚twƿ ~7>Mod?9]#S ;( S3a /&+;LziBՀYޒHGf65(t0|]%r7CBOǚh[m~n]nղ+xo[ű C=-Ggurnl&t.Kj5|bt#ieߵZQl3xMp9|x،8o/a7 h6 8HUϞW=S(;ݷ1Ժ~]7")[ni!͆&<Nji[̏a+ 0%wB%op9>oc{qAS3˥C# ̞pkLGsB aE:4 7B[` &v5[& 6B]KD[-eLu:59jə 4coBt-բĨ)U6uÐSz.SuX6H[Цo& 5m `㿰q;!a}OBS"d M5[}=!<9,I$BnDeTה~[ S-zh(& .AuP%͛gm |L6܃iJu{uF:nM޳s`ѠA:^d>krIꄁ !I}֏|"Ge#\ߐ S]\ Ȁȼ& Yy` ya 43elٱv c,-7#'M'vܑn2C;@ںSf0vjf". BYA=`'Ͷޙپ cl8gNRwuX |i?;yƂUhaWk,|hXzߎ aGk4Sq:ʇwn UI6$Ss\G$yڸpA8;!3h YD],jD[\OA>֤V֤Gm叐묬럨軕\^@T\gQ(:oM&gIMG"_U_DKyTCG]Mn$u5UfήIE[$%2`|$E l;y5}+'~ &k_8F䠾/H {tvq}L蓊lw:fYsnzz<&&W5ʞJ&ֲ Q/񰖇@oXC`9!8kyԇDtla-ן(z}<~&Sm::aئ\|'u|y9>ߘJUlKΒzkRG:j{ 8ApuTY|y5%tBսG}2]ꍇiUS L{SxD_oj\˫ۨoz仢@D5~Q(t"ᠩ Ps:"Ք/_ױ5W$J{vo:7Tdo~ ~)V2So;n~cCˆrvkٿY \Qf+/y4޲M_ \N%W(KWNCx$C1rc5x[?&ά?V8DsƝne ZG/Z2n5ަ~3uи3 3`NP@=R@v{{11 ""!,u@X\*F "q7\^ I v_wgcKp)tLR8Mp9C,$qxºS}4ӇpWen@C7xVmvy0YwN¨X lx"g;kso|y*qb=xշeґQ ԻWԹ'\H?Pz $pEW<*0\s&2jqhΜ=>gߪ ?D1^*mxaVP I h|La!I GDq^"1${w3ǃv&t ]ܪFlYU|Q\om6_ְqYk{ӭ<$ ~TjņuqO/%uEu W+Ur oITg0~ϞFMϢ /2Roeo/lfLs`K!>wiED4ॡq4v%rbP6him읒-Zdwʊ=ݞ8$R_eDt]#fARz6}>O;HtHr{01o}jvo KE^erABv^~܃d6kH,Ur9#L+ 3;b+SlAK.Ӹ,`>3С )4!}J;h%?%6aϡfbH=6@vMIIR̡im"{Gq%˪[LzT*%m*;2B + 0\}NKtm U>X* |{h#CLp-_}Bͼzk&ԋjgeٱMS5*+\y/uQf"rr*z~O伻>60Ծ-&`\4ћ-T.fCv#90$Bfh7l ?ĝ/&*RYM\]tZlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0078-Tremulo_01.xiz000066400000000000000000000040701247673406200244770ustar00rootroot00000000000000 [[s8~ϯ`yO!22@Hg/a۬/i+㋤#؄̤yjcKO󋳮=?=n|:׈kz>]noàY,Z :poNLߩ{>ZgOl7yrQq` u4Nh2m!mubuD^Ae{zM{`:Kz۲}"S$Cd ІvЏţm@ \¹T%CIN' ز={IR Hl>}3?t4DRŞ}DkW5K\}ӫ=?$6='i(^>N9$nHn3\?F٨؅g ,WQ, ,Q35ۺ /\lncK+L(.s' vvQ˽7 2Z(hNIϋ-w{f/RhR˿Ywp7?j[Ӥ]&gK`ץ1 t`=gѥ5WOJkD,YuYBi斨 ¾㹶|Z @Omu%sa&9d>!ʸg%3xvB"Avs8 5|,=$ɚ=t.(ze e!6-Fo!Lx-T5-{x7 6PXHt/pq ` ?Bo͊륇xͼ/v6k;Tn;p.zߖ AsCZD,:ژPo ?7]b0rYtwK1 #7y-zuAmq:Di "_n `) B0[!! eDmMA1>@74@0D@2FVr/ Cz ⓰\šm5y:֋B?_jh+L{lL;VSӎZ v]:@6| ʞKPReOYPKk2pjw~m83 ^Zdq&J,%:l26Y:{BZ7Ga)k0P~Az2#ku;fkiVi'#+uz]XfV3 "uE^J䱊]ںY֯H _9VQʜAfe#!՝[>FV=0!l)|;9gGM{pC4g3ﵗf;j tB32ln0 #kC|qqڣ5p¥MB ~ҹ^w{.eNp5 L 8lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0079-Tremulo_02.xiz000066400000000000000000000041721247673406200245040ustar00rootroot00000000000000 [Ys8~ϯ`yπɄ$S,G @vE%l< ~e|HjI55⚞eOSrwvv[[|޺]˚_ |;w/\OE8 M\~[{N&l]?hyr[íQ~ob JޝCw Q;čWېAd"&ϊP$I$ꎚ:@"PcJ5&a[MY7d%&q<,2c薩dK,Q[ĉ7jnkHڹ~7ӫ "#6='i2^n(?$P|}'k.8cV%&t< eQdch1lL0!.^n8R'VP Nyd {ogĵPqޜ9̓:ms<GǾ6` bujze. l<ӎn=,c\#j/>EkSjKR"qdKYi%jͮqxm$ S>T~0]v{^>#͓߳.TpBamhbd&P@6ЃVDl]d _^̈́0IѳH}s%3Ҵp: 8??aݺnP+'! 5r![FrCll9/vŪ:q-z,e…F|UT1g>&""Q20^L!AmZT64f_`LʷNЋU Jv,yei~0[!?H'[)AiYpyizާI=KtVHΑkBd[ )'8'&;i>`'׌ _?RB#SEaܷioUTioZHҠYtQPeYTYIk6O'IOZf1%ߦޠr?] Rz@BŮ2D MRBIV>}sJDJl7ֶSZ˭Cej߆K;F R4~*/_@+&X|N7o L[pt꾓,kXvq"a"at3A X1j3,3rC1!@(@r?RS7ABnRNZњo_$\H JYEE+; V#:FJ%uF ߊ[s_t2%iem1`ɷ?9:}݆n5z2*=)ȋy뎞u*J+aH݄+v$ฒح2~FZ%~J/B ;jʾ.3$,.&I(;?\>ҕHVi\f9lsP˼NZ#;}|P~|T !).(_;+<iL47&f^9  ؝Tѭ 5DڬFw`ʅs0>jUte0NOR+pXۮGeBon pjVgGEVvCe(>P3_OTg}@=ɥ RztpuR'?POY+/݇;lnA;F6ȅ ݌D^ǭ8b^Λ㾝cǭQVHTՍo3K1R>oNkR:+tZŅWK8Wqj^5Uܲ*.[swƹWcQ59R)~Ax(ɤ>]RdR>/Cop[$ȮJH0OopIgL'\zT̫FҔ^ltEr._VƤk`/e|58a;"f ^lFumu*W NJً.2d$3qEDYë˻%{7lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0081-Organetto_01.xiz000066400000000000000000000110211247673406200247760ustar00rootroot00000000000000 ]r۶}W=Iْߌ~w&7?DKKfyS6rWSO݃i~ ]pry=-ܥsEНos<9!wavdӟw#fx;MFwYe͙^ПxS[W$3H 米Nr5[18Ã?-p\U/V[QlľD/5nrj4ɠ#Dإ3qz~DΑPKf3}*XNhq`*<Ƈ>I2-Jq*1^f:8(-n}zM`i(rQg+@oҏ63x9tn|kD3z6vpÐ`)S߶/,ɳCÒU8}rh1y2rV, JiTLeU{ط}r( hq<.բ\Y_}}X~%/" w4EUA)v|]z48ySswbs(/,}Z-z咃oC+wTp+j)CV$3wo;s[ŵ( HгOOmQhw$1;e,Sz9zb$*-RV3QP*&B9.nG4}6"T}a}G)gyI'W5JͲW]TU.b5\nջ߼ڢ;%j=J$?KOb%D8#>#LL)ҏ O x"Q"zY˫`MM47577747=mnJfKp,NO-g"HqS-gP"XqWWD4ƤWv \-peW6[WU-pmn \u[Wĺ1 Ј.flgfs\ qi=fsN3-)g+bm8[sq\W-3'Wm \N8#\e;0ppf[snzW'L{W'\djX`~^W=+4eqȲ(DƏ eQ, t1Quġqh3f#f_f_}d4 5;X[.`h-.kpŸ¬Wm \ Zb}n+Jlhi \ѹzv[4o(f5ˬWLe`3|;樔ml\wPpeяcÀF6 xks(bϏ.m5n,5ֺ(#v+Q4ۦVXZa <A_úI_VXCD}[a 5n5Dm#ʾ5k:h{ 2x{Hk>jG=Lq̐{pb4Λ"}fD憹ۈ?Z>;f1f1X8ycxc0x2 7~옡c0f?m!"$Čw/1:"I|2"Cl>!#>5F>kN8cD}D>on"!5n:0b[n^QzQຍx}$8Ox}6C>w(`Af8UB} pG$m06B>>Spj06D?wi PO XsK<E'ȴtXc#6bycv!5FcQkaGd~1ؖ 1<ۈ^I1*hyd}'/.3cO rg#މ1F,0 @2_c3ˍ ~fq-0.F4?"⩢+fl FgLa₍ۈ(-[PZ6ٖ#vea1BkƏv!Zm1qyc0njot|||q&O(%2o:칓x}7Qf> 1Fg1lѹg12ԧ5'D[G5:)7dk$} FISlpz}y6Z ?yw7w5$շĉiP.մdÜ+3 Qe&#I&7 7Ć祶 罾;(E}ȩ]ƺޢ{yڔJu͗墤Rݪ m&Փd5df73n(vsEA_傠w_I\IMr)}5 ’z=deDB>ɾNh1 pH]RJcR amR13Hg-ܔZD_uڼSPRWrY!Xƅ&Wz" YZԡԋ:륉bX*KZa+?rL?oǗgkFYaeV|;yuj6\(GVikVbr͚v}VVmi4T9jVr͂Sj:JPYYdomQfStU?ic pE@Tg):Y!uٿBzRi reJzF VU}N+&@RҤdNU(h2|޸B(I3O1)HLURP /źR-5;DKOZ< z|uT_S_1O*4IE1OZ+)A^^PݩҞEG1"$1r,^\}[,~?Bb0#!JT_'7B${UIo܌BNnV~Ujڲ$Ѿ˅\]b>q8UU}"tOUΒOTnA(nfj8F=[d"^[d`lQyom>/`#2נd;EF8u.u/gWԅ;~QQV1 _K@zc_)~×JztGܽ.ǿKru7'v-q}@kԾL E'$['U?oW#`УrriY ;ʥ6ʥ}<~x2G4U[cC^סuNؠdlvgs_4Z|'Yd߮%o#t{ sW~ϭ9q{$O>_)ﳚB vuomwܥ1_?[`@@Ұm|KJ!+ Sy[`K댩Wk Pk\]qx+_eNE|S(>ϧIͬsfֹ6֝sydA$!(;z %4]YD|]fe(얾 '/5F2E(9fzE!TXrKЦ.oM5$Vc̀vf)ZwnxS5[苖lTj~UW(2:^YRC#{@@KiBk]~M:*>՜[Wk'Qĉ^0Թhypֽ`\:[ȳ(FQqQ*.Ņ*.ZZ.T\D/bt48tj$+OIN+*YjC)zC!P* >ة6cjKHNc|Vxr9q.'+ * s:ߚlWsf59hV6FcMv5oۮm6՜ _VnWs7/y_-|zr)/obG]GI*Y*-)BWFbhACDBӛzFzqy-]ԇvZ nߟáݭ/~{빉_ Almms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0082-Organetto_02.xiz000066400000000000000000000100151247673406200250020ustar00rootroot00000000000000 ]]s۶}ϯ{*ftT[jjKi¡Ef+$.OYu=,v?[-O~xǖivO[ϟ޽wdYw?[fh~zASZS/]Q܄џf0OfɍYrv{=OfS[غ]/nllۢz6mvt=oʒzV7cXA "H,NhcmYnd ^Z8hTzP]:@xiY}񜅝j\uٶP(J?~o rhW%KJhrb Ě||}X[hJl|XB w8Xj1^/8H-} ZM`Q:"D]\w_K X V]\MU[矼6]`ɫ틽NbЧz. /}  Bz^eUR⪔=>sᛮ\;'۬%f\oەχvkωhy 47+#w|[z48ym /Ң[:MUO\PͿcdXgmW+MȠ I syV+6,k6]?9áIBP`hX?gT|2 5Wn4t G߰!E?^ p!1!qa"vphCy,<lC*(C3YlyRHU|uBK&,5lTiU"D⋅.TT ԪCE?t68TA1rrEމJ9Q֑{9q0CRP~l;Mi7k)}szO}*ZP/L:PV>:FOi&Zh .hekY<& LTZt4=-TޢZ2/m b|4Mo(^D%فX]^Hq-3\nD9v๦e?H l2 @b ACiyYTKHz}N}ѳdj {S ቓEd8Y)NaEd8Y+NኑXژJo+ pEmvJoN\uW4U: piN\ubAi^ gs\ 4{p8>\ #,Ր3+ p\W,J\W,+poናm+3U)B*fղWF W\u>\WءV1 epNN`ik,LdZٹX`K#C Ul-9SxjaZl>@+ lq-V5bbeCU㊓mA\Z pEQ;6oȾn\ }Fb!cgiX0Nƅ*e[{!4vxi#bŷL.^\42XiDc!ob1 bn52ȶkd6iִFXC<5D kߡFXCDm7"whaϷ(^1DۓY1'QvDܓʹ  iO@iSDwo -Pwg\gbgﯝm ㅁ&xazH;Cci ]N3|XatD\eeD|NoC:F|>+}VqˆO q0:,bNXa0V zm zMFjF6Y ^F4 Y; ܡ}cTclXS LƩrX ܡ6@:< :!-<Pg #2 aQ'~ۈQm0V!FQ`p!&C?ײnI1g:j(}&OauPa#N Pkү0dFD?@R#bTi@qC:")i ,`tDsˆ`(-lˈ煑c"Xa0V0ؖ[n0D-#VF>!N12@>/UMu)@\dT+@: ג4>칓x}7Qd> 1Fg0dѹ' 16'"SVĴ". [kX".*}69 &iT)^Z2R} /X8yҥ\2TqŕV2 QeGBjgXWy ?͠j(\jZ/Jp`+ '`zM=E07oZ(eMTRƽKflqR$dbdwEA_łw_)9O>g#z;(T|*M1g:RN8c'u)EQ@J 0MNEe}韪s/^&nQ>BRb!eWLy *jz)a/RQI FѼFI|D%e [p5?V'Ҫ)@d`]29zI3e_2޹zNFI%O}tHrr)l#IClSzvq5̉uW/]쑍U=,K̫}t U^%,7m%]&DݫU͋f{.nKjoUns53g̫̈́Q2w` kN1 #";dXk0a'rid[?s_FlёS>V䎚S,1/;Çt)h/Ώ)jN͒*Z.зY9 rfZ-_zaǨfZ;m5\.9t~0UUO-]ߦpTc~0kA:f/fqOGW6 : qF di fFǠ^TۓojFWE'vŖ@v*Hhҋoe!l476RV8i(2;zm/ ~mRK.بxcb`??Y|d5 }đrK¿N>A]>FN zҩ SO:VO:t{tqa}- 6%{w3<K٬qPo/!ʠxo_ kncֈGD D:}FU3H.#}aP`` =pMVzՉUNȰT:cJ,dsFc}-3}/$z$@:Vn&E`a.rť]Bf%/ꄱ-lrU·ەi)/=Lwtn6**\ڥռ9BjW>~5c]W>~5cW>~5I4kEBջ[+YW,A+Jl`r|>bJS-WD+&̷SNgVwqƷVXM|p,np{ O _Clmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0084-Organo_01.xiz000066400000000000000000000043421247673406200242740ustar00rootroot00000000000000 [ms8_%&!!3M:4!SH\F"5痴ܯ? ٖHH7OmZ}E/#IҐgMAAbapּ^6?yk`Ϯ| y.0M$œ7γ<ĩ#?Ï!8`x5ѐk44jxIΚtg $`/QΞIl1ᖮ7޸wӟa02 Beie;徆 3Lъ$(,ɗ$Z:e:Wpdy3IĐڥqe4J -Id:E4l #x(x[W(&< 6.h4钻4m< +2$zE]oV[.>˗ZHI*x.dTT4eN>p.?c4 `` ,ihPdΧf4\P]hU(dNLH4V~,Uڃ,0wܮ܁~aeDd7Garre~>vx|X˼q@ݮӦws{=]MV+I5zGvZ q 2fkJZJ ѿ͚=O~? y*{( IsVn¸鷑 ˖Ti1J5t( yCv._mCl ӥٰ65Sm?F~gngڋy%&tW@IJZBBs 0$V" ߑ\ZѺ*DmfOjjq5f3Fu3P0<Ф~Vr 0!57OÅe0bEķAbQ@x,WBZ?+iD]+'y g4Bnf\[kW<݊k&Y:F F99*R;Ōi(pDP"?g-( Y‘D(G8n [WFO̫ ' (K7g]+1:֩ʳvd3w;e*bKYo]hƶjU1\ ItyQ@b4rEG^ "`9\T*3G{ Njծk`ڇ+k Jxp9x3 Ѱ7kxɖ";h26A 1,~d,4'2ƴ;+ Go}{)2^yȊi&(@!+ Xzjp4$}`<1 ⊵ņrƍX*T1KSv؜=4$k h#cR2WL.?njTiR<~$gVfl>v kq<^4v.]$M-LE`&'aaF}gr.;lэOxw&H JW;F'%om Qjwhpw`4)V"+ýM%t+l&)"8E对ܮ%/+$: lVEkN";Np8?U.Y-x'ifƔ" -F;īZH{* Gxb2 D[nњqfcp+KsL~.KA AgϥI:GCꑢ<Q/a})OSi>">z(U?)-kSojc+*_jd GFrq9!!@hC%jZ #! $H }ZZ`pH '\Sp|`ۏ߀^kfzz| ;-aѥ%OiKMI^ϥL-%- M]I6,jZv_jZ Dj2A/6Kү?xYeJ ՉP8"+B J_ADAh_ÁZWflE_J4¥ʻJ% kύ6Z5HiYW W.aaQ%,JZ:-Ō1-դצ. .FsaC{tK-gu?+CȖ}v-g[WshM~4xs3~{@1?(ju}a/R!N5W2<)H뀄e'1R(ݧI:Y1)KY2Y-tjEVKWN-P:~mrLfZ6p!8LɦPcƸ:a[P\]hDN=iAy4˛zIS#saPדr/*Բ.h'/2;kq2tN GS5bAi$hQ8l4lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0086-Organo_03.xiz000066400000000000000000000053411247673406200243000ustar00rootroot00000000000000 \s8" BU3bRKmY [7RGfrlI0!{Z&cRu7Z<(Kv‚Yӗc]MOGz3~Tp'~? ii<'YB}tYh|כFCߚF1 ']/u$ ̃e O_X\q]Ko'q?'97hE%qɩqa}'l5IXG/1!l>g3 gK%'uL' r= U-g]ׅ4Nㇻpw%pe[QEO4is=}],< žx2ƵKBlCfOfofXL6Ȧ,Fe =< *g2N|K4SSĄqiPIڽJ~@$FC$\t@mk2:4ځc.ᨕ֋%ix=e8K4- U9YK:fUJf6uMVaHD/\,Sky]\`?1 C?;H4N4xYh<%C] vrzsXk-˱F[#pٵz֏4n[f:b7a*6h-Iv9Jz!oyH Z(t^Ij5%u~ AnK*4k$\ɸ|%i 3 i3jUaM}S$7L;!& irw0ه6bN]4Q3Ί؇vCa e, n!FVvr/*ӌ&)R1>)I9Çn')3$N}= .zB.C۴Cy=UlA Ũ]ʨᘹ׳Q|w1gGw@!Y.q똌ָ? {+Cl‡1\+NL@# f0GBx |jd3xBj-.7{BeMcͳRO-hr5U.2]'C!\ָZP9 .ib@ QDپ k7Uk;uuf~L\W9up>3/5ho9WJgi%R#h ޟq]Fw~y⚭2cr9}/tQ=B%y׭&A&B6ס--vrK!#G V{PsWʁ]pxlFi[=#C䁠* ߻ʁLJ)аo2J=@+a}nWpF'ߙ{qĠ~nmˌ8å-JIoq*w pJfeM\Nww$Km,iDP&7ɢ>_)}pq]iA|=YÏTolzmrZT{^&5pl#8v# pWIn w[%@jR#M1%O}m˦E>0x`VZw0-1zpDv:h@{JD ɖ(C1R:5 8? ?E.Z_,;r"V2sybx3v;˰kwzQ'W7vBZ8m,ɗI;2kv Z!Wa 7!l4~K˴t↴!-,=}E\ݲ=]/6̄:h閠}ui6T(nfb/5#|a Hh2eAS$.؉W]ڟOL˝9 g%9`=u5J k=Y=nj ✺%Z:ܸ7EfEoKGS3ktL^Hn&i#5e}<,KP0Yb Z7tQ*U8/Щe?&^x6kئ;}3m'Mpxy?|LS(@Khu7w#,1 ]M)"pMA,pv<)r]} ^Nm).~~WUn(r`\Bkxҭ?㟺Iw98#>g0eWt!A,.k؊@rE I)I&Yɿ" G.Ṟ} i֜#V>\dAG6\|OB&&6~KaGtPdڰG+~Z؎Q"T,RE(@Bbp訩rc, L# dTVI Gb`!fxa}Jxfq'(]Tes+;IQ k~p 'lt>yZ3Fbk-4( x#ȸ'+_ ύlpn+8ghGŷGB!^@1RU_r zhP.۰gJI!Pofq -2_*mdz ƒP$-Y *X#\a8E\kѥĠϩhR@k,WEg0r+PɈ8QR?AVjZލyrSFx!lHbb[Έ2U^de7Jjt"VTh H'sIݾd)m<ƥVO"HXI9ׄ(\V[k vaʷ(aD8kKBrBˁz)qZ3d_7E` `4\k6)ӈXN}&W! O,,Dm@;,p<-iy)EWJ@~'OXd|@Iщ^-JA,_\ݢFs-Ob&Zc(Ir,IRIh뀠TVaj, |UXR9 G/ K!)c)_`kG P0B|\X WŘRKa*9{km %Ue{\&ZE F XXRV7"\)QX9:n,`ADJ~a rP!1\Z#kL`5Qu7QJ&&**+`D^1Tʌ SB`lhFRֽW#UE"+] |;5ЃZ~hkbqcwD9 ;< z ;[ޢٯٿw݁.#]JBL ]^$9ҋfp& `6!>JƥTat8(TC ƄՃdS Lv`RRs|ᥓ90N!)t®ˎ6PTv]X먌4{XT;ZzٽY$+"3ZѰ5K@v3F#bs3FFFf}?0MCv+d!>^xb1qۢ1oC^CWJ1颐-h|yB 0Fһ_@+G5xnlHP"fCl>g2fV~0I:C<9 oyQ#Kv̰&Er=R1$6YkMwԤGp67~wvƅIRs\ dg?xVKaGD5 XnPeqpnm2 3Ra Fg{8d# ݒ?G&pvD6W^詢i{*b=y1$EO9ɫ="~*'Eꠤld)!"2Z'!$CUmdNq'<܃ }m:K1!!rkPE TYqc 9=8.!")ojDA-OLd?R,ǀ`˦x,Z Gv'>4 OŗU@GuTH Ԑ+D~Ӭ׍P34_KEP)'4Kb-gV,ŏXYZ΢-rX Fb-2}RoRz琾}Q$Ws‡b>7B;ERqfL߀ގya#Icۑb/1EkFe;lY=icQV NByբP,e 'I-XJ(^VX~\q gz '_h~OX)ԗ8 ' oA]Lۍu11̢(V݉/r _C|X?^ujq~>`Mylmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0088-Harp4.xiz000066400000000000000000000043501247673406200235300ustar00rootroot00000000000000 \ms8_=%7IL ҹE+>ߟlKZw|jkVkiժ7ߖ+ǥjP˵|[}NՏw''7܏:/ʟ+ڶI4qjߝG%֪xPD%~<ā+#+įG-Li4dfP$} bEĞRZc5uI=AwODc;= LQjH 2@CЏţU 2KzÅL%CMiN&ımsERnp2? i [2HbջO.nj(]\8V:elΠz7eAgEE2[P#N Wɜs&^O8[?^yp$|%S5;8m,4PB(-$_bo̬.Pe! !ס+Y;dK=6 ] tPhe8ťO-uڃLJ>7_ l\ ƚ)e`+Y[zP(EzA_>/K6ae.:Ҵ2qUS~ҥ|LmwIIgߍ&L; h#[v{&c+ۈ}w_Dkl\3:V<|Ge[e[DFը1b?Dދ ҋ ZB.^z 'L9$!b&~6Y?˥!c8{JD%G(7vn[0Z,A@ƒ:u7ǖY01}! ]nAJzA*e+>Ӄj`xU~_ԯpm\ۻeH$pG7*$!yvtp%d)Ss2ntaI@$p)qO"7AO5DMRk%3b8SrlOmTh΅g+Vc?t$ۊ.s1៱n\E*Rq O%Neh0_ _6yQDE ;φi yu 3W ~%(xJA,%en1)v*Xj2N0X7.b/V(9!*׊ZVco])eRxј{37A䬢ʢbVV6B!#&r .x|iz` c%>ǃѰ߉ҿ0b^$5fZnjI5goWPK*)jQS{rb(TDnCR@76i{ٓhӑڙs݋gŧb|$ qdG6,@ 6\y q׈)0]/5]w]Q4&qPQ39M654\52- i.r%4/Nᢰ~0.lHd׺]AvqP s!%Ui$W<+3DJ]/98$alaLvx6-a 8ԅ}4S^V0,Mami3 kbX䡂v]6p!&-c6CklB(<" 4f&aTx(@e֊ CamMX{ZZd+ )mWIѸ+ v[xڮ_~Lw ;m~R>CGlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0090-Dolcino_01.xiz000066400000000000000000000063371247673406200244410ustar00rootroot00000000000000 \Ks8Wx}7|V%rjmc[h9HH9m J9Lab t_m7'/>)5Iu|pLe0@chypdm‘} _ {w+-#Stxo>&=C5D#KDSzvP8dLģCqhCPIKJ񴧞YʑM<K:1 ֔h]]I [9*ƶLEƫbN]A7 '3L Iŏ|X@):GaX,X-f6EۈthXUCa$3$)g ĤFc.#.J 6q[E4z&%6V0IA#Vh`>z'(:l5M.MܢbE>j:Yǜ…K~|O%y1b9uu cKLЮcDW".Ӱ kjBmrP030s|2B<ߵ|Ld.COBz[g̰i״<¸Cڙk86_ttP;CL6gy DPZg:A´<cӡ1Lx'xxLla:]bٸ;p}v-aA;TQ}xK9oyⵐAP|hf| 1ڒ q(Ҷ4e--\R*ga[ý9K9xet`s9-NC3< 1!.ボOkå|ov[:jp񝻺[GHׂbEne0ku3 w,nJْT cG,ab,rot 2pG9#\ZPiHgc#"1lyYцxnGdVG8N9W8(#aWrPTKy2Ba2Lܒzc:<& EWmZxL5W 8NrJj@y!JI*:1>8V`xgut).pj|=YS{"g:CTP5<15)Vtwm }N5a/XzjQGvgaKm|~p7^=H`g*.Q퍃mvy-gxp:|-@;(SuMv#pÂtT hSȸx~b3]8^{Q$:"k %:i/" _y.v;#tC\/ p {x si/$=\H}R j,sђ'7j 1N!M+iJMM}p ОtJj-]OofӫS,pЃ31I4o)זڈ U@=Vo|`K뚏مI2SmU8HAsQYjI,XUXG@jpnFG?fW7 8C^}(yV7ZW] s Z^LX L1[EkDrG43z'{뚚kE V.wo!C|4w]~[ԝj|l5u3_1,I-=MvBr.hj%sg'J/h>^]K-״Ok_+7Bx`ȇyjklnCin(˂-yS"7uA6쇂|4Eǡ $*>\~-? =yA0h$]|凤I _^z#;}q>m-sZ@ݔW|:o/4/]%-,vlEl8v0+'zQb(2zC![))"i?i?x[*̣~8'Z<^qyT]>\}.Q>˅PŤ^a"AMȞ)ZQGUDCEy|T #UV_Lԃp~6 g͹>7}9{?ma*jGs)yne#5c'ĶrvQ~lʟ[nf>zI=~NGT'uO }q,OqY,nvwȫw!gG/uEo.Uo]^^ܞ]^MvW7y]}vb}.G|ǓYvur}r>]Գ߲bOնɍDq,lYdu5ygwV,)MF'G dOrB5D>p–!#vG?99q5ޟ/7͇rSAt{ӲVś_ s[TϏEDz^o_Sb@mغ+gngo%Iu~#{`WvUg \_tl"ʎD}/T6ܠ}n4՛?f7_.n:ka[_;" 6-<<{ȿf{m:{m7VfԮ=SClf̮3DM:e3_Lꊣ'Wn?[VŦ(G\鐒z  @gbUΗsmvG]mj6MQ$L~˥F u;fQzL)=[R̋E~Q ӃIzk0#Nd7Xz眜^~ܱ=t Jn$"4U3@Qd{3#l*s/GH Dx8ԐQ]@7n-x]c/7[($cd48qeY(#v *nul|oSJ0𲙣3CzrldGY9è6=h5/#;%(* j |P^>v'N=!!eG}C&N(J4iK7ȅXԫٷ;'5݁H VF LSyS aoep`Y];ՎU#/JL츳ΞUtf(E~פZ -`A&>EY/r*U@8E~,ny&ijkš R^ӏ7i3c|Jbfqk&AE(BqQ!If@x S? =/ )FkbCOCҚ2ډC©%[] jd9N-L@^P0Fr xraJ;§cK 8{kFZofb"iʩRvv5g9w &cJWun2Rpf=h}`n:[~D2BΓDaX>x0V%JI(N+aCߍCֺmIb.T^۶MFK--,R%m# @d *9SJD]$lፀT͒f*NF 6΍$R89q[&~Hʉ$24@Abj"r$;SU|RkP{J].U^䄜8#4ALK 0 lPp^Y"2kz]ȻajE$%15F$K5rd" "8${%\K0M.Z`y.CF=B5^+7d]AMeJʞ08!JؔB =Џ YEp$B4C-L`(o &gbU)L %0"5YG_v`o "` N% #,3Ll-x'#/O'pKn`>1 'Zܔ '!4]5Y.vB s9ڱB ap!K`:T.OjKH3eT1 %Ded*ZIK`Jm,YH`ž,*r@X8AVNܱ, C"4Ô4:4^h҆~dRHb.'Ci9*5`IU{t*l $+DyTLec8HO^ϦLPxR[&P @Z:IQv 5D.Ԇr A+ۡeVTbBٵT _ ǠZOI%!Х)@C.c>BP*BԢAahf+f `KQ =!.puui:Y#diבK`s*?Lv-SqN$Nd^j brq] p$,E. 0Թ;?KQ&%H6b=uU] wi(Arڕ{F9.]37mܲ lbNp.}H\Xt*d`3Ώl LK J, *Bs3c*t00Kd7B4BPC+$yC sG`"~b5.anXMFK6P)qsJz=XEE\~ɂ#[01@e=?\*[Q`D>*\0O0dW>'5ꔙ((Nrx{LCLU d1`OXIyT& YGYTR]D,r+Q q,K[R p6"0MnIY}݆1V*.{{Gq8$%َ9ܭv$?ڶHЍ| 'bX(tS 2!qD݈9!a u^wp>%o '-\ՉY B@[X壹HRi j$lO]:H9"9bH 0+ML .L`pÙfA>r_lADig.u,wZ,R[/>ԋ*eN{|yzvsyqraf,/nUO/wi>]]ޜîRWϏE-MPTm 0U=#Ow_,ɧ/b[|~UlZ,3D}}]Vvʟ wcKzgvv>o\<6q^;~Xeas8i%j˶զXfV-;oeGSUs;M|C[.6tyG7E= K)#Ж){,2pH+5dVy+C&1Qwcg /7bՒZ |S_m$[Td2~:|̮y${WU7Ǭ>ZOc? wsnVWLT/[YݗYE.L˲u$p/jb=?~b_ $1؎Pu\;+ iDNg?]|rAjOqd}8zs*G,0tA?x*_{0Z__FF>~YGFp>02$$L ~) ڱȐ.C;pP;m=OjWrsr{HwZ{$-q¬_[ޯ]FCCƴ󾑺t luQ::k }~Lw\kr'c֚0K{D>::|gg7ןg_n97Gm_6sy<^}6 39WȿmgnӸ>m\|8-ӏO Ź1AGíJuޫ\Ic)wބcڣ9Zܯ˟`x^,7ӿ]U`Plmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0092-Dolcino_03.xiz000066400000000000000000000023521247673406200244360ustar00rootroot00000000000000 Y]S6}W~ ac37S$[Ql%Rj@}C6H9Zs- Z/$)gז">eka?Z_o~9?K?},\*/IZ,[9D<#{5~&8 ,0ꏧCg>_kA\[oxBIL| $rq-m[g梉3uܝ2g%֑iL1ZQ( 7~0U˿dY#Ty,%lk̘{0p Zuˬl8w~?XŜ;`hh\,f-> > r0A!4wtL qdw~5fجqfJ~Cܲseg QJ^&j3lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0093-Dolcino_04.xiz000066400000000000000000000110111247673406200244300ustar00rootroot00000000000000 ]rF}Wh^e;HTEJt* " 0h[ baN$_\tit)I~ފq%Gg/~ū^>lyzqs(,7/^?esu[//TpQܕ?|n]S[d?]^]GC,7Y6Jiz]4O`5NkmlO=꺪L3 $JțeEz"Hxx$i^8-T~Lcx^ВXKXw[QTا,rU={·ףH,LsWl2 v^?u~sI6/&nHW|N"Ey;Je7ZGJ0٦#"W !͉45uX?X^3B19&ͷuj^7}VUlծQUJ*m5t̟@S < k?q}@_n:>' p\d p]Kt]WbeXYsgW̉Dܬ[0chj3.nj[#+n\qgc:\#9>y#nYfi.>CUr2x&]3'+f/la[třX=2lLA!s2]ȢC ].na(dd1 Y!|EWnsdvbֈ>ɸw g+q"7W(Qdb1$dt2R(@r+*UQ'$a'1"nSwt YK q\HCnW!V$G>K!^ހm /#bsE}D„F&#hWB^4:#9YL"R_tGK#R @UA7[}Ds>\q\59G>gRgC/$ 1i#F2EO3#Bs7}cF>+n|S?^*sl}2!! EؓŒyl(`6ٖkߟnɽ@a쉁}W/Rڸ b=a>b[ 1#F=tg1A}hE>) /r^}C>Q=/u.߼d9u̾&H>n^O[ LS_ lj̥CEn\e%\UJe%I&t𘽥,̭BrԶYaE^^~k~rP z>.3:qPT%Q2E)bju \e3e*ˑ|g*6$H [9CT︕B/(L .ԒYթ'G Z6nVʚ۪&*$Koks71sgFQ69@,bؚ2#c:tz,bl.U* lps)aepV$ZL3-]4v |WEVr;[ڿW_1K:K&SrĴ^]YaiU[r9k6Wf;cc[볕tZ5vٰ)0ӭfåQkEDg3L>Zm{' \a?_//gϪ~U'aTrc\u`c];~}NrWh#r(_`o9V ֳ.:d@@d$)篽7/q]:VT.C~ȴOefztb0Z~՞8bxvy I.D8jxtSҭã~:57O'U-Wۇͷ[כĞv]'RQ-5hyk)64Zڟfnm\wȔEyVYU%6=fZ J7ͪi{*f8Z5ջ*Vgj3^b~Mx&eČN\āz'Z]%Q1_쭵|-7W?~]/nxE8ulmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0095-Accordian.xiz000066400000000000000000000065671247673406200244470ustar00rootroot00000000000000 ]r8}WhXUI4Z[f_XHۜHx~mQޚڧq(4@4@_~n֝'?N(tb}tpyA}ۗYnwwz﹩GSYGS'K_B.}>/dvVaݭOr_-_[7vh ݍz%yGg5wONN*v\Oo6ht68)M" u$֏ LxK% 8Z74@UqJ67.5w=/(X@W}ZvyrX֠P #e8<]#}<Ջv>| =Sw*dE^'H0k-[󫟤}:~x;Fw] O:E_ B>`{;[<뽐0ԪҴ;6GŠݝjF,vwr^-"USdn׼ :0e7;(ے6RrQ-8 6mc?B7\QٞAZi拥I(xbi`(ڴ{׈j5ڌ{@kD5\FtZ-&h>@i5.FN@Şre8Y|a"HqS,'P"XqW,ZeqP"\q-pej̸tj̸ Z:a\o\8{W=]_G.Uݙd*h%X\Qgg#~p0x\ @ؤsbeXY+VbeXY+}+<"Ո$m̲L$Js,jȵ pUP6F_G;%Ŷ, pYW 6W:D ci/B1UҸF:F<^jaZ #p]06/ Y"f0D׵Aؤ &a@1!˵ 6fv,3F8\qvX_ᑖEf<4ԲZV`mYíl ;x.K?YmYV \Y-pE+cWjn \Y-pwξv \هG"Y[ԃ틈wVgtì x6bދqp(( qwgl:X}3,C;EnB\- 6іEa9pŖiE4"ⳅHoE4 )8b i 7>:Ed{Χ ^;1:$̓VV玸,s;FD>.`ѡ67??ZD=LFmt3"ٙIJO5!qv$>+Mˆg #bF+^{GnU }Ϫ{^ }Ϸaoh9[t"\*d4=+k*xTeDR6)w;9^̗d9\$SO$gBz-ބ)UK$ܘIhc ,>.tKMMLc2JbEiƤ4nl O:ZCK`-yt(Ô>Hyj-yC%JW"#RݜU+i!+=n QF0-+P79r24FrǪrZp='׾BJ$^Oiv6`x"HFt+QȪYn_BvoKz 6V|اdr>e)ɄAjkP!{jnFVS1}fiJ!mB?I*KAdib+z͞O ٹt6'ZEaJwgUY1,dK/ДdPZǾ撤8~%GvKz5k.\2ǯ$_s ~YXݾo7c7кL\]g糳eARrG<16p w[7]۬m_EE,+ מblmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0096-padNice.xiz000066400000000000000000000220531247673406200241140ustar00rootroot00000000000000 ]]w7}ϯV7{O9[>3ɼPbD"5$D/6><)h4BխŗrY?셯r5_,?ޟ~?`>?xvwfokXhvl|<\^\ng_=cv^V/o6ݦ\~?N??MO[1}g fS޼||}˺\59x7ޭeuشˇ{v\BؚR^.)>[^~bg$׏mʆ Ѿj{پi_Xygrq9]ϖͲl֫oi'w'wEj]rX.LoW 1:NydsW`b7ڸ+'We9ri`A0!x=V!mq0=.k1ԳS)>z:|tq?{{b{]ΜmbWYTQ8$[2ݵմtwvs{ލh:1o^^Ϥ`]\-6w;2Bÿ}<<~ݲIX wjޔC=S,OtůyGe_*bTPTĨhvwq "sOA_{ b _ށmhѶvFBۨYoԶF޶25oN6{B zJ>TXwK4~@DB|vi?}VJd>OaCcj_c'LU2)Q,<,8}Ky$RBէ)fH>O G%L>38B,"C!> )EMJ>ےX(x^+?6>]'DHbYPQ$LFRh=(79WbY|m$`GIϒ7ILl2,~ %O? &{/LHQ0}T"O,I]*Al?Z^bCI>ݣ gI>c#OxJ d-).ԛk'gKV*)E+E²#طi]%3GGDOSb)&:>N=Kq$VU$b >m, 0;˙yJMnwuO6˝1x=UdPhA^o+T6BN]v{>zەM-'V~i6=,pNSpFQ׻=_Ӎ)(Yy)!5,n#hJ5ϳ^>;Vj u<$ >tQS9N[Tk0gœâ CmQaI ܩJ6Oݮ~-U[nLbi[g5:Hz{픿p irhrp赩0N1aiX37||v_[,W zgU ><}z_=TLWBWw}ߙ ZZsX:Ӧfc޴iC(-y g4+8:+6CŞ ;j\@v5.wLvcH|s \Ϩ`Smrv 6*31oD+>i9mad=VRfd>ݓ E ;rs;ܜg#u ꊴ>ȱFcjq=YTĹ wlؙ mbgNWZgoJ6.wۺ{lv<Ձ9w@%EeG75FAz7C~YE/[~?ئ?I߷C_Ѿp[9]kw ݑ%[o7;~o1{9VW)>=ܭjBO;*ggg.n~i{ھ9RWLAw΍)ν~NҊq=~wq|a]vo2FvX.o]>wObi40 F^HuۏǯM~;M6~(x QmO`6c hicZx,iHO"s^]o/WIEPBAKTuI0Zu.\ trի,kmrWH] i1[U1Fcp [c;-DǖBXx_G搂68cp0]`8Jg,8.q#*lk/< .ubf qzN8ln'Xk 떩 @!qҖn0ĪtB|:TCF͔Weu2w*`ZO!J"4# / 1L+;߭0dEq-"-E':GQ \ "0@tQP i!nG<ˮ$|B5i'Զ9ҙ,qC#vEP.-lƆV L pf(q";RGct=3-VܨdM 0v?+~Hn km\4dXۿu-A67IΣ Me6 2NI6i 'fh|g`tm6Q q*5óԚ p@9S_5Dϭk@2{[{HȆ%p8KY 2) gJEp"@6w9fB]~Iݯ!4zf'mU(4@(Yf Jf1s'@:q>p\'%ăssSBk=ugP2bUK/ef:,s)m|R" obf3l+]LUc\KFB}꺦A~ZJaOB7oPCiD,@[911*uЄWxMʗ\ ñ 6H͸U1ӘJ`1ȷrUx ̏`Er&(jR8B鑓9A814Fc2JC՛)BqL +U78R*+D3kݑ$T* ֹwH!& ~t,il0pl+%Z*TVtX:4n%FcD1tN&ArAW3+-D.bT')DES"T搂 m`tPt爧kְ-ӝ4ھz(K 4T.55b"n}e¨)wt;p>Іj鶪99d]ׇIYvj@dX9ug`vG] oGÂ,|#y[f8>|ف1BJڤzWcanM(2†W;B)eJQ F!iLj0TAƹ bPe}E?T&2)HHV&J* &^m~V9WcF ].;X U-R#(z~0#713XV* QWנQ% Ҡ2ďjg@ۂE3c5Br-ø1p8ˢJ$$ZmMKxjlPP4!rEڵk8vZz#PEBa]#YGEZpa]B d+Mι&0&aJN*F )Ά(8JALUVŨͶ/8U)T_Ce:)bۛXVbͼFδZu\!NvD,vr .|x7Omb9)ػ-FcX_Vw7e),jum_S?5Y,[b{?ݔKܷڹ~yvZ.m]\KMv?;phZEW63]-sX;HnunnH3u|i'fMe9Gu9۴e׋eh޽3|ڂ#yof>>~] yYugmӱkjGDtoO;;W߰L'}fZ?y[+ա]fM9<8}4@kH陵G\3Yo.gj}ppQ5ȊHo-AL_g?A]|A i]O]NtؗmV`բj%N,tr(/ C6nxT?uC/=n26Ğb8{s}Cao~>燽!77F=(ۅmۇmw~_?xvw & lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0097-k.xiz000066400000000000000000000047541247673406200230140ustar00rootroot00000000000000 \Ys6~ϯPJY3;-M5$W;M_00 l$RxXq\>%KpwǷ>un= t}cn׻ؾ]ߟ9OQ'o87Qk=q;~ 6n?k]xݦ'|1.'kt떇7czx>yCuLz~Ci;_7#t=\ hq2lWqGQX0NwDn܈lB%r0 ")cYͽXʒUD}& )ȱ{]OMYwd!Mf7t4[fʠO&.DN}>uo]ADBWGlDaۑpL Ӗ2efO>IF% Lʡ2s9r4mv7RxnYt"_{GQsz3yrnB9(9LHϋ}|-Vρ.[r Wv>kԊqT쓷 py=o)g? /GZ!dTU*'in)+ =8k{HwYALٟH6U@xB'$aF 8 Z& Ț=֮Ghx쩖9_C0o-KWI W ]~Pp Rx); 8T27RSaRzNI< ?TAn$^|=vF1eő'_ӄP&w}~fh^DS}a@1s2bhvI8$=fg*qI{GἚϦyh?ST{pl %,%ேzS; f}ɉe; /$+.B^1 ;O0\ѢD`RdGY9I(x|GDž҇ 7G0rU"PA _|S|a&CC>U|AS˂ xѫIɷՎ+>%^8ͻ2 #NgLz4&=04:4)E}'\詈lg1φ E<9\*Ft!$=ʂ#=dPզjǤ,N(3]-dC MiC)ebKJ"E]hEҖUÀHJx+f$e'JHdXްbg.*f?>`v$S<3JsYQ#Z%@(@{vKQ(?0y&zѼo_XPm/İ\>+( d#$;x0a̵@Qʤ(]^'[u lrwۢCKPzNYa9,rΊM-#gV󱞳{'iJƉs >p0 Qr>=,r朗 :i SAVF1ĺ;y@.!X~ k $)y2>>B ksL1PGfC/x-\a;FXYuHJm`~IK f]aYz@VLlHn4(bhXl;@W-05Ѯ 54CZL¬^}3 eTSy%uEU*uH}3o b% үR]|zLWIYYTִp13g$MӨiQYlDX mxtC4@w!`EFe߼s5!c{Ϻ~㻃]WDSl-zF۽UFw$/ӝj-/cw`!n-nIdwy}*zG4e5UL*\sSl4F~vYmδz,ޤ['l~uHm=۬}%k܃xt=<v}[ǎoީ?e]+/oD!{=?pfLfճk{=oPj0M`~ }zp>ѓ]kM*۔Ej8&,s<~mEFwS\Y^.Bk,z C܇w&pZU"RIttځBvIqqx37jRu8Ij8ʠА "Śh|fDWj =]Y2l||riϢ`%=/treozucw9URCڔpkFՉob*}?L3oXGEP X|̃Uy!t}NJ)u"Y..O&@KaV\]M.k0'χ} -UWw̼٢rϞ,җ?FOINEЫnW۪Y^SoIU`"𽙵}'XnZ`Ǖ%ه>^j-/^U'8.m24!!X\ZssgxQ]zҲ` c`9V׮fnĿԡ ,ڂ|W~S&,mIkg&_9i(5 iyY'Q5T\k/s/ZYt cXm]8 u̹PXPd\ y7=jثеI,O{2+lz[ͩXh y!*zheϾGHa:ir{شz=$vQjԒE#5.IO,d~&d<.tEg3n,M+AL8*־CR+7 |۟A$\Md4J@꽊g~7򪨑 %щztak[mE3Ӫkh2ԭ?3 xiQF9}AzHdLS&{x@a@u;LQ@g)FC' @dXY.7WWL+DH~D$܉V&UqWf-W3)+nr>\uk"{sϴ3j\8Yd0{`E/W8CHZ8cpuAϴFrW,' p"kyW,r8Y+D27}Co/:ϹpEG+Vͬ}7%[ pE \;I>^G\ȿbtD$n0~WW &7^*^G]_qE7^_1>C/퓵#e=fK^U3cs/g+ hq2Z>\hZtч">ke ]-VmACVzZzAh1$d2=:͐oZYieP2%0},@3@ꡓEA 3?z'=,,؊:F Am9K[ o>Z.Jc"4\i-F"/ @f>{qXxѥ8^z/"Y{k5 2!mUYƷ9kxc1%z 1FgP=ZF$m0~8@<@|r1bg4"'eFGΊ!z> / !6"RYaĤˆJ9!i {GAj|{c#Sx-Vyc-nY"ƞe}3gDšA~x{8A&q[-ӀC0dDuxd0gF}'5(Kg Epn(:zzYd܎|xGT>{G\>Gc 24t{.Dge]S:Vr%<ϺEgO '5bU!N=n7!ls;^>>g듕a&lx}5 -I쳔 hD-nB~3OC E& ~cg Q D?PhP{탎H~kX~N&bk~L:AfMsLiҁ@O{1nҊ녹_g1!1@>msC ?n"#D ?2b̃oHo"?M7φ#ւ٠MӇf6a0Bg=ϱS&b9D ?/3a=Sji @>IOm="M շ] A>wSЄ>C~ރ7Ϗlэ4nE>"v#LRgEzNe&/H&9D>Gƙ/a=^s2:VfocoUr ٧GVμGq7;r%ۡBR꣪L#IR·ËKԱ~1CP.뤐SJI˲3mneFFG$udRɏmA^:GjjJi eoiR_M.>9'K&o8T; )xLN>53~r@!<{= -SugOTSgSMOinV:kv$}>e&LKj3&r*v+߅ rٶqwʵk$:W \͕jVՋ5q(?eO0 E GX}>ݡr5y?3GH(cEq h-t!>@ 1ʟJuU(>V%y x1b|1IF:9H=,t_O:1RE{mo)4S8ѾY*of)W6qH!&|M ])LoUgk pk~m; 8>K-ŜKRQެ.ˏΪ_BWk/V"uE$R~CrV8yԚ`m~fC#+>T6TmSH5ڎ6u4] SMWJ~wpw2OZU|j5W\7VsZU|j5gWtvkxwuV3^/7^Ħ vٺ//P*1K[rt[K *&HNI%xoze|R3TNTrGTLE,vYk pVeLL-e/)w썅'XP)2(?J ](wJh2ql_@6Hb?.vs/_ܮ/zؑתlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0099-a.xiz000066400000000000000000000060521247673406200227750ustar00rootroot00000000000000 \_s8O}LBU3&@nEH6gdrd[ܘ{ZRuO~nNiQips~qˇv5\|5V??|TbF%a<ߧO㉟,2?<?\Ogx:a1yIo*y 'O-o+MZm6m8lx;Zf'm {&%<'$H6!; LxaJ^6. 04NL}hmaZ,{%cTɴt[gx2_oG]&Sx .R2fKV)wF>v'fe2F+8ϊ NF *e2^nOV'H@Ơ}I,DT"w!]o׽Oh"i$+l`L[<؝<2?h#KCF_'/drHRQ.8o0XH J!Œ1t~nefߊD+xf11v%=Hb }([K[O|S)si=a u-WgL݌W:+JҘF >GՀ8CAPFAJA$An[:b>]dV,DlHg4p$s(^aB~"TZ MRIy _50>'W^`Ly' s+?k:3n+=UZ ߃L#]EcC&֊PR.He %` pRUgL5l#Q(TƀJzlv07,CT瞋.>FpQ@Si̜i/ˣ "_2pl’ (˝Vow K%g vj^[N&vj27c.ضǕbhPsׅD:TPn6eaBEᴂJ.j_vIfp4 7~*s:b\E"ڃ]G跊 -8C>=\δ̰˗CI ^41,v2f*z@5=ۙo+y@xhoFf"$Y!&8yq:v#QF<}}ڽASI;{@cG">wlUT.Jpt`q ZmjEOI<.EvLx:5~j6 O{2$Dݕ8e>2drrOL9٧\S.SN))' :˫q5iF|#iwV3Cϝz qKztZ$*JPd15nDke*8ad4+YSQM<錫<78,e\ $iI8 diicu'zZGSZ} :jEzQ"NyH m~0 6~ӚtyvnZ[m]2YAyVX1@MebEs,>Z,Yp *K(fSdMBYCfE+@Ȋ_f|!f%Oa^%B|`ITN_ĕ%Z@CK?. K3v q#Lrj8%%ꑝS7,كeg:Uo09gu Wn}{[i61c o9vVB ~]a!=7Wk#M aYΊz,J0Y߾3AW{4oCMבQPsXhɠѯW&o bʗ vX D(-csTh{[iQඣq4h( ؍01^#K 7,S7_7ߞȀ6_W)$vt}Fh~PeowV ~9p nw܄(C  0ޒR1QfM'4`k;iIy`k{~pV |:0b{0ժvm {n^7vΉ=iV+} 6-̱$(8QS>SiIWs{f |ӹh 'xW< (bjdx!252Cdjd ~$@s/נC{ڻj^qz{ָ"xH+Y]c+0_55a->}ЎȦ٣ ZSxCWƒ>[>@!hȱe{ql𩆬[r8Nb?ؔD Vy 4k"޻VH)ÕnLltN#6m Uyrmi6śAVQuF|Î$ s8xbq09>*X-  b.E'sFpҰ͋@BF[`%4"'(v/hMGrPg#hѾj!=Rl 1eCiݡŇw&ř1q%`p?^>ޥaFASaJ&W_1m=dSsz]h!o uN囜q!O4.BM֡\L-gKgęhӿ+7vp얡oئ ȑV/QSVk dCW>`v0lY0YܳCމ?̥_V2@lJ׿\7]Z~4%ˆ;,[s#*F{Ȯvkqeެ|-:}@ag}}4g>C|pz!-LW3^LA}xB7dĜ'ZfCO|T?H,56/.€J. ZPM"+q;"p;}q+,{Is0$@~|N'ώ1%7݊ta8w!B"mY 6 BF­کU$* |DX|25tWS<|`P%>'ZD+:CcrIH/E;b6Lo5@Jl|;,Vg"ǔxPK xMn kIuচc\&V0>5Eb"%23cheL56pQ•z[2#[=@," pֱd19e v LV -m0[,URڗmiSl: w#n*V_iž$ !K9S@% iU ӱEm"@b0- >E }f`i(귲cD1>a8\=J1eyL}tŒb)|PTOu)<'iٻMw{?O-Nl{0n fx' xSaox\z߫z߫tۓ vk| =x7`pUһBK =Vc\C#SkHX hؿ|Ov&]<6sFLJqWT{^ FU8O5nz^nR}'橝 -~;{0ڊE~zZJk0Qjfw QN%c(+zJS-v Zrٲ.u>/ WX7̲JxHr㌳6VΆuwXm;W `BrTx"jԘ!"*[su.ƹclyL~,ƙnYNs63C|vh/D G2h<gB" zQ;;1Fg2Q[RGjm/J5d!VS'RhXqQ_0?KmTBL:PL-kNbM/}o֔;â yʹ%=.Cq2Kʳ]RD'7P}YNq% C{<ٽR떔g<%-ݒdR˳sC k(l誸W%~g:詝Ii]Δ H6tq}0CQWwC'̢~}"C.3v mZYj(&=kE9khȊC'6o__L.6clmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0101-Sweet_Night.xiz000066400000000000000000000077531247673406200247660ustar00rootroot00000000000000 ]r8}WxHY$SZ[QM,ymej2/,ZmN$R+RNAӺ؉7XAqyoɣ0x_~iN`}m7o||6|58)f7ۋ? pE֊A7r%w?$=Ocw+w=Q?Grnp~ }=񃳎=ȝAXSٺZsտ_&뛴1,П(ojoR}cǏE,QZ/ Ƶ8ݝ7pZj[Ŵ$Ң͊lcObi$ G7OD,LsDWϋӅ}W,\^ OE2QTXi({ǬäEdLjFR[v?{_k$8v.a:ኩS({˰I ỷC D6~^[Ͱ)/>'΍1fҥ/thћS?~rh,\ $b_UԫxZT[ڔ[샻Z?uVn0 E*\/q})&v0cq|5(Cny/ e'23'Eu~;)C+φȍ p5fʛ{nT,|mڧe,@ά0r?v[ڬ__Bfom]\/bW- KlK(-sGbU^A^wSa.s?^WYhqH1_1o]{EeN &e] >s/)Bq3.4}6y3/^VO0]EqNd*3ɠ R-TYU"rC KU9CiUۇʕ-}h,{>S\7G8e>Qqn݇+TLn㤧Iso:A[sҮz/{b*>M{.g>Oi%Ziu+9;;Ē(+6j7QtVq0춸2@|biJ/L#/2rD8w`F FM5գ,]V^n0{Jup4QWn/e-zUK Uۂ1UUOC&+ݒ&O9Kxy`!bs2aDq0DTInSq\z8}z"R/faD;1il#Vڈl Y}.uoCVm3F> *ݶ%ڈmsq#|5`ѐL y}.9@>GRY 6[3ʁ\x}.F>kO0fώ^FekL{.S׆k-Q=ڈgA>{|{E볕`]mܳ6f{Yk`{m#^5,myO6 쓉2;F>m%$߻C>l' /g1 v.kŏ%$5-vhbJoK"1Tn4‰19ϓW;onT*KL;9~T~-{,tKLDNش[^X3UI"}f`]vzvR&1GtsݙىYchSƒp=戊ŝ@v y콐jgޟܯv_Lb-5ei->[frr08'p2 B_m[˻kwn-Z wkyr=?29o9Rx 2_n" /0!/s}{]WZlT JX[I讈+u\$U!ՁTy]ܠuwqn))&7_OA6Y^v7<8HIlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0102-Sweet_Night_2.xiz000066400000000000000000000100411247673406200251700ustar00rootroot00000000000000 ]]s}ϯ= CU-Ƶkf_T2mm@J"Hd'$ݘe=Ss'7zрG`6_+7vhqK}fp<铳N| rkk5)6z8NX>K ?Id$NYI~Vs6υN+ ,8!RS h]{s}L~ꌃǧԱ5j|xGq'))P+M-*;jsl𖑧Z*`Dd Rrh6> VT%?t*><"T t>J?(x~3zN 8f00rL \\8ӏlsQYJ;뛫8U?G n]?z2AWbE4g)Wpxcd{脛h<{q.EzbB)u4MjјѶqSʗ c̖sY ^ ~ [9[Et"1hH:Pt181xIoIf[_ݜ-1"jFeSl[--AiEpE3+1mW&NyICp=-+j\QuFpuF33_\H[W-le;F[FxqLm\c""m\5A1UXC3:T(Y 9Fc,am2@TTT(SR `sND,":l1D3VW'fA ىŶ-؞46-@ٙD#b U. R([ [- R*Hb e,¶WWA퍫^ \jઇ;QUg W-+" Q:clk [Wc"v} W 9$ɂ%zjaa21o 6cTpLdpQfkjaQz8, apbi xd\=0E."P4F6F:Pcٱ;|FW#9ݩud^(W4/H$SZVH1"Cu7ķFe^/(FbD.H>%; m@6F F##1J6zHyd adɈK:;F5 ;T9ߥSA|uTe{5/)5E:dƙթqhA\ad=9[OAS 1b0;ºuf({gOAYjtXA(B #I`=m\aO\aO\a^ x|ڸ.n:1Q~go1lϧ'!3ˬO8,1B.qݪq^dc>]'6F%c>m\0҆+{ Va6׸@a>y7\Boh}zccuFyA٧A6l|L-Cl n墷)[*eQ-ƷR#Nl'm\ypl> Ugʧ(v=iF|Hbg-vI"" i2*%r1,0,:;*ĕ·;BkG̺|/i} R_S'JNz@%j G'LEL^׫e+7xsh5Jr\}t}@޲3@.ɗ}JMeLxpSRP[/\)o77Ȋd suF>ffg.X) t$D&"u"NJnZ!$TrPJ-b'BZL|= d2Et䚪B3XQVATϧVV9SB[Nt*rZ!n)NJFa&(*sVOKӵ`?* [{z2goe.jʓηYfb ))M9+T閪[_ZSs.U:LVbE1kƛxoYŜ(^۬ǰ +by#E>UOx,]ey" u>;FMA}Q>QK5PKC՝2[m2!K`Kzz=rLR-"jME4[62KJnmL]-9-3JSGyN< :R?E7jjZ'?ҧ\%}ݪ;MWjЧUЧ?'1G98ٳ3t)SI>)Tp-8NT2ǒ{K7ae%?RBrv[mXΊOHh!:Xy3X۪I+D߄vhN[hΑ4\kv[7uc8ҼUt0ns奛O.I?%# ~KR?.8rۇw58˟_=rGnq;z~{oJ]KH\wxP>8vt?($ȫrV{CeOO4yn6)pi1jn[ ׮T<ŭ`TqFuu?~ų] gq<]-fwr`F!S旣g7^M;_Թo|d~$ue#-4H%wշE -չ~ۏq!1%w ;k{ e}BgRwoITK``"evf; IgȒo<[L2-d`Mi!0Fw=O (Q"W Ҷ[=Y`,뻋e8@. ^w,(` ĈO=glP=1!CR5[70Q u ['i-jz~ !,%sFIv$ 5bΐ28n3hɭ-T~J/T.&TICS g,SL|wuA#M{IuJps QW&FLw7x0Īۗ7 8"!Tq:0/sduͲb-)QSq'bJpbDȐ@LKgg1yaZ Q%wDr:ngB۹X?;};〯ځ_C;YoJ*{*g:Q "K=CDxd( z}-$DQSUhe?OnFmBN=RV㢹IMx" `#SÕt6(2(rEƠna@ %ZGP(O3*47nl3G{F/o/&t1je//+>Ԋlu,Izל6 @Lm*D"!Z2a،S-fYCP2aJ gHWi[bzeK^nK0Ɠ{9nm:moz̷YNmROt6C|dc|.\t˷G.#_Ͻ?W'htYh. }D=[xte^OߕV`ƨ|| oBfI.{xP⢮~m5})nlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0104-Ice Rhodes2.xiz000066400000000000000000000043541247673406200245320ustar00rootroot00000000000000 \[s8~`yO!Ia 2 KHg/ad֗4EґlliѱtnIzUy&g;j|o>\G5Lk?i2|<ƞ+6{LpN?}zmF壘N,퓵6E6|7XkbAL 0K^:"Јcˊ,&CTT# ?`!mzz34Iet,կj{(9z3]ө'%l:Ш^f: ǵlWv]톤8A20o:vFZe8dh8*u]=(!WBn'Bk +P uA/ĪM7UG#ļި_x1XXvoo×%őTq~%Nwt7=fb`JY`-(LVi[ĆKE蓿L5^4 7;9uE$T$MJ\$:Pڡ\L-gM' 6pǟw m6mRC/|lTv|'i 1Pk dE ȺM ?zfB E/`[%T|ۆ"6Eem5=5i= &]Jk42OSc `0E|hj Mb7+t: !``&YgeC}j &!acM,e`#^ƆNBݶz;(p aա ,CMRYTg"4pE[h:nFeWHQN/J>yr\^/r4(P50!X< P/]l~˞SDٔ06[WB=eڛ6ı%P%l+Z1EPԆQOѲ%E ZUpﭠG2par՚&Y\b&'^:/3j\9SSΈ(y6g za">}9bʲP[V++s=ZD{ %&Y*0J pGw:p7 {71ir4TyRm%BZ]N-){t%;ŴX#RmoP_&( WRBS&!ߓ5g#!gFJ %v"&c_mtގppSҖO1M7 uF.`W~ks$; G5^ri*@PR.Rb[⯓2)2MnﺳLR-UBVtwB ,'$|B‡" %]S-ndn(;JK/5ו}R5,,mFpwds݀UʩfO}U_DR]љL@DYiNf@T*v,Մ%45E yՌ(8<4HTJj6| x"5S%5H,kc8 Vh=g55X*A?v$\ mtNJNюs]AEWbfrJ<,SY;uo^ֵ7܂ySަ\ˌ+G~x"`0eBOs3e²2![Nsp.L.D4w]gNwyrHwyxyh/׺/.<,<;<#!iIO-2v\9)QLSG:oh«ԉ7EDY|NNƸU,yfu!mlTLJaD'eM'쮶}MMJOO(h.tQ,<՟IZHykElmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0105-Voluttuoso.xiz000066400000000000000000000103241247673406200247410ustar00rootroot00000000000000 ]rF}WhDTEHr6 " pP  0 zSs9sqx㟫sfQ?t~" OoLJ?~x?>?L~{ςnpoޙ?U]')z(7j%??lYR|FZ$˃_o>f/qm0~} uyv7nnϮۻ5[EAOyVl^[YnVaZKFu1\(=t@MiNk(=n/-(~RdI CUF+4t9t=݋ՠД #vR~%Yn|dɻAg\Їt'if"Y6ʆ&S_a=\`{,F/kkJV/'A?5 caقTJb ,#|1`V8D@SMu\&ϜZ2Fb}}3N;/dzvYȝƌ<, n~TaFnWG93!wr*^#ڣ2\wps p5a|B.bAz}}~_quL"9S}VWpp)艐d n̯+z2ulnqpŭz d wvK~ģ{)a1N\]+#<_+qq]@ɛH Pt+sbA8I)~jLlecv^Gl_솥!r9|wnH~/iHA xx/n)NRWļ)AcA*).WF* *"_g鳕Z!]ga,tH炻$S ^*sg%u`$[!a*EXasAH\ H\ӎc*&0ipaC3wϽp.]墘zvi.ŵO =HHӧsֈ' <@54}`𜑦ω,.8fj#[i㠋4}rjk>\$;ĭLi TwE>{, U"Us\jc tTݷT}ŐR9-E앙cs CT}.Jم>a(UHyVF>w U pa}.v15e-Anlui-3w2 B]F&~ήoϟή.?k$iM(_}[򍘮{[G{q^MzU˃1b>Zn=Sn'JUުXKa&Ax"_<_TkJQҥ013THq'G6/d qU)-m42ߴd FGYԸm|sEnc"{[lNLPsPҏExi JV2CJFӂ) 8CҤտ ?CVR|Yuj-ZVxu1/w1YѯRi? = s慖9ͽ$r'D)$82Nd%p3ςpERp#PԙL#+Kei:;lK I(X Y [%M,n\.?-Fv$?ۖ\fuۘh&ȱI{xDiGĭcYKidmcAwqÿJG h>𥍕t61]."\cS5'p$U``ARtrRIH$m$lE^?9>۴{e1e#Xj!@l|-N0{ϔk-ȑIqW_e̊$ؖ&I[@%Kȵ^ӈ ܔVmKu).F.]zMé<@y7=x)^KCki&1n kȍbH#|f;@4hɢ -JCS K'w=3,#[lYD"t EK !ҫ>D"͞E+Yu2Y7KA},&"`2~rBw]ͳL+5}MFYBSp?_~k$#53wK}6D==!Kľ"]W6b-以]Wdb(}!}NbߞRD C߷oO>"߆(܍a 2 wN?[Eug n7+bʮAvK7BۡJߞ|)(Gֈb}qDc d_W7.}vCUٕ|a>][zH}B;;s}o,v,f~z6l)@K+{0˓.ڦPcnk7^xmq^a 4@r?UQ-˧#W&}"majPǻo[ؾ3c+g+kaۅuJF>Q0Dbuv^\Lo*tY(ZzK0Xl,vzxYJxw {q{{ʯM^ <\6sÛ5olmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0106-Entropia.xiz000066400000000000000000000055031247673406200243230ustar00rootroot00000000000000 ]sڸ_%@0fM, dE-جmҲmْ>lMe5GDztt;{-}?5/޽rnt߽7t?wᣌ (zw .tg{'wxnPtv;\-ЃOcYRxÙ% "' u_O&w4q%{%]lRMuƓbv;,n?'SakoEbEuf#JqqK"&⥿W4l\R{:-ߍh%=O&6gG8C7U& 2g4^nO\S4VxaL( f ,,t=:~o{@,B9(QfE% >pxu'_'r'" rnw7>kzqt'oQ ){&kF{D?=)Fɸ)Y :W2q6'l|]{HmKWv4ct32  >__=4SpcpFr8.~5DAY8( kCnz=fAC(Gg;X\*9~="z\tڽol_\?v | Df Cw9IE+i5*AzfvNE;G aGay~YcH" _v\4 .@׳gqHp[x`>BaQ3%nU_]GPjlL% i 8M5k %OH|B.Ucuvg2:mȔ(SfiPjHՓNv֓7Ji#\cB5dUҕ26g8[QG1_x|>h}`3]Slqӎ|责ARHAR UjtuVC0 ]R+NiFd8dp8rT٪:8(~z@BRkj0JE.BIV"I|N(3̖b*%~oq[jpR0_o $7H7юɀVލ]FZ=t@&^Wį]GQDڇ :-g.Z*Zf?>aߠHUL(H#\F1FmɎ~ߣ-u.BIv1Uc,A%~ sXK~R'w]!Z("Ӣ|ZF.lW-p)UR/Űo\3Vi_d|O.s68u>fn[XȂVYw̬ȮYQetd ?ŐUn%H2&,`^ce|4+ Cc^j-<%0YYRPr !x#E(鬅џ@t SxJJ-( g#ѸmL;,7^a-y>. U (/Y1EKk+haBU]'jeC @NONAw)]Ƙ. )5I봐Zpyz ֑K+^3|'ldjLjK^.̰0(-Gk-Zj!\_ʪėT]D(ţ*Qh W4 pG{L7퉀u4GjQ5DK8V<_~SLc޵/քfi$4휆'mcn~ҢϒyƷ3m7GLǁϏ~CޑHiAxS`a$tX*Ao`ףz nϠk]x8LԻYV4}RcRC/9,:=BsW7P786o껃͆P-RuC[!}};/ mw$k!1iIة/gWJ)K!ƹLa=TsjKT\%*i8geef8JtũK)H A=_< ͸ra ݧ0#c~@u8,iGRi)\u<,@54,QѾ am:ԉ{( ^*@X߯F\hN`+9`p`gUOU%UhY$eTQ*,pVEjnB=lQgHaBHF5ESA[ԽR,UG/Mz>XvM_GN =ou;0gwQw?X$PO'g!o]\}Lk# 7}{ķ%ЌFqH#o(CxpO)7lxў8hd3uƓL#9}|N-I|hw78|N\ ? IąKJ7fi@I =/ؚ.QWMe# ⏸]F ʤ>?e'qU. {hr|$/JfzT⻐y$`'Z*"|~gFʍ0vbbx}U{o5ۀ1LdQSK J3īYI23M^ӯUaIbOo8 ]2BCEZnqp{JA4UB_#qW0ܪ R;䎎NHhGϽK\$",g\Ok({S*"-X> !b]P) ~q#!<%tO}V&H\2n+#ݷ\2U9\!$ce!̈́qxa\'F-װmooaYo6]M:_O iTN7՞(gmTnYL;spD-s`QdQ贡- iU.aOOpkۄ7pBm* .fPcڣ/RBXw[Z %da)\eٱ S5[h.q(-X&co(7",u!@l<>r6V9+|mZAlb=z|䛓YdȢMܿ{.N:]Z DG"Ht4Yh8}B9ZF$۴` 26RTNsELZF 1Eԏ5SuɂkR2sc'TJ6L ط|6Ke!I0f}7}G Hi%`l[lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0109-Arcano2.xiz000066400000000000000000000101151247673406200240250ustar00rootroot00000000000000 ]]s6}ϯ=)[5ԳN hDjE*^ \R;6O)-{_U%}0&(~z޼y7^lv~8,Ȃo.ߓ_?UNi|x&X) VC`߿/qpF/ kz'=JS?&v|9|7"ei7d#(  W~j җ0~N75 Wu9(!y0-%a]"HWw.'W32QD]ƫi'w7=Q.4;MVYFd7h*r tuWd/˰j7,"/v;otFLPJٿ\E9SL8xK|۸ _3#|A?8ǂFfrF3hs -e/o>^:/ɜ[]_Wy1J0ԇؗpLŧrJ`絎>uX?eV^neTQ*lZdZV`Hhꯂx,0MU^+R뛉U6n0/([8O,*^Mj֐򘬦_0H/ y4GP͒؟&[3#[׾NOӐ~g;gs6{}[?x~-zI}ߚ? Fы9$P/2,wc73$ؕwwj֎FF0ʇ1kGbjxƠ % ZaCL5[i¶eTwz۠Jr(J;ԖJ^ ,WIFqȑg|SWaIP ψ^q< Q+POxn=::z=d{h{(-6Y[S߱ XDb}o"FqXD)8a8,bEⰈW xa8;>1ׁW#^1v-v؀رW xu!qဲj,\6^f+ c8,#cؖUGWLcPKE{/WqՉN5 gO?^X+KGv S9,[f+ xqc8fkbք#++> xEb#*UvG?2jjkk$k4kDkT 5ωk<5fG+0BY4\b)%gAqh/ n5 Ƣ!X4\cѐk,ډkUϳ9[vƬ:C'!}z;q 9[ۉkN\ V9z#~ ];rڑ]CvkGNs(e[6hq> ">u9G4:lJ(n0hlQ6cȻhH4 ƢQ[!ؒCh55ojN\#l<|)Prĵc'wYc8rH`!! /Q( 8W(@sN4 /^k'Sk`ħȚqw{7pS;)cȒq;}Z63ٮB0 ܸBsJm.V} q6Q|@|igP`@1 (ƃLɃx0@1~bFa(y PL PD <p_l`fn=9n] >:σ cߌƂX0a,1>F cfIl varsK!Z1>r I'#?Ad 'E3>ts]},y,X0r`c><m&:Cw? FIfWG `8tARnOTB1&&V}$F2[Cn<.TL8"efFRkyI;6!2H =n=b}w}wzQYVb 4=S4W'%4%UhP0z(ykrB@v F4HuU AYՄt_IOE"h19caEFGi&EF+9= 2d/:I<Crdv PFJL`TC5}kJ\K6jZ1Z5f2%-zSIb|^_חiU.<8uZomK6^5-oOZ nYk{%k:ΩIX6YKrֆZWBk9gS߲SRf]s[#=Fi+NV UEL%)%yR$Lʃz֔v J*UZT4ˠE/YAYtwbF:hj*9GrNoEV:['C:آ)-J.B5(Gⷑ5EKJZBmbx*Y*1*]5Jr@jܨ6qn R(HR Cu5C V]۾Xoл<_Frjؿsb:%IA{L͕3JmwR46ݴ:̧g>U}46G('ɑ !2ZN_BCCwVIvsSyCƱkCAYޭFjQD!$D⤻c:9^rn}ۥ+R?ۭÕvr꧵iRfaO^NoA%cI-ܲ׽1NDХ]Х]ZХj`u}r_Vy;@1܍Sl̶5آ `o:UY[ c8Db-zi9CZܛ:v+3Us8JsT@Yk@S+yc%VhqD]>DEJ+=jqYRZV>quʙ:()!UCb^waȯnw5^&?%q|d\_6n˝K`V#Ni+M[vi|/FPMNikߴON)s cx{ZHW{ktd[rq~ G]C&6zvCd7ŵ;Ϫ۽R|P2Y -Odih ꈦ#*Yxɗ4^ճ*te+] y83-.Nn9wqt˹[]+r.m\6r.ƻϹ8B֯7 +W(# v= ONRaM5Tk%}+#*&"'M6+8)Q4_[v[¦i5&>lBi=U.a2ii"&B` O/-`ZKiqPn^C]dջz͟&\X s8f$Eɶg6Z{fm􁷵n`DUdKfc78҈7$-Mo> K<翾Yh+lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0110-Arcano3.xiz000066400000000000000000000022711247673406200240220ustar00rootroot00000000000000 Xr8}W~B*ɔL \& +LE$ف<%HAcX)/"1Y[ym}y8;7Ο&nq|/?}ٝ9㝇o%G0IGE0Fl=Ɓ%x:tH@ CtoM^#Ň`QBmK:3L3tte8!|!1C<*H{`lD!"h5VSp]!)Y3JWSƶ{Hn5nIfbY0e"wI$yЫf:gAyѥ{4L2TP_Ȁ] $x!͕FZ"YR:2aE"p(Yl'WoPM0VvF*孑">T,ʘ_"#(^,s*f`4K"qV3d!%!\d T3Gn"ZD X.PY̷Ңnx&%KtT1zd cW;SƔG7[|56nM~悘$q0_'Z}(a L- ęTtsl *maB"ղJ}w,+P o3IŤ15`osŖTVy"(F A:C :F*]Ve1멳):1l>N3mӪ*Z՟.QU.2KD $&]>1knB!`V'mf \fՕu k j (h͕͚`=n%]%9ZSVuh-fTdz̕ . z/ղVE$?+vPXT}X7YD>x6SM;[:jyk֦摯k絹ZRun 6Yo`m-.%g)]}%9Uyy|<>rrA<}Λ#OFd{->]ڧCthz%ByreS8oyz0cT<~Y60,p]gvq՟E5d䕣B/flmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0112-Glass_01.xiz000066400000000000000000000034601247673406200241100ustar00rootroot00000000000000 Zr6}WzO$WΨ6hjK$w` 𢒠/$-'Lfڧbٳ.?| 3/ nB'rh>:vrxڭur;rz}tsֶ|ٓ#uMZ<ġG֔~~M׆dE~+jO6k&̅-Kkm2ž3m~#zdr_nxXI" gŤQNq)q$xeMЙla0xx#RY4 ;3#[K%79>)3Q;1)VUUܑӇk-<ϼ&}d&ӊtf\ghiP$ϩ'(NL:0gjP*{!{ PSns +/vrzwzmVS[n8!bF1A $u|{x0t7 嘓(!53-Ţ dpKTdV6 |d}]i9D!Tf|M3+`oW7q=$x/E\4@waq9"AoBO rhT#8Cp<0R}9}(r#~DcTHed}PԲ.GtCN \!|+ȃXMScFh1hA㪀'3B/1u7''̝{hL;7vPnd4vdu5\t\;Ƙs[gG/Z1<͟hg{"1͋45V |U?>5|`+_8kk.YlO~]|f6pߢUaywy:ޮ wX]оYOز -EXBn"LEJzMem⮹,& ï<毻})"&lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0113-Glass_02a.xiz000066400000000000000000000041721247673406200242540ustar00rootroot00000000000000 [ms8_% 3I:4!WH\F"56痤ܯ~ .{^V>R?~_g][,vYw]kgۓxv{F9~{_K8ZCZ6"PvOcÛ7kE2}%õ-H2>DYXopC7޸wןǓD[hIc;Ea(R9q" Ɋ(̋G63K±&}fN ď Զ=ʜnN ']8MW)CKQݥaHmzHbdwN`+?X [4LJbb-7Ŋol& b_o(lXRU7_P5Wsz*R<:s qi:A9ėq$H7F~@+oOQP̳IKƑS d0i<|"s`ˆ>IFX`{EB86ߍ+Ilp͉sg/N>AuB5bWS}TsbG4k>6'S* ]g%s+?fYѭͲ_ܵJB>[r$z ckuXg߅"rdE=Rm.pDk(ʒgI ;?c\(d3YOY=q1 272Q"kֹX&JAYZAҮ1(A=C*l#x]/ϰS .=aN~.=Q^k96nVzT7QrΝth.2fQu;kuq,X> BFQ &jǛwF=ű#VGxrm+LM  bFz nu)]3dFGZ 6iT\/j}˃=O2dՖas%(@V0uXjNHW䭢gaJ`|T=;yzABEOm詯kô ՛,WQU*=m_t;nb'`"2~<GeBA g&?փ}&؍o,ȥO0إZ;օǕ6NzǔÀdcč#l* (_vRuA9*jW jpd[Mc⼗0_JM@֭ǿdwy|qNELL6_|VGvΖ%%ֽgF]ɝ1YJ_r<4#K*SPBdЌAq>8n.WoT8¥!@XVlDjHJUÅ37r2Re B1BMW M".Jen\ƪSn)+aTZȍ6Ưb4<;Os ť5a[mVؑF)h^Xn!Eh2'D)Ėv/Qۘʅbu&$N$) ƼO.;[z6#5 oMTu嗞_S^1lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0114-Glass_02b.xiz000066400000000000000000000041711247673406200242550ustar00rootroot00000000000000 [ms8_% $R 7X/Vtr3t^vW>R/>~_9g^V seOՇi}ݻnF^۵I4ޢ!zwޯWUv'h.! 2٦nFN;ךdyNť+vY7\(`|:<ݰZG]oObmNVexFkHf* k B?Z17,~+aK_85|T2?hmtb&~bٳip2?$X2H; Ro.jX,s^Cyso]$z%1pfu񭙩[ţ,&J, B f2*uY\EJKg!/ S(* %RB.6(ass-zR"'y<"x:Y2fdE'q81]C')ShK<מ}"EMz>wwAJD3x\sϜK{+յTVHŠff=Tn|q|g4~xIq^`sr"]0?7R3m\(,] %]#Iv0}C3O[D|=ZLۑ5u]()xf7 dv辧Ϙ ;L֞ vO`"Al FLpXJ"JAiYAҎ2hA=Cjj%x?q˿cpM kJMg-5ǦkJON?}y :,N|'[B!CX/-F[00OX0P ?޼3Z/:D!0M6,֊orR3~Us'of oh% Z"CQ;zI,$HmVXɫr^ tv0ƆU0LIޟ- zg #/BO1=1@詅܌z\kW`d>, 8T`ii;9ct!8"i2ԅ 4V84 YENh~c~&}F =_°.8lqj' $n|CfE%NjzP[Y-vMJ4&"rf&\oT$ dzK~'kI׋vcrUVUHky<&K!׺ۤ$K"S)!TDh``ĸ 8]R+ 8*bc,@+@ Ev"P,^$D’`i/ \TY@ԢІH_S".J foUHj^.W@5`']_1p^Ns{>LsǥMa;mVZZ*ƽh^hr&"d -_`L%i61U hhK&$ٌJ '|2/]z"]|;^(x4. olbYQnb5٬ӘTZae'i׾ m= L8%r-Lg,~4XHiɠRi;Aޥ4&~%hz4#gNGہ0l(Fc{dE*F'g{+ dh BX/Xb&*|;D-HZ}\L+y]R[k)cJ(y1(2HB3(F]KȾRFKF uf|sط%iAgh`W?s0rEQ /Whb_ yvL9^"2AMѾhEP?>{CSi7줤2G&MHBZeDŽq9.55ד9n9t|kq93d9t|Oav~8|'"Uѵb^Cq4[MW b6kFgz&nk6qoDݵ Y@!Zqhp1A{^㲢57Tk7p?/[ŃC_\},붇>4fzYrz`xdObLTuV5x .js ! D*8@='^31!V!9:P Kg&I*AEYmۈٲ%=sK$@('*AZu2"A^CAՂ%n{(P/26yO^Af!yζ~̘v!6﮵ڨqA-FLÿP7,-kDs2 g/>qB05)M"sAh NaI=u8:K@ wzMnK1)¶-\ 4Xa8 \^P8xS+bmoN!aᒆ_QV T-hRj2t-+Rg9eP>:.Qr;u6ڵ5_]_V'[rC+\=z`J>;|~${\Ig|ok[˽E[d=W]}k=:>t׈w" B]~߻g6APQm'CuLMo/"SݟL2^J?p*edsudU\w;Ves[*v"[= a܆lP1ˏ ܮ JҘװRZ>AZsAr om@}VA`ںx5㖮:/궥9V*`q+BOМBhB6~Gulmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0116-Glass_04.xiz000066400000000000000000000023211247673406200241120ustar00rootroot00000000000000 Xr8}W~'U S jelME%lA%֖#.$VqVK_}CA)y0߯"u1<K{x6>w/.Lj'=]DK2ؽׇ2KKjL ys<<S1gpd8{h:ῶ0+J>z0fA'D!rQB&mK潱e[Eŀ02[ 3CE$dA#WhFےpH0u:u`~Sb]7alGVfdaϗckbDRH?<LVImiPnjFWQ`-پ>8y Uq|+5E &~zEx 8e3qd/CU $Kt#w Inf<`e'MiM3XBU_|RJYޱIZIn9bKܚr HbP0A7x9-:=Jg@l롘˳}=ۯ0 ʴ$?/[, 4t{ùҚ ':~s=B  .bqk] AfXoI qc M &ٞk@}p͕͊` G7 PUo,UXq CI3*KG i]K.`t^DF.!$%;\cW|i ,V@aIq4"tߥPygR;[V;ujSVkg!嵳T`j5u-k|';ܜ 75q:,q$r#9kNȧGz#q#O4h#kOsl>wΆl9g<_C|hz&jPph&dP}tߟ"+zٿ6[zd\WP/?_fyj^dl:ۯ0%SM7ջupt}q.]l__ tv^ޜ^f7lfqXSkfRa9Qwܯ"].}ʷr+|]L?{4x- 2ؓhށbQyQ5ӪOL:|13!#wz+~<γ2K'կa>x7>lE[ o5Kwf޼5nF7-/߳~oSz7=Z`O֛Bwnvnڛ$_gy}eq_0oђ:5'ߕbiiI ڷk#kSz1\cvE%no߲fPXf`mKOy~><wgGj5|m=oMC<ȷfkv9ϛ)[jM6eBvIN=g} a5Œf>!=gnSlbڜ{l"Ŧ2vӃ-HiSq.cGMW7={too;?'׎[/~[. +TkQVI3&#5| ɓ8;frFУ'lhj={6݋5} ^\!d6FVgܗ0-{x/~U,V|kX~mw`5I"t|#ު/+N':[WكOt9G\tUfk7oB:h|#6zK2oO[26v'q|x 2CoU|&󢁰i}`?,7;NT4; #s*;i/#ZQM3A1x;Q&NQ׋j5hM׉ȏHh*0.p uر6A5@:2Z7's~W<VZ+5lMq؍ģ9A78[a5hNP31^%T5yp%6>ÔƸQS+5Qv3"$Z[`R"hÁ I2Y c"ER$N ¯j& #Ni&ӹoӵSZ (n|q`\5JLα X.' 4Afx'q]zEI%p9ܖXE,0&Q!92R",7HD%|ϋbqDm˸O' .;N:KȬ$6Ȕ:|E ]@4 0x,ODO]YX Id&Gf 1Uf$% L) BEAlJR^nS.+aa_N8.*!)QǾlL5D%YddNR7پ17yTȶʤ%y63q>n4&n+, F{E59K7 4$pJpN)Ĺ>.GSK+vFc0% @xY/hzp!8tWdEǦL6^B@(0. kM,$%dPX d7 L^"J i2)i&&!%J.mx>\P1*}"@@T@@B錘T ue J!2R D #B xaK28FPCS(Js:A,X'k\)f^z&GzOȇ&Q{ [IB aAbWe5<ٱ)WkP,V9mKʅ2jk9˼2j9 C!%yavC3׊+#"QA {$ A͂2GWv@,V oZ]l,EBWEX+,K19 LB.¯H ʙj#UyRY]ǍC(` F7 \ yyZO#2];,#|7BHqZB2m2 ':.) :DžFv"u{LZ/:_B%҉(j@d^(frXi@r(VCqY5Ʌ%'4T͹HN& F]b(}dY %zyDâYo ePp'C> PW$FEK"@r`鄨 3 M& "5c:h{A:crq )GUpvI!k+SVPxҢ&$QQzC`b]YvZ]߅odLw|z'>2iD6CUrȐru(QᶃriYB2Oi75OVv:h`L[\%z ̡ 98zP pQU'uw^;p"=8;')W°Vا eW@J,9˱m!Z"b˳!L{el P49Ntӣ[_%6x.Uu fTsLvT" 2+n,C ksiЇ/lM}k ELX q@ 9VwG_BEpی3(EWHL\ L;8Dy*FWT;J]:DlNdpz+.)7r3\ٌu:*Id-2b}nCO,Fx14##bZ?пFFH\^DCA AZNkNDqZouW0Pp(Ƃ]62kEU̒U 3D+傑h\1_5!Ji ;I=],ڼbT}N]e8!z%iqRЍhtp&9agm*钊 $"51+AM&٤Qld.jG%[2q0!n[t7J9&ϐ E!_!7)Vl2ǍU @sexc1Hz)|1b!'u}h7 pLҼ]-aX KB l}^Ex/KByۋ1DSi>_#IX0L# ɤ B4Yx>R$wPg$d>/)~j0M:`CE-CsEo_.mxH U{P!}&pPؔ_m"Fr?O xI2£ኇ~W/@ιUKXV)[­#J%EySj ϪUh(`zLęGgUgEMS$K}Z_dhB#aDq@\7:)f8"! ASM룉}ˢH}!I\rΪJ.WCn{VE^:NtahS+$Y kE w,".9jHVS+#&z)ZK5kp1BKr-9ƍNLإSTI؅3&]\N9дaIZdH.u TˈVRϔqL+X2* 'MS\8+8(K&1!'&N =ӹS=HbQc#fNuFxEpf)S2`NܴsQ['贌Z] {OgNT+,] !/Y0%:F:h]+/oKW9#PI$!8P/'05iLJMbYpp1 U6ںK>Q6Hw!=Y55)Jpb}skY4. 5c2rRW$p'*3jЪb ,bYhᚂ̲U},[`8śo]M=@/\;8g8 xE\@]цeA.׍΂`Zr)Y#Cx >.*L6H&8ؘ|}Ir'DKV*p$g8#*WbnNG@8IlϯAE  qKw89U'ݘ87ܠ-qrhTq &n-k W3Q·}(h"Eڎ떍J@5wA7:>ȭ@C\u4Xۛu'K q3CP-:[(Γس|:duLgRv6}Q4uo{ ~L<.W2^"lc|`*k=yE_+AmnsW] cpCy y hރ>cH->:W^ !x"N!xǂOn?n.O/?̌o6ǂuvgOڏ_Nn͇Gp=c=EUvCWxnO/?_>~:R-ڼ.{|Zw3]~)7"{GSMK#5xAw?ӛӋFپfKm^/{c39_m%ȉO[+kbzzۗ_,f}> _ogtYfoA}6g7_>.?|vIq^~m$nݷgtɶ< 3kٵkujf?f-mAZ^h]{ҁZTֻv'⺿%lA=9 \#-=#}6 #:=?;+)vyV_7[ M?I@]G1S-Ϻ-z޴f_ǽmN[?9xlwš1ԁ5[W:A kx`g^3 4O ;Pvr}1rysN/on>_.ҿߥw qeHФfno>sz󙛜֛ܤ|_gno>s~Rۛl:~?O mSۿkbb:;;}\V9wNɁa;>=ݿ_Ml12Q$d%YzLUt克4c7L:(-?ob[bw;m"@%˷*R!֒T.JپONF+R;w/iY>yeN#=>+0(\iA:""٦/o~+@"t|vWחgh+6}u=`6 =%7[hzChXzO )BT/DMZbJN|oa ־ECl7q};>]Otއ[{17\Qx~QF Mly6,2Qp.]N$>'V)A2$D@Rmu?s: 2 |+l) ~SnVxxy>:t/vwV[eNH,z*y,}`Wk%:ʋU:;qJ1lIg1 rįmuU |cs\Z I8dzŤ,x rcFT,϶w$+y˒Dkv4|iҦJDݬky|A!VFQI@hg UV ʕe y'AA_\Ub>`B`-'mQQN>aI\*$U*HIWF:BJIv:3jdS,FMK˴S{NW=ueG])IiBOkdG]eER-u͞#Z;}G٨0w v,n&xzZa]E\] Ay"MɍR:U& br[I~ ?vV;SjCF WڽTI]Lo 0f^^Z[jmM1c# 횡dm f[훡t:Pաfit<t~ 5kFuRXQT` I (aBJ7sT=]}`^uqlUٺ90b3,2Ì1l^%8^l6 /x0b@. Af; d"u&OQ@00bms2bX3a,1#q`ba,1#`0Ƃ0[a: ad3Wa: aXzPqb'zIr91N`Ɯ ̀\@`~SOIfa-ƂƵ 0 0 0 0< uFw׀\u6ðA 0lPa: aذ;$: B121BQlݴ}>Dha  E bG],nX@- bX,E"^q" FbZ,q#r`.łX0" 0'aݑO ,0vB{W  벳 +ȳg0|0 cȃσ a<0`t=-r-#-a]OOgL5Z0]atVcHq$a6b'=]t]v67dr!7>2bs`!7>d"7>0#Ȗ ri1n|nWQًŎȰ,:ԉ#[]gdKlIBn|ugQ~? -Ɏْ,y+X0V^V ٮ0g[Fn|ܮBn|O}.ZI/rٸLosG,r䳢͡R!W>:B>TnъGs$7hM;2ckzKmG2sF}~Qi`"L)FlF`@4n[)p¼37Zg\dl ь #n!`D28Ɓk l#>Fwlѝ7 F#: 0 0g[F<ڈa$AYR2)#9C&yŽ@ȵO>%k?d זͷ ƃ a2KF &K]\3Ms}>E,O9 xF^06K:g%gx0Lks7{O I$q0x$h0QNSx[K%VJZ=hቴLl3T~͕U¥;J QeHRoލ(}q"-/VRE4QMEl5GT*I(*LҎmWT\$$&ZBk0zPNg8\U.zR#ѣ#%f\J_r-CKJa);2>-JC ݹε+ǣP$aGJ2JrDizvpEMEkةѣw_,'Fp&9Lu*vVR+96M/N,߻Fő2'eJIkS+Vr07xT7֬_嚵lլRͩTJ?FdΛ1&Tmfa5[ge{Ly;KIM4qX.يIBO>SK)wシ횳S*9,]VgKrp8]h2HO2URퟬLK'i^=Y4;MQ)z3L6g@7*I/+oTc@`͑2)ѐRT7!~QVðCnFz.jSY \ʔ78LhwC*6Z85p5;|9ٯxR JeSKNwGGk+?Zq%~p bji,ЛUɣ3&?uWNt:8o,C!#{~1l{_',n 7>춏GWE@a5Bj>|Vs.D՜U|E +TzHj ~}Xy^߉UD`^X ߈^9tTVWB|:xY)hPM!0Բ]p'97Fžܧ?i-5 nYg7[d{yRBꭚ>JWP w&iSBAFU ZD*<2fӇ*ρS:u܀ 6b =i4F"5=77Inj{5=zT ³Mu1w ؛>69\ Q;g7Ӌ2Rw-#] J^ y.w=5HmT6I $W(W[EIƑ-$UaV*pu9^?])c*oV56T56T(^֪4`Y6dlFjl^ceU}ZDV}U%$dV4;X]!d j EL dg:^g+V`&+6kbuJǶ]en3qY:&"bsp5 <'1\WI(6;=XNR )?+f;}-=p9¤pG3kDS (~hzUUjǘ֘@kL QQ/ՐJ\. F_ˎ BC &_ qG㝰ybxE/!1!wݫ;Baq#BH8Gd:,y<󱿊\M5JpʑxחZWBl<^br",/ <\k/z-d6#":#?Hxc "+1)ٹ_7sƻk~>+k# H\uXW7&(n'~P$_ u32; D\AUFz5EØ/j6r\Dd ] 孝6B[*$͋{F<;p4_^;,$3 AҼ1;HG!> 3-ӑ+8sA3R%<+OYޚ#   He20-Rљ52=0SCBP^*SfX4$W;0$֋(Nƌ.Ez&o:H{nbIA=;qh/^gڳYLwnO9Bl? ]bHGlK"힝8H:#^XRݾa&z=`4| ـxet_r&i;#T|zA:>H %B"ƫSCr>uWHϧ|}vb1+/̌iLw/B1bheSȅR]g@c@kh.v_~nKn;HgEھPMP-"m).i]}igt3RŏB>] ݱ?fw-^r 鄡l(HgN]$Il?#YWݶA]nDHg1]K8w @&*.U.t̆iet!}}eHwe)|ʘ)') 3aE>,{T=N'MٮB:#͂yG}vE>S\{^.R .R Q)wCK&ͼIU~ |$)ԫ2 sENts]LϯfgZ d$՟Mv<'C$~byoț<&PsQe`nGkx%v7u%y V"̞<\ Kn$O̓'苒Qܾ(UAbUThr3sMY-,oI4s4#|/ًTQ2LI%ۉ6z edd+`%*Pj(Ɉҫ0 $Y4/ Ikc-$|T,FeVmAi꩟#F<RhsigIZ/#w27 }'JYfL (d^g:}juWgQ 3 V>%\Q&)M*LʼS<.^~48lx~KbES ]6jxn˷.b?9Fte/kƲo1sUuш.:JjEZ|4iQ>YA]tԹ×p'ZEZYXmn,bN:$BL-F29JZpKoxVcJ_jExH.zAaQҶI"/K&w/jy 0.?I[Hj5.;j߻t5);>+׶xɉtO`ԣè5ifGt>/G `EHЊ`n۳} ً`;;̸p?ݥ;_ G!BcѤ\dToLQ-!hd5ȓpnysbjbX_٭ 39ur$aJ%E"q]j7ߝK  |@HO9.$oPD'[&jO-4}z,&F+(FĠ)_Z>Tz]= `|0ܟU  jM̂Y3'3S:Fw LFq}Xj2ҍ !>l޶uIJYW(î[rZJ%$HkQ,p.$XǧCm3V VMY9X-|=|-{,;=;rհ!Vհ!W@[6$+#[UŬ-S(MbJ5l0Z5Godd&9Rݸ1lvtc]ɛ[mɫĦFzVM6x-UB`D08brf or0HmN1J:{&tBTB LyŊ׎>oZջ>{wUnx;嬘?rBN5#/ShTQFAZ{-BMQ4PFe#1ύ4"Epx/I 𯀕.x3D~Ȕ>9xGvm+PG )sQ8^P@<3/:W:vx?/ܶc-x8FKHS}/S`l!Ѓ5iV|0BIBܒ͡WGldPy$,/$=O@/dTwՒh&YO1O|DH0յ#0fzE34U!rh"F$:BmDb5pNW&1. YH᳤pǀV?zeErSmIP=vPqtQi8zz:SJ7Xg(0ZTz/>s~fr*$:5$QOyϑ}ː{>SU)/syrK{8Z6.h晉Ϸus6tׇQʮpSΞ[ױń}NomabpjCsg Qƃ(k(M$lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0124-Armonica.xiz000066400000000000000000000043221247673406200242710ustar00rootroot00000000000000 [[s~ϯŃm U+Ա|vs^Tf6 ;38ai1I pyozV K j淋Mc?jO}vp3=:h5O3z{ 'AN^DWٜܧ锞 } htHWa {3 %M$Ó.UslNV)A4\k \W~쌺3CPcP"eSg0nxI(xQx*"h 'ߪy^K8|fGnnAKҁTU<VmliL$hQΒ o:0*z 7@M;Vu¾ ߏ퟽[J䘲ϔi,E?;-@Qse nK+E4[]ogNں|NiƞDt?8nǁ-lgQB^ɦ,ӯ,oe`xYžJx7n{, ], [I}oȱXeeܟحJZ^]=fZ$ܺ)\~Yn ͇[^hl{^^f<`/agV$h|O4AUW+bf$K_4X+3,6z_UIAwa\x ʸVlk[f+j#5̅k㈑9 gxR`wGM|VєnDh!*IqwWxz'cj|i9|rƔ+Ǘѱ{쬹*Uth0ytk@;Ŧdmgw@08P2b|`$wQo8n ag'pD q?ZߤrJt 4y/Re,HRB;R."\&ؖ($sܰV}e4ub٧?\3lX9gaxcM~-9xRcmmpC4u2h?=G|UmG ݴ[m3}Lxjm Sŭ[_ݸaàV[73G Gև̹Êȹ#Դ_ pi|0c 튐ôhzo[+K< Aӿ1p./''p6 8d-eDQV qQ MK>?uvX8ESmS go6lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0125-Fanfara.xiz000066400000000000000000000077601247673406200241100ustar00rootroot00000000000000 ][s~_ HWnc 586NeAJ@ ί?-tks OFsg曞?~_.z#/3?xx|?z;ӻwu9|gogn~zA)#\S/~Nr7Sȍx_}78q7c8^'Zk! G>/ ~r67ņ~}%nɲ mz0ޥe-ҟGEN6#9ݟ~v כX*zHso*pRQec-u:uV-y";]5QyYN&׃$ L.OWn0wVMMk= .uE)4\&osX+~m5:;?zR-Ù*kFC*' m rp2>g VL}XTಢ_nb! {VAݲPD^0sPr#=O^#se4Inb4^8W oy:eWn-©?;\mC񓱓d/TUU<-sfe᙭4]/:k7"qnVbҺ;:<萝=ezWguIhŮiԊoPVyz3g-<7*=ʤ[GeO,(mYѺ?_oůvWC}YUʱ-|5zIc?綥9#Y(cg$k}x #-Q0f+ wcKnb~daifdjG&;k0aKFtd9aHa0B+ҢlHa0apJF +anq>o&;o&C`k0mۻdl f#Ο[1lDs&6g`&Ncɬ519n~clg ~֔}sݎۈ*1-0@وgg4y&Z lɈ煛h1ZnFvf`Yr$7+fa&ɶA_2؉a0Z'qrJk&NDNz^pEUӥѓ?p\' 93Q)pg* XZԮԓ:ҜfX֤r'?oǣE5vQfRYUͭemY+[C)kUY+˺㍭tQJ9\.3yO|(ߊMrʁ6:JDi.E oՍS/q9'a,3?2JKkRA_)GFŸEyk|J4E94gv'GzzrX-,fCՎ~PpU39u-ݙ|t&V|ugr (HݾO:+<^]<j.5Q;p3NV'3`^/?'chO?B>GαcwoR眖Rհ"\TrQ\x7pgr$,9!SL5\Uwd~$qbhU8pB DVW%''Y ?pM')9p:Nrka``'\JlIHVU r^?eIF0IV0IVI|u[;*6d=+ 3BLH#wlEl BqMueeRe/5Y{e mYUVI2*&/*F#{#oׇ߲[d V5^<}0{~-&׃y8q5W .rsqS/::rsS/:ArsQT/:Hr+kb<*tk-4f":`廓b|Eۮvqy+UԻvߟlvy̍O d2/lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0126-Polvere.xiz000066400000000000000000000112111247673406200241510ustar00rootroot00000000000000 ]rF}Wh.USDUXkQZJyAA$!!.o`nnd;˧\4{zμrq_A~8?G^>}8] N]\>ߌO| GwysOy}gKh _0(nݓy~ ,Nj4\O_+wsNIPN`I҃ҬZvIqs5Odz7Ogl1?0dt%N?D M--ǫ`=NΣuǁ@O`_E4%WpzSlXi*J&oYUmezY-C?uY'v<}fCq_U{3WEbضneԎoĖφh==g/|7Et * _> z~Wמ*;r#d;ϖNmxtq.b}7rbcѳCRF nĬa`׉zF1rJ5_ rMfp: ,yz Q u&M=#wRP3ٟVt4[0C)Sj7TD14bDWgIAX_e BjtenײG+HSfNqӠ.'#1)ptYZ,OњkKUI*\dKQ|A7DsZohjh#d{hv(N;գlJ-4ºEp:f<_du;%΅]U *i4#?6ZG bMA#LVL(5aQs_un-ILgRhoΊ7Ţ {/_hEԔٕTO;fcb;@ żUs,4ń""eX(Y)EpE""e\nn{s \xq/1\{|s\,n3"S"PjHj>Ep5ŸHYW,+R)EpEb"ַኒN \Aoo\ukઋГ] W,+J%ኒpEbd1\p h%0sʽX-l!c&V3fc˜E cV)YpHà'QK&JE%\a:AXu6088u6@F0BP>j|dC exQc3.-R) Dj\bڭa \Y@VV lYZ5eQXcjFu)ukY&M۩,k0*DfY:ԑ:k`=_Oeag>0o= NIFDa,)x:l 8Xj ѳ-4fҘIKcXQbƢN-1t۵֩N-θkaS kXf,'$ ?JyT5d! Fubdn,p0m,"0EO#cƢ-c1YBX< vF^;hl?@0,O cQe,O cb0-F c0/F c cp1Si6m,8?-!lC)\#21c#!ƒnc0#/')!F c#1F c#1Qh>)归u[&bs SHl,[> FFIl,ߦm4OYX>u`j}b}F'bm4Om 4 (nt~=9W&~zjtJVSFYmz4ln#jV{3ÎiiVoY,r܂(1gC[6wtgt /Fb[V)n):j?&d5a^ +Lmۍ^L杆itAw{㹋jjhu;6vvzqKzJ74gC/Θ}۝v|emۃao/4Ͷq8vo>w;H6o5;xwV!U*U-]i=IL"ˌwYax#=yP=l.%i0r^3t r uè0fDM*,5ܤSVsJ"z: %V9h~ 2_b{MrȔӸpdV(݅ETu*$QVAc,*9P dw(D0eYYi1duTf\ߕPY-JH/L$A$ٛE6G.WH0su}qi4 LuY%n,h EcNǰiSM5cش<^&a0BT\ǰS2)/3u1lWA,M w)~*簹= '?̣TūDJ?Dw:sHH8Cn_!9dl<r,0Fǐ_cws.QzѷkbbBxN{b ^Sb"(.4!'oAifiQܲp.+)iQXsy+9 镅=VAg|(/J\"DEJ.FJ їd] bT0Tcpg໤1c*z0?LEGT{0W\䙊tZ~ij 5&-vZ'ug=Mj!4dJG{]Wh9p>Ogi%b'̓1WC ̣ ᖍx:;gڽ]Ժ,Pb *,hݐx N!jF6lXjŋBOfՌ\aTb\?UYX.Y8VY%gVC.kFQs:TBvAHI·%0\HJd?B.ykE>S4tA~7M1v~$}Ŧ[⩋!>0^A GM2 Z\R‡cfȻmmk.9[5bi E' Mjİ{L_ڂެmb򩝔g=IL+z%~d'WVŹsaoft x.A=anDwI{j[\ўjVNe[Je/6ހ_dz7Ogο'3g2_K~2UZ*j8jV[*q;j..)9V)*_ۆ+ ~X2$e:R T#t-腽p2 7"VVw #k321%*1R1%X#Y5xrh-9.,^php3i9C(аbo-~.SnH_#ϻ<\q湉glmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0127-Comb Filter.xiz000066400000000000000000000043151247673406200246330ustar00rootroot00000000000000 [s6~Gܥ%0eF`ܳ-jѿk,[J2:sOIJyoQxbIC{wlx ~|t^6~Oa:nx5֧~?*<M$'oEt-}hc0S@Ɛ&}{%MȔӈ}h۷:d26 YlqK_=a{ԾL:qM07~@QV #K cQJ,!Af*bqV*]͔N-KdN-`Xȩ"{ U `2'N"?`#Bv*7<6A}x M7d7h]'f3M:<1a1ӵX*SXS(6 [#9 V{nR$㊭ S3yS#t*e>Ơ41c_$q0#}$Q`FA{kwz5|+OϣH~xכ<ܚ!2n52r?*s<]xI1: Y T*\]s7v6O&B Ȓy:/ xst7+ Ml\Iݜ'3P8PSPAa AJ`6mV}{ZP`)MxuX{m&my˪\V+wGOg# kr"bq^&lK]zWf&)#GOM4~&"!Хʹ41*sڱw Sl]r(ۻΦVAXf'±l@y~J9Ϝ/:G5r]![X*X@h l bgU%wvbğAt:4Ӊ ~VjAP>>aP*8YѬT..D3Z# PrY IJ_@~XKBL֯zhKeB];nfC)x(g+P2qɷLXj̔L̩VrKKptRt|\(BbheGVuEuQ4lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0128-Synth Pad 5.xiz000066400000000000000000000046651247673406200244750ustar00rootroot00000000000000 [[s~_}pKj-6Z$s^Tcq| ˖Ժ054Ֆn~ jo$}֛\k$\Q_o/^׻>az| }o1u'A8M6 W6]%aAOF`1N_;%A-[r[<0٠4&RtOz 7Ա C< lk㊶أ$.55T/~lc#8- x1d%}cSID4A{^n7ꯘ Ɠb4,7?l #v+wL)W~j`ݓhF }n3QD5~r_3ER$wDEⰔb]lmbT-ȫ2ni$~fy] 蛓fyl@&a  6a֪ܵTyJ ;^-/wUAOٔz1+f%2N=|~?')k;6 +-QKHU1XTم2$2HTW ?o8 8BimCZzpiBF*_iHk' Q]T^l1pp:BTv>XzV-R;0aJG虫}oSΟt3MvC=^ <sE_`ڒ tet k ze4Ԏ~2T㍿6伡ʢbv%>CF1L(b_-60A^r?O81˄9H+j ݪiv7 `6g-؅໚Qn|:L ِ"j: |UBYg"^gN`|ˈ|޵ ywoǿ~x>n\M?.Q۵GP0*>yScOlO]11=]_o/fSk'}"?JۦW[9H;Ը~Lrr;)z:\}UONבkyaSo$^Y]Qd` N.$#ͭFnCs()4Q]wI^]N=2aD]n*~)ћ6>p&,N m:4vUk*m=oJi񝚥/rTnu%5`-Ȥj(ލ]N.Z'A߯p0{!f.5@5xAl{hHheq GfuGRzt{o,G7Œi?Ԑj'8 @!':Jjto,VA.pc`u_Nٟ޵+@8ܵ X=:W3'9+(ʂ$ / W FR?5I7x V<̞=Zip.RϳI4 g=y8\{ 7I0ߵɒ ?2N#s~*'\ZUd{5<[R1E)?տqaGrQ6uxѸOzdzZu.4턈WbLlr6\6:# O6HG3ܽ-LTjQƶz Ï&Ӟ!#iJv,8LY4-> ~<ĉ`Q00ԧSØi-y^Pw"e`jxe"Y4X_oVaeXBTXgu*kOC+s]}[wz[Uɛ]iNso|3,Cm,ABs/`mnw_X82g4"K'78 S ƹ:'zzBZpAbwەʼnVN jpNr57J@[5J(Si &2ImDc5'a8 G7 ݜ]|V"}6w8N0*[冗{J eSz&T|6N.4%S=T/VO#rs؛nSTmcӮO7)GSh3VoUYjrq*RyeB;6>E5>醸YFuquz %`{N˛`zj!Z-1\|meR RL'6z*CCm:t >sR g%G;`6}g r3 G*} DGaZew<+=4ՆVkΜi݇<;l>ꡞH]+W דt<=klQ]KJH sɹ+Mù KZ)xgȳ ?U1XqGsJcUI]Loxd PE5{"QjnQM"CDjbұBBsle. :-}\.7.Í @Ϯ3@7,B3*BtS٫)bDbDbDbDbDbDɴmY8 \&.8)"*;ḶEmimhrY)`EN9)NኑN N{ p%(W.38f pc)U}J$1+,㞉"Wj Ȭ_YIJ' pu pe^YWVQRmlkpEq>+7.W,3+ p\qtfj+ pʶƽ\]V{-pEĔWLMq:aW묲t.?Vt3Kܴ=16">WPtFqE c]0268L)/^y e#+nQ֎9+F@F@E!E!EdQdQdX;;3 s 9Ad)vؑC=g}"Z#x#)%Y(ΪƪanmFd˱wq!14w.wOd&>B <ǖ8'z2ُEc.[i&iF6a܄!*9pzi2@eQ4J빃]Z9I/zxi輇F̼K3^hKEqyюrk?20"iwbCj 3#Wjm 5ModR>rw@j'ՖInLu(~0PȪmzDD}˂8;Hɷ cWh1 K@y֋;o#J_lCuwZ) |V@*闵*'ш@4PѼi&Z^c5 hq霼N4mTG46՘5+W~@QFǷNU#\k~VrFƪ"ڧ,rMlu6U=csձ5t)S!P}k1VikǑztw$Fm_ƏSIt#{"Xr Z׶JU%;Bz#̵b:,`R fGzJY}T`Vme5ٺG+;ݽܙ&-zuwVjZ+@9flD}`U{. 1^({.9$^璝{K{.:~]UX:^Z_#T|rvJjJNcJ ͒~0OF̐ u*s .?u#/%Jmlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0130-abbellimento.xiz000066400000000000000000000023251247673406200251730ustar00rootroot00000000000000 X]W6}W~`!ٜ&-}Ql%RjYW?$gGѝ{gF-bٍeܱZyܧl}c=.]Oi1rǩ=K#R+e+'&tyc&[Ykd6rX-9Z ƚ:x3Jb [mi69sM3rl9ԧH.td_v/T *H e0qxWDV+ioytI"!SR[Tḵgm9:j]i8/f#wȓ!#KإnrI@vf-L[#yu#Abd0u[{qi݆wT_Ԯ4!N@0_4ezFÅ;jQꤜN@N➢]y@a"טIz!;`> sBU}qIB!x#C,+;4/4)<5ʞ<(z(kTC tizF>- -Kź1"k2w_5;G{q4|g4}.r'N֣2" -da+ zn0cRpԊu^R;}LݪvV!T!l6&q"NYi1ۈ0W:eD6-]*X'`OsO$csύvnV]ZmÃ;_rE_%FpP6(03)+uq s(,76x3+ 4Ar Tly 4dwV hE΂wθ/G ҺN:aj 3X i04+{Mi^@vK+yEG48>a.l!< Qbtm!}fAU'8٘s^MB/FB9^s d[Ei| 76^f3wLSP{p5tiw`^La LaVdm7yv5Œ-ͳ^ 7q.cZT.KJcǕF]h]GN4.y<8wsheϤbOdhOh{%bVWw0pM]+٢6Ƨ]5f_a ulCܳG QJկ\Ӭlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0131-Carino.xiz000066400000000000000000000027341247673406200237560ustar00rootroot00000000000000 Ys6~_ALf@ڦ/a mr`eKZ&N"~v[._ރM㍄e|a5u;q9潱tL#G9>r~ڒ4]@h\#zM\ WpH%YZ ~iǞZ.WME#&qL~e"v'>K춙nA]0&_& gdO)x%/G΋~%gZAMSw.&IGF3nޝu)!6JH,_P`Z FWvۭPL bCEL\<0C[$3S,iZFJY F}iAaëƜْݯx:\_hf!٬ B"X W̧!ʑס/Sk si0YO<.Gnf6sUmCw#ީr]N,h:I&ή]MU-?u[c]zGR[0h**VC$xm|:WHXG .aŔxl{HJ_yNgm:s:$XvOJԅc"\FA&I+B,t  ^sxn> ry)&mn^x PAB۶ ԛF*Z1;>:Ss4L\iM=\.4.aD4TX+L˨0FK'P=&gt8EfрWuv^&ZgewICc Lg5BNbLtR >f o|"PȲ~.U*䙅}yUh (٥"蔠\CeW# 7\$_6,sJ?)Pyj^EekP[-#:̢c&5ˇŷt0)L 'TljY;P?r ԏ5#g@Y[^?r֖׏u#g]y?>Hy,uxhG ]/&]IkՓVzHivXQf0Mʄ9}T T+/x8MZ`iiLniqnTIU#~>2} SV*M4XDŽRjőRY>α77a9GdPV,`hlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0132-Cigno.xiz000066400000000000000000000037321247673406200236020ustar00rootroot00000000000000 Zms8_%&! 3I:9@n.E#lnmܯ? Z2ә6f^}䛏ߢ$ |8k6mi>xxoy6>ݍ>_H̴6œgOɋ`J&l= _M8p=y 2ˑw<ͻ~䦕d1n=G}SU;] $%@TZ~&01&U6yTS0\8NݠQJ%R.|E[ZJ;+-}@y :eX }:Y2Idq:gOy4Lb•mmkG XB8){o8  +-aU:\GW= mb'Oⶾ7Ue*5uث| Lq0?ݛةDE^HPR Ę!G)oXRBt X&d7a;}O\X.cg[!ǟu"I2* ֖-ɞ[C>`AA0*,aL=s:_S_/2 L_tVgt_LĤmy\RS;?Ȣ=2r/ @›|DS,ճ#0N]ekSYFKP&N 2vbVE@ֈ̴lK[Eի8lIGaA=# —eKQd:fqT.>wY8:cY` 4& P,+XU6sK.VuUV 1h3U[U^ nj{*Y e.62!1%j -kG70ٰٚoz8ЅkS8fN1H1\xK ypOyTumGg2n`ĉXa3Ї(&WLQ2Hi ZuΙZɌ fP҃Ym9]='uu;NsfVT_Tq;ժug|rʟ~k~V0@uWq,x;3a`5{Zy^Z7Ys'Svb4 G3~LOV"o J)Ņ yOB^t!E^dB 8gb 8pqug$¨};XUX.I}[a$*igIL# aG0e7KeGr|  roLu($[7.S3zz٘P=KmLhA;z)PF8%NZ#+$\Gc_#͢њ ~KfDR<=HъհZ* yU h DJQ)&r9{jL;1v˝k}nU@G@\wQ;Zv 5!pv>1g/"ſIy#O# G.Uq     lHr4wL3=E}p:ow (fyI VEWw0psNKG"{(\VzBsO?Zl701GmÜJwsD9D0?L+lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0133-fluido.xiz000066400000000000000000000125161247673406200240260ustar00rootroot00000000000000 ][w6~ϯ=)iңvj;s+ZJ;A}ÛRS ̇x.(xI2Oow>ޝ9ݫW׿=ǣvy˛i^}SdAȿDqWU`= Iz ~!Xvk,$·Yg2 P0[_dg@e۱at3ߍonD=OS4|S+W~2?§ԟ ?l| K)C8oi MQ^Z|Q|RU<$I8, R9%^E76f SuzOMck#6!7Ϸz+ZL" ʝ&x''COsH2al,DӊJ[I薈MIiSrW S@+*ƒ* TZk?wk}( BC_'ĥt7dc;hQR&A~JmP+ʉOȽf߂OGD9wjl{(o֗Djx&h.ZuCH|ꪵbTfVu_ъ!/X1Uo݌oFW3.^::'D (,I!T/aOLj`SJXi$ԽA{Ww ? :Ǡ,zZKt^t~{уEڋ=i/J֦m+pb0uPDsHy0Eoo*v9jW".7wYF퀫a\ ;j:j:j:j3 z- p%,),9ut(\>IqHne6},+\JwY8t h[0/ x„{'xa0^!v"!lYUڝ}5 Юȍv1C.,+ dX,+ p\Wk'pŬ:v"\qW,'p"\qW,#{pvq\QdIv~21yp_8Fv7| 7 #+b$X=9Y+:"3nXW,9Y2.ao 9v;ECq>DĨ|5 ŨYwc]sd""VEd\q@,<{ȂCn1 s*@.7ٖb51!*ؼ!@YXo!2^๕S;Gl"eȰaXaDˆ9>Q|@{@}a0"C;#+aj{22<2a|]a]a]F+@ag#-w쎁cBg !r;Й5gV zp^ރ =2Xayˆb #ڋF|*+UV Uϵ|8UV!s)#Fr:_lˆ:&F*.4&cU9ۦ nZl [}3{OI۩{g?!3`Og M#p& d0/ t/  @a<逰!">;dT;JQC!C\.ة3D>(Fg[Ϸ,~edgOɨ! $g!qo2a;DܾGڑijga*7ՈB 6 \ea*cQĽGZ##2#ϏK#k4:xi5^p3~~_Cyla0>/ ko5&i8,PDאXچ1#ޟrDאz7+ )[+?]_9䏎<FJZ?2?I'L&CERJtFE!̕HIN w{r==VtXt~,lKEXM>wܡ8Y-WZv ki~S,mbKnvͿ'RWA5ִSMK`Hl˾rnD##o{d3z>^}I )erMzcerU&wk_oGMX'̑R-*9^i9z^o=SEb>lo Zɀ(q>a<7#0z`ghzSr =ny&JϗY\Nc蒊ƧN/5=>~twt2N9D{)ɭ$ŔG2\D-.k|l=C_%40[:9V1зCqIo*U؞ώ)oȟi|ܞ )c4EF%c]6@-wz\dֽt/Z?O92mN J,aTߞrj:k"A.3sDns/3{Q ABd3ˋjh gM3׫j5޸sUFG~QcꪝVk߫5K|AS{R_\/ {8jeRԪɍ\JAH:%CU  %ahrY' X8~ FCQlnrEY& i`G8ٓIфde~iZ߹ ?ZKEu0$ BPUu &RVۮ͐˷G'z(y)—h=x;z/RI0?HqbGp_.7GWg?_v5\)"Hra6(3|#=G#.,K#M]>j|˺?~Xvm#4uN,a{~P2P$r5b JnjsI]'/re˩ Č.u/ֶ.us|UF[abB9 )ި.YA[*,ndYPvKc֕eih,IIJ4u`[|Uy0ufx9}q_܍/U^S]lVsz ݬ:Bjn7&@jnB%4L?D׼NNihJlfr%i6-DBu@8u|~>>ˏ*?|ſ#i7q'Y4TE%&c'JKaX"'b8Fi%^fFU1&AU}&1=U.MLq1&%7VD.kiVNNG]dISjwVF+p֍̹Nml5F65jHeNddzAѝ ,vKBPfk`+l{yd8'=Z> 5hm7TH h6AHat U׌1،- مHNS?#qnOH8*f6\~_x ^" j`gXތm4H37eC , xD*`#k|OX~ x3(Rq] ߄ӊԯx oԯ%|+q%ҾF^׫A\5k;S 9S# IOω25COW_=ǣvy˛i^M9h lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0136-Romantico.xiz000066400000000000000000000037571247673406200245110ustar00rootroot00000000000000 ZQS8~'@` L3 Mq/V[2mןɖMB= bV߮V>=I4hy[$i&Ow_~Ls>_hʵԓ0OpΖ||0~qrpG7]6Nќ 1hu–(H'QΟIjs9t`6L6(Q!XViN6L!C!#qV$Ea4IšGe댏Ad 6ÑcĒ>uKX]8agPфmh:< F3 ocDڮpErBcЧm ?.4.l"b7*W~T _4#@S,Lh8E@&PB<(tJ3PLS!W/LWv{@F1V֩G T%| :偍'+`I ^s€-+'G\ A}Oƣozs@ZF,(R0יY䯜syU4#hj*=hW:{Pش (E< R)p]ȌuC:K[@5]]BR9&-qtxz55<$!clV3RҶjQ4' xST|3 s(CrP9[xԣBER+MSk*TeP]Ru0e"L358+rdTmi"_efa5 زw(+(7' LV SjA.A՝z=i6h ~7O~LsA3|O;W,.d0+YqQS4!*oCuГ3J( 8O˜iJFQ֮[wFOleik.;N|fWvQ]zo(djV4?5ՇQ%V)ɴ %wB/dT49[iAB%0wܵ]@&0Јׇud5KtӭsXI*SW1NS'<윭bǰSʶ 򡁯G?ᘯW84kK؆mؖ۲EU"| 'qM1҆ߚv@a@j]#, K 6"vKCHoQI#]ri7+*+lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0137-Romantico2.xiz000066400000000000000000000112061247673406200245600ustar00rootroot00000000000000 ][s۶~ϯ{*Sei&IGM䩧CKtV"u$ʉϯ?K$%.dgOmd,͏泣pc0Ǔi^zGGDd~$Hw^σ?%zF/L` +qF"/oIZd&N L Res84a/@FYi6KhZ❾?+霷ߊͿ8>mi<|JU9Ưpy?eY>FNxOѕ>eP&$L֑Nxrw6G$Ѱ*nQ'mf4gA-Ti(rGLbq_{,tk?9O/zbE6ۭ>NgDK!l Bߕ=㖽Şl#뱿[NM]6{*[< _km=sAٮ7+:9ŝLj_ce0Pnw46L('FmQ4=Vn<uθs诞y(HTyKxB*U[;* #+;T2gJ=+O:uVp [K2񜖽R%eZ]=M^̱IvYq\i҉ dJ w$El[>^i{38}#Q O > n5yr <Bp8k>6 sP3_F7jwAU:.Ƀ1&3uh+q@U+W)ˢ] ^JrGI0X%.X8 1@Cpw{u3V.h ɖ([̖h1(s7Z .l5ZƩ-7STTVL3A-KTh",lE8.zuvQ< %sŲw %:Sc0%ctT+*w/ySWlJeDY+QQĭW^+I/•${\+nWS+iDxXI/Un~;7|掺wER,9zے,rۺ-+ODY+QJeDY+QJ=elUϢ^+F:"ZsA:u<*\]H p.k|6ąnYa_ \ADae-q4ZZA[_-i \K۷0Y^,QJe%2 pWKrN\uueDY+QફncpsJ p³zȄfE~a-z#RC.,I$O?V1*yF%Yd=2Hwr04-py';9^Nwr ]'t‡ ;aԺ?C|g! p 9`t܆{]%yrsku>C-AhiᒥKn9r#| ȼ ͟IPؽN!yܚ%"*h^=C昨m0,ECf)j> ;CrUEntώ%wh#wj6R2 oM#띣]ljA5%y=mn'\F{Yyeidh4didkAIHEnȋтoC>@IF/vmENC_($Ý|@ZoD*F~}O=qqФ)&^?E}X#}I;~EH#|m fɯ;qfDehPd"3og020H(ra.^ȺEIA{ bppn3VBX;{ VwV )X=5['GpO쁨YRpS{5uPpU85sD~^@Ϛؖ <X$62 \㉸7eknh0Ӻ mfnĿM \d uI*73;,ȿflGjdQ.>1Pl}q5t>)j)>L6>MxV~j 2r*hޔ]T :īQoj^z#Ucy5ꅌT Qoejx|>FOA)h6u4t?*Эq0KiK.CM(Ҝ /!2OYZ6?az |W1j>L n] G3ȿ xůldcK[9_sלS}5_PQ͹%[͹Zͅa@ͭ"Dnn٧h+QͮQ]f?jK;ns/˂>>TgxVo (2uYiJ)J1f[ꔅ\)lqcrоO꽵ܞɳ{lo5ַxJn'ZnO|d[K94Ϛ ,h%O۷OWo޼f|=0hMa8緿 1WoGJ5\kS?sJ<lN8\pt;gkS44n$xM>476a+g$8O$kp^?? &BT_: #tvlC# mH$ci& _m3,y6*IʸO_Z0,LL72Zi8&Lz_LjpE*khAU O7tA4e$t-5>FO ݐNa )L~w^uxxJqMCDX}k%t gF~hJH'@=f_Ќu FdF L r߃KIBĨ2\x@!tdIǏhi4*C'#d pI@k+~o)}PejjUvbS@y6R׌:7}1GM ?u78I8XEĶmfJ~܍nb.SB٭!3H JB$yLEI)c'R+#zJM4]qi LG E0p> uwn_ ,C}+on?C׻SN<Fןp}f!g* "ښ0BD{ׁ}Ă4#틎_ gH9N/QthjJĻXMe n2Dwڝŕ xgV뤪RZ,`myiuIJL+М:DK"W x:aL$QxyesE"H`fכ8b ɥ#+P ?/`Zl`?.6[ +%OXl eyw=_13mn *Z.2;{C`DB17lJk;9/bxn1va|Eb}xl*>0Va381 A6g="/P!_ 4uLl-=,ZFiW8E<22=':@戢"Ta0 w]17+s|h)l Qt+(Dx:Ԍ+I@CӐ$snJܻ b_qq(ܐݶ}0&o7p)Me <ɏerZhIEe۵|ޔy9np-Ns Bޙf#.F>L0!txc6/.ĭ'xm*4Ngb4пBex- }t~ -&ȡA/8hY-ԛš3au\@H\ 2wD..A~ B$J|I=W)@.5P("$ :_B~!i%pmĶ6T%&ylM1e \w%-Fq|qgde퇱ADnN0 CkC܊ iC^NE!*rPJ/(J-4 EsEwd0ZXܷS8KF.=[j W'DE?Zh+A5Hv 8XSeXU `mCqI^,vzyP/G}nB)DKky-[yʮ@l*[uHf&Lr7IF~]D;:)XGAkMZ'K*BH{_@1YVpJ'1..ihbq "9 B1{<#zP\eȿ5g٥zV U up[;B4f', ԟ;nG5t%:P;G8 U4/C% esTA[!Lh0ybB>2Y=[4A$ ޷fWv;QD(&,*[6Å`lo#|E#ebDBDn#+YB0kreP\Meć+Ӽ.Lt6BJ6*BpHk @':fx)q9B iXaͥ/#kb?X]FC#S*bݷko4 k 3XBk7?e^5!#Y ZLZ3k>&}M!Eų|V㪺1>Vz~ 5Ķ3%{$+NȾ9#ªl!r=ZY+Ź>Zemc%eZS˖˶;G RV>\Bi6o,(^ .OC:MZʹZ5O9dqEš5 _7Ph8(<emlpD hd+!m-B|}6k!V9߮S?aI?QokhS(fJ`R̽ȅWEɨ 3ږ7kx#O F!Nܩvt}4Cum~r"mo]Z\ KgZaOe;SЛnR4<SI{TUIB:JBq-hbS6%HZx5XSfU<*~]&$*orαPSq7ϒSTjGxէ~sox/?lG˝ŔcN͕MRx٧L+錯IP1W)<;^?RI /E?&?"֧ύMY(,,*T8>8,EN]/q_ƁOUuDg1*ivHy^5UR&j& Inf@&pn& ԛImD$wO&^|w ӹy:?4O{"},=/62.2"BChC˗s[ෞY{ȣP ۢ< +ﭓ .\v,ӧ T8Yib{'⣱7AGesl/i~\.t3`I %?d: # @,ϔF3v,qoI>x1 p7ܪ+N/pD%)! ?AWަy*Gh놜l4'.P)KCF_aF@d~;iX(琀>큐U:i@tpTXpZR\i )O67@`}IjiS=!M^\7lU7l+9z &fժ4G;h}:xΫm]bd|싞YҬwF1q| b5-h2ʣU^FA>HNA4R K#ɋZE p޿l?.nN߱`ȅ45S9mϱ;edx0L.j܇lhj|xbK@ǍPk >)rsrf&<%nMJ80Ʊej#hHi& HpTuA,|&B(xR LTA W9$b>S Mс .?TL9 Wv.N}{ 3}'zwz?ݩ,|8L3rhqv,)ߟN0kBSS.9]%'+,R1) k캸T.ܐFTP9<pHpRXy݀ f{|Xw10!BMe" z(dK˖ȵ5`W1 I*%K|q#1^"yF'㰁$sީ|t/N$/Lw3W8J%t"RE`S/IL5PxTFrxȞ,d^G\/u7'U+~!oMko%W,Q 7@j/Q: )$,_El5VK{J;~}mVVH#-E5.|YGݧ@ŭ>y..Esq)K|LJs`/`{ ov!E}}=`Q(VgW{0o={& -,ary6© qƟ;U<+OS eWҿA [H$lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0142-Solitudine.xiz000066400000000000000000000117601247673406200246630ustar00rootroot00000000000000 ][sF~ѻ(RbU-EUXJz_P IP ׼)q|fzzz槿2}5/<($4{_?{|}k֟L0㻟̟>%ͪ_ީe\|/qMmQ닛hxsM7COgKm|rLx__Q ]j0W^ߢtFShZ rE"%(|dx]P(y|LJ'd^КXܥmGx2kiInٓ4}\jIFܕKq>ŒD'U,W-ǫt>EH}K9yLB)+Wx%Gu_ ya9zY\×|b4kB Uzp4zN~>:.%h$⇩C:s*/BiBB4~M^y0V{HIT8 iTE>~bm:$nr8|ݱ_):fq6%VLqZF Xr-X=Y2n%r%dSXd*ih4_,G8/nr~W59.on>Γ)Ck4r*Ĝb(4kʘ_uφ*(|Ly2M\ZtVPʊN?Hmֹ< v%Gt^spl흫z˹ˋ$PZ"n^e.H0"=KcI1Z "lu8T8w7,toLc4u$pg0K)ByXA38. z|DFASp?m.oDQhݪ5i49Lh>w !wZx;Ё "0)(ا[?8WV~tjeʔ_?S(%]M|4"[GnlT=j&8.|זPkIr%_g.+VH[ bM&*#%< N +g ^d# ċ6fm ]ms튤mFml"W h>c0겍3ϴ~L7rl Wg<bre W]f}O\ |oRp Qg+T@~\u\u\\A:;XdvzY#w.:Fiu;s. ݿEr\@8AF?u\] Wܘ ۺ+m/WU~H5빿_ƾ:ZxA@ ϐ\1{tߎeLuw3d_1zl7{䊭 Jx:!+Lov@غ>ȍn4"lѓ3 䊓X̠Koq1BH9XTIqB[_n1/Ez60zF<)3@[ܮ"(կ #KBCg awCdtqKEa|[s0^" st[[A:SH&Cp<]Sx"_^XBϠ*6^A?q LoQ춤S.Ced{FH^BNnFmW}Φ WF.IO' csx1g a}!D>n"pS!Ej6qRQZ"䕫W.Qrutl^0@e>υم'<esQ}N/" kk%>cg02(J@ *쳻 d2ߌ}!!6]o%O܍.D~A]r6B>)"|N.qϛlfMCãfc7i'B>[q*>X1T+j- Qc>z#& Qu/,Z!Է`7ڮl^'L@\MeDj6MRGoh-ai5nf*ݔđۏUk7Մ!?^U/FXs1Y3\J1KU/h ObxK"X\13k(`ta"\%wV {æ,ls S^6zL Yâ'HI0jRSie`t)u'מ_wW7O%jc\3HgIEdqT:onn]Ӫu#K%3E\nyPW"$&StT(95Mϴِe~FnP:*dH Ct$O.Qpl2jm O6qQoh]:W6"+Rnw(g@+,bNHߒR #SRi]&J4o*P:jC/ڼjȸ"xC"Oa>8mvYDi񘚼6ӆ1}·7%ŬiP ZT,{N )ksHcedp /3/[ @g^fUZ~eK$.+h͖EEߘb IF+Xf zaaB.K +!"P%V(a+%髷OU@[W7/l0MŲ&:mKC͓Ck&c3@Y+iUv"Wy$ iMGzɶ%ROiaV/YAJY!z#zkVy~0?2gYҠ_j̷28(9eVzCz\@d-spnwڡ v ծ=>ծ鶫]'mW;ߤv~b,H nIEpUy$UD Z^AÇᛙju D em$)iF Rqu׷E1KH|VY= X*RGÛk-)afdE)2:+ pE=R W:ݰ[r_؉H lq??lH9ś# bthWZxz/0}d'*xiTU2kWt+@fB'T3$"=j#4.+V>}[[\:-R:>|Ӌ1y!;sC -(\|OѸ.>|"vQQ*YN.[u4svi{͢VbNB /GH9J" htKY5:#Z5}\Gp46jg86kyOf-o߬M"6kyZ$r`7*ج嚾wRWH7hzl`o`ԻDCupq14*Y~LAL7#&bTU;YQ&͖*,Ap`:bNՌD|]/hVd֮ZݹZKXh1<7-B bsˎy[%GMRAw{7*к{86`WVmЛ v[흲~IuCYOgw@Y5^jPV31ZsۚjsK"%Ql+jbk֟L0Jklmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0144-Inquietudine.xiz000066400000000000000000000040311247673406200252020ustar00rootroot00000000000000 Z[w8~ϯ`yo sN)g@v7#lHCzښx4oFu¯=(|X ]/x?L..L߫dK9>ďr}Kֺ|uM\<ءGڐ&~= %4 Z@>lƫI3^DX\opC_=a{ԾL:q-Ss=x\hjr_=N<1YxẠd^*^Űٌ9N,/,C.`[ĩ.{=;-U0'NE-Cd_]6R,~}ENX #bL «q:b1YGQ%+6r(c68;DWs!Xߠk&IWCH Էdŏd_$\QYlRWyt#fKxtQN.(7(S%djH:~HƏɧ 1OJ i! D,I!"`z>G~F Co-V?t7di~!#)b8qV&B{ d.- NH$hף$Ƅ) 2Nqz"7_ڕaJ("6 dmE<?n,e+K.K{< Ue*zUݪ*ed^6Jۻ龲"˦tsSOUڔQ+S%u-:_Ib֮gĨdoA]宺eܷnG8!4VkYTVֆ僽%59)hdh?ecw؋e /'q2 TX\y"P&4qeA"ʏ{  XX̙][WTʺoeK^F#s0`Ɇwuϫ%#h!yDWq/ohn3 F4Q^ w}ll.Xa.Xa }f$eS2CnicWJ Ul528L2b60^)84~+ LND T="P* _45(x,G4dE\aK܃ȗIB%i}Aq.,k-7~WJ5˙,*`4c3 RB16%udJe@ $LE2UGҸ :CG9Ģm?IT?3q(()Vc!#EDS0˼ 8O8__To\qOyY3iRyڐ~~𢀇>4qو&fގ$4˩Nʈu1ԈgG 3/-Y%'],Gv㛃6+MXj' 8|&Nd۳Y K_>Ju(YIs@ KZtiAkZ#+n$/ ɏj/+-|Ai9,K@0/R{}A=2vG 71#P_bS)`We`,zo5>WY+| Q;L7r@ٲSv63ρi/擽ٜٽg{|o GFko67/~_B7W!9d\ďZ VGN۹o 5hjB1Z}wsZ/lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0145-c.xiz000066400000000000000000000061041247673406200227650ustar00rootroot00000000000000 \Qs8~_} @L .,{Q9`&ܯ?ٖ-%7v"L-u>uٳ~|n9tZg^7~u8lzç|_M77n^~>ݿˆJm'~? vrSxklNg EOgx5_7"a; ܽu79ކ*rwGՋ[mڸ-mb|;YM\w }ĥ$g }'>&/"~'q +~imZpQ@EzQB}[({f9PrmHrV:e#v+ZO)9o֏U%^W5^ԔqRh͟rld0?Pyap{XP/͂0 K&|nuB}iBQc0ybT BA? ߼W`NABQe㢡CĖAiYoduj-q> xr}kw&(1HXNjlzB@ɣ%(<ÅyAs%;,V4cdC0$w%l`̹1%F8|jfvWKOZ 1nvzdmVki7.N$ۻcHȘx* pG7. Gµؒ&6Uu]]È?jTlWe U(:bN 2R]o^T]نMH Ê5+"{AI`Yk{Hv즔U]<*|?& slxmAVfB4̗Wi{.FSghDo4M@nr|)Q'Ш[G(W|J6v-lh|%qSE `c1bЭ{6C!ou_ /!+6%+nNn_#$8|35$#ԜӁQ3r6IF\_'%KN|6]iȒ J-v|9gYlE( bEm8+Vن9;A n2 Z_>Nsz?^.Cr"]A4(!-o X2jY2kp};f5O< C2Dy?Dȑj.ӊff|U]S*T~G_/ Ҙ_ph@q\ynq.1:_Ѩ yS29Q6ڈ]9iۆx&->XC(8+w` 9h=^b8d%>Ś9ZrQ ݪE+lkGs>VGr4^wcPwЄ f(AY 8 m$ԥu i(+C`T<)@+7<(@W5%?NP}WM,:&%]5P!B x$ޅ/&&Z0wxaf$(gb>͂mZY,ֶs 樻"P#?+L7k UY*A.tft ],Oeaaf-p55%e CafE;P3*f4=ƞYH:^$;lgK7$Nf/jh:1Uv;3wh0Eߎ%B9q&JoF%W3*1_Hɛ& :5P]Y>Z$0B ~K:11bk.w s*fTb諜QˎM@._; 6ر,?}0Xh7[uW92ZRᯝC_;1uW̸%,(Z!EQL |.<3L }K _e3DcθL]ى- v*~(kfR͊aqNvV&J@avPcX/,WH}WE c6.[;<@zAhyw4_~YXӯ̗;=Sm[\cI11y W]SVSİF]$*jE/ri M\|C|û?AtrRq,su떃yۚtm嵳˖呖%xW~^NXa08>V8WI.0ܼK.޼K.-¼"5/XK.S BުR2Uk-c[ow#X]'דU-.EكJ WSI=]ػ]˫[Г9\wf^[FiAa)/ HAɚZ[h5u4gBeq8EUJ+k+tru}ys6\!G˗b(޲ğ?튅p&x8N m"it4m${Z37˾k5q| ̔45u՛Ezgz|5: "v|ʔ.Y( #Kd@w=2b%}0y6S[Vj^]}\n۝C \]dG[^(eHGW><;FmEk3q`~c՝ٳSbx8fzv=u߬瞽g 60go6羽rR 46޳oZͺ>nP.6՜)lHdx[2#O71f V % ݰHmݠ`O-5O5t~1n;$:=a3 zq*0cIFuӎdIM,83O;FCW1< ч3ț)mտTzd>ȓվP񟯴?q%׹ʯZ<|r9f<9rĚovgi)n6Mu͂l5+7p&g4t]SE n֏f_Y uOy3fWiԈzf gA%,qrIFլς8iGs `4``.pxΔ$~o{ՐTFޅsLEy-WG5rjZu|Ari>[Km=׵Ζ*o%L%(ZNjm `ѮJ9sQD)݋֌iInO K TMb~%$ԓXͳP[xY蝚$J)ս]ƺh( g\N 7a> ~źSracqΖ*h8:>'ktܭiN}5kui6nt߲qr.z^c^Psu. PUvYj@t\ sJ".Րl^ p\ C6g+!ZvDZ @a\TX2QV}z_t{Gf !u[†L_`% mmbBYW.9V]#puȂ,, EL2\n1]!H̸-ʢ80( @pE%!n KV[5%B(2YsE&x3u@U15:VT\1YI(WT"\DEn؟x##6.G(!d ㏎d\9Y9ܿb%U;؂hظWy,h;D"H2d/a%{_5,WCDXE./C+f7ϙRۅ) ŞXnlm32 #tQ!xQ-_?bش>21!hv:B Qa0*r$aT! #1a— B0* „~:#&|(l39!` 1% e"b%]##& AL<=RCLWB0f~=e Qr$e]Z봩Fl>%YO oٍ>"'چ>FpdlE~Nm⻖(g9}ghׇ͕ $cn:2dt-|+Js$p!O.#fE&.b%댘},g|n֋'cE>*!%B^{2ax [E7˚Iv>atdxǞA ^g܁oٓPE>5{E{&oSix՞JûL=="gd츈Xĕc{bv\x ޽X~>mtj]j褒 kTx!jni#ś.bț!,wMӦm),N o˻^vSNv4J5f$>kv,H5%̊ZKm-VDTXJbuܢQm5A{ͼU^˫C*GxZpʬ۸AfW|:9/T="Z_|уe̫?f벸^gE]+UFEiG4s(=Ƴ`%#M(䫦HYB)Xx j ZV@], Uo]?k~38k忿^}}]xG1`! [O#/zi=^xp L8^'oCBoN75LU|"o¿Q6ŮM= n1Jgt4)95!ݏ u-wb74^-P{% M7)^I8["[Hۊ{)bS%" GwhB7Y]~$`Ǎ FQhg8{SH_XCQCv9̆ze|wTlFYJ'?mf {s\W;[c|Je1W:LA"ynC(.9|k,WEe RHj4EĶ,CU<[fS-p)./V ʢ+N9${= 3?{}(f[fx҃oh5sr򑞲 jFc4'r(O;ʖ(o=jHT;jWC-A'HC YOF'FqN?cÂI;<>@b$+tKX9 4jM;Ij̢ho.66lFNچޘ{lDr4ɤYQ|G$_zu/n굶QQ$L*mؘ5m&I;91Kޭ.ޓYjri8 7$nenvzf9Npc=wE{_J5L |*xf6N/<]26`2aӱif'>'WG{rE'Y<"Eym\S}Kǰ[:K$f}TCWs bu`WS'5KXuRDj7(XkQsLq_Hlt]ԸoIp_˅|Bz/q_r7ǰle̿k-p_sg29{8}%/Z%_CZH}q_n1GmxEm/7?ˎdR A-$»Ё/@2X8p9d~q[ 4GhVP&eFORlXʀd e:O:'%YZO͞gU{8ګ+;ӸL)Au\LMKKf;KXǫON<1K=ˉ' #x ׺ \RR•m4ݭKcz|q՟|M}8 =jRA3)s@:jһz 1u<7ԗ&қRNXf8/'l%ŬZ\7`pɗ&B\7G:n]۟3_PM|:n\ @%|:nBL|%MS~|:nb]a9ޣ8mUsBEBm.LWSGGBrf2\Gu  BsԖHF[&4<)fPzcӫn,ؾzƽ)$A;Zqk=>`.db\dzy@%js @|ܸX>U?.`V+a!RE3!^|UBѫY~``SVTwGl puvkv~"e%!}?B}h%uE{T~*S49<{86[v/J 䵑븲\rSo9b\_;ZsKEeklFLfyV_rK@5U.(W4Ç߾G$0p~=n =?ظw]{ᗫM诧yNŻQ Fk?8o.> ~qpt7?&Qo>8Bwa< |l y@xCxOѤMyYQޟ C+}"lH'O*Fk!?h"Ab?t "q/h>@Q(,Q;zl x[=Q1]—P7U" dzv3f蒩dK9Ѹx?4Xܸ]QBb솫q~ P Ӛ>0.022nzp$)rSIƌ>6S)HHD>QJN^(ܫM ~'@ {u!&PLT⼨!{WWhyM5$_LAqO-Aa.dEtf@Ė,!I}j-[B |ƱbrOC10]EWnQw-n' J;%H?+Y Q9VMI._bg.Z*Zf??`)ԠPLL(bcg,5ҮGV4r7p<VNZQoZ_e;5~< 5EdX𣘏P*ħREl{)Nӂ!Xy1h2^d"jT|90UPPWb^,"JsT+ExagJ*itbȧ7 E~F3f J.ڢ7S'"-5FInL.RLHB'鵇5Ō[SڜxLz)(9et@js*wjsJ15jNt"[" sЀef$-|+%iCaTB? 휶.k,<#knǏeYd kΚ,av?z1`dJz[kٔ+ ԅDeg],&W׽DNNgLQ7(ڎnP7JgkJ9p܅wvƍ%m36^wbGԄ&tMzK|FFPvmxŽf}s߮rQǫΝ Oҝ%Ɯ)[Xh!7߻Sn+yR]k^FK'M_87}{MvUWEn)%vcbN۵Չ6͇rg FJc{~L0)ska.s{NSVabVܩ`aV}1̴Y_jO8b_n/6ۈ sgMJ?/穋9Sp1\8 ?{8<دr`2ɘ!ZPW!Շ] q;Uk\ڛCo,& mW\G,-[{Cg!M$D^0ސkE \Gyå$ !ݱK 8ves2k|8"e$՛GW+_ߠP Z!#W$MШzb/e%\^a-7q._lr0YJb.ry`uߠ[FyTyX`x[iA蛘)&*XzLv6FD1Yɴ թQ8PrMYJG7#w1jk8px.[)\q%.rxxT#4ԦJq.L3e6Ysmby[#a.}хyOnjՖA>\n?7ڀTDU%}2,jhk=\;̝!=fTuI8^x'|8p3B:bI%,&E5^n[*VV'Q0pY֐:`\,Y.X/h`l]2csrʳLhY҂BV dIC*іW?ɩOqy 6r֖`oػΟ4FIC 99J<,i2R(Ѐx~HJ5M6SbFvBRHUG<22CIyheچ'\Cq_rWLfjӮYC+&bMbW[+('hg1!+_!/& Q)CHN6 v/l9UH94`|K 0)~O]oE  +.j&6}V: %~r$OڰrQ˸eax>b!v>+)Qw({jN;Ui͓{FifX!ڰakKH$zm5DD)>".4g Zu$@yg#C:,g[8oNo9ߜr69lzz A-70vYX4oK|k0ΓBCNVjE1 Iii1?F =ǨbZK l50ӷ{Z^Ujibpmζ50^VT5qk]$,RĕU iLHVA@<R WTG|q!. O`T/vZ/`0KIӟ_A٢;Ex,e1U \z@0}C\VBMH+zĢj!iG *9/lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0150-nebbia.xiz000066400000000000000000000043411247673406200237600ustar00rootroot00000000000000 [s8_LM`R 7{[[#qH'cْV\ЧfwomԞI^՝'.|?N]v;>=joh&ɬ{%|{_XȥfOީL8!\\1~1=$sa4N!hXPxEhC%J" O7$78qCԝCwܽM{I&MZoh{>⨐ot_1YEhMB(q5W8"9q7Y^E0>1vjA޴cL|*7Z&ai0LǏTxcD.uEǗ'H9~}.ݰ0&_FUjϨ~=g H!ެItV\] UYr[1r7u2ʶo%w_I@xXBb8jtX!Pbѧ+;XU~wN/@.%S3, ;QJ9Z%IHѢeD>wт;SWPg0׏7WHdzF=lCB_I3Z3?mOyєD 8>-h`!%YqIeP>%|F9&it.zV 8V)f9(y?Ocw[6ǽϏ͓xԀ߸y@SŰAD&GJǵ 0"mw{ 3( A|^(iϮm(qFpgJX\ GA 0, T.C~-OZCo9xE5P:Wda «ulj2$ Vᑟvr(Bi:]+Wt6luP4\n/_kؼ䝊_K NYZ[V3g*z!ĐPeXxNAbypeVI/V,`؟$~vld6 CԆjؿ"nAie`o0Y}H8eĘ_UE* *U@:qרr`UVK`mGeΏDj6]TFMXu0tYtxO5;?;g(UR94ڑ\oϩT}-TPasLKZ/9_k9|Kn{aQ/_g>z^|evi]:og"(zuianP.)fFBm:$Msق26oK#leޗ *X ,lv5q-MEvEI_^rQɶZ?pb+ְŀx/2\<۬qd3FF6rvE6VAdg?>(}hd_dX"le˷QEB40&{EF3⧎SvŚ8,f|{_i̵Փ ʞp'<nqֹj4M! hFiXo{:b &/aʟIRopᆹSoGq?'6he?bIyQd}  Y&hEbD %Xd5pxWIb}bIwrC~fGxP2 Hd:~d#v7dIY# dNRAI2a.=\i-&CM\9W8árfyJpI}DjEtS3L7?JHg#8&42e -*}#k`)D>bTfLN}_<<ڝ.3K2'4N?eg0k `%-2 x\7 -`ApT~v#U7e8T h,kgb'0$L־LujÕzL _^`V){t6L.sx !B=ix~ƋňM]XD֧|^eg.Y%3Z۰ifrB4Y ֿmaT;WTʹ°\ΪeKZ >}#IʨYIºxM.Fy)41O#Ojn1 \Lx@2 t[,ƷУ=b W-;R islsSb`#A*G] d@fW;J UU /rn0YqJǛByX1CGBy }Պ"WE0w:phĉZa+ȗEY䵡kD F`B;#0Z4UMݮEYU&|~O³_mѮma_7_Rm͝.9O ensV5"^~u7kdoO7ݽi^e!]/K3@T\"{.e6zO$m3bľlQ׍7F"*C.</kgm3dmMҫMXf`r@s,XkYo^p9E>4S~Nl‰͘XaUjW>j/bM~45/5ymٯ亣TY}dZ% ^UTў ƿ"?m1lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0152-Memory2.xiz000066400000000000000000000036751247673406200241050ustar00rootroot00000000000000 ZKsHW,ll"*@o25HDҰ6뷅*K=H|8i6H2Wͻ`y?6م}[$ѥ;7jS[468 XHw%,.ے'"(')GRWjUwPx9mPyBB-k1z@9 KR4;h1-wZ$gRfbzA!B;Y2NVJnY;ZO_,W$" V¡D=):'Y` R"\ҟN'ͧP[dZ$ϔW3sNښP+DA9K|YžW˕%nFfH`SxDRJ:+uu˓ (p:J9Z'$K@Lס? $t "H@*R[X, 6OEF73SUlxAt٩Q=K8HHkv*bvOxPL=#Kάd5'Q8qK."kd=7b[zMuk"/RP&eO)5е ̡ʢ5b¨[N!2eR!*d4юEழ.ov)kf1n@1=[ݮ>;!V#_:jn!wNd=q5eO#e?d&|mQ(ǃp4mM(lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0153-Memory3.xiz000066400000000000000000000037471247673406200241070ustar00rootroot00000000000000 Zr6}WzOdږ/3v2-M5%E;u_0 YLHB%A; <%^.q[H4j;-ǫ|/7äsE4?|-J8GBEʥYS=U&+iUeҏ8`3\&З( ; QfYo9A8D +Y q G&fe蔨;ƣrzo:dzb.X~<9?+Pv jJFbs=o&}lj$'royTȬ2)1 ZhQ#sYjt 9ѐlQkmW=*b㍙ʘΥ*;mSl.='eG905B8gg*5) wdo| .?i4w8(MVdd0<KNE+aDBQ=`i}N~q.[c}; Xdjfo,k3l6R ?c}vv~1Z^V"+ý tN9_H0~qo!q^ $'wr_l*4%wW)7v_i#!w1W;I:W; H Hgcر'fD 0R!- &3v総'%#%R)uG4k>K9bf4:^{lobo-K;gU o_!:?^butqʻzbPh)|9nY 6iXOLOoɳ0ز~N`.cw>|v6r39K0^.vztcӻޯ?-*_މ w?%=-bwwjQӋx~9mܭs]{[7%]-!waMe2㻉s3_OۻYKߡ?QQ5W$ӏ?֑Dv0-z P6%JKgЊw+e:cϡʡUIo?_Ol1?4dH6wJ>- AJW.“p{o*ɌFO.^',#~xŤw%3ˤ%*YuT rTr|r}/?: WJ_ |Nfb_b#{QAae*`ġHzbHisthClh%q>+pn.}9@d*\CC`.X<9^^?'9-BZEYַ*cOmeOvٺ2\^9pǕfSay/ M'37'E]~PQ;/C+Ά@N(v-ܨ\0ʮKT?-`! \d,K=PŹ[WcN"3w*n-xu1{IӿtGm)uN6I\ZMg$CTr5ʏwU6:;s v䵘M[_U=)oJf>dqq; Yz.(=F*{ Jge^gΡ-#qn݃2w}0Z fø ^EHO"(<t$$bچ>%%bqk6b;TXHާ/1#" O-k^+ۈd,q#`$^`]p`$Sx)<Y2e0C"`0ƂX0b F PgHca, à϶܄aPg[n0: %Eƒг=pam$3~HgƋ}}|}sXtâ "QŢ8s^!9s^!-m϶$ f+"a$2ᄍd|ҙh^4 ލ76xO4m.0(X02y0` v`0N광]X3=Q$?d"|<u[6$lm$wIAa7gI` Uh$rS|vʠM| |9NX ߊ7]Mj: 9z7aBnoF L^K'CE\}%\NUf}$qWi/7*Si/Sj}%y#NtOyI Bc/T6(UE)nJuI3I:4ˣ?m-&8`er傠w_)=RҡC,/-#%╕ UcͷGq[4mYPrWyz}]c3m:ko\P7/sEBZH\^}Cz5סeP^u\:TWs~MT\DU]h}mX-6b^g/ \\LJ՞t}[s1e;-bzg=.SZ-}׳>Evlmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0156-fantasia.xiz000066400000000000000000000043251247673406200243360ustar00rootroot00000000000000 [[s8~ϯ`yo!$a&I&0e6 dg/aج/I_-[ґl N>:;GO?V^텄uiF|;p\899nt;{jlLy|߂j'=9$^Cٸ6cb6ƉWhН FCh^+r]w/QN>ݐޠ uI7M6h븈>Bu*R徻1rcК8LVďGEAd 4Ùa1&}i [q8^צʍnF Co8ޠ?ip1Wo؏qFJen<n0&[&l+fѨ~On$Ax&OuF(U SUTh0=\~ʂ(!>{4Oݠ$TUH;;[ R$@u뢁d(kyN?p,3}(R68\k~FƠB)OS=_pp!]hυA C_YR7rmPCŠ{Os\3D+\-x낭ߙ+N|%4c@"b^{!Ёf\cߧh}/) ^`4dNXb_Ѹ"$Fb⿠u2&%4\!aKAh0"8 nCBm κ zp'@M6xE;(w]ZЉix[Ҍ'퓆4 -pQ "ĉ/wiu`0#nu 3Ǿ:3A8bF("jRf@*l8?c~6Tc[gCJ\Bs`Y*5mb{y<8<GA7p.%^=7N΍yYWçu #B6DW@W*!܌ck7XoXrE%m^݂\Zv 3W %OFS(SD9-ˎI9DU`P`V4H(Έ0~A+ T 8 -7P|8B1eC[)z0r'PܷO{ x5hz;WJǣ4@o3A84sNЎ,YHK`=//F(l69g ZpW;c畫kU+V_x]y.tC\y2ՎB[BsB)8|g-4cX "5=b"[(Zj-݅w*nڡ;x42a \EY~A2d$ c-MI)R`ۈf7U64r؝awxk8ŗe yt 8oWJLDHXjށ}= LF$_vf;Cbh,7eإ|˓Ry"V)8B.9`$vL|dXN q;CI-״.SڌXJT֠ U { .2WHVh)˪#v%h8C(]<+ܽ ۖuH\ˁxO:s'[N=K!cqkݪี{tiW3ۦx?ҏ`E؏xݳ.3̲]e_x[ddK8zzKȩ rJӜ ל_8n-~o~G[s~k<ښ;GLW:^ZCxh|&UѵngʕCq.[ 2VuH"Jv̔7/t_@7 ?Q͇yaK5 =ůV .8]W˘A8p/OW 8YaE-fUN0e7_5trG ҔH׽-%jJdS"~oJX*q\EN*;|lEVbb5z՘q^!J4?a3_DJOYO?jG3lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0157-nostalgia.xiz000066400000000000000000000046351247673406200245360ustar00rootroot00000000000000 [s6~E+HBfC2eR ^h=cS]۲%d;/3ϧj]o?|g,0rX ]/xz\ܾ~݇n׋u]O>O[{זw"O6 WlJG[<tш,? }l= oCl>f.lD=|=ⶺ|Dh1snі~#[|J⒓s1Rx ɎE $oYWŇ^C߰dQ6Ѩfj.F3SUz+PTu[Wx2_G >u)Od[h]QbxnSƂ + $+fd-'‹U W"r*Yf;x1?܏N갈 78Ae?BJ/ _yӽD%I(y3w&,8ɔ~Qt#,~Ir.:F0VdK)2Q$ՌOt2NBEn2L< t_˟/.aj89c|n:m\Vs1XyIͥSkƋ=+ޙZNKM y+/9iLy@92>P3# .YvaRx JMdYsU8uK(BCF)>ȭ!qK廑Jɿp( ucy7ufZ6W%Ϗg-*j#(p]&d +UHD{=|5s5sYK%/d1TңLG$ŕ ܎"5MKYPkP WZ\ [UeܯHMfSPs%{p4%}cg\BI}!.=t2=؍Ņ}ʶ%]ɿdz\t R%{z)W(ª2PT7jI0Bp]maC5. 1_^]dVi%9 Jd ϭ]dyh&;)d#Swq%?ZV"WH;kU%S6fY{>y(D3 -THσw M'u >+.cWNkOR%.*TM=]7Z(ydEXU4ԥ(IP :)ɯ|:zX[ѤmSn#ί9qI%v=Ζq:/>.N<X_Y E=P!RN-X+u [-O5Ym>mMޖ;t^ڀjW{y(m6O'ɵǨj%(vR:M4D2"\ja ܹ:Ļ(T<&ByϏC>+:?E7c0و{dc@mMjxk_n|5@;`IBpO.4ЄXPg9Q\)9G d59q-n-Ǝ {ug 6EzL6 * -ڋlcR6 Xu`Ч6Ux،ͭ ^鼦\PYy7B;TT 08?N'&; /Pb55M$ȨZ@ȯ@bxL 9?w  I_zTx}Q"L5?,8e+e&)DX]V9I6PAs K'(IDW_bOW|'SǴ.2^k6 l`Tn-:|!]7Aqb3µH{4/)ʜ+SK8NJ(2N +|M~=KD#9M`u k^C}Pd#;bM!TD!kkc_յڧk;7 o,Y|Fg(сDcJmz:\ U^z-njн[H_˯]_P\:lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0158-patetico.xiz000066400000000000000000000072611247673406200243640ustar00rootroot00000000000000 ]Ms8Wx}HYTd5?v6{amsF"$)"ٖ3ÜHh~n<|[.DYɻ}^yܿtsxo޼LJϗӽ<&G?"|QO4^O.0{"e^K'WgG7UiKenC:2PX˧Qߓ=Sףipytut6^]W`@>*mOhӑϸ"Z*ʂ8ɋlK叹]4F8@Blj=n&j>hʾLU+Vէ#,Q+M~QҷKUegq6KӬx.KtzԚ5(WvYSyZN*L綤Xl̞ӛ^</ju%3PGr]h]Yhx҃W{?0G<(R F>y -meB?\>͵.C^P}l&,XA(eHGJ7vtuvq~z\oâ[q߬5,Z~~=tSXyl(7thƷov< $CpΫ.^qOj?4 "}mf2X'V, < p05m̿AցͶI ࢙J%l!ĀTlfA%{~+Q 3Iōf[xobG~3ڒY8ӽbuGRǽ'erw:Ƹ*(:pZZߔȏ@(׷@a:P[tv$4N Lڲ?+^۰GSI]嫰J6dYBB[M.X*˫ эJ݋V"u-nNPr(bYqQmLaff-6o;؝Ak~@"N;% [َSP؞K'lS3iImDC>>ho6['h Zl==9l v w)ź bFSu<As;>rYqv=gb!pb W\ Q$\H2:$>G֙ ݲO\ X\8@q2:/Ie;U^LjBp\ "xSH?R[WW,mpsFbB`RnnYG_9#\LJ~$Ey;#+o%Q$kv'GWOȍ e 6d^n2HqY,[`C@_. pE p%1Wlo%arc+ut&edvc%WuJc<.I<#JNxWi#n]1b}x&z E!9o0Y䯘 \qHܟ x3V4 ^1Xtdbhy}čft*nfUbw6䢰{oGM2-C)c8RC̈}2!R}7Hivl={ataK` A$<]ψ ϶|;w(z> a,m+&:2@KT=#a;#: ƅA( Gc''HČTal=#Z^o22al!b̳Q\q]La## ?OyjiQ 詩 IXz0MOpL/raW[#sa%o= YA=.y1!ʞfCr!b!^t# rwa1!^vdd0fgDK&##!>&ˆ`FzuЍ0i|i# Z:1$#aȵXfx|v/ē7_0ڻC,CiN|.zͧ'Q',>K-aK`lOFѝ vq̇g7|qq>8}Ƹgq,/ >:44Gxڈ'G>!|9H&V&O0Y1Y,]DQb{ ,D:eB=zUA Q|8=2LF2Y-9"vB<>Ǘxd㳳 ݫ# :$zN]ѡ;}KI>]϶>%'X! {>2@qaØGaldӑυwAȻ #)utiSaUHjzhhyZ/$zcyS;;]"8Jj:5aE_ }Y8~<=ל\_xk{ɶf^皦{s&^ww[׸ìw_#4dz|SƇr ̰7:eU7ܭ8A=MpQ1iCllmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/0159-Destino.xiz000066400000000000000000000143661247673406200241660ustar00rootroot00000000000000 ]kw۸_Sr֧񥶳mhG]rE*Yw(0 D0ɧ .s?8}%YVi6'[o߿9W~w7x3NOu{oeU2E"GQ|$d1ݢ._^ܞ]^=%n6Β筫9+>Nj<d_|k>޶irr3NO·뛪5c{8ObțeCwMxRyIc*Ή&Nӑa5 ZUw[>Ojʾ&#zҪI:x>UA!+bi?mWU|2^͋4> VcMz1秴^e?N=+;{9%1Y6[r[n'㟷vJaeYr7m̖h0P0$rſlL*4̐d%HnfHbONOO8l6<9Sf2҆k莫C~JD`o/t61 =7<_>-+I>+&F^5M#ݒ6qMF<Ƴ,a>[<'vxyʽ4?&O[Iȋd5/m SNgQ:4Mr5̳M7d)<98=z$ħ7֟#mۭkRDl()C dL Qt7h4frlO6_;hru/C#6lCf+Ǜ>g "W  $>8[ZWV >G|Ҕ)?>)dHJNRFI>-jCcfo:A Kl7.7`jj*vm2Ќ{*S>kV}Mԓ9pDV ٌL9 7+M4o˿?h{C 2@i_H~XzIV#%HWfYI<.`Eܚ s sń37GaarKHf9ޅayX8Nay+aXd&#>p򳽄]%Uᷧ#Iff\%Fށ-0|a{vEл׏"=g-:F[xsۏw?ܩւKZ{et3};sbK}YKoDÀ~S3J{2}{:ذn-U*F&|Ug"pǺ9L,&߽*Y~a?,1@"'=*EG!1~Q_N~Zw[VEheQ?,^  k%B߀NUߣo=I~No=M,C%+n=,t>D j(8Gg[L D[u7ޣ˛l*d tt N3ؖa4SBb3 pfT2N3* AjN3~4MW؊+Ug$&I|δ NeTlky5*+%v\+[ʵT.e,YtKOYUJn˥\^~KǾC379]ax %/1]ʊdݝ 4eIy8JISɢU|GENE-? Z\v9QeV{IkQ2%"/@B%iP@DZ T"-*IH$r5@rI#_ZY^Z Wa RV; J~Z W"-+ȕH Jr%.a/"RO&w^I}v;nW1G Jݜ9H|;p 6Er%Er%{@Uv/>-Dx"_C]ٽ^3ەOw݄Ě>.L K$~!L: MI8w0:p"aCvE(ws·]${8w0J=ۇPzK@¨WpL =|:v:b(C|3.23֮ ~ULEi(9ŀ`.a+ȕHT$wD@TArpi\ICo䙮#lNJm8A%rF%#pHDthBL"q E5HY8w!(aA/w0Ww*䣗b9@ ] ɾ~=Uн0uL0DyebpJH9edb a210ɘ^&F&D#9#L$L6]Kt^60HD.0LE^mWWE5@ $bs8cy'Db$ak#"9锄{#zJ ,tIs<ǒu{~J2:ub۫4˛wge=3MtEQYPU׼qKU`~Zib5ΟlUZq D6،l!;|ls='几w_"RNΌ_9J ^(jR*+ƭqb=#ed/*bZ?h5TzR煿r^jdn яȕ0O)y"tTL'Yj*I<>f^KY%9=o>]bO+|qݵ7iA)N1Zjhnl{)r=XiQoZ'2!lUU:6x:I ,*4RIM2s-2BѤx4/USչP4|Cv走' RO͗ejum_h`eqjplu2.>7M֓xGQ'q>JZC\B۞C͎&_xtV8J祄tS#0-_eV'b|u}I*xSY_X.\8a?.i:12;(5eh<9}f[Pҷݦ-τIS!w+T-%]9ēdݙ[ՈeeYm:r0N?95<0B=ɵ(Xn:ա2SqzeL9<153H:s}k .Mm5sڃ|kr]B&֣.on./rCP=6u؟aA4s.\) a'n?YK#P˓8rڱ<`\nyշ:tPLg\/&(:'J'”كa>s_ͮ*FpPsaIWx"ky.IHE8^@ս&X(EoRE<٤+V Wv{fQ6 bk¯mmܫ>$+JozS/2ҝ2=cyHuazŊͼEPǙ +-szC}9倻yG1R)/x>zvIhպJz-rG6kyZ^'dKYurVky|Z/uK+|m=4ʳ함m|aBۈM{ Fwef%'}^ 1@VZaՈ6ͬVzk^k+C٬|Ų627JƮdl%cvL{[ɘz*;lVOF;WܽMӅ_^22cRЎf>ki4Phi(Aw?dV֔_/>_ m?X<TO9VJN5m[b kjLX6ކcɶҹ'%jXFtHiAx@ͳa2XR>FPz5p:Y'lo& A0lI~aUUВW^QY5^}RaX"u/aXbGfF_*2K=a!bs2A"U^BѪӔۏZ3NE,N\-"#VŷC3U ,:q0WU=JTZEoH0zf14@*bj9[w Q?*}O(7RC2_U'4Kγa/ %ʦ"UBO,ߞt4=~0⃽=aCW_jm9oe;"a7k%~X"u3~̉E\3J:WDQ? Mw_V߈P`܏ o:l i1gB`Kѷ~P!0cc"ǖ{ؓ_Li62,M+vMЦy%穮JRnM[E2tҫIGdž śQU@fxխ {ofTuf7oF=(5krfT `^7fxVΞљH*㹼ږ~R泅qi5ݿ-QSSٷR_Jݩ]'>g'?ތ"y;lmms-1.1.3/data/presets/ZynAddSubFX/Cormi_Sound/ReadMe.txt000066400000000000000000000016521247673406200233210ustar00rootroot00000000000000 January 28th 2013 Dear friend, here's an improved version of my instruments, release V2.0 There are two banks: sound and noise. Maybe in the next times I'll need three of them. I like fantasy sounds, the zyn instruments do not reflect real instruments. Some are modified copies created by others. I'm using ZynAddSubFx in almost all of my compositions. They are oriented to background sounds for narration. So the instruments want to suggest atmospheres, feelings, and are not finalized to songs. Often I mix two or three instruments simultaneously to produce a full sound. You can hear some of them in: http://www.freesound.org/search/?q=cormi&f=duration%3A%5B0+TO+*%5D&s=created+desc&advanced=1&a_username=1&g=1 I hope you'll enjoy my work as I enjoyed those that people wanted to share with me. cormi lmms-1.1.3/data/presets/ZynAddSubFX/Drums/000077500000000000000000000000001247673406200202705ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Drums/0001-Drums Kit1.xiz000066400000000000000000000112351247673406200232670ustar00rootroot00000000000000]YW8~_irNQsRN4~1JPſytDbY\Pyڰ~;h!pڸ_7ӧ8>\wsub˧𧢿w^O~9h۾F}wۻ# |gNs=\?ߙ-aɵŶyd/Ph{~9c]st&:.QZ[/5o ;=xD>5`8]c|}0O]2/x߽s3 91_d'<ňiAf(~^r߆ yKrW2W%w!`ߝmG&y۵=<7_P1t/wg-_Cs@oeLp*= n@];O+ᗒ[F{͖ G'b%΀b^d?/# ^Z:}t*ASS,=>$ 3e1 Q`|w.O  H(Bfċm鑲bOm?=aYأ^X&+FzQ)Rri&vn0Qa\ߕ 2>|!BbDVE%ҳ8&Me;/i04'ȵC4CND],fĝIx4glpל-sK_mu@sso1sV˃~K'r8BwWZﰕ F.h>)THp[dv:9iY`fHDI,?"^c{H`N0ͦ-P=Ț63_̼xIiph7,+?۳R9Q'cxIBGqφё/nϾTgKȀc IAC86evI%PEJr*@HBY$$z]!}##I 1#$:$2)Yv-l~Y#p`7ʲU"􉌺 \Z\mL/›aH_ʑ;?v2^Frg&})bGnbTQ dr-M``nBW>1pئ=5r_u3H9*x"[%Rfm^N8+bLmu(dE(FJr}l|V-37 )>m0/f\P~QK~}ԂqpɛycswEO* wJũxj "E'R>J.^e?-tjH fq9,Lڷ''7St@2wLK;u[v3R%ВO1!p˯Zp99*;VmsX9؊H{s)T&v4qf$;Y&ULxI`o!Я\w0>;& ™Z1JD)jMGwY8{;n! <с jd/'xJYVs& Ƴ@1Ċ]+ܖRW ٺ!F7 ;X<ǎbsld#0|Ϋ׊(V:a :`3F26 vs j߄JЛ B2-C $O"F2[/ķ$f$b[ɴ4FC%- :^hK@Eaݬ4?4ӖV'OI-YGQ PYCHGh otHƥO ia$+ 4@"F2NDWHY}1iHfPIiע"d0dC x#c%x(CuRz:c݆)G5$|gkn!.: :ieѤm18G'~sBw/-sT_4usDؠh̜PY|lW@X\+=iC㇫ A(j,)bP-nhֵ^!#Pv"ꃡ|npkEQ<1JUGKHի 7z5㨅_|3#+bՈ)+6[/GU"c/3zl2WcmC#r^ÿjx1X י8!*0NplqB\,lY1NX ŝoJ GWɹ2[l I+VW)+m5ʵZ"&E7G_/WEṗs7p(;j" %U ABI`*myP;qmG;Tl.ҝjFD[raAITq[]A@p4C9+*|tL ?rAX!Lo 5jZqu2P,(&"ֶ Э zVB48 ΋ T_┇(^TR@>"AYY|\4AE4Ы| ʙ"Z_+1!cJ "al KCPRBVY<)d !y%6+|$՘,mt= LOM/} [0FRTofO52kΔХ( *7 9=-'lJQRT<=z؞zף%> rx-K`S1 g{kp>)zkdXHH=%vi{bdT*M?'ggS/$,b ب哈!I串eE)jOGl[R[ jpRJl N ޛkSD7ĉC>K0e FU]< )ɐYj&2oz>kj:`}Ɋ}Ў0o9(9:3&f4Y%,&{ Tvdó6M2!L|"l)c Y 9 y5jԫ (F7Qot6x6^'^lOhn62ehXH@BThcRZuBkMMSOLO t*P`aɰub9 b@P0<)4.FM?۵,qr:rv;[_IPֹODb^PZuJ[1 $Bdj*)a0 iMoLIG3A ❔NE -P^?ǹH///@lSx@ЙQëACKT Pz jjd_WV>j:o-!,ՉŮU_rAD.uWzW)칻%腑W Ϭ!9OCv/ٸb˫JeLVDˈ3 i! 3dV pc̥Cx|ma<PYYr0;u{:ۜK ߟ؁cL s/jA @^RQA.DJ ?8Gs iR<PtMVu9PY~*K q0oñ`l+'usO\bUugso}qMc_\I Uc:!inftmS, D{Q1eWLWvbMKhM׳s}׉/[;lmms-1.1.3/data/presets/ZynAddSubFX/Dual/000077500000000000000000000000001247673406200200635ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Dual/0001-Layered1.xiz000066400000000000000000000127571247673406200226570ustar00rootroot00000000000000][s۶~{*ϤTs|ɱN-Q6!)7g)%-Il<5X,v?.>uzw$iG9?<^/GgG~:DٝwjuKgzv|r1ߧdX0ƻG Zoj#Gx0Z6bl.|~9URx)!M|r(޵{p F; "f,s|}z =FޗAa,;P ł2D3}Ļb` $A1i|l:|bܞ ؞nnˍE t}u[xf|z*tWaf6:7 L-w&K  lӫ?O.4 F\H.OS)~]ħԛ_5,6*XU-5>bm} jY7? 謁xۻ_q˰Ogcz{ot ˽Q2?~ƉYJ Z>a1RMH~t+$Vp,ԟ~,_hE0V_ȘJ,&JI m%$fkbV> \kg٘6&ח AuK I$rzDpH}qTHKTSJi7.^QpoJ=~PMctܭ\{' ޳ nce 5YԍGrDm< iVηp#ǧD liP@V'rƢnJ|\2گ/zqlW{m,XWo _گ#5گ/`Wwt:5n bePc[ S~-AԽK83Y8LW,SO|tΧ>jS>5oS>YD_=ܥ -B 'Swщ6&}%=HZIBcX"KԻFK;]g*AֲlgR+S1&}jvOؤO7i4%P$inQPqjf}B}*[~OT絴75Tl X?]N/fR*3ӽCJ$%%,!%ԜS*Q 8TBLʑ =Tp`PR=y #TmEEHA Yl*TY D"D"T #D"D"T #D"D"Tj Ao&&VUt6c"E"E@lB"Eaq"iyc\D(ZSkK"" 6yYzq C."U$-"Vpk䊢ЎPwg+j%d++BE0h1"4]+++BO0h1"h,W-fνQ_1pe6 ]δ}D'QscF:gJ't;dy!ʹ\ 0CX_TcLK0҂E3 <.cN)>#r'<,vB6'P"rPl~"r5"tm3445"r5"t|dƁG&,@FF&؉}#ĄP0#Mq(".!#/$6#22CC1<9k$5*k5;YZ e3dՀGf5Pczd _@i<,$1Yd{FV1!Wsu3-P7c'IAuQ9\s 1p)Bm]'NA(OSney@sfBa} sI<)_ n8\ A3@q%FnC }Cc$ð1eF(lW(?}Tp~w0&F5mTQy;O3&alcp?92ćH#;e^.HvDYTDm guƠBPL7?对K}5ۺ Z!Kd}_mA;ۻ-\VpyNk~}߆${k_(?:ƹ_kO֙^}K_RRlkWv}.sگյ"ox W60!Y~:V_soGY[ k=uzwTCI{i}E!|ͼYi˵轪 Ӵf~Ѳ0,Z bYuloek^'e5Xȯ跅6^E?]y؆y~.ȭ k>Zdk z?/+?zm0cȽ qxbQnTHu-j426#R^tx7fxȋ^ ?-EM̬k "WNqn"q^#sud5>k w~pw[I)4Lj56H P#m 8!+J3Fj j!_[,X?+hzM[ϋo,vnojajٚ^\Ϯ>O.f3o:CpT_wǗ%i-scewZ/E zAJ0Ɠh~w4^{aSخ(2gW:-5  A`"WO>X0{S`:n Hy \.e!2^ZElxWٜMhfarۍa\8g'O.?Mtq /?D 61\p$5H-on!9ή")6X{Iwq2$XDT>$^Q;zU 1\YQO_+W(|& 0{L'~"oU-%[$WLX\o1Y$ R Ҥz=,UmTQBH. zsyuGׁrˢ/ESRj ơ*5V@:@*oim/U+ʕUAܶ@@g05*Tm5@] tz7t-fDQ Yp'f{QRҪJ{o ~Tʸ y^/SV%_ȘJ퇷k31F D^γb ˖Z41٦xH" &k-0l-CsN:KZM.WæҖk?x*B|RO\PyR//;W`׭< uy}<=abkn[eس^'0x~K Tܒ2d23LQ+f/ නM}iC5گ/`/3G%_ED'pYFvr0<[&іI+ miziZ!´2ır=K X1nwmBY3*:'cL\st˔,W'P:5Pi]TK30fY]1ձe5,_w"d)g1gH6S"gcwMd}4Yf=7Yf=7f=7Iismجۧ ӡlu]g/NY?>@gc;QI&&Y~/pNy)0zU Ҁ2n{V6Տ[=ŝ4~SI2EzƋ ??^\lmms-1.1.3/data/presets/ZynAddSubFX/Dual/0002-Layered2.xiz000066400000000000000000000057071247673406200226560ustar00rootroot00000000000000][w6~_%9 9i@z}Q Mm__$dc@fXmFFi׳k|Q9#1-{89T~O׃ov4G?MO_Oqy R+~~[oػe3/eZ{}<_џV*|dd%qe{Z~[{DS2P|I\v$QKG qlыcMkjXtUۇxx7m2\5qYR B)r|,N 6@zIUUvT 1ٛF#qQL:~lĒft_ !6~3mPF-V>WTTnZ6A֠??7jm0DV|#C; RʩN\2'chܲ m-3g)$!j8ZY:l|%>:Hx,PzU9ǻ:%8uta3sC:ʁ3?2ҤO0lNq/s_q 'aEQCzL2Y' 9)zX M&.~Ͱc{0]/A@MX$Vb É-AR+?f^x7of* /2_#+GGN+;m}\MQ;HS}#u1˩ 21>9n- 4>b!K$3d-2"œ L@#oWF[Q+ 1j"btSѪͮhդ=i Z{l1kp=Fq u.nt.¤LHG3B/a4x=\)vp3C$?W̭?{x|ϱ=Qn""J^}xAs PbԦm8!h Ysgj,4 KI4d FWw l5x nMN6p]:TncK\QqVs, ׌NЩ'YjVO^E5G;Ȗu3j/~!{Ƃ'<hVfn#qwPF[c ԅ@ApxK z094mkb'{0u>hlMNިhj{Cr`/}N5fZ`Oʢ(T/in*l\7<^>c~~SEi|qyE7C4[ݭ^^NMwTzas nop})xt=p9׫`n~4#q|Da#M ZvwԨ `_nvUΌGwPV@C:ZP΁Sg8]y %&56ƯBcc0ò 7lš1\Kݨe `:c"Uv'̕yU~xȾ 58NS6Z 5|=׮0r\r=Xk7pk) pv-kk98 zt^Ȯƛn֛nv5g)!ˬ bF1pg*Qʀ^m!*&@hX(2Aʐ5B\f`eеV2h]iaTepni2@2BUʹ ճ 엖х2TgiRc5-c4-}d˴+CsL|SʠYbe?3.`=;3.(' ?3yc:L|d3IQ1G|*\NѾR$EdhRqٝN4hz$i@̆4)~lTuҬߴ6֯ ӡa'Xjs#q2sZyW":0{}Jx[P`Jk+SǓcs}|ߺnWW#s727MBx|Pf|| Y}2>N:ȟӴ+VJp5CS rK$`h5RNyP)4ؿy_qs9t*:Cv4=5[XN<ߏ߀.bt?#L)$4[^X(T2:_9`O{ ϔ!Sұ/-:_`[ZhS;`_|SJC9T :*M:HzsѲ+?̏R?p٩WrP}<u嵈~P{ $~pxļ,{X{nm4čC[u >[ؑom{ Aʑ+5#`#bu(䒞T5ʫ HF^Y{#_P2#B֫;J"n֠ 9X0K85In5ࢶ%PA )Us25ڟb#IN:ΊSαo9:; 19I92;<ڸvػ GNH^\W2tj0؜ijy48VXX"X,UcJ.XE2+H6b%Ǒgy+[ ['ڎ)лw,zzHcdƱ/8oĪE1^5'xfA'(XK.U|(0z=1I*nfaWq3rﯵ3seʽlmms-1.1.3/data/presets/ZynAddSubFX/Dual/0005-Organ and Saw.xiz000066400000000000000000000041001247673406200235000ustar00rootroot00000000000000[s8_盙$s tQlnAFJ2$v.Omݵ_j9<Y;5~??]~puj]{[7L:y4Bޜ~ BZO|= 3${4riѧvGYw{5{ׂ!f5N~׺<$b|xʃzh*ְMZm{ 3a9}&s < d%Hď<" Gq˹e<̕pdda &Ѩ4C9Lc2LtCWR7 o۽Qn  ..DNh{!}:od43u &#Bh?^.Zƫ$tӕ ^Üȓ<0J{*tGۚ]SDB3T$ΓXwl}N%R Wsp|"b#q qFL9mk2E,!d+Zw75TۚAZP'׏ɔP"S3ؗubB Lux3S$ EA7EhҾߵu@G4J|7DISiW4X6dG<0|0(`f>gpFx0.hhOؖ)β-ǐp?C{h[m2Z`K<9h6p0 d1MylCƐ3?NL:?p$t @<6e݀]* Π}w@<'\jM0n@ÈD]3{*RœI -7Xkg# in DĻcg%?h熒 5j`xM~8>vwuܰdN[vxIC̊!`_}Q;.$R8A)I8jp,LJN8w:FFSaNj{$WE=%vZ {~hVˋUݮm;ށN8>3Ҏw&A{zW׋YWui@`Ay!Nk3rɞcD/@]d2Ml4&S&N)Kq %JZ&#hhe ܴYHo(_ieֵvȷjpM[HXAPD%c?W]>8F&R VNJҪz ꖝs^*m_0N]_v1&F!/iqc7w+cܭT۝ŮP+kכ";-4yFږgJiv[b34:Cs_fon1USL+>)T6m pH;nXDXc)Kc_K9,Gw`-T9`}Ll1Qt(v"qEܧ;p7%I(ϖab| JytaZ]vkZL #~xxܽ&p_tziڢ 3ͪInڛ(Y![[LQI5?hAm\ jY_eݯ9NTvxTQjwMXZd+$-۪S%~fw6rV4( `4аEŘ<&z6$Wu5W|$W$W$W$W$U@$b&6*PY C8lop%U/a#N}5JǴb##R.+Zt0HݿdB_@QEHx#gCx۲BFf˧=_+aXdlE3SXF6Tȋ._og~GAp׻?W?{OR?MW|2_k?dyCf){'o>} 9>ݍz<ޕVoY]V$^[YnVa%>< 0a҃ҬZNCq?!{N T5he Mw/ SƮYSg7~?/ MS?[gE?G~ Y$b|Ge֏3nwU* 8ҩK$XS+m9fo2_EV0 lEŞ6P@(/8(wܾB,/OB3>u>yމ%%׾^ga{w__,i=ׇK3|8Se5"ESuU76(KD<8j0|h䧫$܁xQRżs63)e$ؽnS77S;^*عrArAw˞53h.'8NVFZ#Z}<[rjaZSa5%R`Mꕚ=EVrY!J3 <bT0CUm uU+?. W,Wߺ9[\.8ubS'缪OEvc;檇6_H!b{v5NtN;,-FIJjƁ2 u?&O0+_v|7͐"{B+m'0[ bIq 3S)G4a3(6q/lf!0Kb?^Dřn`nf\:*8ӂU,WyP L-ilW1R2X2\vFlW2Mc,I Ȃ Gec &[2؈bT&bSXfacjSڶb7s`#{=$kH.јaא k@py >C8l2cf "+eT.«>5V zf>+pXHz aUt_+v2c^ ""H,+b"xEa1^QX ^]`"+ b" W,lvH^Q.«.aۻH,+E8+""H,+bP0>o0^QXWxEa1^QXW<ӳWCޠ~b a`b?A 탄A WZc"y43a't8q^3]b0^QXW݀\Fvy"v祰9Z =z^^QX^QX^QX^Q:3 RK.00]DRX$JWq`Ad1cxrx< FF`ulֱaXdža 0 ̓Su4؆a6 Âtmvað az*)\Xd,DOi.ٵú6~Ħwh n0*=-`a SIk`FYA;`ad11N S 4jOIŽ ܓ-c #H0010 ٲEAThc60 -0 㓖SwgfycBd #[|ĕ`a$"&Z-1}#'I sј>ٲ1}jjc F-<}l ]N=upј>ma$a$,1}e1}e4Omɖ]0 `hް bOYO= KR;z͞[ܳw>ub4⪽ɖm.ۻXLn⚡!V^'7 ],O\,O-<}SK`۵8KhLYEczE ~M+&\㌽V4URFu!Dǣ.JXwwc/ϓW4:aԷ ^_V%b\EU*Je:Xtx2(,ADǢJ ,lsLQebIMi =O/i l+vϫ\J+){1Y4h $ gio^:E _K20F5" 4\H-8@KЌ7AO}Oⷚpȭ-2UFtcLNBJ+M7N.լ\0~(<!gYu9ͽF9 NC=*̫ŻHBa] G]gAkKX$qz.E0 H2W߾_M`<%\] $0 M0e))q+gdc*7YdG4s(#~JfD34#ږlEg{{/)lVDsI5h<ƘE\yf%,ͣ f.b/O7vѣTۨ#ܪLĪiUc/(VMpIviAW.+Ʒ:7h(]94I1W]tNR̭f_RaK:RZ=H-fM bV;%% Vs1Yy%fMڛVbEщ2*6nsm yEY'TY)5k1 JfQAY1Qe>=U*tG-]WH8a+Kb*̙<]VOWGG ǏWN4GJ}XЯ\+_A4 >x0 E{wû7_Kꑉ]}_9>3a"juJۣowqg8%YXESg5#+` ,G,pxa a 345K`\O744c=*-f]UÇNXKItr5jsvfaܕߧ"R/Qp%dq3eK%"ad #T37`Gqt2gw-R$s8Fe E,)/򍭐 3 >sL&Σ5Ct"N6\RgacYٷ\lAc?Nc~`1hOh(;n]ۻ ># 3q;2mЙF ARUHx[ "o>@vS&4VAsl% d Nt 1[t*3f6Y6ĽbIhMLˉ MѮJ'JAXtaEbBvaӓS-B0Uv?f+ ,#,NM ,pt/ư*URo4/^5fdO2N.sjej&XA0lj6"-x;[8zl( -YH:f>3l'uc ɜ%rj;Ѡ_'Օr*Ҫ8gǛij 3E@%2D40:Fо[};(:8n Q-A2Ǻōi=o"`$popd?64ʼQnI0A>3۝Z|9K(z.< 2,N4`{֬r%ɍٍke(W&J7?7 jm?vihz%p^}X 6f~ŞQT >S Vl+ٴH%:u8? '$=VA:;_:ǼC\6 INBL҉ɂP K=l;ZvGp"졯##ra+Q #FaQb.È1QDkYq(4Ex #X՜x'|\lJ8#JcT--E8%|P€> 5#N_xtMhGX${-1QڮFHLMoQ5p&ׄ5mUyi\`EC]tYެ.l19lUsNE(m x`PQO v~>T)2E0`Yj{- -0N\2$aXɃ6$%Oka7ҵ2i5;VWju;`UE`ؐ[`Jz;7(GtG9c9Z!?PZ-`wvy>y9ra/BH6xrK ogֹHG+A5_t ~bҡ]}lt(n(ppBC|^̑^rvJcwDm8w>w/dN^泽ɜ^6޽̭ 'd/?_+vpu{o CcxNDx v8-#-Q|OWzm9ĕf5zF鸉%27׌KjW"Cwqɥ,O?<яKfZV/]ŦV=6W"9,WRĶJQRƦv`hq%(OmXJfIl'4,6BxQs{[jI}rڠ/%-D\"X/|RFDlmms-1.1.3/data/presets/ZynAddSubFX/Dual/0033-Rhodes Strings1.xiz000066400000000000000000000053531247673406200241270ustar00rootroot00000000000000][s~_{lljM dkf_\;`sl7$$cnC4Ӗu>}n}b~}?K-'?5 /;rRzǰ,9_᧎[*c2oQxj [qg8 KY?m~zT+ ;@ X"ϰ?V okcM/>D^{K'īqӲ{s "M.N 7|wH3BXWWs9*^N]3dmB:]ZU^X]V8h \C2HiddUbK6zm})UB :eNirطNkJMzXnS*i;w]T]@-|XFRh_&YX Y[[1]z|z荟Rk}s6B=_o#PVnOKj:gr&3r^٦țXH7rMիޔLHQ\⢤ubgp{bx܅|xՒnY\_ҵ_SߩHcf,];4t΅]+?0mg#6=+ ZS7A92}2.35[$L2,2mm?6aunK\?aCeȒA22RכM]:9@>1c9537 Jwrn+j]@ mXa,"fVuIVDSkt?;o2b`Pք2qMG}vv\¾N"㇊%2M[r>1fZ2m_-6j_8a4vsǶ~ew{x!3} $21z򹐙,rHa y6Иr3'+"7-L:wߓھ.^ 7 i 5HD55RfM Ѡ p/"$;?Q{wә ~Ol߯9EmRQ!ۀq, h sevb(4_K'aoá`t{`VNsaf0x#XRn Y&/_ Ƙ)UFkε ?VݼUKjf䮸\ Yk!ß GKmD'3wL8!2*\R @>@=p Y@Ji*Y ȑpEM7RK_DP=PSebZ2f%/jm52ۂw&ks~>G Ltx@Ӡ)P[N q;tfTB&;@eV,O( MD\ʑ\SB Z/9n?038کRŹ171;eL^Q*v63 ] yq㱮Yx 7rkONN6tSygM?(ɂS":UP8Fl  s0\{ Kb̮p!v]׊rrD*Zr)4*(r)O.pUx+*Yɹ[Hq-\(3E.>7d9VTpKѼ█0፠01BRʹ3-9`WM3LtϹAb=𫾃[BWE QiF=UC&RUT{Ԫ\،¯ae3&b!6 kJ8g{ ަrk9w(v9g%HD,!1rq$q]ݨBKECI\W%y2o hl@f2sd ӨWn`i^XAUL#X3/^ 4pbHlF.BFQɕ4V0(Hq$ ܼfi+=iJ62AZlZ{_PB3*&RA<Zhhw{r>WFM+ k$1@H {{ jppwS4ք`v :aڎ4')}`rP$xC:Z#zK[a+EP*n&~np8^J4awy¯ rI͝s5م¯G*o`>!lu]6k܏)at5rEߌ,U@.gy)W\HϻVKi} O= 8vZ5Zt^[f`}TUCٓlmms-1.1.3/data/presets/ZynAddSubFX/Dual/0034-Rhodes Strings2.xiz000066400000000000000000000060301247673406200241220ustar00rootroot00000000000000]s8~"{of%PK]9 [;rH6gߟlٖԒ@fb$ٖ[ݟ?zu\rkrcZ|x٭v˷L?iζ?/M7|.ߎG+Mnp2G1kc.lcW7LXmU۩Tq*@Ow`:#E㬍_2-_d ķi壵o[5^}t\sxHx]y Is4Ɍ8W%CWIg`<_|4wJTώYWV%m`cc?;n*ZwsrhsJ{+ƏGW(VL|H|pwa+@<@"x\1SLdƘ)(͌Z<!e~ MwdG!,;z onُwAINv4Igu,ׁz1lK[Ҡ t۲sڋgd&-ZԱJx82T#j5"t wBw t6,wLE+dxtclw<<^gDDLߣPiaAa߾7ty Ǟ:W+K/'JȈK:]ך=":ƮoمzttKȮެ,Xh8LH># {p་t߇Ga"kSj=. p=pnd#Zk!S~ X-'C2˩~+S5QqTHҕ(h+ϭp)j>(#M^0 $w'Mև,OHj '&?k,~O`5yhrm$3êԣYΥƬQD!&]#jìly,rg0A'twHx5&Z9h0.LF׃sfOLqWw؆~-,_ n\k5&`i.4g6[ -Iϕ5\9Mfף[y6GKU*8 6OB7vevn,Q}nrIUsG'f<+01^= jGB Fm6xXF.}_`L6@ o `d",LTRQB8wLZmf *=[K Z\P46%#Fm KNKڵ:%}Wӻxt&<1`P V4O5{JF ̞4&-b AC*l%.Fr)`N^2(iҷ6:J R@w<"G)0\l2(XlzYD}Yw#ݲ7[%]wDmb.cRջؔ-jH6L_;9<:&\\g;.UA/\\pG5!R!܆ߋnqPnii vFH z@Ay؍lE=Ga7n usq^P7C=]ԭUAz`+ v+[-QtӺV:"&+-L#ii3^ Ovh\{6s+'nV+{x a3?͙VJs աq\Wи[g=>Kzuh ;$kSzLIQ$Q$a3+Uc)*Gcwޣ3(pyB4"*)Y=Xy+,ެG.54D֋ 25_9aAJ#^dʏ; 5B麬MgF`XB00.{6Aˋ޽Z?MdP8dZSf[-6HgOl84|ZƘ\lmms-1.1.3/data/presets/ZynAddSubFX/Dual/0035-Rhodes Strings3.xiz000066400000000000000000000114551247673406200241330ustar00rootroot00000000000000]]s۶}ϯ{*-i&IG7'J hL.EP"JX\, _NEy&v_;odΗί߼yOïg'bqyǻq߼7*{wΨKqxxzB2M'o6sߟ'MGc' 5IwT1pp~QT& 8l[VgAE`͂8gmdXj~?' F/*YFJwKX[]"E [I'/ǃ >z^.ϟ~I[}xn M:z>Jos=εR4Z){x٬oy;T[XJzRT bCzpp6i4%D=7Wj.2 $z0<y,U+pcשjp>\|=~Z;]:3?h& M0]4IGqvЧՒsxO&ƩX*);BVdM{fۊbF76MQ0 qzDyp=KSHN~ l^͢C.q>.Kj~D^dgaʘ _!ŪXLU:E`Mp.1\&qє@S'+A).T?K2k_}6OVdU3;nUΕ?ΞEa9YRg-1˞P?$s[YLoα`=J {-Q7NlhSJz7&!jAr4YHȗ.b#4|/O_]8w#fyMue*+ƿ kYj{UFGO F5e^h~ߜ!oGp }sl 2C)ިy 0әj|6YXGr+dp=c^ rۨjЧhל6k])׽uZ1l}Eݙ;3~bZjLhO1왖(e]47JMgiFj)*dd){0E4 Qd.tb#% ,FYܔ\ƳvT⣝֒%[Kn-dgk֒% (򶇑=DjP*fB0XD8Q&Fh*۰4qM(@Sh ĉ4qMn0@' ĉ4;' $6\s#xoD8Q&&NIDܽ<ѴQR<ٷ,gm)V&C^*VfR^+N኱m+NኑEb .'pŘ]+N኱tW,'p]+NኑCd{.v]s -}.cI؍=3h-\6"&C=3j1 GKN=݇Q ;Yg0IjgwA:fsz"B=w` pE} pڌvF]+z p%N1vb؜.U9]cs~0p*,FV%4=c5P䴍,niCn+ ׅ`$o¥!+0ƭ,&/Pƭ.&/pƭ0&c?&D+ l'8 1VC5!k4+ ZXi5N=vvFX['>kⴡ{k4šK7Zxi5^aF{VNk(l=zZplK 5ƫZЮq3Q 5nwͣ@9C{Lg{0ON Lm*`ᲀo:=tLm]m٧q.2ۧ ~3 Sӧ8Px1o ks(A~7̛i Va Șq6|Gs%h04c\`?aQ}3Ao3%wv :e6=gW(/R(y1yT`v9"]lQ蟞1f0 2oFgv8?w%a+vXa =+ l/  #FcXa3ߌƾ!~ Q%}l0E-PGqnGanGgjyrti'}~;N)NaΡQMAxqC)LaR`:w? ,ltj|=agd 7 ?0J:Z?mQtK@} (ύFiF9Uà>k s=Eխ(OF`B6 FP#'>(sjMB|O̙lηypj4eiM>tiث|jK|Kwe J-+BTHc'yV^@sUs.H~.ڬŧ# &+(]S>\ZpURlVE6o1 M @ϱcXK k|,´\/ڪ M1yJJH%Up[TD?o-@DmQPAfSiI_[jV1la+' T!q,W?0Vcu~_IzJb;lpR4 4..A1, OL+dO(<۩ӓO9ojr1d+o^QG#4UdpHe6ݧ1gJ~5'~9c ڜtN޾ƹb*.QAMΘvܐ9yԆ\NU)܌8m]͇L8͢"N3QjYMk,=WR`K"'ߓyfFL8l<XS1ZH}&W꾊9k)׽&%k_-:P'_K6[ῖijW%}_ի*~H u_[V⪯ex[k-Ok.$nj_ljո&&^3wԋ࿖gpk_k}oo}~@=U_[_{>vuZ7WJ5rr`8%CllUnHځ}y^+H^uWS+q'`EzӻWux%`EbڒbF?z2_fo{k&dNñ3bxxp2 ~;1UK]ǝg8̈́.QXdA.H&>[|S]{$̣;bKחnw)"ﭙ[3]vp twirQ'KQsKYӝ{5;auru\2fdP ztR^8s})I~ÎRӕ<⾔D\$]:sGJ5} #zt5=u@]cW@ϸLLP5я:UvkLGtO:-Yy0. Wo;^8[t}]]565^ͶYm}m'Kԗ$/>v?u}=%&wjW9^;];s>:L)n:K]]fskM_7f5ojXռ 6yj.ϴYͽ;uX|)7ɪ^ƊtÐL!O7Ć=Spp04̯VJ?.Ee΢urQNEr L$(Č+bFP[)begjF{Ҫ8_ҠU[R8JJST6OpkTQ eg^層i8ipcj.1ax%ޞKU ǿk?x|<8o:1lmms-1.1.3/data/presets/ZynAddSubFX/Dual/0036-Rhodes Strings4.xiz000066400000000000000000000052271247673406200241350ustar00rootroot00000000000000][w6~_!pnzhSNH" 6%"i$c.!DOˌo?Wzc)iVJȞ8e|)=7n?}K{p7عgeLsp&JÙc"b>#(lqK'"K ﯖ( uӒv¶[J%O#+Y;T $9e+< F"*5@"yæѲh+VmmCqlFNz鲾m}?6Zv9$zxRW}un/ Ɔ \C{Esgb+wݣ%5 gؓ/,UyYHηv]7 Qŵ.R%mc ±,lyKgQ{vw~.BB' EtIq(oXv*v-GV<LwLEsdxd3l7 3ZLMfm_6aٖ!1_CCe̒ﻃx]d$['z]m6Y<ɡϱ=1Mϧ.XTPk,s%!@D>͍籿cht:o2a"?EMkBw8!±f;Do a?K'L szkRA}# g|uMqY=>p\n:0d D>zq\Z,pa6 n;$P L^ww~B崇{QfQ+fA4_"5<3!G 3ְ3[;D?wy'_Juym"&3O_wE%]tIjd02f5Gf-BHy4<[&/m8uz4K6Ƨ}!%&x)`nl<JH3F4!-bnݺjS5F˚h`hN-yc< 2DȬpmK<aM[bn6d _^d9 kLxf%#Gaȷo1Z:?RGfT@qЋ +O-#OpaK–"bVv,IPHr!-XdWI'7 Sb 79rnWi, FHDΫOL2GβV"#9+ij4Bx>r,gSdGT^~ta.b,ۘQ'Pѭ[Wr !* ԭ+~ ~Hڄ)\ jZt_M%(&ffQ$,jZ_k9CNO_tBgvr,9g3H-{ΐ22I64 oR%K&K6ɒ Jr%JeɁ1Pߐ*ـ|YJ0fR%,6W4G0[Z1*[2{ْlI*z~r-[WHfJ/[mLʖrqْ\4~y_ْFy+ɖq *[RPuUAՆe bn ͨtIXHKL_qPr+_VK DܑMϧ1%|I:qPK) κ;U |q@Hry?:;-=Xl>0R'(Fx !Hy|wub煥S@RǫM>d/Rמh&:j8 {^X*Op3YL`5QRX*`CV%UUB&ִjM'yŧxqV00ἰTT/W);/(,./P^^RtR\hvT˫;yǧ¥WJ5x!i=,/ʓRU*XGA TѨMT1)'xX@jy1ӗ e4p1hK %#bHdkHL 渫7ȘIһٳ̳A s\ ,@H0P$TZh9["> -~o4O&1I ڛ(S7P%&(6&b#𘫘j?5'wFƵ͂:h[p-] &"ty1129 ,V\U`pL-\ O03ٮcģ}BWL glow=*;=sµ"LD~@-'`"72DL]`&؜Q=u^d eA(%&XZ⏍c$̑ .'۸"Ϙnq]+ZjirE4\'0$ ()>yAɂ|ZCqEK=#Yfv,TN®:NJl/?fx;?^cE]ھbGzJ?OZz?N׶~z_ᖑg'<'Ln|LF)0h]/:h`NCֱ/ 8eZe#Jc"*r,D)#Xq & v?@(Gͯ(Vs ,¨Қ?o)~_pU3kIq>E%S %eBM,Ћt,*(K78Y+oqf8_D eU.<&@n{g\yCDf+Њ$ _)} *6隡JaOݡ I}T>0%y13kU :cTEn%w,DmURb҇RN9TRNJgJ)OKIOKaXRIمc7T{UJ5K4qTTw9tyY*akUVJ>B*-㥥JqYRo4q3ϕ: JjRU_'[o0>l]\h߾9Wȩk{*3-Shm)M# :iʝ܎PN*z$VVi.VQi%cdU_ٮŝpCw.<~q4d0- oTItč t|ѽSֿ B|y\:n?|m8,>xGop?RxZ}T;70$6b @^xYg^@^f>x>WoToķjH;v6KwûѴv`uV2oAutXZ9:jO1 JtC xLѪ|<h >U |UQ&!U7|r{*$}PMZ6vT{'0%XPe/gsjcFm~-ӿgkqd~g}uvZpj)'a_5cW{XQA|H3IPjN UOdy 5r&n?3ZܡSo{kڤeMs^r >xT{9#ٷ 09kͼtҟ ݃V5e:x[Ʈzq J 76em^) X^2E4.0[ -CᚵZm.&VrUa:n7#l*1'%f󱕵sQI'[9CL>Y,&ڹj['g뾍f;U=2a2av?  Jb"nllKfGqV!~S0<6b4*q#Վ Vm8 T1¥t.Xȴ`&)*  O-)uRPִ]0[vO>gxf{Y BLR]͘{J*kkډ>m}:MCQwn;GG rҌZv u)R<8{{y([b1}f#ɯl<)uGZ,Ê C0u!G@$Zrۭ5b5g[1 Pњ6UqqSU?}SܗovɞGVްi7zޭ ww 6k' ,Inv6Po'E;d6}E <\ Cpq.ݟDy"/|jSIյϩA1huO!DDi-nS8HF@am%?H~]@BlT(li_&/ x 1 ?>=C#57OUdDcJJ ?t<t /ٓY/Wdmtr.Fn` 1J0_@hflO/E$ 7VO8A@},:;*[G'%XP8LZ~ىZ+#ٯHO~mdCyiY7!W;0q_>b B @ValNBӏpZXv(%Ȋ,d:e|fZabݏNkU4Ik ˚DBk׿~^Yŵ!rN>XTs9# f|:OAW:-sm~4z~1JB m$&jSz"`Ⱦ8L%P y>m[_ -smre^#g|0~N JWb2Kfs+c,He6 NBlsL>J\>T+k* ֬ 0MPxC.Û`Kbxm4lSpnlxg.k_ISЖ taL=k9q6"jsOʉX&BkR&NjW߸Աn( 仑'., 9hNMK-B}Fā%XhX$;40Êm&dO^@JXM`ڙ!yjl;07ވCgΤ0 +<)y.L7u.x; Ϊ%sﻭe|1?Qf?DJtEQ%oFNޣx~6Y31h4d=H!Ă#b43x0'ןZ1 ,;q*BWG`Q%@k@ꁊϥ(QJ\,A%?OR.RzS#]_CQHJ['zSU*VB}X) 'ך}% Yq:6k)wbZ=fP),rOjd߮)bʊvW>Y3FE!em2~z8P65jsIfίǷRɉ ~*="Z2#48I*as>ɢ݋X Yр51J&*:lX;ֆ.g`\e}+,L]DQJuRPJR ,5 & Q5:iz5if_A; E!f~84.G" ? ȼ^!]"$Q֥rat.,n$H3a4SvYfJT}[v4Z%krfX/ƫd04SWzx8kP>Ů,{.+hqnZ#_Lqoei!<t@lmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0004-Weird Pad.xiz000066400000000000000000000024641247673406200234650ustar00rootroot00000000000000Yms6_A!/d& 9P m/a+ 8[¿?˖:}}͹$I#FޯfЀ]^5^/7lj{Ka8,K;?,M$ٓvS}|4O#Og' crՌ0BO>^mcٲ^""NI"dm*tyz" $Ip%sKK,Ca( 9tvp=|FKU>RF3NbFxP@;/~<@ڲ0,U^[NLj*rP@8^"fs*##]j6ҹY5uۮѳ6$Ѵzkf(mnv-+f:Ȏd~@W"b3,l%-n5\u%ƸAG>C|~0/\nw,,X}<޿DP<ۖB?TKK1>zNHj 9=Qڎ 'VS&wc5HW+ZmE0]idQjrrͥ&?ظ,C]jE)ryU\є $L|Pخq>YJgm?7Gwxrq&1vm/9d=qlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0006-Space SynthBrass.xiz000066400000000000000000000044261247673406200250440ustar00rootroot00000000000000\s8_=%6LMȔtQl܂Mmd,[J2&!i ^O泽{F^Yj{w>nǓw::;Zޞ;2~s-)ɓm;{#d=ɇ?z>#ϖuX+t߽y1GhABQ.ď[EAd2!% c* fPrʏ>‡BFeo0+CLdHv2Z`֟BERe< ډaFWTZ\iYxGUy– ĥz`3{{ 0!>78 dz>NV@5-XBD|Ł`xT gghu0ȁ:AHE::YO-'8uOf+DHXQ}.ŞЫ "8᜔dـb >"t˅8/\u/IH@ehs5 (\fR!. Ɍ=s&0:$ʝ*Y9s.ry:_6ۡN ]D IUw׵/֡:UHp㨮p~hw:̋9`-nM ܨ̋4''cXҬ?pQe =M fKn, rOE,<ҋa)pIut'aD Z %Ԥ$Sn:BqB@Y`gCS6tc)X!@р0>ngGj2ն`zFL=e\7y&3>R`#w Y3R9 JQ iP.>ذBC!vi 6z>B&]G )j 5YOFd)9jZF 9YJȔ3 aN(LHP,SuV46_Jfՠ;8"$ɗio뢹/ 鞘$ |;ZV r<+ %7QlJS"̔FK7R{sIJ|ZP&J̠KiBAss[Z gX+JT )aN)Rg9o$IS"QQ3qy%I6\&,LXлh%<}ARUQXQ` IhA7 c9$MȤt5H4[8˩O½EQ7 bLi #Bŋأv5JR%Ew)ueòBVu~swxy5&8~=X /bTmg k54X7 X x{OSFPTи.*v`c%I3 +9&NP 3l##u2D̰#w:mKa GW#n0n(8b*C>})l,d8p&(74z^feӠ_]fA}&XUe) \M*SՏ1m,S!*KLqUTY*Ky[YRUʬ,C6RU,QtMXWKMq.XԪBXzR, hB\-Xl*X[^)X2p*Xe`7/oe`- `Q6TK,<$_>)%ݮ P*VelW /ؾWWd' |\%U>9X./X`Tɳ~۫SU%U\ۓfIG eE~ÞdKSfTʥ\ʥ̗ X؟^nPYmzTNo+j2KzGh]/yV/U஡2yǹ8A%ǹL8ۘvƜ㼍oǹmǹln&#:m=Z|h=puJ8Aw:N)9H:+`U̕^)Z4?ij(g-ԓ9~558(6>mLNfr:=z?9ߓ7^.g?^/y |{qƵ!^`=Mz2ؓxΆmld.]E!kwq>q# ɖ(m§!t ƒF=4Sh]\O^@}wATSM]H7͜~ys1eؔقqlm=3miE~xWĂ  HӖBn$*Z˵%# wX5T-89@"ռ~X|tMޓkg;>ٶguyv>P鲇t9vYM}TpSTTRsqrtt9kE *FS;`hT6e\mM VWv+[M(ځB }ۚ_4Qa;|5зo$0QY}-9F(vW]j; _K&>vz. ξ;v w~,&;BMVY -u¯3Aѷ&P}#6,9>X9wd1_KHAs${+ +:S/ŕFrd֬̕yCZ7K~bkwWa&l%2\89|2>8!|CT0- e0]sίڞ!ԩ|aضgoD쫚҃liEzJC+%ڗ YV2?P{~I\|y3pijjfsc3pH!rcwඐ݁Kɥ% .5M*z¾D_\: |jhvkqtĸE}BA"6w䘚a6q%r2JLy͏_j'8OȪ>$jM"{lmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0009-Space Voice2.xiz000066400000000000000000000061771247673406200241030ustar00rootroot00000000000000][w8~=c˷紙M39K7NyQ,:Ԗ<6뗒()XNDOꩩ 7#@_$в~?\Ͽt{v8jz^~8=ɟlswQpk?IE{2'7fFwVCk|WQrC[V[ŶUdIh{~cU66Y,\衯進$aLHqɏ>Ռu[]ͧ-CL7]ڙ vF)M*YH?Iȝll@|ΓVv],$\2=Ȝ2L-[oC\&M,`$ ,VHAD|׎Ar<cMprzjϾ\ȁ*@Heu&/o?*c V;:v|J[A0d̽ɦSDʱjl_ĿJyŞ0a&|#2U<眔ed#<N |on+D}8l,|aW=YhO:q.[Bm<Q4 ɒ8\O(w>L'1T~ĦE?ϤU}5ok7?Hq:Y89/xܵ|}N$.GalQzl ^sY^A4:8Æ sF_ ?Æ<baݳ%HW'_LCNZ5aԍиa.V~etK` };ALzn-X*sC\v_PGLo0+T`D&Q2CNL"I bdν]@hKq̿cr~rrukk&S~+G4T H1;Z odiϩ sP?PZ)ilye=]Еg\=}Q f=]!]*&n=]..YWj Xv =W`S@\)KS1BKIF bk)~=Ḏ߁w`FdQ5dۅFu=(@T~ ,vYp ށ# ~ر^V$n&O{D-41Dgᯡ.Q5&(xirGYy8#3!5XL(L ~Gf n}Z5/SVF"vX/kF3L(,z`0| }EB z #[ {S]Vnjb;2% |fl |Wh, QW)K~)+H~` /0GDY`#o8%=!I4ٳ,NF_tAi ǣY؎  VdV6u62oeTa]$leQaV6S*T>cET; ]!hĥ#]+G\*qiY-!-&`[WU-pkQZK7ՄUn=hR$]zHw豧c;18T")b*e-t?#B8moD?4L6Ɉ֎z@yWȆY9xMW4&I+Mdd@N fmZe n,PA"YyzED $[F."c }AvHN "z 0"|82WFtGh(2ih$+\!(JvWSFݘ4 ﯠZS;"ƅFނaiv^xa[(p:`xT *v^JRUն-vA$0EVSBµAKYCߍ50%+$}k (L RDOFE}5)IB$K$O?x&Jdȕ(%QS&i^Nc2IrQ9jp{ti$/t17V\d9 k}YRđ%9iG*~Y+ijKæV́|ԿJs?+5?g$7 wDSj6nV'27K͂[sJh޸,e'7#gg7&Eyx,ҢF TcЍo ǠܷâzB9,G0qXF>|:,]8aI=%)%\kPґoB"(^ 5xjrXhaك2Kjc *l w WTՍ<19i'a^hg}۫jxnxK|QOy˲~}q-UݖC[[(]Po."ȟ0@&[b^LA ~,S*@~ ԏ~i~0.ȶn7CINWc^J[B_*JB2|*RQV9`O2:bu@JJ7!6buYce*KjJ/Eέ`s %qɹt_ l#qv<6ܻ:2}!tGM`p`PѰxnq4ͦ+v?Lnhi̙(@V~9z dnlw&~a&a2:A>de6H'w{J6jW(9C{0PvH,UVૄ! UG)m!fɭ7څb;6ӣ >軮bXJ.(qPh[}XFbureZvViucw{U }s97aLeo)h "BՂ葯È3>xޯ8wvbכ`/ONIXɪ25kUʰҲbV]'>FL4bi,O,]TvjWWg]Nփͅa71n/m/e9l:^SjMѕН-&Pg_мB*_EDHE#OM[odE1p: ;bK QPȎ/9m\VW`n${7H|p'G2oqàԸi3ėvuaIY%+j8Kan5avvogHZTӡХm Pj& 1v@58b"xqHMJE\"Ϳ7`wknpnCp`s܂v Ep&)bw=q64]Dȓ5b)_Dk}};R~dE8 j\Ux~KWg8m ژH!i w*`(hξ.kZ(2 WT _b Y$:j<-BEf"hyFhզyը'd^iG!RlkGyKW;"/)j'dɐKXP~-e;Pbt3؅In o&2c)/2}\I ~ma!dI&툤W;#K<ЎH ~vp_R-V^i. _jЋ۞7 PS=>eq|ijgsYM[| } vW)iG$):I;9'Z1 ~v$Wy; BSfw`>$-y`)(LVS唂`K-7v҄BC.B`K5DA{p`@,E"'ӗ/v.(=#_K9 -y`'c뇁dܳs1J6.M ~m;$ͺ~ti .(sR=ˮ$N)ݯRJ¯MwvSd_[C7Emb0Lem޸B󨢽P*#r G`y0\s xMŖA CjlS~%656匵i7r56_ QMKJ!h/A[=ʉ 1ԭ.ۚ~eYԆm#:r^5eg'ͦ-?n6طH1u[n//ƝlM]v7^ǹ9>\z>DϹe\vsS e!|{o,o.{yKDn5X]77edh+c.0E!#ǽ+x1ƿlQ~izwS#Hlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0011-Space Choir1.xiz000066400000000000000000000034571247673406200240700ustar00rootroot00000000000000Zr6}WzOdWΨ65ԖI}@$d1!__@+i9:Oqb/g@]|ĝg]ap@?]vwW?L~ X~{B .Gw L2f+D|r* ؙ>Gwawd4 /Xw0Le~xo0]"G![{AyDŽ{ù᝿gҚ0o G4-y[Cܗ$)@s ´]+L  ǎIQK--ď0 ː=(`VAOÝ?YlؖYTt) PzM̻dU$<&!O7)=)U9 ~sGOWBBSӨPdn]' /8 #e(DGF*&JF|A#F*Q9!D\Q8MXs;U2/;JжYu/m0,>Z=EQJ<8t-3UO,2d| gJo s[ƙsd ^'*C 7 )bq쓰!%nl-(B^<1dLO⠾k3N wD95[zAj F` 㕉FjίǷZ0K'=Nf*pAc5)Zl}]EW^^kZJՑD;cgu_ug5L@`m]z9(f^ 'b. k2=UEt>G #x1R9hZ#˻ţ6wr>DQ)SdxaaB ϔS bɨˡYrNjƳ3JmMVl}F1 "ls*9(ev ]GI!fKb4R:upS4҂TgedɯQ Sٮ:?DUM3\$g #I8$oe91͋ C1Rb'0b{fK9YPBݍLL};0urzqR9s+ގ⠙!X{p|i0m˝6Y3 -q,^a-I0sPFUb}Sk(LٵS!+^2h4?=ǦU WbXݹgg@`F!hǍq^GIBGܷ#'f5ZakbQęYp7Q3F][& 1 JL#i%SQRDfPm κU!O i4k4^Cܷ=9菆jgٛӽY>ۛY2#/jׅ_zkD;рX]ȿ^Ozʇuj<ƥʕkJ#gYL/TLDU 5yW5YU;.s*'.'+sUZM\Vꕑȡ&;-(/z9C Uōav.n #55;=[$N<޶g zmi9zx/yf܆]]ݻ>_h̵/̟eh:, _co8 >نl҄|=StKv wԵ6 G{iBQs=d]r_=l%V8!HZ b'0~cWwg^{$>uS3JbQRU+@XuO86%!W(5 d\V+Z)j˔!A!aopsP_TG8cNjHe k_.`b_-8hY:UkNsm*`*`7JPR?95'O!Tj8j!"kd<$T'&R(,fq1ލQ&Ѽa%oj{Ul yaePeڋBkxbEQ^^ec 6/ZY] \5.>Dh킱nfW47 #w~+Ald ^VC~UuCUuC\*ó~n/dXPB*jhtG^"t17"Q XeWcuPW2.uF峂IFH-fti!eBR 0HLBP챻v4J}~dgð:"~Dh~Y" _);1IV]e2U7;ZxVȞn?Lg|杈;z徼g" T:|'S{08Uqb)IT^W&Ms +z6{9\~ۇ ~'6ͯkM;i1 .nW~ ;S0 ۘ2My\h$Au$ %>nrh43)_eH9۟nv$WC" [44s(92=8˱ 5y`:QN#FaFcdPIJ"aS|0ɿzad(BN\wT8yq=*qN4!/k9E,"3”ꄅs jbGQ5E(vLZzpy9TIq-"ϊ"ſ>ԩ(Ŀv_ݕ3}i.G\N,i_HKJ|/OdO?OW:]Z+D VEW{4l)qPX" M0Ŕ& mSk.nwY(4POw5ޞ]6^9K|Mj6r9#%$`c9GLA# a&5eO hf;j+6D*5vO>>Ea (>iv3v; 35( ޺X@Bc=/G.[CuS$`[f/K3aqmgGM]ŒGB-\s{9 z*Xd9rd0uYnnJH%p;2PS(5 (A„+ Z ߭PI}(ZS/nHAlk%'~;<> <($wA@C   Řk,㩡/BL-UKh5olC~lևxiJGٌ. pH< $`J UWu3S) D@q}zb*ǎ/ԞK.(!*i~⧪YyA W6jMe64B}lInG"yq #$@(Z>Ff|s(xUz[į=5S#z5W^pLbAZZ&;&BcEF~UgkU;Çc]ξDY;kTs!zI`c!kkW ~c+5} ?rp,"z:]Z+CtuX]NDEeu'Il%[jH" o~`A&SNq,. Ťn{V6F:f٬3unʍYnвRtvR4~-ZVUtC aOiZzf$Ih̢ČpEE Ī?Zmvlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0015-Strange Voice.xiz000066400000000000000000000036741247673406200243650ustar00rootroot00000000000000[KsFW(.`UXWdsVV" {ɯ93-xf˧Jn_O}xQyx2h`<OGGg?].__`8XGgRoFLk_qʑIS+-cf'ֳkƝZLdz=ߎٔomEdX>=oݍmfұUVZdK6k]e[Rc͞&tg;]~3Ӈ/, G<fT2155%F0l'K0Ճ+ƾ_=41 ʾ=nV"F&DOi+1~01oG3WOѯm߁_uŴ~3R8~u5HѳGF?k߁:'Wߞd1XM=A~~SP6@6fmEMr `)bqճ@鷫Λ eˡ;TW q}k?d_SO7үgb14Wϯ=E eefE j>MIGs`fƕ!THwxD3E>ff|е+55KrMM}j9M^5pkjrZSS[Ś< )_z]Ej7 %$HlЬxF/'i:Y}sMi4ه_Uu\L "v\`'s#i~5Q#\Rz%\z%G\Ҧz%\6|5}zUA,4!wy1~U/vo Pfr'8`wI(dgSmF_X2l]"ڇ ȝ-YHm:D^AX`}x0#oT٤Dɟd|Te^@@fAd q`e2?ؼALF0BLo | ㄇFdo ,,mu}>"9,n5H";$eʣ%CL bc"0t@%Y> se>h[N@܍ ,=)-Z{F(,viuR;YsI\Jfbw$}'|E. +qa\d/Ëa:AqS!Z YnbsNHuۮoh@4rIS 9uHHԎgքt} K˂P,g@f?Z b7ϽcgYΊH?׵;^lLd',0R2czf(9i쁤|~-q'/C{|fމ[`=_!s;W(;!5]5""íV#l,2lQ5,LZ7x0>$8$qȗtʜq،_G[ %6n>ith!=aq\q0dS&Q\wП1 ӏJ$ oՆɶ>%f_J%$F)qeG~2HetPŁn1?JA6GMŵ6t~``X{Ε5.PrFuw[Dk4Ȭ/X`: 'bmF֙]Tg 6nh&C^.6k5n+z}rvpϋ7aiŧQLte블j='cÛ'o<[}rkl5J4NndLZ8X/bO#&}ЧSӶuo@o4$Y?eZ:}{ !lKHlu'+O_Wlw7+b齼bAڒP钠P󖤹a=;֜O I$`<C?H4wJ.FyÒ\X5?Fuڵ sgL'` ࿬I2 ۱e%[9& ɤ(6IfRk ۠sxq0)Ym|Zy\5]~pJAR-4ܺF+EU:HDgy6(ɸ?d)_ U  .۰RS#A_wS&ծV["%ҳUZRrUh6~xYSo9 }/}7\POkI,ҕ?PA_P7@*@fؒ2u%s?-ʎO0MtEaN'THWX4xKk4 .)[x)܃kGqiNM(Q̚N(Iԗ8"*\b34_t5Tmoӆ@߆%ɑߦbR䷉a.6eݘTߢ-571*OEiXTk ]nT,?pɩ [)HfJ<_1?.3UUdC]fdwgAS]fT[R^LM=ű@WS댟r5R}WDC'2}r:z{9b;4ެPC*U!|>_ant(VӮb(NUXm6MQ-HQBg3{?X=JcaRe@&!<s{Ԝd{pOrLC5 մcY2%0Cu>ҭТtv"i-kJMGY$,=ך;G-zLj-r) oUVvVnQAKCeji{E䯅:9ӳzd C#iK[[a&ȿAۙ=g),n {;C;3me[ai!*Y/K*t jULf>0Ԫk~W \@bokWZ٬u(gIvVr,(g n)F9 X1YQc_J*p]f\Q˧LA.^lBZ`>>L,,;.pp9 ,q‡a`*\]b^PHvmGмV+2dqۉ#cW] Bv -6eomB/}CnQd9Rg.[衰ޮY o%%#9mrE%iC[">ϋ7aiŧVlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0035-ImpossibleDream3.xiz000066400000000000000000000053261247673406200250740ustar00rootroot00000000000000]s8_6`r@:{8X$n&mmI+zf%˫O9{~#.fnd %^poh+^@AD8-QH-iYcSuIl>fO&;.މ0oV`i}S"Hm;/~_xNP`=8ctmfmB_xlTeg@,"Y"Hh4\֧Z#O0 vM&1g,X&q֑,Μ.r.=) "NeJܲD`SE 68J]b ϵ(0]s\6>at-j 2X)C{|ώ31I#v3 a,`-6CY.&'l3g!fC3pFؔY"^?τ¦uֲI &D8n6mh.: B3PRk𚎿B' GÚYxe歾.<7"nȚ |V@s!pvlP_BӒď e@Be `U i4OwI@aiu-hm|Q肄:=`q7&o|[/CHC $ggI[.?(0?g-J$XϾ0aھܚ2Fm^[ӕ} #:WSԪQ5"rh͟zFo`њfqo|`{w!$Kgfm1%"hW$l"o+72ߕ0wí2;]'Hn:mKC"$l _e)*ܴ1HI L7 ~K 0RPDyÚ keZL-dEœ9icޙ qw\:P憃o#T00R~?N0`Qq$q6 N 3*H5 7*"-ZAFHi~dH1Y)"^Rn4!+~Ѡ7G1{sl x(a2 4t>8uS?uST؈v̧ҹm-1o5ߊBE@N$RWFNضXU 3Q+x:CP:D=h#ȿ8)F,a=1f j  Q qU`Mԭ(:ġхΕ :t 'To:.uxe-?M"e˩R$cUJ|E#~}/~цcJx Ǹ/ze튘ZVS($/Ъ"&qMb*bN@1 #fg!:>>J}b@a^.乁BxP+ (F rA 't+}^;NXz\z 5!(Ran,כi0ћ;ans3N E"CJ07ҧ_˂}{$#łxu/=➻_ߢ*]VWFՅ)ܿ<5Z-P9qlNfgVBgu UQhfjjy( x&6] },Q$\){*>hi.>C8Gnc=a)QBS+{[aː+L}dM>~Bqy7Io )g_4 )ƥt)6ZbQ3$oEOXk>k-_o/!/ᓫO /v噔V=/F(sB@-Q)"]в| Ƨ/ C9ݐ!?mP+kg$(\+Vw mV@&yEN %p)2f}Nқ~RiHn3!m"\Sso5qoʭSn4,&fNoe?3)0}-4?V}8=45iЬ{0{D#2PGN"7w=YaK%1% -u0^f;0P- K ~R㜏y荸uѽPZʤWWmgP)? @DQP-!&*( )݅M{9+BJB'm ,_tV.5b* YeNH[J$/T6c%RWxL94-9dhlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0036-ImpossibleDream4.xiz000066400000000000000000000046741247673406200251030ustar00rootroot00000000000000\s8_=`&I 0e.@Hz/l?ߟlKZHyIbjw׫'zm]aZWYUt]ߍ1i}%|;_lp-'EfQ<vf.zՙU6D ^_eʄ,63Τ3z)eYhm&"|/a]ltM>^{.2-w5V#m^,B]>DRSGk r0ĞlsP),h:{Y42HvL\sYR햮u(HO`7N\aSWI (kN6`KHC,R"3z3Ӹ*UBL?8=RU`|Y9 4-orjh-6caJ8$M++v@.^ac+ 0ia*d90GI/ Ա Z"+Ou_OװcUrj8jbI?/vUJKf9?Iv},z]W_;+T:Za8p  =g< 8- S8"&B-״~`1nimh/s[w=!TZ6ĺplqb?Kgfll_#+g=cv :fuh55(r$H}#a"JE!>~tg(xh(HahC=` IQG.Cw#F=W;VLW;jH#̈́4 Nukhyf:C+|0Adz4#720iMz3Qd0C$ɗষw)=ҭ2K#ۛ,?BX2S",-b!sErf)VB JqtK fp+ IIeC*q I T!֖` VzWBd"'jV=Y-iVkjq0= 3*f$AO%ϸS#͞(F10A0RGVdžn|#FvO=@k$0ke@B-ʱ`f-ҷCBrNEE X 4 Mq3Z(eRDKٵ*Dm!kϝp<܄}vn8(e T|1?Ⱥκ*~*`$s+}$sNeSNx§ gpX2l¦%e8:3`h3!$WgL d2 3A8pP  u &^{rz];!F/ 9ixi9O7Iq|#6yVdh)Ő1Ȕ71wo;e.?[S,$+*2&.pr"cA@1 3j):(1Jy q10; aB'&=e,Nh8!wX=o'<&*07vți7[5 .=Fh%S8ϧ_͂"~}}"~-CaD\su&}"~6/QįjZj[vo,5鈴"qgISAOj]1( v 8}T3@Vd:Qy$ Vr'gVyh88=򀳬G>X+ :4TN OUkhl X:=EѩbTqH}/a!lX9f7V*Q0Q )BX0Of$h/r魛.sq9Ont}TVQX1cQ8q/1808qZ鬐qq1:|ufucGٻQHl0W`4$-ȳrݽB|Ez~Jhr?7=twzvY?u\DEaڑuHFȍ"DK `^*| Ig3<|tpZnvʱGߝb>UuUe`x3^2Yyƻx%*gw_cT*zʙ_L % iS]) kj;%"LH r :}7d6樆U @'U }' {bA/H-OQ͈ pY-"ӯ$^]_&F|Dv-K󈴥'Pܟ"SEJ˪,W}`2%\aX'T"J)I%3G` s(=_x8 }௖X8g{/uOYVD+fB$*lKi4zn2)vP'fz{ϣAպ_ZPke:f~}#WK^Gll'%YD8u:5 -YXG"C9A\E3ikڋ܍V.q<1;s}^D̏Ĝ,B2+߷Whqn[/SB!Zf6am Ci:ϵY$. tt_#kW?̣ͦe7+y\5ypI ó;`~Q/JԎBitXtyϑ%"!O_(hF V2{SۗIͦWFY ɤiv` ԢɻQ֕t4f-fcF/S0ynF\8@_0&_Fr_ =q}ZgprbbպM1%" hreVn)4wOK;vðoå{|p) ; dc*؛b_˔Ymk_AE *;QVZfY9I6\&L1#F- D*uŕӞ e+7{8QT@H;ZY(6l/GbQFN+PbTKڢ|+Ui0qSi BBLl^F.Z +URDKq٭5m)[sppC@A9Bͷ)1|bY69J̛joDW!zڄ d% G&|YH,%ЙI<c'}b`O|#EefnBoO-yvtL̊@FMpcrB:@eܘÕ op*w}遤ظ@ېL^.Z:ZU(o{K4?%S^;X!e1Bc WÔ4JIrpvjͽLz*>Qk̋'Zݦ Co'T&e,%N8u<О׏ sS°J̍ws< w֬[07cC$@Ӆq(a~%4krYPگz]گ=w$[=3Kw_;0]_~-Uo4. X15辰ƀoh`aoi!TPlPMrm %[bT `#*VL#!tO>`/Rv.ϑ9ނ<+%|VgY:>î@-ǁ0ڼiVR~94(z@ǩP(->LWt ;BlL #oCO5b-tvO 9c%meU"vOTj#ݘ\rHˠ Xksd<,!}=9j uwxok|J:4f(}uσkON:"mceAtY7ZTI$Y`I5"I /:AAi]Ysu\jP^W,غ.qV$9O^ܣ9;\mDVS7czFԷ빝v($zn7fѼ.qA[BR`>ZSDkwM$AMlAOB!C^IWR %ܖPƴ.KumUgc0|fڋ&Gk*X] m3()5cv4ʌɁ+LsId𒮅UֺfԜd%A! %A2ͦ ^HBIH߲Rx!UA,_K92.md) \}RkP8W%4-`@G l/Ņy&iӀ-ײViۭ9!j+8Ibh.;[둞/$)ei<9aUōelmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0040-Delayed Echo.xiz000066400000000000000000000045171247673406200241350ustar00rootroot00000000000000\[s8~s IaL "K"H264iݗ:7H׫'zm]Uglmô*iÇ?׻ɿcϩK(wֿ.ZOL+zB Fdؙ #?GwуmN,}*w% ۖOҐ{V@3ҋ}otUu,jm]#@#vĉ~¡2燆%st.9|:3K73}_= G}/,}MMkv\ko2*ܼ?%eZ?)7ry\c!a̓:RB,䑩-!_z|dxtpѤ,Ҝ$UD&o\܆l<LgA:&xH*X &9;xp+\0gGENŞm\ZD%~M !YwQmJ#"LBsa\Y""~8'dTjPsQB7 nZH9 +eQx'atI 5!B$R'VoX=Vjyr0[yŒ?a-uI$RVyl`L(J10A0GWʆn|#F{5aAPaJa#Y~cJ?0e)*-ͅ` Oj2a4@Y(/jjϖ姜 a;x4 Qfe"i&B8}O5;JF6a LcUQ} K!ը!6%&d9B4G+?|\!LhVwN|~8ESuLAYnk02X h ldFVCOe%PUZ݅xm9]OۻݖZ@ӕ4So=Ff-odO`8vfc:&H gq;/ ϔ +^^PTـ^,ȼ(TEb(q8+qEݢL$ո["T%f@ KMDQ&V>՛@./{8D jaDO*=ڔM:ؑl@蝷Г=DhgpE[۶EmInėf[J3ԸLoIGHkgp))WH`ܫڅV1&&5IӰpܒG$ l)Ľfz֣d*ōdI[rXX]aRvU& ѻ*[oH5-MrVِ I ~gG^(6-2bH#~m\̾ݒaL?.ᣈZfٔk=1Iɰ3GF:#_:]gK%lʣOU*Sڲ8δ:ΰ7MZFk0}:1#bHntAl#81qG9[Axs u (KlTuKM~D^SH2M5`]4Mgao4 ASekt |fX?P@Rs]N}n}I:X݇E__FZ[ ,ɠJB+97<3R7Na B^ʶ̙Iwr&U L Z醖#}ZJ`EӯgxllofD|VqMjm1'榻EtOll<2_"/Le̱9t}V˝3V?Q4E9ubXk=ږg b퍾nw=h6Jgo m,(B$縺Ib( Z,,{ dbǬL@S=s!"`62Xb?L_/KOu ?CRmjzZRM|Eݮj}q ձ͒Wdԫᚩ]}Ysh}^i_qi1{r (bNBnџn&v=L-v0R7 `y嗭 p8 7Tf",FP|Ti´6BBMtC߸&h-P2) Kڵ*c)GHd8 n|?nH(E}? Sb^ :4xTtS b2jȬMpE0YEŷ?IZ3RC2 A8ڄp똜>*aFe@^oQh/WɌxKaRngqtFA݋@tNtZ-ﶼ /z;L S h~#{q3),@2i|Q|(@NWH^BZrd)Fp*Ӥ>w GH(z@[Tكd2ւU=a(jpZŲwe︰U_aA͍I=S:Z۱ CEzіWd%OK/]]&ԔȍrlKTq>s~^;-i"}ժ½_/ۜ 49*C%Ŗ48Kw@vY;n>8RmP&xo2;+DuHҢ,`qβv,a91|s>yL=V'ǹ}2taf ӹv:?N=^#?(=d"v$tCKG&jNׇb% :z?|[ GjgU9. zq R"bX-+p%VV%|((P}n7ؐƶS>cn-7 W2Fx2[KыfkX8MΕMx٦v-ZeVlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0042-Rhodes Space1.xiz000066400000000000000000000056201247673406200242460ustar00rootroot00000000000000]s8",#&%PK]Y [7rl6glI-Yk4hrSw#B.jNk'س}.jwn>}rvp'8ߟ+~?J2kz2l4N7h2&mijvۿ h!vxk%>V'uy?O7`:Ov0qHFȍ:D `^d>d ‹'5 S "Vzj!wm¨itʤx6 sd⭨}.}'e/uJ)m׬m32(8 N{ʷxd_x|T]k6= WDIrdgFu.jpqĞu] $m$LV!H H}RbA/H.uNCDpP x_ D+jڿ2_KuRn,#ҖCz+v'D^=);=ֳe:cH"WXY3sS)Se.qJ% ־(<_{8 Co7A_@EV6kfb. CbpF4!;Z=;DIYBar=L2=gD(GҐW=4Ss8ѓ-Wgpnp]t$;_㿝7{fXGlC8f)n"ԫ4暋 zr`! ^Wiy [.LS Hp:n0q88z\T۷#@yCMgK([_S~(X:O%seS37T Qu_#kwKO~oAiUzG$}x#a%}(V JhCG$-.x un{ze[\9Z.J>M9vM # 95y Uag^2i?sQ/۟TL6[l2/5 'Idt9(1~e_=Y"Fm,v),ˇ̆"Qx뽡%XrGÝdv9ǚkߓx-H,WDmcχ @r9n|p @(^R~.x)FދnIT$YƼ#d= p܍{Бݺp7obXn*[ FւWձWW.&!zRTiijXcU`!@`vΕ<t)و7d\'E:f)86*q薯nb Пw}C܃q bn^ Oi]KJ Օ-}5o9Qie4S>}J'>su(~ua1JƘA*Q^#6dn!eY] ݪ{iݙ{ݙ0,ˬ}J(4~%h>|"-IKׅr}=8VvZw*u_JP:j'[GEJTR1Z \0.pᰫ<)f\7ȭ]9sXl^[b30#!GxjH飭xx&C(p8M~o F_mH?RD ϗ20SSGTAaE6j=H}KVQRA n3 $Ѩpac/$lgmLN fsQEfFpaq ID oZ@1Ⱥb?.f0P,Қzgyi$V/w$|nlmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0043-Rhodes Space2.xiz000066400000000000000000000056351247673406200242560ustar00rootroot00000000000000]_s8O}Hlq R@ͽ,wlܧ?ɖԒ@f-Ynuns:yAEvEn6ܩӧ/_ξOgcGO_G|~@fO\~B G7G䯍{_x_n{W-6o'ꄸ.goGI?Ot66֮"Q3Y绉dnCr0 kEQSH XdJD uGO75P=0*a2i8&w7ь2zƻx+j_'KtcqKR@R{-59J >{[XJaR>*ޯ5Yߟ-(9de23s:X:l"l3YNY,| Iϻ[hqX].sB! Zf6/ C).9t+H\Nόo(꾢Gz,0ZVgΠƴ}?dr=Ckdd>Qrv JhAG$M.x" u$|cJD&%HԬzohA6vkpG7^~0;$@ U&:!Qh(uI ]"EKxXܰf: O{2a2au?G¥-A D[΄ 2Fq"ë&* }eC  a"0*[9qa8'T<,¥Ui B>BMlD.d-*)Vz+'Px41fwc BT'šzb<33O"JEn%<௘ ri@\"r NP/s d |RMhΆ hC<)8 /wIP,o:7ڋ53&X/wf Ժ+#rka>D3ջznND 4ӓo3?@@+_]fc:&\\f;0v3UrD*… RlHNҔ#7uTaygK".J0=u @rCyLÇ?Ru Uaz4T51&D$L ǫ#GOM1M ȗ"\ dLûs%$:JW@.Ef@Q _&X^zx Yyݕ-e&_":GI4s`]TN:k*|GGU5ɠra!X +zV [*4Iޟ zf`O^ V3=?tlMVueGHbU|J}&妯ywx%U+no$ ܚӤCƒYIIW~:ɏ1$&E/7:F'Vzζ(KӧнH{^#z_/ !IES#K:Be1l5v2&ȓ XʶEIKz\CbR:Z2??'ͲdZXt 3H-J-ɢKR)x}ķRJE"$$ۈc_^-`/-,>{ : @ۜhҔY]UrXKEJ;KJсc}cazGW.Jfn!ovN4tu$ŭdC9WS"C9vJM kܨ[4M?z!7 P#NG/C=cד҂Vvue{a tx.TޅJںPiŧzN6e/8|=(F)͕saGbT7CX}5UXBs ljhHjhKۙn~ e6x~=:!B i=h? 3±wԄ!%v¹uN%UɯE?!ko@SQj&Oj\ܾFb3+6sb3'y ͑6YN6HgQr<%>ZCxh=_!m`0_{yWIh#6GٍNKdi Ϥ KL5@ 4iǁ2qÖ@8iX%(Vxu>6j=H}ZQRA n3 ,Ѱ/$lgmLFFINa=NQmPܝ{SBS}B\BCR^hX\BBcQ2-`f]@3(hiMֳWQGiczP olmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0065-Long SpaceChoir1.xiz000066400000000000000000000066141247673406200247170ustar00rootroot00000000000000]r8}WxHYTd5mlgk/,ZcHVx~"( q-[3U41KAz>c6{Y&:{Q2N'q?{oN^O&ySUY[Z8)3A2,>_8ܻS&{r/]^\ߝ]]_pܧt/ gs?,HCt)_l@ Ա?7mYhf$Sk~ ΣỴE'YX΢$Ǩ9L=Ng0Z yj^hUlNlŦ^,IW-kF{~ UI2UlU^,ْRw?E$S<:& ޙ% Kf ~1okm"JߐG}d= ]׺L 6jj㛋˳|T}EA kuV%RlP[yXDYi~fiϧqpk?,a.u|Pֵڅj)I$2:G݊hJQ,7׺^ϗyZtH4p`[6\ݞ.fiYxX&bAXeR޵*%^Tֽ PWט3ft;̐k`d3G zk.]~| { PO,Vs?S{ux f.rh@U}.u@6q:ŚN~[f9]MleE jRaMlXO1~Nzݨ Ee<<fT0٢l iY- ZQ9*U8տW^)\-[5U}isPYƛZ;M3mROL)d -xDY&٣"ͅE u/,Md,}nF.jxz[Ld9HW #7F6F7Fmln J YmN#Yjn+mN$os&IruOS%dbP&JmXA5a&lbPrpwAٜ-s0(` cF̝2(`6 IV@'|e ŰQ (%lX@*sΠC*auNl=}䢓yG=«>rҙN|>rxWGQ'=B:GWbzt|u#N^s.Y x'rS)N1@T# N<p!9RSGCbsWCbsWCbsdLnC4DVx<tx|CduŶvCfQ02=Í!{5h1:dXv^ь@u (RLlO{fKuQSAaw%BKdM )0-A1#clxo#F%(6󳽺 6b ř|̈a(O[F~ކa([+%;2CQEaFCỊ:6LlQ_K[Q_bΤe0 08;axJ?[#?3=1?(1 ':n>1 icX}9ڢe0"0_h1 QK{/с-¢?[n|g> cݹgG> ;}t^n V(/&2ؔD~ F%L9"``؝"_I0PO:Eb2fto|zF{Im'cA~ư{IQ Qt-("|>"43Qà>53#CLS>;Q@_/FV*m֑ =wd`Χ lVpʦV8t__e10]{N['=[SDniy 0˴%P jh(ךKB,C]$y~mgP/u捕3u*kTYV/`᳻/yҩҏN$9'i:@%.Mw.9HIc%ߌd9;X#$tUHc ,DjF_]x%O|?ELYNbXkM!i4$XD̘`1SL$gRȀq0'D]_e9zcZܙ|ϱy2>ok?7GܴZ?^SLVIjy:?P̒{Ρ%j^Ak: ]!IF#,,X"rft1 7zژDND4%'RP|2^Pˠwz3+CCX^W+]$Z(S?ebX:O.o9NÅD 6VcYդDzkCb[6CRԚZlqQ'}5;04# #nEZ5?Ċzr_ϊ~ۚ[{!Y$%ˆ@)UGz\nTbbM0 QXfv!tщdf9V _ *ڨ彣S?U+'Wس{Eg^QMjՍց#c"6ӮRȊq%(Z媽* k:}Um5W\v_s}C7f zvp}~&Z&n]G"a.ˏ:bw'|dtlXJ-r܊pFY'k/Y&z֚u.֬ZWmk:j9E:d<.éqmTk4YNY3Ҡ3ڻn)ZPz֚u~uJ-B'k:2;Y]iZ6m7vö2Sʂ3l_ Melmms-1.1.3/data/presets/ZynAddSubFX/Fantasy/0066-Long SpaceChoir2.xiz000066400000000000000000000035311247673406200247140ustar00rootroot00000000000000Zr6}WzOd7ivFHr "! I$D.E)X,vϞ]5 I48:$O]◛=k}/G1WP]?vH#$u1<qv@x2t%a#rٹdQau U:~8޹ w6/qE mrF %$EA4Hge ZOZIJ$)}47?c/]LU9T54;wр`ˀ"[ {zMw-t2ܝ gf$Hyk[e(}\+f!CUnWP5½; QPM 22(g n FFR;אGJ1uAud/wL`o4,~3VYP#%XCı%ٺVpvU Pot2Fh|*[ ju[ Y0eI`Bds I9Ch*uB>pZ{XVd G`}"ؾk {@YgiJOĺ&`9j+DИ5W:Y0_oq8Pv@* kP%U]lIJ,Q v ':>}4v\j`T>_U5gF u6T]"(3 ~&([ z\,U1WAGQ.Rb=6\hIV4%Ⱥ!YNQS)Xs)pv!Q!"R ":UuM^m,Zi&fe8a &1s3EQUah\xhow9u, ld fVS^[1̝O'5OGnqkA $ʯZ jA=7ߺvxTJCV-7h(BS&t)Jju|CV}00xxiQzlm[N6"Db!69՝#%ME~9hɷ_}m &; w}MrE0#O4m&U5jr_EA2ny_~6@;Bgi/%Qʮh^/[VA\VzB3R'RtSߒ*Fn,Sj>MuZ3jժ`Ȋ,x7e[Eh6#ͨ']Yn'[\j][4?/7 ̛F6ycV4g~%Z6(}g[ZUubd UQķA:Ki{ h u'lmms-1.1.3/data/presets/ZynAddSubFX/Guitar/000077500000000000000000000000001247673406200204315ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Guitar/0001-Dist Guitar 1.xiz000066400000000000000000000042071247673406200240060ustar00rootroot00000000000000\s8~_=%$.)s tQlnAldd[J6mݗfw]}Zk}i>;x$~zb}<j{K'QÇ?WwW8CC9;oϴV+lXn[n>zsrQk]+N2 gKvz*Cl 5hݶG+إ0HY'kEw7DnHZ40T DcbKw86܀$~,I hu8vnGϵxT(v=2|lˉe0^Sϯ\fn{Ȗ"!$zj<_hbT䱹Ks*HՌ\T"x%⇙3qdX$%eYKwv ~jMP;N9vPkoY 1Yx]nn|f,qM-8qHf+=%-XR{L+sЕu)avK1; 1_<hQ`&IZ8 A]eaek22NƞodFp ̥ L; B\˿C__aD[{wPYׁix[qӏ}, H<,/(H üh1}z6!_ oH 2p KF?Λ@1sGCFC &ЋΠ}w5u8$\RS a? ZjjpX1}M)˔P"w Jr3}f- Yqq84a2@2;@W3Bӽa[ >ҳ L#P 6anV ˂0k^2L H1 }l^5'2>bl}'}"ImF՚?{z|VV(Jh&A{zW&,I߽j3nŏdO> 2̈́r5 N0XlT7Vȟ)!*ڸҰVco]ɿc*~/P X:\DEct]d-Ж(ۭ$#[Gv[~{WK*V0fjeߨ9K$njN\A41q)ʃ a좩RfXNp[VBQȰGviE]7XQh "4p2Wj`h4B=*hdd{Q4pvhl TvekVkJ"_P$qz3"%3M 7q>{ͥ%3%3OΌ5*[cǾ01^ XWqIPSxI*B_S~=Z?76$%}][lKvK Xn.P]se]w[W^I`_n}RgnI`%Z>Q8hyф <`fev㼓 o`N) Л_imizgG,hGW~#Kr7㜍$oU?؂{g>y[.<zkhc;ZJnync"-i.bO Q1g/5mn vErah\Z/nd_ .;(:]--\H0(anZR󦜷q%L>ԡY^lx8m8VfN; a < a`s$[8,h-V57x}J!s{fԬ 5g.Tp;jMmmtc7&Y) . Avƙ&d3]at6a4 AlaֺqBVJ'ԙ<^'fՇtד/wݓ7N۲_W.zĞN=]8^s:n eqqܵG;Gb>K,m&(SFٖHХOV#zI@?0ٌN %DTS k rӲ"=F˲dtLbe?e|,P'dj\# Lj땮~P@lV4rxd~R6*ҵHdI(Q$HLm]*q"&1!n@XD,ׁl˜ F7HDߍ92: \tcˑyC6t``<,tڷw7}';xX:t6F.ܩll) $ڙ :+!; 5!A/)zVb}Fߗ_X 7o'r`bf eB!@#'9"0G^G|Io#" =vP;9$HšBќa5k X@ރ z?0#7v01h=VU0AHu۲~z=껎LWHq]dEe GD, @ P^Yt,"~جL_­Lj05\uF8@ҋ|ԣ cìU+P6vay67)*k@8MXR$ VK>Ɏ}7(禐G$S*N(WpbD&.@!@r?x ұaϴBBRL̛$RR061Z)iU=S8"Ғl31-s`0[,eRtg7+n٨D0=a/ 4& \,'WwN wPN(q∉rP,W`Er2`Im*40I"2䑝Vg 7ɮgvBChvRgi ,YE!(J%zq`nUi4v ªټྙ3h.ނ޳54 sLMjdGZXQ c@d|9S?sltoiu{fJ|6^ sCx=G4^U A^Ob!kÉKP/p[D܃ >1KTV13d={O&|,_3:Olmms-1.1.3/data/presets/ZynAddSubFX/Guitar/0003-Dist Guitar 3.xiz000066400000000000000000000045231247673406200240130ustar00rootroot00000000000000\YSH~ϯ`N|]Ժl6;L k Jl+cfzFcI@6z kiujyH=vv@kYvvyة}:bfpϳӳC Q2z0j= Guo6k#wu,Ɔ#ɻ`'/#xMgIӻn.RlkqvGtvL`>Oi#٬7s{b/_CPA\G,.F-_&-Q=OqI}SglFs]ZrڣfrVe6 d]EJ~5#xp"Z3]p 60q YtiV 050O1Y\NF_Elct])AFyM$")-c;*`REt/9hcߐ -3K$;iJŲyj6doJb0#&&T0`)3|rx׌,>`37&Q!s3(Cpb``}39}hX"`=a,}G}"QmF҄$ F:W kv5Qk<B4`·h&`:F&0g<^ _~cQuLgHg} m%$. qDeh K6K7o5ZDwkӗ+L5Ebx% use!na*l\H )JC8M\R$ұ5ʱ5S&>Ss샑XHYHYw x*Yi>^QH(d(Q/_CJ6WHbWy\YZXۦq3Tk;e"M`/XCEDZ=qH2ׁ ؂e)ȿ(e(z<^9 }aB5IAe'#֝Cӄ;'Qwg"':qDD\(aQGNp0ef$ a$ ;e ydVs r F녝pTMNIӨ/ ,W*0E@ޝ4 X`@} 4NoY/[c}BҫI&52֣W-S!cX0p㷃8V61h4Nz=gnh7|mHŻ ܎+$v++w'Į:_*[6vU?.l=^mkU4BJԈJ9!9VFV`4ꝥ Н쪇Ȥj )U Ea /z`ZmX.,)=++s-^' ar%oCe%Au+OF5/>~I z]ڭ)w{{2-hF83~o$Ku̇RVɆX<[SÆO<[7}UΖ؇bsqˬ-h NS*7QvZjJe5Wx-ZM[M\x6$8*$QclQz:ut|skFN/ ujؒY%t;Mz52j\zS04lBF{:@&s:CPX/ 5|m74u7J.tri'Ȭ|%ͺnlg<[% _)F~wu n=SAߓZ>d Olmms-1.1.3/data/presets/ZynAddSubFX/Guitar/0004-Dist Guitar 4.xiz000066400000000000000000000045571247673406200240240ustar00rootroot00000000000000\s8_=Lr@:{8X[9ۤ?ٖ6s_ښJ/vŧ {:crk0ퟶ+>|ft=z;{t-k}ujy>oGVۡOȰ?uѐoczuW'Ɨs%"Ֆ`َx5v(1xTL@Xb/ jhyCAnZؓk0*e]4Nㇻp)EL4.Dj_TOK׫\>sס}=mp"S~EplTk,=,23L{w'uYV `|\q# 'd d#lvwrnρ}X(p9LF;1 |N?Ks a7%Nv0}Iu'wE\+w zc:6F ܙٺS[@63["/,e)Y`sjRd`tFRWx^lv{<ӱܵ}-ww:ޟ0W|-;0+o5f979u ;Q`!:aX\`FȋG.p0٥V$P&2Va4"ڊxn>Hv=cXiե,euG9eOTŒӋŁN:\4 P`@u3h.ނ^jh K&X^DNyΑXš1|Qĭ:`,7DGP%|e-M ~&Swj4g4kk](mVzfҦNI~A %|m eaW]/+W-k% 6sW ꯍw` _ښP" jD^`Fw&!L(`RvmM?tg5=Hmv=MڮװЮuD~eX8p'g|KAb,9nd8-Ѧw0ba }uWl!\M3,h i9oPCp&+A%RY +bV5^& j>Ű3zyI=ںqskPS :5Y%t;j*]T и%~۞=0}suF|'p=}ˇ7otXٟ]r[Ûwזٗ7r#ď|tba'ZnrA;u;%q@xЯ~jSڶ?ӻ7luu/h(;LJw{#]2mj*Z}Z LZ@H|Ν|:->ն`lNj]z$SyDT^E .gt'MLv;ROpnYO3쁑q |A!`(Baues-]/ognBBz/J'.HI$4pȍH֓M:E! s}|Bw= uL+4֥:Et)־Kwp^+SQՒI:$T7@S q,޶xzqbl5$%[l}5~LJ"# bI Z~8[\|*._ri 4'aD 2;IL}bpε k~>.S0JncUmc%lFɊe| .Ѝwf85v_ͯiQdpG C-Lg<a3T<4t?nN҃S: 8g0u<@b {jv*Pn7۹FVPØ,%Ԍt`TPsıg; 0$]ƥ5xf> Y:`$Ŭrl ŏ^^zHǾc"O(O@|$1C'ǰqFD;+Њ4fn3d{iUp %yZBXshCC4oU&*TiMPBPMJ5HIsYjPDfzy>6KCJhJh+Td*]p#`Ji]PȲTn2M 4ݿhîXQa4Ҹ0MG1!ȩDXZKnѣ1$9dҢF4. LxIe֥"꒻l_b~Kc)PmR,"hf"!@&/ d2*z ) CiJjOQRKs9E;}?&8CӾi)݁I3x)f41y|L1@ FpC.jL!V~EV_^] X`sזooҖoo&ނ rTɶ{zWu?5Mcv%QY;pPol0{،i춽Wp7 2㎰*+3cf pOc̲mQ/6V|7iYs5Au6|oĺ=Xsl{><&-FѷӢ6paX8l^,- ,f1GKb礋5ʅtCHo]0HbbK"Ї gmg]Ay]k}?-rRoDoP'-Z?ʏ`mړxc3Ou}c&?lJzZm`ifۓ,pI,Ѧ uVtToip"}M_5w[lmms-1.1.3/data/presets/ZynAddSubFX/Guitar/0033-Trash Guitar 1.xiz000066400000000000000000000045471247673406200242000ustar00rootroot00000000000000\s8_=L;ҹދF"MmI+Y؄\1_z峏ϫs?T qg*ӫnwg\^L? N޺}۞l:qߝG k?qIBڟ ]ܿL }WCeʱDjW W'DNHVZ9nqC`1d&L@Y?Rzx yCCm;غ=yΌ2UUHd:[ eIr>q8mTY@Z _9}"QWS]T5xI|aT>*RʳHJ@"`5a,cǴc"1FфJF9U jD5YHk<3b30]&B:d0IOËA|٘3uݙ6%yOBI}T;&1#̲0%͙[aƁ]Ps,bN.+h4@sF4Wm)edRZ,+Yi +)4~ذF:${V.*V ?,TJP$&R*WN{fl06\8a \`٨/a^)$MXTRoW%n[Spi$$u`5e1ȴhMסC-#c J)iUЌlt7ETOߝ0VT "QnF5a9׳9Um\YG;&QwoV9-2i"/P.cTu72 aRqsRy\E`D@K+L+R Ih. Lj__Sg Q~TPJ'$(XX"Qka]q᧭ - Tw>I-8UPz.bIՈ+JhXD:o+Yg!+ ? YWލ¡i@vZu?|m,𵮔4K akkS-+l_.+| _n _v|jV `)9lY^&m/6;o K{J["ز7AIք6H]ٕ^e]VvUMXwz/kZ ]:*)nHiJ mǛ ݀ R/9{1aa /6;hXM/M9#H Id4"٣/sjλ}ak3N6m0yx9O*z"fYLEL"\sS/9AMy^,ƙxTg5fdz^hW9b =A44+F$%PR;:J-c~MD1<7,^xh״iM`a 5V1֎K D94aI$cKN`TUd'3o7VڟFw&Fa6zMBF[C?R> Vj^ Z)v?"9^,;Rgfݠw홴@L{M} ";3?3X5,{xӱl!hz cQr">Z/xH6HIqkK7ڨt9x s6^獼|/"a=%NT[\FubՃ~> ZF%NC Ʊð*dk̡y\hB)_r%[ PS*=Fـj߂XA PU_ I~#96.E7 dfGP0 EJ$CG.#c( WdlpӎjĴbIBTT(iW9&D#NijϐtpFTfTAk<܎ E$C>/fc~`=~}f,"9B~8s? !QƔ0ah K4Ky )vmteR#vr16,\ُf@@4'o\:}ږQv`M$%xmE7 ~M\5=)Ȇ5cdEB\EBO [(%HdK=5Jc6YQȰ0RN0\l\/a)$MXTT#oWQ%n[3 3i$$spe>h!!Ml^G.t-P2)%V.@1V\U? /~n:?_ e%TuS0);ȹ,WqgFݽePX`ꤩ@R\`fz01s-;.`F Ҋq> H=wSAPY-+5y4L!Ώ rSkz6hAV~`@u3lF.ނuZ76s /LMjhlF\QBcuݸz8ėᣄ|ʵŸ8.{B3+[xI.*w`sMŚ>uJVv]tunh̘|-AQ-#"'$7yT Df32fhh&,RI+-=u!Ƕ$9S·XWU!;ʠ-SDz4Q=?W$됒V.Oe$@7+Jyd~Z>*ҳH`M6UL['#ǾD ?,cP!GL`\= f+93[&06 =|cQyFems}ƟKgIӹO3=[P/K5mRkK Πg=7u [DJ:YQ1,P.tu1)geYl_z3E>vmo @^;ck>uow]hg>!Z!ZyNI"HubMi·4T4R"Rf?%6ɂk>1 %l쩞{0Gfc?DŦ3i5W`xZ8ZcF #{}6Y`,sCC\E,(BQsIvi6t @͔̓ʗphXаtΟe,sS[ aC}ŏί,jgMx_P 7o=#Q'&C1>Kge?G[< :bBOf"wXM AP&OP;(Q4!!ۏjiƚ'`&?;Fp\i . $qȧal@OܺOT{%yLߏBIf]T[&1#̲2+n=1  nRSCͱ0_o$h.?{lJ:CITQ_aM&Ka4MeYvPWab:D{샓XLhXLhX7DP0RAH\9Q1+*nJdjGA++rBX4aEPѥ煕,|yƔj}#_RW LLfJx:2a<@YrgjPj[Nt;%oO/b'-%͡Մd]f]>s:Kjuw&A$'HA$i".*cTWmpeKKajIm*2(I"2䑝Vg=0]Ϝ Ҝ“xFQG9eR鄙\/r'uxaҥ`ef[HL=C$pCˏPx.$WѫV-t~rd@K8w=XW^ġ),k8Ekւ׃vy /jlaK_q _n _auugKZuu|UjKAjuO[/k=G%ο 祥 %-lYGe ؆2G!XIJz;j[-_~f&[T[3 +"9@OZ1rȾ׿$Eu6oL߄Zp}{vZaMcՙ7$SFR>bz,5-91|s>yL=V'ǹjibfgZzH{_FA^M*]!oiaD҅A*vImIMncLo';3<,CW#z`Q?!2 b26g4̠䲭ߟA}-< kI?c?S4}mƙȴN@,&w0QPlgq9̿6N4g#RvG6z[,'ny'va7hcbNㆆ&u>5ȝEo`IB" qg:O\bn #>2-MqҺ1'+`O#^h3'Љł;NU @+<?QSӌZMF|z{N %` zڇVL'5XpHDUl,5XlaGPyHkk92A2]jN2o2 ˼hGfzLr 9Bfr\0P`CM^9kY|$p3NLHUt=0!R8%}?#Y;x |5qLF뛫[8\К:^FElV!0t:ƒs,3cEs 0+Y;%lױ Qtm>p-.3>_Mntl 1#3灬]+TH ~K.h5 3I<FYO·V`рƅz5L<#^O{hSq>#/1gs4{Kfx5$jMTPw۽^pyGnPR%xε"X3++!0nUA uE6p`,J5*="FKd: w [hC pN ]4`WM0%^0{!A}#$dI*V6ythi` MC zgzF`*;YA+mU*ᵶ CEn&bGjv(ŀs|W!B~ 35x&i2j6x2&VЏPT8ua^ksf`ҡd(J-X 05jV0ue`/ >v >vR0lۃX w ȺƷ ;s z +`3tlL@!'м3`ulM+8V7uL1o:_\3xu*$?>BgtoU=zNqMWe *gd]e@Ud*(Q^vl~?~{}uǁ&=?j3z.=O…Ac}8?j䟕DJjtpUGrqgգZ־_(#;ZX?aKlmms-1.1.3/data/presets/ZynAddSubFX/Guitar/0066-Electric Guitar.xiz000066400000000000000000000046301247673406200245270ustar00rootroot00000000000000\Ys6~ϯPei&ǨjjKd``HÉ}"A\erv?,>,x~y`oIӵlu͋W?6睿e݄h@]WrOv=POl'~B.D>zI;+36u:4uAbyZ_6;Pܺ={ݽNpOBYP݅qԲnz]7M-Q޶l?dcMG; v>90؎x9AI1чBm̔ +H|#tԲb=D=lf~w5_n7%`fdcw7}dP_N,56`6umEXQ,޵P ,*&c['P3ZCow(#3G XM2CF> 4h;#{#WIf3"+9F<D$sra 8Y hMnjb;riI?۩u^*1F\ ߗEH:=1.Ou֣``KM'.S( ry|O&c{> qBaru=z sʽPIPB`a&t2hg2xlǨ/0'3v`p)nA-2#m!z_ xK(5xUY#Ijt[!lK wFDKZ_ߔ$~k췏7 Z+-v%s``>f}locۯaeʞ$*S-Ts~_]e"bSohV{?o='s!`I~o-k _#0S~|c6l XK$ o~U6X͏k*~H6f 8Cvq4U_)_VI^;۪;t !]"_ql]!ਲ*m ov5w멮z'uS=S &˯i#yv?4qH•_l.+su`~q1?DWCq2R)ǩ#b5 Un&Gf3M)^q$Rk &2gt O qh}ABM\u㮦q7U7 Ãf>U4 dwf: 1䇿 i/0kᒮ>ljAU kmD͚ 4,ԪVI5uԪæV 7ljSZvhjO7+$5pYPv_ItyL2|wtl|ֱO=OuǽZlQ&枢rѵwmZ©n4ztj^4rO=P4_7/1Vlmms-1.1.3/data/presets/ZynAddSubFX/Guitar/0097-Space Guitar.xiz000066400000000000000000000045061247673406200240360ustar00rootroot00000000000000\[w8~`yO!8i dlEG"%MX$mr4SS3I3FFw>oֵ;ՍqLײ۳|xԭoAoYp1?quGҺb;wr!&Mة]p]Gdz՟&c-u5oY?8 >hExү[5pC-{6@ij0Lg6hƶlD?~ĚTvl|%? qbO !\SDWUJzw3Y|K'-+۝kD)o@SƳj03h)P#?ζ$?B;އF,^n"k@%)`O[E-"m\ M!ʢT8Th4\l~48x8jdRZ6aAEAC)JF48 \ AȣB_\3n :K`cf6ӎ\ao:Dn=?OO #=h}Sp̧TizMa,h{bJz"]@UIpƛBm g$u$lfO-{"Rj IulB1 nY"AwC=$jjt!?lK wO:@ׅT]8i'ѱ@b,}`0D J08ab0RG`FY|,:fB:ZV.^Ɩ>ctI3Y#  m0_eҎ$ Trz{©ARDbNj(\nE jxLl=0 oe'zOǗZ"4zOLz]M1Kըgj3`XU9S^k31~f/*]$K#P7&\\IE &2/įYtRG|_C- GP&Wl&RT]&_WBKwQXz>zYGd,v76g (LUĢ,KIp`r*U%HeLJJX9|aN{ 7'b*)ګY-` FPHY T((1R˙R B3i{Zoi8JPbM ?-VٙDwuc"ui%_K]E70Zڞ/L6)Jx9)l V];K`<Ȑy6"=L'@ޒK~KXA~}̪RCA_2/Ot^{}AO}h ?/P'  xr5`}K~&<,7`̕9Z'kov['C ϊӰf[U\V֪:uU~+KS'uߊW_@JYْfgcF{F\CZ.&r{;UnWLT1xڂW~;VcS_g XWy~)V~C}ӏ8nWJhPu4聪U®͔=n,rKanTNuT #|~i<㐤O<&I҇p88GWGq2R)ש+=.$9rq]ѝUnDuLʥ.ᦩ])kc-<-ǣWY{Ф`'D WG1 2,C^^YCmu<jr-0<^ vC;8S{e. /}mѧ{O䠵'g=ŞԖ3}(Γvp?F5|?`V Tlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/000077500000000000000000000000001247673406200211215ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0001-SquareToSine.xiz000066400000000000000000000043031247673406200246150ustar00rootroot00000000000000 \[s8~ϯ6e6@Hg/al֖i_2nlB6t'YG_75I`0|}|ttKkp;v>k6gN:~p G) ){?d== 5ʿ ;ӿϛpnjVv ryH^Ni_6o=> >"A:0~`0A,?\ tl>i~D>&Q/ԉ Nz8Vj̺*vCL]$]dzP~[)(S 3FT0{7Ly<H8t1vnj'?JL 'sT&U$1YDu_ ~+VBr 等<LlZ`?M)uzyٯi㇖1 Wޜ lK2s9Vh٘{K ]{HfF-dsb+Re8)Ŭ^4Π\lpQG bYf}[٩zKGfUYIb7P;m Sf]DWʞZIy4lvȿmI&iؘz$Vu^ږ= [+$̥?74j(F9P+,giO=rIKɲGsiabAs'}=%d9CDgݿf*3DB9u%A?@@"]3~-*[6ꄦQr Tr+]%l xxpJӃֲapvfYUzH)szU\7N6 W@MkɆ=z9Y \NOjB]Ex()]AvC1 >GHtQϦhwIm_UOעGP\~Vkb"*w(F|kӲe`t۽VҬ)_gB&0={e*"+HJp޲KD?1ny ;͆[`d"a"at? `EO\zbm7#ʙjb-h# H:)ԓ/LQ{o Zn̨O.Y3Y~7R*ϳ7DO+ mo,b7ܵ'cQiO S( =kF_0^ZpR+%T@b7PmRbG9й2Xn਻\-\eq.8qr/KQ9W/ƙ^z(^. Cz~$+KN};>uTb"mݝ2zrkr^茯^č7>l7q"nED롈P/6 = Vlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0002-GaussToSine.xiz000066400000000000000000000040251247673406200244410ustar00rootroot00000000000000 [r8}Wdyɭ*)K-@vE%l<2kLد_ɰ[N=I/aks7gN9O'wL~|ƞ8yr!G0&pB|E Q9 +胩-N1\cl00@}\)ju*[wcsw&8QYtG$YW"QKK2+Q&c͐ͽT% u"}N'f'smĖF ƓS3Π%SvT|gEx VfUeG"A\Fx,C >Z 0gfbDwziu46GkRrIƌvcg5^GuoÇ0`CR_ q{۰P7G1Bz'`5]z1&_3gp%.E '!y~ZٗAaB !>#dsSgj*3DB}cc{eh&?Ɩ:p :`6}g W !OS!H,ya&e+gPBMeK˺9 c|5Y6o'E:Z['5=F*Ķ#kYy PYrqqJ`3{%n/@37̾%o-㶴Șb5C:oMŪUղbj`gŪ|xb.VofX-e;Jy>ŪՐo]iv,VLڡTY .sZS kJơ2귺SG ogȉj;]#w!93ީMG.^$ǮHI *NX[jFț]F_u;W(ij:8R d$М œ$9Ho?r84'u?kT8w|zuLP%ͧw}諝F_btpZ8`K K C\*|Q`* dij@ ATMiw*:@[oۅvqHMֻG"QL{v;ItVS =lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0003-MorphingOrgan.xiz000066400000000000000000000071031247673406200250100ustar00rootroot00000000000000 ]]S8}_ޓ ,j!a!=5=/.Lbgcnu-Y&25yjёdkç,*{xχ_OçOΦnFC׽[_ubˇO򥼾 pEW rSryD3`2g n_LnɘtV}g}>G/Ad#ϥavпFvx=nʲz{ỾM⨨Ho*ӏm?VDj0*-*ULS>m.u@){u{WjZuGh<&[&dcOk:g"Ve-uӗc?.Εd+#%4obq5ۗ~>&|*~^ i2xJXou~`H N$D^qXakFΪyYl o/MUk үh% 9UZ:A@l+ ˆÙt,\' ' bҫ㔐DUų&oi1mO,'gf E*\/fRay/o e'v;Uy":?(ߔm*Os7/UO\q1/˳u^/z[:dhӳFϾs]gamw綼xu1z9_%:KHBӜHw04˫^>UFa!u9:܏M:{T 'u7wPa, bZKy+Q[N\܎u4>[e^Jrl0YE-\lyRU|݊C@2<&Qja3pByPL?4lyq w J&cǶWyy`qiJ[MfN=+n1՞#+B97x3ddRٟcuElt_ۛzgoeES[qgGrhζ,ʼf3#/t-Y:fVZx8>kUm{_ntRTjHvDayTcF0&~X.iA7ZR3( `; +m47 dֆ]A'/OZLNhk)-2̡}s9zb=5̡Ȭ=ktb8!ZI h(тRH5gĪ]M*7(ouX *jz_xuX̵뱀WVMscxOU}W!^q33ZUcz]3G=^{/9=f~_z,\0^^exEc?Ibp~V̱WsȾ2|&2|^ezel|9b숞v;:Bbluv9,cG|ַmͱW\W_Zibc$eJpX,xAkǀW,^~cX,.7'N+xasxaqxa8,N8(`=⠀SP񮧀Q>qP@' A8(`6qP&j&%TUs6 40gMs6 ٔZ45Jt%]sN9DלUkN+m+3V/b[ )l-xuݎۂWHYƊ"lۂWEinzFq]Hӂ5@:E:m,ug i5nn f!ms k᱐i,ζc!mmζۂWH[g5W9u b_ZO6B(3Ҟ8B:(; FJ( n! s"g, -XˡR 9""rqkK:enPhg[n (su F8Mx#N|&f 1#`*#1c F cNS0Ƃ80ṷbƄ$،} $s/1["A{/$σ[8$s $dD`{ gg&cl0䓊 ,{Fq'ʹ"rm)O*.2:>b/Q:<^ fH+\>f#e~V8mGKJ TfSRnR{) Yg~q L JR4]qr@)Ԅ9ŋSJJVF3LQgCE\M%\>U˻TKϓ!8i)ۥ۝ܝ]^Kl<$PC*9?KjJ%IAE)zɠ$$* 2 XJUw)=9tʈUKS$II 3eUG<~?%6mʅ!\gzQ:M?`Qj~= N^~WQPf8}"F+]Z/š򚪙^3oʠ^Oο^ z;SƤ) X~M_DnޯաٯXw.s!-V:!Х /ԫREb5BWnfYs/mIދ&K~]:(f9M5KEirZXir'yZMr/4 ++Vx~qUD5T(Ⱦ_SL{4IIoo.7..'π坕<2LIyl:!7C;[~r}~EDm#Ot EmԼXj][wn5Bjޅλռ w9Cƈv9R~doPYaq zvvX| z+w+Fi\,CBx["w>)!Hi%귒3R=I~6a`R([VqTa&__f`*,?NTatv{_:MÛ]M}59f> .E<*ͬ̚pɎ[7۽ Of.naƁ.6 -(/u}t?{lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0004-ThinLead.xiz000066400000000000000000000037551247673406200237400ustar00rootroot00000000000000 \[s8~ϯ62 EP זI_U7`L]?5Gҹ;|z]-Knև1"`|xNn~_nHq&lj);QeNV3 ɑ8t=#5FA{ ٿ<胙. \cl]0@{\)qM&۔ڞtc{t$QYW rEEH)!`P?\!BGh>G/`*OK4btx$[F|np2? i [2 v'wh-p i&hƝw]E $ n}PnSxb,oh|T䯕#Hre4d͠?s8SQ-@0Gf-`E*z, ! 6~ZJ8B覑sE0-`>rdiӧ1;eX>:q=_ aі \YFKt҃RI/$0!LF#'b f6פ-QeeKY+`8 Ͼz⺒pv_Ǯs¸Ed <GyUXHb˨ea!mpgvyY(iuËꭎGױk\qI}'z7 }>F}ݒ/.Z-KY ss#\`} -sk !z[bUt5 %,.h20jb荻?u_MA4$z?ܥ>[U]@c\T7 `]8p52I('Rj)p>Iɵ NlyZ5"nSE05[״B=Ujڛ<$ӻ0jWYbľiEkܝ}Aov|ﻕRN0%snhL+A1$m3ϔͬ&ֈTzg>7ZVb$&q̺ #f(Hn+E71ouN4DmRmD"Ĕ: FSK1 '³ aV%M>+\X=# IEy#E.a|@M(T-Lv;Sy`\eٽ5Jf1QjӠ,SrGqf)Ղ@z":SpiGݽ9򍩮RJ%` :U`%@b0^[T[ /ܰZ*_0V^us{< IGxR:?̩>VfOU*Qm0>+ӭRrզѬZ=D٪9_@dfYl%2 YaCf{n@Yf뎻l hy3yeԀj8Ǚ @f=i>/n+2ˌiZ3F, 9Β_TF)(ϠlRiq0;*Tavq?T=`vXF *wnjP .ھTFoM uޚJ)⚺55uyCnkL7({05Q!1ǔK(L& m߇)qS찧gLQϡ3Hh?%Dlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0005-BrightLead.xiz000066400000000000000000000044341247673406200242510ustar00rootroot00000000000000 ]Ys~ϯ`xĤU3$PCMtݾ/*a 4،-s6K`&;ѱӑ8|V{&aDsx\ ן~ >k_-{G}0GW꣜߇9=k?~Hlc6MpZebYw{5{hsu-}6EqD< mMi=CkкoۃǔYg9(G,*9g+F27ed #sV26`IB"Ѩ/Y4rS3P𡦬$u{}7̄AEK$Q%)#ػjUTa lFVmFh(f(}/MBY;eSx2'> ;ԦeR}PӂLg2 \ʖUR.bߝ"'lZ:)BRଘ9i}KJ{xTNq8|^0II q\i_Ķ{_w-Xr NH8b Ly6D=K<{/ͨO { 2h!vUZOہy \kmGnSQ]kcApxּl:X@̉rRZLEhZ=ஹ0䡳$'c!)Gfh Rk|S,BH:ڽeGXsp.UqF)jV:WzCs)}EL.BECpws©Z,اl 7qsA}{u%ӽK{P{ɭӜRbF&AX/%'z()葋-L5jM cB~+1Q 1}{}%>x=$jfġٌ06 YH~ջ1,/cFM7ԕ4%\K iMZhY3Gp3]g5jGdtbW !0&PFNa%zhLE  L]+Kȥ|Ad<_Gbn3y,CC()8%-8r|pO^ nPQ0$^e)OɄErtoLsDʁCNUMr.W뿪,[SߗYUV8-wQ6.}T<6մ]kؗJ5@݅:Qsd#sƳ#=@(=PƦGKz}zĭ ܊c#y&ƎxdPʻF΍9rJ2Se?}wl$]?ЀFc<6+1(kl[$|9&6. hD_d8F6HRѾqammY`D*}F[#-bX`#檧75a'E#y׿hX,hFҶhjي(kIovk\"SnaaI f=Lc:~d70xӎ=LS0yq"ƫj 5ȟlJiSJjggU=T[mvmI{A(]R 7eG|CnS\U|d n;me tl$N?};nlxg{< ^ϿD__Q8oR+Mv[w mT3F㼍ob #ڎ85b7pg9:3D|'r_@;0N{]M'ؚW1ߴ)vkJ_wWZŕ.tQ΅_}'Tr3llmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0006-GenericLead.xiz000066400000000000000000000042541247673406200244070ustar00rootroot00000000000000 \s8_%&$p ҹދF"Q 2g4_2ѷre:~jc֫jGן^ B쓛v{<'WOGG׿w/פyh)=Ve>,W?`\k &ɓ#qsxC] WkoIo8`-a??&pnjv&D!؇:OQ.>6V _ߵU&r` @+vZm]+Ζ_d' eFKH-ŅVh{K yV-'d b]$-YQsdKȬ^}'$ ( SGKq^,\,@|"⬪$B 1Ҩohbe.@(n b{cϬ,DtyCjL};6K~=^ud^7ږ?S[f{&?ܥ?^4͆̅9^#a Ϣi4|`rid F#sXbCs'}t}BYq2 Uł! ;}%}40PUL^V:e;vd\}GSůLB!- _s `B[j`,X$>;U2G}T-ۻg-8cd$''?GK)INwm7e;ȓPk) ho=I4RUԷ3LLLkңYBz.?%Fkj"Jw@£Fph{wua3IG;%\HSIkRmV %K9 M-Q&^i)嵳B (IӘO (H\c?t1/>h#-vQm?"VH$3sh9%Zy}Zu$%z.)h `cVpBqM6*2,31ޛپknvةGaeYe3Mc"nN[q4D9S͖b@ A#72(U\ypK]3$1ȴ`а)%1a=>ᰫ]o=gwYh܉|Uؘr'2;!:#+20_&B00U*4 ;F&+Tyʴ}[12ɩuU(Ό̇{ՙQufόJ#0R#;ĆdKs[υx7`SؠaLSt7QR-uh#-#ڽc1vȔ=W.UȏGF mgJ{F_i+F Pc̯W7zvvq.r:E*q.㖆 9z.8qr˸z9W%Q9wRݿd:so: [-D+j+ƒN۹C~{'!.7H-`vW&M&/I_&6 Pz+?tҷl2qXf ðf%&!g[ΰ,]%2Bf0,;4 "0i*>-+7n壩 d;l7E܄q!ED} Ł^xzGLlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0007-MorphingSuperSaw.xiz000066400000000000000000000041031247673406200255140ustar00rootroot00000000000000 \[s8~ϯK6,@:}[$j2 Wn0);6ѱttw>I}~[.NW(7Sڞݗwva{m;$ vCDKV:mϑ}RN"}:z'6bCMU7U#yNɠ!SlD]3}(MgBA}TMkҗc~9*-%q載b㈚Abqp|oMm[DeDT;ZKv{o>J"5sU'^YiNL)1kN Jn?}r-hP:O瞍هKݭ#iб~گNr_ȫʩ\^4)}KU{% K6xK!x ǕY;}=uUi+{8<E($DVo Q^`#h`&>w)`Et%,s" `66pXbgÿۺ bcNFV>ֵnj=|썲H:3pݺmYP,!B Nr@όԋ4p/0t:[U8x %9hzڞK(>0B617荻Jr B+]Kp,yUi~B~PV}%A;6ʲn;2S iH#-CX2Oh>hj \A˨Э\QeR'!!-g2O13#%c:(S4y ¥.f7?XHT.Exa"ʂ9BBa}cXjM4rji+h77'묕1v#NUG&f/wyjnlEW Sbnָ*SZF+r2q%2Ž PUH[II9#)'b7J> խsdkȸrIsfi`>,5M!/5WTEF+7RKF5O!.vë;[n[25:鰲70ma׏HzTx.G9*t+CgЊo[zG8uӑwQ9 Y1*ۨGz&G5q?l)/ZnUp͍dNl2a;]Իny az6t׋O_Ys#~[qStbxĈzz8Jx =F~i|^b${Q jp讏~ LzKWe^b ^$߂QO\ջZ_Z7gͶ.&q]L츻DtQ8ι_k z`Klmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0008-BrassyFlute.xiz000066400000000000000000000036351247673406200245140ustar00rootroot00000000000000 [ms8_=Wfth9tE#l5ϖi_klWN:OIZ}vH9tk+FևfF*I%Y:&n=vb+ڄ/5UЍ4Mgao4˜?`v'7BE3rH߫7.cY$fĜQH6'HMͬ%?2ęKQG*0sòX1Y3zu+t Oln0@KXtCZ_պP ApJ) `vh}ۯ na|_(hJ1"oSFT2= ÈȞ 1*LM6Ͽ(VFF +Zck3' ?BqxQΥ-/_F9BW+=U}9߶OwlK떿Jx7!^ Cie)k7'1Š3 x9d(x}]Ȑ7eRRt b(a^F A21G|^q&!UIχKQA{ݗV[ aD"B3}-Rw $`>' LB˗%3RJfB͜m˺ܝ T7 2ApMJQvP'UNEF1#~X.&(i?jQ3eQhML xW}k3vVa!YMM}Z3W3?Z_NrGo^rΚQgtk-v1!ǃ^厺/cF@D_^h{&+Q@;pm3ϕnYMZC~5+<@8GXERHPسVVgȦ9*8Y,wIm R!PViH-#u?a.|Ra+0=0WK!tYRp(|7TWy mFOt #%ˢ #>BF0ZTS( /۰Z97'-~d8 nc>ke`:dL\_r ~ƝnV%}.Ja8tgBrUXDur>q=%_y<)fP෠ "\g~K2Yh1:aQ7M fy6hz̠AG {CM?!yD~RG.h,UgwXk^Vn&%:_%WIl]~DMqJb6?$n]7Ĕ+JcÃ"·uX.Sr>N}rӃF4/K<߳~ӆ_x/:m#iן%*2\t*\^4W^5U`YMsV\4Wz5͗i^oۅvqܛH;]RAJM{ϰR!D1]]55>㢪BVy4)nP=M)nLQ$΅_Gsf&d1lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0009-GenericLead2.xiz000066400000000000000000000043651247673406200244770ustar00rootroot00000000000000 \[w6~ϯHy%&WIh9 틎E.6Wn0!쮟X4͌tty8^#.YOjLjخMq}wUp{ttK{x79{CZ3ݿ90G߻%zk=$yr7a0o5t~ku.M7$G\)qkuJ[wCkw&8aYgQ猬Hh&~KDVƧm͐}LyUB}N;z'6bCMXU!LRe?t""MnCyؾGй'eDѵBDfH~햣`*6+):]UG/.k)m:rK NդHBI zN;7DtqCV#4qv3!-@YYY$;Pez6rL`YѵZ,D:8ZaZVy&o璦[.?f_|׵eTٚIuFٰP5Gs$0[e/9Ջ 4)C/\8u&:]h8h !uUs~. 2g,bNu| >!aྲ]H24עeNΠ%-ĩ+pw0lهBae)8P>h5b-몲yL,t{t/b2;TYI((6 Г뙭`e$,'MyQd+ۀs) _ki#L{hv(M;ӣhBz.߾QK& Tӻݡf5v4gL4Zx8h 4{ yP|]0(^4䘤4_ uYHIY3nVmDJS*["0cQqEz< D]^XG=>o{tftEXHC¤@E& HJ] e0D"I U[Q~Nfk8ɖ} zP(T+NOJgW \AQgrx 5ZЎG GvnL#=0 !o*`NrTghoTDZ0ÞZ(%U)0f̴ȢTIA2؆Ր␭sFw;uJ#yN3~Oƭ1![1u0M5P1ʍVtSeW}Qak3 -|3dqfIvr%eiZ=$)"G!)QyZyq~9]! 3ZJAQ&a{^_QF>,4xŮQVQf~d+2|nߔdI%HD[QjR9tڕxߚ dTQTHWlӅ'_l\#**&`[uyE%jWH$!t_NϚ3mr }i#?lZſʴř*.RstRqJH(G}*g$^MUbUΨ}QiYrU ,AV#rERz "#1%J-˳" 7D,YYEQ mY9sO4 +gETmMl2;0ŋZ_Ѻ]0tTa<ė(+{v)ߏ. 8#ُsXj.A*sȖ\8z9W%&Q9WL][;fzzyhD^>Mzj܃N۹D̔DwB$bk_9Ô0Qo#pt<=oH/GeMQ6NiNEhe0|-5F,SY3NV,3hfWUNfJ,eCiYVS\]zY>!n91 5dGc.mw16ox+]TPd蹧/V-w[Vlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0027-ShortFlute.xiz000066400000000000000000000044301247673406200243430ustar00rootroot00000000000000 \YSH~W~O]`*&Xc%::ߖ4ܲűK*zJzZ=}M7=:{$08Xw:$C O;GOg[[']gw7L೭Qp'nP<4YfG8Nz?]'pyZJf\RD0ʌ凎?)G|(p]{0TŊɷ[;25tC"[J dmarnpNpM/üL%A!fH\[-ܒ_Sc%d{u4hג,}צ )i ֔2]# -%WS0Wy5e^ s[SlkʶmMY6Nj5eoƟT+{>xgnV7ܥ  ĵ_i;K=?uƠA ]knLƀSнb%^- ~t;},z g(Hdj&S!]XlTP!(p-8T4#-To4D `C[;Bn~xC Ngloi_N+'ʼn/NkQN뽡]?P|&p!@OjQ,ǵ"b/XWD6TX?aM3h{N#ٚHwY „94avko1 ZpB7%֟^ mbBՁw㚶TMckm;\hNj./lg}@Ŝ$cbjIٖk($_dd--J4-ϹWg뵘kHF-{uޛi[̕cQ';⽘nv͍Mʃf 5丨&GI879fjƹT3Mq>jpՌq}7x^Xoۅvq (X1./糬s!S-)АpT1-b[<:޷yoh}/"194K1IRJlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0028-PianoBell.xiz000066400000000000000000000033321247673406200241120ustar00rootroot00000000000000 Z[s8~ϯ`yo0C3eEpk[-_GmSѹ|Hؑ(hxݴ޷ :§r귻qf7ڇ]$\ٕ>{4M1ș< 'lÇ'8vpc0pؘod8(!us6!۠$&.,F$nR~,l4Ҟ/Ri@zX\H.T7! F[!/Y$d} sY#p^$rt/nj0TnTt4hX2-CdhiVU~nތ [v̡7fܼl%mnWV. Ԣ?VP%ҾoxuTBBKd&ȴ 7EI"F͂ǔ) ddDn)3`ox,?yHD=J] weBXC"R~:ݢ|:m%V8&Hَ!*ɔ,a;fޣ =A!M|hME1J+2:X5O8XICuߖ|U:CܥvՔN~a=%FU_)GC6_lThI!I TE9]nxE ;Z jx]aX&i]=؇< Uh7x u؃ue\w%èI7T "kT]x /Ĭ>u†"lAFqGRbohʼbڋb1([AdD7fEi~啡0AӥrmqDZhEe`ox)yqn/6E+Uvԇc(ðvħ6"P7:j>I}4)yV.94H Ua/=Og%  Mܐ@AyO;Cb U쉞@rcr;E񉜿R#}/$p 04fcNxOמuUwgClvԵbpwm. ӥ!Jڑ(hxݶ>[$tOà/ӛnHV?>O'WPC#'$M:<[Sᝇ '~'~O'k#o8 6އlݓ~[ݡAXg-lM|h$+UuB6bJeOݣ `K\"ؼk sa2h[ݔnӋn%'ʑ.cBC6_\d@tq3Q@CA~:$tR *Ҹs,Y Dj3|V^ܑUVO3i=Zr47`e[exP +.JUMQRI \aЊiDq?*n-5iA$f0WEkЊyo6zH@Ԗ> l-Vjּv+,^Z.2QN㽗K]iYZfΗ*Y+mgUt8U[R)ݤNŹNr5:θŘ ګ63U!xQ詉Vh$P͸uF_wTfg`2.G&Wkd\Yf`jxp[{^Q&wwiq .o"RjyU{1r vVG y;_Z9$QV A7Y_X"2J8 , ~], H6<欽p9$A.aIin`]yPAeVӮ \B\&DHO @#i4U 3~#=?M$;57p\"j` S /5R `FhTORKĺ3PoxI:S?AyFc)y"apR9IH _t-}kR{5љJ\Rw)ZSO3.7Fm5d}c$H0:57&>dO 34wx:)iM4M4yp4͗G o:^ZCxh|&*+=7U |(翥m(<7?[gm͜Z34o3Tox&fYM̲(&>sa4bKw%lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0030-ScaredPulse.xiz000066400000000000000000000037721247673406200244600ustar00rootroot00000000000000 [r8}W IU)6@-@vE%l4cd/Lد__t78$l O31}}$|zY Bۺ^CLoOއ_:n5i;$ޝȏr}Pu ?"y< k#;+ In{=폆/`yn%?;D ȡ/nLޠ qI*$Vl]zX*^/DȩXY]d`h疊gjJj0Xz !xו΅;}=vUg Ad|'g_HĤ'/r sHbAS/s "_6pX>m^H.i)=)y"X7-{ewR?^6$F"s^"/x(=Izwq2tpbZ ^D 9@#-dbސM9B;zOS9(& Wֵ :ۃA$(7Y4M߱%llo!$\2(R+v[i@MUoeÚvV ;+D\,(X2p@lpvg,m3rG1!(ӂv=2nh>@+%za. B8i*a!{QI.\CIEslB.Aȇ"Rix)ԆՔO4c%[~ka>9f.NEorO% {yjnglEW[10=!*OYV+p9㎒/!LfH^(*Z 8Lq'oi(2Y֘y#Tø<=kn0HGrqǩ[)˩/Ϲ+4B>039l:0(f#b#LF& 5dJ<#p!hJu[_\_:OH0-q +{"evyDZcgMm6ைdhu$M ~ W,i?]ҿgd{+7\%T:'Gݓlj*!$N WY%_Ӑ2˜VDܷaqdKfÊaۗuĪtB6i9߆YbUU.@@5 Td8o-ϽhdFNX@džj #J䢈B'Fu@w=.wO9. d$oiQg9@ d0}F^yg1 5al}9 Y!@o>ѧv<^x0iˆڎ, ،ds;:F&}Md܋|ŕY>JOy^OW®_9%EWO]&4P`\Tt(vY=)VkC,ld@xz5QZķ !+\ ~id{tb*kh$}aFwd߸u &شLT{"aJaCaCt/dI#Ue+- kOa!0R1E3bD -_҄7Gek} vXdOn/jުIMB*Y5T[D4\&tb)ǫl=zQ Jƒ2M]ިNr*- oo2q*?]2ĞGUwEmyt(NE(6K&IlcSVF dP()i&7ك7$6/QCdB. 0 L:gl?mճYZYu9U/K":Md˳3ᒀf$fܓ:1d`R͹ $jd~ow<̂F ,x3T% Q2XzB=qcTS1 u$f>Ƿ{#q YL|ȷ{X3 Hn]7ߞ*1"&mckś8 ƌo62zp{vř@349HEؼe{] XJF %c}rO,Npx `ꞗXLW[Y auOs4uΆ"M#xL4ja 1."(KQ$M7YYqq+tN,rO\v _x\!x7PicV3ɟ(@rڨh;Ţ@lH]Mr(iF2KxL'ͣGUEq4aVm$fF ioixSY@rtjh-Eآ[e^,R[_D횗AMN-*<<<[cmqkӰG?G aۓ]t l!ltv wԹg.wNgBQ_@`C449"UG@A@Q A´yVKKI+Z`*QLYL Kta!n~- >y mH;U'An߄p:1DܓInJHϒmPexfei2cx"3YDU1LT`8wZ>橪)A.BKZZnP( ) ~-_NBKaP"qFN.F@ߠNLŞh,kU:=_ V֢(F|t/dCPOx4x0w[%kZ,2 f,1'e Q`(OLOCHIjͫEJ!V`v|I.23 F*H2Q:^E3z,¦tE)J.sR8`0\xdɇvxx \~2oZfJR<E!<F dm:|MNDe>+ =-nXу(K!ò B|Sȼ/hIb L6 iB-Յ6r$f-ho (i^ڐg OŪRMRj2n`ĉa4r Xf3}iP C'ꖝ|8M.ϘS08$6[f ӛYNƩ;ۢ^y@l((,+\4A%#6fɽ ='9$ӡ$WQrG%Y2$Rނ dzH`M1ݘ\b =H^a;3,`҉$I}[ ;U}r=ck6MXc+<#X^Vp|y:IeaNOt,1V`0.Is-D% t!R6{*Ғs#Td|QsK`~{tGOu>-BMKWG`ڳ&hQg{l8g GFu(b"gqQcQY19/)Kw?]ܩ vn D$}3WT)ZS;[G:Ac}f^@c+T;,ޘ^-Fj jzP@g@ꈯ#P%GZ^5R`PgXr'/( :5L~*49>'iRi>9Ӄi>;i8˃iL3#vW9\:+D+QX]KV ABE,&!wY~u.+?#%lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0037-FatPatch.xiz000066400000000000000000000053001247673406200237340ustar00rootroot00000000000000 \s8_>ff%PK]Y [7R16kI-fV[[ݿ~, Bԭzy3v/iU볳L>jy=`ӈ^}Ər~/?u'g G3Z"P@ch|ߝFCkEnͣKн _hA"7Nz;$1ZdGQXp.׌doND-Cbq0 %QkcLxùB}&fOm;]ߙB勖n4Np 2]>h4[|n?bt.}Vi"d-u6Q-cxv6I kϾoF]PN|+>ɥa  o⣒]6Ά<3L{5Ro&r0>լ/H`BV#+Z$V+dM"_LT@ƈdu8]QEJ|EwQ_|tY\b{a?sWRbo _{EN"Ge*|#8+P R2 -vA93bK!yx%~W:៽COyV0|'ܮNH84xkXXjr2I\FC u<] 9]bsswV:m]-8;|[DYUױnxC]uh~^VӲз6': rBEܹO4 tr(Y0o1f.-68K|&MºK,3Z\,Vy hWyD{wXJQo 27|P\8 /7QB>)03G踰F|uEC" hr3"*_ &2?DP&+v i@MVEʆ6S1.Na2a\e’}/ *.ʊTmɄ4jh7|j F߃'i҄S.昸T,AT+;+QBSÅ3AUi B>BMW3*)IKA7Nhʟl5ӝ; 7IR$2HpTַK=4nu7-aqRh*p]*$z4!J)MqGTx8J Gɫm*pPl2ت(;Ʌ%lj2?ȧ)9E":e|;g`$! hPq*8"!E{yN/v}F7l߉LU*$9i;Iw04]PtqwXa<>+n+C^P Bhc5f؍h WNM?ZMC J'>cXR^*i;^EC" f յKjb$.0>Ow7,W)vZ(+sAVTԁ5qoj؎&~[@fKK%A;􄗴c *,hx=h+݋)o`X?a{*jaJ ,JGJFmԼO+cS<5[ clNӖXm'۝͵J?Ƒ]p-a*'sZZM\swXBRYu=ܨZi`[q9^kCfkl dHEn6 *Ug+i*ȷ>*]Uf] }xg J-ۦr<8WT\%Ssѹ|oaڑ8it?nHRϏ/ѻǫnˇ{ =oF0WGP]ň#G$ ŭQkӠ Ǔt~7\kc4hE8$&Gl҄xRݓ:A|x,"V( 7`%YH33&hKbG ӐDyVO`"5qN- J3!}n. 0mc] *NO3Yрeȑw<`NQܾҐ;1Q$~K*[Ex3JcnCROeS"jFs1OLM *$U 4%a$RJ씾w{}-ayQ)k1uuI d$]PrMeB]dɨWe-FbBa }+yO6J6z}煉5ͧ񭣤 ')Y52uLI(Loĕ:P/ 0{ܫ)L)Y,dcƭ32]ecW7L.R`%!4]GO9eZ{A1)y͢q.F 8D;{:|pwM;vuRMx`lz(2=Ye)3zX~\dZ$MJ\ǺuYӘ th&9u$Sq+-}^U_ WmVF,Zq"f{x|Hr`b+MQ|<e~J⬸=:݂TtG&ʌ} 'oF:Й\m0 峉bs5bv4-΄1Ghߟ !Ot!+  ִHÈ$ Xq!R6; ɥTd{IsJ=h|w&u;k S"N_t4(wURCsMq=6'g C CB? 1 & HCS !;5X7p)\zh_OZPK\#*5 Ï]!+F,תi(3bjw_^ ٬T jej:f2cJAq1C[дϡC{٢TܜSH=e4'|z0`|~0̓i[%4peohpAh\/jxQV"Sx8n~Z8Gl$P)ۘ1iqcVoĬ޶Y.+=[\%lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0039-FatPatchSimpler2.xiz000066400000000000000000000034221247673406200253570ustar00rootroot00000000000000 Zms7_A`p{vǔ p{w:*i;;8VϮ$N.?~֞EWvvUa5~wx}rrf8Z,wsֶq|DDM4ikfswiКkt<[܏VшkgW6>|K9=:"bto2V(7⻎K`Ǖ S}q9q9ccqG<+>0͆  Jq&}n. MS]]U:-Wѝ4.W{k*#P=F.;7,G}]ԇ"!;Vz*TG~6Yi3* f2YY-׹jDJX@מOI.@JK* +$no!<@[`F)` d8YPrGueBZtZE,Բ^1j4pV g]J5yFR1# 2 3%Ȝxm"w| ~qw,$ajͳEJ!ViT0cªay͛60h' m3ú)j*(Oxƹģp^0s NF~6 I;ATJrJJB@֍C[7A֋I ״jWg=3!`NWg$RUjs|zz)d9Õ@I[ZM1bM&-ļR,ލ$x~r]UbR-tU[w#j2mdFpw4сi쪉<+ˢ )m}av[8U, ±^s[^N5qP5͚?4hq{;eXXt4)b5WG"*l9"~+sW 5Pc%#XM-G;|zMVbqZY#P㗦Br!'I逃7TrY` L nkЃ`B jg^h@`s,yqORqWj`IUq[)2U>Xw`2ݹƓ,c鉰lqSj uE;Lm[rAC"Y̤P܀UIGSm#G \}>ڈ6^*uF_wwYq0-hj%ڙX 81'o6~T6K֫-,ܩ ǂ: C ~Kٔ0nVav2H 'aĬ*&<a')vةXx#?1`6PYMF}Y3Vo#/M~>>1MQxH0:5((e: o==Kߧy}5k.A^_sojeK}~MhϏh|YNGS}4/KDD*ZuJo>4z~`BxCo~^v4m"Uammp#m43nm61׷b"ӥKٿin&lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0046-NoisyGuitar.xiz000066400000000000000000000043721247673406200245270ustar00rootroot00000000000000 \[w7~pyO>'I㜦/:bWj@K^u_6vIOqHf43r@}y{'=޷n7t1>~f=ϻg?x8ީ ~oo?-˞}yC?Pqhh0\b%yߺ]kݣ8$t1|e~ m/>MzWir1,WE) KFIHL#D# ъ0 %aQupBDs =:$@%uL@#7{^&O5cօ4L'W4WSK40i5޵32tϰsz`#se"ϰ`z2+Rk=j1n0;ohp{jK[U&q%sFijz[ \&BD AA e@IL֊ ;SG!a|9tm ti4M39D@B:jl[܁h'=h`a%*f=v[ETIH *r9'mlu=>. 0%#a?^%}_:f!FV>Mp0#LYI<!e.P@\`YPF`eCC۪._'⯝CE%=k}?H?:15ou?^ƹtۓYG%Psb#ÀEh^}d\zrQlr#'s!n# \5M,%/ UĂ"pc0qE!buTq})*4eaJB=͡AnA&br(MH4p\J݃Q&q{(|){PEܶoP1N֣8"w~`wWݓt/4b ȝEQ%N 4rQݶOVSǧm54!=2kzwD;P,^cCwI ueM3Ba% ٣4eXD̼-4ըUS?Y'V16r I1 f1ʃp5B~R"8 /J( DW]]2"`fK4.@Zy3zC-Ugߜ/uLɗ:A҄'?^Pe,)SWB ]KU4$$۬Yif7'yd2aXeŠ}X*htkQOJ)R+GSlj*ZR A&gSsIvoGiÒj!RjxOjUdZ4A[h%UDE3[TQ(3/t]C[yAox4Ӆ+n/'mTvZ&(粗d>Z-~,xVr]"a- rJLb:b)8'y eV)`= "KR$֔eXY$Y#nGۊ˧Ιb)kTuBQXIPN3|!Kɶ#dyBf*;N0IX'"It$ %I^1Ax0Ƿ SoO 䏴һȟwO7.9 YAlyelGD9+WWͥr M~鯺Y7o?.)7꤀(W7()WK[cV6Gmџʒe(EujnJQY)X^uSwٛRԫU7^uSJQ~{ʧg.H4(=C}9.m}S'uܦDM4Zy/99IJQg.{VȲ}OкCl+?$ߤH_^Ilri7U>sѨFX\8ׁs=u^s|bO< Y!$/6ꗳC y%›Oʳ?‡`?&waF$XIљz1 󥋍} q{'N4a~rOðnlVaqalV`4ʃ~]C) fhv 6 8(^y|OR 3lR4ஂM^ 9V)$[w 4dYTj̏- @"`b ]+xmu^ ݈cRlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0047-NoisyGuitar2.xiz000066400000000000000000000045351247673406200246130ustar00rootroot00000000000000 \Ys6~pʔ/y&IGFS[reDUN__ mqR>š `{bE1ɻAk? 0{׺t[{|& z{~*YOaDLؗ=L> |_tѢxr՛#, .ѻu"^1 hGpү$l)m[nk{Uڟ0f% 8~J⊑w3>-cB$NtHncBG(K%T%uL] @#7C}ħXu! G7U4-AS)di~x[u޶J4z3p3.\jdBVaTPdd`8_] 8[\Sg6HPe@ ֊ {SG1"HBt(m pq4ȁDªR:jO BXQ5s* *eF`aX' \UsNu=!> %Aq 0]bc_:fBF V!Όt38IE<5KC<|-K(VхZQ{9_U4&*`֟0WmUlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0048-NoisyGuitar3.xiz000066400000000000000000000045501247673406200246120ustar00rootroot00000000000000 \Ys6~pʔ/y&ǨjjK,g` HÉ $q"eQR>š `8xrq]u{aHoahQ`"O`Hs 8! 04S*X4DE+>bu L](({eCd۪O_'⯝cE%=@עr]~ubj63] (??u..:-Q5'6{ GQ5s5W^\-p\tbC h}>hsa*bAR1.?E!bu.Tq}(*4ϲUΨ=36|<:L([ApVXAhfFUt;{SAq 41)sj8tY;a=J! #Rr(F[M d#-%|A@s F( 3ڧ*vtT%IQ/ATujhfΚpVK+3&q&d5ߍGѥ!P<|/3jkQJGOe4E\  y}I[si6Q>"~³F~5+1ef=Z4ƈXD@ qVCTQrUD ˆ(LC CO9#W0|ڵ `&ZZG| iόfM`NSKj,%uP&x%*$$[VVgkٮqX~yp # -c -Ts$&R:עJ)R+Cslj,SmZ MzR*Izϡ(4Mk]vT+ UTG<7D"ӂ9BB+/A"L7EN yi NVf<^&Bdb;WNs~*rZ&sK2vu77Wz1g5gMD_"J:r^X%NieT8OYō㕏i '&θ?8D 7(^ͧ}FJ"yžҠb-ϝ.z:qw)z;Zأ8*9kEW?F~LZ4dAh\*zXDSJo83$aLI_y4qSe3 |f[$cw0`!3K-Ѽ}MO71{z$ierAfOsyR&tZAYEs+iDABƷi6inڅ蓤[1~[X'*ER/T1FU3ꏻ uuNCB!t.S NE$O  Xy69q¼K<9{>%lsaڙ%ׯFyC{/xM9?v۾ʱw_ӆ3;25o-+>!,_O0ˌܿ01ZdhOdvb9F% cHXS?qUUt'x#8Œ!7}) \<'T`ʹ p!ɆF0G4w&:yhp `ereS4+t>pH4{0ZV<=\9W݃C[{#J.} #Gp[%Π`Ld0'{8&AX17}8'.b9Ub BR(|c} >b|v(r/Q+x?Ƨ;[́0q>-B,)!Ϩ<twy4%7mؿά+cB2FeEK< rJsV+8Y{ (Yzhx)$l0ui다X tIjdS. 1ee9:sf0džLxđ WCgn|Pv"7_h'4e Tq(#9[4H_r%=inNfpb[\*XѻoxEP4 ͘,36j\2:ܔF1>0•N pfu 5,(+5SA (UM0-4 {x3̈́kSlyi,ӆy:d${/pпK?_gO)@mvj-cܨxM:Vu7ƛYaW6>7&Ab(eoTt地rJeTtQJ6z2 G{Zf8k:̲,[2Osт" z85zOu8y茇*31-icc lUژKh\Zj0&Dfc\%VY5)A䁠o}鷄 g,. dIT >Ndo JjhwnrY'\~+H[^$/A 1EhE`;mˋlflhdC#H-A?u ^$޼m%J,J܏DK((Djhc+QCM"A(H!im|# F,ˌXfVіU3*LT{ f{T# <,O~p_:$o#:[0\z$e3x%t#:B∎EUzFZ[/CE~Ɩأ4]~%Gi eg[q|{ܡuk;ӒɖĖXM\(_N4O\mM=nm24ׁyz:P"4e-yU2to;Mm_Zpue$RPʙ vv;I͔p@Z֕OedK+i 7(36f5cN^[L}ilrfhvu^>%24i7S'sWdh8y`1'-5C'x^ ]`H!cw`WX =x[猆#s'fhH&tت˽ k /#^55n>v]\o/vzi< CH_lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0050-SynGuitarAcoustic1.xiz000066400000000000000000000034631247673406200257460ustar00rootroot00000000000000 Zr6}WzOd"Y3v2MM4%E;u_0 YLxQIP]^,@J;'bGWE׭1 qb/:s g,s(POhm7GI4txLcOlN. 4Z4Nfh264"0tp&IXz Xjp[`n`6lk+;]%0JS)R徺1ٰẠgobCjlisEbI_ 4qqrmCGNUu'/h2H4W|[y"!wVx"šRF~ƉYi3Q87U,Td]u&$R "OB:7 _esC!^l*`*`7e$^ CC[㰬\POMBF-LPV %[#` 𚴡RK4r wqjE؂[i "P. Ih-VjvWUqC%+7 Sn QNK2MU6n/6/UVJ3)NEEm`pK})i8`|StN٣5\-O;ıX8 ̀BQɈ8ÅVh PLu"wţͱ[AȅU$&kd\Yf`jhp[{^چy*=>2zC m0ӸQrpMNੁbܕ-蟆XkGwn253,p$j-JBĀd&>7vQ\c6sH<&Dydi A=L:iEU/t&m\|E31bn8)΁UD_SL i9z٥.Ǥѵ-C~8̣M֫ (*KN); 8%"dXPm35yY!Ր "'xq!5#)\t8I3J#H3A ǀݭ I$$=\{!4H2 D Cڙ0DKLBlLXo,t}*a`Y>-n 7(K:ƴ|Q]M9{ f}X&5 tpBv&AxDU(ӓ W濐}ɿKi&JKϱnnݤ"/7T k,Q~Vې4M55<5_ <4` W apUD`V;+W"X]кYR@pB?Ģϗ K͜Zl|&fYM̪mU61ַb\ΥB_&lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0051-SynGuitarAcoustic2.xiz000066400000000000000000000035001247673406200257400ustar00rootroot00000000000000 ZmS6ί~ L!%SE _R[]~#:OZv}v%qt{oXxQxݲޟYD>]w~'۰ﺳt1K9pt*}%AkKxa1r$O)_e#8xphx<`<χ1YDҀ]&dIBOat˒V_3L=B[(I!ԚnHqq$db Ӏ|d–KH+,M,][ly8rZ;i8ͧh^F~#P>\Aow' 2%p8߮YmknKem'fe! "Dq!nX+pn{u$$RB "$HBBlP)}:( ]# %Xtr~XޠNL %TYe,3=柴LFSFZr2b,E1+&ޒ =7?rS(V=A:bZ)VÉ`O]&k40h' o/ZtkU`HtH(ddE%&#Ƴᝂ(Ч~ZP@2 EL 7­-Q /YcŅK1M3N;f=[nq #ɊWn]Cò|=<+(NHVZe3b0YCgT~IXXpc+ݕV܀)H&,RDbu&+o)z2qdʼnq54}iL"{}b6=qǩc`W`Fxҗ:lzDC,a6̏o l.)r"PIj,m\{YgE&ʸj$P5xQM8nߍ'@CB$7/p9e%D Uꉦc2';}$'p\3+5= ݠ"&ƴ}k2-oL]>Ntfwqyn#2rv 7 1'Ff0jU(Yne>e @Y2(p `^XPnS=ylYzjHF!.i(s"CmFIgq!a:$)@%MTD%Iw?F$v$T&_U&ٹhE$p4WnJBT(i1`qSe]Q;IEE_"}8ܠQas¶1Kk]>Okq=ľ,B77 eLKZJ~С=EqsA3\@2ƁhV $5a: c|k2=ɽ`vO57}ɫgJ5jդ 2/!n7T"k7<[B#x]JKC\\\xqd??w`/w0?c!huD~>Ūj<Ҹo'4ρA,~b~ɡhbƷmbmbo<޶yy.f" &lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0052-SynGuitarAcoustic3.xiz000066400000000000000000000064021247673406200257460ustar00rootroot00000000000000 ]]s۸}ϯp@}XI:򬦶䵕N-6w%R)'$΍) sͻ~߬O]ǎ9 UΗQO}owx{Qi#ޑՎ|FwuOs/Yy'U=^tr?_,n&bNz;.' >v'(}tISEzOOsJOU_'Szr3.7nB?tQT`H-galw0J~D)F% a>XjT@&]Jc(=j/]4Q]+ꨲrӧNo7_e12ql(:>_57Y%J 6ؕzhK0oq &uM-ŇTl9: nFHHyw.ҌliDъ3xAcewiDIwӸւ,MEdqLw?Xr5m3{u1O`č^֡/zEO+W_q%%rMnٹ{}]N5h iE82ǘ^~kOi]<_{iSDӡ(VYLj4mMj TZ؊h8"~P%qdWWV>Ց. )9Gug†RaţQr7;qVơT6ҍҭ*ZnIZ 2&[T p l4֓ _,n^-W_U-Z{ zB륚C}&G2PNC]p&[l%')^έl]57nV@ymNUs5y ePWmqepHDc|oD&'ku V F7+^8t[Y\"Ʃc:}F ?-ed1LoX:=j `ǿ*u[Q4I%)܋mFJ[);>EQ[1ػ #/ZZY|[ k ׋|DES`ղ%PG@{CCCCώrr ,$,%,%,(%,8Ed V Z ^=} ^9r,x ^aթ-;W"^͈W̫|CclsLcCⰀW1fA! xbddg+ xUDCz8lj9zW|b^ GⰈW#^1sv;ఀW}f7 $sG"il>7%iڙߙ h\^ύ3990ÍB6Zh\6Dj=0s~ ,X0b >iĞ``0| | a<؆aP&/y(s2s%jZ|n>#56/ 9 $HgM6F+;HqeA>:Hmi W-4}N}tms4}N@t%S ^g4}n zaJ= Kͭz^g:ޫb= F7Y0X0R\Y0X0b F+ Fz F+ F+> v^|94}v@>E6i]5̂ʁe{nsF1сա\3pqFwD|v-H'qRHNP`4}fsIi|/òClbq;ٗ/J '6}(Ma'gz梪A@ *HP}V^N/_&WIL$Hˏ}]}wUɸ1'GQ!)T^V~ϊFϖ_>R=kJ-%.E~ x *L]zRΑGC-7ZriXkVJYt%42-UH"tVuK؟RԳ4'K|}" eByE uRŊXBD3VuPOP,S2ryZʫ{L\_sb//kegsWmtʇԉ^Mep6ӥ&o!{jΘEK҉ě(HVdLQ+gZPά:VqRƽL=QT%?/WSڼ;Q\FdS)?Htt#A:Q ݫ@^-|xf*W:mD_q\Ik'iOv#!I}œzWՓAn:Փ46?cThPFKа`Oiyym#5{z+9M{ZY674m[j 1T2ztyeoS׹iN1]:O7YnwX4؋h2٦<δ:ΰ7MD ?(b?Sd\rhh@V>ZQpExD b oySIDK'Puǖ[lRƪl8f3l ""O4ndCmO-&XJƞn96ڧyb7n `&OwK~D"\ x+eKf4ԺiFJ-3sd\^hAUhv|X(p'QubAy the4M 3Q[Rtc77F7G٩VƎPI\5iEl~:t%b#S4*̫ u&WL.˝bVu{5pnp/YcOŭϜuNh% eQFw6tC ^1a ;$ Dlup=3 * ;/Ļ(TC$,.b;*QĄ a| A dF3WF B8ĪULj~'E N i;MY- ń-(F:hJUF QSd8 w;wN66S}QU ƽ~V~aQsUa2%w}W#'gƈJ MeѠ:q[Nz&j*r35YA+K3J>5\z+\)iîU~%[ZVHTqF=+liU5:5V}g6u5}CK6aJj<&/tyr/TWjSWWE0=^X 7l2X!ͩ@Rݪp<"-y4.ĵ4Uqp ("~b-ѯ_73]5zF5;kfѢ,shB+Z5 ykXQǣU xYSqhDnz"%d9oˢp͡յ07x] ׵0/YwE2vVK,ǃF4nK~_c)ݫSvUP͍eҗ͹ ͹ ,ij*PBU|fٽS_hx04. DHdhA͢SaC~;θ`ku`ύk[qҙ^wh|Sܡ}Oq{({SE{CQ OǿJDlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0055-DevilsFiddle2.xiz000066400000000000000000000042461247673406200246720ustar00rootroot00000000000000 \[s8~ϯނIsIaL F"Qklׯ/dtٮژs9d||ۧKunkF8kQ4龻};9=|yrZ5?Y8w'7Qu=ƵƟP'~r"a=`ħC3KG5ƿ7G֤7CS׵O<'V_9 }ba;dOVguy语q=F~gcf 9~EsjQ~ȸX3р} x8A(1fAƒx3B}NPucˊ5tITcuUIx2zw6e""KdImK-&͛zLIcS<2ӝG kw7BZL n|^$0mZp$p(R&KIzNZF䣀 qqiW6yk@uiTwy 'WāT\́P[6L>)q&r`7{KV7yjҵY0k`F 82 ]Kb& V/\d`Ht亄oRrElپ`o:Dv,wGϞ.ĉU|< ;ظHz %.VPł!*;+>,+Fb'B :e;ĔR:Eѥ(.Ed"CwK P(2A(ZsøCzN"X?`=Ỷ(-z&ȳg.-'RFYl,t!0EQa[,.:/:?9T\` "u϶i-IhU`$5ꌇ^^1!N鮺?ӿyՄ^e%jȒRVY"^ҩ0BƘ`рS(9SGcj['r}vR1|՚ɦ."&b (6RYL<]-}ث {Z5s\LYfоܞZP&epWhc7tk"6T\4۰3@bd2a2at K1J594KEWņJ1!@XAv>P@vFb7ą.uĪ5UŒj~'EBgv2-Q# [xP0Z*URoMFiSNAOQ8G+FOUX|)h@|O=M j lQsUa.E\Q"P'G82DTjєW'~KID\I]"e5:0w4T.`[YK]cmiF@A|?+liUPJK`a5ʈͮk4-ǻGpUGhIgUAZ%;_v׺s' b ⢂. ;u1׻RQ0VKs4,4TG7KPKˁ~44PZIS7\#iEiq>|P vU@ZAU@񬀴 H ]jUPZz0n`kD.Ai*\,6|Fm;PZ#oE ]AS:@Gb ms0lj]9M(ُ /))pۉxj:QVx:QFDYeOU@Xu,7"Lfg5e3{苽F_0t˓ %/rX_\a(Eʡ6ɼMC2nYNe\2\sW/D|f˛o,%ox84.#ݏnt$\@yȿЋth=%x_dBg|"E\{qqe-:ZED58FWn0Nlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0085-PanFluteSawPad.xiz000066400000000000000000000045711247673406200250740ustar00rootroot00000000000000 \[s8~ϯCe&i 0e6@v_4-ج/i~嫤#`-)>:t.:;?,m׹Nk1]vnje:߯N۲i 5|;Y/GIp̣Cxd=5ʿ?ƃ?_+졩.$7vu9 }bEH:nNib]tIw0K, Zږ1# ; KlpI6fpeIDTSUǖسk 5a]'?|$CLU$H!|HWtuE=ebu я:ZE"Zl ǢrR9;8i qt+h&0YJ^< (>q,"͋* 頇GɦxT=_f=O;Z|vԨI`D+8TrshIdvBUsDF`,n'$X&$-!αtDv,wGOq%}a3~ލS9M#\/_ L#PEX~-I).u]3F@5kl׬7kB`dME‚ X].aS"D) WSH0*6V ͔P xPdF39$.T(k~c9F %TnUDZ4=&lU`SȚ1e-ļ$|Cm! =ۨF ^3~QTyƵzʰ9AiƑȵ*7^!z;G5PG{_!0N S .7A |Nu"]A1y0fK.gfg4}d6Jⴿh2K@)o;T+AIE5vHuh{mpXD6T$%{#߂QX:'VIQ8TPB* 1\LaC48-gVe~M-?i e8FH:DvVal݈;Jf`ǢwjRQITUv|B1Y2!p#T\\D5y0<޵'#fm(aҨ]nN|ɬǖ bLF'?BU!+p8NӼj^HG 8ɪ,p  _w')VQ$Pپ*;]#Wq6Bߺoj}EQSݶM|Wy$DI9m;Λdq.zR fZ\Feq.8Qr/KQ9W{L`g;6g؟3DH;q^vp] pZOuޫ9J}tWXVvc8.Vv]P(Pd| 'v[cmQE9-OEow~-94:t07W\O(KL86nm7#6Co6?hyn5n?-+āS;@QY}؛d ZS"xBuR)Gu| BDkx=W ł '% HppA}QN)`i'ƣ6[MEwL# G?e΀?eHf/=㼫NZKܾq[GUdo^Ĝg­y@K~1 ZfK{ 3 c]:s9e>I O  $[6\1֞sju*YOU2-\bkBsW\;hYG܌ ܔg적_zou5<9{RPd4ez&Q{wwh}4j,b+ ^JnptWυ-.S׋-1rAp놸MZJ?b [US2N% Q RQwͮp C ȗ" }ߏ&d!%l|ўn1ISV'4`rk8YxMP=Njt.e^Db=HTDwD~y{δjտ*-KI{Թ`9; 8?L:^^v-8Hxu7+7݅J_]ʣ^qj:w1uP$ +%G(e`?^U8GLº#pL_֝:\:RF;M{c We)BW,E!Cߖ Nu;+ ªMY PYppzjY2nNE" Jz={szR9٘TgK%I9N N"xgѭYklNj8}^uOeϹ^\(YWڹnFeϮYk]uSӽ<:k+z%b,5Oǣ趤[ƼY]u`@ aJEeQQ\ЇY N.5iiuj̹h\DTS~\?+P"k[afv]Y1N^8B(d~*Z#C 1u"%o}u,c8M^9N|'? V U<1URwE.Vd멽!^&CZulݷlz>+55VF/d*[2PֶMQV 0r!t?x&>0׉k!y8y/XPZZ.T.Siт0L>Mݔ&)JqX])Ul}Mƣm|NZ+`+bj3ɷEwEmB3Ւ\X&z'?(^t>V'ṏh:/2fίĹV9r!!'l 0HL=_`HF0.hNHIg$Ӌ܆L:cVXCQd/[E&womyt+=1}KoxwGWx^AM9{UqB%75&k& ,Inf&Po&A5|70jxC7_ZCk_u#|}"=Y\.`,%RFeĔ/` ҅r4~lTl*&QULhP*ȕ61)lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0087-ChoirPatch.xiz000066400000000000000000000046641247673406200243070ustar00rootroot00000000000000 ]s:="{KLfa2rF`|kli~mْ$ i<5K=۷Ģ O-IOͻoGGv=}94Kzy?*[ӿ/(H4MVxHG{-?݌'wp<mhDat>sH3^D>ඊt@`6L jК~#kcuSg^'&Q͘ ;b  ~zIb0 (!,eH Zht$5hg$)*̧uEa@ʒ $`@I0n&?϶eIpzb!bF VgXs_=Wh\`┇vHL."! 0:-AhfFɊ3ǹx":em#B)bs8 loTrMcٽ±R‰HES Rm)K.c꣜jpVrڧ*ihPwjHrŝ; ^cGwVp:&5LǣP\r̡d?ëA㊺) ~L/^JG$Z8y0U^I ̢t$WqpO ;c瓫5gUkN>1t8&Cm9Wڢ J\4F~"k7z5*v 7ovտڄ_YTS2,(Ztx%p-:()Kkn8ܨ2WvNޟ܍GëlQ=o]W:ջOF.e =5nmnoڪ]ߋ*nh &[5‘[uV7h\O1dl).ܾA?T)4[z% a~ɦj:fZsIPIS.s&"Ìiuӽ?}vw/n8AJ;ڧU0:i4i3׳.<*o(KJ'cxyUhQۜ㉒(\,y+S? /N s0RXURjK9C%F s҈M6)ߪdĕ4FCh寨sn6 qpVl/~222hou?BC %92jr(w{xDo\f|&xٙlD'%rexJrP+)vsBs>`7WZ)Ãmuir/8QNc%LhQ{0v ^٦4b|ɱE?m[}ĥiiImc:vm#ױbe?`Kά^+b–blt-lo^U׵mQka-z;t_ת5w]Bg_ ;*=5]Y͛ Ǘ!ӶeO_9|d֌r[3Mq(75d׌r _3M(_4+6{1e&X _˙rv輜!:["rw f٢C[[i*K +*HADL3\}~\8(2,{P^Fe I H#Z ,)%2͜,uEVM=Cvp,Z>2JJ+6%=.ص>mTI{u()x^NC%-1ҠS VRc+z%]6%1 }u1yx-GbaKElmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0088-InfraSoundPad.xiz000066400000000000000000000044721247673406200247560ustar00rootroot00000000000000 \S8 ΖBavesвm9cf7MzO-;i.{ Ȋ"ɲO {weZ.~Ωu3Yɒyr  Gk61CxBG`ɼlPSr4\EeJKX7U% ?ր?#"S4>6nbK\zrYcY2ȟH8>*25H=&M&s 2g2w-9$bzok\E" YH+v9୩<B^wqA&wʜ9{Ufj0(+׆IŽВ:x[Np'ҊٮakR.Cǘsy:J I-!+Fl[e:p {%p_W31aΊ,]+Y H4X+j#י&33IٴLz @rOI{b႔N\o,dAAu'RgbKnFP2Iƥ|qf.B`1!m,%HBY ^2@(SMq2G.>`7  6EDRbЀ=^qB8OrrL(VagZė5baܗi|sM(.6D.Mg۠L gupHtGo:5OF\,| 7ԥ:ȉoC4y^I%@RW4*8F+ޣA7#B`܂m)6#4ch[iŷ:{J$&ɦDB̊vҖѲ s:sJi_Y)';|9eBOS)_ڣSC5LYq!n S 0evPÔ 8P)qWƽŔ`2;kѳFw0eyx%tuSv&_~bjqQ7k4blʐ 6J=~NJٓtҼ:bځ rt$Ю's-@ۀL=Q|&V;B'jR;B  Gi!.:ׂFXSq\S{;b4PW,D-ieDułƣX W,uɂ% ϬcQw44Vjo꟒򫜦$r4t)m 7Jm$ѲŤIG9<unԻ+yc3ل557>Af$5檓_Q]IʼnWZ@_nxV!D n z5n |J/M>xo`G)3{5i_DP,rʡy/"qgO!(-[76w6 t:%٦;; yjqrSM*>8W9 ƹAQ5Uq>p,x8= ~mp1Mg:Kw1[,%>, Fw$tAu0wt0< w6/"E biɹr_FmH8eIJw)Ad"™ePI11vCf=e[xix=>E  )}Cp-Ex{4K pېܖ0ۈ'fEgj!nXLThps)!1^HSeLRQZ!.WR.5$ZK: }:Y2͖{JnXg4/>yHB?/ı-ٺVpq'J-BFxtpt*[ juXUBʀw(Bl€$Bhj-EJ)Vujª@M,dkGSha2PXWv)8U#]!RqȂvt~Ɓ":VYP?P%n`wYA*+\Nj"b Iج2z|6rKGc7B| 'f8s??ۧkU@D?j"X}YP|²XP]߹Sϣ8 ~zl'%&؈DGHP/ A#N+4bt vFV "ElGf]m &  8Q[Sf&͜:( Y E ͳ6#`ks};zw_^;z jsdDBi..5GZ5R\Hg>]YSypOacIQ]s*O(U2ͧ|v0|q0͗?櫃io`V.%" 筀.M"~ G̃< lww; 7Iz0Lnsfς~% 4%q9^1 [d"q $ս61We`ɢTbP|mr=RsSHtrw=M2X2]ْzh[?`:9 &Ε>{"i>1ŭS+/?Џk/>"6,Z?tԉY¢VAR5y]BzVK'f22KXlɸ}p:nAf \1WP]0&޲HK^+;d1 =.~6ubޱ*W6^]#FF Ki9IRa@QBn BbRr'-DK!֐BS>?iu3WM THWEhidKY6$ uS1nHDM3Y6V=ĊS"Qro"B-D BHW GXZp_0\ć#魏];@`wJ" *biN>:4aaT.+cp)G<<(u |cD}*UdˢS,KNTS >KK惋;[Xݷ7M|v-qpbX+,݌Vqm9IgE &/{9p㽔+NɱS^͛ KQ+E9ãx;'2<)eh佘!(D $ҬпRDMO'h7el#?0qnngVU' }fz e4$RW97 #7jEqFj.]dĺB@rSB?ܬ6sL\iUnAP e*ܥџIԊdGaԣdh4II^tc/Y4'<;5_(凐l3lߎe$8מb?@E5,A8AA84ujjvxP+|ӢJR,,͊ݜ',d~Y[P|C R2lg ,L["݃8ueZjvz{yCGR [2 %eDͨP-#7㋻t#һ<s\kKµvYd\h }[CIdhh 7. ~UgS[Vu\ݰc"AVWl6*_duzAVx6jv Jw={ǕMT W5ŏYDe9_l|Cdb7ȪvIAV+DdUdU7R]-iU% <{WK=*.owU߮"]oqNΆ avz7,ݠ>_ͮbΛqcQdqc81z{|`; 3<\& ݹ;?_;{"|j}%Di\^ΧQQɉO/1ˊظ31Wm=ⓜ'\Ҽj~l톎onm4BMv;4m4x6zmv` cS o _H|J(5vUjk+]~g[߹U8DWֵUflۭ7l݊PVa5om =_UcT '0~Ybx\,nђlg|W:~Ю?UyS\{KiͶuKvNQlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0091-FatPad.xiz000066400000000000000000000070251247673406200234070ustar00rootroot00000000000000 ]]s۸}ϯp@}XI:򬦱䵕N-67RI$εE%>q7'Q%~p}7obzrpZ.v%އ7̟n* 7Oӟg^{ ۯ[Ttv9/kܻ(Zߺ{ُ[m*m>d1jm&X.EMbpH/5H 7wnn[1ٸTZ4@UƤRzX_ZvRj) iYl!G>0"}Eå\{wOfl[ޝ';bhz2n}PJO~N9Ƈt1M{ZZ㵉V ^,-5,XouRtwAbTA'J ?~0 ]8jb?\I@W"Z/Bk~`;d{aɭW34/I;?}C/{煫o*y,*2.ڄ㛫lz^/&wkP[Pd^wfN:wew%^Z٢yE+/욅uUmS~+=?1rj-4 MWLKP5HwIG5p^L?iv( {x<2]L@JǽdnjQ nsKȬȬ[Ԅ = AyO?z[Z\-U 5,ðKV*k~xKqNzq{jV!\Ȏ8*z7-[,Jmo V+jܗ!^*oe`u[y$ dfe,fZ&J2(0C[E'k.g40!2)Bե`H3AK#Lv΍7l<˧U[LG<#RSo*BQc԰(hw:IWʀ8 pI}An;,P''\ϧ^JSpP?o^45L5dMfcfմ{if `-0VϏ7 mVGǛ|R''El?X,X[b[-@k `\W-dD{W-E!WኳEljv[ڂj;&u!3Elz"\qW uz\W=WW-U 4zY$e=./dL2C 3FKkV- C+^q(b+}_1/q}|xp̅>=5sfn W\s puΌ2j.hL]ڎ\\l F\3hZ%: :hcD[6x%]B0!;_5㻍&)Et3{ċ. $S􌻍y c$JpE=mszN ]L0"i5F.7J)H,wIP NCO!1:w3CfnA>wz(&9@ $$qI* A>oD|1 92:>(s[#s/hqEDPgug|ii96x1m~*x:Pnl)1defNۄ}4}.tOL"2Yc314}aH˜@M5n0-#Mqk85FƑYסs5}!5F璬qHӧKÐ#q-* /ܳƈX&O9ϾA>![=q 0i#2i$wቁ4}]^޾$3eL Eܬ>o#MT:fM x5F-|i2a>o Vm#2vZ&gKazME6yRI 2e^06)l+L;<]|hMZ)TQi)z0ēARFR Gგ,X( CZ*Yiw*b~l쟓OӨY*O|oXIĔ <,fCQ)(_;<3juSR`UcʌrXzWzF [ڎݚ\jϷu5kM]-t9Ϧ13iI: ш.5_JR'Z4̻ĭeQ~>9F,$&-RY(i=yK „<N3+?h.o&~.ز cQq*r=Y>,n.#oGQU裖S9DhԦH}Zh"M9)4p"f~dt$R;/!~_2dD|o1}ܶ%ͣt6 1& kp%Csњ1Ԥ$$J%^7y˯aj@ /=5*8z 46 i&_0j2ɑKY-4ʸʑ~ 9En |&>00.FzdTEШH)]]mKRF=$% -^Ws.\=}ak5לKp9?:}͹<|se5?7 X??nCwV[BDE]'ER2bo-4"?s3}kVI5kuevTsһa$=- &Ejq&?Z3T3A^j'^Y,qXJuf!K;iNh>qKq:5|"3=oTpl;-~Wb;@ՙ4ʃ:30#<Ο:xaԘ?y 8[k?_30<+%:3@EW/]kzo~Цzs)mI!5~ qܯ*]TC2T~Mø.O:tilmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0092-VibratingPad.xiz000066400000000000000000000045631247673406200246270ustar00rootroot00000000000000 \[w8~ϯ!sN9 g/:[Y_h_UH2@KpV`k>k=4q٩l+'xAO,Cxҧ[Rڪ8樍f=nG mو> q32тxv G+Ad:%& ,PHjtjز[IRUyxkǩ0?tTEҽ$Qy[M·tMwm/P V ol5K61G7hZp$PM$KG䌺vԶ*HɌӽh'0JV`VrP8 \N[SeyElsQ)Uzd=>tO-A.5*fR5h[Nq -iIfi+DR.B|AT`y^67D#$d%d^]6˝;ѳ ~]\ζǶSⳅgfUG$~vr8nz7xEI,>|0`fCI@S)s"5`&cj/!~DDk_Hx-P5-{NH*Jԡ-Q1G6=  /IgS)5xArGki`Efhh: PBYOt?Ϻ0"A06n.|!T䵸P*RYC4<CA0牷(tQK!?(%n zVk;U'th0@,$((&ȳݥáCJY#TEZS6Og>H/1]{]=eNIBsun-N7rhǀHaSְ={Ev,|tۥsBX ۧo' 6I 53 I:2qB+QC'R/퉇%11ަC_y*ʌ+k\ߴYs&Eqd:_G3YE$D.B{F(@8M'(mzp?>:)#`/? N#PE`,I)ΰu݀g"6N%-VnX#ր*:ɚs f / _\ôE.TR A4TqA5I0*V ̈́P zPdF3 9$.T(k~csKn=U@BWi|6BM#\ L9Vl$7wG5R:/y0Tη*T3ϸ]BW6'0-82\`+T2HQ{&h{D"dF0Ր_By D`.XCW irvF'ڨNf^k@j.N6fCITUc` /ءmz-0ʀ$~/a$^#[0 kCP78B6 J(Q%`5&+IH0mHcx;xiy_򓶾_cI(^nCtmgIEF%7;=v(wc٠VTUPMnJpunUX360.Ѩ*^nNY-&#Ř)0 M1xdeI H3&Xe=&?> j\!d!PL%sxdu$#gE%%MuE&OxgRY*2Ȃ_yI*w||ppᴼD5!AW1{{(҈ >Q :Rя:IKZt, ڪ]^#~ήc!ݡ/upM>j >n| o4IWBUԐK\i4:d@ܼ, ~QH*]#Wq7Z~śF_i~"6A"/؇eO>H>I9m;Λdq.zϥF,ǹʖ\Fq.8_0roƙv m ?;4g-~ |݉{t肋u&Dm=Ǥd:OGkaO1Þbl={e{%?WVPlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0097-AnalogBass.xiz000066400000000000000000000046641247673406200242760ustar00rootroot00000000000000 ]S8NCvr$f.^4'G%$BOZKo%sq>} Ay%;ww޸N?^]ww~ڎsOz98Ÿv࣌ʵ{#6qt<ƻC;.vqs"( sFђLÍy$@FA<'^T*| iDSb _eID>SPuǎ$6Ce;ʠ?萩K4td[]{۟' % .iArs.u O:[%*l ǡzRÑ9{:L'*D"Lq`u~' `{u %$"_XTƂLlw:`ES"jdi_]_Ƿ|gtRNOGp"=oC )g#/EF!3zu +lI#3`{9#a?^b}v/]d!Z!Zn2/3 qai`Ǘ4Tziv28( 3C^| eO,8tq2VG|o[@%mDu_H:5oju^nZ- 9#P-Z܋Qz6]se֋狙:*q2%9dz_mߋh|s(bAR8u. DǍ:qiײR'Ut=+y|%"zAXBY 6 Zёuŵ5cr+?@7 ׿9p>rþ((6ȝ¡0$+ wBM,ዢ?kih#LiOhУ5Rs^ ꁼ娧ScFkRw\YΘę| &;Qf8h.4JluؿVN 12ܐ"'/Ii 2sHY3dRC3OI>c%eLHҴG ǡ6Ģ J {6Jp!?])!%WQ-J!e&|pRDΨ>|BNiC%C? -EÛI=6)LϘ+KT i^ eR t3,&ij|&glxfŖ'Ys2aA~{,a.D*UP-Q&)M8QP)@(Bvܗj8_$ōBku^ȩ>iqf/ 43׸]ʠ6ff0-x*R[F+24䊒X_Ӛ"8 =R4Tʶ㛺 "f%1'}RreLiʨLٴ-ոr7D.p9T*4Ta=ʙ:q}en>6*_(֠HľH]@W Oo\B"4HkЈU1kz-Kd8K2ͯ϶JQL fh$dڇn?9jhF4"عQwmk V_{gGpی,C-myv ag`K^ \Ŷq1@3.վE8ͰΦ o> eh58)Fԥa>˕kS^kÕVV2<=(Ze~0^_*L\,WV~7Oy.3d٨zR`; k0:͞{=f9rX"4gx͒UƓX;+L?T*Zz5wL}>W\dI9W\ԫq>0q>}1 gB妡rzh=&ҫƒn׽'w`(SHG~zCT\ {tU E!ОZu \֡ 23|-QX,S)K˵2i:6 b2oid4,UU:m%;7/G+3%Zmnz]*Mգ!{..mtť..=ĶtQC&?jblmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0098-DoublePadBass.xiz000066400000000000000000000044041247673406200247250ustar00rootroot00000000000000 \mS"9tWu.h*Q^% ;p3]_k^' +It'Ow>~GW &xջQgbo엫]gl{;ۘ⋽3Qoh'>=Np?^Gnw{5{hnsr^m]KP:nO$@&mkкiڃa-S4ܱhXhEW"y$@ [ 2 áPI >QOqm&{ *7Zw7()F2Ů^\%JȢ.cyP&6AE^cT:'~2ޯ}b;7Ns].H1d6ПxzUoVnz6x^DNԌMűϫ1%Tj,NUXxx?Vp"!P6vSDlOLˉ0&Fq O \F/H vSB6E ſmo[e A^̯k@^]ֵu3ÒY~zZ|N(+1wcimG9wnV× 4zt~{Ϊ" MSsΠݻ/;p:K$d"h҈,؄F#TNu'> KQCaTD"4xQfLrdd%L8%D z&z=\IefT"۸VpBe<":U*I{ ʉUjehΒ߲tx$:R%ʖ"|-|NV03Kc#38bԔb.slumsS# YVr8u:TK 5p-7 JU켿QvDE{J-tٚӭi0} v:% UooZ[+QvӾױ9I/ҿpEPZJ<_T/gǗwNCZ!gΚ0״K3B}3<]~Vo(]הrƙ}ocK0=7qi7IT,ͣuCNv+ޜfznB.ͼgz3I5 N(7^Ce3lð)hg08ao35 N0RDcC/4LkȰ 4 ѡa3nC{>Ǟ5]x |xo M&TT}M*fi^c v!&D2D>e+4MS%E{Elmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0099-SharpBass1.xiz000066400000000000000000000104261247673406200242260ustar00rootroot00000000000000 ][s~9Dɶ$5ڒk˝/Zm6_H@SX[,G~\40upY0wӋ7>?o;SޛGB~9u9G'w:]> 4Fo5: /j,nԈl>7`HHB)Gpj<8qo%bA㗕[AK&k1pQ2x@`uN sJe{4^5VxwXda"x:^y,ױb) ov_i6wp܎is4۔n׍wp~n~O2 M0Mks=\OHg}v̋_lz$SZmKokϞlX?jgyŞԭ b%2x&Z2:v֚ |of?EcW^N&B׭b l/Bg8!Qx~IwՃժCʊ7'NK7!7krꔃn ئ_CS}2sb1뵥u'vDpi2yڥWժ4B7 |ǟP40 דx rVEkn]x {=cv=o ro,,,,,̘m,߽mAX6a`1A 9p AXa`:u8|A|2$svA a'pv 섃0pSN9; 씃S 1>j?NQDFL1QQ((fa30EŌ"b 쌃.a]F{wlw9r AX.a/}z8q AX0b,a=b`n9sns B AX>aV1,}fV3A qsfXX%iY,~R6 k'eI(ֲ{[Fџ: (ֲPk$7,L5ɍ,N9<:V<0a `u8e>#dcXCpcXkM(\Z58ZzcXc cX9ZTs<#dcXCưF,` gX34|p)a7z`7yw- 31Cn|Ą!1#6vУ} -a430a433bc Qץif a&icZ20R2hHHf a$30syif°~Z2aXT?-00Ow0OJƢif°~Z2aXT?-0,aXT?)s̈f %sEӒ9âiaQḏO3siɘOYXT?-caQd)yAOva>}Z2aXT?-y;%K_'í󪡩׾ϵHiʷvdI"Oƥh4MbfP!rg>w"陑@#])[ٮ&tOY>%U*uoh/ S4 Hf3uxTŨ}b#"Y?˼fJS\Er#%_>=z},J ۭuDFK"x#k\m:gk˹LUMfsuݓLoFn[nZ_t';Xi|+^g#2qCF:x`<܈7`+ߩodK>X Ci#.]x62~f|y[uwi|y4v|qz YFZzwnZ_ws[FU0ܔ׏C?t?ey98Uyc StK78 q%.ViN;ރt_"쳌 ʕvϼkoSfsUWW8+fYZBF^O?IsVRsAտ u?u59L'j՜]+w[٦UŻv_??<ٖvO{C|Jfn*y[ް"y'^؍ݍx!w ws" kVN}a(/{aTe5fvƆ t$e_LV^!lbP?C#Rb"|y^R;h=|TF-,jԲt-:HeaezLV筎*vR[ T8NYŃ^ täC_[HfۋVAxmJSWγhnQ0d'h2Vb=Г}(ixFZ3Tu6_'Qr ʃ)krPzZP0}4N')a4ķ GQjV]קRҺ+}0к}E6V/o7wWy4G(_ʛ\?l&ŷv-osU]\#m6WL۵v-os5]EݷܑߠMWbSߠneA;QSv^\ ?NҖ~9SNfY%`WZue]L.x]Lt.{(үɿ~7s'v>_>almms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0100-SharpBass4.xiz000066400000000000000000000053471247673406200242160ustar00rootroot00000000000000 ][W8~Wd@9 s2,$Lltbg|[J*~)eS/? s=˱/IZa1-09T<:}Wk?&(w:.h'?97ԧ/+4WAp3u'ZR<:μbwW&Lxy䶿v=ruzhkK-L#4g"Yg ,K,`lAf36ҼT2ׇ9Q;z4!{q) T:h:Hx2z &l?`#؅SQ?Sw+֗Z3'z9hĦ"Mz ]=zYiV,?9mV,;zȞ,ۆM$*q˸*SYooYQg >e#S@:pHx0["5Zd1ۉ k&IbzH \c Ԧs_δ|Ac)-|chXk6V&eUu3 y۽&㯃oc\({w۟<\Fg;?Eeg؛_ܙZ+ODIa`]=}&0~sGyЭ@L2*5)rn z Ƕĥ,lyuaq_n=Մg.cZ?t0a p(O-;dhdc&q$.3yOsfve!^(%&_hX_ϛב{To~?tkڙooL4_ܠO$.c'gqf ܤۥ]NV6A8Q~L6EFH '${< ܌z?W_1αLz Al`e ,0}?k|/v IТ, vfui٬HWƇprM6?yTף7JeJ}R 8>II/|ia?I`_ ߥo+꓈3c _ cھ0O#ï zBУl$/G5Cz:2YZqJ3:ٮ۸-5(8 z;l.~1Qb?;Bؖgc- Zo Xz*4#AP" O܂}UŢ S~+Oojα@dX%)Y@YfC C!(p ?.Vep|տlSO; ?dsӒTȆf|E Tҍ!A&[ފ5k̚5wp= * ;}aHPs+JS( ͉O*-hw4 5XX4aŴ ~.7ߗI-{Qgk -%˒z-Iv6*JbR ]Vdn8_',Gˬٙ gNUX{k贈q%9[!7*DRpfdd Gon0O\sI /dO΀DPiå.VV*CƮFlY wse foHd[ew~<:;91jz0Q|^D;7*Q|?cq R?/څax0 #A2%Oc,Y (mP<f9nTa|K-4 %G  ߭66>>r?wkfI8FJx1KKoǟ(?g"T"$j9 }‡̇ ~ a;d;^~&jheǵNR* i\Lj^WAjf;ٓfp7-|ԤK~2Kbβ9씒JNY ЕT!)RCz-[2.xk֧;>۩u{ֵ5A5sk4ꌷ<f U맚JNp&C|~k)r?BBu)ԯB!j"*#`[PR'dadmr\YirH\-HjQ8 /*<ѽ=,3tpe>9p.w(g?oȥzDK>o R>M ŶB$ S(]T rrzjYx$<[M |.0 ! VFJ¬ ]u_ݝ %hRpxmgtf.i^'y;͛mMN6Ӽ f79}L&'Silp浙7 ˫oΠaf CQkw5 o 7~o`XAE1VFL5v#>.Fq]찻ytQυ_97`lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0101-SharpBass5.xiz000066400000000000000000000104401247673406200242060ustar00rootroot00000000000000 ][s~震@U-6Ƶf_T2ȶ6 ןinR7$)7====Go~7>qDcuho&?;:zA?ݮ/{5RSQ߫GCK_T"o>eG^2i}qPpt9Ob>[os>ğ#o~r܄Mm^h}q,pS59gr RK?v0IS*yNᤂT)̉U[]Z4*^zo6ˇsLaA˫nڃ4Nn  cM'/^%fY.wuOE6;huF4'd7hAt?a^8hT9M7Ҩ>Yqh[KS?~4AmhI]0IaLJ3^,dpfo[JлWb6z?zXJQ ރ?bw}n@4ÙF:0Tpۿpo?&?YY[GP_]N.jEh˹ZzkЕ%ٟG }vZi;f]pcT;u4PuTD^&*ʚjx6e`^8$cjȑ~|_l?ľ_dG𳻌LHJR/2fe(LCOsKA,+Z9}wl]:ƠߨM)waٮ*fʏ.bc+f?%_{= 0I q'uf,L"BxKH)yΔYVշo=uQ4 SЌVLʸC|˛/wuOWveyqFA`2_gf+Awu*wtp5HkاtVZxYqpzL 3Nx0Y#.S'L]Ed܂jLzaIpS:u8}> pvA a'1pݛ}A)arvAA)W{;EF3E""FFQQ((ba1039; nw9asvA9atr AX.a]F1Uu9ݛ A3AX0pb4a=z9-IJ[iq@8(sZ9-Μh8-pƜ5n'4Iaa 7YXM$op#?ɛ5OF2F{!Ԩ\#QoT(HjTHQ [6&ʈa `S&񠣾ߨ.@Zưư&\QðZo k§i95P PKjLBEPcXeư&ܫG %` gh148z̰>~8nij31ဎ#&Fm} C&>#o6vХ}1:\3DEAba`$Fc}!6vW p v@#hba410S &FW gD ܈CC%ð"! \1QAApF0#L#;Z_3"zМF#F#;#F(Y]ژ&FH6f9c#9#2!!$Fc1?9`՟& 9syӜ9s8t9Ì$g̫& 9syӜ9üiy1?MX+hb0~3aW?͙0̫AOr 41a^Y6w̫n6aW?͙0̫AOrl41aM挝%)xb^44PZu<|?:N x&e3>(Sv%J! 0.E fVi3:(9! zfE:0 BžxѮ0LvlPHs]M %udW=PaAZWB Aeu!< `^B(S`m֗# BÝiD6V* |Y(YE!jiu`#dA@0nd ^dڠr V Һ ʄ a/H{RKΌZʞr+MJ4X.>Qb bw+c64fz? R a ZYXhWZFrXʅ<2`eAĉ7i(Ȥd1G. ?‷0*h.gOh> [ H,%R6275Od$O3RYO.D$g_-)@"ᖒ/uXmPܾ@L-YEׯ"c3/{o7ol&ou7l{*Xn/AsW6ܩ"Ȏ-WJJ"v8GCeĝ,#-)Ul$};IBȝYxEdᔏ;yٲxb5'7mGA(=m?ޅ%jI[z,ΓS T `!gtT&/Vkڂ<2-F({{}@V3~wZcUXNf75}ڿ8zêӸWNIvtn[c'WfI!8 T8vx ҸNw7djwAiVD:ۈ h&SRXjL5)byhR#nV-E*gv4R$ך6")ֵvQ8Pa9GMzϵKBkA (JMѯ2~S}gU9R,({(w2|_%AZa4W,YMAhXS?Qjkʼ>(E±nJ6*լ17`4qNdp§RyۇjĹ8oW67Eռ-v5osô]>mW67S\?}AnkL5Za+ K$,M0h+Oi1wFV7qƗ򲛸^/e7qZ_J5ska6]_j޻hjlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0102-PluckedWithTailBassy.xiz000066400000000000000000000046041247673406200263000ustar00rootroot00000000000000 \S6篠y'uRL!IBsѿOI+ٱt(^ثzZ>sOǣ!sMϲOa/܌|tG.`ѐ~>/>l_\;WA4 ) Lz83C`SFNOh9MזCnا"xt5fGt@ܕ/E-cƶl d$dvHme> sQcc[),`I,OƳHd=̛Lzdd_֧Ql s靣1j!&(XdRVg+{Dz@V)7zPZ$k͌E)/0R 2])cZ/x]+8& [`PBg39V)DsNYrXѲF +3$m%e!^gV-V,#Wʼj?\y4[̗ǔyUAX7<=ڝ3N>7=^bǿ5S|еp<-!aU5m|8p /Tf16B}!qDZHDE3|kEԀF4IOݭWLUmiyO!h[m2_")h9m'8 ꓲ£=$R+I\HC] bRdN6P.0q1|i9cbX[M;i8BiRj U"H(8A:+/Щ.i t⒡O$Q:DV>K3j+t*t<)Qv?i8nUEO,5;l1 f @B+hxuaĬn o#h"UVˤf^"zqoЈdHSZTUYxw=ROgˤʶ;|9MŮ\.m/%^ne O^k 'ixO_^qͷ{!=9`!m/͒c)}>mS+-j%V><ӌsʯ87ID5I& f$qnjy ֌ًqO%n~m*4^n/[N#rw_^ϗq`E}"QCߋb*k}(tW/bb[Ī_x"&u"u.\_0Wlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0103-PluckedAnalogBass.xiz000066400000000000000000000050011247673406200255540ustar00rootroot00000000000000 \w:_ 44MȹM (H| 6kٿ~X`'ihOMh,ϗf~?V~:Cwg/'?||fx`y>x4>G9+Wזxٓy$1]z8qn-?_N׃h2iDnpy;k . 'y" l`6$7z8Ng3gE%q92R ɚE$ڬXGŏ1!l`E D>1S hS$.nBgxΕ'p٥h}=V 3E>TB!dxS%1Ymݒ%="9 ~wfbx$ %v= 솔}̾h%sXX%j4rQw^|X[Ap}-CO |zl\oXpܗ 9#K|iVڤ N+iS8N𸋾F0] WcrY\\?Wn1 C?u?-mAYFX{L`JJP_eǒM ,94A8d?vaB{R,;H,D )7<Y/:`m(ZPS-Xc4W3ƆhH ڪG=n)?MVQ F{wx·Pz\z&`FWPR<=W.oT@&.W벤,QiHz'R8IQ[ NN,'f*ZcDDjW(5ü+Ej^jOv f'ݏh-i9"\\jĚg`|n(p39+V|C r"Q&i+nt[kxmDDZFIF5V^91ŗhk5w#x䦐9_[[M8+--ngaA3 mA5,(#\zt`0Z(uR8]ƪt1^Oƣt&{΢bB؃pocmF~O;O~*~B236{)הR,)H9쥮n?Uj-~NCsdh]鴎(mgf\lR䔹,ۏirJgMJϷI)ꛧ>RJ< %^*ēJg%NrP]A{PbgD UJ}(0zWFo5e g6(eRfXۤ5xҞZ1lʽJ*y,6(eq@ HV |^}D){A)<|,v@%wrڠנ񳶽R:} Jq{J~FY'R8o=fJ{cLw60eKlk[P_}g}kM3~6ST_.R4ǵZʩ{#W9O'y+|kg*GTYnrNTS^ډ_~OGDzN8?c|ܡrG}\ct{kl6;vү~eJh{vmhzwiyzwqb,b8W1jO*8Q5Χzq8Ћj~=?t^{". //@PΈʡFiX;1/F B%-2嗴fr76 Ce a2xˮoca{k#i\vqXLG^m75l*vW%O\9mfF5ƽe )biZ Cij5`Mcşlgnv;XYS򄮎Zׯ)~Mykʳ_S֓KyJS+!_ dWkCQ5g[#)nWvܗ)((Jߘ?w]lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0108-NoisyPulseLead.xiz000066400000000000000000000040711247673406200251450ustar00rootroot00000000000000 [[s6~ϯg6d&0e F"hȮ/l误|l.O!ѹOX iZN Dl4_6?]r?~y6ZLYcFZ~T;^¯^@6L'G G6l0$GMʿ?ƃδ?| ع$Z8DtcxmCL3 x1, Xb( KFyH## IzTsds_eDS(:d[yFl떪p2? in NH^LȺ!j0׭J&ݼu Z'&2[&J 󔳯,}TZ?̂Jlye5H{A;7͓q%&9*?QFN$&8RsOL7 /j_H":*'ԫi{02ρFG+v:LJ+ϥWjK!! Ks9VlzXI^j/DQY93d`heȌ^ȓ]`l[9bW& Slw0z.;="+{8 " NH8 &%,xJC's/"2"ŋ +eO%<~<:a \=v̿mI(-|_z"Vuږ=|r[+)̥?ږ4j$F"sV"/x(=I¥(e|ሓ9Ĵ1 VIh!3/ YŜ!7}1#bœRҚ D@"]3{-*[6ꌦQr Tr+]%r[ 쿙bG->Ww=34 v g4")b eg0 H>[հ놝Nby0 }+ 6C<́ջu%`\haNC_ǹ{i.T\q8qzs=u\ATջq7z]ݾwc~ah_Z#^nr^n2PcpKwQCFofEOB|"޸"^"ѱ"Q"Ѻ/"1&;5?lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0109-NoisyPulseLead2.xiz000066400000000000000000000037611247673406200252350ustar00rootroot00000000000000 [YsH~`ywp|UNFT5 f1 f1@>TĢ5uOOKBa}rӴ>48Mq;l~=:;~}Iu'ɬױ cx{t-?*/7?Z &ٓ#~LEx#6FN WL&FAg _ Kt|t5 K_>%~Ee[;GP(KKt>E\7{躙V>v[j?LǏ{8͝AKmzyKY7/B⺕I♻A$ԨQvh538aLXJ}]y2:X&j=h`yWRyH5l")Y&sh-A/վ!`J!E0-|!˷ Ǯ1rWGw%T (,e|k@UJ q xa4r&cnV #*)eb^% .}BK<~ k[?h=, 2-C"ibJr9Y((ѓ$l'Ŷe;[ח*qM/5r[%}VeOU E ӻCCy6vg3&f= ;;Ms!E2ٵ;JRQ%JKrQ@kf4]ILsJVΥWx8f6Aq4IӮGQ[$ʫp?r0ku ̗ۤ6JuUf4{ =/lH)vefM>ZKTh(ܟURҼJ<(`&q3zU[հˆNbu0-3+* V\!-@\L,/9(+{\QLbE J ]Fj•N{3h廡_XJT.eF <װA|ReKЅA)0a,ȦTEA^ a⒭u;hؿK?lVN\Eq*%VR)[V/L?ayHrxn L4%g=j[-pzy+SH nUbӄfZP,g)-JB 3,M{wc tΘE[:?98[Xxm5V2۪rۻrWMF?݊MGcO&мּ֯eм_{&1͛ݭn:c͛L7'E7C?oPl% yZMCoIe4ǒNYmA5Uv& Ft$~wϮPJ]Yxmʼv筞gixċQeUN_5FjF_`tk3lTϻ['uͥ* 92uॹP1:Ы,iz:PF|nj^*E~ah_Z#^ntq^Ͼ_$Y&$/ d1z&r]LxtW? {T7ѱSD~Oq2E58瞦wd<lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0110-wierdSchwoop.xiz000066400000000000000000000033341247673406200247140ustar00rootroot00000000000000 Zmo6_{iHRxKlve_ZcISWNOxsG'~gGģUzС>]uVwO''nVs>2]xbO.աJ߻1h/,FNI8elxwf;9N.Ldzh5MWc8 W6هl҄SݓV&P+* dA^֩_)ϼȇLk?uS3ZMABbZ C:p6%-gq uMSNSFPWq!A[oT:2aI8?M:Y5Rk*,]D[GOu:4M;9W`}l,b,b3lqG\ك(U17RFJ\eКlhLq?*nڜbkvKUVٜ-Y2k> lNdmxWV Ym83:]1QM㭘Fd(*R* ;Q_[N*ѱF9Rm0*}:r6Mo)zS8Ζ~R(- ZjоB. F50fjX׾#rssy)})la3Ɩލgq0&WpWœ5 1C 7e%!ITō݅ 5V.1~0:4dp;rȗp_Xr ˃=ylxrLԓV-H3t]Ґ3݅5TSϡ8J|/M$j%0 Q1_UK;G|~4̓ix4G<=UOsDo^hxOB]4j*juYu "E?ϟX4 ]V CDO:UXQgʫew2=M-ى/WfvW|n & wYch,u,՛XI}"wt#f.0f<.tϋw[=W`J.Q*KotdU葒&l JaQS_~3CLp5&T;A6? ra;;hwГݡݡ+zJS'8,EⰈQQ"NqXD*Xa8/CIRvFʞ:}FⰈWFo"^e]+x`;Wȋ8ݴ:_xhbWǹm*, xu̸ctuDr~~px;{ڱ:BbL >^1|>*t<cE}X+ xE%OgǀWcY}Zu2|2|&R~Ȧ9"[W,ìcŬ.U.UY ]H/EbBY ]+xŬ.=AⰀW6ћhXm'W,^RπW,^ﭵ}^X+N;CⰈW񊱱F8,EⰈWm?EⰈWS(D?G"^qX+f/;EⰈWZmD,VQ#n`D.łX0 FcaPNZ3x0` a<0`0 ƃMDxy(NWda,1#`0ƂX0b F Hgxl0Rv6`(dв Ð,O Ð0϶yl0-0 |& C<߲ / $ѳF=6aRMtzeOy6a޽e$ֳzl0-0kK"ɞ ú& C=m$`O |&~MvbbNLvb0O݆! ÐϷl°Z3Q+j=gVP ^4(`ŕt)P|WWl [Pg$XHqea\# 6bˆ> 6xi ^Dm0ͫF c6b#im0&F>ie8Bq9\LsaD m=M9UAA,/}LȘMi\4}0=mRs69Ҧz0GO M9Ԧx0 XMS9z"M $0Ȟ'IF>mS̤>s+0Ҟ# gIb9-iyzpJH4}eB~q@]qo{lp&k]1N qD>te`0H'6` m7Vm<<l fb~\vUF9@^eQr,(;E|zdu +JӨiRu>A^Yj}բ4U.!kȹW)bY.XBz" ,HElu)>$H-)/ǣY_{J:Y )yvmo.NiM)'TH5!OPVjBj@2MWlԧ-3TNw*'NB&Ԙϗ_UoR4>|,Bf!E'4vDܥ9R=y:6.u4 Ҹd).[ݥ.S].VI\o*Y:s)Nna(BAq d,&53鐾/N;i!_C8_{7wal'qGG]A1m H)j^Z8Q'Aq5q7]|@L63Wܡ"Ī, O=؊)Xx^Dd+;Bԙl%,_" d BqW2RC06ۇc,m 9jx QIuQde7'~:ͩ7\J6(i?1Z+{<֠1]:>F"f6Djr|X=LHft!Wb/f-^5¼&3]Ơuڝ2b_E+yT/q^$dɦk2Gх&QcJM/BlؖgO𷐸̽$*,V"&қPk zp?8\{Xcv<^KiCqsY@~|CJ)QPev(,kB 7V+j~Y10JlLXWw##Eb":+ea(nDqKˆv=%pk8UŒj|g%[ޣఐ֨ȴdaoLԤkHqӂExy)f]qߒm꘧NUPktTS8aQ3OL܌/}_~!] 3BsCW A=o^!?p2D_!/e jm ;9|%v1 Q,?OOP_ej1MǼtnh4*XY*erk|v,-|yWlЗ?~[$i,۟2M}Xwvp1Sr6yj~^'Hd80?O21s"j_lK-&\gT7H%u&u&At[TqL&.]Im&)Dy%eY%y sd8 VoL+o_lHS/O}[4qiέ6eR4GAr+'AM rK j2 MJ(PRֻ׻\̬(.OMծqȴjP[|SBsatJiy5U듭Zud]5ͯ!=_^CP:ՔzLu:]t9E<Job$.2p ^xs;r{g7Q3 ф{9ɧ+3ɹ6WMr05l* GS-59Ij[HraDw]PcBi$́jtG5ʰ{FPZ[T2VPUqE!,ŭx:e“pIA Ux..#Q+'|xYRZ׹i> W)]Itpm>Ps B1=~AxyLj6nL%_$W%LKNiAũ+ǐ_]]9+TWPrUJ|bW`jKEڕqsU{)V廉JQ\XξFI̥R OU~̽sQoVJ0+7bն)\sB*Z/7ss"aE5*S$=ިƹE̗q.]2U{IAP5UqrTYj{{ M23 -C&-DH52u\] .fa]Aqㇼ} >u!~ ֣W7;w1bՇhuvUv]VtQ]C:P?$ņulmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0113-BassyChirp.xiz000066400000000000000000000040671247673406200243150ustar00rootroot00000000000000 \[SH~W;tT)VZpjg_$ #ׄʱ4cr9_wspy:ϧ}2>m:ZEoٷ?[gYp>>e{B?2z<¾f7ۇ8\p4O{xCsYxMZ[kKĂUOmڶ8޴z}֟Lf)5~FkjQ?gdŌD4@4 kC/\;(o}bAL K`BO ǖhlP&۪lxRc?0epTw%Zz\2Ubu{YGJ `\̼La$$jXHɉ,H: gCj]#WnAF5T 1YƜQ [Iwrι0>-8צN Mw{F?9{ɿiwp7=YAp㺉ٔ]lm9PrLlL/tC\"erR)RqRdKXJxޑ&ڱK!XrTxFD75-{x7I0̣?nǐVB$(/`d/@ԫ4ٚقs^vW4u :]\8h!'Ydˤ…cPjBV1gL=G7ߊ |b: eM^ʖ:LZ\>K Ƥ|q".AbD> (>Zr 4y]|Jf#)y4ej9I:pW ("(ոZ"j+b~E( ۦJp 7)ku H]T1]DB̊: +0N EB<ߺW |S|8vsԁY?QEO:(a\1oW"O~FrF95~Totr@]9zmD8P'\޹e+d"4\Xs :G6qrc?mTA\ۏsw:^E ǹfvx(|o&švh<C_,:^d8 Wmc|!N) ;]֗ޟ?߻3w2͕zSx\)r2Eu#I e10޼*Űłx>>*I!$Y0@7Y}?6[Uwu' G͊`?eH4Un^ݹ c\ ||,"UڈvUiWW*8!uCuh8s9N(!  wԩoI.P ב,2?(;O fb|C ntrnm[4:Jpxkmu(;`nęT[=w7Jn%_Yq*u#RDBФٖY-SԮpz(F-0muG_ܻcvba[ ieUI1ejx&5{C"<⣈ EK( !R(X죏|Qh/?o'ީ>sǎk=_']clûuDpyXBpֻ詹aNs+ D9hCz^`HfMyb* # {HG5n~z!Ы$eKX DLܿW[0sBM/;Q"B3]w9ԗ Z0akW%GLB5T!Q D/i,QBK5s}0FV<ܧ>:PYƔ>.Z `xC8kd&'bE0'0WZ WS8P[qh) KiPs)Ջx3u)w+ vM{MM{զGDZ4R\HS~;g9=Hzњ?1XP/zn$˄X'JcRT}%72 .I;K4I5y9ӯVAPL$&NaѺqE4v2"3N[EN8 cQH@d<')ynȅ@mҨ5t sCȅ _>8wxz3Le3 -`O=Ai(Id%yƶ. DW-tgR6gPUtU~L7-;l:PjFV.yֺFa݉[60.=pu:* 8120B Q)B^ہj,37yMU`ulo՜U&ADhExE.H.)uYQ,VhSEL(Dc6ַ?7-Gwv:o]{T[SUUg> UQ7<Ǜ;uNϳ*Oms6..a僥 yȓL&l]!vb~ ?[YR;1=8}>(|lI0 ]/xOZϗ '_t|yp>,0RkOD&&q3|8%~]{_+i^ڰ}dҘCO5kuJ\yGΤ3Ҙ%!(+IN3$}%dI.IعuLyL'H%' uKOPuc-Lz3jhj^<u .]咮ϛa~|^/( iڥ,\f% nd" \RK[/ӔseZ.R'dAAzݡ^Yt!$S_{ &Bi"`Z!Y;;G jb( eF ډq:U(ˤ_C)8Bl,p oIAӉ  Kj#Oiň"<(a݄I-Knm|d8'pZF_4[Q'ۻ,(N`sNI -Z4 mPXmZ.t(ˀ :+-ǁ1~J5Z~є#r`>NUvC,NU4ZUprHJ+qKGp#̵a@sQia0J- j51OYq *ّ2)es9aNqc[ckeB2EgDP+Tr֒H$i M N]xE hWAHl ,h-(#ZB9UJx54nȴhE1PvūģQqD@d )* BC?Kvr'SR nW f(aI#f4d/47bVzl4_ܤ(hAo b*xˍ:Aݿc`'Z-xV˰GyauV4ȺU srH؏N;prJށ'<]!Ym* D좗@xP66[Kx+ !um|f?&4)*rE6T4M*Zq&64TͼMC,(;?MWc~IruoDL$%/n/m/m/UK>*n-镈ͷ|_(y43TVkPbv;ד $«xoK]CUDb X!D+I ׳}A9jѲ^d;eGu_p5vSVj:6pVI0vqg*YXMY׹=o*:UE Hc1)H5dbo[ż>o:U+{QQ, O kܿؽ`7lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0129-chip-SlowSawStrings.xiz000066400000000000000000000033451247673406200261450ustar00rootroot00000000000000 ZKs6W;2=c;DS[R$SHbB, Q}O fMgޖ Arr iAs*&@[>"#qsXV|(jUXv'M,u``39Z8oMS띞4-v\lUloJ8Qfc<x<$ZPVK%Yј ~T$CYI4a햪­yO7zJ@TD_6SjVw+,V^Z.ȨM. 4̕lU̕5>* KAT*}Y'*ӫqf'W:8d>G P>r` LK2d|0h$$+[$n<(jAiK8 5N![֞f`fhxxPKKa+nOml.i $|:75m 1 Ve2Uph&BUkGO~25r$%՘%/;"U=L$Z Ԣ(3C\+4=b>^H!^qLįjXf\Jrs?ϥ:L{< W? X=\@3D9fHWeŎ!ITō݅ 5V.qM%ʡ![#€t3ٟSU CjD ,'.aiȉºT3ϡ8~Q+<Y1_NhjߒF"]X̲.~H^]!7QZ L൮XQ39UjhU:R3$ByFbb|m.bCRWo[[5G:DPݑ ?Ckz<ѮV2Իگ.}7m2d5\RgrT]ߧx >'{|7g{|7i؛˽i,_"Z? j"eHo+4}b mhbmbmb<޷yy.fX[8"p%lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0130-chip-SIDarpSoft.xiz000066400000000000000000000051451247673406200251420ustar00rootroot00000000000000 \[W8~Wx\ip&g!aIzv{_t[J*"1=~fRIJJ˷Һgaq۱w?v~9?pirs.gaEB_SPuK>ƧB/PS)djs,茆i0?wsL+s7>ح#sU*Ҩs2[x YCY %"ϱc zf^`EAwa4;+d_mwϬ^֊ޱqFyh 6?Y]nyJّRVDidm˜h6< b|zԞ*[EyX01<ܱG$8vr|āP=x@E}-Nj L=2RYoEsF#U?v=cCB`("aicr^LCƴf'{4Fa7%(_g4 WQD+0@`4Z/Tt,{4>>R[<հ^g柧.~k8-pܢ?cSc h8z!Eq< H5!X.]^s ȚRcl}|9Cpk/,^A Rs~=חk]8eGY#gY86拮+IJ|=&:^X(HaswQ͢ֆl)8_Qp8R1vAq5ml3)E)4%tg݌") ASYUը׫J#aWk&oomKvj+\z.`Fի x8!j:g;zR.6WiYH^sNcz+lpHْ8]}p+&N$?6aZ~~$$)N<'N+{&9ìBZ Eo{ PvN$җp:Ƨ}9t56`7ESEx#XAS$ZC:e-frOA}݄4>^ ݈3Ѩ#` .ԔW9_@Pw[2i rx'P+H1фSނ `;s:x`w<5Zxsmi15̽0-dt"lC JJrRQ5M[ynoxt$g,ګBGCJ ݒ_閡Itϟ} _B@fr٘BO</`r%6ᚒ_ե<5G`VK1W@ ZWsMK-emL¬Z7%&yNYں(ͺ6,RП&iRۤHSJlu)%x]FڄwP %޳JhM(bwPbgD$]Qi\ey2f)٢-JcoRbSJs hW[RŜ[M*URywH*)kr-{(elQJQD;Ӓ:Mrt|ܢE @E){{(pE/sT>#lQʍϽvw񝂟 {~FYS'Rj(ŔǶ2-laN[LY{Q-,ˠbJZ\LWm6S7T3hkwKKURxa(ܭ{20UW=&׼#,rǺW#^ӯ>X~k,;Z Zw7|&ٰ~MsYEٳB3FMqޤMqhy< e6mL};·[8v^3=.W3_ Fz~h#Dx '|Og2#IcK87֑rc)g7ZDLWђf~PG |@A]]3جoTFQioe4Z(ˈk-mV+]VWkG+Qvu,>Jv/O8.mWbFSFO^Hפ bi [ک]H8]~eَ dɟzm0 U6 22BnϖSӠfjailPpV, @ `gCy:o<s<0frFk%4JX,Wk(3#xCV=l|/Cw|C!|MW:!J^lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0131-chip-SIDarpSharp.xiz000066400000000000000000000077071247673406200253130ustar00rootroot00000000000000 ]]s6}ݖ@IIQmycmm¡Ef#Zr{)~$Εfzfe....u18A}q8Է]Og{{uq{>t7laxmE;P/WY9 VvY/u|꿺Mno-|ydzEE*tljȚWRٮ y06Fd|Tֳ vM) Ѻ"g72Y L `pא039R J'hJ*OKeɈ)5[$ zdH:vLMՅ,?I!t2gs=]4?o?|!ۉV^q.oc*UYl׮ز"L:j7Zb粙qP'C B6Uli@!ۆJ5 wW7CIgqvׅHnM *ʦZ5z5*cU3yZ?nb=]Yje^dK?&ݘUvnQV<~; YPGh=f3 gTvϘRWэo>ncP8MLu:yMgzsvb dgYI d77%ݫm?f@ߔҳ$C3PyʥNr,?"˜B Y5L+ pB߳)i6r"23'c,AWn{Aah_v8C͡G͡͡'͡͡=K[6#ZI h(тRHVo>-XEnSv[@JZ[xaw\}W30,^ C mWӷ xU" *}AcF[ }ՀjpT/$Ke1q^{EssW=qVxE^^M?/"xplIگXO 'icN_2$Ve8yxe0<2^ ն9`8yxʙ}NJÊKvp xE{^^{&^X+f#^1"^1+f ^qX+fZqP* Hc'SPF1ƆTTgOЉ"uS$.0PY1P$Y1PX1P$X1PW1P$Wa!""Y"Y"Y""""""yjYl ^!ymζۂWkw!ׇ"y볁dP׼w@a4@m Q)m Ju7H^gW,]YlsO] ym.Hry1H^H^g-^Q&!΃ :!̫@;9PHdH]`T AGRgHgXtעe\1 cG},v%ΉW&΃O OL`0e0FHtDYTwlCݝE]!mtP{gPnNxa 8`E%$xL CCn@*nq@>rdٖσ[\N4P_}VKma=W1+?NjӨID|!rQJo[R*t8h׳739,UTʠ?GL傠rAл/RʈKU\83MB\aT.g)(pO;@gwSJSʘN ,nJANlS^m94Yh05yk_hXˣFxSӁk2l)kS)$mݧT__t>qKnZRM.]Ju'SVEL)φbeߦSYv>e8(?O|Oq-$L);{'S0L79(w26'ߪNxNRfégkf,,}twή7XZoߺ.bx!` :}xf5oD7yf5oC˚ ey:oW6T߮,x~E]7ۭBߠn.Aۯn+ƗInXG.܀bJ\RIK_Yrkf!W˚nLV5:rEv֔k?eR5)p-:rGM,@zS1o[7OQq]6Q:%BH-I#i-I;ZڨwYE]!)~fYCjʅ';`\zV/Lv,(8.`E!zC4DqR753q>k8M&p97nxw7n!=^ ♚ sSlmks;a~yq($x]\fotQP~?^m?/?:?ȍlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0132-chip-SIDarpSharp2.xiz000066400000000000000000000045141247673406200253670ustar00rootroot00000000000000 \[s:~ϯu|i.37qxNbgm=/FcڒW_Ѕ" R4=5> H= #/?tzo:w>t>//ߜv>}<8x事o\ӏ#.͖ #x~@fINOiÙ{74t@dz9_! ͡OCft=$sa It@UY9Zh>/E.?s=;t߼x1FdBQ&[v!V+H# HL]([>&>5Ս4.p )lzqkn}7 sGw>VwmjHvpב>I\9\pJV`HL&~DBOo7 Q ֒LlXG@'?A8[F)GT},Ni%K,(G]\M/*c>@||g8vm%1{ /~ 鑕rΚ+ŞUG!)v MR>6=wϢ܅A?+Eu<2݌uĮBƌ{ 4,yzMI$4X*[U:%!0 shx>PDq=@fc^#N5.;5V<S%?o ixչ<d!z !S OHȥƋSr.8?Z?mM{}Bs~NP$敜>_j ʼn/};4A8Uc|n!M|\)s -d) )=`=Dl7^P1~ÙwCMZsl2]*%J)H݌ zE]S0IISUgׯʦ`׈Wp7ҵsJWUTn?4i.erqmrvV\yB3tIg=LrX.[\$ׁs=u^Oi '$Û|QϦaH@L =_^ϗFF)gG#\.DbIMO+A 45+2 !lEux3 ^pۏmCb;wuq}|_ow?;4G\ ͟^Hdh?Цz;ߴAxr=Y-ܾ^O^&9!Sow#>p6-Fy*,?u\d$dnD܈mCcq0 [Ef)V+f _h>"YK3=uBӞ:Njߵj*iLqRA a\xoNB9$gSezHWWdmD(B(`~:ۻUix?тюz 8a6FO)w{^uSJ%E6*xCb!L$o=>;qX.ܮHE*`L {>=ghlߘ$܇u+Ѐ]Ek6QifhȽL* |,,z0r|J|{6x&r]_ϥV#lch}\O3_-_N qxD<Dd z&SsOȥƍMOq r&eqEپAhl^ R]r=hr\qX8Ϭs,3'#ll g iu\fײJv0s&=``ǻz{CJN[ΕcrrPBMB*Q2OiI ꚌIHʬf=^$0lfy'77ft2\jVJx Y/GJo^:**)*e`[kʔ MV 5]4J^Iވ3QF"NY_Egky#"~h|v@>Gk"R"VvܡZ*%^>h,Y8xa4-7/䖰$+h`DwhgAv dc01ğ;iCYW_qpg4 ʄ#}HD*Jœ\n4fGe"P`9bD; #;n }+_Q {Ɲdp)"5\+vdZrs("u.r9O-ؔ*)IKX=WC g2NYZqƷ6vryFN'OqRP+3msF6x&/m ~m˻)1.^YSb<Rrs4[r3x63/*2YYbNRK&yMc]fنLSSf%軩)12+<MI7UyIQVRb*J<ϗxRS%V{QAin.7eqM8щ*T92zW6WE5elM2ew ~yIi. զK.eST'J)Kj)﫦W8t).p("KnI]rt)#K ![MR}O=5]Jir{}n*x_2?|ɋOkpwK_xcG{xm6ܪ\W^9PO!zYԓ\K;Wl5U\MrW|V!I>5ɰoz^/ a?մ~8^/G"ezt5*-H:-$8*R!|OҪ/=?GƆN_jjЕ@oZza]yF񥗃lyұ,i0e/7Nwg~](.),is +Ÿ ғTy.yzY"N}uY^羯koO5۝z>\pr_ɧAoYw?Xf`~8y'fn-)zFdA*x Ԭn\pt9Oka.{ϛ\sn/7x2VmQAlE^Aiyqӿ_&ۻ(8՘;cOH;[gO '羱r50`O3% ,e@C"+ %/iYQ={Neݐ;i8~&`D‘>978K3lz׈Ѯ9U%zO~ymfoV6bkK{jWD=% N{6SH: iJu+&fp%"ZZĈ|dp]sӐB&k2~ Ǩ N:N>;~A{(ۮe^f4֋hhؿ0>&I5MmJIz}s5|PNgoFuEC6ya.vL̛:AMaʝ>4^<);9J8ZIdLӜEY)kх<{35kys}qvEuI;v0cp5Ȕ}Xv!gc9N̵an҈_-,OԶ Et3ǵii3"i;ZX_[`f1w|<_oMǃdogzkB[hI- 20Oٱh={{F|1sUL +ry왉j J)x(bg"\q0:r`,;X)ZO3m EjFw8d+8VƢ{qOkoxUd"jMs&.g b?  @HS>lVi]>;ɩBĩhз[FB\hcS`ȆrgW'*1>MSjbOyJכ"UIj,c6 '&   7ڀWaϴnexEZK+GgW:Í3X=U JgA҂^χ |MbWᚺ/u&NϴX+`,U|FUWWu^ucuX,U|.vsEgEJJ2VqP@*]Ĕꢭ E;Avuu :E:E:E:E:E:EEEEjșhhhhhhhhhcH\g{M+$Vr+DʍQ^!qmo^!q+,B:[n{u B:[nePC:_ՐbA$3(Y޳Қ]+. =H}uYYHp,rkH\gt=j@9,wԐbX,b9,QAC:bȿb9 !yM(uiH_bKF;*!4`sR9eQC2;jHhT 9[*qƂX0C z6.T5z2%#b FDB͝nwCς+hHwΑWC7n#/rFܹxPBwØ(Ƃ80' =065=9۫pi4[2:Lo1#`0nyn마a,1k4遁n Fi~Xp4)L]HEB=wGGJ=S*,y0bcu$֓0T1#1F_G;Ho2v[GY0워Ցfσ+ԑjOj"& _ԑnσYOo sH'-6۱:]Ց|%֡~MI(s *i—/ӜUk* E|$H*(sFc +ȯmnj0"-?栶$t_Y2Ơp$AwI\dJh ;|խu)<ʻ1ta/˱ݞlۼc<<t MKrzl?i,1GfBU( R&;I2]RϻQи &Rv&T*CEr AGRLS'F rCI\u&\(e ƔGk9QK1Rb~ߝrVqln>PX*|? **ÉRA prLa- ,& Ŭ쉁UJ a@NDM!:_LQՕIN b11N.Jr91)shġ#T(-~!w<lGg kHi4Lo y.&rX0r.P\u8@\&bE*j3S'!W&xp~g"FKMؓrR#'R-~ \6qh~^G0luV"dISƷ'f-/d< Re-٬#823O#Mn,fr9Ğ:X`PAוCPFġʅ0yĉT2݄#=Q{GL/ tfAUEQ Z0xO=cJMsq$#$i Ɲ-G& ñ)'‹ 13UaU!w @,y\ظPE>1% oдHhZYm_|O9weTe|P՞Hmg- wz`ST|[6Ŷ.ezh˦Jtx;6-[n?rh[O#kXԬTMYO gdAJQ1Nz>qq\ݼş׫^+kȵ:W'|k7?֒_Q:Xr4{ݖ+w{ j!G?w{$GF}eu_ߝ .'kr 0G/rt_.nZ'1N5ݟύZG76L>FU7>u`ntIw[ƚ|>=?o~tַ&=U8 Ҏz|&yxl[r.F¸4&]f|۷0-nrz0'p2ׂ_sdin9os n9o ,.ܭλPvwn9BrNwuɋ缉[ a9Fob}Zy j]}&6d[|ˤ~LG]-1(HVAnzCl7Wqîzq9*gaWqv׳P(ϡt[7N lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0135-chip-VibratoLead2.xiz000066400000000000000000000075211247673406200254470ustar00rootroot00000000000000 ]]s6}ϯ=AI4婦쵕N-6[ԊK ΕH'zj#|oѳ \x,~:9>roӋ?{_g/7?^m߭/~o[4 OE翸^˻"ZO+YG׳zv-ZϏ)j8_O_KkeȳyO:pl*ȚW?nQVȼF]Yf.\502rC E`.zAZ//Ĩ% <<8B (KgҐ(թ (ɫjovcϾ;sYNOFi2j2Q$h$?͞eZq*9y<ǟֽ%z'd3ujp"ed~i_QsT4t ߖlrPttuO"J8u?/p:ኮ+7H:Ti]`9/R?Hl-]=@fXHͳX/"kܼ2̵b4Vr<|&[C7yiy.Kp*OggŤ0r͞L/{ ' BNZeY<'nqV Oj{\Y/<'Ǖ^%Hq*yw=Kߍejl \/K#W|:7;P{xܿ+[d89a-}K) &@KԴeGS,bK+?$E|X{6 ^h7cl VN{7sэUꅛdZbJPh 5F}h>Sڭ=ՇCqVԀO:/DJ?W H%J4h+H}+\Y #Ur1h+@N"""wC骎0@:S*(r((r((r(Z(Z0T gâEâEâEâEâEâEâEâEâE"qh+$6rDʍQ^!qmo^!q+,B:[n{uB:[neP qٯ $X$*0s>J{V]ߵtQ@/qE"(頋v}g]XH\guAL_ua E; $X+ xbm@:E:#*$X++FH]u6%΃ŖwnUB;' `sR9eQ 7C91U"g[%NX0b F~m4gZ:JB% R G:>@B> {g"yHO9- זL7x1蠧=I]y<C~_wk@>nn ]Knrlc۲Կ]F;a?=5<#I6%EC)NL7$&\SH )c)MܥPJ"5NeР*[hͣAWPj d)ND1b:fCeiJ T_lvƗ%-[X82=^ϢhhbTQ<<al=Jyo "['r\rr"Hމ`ɛB2Uk]]y풽w^ RT:%b*u$,.IS¦Yg%)LVD =Ui|[i~r֒K ]֒\:v 3KirgsQR{ΆCqcyPR"‟S#,*0iFrLPj"(6ʔyp4^=c Vsؗ^3uAҮt\oT-.xl5 bl@vkao5BYuɲ*(S³ֽuO^]Ns /z^It>6@3r# u"8[7k x KtRՃ _Oͅ[E{޺Ff]( |xDGm W@]l_++ zӋri.V~z®*u"WRih4ݞ- &w\*r~El />̋zۇw/riy%'IP';p7:@7eƋ?DgӏUwOL~Q.Ӿ?>r[LQ$>|v1|w//YW_8g>7ȟs+>˾S:ꭚ]rϷa^=t:} 5|8#˨Nhcc]nQs@^.EnE%ԃIJɫjoZVbOWni2~OIg?D8?{W[GRd >o}ön%$\hY"R EVL1OY;⣐MM$dކeXWYh5\ J`z9&d)^DCKtKiLs /%mͧt@>y+Tِj\ޘKtۧ#^y '|6ruu>VNZYOdY,RdB\gakyk{uZvFZy!y芳[8Y .8Ge-~[%1WO!0Vh7'.,~|,qB&M&D܊*c#ל'r!m$ڿcҼ/m^9Ʈ`փ\ŲuťƫXx5l>l\ Zq&hnwhzQ-+V>[6 \$@J֔LIEv K Iw1[" V*Kȷ5݅-^<R#&yAH\A+M/BDYC;^}h>>tP:%0kE'>ь^\Fi 8EoU`@+MW~_Rcx++]W/%Sxr, ^nU˦U"5bWd7EZg^P xbF^.UvzLZ.Eb`"^1cxaK@qX+fw,u|!cr!ar@:~ɞIrlz xhR,)#^16xa8,cW"^qX+ƶ,tr^qX+x)W"^19Ebs+x`W̡+ xabW,^u9txaW,3mKdW"^qX+xa8,ڈX,1+PKk+pKk+Kk+KwVV Va9i* C;_ ÐΗ0$%0 I|* C"<[2Ry C:<_ Ux* Cb<_ Ðϖx° 00j$y `YYKF9p+]0 |* 0l° Æ* 0l0i\?mm#Mt%+0LG>_t%#M#qgje '(t%#ƝAF> 0l V8suFi`_pKG>)VzƖl>i܁F]G$#HaH Vus'^u`tYH5HH47c MI!gd<gl GӉ\U!M?/Ӏ3U*ϐVifbU)5dR27CHaiԈW)XFȨ_9:A~^Ϧ(m,-dPHƷ]o˗JM#z)8'Eu2K.XHJK>8DBJfgD1 ^'1_J(IOmE+3 Wu\9RI/r4JI͉#'/ű&ŖK3Uǝlt 89Z)e'~m<%W7ɗ#7|5ѕ͢sEoqGƕ]WDۈ(C܈׈(߈$|_o 1_T t6><?А*e|J*O lMf'&`NLz$Y[lfs9TU~9TlUVL}S>}X8A,nGc\tQ]ܿ(]#mxtߨIo~CAFݗgnLKzv2~OƯ1T<-{>ui'!ۯr>D1=5q9CrN@+d}%zGxZ8GxZVE:_#+*~.\ԪH{0Yy>_|cۮnryU܍]to1?ݑem~g?Rlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0137-chip-PolyDistorted.xiz000066400000000000000000000044051247673406200257760ustar00rootroot00000000000000 \s6~_ 3wS @:h[r-9w,<%W+iO]gry!|ן?6~fS |}A;]YZ ''j#ex+3žsU7MWC|l|%8#MmЛ }oڻY,ճ_њz#sEVQQ3 ( !>a&n7 XWᝥPIB.1 q%{f%rix6>  Im{q.ipzV>傅x.q]e؜q=Yy],cX:d<CΆENgB% p#蚜9X)w/T,xLC,ؙ2> Hs m2CFd2kɖ̑*=QQ,rQ3w>6"q|{Ց#NJP}&Z([K LNu\^T6^fW5@dߎRxf+]7qr} t~&+RA0u^)DD/?eȲScT*%JGx&E!= )dQ+4`vr?0! ^(`4fu"<S?ڭdBx($+p-V'0zBiy' [};T}~`+p שy[v8I}-?$:na^ k[-еt^VTD CW9D'#F~t/ _$⳴F7Bz3~~o>e=/}2r4A6뢱u>U|BhrZB!A2UhUDG[$K65;?X=+Nj7?\ t7K`8P;2IvXȜ\, :Aֹ֓,ʵ'eKW'5Hm̧ZY:iOGߖh%&D1 u,Ox MZl2o, }eQj_&A-ueU@|ʡ韖2yfxI܂yt5uHʆ_5APLB@8}I5'V0]~+*.S#zVɮ=D"Fž.MK@:nF4ߕSMhXM)HŅ( hk nqR5VOܬ}Xمx1G^kQbt_3A| Ebn52ՎBSB@ |t>rj7P멆.\ x_ H}Ůs}!G*_҅JQ-he = ȚIjMi$F;X:O7G7iKvmEN|BQ΢mJ%a8?bd2B \SbU u d)se$muxɾr5mUlO}W~-'#wuΐbW謡.&|RܻZ@l)VC<ܙ(>PIcvTO#J#<5UJoe-@j%K#Yʦ.eHZIgK#zO\骾H2\α2Bce[VFĴs,d enK# H/^݋ZQ΋Z_кqbcͻzz{aٸ -1Xg1O ?:1i^:ZOsXN\i4_`zo.JL@ڇTvaz8l] !Ki(fT͠Dpү-n%JT|V&j]6;*l'>K푶ӎT-\k g.f2ڒfښs5mL1$~Hm@;H8bcJ <"Nl;)l)=P閻 5UlɅXY rjP6&wMhcu׵p]dNXeieALDg$Ymi}.ﷅm0BiEXVh@I+OBlmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0138-chip-PolyDistorted2.xiz000066400000000000000000000041041247673406200260550ustar00rootroot00000000000000 [ms۸_#Kek&Ζ4%WVM` p!~} @D6L.g.O|BĂrpy@ΗEˣO]-ޏn(?,'Qa8vʲ'GN:}<̗b$f6-&)1Zrz Gs~t-LQ"H/aOtA[Uu0Fn2cG (GRz7*$hCbDq&V"7|tLXBH, tKܵzǞ8jfk;i2}X̿܍<2@$]Υ{n<$frBew~R'(u\&&̋xL<pF<ƥ&[xFI(1#<o^L_xaO$qWq ?|֠-RDAj)诓1J+G+7TrV-b|s$e~ LOuJbex75`d{nT ɵLɁj@Eu]_oV> b˷N_kХ0 3.f?Tnl]4JnċGur&&Ҕ%kmBDQŘ}D&:JAHC5pLx`a vdy`>n}W.݅u5pImCk;mr6yrhg ?|тyYeI zKaLOX㛛"孇jx U&~ KXbfʔ.Ʈix\: SuSPUq.9_WvéVpK^σu3X |@"of=0a[ ~rcJ 2.  M 5; P3և 5 l̶-.L~GmY >9:lg qlA\oڢwpe@̿sW$E+((B.4>!8wQh@ZIkOӿIoNޏ1lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0146-PluckedWithVibTail.xiz000066400000000000000000000052471247673406200257530ustar00rootroot00000000000000 ][w8~ϯ`y}4!6!g8@H[O_&ITR'U HfAA<˷y??kyo?wW^׶?6'QodO/}7Ǐ8pchQ`q# ;hn rѼ^+Q:nOW$l%wwCwQ7)G v=0Y"հ`ȳOC3LLȧ?Q78&S҆54\i`|HY9_a )^Gn\ljI);`RLM>O~<6$)O&*O~\ ݫ+4:8t0 b)w7><.8SY@ ׏-|zXJH; KdmgxuqRsV/>~Zi|}W(ŃSA!Us|$.@wUjB5P8\0Sŗ-6q5zHUc&נfDPtg-֪{4!lm&0k$x#Ăܸi:,xADAD n?(w "k9}Wuη}1-CIŹ(EW3DqQ6qDV;>;,@ +QOd}+|ŘOoMގhz+c`GF2\Ȇ EwFvxuӝ ݌$혝G)ܧ>`G)bx{޺, xX!FkF W_aw}}n; RP5[ 3$Ft>NX(VLg]}>c}w}ڱcޜ<~Q[k*k&-( Gڼ( WE[&;VO؝yA'W_Gw!$e|ESO(5W 'z hԁa"S3=$vkE57gNҲ| }l&}ϛR8(d+]φCو9vgr9%4lgSKTpqu[r7^YU qo5Fuv-Mȩ~59uHԆ)u/̳g|82ـKwvX@YzpX-h_ft)T=}}0/ϧɑ\?.qU Qjؤ}$%SZYKYҽsRۯ_W$Y(Ehk]4Zt1j͊R#H4b+qERW9 zk_cmYTu9Kpnđ|ؿuJYuźpf d*k'K꾯Sj"?nykqrDTmUqrTscjIU|VᰫW 6Wczj~==WkdbEڻ]NzeYoC ~W%!A|CLqHn1юbe=D[wez=R2Bklmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0147-PluckedWithTail2.xiz000066400000000000000000000043251247673406200253710ustar00rootroot00000000000000 \[s8~ϯCBL`l,!h-cd IOmѱtn:ӱ.>>-5|:5q9kav?k.~뎯_n{<;˺ g, Qh ZO?9`0XDG7 Cvɰ3GuC.e`BYESǭ m{n;ΰ7Mbf %|Kla@~hmt88@K^DN?sd2o8QD^@T"Q$re[Dt1,n:FDdb""MԮn|D_8XL!H] g:2]F2kW CB7SL Ds"-]K)ؔEɓ%sioxqd͘3u$`ֽ ٪cxDςce~7gȱ@2Fؐ̓![`w_FO/xޒJ3LZ?]6lyztbtAK5]π,ϥ\D_yZ!dffՒf LI[J;óMAr}]W<*sf|ۓMv!{*^ő_VpD~шLdT墳Ngc'ZfDt`p-jx":am *魯RMC07&8?oZ# h jFj{E`.W6BUN68ZCH,dü@uB1.OzF_tɇС6E1]i?:#(r)ؕ*BTElxxp !m Rapv2É_P)Zj=J!D!5?!.< d4'~#:0@\#m5M!{SG( ;+)syOCT0k!JO|$q-FDVHP(e9'5ݍGѵK4b|{\`:'ٖh M\Ef-I;ztSJԢ#$k<` Xy0F #ǤSi1)y :JRq71w4̗ۨ6L1a&rY!:$Bc ROZ487VK_H>-QE~/I ڰo: zMƈdoD kfÚS`g̕'̙7F_@w$RmWybsB(J[PG "$ =f.pT-$+r%T H *<-cϧ#$ Zp`b0ZDQʤ v/ 0|D1_qSg2ѹG>k$uvBSo_tƭvܖ~U ` Gkh$"z9\)q ~H7,5]&6P^ /|JDp̖b4mn+Fu5Z$e0S,`ŌBOz HE cWCnUv.U^Ko-[/:+s7^u$:L ѕlUBa&~$ u6žUߠzcZBC3x;q°_+q;ZjB+›yQ<NӖ&6Wcz0hlf"9br瘢yT kt>d8ʃq5xh0*"~"ja'gKEaja?jaZ˚]@z޸򻥫'NoА04g) VUïВ C : Y_Qˢڨ ^AF.f2 K8ynho. g+ZAz3{I*zLf8Aw\HY\dq.c81r%WLnc~nm熤0~5#/DrpѧPCqLMS;-6e'UOqc{~Sx7^(P/>:D Slmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/0148-PluckedWithTail.xiz000066400000000000000000000073121247673406200253070ustar00rootroot00000000000000 ]]s8}ϯ`yN؄P@6yq9$M3~$^HwzI볏?]j/8{^~jk,}:?̯??_}rnTZlx ͋4kOχ\ǍA6|O`a֦|qLvgnWu<ژyk*xugcd H`F~x;gqfI>kv,ǀGaeuw>;:06o8n۵8*x c˥(.)DH/OT@H^V{Ӳ{񜅝juCld6MIg?@_ܭ϶_'|c#N';~2Mה%[xI&ηx[ת}k& k![LI:SaWe_ 娨[מ#9Ylllx>9yqvUQ4kLP|k|_v\]{۵+0XXǶ-nYe"{= D>⋉هj 4W@S1 0CifW-/~(♺%|#7$z|yh%^%2O/-3i1kZ%y*Q5B\|ϪOŵF =U;ֺve75~eZY4u؅vᳯ]GMcǢu>+`XKX}5ch6 '% ٖݱZW2Epe+ KP@pCsñJaہwCz'dɜ%lZ"-Tաvuh:[ګWCaIO4F az h)JWh Vձ xO:+ *JWUKW-^x;RU U^.Z(,ƫx$/xȖFmW^gPuKb^u#6i^u❱U"}y:QExEb^ubGZ.}rnr,1:(,+bA[J&K]u,«D/«v{c^QXK.«6Ex6}.+]W1~(,+ =WxE؜«aszH,+"J4:!"(lUK gER[Gb^XWmc(,+ b">+;xEa1^s9Ia1^QXWxE̡WxE`&F,bx@QF&-c"_kb"H00 I sKiMF1`aFF`a4a FF`Lh000LKVa0L0L'Kx0LKVa&%0 Ull d dɘ2OUlX[a8OW;Ȏ+ VYUa,W6&ѓ0L*08yPxglO308Rxg9^1l0L* zd$)>b #H001 0VJxT GV]@{JA{͒$c!i=a$c VY5T'趇$$c!Kk} _CE|BʧZcYW8 P%҆P)cgԂa[vMvMsm5Lo%cG۔`gX4}A4}6c>寡71Wob #H0;A}7rtLӧ\tLӧÈC_:TO90b1䆯ԝAI0`BsOY| C4}pty`]n0M9ᮠX똦Oy꘦O꘏= ƜV)yS:Sn:gO1Qf<7 iIx5yU4.51M+U Ӌ2_}i !LӧKV#it tL'K4}0LӧKV*c~Iɑa.f6_]_ܺ܎6< .I]6 D' qSLwqÄ|$a" p !cqM܁SB#1OirkhxɣJ}@J˄ '̸NE|&nc,ď3b) E3tv9af,|#L=B"(ƤD#I!vewgA-ʉ`z5X+% {]s6!RW6!R/M&bTt'DÓ%i!FF" i֟T9pH-ǂCx0,bΈH eIརQaKrôM1RXnZ}hBԗ,ʑqο oez6n`('BXNi~b943lx0qNQrk"cYkʥE5SnSw܀N" T$ IBYr싌NSR8< # FBY:iÖG:?ku,vL>$S֘)1 ؍Տ!Dy9ORP r|1Dx+踛mGfaM}!6J oW7DP$ ltNٖw+o@}\DXӧv5.vڀl@R5܀4qY\}LwEynG^0;чU~1wOd}RO# J~'ɿw>=>2qLM(weȀ[د7sELI?xTO87XQW򩌒MDƛ CmǤ]'*s`8sr`HN ; D'rO܁ᴅx[y]Ɂ3!Nk'—埑6 ѕCJ6x_?ه+~c1t·':Q}qCzMO ja5tz:fx12f&_wb6q[EӒ:'h27~ύ|t |,y8:式>䰜a9Br>|s2K?,bdCX} jv0V u]_.EBa~8Y&x5J6=K%+[^wwnt*]h}/UP4 Oxu5>^2C lmms-1.1.3/data/presets/ZynAddSubFX/Laba170bank/descriptions.txt000066400000000000000000000003711247673406200243710ustar00rootroot00000000000000Author of presets: Laba170 Made in Zynaddsubfx vsti ver 2.4.1.420 * Some of these presets needs unison to sound like they were intended. * Relative bandwith (relBW) can on many patches be tweaked to fatten up the sound or make it sharper.lmms-1.1.3/data/presets/ZynAddSubFX/Misc/000077500000000000000000000000001247673406200200715ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Misc/0001-Memories.xiz000066400000000000000000000044311247673406200227650ustar00rootroot00000000000000\[s8~sI`&I 0l,v_4-Ȭ/i+#ےdc;myjcs,'O v=!7E c8럷*n?|;}y%˚O?-7o?\Gq b Fdؙ #tѓΈ7N[\)q*UJ[YL{3 {dʄEr+Zۖ#K;A27G``m=ʃbPꖞ:B^א4şDWU% Fq͢Š)ӕtDv =, {UF)_:n6Y$ |/>ʹZQN`H]C,2"Y2z3ۺ\ `b>;RZըKP|Ք lK+`&r#56N_F:+v:Ç챛/Ί:XwrcB-!NWN)@7̗&2؀|[V*˟sQ!ҹ,Mw{\XΚ`CϮlę1&s~Svb|EL^ƱCόC,TqHo$ P!ZqB.^a+[ M0M T<]g!DDAP]e:D|{ y;ftfJ쉎]Y?Vf,J}eݮ">Ʈ6Kqa^- |)5כ48C@KYxef>$PBHE7VqX7ц2wLB`ee3I|v~XW}"q9ofz6_ao6 (ߛס-)~#aGj_DR07}PplрO$u.D"5XFD&3{v&dvВF)g-qMm# 5ysaeN >EKg$F.&Io:uFwq$|z;̦L ]9$sm՗G7y /dG6fDTXZ - {EfWC FݘRrOÕcYt<{͵]?~-h/WDmI&N2 gBlaJ$JNV+VOؔ)E^)'u-t)+XΗS0E)3FF{:et=Vv*`K w`N|9 O{4L% VwT6| 1¼9٫\8m+`|vREponMW%9O9lL" ,^]T.+yrt8$1=U m1bl1E̹"^Lrv,6fvtABxnH)xho0ƒ^߻8# k,1<4'Lz;8Մ3&n'ZĈ-1s "l+О/6>X^.(@qR_2|/閽VRgyͯ>Rߣg>%I&_>%(FI}6JF~}Vu!rP,p4aoM+گe=B%Z`2{WF>~HCvXV=,Ä_xiI Llmms-1.1.3/data/presets/ZynAddSubFX/Misc/0002-Bells 1.xiz000066400000000000000000000033621247673406200223720ustar00rootroot00000000000000Zs8~_3I:41SH\E#lgɤ_kCʦ 3}]jOr/?|֊%"Uyn~?_w܎nOnuI:Χ^\GwVO8r/\dTx5$]4n=4l?Z҄8[1Uw+ֱ\T0^Dhwc؛7ݻSw<ɽ"Dx$E982E,YBX$X,kkϙ%jbY[XG5xAʤ;vtxE5?eH, s6yYUl<ei!--ؔM?ԪJ<jn|3LV_30#',557@JE &_!Z!Dr lz\47-E:rImepq]%[T壶g4__.*'''(] > 1>AIjU pηOlނTZqhYHEoO5(nRKZko7@YKU&5g2ϝw8# gdvqfrVyk"H0H눤r"O[!N=y 78 0&`4V8AsJF#rM̖(K 0 I-ns?.&GwNBQ(C,49[E׀(E+ NYE$fg XOZ̲$ ]ta!~jǾlMU:-W24NgGw8+?`ˀw<ۏ$ u+AnZ\7ţjڼ$D$fEEFj1..]$ʇb1ʩ`>6HհIb<-NݠlI1IEa F_ɦC wsA"%`\)(Bud\aSgʐh<}2XYP$YC_8kc[e\wh%BFzppƓQ*Л rc9eLvg"!ge! Va@aBhj5PRU+:Ar: P8X۶ΰ'i) q]}uS:NEg.!)PEc8\h)Ӳa4<(X$qE{45oaVJWzPE,n+@+b 2uiov*@p}m*VUputWP$EjY&Uʝ"vQDÎ[/6' dݏt=laO pqW'Zox25] Y;U-$32}b&u:(O0Hr^nǺ-"ohsBY`u՝z6T|_*5't4 z/%Oeb4sNdcЏ#|C:sZ+$iب4 p0p{?Sa0{V*Zk-I":pƔ =ƔӉX.[!-j0<=מ4st[8Y 5  ͥaK'HfVYY.0n5(pFc j;iH6 lerD/V$oL[3EQBB"ԫaH1i죇| y/t󕾵r눘&QqM.WxU]UGg2;?B*zpAwi^i4EU3_{ʨ'!e @Y2<3 0I~], (Q=Q-q5$FW R\,Du tz'Th߸5j9:^M#zhDGF][ /6~DETȠCQ0,b܇ENѵș~v\}ܪ w:뿅J/u ַ5dzԓQ8ITEjp%* '/r?RDaCڡzA[ D~-CZ+8f`})-2LeVͥ?<;Wo3>i.,t|gG\^GhG|u4>Ϙ?;xY/ LO:xL(VeWwfT|P<+MeK(y~}oV85Oچ9&nkEb~ik0@6a$lmms-1.1.3/data/presets/ZynAddSubFX/Misc/0004-Bells 3.xiz000066400000000000000000000033611247673406200223750ustar00rootroot00000000000000Zs8~_LM̔(˽h-[loHZɄLYV~էذ8i}_7槛Ʒk]w.~p)7'WQC@E1xm'^?9є#81v8x4lLh7p4OxZӘ,o4`I.ن|E҄SxeI-u&`,V8 xGO*OVgHqq$db Ӏ|d–KH;6,Pͺk. um"ρDI]$ G͋jpdH͛U+ Un\ĉ,IF5)EYL~faUY+OɸrYTd8{<͠B 4$O=IrEG/$ٶCu Va"aKx$ḀS `DEte.\Sgd4:XًEH2HւU{U`+K0 od: mz 0WkgfSY_HzKXzX9mSŪS $[U+8jt<bˤڸB6Jq.>cݒ"% EaZ0g{+Q9$cN6D}4|Jm)$<*:xPm'[&egթ0680y%rpO^膑dE0"3tX̡Y'|=<$[rGJYq5 G bFI yJoi0c4PIf*VERmSbϨT[DІ8u{rPexZ$or,c֢#+Jrȱ Si a}WMʼnԔi8gQt[NyȍDpx6w"bebi@! o[~ 2DPzpc~8RC-xTf#. Ď+q{n3mU\[ZY]}jp'2SšB8 #[KK0WD5 %ѶqO &5*ȷ (doA(ɢTcn"TB$fx.lΪ a.l{!K9I72}X;GK^SKܹ}j~ yQ35-nK+u0f|WQ;^m U/tP# E/3/wQ$!0CJrOE_Y2((/$=O@y3_S DSC auOCAt]ωh y HiO`h(jXH'Qe%Ҩ=IDf1VV<EMt2"jռ@od=9W}R<˲+EUPX.rC7^5?dtjHI5 劏"^H٦Lܑqj_T%~Gu#q8-p#%V8P-T;^s}q<㹾>I~yF^Ϛfa'p=|ּN_?}:rt1vc7YN{.SRoχ߃pm+ή|b$0r`cqE uo: ɯ% ],yӻV8$B.y\$*-Bޛ7]S{<ɘ|||G%#fbȏQ&>qh1fapxa˜D>QSu3=R3-YHd:\Y21\v&瓄Hci+-ezn;1("ާ ^Ϫ"sNJ8R0#h'M Sg2&ûc+"T a1"I,2c?J`}},@ ‱ld./p],b! ʧ]\ Z|Ľq'%ĘX[I]-NjW,=\&ؙ/VY1dIAY$-#-b71"pɒ]W6*X{վزBvOX^ExDIC44Djiv2 B D #^Yx-'ZfDt=-j뒽昽{( .oOƪ-fū(t`QMK sEO"JN=$և09ɦ(5Uc_.8Q|wa5$}sP{/(bFn7pQ`6uEwqFydyaJ#sp+? NSYݢQexd'e"wL{.sPFP{VsYLT,Q[a-sF4xH袂f"e䛻d4 /-(u4N+k KQ`eP r<$BHf&5M9#"t ނ$R^BnmȣEea4\q[HߑHVy$GVJ, [ gc eV8"Qհnat/(Aa>$t^Ku. 2Xi⚥j71iOL4K+5K,!aWȦ z,EŤ:2`ʀ)6uЛs'aʴz L_ǿ/0թ/Fj?a nRIC)AuZw\1m7u^ƹNr7un1gYQod 'ڎs8C56 Bz9G~ɡ}an߷/}EyFuΎS 'ũ?f']UOqmo{k~+SE)=Rlmms-1.1.3/data/presets/ZynAddSubFX/Misc/0007-SuperSaw 2.xiz000066400000000000000000000040561247673406200231110ustar00rootroot00000000000000\W8`ywsX3UpKNltRҖ$7i)'%IW~8W=ZBmqyn;lU?^q5|V]ю㌣?,.Wg\ĥIɁX G,.ƕG-Uƿ? G7I8`G7P U EqXCxRUk&W3ΨsӝtGYgu\Ċ`jt!YhI| aq`:LZ84X?d*Q[z yCC'أڄ5a]S'`*aCf&.Db1iJ|tymo1(ՒlD|UEW?&+k9&0#iP&KMHMuΫGe&`+&Xa "LQ`.E اݪuP vSt4f6(o+42|RK'ަL:*59sMvz>%Yۆ ]= W =(\FԞ!/BYzTzaڜҷUnO`3/<zh)+ lw{=&; =/h鹱_f 8& .i`d6qO\)gZD| u%~lð9Alɷc3HW,/ SMg%ܠ?4vŔ{H^-gbO= \r.>@!b$ޗ?ۣ!) N@ `Eo;6FvjCw=BhgY؉Rys7c)ܙE\-D}ŏί,/,''2ΟE?Ѧ5[]y>w/I&qHq4? "Em3TӞ Ӟӟ jU)L<3`1¥`jŊDC\AK3=Ē C/ZsG 7mw"x lj̝j2bLi^Cɘ`/CEVG(I%ޥح:̟hC>uF7A2g+Mnr<?BZ)a:{ $*A CaR\#+9r'?bS7A$?uR$?"fGQ>EZmMr,ٺ(̼`іR.WJÝy@)jYơH VmKNNR IJ5p}a8 J\H΢e~RHIKKK5RGP K5 gRfO M^wK)Ǯ z,j7wlR¡*<b4ٚKqI7_TTS'L0eԶ3fl3yvkm>o;5&1 )hS`* ]?ݣv2}k K>dߋZ.*s?eǹ6~$-\ysּU`n[;8n/ƙTh/CyOdOڄn׽B~J>jbjiZK7eTKHVbqnlY@TKOk[ˢUItZI %}-o‹ַ#uRyi^kU6c4oʧTlmms-1.1.3/data/presets/ZynAddSubFX/Misc/0008-SuperSaw 3.xiz000066400000000000000000000037631247673406200231170ustar00rootroot00000000000000\]W8W;XQs93Up{ ʿߔ~$y¢Ni߼Mޯ=?p׋߮[(zo_G9Tk=qG4~ǁk+Ovk8թ^;tƽAo}y~۹ n8EQ@l!UKě qlۉŞ<"ll^4ݘq 2 v'ZckͳF%~_yl@` 9xի^M*vܳaKF6(Mͱqd%3. ԺMḶPd.$K`{@@\i:DaعB]>d^wWhzNui-ROdYNDtA"r)"c8-4r":\ZI@2G0U4I}K {xrN?\B>vmo @-q%}a5)'Dl }B ω2+H!v\v|%C [c[F>0ge渄N T=2W e Uh+e!. :GUkjPz=ROg%?,C88CB}h1#l!Efb3'T9]8x ' ^?s>, )NXgps+C;y_6lF.WҌ6L~@4RIDDC>b\IKzsHU#`7U5"ψ %]/Ky'bR.5RJ^Bp^dNjdN"-`!gF\&r 2OC%c0] SH r@ hB׻1Ub6 R'aA7vE ,eBJv͚y&U+(XWQw`A/%\,]2[(&T2,Rv0XP6f=BC/n i&V4OrLl5:QM?`-$fx:4.f@Kʢ(.ieoB[Vq|[gx3.c?{5)is4ዲ62}PajT'xeJ!j fZ"EC\aD!iR`i8g4]*M*)_ĉҌ"F 퉓 RˁR*GPGr*d+pF,xSm 8qIhMjVJ'8\}$A|o mGHJt@a mTy>V K2|RLzN]jbRc)Mx!#,Ղ;'Kj@.,D楒R@Vj,;TcCK tJUc7RVuHcJ4XJc)>ARGmP4z,EIC\ԱSLqGC>0L ̅ӛ|o [VsjUSُ '[nT&zoaV7bU9*Ӷ\ev;UH4WAi$WQ& h3WLX_v.4^/ KCxD4{&;]q5/ꉐUW)=]ᚋԿ;Uwqﻋ~/]MͥpaC_V?Q:Slmms-1.1.3/data/presets/ZynAddSubFX/Misc/0009-SuperSaw 4.xiz000066400000000000000000000041501247673406200231100ustar00rootroot00000000000000\[S8~Wy ,$B&6߯_$ɎJ9GҹӑO񚸞ЋrLX6}O'ˣ?GW/w7kYω}|yt%N2Ħѓ# <|<ĞG6w8XT?vѐ.zp1KrQ^{Q5{JJVe?뎻io'2<4!MbȣEo錥GnF:e#o}Z t-A&4 %%Y gj;0 H>33*iC'*'qo2vW%\5&PJd<\^X D( x.7J|x͡^lj+d,-a!{\ff=r$=\ n)$].c>`4cKް’D&e`%pbb KQQIEyl)[$;z.U&w&țcІXYRMSc7'jҎv[mX%WV)$]tͬ1̷䷗RGizs{)9EE381W"ajR%EQt)K{C5ӨOh8 ň i C)D]D6ӿTX P ,#*#B!2BK*!3_NtбZRGvE5XQZ(~=DFӬ+PW_)RIi=]Si3Cm-:cnQZEbv~5J:q\ Ҕ4n&=HR WGch^[{-]TUd"}驪~/Llmms-1.1.3/data/presets/ZynAddSubFX/Misc/0010-SuperSaw 5.xiz000066400000000000000000000033311247673406200231010ustar00rootroot00000000000000Zms6_A~G L9 p@:Mh-Bm񋤕LHf3^V>zdˋ6,07?k,C n/Ī 3K?>9Kɧ7ȞȃhWmZۜn\&48p<4"0jU}ҿ_$fLDnY\oqCkfIڿtyxSsp9q9cfqGTa a% Kqf5[hgs8Y6kCez|poy5,0.-Ez@6f־ld]Vu{;4ƊH=߮Y(."D0 SJp@U ͠z&ùu_si Mt`hHO"BŸl)o.b8ns>N@l'-TY.t6=_U,bR>ρ:|U:hw[(] v0LR1# js`S̨뼍L+R?\ֽ &az`]tzSHG!*8L Q]78BRqAHv= RkMld@xv3SJM|?K;,N=ĒUZvQHÔR Ⱦq  t=l0[:8`U={{F]ÆXA[lez{(-r!V-21A[*u'1)6!%*ʮN#I-^ej>KdUvjrBݕYC%K7@C`Ä XL3%Y{PXӠ%_dTTN3W9Hַ µiRm)(qjƣ&;V荆ٖ5˘Fph#D#FS"#6N"z+KQGaYXY 4}9'q/ |cR3fTM9{ jRU-fOYbCji'I3QxI# ~4a^mRPiVa5 Q4*Tm× 6zֲ y"eU]$0Yȿ">L'f(NuIhϏ}4ϝy8(Ḟ$ J-&4BE] t`0'aax?GzKaf0x+&(\0\VZFd 'JԱm&ؿGT RD,o|$sZbkgL(l+u# ʗ%2܅q2 94+l 9}Y5S氐sI{bF-.GwsQ*r L3 AmM!;&` r:ݷYЪoȅMgdm #~o0}DBGf܃(Xx\^1聤pa @zae\J, l-\vAk >z_kck:گjPlTItj6ZXNxPog΁m@3ѿ'N焆;\ò?탹!DIUt38k+2eC8wc,$߷ ƛVF6B+tlmlhZ/YUzڌ\Q71|&tOt;˚W[EM5*`z\=jML*S`amgQZyjZD-!E6\.X1olvBmRvͰr@I@S"9,]YŨNsSXKasd{.%}.NR j1_.lMStY0LjX$h^5,'mQPTqZ:է,Hf88gM|F =A ަ@ƍʍH0+5BEϓJ` En6eWkҔ-Sԗ8/nOӧm5FBQiꦸ=M麾du:SDv6X'&_$fpّȏf<WQM_)fڿ砯WuwU;ܧpW諸dףuWzmѰX}eGˢc>kvo}W.}W뎾v0BokI^{#^[=ޢcĽ4_[Wuyዴ^} [%о/B⻉mzϳy^=oIzl=uҹ:^rFճ{3F)lA{oW7աv轼Wn+ }]@<,'bhinr_1YDhIB(W BV:bmNDB1!ݲKu8bO?!ri^4ߺ1w>tLKz*[%Zl "cNxQoE$ NP0Wq b/@bOv!wjg "B=J1u"e s}F?S5 IӴs{w_g&S0g mrxRl[&L'2&~Fl*85kE'3Ec<۪Cˍ\+:K#Rz"It S> b J=j,4 \3f!!! -?ILQb hا[ jLpB<9H'0s6-0J ,A[)P}[#:H{ 55Z=+t!bdWfݮ\bNNr$ή/a31FLϧTk %vb9㕭@FNưb#ge d HM8Bݡ׽ۿ8<Z0]&# nTk'? [%v,r_&*_cfR6k澑GzV>,cLf~hjFw{7lpG+`&:~PC .Z}G+p6ӈQX<* -^xE.NUGXk!2Em jI!ҴtHҮq#űE fHk4x橅_Aӿ,jP$A-`]˗XOE!ĺ<(&|a".]8bʲ09[4n;% *> =wM"۵?@SMe&mr-2g5ǚn8d5H>p)7hԢf%o";z UWDP4`rcO2w57QR(g"v0Z2F6a1=ZY0Y3C} '[e(hO-,ZTtY4H0Xedi4EQ^ƪݩAFVs~v]% }3l T"TR& j-Und6"]s-uTV:}WTE9IBK6 5yl.V̲D0{$e* d#'gLj##cA$p P }Jr^S rCj9p-aea!acQ֡,%%Q=?T~Ǝtr\rm@ncrpB=@n !5}ə'|mZpkAaP l پ7ng5=/X=_[cU!_r3ĹJWq/hBCS _UC^#&u+֧/vEh]-x`Pph ^zYdsøB"/z\dy2gc2aYNs-L8\&iEҿv,}'jv];@߬.o3]n^# CyP0jq636S%4h'1@ucA& xvࠉeCLęs􄵵!Kx8v/{&|oID!4Ge'6٥xǵMYG5d/w<|`GܿO/֠>+im'fX9nm5g柘l T]Aj\eՃ4}ElS%,Ǐ91/jr "P ÈeS.f`cͬcڅa@ Blmms-1.1.3/data/presets/ZynAddSubFX/Misc/0035-Trash Synth 3.xiz000066400000000000000000000041771247673406200235150ustar00rootroot00000000000000\]s8}!0&0lY h,[,{m2t%L6\]KKK=/H{8O*GNףIUpoëɧ?+q|>}9֊| Τ?8BA8'u-cxdOiP2٪>θ:mw3e\bxir_y cy4NOhR<*^l "*ohX^T(a6[vi>CnǮY)D.5S]5'``KfK=QD8SGj&E2Q2i৖5 idODәQ#A$̉"]3OG{Q9I(!?,@\1fK1P/3(BV DߝP%!$K6Li #Y7vINᵓ-a`ْr_&*_cfR6}#o|K:oԇ_;9i߰#/VW\t#&{>8!A_ W`7ۈQX<*m̖T/J"<"ۥGEV7K}ZLQ~;Y l)j ѴtDղ;)~ޥbqdgp5뙈;a_uAgpe`3(0:-/tjm"8$ '^&V gBLY`=v,~X86{5\VlZM?dS*KԤRML(o ;Kހ5)QF-*VoX]pgaRduXcVL~ bGI A Ⱥ88dlJa3#0g `ڶ;}k0Jtdj6Hǹ5 Blmms-1.1.3/data/presets/ZynAddSubFX/Misc/0036-Trash Synth 4.xiz000066400000000000000000000041461247673406200235130ustar00rootroot00000000000000[s8~_#3M;9\E"M[aْIz<1JzrQyb~xUZaَxUOO}zԝ~Uڸ۞4[SdIz>(/}y6p?i` C]/0Ʒ`4V'tɮw`s ^RΤG:moO"mBђ>c;>Aތ4ߜ8![d|A诗 61K(e~^A q1$ns,&+װt|NO7EX;q`^pݕH"-y1w[rstAYԀۑ$Pe3g)HK]. ۊc_UO9LSZK $7|)fHiYC0:.6icЪZi8̵I)02hUC D2gٹ&/o(T>Xaبs{w3_gF듷vHjE]4Q=g9ᆀU )[֜-D`(ck JDB\[hIex\0[hs/=ױO][,ȣW쀎9 {Ͻ]cx3f9>`݈,euRMB6Qa3|g F> Z8.U:+LؒÑ߮_g;ؼftx k*ogg5Tq6a檏03]v.W '\9\,C4ҙ1lAs* - !YH2hH7~JPl] vӔQ?`$%(c+lNՙ*&@C51ġ*'oiQ7:xHZ 0Y~܉9N9wS$?:h>0H[A g#@H43HH`ۥ^[4dæͣ@[v6rID4pyT61F$-Yh'j ř SRLjZ:u26&ͷij *3Q3 CcoV"V,J8& ŏJp?A' ;&`CNZ𘀥sen.(5v_KBn9ޝ{6TwדC{Vd/;1ۏ/?ypMSٖjX~Vʏ|@ˏ;$`2^^ye͛/kڧym] ++o6[^{K1yOջd{.Aóg9ե[Nu)\S] T˄S9՗onW7$M0$J.fJ{)?FuHH@  \碑b[\=(JNkVz—atdla.ƒi ;@c^Ø .b1 T>I~yF^Ϛfa'p=|ּN_?}:rt1vc7YN{.SRoχ߃pm+ή|b$0r`cqE uo: ɯ% ],yӻV8$B.y\$*-Bޛ7]S{<ɘ|||G%#fbȏQ&>qh1fapxa˜D>QSu3=R3-YHd:\Y21\v&瓄Hci+-ezn;1("ާ ^Ϫ"sNJ8R0#h'M Sg2&ûc+"T a1"I,2c?J`}},@ ‱ld./p],b! ʧ]\ Z|Ľq'%ĘX[I]-NjW,=\&ؙ/VY1dIAY$-#-b71"pɒ]W6*X{վزBvOX^ExDIC44Djiv2 B D #^Yx-'ZfDt=-j뒽昽{( .oOƪ-fū(t`QMK sEO"JN=$և09ɦ(5Uc_.8Q|wa5$}sP{/(bFn7pQ`6uEwqFydyaJ#sp+? NSYݢQexd'e"wL{.sPFP{VsYLT,Q[a-sF4xH袂f"e䛻d4 /-(u4N+k KQ`eP r<$BHf&5M9#"t ނ$R^BnmȣEea4\q[HߑHVy$GVJ, [ gc eV8"Qհnat/(Aa>$t^Ku. 2Xi⚥j71iOL4K+5K,!aWȦ z,EŤ:2`ʀ)6uЛs'aʴz L_ǿ/0թ/Fj?a nRIC)AuZw\1m7u^ƹNr7un1gYQod 'ڎs8C56 Bz9G~ɡ}an߷/}EyFuΎS 'ũ?f']UOqmo{k~+SE)=Rlmms-1.1.3/data/presets/ZynAddSubFX/Misc/0066-SuperSaw 2.xiz000066400000000000000000000040561247673406200231160ustar00rootroot00000000000000\W8`ywsX3UpKNltRҖ$7i)'%IW~8W=ZBmqyn;lU?^q5|V]ю㌣?,.Wg\ĥIɁX G,.ƕG-Uƿ? G7I8`G7P U EqXCxRUk&W3ΨsӝtGYgu\Ċ`jt!YhI| aq`:LZ84X?d*Q[z yCC'أڄ5a]S'`*aCf&.Db1iJ|tymo1(ՒlD|UEW?&+k9&0#iP&KMHMuΫGe&`+&Xa "LQ`.E اݪuP vSt4f6(o+42|RK'ަL:*59sMvz>%Yۆ ]= W =(\FԞ!/BYzTzaڜҷUnO`3/<zh)+ lw{=&; =/h鹱_f 8& .i`d6qO\)gZD| u%~lð9Alɷc3HW,/ SMg%ܠ?4vŔ{H^-gbO= \r.>@!b$ޗ?ۣ!) N@ `Eo;6FvjCw=BhgY؉Rys7c)ܙE\-D}ŏί,/,''2ΟE?Ѧ5[]y>w/I&qHq4? "Em3TӞ Ӟӟ jU)L<3`1¥`jŊDC\AK3=Ē C/ZsG 7mw"x lj̝j2bLi^Cɘ`/CEVG(I%ޥح:̟hC>uF7A2g+Mnr<?BZ)a:{ $*A CaR\#+9r'?bS7A$?uR$?"fGQ>EZmMr,ٺ(̼`іR.WJÝy@)jYơH VmKNNR IJ5p}a8 J\H΢e~RHIKKK5RGP K5 gRfO M^wK)Ǯ z,j7wlR¡*<b4ٚKqI7_TTS'L0eԶ3fl3yvkm>o;5&1 )hS`* ]?ݣv2}k K>dߋZ.*s?eǹ6~$-\ysּU`n[;8n/ƙTh/CyOdOڄn׽B~J>jbjiZK7eTKHVbqnlY@TKOk[ˢUItZI %}-o‹ַ#uRyi^kU6c4oʧTlmms-1.1.3/data/presets/ZynAddSubFX/Misc/0067-SuperSaw 3.xiz000066400000000000000000000037631247673406200231240ustar00rootroot00000000000000\]W8W;XQs93Up{ ʿߔ~$y¢Ni߼Mޯ=?p׋߮[(zo_G9Tk=qG4~ǁk+Ovk8թ^;tƽAo}y~۹ n8EQ@l!UKě qlۉŞ<"ll^4ݘq 2 v'ZckͳF%~_yl@` 9xի^M*vܳaKF6(Mͱqd%3. ԺMḶPd.$K`{@@\i:DaعB]>d^wWhzNui-ROdYNDtA"r)"c8-4r":\ZI@2G0U4I}K {xrN?\B>vmo @-q%}a5)'Dl }B ω2+H!v\v|%C [c[F>0ge渄N T=2W e Uh+e!. :GUkjPz=ROg%?,C88CB}h1#l!Efb3'T9]8x ' ^?s>, )NXgps+C;y_6lF.WҌ6L~@4RIDDC>b\IKzsHU#`7U5"ψ %]/Ky'bR.5RJ^Bp^dNjdN"-`!gF\&r 2OC%c0] SH r@ hB׻1Ub6 R'aA7vE ,eBJv͚y&U+(XWQw`A/%\,]2[(&T2,Rv0XP6f=BC/n i&V4OrLl5:QM?`-$fx:4.f@Kʢ(.ieoB[Vq|[gx3.c?{5)is4ዲ62}PajT'xeJ!j fZ"EC\aD!iR`i8g4]*M*)_ĉҌ"F 퉓 RˁR*GPGr*d+pF,xSm 8qIhMjVJ'8\}$A|o mGHJt@a mTy>V K2|RLzN]jbRc)Mx!#,Ղ;'Kj@.,D楒R@Vj,;TcCK tJUc7RVuHcJ4XJc)>ARGmP4z,EIC\ԱSLqGC>0L ̅ӛ|o [VsjUSُ '[nT&zoaV7bU9*Ӷ\ev;UH4WAi$WQ& h3WLX_v.4^/ KCxD4{&;]q5/ꉐUW)=]ᚋԿ;Uwqﻋ~/]MͥpaC_V?Q:Slmms-1.1.3/data/presets/ZynAddSubFX/Misc/0068-SuperSaw 4.xiz000066400000000000000000000041501247673406200231150ustar00rootroot00000000000000\[S8~Wy ,$B&6߯_$ɎJ9GҹӑO񚸞ЋrLX6}O'ˣ?GW/w7kYω}|yt%N2Ħѓ# <|<ĞG6w8XT?vѐ.zp1KrQ^{Q5{JJVe?뎻io'2<4!MbȣEo錥GnF:e#o}Z t-A&4 %%Y gj;0 H>33*iC'*'qo2vW%\5&PJd<\^X D( x.7J|x͡^lj+d,-a!{\ff=r$=\ n)$].c>`4cKް’D&e`%pbb KQQIEyl)[$;z.U&w&țcІXYRMSc7'jҎv[mX%WV)$]tͬ1̷䷗RGizs{)9EE381W"ajR%EQt)K{C5ӨOh8 ň i C)D]D6ӿTX P ,#*#B!2BK*!3_NtбZRGvE5XQZ(~=DFӬ+PW_)RIi=]Si3Cm-:cnQZEbv~5J:q\ Ҕ4n&=HR WGch^[{-]TUd"}驪~/Llmms-1.1.3/data/presets/ZynAddSubFX/Misc/0069-SuperSaw 5.xiz000066400000000000000000000033311247673406200231170ustar00rootroot00000000000000Zms6_A~G L9 p@:Mh-Bm񋤕LHf3^V>zdˋ6,07?k,C n/Ī 3K?>9Kɧ7ȞȃhWmZۜn\&48p<4"0jU}ҿ_$fLDnY\oqCkfIڿtyxSsp9q9cfqGTa a% Kqf5[hgs8Y6kCez|poy5,0.-Ez@6f־ld]Vu{;4ƊH=߮Y(."D0 SJp@U ͠z&ùu_si Mt`hHO"BŸl)o.b8ns>N@l'-TY.t6=_U,bR>ρ:|U:hw[(] v0LR1# js`S̨뼍L+R?\ֽ &az`]tzSHG!*8L Q]78BRqAHv= RkMld@xv3SJM|?K;,N=ĒUZvQHÔR Ⱦq  t=l0[:8`U={{F]ÆXA[lez{(-r!V-21A[*u'1)6!%*ʮN#I-^ej>KdUvjrBݕYC%K7@C`Ä XL3%Y{PXӠ%_dTTN3W9Hַ µiRm)(qjƣ&;V荆ٖ5˘Fph#D#FS"#6N"z+KQGaYXY 4}9'q/ |cR3fTM9{ jRU-fOYbCji'I3QxI# ~4a^mRPiVa5 Q4*Tm× 6zֲ y"eU]$0Yȿ">L'f(NuIhϏ}4ϝy8}֚YmIb/0뿽jm{?St6_Փ .ќ/!<y40&`4hJIbwmb$y|؈9<ݰu\goqoһwgdZ"Dxat\Lo'gQFV,%A4X,6,"l`{ʂ̯e fO}H: <.y^鼃S5Ng{w8E?܀AQi)ŇNsݮwc^\f?߬X.൪62F@ĩEC!M8)0}̽ouDtiI(皏2 ALM=5je } ?z~HZi5]Qjfu2}>6v,eP:hY@xNc9rquPeDBϽh8!ɨ?s iƈb`Hb&΂ѺpWoH&kûH/SF|wq"!%w\)'vU$.=QL$YJ7_F4k-(u`(hOŋLR$lmms-1.1.3/data/presets/ZynAddSubFX/Noises/000077500000000000000000000000001247673406200204365ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Noises/0001-Synth Effect.xiz000066400000000000000000000037601247673406200240400ustar00rootroot00000000000000[[s8~ϯ`yOIe&I fl,v_4-[,{}Iÿ__t76!쌟Gҹ;WwzAAxm|:i<7nl}۞OÿmۣkQ؅߽hm'N`Z5"@zM&l_?- ]t~ V M>1yvv&xcsa橲L _ Pdor?8rC88E8*nB2Y *QHҗjlBvjϱ]j#i4/fcsȜA!K&!.Dv(m]wRQ2tVĐ!'Am|Tx;|Q2Q:*qH!lC^, "^3-q˱o'Il JOk&7ľUKPƑL4:@&B2!6<& uiG dE5VIyWrK@/ޚ$[1* dbL"Ok,'<3яu?G+T,rIK*TEդv]a+v,@l{.Fa/ePw Lj]_9IV4["a\Ȉê ,d pe`DxY*uM˵L|;cv{KlAź%_ϹrT;J҇i|$UBܜH/Ai:^k'U:ld 1+h f_%-G4st!q23GsrM>lŘq%& D@C3})?)h,]!D4UXnA3ޯ>J QZ BJ5u}Pz>Rz=ølC^ ٘M!I?+"r`I& F Ւ+b}ⶓ+НFM4!b.%zA@~O}fFfN̸iB=ujAA \|& UYwIBFrZ!7 Qpi'm-%`-SB~|)R5\9KV^, #$^Џ0Z[D[ʢ /7"/8I??O'0F?e eڅW)Uw|vZ=H*w VswbN^w"*4qП.OK5DFCdȧS 8bSp?G)X! nKGit~l=Fw*ޠ*rPAHg[4K^h?uKq%duB:aYOsN8\'i* \OU,|Rx,4/ Cx{&[D9w'CKT 1r,qQ@v҅^2Eٴ_pl;=7J=lmms-1.1.3/data/presets/ZynAddSubFX/Noises/0002-Ioioioioioi.xiz000066400000000000000000000042031247673406200240300ustar00rootroot00000000000000\[SH~W;*uVٗ6i$3ȿNAu(INtϯ b?75ia7||S{Njo_p&S&Z}, "\k#qLyxc?tQ#h(]"W1l\ (JJ4+3u>@=J%]ėJYu!qNseȒ4Q>*!Ut c>Y)zZl~6O>*2ԑyD2YnC2gПvǾwS;LSa0|Zf"̈́j 2MtK ;Z)rP Tx4.#@ۍS4b7v&_?49PP|I=xO;V| ĿqT|!ĘXU$/h~dHx:_bw~NV,K'UJ\E /Z0ZwA,1ci ˵;ҽ=tuE͞K~,bH4N uk"X4D3<1W;3]>F$%DB|ݗ <U/շcm H֩ Sz"ֽul^7?r]GTIt/7OV(k!j|$(\TfՋY њ+C^ ~t_l )P~ tJ% UĂ"¢7}JR̍i0PUӤeaJ}" -W#Zx":MS(E/) Z~g\ͦ\ M*%z`SC(M.Ls٣$xѲ) BߡR$tsXi䢨+̅JLkѣiBz.?~PN#56P\G-8o`rw'a{xg-fP/]r?] RP\zCیD b5Vr՚ɦҙf[驵\ (*VrOo4K hF"8C}D!q |'] 3BIC-ھ k6v-ֱe’ʄ%_Pj;,R*WhnbNS(NTT` ףf8$pmB8\%.5ᬭ吱ӑo  _ ẀQE3? W Xc*KPҺz"݆S?hؿ}:89b[ 1a9^(vZ_/ssιƌ!r.~dSg|#z!d O>.FАJ'aߖi0 'q9!Rj4 ;"+@d@L Z\keu[0MTKЀXQwNv9UT^٫: r\LT)ٶ^9cJK-m צT7@G[o`nMٶn3xӷ/w]E.WVxYf}EB/l ƹy̹U\,qb8W1jz5 !ƁqnUpjɱwvsy?7tsDH.*^{7͎`hIHJ$viDeeqz 7|rp8L9$#;)ăL<ͷpLdbwNO?BaX ?TG.%.eTlZd6ڶ/m6I)HKJ{=U),{fd4M }P+]MV@_Gҽk}0N^6Almms-1.1.3/data/presets/ZynAddSubFX/Noises/0003-Noise1.xiz000066400000000000000000000020061247673406200227060ustar00rootroot00000000000000X]s6}ϯ~O4$;N0LC6}K$k 6C,6'@::+oIFo3i/2w''7kO=S;1JRB3G.>yso|!G60Q['o !9$\v~# p) t`*{.^H{¥BԈأpS vDXm57IpA('I~-˂e :w#fY3 n+K%*$\1|'[d2O,ժV CJV,`=`A L*ƨq/0+- HG+ ϻ׆8鷐OSJ;U|jD,`HeA/@M14aD /ssBZ0ћOCVElx/Lh7Bz5rW)q.GV)fU QX,ٜ6RVp""@ܰ*M??>=uՋ8Lw`H+FmfTU)CH^k~# K!Wb66$dCY =*̓fO^)浥< /Sj6ls򾵴h?~ܰM M.]*`EIbKUФ,b0vz1}#H(M LqV!G0VyifO,WH6ٱm4鳙bXʿ&+3)+4gl4rRJqLMi-m}ɣud߷-z7>!w3n_Gd骣%cŹ!_v[gW!_w< yl\{X΅nw6t۝Dֻ?az|P)kSۛ%,e{@.Ѯ']S~ǿ}Y]ɟ:_;?_}!G=+x~z拋t5_.ZwA};K!rFg6άjܦѲ@;KqTDs [^"kGqxع~l"]K-kns+z^8io͉ʓT4_ܮn^l4?Ax:%)2-z-Gy̓.^@G0f~܂ٚfW=Y7m k%@ ;R<>iyа)'1?r}NJ d1YƐ,{'[FZj|n-VUfVnPR>Z*l9C`MU(lhmou6Z.b~9\#תA-Ϥek >Y6[ G?p[;B5CfVD/Btc5AU<;S|p\槮Yu0EO:,ʮC##w{ѫQ Kv |om{5OTcs28wd{fiTM3g\v,!Ƞ/Rؔ"U]nWח3꛲Fy-Sχ%fSn]R*mY --Ou +L:<_}(lYPoz}(n?Ypr;t+]ݪ(u)+UIl"Ief.5B|d}ML"jRhHx$V+B1kױBwʊ ;|8:V]ZN K6-7nTFˌzwj,o*u:NȖ//$$ڹΡe(&~QqA񙨕X..fDxR*Rs1[ט+қvT}ٮthswyqtQC9Մڨ7:y~clmms-1.1.3/data/presets/ZynAddSubFX/Noises/0006-Wind.xiz000066400000000000000000000020061247673406200224540ustar00rootroot00000000000000X]s8}ϯ:Iҡ1xƝf_42ȉ6 y8Hn%tu:+OQےXPn-É#eϷ_YnLァsǜ X'FG/%G(+F`h2ǎ7Nhyc8"K^P*Hq(Vbf;_`%NQD`(}^ihB"6$F$N#’ëNDk+O83< IӍ+st@#!AؖSȭ&I›/+`Pݛw/H&/<}eDZ$?mHE,q>Ie%*WexԄ@ ah nLax*: 4(MRVHz%;Mʼ}z@+-TAKtՈSX~FDu ~V{gG~FQH2(V|>kϵV-Y:AbL[5}Zq~Ξg#o9hah12-ȬN Ȁ f |WE\mI}@Lԝ|s3uL*2¶hif}O3BD )XÀwHROU!XH 2t(=EʹԀ)s0gz-鹶5Y^EmiiyX\ev6ץ;j;}A뇯⺊AD$erWv)s @3N-+̂7$RUZ P%U$d."zEWjP򡈪eThvgdԜ7|I)МD)\QH (DZ4JPq&ADSn6@7(-tB=6}V ͍VoF*$&})җ`| Zjx8ax9[̧7~L\zdA.5,-L1;=( y7Wi9UOҬ^<ՍxSHںޣe+ִ_f_)gj+D0J[,hXnwJAw8 <cR/@CUVhniٷ^*D"뾲?'[f VYއhF~mU$/3l3~&(= D ʭVu|{)m&1 %ZRmȖY1كF*? oT7!lDe7e_j>KdjQ-D]]Y!I`}n)s#4xpE1DhhZI$5g { 4^$ZŁPPm IƬ$$rJG0^;Lz31F1ˮoF-Cw@)7O+嶎mqZXqn(_cDb|;F}]@39(q̑W }eE$ Eq '!n^]o{r8IK,Iy/R,]Pq&KÃ;yl:_JIZDnaRsCgp Y34QV$6,i^7ITX1{Y" _Eyakeŗ`8ß4R y05ӈ^_  7q>-T:٢Q1)@sfRUN> ]b g?I`GfqTZL)s@n.nmeR5 酙>E^VJذ(xxӴ>6,t7yCib7ކ=ם%_\*5*}W֦lDDJG4vhchؘo?{x4" FHvӜm(V$ Q?--nsl2M{C{nOg\Q@s=C".5Y;E7OO &k/E,g\2GYbP"11ҹxBn pTLut`4OhG-Frߥh~cƓm[bݼ dIH횕 +$ RK4^wL%| 7H ¯@b %A" |c[QվD0Y1u!x:U2NJH_Hn2{?I%Xĸ?*CcwACsŪTp΀%20ܛǣLƌTVU3Ɍ1%,#O%A o{,*/ħGV SA)Vu.2EJ$.SLܿZŕ34uuS2"PICFV_b6@xv7xPQC!}>$tj b0THa~-*cEmz ٺuio)w8`Ru={{F]CAy=J%O.q)gЂ-yH~0n59iI$-* #z7BʓTUɤE%S2S㕷 ^Y5tYX0t-<F1Mvb$K.Hn\mʹ -.ks)eaW`NЇUw>rt ul<iS$gyɝUv14Ɛ۸#/dYs縷$2oNl0?i'N "eA)B.OhʹsqlɖxD[}l}8aɣʕ0Ks[U+C~JW1bъK]‘ AhXۤџxRh`~nU4xkH M=r(dIڥ/,0Dg*7M>:^!baG|Ѳp;U?_bh 33iVehC4#G#%|h_]>!)EY RI/jVR,Iqv.Y\}ᡀD>ʀvMԟ_SC(JV\$Tκ‰pAGR=z2tȽ7JRE#U4R\հHÏ9v"f*+dP{Q0Y2r0/gV ]\;Q.L}amː#&[Q*39Uki1h w3B֣3Jψgz>HVܹi޵3FjF IBjg%y_MQMZ;Ԫ6 fRX8H6^fmh6M4_Msh: g_1P:^ZKDg"X]~߾ e:Ubw/ċ90nwYLT ï=G;8#lmms-1.1.3/data/presets/ZynAddSubFX/Noises/0035-Metal Sound 3.xiz000066400000000000000000000034261247673406200240220ustar00rootroot00000000000000ZKsHW, 6TNPk Fao =)*K=~| _~~DGë C]/|j>,z/''Novm8py _\ }Fɟxa&l*I՚t,ıf.{*nNM؞,h?e}41aoie+PEq4j^Wwhz2$vCJOywV?F|UJ%\,dh Ͻj٩(!!^L4Kp$H"BHA/DdAIQվP &R7]Xl9H N垒,'ZJb$"\w1y.qz.[;Z4 Yu0O't?GwyKdHZ_^W'ݢ =g"P71PPʕҬX&۸\y+$T˝+%z¨"%KhH+ 0ߌ$qsPd?cN*K^Jo`l_7_ wIDz3ޖ˂5ʂ5ֽ5@G\QJ$,D j.$+d܏Z|xNS=Ypm G ER7'WN5gxfEؐeʋbBKAb8pLEY3϶([N;c"9w S*5OՎuj}|Qg L|ljG@5Sa5ft@ս8L|Sui<`rs7+nK\;t>cj$G0;sg3eτ8>(dx#uFwţTqʙHˋX0?PLUc7=gN305xx_3x{:  -ŵ`ck AELyYfTs 4"C${}77$4 H5&@)ILEbhTEv)$p (">Ei zpc\CV|ii<3/fjr[z.V3bfZ2?N󳈈!Lv6>1|>o@tgէ !#Nh=J BǨ*AXg8\:*KL) Ny2 ~\,<3ۃ=y:_\y? ť茾A'zxzV_<ء";.#-3o8 GTpH+`|B>NaDe4?&h #HkY=5F`$jQ]ܪ 8@* QJ5% `FhT uU 0$F !a繺>|$wEacc~ˍR:LHS1[F] jzGFenu/0z=8'-*֖||2\gS1YqD4d׭]Ć `> Rݱ>!p,"V( gO`H$NoH &dbGӐEyVK`a5s- J p!ݷKgqy^Jۦr8q"lB_. Ef NMǷa> z+0bAn/?3٫[cO t#a,>Ҁ #UrJC&hFc۶ΰ'i)fM*.}=\u I1ӑ^!|xA@(_I^ghQucMuiU>V;vuŅGVD]$lUl}a$-TD 􊭫RUj|@|)d$1%ZؚnjXqlj*>h 6,IO2/O.65֪25kUUiC%k?N Sn()]')J* <-sіD)y+kۜnTp±iR]]2Y̦mQ՞^x Y0li5 4Q%mn,zV:scɽzvLp&`dۤhHZhԞԠ/9l q3h+Eq/6f%. uy$fSWizԌ )C󘱍!$N1\Ǔpy}ƍ6m ͊`Nd, ^w0 Ey beVI 70bIBP3cm.TL<pJhRXЮrFs3}YZHp,a r 4L p湜P= aM<+G[GwF#؇:ԏHW"q5r :_,b;׳vq.( 0j[1ZRy\ϩZGGc.>+=AP̈>Hv¹?~TktQ)R+ɕޡFk|i͸*im)SDkE"և鯶%}X[kQL})ٿg4rQj_X8uώf4_Msh/4̓i m9^vax7xbuvuF#v]*g޾-b1wnKmSk?{T,&xWF v#lmms-1.1.3/data/presets/ZynAddSubFX/Noises/0038-Metal Sound 5.xiz000066400000000000000000000034671247673406200240340ustar00rootroot00000000000000ZMs6W'2%33MM4%G;M/,&$$AXZrJL.o.@]G$_wǽ#{⧫jv{/է] W&x5_ Nњ(=o]̶(ψq;\:^a߻+w CIJƒsV DJH8ciuke OYIJ7IRCmHC|hǾ_Tt t\-Jd÷S/bWw}O4~%Eqζ4]hTD2$d.!2ǥci*Qj(JIHUU: b9vrxr; z}rE Ok[= ɉ>fb-i9qkJ Gdv?X&ckCT4LF WS WPeX͚ #2(0+VyVa[t?"\, (>J/PE[j,3v2/~v1` hKEXb]9Y ~2ݐl2ݹ4e, VI9(U΀$Bl€%hB*xb:0¬`dž &L pkG[שv Ʀ!j(7 ]QenjiBSftgbMǁG"d >,dsP YɲWkV:d'A~]=Ռy07 ;VuQwjfa =I=}όkYխ嬂X`dn\“Q3hV6tmDDD&á{ןoC|Ԙ%ynhjpCܡq%DSyaпC6f$lmms-1.1.3/data/presets/ZynAddSubFX/Organ/000077500000000000000000000000001247673406200202445ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0001-Organ 1.xiz000066400000000000000000000036341247673406200225530ustar00rootroot00000000000000[[s8~ϯ`yO!7ftXb&F2KWݍMٴ맦H:7}uݴ8nN--v_?]v;.m#vux V[0ڴd4o }y.n? n M&<^Cd;s< f{sa橲L _  Pd'xoN"88E8,2Y J%Z:[$SCN-9[MUwd#'ޜ,2gȖId=Ѿ+4㪓& Nn~<7aIP-*{B,)_c=z8R! 8,%ç ;bؠ,%rPf& `!Fߍ6=&vБuFB9/')X $|F?܍|6$Ŋq-Ę]!p.3xzJƙ+! Z+oau&D* -IZ\*]EWPa>Ķb`{іXjYsټ>r.}O73zNy-QB2 'KϷ |A0~Eȗ9veNdiL16ҢnO_geC<-y,gL5,}x7fOKh@8]1 vzFM}.t'Tu:;bx)hVF6-D4sL!q-F3Gs26 #ִ.APgآSHL9FWA .SUV4YYi}0JtfRM]+Շӳp'umT!  I1{"dBX0D+W'!6'NSrCLX1}h}+hd;6%[̌E@OGz.UKkJ;mz|T;}̜O'PZb!Y.,nG!mF?Kr(? Y%s*D06 i\ n  REϥa:E]ڇA ]V7fm* ӟ(y Yʔ6O>EWm DɃ:"Wj6?ޜY,:ȥ0(g"^'Dn6B?rGۀh@J%Z:$SCN-9nFg9g W&!.Dz/Ӻ(:uoynlÀvTطCL)sϑ=z8R! FsȱZ8,%ç5[bؠ,%rPf& `!FF\aY:d#t9/RH +ipp7?j[+]+ĴzFkr- q*gak^BeOzf":̼ȤBfixԮzرX^a, 59lML9v>B/3xNyMQB2bY ( Ϸ |F0FHYvfPdyL_clZEgݲ7OĻӲ@V}ݖߞqt>rIBݱz6X/UA>[>Єg+(Bp!>(=K/V'^缩yVD5`8#]qk-~S=y O,eiV7'tS,Kb_S,ްڔbfC״Ca:5Gz~QKk*嬁; w8f 9B-y21kKzSJ[]F?Kr(? Y%s*D 65TKr5ZO $dKF-z. [A ( Ӎ--yD6TW^<MďYʔ<9~zV1QuTx:`%U6wԥR,3+tѳ4E8bINU\ 㤉)*BCOk !/푔3 'HI ODL9"&$zմe]S3ߺcNݬCO܌hIdU֡mvE`|=zo`{ el;ҷ=ʝlDnn^Ajigo}@:2:sA?@>t_T/b;IdM9<*!3+iOR +_W`M=p7*w>輮vxv)b'zy\urY:mMDWi"Os~?U6^iS%v4 zz=5i&'w>`3^/ KCxD$ Q7`.áy3{tL*T_P;>%NЫbo{IT)ʦMZ/VGlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0003-Organ 3.xiz000066400000000000000000000041411247673406200225510ustar00rootroot00000000000000\mW8p`ATQ g8/9 hپMK:Ob{sӛ^|~Y.ۮsY3>c.kyo7ɷkcYב|up/Q5vv+|#&>~sxEz]g+G]:xI.ksĢ‹^uZŦw]tuh+K, ZږE;@v@>Zَx8A~+6LpxUID>WK'ě qlY=IPcuydpLc?tE,Qz3jE=b#׮tMw͡/Hy+1KiUdk,j>Q,Q3OwuY;(!~\p.SMha ;3烶~5}q'ud|QAqvnn`E0^ SI'7|r4IJv ;uLYKF s݈3 Y^miL*0&sg v&cK>ynlw{;ʮ;Q?qʵLs,HN&;~2u=X# }f_@,lejVDld, uP{ZyH>H-8BUNN8CHAY뢑w@u VB)SBQχrX$>a.| 8Ш4Q<^;?@ @~` ZB!:?(-.pNpLm.;@4$ ] X"_-1Dh2fEU Š*"5ʍ_7ͳȸ=Bƛ1{i@iWHc5i\3.jߊ3 j%TȸB D꘭xOĮ\%X؟`ύ=Wj mV;j jY8AEn`ѤBQݫ*n?E9#"X<ۅM49, ٪zO[*쇨 B>Z^k?Mj\LHy%NcmҪfMݑN3rgjkAZ6 ֧j}Czc"3q͡m8;]f7E^K즹~q7eRq8>g˸l9eܹ2^Ns9YN3E6ۿzoTo"kH?]zIT,]dg|b!EAs-|3.n}wq.S)ZS?/^S1`}Hlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0004-Organ 4.xiz000066400000000000000000000036171247673406200225620ustar00rootroot00000000000000[[SH~W;*uPC 8/]M@f#~;%$5'19}}n/ώ}a0 }6Oz ˴"Mt1tWB A l]+ϬDs~ g\߳xŶ0"Nԉ42Uw֐yߝ oX~{^-fL6-,x7vKh@:\^vT"NR$Pc/ ! $E]lm+eu:bh !)ȆeWe#VBM8-F3G}rM9Li|.|8A>2EcN]B2r:=d>˭Ph³‡^i}J냰fRM^+Շnob}q.ۊJ0ߑ6DUx4"g@d?P 멫ei /l'7'tvS!k)R ?ԛ ۉMSvQ{-S* J슴lȥ"6NE ڰn: zLR&䡀Tωu͇uyTag^,kQdv?b~AY5-wT-Y 1 ] [BF$!4KC8k)m,tOsKZIxe|:BU E"#Fk oKQ$%Z%k f6mSP;HE;e$vnj!fYU@r$Gf਺Dj"B5[K[ Id_ŝ0JR!=ԬNqO~&e=rfee2II$7RD&$jj2ndZzCOKvfLF;痥%ņ;+l^7u F A)oPwA݊v݅mAW~#i+BS*":;—|^vB/)5@W4׬n/@e 1 i|Z?gnUJ^#ʿV2GM^fwlޞU8{0]Ah 3 {$>!7BiNINÔXNX\'di4 z/j$Q=͗o|<a]jovHNNԍ&wxF"JAH?L 쬠D 'N:+b{qT)?R)AmgL<lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0005-Organ 5.xiz000066400000000000000000000036251247673406200225630ustar00rootroot00000000000000[[s8~ϯCe&IM̔@:}(Xf}I¿__$>:M,.>'G/kƧFP˳:=L'竣nFokڳI!:2}'.Lk?qhHp?#+O8Z֘?ѐo}yc]rYk.PM{JZ塿&&{wOe ױAhmr?9!q">rhKhX>*Xl "40K^:]"ԈcN,9[MTU# NSgؖY=Qsz %N]<7a Ip,)[c=z6 bf5Լ;vZ#KPBpLt'K]n,ĠC1*7N BmzB즡*gM _ 5ϒww;>瓷d) 0,rvDkĶ]#Z F<\9 aU$.#Z0O]:1= @sߋV⾒pÚïT#w BsJ,D,DAodaEk +-b#, ߳xt(aSϼ,ԉ4>zUzF|yߎˆ;xxAܔHl׵o>i\Onf r"aq}aNCZQz9hs_ #]NA8C@Jle\ @ˣ!+ S@ El`Ajхby02ײSYxvl|몮@e DOxQxp^ZoY TgÝCGg0nB@$*4r)* J6awR!FjɔHpH_\0*]-(-+ijbd.t0b(XX#͊zԺo] T)ko {NaHf4`@VB>$mǦޥ5vA+H-xb456'aoxi/`Ø(qڬZeObji;yp&2sImlωSV%4,Y_z44K+([M =Dhr=Nu?X[(Iń\.²(z%tì*O Ta kÔq}p-+K* ?,D7(T+} cB%[R0 ~`Xۘ'wr4b+c. eBVW"#k *R:{C+F2ݗn4\41R6'9kR/[Age!6d;_vG0uԌ:oea!˪4pPD}m*ϟVM<O8ibأؑF`J푒33'AO@?OBޫ-7Z1 V@?f *Z aiA*긛HP?G d;@ |4fP /po|>XlC>RnTr,=@ pi,/mgl<`ɴ7RB$Vߕ~%w_ I5w@R٧Mʘ2NxΘn1w}L 撶r)_ޅ\O.P{?UBOseU²*![MspJWܩD4wM3W~Yh_%Ld?y=#*DHt?ш5[~".:׫_&?7QQvYX]gm8lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0006-Organ 6.xiz000066400000000000000000000040051247673406200225560ustar00rootroot00000000000000\[S8~WyIC`df6 h$nc; Uґ!`KO%z-׹hh1\ri~$|sd_K#s=XNro`]b##vplPa4M!o=Cq׻N@OL Um4lSlgo޸wO$Q3-BR犴X( G+!/>mlF *PHҧjx[!M3أk 5Qݔ4N[}8MA!Imyq9i'Jܸ,ovdC_`v+y7R? #kyvMĐI'#jF~{h(,%kjȠ[Y @f.-}'k`}qDn:N>h蠢qpY0^MS2#nn|t4v-0vt LGt +X#:tԴ:Qg, IL*0&sXap ٮcÎ}4p, >ߌt9tg!g!#ZVYD2 F. b", ߳xBziaɪ4t5#;.kCt)ᶜcUҳMz#8-cuv@R'G)c/@)3)6^- Ttᄣ1$K\lp{)9Gآ?ׇW_ Ijvpad&EcC>Bd\9Kz>nC>-Kx^x)Zi}&})AYvq9mt!vC߻@@7 *ApC!E$I="@1p@W\-KK0h 6H)9)FœMS T)j{='}U-Iίg5ޡ>;}XbiW| Rj,=v 2#ş9@oX I؅MRM9ʊ0%]TKr5%%hˬF =Tjp# Zr@ hF3"6.B.Nk!*ī5cREI~Iz8d8yv4\E;aYFjLT*VݒJwkG#hfUw#M*Ѡ53):đ6G3,rm9[EHE(̋8o>SQXHq=2DCHt:pڝQ/QE[K*1EEjLIE R2g8+\|ykh K/ȸŠ;52_DX50 +xOVO ]O |N!k= _[5~E/5[!vk 7_n&kbWuwu ;j>7ҽWuKۮ,wk–_ ٠nMl` jD^{&`?Lx++a IWGxⅭҭӭ3< ֕tϵb6QпYq+3އػɋZwwh,l>ݲ#t&\fnawӼk7URqUB*\MsPBU|j͇w ;P{4^/KDzn_.~5vJّDHX0g _P;Uw18KeƛϤ4YlGlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0007-Organ 7.xiz000066400000000000000000000040361247673406200225640ustar00rootroot00000000000000\s8_=%`&IKs tQlnOI+ؔ\O!j-~^f}L\r쫆qJl1-{yxz''Nnv4g3^Jmgǥ\eWNA8W1 |:1|la?'|4EO>\5W(Ij;&mCt0>>6i!z2FEHbC["|7/<:ł+@Yק*{jdy[AM3سc-5fݔ4{}0 i#8f\MeKŇvۇۣ:nẻMCDH{rDd`,7?Zpa;4FM,:S.6oKh$+l2KL{v,S%HPOGi8&.jsըw&&>EjDC>NF7z强4n`Asll4#GgX I؅,6"&sLDal YkTKy -b{eR#dv3v,> J삦ae+7~YEFVwy5 V)⡄k6 kCTbg.U$,WLBAO_QCp0*VKRޖl"!6? Gq^ M8kYXQxQm_2WVBQᣊHR]x[2a,@Yʤ(/)ZP*ƊK1OƣƟv-fUV2.LA֭c}QƏjy,x$ʨ $ n{R<TS-*`LErՆmm`}B͛`ZX,ɆO< FvB B%JiɯwS_v^R7aVWQQ&fUhtgyl?mųlA!y ѧ7HC}kW&׀>Ij@ߨ}N&Yyl5<$ 7~-MaW}:v[=~>k F/wy5kԣaXk\.u=k&k _r\`{{ג]X7_N*|kQi﨨,RgZ_BjL G.&cg[ :*z e}$p,,Ol[mVw~#`mxA8):i&:[qL} t(?V25(*KVi.j?{%OO%[X>S)qvLa˼<8s0URq:@UL*\sSƹWqULܨ6iP{=7^sD_(*}8oat򉉄\D́{-3)FY[,ڨ[pLSrg1~Hlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0008-Organ 8.xiz000066400000000000000000000066121247673406200225700ustar00rootroot00000000000000]]s۶}ϯ{*[Qmyi,J )DꊔIȳai>rx]^?N\8pV8|ۯ͛wO?݌N|scG7GY}o_j' Zb;\o he>nW.'w̼٢zUhѴCX*նXzMx)&")WDMZߒb=l*>e{3kmN0fW!чHg|q'kxT*H #weԎo(ؕdgc݅kb3(e. T;MrNMX ch9BIuzCr]蘭z[άxrڵ͒f?uA&9^!Qz9^G1?3*b.rܵmt cؐR?]بe1OYGdl3Bqn"$vߏ2q/o 2 uZJAϲI'Esr,0˗Qnpb WSP?hK*m™vΣڪc+UMpyN!eA,]IvqžmQPfv>ru)pUAII㴣l%bѶSC졮b+Z۳CHGXOJCLZCڋZ=LHfOWkɪk:{)sV~$tZvt7gӢ|XuőAeeT JZ9`woGb mJvd#!LSAzV^6RBh:UڮTvC{աAu(Ҧ} 0 TÀQ J5 8Er6`UÀV ^5 xE~ʲjij\lZjeZjeZj.BۀWm^ x6UۀWЩ.g^ x6*c:"QNJ5UǀW^xk+:WkKWY=^ xEـW=^ x3UπWPY}^ x7U߀W}^ x7U߀W}^ x50WBZj`j`UU~łX0 Fb\,#z%`X0" F K#IK_@;  sr`0 FG)ۀa<0urz"< K<1, -aaIh1#%Je0i&ab)@'nri#<9옖x0`ڜ&ANy ƃ=0Ua,9y0aS\<1m1a;O^f@`0N"=`Ɓm@IσؖX0a,1#q r+E1`0 ƃt0ƃu˷a\<0cZF caD| )d)@Ч@He0N"~h9=O7O|epS0 FaLˀa\d@`c 5OaiR4Oƃp,mӧs ƃØD6bc4QL}#qK(X[ȥ-HU-)ULȝa"âݑ"bqX8,R\-"D^|g+rX8,9PT=+g^z]gh7d\lBQlBQl 9v rs"=5W(m@_R;Go76w\>: &V?O0ZKK5pIo/TdJm+R%ER&o^~^If^١H VK iw‡RG8/`iV{Jʴ+2,ϟ!,y}@7xLR/j旵Ú`, ػrAW R`-=1KS%aIH m% fKmU85C| qEឪ!`"首RlSwVR yAVZso [vU32-,V -hU [~^OWqFHg -%gU+\JyYgn[QZMTyYVCRUSG >zy7$+y93) R_1&̥Dr>k=LXO6%RJ)Q^VrSQ*4dMȪzjSqeU$,_a:N('K_W"ET&7\}{J/N .3W;- ئla!=|x Zbaz<+HZ&Vx!U]GUܤ!LSgm3_[VO;k#u4_ k/8߁[UG5q.}4_snMGG0_a`,ߪuO6h[ڀ^Qca/m7:zA5eOvo>Vh/{P O~q@Hˑ kWS2q, [jݜޔT)&͙ AIy.cg(ʿ(]Yr_AXDЅV=" 㮆j5t!6o Z 2=۴iSv>)jA9UZHV!t>C~XY>谚/i^̯P]~WdkX))|J%Cߒ/Z/(FG6B/gw3N-▍v˷E]o!?m/xؑtlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0009-Organ 9.xiz000066400000000000000000000036141247673406200225710ustar00rootroot00000000000000[[s8~ϯ`yO ftX0SflE#lnm U7ؔl.O!ёtnIj r=MEf^7_NoIYm=]_:ٝ(wnK6OF014ؘh>7a`6x8>ɘ@,ll`hsomt4mMTܛԹ:=|0|dyA.0绁_z @%Ҙr: *Hҝ|de8bj%i4ͧ/Ox8!S&!.Da⮈Ӻw(;P^І'Aoz7R:>(#mzʲuC:q/SaX J -1mhJtY/3V0{}+ā|$tdlE `e<$e쬗HeP$)t 9ctVdښoW*X[6W:x%R,̰n|-]Cײbݶ0+U&fTEfF! -:uAJwCg*Z0:CWbUqy"nA3ޯ>\@HK! j!׳ap\INz.[`8z$  0'(v%Wŭ']ХFZNI݇L^PVX01ڡ`OvP#y=_axJ=;ŽЪxo`|њɸ7l.b &'Z{g]JЗX<C3^}`{AA]%)مc!csP0ɶZڙCe,:Г-Z\\&[@ݨWA `I6!UH_pR!Gy e r '$*cPZW kv5 ^t).챁.O,սj8TyXD=-eosu'0-fwb򶐩yT';!ż|t~nQxǏ(<| s0p5}b!#vN2,fӢ_߷{ݪx:M>IW_+ B Ia˳]v;ṂWkۓױ #xJ|;vw/ Z􉃓'' qޜ yC]7\\vy=\qhJr/N!QFA" W!il, mJD@Z:$~pc!:TuS6`8ᔼ #CL.`f!>2NKQ 7&F 9 h'i_?I'iUg-xe6 f0GaDvmen10`V=hf !BmyLf#d-Eڽc$+u[mzKdEK1}1B\LW,'Z2TҏoϣE-}r-9LȤ":ix.`zر@!^KB-kw3 Y2@~$ G‰Htp!#v|-C,'/ D0J'nf*:]`B-z}ߎٷ3%]@ }ݖp|7ֵ:T`^숯I a,ID CD_z9nӠb҉bUΪ4#!&A?-aYDF|MS38|>ޓv(1SՌ0AP 5oԩ N_ ,Uc4Y4._#u+=KVJygcE_+ T/,4t/@.ALEX0Bs/CB凛-:O'i$!2gVb6%zA@E?eY Y03ڮ@MSL#y5_ҤayRA;$YRRgPFUd4{!h3k/KCPa-*"C-^h9KMRk%q*D4%Y4Kn5+pV#=VѤ7&by9&0#KلҒT·QDxYKXC9m|'SZOWuIkvZ4;' s^`I~WbfgQYd8G'pH/y 7 -N8@ ,[iKLA}k@4c.` / fNqmG .-eQ&l7Zb+CCkw|?z _1F\(%e^EY>QuLUPOꋶU[g^uG>كh(*G?f>m$ER#$V)WlRd \ T-D-œ‘ARERN4XwNř䀥,ivøX*_ X0;0Xg=XBLm/M'žS^K|@&;N%%<$PyTJkHr%!;),H"2߄(Lc ۵>ZEy[|Y{\|>7"B*|v\'YNX\'di4 z/k$Q=.c䮧oCvj~,4/ CL$kn-2iw,=R!U]ZS;ц+j\l .q}l2dS/&:lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0011-Organ 11.xiz000066400000000000000000000040141247673406200226260ustar00rootroot00000000000000\[s8~򞂁$0glY h[[lIÿ__$IФM?%cK|>.I:wQ37jGij|qݻ?F;ߍ׳cG9;v?ZkW5:Dwq֜ ]rQsrARxZ]Dȉ Qv 7!lF, mJD@tG-N@o)ım/ZG߱[j.i0LpJ#.:,]l(c0M(jF  h"\ɰ $٨UoÑT=2]M'y f4GPB<$v> mCa*@8,(uɊ[g{!/Ki߀0JH0B?_S{HW],F؝'Џ?-?4r]׃bnHR㡅i$O #2}5J4]>$-Xh̹fSE~>DzԺ]~XS\ZЌB]\`Mt)"QIƧF_SOhgf؜a_<0IOAܻg.lM B@BÞl$-L*%Dv\,(X0op2Ar9iP PTFpTn8L`Y \pEؘaZ);P0cܪ(r8iKoey g9"ʢl0WC"* ,쒚v +.h$ߎ~Lgo#y*q2LT֫JjLZCwN:LlzVwRBKl %R%'&-z6QL$#Jnqh졧l Bo$dS1чS@jf54[SY3#XF s_&%VE;0mIDzC} i3НE>uq~6ayMj]yR kALuman3Ř[ؒF sK){@/ asK@_~&ڔg*ےZ7_ex\j)k3+f8 CWc"8cP~ ]*"`YmFt5e{y,ժTKR@ | \`쳖^X*;RR/n^5>] fKG^:3>/U ?CI ^P-]}vzJW]a ق(,E~i.0eX4i'd>἟}B}?^0;wHLSerih\/g"PyAO_SHo!LS}H!F4|s)nuOqկei?>UI?m0]Llmms-1.1.3/data/presets/ZynAddSubFX/Organ/0012-Organ 12.xiz000066400000000000000000000040251247673406200226320ustar00rootroot00000000000000[[s8~`yO fv&F% ~E#B7ᩩ9:M>I>|z].jm׹O5昮e;wҪoÛׇnӱqĢO%zοN؈<4"l:eǹ Pʼ[9NZVlg6oM'`yC$R8f;Jήt%}I[?XXfe˛A#$QfÖ*de4dݤ?l~E9i!D:o4P3(Zah!m|gkJ FJ9 \!hβs{K_(D 4M26Q?yMgw5l'A罢I\zf ״5Ţ1ǜY0t 0KLVjEdHN& D"[0 ȢGɡ0X/P8ҬWo[sHy:C vcwM ZGwaxt=Óen./(q.^qDWѹ_xBmO A:HP`[) Iu5!ς }<"ިcwp5X,-t3HPEŶzt]@C>C(㢸tť/-8s*cq6Z%*2O)hh l/9U׿L^P1Ut|)!llzT*~I O/Jx [Pjx^DM4ޫSg}"!_ũ$89q{wJ$:I;3Vԭh6_n={1[{wKak@\ߴ.mlEsG5+c̭NLjp|ӿVl-'~)l#"-)"`eS v"(Fcy=E`ܩZ̥eɢʒE#|όs*pX '1ZMKM8M l#IaP8b' -q+!!atV@Ys{\j# fqEW A5Y˒8q`84m&~MtڐY98cxjT7@N'*UZ),pp}YGwRV P$wM spnh'bI>|J]y`,, ;^68v*DXiW?â=hUn661^cv!&9Mˍh#7zQp1oe|ļpJ1yz&Bro P( c+tJqv`WgM,ݒ*:Y PoY#x84AX'P`?V= HoWJy7*|4tW57).?{E `=?<-;j%OeOV^ꈏ76,Г 2UWA͋Tj+n5Օ⺚J1_MuzDY*nWjJ;6`>`BH)i!'m\N7T}Wb!%.ufc5J҈&!SWn\ۥ.ь3}mlkviJ i),J%-M y5(E (FpxöxMj~(7F "no?V>lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0033-Cathedral Organ1.xiz000066400000000000000000000037551247673406200243740ustar00rootroot00000000000000[[s8~ϯ`yO03lY h[[[f}Iÿ_#4M<55Gҹ;/x&o}h7iuq1:l~99v:\|~m4S >:1MĢɓqux}7F-L8Lx2tzr]AC[K5 }ba;dOl1ٖ<\G^_y,Xأ).bEW+@V@m,^>rI g9/`*0(җn86bϮeDuK5x2_"u-Hj͛!ݘz+LV"o7o~7\'2/Ip -(}M\& d~@5BoXu'PB(~X2Gg2 5(J. jߵNDOW4Tb`BE ޢ7%D ,)<ޒYkpp7^<&kۍ `JY.`=5`}QRkq6!5ֈ9U.r"X´.kR&Njs\jtJ|<7܈ K-O>w]GHn"6%jVu#?lѝ x, +Zcg31Ngy&~mQ6 yY(i>e 6gЕ398nK?:u-x7+\7~0/G9d/@%r7wVUtpe\@å/! f@ hOPI EM|1\AϲSXfB=Kg‘g9T Y T˯+ՇnׇN]hw6nTu&EItB,7JY^q,~҃ae;e82ҋ_7Օ4}ã XP=Z0KQ {V$iTώxYHML.Z3}> &Ü|z$?`Axw)FnO 7,OD>X>1eE[,uJcv}rWC%=wkF*O_@KFdWa_-IE] 2'q |@LD'9lXw7 AuT,X2WYdv3AK\b1QjӠ,GIJ8UT,#]g7ōBl~aGy@43ܜI767R/T֒! , M ,0^[-UQkH䌕6O'aDg;rKnmeNjM!,ȓBgea7mS͎Si`6zY,֭Q=ݬ̻'w^m{)oHi+SBp;*bzH'.etkE,B)fd bUjd)~iE\[\>5myz4OuDyrGrUYVްmN \t_9ПQ#trSic4aT?v9a]\]c#~_m¯N\ߩ_!rį I)e~z#~=ԫOW<uYzW'_O$}v/_Oo[𯗯Q{_:Z+!_.rdmv:T~G׻;ݭ;§@^"7;=SF?Ls0uB/R5e=uB:\OsP9;04kg=cW hP{4d_A.DvI\裑>\D)(癉Xc7Ԃ=w2K'ӛ?8~/STM"n9|K>lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0034-Cathedral Organ2.xiz000066400000000000000000000041041247673406200243630ustar00rootroot00000000000000[s8_L%f\9 h[[9$?HZƆƬV~iղL+Ve#)3FZkHnGk!/\'(o|:ٌ (KT%u[M,@"o*ȱe{vmƬtxo 2?tDEp 7ǎ~Ո uM僚 LfM2A15oז.>FE*[ ɢzC9Ըu,O8i8l50͛JAX-_c91&'~ԘPކhu8,ρ:GlTZ6a%ulelhZ_FЂLiDڙ+t $y4]' L,>39EFlh {_ìuØ.|vєBML" *Z4ҷ0'QE Cs{^   IGo$$wSfR1B;.CYq#'w<ɋ0'@rwn:vF!O1q@殗2 pȇ;o3Ȝ+JEQa{:dXtt:OVBX<(ԨRS6^5tvLzLAQklLF0`јfR/AϨ\gBǜߺG|6$MeRBIf]T[&蘈2K^Z*չ,&~ڬ/Ljtj82&pd% ϋ'Z4x#ȋhF!E@] R'\b;gyi"3XT4LoX3ք}0+ *?/9HdK}lFLSľ)QVS' l H)]S47 B+q G-s 4ۂ=3fTkKž1@DĈhf{>!,cR&EIսC \1VܲvO; O=c ;3Xem k=u[UJ.EKhE  jiSTr'L6F݋㰗t>RG0U$O@a hghn0Whz6f{d!=YR;w >]kjid콧h',-ntqHSZ &0ꘊvQdW~GBG )]2sfY+@@:#fvJI"2k25ģɓF-?mҿgdʞqxBO>||{Gl=^mc]+t߼y1#&!hи|UDsoycI˜)H3n=CVSuUIt6G3pt5fؖ2%] p$nW'pi뼞AjAX0~HkR(ʜ Ead~•*ۈ(`3 0!߯[ȸe:NxTS`obe&EEnw89s&1Lȴ%~PbN"$pvwi ؇`łXׁƔ2+0*px#jr,3 xirJ{XC%8R2&`ġPA!nSEhTY{پکQ!!@!/ ryކR4D 7G1{eSg5\'ui]N4Ӄ_^ibVNb$6'f0FhũWi7)y^yF3d"dˤK.zИ w̛*Hpjbug_L(%rZ=VNÈ @]3YVvjT.KG?臎,?J*~%Ϳd+q~e}lw 2P ukG?qWkVvBH̀J^6e7J1Y9&h鰰rX2Y1C|3 Gd;[̴Y4-RZ<+P ҨYzvD3 UE3~ĞG@S9b0H\?'⃐DV$1 "T/d?Ec2N3*!ojfcyJ|]H\krifOk)JM/=МUI+밸[AقL9xlfZ&iM>%-kw!$OH.*H?-IhC#Tɕ>uJ jW2D%[C̃ ~@f=ڤݯQ ]Xqj}b M Z8o,wEyYқ6"ӢF|6.^|-P*)JK)ڭ& xZyV#}x4$M c%;jWE}9?Ⱥif݅vƹe9u=u4 ֭&t5X)̫YUbfh{%AX^Q, b+ܯp$49xJD)Qmdzy$ԃe鼵'KRv4cBC>ָT+{4h|&7 ;]ePtxRO 5 ṫպ^͞jA@v,t]/?m{ߦW}WE_~$l!EgRk>eͤR| <|~g ˋSc'ͷV~m *G/^qpZF^v;Jgvgl{r#eG o?=|ysC#uC#/ X|؀}} 3KhG.+jрNje5ھ͇Z>fKΧ^_lLlgF%G?>a^5mTqjl5Uܹ*^s>'qUjX4 _M׋Cz~$OEYoDՕ=%jJ$ujxiB|"m"5@+C>lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0037-Church Organ 1.xiz000066400000000000000000000033241247673406200237550ustar00rootroot00000000000000Zr6}WzOdU&ڒ#ɝ/$&$/ -'L:S"rX,Ξ=}[<8yt|8l-Zw.gyt>G~wއ kK> ]o6ךdypѐ]{7&+&̃4H%6Mzw̙Lso~#9: YQ"4dhlCb\ecRmXۭ #9_%LnHoMk>'WBNW:d#bfvpyw~Ť#a]ҧMrρݸmj\_{7vh{;cf9y 'rz's>͜z E; GiRidAK;Aa)F%/ a5 ҏS]h@C"z^>dQ*-W}nu{=[٠P#eSttOg&pdw>~_Gl(IB w$lyT&ly*RG(ѫY3_ͮcSQö-VETq02 Gk[HA⇞F5i꬯6vP.~Pr6uVsej%[Qcƣu >-ҧJAK(dP[FMoss_h;-+' 3Lρ;l` muGaQ,kU;E W:EU T[6}oS=FU6tPb'f{`.Ҍ.w;[."/]d,ǭރl_<^Fzꏲ-QJ.*saݶƺ$ pMQ[dG2n9hnJ:$BZb&226onO栌y-VYv26';@vӞnu#ٵ;v ͊/ b'._<} B*eAN]oxu~X\.o6`ׄ!뭞0pUvMrـ\cfl13VtղآB^K6Ո+FX^^Qm!wzWCf3^ E^ x5dƪxbX,bW,>EⰈWրW}+_8,Eb>Հ9}+;0}xbX,U W,8^X+xZϵ"^1{"^qX+xa8,~)/sb(] sX2bF]f21L=B EFW vxI:?"^1:2kxaAcYct,<F ^-<<P"KL<:6[GmLƳFFxvQ>`K`x z& 0g[=<;}K`M|M7aX߄a(A:}g(EσQmt]r`L0MPB0*[f((YϽP!bwg^m1m6bPҞ``=gY &Yˈa,1#`0l0_eegȇ`$>kلa(z*Yt9O0!bF|X,g-#ƂX HkbҢ3l<lÜ>wg`Ü> 6a6鳖 0]0Ƃ "}cm!Ƃ "}Yȇ`0| 68K0Z6asaN0 Y& Cr<؄a([6abyOxǞDvٳ`{6smWmg-\QNlpF9}ʕ6pς n(ϝl sܒ9}lpaNl`Nd L[,YERX>ݦlQn@uJF(]nz}s5s~^W_eU|࿢yV8!EM5Omei40k|uY[~9R 1QH-wy:H_\RlS1'QcQXZU> UZOjŴ-,>8c4[svi!@Sz9~~VDHZZUƨޱ֚Te{NozዲRk>U#4_RfnLVON-+r[Sz1Ywmֹ.yiݲTОL$/dtOhif!dpL $qR<5f}u< Uc”*+D%Nqχ@xy;~+ )QU"R'O6(F߭9Y2l!B;2;R.3_n2}>iYY-%{]7B@!POx4%`xWBoN#F Q+R Nu YyCVݵ粰{*˄| X5Ot:aէ6r(9FF0rTۭ]T%c#R$YRo ^q蒆wm/;D"(PN]P^VfQ ƾg![0uX^l88v8Κ}DKXA;LU4W<$ڶќ-ypDksJ/qī5rkf' 'Z$0*25Z aC% 7VũC܅D+M4 ҽ;Dzd$./ms):ez%X/A1V.nW,\M~/*$c\OUas {>m>;5HI؊**?sbbo}+"d4KZ;~8k_^qA7'o!'J#&!oTZI|EJZXoo*RK*;9K"p잚XZPnrq~ W]G0C@wa]Bgu%rT!rh#8Bߊ#˩z0rU #FaFgN(ҵ>t #ƭCx(]MZ Цa9* -Ni*QGk 9}zF j\Cj]|"7$YN#f=493X; Y'G{GZ6g3_hEMa"žY*yYnV<2'9W8y5u>=u>?u<~-^=D/ uDޞbUtYr)AO(hHVBE}HYS!(Ndsܓo%DAz[#z+̗Af53yZu}2("=("pJ"g՘DOV*RMcP?cCBŀo7,70zgZf'm$lUD֡@B0M L0u|pܫjA ·4 -k:2;44zʶEg ;E<,p 5K Y"]jq8TtCwO'ƌ 4if' LYR]b-Y'>6"EAr.6e]au{l0!Y\V;:KPa`i޵Fmm´VlV`R+XT9^r+-w!|:MltTV-}*&HmP@΅=RĖ6gпBbotB$PU )R; r-Q'CBF G3s1a fg懎ǷvFo&X𤵪R9i eQm ;eVK)W ƿn'xAK7X ㉓`VQL ՂzA*P撈L"ӓw"J^UA۸M:v񻅙V-kp"O٥(=)~wֹ\d8B#NīH_{j:`qLSDZ5e>Bi s€Y ڀq5>? ׏e`K;ތMXd4긌'%«}B6bbbJNj2)r0juWY D0v?B0=3L٭*[.U/bpՖ7CzKC9{ 5zb2 W>i='<:_3},MZN_^*Uz 9}Uwc>AzYcu8ɤY vTe♬*yFi>Tj]tbuˬn\`>;㩾8㩆uKkM#&d>bJ_!' k`8\mFCzOoF &b1>jtR!Wh r[&fjX71+u}bvOPhr|#[I;xb}/TPlNVS;^[|[;^X׫yH=jWL[͉uڭn]EA=zW׫^jE^m]>BZkGSƖ{\TJ.Vf9VP/RTcsy?F#+lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0041-Church Organ Soft.xiz000066400000000000000000000034711247673406200245260ustar00rootroot00000000000000ZKsHW,\e;ڢZ[L `HV9acC U9d#zߢJ4uynأ~\wǛ&G&,[ ~coNKwLWr".[8pk1 Gd0&c ZPb.l fpuCv;3=wNgRQ(XZkr.d/C#Q$AA$HM kY.'<$ bIҥA~Wxix6>=y [CѾ]ejMތ.URŋxo{4ʽJ<l&ѧ<[*KџZ*YD}u')tY3݇V_Os*JH .PDTV0 bl?(0;ݞ>bTo]pn['JbG5uV) fZJb$!TЗ]lU+8w `q  U1>Lƣ[8 G4%ȀZQ9HϜ* _& y,d: H}g!f4:!JZ{L G`|"hߵq9G@Wִ[f` r+Dј*0ݎ%Tp8P_d?u5:Y'BcXn`wQD^ܑo<'_f8@U7--ʂW^ÁQ/xϞd$ZeЂ,iBq?*gk(u#-UNyn(y 5*:UUU^[7dY Ўq5 2^EQ C k-;*kmuN]-s;]F^0JkSV->kV}q~?،vR}n1Z ~F_Xv3׬Z+e3o1 :6蝪~f; #JKʓwX{bB!=O] c)_;UM8ug`|[v iiu%ڜF|JR2#Zw!x~4exT6&f{}z܏Ӽ\'i?>Th^LP(4 s UA즐+qzJCz.{Zz \j\C#B0K бjO܊@,b}ulU5Z+}r'8C؊k_ O ER('q!5˷2S Y(!! &00ac|^}PYNe*}`FBoϤz?5-/',!)V_t// *yaN2^U>b4v҂^\Im7* &| ' {8u?=2 CĂ bhr',9K5<KAo9j:^M$I`"&"16~ r5MoƟ+I^~8ׇ y!Fb&)FGqƝ `0D>0h2eIe}(( 8q"LUx͐'plD1e2Թ~tI!Lt4`8n} #-9,`rȤ5FstJe=rC& p]EhcL\!$m\]!uNFYU2L3`4?)Ma+f_.cwsiÔJr 0VMԨ;S-"}@y2ek e^]p5YKRݛ4Qɒ%ۆﴣ-( '2sIboE5 $Nh( IrYmM!b}b$`4",ף[7SPv,FȚb!?D8H-m#&&YFt/ +u,mAl(峙c{[1xR1EcKǓvvbnIB+ rLA]cDrFv2\Z"kH|(GKX}Y>LHE$=34hEp9=a<PjLPa鯃 [eKZv~2Se;o}fGzV 1:_q$kv(K}}+`)>#&PhNRXYܔ>b,B!CO&.zw̹#6K̍/LSP0ۯjYH~=z'/gs$c+Zcw2v=A? If:gXdx`=!"x@va$pZ6`1aeZBc 2U ueI19jp^aI6u] o~RIY/']BEe |̚{bk?H_G;Cl\%U%|D Y@`XL2]nYPVCQyt3)f$FcXo7505M4b9 CCp 0ߺS=*"?cM&`frUE N5>h"`EI 2N[ok[x%;t_pAZo>ޫ4| nmmch}`Z,b7n땷LE +aEn6o7VԝuCٳ1i;^>H5m>TUj5@ca(ZF56P r8͸1nj,Uɽ4m? `T`ڞԙqe9cWRg' KsC*f&;zwqfyܟ^4ɋO J$sUAvϓ\'\'I$ zs=uBITOr$wRY{ezi^:3,^;w{S<3USF`W MDeBG(wZE7LٴFlEYf߳Xg+aajmJ5–3[g+ (nlV5-Y" dD-7A%NcJMMctb4wPqooEEӴPenox|0lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0066-Nice Organ 2.xiz000066400000000000000000000036261247673406200234270ustar00rootroot00000000000000[_S8N0trL3 ^4VJ}؎Ph{^?v}x {$NF:;oMzƇw^N>ߺ{h?>NŻ3/,RI@' gw{Nј?pGqH!~Da?JΏKi7 EAJE$FMxVs% 2O‘\$Sn c. MKE7u#L7 el\ aj&KY{s{ݟ]Y-xm:0"L) A<tl-7Gwҹ9YHZROHtɬ@ 8 <c곐$A-#y].°{=useLcB9 BXhY#3d8VfJ,b 8n/ ,`P—ĥs'KB"/ҽ|^ìAgpu~Wկk=_G&ѹfg . w"߷[-,IR{nSeha2d"aҥ\5,9|^ A)KE!잛Xz\~K*U5G+FqB V;U SznPv-}SXw*_+ RYȜFϊ;%A  /MK׼>hEETS2c*fqz "E# "!3ɀɔEis&b ꪦuJU¤`-Uu` <9#N ̜7žE5k䎇:fDH2˧aҭ;W & z61E,5I6m8'lZi 9*‰[=_ dkxVy3FXb(,*),XCl:O4Uz`u-}%s!ؗtk}`N,8QR Sd\D|8M0LHH,V#2}#"[(dj2bahĉq<.J6QZ%uRgֲ;-86Kv}ne6/_o0N6b T*˥<(U!.c]oJ7gKhUwtS|>>ֳv)0rvv6%Asu|#D"{4R<$P4'mçiϬ?iuOUeL՚k|P2dk?!7 7aZ5ѓu{Ci6 j}1_.KDȯՖ~s/'R{(Nr"_PEtNB{)Ljt5'eE|l`8+l%O+ʚg`+.$V4['ad+UMKWA&o8X-rn{ d:~uӮ,4j|c1lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0067-Sub_Organ.xiz000066400000000000000000000017341247673406200232560ustar00rootroot00000000000000XR0}+R`n 3@'g)IhtJ_4%Z[J-w_$v(S<'@:^=Zq9 ;4L }t(a|y~xwzrz'd^ ޹G+'+lԟy?<ߛ`ep""F%%a?װ:݊/S4hEcĸT:\%7 zO 5H+ ݫոcB䆫(X@QSnxO#o}8Lq0\BO%jzsdD(K:CjiY4:BeDw%wZf' /FFz@(Nj" `%WZVVQ_tcRg~jARNFfS4AIut\/*9''4CBK@<8(KT>.|OG*Rj aX꾮pTOfx6# }fw{Ȗ fۛ?jr4fQ:Gv0 Gv  Y*3:Poͻzi0cJkDG,Qz?qk{ƭr-ÀP<Jdb{:A83A@!#)eHGwmmԴX{n4]6JMwkskƅ:Ww*Ξu(Y*>6IZs{fk` p,)mSn\`NQNlI*\ pdj+#FnC2v&m6TfWV!%d;C,;Do uGǭ!|ZZC|}Խ0g&l mN[VWo0d42]~wi{oָjL K=Քd[UhփN<ҪW5dלlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0068-Square Organ.xiz000066400000000000000000000035521247673406200236670ustar00rootroot00000000000000[[s8~ ftXLM b peח4J)i.OGGOoyFIaw\<xw߼fԟ~z]L7W\߱?!`O\L4Ȱ?{ <ƽ{kj'I# =๎ ȣ8"2!["ō#/ 8LI bFP6y$O&b_A Su )l\R%)SYe|"f5վ2"BeqDN[$i04~Pj@!D`xc,gIבS<+.{FKv SJ% @b<^ϔOb3"N +*ŸThe[Rc!ĎaE`IO,y~FVj YD~"͛a*%Q ]\ȆeglC9 DK#,]Ȝzf[(krng1}.aNZc6ݺgSO ++nݒBL$6w0˙4% nu֩9a:}Z2de|MSsq;~O&8\Wku傱}FHrjEgAe&v+9t_̥Br慷+oVwYJ_YJw;gJ#S+u>nvpGҗ{v&@l{Р#,]yg눲Vam2bzAByŜ8"sEa]7]a:MmFi.E5t~v3`]_#`FoV`b[Ѱ7kvf0GHAߪw.O=D! \2`"26IlƩQfrdϬlPh ?)y|Z\FNX@hld)e&)J1DDYB$KXC9@CSUwvNaZa-KlKPRcee^0:QCqɋdQ@YJB30]XݶW8$N X(+5Z3 Q0b#:0]0]d_ -0ej+N9Oh8S:?ƴ(STimmdէ%O=R=f]iڨuN3o)VBȤrU*ENUʜN.HL$g*h(e(IqU~!줰?Rjf2IGڹT9 6njra+sk5#i@`^7Mg ʭTNX~Vfee u,`8/Ts^7#,6pRw:݋ݝ#jgۆK#`WP6vS ~:y;U6WizQ'-i4Izz=͝ETOszɹzt8VSU!Afa H~=+SztZ"%m``DD(sBYux&:[N'juȲwM#;,?7ݦ!% 2-0!X-(9y@ӹYJq #]N4'L!>-ab1<!"b$aʸ?׬FaYn_]\,Ϣ2]+~9tſKg W7r_Ǭ~ů,X[NW>?E/Q淃;6J_>ɜo(L [an Ð'.v(G%ɐ91bAC{9秈dk)Ԏ:(FjqpqM"]UU0#7)0ih5A/293=~#,@$w%K1W8+gX&?PIz%4| V< "RYOa%(jepd08wJՋrm ga9"ʂlš@BdF5ٗ(KFS(5k->OcPA!h(<6R}iq'UPRHTf)Ҋ Rl٬&K6%d~:3~ adIe&d2ݖOyb2}գAB_!`T^v(pv{7[ےaokB>,i7_񤐦+s]x8\) #2 X"pE\aئ8\QB+xe"VhEZa/ 1$mA+<׽)Zɠ)AV9=6e`P 2pf|m&dH5t{`Zp=т s0mWj|ߐ{sW˓Q]܃nOl`c]V6ޞ}VwX(ET z|L}?E~ˤ^9oIrˤl9eҹ2^NE"*jSO㜬6^ +CxB$F}cea#w5Srh ;J,դ C^l|&nJ~2gw=lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0070-Soft Organ 2.xiz000066400000000000000000000036141247673406200234540ustar00rootroot00000000000000[[s8~ϯ`yO L flY h--{m__tl]BcשP7?ke]y??97N<׸cYhԂޟʗ2}.Tk]qr#/ah$peC\{ShؙFC0 u94qrcyeKZ 9i5Kyf3 )f>?P! B+'buYLӥ2)^ɋYmbs1 C̅Y~6FO!m0 gIU[yH8'[r 㳀Ʊ1;UOU4::b[V昿پbĢOMDX7u-6NXDlܴZ!:9 _Qڙ{@S/$Ut5DB,.hzPlb菍?aK0WԚ7r B$A9nۢehn[\=Kfy!]+rw,yCSbx(ۆP BI5}}z]ܭ>eև!۸QP ڑUEAdyvLH ei ub[MKh,6DX1 4o i+l$6KL{v(S+j훤S^٭NmYwfؘaW[b!GQ.%,/=@!6mF? ^h *؅mR%۰s"Dal \lPjѲ0t7.\1h3rb13Ƕ4-l@A\Ίď˄HTVٰ~wX2sQd` db1^J'QY5rGMJ$(֧mB+8gJB"nlY.(L}}G\s5\s —Q d#bZ'6l+.-UQ7[rkƊKn%?ng7[L3%p74T62}vjڪ9JFVv2*_"R3sI|Z"E_``D1Xi,gݎU1T# QL F빝TJŅy39N!*rSj >QpZD5^ l&g@0MyܤiHt;4|Di_)`҄𽁴#PB[PU@φRG+9~Z눥jۙ#㥧&XHx^%k fyi4ڿx)R^껺pDι|WxYQix \sPDOZQ\~jfřV P}W|=F7v<v}4g_wg7'/y]4ҸJiS(FJV\%i4_WHjoL3=кӖvYC]t5S7.73~@'}V]0};_J+DH u_qiW,d7[Ks)n}Oq)ݜIl5i?g:lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0071-Synth Organ.xiz000066400000000000000000000041321247673406200235210ustar00rootroot00000000000000\[s8~ I`&IM, dtQf}Iÿ__$Ifi}tM,ӳ>z"~`{eqDܹg0w>|f|=rou5[8W.L߱z>`Wl7B G?GG[!MubxѫhR٦8DIΜi,gؖ0vDov8nCܰxT D 2~!$UK qlYŞ<{Nأ&lpgf3?SŞh\McGc݋fr (\y~Jw9A>nHnݴ9?<٨[g ,BQ,!Q3̻#ۺlġ ?0RFUX3PD\.F @-A@\ i:LqtؿA/Rzh%Nv8{擷;`ץі z"kon[D=%{Pr"2\;0uD$Ι*irvP¾ص<%AmK,k>{SمO2ك m<;N̬B"Avs8 ,of|,<N,5{/ _ֶK@S/sOTYFCo7;D >>noOrNTÛJ߲qkl%33Z $ zfFCz͂^lvJt9N8~B,E#͜D,3HM9B׃9C #EwՃ 3[m$"Dzit %QU`pJ@45 BUi,Va <J\s+)@ZvL8gprhCkh&[gH.<5բ4d_Pd(TiXS-&)%\olل*xQe:-`!{M;gVcE"@Bj>^o$o8,%@ ܕWbMfʼnX W$݀gbz1JT48lX;ֆUs0=3 * ;~"(XaO8h]3' †0)v*x,%R>`CI٘WJc:);Paq%(8iKmey+{`:"ʢl07M"* , X['џ܍Gޭ/<XAXQf6 T@ZMu@nuw%Sh Bߍh-A>/5jig ^չqHlfk^F20㝅==)ʕy*ڞK5)#SKb@ń j졧DL`dSH;uaǢܠ{TtɦE1'UZ3#Q_ Z䃞IѼJo@fKX*فN7;\`Pc>_f%-sձTGj^jit^5 뚗R!Gk,Ucz_{x?ʶA ܲ]6V,yDXrGY#cDv}H狰S@;Lsi.J F?LsUR*\MsP[W>νWLc`an^^/ [K{2\T.pXw Y5t}@ TgC)99ន_NƷ=]T)ʦ}L#;֔ILKNlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0072-Fantasy Organ.xiz000066400000000000000000000045041247673406200240250ustar00rootroot00000000000000\s8~_=Ca&Ic.^4 l6IO?$$c#?55ڕ>}嗗䉸W%stBcZ0^\t[{p3~9gcLs~}jb_b}Kq{bڬwqoЧ[a=:KrUo#&mkvJe*[~m:5luƝ(TYL G(2ηD,,=".lwKb魼G 2 3 JҒZ:$^Sc -X†.FG]?&CLg>]0.}mN ۗP?wҵ , fE+Wo; zZtLxI'QHԌz݉e^*s%Ə 7YL,׾˜ Z6I6EߍjGl纑:Xtlh?] 0^8[bo{ㇶ6:]Zaۦޖèz" gbDQd{ϵV^m|yl&B@?a΅b.6@KǶ&Ŷ,myh:?/̲#%Dl ~B+ 3^boز F"q'D.Yy² v:/F l<ӚwNy$,GPռY;f%8,Ly٬P__>Z|z1ubfs.^V- cXSI8hp> k1&&BaχNq_̷/& ] hT0B ἲ^:!P?-U'!Y@=5C.R(_9aV 61-UvF.kBۻ ]ɫ -B\&|@&'3/k_43K풺Ȍ;[h #œ]s#hdq Yj`M0hyf:ۂV?Qְ3[c76trSGR%cc{tʤOT,Az+6P#Pwaɵ+o⤿1Z9τŋ$V5U0"ʢzĜ`|zF܌-.Ж( K:pWlT ďn1/<HAC:o9UWSTK̟5'#(N"T": \0 [&8)scspH#4s+B9D #ԊeSXM@P4Bp>iJe|7+nrOL*r%R-&ϰqpR`G[fac FbX1\ d`tvd,A 88 Jǒ|LҗzGȘ%M1 38hdܨ^ qYkTv#jf28^>2i,%eFMg3sD4C=y9cif d\ azNd| bWN,;Yx`3}v7((_-,,=ڝqlY徤Pp|[$=2܉`|n&6l0 jS`Q7+ !B;\huB{x! eD5=Q>j Nq̊5yG :^8X Rp`з>U׏WMp\dN3PUR6I jS :>Cd kS ӲLGb2촰3zsbMadg~yr>yPt>1!%Lin@4ӅkUIvQT75źof DzUk{Modtq:nfDIYp($$ǪnSwfN'z]zqwqKen+UcvPlmms-1.1.3/data/presets/ZynAddSubFX/Organ/0097-Accordion Pad 1.xiz000066400000000000000000000064111247673406200241060ustar00rootroot00000000000000]]sJ}ϯ=W}W%庪% W@N 9-1VFOqĜ934~^]< V__?{oWſ_ޱ#ӻOY}jmx~;d."=ۿw?^nFlJ[!Vv?6nGW=Yu!{_Ѥ"u;݌Z{gOQx+*Ӌ,/rסqvv—0\ NEThJJե+ێH9n>ԤfYHx:O'!ER34Z,Cs.ͤ\8'EeJ^6Aέ|]ic5G3)qɡi,KyTٚ7ъ)UJ 8I\2Nz"E0/Bw(R\|D%K5Օuu:qb [78 ktsy2rT`E*w d-ؾO;U%UœEѓRț}zIODR&*Z5Sh>u{ kkN0n#,Oݎ^n]R XO3+K8.CSȾ$7E,ur0/<ߥejYE0F[myWħfWȢH;+𸬮wUf?~SulON_zphXhc&yY'qjJ^-z!^oV^2#ǰ#E?]٨*}]NɐE,LDٸxzU8nf e}Y6t-LqQ>9AK',k2r7 aG\CWs@@䧯i JVm*g6ƀlJn!˸דϴ/QYFҐ!)ł#1تe-q֘Ɗ((Fd}+S>F:f"Tb*׶jb^1z_0k}VcZ5¼3}A;;<-}So`Eu7MGˊͅjXܮ:Afw)W8䆪R@7 E2^aEwغa•7Bf7m$d:/ R;HFe5CЮZ"z}Mea}(9E[SbX,`bS8 Zz^(nP] ^25xE1o뷫+SWm ^5xU[Wm ^5xU[Wm ^5xEv.$OAⰈWIK.UTc8,U8Pxxj,EJ "^*B}j^1z^ NeX,ՀхN;%.^^g9J^uv) ozZ^u=^_{h'pr^ ^ ^29bWJ9X+ xbX,7} ^s%7WYZeW]FWdqt$%'DkN},.bW,ˬdGrflìC2|&V ɮ ]΄RW顝 xe0;8 !bW6` Ńx0Fₔ-.A//A00zg y 0f56>ZAM ZݿV{&`hedFiP#m],],9^,y^,^,10 EYp<Fьh<b|6 8cb^@Ayr 1h(,?d(Q`mEy0 IF1 ,0$1:abt4~ %*M<(D<T6jisLy+, \)f}gE}V礆btZ)9^TC#p[+Y4ݤ qb6:tS7P0u'Q44:;SDYX!a*r50w2%gׁ4YܳVK~\>DG+Ug''ќW丸K;Rr?ISK%|lp~ٗ:ǻ@ٗ|)]+5 rOJe(z:%T]8<+I#CEch_"+1z5k׫UHZV)=S|ZͧP&(i5gP^m7R%> zI<>I,ߺI Ϫ/VϽE >[=.Yt,ArლU nulmms-1.1.3/data/presets/ZynAddSubFX/Organ/0098-Accordion Pad 2.xiz000066400000000000000000000037071247673406200241150ustar00rootroot00000000000000\S8')g.spI\E#l?(O?$d˴~z_JӋl<?p4ZЧlp|tuttzl}۞Fm⫣ (w⯞ϸ6&OA8 ,[!~v0mhdxrן # ]rټk.P}/#zmCOMtߟ̙9&R>.~Ac;= qa$}sB ЊȡAG.a`1|$~LPSvgϱjº*i8&wh`Sf..DoYo3F@ͫƺ $ p"O7er?|Tl1׳HK63L g]ñ/'{&ǥkX4xQ:EhQ S >Jh42DȁO+wMa>{KrsE+L)s3~&Kr5bSDJHWُЧpQ,tNBs:U߰* .zԱzh%N,k}6osmVis$b BМ aS(sϷ|$8ҡ=30x#m-oė]hˉR*TzD7-x; OfK8mzm+qYj!FC͍!x/vWK't;]tx-dˤ=K.zѐ{|2CHhc01z0G_@Mˆ Y<BkYШ,U|wl!R;Ce(.C"Awa&e)gPBMF8vTB~@8 ~FUPɭT0޲ʤ(=@@,ف$ԒOJ(!y)eqውGzS>/O"Hgjwim_JZ+1 x[Zڿ6%Q#5VF<,x451Qt)/`Ř(qڬ\c 4(V)%/!0XA/dFazN"-!g k6׃yB^@\krIfOף.~*b@sVݮRR;tvsL˚>Ka:+'n]&E% k6EuypW$ Kd K X7(T+}P v꺒:rfA@X 턠5r!>GCbщЇc]\1ط1Zy ,y gΛ!Z4"Ӣ|\6^sl.P*)JL)6򔍓s'w:go#{q^{e&B+KvKa7U,.* %j/c̜9m`Ş7D>/R8hDLFI)8{nV+TUe,ZkИrE݁͢c)[kLzV5nkTR"(zp8˕ꃇi K0My[4&<4'(ՅR5섥N{Ksal/}F=ns)~WQd\jW϶lݍ68ow\-5J\eq8Wqj+Q5νw~Ks73/ Cx@dgjFvy=U)9H.$km9_o j\,(GB`=o9ѥGyJXM㒚!"aD;M 0Tֲyᧁ /F-<wFpҳ^?J ? h|M nv@-A(B&@@,sv-lpcFȊ- R(UcxQ,]K'4MڋR BV$pYͨj#9;Y- {_d [LY3s>'Ek!C>Mq\[/=$aR$1#a P.Tdʔ"ƹU#r6dn5ZGoeV3t>_ HUjxUi1M;WU^ICJml(J7 ᶢ~&m.A) PHqtJD]A{9JMuVG mUTuX30⭩, "i s)]!iF` qk(HI-r׫87Ѥ MzS4odi%A47T{̥NmSӓ#Xf) #}Xk٧WzO5Y}=${V|tڧy&᥸7V3&LslI6$in4WLo:4B`H;f|$-"mXJ^.$taUubbvPtW=,~+SMmww@,0lmms-1.1.3/data/presets/ZynAddSubFX/Organ/0100-Synth Accordion2.xiz000066400000000000000000000040331247673406200244270ustar00rootroot00000000000000\[s6~ϯg! 0d&f4N/ئW!H6lYX:7}$q^V-׹k5i9/iS|srrvQvz9 87'WQ\j'<90G7pmdxeaE Co: CϮ9&ޝv9 }bEH:nAeb_{=ƽ}'T_mHr߭Y}$?B8Aq+6fpUIDH-86b+2j!i0LOp:CLC$]$RZ뙴ͫF"oo$l }-(}u\f&l ɤ~@5TYu,O8y8d ; prwvQʽךm >qL\#Ӎ`MI9kIw:.7AW&٦] ĎCm#p kEakD]IUsDE`ke,X\.dHd"U4I}Kr{nsٮcÎ}WfX}E=rs{. ]C@S'sOkU\ߞCg-Q=D'+~=^:V5o(G=:oӟ.nSE%I_a-s^\,raDㄣ1$ \cp|+9G?x҇_`IaѺ0c {>A@fZ46t3?,hX/߻D@*o-JV&*B 4gRM]eKM:>\ڸS {ɫ HjpE "d(ea ITӄ=S E 56}pOqUkEPoj8;U-IίKճ \יiEkOFV DMKBV)=v J#E5@oX J؅mRm90ZtY-Ph?ؗ-4\RF0l6~)tft[+IA*b6p~E).Vg"2!JTԬKjmZ /1 & 4BQw?  ?/%{@iL$n*BC2P x`KF 6QxxhY@OqVm’Er&O5c4e|Bq5cZREIHkzM␵s6"EK CtQF>W݁W|yw4FVr=,Q3{r"E7D`3DR@`(sU!r ϻ+3+AD1iv#8jz4ZhxAUd5bpFÐ,xkm ֟UMDcnRcbp^h1`ЮMrL1F}P F$3V MX H{'(%o(;:j]cRنn{,VlK MXX=Xi8Xù &'R$g%1VdNXWdY(¯% v`@v| 9!\½w:ek<2چՎ*Ay_+ZʳZtg?;oįԪM~>:+E6!#C^){]fGedD%o~7nѺQfd\T˷0ٕgl|UU.9ȱ2~,~ӼKX*yM.Ἓ]B}7͝h7݃iېzvP;\jCp=J~;mJDH5P;1P;ѫb8i3f4M||Elmms-1.1.3/data/presets/ZynAddSubFX/Organ/0101-Accordion 1.xiz000066400000000000000000000041261247673406200234040ustar00rootroot00000000000000[mS8ί;5 Ɂ3$\:BƲ/@񋤕l@MOZ}}}~GFO槃vPw\p޾ O۟/~_ξZW8~׾c|w=6ɞx>ƭG-Nmf8'7pumb%QB? ĉec឵F_bv>(ta N"(.-e2̱7:A!Y fR6fY#heY\o`0'1IzTz.؉N?`% ?ӟ^ׁ9]%1O1&.s`!Gr#M`Ɖ |t S{P!K\$! E>Yput L?巪!qB9OMe"È ᙽ {œY-6[ X.M Ke/ o$$a& e?x$6}F?$GtM<}9G@Wхi6CAJ,_"\0^f*? [R" cETqL:a&riWA$ H<DYj!fWQ0w[~7-~v)嵓5VrؖMZh(u6z!O&4e#7_`rҚX?m,(Qxxi5k D>ֶyIcGK}za"s% L*b]Zi<_8R[5i tZ@ʦU=kМ)UOJR)'WˢIX JB(D%թuS;,ՔGS(' yP/ɇw #AK)E)50.9*K r l H;esθzG@X1q+&V򭹞RD#Wh:DGʲhP v. 5Z`զly=,53"Kr3 /S{9q[8Tm5 {tMMI`9ETaC! Z~ #|&V9&q OWM&|p]zw!Q[[Rh&yI/0Z+ /3ojY.-1y(MY^@~i?eZJtQMLE3^sAoz~WIڞ/Ɣ;L5eqS ޅ0NEoVwcv9-rdVZ0⑯QXM] 8] c*Q޳9e8)J&hbʫk޽hb []hb$W?ML^5kb*6^YWiw_}~5hFrsݤrxin֌ Ynf@&pnf ԛY>mY2B햊Uhn2ugBd]_;js5XLGyiLH*sQx  QS_ǿK٩ݑ ^R8٥мf}F~H 7ʹ_+rF-ڭU+F-?֪JV\IͭHE5ӄ0tJ8a?d⇈z1Fj~x QuLWe_S7lmms-1.1.3/data/presets/ZynAddSubFX/Pads/000077500000000000000000000000001247673406200200655ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0001-Sine Pad.xiz000066400000000000000000000017131247673406200225640ustar00rootroot00000000000000X]s:}ϯpyO i&3I:4SOM_42 H$b0LlK|%{O4Lk{{(aY ՛6o2ϖ V^'H++pl8Lf#?NkS"qkg冫GIJ<3Xq֭4g(ټ+qF%%+ | Tb&i*Sr# '< iEu@]9&`Inx`2D.s3g\Ŧm3(Rf~$DYī͚Vn}9 s' _e[/'+d'= `9=m;fxolۦhҺnGߴR= ig:C> }g! 3ΐL-U. .VW`0n|4 q'wmVi{j1KĖ5zkdV[U-.z7VW2CiFlmms-1.1.3/data/presets/ZynAddSubFX/Pads/0002-sin2x pad.xiz000066400000000000000000000033161247673406200230330ustar00rootroot00000000000000Zr6}WzOdJ33MM4%G;u_0 YLHP%Aw!^p%#L:ӧDb={@k6$I^^8~?]]r;?=?tl1ハ>ԇJ"5Nk[49'ጭnM<7m?'|4ï5N"j? n-e+ćp薤wԹf.zLܝro(C,<9g;Gݷ(Ek,"BYtDKI+X$aúo.6`,m@A]w Ƴϋl?pdH;uke'n_=∇1U,DvMvUn6xgj8!w+h޷}̡9!/B -B92&(v!/jq)=wRB}b lLrl~@;2{ZV ˲vi^QN21eYezd8_d.dSȜJ% `8ug`|S4OkGG"Xw2 H e"o׀e@`Bv7?ܹn4RCIE٧1:% {5vV\UokO8+P1:טFܐ0Ep8Ih q@S,)7cŝ ]m+ h@bݻɃP dIjP(Ҁ_JM'@8@OΦ`r{G \׮'a@ \=$L _`Oo=/S.Hr}m~\-78$MQ%ke\$M-^L 8IqC, (/rSˣ;y{ ^jJ YU bEC ˨`sfhƍ]YޛHVb#6"*#19ՃЈH#'-"̊Xq}~Xcܩ xo8DW*U d aF㤞T5BqzŋAyT^L/b շgYT',ޤ^-Q7څ~SY}8*ޏWEmT2Լ>/b;vr|||oWۭ}]wޏ:va/?\ȟJ~N"ʵžx8rҢ~.lp;o=_/!0 ЧVA~J?[gBK !$J]6{ZÝp9DQB P n<AL՜u[5dXn钮OCU+lYu9'[^eɆDKӺČ@\lCT$db];)'/TpE2Lv'diynP὏J-nPcI4pam%ͯ[ 1.HE1s|XՉnj:Cb-{nq/*zmmsUt붷ew:3T`Ya3t,)I:9J@="@SYLq TW2g:9s?$ RE0qvM} xnygOGLEIf |qb$B9ne9'&Kg/t/.+]H~eI^ϲ'@TwecNmC'״0|5"f,Id.Z-raɩD/5`_Da2<(lW}RIU{QHӕP6)k]em ;Y5{Zp0Zxf܂$kY^ (+Zs{1#M 7%D|MFvιgǫ`mQK; x$`Վ>dQf&-`!ϧ=v*'߆0V+=Z\hr-\ Uu=XN6_D*@HJ'9r1mȎ`ODu:O֭ue0xd"a"at? <{zs6.QU@+!GA+!fc@~0%b!e8@o7? Oe|T[if|MiʋbC@G*lI٥VG*^Qe$?p~3NFwX٨y:SvOf1˸h/LvYs@ҘIC^Ҭ,?y`uga0\ΆD&a0y"^t|(40J` TP;=9r> YwЖΘw茆!Cie4 k&ן ǽ42&=HR7;Ho))#5iʱ8HSyGizk(텰2RIU/2Xjpғ KmC*gf*Mv>kwYϞߟv'!Tߺ< y0t~&L&׌slƹI6$qn87Hfƙ쮾N2 m^Zzh=?i`h ϔwHg2.hT /tW/.߶~+"NmN0>t.lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0004-Analog Pad 2.xiz000066400000000000000000000146541247673406200232240ustar00rootroot00000000000000]r8}W=1/୪)-W&35-ѱ%RGςHRj.~bsol,+_~,ou1ϳG{mMod~8|rV?Sְ;L)Qwnrv>pdIMfϐ*/ބM9T6γ'~E2oiRm%1{rv~u3`3ӼRK󧋻/g{7Sfk*5,,5|7)]y=ҶCWlc[Wհrz-ZTTw5W oy6$,-:߬ڌU%;md4ݹ |)^sIk3!LY31l[vT/U[Q4t&^Zazf1RB 5'Lv~i(I3Hk__6g?v~nכ]\ZOjiRXwȱ{[,H`2^=Wfԋ<z-Zʛ,Wyمi ރC9A2hN{Mzo)v,iR>rt0crfר>b{c[TvtmZgSHUa*9s5\w#qf=Y #Ϭ Qe  G4o7t-v"zANao4r6N[2;#:l,׷ЈR-'+ɘ$m-9HňLm%[a rB甉a Zv70< cv$ S8a !e a-l{@ء@ ;RX4v֧0Z~!DNpc:C#@KXp:MSŽوJ8APz( *c1Zk;ư%R%Wu'E>LZBa~$Mڂ2pl. ke*)v)܂s0A\2\ mL$ض€-"+B_ |q_7J@yQ[uQi(Ê\qV:As#)`yфN#tvk0XBr!.!(IQAK!cay}t le2]5a誗Ű!6k?w8|A^8Vl ]g<~ͦ(AK)׃BY!,#`SmT¤_Neew@%L)kglf`D/a{YE̮|7fe-]g1³aʍ7+0 òajL 爡^A' >lv"rbIW{M{!R ~]q`d\fwCd1I(b[T89e H!2xXfi8B ,QU_m&Ȑu͉Z#Mk |& _@ae_,&):@ؖF$e ],%by^H8S ͠@& C ʼ.W2L9(-!# Rv>0v7ƙC %kAv-عH!C>@Ԩ"e5^= )B,g%dpRI)Sq_ٜSR%PNEЊXa3Xfߊt C(([Ȩpr: x#ee));@o9~ T μ(btu^*`Zc Wk ! DY}H )O6~Bp2ʴ=;k+G#Vف $POPFpR&aʙ6y4Pg,~w8OJi[9 HRf@C*'^ />S$FUôo!HxqG`uH13B:0 hQmIS [;0Atl+i Ƅ<9Q\=䍈#|f¾"Je5e Wm/ĥ\xAJg4qQ+|sKިe 9@7d|B$R.F),CƋbE+G8!~F/ Od=|-*|(P$6&4"q%0Ct V(6eui iKCAz 2dE.WT!m dA6#Op)`lq8UCp0 0i# Q|!,Qέ5W 74L[VUFb0] Zu1&,~\)x;D 89 Q FrOnsQvGG/o ͼ(}(Cu\hڕ}@Y9Nɛ]qF Jժ2lU`B3R_ ,ǁqWxLǷ" \i$הq"3R:RSwbd1:p}愌U/QYԥ 4$@wRܡu )O*#q@d}sdțIn))7 %cFXͻC'?]}9ğOnN.'wEfR^%Y6guE xe>Q-_>QrmwӢ6 a"H3|v׫OZGrHg,}Hf/ӯA'Hgo}7|L\_)W&bEuFs7iA%Lex_-畖h}ҢUyQv."o(i9}lk4y6ҫ㾈[l߮/N'X;_oA gN^igI6Hq^LF,}ޠw4c;GO3;0YWv/|QkkURh"r0_n2x|ɦ<3*zgErI>|1-PͻG޵;p'Oi\<&? ڣKrt1 Zo!_N~JzW7xT% iLQ{:]Z<vmH쎍B?1d9~LCK_áqqpol MvYF~=8cD]xaߒ}?HC|]zV)*9r3_qWC vC |_UyM e'o;|Uhn0_֦QZjNkb}}^FEzkԊ+eϳ^Qۆ֫tfkK^0t+MO=M^OۯWwf_=]% ۻ/ow~Ɏ1zqo~nCTw>D-=lCQfn $MtMËϬۃ^~y6>d]';mmsBܑmGw/̻[Wyšh!~-\|Nf?͒2{Ulmms-1.1.3/data/presets/ZynAddSubFX/Pads/0005-Square Pad 1.xiz000066400000000000000000000035241247673406200232550ustar00rootroot00000000000000[s8~_!03e.^4--9H &\SZVo?Wu{zxo;Ca>lŞPӌAHܖh&vC~X/~BЉRf+yO~$Ņat'R o+?e:-m7rnH-CT2y@,CB#=D"Kǀ(ַ-s)t SvU1M(.ւG5]x[5EFº+}LA .JLPFWl2D|fֹ7s,mK!?BE!C8 9k2+] - p^+d6JȾt?n-h'Pb[ R*'^cI7Wyc7p{J%*whn1/T9mmd*AE&DT01+ѷ42crvsLI>Pod2h:e*岩@ө=AZܵ=:gffk]ߛ0JY p1^'zU^#eңbYW*o3~r4|f_S|_&NQ=7!];匰տdfWCV(|47i.zQ&,i.4 r˄z9ITNs43yaM7Svih]o3~}~&\0Cs0gg!]"$պ4b'tf{zwcDյl?˕߄;lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0006-Square Pad 2.xiz000066400000000000000000000036271247673406200232630ustar00rootroot00000000000000\[s8~ϯ`yOIaLM 22jI覭GGҹg)7ue\rmU{wU l8է]pwqqGܛ}~+p4|ϥ }xwq#>J]Uѓ  Ux=VƆĕGDp4OxD@g]Fna#STkD7;cw}gd)ؖiRE^/# {GX ὢ>q$VK qhŶe :HuM6p4M,vALB$][]DfV7H@<]zo8vhHwx?da8P*tbK!LC^,"^3eV k&wľU7|9h0vMhek&& uiGdM죔k .r^Ku~fn5I][ ĘD^*p-&wL˕X;*ȑo1: I[$9V]P`.Ħccy`:W4jX}I?r.\9@'l+Ѥ؊ESq{bX0Y8L5u{.B-@'3"Ne:.0r-Ͼ}/r¾7tYzʽuj^S>c_& '7N]B戟]`]lVo^/(LB{@UՆ=>a#gCpOpK@#>Gp0c0~GYD~uĐ4zbhFycNR2O+XUBK+My֗hg@hBZ ^@HJ҇ԇfSڇC]( 7T!D#2J`xO$YA@aN#R 裥fK[P:"(kY2ћ^.Y06kWHZ헵(iƞ>$Eg85ѧQwS.b&Þ^x{З`. i= K }Hjx,햬5VK;s5ZDzV#]*xs H2Ɇ,n7d(o&?8K%%|̋'XCNXͲ݄eD$Jj^ii1*r``Xy}[bri2wnPT@f@@9 n}rBHz0’BؚI2ķ'yK6wDE*MToe-(d`xY\hoH"ZRQvIz.ފx4l~}b6)e(.[K9O-L)ɬ+"/LRBI+28^r v_d-G06C DTrittEMco|aD`* v֜Y 2­KIX*.D%%b^XJ?%m(jLs3(fI`Ւ>Z`^G cZ /3o*x0VSjS%31SmdL_$[d% S%*aL̔vURS-So޹CN%ŗ|!zI]qeO{NWm69&mZNh];vW0?7MRtՏ^;#ia|O|4ERq1EB"\LsP/] iM3@sia/ v<Η3ܐM3@“sCzD;PꚶBS\VMfUqo{~+CMy%kHBlmms-1.1.3/data/presets/ZynAddSubFX/Pads/0008-Resonance Pad1.xiz000066400000000000000000000036251247673406200236770ustar00rootroot00000000000000[Qs8~d&MK)s tQlbM}%l#i% .)^Wշ勏/虄5IP'p=09>^{wj>{I;ZLkM\(rRc~ltv=+sQ5 s=.g vj7/F^LI<'4.-#6Ʉ80$4Y:5@?5c׍4sj;wv7M-X;D!Gؽ'P/i.;=)b圬|Z$Db_/?pH&`e`U3#Mc (!?Έqu/bI_jE8EkhuQHqSv #75}?i&k`@sU7~M`m=3h)eh5,px#YҲ|A)bGSⅩ^ZsX0oKfz5r:XOI{b邂4nvKqIRUa8# D00Lٿ/Y- ߂wo~-o\Yqq?;?7[q>^[4d'*1y BQ a),fq4tV!OREqo>0"}@}=Թ.j4eAݨ@6l)jm] y, Vl(kdtHZt*hfnL\G>Q_1C{4wWvD|s! n =IR{ r<5D&&M8bkی&r# GÕK0*;ȺS1dVX]"ř74AY̰1L= k6t=[Cl\,U,;~&(bI蜁Qҗ\,LB̈́ !AhvYNb+#0-@U0ߊ)~Zj|'R@mL@rEEE/4. l(-Е(JK٭$ c)[);{W~6S2*AT1z94n*! ]lRJ *1VLi|P B.cɶSxq.'oqH>n/S -&^&H>yɔF&d./WəʖN:H550im : lV_{!_X¯bYW ! =~XWnVU:Zaįkv VCc>>Y'ZXT_kf|mq_8fѯ|8 G*5ytf]B.݉|=oQlOߏ—AiJ~~d%Ujvdtn%{N7}^;oq˗~s9qL'3ۼ3M6n˄^9o r˄l9e¹2^NsD|jٮֽp櫩~4dYzh퟉F}sc_8e)'LRgd& ez&mbZU`?Hy=lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0009-Resonance Pad2.xiz000066400000000000000000000042371247673406200237010ustar00rootroot00000000000000\Ys8~ϯ`yۇ 1G[I؄P@ξ[Of}d¿_Z1LL-Zm~\+m9☮e;w'՛~touZ8g>;R~ (*{b;=~Yx}WflTq8Rpt՝{u/I{`BXExҧ[Qښ8Uocf ~D ۲}#pHdd%.W>tJL M (KT%u[ML@"o(ȱe{pmƬkdtsLe蒩$4Q=uc8~\I mB׺!WO}O*+:V߹QLKjI6+HGKb".\ =HǛE-%&rFIb['ՃȊ9]QMDF" d,v=YebyQ?BY|bp2O^^ns46|@#nTVݫ\:f6 }mhFp 5`}# ss̴B^!TDL LI[LQlL3-\6]8ѝK~]\`{uO6G 󀖮n"?l; HCS3<2'gjOvK(wd.\pgtb;9c:~IJo}?ewהe//=M?fҟNEH0T^3^7Uϧ.7(gxA׉8h !m^|2]'9N,>ME9E)ŨMopMX$.0= @, *Dal!`ʢplnMHT0B0jUC/"!@M>Raa4#H9@4 NJ-h],D@!4I.>aFb,Y{QF!0q@\O0( WQZհFe"wh/,O6ce+La$>T:PBs$5À@k4gC`k *Ff] iesRe.@7q11lz;8S Du?m5u9ARҽ!aS=M%RBIMTk&瘈2"k vľ޲WCłjDwI- hJoTӂI**eI`Ii'c74݀5Q3;J(oX}alX`$f.U$̙@?B}UՒe.bLhňr0 z%FCl}u|3Ă j\mu&<˨¼Et쩢Mmg#[x.a,@Iʤ(. u(ƊK6}鎮Yt8I 7+!!>e쭥O-뙰^ Ei#)XB$Tyť;Jd~QGk䡯{# 8C :qiC{E]ȌPVi`bj0*j0pz cd$*ҙ\*ܪ O[-Z uX YS,P+|L'{q6,= H) 7&,I%`J#/ X |-R,b4:4ne5JJи! I(aI,FqK.Ie& Rߢ,qw?`) |PXJH*nNX H}- ov]Xv X董r}3=\{%mEҜD*F)Zv?}Iapuu"{~|zZo޽n|;8Go~T{/<-ď'0l8p<4& ΃5%HH0 `ޟ9dҟ3 G!NB <Isu} f1Di"<*$0咹 %ڰ٭ 9}|pF /ru3˜M׹j篱MŊǭ.4&LجY,62D0 SʊrD8򠂺Yķ3p<u8&r",0$KIrBqQDϏWAy@Tw <"6Oul^NLŎkj,.l2{?;VKqc+F7y,頲!K Ox4%x0wЄ 9X\uyL1'ݐ0 |=6  CaVy\x!$R)[Gh{biҕ.'` 2Y`vxbEGKBܜp,:ua*+$]Ì2M쫾]縅͓ ӰjU';cuÆXuÆF]C?`,]2K˲f61F K-lcF&k8YGޗ4͑bcF10v}&Hf*VkMRcj&+)]X6t[D08ZrTa$^e[š9 Zr8$LoUVBbl.a&8 os}຃[𫮫di>ufQt[t| 5*b<ʣM+k4ʨacW6 Umn;c~8`d%a6B]L)vP̱=q6j|/ߚ&}w7y^l41F8!nsEY~ix )%$lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0034-Synth Pad 2.xiz000066400000000000000000000033771247673406200231330ustar00rootroot00000000000000Zs8_R/2Ӵ%f\^4?8[lI^LCȫj]Iyӏ(lmXI|v޽oX%~?^烷o>q3?Lֿ۸|1O9oRۈ~MRPV#A\'ќfm=N7[m? ӻ|8_kEF=dۘH1a[[\2Owܝ uRSD(CKUyppedROl$–Kikږ,$k6 wL5#"Mى; J,S_d%Q`,<oЬ)sB%r9EUI)bszKD9Mn];?/eOdpp%]"ڙ, aըyҹyˑ#>y[W՝>>;㩾8T_O5_Z_>1!#fsĔt^!'kk;sqP1^틿4ofc;*y+wԁpL^e%lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0035-Synth Pad 3.xiz000066400000000000000000000033031247673406200231220ustar00rootroot00000000000000Zr6}WzOd7ivFHr "! $(G. ԚL\,gH_}AL[Ǔ1^8|>]r7?M?l1ハ9҇J"5NkK49'ጭ>{ oL'8 [8p<_kEG5ߥ[V(K 0-I[m0ns\4OܝroGQXZyr.vToC#Q$AMYEY69,ēV8,.I &un]`Ẕ)ā*nIf;Հ`ˀ"ww UOc./tGb6O6HߠNLŞkl,{:͞FF*k1h|)]`>[U.:Z*0ܟ>G[4{WYP+YOΑ9uz˄)oQ,XIUvʼn4oYry'@M'AL,`3h[g(y{ҩvZ1j)A+.u.`a<+_$i?eF=~AWVꢐd͡"SCg[LPu`MD4թ=waCaCt/xCPk8R2S(-bd\5l0Zedݏt 9RXq]Fhy-^ejHTjUuj BUYCE I @,`ӄ3X0Ey{М]h[vNJ⊸N8ȩ4yW^vKKyvISw6G)gFn)tdz#74J_e" Bڢ&.ؿΟ!IEuϫOc& t.I:_k.mUܴmj/O8 0:טFܐ0ET4EM賤یwf,pW̓|/ĂghZI 5 4i/A"&)**ЋݘcQBB"oµIPppnc>ȷPfѕw3,SiW#Lylr6m`Bpb8?^tz.Ƞ6UN2P2n>iG)TqCFOB}]kbP&_I{bi@y3_S˝e0DfU&#',NOWyo|z0g|~0|y0݃y3׿us6tׇQʮ`[VAM9hBۇoYç揸E6wYB /r eQ?vkt#lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0036-Synth Pad 4.xiz000066400000000000000000000061441247673406200231320ustar00rootroot00000000000000]r8}WxHݫLiF;h9H-I9|6 <@JT>ML}h4~^0cӺrMxw>z~zW8Ϳ;vlzA~oTkK|˻2>m&_<ۿ?,wl1vh=ʷs1rjT-c>YMrr7]O{gѧ8*j2r_bwY7\W7vQ n}j}YFR !]-,@%Tb~pjAٚwWIT㮆5+@dKUd(" s!r}NJy3T,O7⎥P\2:>֙O`|[eJmn_G3>ھs碂~'%(cک4m[grq3*ȵjX[JПLx 2Z.; + +UD!+V.$W: '{O}[ u-~fEHrֺ b#&R1dMb|zw[հaJx}{ko?ۣIփ-uxCyDEɡ: uW_[dz pdBmlFxsW 7ŵg@ b1˥ e6#ɓ'(Q%+nеjǣ&:,1qOe Wn#Mz+)ڟ!V2={[- H *؇#b0ዩi 4U+Ȗp%qcdnN* WW3uLUN;/0sӸ:[l곩&7JϦ>l곉V4m1鳩Ϧ>zl鳩Ϧ>zl鳩&ugS_M}}6gS_M=V>liϦ>l賉vϺz賉ڭiϦ>liϦ>li& qM\h jlGM8(91bB1' aFM8(`EL,~i ĄƀM6'1`lb)E5eOLBX( (bX, ,:V,â8bW,^X+ xbq3xxDֱ3xe+ ^g YY+:hBrn(Vb+/g=^9{" ,@7g(QDw.,sfCg`0@F90sg0΂ø`XV_qEٻ*(nrE7FP# l _t0#q۳De3 gǀQU(N!}*(Nba]VUY?2u݈4P,AetSǓYfZF1TV(vQ4]1X*G$ES1FT(>IW̘Q[%h+1lb^LR\$G{JF& <m(; IMZoQIhF&uݷ6stE|`14Q0X4 ]pLh5v<q-{R qsĀ\f T5L(oP oS rE#qr /7Qшkܶބy4ZCy4k\Ly4\ υLxGG#FEx›<5.0a<r0϶ /h5ECƢ!X4k,,<`ۆ<,jN|UKXD6=(PB/3=)J%[<. ,E+!ۃn5Z?Lng/%=S<5Ws%}zݘ3#{{)SZVHn/Miw⸬"[%[O7>Ѝ,* R(rKꑵX.mGԙTgG>ّ1 f>!JdF(dF*fb[Z͊o"')V$ YoU{AI(f QS 7: ec)Ҫd象&6OĐRL^+WOmdl#̄{iv)GE},&8#Y5|#IvԤXUБ떝#ƪf["JY+_ F)qp9)+)lfEYrWjC9]*ܽ8Mď'E4+xDS6.F ͂&C>_kE9ߥۈH2^D nYle.?sȤ??8sg:IO!AB <\j_L>'>gaJ,!~$ Y,K),"ld%ʂ{52dn'nHܯt©f3ˢo@̠Hf&BŧV{0/xR%nBՄoL^."nPĮ2euyP\.sC7Ν]7p+Pe]6ZhnR%̸棈CCl[&CHùn|#eGxZbU 0E"MlqbeCh6%҃6; d4^|JU5k L1)#Qv&ӜP˄oI_>Km9 (-FLI⢚3OtǴ ݺhN5 #}=Ѻ5\\1fK|l#+,=Բc<Y$#%!}>(,r 3 ں-$^ jhQT^,91{9>5-EB7+AzXT%YYV5Q~xJh.DJUSg`8aĺ+Ԑt@Ukӈ+2?PDflh\ ҉vaj ԣkLu|ElIs0I/6}%ciBb FQ BCE*꼳a6Z)Ox :(φT#3bDiи @U*T;^{R# $0wpdTMJXsU\اCa\q  R=?6q6iċ{ÂS#gѳ%Kwv"1θt)osVe *gs?X MWʘX.Q &qaS_Qew zDqG0/t~^΍x3})?rOTɞ tw=V-kX]Fk1pٹ E-> 'vUR9XƮq4%h5s -v278ve xis=0S3}Z?fmlْYxucPX:s-jOoN3hhF3vQV25?I2I~6HO%<]j8Zf(^{GpL/H2]tvrfUC'pwuS 0Y/iNCE8C2FE7XHʃj|Y;9}֤'MxBfFi;i~sCU }0j(IVh+G6ъ,~/ljHQe$(!Z5 hgϧs\'p}~R.\_\<\_5ßC}c >aGOؒ7 d \ܸj4?TeKb~Cb"r_>(u`(hOm /Hp($lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0065-Soft Pad.xiz000066400000000000000000000033061247673406200226130ustar00rootroot00000000000000Z[s8~ϯC.0&flf_4mLEґnCZ䣣s')E$i@㛖uJbArzZ ZnON-߻xl9띏=CwL%G89Q'ጭ>x oNqx8=ɘ-) OctpbFYJ|3>#iͅsMpg\[(PC,49{Eܗ(E NYE$fͳ] ZOYܲWIcbH҅x"}?wٖwT\uth<_̞oH;휮?B<̭ۺSMB:6LwoSi c$D"Ù |?],thpOu&(!1^$JqPeLQQXd_/dSt@$JIcT' ֩i[W .] 48=Nƣ;4MWK%N dn/ ́O!y,d& H*VmbF]i^,6Jt 3pmbOwmhlX7#]]z1Ak Ya2=h_$q,DւbB{%y+_>geIr1MUӺծ07؇n,6Ämkڃ*UWAa9y FePCX %Yф ~`ޤNpDG,eG@XMN8b׻<߅\jC*Xjxt$6.VA`oX&9c(ʫl rv 54[vJ8˩(al0vO0Kuv 3w>wETZ7 H /4[y)ID\W 5H%#6郋>= Fg9k4Wx2)ї!^kO.l\m( -kN[078pKBlRUC׈Sj(Xq/ŪKP quGc2E:)~] h8Ù=]o,=7h hM1#Jl@+$VT#+ D FF1-ahvFV"Ӄ1""E5p/pp@`A$Ș|EzcFi!h׃~ԅX̋Ba %Ry_TBRl]p[c[`r#$ ԮAO|:u!uz7T)q-"}"E-Hj\0dQ9NsדNshϏh/h{G?f=c  㕡s:tWD:á{ Q9qB˷E,w Do.r&dRNZt_m8F*_Wt>? nGGvY,S `Qƕ$vpAg ۃQi[á4Z7Gg㕒GA֘Vn}&1 "Abqni)kWHuB4Ih͸5թۦp%.-)gl̚ʑ?տ;,@/]ZC8_Ub0cH X X:c=&6(%1љGp/ u PRōSm "y{i=3^8u :'\{yAԹ;o>)29UQ~di,CnT. Iۢo-\& NZkKwr$W rC ϩbw[/`8{?0V1VC孉n%."uS\5h&Ѡ5h"kpn,yYăm96MJ{P=6 rFC'6j5(Q$'M5B~Oqy}\`^L[[אۊ#X$ZY&MV;UV;.$ JgJnoCu6CIfa3|]{|7ϧ{|7y>ߛg!>_cׅ_zkDw"X]пן :%vb-%A*Ka\j2j9 \5: \#z5[U W-*s QεUV*4稊{5몊|h;e ڿ/6k7&KX"-n-!ꍭX{Z@vx%lmms-1.1.3/data/presets/ZynAddSubFX/Pads/0097-Bell Pad.xiz000066400000000000000000000033711247673406200225650ustar00rootroot00000000000000Zs8~_LM̔R 7{[rZ䕁dLZzg6YI|t>4,?.nջ݌gnui>ާ½ꥭഩqq坾|).h9qaG?GkES2Oӈ]67:Kġ0k5-n?.Ow̝L wSD(8,N4ppedRO|ϲl" i8=CYy\ƀOm=''%+plpf("3(*Ҽjl7VEWj-H$7k^i |b*Z7qn&Ejaj)`_VZG504}̽keDSyhC%&Xk>qh bdi E} Pzl(RݥnCMW{-LG/q2(YQ s6#tq~Z4"a!ԗn<^x0u iƈ * \ZP\ZE΁$C€y@!IjŐ)D DYE#>Ӣ47".1:]ͅuk̹i9O̢ULbF4\TeAxz=5iāG"'Y,C L 4 F0m!7wʺ&:hZu|YSClEoZ״H+Qt3\}` S,H9!65>d#]"In ([H×}ڀ4W n}a UCZϲeP".8LcL-3t@vrx_Ȗ-JF9,["hKiB_oFFQLBCE* S{I-mNx]!Su>ik#CuAs u ԠY)p.K+EsK*i%_٣1?21YiQ0,P܉8iG͙0VCrz8{=='!JG=KXgG~,L 0M4V0:T94ɇZH8㞒8⡵a{ETqheVŔg@86. @UvwBo= ~$e!ZJy NvÛ_cu~q'ax1)nܟ-,7:hYK.2}"X\vF.8$BSNmHG1(fYFJ=^4լ8B峐Bm(+\_Z\kH]?ֽWZ?fmf'}XQax@XZ'@zt'0zդF\+*7*朇DՋ8u)چAz])P:0eba)j>SV}SV#3D+,!tSUhv&j^7<;ˎ/ۗ _}R@\\wxs;k/s~tؐ`W-AOV$[w0pgݮpEmGCJ-Ӳإ |y^rhGFA/߿P:0E ~g$lmms-1.1.3/data/presets/ZynAddSubFX/Plucked/000077500000000000000000000000001247673406200205655ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0001-Plucked 1.xiz000066400000000000000000000037411247673406200234140ustar00rootroot00000000000000\[S8~`N-:Y0B`F q/⋤#q~*]}z[$08nYwZ[$pB [7nɇG]N^[.]GQoˆrm'^?c]GK{bG[qǏ\GILyJ[Bw%KI$Hg˘Ad:%žfʒD 5BS(r2Hf!UXU# N`x~E*Scl\S瞸[Q;d8Mfa:1;ϬKCrAJ dp _&%|.I ms \@,W+Ȝ`b_nynO 휸Kj\Cc+&\ !Lݓ%9!EI(m5*OB4jIN>+%rPNb093fC8Uf*/ph+ `F=yxQc)i Yq\% ց"V+q8+ElIp0 1t!*-kWvf7)ӈms-B%fQI  QL)⢈ ߋl ̽P(we@(G./Yg ;KjtZ,\8x_Mp%IE|qBBٰl̩\~*tYtӒB:)䇣 am(4ֱav!0hr̹M6$.Lwzֿ}#:#&[QEN]+Ta푶 eHGp')``|Qa܈z0D+.5̍%n[#Tպv\, F\,hʨfMaDϝޮS8CצpFoa Ȍհ?<iH/WS{s噟yK0v<BI:u8#LZ*ޜs M3 rVKCe%j|:6j<KhJie<&JT)aIi'c7X lyTMp [N;*KP˺K M?ϰJBD*P<(%aʉ$O)jp ] 0"H\<^v,kamaT9$bέF}ƓZ߉.P2S7մ9Ģ"Ӣ|6.^$ bѭ,OC{fqB?GW)6(=mmiqmv"a@NeTeD6 3ԿV4jn(,X'Ǵa}[#mI %^Aw:$N OO;1WG*k^A(J.ԚP [ R^dq7T5lw!e\6DI^RHJm R %)eTt$p!HJV]&$e)-P(ou z 0݃-:RMWR~WRB)`]K`iL񫠼Tn_1t7mA;kTΕ=_ӗz7|M_JNkM^*՗kT;UmތOݖN/_Tb澔i@|~ (U]W/[.$ ]ՋƟ[UT,"ey?5Fj8Ilmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0002-Plucked 2.xiz000066400000000000000000000041751247673406200234200ustar00rootroot00000000000000\[s8~ϯ`yO !0&0e6,v_4 ج/i+㋤# MڴSX:7}$ty<?p\T'Vëɗnߵ۱q4sl_G%Tk=qG<~<+C+Ov+w8ZT7v&>zޢ%uQ~/"5*[w]gԹNq,ճh Wd47DG'DNHZ9nђV:m͈}UIDnHu8bOc6DuM6R0oI 2 v'wz$v<%oX-c+|^'̿Ne=D^V [(E4Dͨ?Vz&PB\<]pAƍMgdrs葬@xr @@\i:d'|4v- h]F[.ЄDkDm(\ksmɍ\pj&qs+[,DA7Pm-b#,߳xp\Bgz+iat 4t5ߎMPD'}]o=^:R5)]􆩫}?fm h :jλF Cr͜/^N*t:p" Po|ZR41WFݿﻃ/:a0rfaX hl)+hY/_@@ܡ*8@`) V i ^![P!qR ҵaq2g„}Wh㚦7t + JBh1D/ !y|}8P„҄ -<`!c>]aJ=P#`-)ajܗj/{y(P^z*k-8@Ųf0 źfHES>; ibLjsm"%</Qw<tW\2f@oyؿJ <'OŮ\kyBCÀ_lKjd~N2ꆳ+kiqFCDx^@jsI7/Ha;5nliגT1IDQD ,3ALCN6ۚ{>nkVϛArA1jLD카6Y_u(ɺW6 X RϡӨܺdLeOIsbc M eRv0XQ6 1 5Nj[-GQ߆پ˥V7¥ 0~H!FI w\a\h|]D[l/ұLlmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0003-Plucked 3.xiz000066400000000000000000000034571247673406200234240ustar00rootroot00000000000000[r8}!& $S,Zjb ˬ/+㋤lps))nMWwyBMxV;!lojiÇz˃yϚvl{=>qo?\KS|Ư84rVc~LLwͩ9++P쒛_b€ˈ]6" CЏ\BU:`k͈%,#'aH@Q ϯݷ<7d I(ɽ|ZĭDbK8^gÕL=y2݅͂(QoY3LNs (!?-۸fuh%(qPPZ!C3Y?ȩ,7W BmzBꦙ=2mɗD |)? |umX4+L)˶\ ^ҳpփRUDb"t.rIq/'r#uuW*4Er.&SF՚mpˈbѴ`Ȉf׮4;#qGf$&79 ;îfl`%GYyX.'n'G1#D .kr8~?U ۤ6JD)+,z(4K+({=F.Ѥ;|t?aV#$m|Pǝ,țh%ݰ_-Ӂ te-;ϗ) y}p-˂%ʂ%}/ ,D)50,iRLyPV 3'Hh`blla+c/ )8*Z9#pp mƫ5Zy,,f gm 2[/UQԗ2 ȯh[6ΒߏnLgoN#EӁ*LT(VE[5OwPϺV RJsi/%RUU iC d8cF8WWFJ#3'AYBoig<Uf*sf|Ґ㴬Doq7N'FrG!aôr(Uza=4a(M>! *o>bC`֥9ן KecK2K/ζSwGKMxԡ=a)ĔSN91ZjC\Pvd+OvI}8Շ_GOny{|_ߏ݇]}?q;vlzA(#O>?Onnzs+ȷWZygGq$r#N7/]E -Ϗpr[EϑXbKO7<@tXVz\:k@x8ѳ?ZO7wUwt1r9+#] .OΎ:i yJF2(f)~^Q ZTE*UਖRe G&ZOl]M/<'ÔRKٵY8aJCTĥ*V7Y*HA%fȩY!Aٙuuv[5nPw_δ,vv+׶ v'wْ̽Gulh|C\.Jꩾ\ϋŴMJgp m VECl厥Qt4,Bm~)ց8fN$EM۞+6|[FF<E)cҵbswRz|W$4"DuN,<+9VwSK~@iMqqf?ot2Nk!Nf24n 2ɉ"s<15L/.a^^i Yl.NƠo.m*7Xæ{ҸC\B-o2~1Ǎ7~1QeaZJAN_фv~W49ח~‡~[}5;?VIn Ww4n~~Y:Wzk@KnGVVAj1POKB^+7P$uAM[:^Ҍ kJij`rk5]4c=UNC(mw6ͦǎhhjUZJi [7۫a V{e/J%԰cɍ;: bWwDc{52ھ trA32W?#e?Nw򪩑PT6 LMi>L5Mi-O4JkMGLN \S'ziM-&dv >i5̴5-d LлTm2vEJjj>sM 5WI*#6\M2Z&dM_ eteJo et4h]wL-Kb{t]2=/Ked~* fH$Ca!#Qc0fGa!C LZA)\q L8qޥœ laF[4 „x2Da0b,44U,t60x}+Ɛf0<Cƌ!#lhy163# Pj"C"C1a"Cm""a"lD$ca?x23#A_Cdf ƌYd mLuC2ro3m!SLLAH/63[^b66H/9"`1]UTOZaJ\"#|@F'Sk"LVdG7f;%b=4Rﳋz%@GBL. j? t„[,HE0Fl/ f0$6KaɵrZ!;"2!yFB~v3򳋥 Q˵S5bS|U= C6O~X? [F ]^0 eGFB1@$S!!~Fݔ!!2}z`|YqɈ܌Ӄ>!>c.)Q?1}:U YrO]?UHȧlhVIÐO G$KL'7[=<BJ>E%8>uF=d |g Ɉ> Qc"kO{ #}I(+Ht%ĔLʩJgP]]^$3k=P=FצiB^gT-,Hg ҄ɥ|,H7 P@cڽ1)ƑO]HOF %*$볍iIINL$f#% dg$HgD>fH֧d}n bM$L$ӷE>ĘK"YXhBY1d}:Hg'm&xE>;3|33/QD)d}9#FRcTtwZ3R ZrRDsHdF,VԶ(-$2Urx=v5ڎj ʣRJ{u{z񹲳e[8ҽdmJގ'ɼ*kբfo+u tcčiZdff++^Џiy hk hݟJ·zr1>*aҮ k"]CTk$i?$\Sƫy"pفr5Y.QlS'J?aj)Yv=zltR-k-0*,jY,l^Ǟ@#7+:V`\lbyl]N&&\^.NL%Fa7N^ZU.Zu~ T1I:yܥ*tJ>\&iKJЕe,ŃJOs(U$fu?^u.+ `j^xyoTc'k$s,ɯ`juMPX܋ʣ3fDM?OvO\ƽ?ii:*ڎfӴZt4 g,F|r.W,I^eSS2 şT*Ԥ=)hw J D,??:W%ìì};/ 7'kT5r0h9OV>گ@o~5jռ9'گkݐy wkޠo燻9o(8P;ӻD:}X4*MPL~$&|Rn&nnvq4>[R/zllmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0005-Plucked 5.xiz000066400000000000000000000041431247673406200234210ustar00rootroot00000000000000\[S"9~W;؀ UPK 8/Gfȿ߄$9IAq~trn%b^y"AytT{8Mz狃߮?+8#|qpePU'b#G3xCWv\Unq\uV$=r#ђ(ċ6 W!mtJl MJD%tK/v@ohı${]&kdtwLRgic^c8Z%n^Y1$Ւ>]w*!z[1_-|QPbiɚQҽy&PB<|?pEL`dGj z葬@x )x|!lӨQuyFعB㯃JrhϿYss{ݟ]3ɟ۵h'0ܷhCQ %gYY6L"WI\WdsUJ1cOg8Xk{Hpv_ۮӀm -}%fV^ݘHv\v|-C-+Z#'S?2'8~ve@ˇA/YW&|;* :阣jZMבyMZ7L]͔tRoZe#P'ZD(A=HS3ŋ܍b]NA!?{.F{*1 O@ pEo;jbO(jV $L^N4.vCP~XogW y>e80)?4N$>dq~r g2يœ5Ct}aJ}8#CA1%a<JVi8:|EaQsEQ|*jCF#LE M#/ګbƪv +jZlɠƲ`@eRj kԵ멏E*ZghH/!Qw<t\f Ileؿb޸/ XOL=[Hg!?]BEmRk%۰q"D0T79]5+ o=&%ʭF? =T-!bs6{@Seq(I1K$R'cI7L gu8ljV݃uSF 7uC|rϕ* nk@~O3,q -8QJu2'A) W mki{.)?|8R Cljd([s84 `r-gj8sC,*,A[( v2ri`drvVEI(9#>I2f8_2>zzRB69!*[1("~ƭT%"a@*:`ݍTq@DxX >F&z=<=SOZg(7u3DHv O)Jј땏Κ"`|~TJWLwE5lu׬!l*Mz*3]`(GàT *P;zU,rj@xU>c *oƀ^m?*-^:<fP¯ue+]ދ/[v #V a_}(z[9aMPZR_mX(}-ϾU8R|-_!\<'WyapUoL5۶6,(GNvJ,.@ZJ.P:4AK/٧ }\XYbK gS; ,r_5=GYR%/e8X* y|.ن?:.2p;yQ=Z <&Ez"\dv?EX4i%d5Wql.Ἓ]B}7ͭh77L<]Zo%"IKmM/[^rP:04ݥ?1zJNz]\G:KU2 O_ubLlmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0006-Plucked 6.xiz000066400000000000000000000065611247673406200234310ustar00rootroot00000000000000]]sH}ϯ=#LimF쵕;PXB6 <񿟋 }VH}~ï7G']xj>=qt_~z?ί_''}?vdzA(K>r<^[;|}<|k:K;O[ҶUvb]oƗ6,gc6ҵ(z: *i<\*^T%-eR{剻xڎtxݺ'Qn]TtEUz7Iу9P :ҊlST,ڙMp|~n~WAd_^οk-_uFEnm eƏ_ѓ%S-Gn;o`z9}p[.r v-ʹCd`{ loo<' mK#dU8!xwcܫ:I #mԁۈfȽk(+?X8K+p֎ F19{Y悇H 8Z:Pyˡ:|-:9Tsm2:V~JW:p,PJ/7_ٮZ96H_d>ʷjuvvF:FBx;I;[:k|E-|/c=K'TV\Le2;6Nrhj. BRM.+;q^՜U\g`sMVzçDRta%d,Vu^tat؈lgH*'3 dnHqY v" 4bmeOK &<"}Hz=KO3 ^LOϢQI2!Zb=#^0 WDQdbRaOA-¨D /F=# N,qE=XDS-)^{POݍ`4C >Ui64Dyaħb%&)P=/ ȓQdbɈʧqO$"6?DIQ&Qa4 Bh@_J tքp!Yi!8lwd]$6 ]0h}Ǚmt@kJΐ'a+2ѥy}MD D>LD3DYZb D]vt4ɞh}vjBZ U+=%F%FgD-)MT 6at؈`D~Q}~D볣 r[Ym"Zm3bsɾh}F֗56",Ho"Z_'#Z_6D鏃؆>S϶&DasC=ԙ=cxLD&ٵ_A/N*&ֿ_M&G/5ur?>.RP{d~& kJIgCJ2:u3J2+eʣltm{\ Nj)ſY_%J"hRnK}utc⚌IMOLW PkJإ2l1O_V/TL53Gʯ9V|*'Rn!h/oueJ"\ ,Ya(%sNn/:)S UMW)VnF #}jS+J TU#[r|6Vo˫,.}0 '> hԮ԰uJ-^:#\ ]O]ZCR)spj#I#)Uk {Mjq*k W1"{v|Yr.KUY*^YUT z)`U,ե"RWk <-6y,OS3MkT㞝>ikLtҴ4R.;i Lgi')KeQ~fiR*U)릦RTRًRj3T*5T*\MIJSfL:cIgͤ3V397(a:ɠu/YxN>ݬcU3:0cw\򸞏q=z>?Lj9;{dޠ뷳7b(_8+Oޕu|d~.]F祷sy8OZH%;]]RÒ+Xmڳ}~;8ݏZ'^KP|'IcZu\w ~`5h-} \;KXΠTl|%۴}ŕ{Xyv\Y㋫_Nr#݊N J[7g~lңrˑ:=ڲ}^?n{ԆܴҴ)@(gEW殌STmGgf E*\/+K NO>_^M_y^!+'{NW_E$ZG6MQmY-#>\<^ysωY< ҽscd]clzZrV6%ӅO7[;[|2Sv?ҷF#K7Fb=^15PC{[Q®Xx䰳Sja-Yy~7w+f^, b^$CWqi#*_&ӓ?L9렀Pts*l몲MGwK-[v1z2i6r_ {/7;{P׿}MP3fиŇ/RC:z_pC}<jW+epg`brz>`׽da"tJ2sb!\fŋ.Qzz2U#n0Ivrf_Ajdڮ0kJ{vqktu=1Fp5੦=/kՔ5x%;T~3zt<=i8\{WFZj=~@„FjU9XX8~Be3߈UaEa3O?Ym+@eC+eU34fUediԎY:=]h'6F5uF>%k4GEd#hl!sO h,SLY@,@T/LdT/=E(ST ظVTኌk\1= sPI$>.L~ jDa\Qp5$Ǹ!q8 f]\q ZWd> HUj_{$qUF; ( ;}XuF]I\+gɼ\ɑ,KpEl pofW9;`ݒdbgfYsğ}#ѥQVn+{WL.=_9\,ʯH\f]_yc3B e{p%a6*waT 5dB@Bw2wU@P5Ba<f ll0 a|{D֛Xj UAk&(2}TbF )cFU~˜U~l"Jp)KLR.fH@d2m3@4<;) m&(F S$׌-frzoVMY(kF>3"k;bD|v#|*D3U!V>^}HD<;(g'sO!5O&!*H3El*DS!~϶ ٕMp0V!=TroǼ,b >c^3bٓnuMOO"L=CjڛnWgz^!*DS{|=$|d-0;M΀p3#J%foE!^(o# +7,J">{Sʌ0D F֌ Ij9#L1~H3I`60 9@ $!?q`?$5={d CT~%'7S^96g/; $i|RtOFϒu q, .j[g,KKώcècˆӗXa(Vn 8}!a!NRs"PO؅ou  qB:BdDe:]^!O]/CEh qM0rV!18}0 8m8={vB>-s%hr̞W qTۈg~ qtڈӧCۈgO,X8}v@{ k̇!N*鳗n, q*8}>O-gʮ7{j'Kjlŗ;7P**M}0E1*1~Zm:aUFҙQ?O^Dho.:s6{^:QP\Z/.oN?Wζy2Sz,)*h,UiB,uMzTwaiZ$f') '^ y!k!7g`GN`@f|3T\YSE#<ٍ ҁ-4CRqbrz2kJ %;k5Φqj~ ѿo8Wv+ն Z u/ N V"TUlu󓤾j&hOi7Vޟ޵vt-^u%ծK]oI.Iל̞dNi#EK͕2,T0_d'5 m*w]9V*Ԁ}ml\Q7e|5dJ QM*LCA&AZnEem:пYgOs)~iժߥ4ƟYZ%ѲWJ)Tj{J?P"IFmyYMRԀRs=˯'3~IΟ['?|E_X߽pt/ɧyx5y.ܭ] [ϻywn=珈_bD??~7dޠ뷳o0뷳۶o0-Q~WImB>,4*k/44_54?b)Ozo7h .?0j9/;+~llmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0034-Plucked String2.xiz000066400000000000000000000067371247673406200246220ustar00rootroot00000000000000]]s8|ϯ=+JZŲv.¢EF"u"~") mI]H44[E~|~95קp.sqmK'~} ɛ3?~eQH7rmq<ďF+bԭ~ESh@ZÁ5a"~Xey\i_ NO>_^M_y^D(O2>Hbeoʈa(8 p5\{='*F0s?d%&t1{PuƶEʧ=M[->|vyz9)O_hdE̐/Ul/ˎaz~ ]]g񺉰5T8Zs\oWWY An#*_&ӓuP@{Ft*l몱u Q|e.z3t?lp_@|/ޏzmo_jS=[|~r~l_ zЯP2n䖁 ?Dz8`YFBS7(3'•0+,STeETtEM0Pڎ&i׎WyQ}(Zf}mZ{gZ{ըOjأO]xmW=C<հ ]P2%f~ xD.ٙRJۿ\On.I´_nWݻ4w&/a%Ld$/mW0Mƾ_HA7ժAem0po^ {1dkys8/TP3 :ZE1W͆g|jTMYXgM}gUS@SU\\\A`jnya(ʎ̕FdeŬ'ꡘLB N"![ 3(I`'9`ul(pg,0Hf&,+Y8>"L$Y}&N+Csi]+#+ L)3`ІJ]xE3`cp$H޿ψxQ p6W2$7hoAWws]!.YWM!ћM1D!Irnf^YQN^K O n$}2R\|F>cXHgڐ4}ZHg4}@?[HgqFwrf`AM,7VSn0v/i삪4}^+ ZHgˍ4}YHgҥ4}JHF7 ٔDx>#Ma3Ymd_dSf!MECBcY(gԋ4}6\TƟNؘOi,dOٳWmݍ4}V!Yc A>U=[萦/QHӗIC*S#:1/"OFj5!q ,gY?2B>|[He[iL,_YHթ7ٿ_Lvd_xu-W)ԏ_Rz_K#EԦ(-$UrwڛsܧNT!T W so~-YN3%n%9*<ے4բYo=w*m;L$!Ӵj~:E^= Q!=}. ѩtg+>P reeB`$g7HN I^FCraa+TeD:lz8ֶ2vF}C¹2T**jԲP8}F^ ݖv:j.lb)xnuJ4oI^5{h !-`FmMkJR JSc!rޥ)#=ߙTv~ZHRLsi Ut \/\d') I+XIR=sF-ޠ ϙל)C-71 ZMPXj,*[gԁf?8m8 Rp8}0.<߇i536Gi'!KQ+GiJ26Jo?( RT ] @,<_\Sޯv~0_\Uޯv.+Rw^9Y:(bMpxI<_˻wϻ@own-Zλ wk9?"~$ڭt[ސynno׼AnnoAZ%M;&ggD:}X4*cӋ}KMb#r6wqƿv7_un{Z i٢}llmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0036-Plucked Wah.xiz000066400000000000000000000045251247673406200240040ustar00rootroot00000000000000\W8`yw sXUpgw%'A:B~S6MZZ477/7ǟW|uNƧz8kIf6?v>9}}ruٷpOᧄ s=ʵοNeO`}cĵ;+.hZَx8A~-ɧuω)pi$^@UPwԬ yKC-+؃k5fP4_Ϧ7)C&di~z {bƋF\ cEOMwї(샧5Ie|5VG('ikZ&#P&c6$sFf['4ۥ`OTP5D@dmݓ' `B<FB+.inPx^"jqV/.FL|pԿzX|k8RtM;xBtHك18w"&7t-tt+ҹ.5A \6]9ѝkq`q_d/@ٹG|֮9f`"?l;) JVF*3Ng ydI :'PTB`ˇGPYb!,P}Dl;/Uw7/jdNk#  UBTb˹4+C0^Z/ Eh6B Qg%lPrO Y n㳯Y"AAA1]Bhq,l[)ۖذy/_:@@ qN @./ afR0#, TP|M v9N ǎPƍP0]UHVxxQ U!oߴ(A'a&t>4a;aA6]NlXtL/^ R)^x k]8@ f f(AS>[[;1T˔]$UfGbI%3\Of} |Wչ^E:1k '1@o+Wۨ6L瘈2Rܰte,hh>[.54\'g iI+|oz7me%%()!ҐIi'\b7*DDy8}؄M^&yZi#\Ќ'{MeBWu)S TC3Іt%U)D`n M5졿i(Io4ёoX2b9Zf($zx)NfdUdZ4=P+Tr ŠQ}z:i&rKfP Kx%[C3es|EW nq$&i+gp+l1r5k>Vg~lep(ۉTJ*_|pU O!>v^3;iIU)գW( p)UtЫфk5z 6vyþ`{Ch_"~!LWk.+{SY;P,q¯DqX*o/ZWxHRM#W5 FG?~M6N'~4yyr6 wIv_}댴K*,]a KśԹuNodW;&Xa)plf[RpxP:Xx3Uc۩UAJEbվ*?A{4W?ju.P~@a2TJzG;n|\ -x^uՇ !;%ENƹ>nd%w\ƹj`s.ǹ-D8^3݌x=/7P^ׯ9"\7S=‡p88E6z`L$]Ap^}ʽ\J= ToD;UKVKLZsk-Q.d4=m$ijI*)$Z3^Nd'`CPզэ lQ6A6dҶcɥ}i0k[˱< ]y6<_C04f!bsJbEz!Q:7 hAXӐ>ժǰ9Qlmms-1.1.3/data/presets/ZynAddSubFX/Plucked/0065-Plucked Pad1.xiz000066400000000000000000000033571247673406200240560ustar00rootroot00000000000000Zs8~_R.1S@n.n-+C 7}SyZ~JʫwFa뉥Yėmv^en1|oxoדm?ϗÿ^SV*ս$m5+}Z i)qkJ Gdv;X&ckCSLӈ]l53B4at˲vsK]yNjW~@`tLǀ(# xG,e &Z1O[Զ(e) ~ɟ{JOKW*`W/dP"=("~? s>y)E{I$*|a*;J+#a&%>Z4XMF 5-,I47ԴD9tvhX bȶug 8:2'%,Z.5 u,_>WtC*!~XAdyŎ%/וӳ*!"L}n'&эkqI3F G$yvѭˬROl%Q`,݃CʓT+WJO' hvgޑN딆ĕ!N120,]Sl? ʍIȚ+SdLW!kFIx$C*=Q+b*(JAvŦ&ֺ(8زO۴fX#w~* J=_bNSRkISTx\>1B"?r*k2GKlRWSRKJRFBVfD<_6@tBZ6lOJ*PLa LMEt@I9OVDzȹv(d5ݓU4P#G6FUmɑ,C)5v^_S̝Oƃ,g>G1d>R iT4A I 5NJZZ:"8No\np3Z#Րe7L+ W sv0@*2P!\NK)-OaOI)486 @cX5ZwtnvGu@m~| ͬ tqV7É<]U1{^\tQ {;* WɁR,Jg,HՊ7[M!6tLD64^s}UPZ03ӝ;oBZ_flС!l}X`?/)T}BQzqA0a~`ΐ3 q3 ./045j9sv8_~$pQMRo,L!eŚFQt=^JQts W}zq[ OE|лrj/Ny/T(ۤ—-6$=A(f߄Ylޙt 8,#QYO0:tT@T*˞YgS}ƣNB~>=OTx_V #sĄtSy1Ip^-ĽpŠz.6ZH E.M;r؎,jrʟ"+u`(h?п╢T$lmms-1.1.3/data/presets/ZynAddSubFX/Plucked/progressive-house-pluck.xiz000066400000000000000000000441621247673406200261350ustar00rootroot00000000000000 Analog Piano 3 Analog Piano 3 lmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/000077500000000000000000000000001247673406200213225ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0001-Flute 1.xiz000066400000000000000000000032301247673406200236320ustar00rootroot00000000000000ZmS8_;  %4spI\FJ֖|Lɿ?9~ѻfS^>(tua9>w>|ph6\~w/_>Õw$aV;I'Lm2wd6ea 0u~0Jn@"0cO1tlWV}p`>s|Q+DD!|gHPP F pJ,B6k۔Z!O'IPiMo.O =C|t?ܹe [2|<qQt\uw${Dy SIǝncTgwRcȵLEW5 ,}X2,ݻT C[ߝ{w#'5sILI#ǎQZܤ5?\'V$?{=GY Ksj`X ⍘ vͳ!Fq̴C !cU?{sUG|UM!!U;~>;*$=EPfZvT¯ZR|:A4_%5o,";?USWܵ|iQE . ~iMW]yE}e0M'|t_;`vuJ7neO5k0}Nڙ>P{V ɚE$ڬX瘗!l`TÑE w&}j 2=DW3]Hl~f4.mzjIA]7 eN W cEB=y^Ҿ»&#mROB1qbyx>9a@ R gnԠKI&JV܄ZK3{v)N@,HJAnjSehK"x*`qLp;EXv48ގ]D_tOd,v"7qB pBr,eؒX80`~s7K`я!>kR:N){ |2$|s&ǒM 9# i3ahf?ƆNX$D˻-Z6D@aLDݭb1 \&@hC͌FϊqNwCNȯ(BV!BcH`j  ,_EH>@J@t@Wӈ̍Y Mqi¨0QWfzE6G'$b_$u?yBʃL7r'u.mڢ>MpUKc#SزQ#5t-HAy;,xf|u7M'Ʌa׌|/Fhf@XAe8 h9e_Ʈ/x[pjV. qeU4[aC/չ -255v+ƫːa:_+3H"]%Yoت\L*Ri2ze4fIͪ դI,w!V_~Y>C?` gZI*(hӀiHH)e)/yT*\Cع* !>4_1O50bla94KH?x_oAa9AԵ2I6ӃRj~axUC5~"b",YQ,Jhu(I t@uQ/me Eeaf:_ i2/҆zňBTT!LV=H-|gVKsU&Y="fꌭ)i>J`uL4Xwl(6@]86/ʇTq ibVT¾򤵲 Pr27G%A3]lW YaseٚU[MNZ_*X?' 6bzEDV(/#Z/' |yfZh+_k?C'Np JȦHeȟ,l5m+0) g*O`p_gӖaM=ȏo@4{z67rÞliOo{s2'5<,1qiN |-p3Ǡ{+xt/B \Y啡BiGfٻt";+Y]54555S fMM6TVSYyX.\da5*ΈcHpR.?jFEv3Sax1p!BEq[Q~ٯt(.cEX4)ݭ5՟YOʯmߢ㣦ꅺ:j$ C$in47 fs3MB悩D4|}%(P9L[Smo :/Xatu5GfBJ2nAxhRh雷iwp{MfTYlmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0003-Flute 3.xiz000066400000000000000000000053561247673406200236510ustar00rootroot00000000000000\r8}Wx)ٲ\gJk5%d'ID"$  E*S˻_WG,08wX<^t>,;?fOw?^ͷ׿hB߿y?ޮaĵv?Ⱦ m~إG37> v'h1M64"a: ]tFWK? Nww fGP E?F +{)ɈIG\Y]sǛYb_,(I!9JI֫eH -!/]oV~5at>HiTc+^ Ar90H8Qي/4W\ߏau-5_sOׂ2gZl:^pX(rxYfďtPfÀqSP5!a YIϙWVE6Z[2~xXcjj fɍ2+5}9_2%_𦉭Ť"&W(OlWT Ѭ@ZMrazp3Q[%GTAVGTIy_3#U2C8Rϡ_TƱs!U?B}hb0j`!xsizLނr!Hke]X&¤*j/E2ETYXВ+ԣQ|$_ CQY6M'i{78yڶLx1boU1p7S}v.{Z[4f*,[OuV4%E:K]& .:j6.@]86ߔ&d'թ<}IkeA/d3oJ63egخ?<2-j#Hʲ5*H?"U~+N4mTJ#ؔk꾝W, 噉kmk[ !p~S;= h+hMm@_?;%YjR]FW)aR:u7U0&ɞwgϦ-:z;h,mn==0ӞtA  xBT>WTuV"\y]YixceQ?wQWK[ođSL䪌Cwzҭ̨ I UԔR8*AN%\cS K-)NH'0WNJm?*ϰ*DҎaAWqiDz|ES!uKuRv,:y.T諝t:)uJ`{K ~-2 3 hǰ:v,α:1ն۱,ïUi |5PK }1ٱ8̭c1ة%Vxhg`ܷS% (7NSwP[ 3P+w_;UN,c諟9vj|İWĥ:1Gi{`PqLO\RZxEyePQ3-y.nh67΀JVW.g M qMM6{UYS{dVޫ`&?V655Ym C=3xkˏ7QET^0\(bPQ֯csX"b+]a8tMJwk>}}y={CgS+wzέ47 /C67 fe3MB&LsPo`juQ3k_sI,7 y*Tίfc3SsTηDZ,xHT0_.KG#3!8R1Jѥ^swc7q?Ju+v=TYlmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0005-FM Reed.xiz000066400000000000000000000035531247673406200236100ustar00rootroot00000000000000ZKs8W3"UIX05ًJ+Ft@.4 P($%t[/m@?׈CI-]l4Fzd v'amsHB%6 fw Pa3ݖ٬S3% 9}XQ3̬aug ,%%61Aty1QaJ0}o%D;v3:`svz=06}Q"@C D~Jna0{sinR#c BJ ZK=* bluK29#.+eW*b3MRU^î`صA{EX~J kZGKE"DH f^7 $<+8@2w2԰zk8Y5{)^.FZ꩗<1;G8,K˹}9ῶ.%ty p7eqAUՔBݜ1'吀`ŻFAzMf `X;N*ż?aAcB!>/*dsuj3p7r> #$AgزS4Ut.ec| ! !oS! XKBh&*x>?h=f{~qč| CH=2g C*h#bJrA,YIWJ'CsiBQ|>Yr݇M^@Bh0ߪKL(Nk=Uګ='vZ4_3O> ʎ_%,xj,Ĥ5QgtrWQAתY죡F#+@3~d?U*I+S!Td mҙkE*<0Rj[f54p6 `A݄2vւTǙoQ2=V&$$ٔ(HKi- mpB-3b6"BRn: m( G-k}B)~o-t^}r߳owP/VF(ckS9Λf%'Եsk־z#f7|}a7OIK(^ 4oJ4WW5UWMsXV\4Ws5U^MsBU|fi߳iߑAvQ|0l]һlHog܀[YB)gTH(tX5b-fU B~;4-P^v _M]b/lmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0006-Clarinet.xiz000066400000000000000000000063321247673406200242060ustar00rootroot00000000000000]]sH}ϯ=#$S[qm,ymej3/D@N"@@C# {*[8Ч?n}9.~\<9 Vf>6L/~zÿ'gӯף?|~ڟ}P/_k]qʻ<ބ,\;79\ oe;_xظ^hmg. ً\FS6߆#zx3MG7qeI=Kt%`WVT, -7tr֖zt@0sr-V4 U:PT_]:@x={ݙ 5Y6vzj4&!Ȑ"h|:[r ?4jxtg22bP(>|^9;)˨*?W 2b 5[Չ;hET*qj \13DUb.LG{=wfmo/='Y%hzTq*@6{V-˪ ]oWFbrgZ; O ,z朧Hr65:[ݛ]LВ'js|p^oʹ.~$svtǔ_F_``kE9Z$,CkUᷳȱ^nr6+a#sgac3 %`dO Ĺ(7|ϾŽn}c.oR ԌoNꝸ<В zB?<*"[tt%DiUʙ.:s`? j5<wv˼s&€H-OQ pR]@Wk?ƺxs/^laŘv߳> 'iA$HA2fZ^P=ݯjh츴6O;Z)ƦB;Zh@9KgƔѶCxQ `gԉ3=(ChFQ,NQ, VQ,3W xŰ5xeYW /UW xŰW+ѾV xŰW xŰW xŰ5xծv ^Is47DcIsxŰW xŰW xŰW xŰW xE"X bX+"^xE"^1,"^1,"^z^1,"^1l ^pxk[WGJT5x%oz5xի^ ^jWW'se`}+kWg>Ur6J'|K3md_^[ )}}fRPc 7Wm\6jnxeurx˓W 2=dvbX -,QL<`̈]{-@"h hq0`Av&I5 g`q0`q0b5b#Q0bQɂp\aH  t=#%:@R;x XfnHv~}ƶ$dzϐxhhDYI$dKNvl9uTq0`Xz>J{]Ð0/ 2/ }0lȑ&^ŜA풌aKR%'P T .)]h-ɨ#+aH[lހ=*0W!ٞB %)ű[fIm 0$3@=S; $ߟPgֆ >6zF8G!FH:>PϜReFR;63|O[Fr>3R\U5@>cad&\k"MR&fj(&y5Wj$7[5Wj@l_{20))W F `S0b#M3)J$F 5}  #a)oCf) EH #㑜Ou0g,YOW "٪T/tvʰ(gX+g“]xa "Eâ_ N~1,:Űâ N,/Ϣ\-FٖiWfZZk竖ߜ*k]lLRMfe=}\Hzrh\H)\N]EĎri6ó7{7-c9싯 :Ra@[nR!cj}50E&ϕQqZi04I--Jޢ|j(Vi'Ÿ-HB,-J?TJ}҇JɛˁX*"NЩ|:Cb!i7w{>'wHWzUV!0M#t1{*U(&+ ɗy߰;[6]n.?K˦*o@5Ǎ(Illmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0007-Breathy1.xiz000066400000000000000000000064511247673406200241270ustar00rootroot00000000000000]]sH}ϯ=#>,U%rk;k;Sy@6 <ߋ }@v̓]R?ν}vsׯF^=4~9:g{Цg{F5k;ǵ*![E6ڼf3S]BMe|3iB'nI'Jx[ (NP Q(1%QQb]Da(aɈad%ONAad-7Fa(ٞ_ѻ!nn}0b  1HcaFa$0L0 F c`Ø3@ib~P^,Y^0F c13g/O `tɆ3JߋBma';Z7QQ ːfq0X%T<1Ø=E.  n 919yMOO F `tmP&Z] Md5ܞq0byr&s02H. R0b#Q0byFaVIb&(xf,#Mr-VI F$YLcU4X%M1]F9}V(af9P4Lg)ov\M5у{(mD #^`؊G `1G{I(ؔ=([< dϲͦ FWYZD9}vi>aJ&YMܡ2=n9ҽ))Y1>kI6{k 90Eaɰ(a5߯.NǠfZF!u ]*)C} y/YM%LQ(-$锇*2"y\};YCf{ZQMyj:OwCn:?iKIʑOUHxY]jnCvmnCv5eP]mܮ6ToWs~9?|^ꗳhh(?B8VS$U]8M U~쪡OL~ڪn)so>j>}8yrց{O_'7g}O}go0m/x?CӻGi}_Zj=>qƗ׷Wz,[k't> .g/|63ȧڐ"u3\ 'ۻZ3ג`WVT, -7tr֖zt@03;\ g H:.UN:P*ު(nf=ɆW(Oh|7r5OŐdȲE+qqf'ƇFZބ0(Ȧ=|^9mfQ=_*Z?S fzb }5[ĝ} 1o(Zٞ'?ugKK'g񦏖,=Yn[JdUӬjq1mR^;ֶ7߬pͰq* 񞬕FzXuQ`ʨߖF`D3±lS(p=Gv^9'31fVW"m[,':9eJVk}:Yc2J1}SYHBU^14%V/Uᵳȱ^nr+a#3ga<l2Ƨ1:Ź(ϿBn=Էׁc)Uj_';^Ԭ /mj`Qe*7=?3|㌿ ߀_/i%;6ʕ>mqoXO skСNrCc痣rپ[eR{bo, S;t\ EW5l'9SCCh"zpmȮ|$,R#ȳųnCڋ5j9aSjkuMVzΈq?g<^vxw=+`4:ߙyDS9R4m? ''(JÁE_o&ڋ-1Nk'=ۛ:9lnX&z4$8͛A2FZ^nlzгj&ƎK mh컵3F mhIhM* w4՞ZhxDZN]O''j.Q (ES HEUh +Eb2kʬ+Qt6Ƌx>a`[W xŰW xŰW xŰ5xժV ^I#2^\X!^1,"^1,"^1,"^1,"^VB7=񊅿W$m#^xŰW xŰW xŰW+zW xŰW [W,?U:5x%s%*Ƿ[WU5xխn ^jJA^}xE{5^ x{ _L-}x3)U뱄}9ZD^D^%gkxcL6πW k4+8zaTj!JVUZ"Q0& WrUx ejM/ aٙ $'7Ӏa a ađZ{-#і>v[ 1F cVxIOl)zO 0l`Nv3ze\GFF`oHmvIw#arěҷTy9QHIay9░2/'R `0 `0 `80(I |aRyȇ1{narIØmڊ aWw vCb}zT{gK~OTe02%Yd䲧t#ˡ3u${j$H?c{ReFt0HgbEJ*$KCƌ2!N#Ȃ8$SA^(3Am7H§i/5nH`K "Ð/{76~]a 1$R9a !=?H`8%YMnH`q0ÈIHO~Š Dq&%RWS('nlH/q)"}Ś)1a|;cbm2lʓ!HӧF>#nHFMD 6I3+a)ɣ|BƋ|.)포πZ]v ưHcX|1,[ "Y?),g)2,m vDE*{)iiۭ+$>F/N?3e_j2Xt)}W.O򃩛Bz_J#EKVj[ 0t 9eE;s9eqeÕsػ]KEJѯקQ?mB(ga{PbbYɇY؅:@N1αX`qV8@M8"łłwK+x 9J3/U^R֔0V\PY!0XQ;$BLў%pOy&*1PlwVNf0v<|qyR,ku!JY&왽 ]aF ˜:Vl_\գW`CnFWy 5{(۲8-0֧V凧ŁКwD#hn,T 'wk^9K\.' Y6i&=Q=vx]21x=w2O.Eimj*4t_m|&,Ԉ@~TVZ.:LJ8 Rp{ Ӽ0-CU;CwX͇a5Bj>՜>VLj9}5Bկg3׳ݛWu}KW )}0O"a).T]SQLIwT?bwzWoul\~.v+(1.llmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0034-Reed 2.xiz000066400000000000000000000063231247673406200234470ustar00rootroot00000000000000]]sH}ϯ=#$SZ[qm,ymgj2/f"V O"@@Cc ;SO{u]^ltZG?Ͽrs~ӻwq:;z99;ٟ}P?{ Rk+OA&z?>#ѳK{hIӳ|6u#^[ɏM:Ґȧ~jKvĺ_/&7뤲ZzgGQo+*EZkhY~QS(˽sk*u$KR)=/vR[SvdoCMnW'|z}sb2IC! EҹWu#C;J-qy0,ȧ=zZ䋻Q=_qsTPQ Yr>嚭ő|lubV*}(0If6LRrU\`['e67́‚+ MShjBK7uuz[ž5`J6G7_N,vj3+s}C^dbITMd,GYNE^[JUE~۪]JzZ۾,}7 uY%ܻ??Z3 "&lߕQ;-#[rc݅kgQ f R,sOfcl9VWU[,ؒ':9U{k6,]kgrJ7G#SYH"U^G꡸4V/kQ`\-hS-P8F}waޗyGlrg1:Ņ(gWLOBǍ6~N1R fе*5˓,jޅ6k֙J:ߍ֟sa߃o@>{=r7Ug _ h_W'rپ[UU{b:o, s;r\J@5|'9VC}h"zhmϿb$.R;س%n}ڋ5j9aSj*뚮s<[8#,d~S+{l:ԜtiԹݙywDs9R4=PKBnX.etvZV ź~d/rX90mai*HŃqP@B8o-@B{Zh@SJ7Mmu::*fi.ҩlz:>Q, TpX@)X@*XD+6ψW_ ^1,6qz[`6H:x>a`W xŰW xŰW xŰ xmn^I#2^]X#^1,"^1,"^1,"^1,"^VB7=񊅿W$!^xŰW xŰW xŰW+W xŰW ۀW"->7U xo+A^ɓmA^ jЀW4ՠ x%O {ٰ>8D"հ0DJ/>/yl]c/ ;z i#+&rxӧg>^u9E%z$*}:/UzAL2 bwp¨<ծRP+c e2OjbF 4:_=F 3HzO08080È#1d-[F -#1 |\;|jØU{շ< R-E=Ru X CF $dzϐq!Q>%arƏLy@Iar$`09R0`#a^eˉ80808080Dqp!|^&W7>ڊgWw @b}vT{gK~PԠe02%Yd~e9cf~do@͞lBcH L2H cV{@ƌ2!N#Ȃ8$SAEPg >nO= ӟjl`1Ḋ!%_nlW S@b13L(cn-F>$6:KR0:K4}6fi 0Fq1Iir Hӗ``S02;(g`K\'@>bMEF0>1LEe0v il6ɐB[F c`n#MhQ o"M_$GZ0}Q^a!Ez>kGg@-.XHcX1, -En`Ϭ|3 DE;"âaJg{ 6i v׿O&{)/5)s?B({ds!d"wKVj[ K1tJIeECsIe·O+;dʇ+M%wI=΋t+i_|[Rq<Yʳ)dr>s'n+%c)CKw^Vr)_3]}ʥ8ԞsMN&S ЄyYQq6y *_iZiX nroqi-L+ 0R38%[,-PKeKe)X&#Й|:Cgr>3ony:Yo(a7/<'>}U;}_r~5Cjއ՜=WyWsk]y_ wh^ׯg7(/AR^S`rv69ʇP)t{OM1y+ID޾S]]ܲvsYXڭtZzS|_~b?hz{uvܜ/6 7i<8wj048[F&-=, g&gf[0eh4w|L9ő}k3"׾r (7~-\ۉ^N17ڷ125–Hk Z|om!Ug!iYr0/6ֳY%a@Q9 @TZ}l9a001oz2ob,{-,gTS ! 07tQ!0V'\\&jL,y)k+r@m0KV\VuDʞf~'YOۇ~(է*{Za*ݷ6ko41koRk6v/s]KvMAϱhx(:؞%Onպ=,UBuc,_Xf!3pMq-lN8jVi}G17ϦЅY#UVn.$ I wbU l~n\Fix9Rh#{Ⱦ6rj#Gȱ6r$'tT7!> }<2D'ds'&& JXII賉;kgiGggSOM=}6USWL=}6gתϦ>zlxZl볩Ϧ>lgE t'L;m>liϦ`SQQƣpUC{ ؔP&J\ZGsU"ARp@wybt;D3yX΀Sb, yK6E%7FV3='evJ0:^exE~("KUx΀WPB*}/PΙzV\4, ]qra(О&$]ryV`aiJzdnpkFw:D!w NI l6``SbƂ80 <5ހx~l2ng<-QH#F,|1p`gȀcBÎ K1@IV:ɝtVǖy0` ``,1#q' O'LO7ƂøYKBR-m!`t6BI"DA|@Q|6ăAGwF՟ےtglF v611b;2b F (ϒِ-Mm 83Dd53tJrvYi"ΒU@ÂsgP\.](σƃS$;mɂc$ F,1# (yp>?r4c=JrsI %St[.ϥ0Lgq3^))`hP/Zdԋ)ENйRPgdͫ}s& WL(iDjøklƏ{+ɗKC%/ˇF>YO#PK)+kZ 2RTJ˿Wq⺍I9Jez V)'s:& \ ~P3|J*+R$a%2+*oʮ9fz {*M?ܸአ:>ʪ{TXwj8v uک᳻ Vf)57nJ˶K`i%Ymj&RHb[lyqrml~.i#Ad֥R7v3f-X)(ؑ?~҈zբmΩY*zI y)ʇO*XRaژN Ӻ"Y~Q\ҩ,e0G(RՋTnzάnzެz=ukDU&܄^znBf=7ePYMܬ&Tosr&js|OO3ӳ;If~'R ~>{j{GҨtǮ+_ӌbGLqҧ~xd_{2Ūhc>U_& oblmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0036-Reed 4.xiz000066400000000000000000000063431247673406200234550ustar00rootroot00000000000000]sH+g@Pdq 1xm25 H,NIHjߗ{*8o?>}H:|b~B/?6_Zן?|l|\6~݇\/&_o'>}ǹ[_ޱ#ӻGY}_Jjmx~ɻ^G#;'id?yrc 8^'HW}O|{~l/g?z֡ȅZ>FS6M= nzk9%E"lSQ7/]]YF# CXlN W8T"Jn}$#xS7jRu:H`4I'C. "3tfZ&'`aX*{t'wӢyֿqsUAuk;O2YXqpFo˨ ߔ-v.̂u;w0 e=ߕ]Ai.؉t[NHͻ,~{Nm[Iߒ'OK]ꂽ7k'78kgۥLr93{=S],2*&FyYTlQ^,^S(a-^};QUDpx+̩P0%v/W=i`BR h&_[{=` [&Bu>L:"_‡:%a@Q ^@TZ}]Cc]n7 ԞB\ ?ADgTZIS5I1dMڑZҎrdٜ[0P8~=뵢=VF*f<}:>=y)ٵcZZ5ʎϮv-Y5yMgzHx$< lnwQtQs'V>?ZFd* ,MG%-FnX.]Hb0l;#{š|P7 |۟a$x8eʫR# 0HO;@X. JO4 Z,iB;\*fi.tJ@<1-iQL{Rb]AŴ*=+#ȁIvs=\bE\1-c%\X"qEdqŴ+E\1-iWi ApE+\u+v-P-jWT Zȭ+E\1-iWIG"Vx׏"qŴ+wWLbZ"qEN7rԳA>\bE\1-ZiWLbZ;"qEӏ3;"qE|s"qŴ+E\qF\1\uWISgiWLbZ""Ⱦ=o"tA.:y= -u-mK?\Wmr>Lbs(mMb7z!2X$i+}LGgoLQ-I0Z.h6+}]-!4i4F ŀ0Xyb\ b@¸ň0DFň0*F11 CQx.>01rfJ̫^,v.G vbl_7d;#taģ0P8)6MUeS%^]?a~㽪   a\ _&?2 a\ K{(:ŀ09q1 a(DO,Yaو0fP^x;aTbD#˜KGzaTbdag0c]^F3@ua%P؞23Į0EN"i ƴ-E"ŴK SʼnEGHf2{c(zO`(|Ow(~O(Oc(Ϣ ᳐vZ>&o(>(n[(Jdd'_?%B9)wͣP{O_ W>B7 Ý(] K}b@#, ӤfP>`b@¸8a\cC|gcC|~cC|~cC|~cL0B K (OXʧ; wt<6 RB1-`D51"ڌGEƋiȴt1-ă?x~QT{WbZ\}Ǻ}bw2h-RWn*{G嫐NGd&䁑"+!J Ie|E2<~\}g>,)|Jri$7~.Mp{ɽ>jrJũ %Ӎ/oed[Rj^ L1XdaV&#*iy hk hwX`v)s[eĊSNK %ْ'*H fKmURr/)m/I1W  T(YI{(s6)w7_/mjrY]e sE%K22Yn[ԱUf?{T^5rGkcohx'L0'6+C!b]fVZi$߫5Ū]hffTShR$'n9.%;nW1qR>C6RTyY˭Y1i̊Ws)4XnSdjn30ӲUTM3tnZ5a_ nro~ iM+ _M8?/>Idz~+x>RٱRY'ESgY$0uK>LEQ7wt.G'6? 6R 8ԇռ^5mjjjjjn첈95oy_o ~uhB<|@䗒_)|0\LYNSRhOM1针DO-b7qC ?KC ~ Y-˻^Pllmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0037-Reed 5.xiz000066400000000000000000000063141247673406200234550ustar00rootroot00000000000000]]sH}ϯC)5&S}Q lM@b~@vjvOqO{QsuY}j'7gurg9|f}١ÙQZǥZ'"pru3^:Ë Mo/67RY}x?nwdtwWԳXKwZQ*2zۊ徻2Vr \obTrsgkSрTCR~ulسNlq$]'w_GI YV>h%gv=k_eMuOe4AD6Mo+[mYZ3Ph&W,ЧXu5]OVJdz9F(37JUMXrg}w^P0O7B?܄8:&ıt^\XƓJA `V9^~|糿V vz2ggOŒYm%xvbV/eYU4Z|\LSS^/}ϝZkۛK qoV}fv4}vTf|8xw#L=:H BveԎog#syԙYkgA)aY#T/˜gZIj.vż+`ʚ -y2s/|]]Yه_.o^;v]b'/=s00Ucu$ԻYuhkSb[n;[}jᆛ*O16|7s6}Y^(A&|TS[Bpqy7.97*%K)R38f]xmW#*WUea= g]u o@/9״Ufgo!OB o\rٿ:M_^}c*s}J}d!ڡUT/NUȶ! Is kk{]i>c,F-k^7QMJKXkc+yš}[i]ϥ3C&VZwp|^qz۪ʱ_d~ȟKEbo&ʄڋ-3k'=ۛ:Q~Xfj<)hIx6*t+jevqk&s4vZh@B&ZnO4վZxěZNt]O''JlP.`JQ,RQ,`"Z7@bX++2kJ"#GeOGbX+E"6"^1,"^1,"^1l ^k]Wm $ ^1,"^1,"^1,"^1,"^VB7=񊅿W$"^xŰW xŰW xŰW+W xŰW [W"-?U{W xE"aaa=E"a`W [c#^va5x%~F|5_ Hl&̏W]+2^dߗ[SڹJM䩐 xŰF K,CQihjDEZJuUy6[]I탉Ȑd̀_`0Dޓi@z `0 `0 `0AZ-#і>v[n?fq55a̪O= RDR0 eØ=w0ҤavDm 1 KojO7H`0 `K mOFCK!Pg$A}rUa,@0$hчlGb5afn&,2@= zaAK٦ pIo3 |0I48YUatPƸGqmQ0=(c`$w=#-Zߗ6R9pfK5@>-g F)0 F$a4}Fi&Nb zr6.iHӗ]4} 0씶 zR+=M34.Ii8,QC0 K-4.zWh(풴5 ݫK4}&Hg꣉4}jn}gBOi %B>L˽2N<ןa+ AM|/$N#50EZâ aưZ|fHʧX>#ahb^vڭ+Q/.|6^o|O\WH/m`~su>:8L}ɜywҥ<^Q?Bnc)/Ym%,P\H*e$*q߭W疙Dž^VvPJ WV˛/bw-GA+EaFy YB Ȋe%1fa*WtQ;Q8b)ڌjFVtX0jiłwJ+x JK;%&%̭SV 55Gr9Vx+I%UgHJ8Sp¥e/%6:ۤx]KO<W٥X֚ CRM3{Œu.EPJ -p*!Gk#f|uDM0ʮ,>k7\êtpʹ:fe\Pu5z]W7R&%d(q!땓|쑂mSf4sem+?$#c!KKs7-c9Jy˴widS6ALMү6<faZjDis{?*L+-j%aGiPQZ)z 7 X(J??Jw%{(=:S 4@,ՐCjqTG>*ǡS-tsό='+5W8l_ >R}j>^}>z|-V!t>C~XC}谚G._TvVC~;;ݿy^׷Dy$JfϙBе<$!yO|wVwqƿv_*W=5˯/_|llmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0038-Reed 6.xiz000066400000000000000000000063321247673406200234570ustar00rootroot00000000000000]]sH}_{F}W%rjck+S}l&h~.49SSyܧ?Ͻ}\m<{v6{΍g7]?7/x~pws;?^)H/"z8Lzg mo/7l~dף>,geVܵ0Wdtw}uC U`zAٮ/Ĩ%,,Bل2ӥIJ[ue&Bj T1΋2 Cs7̞‚V瘛\gԄ8nKdkɾ5lJ:GOKq>K1=nhm{pn_k(#~v _,z/Y֛=Yl>ig9.nuc^f+UβŴ]JOf{_yNX,K6oO72sǩ6{־gaADEmڮ/v|WF&6?eof8KO zY期H8КgNTwk[]̻В':;?9yWoT.n㧫d7n8s LXd#+ .FyZڔh\VV#G_{^S'{Lp4͝z_`<gJ(\\ݍy49N2vJəooR Ԍ\xQ.EĪX0̞O:7kZɎre1N0M}omBoQq9uKs *;z1wM:F NZ@ E+X;]Ȩ^+س]1L$vш'5m쾶c{qj VZB\C͇iySCP@B[;o- hZh@J7=m&1:8*xk bԷ ER 8ET XEV +/akʬ+䠣A6^īW xŰWBbX+EbX+EbX+V ^ɑZo 5x%]aaaaH+W x_+vHAbX+EbX+EbX+D+EbX++No ^ukxEN]+E"X̰W xŰW xŰWo!^1,"^lak}+."^1,U5xկ_ jW+kaLW&ڔv;bzi*y*^1JLJy(19mM@-$J.nr%u+9}0 4` f@{r; Ha a aF6UCRkϼe02bn>fq55a̪O= R-ERs8ـ-lAr|^ZѪ!p-.{*>ǖJ.i#!ײ`0ˉ=΀a 2/'R`0 F=uTz2a̞;u|\i0z;ab{u7D$s0`q0%Yd䶧t#ˡ% א 3 Ѿ.XXdN~%hчl-`0 =QZEHo CwY'ᒾیa.|Ȁ>3 yCv$|QƬ0WQƸGqmQ0=/C6ܑߦ-lwtÙ|[|#Fh$l"MD>4}Hga)o*|lָAh"M_i|5 cK/Qi&%j-h$4c"iP+Ld5I>]vIjӥB>L3D>5It>I44BFgI憐SmO MM3}ۄW>gӆ X }EZâ aưH#X3{@R>"` xEkk$;K.RxEۭ+$>Fn\j5sWߓ.%eZ~0sHJ`bJ*aBR.%Q!^7W[N. ? (47ObwGA+EϢL[RQ, a)Id.Bj j'g[,%v@0SR ZY53Ȋ f]-XZ`Ov!9[|rĤɵu &HR6Ǫ`-w {S4QQ̆Bg/p2{)57]d*3Z wdR {nCWrGw~#s-Vl(Frb!Ǣû"J{('϶s5Ԛ-;_sENBթDzL4Fti^RH5xr&ą${WNq@ BMr*uuOm~$-%Z/ܴTK*-Ug]rM9Th259LXEigǵ(\:H%J4H-G#HAZ)huiujBTНĹ?B9EG(UJJiˁX*!NžЩ|:OCR1ƁNvg:p}hA"hOzUW1(OjV_llmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0039-Reed 7.xiz000066400000000000000000000034161247673406200234610ustar00rootroot00000000000000ZKs8W3d@U)L dLE%le$CRKvp[sdV_=#am|:k|ۡr|k=9m4.?t`ۋd51= }Lk?qhD\x>­㝃i'nLdz`9M-=r~=(>݄=~d; = {si\bTd\r?91"94#4_#X>k>T0f!Q{zE\#m;w,·NL9]`-3K#Ѿb;+(Ÿ}[ԅ$R`QacW|4 Yd>f4Y-Ǿi8$\{ԟG-ZڭiKR/UP Xt(I/{{j0CH)zAUmx0i !˯?M4.Kr]6`JsK29Vw-'#H4ΠsZ[H&Vz9 <\UlqM03J@O KGIM'Ysͼ=*!!D!tIZT$J;dc%oT+eQH\#0 a\v>0,c 1@@м3 \|۽1 vqA_/ju;wYdcedaqN$0FVkw# h^:q"p6t !aJ}6qqeDZ>Yݒpt?{Ua8=!i87k0+O-0Z0n{S,CtQD#(:~¨%,xOPRME0z/CA\@x29$l" R )zSIHI 5NRbl1ki\:Rzs⧍rf2lNr_!~V6BӢS0{{>Mx}+]Uյ\KlYq#} _I wq%RrOe0[ 'wRv+25kx9We3)IR($.t`A Ϥ3lxϱ˺SUs)6 )WP,M}Aƺ'#(biޠԈ䘔 p+ V")*mE6g Hh`m:26G9֭| Xw 'EXYYe #B`ÐQ,`X,QBhւ-g~6 y|11nydžFWFBTZuTts_*PXYv ? QkpKdbHwY:$Uȧ32JS ɗE9ѷ isЗΙ^3B^I$z*D7)E>"G_gś}WX9^&YVx%w8S.uZij47W3MLsX647s3MLsA50l+44>.KD~~ <0csLE!dBRF]0V?Q.M<6_DյfANGֿ6P&lmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0040-Reed 8.xiz000066400000000000000000000053411247673406200234510ustar00rootroot00000000000000\r8}Wx,U%rjm+)ɼh9H-I9~6 6"-"qM)1hͻ_WGO<߱~9q \x~ͻ\M/FG:ѝ]u@xr=!Ցo*zG ٫-|Qj#v7 oGljolOqThz&U3/mx^USH+ Nml+$z?j?Ux3GuL#CXmT.2C"ŎCU6ܣG;\`(baȽ˚#,<|LF؅!@^($26m/PwB``&'BJe:e!_q;NPxO)Va `%ȣZtf\8PиΔ2rJW{~+kxUՎxs=F>v>Wx/`08ADN,BAcy {j0<^oV^`:F$'} qlD~)@K'c`6[ )[\F8\~'.;vqVD= Wϕ0/hi@PSu":]?$<_ |X4|Y]1Xayϲ5q=Z$x!ѣlnL\o`ASe&0TӏlD:1BPiWft΃AHfqh;_TAf*ytffn#NpedQ0;Gڌ74AΆN&dxV40YR j|:N.5򊴠`rOҝ@_L+B;KKbD' o1zN^&JJʮ)o x RTycG" AA|p:(SM]{aKXS'ٴŪ"d* Vة*T$HӼ%)q/*^VM 2j8XX&\*~,zFY ?I)]&Z.˧ȌyXpHkp&69NҔ'$V,⢒ԧt$Au 8.' MK!j+8z"'00[za$tڛ/Irv˲4P+Maq֡߆d|l:CVB.!DRѣs7טly5usܛWEiS4`̫c̐JNɆJ7% 's>nAt)9A+n %)JjX8}dfPr!u(^Ū0YWTK 60^wGϡO6jRGONa GO88^AԚ@ nܚZ6 Nuu.0plοGFj@OᗟK)6)xOq ,`irPstE9^`k:?]7v_mCBk7a D3fN;?:Y0M}ȥAmm"9`*"OZ1N({$8iqe' 9#اF7b;#맲-0Ճ=( ވ4j fUzNRsUϴR뉚BSjNehSV Vڪ۪ !Uk&UU1SҖa_ES!azkRR-dwٮwESi ,) C,/[hsMA9آ )ڲ0і@ :6V-x'-Smn`i)Љ'|k zRu!C >8r_)s $1 mYB鞱ZI"mj`I6OHҧj%A{'WF]nwʨ@gH6V+ɣy7Кcm ,M! ?$qb,wFtX_Ivs,VGһح ҧlOeJ1iis;piKq j ġ)}fVFZЩcJ4>Hjz@uXJA%aX;mPm.N᳹] CJV 5jYM[Rm.E#وDVq@hq=J_/n]QY!VzCG+//jC@G <(f*䮵Ͼjx#.4[WʝVb'~ }M¯KK*FZlmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0065-Fat Reed1.xiz000066400000000000000000000034761247673406200241130ustar00rootroot00000000000000Z_S6OA`I3^_4VŲ?c˒VѹΔ]v]K9z&qc<ꆞOWםÇ_ŗ-x<{y| c&#xƓtv?X_c#ry -M(K&cOiر:;a0; g6/r{& }S$HPDb$д+&咸 gHT@#?5c+,.[-D[ƓbxL3/ev':7\ь?ޕUP@R0Խw dPۈTV>>)ƵDsMW '@ǜ(R%¹?IN Pejd $R}-$z( %eʱƐ68d`1 Uuw6: pr)eh0&ttRFu׈U5rAV}MJT InZ ϻ`k!]c%IVqE ]agn]Ƅq/K3B?Kar$KRӊ*aQL2]⡘lN9\@l|Jء3'KA"/y"Iwa.oϠ3g[x, ;y7l~=W^:3[F犇wi`~\2g-0힜IZaEk97@_D?L)tD!cG~&U e !MY XrR\fK]4%7qB ,^.$ ~t6H\?q@_Pvck?4NF׊D?0Ql|Fj}4cmF]9𴊍5BbE2rqJVa\  r\'8JPU\T FioJ%ZKkKuvCE)kj^颕fTٓzE,$>$_ϰGzF/R̜t2"If<:[Ʈ_r5$NL%Ea?F Q쫍 "&V!f6C˂iD+]sE3ߎj7j.X?GWBDO &p Vd|Uǐ/O頖غc;N}jS\%lU%l;~&(YceЃ S.#KT6%MQ^y 6G ȸ!h$bC|lьsH`Z*o\`Xűo7i^D*VEEK?NVc`GϠ٤9(8tRTַ]h-eot2ͧ2b*V6򽢫e-X<Q'D2r{b7Tp%13x^'EuuD=g+ƈJ{sD SpT?)4oZrT5j֮@c("ٚu.ҹ܌BQa޴vM7q:%{:0#Tmw]62\5Hnv@6l' dInv@ANIf7ɯ BVHdh.jQ{(+R+],["6B~OCeSFrǴyI%e03+?1Ɲa`+?Ll<+a#Ohb4nd٪%y*2v1Y&oO=ȘJ2j+1>^5*v-*dYv;Ʉ'lmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0066-Fat Reed2.xiz000066400000000000000000000070421247673406200241060ustar00rootroot00000000000000]rH}WxW%rkck;S}amsF""?Hd}.V&dF8@|苻~i8xOwoǿ~x?ήN>_L&8;l3`!x~˛"GN8vƑskg9=/FW7'wW#`z;3YGO2t' g_!ce듛6,g|gij(\O"ۋYh݅aX\?Ts(4 Oh<@t2_?:]@exf3$xc7j2uʤͧ.G,IyKùݸzHK|q0F䜏\Ee+u2e5 &:<,EPyfnxyM7c`js?-Y m2CϷt5~h0-]Y= O((7EOu΢ zlFOϣ*JVA`d\:xq̨_hٚ ԭt_i0g[GV3_'[ѓɰ+, 3D>U4gj 3.gi>9Y{c{`ah?.弸d-9g߇U>,\V{xffVD<$\1WcEnV`1v'N >0SwhEK*r{[j@eySDrbOgmUHԑ7je*u#SdҿtuE+Id0"Edϟz5v;Fl>eNϙxKT뛸S|E?e#>s,tQr0o4~67ZE6f8е:4?^LWoR0hUЗPg!tYv70f::KBAQ9 ^@TT>J6q#ڪ˱jZ D_wQZ )8(yj%[~N3Q%/eDc0̒MTD1#c S<-clBjwrK9>ۘ{Zo忕㳩]K TYxk{p !**k5P ؚzDU'qW\1cc!\kc!\\u$c6p%4h"phڌ*ijl8e]fl"\=j\[W\sUdm&W]Gz}F pgWGn$9Hs|gAใAb;^ݗݸ4gvĖaw*ͪ p%+~.nL pWf\CLt_lٯ#:(~]4m"\IFKI0ˈ=t6ė1q wƤ vsIWDr7p|J6vfZ>Հ蠤g ۉ.Ⱥv$ؐr{(~Eld%>vE"0@"X KSs 8RMxQVIxf!&j@gL5TZ$+ vcy+4'k^,,P#)&oƩ$MƩ+N m8Gy%P"&5AzEbb E7v!BX(aXJv̶Ef ȳ](jd,5W5R(n85ka+JPC1b<b>555ltg6SQDk(+j[PT_Qܦk4";H*54;_c8x^Tjv8?H?X>CQ_UP{(;% G1~{GQ8@GC?-P #KJ7; BbQ?K(g7 ,^ l`B`ū eDiQX)`u &(PP F9&0)9P6eJ=|[R0!fJ(Q('j<J b5@Uba(=JQZmK";',H_Zո(EN| ,Vb-`%#yTVW+نȭ3 %o1P& G%!oC0U( N KS0{F)Vd ( n]wPgًs, ăY%a>*gXND ZTTTZOV )5Y¤ L?ذρa(^P>a(/]gy|0o}e)ɰ-_M)ɌsQk(? ,Y(ς,K # ˷)1@X~]`#=W+ؕbfU";^ޏm͌ yQIXdLfjTZM7W<$NXBoWϗWK`8lI&RYe3oU3YnY]nYa6ԍ 0s=w_̿ZSbuL$ٺ̛wyG|e Gv3of͜`oD͜UϾw^aQU5Q>}g|xzUU~kAfgkɧm#"/q{{YbSXu~lmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0067-Fat Reed3 square.xiz000066400000000000000000000067351247673406200254010ustar00rootroot00000000000000]r+=HTjlJ8DBfHC @#R*j4d~:ݼD~|lY?uZ'^0~w>_dޝO>e_鵕'B6~L>='Wvْ/f_&3qpy+cjr=񣳍 .iҶ]f\M'_뛴3Gq:*Ï?V6DfKEϑ87/Ы@6I@yX;s/_juI_[uY@D]rOn|ry_?ۇvJowyJv3*O ~^{缛\6S׋dTrfpKjhZA)${v.n_NV'։weٳhq=Ԡy‰|z}M89;snn(YтGvg3>KѲx-hm``i e8gG[Z}s`ȁyChY5HDU<{j63Nqhk>UsgpxQt,kCO҃h!l}eQ4/D6؂ϒ8U3Oe'Ac:d)NnK16=+C! m_үofP 7!+TvB&vU# QRÖjM\IȤ?jlOW)Xj]Oo.giMa)n}=r ' tKu&[7a,Ls B`܉J0p'Cld S%QKQ 5#E{DE%iDSgcE)# Z?*nCpx:d-(. 0ŅTe.!M-y\, eq\@& yP %,HX9]C6;#jHP8J*W#& pdWT@2.UBટfF=\ 6W]+* pEe\κW⑄5UQK!},q\^qO!\Y>)>Ϩe>^C%U2<-4ϙɢ$Kq _'<lvӜ3[(}_C*uD볷}6"/e#b6"!p„$ˆv%}lG2Y"R_ZH}vg#R_XLF>{iK!s[#J16bYHa#F>FMϼ}aʰAD=aA@>!O׌}*nlˋ|Tgl}݆>Cza/ Y3$öĖߟrf~S}ƫۈWm1=Ga6b-}ڈgCwF =utgA+bP`}FcFbi}jѫ{.U9YWٿ]^NW./ w?zRPhGK)T&+j P6LJgetgwk7ʗ+CLZҝTeJ~>OkqZ%E6Mv FaiFuؐTw/B|WTS% K%'ztK%*[UO\?I\%m*[:FRMp[OJyNz FkɐTatK%9r1DpR(Y)&euvVeѣRn(ԟp:XnZ6uRET*uNkdk4/+"uUYdvfiJMHl^Tr_hFR6n.cTISU+|GIЗT35ʾT[,W8^ UY,iW_/)p/wfuw!02wtDU20,9L:#käd0,i"~a qV楧w4:M T zznf=7lYMެUz59y6oi fvz xMZm-V>鏴Q)e)eFz 'Z<*դ(uӐ?痊i/#b[7(ǎXNL)b+\'q/트(f"u>,DJ'~;st$FSbT]4Ĩ*X mQoQu+_DwATYfEUڱ]l Fglmms-1.1.3/data/presets/ZynAddSubFX/ReedAndWind/0068-Chorused Flute.xiz000066400000000000000000000044141247673406200252700ustar00rootroot00000000000000\[s۶~ϯPEgttli-999/,6] pJlǧ$b .?Aʼnvnlpp󻏿\/f_o==ϛfwx4[Q`Ib`ږO0N]DthMO ͂6uo6_+( Z!]Oe %̃ ,i:@7퓛ޤwݟ'Ӝത?|RX.X9ݜNOeBV,&~qdaaY"s*818 3 ?6S.8`u4J?`)B\#K RTis?tn[FK.yF);B0 r.XK*kbK gqӃf>eqd[.<\؉j؅NF9Λ g}jrX9 ]`oC{Y>P 7XFCմz$h ̑XOٻ$ӯowUZ1Vc@j8zCJ=r|:Q>F?G$ O <125-^ B1 KZ{9({N*ÏdP-=Gԥ)MO35"kRY2Ȑ6ZEv@K7 SH2 )J<В?jy%z,n=NsE8:GkD. ZRXG;01^Ad LHE=ߩ%.M}`>tbpEzΛ1uɫś{5S)\ST%N3Mr-}-" m7mr_R,ԾMm0!YJZ 'KAmҟGхhe c<7!-Tӊ%QHC\HIp4F5xN)HT$RqE"K۫J68^ ,y~C q5CM:{qdBi[qGc[_Q AnqOZמXwIYI},%)~|WL>0,n@%G F%(8Tp+䑏 `k0b<&VFszK*ԪQ_v r5JU).V:p|1'0:1q"`8zt`%:ubZB(1Տ֛\G (! \sp̏#oȼ;/Oe)"FD*L$+-RhqePCo 6/}qQttP9nU.JG|^\eGX\(ʱQkNkq ;go?E׊mC~AD)<奼էlI(_T+S:b ժ*haYETOv{nˋ[㉛wlJfwV4+Z9ZJ WmY D kw^ f2[³YP=^&saWyYfAC GI Xg[C4܁P]&7'y7J]MM߲A|5O;jzU*'tAhA90Xƾ_/.}mVkp>>S|=ȒkpS d<Pqէp=¨"u iITD2# Ny'_n{0UÞ~)[&T:yU:xzl5'Qu&7%v0Dc kkXoBnm;/ :鼠KWm;q` 3>BP(Hw:TA Ie*Wwټ˵U]  x=}?sBlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/000077500000000000000000000000001247673406200204225ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0001-DX Rhodes 1.xiz000066400000000000000000000041221247673406200233740ustar00rootroot00000000000000\[s8~ϯ`yO!23l,N/-߯m$ɎMmF>:M|b-^7'cZ0wo~On_k3Y8|l]߱:-[N8 QnL?[6qj2`2ɘb=:ΪAM>1@xV4[{o޴7t3Kٖi![FQ + \!ڄŽ XCT1cID H96XbώeԘuKp#ױ"Mc-pD~-iohd ex1GV\YYgjE|=dp ?v0vۂͯ_y 5Uun)5D4w˶tĔH_KQ1MRn v T$ B$+\42g84`IK=-EdrTA~K=LTi%tO  rzde ,Q ѪmO-ĻEN*D)b3wG\0ETTQ 3-ݮK:0Q|ГZt ?+-A|ԶRO56{H y'.y{-q hNve z F]o>bCweR0(YܔN3urD2`{??i5YJkuq-4G%YA#=Vwo{gw+&-W_5XnٛNJ+Dw:mo*nݧv79W Dn~>؍ݛN  n=v\n(4?$عCxmd| װx96N'F>Ar^g1vK`ۗZGz"'m^qH}n (NwI=}S7>SzJ>6 K_q%nJO2@nT8qbzgҨb8W1js5ULn'` _RfP;jCp5WB>_ DZ 2j:x'WIo=ōU)ʢ/F?H/NDlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0002-DX Rhodes 2.xiz000066400000000000000000000040701247673406200234000ustar00rootroot00000000000000\[s8~ϯ`yO!!03e6@Hbd֗$Elll2GҹO׫#q\˦uIFa}ǝ竣?[ϖLsWGQxZO,>9a[5pmbx´vU7N{^(^mnDKL!Sjgo޴7t23Z[#Mi4OCG.YM?ݺl "1/*>Xc*;jhyKAM3أm/5dݐ4ӻ>G`%3dh~V.mE#| CEׯ:kx7xa0O>*֚ vd2"JsFù>Ye$0MP|pF-آEO&ش^k{p 5g 6P }4>+jɸ ^BІdeElHiM O%b#[&,ЩB:f J]*s-vM-9EoĕE7[]߅C 68ilw=lQ.4  Z,l &rȊ`k>1+ {g!ZDC&ס˾ 7߶b9(gאT5,x3Dv&?nSR`J|0Lǎ6KQ1M6RDn.mvz<_&kY=?p؟aSU->"*2S;}|=0S!i] ;.AG:-l'Y0>׎0^=U|H[ BU7,#c LBz aos_zd<]"6J9f(äۈF<;U+bTF)xF>) &`Hd% d$pT!ŠiɆ *a9\zhмdT!PtГYp?j-p-RFȿM^ll&]ػ혏>7{=3F= {I7D~ J7,UQ-`K)H^)[XmP4vpH,yT[vu S=hk٨< UY/9T AbρWe tK:0ݤsOƏWs@ Эݒz;3mtkDչ tkę_],_[䔯Wov3w׸BmijͦqU?ԯn Nq;Gr*+WGx5Է~m_ビ2zCym}nh̠BvSfv~#j/DS @ ypSzȯ D]U(؅ios LƏ=ŝU)/< *+H}@Dlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0003-DX Rhodes 3.xiz000066400000000000000000000043421247673406200234040ustar00rootroot00000000000000\[s8~ϯ`yO$Ql܂2H:!MS?1GǒE>jYz&kuYP-ۆi=]fV}97oήX ̞Vo}o<aWǥg[{/T`O`<m{Y\;]wcy Ġ/K>rVĦv=tߙtYo2 EzVLD&V(鑕Az"ݸ "9ѹ7\(^@Uǣ&[jx]! #g j"O`4M,2H4w%7/6[_Uߡ`hMﺽ ${5I,VG 'kXkEZ?2 EȇDh0 Kq]  ?.97 &5l}+ߓEBFZK,y6Ñ eOu!6N_GORaKC!vx:졛ZҮƖE/hz&K[7 Cwy o DMG'ohCgrݺYtJ\(Ŧ.-SG {eEO}a3}ݍ{B1Bg F\ #q}æ@Ƿ2tf`;vtb , vc4-BKQ,qt5V s# _734Dո,{xGvWMjYh|5r"^z~6v<^|z9"q3SpW\4N8OJz Y?ݶ< Z|1SBIk0[\N0\t;.A@m8Ш4Q0 .EfF3'bVpP?*)|)? /{@:S3m9*-+y##?ZMbK zdv#i-_IqW¯5UXFxx9دVk/W]KUxnKp(lmf0O`3fۨqiƧ9Y||S0JDF_O Rkåzђ3 ~g^x[,+kX9U vY+թFMA΂CCv}G($ƪ <bCou{+N'z]z֫J = /|Q:aXlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0004-DX Rhodes 4.xiz000066400000000000000000000041241247673406200234040ustar00rootroot00000000000000\[SH~W;*uPC 85/]mHfH'ʿ5!A\<9'}.^~~׍'ڧfa1-xռ_ /.Lo_7y0vl^]R{6xj>pUaOoq&? q1N_.y@#|C;m:c}汱Ď _m ?3m r?X}"XF8(7>hDSI%Z:i$QCӌGɱ DnɃ4>Y$ ?HI$cyy=֘V^ݼ{o8v4>'A>ظ(m6?FQ;V-K$.Œ-B7,y`afpC7ң%س@j&- ~1&Z\aI !`'/RiKRCNt~OΚZw! 1& ֎a@=Q u?bG\`1:z jJj\,`v==Lir=AP 5?آSHxL%TՇ%wVx-,Le9f@82Jw 5; K{ݪHP(-C`4%RxΥyj(j^OɐZy^O@*υX?xsUz 0"STH\IM1Hhҙ&OGj<%3O5݋u:"qwX]{c_h/=8[i4gVozb 3Eqxa{an[QTJ6ɬ髴>{ڭ7‡.oы~--VU^r*V0U²*![rpfJW|Q!Yera5Z{,. CQ{}&[>7蔕荅3*.9+㉍wKÝND;>NՉpZfƽQ~-uBU5OUM\mRժHHi1I?Ry3y -eVԤ,1]1:WMGi"[h3O#W.KTsBlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0005-DX Rhodes 5.xiz000066400000000000000000000041431247673406200234070ustar00rootroot00000000000000\[s8~ϯ`yO!$a&I 0e6@Hbd/iEwcd~JbKO\~|^jOm_Ս'¦c~?_?^]ћ̿klpײf˱x}t)>J7#Z'Gl#&M>``2uɘB<8Ϊ]=%}dUHb YuQޟbe5|k۲y"ln. OX ©D%IB-t@o)ġe{rlѡƪ|z?32d""Oԯ{_jӥc!־lEk{YGv9 j`'n} ~V֤_BK!,B^,!^3m]O VLny#orP3hcm11;7B<[ pNB(X$n^̾矤LcӖ+M'gER-kwBIegbz=cdGtCl.q2+B,Lञ:ix.vmbYcsBXjsvrחw!:QV[$~mɈ˪LdӀfecD)I.qtE˵#}ʾm ^ZTո,}x;$LgMi8kv:MC.(E}}!>.YH1Z8@Q+؅kweV'%V0Etp@@KH=Gpc0}|A !fj!@G@#~)?lgh/]D b7U!n@ޯ:s˃!')SYķ,RҳanG.J0ޒ刮:hE8I}E0@/\ Dn>jNȬAב^xRY ۔01ڡ@OvP#y=@ϻjq0~M<]Uxp$jspM/Zl2oK q(_zmKЗ,C!68iS,a"X*مc!L9(dȢZZ"~ظЧЖ0xɷEťo2r3H]|@ `Aֺťe/8O(!{,6>ѕ1(ͫD͚5kQbAT py9$R]Der1wjp (#pSos_ ha O3)r%Ti/4[UxY=hhA7I`hmM)8eIE[~IOh2D\v16cJ)e(HzTq'hIwӠ<cl`3d j4% VQGҡ= ?o>[HqSk9B<*i*ϘUHBnRV$T$b9Hb"ΔEh 55͍4yὮ|sb-\|{Hhһ'<>3nT+[T co#J-mlAo rJ:Sn)E,ԝez9$cjZO{KO-]wbZ #E$ԒDTҎ̒!Yc~iij%WaRqI[JO-uZ-ЛsK %JjpFfީ6 _xmzW+J5+,]󢋨y)nV^XURz K&N_Ժg/j}GFKCkwDnt8+\OsSܴ˱F,LȖ\&i.4_Hr;\}9s6^/ KCxD4^p1y 7dC5+ntF(V"߈w9mQlb6"ȇ$f!̈́jlx4ʯPt+V6KkYY*M,lVLKa'\C!'&nڹp[QS6vhrW^!+E gFOċ)Clmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0007-Dig Rhodes.xiz000066400000000000000000000044411247673406200234550ustar00rootroot00000000000000ksF{~ l3I:S6t~9KQH nӖOM޾n_?~]NXa9m =?x|0~oի?\M/F'<Cϻ>\ڣ }-T{?ȾmL?Ohғ''wtjz: ߆F! W']wU$Ka myOΆhv!W=$.9;D2g?!~1ٰAD5 95-v8l(YH:'@je{ }f*Ɠh2υ#K%z?̖g ɹS6g}a%OwT$_)|U*5PV"5@2XB2f2nO|]4La%h3p7婆Y 6QY?? ٳzAߝN@$9jCL^]ϊu ܥfKJq== ;f|/o#F$'7 BNm$1;qRӫEH4B]ެdйO3l!B1Q/\?7 T\ߋXX\F~M.? %ۀv`sqCŌ @2PQ|=T?C0:P{.7VF*x"8{PLM 0Gp=p0@TY=)l}84aad INqboNyb)^D\^V}Q33 sڧ* p* <=SS'٩9(#=UZf5`sQWgxU7ޑ[fd8Ԥ8],(qovFm-  # \mǟkByZ]dC/v΀)ƖB!YCE𼡱rXrk_oEQA?@@e-cBJKqJ vEk meV9TYDŽIhwQҶ*za݌{O{lO zX ,0pHYQ¤zS K Qkc?9h`kp@:thFΔ|aEp9S'Eʚ.VNv7Zۇ= U߃gsݣ9JW s|:yBhF\Ga0#U"p8^U什V]-k<9.Du\ʟ4zr$6?gi*FA{ VEP$Wջv[SXCxԩ֘lMng{Ewq{НvǓHYgҶl^8(>}ЊȦKBVcm͈)|T>E;74ز"=9IP#5Hd:tx2?lEbۅ3QJ+cϸEP4u{Y$ n}"Oo:{[d-'Yle؋dͨ?*uU= (!?,G\3fb/@2UѦY#Z|oԛ%ǀYؔ5g,88)#A3ߞѷ[z"״3FL'+'x8_\ l cG81S/fҤn>ja.[9M0?,p^P{/pFo;?,THj G 5=DݶO!}OH?hg?, =?4hm\-+IHMQN/J>ytt)pVB)r< XA/Ld&Q =GBLYʖ҆`uR,~X[n5i8sQMnVKXŀf yLB 9^r$2'Xy3!gQJ&Nج[FڬW(sY0`N'9b)2^e' 5 HQ!Yws.*l9Pu mX/R+;|, Uon4DUdY4]Plo3Hm(ިC[VrB}ja&d7+3)YYCٷeZn:3jIJB* r|CHmPD6gYiB\&!#2 ;+3#*F왝 B2ބd KܔU:c&F9z2{a$=Ļ ,fv҅C ʛb3ûzVzjmH]2MF҆Rq|`ԹmOG2,m ˦¡pPڼ^i8X=T6?  aظ8[ZuUiPd<^TY 3zL6W-\fòeosT+GuǡDpO|r^ y…]) 米> ܌R<|d@$ 7.s 6d{#c@őϰۏ6NRrj#l_`[:ܩ}~a4d̥^aC\\FېyO>}QN<߮!<<mL~Z\ZPi.R즹i.X[\ei.4qrrEBYN3nm^šzh<Lt{4<<"! ԁFxTo|]x[jͱ]w4jkElmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0009-Synth Rhodes2.xiz000066400000000000000000000037071247673406200241470ustar00rootroot00000000000000[s8_= d&M#f\9 h[[,sH_ Hև ܤ-O0jZv+_|qWg3-vCq68>޼{w?`=۞FOm›w⣔߹ z>ZcOL4jd؟ z޽93'Sd 3 ]:ȣ0 *"Z] 5򁃃Џ\Q& cϑVL@X"?$ jD lpϞc!Ԙu]Vp4MьcCL6,`fJMzL R(\z~F\ G6)ܬQF,o"5Qt\"0'[%ɰ! gc'&%0A>ʹ!<T 0qcHY7WY2hv+AqN{`e4$c>$[s>{+`ٸ5ĘX[Fp):3ZynYzSvݬ#l-/2xT҅' -J.R+ш-Y ۞QEk~e Zsټ?1'~W>BJg3" ֞C=3)I!tpF#*mKUGN&Ϸ |B0`;YaO ͢[hcmG =@ ^rMTʝeaG0qdc>luM> c?%1QPkfRBwrH5D$cg,^玼YI1{Ol{bA.L̿Q.Qa.WXBsfx?׿(}C@.l\o_a贻 qeo7 Hs}r,$}rE[4vD  5 BZ"ֳ&=tP;XFiDT;hF#e&Wrq-vng.N ,˥39&.[s:F}E Vi<sa^jR=~> < ," ,eRBH.-]qLDR\pVhnu246k̕ 1zűa<Ե  ԲҢ9* <)Ap PH0Pk7 kjuH ˚ W`y 0[D-S |BB 9pC:NJ_pLW RD<)RFkmFkSlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0010-Synth Rhodes3.xiz000066400000000000000000000045521247673406200241370ustar00rootroot00000000000000\Qs8~CH`&MK`\9 h,[9ۤߟeKZI&&JZJvuy1?zAއr{ܬ||]ߵvϱcG )wZ_\~9fGto;pD,ȳCea?븈|BޞgRU边r#(X-e !it'BKDD@ uSO5k/'ߝ`>՘uUR?o;1?dd+#h8^TcHiT.MOd(QEK $/$G[ZQ=M!k(y3;GT 00NӚȗЈK`XE 6 AS]}ku6&[s!2ɖQd`ǟeL "Mo|m4'N ,mwZڞG-%8FčֈL=)UV+o2CdRrC°58W4ᬔŬCNbM0؞/<1WKqfq#.Nsfp׉92 0j>{Oh2 0]/!&Ac;+0aOY"i#P-h4C3ضȁaֿGϐP׸]YfMS9N8qVkjP.F"C8r&.45W)AwrF+4aE<M}-6aeZJw\ТImk &r`#M>zWsf4zMAs/sprX^tjdkf&Z69 [ McϕKt W.vލ>\؏ Д2x< w'8]7o@`);ڬ[zڬO=r0c2aO3[BTۗ)ef0heL51<Q%d)g;_ ! UX [9(p@8=TK;tB̝jPqWi BBAMl^F.ь[,URۗ[5ekSNO߻~愱(/bT[M^짚[JF6 Vw++ O ͠!W6+ե%y&1yt{&(i(7uDSjНMѣ4)(Mf OO5ڊա/!]rŷgٷC+eҀ;ѼD^@=g!f+ŗ\ o |}G glۋ/ϔEC~*n.R̋nIP$4vc^ ALv"3n%ꖤMDT nuy^aMIk6H)A$z'<Ffx&)%IcIsxXҸmV2oKct_;7~i\6bosgl}lmZV_2C_k^꣼4מhH֧=W҅6i˯,My~yJPFޣRv =*)ڬG؟!+ʬJ3 ښ(%TXCkRdBMsL@*-Q;q4KJ麮WLM2^aZB'?#`{۷//"?Z?M}A<7jsG-IZJ`y]7_^[ԚﻶVR4=N*HkʺIVTM}j䈽ͭl>ߡjgtV97dO2aͻF"ۍs 8^v\D-ɹ\Dq.8'M,9l9 lpVH!e(SW1Q[CphtyQ:C\i WDRl%*=vWb&l/峘Ss^N3`@fQmobhb 5ޒ M'0z@L^Elf>>ʪn5GIO{pі'Z^G7:MGh~7ZڿO}g4Ulmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0012-Ice Rhodes1.xiz000066400000000000000000000041201247673406200235210ustar00rootroot00000000000000\[s8~ϯ`yO+3I:l0SfdtQlbKMH9:M>IZOl_OG¦k}?^?_\֟̿׸gYaסCx}p)~:mɗey &fl[w0Zx0zdLA<w~DHGpmkDVޛ7퍌1%R=|mـ| \~QC` |` #᰼UH d2=(: *HjtBZVb'6jZ41 )Im{}=4Qkt-Z(8}]:N>\{(fXxU- Kh)đE\ȋ1kù1jU(MA ańᚘ76Z %Nʑg29 @n7"q&xEJ/6WI{ɬ|rW$vaBĘD[.p&ZzJvEI/!.s'bfuD$T4Dplw\lrBl[L=KFG U}t+nᴴ+ao;؂ m)sv1-q0@YzH2/{Qz1t.)6B]U^Hc_}mfIo苭*n4 =Kk zl=u¹:^OE$fw hP4.KDH^P k``kVGz7.r{Ft'Q"?..wu8=Q4j1ni3>XfY)zK ){˜hVe3ᤎdz_,+hʚeժ%Rh IG~aoGc~ɞ88yr7q0`cbEفqU;N/V ]tݼ5 M>W1yAd YwQޟeױ@Ea<(;p"GpppT*\ @/i>@T ".Q/iS8bϞc!6Di8ͧx: C&!ڎzy3Pcl,8yS\jP`>m|˃j,{X>ۦy>"@˵m+ld wdRTd8*YdپQ,'/(B )L( bs͙$DQs4MS ԩj{='ԣ X\=Z4_SOW)hCV5iEkڟMfm!/372kKICPa-2#%^h9 +,mR%s"Dl 9+Vz,H> *L:^mu nw F]TɊ,b[ Eɸ)@%O5t3LCe^-mڭiTT+rE%P R]Fez1)w*j hǣ07qy( 0]G|@%gjt*,X8AZ( 9$0fȦTEA^ʺl\8d$h2R?}3Ø)gS3TiRm52}*cdq+|-{(DɖVY 6py42BPh/G1A"n/J-Lbz-=,|ʌY#QӓHXw4ԝkT~j+WY_&|"r3sHn$` [-Vvu}ۡtc c iё5gTL@ '@r Is H<#s:U@my_\ l12SIqnv ^6DuNOͻ@,ժq>/PJ?{i{iM^a/֑KKR '^.-1i,mRYWnZ_ڨx(~C_\R.+[U4Wۻizj%֨4 zs=uBITOs4 o7evih]o3\nrAvNY)ىDH84*2%ADz{tKDhKK:m&, 3{Cگe4KqYV4fYA,V5-"M3LNKC'Vk޶tYS&hz\#3E RW%?"sijBlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0014-Ice Rhodes3.xiz000066400000000000000000000041601247673406200235310ustar00rootroot00000000000000\[s8~ϯ`yO!$a&I fl,v_4-[WݍM&ᩭ9:M>IZԍOg–k;8^?ߞ\;=7kש Cx{r-~w'Z􋃓/'l#k0Z։? xDA< `d2"_[oIwh4QYrlOa+2.xN!88hpX* @9K$+t:IXl:SMT7d# Fqhf3d$DRŞ,T,\F(8~rWN>x(vXxUR#Kc 3sXsYӒ 1olTJVQ(G2?F FRa.i[ M싔^lY;|{\K_yNzjbL-sj@Qҋ_?\y[r+:̰.aBteSz  ϾyĒP˚cv# |j_s81+- eāoee`eY t0"QOT4<5ZV#}z\dч_)8qCY?N=#-tt08EB}}!>C-XH1@Q+؅+o鄑@%herqHJD=Gp?1|4GwtxFaih_RY.A1-QhUvay0$e*˅!˃j,X>ۆq>"@\m+h䆦d+"r,rl!' +!ERt93Ї"tĦdq]zT,z.E e-IƯ#!"<}ĜGѝbo!n36:ܙwԅQS٩(p1ĖrP7O%BD]R[%s"D@6%UKs5'O2&/[t]ӻ=|.Odd[Z8'Z iLCi]7k׬7kjy9/X0V^`t?`9A+iTSbGQf9ɀr>\cN80w"oKwKyOT.y gAت˂ī@zC#kFkhJY$%덦u+S6Βt'hp3߷+r9UJ9C&UVF/~Yiff+3KJ8QrdeZV.5G+MbGk'H>CޒoQxSіۍO1u{ɡn`/ HE%ƚM\ǮF& |ԝ\^JSɽ$Kz8=wgc{DQHXw8"a H=~g$.†xc`'Pv3I$q7nE/ƖU"Kgju#Agd.K 9*ɥvh R%:K 3#_^"V ȥxΑKsv ʪkt@SXX0di+z#"hN% ;m@i jBG ĕx$x>=O'҃#(N_wK]"kalPxe7dӷxUߗ{n|=<ZJdmIOC2~ˀ4W =kT jl5U¹*^MU$fɳo2 hx44.KDH~ foaGz9⮺r̬Hzt(Q".w9=lQ6⧎M:m&b+, 3Eok'eoA![[Ͳ-}lͲjUђY)R43णl~ℼ w6n`+jRM+!n -4_ Clmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0033-FM Rhodes 1.xiz000066400000000000000000000042441247673406200233750ustar00rootroot00000000000000\_s8`&M&0e.@Hz/al6I'?VҤ=WjwӊO= B>V'#پzw+qݻ?o76^qicG9|;^~@VcON*tnڣv3 G^%~DKq}t<^cRU~r# ъ(X/ 7!lFl 4,IQ)M=u"B~!ǎnh}&|1몪`<; }t2]DwLnh4Y=$h {_2=_h"ObqybrM}K(y 2gԛtGX`B<<]'҆(-on@ͺA6[x|W5!dk &_OM]! v72齿k@\aϣA' v SEJ*g9kGhnrLXgq"sRɌ"6jKsm` Ct8XkzxӉe>ݣ2MC$0# a]/oibڐd8( Cg,\9Qt`N9<\պ_6[@#mξa6c5k\ծ,xLOi+/7gVfyEf. ] B0M/f>nnRjFk]NB@氦Y>,pEkn- zU,ðSR,wذӆfNZ`% sd s{s,A DKXen5/'ʙjdi磤++ 2 ;)o! 5a-&}[' 9yj8wgC*2-AG( v*raxlTIQ^Jn +O:?=Kow"AFjn汆ENgi 9e4Ub4{x*gL9,3Vsw^v$b]Xd'( @X G49UzT*l4!cHؘy+k'k}eUjd@-FI+1UZ_Xe +>Tv3ou a*OaEtPȆz*UTYtGx;Pm5FOo*{uJ+iёkiDqCNGÉO[{Yla귽kW$ u_W567޴7YiCeZ>МwetTϖO,m'$ E/c"^'bjC.ڶ6i\ T~OE8PF%Y`Z]ʊW̛Ȉ 7N&Ǐ KP{LPP, FV߀왭YW5 7;TiϠ „ VRG%&KDPn} $n'SLK"CЁDnko:Wa!{wDNZXjZ~n=U|)@S xz.vwKӋ~f33h`B@̧X291!8we *ʽ{TEqE+nvvotmv"A<)X$SCǭ㚷kyu/Qfp_4gKsވ+#ވJ`^2:k'opTEnS qe<׳z]5ޟV+eӧôwҬ~yv[wMۖ5 {X7ࣄq\Ƶʟ4zN>bĕg=Uƿ?ƃ?gQxI펷؇"`OS1ښ<;'mو=򽔑qa$}}ddqM= 2S™%q}'74ز"=;IR#5UHd:~tXdf"BMTozxXī4j{H)zt=_H*Sʹ9iJS0!ZqMb!,)ac,Dؙ:#lAo/6b{Pu_OאX7,xŚv NMZu)9?;0>ZE(F9H*]c@!`J,y/bC}ޓXPdݿYE AhAw1zBhkYؐ# lKh,`t!]n]$-:CuR!4<(ZEa4w2eD^#YH ų7_RqåaX3JYȓP!_>FZ$SXj{KzRIj{MzWz._BTS4En#h6uvxL-_v#7v19lѰ=`L(qȧQ[EˌlP\KrEďK}j.JF?b@3V W&~!Q/9atI,p |@pD%e}'VmXC pW-3 s*~&țc lP$&RmWylbL(NҮGWV Bl}aG{X4aEPaedcYbJr/RWLQEE3X^6d-P*)K):,4c%'`x0oC?{15lN|k ;ȹY͌N?DݭH)DBaRT\Q" |Ȇ,\C3M0U8$҈ d/0FQ {f'4dC˩_B[ aTRJ'̤(54/=l4IˢA0`UGx龡 oϮPuhH) {zVKs~ҳ\DҁRpמdG6KeSX|XQ XH(*QĀ^,Aغ8[fDrD F(2;m`D6wN܂EMDGD/砽{+&acC-) [GDs6 G[ zgГ=D5fP=;mvMnė!7`O+mQo}D&|NSao]GV+f~2p2iGVnM(p2iTW>Wat`k 1 hbr]_j-ƹH2̛#2fYs-ǹ9\qnpr[̮}mABpnh9zOd?2~{@xӰsSyȯ9DD oa}8锯~k|SX[*M+5gT.bElmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0036-FM Rhodes 4.xiz000066400000000000000000000046511247673406200234050ustar00rootroot00000000000000\s8_I`&IK`\^4-[9?HZ&OMj%V?ty<5m벪}:Vۆi=^V什V7鷻nߵ1:?PUi̓qe{V*FAg VAXxI.wwmysĠOjĦv&]twiw< E|-MD'MigF"CG.Z9X^v+w6fDzh*:,QH-5u4 džJ6u¦B';Fʠ)SdhzTs nyQ CPիﺽ LzE0 oZZq B,!3Oi\VOLx*ʼn0YlɜAl8Cks`. ٜFv-!j7(m46~V;Nz7k^;Kf-Z[Bp Mo] d-}ͺ3atJ\eҙ̱-SG {iEhï]W6ڙCYzB+ Vfaw=lZ چV-Rf9dA4[ X1 "tW쩞9`62b?_O;nW)Bؽt3w8}wINKOyQ-K?0jjpAg|-:razuw軖]3!mPcoOmc婬ݍs„8Aw\,eȹ\Ĝq.b8 ,bLjRnfnj[֡vHzsPn׽$! f`A>-?L2-[x%iE-%,;G Tm\fO[ 2%a!nl;4EoZlJ$R4kGǪŮH[tf`'NoGYxMOmfdb{{-CEylAx&x?ڗ6[lmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0037-FM Rhodes 5.xiz000066400000000000000000000041641247673406200234060ustar00rootroot00000000000000\[SH~W;*uPC 8/]mHfH'#~:Ojr믻(_7O'–g;0_6?]џοݛ׸g۳qϱ #xst%>M#ex C 6&V0^5x0zdLa=oE^?\h Cpklogof޴72t*( EF/É!7> (]V:$mZ,|Lq$}: *ġm{ ѡ[|022 v'7Qcl6:W(:y{oynbǐ>*l|B=VG0'mx%Z qdbY pn}"/YH1Zx@Q+؅rXU'c BF+X*gy8"H% Č#8`1?o:a(LM3<bxycN}$c3,s[xMU}([<|gw`ITs[)AYJ}t r{}hSG+b-oҔ,BtA@QN/rłz}䊸hHnBkĄ !Ĭ<׉^SX ڔ03[WB=uڛ,z.D e-MƯ!$<}ԜMƽbm!.s6:ޚWԥ})zbK(zZx!" wF6 e:a!gEV\ڇ!ŶLK-.tAը !#Y1Y&Ė2N?Wn LBRܡ4꾓4khv*NQ`I_yKȑ X.Ϣtɔ; 5DHOۄwqy(pG|D%Rdjt *,X8AH[H 9$0fEA^Һh4-?d$ܗt4o?}3ô3ζJ)gh"M\_Biq+nf=rd," ZXysJ${tsz^ȭ3[8 @zzo|',|ʌ[KtHquF.65z]8K#M+FUt%WN_5$Kz4?{@ɦQHXv8 a H~_$|V3/;"[[6є2j8@9WzH2⍷D:&C(1QEn2rh?q[$@l0k?Ce.{N (ƙځG{iIډ鞞mޝQ`dcFwzoPJ?[i۷+da+M>L ;VwJsV;4;^NA( ?巠vRx4RxhjT[ӷj}CVū@ce׎>ntتB/ MsST+FN\'i4_Hz{L7lܸ[@Bcih/%L$7s00o)+!=Л qgF9/R>9+IȗKǝΈ=Fc+|ˢ:k&`ت̈́Sdlڐk3pY^ͲfyA,V5-"E3H N˖ʛC.Nȥh˵m(&M l쮹B&>Jق@yZ'x$/iBlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0038-FM Rhodes 6.xiz000066400000000000000000000040421247673406200234030ustar00rootroot00000000000000\[s8~Cn$L iE"ŗ% 2H>MBvyJbK"}瓔/: I8kZua?l|yv^?gtMs=?87L߱>`O,'yB Fd؝ #}#q+'\( &m}긍&mٝ;>&R=6~AeZ> \vVTf  rЏl孂U@ 2©T%CjiAR.v@oKıi&{v-&l0G2|jihpM^5(p{õcS fp'eD ⮲Vl/.|(ԋE4`,qG'G%+jخ>gjq( GA +^k]c8"Q'o,EH5n_FBh6Ϳ;zL}v4v0=84rsadVBt/i-`/r#SU&̜ȅׯRWh0UBU>mױ ctmzGV}siy'i6B"Arrh۵ |] &ɒy>1K!t꩟"Mf6.2ٔ =_v&sض2^i5=5nJ=ǩ}z_[NK1KH`y 1BL/.\b[ZaMp<uLeD,3|M93}tE?LF7i. m.;ĺ'`Y%> ϒ.Js_36vBɓ_YJikϾ%nڸHԇK=g&LX(ɓ gb!,l 'ȀEoGSVΤFD\$ U$55R f M8iMxJX foi5+cB5S\s-D \BqJQ-?`- -Y36@[(I/dZՖ-Y;I>;Gۘ~_/0e|HJ'fn>U矉&ݍ$($9`iX`+KƇ#zj”rќo8cH#Q*Ņ҇F칕 f!MӺu4R룚\TeTCUj9^&E$&"CؔƚI]7r; Z$%+*B 'p{Ec+Ave=u8ݡl! _;Ena_x9nKEOsMWQ1**x:q2E*Y~AfÂ˙x,rxM0?:,AgވZ%vF1Kϭpdkw섞9NྈxEdN ۞9zD_3_]_ _aZ"*n/knOIt~muk|/a~"9ɩ:5- "{{gj}^ḛoEhxXw/7$d};U 4 =}k zl=u¹:^Oe94ShZ]k;P]"jD v뷳O [1z8ABp\^yѸ]\Gt~ihClmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0041-Soft Rhodes.xiz000066400000000000000000000043371247673406200236670ustar00rootroot00000000000000\[s8~ϯ`yOftf FEp 2K#]mll3I禣OW_ ףuIF9.}?N{7GGWݍn_ִ8C|st6:oq)k9p!l\!~q1=hQao4t>zE%?t5 ( Eԫ7!ޙtCgt K,+Z) "7$\~$4  2[mD?hfdy@ism§D7t%qNc?0epDw%7os!U}W 7Ymo1(lu|-V:Fg?'犭Q)9`B,!Y2O\ObTAR TYFɂ}'k}6#߭ =q ʚ`Mh%*Om/v:.36_זB S ޶%8Sc,< **}[KE.ta3B2xTαk#S[R816K~}vbt|>B_sL$tK|C5kCtA>Ypç¥f2D|ZNx},~=Up~w'gu\cshYx% NJ}0un]$NsӃYԯLZѲH~8m[!tdUōD$+9sd'MRb<{~vR$JˉVH񕦭 ¾CE+Xg$l0 ;)Zhj~jXvM,]$H\C! (m44) "{-z>Ŕf瓧̬ k#Umъ^?S10VȩZe4`n S%rzaV֎Hz~==w#{C>YC- C-,ZX;_7b>o"~PZki֍5oZGزUOX];Dw`WW_Fur~SIhB@_/H\l{@@aTq! C5,qAgWSy,TpXpf><Ӫ B(}vC-J2_+6#_jM:~雸}^Q1PTyGk:K{ lI.RlW\ orQ-I.$qr˸z9%w /v?oE~ah_Z#P+Okn׽7F~IHjWRv џRO= *%^)WŠnffc-5 f#[Llb-Mhu-V%5"eC]dͤQxx\g6䤭}t|TG[{ؠZUvmv9}<73M%~aA~5_63ǿAqVtf\ϼqJziV'L@*J*2V믢>!W믢>ٮOX*ͯ]QTZeav-LIF6w@^ z8-aHlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0042-Hard Rhodes1.xiz000066400000000000000000000047661247673406200237220ustar00rootroot00000000000000\s6 _sd;sv%շgXtՖ<}? R9kꩍ $ u>zd~xq눹 v܇mˇ7ot9l6֦!{{>pm/|y#6Q?OhGEHhh: >K7}fpNb?0ePTvJ>|}4[y6 wS&+PĂ $ .ir!%ލ+$mkB-"ٰ2YD2g2}8MĄ~-7F\M,hIV iA\%C&8$&} 3/%j<,4Go ;j ږbzdkoOgH6]sUα / aX'B^ႳR*uh:׀7,O]۸,ȃE[qfI#.f*gLG>ĖX,$:nN!j&>[34Yql Ypy ͽ496)n; ߥ[g{k֮,x5+3mps~ޱr"6;Xc?$ە0RѸkv턑C>M AR<>ieo!*,"B -Fwŧfar[\F!VgYؘ=8/-8t({:O{.'F`F*xguve2IJC?2nx ":QNfPbACRحHIR|bk yRs̗>]|.R@#`;)0\%A%DRS֯%f#le < mFkH` rjd_([rj%5C˄iK%R%b|F7C@V!~!QpO9wIִo &)PDE:uf]G˄ʄ}+* DK*1_Li ʼn SLv>J67`f5Š̖ TQ1Sm/ۋY+gBD"ӒPnC4#k} JJR{K,4m)g`z:_ cmrP_޷rv<3<P\ -\஼X&r)CJn*q) R W@TCQV aĥs󘊲>:afi@`FcK~_(}wm&'lwWFd Ԓڷ UhziVd^j1'B NOIJzB wWTƆ.eR:1(ܔ3M| M!a?NM Rؠ;d99+}ĺsn6.[7}=BU{rp0KB `&? r5TYQ.Lv*5P=\B|0 U]m4…j`Q+#J9XDZs2BsyvÖH(%YZmT7H䮊0)o(*&ǝ :8ҫƓh XKto%M?>%vέ.?TM45h2Q: `QAoM5a;kB&mBVS q-zCrx U}4ھeXy +,s_?.X隘*7RζӪC_^ޚ?mZrR"i(nz}g7UZKݗRH)MzM\&gǹZj 2ȹV\Eq8+p5Y [jUO fz6g <ۨnzL0J~N^dp{Y0Qr=uaJ v^i\5W ݹ;K2tgl)nzI\/[~Mqk;GgYlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0043-Hard Rhodes2.xiz000066400000000000000000000041251247673406200237110ustar00rootroot00000000000000\[s8~ϯ`yOIHL`l,v_4-[WIGIҤ]ښssӧOV/>>GC/ƇzPӱlpY.莯g_n{״cYϡ|upW1uĦQ "z<¾kc36[.`O`؋2dOSo0نggCIg؛&Xbgʶl~f8KtCu`4M, MH(OسjcyшdU靈K%x7JDZQVlX@$b(%I$[FYoXQ~)7] U,dM7Vg#d<Yj27IbAythe4ԗXI 08#ybV`rSb!5VMaj9+J|=xN=}݌o{j=B'B#r;*̴BE"~ئ F&b$Ȓ`>MP0K*0,BH ϣ,ޤam8I“~⟧p\rCY?N",pl rT"A~a1.(9;Hӭy(+wiA'-M2?>,qQ?ӡ*!Q@ E78,Tir= #Yv6 =kmKgI(_?@pMD{. ZPT,חlJ6aj Na/i ۅ%ˣ7o xRjБ҂@)֜`) l=ϑ]x>H#`#)aܗj/zt=J$$ԣ X A m-.!I4=aߤ5MǣZE*ǃ^u!)i=;SSH(y 6 xa"6m9b@%U+s=k &/{7 ] d~(lǀl1[$qK,(p+ k"2&u5=Zs7L.%Qz`Xe}Ǐ , D!Op L5HQ(ۈWq S8g||'UD*,۞5^[ l-Е(KMHvkt)G>u&hpQ7+pU9C&vFj/4ָVtg;K9QvfAU0]jK)VrMT"'oG>A"nOJT|z5=61}93o/9G '3 v:6IY,;pzYi{e=?;b[JMேMg69Y{$%{{$a oEPX9֝m 746ќJ񹸘}rgR U(/A#jc=DPW=~=; t$ < ,O69c@g?ǰ]@^^;@cXpKWRa[B)~Ҷ Yگwֆ-p])EgbV2F:.q'IeNz鳴vn ޗ<`vz_}m.g)2nˀ,WI=UoTIjl5Uҹ*^y"fjwKhx24^+DPƒ^߻EY)ѨğBJe_*Fۥԑ>ND4' uN`eٙҾ- f nժ=O|ίUKZE[Udڊ4j| ]4R[{[fMOOؖes&ņ_xZo"~xkBlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0044-Echo Rhodes.xiz000066400000000000000000000045461247673406200236370ustar00rootroot00000000000000\s8_CHL`\9B:{(nA&CJ664MƬVjwJq=ۡuQFX6}O˃?z~ڵaϡ}|yp?%2uŦїyy=ƦlLk8Xh0t.zpE%v{ (:‹}Nhr?w}t۝to.bYg-O22N֌dol,=".P?6fz8tXgKPw[V$'6 jĺ i8Noi6e"•_͹SxwH-t2wYr$ .{eER^+#k WkFZ=dɜpڿE(TMP7FZe૚,(M7FPdwy #B#(n7bz&ݗb^2wH{s{=2mY0JuV0LRhSOdᘶ= fPszS":nfMJ\*sQ\]:6,)<:JYԈ?ܿUh5HZ9vh"IMS(5 ^$rɂ`|1b6%lW`: ."`>.b?A]6l|' yOtڕx]?4ΚP.ȡ\\E3i5_ Awr@c&sX=>,pP*$"B,՗"~@fAs1zBϲ!(ۖܵ>ZC:ۻHwhC5R=(ڕv0:C 2ndx%!YHuţ=J}RЭH1Tմ0 y2s.6eobOɔ0΂TN%qkjQ*)"V6^"x6-*_v#761mMwQwtI.`˜QbUtN 3Aq.3x(~lsұ^cq;>L@ 'a|xJ@( ^ֱ4xݒHLJ=*- b!#% nVYfۃqwS0s7WV ]U0վ}o۞5sX+s)uUk9\ m ӓchc59<4R!=rxQ@VU&8N˯fgc#䂰M^W;g$$֚6GƑ4*к:70t3lSS5\<ΤM*qSBwwɚʟ*vVU[2)XU<퉩<AՋ]wHcޝ֋\-sXb*ݷ2-Y\LF/Z ׳:TFѴ&O|[npUKB։ޮ-n|$x(XԾs'Y!04"5q.r4"9v˨9Qr˨s9eTN #*loYMGS;3̐{ qKd/5 v)5H s3Xk塨 b>jEr(k;uEKhDm3P"6kGi%*&6KP$?@&erNGiV7E5JB4E٤4cDaJc:Js?-grt-g9:;dTMڒ7Z8n?^]ћ̿k]˚E-K(w௞OMp>Ə80qmbnG:?&Qw>G!Wn/xqGĢUD^Aer?>N?%ʘ?#ǶlDA8(!ChM|dAGqVK@ XSTUIN"KP[qlYŞ<$|jx6ޏ9 2]<nmG^zD ']{ozNl@_$ ͧ߉[3xl didh8juU? ?(PdžXL0PDf`RѼ@k˰b ٗb>^RtGw}/?t5v]LYy :@۬#|Dt 3M\wY䪔KD$A:G;kǮ9. h-,iMN*h>!Z֞{fec Bl 4FVo) 7|"8&NC t!n]-:CuR!÷ vf20)\~mȉ--DL$g9ozR dR0H)LRӂ@:֋Bԥh62;-,Y"5Q^)xMXS JiOٸ0lDCCnh|d_brؚgqw|).`QbϓMrM]H 9٠8t]S[g < L'JBE6ms"DeRذWVJs}2H^8P[n55$Mf7[}5eq@+nnTF'Yr< WLeB *(YsfY %Qeo ;~"(x٠XL> ")(.T0%ҎGW֔ Bl}G1 ,BX1T\rXhַay{̤wE,#G{!BĨ"ˢB` C"#mc *R { >M[y)Y;MÛOެ0cm3柳jTT}WY7iJB* fK5&8qU % S4$]*v%9g_󙒌R {a2si^Raw2Gπ%RE[n*1 =pzڦV$=ĻK|^ at^΃VpOlrZ yG}]ؼscIr a@LKNѤixRlzf\1Nw蒺KvZq~$`7'p)9$:#jw_MOfhIƥ lSsYr؎V4 l tuQU}%GF%Ŭz{n.*d52nT8i=kTe5U [Ms8W\4+8Q5͝7L|mBx;?4{"i kƒ`пǧ6C"$;[; Dz,CněP͚Jl3@UJmodh>Y4NCƖ4M3-V-"M35tJ8-e!6ß  6 VQU1zcf5ϴ]NGaI1 80Fۯ9/zNC?gIlmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0065-Steel Rhodes.xiz000066400000000000000000000047211247673406200240330ustar00rootroot00000000000000\s8_%~ r@:{(n6񇤕lli6fVݟVzf}:˚w^Z4o_ƟR~/7b;b#&=}stCu 'zO'זzuGݰ7+̂:jm[n`>$7z1φ~%۲ | qc$}bl-n}hCrL`ɼD멓(] 9Xbm2>՘u[x2_nELT$]lZݎ 0eҭy&/Qp[ /n\ _hU\jɂ5%9bx}d[oZǑn"&̡wkAAT5Dl@UeAm|flM7:gH |X$pMXB8$oK28YWK4V0Y/t7Weq>k0]:h[Fpꁭ] L)ΑlcsUƱ / laX'\^Y)Y85kzױMQr7}rVY܈v80 U]zi5Ȝu2SEPh@v4 Z8DMY,5>_TcŬmaX0ǀXKc^?c;O]<~ƼgmWif +W󎁔 9 {ٮąQzt]tnk;u:iq4bYlMF_FL V !Rh1 N.>E BGpj96ӥ", sGŶ,:uOpEz= I݃bjz]Y891~[ 9`4,$;pN|G)0i]/]J>i?Po5]l-!B-^ 4 c ک,$Y«4Q^)9&ž~-6ae.њ.hQ#Ink6O'Ʌ& cFM>L9u!,̉ũ{w<#@׀i rjd_([rj%5C˘qK}%Rt~1gz_A@FV.~!QEpO9wI ״o &)cPDyD:uf]G˄c F>0⯨6(/ybBSP` 0GWF!>Q>"UXTrX ۡ<=fT[ tG^jѫȴdi{>o+ԢHq߂eؾ`MVr ̮E0Ff`)G E})-iq/:#S%Qq Em"HR$5>G }$PJ5[) aF\:g8a((]fT{~b|]rxlɿ,W:Kmg [ݕk5H1ƥsͻziVdkv'B NIJzL WTƆ.dR:1(ܔ3Mt M!a?NCz{oyq-͊4ԣݒ rTPw*#rY<ޜ=a0޺' tۓ Nkv{AzJ]UmmwvÖAzPcC#SJHoW UhԿ ov&]=6.~q;4,vbt/l=?۔S-{_6%+M4xyLC6&;z)&`1[ nMs:_(d6<Yl@ou07t0< s6O Ml!aPetMWMH,  0l !l"lb򌫢GRp  eg=F]sUndM9Зc<+;yT,F@&Eב.+pvCO0?Kcrdd莑pMpVHZ' IY!)%RK-)<nH^jB^cl^0,T@bzbJĶ7j1> JV.LVN-ʧ6rP8$KNo)ʝ۸L9-ӿ! .*k >c̼vr_V(7-x OT)WQr=TDu_#"?QQN\Wh;Q9pU)ԯ]Bk>TUE_{%ZaP:'r-ء/iLPgJə9;ylYR:u2a`.c @!6n2)YH\cfMUɢ)Sq`OY cW,t ףs),さ2AA*s%ٝF=Z<ݗv ' "÷ks}{' 5QLRO L*A(u1+eڸ%{j\5mrfędZq(pT|\H1op'p˄PRGV2:]JSSa$`.SkT]c0@씙>̀Eu8ƽa.}1+*\|N-`4Džl>t~&8x "pR|WK+c0$ٸMSqf3VAGo*,0dRZYІÙ=Ww4d@xI}Oqr5PzsAW0E SLL\A v XJ0rt|s*۳3L٭* :+|P@ՐM*HW3i A-x:Rt"UP뫼׼eL&oyB~uUuqQm0´k:iUU]5X9/ # *"tRkڇW/Q]iөT#3N'gPΊΠ:Au::_Cd=iKǕg8#Wm13&d66?ϘXW'[s84Uo(?JEcV\w?5,[tȢR+<'RāOJwM|)lmms-1.1.3/data/presets/ZynAddSubFX/Rhodes/0068-RhodesPad2.xiz000066400000000000000000000035421247673406200235100ustar00rootroot00000000000000Zms8_%&L)s P 7nrZo_$yeIܧ6j}w?3 #'ƇfV`;Ua1|k~~qj6۞_m)+?ս M'E4FmL,N74v4Nfh264$ p>Us:>_8b6lDnYl@.}07t0ܛ s6OeREn(jqNKTݭэz#u_V߽Gmk~ZG~^c{﵎1;u-:_"%ٱs9㛬1eUOՒ9Ĭ$KJoJh݁XͥDפ\HpBDu$_wţBzij)jrwR dv̓Cn %'-ddbhp[9Mz\^ ~={fn`9|K,j!&0I`ԦjRN;m]BDϋYMkYOn2`4rp87d"uDXN|%\T{W-fL"r'`@ @>̀:V~k=3}xj={vyKgn8ɦb!6!ImPJB\^3ւ hU'l>|E!T7ђ4fm6siTDJM豸9(C`of+^ 62 f;j㐏,;c>'0(K}r+ _SRU97d*!}(>IVnnȅ|vC#M׎,r_!+e`HOI _?/G)lmms-1.1.3/data/presets/ZynAddSubFX/Splited/000077500000000000000000000000001247673406200206025ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Splited/0001-Strings and Reed1.xiz000066400000000000000000000101121247673406200250040ustar00rootroot00000000000000]]s6}ϯ=HY_3I:Z[z6X}HH ΕHۛ8|j#x篋`ϢS 't~~o޼W?tz;Oo?]F+efA:yHp9I/3?`$Z֌E$`kvϛ-s@}M#iJLRknvJPA%2>S`3$Zub[, vex+pܾV"©D4ck #:y7x7_b:4,VA}JndzO'!%Ӱ:ٗ~ l\K0&ѣWN[7rN< <5fŒ,'IQSOY1k}j- ϫh_,cEaů㏗Wc ( fHix',ܖ)CUu2Q$z`q9a4bga@sUO, 1ySu;zknW듑GQ?:'7ʟ{]ovnK٫'Q>XQ>MEJ9W‹/Ynpk ^@܇X0(L(Yϣ R_(QǿۂiÂgz8𴂺u?hS [e.`.;xbH˅9nD8)1i?2]㿣]^AFOB{-8?=Hg|tG*OѪpVfnb29ҧDgiѡ^/Yg95luڭ=Ud[{f'_kZͮ~Wӻx#/ h?3[_/Q+굮7mIHwAw"PzE4G:4Yjbm$UPŻ_SJX?ԘX8 pk-RWgJ> _aJ'k{+/CJ(en u4Vh@3mhf+ }e:g`au(Eʜ-&n2\tX,bT,"ZqvFE5x[WԱA}ݧ#^qX+x`;W"^qX+xa8l ^ujSWvc"^qX+xa8,EⰈW`)t"^q/Rf&zu,\+xa8,֓ 0 0V 0 0<-HQfV 0`0 ƃx0` a,y0a<P2axat=9 l+]zaQ+a<0Y P^bn;$5Rs$AI{q3ø))Rb(ƂQ&˓=A`rJrAJ߳ {>0g>(& J~FY| |@Ay|oL>GgJqCey087k t<%f$ FkI좜>.`0K`1CmA|@0o(Od`3nmH>%Hb]E,1\1#`4KrQN]/P'#q`gr<1m6Q'> <$QNs(y0|m3,|>\gh~ >_sQâ,EE~"`Q(bڌ&EDDfDB.[W<ϥsQ}X5xlk +׿^V#jUɜR҆5x2+Ԑ"0T~Ti e2)3ߙkg~lKLwys|Q!VkHw~>I[JTp[R|ZR-Jx빯ԭ+ cRL|t@0Q԰ū2-W A&/~Y6br)nĂ-qqGx|$xc(Q,Ix!Vy)l*)d7 MC'nK-bav_Hƕ:Ew?[23rX[t[El|R8[ t42>8;N5R0ڬL> Xi徑~4u]TM0+D)V.TMMR.咃;))$Uų@ȩWLTDT 2^PBk!HtHԞG!cZ4Z XXS9ekںD!h5tj|S /qE>֎*7m AiYaxLB!^D$ռEJ*Q`Ts~f# (3JIJ{bSD)=DŞ,7E ="_FxoUp] EͪPUw*NK{m]}_t54dJMHY2[ܢPX|R]H& ldIg@/:Ijt"_ z:qY: 废5t mqYlffC'%Uf[_nYv2QF*Px}2=Tж?f,#>QW7Iʗ7=>Y /9җ ƍtfr>,9/ {Xz@ŽI3 S 5į/;ƺaaoh q,o|XlVIMį!]4ɿ6W%AgįM&~}u&%Iu^j>[MįM*$q@##$i^N}Cא{}kwocճا=>`xH尢Eqdwsv&m&mE&~:t+Ls#X.?zXJ/R&ޱJ4 atu6Bč.火I0rRZͻЫռZDH]ܹ_hWs~׼iET;T=ConozV-otT*!r~D9Am} sjH8B_ҕV[҄a̡ij2/n5+i2, | ]!D4Sn=/2L´+^d9Ւ^?*IV*P~#̾-ʹKk JD7Vhv#b_7h:Yߝv'7*?\rlmms-1.1.3/data/presets/ZynAddSubFX/Splited/0002-Strings and Reed2.xiz000066400000000000000000000101521247673406200250120ustar00rootroot00000000000000]]s6}ϯ=HY_3I:Z[z6X4}mHHKA+uF@8{'Qyxh< >~=};ӻwury|jxS8ow<3hAL]^^n./_sE gëI&2ƄK5B=zWvx}e&?d<$^gtVMo؛ ob9 ⧘0^pJ ,EB-m0Jqbߣ((>5˺a6ŭ }2h'?ݬ~p|pcC#K'c8d(+)HE?*YZ,H'oMcH5`wv;=S:MqpQCh1KLj=Qd:ȒYu}( hq=,\E/~~$_AH((߽y4IGjnwH8':^UjX5u"(bE0 010nLw d=҇յW:'7ʟ{]ovnKً'Q>XQ6Fo E1h= ^D_6Nd"7,%oL}T{Ee 0!dYP>w5&:Bq9N28jDA vNQ/:MW'XBm_Z.G йUf](x79C|l&v?[oӫ0 mܰ ӳϴ }L+X̎##H!I-Zie^1"oJ>`|kY:M@,q mf# E!*mnM]P2 8]p^C(N9л8 Ba<0`0 ƃCP_ƂX0bv cL1U(Z2-AxvyOpp4l!nP8sWv: C^-`h `'0adadada,iAKFyZ2`0 ƃx0` a<0`* CQzddøܮbHSUv FV<ۀacW(Xσx0`F$8ng*!{97W=c(lO.Fq0Q f9] cve#7Pm0tFsPes^/ s |nA!|֒>b 8'la(σ,.PPfA0ɧv.فGܐ,aB|qNOh-V%Y0ZK2`ovQL?#?n0\|@0n(OS2Y036ρQLR)uς?uX0b F$w٥!-1>[mal *1}i!bD!}΂>gh+aarQ8Ţ3[.rQâ(EEv"`Q(b&EDDfD\.[W<ϥL(vq(^n^=[ Ba{t帾ypk52(V"#_^ߐ6$$ţI$3.*Nd(KDĈM4g_X/ה=*>˖7gbufVF#a(UJn)R5uJqS_[" -&of7_N sZjE' vd0IԊJEUeMj^+lFvr*TZi~2-bKt[~! 6'݅TYEbp屖XfQTP4$ I:g%K\Gp1 [qr_(ƕ*i".Ƅ?Ʉ$RfR/(#NXC[ɿ //ΎSW6'Œ_Rӳ9%kCtz]L 貊bKN %KDj)'{X' ˹,͵ 7RHgڶWSŨid]t•ݕ-"S[J 5E쫱Έ"5m]dsv7t>vCn|:_;WO۠.6sߔ-e0&; xὩ sbt>GuxaITEmؔՆî6p"jϨ'INQ:0PdZmXkZmVU:^ڰQmT9WTbGڸTP~r/&6lجOZ=j BkؘL5a#nVk ?# AŪQu+(8tK*.N*y?YņiE̹pwɤgRxϴKKw{vL(݁`.m> LgoYm2Uo5vԬdB gmT~&endbe&Yɴ->K㥶v窷'w&;j U(iU.&\!atggbz;ড&͐6|)v9?Wx16Vdo[tx5v_ T[]:)NSqmWԋ4WÑs{%&gjžG?CVfvt\v_ߝWݓJ:p_-c0zsV5Ncm0yGz}kuZ!=_񰎾W?nkjj^)es_;͎KLq hG~dMnkk&SZU^P힢vx h|@5ޞZx_WDU:؊fa%:T/|l}X`&4ZZoM<WX~}+kN)+_]v)X$t~=#p`kەpJv/nrLc7&krކt%r@rrCD tgz9ر~j|ph3ԺHlTGtx|FTُٿ|GJO|t6v3ߟ뻋}'Q#AkK|'B:~H>Mcswh? ᯕ Xnѓ?ugPXçO.qQ:ڙƻiL)b//9m\RˤT2f`&J:idw@b~ʩdpN["{xf %P8t =ɟJ;e@~* 8c$q@}qQ}XUlm820 Bڿ|9YYCZ&lRq|LA#YY}@-kbOj * MGxgbM<>2) aKGJX²f@vr|RdKffHbKT +[S Ɏ2)//99,Y2wl&LsrX5a#|N9%l 0fyl[/ *}jk qp҇5+kjꂢ N?e-\>w'v[U1}nqmUcA$D˻-Z4DD:(B)/  @8F kAA#+> d3>C!H U ZBr ..`?R8$`&.:Ȇ1Q n0((>I]ƾD1CwXW1F>HuƵB:hscg[`f4Hoi!i6ejƣax`=cGE.Ԁ"#GS^#1 '$|rTdS 0[l\ 3ủVX #!h|vy tޛc;29lxWfRJr;{U<녫hVU &IXfyDDb݊ub]i]M-_iDP!ˀм#gуdN.K1{k;RħBHtWLδ"o4;2Ve'" ]+3M*Vw.\U9Uo.!XDes/D \qg*1bR.eK(p<)o,O'ۖ6- }XuפOzmuك:7aI;Ӗ'U4"VꌭZ/Y2'8mPldqS㯛Lw<+0MdULZ1Syjʆ+doJ63mgٮ?qdRd `G(֬:j +Ro/7GJԏLOw`ް_QcyyA?'=?gJO:N_v /@ljQ g c8,l4Nѕ0) 4tU&xGϺ6z8>P8#L3=0ݙ^zt8aҕo'l.E=/U}قMQhEEȢ+=ɕVi9Gy3|7^J>%wbv^OrUSu5!8iʎRr4S%JЩ{f<0$PNC6S%JO*%Tyl=1Uiǰ=CN4cY8uQNTpP(-I^'uSiۢoLBS- ~ .|xЌaMؙ&ui_rތeMki0K* Mߓ_`˽4/ܹW`DZ&>S12F@&>L&کBn: .NQa[np-6pL5N׎/З9lf55v` /I`N/IV'=;^tn ]K&7%cTi`qFb_j1&3{kJXS{`Jcke_aN?K#OL se[=2-=xf'.4f.&6aL |Ke4b[UROѓˍ.ꛘznboԴ)7 m;&Hrlmms-1.1.3/data/presets/ZynAddSubFX/Splited/0033-Choir and Reed.xiz000066400000000000000000000126521247673406200243560ustar00rootroot00000000000000]]sF}ϯ}">,ULJk5kmM* KV"VBߋ }S&rӷoOb~Ygy|o:s?tfxdz;N6翿ھO-?\8e憿ltu~}{9ʺk/7?Y3=ȯwܐ,߃u3\ۻbu7k1,_.dtʖk[3Yf_mcy-yxp&%/-++.@x=-՛MQK74~^!G7]&?>yՑNngQ[}-\gJ$?/]376_G&-i4vISi*o1[,Qh<e7]7վ"9$~bԶ׼Sh=𝼍}r>7V*!gD IzxxؾQF`f]7oy"U2!o_uT.t|Q\;MS}.ѭQ:f' 7ףqF 痩?zF\^nE}]>jh[ mh4Zh@CUB h]Z@CikQʨC%rz:>Q, TpX@)X@*XD+ΈW,^ ^1,VYWf^y©>#^1,"^l aaaZxժ+IRE>oLπW-2O^^2:*Z!^hbEp¨|ղC"6D"`{4m@h#va4 BM ec480 #hq808081Cޥ?h͈a lFo[:|gPSzi$AJ<2>}Ual\7d'#Pņ$ǷY* !Yh>@ )0[ |dBIa2$`0R0`#a^&fˌ80808080D qp!׌bϝ*1L4iCoDz;a  Wj]!80(2$G=Y^~|fqdo@͞m6V!>Z o0$Kʁ;e ឃt$h} c۬c ͒8$SA>cTp$|Ie:=#(I'(Hό>|qWXe -v $.GYFr~cB(cl"M54}y#<4(1(!#MϦ|OPh͈a 4}zH`0z(go"M_: HgS>mk9"RY Oz{Ԣ"Ջd0EâaQbX#bQbEEc"â!aшȰ(b ~,%"qC(pOl7v^v=:DԒ?j80[ ﮥȞ׉ 0`$ы#F" DduAjEFZGh"{L-YpE -C<$ rE-^)̧* |ʯI$H$+0ߘZ,7E QȞ M c _YGO@( \Q!~dzSE(0,aW wةW v_oYz^UeVYgňxAiQK ~X~I|Fnl/72 `'+mDV90,d|O@tT&dD\"[_/e3=>m cAXB,2?dQd(ÒMQ.ޥrw.`>g FY! %lf] FhD2F,c\ `p4♜ֆ}?zTc6* _(C0dVCn{!ט\hvk EC1s`y\P@?ɧh0^n5y,s@-ͱu &(q4E#?7@C1d lP!5L4dǠOotdϙrT   |IjHpV@pZ޷,zH*H~.b}&̓֌LY!Ɥ}e uZ£Xb6c ;'2 fjL)PgaPg SD =th󳹺~a6b \74 όR3"֌~0HN!TZ@?"ٟe ݟkf@`& $3 @ڿJaL 7 H謿>I0<֌>00@os0Zr0aF f%ܚ6`0f LY$m#Q0b#Qp?MY7j{6ܘHgnI0bl3e2cdɬT{YBjF쫙3+}"F[9I#垦$IVoA`̄1Oz>&MPL>Pg ?k02%M3!}3O}vԠOHϚ(&H#G^mZz}&yr‰fh#cQ3Dr>,Q7Ϥm\xyuvLly g܃E ˺6aO8jjvΌ{(%bYǶ܃۝(KYPyJ|ayg\^=8^:7Mv&y̼ǫoZ&kVұ9o m_ }:e'TN`>}2\uĵ:kW욑b~ 6JϹuZu̫:=ޭ2~LeOjṳ~=;dlYaZ'գzkre>*|_m@?j֗tNڽȼI%PSz.0"¤݁B W [׾;]H::pKjY b>ScxDƧ4o]ߝ.˛0\.[OR`+Α)ћJL= =Se`# .A7ggݗ\I_fT:Q"%TW1~^_Gck4^J+h6pz1>+5]y ܕܔ!;!aWYaẂ^;oWt¥_\^_#I]@8H S ܆Lgb+o'/^-C]loqM$`:ܟnjǟ,=lmms-1.1.3/data/presets/ZynAddSubFX/Splitted/000077500000000000000000000000001247673406200207665ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Splitted/0001-Strings and Reed1.xiz000066400000000000000000000101121247673406200251700ustar00rootroot00000000000000]]s6}ϯ=HY_3I:Z[z6X}HH ΕHۛ8|j#x篋`ϢS 't~~o޼W?tz;Oo?]F+efA:yHp9I/3?`$Z֌E$`kvϛ-s@}M#iJLRknvJPA%2>S`3$Zub[, vex+pܾV"©D4ck #:y7x7_b:4,VA}JndzO'!%Ӱ:ٗ~ l\K0&ѣWN[7rN< <5fŒ,'IQSOY1k}j- ϫh_,cEaů㏗Wc ( fHix',ܖ)CUu2Q$z`q9a4bga@sUO, 1ySu;zknW듑GQ?:'7ʟ{]ovnK٫'Q>XQ>MEJ9W‹/Ynpk ^@܇X0(L(Yϣ R_(QǿۂiÂgz8𴂺u?hS [e.`.;xbH˅9nD8)1i?2]㿣]^AFOB{-8?=Hg|tG*OѪpVfnb29ҧDgiѡ^/Yg95luڭ=Ud[{f'_kZͮ~Wӻx#/ h?3[_/Q+굮7mIHwAw"PzE4G:4Yjbm$UPŻ_SJX?ԘX8 pk-RWgJ> _aJ'k{+/CJ(en u4Vh@3mhf+ }e:g`au(Eʜ-&n2\tX,bT,"ZqvFE5x[WԱA}ݧ#^qX+x`;W"^qX+xa8l ^ujSWvc"^qX+xa8,EⰈW`)t"^q/Rf&zu,\+xa8,֓ 0 0V 0 0<-HQfV 0`0 ƃx0` a,y0a<P2axat=9 l+]zaQ+a<0Y P^bn;$5Rs$AI{q3ø))Rb(ƂQ&˓=A`rJrAJ߳ {>0g>(& J~FY| |@Ay|oL>GgJqCey087k t<%f$ FkI좜>.`0K`1CmA|@0o(Od`3nmH>%Hb]E,1\1#`4KrQN]/P'#q`gr<1m6Q'> <$QNs(y0|m3,|>\gh~ >_sQâ,EE~"`Q(bڌ&EDDfDB.[W<ϥsQ}X5xlk +׿^V#jUɜR҆5x2+Ԑ"0T~Ti e2)3ߙkg~lKLwys|Q!VkHw~>I[JTp[R|ZR-Jx빯ԭ+ cRL|t@0Q԰ū2-W A&/~Y6br)nĂ-qqGx|$xc(Q,Ix!Vy)l*)d7 MC'nK-bav_Hƕ:Ew?[23rX[t[El|R8[ t42>8;N5R0ڬL> Xi徑~4u]TM0+D)V.TMMR.咃;))$Uų@ȩWLTDT 2^PBk!HtHԞG!cZ4Z XXS9ekںD!h5tj|S /qE>֎*7m AiYaxLB!^D$ռEJ*Q`Ts~f# (3JIJ{bSD)=DŞ,7E ="_FxoUp] EͪPUw*NK{m]}_t54dJMHY2[ܢPX|R]H& ldIg@/:Ijt"_ z:qY: 废5t mqYlffC'%Uf[_nYv2QF*Px}2=Tж?f,#>QW7Iʗ7=>Y /9җ ƍtfr>,9/ {Xz@ŽI3 S 5į/;ƺaaoh q,o|XlVIMį!]4ɿ6W%AgįM&~}u&%Iu^j>[MįM*$q@##$i^N}Cא{}kwocճا=>`xH尢Eqdwsv&m&mE&~:t+Ls#X.?zXJ/R&ޱJ4 atu6Bč.火I0rRZͻЫռZDH]ܹ_hWs~׼iET;T=ConozV-otT*!r~D9Am} sjH8B_ҕV[҄a̡ij2/n5+i2, | ]!D4Sn=/2L´+^d9Ւ^?*IV*P~#̾-ʹKk JD7Vhv#b_7h:Yߝv'7*?\rlmms-1.1.3/data/presets/ZynAddSubFX/Splitted/0002-Strings and Reed2.xiz000066400000000000000000000101521247673406200251760ustar00rootroot00000000000000]]s6}ϯ=HY_3I:Z[z6X4}mHHKA+uF@8{'Qyxh< >~=};ӻwury|jxS8ow<3hAL]^^n./_sE gëI&2ƄK5B=zWvx}e&?d<$^gtVMo؛ ob9 ⧘0^pJ ,EB-m0Jqbߣ((>5˺a6ŭ }2h'?ݬ~p|pcC#K'c8d(+)HE?*YZ,H'oMcH5`wv;=S:MqpQCh1KLj=Qd:ȒYu}( hq=,\E/~~$_AH((߽y4IGjnwH8':^UjX5u"(bE0 010nLw d=҇յW:'7ʟ{]ovnKً'Q>XQ6Fo E1h= ^D_6Nd"7,%oL}T{Ee 0!dYP>w5&:Bq9N28jDA vNQ/:MW'XBm_Z.G йUf](x79C|l&v?[oӫ0 mܰ ӳϴ }L+X̎##H!I-Zie^1"oJ>`|kY:M@,q mf# E!*mnM]P2 8]p^C(N9л8 Ba<0`0 ƃCP_ƂX0bv cL1U(Z2-AxvyOpp4l!nP8sWv: C^-`h `'0adadada,iAKFyZ2`0 ƃx0` a<0`* CQzddøܮbHSUv FV<ۀacW(Xσx0`F$8ng*!{97W=c(lO.Fq0Q f9] cve#7Pm0tFsPes^/ s |nA!|֒>b 8'la(σ,.PPfA0ɧv.فGܐ,aB|qNOh-V%Y0ZK2`ovQL?#?n0\|@0n(OS2Y036ρQLR)uς?uX0b F$w٥!-1>[mal *1}i!bD!}΂>gh+aarQ8Ţ3[.rQâ(EEv"`Q(b&EDDfD\.[W<ϥL(vq(^n^=[ Ba{t帾ypk52(V"#_^ߐ6$$ţI$3.*Nd(KDĈM4g_X/ה=*>˖7gbufVF#a(UJn)R5uJqS_[" -&of7_N sZjE' vd0IԊJEUeMj^+lFvr*TZi~2-bKt[~! 6'݅TYEbp屖XfQTP4$ I:g%K\Gp1 [qr_(ƕ*i".Ƅ?Ʉ$RfR/(#NXC[ɿ //ΎSW6'Œ_Rӳ9%kCtz]L 貊bKN %KDj)'{X' ˹,͵ 7RHgڶWSŨid]t•ݕ-"S[J 5E쫱Έ"5m]dsv7t>vCn|:_;WO۠.6sߔ-e0&; xὩ sbt>GuxaITEmؔՆî6p"jϨ'INQ:0PdZmXkZmVU:^ڰQmT9WTbGڸTP~r/&6lجOZ=j BkؘL5a#nVk ?# AŪQu+(8tK*.N*y?YņiE̹pwɤgRxϴKKw{vL(݁`.m> LgoYm2Uo5vԬdB gmT~&endbe&Yɴ->K㥶v窷'w&;j U(iU.&\!atggbz;ড&͐6|)v9?Wx16Vdo[tx5v_ T[]:)NSqmWԋ4WÑs{%&gjžG?CVfvt\v_ߝWݓJ:p_-c0zsV5Ncm0yGz}kuZ!=_񰎾W?nkjj^)es_;͎KLq hG~dMnkk&SZU^P힢vx h|@5ޞZx_WDU:؊fa%:T/|l}X`&4ZZoM<WX~}+kN)+_]v)X$t~=#p`kەpJv/nrLc7&krކt%r@rrCD tgz9ر~j|ph3ԺHlTGtx|FTُٿ|GJO|t6v3ߟ뻋}'Q#AkK|'B:~H>Mcswh? ᯕ Xnѓ?ugPXçO.qQ:ڙƻiL)b//9m\RˤT2f`&J:idw@b~ʩdpN["{xf %P8t =ɟJ;e@~* 8c$q@}qQ}XUlm820 Bڿ|9YYCZ&lRq|LA#YY}@-kbOj * MGxgbM<>2) aKGJX²f@vr|RdKffHbKT +[S Ɏ2)//99,Y2wl&LsrX5a#|N9%l 0fyl[/ *}jk qp҇5+kjꂢ N?e-\>w'v[U1}nqmUcA$D˻-Z4DD:(B)/  @8F kAA#+> d3>C!H U ZBr ..`?R8$`&.:Ȇ1Q n0((>I]ƾD1CwXW1F>HuƵB:hscg[`f4Hoi!i6ejƣax`=cGE.Ԁ"#GS^#1 '$|rTdS 0[l\ 3ủVX #!h|vy tޛc;29lxWfRJr;{U<녫hVU &IXfyDDb݊ub]i]M-_iDP!ˀм#gуdN.K1{k;RħBHtWLδ"o4;2Ve'" ]+3M*Vw.\U9Uo.!XDes/D \qg*1bR.eK(p<)o,O'ۖ6- }XuפOzmuك:7aI;Ӗ'U4"VꌭZ/Y2'8mPldqS㯛Lw<+0MdULZ1Syjʆ+doJ63mgٮ?qdRd `G(֬:j +Ro/7GJԏLOw`ް_QcyyA?'=?gJO:N_v /@ljQ g c8,l4Nѕ0) 4tU&xGϺ6z8>P8#L3=0ݙ^zt8aҕo'l.E=/U}قMQhEEȢ+=ɕVi9Gy3|7^J>%wbv^OrUSu5!8iʎRr4S%JЩ{f<0$PNC6S%JO*%Tyl=1Uiǰ=CN4cY8uQNTpP(-I^'uSiۢoLBS- ~ .|xЌaMؙ&ui_rތeMki0K* Mߓ_`˽4/ܹW`DZ&>S12F@&>L&کBn: .NQa[np-6pL5N׎/З9lf55v` /I`N/IV'=;^tn ]K&7%cTi`qFb_j1&3{kJXS{`Jcke_aN?K#OL se[=2-=xf'.4f.&6aL |Ke4b[UROѓˍ.ꛘznboԴ)7 m;&Hrlmms-1.1.3/data/presets/ZynAddSubFX/Splitted/0033-Choir and Reed.xiz000066400000000000000000000126521247673406200245420ustar00rootroot00000000000000]]sF}ϯ}">,ULJk5kmM* KV"VBߋ }S&rӷoOb~Ygy|o:s?tfxdz;N6翿ھO-?\8e憿ltu~}{9ʺk/7?Y3=ȯwܐ,߃u3\ۻbu7k1,_.dtʖk[3Yf_mcy-yxp&%/-++.@x=-՛MQK74~^!G7]&?>yՑNngQ[}-\gJ$?/]376_G&-i4vISi*o1[,Qh<e7]7վ"9$~bԶ׼Sh=𝼍}r>7V*!gD IzxxؾQF`f]7oy"U2!o_uT.t|Q\;MS}.ѭQ:f' 7ףqF 痩?zF\^nE}]>jh[ mh4Zh@CUB h]Z@CikQʨC%rz:>Q, TpX@)X@*XD+ΈW,^ ^1,VYWf^y©>#^1,"^l aaaZxժ+IRE>oLπW-2O^^2:*Z!^hbEp¨|ղC"6D"`{4m@h#va4 BM ec480 #hq808081Cޥ?h͈a lFo[:|gPSzi$AJ<2>}Ual\7d'#Pņ$ǷY* !Yh>@ )0[ |dBIa2$`0R0`#a^&fˌ80808080D qp!׌bϝ*1L4iCoDz;a  Wj]!80(2$G=Y^~|fqdo@͞m6V!>Z o0$Kʁ;e ឃt$h} c۬c ͒8$SA>cTp$|Ie:=#(I'(Hό>|qWXe -v $.GYFr~cB(cl"M54}y#<4(1(!#MϦ|OPh͈a 4}zH`0z(go"M_: HgS>mk9"RY Oz{Ԣ"Ջd0EâaQbX#bQbEEc"â!aшȰ(b ~,%"qC(pOl7v^v=:DԒ?j80[ ﮥȞ׉ 0`$ы#F" DduAjEFZGh"{L-YpE -C<$ rE-^)̧* |ʯI$H$+0ߘZ,7E QȞ M c _YGO@( \Q!~dzSE(0,aW wةW v_oYz^UeVYgňxAiQK ~X~I|Fnl/72 `'+mDV90,d|O@tT&dD\"[_/e3=>m cAXB,2?dQd(ÒMQ.ޥrw.`>g FY! %lf] FhD2F,c\ `p4♜ֆ}?zTc6* _(C0dVCn{!ט\hvk EC1s`y\P@?ɧh0^n5y,s@-ͱu &(q4E#?7@C1d lP!5L4dǠOotdϙrT   |IjHpV@pZ޷,zH*H~.b}&̓֌LY!Ɥ}e uZ£Xb6c ;'2 fjL)PgaPg SD =th󳹺~a6b \74 όR3"֌~0HN!TZ@?"ٟe ݟkf@`& $3 @ڿJaL 7 H謿>I0<֌>00@os0Zr0aF f%ܚ6`0f LY$m#Q0b#Qp?MY7j{6ܘHgnI0bl3e2cdɬT{YBjF쫙3+}"F[9I#垦$IVoA`̄1Oz>&MPL>Pg ?k02%M3!}3O}vԠOHϚ(&H#G^mZz}&yr‰fh#cQ3Dr>,Q7Ϥm\xyuvLly g܃E ˺6aO8jjvΌ{(%bYǶ܃۝(KYPyJ|ayg\^=8^:7Mv&y̼ǫoZ&kVұ9o m_ }:e'TN`>}2\uĵ:kW욑b~ 6JϹuZu̫:=ޭ2~LeOjṳ~=;dlYaZ'գzkre>*|_m@?j֗tNڽȼI%PSz.0"¤݁B W [׾;]H::pKjY b>ScxDƧ4o]ߝ.˛0\.[OR`+Α)ћJL= =Se`# .A7ggݗ\I_fT:Q"%TW1~^_Gck4^J+h6pz1>+5]y ܕܔ!;!aWYaẂ^;oWt¥_\^_#I]@8H S ܆Lgb+o'/^-C]loqM$`:ܟnjǟ,=lmms-1.1.3/data/presets/ZynAddSubFX/Strings/000077500000000000000000000000001247673406200206275ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0001-Saw Strings 1.xiz000066400000000000000000000036131247673406200242310ustar00rootroot00000000000000\[w8~`yO!8'MMHHv_t[[,߯/!٤ڣh43Gwx@~xSxl lywQÇ.o._o?[ @Džn9NC$r@`u2CI0^yw׷Wenv>xkaٸ~l1L'gZ{nzP(d^\'bYSTӤʵ-Mv}Î|m( ?Xsż5ck=s/`94/(;QBg2;XpI͊!R+/政ۓ! F~]ߞ |ꆷ.^ 5`Zbbc=e?uIW~6+~q^/<,f턑D'K 9D3g5,^ Af9C"I! Μ\|6 #U5c gA?@@C3-:;^Tfs翌,t/֡vB~_7N(~sfG׮,X&]ɟ_vq+'G+ceV0Xd-=?ga ݒm#m a5rP =\8"qE+ai?).jm=AEB#BE-Nn].Sj,CXFo`bњpr^0H/7 r\98> < "lC]'SBDY~:!gMZf#E,|@kŕfv16tߓ^,H'Ki.QT[&ٕ=.&ZCA\PB0&JT4alXG%DX. * X> $(%Wv8(F,SPIt)v>7B`[* !8A|;yX(5X9 qhQ,?`#m 0VYdO .a7+N8pz}3_P>{YPFR}J+^R&"r,1$J+"/$?)R|\ʒRhQ"'oqH>!nn %N*&S^dR'OgR %a*r蜙Nxޖ3rwe:kZ_{U^Opk;dˤp++G~r  pn_υzzܑQ;įRy|~E˾|> ZXyfjyӁ;rVn{"flʯA `k[@5+0qM;uSsvRV=?9z%G݃F}ѭgB#mz4un2rI{=mX[=Binrk|8{䏋[{%xqϾ|}%׆(i5ش?cGk{bl$>9m !6l>/ذuhjt_y cy4NOhR>+^l")q7^X(aҨ{fly@]7^d!b).p<] {>^ްؖ2q 6x5O)$ŋdDNsI R Zʭtي*_R1\8 gpU2ޠrF}繙M&9qk\2syI"LE"V!GWrPMY~nĄ( $,G)KY*`?'590HI}{5]zc0gk RfmkCUd8^DlLi,kAb #!J9\%"&R*q'mq)Yng89( |J=D"7EH~nntR!F!3Pœ$^ .|E r"2'8zϽ l`Q¶ĸ3-KB>rE@m]Oӑ؁Ql~c_GMn*PsQEA?aLIô%(ɺѬz> !^ KEga0C\2e/G& ;,g$=4ˑ=<\9\,լc0N @M3} ;jb /YF线gYQyZ~8_g]TF͊u>>bНc~(f_XQGz`P2Iߨ'!caiV̄9B:狒;_OGdlw گi(Q it$ a >-^#)6SVF3 q~lffF=f9D|ەҜ_<,@z#SǘFd<%(O@} 0jd2N"Bޜ%ZmBӔ~XBjPsidk߳lMY* WiBŋmk. *)+,X ϕ 5$4U6۴zvoAa*aZU’}Ï3, :L\;S,)M2fD%{}L 㐕dy_X ÔI ĥ6|NdTawx̛2ҢbV6.F>M(IVֲ s-[uWWūr!TT16s~%o4:/߫Ŕn}bFɳ\e>&ajA:YZ)ۖM+y|-B}r[WC&3~-ǘٿ5,5~-ïf|݄uKMXkj5~M#ף} |_W?+g??dZk_a :VT++jkVKkPIk`ݗfi .^g`;5URA `kKF@ vn hۺ ,mv:|/`9NϚ}G;nny+tqe/R tK.nʱmq&ٍs&*&[ssƹWܫD8gvN3\ XmѬXZ9"3ϕ5B% Ҁ}yiOxK6(.DJׄ/(:L @e[Ֆ8iwxiޖ]2-Waq!"gMfz[ hUQy(2Ljfh U4@6X*B2l٫uoLĕ,KEˣ4; :Hlmms-1.1.3/data/presets/ZynAddSubFX/Strings/0003-Saw Strings 3.xiz000066400000000000000000000037561247673406200242450ustar00rootroot00000000000000\[s8~ނIagلdtQlbMJ"Hr ii㧦ѱtnI㣿g ]w|6KQ ՠ~Nmt3 =Җ쓓MIL6[FS%KII71|N ] J%@t_/ @hıƛ Ysji4&WxF:ev̂)v06f*E:YQ }fX^J6+RX8%sF{1 {Rtl.u,7Țhf_xnS@ ݒ7L^ *Q+;ȡ,>G b( "G)ZF2Mpx~dz?5 HXgxus9ݞ!\ + V8h=Ud:^At(i,k8 DFdaj+x°ziDrO2LUpMR1@G~xp~@Gz%N, =d_^E#B'B =yef":N2p[`fҐ!.Ȓ=&0:%zY(xC*݅;BgNħC!+9OjNtݛZmfΫu@Kuûo `H:!b l촬!|B[dRBQؔ)Vyç au)DgֵRw{=Q^c4pX6ZVn2btI7 >R0,h7J #s9j4t^ ` s.& Ӌ;__~/lbuwa Mya>tk\ؔJ L4l0GIbOף3{Ms龟?4=qv+L0v<+JǩUfthh mV8V+}5\ZgKi)>/GwtCt;+VQbR$z%p]1u`a`J)[{nR+̃<1rYd`C r(ev0)w*jdFi&^QV1BY0bBĀEo┿Z%DޜZEEs/y``EލWhIU٥ڭ6܂iSZNǣ3Fo"IAVfa=ͼ2>IWB:ЙJS@ &}%F\ΔU\QX12Ǵa?2}6C 5C:kln[>4R]iP%ߛ[Jǯy}Ct&WOpk r7k9ʰ҈jjBσgV{7_CIUyZW n5} ;t!{ t'5~'5~}3k_-ȧiFU kʩvM{Ϝ\-XC Z:5b?xKG5TP\[k,~@C: ݱTR5.Jsgu:ּTKv;Ɋ?!P;-(uXJ.R/h͊XUw k>P*\v?UX4Wi%dw.Ἓ]B}7h7̓L/~Yta|A[/˥ryh\"ZDA{Aٗx>_m(灩D>AȈwq !nuqկeiV?#_8 )Llmms-1.1.3/data/presets/ZynAddSubFX/Strings/0004-Saw Strings 4.xiz000066400000000000000000000042171247673406200242400ustar00rootroot00000000000000\s8_񞂁I2e.^4-[9$?HZƐMژZ/vHq9~W];=˚WY8Nᣔs=ʵʞN? qa$}dd.>lFL - (KT%uGML@"o*ȱe{tmƬkt|wNe蒩$4Q=dدNk1$U]=t$}I?XH&:fb,_hlTk,D,"3L7:#L!#*ʼn0Yl˜ N@DߍFO .gOن ss67 "dd3co:(5FhC= e{(ZN$\4$/:@< ل"CξyQLB /V.E5b&}ÞTպ0S`QZ k&1/^)6QuYuW#701jѰ7Pd0_LQ?hp9. s <vLeP 7m$BIfmT&sLDl![42s5%lˤF_ 5bp- Y:ň& hFݨI TQ9.>#b/ >ԭ ه[xo/wvuw#'|;0Z'uFwQƞأ1}Q->P=CQxzC%K%II1mtJ 'P$J^:"҈c׍A2G>TuC5`8oᄾ n?tt21 Lim׬F U2̎$(Y/iw>?-?taK*pS( f475< (!~Xw55/QZ@JmY􍬁Id[.JB3RuƢ.Lc_^i  CoKc> jv]=KP,BKֈ=%{U:̒ˍX :M}OD*T%פ-3j8sP7h8/ܰ}}{gd > ._jtڹ7 *"8Owt.5-^tY$Cg9Jr.΍Ջi4;_.dKYV;.)Et b=>s'ȸË/&dIqBAkة&ޅa:sßdz8QE0W~%YLۖĞo;0\bpGjlA^6e/J 9J fi@7H F PaL/J"|33GdllGG'_t`Z0u%L#˘FAD2)Ҡ523.f$f&'=ւ9B|\{W΅?iz#mK0v<BE.]8LZ-[zcrOÙKSbp-- Rdzb4@4,㯌U$8dr(erV ,ˊ cSfODE͚5kmZb\dGeʂ XbR+}ꔅ`Ņ A(heIYFb+%0{aхCH Qķ!pZ S@ޔZvEES/y 4.^&,В(JKح&sߛb\Ȃr:PTcUFw&Df>(hRtc"-cE Wo,Y%crLK fC^ܞ('M\_4L:p?J3ӖGg|fߛVɻ~njɻ{c[i5/vCo ! *ۈ|b| **_*¯|l;XU5?v:-ؽFmsV 9 n6gCͬ>뛡_+ B+UϓW_=ٯg~5nf@SN 5߷.ZbxK[Tdž K'{vd KTXRAX`zҤ:h:X T0O~?Xfd˜ hTTuAv (]gкQրCKPXsC=eN>a˰i.Ӽ7~q4w4^L3z~^. Cz@Vʠ:}ue_Lد6灩DnшOw'vzWō7]xEմl=_[\,Llmms-1.1.3/data/presets/ZynAddSubFX/Strings/0006-Saw Strings 6.xiz000066400000000000000000000040301247673406200242350ustar00rootroot00000000000000\[s8~`yO!!0&f@:}(n IG4OMcwQ{"~xn|<<ۡiStoף;ϊl{=>q/?G#|Ο84}Alp?µ'u0Ʒ`4d[b=xޢFK.w`E9bEĞR` izޭ95ǓTY/ulGaVdE7'DNH-~ VklF, '0K^:"҈cN-9CMU7T# N3gؐYd=Q$yT_<7d Ip뇫%Y[8XK )olD͜(eQ$kFy[sq@ a!86^j՚5>7 հѡYh36 =! Ruiǂw}&_?\5dJn`z]Oނ%ۺY h)eh{" rbCD.eD9b#19 W46#⚔b=h=nSNO >m( [UZ$[tb<ٓ/J!yr)pXÀO5--,Be|Eoœ56Rf}ÞNiUI #v /4ɰg۪&Գ 0dW#7K0hh^ip(yq]XP> <]hd ,#0I*Q ;BLYƖK΂ R VcKhr5&jŏЌ-vcp!)I_#2'Z`I7uE Ąe#*YsfuSsY`IAKd)QJu9΂tɔ; 5OXQʒ1S(!V-K8ﭥ3٢|jܙqDKȲho*aq7ZREiv)z ᄦۣuc+ -.z=D"NB_2i4omX4oӼKj.).Ἓ]B}7͝h77~>x,4. CLd>fo^MS(S!L]=c.NZI4v>.M~K#kP/6<Mlmms-1.1.3/data/presets/ZynAddSubFX/Strings/0007-Saw Strings 7.xiz000066400000000000000000000036751247673406200242550ustar00rootroot00000000000000\s8~_CBL8s%$sb˜mߟHZK?%c֫'D 臦 \>~hOz͏ޝvy{1|g7YѾ뎗W8L߁!O<ʟ6YcG{b }g{أ8b|[fKȋ G8\形U 2GzÑL% c MgN ;qъ3xCMTt' NX`xu! K}=<s1蜵v(,ENs?Fx sS{S.C1l U1ߠjF}4BÜ+^>KR(JV%jLVCD@4tX//pi ! 4Go4} ,~== L) \ !4fb)"> ' ȸËE%JE: 804fɤ ^:agyvʳdkydN~̊Uزz߂mg?q ͯlQc 9u !Q cB@|,N9;ҁ"QZaf!v1e0uKhC4U0 \$U0Mժ$4LWg5aąpt507M0h?0Z0CHrO {s_4=y!c\E<(O  0Ijd0N"9[2kn3&4*^ g.)ѷɗ>~,Gl1l%U"9\R+?(crs膟5L=uk֭wojq %%}OE30 0d)}ʵ}K4p'J 5K2 BʂF`[a9B!5S\j|#"[Wͼ 9*^i]=Y7QY'uQdbNC__,,uJX{[>]nlTݍ(8G e:!W֐<0,3NJG6爊@D?YCed1dLAHɻ4fzEerfƘn ۇGӂGjb``UbF,2*E,72ɱs J1Mf`\^KQE @Ձ+@!mm^>IGv"~uLǯSx,ư]WmƯoح+oXRgy5X_ KX'[:pXR5/U84cz_-Ջ~̱nOKWRV[zлU>C } pWD UN>niwӼMn7ۄv 4H4M3~]Ey팶_ZKD3]F^#= 1P0R^!Y%pwѹ^h|&v[ʪ~\Llmms-1.1.3/data/presets/ZynAddSubFX/Strings/0008-Saw Strings 8.xiz000066400000000000000000000037221247673406200242500ustar00rootroot00000000000000\[s8~!d&MM) lE"6k4Eґd m)X:;?'^kXo$pB 5'W7o|]}/9tqߜGC#x{rԠmto=' '>~Fz>Jbϗm4/^1ZyADKIyx>LѼ$QB HFn z =𩦪dtc'}0蔩21 6L=5v(,v'cI(Y-Hatx_6Nދy]ؓ 0gsp e \A֌sJH-Ƹe:*[ 󗉠-^0b:EI(pBNX4iK44|P2M@S!"b`riLӧpNS׃ٳA@B'2/Y!:XN0t[ӟݲ4쇭/J_YJ[Vos`Pm4ԇ{c.B2%!+ZE|k}"Jx(*5ySNrhYM(=xx4.n|eTEQ]Jn l__,,({q\2kVnT)4,6j.lW*$O[;pL T΄{X(g%9W+RO&tbϔ*#%c^.&t;IUVvmiu3fNnG9ZGVF|Q0JY*\CmrK  ?(ݤG娸Ԉ;x[Aw5:VXCn !r_@__O k݁GTڂf_~׼o|6ƸƯ;c\Ww~=-5ksnXy5|:jg; 57&5@Yc)1|R5bwR€ZX*?QcKXCԂUţi52zR@s,%cRh\zMOvݬxqV/U'j*v\ev7UX4Wi&d6ἝmB};ͽ-h;ͧ{L߭ރa:/ݠe4L e7 +b~Lٳd.?~g:և zUa9z?|~qf HV?޻TwQ}@v/̟d4҈8BlxB!I\XOXqW_pap>|{+; <#Hĕ',s} beXDIBѾ*Ű9'5K Ha=.05u=sρDI]w$'ޞ,jP"wi):׋Q|4u %MĆG5 |۲*cY,2H8 TJpDHrYȳtdN՞[j,z,'OFj{ 1n]bS98=?ElHPp~?ol>l z+3RZ]f䗓` _x[cZOtyԙUepx$)v֣=p -o|Ʀ%j0O m P NKF=ilIGta@PiV<Ǎ2|PQ}6-ugX2W-WchqiBaKaKt3#naVg0ZUj뵃ZV0Z5=MT~Ib)6V!lDa7Z/On*5:5xkêےrA ԥ[0eR,fʩ UgCstd8߮$TLBb؜ -Rݧ[R^L'M1:լ6ȍDt1[/ +S<*l$.~vgûQKp-{=s@R`oi3Ū!075 f옙 O&u% wl<Ϛ̑=ݾj M "I5K/A"NMbUIU٠ɋcsI|oBWppSnc9ĕطU=uP3Ibʇwiq-M -GE]4_̑ *y_;,I%blN\+-R!PDB<Ehn~'7Mww^|ϪL@qHBtiyKU!DGI`Ij7?F#8X4b[҈12Y~,bYY/4sm xo8+*aب ;jС=T[5FqH}L'E5b~y>8`:aܷ&RG!GHUV;T(u-*:2"-e5=mxy_$׌o;ٳd.?~g:և zUa9z?|~qf HV?޻TwQ}@v/̟d4҈8BlxB!I\XOXqW_pap>|{+; <#Hĕ',s} beXDIBѾ*Ű9'5K Ha=.05u=sρDI]w$'ޞ,jP"wi):׋Q|4u %MĆG5 |۲*cY,2H8 TJpDHrYȳtdN՞[j,z,'OFj{ 1n]bS98=?ElHPp~?ol>l z+3RZ]f䗓` _x[cZOtyԙUepx$)v֣=p -o|Ʀ%j0O m P NKF=ilIGta@PiV<Ǎ2|PQ}6-ugX2W-WchqiBaKaKt3#naVg0ZUj뵃ZV0Z5=MT~Ib)6V!lDa7Z/On*5:5xkêےrA ԥ[0eR,fʩ UgCstd8߮$TLBb؜ -Rݧ[R^L'M1:լ6ȍDt1[/ +S<*l$.~vgûQKp-{=s@R`oi3Ū!075 f옙 O&u% wl<Ϛ̑=ݾj M "I5K/A"NMbUIU٠ɋcsI|oBWppSnc9ĕطU=uP3Ibʇwiq-M -GE]4_̑ *y_;,I%blN\+-R!PDB<Ehn~'7Mww^|ϪL@qHBtiyKU!DGI`Ij7?F#8X4b[҈12Y~,bYY/4sm xo8+*aب ;jС=T[5FqH}L'E5b~y>8`:aܷ&RG!GHUV;T(u-*:2"-e5=mxy_$׌o;&(F/d%VcKt3#ɆnagЎ.[j0k6JiRp:11ق*u o96!|a7Zd/OaITd㭅+jK^Pn fJP=mБb2M\.rr.k a}l7.NKynEs{1 '7蔳 7AXJvlp0&bN1k6mbx?x$8ɆKEϪF\`#[#u Ӯ`xpx}z| QaJ̏.-59!Y$6m܌{RTgfwxر1"k"Gwn:3D,H5j`34]*E $@9Aǀ撘LnJˉ  &ƴs +ӭ \uU̐Rn?/uwF23ZZg9;oAcN*x_G#/wQ$!,n>ep\ӶzK%)(/rFs=ylzՒh2!0ˁ2n='1 hd-cp,oM$x#D$F#7?F#8 X4[҈62,bxXeoq/n TQ5)vT4C9{fRmմ iw91 !Oj0y>Ɋ<`>aܷ&RG!G3 UV;)THu-+:""%U=mxy_$׌o;&(F/d%VcKt3#ɆnagЎ.[j0k6JiRp:11ق*u o96!|a7Zd/OaITd㭅+jK^Pn fJP=mБb2M\.rr.k a}l7.NKynEs{1 '7蔳 7AXJvlp0&bN1k6mbx?x$8ɆKEϪF\`#[#u Ӯ`xpx}z| QaJ̏.-59!Y$6m܌{RTgfwxر1"k"Gwn:3D,H5j`34]*E $@9Aǀ撘LnJˉ  &ƴs +ӭ \uU̐Rn?/uwF23ZZg9;oAcN*x_G#/wQ$!,n>ep\ӶzK%)(/rFs=ylzՒh2!0ˁ2n='1 hd-cp,oM$x#D$F#7?F#8 X4[҈62,bxXeoq/n TQ5)vT4C9{fRmմ iw91 !Oj0y>Ɋ<`>aܷ&RG!G3 UV;)THu-+:""%U=mxy_$׌o;zw_eQm=mXp _nO᛫ۓ_'ws\w,q'x&y^r uM:ء#֣akJ Gd8X&cYrBtpB&I\X XqG`n`6xly <#0$ғuw} baXDIB<+0Պ9 g K a}Um`*̩f)rρDI\w$/j?eH~(Nf-Ro;B^",t rs>ճ!x2:2NZn8pyxoYm-"ƍ䣲9t4t?{X.z҆?FxtGp`1#ULY2#~_ /ZmOtxOpr{' &L yו33E1TvX7[^ z#CF_a.d~7z0QC!}9$tV`]BTXU $9T&'=lIմ^&D6Ī6DntP ΘjUW F;"FƥQVs%[`8iC$͑bcFv}ȓUɬ6BZIJr*kdEauFxba$;^EWա ڲu-WWER%K }`pq:T\t jx0[QHҝGG|i ](5_ipDJIx>ax֚C6-{o 37g ,r} o~<6ީ|N`hj"%h^t.dP6UdV)oxiA☔V](fGe>mh,PD">,ʀg8?<;+ \/ f&U4L$$+OiyKU!yw*^~Am4rш4H1c5TVV"u:X44sܩ x/8 *VV+rd+jСT5IGBN!;qY(,uLDDOR*|ryv4e#O)œ^&J]JFhˢLaHoMuj^1;kF7ȝ?狣y<竣y3?~Bx:9w?buvCnfUH-ߚ(]aqvwؼiԆG?K*dTCWu)#lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0013-Strings Pad3.xiz000066400000000000000000000032761247673406200241550ustar00rootroot00000000000000Zms8_%1%f\h-[l/VC_ݧyZ>zw_eQm=mXp _nO᛫ۓ_'ws\w,q'x&y^r uM:ء#֣akJ Gd8X&cYrBtpB&I\X XqG`n`6xly <#0$ғuw} baXDIB<+0Պ9 g K a}Um`*̩f)rρDI\w$/j?eH~(Nf-Ro;B^",t rs>ճ!x2:2NZn8pyxoYm-"ƍ䣲9t4t?{X.z҆?FxtGp`1#ULY2#~_ /ZmOtxOpr{' &L yו33E1TvX7[^ z#CF_a.d~7z0QC!}9$tV`]BTXU $9T&'=lIմ^&D6Ī6DntP ΘjUW F;"FƥQVs%[`8iC$͑bcFv}ȓUɬ6BZIJr*kdEauFxba$;^EWա ڲu-WWER%K }`pq:T\t jx0[QHҝGG|i ](5_ipDJIx>ax֚C6-{o 37g ,r} o~<6ީ|N`hj"%h^t.dP6UdV)oxiA☔V](fGe>mh,PD">,ʀg8?<;+ \/ f&U4L$$+OiyKU!yw*^~Am4rш4H1c5TVV"u:X44sܩ x/8 *VV+rd+jСT5IGBN!;qY(,uLDDOR*|ryv4e#O)œ^&J]JFhˢLaHoMuj^1;kF7ȝ?狣y<竣y3?~Bx:9w?buvCnfUH-ߚ(]aqvwؼiԆG?K*dTCWu)#lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0013-Strings Pad4.xiz000066400000000000000000000033671247673406200241570ustar00rootroot00000000000000Z[6~ϯ< 셝nft6v}[_-_#,[ $]fҙy0hlXqtlzlȍ=?Z^7g滛ogONmi6ңoG!'ഩQ䅾f|%htӨ@ xrߛ #kM2ѐ]7z6+̃ [6-nMЛ3~%qX.]/rO'0%k?Jy,X0W{Ǚ%ڂ̻52dfO=//&]Q.t¥3ɦ o@Hf{Bܠjwyӏ_xWu8N7j߮Y@." PV0AM(a&Ùsky`ìf:Ìk>84ĶbTЬ;U,5KYH5K-B4ǚ)Zw2}ޣ]nA˪lUŎ 9/W3T҈S{h'`x@ӔU;SkNzWW-9:ߒ0 |(s ljVn6Үp^jɂ.B\<ܭK۩a]b[eqxlħb1єixgdE0|ty PYYb40P=p /{G[aB }TmCپ7&lEoZ״a$]52\ݬlUXp6 6O05/E0bM (]jz}Z4W@D&lѨܿ_(ըR4& ?I{4t<ߍҘ4`M sa"tǒn=}MGѝܝЯ$\#Å+<~88 e1„iB2,%09))9jE ɞnst =t?ӥ(  f^-({T-w.6[P:NdNW,mY"t }2l)rXV r \nFo2YwϽd8xa!]&r/RrGV/$ٮ QKBH@TWD&P-^t@˵8JV(@_|S8UV`5ah~7N|6W4ab5':f@;>F֜GVl]_Aϓ]4x2%Ȗh_MqZhp.R.[}#%>e ׈ -'@64sH@: "/1 x*2Ț^i pzGC5¦q 6ڡ([C"mڢ--"BI6t m\NjV =8IH5xfiմ`ab(fĸ(d )&%ڪ iu ސNSn(T+oR5%|'rnԥ[JqRaC$rE琂d'nDLXpZ%Q% bPzǪ~$۝e<hz-:Z:SH-,ӠaJ?C-jڐ$B8"\omat;Y>j)&Ke $Yqi?ʎʹQfˍKd 2 z|=>G>㤤BfKðy9Xab}!YI<ގ{Jd5F3Ha'6 <*{};7XT*1XjX5 g6 0:@AUVgKh)sI|*]{!KS΍6"d nקht% =B{oϹAXiv<ט%RM9}(zxjsb^ux!KRzXF6|ڸ̉B_^Q ZyU{zXwڠ3aiCIx-2mH'1H!}'~*rA/18!sLF` %Sc eZjXf0O(y?`0 CxT%ibt(gOQ*FĤ i=)m51u>I'U Y~qCq,4λh<]Yv鲪NE&JEz8-|4&Ĕz5 sqhNq{qЙ\wGpQ6OxϏxs=W>x\ZW˚+Jbs4@øӦq aL8&8O왪*j#EV-MR4`4v66}G&.mr(J#$%(O;3ô&lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0015-Strings Pad6.xiz000066400000000000000000000033651247673406200241610ustar00rootroot00000000000000Zߓ6~_Ayj;fr2E#lq82 ?$yeåa&Sy^~W֎EmE|+i{p47[m/6U w=1i[8~6JDM4hkfqsߚmt4[< V~4" p[>m{>>ߒ$f6 YnuNu4|<+s4߱GO&񭴕h/! p*Rx^i yOa#{G"`1ɇdzRzSM;RH 2?Xc Wk̸DFNdxx_{.DB "0/ю=Ʋ)g!t-gIK]qG Sp-IfvQ^K2\o` mRlհhAe`WKh)I\&EyF\gprұe@lA7K؅< JZK幆=Zmd4ˏťKx] gO(yĉyyGnsgqLJ^/v$kP]l%6 p]PK*@ki@-tTwqڠaiCNw;f<%4h?Z@)T,5K=ˡ")M gJBT@静ap!mic7'n@~0 J5Ҁ0 ܊KU2h^(W_NE@Z j ]E#fREG˳$:RׄG$nݐ|uLN9)2.ֻnf>:< y2au.֓[.s^* /WTJB(LשN C8 u닓/s]\^>FeQ_\|o>נZ Jg܏7qiqK`OVW%[s42UlP|V~+ R_cG>؎">(e`HU H=#6$lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0016-Sweep Pad 1.xiz000066400000000000000000000033121247673406200236370ustar00rootroot00000000000000ZrF}WwElQKp* FE%_L$㍩ڪ)>}W{nkˢ b؎|~\>۟nNN~.ffϝ?Eޜ\GD-8~D^DIOhltP5h:. ҈mc.|CٰuxcquÅIf\E-wsl##ÉÙEc%yxkfI;Ul.Yġ&u:@3USR  U$-sѓ4,s̫#Fܥh,^ jv˸dcì훺߭K+"|2SQ}XEqXV lɆf~ALK ʭaE '^%y|c;Pw{@3&ޞ 7 a0Cen`9|Gplɡↀf۴fܑI]qK(@k#̲&rdN~7麟 8I1Cb a%r'z2ːRw?/uW-TW<M`hj"eh1?^t.9;A#N*Uyw4t☔V^HK-Vsx3pXz/ WKY a>(6/o pY`@#C=oj:YޛH("*"T@5_ESEJ~+zS>I_3qCo=I!w4gG|~4G|y4y3?uq64ׇ(VeWs42okVԲr |WE|;nڅ4/Z8!sGQ~iVH#lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0017-Sweep Pad 1 Fat.xiz000066400000000000000000000033161247673406200243370ustar00rootroot00000000000000ZrF}WwElQKp* FE%_L$㍩ڪ)>}W{nkˢ b؎|~\>۟nNN~.ffϝ?Eޜ\GD-8~D^DIOhltP5h:. ҈mc.|CٰuxcquÅIf\E-wsl##ÉÙEc%yxkfI;Ul.Yġ&u:@3USR  U$-sѓ4,s̫#Fܥh,^ jvh(d68vw+\Ɗ?߅ TTyZ'm*VD`wP=|h9u4'r|r+X1)ȉpEB'T^" ̷ $}!":2NVZTY407Y*KwE}űtpqyU(p0ol>Mz+3RZL2_ 0x˝uXW9mRDӬYJs5A:1fRͧ\h\B[nIb:Nn)gFnt%t(7_@Wh%1}+ZDӪÇٽI<'e8b#i %Az==cl˚eL/joP[0!F27#pXPqC@Q3Ymڎ{3HQ]Tۤ%)@l/д dAQФNz *!'5V#T{ڃ=n1Der*]N\gp P06cHlA=ɹ;3\k!\?^(?$6Zީ,xx?Db]sw^2GTR:hy <1)eq)ke36E_[2v($=K@y3_S+@߳J*}>Pl_0]ֳFzR?j2t7QRE$UDRjx 9NB#F#h4IjxxFu1K6wj^: JIj!h@rDhZ> q8b 0B%Ո1%<ַ,+yrߛKUMaFV*vz8z2&R]JgHaHoEuj^G1;kF7ȝm|=)D:}$wmmX;6>[̷_nO^/l=O?>ؔۓk_Ϟȃh1-ښXn귦4q4Nfh2_!2ܖO=vӞ$ Q7[;`Q:d: ͅ9grGNƶ({{@3& [̟Njϕ-YĂΗ-}%WJWiC\ σd<#d8z0-ï"LI2^la_ x˝uXT_N\ʃHuz†JR PjI6Gevќ8$0[^ JW`3  AF^;X%j%BUZ}4ǀänBaMD/3\&oD6Ī6DJ7kB?lbUY]r\f6d\5,57ZU1]MI;*&1oDcקu uzRL7-x0g؈F%+Bx|]sw^ 2GhUlUܨVx>cRZQ$W{#\>ÅV" I{br4_sݭ WK a7L3xY@V jR?ÝXˡ`DjxDc4rЈH#?$TEc"m9;}v`.[!L6-KՓi1(ሆt"F/շY +̓{hR;:zTaSaFV*a.qg LޏWEmhY׫"%E=ԩxGO3ť>gy.,lI|_ec8Z̗G|u4Ͻy3Ϸbh Cx;Qʮph-Oz[x[ф(OېՃv%whCܡg Qƃ(4Pտ07R$lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0019-Sweep Pad 3Wah.xiz000066400000000000000000000032601247673406200243060ustar00rootroot00000000000000Zms8_%L)s P 7nmgI_kW; 3"Vg]I'' /ևvu}?^{wz0[‘..f݅:T{/4m>LLdzh5MWco8 &مl҄0)HpGhih1Wbk+!bI:+z y H0aq5Jv Ad!©aPIb֤fMgǮz8tZ;i2]wtUD-C eh_- Zsz*SqC̏$}v=ޛUڈ~dvYY3 BY,dhZ{>ɰ(!!^%@QLPQX! WSTnu$$tp :T u:Q2IJFXY&/6Z>LWb$&T|]}\{9J%U}-f5/fɭLM2VT3㾜P̋|ѧncFcYiA%Wt!P8XmgqFtU+=eT4$hF4̖ד[ [4бIC'ZjXcP)ŝҰ,3u'~~L}pW,l{O%[AA4 غ(U67 BF-P\aКlhLq?*nbKfKUaš1Pv!Q&*R}T[dmx{WmVd Ym834.(>Lu./o;j{h+o:ɗ++kۜ} .vz!`NOUmP}2׫e-tJ]t4.^#N|>[N >v _LCU2bdrt7d .!IyA2.0`3US(؟r hG303x==QNWFj}">u۷@ͮF:$|VmD l~C ^F٘\8E1 e{|/$p/ᠧmc\ά=(nįjXׁJ#Mx}qi>0Mcodz\zd{gᰫœ՟!1CFbohs-( B$jkAX/_j\&RK$y RNs xau7G@.Di"6('.aiȉn` s(+2=rrt5#*BG̗G#}ՉX4q[҈V1,b,?4ןv:^g!KD3QX]ؾ^e:-uWuXL]xp5sjMܣ6qD^W㏃.~]v]8re _}P>k? Ldzh5MWco8 &مl҄0)<ݑ2F$ʪPWɅf! {F}IM 7А-! e" ^{{ ![F) щI>2ºϲya4#1Z 0@mˁT6(qhq7N|1OnmehBs5Pvg^{$>uS3NC*}U R6/8ܤE#W7["_ )r&!A[oT62aJ8?M:^Pͥk *s0[ESHxѷ~^]I\(.9{ . a}#ZNOump}2׫i%tJ]t4.e`5Z#|>[N Ɲro*l8rt7d .Cx ǃ W!e@jÀ8VUP̱?rӎ`duS{2{>*?C?"D|xl`qIe[Z'ᣠ f:3dե?g_HOx^v*զZ$j6 [ (&>TB{pNz:FSF|{e!G^4^Juz\wodz\^{dpUuꏊP!#r7y36R$IPk`_j\zKCCI)|'!yxauWG@.D(4L7j9ǰ+z2?rrt7[HTĨjx|c4W(шH#'h[Ea~߲XlXDMq.n(D&NyM3J<ҸS%Ep5T.}Q*2^>hN"i%i揄yP"FRceRMR;T u-*}EplER~KrSs/O0% O{CNo\^+|JuO4gG|~4σy3h׿4uu6ׇP̮xl_Oz{u[҄g]S?w{T,!xfJCK;#lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0033-Strings1.xiz000066400000000000000000000042431247673406200234630ustar00rootroot00000000000000\[s8~򞂁Ia2e6,v_4-[Y_W!H6&zjjKO>=/GOm9k#☮e;qÇ?wWNײ?Ň3(w\j'<7a0o⣡';Gw8Wz8N{uG^]_9 >9¦i-?`2EzQa{CtĦtq_](T{Zp"׻U$i8.U49lw &Qo<t\.f oeؿm.$,SH'y6v"&X&Qey[X,sj(4MVKKЖY~z.)eF@֫~,tt[ IA*"֒DQs,J^3Q*jV߭YcLKl(XWQw?A daddK}Ԁ<%M)L`YJ3젿mb%9 1,VeԱQ<_\K-%u3{ʨ%#ʢD` /F֌hKY% &:\X(ڊC6j>wGA2)H5HCxo#%3}Pu}wFʪYȔB&Z0HDaDr`XU#rϽ33e5S;AD1iyRVmw*G͐F -m/TxȁzlՄLHLQfò@548*yjp g0ظ {94΁ŋKfXXRd_N__Ok-~hBNZƯ5Q;~Rlyv5~[07sԇj۝߱u`k(Ϳ[{_"w_[ ikh6o+&kcmM褤Sί7GۛƯ j N횴Zth#__ 65~ {[Ư7uk*^xSk~z'uIٮm>ۀ; }AT}@_@h,wL8VV.pX~4l ~~c`J@X4=Մ۾=-``ZWK><M*DFvbli.x7e즹 ;2˦4oΊ4 bcPNs{$Nsgo]coͅ↽_Iko_" ^kz1{л]NvDH~U* t^Uw1bՇEٴm¥Uߵv[lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0034-Dark Strings.xiz000066400000000000000000000036711247673406200242510ustar00rootroot00000000000000\[S8~`N ag6IlE#lrJJ;@?Gҹ;~(jX;O|o}\w >ta />˗r}>Dk]0r ~Mmpӛ=++`O >s=@. luME#?+GqţuD4#{‰D% cb E&kġFk/c9-5UT4Mgk{4#CLَZqq Ç)|0ϛ, x }')#A)^G錳)i?tluH"`-%^py gfA%)A-Xb0IĜlN\zKpq]9Vc{[,k@g; @}0y=nV4<#R*v&enq-I~=Q0HVҹ0ڣ/N'd"*huR6(HLR:!Z"1%-`aDD'sBIpYn޺w'ݎ\f{>wY|{*Vu]ڔmj_Bcuvֲ"n9 rՂy4ś_-8Tst Ah foG>I$,p잚 @sE: `! ʡ:M_N]ˁg;jofUݗ~%ɯ,X&mN~KF;e7 i>^Ô쮀F|EL@80FAh.B}hm{@k3T/C<_<ܮ0K״(C4  ͩ#E-WJlQKsk22`.ef &֬=zq[ C}r\/=DQ!vMD-S ?T 6JvT(3gcVn=wʬF-{.-ix%@426%޶JE ,[~Pz0JT4߰cZbLdEP r.R˕}`ŎbBKS̓z",%3$a>Т=?"o?o+ #-ʣ-98( ^ g]=0VYdK .aZ2Ќl7}Jo/%y*\m4ʸyHD/J"R);Up[q9GVBÏ87fC|=O2{ @y|HiwO$Nk"EO-7mΘ9Y{oNfXS׽QRwe2k^^6U'5zUakzUR^-^3U@(|m)>|__v'/vkDTPkKF5~l)g[φNK_[Y{\wþU> E~kk_9NoƯywC{5N?3nuI2ks*{km]KX=dXRNE.R^udY?fvu0uRLqcYM'w,&jb>՟HERV#1.rG:}fɯ$w%|:|y4ىOs^r?e@~l5V jz5 ITM٫i&?V?*a:1^mezih^Z3|'pPE=نr>044b'OzW?M4)nLQ5-u?wO^ 2Llmms-1.1.3/data/presets/ZynAddSubFX/Strings/0035-Octave Pad.xiz000066400000000000000000000043511247673406200236610ustar00rootroot00000000000000]S8~N'3@'4spI\E#lMPߟۑ`JAO-JvWoWϏ B*֧ZxYv?jW>q9~3Y9rpNᥬ% zɕ^G6>~pwx׋ 0`4p|q%9t/Í:$}^UϯTlUlgwC7q7'Igi?K"z) wYmG7BnD!Z^%V&m͈=X% "jIN 7q=MTt|{NSc蔩-Q9ڍP96K\9ݷeP`6+Sqx;lA@W5?Ɉ.8@4y -EZ>Q@(6Ƚ裥a|^'(co re p-(N StL{)S&%)t[@B&R^FBDn¡l裡0\ .]|G4n\ҦT\coDQZY/wcZeRB"9q~f N-0&E9I+}(c iM.MS7ʙj-1`۸N‘?R(,0qZw %VO-J LQ჊(fn^E.u -P(J[uXVlՒ}鎯GE\}XivWgCH լb?'kVY:lV Mօ'(X$=\J2ZwJqG(D_n (L}qQZL[|Ĕ6Q)3KI[r}K5w[+W`{nWXh*m423k>}oUJ ~Rw_vqZl?l&_}&RzM&ӗ&I۫ OJ>]G6WuWSV n,;fϊ=]Olc<@Ul g>yVZh]-xd}Wp#hez<-Bbo0E:cL $nfaVgVH'jtQVnK bIVg B-n+DQ=`z`IMC(7H,N bRi~T2E|Z:_YBi60C75C2 E/gpP |,dʫ, %`b:FG"j怚!!X jPReΧ2 _͎ l1 C0  7//ҩ ``Q^eĒ7L(BޏQA?C ))sN˰z\Sv .Q;3ӿʲC[EH{vzzuhB/?_.4,t}8.)ODM]~л~Cz֫eɿm?{]7 mlmms-1.1.3/data/presets/ZynAddSubFX/Strings/0036-Fast Attack.xiz000066400000000000000000000043221247673406200240370ustar00rootroot00000000000000\s8_=c&iK`r@:{(nAldl#i%CB.M^~b~HEX)j{K.JwiӇ] /'_o'iqƫߧQty>ZO\?aptә'/Esi8C8l*RsH`<ӛL'ݛ׹(U"{LsL$E,Vjչ}'k `{uP ֚St/f,(k+4:ȁOWRtnnL|̩ДRfm[tG2l7\#@lB^=CL_>L!d+̪$Wgڜ2,{UvG]:ނ @Z|^oN}BvB#Zzn  .oh`Eile&m Ss2w)aΔ,y7ue+eoPI&_תtZ׽akdFݮµ05G>fo0L~3Q7Uϧlܨŋ W:ќ@aF2y-\4Aۣ!+n)"!ި]wp5 e8$\Qn- iƯeaJSxia=~Ns~ xV÷Uֹ_Y[uK9HUAʸ5 +\Hgd/J!yPڠBIA` u>g"HXޮ0Koj?p[v6 $LcUAUeTӂb4ЎfEi_8#7q1yuAgp`4b$qȗawPODr> <#l@B1^tjd4,-BJܭCӘ~ā\اMz8_KG6\|<4elʌ%(lA$j%`}&J'@a 6Iv\&̙L3`\eAgT+~l`bQZS ,@vA `Y,l7ȟiEVl+[3sH mr8R-򩭧3wIsL ^.3tZ$UR[U֌lU (isl~!<#fUo9eӭqg"@.3]kc*+US|1\),.͓= |o*HuЫYqJW mSZU~J7Qi˜=V/T y_7?+)4GqIarhgD h{W_a4[K*Ͼ*L26Q& ynV ?m֔ZT&L5Mȿ ~d+j& `M@Zs hJ@҆h6* pz4Z7WHV*-\YNh_*|Wj&j_Un*6_ճKV_ϚVx\`/*UHkE;Sko|?W( *6e`7 @XM ò`l@<`t`g} Kv-.&VJkD}84>s8ƹHt}Y2618p8ƙ50 Gc}<7df},3훚L3L@ $%0Ǒjły}'K `{y $E/mf3*O˘ ;WWh?Cq-Yrtnn{+_>3[q'RfmkG2/Z"P%~V(${tMa-h'?p2#8ẓ=Ӳ 2 g+|;6;9z*=^:,(-xdIIj5OO Ss#>0-ZLE(V= \se֋狙E:;\d1'dV_F s4E,(BBݡםݿ.bʍm)qieaC޳PB@k$|/! (pEb {H *IVAPXRx8H{ en#"tB 88"~RtXƂFN!Δ0FQ3AD-f}RgGd%ӆz6D5 ZڀzFif 9sAGHLZC{4ws %2]['ԥ5Rŭ$)NaO!?t<H&MT+&sJĘ K MR RcSCͥk0]K':r4anRUR|IY'a7sq5rSzERQʴl8JُRRA!? d8H1Bֿ j*EÏ[ty,ce&%I,6[M`)iRbɯSR}5NjBz=7^sDGn n׾'?S_DR{qd"hMq?[ĕ5%,Qm~iz'؊yRlmms-1.1.3/data/presets/ZynAddSubFX/Strings/0041-Saw 1.xiz000066400000000000000000000034401247673406200226210ustar00rootroot00000000000000Zs8~_=%& $̔r@:{(X# FJ2$&O j%~iOO葄ЫvD_vF;5$yu_ }>Lk?h  mg: ٯC,(UӋ4^$". {JZ塿w&6;O2e?!s=V({1bGhEB(и|TDf33i&`*I3K+mtET#]7c9o5S]W4N[{8͝-3K=QGe={Ep/vmz~jHV+ fAt|T'?pH 9O#kF}{W@ a)p Sc'@*y}'k`MhG(Qu1Lzhu8!?$v:ۻg`"k; e)eh 4#Yz$J^4mV uy09=aU \UpM21 [p b>%Qa}ekᆵ_ѝBv=hxi\8(odaq2 B($K#/ ^%0B\z3v,mOw+8f_OjuZ7QJ2_!ٸhX`/iüh]z9 &]sgjʼn.CEN0a^Kl h̸G_p hb?aj$N,%9# fZ6vTH(t ^~΢a߂K~4<VJѯđ> 4wfmF?a Sjv@#A!M(d\(%hhX\A20R(\1"7X0K'4UڋR*e6LLّլֆ9;Y-gd -H3d4 <  Ie4ڕ˥'~@ĭ$ (K r<Df.]8bLZBޒS 2 G oVcSCek4n=jx^aI6mWOTb㒰%MĒnXVLiҎbT2QٰaNNaMc\deʂ% X$C/J.W}ң`\Q-"&T" X6ak` VVcM|*Ax(Sm5Zx3MC),yaG(=U1\xfTEQ]ʉjp׌ld}oGA7mo@ͽB_qgrw#Rd>DPh< rElϒ/J އ\ܞXO:f(y "萴LZRl>=TSfL0ɹTuњͥ`H;Rcq7T9)CT *Ci9%w.%Qw.%w.Um9K_KjBNOO`S|} !t/!LMTF=kF75us=O+^;XR,~jCaKsdUWMsXV\4Ws5U^MsBU|j}W  z0dW3Hd75WiU/pt^ݪՈ+;OO⢷zKܠm/q귲Dմ/ /lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0042-Saw 2.xiz000066400000000000000000000034131247673406200226230ustar00rootroot00000000000000Z[S6~WмBvf MN/a+Xr}aɿ݉l}trtng~ (N/Χ>E;Z<#`FoQ`rѰ;&u,hsk˕?izc g" pR@/@.TdnZ+s!%(,ȬMf(4˅WL4ʽFZ\ޱFZ:@6fh`F'YFWYDIQl@MnX-`?È:Qղmg"[,+l+HPbNT/J!N<)+G"qŅ*Z~TwJ`(^;'*DbJ Q&p=TQ-BMq=E N 3>ҀEwՓ(ȫK؝J`ߌè}tN{oԧ>R~&^DTmY6ݭvS&IK)dYNoX6ÆJ\o;V,IdCi|4h= J촠B>1 l0QZ5@i 7>zo(Mõ' U47~4 U7ַV~N,iLXj}f99>::TSNY>ƺG~mZ~-JVO^էXOvDA~Q*%Y 1\'\'i4Izs=uRN"4ӫ0%Shy2Λ9 yy%ҋޔCq/Ӆ]nk%k6quVu׮jxS7އV/lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0043-Saw 3.xiz000066400000000000000000000034451247673406200226320ustar00rootroot00000000000000Z[s8~I0Â2@Hg/^_+㋤#\v<%Kc]~|t'$^5 g;t}ո[O{޽m4.ܚ'SGûK;uW/`R|š cLdz`9M/'q;;mPmVh2ڦ`a|pc."q#rAl) A^L͉7D> C(]Bjp2DV+b o8׼$A4P3 9Tcc~TtSUdXn23Î,.De3]Oqm幉B+$F'xk,L1F#2]~RbJ> ^\;nTޖU7|L)z;zXI f/BѦT)YH,.I[JVncSs) Cϕ+֜~6g겫|I2OP IvhA7akCXFreP Ϭ,$,~9ru$>=ƜOېwX)wQX׹5._2c/~s$Qyaf"oD(n]yH5ŮuX"'g(ߟMjǸш᎘|#CHxb<73/e0&QLw>AH 4Zm~)TK't).vD!-?-t`K LJ>;Wr4Ё) *T%>\,aGj d7J0Y{AyB4TT1x1QQpJ(ַDfqL/^ Ik/ ly ZXB6Y_M"296Q#631) ҰWX&+YTYYkn.fti `K$l24kw͕?Xģ$( &yZ |a$+^!x1ae0ZBCΖuJGC~PA\kriʚ-k՘hd`U,JTɐTLʦ8Ka])cH^әOc;+`=eŠʄ 7X((T+>uʆ0sjCq!@ yCMb 9FN!ŠZ:Gbo?ǩ~_A{ UEgGZ("ӢC`"gjR%Eit)}цxR+h4̦a2חWqʧ`E{i#a `+b":G, ƸYّ%%dSVKR>#I}~+'ADYsn 6 `4E&.O2Kc(K.jl@_c)mA)s7JUÝ:kJ) KIRʌ K0'/B,vaT>P9o)snԭ|e?-D_Gܠɧ*={;xw #Gv>VvU)FuL4uKsɫbu\:nYOr';ד\Iz&]I8|ib^šzh\r;Mhe8M0Q@D[ #u|byS g l=%-+C7_Pgo٢ʙebt|tf89( |Jͣ ōekᖵуCwb? ( 4>n"andԅefk@C\%1w|%`%p.zp(8"鶺[˱Ptk|Ȗ˂k+V?/I,&J.N `jGq!@@q?[ #+ašҢo~F* -ګ6/q,f^Z8d࢘3jI]eѥUVKmeߏ^/_/b16 }),2NډTMt2M) L HPwX_ +zd;()FNI_bև|@O24ͼB=;)f205m.{YbB$9*.Z3):0)swIUcIGIi@$sR *E:V[eTkE_K'bW>}W>=f7w#\6NoIn=םÿ]|; ZG' ex#7&Ï[\hł8N *IȸK4Y:&~lǮZ1"nFgݍ=gydK<Ѽ ֘'7 @ͫN' a|YGyDQ#A ܇XDf47 Ͻl% WRn}o.ЏR4z}'`{}"""E,8 "]vȄ#3EXafܷ"?u`Mנ؎QVϾf@ahy} SQkj&޸o1`՘S)yȗɨo.+e #(:r#c䙡 r~j@ ^&aBJsb 9U7}Vt}l@o5$~ٰb1=!Dv\*X1'HPJA,\ӠvXj2N0Z&n17Pg q !q8۶z-SH'"e *EFKo!!F*ʢFb].^3E>L .J{ ad(d<'=beM@4ދ{[d/ʑqgK,O` z@+TT /m.JU:!Tj aJiK)U/ʥgO7g%\s~3gRyCqiH;wЏCLnZ=1,_{\ɻ:=~W>}W>֞Wx=+5֯ ;zͭ*>uO2up'buB:aYOsN8\'iHz蓮_I}Aeb_Z~h>5hp9Vz`v4F.R]\vܼ5=ɓ.Ɵ{ۨY6q4_(-0lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0046-Echoed Saw.xiz000066400000000000000000000036521247673406200236620ustar00rootroot00000000000000[r8}Wg!7LR@ξ-g__$ds)ݒO'wX t5ZЇlpx|upp?zg6ОmOCG>0MġQ 2y<¡c+kWMf8'p*"sLk%r=j,X!2ۆc_6d#J@y7Y 7T s(N6{}0jpF)& *[`Mf(%Z`W{w{w3_[*O|L)C[!pk,' P4F}~L%b#!Zz9aZ"[:*\G ڞKI}qa\gf|g]h}B$f^_"0#BN|+XFY r(a{3,T,:zJ"-/Hv8s_OjNt-mlÛ8u@pWX!X$+ r!)FAj!MЋ]DDg !f|~6Y@ˣ*1G|(@Hb017Ge&QLftaXB fZv6 ꜕G Z0>׮y*Bݣ@WN?@(ԇqnj}P"yCS!dߎ( G ee .Vs s!A8y׉]^>T#[`+)[a.jE{We=J$vhώ=5ٓ}ahq,;sKLgbNǣި9\bND/a߬} %\P\z@Bbji$OB$P.LdŝS!fcKTYcr2SE*<8T-F. ix#m iՄ hI_ )I%8@F)O’mXae:T*QZyjBI";f. VU#^.lPZr9(F @ePR @v= [Y6bqT<!Hε=&= ){$BD ΂ALDE 'V6#"WzREiv)z ;]yQ:x4'bd-ۢ[jE[{[=h]nZmW:'dl6(t>hݴT} jUn ynϽ*vE*%(Ȼk0J 'AD0޲?&$Y֖1r'Ͳ? HhGS>09Z5>8}MaMȤh?Ht|o$J%wdTkt_# UT*DriHEgnyA%y8z9"mo )7=},ׁSŜ@:gdYz@ITr,o=/UBx<4.g" { ϒ֙eJ$*m}%R@#YYHsNn%7e@r_5Ёղ `h&ͮ&뎺 &GGaM?\fl;i4-Eq V(Nijt2f3(oh;^D2YgnjE~ a1]Hn5ݴ'[0aސa[fl\~ fN`RŒ.HҸ,{2(zF> I%}Ihr20%d)62dlޠK{Rt­kf_.a.8hmAGk(H% rplp@`y0͊/U :ۻ48Ȓؖcz1fhA$*enjU`BxNFhhuR:Bd間jx2.` 8$1Fi Vr]a'fx >%9q/7XeMs4K)T|C Zck3M%( Z"Jdl`aĶĤ3'+ .en޺Vͧ#.`E9v\Mo&MsS%9o 'QLϳ*Vi_u:6=!Iv(JU} ,q*q11$jhF1LWlG06JI!lyZ Vm7QZoHmh&gN fQJkfCE&iIab5^ˌve(opпx_i=QSo[L yW,99>,veLq'bPٯ6e+d{(|Svҗ|mlȧufQA')%oajrTjM 0)K5?2/VIQvsh I[%Bym *jVRʮJkRJ|~h)UJ)3OZJu:fRj*Zv!v,?_]r3~7^ӞmO_'6|;q7gZkC'Gb#>Y!^9hQch|כFCk}yc]rYkQu{JZ妿&&{wOe?#ױAhorߝ9!q$>rhKhX*X "ZJ%tG/@ojım'[yETuHd:~32 v'jWqQO^@õ $ np$qOk7~b7 [d4xdh05v$PB(~\fvL@j P-@t 9PiШ:4cA&ٻAoJnX{,ԻLn s-Xr:S".h7,< ׈M=% .#jsOʉXj'Q=UԆٞp}ף|Lmϥ$ГEKqbXevtoq; ?+89 'Qb2pfXF73(3Ϸ| 8$¡L=sP%$!h譛ceNؚã)=^:5k]G}џڍnsy9Α0'!ZE(AyHS/rᄑJ !bx|6YG.ѐᔈ|'GH?6x0_ІMˆE a&ecCMRpl|a@|;~᬴>T 5 j,K}8vZ3A)?w6T@H-g;,7=J!yr)pء(qɗ!O¶EIDiĦlq_R^(*Vm\ az/#-hO}צޥZ)PKT% 9 {kn3 %62\w֥YEZڭF%9D^`9(mR%s"Ĕl 9 V6z84KK([u =Tzp+-"OЌwcb+퐟b2:aE-.-E nb2RT֬_fެ E\,,X2xEP0p(J.W4*F0SELdYF4YyBlcȹ4!۟scx'SіݏΘgw-+惩aY]7 re#ج\FП1=XC#w` V* e`O4U1J{ `a:/U5;k8ض4 FkkѦ|M kvlzv*۟~=WdOÿnݜI-z@2z ܱӟ7q{~/CTM_xR g.<lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0050-Synth Violin 1.xiz000066400000000000000000000062071247673406200244210ustar00rootroot00000000000000]]sH}ϯ=#LimƵ䵝f_(,!ZE>{ki2O}܏\zul>OOo/\߿|o糳7xnp ;|>Ji' {>Ev0Of~vmޭNz|9m^;Oo>YYȋNziKڶп&v|=ŝ%_]< CGFQ7YZB ^XrsoV@t,Iu2RNEs{%s'ju,>Y LY(.Z/wQ'\z'ƧVDms2(l"Ge4 -_HJ YbFŞ|ڎةtx*p$W"8׻L](2Q0 '[XqBryYɎϭ?JږAa_\]=ת곿u˔|c{PТo(S~vV _,{oYf͟,Y={ bnn\Rd]󬧾jf!L'{=wnmmo='ǭ'%dmr5 :Ndqgk㻑WD$z6mDyid6ϔ; k;V>e1bqҽ,s\$ڜcl-r6[y׮_͞&cKQƿr۪[=%u{b'o}s42Ueu$YmhmkSj[;[}f冻*\h; Z[8+Hly }/eQ>1Tk\Nu2= AN2v1s4T\b+~EKMjL:*q+,D DOs@@|[Uۇʕ>z11T#ch!Jh"of"T)4J6&:VL$t:Ư,)s;tb̸j .e0Rcm <#>EZ֞|E0Dom*9ƮicS0l&#"Xkr뚬kLCI(XjNfb4wT#2$^ ?J#9U>lPr2r-$j+F |掺2{m!.dA `+mB$PW 54ȴ- h^}h>tP:ՇJYy:u 'EbX(m@)$Q_ΈUqNVIVk.zqԧW=b0$sU/XT&^%@?_+^I@_9njxE+EbX+EbX+EbX+Eb6'%/[ۀWwo^uۀWSԟ/e]+E"XI˰W>aaAu5b +3Vc$9ƬE"q]?e[3EW x}+Eq;}$X)^ ~a~~p`?8@A${ ^1,!A9)saXmx!0]^%:}b:DW ;=^Q,UaLFW጖W# x鱀W kS_}MDK2E8c26̈́[F+E,256rm@0 3Xf908080R!Q0b7a lsp0(/W z2+.Ef,~P f񄁒,`4kQ(/)F,뙴E(aS01R022+l!A$T( c.V,r E^ F6`%)yI F^`%:9W1z$=ur^?җp%aW(<[oØCi= M^sKd=s70[ϖȀz1`ž0Ga786P^؇JspkC>#}k=v#l0 e0L._*OJ80`068xI `0 F|n0>bl>Eg cKonpa@}v52aܙ0QN^E9}npmD9}B{a$fQOi\!#F>r]vۄٕix-$م\H=){d^3S`MtY6ص3`輛3鳃XٹisI6ggwQN_K>@0*m%/6h`XD/E|iP:bؘQ"aщ7â"EgE  S,3n$>6D +o^t xm+tP)` 阏WQ2ReZNҥ"_bRBnV.c 4YY}' QH:U+*qWwEeq㇗eӕW`#. Q@mMBaVB-9͆Yl+v+йZB2G0PkbY2bC0bC0R Bᶒk^J*k#r>T^ /ڋ?^8ᒠ@Kexξb~d SzAW'wRlk-m!JU&셽 ]aF ˌ*rS+֯R-Q8a8fmc|{=^ES]uRUZiwjϊ\Qu}xM4VjviRQIRRn^'sλTʕ2Z+UD$ƹ_Į8IB}nr*&u5 .Ee4Wk 8-U4uKTFRӝS=tCztt W.ͪX+ itUPEcu\P︞q=Cz>| Տ9MPF9M3}χSwpb~?=<6èkx|brvEYn%nTؿWժh&CR:!޹UX~PK/+Oclmms-1.1.3/data/presets/ZynAddSubFX/Strings/0051-Synth Violin 2 Fat.xiz000066400000000000000000000070001247673406200251060ustar00rootroot00000000000000]]sH}ϯCU)5vR}Q ۚ"~P I-9ݪ} ~?oaeix,֗޽o7nps7v?~V+ 9xF3z/ܸEK^\^/+w<$pհy܉~|} N8>?wMXY1Fɴ3|yh/Bl'7i ZA h5XZoՑGŖVGWj̞0/xZN~aZN]ųni3Omgw `./uY%dufRj/ ^U'Y}IhŮ߶agY{ ύObt/\ʀuy+fq^omIؑO9u`o۵Zms)ӿ ֍E9bdױz.M֋Щqn.W ?hi 5l$W1o-\42!8 XrM,U\؈Rqq;){&=FBwyPfuY> M-;[=s4\n{x䋍s}]%aAQo *Vjw6p/б!==W8KO]D%CҢTSkmN鐥Mڛf>)9c[_FϾ-¾˥?jRUVZxzVs0G̻z0N@>;L#/*_jB8`. FX9^n0Ð`/Jޗ1ԅ:ԋEm ڦQ DSeE{fQv} (`Dçf "ጐLɌ-^F#,T `(f]TXV=.l"k\ɜW18.ѳ裔iw\u_R\y#pe\۷To&W*4"E pq-t"~Rc$]ظ( ltFl\+C-bT!!!r+ \hY t u euo(=#ܖ$S5 >$0ʞ2#Ҭ> Ę$4Ιwr`2<#a>K+6Xfeənw:GC9wj@laplLW(bWdM9Tj@HeWݾ_rwGW]uŎ:WNìgt,$v4_02+&pE09bGa̱`RB"Efdn`{pŰ1*ĕ0f;bW~%4S$P$z!j|f` RoM.K^vGfV ټ:Zs#h;bШvg(f>x[3'o̎q{an XO0B0fb=dlt4n IiELࣗ~Œ{! DK#R0Kޔ1mi# #:Pɥkf,IYޯqhA=1 %{s5"՛d U^tdzQ z ֳ [/, FX%׵Gg薗`l* @~ta D BFi#Ҟ~dٴms s#V"i⍘!g%*8{qXۈ RraD\0m#_+Y1ɘ<:XMRho3NYD>'bQGK)JX|va!6_zftT mN|<O_!N񧖄3` C9}D(x}܇c1#/s,Ѩ dC>M0ؠe?ȹÿGclS':TY&b ;ED?om3F4?mGM6"7!^BĆ?{8~U1F0HY6b ^ D*0zYjLۈg} ̪OU+mqn6{@/ T(N2{F\aBoO1O}& 1&.) 9e#v_ V!v=O]/b_=ŗcd͈g~lۈ-> bi#v [p:mDZPaDZPaւ #Z #j_ mDS8E}vb#j U%˳If<[&OLՕ aRT?c'f~^l}4y\VNX tfuT*I/_?w/I6~x]QP\Z/뻳ϥ|hWl>KR),)4hUjGܵTgYn*6 wQaI1% Lk9*Rm%Rݼ^de&^cQnO4!-}tWlUqЇdڋ^eA)z[@m ҮXiI7ϩ]>h%U:O5Q7."xP^ijRN lwV/7`;KǼ ]m=r[_GDB;wW/ Ln#WJU)Z#[?ƷW˳jm|ю ʯQ3ӻNKBFnd ҂z lN18mPB\)q`9+gJ3az,v8^^}DUC]nZ!eJٙ02+*jӴEUutffIgLaY{tv:L:;F5nYw=j%޼u\Tĸ j=7W@YM`٬&ms87 ԛ Q3{n~ZwC9\!Z&$[|3+iR:^:tVŒT򞴓j +?Wsi'e0.3WLcKlbFȪ<&ٲ{ubZj)ՉihQ,{nV'D=b/]N{LA=TDݺ#1)+{6#ش[>_o5Dv!w !;+h [7ŐOM5EnI]iWοyLglmms-1.1.3/data/presets/ZynAddSubFX/Strings/0065-Simple Strings.xiz000066400000000000000000000034411247673406200246200ustar00rootroot00000000000000[YsH~ϯ`asUN *X@ ic}FĵI'ۣVO_uk|ݞ= t<|0_4mHQ v3$č\ :|E;RrύVWa,tT|eF`yd/@-uw4=-Mmهh+:rZ=g9dCҸPdE0dSje?!#V\$ETTݖ \; =0|~c.̲y7{0՘]ig{Ny-QH YFa3>NV^`!h`Nj/[#z,P\ȳR56+WdבTviK@ϞU?^Մ؛ZŻ,sv`~`Rgb}d;P?YBK us@ᝣvMfQŅ/C"]\{((F[XLs>- C"9M9B9~.C6"f3rX B$B94ǢS2~tBr`LFlD!엟WHZϲC6)J~X&ndxrG̗{aRop Z{Ay)YK';FZ2Úk-l@kqDbqtM0MuQk PԺG5Ԃ44i8f> }2}\̦P9`xOЬ/Wa +yBCli r?W %Y!pqJDgrgVn=ZO; leV=Vb8t?^h'JD*]tt~m [fe kb:T*Q[ulۥ #٣HXHX7@$AO\9ӠF)MD[S >?hjMeb>C=k"dS!-ʫD 7Ί8 d 6C"gcEJ RvCA*^q`~?N?=9_Չ6sy$O3{'$'iROX?-O5WҐ˧d)qŃ p{S>Po4i:;I*뉘^?IO(-Gg|PY} u;9ݡ{30>>UgpOUxܤ?W|<᫂8OU)~Ǿ'n1l*_=-݋K~c\_eWSo:R>UQWGq}wPӁmիW#-܇cb^'NxiU\'I$ zs=uB^$'f<_*evih]oH/Ks<6x,Ϟ)02kN{t!Wb?IT,*ϭ#?^F1lmms-1.1.3/data/presets/ZynAddSubFX/Strings/0066-Dual Strings.xiz000066400000000000000000000046441247673406200242630ustar00rootroot00000000000000\s6~_*lYITsJr LBTÉR enO.]n#s?޵[5=v>VWo?y|t;iw,k_֢!wG[Ҷxbɓ7r#&m͐>mij><-о]{7ܐ(`|:<ݳtGmrBnGd5Y,u\Ӗ~%[۲ < 9WeMg;$vȶ1nіaE`@#kfJ8}2? A8e%f<]|\yOt\-n&7 O3[2Nkyx$ycoMcKc";h$e#\t?x(Ylխg9֪%PujrӲw0;:̩:HQ(H!9l7KF".s-zsh.F G9$O/h=*` &7G7ej~XY wu33>ZL; KYE!`9>NB[ZDYh ]n^tP빶I|ZeA@|/ɣ3<6N } A sγ㵚Zt,DAHm7B?s"Nv">s dBn!:`S`p)n<%B|KBi}Έe^Z9 '.XO?ayu+',>`s?$l'#.Lrh9vi8$$SG9tOJݗO$A%$s-=Pbd6Ta,Fp1D0DW'ے]:vgCYe+M:Ё^?o rh,9 cpD!7"E~j^Á(n!1!rѫ7mҐ=x~I4-ʶabO" sźIS@HɃ QuF<{ -L'F=2271AJ͑HIhԠ,l9䏢6'ԃx[%,\ kHŁ-= VTbD uf;prGN;`|,f7"xzl5YwK*p k8Ll[)UYL ,pJC(?3 TY;@Oj8oCc"dzJW,H 'NG>ZOG0WReN:P'1;I?OxCs1*U|2y_X@k 6Zp.zG&kD JEw N1(%ɊC፦: 2ZgqH؅ gI Xj}lcnAR' tj-#\ep.o $Z\ ""}1* 2xn;3R!0(bF X+T0s7̓m';,j|;CnN32&=0\;"ΉcفBt7;Gr^Er~ ~+i9Rhop`~ O'bڠ+{W~sIul3saJTO7zǡ__!yo?wZӚּZ4Y{ђ3=L* S>ּ@JS.iD3,Cye\FNhCDbӄr4'G s : NVI%DD,+ 0EɟQ]U((lsCzPjo΁hʃJ\&@& 2ISKDH/ ߫˷i.r"śd&U7̄D42NrLȯw#(Ѓx7d?JPX/\/TɋHWO>sI; ܁|^k.o + &ua:~Y[|uLS\ h? 4+7Iєr\OQX915Mr!M|*pUEYTU8gVKw:r$|'ioEiW5u |&~ctO=յ2IT2S]+UOuT=յ2WTjS=0zrjoZQ2*1wpKmY f2oy80R<28aJ~#I䥮G>-V<%dC"_n\N_\l+24AY,R݌W _"ޜ^ yC=ܱVF[CeID{-KgyEԭrU-4eJm.i=&0$oe}3;: u]_/wG@:RD|)Dn"n)۲,Bh{ <+ªח R3e}ٙevLJ6;@9nD UʢDgxKAD?ި`'Fee WLȣtBN(&Q@Q|Q!}>a]{5 j}Zj$rKЎ@`]/_`jԚg`|i8^c&NFڇJ^@Xe|gC(^@d%*3!PV㒻v67cE&PöbrYd.G7RG?,ป_GIE* 3ة@+ѬA8F-U5k?Yhq=W+ V }b$\RnfLMjd[m(*/<# v:QXXvamm)/eyWHm/LUB B!F F% 7E `Pn""o&" I]dK;[R1U#ПxtmNco+ׇUUw4Q'd<$J1á1b7L r&N-T3$ݞU T"J&yQͯ@2*'ͱn.Cap7BL`h|"L&sL5~{h#1⛥eZ)"/qd.3G`.V#0XNÁeX95dB#~QǗ.N,|{_1}c ;{T[>=Aj}F֞XÞ -*W~IUk=~6/ttp Tp_Nڐ{{IMUv 5|2$|s!z@Y,EmPE)dDO0n-ԽRa@0,Ϗ.Ik6RmFgHoddupg JP^yWWלY ZkT\%KiZk d^\oծcE>WE7cE~v_y|ܡo_"|tT]VTQG^՛;*OI^~ȗWNdw `fG* E:{%}K=uA4I\'TOsS=uO4IMܫj>AQ2*1wpKmY f2oy80R<28aJ~#I䥮G>-V<%dC"_n\N_\l+24AY,R݌W _"ޜ^ yC=ܱVF[CeID{-KgyEԭrU-4eJm.i=&0$oe}3;: u]_/wG@:RD|)Dn"n)۲,Bh{ <+ªח R3e}ٙevLJ6;@9nD UʢDgxKAD?ި`'Fee WLȣtBN(&Q@Q|Q!}>a]{5 j}Zj$rKЎ@`]/_`jԚg`|i8^c&NFڇJ^@Xe|gC(^@d%*3!PV㒻v67cE&PöbrYd.G7RG?,ป_GIE* 3ة@+ѬA8F-U5k?Yhq=W+ V }b$\RnfLMjd[m(*/<# v:QXXvamm)/eyWHm/LUB B!F F% 7E `Pn""o&" I]dK;[R1U#ПxtmNco+ׇUUw4Q'd<$J1á1b7L r&N-T3$ݞU T"J&yQͯ@2*'ͱn.Cap7BL`h|"L&sL5~{h#1⛥eZ)"/qd.3G`.V#0XNÁeX95dB#~QǗ.N,|{_1}c ;{T[>=Aj}F֞XÞ -*W~IUk=~6/ttp Tp_Nڐ{{IMUv 5|2$|s!z@Y,EmPE)dDO0n-ԽRa@0,Ϗ.Ik6RmFgHoddupg JP^yWWלY ZkT\%KiZk d^\oծcE>WE7cE~v_y|ܡo_"|tT]VTQG^՛;*OI^~ȗWNdw `fG* E:{%}K=uA4I\'TOsS=uO4IMܫj>AquhBLHtz}(#w˖m6rfoÏ6NƻsMϲAOo>|w1;_~ع#ZDwhH i[<yuxJffHlnh䴁dz9_>< ؾ];7\(`:<ݱuGh1&7z ;iCm02 ';dlOl7hܰbX `a3w^LXtԲ{l3.^μj2], u%tQ?bav?t03pG`Lj*%vq暀{w; mijf)xf<smԵ˂^Wǧ#vxgg5"ZHLDAHm7#B{"NV">s d7C :f pn̍%|ԅ \y~lX/5xeJZ9a!ٮe9;+L2Ifa|u`O-%:)M_VJsC@8@,"c0r%g )2=(.&{VmI.]htMh!ݬTlq6\1F7Ӛ| ,V!0X{c:R7[zx=Ev#!h qǐ^ߩlKbR wR З{A:&O/v%='lɍ1UXn9`:;G=tCBb?5HIN5jb6M5J<|\g/=_~K]Sp˾ L[8 o1զlϦ'T+.玼Jv[`|,vޞ"Jj2_wC+;> 8V*dq0#=EBbJC_Q&6Re|8YJY6_l_#*Q q2>r7ULP-8= h&l!G''S*>O-4ޯi.lbG*^mL k{%b.JLV!PnC$'lQLK73h~=ND2x8T&£͝cy#(<;^F'ɕ|(vN.+#I j,)Jo% ʝbMV`[< ";|eDש\,? HQA6vnCi{{"B{@G- =t ֩Q50Q5mdXd]}aHOAg k hO~Ojo.c/m>{u߾; "o!gOS fi{ ?9nq ?{΁fݡTA]mRe{⋞X kLBf> ϙd/0Wysŕ`]^Yl"'6Gr$R*[0 :;E@-RͲ|4HfRf$QGQKepQX9a%deoH*|YJY^ M푔k6=$X 3`/:Ҹ?ÂG[dMlmms-1.1.3/data/presets/ZynAddSubFX/Strings/0073-Morph Strings1.xiz000066400000000000000000000040641247673406200245360ustar00rootroot00000000000000\s8~_t_0Ӥ%0e.^49[NƲ%yeppZv?}o+ `8xѼ v.߼z|5{7=Ǚ_o)V|{6OQј/#ٴ19}r߸`<͆!]4zKǴQ/5-nM7g4U'47r#Å*,դ ~q9q9[EdBa&A-Vqbz(e! N㤎{ \;qP®m4A)ƒIDA^6"}+)ʦ1o^^M>.yWe `8IՖU \]|a3 xVy0dm2Rb*k+LFhko,d"_(^QQ $S:|8>k 5cor; d<5 iĈ Ī &^[4ab YwמR{VJOO6~2.;L1r܍Ca&Z6 Kp@yOgdI)0ӫ% WdEevM B.K c*Y(+j7UC B*} AB;F02WWeWHkHDTх #9|5w%8YaC$]rY%mEy[G%5wmad(%;p]/4V]ې+_̢q?z+ո>-ut(w9!k4ݰpe8ڵs!=YlpڻOAKMQ6Y+C"`@$@ec ,Α!XLKwO9YQ!5Eļv #UgkHK>Z-Teg%B2n˺3Os<΀o (Jd&D&BOPf fgK(6sH&-cÛX\CFS$9RYmB,c 91,E'&7X,H^:4rm)7cvs8"Х @;L PmsLUX/icu퀆P'$ K4PzuAk00%g/$S N/81a5NM0C V !K`00me*#EN|)gAsF撉 g =*%'B\_dG'*ꔇ*՟;5;7T5JIE;TYj}w"6Q,^r**RZ%=hmfGK';صϷuK'mQTH?dK][:ndw‚x^kn-)GAuKnwdnσ1vNI/f[;}8F.Z{j #uOg{6Yt9)=}4;EGjuO;N9 {:btQWdWҪvNvc%絋+| zé>=é>?Twڪ gUiTuipIZ& n W䎻BCC-cvqG,T V&.G+%U1UAq/e!15.@ø]23KXFdeycQaeS19ex!& =ߐ7kkmfnѰ r/0w{bRI 2\T@lmms-1.1.3/data/presets/ZynAddSubFX/Synth/000077500000000000000000000000001247673406200203035ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0001-Soft Synth 1.xiz000066400000000000000000000042011247673406200235340ustar00rootroot00000000000000\ms8_=%Lr@:Ql܂2~!MJSjc>+ϋyeEJ/WףZOF8 fM\^ةp^ptי{u/es㯝`BXCxҧ[Qٚθ;]wce~F ۲}"lHfGK!/\'o}锘P K$Z:$Pcˊ-rmƪkdpLgi$a.+$uܵp-E}(%A$jFIb[Փ(69kjȪ sq&Ja 25PQ?QBEn8N~Avnn`I_:0FbxmN,yr==` (EXQ6uU#OP)Fou6b!&Ѹ d>[p V|T23`+AD3-v(ӅLy.<}S Ψ;:k1ͣ&Τ:.^j&<vL%H<MRBEmR%X*ӥB2d):%Y~z.xdtsGJДݨ咂TTc0Ei'cA7t Duʸ|(!Q^~Y`"[z. Uw"ȟap^Jv9\%LPP)@h x`KZ*JaQ[V8ju4zI-)쩢£(R- li3-Ж(:Fm!'>uFwA:߬0FRl(^[KEZ[ ` M 超#)k97\K#.-\S >^c}D\ݞi1P RMT}Rv %u%3b1Zc_aeڗa YL UM9>Pz)m(6(Bw[-Zm ~FYmMY?#RS2iSIXYfڝƒH|]0PcޖE(SRNXG4JݐvJRUf5&,2H5wCXZ&$2aj$,༉w8Xqi \KIXA[ERlmKIX*aiüba?a'4܁}XZ+ 4al(HXzp%=ىT$ύ2y|RҍA^"y\d}?Ei.yU]y7ͻn[;L4_M3=ʹ xYh44^o7Dz~{ד"=db`n;&i#sO$Rlmms-1.1.3/data/presets/ZynAddSubFX/Synth/0002-Soft Synth 2.xiz000066400000000000000000000041111247673406200235360ustar00rootroot00000000000000\]S8}`NdBf6 hDJJlIWeOյttt$㣿{ QCy#tи^w޽;bt>r{M{;Y];2}>DLkC>(r`~M7]= qGO>4||{Ĭ=^c4y ($hD+ФUYDs2SpdySIȐإE C8vxMzCMU7M# ? 9L؎[q6 ބkk6S(W"gE2$uHr#D xGe+.?paK&`)2b4ؼA׌犐JwK}\3rs)&JUP"գY;葬N@Ą( cT- wq&_OF~XD$0ӻLo/ !X۝tBL)\&Y3/Y#6XBpEg E}(4r*xJӀd-+I ]7CnS> V:/Ұ覟vP<"r >0x^fuī8e`72̰5ri] qQDY2,=Jؐvd>("{ȕ5KtX =(ylּiu|xVYcGVVg$Iqan.TaReT)p%+[SV 2%K\{=e4aa%C^bϿA$+*ûtaAϺSM ?;! -ڙP BU(SOZ;oTz8;H췺V>Nd{K\|i+?4r /WlQpGf F4ڸt$43A^+b$! p5E\FUSxq6h/G1nFͽLKXgN8DOS<%_hf͌m rZ.&gЙ5< WU]77ȕ`pў`?9ƭ(d S+magj+nik0c_5JkNk{hllYڂs_7;b`e->!`k An'_[W+#` C5~k5+=Kr5g%~iu 1ks]KXߜxK5Tz lfXnKd3`_:Tz_5SW/``KռT}.P͋E(>s J+@Ej}͊XU<b;ـ-s(C~O\eiO\?M.!w 4iDi>fvaDс:<_:ϗ|x&d _Q//S~kx(/B:mw.R%hhDw,G : DTfzIfYY1-sYYV,=زfiIw[ejGKfq^uM7C-Ngp-y_T6?{nb`[ X~E7Rhۿ)Nlmms-1.1.3/data/presets/ZynAddSubFX/Synth/0004-Pulse Pad 1.xiz000066400000000000000000000036101247673406200233160ustar00rootroot00000000000000\[S8~WdNddf6 h_9H:KK[?ѱtngϞx"Ai;j6|ۡ|yppjl}۞m˃sx)w~6WA8-[~r0mm2`<φknb\4F fn̮Rb-y93'TYslKQX(2N׊d/Nx!Z94#4B6XN4`*I1(]t6EX#m;ؓX/5UR4Mg[s4˜~%lxyy!aNy+SG7/[1$Ւ6>^O+#k̓J6 f.Ų5̼m8E( MP abM>/Ԡbѡ YX3!6|!RuIB}FJX*/{w3_T+Ɲ|XbJY0[NBl(,cj-sѢȩX:Mc;,I[*V:ó6PSBQ1㥸t.ܰy33hS/'$ER qa2pkfX58El=/C zeVdG6[xw"mwK@w]}{*Vu_3_&<ߝ{ܜHT^`-kv>Tn !zt(l5 &.6h4b% hbL̿է2a(TC)ZC)OSc)kETKof8N>XDyka}X*B+@J̼=ZRZMKKռKu75XEzqx;⫱TW|zlXR/URwr?h-T]Ok[[1|qq&~P7¶y׺m4oӼKXjUyM.Ἓ]B}7h7ͽW̎Ml>?_륡zyh^"ߟ68+\0j|\ B|ֈÒц/dIzS\G۞:U&&)5@lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0005-Pulse Pad 2.xiz000066400000000000000000000036351247673406200233270ustar00rootroot00000000000000[Ys8~ϯ`yπ9Pd%@vE%l<2>$dsffx [m/}ٺص sڇfF\3-0^?^\v3?n4gbC|}r /eN:bɕ~U|y&F7vk8ThקDYOȱL Ka+vDV8ZYnCܰ|T DKbpO(@U?./$Bfbg-5Qݐ4Ӈ;}Hk/JfhpSϦ;Z@`Clϰ-KxIMK"o Q1\Z9 -nZgŪBi:*9\ ZkzK=^̅YVo'Ke0w֞hVk"b Bl NVm >Po&8`$mT=u3W,\f#+ rߔt ߯@HJϲԇn2)ׇ6ԯ] `8 IQuxE ]S!d=Q;ɣ.'=G c(xS}FFbSԸ]^ T)jz^j/=-X+=U`kCP#`ҙɸ?( /f i2蕻R,}x.v eO"/0,O%BE>}9ʊ0,RgBDx]@jsIe[aɻQ?В61UH R1/Wl,լh@LhD k=oX;ֆPu0=3K* @6H /%fNҀO*#8 MDŽJ$AHheMۘ*qyKC8k 9&vOrdKZ2DDDYhluhѸȆ-)$^kA[1V\LGz71ן/Z? eEY{>U'ѕ*לWj^ҠFشDqeŌ*rFWŁHEżk>QQ_^Z "I3N86!n*rP5Ոv}O>9Q πqV.zc:qI˱Hb( 4k \"SX2 -{GcW} ^kkb@8PE5ku~>W5~G^;GWi?j5;gwYG?}Wٗ 2yyFh3F7< -| v҇?;! a7aџyJ5e5UB*\MsPBU{3眞evi]jo3g pG E=_"$֪#} 1z)sO!?\zh|SE{l7*iц|\?(*s<lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0006-Pulse Pad 3.xiz000066400000000000000000000035701247673406200233270ustar00rootroot00000000000000ZYs6~ϯPȔ/i&NFJr &! p߅x裓fd\,.>,çG<(vk?voߟwoAw~],ޘ7ȶ&U<-@iW]\M~᰺>8r Dzq\&I'zogr#vUD(K,ՄL̳~ukyX$`GAʫ6_ٍ̫!'X H8Fq˯'\yr^s6xG>bc!?}@t9ICG r0U@t%^F4BIR@H|!)Лm%T0)'c N*Ҡd$U_KQxnykN/%/>0V@qrP&:*ǖj^>aD_t+ {O,'J0˖5Cfpq24'~®LZRuwR'WpȩU"Ap%z@he*ۢ \gcbg›, ^:۠p$tu/"SzBs7x{9Ԫ4mBT\{gϫ{GʹJM׽, aߧ%fO8:O;l:^h,i1_f I!!1JyQcBrıYy;Ŷjv2L RvG9.QG2MHc̒`j1[\LOěY/ myu3q`V>֦azaGha u J swI6Y>0 e1|;Ic5bC䪔```D(ddB+, *;`_Wtq(㶹cR, ~0Ax2㵳=Qʉb17sM7eI;}``{h~=N.g.dÄ[}?ԶSzFDW͝MU3Ev2)k!ן-$) g@_wPZ^Pf>B#R9` B0Wz6g:; N͑ںt{jiz[@o ?B~=~`,͛NՊ Wqo >V>?23‹E{Ne>o+d<Vǿ{d)[h=oaR>t @2r&*GhH|E#M3ε ĖnNO>Y$)D߅1umdy5qE } dE,ʑiqh+FqMy%QKp$jX̻z3a9(CI"-  {ՕP#lrHNS ?ⓒorYRWƋaa\&\6&[bL \ICkXd}^Rki@l Ĉřu"Ӥ*4ے,@qebu0}`/,yV|O Pn0"[ 4C? p&#P|dz2l}/RFtij$3[Ff/3mG}@b _υj7rC>I=͓׭^O?r# {l7|hP+n  upY3 ˬ,hP0Cv1jfd𥈁+jZOÅ$(C3~-:[.jKZ)[&Wϒe3+_@T$@f[ X<>tJ VZ 5 j!71sn7eևvOt}(=UHvf9iG3 ɀ]\ 5\PO0PQD.|^@7rρ։'Ob &>fW6򄝕b#7@vf|:O9 Ę(~xW>a6 :'|Cl5 ^p}bZ e^Sˑkt>?{Hvuຜ/q7u%?$Ei'[gEi¾eNT*Qٰiٰ\UX9`(Xb(XbwC@Г#K!ÒȔ ,5MD G6&n.W(,C%;<v(鋺gx%+kH\VƃL]VLW%(6+%ό ]^ v/m) m ' ~++'QWzz%c*2:9kCQL2.bfQRr։TJ+QrCGS½Jw*xW)*K )-(;z .ӚgR#n~-}uY=atȫ$V}1 QtGXĮCO\^9Jlj* ijo*$Q5ͽ7L?)wZho֛Yvy]"jg"+裑>XM:! 5RhG\ 71BmbDյa5+.lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0008-Analog Filter 2.xiz000066400000000000000000000037541247673406200241660ustar00rootroot00000000000000\[s8~ϯ`yOɍ$`fM b pkˬ-߯/\tӎښ#s^| 3b/7MI^4gNoqon]ם&O]Hѵ)w/aD6_A0!Kyc6čM8'p|z~"qȺ0zx1Xx8&Q LG똎h>G0ÙaEDhr躩ĞCA|).h:<ۣY 25LvL.~h <Ѿn4*qmN0Y?YP!u?l|XHŖ\F,#34Oy*LO`k*b&X(L,WVվT !F$7mv@>~\L@} Ba1K.p/Ч>VJUϷSk+.TzF~xd JU%BxABNɈ'B[U8U /f0 B9 ,0YJk>w[7yx~c~XU$Nb=\Ш P(d&<\({crJC|](Vw=Su9ƞ+*z[_Q`:B0?/&}uնP53!j9"`uY?!\sm CF f{H(L)_|XzEtBL(\IB ] &_ t$[wǺR a#, [U ^h)P34{9 @ΔQ./zɒ=eI|Y"DQ`*uQeLAKi.&3RX v@vR; Xř]C ડTfx5ҶP*G5*X*0N;jaR=zX*%YuJ#ީk,Z]T]!-KXJnr@YRZͦReXǺO~&p}2JFSBW]͚촯|%ɗE4-~+6~0y!@{[dG{Z`|]&8?gkUGzUk2)76w/k[;>Jvl?zm^i]zćqޥbz]8cWrd㼏9ySߏsg'ڏ՛qE?<쬷Bz;?)F^5wSc=ؽw}7S"kzl <ɖw櫽 %n}/qceh_8~Almms-1.1.3/data/presets/ZynAddSubFX/Synth/0033-Phased Pad 1.xiz000066400000000000000000000036631247673406200234440ustar00rootroot00000000000000\S8_&N$3N\ pI\E#lPߟHZN`?ȫj۵OO cq@}Ը^>|8|>gM;Y_}}8CC BƵ!F^ذuhjt߽y1#$!h+и|VDf3Ho82$aQԩy@]7Zx!b 릮h2]ۣ){>]ް?l`gsi3!xσqV |HFK+ț $Db7p&#@AH2d4ؼA匆SsSL 2~9XbJ$yGw:QZ~n#"B]NŜ-vpq&_G?X9`Iijp}{5]c`YbJ',Nj׈-=){m:slGC%Q`ו"kW7v"lYH1B}D1H`N{4ohbem|!. ɂ X£-qgFr8tݶ.GЖci> u{EXױizh[1xI\U!YcWǓv遙H\`-y/^b CN%y/ /^u%bCdˤW=PģN@c"VSwXP`-B.WTJjV0"BKN[1)a?_/Y&/;J_ +E;hY1K[VH6~fA_XQpGzj/$/TcũP "El#89ȃTbX|Qb{ Èt|n_:ӲZE M֭ @i$#=_"ԒZztfOZPz:Dy,4P eLYklOnFѹt`)_nvڹ BSXF<(O@C 0jd2N"`!ojf6cYB|^HBkrIκ-$5}PY5f-2Qm7>kAZ`9Y&`2@ٴ~:D;Cl\%,U%,~$(c`"d20 nYZ 4D%k͂̂ ゠DK֝@~c=rGIJk}Nrex^j4faD#*-ya$fh}e1Ȧ5$jöadf4<cAb̾͌d.a݂x+5| ,nm6'>hf2b>+7$M*aY n{6o}7Vԍ"Fs왗 b#ڧ9tN\+ .7UIҫ贺liMjBK஽8\}j1'G54>R 3q9z-E52ok k^{XSc ֐q _顟v{q_r [5|^[a5kn:5|,7ZcRpn _Xo[ןmjCkj~ܩk _77p+?)m _H~c 5|+(w^@~Ukv><.528fGsϚ}=f7wjZ3u~wiyg?Uܲl5Uܹ*^sBU5솝~`5׋Bz8^/G"-&qK|jJIB0f]B.,t,߶~+"ݜV~<=cFlmms-1.1.3/data/presets/ZynAddSubFX/Synth/0034-Phased Pad 2.xiz000066400000000000000000000036471247673406200234500ustar00rootroot00000000000000[[W6~_ לI9)$4 {}B˩/,I#ىۖ'Isi,>=# #/m~Ÿ8o{O>t5}[yu=~T mٓMExD#NL=[4Yp4OnxhH`gU$sa L)?6O7̞L3c>s=4do r߼x1#b!xx\#!l>g4¡a0BI hq꺙abh:أY K}F}qu2,E}Q ԑ"!Wtf^$ɯtB+ X% 1T$R-̾iyy{?Mdqzp MA?[#l[.)$meIDۿ"//ZB^gwW,JS28ȖkKdU1/*Ş4,9E eb3<" R>gQD Y"k>[[OyȘB$Kk[T$JzȀcodsIȖ ET/K3 Yv|8ľq k8T&DIU7#*$š1{jT0{~rj/@#$\V5BoZYM-h*K^ bPb2P؂}cŝodk?f<^c h}R#v {t>[MäKS;ZR s&GDqCr@l.t;Wij*Qދs>AQ9h=  %pQ!= 5PU u6 PdoV}ʽ4sw2Gwf&rw 4J\ꠇs)q'G$|!G*yvg[*oĈkh"ʒX ~&eT3&rlfI6$Yn,6(f{of>oRޮ +CzB^^p؃}9KgC)R҄_,WHeF{=8k=B'ѻ|]rogWo׽V뺣.ɧ#(?q'Oj6eoؓ(?z=B6ϖsXjt?yhA0 sBQ*dcNDzCƒF6S'rF&D,5f]ՅÛ`~ί?lLa+'8$5vG՘Ret' 2T(ՂdBM&$&Q\]s߅#YP% *g.<71)P|;#n6/Q^\|IIVQ􃬀LTw-`!.|Ɋ#ybF=;Co3$սor1gƵY^Fp[z(S/trsE48"h"8isgXlq07A?$ ]/_{W׽xN!F !-|h#9I #ьN|M+K#2%?dFXx,`Q–ĸ3%K"C.rEn@uɿ6CWM]|;+y4jTxx\VicWzS̝$ʏ0LA5"d7*d#rP PfԠYDJIYE>d$-1sGwjZP k>Դ`DH[XFkR͢ʶhFo`jFWԐ;l0HWsa/~Az2>HSL'<"A1B~8 #7QlB1c\țY˻Xh߮8Ԁ{5\F eɒ9+,@SVnP[FفJʊ9Vxm%o = ` 6 v$fU%,O@PxZ@gtk}l`b:pDkM}L R vFL!lÚmUH9[pߗQ-DS{o*J^.^D3t-P:)Kٝ:,kƪKvj/S^O^o0/˅PQԋ*[M^~O5 k Ej@Q+b_'^+M *\fqi͏ry?9µU(dp !Ak;z# _Ak]~%aMqh_ǯuU9ik=I-~eʯfeV~U=j2˔_;ۅgQ[>R`ů;vmȎ_Wh״v_k`l_Z*5*Rs׼ߧdmO臁K}ک]u@B粞 AiGK/]ݷ<7qf(IDkl}ü[>P(,JBz6`Ye He4'}U;K Vljg5.\qY@CW~(@BH"O@oզn -$}Jh~?(L'oŒli R@ 5U8DeKu,`j{.e/ʼnc5ǟ̛ɝbv> O$1* 'qane`62̱zo@YxEl!|0+20,Bϣl^ae7T!pA oϤjNuumhś$ u@p`Pv?r#QqaA"/(^-<)<x믜(Ul9Č~&+\6}hy4b4$it^ u$)хby8 |miP^;!e?.s#y6‡徒R+kJWH$eم4n6(ZvWBz!&}d,G/(.R}GZ+Zp[,W]Z`>,"`};̷]^TiJh:*NJQQԲ q"O9;oprad&K)1`@tFrqLd5[9i2ꛕ7̥{~~&coz;I?{l^}PT*[%p92lUV'gZZ{+Abq[|.\%sIIrw?u Rܼ=o }֧̙^o8$R9Eok.D¶TJyäRtHr}tRzS)D}~U.e]L0(02(9l-ZlQ(ǑM%`_3?^cȦ #:)^sv}$S߁L1L/-ivgKΕNl e{D l_wj/Eڭi_9@QacTrV(ߧ{}68Y=IoTe5U [r8W\,_THjofaf=73vih]oK}>ϓE~")#}vHyQ?~t);o$ɾcJ:&ܑ7ڢZ7}\ש0<-kiriV/GU<:dfXZ9(뺸dgOU"IM4w-CF{ qekL& &:lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0039-Multi-phase synth.xiz000066400000000000000000000040551247673406200247520ustar00rootroot00000000000000[S6H'&g)$4 7h%?%$G{Ȼ+iەݴIy>l[N-Bea9>?^]t3^~[uc2m>|HdIN8rpkôuMɟLdzh9M_ѣoZoe~thFID\6$lȬ?6GwҞ/ra-~A[Ju z1bP@B(-q=W"qN50$IꁞXBӐc5{[EwT%MΞ. clE ݥh_%;8"lNNssLj3(]@*Mp;g+W~\Ͷ 97̐2YId4Yw-Ͻl 73S6Mb(Jv@1oVFDb_Tb2wBnntu!YJuo'ˇc>v߰ 6`JUg0Ԟwx#r>HF̀>ksVu{(7;\̸s5>b[J=~kO?ٷ{[UH6F}F論Z]$J{ hb%mTJdqQH6_@l#)&' 7ZJwqp,$IyXB&% &|)I(6IFy$",'G5xe/G@w `8++ k*֬~&(ZchLRMR8emG7'j5.0 ]Iړ.(*bbEUI oNj2Y[f!ӢFCi^bALry%WIo z0. DG"{UY xl_/2or" J=hx]" Q_S_ @S(wSz"[x \l6p1.ڽ} .U ,x7Q餣f1( {_&zmz|5-̣!'ۏDUY\C0}4lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0065-Computer Lead.xiz000066400000000000000000000034101247673406200240510ustar00rootroot00000000000000Zms6_A#&$`LHE#lòk\^m0I^>^WϮ]t_76(6gNzxy| NNNn~{/v-49;n<0Y7h0EZV_|Q};߶/t=xׯ~=^:1-ocY#Ӓo붥셆)/04J "r̓!#BgG PRnְCPpBu[ &Or$ʺV `#L_V: - +=LB5T!P xƋՇaU(x>#R..,j}h VI% iRVT>"Y_ ZQyjZZ9IQsQ!KPA[FV̹]^)jz^@=T5ͨE{jiq"}H={;t6-|Go`rњ; ]IxسkwԕC [P`cOL@;'w" N> Qee[BޚvZcnBTx aQ[5i5rieO{{)Q. `A]6*m$%)6+?dQ:IPҭV3lJJT}ܲbٹz.rYVYºp@ҰA(\;SPVvpŅ*ClHGl<ݯtQmiWB3&v3RaUdK[ bMe‹bB@ģȗʢzRiviMVg݆򖭳su'Ѱ&w狕Ml?Scmب\N+{gg3ߕ2JG7 (x!/* Fr# {ʎG6Ce*)CNG^WϮ]t_76(6gNzxy| NNNn~{/v-49;n<0Y7h0EZV_|Q};߶/t=xׯ~=^:1-ocY#Ӓo붥셆)/04J "r̓!#BgG PRnְCPpBu[ &Or$ʺV `#L_V: - +=LB5T!P xƋՇaU(x>#R..,j}h VI% iRVT>"Y_ ZQyjZZ9IQsQ!KPA[FV̹]^)jz^@=T5ͨE{jiq"}H={;t6-|Go`rњ; ]IxسkwԕC [P`cOL@;'w" N> Qee[BޚvZcnBTx aQ[5i5rieO{{)Q. `A]6*m$%)6+?dQ:IPҭV3lJJT}ܲbٹz.rYVYºp@ҰA(\;SPVvpŅ*ClHGl<ݯtQmiWB3&v3RaUdK[ bMe‹bB@ģȗʢzRiviMVg݆򖭳su'Ѱ&w狕Ml?Scmب\N+{gg3ߕ2JG7 (x!/* Fr# {ʎG6Ce*)CNGqGLbvP10Պ7>>LVUy2D1uכ0`QaMN %`caFic?+/Qp[etZ:O8+r 44gS(SKIMKm2id9.̦&*&!YbѴ #gAw Rp}l?ŷp" &~ɨ?/l㲁EԶ2 elf%~ m}M@q~ ŽSEb\#Ys^x~1],/{%g9چcɓ焮d:\v7װ<~g:f䪩#?j\ hV3xlèm 3 mLAҀ…:5_LQjP70Jq< bZ =+&?̦AKC86!8`@xr31Gv5C2:iPjH,s`n&.Yx)DLEJ86w"Kp²@, `_!l+3%"LBM尠˫S Ԩ㈺"ݵh2-hR6E[\YpÕT~/E P+6;NHw{N_! ^/P]}\J:0d6|/g28k< R)K~Ƥ)USC=Q SZwlM6=D,Z { FCj2%B$^ BIlA~ H >ЀX9S\suuqĒ6 VӦ:a6=t 687ns,Mwյtm)ݧ.Ù\:UO~~yΞw}w]o w0 yKsJx ZvW2Z6Xu-Ǻc]ˮ뱮eX_qzߎ5'~ztao}C'{ @2:1tVyZAM GygճY廟ξ,w'n&Blmms-1.1.3/data/presets/ZynAddSubFX/Synth/0067-Detuned Harmonic.xiz000066400000000000000000000034731247673406200245510ustar00rootroot00000000000000Zmo6_ÀK9/$بNmgX%*D%~ _DnݰOxsG*o?DģU~uҲHP Wz{}tttxZnþc3|}tAkKxa6r$O) NlM<Z8[<Mgwx:hIo8 WM  qa!0%I mugb8grE d_r<"'G힞y1~M7GZIM<#[y|u4rH#v#T%iR1,b܇Eλ:D#5Cp5^G"z` j\2[QȚzsp\W''A:ҬtDžXU䢗5s4sD*!T>hP>Gk|dB̷m;i8=4Co_;pY]pyh.oDbUvF_Jԓ /ٳ>b ?/N'9&}Cb~i7,G$lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0070-Solo Synth 1.xiz000066400000000000000000000040731247673406200235520ustar00rootroot00000000000000[ms8_=% .1S\FEpkd/i$Fʧfv]=}v[^g;}?}|ᏫwK=G8T|-84~NpOp` iGnOFp1N6G(^*pE؍S[&Q9v8ޘ s6% AQd^I :@# +ۀ Bd$S+R+@@<mv{&;T|11''nĂ!sZse|yE[ޚ[3P$dfaDmfxqwUMD1Sʐ@=׳pY8>hQk}WBG[/PZB`,W8> k:15%A|/ȫK#LlN[bxBsxn2AءN&2lo%8( "סmRHZ,fl)L]?O"<^U>W~Lxx=& NwUN!s:$0!ڬd7AKrph޸NixI|!#4%sKP GCFn"ZEF3;sr$1QdyIƿFgYcK.u'tKb5r d=S0:wM0 2aq652G7:NANܑv I׬)Jy`mzIT(C%T })nbOL1 'j%_fKe:4k~ 'G1KBaSrDpIY+vj*9x,uE9.+A_vȏNLrt~9Vv]㇊UhɊiM+R1K*yXr]/ Ҹo T8}5ɸ.؁5k?{Uld GVnŠ!=1Z^&@p*[pu3. (ذ1oObT6/@P^41][❙A VR4]EFK6ބCI:N$`R((꺍䅟d|ɿ9!#g_!DR'N1L9O@T;[7Q'M|;ȷrb);Z,žQM GlQMctYܤǺ%"+d4V)n {k* !>S gt ^5545znN_lJhݮFgGY>=͗2 B\˙+xu9)~a,Y;,wY;XSBz<_4%~~?㍳߬GZP:hXZS?~۵MyV@ңM[sxT%`ҡC1wX_Wq=7ο>vgS9DGљ* 8qjؼL?qg{{y Լ8ځtG{uz{S%5WVJ T7n3ՍpLu#7S}$jvtӞ6^1W H#xŐ4^ &};9 =<Gb!.v~fSN%߭u߉:x'r3j˝ǥK] 騛g5ҋJ Ng٫=ԤgITLjPA V?̨ zPl=˥a xwGO܁'͸>lmms-1.1.3/data/presets/ZynAddSubFX/Synth/0097-FM Synth.xiz000066400000000000000000000051341247673406200230270ustar00rootroot00000000000000][s~ϯ=K Q5'Z/*;`s| "%l?ĴRj}jyi㘹svrӿƷ?7n׶S|;Yѿ+!Q䌬-#'dO7hܰU x 6pfxgOF}eN; ԶzΜ&l8fdgqOcɏ*Mso 1P(͚>ӻSAAI*gÖ@l>*Y@*g2ǎ}80a.}ZJ:᲍%j$dK 9~Z@$$MF)/34hݻ;2<-W~y[2t]||q.;`@k\r ^қ;2eR#wB|19|)rB:R.!XsI[BV`B:sSV. {ZW!g̨b }%kωef\b B9 VF.3YM?g6ْ@L{.`,s, 萍p (ӭ ]Ga55̵خgMbmnQS #]Я:t GK)`j~)*Lv +u}*!ho;X!?ICgyTDЇ. ]x8EZO8w*D1T03lnJsa 5ʹ(YHB"DYe劋(cus%QVDYA"^ 0}^"(uÐ nn6j%)?ye)x(ߜ9(k~QVeQ=:E5>p/1%~#y=¿3 *ey=e ~6ڪqDQY*%˚e'^eU\VDY1'b.ZA?[/@U.-c.ۺIpceki9,zq~\=OOb.+ohe|;DQV<>,e)V H `ŀm |=]1QVDYeŊl+$Eʺnx0񂒘!$0ʸч~u齵ZZ3۵ , + O 2@ո/T *He0qzU|a "-/|h@H@Ij <ԋzWNK_qvm 8<.6>t|ug;Cv< ׷G';;·fwF4[db?Ci٠|eWM h8ݧ{^IPή-Eʞ78Zn?yOφ9A0[/X+};<TKPXp֙hLpb8"VQD`I$pkX;V۰FD ZQx&vJ6 Ad$$dXws sɆʩOdt$i8y{?Bܥ Z73 ŌNڙnMӾϣȤb!$6+R|;$D SG4]`yj Ud4QyIi EH b<]` \RodqRju>*"!,@+UE`we^--=&U2I"RZ/88>3n @h{LG] $䢧pVnw2E 8N["lcЧЗY3rWo2\/D.IO&Co7{~> 7+Cz+:r %e/aQw}xYn.cBjۓ| ahi>K\Rd Be1KMW|OY!8 ")#J7)ӌ!d_E=Uw;zd[9M۳ʶ״p6jeLsw|dt 8r^Fb0,mi2 bdںvO'8N гjﵵ-0 h dI)MPPSSZɫ(}z|([g:մoMN:}ul^wAE E}ɞ SUMJF[^m7o0|wluG#*n`-tΣ;bPћr1l6|G.Ƙ#wC 9vG*ThN0 u%j-] ]f1]\19~^lV83~~N.nvq[տ&i7%@lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0004-Fantasy Bell.xiz000066400000000000000000000041311247673406200246520ustar00rootroot00000000000000\[S8~WdN df6 hr|t$9B JcQ?> B.Ƈzxo;E~;<<88zx5rg]z]m˃sx)w8_j+^98%8pmhE^nzmw8@<<'uCba7W=ޠ qDwQ֜q,3hPdrߜ9hAxasEeH 2{±T% "IL-M@o)ım{dtk&3?t4D2%_pYD\ @K}˟'  fh W''ew}dSbYQb~&PB(=.nTc (ׇ߻@@74׿;]uxERCɾz,G?ЗKCG  JWM Gno'zQ`ClԦtq])j0ց;G8EsoVҴz.-UFx9~,tǀt\Ee%H%C$R'vXt$e$JlXsab`LdE% gX &/&\zQYa"WT[ 5B ˂ [(m@a8jY&V,Oa lHpLD_SDY4u "rh\XeEQ]ҶhB[1V\q>v8_%tbdmq2\TԫnBеVsdI! x\`J/#L7vR`i,݆$I!43/[rF멓 g?szr;Gі\mTif 25 *jF/Kn 4Vf>y#X-gc:WXܤؕU-Шp K1Xz,?Х!,bi=0o  6b@__ǭ_a_vʵl)k;oV6b[W˰֕ U{¯Q_Y?Va?r<_#[_[V[jǨtukkͿV 16&8_՘ཌྷPFE&΄v& $[e ⩼ԛ :hDV'Ns}6oX^M=}6lZ`-;^TF˛ty~7͛vӼMX*yN6ἝmB};9);[vs@ןmҴUT^%"E[/5=+3&ItgI ՏZ(hOXr.Ʒ=UT)ʦ]h ?Ґ1d6,vGlmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0005-Synth Piano1.xiz000066400000000000000000000035131247673406200246270ustar00rootroot00000000000000Zr8}WgUIP@ξ[`e&"en&O1vtt[矟ecM En6uף۝{C;˃s(wAȵ6OE8fGn;/\p4Onx!zeb\4ц#e̟Ҡ-u='TYO\G,*Y'[E!?B+"F,}BYh5đpTD>+ Ļ%uS!bh:ڣY 2H$iq#XTJn^~w?qdH͊NnoʍD CŪ$\~•H.*HՌ3vMPpMZ.@3=~ @9(u $fuʩƁL__싖_! g\K`ź SVZexl#YX9: F#[1O2$EPI3.3xj89( |J=A7"t{]e AL9N7*<\*5(<ʗ8jtxdJ"bH}yFVS̹]^kӭf=e_-kV:Ҟu(-DY,Ti} `<xWĞGUIoŜFKWv펺r( ~4A9BS(yb(OCpKjd{N2Vʆ]֘y*YH#k0riiO7R4>~c@s&-cH%8PMxݰ$IPDU:[-uaUcBd``u?hYCTYJvާ3VJUl5O‡ 6b;qT7[PXp;l#&#jR'٢HhK rMQe #B`q/zREivimՁCꖭv/x4J&_L !iimNj F]UmYQ".Nʫ9)v9:H=j鸕D3բkTn*v2J2C|3FѠ=rḌC09=9Th!嶫rk-?0<-#ٛ7O(arϤiSDӪ|MM31ї4-2M*!4͍}# IalOǝƧw._ܣVSxR*+ 09iiv'.뎻OH# C'~Ppa)R& B1pYpZ=+Y%t@7|0DqJIw҅A~Gdw̃ Szt@Lf.J,]qe{92$xU6N>- FP>+$: B"|CY d`0uoH)E a+_.0KB|C+r&ϝV[ɂaD"qth`e8M/Q-;ۻZdI l3.(lE KODI礥8'ʰ4`FcK<%y(4r1mC$(I<&Y$,~voFwnnY1B~ XeQu1I$Ȩegސl"|% |YO FtMT="wi5Zöi֙.=OǪ]c1|fݦbG#7筋4ȬFR{1S-h9`h<܅a ԡ,5d1VYKy9d<ߋ\XEq{_lGi\'(jzegA&U\a*~5LſYϋY~^U־W6.\]q:ۋw>nZʼ?G [[=;?VxPLF ~x0Es{ae6s5S>A!s\>fzAC}(X`s¹njB4u^ Ѽuthvjyq-"K?;JWpG{H- LnZcw2v=ùA= Iy4蹵˕'~ĥ(!bx(%zJIc PYMjd0΅2PGfmB\aDíkj079hp^a9V3$Ř6 R&[BIlkyZ'z޴SN~up-˂ʂ}$ (D)=n'e5eUd7XjYhFbJDXA+/-MfVN \oMNnZ7RzQM&`f8Į"˂Y'|ƙ@Fi@3{K]T0U^sv4}_`F4(u |>v,[VRe";IY2U)V.E?H`K\q%GҏQ9;!nOZ͂R ;uP$VKs)f815}>T9Dќ`uћ6jSj`p뀥Y:L3 62i~LF=0g|[ :gj㴲[dي '%뚦hR_[~d$f&9΁m9Z oηDݵQ?׍ƨ`"9lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0007-Termollo1.xiz000066400000000000000000000035431247673406200242750ustar00rootroot00000000000000[mS6ίH 0ܤ3͔$4 7~(B|gˮ-ȿNAtثj칍 #ǷME~m>Wwgg7l{ېQ܃jm'N`L,ؘ[0vTd6/d>0kwz0E{L M'nLb٢-q诃 \e,g9#A(!!ȋ@B0#:Y ]T% u"}w4жS|BljlZOV.bܵ0Ę;Cn=%/blmOd[h S9p꧈d`T)Kʗؖn!2X =<~K,kξS&DH |w $0*[8@22Բ5:xlB6`F  T=u3!feh[#嵜6[@Or_/-gj"yY>&NrB61/?kYa#c+Zˇa$(#}-[v&llyP'=x}ЫL\fy>?h=z=ø{Z~M*I=m@ʒ\ 5G^~Q(P,HГgK!I8N4]9X uD/ !O|qM3vN{NN{ՒGP\ ӧr"u-]Zl0j: Yk(~ȗdh+)3y"CliD \)];&uPrtN[hJ[6zHlԲ7_'R|KPXvlhpZE^I p,(I؅j9 HfIɔ5TNժa :N9rQb`~ Db1^Jrا3V; Ul5D Qr 7oߨ^i$ V t߁ਫ਼ E2Wh8>`p*Іq(0a,ȦTEA^JOoe[3VܲqN`1&Ä?/팯-~6r} I3Q&8S)R$+%D R,R~B.'NLj.q3]*[;ʊMh*>/t}->R:P.gTqա,UG,_QOѹ3^O}ѭ5WEEយr>! uUOs\4ׁl=u\Os|U#i~3/ ·Bx84.C=z\$=0csJXc!< tw5b~&9rY]_tW~/KTM{?6i21lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0008-Termollo2.xiz000066400000000000000000000037111247673406200242740ustar00rootroot00000000000000[[s8~ϯ:B$6)@:}[% ~%|粓ᩭ9:9ԫ/w ur:F?^Óכŏ{ ;<]:q`oO "ž8ri'0N =L? q1NȿBexuA#L|A 8Yl-B FIm5N>HԀ 01Y|S@?BA9KanxTfSbuږvBI=9ndqdb{ ~L֥Ǝ\re!\t%6S,.\⹼5$i]D;Q(HC~cZiwnzoAF>O \"q'ť ,oNi4>RVAd#DC0f/"Fň D=q3y} ZրRkW> Nu  ?Zϲwi$^}ڕ8HR 0Q5%U4p\.CMRB 'Lz}`c+pB {QO&!Ù5QUn8(I1 RN;Q$(GhlS%g,6[{ボ?:|Ç&L5I9dQ%,>u;>>&6*`8#H8P1q((6LcU2> ɥ\+' 9ACI_'#_g0}oL{ kɣxBy??eI5>pv(w-Ҵ'Z3k>'B}:7Ե|KPXvHKIϔBD\%!kAA fU,hCT~ݰcd+&c`ZE='5bqbWQLfE B0 ݏR t~~~$Gb(VGOT<#-\ekw@xLeʍb6BT%Q c"RYz)=ٖXqi6ݷlPR[t};t}]_Wv}PR-IrFu{*RutGqժiœMs4=5=oKE =?kB'l5W3MB&aLsmI87$ԛihD4_~fVcKW&eqih~\3<^ sк]PXȮ'3! L\/* YD})4o5A? |X I8?YVig+2[dyaai],@&)H343y3( yx壶?}nc`WvֈKgYjZW/ 43lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0009-Termollo3.xiz000066400000000000000000000035201247673406200242740ustar00rootroot00000000000000ZYs8~ϯ`yπ9rT%bP@ξ-3?2>tSS[bZR׭O칍 Bۦl lr|~xwvvh6\~y4jϹ #xwv#?{+ &{?6y<3+;#&?gr2|!nC6p-CdӉӧ4[T%s0`>x0|*xx( EA(͉!/> (=Q>cZL@U .QFvjq,ĶnFLӃ9]fΠ)D2%h-Q%ݛVVKܼ+{o/b(H0G{n35IVF%-PdSbD`4}l' W.=5nbR8HJ8RqKvɽ7:BmjT|QԀ F#2]~R@ R̒[gx?Y>J#sG\],|1[!q!r={+%[[@&rH"[E I +*eqX}I0Îma`7֜~6g ul#O$2*[8 0.d:2Բ5xI`!E0d#E`DKY} Rhˋ;U^u[ZײYNݓcz9?h=~+w~H UƓ{ڂ%j]3 #!AyRZIӓC _'zA@[ bq:US'iͣxB(z.ʃ~ ӧM\uYIkn.fti-v1!gY$˒R 2=G*st"kAɱ9JlSr\U+Z«CeVS˞K3l1 HыzpS]hִMXRBJ%)j6 %!(SP9U:/e|W~ZE};-bqg3jG1 (Àv?JS6a(%aA;0<R>X(sns( N mGF>eٔ(HK鍎skƊ[6tt2L|dm3P%IUU_!~Ts1KVsIPFՖ)JoBJ~#,)9?wa ;aJ96>]ǹLjdd 4,K,V)+J:Y; @d{g,Ik"VA&ӹe|tVZ93oS֡ # 7|yGOe:es_5ūF_`txuC}O_4gvI\B uUOs\4ׁl=u\Os|U#i~7)S0/ Cx@4^-[9e) <@/WZ>Z3U~ς@Vfͤo%_)`gr(&l=vٮtsfXV\jgfU vXj$OEaVlΛC'3ȗbzGm?=F8=~%=#G- y*lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0011-Drop1.xiz000066400000000000000000000032541247673406200233760ustar00rootroot00000000000000Z[s8~64, dtQln4E7`Rf<%csttnA7_3O-Ya^|j=WϷf_ܓָi)}w*䝆Ԗ`~N]Нtݙ;/O0 ѧV_@`h*eV۠PP& B1pB4Ds%4#OCL$)3A}UM+`WCO֘.3 <$nF;h0fؑrq n1nقNS$qֶ0Q(s:Bq2=sEr!WPpq79x"d+3ߩdlvP%̽? <4!çK̮\F$hB”J"r- 0֚םΥaP"El0LB,`~Lfy%K`#bX{p7=ILV,Jk@ĘE[Ip'3Z/kRF) ]Lh6h 'E=!P.#xoqHpb% X$e!,뎾w7 )!3H(9I&0U"|{M*Ig^ 9]\n_^D^y]/Oe]]XnSb 뎣51j//1Rvҫ9ZD0VMs!e8VN{5rJxSRy,IvL,}P`z_m8G4"k=[<PlY5vT}MTX}̲K(澑G_Yqx8Wۓ\w;u-i>ޱ–M d;*׃-HlJ֫rY\뷽G>"d!u2 h r!qvQ*yU-KɯwgG0ÆMb<Ԣ5qQwԫhN@H2˗6nk}hz2ؗbh@+oE_qr~vQtN@O8ia/mT R؜mYG%0 bm#l(bXE7_P` @!4ՓO5妥3j }૆qG/qÇ_=s?0.G~#1O̞4_Su'[wNI# Ct3?Qpy}R(L@b$zTNs 3&*QRimta&~jqO$_j;i8&hFG1CLVyqݏIԺloTK7m=2&Nֻ'%:ېYG8WGRHȪާ0 kÙ{{E.)J+om\S2? .PY*(R4;Z+~SX|.' %B=D3a4f~pv߷VYڎ 4۶j5=t ғJ(x!H[s4RJ=J3.xNqHpb% X$ą=뎾7;7 1(!cB D$`YvDL$ɒx+۩Db F+U]N,4ry;qQ}'sul}ž}S鵪{b4?tg@+yi9JZ I텆8NAjNYR*H3S.B#5d( VY/\, {Ks $D1߻ރ h(0OQ#0NP_΃Mٵ S,TY^Bx\{i.VGW}ܴ`xCOWwzw&QLт^(5hHEG>rV qB}4w~ADvsvS-2y]-/!Eg`QH- LnZw:uG=ñA= Iu<칵˕}Dx`=9$ߏ5BE.]8lZ:+z`f(4υL4ʽFV#w7693j4H`N#;,Jɛlk4i65Bzt~/>|8r:\|kuG9 8׺is fk{a|d>T=C|( zխ7 ^!ڒy4'4*_B8 8KD\Au/: oc w4Z{9D5a04k{h#s_ (ްUÔլFBiqYP(w/TjLnKjn&"I1џc!\% 3莱Mz [Q'lusSLwdq UXq0LeR<ף;螭[3!.ɩ#k5gP ̴X{@d3{> &ÜDR|v깴 ' 2[D2} :ʑ8G<rhта|T DSb O8<$~\HwFvbgϱ_j?OF`:aKf!.DKju^uHDlu}[Ħ $ np$eDQ GPe4dͨ?1k}Uo \!W±] \DBD:}#+`}u" F'DrHN1X voo`I7QKxS2[ud}\p)XSb/8IL\rbKDTQk\cK/:´NXBR&NhBs/y\hX$;[ d-L+ʄHzEl{>1C &zg`E6Ь;mNThֵ]o'8=Iuq2$ + s\C}!/^,]'t;rx -󳉋f/ GC^"ƀ&!a|) 6 #*T5"OtՖ #-:U-Tt|o] 8M]ȗE} / VNKQ^ݷJtե,M}8m/=A~m,xB.;֖UZ$T!d_?Q(˥Taxմa> Eo{LDlEPO z!QFցdԳx,uԳyywЇqW<3HldF\1CQY.% 0()#/! X/Ld$V <'BLYȖ㲾ZiXh?8P-{4\R6Pfۍ||bmE.s9?(c|"KR4 ~LL[&lRʆv·8&7/ueʂ% X"N(J.W$(K4pŅJa$A(pe8ܘ.Wq4b+7؂3|kNx(35;S "YM?#^x:,0a@S(I/7Z05c%g\٧~8Ĝ{)डa@-LT*QPU珉ȪF2!;RvQt"ސPD1g,1,3n*J*)&_󅑌Rd)!lmmw.G+RE[*1";p~iœQ4Lb9/Kn 4֘>YuП1zî׀ƥ^14n{ky<״PRs=4VxR_h&_> p{'gD|5 @Keo`2TJFJ4K$s&}Ќ,%.۝f<`)ЏROE,_8L[?XJ8iUIW>}W>atccӖG)v7|ߤ?#N:׫:Q^v^~P?v9lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0035-Analog Piano 3.xiz000066400000000000000000000035371247673406200247760ustar00rootroot00000000000000[[s8~ϯ`yOIL fl,v_4֖Y_hE7`t{)>:M,߾{㻺^Cm/Oyި;86knqǶϹ #xv+_{uvɕ3~<k#+n cg6 ɯ5 ;pCdA7&W_oن8Τh4Q3R抌"Q'B^( Gېh@ *Q(ҭbte8b߱[ji0&Op:!K&!ڎz~1q_m$"l{Ԕ m(7snf4_:U6:myJ6( fcͱ4:%%ùEXڵ$^Eg"E,whHQ"l"9 $U'z$n^L?g|5?%Uq0=ɺ]pvlk1\ZN r}ˉ,=,\Z=JkD,rY]+UEӤ-QMSZ  ۾Qek~]\aa46^f3/Y LE8sy;bX0Yl = )]\#G\H-lVeg-Nr 郯W~{*ܖ5)(t,vNXe:-JKzj-/BDx]PjѲMa{Q.4 `AZ]JsiHARs䕊j9]( e$*lXa0"g. U,A \AjP,K.W$(K4pńJ"' KBh" GLea>CV0ȷcxʟK/eG^;RONK xRJ[k_ J]*E^4Eo8HmkJ.FJV\%i4*$Q5WLN d฀6^/ KCfg"4I\`fwFX*јDH 򊾎)#D{)>O:[<]4SE2EմUK+!)7lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0037-FM Synth1.xiz000066400000000000000000000042401247673406200240660ustar00rootroot00000000000000\[S6~WмvRH&an"WlK:;iH::OR.?./\^5OǍCBmqUa?h|>8v|3z;kM398)w'4©aƒ!LL@#?1c{\rM]Ht6yFd3?lLE;Ѹ1_ɿB2͍ﶷ(BzE2 L*!}Rj9'"mJh f\5cLŏ I LHK p[FВ}'k wut! A'o>:Ovoohfe2f>QR1uwmx ffYX S.#hCz! v5bK )W8BBWV ++mr,wp_zԵ-) {J^low7; 1ZX/h幱~#& .h74LfiȊ2|8' Yسm\Ebb]W wV؁63þ]O*!sӸ?Nv'8l&tZYɱճ1N/2mjᆑS'aF"D%~Yٗ?ۣ!KX"i^E,m_'?zyiCˆJ>@s=B*lQpɟ%&fo4l%܃wx7pV,H%Ϣ}8;?R֩|EqDL#+8|D%AqHR\%ouB D>+)@:P4e4X"p7…wKwb9U(vxt;+iUꨧ`uԫ^aK~p7ct]iW ;1(8 ;Az Gv@Q!q|^ OBzܸ/ʍgGo׀|9h>6S:5~xOGIaue u*Jv:h9MrTUG)9{i;,.z,yMc{⩬rQ{Y)?w\&ލs3,FƹV\Eq8_T0j32]3{$n mZog١vh%_#ԥ^߻ŷFq/)Xrcގ^{u88r& m)VpƯ5-%Ztʄ[fZ<4v8+-4 vec `ЭIPYH_ 4@Ҩh{On;Y35kFsivr{Lqehc!?Elmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0039-BinaryPiano1.xiz000066400000000000000000000033541247673406200247200ustar00rootroot00000000000000Zs8~_LM̔(˽h-[loHZلL)Zvv%ӏolX{@kSxa6rNX#;1vx4lLh7Ap4OxiD9PH3~[7[ ~l2Oܞ2m zD\j:;EwOO &k/E,g\2GYbP"11ҹY8ue9ih6>>أy [KCѼ4N t}ǂY7 umܼQ$d8vͤewf߇rVri'[.DU NNLs, 7Z$BQ[` w-PFj_"\,t s(:UJoPZJ@55u NfO#7@Wesg-hxX .:] 1L֠1#jqv`lʛzheN$H|}E(&><ҕ n.Vjd`H\ו3m#'T{.wZDp= yȊK0 0g{ +<LB'Z5;Ri+. OAꮄg[Nentt:8`u[[u:/tHk(2ɍS`r'r+%Z%I+*u%o)V!l`$.b|'īI¥2S㕷 _e˒rQĩK`dgfИ!J*ʂLw \m2 J]cMN[Hu`plJNLMuVS{6GyThS$gCyn-֊/nhB&kY]J!!$daT*nc~8jC-{H?> ~ȅT3crg2YTZZ]j}8Iz ^0TH -Svh pEfҷmfrS2Ol 2ZۙI~<4$-tIjGjP 7^z *ZBT$Z^}W';+q&\1t= N"nj}[AyZީ- c|~a0 5nVMnUVY0bHYv׶PW QN.OsHJf ^Zx8&eW\\(frOYPf ) L3+`j}GOu>K@\ >f"e" %ug$h-գG-C{β*E/~D.u1SY! ߓDQ"i"fj,rK#ǭ*\+cg񘭨G}4`7˂d"Jӈ1%"wyYGh;̝ޤ^[X]{.FktZNqk?拣iM4ww4!?hxY]bCxhLD=طU!lP*gk]a#bB,xw]dFL30ZG,54-2(0;[WqѰ?w/.RDp l]%Ti6QrEme=CpŪb]%[dū6E4__,+gGg(\  1&'57)#jq6`͜κ]E΀$B€% o J-pD#Id> uFQjwq`WVll<Lt He3L Œ&Dip,ؓݡzBLe ʺ(\@] J`5$s T^G]V1.nԨ`BIt-RUcTF_!v2F*-Bs #` Q-KvKa # 0v)<O./ZڪJMB |)KAV>]QnSEc(˫l j"r0 /-9%orBA%؅sSq"V}ܬW5WoKΝѰ7) L[ߢ|4I @dQV%jQb ZQM{;|} fFIe;di>/HX\(LR\ִCR.V2P<=6՞y-E'BAjU oo(fiJyqlф峐ntHy<p )`➇X[0;ylJZ?fJ!>Ytq8M#A;nRʗ\eu4ZG#U_= ,bF@'X Ej3wbs:)/nCp ƙcFc`Ol>ݛ泽i>ߛ拽iMswo]4U!v}'_:+DW"X]~߽OzE:ۘ k>Ok W4ږ9&nkAb~mUP? @2L $lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0043-Saw Piano 1.xiz000066400000000000000000000033631247673406200243210ustar00rootroot00000000000000Zms8_񽥦y.1S@n.E#leRoeKʆLoثjѳd^-[['^^7o-:녏WuëLS.<]zRN]Qu@D18m'^?y)_g4qhkphؚox8 И,o4`W&م|M҄0SxcI>&lpg/8(z!vdTX*G  ^՝"U*Iy._.ϫY+p0i0Gd: G%M1XF7?3)߯?)Ͻﱸ5>QdW/4y2O]y`!VSaZ7KZpHyO(ddM)0&ѭ5(cJC'KL 1WB3ܨQ*FP@mi,A{`rZ͡u˦xu˦薑dM75˅fe Ii,,lŌ@l@e_҄jBG7d&)7DO Ԅr*dʼn[>u{bn-ɷ\9\"Q'z+&,8-¨TӆVYClJcy9t~vHQ9P(y)*{edf'Zsuj2ӗ(f~0#LҪKJ#ɛ7E8Mom~p;ZfRnѼ윉@yf@7WHV W\a.TSM}/dptʙe@\SQߞ!=A=ok ?3:,'3Z\eM7~.< 913df \% ):M-m+q :"b̉BrVhwhÙ_?]oz64[e4<سh;:AT, <P zqA0aj.f~`Q25kapxY`e!e~SuI إ* L{JT2Usjѡ=FqjFƅcЏ͉&yQ9'tQD'tQN:נYAY'܏ 7u t~=Ya\lо^d 5i.݆&C;6=*(T!q<.JJ(_j%lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0065-Synth Piano 1.xiz000066400000000000000000000033121247673406200246720ustar00rootroot00000000000000ZsF~_AyOq`vbSDҩ y?%Hj:ySkN5;/$N<^wwg zuq=y;~yꗻiawڇc]ɟo]͛+Qm?v/,l2_> p6亻%Pc?{t{`ܓ:^h1^쵽\JG>سuY lJ_.+Ef9,<Ҏu+,TS7M;42HV.bTnݧlnG'Z&H>F7iw1cKnp~\ %] J0m|ϦhO N2G[5*M1;ݣ OnjƊSgj}B53 K]"Dؾm s27T״_ީQ$yQhH[ pnREw8h9(GcN6x4*RI2E}__Ml9a Gڦfj05?,mq|?]?IKyH^!5Bʸ '0 3TAdTh(8<]?5^+q0leSc{KZ-#;jς&1OR?9\^]5HO=þ/ x6&]sHe'JnLkq$nc0.⢘DdAO־8{p1Fˮ.]T?F›g]+gK➱d^3ck2xwꐄ"ghgEq̐W9[>H!J$ vj٥%>n^ƟY;4dprX^Xx MG{vtuh:2A.ai(5RΡ8ykJ&Qjbj q@MD"h$ 3+"e Hպ\jf5Ž!snuT!QSQf͜*Y|$N\3ςd0Y=j|waWSFu&oeWk(ڥZ Iiנ2Ygjem4R'Z,1*[B)6[e* 56LIup̉/Nyp2ϗ'd'<:gP4~dO׆:]#Z՞Luv)PO.T飺,YfD?ik41G^~i/c#lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0066-Synth Piano 2.xiz000066400000000000000000000033541247673406200247020ustar00rootroot00000000000000Z[s8~ϯ`yo ftLMF"-֖Ӳ~EґMnCJ䣣s'Ea%i㫶b ~j?,zGGNnS6<[zSA.P]D?H#G$ԣ's@֔fa~M׆&dy؊iĮmŚd)a!f0eisK]yPo$ H+MN)%$,JɆ%$SdY69VV8YTD@L,^ta%~R#N}?w3Y% pyK,& XmRSi^,ubJv ;h6g3͝ aE`JWź\HLp3eB*kxȚ+ F50ߌi8HDi>,d3=ɐaW*}S<.EW4LsMSմj['89^%2d5rŲԸǺtM7Ut);U!hRU4h2oZOnȞJY* ֓QG "% @Ԇ rU:X)WmVS$U36N}dF9Mc,QWT7^I \w,)XNœU ۍ`*cywJ}oNƙ;㛢w>m}| 5Q8 گìR⤬8<T8O\ap7Z<!ʕ$ %{(c)؝`rYh@ihpxz!knhgr/[KufkO:wˉ@3%IX֘.18iG2k׀fQ>.[nn?ύ8!fu;UwIqL-'$@+wq l:q"Vz+nǣ)tR Bz3zFy<p;|/rI{bmOg| 7COZay3 zNםi ~zꈑ[:Z"D~ Cΰ ȭ"x[U(RY59:NݛQpwM Z1&_ ' S19ǸUC:}8unFDB/꼁YɓNGT[,֠V5̨ɏjo&Y٤FaǤFA<-E_gXUouQL)ٽgy(/9Ns'% |擃i>=泃i>?拃iLs`|~A9\:+Cpu_bMtuCf!?5PճrA ޾kq M탶eNlMeb*ڨP>#lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0067-Synth Piano 3.xiz000066400000000000000000000034201247673406200246760ustar00rootroot00000000000000ZMs6W'2)Ψ65ԖIԽ` JJ_߅`Av*Sb}QZ$ x|v>[,/7YCy=ߟf|*5~T/<m$'G"|,Y{19<\>X8aEӱv"ºª| OIb+!!$?܇Ѹ@bunQ%@Z<oM0fhTo­d0<擄L3Ma3P1xjGRD oG<w<5~ƈ-ԖV=|菊qhy}#/NN*K-9Y% [ϣ)j؞8_> M!XY_I{bq՟s"7K abEt]Biry~j/eu4ZG#zE/L~DqM[Y# I"gʪob :>rFp; |Ypy!xP%`f(ѐ'ͤjHZ< iVɺThoD%"WuE#EOt7K*Y2fbsK.m ΋ EDhˢ{e2 4|Lwם|됷繼 ٿ7|*b>;g(/p`<;o[,?_nOn/m{???ۣk!_ .hΗfmDnXpG_koqo{tgdZh+E;? g&bHppedRO|l )_8|TCN ]4?S/BNUP14NgGw8+?eH;T(m!uI봵SHa"[KxI$o Y1|p@i_<"̇bq5}lMXtZj jIsEEi &_٦C퍂psrБ'6-9=9Yy= e% `:0w KFIx$/o"=#Lk *)ZWm(\@me ܚ#ki)Ɔ7W,^Ua7f$[HYF)RuP[!n2ZDI!%-5М-?7 Q%nK a#)0v-<O!J)\jh+5[ 9Y],4+&N}Z QRW$Jk~|YLoY};8SfX-.é>oVmt}c\\c#ީ:ĝ]9JaKdMr7UfPF0\`fӈ`$c7*X!u%zٳ+3Y#q:KLi* M^![cc( ̞${̏+j?0g s9x`I`e=5иbօaV{r$6+>hIa ;}-Q dH+jDƮ 䔄a ָU ||Lt *@=dLٞ~oi!eYޫ/c|®l{S5FĶcM|{G+9/8:cdY7n!)'VfQHv'Q̲Ի "l\/t:ee Z._I{bv՟s1"SacIt]@$hMѳVCoUfPX ,bB@Dagkf7}EpX oK#8Ɲ,8@o-Tz183x,%IIUiqo(Y6$P z_Qu)kS{Xwߤ=ѨS(}4&:98E^Bya$LޱHom 4\&͡zoqSeO>i5ឪ/g4W8Fu͗F`y9\a뗺?h9\!:L*Sg%X¸A /5-ŲVp=GeVa[o8x2\ zs2Gk#YZ35P0` fmYHOtH_ڥtx$2)vЖ3=e.ޣur")6Lz& x"5g"%u +H[vn{7,FF`دL~Dαu1SY! I"F5rp'9po?#aipWM뿅J/1{ŊZ Q^xLZKkFqͲ  iP﫼|#eNt77z5jf Joˉj1ѻz7hP^F(-Cݴi5Dx;T_6;[^}]\݆_/UU>ٿ7 k<7|u0.?;pY]o?ՇCpLDwSbP>kMUcK8oמW45Oچ9&nsAb~e4@T͂:$lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0070-Synth Piano 4.xiz000066400000000000000000000036321247673406200246760ustar00rootroot00000000000000Zms6_A~GxI3InhbLt~,Mm;/Vpә]j+O7nmǂzyƼo;Mi>Э=;~|7X?^߶gbrz{v2}6ֺqdLD#G4\xΡ^mB#x؟#kK} Ok̆螅7Թ?gGknMgTц~'v 0Լ<(R:8mBeqцy|Vaa[J+t Jp&5Khm8e;Y2%|hi42`$],VZ@Z纑H`$ۢK{2T$~rEeV_bVoJ6Q f2[5ǾDJGI.@J6TVHt<DAG;2KނP+;H1M&W3^ޓMrg:,ȥ4ȥTWurbS]#n*L2|J3uJ-f(@:P{tdxv7|PZ`{Βlొe\ts28%/,nâ *޼N[U-,^abPy8'#n$FCTH++GO*$&!TThV~q?8RKrKp) b7BғXUI7N5@hʼʒbVǩM`dӤ&J*`s{}nBq}qCLSsgpl>UZWjWwHwjƣ.r z XAhhHH^z&~rv^|RU4/q7 Cۅ]$//z"dD-}õS$bI{bi@$LOh|!G\bڌGnn>QCYE0BM,bl H|PC.i,I"Z01bm,lv_g6`7 ҹBp70i ױŽ!EL.)g/~P̩JC0NxQZ yZF^*../r7n0u{s{uF|7?3*e5pUVkjxTo ux!&RdXoǶE3+ Qb7KIIv#qk~ÛO_gsd/NdN{2ͽi}욧Ұyy~[LQѸ?5;F)lmms-1.1.3/data/presets/ZynAddSubFX/SynthPiano/0071-Synth Piano 5.xiz000066400000000000000000000056221247673406200247010ustar00rootroot00000000000000]r8}WxݫLiF䱔;h9#Zrm7$GMTwųF^_ ?~|Y_w~݇|^^.Ogu|{ǎO>r{AHV;Oc<^ƾXnbٳ;zy;]ϗ `C.|{~M?G/~d#סݑQ璄/eݿNW3nz?gZfhoY( Klx2$Ŗ:Q뵢t,wu7B Ȥ䓊^:@EW#n;N:eρ'-5}Ybr;[3ohȄlWt>wb2PES_w>5 LFD9-:-}|XKo󤧥V}ਚ r,d|=𜏝nNň$̗01Ld ֟2 D)0\߱@nMqr,ueDJɃ]/_Zb[eJmn/G3>ؾs4PXv*~.+~y=)kՠV4Ng&5(oC_G/sCeJ=8eh=dbrJ S ԏV~fՐm&^WH 8=#w'{UQ ';+б=d7(R0K%~/$GҗE3m 2.jIWZf8^WUZѓ} CeT vdE:Ҹ%zpAZQq(ITrO!)"jRnFZV"a?!&ӊS=y2++ YzaTjTvq۱GՄS.|_(O&5Y7L8)aYS$%;::2iL3o3o6no3`+ `#`kb[,[c4B[c,)6hl% ˨ȰW#W#\ \ "bGC(j5kp540*ݛ3 \u52jpeʨÕG:\tu2\\\\\\\\\\ \ \ \:\ \kS>=)h jjr㥜.+s۷ j}pEp5p5pE|;p5pE j }pEFv;i "~}\M\M\їǛ џ@XbcźqcM ct컹ea ACF2BF'G@t$:ެ0onA7 LK%:!|C(|p !!<>#C|Pl0g$!t>C|Fʶ$J!>G8}NwqNwL#>G8}p9s&ޓ#>G8}p\Uy.q9r纏덮B8}2Nk7@8}p9sN#>G8}p9sN#>G8}p9sN#>G8}FN?'U\.~,WPUvT[.nӭi]ah !MB,D~jz{w3~2JQR6ōիI}7$7qʖK&|n WYEG~}_[/~hp(I*dQM'*Q=[td+ޔE*(&ޒ,'ifyWSBnS&Rr?ղ!HDu=l,KVe9$L,"@eE6cGewDT̓DŽ`qL-fG,??{&^⴩%^8 :Zϖo"9xR/C>TB ^H7#U[$:+I`Qde'|95~L e K¼S,<* ^~2[\}m*0eu mƭGscݼ/ (yK)r(n$uQD]uQNCP.PV% ) "TEj=[>|MiTet$f{vԨ .?UjDthM˿ʩQrBRENyɑ!!qz[z6{j΋_ʈ.ʷRQfR艹.n~訫'ko緜Wr-kr~~~-[緜}rqLUX^uX^+Q rt]_ϮII!\ZRVXW{F, zڕ4vƟg颈$,^vblmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/000077500000000000000000000000001247673406200211575ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0001-Folk Flute.xiz000066400000000000000000000043071247673406200242300ustar00rootroot00000000000000][w6~_AyO}~nzh- @t#l5k__/a6zyfF>O_NeCQW+XˇӮt駧^5$!Yiof rU`ԫ->Zmj8 "E CRySe;swOq7'Ń~%P]¯`m X hfYݨ?c 0Ex#j:`JJQ2ȧiN#'_Cք.k|tNwe>YF]se׶rI-|P[ 2r0< ]F_[fzɂv=T NX}kųܹ~LSzL/];3uvb6}Z[m0+؎V3hb4q^&,YHln|FkG Of++ biw$N,@{04ʭѤ | r6҃b%a=H4Bka@.ZD^"?[9#kƨ8i([fVaK|HlwIP po0z3ODVs1UH& 19BLLi7w} Gs'#`X "|;Ny:xn#ly>I=Ѐ&aS3&&x~l4R披_pC[tyI~ti@}h}1. 3 k^]^ZRI޵vMS,j'v@k6MFw}8N?/.!K@! XBْ79.sR$3P˘U.[ K2>b ,+n`x"eb҂bM ?l V{nA|_—#aXYP,Q%J˲/t)c#㌞"=LZ|v"}B XSϭ]3i'tX<.5C tn^)K[l 㳷|]y#b7[EKA8p޺]Z;{bv84_Ɓ ʏvxoV :ogO:ݓ=8Le&; G-Lh|5FCp; gû)~H V+X $ƣ^kZ(MU B׏(]!?Pbbl,EQ'M[(y%'~%x \Q*mx:g[7q la޽y(W^F,q[2r$(R&}Aѕ R<alq%,`|t=O5pz)V~+ |t}GuCo~?#@s$O!a;|Ѭ*pݽswr~,blxyݢQrOT'/خPq$ ɡDĊi/f.B+Kw@!%Cp;Ooz&!rPо/1HIiIAs j?"/ Ǥ֦<H|co,ne%Vǔ|! ҐTk-<^Onw"E% \_.38{!)ķIa\Ad#DC0Ft=G 6e(8AKAZ7ipJˊ6usz=3E~+]שbgRxpI:@!S8D8UIԓ&JH0FyP8Zi~4K-Z䶫O$y[ZZCv$c)αNB=SQ'uhuRGAl &z8ms2:45͒㙙lk"F'nT[sl%7_,|x"A RW!r晿3;`y NHm4H"hk'@f| &+/X*ud<'Jj<בVYn8a{J|.yww q@9])GѝG0I. TF"a^#! }܄& m7_o4bU)~_27R+XHȮ} x!˖?05dz1fw V"3-R5ŲZEYa<=>=KL=#?Pr}@1F6Főt.WK.n`NޡBdgM?quU1ڲ8'x7u^,G[ 7A t'(iYY:T9V Mw7bJƵV _Y!?g_Rwy]\UeU1rTmkb҅6=]A_wt[Y*j_P?3@IU/Pԁ&]+ m1\ :ԍ;ǩǩwS=G]yiݝ"ޮJUSi$rq"t2~ TRy߫KyUV;Ʊ\,X4M.VxG5Kz2u.Ռy«t;+Mϵ▩\Mٞ>5>֗x Lӽ{*s+*鹆ΟC8fre@lC[&+껸&1JZu%i6{AW90 y?_~]au_iROe` ڻ3I︵kVBZd s!u!Φ H I; U8Pzi&%`t'`X`(&Ǯ"[T*{%k_Z`ޟi:% /kGUEglJ y6%!䩢#%!/!/ߒ!o5̐ܒ!/Ϛ!/!/!/!/!/!/!/!Cz>Ch!_M4?!o!oV zHl4u;:8>oIrkkƛ"x"xSr%76E?2ڬ`VKn|xxCr%7^r%__ȍ?xt9h9nsн栭Ak\Z+RkpIj'X*9ëlzף3{Lw-60tzVK^gJNu#^zݮ@OL=C0Ύ@׳Dz"sȜ?h"=(`PiRuaTHs\滓͋ReTD-$CWP;r.klmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0003-FM Flute.xiz000066400000000000000000000043571247673406200236460ustar00rootroot00000000000000]Y8~ϯ`yO|pW(vj`f_T[&|ad_V墴Blg"cc0m?}|}Ϛm{L!^Ҟ%xf9IxZ~^)'ÀC, - W= e6hoIo8(ioΤ3+.J.ч>%1`fl$S#h6CVl˘"Esж5sr8/`<=;N?6&n]׶7ӨoΑW.0Sr/ qhHƙ+1u{ HJu8%3 LJl ";OL_8[lH2tHNF& ,v0i(# zN8] cOk#8%#f$oh-XQ|HC|Dl@83ČHWپ/N`Cv7y`=еBB@:XcalĚ&D\.-꺜晃Jg0s--Ab;K| /_`ƟIU Md߮rj%k8~<#]PZk~>8,t'"b5~)yw.D>mM';>p|n:gʼn wHqPe [7e|72H+< N|@ŖgU|Ffaq%yqB*5' ~k0e&ls?sgnQpxT d&+FO.}7f9Lc8݉kKRf*gNXXUH+efp(F *xg-ggU٨ڒvEG(35E,A@(r8*ciڤCsH5as<˪&`=*K1NVX:\8aun?ڣpл~F9U~T/b9G~3ڜ,X%&KSzfVp>҄4:<ӞXFUť'S3E>L+#>“WG^{yySȵ3 yCEYŷgcVtkr+c]X/Ǻq9˱n]_q i\pGܒ}3~[{ #'}nabK߷??yז g/| X_F;mqIb[BqrUFMEbOOx:ii_|> Fӌ(lk ]DžFl6ȋY3wyBuBD4ט h1!KlgưʰL))[4 9px 'ߵ1\M5OF6&ynM#u"zUFV8lM=\$ad}QÐ4/Z aƭ5rpk釭ٛt:!g68,2]8xK`;~5\w93yn8Z`vN:۴r/Wղf&syd% ޖ(0zEHeXPB*py2Yl/~x? L3ALzt}ot "94<<ӕ{u3Sbe^U*e( Pk_E9 +-<1>x,C7B:&&.%E.9RP&qDzb\OY2e4Mnf;\S2yKۊY_@+utxKB2O_:50ϓ[\RnW-}K܎3ZKc:YHȏ$A:Cn6ʈPqm OgQs0I>pQaX@ݰe'9/%嗟Nì>GfnW]=.q GZɣ@F%_5Gؚ M܍'!]*:r?b> Pb ~؝u:%y0e! EF9;҃c*y<^K|hA-]yZZ+iOt2܌OZ2L7AL'0r+U0 XD9pT{\q!ԯd1e WѬw3,B,3X&B?F:ނ2r] Wn=s/(dыmHENg7˂5z)ɕ\N.8k’YXvb:G{* .)3.3ӇT?36F+R?Ĩ<E(`X( qBUlhyH' NN] X6iF+wYuUåFTG2"Ʉ9,oO_C8nm0ofϻc ϲ<9kGH1oV^H׸n.^YjkIJT/|:$$SȬξʟjCI@i'TFM/\ v:Ӥ;!Mv5`b*{1u!/׾~>}5+ 1{m`TU׫WPꊼWu_מTUWU}@XE`Ui[2v]`c;5/Z*H"*H"W%¾r۹o^ŠެUVqXaUyzAqPS*JUi #-V}yjRMWұJ:~J:VF酽%/y((‹.jɌu  GlꥒhNٜj9՝TwSkNu9ՃTA G HWؓW:0geiys'X{5!C\%!?j{x^\(g)dD+O"ãT/yAC/ jeYǴ: 15.QDt?yYˢ/ ~pe `ը"^Tಬlt/qYz2 za~d"1kD1wiflmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0005-Soprano Double Reed.xiz000066400000000000000000000040261247673406200257530ustar00rootroot00000000000000\[s8~ϯ½؄P@-@FZ2̯_md&.tO:}:N۷oQ0%k5d:}~t痾 y$=փgCkN-$in#!ZZF|!s1r9\cH51`8?0&}x"F ~+a 8~$Vm9P0a/C8 (4F>QWitjF3n1[|)onn@kDE.| <7642f~$3[sG ȩh4Z,R'ni9_iF-Εjf{1OD/+GN0 GFA {GMZ3?RY#(0H%& X#)i0D<~ Vpbh?< Xi$Dx(ђ|L/D]D|vNZIl; K(.ޣ+FAZ:upGiҗ3ɜA@1XECLBN'uE Cr 1"& t:7=q;u\<҄$92tD:\X'( ,&{V9 u77vP2S{3]UTzV%&Aw5l>< ߭vϣקt4ԶjLP zmU2v[hHɔfnyzM=jUMWW]Mzm1CRu.ӻwk&S:UbUb EzLNczLU..\T"Ywj:ݪQS5jFM6jҪQSqKU\RߩQSGz2eoQ7K~gO4+[)KΗ)ib>ǢAׯݸtzЭAݹtzжuE+GҾ⎴%wؓxc~:L^~Y^C DL`C̟PN>h<#OQ՛ZkkS=3fNC+)22cOi}- !^T53[ĩu]bb~vlLoD ޗy~ZQE݇_/GfQ_y'YF{wq1>~|p0ȃ^NeW~JWXJ*MV;rZ1]<2J2>M֫*lx0cp53OPόC"~WICYD^*6q̛'L~*"ȄL"Eqh0 ̙Vۮ4Ԗܟʑ>\zvRTF?b3Ʃ4A/)b_=TIb5/IT,W(_+,]c],fEic$΋:e4Mmx>F_ڜ^(u|GY>FxW[rO;HaDa :-C9·<'9(:'G:yX6=Ms-nrxUuXD(Lav^m%7-O$)BY`(? e:Ij9MBsur ڣPFf  PBQ\#(k5EqFQ\(Q(k5EqffffffffffP\c(1k 5CqP\c((((((Grͨ~xx>8]8ʒϢB/l ʹ>W|ko4dZQKSm*UՠrzmU&=ldK}muTUVT$Z|2PH=,75nO·Wrw^S:%7R$\/vQ6Dn8ڱ u"Ptl?lIBO-x~ʵbmj]cH݉y _+J2~r 0K`zvFb䛀O!ʍօyf9H0XQa.kSYLP k(~o߅^GIߪ,7A휍Ʀr]9fv9R׮cHݼ]cۨؽqRtF_FzkҥH뺄(1e6j(EX/X|kPgK:Ҥ Цmۘūu);,H쓋mUy(?}L?Z:`?Zrݯ\v+ש. [+R߱Sd6sIVi~B91ΦĔ7^ $'%͗Œ[gg&.%t:ŒRo3oMBIJzG盋%_c>1 My N:׳2ppwpp%pOìF1 l`Q\:N5=jtTۧSN{:Tө& up>NHrIN8%+ICEʅ|:Q]?. 2hȢ!|ߗ5dy|xlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0007-FM Saxophone 2.xiz000066400000000000000000000076311247673406200246570ustar00rootroot00000000000000]s6~_{*ϙ&-O=%phJ#-K"reKS|~b{qD>Ad8 4=oOߟߟn{{hSGIO͓X>ETJrّ̼xzռUz1:\L/ƣ '{}rsr5o&ٓBo!?Ww=Jm*{jY uT.w)c74^-d"jS)N uUY2NF+v;(J)L(IUp4}Y^x~՛x_Cqٗ]\C$i&-xd^1y2ya:Ymɶ(=E^2eo E:!}ZJ/5bZRG~;Umۻm_l,ra,^LWQKw;|^nd*-yS>U־H"CM#H?e0tk[yrvN>?+sXD6b);~:<{ѭ۴0ЭG9fAfO`*=Y>}\ Kghoi)M~E37B?Z2I8Z-j~G/Culb)N>(!BeUzAB}Rz(Iߍ\zT'>B=*Ⱥr 5w"pVY?ߔ~fjOp!OJ3 T3g]K0!Cals8;ZQ#8u!]\/4{a@fb302 t8F@@"q0uea0,L².Y a(H(ka}9fA Z%&!ðS8L&&0&PZ%68 A0m X0U(a4B&5ۦN^Ӡ lO",&0c@][ ` h1kq®̢l&-К I0-hDlr~[#%606!al_ @Gl"RMm00T0N a&0 1 fcMrWX˕BbLLRSPIr(p`w8a?^7788@ovq(p%U-Pࠁ6#X{ #&HX$^&:C% ʡ 4!ɡ(nN5(nsN7$Dz87h8I5(n9xo% 5_P B7 dy8we,=$)9%"׈?Qsɬh)RɌPRgPΩlA‡I~M(;hgU2w T,Z*+6]D)G0s@x}ZzI$(Ȫ/EǓӋt _q*y3e|NvW*]kWBzzBY4hKo([©b+mz(EhͬwQ,VPrgt=U"/]ĴJ9-,L2"cN;,!hYؽ $edKVdQ20n7P.{{瓛tRwUΠkl{֔+J8Tk1w+S] k=JY&j2:y~:Ó&/gXӶBL܉meaRvاkf–ò곽9MkMloGSaFm/n2Њ\z1"~{xۏ*}TI]]Գ *ګN[r֊Ej}(!kZȄ{Z E[Za l6'ZFk<o(Oigr.4; ֭.H "iEF:hwA8]pnvCѬfh~CF _퀢N(.8:;If$h]t7ft{ hGs6n9ZѢ 6.(q 6N\Nm]P4sh]A-DoC8脣E'<ͬNhuAaGΎC鄥MV,mmFšS;aIs PE2[!p~{#6V>2N*NMgxR5S.ZgPT*!将pް## 1ro4^k_Uf? Z > Wuf.Wyc_\?_nO_|7V|mh8WO'm&zӭ-\,њ_,i~mxtDkr_}D;^~W+9o 𥳐ުVVukh\qq4.V.V쏏VV)V[gkMu:pWcu߁N uӎ1}4јxxO|RM]4unF}prvN>?{mj.=M7ԽOm_Y4oh^z{EmW^v{E;ʹnq>'$kqF${9\|x:T=[]SX&f]ȄQIɸ5Gk"Wܚ)Uz^o*=QITP}1;AU7*0V)E B 5h@ Zp`mW@}cCr@ρ|xMdbkqg?@ W3zTf>\ O~ O|=w_jlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0008-Concertina.xiz000066400000000000000000000062241247673406200243710ustar00rootroot00000000000000]r8}WxޫLymƵemej/,ZmN$RKRN<_ ))e!t&Zom6=xPYŸdFqr~i|ͻ_?_F_owۏVlIY=Cܹ9h4.<'Ť09 A`Xףl4]]Oav3~0 8Q pOM/qą\eAE Ǽd hFUVBk^r FFQCOPW|lf>ɤx>ަ{>"߫b1IgdCb#O8WknFt`&qFVc&MKTk.I mAU譨$hca B[-Zqf6N/E:xkB$JHuDz*tJyx|\>-zT}vts>r hr$)5p5$.R>([tE\ct7VLN;Gm0I< 0Y<żfl+xtHLuS%<d*|ad+QNJLMU+<[8Q哲Rs$am0/ז6W0(_>&_7޷,3yhV*TXl#}_I YSyV4MoӠaѵvjgi\,~ԕ sc4"$M0]ۺv??Ώ>wټHd#'|mM0UE"stm~oJ5~B}3W7f!cQ+ۀC`ӡk:u7Xi9^h9u=0'˿:]-":%sM.̀B3rtnrZrW;Ѵ6Y81Zwu Y+A:%/t,lMO/iﶮaE]_v8k7fIyUYИT}*NYZvDau-WV4 ڶ^RFaek^+mV8MlZ TE~}5)y=k>px3@M@˥%L>IxyT| CR&0S3--I: (u@OyQXCv9i,nNJm,s: .RpTzms>]ƧeJ90ɾQ@8Gڶ}ezp /Ws9jIe`91@747Z zHDInz|gP%ȔD([8a9u $JW_Cڜפ IK g**fmw !¢H{ N0Aiz({}i\}+4ěY~+hng${3U\'aG<lCђq9(9PRG;"M)PU`R.y qm5igi֍UGBvӏNص ,9zXx)MS A}((+NcHZ5^]hڱZQiV's5ca"/nS!mmX#l~Uho~-5IY^;FἈKr0`6x^:Zuܔ[.pvxuvq~zt]IiPuv<\Xid%JN/ۦ,^ue^K`Aw*`Q575Klik@T)}U4UuڡpF+8b/Ψcv:7JRtGOQGtGZ/sGM5(wwGQQvRE>5~`wT]9mpG mh\^Yz㞹sˍUhE_E^Y[;f{u}IҶ3yOtm|o}ǣg!>o}{^nTmV-EAN>x^.^}}V>9/vq:F E|@Z i.}%wuS6~rgYulmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0009-FM Brass 1.xiz000066400000000000000000000075311247673406200237650ustar00rootroot00000000000000]]s6}ϯyS$זRRM_8l$R%)'_7)TYfZ1sA /ի7?~zO"I8z{F~0z"A}z{ar9ݫ7]L>~΃`ug~~G=3Whu]ISqUvS7fSGrvWz=ݞOG^?{~w~; ".ޞ< B/e~Xgkh0LSo!/,YE)`s< :lnT$YJq*婬s=zOq8jW]Ǔd۳:slͮ{Sion ٻ$Lx(h]UҳwϽ,zq9~U׫Ww"#?t<wC8ry{?y,~5g&~(}y!*]m?_'%؊88@xq< +Mmz2NՊ6WٗNE+eV{g,%-*NBbER^W觜^m+//.=q}o'.kU)ǹf/(;t_ªL'1aOE+֖{GDޔ£YFl<\c1OqN$e<i}J3{x0up3z?C"|ѓU4~ B}Rz8KLR,D~% Ԙs/(,,fw&o}?.ݗL;to֢Dx|Wt̞<ɼcq$={W 0[JwD<bnK%qۣeZaW5vu7χc"[FeI4$QIIW˽N % jOAhi)QxP +`srTt '!jhxy8~D\]*m $A xwdD`]iY}L|OJUQyQAnR&!̧ğ~2yk鶟 ~rPlX(U.IJc 5;OӻbGev7Ë W0*M毾"JjUsH\.m"E{XFzgάdX+LwpRK걻ZRXrk# T`0À!vq€m ]40`0ŀaa 1R E Ā)0`[0a0 1VF `&L1`s €!v]C sU` GSAh>V׹B;Z.m(4Ъͳef(4GAeB;(A TKMPh(4C9 m6 .核\SmYB3 rMcrŠ]kKPh(4C9 m6 .EF % 88(8h'88u:(ppwpp7 &NqpLun6. N d҉JMdڑpp{x qpwQpf81::cñXqZq+,ǭWQJG}&A=aA`!7F,XFAy@NWku9J% n7@6[`[J45[`+9 Qh f+`+9,9,%S!CB\9Y 9,9HvPhkJm הz9!)r:4@C\Sj thT&9h9pGm%Dq1T'9 p3%JBC\3G!%234@\c9y1 | 6 p)7`P!B45ȻMQhBsBmA!H & MQhBsr L B\!gS/r< TA\K ?B45\ /Uj D2kTsȅ@L<T5ȁ@\kT4@b$yjrTQƑm c۽t?wfW5l?eqi!X'QPR,*g}fRURI8Xu)bUV8q ?o'? /}pbWڴ()m[hd:3DFY!DxVUS,tۤRUnGq߲,AԒ'J,NeiT2ʗM)oFKHs\JAjJd[aVSמqm =&}wo *r^&vb_*Gf[6kD:A2>K*6GN{}(r9"rIO(_w)%t)yәEIi1(خدnvʒ-Vb-9J%n*;@նU TRVlVu0oVŰZ ۪jK@m۪Յ&Nkm%6FkB伨"\hr@۝х>w"DN]4B- }fVlsՒly>w}no 4'(݉BF;QhBBB(4#-+4=IIM;ЎхB.N6=7DY 7v".Dhv7NB۫hډ@ڤ]GvϮG҉@ *4o+4?E[\مDբh7!Zv7ߑNn'/Fs&e8{.@((;:Ǎ$Trth984ޏ[m ca! ;Salh*Іvkh+v/ƫ_9g/xmϿy 2Q 8:Z]@'^HΆW S~VrwZ+G#}Rُt7 $g*V)ĦYk D&e\] ;~̾tf܎.?ܜOFw `긼 `  'IܓŚ=Y==UG=ÞEoxR\5q:ZUj8/,2BU#ªmêea EU:ZGUjUuTQ:ZGUjUuTQ:ZGUjUuTQ:ZGUjUuTQ:ZGUjUuTQ:ZGUjUuTzQO:ZG=rT zݬ)pp[8-78 ?A'wn/z2/K6Ff{i{Y{y{Lv3gzٮ -G$-H$/0'.k\] .&cÛ0;"i5scD쥺e}loqߥp&Px=΅pV=n絗zw٥8ŭ}٨%Iez#INүp _kjGmyNmCu(:A@=j|D7}׈)EpuyW57lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0010-FM Brass 2.xiz000066400000000000000000000100241247673406200237450ustar00rootroot00000000000000]_s6ϧR&זvRzM_8l$R%)'OdIR^34xic իDqf~ >~v?}ήOߏ'7'fA/ě- 4?_3k&6f^E-EQ%2,}Ls"O݉YC6g*,ti c{q85棺.&ӛd}:ĶOqfцoO0H0_&Y(f^>2 իƑ`JĿ~ y`í\ _-E8Yb&z1=wfAZvQiX]LǗ0(Թȿ`Xʑ|e,sY8J Fg(QyO0n6IExY\WTDNz<9;&vuEk;|by>н sZQ tª1gaOU4rSvo 44Kk^izE3/wYDzx,i_6~w~\_D>)oE4~qi.Nf"1~*w|F"$Kr *ï_o_< X3I{.2Iz5f"K_ZY+_B=6`I-K$.*h^.%eyvYrc@dlޤeQ[F\CIfӏMl-4$AKɤRm./a#9؋#Gil/@р}nHya+0sZ#ǡG q~.Wt`>H֦Ѷ*'H*kU0/uYtQb2^π 2m铘$z+`5Ů6hg[NveAdv3\_\jW-p kHʢW!.X"mlV2ݭ/n\"J>C*닫ib'm i@"VZZrZl52@mF`L5͚PL 薃%\.&khL V fsB (fQE8aT0lcp@t؀Y s0怆9 Qb@kap3azB!h00t@L4 390gSuqcf`i@Ya&:g hh LFM@Lg@LLILh-iQmt(v '!aaRY:AtJb4ӂ0tlr(4fklC6tlu 6 ``[kȦh 9+ h)؜@\L;:eVA8s S7b:*nT́@ eׅ:s LϥM@@סRxF8p4}>[+8L-pSYd\!>zg9e␏2Bl&E 1oԔA~rAmC#YpJA& SCІK!Q[AnDF3^DH("CGtoRs <D#bx 8I1>0@) pM"bP(AcMjpͤ8kIؠ@)znt .(AQBp ;@tT[ȀS[[@C"Pt !1thXٔ ')1(ft o?mAQ4Ġ0PHk'QCB<ǦPLnP7]HQ撮.z.:tǴPzMz5Jk4r8=h!5P=8=0qtP$(:p0x$ܢb>rjV{waf\[p;*4:]4ᗓ뫋I߲)9A'G[y3sIQ<-V /eji-h#J͕v[v5+h*J%k2ݲZ{ |Q1WT2I]#OdX}̮*m6Ti[H^4ZRC-ئ;rRYnb;HZo]vjIo~/|&S /_* H~so6~|c]wn|DXnXhI$n:nWrW9BC%[cx̆{^MHzWZ:u&alNFWO3`>I~Gkp4;]6>@ i6> %F;6~ N͏Ah$ =cҮHcFww v4ziǎ0Z-f-WDf> 0z@ZmjS˿Ҿ~%o<2/v ThyC4_O8~uFeBa-poGG-%ccz[QըJpC Nl-Wz#XG72H5~_%YՏJZvN گZ_ꖮهw'뛗yښkR)CrTw2Ԙ 3c2QC!yVϨCfDd$32UFHVEgkc^8 c? H$ɪXrbUNʉU9*'VĪXrbUNʉU9*'VĪXrbUNʉU9*'VĪXrbUNʉU9*'VĪXrbUNʉU9*'VĪXrbUNʉUI+*'V嬨qnrbwS\4rFn琏Nμǫ/`.Kmk.⽸Lo>\s׋w1_K>m Lּ;zwXݱcmw鎵kuȻ:ܐ:ܒDީ9Ů[&"2n(d&hӼJǞIǛ鶾Z)L}(,n>9tf]ɞp$[ՑDcxa7n6+k WL:Ӟ?ۧ%r@aD67Hz>-1: ׁo_'@lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0011-FM Brass 3.xiz000066400000000000000000000075621247673406200237640ustar00rootroot00000000000000]]s6}ϯySiqmyXZJ 阍D$뗒, 31u嫟4Md{aL{yTtvb,5o{9%q(v]ЫW7a~< {UA.}zaZ"ZD^ ޸Te(SjZHطw$'譪]l k?0oaʁg,{Y}QR(jdaxy"UNQZ]\xo¨.(=  釋ZMxHŝ.=ҏE0y2GV6%)x[ų{h0׷.Jf=p[۴:",Yayd,Ì~s|  oD1$k~ԨM*0pY(|aq(h%T3/(M@(̅~)LMy'%F` w\7YLt"J^G۞%^EЅ-_,Q X!@p~%gIU&kpԃqptN0_ťy7K4 #KI׿W[% r;}q`:At8E:J P9QU){pHpQK8LBCG;xy8nAD\^+UT:Z@H/I6eVOIX?}U+( [>̳3@Oe9 ]=;^--.JAc줻Dlgrd8ƒzk(e,D5X RF`X% 1f0ǀ!v*050`S a0bF!Y*030`S a61` 0a ٪Ո b [00J;\`ÈZ Z7Qh B릍B;Z6] 2PhUg (B\S-,vPhAlf(4GMBmA] AqAqZ8 (B[(45ՊqPhvAV\.A) PhB(B(Bz1ps-E8q#8uD 7qp qpwQpj88q n6. drQdz#&-EXq 88N8N8u:c:7ÚĭL+1QJz Lu; 9([tP J,A#hAy@9z|s'9JAl%[MRJ@-Ц& mlm:JArJ6,%SM 4EYJm64,6,9HvPhkJm64הzm:h!)t@C\Sj 頁T&hT*DShthkDS< 7& pJ45) q*xC\#J45et Ϡƕc e@\ 1hmWohA4׸R[ 4C9 m m qM@b(4C9 mהs( ǠK} 45 ]h1%ϡ-d*\6kUr >J@h4 |xz:ݤ8ʒˢ^LC?Rn !MXQmx'xeY;mU[)-Zဟr#2fK}tJ>Z54GEppÂ:BB pnǣI߲,A\;KtSbU#j5 F"Wgc-U}.K0G[ciOOXӾA51dByaxz$u=R[uu:y" 䕳T北K,I>zƅ>3c>Yx7UEFS4&N+"݆F,Y+hҊD7&HV X`6hvDSچD7)tsWv+Mg"|aCķYISފLa'nY\JVjE{,t4i!V+KiB[i!Ӧ݊J3a6Oi vi+kiiCmt+nH+ Veъ>v^ ߜ ͎>'i d{hO>tƒ2P(M?Tja ?LW~LSӏBe?©A$TrqQf=|nMTlTna*{ܳS/I /d.A m#z|t|gkgMq9uaXwutQX[֠,㕠$ΛjyW"7qp ]\xo`W}LXAh2p=,Su5v3]\\\͹sm7iεۜkb4HIjit"xx](<-0#nI&Nd%.q5H=nJ(Pz z2]sL<]z8@˜4Y't)|%:|% ZXuwJcz,<6.PB8A94@ԢwNtC]%]J? n/xymlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0013-Soft Guitar.xiz000066400000000000000000000074741247673406200244370ustar00rootroot00000000000000]Iwϯ`xHØ?Flh$Y8_ Q~}@mٮ,dU/յ|ٴYk IDݻ듷NoQxOo?w{;$O'i-'E~_О]Lr!ޥդ'Wקs?ndڋY9<[daf c{թ9zt5^ifQy< %ͼ%_܋py08,s-{ކF4Ls%BZC^o`)$uQ>~_PTʶ~Q .գ><߇ib)՟w4K4||YǞ%ioa먓dVl??i2m̞oYo\lw1Ar V;uPYlYExtq$^>]_G cfڤ Gq|V"ͣM߫.<[aK+)M{ ^8򤮫 tk:vC{Im{g[C2U ]8VPX\$= &/ɽw}t`+=:i*mp麟$&^A2,d1/i8:Fbl oD1d5 l~od#юLtQnt^NC? QW4P}&x2>f^q[c>FWFA9o?<{/bڒ+| ãN<ͽ}&^)B(_ݨ,T1>[ZVI* [d5zbNF?|}jxA/$,v(\|_z|o?GA^v/n:.Ct1>0&l9Z}h<],i xؕDJ;C -%) YՌWEwڒMrWJ<'{+ۘ-Xot%W-iad y IveAlh|q>7 X1PeiQ{ iOk%=b:4vn-A^⦫2}v9|F!ߩ34@l8f+Mi[][\B|zI%pݦ2ך-y⒗qZd'Tά*K:Kd'>+l`U<"OgޠaI\]=?u"#~kȈKdn͉kHd!Ѭ[򐃛c[5㥲=jM nvv&a\\JP@, VJ&҅5 I-ڠq0%ˋJ|s%涶İ+ywW:Y"F;l؋Vflv^5^A=[k ( hP/K`̀~ 藋] :3`а560[4LGg4 R'4(3f`@fc, s[%! C h] ruȆa 1!n0t耆Y C%\ C#(h0LچNUAIdPfKb݀0Tڐa350!/˒ yIL&dð[e δ״)3;lf`fi /0b,p1,( yIT&*!m%@[0 %c:a2mB)"8w0s83dShّӡtLBXc!!XO̮F$ @a(N.cʥD.a: iZ34LbQ hDi &4OKM_AjRh& {ل0Rhx 4T޷4[[UuTϡ?jXXǹ-BG@Ui..B?rҏ*jPĥfܾinb ZѥL@@E\]tJ_Id@uAuʿJd* 2@46P6(n7)Dp)ϐPQC̀"uBD@=s!`b(I79&&@nA /'PcFPgVARtMRtM7jAZ6A6P@ǟ)MJF&~P@O̦t`?oJW8*ppnIP)?xf P/6 y30ј jQKE^LvI>j "t jH\jP.!QrQ 5 [ DB̓R3 Kkj[JT-@=P(y _&J}k >0qB<\MClzLAsnߍr1>b4Ԫb<,xlJ!"x{va#óO՗T +/N՛e'l}]V__8Դ1P`PF4C9gPFC9C9}gP9C9C9C9w9C9C9C1P[cPFePFePFeWȡpȡ                               8~IPC8CQC8G8C`PePyyн޻67y mnhpCZh[p^Hq)x% ɝNNFG\=yfuUYS z4ru4XWD;&|k|kȧ|gηN\ B|@7~42BI &ÀhdԔUEE_o7[|e4ҧ~~A0^ܜ6sh_lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0014-Dist Jazz Guitar.xiz000066400000000000000000000065751247673406200253300ustar00rootroot00000000000000]sH_e WU--ת6} M"7޿$0m$6t73=hyӷbp/,JCq3xQ|~ivͻNΏg/ƃ0Z_6 wxi+2|1|hpsXvd`p>σ(z1,:_&GWcl<_^WVA:|?\eF~q)ϊuqG:(\.3%S?<]/e#lCV0F+MPŤrWC4l0{;>R>RU5^.?',0$w$?(w !f҂#Ytp%q̓e9lavŃdKsV /"x y?2{U+y'2_&ؿNYXH.N6ud6>Da)G"z!ÝrFگO*e+2㨀"aFUWwI2~`DTĿ<ܪbc2i>8}:dQt?+;*B;:d~F:zd|ULGL/-nCB$~aei^5p<:x~1V&y){D1dKlAx#V#a%\~* EJ!P ˑVû'ջrz[cG~qk J_&Q2/~|RT%Ǖ+^1/{id+뾸I9WUAs\-|hUr"c(SGuBly3\C]4rOg evri&ʆ9_j# su0Xꖣ2W0ZȨYr5qXbma9VCiLcO:a֎g֍O$TU ;r~9v\n%< _w4 Vmeoa;'-R̓M8KfLOW^M]*zd.Wӣv= S0/^EUW!)SU2ӒUGJueP,TnTfIsyh**8LgtWxe8ez^f33{kR, f auݺmZ^&yzz^- e`pؔ.6.O`t1^t١h%asz0msa.0nR-(O nS!q@@iMFXgi fOlT$K8Lad! [g D!NB,g F_8Nl aCcs0aö(Z@G c1 sYذNa6 n#q L`c!DtKb١aAI\Fn\([2aC ".K -dq]ʜ9g<@Q9aKzllWyp>{!A6 }2%ACQdħ(GFn ?3!-znI#kG=7Pz oQ >r)bPE8~w(`kP=БsJA~ԫdP_RzC~sC(skPuQYPP &i`Rrf J{m!(R kPߡ`]o(bN*mJEj-FRw u 7Th a 3ĤHġZ/ᓠ<8T7?&R7P݀_|Au= h,ȡ.(HTn 6;õ핱,,SI<>9U*PIwb{q]A'WdY>A7GJ3}E]/ H~$G{\eM47KL]mQ-ʎȯVA |csCept.fޙ'5rhI^5F[A ,_gy̥ۏփ*j FFBڤ&&I8)J6~~Yg92C* ,W&yl!ov`@Mf9`G0XQ-_ X7[Gi¸ۂ>G.ΧM}R kSmΣF[2:}F+9z7z3-}7n ތ]Rkv 𣞹6x=zj1cO aba{}ч}ч}ч݇ \C1DCcCM0俯!>CM !B{5{{zak븯?} z*dDB/d_pK/r6QP@:} g] ] 7.nu)Rx8 VEGxACqĪݦ;/aWAde BRLWOge2'Yqj._(w'NN՝h;NwD{݉fF;܏ :ܑ-^aO\?m|z:>]5]8]W#Tfg2q'٣]G yvhCo31O|g v\==c&&s55偑fכy܌X=e` j ^ 2;+oW5^1e|⻁ϨC\-!> ëoo >uŚlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0015-Dist Jazz Guitar 2.xiz000066400000000000000000000071021247673406200254360ustar00rootroot00000000000000][s۶~ϯP|R xiѱ婦c+/Zm6օ]kn&w żw',Jw}qxQ|qzM?z0\]6 xh#"=Iy$'f$wcf&>o$ɆASUh2]khZloq߃ݬh0x$ۧ۴I2ͣbudQ0I^Q K4ao9_>?<͛yp+&ȓe*wJrFasJ^6e|/(,dI<-Wi5RVd@4G>bY<)\BcaeS{\}4^_T_7/^ !l^?PNY*,AeM6<n1%{:Ivc׉_3獦*hyI]dU}bѿde^%q^VY\}]4b' ewvP, L{1_j3 w=}qa-Go/`8,-mtk95C9ͻm,e1涰F+!Pa|Sc_8(~ҞN E\cu&IsUÎ89.78< f4^0xS1`;е%̓M89K1`Ʈʤ].& v vk aVx2kڜ ZLKV2M‡WqNu0WR%q侩8?OtWly&̞𚔆l!.cxz^a#D`Bp9,1\66dA 3] &ܠgv(v dl^(30L@)n J0m 301s͂4GK',-S\/P5 l5U!N[,V# )ȯA Euxvy4.HnW]YYES_FVV|ċ$\̓x-G g@6cim?;gA`O9J> E* =- "FY:IURB~rUP7SZ8uX>A-2SBmWpv]c@uf9`I0XQ _tA?FAq׮x~^MGUR {TUFb粥rUO5M֨G2+k U]+ [kS!!$BGLgta<ωP7Zz7E"WE~G~z8?'#lOdD+t$C25n7w/aȿ.7xn!KFh d!AKF0t'& lme l_(V -qme;zU. C꿬p֥pޥpKKV.wsPZʟ>?@"!Z8bݦ;a OO UX~*Ɠdh|>KL6G϶-s|bO*>  4P3MV9vԤ]0^ ;Xb0Vyhy ^yxe?Ęs냋WPyZ}< ɯo ޿?Mp-lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0016-Banjoey.xiz000066400000000000000000000071121247673406200236670ustar00rootroot00000000000000]IwFWpx\!GKT7t-  pPOC4PD[NtTR][vs/4]vhatnr'/?~ק ̗摒6uwwO(bt6Oq:׻ev^Q_κ?.~]s{?I["| n'{e_xܺɛAGYmYʄfbz xafr. aKR䉛1-aFEIy)Nz ^GJpq8J=UTËb^SϺ~!?VD9K4w"fT?ߝ٬S$˳ίމD4SOoND" :7I<чs:6~v3)$vio~Kƙs? Orsu.>B;qf Q]Z@;yNJl`Ǫmש\2]m{y;j+"guRI[/Bq+?C͌S `ܮ" ,VThqobb&q&"><Nޝ4x&GL|GRl^i=xRiV;OGD]WtYX4MGɫ w~2p%Ҟy$ԻMȦU%yTek3\Abh,a@$RWIw\eHwFTZ]^?9} 6]KKWL ߊSy%U:+ WӮExoy~ "eqjM.B%l}++F}xYM ѢPzE[FHސ!FT@$>e^NÝybu47s=j+*\#a3^S_?,4:gx|n4/\,/xֵyG X^wNJHn3o.F /_"jrRQXDȤwT2^+˹dnJ]hu<{^P>dۚoz`U2w&i?Y(j[L0`.{[u> ~ [)uB76-۸Mݢ\..Պ̛m֥:ԫM6622mݟ7i^- Or ^ RGjgnJƚ@753B"G'7bHtk/K.wʥ{E߫&6\NǺ{TvNciݤ[4vs{-?Y^͚>eQqHS&55xW@/IJu0UIyeb<JњTWd*b(˩sla q_b) EihXyvSeF1dL['H2]s$=YiK2$9$djI8?dfsj޳m f S 0̇YL 9eP!)ee \Bhfaf3 sО)fÆ2}0l@lL=m@ltHJ0B|v8!3ptBg@0g>:6A@\tP= ) e=:\`I=]`.smh P!iޙ 8oD CE ՚E9TGPK) *>#)Twy$nPdPGs2?DDNI%S'kqU 5TySPK& */U S*LeTo:v)85TmPj *+Tj`B\Fq B,2Gx"ȡ2j%}[+H 8DmQ>`ioAxa@PIɯAZ`g0g\2V q ,oNc :J JE(3!h!s )_P|!39$@AEVЂۡd)BpS!EߤKd}S?cEMٽKDR8p pOq7@?nF"-vV!CQv@7|0!`{ 87 d9p8 $9|=!M9Kor8 *58@=t P=4y2CL:ɯA} p7_r8 NI? pj +FD9"?ZF=;3|gy qE\= rߋ\9z{ 5/ZBMUk4O*U_\reʴc/}ܬrZ,ܬfݫԋR׾jZjtX\j'tz\"yU듃z/w=z j.=BkZ?\6״u5ipM3m "M=MV{'㺇,WoN0HDZkfԳգ≻}XoE^c|̰7mZ>>'f-"X+H 홍[^ݪj4&vkNí=E7׍6}Qg6^G(u%tso{73Z[S_yF|g[R^Q~y/DGq˹s-{$/S1)aJ"%p|=ިpŸ$xWej4xٿ7E%ǔ&[yse/(ҷ O4i$4'\_h4%6 r|RfDCj}ey6ER$YH%`Md,?"|H!3ɩ4hŬO8|:èv-0ь]1䃘%(DIH&U>IyW;;GP&!u7I `Ѵ<$39-Xrt a+a-z\VuBlO};+QijL-yf=\45b!$+bz~7YWGQRi˟qb5*?,H< eX:Jhnл^ NG?d+\Azmn(]ݘMܢp\=oWU+0K7wR6y[ScctpQӾ 8-/r(jxfU!?zԁ,}BySZ FYxVE4tn-MCwmZ޶EtҮ{NZ%#Ze5$7C0EtZ )<ʛYd܆X*ًTf8YJx\SsޥIႊR2 NWokQ̓HX6_eF0Ƙ{1ǰAY1]1Cyn87Nc*1[U?| mnTrw@}.@ N)0qL|Xm)FJ&TšKyy0SU^߼n$Yq=\+MYn|X:>.kB#.ou1\3Gpf\[Ռ6f!.k"E:tx0@6.. ]3 ^6Ð\ /S :2 `.& MlC 3is@ tdH0AcPyQlFTǵC%~԰0Əcۄz-]Һ=B~tPMOTGQƠbs"}m*BojS7(3(+ I[%T)TXGyQihlΠmRZ` oP^ u@dž.:6@ j\tf@u۔"ɚE3RLcPG6#T`){"+P[O@ qP Z 17Q5[W%nqH( 9tM)2TM7pI*WzAYۣ$PBsaG)Zx!#Pi6G5mqA}TC= \j86'l| -f^:E88@_:Zq]u3J1_0C6 ?h_ ~%|sqz")rq97Hؔ7;88jBK_ 8(6En O JC}\ǠAcMƢkA,l:ljZx S0:@;PWZWj,k[]ur lؔp9:@jX~Cw*ExUoRw.JW4AqB Q:4TnqTػ?W(N#Pk\4@h0Ow*ywuWU<֌ x3:i6NDƝi̲\ĈOXV\lPmﳛ[YoY͍5 oҥْ);<7Jit;mG-vn.e(k2/Iÿcˈ3FKRH0eѓ}$}y9sp:?p0TtAͣ4PcXA1/S-}(#һ~kv2uMmx+o:m7`>gY\Nll1^6<֑NDOm"}YB.)E%醈v[7\LET=;$l@r fƥ~*u_LU @ 񻩶o5ˬfnA)!-^\4x^qM'Y犜|u5ˀ>bCh:YZmQ(꺯qm_? /?<^,ET7΢%s,eMSo*?%qVxsQ v{`f>=1xu_&N忴NEڰcEl~.4,r|gok]m*:,h]6Xt8^2pɆ]<ȫ'C;m.z8\Fj˳;vSTH"K"T6 T ̄اBnk<*ˬ;-Dɉ Zu~mH!CXHRt, 3ed;_6 %{K*)NKpT2AqeW*g fRn+Mʟ&4dUwKjôr\Lt+G5gmeM2uz)zaqXL52Da Ao8Nu+dl#A ԼJL/fa)+uD\\ l}Ps[',M$'I^h^&RkB.M0w`n _^j~ZYo'}-/XwR6dt\s3]َd,Ig5zu8uթxxSWji厤=,hPP\XfKԩ=UTSڈ_YoXe4vnKcX[v<oWJWnzqDa1b7ͻv 0Ct)-j2"kbl'R1tj(qSO-f^$., N,qfWޒj 2kڼaYZ(-86}ߞ cg} 벏a62f|| FȘ"c31 7I ^e;z.'vJŞ=l' };Dف^E 3S€T6 zeM@9o7"ְn%E^, -Ycsg\;U-i+V]8[bkKU\]]4@JlͰk}6^[zKh:|=了 azf&aQhY. `, @m\=3/m CM <90m@C m@1pa^Sfsn[2'(̲! 0tU̐C& &mRBFж nZMж °m0Ob{Sg`1;;&o;2et !́8Bm2f=*B>I\Fz]Nz]ȇarUC a'q٨(!aXef] LY=gS8 3R=|( @9@ߤX ̜203Jb]B쓲a>!x`@y@$ÜARŇa PVPe39Ag̴(OcCVpB.>%okR J[xzJ2jo(ŏQ2& e "6>!1( F9pn②d?>9)XqB |2hz)+B9/=rBYt@i4z.##UT"sJAE<ꁪWx*૿OZCRZbTZ;z#CoۢDi 9 l,T5"T6W"n wa!P]9X7Qn_&%ơZ/P^@P}53ʻQjT~s;={Pe5諔p "k 7T7 }]5I HG}ҸIT7#w(wsn{EnСmȯp7ݞs9:Rv˿KQ;zeEGŕ-[- r2Ѷ4a+Iq&0o;'J?^uU3Owh-wiJ'e~[v̎8^[vn޲Ão辜_}9vޜ9-g_}~{uݫ?^^ ]W::*.7ܵMܬcW8rN^D×u{*;nӱ3_ӵ]לow3':hpÉv';hpÉfep>NHv8% ɾr{ytx|3j{=r}hm]K1ivrfL$o1=&*lz͛pm|3|bMgPG=&ުPs-SpE6[0gtEsZ_ º!&y:Mj~f?y9k$췮xLqσl8f"WP؏&}\*M}vNKl."ϪD|CgJ-Ӆњ,N'ˑл '1׸R R cۏ¼Y<֌V$撚'DOQɧ7iEdk#Q q>D;FG L; SZqb͂ƟU8w3.V0 ]fiydxދQ h$qh,UF >/Bԯ}"|pQB-IVIᎈUTRRx&|7s%BO|"{5r i|:FUe˲Wΐ{Un]ÏO3W,´w/&wΪe31,O6q.s$k~%s.)[,AQYeN G_=p94s`V-k_ s=~j2xHWa0GZBȋV(kƜ/+]ߛL_?Ǿ!8Mt6C=r, -SAaphC~_o:.ѴlD]be.P?KEJE*?lc 134U]+ |1 F5x۷nlYTE1\I5wVYM7Msvh{7tMd$snذ9˘sE͓V>YgJIJMLƣtp@|oc,;Ӌ-ͪ< QKI#YW8J,uoW!o^kye"B/Ʀי*Z&l^#Z3 :.Cx `*k>Zͼ6gxԢA21f\:ڲAas'fSW ˑ0qa۸T3F@ BIQ0[U&lB @i[c]Jlʬ@鄩 G3aCQ95u@31CC"*@aU*2a68a04k0.aEa6w@@0 K(-C6 g m$EXϦMX&aJX#l70S<K',a20Tal-m[%(aضqeamY0[a0PMXC880 30kf:$2wBl*d*c*' j$nm9hTH!g>Pn`PŸ)6AA~1Rd5FkJ"6jP nJq8 kP_cPO qRJ (nb6J);G-)?mSv(sC|u]([E(`mSa00Zd0 ϷCٿIiPJĠi `mIgR:A`BL`F՚IIk2d`R9W(h1n_ùixqPj@/>Atts(;TOt(75"{Pf J3e Ci\kPDAIXIM 20[rt/q()an[ B9G&% 5{N:8B7Pޠ7'\#CybJ&޶EIZsCy4ǡA n6? @W m:`E8q(ooFɸs(o87h6xxۤA  Ps! (5J,Cy(oЂrŃk=9d4wOG87%P_cwpn&"dSNt);ArPAg 0vbR>tpxٻZ0HM6D/d .l>&4jO |Ri^?QʺA'i>XkF,c-]dO+czL\cR`4⭡ӆq% P k*qt»CWw gyuOV,JRb^e5J[s0&&A ,Z}}xM%\5H&O\g QHf@u#nX,,/z߫$Ez[."ZWn߀bd6wd苀->j NRxLL[>L뮗TNqsy'WtRnHf̤L~(iiVf5[ׁ«ѺtQt~t8v;A+ݶ(d[kk*w+hl,VRlmKjݍsSsJalSyTQX6*r 7kG+Uz E:u @DV]۶@jW\E *]N5+ۘ\?Spo=yk[cA_LQ.-f(ݪRsuwAEzm 4Rk J~1>؟CtqW!8xXAy[){*OɍRSI~h#ɡ~)˯3š͵ۻwηraeuEoM([k-'_Ob7#a&.ޅa,!"6 v0k>#kDv.۝Xlbcp]8;ߢ-:ߢ-XlbC=34'kN3yš?~X?'y.pP{ ٣;{tgqp\Skܹ2Nc7h&z?;s'FKi/=ٻ&ӫh>"{\gO~̷s3x3/|g>6>zqضÞQU1qJ#uCOوWYf䯬JE(<1dus[KoU۠lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0021-EP - Twangy.xiz000066400000000000000000000061021247673406200241450ustar00rootroot00000000000000\_S8S! jA’J c_;,-91*{VKjZ_w/?¢ FxpX0 ]/xh_μE5'/ V:4x~/ v98 s9#EL1At7u#㹌:(\8l6;Sߏ1LYĘ -/dz"8^P!@ªPNZ3 )sI|FcTr Mb8nWh_ݫ?WG@+jcw4{c`8L7 X8@6jqU GeX+˓VYdg8сg~je٩di}"WNӸuǛoiλ],nę%Li6q\wthg4RWDx,sSWy.ie# _0HQN]kYʚh.}ٺ,Ii:.ӐF1#%J$w]hC=s#LL^y-8@tf9 m08> Z{XKl4;|4,?nd;ZZ.l;DMPFerY+t1klBmh6>Ӕ&9*fΝ33Ԥ.&ID+glsKԼCnmFz\}&Aw;;<|71vS$ir Kg0ih^nedશ}4ׇ`,HZ4b@b?n,8Qᘒx D#kVl`r*`ghZ"0r%{yp/7A]`? cYYW:-@Op-`e95S. qAz-3yl>zj:eF9P>,l:Z}DkLRUMXl 9F‡2 8XOݿZ` 5j }{eY-j7{3̼(M.]&!4:H[.24:ڻ YOuGfU87~vsmxa(fVq ^IV_ h?hozdʘ!sV";?.|#DU  Y`>YWKhL-»`&yP}_6υE/؜;]N-sCV!ϷE6BwV] .u]vVu]=&#I-δxW|n͙FKúۗFb>r}쎻+tSͲ_\!tKNkM##uy2%GHv8k<=RW Y ;]FZh졺=TP/a%{nVpCuT +X\"^=`"7E"7u[77&H6—vTQgkMxL'c[(Q劈n4L2r+Iu1 B?dɺJ$ <.Vlq]JACK8QLOZ5԰ p cV^4aFCGEx6/BHSy[cYe!A]*\Ryw9\wI㍢5yjT8]/UrJIjΧw]LK9nȖܕc4`q1KMub bf7\: dؙA͉Nͯnh<e䏚!gZJ7wv- D^ 0DY=B4^u6-db17"C;.Rݻ[ժXSLU}v36,_FDusmـ9s;}}A4F?S<">"GڭϢd(`'*q "zE4+9|I x 5L{nS{h]M^ֽkK]œuk<;yf'pZ'^UiU[ǕYv@ѱ| k~lh{>`lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0022-EP - Muted.xiz000066400000000000000000000065471247673406200237700ustar00rootroot00000000000000]s8_=!&@lq .l [;r16kch`9vO31jZݭO>c$0 qύi˗O_O> ?L?N;7w ύV?qeyW7!1xҎhfYlo<؉׀N}:௕ZA$͏Vza4)7g2t8QNKtׂG14NI&ƖedHh~ɒf[,2ǥ `JȻt čvLp;KEߗ2obQ G`4{P 32x0N$&ΧfJw"t8X-Hh=,Xҍ ݙ !11I_<9a a1lۙa| c,bdž"#JcMA/$akJ7Kc8y.|QmP2B5-?7ӥ(?gOi_R2U8}w}y) +G$0[WEw8V R WqlV[onWEBUMCn8})4k:o/};uJ`o$^!UL_E3FA3™3 /+%sr,p m >,#% rt8\k<$D^ HWkgrJ%Ql~Nd& B*j<gıB;J N$\ ]M܍ksN%/QǛ OT2Q,ckbPȤv6*01B-SӤ?kx^U':_얲,eőE.vwcCb3O :k_zXܰSKk1,0V qaKڣ &^<7N2U<:}\-!]jdVc1 kqU-̉>~{[CV}aD, 4]:ZPϰ1|wa c/GZe?TPuہ]+ a3h ; oM4[َivtaہ$l:2 Zx [̆Z؆vnZ6`ݧtb1y k*yd},ߓ.u"})k+ٷEt9;-{?M޹U<`$wugA.ex{6ƮQ'qcY:I{LƣZsT# 9Wz f1b|n,(QZ {͗,']TJA%AMGSJ=9IEWhnx_sɘzXR_Ӄ\Oļ_'+.n[CCݔ[ŕYTѮ~D kb^ޤ蠫ݿ:X:.K=`w [ddM"z]K+z0pHy~ 0 3ԅw).͛[B$:+0# 違6b䁶14R~q 'zg0n)׭ 7 L!\^U "sO +ߣh#1 N~|%HXXI|]|}ay@~\RCDsMz"|4ExQyR G"(/T}CN?r;K~C(U]H%b>-”xOuIQ.7TK~R*fΧ7{SwW3e/'Um[`XtEػ}8˒9\4) 6W93Az &ɐ#Sg>.Ýy^ž}Na aE1N뷧>`~N XLv[Έs+h`+W\/ j〈hi@^1:ܞ@^FmA\Zu`Qe`GYYUiq=`=9A1hB!P߸F<)AA蟴48>rjA ?} 󚠖@Q Bx'rm7 LdzՊXä:NR 襌*ٍCWm@g\֟Z)6׎+ƫRڼJ)j+۫ƚC1ƚ 7hGņouy ֤bqec;\OSFA}9[?Nra36Q/omQ]ĺ`ʹi;%жSRbb նS]b;նSRY[SIS@䢤v3vJ@OSPZ pE5QkUؤ8-!k+=쮭́(me׋h%J%(:vЎSIJ]}ӪƮ2U:5/Q+ZR[j%3ݪt% cc/+G"&)wlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0023-EP - Brighter.xiz000066400000000000000000000061351247673406200244520ustar00rootroot00000000000000kS8 _Cp !,A’us_T&Qw;3ܯv,Y[ N%~_~n<뉆_ZɪeQ,]K~~uo]N/nG?r9Kqtb~+~6ΟAi/~9k}bs&?m)ȝ$^'Z8t;O[N`jzw3k!0{&7liH\?dCbX BW+8MHixրxr)p)~6&x2ߌ&sv(؇Q0=ѭud똆D4;׋uFq]Кz.i"ؤ` k \X:* 6,ݏ ˍߏ-[XtMǏ-7<EV<=&?o8Ov RK1$'̸K`2@7G7/T O}1`Mk$Cx'sN #Ivds^么K0>`|J^^ٷ7$2 qaxs{=_USTTA:ܝC$?Q/X3G29&bMbWZY@/. μJn])"alͱ&#RUr-OdSDj9(v\?B4e ^f $! &W'{O4p4$Ka']ʿ.;"C 0y ;^V>S~G'sEE1 j 5682\hPv(;vd Nyj9@V]'3xgFRfZvGtZLCp_ D_BmwLnTš`.!c]rU bJ*l=7Nf1$-\T2eD5-^ݍ~M.<%_h "pˆ$"hJu$P`~KɄ͋6Xj9@Kՙf^t˭ǒNZ,zsXKwtm DgQ:UslRE`:`7rcZ81} my*v4Ig:vy.5Cgĩz]}7;ko~*dPWy٩QvN=G$?I(\iTh6 'g1c1_` $tFp@rǔD[Ev@Hy0'!tXDK 5GFxnȫ7cK!Ñ%'.;d!;Bg3&Ap{TT`2(@g( ׃D0 ʠN$nًؗBxc:_+:lNJCz~+.bUFa/"(/Fp fزqi#14^wLrիeU!Vy$Z;J@ÇE+Gf#-Ćm)9.shw6M7@Y U߃2TeKC% NV̙mTH.ht1HYݨd冑t1$p'")%̡AG>a6Nig GfeEczgjsY^=P Y,OK_ ek%uNʌidYbb6' ƤВHۆ a>ٔKh)M Ļ1]Y7g}_}$Ȍpf]'VrKbw?njJjkyp>UHyAIA"ޕwN˜3 RVs*Vv{8YVėn*]kڻ8"R]|ٱ0"uY1%"u:f5,4ՙ\.TCU]"uj7 /is=`lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0024-Far Out EP.xiz000066400000000000000000000050461247673406200240300ustar00rootroot00000000000000]Ys8~=)QJ2ڒFI„"$hkdbDn4է_| -h)0pCϟ[/_>f|= ?߂ҧ?>xvH[+?Vu{l/3ڑ2v@8"G}>_0YϭI&y  Ho0i)*V`ҟt"o`<#La0\% 1@At\Ö% >,-1&Ȼ(zExFp/!r!Ңf`4. E$곅~ܒn+'u\۬w2F %8p,i}UCd1rhJ"TӾ鄂GEy SeXyu 0I$}>X7~`}*g8/e UۋY2]n`8+ph8O>K Sden}A 3*nnU!5r"z ܀h+d0dpOIx }2|k StE 'b( % ҁ3^򅽡è02vtQFaī0@. WE9ӨȦU<>O,b`>y0xQQh4 3*Ba"]聘X'aH'2N<_ݛbkjM&M復i'h^2Q;姱5qI/3O0 . 150M.fGi\H i["H?6R,._C8J.GEiwq4Yû~ ocz5b2ۊ^خhY7!(&N2;$ZB8QgIə@0Fp \Sn`r>H*PV9^v:a0~9o4(8oGi:qA1艈y{>C 1 gw5TJ.->ng;A&GZUޑOܘ 3qDl| X ZQƫ;V\h\8k,hcTEDR>ɳ<56&od ClQ6O+-vm0Ʈ(heҦx]F{"|Q"HH6nK8H"P S>Ur ^S` ԩBIaa\zDa yQ:`5!AuWZA(tbUKnݘ*%,c䓥?׳gVX3aguXfJʄNU.]lBm sf)Z^'MnXup ӾH)xf8=.u@ԁ"]3 e;Q7݂}M<$Nһ]>U׭}U5NX DSzhJ d0%5R_6u)ej+ScL|Lb gz5 .l]2y25=Kfj.u~'sj!oe*oM_erLƯ2~=kjQ5ʻFy(e8%)NpFS5r5Q2 -dh35Q5xhb$>s} ڰ\Vt="GPk?8W9 ëjݍu| mgd: X!)^ieE>*X.' +^.M,'0zKhRgWkc0%+ⰼ ̉ Ő׶0NNÀCFJ~@ N6،a[lD6n`'b|Ω 'b=kJ:Uc*K x[4S%|}0;vS&}d]\D ZNQe)P8Lq9ZR*UsUǪy~5.`sm5hQSޑQ6jgwo;T ݨjM*=zlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0025-Clavinoid.xiz000066400000000000000000000153021247673406200242100ustar00rootroot00000000000000]Qwۺ~ϯa6H۲txmyOc;{mIU~A $ܔ}鍌@`0|?}F,N{޻^/J,N}={;ӯo~ӫ'='dzogaߚ?>O8)~9{Sv}7)({fӰw5ïq>5z~yvu}q|{~uӿf|<>NoE%S~)<ų8zW7[yS,e'Y\=EIΈe }48hk*9}V|d(^A+OcA8eI|MiToYy_˛Ord ɜ I/_6sFqhٻ4&iT n&*^.??/ѬZS|ͺuݛ7U}9]/ FU忊iya~{)7JQd'yHSc'^D5F6/PR1ϋ1 =3MJwi:/'`F T% vrыg*i%I< a2K(Zqew\>pq#~E꺨`| )-ZjWVYI5vڄ ˃UɨOh,yf5IDqI8{6q_yaF6ۧok}nxu~yhR})  j!TsBO+TLKJ_:nw(&)Ԋ}MŒZ(tk' E*Eo4\fQ(k{Gͷx&mne{Ѱݶh]m^ꏶ]kQ֤o>Eۂ^ؾ[Fsz#()U5 UGs)QU:F too@lݦr$y.6UԼmgtvZu/T\i:zmX1[C76}ZN\:E*t(Yդyn:;ki')]:U]On./OZFW꣜U_ߤO#ϥř(SS2ɫ[mF$k9$ eIL?,w _iOEy׊hJ_Iqܓe}ƱN9hsȖQqPe946d,#8y̌,{${9e و m+ Xa-qF7C`kĶ u@טC&UcJȘfaFla-k*nrF 0.|#IG" |0366@;a0@>;a"4gaaTѩ82@hdJ{}!;`hd[F{$2$Yc0N{ q<;`Ya0v#ݼnr ,s9tnKߋf\ܚs;!ؐCdskl\qXf|r& F + ܄~c@23!Tq6D>h7w3;if-Ka0~¸1qtR]$0w_d6O#QmةB>;aܩN^f#ST!yt3.9s$-{%di&#dqv72nK(zfcܺ#c'H4wvfȶ 3b[gf݅]z0V,zsܘG3P8zd=GJ Do9RfHM7Q̊1>̣p0vqz6y..2iW\7dB`5<91QC~:1 V!o?{Z9ß5=c?k?YX<@y^cG 9-"k\)5dm}t`wA P|kⒹuy(=ZGj&]1wPNȟyXBlEBlCqyʼP0c;h1P8@C=Gghe|0Fbm=]%(*L(,s`c ZNMz'@n44磸k3(nz| XP s\m5^4cu#_.s7`D>5{ 7|8(n[|7Ĭ7W σ5{>o&|74fGqF{(;c(nF|7`_6(n0nъT:?l'hEVILOă,gb`,T8<,:ӌvܧ—ſw0k?nQ$Cch4)`y$~TRE4>ɯW:D=loouz"*s[WòemJQuFZ-("t*f%8nN?(b\>0<_wY´xF]RভKLuOղDJLEC4%Y$W0ns=`l.^-D=FDA*-{=Er1ٿ@Zf,̙8.J8E?H_\: RwqSFAWi퓂A8;c2o1#`!q!Z 2nUE-΋R-1o5Z8Y-3pq j ^6ج9QţCd?EXZ닫 [z#oH]=EV\Tj@uW_JemÁ86y% BR0"a俕Vbzv _ba4Z1;wbU8tǢPmшw x4"zHcj ,9ZEJ HNW5}tHN6S*:1FP [D'U!4n64y[UD@W[SƵoI,1/N?}8Ry _8e]سزu[&;+zu)t<(KƲQƲn{ Z5:cUv/+Ycg믝pdY8aw$^>3NRFX/kIyu޸{0e8:oqqM bm<}Jݍ3r:~Ey7+oG#ylS[xځ"jaΗ"VvcƢ"1 KsXH;&&5XR "M 9fwBwm7-:߱hz|F;Nqgȩg|㔝!`^W/rj9ĦyS—^hց ENbbw2W"gwCwsf+F?᳧9¥0_=3NܢqθQuwEG{USqݳjA>%=~g՝7 {V]~ w"m2GDJR$/yDIt݅ȹDNUDt鋇*cH.D9u||P2Ucz|; .VolY|Lu~ys{bry68\P.Xij|'e<" &ȯ^/I,)?bZ-Ƒ$=o?ߕ-,* NtK%ɃZjUf`V~V˩[S4K֠E4CgFMn5}7C+lA, O<ޔc骏NZWOn)k0T7 >),xX+z'O>\},;'*O; 'Xq\+LFa\!aPpL^8 zQMz]}ֲ[+xu~y#S'F0 j PUظ'U *la5}/Qe#GmU>? ~uw7Hml۷~4?hCϣdP6ͱfė4 j4Kl$vڒ W3Y=GOPX$F6\B_ ElЎQG]v]YIr[]Dj bykn nŸ3uhJbJJ!]KӜEdb.iNޠ"C,T}HQ,YTeti|集pLD9. s/'s  deAV.Vbe]8l=dl]S- %NG_ PT(i*/0JiN;3̘ /a(]*?.CR]tJʶ2.CyR]-l(G*߲CRٖQT^E|.$Jʷ\FwW(1*.: Ee[vʊJiw0ﶋCQ]FLEQ[P ;ta"]6tA!KbNY A!m!FcXa0V!FcJ'cnJAg 'L7ؖXa݊o #a0B+ #qc0V!Fc]6vA4/I.#r]F|\\}svbEy2N z3^጗F@xit=}nm{_ނ5 vT^6kj0X74Hĥ &2i#-/UۦFX-Tl$-ys5q- H5X44 m5,\k!}U#V#:ǬNXHE1}52_!߿HnrY$;m1,69kk8Pl6m6@yvP8\a3klly:q:V͠@q:QNjCԱ(< zbPF:7 !X̣`QF< XNAFz`:u\`G§Et[3V*,eV̊5SBq8iYϚTzNMjVSi5V\#)|ހ Qgm@t E:F;ZBKeإ2Zs u4vG]\kf-ܕ s+ݒsM\J}k]l.GnzB %$ްM-[kxeF[{"< cťle9 46jJvmGFpE 58j w`xwūp]Z=j+FTBY>cu8 RWԊAߞfuw׷0}pIlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0026-Harpsichord.xiz000066400000000000000000000121231247673406200245450ustar00rootroot00000000000000]rH}WpnU(\* %E+ƒ=1=/$Lek~A2AƋɺ,$1L(? I޻G:<_Oqo>smJ$x$6OxD[=Ir"ܟ~6Wx՟OJ/Ϯ/GWaߜz_/NG7œb~꧳,2|}ˬ}FYtp5nCkYElp&gb= l x1~4(DI^pl&8P~3Z,rxߌQ4 jТw$ej8y)X흏N/Q8K cvkO6OPu=vDa"qب 6<ﳋE~I9g#-5[ʉ i ]UIσn4 dZUyY yVS@gקomb- ]%ƉfUϋ߽&kSQi.K]#7l/fEt^]vRHzwbsۋm/ߛa4ov%jݧ:{آ#οjNoY]the,RcUyxxU*i8l~T.Cvl/O,U}YlQ޻S]tܻC-jעuCͤCI6iӛϧ;gأa1SW,$ hUY4q_^IPUfIp[SHkC:WoCE;tebe;VrU[Z jǮ6VM`6;D5u۱7GhquXrX0A-4- .1SE/ L0lm %0]ϒ`洈D& 9lvL0dG`r 0nLakL0Lq}6M`0 )lvlf*jd ltbGOE0L`ljH)`UfP`V(al in Hmܚ$Y&0іNMZlneXc.,m @qK@ٔ-+&9ƶƶ 60;{0ّpIapl`m89q +5R$ .*Z]M9)- burq9hc2}R+-҈U 3yv]5@aM(6GBe -ذm$ XpS04ogoAc VP^hE&(?ہ.&\Q~'I%(w[M9YsZPhj/r["QS!Iq(?)?geW PbBAQrkdo{T |( 0)B!1XbA\"lWXa*A;T4 *QsP-׈v!Q1uKRC:b Z V."릂&;Ttϩ.<HQ1*Hv}Sa2Hv@dME ݀ ^  רXS`F7 *\F/`טP*bs*dkd*f4ཱTԀI X&Jɣmh {|5T܀mi!5ir xQRq:|{:\wq%EK$YZqe4"JsZqR1M,Sra,IVeݜ襔79ef+/JB̉ "V[skV͟aP` yaΥ,ld-ޞ>1! ٞ4F%C6Z; h[Q+Tr./N}9]]' 0Lem:~~?.>]?N?tQ?~~?csOQ;,6|V޻{W{O:oӻ*{_ڻjzW=?INIR%rm?yR>y]MN{tpҽ_?7A~iR~iwKn޺/~{bn:mȥ_F/~ޟKo?޹;Wߺs읫)jwE緿ۛ{qعj>G'&}o緿-ݻ{sK-̓׸-[u[uv :, ݤrrL)m0bFZlncp5ɉwW},/oF.N/GGxtuY+oYjѧ]r'Q2|)P8ͽZ!?*4]&)LlqwwņPvgsǩ{>49%"Z;h.zq%0j}>/4hV}Rzޜ47Y:%t|th;hq0W 4m l>}D|.j}GJ߯&P Thl/zW7yH>9nDk6*/gW˅)k|ֲw յЬ9ê/υFJz0'Q>u:iqQ4(cIDD=ߣ }ҽͽm;[Wn1݃MӼyEsXn9^9z=zh5"oMo=onչT Cpm@\sXP~e wXPhk ,S)o2r,S)459w *.J(ˮznOtW)tε.d\a>~DD':hpÉv'ZN0([P8\bkrqӳϣ;filE1 Nru x'qkk '3 MvŪq! TA 6a@4a'HJtхNi?Y+t׿ ߞ}wOFlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0027-Toy Piano.xiz000066400000000000000000000032731247673406200241100ustar00rootroot00000000000000Z[s8~ϯ`00Ӥ&f(;h,Z[LŲuӄL_,ѹIp(llQ`J.-}se5YK~1|׳>^]|frxvdq2ߕ|"Ɨk#d#m8-O޲ 0e ;6&K'`1ҰA`.&i>; S>Cհ9. >`: ?L"`Xrr=S3A1$aq!*Ē]…ZRrR3n/ :H `o-K$۲FbvM}_jAw)?޿-m]]c0Y1 1w ȒFJ@a -/|AkhQ61A.<Jt#t,r¿k YE&,.RdR&pv+W8n I GU؉{(RP&c]ʬ') 1#*K VQ{#$7 t X(1Mƣk0M[$ Ppb`|Wam2ys0#uϓnm-(NEnGj`r烻>nGb,9!! fp=L|>߃Oڒhq#Ґl!BE!]b|e'XȓU78ռ-וjj|QG?<#9c@:gH!ALO8s`~Qw .)AnĸZKii+..Ζ5t{)lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0028-Mallets.xiz000066400000000000000000000032241247673406200237040ustar00rootroot00000000000000Z]w6ϯ|]5Ɔr֤&f,HFG`jmɵdR'%$No=zUDB Ô\icn[h~^tWW'/^O>֟k q:"gC;HK۳L}I oo 9L2 Ak8p!ab7u'@|a7lM bubtm9_w>w7t[~0CTn{ä?a0G1J&'i?0|f-VxiN |ko06[Ql cq[ ӳ|߹u]*<>/㚢9M0zYbqd/ >{-tK@""AB @9,MXL% ̖x ͡,(*qxsVfCTq.t3ۀ\32ޟ<ܔW4hNtqYJ B!w52EK}OY]_ X2]g 7R3Ϸ+b{C͌7b9DVbbRu0LH)Ĥzy׼0Ꚑ @B$k[!&HDP*g .p#?247tr"q7McۧmA)NŅC<+-^qIOi1;iDc oB맑P+](or(Д~CxQjnhW9S6 3 q!Kmp+LqQsO _/gJ}q]KƘb8qJُS$T5 @G7Cj*,M*BR+vδ[gQe!>h1F;naOժּyοyZ#?کNc45K~ƥy^}[QGݮ>N}Qk܏nҭqG5nIIG{i. =ߛCǀKhcX;9JaYQ7soG֎$lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0029-Steel Drums.xiz000066400000000000000000000042111247673406200244300ustar00rootroot00000000000000\[s۶~ϯP՚IQmz9Jr` PKJ__P7^p!)89x%X,vWľ˷ڡ0ض~6bcqy˧w~]/??حܢM #ޡ(j 6Ŀ6xҞ/쎜bFgV))m#`?aE>-!#FzL=1E!eWq +C=nG8/t?qQ?'S#oӂ"\6qh/ t qDIAaka(2 lEOD:! : k̑%%nJj%ձd.yO3jo`uEH|P«TJ,77`yYl{&4b8>16yGjh0 nҍ) m`ʹQgSګtN`-Bd(O!,Y=þ=C!;[Bwm$In\$t B!!^{ p=a0QɌK[&:>ϛ5)V}k7EpӇw{+D0VHyF.K`È*ta@1N$Xp:o`u*mg"y&[BI嬋qdfiZB8x̾p0~2H+;\Ν);z$4(uj7`avD2SM$~P5E'RTTAL)Eo~vx7^毳K]_VPiJ;TڡeFp39\ҹ{ѹ*hWA Uй{ѹ{y{H^C*Piɽt5^ɻ/#l2ȇ+5 Dހ )?W/wrE7VWxwW:=aޓ 8:/4w*:a'I(\套`R 蕧/ y>RҚ*h"ZC~4eyPqIa|%Q%X*C";Xp|ƄaaYp5bEOSأ8pI+R]L9w:/(z~<3H!$Q$7ϫ4KLI~%feuq̆@5ljd6:3O ҩ Q5}隼{[/e>P |Z^JbVש 3 $gP 8I.0?Y9o0^P$KIR~)93 /8%[(_.D"~7΁z%uꕌ́W\ 5]d8W,陯P.X %o`!uTUzPu9Xco9X_5zklwjpCZ H-iž4Й}\8&L .$1-{^r-F$]FiU>7n]_lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0030-Balinese Chimes.xiz000066400000000000000000000035221247673406200252100ustar00rootroot00000000000000Z[s8~ϯ`yo}!iҡę2@ dg/EPk,גI_27bv/!9::7sٻߖAmbIxYwz 30yӮ:{7yjîo| vf ?ֳ+JVxycHHg610$M;[c0%$p.k$|w$|uhfq'{;yo4޲qZo`} VŖS3ZR8Y5Dh&qr(f\_d Vq+gHbnɪƓÝ7?}vlӿ0![%-5z1e$Z6 0wŌ,/՞re k{j0k/gSWap% F^pQߞ [fZb ?ɑ$~Fj/:ύDžd wW~GB8 T0L"e{9!֊!!u (#)8> h=(OB,LJX'I%U̎9}~o,AO&](>a93w;˻Q-=F{RJs~:sKmp-_Xc(FDl xgvSG0 y>Dx0[=-=Yy:fp"Cӥbh Bu\$!p ~)U)[ R"agz ŧ-#. .x>=U̖SoFާo{4:ՠ K#ENG"p8k@A?ǴcȐ [^Q1hg,4-f @A.& `I!q-bz ZK_<#k^`Q5֊v|!GC jɹ{[¤w Ip`JX'd$γ53oy=)n~; B]Ib6@}:($ygGFWXX0l)=tyrCCB 欻m63-X'JBou_nb[-C#;6|*[cX3Ӵ9Vʖ 5mc/7޿{lv3OŻT+6z{v:ԍrC\N*{12DCY] -C;#FHpH*Ǻ>}ĥa'.3ziI1ΫHiN1mL1 )dQ9[,cMi1/1Ǻ>qꦩkxA13[ CO$6Dq~4e* 5Q*^pp'1da?NͿ*e;7'֯$#V~T;Q4|Kv~Bk:֍XWǺYXcݮu:֎]! ѩ0 #ҩ0$WIKzOXnndZ~ח5ňnHT~g+=ݡTPѹsMt3u ۙ`{!\RyИ$:YNIdRZ d^ж10lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0031-Muffled Chimes.xiz000066400000000000000000000031571247673406200250550ustar00rootroot00000000000000ZYs6~ϯPP33LM4Hr ! (D qPNi;8 ޼=[0Lɵk"Kbt/o/7or;/A<}6g#~ɵ; &Jys\I7o9ruCɒ-1iMd6- x4jkgڻe; e((;Ĝ+nQ<ެ7 l;0;qXDuLE(f` I#+؎ !V+h밂%\K_|Kawܖ%R]U|1Pms3J9 5{eĝ:%IE$4lc΍- :Kg_6\IJci6O,-`F f<* "1ƉE#e8st/hH_ eC$1U'Sl e TYOG% q JK^G#$7 t X}F`xd ⣗Y%k*i&(D ri-^[tO肱Ћ!]+b?2HL2I~i5!F k:Șû&1%x btNR̺ `ҡuCDs%mDAVV[|}"p#Pǯ ;*Q~5h(e]'02^֫B1VQ+0յioRU?e0[UU+- '[> ᆋ Ea wϿ^)yתyV~SW;Ѯo\}/=p^FGݪ]u>n}Q_G}U׬|jLHƌjLIrU~!-A_ugtx|ݡ%4U? ym cVsNz-LKWn7J 4T'lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0032-Drum Kit.xiz000066400000000000000000000235711247673406200237240ustar00rootroot00000000000000}KwH~>ze"_x9j[Zm-SHb["$*ͯPIL >c̈G2F_N;$F/_o?ׯ?}zۗy7s?Nk4唟> ӟLY0o{O{U/ ɗxxǫgW{7= /g;&Ys2==ܺSݜw]}>=yӠ?feW_nAӴ;N&pNfO0MQ7OzߐemNI= yhhv Z{Q>_hK;P]\^|~y\~Ȯoϝ/[z&i:?$A&i~__NitNFÓd~~,{'I]r{'移dOC<NnI溙gח?O޿4ēd37FۂܱF-/u} G }w/n?g7˩w Dzצގ7iY\Jn6h+,r-NLatG_xC9zxg>to~6+^I2O_?BWni75lDM|ŏqpl{f 7Lk=soi C8t\:$) b?`M6Y6 -m6(Bz^6U~w<&4){=(>φroY_o~+ѿ͕w?X)|^f0K-_Ҹ`ĊF;d<0vɍ]r>3.K.0v]*߹K%xcLUS:>\_Iz|(ҝ"ialŗP;~ ZQKh-rh4~[}̲~wPY ,КM)>Ò_/fZiI:n;d欽,b&ݵ%<8Z}~+`s|z%\+^[\, ,SW:L4c=2Ǹc>^|eU0o-_8im4~R][./,b\7>ILteti-7ۦUx?O6|]~;ess{ygkWϫW\gp0 &rqP_ۗzsEM4\\Zf]'My>_Z;oC$Y@Hiozfem^_3EyAIy=̮g[=_vn_|*K=,sφy}ޱW6[4gqWb5~ink r/W~W{#N1\_7sxo>j^YnzՊ[%YtKoJ_Io^Nej[.=ုex{> m@q~0<q:taz뫣L/yo?׳Wor.+fXE7?fݧpM,`(sETm!1\*jdyI!.YҖIjcU3/UqH_15eM7g+ 1k'~t(|맳۫k2zS 9?U(x)SY_:/eBnFS[xTF.(肢 mfF/;hF+{6T"cRȭ<}l-rdュ2R K쁔j2dT$s(ЂB -FȨFvH52.йDiTΗTĩDF%2c)8JdkDP@JdAPFf+/6U(肢 .v'Y;rt)9sIիyD8 L; GY'@ _uP(* <:գ4OHUt#[{SE/a'sIMw7@ )ZILmŇj?nxH B2@5!O+ g̃:Gٝk1昣D]aH͑ zߛQ*:QtijEG<]5G"_x6QIy?P dAP_'ႢQc1QX§'\UH]:& ݺRt SB(cEKyDbB*&bWua\>TY2&dL= ̯66!KHK_++$\cCqI40 S$L0EItKHd%tKhSOQ>P@>Pp郤<}ЏSOcUC=NQ@( % zsr ss@v!w_}|2p<V+VeRIQ&EeVբfCCqfxX/[TۉʞTGE\qQEg~+`E19ƞf E UE28RY d)@v7E2NE2vdkх肢 .( `X拇*!xȅsӉvW;T?!EStO=Eе*vVmDTx  hOlwu!ISE1\񰬈dˍKz.Ijԓ}2'>C'L.RT5G}XxQ[@` ^J(/A [hEHD>!Y Cg1P0p '|j TkZq 8;3'ŽCRc^lQO`! TNj27x<{!V$j* <"e/pX9C +g%bcMރY 'I]:;")dҠgh wWqIsk"x,P]8Łp2Px=A֋[p}u1cG nCmMFR6'F&*b lD~șn.w@˙SHt U^:#3<`uMbBʦlsXݪDtvhw ݁;vٻ0 }!8j+qJ" 1in6PYK~%;(<8(<8<QGy{)ۀqQGyqQGyq~FxqUq{+@yqQGyqQGyqg')#zm A,ki< ~i fEVެM,7NBvX?b]$])q͝G9pl!eLYzޅң>7 XC[>s BS?Bl瀷H 2<0"F=t[!snk{hDŽȄ9"h^DUU֟cF=XxKDAdnjo=D$#_<;>$ya#x ̼m*+beB/6+CmTl +2S@M)W*IqwߴSQCnVc9M?/>YkzV}28'x KnʰOOI",D)z",~Rq4M BJs[)DAJ)DAJ)DAJ)!%3҆( ŷ iH4 H Á4<48NH#h'IDY vJ#"kZ$._e{Q$S<~zAOFU0'U/^䓄9I9I[O@ی~yȗ  ̜)R"r$lfMh6fh6fh6fs4%-yl汦r3qgNSRtJNI)):%ESRtJNI5w_^`ХKCTOl`cإaޫ{f=m?TGd~o'D'<:F'|oN~-l]<7n=Ɖʏ@*"@*"@*"@ХvBH*F#jT!(1 jr۔D 5Yh+0#i!ioH'IBI#$dI#$mϑӇA4a!h1?uk0WdC\d} A.fܳP@݌F \\b a}\C%9 Y 0VqQZ@B+l@_XQ"І&@p? 8'8Sm.'*Z,,T,TSP/DN/aYm5¸m3EU1{$/ZXn/vKVVyuQyc>Tہ}x;+;j/opŊ do (d `Qϗ2,*^4\8)W T@Я.w7:K* _\P]zh(Ā58A`Q`iC^&P`504yRZ`IpLx0Lx0Lx0{L &@xwW@X?I0 L0 L^ _I8p`ÁFZ;*[d>Y iŒ9k9#Ā{1htB#,5MيaۆEXH Nkߩ!>$ a@Qa Ef}ĺR߶JNiū:DWbv Л↢Zy警XbPOq<? ,ZaMXnyg>8<~em ޽r\ga~K̓kt43wfH WIt6%ozƆ'&zjv-fǫ]?|E=2}C)wx?9672Kg(}[prhT_WǺz5KTwʯ-^bǼePf3XWQ aN@Ԉ-s[dMݦ>]KA(<ք Z]_\]]?^6x^x1+WR7Άh؝-`Hn_Rm441i:rou$=siMW*B Aid vG`5=?Y|o}_[e͗Jwx:'Ƿy {`4tl6G*c\ECu"ZNhZZý__;}p,(Io,7j,6J7/p7v̶5 :[_@o.G'-V-6&G~JÜ!~7R(ORw@Q^(38oɾ z:CǶqD'7E^@ϕ&aZ$k☨*th|oHGUaw5瞧o0^sr`gz\/^M?#옃QS){#%a<d8J @ɶ^+ScB:Y2(~,Y[5|ah pĖx`ݖmr6 o] [؆[l`-!`+-`l8V`u,w0fcBX3Bc2Bۓb{G` m/<,9 0 c ym"c y c xXdx1<,:@Y(k(_ P|-@Z 1wP>:̊A0A衬ʚcVe0裬uzcy(k"85(k#e eay.")'(sI'pdt*A֍3/=ep^p^8\%\}y3yyyyyyyyyyyyy`5NVX[an D +p+,/8^gAyVsab0`78s3W8sgCy2sB9Ǚ ę^g@:"BV@gA 2u 6`+v 3v{  E8,l@becv]n``}؟:A}?dM `k 1`kse v2vs*;ح!!v+3vp(kV(k׬s*;8X(a!9Z%Z}uQ(_$Xw!ge-PeP>:@Y(cQ ֓FZV `Cupk(k(k Լ&P@k5I*QkDJ*QkDDDk (TnPB AAx"uusq{quiVяǓ4ɓDj%VFkDWKswoE29WKyk41\^;N&9",묷%vv\6 {/o95&ܵreB3U.U;QU;r+?Q_Eo$$֫<6f|H"4ttOl+5ѩj@-oi鍆`8*謏uu{3CGjtB;j\W,eb<%y붭-nп7(>Շ.3  i9ìQS/c 1l|ky%No 0 eSIY?~%%-_t-?,a坾 rQrDS^ZujSLy))LY8Ygj-Eu4"%ET@qs?ҵf'жSt t˛믟/o^ܞ>.DXy?G]D}skYZ]~0~O)jM V~7u:>أ~U]aυ}!}!r~sRbؼCAbQn0(vr[pz[ȻabMXs5Cj>Sjzj퀚^fɠ:Qjg׹^t*QKz oTSFjFXNόP0Fy`rP0F86I3 &a[6Um˜G 0kaޔ}A_ot!I2EhoHk7:0!ԒLyю\fvK2;]\'"ݒ#t\ 2FT{2w蔸d4K~<%/FGg.]%߱N%OY3?4]lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0033-Big Crunchy.xiz000066400000000000000000000036751247673406200244060ustar00rootroot00000000000000\[6~_җ$p[frʲSi%2+s-4$+}EGh!W} |cX)yS_YӊK=Lfo*Ƿ/+^f|/IFP凶|/7$U# -zj%Cc>O}.0$X׿ ޠoڣ.xhqw8#!dzS W`1#bnTVYg(@$,Ģe$NZ RĸPZ_k=H =/Z> ]$zxo,+k&VgFĝ/_$jپRHSUH?ofA} !!¢;DCJ S%G091@X덽qYғqw~pQ.N^`8|LHq8LYyww)CH}k"!Ť('(8dr M2E`H 1" i{ISTȍ2SO"rA8O{I̟RO*a^9tH,ꬂ=zHnE* IqqQső]f֦&;u)C<&gCR"rH|'Œ>yva:R{{Q/Nvq/M&s(ݼ,9u۾d3G֦&EĿR(cmѱAW̦ь{*9%5_RO-TAsA0)fn%;KQRȥL:{KTaw4^{ǚ0uǷeXLpD ?)/j@;([UQ/AiyF3AVݮWT;z||]ĐEENB_9L|NS۪aO{3•@jd(*Hb<ƆQw~&@F$M^QWVYe UV"Y."9DS2}#\ ͡AH/W=PݭAtޣè  tM6>ntDI[W;XHQrm E @ n 2#vpVR^]v%=+zSgfs˘'wLan37OWpRGLKD@S({%2I)-َ~ޗ_E)?Jv{]Ve4jcGu%ThWUY)g[ZXeX [OX;Ky\<._|^T˄R?m}\]JS*d|TNJRbj^7oV~Ͳ]7M֥7yew͉uiN.ɥ94'϶9y/w^Ymoo|xq7IIYw{R/hts>k磮q>G:m>ぴx"3I Τ)}a35нv#='B"0Yȗ .7}~F)W˵r \h^nLvil4U^5hSMmekqbZū]?-^ +WȜtgNp*T^ fU0:_[)QClmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0034-Big Flangey.xiz000066400000000000000000000034771247673406200243610ustar00rootroot00000000000000\[s8~`oft(1SflE#lj2 W,xK wѹ&ͻ/kArho X,oણ}qѨ%=˚Wͥ(`47mxCI(]MXn0$G 3: Ɠl8TCojޤ`̌ɔЫF750`CgvMb 0Ek ֈ13! dl4L)(sw8|# -SӃ1"c6Y Ԇ*6!Y;u?W㮐Wۘe[$a:5_5sXA8~ gLW_-4mz1W@L]=ݺ(ʓvP$}8Kȅ9_;V$[?>,$8{`R7ΌB=DFI6Lq-t+LW(^1_!>"_9qb^hۭql3yɐ~xΞ{}lQs~m -`rV$`AdIW`qV֮QskTk=-!$&s7.VO}2ǏP>l"?)3A$x&l}O nc3Bʜ{mrӓu)Ir槉]/=&GGQ)S?dLMyϻYzHŕJv@Y=mbLǣިo?pe>}gvAB;N *uDjwOih< Na SbwcZ)ߡbOGQ}S!ɒ^(p|GJ,ֹ|ܣ:!0ю2 Do]^̬5B8Wki(0MJXIXv\6Lh iX ѓ w$ꋯ ]Wg'WWtQsĨ N瓋@ V9M%684;w=0 :Hf^&`=JK1 QNBy,oLhzpo~07yiהeRvd7g19fmt9vº= 1 d^h7guEϝP&B^uEVT{aO$ q@Q/-fLX[ؙa I* U8la+[q؊VaFY"lE`+[؊V"I`+Z]`l`+[1؊V b.` ئro%j7Sy|"aɋ9Z/OuNjeApkRs"J5S?u_ ;.Llmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0035-Numanesque.xiz000066400000000000000000000037111247673406200244230ustar00rootroot00000000000000\s8_=G&9\E#lbٵe?OٲGM&JjɻYixשּQBExo7CςgopC[zh#E_(B㑪n39YM^1QĦ1m6*mfۻ[nW2￷;`G|(rg@>B404I¯A°BА).Bdmaj-ƕ $J=rpA=bcI)hmYc`-6׸E.8sn4= H<RFUƚƵ@Ӈ-|^lVާ]#;g`vsb:G.4a2D薨II6&^`cxQegb>sK:]ZsUr@\'o|&gA3ѻěM`$8 f qLjd]0OE7Irf& gE$- uG*y8yvQ裇F"xdy7'xj4NaE;fVLt^oo7+GsvLuT6-߳"hs+w]xW,w]g{Wї]?D7'Xg (qG3nIp=iJHvڣa]]ʹJ|P/QjFz.NyhRU|LځT󁲥ak qDMb4`f -"//UL J<8y: M0Vkv\vijhx-+؃ʱx+V^ 28 xΠ:OG vϘ?ib?%MTlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0036-240 Grit Lead.xiz000066400000000000000000000047401247673406200243270ustar00rootroot00000000000000]r8}WhPUZKZrj2/,H,N$C_uHR.%h4}ٛՔqe$;"TsFlTHA7Gޤo{?WiA#> _ϓ'8li> 5Udz0쏦[<f?FVo-%Gm#ݬ[js%+[1wedf _i|R܀VEfXyt >&v*?&cƫogVn%jYG㻾8 I'smG# -$\?%'#ʯ+=dz{n'oM6X}hr:x<#$ZFkG/Lo\%qfkR`'dlZ夣QW% LpA؁똁_EY; <PFKfU9+.FVɞ1$7Mi 6 Bʜ*x!U",H>V3ets=Of.{_37RܜT0_KSҳ"ѳÏ'W|`M R,ZE#\S~f"xgV!RK/A+K/K/Ks %/PK?T'(4t2R -]hBK /Kԭ2uQ~ V5藠_h /0K`uVrKTӀ@R_8/z2g & `W& ` & ` &hLt ` L4uM]N.tu ]] L00؁ ```:uXzLӠ` )-a3:LwNg{:z턶6Nh~B'ܒdrzMj:ɻ7o~d^<"1#TMs/F>r!׫7zu^Wא5UkvUyYYA -#3_t&42T?u)C5kOG7z[l^f,WL RM։o8=˚-*.lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0037-320 Grit Lead.xiz000066400000000000000000000043541247673406200243300ustar00rootroot00000000000000][w8~ϯi! s:&d32@Lϋ4 ǖ鰿~eeC`&[/݉\UJr鳾?-ڒuٝn}2'Fu(çۺ<_^Z+tA8zg馝t[?P]OtyIO!E]si/8v4^W3jZovZV Z7 ;ў:ڔa|a;ϛ̓#岶0Ws{Ћ~:]{^4rVcF0iF;e+ќ8{hl?߄Uo"1k"2$,% T8sw0Hn t?I7nBl.ڝQ\tX'aƄCUi.SBbA 637rFV5xvS(kvZa9 @S vpkҒg!}DKY^nd0-R$1.dNp@I)#Et \M^ӲlWdQj?y>H<#sy'8j7Oy<'%9fUg6(%;x oNy&'g) ɱ˸@.#kC۞_^[݇/üVCDcA)Ɍ9GϓNJp7py^-Qy,^xϽ9716)&xN89dfHU.PN6wz 5^SP4QO.oX%)\ZPz,>R/kW}D:QũNƱo7q&I"u0fUJyϓݺVQe^7_s*TV!1&c/?^[AErN9/m\/w+vaCM 5LHQ]6ދj~rQm-6IH7K@vDž]3 !v&vAqvCu:렢huZg'ѓKS/O>kvhaG]f0"sx;y8sradv)YmS$0%) LI`JS$0%) LI`JS.^+LLIL) W) W\WPSSpQmRTM(0%$vP\S;) pu:렢$TԀSS~'S.%kGd$0%) LI S$0%) LI`JS$\W.^S^S^+zWN)= E5ܽ$0%) ;`J\LI:) 5ufJ._tz3]L7g2hۺm#+nI{2՜z72I@FD6ft}:!c#ԳԳz%3GkUsѫ~i,KFFnȏm )6j*m?(̌k~}Ś3GO:]˷lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0038-Gentle Triangle Lead.xiz000066400000000000000000000033621247673406200261010ustar00rootroot00000000000000[[s6~_A56Mv(qLHtڲkl误 _tlf;KBQ̻=Fa}r ;,EOx/ˣkC3w^8Bw~xZIWBƻ[Z9*`dئp!i<ئxП ǣ?cfdV6еgaD#& tclt-i S)"`0GȢMĈZ,ۣ-2(LiޓS8|Km]m1yS GR˲_lO)vE %"|w2}` e%:FMiF7|`f ߇]Ow2f`n s8E`8I\s9ؚE-\x9 m802$B눝Xp[02}21ς%J|pt+2IW$YrFocLH bb"K{8'Y)gFMR^e =`8GPeAY65lݏ-9!qd{"%((2 M r"Vt"O b ۀ2P)N&WPoۜ_'Ϝ=Ri 'Bh&& y,bwͫ+(ǜ$U`wAs|r 4vEb(dt *TI'54qą^.)nw'k4"y1W\> #JH9ΙcgzhU)F'kS*6JO:et>yySQ񘝫۵#{`;o‹cE0X02P sXK30^F3S0 lhK륪Sg}19IߗͣKcoϽU;0U^:f.\ڷ@hQ$|U<ԞtQh'=v-p_._K2m:Ѥ["MO_>KYӒ][Ҳ>JCCuloGVm#8X'H3};@<s`5y <1<Xxl|Cy<!0M'䭗_Fyye?BW|38W-tQ xe["qF6cݪu>֝Xwc}Y^}cm4k]c>5&QcF5 9s_-Xww`6-fo> BFݱ^:"٠jm 9ݡљr%3.t9]*ɩ 1=6InDu.TcT sLJ'R&^&_502:lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0039-Sliding Squares Lead.xiz000066400000000000000000000033601247673406200261310ustar00rootroot00000000000000\[s8~b-i:dNg/d[ _al#a8wtٱ[[SKE{^)-DLd}<,nΕW>v=-wdhY`yיs顣3~uKEWL‘8-( 0`;ԄCҺEǓnO'-pnlxg,ٜxoKŁ|Qh|X+{$3r(0DXQ.jLan+E>FKaEwm&ƓbpgL_|MOjn0/Z[}D[65%)W)s [SIH{;0w-\Ne;őL 0ʎkŲ'u~Oxaܵꑵ 6N:vaPl'8t!v-4}PD,\9JSZ9/'>E||fHߎ׹սum8%=H їrll4j ;&aagv2fn rw9;.&!\ JwOklL>{CG(5ŤP19LP'ir}YGQ$N nc=2{kqZLe| %|F2qo-3oŅ!qo#FI^ %=B:Cdz1 jА=ZȆ&VcK'9KMZim73c2,"tE ̰9O:] [L=雷N֡yC.DЊ[G!t0ǃU:GiMxeHZi7[)(CGr2Z1z Ck/pHq3 s-k'S7`>4dZ-f>h Ylys}O+x[u<)Ƈ%DGYmf̧dd?i2+ PO:N eTQ1Yws[!cnu$WP͘7)[+qq}8.3- rJa2P\].0\/y҂WOkNK7xUvߚ)+#ЂܡG,cAT:7 IaOt2ͅ3YSR뢻5Õc,Upiw>Y U&AQ}N\:N(\̟/d8H;beS +it/T{ZCGtݰF6la mhF6ڿ>6ڰц6la mhF6Sы@ha mhF6ڰц6la?'c=6U^𿧲x'>xZ-`Y5CzmKK,zj>՝TwSݫOu>ՃTק>ZF5֣VcAj5VVcIjoPe €qsc=iEF>dxet{jOir'.%urnz^\SfwVFrFT)UrG>G.ljfrQSGlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0040-Pheasant Lead.xiz000066400000000000000000000032541247673406200246710ustar00rootroot00000000000000[[s6~ϯpҧ1!lC2ME#lؒkl误 H۴KH9:7}:Ғ^[!t7 0_@X;O¦^oHDKh@]~dȍWϘlt'k%i3cciF.*:lcf0ԍaHJG SQNGւXG3 z$DDthK;v\jc*B^D|-iF2n/ r40(6 qGc`O5#l >[Ñ%gg ɚO1)B!&{PS ʏI.sw1AbD, B9O]z%MKY*]$3ѱRLt2!(bCy}49*HyLgI̝StIO绘N5tH(B*M =PȤ2cmqxHRg^KȦ0` >G٠K0~}O,}sfhC)ހ9.,x[sCd s\^Չ99cmP}A|m*m:bv,@4(H&Sue*J%s+E,RJ5 Ea=s4;nbn2^ujS'%99uIs]:Іd8zV]{5-yY_sK AH00WŠ}EA9oP;!_Y9B3Jy/_ǂb\-HFE!G/Pfd*+mKw%3]W~jlC U~1p?\L8!'^V Xq.hoT2 R$N!m*T-W%<ȯi}hq%ŠT5CQA@|Ȏ^*tNCt[c`Z׵50~CE/[9WWAh0Ds,"cWh {G LWg~~o9Mպ9VINcsg هg>ݶ0aQ}7̛(]s^܉d1K:A*{EVi{@] ƨ#C*iNMFۍ^ՍZnԍ5wS3ΛQYaq385m܋6^ы6E-۩=5՛NG\Ѧ~,~:/_'~x{čߓ gUN~!(V6SݬOE}[Ou>՝T_է>fF5G iָ#{ҐtLr{ӏ4eGߐ,ʵOX|gV:027?z1lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0041-Plinker Bell.xiz000066400000000000000000000036051247673406200245440ustar00rootroot00000000000000\[s8~`yOm3M;,)@:}[Z#{m+sElvg;G:W}v}*[z&U}mY b&&|p׮~/StMs/ܙBv-9twlULziE[|\ƔCzL *t8L|8WY8K:Dd Y 0Q>IO.; 8k(0̖̓.08ѫ-N-^7$ CYzO&9|wa.}St459xTyX] u4Ha~d383&#Y,(5AX3lB=.AgL?ǽg"HS;\ 6t=HyH\̓?Iy޼yyzY zGC<Ԛy;m] vDeO2<Mw.^oYgq0Xbף&MPz$ P8+Pvj8t4{nV+auzgVNS[6>/Ê;nguby7@& BtqT|K{a71AQi|pKpg_ԅ. I}*p'1"D$%(&,D?JEy7ࢵ<\T2K.Zrѷ1+B"޺ߊ띒5]{+^k%E/)zRVESt%G/9zy^BIE5*Z6lt0%&O/wHL2 LW>(q&Ϗd* 7u=c ,:oKNUrS֜J6}% oN:5JE^@S[Rއ%^beTũQfq[ũnSjVQ- +R-$Ԥ½|6>~[UwjMر'ϛO”<.^)N/5r\S,WɵrD}_:b9U$*)>N0_<ZmU~|u|W_W?YhydRImJ(BfGlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0042-Low pH Lead.xiz000066400000000000000000000033451247673406200242220ustar00rootroot00000000000000Z[o6~ϯ:;Ф5ؙ^Zm׏MJrq1 }Il;ƏG.>~z=mB)!PՕ8韮/>r3ο>_[2pY҅QߥJdx_GB[zF9:Ǝ!s6q8`HyXt4Ldo =31P#GW] gEb;,;s3`x 1eB95ZEX\8-{% Y˶bI 9Tl>}Cd?~}Gvu"ecט~=C\ r40k 3.bڒQAj.}".Rpmę&KNgnEaN,wՋﱲڳx&4G :XCΨt'iI]`MM,nM6oMqaѢn1-*?_^:TΧ}>՝Ou|Sm6Ψ<4ϸ#3nI!voo|V4F_7I'!br[W#2f.NH(74OtU.l+䚊: VwB"0M\\/ie(|H#^ՂR֝YkƏ-/-;Y |:sL(\#!/[/+lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0043-Hovabotalilfanfeer.xiz000066400000000000000000000036531247673406200261010ustar00rootroot00000000000000[[s8~`yomL) dlE#lk4_27& iKKΑKQLzRyxޝooov>>~~}ϛ$z!>W{D_ԳBӑfn$+YY1G []T kupt1OQޟ u5n&|$DQ%>/=\@>b. > 5i0H^0$4fQĔ1'x>ǮFSLqĸoe y^@b%j8Lonֲ?&-`fC>1[Xq^lGOVz 7XSB,)41Rg./# 07 Ux) hco!6e^I2a _B#1p:EHY GVxdAs8<~Ȃ \W%$CD)і KfhPwu0c 78Fڶsj8E%.%q E2hr|=30VlMLW0 5%'1CAIN r#cc9x pPGܔI>޹lS̛O}^2?Gtt6xΙ"]P\ ` &G/wBscxC!k@N2{煝[3륦9u/YOrvR:z m`2Ggv{U4 5 L2ABIP~soA{8:^vO_Y J9k,։NxfU|:RE.D'EsE&7{%~ T/ݙg2/)CؐE['gK]ݕYyBR9Xzj0WOG9vUt!82&F֮7tI/I'pRPnF}Ĩ9 gL5üP|FM8!D"Zii3x4X߰iwp <I3C&A *k 7G(@T cj<M w&'(~NWvB}sjWm`pIP#)8m&j瑵+ꡮ\RФU:2+$WC+N=bVvu1Mc@6=znp;vIT} }: 2-D?K+!ߥhJDpwT+Qi)++OJzk%VVZ YNpwz$d6/H8h$UU/?x8)vU^F idch9ʏlhYXZ7Vl*|vcWxkVz|k /v_x^/~Gܐ;qKgؓ%a`pq18NTY[_HWac ް#=]mkWJ¶aA]GOm躏4LϠ  -[-EDAʞ< OɒSJ:ǎmKEc#kkN)RZdm~Dkɿ}~\-+k%U>V]ear{Ѯ~闛UkC3^8B,tw\jVLzaGkۼVM1!]D lX1${.lv8w'ᠢ-puي +tY]GlL ٲѬnIL*&"4, ى=",c|ʔm |/q v8o`<=doYۓmoRTf̠>i;D[z〺3(lw)Tz%M[" XY^X%{o"<Dt#MMlߴI. c@dd'BD@]>r H܀7l&Y#W@ݿMn'{.q pJyf#5Z6P/$0 2 w85u93j/r7J2 \mೳ 0KY[/3xODs1QeA$IJ.׷||dKL[a0Sz*eceN(l#orS ]1ЄI32`iv:ݏ9= IH>>"&^I4\yKLC:R$deBF-RB1i' Ҳ$vd` rhH9pv A tw;=œGH0$)#! LL񲩃.B7NjE2Gas81sdmIRm}J B`(\3| EsW$+.ybɉ?ehx k@}h?b:\4͓9pPtow\/oX.2՟r*Zy+:l4&i#k<tV~}䚤2][Oo%3AHpUt48<PU #ԇ5JYfࢵp$-#l)pLJaf\y1ۡ;)0]9On<vrܛp8݉)SBbG3HESXvK62N#3U-a-n< l]dv LHݰ?`S{iHڃRJ lb;2RV}!;V|cRYt2bG7Cnr6=<R x7uM Ud@bf]Âf NmFfuGw=N|F53$NځcsvȜ99Kj+LS4[-E֡@/zD4Q)d<#o>u VpZ#/y/+^7X屮Ǻ^FynǺ]Ny D%Gix"gR~~XnoX[55磀wlK_i;x8Δӵj P5djKHؔB!]KNPѵttGAD4|[q1-sHe׊sSSZ~c &LZK>lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0045-Bink Bink Lead.xiz000066400000000000000000000036001247673406200246550ustar00rootroot00000000000000[[s8~ҧgthB& %גf`Fl3S^Z"st:0޽漭k"1Y>Mtk_r|1r;y"}ߟ$Cli#Mv++ګJzF &|Ҏ 58|X0 jbj|wӟ#O׿Lw"0Dg~!1K m`e][ 1$D'&ϑۣBQ̅yWC 7TK@$h2t3M3ϊĞ"2鿵[k}uj3N%qEu SXJZ![BA`-|E(G<ŗȲhq`.1!K|AmNSv1v2_e99|Iַ13J,&,~*GxJkU2/%LxNF\aѓ¢|OrI$/Zٿ/G"D!ƈ*onO>@ΪoU .ݒN 03io {Yk:s5]0-K7jّ/aR=CӐ "Ig{x0<cԅS-(&Fdվ%rDz|A#0Abe` ?mJG]q% Ѿ,y>)F+<~ɦ,Iͩr˩fH 8(y'W1ahOiYxKܒE0[yMmq̸@F nAaKG([hS6ؿI>nFbsin7͞2Rk*bZm.Ջ@7,)xҙS;[|U<վ XRGږ ^vu1 Z)uKWLFpVG?5Ruc&yMнcFmeӌ]3ruZNs)^xt/  b=:G,H$P+jp1w/_ W31b9 b-F>d-=Dr{M^s|[ls|M_àg2W7|r`L^}57Ѷ*q_´j~Nj˿w<lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0046-Bogus PWM Lead.xiz000066400000000000000000000034171247673406200246400ustar00rootroot00000000000000[[s6~ϯ~!0KY @ݾh-@-|%Lf3^"HOG߫-PDq@41j8J{ߞ/gt?KqQ<܅ gšs +Lv'oh90fۇԁCR{I{3 53CgعpGBѕc>(_ b>l6h (P>"l]R.t2,W"ƍ- |_/CץK`` uUh<|g/>'ρv5Ŵ}Aiy) 9j$OwL4&O4NFC5,!-CFX1#5 H;oIx}Ǒ` }_nGԂxX&2ŏYFvcвĢlguYPD\1Zٹ7afU-D7~E¶ !!ܣ;DS@,8-aL9Adrgq gV4ʘ3;tVQ`#? $nD)EAfŌwn`FtND 0Q1`1e*}[W9A< #|PeLLܛӆx}l]#Eo<垗a4݊3EfOOMݶ|%el9z ! 25n\8u{w0$4&NҾgu]cy{0ݨ*LdbDz\=-C3-W_}W 9 ,L`&G (gi\a*R*DNɫ=_Ds:a8c~HpϜ;X<#t LxO)(S ta0wV*,`zi*6̈́:Ae>qS+4gd&}K{~βB0c^z;kUD&8$LہbYI.UEҕҧ5Wo@ q*`߳5N쩀UFVZSz_e۩e/ s˪1760Ϝu`h7&~6/_#W|.T݊!tVESmOuxS}q<㩾ZcCma3e6,v/a PkK-~e e$;K=zzOڠ Ĕ\jƻRk!bSե0y>\yd8|oْ̢o V\:{/4L-[$^jo+d&0[1 mؚ n0${t4Ld?3 ;knMg|ŇA@]j|v0K,@7ƹ#_1!/> &! "v,܆ٹ=eX+-{ Sn [ 6벩F|pg{|O{_lEm:V'Ӯk&.NkjW3-Ȅ}Zˀz[[DH{}fQ>co\CNFN {Ý#M"o0[w-|d.6^Q</b99r %S 0̋"$DqyN<.Ak0<8ςXh hp]Y6咦})}Hh82w\jc\P #b"+6vc8'yG7,aQm@P0F~]45dN-9(G V 5B58c^h.yF*'hh,Yew{~4gW +vc@U[݋&̆WGÂ+e$AZ"~ F3vgutѥ/# 09PdK}o{tKcOXͱ4ǺX79ֽXcm`> &`F 9Kk8-f!6PJ6!C0DLmgߤ \3{L(:tjjJ^5N~00EB, hĎT* aɏMJR/@.Nqɭ+lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0048-Wichita Whoop.xiz000066400000000000000000000035601247673406200247550ustar00rootroot00000000000000\[s8~`yO}i%Δ@h[X2 Wfٺȴ]DΑEGSb޼-*KF'UmmV .&Ew]/wv$~…g ~˪UMG0IF7-fz5t`0r`ePĐT`I7{ob޸wkO0˪] j"ffa 0E^L""X@r92,SBʌ|_F+B`c Ud:ӭglN[ɿ3,36!q}(X-a{ɾbtf!BΉ>&z`8=Ȓr>-<9F~@gKi[Bܮ 8#Gh_x>,!hbLIp `iC'ĬѬE 5AM$s|BY_GBzy_v=/"60B 4kVC4;d.y;vh~ؓza|pk;Ah꫇q!>Wi"ţ4NY<,y_*q=aR(e߱EnfVHѣjT&sĖ.}VoK呣9L5!tir鑯0q/I+^C_?K):цht{43+&8 𿚞j ;DK(Wvj\Y7%~!~q$SP͘U![U^8Bc0 "„(#”afAA1uJ` %P `i1=qѤ?x@IyH7\VK.Y5bف/`F{D2yLu\=mCC-W_|W.0s'$*abmLj)@5JgnS 5J<$_Ywu h}J'Nx`=,#t=m f8@3"͂,l0Nfm;v4'1nVs[\iq6vLƮn_65>.bXW ]gYf:O"Yc퉑L-9 5=fVZL֋RtߔwQ&i~xڛ2qΛFuxh0fnզFgrXJ8mSR{]pui4 GQh5={+W;!kJW^Sle{)ɞ|+ٞu;l`{e{`{VJWld{%+)ٞW{Gn${%5ȞG%+@g1(xxe⭗7 ?=M#)ygV&:T7Χy>խnOu|SmΨ<4ϸ#3nI{t"L[Q DoԈ eݔxV;_aT1į_(¶Ilmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0049-Bitey Triangle Lead.xiz000066400000000000000000000035411247673406200257400ustar00rootroot00000000000000Z[s8~ϯs 6P[flE#ljmɕdׯ$nw3>\}1)XE@Ħ&l]ywsqoo!]Ǚo(Kgʮ+J4I8Ҩ\FZJB9 *Ď 1\cHp4Oxd}֟LA+|v0C@7VM`@>b.X!"N B-ȎJ io{P,aGG;Q/BVO:R:a1e 0GudQGfG wSnj!2hf}@K4.IJaDt-}2]jj hl^I&*{/ S?zһz՛)AޏhJg,NQw~>j|{sKqA@0peBEsP}VN6sR1f%/(|=!+"VHl zrG,ɺܡ\`+# 6=s .O{û.O<" vxת{V;2paByapK\rDR*-w_|w8L [RTH{ #T4jdg@Q#;,[M'7ʹ<xb#̧OHܱ| /N]&`^kh:X: U,ؕKXvVu~<3ܪnw:mj&5i|W zUmƍ0|%vT`$"}: @AʄlnvX|:<<ʺpyXnLn>qU9VkN:[zYE[0/L>t( YtZynYVyS.Ou ɇ/Q0%ufNt L/iKxuᷛ顣 mFۿO]ȡx;w/4m=$'jQ#>=F.&niڃ}g HC@]>|>v1C ka\_f_1#Gc &LJQŢ%xAuقS I!hYK)r`6_5MQH< _NqP=,b^$P?^ ӯ3|11p498;q-!(5<4jϘ4}O3 l8 =]sC< P}D5j9󄪐i'Hs<޳ E֎^{2.;S75cJ5]AwԹװ둵 r:qnή2ŏxJƎTbEΊEXvsqr|P >F6V!8D4G;z)l2s KbJ3nRo#:/X?KCs\Dę8ɔϊLl+0p+4i `SB>AiH -fzܹ?tLB !9(&.cX8d sA>EC D11$g1peZL87u nȺ#Eo<f Wdn4c-ٹ}qa[G< $̛Pi钞T>C?0rx!8a)ltK(%\"&ek:=vzOE=ErN#jJhƢ3HZd[a HhA0J[Щ{a{+s =KP")}Wڅu.=-eo'Sq,-1/#faQٯ%LEړˬ-o3#f0s!d5.'$Ug ޏ#qA wY '"W{Esy* s 3 fx6 2h$Ѕ¡9ZƂUH nή2~j0y[]7;LƦq.qלޮl'T+1Tu^$D_ve#gk"HImA}YǺ+`UKtR(ϧCa+v4K 0˕5!C>R[<{(8;Y=8yCE*FYkčo#E㲥@9&xy:dEvr3O>ڟ+sI2 )ds塝>DWg##-n$BKYÄ.RFK Og}o: 5kob޸woO񄍄0ѕc6Dc%lk";S D$Q#Bū 4#'FKeJQD+o"@b:!q*D腂 vpVMfK6;bS'-B3#=[0^ָuh܉/|twK^YTIJ2`A{DR9r,8/TxEWAb|YmR )C6-9R0]U lfnNz Qet>9;-@aaT%/xg`0QL09t0Ḅiu+6??}^^V Әd[%3LkaHm`$QJ7օzW;2_IeR)eUG_`OOTwϧ|u3yƊ4X jpoot"~Ļa1^ko xQ|%k6rMj\Tbzr6 BqY4D`, zrJn .YnVr@7ޚ֏벼,o6^=}*36xs4 @lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0052-Soft Synth Brass.xiz000066400000000000000000000034151247673406200253360ustar00rootroot00000000000000Z[6~ϯo3M)]i%Z2Y+sE{/dڙ$st,xS׶(bq?}|ᗛh#Cϛ?<ȡxV\: 7]כtd]wZ6osa7 v kS-c.6Onb<,Y8X aT#0@>{%΄5ЏŲݭEQ@" Q K؎ !V+fhB)pZ5 Cc;7`K$d=;1?9]XP}H]haiAQmcrK?vco~mY#B$u;6^ĒKE%`qy`pkKZKyg$:C}>̻VpK5RŠ3b- Μ諎 '#5+e:9`F `р,Ƈr.WrN#j*hƂjcʼWWa$EHhE4'(sqW Ja祝y@ uZ`/r t%F/w!dbcN}Uu ,b&3+K] y80c7J$ن/kGthUnEm`R6K>k\IGP)YZ"1 tJ>B&7ztUbm-iٞY-ϰ@6xUvO7`ȱI 94a7~ۍㆿgx4|ޟvpٽ6/jnNmFKRϞRu^iz$2}?Ԟ+In|Vhg@>+}oox3y̐1֮?cśoN:ĻDܪXZL!umjySݺTw.{9ս˩_Nru_ 6}/ؒ% %:\^F6I׫aXf,:Μ5!Ch|ȯ_(˝fU\[/g:z RNIQ r&;T`) -1/x5OT2]RזןV}\ 7xa{t^V5ų> hMhYANN+-f~ &Gh2AnjkV(E7v Cc+g`I$lno8$/+c5>BYL= 0ԟϱN¥h{l7E Xo~1 2 s: z J+cAWC !߄J͞|[YQF,h$*bO1-~Awy4wkڦ8#/ֱj}'硜ES wJ&bL48W56@~>IɞV!r1@T!=ibIbɮl)}H0i K)Dsb, U;>LLo ^wg lT3D. 4&>wO=!uZ$s">ŤL# Ġ:&4p 9zr9&H’~^Zzޥ:R ҏ+5YxT=χݔW)~N Y,@0?;\+f'\$/  KzR +6:`PY1.jIemmi~kqxH}8M)\ @Ԫuž#L”߰'=:}TЇstHQCv!}:.}5ts2X=j5ǹ)3}#olK^ CP $3@) L`๖ y֨*eF)U@%4M$n[+K!=@z(fFX'yy;rNNwiC[*Rt^쿀Z2v;$3JI 0_T2kM'0rlK< ?8)dc8oG*`s ئ-+`+bY6뷉&^x{ĭ|CO7 sa+S]=өNutS}s:өv>a>:'LH0%#%gwڣj0uY._ 뚍!4n|rgmYAG/*^zS w zf\0y1KedK|_)XRh)>*+UZ2Fb)7A o4lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0055-ssaB oseR yknuF.xiz000066400000000000000000000034241247673406200251430ustar00rootroot00000000000000[[s8~ϯyScvt(1SflE#ljdׯY4aڝ%;GO'o,Q0%725 D\a21k_GkEڞ7&?/=ȡx_\41fIre^VBěkfF9Bm!H~3bq{$UPoa[G zcލY1e-UT8G]|>d=N\D"!<%3JA%=z<ʡcG"'ilt.*I.zIecm)ȭ;txr/*HݒKa!zQw^DbG er }l{Ӈ= Ӝ,azݶKGLEn^r]D@(;-rc G3jɔ_iS2KD<fiIm⎩W9GP^f(OJv*ҁmv~kM|:/ B( # +$>]k*r2b'!䜖 (\}[< ժJz!M-t'] 89ܗvf8[??x,7(N ̰1E"^ѓUP=qӻ/,LM#sP[ /gⶌ|^)+odk򢓫~\-9R-o7Daar%5- z5AA)z 7ꀵyte{b~K5i4#n5s 7n~Oi`0! 81lKYvOàR?pͺCBrvʫjaV k9|zalP`IEJ 35{Q({2q'؎e/ n= x3f,7r+5nS:2k!mLq3ϝ3sc|nύ1>7unύIyYNu׉7^'qȢIj.i>hqS];өNutS}}:խө+'}h@'< gҒ>Zp]3-&CI BfFdxrgmYA[-jjF;kT˵fU !R1,S]춛8+?V2b/444lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0056-Creeky Reso Base.xiz000066400000000000000000000033641247673406200252570ustar00rootroot00000000000000[[s8~`2ӴC3e6,v_4ƖLC,[0Ih;ۼDѹӑB޼%)ɥafF 70_볎w\ {/wNz8^}A\qh,_Ҩ&Hxoo90a;ԅCRoE;5;v]wԽu&hG" ХG`>( Z4| ` "L(v@(h6CF ˕q%xG exytE,C"I)?OF`,k`6xߋzXFwTDoRSF ׆>)WIaG1apjfW :Fc|uRI!aIT]f1֦ܮG_ΠEyb 8Ͼ6˜"P@.w {L=ŹQ;*aCm/-=uzy^i0Ge۝Wx"scm*(?)[BQ%ʦcܬ<5eJ\\6j\Xe RUE6mnRSOyϣ<۲~IYގTaFYOUζڿ߉6Xm䌇o﵊2s]aRiH5DhKTN\Xi  +b$8V95HŪRF KLPNH\Kzd .v]ab.Gquv%yr-GOWTC|m^ t2M7K>Z,}l`~`&>̩J+ٚ՟(Ȣ *T-Oc"LN_m4Tr^wjݶ@A+|o}Ձo-uQvjG=, Xo=`c4L=1p#5vSA8X>m֭-gsQdctY*kΊ@IJ׹z^Wʤ:+=;I}.9 ء,as6+>٭FӘb6ȰqU\~maz`_wV_ۿJjӿvvV=:غq;,xxy牷'~qⷲij.iDgqS8TN}:S9ө>~O!H[~=iJ_~k7 f~/^Q٨~?D˂'rjʵr[l?Xִ8pzkq$C{.FÈGF.Wv G!_Db6 mV X?pP3c >tG{kbbGA"_.z.qC m2àmlDC±ˠH(Ab ؚ !g3lKk\da)0Zw4 G֔/#6VMUx2zgbM;_8b}@5i6hƻ" {ᒈ`$lύ,c{`,fH±|mm;cIB,9hC8'qܰ?ʂ).sXG04RfqC.qN(y-@2 a:{jI$ZٽσGegbːOoz-Uue;R^z6k(~HtzooqHz2n/ jyH ,Pz0@\ }Y5d ,5: y/°qD} l/1bX͞|I(#bJ?Ϙ.t>7ljԻPLD`~8ǃw9,H߱޴WW ^OrҜoc,:Qu:[QSUuԠ^!wT!A;T% IS4`Z8k0ޫ yQw*3ZLK33/dLGP&.J5lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0058-Basic Thick Bass.xiz000066400000000000000000000034041247673406200252230ustar00rootroot00000000000000[[s6~_=1f6ae@ dheגI误YsvKB> //Z۠b\emk؞Z ./7>v;~Ģq='枷>4x{`Z7ά{ ;Q "pFI6ʰI-n:v$9%J`;YE N~-; =y9w㭔*6ޚ[oV)#zBAkl T Cb"KI*p´vM٫UfvY \`|yn#2B?)VF}EPFDd|FR19 yLRvy5D"VOr&Jَ0=IN7kn>m45_7<ǃw;Ό q.nW\<*H+[/<"tAO!?u0 rȑ0 JJU~ly!ڐp`bh?d ]a (d|:B~kK +||CJdWj ?6lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0059-Dirt Encrusted Bass.xiz000066400000000000000000000035641247673406200260060ustar00rootroot00000000000000\[w8~`yO54a 9@z#lԂeׯ]lzihf4}yyq^UڼZ\BۋNw܌zӏ_uI4E gWU4o#^jF9"QahM?>'ρ XA}u+3./[uoyђUWI8*v1^cl'ͽ'{SiF,^͕&c{QoꆃiBXS4[bcߒ2dZ*b);RKL(7YybjĉTzٽo>L`O"}p7>(w[rKlNR#%l5^zaP?`ɆkʁLkژ(Uif[yGD]oEq§X-CnWg`,ɜ+s1&ezR:&. ٓ/ |OCBMi[xqF2MK0/ҫ$z{0S=|F+IXCǎD%ҺP*%2NgP.+kKQn?GUs1hKa9 B sHlЅ0~!.}O,}Q/S;@Q;tl{ԗ/C|eNTf/X[q;㟔T)G $x9͙->'/Є$VBNG$@[.O ,@gO:\+|JK3ukyWyߔ.5ښ(y5}Wּ޼`8\A4ڂ3B +|J[l+U6:ReCvJKeCT~ܤmq2v~q5-a4O(!%GaH꺹C'_^o(k2 c^y$Wq ̈́Wf![UVoQ@:. *k`QG=3IaByܡ:%0s%_JX9zQjC>{^>Iop'oԬSAE7YŭmBgDKQ_++4 _(WO P2- ;iO$էTtQ3%RN`myt:E{ym ,/X7q 2/gpNi rA.,`nt؝YAm?oh8MRe3]ݑWg19:o~` wGrk+i3ߕ:ܨʞT7Χy>խnOu|/ϧΨqC3Hp- ^aOZR~o: &KCK ڊ+%XRp((뇵g l;RZtԂF45rR Ze6 kLXKz:XWZ[o*;Wlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0060-Punch Bass.xiz000066400000000000000000000036001247673406200242230ustar00rootroot00000000000000\s8_c 0ӤÁc.@Hz/a P ϖid>mÆęf6jwzU ++r ˱1YܕfOuGGϖm{zؐB,tw\-W0 Wjm^Q1]!-XYn0$GLhi4,i<95BDݕ[> \lYowqwLhyzBo}F|˘"29xS?""6W)vbqZ]0:( vF<SWz7ΊDj%r!!̢'D;yr,L﫡:,Rn=93j-SJwy[M,v }U6_̇ѣ;g!$>gl`Jq!| 19BP&Ⱋ;l>c'_a ,ti}ۍ>չՏۀ=R8|{ެEŇ] !qg3|lT[<#UdpwujX:D *EGR! KKZdvh@z7c=Rsq|;ݺ$q&|:N,^I8%73_vSIW1@blBWV&=`ѤkH3 ' ( ' kű V0ƽ"_!)^Igk e%7 U{H:R>b BEV8J&Ecvk)2O0TN_y5sTG ]AtbWfz x0;ϻ;Y/' U}'NڑcPv̛c S_ {Xc)vӊ*:V{ԟc1Zn%)M dAZ%_<5[^HPќ@Ѵ3NResJzݾdJV̅DJJXCUCR!/jH*YJюvV#E;R#E;R#oڎ)݈^=݈ѺѨz7E&n@) /0ő7u ?IPOUzz~zJ&|-y /b^/ܥuBQ'uBQ'?webRL^K1y)***br(_1~2/#\`nq-/Yo:P@DXWcmǺz~͏u3?֭Xyxs<+I{oMdt"Z<mwj]|g_2ĉ}ytx|=qB]Nx3DtU9QWr[CAW 0*yr'OyGxsKq1&;=Kyǝ2|r. we4Uǣy]Z0[?yVKoKM4 {'Olmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0061-Formant Bass.xiz000066400000000000000000000111541247673406200245600ustar00rootroot00000000000000][w6~ϯa)6qթm6}Ef# I9q֍$0Cw!1`g;a9"iG=M n}v~x|`:ug>W}z'oIOW' WG%2˞Q_Ύxd8:Zwdz^ٛ}z˔vOYzwq|y|6 .+ukMs7㏲tX+M傟 36OK0Jd9gQ)50deRd|NMu򺬼)š':=z{'s?z?i}UZr5Go&aŋ[F[ʫ.N{w'N4}Mt&,].I{Že)߭znGnz\K{I<f:a[qج,|/,͒w[]3xg ``Q~NJb`'m'>rQ*X '^zD-,f%$r'Zˬcӎ兑KzT\\")/EGƉ[W<U՛X"}vq:|x_ .wtȄ~/(#-a pf4=XT2De4&)/YZlz pU6 <©U#M/E1:ă8=|2Jɢ;oytf~m Qi1)+N,6c~D^ԙc/[Cx}Y|MMQ7{^bR}D>f>b y7Yu)< @>I-n$lv{%Hٟ/fa ; hc6uIN( m կuN.~Xz˖Q+,i')*%[~e//aߵCo ~hGmO& q>5!FAqE!`kpdx%Ld jǺ2o8_LL>>fEd,%7EB]9T^}.ᥳKnW+7ȔJ"sοK#&ʋ6}pYI#ۭ b&%R+juj@D۪Vڪ5Z *nOU 1۪ֆiVU qk8! >=?`s >mX]`ctѮD/m n6Z 4F0f t&N "`B0mvBۣLn(ibu-n Lv(Ҏىt HJ@ibtf'(.P[r:z766?D;vm 4ջntM^CM&^mwB..vϦ E ImvD v?_b^ϧUN+t /HNWGh,V\ z_!PEІztDP11=fC=͗ gۿݞuSb tTvY;&yɉS0츩NG/;Sz9ΏR`k&j球oo qk!*N~tB^~@n~﷫7hQsҺ "C~|}SxUqߏ[*wA㏺ GQx*x GW G)nH /:QL5T|r;xݺB@%MnPz$R Xht@@[JP@Q3- `x90P[" V5(&J`XJPXKϘw(@] pƥ Pt?]Pl(:*gR@!-Ws(H(J"&-`E(P pDb8*BRh:߮ʱ  p  ,n]JߡP_cPBQAqp&7BqCF R0n`*F5hBq oG߮ УYD%FE\T&P? PLV9A CqWG!\(7@ pt Vؚ97@\WQQ(n`-7T.g@qsKeo u;*7@RR(n@DtAivj-PIR(n3M(n࢈ ~+5(n3S5UwS(n"7hP7k~v.h< GP/I-lJQᶥ. 1 !Mή<=p $O3_DqogYW-X WF*yDE RfĹYF[/S\YXhk˦@ WjId7X4+s讚IiyJ<'uLY%lƊ$gadp̱BگkjeG{KbIydT{a΢K7|sA/:;2 {TbJI6]]oEQF$d:~=ˤkSuFo0 hLM"G l^`Ӽ{`48'ca]dx%Gd$jYƺ2`@JSEe8y#%ka@ "1~ƜJ:Tb c_>ivqOsmt$3R1_?<O.? '/É7 cR6FSMShOٞj=v{TFz$-.H$-.Ik\dn2=e\{iRwFLcŲ *_$[Z(r rz299^F/$^fCT~Ifh[r!MGG쇨h- LY4;| s9..gnn/_GA0^^:3klmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0065-Osiris Pad.xiz000066400000000000000000000035301247673406200242410ustar00rootroot00000000000000[[s8~=`I%dl,v_4A-][a`ELmf9:w̻Da}r[͙!.&Oyag填"mӻ.\H!{V^W?m=[$YmWBěkz9<`@mPĐh0^ln8'@3߿]Iw4f+ 5=t{xŀ-шI1[5i S)"`0{ȢUĈ͐ReLQH)2p]7Z:K;cn Ɠc;e=Y laCit?eiMg΀(Ԇ ̜-p|/,onHQ_syÕϴ OBLm P ;U4$ћg{њ;/R_,Ia7sANX%1Ħ.j4c+G.0JQ>sn!".>y{"Hlނy,B 4ɗI{T a!\`L((3<<ѹ9ѮL93npR1v`C'!$E) Of-|wf!BDDd UL0QQd ArC D #GO 3eR ,Mz[6Ϝ=Rvq HGBj&& y{1V˶1'!IՇ< kP9>^4vEb(dt*UO(kw /lkCRF?YsIY|9> #JH^`M)`gҾzU) VbR?rBau\R=nTzݲQ!)w{I/*v)rcrOq][!rG\)47E0=KL[MS#SM15+yϪxӕ*jfZ׬T_vyS6ꎇq|:o ƙ &8 ?* TU]ߗpK< !~e cr)1+ \VCA 3~,Y/,f텭%F1vE`W`nFӨ;{߃O{Ô)f1q.I&ެJd)OEgYK*ȤH[5cI!%f< ƻ7i'PAkˬa܊۴@UA@I&_Y'|P_D"ɺs (Tep4dz}"pQE%. (fE 9,XvqQoǧ?:lz,+[Nƶr/WЭS0U(0zgqΫ< M=JRc]0 ݰLہ9u؜ty~YDJ.}Yat})E` ^xxߞ GJK2TwKKQ] 2tTfYPIQ9wTLMtTFX] _yb"{g^<{9^γ<{9^^xE sA3j|ȓ׎#<~q䍗U!<m+^0XNtc}u:֍ӱnut-O :aFZ'LIr~[u;h1{-g|5%A\_6!C@C$wMH?c/Y K-Y RYWie1dbp.U% &Qɟ_J:lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0066-Phased Pad.xiz000066400000000000000000000044321247673406200242000ustar00rootroot00000000000000r}oKd8 N,3E%lזalYdgݒ[vwï_7E7M}l \i>w~|_wɠwY{bHƊNoAt4ONO"[M8L*؁փ~cuL:ݏp<"BE>ܠ|I\2;\'͆v1FOl&iq0LgrGJl<ϤygM BϏqlK]LZ.Ń%DQ wC=0nxbk,|8͏"$ȜDَdӿ͏$hph~]E^pxz'BqM1mBɞZ7pNbnd.a, @6 ϽiM bSR]lqZGN>Bo0;E.S]hs$P~< Ow dgD(n*O8z0l:p<dq0 A3^}^nem]L ;IE69 l|9 0<1xOpBs͉-ϗ&Nb =?Hj]A Dh)3֞2ae(LX"pR]8d|FsK@J:{7)"s+Ә_Ej#IKa"j1^/@s9epĭn"!8h % |L$fTK+Y޹'~cN(Fs:N3bvJ_pXU Qp؍^lra ^ W*Vö+ `W"5}>OB:pr+:I[sIXBɊ\%%t<G:%{~6zv'O1xO,ݕ.dgϦxC3<(]m(&>ˁ qHɕ}|̀[oAꐄ4B({*0ZY]}xbĎf)ۏ!',&"C/v!cY%)Y8>؇X&f+YQ hXr%kx #ȸbϼ"vꫯ++SVy ?\@%Πr"^ MM4C 'qJV[tz/JͺOy /H6+oYhҋb,#Ѕ!COx٭LЏ֟>GYN6l,7ډbs:vb :'2S/rDNy{'IGtq2վr9W \+%{$)On( e&e]Х ^mh*Iϕzsϕ^ѕR=W`^5](]5])U5]+tTTӕjRMWJ*+tTӕjRMWJ5]+tTӕjRMWJ5]*2UӕRMWJ5]+UΥTӕjR\JtMWUV}H#ݩt>ҽHzix OQ4^Lj̯ aVz.vTb62=a_GU]23i^x0ro5ڐL͟gd</5SKV0Wεwa##Hm 1${?t8OxϿOw̚LJ<<`@7FGےf0!C D-Nq.r(d\i+e-:kH`Ý5-gسծ~ x-}] V!V(l]̽]Da^ծRD! Q^,C{#=v∿fy̺k`'#rA]ylbrfLs"q#ZL7h0yECN<@k02}/͂G| pp]k&Q,| =":BҭۘmןADAdVNIi3cB)f`C'!$D)X~ɚy[Ar&"k[e#Ȕr6mR$Nb -t' =Iom9RxdٗdD@::Yd!)Oc^\F<8"p D܅d=AzYTCNJDsQ *U(Lt>a^zzAmXsS>b'ҾyhUƛ׏lC]>Dwm bnFT=^X= *rMDC6{l -Pa]qhY57`!NmtIʧIZ󌦡,zݒR=ʩYܥ ˊĚG*qi>v!ٍ>PU{<`}. CȘ_Y#T3Aᒶx8?Hl9zb6N̐a^)l_f;gW̔WrǀR<ǽ Vತ>̹B`;5@X<#UX+_ fU 't ZCaR]V+'Xi}A}#i*Q:A9 R&@v<{ihuHb߬)[əGX?"q+(f`Cu:0`@G XK70^Fsn<;r= /cs|~ YU;0TV:3zuhϫ;1M>ILeo'4Ò+jIW)Wi+3M%Rڴx ʹƩﶣS7hԍS7zFOɺ^wHzۯ#.ryhS/)f5&QcF59 _KN-X77`6-&\<"*5;6%C/ENw,B:*)]BEQi*tB\EPyUDLG,BlƫQ%^^פ42)uiE3i7:4<3lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0068-Vintage Sweep Pad.xiz000066400000000000000000000033341247673406200254370ustar00rootroot00000000000000[[s8~`KLK̔@2}[Z,LB|&}%!wtnwU[ ֌VCLq}Qo!]ǙD?=]\k`4nQ#Cڰ6)\cHj0Zil?wѰN,wﭩ55]t ѐ"6lhS)rC` rb&dBNaRPf4k :N!t \]5N{k8{bsثj7OP@3B>Iߡ]촛2!% jf1I؞j7 )=1p;*n|۷7 1 5f֏~3[azG0 } ;^ "pBQ&.pʴ7)u 6ҹe" W'p@jeL_L` O }p7>Jk{J7F#͕< `j{ wYХ;ũre^N*]%gG H%( ""?-V;>Yw<@H\ɜaF!A$If]^`#h`W 6&`UtC|~:7y"ڷ'* @'w[Ό= $a>N4IBP/Q-[=atNO*0rؐ55:h&JI#8Qe.(A4")3:\ BrHӹΘCyۓ;w4pQ;PGjm: 5uR\0'e23s9%ܱON)@h7g|X|W*;F[e,R'j@hWؼHsLRC^ۥ/ԔwRwKWW3^mg2ΰn$UNuiG"B[Ѱ;Y'ִhгN?%# ?hA賄JfmHny ƳR2(e<}{Mo*8n5D[Ÿl3޲`0{FB߱%]f`*:Ч9 y,NU F}?~4&mr UjY?hLgYxg6rWGrI"{,mt斞%֡/2q)Nk/@-ʪRLr.Dn>8Ov};Xw[?7v lYmW߿O_ssZmjj'\⍷7&zxm◯Kfy"ޒS;gbiT7SݬNu:T_V:՝T uWXFiTXF%iCM;ϩ߷zӉh0:t;4 fd}3r\[.whRrrBWבg..|E\I(w*KA2uaiF3lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0069-Mellow Echo Pad.xiz000066400000000000000000000033541247673406200250770ustar00rootroot00000000000000Z[s8~`0ӤglY h-@-ym+sEl۝KB\u >||!J37Z:EOx/7˃sK3\8A_:W\i`wǕma#cڰ1`H0r5~h|;ɸ,05 =tyx/_6.i 3B` a%d6D-N.r(`\hޓw"a'7}Ѫ;*yNH 2GG: uM$s9Y9:/y]q;㟤Riq@O̦Њ d,%//wUi,7Jnh%R_,<ȇeR.h(Md<^5My2Z& "8ԑN *9<\|dVGrUyf5 t`00K/ =30@<ևaȭ<˃'许$A,D`;5k ,, 3U) eTt Z7,o_o7k諧Wih~\;;I?&rqv|,g= xꝂ'Nlݹg t焷lNci]K5-𚸇g%37X#*(kN XxAM]JTH3&6t3NK>S,f*;gF*&[QKi=YN.l ]|Fm?k] 팖^$7_Gzyuב_rE#ϡ_P|,_:YV}>XcݯѬwhFiĤ.|.`Zh1WB)([=!43?="Eót L9_t9]_Ew)kr^GA{^r: "ЈmI._*jזZ/<8Ǭ>G-TgЭ§ /lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0070-Flanged Wind Pad.xiz000066400000000000000000000040651247673406200252130ustar00rootroot00000000000000\[ڶ~_|[6׵tqhY` L{r^-@ Ȯ-__,08'9K{oi_ݏ_+m}5 Su]L{o?ސV%!lQ`#md3!j(\Uao4PnO=nxW$4`~Ɣeۀ3AJ M F'RX'ˠ;,{8|]`GP;y.|,}0[b_wvב~?MzmըK y~e|dK}v9;͏ؒ3yK #hH]k.:#_ j6vʳe0<l@Ki:g^38sՁNQwO @#N$G)sܯ{3e\:d1sĂP oS4QKS2W ;R-ۏpq8Yq<*|pӗGiٸ+~cKCr(Boʵ W%R{ u0]{:Fb'ra<37a^2,v))Ћ>s>yp \BUu6 €!BODf*хMn6vWF`1v.WbsKz*]ar>ƟVax\eG g?f<$~>/>Jfd1*YHz7AK!E~eθ?Oza)#v;TtCY:⾥C|.n>/ͲrX9.mKJD_I!7F=1p}IW"vSqpY&2ٟ:/5GEV.%,yg$\vI* qw2n6>I6wcuiHIRNQ\G;,W%2cn~J. / B}!jc&\}hL4SqqRDi%+ CA(|K&S:_EFqST3 S/Ѥ")eZͨxx-c~ƪN ,-EQwַ# sr.*>G=W@+erZW?a ~y ]rR]ʡK9t).ХCEܻ| 0kV9w).ܥsrR]빋UC"{uױ_޸]epo#oYR~e@m'*Nt8ѵD׋(Nt8ѭD@#(0!A LIpԅߌ-t{ng:I[<lm =| a#^2M|utCߓ'fr>Sg* ڮ4 `l*zZ)!˂wIt!䇙kòn~XC"?,i}c Q1os V^[mYܩ Ro'`.AO.HߒݝQlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0071-Warble Pad.xiz000066400000000000000000000035331247673406200242050ustar00rootroot00000000000000\r8}`{$S,1&2/*a ̄"[6$N2[~Itnub>|dkz&גQYH5D dy-=W͇O܎z-ԟ2!l.9tweo{-iR8I0Ґ>G\RL9*gؠp!=@-Exrߛ ǣ7CoһgdFеd'`a6D=ٰڒvqwL\G]By[ X #F# ˔"29x'~iz[BW`ccqeUt6yGg/&t'tkTsIO'qCn+{vVȭטva[etAЭBk [ ~br)Z*'Om05# 3@btl>[b4㸏bmETx|Hȴw{ _G߸`";En8{ލf;= vq !̣'DK Z[P' 0 lgqGvRQch.ZR`]&.$my`ھSG_E(=5DT{brile2z| b#lJGdLawNwIl+gS͙]~4y9] <"9€Һ]MMX'Ȝ0SP+SVzxGC^~DŽIyC$.zR[\:=;Xۏ"JF!߄).k9Mx̗֨񰯟̞Q8{6esp9,UZr R0)F;1 \]Ab g0[4ʅslb2X@V[zՓ.Oû~ .sÜ>1FcAX x+eh% V arYWĖ/;7x+WQX?Ĩ8C#TH5ldJo*6tp+ ͺky9$Z /q0X`ף:MPzpd 1Uۭ*MǣaU)ѹ^Kzqcm-';-== XB59ugauEo@& TN{b1.r@ѼM.Yojte<#6v[wBBf8PU-Z+Fq:?*Ut-j%QuXvFߒLThhDhZjV ijV"Uk"!ZUkR:Z5G3hC:Oy[o_".|ӟ=G[S^Fyn]NyVuj j)@N&D@ϦiK{/."@jKر5NO=<.^(e>rl9U )m`K$(h[ vGE!8vG$R9-um͌%CfED+;AN2R\]p2] Z㝇V$|9l\]0h(N*)Kf*9Q2`q]Llmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0072-Organz from Outta Space.xiz000066400000000000000000000035041247673406200265600ustar00rootroot00000000000000[ms8_56mI&ΔR wdROII4ɗwv]IkO?oZfa^7O>q5?ܙxh۳pq{2ȟx=M889kۏhēpu$;ԂƁqC''|4|!nC7Wt|v|thqi-y83p:5t<x>JHYC> ) BaVF+\"+5ǙHq Hv q,T׊g999}vѿ͋IgcABIB}hZ,W߼\e_1qNEhy1ti2 F0z\#Li&f[]햑, 9gԢH{NT[oyhsg0`47oQ WcLx!KaH; VfxJ@7zy )ҮOv ʔiQ.!`03 R6X#رW ÏK8Tv2]Rϕʗrh{<^'Q'xZ:ۻX3b(@ȧd q9Z.cxR%ö Mv`/frgM]KJ26H“ ֢ue"là EBW]#>'NU;IvaJ?>+De~;BhdcP}&i*r+RVnk諯_i _:.+ͻPɢ)\jpQ9i5^KdKS,Gt,:FYatGhC9zTapAĹSѯ]s m3܉;9G<&ԜMy-lU(y9!6 :Hk*Bm^8&z?%#u~"$L7H)8iޛV0R>; W]K,ǜeݖLrIojXLo^lE. L~Q/Gbے!@\y)wIJN ixQ JZЏtr 8iLBZ >+^s;h~]CX Nj2Xt:+0,0y_ٌlxi(3[X C+(\!%t[tEX55&ɂBw^~Ǫ/~}ЃV5^cB5f^cJ'Ilj6/3`qdtXFw@ S|ፉ;[c&ųz\pTt^[Uv \SEPtC:*Ej":h$de_t/>Td1*D/Yi2+5a)2}6 2lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0073-Shimmer Swell.xiz000066400000000000000000000036551247673406200247660ustar00rootroot00000000000000\[s8~`yol3mw؄LM tg/a-{m+ǀ/dCKB\tx篎a? .}o:v Sӵ}xy=l۟WO֟{:e㵅CG}kdh~uērmDЎ ںGNg7x5ZrNjd5Y,E~vW@>d|ۏYg a }Hh A`35G˕bqP?AExdY-ܹĂrMtt\->Mfg/>'ρgrK ZC㸵_m}0rMxeDo"kq=c޷PkX|A;ܺHt=PU)0A0D >ɬMlAXL&>w2f -uEc)}]|y^ @'53Q*'룑Ggۦ$Zfo\肞T>#dz jȐ_sk&TJIӥ_y@.-kMRn>NfWd%,FB. sY ]s7~!mOVèR;@9t QV.C|.aNT^aS9.y_kq3寤7#21[zp:Rgl8*HE!Yu~>KL ߖc.K+W'<#LG*]X֊jbƳI9>iM>^MU+WHIRRQN3)+r.[Ď}Ę[bW!W+'K>5+n`dES {|^bW'f*yX*u 뽇@QSyΗWbMHͨ)?x2\h 5z2;U%"0*9B9#ZŖꫯ+0آL[LxsJNPz9j BfԢ_JVGSZ\Ot,*V2 _j dSi͂Sd!У\X@V : ?wjzx$v]Wg1:I;~r]\0w/UKVzL'Zeמ(%݊ʞj_9\ bV֑%aF:ӥBE>=uHtw*tHt y40 e;0e= +IJznoa{īߥ 0 M4k?fea,[9ZOQn}{קzPa}Gu׸AԸ#A[<ÞԄosI Lnn&We`i3jC͡PN\O.7Rr]@.7)e$`Ԋd8K:ٚ|UU/S0mvUr"|_z[ω?z9oZa2_B3/OYnNlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0074-80s Poly 5ths.xiz000066400000000000000000000034321247673406200244670ustar00rootroot00000000000000[[s8~ϯ=kftXLM EPk$-_2W۲IlwH9ҹ}:ROs_[0”\skRߜOWgt_%x(qA\~h|R&H]?ێh׋rYȅep!a|^f0{fpv3st3c>"|j+,;f34@BIx; -#.t",WBƍm |_+Cϋb Uh<|sg|MɿUیKml}4֘^ܹL(70"#t sa/#jA$1X&Q22e>R =V!F<'@jeǟM"Z }w?\K}A}} v)Tl ĝDL5Κ\OJwٲ3).!蜠(!w18:د&(d>싆.@V!&Oc_2P:=[i!Sh_e xX( ~vřBSkM¶'C2Q-d]Гg8|b:1$歎b҄R)RxGBvy_n:?8Wy$EyօPD.a@Y`s2u wh~o2aH KM!K0rQkK0G~;ېpMJ/hkf2HCK2+̨7J$+Y^2}\ `~J 6m4JM (ct&G*ؖ VgT@o܀tR S?qbն } fxz6 SFL$Ѓܡ[Ha ֵ#4.!27 ~ ^w:-=Jbz6ӟ-s|.ܜ}Y *Fgybm{'O"觬̯%Pہb^zܫV:ҥ+!O%3VkN=5O-[f|x`KYW.`k`cXq?[*~֏xkN:[/7J~)+͆zD(;t1ڮNu:T7SݬNu:T_T2+]a=ZUaEZ5i}N 877Nw<*FtHxB}Zx ^(g*k.TrM\]%ג˵ r!QU cBC CMiZeժ:_-}YSrv}k̳TqPɽ4"ׇ]>F.³Y!ߗ6lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0075-Swell 5ths.xiz000066400000000000000000000034371247673406200242450ustar00rootroot00000000000000[[s8~`LK) dtjmk$_/eCB%!wtw?NmF ]k7V6BjY?$c[qTu&?\a׳cpyf qӺpf׈鑵`:Q@|LjqCбG"xcQ2`t '[DB+77pu4,fR({9wMae{{Ѫ+P9\o>UGn*ݣ{'v6q; RC8ѭL;;k .IJj`ܑkH5')T3 ?%L\{KwnPܦזӝu(iz^vmG.d.h=Mx ֤̗p`^$0BFńf:82_$T?{,\Β|Eܫ1 ektIzbLZY;]J\!k(OJc:(^U"ZR$g(׈ U:aR}[}h![UETJ;P1(Gͱ*Z%7> Ko+6Vtt0*Ѻe+YgZPlIei0\qE#A69˱bJ)cv$r^;s>'p0M|@\]?z~oʍb%[WNlz~la%4T"OqI.E#-i!;+}`g9- xVk#]Ryᦘ.yntKnBtߒ/DDtej[__sGgaLF)6کF?'5#neěoN:)z7yl]9)^Xtj|SO5Q +$Ԥ.0ool7tif ^c#[5!C[H ][xZߓʕ35rbjbl T FVNϋ yٍf.Xaށ*y(ɻk<1?685`C!UxFe`B*إ{/wi6lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0076-Vastness 5ths.xiz000066400000000000000000000034401247673406200247600ustar00rootroot00000000000000\n8}WxKlIMdNm XtV&Ur(4j^:3rg8޾ Z[Qs~cKܸ[^wq5\ߺvxyak2ȟ凎^o'8#FF9:N ]tևu 'fO'S#@Hp΍a1E1!j'T.Ά76'Uv433 D1eQABVh)QaR1_? *"%$ƅHv!J75^dGn'*[afu½i޹aC S6fW)jLqCg;!,e 9C(`D*V6U JBJ㇪ZO{'PN"zWڳ'H-N{pv3/l:_9Y@&6phU¬"%I`6q0Qd$ʪNSv}RDpX!Ȓ+E.Sl_suԁ3u"F` UfS:#ц` 6JbLGqeVBnUL~ N)nZ[_~[<h02U+=wPɢSSz@+!\4? yI/>ŔXGC:t]BS SH7ӵ*ˤY0Xe=2^?,aHn; uV.ͅF#W<mҮ(3W~yZSyLW3w> 'ny{ bSI3t>N/*_k)FGU'S֤}Q*qaPq& intiFxL>wW7- x鯩B>%mQ@>B՝TwSݫOY}ԧڶjmרix"gҔE+ {o?pR" #D;`|F|cmZSL9XH).-`X+k4rgCur}ܙOy9S ""3TR>BH@4ܮvI[?'y8׆&煝NlNZrJ9 "``Цp!)pYfmgJsgwQ7lă~,Xa6D ٰ(oEL*&"4G,L ى9j",S|ʌ- |_B`bq Ux2 &{ϲ؜,j_hTd1uK%fI*.(}v ZPkoހ(gbrXr#rs8iݠ?ݖ KulbLjY4㰎D1?F`Q2jf!".p9~b Vv`۝IlH'Wҽvlqsv{#m5Z6P/$0 2 w8+kTʨȝTʦX@l]`d| z|pf>B}ωx.&a0#2>mU% >w2%&0̓ʖporqJ>qG):=RD*8\GB0ͶfF.L8VmX̣BS-a-[\蜞D>CvB`:Б!!(%T ݦ$]B' 26$z7~<ѐ$i.2j7:)OPx^d;S'j+^YӍ@QXY{<:LA`;Aʏ,*Ʋ/\”JQh"3Er#1i[z'\#,]%a|.G-V (et%G >l )Q@;(}NTT#xiLjN:ԃܗ*>jbi󩮞Ou|S8TΧ}>f区ϸ3nH;<4aOܧ^w2 _|'<`?doսcO˙r]R$gqU9_].W3D2ݐ݊$= 4 "iPIS@3AMv5E<. BN%Tȵr-oXld!/JCXp`unހclmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0078-Supersaw Snit.xiz000066400000000000000000000035071247673406200250230ustar00rootroot00000000000000\Is6W:8Uڒ+ə DBbdIP jEcNʋ-{x>bLysk+F'u㝾}mÛ?]ϷV5;4_ց^[~ËYOG0IF7vF=t`G0amlSna٢xrӟ ǣ?mҿfdFE݃OlFlh7ySE @!$a!BE X ;FSeJQH+l :N&t V>\C5Mgk4EbkةM~?Lc>"{m(By,CQ?X6v1˷LĹ@퇏dRG:@iJk;SYN.I;~!9,yn0Y75$zx-u MܼY-^L3:vdr x@kGٲ SD8|5 y G߸UM|pvw)+e*:@BXD6WmL׀AL%`A.(Xʨ<ʎYX A{E8Ȋ[O⓳tMDV 1Q@T~h#E0B|.&0,ʗ>p<WotSu)E/Os6H^9t$`!]LxRTyXC e6Ic~T39 83BA.T ݤ}B#b5IgXYgYsI=n > # H|>\~,ء贈/9t;Gƶh-u0teh9yI9S;XLpj:D+(cR_QM$ӌ2KVeflPgQ)  TIBOaQf-\?.%U=_0͘^Ըx:^o PBf&E#lŒגɦ2|-$K/ }tY.^lMx\74D,jcray}o{{hnHW]ڐC1:t?{0&Hqq ;̂p!mE'v̦.6\p>/q7 ~1C kFM?a0G.&{/cL^#+F; +" %x?~A·ж#Br]dX?܎CdbMQ"1|40Z_ 6ގ6fi-ϓobbk:Ұ m\,+ Ӗ0Ӵ?>hjcB4A"Х-CQ„2O~ `Abk[C[aaLRk Ɯ,>{iK#%?|]tGC$'˄XP#)`EE$qn0YoE=Dj쓎ǠH:NnW!6hd*VXzH~+QD&?!ef2nm ͵g6s(ƣA{n\xfv7њK1Q|!&' ʏI.YڊI 1"tU |KJU|-M]CV.*_$3sd9,9:ם㉝#k=E\Onī\be:pdSDD TGs^FЌ,Հ{xCcdxII>,^l:'q?g'QWSAxSRu\+rNՔB (|. jbCB$RE}2 G[¬B~>exCTrcH +lх):X=b4~w}A{X 'Vpe$`U*XqqfY`!#2}9r-ŭ4^SECm`rQ$,,NglykVH2OYM%?)FK:8`_y;_ $Ǹ@` ­#QcN=8|~8M'ED6K{Ueef1:XI?[{gL|U}̊;ruue@& $E<^$pƉvċy>ufHBʘOߓ55%'J6j6k2dY)m>vHFϓSqW"0dMFOF5ȨݒV,2d&5hMFk2ZѯOFd9dݒywj2Zњd&57 nMFk22ngxy" *n9ڬNu:TwSݭNu:TSm4+]~4*ܐF;ҨpK/'ubhBϿ|EF>dM|[tD]I9rf'S/g=`7_; 3P98H Yi3Jƣ>/˘.Ugne*ߗ13kXi~gV=AOҍ.(jIlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0080-Jarre Strings.xiz000066400000000000000000000034131247673406200247560ustar00rootroot00000000000000[[s8~ϯ`yO}fvXL&Fbk$_e˒M7n^Hsё윽jk#u>=e~z}~QoWU{Cz3f;B֗m:\z҂IҬZƻ92ahȦp!hUgףmo: k{ob޸wkM0˺  X l*bFMc 0En|LBD."@,܄L<,#EeJ |?C 7.65Td:ӽe6[:K[Cz 3$lύ k0rcnjt>8DsQ^ս.~4%DT?2_FuYl=B/WP$A賈ruÁw{LۦƳRN (F%!`KG o1>Hl2;z m,s#3w a•C14+9s `>za*2+=˸7h](H3GĎ#w _" f_)zD0̋i }?v4'l3 UOځ1Kngr7ܭӹ5B!^ Be#l.&jy_p8T/cVx'ߤwGv.J9[-PjNrNDn6OVЩJxJ(UIZHO,e Bdet-et~*Z$TW[VEUFuVUOF Wâxy牷'~x)Z7Yh#W/htYu:fuԭQw[W]z4*\F+ҨpI/&5EjI^cu[~#kOv4&C&%LmOrQ)k6r x*\!S3hQI'`Kx0_+ 'AaɵrO>f9(ff@-5OS #z5lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0081-Phased String Machine.xiz000066400000000000000000000042471247673406200262700ustar00rootroot00000000000000][s~_cCTMf8I/*a[23_dnH{fݒZVw}[k5zV^<|z_穭Cם'ˇ?޻Bt>ViKGwlw aB)&bm _gp1ٻF`Ia[}:A#nQkƕ=`: =$<'QfoGGQE1aZocj\-"ւ#WѷEuApWh<_̞듙AlW4]CIGc̲7+:bJ51spHN2?M|W;´n^ZLj` ~j= Fn2mN ,ѢE@܌˖Hɞ(湷zK KRd^JМ8ramO-fVL#Jx H͏Y(?r9/qxtⳑܖ !L7'G? vրiVzQg]i({Va `. 0c$̳ ǿۏ/*BH>ހxX,S8)U0.9s'ka0U |gP~|_x̭L=dk x&`W:k|9Te;]k0rlS<`%3W<:''g0}&n3t" $ctShdkI̙QֵQfossMp69vC`#P9}^T:KƯKg#}sn<&Σߑuro:CYcqsc}9e].a^UJB3}E)z!D%Wvܐ\^r9RK$:_$s~l'zw/~-EIWvyE"6p|gg'y'; {T`/&%QՁp̠\N8ݥy|-#H)iND#@<g%1y;Hs;^Yߛ"UPK{^TL\%az>[Peb6q,qă 'ѣ8KHm``'-[6$K˭mi53#R>Lvxp'l4}6WA ^P^ʓ5X-@T3ʪZ" ܄IPfejI1;Yw>Od!dݝoVu5"1XyQL%~0SO#`u 6[Ξ&ͬT{2x8L+?Bٝ1:ozy2e7:+lӜ&Dmɡ pf*6yŽmP~m\(&U$:$=q1AL3I^/3$$A]LuI]`R&uI]`RT8^`2*JE~h,}|"R`0( Fa0 Q`b0`s^* F ~ gL1c޴ Q8ap(F0?1c]ðU!1 QHBb($F!1 QHBb($in)Ӳ: Q@b( F1?/o0{D\Otz{ݿD+6(ۺ+H[|=ip@k\Ԙ}1}uťTab>܋aRL ߁UsO^3䳪镐連o Vud|j^|9(3U5}imVګ^;?٫4Xi5e(j}j5$Q³(s݊vlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0082-Tronic Strings.xiz000066400000000000000000000051621247673406200251560ustar00rootroot00000000000000rF\;*)LUX+HAAPDL\` [;8 ڤ*7ט?=C~篻Y'm=xQ~~?>ί&0\׿ {K'owI~+Q\\1oNWRn k΃\l Y|%(wAʇNgr:A?&v;~x7bӃm.l8IQx1rr8;z_]F$+f< ?Ge~g"w<dzWgm)O/0?A70< s|tX?Nfȿ3|n?iGNnt0i|jFHHjX%wxq| V(Lybcq:kq<dXVUʑ۟.'(,^xPNiEY D+Ү DؔkeFs[/lzϯ7q6H+;8Vf2|+6i'ܖN@$iݯmw~@9JSdDJ#}gxZZ7ތ~fl]H"$&خm(cM>JY^fhVtl1w/QNN(׀ޡm/[߿[%x~ r?VWNV:nIN)r)6 #ڦuUj{RMPAz6'_86I:J3lA<]'.v=z_Fl8YJ (|,OCq7Ζ鑖?nфS`؂`m P`{1hPd mhDB0!ѐԘ!16HI!m iahPkhFAaT$EE!ѠְhxڄaQd$Z'ѐ4,&aQѴIC!iXL5= mi$-D$"Ѡְxn9$-Bs['6I45l/m h6ۥv4 6!G6)Em P`Haخx(0:6(I- lS`SRQQQQQQQA ÎОK=\lhD$$IC] i Ay4#:6HI!(mhD$=hFu i O$"6vHK!ICD3 i MAyI-mhDZst'i(/Ѓf$К뢴AM huP&נNCy45z6IEm i =qAyG@hD$$I4Ik6Ik6IkIkIkIkIkIkIkIkIkIkIk.Ik.Ik.Ik.Ik.Ik.Ik.IkP߁dAڣPM:A e z& OPD>i tf$Z'6IEmhD{HZ*ht;Q>PG ККr(o࠯(Ay77~Cyo95U*7!Y֠95s@k&70~Cy@i@k&:P@x|Cyo(o?By75-|o}U%ݢcO9> 5Oy -% قrdA)tuA6)M^{Y7dj")UOog#6)L_7z ϢYE8XǼ:7kFO;ˋ='|Ǖ}u.̷*/aV5m+ǫOb;Z*Mngbfծr9Vo]K uy{Eq<~n40l<A7Mèwv%銇~ʷZwZ"jb.ACP폵 n U_Qiuˋ7׊!KyP{^Ke䜧o/RZm RݒbeS/k8bmv&WI,83E^X:ׇSWZG_s9\@y\S* Ҍ Oc1OѾ%tci`apQauˋ}e1`34zI7Qg :Ga%)IAui:.FXxE>+eFOSSGc'>Ti3:'U"2+}bS߱.k)&]Q[HuՁ!\sm\εy9\ۗs\ε{9\3킾/$d\ɑRսrar}=Z..E0Q] s{+_VjH/tAclmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0083-Tronic Voices.xiz000066400000000000000000000054411247673406200247560ustar00rootroot00000000000000]ms8_L}/uf=ݹ cѱ䕨_r"ɔ5fid< <!BF޼f{i%>edH(~|4~>NF=0| %/݈?}+Qb)ה\v-DoP)qN~qzz;ⷭH$YbwÏsVAɰXg{F!mF~x;g{uM-DaTvRŜH,4LF eY r){XMR^"~&o6ɋ0)RSnOfOGqς>iG/j{sѽVidio !f7a˔x Sb+{XE=߰z3Bڴ5˛$,% d/X^Zd,Mnq}U-\UtQq}_sÌ0d2CTP.8eeU,*֓>Oiv7%SUYpA(T3["ʭ5m oUpw?ߌΰ j,nC!Rʕ,SW^`U]G2Z$NУI.)ƥPV̽ K[URwzŒX+^h`tv5W"n]nsi߃jbiDm=}Qc}gt-}}_œ A)fBbPBȤK)K=eʠqRm6_g tx"\#a*i/MJ~%օef E(H#.vƽlUY:ya*ƦY2ϕvzuYǠ|?M';rz>ȷ~잢d*VˠDKcBKĺ cMe"^Gŕ'n [MǓy-= ҵxeXFr$`-&`%`=֧pD, Z-F!Q ~q Q>009lRئ إ= '(`a>5 X XˤˤˢˢIS—E _%|YYY>!q()CIa``a1W98jmaÎ?`a&6g`>7 31?L,'qY\a*`fcfcKf` 9ذ=a0pChkK&aqBC!pQC9TH@9g<M«*"86/8TAqA(נ*X([ꁅ*XWht*y ]P݀p8T4@k+,+V3)ߊpEU P4n8T'@}m:8T#@yUp0PM;0P0tЁ}, `Fs ؤ- .Qzjd: (_iSIIw2^(gۻQxaײEfѿ%$N q.}6/ڲ}<S7R{ݵj8 $"RA1 bd*c?ϠYNE9vejBo:ɥF?F7ӻ T\dtިjL(>gBgknԱL҅ TeDBU|ŲR/l2 ²㇥y#}cSW8Y> _j޿yś~m;RT_6p?HVޯ[ {VkXޞjTfs^ޭ^u=E C,,Q. oFt0j]OĈ|WML9-}+~#W z؇2+Ly0!|, >JKv<ڃgm Kv%rC6`8idYXS@D_]a_b]cs~[q[b_9D8=OB2JjoyѶ m}94t'b+cHHXY` }rXv/l4;`;!̂)9>plBWٖOkdY1ajCʑX`(0W5|N?IiYcWR{w;>\uFrI'Q*,z@\Zcǵ@>KAj-0 mf9Il4ٸ,\5w+ bw/)V;p;Ιg'B&k蹄ba,|CňX@S)ӅvVGن4=V wQ8`~Hq&xv[3C%wx=0 &_gqCot3waK&e>/9L2A@ s)de+=| CGǷV)qB{9"<A ђ4V?r2Ĺz0U!l;_e;+q_`^eg1(bcȄIop}_EAy yywZlIEϮi0qE!A681ņ%,]B87E ~FAoy{&zzʮƞ1s/|9J?=C޴:E\N(v]ғߥҧڣ`z#g>tzʹ!m7Dn61BS(xhSQ7tS3zjFO=5f7S3QP3~ԟ*_&xxe⭗_f&oG#2M}*z8Dy;xZz,93_Z/TrMz}v,#݀93*^#|j/ |^e)8x43ZG,eFN /(4lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0085-Bright 80s Horn Stab.xiz000066400000000000000000000033261247673406200256640ustar00rootroot00000000000000[[s8~`2!J) dt2 W,!qD9:}:Rț .h0H"00eb&B/ظ(r8diޓk2 [3%wtc}4-pQ#zD\ q]&l^ALl%Hfe\WFE =:GqeAV(}Eq>HmbOLG z yLrC;0.Fw | T|'+Q7Rdb~)Km93XQ&?҂ywi^]h' 0$}OWѮwϡ^9̶:q䩣B%Qtst:q"scK(vx?I;BQz< ~\je,3םRՐytG7n[v 5]  Iޏ.h&t<Ve5+e<XϿ寘ȧ0"f(M-bM!b̯ qyxyAUٚmT!lB̵"jcU~dtweW WstL\I(+r|(Rp1^Ըx:ޕ?xhYA($ɓIVU`~^.ʩ7J$"1*9DvLK_oDk  ]Y~:FWSy|77z%PMo":[zSLx˂6U;8ZE+m $IFx@rZ `j~<chxY?h~N,|.>5.%AP҂u l`Al[U](인A:{u/X^zst%Q+~]1WbpI%.M(ݣM'JǓp>Nkç( z!Zu %$#Q!W8_> Fl/ iÕ\J(`)SJ4ެpְ%ۄ0AX``8Nu)rC~E .+Ɠn4\H~$b/yiZ~F%{'pU6e&k?^iۻ8P{5ruѪ7ݮqi%˫+2c#v/Ӆў,磻}}Z Sa˳,JYm҂8 C oO*3 @TIz0cH-β0"iy\G9$HRyXkI,QB߅+ KBj :|NW;߂~ŞE"u(*[lS -•w5%8/Q@.7(kFV-$aI&n#zc#+ \G~(&ِC~5Ҹ$(g\! Q֢ ?\o۶J '.?+Ag PV8z0q4* ؟ǟcD|p *4 J2́* WK . $׆njWR˪pr3% =]^e3?Go< Ru;g: rQ"} cJdB6@ z q@7zt *5.N-ub4URM|ugiM9֢}Y9hhK&ڞZ]ִj\MV-@՚ӖV[ĭYؑW < KUv\ipH[ vL mj20Ze`p>RR0ZѪ!M9R0Āh}m@hːRh۔Ж 6<Фt{o9 TGBnu)R )R60Zd`t'"x2M9 mYmH9V59і vd`iKh )[Z[F49R*>Pl-e6Y4,~Kу n"@R )gюsm?78t1LcdNV3إ'gJپh3ʰp"#Kjh 5rr9FC9fB_ Un0 ~U?qkT/6$]*J;TƽVUbe+]WlUV˕VV "RWmF~x@D}ew)TT}x0%Ux\#!<,V5flj>yq,赈M(.НpLQXsOPdܙ,b1YJhuhFe3B, 1\`AA>#2[Fv؄n־GY6M^=DQڔ暸~hq[8o>#|E/d#DJl}-?&&d0YK1dΊ.?_c7k,uRjqLkp f4ش'[H NYL ~]:_2 JiZx(p݀fɐl[/NEq*ܨ߂E~`AʼnHkB V|yh{ގ_Fk0J184>|jv}{b :H~w1.vǰ9 |N/R02K ϕ踣<t́́+RnZni/3,qqz\if1,#/"YU1Ze W&51Z 6lz bҍMB/U[ߘTsKf>ccOi8oDS|H~CM4`聿'Q/0U[L41DndU؂ [: ;j;!EWmfXW44;9Wb$h#}m!}K~VKx/Z/j 7]Kwq.wKwD+8#G?̺FϺ]Et].]Kwi;BɅ.t,uy˻.ZD6m'jO=v{DE٠E->'H < }= |ƺowut/N=x"ciO^|z|6&sD| |M&F8|>*ˆ8ڤf]$I2;^Ax=Z[(w6JJ|Qolmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0087-Breathy Too.xiz000066400000000000000000000037471247673406200244420ustar00rootroot00000000000000[Ks6W:3MO5%E;u/X,&4%^beک/q ~v],I@Yyg/5Yvv[pOث}ߟW! ~&Yݭ#F7|FSd0hN:6iXgWM6 o=!a :%Ha J5I[eIƛyiEZo``C4C9,% h ԠlbM,E1eĻ L~n5 HDS ζNa?؜>[{+<|{~~h( ;Ts8f֨-bMHKRkJ诗E1thluP$cIi9|EB\P$,c̻~# C>@YحcA':'ฝCaP"`'>pKnhAn8M՘#c{%WsD$ *H'7b۽=oB(,pkjkxgv_wmn^ÀTczRca-v[co`Ym JdpGpmawZ|ߌK(5bDĔVL&!KIAYߋQH^tgbz4ĥ.bZ1kʚL&IY :? p,H`A0ARKaa&n/}S .Ǯx?nwDpHKiceіWӭ7Rx|cg1f!U>).uz3 a%%%$b_YpӖUO ] `ם\}|_Z4es|pOKe]떽)z ,V0[fmųVKR-4/ZO[t,e+€c׌-M[;>cۧsElBR߁x[FW_ EqCV&ǖhZ`<1kx 2d'S4t"<߀UҀ 5d!$.j9"H$F-ҰweRT:餃)%eK(K.lI1^ ?1eyu*˶ɕ0z-!xtFbJG5 rkR}[}p %Xt/&z_Pl j)W[{SVg94//1IϘ%lX697by䲭d,LmƲ0XqB5UaDu`r=M(ʂqѩ4Es#\_nmҒ`V,;F6lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0088-Outer Galaxy Pad.xiz000066400000000000000000000051201247673406200252770ustar00rootroot00000000000000v8t]I 9̎?;[>E 6pEEY<Kϵg -])b?ٻ>Hvp+{ Lc3Fb$3//! A0Dcا`MMXVMmx=J 6~őMq=ŊGT2ULJwp,@0%G>bj2O42, "-%reNI3\V9d!18sgxK(3ύp0vy^ v;\`< Eryj0j&e L񄌧/?C/?2C>Rs0CR\u{0 Um qZf- #NcfГpX2!buyJeM 48{)cV_8dRSZB=R.hFp\4ΟuzΪ=Ʈz.B+ű=ML7+{(Cblc@h+kTNKbXR0UOL5^8U̗`䘀l;Xoڇaqx<ZO>epNW,)rؕ;f*ԏ@ #%xډx1Y!v2k)?-?B \@_JNG*XJ+" @]Eh8Ul|N<5ލ7N` p Ts;##3tljIX5"Pv Ue7pп~j#W~m0t,)NF~ ]ޜ-YUR[(ݘYz͙b=֫}@X'8URVvS{9I&~h "^dzbmT]Tm&U$.O+$'7'X?9Aj.HYaTE!lhb8D`r>n)%rVK$}'%}&kdo7Edoufoz볥o|w7Udo"{ٛDvJf*'{z-*,h{T\O0m%f9< 'MUTP7SJSZJ]U2jjVI)QdZBDConn:].y*;kH;j׍Vf/EicFC̍Y/h{ztzZNd%UcǽpdCY>Q|!uJMZKEFE)` G+2IG^VK:efG(h$}FZd$;IjN9L'D+ʦ-Lڜuƥk~qܩRgvOx9[q$o?8{Ɏ2LjۤE+{%-]nͅ'[|N-zB^ "u㜺H%HG@/{GuOu *qJA\Pm匫TqJRPZMR⻚a9d=Uq!?𡝧aˮ])ѕH])S|$R&ѓIqFi9'/ɋ+VyM)LZ3DKtXuU .:^%:^%:^%./~W֫#ݬQi>ҭH#ݩH[vhj&^&eO)no{ד1",T($S-z;hy SOx3Nd\:q6g@?9 Ոy4 8*qL&S_2yox3}卧sx5OSy QUC3ODP:\˵2Zr4-7Or]9M͍>2u3qZ&z"}lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0090-Vintage Unison.xiz000066400000000000000000000060771247673406200251440ustar00rootroot00000000000000]Ys~ϯA-!!O16P!pj2/]5F'X%z/}ß3s?ʨ\"гc,y:_^܆mm+G+}ֿ7O7~R-[=ɳ\+[Q8eV0Jah=;[jE2ʹվtV]jkxh}2kM`( hiID#=s3b0z]ENd(1>nbk6y8e=mMg'|qE"Hh%B19ܐ;Q v[Wc}]dlF&3hY~@$5SX&LhSr쐭7 Ze(̇Hk>Y!Of4Ϝe )N(2΄ ef4mFn[_j=eE0&%NwJ,&Sf0]RM$]#KN۴K/o VA50PF7RjԀPg`ngF1g-_-ev[:9K5]\D[FkȲ[`쌲״09~J4˶fCtN'x1wfzOCݺ%/˨_?u4&s,g&?NSI쪅:.ɁNt`t,r}8ibR)LMca!LB'וyvly"i؋fUC jvdj+%脵ta@#˶ph>4A` cAriXj*dq@A 9K`A)`A Փ4X0?(FPU( A@Hfd Z~OPSXȃtZi5E1tPycs蘇w\?y惏3UH^Eg÷JթqZ{@m#RU5 @9sj @ٍr(z{WJd @ @ @(1Ϙƚc54Bu~v*|K]90D68X:a @} q8|8XK98 c  @0aFCŠ y|V=ļn0q)~u`x[j&L 0 lN${$3ud]%$4p{I:ȃhH3vnq|9OwD5KgCe2B~MV 7~8+$]PQľqCLF#emK|5ǪeFj~:g-gS87B.t%32ꐒq%'ߋxO>JyKootMlwvg nnD[/'tkr쐭7ZNٝ0bMGKHxݼ}J ccdOIiס$bqP8f wRUyKcN,I6{v}Fk4m]du!%`Y`[*1<{iz@ų9f只^(ꎲW1CpGB8]*Q? _| ;p>SrQN66_&>g |ob>4}ǭ~><}TWS(Nu8fqũFJQ  srq:}=D&]/^g3'Pî ,,ОTqՁ#n:].KgUejt+皛ܳ]tշVxZߋ¬@ŒMxEy+k cWU&Ig7 uY.4hU6AEjJY.* EVhݼ?Z&lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0091-Breezy Chord.xiz000066400000000000000000000037111247673406200245640ustar00rootroot00000000000000\[s8~`y٧LM, dtQlڲזI_/`l[#>`}:9Bы*xoNL-&09kW?^jWkA=o<CY~hE_Z&##Hd5yQ"6Z2D+(r|f8NA{;&ј(P⋪^Kl jaЪ.EoA°BА)!.B.t +F ^ȶe38`<=g|NkO`y*l˫Y@B3TVIXV/=+ZT|YT"0,(>%-|ħsmHb?űv=;5a6~G0' c=LѣEC鬕i-nR:6H%^H,Jx jyH '&?ăJ+pe0Mإi|ؓH'=>*S0Grn!-aoαY- w@f'6S{{c$VƬI<f(p=J, j{. >^̼{Ͻ}OΔFHt}P]1a2DTr> ,l;XL!{҅6S:!<ךnHǙ]<*0qNo53XQ*'~xߪu:5Rk;BhЗ1\-sE9,R=MexeP-Iɖr#c\͘-?'/Xy}2B<;oJ)u2Ր(n_O 쁍k|| pPk7}`L3n5R2׺ YEAwp}jM|z؋֯У0$߱_3*UW]^xC1\5c\@1AZtI{<\0I6aNynᒫ )7dP~\( 5Ϟ׸vp|տ]@(oH̖t_̒,d$ %Y(4A|)?R"xTL-mhRbxKEAw"R{Fa%KAEa[F(|X4>a|>v:өnNut[S}~:өN50OpCHp- ' ;jRd,L\[&-)v&+5!CKrCDl+xVRk45rM\k6zʝk35rW! !I.0!2]At8퇭ViH .Cn$Mlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0092-Airy Chord.xiz000066400000000000000000000033431247673406200242320ustar00rootroot00000000000000[[s8~`%0ӤglY h-@-{m1,ِ0/Ist:>8>}~q!ȍJ˳1Y(ϳç?ƃٷ'm{!lw^pJIR>WM%FtcG0`clQƐ4`(~*Vnȁ9Z] b:Dfzp7l]K__kӫ,>+%1Zѫ% SQ#֩ PȊYT!m-^lu;a8Hv!^T\`AH%uЧtO'y,HR t[8ҟ\BV4 >ŁP9cmu|[c>X_u|{ckg}|Ϙ3R?cJo*sf7ibuhY<_P Pmv[†dp j'b:]Fӵ%d-qut7.Jt-]W"'8]u]Ni]wCz1W˒D-Ihp0];U.ׅo#fY9xgRVߌk'&`5lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0093-Chimey Chord.xiz000066400000000000000000000034671247673406200245540ustar00rootroot00000000000000[ms8_=5yi2@Hz_4A-}Lɲ!q/w×6]iwV yӳm^Ʋ^t,B۫nw~ _?oY`qǕs١+}s^G Gwo~qR c䛨61Dk(Xdzߟ&?‡?3>"F6z6CAv}'~' m؃ lLY%6k4eX{-9hސe[Vp 5Ul>}g|M΁Hmo`El<.m"a 㮰W wءm~c[Ķ.}G6D7SramNJeG_#=QgL놣FPSXcc]{1meR>%~[EI&@d!>dH?qR\+77pu<, ~@|M5 &C1:KcAt]PU 1~3DKAyt<[k|,'_=lC+|do-!St)Eo gy1Jh@ǃw( o^Oc2Ź)c1讒qM[/邞 rВW/ i5RL+ieCd_un׼ga. tcAaECLBA,&Q&WO B3@*uhW?! s54 <'`Eٜ&p: ύ7^s%_+yq{hϣyu͕~)hzozl\ H?\S3k~ZVеktSФUk?MK=1:lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0094-Donk Donk Chord.xiz000066400000000000000000000031211247673406200250710ustar00rootroot00000000000000Z[s8~ϯaZc[ftXbf%@lE#lؒkɴ_eK6Sϴ;}I@Χs9Gջ_ؠaJnMmcex|\ twW~OSgKz?OCt{453[$]iWǕm~k3GNc&-2rI֖"WĬb)Ma $8 035F'4.6Z'xKQ5M9 f<"Aӊ ^,d^lS?4vMQΖ&7&p>FKre/?Y\+a2C:KCnFJ묗:%]i_~F!T05M+:ctrΣhEcF)HtBcmh9U}bQ ŜL{XD?N痭\+̓ njWt}È X ώRm{pnQwsn6<\h-tSzEr\n֩xz=%:6;{{~:=%d}j2f:|A.E9[fLya:rhx׌#ExQ^6\W%}wC1GOv!]caDV DO-y滆DZZQNƽMK&SM׸l;D6aRuO1LIywuR/ڡ|ɧ6`Ċ.L^~JO*v<\N8[nb6zvnneNӊWܚEc1Phn V̴N 4$1pk\VQ+M(=krypLhVPUR3ã;?"2>u\V};Qw룾n]ykK&|F$wӗH]i?oQ0%0dyi.quG !V4%i)_QD6 7!JM׋%1sKiG9 qy`8sK\syG:Zy)\gxLQHu ;8}DO@k04}5BQv8{. 5M=I"4zD\HѹF>u1!?CØ+ ȒqEwW޲c`P]Aр 2q%k*}tnlE:3YbK ŌCL [ *I^4r"#Ȑ<'p$VBN>R+^ge@li}]?+NWJ;۔(,B0c҃^ؽm'L8$פap5, %>wAc{Љ p4w"TH.Ie,Hm7g4T'sd yS8,}⸨9qCitR]X gUIVY;U8նY$nSatRA(hwf>@4ҨDo+{mSt?Mk#~ȼf4KX.Y_z+?+ڳ]VѦ*Mx n5Kq<8o 򗤂`F `ڃ ,i"v*Kv|VG UEfd5!t8iY*"(mKl }aPj|B4U~qt0U\䇹,b&%Km}ެJdऄ~!]+m=$-T߷ ~z֗k=i*:E9 J&Dn2,J۞.mn'l%ga!}DVxQ6s̓Gk`ȱP聎GБjݮ@|G?iER7Vf199B|[?-Me2s?5_J e9o-lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0098-Sweepy Noisy Pulses.xiz000066400000000000000000000034321247673406200261050ustar00rootroot00000000000000[[s8~`yO%0ӴglY h-@-^K&a|& v/m"}HI:w>=5UͪL]#t~U}\>7zTЮ獣_H.V^Uj2Bh<Ҩ;xMv׫(;@Eњ ZGѲ*n?T,ݱﻣ3qFc1B _UW GL-#1 ZխhpH8^1x0blÄijvSk4TX\-~#cpK-Ux2zsgbM{ՏGMm*Ad}v.zՏEH+%QI*6M e|${ífIF.gp=⨿fuĹ/#kM;ZֲxJa  ¢tC侜\~Vv`YĴ Q(!wõR4& JKTk]7P8ADtzop֪qwQvv^`•O CD=E1cpQ= 8{G,X]ɚaj""G}ٗ؃!^bİ=9P,F•ɘ.>Qzebqf^Q#Kdv˙BRq'1}tl_OjM|{/v]!?Q| 755! DJ%Nt5sD]l9~g.I0U!l;_xء:-0ïd)MɣO7bbʽ^V_yh*,qQe`q,VeJ gϔ'o-cKݗo>5ls* /ٴQs&AF'(5Ⲃ( +!RnhsJaZ[GX?bre 2+fpFB <<p"zc KX+rv n8Ʃ2Zs}]Acx%|Vj+B#k_[i3wX 3tx"73ozf9s4^UdL|(,:vUӶ_c#SO^)DdBOA3̠Yoj4k*~BNz6SYzniY1*NSO ۥ/oh6 Mg̵/ D?S?{j*P{1rB 4ڗJҹ_6Ьm, i2/oL2[%XMp<=*dItj|S8TΧ|S9jP;3#8cA3V$8cIWIKjjqzj0Tk [!fpF>dx$^g^xIUAM]M\[/g3 q&aKTYd)24#^#|ffIP>F.l_ X!R2lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0099-Robot Overlords.xiz000066400000000000000000000034461247673406200253460ustar00rootroot00000000000000[[s8~`KLK) dteׯ6$a;G:Ws0>~z E1ʰ>gF z̯nt=oLozAҎ~ѕa &Jx[oo0a; kC%}wj&Qޙ81_ aT#0@WF@= memIPEEI+!W1'h6Cn ˙qxGA7dxyXR")?OF`,}`6׸)e5Mȋ?!xc9㺷ph@QmcNpi9D&[(SVfs{@2^F[߫ L)0+#t,s_^GX7,J$,cw}1J"Qޅs˾8ĈxQѯJ (܀y&*C0]1qoMa{߶["oM/⑔)5txΙ"s'Ç}yi[q4-D e+H7!ra%7^-w=,?} <+`i`0W.\XMŁew*ޗ>ʖq0Gyv6wӓ],,Wg7o $TBܱvf~4-FɘF?쿩kBY)=,5O`~HRA朊6y})UP)ƃk"Nؼ|ԎTįr3f*RH+ldv'j_v4s.\vzv~nקՍn܍qJ7ޱu㊮܍n܍tYxԻ+EB#({V KAFE^q7"ye͗^F~s͊/k'ӪBO$okޭ8X7NǺy:֭ӱnXwNt y0uˆN+Ĥ)&*:X+bYa#>d-D- HgU54t 5;BMii:j:٥8xv4Û2/2%фٯ)Ă2>*~c4,[zl<<lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0100-Scrubbed Launch.xiz000066400000000000000000000034571247673406200252260ustar00rootroot00000000000000Z[s8~`2&)(;h-Ӳ~pl]x} Χs߷~m#YkqxX vov7/NCsyE{Kg[7mW 0ޜxrMhjE{)}-:&b8o;%!~-@[|cL{w!Ge#?fW82j&CY{sN{޽pf#݉iíz]х LYBmw8^0E A^FCe8_tuq{⭰@ný3^6}5Yh|%vk#{Ƀn7Q6=,*&EG5EHNCpKvKTֺ<9; Ås_܄GdZ86k%ϲ)qփo/_Ab<$ )O,`JNC˲Y/c9NjQϬFq(y];wҴ,% 17}8MÑ0DAW_ט%>vCM$7%aVF@g$.ezŜKEW'R>}i5StI yMIdL(#A nSHYTt'LR) xvDvʯ܇r4\mEpkm)}y}k 16hꁆ/ ϧsͺ3Z5 1%(XI/r?-!&/|NBO<-%*̓a)QuM'8OG ل4,8)hBz%5#iwʦd}xS{Bԕ)o}2 #=tM38xSKYRզpQRW9?d* pq48سl〦 ∼@=׋:ꭗez gDi(;+|Ge׺&-%PR6gH([WTVSj˰.%e苰uuu[Wj)uirM/*(_u]V6|0an^8Qf#HqIflُ-i *}',\sBC/(CO^NC͒Fj#36e>7tSymrqڔ5y?ǨQ7nVGݪ]u:nu*< *<Τ)]p.#3#ӑF|W) <³r@-widrFlzmeܖur:f9y@@'w>Fƛ(2%۸1&jFbˑ< ^K4JwX' tνN?m 'VK4޾.x>e|GBty[v30]}R<DDy܌_Dݏ>{hL0R:R=ChKЗqx!>WTe*G@;VOU96%fxRnr!$Ih;k Pc1լ<`S ,DM<=1o/5UZeTyKڐU`:GW5xx5x]QĔD>O Ʉ=,7+2c~yJq d+%ms̹BpS;iD)V~2fYd"pL u"_wV2%VFK[]i2NGҎ@#UL5|T)q +!r>Ryj}H'1_Y7-9dA77ZEQ5K $ p"-ܦ7VsVo`&?Wߛ5sk}OVZ=bҀ7ƙm5vu&6.ۋoJU/ѬK-uk檃< ΈNAgLH<꒨Ilʣɓ;ٝ7T<ÅU]PIui6Sۨ :/lE6T ;Ch+ccni)'?<ӷ&{{չ_?gt`ZKY;[TAe}@,4. K6ZL:ҁ[gwl3[XFze^1s~\/E F Frxٟ]guݮx%[u;iʿEz.,>Rφ8ÔeӻAboI̪?~q{t=}4N]H +_ÿcl#NFZwǑmV3'dЎ`!pAܸInƓl854t`6LHkO`C$vsǚ'@BሄaRm#b--BBfȻzG]7bs#\cM5Mghv,Gפ1pm~@9pAk~Z^D`xQO8%<EF[!l~r|d aש&,Ǘ8v)~2@RS鰿'ṉV pBI67k^ˬuL22xr4t0;Ea;(B-`u49YĄpgWt'ƞYT*S(lnw<THNYjRl=2;u0,KèǞB]QЏ,^4`ep;YA&%&#=|"2DbrAVFeWFtʧ dKľN3tNin+@9ݥb!jmzQ\< H"I=!2$VɄ3\+ĮuHLk]R"1uM1ѥm Rd`tU\Db5؜0(PrtNFg;f=鋧K%u*C2G[: y`M spݜdv0u0sm RJc J zCIN]Nػcv$:?fsLz Rީ~ױ9g^+1N>uR.kh&x] {,ϗjp~bE> h@-]\$g@!$WRDrd-"*bl#K{GXKٞ沫SϷ"Ij%L8^ oM>9U,b$8Fsd `)][rbz+r$+ `̠p@ʒg}k{S*jhW) `ZdElLI.F4Zw[ɚ'd˝pek,0"D]')YZ?:Lq`]ކ~Xn<^M3w,֏2d%8Ke8='kDzL/l*0wV\IxQ՟m+Թ_Zo̗OySO"ecOaMazt/ :v;U: x8Zcwj;W"MH[*YpDZ/%RS<yw;B﨤tY^ہ9x-8@ ]kG,ZA-u®  IZpPl{Q|+MȷҔ<.OOd2۝Kknhꆦnh#Vв籷n?s ,xZ,I=fyD[ՉnU']h:ѝDwݫNW(hTx OQ4^Lj##3lLA{ (b>|ڞLqTvq/#-f}&=F[lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0103-Electric Swell.xiz000066400000000000000000000040161247673406200250760ustar00rootroot00000000000000\[s۶~ϯPR$E]fttlz-Hr``P KJ__P7Emi&],޼:hmPo?w"^cy;hͻWndo}H!wzv m_$m9\%rUăGCҺif'7h1NZ? Gѝpgsv%q5z^/`} % e^{kZ~` P 0Ihg̒\"0FWe(i>s}?y&t6!GnOÝ;Y#ccf?<^k;c9jㄆ ŭiق,py?O9By.iS%l%סvaa>mG gA>?rQ`9 v Bxݞo[n)Vy`τpۚE,Fqg y:[,#%)VU= !(Utp~5tHԋb> ҅J)酄2%&\v6$f\}<є~! 'Hrй}da}k]vUjGQ+TG]:Lu-}I.s~JpQrڐ-IN hc ؎Y.>0VV\*NBtyB*QCS^>'bw}/)yEE"y*5yri.zCEEyf|w?OGÆ(s]2Vp&sN&БR5)rϻ5){C)#*)Rʞg_Di`E+b 7shroY6OWIDž %8 H_ %(mOw% ~!au$F3fGӥ1>H<0pkߚ"r}vPN ,8` d'F?>G0Ig0qj|+ә˔xYSZ.JVtR{E6YcΪig⒋B_Ͼ|3 `as>sTF؃JN r)⏛({E`Lޟ)dݶbόyEg^kΗ`*aD1 .QLÂᴁi *6;ռHdjꋊq`,dW0_R MJP`IGϥ3,OqU&SRtq|}a%-,8ю fnٵ^iz; ú5RU@cDKZԹX.Rv_+CvSfuEтG*T*5 Ղ;]-HAjۦo7w$J $gדu2nzp;ZLg_S/YTG7zJAOłol΋t^ˤBWK-TRA^^ދ~^xuE^҂J *-ދ S[^ak Z*Kދ=ԭ۾ yse潗)}K!-oxtu9j9^sQ6; r774ܒ+IƽZE?.p% E_Q|.ȿCc/rãY5 Q h+z ;Y 3D`2-SzN5p+KjiUn:ѕy@ݚiE9z7pvQ9+*g֪V k_9azY9.۝zvF{ [0\lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0104-Classic FM Twang.xiz000066400000000000000000000035061247673406200252060ustar00rootroot00000000000000[[s8~`yo-42 e%~enH t9:7s0>~~r {亪ͫD,dq]}_U?z۽YsM= g?ېA,ޅ߽jTLF~%@+ݼ^M1![F!,W= *ߴ?ƃ?V4݉ _aP!EU>%F4 ުnH̐K eA" r"sd%hȰ) WZ_w2 m [-$0DSa`;<vlnH)*A=BmAYu 0eDAe`< s#hSk>SZ  ~OSt/]ώik{9;ͭo L9`;#rAdx#krKLrqC౗#`Lh@7YEN<@[06~Na?$$ԃ6 ")rwyLzI9sH3t}.yFTjP*"-0^ʄT.-kj-'[^Ƴ I" Y (Dy{g܌f/:eR^&uԎ ^ q4ՙCWgx!>IR7NjeGW/8D#kk-'EwSn$84N>(L򕐼RDKqpY$5`~(t^$sL| ڿX,59<ɻW/.ihMd4o^5IuԿ1os``@ߊj:P8 {FY7r+< c^y$gP Θg>/\T6GO xa}0sy^x̶(.ʮy'G>TZY;&7;yEA~q<$V4k̿[RhFʺoЁ)F/*:DzxV(Ky[^GB.]%aZiHځ QF1jxT)*R@,:Ң<ѽxo|`jKoΕKӓfWma$TN+tjk_w"|5uꭖ(tiA WO5oR@h0_W  yMȀ"Z2]k*3tȚā9{M˄O |熏-gsZE§Oi+ :qRЩ(4o<΍2qԤ)^KW<)=lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0105-Ominosity.xiz000066400000000000000000000037421247673406200242760ustar00rootroot00000000000000\[w8~`yO}bi&䔳 dlEG"ٵe_/8qf43zzؠ y4^fs1y||\wv=}4~"}םF.\H!{:XO^i6LVa$@jfÈ.cl 7=VM6pt3g񨡱O? fɔ0hFok ![ \El4YgLhZ@>99Z",cʄ_DxK8h:< Ff/6'=gro_m4Yjz Q8:,l^8Gj& gxמGE05# ]1 "pBSsM¬i.눦x֑YLg$(m)avP=1R)`q4{Ϲ_yZoVz$qr#<-`jg vyKw8S+rfYN*]e,av@ Cx& > n~sBb?HDd|Up1aRd A9nrAV| b#?Ӥ\؏cnW'b)O3N<2Є nCfԾI}1{=Ƕ<6H=l ezxV d:'ep0rX-5h"H4mcG(;.-kMn&?"Dnq>x0!ձxcLVhT?Y틇L0^<|ѣ+Q>z\=ۜ aQ1zuI}&K"y1~ E^PHf𕱜w}Q3TMX@ }L |N! =ޏ3c]Zњ(M?WGi]8D!GA3Jf5lmR2(%1z0TU6{^V\cAt3""Nd>XUh+eG_zYx"L1YJOR~[~_p }u* wϔv6=@e戥)9q@˓ VGM:>ٹyW/:Y0X 8]SzSd<\ .AOƣ4y{"\QvϤfa_D8yo֘D@/-"gZ̬yS'SGitrG*{}cE&hG@T5dWKt]eNHcsZӵzځ?DŃ~WۖR^@RmT HSs-ZZ\ ks-+zZ I ^\iUi2]/SjJ Ap&QĿmjyd[_~<2#ޚyi[t*'J4,e˒^eK.~K'~[?ϸq';z1#=}m LU.V:wcϷD`)_Ϲy7~ƓIhjKfTCB?)msܦ^Yj逯 y(zyywGޭBS4/G+fqD6cmǺUv};ڮu>ֆ^#Ѩ!=Ҩ%IFqj`ps3MEIco OC3*ҙr:SWеt 3Tu=KAוumO )DƠ -"ZTK.!hIK(cfwk-̼QY*{+W]A`g1<-Z͠W1NvjqnWJTaUf Z柪h}Glmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0106-Unpleasantly Drunk.xiz000066400000000000000000000037711247673406200260320ustar00rootroot00000000000000\[s8~_תbRNY SMe_27g2$D>H >}7(q@>7ex>7w{͟|fqώ }zG˲_lOG'ƐP<2dE_niQԘ9]TøIL0~nʇqoX3.Dk0:dz_F_Meٔ`iӑ@ FC{Q "p#,czŐ9%/ePN1h'шoE@;J-`us PEz akJ+۽(hft/*L!L"u?GP+JL/ć99},[t||NSEꧯ~'kW<|U:>D%JgTv9FR]"7U:ϓ^ZJ<7/FybQL5ez0ħiEZpH1^a2̸ j+ݰK^Duq* s/ԁ l0It^8sCwW޼ꭓ򤭣EzD*}g" K.3@l0U׈KRܑ\654ԫWK&d4)S9qos\2kS"N*")_&ҨK $*VkVVmSEcszg_A4 @]4:W|EW|EW|Efٹ:?+bՉ۝ Psţ P8MQTCͭ+j~gqTw$&aB=ّ7|>;ڞ[3>/Fj >%;co:ػf,zj+[qK4zh>N}[n'Sn}{'2k]c>Z5&UcFZ59ifwwÛLbߎi #s FdH ZF@.|N_,al{ ;{Q9B gȢDZ$ +5VƹU%[%qnsYK2[lҀ0^m]%`q؀R0kki3/K11-yGlmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0107-Hammering Metal.xiz000066400000000000000000000040231247673406200252310ustar00rootroot00000000000000\w6_xoirY ȶEG"heϖi_?/Ȓ tKB߽Խ?ɻF_6ؾuWo\?mHqf=;:{]l#$#Hx711]%1lؘ1${M6p|;d߿gpߟG`:c# z]Ӄ_ jaܒ恟0"/ & cZBm"Fr",cBʄ]|oDBW`cq5^Ul>} f/6'=gyh;:Bo\* 3(lKċ@hǮX骱a3I M[ g*m/S*'u8%f|'Տ w0"# psI+=/e :2 6e=0̫SH`086˂Spp# ﲕ {$ipQFocLH bb"t%VGqfe]̌ګI2O V0|mBAQC?dwoePqs",&((2 Ab6r@\#; 6Se *6M)oqG7%gO_D9ۦDa!MLt>f!$0xܥr qg.S JGFP*B%}BYGsiv:a0(x1I=.l'ys]05~eOWê:*C?'sd -.z(qfB3U2Gm]9.)vx> "51z E~(QHR\yNVY3^ڟ$0i J-ڽ'%.Ox=g*jOuYEkE m:M>r>^SALp%%tT8P$l]2o k!i[1K5B8c8oz#e"̄PG6NQYzܡ;!0l D.[^lEdf?Wdv=+>$cIJY$[N1[VJDz2va^"ȸ`μJ.R}[}hYW[v>*=De6 PMYqUSܥ'y6m, H61~^`ÈJt`@1SNRUX 0n܆C:׳6n4OeKqrC,=p̜?.61gu0zF?U/о;j_TվQ2<w.v$r=L({_G%_zۍ&7wdm?5TS: VՔT5#TSZ6k;[AUjVWͪPՅ.Tu''5iUifu=\4[/Rܼ{fջE.wQw17 ^poKD-1NOݽ\ULխ\e~WTE*2U[3Y'o?4Kȵo]U+:⢣uxHtk>V}[nǺSXwcݫȻx4j Hƈ4j IbR^n糢'5ەE|co2Ͻc帉|AyBCLx,L1ՖYb%kkKcIt)VdӲVpq>&;%~zߵ۵纁<?GOBg*RK9*}abV_aZᮢ /Mj^lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/0108-Boiling Cauldron.xiz000066400000000000000000000052111247673406200254130ustar00rootroot00000000000000\Yw6~aR\DLՖM-#i-6rqjdH% m꼢0r}C ?w;ȳ}^>twWq;Y|~v~xǙ'OwsE{~tKKա$Dι-xNȶ:S;^],9a'7ri&6"9ZY&48I"bhI8Kv7q8\x/k }+,I]QڝBO8_]'&۟6MG7wU'姉F#: kv\rB} 8$m\+] pm<^!gy6b}n6UVlvJ+35z(O"be{螾_[/5[N#Y9N,=Fe(deM5RG OrMUbmҖo^5j"-}ĕ#{h~G^љR/p Q ;=Δjj[fteda3pr vq@z„,M"; h\l7?fdt3]Atf:碣t;$pP|dL4| vbpz +Y6:*cetTqQT YyÙ'\N*GJҭ3'ԛ3{i6嚽|%d)0:c_[sVtzgm k$mO!b0}'"اloogaAS,a*y ֖WߖWߚWᕼ4p):+ -=V[ܖ[KMW-}S-PN勹ea^ҭEBSZ@h\ Bf2UFk Vy@tOѪ2H+"~F&<0F.< 0x@4< op7ZFh<&B\h夃 D1hYZFOmIhMކ}arY m\:tKˍ> ˄hIeX(F<Z5x@thB| .I޴\TZA<3z{ \Jw5|ү#Pnwa:- .S#iv@ЎRcGihG6k ._y%׭+5/h7O(QI!of L#ݸʫI~>Qڗ \h3+[Kt~^_el~w)~X2mh<OsHyʩ8@p~Wp~W$ "Yɂ29o[` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯` ֯`KW~W~WyGy4`)R]}6um꽷K[8'$hqF$, 790;4 Dݙ!ϧRFi'^g)z[KT=ZCWz7T= <]2E֭eȄ~m+>!r& XVVe詌z9S7 ('zPN w6C&3Di?ZO=s ѿyB48_}5Z0LɹqV <[ݫ]N/w7~-<:Оu ?blcڏ$hV|a'5 8`HZ70,x2ήt"a)Zܺ^-+2a-bVh*plx/<1+q@r*s9X`xƈ#bl˄@% JktTXA.%N VaP ܖM5k9E|5Ehֻv>YGUJZ(I4Ŭw%D]#NBixQ|Ӱ${S9Ba*XX2 ">REh3 ┗ xDQp zguC$ʁ`-& w[Ұ e}Sʬ"w)+q *KRW$C:@Q"TՇz:_t4k J4+D|u|0}NEe߂88^G%HaAN*w/ I]0z4D%%])RqY3#x^G)U+BV0Zu1_*+ĔI,SdGHCXM.]@ ᚋ> Aa ܑjW:n^E[vP_oIF=T:ȝKɻzry1R0/% Vy/$oh3> '>LL.ֆ(ע9=-8=)to|vx5^UKuj!!U5Jr+y2vwa>'LH0%Gi\5X77"=J97?g{ër^*QPqw-G$ANDfu ~ ^ݐ@-| ċ6SmE(4'e.Yg3ug/shm ~^$i&waMlo{qbѠ7'A[k7Y[o5BNetPV蓊GNYtvi8N^vЬ 4iK8H ]`Kbvxȁ $rȩ{a%#($ii+W}(pKGK].Hc( eJbq/hv6LPK }>zEW/BG|yk’Pq"8NVc'3QN2&`:9* (چytz88bSQ,~; e>pp% Gm&q:Ԝ5WzKwNة5|c\6K~+=6a\[8 2"?g'-v7lWFrb0 3B>a&F"ą8}> PWtE'6ν_ 6}%ۂ3`O4D'[̰+Fc8"{SzҳďYxP:gDV9x THKLrѥe}`ݴ92T :"2=i9~:oE'=}r쨕P;S#շ'@:: iiNAFB3#k-"CW.S2%{], ^ q3St1]2uD! E.,HN~lIFĻeŒuiGk"Dgqw?R:&^-#=p> C%9L>~'g(ًov H-c\ē ђvx=Xr@/4d"źPlp\A[m }`g-]8C'- ."׌jQF,DgtĘj-3j X|`/?JύiP 1)["%aU`JT0n|l'YPT۬t:? }Qsysfc&+ v Ħ=腒spt8nv ev@7Gw:Y S w,[Yx\Ԙ=x>,3U;1HZA3g41&|"nkC{QbRt0q5Z'<@vDn>q *:訢*:K"$m^5^,5jW"h6Z5ʳTODFA)2j(29e;=w}ګ/ލBv쒣$ ) @N9wϊ;uyu[|A))ԩܣ;LfMݨ_{Y_늬+'ǹ4\uE_Yglm;ڮ܏ -jY'8UOJʫ/So\޼LuV23z(}dSyA$2L3]L7gy=ӭn_tz~EW\ \qE+.IkRj'L0ɪV@."Rq(z @cʇ&t2f}o+iZ[b9q!RA1OV_hfDŢBct$&;Wmq.SgBy'kfMp^^V|WZ䕚DQHnh/uJ%׃PGG>5zB.WFxx/fU҉B2ZSS@R%H(9$sSOSMIzTMU񗻤 ; jrS (>e`U'%X?C?PU/7 **fS]T6_[)`Z"*_QEFUdT_**$Ir\.˥rT.R\?$Op. ɸ{q RAY=w$"=#_.ӫ끖DWIpDNVIv*N%٩$Ivu$;Iv$Iv'qr%ʍK(.Qn_ܹDN\}Q \f8}QڰTF4]_đv©Y5pqZ\UN5.Э1# HA ^ F(`PPSP@AOrָSx֟Yul|2,h٦Zںמx֛zG@@ugߏnײf_o-D͛U~2lmms-1.1.3/data/presets/ZynAddSubFX/olivers-100/organ-combi.xmz000066400000000000000000000076671247673406200241340ustar00rootroot00000000000000][s۶~ϯS;s3M:-jjKdp PË@%_d:b_M5]}^Skvko_??W绾۳I4뭅BD?{B}MOl7~Ҭ>nQc(\ƴCH!ܡȩF7|cFhzW.(m9}Ze[o7zmO6V蛱-۠`'Jk~C*0<~nX<963m4ET(CjCy7|!GV=M WyU&#8ɔhK{*Σ{cx4 {7 '][>M_}!G3?R4]qI>QHqF^mЈ<".4Kh% ]4s2&̋]8dcnذpX 12⁥i>FΎj㯩67}SS+*V;PVҹ'RKC=AmiGQ. w oo;ĴC* ;R2x2[<<+ba@!aɄӱWvk4d:xN7{xM`t;yKp>\.};mХ,@;EÌ1l`<J\K3 +KPMoFAA+(̰Sՠ+ (vWF/ k2|zMG;_uT);tOa&LοEդ'KϰʾմcA_I&y_[YN$s/va"~qk|(J<oyr`:''c̈XvYDt*飅$BZIܐT-u_jg^~sx{iWVIp!`{VΨl+Ǟ䎣Qqh'wo G]8ⴎ9Ӝ>,9Z-M8sZq׃)7Nڋ;šѺUA|Rc=Y6}ȤZ"F#ĞY/@7zhIry-^ﲊVE^mܟe|O| .Um)r퀸F`[LSxԠ,J؊MNy3ޞ( IyJ*7IXZKKV>kJn[hVWder j;tb IY@={PFMhr9WhQ ftDI-̎[o7 dSj{kyFVխ%u7 3%lB8Sk*ceh,4uv;1O>Ig]=`00?ΔaQr\iRҩU0Iu<5 CpTz5F5f5V5v51jIl+5&Yv$@%V2~@WzUN&NvG4#zqruv99v& ^()ÑGI`]H"2!Kx(BNĈGh|Ϫ2 'M8i>IS p=_E솤uS&Ӎj4 =_xdddG!jHvҴ|7أϬÈ7|̀ ѾTIZRIi&_c*CA5)rxXo}teE,5(;(߀?MlPrC*WWŃ6ĤHaG-X,K.RK.RKJx»p$ ^ p/ p/ƽ&d^z^z׋@ GA#vr Gr Gr#!G͊kf`#6`#6`q~V:\^u C$j @/ @/AVEЫ @/ @/zw7p#7p#7p#7p# pvE:r30#30#GdU.4_Ȩd̃^_ȘsPF@ePFp0O2 8l팲3nQv[e=f[__/ä-&TO;Gt8;^j *Sr4G77{gS1fصkuq7ϧ{Hg ŀd>/K0-(VKk!% .\&9_WFPIԖ%_'9KobH>!IHyLfSBW?Ey1$/GEx%2V|Fz2 [D͚KzT+uĆIyYtP T?аkhx PhxJ,a)}ꪈ0EJŸaBOezYv@\)r;dGɒ[A#o3i!%q 6uwL i& ɒlME2vXe#2{֊Q!Y;kpgy5 \ָQwe՗A3IwjXcntpVոwvw7drIIj$Uk$e"҃*xv{{{{{v$U8-K;_XxD's>P UP UP U?bUn~BYn܃}FfVvNn*̇ŜViLdf1v6n`v±Y6868qlZDZc=>LHCюHSIx5OR.]zơ*r.H.\ksA/͍Fymn\W rYp?,y&ZWrS\A$#ifzӂ&g|]UħKkI|͆)g]pSEJVH1<$V>x(ݺ7泶zzZWEYMԿݞeM_o-o1lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/000077500000000000000000000000001247673406200232545ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0001-strings_pad.xiz000066400000000000000000000035651247673406200267140ustar00rootroot00000000000000Zs6 _=uo5yr-3{)ON~E@V춻>%~H>|z^.ZkF<mań\<^&7O}zx5z܈>)<+/[^jtNny5{ 4)Fm 9{,ڰip3&Ձ߿.zwaeEÖKv^g>'G ]$융&weDV,$\Dq,wE͘qb0# r?Sߏ6"u=+wdp&Ҳ L-a(f^kzԘAoV04@1uO'uV\I[?UT>[>b 2 <4Da&{e0ZI t`~&5q*b1 %)$dzhP|g1JX2"&|%,Ru;H){du0M20 F2V­`Js ؚ-IWc<6vFsM3Y!,,_&RsȗfZp ?X E1 ~82;]YȘ=XUP͝ DIS. " \a4 OB`4R(S  6kyS*:e^O_GiG5p|l<*cZ&d!yP=B$y\wb[FW(Mk[N@R{a D EK ڂQ܌תgq"/."/aHA5{nw YZ]4}*[@ڒ:C:KS2:ԁoM8+2jqqz8?3Ƕc&smݩH7[hfF 884k1kQ2n.qԍ^hX*!zSTZSKR+K'F;,4'K~I~fl^I6rAopeU}hQ}<_+y^?wPO#DoU^R)VPy9s^!|8V5N%JʹaC%=N ^Wh r=$<\ll+fg?QŨ(!,nV4½^p|տ5ݢ_:12B:V tZ[ۤZt*t#al\ی wNY.M:}M: 蚑hN 6NIb%D;\#C!Aq77-}Z4W:@(pq-Or~ގvY'"oWo435Ws&10R,xE}9$SIӒ,9Bչ`;{@Ogx5XY^ ^700[ovtV~gSnZVqJ7j0{8/d?XQO~~%=ߜ%}VǦf͋FXj&Κnf᳙Fm&nf/S3ݷ ƣaD:o+$|R@E[ponܫIZSE5ʈѫwh0`Hy,lS'-JE -JU|];'Cɢ籜YrXdGle`aGV<Ԕ X|j>ټJeGذ  $ϧ*f[: Q.}Y-i M:~@a궷SM\. #Ŏi&If8+[PEy*?-m| ;L7eƓ=oTROS$?ڟ;'bby:[2!ɟ})&m. dt.XҤd 7Ow \OKbn%ij(pb\;QU:Pt.ĩpD*wٻ!㯃(t !妡wpן;O!g\8zUFz>Ex7>6DAjn3BFW9U\ƍ=`PB, e ]9[-Ksx5jpJ.[-N ,̻4$ r;z_D+w.Q9 #F Uґ}D~pWKw锤;P)HԲܡ6GRNq^:ԁM8+2G>ܲ.c[Fhz}&suݩH;eF@B5 tPA)JOY8u.P'>{᠙k 0ɚ:kN๎O2tZ~zpQ{eEۀK؜\Xyf)%LKBI3rj}^85@ p/"p\*:4_/ݼ`;#hD?aRДD+ުOVF(k> APLk6Ts/Z?B S^ĥx= DWF@3vm,H*`WY/0R)g t./EN5<_7=:QIM#3h,ȶbunvhNzukܑgT͐ e^vyyk̓c+wv^.M:yM: 5#т [GwhRw gAH馐&umX3'[? \тPz1Ɍ[Zԥ+Ky* bZX'do8]~8_˗l]:FuoK]ɹq,2?f޽,vבd9ygzεVhj&oKzN 5zYt3M:lUb Tw Fq|3"jZoBdTۂVl1.ºYXJ9`4u1Xw$Y}#xu1?`4n7>^ tRSE@L G\ipxS` QW2^ Pg(Ҷl8\?j&ľK7vF'֬&) ҦV4;$x>" x.WG}6F"dߒMP- Dq$(K"|J E:%![3I ੄К 6+yӀ2!o'ȯ%yo}&"pS)6Py9:r^Jnhr-T]㎦B 2mBNϡBu4*Bcz= Df%KmH2*W۹h%%_g$\d݆FY`ݫ-<^ﴋl=I͡# ,$E9DwFEKct10`TQǑlͧAM|9۶ノ#;FV8,f:e:e閑hE6Jݏ˥ My=.TM.l㡐dMK{RJF x :ٳ$ߙ ]ъ/\dHuFp@I'2)%Yȡ1Gizoi0[wz-[|/#緆{Μ{Ī~B3e~lZ1zEV;>`0϶KU^\6 o5uR;ѭpNt+  Dn;ѭpNt+̷}&ډ|=0}@۩mb8|Tsu?=H45(vMJ{"z; ]oCbb 4b"%,D<ְ,q䐪 pjO9B/'+t ʈ+m4jCv Js u5f WRZ!8|i3:cR7vNǩ٩Y)J_.V3HfvZ$ aG)zHlN >7;F"!̄m:"T 'Z4irLYId)#D"NNJTBhE ZްiBϬy?~gu?>?zg p|jt߾ao;)lR*^R)JPy9A ^JnnIs뽔 hÆZz U;jLw]!!`013'ZQT5OGv4h/N~$qQQ8Tz]ԡa*q}4Rs bX߱db*Z8Md+lHaJWb#/gA6 9ڶ~CCr&e&eƭKlLxldb)hsK.eEP<$@LliUjҶOP?Fl{,w"ޮtIjLbIXS@IeR!g QcEV1rRHX71lC4t1ëjR?2G -qEPfE'h5h=ۚtׯ6ڴx] TnVQk]eD+u{w?~c?~ށoβ acJEg+, gD`;ѭNt+ D|;6Nˉ  Nm{^0" IbS|-LԔ֢[DլL]b3XldwLŬ'RKxKJ괜|o|zѺHT|+0횎Wt OC.ZP$ w(|߇W5S1=bJcw}QAhHKgW*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0005-mega_string.xiz000066400000000000000000000035261247673406200266770ustar00rootroot00000000000000[ms8_=%N4p 2@Hz_4ۜ-pV~ MOIJ}vZyӣjmXr߻l[o-پýeazst͇_GWӯ֟[8hvǑCwG#~I[=|r~Ny Oni$RvHCFN=Vmt0zh߿&}rxO4hyem>;#j*V5sA`nH, E;63[l PG2y8K~Slp2?Բ H-(%gQ0Zc{w1CCB9@l,74@Q#]+[$m I*݅4ueSQfpqvfYud;)fp LU(SQ2m*T2E>bDg/4 A&UP{ IfN/^.5Jy/̖(st ӠKj]BtˤK$4'n'۝œޡ(/2,ePq2W%J>hpo^!4kBbiOrjJ5Po'78**q$A5Ӛ *)KHf9gq)gUt ݝbI"*+R85B*(o1}]~ =bE} 5rܑ9OqDՍplՍ0Lu#|6ST7u3Ս0LypjT'ݷM3+ƣibDZ $\|.xonWS٤DՇDTzúD]+>v52FO?*fqQ)N91lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0007-bass.xiz000066400000000000000000000040601247673406200253240ustar00rootroot00000000000000[Ks6Wʔ;q2-O5%WV:M/l4D] pARtxJL.oЛw BaÄ{\<\t?ήκ޿yrnc+wϯ?hD]Qj`En?B>9QCl]8G);K;7NE. :_Oh2Cr7nit.+ wY^e]5Ϧo, (J?vi%/Iav!bRq_I脾x#w有C@Ώkc1k$YOa7t䗑\K&ú\O澿T ئA6͆]t%a td^6ͭ4bqH*4<4rA>m6J" [KȄG"_ù˜Ū>7)]~FR7%`\3 nnFWy/aGfhk*@48EpÖˣ-բXCXD.N2cK-T3s=`  _ !㵾85oÛ#x0f9ؐ.N-e8(N\4 ?pGd41\0ؚ0\x3 x+mZ%Q@U{svjg tf3F+S\/\"@ȃ(a/>1:gZ/y[sx\H Tb[%IК8)$Tz:p|x,E3m"קAHA3yo:wI t.elMՖ;G{IRh9NS^/:,0''sf]]XE(W"G7P" 8>%cڥ{dZSBS# 8i*IPs'l/^/5y/LpL :顷rR7R];IKHbddw4IrOHvISɖҦx0T**4#_oy^u@ 9GCtF ekyL#)j 4ʺVL3P*ϡB0Z?µWp̳C XՊV#+-[R/!0 R'|.Wv:F/"Zyxr91Nݬ_ч2 zk, ێ!&ۥG) xI er , Uzs1l`)#TJ\nd|Mɪ~FGjwt1}̔PD&d UtS0. ӽ54ezBcf jHA=k5cfbk A }Ӎ)L<sGGzyA.Ų$: nP `z;.Ǚ3Q-mn-=9R͢Kfm_iS-q^oGC9MףQ::{Q)mb-mHD-O-mhKGUߘ--E4:,Osr?7GMn3|4_qGkm{={m{T5 rĿŷj͋m{ _Ft4S?y>Ex573[~QS}O4ODӍ0!t#63L7|3gMS3g. v^q?:!Wܑ+nI$ҭ7zx9["d|1.|[hpK-Ծ۪.dbK5ZndN JpVb[RYnxKdsӫ64ž"։Ӣw\kK3mUziڳ~=Pߒs ꡁ4EZT̒+r:3 qzf74K`I/wC>lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0008-bass2.xiz000066400000000000000000000035371247673406200254170ustar00rootroot00000000000000Z_s8xO)4ig\9 h-Z,sL}[aْ,4Sv]͇OO᪵!qB#v}nGey7~_ξy?lt~Q9o\QEEV#9QL6T6/'>n}7NWmt8OnxL̛Lad!h 4xIrD9 &1,q%Y,q- rAe|6گޱU5Mg[o4?oԠcN6XBAηkRh'l-&_m(V؄(Xͣh%L:espݶhp~'UBHP,s+*ԫ$%L&#_?w-+P;+# !,@<Ґ+Q㐪 P*w9Bӯgt1J*t4*t ƾ3+(N-ڐUSEt2p=e3:N++q_ɲח \I3-qF(,BF=Q7'썾x7;F"&J̈́m:Us#Z4IpLYAd-~G ЉE$@1Y( )Њ2a;*h[vҿ['I8A՞SË'N.f  ^76~kbtˆ+"jqrAӻQu"D\o !Q6]( Fq,BH ̓VX&D#c{ 'J:F_<\(pdH/1/s%Dy94eI+Mx4]:JrZd_:ϗk^׷ה4 [%i'%kHU>sJ"$y9WK hJz u;RLwZ!&/|w 'yQTNGv4p/Nr$quPjT$z].`2qUQs( X0D4ipCL ~U3 >/:ܐ|t䐽zn&e d̶~׊ %$c3EU+4vrʊ/|F8=/ScZ4jög΂l=:*8Y҅-h(`cԦEYMnϺup0~Lnǣ᥸plW0yhws'X{M_Xx Nhy]&i\ 0hhS5˸0۰D2ëPKu;qq'_"8˟UԒG4ZEjŽ rUgUtv|}0wwVChwũc?B/*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0009-agressive_bass.xiz000066400000000000000000000044761247673406200274110ustar00rootroot00000000000000\s8"{8ߩZٺbcs`&_ KlO;1_u{?}":X4 }>O0~ hN#pALqG= cIlyU(i9f>=9]4>xEԁMû7ג9I.uw `we.PwM7=d'8- Vy$$"#K0X8߰,{`a=Nm[S+D~@.΀Ol4J+wtNR?`>B\#_tˇ_K-7' .̠PR_:$naȿtjW" Қ>.N=Ld0?u爛f sd3Cj\E/7ZF@5n' p 4eL!Y [w`t蠫$^ #P、q WQ#Z(gnescK>ovI*fxOyՌEs.8IJ Y,KKq?>YʘY"$*i"iWDk"pLt%L@k.1{6kq;S*h#꿞guظo7>1~xʠkUzx7O((?_]{sTd9׵<%ЕiL( k 7F_qƀE [98i]JYkn?ڔ,/ber"?iH;=9AKIc 0BT::-~("|h@q;|K}v†aUzM8;}X"usD anpELS'џȏ= ۧ9{IRG@5"= `s2 u+.tAY<7-(R$E=_*sƄubLWdm>W4FR"QŴq27r^V߾fwC"3i/OU)ɖ|+ ZF(zUZ eȽRkRo/DF~$PO8b#ٚƒvP(A! 嬤~~] ʔ`E &7{ڭ*}PK=C1Ff-p408 4MZ؊V@ ״_m #ۼ7)]5)]'NWdsj`uO0YomFrܱ9tiwST )14cr?!Uv>'43PMʱ ~Bj?!b(t?!eZp )͖DMircM*˜#6 7èKOZڱnիjǺUV=v[ڱnkǺU߬6-vvZ?:Cv;d-w׿ ʇj< }(1Ęw>U 8-ul#Uu5Z_w">d9u:9n]'#eگkxhha{:0[TevYf d>TSM#`;C-'me甧l~,GA?c&{Em'#>zsځ#9q&&>/Q) J6Dlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0010-synth_bass.xiz000066400000000000000000000035201247673406200265430ustar00rootroot00000000000000ZKs6W;Ǐ8զڒ+ə DB TP.D %!'[b~aw7?? bvv ? xhOڟ?rk ?PxV0hz 9r~<؆ۖr& );O[#?NE뎦6,:^Ʒ`4luG7YӨ%]Wx %1.SwSm[Nn2z-\I|0AgKJJ%f*iY#߇?.w-PC;-# f" Ih WơմTuE&_P* "UUب{w3_U&\BT^!qjÖϓ-T c!YT;KBYk]x]I\*'A,Ckpj;w30c8ffbC!;ZiP. !&&ha䳀Dlh1PBK.8,7xŞ߮|PvNkxzSAh=xLiќk=靟e$5.^^8_C"t 2t^$uroCZ$f[#I? $*]2[Vq=_r%p?랣 CŌ$Tёg@"?x`]:mPAC=ut_/K8+f=xsv #Ӭ;p=ꥊ3([J}0aRsYW1*u/^eETMk39M)|rR#{T ʕNGx\NNѭa'K// T3;=ZGs}Efco2\|99hp5 i*x mS3("%mw~vW#qDJ|gM]Pc$A53 ';Kw2m!b`/*|wrx0p2^EH&*+Kp j~TLz]Jz£ƺoZETO3( X][bYs[ڲRKҎQ5C.U yKe̓B{C΢eޖۯ-YtHVWhR /ĕiQÈTE@Vll|1-5yW۳f!*8^d-L<Ǣ]'`ӬLeIsuw ԂǷRf]]:/^薭#ss'(+J8hdnc֘G \_5m5y ЋGQv* TKVᆡ8a5mUF.lj]1Yk uvy(T9MV OҩȈϛ~7yO2s+tvh|)~Vx d#,5SgT7`3ՍLu#6ST7|3gM©S }oW +FdC3<ۗIc.2{E YuUO tb#-REY7!B2fWUӑIIԼR}nޫ;r8sc^hv\S:i{r1rk$>P$.n!r.%!_3)lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0011-synth_bass_fat.xiz000066400000000000000000000035341247673406200274030ustar00rootroot00000000000000ZKs6W;Ǐ8Ֆڒ+ə DBTP.D %!'[b~aw7??ֆE1E]ń\<\gGgϟ|j|9z7h}ߟ?|PxV[]{m=…9nQKElmK9Mأ uGUǓl8:t@`6LadMhvCW) wOڻw &k.$J&=m [,gqZ(# q$%O}?ފdI6!>R`4S?pncSuNc'{\˜T iؒOkV(ӑm+#}(IJGr"ְulpEDZI tb~ͭT0a M > $rAm%i 1>IB ??+2:T10Fۻ2T7 x@ϽB a =l ?][pɲؙ\O˔Uf%PpDTa X(Lv/#x1mf&6drL B +lbfFIVxJ!Ap7p0|zOǽe `W{O(8tփ7;Δ ۓy[>\MR=(!%"$.B 3L'} ))5{ي HzH eIu2ҐkUv$gsD^H$j6:H ]w܁wC0~"s|n=u e`s8ݬa.ad5Q6t7PTqF9{ ?ekZGF5LjQ) X][bZs]ڲSKWҎQ5C.U yah̓B{C΢eޖۯ-YtHV[hR ĕiQÈTE@Vq1-5yX۳f!*8^d-L<L$ԧLyuIaI^;8&S ֟܎GK%w+wUx{Ν\쯘+urP>_lڍYg# G7H }]V0x$e{2Q0Ku/ʾ kUn;B4W_UQ°IwdM+%P7Z*)lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0013-supersaw.xiz000066400000000000000000000035371247673406200262520ustar00rootroot00000000000000Z_s6 JiKoNo 蘭Ey-J$EJd) @zSIҘ]t‚8{?>8~/W;pͮ81T;8v ebFny5{w 8 A;i;5Ŭse6 Gt0vz?XYpD.~B )%6xwݲ)G(E+ Rda|[I G-@(I8"?!:X]8 i@ymp2é,s La*wYc %SBYoV2P'U6Z*6(-V@8^#Fl4^t UgKjn}43TDdzh8 }'1*@*RBc ==+4:~BM0Fۻ6Pbd< P^ax%ʼn_k7Ο62,87vNǩىY)J_.VSHfNZ$ PYG)zHlN 7;FcChv1֐9դ 42uiZ@ ;>64s' V2n$A_Op ~ &/^^j^\}bKǒd}Br*ɕd4/J-/hpo؛ih 4TeijNpfBW۹[,z'%&ڰB'e"]XhH zkNDh:b@z+1 TPkr*jJkQ r"c`4kx&L]b3Xld9LŰ'RKxKJj| |zYHT3Wd!_[a\5LFh2]->*sH.Q/jbzĔwл8r ]_6j*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0014-supersaw_wihout_release.xiz000066400000000000000000000035501247673406200313450ustar00rootroot00000000000000Zo6~_=u'д5ؙ^ZcIѢDRd+M SSH}7>=EΚ$)E{!,C.냳o>r5~;nX? 's U"-N.]2F.y5kw 8 !;i;5Ŭse Gt0vz_['dF E4vA3੤В2  @5ްBVܮ_Ǎ}oՎ'$; qVo)\/'^lr6z G '_cs1 8Z-)Ϝ.[ɠdicH{!2%SIPK @kQ\׺J%$)|+O*rR++K헩\҂,þ,̾t^VI.RѰ?t*6,t/߾_o;_3FSۤoUٗ*KSVc3 V*ns_Y9WNI0MYC5A}X1ܓK j:p;9em*oo0Zڱ۪t3OP@o'l;,V#iʠ2O:ݘhNT-BOR[)gMQCeCG盳lo~tfËVXjgڙnv[᳝VmgۙnvڤS;gF?xn:b>z+f)@Nw*T95P r!c`4kx&L]f3Xld9LŰ'RKxKJjz Гz<4^ATcI| 9 q-t>20<7e޻Z|kU:B|h C>SbߝCʏg[vi;x;gj"*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0015-superpulse.xiz000066400000000000000000000036661247673406200266150ustar00rootroot00000000000000Zo6~_=u4-D%vf;ź蘭Eyw()J`T;w};͇O%QLCvu޾vBd͇_n&/n,Yyc]Qa$_'Oκo'O"]8N*Ýbyɺ o'|4wz_3= {wNgdԧV ⡂\UOT }3RL5pȯG6ArT `xąW[=w7n'wv.ǩ se1I[rc|$s GAȨ"0`$S&usb9{7ypM/#By LmBjDѩLSV τ5>QA #("kc<ZSF p7d"_zW3D4y?[xj5гZ>83XDpA%^//NuC4ox@#6+5J&]L36k+ VӍ$P4'kܸ 酌C,(Х @+>nK]M0 si$(&"i@5;݈H;+B'Wzt0wKqԡP*B8o:a&` sX,3Y]XsT}ݫ40uQ- I/ojյ9y 2X /ԱpH2_8iȰ65OjRWTwz\2cK/dCgdgJԝMWe| {AMaBdfB,MQ[ 󿰛Uq Q -]Ds]4_D6ShRe+kaٻ8QГgأ}:1K@Y{23{;\ ն.ZMIcRSS.snc[`W1-<<]lZ@/0YHݸ&AM]kk diȊa &tdiA!N䐽H}%֫K6;617MI IA`CuS"tȍK{V[nt:BhTٌm7KM4eP.m(ntaQ,U̙S@I'Ip)3(N߸w(vމ6Oƣʥ;;1F//arɹWXq1Ϋ5~#EPk5_IKCS,=3vC)rz96Dje_: ];WA]C눔\im[1^<Ä]MjYB-kz޴olH0)TֆT/P pZg/~LK{^W&CsrӖ{VXjgڙnv[᳝Vmgۙnvmҩ8fڙ.+װbB:+sU~-rlܠg_"e-lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0016-sine_pad.xiz000066400000000000000000000035411247673406200261610ustar00rootroot00000000000000Zs6 _=uwM{^\}Kvz^xDl-JӇhQ")R&Oq(@қugC℆}>ey7~\ο޹?llqǑS ϪK n+W(+7bˣlػ Ycx3Rup¦dz;&Nu8sp:ut+; 'P"XJ3XvN;V;MMIĈ$t[M xǶ-@(S0A~^C.t0'[&{F|z² v~OsW?€[0(mDJOzܿ;e o#d B` õPt,eܽP"0XTsʅ4"%REF?wPU4T+Pc PjO9Bg#T1*m4jt!JƁɚDbO%֔p 3ȗIPJ{lu> "yk]Q4c8!Bi@5#|WNj(OlPՖ<J.P:N kiN au\<$s8̱kkU[jR:Q BQ{j嵇S TFnQF hxE4A-P ʃ +x{zU{r9_r^Jv?$k?shM/$[Nx8*>T/ѥ۾ao;ȧ Lh,̻^P)J" ^ 7҇ ET6fPh j)tRFYo1u0M(Sģy:2 @Y{vb#9m\1 \ԋmWXݫ.G7ڽ[~H-CK,YbC#3І[SZmKxV̂L8Ѷ~C7Cr:e:exCPڄ4JvF[rAeEPd=YE05ZCfӨ! xy7b۳gI)MVt)PjN'FK'iaG)|2&5iQr,wbdF:ixc֤nѦ5*hUZ*gLەɏs{gͷ,/L^R;ѭpNt+  Dn;ѭpNt+̷}&ډh/b@:+1 _T>QkrkJcQNr"muWYb̏?X DctNjR x J`|_|^ɛHT󝟈l+0횎W p C ŗ\az6E Kﳮ1%;(awA?i]W}A3?݃ Di*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0018-organ1.xiz000066400000000000000000000036141247673406200255710ustar00rootroot00000000000000[Ks6Wʔզ'ڒ+ə DBdHP_ cϸlb_{]kcÎA9-.;ۃ·w]O??X?wI4÷P_#λdɃivG|)h819^Š:`x;'zO`ǁK.;.~B.u(!4xyN-~QN$@<\xôp$DsbKk$pq9 WY6p9T |N?*) (7 LG2 4xnjfJPʳ) XOG^"0a VvLǩ$٩*Yƌ9/UYgalcFf2hx/o.'W5dݍ,Ճ!85=*B:5hAF!ǔeD["PpNd{MaqEЄRP<+v+I8}>^7 '(kt9Sh, 8M`ovڻ E&8򗲕T?_=THj%Ʈ<$Ib#T652:dkKPDy% ֵ4P\n_sUAGcfsB "AHPRgtž3H"ߩ#t/;F;QuCW)ȉ晙>uC=0^6uX9fw''yCһc5nEAS6RS3jxBumcN^PL Y^I^SB"I={YH=`5֜ >IU6hS˕KR WKM %š$91.n_'iۙ]]H崱5 kMRnCKi4!;!7/Գ>*SPy0SVL|Mg(yoH 5TSh^Scj pI9O8BӁZm$۲iGb*`WٸQ(8HEE9gj{^vDãpfm :14\A0FL5fеhpg _Jb@c|<7yGJݥ/R[;(\*@&ַ Qr AA;#H)%@>/S׻j -ְfF{I]e.\?H4)*s ^˓R!(fOL.W܉ƶJpN+Vy%N7_?TIBZtc,}!/B',rT CKoDOV /%$^Ss{(Qj~fP}X{/FϯG9!_x'?M?{ٮ W50keҜ>u+?k'u+lǺcw۱nXvۄS;.,2?3fWG|ň4_1$IxU_zN/ XT`~n,uWK] ]M+Re3z)^RUO%])|4lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0020-pulse_organ.xiz000066400000000000000000000036621247673406200267140ustar00rootroot00000000000000Zms8_=%&odiK̔R 7n2)o%KdAr7Om>jŻGakM,H⫶"At~ zO}f|={w[nO#S CQ&U#A\߱)Rm8鲐íG:qa&]6N5A mZ\$UnmE)@RFwmI"I 2nJQJHgtjvH ӓ *dvSS)J%O l,D)(,*A =ch0zbTEe!VK};lBNjE-VU!Y6"FnnlѪ%+%<.:'t<ꏮY TtdP\\؁ث4 СV  g[}ygJjʊIo(RQ@,Nм7;骡`lTp=uEnu$YeR c;Ix af]AR^"I$[9H+;o*QO*Luo5DqTwv|o7pTmrsAqWYW[R!Rlw'(%!B.d0 4 `ptq7GY_ϵkD }E%>U_!Ĩ1Y (EneW\^=)E*.IHI,CU\Hz'!n1dyILǕ P44˃;~lI-z7uD,H cA=R+P&$ WXRǠ"6 % h51k +L;L`B0zx[㴁`nٙ~`!YwPnbz``Z;krN|0%OIj\$ֈI!veT_R$~)Y\#TevEՋ(k*' ];Ϋn WإO|WI%НsrwXmtW=+Lix%?ih|cyᝋ./30}STUlէ3}v83}q8ӽÙN^^o-띱Ƒq>%:BmT4(vyݴAN@7qf4-ԦiϤnfGX<.BcBT&?oV83}4L7|]8ۼ*Y )KZݸ^WSZjІWd \YR%]xպ95^f=^ye)/wm85>@V__S[ª +Sq.),FKVG+lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0021-rock_organ+distorsion.xiz000066400000000000000000000041041247673406200307040ustar00rootroot00000000000000[s8_Rki&d\9 h-Z9plIdܥSJ/~bX0t޾k6ϛw㫃槏o>v96Z%?<cxW|;XAxl7'o!YQ>wSaxh8rqcxE߸ɼ WMg-3ΰsw#xa r\GE(`5xc縹11YDhIBD(-âuN+40%a O-| {^Z%byKU?n1,} p 296?~hoSU߻I0R(c:i1n cØ  4 9_S CzMzw̾ \'s\32&b*pY$#[dG?Ⱥ(JNh=r1pV\^ѷb2 p2^wV]s|7%}0X..ߝ!P])]L+˙Ů९/ef] I5p|^I0HrmWiHBˀ2W͔ DIcD7D `LdK<9x .4> @RН<5]okQQ96^b[ޏ/71I,$8 =n@o*cZ|> ) #/s'÷D6@rRFq*1$*̺$(հ]͖x$N|aΙDnÈf{U~'D'Lub;ZvbRMClBBLqT:С Z"Qaqt8ȱ$6V9nYBU [(&HOȍ91’`Dy-x)ΙEI?{ᠹkQrI&VQ.均ݥKBގ%]'Jtļԕ$%sWv#M3m># 4G34#sEZ:^1ny zKq +P74 sAҥ+-Fr]e7=ox 5ԗ4WIȺVSoյzk%KXJ걮dc]+NnW˱vxL&<FШt&= B%ΝT`]941< 5;H Im#42I"HTbu He- 9|$6bq!9 $B)j,tIs"]:ӝ);Qi t@~f8F}/݆5Cf>$r>r$ wj"GU=M@ !Qf)pD&J΅EI{ykQs?I.^qL;yKZgKNJRWIIriKE%I61Q4P*2Ⱦ9_Áپ^أ!4!'iݗ) Wxs@sI,K##_yrPk"@ Zz u+RLuZ-C@@^س%\͓Eyt @p%l#)-: $zYP.)U$<7k]C!+0$QbZsii\܆;fHl~<myPndtYLY2epK,33-*TuΝCPRxXe1a; K[J]o ?'Hm˚$uTo $21Z Sd@ xQ|:HeZңbrƇlh8`-;0c K{9G+XnsJjxDZxW U47IɺUn׭v[%KXJڱndc*kMn׎뱆v?Ny+:iK;ITR€y}mfmVS)Q E,%+MwzU]&v) ف0r:lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0023-space_organ.xiz000066400000000000000000000042171247673406200266570ustar00rootroot00000000000000\Ks8WhuG]'ؒW6{A$dc"TA @T)F$T yӷ墳&QLCv~>vÀ\> ;ݰA'90[S`n[|L|9SDdM]9Nǝbֹɢ ד`6;=Ct7npaxI.K -i@|1/vCu/#2F+!b%KxͰx Ds+sۦ$ p\? 7?uH}RW2gӇx&%  3C/L*vn78hU~bXgE8NYpI`?) ͊ $u$V Z^1(c.нNt7͆\tq$ȗJL,27epGx)C_Ȧ,u+^}|bCYkC\]/,}"•Ιhp{w3=\Uz:\ϥ^a^sS)do?v?#PaOZ)N̸͕_2ח2\{z {2dGfAd$S&+usr9߆7ib&lV!.)cr"c["pLTOqaqA @J0i"zR=6~?O q5^~n⩕AϪ6f EgGa?^yCs7{@GgUK/!{ՂeVFlk ;$qr 2RZe.U M@8^μsÉG1A%JTu} JTWcbT[(6 t(@1rCtaUsI89}UsD{!ztOU(' ;FZvcNL(o/97D2^8hp0_'𓚟d"R~rRْ-]zRWR,$$k94ڥI-M`|i)Ueh}c~.u7P0?$<%Uxwq1-fkRֵ(XC%=BH-9=V!" 0|{ 'y0iQ< ̗d[6HJ* - PTdq±Y+MZJxr9ݼ_⧚B*14\A0F&Sǩ,p1hVBAU$ 9wۍzC;2^^tWt+(~c @%k}i\ըrm8s AMb/qZ2ۤ'ȟ[͜9*J\oL6I 7:1(.Sl\t (u9DƕeoPN`z;.mMI=)[ eνcy5;{^|BF,b o5uRBLSpnϘ*JhZUvaMOLF!*R 7@t9͈qïUwm+m5iz lȤ3UZy']tKMmHf"'DzH*}"ODLG-(o\z }X:%DV~/{iyub%JPE~7Zdua(iG{`y?*o*}_{c;:oh&}MKfc^ dwbD1f?wk%yl"+l>efyxfGMJYvieXv[u;֭l6Ԏ뱆޽W};轢Cz+> LK/KLkӔHkӺFh ͖ZsDS^K'pMJJ7)Rk6Nq)YٗMqY;(dEt2P*ڮ]M#\=ɏR^bUtjw_}Mqԍi1^2W7vI.'nw|cαuΑy]mJ3/p0&xDlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0024-space_organ2.xiz000066400000000000000000000040041247673406200267340ustar00rootroot00000000000000[s8_R.!S\E#l܂oe˖dɲMnj%vZ}Z6$]߻i[?[ij}^nO>r7~{z=Ǚij?NaV؝w?iw|Y[$ ݖ8ZP!m޸k=xنE7ޤzcO`dW䦽¯h:.(e E;*p#Fd5 QUL !LBd>'ƙn `J_=(:z8֋h6e;tNd87`Iʱc',~MUUWTDm$.Cl&m@wǧQE|G hKu'y~ ǖܴ?P|ϖɷrLb*pYő#ۇ?C?ȶ(@{YD@H<E\ WQNTz|N(&& W.`|Wj 6Of ^c]mҷht{-ʅE ug9Jwy NRE |ϵQ=_y$ Kkpl;\詯"x.fmwfJTMi8D"pLD& Ȓc OGaP7Tc!;mEow3X=/*4U|H5V<2hI%9@P_/]x 9{@A QK*Ηs:gZ/(pjz#Ԃ{*1 ]RY Rq?~+Iu $@@5. ] O]:ӽ%:e:]u@s]evꅱ_ס`ЪuuI ]Ęse)qH`F1@ !6JהkG Tnk%7zE"-Q( pI&N~P&彻K\ޞ%U'Rty) Jfjq6Rѳ IhjRbG_✯myn.;P ݿy7#S!U&r\0; pZuJMZC) kbL}\-! 05B~hƏ>d'Ŋ /j9sd̻d~zHg{f*]'t$+PM+ie,{X^#,o(-?%b)ɡ+Vй!b(>W9ҬHT(u0#B-}p7aP9L 1JFu('52cnLQ:(=ip/,S8sy %/Wo ,cfy] F`JFg5j;NϪ;N?Ѡh|w\r;5;Yl~КNCgtG֍pl׍0،u#|6cX7u3֍0ߌUsjpIzGh :EZ4Ik6 F}a߿ 2S"-TzR =T)M^?ꞎ:4|o6Q{^B5jTgWHiֻbyj*5iY5 HNlPB GU?)ycQ UxUƫQ@- f"m ]_w:њ6}U=YFG#;nVvZ*ꭣ-9lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0026-bell_pad.xiz000066400000000000000000000036111247673406200261400ustar00rootroot00000000000000ZKs6W; ?8զ'ڒ+ə DB T.H!'o>|zZ-b]C=\tGo>r5s;g#'U/[]t]y2~F,y-kw58MV\vcw&^N.,:_Oh2_3 [wNgpekr]'>Ep)a78HsTu4A4!mH((]Qw1(!\OYض%Q75b{.^8Zg xs8'sdwc Q9F7F|@&>2jk'!TcyιQC'ұ@yP>7{juRW4^^XjEy/\+1ъ=gpyFEau9r׋"I]㹩;KKRmBK2]桃2Ø&"| 2E*o9$0ݬQ6 [p$$&ʤVBe^Wh8 3r<%(=*[#zXffo?KE(i1 52^686{%X irt=w˦4R  |X? ᩩl- pR/ ~u+q=>6zz䐳{]idxU 6BhOȤTӁ 0!z(Oi K{p̦I7Cs6_۳f) IS6}RFFKRŜgao ()$.5eQr,wbd<]C#EZFvrik?7~n[z97>0bx~^;?`RK0U;x,8t8s@CQ.הE9˅ɈC#fY1?Ya69MH#/JY(-*͍UMO,UZU/FV,Ϭl+XȢפVinmW҇e=h{2- Jl(5·9ɾjjƔطGv}Q"2hVg~c'+lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0027-inna_bell_like.xiz000066400000000000000000000037501247673406200273320ustar00rootroot00000000000000ZMs6W::ijMmɕL "! *$X]  %:v2ovy)bN^! =;λ?]/kdv׮9wG ~G>,}rCFdE8N"xE1spw`zg򶛋Te\;N"&q{s9q~7;xE\'aę'ND33dv\'2Y: >a;1wB감lȝen,&O_/QniԋR/TzRBL.f sA6N;{i8'^9uvT WlP2Q䊔Sz'UƄyJ t[stUA Ԉs> WD }RX3(*%_@5k돛E s6Gwv.ǩ2csf1J[rc<29s dEf^0LR]t`ap3G@⏰Z4eb G2qsLY)dL>D K<XbO%}& L}ط+a8>0ހƫ FL]>ˇ7e.}ci8Z.M2aCx8X'V H I jG|ܸ醌C> (l@k偖#]O> FR'p8t}918 HN7wz ['ga$Q60j^ ->Akil4fHS?yzw/gl\b;]r'͆t+3 Lg;ӭt+\3 L v^47_xn8b<^1 {W $S\PQ 44U.51ObHz &HՒ鰸r&,z4Vjumz ];^% F7$m: 'ޛhܛݙ;ꄦEQL\.%`(`$Jъ$(Sdَi&I,Sָ-JI Vu?c%+wLW DP#<#~Vͣ\G#T^g)SXp4 |.| ]7V߶O94+ZH nh2(P TQ"]UG*hU PT,TEl Z G죑j$BV%+vq>[*eRE)BS{ppƓQj@ U  moP,XI@,Č&ZC+d+J iOtbO#w:&qEȬSvn/\y鸔d?cTz P@) 2Fӻ%N">HYdCQF+8MtYU%Tr+~֭YPhzPDAE^nK 6Զ^]gxMP+(85<ʕqU"w@IiycZJ5EHHɂ&Ywe(]A+ī/?g)ӭ&cYV1mZKUqܔ¶ze`!{AgQtaTN1>blٌΔEyCqJbd}b;.93*jf VK`N]c]A5SĝhTHuVu%@; HсdajJRHZսh, .{̞L_1eR(ucB,=%DFr3㚆p+q5  ͢+(Kg (Ve5B\dkAVYWyUOa4:B 7ikـnĚˤP+p {owT+(!!QHmT0 \B:Pjn|[z~{ah~}ftAcZKO&~b]c |Ĺ8!uGo/nnΌ1!{Ő]x; :/4I@PRj'!nBm©h-YPK @ke@OOOk|1[B(ekGZ}\ :8F1bmcj; k8Sca qX1+K X,!nqL}FT}ݩaK:vv f(_S= M8W bRe2k4!`KC~QQTw8]/d}W?e=OiHSmŨm[#..Eb'6txxozݯ 1!#fsĔtݻkU"/glnW Iͣo|qRfT[̫\^7*z:rzLl+m+ `/ΎbP `B;~0߬pjM1R mlvx;4|ώpu^Q -1])"wh\*Swo{oH(lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0030-power_pulsions_lead.xiz000066400000000000000000000037711247673406200304550ustar00rootroot00000000000000[ms8_=%&/Mfv1@Hz_4A-Ȝ_h_+,[% OIݕzZybX(!jzo 08=h~/7n5(yû f)PƟ6߈!"bfɌqObx }g-Ψ:}wG 䪹hAQl[zxx폅g0 <=,Ͷ.cMBz=Y/I]ߓd{|vRo" U@0} 1tۨ77hp<*Y! O$(~Fn*YYb#?W.;PEk+# &,@I WbUUssFߌSM@D+Q7~ U8+/亗1^!qnՊC&kݢ˔3GS2vv&Pef c/mˌUE3-BF}a F=EaT'# &!8n&l!塚oh.q)+o>QA3 #("sc<SF ap7`@o7SP}>+oNh~DjehnÙc9-A}y =q8NS9TcySr#<|yR#¸mD8%IXp9oR-sd/YH/%eŶBwDZJwEd#aw4wזZ\闪iл/}6e4MLYq "3E2o&0T6 +:p$$&JRB!eӞW` 3^Ét<'(}*#3bz$sQ9l(dıY+H(eD F׽;-~RHMCS+Vbu-eαf@FvVLx8kӃzC.k2fKKf gXkP7s \y˖I)ׂ !Ⱥ(cU>oq#|Җٖݐ  tضY-oAE3:TхєFT1;Z8˄Jr=I:KMYDWnX [gx?͙&z F6o-Հ[EhQGj弹CX=++5|Fbh˛;V&U)Џ7S !貾nBa]nJJO+ڤPWZe后fhEzHGgQ͕RC: (dtts?OG\}u+\0/?hCߕ[3U>᪕CϾO߽DMtk1潯+rs>/4] gf] Lg=ӵ[t-\3] L_ z/_4\~1bT x R[xgRꝈYˡdhMXrXJZZ~ªSmU/SHoۅ+m;,+lX5du* Q6mE:\e]7l8p/6ŝs@x-N2 ` 𺡮mx5.ANyV>!+]젻 M:`R> .\+ ΰ*;>L繌e῝}8lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0031-wah_sine.xiz000066400000000000000000000040141247673406200261650ustar00rootroot00000000000000[s8_#)s ql%lj?,c%VO!jWڏvջ_ƚIMf^E~v}k~oW׻AM#M]N-n'A=9iEt䲛 sw>g#7Ku;w5o2xr۟ ǣF?; &Sdƍ]Ћ}%{&l6|;P[ ,iL0IՂiɰdA>>ROqb8e =}D~ g[PUt6ffn3=6?oowދBh=,i]MZ}3# ىa2 E|>3JF;*o2 n'2[m O".c:x)Nhkq:s'wCsǼ3!y'wAY-ۻ T)) ^Gs^ COb~tyA!,L_Lv02 <Ɣ!ELk d2d8 " [4lZ(OR7U)σ2dR$'QR'D~6fqbW%{ N ZFCKO\z2~0 @Mϼ{ǂPD>MWa9EnPQޫ( " OAC4eds1S؊6 窺d2v"C[{r=a) jngxnJٕ J g*I`ی7IcDГ/X-J9a#%C[ܞ],A3>67/ B?[(z)x]/BVhԠle/)a#=dd3 yvfIZa?=֧XcݳkJ9| >ŀt,Fc1$bRCl׃YVI{(JdPlDʕtsyadY"Uyg(|V4N+q]^ܛq)< S lGKahF ΫXepZc9IKHQ:'+cdo;4eR@@vQv4N3ٗ_2MHg=vR&& JYpRRT@镥jHuU;UI/6֪LQT UѤabyh vͺVSvWk-f$pߢ> ޢcUn%ps\"DeJ[T/CSktךT {|]P9z]bQvikT=@OLoq(Hoa*H(H;t=@ڞ1>HÞ8h*m-0ZAtǚT ckbK2i[>Hכ0zU1jGuzKyӶa8v_mkgIJ?ytۚQfgl!f<'Cnb (ݪ(}fb3ik3'*LwE֐ Ei{GLY[,eV?+ď;m(L[S1KX[,K[?QUW>a( c1'rh0wbiF[Qh{kuvAa)dGKwII'N$vDj;VpzvI5\]E=㩩d{sHvG{7pu*2ï h XRGC[U{@ߕ258b*Kn7>lԔe)-ͭ[,k]!.x"oYHE-(*wJjA )S~_}@T>|\n]6?1@lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0032-.xiz000066400000000000000000000035431247673406200244560ustar00rootroot00000000000000ZQs6 ~r4k[bg[£%:fkQD~@I4mw}C |H|V IRMCX=\tgGgݏ^j|9rwܲANG!U qG'~WP&VG Pw3#38P:w8[uaz<̆Q:n0325N: GGѐ"X)hW,{IrD9R& ,IY,Hq-rEE02DDW ٦?I87`@ZPر'叫tӺq$l|&;=Z跡S EqhJ"Gt,0e̿F "0<_Ts+,,8 "%ʸ&CC"eVQFU"kqHA\]lqe6 gWWm%:3+)NېUPEpt`q=es:N5NmJa uh@~b8iN^s/Mvd!~f]]XCںW"7ԥj(ӨC4$S#[˸un"LFЖ@)l+O*9V9%'FXҜ,~HY(9C]nzY%ğGѥWe|/ {A=MaVҿUf_,MQ[ -r+}H 's\YB 6lIYut:"{i@UtdW@mHr*W۹%%]cAHMIȩ5NfAvBZZx<oGaO'5V -` A& I l 28FY9 'f4UrEO{I_IxCPƄ6Nf{.r6{\\ACYJB Ĵ+̖h[n 4 ݈mϞ%:N"tInLbIXS@IeR!gMQl{#74܎GK=9E/ƨ魣p'^!*ˍ1zER;>`,mNKU^W1I#cݢP]J1K˼`akt6 Ba3KmMkXmZcޮLb+ݨًy"ލպ񏱟鏱{ {Wgxډnv[aVl'vۉnv[a6Nˉ Nm{^0" Ib>T|-LԔ֢\D h֬LR,gؘr\oaoO,|2j9*' : (9ᘓHT3Wd!_[a\5LFh2]->*sH.Q/jbzĔw8rw]_ Y*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0034-alert_!.xiz000066400000000000000000000034061247673406200257060ustar00rootroot00000000000000Zms8_=&i^fv8LK s/a PmΖi诿5~ &LZv}͇OOުaam}n1 \/ۏۓo>q3O>ح~u' ʏru'n[>~&$d֔X,!9n8[4^av4Ma7CoܻxO4lcm>#5tc뼽[ ~pYH0/,,"l>gǙi PBG H$O]7bI6w8GyabKQ:%1!NW,;ǖʄ#uaReV^I\!!YEkp9}7z1!c<Q=PRjK)xzEl 1'56lEkp$P2 rt)H}<Њ۱=I\&b_ҺBI4)I"u΀D~pWL6'ao7*>(5_Fݼa;ȷ#D )Py1sV#7|R!do)$ 2kHPcj y$H9\6O'Wlfo?JE(  |mfᬙFl>nfẙFoI:5S}zC5+&ibJZ/ Okݟ&5%z('n60 c~S1VQ.4ܡr_J]oF?K(lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0035-alarm2.xiz000066400000000000000000000034171247673406200255600ustar00rootroot00000000000000Zr8 }W~O]9i.3M;Dz6 蘭.^]x~ABRdIfڧ!OY(apٵ޽vX./Oo>_;۝6u#&U|=.|&(bkՔ4Y ; ]stiuaf<̆Qc0`2gd OV4g]>$kc봻] cbADςdDzx" ({,JHF<ƛ Yu&ϛ+aW Gr?pn@A'^*E‘&!lVt2P'¼09Fe"^~袥 Aa'p!\f{pfu{}/`V:[J RP⧉C!:SEU%I8A'=Lf_P* "Ӭv8{uA /rshJS^kO67Y e3+bJe#ua2eVWꔴ! X(LWrsWv|oc/"y ̂5Y\jDh!qByP !BY\1XbO%<0HpNq%w]oO7zސ13"F +AqѷIBjF [Dd x9۩nv[ẝVoM:S}zaxw + ibFZ $Ħ}sc_DMʑ[&M/1]ܩvVnQ[/d%v~+?S(lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0036-glitch.xiz000066400000000000000000000037601247673406200256560ustar00rootroot00000000000000[ms8_{JLgv1@Hz_4-Ȝ_h_k[$lct>%W+iճk݇Ou9.j=Nn/Z>zwφwgMo>thH]QpIzUӒO\?9iSl특[rXv@ 퐮]hhptߝ􇃃6{w#Q7dEN쪵d:.Ga[gd. e@V'.B?Z2 6 "l6c2lji P /JI:Nᜬ=frBy?OFDX~‚[?Ӈŷ2`IH˭ }Ҏ,&[N4$bO^:'׹j*haNɗ+6SA2 :|c1 Uy =55tݛ22BLU30F4@b,x)@ r3Wkl7P-='8ƟySUVvW+ m /UVsHz.Sq&>厷,ȓE+usb9<3ǁ43k8T3'"C2AZ|". !>[0H ) &+yS82i#ݨoOsZtN+xS~7DȨmt|xb>Y+AsyٱqVp\bSB SLF.ҷ"o$rRF-hJ$ C|܎z=_8ˆK_X(l#Int)$ﮣur;;1TS"u(@1sV:uuSat|M8X>t(ں]"nwP" 895vmӐ=y~E2ղUO*Alw*9Rt DKJKcIqp6$/MBUI(~d^p$SJAwpmTUhN1^r F ?I>!Rw&>3IQkw05NIP͔NC e"if*؋r\ 2ϞC+KCL@fKV#+-[4>.1 R'gt$`"vE>ՔQS q#\hőBo-ZPM;BFوx"haUi8b1JEԭ^Z.YtH0Z{@L)huA.\2)U,(u1n -r7 uBcfEjHǧh='9sUEPܝOjх9CW (ɤLeIrbu1 m u%=9-B?֭2s;XTy|R/О}([ t%;|^q\|LLӦe0;qmĆpa9_UT 3|]'+GlrwcU AG\P0mC9Oj$Հ;j\vjƉ68dqAp:gAn{h!|cśv6lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank/0037-the_rain.xiz000066400000000000000000000041731247673406200261750ustar00rootroot00000000000000[_s8xO?3M;\SHt.n2 oe˖dL{SZIo>|z^z5 #7vvUa?ho7}:$\L#:T`$)Bt""ts&VՉaLQцt~ΡFi:WCf.3db*pYT⑭C?Gɦ(Jy";r1pX *eMY  xTwM]|%7}0L;WkK7Ub^ P\)u+˙Q[ח2+]9W-p |F!`(BOa_{n9b&LMG~N->!D6yA! ~p<'pOpo臩5oOciQ9]6^a7[OS<62-G\!= [#!9;7CV YK{02ɞr46p~Hl#15kt+P$d%) @ >ޗ,&q}a֥vAJT5pe+}uߡE'&ߡ-;Ħk/ծêvC?%èf8=HIUx;%.?mFJtmcJ™*^^s^ʭseZF2D?IivkDCl$I'(򫻼 WxH %I\uu$.=L>mܛ!U)y%:\%vž@ (LQ[UퟱM2e\|BLHu_DJ]ȣbj 9= Bfi{\̯ۓn7~^O>8yxz׉G# ϊKWNSp5-Or!"Х @e6nޤ?4ZアCz޽3qFcXYӠ!]5W􉬸 ,E!hC1,ϛ;V;*$k.(WLD{mLf8mBYy\[-.S[Tx2zwiYLH6C+}V$J=XW!CB?ڮYnd5;2DIŖk{(xѤ~)'}{W$ R%r5y!kif(HYő&#C C.w-AsQ D2x,Ru;ASnn`e.!``\fzwMin%Zx)@{M)Qzmwy%pt wAqḶESkcradaRaZ^V%, <~823 1{(33!k'9: 0\DH&ze ؒP@<Zr ap8zS؍v?=CGszb"o<-Y< hYvX,`4@p?*ߞw./;ID.K`н|9 UiLW%b+K֨PT%9,i`G;abń%auZ<9NOD>4rm*1eQ, #jtOvi~P#2nK+ _p̵H"DuW\s@lO*rR-{r az᠗dC஋zr\$/[4T&.5l6rAopmT]h^|<_k~^=uPOcCӄ_UOu) Pw!3F#> h'@D3mPJϡBE´Wzu0<{\N'j/Nn$qmQO%8MAJYJ=ݮi;J{1qMQS <]7Ȓ9hŕil-^RC:2d#K霶C΢hioRVkRVin `dRJc!eYR00b=RM܄z`G"uuH'hE8k/Wɷ;F|L8iL[y(3w߃m#\ȑ;5A\6$K<z1]s*Zw4Yaz8MA7ݺw4 [.E{IȒPj"a礽U5-#b!"dDC-DDlv4T߽`)=͊ɘtd|VF~j2PG AAPK!|9Lۤ?qo[ܿh*YaNϗ~FTLbF \lSvF =-# b'q!WbUTwuE/(t!}ԻO*t, rsb+*/8AyfzU"91ϫ\[ ^Yn, [x}UI\42#!~,C$+}sj9WfxbByP5Y\jDh)%QLȅB 蠙|Q<Zp a8z/HJz>N}y v|ώY;@7[Δ WݣSb.&.F-1d5ㄑĠt tZ8"pMZn%!}5Jȃ _ZRokFq=rwߪʼn(#Gy #FJw(SGkX髳Ol쁖jcb{F3vaSO0Ògg`yX\ Cǎsy y@vQu#7pr A0>]P\eIrtѫEܷAM7%LvT=);EfgdG=;+5<# KSdReWߴve} Fe,*Rݒ2'7 τ鲾m~$M]Pym - S+Cջ{!&J~>><'O] Xx%ABr ī5[.6Vb h^T..rclJOy IEs,}]PK<~/'|{1;XfADNd8(:V\43?pG`4TSЂ  ZdO%Sē[3בs.Wvcw GV-k6i&. 2 DS=!NT| ADVs=L苙Ol]L4] BF Q|EsOwYIz;^T+\11r%T҂,þOU'Y}]zY$rڨ7KRCK<7sk,xPEZ^J) WPy99;2^(niOEY 6m@ŘJRd kQڻ8YϳUt+@-wmlHR)0Wڹ%%_@d$͊YP`݋oƃ7oyG'5V` [vC,*QOSk24 rZ!m==;E>wQ2NoJVה:wf$Scăj)huO.#dJ)v^ r pii:/΋dP'(3{b+;S LM)Lf< iQ"(TA.Ų$8mly'7= K1zFo-9{rneG6o\%坃=h;w[aN- st~{ԘY +qK|1g<"FΫJmZ絶U.`RUt g9Ptcyw?9S9C[{;sE喗:kaZ8g뙮zkaZgԡS=Wg?8G "#WsN—*OT]fԔhQMR!c`4kh<#E!,)@MR _[xՒMPzreˠd9gj,QY:%e!^ZalU]/OEh1CP Er@(|d,3&ǾKl!g\Ñcv8GFk.ːĢwZū WyUǬ -rǦ0vb|\ ,lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0003-fingered_bass.xiz000066400000000000000000000036761247673406200274200ustar00rootroot00000000000000\Ys6~ϯP(8զڒ+ə/,$"P.x @Jt6X{a7?>yΚ!ez!]/ӛor=~;mXu'GrvîhwdCdM sG N;ġ;#'kY. :ތw`4_;{j'вAa\v=MOUtZ|W hl.Rc~: ]wJ\ó%qin9$1xq$!#e+ٔQV:<+CH"_2̄ \e9 Upo2 pp3g+dԿL+u/኎u0c`xũdkm?']Y PaѢZ)]D3+E/eV93j`ZuP{!z x%/.=dߎm݂!f?b&lV>定+Q4 0”D"pLd% KCa\hI@RН\5]~_Oʺ#0c}|78ȠgԳhMB&X@p@ {zxqqh*nՄxBVn˹L\ؘd[-iCx%j9dkE:> i%) Ԡ$"7c{x*?qI3aօCfwU~gCQWvL:L:BXC23I}䰴J+"Q͢qqrbYmHID{!fp LU(HH1y`Dy-x)a[ұA{n*e 5A+.L׾&g6Z_gD[T&;\ o:i-vM7i  êl#uTos$i.z.^E$'&R#/4:ԌY].n4\×dO2 8ح0^αp̋2zyPފZJv!p^ HI*cY Ɲ5~οj~ 񙖵)1:mKp+3 ; ~0dK4'BYCCUeSL+K*Hɣ,3IdQ[*Tt/;TmmS[Dm\+I HqMjG[ˡm1b$Gab=vIkإ-F@?~E%=l]*cإ-Fb.I1RO=))͋C{$/|2bL_ﶊdu?9{;>g^ZaY!r{Wxu=.3Y7fidX7fu3֍l&Ԍ˱(_>ӰGzA^%=$<.jo.5 B{maM/CBj=ڬX]?q&q[a2}!&jh*P/R]8>5tޤ?o[ܽh *pa.zLTಌ#G&b#ئ*Vh!\Vc wuE_OTw{wӟ_:_S#^Q)N_wx!t{Μ1!+;" ,g9/aV*)I=i=zXWRqgfxgc @ykpM^NKt撀- Sp88, L=ʠJ}zx5^x>֞xdd1L,#Ik7g.&=pADVs/f>1tid=jPĐT^&^J, .]+Zq=_rE':GN4)P"SMJG; JˎNJe'؁D5=B T'FaU|a!7JԲkF*Qn { 7̓[ $ ~PL'|==_T+=sD˗N_KK|I9 wMd3Did j#{<Rġy<_{uA>=B&, *OMI[ beDGJӀF8(5S  I9V!`09f1"~pp4N-$vEK)R@|YiL|ѦSǗ́>RSbdQL,(V\:-ո#(!MA扒qR7G:Hً%NY%NY%wf$SăRbՠ<5G&69#M!!!X9MK;-RW(!Tdێ5sUyPL(5dƃPN5-UJy2 bZ*X]w0Lm ~nhdooe+-MY5ѹquN7w֖(|gX C2ԗxMkwnZ0FQi+MJR^/GjgDUY_U>-i Ҁ98?91*=b8ykCcGC}]ǬV]Tn6j3:[ٵҾb c)@W-r@A o  nߣkPH  >4:/6hnI7=Z)E5΄ugӚHZ16["MoMݛٕoh|ǍӪmʏ>zDl5Ztkү )zTU $\pӏӧL9P<ݷ|ӆ*ڧD`'eR>뱮eXײzk|=guܩc _<>ѰG/' z.i=OǷnھ}Р|7!2W:1Mo9g[O$%VeTC=e#f@lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0005-synth_bass_2.xiz000066400000000000000000000037341247673406200272200ustar00rootroot00000000000000[r6}Wzwd8Ֆ'ڒ+ə/,&X.H"}I[=% `zjڐ0zv[\_?ydvǁc Cn[%BmE9Nŭ㍏i'6,:ތw`4lu_{>{wi<5[e{|Cqv:Uȏ*Bk"FqwLLBd>'Ʊi PJ W=hG&yyі |rTd:~ܲ0- f~+fHVkRX|aM7 6`ӘVM 4 %ߺShFi{CBlIb[fWnUK:}H)Nec* 8ݳ2"B=r9j Ze;jP){hu8" $`\_zwuen%X1@{)Z\m2px]tPwq>Ƌjcgr/TY,v.}]I\*BL`EI0Hv/}_G<$̄n:YN d$O !m&2hAdIp$0PBKpX.L= v-?=ݓsz0nA!Fmʙb!9 ڽ:Y1Z/d/8_d"t2 x^qbpNߒ4;HɉeYbjA h J" GҀ|܌?W_r p?w. rF$5fUk=r׉:whى;CuHT K?9NةCa.uXF7:qr8{Hk2,Qu"nPTF9@:>#7Tk1-dF^[LCx#^xe$y%c=S2,Djd4 J-/yΗ߼`ӄth"oi,ÅEkȼE@jRƟ8EmWKj"*}(ސcj !{ak8Γ@OAf)YdRpQ2J 3f7G yÈt0$WI\, onWS ŗLHI`vm )FR_ri| XSz4Jr;'2C07r/i9 .lk&j\/S<~䅜+Mִm`:f xµx=r7G]J?{h=^1΂g &Yr1.h+l,l Rl'kx Q{I/[iʳ6lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0006-synth_bass_3.xiz000066400000000000000000000036671247673406200272270ustar00rootroot00000000000000[s8޿{JIö9nKlɵs A;C[#'kMmXt0o{h߿&}rnx#+8Eۧ\P4tpj~b̏ȊQ&>qʹh$shkۖ,A\ʀlu dxS;XUd:R > 5(r("s$Epeߝ exb:[29!&. dKi ]Mms/0NgKbn45Iм;QpW{xZqā҇,\u=]p!d\mzw7Ui%D\>\:rS([exjU1/ʕŞ& ,g;/eV*)L33-hsHHA >A7'Q oFw}1{(53&)ZDISDH-(D'̃a. ْH@<ZzA`p-o`Wpd+1=1ͥKB#[2'aoxi)Pg9_F~*٠&܋Iy*hOxIQo>3!,q*jJ`ʹC)diG2P厽r =$OLܯ%۲BR*`WZ8[aPGSfm'^tirpcyӇ q̡ ډ(id Zq\SKnWRKokvOE)hukA{T[FX8,Cݒiu GB*ob0{ϛyӳ W)wv|v-VʥkNXkRbĘ^~ŀbDv_1$Q̳ Ϝur*ZhP]DƝQ+F.@HG<0\ewViwDR%r^+,ɷH2Xeomr˺٫zYk,{'[YC>c34uKn=u][5ۄry?X; 8:?uސ3lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0007-synth_bass_4.xiz000066400000000000000000000035541247673406200272240ustar00rootroot00000000000000[s8_R8S\E#lbe$[i2v VOugKzUx!}>o.?yd8rov޹۞l0<+.9I<ɖ&kwsqVv w&[=]Xt4Ld3;snNg0~: 9ԦXuY7'F8Q7`~rI,i _'2(:zle+E~=UUl>}3D >h}/,>MU G!viۤ Jq4n(dz@ND|y:׋FyסUŚؙ;WΤZM.N$Q}#2 *ĵ$MFUx *;矔Y@Whp][o 1ML@{]/8SjK֞EjMZ+##[+;cTL,c,K/fV*9$|.Za\j!$Уys8By;7U^@[(Ԉ9M S7#R@%:fO2)КKyC EVv-?=QOӢq|nx& ]ƥD. |R I=w(Չ.w(rt!qZ:ԡϛ:,Z3:0.eE]JRQ, B5sյydJʝ:NI 'ͣԷ(y#c[((NzN5?{{zQ{rII^:Y^KIwmgꦻXIKjSs6CMRCKy2jA< ]BEd(LQ[J\NHI .|̘$_DJ)4RJY1u >}apI9OH-f%Gb*`Wڸ*J(8HIE ^A^DÓpt;w{tbh a@+<-k7.f _J|c<7yJK}U)$+xTd5huK1pR *C_ZEjB?A!l{6wRAY+Or%1EE7DQTҢ8+}? wh/\3H@ FcN{)G+ҼYgø̰1T1D H7R0ÝleRZAxlS]qIS"D*PփQ.XNtHWI;ĦjJ(ढ$M_VlJ[I ۖXIcmIPnK.-IrmKm_$MwV oKr%iWZԖm9ZzÙeg!EJ-Gl!mMˠEHW.sB-GK,Bi5_EWO~lM?L|?\ԽD`}LO#*>vȺNr F>L!Fیu#nƺ7c}$|9tlx4^0" Ibw+|& 77pίؕA[LCĴi"3d3z)#|RFT@ԏrz;lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0009-organ1.xiz000066400000000000000000000034711247673406200260130ustar00rootroot00000000000000Zs8_|4p3\9 h-@-9[[Il0Ifҙ>Hj},[k4dWmqEͯڏۣO>v3|}p[lX#s s塜QUۖ#lˣiw[c{58^SZ8Yav8MA7ݻw4Z 'P"1H ;gR;rhE"DỴ$ XobXlFiP)ݏtLj X)4 >(6 K 2a @a: =tި?q[Կj +q! O/ &U)j(q P|2l(9Bt^#*ޛy'Ty L0LeQPnczwMe%Y2syf 83bkMGzU¼6jet*̸'y*q.~em]Qu"EJ)(S=&v V%XO**YJ=ݬplҗ`rDdw}]h?42ܶ:-r7.Wd_NbSx:Su:f/NY'NY'&(^` 2aG[h$U݁ d=^ WyG/S׻j -2cςl uTo3nh%&}$_'R!g/Nx,gkX\ȫj޼\$Nh.v ){hO?yroa0B1|+K_m5B9jKdMm9N\p0xM1ktцE7{o죻ިwOFV8n1$%~DKRC<i"a綠j~QN ZQ8]wLK6 LBd6#Ƒk `Jb *ȥ ;=d#_ɼc?OF`"5 `RB,dRh11(fE  tҡ?BB5MkT@(ZHC0IǢl 7O /ڇJ\ 17BCUJ\)xrh>HJ6eeT#e/H 4 <UwuƟ?0Y@+cQ? u8+&K'P^a +do?'],#0a|^쌎SM[/[Y(|42b4@1fad$IC+}sR`ɿbBqL"*B57hA ǔD["PpNtEq@ByJ!@`p-oCJܖݮG{\6NxՎc#GN6g   r'W\ =`\Y\ ]9xZP:sLH J!Y-A8+ܻ4dzu.?W%!)S~[AD8N*QZ}7nw I tNIêP\Օ;ԦHZ*Щ9SW:eSif5O8>_c?hz}&suݩHhbF@v }BmiT!ke:VN$셃Ak]q~\%bR/^\j^ZmbK?KBI34l+=5e:Ց+p\:zrY]Ow^N{MzB}MMIkIUT(YAŮ#tn[2k:1)O%&HqR% ũ ͘0 ͟#GQPuؕ#̖;ɶlv62xR.2RQ2fPCBjx8v,Îl - !pj iqk,.pjX,+1$]Vڜ恏yBf/IY'IY'7&(ca}$a2EU<( B97eU&.-{ X [EH]\$F3'j 8/穤cԦEYY׵,}{r?z)nkC=?:9wr#UU3ac'V)7v*'.gN~ k@ {9W`a@LpeFqÏVd/ z=//9*'C ֽO%#+8}2hNHmP*YUg!&+`ǎwkmR۫=oM?yӧLy˞N3Wؾ/,xP(b䉬Y3`3֍Fیu#nƺ7cW{fϛDj3~HĘ^1W H#{Ő^ &M[16__яY ΈNxA/rx.w-+wIi!ʀ}'Z%_dlg,2فY$P+u{˃±ޱ|\/wcGyvJ :Ӱc^ݴxaEbj6ru[\!6,KێfY-lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0011-organ3.xiz000066400000000000000000000036361247673406200260110ustar00rootroot00000000000000Zs8_$Mfvęc.^4˜?hVX$K6N;ӧyZvҫwekM>mBuirwrջn7On 8}÷P$mYX$"k*nkq,8n )fG.۰hp7=&Ձ]܉; G-r3 O %1H) ;T MMHeqaɎi&IfS8-LI r!AF}?ްd!ܯ`1U'w0?oA0c}>i2W}€1(͊:/p+oECr7WT@0\ `D:oԟ-_OKbnv95iP2l(Btߖ &GI WUO;r[44a "\ezme%DZ1J8 3WP\ѵ&УzUʼ6OHvaJV0K<˔/cV)[HzFZ(P1GaR7'đ vkz,"R̈́*P8O)pX 3zȗ۰ۭUU&>IR&ҹ2 qT4\5+ݰW+.7sQr!-wM:TR9SS:eSjf9O8?w_cA(zW}&suݩHw{hcF@f =6Ԫk'dF5TFN+'yA3W#8kDRs$WIب򋧼+Lh۟%eY}wMsEudKf#w<7e:ݨ, N>_SFcwb,AP-WPKx(rLni N#$)7O%& HqQ% ,ũ W͈0͟sأ:1+G;ɶlv62xR.2RQ2fcɐCBhx8kvxB fHp$8Zs˥K܄ tת<7goybg/KSɫSI XCLd{X_h}//vLRm8 AMrrπI2uKsƟBs;,VWRAE :WjщьFbBaǫd1TjҢ, Spп5 D}-ǜ=9wreođd~yLJaߨܼy̯TB cOpi% }=ܖ?pY`pjUo7%gGūo S>j{| z We3!Rsu ,h٬ul\4flSGUj%`Nנ6=/!wO6+l>(tfy_Qb4@֍ԍ|Fٌu#mƺ_7c盱Ϋ뽢&ڌ5_*39b@:GH!@L£k9eso&3%iu&%Ug[%Y+՗xΓ1_P] ,J"żR;c3MiWuiز^ݴEr6bPu[\!6̀,cގ^X-lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0012-church_organ.xiz000066400000000000000000000037771247673406200272710ustar00rootroot00000000000000[s8_.q%ҹދF" ˖dST]IݟĻ^ƒ uyl>eͧew~ߌ>Wd|בc ߊC9vSPGNĔG!YR1wSxi{8pxI1k;O!fp 3:WUQSîsAxPn U@ji9xN\e!Y#y7FW$yT5Il]zx8&qj5d+OzRIdd յ2Uw'w(I0ΕE^Èw]}ǐE^tr{OFybKRmCnzܡzqf(\KNu0O3K2rpqv8̱n>V9n=t0eiXA 3Psj嵇cTFN+'yA-Fq(~V L%|B{Oyj=KMwyi()Ff&$k?mKU/$[N~ӻ*>4T/[aׄ+4Dya&0$Ԗ6@/8q,{k3(A6QRz Q[JL{Y:CH@_yNT5FAQ;Lb6#)+[2RRPNRj#U=Zh?kn>j rC#hšp钃OP~e3q>m=>h7߉QlWSVWZ ^M Pɶ\m0p2 *CZEjA?AF6̙-RAyFS:Ӊфd1-ELK2>t ( 9CqƭY߷s,&<{~>W0s$R[ ~l$j u*=77o+;6[:SMY8yꪧiw\q_[]b sPMXuZ]bc?.mNJ +W@Ќْ]y)\KpL4 hT$%fCM <42$M`njaM`i~hӷ&P^wGw~=_[U#&(=9#ʫIioG/ڒd0UUK_mP+3k~l q]fomL5o{ó\Ow]ꭺ]?뉮Dzk|=U4}U'R뉆u_3ƣaD:ob~R52ݹ7#~Qa G")vI݌o9GdB,ޣ8VV8ނpgf״4>ʗemʗ%* ߥx)o+\~b2m( m7îvަM[6/>Mr*yFLXozS|dU]ZUQx9lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0014-synth_bell.xiz000066400000000000000000000036561247673406200267700ustar00rootroot00000000000000Zs8_RH.!S\E#l ˖mL{SZIiw7>= #vv /xl?}|V}o:iLYq(Sw߃k.IZ(dn[i?J<{1p*Z4Yaf<φQޟ}ҿ)it.+DVvC wOۻUD,$\DqkE&X0Xĵ(ea G%jH%O}?ڊl1}^M5Mg/wLYʂҎ폩9"r %S?=fdIh5- XH_61;ӤVRWr"HװulpeZA td~ͭT0aU:}X`ۢ1 `5""&|ZM;H)dm4T20Fuin%[>B@{M(6lx<8T-NHqL<ďNbn,W{Z_tg@6/=p ?X <ڎ6`up;`/BqĆ.C5s"2(\Bh;!0pML,c> ْHc O!\0pXn>5#]OO Qn+x]|j=wDĩtqXhF4ߞ..z"2n 1Y?^8_."t 2t^8qroCZ$Db>[#I/1$- ]R[V"r3e0V,NI h1RDPMFGAwN_;Љ\܁}=àS@x_MjRpYghCMUFН~B%S`< 1J״Rk!+Ԣx 9Aف ̃Q蒪IR~Ѓd&UV~q{\߽p}bJg#=xY~nfaFlvnfa&L멆@7+c}Ő%|R. f2Ds YMXC=!h1EFZ*T *CVL㮒#R(y4~y28g0Y(}fmlz5K^欰g/kX;.A 05H\SIpE7\w{+j@y8\+ p=U5'|2s)Ϋ£vUӲ UUo;Dh7kr;Ϋbڻg=͎,lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0015-rhodes1.xiz000066400000000000000000000041631247673406200261650ustar00rootroot00000000000000\_s8xOL)s tn oeKdc;d&7S{v]gg?=m?mkz>]'ϟ}fr=0ls5X8.(awۥOwllm6w[bpEi80qkbxkcu&o'|4:= |8 [.vUȱ-0u~L'@# B?rrILan `J_䐳5(==`+l2UTl>}L `rlr6N2K)9TD6$2C_TBLj s6Ob|Ȥ>xR%whIՉ.}8ؖ%3qwMMgʺX,J9p6ךT%8dt=ȵ(^8 ynz %&B!ކDJ5A>vM}y"/0m= ,d{6 f.RHiA1J$'\ԋjg!$<]7Mt Z@*PW%2DFKL յhp#DYV R7G q8H8ظK˔E)Vo VX*Jha8'gDTƩ6AMNPZ:{lu1iO@+lL6ORdA+{?F&FK- m@I2;E*-MN]foMe0GKP6X=Ët@; GZig$~`eDX=;5|Nr5u!s ⦥;/)f=w(i-7NK~UJ>+%p*vBHAu\9)MtS4Gx} h}Q_V^f˸M8ʿ5hBil G< G Gp G$ GYL&4Q㴫o4"Vhj"Ҹ{M)rh qAPy)ViHC|tTc{:rچB !5)Ǧi(u`tTEz%rC-_6e_6Cᝒ/EG^HESpW̷$5YW`5Tg5֕[u%\Wc] X_T1j/_5t_V+ڣiEhl:f8 9PǘHj#}Фc6 ?ד,YPٸL'HqH\ΗDbv\5X;.qpqg6N.*5ievŽN졄ZK("8Ţ{0«rxe3gb ^HOo.h-+U!7%ݗIKvXoݺR֕jTQsuګ+Uh^]JWWRוjTuگ+~]+I[{:];᪞4Dҿ_Elmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0016-pseudo_steeldrums.xiz000066400000000000000000000037761247673406200304000ustar00rootroot00000000000000\s6 _=u5ys-3{)ON~DHRtɦ$yrZ?p=zѶ[ڞ҇z\ /'_z?78hzǞC Rq{K/mĥQr'kV(3l!^phàpt۝V;{ۛFcx~%h/ZQl"I;fU !rC ЊȥAGKB-l&&Df3bKcAY9Fhǎlh8GkϵX/U'`5 ?`݀Aambd  p"v&fx2o}6; (|O^2*'ۖ\rRqin^r5,PCŸKw+#P:8# A'! U{u_Ϛ"|{{wӟ_:[eb+L)/8jMIW GC8/VvBNeB[+)I5ͱk#S[R8>Kfx< 1P3k\檩5E3 BҌH|L .Љ A>Y dɹ¥KqCw.rDv%=H~}r7NKxXyMndd,'8 `ߟXřׄ% h5m|1) Ih #c[f 5)Ct i{44%>bK2@k遒z\z_2`?5=(5$UkByt)إ3y|9"Xt!q}@z}Ff6ɃS%kKTI:<4RբgQc{ANORtr5<.[v,6Q_^%5,Fp\*|_2ϗaW\/:u"K?*KMQ[t *7@a(jk=(A6z .RZbo2͙ 05OSvE񴧧@3[n%lH*WX(9h}rPO7+Ղ4p|ٿQYٿ[J)bh}J,nc(dZTi-p邃  ~E#1>0NZ|ZFRe-gRW,#^̱ U>hyQΉLP-8u S4Y;ߠrHB ;l[V#);3pEhaBP򉠣TEim@u006\㯲śh>sI%Vj_|G3 r&--!|&Q&'J>j8[4?ᶍ&\j["Ω\u?HmwǴJ:^uQtCtɛ.y%7m4]Ktgb)JMǷ~ HHC*I+$}؏Oީx 'VI\aOr[SUv)JLѵ0XO!YOt-] D|=guܩ  4|&GzA^%$\zv{vF{(&DʁBv'ΫD~דzʉ[ޘ6189_LPen9R+F4ңF4B#_3 M>:3CtLV%pۭ323,a^3zhYDѧAlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0017-musicbox.xiz000066400000000000000000000037751247673406200264630ustar00rootroot00000000000000\s8_|4p 2@Hz/ad4-ɒ&7ȫ_y7?> B곋"=.냳ov5~޲M_0<V\m9B9jKdCm9ŭ Ŭue Gt0:Iƽ?-W䢽hE=`( a7xðsM шB&,xEXgZ a"9q5lKSD p\gǞnY@DW0 'm8pn!A.d04QUs_q z]L`\'fҝ?|wrW@f[@}:5th0߶w>B-msʙ)eG tQm^9UiB< pUV OٻB/'T dԻL t/Dzט10 Y.c.(hQ,.N̝e"W20+)I=-puQ CZ=؎p3<3a)wT9M,#26#D5CYJȌ'BK88, WL=ɠmX}zbD/1ƫ='s :V=] NioO]'olr6QIZ/T%fϥ)W%bk[!7)٣G,YyJ, 5.E-/$b&97|q4 9y bw).U鳇#9c!]!r(@~b8.X D`q|8gMؕU+yYw BꗢB%kjɵ#%TF:|%.ol1s( 'L:I==_T+=sdDKN/A/%EBU](Y˙.ȒlAmܟᥥTɗY<\尃|3@2K3_*KMQ[fݕ>E6|Xk(PHy%ɴ'֪5kD>O#.Ӂ|lfoAPEK)c )4h6Z6hɥƿ@:vW+Hu:4t6t M}n" @5bLoRYҠ▎kv|h}l/f'5_jR+-EҨWg&~T)~sO~nSw*޽gU?y#RLU*:ȺJDֵl@jg=ֵlZv]u-;c}rl'輠C:/ > 7sWurʛ+Ai]dZ`=>ac^ce):Ԧ4yT¼ż\#Y:/57z'fu^RK1\4PY;;RmKe^ٴ4ؖ+;^>,jx2,MofجH j 7}Ww +UlCf;SE4#22M@lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0019-sine_pad.xiz000066400000000000000000000037611247673406200264110ustar00rootroot00000000000000Zms8_=%&3M;\LK s/a P 2oeKd 3ԬVGzbX0n:o ¼lz|]6?w:?Lw8[Shuݔ_(_NoĔG!YQ1wSSxe{8pxE1kGD$$̄2qU>5:P26A 8n}n UAi~4B Oym'H>0F˙&Il]L4^,4NI\oEo$b>-I/`1+ ^R[+nn>&>&~ F$ F7;,J\'Wza)a,Ֆ'nJCo?"Kz//ghZ~xFؠ&*uxe zI Ke !b;t[WeKNsf΂9Khǖw+U}Rl ?}vfOƻKl^x YZ8Z>멮zkẞZ:wJ%T_ՉzhϘq^1W H#yŐtMݹ7#ޏ%ם i(ʑYפj̷\,huQ,Iv154 ŸBjcW2YgB3Ůu\,]{uaYM'u9a(mLfiP$>jGkW%L1902 !ܸ|?(>O+e+Ý76T"Uչ`~2mR6e:6̀0|3300lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0020-sine_pad2.xiz000066400000000000000000000035341247673406200264610ustar00rootroot00000000000000Zr6}Wzw*ɨ2=Ԗ\I4}@$d!Aw!@KSbpw=]͇O!qBCvu޾vB\Mwn-,[\qóRa(q(&*jq'Lo(f;h|=ɸӃ\t7nݹ;JԧN,;ݝ.$HPDbDYY@XG-&rIhjR?߁08KZ!bCyU\5-oۺtS6y] h}թ2|*+bSԏ~<穟=Ew׭lqh~FVFٱcd+,3 gL`;ӭt+3 L|;mҩ3 ]OMWGyŌt^1%I-IG$ʂ{}z5l)t2&0J̲(7cKNjWSc{(eЫTڶnȪWͲߩtg+dU *ُ~ Y mt>,"0<5eZtLφ"!~+qTJ͘]z_~;A?tJU 8q)lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0021-power_dnb.xiz000066400000000000000000000040061247673406200265700ustar00rootroot00000000000000[ms8_=&!/3M;\BK s/ad/4ܯ5-ɒeLI7çj->zv%޼\4$ϮwaQ||ܝ\6?~xc׆u=oOF?ze#Q/+-\!AI {DQOJwL;4vbTMC,z!YzѱǞ: 㰩CatxKt9dwcQu$E)KE7JkG,Ԟ]\cbG^hE D5~2?Lʭ|w8T+->Q%祡$9}lwēL%~LI#Vdr,hC)ۨ7CREs &4ރx3B&o\*(\dzrQX.GT_D8S(4ro`fv-a+9NKХ:i ̖b[5UI*JWxF놔Y*=ݬpW L"?WSS IClWĒFeTe/]CFوCYgFmqPuqZFe-Bjmmp6nYLNRVPTe e[p;Mr4@bEi;т'`>[7s"(pNg.nTa4A(}-UD%8t4( 9ⴵ`u;ߺdowe5ls4RC-tYtM-Az+ea%f){ |QfBX{7ҜΩLʹJ,Bu[ZZb֖.bK6lY؆e%aJlIGlWeM#an ? ^ 3߃0(N+ ɄHiΑJL>2$J~ITvan쥅dPWp-ou |~֎ wr-Z.3֪ޥsֵ0XoֵYOu-S] T|=՗u©S '|b@:+sK҃]ft\:RGΩ9ԛ 6#8NUV6B]׾Mˠdg~Q4.i}L2uyLFU%g2rhM|{WO3Όe[m[xd vg{ <42m# uYzl蔟-_ *M6lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0022-fantasy_choir.xiz000066400000000000000000000023241247673406200274440ustar00rootroot00000000000000Ys8~_=̄vhb̅܋F"˜-hOY-aO<ӧiwv\}y֭JRj!!&=k.֗wGaf9p>1T8L u .˿,&v߃3gaTš$2(GE`{{֧,JV5 H5L%+і*6r?D2UM9RDB@c%sy8[*v @拯`4FRd&cb!$ @)?$$Tҷl43/V0ók5/f;X6(q/t+'"kgBV# $vmZ{r-UEoyJ_wq2Z%RlbQG~#P3t˲!A&/{$@!`G08HkL#vE1 ynH Lݾ҂,!{8?/hef4`#:`O5_,=\ !$j!["unb$OX*rS%$/Rd7Z25k۵Ad[ :;9j`HjI>n6Ću8t>ӱj3~È';4gmUs3}Ӝnso3eN4XN4Xdd ޽ͦ y}\xyn-hFF$6llCށ-Fb>rĮiߤ zSɠ_r2u٤AJ-gqUaP6nDݛͿJئ,⋅ MbP?^^70)7C{t}\W%oʊ,m*ɪbbfp*ՊfeҮ*pUj]Tٗ0Ѯj.vکj.uQuEխ[U]fmsm+n*GRe59AsXlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0023-heavy_metal_guitar.xiz000066400000000000000000000040131247673406200304620ustar00rootroot00000000000000[ms8_=&3M;\LK s/a PmΖi_k"ɒ{ɧ$ZzyӳnmIn[oߵ[w?ݎof_;x~ۙ{K3 vͯP?oy-͞ݖ㘭; o)[8^x0 ǣVy0`2xgd W68l#m?#%j:E{* ~ QFmH0EY,#<{%! l |O']7luofB5Mg{4ːo@`cy5ZƔC'+˧k^i$Ip?݆x#/u2Ly:ی  }l gCw JVk%H'F4 0x1lI}`(+XeNDw .g٣UUKXs_ZWJ9#J U2D~PWHwJ_Ռɹ[,x/l(q@'?N܏#ql:mfZOʹme>=8Nb4?VTR[FBϧUtI\}mĴξ<N2="RoGuCaGsvQ!|c}TU19UCϠw1Ḩ){E'AC5- *Ei $2+GffE̊1Xķ)ݦv 5cST{MQQikj)oj)گ9[W )nj.ڊMg5%U|Y'_CMzzQ{p:Yk5lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0024-synth_flute.xiz000066400000000000000000000036421247673406200271650ustar00rootroot00000000000000Zms8_=%&3M;\B%ҹEp 6 ˖NH7Omݕj1>|z^+~\6 ]_ﻍAF&ޕ[]6M;AVXi2}1piи 7]g-ΨK;]wɒF.esA|vC)ו c<8Eyb5ve3cc2vv&N c+me*wyERE3-wID/\,cKpb;ྋ<3t3 VdʟD4Il|IL3kaBm4*"kD;ϞƮ/tUlcf1[  R.L~KLiQ.`ɪ\eIsEqڨ=7(vł;ûAwſʎ`ыo05]-rE]έ̱N>'+G ߑ/$k}%ëZ9i! 'Y*ŧ,jX$59D_RԼ-#NVQKm3PυoKtVLɜ!Ln+Y}Zf%GN Voԏ_~:שDthkj1ÇgZXgꙮzk᳞Zحg뙮zS=og?xi:a>:of)!'D)77ݫ1_CI/fBSc<`ۢ MjLhPչH-+Zyبʹމ!iJSI/i_&>[&'Z4ɶ_Up{* h᳉6 fɿ(jO[0}6旘 >i9k6淏AQqqmlcSG~ܾ6/+]J-lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0026-kick.xiz000066400000000000000000000034541247673406200255450ustar00rootroot00000000000000Zn8}Wx=@›(b/-1[Jк)J 4g g`Y8!:?t;yOeazsp߮GWon5$uc]Q {ؕO(O-b]M9NBqxE1tمMÛ?{ND80nP@}OLs,P('A"#a|˲d"Ds){۶$pCFܥr8ʱkU_jJQm YBe{jݵ9y bUyxi΅Eɼ{yT#jchpI۩nv[ẝVoM:S}z^+#tL 0JoLnچC2h˱5 `8jl)qED=٭I./͉wLmFW BWP CBr4|Tmm;׮R~լW>q0w)5L5+&lqp(Nvu0j:bB]sk$Vy5~J.B^4ެ3Zr̄Q-7!W$G ,}!voYrZfDՏBULʻgO#{(v | pLЇSH j)B"L?td1/jCZ?Y"[ M/7)BBBIDMv.0r ;%N> GOpQPGeO UŨ5Nyi۞^{L_g=3_xnx}^)ӆ5cXFiXF%i 5Ykfk փނ9fS'\:"17E(3#N#V^U 3TWrJMw}29$zƕJ1ϥD?d)1hu^ej/ >{MJA.c[0- M|iڭq\>/dͭజ{l8?%л|!QLoH. .뽳>q5{lΒ{.f|=.}Q]^D64߻_ac;7qPpaz2Gqo?g6NܞG'S"xb{ GR-+gҬ?aBh~m]5Ӻ$p %ͽFUx 2rxuf/J, "f42& ʅsq'J\m:m?n&]'B`8 Be{Vrk3F `ZAy*ιCH hEyY#aG g'JAs-:^ ^9WRmRINBI2rn6h;O3m.S}$0mj&RSԋ2|.zsAMC{&$Mr21Eo#PomZ'+ z0cV1F h0S^bj"/l<1ӞIYdTXTJa&!\fԋj \ v{trtSv˚;bh MG40*dpiVix wo@vx8v[FPIGڜU&yM> A W;d}"ωvLP5 ]R5tyߡ*. s^۱gIISR|J4]fX'@GQJSz(ց2r,72NƣK>m)Od+ѹt<(8>Ӡ͝m]jYN6U֟R 7vwM|c̶_l4ɠsOz>A3REn%-i>e*9]P&^ӺQ \T䤅˚5K]~bUf×-?z-?y,o% lv0!+Fpz/Njt7r1l0Y<*U?W mf:׆ .LCbb{ Nm=:à}&+gPDKOw8K;v[]N|3q9 W"̤ZRE(~ {M#-3[Ad6.R-G?P!@Tϵ-7*Z=-M 3~Q ,yA H;"rDᲛ.C*9Pce͌D"L x #r9Fme&Tn偶Mt74|l=Z_ 5 Hm@TXb7@9L!0<2EZT5lP&5vԀ4 [h(k4hhhpicp#p3AƜnJ7!,xC )*mj_~|N7}gL!c)N{ gD!9c$v$AJD~alA=`}NI,_V[V}gdhhkH_fj8Q oQ},)vd@4P}* H\} =gt%g[+О3ԢiMx!7 zb4vWzUOc]&SPqe3*@hWID; 񹚶K"ESg8& },hgۄNGiy2+zP3*5S+Wprp^vӹ,Iy%+#jC(0HHpd$2[ HFzĎ 9ǀMGA=nvAU>y%N~䴽_ujgNp_iyQqp1M=?<6"݆;qn]} ށ8P]:@uU:&5ua>zs':@_QPnquݍnZcCI˿S|>pLz$/y8qەn 8S"\vW+>ngpyYſm #fUW (s5׺Y{=kpl͌]m6n+_rZĹo%Gd9_*IQ#GcSYLlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0031-etrange_sound.xiz000066400000000000000000000046501247673406200274540ustar00rootroot00000000000000\]s۶}ϯpʔ-TS[r% ! E$w)WJ/1NS]{Z݇£H :ޏǝ#-b?:>zaxk4>8|VT{UQO(ry'MO6;r^r1Oh6߄0:Nh2Xs9?ِ= |8ꤦV0xp;+4Xl-DilV" K_Sr)S P* |/M~q8X%+wVƳ~8K?nG:EY4Dn!Q-\"^ۙZT38\Y9M({mhh-|)Ņ S7͇G9㴦ED)ŤeϴmiYm2MG9-}ͨE&ᐊgY !V= X} uttcU>C٧gņL$\VGmWQ G^T:0S:*)y0Ga: H|`(ՃDSX& +[m,XHPMȳ81""R_)=AҵW0l m{nҐg!{iL^ƊBrوMN"T90{%2&ѝ!/Fad6RG 9iRCRC%DL%d wCn4d4m" VyDq$9$bfvBD.d>$C8L`_M_(q+xd Ңk/ X5ʇmjg Bl%vgy.wOpn`oHdV:ŀ!-V҈ˤ3> Ԫkzxw;GD#pUz=+<2uFẛc"2S"͔D#tNEȉa 6*|Pl4}?5%-{adYz|m"%E(5IsӃ2ZԂZT2l03vԀ2 dh3 hU]եcnV~.X21ۀ$p_MRg !6 x41P>:w yxE3Qu&SYduKJ4䕎![IH.(a؇~wxn:iYR +@ Jv&DeXaWN~پ+=iZ-0Kv[[|JX=Cږ>e1궬Qu `[ :˝KjQv=wOplݔ)?*@A4l(Π gyL =H|vW -KDT*E$<;KW{fwu(:ÉM;vBe2ЗK!wS,(tMB{3VIRhwOݝIơ(GHڲJs8#F{諉Kyag΂iwG Jάh5%m?jOhwԒhwćVBhj4bI~B^D -=m D;+}ѪY ޥС.) myY$ OѸ-ǒ@hY9":ϝ}욐hT Z/=/x/Vb]f/ʕj\x1t^KR͊_]=#ݧHOՆ-6$#=Fe|j H٫Hzj@UCU~ny%Zo9mZN[nl49Oiʨ9Yn7~7h6-v^ZJ Sï&s'~/MuT@uY.˂ep,Tׁ؁ĺ0= 9Hu/tT}FAuzXMx(yh\Ï5zm[Uir,wR 55KMd{BIlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0032-mega_alert.xiz000066400000000000000000000036631247673406200267230ustar00rootroot00000000000000\Ys6~ϯPȔ8Ֆ'ڒ+ə/,$.xiӤmrX}Z6c_Meazsp݇_GWӯ֟[gY`vǁE} v+q/ݶ|m.e0Cꙴ52}n`نIÛ7ko'q?'dMݖMW첽d-N4tc~>>[yd\mwüϙq2#XDmmA67\o̼U5Nㇻpk~b =?~Do#S7РZkjOؤ# HF~0ac@AfE|Y:ۉ&iŭfْY[W\M9.Wx$r(mm9B`t1"xn5kH*{du8BLe2Pn_zwuan%X:"v5mpՆ-[Iׁm.ُXNd)3ߔ|B) Ifsт+&qm9+yyt`..G*?ҿ]q Y;\jbDhAO!C"PpNT;,%yr!6 J#Lncz#%x$^c-m3\FK:E/l./=`r'j%˹Ct ]:t^r?8}+b!'%2ZlIKP%MP d$ޥ ҵ S|܌?W_j-ܸ@Ad:Q"Wg;$-%%=wD;!]!u(@~a8)OFy~S̡5|X%sy9B]̑u E n|Ap }Am͙MG-I,WflprK›/4 nA&xߥ-Q-Ptҕj{_T+\6Kg?KҋbI1rl*)xjTWI6OFJU84-1_F~}^wo{С߲JC_LV[C-xO؆Po̥/5N9J`͔^C!= zMUgpڦ<{\\|,dDTd*Jà>HAE9g50V=:hr5)_@jH̡ ZX9wѢIrq,wZpdkB26xEgI3#Q ˤ7{3c3MEA<"m$a]Rtu%$MZM H $)GuWd]8h@tbv l`@xi`@)rk`7 Ԁڿ 4n.NO+7P~3a ,=(4ЭsUh fhrWݚCv&N4 25͡z!9~|_9nJ^wώ+@ }X88R_7uO_7%;? fUO-`\-VZUNz^Ⱥ l|!Z>XO!Z[u-Ǻc}^'걾x;_ƣiaDob>}Yjg,k>}`р»~uv-Nck0a0h7ikdtmSuOE>:ތw`4lu{>{wi<'+d%}&K۲ < | ]8mCUov@-}b?%saƇAf̔q0e^G|HGO-8]dbyj0LwKu#9?~$oU7e$A_R6+I7L:3 )jZh(PG][>qo`ڿke0W sY47\#&bqY#?!&/@%{G\ WYNR5|N@&& W&`p]hkw6 ^QeȮlv!~t:最̋4S#9J*tGp"mKrwL;Pth:!\L8)wF~]6ϡUx891sĹ$wc%#/NBS6.t(]4`OWL/h68%v')oA&Go%[2d+b޻_T9\:Q⥳[վk%m>KDϣ$S'aoxUyh~c>W {yA ۇ o'4q,2% "oQ&6N9|m?z4Dn|X3PHoC"zMe0x ESp=M[$O8ٲ,fS$T0qQ"J{AurP?nVǹ|=h.jpYڿO#dbduX+dQ dTi.!hD!,/a I87#lAS5{l*e 5#*, kJ FSr FÈvQh̨MJKSC:* V͌l~geٯ?gnTb2=_ -jU`Jq bZ*]t87 WсKxO6x=;[M6wΝcThIfeey±Z{V;&%j8Fr4e! 򢕲;/-fnD`laRXR X%P)a%U׭rdHQvXWqJY*u0*P OVp49k60&M&dM8 QkƝSnV&iR“mm+2^w4H(WSWN~T4#?2=umK؊ۙ4KoӾ#m#vdM^#Z'ZحǺ뱮zS=2bGh+iI{IϖH77i0L RlPZQ 7aqSI[>Kov=rݺ3nq)4㺼:*͸4֎KfR\2Wîz^'x2wt(¯U?SpYJ z]e(qٷ}*T8*^}d7uvQ  H]>x+OU']n ȏiյ斺Mlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0034-radio.xiz000066400000000000000000000034441247673406200257200ustar00rootroot00000000000000Zms8_=%4/3M;\LK s/a˜-pEW6$7j}7>=֚eb <./ӛo>v=~wZoD&#J ʏruG>^[="yr~my5ni,F.m\Iל=mt0hOr3 ['sx$#.cx=mo߹$\2?"+.">rDzh"sj{ض,p$~^!ـE!dpf;Ud:~s̳0y0c\0I! >u\T" _c{7FܬXqdN󭁹AbZ<$,q<)'tS7L. JZ% 37%in(ic06eg@ t{geTDLxD3$Y~$Sp"d, oӇʤ]KȻbEuWH\[er!p^t wxjgrkb eU}J+π8M~ZwIHEy x.3G9~qnGF PL5TshPYo1u^_ Ekr=ID.W.Afُ۪Rq1*J9HEE9Ogpyx4nqG#5NavC,\,L%5#dTH6f u96[b"}΢dvYoJkJYa亠ƀ;@ǕR<)I`ÈPH*7{}kNnCwhʋC$΁ts$_4M'MXe{X0F@Z3}$GzpK, `Lm48C<"fÿ1itgymuTUzS+C9<\~7Kƿ54;{~g/,ck>6R3ՍpLu# 6ST7n3ՍpLu#7S}$x=bMW+&d3)}_ؔ~Z=pnniRSj  Oy,r;;cB-*z+:(_`_(lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0035-the_drunk_world.xiz000066400000000000000000000036041247673406200300130ustar00rootroot00000000000000Zs8~_Ri2e.^4A-9[[aْ,v͇OOᲵ&qB#v޾k󣀲\_?7tvQ9wGvP&%bra|!d8qksqlâh|כFV7޸wןxq\CBPx{)rD9 "1,qw%ωqZ- qKKAa|:4ޱ]5Nㇻp*= ҃:,T(L uY»?v3o;&F hEKgʱ([ô]w_%+ْ67¯HJV”k6}h }'3JY a⑆\UOTy5|N?[) 8WW`p]h 9V(^Hs0cBʫ5YF>OEW)G#_T;;T٩-{]I\q1 IGJ?܎rp;DŽ@5ZETjDB&I)+o>A3b(&K<ZRF av2PHۊ۵z=_wO!x wY64ks5djE^ƭԕd_ptPr3]zY%HmܟᕣW)E| z2&*ͺPQdnv*[{H5Řs[$_D5TShQcj 1a{8YΓ'ħy: @;Ŷfv#l\.!0gҳ 'v-=<\ n{hCA'0W^#КKӔZĆu Ub!lDL ުG9ٵ{Snd5A}V0ZߒK R+<) vr$p/F`cezHB ~NvY.Mt?tc 9bOpWJr=E:KmY5DWyn\so|7;ٓC:79wrbТysdy9{.NV;f#jc!E^3wŜLpKPʼ`ko64BfSItM]m)k}Zζ r4P=>?e/S?yϞV:7?WVDձ[d#,53gL7`3Ӎt#63L7|3Mҩ3 +&bJzI)I7$ڃMj*W-eBFnSw.%vYA"c%+f)ǎJY$-Krxs,x ǵ^^ z9 :yS/g8>y^N_Kѻ?P*40?~T1K1\э-v!֚}t!'?Gw[aN)ЦѵK=mt0zh&}rxOV4hyt.KLxuN_܈[dzaKE[63[n `ʂ+=upEOd6;XTd:~\ 6%ȱ]'{X~/ zYB`N:~+#Չa/t͡&i:ľJ\Gg $rMTⲌ#G\|a0J*XݳsHK˭FUX eL> !Y Qv0}tе+^p#^Q+(N_·hC`t{11zvFN f-xe*WyAREO4XkzXWrÏ}[<`LB[&+ : 0WŧD F39$` FCa\hz &Kq;S8"h#]oߢcu7XƋZ4f&  (oaO]!y7!ʃd-a;_} ${bm [N6CrbXԸZ&i^J, .IJq3^}IŞ0s9 dDL5{ wAH.WXcNt-U;Ħk);Fs̡ +"VaqrbYȑe3D;!fp LU('rlN%iL(r\,BH셃Q*[%IP~\$b\{yK=gKX'Jtļ̕$%sov0kdγ#]0'aoxQgvc>W慺ooc  Dv) Wq x9۴DF(lp; h%fPIByMnϧ3/` /ڍ9"~hh:‰̗[R6[됌 U,J&.@1$l!)eMy[KAF'$b5|%ЧTiU w1"4! l~U3%8f:{:{zҴ^Ҵ¯tHD` @&}nRmQ2m8w #MNmB)m2٤`O7ږ9 <ɝp'9ܨd,U䂕DA"Ŵ$s9X]t۠:ߍ%ϋj`.}p̻10dd<$ok`*]ef7LyI",OѺGZb tWURgx[͉3/ UT]ITiiQ5_UmuA9O^:im@y<͹Pcd&9?YCԨ5,<Pj-1޼dsF-V>C7 /˰p5 &lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0037-ufo2.xiz000066400000000000000000000041771247673406200255040ustar00rootroot00000000000000[s8_kiKs tH܂oe˖d¦bV~iw֚˶" <>^7G_zt5to=ϛ$?<cxW~;ZAx'oۯG!Y|'ŭ㵏i'6L:ތw`4lu_{>{wi<'+(^?/x윶ӡ*?F~LZ4dIheX`"9q9ޚ$Ay9_FD=/ %byG`8),} p 29']'{^&ȴ~_ LB!oV0 SK8]O8-P cZ6(,|hPA6 ]g 02&IIb(qY&#_d>E_Ȧ,JNlxrA]_ɧ7d!r+dԻL+}t,͊ľWR0Ts5Yo?>!PS3ؗVv`Y* N ˀ. 1%%Q Yɛ?oG}݂!!f?b&tV\5W&hF%Q}ZiO@2f.PHG )§&KqCwDv-}˯'eظ( ^<62-ަ1I,$8>^\t@obK1Z=Z|1) #/W ?N1om$IJF,u L h J" .IJq3^}JK<'Ts90"Dj^'\ub{ZbRMClFBLc8:cCwaTxX'r8!r$w,,NEB S6 CQ6]8&Ah Jׂr\hY8GrFq/QOrtr)=/]j-:Qҥ%e$)}{;]\&sٸ? {+CR?Kq47/xxP?p&ٙ~s"%E Rn~7 ӯYXTzx/Qo" >PZBo.|$kx"OcD/ʦ#=r+Yfk%QʒE%hFC@*ryF=۬pW ˜`Ms &W[- %~RB͠Cs@X `(d *-j7.F@ͯj&6>lT|-W)mU)m+EOXvtd5m^s-*T NA!ȸ)-@r@-v_4,sm [_̓ yÍJ~!:=}|:HuZ8]0Xݷs'7 W%ϋ9sp̻uhUɬl<$ok*]ff7\OQ$NJXii#9*s T#] RV>s"D,Bgu94-TM2-ʵf̹v٣ö!p9OE_:iu@Ty<͹Pe*9T?Y!\*#m3Q1 kax29Tiw[ey|%Zz}6,5$!ohH(≢PlF,B VV $WPځ {@%7^jV{or<_~_Pe{#\M{> *76D<;qx#8Fwe6l᝚ɬ.XzxiC_۾#FvlՍlFٌu#mƺ]7c曱KZ&ڌ5lBeGq^tH=yAtT+)A5eCD)%7elohkJ;;x7o>nJ8Ǖy\qy2BbWVlcζ"|rEհ 7L?+1YX(| oCKnzؚQt0G !Y&?Wqy`;ه Z Pqʿ14g3M6ͽ@o}-Q>;_ j>lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_2/0038-8_bit_car.xiz000066400000000000000000000034651247673406200264630ustar00rootroot00000000000000Zms8_=%N:Ӵ%Δr@:Xl/,iSS{^>hwśUgC=vBuizwtnG7/n-$uc]Q(_{ҕO(ONoOEdCow58K!;ı;# ŬU>:ލ`4'.zOGr 3 O<1XW V&\A 2}1cBȰ Y[E G؂/qXvnZV(eڗ*Rg%QEaHE&kus9{?ztM#By LC*R5h!'1ǔB;!ppOT#>ȊXbO)VHp\ 3ȗmV}{jO#x oh-Y<*Y-8Sx,"8'@?oON "ox @#K5J&W]L3++gH$PB#Hz!P$2 rt)H}<ʐ;RU'Lҹ2 qT4םnw$ 塓:wu; Sm!7݀:*P_gSy`.u X0ˇMq.1ǮPb9ʾUPZ*(ȤF7Ü,¨LY^;u,<N&t#a[P 'b_^^jy\.1ꥋ 饹9 {U(Yt>l6v'axcU}hQ~k>7nㆽP[T'; ' 0ä(,520F 90\S7 7taeko1%IPMQG<>*,%Wpf̜N9 cȬ?Af۩Ro ZcvJ϶k' yx4k~1ubOA03Q&&frzlM^šzU+ė (_:1NA{g4sM"eYK٫KYoX0P;3S(Y vA](Ĵa+̶ ,t` ݈o7 u2?WdpsL%]i%&`9$.5e01qN b}qOh8w?߻ ?Ջ 9=#vz3ߢܜ['feTV~K=d﴿0_P*x[cI7V=k7!|Y,S>++ T FZKm9i.HNJU4.-_fRWİ$֖,`v?6,]F< U9=Uͨ<5g Úǖ_dyuo2kJkl^.η۩nɿVlgu+|S Tu;խ0Netjp\9`>B3y8SyW~UfU u!'h%Obgle8pk18jqa?Dl:2ݐtG{oqo{tgdB ԧLnI| QFHh$ IvLK7)LBd ƅm PJ2įką M~uL=._cj0&Op&?`A|5rw/SMBzmV4[FwkLacx7V`Ct(u}lQCDx`즊0c4BdSuFsvUE@J"XA@EnTݥb*f}EWZ0d8>gVc$!*(^@`w#lY I L}MGOFqS4YIJ moPJ$~`'ZC+d+JM7~ `|ݰ:&qEȬSvn/\yJ2րXz P8"hSdw !KqD="eEjF8JK  9 T{бL5J|5{̃'wn>{2%%,|k%^AٴQ8@# )@ jڰEdݔt/lUiҦ pl"dnjVBzeKܳJ(0Z$S̢}b`R̓ɥ,ʙS^\oX 5Fo[#GFec-Am)%fSh*?;r!Nw:wk:I@\G68_ԕ}R)!K!I>El3p{?Sa0{jS 'I2RƩc,0Q̏vYP!r;`8n|Y(jf5 b ͢+K ?^n\t+ǨbYF+cҙJ8O>xI@ۦ&h @a(I\&FT6(Fi NM;)QBڅ:hn|I]{لVA[Pw|j-9*X#-#qzM.RxyP~F` Oye,u8Hm?(f37n6Tyq+iPK @ke@O/OZjAT"ee$k@:}\?sQ.lc 1bj7~a̓0N3Ø% c65c ܇`./4:4Lם&(cj`aZ;|M0#/qwcv/ ( Y(MJ { Ec tʍ /V}2cqTR,¾j=)"tNԼ 8}ix).:x*[x/{[^ws)[QlE?mTO@־Ǣ $nSFZnJL?YEW`O\iY`]RrqeȬKlHbiRl? aȒ Sd&w!K}RI0<@.ziRP k?fIudѵ:,[oJVkJVYnt iD]/<HqqmpȔTՁԌ-ˆ5TE"Rs=uHc#tU$d@~jJWl~B:dEZ>u{l0"Y2A;4oT8Nn(w#KV$lCoeu*SUʝNc`B!sdH*4[)~oei|ܛ,^V/5BM4Fl3 W#&'Ts!Vf#XTZ,SW+ b.5Hfב9:FSMCc+AP78a\-2n)gjt'=Ͳ!ϵV96ݴk<o*P^,@Dwi$!C @=UѢZn'T~:A2g. LN5t22^Eh%PVԀ{~[تezqGh6j>^on@AfS AWW+ 'vU͕jH Wcy͑& #67N< 8Hu 2xiH}=0qsoxR6\xflAQ2 Uv\Ɠ@aǹAh4Ҳ iqdOBE҅cbmcK(d [uape0 Ne\h5!sy8_S5 [%LKxOR.Œ´{tOS^èsZ\8GCBzժNοTdW|O*|r;]]u睸11HﺺyH/KZe_92-Ij7KX{W"0v:uՠחymz٬/:A`u}Vg|XYNѩB:5||[Op' kmMŰU#Q@!E,ƭoh7=}j9PK uغ_c,ϴn1ܱFƆ?+–-򡁘(/o|3ۮil lug>rk ~Vdzo*Zg݅l"X6^~4h.f\M24Uo{ћd7fGn n ߘ%Q %buuVuղ{֩:^m)C>fTePRuT8pU.lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0003-at_saturnus.xiz000066400000000000000000000043611247673406200271660ustar00rootroot00000000000000\ms8_=%$3M;\sҹbl/4_+,Y%L6mjњw>= B.fxe~68:o~oדٗ~g8w#GeV\6M蓓;6Q@6.thAe8qcbGxbqe7Nƍ{ﮏn{ި?O esu\f1_՗!Q [Dm!AI {U>:['fC OLCyE/tax]ס`0nxXsZy9Ƀwc#V o s.t(S mG?(p?(ʩc8đpeebI-ڛ.ނ4jC`r!DLn߀4O4`"sUW67:MrX6'!~dKrDIA$ ڕIAnV'}~%WuR^*)0^bR"vʲ:"#҂fv]dB;-cxMS4uMSSU5M͊3NM E1t0+*su%d|J\+b#l +K'Bo ~)?Ӹ|^{wb^u Y e{shr}ӛMÖXĤ`yv[|5u͇t[oe]pƤU˚yei*gPbeLS-B]h)>u] պj]W|ϫS/5ܛ}O`[Gi" 6 ?eA0_h=P|n)J'|Jujɵgҍ|rNSorNejOKp3wxJvqQCmvb;OCSnԎy# vv-CiCѮ_&CF~a3ηS߅s3 O?;̒ =q~ciGMpbjW`\ i3مÿ|+tZ' ]Dq}n<3yer짍վUͰi 1žn44ҿd?Llmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0004-echoes.xiz000066400000000000000000000041201247673406200260560ustar00rootroot00000000000000[_s8xO.!S\E#lnAlC}[aْ,Yz9BJjw~|V[0zSw޾uϧÛn_ڵ?״yNkԛuħY $$+]We/h{>Gq%*e9ľR^Fq؊׏IKN(I<-vB.ebWח0+\%8L/Mq8S/SEh˅9!vs< 1ہ3+|f5A3hا @&2hAdFp$0'gB30p. ݘZ\۝L{ݗ_7i!w[+46>I,$8u^4N~Csf7-t29t2 xùFXn$݀,Zz"헢# _9ך#rT5|=ݥ+ݻ"Жjb%\ d=ǹu8vסux2qcGHr1fyY7 \}" Bw91ř*^^s^ʩsED^8h&R c,'DOR4r)/\-:Q¥KLIR2W{owLYoI&ozV֐,|unu{A]R?bM-4͸9Qhv) y_DZȭu'D5Hia!42B5p<'/1 "Ӊxlfk>PE(hFDz^H`<{΃rfiO$R# X\PX9rjP][pb4KA:fbX8)Vw#eR~*m*mh.9F)9'ڢ2Aepj ;7U.+w#}f ~Tض̙-fAFSl?F%Fc?=}@I:N8M:-JLN+8M0XݷOu;%9^DϮcDp̙s#g<$C2?3LDL8Zp/QOWKsؤr7mP-'`a[Ƃrfx-+N J?}J&'[R6oK942/ Ѕ DaWk.*†~Jas~gpAN (er-`cgZz.Ȃ-vdMK+m,A1W3\혫mzwJ\͚^s5H鎹ڦmkvqLJcRo6o75{q I~Wu$[2]>LZ)qxZ qy6US엻(GY`k5۴[&3ݑu%U[u% Vc] XWn5֕p]u%Wc}UŜ>kh~*8G"6rkH!6HW.RhBkFXJ/y.,7*=.w_%KK*13F8.]q3w{RUUk2sk%PIJ"YPAӆ fn ZzxxhAT]7O,jݕm{qgk l]S r>6No}hד{B^(Ν\׀δZR8=UfՆ ?J-<lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0005-echoes2.xiz000066400000000000000000000043111247673406200261430ustar00rootroot00000000000000r8_R6!SflE#l܂B~۲%Y d~j*Is>~~^-\5 ☮e;OWIӻ܌?Nϲ& Rt'+&h.y⑍Mn q,"!MiLBd>'&ƙj @J.w $S<, qmR-Td:~dR0c1.?OyaOEMw d4)8ӊo)mMصr-i*@.,`"n4uIY qlIlۈ82䰬€ÑBA?6OrF"/>q,RQ` OٻAoIxR-hԻLo t.AӲTعq@2]tM;"8]@8<bb'p#,C Y./Ti&c+>zpn?ڿ=e {8vHUS&J`d@c pMxI,%>Lxr*  9!+SYtK|῞Iy9=2ƛ'wZJFfFN 0/&;˶?<қ@c{^ K/.Rt&d k(!zyi ;:GTHiQ%$<Ͻi% nHh6:L%}c%A#)w\<[QJqW:/{Xz^TD)r^2ƯQK b.}ZLMba\lRq ك]P[Kp&jyaJϡU#kjRrܵi-N'ꎗoG6! NGlv釔?~h*vĞKRսKLS Uc^ew Ԓ$oiJlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0007-compad.xiz000066400000000000000000000035301247673406200260620ustar00rootroot00000000000000Zs6 _=uiKoNo 蘭1rERd+w]S ?wz;K?\0|<=]1B}>r}/y *qVvcw&N]Xt8L|8wzFwid FBu|쑫G]` ^'0luө*eċQH"DEG|cZa"%q5NLKS1PF~QCˠ4c׍>[M@"3gs7` c^6Xx\B!ζ!) 6q߇\:1 \m*PEs]0J*o4ۣu8*\kbn^9f5Ux xrH>AUeT*XUw $1pAܠٷ7dU?ojtʉ9ľCL Ye[IwV GWvFǨ$ٙ.YɌ9._ƬVsj,Z |n$C$\`{վ:!f?j&ZQS4aD)(F'2hAEdMp,0PBkppX . ݙA[ۍDSxjd3Z ަ1k,"`ߟ_^[ ͹߰& Wt2t2 ה%oo$AFq DxA.%L?%,/K͉G1AJ wU}D~RW w鄤/;;4QMClz!9tX͡C?0^6tX9fDS˺xi ]XCW"[(`F5@z}Bndf!ड़:NI '̓Thy#aG '(NzNs5x{|U{tI/_^Ks%c=oTgI6gq|mUuh~sNv &>CD9U8[ UrC7taDu %&RB)%,ӜYph zP;TOGz 4Ko'YfgEQE),uBjreF؆8֫&X<9̮[~QJ-CK,fb}ɮ&hñB-Yc|!l 4&my|G-#g/f*e*e?xL-em.s 0jpZ;7 Mn\!mҼЀ'Ƞێ5K0IBGVt(.iAHC}ׇmU:+Gu:Äepeѓ9\03/@W5͘fLEVJe.KZM(_A̻?͡HD-NUQӍ[: Y[:Ez%tOA%=7EԢ6+է֦?>o>o?ezoϗأu5DH[(#Jnt9U]:髧TRRՔ:J&P8N3k:pd>IJem]XCںW"nԥj@p }FmU٣6$S-ˣRuNP*oc@p<*m z&qH 7Z&ͭ)V)3je9:D^/!zBIqr}ݯ:2E)Mx4]:jZV_*ϗn߯7D4)4|TeeJ*o9&!w*#r>r54eocB 2kGPcj !Q[gO1#@vmG2*W۸h%_c\dM@#+H,UHOڽ[v}H͡# +~]#KG:-Lגդ#dqgQ__:0F9٥N٤N٤f$ZRm ab)hsKy$UӁ`0ax(\04OBfӨUHc{%~H|X-;< λ7 ynzup_.G/nmI: g\~ aW@u_-"r!BiKӠsKe6 Ft0vz%qƝ i 芝wW􁬸 ,%1hC),;'I''l5$JW,Hm L8mBYiѿSߏA {LW aS Ne0 -(-f~+aؠPVOkVX'|)kF~p*+PY.>Ϥ lS6LݛϻoJRX@gKjn]z3DۖQF+# fOPCDEn'@ RÛ2Rrƫژy&%*fbVY)Uz,e^05:8 9ω<s&I4mM*kmڢazCfg;QӬj\s^U:hXgO cCs83[;|o4|Eop?`rP`~ 2Mb=(f4?ir:n\S&ͧNt+ Dg;ѭNt+\ D v^N4\:͟<6_0 H#3$|UK[p܋ѢfDƈ̘e F1nI21 4ȲmMzh BinWrf/l/w/nʗ@ ߩ,|yˏlvɳW[{85Rg\4_N%M VLquXu&8Z~;A[wAu,lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0010-supersaw.xiz000066400000000000000000000032731247673406200264660ustar00rootroot00000000000000Zn8}Wx=@›Ȩb/-1[];()-l ) 5gΜy(I$uܷ$˭4\;?yn<:o^Ly3 CI[ԑ#4#IJThqΖ\v3wF>k7 h$a'uƽl%38atC2>CޤͼɴP'4Eh@ 1.T&]+e2ehERD㌥yDbcZ`"5mKR2!~ .l0l8 ǭsw ]Ut6yz38w"$4 uYHnݭ1eNNおZQXC׍3C[fM ?g6ep+#e*8I %h5 b!hkɍ̞v$Yȗv]0) a.DE&Er*]6qeW:SñŢV^ IWy?o h^$#(?e0d([ݩi5'JIHTP0U<1XBP`js#@>վ[sbUеZ>G\ޤ ׷77@b3>!)CvVrHv]^r(&YHe[@BܺƄS1'1[\fA.%?>?yû[cSAay,yڽ1Op BM>I)ƨ61k{G0 ?H0Kca qX1YC0{`.Zn=t7Kc0 P?$m1-uPV.FCAzQNb)T)}ҭv*|p;\[]wʌFzW+rI >t`4GIN/Y}˛#>1M㩾8㩾:㩾9jYw? #{ĄtS=@NW'[fUbP>k "&z{Yrh7,jrʟ-"+U`H(ޞ$lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0011-portal2_lead.xiz000066400000000000000000000036531247673406200271700ustar00rootroot00000000000000[s8_RLsr@:{[ sLeKdqӛSyw%vR}^5$h ¼y?]4?z]׎u}cV jvj21r|'< ɖʹpÍbָ Fd؝ ƣF ;;z)lp`xMkԧxg̈́$N9#!!,a&av0!XO5%![%r ~c|گ޲U5Mgao4oԠcV:X#Bi6$.Oؤ%,&[} V؄ցoJ.t,H0e7lPA 0<_?_NUVSA:暌l(Cɮ@5v缈0@CDC'@ *eMfY. (WWv0)um/%Ծ71^NqfՖGդyK#/˕q^Y.{JTX*!HhuB`H07r{/]F"$J̈́m&U3#Z4QqLYNd->!D"=⣐r\hE Zܰ|-_Osh.Wfj6Bc!Y@syi76~+b0N[@Gًٷzj&e -A [:m};WJ1Z]K 1p;97e-b'ZߠgEjHB N:l{6RAFKppc #bw7J2>t,ڴ(u9Xfsrߺx4.əܖM F5oՀ;82ѢcwL[pm!K;/kfz0>[iTy>B?֨l(.hFHEu\%4))+uZVJu61Oc';{>$|03?jn8fg+dSVM%7doTeMAM%Q~lVp b%yRZy'c?}ϟ:Gn6wO͏/޽zt5too{|Gc 2vGsg^6Mɓ;ʣ|Ɯ.vH#6FnLW>{5᥃h|כ FF kO{]? esN̆Ζ9onꄟ1GdB(sa:AMUqj{0ea GbFO=/Zery j0|?!Y 6 $ȱFƯl6{J LTmE)p1-#b#qX& WUf`MpŽki8 <#d hwzwB]3|008Gb5G*iybgJd)~.vJrf+ẙg SQ4wIH9"˅81)辏y2f )fWdfJDNheSDh"*):fA2lh$M Ãf>g^d0GzV=E?՟;/-^<2hY-ng",Fym;KbI6NjLKRCU#,u;ⅿw*9lɎg3zk챹q4QZ;OV+fUkB3)]qKIn"(NV*h'5@*/}w ^ b+a%\.v~v4 ZA:AtWm2ֻ͋a۸ڶ: 2mA$BjхGf5H*Q c_QԄl8KA _d`}+aJDRnQ@BmܟP@fy?t .NNQmT'( j(Iv4fj(Ծs @3ы[v܀UCs9z]t|W C~ǧ'ݓOkA%}/887=ǥGE%MuW_{`{A}{Z}7G85xGn>:xS Bm +\/.Q~_f0nKR 53R^@0P[g98lqˆlxg-?M|ܶrArYQUmdԞ{>wNz7;nrO5vwf '_bspxC:+$d/7|sӿ$M衼iWo.Hi<WR67Up)O54M|Ddm|̵|:S{߸GG8u}WͼlXA^Wcs2N nc3*a;cҾz6?TQlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0014-dreaming_bells.xiz000066400000000000000000000041051247673406200275630ustar00rootroot00000000000000\[w6~_Ay@s6r@ dO/:`S_ؤ#-#K6M"FHʒ{Uq:~OW]ra<ȡg٦ќ~j*[\V߉!tU9)ЦѥKgUۻn[nW?rn;`- T<:g9}$sq 4E!̆bhUW7b,X@\/xμhC)NM&V85 LYy?1S hJk3^E GNo$$ ``B\Տ  5EtǼ? 5 iRQ1rոW3KI~n\ksA]}&.u:_&Q:cnl.̣si>q!s&)bpǑ#bG02֪X9sH+f,LU]e F"SY; +-Q;֥?K;#ZPK)bfFO.bϞPit̬dْߚ.wg14\s<~P'E ܹuO~ ͋yK]9MuM~EΑj4?C&6OƅfaP73##\r>n"`xP{&70v,oV+`4 o/.V@k ":V>Υk̍bc[ a3Z 0K,} -EkY+ t~_âSu\i2D~ w !(.Q#*ȁjr[%{ƍFq D&z|0'r,IG:zE"EVJ:7ō,~ 8Wcjڦ{hyrJW/˃ 5j+x?$I-]9x;Z),ehhyA:Zj\dhi,ԾM+1Q_@Ip;= :~k2l/~=]/:ȧP ݿ%JCHȔ @޲H_ Uȑ ;h@X3ҐKB`cqj yQ6gpγLj@7lGT.7q;Š*HO \Ah!ݽ^i?1dbdU^U52^ -xiP[gT,#4+ AZ[? #۬E賷 K'-NY4tH8Z}K@%G FZ :TE NA]$!XټM*K ?K]lӼ_mȟSI:Eué;1Up gQ."$'(%kCEa謯:{6{I~ɖ(1tk(Ys- -H$nn+gƧ(7Tӕek2Q e!s˻ꢵ;_RÍraRXR;ZMq&DX3F!gTr2$*UJY(V0 TUpt]+GQ 刵D xD;)ބK0.j0bpVa~%mf4@ijF3[4R 6arD%Uno6ZQȴ[!D%5K4(ډ+Cg C'%MkɦfOS_*ʍzuw~Gܩy {ht 4=uo>>k[FYP|k4mmNz*Iid}&lw7;nwXNx9plU=zA^!H]:OW2KP:םDŚH;^| n<@qTz,+xz!hxy~cC~;M>8a/1%C?K|x8^JCsoNC䞜W3 Y4j DsA54&Im1\Y+%0wP?RGlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0015-dreaming_bells_dnb.xiz000066400000000000000000000041061247673406200304100ustar00rootroot00000000000000\s8_H ai#d\9 h-[9plI^|r9?5w~+w>=gss-vǫ\ۣҟkebq'sʵq\>r^~'^yⳕ#]քe8=XԷBr[Y^wQ+Ur:`# \:gW9}"sv ̆Ζ0\m7:w'$NY08n9s-l:&&f)872?# r1DfpJVc1^!U GNo$4 m9 1͂$M1͹>B \/XkFn fjW6l dy3ӹ^]6:w%Ǿ*roKIa.ϘLs͵̅!%e <ot\HBP]!`MBOcCH*[d7N3PDG:3\W ".aD1 P4Ŋ< .5%`8>leGt̬ZR_D9 HzfRE|eA@}oP'E*ҹwO|q ݋+9M B i&o1lh } qTA J"LBQr&Z@}@IEszMn`d,o7 vIߨ5jxĔΥo .B3GhvrHsC-Ko)t h@fk'6 MBG%r蹮td1$trG2)sE8DR7j]%4&hf9K7Ȧ8s'H)Vѽj&+o9hty-GɦZGK4QOR }z]r$=“X%d9xhiwdt%f= ?tTohi,̾K+Q?9@IS;= :~k*t/K_wӥЭ %JCH%Ȕ @޲I?MQ 3i@D3ӐI@`cq >}Q2Wpγx@̷mlG"*YhҙaP$QN"zA\+HW=Zh?lwonRBj @W+qCs>:-֖3IG_ ~y|ykl*e-F}}tҼ ySAWSwT2l~d 5 b3I8*u1. M݄ߠ>;->ϛږ9![x?sJ7:SIM7:18~ Yp?t:$1L:HD!(ZY_wTskpu|%{Mz#[99WbѢͭ}tզsT1"-%>.Zkŭ];y-&e%)o'NLDXN5ջNyF+B*ݔ:P^eCA%]_UjJGZ_u8)G=nM6,]rUQh +h5:*S 4h&XhQhmL-Шt{cBu(N-Шw_׍FN\F!=4zVѤogިz;-ШrبW7|/xwĊ^6.IFw@S_{yWvǹzeADg 9nw98q]ޥ9P^D}O8'rz_Y}`HV KP:77DEDIϿ7 8*?zڕ q|zZ+s/fp098o~׃nߵqQ4!wGvS>nNLys754 gl6m 쐮8u47a^f0{~3ΰsw#x~å v\''( `5tc봹 ~!![d| sÊa:AMV86MJyX?2S n8#+LW(oaS ?o`lam-hz2bbnՋW'ŎZx dystܧ˹^2ݻw.1rZK'sd\v)et Ku9*V, =55pk2F!WWfmop]+o1  ^Re(Vl<\P.\{Fq} g#|`ȕeB[* L. f_x.O][,ȣEKuwb9ྋ!<33sWd8VS/"K2AZF,\`5SϷC|6g4 Г9wD8LWqdF~.};T߶Ox +ޏ(~o7936hھh[ Krxr: |>)K)p圇1HasZi{nD%AKq@bkF>nݿEaaJ[(l#9Int Q]:ҝNL-Ք:䦷J&P8N3^k/v:pdm2ɉe3ǦvPb$sm*H7[(`F?B95vmӐ=z~I2-WTE:FGlAc$ ғ$l;OycKRގ[:{YγRӥs^J۷v{dfvI2aw4wWJ%_fKeл֯m4)I ` [ ?ջ)8JB|'> CY[Ij 9Q8Wht= l.LAfۨG)PWXh1R(d$`<ޭͪ}(&P)Vbq-P)J]kќj2FgE+ïl\0NZWK;B;f/Rjdzuɲ+F;>&K F+Z"T2w*p :7q:ߠTZl ilP'ϛ[Ŝd f|jj?F&SrnhQ.C(IɤLeIrb3 m ?ww~*>pI|-Dώ`d2'V1cD6ZiRl[oѕۙr=ͤ gT$#cբZO6JHx$,/^88T ꯸kMZj6$0)nWQ m^Dv-=ו{3CJ[_ˉ&ܾna1 귈^uK:j-?o.j"j'j "IL%wroPQm:HZ#Y3G[ܵ+~'/~g*^4ٶ_R|/3dmgzzk᳞Zح멮zS=o?3fWGzň^1$$\|xWtonWIʓDH;TNPgMޮ +벭̹;0hr-u\Bf4_ %:[Aq)L (ƥ0;Al,jka U@e0g*7UnV 9E~S?7+{5lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0017-in_the_space.xiz000066400000000000000000000030161247673406200272400ustar00rootroot00000000000000ZKs8Wg<@U2S jdLmolkL+dK68>rjSwo"?\h>+ ״Ay^ ;/W ˓c{9߯MH V\J];OP [pr\%[^hk%{+90$v6[  mn: qo1N*\OYo/ٜxo`ŁoL %PmeVٳ _-,x:l.LVmA"P D%0ـk7MX,i $|WU ׉,(CuiE>Q#I5"[(5VJk'}y:{eB7,AWA pi#3Ss5Rm'$T., ^ѮhBrZ& .IHvQJO e./fql?=σݺ6ͱ;1Q yEkXdjR/P!&rct45˄jyGA2E;. ClFA־zuq33[VCG4AhHP~OD \b>hVo F0`1O!l #tp7dF}dL*@:->13`  tvZ@Qސ . 68W.: 2. 7G$I&a Iń*!˂48ĶrpO/e5HYwD .)LR1MώBu"AUvCDv5th!^1KCfx rۚ@}ٝ (Z-60eQ, 嗀=sյ Z~P^ܭv#w/h\"$X$7ORA+W.Ղ3WKOrT✜̱h>)d6Ioҗ*64xQ_?_D(1vvy{4ۧߞ~vYD,g̟3y݁-ϾubĸޛQ?U9^SpĢ4\%›bWXSvM-azXvvB3c&P,N5sqrqLG+S8?gі׿>ch W?J}{ F}$3%(=ى?a2%lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0019-a_bass.xiz000066400000000000000000000036461247673406200260620ustar00rootroot00000000000000[s8_$3M;\B%ҹދF" _ӤF^V]ěwVֆ˶b?^7߼zt5|o=ǙDRVϿlIM6nv[cNp!h4ikdtR޺Ѳ 7]o: [ޤO{]O`dM+v^'rP4tmSu¯nHܐf>qyъpǴ`$sf+kA<[.sm&2`U ?`߀TB:`kbﶷ 4 pfv&aXL2@H' C<M 2e*鸗&i:Clɜ\̭Ы`RU*<29|eۢ2 U"z rSzԐ]pcf?jf|C֞+\53"R .ω1(D'*ho3lh 1BK3ppX L=Ƞv~=AӢqz0^'w :FC8f f őU\MX{~H J˹GL]L3]ncxj [I!$* ]]+Zq3^}.IF\ܺ@Nd{)P"&u# |s%ex@ى)v QMCnFPBJqZ:Ё K"rN8=}kE**"GQםq3,lC3rdM-i="jQ/9GYZN.0RvM\mH(EH5<\ n;oRlCgB4#K~L4Q+]sђj2fi3 ïjh9'Mf Q4IKzJ^JotHZ+@%V>I gN5ĈqSHHUh|iՐj {t;7VA wn`F'&s].$'R)%ˡ6u- }[{pp%lGzv&8k}quN7wkuB2irE74d/mZ`,D-m- |Vb(݌>J,Q`6Ui\VDy>5/ttƏjtا->ji^iZn*_^-*.gmw\qr}}Ooz=gz{hV`^S:.W!a:w d]n|&FlFlƺvnfa&Ԍ뱆G6>+iGZ $/< W77h'AyUifYV6}ʄ ~=V:ma i~]bNZߦ n'y 3&93eiq &\?똔j_ܴʡaOl]~`1RH o 4lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0020-synth_bass.xiz000066400000000000000000000067451247673406200270020ustar00rootroot00000000000000]Ms8WxuHLimXd.,ZmN$RKRN~AѠ)1Ff <{ыb? NZ/֑,COZǣ֯޽ϧ`7?]'q#^+NZU+l8A@`*\ɓ Ţcf,l8/O:` M:\-KEmjvZ҃_ڑ:ؾF]tT]y<ڛO*E*ix'+7~W,\m4wa\;VSB+?`C0P'v ǙHq=1 H+oWrcت%sژ#w;Rpt>oyS$K Us/_Ϙm'ZDJr/'u_齍hn1eHpi,;=Ku%\9^2y~lmaq:SDJZ򨝛>r>V,UPy% Eɑ 0`bm11Da<6pac$HNNJՅHaKb `|!m?p-,4rG$a+ۻx0w)=p"<)#" Wzًk#a"""" v)6'! B,n k5Sf$n"E7 kf&aHX뒰%aKZ. k`DВE(ڀb(b-[uX˖bzik&5хi=k٦= k8ˠiucXqn kV=ư/}Or kr7HcX a25a':cX7c>54i i -} kZ&nMX HFzͦ=@p66vFF! fh0b#c"9D64! Rq6 #{ "3 #=Zk#Ԑ&5,PC7ɯ1ְ|@j&a uc$aIX5tޡ]ֺwh5,`!M"{$^nDW)IPRހ7`=3RIy?Я_Nxův R(eBUu;ATejw|nJq"+FNp|dP'iOUP!U?w*K=x _*O[1fKAuZ~-_e ݾƉUJӠ\cf˛'itku a)c2%ԓIR΢E" ʑjWHf|*0tO(zt'PLDZ/EMKbKb-lvH$p:d5P l*(uO =SJ#W-SBVqC˥EHR;=';MفwApfۯJZۼr好Pr~oR 8$VV^ "_壩n##+lUO66ePAhiD21%!6NhJ{y()G߁JUit=]qR]ҽO隃r/n־%U_j;=VnUF+]倨e=*}%z)Q.Jtw\j&\\@j&S\CJɤ4{(% Iq1ʏbhy'Zg*=Jyӿ| &{=uû}Cv;lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0021-synth_bass_2.xiz000066400000000000000000000041431247673406200272120ustar00rootroot00000000000000\s8_H`iKȔr@:{[`s[mI^ NSZV~jY05m벮?טۆi=^7'>v=~Z=ØN Q;YosYo )O1ùs{vH]FG7&j_af4Maޛ}oܻO \YSfYI4te*~7=bzl5si㯘 s. "l>g0GK50e GPDn-oA63ސyj0Lw4,u  X:K{$~*Ц+Qkkl1؟F;")@R>,شm@Af aVtCM]4.링%0Ζ̈:(T&!e{HM|gۤ2*h͋52g VZ' 5|N?#wY78 Z`p{ F׽SoMoK`Hid_ szɻjBdâ<:GA`?iHuVeġa,.Z\](p;c;YW]D h\iDH(Xԉ{Eێ %.7z>4- {S<}v=me=F/ut 7Vo(_݅@_QmfԒ;z`u/6Qsnb5ziz2[C!4s A ۖ9} -a.Hy͸Cx5-=1[BӺȅt:.# Jd*!h\g(QQEd] p@>0np]!ꜣ8D6E"GiG*t@H*[ -Hs1`7\cL(9C9"=G Xϡw"$Zh&Zy|RɒN&RFږ-rEZӥ׎P/JxNvUeJƙRl0O .Eq2W q&2\#[ iqR)qא|Bv,#rd!Ɯ98NL6қPfH3թb9 F-] Œ=yvu|Kc IT.HIArmP GI5<\ nGoW1KAY9""}JtAE#Z(K*G!s#}X 5.+ǝT^̒W̒0.TiHOhٰ<$2N+vQ. J*ބߠcIjɤQ ܞ,zWc˙3&[?Ah؁݅9WUx#|$Ԡk+Ti:> THњ ,[; 'ߍ=wdxVs#d`<㉂e4[N&$J۱U=t,Eى$Un URiчZ`A/5 KJzK~>AW‡QMVњ ~Utj1Vv&-RqѾ*nRLc0 p4ѢSfG!$4X % fPaY8fLfTH >;jy!zHh+.(ܔU Q!D͉WrxCQf##6~拘LT-->?%mo4Y@h y]j _ ٣7vBѬIG+=zLH#xP OL>zgϾRԦ[RҘ->>nq/(?+z nM@CC.҅8u\s RYNץlRv]u)/ǺSƝʱkx&#Zx9_#tIxh`.onW6_I%Egt /33)rǜRrg߿X׍Vޘ#Klmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0022-synth_bass_3.xiz000066400000000000000000000034101247673406200272100ustar00rootroot00000000000000ZKs8 Wx}O%kiǛ(Mt{%DI*0u'-b]C9MBitiй 7]: ;=K;uxѸYqx$.SxvKM\.*! +˒Mϙ(e#$ll {L7Wî 'Ý;枅܀܃ҏOMr T%u?ս•fbHMJOe|z2[ +ɟiZ& }$, 1|)n2w_v%*ZX@gKfn47TR(аmΨUpΪhHXj(dѪ DjOٿ&(t 1Vw;>\&:\B /rsG4x)ʱ5[OE4ǂG(uDL;Ŧڄa3efcĴ* Gb*`qFrsvtbc쉠̂5B.s"IDPBx':ja1lh@PCK0p"Φ>]7oNxw-Y<*Yn9S:,f @*ߟ]\9AeވǂD =HyHl0%s֤AR(Tlْ6a/Dza hIUZ{`"7cwx>Hs8a"7;})K_:Pbd:ԡ` tgI3s8Ax] X00ɉbm]XsT}ݫ-43uQgFٞFuQøL Ge:'JU7@pr5T[Hjj9QԘZGCa4-\^γ'Ay: W;Ŷjv#m\/!0hRSQ3&XyFvB:hr55ݲ_ XAuCLC(MYKjhGȨ[!7 urxkۭ[+_wNY.M&{M& 5#ɂ] GKF[;B\$#C/RLvX fHtR;խpNu+ S Tn;խpNu+̷S}&کx;0 aF:o+$N{s^MeMU&d?Į 'tKv+';x[͝'lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0023-dnb_bass.xiz000066400000000000000000000040471247673406200263740ustar00rootroot00000000000000[s8_&3M;\StjAA²%Y!tr3,zH_Sw`QHG%ɴ m,&]W'ٸg\,tOeݫQ~+'0</[ )WSN": 2r8y P++"Ux *e_SE@++Qp?ʟCe 侗1p҈..chV..͕e"W2ח+\Hz.`33_0)㥺9vk~6=xbfVhS Es0#LYFd,~C .Љ4S?p2'8>9O.p 3ZȓI۰۝NE6|Dl(Iuȴ֪7koD=O#.ӉYtl#fkCPE+) c!%484K0{ޥvf}?m&Њ) Kd8ZrjsI7y`=?vv;n _spa\iy,F$Z [ぎ 8QcTF-y7*vuit>VԛHon9U7 DB_. 셾偍#&90t*&& [#V-+'< R!}FJ#> I|{)f)G;LeVg~~^mx<^b%zf1ˣ&/]ϪV]?DWj+|5WU©É7.˜q9`D: Ib~ 2tڷc~k ʗY E{`<'Trx>Hk[W-r;fB^:_J>紌1)^Y'LLʗfFBҴgevCXB<| 7ASѶR=?aoӟ6Z~*7.Vi*gee?mo8<lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0024-fat_dnb_bass.xiz000066400000000000000000000035621247673406200272300ustar00rootroot00000000000000[ms8_=NBfvL ҹEP_ΖI_WIltr3֬VճvWO_MgKzex!Խ-G>v=Z|5;܁mϣ#3 ? .]lʣli6wWR#e'8pgj1hӅIGt6,FI}07`6 s6/>:.veȡ6E` D8&Ce!ʈ"! "aX a"9NtSR0p"ޯlP?m;֣͔TW&nlNgX7` `0=е1 !Ke˃~ر$7|R8`oU/`(6le(HmٰsȺha;Ծ~aWB\0s;V'bE?ɮn 6b LLrk4>Y|U"OTpnvۛ2nBxǮ +$ΔpےgQC^ԏ\k`{N,;S-+1RKUZy)SR ص=%a/epoT w3qh&*e(db|"X)FO)6%0lj0 ͹\ٷkY׀&gZ=>7 e gFlqذpԬ|98cPi)H)pfygNWe*6a7.<$NWw @mr:EG:ރ9&Ha3z^:s9?c.b9ʾUPpteMmRRtN)0#^PC+%:I 'ͽP(F,Ϛ^Orfn>8.]jyE}lI)]:^K&g۾ݽ%Jrf_K]eI:Rd0Ҕ*2H1ߦ+}^vF. oyTЇԛ zR,rw&3kFIPM^Cpv-/|<2ӑiK4$\n`c>HEJJ;j!b:HoQ;ZB)VW;$wFkNMYkKdT'ZA*}snٸJBZLddxKPRGu(,3 7l[p;i \eŝoZj,]鸃P'H[Ü=*7\ӕ$ҍ,V4m3 (qQ\ʢ4.q\Fh6>d~*FD/nfxVSɹk,+?>bx{tvR49R==*ytC-FzūL*RGhJաͅilk϶.M ZV5Up/fR*lgޭ ;ͭ++=Ң_{Tɤ[ l2>l`1O7_ WoȦr6y5e[)[~幺>R^σBL-*Rux^$:M|:~rX?{ݴ޾k6k{ugͧe7~܌=vm܎㌢ݟ'1+>؝,wϿn uٓti:wSbph8qc`xMxѢ wCg-sgEa;Gd亹/hIQj"y3*!!YhE|D %q-ÂMN-q?+t {=v`sM~S-UTh<|zǩdl cy 3~h%tҚMmodH\fEr9%2eekD:0(CM`&PLz2owԹncVB\vo @3ߋVp w_ǮjS#p9wVeiQ ͉D aLDzM7z >. @BP݊oOCu#/1-G{ ZZEqd " (ooWWm!9s$梖T;_L={Ղ6[f O)YCt Lr{Af]Y H#z^"r~׋VaqvfYWE+ EY w)jFrdN)qHf_K .йP?ԣΙP(Xx&'HZFS)=/[,:yWJ;:IY CKDH6NFS<|nr؁\Tx)U`7 ? )N|V|Xk0S^bj  Ky"/)Nh˭d1HBuP(FA 4lV8PKnK0{ѤS F7{ͫ%m&P) T4cFCKNMеhp#D R4Ǡ7t{%꫗)+S XwTdhyEmQ*ppR *;YbErfA=Al[V3)9'1hJQ-UHJq<("UiQr b`yֻt/à߻aW/PR=VƱȼ}Hts1d+^O!\46AՀe4ޢ-H[8f>GchS@V)͈)*GV5i\j VM4=PN?cίCYzYj|+1K/ƒc~?Y1EvJG5}.^徆.H]b m\kU ƺ{{dЈye0/hx<+Ȥd^PɼVyfq*mUoUZ+q֬YmMlB_r>"dM.H) A֚_i]E|\]5'GO}fx=kq398[Qh{UO˞6ߥSdMӹrs&;C;kM?ph?w=u{h OVoxIKԡ/"xl7㡲"eVG B?Z72,0ٌ)@)C0"~iOנȟ7Gm*oƓ}o0I- R 2;6?~h%&Gê$nV$.;;x1П}:>s Hr!FIA1827̮LI ZQ(!u)ࠂվ(z@@\๩hvA]von`E 1QDOi|6?'7]{ |`'uv]p\\5Yx6 7"מ#88>s +;WW+ mK]_̸ Hr.cF>vo @Oͥ =Ճg>!8f&5AKjQ>Z^B[Km8 AM)rn,mtK3ğ>ۖ9sL"(`Ng:IL70Q?CTB ;xRlO:IUY¡Xm奃fo8Kwt?NR=ù[ ۥOέLcQy{6ZYRZW e^;7[LoxEj('~cѢΝU/53b0Ȳ|+Նh&H 3fLǢJ0V~5k\`Vs/9bK4&S||Cw|  9-owT jF0AoxN ACmo%5tvBq;$mꑬ/Gr _-gN*ە ?g?7<;b[񢩹oЗu|WxknQNVC6i?2GYf5ZǦ gdQS5ףj*"uRfc%?\řf%UN"])UL}YSWj|sOI' "لw!b(lѪt-m,\aC?FJ>qB!墨ZHZ(ZZ賞Zȴ:멆F3+ƣibDZ9._>Mno{:Yy[!G)F }fKםk֯27ؿ*Um7-3pe ;lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0029-new_arpeggio_3.xiz000066400000000000000000000041451247673406200275160ustar00rootroot00000000000000\s8_󑄙.!S\E#lnlCْ2!=?%W+i])o}x^.*\W sLײui|wvUͻn7Ϗ[cY3%EΖ]WUv'>660`o ƦN呮U׿ :ޠ_߿wF]vpOVԫ8tɮKLexXc㢺~bl^2'o}DtLin `ʼȯR}CGO-:l\dby OK~C9Vwl$>.CQ ]X`rjwHB-]  2q߃zTw?ʛ݇m]WCCKpa,/s 8d$:xD vWM #aQLd|4\e9]vnos\c \h:mn8[<:^LB>a ״-2a@ R}v91gc0]S0@!`?k:/2[m:tWrOccL Bِkm$~@mG.)HXye,|N.ʥȁݩC,nm"nھx?Rޣ kZ5c4 �u#.x7 :^L] $k÷Dnd Yʁ5ZlAnA5HiA@Ʋ>ٖJr7|NKN,)mK=%2{UB7ے]wit.rMR Áиu. S"VajUȁK: R$-=PCGLZH$G M9RɮMJGG4P!HMe&dq!kx*9ZLNO!/^.[*^8Y2P:dK-$m%[ zԢKm$E5]ʊzuꖵ'A3]qb${'q+n $hc> z7pA];Wisϩ+HE;Cw92}N' $(5 6 )kL}j-XQԃ8ѳ瀸i ts@.3vl2!ɞ إb%T II*{vE} -Inzʧ7K:Rcd *+J *ܑe'иx/koTի֫RZ7ağSDb kaTΉ2T&m8r FBXenB/P[ʰ$b(5aOB+eoL 4]ܞ PrQ|1EW VAӒˡ:QG`u9cg0nKl:z܎[MεcysfOnu0(mRK5dЮr4U'IrKUJ~BCx9XTk^ #"pE%rh),DEE:rRLyueMTqEܼ`@<@#iEvNI8CtC(RŒcaF80c~qV 3N()a3J$iE!5@&EW\J$'AQDz?MǡDIړ%F/p(O.@[4_dl (]Z*kzh4J 9}BKP|| w o6 MX(\s< #YAG.dR>.dXb |1WEܩ뱆3&4l.޺_#WtI8}LnҮ{w׽lCqwOo[ٳWVW94'&Ok1"t}Nđ%y\tJ;.2%:{ uFf׈YE& XgM'dPQ \\ j *6 te>5tg;KV;A+~GBlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0030-from_new_arp3.xiz000066400000000000000000000045041247673406200273560ustar00rootroot00000000000000\s6"=L 3ЄL&E؂6w_-+8rJڏwW>u<ڰ t}e}uz -ON><3GT46d9z=:904HW@ 3EZsdRˮmp z-H'8B)bq$ YVh 5=IھNWA^^/[y,Y(ҲҶ-Ujӥ>Ң.U^G|yU+ wv&SRk)e^IBM`|iUhQEc [GhyY.*L&#EIVټM4*>O4xA*K!*D.ɝ:P*dd=-u䂗|tJ1-IB5Rڇ00ދLo'%߂I~-H6ed3s;)ygeSPl];v\W3!M+v6V4輏Wh_BWݔn9CGg]nkVN|^/=?]ܮxwVL{[aJ#4գ ͚J#ݐɿ^i x[/4DsB(ʚB#)BWZMOroM-|mStqp5pmі(9z5pG;4 WxVlo>un0hiM6end*_6C+m]3s]m7]/ؖ3M n ʑ&=5Q9Kh |&s|>:Ȃc^~^AomMlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0032-ufo_blues.xiz000066400000000000000000000036471247673406200266110ustar00rootroot00000000000000[s8޿{J6.1StE#lbe~H1𩍼ZݟěekˆezbܿlM{Gϟ|zt5vk]םij_G.2vG~.y5OnX,$FmAל[/۰hi4lu߻v݁=YѰS]=@)|7Ƞc4&M,Q1\I>`PB< Lgꭖ\$oZn$FF-irI'T*̻4$ GolygU%.ܺ@A4)Q"WM;$ZL$}܁S@rCK:#3I}S)`E0Y 9NN,9CaV9ʺT^:Q. N(5 CšdZ(yN TE pk} ɚ:?jN{>T7jSKR3WK&rPҌ}lwT;l>-L9mlOFЪм| {=>HCg_J$ZA`|gl2"G#%_YHP5%J`4CzCi.*d/;.ك Ap;hN-HB*BAɗ`TzY ʕ`GM7c7=zA#F+H(Q$.I TEQxI oT͐+mS0;`< ' myp#5EK"eE: 5#т WK+0p FBBBr$MҖuB?AvL^.h&JO8Eb2a`Ht%8xI6ORLKC(u ޥ ~aJ^dߞV 0 5]8JE_eΝq}wV.|.}%«oeh'tF UJjFgD/ sUH?lmSYӪ~}Pիs.?)]~[\0/@v;+y=< 7 zIOZnQzA8Ip( ̡PNo"r'NTt {˪||Frޒi)Vw~ Ra 'A)'Vcv@;?6<=y{,f(Gx W6Ӧ]>tݤ;njsS?ia̙ sʕ)eGt \|g1rU<B9$ vԐYk 1UD@"2z]a9XZ@{I=I\Zoњre3cS4t^!`*C"[*kBsK"W8̫| $/<):;a)ivK~Aڙy+]ULuLv#Vm8MEl搀 %2bhz ":+GS82k#Hݩo?CrNKxH{oQAh~4F [˳3c9$˃,gp Χ>1et 2tQlL"+|"1T'%ct؜Na'HھA(Hѥ8 @>:עaQI7kDO$j^7:Q]:9҃Tr)wI:TJ9.SU:.æfpqqaYcl ̑u Et)JGq6ؓ$S-ˣ䥭:ר+^{ayR-(j^?IjF6Qa僧ÕKRށ%\$' uӋ"ɔӆѠ*}hV}m rA=7&tEZPVp ꟪l8B|NEros|NT3k(wazCi.*``/-sDv 3]lۨٺI@]E+(98 44[ %=h{-ٮA&#S8(IkrUd} ϩa |+ v2NHj`!ڝ#32)mdxuɲ+FlU WK J[\&&f ![ٜ&ҖULc{qOP@o(-}fbK!"8S&]L M0E\@INdR,KC,u y[Zޠ߽G.U4zv#[eNύT#gZԞi-@s6px! ^uK]WFNJf)fUYm8uS!Jhץ H|XդMeM뽢-(9.wrWTRdgnN,4A|,F$/; 'RKg3\/ȿdOՕpVmԕ0XMu%|VS] TWu5Օ0_MuJ8US}z6_zŀ^1"W I1 a>R;^V"qѮ";p*'kWo\r;Kf//n/u]zRdl@C] c4{Ug ,Z|ۗ9ax!>{}Wp KEpE3^7`؆W)PxN+^4'CLgTwU[䓏CM\ttOfOK)&H7koq rH|YQ_y>lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0034-synth_guitar.xiz000066400000000000000000000041551247673406200273430ustar00rootroot00000000000000[ms8_=.9tE#l܂²%Y)қ|jcVEmMM]F}?N'W޼nx;Щm'.0?J՝,?Gٓ>I@(q4g:6t"0=xQI{poOzAwC{w&pPxInK!xq ~"Ed G(F%M͈#qf kW| In}!b\yC7Uo0[}fK}ۼXd  ah"9 %{lb h Q?CՍzN7w h9-邸\f``/ 9-8t됀Ql ; - _ȗSb&@*d?&i&["! `[g0Pb-x1 ”2 -d;^A.3G7ByȓVv,S9BDY*/!Y9iO=0DOw:ÇY@9 ]HMɄqafBB`ȠC\@\-zu-<t<0Ub//?Qۓ ܈>B+}^W{NrU!˚N}K?Ҏ['iic*?;rsِF7W5<4tN^*?Z|M~ݹ~}/v[<ݕ^a.]iíC]JXΪj+᳚JحjS5S _GyĈl1$IJC.=t r"|S>hC#p(bLW|[fqs<)5~8~w8.Wv) ML]i_-8_5EZ?6Ujл}mm mM ~iY( e.\%'G[,:m͟ٴloZ|GsS[]~tBt]tm@gJ)Rt=x]t@鎐AwEw!PCXcwIiu_pRbFε'>KZq"ߕgכ$Ǐ' V NA4Kf/_80Q"dW>lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0037-computer.xiz000066400000000000000000000036551247673406200264700ustar00rootroot00000000000000[s8_盙.q%ҹދF" oeKdc:Syw%v>|zZ.ZkF4`maE=^&7O}zx5zް_>1|+e[^r2>r~'<ɚۚpsN;[C/kY'6L GwI8hu{cF;w0a%l/ZR"#X ^$0융:w#eV$DEq, wE͈qb0%b ~a_!c?OFw`"4 B\:`kj^4 x"v&nb?|uj+Pi,}0Nǂt]6Oܻ/ۇ_)27\\H RI֡2l(T!p΋Q(HUA]_br:'ץc9cW@{g_"hAt0op=ret1UVvf,{RTX*!HheB`H0HVrvx@5ZjfDCќ&JSKtfQHG9x .`p%nC چݮկ'hWz#rv3BGQ{76~W0y\,@.A/W '.·B7@rRF,pjA X J" CbTʀ|܌?ײ'q$/D^ÈtþS"?tr;;btС:t8ա<0^7tX9fu"\#ǶvPb"ru) 7[(`F1@f}FnΩecVS-K;uF!O$셃Q)[ Qb{ 'J:F_=^(rdDKbda:n'Y˙.UHl1m䎇R^PɠcԤE=ȸt0vń{[odGٻtI}uN7w6ksB1P-td/瀞ֺY`m4D-=) |vVPь&6J*$^6U鶤4/J/kJl76F8*i+7tYdGu־ H/E/t}A@ʙ}APZ _/~Bԃa_hm}=P{j<zSK=pTA_~`/c?y^~Nɴnclj,8+^w))ΚnfaFn&曉hNDwN4q">㼡?:oz.鼂O«|eq&B)BV?'{4b7,KXMނpya`ep'[2(YKuf0͗ƗAw:6%À6=crP94f|[Un?Z`(i׿6lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0038-falling_stars.xiz000066400000000000000000000043541247673406200274600ustar00rootroot00000000000000\ms8_=%L)s tE#l܂²%Y)OMj%]>ͻղ!oux}^t-y?M:wo_vt3دuz5 gwY8[Ql?uYOl>b]ydcr *;ľk#3;G.`x7?Ѱրޛco{O U;x˜-Q~0}֍KvqxD[q Yl]D{yƎ[Y[Y,0.u|Q^AĔ{+ױMarW}Z7p?z{8vm"*2~v!e;!0pMD]$Ȓ`c Oʅ pp\3#nc2vw څw1Z#8pn7ݦF9 '- @노J*Ηs:gZ/ pi:21ZdsP bt Zx e"wOǬ"Apw2Ӆ=w |-!KGzء*ء U; !Fau8nP0#rh?,9atȱ+$ˉi[72BN Bȍ>yv`*Ey%xINW"< 5`T5 zY2od AK jQ3Lhϒq NA!H;)%@2)፰ =OKC29xzG3[_H%/칎Í,&*-l@I܎Ť,\NaQri,8gF =~cѓj9}pn)"Ԉ^js,W<W*LB˩.rKẜR/:N! yc9! T?;p qB4N ]8O0R7Sʚ*+1rA;{/&"5Wzս]\s\o.ubímMmCI`]vwRU82Ά존`O2^G@C샏r.b޷O;9Q3=}N`x>yRbЛ3}t>ɣC8646%=~gA#F^@MSCĜ Llmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_3/0039-real_glitch.xiz000066400000000000000000000036121247673406200271020ustar00rootroot00000000000000[Ks6W;2mǏ8զڒ+ə DBTIP"kzx.xIZ;Kӻ\__ﺓxv灋oŦ݁e+Z[N!B]9قqaxM߹ 7]: ;=kbgOZV8#]?!A`6xCuvU S(#^V$DԏX{g;E:!2G40%!k%4c=vhZ!b).p2?i*YH%4&*`P͊:qn' >ݸպ2 S CSC!ْ47\I \IuP}7|E1 ╼t:B};u @k (wL9MG S?'&%D6y:E!Y ȍBKpp. ݙA[۵D#?JT2l3UǠ-06vѼF,mQNR2b~r9S)%g:ė$%jdɈim"YRd4 xELe4ڃ4*MDDyvdߢT-\ȵ葒,Č |%&RR{Ciέec ǥ)=yb(*ԁIe$T(Y%]bZHIV9Ogt L F/Zt*jp9054P[RBˠJ xp=@ٴ_H/'efs|Z^JY5xMPJGLVCVhUՂ3 P!ȸ(-@rxav}ڤ9 'ȟUcdjPrQќWWdDDӢBu<:F?tVZHϏaD׀qy^7wVksB1)SQo( P_Zf}#Dzͨ_/_ j nCfDTT[a,A75-7rIzYȑZ"- HS€74$€uȭZEfafQý֤q~mjJQK|-hRh~c@@@;y@{ _oGo ٳ9<kA?N8~u?{N^ͧ>I r`U̪sLu3Y7fidX7fu3֍l&ԌXCgkgG=ڣKZ/Vjon)ǣ5K ra@ٮ%7)yͳZ嫟־_,us;Z/mB@lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/000077500000000000000000000000001247673406200234775ustar00rootroot00000000000000lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0001-res_strings_pad.xiz000066400000000000000000000037171247673406200300070ustar00rootroot00000000000000Zms8_=%6Ӥ%pe. r_4_8[&~lIlff)b}Jç?|!Qmxl6H`6烳~y_&_۠8d1wšLߙm#nFYD6.7Tㄮ6nm7.xM0: ӧ|85" F}rۜm@W(ֱF [_{>?&@(L窬T*ݥȥďњD b%> i6I,ĖltM&@)($K.>h?Gs4"tOCQ8Mz}nY-Yp"7LM١7z uja87B&%-"t&z%֕->d XѦT Lmpjm󜡼xmHyw td~HPvl(`]WE0$p Mh*DUJʢq8Tldf/kB)+r3 6XysU\v8ʄ\yOMqckך ˈ@"?\U !t0RjZap\T'~!5SJ6.Oqʞa50B'4TT# Zaj4WQA G~6h퐲LܚV1\€mI%BY3TI̷gZwmuZ>U*U*xPrM@ )FOZ0Zed\x M+tEiҺp"d~jJD|+w)JfPTatXLы>vlht.dQY퐂ºsn0#5֑gߵFo]P,+MC}+XT>[F+ci6Fˉ+kZAPxD6@;'+kPՆ̅I88=Msq8QjS 'D XR!գcٝR[ =8nAPͼⅶKVW*YR7QWD)ԙjMzyŃ'BO Mu2"Hej.1AJN|u򶃚bE#2_],K0Nbz{ 24֡CЖT=ϔ 95*h3-c~zneXyM(H=@OyDE-=uHm/?HzW.t ÀY"A/)i*k0}_nbR "$DxmhhCAP4iRǡ"ttʅc4Ě8ܒPLFMO^ X 2h1bSuPA0XJ.ּ]-iuHRJicJ^ès)2(\]'ůRiRC4B*1YHZByNykEyGIἫ [IJ2O!lw~=cItIZ%(^p*uˋS]]@uר7}ө8ө:ө9jYDuhpCZ'ܑ u=Y`\lA~.[%JŻzYi P蛪ߍPyc1- rxy9& +${= Ny7j5#wOh3{DlR2nz1]F]7UsuکUxHjnT;uکNݨvF[7ݺQ֍*p`=tՖb? Q{~خqljMi%v_M]9f^Q1kmh/kA B?]'{5r/&Z/iM?z,lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0002-another_respad.xiz000066400000000000000000000036451247673406200276200ustar00rootroot00000000000000Zs6_Ay[J $Knh= p@:M_4;p²%YO%b+wynmC ۺŲ^#"<_ߝat?{jomOysS R}f]8>iϸln(1]1!6ZPq_ح?өukhEY'܏ 7uipKZo'smuDCɠxYOWZHAԺ5|@?&jc?PY~NhI7a01ksצ MG[Ly)=1c'mӬfը6F^*jT[U /\mUjjT[UڪUjiWjjTUڮQQmH*1fԞ/(ͷkcRSX~vW~g4rK/;p+*lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0003-strings_pad.xiz000066400000000000000000000033631247673406200271350ustar00rootroot00000000000000Z]s8}ϯ`$3M:l@v6j2- ˖dɆvLw/M1GWW{%s0hmH8swgKE"/iz<7·</^mYuci?ɝs'4O.1iB6TLhqV;©[c QkIxԝ# ZqЊpHI1Fl0;2x%j;Iw}{YnNX WR"x`0vrK:3e2hMD%YH"gXMa"%9.mSQ0H  }?&X06C5h.`@A>v ܟn9o<0 ɰn<ȩs dbvMu)[8a̘bC(ga_WIG,V-eBU*4[ 6rhـaRV%*vz/p>[&:eD Be߻ӧh&q0iD\ Ġ 0+2!d[f뀒 ʼnnְ ;DJQ3 z,!2(Nk7<ٸ"e!{W7׶t^kX'$G^a) 3ƳPc 'aQuOvLYfKH9PS^YR Z?x5%VYp8"FY^G6#<7+rj# 3oK(aiLD5-Xd'Ye(]Cċ/?e)mR:M=YA 엦(bkWntE[kVE%MR9,kF&8ԙZj`Q.EPbDugbBx]5*{oIjKX7b1_Ӹ{ O@'l<DRqkcdX&r50 #@tdc$%%HʦYKdCE)/$JG&;I[aBL;1jYnNrS&Y5vGQsؐ ("Xa ]C?BpT!ѫp*uj@ڤXעPF㉅ op])$ڀQ~,%IaZ@STC(!QNUx@# 0N9"_<___"h=ϴ-?h[3-cqN.xa=9H~-ΐ!.?X{:-aDC6+6q ;N%G 2 z) c<.mIT"1:&Qv|²H {k݋q=Ni OPE.5(61k{3Y#1573ߩ0QSYa c65cM|x\]Oi/ij5JWhp_.Ֆ&%vCZaF^Aso4\UP.DC=zUNe b >7W)B.*vm7IwUfN4ͻh^$v?)vJ vkpMS ...`hekm^9Gx^wgxogxe;q?7G{qKo'+m=]"CC?Z`%1}]rf7F$vz 'ܟhڟ܅;ꄦCQLB.%`(`$PBRKlϴl$DV+)k\ؖ$e,CA\`ȟ{b"( ~x+O(w?:Nu:wG<{t4ѣwm`ۄT֟*aYY~r4|.b ]7.܇NvO9fkZH ir(P ֝QC"]աG*phUT,TE|yhMUnCxj0!3; 8>[W*.սV !`ԯdNX0)V) (kɴL휊KRuy95:n jKH`^wJ8g|2DU}ԡ9'%9W_Mh-e~p35rp4fJpy)\o/nn ށ`-GDyʐz%ͅ+6IdZ"m"#l> q3NGcwTL^J _+`~ztwOMwJ^M2zQw|Xsc$Gq ռ&iqd=v :i6M p p0N;Ø%u,- c <`1=aPVtࢺ^=jMLm :H3LmY pyVNb)Tg)]ҫ6Z|@yW^2cտ$= emgYsn..ctW^tSFt|xٽfiyR0tTTOT;㩾:㩾9jhZN`t1!#fsĔt^!'k;w ~0\1(_~ߵRk`<j̗1޳ƿ_T@P̫]BlԣV1"3%N0]yRB^t3wS9N+˕qWח(\bj{¡03/"4 xn.]4 ӐsH3DΜZDq1e&*hAdNp$1s8LWL]3lߛkͯCEytkxC:i gu'nSfpqrḇEe[+Rm QfHO/ GɜzbNfAXL Y^K^Sp#X 8ifJ %I;ijF9o|>_^KSoDXlӧ,ɔԆh J:w4mh#YFhRh[ N2SA_5j巕i鞏 Z{>i,e h =ѴQ_I|t|ōU:}ǯ~᧯~-Kœm og3\d޶MqBՍplՍ0Lu#|6ST7u3Ս0LypjTWB_3ƣiaDobn'%+[z,ڡC2*|1^6Ps)uݹf*רWJS?2ߥ`1lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0007-from_another_space.xiz000066400000000000000000000036611247673406200304630ustar00rootroot00000000000000ZYs"7~ {>lo'Tlpoeg.!s&>-4N%UnOݭ9/Z+F<WmѬb <.^Oӻ˟nG7/֟kI|ǡGc ry>Wn[p!Wٞ![l!&\iȍSzɢ wCo: [ϽI<ƽ?ʒ-A}v+ ,.XvNV % Q&>has=m[P`qD~^ASϋ"U]̈́wtN3_7@fAi, |BE2ђ첓S絯GӁ?-_'Ax_uԾ()?@\Iud(lΝ+A~HExyE6D`hq}$Cѥ0A+ι.B,5ԥIϡ*[( Y9X"&<Zgf Tjٻ%/(u27KF2Wұ`@z/)J[.IpK<6vJsddURa<^œ~ KB*,K$K]8豏#x2f'+ ܉В&JrQo6уf.HF*)%  5#w[cX)'Y@D',[tV̔  ݋.R|.&py\, #jLlj3Ө" 15g؂֪SHITѥ9 `)wO͗cq"T;(܀#%Jdwȿ"߹]:u7TذՆ:4(ЁfO8:Ё9nV ɉǸ&:TF C(6{Kc5hj2i|D3mPIϡBʴWz4 FkⲂ$\ڧC\J#I@\eb|ArR?4݂4ؽҙGqO_RЋLQOݪA&9MZ% jHGQ!7f ~u|rsAǑ}Dvz&e #ќ#l {Ki7Y oqS8O #V!\9' å--S!%G5fƶeςl|g*vEFs>Mt1Ɍb3-e!Jr>:Ȥ)(N=QXMl_{pp#_go.e'k5vp»񴮡ղRC5l:kI6oND_hxa=ƾcB:;9  ww)ѢD<@^ˢT "FP2K6ȢTYxg|ZJ-ZJ׭;gT6Nl(dcƶ]z|X {ˆݬU;vlQ- ۾uCSľ=?6Joˏ\ ݿsMN j/0;#R٪+lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0008-from_another_galaxy.xiz000066400000000000000000000040041247673406200306460ustar00rootroot00000000000000[s6~{s& MH4M_4;lS?п+ uʗ{ػ+ݕyw]4V,]7fypov|]4?޼np;m:3'94(w/~pl7''wG[t&\ihSDEθ77Z;.y ;qw8'K4n@/Oe| cB:(Z/YD;3%o=d>u}"Ot&qłɂ96B^8RddPB{+[Qej%dC"_ 4 RսAR-;wwd?e*B㦩ۨ?ߕ_@:挗iH s3+m V.cϞpfѼ ]ĕ"[KT9 \6 ?^ʥۑ?uO]Ӏ1sH33oE>9ZЄqQDh"0pMԠl0SX,`4@p_2ߟ//H!ț{ADsK8S]].x1)via/&EFX<pUr2ϭGi.fuʪU;FWsxT2}\,%1ZݔeJ,)v1*6 Xey8.mmZ il/1B'(73-kdK7iNL<% iQ.#QIA&Ŵ$I94Fm >[q;{s([=[C;`V&(].OjP..Ք}R!ϖRVa͍U G v"nZ)`.!9rD0w^ a$NZEhsҪ,CFy֎c`򌈰N-K^5fBPi6]Ĥ.2 SZzSbvh.=Uz}{-u!v-^[ںCo-ȡ|{C5*A5ǸKZߪr4j6nd=ٳuO ݓ|/Z;~Ovj/k*[]z=E׊zD׊zkn=ѵ⺞Z1_OEt'DowϜ07LH 3zÔ^!'S7ʃ}v,f衼yNK<oqlk<]Ko[bix|9E7F_e0>WÙʤi~ 21-W^f7< Ki(}E(|JmDɽ1ycȔ0}]nB%6DEO hQ5lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0009-from_another_planet.xiz000066400000000000000000000041571247673406200306560ustar00rootroot00000000000000[r6}Wzwd7y&vFFS[re9DU^_߅DǞ&B.chX!?m;fn}7?b|>|3hw_ф»\n@iVO|.w䜻[r򶡜\ȎhMʧuCE&.Ǔt8:_rӟ,i4`>|VC)0 ,\PΒL< ^8 "?Lnƹa 4 i Ge(םo>QÄOCCA܇BOr<0utpbI ~bOBŢ&iסA+{*eM3$@.fѪ F*wٿ Gӏ(u +CQj8Up,H}/)B-BO?]ܝpɼؙ\k+;++%҅ח)\1S3miwID1ytoN.Gx04 0gc8Pff|E/B5w"28>/B` 蠙<@R .| ap7p0!J׉'8^lxkĪczxNdyP{rupIj1^6uV7dCeu]XM(ۺS".WPT2 8>esڥ {djdySr# 4Z"L&IDݯ5GPrtJ3x{9(0_„Hz?KbIst6(Y m]fzɒlIm2sKR.D 4W6~ ݜG4|Kx [5 pr岸%QJ$Q5N%IʹvC"ig:"ܵqгDŽiS@j6V$,] N/3R)gӒƸZP`˘ߞZ̠ 5!&<),45#dTge7ïnh/g f#f/JfMɺu+FWsjxt1}TtIt E2%U<(vn r+z_ei҈B Al,Ė7ExT NLa2X M-eJq* bYj8] 6 ?'\\^^\ب-uss'WX}TwXNi uu;{zr*NiVA wdc}ٓ/]f{n:*:1# (&ﶇP~dfՙFYsBB?z_E(&]Wڵ60^g;MXz~-Y"I.I@IϊfVHߜ7$=?-$ҋz⣃==9<@u27Dm?(!nAH37iTC3cyxt^1 WHCyK_kkR72FE65m*и.VjwDr\+o=.e; |>=i۞+uy2#|'ul> 'ɦT\-hG ЊnJhA뾬 NZ1:w^0]]X'g+|?^)h^ѥK.Bv=>Amsg^k`_=6Mw:,oeW3[Z?rC~I~}sjZ/0V9lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0010-unamed_pad.xiz000066400000000000000000000047301247673406200267120ustar00rootroot00000000000000v6_K<Ŗ_ƖILŴDjȭHXt'x! 6Tϟ׫֖{Wm";t~]w7LJA돝wi<ϑ#LeO?j''w|Σl]>y[Ah`G8qklGxbUN:ݎ'pP!7"mH\/xMbX D bKs覠HIQ 8_?c w^D[ߵ/Gށ`4㔥辩 p 2:?C勞p)z]֚%p845ooxlΟZsҲq@FVtVǞCˍ[O!ήT1mHήnJdwVѿlbwP 澿pr)v#='i9}DeDo*O-ht(@ !wyٳ<!?]<A,֕` x$茁Q+1xz BEOwʹkTHi$4r4r%BZMl"Y jc4l7cKիeU!VK$x d2Zs gJAhb yf9s?ijB"%D$V1gI.݅.$- C`F ;xTJqBXHX=p Oǣ5Nd';Dz0Dި4b_:s;2K3ZyтVJzwSb nR"6 5oCܙ0jpw&+!K1(ZWqgV bEÅ[Aq%ڼXVz bdQƂs@4ЈZNkѲCVYhtkYݯ]yзYQ p*SB|%JI IFZ6J6(+ãcPd\g.rS/: {n=7[u#ϺF^w3ԍ.[ 5zC=Є~u vp=cuhZIlR$)mWc-Kg|.|\WWgWq<Ҏ+Dw ?aheVHCa(Il{gþ|( A褈?T$~"W֘\lJ?@^oyҏ2+яd $$E[631awZyEz{i<5ZvU/ȥE0a:m'*w!7Dk QċjmLĖ86MBI5rD'zm|j_.j0LOk~8Xłe'Z$Km־ZV\q2>wD!m$Wasd|, h+7y~:* uڇ Rg+23!=Ƒ$#[CɶKV"!ks2HnJwٻEoZ "/P.\G47 0gj=28(6d4"XM={p[DretVvSXDl!K__JW3@Q8p}( Cx-o/G(?ҿ=u@lx) ̈M^N->!DvAY ȝ+p .L=Tv+=>ݓqz|okO(t f2g[8E*nl&0yR竹L.LgW4[f!{XCVr ;{d2̻$n?Z8$=օDwU}g"ԑ.3XޱCK_Lء-Մb;@2+:jB%a49NN,'r$Ņw*N D )bt}EnΩd6*TAy Sp#I?|YHaL6l8r餓y|9]mKg? 襱$}vLL5T钇y hb%'`2ϗ߼dÞmxJO^"6ԁܭ%K$)+-^2Z/$Գz f/4hr3W޼w񢦘A5[`z\!c}ҊS[Št38D`Yݯu>n3>98ߑxEԭ^ZJYg!(\bɣ+@&ӭKVܑkL&6AMiYajV[viD'ȡ.[͜9&UosSJi (xI'@GSNҐ)VW00dONe7{5sfpdYEfmwy>ʐ-v3tҗx=+wp|J#ZJ {fDT4Z߷UR$JR%$y(G3ϗZj* TGoc?~O~Ύ[l,d(vNPip3{Lu_/]%X.1jv8&/~eY{i ~{ok~c;- shѓ@%W=kN縩)?dk?x;+Rf%D7JYn4(i&QLt&W3'/^;icHZ{Ix|Xxu( 7SUDJ4uvAWѩ͝+<{` a<7+eL3#_!W[#_Juv}/*9ePWŖ!ia`6vޤmnɋ0{M[r!GLH6]Za\?Mx./7Gd52f8jre1I)׭/J |GgX2z̰CEe/8ʂ1lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0013-metal_bell.xiz000066400000000000000000000036201247673406200267150ustar00rootroot00000000000000ZKs6WȔ33-5ڒ"ɝ $B>T.E %V\],vv݇|fQ?^4,.eͻ? oOnMqI2qRA]Qnȧ_n'n:w&K̅թ HL_:.uƝ;d%~#>w9Gԥ)vni\"&_GUzOc7ozQ7^7|2 %6+VlYb|G~+&]z\Q i704mu8t ,3_KxMl~h6E0Ԏ E91 \"B mo6Rޥ.'}EW[-JLOw RV&-lvȘhpW, gggBC? [2{1@>Hh OYTM<*ȴ!S 'H ^D2+^eԪbBi~Nsh@~"B3BG@^dI=Ҙ ]o@dI#? y,`6:, *K!PE_! O[բabuŪR=AdONً)Y)Y ]3/ h#X*rV4!BJus%%v|QekaĈuW"Pi$%wQ*I>EHk 즦LlhdZp 5C & Jw}ҕ\Oz0,j.X};ySI-og#GF<@mi%TPf:+rw'Agp+NU#JKQ<թD:mj P]WOQ )U31 )m('}|~OFb '*A(rঝ$ Ȕ 9:ݟ>U֡'Е%A#.59; &Ơu. ,xfSVPp͵kbH`f I*VȂp(eS @Y<=iMOShr5FX;%^N;teN3__!0;'{Dc~˚g7G̈$p5]?o_]QK jΈH;y[;zcC?`qLѺ8I^2nDVo:a +QEKK@kqw??vOUwN @oOc a5HvHŃ6<t%|%3ՆޜaP1 Ba75Sq rVO0zm noL0h kq)hW5SuIإ<0XVkq%glMc~Sès/ eOxu᧛à}o8q]Q!0_9 eɱs <ɚM8%Ý5ŬE?G.s:@I~0Ld!tBBSASg˪~)) "1,I,$,l`Bd Ʊm J,nא  6zɆKG~ih:<F3aY  r;:Ws*E.w]"1:>/ uJI7+RZ(m~h5m5l܉a@QmZEl4 ;Կt8*Rns.bB}.a*2 =lRM*n﬊0j(TU7@eM?f᧊X `\{wMmd ^a%ũskDM742-8tY ‹{ H;FX-hX$YbJ"C-X&*jQ$ 8 (SĀ2 ǕaFS2~Q's} o͎S%'V]ûm .2 8/N{=s8iC)Z-U/8et 28\4ͬI\oo$ʥAGq {AҋX UL&@2 ~?,>I3&~^AE8NPPF7;$J+\'5}a.ajr{%/'ͩmN au|O89qcX(vW1֐9֤t7uiZ@ 38k)䥝:NIyR#¸lZ_*?IanQaWOyW.Jy\-V._r^Jv?$k;oM/$[N QtmiU}hY}з0^F g,Ȅ_JOm;>7{g/kS6S6i JXPhsK.vLR5m 2 *Ͽhi͐^PRɤcԤEyCg\IX}Gb_hxoc+Z9{r녛cOe@K F92Z M4qO[xi}nqR1%*Vne'ڑ 3"{ʴ,c@x 1" s+4okmhu?`RvEQZ*Ǎ_كᅬHf/TV/ W?{=e1Eoo+, gD`;ѭNt+ D|;EW4}&Rۉ;ݟL407 H #}Ðt_!&g;ʃzkJ㡜DZ9u0}2ˢ\ Q>wyQ"oWmleSqWj+d +_,|E+c嫴)Dde+2m(mwKPƽ͠h6Bth5B5bJc]QlBhHKۮV*k~X8>+lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0015-belly.xiz000066400000000000000000000037101247673406200257260ustar00rootroot00000000000000[Ys6~ϯPT|33-ڒ+ə/,$koXU/4A4!~$B4(Ila10!2GZĴ%QȻ\nZ!b\j0LǏ[}C p 2;fM$Wsli$ /wU|N3+B$Y/IalsF\mۀ.ؘXr*]fk`ڿoQ}̂$xPs͌΄lnROIF4@_ȺlRJv1 \RX2HuBܠɧW-d,'_a`xSЃ,/x}/q@@gZҭ:4Y#\OLgq$xJ*ivkVK!K/V9 T a@ 1zt)o# ~ߍz#By LZjDЌ&NӠ Ҕ+l"<⢈x")%G  %Г\n'avAD͖!F3"s%Yc |&pyB78;e/kRRiXv>mqp;7 `a%!5f¶e͂l~%uTosIi }]L(DI'@G3Nӆ(vGo}|_{ppncodы15tfpre~Z-M4+^lH|:4/\Rfu ,qFUNeo)8veVwf3 Sϡ9͉xcmmSnzZVsV6jСny JC}(e8ч2XFj\LujP*Þыs[ؾ-F-z-njO=!TV?߇tke |KgFqLF1Ltl&Q6(nDwS3'>L9cb>گ+f)i@NեOM(5#R ZAȃXebPcy`g|RW%+||kCɠg_r2uO(dcƴ\ 00rGݰ74U@aEt'roΏͦG r?7w$OU,H2o4lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0016-sine_pad.xiz000066400000000000000000000036241247673406200264060ustar00rootroot00000000000000ZYs6~PT|i&NFVS[r%9C)2gҎ_\,oo}:- B{W]ɲ![]uǗO>r3}0;m60+?\u]zi(8 [mޕ8Z31-ܙXRuptav2Gq?g&zNܜgR"xp8&Ke4B4"n6$@ vYBXrI,aSH\! Πпcw^F[Z7cSE5{s<$ ހLLݏzTUݏ?ˤP?~}Zg.l(qڈvRH$i=9d~b/c t}/5 !;ٕlPL)}W;GB6gS7M"*D !mZ/w=hF oq3{⦢7)ljf 6lj.*&78a}@p^iHy0+2%E5I~ѢZmTrX@3v7bXR!P9M\{F{t b;ʺ}’?K~3n=˸(2n wEyY0mկqXnk6ggoCx[fyT*BUHT9iuKm, Gd5T(ɋuJ+4`-uacQ`{MٺYyꌃ5ZTH祅LM[URgIx84*/ѵپ1^oc0! ?N~3"1EoގW6i*ȷt(YǗ(5zJViaj1  { ߎgKaY vlzr7O$R}eoOeuGqӄnDywSg7s4 sm`:'ΊpDblG_SB; B<Flr~ cr|rvGa>}0'_3DcޱZʃyI, -G듯9ؘ1!q _N36-A*Q"?!Sؕvf,kU(Ve5 wmR D2Qs!X>HWAh3lhT N)7 >a|8F)Z*!8"|>W>G[h;Z/o2q x?..zhp4waLkGxߛU@RG[Lƍ- Fk kt؆QZavǐ$EdؒZz-ߟdz/Uėκ@d4)IZ}LAjx`'ב.W'D:@K}1yHd {!w҄<]K8+C1q:(G&y`*}Lor A0PYTw$Sɲm 40Bg`SK8C^?nwVL,e%Bt|6]ir!`ίո~^р@Vtx"Rl'!Zh?v_+#qB|>4@IfRRޅZ Uɵ` E}[_Ɖ}InQ? dVA0T ^= 85B*RJ!. eD ﯦ7ʹ}:.M \MexmjmkvK.Q,AZt5CQ dsKZ }.j?@8BR~R@nN+n*kW/9K{%Py$?/_}M)+(M:;NY>,f/SLeg/S6QyU-y8R|1.*1IákުkaеYoZح7t-\ }^' }vC×rƌgۭ #zÐ^!&~xb`<S!坛z FRSa}h?P^I\jO@D]M3ߩj2(imZtz٥tbFCjV/0b֠VZZ *P+o.TOX߲W.@*ŊeܣI/;ul3ȅ nOB`3BX405+ ktZB9be$1ּTjMQbh]tǝQ{M3hU8G+iVE"lMCŦV7jUM:hjASZ7㠩Ux8e[?{Ρ=lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0019-bass_pad.xiz000066400000000000000000000036501247673406200264020ustar00rootroot00000000000000[[s6~ϯg\g6١ 2M Fmjlo,\_rsw>>?ֆ!˶hn-.ۏ竃O܌^q&C3 2}.n[\r>H< Ȇ8bK.;ġ[# ^G6L:ގ`4lu_{>z{i<+k<˶K a5xeUP(#n$@ Yc;!2[4(%k%4&y8cKM~STd:~eb cjC v>uEeeuGrԏƒپ-z-7Z1zxAZyiۮI ݠ|Gbw;P@3_u媜's`ڿoQ}cxx"N-Wb0Iy-n$:AEcZgŨ KўFA64T |Nhi)AiN6? 7IW4ľ HsS-7d۔m?]GD8-ز؉Nʘ-tK Z8p}(|]~7.G?ڿ=@x)ỎL S/ Kl"l⠀E SH$8LꆞL=BF{˷'ExE4?QxlT1:Z\k&X@pV pڽZ yް.Z/e/qTEIX-IDh*^!ip,ȢKr@bkXn?oe8!,D[Z>B Z&UkAIe+}ڡ!SЖjb{Ϭ'եê.COatO89rdw9**G֝q;lK3Q2m*R⥜:EG~Iz-ønl82@lwkZ5/mjѤ^KSSdg-wSd*jd4 JZihZ!RQrO{sQC'Q@ _i(78+8jkO&^n3IzV =jwhG!z4{8 =ZB7hC65h冁͟ˆlˆ=gxgپÏ"*؇νYO>}3U׊zT׊zku=յb:TO۩wwa07LH 3zÔ^!'cWn҅mzʏRx-R.Wu9'yݹf*|R7p O<;Wr' <lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0020-bass_pad_fat.xiz000066400000000000000000000037171247673406200272300ustar00rootroot00000000000000[Ks6W:fTΨjjK$g^0 IHDR!AB| @JcX,o?>||֚ ˖}x4kYw݇nד=uq< ýL߁eWϯޥsdM[raxMo=xقI;V;{ߛFc¡c\<1,D0ٌ8Ǧ)@) x\?/OmߛF-:MuW7_nԃ܏)+E3>dmΑmGgBѻ9ǽ/=#<'Vľ{hbJ8[_Yw( vmV$kmCgG0 ^jCAM`DžQ CՍ޽E钸w\a+Eʶx1tdvH1N}l($$`wΊQE,#LV6LT L~XVcs}ԽOoJ:XB/ ^a߇%N]ePAZtN,;-˕1GKZyXw zOb <@~ ^ɋK >==g!!<n&S=D\&# io%>fqQHG")$& ꆞL]䊃A۷v{$7 +frߐ#qŻm l7䇧]\9VQ{`CV y8_d*"ȤxjIYliBb@6d+WH: " 6 tA8ޟ2" -AI-TӵBN]e[',}ڡ! SL5=JT dgVaWxҡ'`I0nO89rlrUT%%MRY(g`dN];yVSkK9u죋#$f.FZq݈Zqe4u׼Kj+%}OtEE/zI.In>J~fr>EI6ꍇЫ~c> ׽ {5 >?i}@*#Sy @?3V(nhR5@Zρ$&P*Opd !a17q)'O CEt#@y;Ŷjv6$+\HI3R)gt+?Vf/tyN 5f@,pcW8Zqj@Kh"lv6Y7t{g-BfddhGw,@ޱeBjYR`v2.J3jyt/-(]ҜA'[mǜ*N2(hAg&J.700C:]b$'R]%)(vG{a>J';NPS=#[1g.L#gZYI-sp7B62/c3=wx0r'R' dpL miu])+}ZB NT_jxgxF l ~Ä0#7LIr>v+|&]'(.!2~UgOخoJ^p5Fo6 +uo!Ih[_g&;<lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0021-synth_bass.xiz000066400000000000000000000037401247673406200267740ustar00rootroot00000000000000[Ks6WRGQmԖ\I4` J_߅HG']]o.}Z0jf-0'p)_&wOL<׬xzס9wGC «V%P&1CୂqxE1q`n8zNÁՆ߿v=uzh O8Uȧ.EG0>kmT(G?BK"">a|Z@ ٌ8'!( 9x\OFkhPۺdLR_n@Aubuc;y]K6u96ѱ|ᗐqt}Qz #VבEϑ-15/eւ 8x!97b@<7bprzIX,!'S~Bg$< ⥺t:#xbfVhP&j2QqLY.M~# Y:E!$rѣ@JЃ\yFhv=,{_w`[ޏ ɍm6ˇ)?$?u./;vy9"jxM 9Z.=QdJb !6f4y+b!109õK N8X@-e_+ Ln7RE\c&~a_j!8*IjPIRw*.:972em!CP*¼qZ8lC*YG?.6qX9,9NOmb96wc5vECT6)(<ki!kɫpkBH'ZA3Wj$0xo5\e'KBS/y{;(1W:Ѣ@_ %K3{KbItwIw{dfvMwSdJjx8n J 闪yؿ5/mh+YPLQ-ʚ>RsYY!PD4TS(4Zof^!$/syQ9TN:Ulcfk=H¥(uA*, "ˈN=< n^xA3*eu%^֚S( 24@i#H_N'fzPoze-Rf싒u-J;^-p;@w_'K FK[LJ-8 m:KݯX2[lzHB ?ok[ŖwRAyF :3utSF3FRE#KN%L:KuYD;'rqQ:pп_wod;m{dɹYuv7wh;J]ǤA ߬-$YCe{W]tZ;VI*Rݔ*Ѝ-o#fBX߷UQ"K75eO+PUV~WpJ_ttOGeHhBtP (=\QhR'}W|tAhgLyUgǯS?y^~W3aٶKmBӍpl֍0t#|63L7u3Ӎ0EpjfL A_3;ƣicD$\L.HVz7 OP_fKqYP*v`.qv\49Y;+unMI/alˠdm`bZ_vܤAwl>,l .W|(TC lOx3 ~Y<EzӒ3lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0022-synth_bass_2.xiz000066400000000000000000000042401247673406200272120ustar00rootroot00000000000000\Ks6W:TG5QmԖ\Y4``Јʇw)>pALXݏ-@y^567W'f9kqgq0:>k{{׃3c/m7Mq;ѕn(ctT0XFc꛴11ipՄNGf0MƍnHnp65yӦ_-NRh*isTfd<?B9fϙ)uJőYx2$S`I6.7oM5ͦnYbYH,ٱ6zO} ƫ|>1h70wCvkGFoZK&&#IAVQPo-A'J!ޖvL ]u(nTa2/`]$m'@Fbֆ:o$`z3.]CH>(j2@=8Ryxhhwuivf\Q3}0GSu)Iq[Pi3-rWX>_@W%O+)h(QD+ `פ[ʪi.Wv D15!M9 /VĴ@d.4{?k!t#*RӌCi"P4#U <(iA3j&ni!zL&ނmL@nCDM|7;5>záfQb6j&'s'k&?pJL/6_dPvm d$TVo T>!}݌ ;zT3 HhGGwz艘fA(旝= >{kʎҤ )ir=㚿>y }Spk_lr@:Pu]UW5?^z?{~ TO5gzߚxq?cD$|&jx1nXH))j;on2SwommXNNr_v~|/}8K ߪMcDם^Gp?k91#b*ءISߺ|_gS ҿ?.{h idc~'w9$u EgU$d~DdOxC'–K(c,JHF\ɟ[?YM&+wa2.e?X7`@X0cF.yq{;.ӳ,wuLw>ր9tk-xhdݭoV p)ZiЂ|pz.rY!'QHE3#p7*lWlS"^u|0*<8ΛF52v0nl<9N/#2;uST417&6h7^;4aOA#Ҏ+H# Iɓ2$~R$r9¥VY3aoEzDڅKd{dr/Hm4C 9m>MCRCKl|3lSPĴ6 22%q,PK8b!M[cHjj9Q(7ĘZC^w)et@Yz{vj#M\\acP&\ҏjbDF"ZyvYG$RPcd eVkbYUWꚨէTu=`gE)ï_VKM`5)FY7y]RN/Sl7a$^QbxqC9#8޳cRiO0H1. !2-uҞi*A !zY7&WoKSIe],y.FKÄJ~sIlvQtj(v1d6d;ϻ#5n-Kƪ++/ʖ-8yot]Rp%JN2^S E#-듕j#׻;TzpZBj,lk]h&uEi_'܆ʭ" ;6]bEFER wB?p vcqX[KKGCt#bL8aȶ9v{6黴=N͡tW%n5*yzˊ^>4=){ <F?{YuxY=}PxhR4VsVXjکnv[᳝Vm۩nv/۸S;Wo5\w|C!7Hxv~׸gJp4,jsvӡź'\'O?BSєDuڛs~>)^$:eN㥸0X쉡_T4^A~v8`Aqm,Яi}v\최g״Q ~MdK^q^m f .~YyO`F48o5D/rl> r:_>K57&]gD2㊌4lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0024-pseudo_doublebass.xiz000066400000000000000000000041761247673406200303300ustar00rootroot00000000000000\Ks6W0t:SG84NFFS[re%IF,* *Q}| @trK>{$hE|'p{0?;{{]:9k ýߞ?IoWϯe ɚf)q8Gk} C:D7cE5\g.Gy&Y${H %QRSm? ~uQ5 <.s1qhQRsY_ .rifQf=~Yb,6+Rho?XO|1_ \m(P Xfq.W#݂!!f?b&=¥;bSv&=nۃWe x5m7xȠoTxL.<Fpp|< sa5T2r S@F&3VKbc ·DCS3G,q XxAn]RYK|6hr*q }aGDNÈf}U~o |rՉ>zвSЦjb B dFWîCwaT(r؇Q9Dlc5,~E8_@T6 CrJv`Fn&*Q^ ^ʮsmbG:3XoHs0;5;𭜟" ͤ!ҥV!%[S.gJ6mj<䥞$8z`ץI&jRg9)FprjTUh|c>Nǧz= >"GӶKQ[柳M e\ ބ1QY.PDB*)QZRo0Yl !ya1WpY2O2DӞJZTlQIh(HE>Ho6+@ _Pxz٢3 OOʮ[m)#hݪA 5{J ZL  lW$>)nlٸd-gRW&( @&kF hU݂s d\^ V9@G/Sכ4j _̂l|!uTotG&I7*1Z0C8]b$'&R.A(@;0 Vmg|?]N'S~v<5]9vU5#-1>b\DjhDy;_.3N0ol(UG]EmO" "Q~!i(~ձ铄ӡ"*-uwо3A]wNQp[ڬLm:Bcu q_`}J̒fJ Rk8{潯;l/lY}ik$;!k$x\H5񮳮>*7ažӝ~<ӏhjΕ72 ?~~ 7M[WXAhj Ѥ=s=u恬[g;Yv[u;֭l6ԎXC/<#y#> )}G0:?yvQ)LdOm xKw<*,~B.|?L,Mlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0025-synth_bass_3.xiz000066400000000000000000000043761247673406200272300ustar00rootroot00000000000000\Ys6~ϯP7G,騶hjK,w``وC\i%Xŷ@yWg0?=k_v;5=vO߼|vx=,&sϢ!R}{Oxbɠ&sg;鼫(Qe40igftcSsMU:L/fb2vz_F7cr=ƋqNJ۲ <  ]E8n!sf> #aE1F-̔H@<?S lǼ1r. ̵HIxF<6:R898]|@!*I|f6]]_NVYÓ ļu[3CL;|$0@5 _jXG@`{>0 46.&y3u+;)<ޒ4Hئd[)) _vHsC9Էm-=P|xzX,\)CBG$rwH/%%tbϞ9e䊺!&]#qH@1o`$CR9B?C78 Rv:0Nj^"ol遚;&P%< 5h!ȒK]4d_M42 P-.{AUЧ'e|Nw4y|pQ{f?#%"k+p*NMzCdD.U%ôRƋ< حZ$)e~DIpRbw%7hzUh6&g{9 ~\;'8 oTNI- mđ'Χa(k9IP$PކJ !{ Ckb F]S_%} 0S)USYRvQ@ALH\wk {ޥt<9\*;oV;j% ,1N yUhE3Z`e2_Y;N9$ov`ԤڢET^,*Y6/tH@gHë'<X2!U64(0;h' $9-U}^Zvi0CR[Ll}a"pwYRG@F&KDGEס ^IrQ>:4Vm'~ͯf?IݔFq}){ɹj+(%{#>^+Ұi_9[*"alwl`aAr D\ ީdoro^o/GJ,+z\d1E 0)0-L>`߻l-WPj)z['Qjye5qjɤ[eM{tK )HHWvI弎&G-祿R\7gm% 23#WsrSݘh+Jҳ~5LNzuqpP[B{@zr^O.ٶg LR{J 3 xj/ _N 6qx_PҽQ{]^*I4S/>ӚҼWS,]k?L󍜒/Թ4:;S쨺6u#m_7S盩>iNT_N5QZxx*ܸ_0" Ib>|`|q1>[WCt,P/iRa uǝi֏r( x㿚#Rlmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0027-funky_lead.xiz000066400000000000000000000037371247673406200267540ustar00rootroot00000000000000Zs6~_з1^rC 1 E#l`ewe[d2ӛ ﮤo?>[X+F4Y"jt3Lw~uC3 ϊCCWV#>9i9Cbble8r5t^Q[8^4`v8'j.o;=r K V1 g*DxZQ?bamQ(!2G4%!k%b In|xSwUo0Dx}׳Zf(q:&Ӳ<qt]xQzB/goq~nmo߻Yga YK(U#gtw! h A2j&ݾEݫGn tAlk1nuZI6uHȦ>z"3 Зy[])' VQ.77hu0%lcsEf>jz_ LR >982vECje;s##;;cTZٙsr[c<UYnC/B컁(Ba/͉t]sn& -S< h.τo%>A3 B($XQ jõ_Г=awbS۾؁=δ}[- ѻQw+ ͜J`FQL9z \~.iw*ˣt-RF,S9(W)ON?IoES-sͤWEJtd]WK!K?X/)ڨ;ڃRfUet۫ا"o^罐*T-'q\+: 1c%['$&RӡTJ/+"+$1;˜ CAuW 3ml$R`t"%e,8/ 9`"NN9{ܨp%Csxۭ殈.kBM4Ve|" = \OZk5.{e^Z*Yg"(cӣ;@ӣK F[BKUm8M  \.:?cڲڢt5y'OPCoZm[Ė3ʠ,9Q2ݨhF(W[[KF%^N:KuYM[ZnPVm ?Gtҿ7-[k8L-{7i<'K5쓳O=Ql"NQUihB-Ih'Q ٢cPBd6#4Ƒi0J |_ l 6L7 5@KVH+faF ~V)OF> 4@d]vF ᒀ>)C(&P><7\eM>M0p.OG2WPru/qV +]?B s#C2vv&Pif}fe*gy,G~PE8B? q0]ʋ?G}s7`!eYQs484(o>A3 #x("@R".h@ az2'X_ۥH{=_![O, 7< Nm;AY$G(8_Bd"t2 _.h9ӷ$BucGغ AN* Gz/>W5I@Dns|P&:^=7IOC+qLM"GwdgDZ>;}z]Г=awac9wc(UAWk8UQG@:>>T*l'!,0F`cĶNNEi4?ۻm=1[jDžKErsY\~E#$∭|IlP)Of4\M*Gp ۜ[EoGj弹CXmA++N5\G>h{; VY'U7OЖUp:g4Bl-N]] DotUK7JO+ԡPQЗZ*]-TQ/S?z;/S?yzk;~\bFr%Y KLY=ӵ0Xt-|3] Lu=ӵ0_itgv)aBB'|)BN%OIŔUC[ʄcrڄ?B+fөŊ zJ{gnP2Q/Aj9 j]p9嚦rr>5OLQȹM4K4Lx"ɶ*Vr7'fےC)%$G;R_2jAyN]քu6|ÔpK8|wm@ӿDEZ];] -[ܱ凅ΏlzEiNUXsY $=eO 8Cx.lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0029-synth_guitar.xiz000066400000000000000000000041121247673406200273410ustar00rootroot00000000000000[Ys6~ϯPȔNjˍJr &! < $@$EG3z.=>.w>>5˶pnfe݇_nF/sItׁC ߊCn[PGĜ>YS1y;'Gq`bzѲ }o: [oI=ƽ?+r^gE0`:mǬyo4D4$yG k؂MLfV86MB5rD'ذp.ܯU5Np*4 WyDC$Eleunk5S7 pWg+}5^V [V.s6/WHÅd:pn1l\hz=R17!FiE!wQGB~Z'kMÅ4ߤ*et SaGJ0VDa ] ws&_OZB@"D3Ǜ_KӌBZRÌfZhҵiAԋ@`8\ ]H+˄/V3<-Cmc+F}7͉Hw3sH#l}7D(c41k'8@0?ߟv/.VqC`s7ay J/g.Zş[02b|o$bY-l咶Bu"w)Ht qKYZ0bϭ -lAJM5>|wJwZcm&0%С@ 4/Dj谪C?0v z rp89=r凢w*N D*bt}An̙ˮmWi5ʝ:NI '\)}Qc[af8ϓMetg@3[Ւbj ĕV.j.2卐B5:Kȟ6jAL_izp;y5bhޏgaˑ>jűZ9kq_:'}f|Pq#-ً[}jyʪ~kεxtdl)\8r$UՆӠ PdܔH+vBsfEj-  :̙ywRAY :3uTɢ|t4( 9bu s~֡So|?MTD=k]3s'X~Z. eCI_X+?Z³MpuRmoη3hђgTioZ<">v4a8ofx%j)Ogh%JO=f4%BA MUWÕ:mixNvm+z-挮C N'bd5V׏o[͔IjD8Ō1I1S?e-SSmkYe e侖g_o޼ٗ־$H:]?CI`HG[z6{c?~ci*Kfl.zڶ/[dmjngVnD7fu3э|&Lκ[He[+ibHZ;Ix^xҮ ooS'MwBkQ.wgwp'DK~3'7UF O|I |;r#_A]gȗarȗWS}d,q!'올*s/úN\k_cgW%k.0a-qL+TaKqw$j꠩_h.:x+R<'9cF[܏:4 9lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0031-rhodes.xiz000066400000000000000000000037011247673406200261010ustar00rootroot00000000000000[ms8_{uIǗ;g;} j @[ $$LʗjZ.>w?=Κ! |87:ij}zt/ף{;$y`^R #]2A@4)[p!m ):8Z0`x3ѰӅO,t﬩5:vɅ'R"B/#lۡy!ʈ BD.XͰp DsbKs$`qEDඋa|]08$ܼsuԺP8WB<<['kýΕh_l1IGjCF")ewZxbIL b }&_J@Ie>ץ$cV 3%d۔m?]E@q{drgrJeʘ-tJ<T Gm`]!z h%/.1G8~nG}7oV>婚nh.F!˄BA38( KCYqI= KuCM>rDIWZ{r,7 +$w_1nnx_im[y,.vg <CGj/>ҕsbR4cw,VI|! ĕK) mcb"ilIZ&7ckx 8E3\I!AHPAR ~ΠTҭr(EW9SuC,z!Yu㸺pԕoPrhY\ܥrY[9}w9**Gݒq3榬lRK3QQh{VP]lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0032-rhodes_2.xiz000066400000000000000000000043131247673406200263230ustar00rootroot00000000000000\Ys6~_þ9c[ި֖IN "!Txi6#W9 _ h|~n:;]u?YxOWE>fz0<^ȦwG#WAWZ۱9X6 S/yYJypAV ??ab:=%m%~ٝg'Zw\?`E*SlY>UljyzY#ˆI3CYwE1˹e7lUAU7/FǾsgvd-̣ ^$q%q$!9㑯hKǢ;̳IK uAVo8 ,~FUVqŚhxp7^<W?L@{K=78Gt6D/ncZ8=Ekȑzv{+, /QfGj`[="lX&#1:ffގl}lLu\u~/6DvX&0 ȝ7`iB0RiHly^׃ x7T+Qf{i+`4 0 |py93WMTy`ƒla/߬| $ovD!$i>pNImC吖Eyb2ߒ& @1/Y{/-!#Idjt4K!ώ-lDO9EU]8@ K2nfJQo x"v:߿h#> .XI(ںg;ȅLa@FI hĞ$*Qmʮsؑ45ORI@2Q>$3I/hj僇ÁF!X<}ļd)IN{h$m2S7%OA.Fd8$*$4G_7Nףz9 ƞ: ) [ނ#v'#q=R >5IP$(@Pba {Q'pط?Yb{5H"y( L "A rH/_4ĩp%hѩ9K*%$bd'%%'SK6MUxC3L_`fS_wzNfA~wHޫeU%zLwk;}-SG2!U6lQ0`u ubrB߀WmQܥ9POZEfe+(_Y'9ܨdYԦ/ɾA˒d!?@q5?ߓ)VXs/y^7+iJ<#+ ? RʃV8wɬpg4&b=J]qdBPoKr2$65>,x= p4sZG-MN{Sѿ--9w G5@ Gpt' pT!Wpt.S G[8jl|Fg\S-Mt65}iƄ'5bBDhpbOqT\ujڤS*|qTµ^A +b"?煎UKfz^D|#nҖ\m}T͒u0tϼ :$5B͠^#Lu#TLu#Lu#4LE< Z/TC _u+_'x7\7\9`|<_(`t{;^(FI G0 T@wY˽W^~Glmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0033-80s_rhodes.xiz000066400000000000000000000041671247673406200266040ustar00rootroot00000000000000\mw6_Ӽ9MzXB6Ȁ#l܂B~lI,ㄴ/j^HVƆ{M ;x|u.߼zt5toz3g798[Sh?E_\~9ia}dΛrG *;ġ#;{{/`x3Ѱтܛ}oܻO |YhZSh2YsTFȍ*Dk ^/*inCh|Nl]X\1(tq­-wm˔TS ?20o c !V[^(YeزZvcE~ %ڮ 7i2]`ӑt]7k{ |ɦrʺ`ڿkEϖRS%3ʳHБC/dtQjA/ N*T85|NU\P2lԻL x/]lkyLL Ym?4c^ X8=Fbc'r+LY,.u|QCc+sm`W CZ7p;x]"*2aF2!e;!0pMD& Ȓc OG5Xp!pCʺ]v8;n CqK~H+k?"&W@p`{vVkk"C"^k|9ϕ hƫҍbmg~/HӉĐ%6Na/@ھAsH%,@bkე܌?W2Dޱ >Br=e+;u`.#Sȡ U9{Af7ŃҸuⰁCuȡ]fqqzjY:r* " #oVAByS6RC32O)qDL(/i$|K$~ènb؀$I+)3cᲥJ1҉9[^K"e'Չ7%gY.Ѱ7T**4K6G~rvP{nM-pERYj5ޜ%PTRVĕ7,QKk5$A5By(%$ZDC@`س%Svytf 3_Ԕ$+\Z](4HAJ9Og5b# zCYx4JoVcI%5R ́VLc*$FRî)/]AFQ ,cTQ>9ap{$$̅˔^4W4+.W暜dɸi©S(NJ$*2;Y*m^ i  `+3[_Ƀ2 \G?FFs7y^G.$mǃbRU%.(V[94mF=I)[Cxkj}pn)"Jf)o,SrcP)x/wIJ}چmyRYY)y|:V*T(T4WADê&ՔFC<Mы E:V&my\,o O/+!Gv6>.-LǢ098o|-ko80-ߔ;Xᯎ{E eAq]6%sKP 89]"YK f2a0RXL)Fd:Q*PgwNZKT'fC ntCwEWp+9rϡ9ϡPqh,88oGyHr!V8x-?E^#? Ճ"4&qK|i++h7#{/l4R֣XXqO%;$2+.¥Z.S%΄Kg4pؗ׋Ir* LU>t^m2Gѕ&Wi%<^ 'ugԃGQb42E"oQ&8*yre#lŜZu9JMbC!=LJ5A>f>y‘TdOj4N΄$vK&6hF)z]cOM`wegR$骁D]ia[ 2c6y {&%W}˂&D[,HzH*AL  H0_& &^-MĂ M~M~K/E;Spwf(7h=U*ywi8]Ri)w7t}S.=hPoK^n@8Ʒ:p49/) Gjq59ye 5JFOL^9kFT|Nϫx#]K*Wu- H-|c] Xu=ֵ0_urXձzcG{4h-أIo`x1jQj f(.3FD{a <\vǶs2&+5p3'w1wCwF/wmCwȐ%bu]'%N#^,zѯrܘ <^\%bCP7𓼲}YHf 8yWQ?lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0036-organ_not_distorted.xiz000066400000000000000000000037531247673406200307000ustar00rootroot00000000000000[[w6 ~ϯԑ֤sgNϺZc.֥ )46I% >>[+mM<:eKwhi6yǽٗ4qhb]Q9eO>9nszdM[8`ːv}kc5ŶvU &nƓl0im/iu'?{-rٲ3IHW~65ӿy&(LBKE#R9Ox5{1^\a>G l(PIIy"T'"< ö.|<3ӡIe ]aI) ,#5B RED=߸ؗ%=Xio0ioJ1B,cdkɶZuD`ٸ$ïhp\تAZK,7KY&^/q#+@$`5yLdlS\^ Vasa/-}aOAo[l;L\牔yP.T (1dтz>"]F%8t$ʴ(r9wxOx4G=MY*9upn';d~̏t_yj:d#yVP( {B5IDV4]زQ9H&at ;oZی٤:왒\- !R7o߲ *v JuZL#eR ʾkѹw򓺥)0\P//TVS_4hQԿ68ӥZh:T{OG~|]lbmv2}iM{u}.=ho; ߽ݤt|hr^R_pDO*(=92yg/]:E0z~bFh=/Uz/d]ny!ZZǺv뱮zka䌱7c}QS뱆w{!=G]Rˋ[ƒM7 ϼcƈ(]򖤂]w" >XN9ܢKRVۇ̽߶|8{ >lmms-1.1.3/data/presets/ZynAddSubFX/the_mysterious_bank_4/0037-old_organ.xiz000066400000000000000000000035541247673406200265750ustar00rootroot00000000000000ZKs6W982?;3-7ڒ+ə DBTIP yƝ`X~]'aHр]ۣmeKq|{xn:xzkfœۿ=1̕2~>vۖ#c 0$+nnmG..+ }g[gEa;G0ġŰO.m?!z@a97K_)G?BK"">a|˲h"DS*{$q#Qfa/åHwwiH [e@ggF-h8☲H~C Љ iC!YI )92;SyvkCu}R6Nkxe~T7xȠe4L, {ھh;ͅ&9ZU+8_Ld d \Pcxjq=G n8$> ]]+dvۿ\xLܹМ pTԠwApNJءe;ءj;%ό'éС;`E0Y9NNG"UD[!wQU('Hȍ= ٵ9aM0-Dy-xn'$fA ވZs%I+?iǼKbޞ%&|_R}p#Q23Did jh J/uͧAۼ`;٘:>Wfi)y6el7r'SsY\QD lPIiy!4'*B 5qi>O8 "Pfo%۰Z$Tr)t!)48ҋ%ؽ TÃupug[* bh ћ. dZski/pb#l WNtoumwZBY$6鋔u)$WEs\ PtR<IgNACP\3G-Җ!-:5xzb۲gN :7ө"10KS@INM:-J\N8mðxn(cgx? NRv.z#k[2K2?~I5̏P-BVzNme~b?Sۛ< c 34ZVWVxZ5+.+:Z5 a~ݱl(ޮN*\<6/)͈yxrEcB4e*}*juZ֦$QZi*}yvL<9=CVA9BpxM1k=xipНV{wLpb'ז_O=}nmR('~V$DE<}e&EfU85mJIexj&$=/0@뀺D7U]'g0I= /w4)v,Dͺv|ᘐqt}:7#E7ENoV$IrϾ8\&"$4=sQEݨ?qZԻNKZ%r37"BC1Wtdv(@ }%3JHVE*a^m/Ty-?&\TUDpnme&%$c*< 3%ε\eRAp^t3w pىee2J]}J+/M03/"4x.5G:|vYH9 [U@EfA-d8☲\H3~+ YC!YI )%2 @Г=y^?vocF#D,Ҵ/ SSn;eM\cT|M!\:Ǘ$A5QF (7ZCH_. GAR;b[5;ۑD U-.!0% Gz zx8 nxB#f0V#)FALJk.͢, %n]AdI:1XNFA{#e닒u%,E \P~<2)Uw,)u2J*Wdip^{[?&eP˳|{|u}[e+?/^Gxo~ 0wki7FXjΚnf᳙Fmnf/S3WS _vx|3>`Joo_ݝӛR{(gbPa`A~hwbڝk6[EOo?E^m}bb(lmms-1.1.3/data/project.icns000066400000000000000000006206471247673406200157530ustar00rootroot00000000000000icns!is32ZσɂYǴ Yll<6CӁ sjT@,>g{n$g|n ߁ mkk$:܁ )luE>Hځ `}`eفևց ӍӁусЃЁσɂٱ́ ɢӁ ۝¼߁ 洹܁ 婾ځ ǻفևց ӍӁусЃЁσɂ҉{́ ⒘upӁ zhoؚ^ךU߁ ՙSa܁ `rfځ ᒜ㱀فևց ӍӁусЃЁs8mk@il32=׉ȉȈ ʇ UBˆfUo52RɅ߂Gfij31//sЅ߁BhohlH40/0.2څ ]ehnkG팀,*1H gih[s l.('&kk7̅#&&ޅchQ5#"مchQ4"!ׅkk:υ" !ׅ dhhX_ہ S& Յ Skhmf| t)TӅ $,Pco{ s ;JJ҅ (&Sidx rUFFх A0WlJ *UJJυ΀L{K΅̂̅˓˅{sy{sy}~kʅߌyyyߜDžތyyxxŅ݋yyyur{ŅËÅ׉ȉȈ ʇ ޝˆձɅ߂﷬ПЅ߁Ҝ̐څȻ ê 쥚ľׅ؇ƽޅمٌׅׅׅ ͤ߁ 埥Յ ҹӅ Ⱦ ҅ х ޚρ Ίυ΀Ę媙΅̂̅˓˅{sy{sy}~kʅߌyyyߜDžތyyxxŅ݋yyyur{ŅËÅ׉ȉȈ ʇ ہtˆ鏅uk~Ʌ߂~tpojЅ߁|zmknnlmڅ䆑vakjigw ǖ _gedǙrӅab_ޅƔo][مŔnXWׅęwԅcUQׅ ĕ݁ WSPOՅ x SOOSӅ YZ MMl҅ ed KJ~х vg{Ɓ _E~υ΀ws΅̂̅˓˅{sy{sy}~kʅߌyyyߜDžތyyxxŅ݋yyyur{ŅËÅl8mkxEegGih32׏ȒǑ Տ Ž čƌcNŋs8o4%aĊ0]oo44.#½ĉAFeejo5201#.ľƉjioia-022-0!G͉/_hojio;bb!11,/+*oˉ4VgmmieCPO")*,-)%%͉ Enofmo[5 )#,+(*)$͉Zeefk9 )(''&(͉Zom:_ c''&̉ZjeBҋ $%%̉RioDҋ %#!ȉRioDы$! ljYleAҋ!"ljYom9lY!! lj Zbffm: o" ʼn Nnofno[Eԃ .!!%ĉ [kfnliGɃ  "PHĉ "6[dhoHȃ  8RJJÉ '"$efoHȃ CCJJÉ $((*nmiHȃ FJCE‰ 1'-.noUEփ 4FJB7ߑ)0iB߅ߥ(F3UpjZ徉߄彉佉㻉#ktlzmlktlzmljwvsܜqqjv⻉#kkkkk~lẉ#nmߗnmߗmߕjṉ#nmޖnmޖkwkฉ#nmޖnmޖlsmtwkrqฉ#n޷ޑn޶ݑݴܝܳܝܳ׏ȒǑ Տ Ž čƌڒŋ㖖ьĊ䮀}½ĉą֭wĿƉܑ֔Ή⢁{ˉ浄܈ƾ{ހ͉  uʠ͉ wȢ͉ ◍Ƣ̉ҋ ~š̉ҋ ~ſȉы}üljҋzljۓlj ᘃʼn ԃ xĉ Ƀ ܀ĉ ȃ ۂÉ ǽȃ ۂÉ ȃ ‰ υԌփ }ǀߵ߅߾z唺ەޜ徉߄彉佉㻉#ktlzmlktlzmljwvsܜqqjv⻉#kkkkk~lẉ#nmߗnmߗmߕjṉ#nmޖnmޖkwkฉ#nmޖnmޖlsmtwkrqฉ#n޷ޑn޶ݑݴܝܳܝܳ׏ȒǑ Տ Ž čƌpŋnsa{Ċcssp\½ĉmtrqqh]ſƉ{nlqqpoo^mΉbkVpomjYˉgtrqWk jig^͉ wcZ_jig_͉f Wcffdc͉z Ycb`̉wҋ R`^\̉yҋ Q][YȉyыPZXWljwҋNXUSlj|{WTQPlj t WTTQQLʼn oԃ XTRQQMKUĉ Q~Ƀ KSPMMN{ĉ WTa~ȃKNNMgÉ a`ZXȃ IKJK~É ehfbȃ HKIH‰ dgkkqփ ]LHH}jߦ_no߅߱XHe{ޅ}徉߄彉佉㻉#ktlzmlktlzmljwvsܜqqjv⻉#kkkkk~lẉ#nmߗnmߗmߕjṉ#nmޖnmޖkwkฉ#nmޖnmޖlsmtwkrqฉ#n޷ޑn޶ݑݴܝܳܝܳh8mk N'?K= &))))))))))))))))))))))))))))))))& it32LƿɹƂ̷Ƴ рĴųɱȰƯ΀ˀǬ«Ī ˀէ.Ʀ0ĥę؀¤?ځţ ^"C#4ڂ¿"=Wo2+^ۂ$$5Oioo244(݃B*Ibo241%$p B[o24'-!;Ÿ+Tnon34 * iúĞ/2:cOYon34(.%,ΰI(GaSoocMbon34*2$*33),"*Խ{ @ZooSoYKioom24'&2332(02*Gڂǿ9SmoSo nSOnm14,&1332(/1&{ڃ̷;/LeoSoiB8,3321(/10."܂ۀgE_oSogM)  ,211(.0/+ :ރֿ.RO^oSo mT3I".1'.00/ + !Rޅ޿7QPoo]KgoSo Z=-L %0'./-"&.-##~翿4.JdoSoWOnoSoaG' '0'-//.'#,- #,* 𿿝 V$C]oSo lV\ooMN(x ",.)"*-,",,+&3󾾝 5GJ0 쵵M&)('& !"?omRWoh35m8JJ98J0 뵵L(+*&#&%$@o hO_ooh35 l8JG7>J0 뵵M*,!$*)'&%Ao`Qhh35 k8JC8DJ0 뵵M$$,,+*)('BoXL35k8J=5/ 괴M (/.-,+*)CoaD4o9JB1괴X +/.-,+CohN.L d 8JG6"=鴴: #./.,CoU80 B 6J;($鴴 &/.Aoo\A  5JJ?.鳳(BcI%|5D2g鳳_20Rk *#?鳳 ($ ,賳貲貲粲粲汱汱汱汱尰nnrlkklknnrlkklk nnrތkllk܁un尰pnuunnmnunnmnpnuunnmnunnmn pntpnmkmnnm׀lknn尰pnkmlnlmmnmɁpnkmlnlmmnmɁ pnlnnnvknkՁ䯯pnnmnnlnpnnmnnln pnnnmnnk䯯pnkmnknnwpnkmnknnwpnllnvnm㯯pnqqnptnrpnqqnptnrpnnonpnn㯯pnurntunqpnurntunqpnsvnlnn㮮pnurntunqpnurntunqpnrunllns㮮pnurntunqpnurntunqpnmmnqjnl㮮pnurntunqpnurntunqpnlтlnknk߆ᮮpnurntunqpnurntunqpnn} ~nmonl᭭pnurntunqpnurntunqpnln~ҁnn{znn᭭pnurntunqpnurntunqpnvunmkmnknlkj᭭pnurntunqpnurntunq pnumlmkހkn୭ pnuବpnuବ߶pnu߬߶pnu߫޶pnuޫ޶ޫޫުܪܪܪܪܪܪݪ۪ƿɹƂ̷Ƴ рĴųɱȰƯ΀ˀǬ«Ī ˀէ.Ʀ0ĥĝ؀¤RBS2ځţ j3̬I@ۂ¿"/{˶7hۂ$8dır*݃QJ^6{4'кKHŸ1h„ ɪv2qúĞC^ƒ(ϸ˰q/ΰXD׷λW>Խπ8ف ھʷETڂǿ4mق%ƺï5ۄ̷QMلŽڀѼ`6݀܁t5ك ז3*k؀ҀʷEL߀ށֿ2فޫAc3Հ˰A_߀޿3mـ'UHi8տѶѸw/ބ翿DYفt8ENտπзʹd0𿿝 a@ق ؓ56dƳр űMB󾾝 0لӟIg 4yрϵ̾7`oZل_4 O>Ѐε ʷj9󾾝dقt.ʽɀ<f }4 6WɀDZ<gDf 'Ȁư<i? Bǀ<󼼝i@Bů;󼼝j@Bǽį;󻻝 k@BŷĮ;񻻝k@Bò;񻻝i@Bŀü8񻻝i@ B¶9񺺝m@B¹;𺺝 l@B;𺺝l@B¬:𺺝l @ B:𹹝m ; <:𹹝k aDRB:ﹹk⵪bRg<:ﹹlėKo2s:︸ k ؽ?¿6Y:︸ kـ ѳpDUH:kقʢPb/w:aكÏG K5d݄لƴGn: dقG o: cـ Go:췷cGo:춶dGo:춶cلG pɅ:춶c¿Gp:쵵cƷ߁Gq :뵵cïý F p:뵵cʹžF p:뵵cȿѹFq:괴céEMэ3괴l4٦@\ y*wۯJM鴴T?NE ^2Z:鴴7Sҿg2=Hr/鳳.uҍ3+_ՙ8x鳳v6@g,wJX鳳 C@< I=6賳貲貲粲粲汱汱汱汱尰nnrlkklknnrlkklk nnrތkllk܁un尰pnuunnmnunnmnpnuunnmnunnmn pntpnmkmnnm׀lknn尰pnkmlnlmmnmɁpnkmlnlmmnmɁ pnlnnnvknkՁ䯯pnnmnnlnpnnmnnln pnnnmnnk䯯pnkmnknnwpnkmnknnwpnllnvnm㯯pnqqnptnrpnqqnptnrpnnonpnn㯯pnurntunqpnurntunqpnsvnlnn㮮pnurntunqpnurntunqpnrunllns㮮pnurntunqpnurntunqpnmmnqjnl㮮pnurntunqpnurntunqpnlтlnknk߆ᮮpnurntunqpnurntunqpnn} ~nmonl᭭pnurntunqpnurntunqpnln~ҁnn{znn᭭pnurntunqpnurntunqpnvunmkmnknlkj᭭pnurntunqpnurntunq pnumlmkހkn୭ pnuବpnuବ߶pnu߬߶pnu߫޶pnuޫ޶ޫޫުܪܪܪܪܪܪݪ۪ƿɹƂ̷Ƴ рĴųɱȰƯ΀ˀǬ«Ī ˀէ.Ʀ0ĥĜ؀¤J1>+ځţ e'fpf6<ۂ¿"&Ytpo^+eۂ$0JussonQ#ރJ8ttsrolE0w)eus'qnf8CŸ(N|us plV(oúĞ;G}us(qkoklQ'ΰQ5rts*rlnrrloniA7Խ,ctsnlqrqqlppnlb5Oׄȿ+Q rsokprqlppoomlX*ۃͷH9ylkorrqpplnonmlkF-݅o*f i( Gnoqqpknonm ke5F݀߅ֿ(^}t0X%Snoppookmnmkgig`2Z߀߀޿,Q>=\(^loonjmnmlhhkkhjjT&翿=C{R-85flnklmmlihk gjjhiH*𿿝 \3m f) )Ajhlmjgkjjgjiihhc9<󾾝 '^p5\ $Qihjkjfiihfg[+\iCF+ B,aikkjiifhgfgK3󾾝ZpR% 07eijiehhgffedd1 [pj+r !Chhihhegffd1 [p z4Km$Th eggffdcedcc1\p B/D+_feffecedccbb1\p W) +9bedcba1]o4\{eddcbba``a1]o~57fbcba``_^`1󼼝]o67fb`a`_^^]_1󼼝^n67ea`__^]]\^1󻻝 _n67d`_^^]][[]0񻻝_n67d^^]\\[[Z\0񻻝\f67d^\\[ZZYY]-񻻝\f6 6c][[ZYX\.񺺝_m66b\ZYYXXYWZ/𺺝 ^n66b[YXWYXUUY/𺺝^n 66bYXYXVUTSX/𺺝^n 66aYYVUTTSRX/𹹝^n {21bXUUTSRRQV/𹹝]n ~K?J0_WTSSRQQPU/ﹹ]nyLOa+T^VWVRQQPOOU/ﹹ]nm>m(L]XWSRSUSPONMT/︸ \o d7¿-<]YUSVRQPPQSPMLS.︸ \o ~U?N3Z[USSRUQPOONMPRKR.\jt?_#L\VTSRQQTOONMMLKKPU.TdgC3\YTSRRQPPSNMMLKKJII^+YPo~A{JYVSRQQPONSMLLKJIIPlv2 YQOSuAzIWSUSPOONMQLKJJIJhyz2 YSTOL^~ AzIVQPRTOMMLPKJIHbvz2췷YUXTQNKgAyJUPONNQQKKPIIYsz2춶YW\XVSPMMoA xITNNMLPMOOn}z2춶YY`][XUROMXmAxISMMLKJJIJ^uz2춶Y[eb_]ZWTUSs@wIRLKKJIIMNkyz2쵵Y[gfda_\ZVSu@wIQKJIIKNJHk{zz2뵵Y]ihgeba^[Xx @ vIPJIIPLHky~z2뵵Y^kjffgfc`]y@ uIOHNLHl{z2뵵Y^jijjihfeb{@uIQNHl}yz2괴ZClmmlkjhgf}\@w2WOHlz\-괴b%Zllmlkih}s0U mJULHk}m5F鴴G+bmkj}~9= O!PSKHi~t>1鴴+8imnl}J)0/UPIHhyL%鳳"Nmm}b(=WNh{a)q鳳k&\{t0^uJln4M鳳 7/2 ;,+賳貲貲粲粲汱汱汱汱尰nnrlkklknnrlkklk nnrތkllk܁un尰pnuunnmnunnmnpnuunnmnunnmn pntpnmkmnnm׀lknn尰pnkmlnlmmnmɁpnkmlnlmmnmɁ pnlnnnvknkՁ䯯pnnmnnlnpnnmnnln pnnnmnnk䯯pnkmnknnwpnkmnknnwpnllnvnm㯯pnqqnptnrpnqqnptnrpnnonpnn㯯pnurntunqpnurntunqpnsvnlnn㮮pnurntunqpnurntunqpnrunllns㮮pnurntunqpnurntunqpnmmnqjnl㮮pnurntunqpnurntunqpnlтlnknk߆ᮮpnurntunqpnurntunqpnn} ~nmonl᭭pnurntunqpnurntunqpnln~ҁnn{znn᭭pnurntunqpnurntunqpnvunmkmnknlkj᭭pnurntunqpnurntunq pnumlmkހkn୭ pnuବpnuବ߶pnu߬߶pnu߫޶pnuޫ޶ޫޫުܪܪܪܪܪܪݪ۪t8mk@/aT.^ ;W  P^     !!  !! $+13666666666666666666666666666666666666666666666666666666666666666666666666666666666666666631+$ "$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$"   ic08_ jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2d#Creator: JasPer Version 1.900.1R \@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP]@@HHPHHPHHPHHPHHP ߂H_7j ׶z,*cQ=ǥtM Y?!&b BY^ !F<ʗ]ƀ߂_i!XTPX -ExtJisjk B5bϘa#߂P_%eVNg$0~3٣-@ø U!mVrӏ, !ύF߁^S={nz ¹EF$"m:UAMBG^n_Bp~ʇ~')':{.4b0) O2`]FX3+™ԓ63sXrY AC a%^(01V䔌dEC#υqE eq(,")| UQGƙ,59R#&vˑ&-  :.D"iRwR+_g~Q2{lë EwZ)ׂNy|<>E.̕`nqmsZ#-?.XHr#&F`skOʛr>I,fG{k ~M,Q,)"Eh@o4a{i\rRF9@ (O8NL9?~̓ckvDksq9)m},VJmErEjRS7 nW:'HoH5W&Ù#C5+EUIaomhLF_Wq6L-YR*Y,b pYGG*0%nNXǛ 7p޵z=),"$_~s3TX )܄Ę34_6P HVڗR&k>4H,#~4\s9ژ3*2v kjT]]Rϳ<Zpv71 1)秬 c~ʮ/뫴6k;3* :~kNK3b;RGJ2a?VszB<>{4>Æ wlNwu_]SxDIC*}uχzDSdDNJk!ZlK4g;0ʏ®K|UK kfJ[5g:j?A G^S-\_I+g 87Iȕ _BF{ 9[:/KcIW5s8*|;. iSE:YPJ4. '3)ȕg!昉tG2($;USABh`"61€GWnU0֝u@@fXD}jOzv֜pSfuB֢Rɪ9/ &xSUݯ3(&$e*ץDZ-L2JqUm*i~Ta5OG9Y/*+ q0fy>WV?D|)r UN8)yY&'" &Sy#aˏ+?|aż1ʄOWPeiᝒPŏ§K|UKrs<%\cG3kavB\P1b$:٠}Tw[}K֭7GTy!+)Gt9yЧ)uS9nvg337XA44kk(&z܎ #~܀irs81)݀PyLVEp]AX%P4>?jhAZ-u[yrQGAxi9? p؍P~WphKHO6D:*w=,å+AAm<-?qHW&4lX!(_D햜x)vmϴKC j? 5S|>oI;"r(Tf8q&Ve@+ך,&qxgÿZ].ԨPU;G,lq3hDȱ@Ϳlb96(HwM_WjJM!_q?iTV9 n%6@xF[:UB\hRgbMZXz8i_PعpZIV|?~_P`9Z!ցokHN3t) ozZvwz>w0iXĐfj1l6Rž{(Q5W=Wv~, G]q0{is I?Cp1+IHʚ2۹#ʑOGjl *:0s(S@H>s0Kυ~РϡLJ_¶^IȢ0g|OSkD76O2;mF0u\ㄜx_$FJUMLZsZf|D9b.`րx|FZ2#|nO ێqYVL:KiR`koBA[X R-Ki2:)*zQ-95 :$1L\{bߦ3fH lIa1 ޤ?#CqVGLjř ?ưdƅ'Np?Ҁ\< #7o.?pB `OH EHnޕZuث$s`K߾-nB Bf{-&CBG',rRI\=8L@z5qZUaN\sr=U#:6Ʊp>tΟ?/ڤH/h`;lmn+;o4ilzu kUa @ܴлQ!Ԍj1m54k$ُ8vZZ xY$ɑxOD)5qh[rzsz e.FX-9âYo~E(fGsH (S% ` ABKOU0+"/^-Ȇ ,Ao"Nxɑ1̨}wn jհ\ۿ,uɑVWVz|622(ul 孴GpLj#6%.O } tz09WG͎{Bn_)}ɋveгWX>O>9@pߛٰmP6!RAV>w# (\@nvE8PhiW+:fXC G gb37T1y5ygᲚUDiBT/4"Ho~6y\'hw-gI'FΖ06 Ur27*ZPusp{@)YQą0wlvE_E eKhP-8 /2/퍒jme}Щ/lg%Hڭ6[ n zIKw߽'hchB{,ξC \ 5" oo y ~YwW}PqE+9ȥ(wL%Pݸ,4މރpce822}iy={4v睚Hc]y]mA!t͋] *Kd-Ҩڗ >hA>|۫UZ!{^)LX#Fஸ JF\I9pj ^7w2m^FDdI1TTKmmTf_g#C ZPJI#e!hfbU9wʠ^9=t  jgF{:eb&GbǍeZ] P7auPn<3š>k$u)E]mtUX '&ۺ N94O8Daol&3mnj?&]HE_^"whp = 0[*У|<e[<Rؕ_4X@:Vԧ2*zܿ=± UfYNk( NDZŞ]c4_\4J?Z20haU!YrR:8p8ă'DDgv$|\Lڪb7zU-JQ R.?C9$+Lγo\7:վW|YZU,#áol~~GտXҒ.d1<3k@t& ;l0ꪛza^Y;EBO-n}$9,ݳ#f8+p aFǃ!m^& P l6Q3`^o~TZטUOOIf%*"a y% ׻ö/ۢ@3 `c>>}˷ݖ/:;^7) cXut2|Y)b$@7tYND ѡ*y(>z U+r !aPUTB/c͓3̟/w:ne(Ԣ 01C:?䤺OF( ҁ${oomε]໖ݳ[{t[W[f wEQNE.nk g󃆆qmW1NS~4KTxޞΚ% WTpõAc rEDL/u#1C*=c9wWE*`?dԔ{ɽzw_s=D +[5J\ɭȵE8 8Ð^+eW:FG0oxge<$kT*~N&I例|:axfRzJ,B Eo?)~ A>S6U`^I*1`&7 v>Gu&2MjFh"wCن7u/E=pCL^&e9%5v&9t cV(!lAV[is-  4& o9F"xS)}O\gHVQg-n8@)F[KilW~gaN_$FJSL=CAǛƍTj¹품G mnEes1'pl!OjNjt^&b_q):F*r#tII#sb|<Zr>Advǖe轒P@Itp͹|XŶ>Sӂ3;xP,>jJkJ.m }w?ۉaݾq\p0UUjMVfcKQ}%+y薛9ERMm1-cv=7Xq^ f!= mryzBJD4Eb8`mLmhV*A/1O7:ȷ"۲6m0҄Ts$Tb8 F>+b`v#7=pal4=*U0C6pMcxQd QtzB?/"o^s8zˆ$k V<`/ ?.7 ׷uB3Kxv#tɑ)jL~  f,i2/%*sxgȎ>/0Nմۭ !@cxN:Xp-wG\6U)?{/_ :/)NN]V}:/)~ YyFydbo}A6)PLhgTDpSM5X{ LJA&aF~ c HNT Z Hg}E~k_֪.7V8@Q7:qqxu(DI&qMj_Bq<{x˵@,Yf(2N6/: $ZϫVju(˱J}v?Pk&{ = ^p 슾]!&!~^Z֘[=veTCĽ*ovnQp>ف?T^D ]ݶx6OMnb9[ROhpWG,y:=#bh2af+Gڀ):a^)p#ZC)?w_h#?]j \X_Pሾa HhHp\|W[b]UC`n!Lzy0 ^Vzgȕa}wE'%.),6ԕ0tMåtϽy{ \xfJzhϗ7 V#((Dۈ[fI܎}io`+|h@lʪ'XpBZ4D; *\2Hu%Ī$xf_8V <\|K-uϴw?p$Si0~NޚvGp&J.Zst .HiLTSj"on{*@'h&c۠F*H0RTB8nZB)p  \.{[:+nDiʖZOy8pk)xĦ7]0|9'O/D?aҙC) M^+b^1*/BA7X $?=4ՊOˆQ3o`Ph(TvE/^qJv-K/ypQ"5gfhGX1d $x ,dȂK汏!g, 5}yhB)1v:# ^,`>@Q`pa7+J ~jUZddXqpk8Dz'Nxx{ܾ棕X}spϕl+ oti689RC33!ôbB4L۬S 5FedY7M;^*%(ݒ槆 sof(44/mrޝX^a < )~`4We3D%l^/ྷP !ECY|BZdnwmdq4$$"zSXw/[8dQ}, TLǢ!#qgvjs %}[_3>d$ՏR_,VMx{A#YYdwn7ν*{p*Nmpth͖*uv+Wٶ `-kK: JNǷHeAR٭#TaŁ( b#egQU:#[-wi3,ϙ5M&T8%R'I} f(?hnn\rYI:14槸mX 5Rڵ.̯@_&P\}"(@U^w-[:cOF?Ba$ɗbBvfwdHVQvx3?,u^_>+$Ɉ;r?G[cE%e ?*RNMO[KPng%CH 2>AzlԐ]@8r(-wiO cUSLo_sn@}RQ9{jS6Cu}S4cM=3vfՙ:f:fijK{ ZPP!uoW8K"AeR#ǂpgttJb=:ư8:0 n~1+<CVYN0_*y\h` 0Y-L˞Lf,"r>LEs@4륆Ԗ'['Fpf(J,k)V:Q \ VU.#[=Rb&.X IZwQiV{ Y}/.>~mx V: S]_mbIY1wz+˪/w˚MiZ|aޛu43.r _xFiyJ>fln!W#ӻT?/-HkL}q- A~EIu\-RC4*7u*zD@wȻ%{%2TIqT0RjvrdV{UlY~Pr:P!CRV؛^QO,@̣x?VLI*zc,FuΜo )Zw%93/7,"ID@_̵ϡDYip0~=&$2sBL8WwIf<8[FaaKAM9[4G/xm[f*b%LRl!؛Re~3tʪ%7CØ;Pzt +ӥ*  n|B9zq-5> 7dYeekC{} Z7mb9*Tn?q+_f8O=U 6V$RaA]@m] E9HX<%M|ٸg0Zy jV/2޽h:"N\D=-ڏ^V>jiG}2Qi b ]׫b*NE{ +=MA~]S]\,WM=5rS@ E\$0C!v/qDg%,LiA֝pSZn8%*7Zyq5,l _" rƨZzW;Sk"0A欁, |PC|ᡌ#Cf"׉*:-p‰\W*wׇ_/d?2 Z&mᮌw=N u6 DOt ߍc"6XJc˹$! _JIe|I< Yt%OP%i^ڵq한$L.k@'"rsIB\ %ȫ3x 4_{C@5HpٱĐNVEH b]^TmR2' ,[oqtGƌ5j~͹_{S3'8=1F*‰{t/t>5oOJ1;Y}@)0ܰXA* ~^8_xgb?V 3uSRM*c(h34Ta~7]Ĭ`jI,)(_],gh< ɫ<-aLapHd8gR' QT|+Ӵ;}Tgaϥ,KZOJDvvR*hiCa)K dc!}1spIjt+2A[W&9bH5ĝj9Ԯ6R)e@ħB O]Gˈ,<y^y#U⸹*2)]tꭺt/*l4bSz2'!lEE@ANx l|9ME`W\N,Y\*@_*HqV-IƊy(5>:9Rb8BR t.^a4PA~LIrHid."ԪXK;U"[/ou8z_.m"_yQh"0BMR`84П?1 [6lBweYk8Rg Ҁv込m2bhŪ|W 8HLpCeh@O ^8D|vV$;:h Qrߗj ;\LS,Dq"ӄ[ZRVxERfڹTؿ"?k čzu68eziu4%цM I`rI*`.\<\rTOe3E#M* i۪KFfcà.4)#z!k~8yTx4)XX>swBDN1IzD_lgj:Aiƽƶ}뺡U 8˦C < {̪1{p$ha"&UHbbŋUI;R,2%h|jbXvቔT۹qq^͡R<>ZH_. l]u]_;N`8{A~'y +y n u<oeE]x) r& Kܱ=g3;@;yO*z#-ܐ(!#Q&]0@ є rK 'ilHsUOB_Jr]:Y`I0est -{ D*b=u F2AWK-SC?:;/|E%XE{j22%͵U] \iI0~H'F j:!g EDtuaPJ=:zq?4R ǹ%! C7z+38ۍ A9_ui~m(V(ĈVyqRN4ۢ~J\[4+*YDU{`TX@f57y&TFa\T7A yPK` wbr3Jk~ p?VyxzŽTj7aL_ㄗ^&هZrUfo'1j$})GN\b̤;)sha0C)Ħ+ 2JxSnM:tC$J]ϓsS܉ ŇG!wwr@BXBT@\}~mKBl,S6~z ,a_ t z'HfUaKTU2)ɒ (RxaRmE^\H༐,cnw )"O$ ߧ%dqk.i24^;Du. B_Qz}'Fs~">gY]2_:1XD5*D.Ju-3j~[/:2^Y2>}bixU z3t$T0@)],3?FĄhp`8FpHՁG^Vn$@N.u .AfƛGBaw:ބ?jq_1Ṵ4`Sզ75Ì`+\]oS>kCᐋnWLvħrb!]r~]VZI}CMPC#1ķz&j!&T~/ٙO Wud'6o4#94+h A꧃LԈ= e{`(ڊ͉vk[`] ~zVCd`f~#XU|W ")&~?͘bGsKk8 !5%𱓞 ^VzgW¡wYzکs%4:|ļ(RsabJ(glA ElC V\\Xs8}[8,Z? XsoFUT!)ZXqJ@R R|dȩy@Y=M׼ F'"Ǫ4Q""t[0Ds@ ]͹΁W E'A-dse!{ )zqt .HiLTSj"on{;Saz.a~R͚14Iě^\&Nr9:Ǥ:.z&B]p:8G&`֕/Vpג71kS%P~"JH] gLӹM@Kțj}9l]zgG¥OTkZdqںLrycP̪C"hA_2r>pǛ'] B% nĩ@ ;G4/& 2>sdϑ`Rp2u &11.ITlSMzW< ɄvֽX;P`C؏@|2;ƕgB&H~¥W{(|=6ՂDk+(fNf8YZLd[Z LfSM۩Yf [V'$AHFAw/B. ꁉnE5BcG~S: Ujk+"eUre*nľ¯I]FnZ~|_ge@l4HH0\8jmwNdfm"\k0,R^%O˵^܉DJD!{-E5eL ,uOn,(k-)]o!O€Y+) Pyi?΀pgTiI9-# Ip \sd;;V^l2H Yz1{u&p':/xljהtk* 5f֓['^ Q)V-9ju@mƞjP@ڦo>e{eiGe&BD'43Y`,0S]hfzTZ?xi((D{2Q&:[#CKYT .NjLfeєt\EpHVEKKإ"p2* ʂY/2i!kYOZ yܢ u 9g4[TjDfPh$:F|y^PJd_q"v7v>5Qo2ZHmOooh>lfvػRijG(C6sgsi٘͂t! )v͈_8ڎ2V| khOHυ j|\$&pAӲ1^꺸%֔[FE%ug/U3RD7(JもrfϘUWl\!n~+!9 h@';o\W9Eg#L;^WUfI D 6XEӕ+7 85b䚝v7ĕ5,cxP \=PۂY S%.ɹDЅlxGp+lj,#g#yM9fQ9a91x<],Huk|柅14[&V.2OTW*ciOF%EeM#l2`? ۯm1tof`zt j) #IRT)IǔQݶg(,Wxz^>R򗔼/)yL_Zc@5MMXLt+*0K^R򗔼0O8+?2&eKNRkm<3JKRx06U -"j_f/eA7stNyh>0 Ļ,M?wE W{:&.YּLE:`"&acr#DÍ aBsrL<~VҁcT'Ĭ 2fd8XT/& `zp9Xr" k4WTV~V]R2{#\4mah YY죝Gx' #)8Ͼ됉l)@@pj߭*,%֗lf~>Qֆ#х@˴v-9'[ %:NM>, d[!eG r u/>Iڢ?h0wpN{_0QT8jj&S"D+*g"u5dvdɦ&? _ao1p2Wh) 2XrUq#(8\d jDR~dnh#MSxZ Jg/Xzk j;z,ם=|yA4ӌJadta.]Nu}nuoB6jEn1 9uT|t?N4mn޿ZLr3*jerq@ U7l{o)'U[0z,{j(m: aބ}&ij.F./{HFȢ;ד*u 3KW"'8fG~"ٓ}YՋkCT/a؛cxH}VQdg )_-p6k%A];)f I1uٯK9$/mg1]5X,؟ > ts3 >D6TB^+*E+ؽ_GP&1-,c'$Q1_>y*z9(ej\V~qg[ (II+NsaeSt^_7loֽt#kp3@]Vw~zD:{.p*t1PW]< <%+ D|xtxMV=g-ySHJ1t)H4ECK٫&d2R|f7W뚫__Uded[ 1bq,ZDLV*%3 c"px=T0=6Bj?B+e?tӲ~^d_3@ჶ"yl(;$'.8αD2RP☽l W"ۅv0] ٳC 7bޏrt>zDKNG$=fp֮ ׁ:P`BLY/jye"тrCCX7nES]L(6>z[iH;"CdR>DS"Q=o1?wl9N |9&z{_t KpJgM .-dp7w|e *KDPA{<*OVHd}tm~N={&k)d}KWI/:s\L &t{*Bˮ@q}D5o~=rJ#ʛrŃRq93|31əl~gbkC#sfܲ+{q]t fY&d[m/*H2-8*SX b߇Z]"M/JRq-Ggݠ-rĴF?N=OǍ2WX'8ܞgc\je.71Zn:u<Ь1S0H=(Tno:U7x_MC#$iTeK]'ƄG.m79.}xjidoO1uOחW]ԂTOD]H~J#]ƻUn$xҵПXXkDT'@P> Ȇ 4(q/ [ W( j I*XyUp MV@[ZBxEZ h鋐AZ?aj f 0U#ZE3nu(K%md2 ]UٯD=Od]Xme𫀃gٮa͆ )%脢Tv2n^3 {$V1;͙+ DaerETOrG]N/dBQhRk C~}7zkFOd1焍k[X.ݓ6ǡtpA3)?2sI*?ab@ @[Qhg{ѫw~ļ7ҙ\[$GE|3ޘQfߗd)(?/,6Y3%jndӎ{ԟ((OufA)tRm<4:hPb%5$ޘnCA9,1eX*H02EzW1 [J"cj2FA n DR:ŁrZvGQ`"Jqʜfy.\oуm"'s[4g{Yޘ?UdUyys p&uE)H!na}\<3017\bN3)cU8O][,w (Şt~֨,dcNH'0D[2Ɏ AX1yy6xË}1##@6מh˪h(q., {Y6ZG& 5 MpOQWÙ_IZQTDz_뵸&%_ d>3`ƁPJD&YH[|s=UJ,smSuӾV^u%3,N!aʌu'UՑpP90h+DD~f4Nwa}f*Pm%XV& btzEn#]F.ɫ HV6E?Qzq(uuW_=@GIq-ݑd*}A{ɶvN=p?đl§Ϳ^/r!}׎1\˦DmC$w^G qf+6NْcbP|I݄\-,`i`֊ P==+Ł@dS^KEF lXg]#,ZX~tcTo-}Y&Qƙ6#7X N^yW)\ā?P2%NӦoiYxļ筃uKHJB bK%8tE/}_ȮeޭJWV0-sL6d 7Z3$1I߯H DSʵ@K\=(k SWNJ2n}3@􈜚>(-g` W. ޜ`Li|NKUZ'0L==5}Ax?㰱k&kKOyobX[G j}XpV<_l-: mKG˳Vx<{x_}|q .j^#ұ'I H2Y>7#.4n7FthD? ŢB4;n7%ކK'| VsIx9zAMVuqt)o$>4@fyLZA "K0ƣ3݈L9g;Af*2 dR|r 5o"z>,ښb*\A ,?eU}ñ'tzDo xV/޿jZ"#߃T҄jΦwdy\mN-ljBPfd{. xy^ӎ6:/?0t,# 6f)REBP~7^u:9ck#\F&^ %4T7XzEkxnnyعyfD`Jg 0]"8g[w<6iehCӰO *?uTӷXw6/~1K;C(VP琹ĪOc5<3Em6$yD063\ dMCtM7)4..9{\lD!Eg`m@iє٭;0d"[ѭZ㋒- h@$w#I!vxH4%%[OV|N|7%yXqݵen1RkF~Z4[#Ϭ" Y GJ˟Jk bX9)U)sʜs2B&T lT,c7腕#_XIs^n ^{Ps<~UaYcdv;'܍ifMO?pN)._mޏv&l 4T`8'?).QWWW wYChB4=mw\V kHVsO}*+b<6:Y.k<*Iy~=ٍkZQ>h]j+ wB1rjZlq{l-*08e >#o? kj!F2r+K[Ҋe9˜(\ٻerM"1FfDD%y<N)x@|˞tVF<w5%x~h*F]m1r+tO~bS<%YA!S[~:EJu9M R!6n߫!elSI6~ 7*(XDQ7KW⁔nŬ7IbQEX{5̇~Z kV.z_G!FجQY D=B8{2h#@|ceKX1xWLkL+ 'DA_;LF8]5U,-1JSk}Uq139Q@{"բ ZjPot|{wxTP"d6Tfy[94hs (!,`g%Oh`L9??|jikA=QW1P ?U9@- S  <#U,p%+2O oyFWoc˻ZKdc R|2f?KrKu㴇T*}wROxvǗ?FŭZ$5R2摐rSwX;LWL`{B?`ӚHkt:~FE'y<v?$m{ MffčP6~DxԺqNlҿ/<l1z. #5v5[C6rh̤wSXR?kh{*3S H91C;Dp<[TT5/췣.%!tg(TLb 'X%Кkf`pm,JX$NJƀ7-TG/%TALe0ѻdݤ=S'ڇ;^)"V|dJ >P? gpXE&:gH+T+HHN*S֚uPJ7H !?ky18T9(+P~` g:ZjVVZ)MST|+Chpq~Lڬ=vם(S<CP`.(|ߟsMeQ,D֠7cC̍ bw,<~7hmGSv|,ӬjkpJZ);pc'ֳS3u%m1P9)dYz_+=ibʃc3]3T` hSyэ_2~ɴCИĽm^>-~Ň0,b‡:%"dꔰA!ѐ@Zȉ>.Y|Q'cM7̗G 7 c@nV^gv QRe[Wf)M?se`]Ņto[D%Lɵ 8-AǕ(Pňdt~"-4է죽QmC'r =9Mvb&-(STu&oՊe E$5_W؞&d1r0HVrds|HDtV[N~m91=C F$ʱZ `m¥j[yW1[U0E[@N8>rApgt>ȯ0/83Abŀ_nnu D! DtID8#s  ,8?@D%ƥn!KnBRdq&X?&˩ǜ\4 Ƒ(v1vsxHs K/1뻖xKd D9AJ ⥻dbKM-_@yc CIhyIH>Q>ȼ-6/݌|w:˴eC0^6w= ]vݷ8e/1w)?ۑ {ɶe~t۷$k_R3 X:ypWMȾN[HUTXXΈ,~b2'?̒"Bddf$nT"˽_ȹg#c>NXb:@:UB7"-;:Aήj]?nl٭{Z\i&)`s;i &S+&S⛾$iLꊩ5SFz+Ȇ+a"`WV@F;xcxh4: TҜzqR_+[QE:I87N] OCpʼny@ 0N? * /&u|\M0覯/"16dΐ:>ϛJh6 Ğ .%7H٣HFA jmU=|R[qxhͿ"&[gc_j%e:^yх*Zq$z4eϨ)՛/f't+ks1‚0nÃf}< t/TC&>rLP k3BgZ V6 xAZ.}<+;Cfǫ!g0h?`ׯBC2h4ᕮS1m17w,٠p*lニ+WP}dG;4&>n$Vu%{Tx crB?=Nup C?g*m ~ 4Ӿ2rLRMkZ [Jm$:U 632;sꅰL~ō_NF/#EcS0 YܿƐ{Fed[ 1bq,ZDLV*%3 c"э_tl'0v :1MACd\!dL"N#/PP w]E?pV('{0FCgVP_ mmd|@tml#|A)OC*oEVuןj򳒂\-==e-|mi>A4]n\.+Jf %z;D+J%&`+NL4< p_A"4GYJ|ϬD`mzMĀKH75D-)'sD[.<2WF5J[ΐoDɪ1Չy!qvlϕPT*A,dCPDS3G"9]9: ïZ]qR#m}?)x{yJɾO $[}3 Э PCi$ lxKADvO _{« ꪜ#*l;6vm U*TdietնcKzr4\l( ; K IXp1uHm#\nZwt(f0dyc)Qu>X ' ^vu+"FwcPw ؾl݂ח<6/H78՛= $.Sy6ajLY+郇!$:WgV*hD5U9Ϫ/v 4Bc\Q#0X[K JfUg!6Ґ݂:Vs >kSgGo^JB>oآ"! 8t4%^)~eRB m&h/p;h i|Ua?(c}O*vgKbSSP8ⳑ"LDX t2bvu)cOTF_ӎɐmǗDW1Pɾ+pRlJa%P  a}tR+!&TVG5<L+_fWNZq0u_ҘacɁ{Qvqؚ&qVTFri0}Fd]TaQ{%u ipS{ upDX6&UEf=wtT7&Q?ً܍ԸEm094siB(= e\p2g͖1g:߉"Ǩ)[c=*NSKAi&kFG[Ub>cwO6%"`HN6c4W VE7}J@?Y^C7Ț^3e*] Yt8N'$MkdS_ޗM\m~7MZQ>PďHR;JЦ33͆uZDL9aO^(lbq|F« {eD!=LSa " J8tĽQp#l9 -y@.ώBP,R_8Wdb0Kh#nM Cl2 kmV]u#>u_Bv-vZ`E$E},<"1X2HO?Ё%d5bj0t#< ^}G+ZV ɦQ*i#B!f;|gr~*,:8E&vjN.lt^̧MPN 8 ;c9. ( j3;Rn[14Uϰ5iu,0`Od&3T?h>5LMd^=@/ZE`+֍wG]"Q%vso`XK@agg2l3|CרߊJs٢Ct,E XJo,K&*@.;FpL^'z“k\-KǰUSX'^<̈́T0? 9KY7v EEHDVԿt 0q;v6]V7jNْcbP|I݄\-,`i`֊ P=7@P{ݩGjANkN6c8B^KJ9J TUofEZ :} պLJ8;a٤~`מ!~DBΙNQ s}Eʊ?!zKU3Sdn ? ~W&UXH+Khv7/$JW𙨠p0mGVS!2'YW`[K'́v ,Yl ι-Y cCVv753,ďnؑu`wfbO5t﵁$RxH?}!Dqyw@h$;Z"-ƍR[p66Pk}ÀfU9M0;F2'ݵׯzB jynU? 5dI>õK kCI؍co|uo5{RuBݾ -& s:=>ߐH6\Yt6[ ƩPc}`._a8c{v#̪G J#{>rp [46Փg+̜؛eҞP,`h.4n7FthD? Ţ$z.)N?G6FzlPt%) {?u 7ͰpA4!^6kT[ThZiJHzn5Sc)rvOMt҆ڮw@Oyj $TT.(+~o5d[bVd-(T0\A9 ?4|r~' BßDaYMy5:|ևmiq03ҜqFvh,?|ɹ?m@»==ψ7p -p|<,qP? W nP+VB٬\|+gނO=&C> osA@7Ǒ n%!q7y*w0!Uh%^Ýfw#'Q/_un )+^}3EIV(rx:ږ=_ɥ;P|!TݡX^\ ~Gsf36)p6*B?NTߵ+0aYٲ#^ҁ*{E܉ {mSsÞ(bg}맼c d|NI'& I ͥ3s<֒cVfy9|TIJo&"ѦMgѤxP'8PES\!zGuk'$q1܆?&E$31 D`4FC+hE7|֩ \Z+^6`/[@DŽͅ .^0,t& {$Vqm9r?Yv(rځ nI:U|# F}Za4򫤼H}1І;.rG]N/eV,e X/ O_Kǘ&Q^'4Fm'WB_P<~: M92k|(X⵩dm=\!l YqPL;eϦf_;#O5A0PRBO|y$<=y~R6]k[kFHq4M25@~zyanѨB.lOsn d%-5ލ/&.S)v+qEW9=Mͫϖح:\ ү w)g}=Q-)u@#QEt0l4i'mb,kBeBͨ?5nN}7S U  |vr3Qa7j< (?G q)xa#'AK@PpRVCϗy,f,jfU̳=zDB5LaXe:|һt:{"̳i Nc S/v V )nG{I"A C pb7V줠ԖY}ѭ:b]2ËWU$c < h?7&\NhH0mbШ/#0yl87қ̜qe'<-RmRLچ%O?$s]rg"9`kpj"vǪi}7(23Xco{i 9ytaxo#RlK &ld\3'*V){b'4g(K?Y(;v--yE#S(ʀ[HOͥPjj0yF-&}*6wFKz q` h)Y5Wڀ-Tc.l$8MG =ۓ =~oZ`Pf{6}$~lm=L8se ~wV:(HgY>pmk)GW H|X㩣?zIQt'TuTD4\i(^ b(lOEDr_鈝VP#HrBVTmްVdR7q)s)kXaaba7,*kA:|.{LsN+Q:Mew|ۉ|*D%?[`%#&޵}C91C;Dp<[TBme8O6$D]ߒ7ydQ7@&y>VKWY'-~4B_Fol}3/Hja u3!il[ :)1WNrOqV`JjHKѓm`œdwko( Eϵ ;]6* N2k,0%Egd+yP\KI( $1H>>3n+8:Sݥ=L\^M{BNXy6*ZXxǯAjEDl# q`1z&o`jm3kH(<#CɖB :*nWs ;F~s-I)[`-3irSR)5뻬4HGQ"uOhS%%{N \_=,˞YQ>1c|/Rz۰~nϳK\HDLx,(F\UC #k*Ԑ i2[xz:f%sв\t$mm$U`DDžVS|,;ZAI^"Xa`'Yw -y=(!3Fx=;Z}/%,7 Áw]USi88-7zzzf?~9Ȓ/-OlMz|6/݌l" '?wtx 5O(gӽ ?,ǰFnk NQa+K 5IL4TULŋFؖڒ&Ɖm.Ԁop/ܴ2HS,FVTY_MnQ!H(1ADq1g!"Ш^3uNYï9]6`=T0SuT$JuD@G1bFbǔ _7}[M`l=\ Ԫ1r~ .Cs6]DQhIiò ͤ˩_Л?!=Qum։Dg4pSQ; HC}\ xD^W~ăL{x6'=gA{#\28׍KW-wh/#h< /SdV&ŏ爍m(ts#ߍN/ܘ&䊌Ff.-]s",|w +'AVP{{zYEv?o7@Æ՘uk4 ƺn<$Oq/[&CvblhO\$r>?K)\Rq"Ê 7_`k'툗EUz'FZ (%7 R&Gzz  a:;nQYOavTY)e]@ 8ò÷Q?m\bihoiD".ZSe/#;VC 7ây}w/I&2hdRh iTzBإw+wX'LQ u`Zݾ~4 etUԡc :Q(.+Ό$"d78sjT? `wiтZ+S LDUy .йqFۢK.ǤŤCC#Gv碄-$*!%uY xAZ̈$ecI9 jwܑ1wiM..`$ϝhm'Ԇ`ЦI+} :Y齥H84yT1YNi2ɡϢ I^ܐ0{x5lozD~l AE_Qw9LWlfj N1TM<4@ĕVp)'77Xh&VwֶyEc 1wjֽ-cNU$o`$O8 zog0IH[Y;Y8ŒDce zȷ4/睄&.a_f1Ce h̜\V&lZ@N_RX^| YٮyȼX 5#zSJX忢64{90S݊0q\qSWJ6+îdf.._ީIA;Au| EZ/8}8eogDf1=0?h9١Ov~PW'ĥ 1y.ooӣp<%} ڍYu2wXA]W hŘ {AS8W/r^3LܥtzA=! at Y 9‚kYc8K0e\{lR U<cݝ#D DAo0-CQ[ q"6c xQ'B[r6֝@z/ֵYBx8FR+83x?rH Phf&~X/k.qkBwj k}%lWɧ5`UF]- @,ea|iUaB^zgy?q@֞;יu $ |C0d0i2ݷ%m. ?,~F^CMr ]Bf_¸WaHƉtbe4ѪFUEVT{OV3J( d|4 Fݥ>|SJ4Dܒ bL'VG2-]|agMH( V!@Ę\by$<|q,kz qN)G vQ/)w`^)pEwq5,JG(k$5κK b_bg6Ԓr5!]F -OȂdFO:Gů6kTTGi$l%[E^ B~X5KJx,du흿&QMmдgΫN%h|Ӥ>P0Ж3K].6VX(#O =Ё%d5gnJݐe\㌒]Uc'o;Pқ>a`_P15qwoҤHl}Dڸ[KW L prvhBߔFтGb.SYo+}_k@)~RҲH;Nʭ.pJ=]IXQj1nMak`^τJԖb sLaD{,WKo՚KW__l򽄘ĤO2y!h[5I}1۽t X ~@s8Ϗ$BI*E#;Iud@\:j=}m cr9ˮ&m ]*OskX"YZ )I8^.R+Y~N8vQK/laIsϵnh%Jo(y6at*TGU;FMֶ^Xȳ^$KeBz pKv3}̯.ZޖJz`g 1!HELwv;^kq_&DDzV[ %@BZb`Jz .pK*cHZ! $TKK gW ?TUofFJ8g)hQ3O[Ґw20Hfr%MR"ӊKƅt&(d>[bQxxҴUtƷA-1k)!/N!Kw5qmޞ|KA9N!)}җ& M,)zEb݄oقȋQl] G=k?\`aMaޖ^o( \EWܑr29'P eX6o,Kdstr>÷:F4_6>i0ԯMZ%/ͫ=\Zq2D&e lI P+e"P܊I)FP,خ #/Vi%ş +3_/6Ξߐr(ymrw8=!*OX=AG/Bf/%̯OI9+Czu(70A;7v|cLI؄0Rk;|\9/=6s" -k#R#b!!l<$/5q.4n7FthD? Ţ$z.)'6`BD(UY̥NjyC6䅋@߻?eT:H kh#ut|&Yjǧ4_nnE!*45_ן %Z?埥#- hxW\; B.--#ԗ? 䉊(Yߖ۠eC D$9:':ZJ?{[5rXDNi N] ,1qL) GHG%ta֍cs?0 nDUvKdlXSy JkAk=k;gF64|N=yMs5 =`ř\,\b}?H{:Ni+9&g<͕r.YĪK|eEç b:Z}9>0 6bQ夠W_boAU4F_3nb >=YUFe-;"J"9k%;W()HS%ۢVihf-: aN=<ݴz0JÅ<.R~^0qrqm0D,<&tt7Lz6E4PrGŞR)N‹ыyT+, y"KDu>~ jF*lO?c>Agk-HkT+A 9#v1!@an9^g6U gA8ԲN i#qpQG_i1gv `:PB/:^> ˄vSEZgŔWd(:kxWQpkOѠ^ZXI;̯x 5mvT6U > V:~Uq9ɂY 㬬&^){Ý9lr\7K)k 55,^HB.Ao#兾GM0[l*#qnP8 ˻~|d 2HBƘP|f B dGǓ_Fㅲ|Pޭ=5NPŖ,}p6V+^evaۮwx!%Ȁ}D&.tٜq hӇjOġx";pϸEHF? H^d؛P^ٍJ_cx/E ȏ^Vo57$4h2H0!,)@r4S0&_/ݴxİ9ZRKo\B ky/3΋=}4["蒓 pH>]RNeFhPU # 鷠EʄPC"aK_Zl2SP\Cs4Zk%߅nO!> 2<i+H/yxt5ST`x"uڦk9jcXNBA3:xs`hcВPXm䭒%g> `P\^T@kZ"< gچH,!G[OH6vPT%0ΫϟVm+9 [bt*x7x. :Km4D ޻K ~n4ne)bTlĎISG*iN2cj5M_eOn'ײ"lAi8R5q_3߶ʷp3Y3EkqtWW>y;c>GR?e@<4ju>bN7k x\k!Qͥn='+RCyظ 4/\hdp#Fg}'J(aWji} K7\-έ'r K Z0*w͸mdi@:gpJ?9xeul>@83aK~wm%{*Oz{vHvF/Y3U9l=^ru[yg0,xr iw ̏«K|-:dU@9d(Pt­x š+=@w(ҭh(cIvpSc ˡa |oA@G=Wڷ3uf^-_Gp!w#GsE'5v޿Pn弘Lq݆ U%qS{h; g,!XRzW8W;Wy 6ZC;Ɍ+r>=k?X苶^nWC Fosmbkm[a;+)gm%-V\V1rz=ўH>11)n Gi ~8)d8~li9 i_OJ[/ @(0h ˄{6ދ k Z? F N9qu2 Z`CuPm7XbR3+&(Q|vkDeL ׶R9= =?]:6=%}| aيVo~Gɏ¨K|-:dUAf{W"BEfl$KSs1?F](}cY)'UNǒٲ$<CZ֊,DWZS@AH\uUUvfin[9 wbXRjHzLN;/͟}@:A7j `6"_g~SzW4$ F-\<Ɂrk(~{k5&~HIDm )$c}5F\)'Z!˳MkNNnۭWnC<}l|e -CJ,)ӸtgC37Hh;{ OB}2$BFUjF/#Zzv =[ٓ}1J%Z Hv1X\<|N{$@`rlFZfi"i+N' S-a{a+HG)C۠*?# -xT8NΒQ,?N` kpY""+,3 ?~qWqn[zN."IWξ{Bw;_vv(HH"UO+J«$)!0tL %tQ:.W)_Ijܔ;rYӨT]B^SEJw  }$; 3~`L(# ,*Gât耹E(l 3gpp'#δEHn&Lt[ޑɩ0*muu Ё68@( m_R,㍚d< ^xR|?$(j)l!W.x|;[L|Ctx[L2C-R4=6HfHS<$q;&| %Vm!2ح+$s1/k-!*%/t' AbwֱžҽN; Ǧ$IoeyA+<7*L ɩ>&eu)ϯO_VKҧr_#.8atatؽZe&6QLv#OK@;ݡ5t*Q+O?Fz( 7Kcm(QoE8c\a<[h KT')E%?l)^$q uoq'oyZ@^|Ve=ϧbXoPvRF}ER^DXdch!2g0!"=ȋ7)neR=Dv^1Y`ׂ xf Xq^m)dT @ʄKUyT '2?e%E3m뎍2K'jKZaj /kk;a/zx`?kFv^јoK ƈ-lϨEO5L/Z¦Y{Y~uVT9IIS 4hT sl*1|tD-|3Oг q/JÃie !Pd ވTYV\ e`N"&NбGEXl6SsnwrYX} &%nCy&[66>l k0~!'Vd ̖F<qS 1yâytE( $Gxv2rw%_NwYV mgsVy2Qnt# Ɏ:ج)s\b[}ۊPf1k<+-]"NjA9(`!t=JDLXbhO3@y`i9m~p%rQ*CXum.ML$oPɿT!]jzQ 6+N;Xn䷐׷3 g"m^Ow څ*%呍=X.dHbj־ś20\©<4\c2(>C ,f[ZU;x=x[ie0RoΔWShgdm־.Ԯz5n{ࢂmf#C5K)$fn[ch}q=;{[-< t$-vuc;נ`TV|?o8Ч:xa8wC ^v 8h8Rlz5]#-lVynWꗲʔ֜ZqQ\#m] 4F¸fcv˹#_4֕%lAԫ'ߙx!2UUP4bW UanaLk9N FiĔ#6aWٮ!jrɈ2ʂk7'J7L^VMlvH;*eFQ/ֵU:gJIpeiU7.^xITΛV{%aVMHD9TbHYdƒS5}EJ|H?@ }v˟ M~\X}uN:`̩ru<ۗhhryؾLb"zـ`EiѴfTTuMN"rQf[0`BOp8XV? utZ#E?El6WhH@IRR<[6C-$xQE?F$YA>; &{5",F%R py1zM4̳? V~ה)t-a&\9ocqSw$jWDu,Nb jz˙Pe KJE+YB# ^ӝy~ةi1MRਇ4 ~tV5N7!P/OHEA_ C=74dg=Hٵvw6ȍ@mh,I:lwBR5áo~E(i")}xQlE2Q_ñ@F'%"1HS'nGv\kwxyro 0RAZLǶ 7?C,>7́%-ei1[>oA-Op)!_[v;"W&ާR[>D:K8zz {E?FXx⯹@SɊc9ChK3;sY5VD؍ ㎎?,=[è3!Ӫ!:t"}ZC9ݍ2vrhx]eSs>f<`jևҖ{5 D|-(C T*>b| }ec'i3Ί7^f֬{:Qy%ىipםR\q.Xf~HL) zƻA(e+8u_=b"Qn=cMdFHԇui>P;gn]UVfXA+Pڊql/ eW5*RG mKޮ8Яv<3 q 1 #bWR4̉.R{oQh[d#A"H_[.6;_sDRV7) 50qЬ`Nx>k>JYdEE6HOZhl?q H٩ަ" M*2혺TmdFu-58]tR^fȺHOio*pM#>@ӗO:2TnQ8ܜY'ʰWp3z<̗ȴlSyvt7ܷU .TB.s IHf\rsդ\j~.a)Ut]Fv4Cȡ&5 @[?xh^%B¯z4C,C%y'A|xg/U$UQIޣO|>Ţ.%_krݸ)-WQr0]NsߴS~ȕQK|^X:}EpNaPyRH:1bo ;/De;Nqi1Q}$tNҳCrѤ2{ Eg)+ER';GS<l ;d#` :ɓta=;_(Dw7aNƌbb+wO,TiI\(?@vTsԲ(r?6' ZHpRNJgƘKFUdbOїKZ"#;" $'j2iiܗ0r.W%ka<=PmM؀0W~O% ġH%2K^laǮj *Yt9E0GZaˋ3y<#YvL)˽1''AK?!e<ؙX?Aݿ$Uc 5^C[\Ӗ!r܂BO`*@k$<o=a#E:KP=;}ġ]fE(GZ:/)?~ UkWQ OzIp!:8}}p9;KiH5 Mlh;"-tc 0)5LR^!5z$$i=4enE?hZ,ENZզʩ3rĀb"3<TbGėp[ ?ynavRն~z4ʱvl;1&$:LԡqL`#3-7J ];_UK#߳F!7s%A2/sfB5MPP@&R(:#Ul{&G,wEe~ ӕߞ앵5UB APӴp[ӑchg'Kۄ @e@Bh.wqŧ v"NОuS?a$Z1xF,+Olqgh T #2&}ktj=c-] &Tɖ? /楷1W x:]! X!d/9Qt8qJ ]Se]n&^^gIzFE>ϋ]'vTIxG@pƊ.06 :D̋/|-~r c{N882xPQ ?"
GcE%HǃiZ`2͡ျ& eoI6wU=2J}ږptO#hiv£eR$~&wq:lU/B`)Ƅ2PO9,~GTvY8nH8 v ~* ǯ`7=9D^eGm3 ɮa$V80j5]u;0_U"@vq&s('qFg~z4\?p1wGBN&.XFaGD4w+s1msl+Wgd)&jN.R5苫TFZrMzJKBMXeD߮ChG+ߏ fK6)VQ,|늧v@~$xKN! ʫ1cʼnؑMDYE ~TxRq͈ܯ4zm% ̑T;~ԍM-kIX<ۧ- !}Z Fl(}ן^N4Cz,:TQ Tux\pp `Y\%> >ǑO^N#*ߨy2q C-vwohߡLPGӮq89v2e־ }Ģp+]ok y%2eK1_4׸\"(]g2gYt??fkXVRs0+ss@e:;N,>-0lƉ%XJ)H$h}Iҳ7m{VjoXyFx}C,Y~=ONY-柄d ^a|"~_X>]>O>Bt4ɛhu{:c{a)nK\6X/g]<D\4hu(mN4OOCN ]P7ԳVIMŠo{T^ufo!Oυ9mx*ؼ-С&Ġ"G$0vb4"K3;q.-u "0|ʎI0Q]w=Z sa FA0a&[A~3BR/WBu0#&ZXمv9JBF)qp1_wX,0xZ؋UzĽ/66@Zc4ˆUmq"wA\e? R<xi,e9,ͭ|՛Chy~ 3Y*( ǜ*QD$kqJP)9p%o18]>ӱ9Ke-5V8<\"ZE ?P m]r(QC!cxe.xefuڔ lExSɈ"j'!tꚊkrÝݠQgE8FޚIh(~EX:3O3~ZʼX}:t}Hk_[w|:<:rZB~*2H@#ƻ_-O?tY/mfFQF!R&lvi0 >ҫ9r 7_vdvW$! O zE\ WXiARgg-s 9Mbڀ֍ 5 O@):4/9}c9:]sZ9 [䓲.-?G;;g }f̡ER⥖YgD`2@ZnAMV-''ix[>Tǀ΀}™4td,p¹N%0ɰdPaènJwU$oJU|3F@c V{ؗM>9zd vWu%LoYTjȨ7(vZZ} ] Mwt7X?tựaX>8I4:_&?ѽ$4/v6 QW3A׋'jg۝yk S#H6̊}uW^_J$+/-iq1^'ٻ-L7;SA.juvhśjlW XiI:,~D1ylځ7<U%j~yE>_5*Z ЇZz,XKO_7khnh&6TJ,G~ϴ7҉4ostvqMT %̤3lcOۏ5hyzn_*:V_JwpZȚ6oX G$ t Ku]l:lZU<'"mZofeч=`l{"_AFXa7%w+bmsƴ9Npn ÉYw6;(;<nXO5sAEaY2g.X*N (abڛ%%P$ԥ0AŬeKHsr'qVyB V-=N)o:XTE@#" sR]\1ѐ!&H!VE, X|4۵(WvqXUU` -HTj,]g@I B$__ O^%(%H5>S Y?z#D{ɛR툃UCR}e) >5=,6`xr8!JYl.W%~Y^PW-. o!ExP& (ezLh؅:A4ǡH/c͕oST^IU1)S/|#b"6;-J}.f ,s7bDT~R|X^QpK 0uA-/(=~-ݼgԓʁ[˗0aݘxqP$! 1f?2*Vn.HV?CU~OL㞘tN6B* fc嵝[G %R@!D1~|f'Q[2!~k#Cbw|hBo\Bkyhm:Z:0 #>Q Ǻ#>uz͢Z蛬OVaTFDhuCqX}GBћjw2JKHnnG=P/xxQĖ^78ݕ ` %afx(K,^~KNa67*JCw%^3^ړ0_v@Rʇzշ#cqșn6|?u=bwu܆=HDAFj:>V[&9Uwҭ\~!}rFHҳ}RE v;(j=GOi"嚺M|j&͇6 )hx3u00"~}c5ѻo0-x$&v$>UG#x;l%-Sv쵱M5y9b>IO4sAh9U8$^xFmҏvia<ϵuDuF$鱕jK%ר ^)/Emz7>t=0c5E(6s GT7щJXIM}VȠ_aYNCWxufBm4vcX4aj c܂m$7֜\^אS6@I$ن"*6+BHm|3I8[Sͬqe{S7\DZ #UQEGwp.}Q<7Jh鉯\aS4* >yAt\;" gOCa|6V 6,vVF;#Ā VlBv wm/NY⻜s1^wZ1xB6vkJCne9sBv@>6*_BmMٺ=+Lb?wOߧ^b2[9hFZEKKs=pR羢GS.> i=NΡvS.^ VziG+A7J]suͭ#Ud^=TH1no@ {*yĿ C+CnJJA' TsDht Tyzh7Dw?VZ-bMM$yd%ƍ܏Lb5$B{yv i[bIkQ]]bГFHkqm'm(֚OC_D%uu+N%(2FG (ݖ,㠭lpw\Zzv4iUC2^2h8j?we8z R"~8re$ƃ92 "V ^w~6]'G^ϭ:44UOGWDa0ֲN,2`K]b9z7,I[U;E0l%rX\25~J[5r]1 Gi86!jQaOĎU'~S!56øs/e+K{<}úIY$t"i>oWDhIxmn`y1I#o񈃥 rM/q͎]&>|mezؾ):(wOnl.A()Åsu=i9ݬ fb7w +Nk'HTB_xzQTkE|#my"'B,J;lV=H8꿰u/rTiE@iL:(1 8{vPe9AW7J#[JW۔&S @8V,LRpQN$WIJ~*cQ}`֮:r8oh @uLJ o"߽t#n,uo7u2  >TV+7D( ģ)]=aUU,x"||ySkک{vB^%? ԥ'.]$bCVp ?eq>Nq9Tkr`h ңp '[3`+hƌp˟Qv:SH\1dCZ@LNvag_3oL1d3ga+L~ůo3`.3lȹ%#XĴ +gd՜]5qBZ-9'lQ'QD*fmHG-RC*ŵK1_4׸\"(]g2gYt??Ah2ËǍe]7w\N_aA6va#j?FeE6 DAb\*}ajoNRS:`s}O9;pGR&-d4 <|a|z+!M1V$pDĚPW7 \!XSbDk)q})Uh)tB?ԃW!{@87xC>)W"2 5~]X}L\o%MZEkhqrb a )f8 ^c0{Eu ]JwTe3{ioiHh@Q6!OWibT 01Pʶ/-*Ae3}pN8} ޤ*=Vۜmtr0^SBK3C,9ֲ 2E{+j:R<&AἭ"4#ȁ,%ؐJP9Wڟ% C4F[x֒b_|t=뗦Pՠ)R"wL! 0P|km7V?ѕѩy") S?oK֤`֌&0ӱo)1zR#t8/@-mKQ?cpRTb Ӯ5;]jD{G%/bi&?!fz6'"/5ŢhXã}m%v W ]#'EP3m45s#k>RHuzR!7R*pH:|⃌iZ!]djƓ}ptc2t)-J*3N:&ƽ} y? p?dQNÛrH%9Ҽ 8/i3 x=Fi1oԐU2Ѝ)n֠av ^)'pfYtҙY2/v f(1.yXfgr~iY imXz e`80L)Lg&>a<}tJߐl<0wL=Cl5h1D~m6a!p^.Jr=ңRy 8Ќ|6=P,Tovq$xVD y96{Qƛκ1Y|9H]B-+کJz%lP50nS?% /=qi'P<=LƒB":orKa=̇ a9TL`+}ßOB]p)J} zHmkY4cGr@V*4)*Oܔk!ɩ4,i g2[Pk&o ltU\#5TǓ _|xV@NU-CcTd$Ko$P!춖Pob9m+Nѹ: EM_Sd(jڟI?74NlGlP,gIVpg.SRQKm:[P?ԇh-S VO0lrU4tFh}H5xXѪb)TV,H.XwTyf4!f CNAm6ډz_9QhCN9K:Rc+ʹx(DN.?. *~GINyKrD:j 7i2ֽJ z̙5[ M' ozf_ómuяw?oPvJc *WzRO+HPLmycBD;zO5!J"|BH9C*2DD^h6$fYܚFV#CSdƆOէN#˴X†o1w"x{Ee%017מ)W-#Ja50rn/[ kfYƉ-Q̓\Rnڗt˝6w~u=C]PWc}5{;n{,[r&# 颲wj6+޹ KІ 4N'9}EMLΡ^W$n?\`M΍Ȧcӛ?%xqYQ<[w]g'󞫟hpfLq{i}{r^DX=҃h/|\:oXgcdD<v>c;)$ɺ$dǻFn+kT0bUќ(vkˬ8[iMmݗ545X?z6f׬U ##/aᨻx7K*Ւ.xմ@o~!еYţ̜l,Q/E]o.mobnA5i}ZPQaf_ Q`錏{,MVw6ةs Ǟ_]򤳘H`*@U n4!h&MOj'YjSM]J U#3xۅRR_kti r=t_BФ!ual6B^UhҩJF`z_^ H_oFIrRpr~lIg]R:7\Sz5BS0s ; gY}/ЂPC+4?%ɰ 5NHůwdx\nry569dPu!-ShMSJ+.!ߘ ߪ@VwwLV;A_ÛDuE=Jc]\Ǖ}> ΋1X;!eMb^puQuNe"Պvk1rʃ?*Be$r n١a72- ƲHz$вRh* `R56baAʧw {SNq6ћӷŠeE@>j~~o)8)Z$5Wogn6W ދqh3 ^ed"J~ יWꙏx Jփ;B)p@Wrz `/(ҼV0rg@q މ"6GoP}Y!8щ=9[kՕg!b9$[ Bą-4Ls>"?AÌK%Oa@bC/6HIza g=2̹)>!L 3V b{P.}\[cG6tY+! ZޫuB`M Rt-C;ԐF@؀6g71Uٺ-jSs}y%@b9rߞNڅ5N8oDw1yQo.oNZE[VnlfJVD脛U@e WDY؆Ƶ᯺@)ef` "Ɏ%զ g~0,A*|l]F!k*Pr=c,ś2U9 a;9*Z2@=v k)VO׷nƻ>.XӾWO܈hq.6OD`: lYXҏI, arb{1j(,*{`74dr$wʭyKd2 \ϱ NT (ۼ<4pKn,Xy Xa&RKeT$N h8PTJ Sga-,%ggHt[fcmbӅ[/~C8a4%jRf-~45/Qw^"2+ՔV3(W/~lE Ez*H9ڒ Q*؟|i|WGM@5rSPڷ2 NJSfAٷG(P|w#zR҆\{ߨIݯ ̓5m{R -.4LOk }c6 )p^?[L}M>}P_,;qyO~׿Ɩ|86GL>Ў] Jcbm1F#.!e9BU"v# -*uL Nzk՗ 3j%%~W^)!h-zaS,F]$nn%Z؈M OOE'Ҝ".͢xVxV1bQo\ dTHOj^G} Pjڸb3 oF,b< t~A725A;?!T";=AWL$b]BFW2Ųzj:64o4ʊP'Z2숟nDw6ibᯰvߕj>gZ~RDHIAR)9 dJ|ҕUUUUChv=A5yAH~S$ț8 J} U9BS@G+5-Y@SɶxWC~aiNg^B<eNӹ&hPZ3ax MOˋi$RE[,HTģ$irJ~t4C8-W88hX4w;8$ m[)eN_PWc{m"j}T-@)Ҙ6  $]-tqFp,V ꩵ6: zkkUj[YN` Gݵa 60o>HȤv6$0$A^3"R&&(%Kꫫg<$憆(D| sԕOԹ:ja7.C~9+m]q6ؙK陘vyTKtVę7òC?PۅBlBr3CHXх"框4045qh׿?mqIsx1iW[G>QC{UȤav "Wٽ.{C]cN 1o?AD^B=ncxtBNA&JBؑ(ȴ|,υ $װ\Voo "eb얒O,o{ gjƗ:q~'|MG6Y>0@yJ'!" B Ô*o K[B1ʼh(DkhV qNaw5j̔]}:}9MzKuӑ<. X6U[; d,& P',#ñh>hNI:.S$%{TqpR:{$p pvV_ 7T)\uDδus2Da"FNG-1ó p+fX.HH>o"щ+2lCa?hFrg0"qE,$}O{Ci1 =U)VbJq`z1h8^%Xbf_ TpmX_b'q}kreEVE8OoEfeX*{V Pt'lo0@m'AϤU\+'5d6-5 8{ȶ|<%@X`6)ڎw@$5>Wg^iz,*boύK=f(F0ʄ#|A?,VG[~J7Tc'?n| onXR,'ʁMh$ ˼zxc4TԶs"E<_GuĶMkC'25לNBWߞ9QùUE~!u$!ScDk}A~qFD^-jlX ÄC) (_vSyRz6|aU %9rC34<퐒bNAח;mtɆgw3#oS_FN^Y}}Bӣ֓wPgB!8 L-lfYvӲ'XgqKb S]7w%n K>7I[]X̀; &OC 2~tgP#d,+[a ӈ8.b!]1$k1>ٻU>%]]%va?XsKlq :~ڵL6'_E '=Fr gqTB-c3+=Bf]н j~\Kg@gBxd%VO4:7~U; W6AM^®#Vuh侥8\MĞ8}(>SV}lT[Ų 6 Uj:K>ȋS^\~w7ly+*EO{Eh(Ĵ Vɺn>1s'6NTnVhV'3}x]^ԠeM_3=&<)nJo+KܚzOI98 Dg )?&~SMe wH^vGv+<$E J ÁHy!H?Mj5,}of6RŃ LDdۘqÃڪnz!&vxj5鐳4T)LmdRԫ˻(A, V鲙_ !Xp2?6aj-[{pY |g%Mn^_"eV[L'ΦgJh~3EOchq䧎pes<-YPځU򅎃|t ~|I+8kp׈.nä'G=iԮVEi hovԧd/E`3 (vM>YB11gs_X#( +q!fS]g_"k'X#4[sX$/ _A?)CwPFw&8s+·90^2e#˯AOEN8 if,~8dt41˔0y |p ێ4pUg1<C?= l RA ~IEj;paW-LZ'TT*s*ɰ }mN29 ٯ| R}:Pf0|{ʾH쿬Ryr)y~f"ZmE?T':7 {(3DsP8j*Pq%<J¾#BL y`ZfCђ9P )c=Df(_qM: ,ǃV[(ٹbl|dT+v¡ɾgCbϻq Ekj'k\NH.Ҳ^ՏP)27%b)-6~+OX@+&2taܢސ.så7#Jo]MJf׊5vvBF) (Wv؇[Yr!Xu\.G ug֘c/Q%13e[:u;e #{MC ~ь#!uUS2+@*&ԏmAr4;KP~wi,3 3o= `c2v@.luS*[A'jvږwDT׭'fKHZ')Q*> j v-x|)xH8~lmWۉk$>jmi6Dddq`> [? ,.Be6(Soq^\bq\U)wuX -:JBq*bR~ l;$R*դ:s?=Vd"`QmÐ9&2uIthy3`v儊\rPxN/'v-1Ȟ:0bK,<ƀa:PO zh EzL{Xv ~T]n_1Sp,V· 5:*ޠѵ8 $@@I%44@'rV'A8zMPik(@z83g-=Se&D{2!RY>SY߀F@AX~8`:v;d] 5@tz)sւK]ޙczVCovԇvu2F5d MT#uXqSp{F Qojͮmx99 rtboB^w-?sbEn cyņ6[2_ GY\q]{ f2w$&Ry9- Ogb(v]L4۶87'&8ը,J_s^h:HQtr.1·4R21EFje6ri#XTa_/>lyCcỷIW,fQAlS`)Z4[1}9t#ˢCU>ք,g@cRа4b?3oٙdD_SIc!iR ">=w!Nxsu( AW%%%jd̺qu㓝\J"KAM<qiyp" C oC/MoƬZJBmcpsʬedlRHIFÊH׀j^8r\H?x1wt2ڭ% ~+\a'||Y ^PfRAŪ!B~6)x3&`+գ%>QiE!-S)63B%[;XN0O+0A^k,ؕ2Ļ_\Fo?LnÌgP:uG ռXK3pK10Ss.5[;@$ «62_ vJ|RKԩ`JG!k) IP OuWTOoȶ0Ҭ82!gpXBKMrq |Y mšq+i#'F&8]Fҕ\):Tɉ0K!987[0Ѩ֤]u6V@{f|OݨC OzYu8 =8[ M]^àR#D ϠTN1 Ts;#OE!D`֓&MQq7pÇG_a˝6v{28Qd4~qhoZנ cłC`uJ;AsֆG](4AC^MIn$Ǘ=A5u ~mPLrVBlLKƎӦXn@#,_m'80_5/} i񺷒tjt7ҖA$PF d1e햜^> U{?GqhqӦ*:ujǶT6ZqDTAW ײVnZZL5c 2oڠ Qpv&uQ׎T.&9@U[8K ]ȅD:M2p$x*0aY5!QBOi^ q&Up؁ȟgZgrk~Ëwa>'j(b 9eQWxt/fA$+CBEZ"Atq[ɯAGT4 7 H|(vA4:=o-8b=J>[ ÞQ+W%8nBEРߌA6XU݇x*51^EhӎIYɶjltWfH'svzt! &]I%齸|tVLݗM{l[agv> `5׊> 5 _']*Cc[[QmsOKͽ'@nAdNV:FT@euC!RW-\]1gx,N-_tgݻ ;yV^ߎv@q+q2IWc6MW֥}k d>}v4#hqwan=98gi& !afs7jB#9imX;p ߬tm1)YoEU-_ǃd?bֺc(X'U%vƧfZ*bE k:.u҅ͼ:IE1qBQmx=q|V#;^q4p8c_XJ ſ1 N {T#cZ¢xR0LQ,mҏI, arb{1j(,*{`74dr$wʭyK~AFfFM\1=.>󄥱XD2|N/= 4 O[<*.\S Ж-Y%^K'N7sv&d+b$1U˼dVtmGSNTJ=ޔe9’:."2D3jIP|ЕKCʰ'J8Gi/?Hլ|r`ȝG%M X_4H+}mdx P:*r7ly^6hr}oS<(Rkx̅eB3 ]q. ʙBtM^J cnjm3ӦRc[Nx:8HS@W;W/-Qmk"L/ʅ 4o"uI]8W*w?Ck>~)I=of6ehlR7[]oN$$I[.!5d gmdNCueEQ D Ż ލ"ϓgŔ[me&|CQ&x5 $:Uvʹs-Tc>lqfd !Q]ֵR19}u#! qw8 "K3C}P 2y1L9~ ,HwC6~7 0b mJK_E+ޮI^ܮj/ڔ|`ƫ0T_#m:og}j;x݄@_zWwP5gX" L,‘RkZjR)5?Oaq8`׿e\>/^ւ '^P %+|{yMMutۜ<k=VԓGX4Fȅ?SLnđ8M|H_e8XJ 5yCH:@c߸5hRzwtzbȷ<#uq{= =m_+!rN-탐F٦c `C5"ո>xߎO%yz!(6L)R4Y60w ~C{fM j~/Te?R\8:s.D,>3JbhV8ƮDH*td~芕ljqD6a4|@Cb~-{(<2;D:'r/:=8MWH!*ϣ=a!cFFqK%S5!|LS3?0hghJUUUUUT>DmZM'u~AIKT%I?[E>>YVRd0 W9+\;Li~ɹ\.hΛÁxyiQ"R""Xs֥9)uS}%G#oBtsOȂpA4Pq6q0znAHD0I6@OFC|%[ c}q"!4u/M11(M~" טy|MqT(F XF>(Q.>2"=޷X'(i5(Wi)_UĹDVb8lTxG9@ÜE"՘4D۷.lax 4_j[]} BgE]ibtcȐWŊbm@3ʐВ%d:E66vIlܴ$^gE}|Dn?OTM?ubT# Y"{;3Zq>ZS~ (HQE&4YE E%m8Hz8$d<^ve" %ʐ-D.džDЫ(gKl̖zƈ.+a(Iږ*QCA9k!uӡlZٶ@BΤQ6A#+eJ:A 5v*AjJX_ڸR_aBJӯ2*0IB9kqxXEm a$ޘnŸC ́^NMx,k5좝 덾Es?$_ *h+˻í1_elJE(mӔRԼw+)t\*KaF; [1F ?}-mXvq\;/^:2iXcJg&X_M0\￁5s\WBJ]/Ş=~Q s˫9)Ւ_zf1c< $gKy@(fLa"l_%P*(CBmHgSX %5R9 &|UjL`An[2n]_J6NM g; Jk .Lj@0G#J:K028NΌkN\>OΗ쑒*g<^u.s$~TrOH"2]#gtx륺jqfpTfGi6SDYn߶R{+<3skMCԻvlRgo"el&)u`Bnխq7$* NW̍B턒ρp0w`W%;~'Đ2]yd+};^iхm?hí3iwBپKY6=4}I:6wkY;)53=e+Wd H )~<=ZTf$F4<Ez9 ?k|oxMqF,ajgn TVb}d1U'GU|$z*F5N(hd˒RSN {}!v_E]쮮`D =# lRA*NTyA7\8H%;c0[Ϝsm?f "uxB|ZT]My4;j[7؏Q6s,sT}iwh~@BL6'_E '=Fr gqTB-e36i^9`hթxh499$X%9 O ErW&N_6!mf=Wž%6**FՍIs]k3 *lYSO25(KI (eYU_C]AIAb1;߶H!MO'UBۤ-5?9g I)5N^: @6I9[a@0(Vd!E]c)kOqԠZ ;+|;U2S~AGz"`~@_žFT6&7఻+%Pg*yAp0qkNctڥϗ"N_Zs+cنS+!sWe8{ a]IuYWκ+W+Y~RQz G .)&ًOHL`vsd2Q)/9t=mZ15oZ`CREww0NBW+QNYINòsyk ,d!ϧ9ц7pj;-;B._ˉ RbblsJ9hSMq /ܪk[p1xTpL@b2I5}Pko.!6@H[$o*(U4'*Z4odI^+Ȣ; }^xw)rQ /W9JJbt{`3F(֔]Bcn8pkk^,QQ1f;RS6m̌H{)IĖT;)ڗjl2,W璳94 thYv`I)5P (5to EL70JHʞE^?(lcƑ xwDU#Ԕa#gC*j.um#WW7dž"-0Q:_ޞ5;y@X-'8e}t`ȔZ<($Ay"`3z\Q.'gfA!hj Qm ~R*lwͱ|yA|ⵅ|ߒ]W{x+\ėSmԳ#3%3Naߦb }%S &5^DNA <[(,6e#V[pHB.'6 4ѨnQNȽ=kɿָ_GM4F:1գ~:$-*\c9*?g-6ZKR_ O;pk?Nszπbu_)]5^YiBO|t{JiY1&>9t^*ql)q>޳j变l]I, Qan|0) ~SC%', VpXᥥFC!`U#?Nwh"_NFYVTwa,aV<"'U$_W3q_[AJ!$괇[`B|'-[_lPed -HE-H_ !*[T)KSNmRA\+bȟLe"y: ^vx*7"^⃻(Ii..R1*OrB (n"/h`#,C&T dL_,Zr8P Q.X8@3gK[9zrJӎ9 /=MkL6XК+!MږwDI>vЈY@˂.~^òhvCD#7XaoanR|pEsPWyXаOöǞdm0oa-Sm0fdR63ʹȫEBe߽޷ q,9/r1WmT8YTʢ͓}i6:~<i+@ˡ! Pui ;-!+1vIru 4KC,Z6aDQ4 3C hU slD|-T/3j3 o &1&-TOr#>G~d/+"W IQz53[L6xWex ##Sa&'9s*$Qv +%G$c^q2] f?0}BcCjwD<;W@{I^Dʬi(sze?óf?uӏo vu`Ƨ2; f0:n}F)Y;ѩNZ=Hv,cZUo3"@7 $e QuMP_0 +\&8dI]}傮#zk0h_qQ 8KXXu旯*K["2C_lفN3- >ӂ&7BeO۟1}몦y$9앣6-/™fe%) QE&YK} ^+h/TK4mD/l1وb!~qHEDOO?=7hyK/r&q %3}hӅggΥ.X#Y"aZKe?2|i_/Vl@d% v+]NڡaX5+XZ>8WY}]@/n3 .*j J !iKYjj;irK}Gb~Gt-?$er% BpAxpQsFYx%O*, |}'#O"LLo\[3tT4`Uz MMo{+t4 k1b22!BbÌQ2\YuEN/5}NUL)Wt: UU~ۦ\;۽=q4}T߱?ov4#VyK Ua&d]BVx`d.͘.::LYvR>4S LDQVM*{,Mqvo:pQm9sW@88H!#5`Evt(l`U5*E4$<4ՙ&OR4C OBn+)Hw;aoƃ$bˌڐ-+! WlkEQUzi7k|S^ؤ 2Faju&m"AzBo?l 4ʑ xRڱ,׸}v.Kb(S%Hȑ*+q{P.m--.'&JMBKaB|+`WP`.'sCB%vST I%uL.3X> *b]j9QrPgn$,3`L)ؘ1v␫ :z-X?=Ǖ1^ȹՀ Wש!JZK9% ul,SH] 2yC=&& ϼa ȥhѪ l7t]*§N% }nCV!؀XZ+%zǒ,ȡ%s Abx,i;ڈ b3/˶Z9S~=xYkLq܇5׋\ ؘJ12x?45S Ye0)Ba B- #wL&z@`9-@2ȡ r*\*?[4(; 5e}kcI1hR`}y QLgN>a֍LޅaF (,bgxO,ݖh=eAMW%Lyw 6Ć.X$u@*D0(|`Wd\E`X`{6ET{9vӛi᏷gtI}l_k/=(2̟M춼͠ cswݻl8΃ܧ૵Xn6 mIk(E1ῄkFXQ;5 CkJ'/]^LJ@$Nƶ JCBk,Of'(pN"f_ >IRέCy%8 UarSڴqc6?6/݌|^a (qϳX}Ug{h<64#t_jrrU $PZ%  Dxn!A9̀"cs-;Lɥ?G'Z^ll^\-A?1ò_hQձL0atubQ.Ј]Oz*gN]A#qDN# =Xx<08  K)X.Ž6 o;&ZǷ/zioH}AOh᩾nʨZϩfOm粛z1\MuUVՕS;R<kXdҍoQ$Nb5(J+YJ&k2QX!dў1Tk4`8s cX4ZT&w1 Fhgƙ?R |E#.ɛf@xH(MkU*R1(r_)DrԝR l#?u}F6R5 {ε4m/=nZ;x|9;ՊX~#)cT$7k POp+KC ́n.x7ΛT.߻0x3y^EM:RA;x݄@_zWwP5gX" L,‘RkZjR)5?Oaq8`e\>^"5=ӣ*\o{6nh/qF KiAE+R{SܡJ_.E J6gݝEoeۥ,?9Fiuwcd|a=-jT!-;:~,a+Y2iueb2r0'C _lIWunB:i[ 9g v8I-hgc ˧<(I|Bp"GnIu.ߏQ̹wvC?*=V(=J0o0D@&~k`BFO[JybdGw[=CCh'ҕUUUi<;>R!DqO_7!'9r~?9bFI+I~ocQ;(m&E}f,s4 b,jU|vH}SZ~&yOx GT1R|+gLtG!X#D b1-%u Su,-VI2sXrO~%ڑאju_tPŪW$Sͭt8n4M Zm{xs$ڟSa =jqE,3k_}YiNeӗn{8jfdeе-,YD++_Ҽۍ>VB~Û]"Bv++m~蚥/{w#2z3@'Sx{V)I*>_`KB:Cp0l)+/(.W'2b`\XvV|N xi>%FiUaǺ`/PeU2  -# .X<ϗ#Ą'KנR6?ԉL)\ R1^u=ӫJ!,T$ tUi> OM&UfĄA3ؖ}D&ѳ_zV)W@\lIO0!ݡ'm]Bf_U#mzACnî'+=w W^s9 _~xDw-W؇Tי_I b|1)'.Q>TZ!;,'o$V T/gh|%~wt{Bz{:*ҴTIey[rH1P|G~S I:gW8.zQH Q$YUЋFmxp@>0Bԕ&(}{և߿珁L tR{.b,Zzxb6jw*rr[l{&] :`_f#_ M!|d^84{ł$onwmGKHf5mv#D}xV*vƛA~īFƳ>x:_ͲyF' sGd*1:%&SFF|no;Oυ( 1Ft`ɻSo|J%C9L#ɋwնbRtpqmp$5-JSKuu¢ĘPN&coJDD,SqXA2RY(.S8V6+q[%[AO[(50u4R_tݎ>7ӖgXp5 jQJ1z.8*aʓ4"<ңvq+#N׻׻K"b,QgDyE{{AF:ѯeс~K>vC8z!/4Q$D7? ף q~]A7y b]7d2 Ŷ6FV ?r6p9C5=M 6$ִwSovobWsv\QrU #ݢPPk?E~Gf  0Xܶz5diw'mju)YB%\3\x "1J ;Zh͢bb#(#EkvT5>)Q^yq?'per/s5 k,Q3gj,i,V"Qt|`?) r?~J)w+'/"l6=i#~QPz>[d*ΓU:]Q14avt>լ mZqhW_TR{8h,I#\iM+j\_ /1_O8P}ޭ#Zi\>7g? t_n잃:!MY! EXJky7Iu4jL 0L?@w+¾(b}25t$!{d:B Fd{U%G%Dox:.Bw'6Ŗhέ9‰8}7p:];;E[#sw785 OWq@:5>g,YݡQ![vC&=l&O҆#`~`ᔤ =$~B01a P ؖ׭ZXYٟr*:}vo2kE[7+Z><^4rtnIKCgT$t4/t ^"WwdevoL] f?0}BcCjy[H$KH]\֔Ͽ `88UOd>AkB?}0 ]Bnu|#ئ2)yYX¶oog"^ooooT jB-oooN %R4;'*Oڞ8ԃv-ma4D<&-jifswoK'N܌@rae.bp|0Z`뿕A-1 f2 GhhLTW4c;Ե$9y7ile"5Y1r -[w^b >>BzR+nooS|7|7|7 WA ڨyyyyyyyyy|N?i1#&3SH7?0e00h\K Khw*G`X.?d(nh%ЯlC,rg5m TY@)UWݳ1U ϬIWYo&T/y$#Lu]Nu1 KG DBS8 OKr\Ta%B)T7?5r?|zйmڐ ;] Z8E>P $0f gN%'K2P"&q)ޚ-!S)!u&ʤr/} g6}g ISGD~j҇0y.w>Erv IZHa1'0qh #/jyo":a9i2% ҀJWdd17fOaH}Qh=Y,x#Z* Kt%Ryв} {m7p h:kY+턾P;!^7>GSN,_K|PG>my)o Lᡓ%s{To?:f-lP U3e&-%~Z^P%ϯcmT"n#.`XYD3$E+qXlJg39+,#3ˎ<8z5=ehl\}jj\iigJP=U*r+0fg^p{ZkHx򮷕z+/iȉYI -z?&vпPR_lyPlZWMcXMzYn]HSv11T;|E̝—)gu?_(PoHw?gN(52vdfՂ/^UN0O"Yy*Gܸ|;#c,AQvEL]S 5/ΗWؚ9KhH3!av ߒAU'g<=C&*uQ3D,ʯ,ҘO}RQpg{ܦ[lw?ٲZEƒJ :*?MaHlYг@.VTj6 -F'NJ:(JJmy[?nUό@N >+y י<?s4nd7l2o%)7EHҕXh|j PBgZ(|:# X _("7Ӹe8{Xq&:OFKcV䴑Kv>`$BֆR+tMeG[圭3s=ӄ%ۜcs<AjX^lPLxDY,`r#wlT}FF%o D 7F # lAzw4t䷝%Ks@uIWZn\ 9XUhh]b|] dr&ڄH(~GPԜrFOk€-O]Vo70uxQ,Rs/`W & |hVP/:\6aAʀ}Jwzߩ~z)R1ġ.BF/LǮEo' z3a媦U%"t D~25]*Esp-OYLzi367w92*e*&gz"'pޙ&sc@)okx9(r2iW]C+x(Ej 6qZ+Q^*ӹFPpM&jí wbg g'y]<ěkHv;4H+Ήy63Zul3(jb?c%qh&' !,TɃ~<`} ގga'_|-{Z]i>6D4+k D9ѥ_H.% ^)wɂvc)XTב6KQg3y#cquDՄxN55J^ ]H] E >5[L0C&]1nBI8e/ E 4ji$ޱd}ViL#4 bvȥL1 )y4$/<*Sq&5&H?P$@mQ#cm \M*uCk$Ac]VI,~qK;\<!b"y&t:8o}o WᗋHpdj$02>vfgꅘawҒ¢տ`Ֆ~Q3(GqSB&(6E R` EvR'`~\Z׉r4y0O;H )vQ~&I`_ȓ2HH¨"0y׏ġϠDz"Em]C /P:_;7PVʺ 8iο1sZ7_7|@]nth/6£X;y $]N)>Ў ڿ%5PTFpnJd_|g7]+,='1c6;UBQ8d}!-E&`;dg/X@㜎nBe412Xa{HSm%@"gD祉t55N?nOφg3.F|FF7MZg[4v`OCB"M^ !!BDl A.By{k%jpfxu o4Kn'{t_՟yG S ]\SvyƧ[%v?m^ vLCPk$5'.͵d]0.Pv-꣏=,1܁I mmDnnI*<=U*;4,^H tەUӁ,$[Q/k1QG OwNl>q_?_t j&qF g!rdCY-Ǟj`b!)BMi݃x!= Y-P@VB:l+^tQC;Mvr(>ƫkG:YK?ѯF0/N??( 13IIRL MO1]Ӕ=a7ܾ,o­XӔ*M6jzm x'ޥsV4 BCuc9rw&puY=?{+m䭚87=ƼpkDԬʡgx^Ȱ<ϼyf5-As w2 IF7STvK0X+i46ԴUɧIH߂eJ/yKE?8a`*]Z1`Kؗ+6܅\# 0Q1g6WF2~؟b9(.J[nsV83̮zR"qdDbra]Jz\䴴Dzb},>^߸IJQ;ۦcͿs֍Q>$ke2=+.Nax'k`&->`lI_`Bs!)Xm'lVYWtdn\ڡpb7h(Fs=Unt؟ӈH,~B#Ȗ+MZ}jq&wQw brBMHhMwHծ=ø3Hdp|y,۫A:D5C% UMV+4i%JNԵ3tf;mT)ìVLrpΗ Bڐ_FNo(Du g3R"bVN$ʻN5 pFj̸9Xe؄״^OF5Y{T0/K y1|&/X׿I ɏ8-Π"o9<2OX$FDA:zXg<4oOK~<2NU֎Q_@EcѨEDA7ɇ7"XYNeT9%?nš{'d'_:ZZȠғf KZa{SA>pV֗Ӱcq`0qqDHbĢ!85Ѭ"EO#O3?lHuphBgh{!Mlt!bf 6~3V^*x?>Wn];cKthCuzJWKq Vqxehb ^lɿV}n#AE̠0"D'fa1HJ=?hr%%޿,@$!T4Bы°#E CyYiŭ+5@ lR^#c3aMF\yyyy\a>?i hN:G(?slf /~Q -)=gKхD~06g7?1k !E{Б R`ry}}OAJfܚ-̍g%?#}ȫAt0'O.:1(H&LC'DT+ P25< a3SYN|f]XGi Gˎzfqi?̇4F(2Rk⎼}H+@N:*Y٬KE](Q74\4GZxiTNx%ՊF=P4dMB- wA`C=hfy9֓n $< iX z |5w[nB1mtyA y Isr?q:EڿmS6_;n3R5ΰ2z<(}-9l*rp߈ZëFZH-Fu/ ١4$io.G $%UaD)D>l&oP5cu.57˫IwA\ty|HF{o` ~SQ8UXz*&L+zm*Eddn ,3py_ףk8ip:%,FŅfh}N[WmT~*w[/StvmͶ3s-c2騒̙ef)SOR=R؂gDZzEo|k]E٨V!"n܌JYM t]e ##rBÑQulZ>wk|P 2<<,dh7!C->DJ:j# VD`UWEۺ}WUA`<٤xM{h%RV~ǁ\wMr4 8 pX b=[/TSvPrlCyqsQI'vTlz$H] KN4FO=@te6UpYK箸Ls./a|@D2C*rpC%M4jcArdd4v6(v)KJ3@x+J dC3ǒ gin@I& psq3dpN0z^<E~n%a,C:$J[h.(Py~Q)Bk6>ۭgͫv, '.<%-Z{ PIg]4 t;poxL>-1rRyW ;+P>šy)4圀Ϳ P.sQQlp[u΄ݼǚ@ii, }6znA P}b7w)5X-*"k$5Q+2+Gg&P̫-r_>fnhr<} xTP^ܱš?,_;ՖZ8=OeJΟt q(Rm(I%lVpu Ϟԯҩga&C_K?Lbɐ^S?0[TϞR~*ax/ AK ׮tI *q55g-]Hǀ$DL5J!%N0sXtĹ$!T%̟D+CUUC0`ŚwnQcXaYFpRB`rܖdվ% bpM+Fj/헛A7_7%Ûv'Klj]j6R^s+O-"yS_3L7*K4sPc qjՐC\Aʰ')cv+*աAGO,Ļ@ C%T۳y~bIКD}h Bi@k|>)B2G5LI)4=[!BA/cCY׿& J2] Dp+;8 gH^ciAf%$#91Ze -! /WL}G ,Egb"gϦ1?\ .DCKe=e@V (7YȲ,B#gx 拏P9,0~#dpwUJR냱zۑU]\!>PBbה:]/8͟7ZȀ`Xu8#$u ^x@k4Fp.sļY&tl j;WƝKnhr Cb1`xS3=^.ŏC Gᐳa:!(k&[$R0Zbpٖb!dVK;{* $^(;G<:mP]%12Xi_Dַ{~7{ArWwfF(@`oE=ot%hw:='҂l0a+~AevDg_Ҷ[?f7JXY?ISMKi~Kƣ+){ކޯ+4WN&}@a,3KS-t4hX{pJ:f|7+ŕϪ mi~6}c"؄.BQAiQY%fjwDQ:s:t3-òcWU飚{H}:1Y!8K!0/G˽wdIR7 'n,^PlchW=ؐԧuyt=z9@J<}bz=1hP6?A2:,o&[1U9&*G9G}>$,g evIq.tP(U{BآN^|v >8Ұa"X֟+m=x#y+ u6zᠦ^V#gC]PމL/$L6:O0Oy~x{ Tb _:$,7lQbW|i97ilVhY^s-s oȐӀ `Gr[KR$W _Tᥒy, ȯ却gtahy;Q xpVA~R\ڌ1N.{lB4CmmM&`~6M#f1S׃궋c6]GLX05m.:_A{ýXgׄ {)RL0`U9 GzEf(R$^kV'!53]L2aK5F{GGTcHMLp|l^x Zmɺɸ(/0|$z`m|FN5Џm<ңƭ/#lb"3e~LWICwRkXy]f:{P4$awĴtp0-eUvk\ )U}LZU\gMfywSpY .b `TVr^r__lɈ\VrhHa KlflbQ@t _=Md\Gd@+.8x}4?ŸP)bZPM/WKe]YVJN"C4*3C={Oc2%ěAg{ʅ&ŢB\6%OP`OW9@p2ZrZ5DWOUa=ۮNge,g3}Iχ1)`ج]fՊWw (vth L!uS0EU1CW?}f˘hj c$@E'J27Wҝ͓' g6,kE'okhh:d"Zy6 ^^J5 Q ;,c#=RPպ?\?&*`IŇ ,Ƀ vBf%hh'a |D+rV$(t} !w1\[P4L+(wqjuՎk"1^W;h679,-y9~&)T UL=vR >YZx\^Lk*VH*U>/:ִa W)%Y)ྣ `3'{.*OKHFuq:sZEB2$&z4J6uceQ[hY+Bn V4 0XT;0p &{] G| }7jDo^O#M=hqqfgs@b : SX_pu?.%wNyUI@.eўIPo(UWI*崗$O817QuSCj}YJb KٱjlUes595hK9XK"!|ΰF:M'B0fRb^ӝ;avl@l@Ij^뮯h !W'Fv+]`׃Ǩ%R6/%V&_hâ^H!k;I|h>74y+UbNH(^õ?KVب D7׻JȤeyg]jgX \=Fr2&(5Rt-k2 ][0kgE7FFrKp%r[uبaPDA͢jYMUd) 6B5'4.Di9\HTAMzЉ%:.' g~Rt|0(-p$E8ߕq1U'A9B?vMrb1KM<::g#fE a- ;0.Kxs Ds0fl/knLbV)zX2 AU[vy|&9drۜ |٠)mr/5 m( ?}j*giW1 IQ--pؐ"ޔ\AȿB%}<V`ܮyӑUyo(#zT $m `XlcH3.:qfڡ($A)[R/bFK5gWVt;IRC2!!$%Z&03@5H2]@HI*S*D-6 ygŢ|+D& .1PJ<7j R~HI?ZaξiNea`a%vl+s _;\vT]OjY׮jOWX#STK6XDӉmX+ ?>"QxMl1H id%珨#v+o^KoN޾M[>F!/$ӛ`JwfR8X a#Ep01:0|g]3{zD.[;!g%Fy Pw%NQF=fGw2_DZ^.?_<ъ |:U^۱f\+E*)[0ݡy٭*4f( :'n?> ߶?a&fA?3듫jrZE<<$.p6L<| i5|҆<͛i?L{a)+wÏ3Ӑ 7"#5DܢފjeD1#ߣ&K~a;R'Rʆ䂞}Q%dg\mdڟo ?bY;,dK'ʌ˧lvI=<:}PZ z$&Sur(P㛷AoC=I.Y<4p67ҋh&wOcqD{{_3MsRvLFx?iiUɸot+DN9 "J̅wp&ko۳Q\"bJ bЭD*H2.a)O|uI 5W59Gԫ۝cB,}< \!"oʎ*&ً|mvχu=g9,_Pe&' A՜2`%j+~QݻB~:fd >x7\6UN91@ulNUd9#<ЦZ*Qw}@`Ϻה \H+@HnEś!M3C `4jQR\f08 Iw)ůeTqC$M0SWXdH@ᜧx<18hqF^12*7wIíVxPlNQ_t^ Ԝ@H^pfr9¤:zYHQfh6`QOK{F'`'24GcՌ܇[;" (Um־=Fun+)aU]X#וSSLI+đ@F9nQIӤLsq k]K.cr\?Ώ(SW"BP!\qewOmgkܜ܅NV%1'XF/3N"#r #)褠; I9FR,n4:t9I?u?2N^g Z`Ugmn";0BusX-\o6M$M>_ȴ,ȣۄLNH.jHД#^y3DyYf %ʓAk~4lOfI%ǼG᚟yιeW`tL{P:Kˋ,>"4wjQFL( hkgm2D8E-ץ,sġW숶-kq #"^;LCfh1eGY=q5nԾI-8?Wmv_x} =1 !>TX/:c04% o <B> B6!Ķ_*S8z6Q]NJt+CX}Eޡ.d^5]7 b A;Z+}Uq4aUm~J7.< @C [rz0eՀ^ Qk`vggHaqb몔eվ5'_v݆KS]]ɛ Jcܒ‚>p!SN<}C}PxxKEWu$L\սS$'(q>JZqIw_91{α_rj V;eL~ bBUӫ%lnݸVJsAux4YZ3NיxqPv(e6I#ˊykRa`dw`>4} 8͍jP+n$<2$]$[|^zx3MAg ^͟ScD>uTNܽ-FcQܓ|f آec{R tqF1-6 Jh;7KĢ*s3Yuo=9FP)IUY[K e1$WAR%8I#B@x,}\)R dg,gs۴ݚ(h hJ*vx_oL`zpJʻDR2n[7b.LmPmKqJ繍cJNOC b;6撗b;0.)ElGC ji>5ORvsPUp"x"lMOD\ &GKc1^n|T6Ah&xoʬpy#'Q /ˍRy&~4|Ie lKm2||p̋NwGc]x} 9og`쟌IsEoMͻg #N 3YCϐ*=p5IBw#TMLՠOU[FI2ݔ062"v-vsr?JVeނ0vشa7 *#Ee=PFLmA$7 4%tS-&{# `w4kPLDDĖZrgSgGL4AaHSc 'han6$i] utg{47,s"rt&LXtk;`:cpgvWUC3]~LNNy"+H416*[sVql,f~aӬ!k#SѤ'0tu@R?N`B|}Oto"l׾?s %ֺ+JW./ׄ:c1iZ`xIQ^T'O77#בp,0VFpm9fakm0liTҋmh*͜1͖cx[*†"o`L_Ki;,;FaH NEIx"d"ȧQES@!EB ^?$oaB(<*> wnm<ï,F̃Tk>>WAsһ4kjjuSJ[y VQ) iz,fp5{K"(4 M7'[>ؖsd'Geݺ+3c#~3@T[`8MTUq6s.O3yh_7s|#en4L3W20S]2Og=LT"J~xZZxKVrq1`$H;ɖ7^M͇I9čS)a^82%;,=PN:c4 Z(C-f ߮pC 'W*b-tz؟y9x}l;wVeJzN5>:\MO0mW'~R# DjXtEzHIT΅Is9݊ ܏T\UC\F=eɰ1ԿlP Gu@erpg$ut<]YJ'i_["o DJ<vĔP%f2vP#b-C g!QU[p{I'ayw"Z3VҼ.rWO@5H%ODebyĺXmf|v/4dGn2WXs> W4n$ͦP܆tn!NjZa%[j8QShhjCaXC b=`܅Cz&nP29l'5p0(OUQk_?~X< UgA@lTh4殿İ<'u *X\f:_=mʾƎ(|FfVc?^}C!!SgrxK o9t6_&"X~ކ*Y{>e~Q_#Th${tdT,D`30R#wY(Ap>z9.9Za>f|U#A/և#57D؁ꆉunL|nI~xF+b wӼf5b Bw& &g>4G bUEBÎؒX:cή)CX; a}AF/!'bBbnl1TO X;qB.8+c*^mMӗbD337g)-fˏTwU $mK8Tn,cH@d +gaq UGZl< F-){~Ѓ1ٙ`sI2%7 <_XļNyZ!n;"fXqRl x Rʲz&,qQw+7&Ńc5ARNe(F$A .F>QnDJ,mN{KB5͚,1>~l83qtw$ecDj-T] ziV(,(kPiT,[eEK7k ߯pt'h C}a~?VC?t~ordrG/ozCӗm5_o;~wտ~Ng ~ތ?55K~owjo{: 0OI۳uAOW8goQ.yf#:T.@x6SHG2XXrD(F1g1Y $1"?Rd+b!i#f"6 g' 7* ?3Nb)~bET>iOC_2j.?q0Ӵu*2A_LK9T\kUPCB\NU($ Đ``F72eq,3 q4 E 6z[# Ug*J *+ԺhpBi5@J&d`ŠF)/u hcAW -hS$#u L<"7B{ֱa';9b:*?lw$?@^?gF ȎۛAn8[" zB ^ϗcՓ%HrutXט= -iҢ^hHL %>HO?E1h4Ͼ[Z4#ŸƔWNA:zڢWص:H+iO(K#2F"%,M\r8 Y}Bsaq*)֓g/.x/ARww{6m>O(6ςDŖ,"p.KbbrkD|u<QSDa "(;UU=܆F>;"p@pvQYV?jF\ɮ E-cgvb? \t(S'tN& z0I !KIL7Y9AuNR<'P/:\6aAʀ}JwzߩNd*^ b 1 oTRS'_Fe=oSH >ٞ/p?$=^zح,XӎZi(x5 ZQK(lHδ$ZF^߉Ϻ +M̕c'Lk04٪z A8+[D}- c +}4L1M34$2^INyhX޶RnIuw{|e@SR`7fݍ9L>wHz(V:sVzW[8'U1mfbab~vi yPh6Z^5Õ:AɖUъC1 Wcp͚sloDe1r3 &<޲*AjLl@-u#|BSS9q=emu Sa ?, JI΅2Q5-ic=Dх}-0pLQ"څj=Q+Ϫ$-{)8L.$3!q0/%ց#R6 €M8%byQ[p"u1,xΤŲm{3Sʳ=?NmXaNHr >N.(I)3^3,}16QI[K1¶t7h\ '(/Y9^ .JQ]V8<{.6;]90(P 8>KGbe:gs 9:l 'Em2гe~' ܩCfF0\BRb(tV_J8T +dI-\IǻmH^AO@z`K͇0 :(}R +X]}'`˲2'9?j!TpO*FGy=J6wzs6edWMͤi1WpѶ%fhH)9wSIqt8L@Q% KA-$E ;ko[YO:7th. iSU|KŖک@ BZޛul6CL[z.*f<:f&9]YeSܦS$Vg:l|XH/`[3`BQ0LW{H| iKݾ>|>Ao'Jʣ\V%h-m,f5+SvH$1%a WJdZ[P9t/zq|R涬^ފ=Uҁ;R*,f+"SݩH{g4fD ܌=^wϢb7l]tE[+:c 0v*z Δ^P~IۉtvSs7bQ_ Pha (.C58ś|}>FwИ}-DefF*ۏ:UOoq*4&]>| YU#f.iKja8鋫vf_>@ڌy D<<XNrB|85̤4uR@hK|]@,u(I7 8?{o m4 #էs,=H)ϡxHOQ(P~DݣII_O/K87cXk)zyձG?5TeәcXu^.³)kO5h^Jj^7ӑc)4з&ܮ֖ݳ;d} kg)t#$ir\ը t " Uw! hmc#/[E#uS'Jg͈^T7|6fFt:f#JN~YRv^k: NEe_326L1 A;65wS-ĬV&})DDVPY*=?WBR6`mXe9`Ֆ|̓[=>X3)E^^^^^^^^^Ç(0jeK@rQDGܭNxd1 3f:3.'kP'IUL\eYׅ,.2= WFo_]gxr۬o7XhCg6t D0HϮo<_|Evڍ&b RWvl7 P5O\sQc')>B śP1{ f:;n34My;AG[&L0zBnZ:/@xHb|kkC;>a'̚Gyq.۔פ5R4BB]51'Q W X,|Y*wjk{8 ,7KD.`Iӌc?AajN@hTc/b&iYgQ1{8( =R dp(͇c˺|ydD%Lѹ!ыd-:>CgŽY4 C=6Gz)36~M:r=$d/e:8!ZJk V *k2pD}LOoUIIu,'ъ@볍ÊȀ,%naIa|_<z}24[QCs/n^ čC.y? ^p4ICΚ4!{ i"r{IDNJ<S5ԝT6I!蔖8Y[܃IMxISE}i:9|q @X264w.!@Q:]#b0G, Z0̣n>3_H\Jt0Gt1 28q'4$__*R:IQXѭ>ƕ; ۚi{d4=9QuJ3s~}.R.Av sh1 o[!OgʐZbYxE]+Tc@UXxƥ\ n}P/Yޘfx&'%MScA,` 4bUrmTÚW(Vc>-}yHyn4Av+JH6 o .BQI6I4_b;(Q&R1UҺ(afIt(Zu?!&B.27mHߪY \=ތGFnJw\ psWoBԗx@@c5+ȟܧ6<~ @bI S7N/sW+V6$tP޽4p[1[Ch~숩31WxaA?Fxto00Z!^{LS!eҁ@`# >@uu i5ZDkRDRSw݈eYj@M_YxT.ޮ,_fNYt=Сc(VٮLHp$7SART ~.tm5!_ivx`XN*-f>Q(WK}\Kt|Xq)iicb\l p{Kz\FӔtA`[db"d~c+,jbɒ%Hzf"G Sʺ@ˆ6ϝrqܽ1BVyli&(L; ޾7f(9|>8jㄲؤ/d sEh<3JF7 `De!Gc(xKX`#"+ =+MtgV JAˇZ+f[zܒbK(2de=nada%VoYÞ}sj3' xxŁ bVK]t)F)1,2>@c sI8~+n$ 7dÕn{=:^UƆVI|@E`p`N$ʻN5!j݋KIDBIUbzH$N7wWG:8DCu;'lqE j>)̸F _aզ,FxeG; pbPeBҸ?V:}Ac\{FMt5]KN(aV֝r ?.D5,XDb r KV~X%CdSAYK61OQs|ah;Q})L."D;t5ējN|7٣ؐn1=$#}}Q3`V v;wdh7Uc~4Puu\.& cq[aiVz/Px7LwD`"B!K2Q!"m3ӉV=O 8QVp?"JlTvF74ӧH.r5sX= Bps|I!0d@F[M2<*{]\USrsڨNMXwi g3a=$-|&K$1Y? KW[ ޏw?~S͒ cdV^Ɂ'cA-; v9+@t<eE+ d'_:ZZȠғf KZa{SA>pV֗Ӱcq`0qqDHbĢ!85Ѭ"EO#O3?lHuphBgh{!Mlt!bf 6~3V^*x?>Wn];cKthCuzJWKq Vqxehb ^lɿV}n#AE̠0"D'fa1HJ=?hr%%޿,@$!T4Bы°#E CyYiŭ+5@ lR^#c3aMF\yyyy\a>?i hN:G(?slf /~Q -)=gKхD~06g7?1keYIfD 4 J`8x2 y8ԼH8Y Z-y9o"hq1Q^.0'#T- ѩX=W\|h<6%N{e'>7Iv?fR#}iqi5OG]t,/ӁpLqCf.+T 3e%۵̫P<Ԓ1, >@$n_FeŃ4Occ(D+]o /+Z^)k?*8NMXamU>pڊe@+.t.?ܹ?uGWu)O =m,)f5&N$'(YLY0qUn3S2G:f}l[ZMhRx|ien5y#dt~JZD%Bv.9g#GKYs:줵YU4hOϣuhy͇k\&ZӅl[+@TveKѲ,s8KE59)Ru0 9A Lr?Q^]{Oo jpN/ܫ# >(_ćp-XUCs{j/q pixw}TG!Lҁ*&T22擨QP{H$^uotm`0CV,{B۶;W@Z,Uؽ؀R竓ӟMj{Q01h(0WS}qMD1pw!cq#pAH4ˏ>j E_&TB R!q6bcшCwgne(^G4Tn_D%zn댨lhSC#B`+Þ,'l3üdWV@UUw7uX{)F`mrwYwyz_?Dz7vluwT% Cӎ3!]ڰ9 ԫT|zP3g=;Z7+z KBӃ:TFG)& Fs] * v U@|$I=E^ahg2yPȌkP prdȚC8eߥdJlYE_G pk:me27٘eIձI&f$&-U6]xi+_9ҡ*ؙ~8 -;͢T]V"u4fE#?YIV-lj`Ӕ I温^ B5ى̙~9f}{U0]B'fPQB7'yi3+2%4tMy V.% bϬÿ?K21ȐD(x.RGvDhTo98vцե~Obq(N$]]Cp;AG. A7_7%Ûv'Klj]j6R^s+O-"yS_3L7*K4sPc qjՐC\Aʰ')cv+* ]KB:yb01V UqfG3+T~xSj3yMY~x[NR[H4E {鉏…wH?5^n9mN5fyC`&ᕅKJt `;,R 1@[?L]hZ,wGh8G3:/ELK#KWd:V`si@e!(| 'l]4ZgMOd RI\خnRėXUamZh#-?kSma<"UƄv]%P3]\!>PBk◔ WƁ πďS?hꮇԚj#$tN%ҪIR+>ťߪb,+"%1GG/$825(D㟪+M.e&A 6{ LJD8Rw/1-9A2:!:a #q*RcyNIq|ObUtqCp"v$+h*0ﱁ`eIK&ٟ#3F1e9x K t2QT,f?1m3"mrX-Ŏu>(TeOkSXgl3/.#0{Ev%zf/Tcq~W[<-W%I` @AcRHlҬ\TP':L$DIӍfTh/rP'5(toVnk鴈 @kwUAWcY/1x?SN W'ȹR*l 'N]7 IHakR)"H*5יT!J؛ס4Ğk.΅)TkɞԔcgZk|6`6 )m,*s1د5#_E="DH+J=nF#s2_պW$\ ;CU _߹՛f,W箸o l W٘`tIP_i~dUasLZkӗD 6:"u&i1!sVA"NU^v&1j|ޞcow7Tؐ=)7^T884\#ZwH@,׷=?"qw+;qn( &С+y!UcGaɎ%N 5k]'Jb) _Íou7R5"Fg"-uxWDzO,s搴;]&H#GbM3Az"$9B dNiX|H$KXFsOCFOYx}N<-Mu|`:oLidRB(N!t$VWf^ٹN@{J272Q/ XoVd'Zå X^£xrkAX_v35* *I'Sw '97Y_-<CTõY-i` Gd;nn!3L F4}ַܲ}р<;9=cUku`1]aM`89j)@@E`Q&O)Ofv8H V +\ůHIo95(Y,9 -$T8Q/T}_uKh\M/"tJ J[:g^*[A6ANDR(@hcYVϏ"E4iŊ -J @QGtԚ@&XT0!H@3=מ5ߩx?@+2/lI47n[:Ύ/TrfE.N_ᨅ /Co:]A<ʗIGD.X5\/98oQ As0W^Z}A5?g7WsmEimI@ ۨ>K⍯b@n)1kReÝ@t_?tal)25߫^C8[.D@Y.n ;ƮEK, #rs͹!9֢\MBȭ_WJn;O>^jv&G6l +_qV~ףͳ.`H:vr(Hl=?6kX9(Z?iꁵU/wdu#("uEM6R7ug)#׃&%TCM%^ѐwaJE^bޣTqՕ˛b,[ *.z>٪?Nڷa:q{oi ;Wsz2oۯAV+X*wq2 Yb;x3p(/T3,Ҫ&k1:pE^Ar!œ|m×?< DgY-5Epz]`57(^y.3;x},:~|9)0㘓S uY/  mY%dNP?8 <2QMu2SK9|4ʤ]YM V0Ǚٱh)?r-:Ed(#*r,ȪlA@lv Ə`93\s⤠V;V`ܮyӑUyo(#zT $m `XlcH3.:qfڡ($A)[R/bFK5gWVt;IRC2!!$%Z&03@5H2]@HI*S*D-6 ygŢ|+D& .1PJ<7j R~HI?ZaξiNea`a%vl+s _;\vT]OjY׮jOWX#STK6XDӉmX+ ?>"QxMl1H id%珨#v+o^KoN޾M[>F!/$ӛ`JwfR8X a#Ep01:0|g]3{zD.[;!g%Fy Pw%NQF=fGw2_DZ^.?_<ъ |,R6F\;G'Ril)X֊R1Z*yҕU_+Sh52Akۧ9.o!E\q, >NKud9O啀]95(ýLѶiL~p?FYd.3ۀ|,Ur{\3{ۤiFd44[5εv̠ͮN BH0 *eeb`_x(3ϡRl+/;'G,)ta*+}wIEs`3f%7§j3B:[YzhcAzقSU}vyNӱ_l.iV;{pGJ7W?mBF (&}1`t+.70];vJloR۳òT,FKs3Ï_d)#QIJh 0)$0Ɩ,u\Q"WJp&s@t6Q(pJ7<{q71"Fɦ7 ҅+C\DKҏnwx\V tu0yA^gtkkQow+*2Z QSU#UַL,,vf} qӸ!QxO`oJw{-L=DW3-_4xg~5dEۭqŲ ٮyn,#XRpva/s0hovqҗ"VDhR_it,uH*Vm 8W*9S@^u96e:źA/Sٷ9AAĐ@#VE/$8;N\Q~;]!L_Q`VXW!C Z9[F1e?U'i%әҗ-A dZ6y7՜&<%M%ǛuWƋ0&%,(^`!KUSBIrZڱȾ cGJcTX)Q]fZNU0sps3<>Y*J @88Lx^B!aFwv(6 ֮a/B;g:cyj"R9YrQB{^]y~f5'kddBuWX6Psqvpd7(:#&5:?1تFF,o5x{\teڈRJ!2J޴u"t' bTRL]z9;+Y ! XQ]{|enr8gB{| Țṳ]xxd=Ynjq_н$,ފs>@&}cPm$ R_4Ϝ':Bb tM%݋300 5O|+~?~+.!d  qtנ 0|hI"<6h\DK7oLF6hj2R |4!7ɢY|D* Ecv}d9HiK< ȆCjcަ{gX7Ѡ1O'-;f 7RR[j#׃5I2ݔ'n+v^jlٴ)ʢG58Ud Gf[s'F;Z!4YRB_ί&\[rvaUMa`eeIqw)n9CorY #:SA$}T.a֡sRs&sӊIf8miĸaV]Ez!IFbVEqe~;~ܫ^P( O& Ŝ.2"b= op[)uͮP;<$-{ґPMь9k!]$ELKN1޵_bC}4{.\k?R27ik]-sEw=tK4Xfƙ `,g`Oh킟agm+uz@}瞗"HdV2t` E5 6+L[Ⱥ(/_aZ'][š[\uplMOt,J,fNr(:ԐbIA2~jn?D4'k5~qxmH1?:4c%VGr~ӫuD#PQ-IRt,qM`k+u)Ҋw%$Xf"Nݻ L2Ϯ7lELQ5'#sI0]CZ3UU6TQ7hڟ6@dߟfSjH @O#aCo#;t'0}`}ji/Y ;,=PNT2+Ⱥ[-8I`zVWv{yx $`0)HEoGw3-j.qv'̮o iI?̦x Y>MIwIFt>>td\|? #w_T3ƻ{ve:uIjUlU*evI5Kdv{/"\Tb1q0:Y0a0F}z[2\i.+ⷓ^N*_L@}Ђ^LEP#oi6q:i; _%WظГdi{M}fh̾`u H\H8_Dns|f41 e\KH=zRЊ twqsdM8@xtV3.%پ-m Juݪq ty1&Y`O,ebMW\|G" X;%`ujŶ߼hSLu9PLXdgt{UOB):aTv|ޗP#6$~#~` ɫzg%ZB|A A_=L$dFv'FMkUЛht" |i"2.9ł1RVם^Q)aQg@LK~,mOLoC̸M뚺~ ɰȑ|>'Be-U 흠^?v:A ECĝFSnBǟ]BKF O'b@1(/^졄;7_8%-ZBuj0jӻ 0L|یg$R54~\{/I(M{ŧ\/ן|B9iL0| neU[#8Yut\KanUV;t K7e/343>-=(,g, L(>T#(VFSE3vid|Tn%<35>t"+EK&g5 [ ;Bmh0G׿d7NwU F6{T$k{ֳU He/Xr_?_{#B>2LNvM b_5U7lP h1Jr=GARNe(F$A .F>QnDJ,mN{KB5͚,1>~l83qtw$ecDj-T] ziV(,(kPiT,[eEK7k ߯pt'h Cտv.~_g#t_Uui_h4;}_mSkC~6ߵw8c9{TjFzZ?oc^g΂?mR@۳uAOW8goQ.yf#:T.@x6SHG2XXrD(F1g1xlhFaT0 piQ}Gbfl%W- kl0?%|A˨Rim!V4ۋX쌚UϜVJ<;J$uf XTzJw` ;@9r qwZ\0α\T =;oFG!9Hñkӿ%#QufLdd[ gc5+6NHd^ذ.l B-+5>DgW35(4ezg̶:J{n~1܉bow"}4{SӲDטZpQo/KrM\mG8?dxsYS8'\hb'c{FF ?z Qh=Y,x#Z* Kt%Ryо~O3AH%|f2b84 kѕMt]pof /%q~/mqFs҉CD1|SHv .Uq,Ij+9 eBG1 o,HR#O3o=Ys]D'e0#BQM%ˠACS\VC37m~UA3`<ݝIQC~Mݞl7ܛq2>g)J H]f{-CZԓBt}omCBRA5oȋ; sb+kTg'1?ϒ#Yj@9 SSaоC# k{&zUѷɏ5PO3\" (NgIrz<+.l?I耝|E+.'>P^mbY D(zfA?.M m푈&)"@=;3C$ Tn)HI v r4$8j܍SfxL\ڙ{ DyM%PٙEwcȐҧЗ S;IyFNf4hk'0^;s,pF,s;ݸOL㺿jWI7{^g^`d,0DqBܣ5mڀD Mؿ vi>{I [Lv"zgvbeӊ \sw34ګ NFrQenKɧ!fUX{%W CU|J3-e_ ڄwel/p9j)FIW%~{U?mzGmwZ/7IfٷUT#N!)U/~M"u9u0!uh@v'.v\3mPUxVrAɅbg<}dWʦg'Z1ސ^uޒYǸДlf‘БGxل֡yQ v++D[JP/:\6aAʀ}Jwzߩ巖L8%]K@my1]":KԜ*7; :'L  d ))۩-\7)N^?I_ d_'l "h4NSV !CKDf`X-ϴ5ǁЌU˜a}</-Ϗi,˜,Æ4d1arE;(|ձUraε_CL`v*p^1`2-Ią׻U z'|hD#k:mcok&M}ܵb#| /r>o 1P(쇛'B]Jq-yVى 1:=n=(XA)-2<>ə-il6G|lw/P[iE,%'c˳ VOi#a#LD~X 3_o>A+Tĕk6>N\A/\ACӦxW??` y,dS&4aqF=Nʲ}ӓ5` \-21DXM5Hh<ʌ=L"W_ɋIDx[Ν:s-𔻣4{{+Sa6%h9|q2,V ,q6yF{63xJ]lUY9:z%ۀ4i`Ֆ~ 8yyyyyyyyyyyxAR"c0g3GBT%IR[8MHI"qlbdL裚PJK"P5Xy]j}P0dQ{p,Dh)hu-&9b*A:k;Ui5*6+OL쨋rA'\6o^$?_B6ŦXфed/j3[U\4C5WZSAHlqF7:ZN"$ߏiNSd$dũ{:~kIwCb[5NN\"\Klޔv dc̀Pq69XK u rv1o&\/m  FmDGgYhy 0@|| ,릺Dik?r>&jUAy6doN(/3gTtḱ-mGB3A譇+wr+BY~ÍScZU3 . 7awO2ϩѷv?x<ڜ[y#kzFxYL*0h3nJF gMĘA 9/KOL8Q˝.'+aǤdW]g ⪰@͡`W^:.JY.|M2Mæv 0ơGOWJ&EBvH6J[F[k 6/4N#;G$!v;V?}MTR4C=o@T)hgT:+CHFubI9VbOfZl<Q[1 L}\ɡOrWG\{0"w_t/Ƈ.*xIg}\1ZI|#[/X9rs#;\} 7]#` iq,1ЕN$,K:(Ǵî1/ tWqBA=̖Bv\=6;_4i/ 96iBysCLjEݺT7ðP%eYw8,yO\0䥣bٲ^Q1c;*viv! d_uo Jۅ*f2:0[ /cƒ Њ}}5-;DٻJ"Yabf@N$ʻN5 pFj̸9ʑ@vrf|*>9Ơk/`D\I!H6gVD4i)\^;Q)@WMĂ4kW { V+AxJH,ԑAm orz\{FMt5\jl"pqUFьz nx6*t!JJ%Vإh<ƠJ<;d&g61OQs|ah;Q})L."D;t5ējN|7٣ؐn1=$#}}Q3`V v;wdh7Uc~4Puu\.& cq[aiVz/Px7LwD`"B!K2Q!"m3ӉV=O 8QVp?"JlTvF74ӧH.r5sX= Bps|I!0d@F[M2<*{]\USrsڨNMXwi g3a=$-|&K$1Y? KW[ ޏw?~S͒ cdV^Ɂ'cA-; v9+@t<eE+ d'_:ZZȠғf KZa{SA>pV֗Ӱcq`0qqDHbĢ!85Ѭ"EO#O3?lHuphBgh{!Mlt!bf 6~3V^*x?>Wn];cKthCuzJWKq Vqxehb ^lɿV}n#AE̠0"D'fa1HJ=?hr%%޿,@$!T4Bы°#E CyYiŭ+5@ lR^#c3aMF\yyyy\a>?i hN:G(?slf /~Q -)=gKхD~06g7?1ky+rhPIv@:H9,ռPюS| ZJ/Aօ?Ѐ8iD3rô U&ͶwVe"R K2}{~t^{W_uj? Q>l! ?|rGחrE&bUx_X\|qd嗛kV(q8Ic0B8ر,M[QPێCOT+X8ў_984Ϙ\{ydLC^jWx9ܛW|JP)X ϼa$ye%Mxq2f")M\ iqz!J"cJguD%Xr!Hw߰}]srp \ܑ~O KFw}B;8J!)h08+zm*Eddn ,3py_ףk8ip:%ȉ"O 7(d6n!Jo·} ##ZPqߒfHdr\ &EBJCl2֫q38b dvuڻ%4JS8NS.&6X; \ZR>G͊Ԅd%;d|)!lͬ(%m{@F@r\gM:e&b1[8_h{w¶}"f,w@x"ZEK0;0N|^m }6-2>( vrn@ Iո$svǶنЎ{{]#YP'} J/v佑3:8ңomS0x,t!q:+౴ QZg:C3́sCG3RP:2(^JX-YgdN-B䕝DkgB(LW9\~Z(7HU7[ K,3vs)cK7")!4OL"m4oO +@8;E~n%at spA$}]<35딀 ~sm\Ǻ9-/쫱D*bd^k$B1n#LhF ESo9>/$a ZӮQ5HG"K4y?-x[oq O)[PD졸J 4GHef;˨8qq#a6|%=YDtPHekB/"1K]"[r'A wX+ۈ#'}s`8rw]k|OԼ.b5}xOu;;N-F_,`)#v\Q__F:;2ttG&lX#HPBk◔ WƁ πďS?hz_H#$u9xqMT735{ED_id Z̜ +o&qpw/;oQ_M 4ȑC3DA]>}S0n=с#JJ5v:BZܪ 8c3znxtHm t{)9jtuUe5\[vP ^Bp;/텎[+)`np{0t-swK[ ?[=0t+jjPlU#N&Cs֢K/o"!;sWb99Mެ]rΎ]GkUmlQ0C2i=c*W9!p롨.ϡ/[iMhL5@" ,WTI|ϖIX2ZSJ!DzfU*`bA- ᗺ9Ű̜ie p+43⸁$6|˔Gc6_Knԛ\2 1]Y*J4(F3'(Ӂ𺨵ryI6 XUT5+Mn>l P8}s:&W hCRw+EM<4hQPTS*NLsF>~U5 &|\~q0A2:,o&[1U9&*G9G}>$,eἑ8-uP5Nk<6z%Q(CFQ 5&f^Ubwv,'EB4ϸǓU`^i5,JG~5~9^ SdkQby?G!M3[iס9-"aaRcuOp:#/^mp+hj QR8Ք *OvT ^ J W领746iJƅx%:oI`xpj n IЛ} sNJg9^q|$bK7#)ꯇ]fcRZB '>=W>gW_#I7\P{6&Uw 27&gxNU߿L(t6<\Ui o1${rE6.bŎ50,q?z|puqciۄXJ7'aQ1] z_ ?G%╲YHbp6b暨<$a]#CEKF׃ƾP?+{Cv9+Y"?.>;T뭍X-H}d]sz΄|_,|W%_%f/ن/|[Jߙ1r[: s[#Km9F:M'B0fRb^ӝ;avBiy%7i=LTǟӆX0PVD{>D LƲϻb 玏Mǚ(˃<}ܶ~?iK꜄Yvb=YG۠-"r!S ^F50QAv/7_සaWe I̪ K`U&g!ubc rEA/SCEM'V-B yu,{,Ƌ&`d슛\P *9b{jsYıxِ?|"l&Ի yXE xBR|޶㍉9l<LcMP+=g|h(n8[t&6Qn;144rsKJOqTh2T8Crumȵ $-]~bd=k4Mpi~ԍ! AV7xדƗFKZfFXAt@-W ^$'4dT?+< k+[歨-AuCu>:֬F+6ҳ~U:a;zCOLNW箭 QGG}ٚ+4RBjlU(^j_z@֩e!ze<3VѺ /iR(F2gnuhVuSHޒjB_(+Wue"́* 0z#rBGȈ  gF>5e:,2 ܷbMDn|9)0AyCt>s9N/,!12|0q/y9q%9ˉcmn}_N1apI2I@SA(a yپ0}?őZ= #ƖKeyM( qa殪QL%ڝ΋q._V`ܮyӑUyo(#zT $m `XlcH3.:qfڡ($A)[R/bFK5gWVt;IRC2!!$%Z&03@5H2]@HI*S*D-6 ygŢ|+D& .1PJ<7j R~HI?ZaξiNea`a%vl+s _;\vT]OjY׮jOWX#STK6XDӉmX+ ?>"QxMl1H id%珨#v+o^KoN޾M[>F!/$ӛ`JwfR8X a#Ep01:0|g]3{zD.[;!g%Fy Pw%NQF=fGw2_DZ^.?_<ъ |:U^۱f;`"cҠG<F::OanȚB,*!p'@YӋ0Gީ"w ǎsK!]&tH'VJ &wR[gq}z<{4;fXrΛ'Q =l ,Yb 7%J7i)-ͱY1i/G. 'l8wX qur4?͸."`*6¿̾.8Yr>tnvP+їAiKN9tKc,ZE1<>͆Vx+*ub,W6Vd!Ae/k"L`r&Rrv[A' FRQBcr\D㭫u{Pf7C6s{o|{6tuL$Xr@/ N\rF⨠LTҪq\yeE{@B1ǣnzR 05KUFI 5W59Gԫ۝cB,}< \!"oʎ*&ً|mvχu=g8g@ᛠ"9o\~9${GaLWTO+>K:2DE#Ϣ jݻBcaYK8owN"UA왹~5؅WJ]aGVT-:iK~.в/.?[s])EV?e '$Q<WzTX%Zs+70?OG1FeB2%(R,Q9<<;$bqgV ޱfIuvy޼ŘiB.[.^Kf%ݛ^l6XvmOz$:8wtt9Qg>z(/"?Rt U ^H~!) 2;q`VQ:YǸ*cqB/1c2񲼿j 0KG<&!:{WIOR>n~9j5nK+81MFTC?2Lm|zѕDoߘGkȔ$E;}4^O} .zo5Y\c7.|HO( y}olYwYK5C\G?]m0XV{Kq<>UJ-•٫ кoO Z<xTF/ O HdQe)bʞFi +rRh~/OW\P!Tx۶F>!3S;3X#_X9TIK|@tW刺KWut)8o<_l,Y5}?ry-yf 5ф[a5c?)|,2+H-_l$5gl5m~؝1KB|W+Mצ0 Z޻P3fh1eGY=q5nԾI-8?Wmv_x Zƨw5 S}ưng .(3BiX,\p-mj߻')Yoa`>T&p$%"VSdYKGduP?aߝkZ!_'Y!p&Cy~ϲ s 1.74z\,8v۳hV*48C,@HE`^\%ud N'1Q-Yus@#qG`̥#̩oO2E#ӡ]To*mӭ"YA) 8Nq㲋!Ұ#q%乽c+cȆ+a(q>JZqIw_91{α21GPfh:YCn~LlT%^[s.!=I2uY^cԓN.ʺX2>iLF&Lp|; 0ZNMɵ-_&7Pz_la7}6St?N)ՠF]%h@nl$ 㹨R8*G`Vm]'%>ͪVǂ Ɂn/J|c zsc܃H F"Pr`C>G;!h-!-Vy R AOBT/^6cUЌR"@g"~7g<\ȏ>P2垠|%Rgؗ^t̛-sɂ6O'(Ӱ;hX 1jur}rv_Cɚ ?^.j ߄ "ۅh$}Xwxxkd;@FP,!1;a5Kž)7_F|dP=1Ed[Fr|E(qĩݘ_1'ѭZ!݆OX-/(gM78dtp4EșD 8^--Jm28RV\|ޠf8۰Vᢦr/l a.œ-y<V ʔYHDr06ߋ<3`yS8?1;,=PN:c4jP]nj&HAv}YA}pK>wےT8ݣi5 cXed|k93XMlȌڂ;>:\MO0mW8!![͛“D#P|T׹5O^Z<;C ]<31pz^9E-=ɹ4kf#Iʳћjv'k 7z3փOb'݃uw1[b!|_dz(Q]2/QkJڃGӈCu瓅iM.AΣXJ:h?ͫ+ȃ¨ghF/ w?܅(׾Rl]L |L}h;xK[ncD˶V]؍C_KD"p//!'bBbnl1TO XY0s-qq$O 7*5>R5#4`jrHHх$1}Eӝnm*zns2&䚷D4v-mX FĪQrr6\'l+h1yIE2?_К .z#&Cϓm0K~ଈOu&M^9IradignG>]8(2:0؁'Cb7e%w,ɺXhVTQ!ՇՖzlOY|ˤT L:>vs6+ m{+xрRa{͠D~ab8Z?OȐ^6`%]henoe`fw+KGw_S.Pp ;kٹ)(1jc I.lƹl@->{:<XȞyk[6:Q 2:Bd6BDB".'C|axll]i(`%@fdY p~W% ƫUeԀ6E)1y/? F-){~Ѓ1ٙ`sI2%7 7F7^62w@ʐqp7O^W<+=){E+渐-U7BYJYVSBsr>Q'[V!*ARNe(F$A .F>QnDJ,mN{KB5͚,1>~l83qtw$ecDj-T] ziV(,(kPiT,[eEK7k ߯pt'h C}ߴ!GI?W5{A'~џ|?)Տi?; vt?{^LDD<=>a،c2IR(i5*wGu)3AT2;1E)L \r%M2Qƀy.ٍ-{kgY6uх6G%$j]Ĉp6Ȇϭ9#\1W`1 7ȅ<=4}Z,sRG$ċedŋa1T+`I@.qe? )@()".2b''A6 ;.`ep7 ݼXEN%xxGI,IF7b+"A3wJmk;-ag}_ZatH(@bx_MLxe=0A[QCHw ? ![:G(B/k{ E" `KEϺF}B#Y~& Fw|Ɋ]ڂ눜Pw ތG=dڷrBna; *Hh'=a6=Ok5s^vͩ$XQz X#'#Mz:/5.BF3# 2:/5.BF3# 2( {i}ĜC}j9rKvnƗTe Q)NLa謆001Sigw?-s璁=HlHK/u~,"uXd@<iiy}f 08A)3n]?J`ӧ eu1o.׆}&\&GqS8ck(~.>By-tv v75҇8 Kc%!uzN<ێF=i!]T1w-!>;&xQi%1n͸;kq*xN) I}a(mH<2 NQ,e8 D4ъ@(f|22nlmms-1.1.3/data/projects/000077500000000000000000000000001247673406200152415ustar00rootroot00000000000000lmms-1.1.3/data/projects/CMakeLists.txt000066400000000000000000000002261247673406200200010ustar00rootroot00000000000000INCLUDE(InstallHelpers) INSTALL_DATA_SUBDIRS("projects" "*.mmp") INSTALL_DATA_SUBDIRS("projects" "*.mmpz") INSTALL_DATA_SUBDIRS("projects" "*.mpt") lmms-1.1.3/data/projects/CoolSongs/000077500000000000000000000000001247673406200171475ustar00rootroot00000000000000lmms-1.1.3/data/projects/CoolSongs/Alf42red-Mauiwowi.mmpz000066400000000000000000000773351247673406200232350ustar00rootroot00000000000000۫x}Ys8~ v;B*1=/ $vQ &q%.,y $?{ٹ'L;]]>}n_"Xг`F~kNj_z7 *߻b{ |v֋^gm~_b LDR <x*3z;3@w"k $ !+o16hh:?'Ht&a^d:zώAPUz~qvF{[l?&X''t](WUPr1UJ+Xƽ}Bd( WإhІd7B|j:qꙶƏZIXz4=;36zƃסD&'|Y;F|ׅgqa3eQMg3wXVb֔ + U Pz}?~ی̼S jwaCe]xb.Wd=5C쭬|rL6Tjuf`gTe3z *1 "?Ai-+I=ԋ~k-n.VɅjݮ0j[ghZgMau{qMzp8&gGˇE?}Cfn`KPO{= Z87yuzȈ?{ 7< b<2Do /xk((ՠlѠD7α!JSo j6=4؃0 k 8xh [7Ez2-_/D=׷^i^wlT쥆ԚFW*\_rӡlƅj^?~} B KgG3 U! iC/dʬ0)DiðHn4HFa %sBgaN_иzX0]E,]^dN-pJ~ǐ ]m!sgs:QuY&"p!ay\>[$ &D/%}iq_^^r-~R!NaTNd"">B,=+d'Al] ,~4ßB!E1-DϬ-2yѤ<^Nohl^ڍ,b*{׶Ys>5ExNd>e_qxFGd 1L$,SVp>e NN ObWY0,4 , Fa0ms/®g6t T.;$˖0#y2뾛;>E_|dV5k`m}p>s]f:BGhN]Efw+qtsh[pq<Ff҅ɺޭGp1OܻG}y{dSA?^- 26&fi l;yCE8Jm41Mh& &*&yGĸS0u &%b qY򱄦:\|>c0!CkXJ2(4" #Vɮap(!S2cXDN06<`^ҫz2juվyVP!w̵.ٴSt6uJFgxt&6*Q06,EIk;MNcGi{ݶt~oyߟ8:>&(f#L5Gk0hfi[~|`ňXao"Ӓ-E9ym7C'}TfmoʬrfmʬL E)ZRrup#5<$Oz۰>Fg nBi R`3 Y"W#Vu'?nwmANP9,'HvAݘٹfɁ}xBh G gLZGWv0HG ~,vm_>~Ao`,G_i,lg,㑜3)pE= 8{Ihal#CS&mvL51eҖPǔI)S& ;LuLTBQ } _D*MˢV}i]Jcְ?Vp׊ EЛ%9e#W2 ]8d{\,dYpq%+w\ɬJfmٓ{;/ܶ:c-#>'_~}X͕I)={[Wm5ͤ¼KVa)%0UwZ*;O8!gKVq)%8딒UuZ*:Og}@ tN/Y:SJViE@Ģ?Ii42_ޡ -gڎ;Ud.a _= L~f> 8W/x䏼[ -0eE.r>4L+ǪW/\E?gl+HX%%_Z'w&?d:uf,k௒K nbPP;7aT+zj;A^`cFu]w({#-]tIbz?`*c5d½iC!kG*MQ0 kKe0(9MBkCZӯs_ \1#NW[uvmWPf?%ѵRd8|Wu|ɪ`d-'8bFۖo)kg3Y?Sz81&7W 9_>% 0̅|zk[O3ݜ+tQsςmSOQ}Y[]mX@ipa;bB$&|TɁ,59e@|,ncyNS׃U`TZ'>>{isH,*[Qk? Ci!e(va_B`i`o. yS9_%¶w2GOKmȿʐ@}7w|䋾kVXUO\*ģ״0_Zf{Ci+8z4x v, VuXܹ!S0kvs+fϏ9uOvja߿/o/fnn]BV1 ! pv^r8vo  IQ0h.q@8$?U >.+CY65m tja8 ؅H I"5,3?E$3d.c9al[,IMo#9#!ctվyV !cwь:gS.8(V oq΢$w@v_^^2r.o%s3(' [4 4X(l|klqדQԺa**㕝|]bz eRn~h9<3z'ãlXƔMP.89*w, y/:񫲺lTl"̍|\l :,tFW8٠p\Į)ۄ[.vJ[v<f)5B׍pk ظDzH HfpWI*7U6ہqsBg +jrpa%3.\%g:V`'[)f&[gf ,J;>r`Gʹ;3:3#uIJ*o6nnOP9{Nj4E`9I6Y,Z󞿤̡21vǃ%P;S+r?TneP)[JOJ˂،rpFY5gaпӠq9C]c i0y~h[F}BX&퐰rQa ;FƝ ) La܌0 cꠀVV #Da S@Nap 0CaE. XX~) L {HX1?Vd넄0 cꠐVV #D!a SHN!a0AGGPGBRqf^J:"f>ȆCwnV_xXqdh3ikm R@HyI/iY&4c͵l> @d- +PKv߇lw>td8:jWa>T}FnffajJoF1-Xv iogNd1ߒXXkoӑb*gԑP0%)%.Wwks%w"k5gaݸ۴Mk}m0/}o*H2lg]6ܷ_;)G]\%B>i;pn-x=E+=5;#;iIXE'ݘ 2ut,9/~mgmH!I $XeT =dl>}H[PM`=Q(2,\8ʢϞwc^0$`G&-8L"2ikcʤ-)S& P;L@vL42Q'LG U ˛EUP ҺXǶaᒯ"7KrʚG2 :9dp\,Yq%JfmW2k#YkǕ4;'yC'v^mudoǘ[LG}bOv+CF?xvX½xqyfRa%0UwJ*;hX TEvRq%8딒UuJ*:hgX>LCWT:SJV)%@索Usbџ$4Ew9˻mYfNꖩCF~Ӈ:g1jԞ j>A'=~g==h RR`ѿТW¶obY/ꙶƏEBGxQ9p:!4F6HLE}ADxTasýmwgF~$M!PɵBg=X,%L{g|;Q4H\E ?n!ov. ӷPÌ{${0Ax"ï^EpמY[? ^#a|i|ޙ} l6N̒H_%fݚ`Uwo¨VWvƌ2%AQE K.s6-5=/kP9p"mDNeNui}osDw_ Gk^+ :)3;QjcvdQi5poR @ZH˷EZ8[C-i|0N~5D纞҆h$\ɻ/m~Aeo1Oa!{0rGR}^9,~֞ >,ͮ0B8qI2 ibxRB/ c$Z"Y,V(0W{ ^=䬷9dX+XP!_?vg-<uo&/zp I~M0jyB7$Q.}J=ԳN§:plO=6υC fPxEq8x-~{{y3N ՠF G?O;@#w}m/ib {s7x"upIp}` }$zԃm wkX$"nDĄ$ & !M=h&|B~]d"fp$M0!|ՆCGFd Ej ЋP tBn$G+GK"[k'gE?  ^(@P}(@ /Px ^(@#A)Z:9zQ釅<zW% /QxK^1 PDk>:^Cb0 | 4]!F 1RBbč&ģ#i 1RBb$,^!F 1┯#)H!F 1RBb#b4ʸM!F7I QBLX 1QBL>'bX(@ /Px ZE 9^ *0H \EN |7 [&%gǎRYtRMP[;vL!ʋv\hu~fָ(eOiY(܂K꺢Pfޗ<9/h\<1BO`;W9qEo2{++2}7cqumuwsR yq4_],wq*Nhg2x(8D`{eUل!dbdۉgUb(44?Ai-ǯ^5|DE0ɃeKPv]'1­f4nN ^Xy[=n/Iahf ~hox,ߖ?c=xiz|4@ f}=?ްgBjdZ#u., \‹&޸kCyأެQl6fm2ȁRF9p`obMCi(Y{YNNEc큷uipA7H[ŘL:Yfk;s,#Kd046Xlyzzl]W#hJd}e"Ы,8L-5lq o;G,`0fm]/zf\r~sa-'U$ w2G0+c[V}>׵`,5,#עP `o }0Usw(wn$fȸ1,al+Jw`[co]ӭZ;v?%cVFMlL?(ba^C&.Ps6vC0`)]JS2eXf*Pqq@a) `\6W" d"5,3?E$3dJ8r%sؐmYe3!< W7W]Z4)F-8v ΆzLnљYz3acϨLqg,JrGdwe>>S*)lrɱKKt#7g"oN"-@9hD:h(zKis=zr3ZwL9@t[eas`u@]LTK DZLGe('!1eTD -4N c7CK%N/('5[;s#5T= FD6(4\=k6VrDjja-xۡUaǃY`hq|F5NaPU&CjG2L5WDyp..Q=2ôè$\XZHW AkTS `s e33NʟK1ms9'\wzbu6`(*&Y^]2Ik]&j)MwHZ抋RV(}ƜIrZe۷\ƍZG7 S=e21vQ^M;VhwWw,ʿV8]Փ;_ղF~633!Yh\fڼ贼h[bGMg O&}OYn=*Q-oE9)VԪ}Zv4$Qox[jt4QےnvحYt_!aljO吰¤Y* LQa kw cS@(') ZidIPHBº2RHBdX*$BZY)$`I!ay$EAa, š0tj?p}zP;i>t>Z05C0~LM7hXtFqZuQnMp(Б߇lw>td#۝}}8:j7fa>T}FnffajJoF_'-XXXۙY~Lq4VVkm:RߔY⑕Y:RF$nu}MOZ5^ [\xv`zf#U/XMMe0ܰşAiő^wbS@|Vݜ7v ]sV{VfOVkwFyӒqҤݘ0K̒Bu2ܢ-(Dc3i?;$ޣbYZxt!m? 6 R^8ݜ+KJ.^eg>%<2i!1ehǔI[rS&muL42ix1ecʤ]ǔIů*-<_:зETBOX޴jZ֥2m cu W|Q4 YSY=\n[:5˵wT 2˜>IUK]OP{6 j?A>3Ԟ?CAg==pj" /oz}?~یzEWϴ0~\T_-ܩjρg5AbG(Q £Hms<3z{ 8J'v\g+嚻i/|or]3J saShAG^-m}}j"xO9Du&cUvի⢟3kDK~$;_oP:c3؃IxwYP䒽¬[,T*MꊞNؘQD]םc;#ʞ(]tIJ?[<(4S}m*x2/Щ$ !`0z@*?Q?(|+{C7t\v'z}֞}utn4@^ 1QѦ/eӞEh?fӑ6*iӢ_&t^toGɸK˻kwIr?;U2rG$~>_HFU TjOg׫p-<|88x4){4g R 6֫^uSxzV,* j #G!\j/d k X fХԼ!$[WYx>L^` K |B2^(4i,..j5*](#NVgzKQvFE$#P|<͈:ރ.Sx(Z2h͜klm0S֞x;S::k&wZ7uQm(:6cu م7&d%1W,|iYn&2E娵.hl6}}R,ȼ uݤddc\G!lmNрnnz'rŔBlYxS ĨJlo!fsAjB{1>ϨtS5'P n2{16/4/ᄿ ͥ"R[EJ.6pg#!jEzVsX0Sl.!)j,c#t4Xa6 2gp!r<!'D/BX0 ̣.B=h<1,\Rˠ&"zh*p!j5GERjsЩ<5[:?r{Z,<. e<@y7qq\@1nwj|FE "#\@y5Ajj 0ND\(@@!!yiєDH"B-ͥ ?:<Ƣ Q[F28w.lNdW$p 0-PyIG !buZ c TRˬDžy\߻N{+deRԝd7S3$p `/qgD Qt|#D=]DȬf" 8 &hRԄ8< ~Ay>v&`69~9 DƏi.rҟ ؁!r4ج08N(B6'l5gTuƑ! Bvapk qĢV^FObnS19 㧇DGRB. F y7r9h8MFzA^k͉و (u 9GT7fM)Іy7鸷) BӆB,1 47bұDd:ph@ENzBz™1a|Kr|B.!NC{Aα6=.q!ЄN:I'uL ]B9 @$=~@n9B1PL:AyXʋl$S]I.5ъy!r<!'Y^<&a%y^gH_~JdC9x"(A?iW!وDNfD[Bx!BN2@3Fݦ4("EH: |&Jw#x1. CA=5r,ishM%ހo$EÉ '؃(X;QMB&XţĬJ O?lgZK*JxOc"@{Ur:8Z:)L }n5yh  8O47Ww55,x!o- gl/q@=M!'+hܬu<"#+ܰLkłG 0Eo\tQQZA?MِmB$){>s,x9 iJ0|3zhƅS{Qa8p$jŷQqodX[>^zo9$jFQب#K 5tﻯ T0 6fsijΡW@Z^=}( !{h3L7qFE0(y6ft(paeNH6 Wwu;뙬[کENR3 8HN03lNQ2<2-ևR j.vuqw4߭]]/ũBC`~7B}wz \.g<ƹ@bT #R:Og- -?j8|"ٚu8buyEYr5937=b^س !"^FbeN'EryBq8t؁l*6MsXy H,dGO1%x.x8 48<F0E+#EvQe `&?\G,&t3LuV BN}ls9OhMy28/XxnP%eQS+5檛lʢc6+ڍAiE#BZ-W\9ĺTSXee5DHO) s 8)GZe4S5>8bs;d%n}m[(C0XP5;YW޻sģ22Fe(_-bljё};8<{t?#9qt|@qt?sz%?L}Fs&6rboߖ+QdZ%Cv5Zc4 1S ſ)ʙ#+2u$8jIJ@z@y k<Lo@ ebHi*4lg`W#Vu'?/n wmANR9,'HvAݘ fɁ}xBh G gLZGOWv0HG9~YZ1V}>&0Y`!`@= dIIɅӭ,)w٣;D dm2icʤ):LwL4@2i1ecʤXG 0U["*tT'F?,oZUB-KZVb۶]KV\(,)k,丒Yq%@Jf!Ǖ̂[+ew\ɬJfmW2kȞ y1ՑEcn1Y=JnLr5Oi/ۺo!wGo&^ N)Yy¼ӊVaމE0OYD 8n'g^N)YYӊVq։E8:tEUsz*9dR tN+Z:'IHQ|%8o9,vܩR/t3`$T9}|SH lԞ}g=ӃP{z+/E {BEޅmǏ6#^b3m;/W~yl9p:!6>뭑 8BQ}~@zhpo64d~{ 8(lYV&5w ^Y(g`5i08-ƹz9ŋ6$Bw\@ݧo/+rITa\>VEh_*.i?=~`[@G*+:3%36=l}g]#\WukW Z]S 3ʔsl}Ds}m KqidSgޚ5LZA8ҶZ"2 :>7KJsFu/`uzkv#7N%V+C䬗#K_1|k3v~Dp@b<4o ΨL^~:e2ӌhsj\Ewd:Qc&9L"xdc({6ʨ^K5n5jDMj]qI|87rBԘDq w)eP6vdԓz3Nnv&."oNcp 1 f*}$13Qv&"5Asnq?+;Qw=?>p̘p1rnBxu$#EBXͅiS-@Mlj"X?&U[atby/>U@[\o1Qsh "I?:c#3 @" J.@L'BN0HJ0]GE,lz#'X^ y]K/;ŚOE 0E.BM:Dc~i'Fy!r;4&HQ>;ҏ5/A}!rz"ƣ/~^hѯm-_ :[32,=MeoE,Dۑ6a7yhUFMnp3a#x^@fq} Ag§a`̆R>=s'#Ĉ:1R{N#'FHN6p}GFTvӛcPb'\Bho ddyQoS˭.t\#'B yye _r=nR8)uR JY7g2^ta1s73,5] //ש"}^l_ BT8KgRN/ݬ4\I^y9酣r @jʗG ^;eH8זR#v.j g7Jr^W~SnVȅ%}7o r=5 J-q5m 3J害TxZٹO5m,^*(.kݐ,[K-*rJ麥rTnwe+J* I?FrDI FHkT_)9꿥r7OnurV?SBpNjBpe\*W\!V! U.Bp\yz*W!y*W!!A?*W!E!uWBp+F\\*^! U 3 R@"r $E$]bʲDrR'ާzr@)IP59r@)IPz倔RH9:p倔RH9 N$zfZY5ٯQa=L0I>*{杒R=35?fJV*]\f*|W*PK `~>epFYd Z{_s629A2HO L!z:%1;'y uv8[:p=n o: 8'soCS^Uq-jѢ-@MpǣQG=jZ{y ߣvQG=jZ{9&h+0-?#:Ooy=m^φ4߽GIyo_jZm^?zogtU /)̥g v]@Z+j92 Eɑ"9?IN/ʑdgzPY||a7Fw2hi %%ы$";]H.3Z|eTIz$n{ҭrKdJjOwvҟ&Aƛu ffy ї'A/DD/E Eu2%$}C+ӈJ]By pt {P؃=(Aa {P؃=(bMg=(A^a {P؃ J=(Aa {P؃N=03:m6~WiuTT*UJULd_x49Ugc{v Z헺eoע6@e MrlT ]wZp';? _ڌݨ<#9+zC_=ӶqΕW퇏g?;v [6pX'"_e"~zfgB@ ٟ5n>]̀w,B -ȾƼ_ ۾K0P/0hwI¹$I'_ UNpj٢ǷfhOæTJ\~[\<\nIKaywH:ya&ڙ/F!ɋ( ԉ.4 0o3 _ټN<C LkIP?~;p9G oZ%AuY3x.|H`DysuyzX^\^̎aOY._-Ʀ{;rP0AG pn: &D(+ȴF\X,(:d-7hz#=Jk59i 2Azm}ȁRF9p`<~)vMC'Ze,SVVrkQls(m0\yc׾M[TۻN63dx} f6pN֕m7Bȭ1Z-u}[埒1,s2}yT7 !h(yM\ J۽m0h *&yGQSup%qYʲqx>c8cp8@V Wװ,pR tcu"2eueǰp;>: yE^n~! |7\A\wi26{M gil%8+aLӴxt&6,a,MGPe*.$.EInyl!'hJ8-X]].9qznLwI{N{F-ȡۗ ps=zr3ZwL9@t[e3as`u@]LTK DZLGe('!1eTD -4N c7CK%N/(5[;s#5:YncBgx"tYzs˞5etdHM8luaK33RG,L>+o]ݬn.[1ZdcOP9{Nj4E`x5_e>W,)uFQksa{ΕJ;L@|d%A+K/0$,^< gDr>-* 9!* pRmgYSI4k~1o`?_ +K~d|PRP#@u cWx_L~ SߧBʏ +¨OJTAa|<־a0uMa S@1S@q$6/DY*L@tڀp8&iNw4y:M߇NG f/fƏ)<&We1K(NK͎:Cۤݫ`cz*;0ݤ[vn;,Ȼ*;w24TvnlCIM_0Se3OeǏS歩3RyhuT~n[~7Y\|>c t x)AwSg>S";ϔ*Hx+y*ԇJC%һN=hl&W{k퉪:T'>e>NmU}^Gb7HہͧGpU)SWRmgF =4~LWRRBo0~9 l>&a+ߺ:@:ʨ0)$L!a Bx+0bHX{FWI&HجLaՌHL6`?=@> LdSNI% `x%P Λ)N>. rt40ƀ;ep )5'QAǀOqVW+餮VI].V`dukCv=CG+z:]Бއl>t}@G()xA(#5Glw34 SU-}[^>0@0GEZ%h;3'8jMo 5H1kSf3kGVfeH(JqՒۇ5=Iq /Y-<;0 >c/!: 8O-|[O 0Vu'?娋dE[8R8{fDXeT =dV}>&0YvB d 2#N賧EqX0I6I!)H;Lښ2iKcʤpǔIԎ)S& :L*uToቨQ/@GzBoteQU+Ԃe%ֱmkkkŅa͒̂N+.W2 =d2{\,Y[vǕڈ;dq%6͎IЉcn[Y1ӑEؓ/o>x">#^Vpo*paTwz*;dR N+Zy')<g5,Tuz*:dgRN+ZY')U%@甒UsJ*9hX' t8"F)&]jur֩YSe]NYLZ"g~3OP{F jOt7jO?CT{!,Xo.`x}+ջfdK,zmjwe ^T{\ĥ@gsSMVAy@`6'F[f=ᯌv¬[,T*MꊞNؘQD]םc;[ʞ(]tI.H?<=os[I 5ȟ'BVK4Z=Tg&0wIItWLΨrt50}aaqi1URviY5poR @ZHEZ8[C-iLa'Gߚ\_jDM6JFt4K6>7\T&}]ae`Sx%̃c|}ZRԝ_hk<ԋ~k-&I#֭Z\^oI鵸[=n/(-o3?Mӣâ!]ҿ~[Mv%>=hLc] )֬< fIX,ҢxkҌ<7 dC0 mGAIIpdgw2wk&(V ioq΢$w@v_^^4r.۳6Q͙H {N{F-,n{l|ktדD!6P) VXݮPLck~h9<3z'ãlXƔMP.8VhDY`W%N/(G7[{;s#5!+:mncB'zg :,= 9UOR8"5 _.VS@¸k l660(HXO+4x<s<)tzp9Sq9UNh5V2ǃʞg/{YWe>).҉uI[ĺ=tbV:td#]}vCG{}:.}/:}/:2/~7J~yQ#5 ߍfictL.̓&2ǤA! ցӳgtj?P3md7eV9xdeV+%)%.WwkzZ[$ddv:}|SH lԞ}g=ӃP{z+/E {-_ ۾mFfĢgv?_} QbEE\zI  1ڊ# gQ V a9Arn'A292>d.a _= ]p(}$ aq^N ya];n[aˊ\=|=h WUW"l_~kϬVE/JJN>L~~ɾu@`6'FYf9zᯒK nbPP;7aT+zj;A^`cFu]w({#1]tIX?=Ain\|}OOhT7-Ff}5}pOe=rw^ !Ѱkـ V؏C}B(*OFk_M/:NXbÂHą qL!%C!ދG$8 Љks/-b+ꯨˆ+ꯨ>&D=Trzḱ'㇮iƉkS=ޙFgN e}bЌJ TGrSlK锋7 S6>S$M,W'.F{E#ݓl| 4QryDc[Rceߍy̯3[?#g.Go\i0r _$Wki_/I'M]Wo?AiaE ӦZ- `Z8̛j4bghm05VK8i\L@.b0| ^ Yd+]hv .0uZaej\ ZCrшXSO0tvtK"_6Ga;}2s_^|֋ן.K.{S-K NgOOdDK#B6EF'dxXVm~;S$r/dl7)(P"JK>hdw%/i}-7Cu=uO[UVca :=A1pPJR~j Lc}nV8sZyFN9.&a٨e4KG늛zt艋艋KeILc8vgM8|.A=jW!@)OCg.X:$zev3_]i p=xdS$;^-Y6M^&WݱKyYd6;yu~dC\bt[ :ldIt!sg~S̴Uaog]v\7M~<:QxMɃ.buu)f]4cop5*SOeY0i+ _q;M*B霸4@~=xRpTx' 7t{Ҕߍ ͈ތ͘ ތћn͘ ތ͈ތ͈ތ͈ 71}uYmy-zV #}12/2/Q~6|3*>,-dP:g"@ʭK71/X|O瓾D9hw9N[44<g?vF\f^uGNGtxtدW-?! N4:/ÝE qNigt ,i;͵D_ӹgNGu9Fn~]3[{ԀwroDaD︷^=5 g07utLTQQGE:*ꨨQQGEuTUE=g|:*ꨨuTQQGE]UCQQGE<*ꨨvGEuTQQWuuTQQ;£:*ꨨŊf|c86so&M<Ϸu]2k3_yștvMC;ݍn]ᓖZo]{O58vN;]*'yf&<$׊;]Ýsc ̚xwS;]f ? 75:܏QJwꉮ78~3]׵2 t؎78:stЀ`}E r:*ꨨQQGE#>*ꨨ'lvL(nwθ;v)nwdH[\"u.ˀ.ˀw= Dojp2m as8TuRjf~V{^d|X=p`QԳD6̧Z҂dENaEep2JRRMEfM iIQ 1) &eZK ڏxlI)3&-l @8ط+GE&Z$ifY8{˴V,11"~VAmui k )Rl+ain,9JeZ->dZzi (R[HY 6Ս7LF3PnFF6D(@2E()2F(mZ+prB#KpriLBCSR ! %nj[Z79([pxWȴV.9 Z3)Jp;"E$)+dVss!7܁ Y.Yc1AcZ#PP֞ZmZq Ikv>V@VPV@bEi3+u`^fħzsJ90+u|~nYQ=iԁ8Za>0igEFeZ!<ieęYq%72O"ضCfeX"3+uZf S=2d|ړ=Opϭ4) jVb=ĠP=O pϭ4*2[Y\٨ZijVBdFrh/,µ` +d 0Nae:f^XY\5oa […]3QVbgʑaJ!Lt|E.wS3 :#κ".ȭN~ v[uZ~[o7s?,w ;I<7qgLGS'қc< 9ɓXrƿ_|i8nBj_;sRT2YzgMՉc:IFWn53߹@S bI %@gJb4l.Nd$xcu,#pV~8r4? l֧E9&m6آNI/嫑Z(T`AiQBYNyYH;y̳V<'_Y'߾/wamyzi[MW0?VbzZT$])؍ee1z##L!B5Ɩ|Hu|X'$RREF y~&jV{^/:ߜH] wO=+Ogu̧YO 82ރڌvLqtgoy~q5W&[↙@d6uPqKPH/Bp.AHŦ>JR\iAVtRѾ$C市alj`ps oDodƕD[W4b("ƼdӠQaK^(h%T/4POozӠ^,hY4AA hPPC? ?4((ACA  hPPC? ?<8(AAxpPÃ? G?2$(A#A  dHP#G? G?2$(AA thPG? ѠG?:4(AA lXPcǂ? =#ud񕼞򱍞Db`~'+PhMajވ st__-׫rYkfd.$ J6"_Cos D8s. q:UeOLë/߾oY|\\fǯfo_ >Erqw8lfGfw;{fWwIgî>Ar|1/ԾiE"1\`b?<H0:?JVU:"|Jq~{Y|13{Y>%_$7<˛}zy\t{h>?wśM pō~DTh+_zVf{n?|~~9p=Z7ރ]Ke^v9zˏ</^$WśO߯_'xCm??4yl]Ňf>ߕr/.9ܕ+qV%cs/zDpn+}`&?/Ϫr/>vi8溩5٬=]3^ٲ%(Zg#64+u{6CrjKW78o˚kE$P)woku"}uɫ~IĖH\W:2e"OfCE&"gc=Wuwyooַܾgu|>^\6{Wlmms-1.1.3/data/projects/CoolSongs/CapDan/000077500000000000000000000000001247673406200202755ustar00rootroot00000000000000lmms-1.1.3/data/projects/CoolSongs/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz000066400000000000000000001431401247673406200302360ustar00rootroot00000000000000 pxYs8.|~z߈SwI>vvwL )")Wp@I0eDH.m0zď|RʧY_nmAo=w>*wFs(ǧK?]W.ݻ~4˫E 26*`>|J/g4Zl<AhO^@IVF[?Dv[b;?]mOLk^<)hOǧs߭{.2x&'s =xYJ_F@!L+S%oQc!#W:MEeMS+*# 9+A}j'_|>kJ?LRE/Ls;'?P kA3᠛fcg!߁~xK( v؃Yt+]񧷎3@ä\M?>@v2&/YE$W:8 O:T`;zh{ .s )750zÙ̓/u FAs[dzA֑}?'>\o%6w5 \1 y~ Wbq0V5FտߌQ}aW]?.<:iD[wQpOaĎ rs} Иc㖌:=XhF [H@Kjl-YpL/G`~e\8Q@4eR઄V yNguuT;U;:5DlfRg~hq>:Ddݢg1)U1 h"&^]b^vi񀾉6hTMͩ5۲nL&UY-XXfӞ3^`1 xhF3"&3Jg#tP~ kO/GU/PeTvTK﨣2_R#/!_:PbїAaa0ha05BޅNb_{7>+)¿j Xdw${먄KfYۑO{?mڱLUinlb\ GWGNJ9IadFUlэS[Հᴱ?U=/;OyŭoՄJq/Ӭ?uv"ZO$zt߁3,@ '']R+.ڳvӄ3hawSo@O {V&0{6[Ɔ10ޏfs٬ 15ϳ $D|$Xy91EJR֊;JŷL>e" 6bRc-YQ4ƐJy8nfj DSq̔uYz1on"Y}@{ۚô42ew5Ptߜ"Td,Vd6IU%͂jAF) 2̒QYyGWQKEf1|>&T78q:ic]9 aڟ2wDL>^vsOpJ9C>PwcasS9AǎOW'51 ~o GԃRAYR(upN%B2h*ha&f-w9d:ᜍ. 9Y}.=˰U Ps]ewQYewXRNy.X^~끞<5G9PҚ!l"3"%#AA~胞.C<~O=RYqS=D&?J0ƐBYV3ZA&&RfX-XbK5Vbz|*̐|b~cj* 2h#SCVt^p$f6;5jj)S8HteZaְw߫̚GGw1+7(*O?<~ n7.39lstfAF\@FSj|V39Ezy h NTǀ^3*ywLkx?& +@ʙ<8[>` e K׾7[g^Z?؅jUڰj{LZ?ge⅖cV1?h.n( +0UN>NrF7yp]uעvv{v_uvN\I>D[ -ciB([)SOmbǨI~E5xV%R8fւ @?~Ӎ+z1+Mh0Z_S~|c7a [yIemK࿟~QtywXV6_N00RO\Ep>y= ~&ojw ZY馵BcAС1 GCDN`]/݇3D5yIІTmcA)a%Ƅ 01G~Njgv&Ld\:X`ޱШڴ[٨7Axd6l>DEd`$zxTuxQ&ن~.3ޣFt.G%>w_-?fwdp9{ ئρ !!$VͶiI!@p:]1 !ldIH[{+j#et3ۓԼ1M(RA(rm0E[xdgz@8\{/B]^Lmǰ, #A:t夛n66}/|L7ip[@z䙏 ,qT2'FcGK1;6і,/o-HqE7~vE~ϪBH jz03}ίx]0[`p:X9ݞ&)j [j<2g6$NEe#_Lgfe2_@eUZΧYʄJ¨mP`\{2mhl:aP v?u1{> 늇6`=C:twV3>S3ԹK+t+*Niyu{Q}8 Pwf!0@ۅT(bV( 0MUH bp @DZ :"+'XܷD9(P/s@xެJ6z٩ ^S=2L[|pf gx3e6Ii/ Mr 2 $ k18 ctKԒ.nϮi7K Nx7mK&تs݇~v E v"RlwS?NTJycU*1F!vtq qagjGgY [xx2bS6YE80qvlD<-%Oܝ_f B[Qh=T^<++Y. uN j=pj_?mcX4VBOj͈:x,d ظDxFp$4=RM={Z` *$2.y5 D0M0+6H#AB: 6{6hbn!ufڏB:TrpfdfvE9cyo):ˑHoZrin69Tܱ` Xj` M&%thksDa=Ij9{,o|PA^&?=NQǪZɏl̲L!mW!f'gzv28ym4pض /qnܐ 6ܛ7޾iL f i$HhY7qWgF!26Rq+g$tԦo~]R;Lj6sŻͽwY&ժe[eɛY'Y~G5oY`z5fxXs@ͻk(z(zWNȢ,zˢ,zˢ,zwQɢ7YQng餿B>:P'4}:u-J㫛gY\[-,U 3F« Pw}w~M<5p+#F3ڧQi2}Vv8nsr)^( rE޸[2WUrNo[[꙰S5T17[WTӱ6Z~֮'^wZ/c%!W+gknSmw tT#7L rTk㩁=DOӄ2:O2OR嗀1蜳x>WW x2ϣm(8ߌJ~ G 2LE֕"sӨ0{ =8,&/Vw;*v@/GITC~Q-7`pS $K:\W/tvd7F4{&n[ӂX3 Q#p8nb V5E,d&jDȑ9K@Z"U-3GVi9AwDsF8t/ɍugfuK2lc E`! p%>/M!AD,gME B!&2یrH*nNRRxԼlVIbAݚt}޴ܔ'B#2PLy"6)OrlX`)7gܜ&7gy9+"dW&2ٕɮLv2)dW&2ٕɮLveK-]dW&\C/]n+YLve.]&25dW&rdW&2ٕɮLvxgw1Icgj%Jfyn&izaz6`<:~ ăCT Z0Bϡa^M7y>:~f,ĩF&׾箢0 b`2@2hrNn}_?'(ZV@BA]_3׽?|gIG{8g_xlO7򵓬*u|'}sAKכ۫ݬQ`FKv%yӍO<3Q/~=[nϮ;R4ӆ4MOm?bX?&yN[*1)EvzA_h-+=E^LzhquvJ<Zj!Sf'M.coO$W77g]A`f?|,~Eba![E̿~Y~;HF0&#pepn7! n#pJ7. ^<Ѡ% c=8CvtFAʱ ƞ5 SL 9`b܏|Yɥةb=$%8B;lAV6*MP0^=٫ #QO^„$zxTuxQ&@iI#f:լJo}r7/oZ^w7(fgd%j1{"ȶ!!%D?/f"H 6n%!!5/WԀF \COgSF6%{Hǵl7W pf/_?lr. vyq>O2\a[W>r֥n66{/|L74k =@6Ldo_1Ȳm%GKf?7ߖ}$Ԩ@=c8d"gbUY$$u|"b jz03}ƯxI0[``}pvw͙Ll{+"K_D5daoY˗4XU)cK52 8q-Y n1i@~t,àV.=pb}3 An8үF{h]^6fF]_o}y} fe'J) '}%nj]FbTxg`m@@P8bWA8@U2EqiL 8ژ\\V \UCI(D8x{gFns<@po-]Zicfln~0l7)I,3uS,*cNԒ.nϮg7KMNx7nK&](C?B;ţJv;ف촥Fax=lRX_oHp]]pũg\QYV:"VXĔM@.$`Cf;yzy *7wyZg>\ܫU^@ҳ!݌>PM8l5^:uUaǃY`hɳv WO)D&w.36\ P5{ݳ׌v -$h&7D_ -ʎ b~ϷjV&[gf8.Y`;.#\bѴRU(rogW7Z,KR{.T~2&;JLKL2abn{z|hfZ!K)T`L*kH%,Jns*#*=Oϥ熂\󣧋 o ;e};"g'᪷3p3T㱿ހ!fDm!"~X:3`;6э>H}4ҎD8j ǖ6aWPWO7t0#EǶw|'C~bt2d8LC>82Hiߌd;xSxG9xO2N1 cYhיD_~zgprxjg !,A+*)Q98xÉ\G>LQ✿niA_ڂaǞfguZnzTV`0V&~HLX˻cQ԰Ǽ7(]À ?A 0@DQb wp?tiˋ?0(ozO֒0J9ɑh`Ź*j i9~#MMӟ6`/`mܻ .?H ZQ_3y":O4hIC7xz6/0:Y'*cK52O P}R'Y't\9m% |?3x@xphF,gU}AOzs{IӎRfڮ$V4Z.F Ǐn#ǁ(ԧ孝=M2$(jØ8i$욘mQ u6 )ҙce #wn#fG!}~۞@ 6C Us 0>Pd#Nra + } EcoPa(fIǔIJҎ)sS&):LR2Ic$Ȏ)T:LbB_" LGX:F?W=IUQO7cr7 uЛ&9g"V:9dZuḒiEJUf+Vn=dږq%6+v\ɴM#G b/ŨVGrqtd'dw/7bkeⅮ#>"+ۆw摇I¼K0%;d N+Z¼0ON [8l'N/YSJ8딒%:hN,C7tȊJszR:,iEKsb0 FSL-|yYfN~НFC챘ZxzO>@)c?Ba# ?B=ݪ,&Wgwo[L?N[,&?&!5/Lk׽rc/3?I֫} QH]6*hdڮF[?_`s O~Wn Y͘p_4g `ē}^ISU쏲qm-$]~hXZ>|2C`T|"{"w$ڵ&UAQ#c=i=ޙ\<;{|3oe9 s)n[hT*. ~\6xtB[C#?S8 /lhF;em0,(o#SxEI3Nuy]=6k 5kXp[AͭO#df[7i2}Vv8nsr)^( rE޸[2WՌ S^ьY\ѡԱT퍬~ǧxV G1rF`E"QoЫHURJn4˟wܱH+ÏߍnS}~]pEzobRĕlߘ)c(L+ 9ĖJŕ*cŘ^zx6CW|>/܀W!C[^ +`<к%hA2.rT-X\$ӰSx\:7zz~jESﺶ$iSըY߱9Ȝǚ/u:Z]6r(ys'JT{W͉1kϓN T^4.5xV4Fg I _uʭċQz;aq@PUW=`&NWgdN ίo^\"vNvcS&pק@86 8چ^؏q߱^cyymGB *&z?O.{.ZEORtVMqOu<`sf,nЖ"9ݞ& j [j<2g6$NE FdAʪO[|LH=) lijm0HwYȦclw[3hܽ탘^ xtl03O:h13z?1Lkغ K7I_ZWy`۽,Ї#H@9sP 2EqiL 8ژ\\VbgV"+'; 2scHIx{Fn<@po-]ZVi^iΦre/ dd˻"|f+(la׶S/ޝے Fy) ONy`Nv p;mQy^OCi)#'YbibH,L#_p:tס#PqtT992JF} K-,6Ym*͖_.)Xݘ y`]yNwyvGPhC1waObE~?R!8J, U/<4qu/l+GWm`݇uRٲe+M'gK:iW'#mt9'W#$cM TmIhq~s}{syIOm坟6?6^NHO6GB08>hIYh5,&z\ǁ(ԧ}q6뭝 aI ǜ1Eq H51klu6 )ҙce7f0B0~F?BhޯG!}~۞@ 6C  \g!У 0d ưЗcoPњ%L8LR2I՝c$_ǔIʯ)@S&)A:LҾ1e }HDܧ;ЗE} =a4~yՓT{sY@)c?Ba# ?B=ݪ,&Wg^ZL?N[,&?&l/Lk׽rc/fFkh$>OxizFAsm :ig_ܹ^'^ VfLGsFn.7pj1Oz%OUQ?lv]ak^TTaRIk`qkV(vW)FُUWuxgslPg;xs/̥ղnbQP7cT+qI %n}ׇQ/0 r:p Jf{)hT~'9 bF N?b?W[4j=Tgcl9럀^{+iLL yO{?mLU]ner\ 7®\f7.얌U:LJ㷪}ƪQܭRLXv0VFafVIV*Ri-ا^B~DEMuB;>T"7B rTj㩁DO?%|6K?ͱna tyv2ϣm(>/&E*_[;$vА[^spEfue "X:kF;'164p ܬ`/efJV jVPCOV5Ko* Yɭrzk*G6 "M(A?/euU /;?tFu.vr9)wfQ !UKә5ָov"y9K|i; E)ϜC39G,y\f{绤8F^m\e4qTtOA~;qtj9Xr8vS3@G8\gi0sQRU+ʜ"zgtУɧ|@X0@C# 0 XTD?X|/#0PRh (} pEb\q%e#Wb\q%ƕWb\q_94$Zeʨoj^MaMFmN.e0 Mo Qȷ|.4YXeZ:;,ҵaeߧex& Ti3DV9O1k=ZV15rl3>Dݚbf "4_Ѡt)t1-<6*Bd c\!B>՚y05Ϩ<Ő15*uz+Xv-.Hж:9ieк8)?(ᕩbV3N9g`9Q<0ڀܜ9*V[wjE͑#5ў<5K$K"Ǻ#AvSGMG:GC.zU Sem|Z t5F?刳wԊ"Gy!cqƑK7xp(Q5]vXė[#(Ru`7E"8H+;6PQ0V #ᨅ\@wp}  Oҷ㎉+ 6}^=@.8{rq{r{feCs\iM~v 5ޖ̷͓9#&O6a6n9;wыlt"[sth,Ev;Y+jm1ku փC#s `bsH\s I`Zڋٯ֢ }sʪhVi@S$A֬cn+"/I^M715N5F= ._%c{΢18 _LZ#;$(ZV@BA]_q}' ُϱ?2ŭ/BW+`ȫ}dnV;!}כ۫3N C۩=.og_0sY׳jy~yM5䒷OކQMD(SOmb>ǨIx+gUb ՋS0zZP8W{IТ]-(liBqN62<$ ]hH".ooo.n~X2􋪥$Bwѽ` LF(oCR{G:ty袱 PĒI8 zp{->$ǸF?/ڐm9HZI 37&tXA79 5Xfɸ`7!&[P+yzWOjHTV$zxTuxQ&نo2S=:iLQ OWkOY+r`E|H QpuZ+vyw\hY C?}]C~yɷA`z{r?7)كEjqA0K[Nl6' jrX}o=\c/$@hsCP($Q o~WpogW7ۛOQM<Ϻ} cT¯Rd0rZ@lsA&g [{׫F`4*?g'er -oB>a"lko>.n/9gJ'FΣGއ+X1v2%h:breuwOC٘2)*h,LapdhU60 tv䯛Bp ^yX` , f9<~IYɋ;DaV1@h⫹ u1E?QZ=E:Zge8adضR 9OjVf=@be!V)%G=9MmI 3I_nX`=ڷ S=ܲ/y0)+cUΛ ҶaS9Zs4p Eq]^0R ,;v\ z0!mS|'3k ٜSym/ҷLtδIfޛ!G n>ؗI{#ojp#]q1L,}by[oԥ]7< a z~E "zXi AXy{Ǻ-n`&Xpę2(!"@51g6$NE/e#_Lfe6_6! (cK52 =HaJRb:1H^!kn:b?I $6GjF`z3Ⱥ $x~= p8h1~_^)q*՝ d|l,{РbV'}yuX+8/ 'pB=P&*&yE`T u L~*,?/+SYKlP5 &ؘ}D0`D5rﶵ@E5VN=FoL9$rJxd!Ȅ:{3oҲsHpZK=t6J= 3CGg|Ų#aY72FD-bwZ>:OiNz~at(x:o@ʯOG ho@qtT9z%JF} kլ6vf˯_4jg޲vmF(:{q,0bt[ڱB ţ1rtVҎ}UU§U2ܵ5?N W( H;WKYMwNBg˹~ڬ=QcGS $8$oJā/~B7o,!wEhʍ2h rc{}׃X|o< o#ǁ Fza6*^[;{@e$I< (1oHvḾL@g~P[3CT:t*#w%k,bH߶'PM}mOB( Aڇ+xX0\bB_.m_FI$ qL*1eBǔIJ )!S&)GyTP'{,-Sv?@){ `'؏{r'{2pOo]ǛEbƵƟF*d6c:J|i#pj1Oz%OUQ?lv]ak^TTaRIk`qkV(vW)FُUWuxgslPg;xs;#/̥ղnbQP7cT+qI %n}ׇQpO%(\8G4} nNq°QӏO%Zp8ՙ-wq;۬%7gbpBko5ǩ7CWnyq8JRox֧vVC!Zqp@7#u~ x"h5_ZZW=P.F;'1{οBgXiK)inژԊɕY?9AޜyVI>+5h܈*:x bI>t^ d{_rܧ}a}K/u1zd}`B4z3=CKM^ך!@is`7!@?+WU # #MD?cp } iz2 )ˠs6`|x O&j"lYm'AҿcM \;Fm#0a)(`aebjcyIZajH簘gga.yژD+џ0t`&.e0f Ywy:1±waNC߅xYbe(fzӘǂ۫ , ,Q0 L1P4N3N$1ϰ::<ë,C1`5N2N3N4NLoxJoȽT{[roKm:ے{[oL{ z$葠G z$葠G>cꖬH#A=H#A=Xy9H#A=H#A=@K#1<H#1<{3Ty$摘Gby$摘GbwyJGG x$G x$x^1$葠G z$葠G z8dg1}bj=gn?__[4Ɨ-z@-¿'`@nkύUR+j~rk{Ƀ?|7ek+@Qs\;5/T$8 [ZeWwVk?(nwɾ)8͵ƐVHZ3E34cɇdX3-_xIO7򵓬*u|' wt|kqq ~H!vv{v_v,4:?mhq~_+iN~m{6v~>FM ]|ڥxV%R8fւ i)W^'b;@o$f4к_W 0;kQϠ3iB;VDyuq~{ss}vu4fǒ!_T-]/&U-p,܌Tm]2WFO^fèɛF?7ty P|܈I8 zp{S>$~߮F?/ڐm9H[P0%ߘНc&;40b=$6B;Ub+&(ՆǑ[^6 I::R;jM"E e{t҈N5[͋߯Wf?fwd,\]aGNHar̓NZ+yO]hY C?}]C~yN`vz{r?7)٣E*G i qbpl6}by}[g qEtPշˋ߿ۊM0.Ԫ.(}jc醏?hq>&Ser lxʎAmC/I8Xb7[^#F'{=kN "'qR: xxNl@=>%g;8'"@mVO3\'"B^Ye#_L'fe._PeUZҧ-m>DZ{ZɖSҞվ `o6 בMǢ= *a?.fи{/\q1sd],agUujcfvߗ b:װuiEnz[ʼnBM7v1*30{Y k"` T8^V(0 ]WCp.#8<ژ\\V({ g[}tzQLkP&U+{ÖJU$L7>-4L "҆3C x6(<߬,g(0ӧ2 12e{̐vyws}v}?EO`-8_2lvŻy[2+"EAvIډ7/$U,ξ`-5v943edǪUc }C6 W*|%+e#2XoExɈELdB)blwN}] !^Ahy< -ȕs}gww kl)fE =b#T!vx5UaǃY`hiyd㰝 ظDxJ)x$T1L f=TTQs_pr˽HF{id˕{f V{љYmw V{*}j23zj%|Ld,r,~r^YeQ܏K~ro'Wd餿BW u^NסX88$DQ+?0c0 +Js˱xrJGz8|:Б._:tס#=go@Q|(V-,5[XkԷبfi6&4[~<`vc-{ŤyhO~Q6# Vo}:ߤYY:v4%jKBۛK1js\ξcyn ?1G ]%K$4iWvl]>A,QϪ'|I/F<`D> Գ[;dI?۟ c?#왘uȵstK7`0:JgXe`~l>q`;8_e1'aX0Fń,&"w7GH(Ik$Ac$hǔIJ)AS&vLz1ecǔIwS&~uT/ }XDU ݟw˫֨қ })⏛K:EMfLW2p\ɴq% ǕLW2mipǕL];dڞّ# b]#~8Fa:G2J[?xnO;xno*ܭB8fG& N/Y¼SJ0%;h N,C<:5l,$:dN)YSJ8봢%: !+*%KsJR:-ΉEÀ4M:O1r7=g;Uf .Rysz=SO)=ޓcG=9ޓAG=޷[u33׽?|gIzqdYa_i@.u%٧4>I֫} QG]6*hdڮF[?t(ξs Ov Y͘p4g `ē}^ISU쏲qm-$]~hXZ>|2C`T|"{"w$ڵ&UAQ#c=h=ޙ\<;{|3oeR s)n[hT*. ~\6xtB[C#?Sѓ8 /^Sp|il' 5~ (iԂ{Ʃ蠅 iVטؘ JfP5+:BPj+h5ZN|3Զ3CQTƆafV+aFhkj 6#)3sZAS]`f!oaZ[c fkزr85ǚ5V>mgS5k s(mce:/ͫ6mZ;uj1gc Zu]A.SzN!|l̵ruj1LhF2-5XXWuj mYFK`0* J[}oxHbc16k(32&QhMW j׬TW>k:ʒ 5s*`R#5פFk>V bI@۩QZפ2a狶@ڂIQzI$Sul&ҁIX5g,j$mxѶdHnQ# h;fF$Sc ֊5Lͱ¢Fv:= j$Zcl[@Rt:6b1lΕӧ@Nzi)5LcPHf%̟c=|`J NiL:@Սj'ڢuFx6ǥGz0,j!T1r.Ψ"nVIm F&D[DeN \Gٜ:@5UZ9=tcd9=p ?A;Gml(yȡ(B*aR YRK@sB!S@Ba"wonWDO?F-><#|\ێll0h%,r}c|O6qQ\Von5ypׁOPL_>..n^@͎?գ>Jް}ܿ~~0wң/JZx"yp<d- od|\ኖfJ+؝MyOX;.%:J47FΑ_y|uNEvE-,E"0`ܱ3_Q1oXm8b}/d!dTI^6Q\=Ro6ܽC".5ytʤ*;gI4q/-+Wt↰O 0BWxIUnpN 2Bs@y=YKXxApuJv;G\d{A3ؔ~/}phoi~>Nu &G< YfTஶ=ݐ m@roqmE45:+# aoahlAWQPe90V86z6ggʜ![y1%9ۙ<^-Il3d F;냗@<h+ͅaQgx,gj9Iy\ϤiEh%Ў=>|CwT]y_h0cVxke##-Ǡ;k Y5Ήƭ l2E,{gҮq:w`>M^חAi4iNisAH 4c(e;os8@uҁ# wTrBnm~@N~,?\0(ʼ)#Z,\߀R^>xCv/h mr cӼ5K"ϛ m&toͺ9; ELkAN!lxKLwe65SW;QIfaywqwI! 2pߗחK0rf M\'\#tG F_ELxg)0a*JS-_@v d1KdxaF<1*@' 4b7CfJ|$cwFhBFK>Fn*>w٩ʍ80]Yx".#eagW7#B1~`U^XMeՄڅ;\gj1~#ܚliQЄ"YBs!wϗ[ao )7YNq -@pŋ_ԉ"!}/1e>`nи]* /VR+], }nx\r,D>ͨbWݬ1Yea!XECC{Tv bf7 Ꭰ4IÝ* jSu\2ݫ*jnȹq$Ԅm baE7Hn&bȽS+b"VB *\כ5n6cX׆c BUc\mSmdvGtDɳBy-I !vHEz!h*2 YET!A%CV~~?d YELuVlT!􋅘!:嬢,Л& I$`5$ I݀ ILC'd%ːd0$4R|$j?{fƟY!pQ#Lir2MOPiȤ.>6{q Ol\oZ,۫G?ǫ[B SR&JFq2iH6!#|dsz2i82.ށ =4{j0(aQNfƖ+ 3\m'%)uS+KH_f!}:g1TA89wC(#K4K$HMiA]$:+M&S <7v'=?}Ȥ,GV63Ԣw(6`P$hBb? 5OS$=ZiѿHXjYq"Nk{t=i@~(_g.,y"q6tbILoMˍ?3l LwC_+^3te2byu+bOkphC>/I;0cgsm7rHgtZs7\ai­0Cځ^?9BRu<ޢ-)=D!me^BP.T A<BT L8e!30V(fE}C/k8* O'O\OpzyW}ĭ[ 'voWoa^-Ꮗǫ[ʢTfeֱ5,F&qNY8r&ELڟ3iӽ_ΤHmI~9r&WLlIЈ#n1{gGdWwbsehAa೰iݲmmكE7t?Qšgggggލtptyptyptyptzpt8: FHc.zyGu;=<SO =a؏P{;xg}T[n/{QVH׫{aY/:,GeK>r nQ鹽(:C'i ud:DvTJ=p][eq |8kg?IJy} *jY ߝ%Oxx(^Y 2O SU ' 2G*=UWQ%lkؐBP_ϳ[X l81~g~(髚vKٿ1PYBe;?kVng'tx–(]݄nknFI ҏHex% P}WZzm@HeC}?8QUcrb-cgZo&\줐6epPWر\1UR35}Q/u02sĴ`soqUj~q(U6׆y:Dv6WL?آNuGqn:G5[u&}*8YYޭMsy6c-{| @.3cdҦwk^4\Bgʹ<L;WgϧYv9[6F]ɹpN#~&G>[)B{R0yP֟杋_d£J-RC8sف+NL8eJ -H= pX/=/]T7?>M U@J &@ڴ Չߞx*pժOM{:U1RJg>Ic\mAB"%Wȕ\f1Vm8 +n͋=>k8mXڝ}<:>ڐs!"DVd"RtSGuYhBfX"g)LX!q}̅B*Bwڬ,>V[YfM9<ـ]E 9R]6M(3bvNTZ)>W.5UT.S/FOE!t3_SevG_- ƔD1~&W\^%=rVrYnTmI/W'Me' }mӊuc'+ia!BRVoll}ۅ.gZGڮt9r=v54,g>rz,g䚩[PLk )rH-:[p-:[ YP߂>~DhA{jcAXnXMa51&İV>W7=xӃ7} oRޕyr~eUp!`L_{GOfh $[0[T.eZ[^x%v.Jz1i%F${r֎m)a:[??zH"$!@gD3xY`?;5{w4=1O@CpeJUd>;+}5o/ )Ԩ?/(9B@ƀ_a.S~s"É}hv`݀3.„`]7ҏ"1jmkTjA`w FsVv#>6[3ttY󫸀1­&497)7חMkPq7 _5zG/WNz6BRT کPO$'qo +\ѲLޝF2ěd梨BD5 Cm"i¦-(oȝ#[uZLYFN~r' R  0Xh9`[٨7F`ll}ʾF3o2[ 7襆GՀpigocS&V9{_Mڕ{lY'id+XH<M&&,9ŋu跐2#Ęf t-(V.hU`(a[X6ޞ?=x:/pmoi3yl&-x'f ]m x!]ۄ6 d:[@"G; =YX0{{Ccx 2hWw_,b&+ˁ+y&>8>P&&^͋1-1m{g!f0ށ5x 46W â:Yr0Iq?#=c~Fea(ߐ̢U|>U U)eB_9f-Lu\W`3udP9с߶5Alwŭf;vm[n`q.ij-fv_oWw:MB͵K4˹V En1*0v&F!t\woh?@ (䄼I+7@۸y9qYʢ~d(V~26pbavGqopEkxw@^Ȑ/X /cӼK"ϛ m)&toͺ:HPEܳgpe65Sc;QIfaywqwI!©4pߗח{0rnf M\'\#tuI FCE=Lxg)0i*J-_@v d1uKdxaF<1*@ogA=fb}N,.1Y8Fm佹i7Lsc}pW0{ Ӛ{;SDb`pw g a5VjzLs骥vrF500:.)bDw!4ky6:Q7p V00?aRSU4VXMÅp(NjY#{?TiTCr`&2v;h2=)C{Tx0#ĢBY6{zqFK(^bUBk.3kI'd)4|I4N4 u2bGk+Ѡ$ qYB&NC ,̾"BB 'Gʡ^lRy +8:CC5?Ǘ( %p vwϊ;+'14\ތ, P+^ߘ w28hqؼm༃yWsμ80nڳB_Q3SĦzv@:Zr/[|aB6VȇwON}%Vn=O`cXwq(={ܞ?=t2o۷޸(y޽$]~qɐU5U qױ}[ ,&F g ƹ*@X^ )[pc -|TwhK|~ȹ遯# PvWXp#Ⱥ#~^=T"T{#X Gp]'aJJ~ VBB U-kkk!)Κ2bvGdDũByz }kH$ 遼HCzZ@4Jl4 /=0?Pigv;țVsH<^z`82 遳Cz jQ m!= nH1=7Md6 nk"]X{jQΣ|>Dvk>zgOCT9DeO(ܫCE!{:\E_#^ ){Յi-?WŎOCWU>7Liz2NC&pI+<<1^ MEոe q7ђW(횠+[M!#|za*$űGt栀whƢ'OV}*VEJ(`KbJ\.77+N߉V[Ok!臘7vt^3aK,2,']nL܇_"on]]C>/I;0cgsm7rHG{##giIF #=Í<ᮙ#Di@h F cQ d[h@ 9ÅjlP&0IAj0'-Q͊>"O}D7If!['n 'O\OZy^}ze`["lWGF<<^RUB u-+aߗ7`G 57s™:3)/gR_ΤlI~9Lڈ3i{_ΤM-bmY#n1ȖRl m2(|=[ܽ-{1yfܼsܼcrܼcrܼܼ#ng5JXzscrcr#~ֻqt91919qYΑYGӨib\?^/(NrtBu GwSğŔS{.=!6jOp?@6#o?BNG=qj_/ ^ԾG^X˿,32%_iYiR|7gnTzn 7$bWz}2 uÎ^  }˰l;y4coٻ<6y'ɲW)A]=+3ixŋ"YvV [ avĢ@1A&VE*꣤^`RH*+:3y~ 7',p%}UnIcP"S;7*> +1T{rGxЁgU[6>;DPvnbwi%*H?'Kd4J#~ms$@ @t\ h[뵽vT~Q`^ف+RCj=1hr+oA `XxDۀ *x_e;^dKٯɭ8rfhҼRY&buL=Ԩ6gjŔZQ+VU{qFrڼN>olڜ{XfV 7pty8gu_h)T`Q53b=`G9G֛}6eJ} I|rHusW3KF Cg'5G  G^9,t+ :U@> r4f*Q;i=yY6p|PFiNk_"@?尛Z=@ @-.4FނZ) ^Fz㫑*0UEP>JdYڱ< )L}*?9Q?$H"$'#@j* 8;{#F7MBO?кE$m;3\rώJ_î!?V餣x]^`.0_ fb.US~s"É}hv`݀3.„`7/:H eZ>ZP؝_hk<{nGқ3k‡Oc[gMhnSno/˻נPn2@O(jt7,d+o_̝hANjmSHO6߀j4We6!vZsovޓ3֎KD.n7 C{c9_ȝ#?GZLYFN~r3 R  0Xh9`[٨7F`ll}2z *i&GQj5DW_sigocS&V9{_Mڵb{lY'id+XH<M&&:uo!5eF1K59/et)@@zΠ `֐5> ۚGµxWcxȁM ,czϴNu L dU> Pkș[x&]hH#,BЎ=>|Cr3VT],T01 A|M 2r] cgo@&wNtmM`P]qYl]qۖ[#u\`}Aݮ/WNSkiuisAH4cT`MB J~ܕPP yVn"qsrc0EDQe>8l` (%< .^`Xށ!3^^| ƦyD7ۈS*16L^Lu!Hc'y;?u&g7t l1k~[njw.>BSir//w;`@8ϛH8NFۍЇzD6g7XS`FuӔe U&1Z6Ɓb+N#Y•2a{ybbUV! (88*fK `zz͐6EAAEY>\^c6q{sn>`2/ 5w#\vlz3"SVTXMX]3u%GdK"<=܅HҮr wD1X2ô}7;`ZVd< {bݱEXq{8ɼmz@{Wv%CRVtW1]n~G l=60hܛU$\T1 &fay1hoÍ*jSu-͎*R ,",@BMVt_a< ^!xYDRdP`%uGRf$+)Q$%[ :m'TQb8kʈG}Q }!=7" Cz jnt*=zHz2~@!;p|ف oZ!=xCz$[Φc4/SHT"E1{4@&!=@ް6ݓ$!͋va!=D;jwڭ{T{蝽6?uT?kjQm Ɨ=p"^x{s}8{1U\;>uj^Wd2MNP 4; 'yG'Ax1(7.W%DK^kd$o5dx2iH6!#ٜdz2߁w yf7'"{k0('3T c]}ruHUГZ,+G!aPPR?MFZ)mPZ)yP+QƆQ,)q{_௜+;B|'Zmlm{g<ٮba {e;-doȰlt1q~uw1jt-3b$@9h ϵ!F x%q&[+v D7f9R*Nu<ޢ-)=D!me ,?[([x!~[@$"!dP@Da4+<裯_$Qg'·'n'OܚO%Tyj} x"lWoa^=xuKYT Q/Ե:_ހ%5.$ 4 gR_ΤBIA~9"r&[Lڲ3i#_Τ~96z$ohΊzfvv3#[ϏK2]ˠOYsnsۢ ipypypypzpCy(aiyyyzCY :8:<8:<8:<8:e=8:GfAOR1 ~sux:Uҝ =+NQ:SO =a؏P{;xg}T[n/{QVH׫{aY/:,GeK>rlQ鹽(:Cx\䓴:U^";{%8Z.-ò]ofЌIebCh䵳$^v>WwΌA pZ<=k,sp>k Ϫ>C*XYDuxaefE>̐O3 9WTvu);hOE?dsk]cɾ"V.m9OՑ&hͭ$2"zdX'>mck@Șԧ<^^yɽclk]WQ읯(*0O]<\ӞO-sI~!~> j1roe8/ws\\9ǜ5fOjo_O(Hu?L'>QLpYGS\jٸg|,&hg^۴\WVI^}+kq9O壏~N[ =j|TEKc< {ժ<{h%}]~Ur.߬sc,F_qY-PX4i9r@}ˈ|vuA*Ӑ_ѣISEoK_?OlS5gV.^ FT$-PP35~Rqc[]|.ig:#w#=ͣheu #I;MxL~v9{gySP63E:r1̘Ԗ\vL᰺ [93 ;4rQ^ЧR mgYٍ@zsf\:{MzYw+s츛 /]= 뗫s'={b!)T('ǓMAƟK`F7hYnM/ A]sědҮ#/ѣ۵M(mrxo.̭ȝ#?D04ZLYFN~r} R  0Xh9`[٨7F`ll}.ޥΦjomX{z{5`,vƌ2ԥj"%SC0pk^ cizs2_#6כ>8-9yN18*wCQ b06@`ґff\ge`]; M|6ȼ]~u,ƪѦZԦslC "Dz/ƴ$s;G V !6>R ,aC IgJ j03)r2Y]Jγ1*q_F%'(UIŌB])}rp/yT_y|L>𗿿L+N&Eo' QeqBFx d:)z8,]t%#dx2iH6!#ٜdz2߁w yf=L5{k0('3T c]}ruHUYJMJRkD!}DoTx99%dĨbbel(1Œ˻ \R6=dV` դT?Cxބ0t IgSV[[A|Fϋi1F 专h ϵ!@b=KK0ҍV'@{uf@>@h F cQ l`B!B$x!~[@$"!dPjmz1Q͊>"O^9EsDm8OEZyP}  '.'OlWoa^-zezDk-eQU*DPײXV}y|ԸP#kz8',I~9 r&qL˙n3iˮ_Τ~9L4ْ{;+Fܶ1SϬl>?.6 =wO=wok-pn7777︬7Ȭ?7Y,??똜?똜?븬?Ȭ?ns|΃sL΃sL΃s\փsda4*Ew9W;JS-ݩP^p]RxjO'>@ =~G=i;?S}t{p>W²O_ufY.zuM O+}!. I*Ђk{%W?IHeC}?8QUcrb-cgZo&\줐6epPWر w[VT Ϲ2Nߖ~)Z,~!_[u,[9)T?5E܎ ɰųVyƬgIA 'VW]gZɹ6U+"~0i5_z /QjsE* շ+HdF t%'sh+)Y.-EQ:r: vY.Wr y\ɹ\|6+r&E+FL3"!1zSvQJS X,ơ^z`pƤJ&Lar2,tpCtJrBzdz7H~dK,c[!]oA D*]B@4!9ԦjDz= gfzn'|:V r[ W\Ecv ,~\^<Ю)<4ͺ|1nMT3<7: qEL;{#]щEbՎb*ԂF[sVv#>6q.nQbi>xZSӥ^_/wtfd࿟~QQ%oXV>_\}?;ރIQ%hb$'?"+\He6=)!visovޓ3֎K'D2 C[c._ȝ#?ID{KǁMYFN;t`qBS텕yxc Vj+(zo"#K $R۽ O?3IUvWvh:,kI'^ ~ c禊ljڌ }R3fl;9MUO V;^[P ؿ:%$ppvt,x 6d3l-BwKL=Uf;4jk#K ƺTPg6"r0ݯVe4-\B Ʌnvu+L 6՘6gg!ңy1p ~iį`e[ٌ74+2\՟5" ·L:oFY0=cF^lu`2ӥş|>UVwrڬ+B|BSWoG`ׄ+n܄-ijmYϤ,\l76 %SS6713{[G@k(8rW~@A%'LZJ+?`X~<f%WQI|]x]T/7 5:O× d/h i+ۡ!`26[DE8BcwԾY4]g'Qmg<`߰̆kiL^1CC:fdvww"B L}y}I?} #fn¹wDuB5B/(\@}h)(y ̈t! n+M c|mۡD?_" WLXE0扉ETYp\bYMD\%N,.1ٚTFh#yon"%y9]$^nUmp ,{;SDbdYc2 k =vtR;Dx#ܚlA\GB+njmlpN /3LCTMDb&̡kU#{?9TiTCn`&2vP<5ŴL?r@OP7MH,2>H&^./QRiQx2@gjLrj6 VMt.+Nʹv}FL>P:.nӜ9 Kc7c,!"Jg,hξB#2J H>,_lVG w982GfT&.$_B6b‘Eu?19;(Y25$ qM^kCXskvl"všCXhkaMȓ k`CTsjQ͏C!6X@\:0O.F S!6†@aC lTx5 0 0z@@K+:,?wqBa00b:Foa\t_LJ&ze_{T< Vxxb<LKVO'ǝCNv5AW2#!#|zagZ,YA,4}~R۠V1R,V E1XSryx9ZTJwx]+0 /R:K|;܅%^BYvwa>|{yu+bd~yqkHځwṶ9/I!KK0Va@Kf@k@h F cQ ; @ 9UTy6o$C_Aޗ*+fLrFS>6A$Qg'·'n'OܚO%Tyj} x"lWoa^=xuKYT Q/Ե:_ހ%5.$ 4 gR_ΤBIA~9"r&[Lڲ3i#_Τ~96z$ohΊzfvv3#[ϏK2]ˠOYsnsۢ ipypypypzpCy(aiyyyzCY :8:<8:<8:<8:e=8:GfAOR1 ~sux:Uҝ  Չ?)U]P{BlԞmG=P{3վ^-G}+սӗYfdK裿^]ӲJ9nNݨAi!P䓴:U^";{%8Z.-ò]ofqebCh4ٵ$^v>WwΌA pZ<y}cwt2tj#>Em}}(% \dp?dS+ZA>[|3!Z턜vhV<joZg?iǿn7od6a"~\r9kΎ>* 0a:O5]|q}|ߙDn7QËJ OʼnQBHvG5|*ysUi7|oMx*:nv)8v<˽{w^201{Ј@+7_WϷFp" ,:J^ `rh$:.G_>G(S=W1 \3@I)#0 OqBb,E~|j6 jZ}5_,쵒{q 'Ud{!ix&r&δBL|}IP +Q^E(E[[ ?,җ_LIמ()iV`bYzBً.~jhlX~~k|h}w8KSQ>JDF5 7\^h;swm>kivef=mY&ۯ1JڨL4W,W\e \(xY\dey&U,Nwocr |2YռݵsmZh zt٭yK|^xHS`,ëm铬r,!YDs#lV0%vDźQd3ӟ3)ڡ5~ WUi\DJY͵S"`rHgLڳ>\Gz>7Vh=_R鳟;uʼ+5yWKi%^7z,%^7Np%^s$ʽoJ^7Nj%jOTjTS{*?j^JjO?WQ֫ӨOiTj4zi?j^FZO?WQ֫ӨOoܫS߸W7ڿqoL^ߘjƽڿ1{cjT7oܫS߸W7ڿIoB^߄j&ڿ Mzj&T7MoҫPߤW7ڿIoB^ߔjڿ)M{SjT7Moڡ%\}ݱd9*/4L8U&pY0ye9`%xM€'ۖDf}@F tsÌXN8M8h>{Yuyy+o>Fv9}~ˣ'6F?~8{fx?Ipv/zcX`TvK?NdZog?>)G 'zG$wv}n#osuG*hko+#{38YgtңJK{tV: u~B@=nX"|&ד^`@U~oht{[oޏ^~ڱU"kU4πlPQoGE W" 5`κ$"ʊLJү6t ]q Ifh[@RKx {]i9}8{ؚ-]ok}nޱ^RGaV>vIYh@G ߶mPk}gr8COoTl縶[">ėf~%'F!*?);i9Yw֞lmms-1.1.3/data/projects/CoolSongs/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz000066400000000000000000001247461247673406200301130ustar00rootroot00000000000000 Gxr96z?o^M?1ն{ٞ5Q&K)M}@ā(0ɢh/f,)q_~n﷧KZOޫsOn0{zZ\-U+{G`*j˫޾(~TeA}Yz1x3>dPMa4E#aN  ЮtV[ϫm=b^?SO W?5uQD&v]*6~:+bcrUgnbgyf=\WMݯ?W㿼~o`*Mi7@odׁIQUf- ٜo*Vմ*Nb_^פW5۟}`Ʋ.M,)cd 4X_9=`Zܗ)Yo-3YU]kemr 7tŶ]6|H|blapȝjT''vNQO :4jC\Ϸ7 i~mJE9|u}u%WX#զB='6Oqfz73~\o(4P տ&[ /~jwk-~M/tyx4]GY\lFFLeZb"0uQj]T_T 'rO8;֏|=H3 ĐfN!͜2PC9MBWNz'cSNX;V'}p۴b6[QنHXB2FsLEv\"%)(Fxx Q)#`yuv8&>bgEɉE4z6y :iLJ%-h(<:TKTT-Q:OeNE =9TtMsi諜 <ͷ=>aDv<;Ox'2VyڞT\v"=jN=j N!jOS|*w;O\ωb)@p gH-I9?.ӱɠ4\Pj~m 04 6q2 /p9!r9!~xTIsBP' A 6p%z q_f A`ݴul,!4[8}$[)ayw>Z؛5Wu]X_h1=K,JsD X]k XŶwHU2DYƦYYF]5<^69+l >&4B%\stN""cjISL$ ʈ93yx|NԳ}-$O D%,ZL,f/ Nau$!E8LOt"#+N:rzOU~< ;n :\)^pUXǏ:Xt8oT?7P_s'Uw~Q^8+&em կ}b]i>fg$bزȆ200BCuw}{)6jW/lÆ3~3g-l0wgJn@ծ@=Acga>B< S-ʳ(wgor}ye-x2f;1;L0ܩrwbCPlw{_9OMA@L ՟2/TPeȶz&:ϧ=ꗐмT}90m_Wgnop eA7^jdIVn?i[eIx+ B/BzFEϒFynOcwe[;i,>UUi&U]qlibê.VT 'NSW\Օ]j{z' gi,no~ 3S?s{/뿞cX/2\/{Mf1N5CJ<0q :3O{ҥE|>xl5z:,dԵQ |CY {bfBaP6K-D-H ٚ aO6$d! 5"a{YԒG/Ek؏t'Ad4oSdt"n=F%R HBmA;:X@$q& O4IZyOrm~ZnO=F~+w@nqg< ,xVXB=*Du-qoxD]}Nx=n8 nƙDz 8[X߸7e%nX,&5ANe}qnbIl$]lt']qni8UBt;&<)(sGwS.KM#^%粑@qJwwɹLD.9s.9U@w@zqy j&T3Y^ĝ#E- U0-)g^SAo58Z.3Dqq\Krfdvk;3GL Le${LV!-9e6 w͙ |pϜQ7jEL ɒa*lS&*?A&4y,VSjBl A,Ҩ# aLf "?p" as!dI !T9l#8BcIYqWP9zT9nB<6cz= Ykȟᙆ|35d*olCƼT LM@΀gJ T6Y0zҧe:D)JC1|<cײ.wO>|`&Kzؑ- FW.<$[?@ [R"50L8 +CL8a*-@ vI=C$4SJߨpTC<?DL1<¨aJQ#Ä}mE+P?B q$Q).(he&dQ52I<̤Ga ˏP#Ä[ c$Bc CLb!!L@0.Bc?|E{;HD&@9qʇUqƇ6YpƇ6 qƇ>qƇjpƇqy- n ud3GՖQ38Ȭ[dַCۯ m#4p>жnC pyl{^̺{̺߅̺C̺̺ ̺o̺ӌ̺7̺zz`zăz(zzzTz8Xp/p[8ʬG8ʬC8ʬC 8ʬC8ʬC#8ʬC.8ʬC98ʬCD8ʬCO8ʬCZ8ʬCe8ʬCp8ʬC{Y (EPf 4tjUD38fVc,ifVQn̬bYE (Pf-`@2 e)8ʬ'hpYO(PQf=Qz G2 ;e8ʬ'qYO\Pf=#j@Tesya̷u6z:ۀ2yrʬ' (7:e2\ʬ (Ξ0:-À2|ʬI (P1:ŀ2ʬu (2:Ȁ2%ʬ (F2:20ȬS e3:I2pև|Ad> " ӈ8|1'1RƬSS Ny5:ր2]̬ƙ\\.-""(&QQQ"u魬HoeEz+([YGEEQHE@QUaGŽ" ;.(ҪHe܅k?{Hw#evih't.0HCHwGG 88Ҏ#viǑvaǑVGZvi)8ҚH+#  v$iDt$ v$ih't$魬#IoeIz+H[YGڎ$]:t-HҸ#I$:v$iUؑ#IŽ$ ;*HRؑ!Iv!I;ak];aBaVdv]:Zuuk]1f]Vdv ;ZEvVv ;ZEv?8v&~]t)]pqGS|(Ӆ!C-+K3$Q& mr57/[3-?[BY޸_[ V9{uN]:u8l<8l/n I[@p.U7Í!jj 7wru95 5C,6R$Yg"qȚɪ逿&qȚʢ!k+(q:KE#Y,J2uQ5L% ]־( .J`X4֑(M^ ǪcuQD]:UEi3uQ\]8VsCrQX5e>X5UC+PV%U\ 8VSr:X5KǪy*V.Kcipg;^E}ġ:/Ust4]ۛjU?? 6U9}TlujB`-tVr^m[oGA6i5~\rkź//W/7/+d|I2YOU\'_q?=y pŮZfLdWlVԋ###eHwWpZ&Otn>??M|abUeQv˧|b*):f#b=.UeZYcoן޼!x7o>}ؔ`2b%COŷZ7GcZU-H.s=ZU2*BЉL-Z-W|uv/U—b:.ҷ7tGciY}M(֏{>/}l0r>Zrɷo~w}_O7ۿt)6^ݧn2xU.&yoͧbTyݶCt.[&p=f>~_XmU Ohp XjDb>V,^֏lR v7os@x:_l:kuN'*ͬ8o SA_sh_.9S%?ڧdh}RO=02jC֥G‚\5֭g êsHmM sHX0[CvL C0cU T␰c\8"a!aU:$$,K aWs@X{es@ؑU9 ̢9 \vLC0cUT‰av|;=s]|8$9 as@v̀‰q@y\'J; l'. s8A]͸r8`=vSv}Ja'f{,kG|F|{ˢ;7o}o}כO7"t NG#}}!G|>>y7ϣ1>3DϤװװװװf9nS~OhVXؿMhV-:f>hR[+fvٶeӥ.``]9{ޥ]2zwM]w ]az\KO7Vl/nکfuTpfօgزB۽ȂC:}D[V*"w>Uu2鴜Vǯe9}.U1@+qk9r\N,rBMe<-ƛjqOJ.擯IhS[vN-;Gߦs/i,&~.ç7Nr&2ܟW]X6,#Y0z{G0vFn_۝0vG}S p no޾fE~L>n>??M%no}^L&ono5HWep*L VxSqRᅱU+a噣5Ѥ/Z]NY]f]Mk`Rw"nb>?-&^̊jU]}7EflvrWø/zϙrV4t>ۛ~7~\&UK է룞?=pb,u aeU=1!jic忝LW{uBt2*rSjm9;5eMńomc1V蠦i;JʕVjg?/WUTw˂mWc-O}y_YZjUPd3\\:iS|]j=[|3pςJr?`sd+*Mt薏y,u}ll13TWJM/-,vRNrJ鬩5?(MYϲfy6WԽ]V>n~=?,-D.3+eϦ}hؔ۴v߮m=ZV۵ߜql1kUVs,j~6CǦ<0$O/l+\?vK#oS˶?4ןU16~}~`8Lb (([8z@;~LFu([PccayCwMBDDxPQVXm>MA@4 m6"T>hVHxBCzBK~S#t =#jf[y@c|fOb6Ծ _Tf}jfʇDOPy ?qIOJRZOBEҖ\K*gh> q= ^B䐯 +BCS}+OSׅ*WvNr*tq9B_B"C+B"** U!L@ a_&?@9 Z6:PG hM1@>!&pX(*''o"Y@I"BdqV.~SV /mA\m .*D&D[Ad1 AlfBtP :1'*A|1yQ!J}r[o?A۔oQ'?VcjDWПUyV)P!b'J=HXm/0vDJoA$R!^6 TO!"O_z%!R!fV(3DzbwI01 dӦ P\ ]FRq`/^U<+|ax@Txbz #]Wz^7 ]Sz]zㅧG g=̥o#3/tz~v靗"w%]Sz %jz)bzނnakJUΑ5FLQs1FMAs=*=HLQӋzM/?إ]z{v$-EHKOKO|W'Sғ.=y_Rz;~O?>oz^7==IMW.=ғӋxdc"^k"5y$5%~ғ$zz$'Arz yzxқNO5=y!yz޼tzvmⷦ#>Ӌ3HOp:'i FZ])e_t)K." 痢{Q'.z)"r]y)wN\{]wťO@]t] k R %߿93zy=.xթ槻ĥOA4^S3yprjzںtj|z"_ |JS[[z=u?wcrK n95ILOSN^3`,4>SsN _74JSO]>SOAʩ⥩ Ӄ6@皨ӇEӏ`?ٝ~B>}y'PlgܕF b.Hlnj [r7:jZOj Zrf5YQSH8j E)$;j -5)4;j mzj*5Ԓs)Լо毣濣毣HM8HqbyGMiw5GM!}GMyYԔD&ޗ(e#5)I6 1KW qo!is}k bUkhV3jV@}x}ibC%@t 9@.N![ I5sm)9VĢKsĘ {'1 ۈOb/rw\XC$hߎXӜWEoEgUĞkIl{?;b @蓘C&)Tb ?54Xs^g=If鱳=3V9qC1-0V⻦Lm4UӾUf@̬AGfmʃbB2sXfoSҟMf_1jfYgMiwd9<*m/оUd d6NM.3G?>Z3}SouV5`v53G͌A'22k913Ovkόψ&KʌAGm' g標1,]fG1`\[@< ؟?2n?߯#P#ys'DfՑs; ouGơKaiҬ4)dLo  &l־Uy(̶*O Qa` s\z*oBa]g>SOX"*L0岔0";WEb0C0˅Y.ra \,f0˅Y.raV+a-ԹIK&> Lm(PڢG9 ݦ8x@D=iS ڿM㚗25@dq U p:5\jJ鍪ؗP65@/>/@;3m{! >mu9v*/ 6'Ű *ou?-vWq#E*-@}b;mC3#SouTwAW)y/*.UZԫ WagwڔMb`J*-HxؽE]cJksg@-ؐ /**0*k U^īg>0*0}^*52GJ ̪<*1`}^J>&^lw1L Jpy?ڕgn9RU`PnފrUW&=4Jz?1ĨWCz&i~J-5ħp^+ua&v Miw7xqS7(n);n7QqShw77qSHw)B;n mBB;n MBӟоrBӟ)$;n -~rܔ+1Mݞ| P ‰ PJfQP D "45o65oENmgDnՕ@j܊,xdVAc3qWB[` 5Qs[]ioC3Rҟ 4KoJd+j Dm]}+h&ImRs[AmM}j }>1mY 4 }f?-Tjڷ)ϊy61 ԾUWj ߊsoQ#q@gxWj Jw*5JMQ[Wj "4iEmɛώZB뺨)@3k@ Jm}R['9'9.MM?"*jϊ='J-Ɂ'MG){RHM^%%lOj~ZOX/gGmrǎZ'yBρZcr;jIE%%iQK6Z%;j MZBK;j IZ%%$hQK5篣wZjQKHG-!?G-!/Zb1YQKhsZjQK,%Ծ%WF-bulf*mֽsb=L^9zŸu܋:^q/P%{Qu/4ʻuHϽ^!߽C_܋:ERnݽC{Q6݋:ܼ{QMEvnJN{QMEw/꼰ub89nJ)C)Gq 7?MqS,)Bӿ))B㦐MqRnqShwwZnqShw77w7M!qSh\7m8)Nܶ8n-p76~M4;n MBӿ㦐8n B_7qSH}MqShqSh}MqShswZnqShs7MOrmܔLMiw7xqS7(n);n7QqShw77qSHw)B;n mBB;n MBӟоrBӟ)$;n -~rܔ+㦤:pSc|ͯmQ:n~k K V8^HKPJIޜ26@ĀlVu+n `h9ymY@9lPjۊ,x+j )ښ1j͑'nv۔+HMybSҟ 4 خ^5*߆y 6,T\1*zl6;??hjߊZC@)HM!ScԲMy`VUȃQk"5_HMy@V"5ҟ E}Rch6T&v+jJ~GV~vԒ*x!"?V*5ҿпMyh6H[m R[Wj 0~+j T*-=PC jhUyH6ZB@ϊP;5iTj 0lC㷉ߠ6[_0o`6+?V!SV 1ߦ<4~bNJ?v"C'?V`J^%5XQK jh]y"5Jީ%X\{N8n̶vZqǐhmZyXDF`b[ xTKIVԒꬨ%֭n]!z48*oMuj H}ϊZϊB,)y34:GJ -%aB[n+E[WHV$PoCMR6$*O5П(oMAzk ҟxk ?QKPo=!GߊZV ZģޚB@ߠV@Swv"5V@6PSoMO%@y+j Z^o=!ϊZBJ-!v@6dE)G~>oMoE-p@u+j HV?b'Tj %mWPy[KG[K@??bn=!Z&o;jH}SK@%<:8|jC{o '%>|4*Jߋ<'u-m6x7[K T 3 OsZ\P!.M @WN A!hX@@ 4zoGMi~^OَB).>߆r ݦTj A SS!Tj r}@ wM@mbcEMo NS>C}P?15JM!>suPKh㯫zPSKo45J->+j~{}i55*~ RoUؿIM?+OPSTjpI>XPΕTX MiV8UsTASASAJy1Q.@5ҷ6Pox>PomAzkֈK@uz5N5Zyu:5yjjڧ橩ujj֩}jjR=5OMSSTj55OMS:1<bjZRyrjMy6oukɳP m/խ @&P2ODj>1~Av@}[ jAiE {}~Dju>"b4b s"H-![*7hGj B!Df A-Tj BPdj BPTj rijɥTj RK*J RSԎKSSAG-iZrAԖkP|Å%Tjr['ևK@[h_[ԎKA\ADj ZrijBP%TjKJ-zA\ "ک%P-Tj BPP%TjBP1πZcwؔjE$n-9ZRjZB[KHZn-_wkwk ixQwk uY|wkIZwn-q査־u[KH[KHZn-!n-eܭ%[KhZb8jMiG-8D7$;jIǭQKG-QKhmG-!G-qRZB|QK(QKwG-G-qRZws6~G-!G-yaԒcqomS NS6im@q+@hN*c%{HՋ4}'-w`nʼnq3ܼ7v+nTxqo*Wn>mEh}qKؠ7"o[(䆀NV ͠rC `Py+n[Avq"iD ~@HxؽHE]c ЁQE}rClE(nIsv^%7%!Dn UqKo^ġr3 nK/߯Wn 4~+n"ގr/@$+nJ+勵'vPUqS[qCYsan E@V0~bwU*L?бv_B~VʍyܔLxMiw7xqS7(n);n7QqShw77qSHw)B;n mBB;n MBӟоrBӟ)$;n -~rܔ+DrMK.99ŰK.Liv;?G~AgP>_A7POG\;/@P P>pߧשj~_qb~p'槩q߾45L_]K/.ƅwKw>?K̯Rמ_} 7Yr~_$7dM]~सOOmytI/lSrLUHߘ_jh}_L'|J u6Fw*Zo&4݋2O cT Pz(h0L<*f܎~TKX?L#?WTTFzy){%" G} ꬯؃PY?s.̓3+Æd,И颈l6l?BAe0QY?бC98eA,Z: x?8kMgg(1nCK a6&ra^"q4̙q [4d}#L6 3Ԑ4F$hX5CF$,iX3jDb͖Fьi[͘Fьi[͘Ƹьi[՘ƨ4cV$ҌiZH31jE"͘ƨ4cV$ҌiZH5 jD"͘&4cF$ҌiH3 jD"͘&4c$ҌiZH3)jI"͘%4c$ҌiZhySԈH1~D{`B2CG+DQD j8/ B70.3n0j%@ѫZ &GXOA^}R0YE5m'S"`^^Ȱ:@Ez PdQbWf0Y!I*z Q$^Cd0QE!j3+ᇨbU!j3" R6 LRkڌ T&*zP!H?BEzPdQdLVHƨ`^cf72Ӱy.Rqpu E ?=9fm-2íϢ5M>/.{`v^ 8fmBa 3r4?  ǹ4l+Kn1417쿽,n]aWl ɐn1COM{YƦÐō,8hpɲIe~I8fq(PH8fY$,8f l͆Qɤ:6FŒ7.#:ogxL0yÜo^;Yzk'lņ.Z2^0¡Fá\ȡrȡ8Cy \}K397aC m0:t@C 53;4D\ICQM 5<4 CZxa"{hqDizg`}象zl :a  8 :y :$@ r!Nl i8'D 3BtX J5DA ^5CgaM\?ɠḫ$E"Փݝ>`!lu8t1.8M]u!e[g 1. NñU)[b,J1O)BjAS!RraR)m9붜qHTu[8*ź-gbݖ|붜 ҄Xl8&ĺ-g4!m9 npLu[ΆCf"m9 npLpw?W]x䞥p2J K<G(n3P@ p*6P2YJ~Ip/?QZD#0B#f |*"f8e8YƔf:`8nj8YhQrEa9Z,g8u ;#a@g Ξ*hl:|ks3O J Zd o@(1@5V0xe}pKB7HKJ,XCΥ%%?`׆i0NF<*c8РEZ>pN-RMjw4T uLO\k8hHZx Ԛ 6[utpM '%ތ״;Wr~-=@J7n0+]HaԆ+|f ܿ˹6> ̗.&.!d\_p~7F-e@9Š2',,Fy2& }űn![Yӽ#a$,n$OxP\֎'ؘ\m'\8:ģOԋCD!i,' i `y6b/'0EØ+L^ԓ^Db!'/u3YBnu2Y6$1 $$,b>m@י%["3`0:`cI ᖄ_"!I'ukPL=DnHXВCi!I($+n? e,n~6\~DnH8II4 I y 7$, ;ܒCf`c [{Yܒ>I q=s;`w!j&f(zC@X5P(@‹ *5B5]K y,HE(Ǹk"ow53r㗱2%<\2V潤zFy4,e>Oe}In5MIl/cmGrmܗhX 8tdcdMG}q:fKeqK3S8r̈́P!8r̈́Syw2똓eqs;HpKp+D\ܠ$ԗ`&]{#6Nk-8tsSP8tͯm$CL8kѹ OERueaL.tf̟,n[G#psg Ҥ m.̧I5~<(]3affp ܚ$8~q7TR8t 3".~s]K&.jb0 %a51ȓ:jbpT8v̈́+v !N8ud2H:7IY0WhIiGr- 0~PpZ@pq:R珶Eݣ!pv(htsv=ڱuvleݣ;="pv jh{=pvG;ܣg!sv2t;zn&g˃cF܊1$SfC #"bN'4" z1<=>z1[?(Ljy*նe1?O㪘?-XK*뉭/Yj{}חj5]z<͊j, 67rROgWy|H ٿ~/՚W'm򵟂Ol^OWbR@?bL۲;`߮㤬6;!@MeHG[} J[z%4ktӶGL*|]ߗIQU],n-\o:gk}ko0[/' ZO9,\oU1j]NY:);YTm}>fvͩoWuC֗Z76y?mEo0<.f}.]_-3ݿi )"e ca˦e鹆y{Əd*k;VPWUKǟyy5zjY>4Sr}/O1-w bE˃+@ 9_kd:%Zlp ɺ<O'őAyvXD\N@'{čAq7z'v3<>wW)r_kCq_C=i/6"-h7*ᗢɇ) |q  w04~ ".my%~| LC]8_vȡ?7a[|qC ~ÙvLl][Xv1np.(&3_qb'*pɉ/u..uז2E_u.u2_O{|~//. $}d|_!oAK_zk@\_<"./~_W oc{/&o99OU\'__CQWUki9zn1ޯ?UָX}-VRy4˜T_O&7lt1iU~Ե4r7ſoTk*6#b=.UeZY oן޼w?_w>|lJb%yT|q݌_aTi5Vz,W#9 Dj5l>v)sL-Z-Wн|xP~#;y8Kݾ}ŨضV(붹5Y> WhU闶&߾O߽ 3ڰ}_O7ۿt)6^<wnSf^m$~0l=`,* 5ww:gm=hk^*Zvj\|s1qȨfp||1:D{* (^[Җ)rϑ[@>@P]WtYDm:fM.Zض0b˯KzSllRWyKW/c.ڧG̋XwT PzDT&hr1>4+5J2.:c̦OayӇ{ ym wD9lVQ:ܔ Uƭm_oZu2`/b's0{8z-jZnv4.>:.15{͒ݍ*F[ r™7׿2wfǻU䍾7)hS]ɫl+yk~#r3?ط/գXj$!mKz%'czZ̧ъEɋy^VͲ[rݽo3A KI;e\L {TEViut_9ٳXwVLg, `dcb`hb0ґP/GpDi_د/1ŕM#݊دLe1yj&A[*A3=uŖ0 ˦/F3j@r66 +wSMYAM$NMsiU;]~߽:MuNl] k{R+0t'y . tONG'9!?/}RYG~!#бXPU#7&uJ F4|1#ƸʇzvdYf0-H^_C'MNw?L` xgyJOw"{:3e_q~\~Y)$;{d>r4Fvccx[_}%r0tzAbK~Gu4u}~^Ue̙vu<[1:Z>qݪd})c.$oը?R1uS>FUX\ǹnU}^?p,acޕ~B46$OQ:f>^$!\ '3 5g3+[7Y#fTV+Q hB'tEԎ ȯnD%tNJhKVbGd{9[ѳ,ǜ_6*&ڬ`V6L㒣5¢txG,_ވ4VӲꕍ5d!4)Քͣ} kl5džt߽وkb( R4kPw]{A%7ur{:2+;30[KW(Ҷ.PBO6ivUrP}UepYo|+'afEb~|(ĩ̗5Ķ`И&f^L rFg?: PT@@et  b9׶2Y^SAuho.X`/0`9N* ^QC{ޗK½Utp{0SD۩:>#7pp{+sp{8ctp/rp/vp{;upo{[|poQd}Ed #rpE-up/":*܋ƪ upof^.nupoKM<~'{k{#:2:ȪkQ{K=J}pp**qpסR?ڛ7U\+Am=*Z^+rx{hkὀJ{W*uo_,?[<_Ri|e?(r׫m'?}[G#Zo>w3oHbҥۛ7>~w>ͧћOwoq@K#~#~e#}sSϣ9}}cv}̯w ƿƿƿ6͡p"vw?B|զp=jJ7rLu,sVZS-j57jNhJHݧCks:/cYFdUoU^/z60 AdxS-IUy\|u:mg*aOYy9BB1Qh%إjHu7몘vRm,c^-j4h(]ꑭ3+m%hՊ? ,'s#kjb64o 蠚Uz-VQf@!GcV3'Z:| p@ݤc.ml-H;gm19l fw6s6mXgm`:kEY}Owo A&d@_q)Xgą덵Ktrޖ1t-c y[ƐmKٝe,wޖy[ƒfg$4bbhM_Ύ)37ݳ%xO+|224K3[6j쯪 kLeٲslٹy6ܼ~n6v=9?geg۴znEYWw9:>[vN-;Gߦs/i,&~.ç7Nr&2ܟ]W]<:mX6G/`6F8/`6%̿ѷ;/a4޼}܋Yۛ>=||~UKL֛?Lk~l9ߗ3^~Uo=A^-W3Gk0[/'I9_~ZL!{o؋D+d_q+宆q5+_ݟ3i % ̓|79nXMƫ?UO]G=ڝ{zjY>`*ZܗZ׵}F[AnաvƿNnj 3+&em -Psw=_l o7SU5 bhJ;k v2)ROڊmü]*I!JEnot=5Gٙ*n@U,G|o3\W[`Qry4:,T=;t^ʟcj>XWOrk?XÚ͢(c6d1MtD/׵n+v~8Psю?4ܗ~ _ڏ} s؋QXHU@O<8Ll,WNew%xyUVmॡ ^ėcQ/KA+ҷ7y[l8xT?Zui?VD) ߵ9VO,׊< 7X$\.ϡeun &\t%;Kq0&cJ=l*pё(1:@6psb6]:hL, qDLlt01FWwCQVT%:\FV _%D׼C| ń+>D|('C0E}(gMs3iD}(gM.|&1B~(W.|&`UAt᫂Tև.0!F}(@.05>k%F*.;Z.|&;1~|e$ҏB$bME$b]\ #tGB9RQ_.H.]^)L|]\/)#^`؁~gitrd=t.X ]\/UAtŘѥME~,Wt.XCYcst3х _D~,MI.|&b9cHM"=t3IY'cix|5DB)UH}a i qZTٙ&yi?vCwQAXav Csk1Ax? p;8e)qyʟr-^>4tP壺+O~ZN$~͏^lH_n8qZ&?eKvҬ 'DzY 7iU~Ե47ſo՚ط~W*Lb3ho |~W:Oŷ͈+kyEj4ʧhYFrj׬pf\ˇw>|:W/K?-|_dvcg^G=}^n߾O߽ 3ؚ}_O7ۿt)6^<wnSf^m$~0j=`,* 5?2[6F=5 ?l񹘍s~Ҫ[uj}buvUznI[ >G<xR쮯<鲈t{K!-RۭTUhmFIXwT Pzq.%6YG oξ5+5ʇZt.WM4؏ǝ{YGipS~gLj9K--s-6z<s /ov4.>:05{͒ݍj}"[ r™7׿2wfǻU֏lR v7o qv:_l:kuN'*~@ccߢ#pϿ#B';!~j\|ya-C~Ga0'n yE8+'xoJk},w{}3s?pۖ6e?~iW޼Ky͟9vv7?¬c\&oF̕5j>;_M~G굚ojQ6#z-L)6mma>v˼hvqObru6pysLx&Jk\qݘnM}\ᄋP޼{sUSoFWG,/og%$fJ2vKŵv::flqبr~?6KQ lx>:>=Zsu2ȍѱȼ2HĴF~V|ȋ{~~&E~QGݮ#lmRŵ5zh.ƞ4nnr\uI5y kC|@x&o^Roů[^tښ5P^;,yMΆNNQ͎ҙ2@N9\B 8&5QVwOYl JGPUǑUƧ| uvs6MwotbV2_Vg:0hoCAoA(1wpv#w $?@(No@BT>0dXrý#^Ԝ{m½,hF{(ڻ?POj׹҈`8W;{g^ۘF{5ګo)^p^ >e7V{g 08pIc^de؜{Q7p{p{lJý^ ޻! j&5 Ǡ^) Y jWý½Y%_ v½WjkWýb_ihWýݍiWýG6Zp{ݐ{5{Lcpؔ{,{UW;ꢽY} ro=V!{4KM|HnL=)Њ{5{4ޫcx/{Ŧ4޻gI4{T4_?uҬlՈ!F|*~r4KM|/Mq:y8~__an?7b4vilwۯ^?ןߟկ<#Lyc<1Fzcy1 cA~ '%5p_a?Ӧ 1ث?WWEgCZjaYر}e=nY Ǹa08o˫ݱ(&/|z!XH>XU^w=y:p>k܋^Mvܧ?fx}}SNd8;OjxY>[OFc7UIvIܫj=8R],uz~I-'(jl+@ސ=v1ex†Hj5!Cj(3`ɐEC9g+fl|8+ݤcm>|>캤gם>P}ϮZ}v+g^;} K`ӧE^;}Dk޿UTmx=+a'ƅv]ިiQߞQtߞQߞQdߞQߞQʮߞQ"ߞQzߞQҬgKFL[1bGd^U> tݷ܅svy߳yٳyٳy۵y7機w;~V:===]]~tTYYYZGqt<d/yo^ \6N;鞰w]-wui2{fbs ̾~ 6컝oaݎ4]l독{S+t6ϳw'z8l4n?\~:NfRh6~OV|UjE/TKryq.>,H׻^ILW8o&z,`Siv1ΧU|Y*^NE7/bn.ϳt8-{^2\ϧk1M i>iXe34Y_4φ;r|O UUUgɦl7oZZn:7y_-G7Kd`%[~}H4/?=Ofbe~^U\/Gٟk/g:_mzHjij5X^p?,ew,Fy1({1( Z(~f`7Ћ8;C6<|X\//W:ع3xr2˗|7o[f-4?/?26^nϺM~zm~*PEGmjl(W{ߊGS|&,]) w*nY28^oO0=WK |M@ 4Pp@A}+4>oty- q܎`Ar kr;sYڵ,. (ˏݩzx<5aHG[LwJsk<]o/kS4WqaGڞ~ vV.,7v -}dmἸτ8ǥImp}™y1GdE 4myS4$\DؤvL016PQcʗg^3g?BYD#;M&6IjFdp2׬cD LGͻDh2u b4( u v[@?Nq8$i3|{N 7߼!n~SEd7N&H  @͓1 cy 4-0L  @Ћ=c2< 'A$  @Fo^ @cu7o 4 @[` @ٮch,k,E KCP8wEh$i^?&7?" 4IC3-0 (p2E ℳ@hșIϬ3W'?M,nF)m/[?O5*ŧ7{>f̷fȧ~O8|ۯpqO8 ^'Þ\sE"7;1'΀>w< ps 7=]ρps bÞtS ֏=n}6n}[p!>'`x[6Fw}naxS`i p 0ml ° oa؁0Sm u0[vmm;n9vαvݶs춝cmm;'p;C'8Hǀ8Hǀ8Hǀ8Hǀ[g@0unò>m΁pm~dnvG7<-ρ8JO (=(= Qz#[`n0 3 4t<ǻz9^ֳ@hp@h(6p 4 |h8g444B@ @h8 #uACu cu  B$gBh84Pd40p 4S ( d 4)[Gh0xA@A Qzt ch(P܀p 4^@W{ķ{2w|w o=_99_99_=z 4S|H!iǐ8888@ 1pX#q#q#qϧw)Ö#eHl|z?3l4CO3$ }=l=l8[ -Gb4N!O|[Hl8[f)}[Hl 26#l">1ϏLdBMBcqĖ!fc@< ~[Hl 1O-(? 1Ocj[[Ė!1ѯ5Hl2m!e8qc -Q\ >!1#1#1t@#|(X폵y!)LX$ !m!e`-sxļH`{ra`qd4e8#⮆X,Ġ-Cf-Cٓ S g͞2 z b: #>!eKOpS -C(4HhcyL BB'2By aZk)j220*}aՄ@.ۚ9[$ &`Ơ1MhLY6? VLd%MfKV ,Hde0#K,S61 [YQHHLCX](O}AXBVe00.EB* fCB f&-S5O`JaBlgY Q1 &s SL/L)e0ÐL2Lfj0ϰQNLb00r 9*h,Fz=@?=: v Ȉ T ;&fJb@K }djbX*"c2E$X@S *p!Ȗ t L,̇hݛC^pn"3v+&12ǘF6g01 LƄ S1j &3Ʃef]jg$.l FaJ#]1ؘJ f5Fv1T*)OHcLmdwUGY<`vchF010T AȐBLj1ő$#qdY9,GVa#D&:J,a#EȲT&;n!"LwB !1ᑕ/GȲFE)0 }`]c?:hf>r qH3 :VFHf>ks`v"|NT%L%b` >&=2 Va#a#"ppp8H8\@8\@8\@8\`qpЁp΁p8<@8 > Oz䂕FV=G1 vA"Լ"9U'8VD0*GTŞ"S{cBsbOp4`NU ̩= 9U'8C0*|TŞ`S!vNq`N9š9mTXvNp9mTXvN9mTXvNMb6洝S!ZcaN94洝S!BcanYXv[~2l3=%v|f`q(rqhB^K(pr墤ՌoN)C8RV0H 8aQ0^2܋ @"enpG2*()?"Dd 0\aR£u&Ÿ)㪏胥pGa4Y W|f1ѐ10܃S1;$N7t32=ftS~ z"҃IBQqL0̃*V݃<*/`uMc+皩þ66{>7KփV*h:S vP uP u.#tP: sH .栬.堤. '\AL\p'>iI۶'Pb1>I)/.ڠ$.`8)56%jeE6 &hv?3Q9`Rg@dVəqVqV&;%g&" 281+*)93i|3 >M-i!(93rf8 pnyQrS!L[0rnTyBBB;@rV!gT!gT!gT!gT!gT! 9^ 9WHrvA R]*܅T!BΝHr*T!g' 9w!UȹFsR+ 9;!Uȹ B5R*\!UȹB5R*B*B5R*\#Uȹ B5R;*\!Uȹ B*B* * *܁S!8rޏS!8rs B0rnTȹS!L[0r~ !笤mtkY >mY >oj6,vFT@N~1\1sFnQѭ%Q*~9XG%rDQ"t q$(q/qPWq;.}K56o8.b6F{ǀ7Bczqq &K7$m^\\C 71^p|vE@ *ędðygcAr&bLGAʙ^$E\hJZxo7k0=Ո< )qFo\4iT9pN Qbii3\M,N9A9.(\7+;3  !P8#`\8KS=@@|G#GU>ZP1P!P!P!P*݅T.HvA| R;*]!U>R]*݅TѝH*݅T]H*݁TѝH**]H*݅TH U>ѫU>z?PU> Th|S8ޏS.G|t -G`* S6L[0~$]+e֏.Ƨq( _ƨ0 FNB rQ #jQ&͉"n攒bpu" f|wbbD9\g'?2b j&Y`\pGugk^mx A@\1>{b &Ff5,oK>LY(֓&.`ރqKj f)7q^Kq#J0eЃ'UeLWy0_\hBGfBQӅ  LLv@(0LZ(4.|Pٮqe…,ً:X.`qQ+5,'K:XRWt%.`EʸUrrfp1eq)%q!is21"b9J#_ ULo3|l}뉣F!m$_o4TҏPUcf" \AIJA::d--".b@\ŀBI' qqWXƷpa5 @̛B7qxqq&T4/h)z R +1nNܴr7X\ ( M07X\qA07XAœ3F H>[S\z0$laNsIœ炪3:MA5[0tTMgTM]j:3P5UUUUUU]HtTMgj: UӹR5;\!U]Ht܉TM ]Ht܅TMHt܉TMΪ鬚Ϊ܅TM]Ht܁TM R5;^5UY5@tVMj:8tޏSM8t>j:`܂s 0tnTӹSMnih:NkQ=3X›Yn,A2znq\}TA/9hL HE⃢##AjP\.)kc ` hp&ȃBمVY^\3&T"$L`FpP%X0"fPAl$Ll Wuj nRҭ%2-c e8@ʒ8@ʄq4rUpf8@g6}+9  9RK8(W8XWq"&k88.(|3C` wFd\v\HzqqFH=\&z$\+73ngW\$^<.`\a°yq\=dWl0<.0mk0眦.:kD]WK!ĥ+.pcB FuUұq>} %&(;GkD)kZƟĝפ΅+g/N#-qVwfAA9dpc. qF*ƸN#B8¾i$!q4WNxL4 SN_"h=tԞ ۮ'H!(>4,! l *H?gws1$RЎ. k)e,TRRvI#PRbNIB^TВbPZK,kX֪$'RTqé~t {  ThՏF@Տ~G#GcGCGCGCG; U? 5R]ThGw"U?B~t'R+G U? 5R;]!U? 5R]#U?5R;]#U?ZU?Z]#U? 5R;A~t'RW߫~~G~tѪThq]@ՏSL[0ՏnT?zmG`߆~p]|p1GYv+1EhTm*j>H u_!{ iWɗ|Y.Vto!X 73f1wozɯUi{5d}q}t3Ttx7kj|ēnF&7ou>^W/OVӼCzh6˧M^⟧e.OOja2+??// QL4x1gq9-Rcg>h1mϳLVjι&h~y{3^ vp=b8 yZK[OWcyB<ܦj1{UC {@OOh=ڑ'd 9#cgdL3vmϢ}_h$@($@, JLڽg}w-lr򡰒q-VL=̫ߚO,WZ]҉by}ĺ^:)-ѺOgݟO@ݍ x0ՙo`جGr:Zvcvp˵FU0sN$8vNͼڝ {f}ֺ^\{o}Qz;z#9Գ,>KLkQ_i{nC4i;M}8' #lgxm#aI3нطOu,jm^ FB-AobU>ؙ){A?8"/)=|:]tr3Ys?+ⰷlꗦ_ꆞ{܊[<[_륰uk^ y6n}ZOSڲs(m嚁R-OrӸ={@+ 9YѱF`pn@lss[ӢP!m,dap%Ɯ/|Kxq+OS]l<KñWԡ# 4K(HVcpM'G os)MgWyK|!b[=A@4-$>l;7^!?VٺVlzŹYq$^~M٥֑=x?w = mgzȺaݟF%]r]Jx> N`;+._>4{9Χ>C^5u>xdz:0M`ٿk/ڿW/ zh^_ ڿW/ zh^_(ڿW/ {h^_(ڿW/ {h^_(ڿWgDgzFWgDgzFWgDgzFWgDgzFWgDgzFW/Ezh^_$ڿW/Ezh^_$ڿW/Ezh^_,ڿW/Ţ{h/*5͏/4_]|$rc2wx}.tAPf)g-b2˾48O>/:!A|+uV򇳒Mm^ :~1(Nd8[?Op ^TG;N=27X,hٰgúA_ .>N.G7wwy4bmKOhZ5o ek/hrrh:}⢘@fi-&|ulj_~:~st~d2=|W \c*es)'r1Η++,~?_g.d&418Z.G_4淳t~;> /'bૻ|?ljgr+4%_/iXRy:¯4>GϪ?/VMc gh Yn糫b5ӛɦKlmms-1.1.3/data/projects/CoolSongs/Farbro-Tectonic.mmpz000066400000000000000000000476441247673406200230540ustar00rootroot00000000000000x}F+}@HXccpIt7,6A|qeDH$ Llu[)pz㗙Uf1Ku/_9}o˫}yny\/鬄__nS̊4)a,,?g~7?/UPն-ϊ&Ul/>u'uv&-j&Yiq/i;8S2ɖJxvSckhlZ ےeed˴g F6yx}&Y-$r'䦰gzH5-7)Rc7#\0HV x|?94"30InVrn6NSst1OdrYk.lK5嗳۲pRT`&j98yݮ>KT>;٦ErSVgV`a9uIY,*2lmժ|c*4塪j:_̛׫0tSpV.]݃mLi5`Gk# v~9@~]|#g&ՇlW,jV[}|.}s%v9AJ-EM}l'MkSg n7-?7mK.v :Vz"WUM x_9/ *y@/rW.@`O-i-#G{!Z^e˽jJa7t iEOY^)kK}ۚ+VRF^=dbTJ@tpN_JY3]+q$:jt8W$f))sxwi ?a[< "|8=_MgOia$K*3Ԧ𘦔ώĂzz6[NYNvrQm6=JSttM8Q/: 8ю%G!s4S;Z9yc< GDf҉  k$| O:"|BNd9LH@ Z M@;6S( hD{O UgDZ걬ǃcpb2)Rb_=уQiɦ%lZi5`Z)c`< =ܑ̈ά64LH{;G{SmSYNev:w{O\d7Iq/ޓ[cg~YgkOEos8M v*);ilc:V<#aRq*Ϡﮥ*Is>2*Ͼd睱̺3ά;5ѝqQoGR'p͙>kZq>ּ X^Rfp v?VPٱB1*$vkSF,ږ6YNVb176b92vq1o؈a#6b؈2b:I[3#5xGo6RM×Zc]=q|NlNj9_l7yxy48l㰍68[xAN-}08Q`n3G"K?l "5s"Ur)-vruѧ^6Y=muguEVY]duɪ G E.0'T;Q;Q;GU;)ϒG<+XYdNV;YQ;xnn3W;MI?cfN.TӪ"Y_£O_cf!:#댬3: @~FƉ =C⌝Hw6t"ЉGd 7_I -o;_7յGM,'g"b .P-iZ(yzYazp׼j{Ez6z}1o9:hzTb gc Ǯ=0cY ##3/#w0+P]d3f lͅۃ*y \;F;ch![ci _$͚Հ jvhcp|;Vτ/w~b#xuvuHvJ|FK:Ȭij7j|E~PZL箇ڽז$dq ?]7{-oi\](,"3P幣}//i):-'RlKoGG߄M}INkTi-6F-ve(W:uUU^7Ъ akn-&˺u|/ն[?BQW_NLͧ!(%k'FvV#T#AP$Iʊ(9J: 4Df| 0C?A{p?'~.swy~{>uRUjܖYٞ4&[.ʦTK=JR/zԭԬq/]ԅ7ȕpjf-anDSȖkՠ"U5?tA $1fjmܐ(nw2=Z^eK t}2'"f_Xŀl 9Hh/ 6=ۋ`߁]&S`\V^$^r%w`s _;nq0@G>6޾Oڼ$}@[_l۶8jsy;qpT~L_70?%GZWӍDo{s6Vׄy콗]-tHu3T]=5aw 뽎 }Q0}^lx{vޡrK@?eׯ뿾^~4ٔws)ǝ?/n+sD}1>e_G4w?GO#H?"n#?o$L߈@jCWL`*E #NݑC dH!Њ L 21RwC rd#KbNtI| d\<@D2Jl-ζ8l-ζ8l϶8l-ζ8mfl!Ά8l!Nݿl!Ά8l!Ά8l0;g[mqg[mq'mqg[mq⁶g[mqg[g[mqg[mq`/o-ζ8l-ζ8l-N?l-ζ8l7oٱ18l18l1N?l18l7ƅ6#Pjl18l18l18l1?xJ}ǂ8xp@wI aw)LF#Qad]>$}G#cQ=s${Hb4{(0@p"hL4F#rtk&=Rr0f 4') 0ElS7GBv|;Q ;SHR=6x IBQi*(A]q}'~Iw~$,9;$? KFORްS77vO\wv'(8&FC(<D@nhʼnc9 2r,ǂ8d\9d\9dT9cA8cA8d Bs,sL8l188l18l1cDQWE=NDX8Ѡys!\ #A$JtS)hlb&{=& w0qP`;xL7ߣjZX}lviCYd˫uK{-eq{.˚@5JPH֩چ{lvehsH,[,2/W}//i)jvN. z-®zQ9rZYOJ&럳ʯ6EEy':[;luE]4|,rLU7ۺu,El"c )ۮS? ~Կֽi>do4;quOfEeuoo^<)0R-\{v추9R]OKidlt N9쾛l)7Ie颳 .3 nHnz>,g0V[T$,+ҊUj"*UmfW_b!.XWWYE.3f_.iPgOޚ8([7Zn_vMD>zͳU^l-g,"-6!%r.YV~^'fq2;mh8-uU_MUVcI2jj[KëR9k6ɦTK=J ^_TcNe'ЗVԭ'З,êW)\|JD,MeOA>|JVz^V;Жm8 ^bAI ~')(Tcdq %ΛH%U<斊\-n%ґi'Rnu[Q[J6GUNC,StKS[ nSbڞV` Bn*@B2)$7c'!BTHGz@y$SoaGH} OAtDO[b)Vc)H}է`X}Orvd 1% 1Ѕ$<@>V y##)?hO()ChO(c*(ҧPHE(#@r(D`E(B#]Iк|0:>T%Gj#ɑz0bk׏?RB~9 O88\$O"%O!$?R$X}y$O$O$ 'iH8D08C08Chj38C Q gq!x!`q`q!`S!m28Cp<]8C08C08" D3]C08C0a8C08C08c充C;*a8C38'Cp^ƧCBc,kqkqPǁ̒58X`58Y`@^i8X`58Xg5qF#RU qLiV+Š +6ذbÊ>|* ^'#IQ>)O 1F"Ii+X}N[ZڊA PF !! "1`I#i+4 & D0@ D3@ D0@ D0@ظ `|0"`;`s};`;`; DDZg "` s}"` "` " DıZr"` "0g "` "` @pm5_ D0@ D0a@' D`s H})?H@V X}"(AI`H#@%0AЀ DЀG D0@ D0a@' DpDGD0@DEY$ciLh ,noeYWҁ |]..e \$T@N6\m,lH,[,2/W=}//i)&oiqܥ"_(7?@?eZ؝N_,Oujvyo>9gKU-dqo}P'L.6zBޑDH.]OWQ/YS-l ~7tYMOum[ߧyR&"eC/ ݖ0i"]ާ.VU'jMj.:l2Og)7<%7e=g3`-*{}[07U-hZl*,T>njJ~cAY ih:? fb0pbǛ!ږ]0lKQ`!ֻ}u^gEZCP_E1t\,$%*he&luVᓦ3[3F+B[cγ)p) nyʋr-W,_EXņ=_E>m _'faB;mh8muU_MUcI25ޚ-#M 6R{t*MQБNQΑN`)9Vc)j5QI~>E)Str>E%GX} ΃'<8?R'P> A0n}OBx$3H}OBw$pOv$hI~f>I~ I~ IS_O(%@!( (`'@ PF'@ L@v52OD%0 P#M%0('8x$ I ` F$X0$I#@,HtH,`AD$ I`H#@,>Pb`A P J"XP6E(%@,(`8$#H#@,`A` F$X0{].E(%@,(`xE(%@,' I`H#@,$X0$ !`AE(#Q J"XP#%" @L,` F$X\$X0$ $& I HyIteKrͣH!@rΣH#@,N$1$=J$X0$ I)X\%@,%@,]%%Q$ 9Q$( H$w=JaH>c`.e X0$ B`~[Fʩ]s#G8s#>G8vs8pGpNJG8rkpp#G8NJF8b8‘#+#?GG8rcE#95G8V8‘#_s#kXGpǚ7P%Q#0IDМ>xGxvx\<:e\!,$%V$@ Z'R$?i1H}˲&,','H}@\X}pB^D ^e H.KlH.Kd\(R BD _0)#@A\]i.n^e,DsYbH6 6Q<.k7C A0C Aw}4[yAAHn#g! `! x<B8Ze! `!s} `! `! A:! `! J@ o?+ A`G0nv{$?.WnqA^C;#0q  @ ||AF>>G 0$yAH#@(@(a"A(o īiY$cA uvu]NjB^euYޤ˲av z/"Yr c,4MY-yZl]Z\l9gurZ_˫Z-e^$zDu97۷omq77?os^||y}T~ o^\}Kr~Jw^|Tӯ޾H_?ܮ74(~o^|_/߽>oӯ/_?1#v}~w/[<~L{niO/f߿8p[_L߆_Nυ_﮿ϧҷ_e/,Νۚ"ï?[t/=wSO/snR!{/Q5>Q廫tD>_|w/ozA|~~ag͗EÏ ػ%Z|^|NE?}ܿ{C6.SoՋ]bw7?O_MON|/_ӕ}7]K~?NN_boq=~LéMr}.0u$}~,~C]iпџ|.dÇW_O/[0=wߋo_QË"/}oL^k._M%UHj;;p/g%Qwy(bUd^ ɖI鞧Hݮ>K/=ә<&䦬݇&gFP[Ts{0Ϫ<ZU.j5u9b}ohJwMUߗ0-Eig0ƈ1?ĪJScgvh 2Ja!1JB}u^gE*kL"Y^@{eL.&*he&eSiCE5?ufWϘ_R3!5V5r%Pw[T]6#K u;Z^eKN7VS}47VIwǁޱj]Ƚ2kVA`N9@䐫^S"q.yބnN> h 9$T/ܯt<$<$Qm> jh4&@P]7@es2ct9|/Fq9Gx~ r JG? ԉOHIp8RT?HL wɄip>uO }diIc=\.*է/,St#, Ҡh)XN!)#@J bbFƐ2IealBRr&/oS??I}MM=,& p>> N@pL}: 8;|'b|' w$ w|' wSw|' $O}Ηɲ'srEa¶oC } f.Q7 ÝBe*K:~neie|ru'r~VYzެ _\)/H;r_~z gyRӺowYY~a?>(l|,r(Q}Օa몛nmκ\]vS;CH~ 7?=i>]`oN#4sV7.A1Ql[׺ATs DRs=/5Kuفawϐ}+yX~wfg8Pk~ l^32Lszy0\suZs皝݇k\=lkqݒh]W>gz$OP.EEb(**@PUM>5Slu>)dn ;$5Vb"Igod> \Y;_~hnIVX} էH}]*y CP1iSFfv<-pjbwтԧ9QlC|M2F?1!@ڣi=:"&aQ$@{RvAWu^cES!j&5ƽ{ &e odx/)Oڵg$81cD72)C S(X}Rva@J dH2F*X}R^\wBUPW?I%s$x>)?ȳ=Py„H#J\AR`1&0(f`we==Nqn}'GX}ÍHv3 C<~EFC~cA aG??('}D%0?=:n@48GƟb'ƟbI|Npuj"=쪫9q݀"_h7Xg@z9ńvhLJkdN[uPf1*5FΟYΟYΟYWΟm~e%İJj գlƮ.ZꢤE?+꿺 G7 мH}7KANZ [A/;U_]#c[]t {u<%c >0G:Ƣc(+YcC UHB%L!le 1GIsQ#x4hfz,$OGf(ƩVO4/7"f($[#SJMz@Yl5|lStx`yT+CL@!}B@Q)w#02*mzB`c@}NUc+=r۽)У@s 4@SqO>ډc 58Xc 58Xc 9hp#.y\3e/~ˮ_v]OK({]OӛQ҉byS{u]+_l'ݝie:+|zR!tSƩM:7&Ld,+h.=<YTlo%"ۇ'"bK^!,dGn& !f!7M\{4dKv3嗻Ƚy;Le? 1 5LS<1ireOm/tÆ^Fo2:CR[#xǻ{v'kOXp@&{K>O{l#mwySUjܖY;g֥"WI LA'L]x3m\[TG W~ᆞU<ċoF24wr]hdn"tVu*DSsʖH/n)-'>j}>OXQXKegTwڋlpk֥gPOіwq9`yA-Y,%/: 5BϼȖ+b[%8bynJ\.4ڶs[Ö\DRӃw؆o[->$PȑQ"oy2Į%wh@ RDLN@DY!Iqw' Oj K|%yQSd{$,l $72LI[@K&\w0}n'wG2D' F!{By waOBХ.Gf1a< 44h!]nq'0ɊIahnu~@Xd_~N:)뤬uұwVcH:)uRD!館RK9LS&b`DXaM5DXaM5p4gM5DXaM5DXydMj/k"&šk"&šA9,O-DM,DV4EjԞwfnvl͂P~VO(&Uyݼ"vdgJ#y̋E rӐvlG=7dV`yp'g#Ӱ+=dh"\e0ZӸ"K[@idUoŖ2ilGilmyJ4BMcsu"*k#P6CUG+|Z Gg9C὾k)mG5XW@0UY#!P5(Tm]GDd9@8AMHlƪj*4(j!4ױF^e/Te _KF^e}Qeơ۔u-QFF^e#5 ՜GL qDlLd!.:@Y`c#H <#!V=6(FFe8Ď)9L*FUZJVI#W*ib[%3.id&[%J*6V/~w@""q^t[ޅҘ Y 3bM[6RlӃUc7k`hH̪AEvPFYXZnl+ ,+%)S4*րhzq[K%E%[_ fCdG_Ɩ>_fCz |u0Pu0~AA>Cq0׿2K_Wgǿv+ٿ_{WxMlfz `zQ3c=ck]͛z `kz+d.Hd] wA=*dv/@P-ٽ rWi'f5q0kPmS -'z `q0Re=fPST}8@yײ[A_+d/HPV-fO[R/nг/>)F W>|B{̎б")prnvIdO=7'ai%Pay%A(ݷb*N઴'b2-:emO=?kwXjI @?c)G@Y(?tV*Pڑf/TVjh渪K_}+= a~(xay%(J|aBůJ(O9ė9ay%m 5@XJy%^dy:͜W"$C3c+drJr40W_y%P Xs^ P[sbt 7@YGE&Kd|]ڔ5hJWEI/A*'$9n 9|#{KB:[AA /1b6e8*kŜ]T)=%耍!%. Uh_vP|eVdr@%6B o.1HHYAcRvYOvrl'F9DxbK-ߓ\"<%µB(l WKdX_K[&{8ٯ j7Fb*'DFWBlo.qB sz ~tKWޫ3eN/°jjK!sEu ,HamggE9L r2PD2X^YNMdFGOzI`پVz{K(dN/,߯ ̖@1-eN/*}R%NuAy'Gzȱw8drOnμ;9PF+לNX:\7G"s~Lwʏ@n7 8FZDRP;eIq&u=If4O]M(2GH{0EmRwNI#OfܓW|)l5m6I̎*Al î_i:fܓi84sZrE)fܓw) ՌCYHFm!ZqrF8j\ܙqr(* { u3?ˏyZa*> &ݨK3L%eǛari&8 %e,0zH|yܘar `j( CYV^3LeA'9&({ z`rJa}0]+ WwimZu¨09Ȋ܇_zprLJgNYH*Ѫ&P)L&Ωkz`ryѤ{LeC(23ڗh}yB0/㔶gɡl*G&UMfN"G p5侼Ri|fʶ.0~,qFu["}h-T 3NgyR8t 6䁼rS%qf tz#' $\f\T5zj6roq@CQZ'䭟 }0A;ٷ&$=1P8v||FƧ{@rk  2gˁ09=(y o}y%a"`ىrar(-UdrWhle>&a"3c,;hfң30Pk\d8v0a )`f/ A] }Aa&3NT>Q sL-hkBn }jy{prSek3{pr(Zm3Le_{09] 9adݒf {v CЏC'z{`r':&~}sȡ ֒os̡q4Xo:Jj( ;5XoF5)Oskvs[Z!C ~"{'vY 3^lH(KUvIkB!ަ QbHЗ "4%na2LXͶzZ03Cӹ@fwc};q1#1`sa)pۺoxK09(<,+r) [ޡk[w˙; ;s|=>0-K cٕq꾾hWKͮs7ˋtiu|04[a=2"Ooɚs-WzsʒOi0s{?2VX,/;fwXNn-עn-`ΊA 2ah^ ٱ˽EZb?:Pw/C/i/:x*F'C!2t0aЁ~`y51݈R\| àN &m(oEVIk>Afުt?ﰗ Gjd-Û?RojL6fr gaΖW(EY,>s})R26 σFBS;=jmsqrG~yYz~6ay:ov}P`x],2U,6 @s\wvPłÆ6! B;{cCaB"mԷ3ҏUˇ0}6/@CL!1՛!~Xivu]J~ ?e묲@6T/*3KnЪhŸ, K'P{5U 낃wA(LSv@p쀋ws[pO)x쀿q);Zl?ooG}Gl=k=>)cve[ A9V'?)sPIOmRoI9@[]8)tP>(mw᤼P~B i^^(N E//'兢B Iy⤼Pj⤌P\Pj,EY`}I½=)s{{R?Iܓ?'n/sO^睔y;)zwR?P`/N^睔y;)zwR?I?'~/O^矔?''~/O^矔?){R/I_򿠗'A/ U*dYzBy0d"! !PEB;μZe2m5-8j‰6+Z{<)Bidȑqb:eG_7Mȴ?DJabgKZ\F^~ͻ7_~Żiw|=9_'eOlrv]Ϧ{޵juy,Yi9lW_]W7il6ܯPLʳ*L8]U'Z&^k ߓE62L_W,L/&_^M֍]gKher->|?au ;j"_07EWj*?l)"}&YAn5I gʖ/|zC"/al}H/˭/ꛗ//l9>)Q,Z^2E^||2`lĆ<|2U/><~[Sj*L"oNW`dlϫLD~>A_%ErG<7qb3qYXY5dUd-k|^sud kߴT 3)٤0_ U2,V&q o^[ puYjMCgJד*+o u΅yB6R+ ("$Vv!UWJժV'NSs'#sjNe Dmon,/hˎgaú+Ӫ1_?\&lmms-1.1.3/data/projects/CoolSongs/Greippi-ardudar.mmpz000066400000000000000000000211721247673406200230760ustar00rootroot00000000000000x=rrSp')/y@c6^lRKB\RyI^,q_ƈş׫ݪ]ZtG19O}?.ȳoW gNLC;@oËrm[\~V1FY Wa܃;V_+ÿmn&/ ;˹̱F?]u}:FPٳPs\,^#kh6Z߂&O ~vΜ tmڶFft;75:ߒ%,7<̓ 6(zWYۺg92} qm/#wk#zKVo4_5(rmcl6Lrxy0qv}ωSӻ|2!Ƀ{up[l[os^C~s]>b.?VG3{Ѳ nk&h_]pqU#:}  ܿIoa_ך.WnO0V{uZ+,n۞M$aݩyÜ;soBu/SKGm~}Y^:5y'f?֍M};p]k#o' }ϸ!|Cx zwݷj-Ҍ_[H {`f^p:Z|heu뀻{Dˡc=]Ocvshf_S kkq赭$ửPB܊/ǭFn`kn|#ğ~ӞԵ>BKK?P7(㔃b؏c>N=(8;댦S!?NAhV:MA~.~HanZkSGgyݷ 4PGMe5/C_ko:X ?7KR\ҢRk$z/Y? !렔oVUPb||~$j:Z(j ;očJ?xrsc u6@UJR!Ls}( uz}3:/s[Q~)W8b{&BJL/ׯmU][׊(j$Q*U-?-bJTtٵotȖ}$j(Wb^-I>5E(ܿ*T67' A2]F Umwi f3?Lk9 Uϣ #5+9?&%`J PMW,ͼl )UU'+|=+/<()ժ'ݏ2y.x,[J=N]y ʽzU#x%>=?Yo;ܹG,[x,oj?nK7Oм-zЪso"T}kLՊH^PT=V,6@"ԅ >ϯf--3s@7Y:-;f<ߴ,W\C3x^lV0}Xپ:W#T}5bpwUh?8h ' a(h\$l8P46gLXl!o/J'L"3Yd&dS#343CNub$]Q2n-yĀag^Pd(ϔ?DsT.\zp;E+2gw::ի <|#^k t2/:oyfϴ~̍zb΋`h?UU(S_<I*kU[٣߀|G˞{sjY#ho*[qJF]ҀxS+c^*Ą4`Mjuy^ -Qv,UO \{c]}XH]MU;g Xe޸=(5}N(3 n&(bȪ̚s(cy(˥dȻbM`LUo^ W(Яpn̦ד :a^KTi 'KJBC&.J7}n8ݠQ|59?M<˴=P:G']JMMʵ?}rDsZnk -UX؂ cyH_EEj ۋ;ǢN˱x8lcБMXTX68Mx/Cq!&d8f3%ߪ!#& 1 Wf) )J$N@i0h6 [PNRH\H , (E<$`bHS߱?t" AKX,(&UI` AI~2H$.{2)’;\’A#|)n>){%5@QE p8{؍K^>jԀs#.bGGQil E >Wt!xxJ}%H^H¼xxcGQ`#A,?8\`9@8J@iAgZ!9L9$,<;γ,w;gJ;g|O!%P):!?6O #r,'8 >EJ-Ocp/f+Cf²ac,lPt `پ9 C2H` %Mzq698gOZ-ٛr"d9OB _6zp CX,k B{p>/?Ba9x |ɲXww= \x0o3_!\nCAYH/׃Aa_'!>)xۓ^2$ZV}0߃wC M!\=!\p W+}SW}awbAX A*wE~5 2_!|S a%x^pE| G7>C؁p,~oEɂ3YpfWM'x}<VG %QD%z)'Rj@]S8B*S*"O" =bt꿓H:PH y"IT'TDM|2%T'TD%z25Y!zVy8Y!zVGuB=+D?MSB=2%Y!zVGJVg1( ѳB=2%Y!zV5gyYyw)rweFֿ*|ZxEt,DTږҒyX'"ɽG:[ P,4~c;03:(w/_*^Di'(tۜ7ҞӼԫpEwN[?Z>$dު1nkyv &^1ڒطTsW>yЉY4Tcu.+h #q/ov(u!˳*l#z(pC"M{|0]mh_$JVe_lYy~*Jxvw3՝=_7XTd`GQ#է! C-i*:CCP$hPH6oOE6Y6"O|8N-EͽK."DEc#A%"F!`,v *W FxCHw,AI,jEu(zt2<" `}M1/NKTQ,\pd,\}dƷ(|rP0رSS dƏF2I$Épa?̑H88Í8HDę ؅jBN8vJD$ p%BE=j@rd*Q!rrDI}OY/G&BiʱO_;.BGkƯO>OzkԉfI ~1.mP+a[E,$w"" ~*aRHU#LW5" ~E@l*):Z5Ϋ($v-ʃ‚-\tT"[`2qw4o= i8%(,DDY;u7B6/ g/mP~fZ$BkbJ!,Ht3d"!dH$NEa/)'*m"qDthn{!t?O0 Emp? -KON/f u8tzNg:2곌,>˨QdԿg9mZoDžjP23֖LZ4h|H 9Gx_6o!ۨdQ9O+'҉cPQIT^3Fh2C"ǒfc8\$֑ٻ lT"¨[lWXm d[)?tC:SeJY`?"<(${RS_#ZQuE[aX%zwM5J# *AI!yzcS gȣKJ" O%PcfCX lQuU_Arg>`P>-ӣ瀂Zy5zmp&x>B,Z-?/@Zwu7&8-H]a-X>սF+>ZC"JBi, $JqaSa, DX1(q7/>fioIio!%{4RȫK('l2"ډ8) >O{d )G(ޤB:T\Q=8^ˢzYTǀWeXOb=)u '`xI!S( "!qwB{E lOB# 7t(,)~d7䢳= pj=$ <ti|F1v:D2vM= ,wCt8bhQHDl PlA2JsVLM>|A)($"\<4GGbzczG shq D*0 -4A3gٌGXCg5ܿ}ٶR}K >` ~ME $D`}2;·0?=~`o{cGp0Bm[U?Yح¨l :Їc+1lUqaeOkP>}Άhjt`fB1 0?63b$}]&3c]Y3|lC~PkM`ȲFߖ<;pC?ȱS` "(@ÃSbPb='/`0tz$I"׼桷n;7ـu(^a/Յ@$ ׀l !_ ajЁ2HҎ6H>(h*񠹓%wS;\P=v ܮ]m"2HٙE Ӟm$qGRppz.XC$ áVޒCwW]xBtXt3a3iΆΦ;;f|X| a i..ٻֻf37dTjT-jTmjTjTjT-jTmjTjTjTjtp/UG?:UG?:UG?:UG?:UG?:UG?:UG?:UDŽ?&UDŽ?&UDŽ?&o7UDŽ?&UDŽ?&UDŽ?&UDŽ?&UDŽ?&UDŽ?&Udž?6Udž?6Udž?6Udž?6ݘ_x/Udž?6Udž?6Udž?6Udž?6Udž?6UDž?.UDž?.UDž?.UDž?.UDž?.ݷ=R\R\R\R\R|S|S|S|S|B Ch81gp2,%6̶uFk%oTĝ~w xFel[Hg i9A56}?/EnywxVFSr!wv@)4 X;˝]w tz1e.,X8C%F۽_.?/rJ6}W0gveq禾w @q|DϙFsӾ0G8Oy <\~}waο5?ƻ4ƚ|!ñ;s@eˆߧqױ&N۴&5=[_3w]@>s+_h}" ?i 7>&_h9 ^1++M5cjK#Np5É 1v |ٟ"lmms-1.1.3/data/projects/CoolSongs/Impulslogik-Zen.mmpz000066400000000000000000001071451247673406200231150ustar00rootroot00000000000000Nxrۺ(BOg?R9vy%NԊ,cE9$R!)'sH(P"$n4ݍ&?7KaBZOv5Y M 0[&?._C}x|?%].f6EGOlx L'7m@_6^Ke@(ބ{n.#a|/9H o22/d#3(s1 Tg |gO?.L]iP!$uGUDqy%oIFQ%@ QVzQ>pG=z)I` LnOtـ[;޿_K߿=~˼R?>$L(G *__똼] ҥ7]fKEon}f0×ۛyr]]^_=\w!Kf/z,, w7i_aYImu4+V( ɀk{G25ʞݗ8\Z\_ރ;!\j"Qs",r+~hl#7 A#y׾-eI=)jvwh-M_]}yC63eC{ 0to'ܒ?]ނCyT?GoF0=ʐ-.W#WIsr,a<>2 n21i'\E@h!vG3FQoEm勻|qD%X0(Ix!mR7&rׯ&i@jʆRH8IK6q.$& }JݖefW7\}v54U@P zϾ|qq8P(] 8LU,DK%&`i қKpF VQt7bt0.iOc _ f_IcFz'K8R3fLi-/Π_v.JVAf}f0n ]r,:Vvf;vև wDKf d~xV#XlxG:=u`~uϑ18j%]R9"z%/I24M(*m, (bW(P;BX O/+`˚)  CQl PG(u`PW52/X[AHXzY'ځLfPxS,ixJo7oK*MF2 VitP,جV)9,K3~۰R;$u@vwu{syqBFTQ[qm/_%ƳhEaGn-Ht \\*-9O9z /L)kǵ|8%ŋ,|c?37N!NEڌQ-O>x((# XpqK@u4޷/sgL;&Py=ڏOj-aݯ+ކ@ڳ[{?l}G[h9`94tS6bgY̩QYvbm6 $&hBXf?"r7bN FjDl\@3 XuDH%  ˘VΎnVLڡοV'jX|=U0VPz 7+=;qB׷~zpKqPZƦk94G_cTi t`12-# 6PSڨ9ڨG*I -E-aBup-ql=-VA4j 9ǰhY$#-a\,^0r^4+Qq.a9WGL7CLG?✚~: p<'dCbY#[[Jx[{Laooq_"-/}HvG|xOGxT?6LNV^fݦ ]}|vi>Z@c'T(M[1~b7ӫTҔ K4ŚYkOM]rrGץlŒ59KȩR0űzezX"3&1ŜC;z!w?ۇx38/-ցp_c(B7w_8a|k1ċȦdOG! A2ۮQArūA(>2ܮ7:P g,FQ?DZiVcJxC ehլ0d!ѿ3:X (d$d_ПdෆIbx|ȐuM4Gru(7ޔ."NBVs8wX0il%&.&.)&.띒&>7%MΔ4q4q/SM'%OJ-|taRGF?\]$U *`.;"a~)`4I 4Ii) R&ͧLOKt7-eR?ȴIei)z7L:Wؓ{;/F< 1bĤn>=܎+ ~̚Ɨ<Jܭpa~Dw|";&eKZyG&}az9Yx98EuL":&egL,㬓 t@EsL"9&etLLH˹{r{3ԆjwMC)>cubb= fO͝ cax70{|+; ,ח=lX]>^5!_#gbF)|qpe߃52[%A A.rO~Y7*A5[[(ބIЭs<4H;W rOkmr5Znb$G Ow%{刟,kD9^%y[q-uxr# d|ޙ"ï>EB-_&1/rT_KS,oMWt@Du1W&%h >D9?e,!*eN}^j QQsLM6oC~a4SWj,4'׿8ulvk -HY[C1/f]u6syVi~ WᛂVI7h:Egl7f`#e$Dž0mn WǛAUka)L?¶ǣo/ɵ;,^齪ɺ{gm znzɈ{!Z.ZgV)V㈼V齡Y"z~zo!v ?'/Z+T5X&NŸ(+#8PY59)&#{#ət"6\L-{"GBN-#&J' ?eSBOu]BOmMBNUy{Sy{y{Ez Fo"~(lBQ 6xCP3T|\"ow ?Cd6xKPsT|[ɭPS|]io ?Gwěڄ⟡⛶x\(*̅⟣9sgP3T|]#1'/)F}U&OW7w׳bhu0~1{dWH0 ZIS/X1a( n@Ap0<ɡ0dGãY=\w$#PwAv78N藟>`){fd% lH`]GI2^p& ю7QSt(+5!D`{GÁ=ZG zeHzx)d0^X!DzsΓ0ӈ*F?iv;9al+)~3HdTGUjƌ3knP X0Ȭ F WKEܪٮlAh,A*w,ցwW?GLv5RrJxEVJ0^Ue0h[9Jb?n|8DxV7(LMÿYRinaK%G)'\/ce)%T0z]_@R$xђUug2V18e` .4@u:P=n`Ni#oQ1IY]%5~pH{vk'oFȦ2 Zֿ -h#7qՁqP{ ٣^ԑ6)aY6#cV1y{"h lj{ V!iy(:pB6oqm46D$6 "XُU-ج2V ~Myyw}{`E'I`'Z'm1Ժh 0,9g:brjFR7,+9U<;knZvf݄MYkgYDSV鳞AHC;<>.D⟺a P؊ C;wުdԵQ kG;pF]V<*|QYx|` y'N_/n)yZ#Mcqe-E-S!1֙¨Z˨BL䔏U\k3uU:imm-ì+x ŷzN\>=^Ihd&!hxGMBV hMB4(h7.!t 'KZ%D*..&$ڄDhzmB'81}B'0_QHy8/D[5 Ի :_1F,tjhSw0y3OTx[INth|v:5ڶVbtNtrƭK41L4ӱQ4ӍP4я8f_jNBC4\>>O;x<'}𴘳~ֈV{֣tX[pܗ;aKG;|<.d>x$#ٽ9- ((((ficj`W?_}| Ī]`u_f#E;q~!!1boB:XXG<@ X?1O+Ck@-4Gru(7fup'bt+9y X̿] x& ihb)i⒴)ir)iR)i pSԦ+MIW&5)ѷDӤDa @=7z j T_syP+HBAM\L*LKT]2;-eRevZʤr봔IGvR&MKt6-eҡĞ y1ĤΏ&&}dOvuv^/Ӑg4䙵Pn=$¼Sa1)0Ew\";2 Da'IYǧ,cRq1)8븤EudggLgT:ǧ,cR1)@縤EsdgPD-.&\×ۛ^6PSm$w?iLeS3=6w'g0{=944.TOX__V{1kt{ׄX~>dݨln}xF^'wڶ~ \kb=ɑhˊ_V<ݕ#~*QxmqpǵARY`yg@S\ =o|p,QOZw:@&b/OOa ܿ\UX:mH 9\~O^g&C,2$^b\x;+ g[?{Q_5Gf:D9Fc15$~JM ?Z"j 0 L=^UҜ\]^=ڭ-P filżmv^ԅC}Et d`_%Qߘ)÷אtIIm,pK=h8޴0^SOQG7^E*mBmڞZh =UCz+mGoFȯ:z#"a ij-3OEpuzcБu~ ӈv^߾?>ǫ`R$2Wa$r瞂){*W,>p|0 f jy>z1f-C]~0j. (סB^THs%V`p p-|46n*VG~, r*{/=RPe5R)k93kʾT޼}?eM'(j8#j8a nA)ZՒ3w{xw*}c?^!W̃q}Ut:ZVdOY*R7at誔U0e4.o4Foۚ[[ G7ORom! EV>I5e\YY": 3Ӗ FwDu}\f!N0Fgk"FwVFW kxY qF/܌< )V02zgs" ?MWdmc6 ?UF>$^XzEAV/^XyXUXzaa,y՟ի VVoZ'^XYY&'^XyYjzae66a՟,y՟ V^VX'^XYYi V^Voq՟՛#*,^Xz[oV/̬^V/̬V/Q2 ?372 ?3w2 ?+WeM-SXS=g0d:q'aT \/080Y⧧h0>,m(+0"_\@aR`IK0_ l`0^` Mg؅%Kx3X%9jjOk,q={\ipp[ 5o)g']=(jEѳ+ʵhǵ笧`q|`O\W1j6*3|\5pkp#AX;qqD,*@Hp*क+HdCnTԽV Ԙ4&_Q)&-N!).齭q (Vrd&9SBj=}r|ZohL1=ͩ3Wܘh;a㑡!#iF^@=4ChT:aK2daNMRWjM94 XM7R6ctMUfldbD}3QԤ$'^4e׺Cm']u$i'ųx  gNcxV`J^Z:ݨ1Dvf`T&=&GRCgs^rs^r5NV\hJN`Rۚ4j9Y)V4(c˕.ДI.YPP4t )C> ǩӳD:Sx=īףMe="ūףVw=ū= '<|9. 7)CDg Xy.Iko;ыw{PI/P-Z.j tGOX:J{K2gAӛ5DS]pI-c_{_}͹f{R8e8aálh$MU *) Nat *OL^ߡ͠tf1Q~ղ.i=ddI>9޹Ї0?|]<'ʫm槢vDHE*/R3~in $dه$IDJ!~>3V2%%]Be%]B%]BS=?!M޺C@t"?i cSJtpΩ;NAjc#5Kxu̫~#7mgE*7VRy\Qid ިj2:CɈbĎd8( b| a38'>oCqM^jUm^=6u࿶i#>nvVtLZ!4UoETBU1j*@ HS@n m= sL.c+~߯T)>S\d";O)JigBcd ʪ섍x͒h1`C'*lf` [hHmvviK5Vqd/TmK55n[ipRMۖj:ܶTKᶥZ*-ҹm %vmwUns۝mlvgG;;*ѹ [%v;;Y5n{"KY6(/S~U_ {~Eު(UQUn[DE5mjsM-U/7k&Qln[FEWm ;*-UtVVwio6m~d~~RUKW-_l~~ՖU[Wm_M~~նUGW_u4~1B /TVFָl;L_B&njr+0墆ᖋMW)SXZW[d@˿>l0h2Gq:-NήPPOPq,(ƪ896POPyPfPTP;%72qE>$dCEcCEaCE8OJ{svPg8>)-~V|CL<g|9 M>! N|؁xlpϵc9צo3y/}>e+q.GF6r`/8_>>\~ DMQżC3lor[ PqO[0 \?vfZrBMqfJݘc !π+n21i'\E@h!vG3&/ |+(j0,_3#R/:^D)HzFǫ hm1km~u7OHLbqQ_u rspC?~Z]" ;` sk"r VL0H![9} or~y&:4 YzGyhVIT]`q58ΥO77 b2IH/qs"Gh]ph8яa.X zʞia@|Ԕ ԑp̳l(\ HMĻ-Jͮnzjhѫ0}+?np`CQ4BlĀa6^gůd ^^J- 7{@H{l\O#F(H1ZK4~1ka/Y3毤`#%Su3d͘?ZbAǖ l] z`5H~`tAͯz:vޭ.A`$ޭG8(QN*h:|w?_|sddR7.?^%PMdRyۏЧ*ٽm$ ("W P;@ O/+`˚) CɛE qց/_ _`Yxnb.#UceS0kƘ8$sh4l] q-sgL3 !tFǵs]=wح zMXQr(وgf֏)& 0S8d,4y'ftx[IN|=z~aekYۭߨ}l׷~zpmF#W;=i] Ǩ(sa(cRZGơ(Qs,Q,'U\eAZ mLQ 92SiZBNEU,ڱUGWi 92YZ\[KT X]x^;_sL"lg m,9,S=S ŢOX[+~('CwȓyO9l lGql=Ew^Lǽcx$#=}HvG;}<>Qa|0y ;r [r {r nv60vB"G9X=-l -c|ŔiU* (,-h5T,t5dLpR.;$OpաɒLbd% $?VøgnxGvXK:Y}z9Vd4\ldO.KsDNGjX2=K d])|ر{ gݱQ:$ׯܦeT9c=ٖM ?a?_Nsg]?ؒ6ClYx:qwrX6Xq"`1( jj6n8C8p~mdgh>_i]`1~bw2 yW?0JKă(k!* R ɸ r F}2| u#ȺQ :D&,Nn`٥A߯ {Zko#rݵ&9 x++GTd9^#z/ .pkē$%~)zm'2 Y~ʟ/?uM^ >g:ouې]' sD_0)lDM!YYeeI^ŸKq.woζ~h0Pk$ urǞcj"/ Ix_"j 0 L=^U|S;kXP3owa֖Z3yUP9BhX{~ *@AG} ̢- ͖l]f;i*iQ\"Ȫh}QR&+=&. JjKo=߻qvG}ΟGzMż0\MkEc}?VI4K` uǼmk /3/=`ߊ7MeCdP [&*͝q`[/1SWCL#RZ_2 ԃ+}x]?l}T0+mT7gh "& E~=uYMog<>,3yqmER8h-Wx[ut$k_~_/r/ᵅ>('ɸ md ⡱zx8 6 iM 7 vDrܶ8''pX)4NnYخv--kMîMl'itNj,Kv"Y)dY4Ul'a,KlbYЖ5զ }l"nݶȲDu YQ4csxoYv^9PXv̞L;fxg<ӎ7eϲcgƳY}Y6^s,@&?[=L~y09nǡ|"(  8ئ(LH7oRTmDA=6@cI1m%vO(ô8}P)DA*[EGİ/X6L] jÜݙʤ,vf3Ybgf~;bx"ߙk[/EW#̶a?=zig-ܲkko o2^㳗 I8/!#7a.ȳe/]ze潄^4}or@}s.owWWwfkL6O!مO/zpFfn[ |^G`kn<<خT$T({v_p^hedJ@üH9\}u9Lf?4J |kmFO%Bo]=,axoWwzly+ t~ОFq90ƛ?z#e %~ZǏ]|zuhw eH6 יl8Y>ׁRK#5M?A7?<ӈ* FV?i&v;9e֌+)3dTGUj֌I3%tlvP 0H VӍWKFٮlAh,A*F]uzPAa绫#&;?(.K+xI:Tǡ4T%~#"Jvo hG H@D@@9( NJfcP[""0(h>@  V)2R5^< v(hɨ!CCsx?% } qx((# XpqK@u4޷OKYӍ9H#oQqj-aݯ+ކ@ڳ[{{tmב6)w2R 9l*$K՞c"n,aw٥فjc*d0/=/AN?-ܠؼFcU5JNBH%VG#s G<6_^]|8Xo@Y2%Iem ;JLK)D2bNdlТn)LvM@nˆU"W)eVPy%J#ZUfUOx.gW-Q'5pXtέg96CЉwzdTgE] FB'*aD%U'V%'S CNID)r¢֋Eg#Ja0J9RW.'.}ҍ>ٛ(7)?#J~d#J~@4l5h`~mh3C?rM:a{`FM]XYףwF]V i{HV}}̮h܆φ4͖D_cTU2t`u1 )-#j}PSڨ9VKۨGVL*I 6ëXT4F-!**~#xVx^+Xث%*W,㪮mt+|9Z lcS3Q6Q SE`Yϩcm_gK=GUfR?Ɠy!O;|x$#ٝ}h 0emo=eOz;Srէb^ys$#fE*+:X~a Ld<=97|rupǢ\:mH 9\~O^g&C,2$^b\x;凂 g[?{Q_5Gf:D9Fc15$~JM /5_h*Xfi>8mΡf.¬-grRhvtT (E[:+!밖9d_?P-_9O *iQ\=v l'q冷֫ڃ{^w|wO}"[;LeԴV?wCi[[MD4 p͋VXGe>"fxImXoxQ f30 ްsd hdnwMD\CR][hĽ#țv9ܴ#o2f~ګu,+ C^SY$o :71{e|2,~y]cY&m7dGS*YꎷXio,%o*,3^gY|Le{c,%,~2,>"__Z fy\7dTStE3.A;nUqb-!6NWMwvH9t3ӞI-R=HI?HI*E']N&H iFJ:TN2RB6V?H 5ޙE:l#Q5!Q5tDMHԄDM"%r) X$jB&$jBǍti)F:&$jB&$jB'鈚 iEJrG ЉEJ&$jB&tH2S5!Q5!Q:HGԄDMHԄN+Rrd) X$jB&$jBGtT闈tD#"HtD3y7^ȯ:QF:,xYG,~8IwȈԁ#qJDGb<)э(ȏD?bɊ($EK`KX4GRb:яX-9ȟD?bSm:яX%iȣD?b+d n\At$KNя(%$ ~QTe3~B1A#!K&я8(MqlG >s-DGȪ%YL#Qdݔ;`lVIH`j9"QtI,ѕ( :,+f | %_`DQKJKt% 6]66 ِMt%R6ѓ(bH(:%:J5nDрA^&E4 Ep6э(J36э(%E>G.aQtsTKt#n:reٍ-*F ْP<݈\ډ1A;Cv#iH(vnİuDIvؐ | HLt ILSzE&ӖA싀ɾtɮGd; KBtD` Q,x Sl~d)dbkTdbZ-YLv-\KL-C(bX%}d莄T%;Ǵ@v.mIDfcX*UDRnC2*`QeS``T$H)MHJL(W0z6(ɨ*- U'_x#:#WPTŖ `TU$D)YHuQUː `Tx#&:USt*SDj&  `*x#At0Uz:UD]A1m` @A)5a S!Ed'c'SU\ uMqTUd4-U|d&[N$v)&hкbIt2=It2 b\-]PktTk:bT"k-۩Et2 vJE-ݪERQ\JEmri5NFWAz_M>YAt25NF>XMt2KD' ЮT&:ҌD'`T!:P)N r:D'cFRb\$!:C:D'c0n :=]At2bQ %Nl20٭Ύd1`Q] :RAt2`㓫4F$`G+Ue1ǪTfIɘQKTdL$UBt2k x 1ṗSAt2;b|:dvMEJEe׏7UmU3")j*+= %)Rx0 rMEU9Q~8]A>(4PUlOtŪFt25ՈN2@rX fMCFt25ՈNƲJUd@T+΃X8AY+6NƖAQNt2 tj*¦ĆNt26j* s.TT':G:ɀHNt2 RJEuk@ tb :qju$ :GD'Pk*j 8H=JD'h T$:G7D'tBbzMըIt2 +6NƱ@UlOmv ci䢯 "+ˎ꭪E C\8E5@d Lk :}a M @ y8"+&WRj6TIQmM>UѲ\ !*)T OHTI1` &*)+uȧJ$e|ؚV!*)K)Cv0 eUaM 4N.0RPM&HΚLv1 b@d1w+7lyR:bi.oie9Nv)H=⧧zvYQV (W?3Kk`өz;?W:&2H8i V6, ^$Od['X`Ha-p R9d D=@f~:oL}mZyy`{7[%AA]-wY~zW?$_>jNm⤐s<4H~x/?..f~Z{,}/讁&$9gCKDMh l.pqQ9 4wa֖Z3yUP9whֳNxT (f \ Yѡ:G+r#wa(%/M8#E :^#i;"TlU FG睩6leȰ֫RtЍt1ޭcӕS02pL?_S "kCnT {cT 2ZtS[}X_8_uz!,5\~TZBVaZ=yϨ#N\GBQ$pܷրK'BZܾmn7fRЛv!ƔsZ33&ў`)/0mnW9bQIY+ibyIH3/)O'a+B'duaûO,kiz>-*ݧ6` Oj'W{P?~GV?UEP?k0c/ћRH`[_*Q@BԮBN8{ѽR F3З,s"B;8易 '$e[+ p1'a5'mɑ%9~pU|dX KtשSur{^]>|Ojuyzny<_ޝ?]}͛ga] jyZM/Yn!,?܉ǖSwj7`)@ :K(blj[*t;:z$t %^ B.[]HH4ىF'WUTiPC1Tkt CNsAŶ u2oPҰANV٠^';]mePBL[kj][kkAѢZW-ueѢ^WL9]YTV[8TlPCծvәb~U0َfWV*@M@ ص7[DͶUz\uuj;u~Umkաj;mU=*vmGŮmGnL=*vcGn#Ql-eP⴩v/ex_w+mwP[o0CWuфZ5wH¡ z޶~#/zEpwAuo}}U ƛ{[}Vs_P6ըsoق*?(H: j[u^>U^?Uޗu?wEiP W/jܿa*ͱTyPC}EW5ZN<Qdטދ J^@V{Yw V/WĜ✵9zWEPA_ֻYֻ[ z{*뽽:V{X5ڱ;Tz8t+TJ/ gPUV*=zxQ[_4=omѽ}_[{ld偗b*|3f j@8n*i#洉p{)Wわs8:ۚ od1w ) Q=v7]'8s&ͮ^ SM\Ϲ4q.itM㦫Oc&d@Ω<'xNc7Y53Wcru!cZ2:`\]J3 [_͹sMXs򜂨 +J *eP֜B'pqpkf4:979Ύu.[s*#+ O Ofw9zInd,Xuyurj jo)`'ksα Sd^@|Qf]7dI(('$1ł)>H)>I('iy$o3d⣳('>S|1'ǀI>I|LI`Ow | $CwO|qIRcP}%$q1G`O}LIC,d1ICvN)'I|j,CP-fg( lfw"e[ q|0nƱM8)WCe=vO2D;bQ9>Ɛ,cN1p5c =f Gi|t ]!Vpbs˒qL_U9VqXW94c7 X~ cv{XGu{Xǵn btD1>0)l!s|0ink Jrp3HrcHO#HH$0>4sXUf³fAXc5AXCD=-E[JX5~XJ(!3D(x8 P(c(xGA 2#C=+U.p f<_$q|(`P"`11+̡s#ҦXsB&@$DToEj<Ԭ:57?kHg,x*D5P*6>Q>QO@ qN3$!r1hA@!G"5`dB|PG>2T?2T;2Cub#1IhbBOnϼ+%aX~H** ֽ(P`KPD(7 )l,E*3q"")̶SԟƛBLjMY(Ԙƞ=??/Ic></j/r{x̵!8ulbXȻX,\\,s1k cK9s1yt)&.VEYpȅCi4Capl]Nk$ოt;c=F#19z^C+6XZ8CuL%M( PV=CZi[DC(2ZBVD8\oP& PD"+ C}*|2qn2CȔy0) z.de }q-i#ȼ:>vθp8S>-At}rB\>'}4zHd8re"3YWF}_v0ɜΡTC]9p(inB8p(i'~{LΡHCHg<3 JߌzR{+'I>t;7!w`m'#+Vs}zݝ@!uw zY; +98-UЪPݻ]t+VEurv'pnsq렫\l~U .wLr[gCJgx@t\Ά9M'hۀ/h8;_:M ـ&#mpK :QWZ%8 Ԁ#5j#dMa O!H#QpL@/ @g t~p x{\tO.y$bDRˣ_:yØ'1xڤ<$rRvHg:/LOsWt5p$K8 DAg/7@'gHw'ƛÈ`u v-ƛýp!"\l(nmcY8~ am&0ΤJC8sfR.hPz1&X0F K8_Re1/y`( P rYۭ1J9 QpbOʡ0Ci80Ge!ʡ8d0DM0 CY8uچ(FcS /ba)%XL r,&G9|)(7qCPar( b\!KðP 1 2 0C0a,BR BR 0C01,&L,&L,&p ;I;:pkuLDA8n /d7{aXȗ B_u].܃e1bd˨k/lq`! v %%{VB8vCa;َv\y!듽l]B_Śaqpf {epv,lf?sϖyv=m}gO[RکI =Ϩ#;$#;ڧ"[s#PAp' EA xQUDg>т)L@ݎPu΅&a,Z9=i~b@*EO@|ç- ]sy{9;jh1Y$:Wxd^aG '#p7DG̲&*8w_zn3 nJhtca7봒qЎ,({xxl' Xdya b8/(waFz`X:d_;C~] 0p(_c¡Ҟwdh_g+|`gd(od*vNVLqEi;#C/#X?؆ad(<2ҍ*%gD[Z17 :T~/q>Cw8yo56&V;pQRCNm <'L0("s"Np( Nh(9ڡ "O< jE8eiDACB #ErSAP`cvAPcNC'q&C'Ny&y}-u6|6b恭a}xAmت F RymtE kt]D.D)Aɠ6D _1*"@xzpڀ$hdb'iZ|l%-cjjSy9b=XX*6 cOW屇TADzx*Xm F8jO5,3FEfX. וC^W`Qҹx]9+Khue93 ZEM崼\PpNZPN@9̈bvD;lA9:;iԷN{CU(< rib& R.Ʃ)'%5I BB:H-3Hw7B{)z RyS$ N6gSvYzt T9gEIУS&ZDVjZ" 9Er$dB+r v 1B>F(x;9BVnBwkzΘC܃p0r.m]mOF@k66%8E[hohZkm lJZ+hP*Z@kYU Zk[ԪS!UXюШqJGV ƪum[9 ,m)g뛓ӷ?p0aX;ÿz|zyޮpWMw}W8ۯ6Aʾ?2ݻ_9Y_ 'W˫n?^^\Jt.d>^~lӫNn)/?4O|u~ m](sт ]8Ò+ێ".QgM>tլɹ.qrϓ]Ͷ2XsvOs .?٘frX̣%8=r)7W>\v剆߫'aaUVAU*6nE=TCF퇉*6նV[Oب\wv:Ͳ _vmv{_Pl[󼭄XmVIMbh]3[[jlͿUQ?Y?UY]O,\|,~_by~~v`Oځ5]v4 Z|/'/9(A;hWN}4{z;ƶ]jOꙁg_ڳ_Ӫwf]]627\:]*h|4G=xOyǏ=TSe~\/N{;ތ㗹l<8D?Byk~?5ή1\5{>۾{~ZT4i*ڿj*ڿj*ڿj*ڿj*ڿj*ڿj*ڿj*ڿj*ڿj*ڿj.ڿz.ڿz.ڿz.ڿz.ڿz.ڿz.ڿz.ڿz.ڿz.ڿz)ڿf)ڿf)ڿf)ڿf)ڿf)ڿf)ڿf)ڿf)ڿf)ڿf-ڿv-ڿv-ڿv-ڿv-ڿv-ڿv-ڿv-ڿv-ڿv-ڿvo^ڿyjE7߫|o^m~q~m*'oZ⫍b~ϷyuʋTx^le]N.6ײ&Bu E'/_W&?^g_^v{+4qs+΋T\ŗ?g}/ŷ_|}ۯ?/W|rl~z|͛o}^/Λfu>z~5g_>v=Y9?~_>v˫W~'k>X|_|srX _9~óyU7f6ͧ=V \ܼY]ή?|1j=W7wWw×WoWgt؏4nֶ_~Oίnrszv\\^|Zn+~>Wv}˫o/N޽>y~~,5)9_].ί}3M Ǚ]߮,٩ۻ_ |3&u憎@K@t>uĞj5TBN=[3пhr1t"Azrt/Zk :dUrC`~:fkxђ)iğPZv])N'+'Vd*{ta,Kx4k~PMe}oQF~ ؐ-Α^jfO vee;ؗi0x=4 iCMGQ6|s<L[3<,Y.I2ELuxgb3lEGf2't$׋GęWݷ|i?f#4~Ù, Mt*Sg:UIJ'YNMv$sa fHHgg *W (b|`v>XnP ӔȐ!JW|^Q7/_ss>dmlH"jKފf:F/yL6;6 {d2'\HY5"=ZP>fr&lTgk[8xlo-ڱxή<&BjVz18>*; DY,$ wIGHqf{v4DmM*?baFf9& _ PQ:uW:*Ny"ݗG>i{f™YfR`@e)͔ %G i En#5e+ 5AW4<_ݲ҄1ӑnqtr 9:9s'h1wnǷI4c*/Rg:n^X =Q)Al @\@$ T2KbrqLr\ߗQ\ ' dcd* +"Ⱦ/zhm;³#JL[9YaR9',q'(VkOo 4jΙ5RS.;K8uggQl8|kٙW^ 5H˲_7-㜝QKnvORxCMɟLDLgF[k[kMH;',ٮ; 9}'mQ<GǦlRXxq"_p`M;a]TKTS\{ HGeO@\Ĕ,"\hqosٻ]l>񫲸=JުB8Qsv-lla^ZDAvR5leö[ت,w6[NѓwmŠ8ɤKuNs:0)7\1:v813E]NxY^;Jv(bs" s)J=f .Yv՝gr(̔=]V٨b~u[?jURI[@|Cbo,CŻ)nm󟆴rBUi{)-x72eDOɄ: ğ0"W,I}Q`WNؾu3Ҍ2B?B20n=&D-%l{.,)8 ޗ]^;W }Pf>aٸz_ }PzG*'PB]w'5((BXÎsө@ N4hNfm2 \ :u )u9$v:YnΥ###.#>#N#^ 8~:JW߽o!Ho!Ho!Ho!H6f_.\5ݘ}˜ĺI;y&k(t{d<)f70k1 2cFS `$[RZ\.˻5bq;x!Sy@֚uC1kA.ySeR*:ڱb>4|^JQ:L/Ҽ:%CWdH i^͢?dyV=ړ^_zbbOaBWdyG#pib3|_VIVCJ0=NZYְTv7td||9ەab-iY K#0Uo0GCBg >H6PxiǐO ㄊS]vx]8iwvtA >'gHcƪC9᧔u,%?'FG}%6XAc]nC-yc&gھ o9݃F?9GMi1}˝cu$z nj4 eNK%YvY=e^40_K'O|R /A9uG_S~n9_oT~N9rEMo);"E_%{HIˆy3KHK4PϢ Y"a>^$gY0!0_fD1)j"cj@0!DJfqoT3xY0000S ffffA_ L03D 0000S`P6_ f6<~0Zi}zP]%`F631p#?+, k؏D2ܭX?6,m6iAI%+mo|!'-^_;Li&4DNCԣ܍fy!C0Ϥ0|Y.<:vr;A`Ym;A(e4pm 2ws nO\r@*Qf( (((S% 2222̨SN@@@@>uUeeee1zgL2 1 sq<@. L(e fff*vT3U}89ܾR+ |}=ܾR.v+yq~,G&8q$̭V+(1Jc' *@mGP&;@=%Wr"ScQ܍b `fH;s 8HC#MbO~ k2^*l9i!m0~UD[<hIrߴlO(i-;aa+wi=XPt@`"Kx4k~PMeeXHё[:G_ؐH۠R̍6{rLc,[~2씘xf\$-]IJ'Y=OXNz$wa gHHg *W (b3`őD>*;ȉEY,$ w=ՠ&4#hHyT0xe N==hu P>8UWɿ!v_N- WfeIy<4y9>!v`m&l0Hݙc[3b\Y}"f:2R-n1Za>X'tM6κ6_]0gOaB벊/*pyH pN!* b۽n-HM&iP/ID4 N^וe•^By@9 l̟\]VE]d˕S})854CkQTe2ыwq~"*Xs%xzso8FCxϕ5H3.e"YO.Inl4~7O2㢉Yw K+$f 'f8gԒ;'/e}v2I!y?ob쒡H<okrPFu[b`\݆? OkBl㚢qMAIom #MR︦X)|wTS>[b?)V u(j'~kSLG5qbQM!Iom #MR都X)|.ńOk'~kSLkSLkSLkSLkSL5%'~kSLu@RLﰦ Vom #] #M9aM;Ú#'~kSLkZִ>;)>;)>;)>; OjJ&(f1QM1QM1QM1Qez1Yom #] #] #] #] #] #] #] #M M"!k* M"k* M"k* M"k* M"k* M"k* M"ak* M"Ak* M"!k* M"k* M"k* M n1/g9 \\](<ضjP}d&9}{!1h om)SCb>9HKZڴsE4A>E={jQEx1) #Zvjex*BfS],}Weqyu-lmДVS4xoia[\L6 n"ʪik뾩mGT [YmWa-lsl;JZ'>>"ݨ;ZqIaQ-}`Rnb&Cuڛ81<*z%-uʭ 9(v%OxW@nˆb)+qY;(OryDgq8̳yw ӻ>m~g=.m@-,x4<@.`50I&6W5^_-})ӻl9wYjYP-yim[nϧڞ5,_ħikrEъϔsY+[ n׻f˿u`JՐtЉ/ԑ[&CUeI.{rG3m`s̳=`*4ӎf Ft>Q|A/9tCr'{\xy*5ʅwy*L3JFsmYPA-ϰl@8i\jo~"^;rzjok{PMw {k|B܌^k^.&Pc^B#U{hC\vWFq&^>3JX[F8{"Sus[Nm)E:E'8|Q/tgZ$ ;U1i_wnf﫥r0g' tda3tdc3tde3tdg3tdi3tdk3tddk3m1("Mv Q-Ě{dcicjDׯ%#WM78U7ٷIgoٱ}/7}?OGYs Z̬9 feєɖnq}=KC;6OLYZk}wr]pA2sd<ؗ<ƞ;SSժŨTK2to#B>JPAN1<,`g*M8<)]O58v0'%wl>M7otQY@d1(ѮCEÌ0 +6;Lڷӻ1!?0Ӥ6LZQL"J5W2iK*e pUʤԪI+U)VR&U@"jREPBkDEQKZ:6o ;sq|uL8fI޳*T+U]V2[dVeZɬrkY쪕zWdj%U$bbV~=c>bXtHv?Y.JY#~ϟGL;xVV<5qya4~ɐ)Ҽ:%CWhHj!<ȳ25LYt;AUdȳ yV!ϪW4Y5y֛ItBSdHt N!ѩW4$:5 Gq$s93[^-9{NmwJt7ɸT'8s-3~3jst'=>*#-o8HbMu']KuX=' %7";Kk 7xEkEld:@ yDe;]ёeo Kl'xNGfwC.]&f|ґveۀi}嚪 |#z!ųf$ocz(b 4Dc'P†qB۩.b;.];mc; B XO1c١xRWSʺGÍBou Uı[C7!ʖa|ıM3mÿלvxZa`Nȟ#&[4ҁ{α׎ Zwn_=c]WhB' yj?tCr= AuyPzO.bX%n A'C, `]EaH,x*jlmXHlslD6&1Ll~Yr'ѷnhZA{Ck%$5ϋ5{_tS[Xa[h˭a#o7x%9!_UWS[ S jݪR+q5.vϿMgnz3[-vZ=8Gj>+6 s/2x(bxh*;(4Kq_p*hB$1{Bкd:XFy eROڹ4_r%G=k 25+(m/3RY4dr'V٣ Ed&ҹGC6TVyEqR :H !%APh';ƲeyN)`{hA³(2  ; %۽) :ڣmx$fxX\NdP۫RRfjM#拂s dtR?9*5ݼ/O1YqwOZ2, Mt*Sg:UIJ'YNMv$sa fHHgg *W (b = Ԣ?TF4 ?ap)|F~=_ lH"jK^O3H ܡ1\H%Q4vm_{H3r&..gOn3}z2)be8|pmKqiE4w!G/ 5 sףਞД V ^0N+i ji*|cϞb V"< VD -56m cS]͚%O,/(4sEϑP愗=mGT [Ŷ[ت,w6[$E>"ݨ|1(FN2)S@*݉ȞIio^#1ÙF6)z,#)2F%(Tr#6;=W(04cfp\El']yG!W'LqeepʛL~,W5*I]%e$5O9$V"0Ԝ$mnL\IV'EL|t=ekX<$ԊRXfOsY]`Jn3uҌ2jBq鏆ѤB{n%ByYa*4gV{ng(%zX!N|Zg'(|OA-ޛ@꽢^?-r/{Tͮ ^(r3zroT{49PMd嫽13(Bʽ ʽPR˽þ 3{)e>*"8lL(ZrLvg1`\E%6S8gfL L2>0'%f>M7otQY@OɛYh뿢aFNJrᄕI&mfF &ȤUʤڪI+U)̮R&m]LBJp2iK*eRCT*5RE:~BkDEQzrZ:6o ;sq|L8fI޳*T+U]V2Y\Yت*W+UyV2^dVZɬryH z(}P1NE׌dXt+9y ϴme_)wG&H i^!ͫS2y4f2̓<+STEYKH6PxiǐO ㄊS]vx]8iwvtA >'gHcƪC9᧔u,%?'FG}%6XAc]nC-ֱM+mÿwvxZa`Nȟ#&[4ҁ{α׎ Z__=c]WhB' yj?tCr=-/eR0Ϡ),2~#7nzNFB=~3jXdzmz^[luGRkrz3ߩӫ}bʋ%!CKCs8J?sB@AUw%Gɐ튌_/ib@TB@B@!_h3Oh3k b@_5bt Wiiiii4@dI H"!,7:r$uD K$HRI @@@. \6A0v{$AW6L J&R;qy'䝐wB y'䝐wB y'g;zP_DO^,歰`#,aQgC~<á6P P P P 9AmjsP.qOHdJ<;aMU%m#~ڒT>u{||WAnj[?FoϮvV0mO%\@+u..geB+س8h;O e4/a bOj=bɆm}rУA>\/u&F|G8I zZhhVV͌&W󯋻)or;̖;>~Bl+܋ ,ں9J< l*rGIb,964?}uAt~hʤsh}ZJr"ScQ܍b _pgix[,uϸ~wJ{${夽LuAl-O#Z"@7-L_aa+wi=Xyg9mצʰ^oQ<G ؐH A)s͞iW 榀I &,8(xhV>*n(h㑨f4'.I2ELuxgb3lE! Dkճ~rTLckлy5_}o џc6~%}Q0`\f_֟-e;.E䈊<{eܵ괾c-\x>+9&!*ݕʲob|_J2$֤ )A@ǙI>rv֖Rz`w~+|jQxMS,Cj~ Q $R3|O.NdE7Wo_4I._&H18| \|"6;6 |d`_N;R9zMc&gFuehBlzqK}ƱX gVz1>*;۰hB: 9]O5 1qfv4g& Ι  $V:B$M6q@<] 1dJ4<9LZND+Rˈ4ُYS`Fqko 4jΙ5T3. _1C|M)C' h_D;; ~1/=&X9Na?W3z> L2KeO*QE4wG^Wj<<GlGrrJcuuvƉ|e5uQ-MPMSlW3x"j[G<<qSp%~e|^v˃Y_e?hQV]QVO6++6 0]8 s‹T6q$jJgדpEvmqIUI"+FۉAqIaQߎ t`RdFL7ڑrs@#;UwBJd' XF%;E='&\mH>}ʆc)+qW,T]yI!Wg43eEHߧw7enEuHrI㐡r)Aʟ'$%)VV*9g3eԐB?(BRd 푕[`MÒgOV9h;(qq91mNԯS: Ӱ:X&xޅ?pة\ușԡ,Fs.6sȆfȆfȆfȆfȆfȆf8z:߀9Q-D---11]咑߷IOJD6ud>>9qMljbB/FrTEjDJ{+W)A}R\F=rW'ea*/OTW;PSJ\.Rau,l:m~VLG p[xBVP"x҄E=1Qt>FT/̪sQ!`$Q.' Z9KJ*FcsQ`{0kFSTJ\̗wk#AuAT;fxj䙋g;W*XhǺ##P={*G1vQrr=<,`cj yFEqrL O͘ƺS:7o=sHl&9w{fa`QAꙘ%\>M7otQY@OY($ +6;L_i VJ3LZQLJJe2i*eʏUʤ-3I[FV)NR&u!X@"JQ~V*F4~9YT5)}e cְ?xɗ[So=kɬKYՅj%*Jf=V2IfY,*OW+UV2\1"1lU,pb5#le(+7i/<+^xMpi} ͫ_2yuJ4Nɐ+ҼE4L SyNg/:%CUdȳ yV͢?df/:%CSdHt N͢?HÑi4DWy^vy۝2iP}6[Sb'`%8s講wAwHnejl=:T5NK?{(F֤iwfMsGiήFC6熨W9'~ e/`ÎGJ$1v$zI e^'.2==s'RG==/{OO>œ^_zbbOa9G&Zy *N4WIV|\3zB^z]e;]ёeo Kl'xNGfwC^$2L# TӖbiu~^H,u:ئ p7X/3 TaPvkxq'eT8y|:U}:=)3/0z<:Ҟ ́ؑP0!t@4X Ӄ#/@>ANs@D8;\9Oɾ33y/jsr9^xz/t|Ͽsuso妍obҟmr>>w?󟳧zmo/Yk_tz5mOۧt/nU9|ڤz[|i_ml#~?arn-~ޭFek:W`?u5à>{;Dt;l?{$].wB_Wu8gF{@7 #_C2߶e{|:~hޝm^0ߥphs=2uSq>Hf4{$wzw_[;ְTvp#3yR01㋖4"kDTz{{Nu;8~`4؝1f$rc{2aR0>-l'Խ%6E^y;)E}b ഓ;⤽Gi5VG*z,cƪC=#X:\?{d1(9)0:+V7ZJ5tcg;i9i=xF{GdښtqhQ-00F'Om-B=t|rkG-x!cIV w^ i~A=8I;fׁB0 ˷$hϹaeIEck9]ő9Y9Q vl5/"5($d1ZƣPpQ٠誐خԲ\B:Z%W,#r- Y6go{8  Ns'"DOFWz) ؉Ђ) eQ,h2f/< !J|l,,,,XYp\m}J?\}>,5!jBԄ QS=8RAԄ Q&DM5QN Q&DM5!jrF~|(M4!hBЄ A44!hBЄ A&ͬh/DHl;pi@W9ԗD"&86}NjNE"Ի罛\B{3+~챣hǂǂ6c(;ԗq#0\Cmc.g"w-6i1{_ߛ\8/;8+k93;Yߞ ` ` ` `n|`y7XXXX[<;t,,,,/}pԟ?o#>~E狥?O_ A'C'o%&Ymת!㩄uce =~AK^2Ll~Yr'+ 5+ 5VACVXXS])xhF_n  pINmsBGCZoTJ\Ϳ.n˫żor;̖t :G>Gj>+6 s/2x(bxh*;(4Kq_p*W/X*ri' *@mGP&;@=%Wr"ScQ܍b `fH;s 8HC#MbO~ k2^*l9i!m0~UD[<hIrߴlO(i-;aa+wi=XPt8|Kx4k~PMeeX䕰oQF~U :H:1%APh';ƲeY;N)`{ha³(2  ; %۽) :ڣmx$*|׮$j"T<³TZHw! Dkճ~rTLckлy5_}͗ џc6FF4>+ncJL%'QD6 )Z",a )\!XCj9aE,?g=r"ZҔǐqHW9' :/_s2p>8vI^_-}KiBa65wP&dI4d3&ηYko#ؙ.Qx-Ƅ/Ldlm/\WY;cϳvG„$\O/Geg9A'd ƣsăw 86rb`G>ӿg8^ |)@ݏVwc*_'}9w|䓶c&|O&d&4Ny9>!`m&دl0Hݙ狃[3b\Y}"f:2R-n1ja>Z'tM6N6_]0iB+Nlq4>JpNa bn2- HMJ&iP./ HM^2ו e• ~- H̺Zdz#퓯W׸UT^ rT_ N MvgG Q)舁GTJ :y-<&(c͕v5ᔆR(2ٰTz֓ˤg=Tz6~,.gb^zqĬ;t>iH18KZ9; ~1/=X9Na?W3z> >/"0ַ ׶)vNXD]qwrOPIyx=yM9`P::lD2vº&§>)<`-#)OY`E2`1>V/;A߬YįC3WP(y DEʷ4qW83ِ-̅1'Mn]Lp$jJհEveV=f٪u2>Hq7*V JxO2)R<*܉ȞIኙio^#f;-f^1Ki@Y&ƫ`P1X'\m@|ʆb)+q+tux\<#:3eEWa2*o1}zw_]VďZ$)weP.<؀[h kPsnEّ͸mÐ6W*YhIlJu ͮLD3QS1u#N#^ 8~:Jܽo!Ho!Ho!Ho!H6f_.\5ݘN}˜:Fd Ef` Ƶ' ^X6YcGM3Q):W|Rzx~)Rt_Sk锿ʯ_'v*:ɢ~WN~WN~WN ;~'7 n@6 n@5z ^@5&mes<,Z;OQLG)>*H)|T E wYc|^JQ:z'(yJُ9k<,`]6V i$aw){|1_ ]xjoLԁy)3Db3y'bfƞ`},aG^ZK̒{h>M7otQY@OI:Y,-$ +6;L}D/ҥi!I!I+HU)JW2i˫*eOUʤ-I[U)RD= } ,kThhtrv:jSf]Xa'./),{"z=z9M?(zimOe)_0Z :@J tZhB&aΐ_@ Y=:0b?HEo71HKE2Xb%&dо<:mhP旞agI# Jӈ$ʙ+ ZZ~2%:"F"O;"iE0{ frpppp Ս $3CΤ=]g2L C~[3pj-S<©,GˎvEp:={p*CNe/2~ip.'s.Bv"{W8=/D{8=DHzԅgHygH^!GHcly.PtcSaHG[=77gqTlg |x `Y&$y<p'" @@@@.ڽFt#{8i]1 JM'J6XoorrkH~$3çEDŃֽbW4ަ A'C6{kհ eO%\@+,.ge@+س8h;Oa4E-a bOj=bɆm}rУA>\/u&F|'H{\u5(I"ãO=?h]P+=چ2'dߵvtu5wcCix[,uϸ6aCߋ_%ٛ-'/e5, ~;|bN6. GC6TVEn|z}tw2uiubJϔfO v Eᬹ)`{h1³(2 5 ; &۽) :ڣmx$*>Mi j{b\#*oqV4>indJL&2i-N'J~UF2$ Ӆ|c @w` ~K|jQKS#CjJ.좩|pqbٜ HBʫ^H(ϗs-g"is =N {Ka!mfOnKn,"W0_$1:^>4|3vA9Y%G7ɝ\"X%0k2Pzn-<_G )ɏgӖq -'A l.$\c[!'+ʊ3GlmД.0%G-!GmD} S|^(W|L9iTʑyvń7>EӲ;JY%ֆ\ꎱbQy"^jq(3D1 9ZR9dWB>0DŖrpV<+`GLvS4)̒1ᘕ2ajU]y#{eyxDX:70C,ir.ђNjfa>{y^VRڽW%۽eҼ͑Nft~ɵr-!VSXbU==UNBE*o*ѥ^?B0KqEn\pmr?)|^_-N5~Y? R=|#mB^-}{NtF"5"=8 Hq͍Ț+u"v*6Oc\v> Z$NK\v߸& aΘ.Y2ă-2zD@QHxj͈mdEd_WKT<2 /L[tRRKը̅I_K}ߌ\igf}꓉esɑEPbjuaͥAkVܓ^svIj1b6YY[?t\o+zzw_.o>VdiĖ &LH9qDwSy}NgU8d2ȮQ]𺀢PhGcቌJNN  HAቴ*8ˌ+ׇ6F8pHp`pꚖ%dpZr]טR4fVHqQI'\Urw(>-տIb1ىM٨8K^뀳t ч3W^<k.,ΤvaYE!iAP >nlX2L3}z2@8:g dԀyj#949 5959 6Ɍ62.~ ˆ2YixV[t I݂jozjȨV%E9#[S5%6K ~, Yĵ}]@OvCa 3MlD#9k޻6F$W;MTO3XמmA:嬨 %nk3JIif4K͈6͔mQL%I D*(=!|l]RW)ﱿh ۢ-QmH SשׁLR*aeltH`['Cɓ7Ik'o&OM6y[ k'oMVF$.05bwU o*&UB/sت9k:\*eM gIE r-Y2.grkE[vrmĵY.gѦYˑE1Uˬ_/ Zf8_|y7VFmVїa[[S,ynB3<0O-kyYK8T qzΈTrF3,g)f.qtsF3e@G1wt$AǨn/gUw4cz:QZLY vAksZϏ0Z|Z_,U o%M^>VhKLmsi7}28=Y1*OvCgtd>ۆ XB ֧@ 6i[;.{5ocUDg6wVMf{^+k/ݷ~D`xzC\x[z+;f,7_{ZpEܧN$Kǂw MzxM8,TgvquQ>{U ?V uvNq]B z~@0:`8/? G:J7xn;AnK=Ҹ^+gB ˛lSgrш?<{]]]/J;zSD^q*]TPqț1%M^3]t]RA1ĮvݲGz$Q-ZT6XكPj6ꎏEpH#*]Ea`V8Q쑎2e{u*GúXc6Բu-@n]1UևD#b룚s` ~ʔm8@R@e*ueOpF#<Š =\bUA;VǙFKr28 '% EWOV@X )̽S>4Co5Hy yn00-#ͺHg;siTRvO[}ǎ!Ea6KߚKbyyćY'܏>yr؇jqye7ֿ7md_XBɱwk*I^|v2_%?~qwFˋ>ֳtc`;d⛩T1d7>-8[r%ѻR3;yΌ֞v+;hZ\xSiˋ4ҙ ̨o**~|wp{sq]3-@츋 4=|vwTyȾ~ck:dM /M@t7qvc?|^yS"{/{VqYlu uLBi}b%F/"(6bHR~/:&C)w{YR:dDc^&Ւvoɜ-l0>q ,V?oggS~l?_߯;ggOΗUtѵ+& 6EW*;m6$.og4 ŚS5Yzv۟Q8/|1y 'c߾__=jSˍեӪ것P96[w4By0T"!|gۮ9f\gftJ]9]zy}{Ye^NX e1@dn-սE*1ى.:l؋quQYyEe֙cw77=iL$Αُj 0Yޝw 48Bsu\;M$o5䴍OϵY~zϫuvR.`r++*聽2V=W&pD,|b %zT,CXI_Q,å(UWK+%|5yUrA*^\PFcA@͈A@ ѠPdxo(©xoGv{Er"~0Q#4Fj{Er"^\xH>4ޫ {Ur"N4O^͸/}ze7h%5rA}_ E4#߫x^Mm4{E}Ex?{UrA"5߫!߫ 5~{5q6>\lp!4ޏ#4ޫ G{5~j GxH_x^Ѻ̷G`|O^\`|(N}^ͼc ޯUE>x?RWx?Vtjich+/hchh_h 4Ojj 4ޏ4ޏx=GQQ/zxVփF8V`'8JWUi |,S2Q7 NRȯĂNUխsmi hg*Zu鶊`ηU4 E [E3p rhB*Z{I75p֭ vhUNEp2G~UE~p2Q%xG*J<W`'zNU Up jl +OܦNU13qG;Vd\\E{8WUg㪲1MU;, jq(\SrUWsrU-r%h\EK\E+\]#*G~E(G檺*sUT*Ds5p* ]]UWB#r (L*c<]E jDݡ /8SW NU5}*zG'Epu~pS 8aWK8cW:?8eW:?8gwIG~U#*q)+f]E7h]UjL0j* ëJ0˪grT99;ȯsx R8WL\?^ëhK*:6sxQ9V{tpgO5WJy~Um:8W:U1pWvsx]'sx^Uë~OsxU! z*ĵWĖhBI _6V5kΟ@ iޓ-qg/flK:% Ozr}+ #B}O O(de噝O,;11^0sdK`C#힨rU:wVvMKhǗ5̈́6J^Wװ0ZZs\H:J G |Bsd^͑1i(r̵goW1eK)21vPU?"Z=骡vR~XO qu%Rۥzwi])pW=GQ7߮M6jZ-WbZoLFa2&X:P g3H,ɶ6C )*1lEb.P> wno>W͔U"Sl!#!%^DK.N])5/owra-c/Oj|툘k݂"sYy3'MVqb1CJ:=zw_.o>6Q|i0$L㌫$ܺ&cY> 쪃F=j#"@Cc3ӯW״vumiY!Yxw[;pJ)  \̌#M,,GnЕc{Ɏ*O`&?Fk8׋EpJ ׋q6\/b\/M׋qI\/ʀŕpD%^׋3F q` p8ԡq\0c`," PJ` 1.qmB` uH₱P\0$ %*c\0b7`<oႱM\0> px2ɪd* <>`\}ÈT}z/Q/SMSedJL|bv r+l/.o\=WKJKoudUx2i(!8z2; 70Ts"BXSωy2aanL˯_/??j݂] `I^.l|T/s= k D$7~׺HK< 4o"AlNomM$e7fM Ӵ dq񪑪V}oVdW}+7fU*@!t,E)E 8H "? ~Wk_$8@;@V,H@H@[PkIQ)eKrJ|yZziㄳ%!+󑸶o ~Dg3';q*pOV6لKhlzy#ԫhns9Ҡ cޜ耩LOh쏨5lr$MGd!^mL)^Svozhb"XY!|l~L-A*Yy|EcH而o=gU&OVH%DIC*ae.,ǔ h]kmMrh'oyM6ym#ɛ(ɓ;lkD"jL_#q?[e0vpbR+TY91NSURz8Hp-Y.gRjE,lhDz]΢v9V,Zln9b{(&<2׋cV-V/o<+f}`K;.{5eOB8i&y9#SaJԲFyJ%,,g8K%gY*9#Rqbg @G=g:*9#QZt~'@Gi)=r.no*::ilf T=ԉbr͂^ Z/X{wz~}z>h~bX0~/bx¶﷏_ѶB+_bŵl;>Ο?M6'+F3I@i3g:T2mCz,!uETBSY۴ =?zcUDg92wVMf{^+k/l;++}G>xqg׋>ąW crJ5 W}DT1~,xDDos͖o|jt?"Rѧ(:Ju`-C 'A?%fCݸQ=HK{!/Efc0OLCP+?i&?Ks'`)Z?aJa$V@F G-(J4%IPQeӡWOQ@bIuJܲEdG(P=ZaM`K{.j{Oɛq; asr}q lg;M X)̹Oؑ8?,f^vW¾4a]B //0˴D9;'OQ\;>-7vo +YYh=9nmW%ӫw.XlNe̓/DF`nXgl2ś,;-Nh:!Yfjct,ƷϑL_dͼud_?]VwX :ǜTP?42vcH|^y"u+ub=Z+s,w7ܺr-P(ODZ5YxFWlnfWd(=/,)z>)Tߴ[M|mN :ecnAU`V7Tk=VDdTPƒ-)[LG'X2k{~E+y㓀]#$ PL&ѱ6F$W;MTOמmA:/Q=A;s:u@zڌCdzGcwV{3"\M3 >q[z$S;pI=EB41#Jg%(da0TU{/C@d|Ks<*;#dXvC[ļ+=Kx0.ؖmMɛsɓ7j'oM6y[j'wU L2}X]jht巊IUPK\ׁ Y,,ψѿR* i~2eFrmeڎXX^kvXeq7ې]{Ջ.!%Gvlw;fW qmO='+o?P^3to{4;ؕwN6Ef~Ps# B4NxDn^77ݧ,#U*Gʈ֜ޟ|lh6x8Сro-͈I&+W87ٵQ}&I@ PV]ޠQހiwGv7nwݮW~ bOZ+]I1nӴ>N;N{ΦC;:?igiC rڝf(lTTƸQPUO;Z~D'zkdӏ%jufQOkzX갞. ).QөOH},|:@ Ϭu#}]gDdg  =!>+{FiOzMƞ>6RvOG&AOOpMtAj(bރQ{Yo٧ i{O ϪF:0W q:lܫ :6{;LE=XcR{oF oZ4J_~d&{ 15eF'dOV@,p/*!Co1s a~槎O])%~p5e!v<ݻs#qHXrgrY}i*%ք@^^*'܏>yr؇jqI7ֿ7omd_XBɱwk*bzu[//w..ʯ>L,{xod鷫w7e?T͎ ~IˇiwL?֪@ TA~? %:ohn7&{Zݿ,"QyK^/Vޣ2z.6\In2 Hk&芍#}T=ٌm5xOtt5TJBLhVZП='K4L I#j'Wu^Lv HM+BO6Y;f^?i3y?G/ _-Gc΀YJͪkD-XDWe"y ͫon7q{E;3KT׆bM']N(:SN_<\R O̒1/UHn ,-=$VUGա[w4iw.aT&<vUmu$r31TמLNK\v#G2˛_/osoK +"Y# Os*2zD B^l7=~3bSX"V Wx|DclE.L"x+pFtuWJN_K͘Uvnk > D2̙[#,}B+tY|)2AZoVN2bL[I|j-FlqDtf Kwo5!8Z+ZZ)KbAL9 -/wqN.A €~s ȨP zU_f\6q#O{@`@Ꚗk?jȮ-5Mcfd`H`PM"GTAƢ|VT}یNԧBԼ76i\yk4FEDg+c/e_IZgRR]\|ڧeR$M\L2G.mLQ^V5 [ < ?w@"v3ذQXh8G SI2T(R$#_ 2;PY,w!}݌<K`C#힨rUqtpXXǗD2+m`f%dym-49ߺ3v^#N.G 6ٮcʖRdbj ~mCGtP;D;3XZrg08:RxTǹ3 #;"ͺ+%<:o'QM-3- lCj5BXJKjNA x?+IF9C216O̜;~^Hd[СSo1sN+2.m>%\E*C w+ lKo&it#Z9Z߻K9:f E)ókf-z3Ӳ]Y^VXЅcv\L(߁JPQ#?W$ɖg5uꝖXx& GH$L~J{}s>"_ՎǶ&jFK Ep)^~kA\ǥx\o(.R<.#Krp)q)Wp%I\ {0'fa,Uw$}^&Se*^2 NPP2NC&:toyl%XRS W ..#f]p,4dӐQ.OCFq< 4dӐQ|4dFdFrb_^~~`bajw%+uvrt`eo0]O2Փ'` ",*IeV>DOE/HF"UϦD.Is-sE4m҂L.(ūFBX-g>5dE:iVXTPƒ͖|{pw{}Ϳ):1+K]?Gھ.D/+N)g؋U~)쀚6وn6mCo>oDzP!كV$^]Hh\↎!QoftD'y4[ɍh/jF$}iY2# S$-Dx t"!|l=TRyP<1nt@ƷD$jz$"V]07JI+2pK/* / B}}Z/eqiu܀]M0=Y1*OO9Al2c $,Z*ئM\oV,u66YEtsgE d絲N֞㻲ݷ~D`xzC\x[z+;f,7_{ZpEܧN$Kǂw MzxM8'0ؕwN6䅾5=ӆNM=Yoýw/f,-4h1jtti|OG>$N]/$FiܛED'd(U]"]]/TD5h8?eWR_7WV D}Mo~%/_l4>J7 [?!_ЬIgCeGK7įkĉ_hTi8 @ 48@@6b!$|5@6cP*@W $~$_~t`)A !La ӴAL(^B Ѱ z@MXo4Z!`)R 1m hǚy#DF/; Co4~Ý$oZls^XSLg$ڳC44`z>cG␢|fۥ T T,xG<9CD5r<ڽYJ6\o`fungXn绵]\M0z{ewK~ed;ֳtc 8Yku`nofPMȒ ^$zml+)W+_P/uM9|)=Vvд^Ω-di13tdT< 4k=55QFjF>4+ZmCPR&4Ռ}hW$}5voWvؗ5c р{UrQph@㽢0 h(8ޫ_hWsxhbGj5EfN4|MS+И銌5Eڎ*k;vT ^ՌHCpW;G~5S`v%hhhuu!8+c#ptGJ0xW.FE}5by #""?Ú#iM5s~k* UT$4ޫ U{Er,={58g{EYxGO^ Ι"^\xH.pW$׉ 8+JKO(jBV El=h ǪF}eAHC㾢`kp@L#C *L00WՕ'5p6JcCYfGgNT?4 ;Qd\EG75pFXSrG9; A4pVNWh\EW1Uti 8+ ?H0E^ pZn_"NUuHL沉7&8=WUΊNU'*'Uի&;Tz&8wY,8WѲU5VzU=M kW+Z"gz5ի2ի7W4z]z Uyjup^8WYG~U`TI#E* u%4=^E'|^Ehtp:;0tp:2=U?8P鼊fux:*1! ΫnpR\|(Hje!A,>q%i}eC`UTusH!]6ړ-qg/flKKxǡ94`8|]F=Q:<$AP)bRsgEMy VB$/kXN--\[ S."Ĥ#sugP2iȘT@ڳ+똲Z;du(پ.C_[ 8*ҨQ0ts뉘8DjT ]{" =%<"Yoצe{4nRR+1pTe7&#а2&X:P g3H,ɶ6C )*1lR]P$fq#@P@|q}uLz^Q%i|Bj."Ѝ%7SfM ٵRf [iW 1O/}z˥坄pZmn!*4ﭶk( ;"q5b\zvq@8R{*I`խӯwo`  RL$Aqf[ 9fӁ!]u6q, 44Lђfx-hdK2Ue T̯^~2Uo몗zGWLt,żg#+>7eИvn~vy`z&(^RZ"5c(!8ejG.HZ&&"KZB nl>5_4Tmс(sVe$j$˜QB44"V]0RR:zL‰Vݵf< &OTM-6y'[l'o&OpK/* / B}}Z/eqiu܀A0=Y1*OO9Al2c $,Z*ئM\oV,u66YEt"sgE d絲N֞㻲ݷ~D`xzC\x[z+;f,7_{ZpEܧN$Kǂw MzxM8{o_vvWxicvI-#Jy⻒[:*4 ş?SۡMd>'0ؕwN6䅾5=ӆN ?tp]K9&|agѲɘ*c2S IgcE?t~'/Q+ iơTj;ƸXOB}}<04%Plg1~Q_hب#!~PCQ첗A㲚Z*gGgezlR=txS-|zOb_=*^$ããÿuBT} |vla>qNNNN; q*8oXy9tqC%uv<_6s7z>K ^_d4ؔt9Hb:Us6췤Y5H7 _xOOfzZi , h+#0jօZ@#: JFV1D~1htM4qAM4q pQGM5qQGM9%+8j⨉&8j⨉f٨Y8*aCb A A 11H| y9xӘ^A׉iSSo3f^' MaCF7j0-XSN482n"N;v"D؉a'Ndž׉?;;F+Ǖ}A!B A "A A!B4!q A A!BBw)Pxh@En(r3ЅG6<|ԇGO(r;㤟w"D܉q'Nĝ;w"Tq(n+nQ銛t傐$ B A A!@ C A!B QBDd!B A Au H'!B A A:2Ƹ A!B QB4 A A!B!>!B A A<vCߚU!|u˼w-| :n5qXl}8ӣ֊ƧIxsgE67#A JD'OmYyf(EW#6g`S.s˟vXN'+ - WT'Rmzzn-OUY۴֎kO;&6 뉰ÇMf{^+k֞㻢F}#xqgC\x[z+;f,7_{ZSL'ݥc&R=&Mvwvn|{V>9`GZw [,ND~oпR* i~2eFrmeڎXX!)kv6vw gjEv3mHy"+o4x /-w̮A2i%:ڞzD)O|WF sQIvL(/> ֖vhӽ9,M ;'rpf{_# D#\Z98L o} 2 )H) smK R7B~&*lRj _5hhhhhgabj80 SA;D;|=;Lw_ 0pw[ؤVmqZ,ZX,--|,e£ŢŞŎ~FE=5=yŞNt g^hd1μbbhS/4s2Ym&&{&ɢɞdddd:Nddǩddd'mhhgasɽ݃&d>Of|2# l3*PX1%Xǔ`z.{ X~>A~~~g%]cECCkwT_t)Z3YF5!+gISk4KfA3畳)W)S aѣ)Lm` ` 6l @G!؀VG` 60`#@` 6l6IF` 6l ب0s6l @`Zju6l @`7 6xe: 6l @F ؀VG` 60hM)6l @`m<`Z 6l x`cy6l @`Z 1I 6l @`F5zEh D6m6A"( D6m @hц@h D6m@#@!6m @h h}D6d8(D6m @hZ a &xJ D6m @" D6m ڀGhCm Pm @h h}D6d8i( D6m @hц @h D6m@#@!6Ʃ"@h D6mHt4 D6m @hц ژ$ D6m @hF5{$P!@h D6mH -5tD6m @hZ #<%h D6m hm{IFh D6m ڐAm @h h}D6$І D6m @hцF6m @h> DhcixJ D6m @&'h D6m@#@!6Fm @h h}D6$H= D6m @hF5RAm @h h}D6$Іfq' D6m @" @h D6ZD^Q6m @h>6зf'FF/6<62$7횸r,y>lp ?#@4Cޞof$qTqzpUF=9*W R|x7BU b:R~ V )V1CCU>!*?˨r9 JTrTZNTʏyk\JǼ彨>`>yRةn{7FL\uL\OA;]*]u}DQ9{lХ"gi&J3@Ӻ:q.]w webkDUy="sW٫jӫfAWȿ^å@m$ááõppppm;\&uhhҴst8t8tn'GZwt8t8tn3pNe(@CCk !%::2KoACCk /áés^FCSp<2ááõp#<'pCNx1dnD0/ C?AZ&a(y n' :tȣ/7>7ssxpn7N|g"$77۸7m66ss&s";3ϛNCg#qn=Q|."gdȃSz(rz.\DΜ8ӽz`| :ۉJf7nO~v~V5m3gcȁdl;OjKJTA@\QaݿRwId F*p}5[IMPNLsCNξf"IG+l ҂}Q{&`i\A--(l7G"҂cQcƙ; j=QczZPhk՚Gihք>;J[v]33ʴz"lLj'lL/-3Lգ =qGp3L 0գ.Tgta4z 0#;=/8HA}az  c_0HlAaz4Hh#5\CT0`ff@?ja觍@?m@Q z aV@ϴZg ZPT=CaS @K3-uz Q0h ,UHT=Uh3-( Gbjc#:?-'Tcz =?S,86Ph)]avU:NYKa儏;NnCT<2N^/A0zsՌImUk e:2\BV-! "-}vmPb )쬝?6$b''pufb8v؎ەK)RzfP1mvn<u6U6nTq7>>hM*6>>i5ڈ 7VWVVV#VVcVVVVVV#VVcVVVV^V^v^5k5Oo5Oo5Oo5Oo5Oo5Oo5Oo5+_ׯV_2۝VOy[o5+_ׯV_2[o5+_gT?gT?gT?gT?5EVQVQVQVQVQVߠ2 Z7h5 *ߠ7Vߠ2 h5 *ߠ7Vߠ2 Z7h5 +߰7V߰2 [7l5 +}e9ΚC~ćt`yCt{a/tXx4Q]R˂Ӄv}Np;;2f1`_Q}~/~~u//OnC2 7vG/wݻzeA;Ԗ˟Kb?M$- sNu7 4_Vd΂?;?NH>kFǴi1{N>tǹvV/_׎}Vús=o?"U<.ZZ5n0X[q?/_J/K?+oGǵNB93$Bh}/ /EG5l5V$=?J~;ON班ӡJ%g:۶m'[ʒvC˴:_ePBQjsvNnz?At&+ROo (k]P]w#k;=ǟtlmms-1.1.3/data/projects/CoolSongs/Namitryus-K-Project.mmpz000066400000000000000000001716541247673406200236610ustar00rootroot00000000000000>xmsۺ?~>S;"H=_Ĺ5}ŢED*$/@&@YDh^^a}}_όvkw([$e"$vOMu\\?aQ~~vb$o'qܟ|7Ø?xk*ck/O'^H}RuNzAn&i^b'RI/E?I,- qBs<"ܟh 9w8=SjK8a'265OxC%':7^do3dXmo$JB)_E/ʗT(A`?k,=6Zs`&R:.L{ 4}3QfW46y UyqK& ɿ'L+9_d-uڿ>}:+[ô b|ctޚٙ#*?N/.?J [$ܦhYI*0\]M9M&,Zp-?.Z]KF۞I :j-^dwC^ %t[lP*: 3]+K ʯ;94:lY#?y.pΨ!YS".]A P)B¦M-,:lj4x x CV U [nUUF.km^J [!%f  C$LFFFÏ x(BaqŝM`W\62pOi(R,ࢲXfvvJ~Q|xPlaԃg!ޫ ^{!ދx/]!ދxo2  bEWJ|g֐;o#O|EWPoI@y[#dj?W_4>B&!DĊwo|ylwB67ar 2 e&x)\qv!#>CF؝{=?@FSgi̟a1&hf*#;-։e ([립528B}yYPfF* 5eu$IҍH$sC/ux+/]"MG "^"8pK4=|Wj2([s򶹳[䬜`mVEd̎-a쨰i6kK`fel PR@C %7~xy+ GY;H=] ^`Vvm[dZRcWb/^c ġ/~&ܸ+䁌bL`_ټ40v?jּjPM@aCĢ(# ˆ=Hy=6s&uLdSdA+} O$EBjF7ܞ],JD-xrZ:m ; Y"ݍU9c-S3f]8l<}ؚakfyqؚ!5Cak {WtbSUkd7gn͕vK{Vʇpa0_3y:k0Ogr)%}+gTD8ATr-FaaQ6 ojkUvTtibj!620hZ3bipw~4O_X{fAzs طV~- eX|˿(e8~'Z=b%RA.R`ǥyU~EĻ)[ҮXrYPL˒ oJ0wÎaG[m<>ϋ0hܙjR7vՃi. (OYoz7鳞|oc6vuMHxF\&ijWVkGJzģݩwz={ԼK>L"giC$oC=Xi/E #q6=&MeE* $nO.)O4]I"li0*< E'1G_^ӿjs'olWӐc\s{fԑ~Q%yUtdvsKjD%"~}OGv+-?7*vv }a'k[Hȥb(]g]kc4'#>ΑI8o9~} ǸZ$ΣWRM.)]7X1_O?(y,2]puz$NƗͣdSgSȌ':7^dgȳɨ^ۻp/Lj\*wRwC5Zh jsC·o|!> z Ai i~qTjלsߓ{/2:_ξoqIKaZu~$"#k,`vc{DXZ治+z  nnUxT*?;6!(-ѐwa{p`W8H_"*x}F,56w2eJ/=ɖţxEUo˵Kg^jhn3}WH`(]׾XͶwh𬟷q~n!{N>o{蒁 oݰ0  84<\w;]Yr7W.z .}~{w!]Ab=T{iU\/)Zĉ"s>;Uҩ^,^nVX}R4+1H=G޸R*^eUoV;ʢLJϣLF:#>A3)^ ӡ,Lg-4[~OzP^j@ ! ;߫ex ȹKM"]bXmldB۫|vPYqr]Td?-&K`?_^b/d¤{ }Plw2<oHK+6N:X{rKEqwctn{R0ل?:IBe&5BXa>IG:f<%^.G]S1+;s> tKA3c^cH jqؔ}><,M=F^D7>)/gm|-%}U>gڍb9=S[r\$%-Qs"0u\|rf>/(OxŸ~ð.KM2a}/W_[.wII+!$1 g{HGCM`s[y3<#.([v%??u(=-Jrj?Bԥ8~W\yO}`rc !,m`[erYA)#N(Xwװtژ^Oі ׁvվ3u뭜ލnlp+:(O,|}?]~cA;Oev?i,Юh“EDq'k (&m (>?_@'%79x:':(O,O!T rou~KǮp>{lM2#EMay'vzR :Hj߼K#gdlWp6 &?qp6gj2`X\u2YPXZL=a$K(8kNEF>c8Xd.>kEFcXd/>!(hhf*#on&9viJԔY4oVʮi+ XA(t]ҾBuAVH2ۀ5$w9Cv0!Zivx."^]"]]$~ DH9;L@Gnjmf_`{81뫛碖Pu.2ɹH"w]$V%Rw5{]&"QapRW0kI+R@.gLK[RLKxd'^v1p8't:ޒ2R${ 3iq 1*>a/JҚn' _ć 2Nn4 >Xx W9Eҭ{@O(w@LuISo8d"luC)ZdN*u։Sl}ؚ!y1pց~=?n:p՚=۫nsez{K{Vʇpa0_3y:k0Og-{tm۝8u'CXLI-,ހ@طͿA[^Jש‚yy_l>$Nb9p\7-=?髷^V;:1ImB>=%'7zA' "R>؋#KEյr)S#~􏕓dF)m.^^9!\y&HHV^IEa\^MEb_]E^K-]D-aOIxgYJPfDOy`fݒ2*Ju('weY׾Cl 8 W+/+nKBl3'v UJSeSyFY=ܜQYQ=\z˥Hⴺ]^ӆt7/ 869>1dg'olW؄Yыk (Us^qosvRT'dռWbUɜYFvjk^J! 5o!=~}%'#;DҨ}2QXe;:p?^Gk3Lp'2\!c2%;UJB"b)Êy4\GR"ѧIn8ol/>t;tЈQ/Ni$큸IʵdS4ܧ!.Ol?k y63k{7 O¤V/=._~P)?ɃwR7yKpIv_#!6-?/?^_^] 63}ΐ{y/E"\2n5x0Lˠ+67Fpt giG? 7ާ <[\vwĢűM| K z;Cc.sw" hgyC2Gdܖטd:ɸ)ýVR[ `xr}\᭖r \#KZ||L+ڡt9sķ_b5nYOs& LD 2|!W |.wfg E+/v zD{O"-"t>5݌Do-k%jr-qI属zIy QyʏFw2Eg&{M` v=tT2.c-(zg2L^2NasouGv#ǒ3|I7/b_RCR|WIL3b1^=EuAybg_ƮMbօ}f'ffY.uyLg#F{^@`;]p0O3 䘽@@s̹bB]4~{M]c$})B.C.cT0Pq"PQpn(Ma^d4}3?+@^3@Yrl0'{9Xh$Lw1yG NWO RLSME cqرjLگ(zoޮ!n.Q|^]$л:JlP^|8/ۨxO _f2X`͓b* "Qp=\4aV/U+z I^͛si>`س`A*s5;OeNd]9]d7qbak)/-V} ;^V{ZgVt_zʎL:~uܵk.Dyd/bn,3qI'KY>..K:NtZ` 7ķJSL4V*[ff/(V,\g\STpUUh^_\]lKOMmU;Ys%Lғɼ'cuڿY` Pp^] )P*rU>RneIA)fvƓx&՜->!2S{_D+4%g)OŎ!KA.i #C Lal+`Eqj?! ;(8`Ҍ^c!&48c@a% lVl(C 0)_}d=ЪN55^K&虁ג zdXy-W4D KV.bGvv@2!8ܯ ^JF{<awy28dqzXd:Fȟa:!|h<٦J,šel{%%궅S!(܊of՞-=f74k7xd4+pT G)xuy{}΀nt}Ex}ٛ)bM^Ou 4||Uڵm۩b^,w+]ܫR|ov(.A# Pk.vДiI]Jd/ c^5ҾxKH!&̤&3*>a톾@z4U(o&r G_ˈXtrŦݜ "V=x c 4¤LuiS:d%!pSN@v:E!X5<`:hዄA+u=׮!Z&dPc$jX A'B[3f=lzؚakqJf(iv`ON:pկӁn.?^u+ZT^z޶oW>̈́a1Y3y:k0OoiMyg5JXv8Kg,5cj4W&㬟& 1Y3::k@Goh:Fq=sv}{~uٲשJ׶݉SfJbJjhd߀67Ǿn-h/߂WҾN{7 OL{zN]f{\'q_ρn4AL/t\e G'ƒ 5rMhקR?$2VƵ]/~$a,qUg{vV:ejnr(exK<~!'^=+7 ~d w s>1L ޫHHVqyCȣ%U)=iL|;@ ʌh)򙞳^Jb\v?լ[!?ҿSF%]鷮N,w}z6o Gje3mB~o9͜mFa2JPiyr*3(7Qx9딒>3*|" KoIV8K"giCFxm3ui UxodxI?B6vQAxI0yD rCRVQ6Jita5T(>7>Xtu'*>U0]35{_vuMKxú7*=AدAi潝kyAg3٠AgfdEgl͌utt6l٨F٘Bo z f zU(x1b6m6 Ab6m63Xm۠QUL6۠Ao>zo3#J zf8C z6:x(1z6m4xA6muGoKzig*Wߨ^T_]R_p?gTנx?gMs}t?7د@ih*3GIAɣA٣IIJG]4 Ug?7T?揺#AѠHih_ih_eh_e?JG]ѠXiQ1V?W?WZ}41V?OT'J돺=珉Ѡ`89eb{L6 K 6Eh&z6mTGlM6&bmvM6Dlm6؈6 ڀh #ڀh GDm@ц#ڀh&X6 ڀh #ڀh GDm@ц#ڀh.a"ڀh :x鸞AoF0 zU1̤t3)ILJg1̤`&IїIh 6 ڠ? 6 ]Dm@jDm? 6BfSDm@jDmDDh 6t_m#ڀh @V7 ܀p #܀p G/n@#܀p.n@AUn@7 ܀pC6 7 ]n7` Fmn@rn? 7 }p 7n o /7Ϫ[qXC,VEZf{^7ba^ױx{:M,iu#Wt W4Uuk&FnŇ P|_2#آұx!4dT_cٳ.g?3_c).]7rt9r9˙"A.mɌ._z5[8Z'H}M2Q{݄QPa:t﹋0Hp"b֓]F*%naÉܵEMJђ=+]uowux$a.}!uk?#7ΟxN6y__:1;4dM"^uzsf=>8=SX7#Y'Z&&Io7?[Ƌl|7\%ÑUJ/~9S[/2\()*-=-6)%|V!6X<ؤ>yPT_{՘L*gB'Z#.ׁ}n7r,Y?;׳"[!a>2GhoBeiba,m80x63љٷ LsW|fm4PFf>Ьfʮn.O/?λfp:x&mK5{3QL7-60c/ՠ_aQv; 봹Diex=w$ISI6D(s[xIz}" E1)xtBuy]LYeAQ"r[X=oX6(W74[+*k|̡αg/U2hdCw0w^k9vtqb*dZl'3Mw;qDm5)[gZ#C`cI!e V^r[Uݳ_$2X fn~Pȭ+K:[,Aل?Ļ[U)fp?s`-3~I|ҏr LpU%UX˷?N/.?%tdRJ *n,@&Idޓ : UOy(82&daPπRQqr+K IGv6<8SgT_l,l ? dwWjg+l4m)/R=C2b\8XG b8*/{!#Rk^Js^€8 $:_G?7 VP0.? Ƙu-`L_cv368dv?;fEF$ Df<: B 013 0.!7#0PZY!`ºa"F 0)_o: 耰a!@XGV)pA !@X2   @aR6m<: l@abf!֑a \C loF!օ%a B $aJr8h8+EL`#uj2PqD|XNt1#w~ys{@@-/%#|8d0D28dqq8 d4yDȟa1gḷmB:糏@Z'xkQݲ^;FQMx=X274k7xd4+(caWW__a1t'OiyqLӋ> xۮI#b^,w+}MTODqAd,Ԛ˵dZRcc~L6aAvCCR꽡t:ޒ2R${ 3}es҅cT| ۍYZ}m' _ćїeXtrž5{Aw'I2Sq0k-S(8dE!Yh u:E!jSNu:A+} O$Zk"!tJ5z?nn.ZU%u-a۶~,ZqƪI ՜N[3.f=l2{ؚ!5C) %[3^;lPy10mu_Ϗ)Wٓݜ]~6W^-geWi/[ro۷z+Iyf0O<5cj 4W&<%Yb;aft֌qΚ1[5Y~qO@G5cj t4WFHBҸ9=lTkĩ:MbJjhd߀67Ǿn-h/߂WҾN{$?߹N)潿ui I{oEȋޏN%AjbШO.xI=*!Iek^Iˆ1cz6"zM_'-vuuԈ:tzWN} ޓxy'O?īpW""Yyc'= r{5~uI*{Y?/}x#wyJ?'vg(Am{?A>s0_uK#DgRwʨ+IvBe]OQ~&0Hpr6!7ef6#~p`0QO~`å\z$NvlOV˿[eGV.Vob/# <#-6hKpGLm&2^"nxX'II^"(&o{ޫAUxyZ}O=I,q?mD^D U|bxYbwg5b5'# t3t(QAHT8у4 n FJZiRJV#]|V+>oP}8KOTLW}`g kjʛڛ5oUz^#5?V_f{;f/ꄊm~Io#L*˛*oY k~ī{?د@ih*3GIAɣA٣IIJG]4 Ug?7T?揺#AѠHih_ih_eh_e?JG]ѠXiQ1V?W?WZ}41V?OT'J돺=珉Ѡ`80- 6 ڀh6 ڀhCwm@цmDm@6 ڠ m c#ڀh 6h 6tDmFDh Іь9+<ǔh po3挅 zU(xBomVR۠Ao>zo3b¢AoFU}6 +). zU{ɸ wAoFUv/q~wp~wXW-퀝h 6 ڠ? 6 ]Dm@jDm? 6BfSDm@jDmDDh 6t_m#ڀh @V7 ܀p #܀p G/n@#܀p.n@AUn@7 ܀pC6 7 ]n7` JGmn@rn? 7 }p 7nn@7 ܀pCwn@mn@7 7{I,Q7np$~)%(̝^O9р^|=\m^=cLkxtV[/qS41#d&dd# :@J#tB9eCXVaze2 rqpG2\eXO ibYLaxt MY_ UVL8bG[Ur ];ńa ]`n% ~.x టL7S2pOGE ?2e?;Ӂ6*46-o|f1h en!8#pTglhlB8#;m89:pX3189:pPQ]5e:g7't'I?+(IcxZ367yNMbMx& 1g'#EL@?0eAtZOA/0nm :OA0atb0bSY8 :.^D4E if Y>f N;})3 ~I9p[,ޚcb Y0ppPo}8 Л͸<~kp&8&8yB:!G:H。  28( g 2x/IXv3>[K0;R G,uFtFs3  v)fdfdfd.Fj֬bpX32pX32pX32pX32pX32pXdcpX32pX32xXd.XnHXnHODnHODnHODnHODnHO!]txH ߥq3ֈ'jI0a2AL`=d. MLd0 pL&Hy|L&T 1 dBF B2L&T0P'dB dLa2BA2L@نAl60ۀن!fJ6`l l !f0D1`hkKaCL d)pkP0:8?1'xJ8CS Qpig)nk- Z2V5Zdb,n iT&%SSZ25[2fLŌMpspb28O<7yI3&C,醳db\kr h$lہP %36ry 3Zr9 .Y n/ Y 2) [oQr s8K-ILLsLLsLLs 32D4a&B2DT0Q!LDDL 3͋DT 1*!f"0Qb&B3JD`& 3`p!!f"0Q'LD 3U2Dԛ3U2D4T f"dLYNƘh^`*JLET 1SPb*S dLE 1:"da*a*bLET0Q&TD쭥"H*SUBLE`*JLE@TSh T`*BHLE0Q&TD STD S c*B2"do-1A$"Wb*SUBLE`*T$%"TD"SBBLE`*N2"d7?"dhS2LE0Q%{khVuDB y5[bns+UB̭`n܊$%V[JVs+BB̭`nN2Vd[7?Vd[is+2̭0R%is+^9oş_zxn*QDƻCce~'vIV|xݧ;'0>4Z.06Nbl:n'_ρnTHhȋI&r}QPa:t﹋0Hp"0'2*q N}_,oRT Y鲠D={w8#ػ{4ȿ\A~CVA<'K'^8"q}bvUq~ޜ_OO/nϮoi3FE3;yelk4J~OulofgȳcK2X$I^DG|AN~$c/^k/No/5C1A:.L{ 4}3QfW46y UyqKτsߓ{/2:_ξoqIKaZudA1B:U}0WMvA+ڙsXdnRM| vdZR~wljCPs ii8_T7zp瘓qN,u+7 5ˌq<$S0 l2dʐ%tɷʕţxEU*\ bI4#KZTtmGH5~aw$t9QVYk_og_cgųD$l~f2Ei+.4A:s6\h7A4j2/(p.˗%o.@'VL/3]lVuyx"&#)vO?}oGK .W/ #/^|r~ۧ_d:PRTz4fdɤUx6X<ؤ>yP2闹.L( lE12LSD0vD:ؾF%hg}zV+$NZg>C M:M,,E"l 2mgx/h$^yN,mW$'?Hffd-^xVOJul ?u)^fʯ{_[ercYkʭ֒΁ي `<(zh m8mayUgYVݷ51zB>3[9{Yocވb~n%5ߧ[;(O,v}>.?5h; BKs>m M3 \KI( }|a++PPF9+`QTz(O,!TT*^ScX8wFʝBl1,\}s,޷xt[Eau/u-yF%#hXKt6^/:3³٫g@=vGdqBae:! ەIf9TL0l-UKU_Ž/f՞KΣg> y&T⏺ nf1Qn6wY{ v?q:q" zuQ=hO 6x{4LnẖefҏbeԂu6O:RUDbfv戻+-1o6VTDURIRcʁ~' 5E`.V5Sǩ&mObNTOzpTnuJ^ b"P*zs8Y~Aʒoˋ{rnrZUO H3jrԚ#Uv(AQH$(lj }~ƧV(S-SS9Y L5 _68v5(k踳"Ҩv{6QmUNj]j#Bv3R/jK3z=PI!6ڈʗGwv@{ִ"{houD{==mh/^UN"+R ^D{^D{DVV6@{gEODW%p\GW^kfnEWGi4 qoEO˓dL!#CF]<awz28d2~Mw^Gȟa1gḷmB:糏@Z'y5.l hmO7VSeB±[rP^VH2(d.")%̓Ԏ;TS>ӃԎ;T`ރKԎ:% Ҽ4Ds6\í]aVNq':Y}Y[34+(c`WW_(E ,Ï[w^FNp= ':t|U3ܶmg-9m.{ޭtJ)Aa߂i0ćn{k;.#Ӓ"^hዄpA+n=hYTZ`ֵlulvkL&7TsZf:9lpؚ!5CXak0 %[3?lP5C){Wtb$~=?&\fOvsv\{kT^lʽmɯ|'扛 <5cf t֌aު1\ 0jgq1Y3Y:k8KogiMY?M#5cf tt֌ު1\ t$" I.&z.eSm;T!p.T)=|߀b8h~ ڋ_I:UCX0]vVhsp7ۻ|:Sz׍w'ybz]$b,#/wN%AjbШO.xI=*!Iek^Iˆ1cz6"z_'-vuuԈ:tzWN} ޓxy'O?īpW""Yyc'= r{5~uI*{Y?/}x#wyJ?'vg(Am{?A>s_uK#DgRNSƩ,IvR]OOQ~&(\\z;sM/5ڙ͈ صLFT)#*.O1wSNe& #gRrFeODp-"Ku CU pI}'U_ͲJL[+Ǎ7NV A f%hhwI2SGg5H}IL1l6=7L9dF6I1q G/7Ύ2e7ȼWԠmK+faלKOъu&k[*5sqڊҟ1 w%E2.I??xY}Lypv3{vyo2ؗ| DӆE'ކ$v^2EEEyƈIȣd4 Q/̓q iDP9i0bRiLj@/GJmRV &c4+u)~&4ik]/=U|6ޫ9ʗOXTϬ[C5*`liaM=NCOc'*fUqǑ:}H)n5wҟz?;cw{ո͖l>|D2kZl@₯QQY9]ͦ%ɨhF,*&\)D8acH鈉8tZ$(Y3HɸP^ !Uʘn1hX ]Fd4`.#Yn1d2!5,HBj RdX(2pߚ@ ЛBN->Q#hѐ>gdA 8ӂp>#$+CpO8g<GCpO87;Gy!8'S%8'̒#pOf988888889ˍ7%JpOr;;7;>:Gy18c,aϹ1Um8)M椠u4~ 28u}&U:_WnM t@'P3 t t t  Cn{=g5㞑cCÝAhgdHgd@O)gd1I7Ӥt4lj\xD9H>>?Q@>x<=nC}5y V^F:.c4)W [b~t8c?d"!E@Bo/0 =ϳr,xR??Oiՠk&`P[ pVج0'8H4aO eF9_&"^g"5h)5ƒb>_֔qOKrFS'ˋa(yۢ l` kPl*`&`VZUFXhn07:^t7)O o8(P{xw3ۀ)t&[дl7UvNkXJ8fM1 =(Q5`[&ކ}| ӲtO= OqcZ{e{ t:t V `ct0k? 2Aw(F5#D٬`1ʀ_"JL668GM',OCcFOD,#R\V F&97D\'#lp(4K`QQt3F((5dۣ`jȶ8ԀSa$,\T˦40E¶^.#Rܾ6I?5`m;׊8M)0*eN!۾* I[LE_(0!FHmzJjkF6 qhr@$+x=iE*p9Jn+ pC.o͊9n lf嶋$rSa}1qe3|yf6n+-[E,cOlcO%cln/-cƒٸ"p€GfbX,p/Gq6O2VW*pq6OC8'߉v6tVrv;e[}8uVƭ&/u>i7`Z8W xnl7presA,2.nhUxm |T~wljCPs ii(Io1'~ eFȸdfHo)T56w2eLkRr@hh/xQUNMX$ 2@qR;݄g^zdw$t9c׾X˛.._cgM daɇVC'?_/F-/Rq7d_1L5'` ?yA| |YB=A b=S{iUO[/)oZӗcE'-gs1hȃw dbqy%\d-y!\ j(Z,H;U\RQ^_\]^_}>"|絥سaT~Zf@~1iķO߬|qŠvEߥ ϠK!+'Hu6Κ"ٺg-좖odnyӉZr EboR#J`ղu@F`" a/sߡO Kw l%&:ڹg7 _L.o> 1|`?g^b/d¤/,V<&RfXDbTaݍb jq^RvQ܌ l{R0ل?:JB=e&UBXa>IG:f_ӱ%ՔȎ.w|VרTޣˏ)G)ۉSʱT?gbm58T>i;.ԏ겘rbI\MVkTz~MlM_nMM[]'͕*C@$|VӦ"SXP5͕n5c*Z+(մT>{M0eGWSk̯|VSzT>;uc)P> W>)j*µ45)\]JcVIpu-xjLyGj5峸4Ojm*)kcgru|*WS\DU>;5*c~]ML9ë)U>VeG`h.sjGtuAgtuaʇt5P4OJ@(ՕKR>kjJ ί|RWy S6M$úVʧu5a*t|T>|bԵ%D̮ T>fv3哻3M^V讦@M峻P>YS.XQܠ]]gjXӼwǺQMSS*t c_T=LS$c;sȫ)jJ`)4WZy u .8|W`_`y 59X僼$僼^TԯbGz7|WK -A^MW8Xyu |W`|t |K`Gzy|WeіA^MSAޑ.)ˬK0tu52ڣ TQ?ȫ)Q>;ǔj:h)wLk3]~m)/O_VK$>k)jZ*t1eI^M-哼:rЯ+cʛ{4YL$6Oxa)մR?ɫK0eG\|@"yy q} _jq<.zEfF_V(I)ZjPg=s a:jf=W_oGFeOm6ˎ]S 5$ /ǰ껍İ)t1`m]:p/ḧw52c4n%$sC"'Ƣxen_7 qR׮g@ $b7CZ $g]cP _N p*4sQ#46B{h"# LȏP &:m&2`%0= 7GWUM(+Y-ez^R3L#DkϯT댙ٰI֪Ҥ\XX7?X B4{Nδ3l&Ϻgr2ŵY*OpXδ]|Y"D1]/~^,].Ӝ:~Lw4x.;#y?0q:Nt#,y?Vw:O؝՟oaL| sMmg6Ǎr_.>/y8"[-+-!DVQPxPL`"XJGT9ST0mk*I?; lM'{':pqopl=L4ʅo_uؗ3=쌀[)YU:2 P(;u")E*ZWIw~$I=WFo~`~NJz(qdGp+)#-->,n1vhn69r-p3'LdnbIvۂ'>l'DnCoj{=õl+ȐOӎz9#>33<瞦ؒXdUkpzC3z:GpG`|&\Ih8d'rǻR#p:bD_8bQ+ Nڻ&M\ʼǟu uVRLhS&kԦL֎C2Y6eʏmd-3۔ZF)NlS&s!تDVF.bn*ltrq]*4(}Vekcְn𒯲(K7OrZD2Үd^u]ɼJjyڕlW2oò]ɼtyEv%j-gWLbŸZzy{eg͗m2@Wӊ<yn׽dy]Jץdy݊ױw gQ5,,gu/pVgu)pVgu,]7t؊^2.%R2nEX;:H /gqGSq]qwvq=D̒ ށg`=;Ϳ٠=X?VX0]_S[=Ž|(zq yvߓۧ #pQV> pGA䒕 RWO(,L;Kmm=?zBNg xD+?(2c1U$O̎8FG >z ųGN*o9V" X/3tTwcD^DD?^̍[}XE;;:EƆC}dQL,wåw ÍBĨ`+ղJuږMnTlwɣ}qPLۇJ8ƍ7:&ntD!6"Q#NEq˝}ca%ꯞ1GU V Hs)/z@]%P><:4s.U_pG8S,8|)&9ya3 ʟ[<|Pp<Hī`Gl~S S5zٸtUE:pMX{43 r߫׆2G?n|T&j d",SoY 2G?jéLoEY&oocɃ&_fɗ>heA?aIU8ޘ 7oސxӡx 7oxCoix olx 7d!7fie]⍲NFY|x"SQ-ޠow7(;)ޠ%.FY~x"SQ-ޠoAF*7 o@} !1xA;NeoP;W⍲nE>  UpZ+pY8pA?k6zGYz"SANGY~"SA }2aw 8(2pPw 8(;e]iWP T8pʇ T8l6xQo=*7(7YF pH fHRx&_oq |)A/7heEޠȗ42x&_oLfx6eM ޠ& QK |)A/7he%EޠɗZ6|Mz38(k8ZY&IQ:[DyCr (I~˸B.5mS襦- =+mtCnes;t,%CeQ Lc(C a8, {-ޫlunx]C.x׷C̴pY8pY:p1a~G8nlwP ˁ"7$:MagOFQv(1JFذ2azq G6wIQ`֓m*ڰcEw}zezn{|cG+}?ROomm6y 71(V/eeڞG6ǭz>/yN>ܐo4[34mU{VGϋz\ݗ[D O ƳNsmPt{ryOcƃ,!ip"Be,=Ʃrj;3J@e4/Oؔpl,2zXœI(u tF,SQL;BVG8Ju5t9/:BAk#QW{kͼ_zYfEzfA!A$'2|lQ~,<_g߮M|1pfU0D]1%6a*OvQt,&Ӓ~# e$$ץ.5xq2 jrqM il;P5lF.SeT(-'ڔ?p躘/|YRDɏ`޼hX457KR|H[X1ݗ9dCFbԔW+O jlwqRfrFޭݲ|DJɶu>+4Xv}[낦h8.C?ix:OQ wsZ`u9PO95j#0 2򮰀 X@Ui#,0 1{` ԑB!o,.pP]f-5c4B|҉g&#[j_o(G}k!؁[Z)ٙjYwLnT&4ԯZδ0 [\|!d v{y!yKKv7aR  Ox4`S-Y&E;h?FV J}uu8&$^b s{itLmYDu\y+"bX=@$Ң$KJA^X7ix}wMrW`CXF!;)u85vj p<^=O湓w2GC,y&T(ܹH̤YweLؚH?1003ݰaCOs2fd]R.,54(e+Igc69L_~ ]dƁpyԦlfz.+ᘼ䗋ۛϕ%BU%3BcCh,j95+5LʬmOO0:{/һ2Ǿ^nڌ[ 1fW+2$seO%KRa_D8{;}Tx|Fư2# BJX[X\bmAbK$CUm~}?uE<%ƶv/X W5kjAUSU5-a(jBQDEMPՔ5T.PvAUSOPd~OUa 3ǣs,}&&AOH_SZ:ءGeAɯz J~$b1$k<(Epx}V3>.M `1~dà `) #F{<#^ZSuo*w3@ݛ޲ uomP7Խ27Խ밄7W{W7%PUNQ6Խ-f6{rUc{Cݻꇫ{78]w]=P汃,'xpY~x7Խe 7 Խŭw]PԽ_|~Gu\f;{Wc1 v**a#JXWK4>C&=_, ^E)?EJIelѹd4U j5z^%8F(buH%D#I$#fvބ] vɾ쒎7_Չ.ه]SI‹Zk&dAާ35S5[<{pכD[u;=sڣ;<́u^mouՑ?SPpB)Ml4-#PWREB&@֓m 3x`4Wp$z|kU4$_-h!Z{|_ ) 04mcV!7?X eFa;p.%tcsp/˒ap0? rl`oWXPjD˺=ْ,'w%2{7˻_7K_Kr4WnVG?'By?i}:K#O33<+\s7?zt?HOx(iԌC ڡqmޱv:oQL1J?6p~gyO.qK[>GRt7x>bbQ+ mM\ʼǟ=ǜ\¤% , ѦLjMJU2Y6e-ڔZ*)ЦLMuB_#1 }\,*ltrq]*4(Vekcְn𒯲L7OrZD2tҮd^u]ɼjpyYJmR+wС]ɼ{yڕ+ᷜI^1^n,wceg͗m2@Wӊ<yn׽dy]Jץdy݊ױw gQ5,,gu/pVgu)pVgu,]7t؊^2.%R2nEX;:H /gq8tܮS܏8vub fX|sjsz`ֳs{߃lgr+ ,/)OÜ^X>ZFh[{esҼgyr!\Oʊ r܇ 'Q @Kq[k=yrg!'O^b! 1S%xqMc~`P<~!i6c%.5<2C Hu;OL~M8q^xeP(їU):3piPdl;^gyxY q9\*y1(9/|OG _-ODQ׭m&JvwtCý}$ϽmxccFGOm-=Td7QKQQ3h 6[ awN>E0]pC!a݇W/f7إnhp?!\heA?a`8"Q 7oސx Px 7d!7Tx 7oxC oT'7f7»e⍲nE~x,[A)(oPw7(SAK>]⍲nE~x,[A)(;xDUo@}P߀7dC}Bxc:L] xF'x2_w7( |)ޠw7F7(;e |7::Ju8d!8,Wp~::mnE~6;nE~2x;NepP;e-pPw 8ӴI3Amp軼GvG軼GvGeagFi]wyfFQʂ   ulxvT ܣGu  ܣ;*ood^o=cc6o4|MT}38( A/Uh J7>&_j4RՆoo|AhN7jQFڀ: ,R Sg_=QotǷ=2ȠUj)Z'.ǝX4#OͨGaT!O3X~*> }ъ8Gd`-:ٶA^wnym -붅:*A^p 8Fp#w}#LK8p s 8p!+^[ pSCJ2*Fz-ԣ^J Oy~A8Lg)\OOtz洛 °FiSO p1U~2k8lQ٧a}8 ~PsɷԸ[[[,J&7)' $ ^ Y]qwڣi<{&L;r&ϚQNg09ڄg` LFXLd Y`8F77 iP y`kY3xϚqG{֌;ֳfܑ6SS9Kբ׀;v2 Gd(zixů:UA4mWM!^bgR uQC_bJ!K@vԒ}Td5,+?O.@`!n8/d ҋ哽-K^ S <-,2"4~X&fQuQl#rsM#^l/EyN>ܐo4[34mU{6O_|X^&^/ow׋Z~0yE[Y'0`ڡnh;YW/l2x'RONϊZT1wgJ=Uv_6J]ǩ1҃tes uD#K2nl!'U y/"Bfz(~Z|D[xQ~PTM!+P/G|l%. >rNɅǂá!$<=hVPwuD?K TᰟQʈ?8x`,^Ǧfcr.<]M"D[tq'BjBn }Q77b1J{: K(j |TZHw26BON{ű6˛ݯ׋%ag]gV7aD~,sɇv)?{/۳?+7ES^6E[wy:}?U!:`һ8- 0|X` 'SAK f@ 7k+ ?.sC.Tuh3b#|cq py[Di/eYIdJ0=_:8ub3k8liR5/=byMDo=~kImk!Ё[:)ٙi&ll0xgLnT&.,Sq$ByFٛFe&3m) 77H:r^~^RMD✽k_" w=ؑDh4MSA6X)TS_ ;a] הTcV{u/0m`#랈+Y`E$qthYhd_Z`U|8Z)(HZr }wMrZXRӵ'"';Ftsj;lr4^=O湓w~ʉC(Ƒa4&U(#޹H̤YeLؚHo䄙nX샰5adeR/B I'aJmҩ{ c-2WH-2?Y.q%\w)' \&o>seM:~x2 Py!wO@VfҞYY퐞uN12GQWnB[)0C]~II5Y|EPɒT5N(TŹ̈::ɭ 1K 6&;+TaVI:ɫ!Szsf~M+'L䩆zQZ]נcemYNW@U'jkȧBQŒ^it"+Դ+k3(jCQPjoPQLnj/YT{IwWPAP屃j,'BeT{ ޺ :,Kq T{ W흎GVgw63F{FT{f^d^ .PjocFPjoPJVPPjoǫGo[j/T{yL+LjP[r:P49/*[ZAl;Cҥw0s_ 4S?:7CG~<UEtd̎0Uvv8CX[:R2Fh%ۛ4ۀ١y ȵ|]s=hL0_@gDcZu BFժ zp#C>~ ggw"7yownPHOx%4qxqr3&;7jf!y6 g)x 7xFgϕYQC;{r[*0+= 琪-#6Ky3Zi =N' y?{Rg9Iuk&"2YMg2Y6e*amd)voS&kqަLMuB_#1 ZYoUhbQUhTQO\XVa^%_e*Co䘵d^]ɼByv%6ڕ5kW2Ey5v%JJ[$^/qO,@ˢ;d/zse\K/i/mMy' 0{ 0K 0c΢jXYl?^2.%R2nEXYoӽd:]Jӥd:݊ӱwtQ)&r_nyy{Sq]q7qnD̒ ށg`=;Ϳ٠=X?VX0]_`xQWh{aYhQl1VK #pQV> NGA䒕 RWO(,L;Kmm=1eg!'O3b! 1S%xqͭgr##pDYIc'+lvUၗ:}LD1~xd"Ïn"y/o-GBDOѝ׏{H"cߡڎx>#RɻFy{?bTj~`m%nm&7Q*ۇQ8(`C|%yxlu7:"hoШ"־Z^%ꯞ1GU V Hs)/ ܥ7J桎?(}xpui~]ܿ7}88|)&ǹHO-N>(8]$0Ҏ#L=ɣwD)‡F'Z#q#&;xu( Yoހ7 Y7o U(p@ pZ+pY8pA*[*vGYz"SANGY~"SA }2aw 8(2pPw 8(;e]iWP T8pʇ T8l6xΌv7 |83 x?}{nR pK66`"2TM!Ϧ#m=ʜܩ݃-i:"~(iGĚ)S[B"zw^צSy͜ްS8\|H1Qq35i3͚N7]6h8ڇܧ-tm d6mNm( PqG&`c PMl]G_ppuǻ>?Ҿ8d!8f\8p>ǼWx="cvtL2v(8wIQ`֓mvmر*EaE_eldeM KtW]ndymiƿDXgEEVTs?&"Xd_?/8,}!?i(fh<چ|3˛w}sWq o_s>@V1$Hr~^,wl+K:qN1D(C6w׳3̳ ^07VOX*C܋#5 $G6zޫ9=%ik]8u5gzWa\G&Y"/?.oo.hqf]' ?ZX{2Fp%j ~Q<2XQc{]/1vqfN'ntZ=\< zv G_.ywwuD?K TᰟQ̈?8x`,ۢvr)Xd^GQ/&SG^q6~yfIop̚`I~ ,SǘOg;gA=[??R~S4IPVCgk fS`?]2'$!d$} #jrq͞ 9gl;5P5l:-S'UT,Tm?ƌ<ʬ&|64Dk/ 1d@8&́tYKpJS/w׷7ow_/LF?+t&n\O{'w͆k3ɱ``Xcl/½rSHVT "OJOnRgc8ؓϗlJzm[c]#"ڻ&)oHʄtWM?^cq9~5"T`E"MY*lyD>jL'E,*<45O+B™EM(c!=v<#NvaF:%2V>Fhgs72%ejtsLsk@a? G2<2#UYq %{"kBhѭrtW֤#>W`0yyZnq{sqYhmWП)$(,dmG+W5V2 9r; *H~e _/.K!t#)5Y6ki;dI\;>9U;Yisr뗪]mtЩ|lVp'e c7z]+G\B7R=BSRVdR3YL,n~[\~̺ܼ0 r1+(h,<^X0#!',^} ѩ`v}-2 4W^l= ڔK Yܻ:_}3wb +f^уx8hf>`[;, E%D8Y.49AKQMo(oQd] quxSg (OKRB"BnUMhiexe.tgXǶԌ #uLଓ9i\TeHEh;GWk!ԁ[z;&lͦM`p Fe2k2me4FgR `{r'] c欛CJGqtGo@qtgo@GUNQ-4[jԷ0רoaQf9nlkuyÈ"}-+-m3JdB?#΍GI,u0\hȺ %QU9K"kM%-4k_%>+4l_%>+4ݕU `ZiޓdI󪙪\U}93S鹨EhVXp+WGJSͷd|{bo_OesyT!G@ζ z&=ԉn)%c=gXϩͽ9XαzvֳA{ $˭(`޻Wo6n1\1q#' zq*2[|oۨ%+aTT9ڮMVhBfD蝓Oy#sv8ܐ*Av:lqK{{R'<l[`e?|/={Έ.("l7ƹppB&JN@wUU#QGڟh"~Z2=yy0=EJGoM~Oy0ѷ.^>ďϱ6kѥR⟃68*7(_[ Ij(8$a}4i4Hcp649+ELuNDpi5}ڍyfLvhMyVLF+Df<+ƳdDs)C2t Gì?J%p8MM!Ӱ83ҮSߐ;qDwr~nq~!wF^M5mTP o"JC>"Q0&f!~MKdiO ?=pSnr&ܸ |<|<2znfyiF&9`KܼoK ;H!7/M7L7/MYCn^AY>&7|C.*5Ò|C7{d?>,7I$#*I6V_dIL ?ɲ|X2'~ɲd ,ɭd%C5;|P2f;LCO4hC-svMcײ^W$1Ov0ȹwg3ۘ;e;쓺՘;VO[qG{ڊ;VܑwbL`Ӝ TwNp={pOESu h2e@ˀ-Z h2eZR;@f-Z.7 h2e^+@g)?xY ,O#un0᧎ &xFv?OKc>  z0Ve]{S?4K/,{e#+{P}@^[칕L)p'÷ȃMX|*zC'>j##v8g$2b9$bSQa9O.&-x:QI!Q oOE%{1d]BVqe#՚EGMZ'L[m dg]g s`<%~?q= ꗿG?+7EScj.?w<_o#؈. !#[T5/ʷ7ʦggekR"oW_T-/XbS./8ҩUUػF}uc2>Bje=]D+29g6\}. }{,7-n1 ^ԃU*'͞agW94ZEBfl1g_y, džaxK |7 LB*g8[A=Hw51xC~L'?.sCZ Ocm6Xf+ٖV!Ikad_ `m$Lyt>`˪v^>јkJ'ef!h-Fl^ Yc2@A׻ſ]|6diwyE:3T| `z7%y^ cX*(s!Q#(60y{P # ȏPF#U60`KO"BnU d}Gt~oV/R32L#Dkϗ1 9| ȳn"z۬kX BD4iNδLաꀳ+m Uљ6Ggr2uqY2 Z#`6`&M\jCfdwۛՃL9Aan/?/6ozn&LJq"_I!޵/YP?bp֑%Dh4}SA6X)TS_ ;a] הTcV!{u/0mɎ`#랈+Y`E$qtNYtd_Z`U|8 Z)(KZr }wMr@XzSlQp^ntsj;l5YMWOǓydjizxDz1b0|gR{HQ+LuWDy@x1 }61&)KjeQtB=)>]_M:pMaLEfE'؅6c.3<\wY+Px/w׷7+v$KrG@1 <N,`R/-UHf!/J j'&ܴ|%7knRp@ʽ^ܛC'ҋ*}BŒ^ڛi^!&Pc^(Bʽ)f# L^Pǩ6=*B,TU U{ ^AWj/T{̠ ޚ+PmP\[ @54+58}*{<ϡث^(ʱb{Oix:P490|G` 6!28Yo/Out3x:yO#?z:N߀7*Q-4[jԷ0רoaQf9nlkuy"/T[VRYHZ#λ|z"d_6XN"[~[*U*4RuᡨtֺJuʟںJ㛏(:Ѽ'6UBl/IyQ##W 0/b2Y'쏐ǭT]HKuԣ.w&RcⳬF\E mٹH!aƃ[h{I6O_5]LbmY3[Ipv4e؜ohfyw{u~Uds B\75?Y̢G&+):[h{*ժ7ʐOq?33;sڼw.qmHOV<ݶ̚1y~?W;43;\X'SnHτy`7(!=-*= 琪-#6Ks,@znbF84"V=0ᙕ:{rVLoS& з)kЦLVM*Y2Y6e;md-hڔ\*52GB_#1g*ltrq]*4U$Ua^%_e*Co䘵d^u]ɼJ`yv%+֮d޾ZyUv%JE[$^/q,hˢ;d/zse\K/i/mMy' 0{ 0K 0c΢jXYl?^2.%R2nEXYoӽd:]Jӥd:݊ӱwtQ)&r{nyy{Sq]q qnD̒ ށg`=;Ϳ٠=X?VX0]_`xQWh{aYhQl1VK= #pQV> GA䒕 RWO(,L;Kmm=?zBNg he;BAcl#J[ϊ:FG >z ųGN*o9V" X/3tTwcD^DD?^̍[}XE;;:EƆC}woåw ÍBĨ`+ղJuږMnTlw[|qPL,ۇJV8ƍ7:&ntD!6"Q#NEq˝}c$/XM_=c`ӽZIUzNSx6u^I!<#!>^柹K;]%юDxLVd p8}/8A]ۼ3 䃂CxԣRGZSK"9yڜ(9ᴑcוmȸlTug{_weUMyeՁ(Cȣ?(O%G&}eFezUe5MadG,ifO6}&J旙9(dRs~ɃbA_f/5Pj(??hSA(5P엚?(T, 揲#lHf??(R~f1clXf?Zy7?R~fbc,5'R돲DjϘ?#5) )TՆm6@ WPmjT6@j PmjCjڟ PnrdrP~(7@ Pnr(7tUnЦirY(7Է PnrC6C -pCnҥNV"pjìevRoo#Jgj:C=+=PPK-Ui2S5^ *]6J'貳2Zvh|RA^P@ t\OPe\MPe\K]KPa` LˬEi2kQ=c-JNW6]*jF0u)im='ںY4\56L;dl99p:#ic724Mj1xƴfy8T 3xπ =hv2Rm~FI(#6zぱ&re)EF˹xtq4nӁǝM UJxx3G܈x*9iXrAP*@\uGqf"oW_T=Xc:L'e3:n=rFKh7F^KD+29g6\}2. }{,7-n-HYOh2{fyQyZ+Yhy> bX<=?Wo" {<žax|7 LB*gxzK qC=4?'Rjr`QC;{+= 琪-#6Ky3Zi =wxEdqL+ WWA`R]-"!ڔZ)jS&k զLVMZ2Y6e ^mdZY`jUk"fUfEUQEr-[c[v{|u!h yc"yv% Jqە̶̫+WnmW2oˮ]ɼv%ڕ4k9b{,ݶjY1Sˢ;d/zse 1ґvZT!u2*h)Nt vN,D|dWP,dd96b/Im}q0Տ|=gߏ>$TsD@W^fkmnDzWp:_z8δk靚b$$q" I M$PVWw["νppx Cf'd՚7O(וּVB?Ħ_Z??u GY'OR-BNJ[ɷdVfVZ׭c;Gd86*]d'&d^vLRh8mDS뱥x%-2C/EǕpӽ%Z.;z)/ LK钏 \)mȓ#iP'/3kRٍx6xfx!/Z2Uv\^$ߌ/H_n e:BbcԐ?d;1j\ OAd\VNֆODoZyW+2O(x'~'~lXTyXTuX O:~:^ďWyGAs  KpP\<Ep :OpP\ϵzP\ϵ~|?Nr d8 p@pp̔~CG)h1C  gP<4/ּ~bͪE\SX83y9lrƁ8#_&Q£xxta1W 8Z 8@p| 8Z 8ެX*,O51I3ޖ@.NGʼn( iC Hէr܈r'g瓛˳ɲ Hhk>$29/2{O.<,x90낑i[:O փaUv%C1$\|Gֺ {g ZQW6inogW!E:&34XH˧ܰnփupn[Ka3^"\26p_q~wv| K mA5udw>l@ Oܚcjnqqݯ i/]/~Ⱥh LFѝWKCshY=+ G Efm[u,#wEahow3Y .?7ZV1:D3M02Fedc\ѵ' ,dcAf90 [|We>9҉a3ȳ.n>@+.^Zn_gfi2_ r+we>Wlnlni:"1"Vx [p1maī8юhHpwȵVI:@1eק􏾢)~0E-BǏAm t.3 J@פJ!yEB@ !POCyY}ulP~!3Jc wWTOМK$m94,3B+/3g(n3}`X'zf6Vdޝ7Ґyym<<;<㛕, $h+:μdgAvsv{}uruʞ!lYz>͌p>?AsعNF|=h7Bj?|[}`FiG3Rw_ao9 ẘY5)2rt>6}BoWJ27wo]ؗ6JpWa&Qykz ;Ѝεn^;Gjk W-ỞSr^nTScV56DjV՗Eb50:E벍pmvۇ㲑SjG}&w)1]o=xpca`eikF#omے`|W؞܌=6og&_hZ79iXbƌ"NGGUʬ٘p߻gɯ'7W̌xt|$3oh!)m45-vuM4{B2Ũ{s/K;0KS-1blK*q?h!,])3MTwco ~ -ߩ†&3֗V|h9а|}i=,WL!f2a_&x0HP"wz$ $ K 0ȄLlȄA&Sſ{&l:P 2a d l 2a i 2aV  >&!ZȄ1MA&ȄɄOLd¾k&ϑJ {e02a k60Ȅ40+ L`C LX kd˜ F dd1l R+HT\!ƲY>;&q}֠zȞ:WcCL\5/`a{ls\K>ב{=4$|5ocꤿ:M^aNx|oZK}Ǘ5N/|#+xouKձ}cQv|ulQv:}ulQPPGߧ?J#K#5ȯf/XTӧӻZ/IIf1b߀{eO+gձ! ~ +!um rɆWw7o*C)]Ndm{ځZӺIPgCy<1l䷽pr2y#YȍwдηF@KO6Hh i "yfa >ϷhgJ"iJ* ηGf''!q[@{f+O՚L|ӨaaCNZH+Q}> rU&]|6i>nDlJϦHM 5>d"}6%DlL` u=1$Pd?n.7UB ^},vc慨n-u"s[vA$XmYҭb==AXmzn{h&I#}?k}l%GL]nϮ>][+C}b{GPjYuy2A3ȼCzwX M?VKV" .;%dž*m%NXQZj]QJ"ram6(Gz_M6)6]7혤1p"Rr #cKUII?VKWd_>a+{K\"+ cw)S^֗%7R!ې'GvN/_f¯;3@oڒ^ ?\hxȇ*;.\/"&# e:Bb[itVCcTgLmwul O|:OmcQ:^V;'zڰ'2l3zZ^llllxdӝl&1 x    d3/ ol:m'ѱ5^{ w<Jlo4[#gxuB~qby%Ot]66P$%6L^nc w\hDV&vl8_nե+,H*˻*һ"OX'"OYާ"Xg"YB٦݌gӝP' eI}P' e?IPS?X|BOa"&)BOa"&)BOa"&)BOa"T&BOe*T&bxٷBOe*T&BOe*T&BOe*T&BOc&4&iBOc&4&ibs~줟PӘ ?PӘ ?PӘ ?Pә ?Pә ?اBOg.t&BOg.t&Bo俉P0o"&L &Bo "ː~<%|7w=f2149ě7dqCZG|(zJ2pA:9[9D^]cJn1ȝV(Nyp޿pɦ0sGN&dsPm.>,ӏ'w'XϤ_./ϿT::[=>}L.hƣՑt"hQ}xm7xFcEiAX#آLW\fBs#Fq>,yd ClwiH+=iOQ%=Y#i}/ͭy~[vYI_~I86gݏoP!ϊkښ_H V{yKދ`|A˨E{9o<˱8&g#.ޭ6-!y?kkg<EiiJo[ĒBmi;reszHWEfxx l+i9MSBv0/kh]=oN#VE\_dPM 4oHʱ p_chٜ/aj(:5[V}WŢAN.Y"_,*!p'seq-=ۺZ^]X^]ŹBCd~:-10zy ^rDvaCrvpqYV kc?]ނ+`I8Ub){eS5Z:wtO?WAVV{ƛF2O92=P sZfR4y>VvcE$ "`tVd(v%cTb"(P^-chd'_׮X=2 Ǘ[Ěp6|e iB5sn_!L |-0,m22S( f~M3;LP$jF ";,yL/}Eڏ 0snd-wGdk :htn߿o/p W'cb~RBoa16l-~s0aL% &9!(1l%zMD?Ua , X72&Tc `Dܩ%̾^]R58!-x5V ;B~3f i#O_`,;@oVrzB{KoڥuD= :7BgItf px0Af:ȓpάšuaɁD8x#It9 @Q54top9 @qt4Gɏ0a1>\c|80\ţ#ReJV[^̺k?ڶ&hOtw)SZߴY뙵#k ud8bINk~(Z?V'9=J +؋܆%Pj{堭h[$xiGrوzypy~ }O ɴ*=|7dҪPᏇM2T"^QZ~ƋH S4F";2Ev%J=ە,e+YlW(ծdQ]ɢTEi=;:bDOˢϏ 2-V淗w ;2=xkI<~3i^y*%kRyjEkXyg15pNgqJgqZg))qև:|E5Q/Y5Q)Y5Q, qP\ ^\vBu{@pz$)U R{A^OP{ P{>h t),uowͺ}!~/o8a|-4/Gk¥ PHnuI8"Gp.F%::<z} 8Dym1㳎{Yk{0oނ\|X a n0NK)^^/#- WݯX=EFK'QÆ RŻT~*8yEE'JJ&''"_gH2c;آg7&Gɢ(\?Q-Y *]J>'Ju%:nxe]7Ô,kKr^s+ +t@#p#mDJc'w%؛$n'eTV9^W_^ANٮT=vC_[e_*3m6]m';$X ٮnaDGr'_cb@a2O!c4cQ7ƤX>JaGioxd#5k?n&u)58LlUͿ,VݲXx0B[+~g7ue-xue("#怜=6Y7Tf䍬N~*=9<4xpHlԔ)OMW{:j"0!fh#'V4hsb:J9hFu7'\߀LG+L7RHQt>t!tTsYKhMhFn8 X|kF9$躏 C:hA%} &躏!C:hF4MP'i2M0 S4AI Z:d`HM4 JуLtd`Mt \A7 d`MtM|A7!&hY2>d`>hqA 6I4oQh:@s-<BfFz A-? 4aoucFZ(DUJhY{t |˙k=H[=_6VB +aH²,,+eԟ3u= #:^ z &% .O27 ĥtK&S.jj jH @uzDa$) %_Sտ|j:T~iK@4AP"Y@&uK{EfɧsRx'dJr~r)~Փ"R ګN֤j {47,qo&n켠;+ taAޏ9xRYrMp~ yJ.F< v}eJgXn^dSKϐlr+lFYbewϼgѓep?,WaLk,&cHY܅؞o<s[9y?>ƽǭ`Ĉ*)>-X[߭X,"{Pal;0{P2 BVYr*'M<άsYzɾAsEfel=4~/G>ea(_eQүȜNM09?~M3;LZT1r[W` [կ ٮ(63by }2fZۍ[߷ވt=?p>]AQ^Q3M=MuE6}/U6de7q>vqq; (P&0 p|\r]0DhZ,,q W.! ,NեfXzpPP!78~ĬsxfnEy3dC}RwoMhf`6gwgO e:u|F262ޙFdۋR{LwWoQp&rS&TtP{C^#2XnJB,D,".<|#%X=mPfz *wW=L~ԍS2d/(? lȮμ xmm-H4akBK9~mÎGl:FY+\r|LjށC3 f͕37am^!(hA(Y'^6!.:bҰFRln=dÙe̬on'F.I)WxʜY;O\wuRX3x˷ɿon.*CҕϯMRD(589p.XZ"^M#I<% VGջRhVǃ};+rvIG16'ux@iPR~MPɒpW56vtmXY"Gpf@) e:f,O6M ߏV#sMbBqLǍ86a#AcPtHG騑ayrQ頑}hJ?;BGSt4EJ{ӬhϓTG̏;9ӉHt?(~:yV7Z 'ɛ4dclsX[PlQU2JVzyY9u[s:NcUgKґc ZϬYU#(aKrJ\>]_Oia+E7v {{q]$L._.^:B>)nv Aλ/5#¢\n$)ӒE"fL~>Vv9/,pVxHvC̤Bc ,2l`xK.'f< Iާ~9Ɂ8늝KguᩌLެۦL޲MUJ2y6eBVm䅠ڔ ))"jS&7ӪDܐLBqC& UxxT,CJ*+UkH0Ec*c-#YlhWh=ޮdQس]ɢXfEv%\Jڕ,JH+Yfjٓ{?/&L,0)ӲhŞa~{xWoLة/#ӎ+ۚǿ!47y%kRy*%kVyEJqSC gqzgqJgqbџg}WT5Q)Y5Q+ZŢ? Б@EIm^rU۝ _ nQu$jAj/~ bs j|7j͟|3՞.ŀYo޹8h7 N- ɇ T?L_;p5ZDk佤|=l UKUg"n[YPt lrr"2eց(3-z~vor4q'sDYd1\wQ(0*Օ|AZَJuݸKSv\oG%_ю.nҏ#Kz/ l7̮)p*3ߕs`o=QY+z\uKDq./yw7x0B[u6q7e%Z:(Iv7T3ϏPgk'?tBc%cr=囑yp!9pIn"u9pCQS!!AMУP5t#&>jF dD} 'fb 38Oa9pfDP 7m`JkJ XH/z `G/z hFfz pŐGt B7 CzJhLϨ?f4gᔆ MiJO ?5gZ Y,gد d5 F51A6f`]A؃AB 60z;l_@ G ~#~jHҿ!3oiAz~?Eh 4 4f?c/ 9cݧ(%w\1uX[$׹Hm&ts:Ws-Sӹb+ֹuXuXuX\\+++й@\\@\׹+й:Ws:Wj8+й+й+й6u@ >r`\\>Q6h9N!}BFP!i?rtЙ +;\\:WP$׹k_X; (af+ \. X\U{Ź\\\\A빂 :Wsӹ+йt+й+)s:Ws u@ tp:Ws:Ws:Wsm\|\:Yh0,} Q\_B\' t@' t@' ~dH/!RBLKt@' J:Y:YP[}W?n߬_~ܾJӥNd1tX'u ]'uX'AdNd1Hy,b,5NdNdNdq:Y:Y:YdNdq}U&jOBsŀӹb+ֹbt+ֹb+)s:Ws uXup:Ws:Ws:Wsm\+sl:͚$ XA& sjf#Xaa]`$(YuYH Ri$Jj醱 P8Euyڦ!K^RBM TT%Q%hIXPKY7 _qƮFAA^cj|]0Š dԂ@hT^}~l k$.[ o޹" /i7Z.BFIKEAQ@׺% Ĥu+hvs G!y?kkzrP{6;E,)6@vm2a}xa4JCMG2cg\ G=Q1汃?<{̙?idf%@O>kh9@X$z˪tSCndSKϘS4擵6+ =K6F^Ø=dl|]X9Cah=~co*[U:UV}{|[1XEaF˅<9N6x/` -ñ/ X=DS/Y9 I ԣ ס_!7?4~/G>fa,_fQZȜNM09A~M3;LZT1r[`Ш[bZVvF1ܹ[1snd-wG ߋ\Ϗ%uOWvbai~MdFj]QM˭baU(+ yMבBL@w,P0 a#`4rrU8>. C. h 3@-W׸TM%:ᛅݩ ;B~ 3dFf#ϑFa\c|80\ţ҅ekܕn5s?q:[2V7mzfڬBE9XSBhp#y6 <'g=BԁCeK<-mEwA 8F,ףnO];Hnx=E|pJ2-)ΈYݼЌ"9񽬥m dE+ +z訔JbџH "]L$baN/Ĩ:AR d?AOP{`P{ P{>pjObY7q⧯ؑ].1َOO TEњp,&/uI8"Gp.F%::<zvɳu[>qr+]cg-&a ߼y}9ݷAaR^GZx[k'_{^hO w*b;UWqw8N!aMNND&:evEnM&ğr.(, . %Fo7H <^qaʎm㈼55%MqI9]y: ѶX"1Ne滒MR2*|]/rQdv:\5v:vc7:ZU;fv­m@<$Zvv ;%z&ͣ'_cb@a2O!c4cQ7ƤX>Jaa͚hoxd#5Gk?u)58LlUͿ,VQ`/*ڒu6X(M]BDK;^GrY@&7Tf뻵:S)F桳a1< KpbAo >OGc|46D=h8ci91=?e|?4e>c~>Mvͺ{rLW GhoP6hyFF!v7hw`kt7iw3 ݌iAxAr7AfByPʃ̈́ whxnh 0wð0Wn&L] twӈUH7f&@F6Zp-vP!=VA.7fs<-4E5$g~DNCaRDN+?̐VCꝂPʏ@@ZilrVƠ]R@N 6#n2LRi姙5d WIC^ћ4ol;GGhHo|^Cz渙@,A^!=A!{G}F/m!足$N3s%!(|EQ`Qv5mf74VDhQvj*Pܐ&6F9e!(lؐ٢ӎ@':et3_7" WytrК;2tcI A17^\^4R1$ 4_PKYWx|=Β`q!٧<<|dԂ{ cKyw^vu?Gоl\l]'3f"G+."_\|Æ`]~9'g_;!_o^B9%`>ü%U]2",r<~/7mBk+oj>" /j7B5H "oIZT^|wԳneG(ـ|Ip5 +\KAimKoǻkϸ6= gf4uwȐ-Mҿ~umpdzWaZ㓱*8ǣaY"+,6X4iFOy?kkzU{C%iJo[ĒBmdg&SVJ wN銻H3M7. 5Ɍ!q0e2 £O0%+G%=9 ktZTz6“z(i\DQc^j_YLklG41,ݸjV#K]zՎ.泃@<{-~QrQgrπs$#jє yW<+^НB\_dePM }4HMOCBw q%gKU@r9H l*oUSYM=2$G6Cg6lcoȻ޳Zfefrze1e&G6.0?ʱ7de=8nET>YnŤbaY߳(3mg_9dJ[ca<##V$˩`62-} <^DW_!/LcˑϺY"pYT22S( g_Ӭ1L<[T1r[1`([b8ZXvF1ܽ[1snd-wHNc ]ӕXXx}5a$ٕZWkarAXa0 Hv^v?u SnP8 LrB@`kF@ Gp|\rm3I#0$@ cBDž>Z,,q8 _.!-_ܜTf_z8Ψ 9Lj|3;+"J6A,@tѰIά4"?ݞ^TҔIR(s` e6vX-xpuZD2d#$_ˁ|QB߳I~z-z s4Zגj %zIHZWj%zPu&Z=%jch$^c5R3E1RӈjMԸSiEx,S5zA@GzA]@QzU 쇦~f6~BF/ 5ф{UzAƯPW3M}EF{jm%P?Vӿ`|~^`f~W QWP?Ud/7zj {jZrF=5K8v(H~{7zjbW6&N_٘z}n_2rp0RWCpVB}X^':jWd/0W4O43{U{Ei+Ja5`Fഭ::Ѱ?{Eaߏ{p_^PH18fCmMc)߫Y׎^ͺv N*PWPhM5p ަ^W'`|H/W3M^v OCW+jMN2 WWPo_SW+_Sp~N3W֚T{T)޽ɂO:M}pp A\ehU8J1,Um*Z**cC9v \Es%HCP.Y' UaX\E \EM \E~4W|6WUX6NEt>>>*b8-tUR x "H> 骚t5%!TQ|PWU|Rw)O5>;P5*_ap|Z*S )hTO*UUSUug6PQ~lWըw1ݡQ >*D>;R4*wZ7wǪ,~REUoTةz~ ^U=3NC5Dт|WU|WU|WŒ$ࣼσNy~a^U)i^eAy^u~^u4yUiYf @;; U4esQc&T"h*B&Lgz=?ӫM+^eUN>WGz]cO*SD1yeMyޡ"?>ϫج UWPU, ?ϫz`~Wє>ϫf" >kcPϯ-|P)R |U<*jU<ܯH1x_b` 4[Li^EWӼ&qi^E;Mi^E[|Li^EJi^ELi^eU`R |S*N@ >˫L1p_b;U)֯H1Qމ" >ʫj?wMQ^EMQ^eal'no/'W[T7#~Z#G g޶&-Og{ _2d^#L r,7ux\BlmWv! KɨZ[Y=m0KpU{L6.luC 7EKHI@YlN߉vL"͎MG'3;*5lώث3Qӕ%9%.nﮯ\qŹ(sFՏBk yN`{'pZ wcmY._.^ ѬXv Ϝn C^μZs]2-)ޡgQP#v%{"{f!rE[h@ hd1LĮ*0l`x?~ٟu ʌ`݄M$bR`sDYd1\wQ(0*Օ|AZَJuݸKSv\oG ߋF;w?/=;g+=o0B?7"K4ƞ{©|WrρIJpRFeup%Z." NٮTǎ#{FVKʾTaglXNwR $X ٮna/l^,~ .&_1{OqB-c&O2Y6sxmi֥4c.Ky183E+FhKzt`v#b7MeDK;^GEhbJZD|*c3\ݭ`xf۽J&145y޲L=HS'o34Нؽج&O&!y?( Ft& (~pQ5qH>nQiGYp)p&QʏGL78zL'5)#HQB:=]y < Y7Y 7ȧoCHQ7 ȸc7'3i߇t~Y5q]~l('n%?zO1dFahs vC 0 `L4F-MG&ir:LOjI7Gm"'2O>Z&=95\f#˃9:> 99:e:: Uy<]Q1Gmɇ#|ȸck~T#]: #0#0:#0 uFG`4P0081C00:C0:2LgHV%>G gMh-K#phfpM8fF(Oja4`)'#|kzo++F CWt+zϢs&ho0pG/wu-at/Eۉ~&YsFw:P^GtKGtFfҙYH=@*0>8ĞiHλ's'i'_=!" y|S^tb[8w$yAAޗȆ7E";V[;\؝Edgvu\oC>2|WE9?̭o7=NsT~R(dQFMhmQ` WgPda[TOX* "܊5 0i] &[@3Gl@у5 +\KA:l=+@ D\]=ݞ_~]9e=0㬻Elo{l;h; v7 VTaYr;? V`-(f$0G݉b{W~PٙɔR.C.?,wCMG2cg\# OꡤIrIEAFz[f@fZg;aUW-|x?%qv ϫBP{Ιfi+f֯Pd}ލHpSBw0/kh]=o*Jh ~#.ϯgxGRI &rL@` PВ3*P\ E7߮Z*L7Mlj)M,x،26[,{Vp!76G^'Ø@aɑ, +=x( r,~6}~}{}Y[UOV}#|[1XEaF6@1^l3G0|P0E&TyL5WTyBx񇬣;ܢ٥dΟxqRܚ0mkch1iXf]M67Lef B7co#+<{/if]"s m۫ʸjtGGeLRE(549pɮVB"\$]i̺R&|vLv#n$kz2Qn'GхZFr%Kِ5;txXo"Gp6fĘTShNn>`0Kl6bԚ04x"N=p$ ̝AHE#ydǩ5y Na脾9er^cd0əs%O>>ލdٚy$}ƛyNdNVR4߬_nM,./̦/S &}F0q/u2!D.5F3/g/OEttGDb=ͮ_NóAq:s8:GGɏ0a1>\c|80\ţ#R%јJV[V6Jfޫ:W <_c+QIfbO>rdT} 6ӾJyb&T}dغJbtG4*ƴf]'KWTtƏ f)KsVB"Vڬ0VU#(gKrJ\>]_WOܺbczB޳> z%+$G@h=p${-mEv8F,ףί)7cA?s1|y+Jp+9U'Ӓ,UҒ͘l x_gKu2ܢ(3J:(AY*$l^3˹HYW4Iog!ɛu۔ɋ)iS&oئL:M\2y+6ebm[nU{"nU eHPErWcW~wIXhVEwe$ Jە,+YjW(dܮdQd]ɢpEqv%¹-{wtbńEf[ؓ=o/͕!BxpO;xpok*Zp0L橗aJ橔aZ))aYL )ŷY%kRY*%kVYEJa_Q tK@Gd tTJ@Gh t$@Giab"'Y%N媶;%߳mNrT-HYOP{Al^?A>3Ԟ?C3Ԟӥ`ֽ9`:;w8vdK̺yӬz!yyQ{&\:YgIld#zhT1íc97GM :hC 3>8h7 N-դɇ T?L_;p5ZDk佤|=l UKUg"n[YPt lrr"2eց(3-z~vor4q2sDYd1\wQ(0*Օ|AZَJuݸKSv\oG_ю.yÏ#Kz_ l7̮)p*3ߕs`o=QY+z\uKDq./Թw7x0B[u6q7e%Z:l}L 1 {/&rFl_mvɞWoϨ?945R>x؈wHM2#O?hF?jo#|`t&z.S14!4e@ʀj?h6 Ad°?j֌@t+pWL?.ݷk2uH٧?O>GwɧGK?O:@wOjke cf G}f֩pTEM7t1LFDwFFN5$`ZM4B3|9XFu!R?NM'q9}Їf WٌnQ{ 1u9e RfQm(ӍQu5U#2>Jq3t1n.@8]4$NO ئ!9p4jFP 7J bF| hIHͨ=b#!ةg@0!=c1lpJCz&4ş3Akł3 _r@A\hJ 5_}_Ԍ^/X)V*|Eѵ_{t޿/_{4on'T%,mkB=2- fRZѬ2aJyldz9Ltѐ<f5x6#lHN7lg3rdՐn8Ϧ@{<Eu-möҵmeaD@E8-驡ٔ<- x6ų1=CjHjZQ x6- "- -`]QJr: jeNo\&lbUINCΫO_fǎS/iח_Ү;M(}IFGzIPH/i7CV%F6csҗ󕾤 cs~IcA@G:X_ 间n؋'*Y$ ]/xh"pX%lhד"R kNR-sv{yT-T7q⧯ؑyAAޗAɾS$hEÅݹ[Dk{o gҰۯw7WwIf&|y1秦v~yʊCLFN~6Z(dQFMhmQ`VgPdKQbR$RQFﵮI1gݜ?_*%guaX] ?pe^-ysuqxw{~fv!WÌ揳Iׯﱽ< xv* CKt|2VQgxt="+ZcWXl2k5D4\OkOH)~^OZ)mK iL)2@9=+"3<<;sg38PӑOnS2DYc'CcL VJzs /b%鴨n!/4 _. 1H/Zs߬H5~f5z#_[en\~5n> G:drkh9@X$z˪t<ɦ1S4擵6+ =.\"52=ƄLdl|]X9Cah=~cwo*WUTV}w|[1XEaFE<f,A١a8^eh(T8O:_*\֠e+:ԃ\sU}:I졙{9Y>2 Z6 ւ_FtjYku. C. c }F @,͢TUjg?w 1Qϔ♝DyVbYO$bp+w@.,mk2CKpU{"7s-^[Zނl `Jl&ھ CxmmĮb#Qh e7ek[v`;0+lbК04xv4 *aV{b$ypGI6 J!,y$0a\3eM!j C"ݱg:b#Ҍ/bk#RLtPꐡ~ ?c:f1d>c3) 똡;3 }O ɴ*=|7dҪPᏇM2T"^QZ~ƋH S4F";2Ev%J=ە,e+YlW(ծdQ]ɢTEi=;:bDOˢϏ 2-V淗wyU!~_F<W<5-B8io& K0Od TJ0Oh 0O,I,5R)Y,5R+Z,Ţ?%0@:%kR:*%kV:E#40w1,ǫۊN媶;p[p jD=I j/} '=~g=4T{̺7^Pgfy?}ǎrY7v0~Zu]/$h"/*}քKgYgIld#zhT1íc97gG~@Xgu'Q@n]k^$L;ᛷNڎv _pq^Jjziu&o寝T@~y-5^R>6L*ޥWO\YwK-V~,D(:ɇUWr699|?@ =? 794ʹ[.T(|NOJu -lG{%ʺn\%);E^]rgGrɝ^ٞo]m%Rc=Tf+ $%q{8)W:-h8v]^؋ ?mqwC #7MLzrj FGM}(? P!nlB,On<(O4)ON2\%d1]鶔3zfA5-BZ!e͍J+42/%qG"|lWcԱ]}O("_7aMUe>t%1$ć$w7|uaِ$ `AF?2wIY bM;4T'> ( HʷH-@ӷH?2@[yw5& PQS]1dy֢&57L"P#',gwMrͽ! (f1'FZ ȶ;%-ȼ>H6yr}#'' 5 0]5 7o% hN} dDnAP~.`=rFAhT~6dǍ@H<YiS"F`KN@Np``6וmj/~PH  ',XMOnAF]zfMz&ғgOAPKzQ,=~(IOn`v)>Jb EMdmr!3G#qsB)4ף&w8%;"kH.+2pg 99 1-"xd"|dyˆpԥ*$1y$'1 @jM)9!DQ8~ې#EN|%  WdfSLGZ~hLGIn<-@ł4H^4dN)( W"&D{r50 + eO Xط2JWӢ͍ =X\J{W2n/Jn1^7I=AkB!|؃l  xImD('^@.!礌d :Bq7} { ,@Qk݌Sx\5R;wWQ-Sm ֱ!LJb}8h%)Qo\r$JSRU UDt!C*͊Y6+-%@/imrMm^+6juzI示$#2W B8oLː#neG^KRG PbAPҀ" QNg<. VW-R @g{Ʃ߲iCQwS< dNJJSMHAM!p My[ '$$Ieg!egDǁ^|%'E5y%w͓K(:P]"ޛH!#NX?^yr "CnߴؑT&9q_)!+XS'zrr'tAP:YF,(Ajt7˭== Iϭ>=E{d{զZSiXt>a5*<"zo&x5jKg('ʝ-,1%{d]WnVdy:}[Wc1Jۿƫ݋b? NV~17oD&Yoxvnwd5j˛Ϸwק1419a.D{̴_N Y8؛U<*.?N//wwRKwr_|goziy'*v^'cį1bH%=֊ vПzTIWAmt|::M/9{X4ցySy}yvwp{szE=OC 3xtȐMU:>]|۸΃BM}avc;N'' ̚3$f`)ЋQ ݥ3|Z -V`Kr<76]03y}c.L38Pb-nS2DYЊ'CkQIOr3]pG:)*fAKz,i u8c<0(uB d&4/_f^?}a^ ֏tz@Ɲ;L7$YlKaof,ur.嵻d7?/%_0~ufFp3U ˇkTnǀLbj#)G*F3R_28xOϝo~q9G^^|z.L7\K#C؅`pP{Sq2|9r=$ݶE69:Uűb]vquBD++zBIk]x:Yfo@cPCs~FSosci0,D[#R*Ko`>nN}ܗ+Prw*v9J\9u\U7ׁa* G! 7KWErxi4քLUcmV)4zv{Np (Oޞ?Rܥ^wL]ߚG<skowjZj +m0Unifr6]@-&_jll3-4s׉FR2GlfnNJuH}0Zy:چkLR#JU\U40IW&R*$R>x-%N-g2;R ҹZa䱲%m#oZՃ`8o}(ja22T-`?`M6CxV8+1SH'H pg4QP8#kH9*!2YWl6VKq֞zl{?Cmcýv x+QwV Jz}IZҠ$BzjTa5/|~ PM")QVJU6)rYQ(À҉QhGQ]ߞ:}yw}б |3ۡgr9ݒ19ŀa~Yjk V _%k] ROsO096S2jz`lFp <[ 1X՜5`j9gWw_O!e "T([2@A)E)2vvr%?X)+]MƤ MiEࡢL kڪ3QWꇩ:}VوqR(hڪ3ڪ3Aڪ3>3Ϊ3+-:kڢΈhHcoQ%m o]B8% PBh gՀڋ B)vm a%!to#mp=k%6FEk}^PFef?{D1C ej46hy ACslX{E. JkG4ڠa[7zϤFCCc1r \|qE^(p]R~'=D`$cvNבz3vh'Ys::kI2מb-\z2$>nU3 @*DTq\N:*[= {{py{462 }EK2,9.y9!)o ,6lj _O.~|Û)/a B@nirb4rrz^`@.w W $5r=Ye` $(8҈z #*2/lIfAf9^JChCBf0?80PC˃],A7 T1S.3Ȳ{Sz_<TGGP<UQySwJu7%-QՅ&J&9"0%/r?Rck#,6sJ]||q_ib82=2^y8ES  tPѤr=̽QI*ɔV@U96aTT972k9kP+ &]- d!܈V9ˉD!ґ AɅJoX~C|oCעqtKXjld;HUqNHN"G;@A=;:p=n~)k qf"ʣ6d*9~ ge@^: n=IIp哹JzLaPyd,}wANd&1L-10f= laW~3E T~ɉ8&. VUS22YpIM}2Y&epu2YI,dܤLmR& I̴~B1 } _L7*k6 $Qv}n&IڢFh'yZF2o?ݬd^Yɼy*J 5+QkV2/p֬d^)aÞ y1n1_âΏq }`OvqspV oˈzŃGxkI2L)%7OIw;+Ma4FRV_Ǔݻ*c7Z{OO~_M]>\v?֭X =T,MUڊQ씨g>~Mҥwa]]uۇn:fs'Xr2>§]Oe_G?蠦so>IwN;~ZEA'N5a >tVdg˗sonIgwHJg1"BCMIi( z v:zK[o$5jxKmZ;j|^OJ>4+#F;HLKBj{d[?LCI|~`[$=>DZIoYяsL7R}9e蟏}{د;Jeÿ?o{$ `D/?-gFǞƹߒ9=d iR\`>`!A҉4 @"OC0aِ~R@fBi& Ɛ<$2jyO v΀ვRT+kCe3s'a5Pz@PH~IOF' DLU>P5+pK=bV?=i?|SmP<P҅k2 A3Kx\Z5$ 숤W}%!s钢&ujۚh=Pzѓו_^'F.|# .z>r @s\U.&(GMNl@iE4fp 99bOokfŅD JX0,Ɔ)HSo#ނx4և2ˏtUr 8rhC:kQS%ARc^fQ6! LAbWqUg-EH]m6 (ⱸA yWǏJ470د# H@RvJnWxE>Di΃LI{j\C\pE~n^۲$hoPI.U1 :߽_|92,hq쓡IJVJz3ߝ;IQY=X$p>\aJh:\W̴$3^Y+LM;|_ȧ@GqK1T[F3Psۙ15Ñ~#5=MH_28BsOϝo~V'!\ ru\YKG*("]:|67t ']PTeoX#׃{Ь22 7Z?u"7c) 7k90 U @'؅C_Xe<=?a4fI/=7 KяH=4~w 707Lx>q$)P=s|b("?W!/-bz'],M+,+X>4Jc4"h cǖ{Ca+4zCGm&_uW륟lލ wS}rf3ojYWݻcF]Ǵp].wE4J+2)t^a7E1:wq~vo,}$`ԀzuI @P8>/KSY1jq@Hu-?,.S t|mm[M0L8MA㉞*z;i:')ЁTfCԉ͎4Hcka `2mxet귅e3R]ޜޜgrLogSzAS`K*9xG^n0P$NO}wd0_(JJ,x,".,x//K.˱z|]&yUn.u}BAy*r>9u\<7{ \ZB:onF3lM([˔ak)[;fliB#|/\T>e&ST&wiwe]pWC?ϩڛ %ǝ6 f* aDA9u.j4}65̙Q vG) O^#63gU&顷L}0ZyZx$BϡT%];Ls tm2J, @feE;նLlHEjRB8!:j Nj7A2 ]R}j0{l@(q4|Z7 HS>0L'm`o҉w[ĻXt]V:U؋Is̼N]L;k0ŷn6J|D=o22K^r HiT&MDvٛ'n⤻曆0M#St)]@'?Ư& E .V,*]?g*m({MvJTu]3L&lDrm#0M~*: 7v}h9mqO9Uo\GS'Q2FU/tPù7{$N;{J?p'0:M3̹7w7ˤ84!BL165< ŸrY?e?F;^#sВă>1"юz<SjͮigbrRh [@#G~Lg wc?t`ē!F/CSFD MȨ# Gnq3N HCdQ} ?dSo_i6h g+FUu Gk 0Z @-h `|m>de䐳!$yKbDI9Ђf&cIzȐ)>!\OG=91]AIHl-'[#1_#%BGG -ԊACg-jRs. r00r2\Z"+3ڂj LW%[*"J[ XyPsq)!R lT6 r60rt}$?䄚t&#>ЃU2"w pB(?C؁9Bk\4ON*?6 rFzDNQ^Y)!#=`#'wBzN IâmV6z hFnz pEGd&}NP~ФMz&ғgOAPKzQ,=~(IOn`v)3ld#o.&6أdA"Buu ⡨V_*I-jRsP_3P_t&9i:w'KA[ZNᑒtPl;(Y@*JI].9%!{JM a~=r.9qh.9<(گINv(گIN%'j^@r% HӁ TyBM:v!% E #ǞI#گIN3X_T$';#(AVdǁNIwJ, },Y@ȁda|P1%8` &,دMOnA~]zfפ kӓ kSA-MzZE`d-R(Y@dE>(Y@i?(Y@MdA$ d@:\fWNO,);[yjN}=VMrJfl|^zmSB:|́@+HJ,4*ANs:t9lHtNժRǁ)o}Z/"IJB&,O/[g8Q5T^3MP6c /m|eS IXQlV衶PKZM=$BZie0fX|\bS~PLT4ui\sG7NwXNW.4hyp 1#,70ȭHp+v2 ZKZKATɕXrr"\Y^%jE,U+bQ#CMRypjE,ČS+bQ$݅ZyqlЪɕXDŽ锊Xrr"\ moX2ma"zȩ-bi-b٧oXHm"N-bQSbWSEQlG-q)Fr+)>%_RAރiFsk"xCɘF`m/1Jm͋H(MC7ۙ*Tb:qF+6wjtx8wsAwp, 3 2ށsO'&nKCCزzVp/#$|w{`% ^1Yyzd^AY(u H:8?-4r+c o 6sڸڶƔ0q8sol .3Sjq.%I7E&["XY|mAm'""7 @0z!*k0]ʞJ?<ۭKwݭg/I}E*GefFLcgӷ9gk_x4>Pe"IV3;I"Y:SwgKo |13r@?Rp3q^]fN ]tӉh>v9,?Z&ڱ{9/+n4O`<ݤP_,aFSp{4 l\`q\I@ǁMaaK7xBx28Ԡ=I6)}$>jRX$}ܤt(15*_ (ERbJC* T!U7̐X4 Ѩ3hBg4 3?Sfw-u?Qg ٨3lBg6L3?SF%V?Qg lLQTlYBg5,Y?KF%V?Qg ݨnBg7lٍ?[F-v?Qg ݨnߨ _Q~/F__ɬF__}7Bo oШߠQ7Ao F@5?EZ-xl/Ν=ged&/H ɌB2!I0,=^[ bJL@Q,$ xwT<7Q2;݌3!vo+dۚm-Ǔi}v~pߓ?={EׇΗ<|8vu?o?݋$Y>??|>S{wqvHVK׍ȟ&g dṳO =HC=x:i'KoW/N1Zoy' ~O>FY; n:gr'?8I/߲ϏaI嫥7O*_Do2y3d_d#zjw@oiJsVh|nV1†bb-;YlF~ukךdWi>+$4 3N֧zilmms-1.1.3/data/projects/CoolSongs/Popsip-Electric Dancer.mmpz000066400000000000000000000624741247673406200242500ustar00rootroot00000000000000Exkw㶒(}~w;3kߏYOv2>,-Zl%R!)?r@DEzn?$T(BP|{$Ծr_?_?^}io6'Nj8=qUo^?_\\ӏA,S/[/hw;,t6&4'q4<(;[6;hŏ^<`<ΈcŏgwbũGzl4kZK~4PM2"FmUۈռTSv>a*[drKbM>k9_4[Mz[K/{q=^-g".?]}89ܠ~ɗӛ/כD$^Lm҈Hv_t<-xfi3G`VMxbu]^}rusuyr^3iwBя /"<_?f/3=U5^D֓߀<0*xr1DaK\VێrE=0cΩfѭ7MxNaJݢ7"G>n2]TJvqS\KdL{Je X,?6TX+U^C`<~Ŧ:E 0dIEh:M|ZuT5]D8@B§lw ? a]^|`X`W\n]9Z$-1 &~x}cg4|5j{Dsu Gg7V\lN~ٖu[MR\"`n8{-1ܾO>~]~yS./?%/usͺֲCǰXĔ GgnP:`#gxxbC?IFwq\dϧMMPΣߨ=c0=0ZDAͩB(eBBPmq(k8DŌ/i 3KS G fbǧR>& sACkځ/Z[U4vk>_b>Mҷ4Tn5lGSs 0-ͦ?F3ڀӫ|1 e{V0w&ۊSH$R@]sqnק/&Gu5],R^a\)SC]'@pVF0޽'o XSPrCP~@u-~i#l"؅b~9@utmpH>Sc] d\c6¸>Ś[ktD8B-aW1l;#gWgw},D/ UjwĤ_b~1idA J3¢خ2f)*խ_v"8;).9ˌ'׫l|I,$ $ GIWK^BA(Yi9C-SwUCp{iژFPKh&VVyoMZHT;Y)E8"λ`j.k܅e@H ,uq,G_,YF KDo,1ru&#Z1:c&Ge8&yݭ cG%m #!SZђ&V]qg{Gɽ'TcI%QE s$ۉ!i-hni1ɸy?I%:0K: EYܖhc-FjAhjl:4a<ƧHHSl+JUAm!N\\]}h<'Zn_+KZe \Fhl E=<N͵J/YRˑA(K(Ok}*RERq *7$Q)qǻCV[WÆɟ w6UXŨS.eugrj-pf/}뙶[϶m_yNͫt߳tٳtٳt۵ttUIᆟU'gggggggkgwgGPgggkwx%,&r/eCS)݉.+ _"%fdbֆf);={Gw0zF_0z[&T[0\{qWh8sx2\/o?vx2C`N\?&= 7> kߍx2}Ң}Peeս؋]ဿɝUPİ~0';%gJqp+"i\b0eu+e Fsś{aLTj)(ڨ+u\aT}yGw7ϚaV Qt>=`Q4S&(?;ai2H-ƥE@M̛$ /x@QX+&=":4$)FL > fwz(KJeTV*+W Wpmowt>sj8Xg_ ̠v0fSJA<Sof *TfۛU|s׮N-Uz@THs=h{# מ:I5\dS2"JPHjZ`oL=Uچ^P0N1B'ONOFoU5;:x]a~m߲rfٗ>Wa/IQQo;|O5ML޿"h0=zȶ֧x齅?A5RjۓaPV4kEke5`\Y57XoUG`ӯ}S0plRJ3`o;q!ܞ ."D%c.4UlWgZXJǚ^֏('M:FKk7e0M%2z1Xt2u\&"dvVVVgvHu5ifH!iz)3RI3$͐4C I3$wC6|I;$퐴CI;tp;35$퐴CI;$퐴CCBCI;$퐴C9T H;$퐴CI;$iZ|H!ivHڡC[I;$퐴CI;tp;dSvH!iv֊+ OvHC#$E?Oj7P2.[Ս>fc/k<`Wdq!%ϸzz1ܝYy4 ?a%߈,l;Ά?I?z3hi]W3^Ui8 f+EȬk9fEyUVsxtM*Pv>afڦ]QeX.{FQx#cJ<WEf7<&oޓ/dƩxaﳷU9t℔ݠ~ɗӛ/%̹g{юHdsx˯A: R~k[64|5j{Dsu Gg7mV6_?lܺ&l)^ an8{-1ܾO>~]~yS./ʱ]N/>i[P:WѬk-l-jvhR;Ckcޮ/b͇+[瘣T溚ʭ暭`H}tJ[`710^ŲwFpz՛/fAlݪ.pܚ?ğy[qzc 0Z k~N7NPX^~d- b 'M!j:Z4\.e=}{O@}MǒW6#گKn)wLSUH?`.Ph#Ctc/^P%(lT]I.Z{etq'to1 Ӽ0wfK@9:c!zYo|J*1X`LZ1PzA96ҭ h-+9YʽJuݫN )Krz}uyryt2c v6é=:@2}) I- QP>J]2E'\=iu*h;jk7)Qش}L#ᘅQ\- ]XYFRβŒeP>/DDV8)Wj;sﮓ=a4]c!:y4Yμ]02+ߌm;su|vƫ-(zQr&GyI)%}eqsvbHZ<[h'`L2.Genɩ2*!#mQ1(EXKji2l4 ui-&Ra#劸RUB[䧓/Wgω֠[,Rf*i r`0O!'SFsEkhV4r$yʓZ TT<ʍ(ITJհx'ȝMDV@1TKFYYn=v2Gv;2-'ZA5o-fPl cz{HnZ4>e$LFv >ۤϺ=>BϺ> Ϻ> x^;} MT`k/j@{ӋMPCq/a۴zu[ƸPezc=EzB'.g,ߞ~{­;oA~{Ǝ3vhgMJzl_NGL{U7[d}_3mݷmv.W/&gggkwI? ?O:|:d:d:l:pz3N=9|9d9d9l9p4J YL^闛ˆ\2\S7\V<DJɮŬ Sw0z$6F8`:=^Ϳ;a4M `88bpd2^~x:psM&v4aBa?#XzO }7%M "\a3?|(d ~1L{&̃o|A>׾GdE/n]gW=ǫ{`/ ;¡aYaOwJ>|; KWD:&P 2GaGVF~) 7p%1RB-QQW3Lȹ^(]"bo5'uYì*yp}'9{hO8M2.Q~w-e[|Ko7I^ ρj3́WMzDbIuiH~S|AZPʐUWF.g4X TS)}&pލ߿A=2 aͦ\Jby0R?lyT6 ͞7q67+I:]/RZ8t)z:GI9̥=iu8k1;'Qp6RƆĠb:}rɦSm50K-C.Zik4嶺XUy׵aFiv-+W}~Z9~_}j@[7T_ĤIh?yRafGV?cX0X&!<e\/2Vߚoj7wHQ PzU@@)78 P)[,Pv j+Js{& 0UCs<0I晬",tL \D`و,Z &`,l!dYPmM@X8L΍jI$mAI"6ȥ,6H i 6Hڠl:FH!iFFHg:H!iFH!ik ~iFH!i:rFH!iFH!Ӵ䙐4BI#$4B/c,FH!iFFV 4BI#$P+#4Of6Yi- '$?%,"MHTTܑg\Q^d]XrJV+jǪ3.T?j+[iι PaEU7K+U5ɊC:f ,[ffIsiTaa~qPWS]jh1PoQJ5bvQ;ںaP:}CMj0PTAC/تcҔiX[ LXڧ\50Qk҉@eҙjbnҩjbҌf @mNV f NV fUNV :tXijr0 A]NV۷&,].&,]+.&,]:Y]LX֧ 5Tuʠ.Ӫ.&*[L`;ZҷkN+amN)WUQy9}WUCM_U 5`U Lê~ V[LŪ:&6CLǪ:&6C+Lɪ:&6e o05KÚ}YSIͰ&ӴJkLՒiºRsSJs„f*}[„6ӷ1XpΘUmLl&gL6&6u%\4sU >Sͤ:Ld?Z/lޛU]Td6j *2h5˻}ZMDf)kN-&1K]jULb֪k5 Vk𞭦abXεŖaM޷Z̹tLhy$`ڼ{޿ Tj.jZeXLLj»IVyW31,Sc x/3Xws5 r~fcb lLl{ZX:Ż `9_WsPʅwTfj.*4w5V.s. .+wus`2PЇc>wu4]86hqxWG# ?PW] ,h UyWG :X@FB\wu4⚼]h0ĵyWG!:qрFDC#4θvhO >K??2uq5>xE"3 s3dmM@a].ijmn\)@gPy~ht`Rx&Xh5`eAaASUSh(-Fp@(J5!8 USi $Ec9@J+ U Y*E@Aшx#LC KU`QtU8F(mG7@bE9xebE۰WtSݠM?-T0 ogGQ6Ew'dDu߆m4&Ʒ V)(\ oc iW4 ]'A\UoZWF]>,\^4 b^h| kCG`l664l69#kk,Fֵ-=/X4n`xqk @]:oabne oˍ o3}Q)U6Tm*`+, %m p, [?GܪE /*3- y6j le1 ɳH4*5jFIjEUrd0Թ#$uҩˌFV#ZԸn6GְTX6V7[4ƭa#B`Lmbg1nuMi1nPqa4Vl rg4Ë)toq, b2X[#ŋ0Ys /*7mFh[ۦhbqnϳ4Merm8MQ^Tn` Ef-L8u:@7ɛr@7u:@7Z.u:@7 oȵX7c!6Pk2 2X<~P3G5ev<LAx Ԫ,Є ,8G\v&HP^4=*I:(Uax0X6 *9:x2\fxT2 CN)xh&M7<3u$tx /*7l:: <zi`tEFҩi)`ؑHtU^Tn`و,`Qe0 K!d; oC榡Q@C$k4 rfS@C$Y(!lEM3^Tn`l汣A54j 4HBEMC`luh` 20 r'ѳ3`lmH54E7Y4H IUiրJPzJH0]&'PWZ=10 Eh`YD$&C l (ې%mHUu:24FbehڈHHJ5 Y4"i1 IնTX6UaxQei1uuhf /*7KNeRDc$*Dc$X6 h`Sk&#!6&:M4FBNy`xQ\@uhfRDc$ 1Ë ,I+,4FҫZh$b*ËgeS=fRBc$ p^4].HLrz#Xǵކ{ AN ,YFI2(Iv7dxQu3聟IVwiqXLB$@Ii]E͠^FJqGHrJAX= O&1.Ê -%PK.FIaK /:wg6#PX^ -*1J"1FC$ 9?h`-`xQ9@.= MNHVwtSFC$>! 2U^B 6:6"Xǡ~6"iFC$䊓Ml4DRE.8 /z FN ,H,c[ /*"ŋH ŋH¢rf ka=Eu6h\7cI26"i*Ë 2H9 th`:6".Ë lEC/#XKA$XË J$X7.E. Ŋ$7p`Tt:uIou:$7`xQ}% 79}I0ot;uInvIlnA$[*C^FtYұ4^dXJ&8JQP$6:f~U* e-;UI0l2fZ /*30l =s𫒤 u:$6dxQa3%)t r#UGX-4B| 9!)E#$:2)t h&E)yFHl0lrfPE#$kt :rKN&G#$Zk3dE#$>n>䖞6Nv thv^th`k.!XӥNFHlR]@#$j /z;l2 EC$ ZB$䖶0 0o:=s( u:]4JhCN ,wE$k:6Ë JYmt]mP6`਽XTp:j(pfJ(68`Tt`؅[<hGh1b -`WSqek:쎃KET 8P(hu]aр 0v4Ì&wf4fB*РCfT~`4Ì m1hub 6W 80,M <` i 3=`O\RoK07wй[F @`Vf4BAhP\|aFk▪]01Ш >44B5%/K l>"4,_ fv_0;`\`  VY}n5T8_,O _44C!(J1bY12@ 6:H=:!$պYq4 CJ"xL xR(Q 0KUu )pxϕ3꟨}.7@PE͗@Q2?_+r)\u st )ьWAQr:(fV ^Xq@BQj0.@r(lxD!SX 8`\`.^ǫ0Vu, bEQj0.A,gQ8`\`m  +ȏF!uT:Hxmfu@X1(*@QH-1 0.?, kRT*%%[0.@TxRQNFa`/g T`vQ ~TFaͽFa`ggFa0%7( 6U ¤a`g{QXb`0a`gOT` *0.?H c3QkL l hΗb0_ h` @楙x ٭ 1̲pUh` yN~p-00< .8 a (*<%Õ*%Fub%QafV<;EJ[s, ?[/SVpq0 ǞXc,_0B9W_njo„my)'PYw8@eM_CTou}c^:Pٿad!W\!r!W\̊!W\C.8*@C:6W]@C:*Vc!,LvI?w* ݆U53%fphn'8B3>)cIЬF R=>ER=}ɓ"E\,bku׎mO I_vzFdrfD 2{'@$,xv;'%[37} ^k}wR[z׳ڣ MފfjZQGڊ%o&[ Gtz U}BWaRRgݣi [E84Ø\S&EҸ5,5A( p0'|1.':Wso3ȸON>|~<9蜜 Z|Y.[|]0x׹LJq.v{r9vڟ|v՟?O]q{zvŹϏxWr>_ o,藿ٟg/_om}"|OX~6~h?z|[y{[F߇B2~Gm`/>YrOϟ?Lnl0g?>vf+vM7BSW7c|. BXًhsuĀK4LCrW=,xRףUcXY&AQd^ }ϲL{ z8Mq2$ͼy/p<&z+ |NYfbbCWFyL #4Pia  o$M42 >''-zه USc?ng]\G .pl|bXV?mr3Dkc%N΃Ib2W'4x'2_Y4գ+@qjyžaZG3bo5'.k@nafmXMl{ңT7TY#ҟ -s *#86r3Ӧd&%a+'u"#Cw+ ;@.A>{M8y_W{ۘPhmo`"'_>8U)boj`qp sᶏER0J6Z}b * 7H\0 Ĭ֊X 4_exhknСNKv-p80]z S5!:UGj5#ATa^VNX k:WrukJ|xr+Vc<{Zź˗[s|U,I+yYU()TT8hj,m(S2djQYjZ\i7nKe@B4VL>Hh'{'{'h ^{D .>H#O+[|eM߰2&*o 9:F_Ic[|7ARN+| w@aI$M4A{6Al 2_qeNdNdNs,:aGZi}@{WZi}GZV!eK#>H ;>\ ƽ.^\4mn8kcxqЛLԋ 'Htz(ɻx>dMiOkR6#CGY2(~ yj|<9$!i{7AHq4׏.YƟTEOzD]%=7`.7Eo:Z.F豢r궣\`(jhX=D'9,figeX#R{hQjcߣW Q5Sdϑ!,٢%JvqS\Kdlh3'ЈḦq*V*!0?bSvU8O!dIEh:M|ZuT5]D)DߊM3K#vKẽa]^|`X`kڄνq1 $k}"Ǣgl*܊5x>Bsu Gg7BV\=:lܺl)^ALF 7H'?w%/:ֹBd]ka+\tTcX,dwVHHZTy+;b˽ϣ0`c?桟$8Z.P9vzӦ&oԝU2|-F?y,H흘*dK?Ӗۊݽw ^?'(,^~!^)wiu{qŋk5u[-bz&n ͋?=Sc] d\cIu(4 F(KN-$bJofli7{Xc+̖ᜳvX2<#ݲ/ N )}9<мB:g1;zuT eItT, Q!UJ(l% P9-&mAQȰ\micZ  ,U~F9`./$EǞQKW`:'k܅e@H ,uqv1@,G KDo c'YMu]G"sﮓ=n=32.1nА :&,g.ic uG[YCW Wwǝqngڒ;G%XU y$ZG]l'.vavnp $tMX&i7Nu:0K: EYhcmFjA/(udi'COo0 5(W]B&?|<_nUf -6|cH d ̓@ꔡ];j,".h"I("**7$Q)qǻCJ[JÆɟ w6UXŨ6V.3ybdU':[$4dl2ٺv;©q*[gMs]l{SmOs=)?Pgc-vznmJtO 2ͫt1;ڏ&`@ r uws_'Vۚg;3pc#ߵYC/7jtwpb7VKJpb76mh],A\ 8bYÎl8sG]m=wsGF{cMGi ^Btڏg.3uv@Ӗ&K@P Q0cc@wɝnEPƴ}&A-ƖclQ wYPkvA;f#2cLzZgR>@㬃Z e:`n22Z xl S6BK Iuxl (Sbq(;y(q^^ FB^ϖ׳m/g a׳L^n?Fy=zx y=c׳c;*~M!dBWH i_MǏ/o~\YV,Xx͗_.N/oF?݌nN/ hvE#_z|4uЈA#N_z}4:oF Ш⇰ȷ`iԷ`jԷ`kԷ`lWcmpOn_uX ecC68UњpЌu-&j.H&kڠ$[A#K4V( ͗kT,,F~8?-b?I1ROEh2/.1Il@R4NBgַ^8y &}8 мf~2 (44(;dU6V8V2!YDq iyj2 ieWqJ!*ו:GD܂!$z [s# tHӼ\@%4)z[0Gc@dK,je8MpKP7-g>6inϵ>P.>j.@>^6N_BK^;=6aS}iv6a^Ö1.T}S"AZg,tߞ~{Ƃg,ܺߞ#gxm=cf{$/^NV{zĴɮO/?\uNF Eo=v}ٶm+ ybn{n!{n!{nanށ~n*)$,C,C,v-w.7*,C,C,v-wNORD~9lu*5;qeKf]Zڰڌ9|Gbs`F_c{}F_K߄p 늗>'o/!Co2I' Rӵқ~lG)AƒxO!R~@{pzd1M0Fq r b2ďIi0nzy^IUKo A_=Qh/lRM@ 8C'#?a/0a|9>''-zه UWv:}<^{ 눽xܹ$d|bXV?mr3Dkc%NR?N<Be/{iif~.{6ZKQxs{/ WɁJ %Eu=ô5ҕ?/.YsRw5 p&EÜ>AAES:ia,49T[џ -s **513o,EaզgĒ@Ӑ=27Hߵ,!(!Sl2+W Wp7,D deFS)uo *n_co6T΃y1gf˻' *@eg]&;٫O Ǐ^ $h5LPO^{?㯠\ ^>dt 0@z e\-ln8۵IU{0D@^flBْ[!pdoDْ%M{K&ZږL-hkLV:fWZP֑ZGjuuEZGju9q,:ԑZ=oW~i%gmmiJJ6QIZb3Nju֑ZZVyR&:R:q0uB|y^͢ a?L^V&e3fЁ)FЯ " 8IM^?q,?i!tI&&@A2 ݑ)O/i5'iIsʚS7)' m' a< RI, <\ϕv9 ¯".JW? vJ0o օZvjaՎ4S*1h:#xj>1C)ðǝO64g"4S)l.IT={[v/yF_ך'RFۑ}giZu]К9}D(RI{ .aX@N:lmHNS EKE|P̜Pjs5JPװ}P=`q5A7 o/d~XdΗjE:bzW>'O NKȣxH8Վnl:0u\yQݭ[TuM ȩ&T:W\N59ՄItrɩ&4ո`9TTz.ݵ}&\r=T{WSew$CF!1}(̏q0eT{oqMji Ø+7u7G^ J@&3e8ěE* CwLUxh=osIrk`dDڏo #લI-42 K~^4JC*hf,0ܪ}ss}berLKr%W){7G)4[k2ڋUh4Ww1};7 )eR M4Cp:!r =M MNcH{& *VC<4<0:U% _h06mL:ԷoeBj[N&n'F+nذ> I#>H#OV֧e2>H#>_me}Z&I#>H#OV֧e>H#>_me}\+! (j7$ב^D+,-z&$o$DP%{G 1NR\5hA75P u"3^UնFU}˰ZEЁaS+@dzavoitVj(["Ml^zǮ7xe_b]zȏ,YXU$a?*EA) ojALr`)hDm!SRn #ܚjUYТ%%=@p@>o.wϛ=/rO rO=nY^란+" C$xpgKv\nv|狭eb{7MzmitZڕGZi}GZVuGC:-oRGTQ6i;(R\:QGL{QXUXcJʪnVSo gLYNUBux~*#O5W\:Abu2,TN*-WgruJQn<@&U7S4Z /hsAW1bWѲ}}ٵZR.ˮ괍BusBu_Nk[NI){RHq@*1)UAxT=%d)V!dE=b́# 6[R9+$yLIv3I!/\{zϪCFu&}*Ej^C;s_sv<'QyUXgeU?Ѻ<LՖmƊgcdT71z""(/>oGf>&j sU-@m6{N$͢wh̃ԏG;/Н^ۏ,u?=N*chuzU ~ hU W *"#hb4nz](Z+.t_1ۅ(hz!U 1CqIW>?"vrH-b-y׶NGi{푶Gڞ؞JH_J++J)md1vߧ吊_*~˻S-r=%PUlJR _);^)pQQ.$/__1EvQ.Bփ5L%HyLM{"2+2+ ivk!SCyr(ϖ'dðշէVaNSG rH{.TP7mhWW]FfjAG~E 踀ݸz=dӯ9f'pO.&R\Ma uYՇw\Ku˃Ϛ|]CrK3U\M&(и}׭x7sUa0P~17《s#o6Cmbf䭗$Q-|BrtVD C +nU\ȤBr3tRGB"$]dĪɅC(˻0rQus}㧷z"0skBKӧN;-w ~e@}/w@};Ob-kKwٿVk^4k{Ҿ\ߑ<ҿqG7?H^o^֨?Qi{zFUO߫W7?}Oo^ި?Q{zFUث3Wg4?ch^Ѩ?Q{F3FgUث3Wg6?sl^٨̽?Q{f3FgUܫ3Wg6?sl^ը?QY{VFgUYڡ#_dmW?̚/믁X\|0 YJtsq>? o>?}e08<ݧnpe}: I`'fӐ|q8So5J3a9a>UB7 zx19*-b1e8Z8F^G)q<GwɿgK|^Uc E)a^ͽa-z, 8 hwAxFo&W3}aʿ93=EA8|t^Џ2.CqY(?~+:Zƀ!xoޗq:#7\q#zh ^?&K{Hcl6& yZ|o/\zsOӿij L@r j1W1\+Dp2EIlm_~dOqUĿW73F3,.ue&p@dH/jMʿۛ-Ԭk[eJ^8o5 šp( ;W/?ylmms-1.1.3/data/projects/CoolSongs/Root84-Initialize.mmpz000066400000000000000000000406701247673406200232610ustar00rootroot00000000000000x}8vJ-?_z;t AzAzvA\lJse-ub&ϰ/0/$%Q%Mu0됇<$Cۗmbooȝyo~o=$Eqx˳Dq *"˿)N/sqXǙ~BP6Q|ES r?~H(/wnm/9KjVZGiS!RǬ bͭw.~,pqEQn|$ġռ|{c{7JKִ7S?>}xCB@:c&5EJ}Fjꢪ,A~p_燭x{[,MtbCxєJy#uw~.t?>*NJq/hw(kڅ)/yaCF?TG?={:ե_A'V>ҞtEp7cBfjZ{ja^lDUQ.lxak-I=uXlm#,Y >ͧ]B`$ݺv(Q)|61JcnysfR{9nd])KֵӮ+maUתH7hw}tΈreSW?aXb%ҐBS15[?u}dC*V͞yE>~Z1,Fx]FCFW"# rs\~6 iw!2H - 29BiYJ2U3ZЭh0\׭h0ԭh08 Tu1̕#sF=fz4h)ŮWBɹM@z<)bW1jD!&❸gz#*3VU8gԫpa3mH&͜AD9~s .+ϜY~$ܙ΄XS6\jV1b G -3E=3=3=3 =3E y0SU4SlU4SHU4S$зV_g2fOSX|<9֓Ԭ߮X}[ =?>/ 6S40o`PLA}3E e0j8^}cc>7ܡba3x2$~ݥ먞fp-Ulzr=]fNEev_*evϵt[ZDٗe2uR]f_K]fMO}evqt]f}[e"8\*%غ,TFu56# ghbyڐX6!m)IlKpԆ qLmCKPڦ rg'FK1yf{w7j1GyBP=WOmYlS_b}QM-6D_b} m](lK_b(ml[_c*ٶƶm|¦Eޱ q Yj۶h&Kq/[:b/[!ZX|S_,wx(i/~}}q鋷}G_#aemm6LWF[RF[f-c;lOlmE\me!.nmLmֲ,mֲa96c>\uu!]o;>>,#X3/V(;!d.YTo_ڞ}d3@_շnخ G,rKq}9__;`/K} 쥾ȗ(Pګo~.Gͭ@1mMS1mMS1mMqksK#S2M}WJz|}Y=_|}.룾]>d-Qgǝi佩HDѾj\8߿yQ#r4)к/1G3iܻ׹ϡM'kn3:.M}dG~=BgZ uI/(­ } ޔ;7Y&&kʼWՇ/8w1ٗ-\Z'1ۀyGԼdDq vu^'[SZ6η345ro:Ot5xLi74fZoy[o^}#\ߠyc;oKO 35++}=޼XוyE0LSه_/zRΫ}O)k=mr/ո5u{BcZ[oYG&k}RPAVH% Dg),.{kw>!˗;:W,Fl畞N 'u'u.SxnbՅizv&Ժ4ngk=Kvᴺpɤtܵ;:QFj=KoUĺ Fiu[tuor풩1nsvT=k=>)<.)<.)< '9];s]>+~o4Ɛ3uS\-o)~l/!O9"}gN><4Γw}_"_GiWz씗ǡS`"?l( ”Ko^VO..O>J"bR5d0ջcEw+8sNп.NE9ŏ[=ezGxUS䏷Q>$%xW1uE0'EZ?u{d1*VʞyEG}e߮x mxEȳ$r%Zg9JU\|6~ ӴR<.XkuRk:cn$u]qqjЮghVs72CrS_GzI]IR5CTb|v[üL7`ϖHǻ,f"zyOGkҏ鲦 ?FOczڛ3PuRV:]rxӞv-: Kp<zb{3䉧j.VsAK|JMxoc*?ƊL{mIjgj{ ]~..˻D?c.vOU؏@?^ 9| ܫO6Sk΂>]ou'w!ySg4_۬pxIxIxIxIxIyZ\%"/x>/7 ^j^^^^^N^^y\yUxKKKKK"@,XS /////XpC,X/ / / / /Xp `2rrrrr=Ăk. /////XpA,Xݑ]*aQxIi'wzjvS&PA(@(@( IcwDH!#4IO}A xYxYxYxe~.!ބ KKK"2]z 4bQxYxYĢ9^}ƢA 4'׳&^Os沂@,k|u^nx9x9x9xPz;Y Ks^5gf%%%%߯DdL qlrrrrrWE>Grn-Gvlq‹?ծ;Z?Fiɣ_Qk LJ^xü3ٰW^r1Jce7岇DˆQ\bVtB#o .ERI`,g,Xk+ֿ|bLZЗw 1m͐w4K{SKҮx)Wډ_1V-(CeFƭ[KџF+iZp),@_!6E+mwl!XPX"iZXBNՊoV,^b[tΪ׎#;"jc-)$ j8* mTAmGWb5*pʁ@Ȏ/ZJ[=P|n<Ԃc鏧h)FŪ+߮WZ5yK.KߩRab;,Y IoI*f_*ֿ-[L_5 ` A Wрz^ @(^f jncB1܁ z ,hx_A%U U1@=܁*LUUA[TTub*@8yb*@TXA(; Q D0D "! T:`BR (QEv^Z hp"2@xQFT$Z AR I'$ AlFx͐ 55  ђT2%Čv * wGmQFx^#$f: p*q 6UDTWϦܼ8ʯ~}9哛ޫo>yVh\ }_BW *)/H>AZ A/u/a_PB 2I/I/HIHb#j32l )dSME6u@ =ȦM}dSME6uPC6U!lQG6u C6U IdSeȦ IdS$$M5ȦZVs ]AdSRȦ "lꐁjAdS{MUI!*qȦ"ld-lB1l8l"@Ȧ$MȦJIH"j̑M5[wI#D6U!lj ȦD6GTl ȦJrȦ*M3ȦaȦ*!lLT!lt$ T:,ܛ*eȦJMD6!ՂȦ"B6UMD6AZT cFq4 TE $MI"dMD6՘#tȦ*MD6!ՂȦ"B6UMD6AZT cFq4 TE $MI"*$MD68385~.CGIƅ_?wSq"m"*Jg4 ‰7^ZPVP8@ Q_/#UEP~:vC1JU\68p2VNU:UV X*j$SE>GdlE晊MmSΒ6]b;?ѿg1jRsft}ɬwO1+p٨.{YKr7jy;Wm+VR ?% yhTʌ42רXaK(bU!SLh<ٔ;oыnzz98`'~[I\/fޱlWqfw~߆8%ʂ0қS4+xwc"kSmtWZ m؎Vn:,*Evޘv 5JO=#>IExg+WV [SZF#(w/Eډ5v=AXtǎ=b~XH7~= ϒfg{{iyX[O9euKS_~g/ \9q~w_v~S3̿~o?{> Ɍ*gD/XE7'u&QqNE~FiQ۵yY=>=NNжar(kL1O-(ZqhghiGQdَ}69Լ Sb/oo8}ܧ;j_i~2]xcoIMuXE]3 SoVNAߣz75_QŒwkjmESܣ_G 氏Osĺ͍V3gI-sfRmBg FޙoBg+Kҧ,YZObʌNZ=oJm׭_tImqi?HJDOݪfc{鸁NGDy@urX/ )׫]k~&23,6Mq^w@IUcmi]0ԡu,Yl5׌;eo>c/y㼧.ʎ*p՚owfʋ,մtM䇊3ݘmR.徰xUAOhZ_܂&pf Utg4q3)O@ MIi V; _$o!RdG'bƗ]"0%1\b06_cm8|Oj~`~q!hhw  g @g Q8rԸ8S+':WGjjj̪%uf```@ P}eDo 5!rVbbbվU{͂O4-4 ƈ4/{#@xSkXXX_hibbbվUxwMZ]}ޢ[o;d_wюxK@ˮ !˯a'/s颿txis_xxTW(j5@b5@ ȹ@ ƻD ˲ν jO԰}\jL@ ?j5c.-4ϽjO87Ɓ@ ;E ? j5c#6P15s^7xCݾk/=K t @]1.~]ƗWѫq)R @14|ϻ '<>_y(S46hΒ6ja}x(mXY/zTSY_iaMr=>~cL#MePxC41,";Gr]PYc$GNLʼs+H!:1/Ϊ3T>xwKh%-9_UatIs<};ITk]k戉fYwN=HR{YVkJP d!с#ft6Cϖ5 U=v]STf>Jd[XSn㔎KN-K n>?&Nh7:ZqsI2ja}(ͫ=7)KIvՇݺUAs:&6/:8wºNj% xIEszI{y@/I~)׫%>OzM7=ev@i8?.ows˜e ?%ӿ0{ۓ^W=e=姤gnr~X[OS-LY=w)G;}ףߝOnYNZ?=5JI~Ϛ2{O~=>S_׃?wBh}!9hY=(hY֙A@@@@@@@@D6| D D D D D D D D DKA3)D D D D D D D D DKNfhhhhhM-%#Z-hhhhhM-%#ZWD D D D D D D D DkC--------QZ# )----A@@@D+D D D D Dkjy----O𸶘 Z Z Z Z ZS˃hhhhɈgNhhhhhM-%:!(h~H----A@@@[y----A@@@dDk:-; Z Z Z Z Z Z Z Z Z2FhhhhhM-%; o.HhhhhhM-%hbhhhhhM-Gȟ:Dm-?ťCm"R^x5|G(M7y!Jл g:_xC[WŰ̝i  Zp~rA(/\ւt6 =yg ٙLβ&04+mh{b]&[[4:-$]yZC-I_!!(zDZ,o5- OHZi.P=@+it{f-K'}ywL6@ :n@@-Y!%q!%_-)[9 0-) v*J}[(ֿԩ\_t\z]u#]wDw\wkq߭*VԂq%X8NEĚ)SSQ`V!]p" +!r8hRr h1c/Ѫ05'c{'CB/%]L~AT^ITTTTITT="******$* njYKlJHj"`@Wu@UAM_Wu@UAu+(@PAPAPAPAPAPAP%APAPAPuTvԀ *j$****$*&l.AAAAAAAAAAMP}`@Wu@UA -AT^ITTTTITT]5 :, :$N]AT^ITTTTITTM3AAAAAAAAAAմ-AT^ITTTTITT]S  }oJHj"K *j$****$*J[  ΠKoJHjʠ-9DQ_?;l^k )#YuSb) ZIjKSƲjTo*VݒTxUP ڒTxU"ȿ« Ԥ JD"-I[qS7Hu#Dģ*VHX5T1-@xW/J¾-؜fGA@[ŵnV=ETTTB#FPŴh A"X>+˳g7 {4nwnI*!*- **ͳ S&-Ivl˳E\ٶ?g5fh-&gAi9b)v[R_y(=њ3*d{%:j^fq*kUR VY (}!K9NqOX*0$T֦l{I5LOLS8VjH֮.kYvU.7GbV5#쀖>qlίx?$m6bSQbm)'&sm]vG^6HdNJ5v[ݞS̩Uiw{sj_/sjTڃYFw nYnV#J#"QBȬGGf=>2+%Y(̊~D dVg͊y͊YR5+YJf?K֬g)Ϛ,%Y⟥?kVgϊYV=oīyg?[g+Ϟl%ٳ⟭?{VgϊYQ3+9Jsf?Gά(ϙ7N͊YQ3+9Jsf?Gά(ϙ\%⟫?wVsΊYU;ﮇzcVsΊYU;+Jsg?Oެ)ϛ<%y⟧?oVi??P=ΜdI>9>Շ,0_!*?@C՘]UkX2%Bɐ~:M9"=㗊~EdTO2fE/ݮ\b/JͿO?dOqsXb~,ܙƸy*7ŧO>wYӿ,w?>1"WݺX uϾ) o"&/T橈^ v2*-qDթ&&X4?Ƨnp}cS~k/xl_}{clMto˞`WT ƮΪΫm`xusVn)nnY1,n1Nol{YAWI)˖oڜg]k+ct.D[*ͮJTQɿayH8]1x̢7%2ϫ<98ʍdcqOYA Fx1U!kYˆ7bLdUĎf%qɎϳ&;|tmOv",[ hcZy=$uVYlmms-1.1.3/data/projects/CoolSongs/Saber-FinalStep.mmpz000066400000000000000000001257551247673406200230120ustar00rootroot00000000000000 {x}wWptC =geog}Nsf 8_$. ;NyA*TJB;GyAh{?ó-חۋ?މlx3o3F8r_}lOWĵǟggJ9e  3OY!묔\ogܣ%ìoG2</3 鹑a P~V εə)"l쿁([`o|Δ';ʓWIeTRq|y;#QⒸ"jw93Xa' ~7Ё-VE%JMXAetbK~AqCN>FCx ]z^J#&&1'YxƎ)+J_]!,T QԲƈgl RlG_〤~'xl@RxknaIJ_ټ)RxRz tqI7VFiFj`(&L,61|80A*c{R|/a(`Ko6%@%LfFN'DI\T1rWMhE6l&1̦S@y/d^Ȩϋ):᳛!}Ȁ_ڀ+9Ňs?z3-5,+?f@{X?/eSo't{6#/J^c[MC5#6\Y(7_o.ooV\z'O<$'\h(lFt?H# uz)Eb ;=tyI̋$ @ ߶TF*i;: ZzO WpdgW.{NYBCmw tz=Kw~}9"B(MF7UVA򆿲qp؈) |x^\/SB{__.M6SM('؄P xHlp%GwZȨ:0ca^5RKhrGj0[+s1KR79ԅ㑿*Vth5UmVmt%I7mV:a+5kpY]1{ =EG y%:.޽I{gyspzu@+"zfʘ!)$Pނztb^ZfU](VKz YuBʼT2kwKMtDTm".9q~[L:FKyy)_M7yO% hGx<߮.[SUEfvor'2]sñMj]:w)2DieRjlk;ϵM=0\۹ M6cuumW ?gs͑M"p}^1JITA%k/0W$0–#×PT8(x\v k0 Ӹ[u%E1y߇(wm,^pWlx]~ju]'Ws9 Wq:\9o[`}Etp Swh/OH"k c4}hv=Q ]T~[N`pp'ZLErdzF2ak|ڋLA3Ќ f :Q,3v3;=k`Q[/8nXf2Qչ2إt9X=]b\Y_h-&< ڝ#퐊:#F.Z;c<) OAlsdR,9He-C5Z2dŴesXpYʘ廍Y&1K}eNR, dȲ YʐecLeR@Bd7BxF ,5ѐP)GoBr& )g*%儮[#F-n$CWcV"w~qҧ'5>=yIOOj'zR8ӓz&n9pRBתosvTQ}z3d t׫_Zt92jdx{V6y@OjBp[uQCv@]ԖP괊.nonX͔wbW8#p̐So>[( O`u G }=م=y@7RL v77}~>'QJ7z5)L@) :s|iFlZ\Iq iErΊ(T6l~A7X!쉧QP")8V+LFJuEy3aa tt,)KcIA_K BXRCǒ=걤J%#y41N{2BG4'#tx41^ՃyZrE8cq +t16 AlY6mǓy:,썈]8,-*?, >,#ry9()^# ~u rsr Hp N qܧ@L0֬.К&)9SOɻsК)ͲHhM\Da^J${@$ҨD4YNɟ;=%ozJ}DLY$mE"Y0z%% =GV$prJ딼)9S]$pd"c,89%+#Q8Rr^}Ẻ{:[Z-w}y)@RkyJk}b.>X3kb-iX zY"xZ! #|=h*ˁ(-pAtuBϓ3etpm#芋/0ℾ[vkD^\[C kہ )GŤ5wpw(y>13!pv0Xp'o)-3rщEwLA u1 GĻor7 ,37W???_MLSᯜVaEwoLzԲƈR!$ٖSPlGF8 _ #&?qIi%*vd.)RxRM`(Q_FgHvo k`Fa̔]EwVF陲Gi`ߙL?_;4/TXsG(9k4d6=t̫aĹ^߈_+? LScj1A-'DiriQa?t,iOC-Jr=32'ֲpw V'J|P2B]V覦pd[rdM^ +~A6@RsˤJPA}3b[Y`ƋƋl>'Q+$?A 1 3ጜŎLob>Оq6Tolb 4XM&î[p+ U*\Jp!ODu?ǘ􏼀YLY iUoq?uuYe̽Zف}UD\m3,audsӱSZ)χn\)˕\)˕\)q>>ȃ~zu`0hQ[hphȅ_y>Pm6^=?,K/~rWyWl"wŒ} uU&!./l@ *Ȫlz_D] G]l*4}:t–Br!r!rQj\h4.4FrsQҨq9R@35>Z h9Ps끾6%+BJ/kX\ R#亢yCEڜ|E3~W*Y- c5YT4焸Tj māBjfhRq}ͽfG(AtOI,*NNxucr|į#~#^O_&vm9t{7T_*t&=kN;}sЏ 7{V>#4q R| ^1,hsmY*HpQE /GhQ)$^)9$)+ڤCjRtW"EUPEuጷwEHzmze1FvO5{jSCʈ^hpd#夋ɔx2=~viq>e18GΈlUE) &m*\r_5H`wi@<|硆VloJ ,8rtS;7t6~.J ?9\~c\z1˂f U.G')UL z99v$ lqcX8Sdl[c#|:R@-J!NVouOx^LWr m Q.unEa1X:7 RbA܈ 2Ƽ cnYsc^ayAk`Bٖţ r[\,".p-r 1-r,dߊX dż -x-ޓ[ [E%Â+DX)Ȼbkؗ0? < 3b,`8 S)ƕ 1Acyut}P)iq0~-' K YOO?e0~ ' e0C 2lǚ 2LƟ^X!<3 ǡ) b0GgtȄg≠38+N0薞a/g68F{U酑:.)ކt,Gz]P;_]9s^V+>ç6[(j1rlS 5:;:*¸Wۼ nn8f}9>TICmoF6RݣJM{΋i&l㮧N;˛׫) lK:䭗O2aެ++NrPtMKpeVge ˇ5򻺔@}8˓/صzzM~G C#!:ChLXi+\J< qy<:K`Gd}Zl+ 1Ƶul`Պ^4:ݟ5_,JAk\mpnMF;Ty&:,Z;R51vPF3I F5?fklN eOndk8k9⒰d5ڦ36#b\25Q٬.A=FZis F(Qac9Q7W^ :i'uJ. Q5 k1l"!h<ۣDBN=|$&IDV(<%>DhbXH@CDʇOl"=_( ԘKan-vr2~BsmB*R9XA878`iJeE7:F* kR /Po<rTĀS@Zޭooo.?b\ Nf%i[*\ SSU-__蔅'nLAtRu:sily~jß r]3mӡ:^NHo_&Jn%*{ kw$kT{#ހ3|,C(~ZLk-Řie"7ץ]8'`o"I 4f%"B\BmKx^ѕ%v6lRxr[Ks;ڹŜx/" ;A{,Xm(`i}y-Z0g6:rC6' pWwܐqtq.Hpu\:gAڅ@I-wH)cx!q[7 9ҖwM^z$Lr*ne9O(y8{`(IIZ'iuH%!ypI ')@vH!yXe`:(EAyf,JZV`Z.K>f\54 iδa9Ӣ L 3-2{Xδpa9Ӷ˙wXδrmؓ{=/Fݶ:0c->'_|y+<[~ٷm]÷E $a9KwLye-aޑYH'qV5E֓Y,q19KuLgYGf!q֛:dA%9>g tYcr@縬%92t8FHs6˛q֩ZuܩOt#\r|SjVSv?@)z `'؏z'z2pOj}}^s˺?~'ˈrװp~.Z򌳥ATuBtLY#*Y! u DuTC8op|e~>HLr]LT _\p(y>xYgu8 ;sAP”9}ĢP1A&DD︉A2K̭XfP %?~Ju@ʄӀ,H#>>lɎ.}tE2 4Jvy2 'GԂ0*7z8c3Je͓@+ít)\BˋۇۛװTn2gZzX7|nX]~#^SV rLԞqt߳P H"͚ږƴ$w?M~& vrkD́++Mtx}+/jOq;\'ZrTV/"ձ1㫾7̂-_@fQpy-Z0f29B~-bLu 巿ma4utv6u [5vcGέRfk`bpNwnG{ 9uqL3h07zş)gڥ\sAȊ4Pp.ƙ9{] 0/PPIw&`:oՏeEqdN8`!qZ ba~pyK 1zmEphF6^zt`$b2yIqaloinBrq.7WfCZifhzgNl,p*3+ ˚k.,$7 [ޜ\-DM.'$1nfDZ7U`ڡw[@:]}tZf{z#;dP@RZ0N9І],k!Zíw"aVq# nݕiU<nz/DtkF5U&q%ˢlPa2| ) i盫dslu"דe RF6'G,$]\^0C̄dNrfBo-39T2roViE{jj }g< hB 9,$QTx TQΪ0|S'0f$t$*o|!m[;>C\c8@08+8 FZ(h>;`*iH&׵$K9s=:ƹbd bYx38Lb>b 9ƢcC-8 cj{ u22DIC2c[.7̱Ґ_՛“96Wxm,k"oͻ OdWx+̱%t>“968hGx}'A/9̱A 7+/]ý5m`m"ýy^y&#ý2½2T2{:^c){{ɱ!vnX{e½2dž Rp TdW{;^!)ýTdIJ{T"ý2dž6zw^c){ȱ@"\d2L2L2Iؠot낾dӐNCFk: 4dӐqd\U5V'"dLI#[jԷ0רoaQOf&+[}xzaKIIh;7/}$Y_R?KFZMUL ,J(aKJ\<^]o.ͯ2#sk ? wCL޳0D[0ĠCþH}֕=|[p0My,a19Kw\yg5JXYd=Iu|gY,qqYKudgCTs@瘜%9&g tZ# @iT4bB.oogXǝ /)7ğŔզ]zJl?@>#?Bɠ# S`rp}E[?/eeDFrkXV\?_-wQQΔ5AR׿@TG%>Znٮyrco'A$^$|XLy9.&/󬄯cD &xjl}g5 TW54 .2EcBd6F Qug[6R]; q@R/GMv'ml[uӎI U I[,QS12x%QPY3h l500T]5,R{;j-{LT*Q-. }#uB۴Y&S ꉡ𡺘%FlHOm& z2&c~9X`?#z_Cn굾As~ /51ƪ*fگdʇU"vPH /`mHA7i րʄu 9u~gFB =ԺcZÔ6WjL#VW8>Q>lРTG}jmֵjZ}25{:>x^dxVOa;z*;; ӑ:~]ՙ;*Wfe4<]AGK4ՠUC V<6w!~2LUUaˬ"r957-r{(2zSz;Fzfvrsz;&#ҋM=1հ 9d)MͲzcޘ9qNo̢8yS f2jCzc*1 <`5zc >exi7eL(&LS>ma1gM1w dL*.H޳RtJ ?+E3EسR5KBadt;]Сvh;sZ T>LRIjCbNe_; ncɂx6 %YpȂc^qf26,lF[0g9g9З[bnvA%斘[bzA-( %䖐\PBnj) %䖐rK-!7܅3~DI>bAy%jS jK\PB H-ڄjK-jK-" _J-ڄkK-kK-מ wXTnK(rLN-e\zf]VM !§G7*}9Y7|{۷/m}rgG~;;^=3/ܗN'wƳmakZv؅=M6qLB"zz' XrGԂQwޓgre5FAAٲN=kJO$חw7WMafd~Sh$ox._~ Gy;8؁M'0(WzYsmzHjA溺 eAVL.渋7h8v]%ކ\:!UXx\'al c 566[(j1r\S 5:;:*֨[jq7A|-ǬK`u8Ç*i^FQ{TIU}y䀍yIW{gyyspzuCN:&f;pP;zրxڒJ=5a2m4]teupV-"kf2N/%P#vƫv^!Ri `p!tN14/?oX#`=%i 0̣Zq4U e[V1C|Uv?oo./ow_/ILCYSŨDQakm߱Xu{]. l\EkGJ\cu-PP@Wv`{O5>$gBN\&EPW*[Y3-r$(C<6hLDP L'5rY(Qq}Ctv_OIG8( \>eQH DBzp7m' ]$ZvO`@q}rŰڇXE_UL~ $<{Pc1e"UB`ͪ # ͵ M¼АBJO\(y;"UM,3:AU)V[69iXwY1:iWܹ%]oσz-h0׻տn.D83t|A@'i1Ws?I? Ő dj O]01&İ/,QP AI7,1%rD^XX]LYKLSu.DXb<`B)j0,^^RHbJ*k6=VI[iD`GF1"6ǼEԉ?)5M)h=֓}Gh=֓AGh=K5?/eeDFrkXV\?_-ys *:a|9뙲F:U6B}CAև@KqB-z;EP| 81}mm;b3&40Q4 |=3pv0Xp'o)-3rщEwbLAPiqd[/J#&i~ 6;FYE1jQTW54 .2EcBd6F Qug[6R]q@R/GMvll[uӎI U I[,QS12x%aXgHvtod=cv͝StyuW>n p0>Nϔ8|L.xމʪϐbڬ rPWˇ./ ), _Y0Tp2:rj)]h { '>F9{O6/"%cm#4  WUӀ z{w}NJFhP_~~JRjgs:r(+arv%dɄ/ԥ+ϋ!W_TJ-(q=y|1re3q.暿ڇNŖ6@g\r}9'\B5&#E ySvmso8߉M'J'AeB{_GwGC%-,H]{4}m68]<LyMp5GgܟsoWbc=$236\CSD[ۼ nn8fśiQ[Cr(?T'瑧U=z?w=uRfnJ%YrozlQ۳QRP4.m^~5YxQ4,.F$t86,mAHO^嵬0%P0vKv~^;RG0p!tN44nu,r?WN>8 9N 1/ ;-CW!w"_7-3f9\۾cq)- 3ԩHA \٢Ҩ25/ v $z=+G=kᬙ8hgK¢!vkqt{Dq6A%2[5mn\#9LqG!: ;'NZɥAep5j|y4[$!hGu1Ps}u2A:DS7BQwH(dQ.bE^X]LYPLǪ:)zh1B,%&4|I[džiD`}"cc歫Uz}]mP\ iu:ż :0:ڣvVY0.2#qY><X(_ӥٱ~JqG~4dw*2.;i7Н[7OEF"#&SvHd| 3 ѓ-5[LOFȓm Ũם6u[\i3g|^)U5eRw=Fׅ+-Y$ڈs"m";Ht8HtWi|xp.|rp.7ERd =rs۳Rf) jK빈 E-k2`T+={L(RBIBۛ۫+U\>W;~mpG&weH۶a;kUk-7WN?'4^w"Sv~C;ғ~NӀl un$FC7d7"T] ͜[5KvloZ QD 5. pH-̍<~Au '`2 !7;J .O̙T8r@]%:LP$aC$Eɓ:$OҢg tYcr@縬%92t8FH)&]`ucw*4S~(ğŔզ]zJl?@>#?Bɠ# S`rp}~prܲ_2"\b95,+?<y9pe]89SHJ>Bo>H]Qh)N[\og(r|o'A2Hm>S,`cUD?#J1ϰ}&^VY?+cn-0eFp2:.TL >57;nr3sTCĤ/;㟟oP2a#fc4;4$SI_մ[,T ڊZvQ*DY֝m#Jv}n <I8&TX"cJeII?6K2Beϐ*˜]s]^|Eu\%i3eRU'O3_;P^eϡ`u~eS|#~ѓљ=&t#,~*dh9(b=$] \Q 7N?2&r/*M̩ 3Pu LNĦ<]W)O6#!t'_v)hi((m7qۻs497l=çYGև2'aG]<1W8θH&|}î'O'LsY|@Nn1GZz`=&w.F-ᄪۯW̌q3 E-%ڎ^  g6l}&cfRŞ;(( dREkGtu-PP@OiTz|9Pqk~̢# kpL{3%au -z(ѲDP L'rOm'0DrSxZkE՛vXO:ꤕ\:}`Z&\cK$ZvO`@W2/Z_0lBEnQM|:QN/agjȥLF(vL{ܰ ?\H^r\s2%=bpn> 03r*,I9Zc˛CI{Rm֩yӣ6'Eo-NyyI|nwۛ kל KҎhU¦j)N-gtu\J[ޟ_Z~~ug+Dgu\wmˈ?٧k9Ii[mDe/a$]p֒js<AȻ]L0}lm@fZBOՠL+L>&V7n1/B<8Hp [0M$"4G[ӒܝB6 ,=~vlP<< a,tR~Jc;yϜO_D}7w|՗Y0+kQ究Xhj g --8V$]Aڜ6nu=5Z[{;}k$ctҮw:@mޞ Z baݿw}_\)p g?NZQ謋i|nzFOȔeQ]bP=a_xNxB'rD^Xp]LYN\ '-h0?oeyoֵB?i0l8Fdf.c@jalxyMTil@\ ihg>fY*PgQ{p*3+Q ˚k.,$Bۜ/f-P>qݗ3!#ƿSv5HCTdݛz*2nX=iw[[OEF'#[iwƞoaC{2BlS-L,W(F0W;BbGYIޞunY/?zTZ &*VGj%p](I(qq{pw{uEĖ!gGnrq$xF\WT-Fbg?>N$~?nQ=uYzIW `3<MR;='I4Ӻh!nDЭ9ƣ ڱE[h)#Da\x@A!{]фŒ1 < ָPL`}iˀDB Nһ&Hs&9NЧļkQ_EI`' C'ivH5!yPI ')vH!y^I `kx"bL_@ezDoN.T-$SLuxL219Te-SIur:e]s:ٷi3)%;:g Y¼cr0︬%;2 $j(i%::gYcr8븬%:2 ! *9KsL:e-ΑYÁ4*EQ_ܯ猳NrN~BCRڴ ZO}Sh=~֓Gh=4֓{j}T,X.[[?YFdK,esr .=;&g VG _ X- }Kl%D/-t!P@g̔cbJcD &xjl}gŨESI_մ[,T ڊZvQ*DY֝m#Jv}.o <Ijzo7=M o M;&)T+#$mDVGMǔē~mcae⯟!EU`ӽu<`=UW ˤQUkczbVjtVi v%QnfN*'Z<‡bv<"9F?bTO&W`̐0@ }Y4r9q7h@{Γ 9M-AM hʦk8Y^PJLA#If. w"|"1Xc@ѡ@AѯԶD pKeaKDpf)aJh1 ռ0F 2luayApc?ʺz0 21 Y3?/0\p° qNd?=;a?0\eNY֏˰~ʦ ^t0 S”a 6eMt&0g?kZ=cMPυf 0 91Ӎ?+E| Jm>+E7ܳRtc)ҳRt3Jm<+E7ݺ +@RtJѭ:+E7i 3.F7e\nȸݎe _6t ŸWU XU,8^0aU2bUbU2cUcU2dUdU2eUeU2f|M39yg#>sϜG|<319ygc>sϜ|<3 9Oyg>sϜ'|<3 9OygS>sf_h)9NZ,KQ`QHq,+eG#(xfC%ΜSKNTwC ԟd?Mv}9 ="%-z|cܚd d9:1hx=+x")xNΧ#'aG] s錋d—]Rvy2 k~*S@ōgͩ6f-8 Gۣ/^pk)C |ƽˋۇۛװTn2gZzX7b@ D@xZEphF6^zt`"b2q'ρ_|@iޫU֓ilP\ ihf $:;:kge͵_qN\ݭooo."|d& fDZn7U`ڡw[@:]}t($79d?F1L9@p_C`s @Y l)B~ixt/4mH`wO\YDUPTHv;H(Z/& /%x&Q}ygl&d|$ {Dv't|'Jpճw ъafHL0ddGّVcoMWK.íw "#.F"ݺ+'Һyp^ N>:jJMѺD]pY L~3 0s a.vYz ?@ʨxdbzE=D}ۛ fHTO.۬R(4E`&yf)Ԇo($!ʼ,{gNV1ܧi{6"vyBDnE M0YĜ$"k(cG#:XoRFB'C2fTyO1 ۝"KZbm~gh>Ѹ#0(S-'խ6{mvzyg罁=C;@q-<~*;Qvk'86HfZ ֧(γOD'ZE;Q~#s tzg=P0lc c :M|8@ '(BߑZ׷__?r;xNUȱxȿ?ClM> Q.NjD{ܳ#ஒqJZp^5٫zЖ~NR="Ŗ:6!$ԅ=Ɋ,C&ȻClc=,}RHCPlJ}~bJ5Z2dj6T6b"NZm,$y r".J_8ۓ' i ȶ^d {?Y#%r1ocӀHyHFHFqX $Hr:4*Cs\H-n塹FphNP+!pAKzxCs:½odFN{R^%5M{eW{E p ^ 2$%ý *^poO{eK g+^Sj u4$''?ދf2+ԺS.[I_7S ʐ/?!!_2KA|yw*!/Tg2}62M[L[HDV2T5_גuʔVn HkyŮ%+X[`'3}Kζr+Il1!VWO|+fVR6+I[-R#@؀̖3E21*I2 _d;Q2cM7?z=ARm >ڦl;__2w%8dd㐑 !#NCF6w #;8dTA0ҨaQXF=f?15]!۷ْaVGEcX7tY;|B`W?(tU47潘D$%.2MK"OsoZIӲ[k]&|zoL"qe5MZmUej8FHHd@P& UU 9 KOF`ı t0Rz0t_ui ('kKmT\9rfP XcQ@v::>SV;>SvؾDN)\qDVeRo}&)Ŕg7ۛKziyҖ7u+\m6=rLpaAd HVzСnM䅌}8.tHhp' 7b ׃@vJipk/sVb DjF#٥|daD<'t7͜Bhof5npOl!*¬- (dCĕw^d|4` Wʼ=<֎si}7]I3IsRɓh'&OMP56Yc"Yށv9orf-b˙V.g֒DY{˙-m3)2!17Lpe֒nq}i6V1u{pK{]v({h yj<;3O&̓ɹ3<ɬ?YV,:;K>Βɹdr,;;K2OigC.hg:29wLΝ#ugHfI Kc/I.&͸]^\s:mw*ĈHoDa1bAJXg>A'(=c?C0JO7?CG*}5UY0]\J:95ͻFhS{8isӼg9c 9a= e>"WX}}~Ba*؁g&rܭGǪy&#:کec_^*"DoW\./я4۸26^KZ6rS:V ޫ.һ͕H%zHEH(3zy!Qy:lwaa*ɡ/Hí9dB>5?S "3Ðm꧄\DռW*+dN.\ }۔G N|hQ/q7JZy\d y}m+CYƣe8w&nnN\;|3ٿnt aQdgPwWN)<;xjk7j gU y/"mnΰ%+ FqIgE񝧓#E-&H4;ilް.{*N5tCū~~0GM*\գڈz8 G{YY=~a^!Y&aΧb[[^L!PiG 륋_y )gPX>tهh5񛰊>;;™/Dl{i'o@IW) ^!Q+V]c໭ߏU. v/}8H*Pm7ƈAvuv>R#JxfeH/ֿ|^xJa^YoGF ˟݇olKrZl%j Ϡ F &5Ji{' iPSlzbR|-AsFP#H |B=8K6vGŮic[ױVxh&&λ9+vq-R_ \tC\#&mT`;&vS;1  Ґ5<4< FDΓߛ > x * `(ܣ#x&.܄F Q0|IE)1}jl(eR&B%Ik Vc^h=6)p42PcmfM ¢k i!`LJ~P.*'yO>.nOywY{"%RuylSYcM{i$jW }־b$P|N21?@s--!ŵUb#,g/e |;Wȑ z1ɑ z!(ʑ z_تT+hHFXlj+Lwεo&q" /I,(K rҠ(?#%LUXP Ă$ס Ă$(?3ˇ$(?#6W9bAQ^XP Ăڗ#`IrAq^c@^\CK^\PW%yX/K.(ثrC(˒ 㽜YF`3^\`3^\`3^\`$̇F`$5$˲rc𺬜0+i7 xeV:/ʱ'7r~ ^rc5@O Wh&P xV8/&PəM˴N+?B~,?N+vB~"PHGb8TNx?S(S(S(S(3?/(f`~_N =}9C ؇ߗ3HN^ K3e ߧ# u$E[udI~i_d`H_d`H9$b3d!@aF# dJ'lUI;RTpȒ >Ȓ >ș7[yICpIdIdI$RḪP*8"Wd1@>-+O2 M2 K2p<[$nIB p1+ͦJ CveyAg veM iIJZSV6Uxn_jxI_g ޾$6Cg:Ȃ_!Ճ)h0 TB!eFA`l=֟@g 7!0{]# `=uzLd$j\A$-n{@Cvye/l @U坳A#!˲G%F&G_iM,[\|`*~v*r}k h{݈ґ`@iK4DF%/R l\ Zd,kvٚܩnJs 7$~ {cNu!Iv5V,|FYX??w!܇ /uo*bkW3(|1ݭ@'#VG(wX?1Amo9"\'w'b X^] MLkcXБ֕$gZ^j ?@zjYTۚ ̉JȚ&ԃ;6&l x,t妶hΖxm[b8 ܨ e0vqS5$ B!5_4"sTMce#b|~=j1Dy.ohNA[~&z>gxu63yW]x"*=֙3_r{w_KoKbb$I\f( 9ƽL^KFƈ㐑G8ddo8;'CF㐑8ddo;CFN8FNNy4~bjBŷo%F$JA8%ǸwLQ*("& *\i[ȼ  YHQ"c8lߺHIZ~oo=yUOx[}gLHiH86!t(R?P EtE8}-#Eq)a,GF tc>Бɹ3tdr ;CG2ObX{Ijw1-އi?oS'.F|S' ) Rz*'(=7 J0?AJOPzJO7?R髩ĵyy/Ωi4Bb1L3ݯ= BG§JM(kѽ_5AjORO(Z%8?6;LD#t`'DvDg xDkƄ(&Z%lcUgEˎl#ƃ]*^Yib;qm3el+0 mU[NT]dJRY[FQuk T,ۅbߵm.erw!ޡmxc8NR1qOi)#fF"Zڪ>dn'0LZh2'@F'PZp~vR'GO)/U{F>"% ޥxrr olP۾a<"wqGUcp_ "%cnk#X z2;Mo7W+Y |?=ǃA8[SG G_OxN.gR:tbPSO u+Dr6tE2 :?sEѹ{ @ZeTygVмp.8wMן\qD6֚Q=砏2Cj gU y/"mnΰ% B&P%'Cj9B} ڜ~} fWiκ=xg0K`\ gƑ" O7Wl,{h^ScHUգڈqm s5L&VL'/jd#҉\˜r[kO.nOτv/dVw]V!n˪xiRO'o؊~QaߍPKaXy@N2w.2q[HпByv IhEP :aW}d#ёN̶?bUhƙtF+7=͖o˩Ⱥ$Iuw[c%kE(`iAX4Й){%- 64|]!oZ-&ߑ/V d1K<F:y(dTXq$  ؋Z}O}JcEOfpA j+Uk2yTZ_jf\ORzL}!5A!,fMdonWk|_SasJ<)hם} ;)hiن*dhO vT ;+,NT=~$C*8Vs62ۆxFk!Lu qDsBTw?m[n释+h- ^uԣ2k_;u_̶e.*Ri}ˉYiݤ]G3^R=jlVE?ϾV*u'$O0%N~Rꌈ!8yV};&%FryriPBG?+We'T~]?Xx׽ Q'ɨА|̴13k?7QW:2JZd6%|'wVDG4 h{e`0&co^š㍪dB#7qQ_%WbgfBfaAF=k硫↵5pAHb<;:''~؟hbKM ~ȟ*:d3p#6<(D;(AWju3oz:>,Xl]B /_WWZ_f ^[UKX5AkkzmM~H^[ku]}Vdvrg!w򻰐~kkX ݼ]}_v; ߅<ІOk^+J "!{jHaDRߡK +'WŞ"?"DJ_n-'1E(R2vᆼ6ܬB2;VMM) ӻZŜ2ƳNvf$^r=0=V[!|=W8ΰH&xhՓbfEnOn(i8/N]kjs{ ǴW8g1/k~1'z֌BBjb9_DmԾ~^D[B!P% q(/oyC}zi_7IEr*~{IyQk(埥 )Lᰟ\m؍#iO⊚EzM"2@N$MJ*K{SWj#3Vi@P%5AQ#Ju)5BmE'[@jуQVlkkыyq}jqM?m-69a*6 V)Ħ Mj)fU9Ryɰ]P I6pae&6dۃ.!pps`=94@jNqkqơ:ZD Bn?FDC~+dbFf95pT79Y͝λAOuy& aoŲ{Y͗,K(`i":f3M-tg\^ :$r*\W9ɿvu!PVcV[1rV`dLdi9O, uMsh1v_g7jE]>? 9=㼩lU|ۓe Ln d Tr%;]M 0C!0zKC .BWnlCu28h! F3ZL,n\\T O!ϽRMce#SA.GAG&}FU\Vz9!o Nt9^Gͫgvy6bM&g̳{3`2ŝs]&:CoɅd6O)E.nJ^5c֟PG"kzcSDIYBѺ0. BuJ "!jv>² (B~zCMhen}Xelٸm #uֵ\&qQn.(6h<.8wΊlZ2dcsaL zvDq} 5GPY J6bk5j{5]U͠sCl'EE"T|mBʉj4Oܑ*Ɩl0 _ lGeZ'ӢhЁx}3"nw/\="wsv^:۹{ܽ*sLsv&$;w/S%չ{kTҹ{;wopi??sRhw'gw%Aݽ۹{:womHst{0۹{ܽL:w/TQI\;F;ox{Gwd΂^?+ZZ7'A{:omHt{0{L:/TQIm7st+$[;|tlF BlR4"fN!X %&w )-DeaceD@(yBv>9D-ܕ0+ԉbJł J}3 OPz:~a3n4 Tj`޻:E%Vhsjwo81(|q vyrr:7r{d*GAt5eMtdڅ듀 V Ώ -x<OF/+np9&6ULRfښٗCCZk1%zn  pv0WwNW{e=&q%#¼\-6}%:?Lغ|4p{3 6&Y=Z؎ΓeBD =N5XǸ\_Xz_0Ke$PLCQr"rja~4dje^]6USg# A] Vtf ??)^aQqLO?#u+~wg<.zs{G~7w'X{Y8撟f15<'a,1DSJ ĺ!~ٸXaSwX#wD`0 M>`lO^'?,IiEegSΛ,qC5M(tlbfj%sQsjWg`rbch._/j#>bkrunލkIA« zNxE v8]-Ξ#C~FhZE<=,<$Lfmej) c7S-8yiO(;qM!@ Ѹ{>5!a>

҉th4dQBleo9=?ѐ'%b2"+q`G8,reõ_ӹYƊciuƼF[r `af5tP+ (QBzec(!5]yحC^)Ī]< %BmqnfBQ5 `k|q8FWdGd9!!H(!M7_~{O$|{p w#^?Q#Q"?֏:&D a܄{sY& (K6ŷljIJez,׆xyNjGdH~Ȁ?UY~E< ֟43y#Yl}<ֵf%|JW>I3ZдQ5WC+_CG5-,kRѧ[&<FR>f^\."ک$Fo 2E("C bV "`9X+nوrޮ R~a5-R[wx[pY:k IϤ!rZ_ L6^M ߫kLTp]/(II1G**rpSujDV̘8x!(Kt.e*P*P*PeYS'|)0ha @Dž2Ŧ_Loxd5QW2u.N_K΀=L䶑v]`֖i;Zi֖ih2R2G$|8go vkxᝐmgXem!\Xr-1Ba7ɗ]wF=%xeD!RuOB 'FO (O.C#{qMS\&hJ$ν`'h|*ewqQ3Va~GV - ҉᮸,~Fɹ6_#U#2}iUU9>kY[e.g*surV񮳶ʌ_Uf<ꬭ2Kgm/:oh'v<66[Zx>[rʂKFbRq1Ʊcm;".67Rq涹K3͍mnXmscgnv涹;cgnu涹X-*&5܍7{>nv>?%-ixtp;1Uf]=aw3Xlm߶ro[M4FĽ17Pm߶ƚh\yc4a+r8P3Pm ߶rh\9C4!_5ə>K˕`e:)57=E' xCၘ\ m:~|D"\Zv7PL` 9v[RYhV# SBKsQߝ%2ccѯ^Hg*q7 $ݍ7wW@kl ;5^]#G,?r'Hs-׮g-=D?BZסp:#,lz;bDi#S9BZſZx1Dֶlr@e;}@nEoO7|iP|qzkq:ͳ<["ģ;}mX:~mz$mj:n1TY5 <hh$oFsC~ÍZ҈yVj_GrBIk=z kPH.V'sU' NU'=?t z R ,d@1WU &R@UîbbnEI _AQtG%1 %ׇ0"QEIw**ľ^Q}J,$:ufU(@fƒȮ E0B BCa鏊`8 #a  eF BC3,EA` 2,0ax(e@: B-T 0B.4 ȼP P, 214yA6fdh|Y.V]b`(2Y5T U e,z kCXAߥPڼ, dqh0Y*ša84 Cšdq@Ƈ!0@&#šb(|,l]CcšaBfliC8S)b;YzaY<lCBg>h% P8 :,|F[0,M5΀BB+zAzơaY~8 =X‡lC۠dơ`Bi>ak"}aۧa[080q( 5 l"Caۯa[0vl(0q(ư= ư5 C]} [1t;}"eq&CD槪iZ7 T JR)~QJ T JTJPJ8PPJQJR)T*JȃJ8PPXQRT >JSPJQPXMRT>TJQPJQqN'T&ʤPL _eRT&ʤU&EH@eRL _eR(Lʤ(LʤP*BeR@AeR(L,ʨ2)T&ʤ)Lʤ(L,2)T&E T&ŁBSaB@.p%G'(\O71lE2 ))ݚdEL@:-lzB֋(iTO >JUDH@O _OTJUāJ(Ĩ >'TDTāJ(*}BO1􉘂J(􉈂J(h*}BOAO( >Pז>{ʞ7J*{BeODbʞPʞ3T%gO'&JTNrJS(D9%BN>P)*3r LT)l *3R:# *3R:# *3R:# *3R:# *3R:# *3R:# *3R:# 0JdAt,UeRt(" mz[,Pgz>J>*BRT_T*R)B*BR*"$R)T*R)T*EDARD@&FRT JR) R)T*EDfT*ART*EDARDT*EDFS**@ARDT*EDARD`kS)JP*JTJPJ T JTJQPQ*BRT N6>Ym 6_7a4}\$2:ޚoֶl |jۼہah; e>bPLjekvG@{D\p_]{'a<,Ҧ -v; WAbICKd2}}?g7ϸMWMOvIFi=-A3"o_Z.q7`5aFL˓0")X˩Zln BaqL47=d&mC$ )O4n!&:Xj%sQsjWg`rbch._/j#>bkrunލkIA« z1WڜO?LgOu]bg.Qi|-Y$HL 2E&%%)V qxո&Cm[ص h=Mʏ0@(PD_p%!P U:.VQm AγU,*3Es[:Ba{-i% eSf}6mk^mPv0__V}d(8Q)$G&w㢖`S R$2BL&2BȌسJQƢxJcQdi\ x67ن|q{X`Zu쥱5_d$cȫ$ PAuaFJ U!,G"T#̬5(R[3)o+‹Ts[2҉th4d瑖W&S1 EQxF+C)XﰗL6ސE R9W2Lor3sQQnTˉ<-ce{(",sد GD"i]Io8Pm(YFu: qn+2 dk:! gTʋ 3&mi8]g7[uRFLn#*YF{^`E#hS‡aLXu[g$/9{\ՃE*],`wnVg5Ёi7%4EsL~wkpktK+].UkKUڥj} 5]&`:Xjuk5&``_0 Xjuk5X G5k5]\0 XkUm_)^+!տVWkC6ZMԆ lr= Դbm@]6&d} iԇۀm@M˦>ԅ njZ6.dpP2 iԇۀm@MȎc dߚ֛oMk| oM>[1d &|\ 6[ 7|״m@&1d7l5F\ۀAMss +l5lu&|C9ۀQMv4l5y# m6`\=ۀqM Ԥ6 NM6tj2Pc@&6 tj2c@ + g  D~P]zM"AڰA}>lpPWSbۄ򘴎QiMM,丅ťb煵`4I؅q ~pFlv6lv6lv5?D\#6 P6QI؅ڰI؅ڰB]YXXVW?Y\#6]+KL/.ԇ nj?h\#6fa8nV8.׷v8z\[Aqm7ǵS]k/K8\&qSMr."q>l[u7ȝǑJ ǵMSxRm\[Q]~&yX׀%ry᧒] . ~.W΅L6 ි6 Q&kEB]京X!MbP4A]$uAXbA ~N>hk 'v~V.rm)ʵyz]+*y_:O,r]o5Qm\[qmǺ] "k7 r]gA[Am֠6hpkP45P. n j5AGA[ڠAm֠6h6ᇖv@Yr]~^ tqn᧕뺪MV6`kPu: 洦?5wOwY) d̃]% U'It &m &S?= x mo9ѳ# 20_u!ψH 0¸ ){a4}\@f~[Ev^3h. 2wk<khwv$H%Hr^DE;hLgL_KbxvM qc +!cZ" aF;v ŘRvD:9"Ca; Y6+9r)7G }9Q7*agd(S=;7oY.< ֟43Cf"nx G~2LR^]x>{[CfPfNg:ur^BѨ(fY]؎Ie&_}:SI߰% $g;z:ށztxLG-At.eaG{GC,G#Ö3J~VH3IײnFi#f荕iD5[Xϸǥ$}Gx{#)K3@/Ñ<)5ux F1˹0DzD&Hԫ VVѡsTt(!Ӥ5il,=&TcҾ-Ξ=wONqJN8m172T(K0.eI.ƅ,I˸%$uBPd]ʒ AYw!(ˮa}ʮ aʮd 3eM|>7( |NP%@_@v_r, @Ԃ̝\*_;,6Զro[&W`#XwPycWkm߶o[ycM4F9Cjm ߶ro[9CM4F@ΐ/rTYELC%WJS2=;ڀ7 ަ`/!?8:c0?8`ǿP,Eq&퇛I΍e-_23_bWoO'gr ZyG"LyZv7PL` 9vB&|E+{)ԲFTwgIؘA5޴N'O\xv7V܀E_1eAkL'`x v?|}#Y\ i _iጰ@ˋ'-ۥd ?*;7$-ղ `e-r9n6(>%~!RQ8 U-CJyQɝx6,GJ0Iiλ+ZeU}3O;,ssZ~vvhDz018kdpq'd<;H=N3}G?$$:YB9t';zC3܌O cC><V  'j:@QK(x P_?bF=(` dc8, >X RT 1&R( L郖(!E6j8P(ᒀAA~w"AnWCdBDq(G=4Qh(Z J]t%J]ObһCN"> FG?M"-E #(jh}yvUȪz dFiѰ@A!LCưMQq(2j]v42MF FCNsZ/0giI;6 * Ĉ=gr#uᑌ!4y13,l  KL^r!~;wn"iik;$#K~1:d5yfK5_m:~CK9;nH~vkwyכϸ›~sOug{~d<1c$ Y'U7v3ұ Lڣlm.^8pYD !|u%WKiB/4Is*X^^<>Ο泛{g\v^b&ӧI;$Ron#Auܴ*Mo5/-L\TB=7mk |I$|8}_61VCȃ>#0 &pŒ<KR|QIDx 4X,Eϝ Jx퐁P%MԮ`5I-_/}{_/j{>|ݹwj^>~NgcomNW< c 0z|X$9GL }]:^dz^z7k2 yAe*@" 쾆 `=X Іv-8Pd؎@C7??gO ?k=e=OVuqI?:#{g6 qB3)yIFSDlFT*'6K-w 7^abtYz?TOUԍ}ng㶨Q };s]􆙩Z(H De@D.<2}̠*`Os(d4m`/hYyPƬ .5{RIv˾|2w)&+/ԌH5Kb“PL a>-JeNMc:-Yr=>sƂ9\~GӲ)sɘY!-ck;Bc=..&`PJ~k4\"I Y#8EJ"apbhn+IamS[HrK^?'(T$6$a$I8$`T BT&zddalR&(&M)&l#2['6TIE=ڔ=;0e@(gWUFEa.! DzUFEa* 0* 0* 0L~(@TOaQQQQ~Llj#0%T沢0(0"D//UAQA<0*S/ @0l<*0*ï02T沂0vt˭ ˆ LOaTFaTF ¨ L9TFk* ° ¨ M6U \V &}mYE`ĉ^^/jp !˳\Y[6)h.yP28Y?0 eA AY w!(KBD^z!(K텠]UJ^Ca}0?u: vA0\˗Ǘ-yGe-;MbzLC Ḣ0#mBqI;j J(X7(i&%>J`ի;j??A/4m|T6HˬWAz>(S'ڑ3de(g(H2?W-(q;==of;X;;Xȱx"Bxr>u o.Xk,B3pP, }{WSe塱rZQ3~B?A1ƛ oƊ׻+Fx 6y/.s#v$ߖk׳"UZ!? t8S6zyC"^bWJpsCB_-ۋ A "vk[69ڲ>XN๛ *7/nTxm:alBGտyv@fKuRxTr/ KBy7LvZ Vha1dU_˿3vX0 >8Ј`bpG8>y~'ilj3/#'/#zR 5BF\Qvz~h$/ǣw+ b ; #awh)P7 tSA[d8#]}9z@MZ5iwv3ZT"|"\I;rM¿ c^蔡w%؈Mu+ /ѐ`CGq CsaXYߎWW䑛>a7x焉/__}&?Li|MohDA7z#Xx1G?hN",ʞ]<5 EU7v3ұ ߱@Q6nycjGe!1 յ^}. =Thkc?C;XˡoWvq40*`^KL$`4iGD-m$hNٛb /Xjizidi;XK~g;H$76S >/+)}&G }47=d&{ū&5I/*!J *ywml <*2{&>嫱\žؘ+[%ՊwU5WQa58OX;yTL ^mЋ~vp6tz˃[i]۵4n,V#Ξ CW *DwFĵe\-g9֍Lh8[ r<\J.UznAn  _}50v=Ļ2nU LzuqIipsCn,y^IOKX _J2TNŝ[ u/|9#oגb QzWceFC8ܻ &6\o,o蓵6oga&ngG We?K״ĸ-*x}IVtff="̭;?X2Sx>E_μx.3}=r?OW_5%k 5 mj,RDlz:+ܥ*ԋʹ^ 3X:"'s0D>"R6'tO'h:'s2l(/!}JM:܄t\֯KO̼}M)/Ay l '-,%R.B:^؃FbIXzq=$nꕴH7YW@X{06y30aFQȋC\hcV!Sn+nF}7lsZwƭ޴&(IIaqnfSE>w'E'ݭeG d t[WTxG s-0\i O&VH:kŠGCa_C0xػDZp`;F biKf|Z"$X%P^|]y']ƔBIڙ2ەIxy:_U9b" m &0"?:GIjF8h)w"2Ns$A0*ɨLq>l|2w%*&+1ԌH9Kc2z qv0ݖFhs/es%(6QIdȄWd{/ ީ )@4 Iq:ʽpzGghZ|ӥ-ʣw{ p*,S 'rEDڎP93%6u#Հ`)M,-%rZrA%7dNX)QĘ9j"3v4<#^ 0]R$,m@srq BMbc!A4BL|iB*Cpbi*"PJ*$"4/0RSD@T/2M;QA\*sYAA̗ ˆ V °A<.QAQA&TFk* ° ¨ ZSb*0țŒdΪ 8 dyr:%~J %TǡCyAT4E6Y.,z-,7|dNq%n]a8ʒh,QD}^uz!(K녠,Qrt(WRޙ>u:vH t\Y.Sz;ke/ׇ$/sh{,SZ1`{!(C`mSfmV-c-(CydK2JgO{5Yi:|!{N)@o;U˒gc1,\wFuH}#H <$^7$!A#Pt fE*; Lʒ+/)vri x҈ ƧRdM'f)%”<5IXS~c>N;W)9S2rI< I9WV2?gm9kY[eƻ*3~uV񨳶ʌ/Uv66ی~b[ljiPn* v.eeK{*Pǎ-툸HHř.67z涹a3͍umڙm~יb[4ؚl}s7ޤnڵb:4eDerWuA`)w;Xm6Ѹriú8RXCm+o7Vkq5Ʈ@UPCm+g3Tjq 5r|"*r$gt7_+MtS>$w'MPx &3x8߇`Ϸ ܏ b@]nQ84iݹ?Yf`KLӲ-iҶ\͊ ;*|̇D\&e;}ts7U ot_S)ݨtD͖h!!ia"6}p+l`r!Wu'Όpw{ZXaF&9 ˩wLuDCu*͏t)# "@jERKq0M)''胊`W(ݮ ]`$DzB a<~E!썪 aSQ + a( ct* @Β$C0$r$ gKRC9cdKZȘ$l dLR@dL(@` 2& D [B2&El &>YdM@dOh4E) , ȦEA@6AY@ B+4 B,Y, BWζЕ-Yr%u-*cOξd!YT0 /BlL }AY~a 0#C0Y AY~A0#C0Y, aFfe1 P ea32c)fdh`V8c)B;0+Sw`Ffe w`FA2B2@hrF&A2)]d!YTt!taV[. L0]@LBfdh`V[ LQ0#CЇY@aFfe0#C0Y, `Ffe0 !b3240+S0 ea324rV&@Yt rF& Aʤ[9# Yt322!!dM#*Z*Be@ 2 Tʀ *f@$$3 (`) 1)ْ"XDB@2fL 2ˀf@A'0{Bˀ( 0 fS ̀Ae@PA+0B,EYe@ 2 (ˀB.4 9"A`D1H̀(D4Æ  `Bհ!4f@P 3 ̀A6f@P 3 (3 ̀@f@eA 9%Ab3 t` t0̀A2 "` ̀ e@$d3 `K^a `4  Xl)+, ),AXl)SˀAe@PdA[eAˀ , 0+Be@ 2 (ˀB24 @2 䬌l0( d@]gQy TJP *c%@P΋(^Qpdx)+ W@N<8%y 1>4r禤@^Q< At+ At4rs@^Q4rE  rE:" J0 LAYb& 0A3240+SL&@P  LAY@ ( 0#C2EY&@P  LAY@  )4Qh N@&@! h䬌t0( \n `D0A.[:A.[:Q` B\nh0( \n `Dq 4r' ( EY&@ Y `Dq 4rVF:QzMQy2 TʀP*ce@+  u8B]g@+  uDRA]f+ ~QW@+ 02 (Ѯ2 h+ b402 52 TʀP*Be@| ; o(Qxfx3w@(7,C; c6@MQ (TAw@P (lo9U; AκHAAξHg@PdAQA wӐt0A! }  `DQ4r7 Ig@P 3 (.π(0Q` -vE h MC ,@3 h$ò@f@!3 h䬌l- AɆe@P!f@ 2 (`TryvTryv4 @2 d3 h`Ye@P!f@ 2 (ˀB ̀Ae@PdA ged3 h`e@P!TLf@P 3 PKA5Qy2 TʀP*e@W0+ z^˂zÇg@W0X+ }  A^EYP`+W0+W0`2 /xD* & / ~R՚W*Be@ 2 >VzC^`@P`3 +, pz AπP`d)W0*e@W0+az !{@z#sKQQ)AHQQ)Az@A!1Jc9*Z*Be@ 2 TʀP*Be@ 2 b *Be@Tʀ) D2 TʀP*Ae@*qHP Cʀ8\!ۼʀP*Be@ 2 TʀP*@Ae@ ʀP12 b *Be@$$)> 2 T{QT\UTě*?k2?[Qm ˜`L%ڞ K<>"! іLJcZ^™o/ޝZ쟿efy:z!/J>Xg4[e`ڦj7@f_7OwYkϮi=;c>;:x'YL77ӧ nflm6ͫvC^c*ZR([%@,"ѫOڥ4yY/M'SO#[ 7V#WAbICKd2}}?g7ϸIiҎ>[H~77'"hC[D-K%3>=&c3,3iyCD8 r CCUq͍dX(;;"0 &p<KR|QԲƽ!&:Xj%sQF|&>嫱\ž+ڸK;-" Z|ݹwcZbRj^6wa}dhZ biudH!a2 AL-az0rEQ1/1ep831wO&d4 Ї 9W`5\XTbU䴋e9\yCCl"x#K$La(xEb,=VkrKdBT99&uMf[Z餺W<>gw)(QpT^AI$K푳vp xtboed Q$ J쇘P0[̎`o odLcR~.H+6c5ܬf69'c[imz[ױ|4^% mt*2f:G82*FUT\ y݊: ^HBk}NʧTTL:W掷|hΣrz~=!cӵOJ:J}yF+C)XﰓLV6dؔ11Jiy؇` RZo*;~'Oau󴌕<]`+/狔<<-#RpĎC(W6\k:el<&^wk;! oau!ѰvV`&\Cz(!W6Rz]cؕ݊=RAųbZ,tXlOfv+U@M w܏ct/J&zO_/kB/dq~j?A+dQABXȷW p75%"@caMDJMHٻ?eOd^]|;^4g:TrmpxpD&p$A,@z wRјϿja+:$fF%]Lgi{?0mQwVD 6l6ol r! s)HH&,,S}~$:^e(-vҬ-Њee(lIFq~m û.ȱK09=C>亽c8,jB;n2cg):#jU?W 3 ]ˈFC>AN`sC=P(^FBh'"&$ɕєDI~<5-+S={OQAT,Uߑ+# kÅtb+c:KtwRr.dDgף$fHU齏LCii*ssV˙\Uf묭2Wgm:kY[eNjl3ډ9o'v֪.%\`GQfXT1@ qrێ͍TmRms#gn=sXmؙwm.ֹuKIG:wM6Ϲ]-OsIKޠ] jA\N .wYWO rj[V`+w?;1qo+5Զo[yc&WX#Xo슜!T 5Զro[9C&WP# gH9*Bͬ"Gr r)XJsMwIPx &3x8߇`Ϸ ܏ b@]n2';7?' |IcZ^e?MڶQ~GBO.qEd#o(x+vZgrܭ'C&Gވ]L66;KrGg _x}/u:›.h- r^c:!tsK }ĜEGzHVGH+_x:O??gMo^^?9lyx;9|*73\(\ߐPW/fȃږM·lgo٠bjHFצ&*tTgnD\G;P)G%w۰$+!ǿz$m;jcOVg>!ia"6}p,v^|<\\tԱaCZywבZ;37z^ :08!΁p0:n~_+( ȋ  1HLNc]4"砼T9kS30<~6R~X/0H1.=!^OF ũ nP$HTB)>ƉA()VR̕ba!DݎޣS8L)G cz9'T7s, Q6ِnfء3GAWrbe/Mڹ$=z^Z}Ql%&C"D ^o$S=zygk[5_a[۷8PRBWL&//l݇Q(a7?E1Uoix/3,l a,L+@޲]`ywF&ł-"?tt㺻 iW[ߝ`6e;aݑTuGpZu_!!SsG"ӢqND;!4B?GBxV.At -]zK1 Zlmi쐷l& `B Gqtz?W\E\ʥˑ>ʥ'Zp9Yp8rsim㥵Uz%m}R_?)GǭW..O|Ng [b.ks.߉rg@|?^Oϧ||\ysNi3ԛԝ:F+ԟ:Nk묟:[_HI:kjiNoTc)~<2l'c׭h4"ԙ~ jcK͖nP2߿/O*Y\ZrkzWsd1R+/R+/ԕWV[qUh\+BCZm:J4QB'[J:ܧ cTGh̆$crQvb1r|I̧^Nz(fΰ:@*'C.O._NGIږxX0;Jr,&%c"*p*1w{{Q&hs-ScS+ uƷzvO؟"nYſ~V2<3ٚ/6W0Νw/LJr=LMĐb4DG`A?:smOrČtwl$19t"ᐿLڂ:i%̈sE7!-dQ%2.s ɦp%>YvՐ:Db;,zX fB, o7.` 0ύcƱL`XFqY+5 Tk~cYl6Vr5Vt ]Z`W`WK7V~5VրiM,d-X`uY XY XY XY 5Lke-ր?K[\D]ڂ5"K` x]]Y iZΨDPւu`]Y i(te-XЕ`BWւu0 E6a$-ظГ4`LBO~ؤ4_ BOz5UxX}$m׸;ۓ4]lOr=I5nn$֨՗[V_nЯ}I5j@g%֨/iMȫ6`cvk؀-KڭAUn IoIoHڭ^[v׀-Hڭnsk i&斤j"l iȃF ]&d@:۰S8aP%VVk(i֡jjVPe7*k*k*k8r T٤ʦd4U6! @k5k5k5k5k5k5k5k5k5k5k5k5kE~2^ S*ث0 j^ ֯ج`Wdh-2zEvK&^ݒ) Wdh-[2zEvK&^ݒ! Wdh-1zEvKn&^ݒ Wdh-[1zEvKN&^ݒWddh-+1zEvKJF^ݒWddh-+1zEvKJF^ݒWddh-+1zEvKJF^ݒWddh-+1zEvKJF^ݒWddh٭+C1+C1+C1+C1+ C24+2xTFJڭFJڭ&^VIVIVI빆P+Wddoh-2x|SF^eh-]F^eh-]F^ݺ2+/C2+/C2+/C2+/C2+/C2+/C2+/C2+/C2+/C2t2Xoޗ+ޗ+ޗVIe}`[`[`[M`/vv:.{_F#Xnޗ+[e4}`"%{_F#XnޗVIUafv;*|vwk|/3AP^ ^;$ޭ욹" O^|DI) ҙ:Y<|O .ƈ}s .7IϟM9n 91wȗΣ.;AuBj=yj|yy>Mp$;0~+AFv^*RyEwiZ_\7򻽳\~!%XKw:TRPӒg[*KW!1]wrCغ8K8WcN >?ӜP~`ڎ$Np(z'J/["av"A+F`1@)"YH:}OAƀ89,*+PI88 GI[vg49HP=d&yǺQTe$D5|6@mV<t<ӱܭ| Ά+&9KY%4-1O1kj؎8ymgܲɗ~nϥS~4rSH@7Kko#;r:h*`33Z1uO1i1eu2)yIO0i8L) P)RczL?1yLɢ<&!:c*sB ,*P.cNr`VԿJR4zLL#tUR3:e k2s @,9rAN ]"GK=IXoԿ /U:'5ce"z*NS'!>泱sޤ}7[<=0={2(uyDr?8EAcO[(oq 0] n| -ts/P۽@B9[šK~S*K~6S쒛K~VJIL/ۧrP%䊘Ɗ**O'mі+?w/ ,rC&1bW A̒AWesgO\ weMnH}~6be%/[ݱn>m1Q&*o_xA$(,F?"H\A/޹6rVrȍc/ n#wz;n#&3AOvsJݎG s탷MHpmcRΌR0pģp;wF?ȭ9薝O\REnonI(ǭ/b7zppwH[w;LvlPnw(&>Zo<*Q<- .0I|7Vak [+)_~M׫llaD.z]J/R_ijקa':^* . et,Z-^kEPZ*^֋Pz(SSG7x+F~*<%k ;Aw_PCC%H;J.=T=y9OŽf^`/`;ws7ΫZpQ ʼn{$i$qwO$}f* D_EgtAetQiSYP2a馑fV0P@7 @*k\.r s#Z8/WAn]U\s0*999eݑ,Xa8iD1;NOaMpiOgR`RLJ0)L*>-ҧfRLJI\ClR[ 10=90r{ f壳Iސ7]V ;d* -pszuwx| لQ ›M觰AT@6 C'uM6sše,bhjvs4 ic4!JQƻwnjߥ\cZEiBկ2H4Yg8 9k $A5EW;:cS[hfw+4{6!`H6a \{ep#BPJå匯xlȱ 4rב>{]iQmnmSdfo ̓ݺnI /*>M!B-`P[ZK9U豔u^N`hJ F>Dxf50V hC05T, .nBU+iаeD2D֣epb"TƤl"bqOcPOgODDƘ<0̋/+P4Y#(&ULj5lw٦ylnU x<~|__FS{6EUhЌUJ4PM`@C[Q4*K,7UhH)l i֠Ae ,f=ūYKU>ӄdق h h hAL4@A 4@A 4@A6Ι#x x x|<@Sl1<@<@9){Rr1O4̇{YYYegӺXu@͒]q 4e)654bx sz&\]6@:ܮ\kvLb&}L"`d_EJey \uՂTLv*4ԶtݸBhVU ִ]~ΜFQW$<8Rdɰ+7Vd}tǰ/g 4^W-%~P;B5D)(ݽ{<%"mGۃJzBv9 /%jU\`ځ#zA5teJdկUsړ;_Py4P,ePG6CVB;}D:Kt[oH+i>˜g NmW]=?{{~ih d9q=8z X*</iV|ǖm,@Pm^^~9sf~aU͆ќ;3-E9 dzC!7ADתEpFj٪Vr 5P&q@J**rn }=}^b'baPNҰI%frv/YhGwu2\Zзv"4fDVcv(?Cjc_cRQ)Լ!^%)ת~m1)o?;Z tЅ\E7(w ✫1_tb/,ѶL q8އgkGoV_mlHxRj98Ad=\ %:]\Q^Z+pɪ^.rpBT *DȸtU;$_՝z9ܰ3mw_KgkJA gM%hkqq,9ܦ^x[pz9X3/2p9W"hi`pր Yh'<-UU^ِ}c}W}Fž+|yB{k &U*$ j}x:KY(jU&:j`:8:y^u1 -S3DAi7}_Ȯ%@~O[겁q oϘ#xXW41;9{UgY2j8k?TC*gU>sirns\뵉gDMzm;H'V5l5r4gmbM6Q#p&4l52/j&jDXӀMDXpyg6gzm"lAMm"赉M6p&6D&^8D&mku6Q﵉:gDM{m&6Ql^szM9D&mku6赉ghDM4zm&6l^h00Y~YTF܇┙&77|-293vάf} DE(i̳M\&dq:ws#s)E"#OQ(g\nAsysyh֯o^}|߿}G}jzzMv,7>I/V僶 _W}'ȫ8M&ۛoF?~޻M|'cr#IYɓKMCA|O_a%1rs|)ߟ֫o׫p$?}s#`s__fwb0/c_>rqyG_Z{" /.L0任C=Y 1^Q%| uJ5WT&ſv[ˑ?)Ii8\aagR0݄c['iTYgݓ eC*I\z'/!w[/W2+ N+У9p"hp儕j^! AbUsCP깒TKJY]Ks㤈Z+[' a۬'z"/??`klmms-1.1.3/data/projects/CoolSongs/Skiessi/000077500000000000000000000000001247673406200205615ustar00rootroot00000000000000lmms-1.1.3/data/projects/CoolSongs/Skiessi/Skiessi-Onion.mmpz000066400000000000000000000652341247673406200241720ustar00rootroot00000000000000exksɱ6 ܈=焖DW{,{tfp( IbRtU6̬.huA2+++++/ǻ!]3q_6ӻj:9_֟0\beG7W~|Ks_8o=m>-glߦQ͛]*E&MzX̲wN6 uwӹĽ]eNtsyh\Dkf5|wo&ydLڤWCJPb>^,VUo֛t~㈋ ng9_):d=F^V{'94t^Ⱦ|:rez*\o_f[.3zDnqmc5jW: 'k͋3W~H7ŐvJgF.~ԫtV<~>LҜggyr)i4[\:lOW/܌bxaSXcFe+/.fַv귋wXWИ1 EKeK*#q*b,Q )`KGg K}vyX]m5xS*d6ꃻtXmF~+b6K/N,7&DTX\?}5+ .470160ʈZ\ٖ)Ŋ *&i{%rer9)ȷFw=Do]r> ܏/Lݝ^f+~1/a/ˌf4RXLKᨇ{;OΟvޯ]r} z)E'LȂn &S63W?`k8wN"Ol@j>Kˌ"Ӭw[A~X gQn,_r -?SPFMf:Na,sOM?p}?t:~{#H>!g {FczB\A8{OЈc0}¾DQ5IX{VV)TJ%UZW @ eԢ  GהRcZqޑ?ɶjlYľNƶj_Zd[mdKƶjlYR)tճƶj_Zd[mdKoyaqlƶjXTzVc[Rll)B^ez*Ց-Ӫj|)i$'Nc*U [*%}>E%ُ~7XWp(jlfM$qlƶڠ"j#[U8QӬllvJZuJ%?"pv:5Z"[k#k-8[klfGxJSXNSs'@֋|~dGb֬YYfejsN[9XT s Zck"[kۏ,i8$Zck͚N Zck"[kۏhZZ[)i%)J~Nak5־,ȞfMV=fckSJS:lzGv4bk5֬ו[kl Z/6Y=ǯkm_fcf5|'T.6*]y6+w|S>LNM7죷uIGb3Mq۟~;LtUGfXCZgEn9KL7엋bu7M?BU^Nr*xûwݧL'_v?n˃p|1?w/X%??Oɏ|By7fYo%?Ļfyէ/?'?/ӏ^}_'/|=+﷿?,-N>_~_Mg7ϛmחW߭_=?^>,q?~gOɯ__f??<𷿎ן?^3^}od<LJׯŏa~;ywp埫(}}oޟs<_&vww?|]i8WΏO?|o啳|gߏ_y+Swx߽|6}|~x1syqr5_xzY;l2}rf?z볟LV_VW>_l/ɦw'j>OgW$Sik/le^y;'OVfZ<${[YOgcrojdթ>*dS >ػtXm2ݲ\.b6K/N$,7&DTp\?}5+ .47017!&(#jq^_;I4h6oKcf6Z/'%0VmiqK(z)\_ÿd~lfMf&a2u9Y/֋oJoxZ7^כLMc &[ifs8$l g>aoA"bSQW~+pY;aGϩaƇgAE5U b5k$:(.(#{ڗN. f[[|U4sjy=ՕN2ru9fdߗ78jWqOZhLyF#kZL Ki=0)m %D##XkSu@?u@``<%cXX[c3v:圱`;u x{``CJYL:H{``Cd aOv: } T:N? hn?h7|?1|X;-,Wk z44YM;$~S-cZ#'L 5= H]Ғ 04id4)BDPMڒ0HB?E 5ZPW{jFafI*fU̪Uq;8oXcgÌUz=;ֳkV˥J౽C]mIE>7VCVCm`d z㗠9{f %[CVHg+V5'>f'PIcE̗NΘ9U%'`[%2Ą@ϔ[(طS%++J q%ŬX HW_D--P\tbaG!C )"Җ|HZnˇ<1##'E-'@G+a[ˢBk <oJ)]]ktu_MySjq׋t*mi-zU<5}}^]8+[z\wr܎>)Zגe0;`vlQm3m !2zחEcs{/m6r{_hc/4rvG9P"ݢ2h ߕMs eaK0"O>>swW rO4۞֎H"8sٴYr$S_n2ߙݣtz" |Q<PGiONĮh2SMf+zE񐧝&٘>ҋgՉuv^*>ŠGh A79yG.u.FnaսrZ,(ڿVսF#wZ#'Ai\5 : $ta1P ->G!"#0%M |Q [+X\:\-ԁ z:  -AР dr;Q1]ttWFHQ 1tLAZK X|h>=G_,>=`dӽ^ǓOZ'>? {YO%>0NOXto3`8gӽ05ϐ{Oӓ $B{ӓ O'?ğ1 ̌b t~yUAL$ X<D/05ɏff1 ̌b d8_`^ɏfe]._]e?4܎O[s5VC}ή&IBlLH%/78>T< ch^^w7O6U۫tV|~>LҜ /FWfmwgd/V.r~W㫾1xQgnַϺdP=XVK9݌FvelYʉٮv壘lYٮvelYٮvlYٮveϘlZjٮvݘlYRٮvelY:ٮvlw-F^1۵[ bk=_lf{d1ٮb]#|,Vd`=Xwl|Y=w{|Y%w|Y w|Zwն|Yݚw|YśwÙ|Ywҙ|Yw|Y}wM6v2nc,]638lvffv滾=c{ ]6;0nK]6;1ߵn]6; 1n]6;=1n]Vz1n]6;w1n[]6;1ߵn+]6;1n]6;1n]V;1n]6;2nk!]6;%o\.77575֧QT}#'i>}44ƅ[5Zܩ:56maaK{ FG;ju>NƉ=$fo`ɷЯ[mCm6!6| zHk#joYɷlCm6VU| zHM=$foQɷPmGm6#6~ H͆ }fc>oAA(,Gm#6 ~{HՂ}fa>oyYh,C!V ~JH=ja>o xYlGm6!VP~H}f>osZP,Gmv#6 ~w{H·}f>olY,C(#6 ~;H™}fodYб,Gm8#6 >*-<ߵSO?:JujUJOΧ^l< 'ߞnB`U5+TF5(Vt_n{OQN!: VDXG4W*DI8;~zi目_GU 딃_Wyz|]ԑ.m|;ޛwz/'uڈ߿UQO:wleܤzLγU{^*Ur>]O|USV3a6+a6#a6>'DnIG)WiriHwv6;y5YCn,^=oja? 7ոW¶5poүGy<<88< &Cf_Z[;憧Uw|s;/dxrkGHY|'-{TBS6ǖ?MP&;~4r'r s'ԪE& 53{$}B=h//yM|P]*y&9_U/Wӕ iZDZFy֨AO{Q[lA-ז㗶p ׄ A8ʰT$+-ȫ[-GH7@%#/6Fo!8&+!_6:.?0Z $&Ll !pO!ے%H#PUӾB 4j|#}0hǃ19ӼnȻnؠvCa;w}Q6  Y yTH0fp;mvͶ9x~)|~ʧK>]v!o|vK>^OA識~A|Z: ovAn|BŐ\ : }4rP9X+TsgrؿvĿvvswCnsx?OCOtɧ+!o|퐏?^8˩BP"F^,f5]r:{!vq}-~8ytWnBQQo[dNZ%&R?yn0WoC>-gY^-(ܭ^SGGQzW-;^JDb'DwKT 72-܂PT1n a&ct# .EFYjzȋFьgVRH7tkVFJ+gz8^/_r;b_|1rE\l#ˏyU\qje0 J5|G<(tyȀñ-5l ٬Br6-Eixγ("s@}=/> [vDŽ[r#ҏ@g9ۻv^'Q;A^hgquœ€%>9P"&xYFޝ\`h &z)wIg.8KI`%KX7ŌNݏѹ}niFWi|ZRYH=zM tZ%b>4d&v /A(Z#tA%Ĺ3ԙ ‰lT~ʽף}Wrj|?nڍ_ݞ|@p{֎٪TE"jIl!ᡏ]ߵd}7An<&6 4ab^ dp3 I-I$1.ۍ\ @lI@' Į>iOB]AFZ fھBR7:OAxK܆Dk(܈\MɤA |Bq4XeҨzr#yѭ2F`h5؅lUV[e=ʰ8m-&6XUrkmiֹ]f4'#aBǓWhB}aO62t3gfA ( =̬hY` #03+2+Zob6 3ѓt4W hmf˸ieS4̿e$R4^( "̮mzkhffi,*,*N ~*t UIxQ}\Y4(TF{rb#mَ?T':6d3p4Գ& e!zR n+avLl0Ed ;-5@6PuB@yFv nI_l1Mc1H?ʼnϋ0:!NJN.]Sjviپ)$afM|t-`ܔ+F4թP[[lFe)ke3;\Mba14ՅN;ucݞ (k\M64b>0s60҉ $(l~ ᒚNȀu '-9{٭zW &vKH0KN ~#UB焂H ,a3,hߠx^bb`qEHz:f]N"QNunIG< #0Ik`I :=rx^>6~p ;UÕ wep.K}DFeٴB  ΅M2РHG3M0uh{by`vD/qZJ:XԧQH, PNG-hJVEn[bԠ b^hcؒ\u Y5Ik޶w5DII9hiۃZOߜZUk94Ņ&{S%VTfwqMsi;˦q7MyfF{' o`d7Lgj8+ƳѕdJ td= V6*?s9gyo$N{8;+'t9㽲8g2g2*hqsƓDWOv!WV[elUƾ26DJ\Qe'`26,ceO,iiAAnY*t`^14m 6hw5Q`h T34*1)_LZFb)BbD0fܷlNbqsCw>/FV6;V5u Ѽס{r5]䭪e^7އVCZo-zU<5oػ}}^]8~v=n"yr>?Z.Mn~:*?ݥcG~dqi;ݣݣ=zwInP61rau4juoo_ӓm6޶ڍm[M~? ׊{/mGы:ϳ=)ޓJfc{JuƢǢYXT|y͢Ǣz|`;,z,zO)z#ws>fE|ǢǢo=r,z,zO)zI c^XXR@==EE)E䫱=N%,z,zO)zâǢѰ=試7,z,zO*zɢǢ'|`;EG\Ng;΢w 9E8s 8QD/v8E8r 8qDp㈞΢Ǣs 8QD/q8E8r 8qDp^),zSYLDϰ7jmɒ+GirZ,9U%>KM6lezDͦ&!jCmCȶHGd,b#mPVwl{D͢="fmXkȶY(?d[-R#mH6lzD͢d!jAmSȶYGd,B#m@VolzD͢="f{ȶl&lI="fcȶ\#m&vlIE="fBKȶL#mlA!;qz< ƓhZcc3=y,z,zg57EE@lm==ѳ'ϢǢg z6k鋞z,z,zgf٬¢Ǣg z6kװA,z,zgYŢǢg z6kzr,z,zg٬ȢǢ/zVk[,z,zg+٬ˢǢg z6k鋞z,z,zg7٬΢Ǣg z6k߳,z,zgǢg z6{~4,z,zg'YĢǢg z6{cF],z,zg5Ǣ73f 7t^nV1Z%$|h٣8'nCĭzO#Z*˭_v;Rn/ݨhTS}2O!Z<qTS}O!ן>Շ~ThS}zѧO!J>Շ{T@S}ڠ'OAR>ՇxTS}:pO!J<~uTS}?O!͜>ՇtrTS}O!J >ՇH->}T$>DS} ӧsO!Nꃤ >ՇV9}(qT"F>Dx>\rsrAC#)FR.AA<89Hy@Tsp PAáC5)jR<;lR<9Hy8Ts`h0C9Hy8Tsp PAʽ0Hzr?یtnHeSv )Gv.YMtfy^4.`]\_gt_Nz=չ[\򡗋j:KL9(nq5,D!T7 nX~uJ^N7۫tseKX>|*n%;W69wj)8[Gqg*߯WӛO#wѿ^xﯶ|˹~nP]l4,Oߋ\krǝMIՂyg-QI!ʶkg:#]-{lrv\=Lfx/'zQ ?_ Ok淳rv37 c7lU9{σFA2YÅ:5\8[&n)^z8.|@}=/> wΞH}/rҏ[ߣIsi_Gp@iV/KzvW'! i]c )0JQΗM!/M!/7rwGS]=b>^כytMunrCsOs=Q+V͚صILi3YI3˿ޤtQak94@s piBy-r1>aRsvzռ+ގy; *p7'cގy;v(Ȼ1Ƽwcލy7>nȥǻ1Ƽ٘wcލy7>ډdcRFGO: a6wPFа!&F`RFqG<ёU?n5}Tq$NGT9*4lQG"vTL$!L:[YNkV"P`ɺ oot9bVŬYQű/9f(~ 'QgMGC?ٽ;РDOysoI9?E|| ||ŋJ3| >+K^5ƒ _T jzw,wݕ$+w__n%!])!_/y׼[_󹸨<:—KM/J]G +ޓK%—W-_^Er/zO_^O]/zk^%UB+ޓZ=W'0_ Cx_ Cx__~% }9) }9 %N8aޗz?@|m|B+? } [|?%_+@(jp("@ z@zK@kU<>&.X2] ĕz2z.ÕA(ÕAT+H\G@ P-W WPuA(UUqE*"qUJ N%\@$ ' e2HB(dH$@@NQH$ԁR6CB( ԒtA"B(U@I(#B!""4}bB!,&@m1Fk1  P,Ƶ2b\R\WLpU,W8'HJ uL@┰ev-q@\z$ H!qU qk?@\qE$J0\+unv I<;L-p.H_ oj0P@anAsqE.kO K c $J]S(%$־k__GDሕ/qWW@[9 H,|$~#}#}# Ww# H\T*"Rላ#ELV q/%@W* )_ hӼ%+NjH@fTQH܋Jq+*qĥ< RY#GyBHTDW*n "E^(Dz%k^] /JyLW A$+okVO!R+{H;Ck-$=<)SJ]y*%[ \=^Rʭ@TOY`N\#n=+""kPԽ+!TB \ %$t$r@ e"" e :](m@dWB$ UBDZ@P Q(tK% ]Ev"y".H@b+a&'$'f@$OmH[5= "{R=D$0IԌ'=LOO"R]}ȟT$*\iZȠwD%$R(MB.ÈJYqʠy'T%2(U&*S,D$W*ʟH IO* qQC2} eT$@ e2HB$* J3+(D)H9|@I]i:IH9[D(y-"t<lC9]' |@n-5$ `. el. P ] '*NEĀXD((EDz@))sH)'=Dxۄan PgQZS?PD]Сs)?P@i,\D| ")n(V%peAXIWK+ |A{_P"gp%сDj6@\$ W+D  H\@$ p%ukMfp)"|A ! Uy\@ XSGݢ1:h-F+"P L@hekZ 8*P#쬧#H.jcrH^P",~L&^q+*U SO0 `ɤ*WjOԍ`EyP U V8Q̨D9PL&B #aD9 ESQ~}*pG wr t .P3^4M g. ;ļ( 11 93МX3y=oy@|^|çE<|VpjK>')/M 6@bV yQ@ۆ8ԝHwf"ݙG3Lό >/  'H Q@F!'>+ 8Hft"Q8"¹H#)}=gDሐ}9@H|' ೢz >+ HD >/pD>Ӣ`HXΉj)N KC'D($ġ3"qqpgD |ZT-fO (D bv@|n NI@|v@$>=Őu|z4MQ}R IK܁H&?&~W=y?N~bHk@tr V*C''G#?h-3 D_?ԬF_G[p\Ü(0UzA $ >;P,|(:1R?אԐx(Ds#] SB 3 >;H2@PC($ \g{"Pe D;@)w ԐD 󣀸c@|v@;5 >9OjH|vB' q@ ODQQ΀(CY?VwİZ!X!W!ӂcЧ?`>Ne1j7s}$-^S$AT(D7~O4dX@9v Q%' Ƕ@ qW@| Eyo@|bؖ@ D^"qD᳢pD6RS"qz9hpA8Ns>iRs0Ԭ@@ QLBIQ@<i@:DҊt9+G̋鹈ӫA(pČH1!7D px ipx ip|* G|*Jq *R)n~J:SSQ>8 pI^<1)rD~: * Ȍ!fyT &rT$9*T #N ωJ$NyL q@|ZPs^D X$<1i*YS@([ tqYY^gy<@AqW9a^y΁MTh;MUE*tDsUj! hJa"`OZ4W;H| !Evʯ;ׁ( >=@6ԍlAUH"E-Gg٩hJH̍S#x j R 4U_Ԃ@SUj MU#Pm Hh6 `BsUv >? QihJ- MV;105$>?*C]1W?x^J-W-R}z*ԁxh}) ̠*u̠*5A3Uv@$>9@bpTRDsUHEDzMWEj@MԁZ@"^lQԞU׏G0OA]|1WR{` =ՐA$>CՐs$B @C gWQՐ RHDG7}\7{Щ835; S5$:35$ޖ +;Og3s >; A >7H42@voT~gׁS_AԠxHL2 {;=ώaȌskH|zY @<8*<: @<:yxxn OHǧ$5$>= ѕufc&#u$xa;^k *ݚ(-r m/Duy$LWD}y%Ya\5:2 >;u$-Ѹė@o7=JŠu^7@<NKAl@d5m^C;HM8A{o^l@b/Wď@s@|zT?qWUýԳu޵:3Ro$XqWƩկVP7`YMXUki'4@FqiFA];hi@|^`]3kD q(k K&R@|fE@|f$Psf;q;C egB!r` 0xۓ-70VL`rWa0bt'wm[az,PPХ)EHG>t&᤯CAGR4\P#Pʤ bG D@:;HGz.RA/uzYthxQB*<.*ή@ѰZxBiT"FP;X4D(U(mQ(Q(-ޣƮDBp W(,OqJC) /<,EtL)"$EtG( W(-ޣ S0pBcJhBi^Ǥ#LJG& %hdD1 E+A+ԭP:rsK˭P:rqKP:CJ:FPZGcCJxciDBS:ƣQǔD33GG:g k0b-kXPKDs. j%Q:']rYhA瘯uVs tN[hKy0ѠTjr$CMA $@q0*{\ l.Q.=]RvEw1ǑdydɰBa'xbiN2B,C:-eT(LwoP؞P؞%bzr0 Ri ;j 3j `+KE^'ʒ&fB}Ht#ӽ2M B°I-gÖ3F< *R0,R0.R'Il9KrViv.1g\-gÖ3aYZ-gÖ3aYw-gÖ4u]) 5*XU)azQ0t`|nGͬfiyh]9# *#Zљy>ެ&o?M?+돗Mc7MI\;z9)g馊\wdxb ߊ:cj#ċ*bq7nF2)Swq%}"[ =0mg4[O-_8xw'lVӷټU2r9Y/֋ي{R^N{t? ˉ0exY.g/pDY[NWy,Xw 'ӧ,c}*5jqb{!V2yv>+8jj%?[8>!jm|UyJJ5b"g$SB_:.ԩe`$~+գjUa0%IT֥MbΕ:=W\)֨EF6W"аN]Î FQ3}fq|!x7G-ƽT~]ޖ *~R?m&74[ m{swdXI>}M*{EXKoK<#NTV&t%G4[\j,ͣ94y;Um]]eN2?#/4 /I7ow//]7׌hq&NLDJA6;j@gf"Lv%eG"(IԌ{@%w#t.$F]m;;q`hx캌< c^4:j#9rtAWe$l- \\^ru.# u{`:=NtIX'Nt]R'։.DԉuKD:%u{`:;NHX'zN=f:#uw`:;NHX'zN=R'z։DԉuOD:'u`:?t DԉuOD:'u`:?NIX'N R'։Āԉub@:1FR'։Āԉub@:1$ubx`:12Cz}X?t<+Oӄ?&ߍx>..>^8Mgדz:]Mw_Wr}+q*w`/Gf2y]du3o˯U.6 >כGOoΧB@gy3L7*܍&"%6̉\ LgW7Ks}]_$]~i<< |,7 ſo?ݯ~7Ssf9YMn%|{/һN{ XS$n_~_oFft?Χjo ǹvG`FyqtfKQ՜}SMxT9Fe?]|b~M~?j:9D]lmms-1.1.3/data/projects/CoolSongs/Skiessi/Skiessi-RandomProjectNumber14253.mmpz000066400000000000000000000437651247673406200274340ustar00rootroot00000000000000(x}[s8{ 7bem؎誝ى:mKT|.}ARD&%# Zhy9 4|VbJxWOzZ-ok`F՟cn2p^`p&)[O>ΟUj4ZoL7 *$/s|҈Z,+xCYƿh:V/FO] 揸|p:}W6ɟ2x̦W@t=4CP tIꅃQe a>z~Gϳ`j^~tެ7峖#=|͇j4(e?4Z蟣Tw=Ɉ?mfϯa4q0>?.?Oqyi~|ZL d?gI_G;/4~֬6=\ =M۝}Y=MFM^U%mtٶS:=\?s&>v9fSsv?Y(2=mg|l)]Yj(>Tyb6~\ս>aesowFYNw0Lo|w%~?.V_GH_HkѮ!2{xПs]U=eA3ixP}пN 0l;Qt2].Vt|j1eelx|ft-WW[h>4nFA>xR쭥,a5z* *hR>|}\;S]f"r5Y5OK͖j>r+߫EMZԖ "zҜi}y\kaez`ڮVImUA7m6VѶu|Dc?^;zHWix2ܶN[ji| J#T}q+/$cԽ3ݏc 'An"BǡP]:"{:${]zPv갓PInBw.BwBFPaBE1BA~k6:J_"(6͏B͚%~KB=]OHKH⏴Х 0qCHqr+uT"XZZ:q),GZr%GZx.wiPPP_PNwiɑi9[^]Sϩ)v]]mOCB^v..{Z\fߩSp?ҽ%"%.>^]hT`7|=.ޑ.//M̏bé>-&Et~6dۦ7{Q>K؝ke4PWLؗlSm{=3m{W?7|d{:[}}][lD~*p}դ,>Tyb6~,{}xs o= SmƏdK)u6}*j=O?߫ƚ:*hDOtXmy3^7l_y9-ӍV׺%q4o SvYM7yo9jO/T8{kwa5z*z*hR>\k)ZgxSjf"r5Y[^bxNm!ÖhW7"+r0+0N^9Ñ3a u,^qp).RljŦt:\"ŦZlꋷC)BljŦt: EM-6[U8bSM}6x."""ԗ.j˕(G[rax[-֒PPP![HrՓ#-x0ziɑ[:ҊPP%[HrՓ#(%DZ- ܲ.GZ#iEHKZZZ% r%GZruGZQ9[aQ&GZr%GZ.DEEE/^ r%GZÖ#_c"""/ԉK`9Ғ#-9Һ#sKKZZwKKHqrBzNEEEO)wo{BUBi^OVOxxEgMOuWu#j^|-j@Zko{4zL%b׋UnjlXn?f⡺[s>QU>ݹ=-?4\n^^&?Q?/g[ yE7̙Kɻ3lg~Bf4-}9޸V_F|&>\] &8iS$?ӜR|XmPt7A?l3lR<5gcy|ǫxysKo'm7Q0#Q杬p^j 0nK6~\&U_GHE_ӬGe0-?o癣=eA3ixPm<6Y6xNj3ΗϛbY-f~&lO7Z_뮗|%L ie5刪>xR쭥,kU_ƛrLD$ksW%{/iw9ڪ 8C\acƙvOfL;]&3an= 3Lwʼn-3acZ+S<3THfL;>~ҏe;̴SED3TJfL;U$0N2ϴ[tvJӒ>~"re;̴Stvܖ0Nw2f)Jfv|}3VǧY6qITULy8!#Uq*rҖQ=fHh&}DDǥq8|Z{ubN~}%\t|YdiRlij0z,~nvgSo*^UbdosUb^_Ŷ)Ւ9V<*']{ko"l쥠B["0: I&aC0D)|*lm${{õJ[M?h`;Ksd ?>;Gٻ㳳d ?>;Gsd ?>;Gٻ㳳d ?>;Gެsd ;>;Kδsd ?>;GsT >{|vZ gR)B9d;>;Kg稑"|b>sT>{w|vHg3R7:;^fchn B>]8|RA^`41?U-EE>Le*z6d۶7{|8Z6$KV]CjkHm ѣ]lm 5ԏp.5ϞTAyYt+ۭW7i'W[\־ߚN,o ojr|C{tv+mĝw~k':7wsC{:74U:;.t6sCk:74wsS{:75U:;vT'yVy<7w.5VZA羮n d}VZ@羮n>u}vK[йtv+a R!}[our*t-Jr]W-WW:֊]W-EGW:0]W-J[:;]W-L[:;]W-O|:;elY-h6?>67}uEGg6si.c}{h]qMIx$׾:i[&m0O,]/9w'ʜ]/9wɜydΝEk2s1s9z̹wJ}λ^$s}TN^eMKEdzr-BmF)y_% ) q*c.9&TaxK޼jTΗ>pM4LYbyWiYMtu9U۽hrW_Fee)YYn'hmp~kFF5lW0߯v Uhk]ó{5΁mא~k0pF9 _ۯv =h}k]-{5΁m^sp_F5_֯v %hqjç^ku9/Ug~"g%9 72L9 `bl D.X$rIV74LYd:uSyw++*Ith%NVth%N͎Vth%NVth%NVth%N͎L97jl4Y/G[Z6`0V<*':_{GO8v=z]+P]w8=9txrC''ONQ8H;yG7{3tyhJu5|˃'"U$h|WA?2M\' ~\|00xOVapa~0Q=aׅ{* KO$ . ?. M\' ~\ޡ00x?TSapa0q=aʅ{ W6B\ ~dapa0qaG WJ\' ~\/apa0qބ{YQ\ ~T2k_| /Y.;)V;kΫB9tyP1ȟ+u;n'vRs-u;9voSRuJS ⋫yva-c̊7.nP껊.' q4bBސjBސrB꾐5BސBސB꾐B꾐BސB꾐BސBސBސBސB꾐mBS1P~< lmdj>ڮ߬YXYxqqc <~:Ve 2ӟ}G/FuV>g y峊Ϫhf(C4/I8"(_vqm _ qU_|Ӵm8XIݾrMm%AwLpȻVѦV/Rk9|ڛUG)/8_-pX8+SCh!CL qBLڕ|BhpIt&QZD&at`7[ݥڶ^sgQOyxoHW\佊")a|BHVHl_BT'6R-?fzue\{˪-Ӈyt^&鰝] mf7~&C#B^n{I3|&γ˭ת)7 oΔr$luc{ jO=ȸ먷3?S:*u0{Ow@UJ"lq3|% b^܋h AAAi8IDPz!(:a6YQ*(4AAA9((a$|?E^ŘAAi rق"[s +%""rpE"(-(:BDPDPDP sOU؍Q_SΆj}§ӎ;)۵r8ot'X_zz~v=ѠDO a#z±KO~] #z±KO~= 'J{\^<`hf:{<A$(q"(vv7;;h~ڗW}^Ϯ'ޯSJKiq)-.mK RZ#)-^GKiq)-.ťx ťx )/x?.ˈ˝ٶx 3F^\};&f7..%ދVU 9s@'"""E ߊ묂"E "(SPhb{K"[n-9}4dݼg=!DO=Ѫ' =!E EOxz⵳xH-x@dYމx}ղxKa,^W&7x4ޓd^Z"op\^_Ry/!7KM}3fsnz(I2y~2oݣDq$%K[W7;QҺF}59-]IŦ:Xg#q9D9D19DGNxO&<{u4F!(6Ծa;}V$z1U]?>C0Mօq,8U[^k皳v6{÷i+V4tcW͝*z~QKut=*izQG]7Y7ȞQ\7?p8jkzI>ߩ}^7qj~NkO]߱娻ڟ:Re! g>Cϐ}i-b/8~4~][g6å}ۤ}qCpg>zrd\ϐ}3d! gV}ksg>Cϐ}3>1A׿^oOF̾w݃QϞ۽iylac6Dy,̒,9QAsl"燑weα~&Mqy 668XqO#=[) Sŵz>וu*Ln#^7r{o \"SF)/bDZg̶6eVbb- S߯f-m=M%0MŨ*,`"bwfctM-?򓎦֫6 U7ƫ6JnW0L94l{[3_r0K|nm6jV%|P -񻑁ۆ?Ts[Zi(JOܡyaߟϏ`4خ+/z-16a} ]6JVC F,-P1@Xr`` @Dj<8ahV^8<.c \GQ Wy*T`P)2{h TZ߇CPĽpqoQnGQ ji <8HTH3iRB!( !lŚ`PUTB(تʵ2BVP<ʵ2b?Ēm`Pj۠XF#(~%kߐ?rAXGP}#k,M1lpg %ۯ3`3lpPJ*b(u% _qJ6dt@ɮT v`}`X `F,PJ,(A5v`"T @e;}mz+6d PS(؁JvX?PCR(a)А"ʦP Lppf;Ab(ߑG@(" q2+< ysrpPΣ%="vPP֣!G|( 8?="s xcPcW|LlC}2O|l5"$26 Ǥ(P[PcJ|l!pPcaE>6z8"pP f(%X<bg@,3 {boc'zK=ԓ -~h)C,nXI 3 {bXib7JެR {ae4bO sb'P!B@%Pi@ _P#3J<PiBiR7LӖ7J18(aB %[> {H2 _Ay'WP 8,-y_aS-oNB6 yv Cy'WC [SWYgκu}3 ?)Ca@촣{mG83`k]w }w!3 v[zFRB;ǼbϼIP"g@(tGP9 =u| oaO .o$1>3 #83838Y1>3!Ƨp41s8lX Et<b70,!;i͕cvhcvzAVp( ڍKY;0ő4fאHRq)!!hRMC+ IqS`:Ŕ# Ql>5 Q,(耢}t@>vc0ڧ EXNQlG }qhl5}A0G1 C(v>ٜ0G }j8(@W0G(}xe30G3 FpP[}sp\0GOpPi }@.gM7]w6>s+yxwwR[ƀ} O7 {>mm K=h9`l7G/L/.&i\.o`-M # 8pX eZ6C`8,"N8,բn`X)7^&ypX BaPX+lM6 ᳋Di'.~' 2> >487h8o`'8qZ)+)%$%d8|BI8|@irIÇƔʼnFAaѦ9,ڕ f˶] =p aѶ%CݖAsے7pXY: oۼAz]-3|`8g9s +7gFg-9riFLJ-Irip-zhW%iZ# 4a$3a$-K'AǑ hyْ6ȁ-ri -rip-g̰;k@,92O8,A2o6NHq bg@$DހvBn@H  !6 $fgr jA8+T@&8-< d % dK/N d>N N d5ȁv-yl+# 3Fqb 4-N dGn85@vs =of?SM,N BA-=sd8H$a^BĄ$a8HVK5 $ Bʈՙ`CmVd f:aq ykLl.q06nVwB|@;a|@;a=fw5p ,-SqܱAۄ7d@;%@;%C;ErhtN٘٭"%Y0kw_VE$++Sv܆h 1]*ִ!k;{uplrҵ˝>ZLڭM!0mL!0%K*!;)tJXҵ;!7-WWQXQ`H+v"Еm'\SZ r!U3Q!0 ʭh "I"l-LeQVTGV ) "p 0 Ҋ/@DX&JIL!P"p «Pyw֐|fŁ;JKL o*=1 r@#y8e8˥ Hpz"M.aZΊ0Z..''`8H AٙԨz S01*4fCOAZT+' % A0H fCAJFp6 ggq A0H c aAr0Nb688fm`S iA0m` { a`VC;L쨀SL̎ -Eנ`P28P $`(Ab0]a<8+05 mS2̪N  a0Ld00+*l N `0;*x `0;*P `0;*88(kZf`BHa3\|졁Y8!qvv0d%~`ZT0ldk8 p`0+96 %Gl`3ᰅpv8 ᰑp gG ldjs0b+pupu8gL f6-86Y)-l- mdž6EcK/5Q2d=PDQ;Gu y4PQQ{.4`fu Q;0etJȨqt`4a8,*H҄0M*Ǩ0E bp0聒1j1@AB܏1j* %cԁ0ʋpXw!a ec!YRB-m0_ Hj@HJ}a$qF®0a$RZ`UBF-^ ed(v(Ȩ`UFǡ:ƿ1 c8F8Bq gGQbb!E쮞B0 ޙdСl:;@8j.$@ej8;Ņ18 X ;@[3~e`PT XunfVP%υ>|gPvG xFPF4ս-3}ˌg2`Qq0Uϭ6u < v;@HDI;@Hj]ƒЖ2hq3N}8;Y r* ՀXZOj@x1f!0af/mIy=j@xS` =8R I҄p Eߊlîjɋu%AIm8L2Ge{hGB#SiǗx/-95 $mu@ Q8|9 MT Tk@H2|`*XՀH0Xu2 V X:V!QX3$ z5 $ KeÐՀQCP]\J`)ˆHda\Kj,w78\Nz┌ \W0ߚu u .+p( ibp]BKBS€И@ZGPugu ̺lwx L,I-(hV*']f86SX%hq(-oJq7.jy]l[mkS7 +CR,^ ?3)pcX]ٲ/RmA5D஀v{0eCj`>Ag%{ = ]1R tz)~xb)ةO>}/0v3i|`8(CAz{҃ =] gG`8 >hQ0܅(|)y7٩ `b*Htc A0eS ~q(:B,.vi?.) ԰CX*b\Ž![j6B vxTWa,`*#P#8…z* ʎ04Ty0ȸdƯ][B[Y\ U i Ծ.M86@63vLxM &g@(@va#, }V|6{  ͌[hxEM {ai8 ͌[p,pȆQh\h]`,4lw(hB!ql@(@3# d3"L GLX@?P~-*y B[ X*Y6yJlkbc7 TjaB-B\GyՑZ!6 Vn_# )" W46D6prVd@gMaT;cELZ5+`n|:"g+K}1׏?&F2jb.d4kH =L 3,aK T f1,aK fbUh G@T4!NsGrs'p%5Dh1gNsj9zF͹87O ߹"0t<N:T)@WC5GTpJFgfmA=͢lҢJ a(. MYґw<ʱ Ye{BՑ D#4~`.C%B!0 !(D(D!B68C!  hIFf8C=Ig(a(a(@wd3P?2C+{=?e=Nݣt3~ɺ <lSHT_^e?gݾfʡR> _;߲f0"w8e7B̦g52cE5[,xh~߲폫opf5rUHd5o>Q}>M+/z̦|yt=4+{4tq4g=o*A>Z?Ēxt_g#suy5#7\7(1|?O7ul5,Vz~E?OBam>~ZLTlMȶ.Tj%+A9+]3׃,jie~[U<[r:h^ʷl^W/4*h;_I'Ot2ڌ>\]a\76xx܄=C{77xہ]aSZQۣKQ;<ԕz˂{:D >% >x7qk4'Q*IrmrRJUb)NzU[)Kp|6AtZ7 b:*ZIeNvxP{ŊOT?[SVT?[R?oIߪ?U'~OVT/8 Z_pR;NVT/8 Z_pR/hI_Ъ꿰U'a OVT/< 'a OVT/< [_xR/jI_Ԫ꿨UE'QNV/jI_Ԫ꿨UE'QNVTŭ/>[_|R/n "apTr:KIUxe&aqPטIr~0pۙt4_ޠaZ|Ak|~L.MILSHrC}EQ;_lu(?Z^iB.ƗrA?w?apu}{o?cƻ] 7w_|,V?pyz77D3]whSmwyd_7WEl^~|eͷFzt2:0˾sF?nݖ/|?}w\ߏoϿ ~y4w8{k=7%7~lRLwUiizni^4Z=Lכ;oOfO~SaUbt>s~s>iϛhadwPq>bX}'r5r]ң_}Wo|񉭃45Qv r=hyιiWK*w8^Hh=y vIc>^W^[|K1dkN|ן|dkvYk1̦l0[F^WLzSDɻ;[=5Hlmms-1.1.3/data/projects/CoolSongs/Skiessi/Skiessi-TurningPoint.mmpz000066400000000000000000000506551247673406200255510ustar00rootroot000000000000005x}ms:!7UMg='wwSU9S9׭[SDxn*=) ,kbz4x/tE?݈;?_:[m2Yŋ$ub?<2?d}R"fnιne$ofM֏70=HG^UN)NO7I|IU9D@*SCuVս(-.{|mɺ(seu$]˗tP/QlR\_eO[ R>8h[&iE;=YW̶EIl˼NU٤h"YrFM^&!qh(WAq9*fcU-e:eYZl{Yi}˶os\lۇѪIE4*y]UmUyOYPZhpS0b~U1Sʖrjʢ v!^)*?L^Y[8s>Xe1T73UUTb/Y\kp͢mM5וB-MUoPum7Ado \*KU)cB`;y2z6d\z>`;fd v+ײ<^]<ڵzgq@zq=Mf;IexÂ2{Ywϭ3VvuJ%)a)r͟|1Y}RUyx}I׳roǤNDIV:dڟ۳SyN_Zuu1*8J&Yly.,MS^dr-O*W#*X>iX(YTe\˥- CO E2}4k 4Z!rl=J.fhuhmJu|"l >R^֧@A1^Tu{ZU&_T:{ҭ2<٪W| JUvnc^N[YS&ĊѴ v|W"ŝt):O{Lk([?cOhЦ2ny`ZYhJkzr?3nZduvruM8HeYN#R. VU b"nVVPUWj@uHRd 0CaF,S,DG{. JbAIؠ ?V5܇};;]ډͫ=ɺn[SOsG'L2PN]MؙЙ37uqhBB998 kl΄Rr}t ~@^h0u_~@d`l΄/؄c]1h =ӫLNMؙП) 3a8h mL&gv&t5gv&Ιfv& evSglO]%Meۙ3{ksh?P\6r CkCOphG9چ.wRR.Txcu7;ވU;C(#w}Eyќn=hnvXk1V/κ36SGܭwrz wݳ1nGݭsvvH[Mnׯ:wRʝTr'` n粣:ޔɃۧp) {^hSxxSh ZF+l{ß C04ո==ո ivI}N[l1cĨ04Cs';Z;INU @ak~]=ř~kkXaǯ1;o< } Њ קi !4=^x$Go)˸,㲌{ػ2ɸQSqM +C"WP!΅.ǚk"㚀·nyρ߻g\p2fL'͌#I3Gl[ܒG$Tx]6uy]̟MRG**'Zs+0f".l&qQdyu>dq^Jl˼NUIE>tSj=w=NQWƝŗڼΪ[~˽Q'L4KBm2~f-"οEqUO77E~S.OW6yKZY&+_F?r_]?eb-N>ʣc֧:/h?(ďI:.ݭuɴ?ٷg3ǽP";cTƃ`,Mdٖl]Y͍͵hn)ȶ>[U0GTn|lq-4)Y QBexebwŸk2)\Op=q)D@ah[foyMu5Fb5@[9THP%RFV'Ӈձ9]8Я^pztx-U߽Vy̒/*=GV6c川Wv n-8^ tt'OWU%^' 5eml]z8l\r09Ł<ܷz@ۺ̯o,ǖ.\PL]k|M5MݒL]_8…Յ"[hBJ:Ye]IeTIH]qU< H}v]$2IM},hKf٦=yzP]-zlqWhi>!8]Deg\ߩaor/ (bPZ%zfmߢ*"KUj}=_e>ouwR8{Eirئ5/=wY_+:{eT˨\G.}k,_eViGy~l޽6^G_1QeR[ =l@TuV]]$yxx0Er7rH$0{OĶ>m7}zGGhOm718?N\;?{?p5I,v?RdMȑm7#I,v7%]`Mm8S?b/v.~ éSwxJ˞:Ɂ',CrV ^3Vp46C3VzHesk+p`-5=b #6Kk{Ģql#ZdV#]8b}X6+Xwĺwl#c&7UXh]#{+F^\r_|f*zϽ[poS0ZB<|2 )WP)GZAZY ,=Ox#- ^Yڟ|@;O'a<=;?)' ΍=~IÝE=ntaKHcgHezY<ꍽmmp5ݭEw^˧nLE5cԵ/ꒃ|w8[0P@䯫 UZ|rúUn׻ʸVrU56u۶2<ܾʸ rºʸMr;U5< ɫ|ܟ*xh]ք\YT\++zxUN Ϥש9IxWV:U'П't8 aUQ욨߈y ۉ@^ 5Mt&Lc ݯQ b@wv; \ uxs_Z$u[{ z׃/`1"4ݝC-(c;\(cā"@z8xp=ш0baEFq5e أ8=Np]H#”Ft1F*?ʈE1F(7V/7ZoT2`DoT2`D\ŲoDTpr$&6 IMmnMB%P~55J}э6ŸF@%#%n0Q26ŨF;6Jr0Q2 ޷Q#%9(ٷF (Fɾ ޹Q2%C9W`ddU3bqFU,C9W{ *}O FU,B0;Pq˾vq˾*QXj}G֨e5;Tq@[Qb\ B_0;`9992r\%3dcU }tW W 3g\'fqP_r\m3Zus)C51: +<+<+g^ mrnp$&6 IMmI%<|p||s>QhR9M ;8]De4[Y,auNcU-T'4KBguTf(.ⴾe[9^&J*}XT*iTyB} T*];^W8{Eirئ5/>wY_+:{eT˨\G.}k,_eViGy~l6^G_6SMԉ2ԋ =l@Tujhv).C>FUCo?dl%Ͷg24nnl=EuA-Q򤬲=u8[>iȏX(YTe\Rnfb?԰Y-߷IbHEy* VqƷ.f*n]Q0?A}¡~0P TOU*Tu[EU(ݪbs3C$ڭ㬗&>&,Il߄.1,!`Q$Lՙjya| h_PS[6:貫<XI}}nl̼hMzzvm^SbF~ۄT)hݭ pF&XiSC6Dv@cTa~Qo:V%96᷑on0nmhXt a۾o~0nmhXtۀym#o~0nm#8rm߈dRD&6 IMmnp$gkP xJƶJx9<s>xhS9M a=d- 2X`- keZkeZke|T-Å^ keZkeX`- 2X`- 2X`-j^= 2X`- 2teZkeZkeQeZke`- 2X`- 2X`-e枵 2X`- 2teZkeZkeq-̣W}ZiVex]ed]v&.˗Sյ/QW@: O$[&iɳy\Y޿CݳsmY,۴2SUmƢ=TW|f[ 6ydC.{tlǕ4sJv\ηe巸9)E*bPvZ%rթQ6\iȶos\lѪl}=_e桩">bouw8{Eirئ5/=wY_+:{eTVx22T#Sp߸z)ї}')G&~|LDqԯk3HiϾ=)>=UwUWI2 dl%Ͷg24nnl=EuKA-Qr=rsfێhOzUL*[e&|eD!lqg2q@6hĶPwjMrpj?2 vhn%e[wuGE;Kʷ0 $[V4Y?ZblPwu} MFհC~ޡCqh] u@C(㝳 zND1X1"TEunBz0Gfgl̼vn"k7hʅn76sA UMG4c706ZKP]0cz6D &VJpXa0L}w߰) QxV_``^H?sfr]3b_]1˥O\1|e{b_]1ԥO\1|b_\1HߊrѶl'bip)p 8D I㬘'iZGٛ mRSOjf2Yǹ:QsCoR$:Ϣ-t,qy*[Dc&pמdRflnmv%uyNQnqmA_o`U+*E?ޏ;"ǪDsԙ}d{oIs혴uis*b)@8yz`3Mx?Y?mf-۵/[o'X(&L,M, To=PPlU!~B3&ل9N)μN:wWil\ԱVUZY4MևY\O/.Ê@=ZxwV˞ȻJiV!@Ͳ{ϲ~w~͂YNOQw>n Myv)r&bs:_?KYwA~g C+Wuҧ,'ՁPY dUCӵ,ݵfvSw̻^i fkb22|Ut[<: {O|orqg^XMkW9~zᩃXxVKլ "'{P:+,0x6 E:rZĹl8Si@ A) H(_rsXr}^i2#Om9,  C/ia]ngob`IC&^wNSyҸ}fYzU닃m`)Q~m>OC~'60l9p8+ՓmyL-1R'ackSG{}J<͊xa#Gov* 6p!ff3;/c2\wyR'Opk>ZhjSWXPm|'֙Θ0q0?l?aD6? mg0?tSg0?o~Gٰ!o\U\|Bo?a=6'ՀET-^7:J-/ܒl=`HTr?CG~&Pƫ1? T%Ы̷]Zozطzƕg2?}[)['/?K}>]]{Q+y;(_Ϟ9 0O0QYb|tƥ90 Y0;%5MtQEE4Х^]&Bh":Ga4Fa4̧0ק&Bt0 FњA3auuHSau\ 袉Ea$D'd#Я$v!H>EA8Ip$!Gp$!IF@@&sUМp4%Ҕp4%VѤ[=]{4%ӔxcoiVA8Ѭ&EBєID7,|@p4pHhג8єhMS8єhCSbkqhNlH&ŖHbw8p4%2t%]~GS#=5Gh8ڨ>Mm[vK%Ei4_:̀ p4_ .S@U !͗jK8K5t3X4_=Eh~[,W^ޢlZ!}Z*ɦGM:z9\p4U3pq4?e>Z.P if<=&= |O (͎q4;GPZ7@8u hRtɡezNh!¡uѺoӺoCibCG8Ѭh M hJ:Kg`Dåu]Z9?hRHKꁏ^h]ZBKKG>4;3qn4@L_- 랕K@^A>Tr ͎`Z0 i`D0 ha &Bh4 <0Ow= Gw}#G8#@8OX`p̣{^q4)Gp4%Gwp4%3P设{tף;<{G8{GS8єt8# `Σ>Ow=OhJ4#M hJGSqt/hJ40{.yt/hJ.2t7 >ݏyO鞼;G8Gs8'#͈NGJ}R{zԧq4'.Gs8gD h̯DHq4%Gw=tCԀ_@w=I ^c M M ; @ @祻HS45HS@ߏ43"$MC}WMtHC  ٱPCIitL!i,TRS&KhnLl L37 IKX 0f hx8^5Z:pPIcVܒZG@@ZH@* -$`&(@ZK@;<ZNp\6-)8 )(͏}٦ǭr@٦u08.~KlZep`\]Ai\Bٴ6-62`bҤ9  4` <V0f5M kZqpl\ڴظfi{JkV ׬6-B8Z@@Z4m8eGaQ"i!m6D8HGҫz4I@C+)$i% @ h -@`@Z~@5<ZpA]k!p @ 49H@49H@nx(3T> =fp41gG8Dќp4#G 6l_IRlݾpiyϥ$A6t_Il]׻ꀁ$O6^MdʆE\Zka !` JRi ;$Ztf @ h -.`@Z\@5{T<t2㎻KK hu@wVJ l?Hqiƽ{!7 H@Zm5}Zm5}Zm5}ZP`"a8j*a8j2a#o Qӧ Qӧ% Qӧe v Qӧ Qӧ% hLbhLi lT hQH"4A494H494H494h43QB\`, CTA_ |!U`P0hP0f  f}bz J՛  r`4,ܗ Foi`5, Fo>j`5,ܗ F Hdֺ!fȞ:z q i=Cz!i(0zyCZא!N!lHPCZא!c!-mƌچi!nPbFhyC1#!{*|H e1B4 ii_H A!n^4m! !nVzLc !-mw3CZڐAK!ц%!o@`L2@K:4@2,K;$f͇RњjӜa \Z!f iH HS4V;0@ xʴ!Ңe UHɯBi1ivF vhCV2{h51Z@@Z@'i@Ah h`Hi)dFRRȌ  <Zʐ>FRtk)h)C:xAK2i ZʐCFRt&22$䗖20f-Ahfy{т -iH@Fƒ!ô!m!m-hH†% H YIUi3AˀwF yB@% A@4 @4 ! ij8A> irAGd a&H= !ҠG " YhW$ *0͓p4U`- &'0hU`3 Of!\CC2Їpp4sI88-D X_A5HZ_AaID$EZ5$C"D WPX#6-J -J` Ix@Z@E40 49GlZx_S^ҦtmZ@2 M: 49::m!!0ijHHS45u k((0͎KH3{ X.:tiA$iHH4AH@Zv@94p쀁2CHx(3䀁43SҒ@(,M4?6-;$ Фy˥u yB@'4𤁴΀h`zrx 3-)`x2ъ̀0D=gP&5ir&irh@ hAH@C1 ALX g2= 6FϠ.% BO COV *CO) JCO jCO CO h4 9 p4[gGs83 I܁|"ôP/i!IN):d siڧK$7VH,1B:$ɐUU+CJ`0PZT`(-6(pmZmPrU8+hA-{ӊT]`I4;;XA h4ШhMi*$M޸U!i|0%->Xπ0&irHH49 4p@5<ZzCe `,J8XpZq@A@Ҋ Ҋ̄ 43.iff 43H3@Zo `-Wh#rA+Vo[rD/a9 A` Mt 0 $i ?` 9 7` !-6XHie 逶E H49H@ZX@mqɑH HS45 A@<Ԏ.@߮Q~}-UT&zeO{J%:SN_2O^~qylR|5Z=!i(ډA!uI Z h-Vh=4kG_ 88#{ hI=ѭjtXk#tM`9JPNf^bWM̓txPae~G46~Mʦ_yMϧ_|C_@wء_|_0~q7_Or7p]q˥#\:xBK-t |,K_1߳yt XG-\zt:<:h{xU~ma=Cw0 |:x}:x|!Ó+}:**ŧa z1<΀'=pt<Ln 舀VYMHOR!< = .|rұEt|p=c8zq'4lL[e\L7 @4샭2D @NPt>(MÎȰ7acbX[ܰ)0aU B& ;" \aV)aTݰ9)vD@CH{Uvt_}atÖhgg؋mm 34mF66ciO66FCk'5L[`dڧ Ͳ(Mf)t6㄀ul5_h'X v5lhWհ l>.^ȴ ,iݭ԰w´G'tahڡj@@CH !xi9zǂrӲ}VFմ<9MiiG1 4BF逆i4 K>/ _9 +&7Ȇhu0a~M fy @hgfE00Y>a:(kTu:}Ge[(dUޗj{O%^U~S<>uP='E%UPY]%kX̟:Ngi-[sni)DkoiDȖrʻnf:RO_ԏ* MaQXyN-Mofk#eOu |j. o⮋;7MU<ϋB6ti_91!mJ90jOܬk{~ iZuz98q$ QkWBbal46P/TA`02r06.́10GFiđQ#ٯ_ٯmn6IΪu/5{s`A_0S|ERfǸ#:+{D~놪`4?O?US-~~Xey2*fV1v(Q p?/4ٷoOM~ˣg??7-KnfKeJ?ߢu1-ΓcKrS)ou)r,J'*J2)1Yߖ'kKV*{xY.S+_l6Y/1~RO OFfIYyf=ΣYU^ᄷ[:*{pϿ}MHz˪_HZ/dҍ?cE;ҍH7E E}I=9[?*W۴JuD4Ʀlmms-1.1.3/data/projects/CoolSongs/Socceroos-Progress.mmpz000066400000000000000000000436631247673406200236310ustar00rootroot00000000000000Q x}8+u6K"S o븶g{vvc%Q%%RMR.{.?GR<.%7y| ,JgWdj]Oo^N]u\o*_՗M Uy>5'Y,}~\G ynkN %9Ϯ$O6 Vf}ݫ>0a죘';]ٖUg8DjK 3OUA!Z4!qgJc\M<3J}pLat͟]yM)ʢiTfBYY"T="TCfaγьQ)G$A\|.+7՜INyB^dnI䪒%xHIJ& ^WS=-¦$F5)8'hk&4h?䇹Ü/~tmMAج&ItjURf|h5b-NjA_/qiW%mC7ʛL)8[MU|xmGī7}Wo4=/߽WS4 | vGz˄sKٕvWΏQ~>=t\LmPM19IkCX'OI of t{d>\sQ fhTGf &vTFIjJ̘X8ڞfUaI`UZJf&KW+[ ޾uzk)v.u~j:Tַt*]?6SvX<_|s|X "YՇDϐ섀=!xX* .00"sIL>mJdYv{&0|_/KZcثLuqZt{H)HG–Idnj9P 2&IWᚚٻ0KE;Џ=\}IMG{\:/ r{w|~K_ga 7, >.km)3po/6r^SgΙZ{f{>lcF57meC@Ҫ#\1x'w(6qto~y囟jh3-Z-! = d``71v3 gsHYcb19"cq) eS;YvJvʉ~ W:萆+u1 ;d2d{pis¸Gmfb|+i2:hԾuF朶h\{q6: z#>v>׵NrEo ,~~9 ȭ溬\(K,;"NH~Etښ"yZ4ވ@2и*ZzorviHy k}ol Z l&4DMDyJ2f+ F!Ȇh_]/u?jY["{N֜n- [l<7)Q Lx[x2dms/c,sl;FJGp| om0lFe"C:QH&[FJ"K7imB깇g7 Vlum1GJꔚ 1ĸb1*V'sH׿rΕͧdZf&Mf`Bi*m:BV0T/4ǹYA  OeuCJA~"`"~gBڹ/L?LH>9OC>' ' @ ƿ66"6Xyiح^)O7#xuf-L5[kȷ0ِ'3ۜ&nM'%{//aY1͖PkIɱd "b5kFFvIڢ0-)~~û~6,[`0ޅ: sy}fo ?eF9[]eKBq/[r4{ْ˖l]˖_l]Q˖ p_Ouƭ.\c1 Ț7/>5+z/)[<-~mv^{3}+vF yX2yY2yY2y]4yP4Y`;]Nhg=~hg=fhg=fhg=nhg=rߥ:팢%%%EE'K$vۘ݇Wo,v:M׷IN;H;μY:dHfT@Aw h6,e e( 4gfﴛ;঱r;/{l\'¸\`ߢv=O9Wйl۱1YA洎Rͯ&jqj|oڷCۡv?RT f9u-7?_~u7:;m>˟nfQs8owdC}1*)547LH6c|y3ysկ_JM"݆h"\({ueoQZ'&h(>UiۅeL/ե-o8Lt!rƭC*&2!M`_d7)Մo>SQhw x d+QO3/Mp T2gWLm쩩o$' fcHT_2oyB>"U:7_En . ٫J=?NS<{qݏN[㺟;4!|9j~)>tdЕ>4?L\ɿL/ Ӈ|2}h_BMCW>d >4_ 3-@& drF 6'GtؐD'8!:O8"8 gDÁF42p@? rH4 D5 rIt| /M,:@ @1zc(J_q06P"ZFr@z-fz18h=>W6UJhj/› "*q2XN M7[(*ׄ\X^.(^/uB0 H* G.(^9/x~3?E4(\FwazzqAza(\/8h f96gp=-R8taz~ KhTD+p ׋~@8b4\υ [e E1IRfvX~)  aAzifzazKȰ@\wr_xcFaC_XF>y6HCLL⮢`aW^>|`\~+/a!׹` . r2 Օ Қ𵕰x䇅[5?h E~h( RXrfDl  Ңrp! 5@ -86Hd"aWd3WDpjdj!XUEO qUMbiMOE\UuE`C 0C +a!@a!@a!0!∀< ?P? K09pF~m`3f8|~}p8T`N3B*1hV3Q-ƕ8C k8M&!eMg`)ٍauv =AAYm Q7 UqYA|!|܃G`D0 1|<"` 9hr}a$CAY85\ˁ^sA\lFZ@ވF:`526r`e :`528r0rMM %/Q:^Z9Q㥕V~xiSJŌF 94I0C"`FB#dt͓XtM`ȤuB  dR'+9df5إ@ȤNr#!Vdr0k9t20C"02[f+"е: v-XZ_T@]awr(` C+9Gؕ:F^6R K9t.q0ar oE#إ:F_6R oE#إ`rhdC[v)߆]ʡFlإ~U S74چrdvۥ=2Q9h^qf(~y+f($E(h8X&po 䭨8hb-9[ =Al9aL9Vv@Qy]T?Hӑ!ЊFmBAPxE#V! fyf!(lAzpÐD_eH@cmH&0r:,X/6Cp@zmluˁEJgXj/p݁ [7O{O9=Dc(de ο"Rς[mD|~=(`߅m#s׫]m#Rx4 D,"n7;D kH`."# >"ptÍD,\.l#83X^#`H F"u_k`@R5i N#,X/M*2B 5?hNєo]T ԫ\P^w4a^(tXR2,P?Wf88Д*ԃ9<s(R/8S ի0Ջ8 *h'‚>`M܃e|(T,T*S իȃ*P^,Tj#0[X,0:5qF#-,+BB:K CWB#%1t/"xAx_G M>!l:?aR/ΏEE}rxEo> C 8Gq!@q!@q! q$)!@q!8C 8C 8CҩTC 8C +q!@q!@q!0!Ӯ+3d4+gC,$jP8? g4|A6C n@ g RBc!RoAAkv@1 5d`ZV&s dMa0R\kTs', :o=pC =8i; {Paʿ!-Uਊ={s z<88n]% R3DN?d`Le@ @Q[4$2u l:HC!SA3@4$k $btr`v :~_} @k9y#q;_#ZlAtr0rQ i;_ ofy>I  lHMgyz܇q^f/ػfl>ECW(U|>=+<0VnIH^>9l& s(C)DzvEuH/oDgo%UVi~YGbYv4],)uOHz9*QY#xN'da#KW"ҷDV֚%HzFbgìJX1gR9wg]:ȃ& =lx۬yamBp᎖8e}>Pad-W,X}^ K. |1+"=HR&Zxd.ʠeCIrY[t~ /؏pҚRM* jzZY'lU}dXOWT#s+w3+{yjU*x( }X :]G ;,1TQO\Ңr칔SEQWvu)xvG}IOpWInP>/]/L^UAW S&:F9VNQ!Rx&i/RXׄ, z 7pIMEIp̓?Q~*uwTXR !(ˢ u`$Vy\+f$yK~ v1էqӂZA+oeM\y&BeG?63 f0S*J-wlPC%FS;RCV˒.o[jˤꌇ>5L.6(ڪ!%k'aX2jJޜaca Bmo}PnnaSM~3 \YEӬ&"4f<"hf0U Yaq$M0DIҍ0<ѻ!S1Cԧ_ 0[G/ :TC@ e5`t\8 `(XK59lq ĵ2]#0v0KU }NXݣ* &D'j,=NT 8(.#`_P"0D  lh0! Cn;.DyZ!l*'Ueit؅Iv OFal6YE,LO&څֳ+5>Sm~#u|WVmiYokQ?Dl ;Q$E}v )pD%T4+;Zۇ:̏,,`ߖ%j)=HSC_4Sɗ]LvJO:L4l}[y@mYSw꘳`mBp᎖8ev-AY'(wJ` Ww>/d_rY*E۔eɲcVS.~ ^6٭WPRwO5 $)UGmQU#MلV#uHU;kpxIW%7[7ޭI^aR}_i߇faaJ$>*hyTdw>UT"܆h"\({.4RMQWvu)th4Dᘯ8O.,m:9˧peTemU+N?QθSyHE$^<}싔=5&l xBl&\Y!.'U&1O8FݭR*+E]AY A'IB)Wr&%s37lߖKԮo|ė 4X2'‰6Sˌ58OJj>zLN߱!G 莚DOH[aErR)rF{:awb 3 N&zk){꺞'w\OV݊j/Ò7-wa -Nuks)-hD6&~~ ӻ度_pG_+~zl/mmy۞m t6wgܩbI\I_~GMofդ"d'!]3Nhy(`PSs\'|=z2 5 b c'b Jbh9i,vg]Vn~k-}/C]"(1r7_r#w(rqw.wв p"64e,WϲhVg,eٍXƲƲQ>R,ԐOIkƳW``S\=-riIs+w Q(eڽB*j)>0űh!uGdx2Z?wD񂅼]<(h쓠lAR%}D*0IxQ{R"g/4˶1d?0fZqQY]ة]։UR6oW$ ז=MᅱQ”0l5CBj2%ɡn҂4SQORִl=Ua!0N8 4O:e}Noj/N8oO`t״^pO= Q[jd4k/!sKdMMD@M4DhT :e=CgIqdžG4Nqdѡ&t|No0!SAk{\ā]w#it%fq8:ёt8ItqH:Fx"uƙt(!5H5g ӑ~#9?3i噴tHBӱΤ~# P:ӠFKL^:t,ŘU:A0YQVpݎ%l0,VjUɮt֫8ㅪu~VBNe!')VrvZ7sb΢9-m ]Hl T)u8I?S#UװPdö8a{<yē"A(ߊO3*!?Ÿ~Ovp)kT-lH2rz7@#Z g9 󩷨a=鍄dW]ui}ތrρ[Lu]` j3`@NS QΔlUǙJWPt$SKW}l2umtUPQ ]ZL]#WjCl&ꪏ˺М1D:ȝzW޶;L{g3-O1d{]UsKܑ֞:9O;瀞: ו֟KNNʹHݷNa3 {Y7ө#|J9O۩&;%6WN :|VWh[t+ %oJƶmGt>9T4Stޗd'ô|:mޯ:ԝ0T;5h|\= Uy8-gg5˽/5W"]ʷ]4Q(3 4Ӭb*@zZXlV ٌObY+/V i!OXkV֬7Z!޸>Hlk$6d M#!:yDS4hBfnT2 4=@M4=@Ma~&hz遦hz遦p\Thz遦hz遦n"oDE*XEd*"TDWcoTDP"^AR)"qDۑ! ! b=(85ŀ40 h+ЮUѰ(bHW)_̅DgM٥'iF.f]Hj[b$&ke4`% lXՂ,LE[岁zMvׅU#K cUW\sUQE8ר`:~)"Q`"i-VujWkɮFPY3j(*d¯ׯQա03+1_g _ ~%+Z ʹ^?P`g,@S}n6 9|O1SuꜶP3WƧI2p:T'ɤ•L 'J@v]Tϴ:Rӱ*ǫ w|߫1 mb,eQe ,q&p; ೀ{<ײ}%c\G}nzBK\;ԒvYO<ٺ!o_RtlRE&,Ob NsLji~Y KTtdPle=IN|;W*rh>/[薂qQ{[]^6H`?&,PW}ҝҝK^tt},}W/J_\e_KNvn߯.H#xW呋<ҫEU{z*>rQGzU#ʏ\T^G.^g_TٽϾo]TٽϾ{}Qg?Eݫ?Wv/^\T9ϹszsY彨szsQ?Eӫ?W9Ns.^^TϽs{{Q?_?wQ?E۫܋?Wns/^]TyϻzwQ?ea?Wy^.^]Tyϻ{Q?E߫?WgEpz.X}= =6lESQNۚ5=ɚ0VV]qHh@_X$k+a )A,\ ;( *Vђ˓7*i–'Y]V}.V|)h pXO7_?xӋ?o/'oyru=Ňwjf/\My~q6{xx>8$}x7{m߹,hO9;&솽fnaTfsvUqPiMمRI`2JdMa5[89C<9%/ճɆq ˏcیGByPG*:#R`gV'(ΓÏ$jnƋ(xsG~}KVxM%#-՜?Dhc^*%#ؿmMYюL. l:y5'6O]$(eT3$zrw'n;2gd!LgKeR3FׯO'6 嚶A!H{tk?Hǯضr7Y7

Put down your project notes here.

]]> lmms-1.1.3/data/projects/CoolSongs/TameAnderson-MakeMe.mmpz000066400000000000000000001730261247673406200236020ustar00rootroot00000000000000x]s۸.|~NS>'Qj\۶lϼk &!ñߒHh&%h}>X'c? 2L9!=y0=M;|ܐ7> 77'+}|Z|/.c>iƀ<7wO>  ɱGi)r{ Yx]w@3m ~F *)Fy&5/ѿ< aGndad棅 m`Biчq`k jXC> jia1QsܴAcnJ'ZuӲ Gď{g$3Cy?'5-47%M9mchT|T_$bŢ114k?菨P,QETc7P&b#G?~<.׹>)T#8*5y{2{73LBSQ?!ó&b9M7q5w ?b5B>yuGdkX@4Ea$$?IHbPso K !q`x0 &s, yZ|F'd9M!)l;阸IhKu=B:Kbai$#:Otg[g;"{v{퀭 *U~}\܀r.@UR0[ @5x?.I:zbٳYgϚL:Z/_SZy5sy/l#g:4Ïω̼@#NVDFPg"3]=cSX H@*$1?PFϋ}i|$Cď"/Me}I =Vum7ܝD0ۯˇmՍ zyV]]ެwU墱 4+D;/[T"3֝Vf"O +ڤwP (B` pg\$hD̄;ثOՐ+W7wF.s Sߛ[jw/ !O|y^^W"aw)8/8X?/u_5x@<#u4PfO`;L@ ]p~u8Q93:Pĭ ƴa@ ͷ뫇߿N)O/yl}9/YMb9Z6^*+{PNH<2N4C*UO `#Ww<\|[U]إF \)?c22q}O C! zUu<xyb!Xɦ4SÍ+x5R59F:K ``۠rBg{AM\ӝ"ul\]zÝG* s\X9x'h,>:y3 >D[i KkAMjHߴdg.Vt*ޭ󟍜E/=vV2eFΰ0Eʑc2\ÿ|Hd30d\(}d #3mQZpd "\/(f~t(tdAJG&rb^Gm'aqƞYj] K5O,P jiWwr$Q5~G!Ҏσ>|#ÃݥVLD(bUOd:&xK|Ȁ^ (|~?6yP1{@ 6#KF@ƺ R>#8 a,K,@{7B ʋ&KQDYu>^J~QN{bw~YΚRKYd9o D EQ^H^岁(RFd἗rɲъ0Z|roo @T ~ERZaI)ʆ ~hmli?몶VckkxKW9*[[K j_Q޹0,G-/6#.kq!r[\ ڗ{-nKYܗNZ[Olk/gx{ ~jm?Nzk ~Emo盔e?Sڂ_>BVr%{?_a֒B%Bڊ_Bom_VM]M|~hk Z/kk/ \{}9[{-eD徔d[})ɖ2RS/gx{oZ[/jc]-eवվ|ˤվZ/߹b_j}N[}EzCe%rMy.H88F/xi+nj`=<^ >e~Cn'(4P%#2,2ilűޏp(b>Lp)G8C3Fh߲Zo#X e!\treWǔ}C0[x$^<7~y6s=ߏ ~hv3X,ݞg {y3& 'J!Wcr<祘w%U;Gu%r=xkY\T+U mwl8@eG]@G.@rD|2=-V0A԰?D{&*¼4[_6f{#]A} IqcUL\ /~9i­䥵|,}^mA5p"{ݤnC[L虎KT\pWy]%/*$| ~Pɷe,V3z?'{#"lZj8+G' + gPmi=!ygd؏/:MmmqG[Y6m6Q5j..o]_=eu*jWm)L' Dc(`yC>6! L⦼+!|\{qT *<=:RІ]LM4;T+X1+oYܞ#Ѐy48NJ7Od>9v}RNCOZAy=WEigŽmb%Ma]ʍ ol^`zhK[徆i5f-nkʠWQXUC} 0Q!# 2wehPMSh6/}Np#-ڗg=t!C2)C (2 о о TehGeh 3U_f 0}zSڟ_{Y2ωܷb>-v< ퟡ>kRڗ}Hg@6eh_eh_eh2/CT>2/C udh о gp_  (C2/C2/C-}ڧ}g#CLd}ٗ5"q~Qs"-?O"%h$"sFѲA>2/c2KGϱdl2/c2/c̘2}ۗ}:2TAȱ,%2OoJh< >3rߢrO\HܧLep_y9 3=Tep_epS2#2PG*_țt0}zSz+,,} |@2bsۗ}#cX2Pۗ}ۗ}fL>>Cg "0}zS_*.ݟ%?].&i4ܗ}?+xzo\>$W3ؑVëoַ\=Wj:~j sAo5cr;EXkǚeoMVFo۴4۴4J-iJBׯTJ$&-gZ49ϳ>|s Qw&}+;j[d9dS쀒 JXz}G!P8p@#d6jW,C]>;I MvF:쌆P zi|T)b)b?6xc,%At.cعmqGB߈ }w;.-зʻB }[;.u]o4/vqd{v;$#\ޯo P,vB1zMBLati],]:.}R}}R}•t\k]E֕dzk]IF+z4JOKiiip]*=Y*ɖsl%>^V}&Ǒ8qH"r.q$'+J2b/vR(yu}pe:[zZxiA$ %=j¾>KG5%D]f{ ,|I і4RByJi5Y^KøZY[3 ?|>X M'w ;(Yw0E"a@<Iq*`Wv`vGT5>5 [ғ'Z!/~pz'!.T\|4;?:j=0N eat vÀd2Bq(4Q~{Ͷ T\,Q<.zQIr] Tֈ35E-?zh]wei.ȳ~\> atA;3m $ qbx_eue;Z;zf`]#T %3 \d>?Qe\>JPg(ceƍre<Xr1rqp e.%-輧g6h62(1wJ&|haJ/fEK=墍>ŸژhچQkOkE[x=hu1V.fLZ1ʤgFCnXOpNr3?+WZ KܾU]=r#哳۝r2kG%QA2.F#Oa 4vuW\?/'I,qhEd|$:O?rhġQXth:shʔ4O{%yT>jz6oҳ1#!cq#HF6ҷyc ּXMWSJilzsHJP f0ʬ}VWrJniji/{uHAle.t٤vԈl'z|eG_M*k+Iez%GQ)xtF-JBO]NURAӟT}3oǦK{V>J0햸x| WvT_ndU JᬭLgoַ/R| Z>lj=?Zj Q $B)X+XfAZ†p)+1ga}Ø՛%Z0-|^W0bp6 vzU~F‹FHEũ4ۇߘWlC d;>g:<[7 axlfs{YvzuMG!#E,G0"[V9ӵLWNi"d0+ ,S>e* ܛZTRl.˄Z^Z|ᘗ^{ݫ>^mAہGHlC['#|^ E:Q_%SqV*xtAs ,27fhC6klUv-H+gFj^s+rQP![ `1jލ9 O[ֺwOrW-Hs@Mи u~42 ;ǀ|.sOpQ*@5VQ a~J]Q ƫC*P\3SBxxpbri5dvVwg%bM"׃ Uv)]Ph `/lڪ `C˛ok__^_= p2Ee7ioldZҴD1kGtEj\=,B%nuX,FķyT U?𐽃Qf'XaC)eDi>>K,C?כo`q*5a2m@>v5ys4?4^UP=d!>ߡZi##;YFK`vgOz2?Xdc3R_5)8mPY ӽ'EG'IFfrEas3Qy rh^3s:;[k[uv|_BAr* di-ȾB͕9.kN w F׻~_~VN=c3(0*M9": 4 <[9rL/Q"5hԮOTUO]騹K %ADxDй^PM="EY)K5.Q5*.5.gH@i@Y (] K\L맋̃*Zڱi+iAi1ҩ7з6C-Es?bS  ~19%進aYy'r5n]uzV R՛8,W8k.kdM6iWy5z~]yOִkz&Y/$k§xo:*o<*o>*o@*=U( _??}*쯥M!WuNv_\g{0<'smupNJ**br7wkZ(G$GRa5.IzD%)cݪ\5:= `A} R$CLzvF/̱yRR@H&OPy̆:a9_z`g׈Rꡘ2P>6TLxD\b*7!a6' 6VP;Q2ʱjbHƦfKvRW,]_vŢ~!mW,C]vŢ>T J3Оdg4?)hՠ?oGE"v p-Fcs1R2xD? =z;.wB2 };. зB߬PJI2lwHOakC2µæf"?p !8n.St9]kZK׺K|{{p.]k*Zsu%>^ZW}',Mғ'}'u'm'e*\JOEz\'[IOWzdkߟq5@:u\.8RHDZt+IJDZX짝9/Jp]ߑ+Ζf;^Z5*ͣ&Tzh~ QO { Q^BeֻRH ̗mI#%D[h tVÛʄҫ^KøZY[3 ?|>X M' #;(YwON? DfzO{DR\lʧ(ؕXkikE ]YZ#ܿ5- a` =y"b$u^ ?LI5(HW0 O)NDBR⥃7}4a|k^Z` 20I:ia@{evtݔ^XDžm':3¹X"$1x\ogk,g[~к*~.ȳ~\> atA;cm $ qbx;_ƸJ'EOYIgϚg=k>[0=k5,.;'?W)v!4}JoQ&08%"MXr^(g%2lv< K *sk"#>q(1=8Et] t= BRSdө4x7L!N:7Q7_E$- [׵\mjJ_7w7)tGW^޳]Ixh%ҞU"3xյת7 !;*h"AMt/+Ģ(/ JҎFd$xz%6!cW3.1dDы-;rwٞ˔lusn󰹽]Vn1] 2a {e9Dߡf H hF3Wn0m"5tUNɩr$I>!GRvcJvk 3/^^2o֨2Ðrpf)]r>/!^56[*5 XG.*O7(vṋՆx̫C;S!Z/ y Bx pṼIk>[áJo >Y9LѢ|%?-ϫkDgA8~Y *O_]~Ῡ,ӝ%/o)ufGC*=p; ]|pʛBkFGH)UYWkWg?Õ +zt/ yc(1 77rb+wݟDc聳rQ.3BpH1_>$]f\qe.re2Qs;ϕ6Q ̴/L+w\/(~2QtdAJG&rb^G^:f>i`csֺFJs4AsJeF9}`O;y;rxxS'=[H?x'=S?x?'=5T?xF'CJ}+!UOĐª'DߊUR`f{0$(0 L,Ӥ{0$(2 L,0$(2ͺ' L,04>L,Ӣ{0$(2 L,0˔wfD0& qtbf"0$)@)ݯ'0 %)D)/'@%)Fu"m@=)Fu(m@t QmT)F ` QmTk)F ` Q3mݯgݯMgNOGtπ#fc{ۨ TJf0,h.  h*  B@b10WX<"V4hX8g?ABD`b,` Lc!*Z]V4XJon/o?Ū)HGDZV ?mG M+&p 0mwl7F'@["[Q}Cu)yi| pZQLM y5-,jzlDc6s:nOJwa)&ōu$rI /Fn%/k׼czv*ޫ,>nRcð\kG`*.#48Yy cxԁ_4v{mY-˰RО5״w pVN\WO ؟bg`?Fj_4`SLTЀU L+m\jj2{mVC[9ghn`⑗b3{Tc.-OՐ.n6WYko1/O s>- Ӷ0 l)Րe\]|zZvywy~X1Lv5+P{rX*fo L;O<,G7LG D!@w@cw'pHUž?RPOy@@Ah-`Iw4kVb]|$Fg!8A(Px0퀨VЪ"@Ws6}k BUPF =/PŌ;0m XOQȞ3 3@c>C[헇 kؾ/>٭sHٯ'ȾV.$?Q.C2OoJB<[Q>'rBɬH  {dh ퟡ>(2/C 2π"Cmо о >{Keh_|dh_>Se}Cڧ7OE%C} _,/#H  [3g$C2)C (2 о о TehGeh 3U}ڗ 5B2K)*C} FrY$C gzg}ֻdh_ ehE}ڗ}ڗ}о Sо 3ԑ} 2վ~ %UFa}OH  Ȳ}e,z2Ozg}ˁel_ elE}ۗ}ۗ}ؾSؾ3ԑ} Bga-0}zSWFI0]F/cO~nrB>g~..Mc9+Klw|Q}j#rAr5i5f}ՃzV*Yf{Yj5CcͲ?,JY~X/$d&iiii [*҅_ן~yH&LZ*.ϴ8)/G[KIHΖ҆yc5O}b :%zPhwBN"lJ5rLrq)Id='(=(WC~M+8Lr;l+* ܇e0-dS쀒 :Xz}G!P8w@#d6 P,vB1zMBLati],]:.}R}}R}•t\k]E֕dzk]IF+z4JOKiiip]*=Y*ɖsl%>^V}&Ǒ8qH"r.q$'+J2b/vR(yu}pe:[zZxiA$/Kj>KG5%D]f{ ,|I і4RByJi5Y^KøZY[3 ?|>X M' ;(Yw]a%2DÀx#bU>F]C5L[ ށk +B }䑫? 'OC=_l--"OxaJ2Fч=oXFƿb X~Jq"6/4X&xD ] _wR!Όg}!*c%?HPs[;-HH1>I) L s, ŵG0*=.l;鰸Ii%A㒮<$7¦@e>c\`18["=uWQ]?+⁉<{xId36?_V `NT\s9eT?)zBGϺXL:{t>YقYapYEU?kߑ7R>9ݙe]ā;a噉"6.9hA !*-rx>!Of9|D[/}Z`6~a aãcU׼|KF:0ҁt`w`/%ϩt^J$EL_f3xL#+7d r 2LQ/;<镜'w\r:{#7/(9 r?P'?KYgvX%׉/Z7&2rue:Q$'/9u u=ѡBRehـxc~I>DB%%F||}6djʐ+_/ٮ'=7T{ОU"3rvPgw3P|EVI&bQ PM%iG#2d&^}rLX rU=]'ՠ"~\we+-K~Qa5a;h;Ԭ:27WĄ_˴UI#$iE@Mn);y,ukld5HI~7Fy5dRy6D,ۼ g㻼n/fKѵ|u9UIeOR=ϼw[9njC7m'd6Y8U8}ʯwg#_pm =@ri+GRp !m0sіnjuc 3mQF-1ɍAD1й^PTQ-1O,o“L .VdqFnLĜEʱV݉yhxA>4T`mTÊiWw~pu/nNj<#ÀZˎMbO4?~]/(dAhd, ?(swg EwhdxlJ.G^KÆ>7R p='@znCۈ6{#ȅf#'!-S9|7Gߧt+Ǟ:#JVFtܽDʈ3F(`OL>2(~ޚN`6j")F)F XL`6J@TrQzfx(=mއ٨e)F3tFfݻ}SBŒ:HMLo 3R])p!%)H XL&) p!%)pC5ޙ\t flI`6JS16J٨EL0%`=~&3a6{?36jfρ(L&}pkQ"C ~u0>ַ(Ǐ0L)RFpK{efVR ౉{ |E{{Z)LVJ|cG[%J =Ywx0u!@WRۨ%p%%U; xl|IJU'9[T<'UT X(#`O.R(#JXfi'+O)N$*BW` V"dOV" +4$I0k% LA11`J LB!`G]fB`JB*BBki 0@גV"pJB+L".q~B@r e!10By10Ac`. Vc`. ,D7v e!DY\B\ݯ\Ac`. !d[sYp, vN 0\"h. N 0S +0c`. &BBc`. `.0X"U`%cBUAx] sY84`sY𬀹,l,0沸 sYh72ξ0!c`. \ڎ,sYxj e! b!V˨Q4H}t+m f![{ܴl2(xq sC[@8 C_Tj] 6GO U0L5Ѵ^Aݒ^x0/At>f =&HyFpAaRXG"pkZxث-QjhTV{;8m轓EI݆ o8Sqy]%/, ݞ|[h2lEj$~C{B\5Ert">͡yھGu<6 1zU3  budayl*_As>@MM@f *'K#/f,N{uQ ?]Z0!c]ln>߳(ԉ_?b^5$pb|M.5m6=(tJ\AF=:h~^q_˻˛y`$ m I zByPCurt3xQ}d`H? xHT`kp/qzT"*o@*4?a @Iw4Vb[R%HR1:#d0rlY-ʘ-OȐ9 2=myTh ʐOY؂"9$<`ls>2`+ ucD,||"yc˾F,#%[Pˈe37d$i*W a,YMez^Z,K֣bY#%mwŗiM? =BlUg7]>9J!OLh%oFj 7 sz8m @7xli{~E<3H8ϑp96߷5g*dC$?UP8 uУMh{:62K'K"=r.ғ$'+=J2µ8 :.}R_}^}R^}]Ut\XE:dzXIFeN ֜%o6LgKOK/-$OTzh~ QO { Q^BeֻRH ̗mI#%D[h tVÛKUž4?Z[ y5yд}r+_Ep[Xl["H[= =").?PPa,5Tے]YZ#\ 5- a` =y"bLjniA|cSige4>y{2{73LBSQx 2y #oj_HAG}2D??&oe<vf? e+LG2ą&G@G'iAB4LNa`nxev K?VqfIŅǸp.H( zt t=gi$/*k٢=24YL?@.Sf0H ӝZhx81DfO!{0&Ot3!='| y9< (1M>A-|$6"noKd[8HiF4JEeZ8fP#~RN)) ;dV?#֮Ǯr*$Oc2BYi8z\KQ#qlE?}}<:"^*Xx#PEXؔ"_G&nQVpgVoV#ľaDrX i>Y&N"2iZ ۱ ?r_4ܴ/#3.>b51e\OP)0ѵB,~_oXWZ)V>V{c^uxNmi8OVbY2.Gk,es{ɕLܚ,,/E bSXA=]O/R!)y)=3 qyE.xkv%VG}E}_DrO|]l@{25{ wg'T_/n^X&E0Ͽ"f̴('(I;!3cc5dULyЯ-c-(lw϶2^\}G]1ِ Sr 8 ]++*w>+JeZxnxJ#Z1k:A V g>/+bUa_u oWa[SRȼ%u/ 7e m}O(m E.8sN APJly6ul9՝.p>8׷7ߘ.O9U.D#FM^IT1ldи:CNFD.: "sJB^E1U$f\d.d9nsG'@Q}OE{m">` j؟ brK6WAuCf :yBf{#]A} IqcUxŰ>nFn%/ԇfg#ڮɻ-6ui."/I42148L9.\j:nO-Ke"Ƀ{pREщkB*jKs(`wm-vbtrSՌB?hE`Y8JVl QVژ7TfcxC[\~&y)6t/|TclQ|ovyw̸ErTʆssLS‘XY6maؐSb!8L+CfT6Z-Cӈ: L"AS]E32$ÕHhVNwPjr2r}쌶4<[(d92f)c ?y2Ζ!3,dzhK!`:1Kd1{g1R,+dȲ 2d)C2ۃ!KC7O!h xlB*M< aI,7"%>_aV>rFr5ddei먕RݱmtVYtX(fQc͢ǚE5śd|PFUߦuTަyTަ}TަTzl!OPJ Sn7žhH,w6TKZ"7!a6' KU@ Lv9ʱjbVCrU%Xa ;z+KXԯ|bQE}+خXԇVbQ*%~hOJh3Пag4j?7L࣢L;X8NXKwc) s΅n =FDw\ qotDžUxw\qoVwzxy;$'˰!~}asse"?p !8n.St9]kZK׺K|{{p.]k*Zsu%>^ZW}',Mғ'}'u'm'e*\JOEz\'[IOWzdkߟq5@:u\.8RHDZt+IJDZX짝9/Jp]=\mnΖf;^ZIwI51zxF߽ˬw/!/)!ڒFJz?:/[<7!xw5ϋ}i4@++bkᇏiZd%">M? DfzO{DR\lʧ(ؕXkik;p dEh atA;cm $ qbx1nC(I:zbٳYgϚLZ K*gOx }2D 6C&5$xv̋4aQ{u~$s=4KȓD2&2rKg"+A'ZTHJc q^ :uOcГI>DX&2F||}6djJ_7w7)tGW^޳]#r1h%ҞU"3rUPxw3P|EVI&bQ P^%iG#2d^}rL`]ϸǔ;ʓ}G/۾Rrwٞ˔lusn󰹽`iŴw)8/8X?/u_5x@<#M4PfS7$w熮JiQ29{bT䙢5'[>$vYִn9BT"aiO&>"TfRy^1wfŰ˪n` 4ā͖5{ͣݞr ʞ{y=V1 j!*:ױ^EC&ᬭLg|ԩCѕ_5Y9B|%5-/'zh8H6y rR$o5ݻ.R>Zh>X)hwc@i+=$V ^r^^ :|Ne!TA6c>4 4|$oY8m7k(=sui'..ˇD K?~E[~Қ3j׍)^t܍QFݘ|q319?: J3*B1,0ҏiϏ*~5.ȉCA&Y (] c*b\=]d ]I:­m%jt)ҎÁӄczZ@ D 3ALpri*nfBoe@u|dȕ0).S Ljg 76U6jlS8h> "^ m\LJk }c0^#/ņnՐj- !'ow7۫ό$GuӰV6xcEv9m U5?6G?"Y+ZCf`UFb-C=NyW]Sm&(gdP<+~R ]r:Q-bȱ ;ږ߯3:#dVFXΠ-ɕA[eɃٞaɘ-C[ٖGEۍVʐ ʐ- 6o; 2b[&#%O[,\Y00!KzSـ!fo dɺMމXK]}`I׫,~%">_(%rf5D+Z5qdc$9GTne͢ǚEi5k?,JY~Xo#k]}dp+p/iMpp/iMp{q/iBV.f฼ {k M"dX iw8+ Qw1^XLVv9ն:r8%oe/-yspe)lDw#dȎ/G53\r)T몁\z:#z8m @7Rs,rԸAIȐp96¥߷5g*dC$RPx uÒgh#8C1ݑRpƂ ]rc*7!a6' KU@ Lv9ʱjbVCrW-`a ;z+KXԯ|bQE}+خXԇVbQ*%~hOJh3Пag4j?7L࣢L;X8NXKwc) s΅n =FDw\ qotDžUxw\qoVwzxy;$'˰!~}ase"?p !8n.St9]kZK׺K|{{p.]k*Zsu%>^ZW}',Mғ'}'u'm'e*\JOEz\'[IOWzdkߟq5@:u\.8RHDZt+IJDZX짝9/Jp]=\mnΖf;^ZIwI51zxF߽ˬw/!/)!ڒFJz?:/[<7!xw5ϋ}i4@++bkᇏiZd%">M? DfzO{DR\lʧ(ؕXkik;p dEh atA;cm $ qbx1nC(I:zbٳYgϚLZ K*gO?>]`"xtGHQvȼ&bO𒩑&D .D/rĩNiyVWDF|b,DPb3"D1 IiL!N͒TP ?tz2ɇ;D[fhop0ؓo5_=ОL|ÝYc{DrͲ\TڳJdF. jsUnSŠ6)/xDB,2 \$hDL;ثOՐ+WuK3.1ڟ|D ¯]2[\}rZmǼJGur,ǐɄh!s8k+bY5-{jPt%W|b_`N +űI]kV7*):^4D҈kL<>NaŊeE"r6^Ox 5%h<ֽW`9Z6^*kyNK[mf3]UT9Mulka$$1HN;ip3#KăFht?GX<bqu8nA͆UV5':F٘݃@n$48W?W\ 2ȩ"%ǵp\X'sm54,G!M&(A%7#=JPLFQ, \ ݒͼk40Ǹ(fľ#MDc QD@ʉf{L\ȕH{tX hdJC|&qC]0I8>"ڸ|iaՍH֞ !-7Z}S{Z>Dێ˟<<+8|+VbiQ𙤒Zc aop73j˛Zf:3%Uuԗ ;3ڠ3SL hL&6W e02ƒ\Dԗ6rd&D2I|SSk]e!غ=< 867O<ojߠYҎ+@J`K(RSxȦFwrj-{R:jC &Iy|@Fvy_^^η q*^\_]^CTtB%ulȱ_9|p=LxM'7BvS!0( h؟)bzS67A'x;6L䑊.!} "I^k +AM^ol>`+EZ_^QOm3+Hm"'ѻ-&rL"ޔh9T` y1{0x\$æ |PeV6 $ J pN̝(T T]Z@Ivq޼3 b&:_QcLiY:ӊ"Mc|ޮ6`z)Yqq FXIПex G^->!7 Kf}{uɹGR)y+!CSt.VAasn5 8 dmjOTǚnM7ġ#FR 9 :vba/bX,zیL!vRC*s\;c63F{,yY*Βs~,kX䪴%O K)Rq,k&StΌ, eIS%EY*[R{ЊPQt We3@YUEM<*#%;UdꂔW] R3pƋ"h= #FF w1 qv1ݓhwOj#=yz1ݓwOjv".JNyE9vR쏹:r$s}HI;Ba<]z#/|GEIGw#V4y@T3!ꀺmuʡ:.`` Г>w}[__.UywG$9Yͧ|AYP*l;ǂծ-os)0lZ F~38ȼ| GO+ G: m &~xIH^ H]Cm@.,#8ѡ,p.XQ2M!uqS”w_FD< Sy)Ӕ\MU%d}hG(癰aP_ t*)򩤠GȞJ :u{*)T쩤SNJ y21a=dP']- (cUH|#VeIᗅMN6t:Yp:Y[U~:Y৓}:Y؛'u2]'Kck¼_~{X7✮\%u $9N qܦ@,ZX4Ydd߻d޻dݸ+ך)r(ך(LLr¼Uz,*O&KiiiR2eQ,^U,Qwqd5@94Yddddt)Ǒ)r(Ǒ(LLr¼ӎEoַ\gK;^ZRIq>y`\J5<%pbg!fubJCKi( PY\@W²j{n1,+7/} PZ_6>~|mbn(D]qy!ɧ(Е-1BGY`EQ_z0!yp&1/pQ&dVE  %Lp '݁J36< Għo貟/-t/#?7W?~MC*1|lv?_VSM‡ʟUcJѷgl0'ltBv(4]'$k(dw'&=yxg8NaCGş};D2h)zTO|wI/5bqmnf0+uW\a]{N/! .mg|#ڇ=tq @%C\qMq 'k4lzf9W]>f,5溇_.a3d1?5f3 dZc&DVoD" {98ڻ~?F= ڲp.C-6c(F90ʁQBR\j%oT+y#'Zɛz'pv6!QG)+!S&nYc7e1^ ~c载ٚ)/P奰q/e<^BKюKrRDNJDR捜zEo+z#^ћ:.GD 2os)mpΫ4jqmNV1RASݰ2F&8ǰ.\L| Lm*> H{S[S=kٮz]6cg_BC/71e$# w[#0 'pz?`wWw7hÍշ/Ekri6ƋtKC!=xEW8zjqy!e(nEh$ ֟\de+՚,`S_7xegR]Y=՗7Ww5yvl3p_azX_ !}QOy z𛞋+'_i;Dzr}'xo6P\=!ݻ^_ J7Б9䇮Z.x<(ʳrA/>‚7&U<'F{C^6 %Pҏj=іu؊ +z3D'z pR일(T T]Z@Ivqbg@7DGxDU%?<口Hev ^`tIn͆)%xm -xp  mǵ5 Fh{ #58TJ='[M\&1[=_c3gI-]Kid meka5jt hzT6MVV$*o -djmAjkcGF[c!DA{ۢaĖ5 #bJn_>!6xʑ@`7ข7Ɏ+hQFVh tښn㵵yFĕ@#ZjA7FoFVAM52Ւkddw؈eoFn1jis-y}51V]Jx'ZJdRdG=.[,tJ~%|r]ur-qܭt1:K̹ݦ4E:KWvչ]YLunWveupWUwZFdZupWBBupݔ.]h]\nk;JS0ąҺdD=v8>'!G5[@J ~?8pX8>Z9go3NhDit({̈́?6VTYyP:e]Q|c>|TNɓ]z݄p\%d}hqqGYӖgY/C:PTR#SIAdO%=t*TRЩSIAJO%<ݰ jdbt~2Ó W\y*y >bs} CwN+ ز$¦N' y:,썈]8,-*?, >,ںN.Y^ %˱{Baޯn=xp,K.~$ $9>Sv]kV+ך&K |{{wZ3eQ5^ZU5Qwʓ}COQd=951}w[z_òqR`ٷc+#T// Y+.6 $t}Y`;Fq"- ~{g3qob^(CRo8f(2+ }^[YK~XfS@%A ur #7tO?sTƟ]?op[;F +C1P[F `[6N'3]'$Ԇn_mIOvXQg'2Z#U'=!~yӃjp7`fĕҺl.C0= |xKi3Y~p급p’(wEDi\S\É4'k2tUײ.;kŞg8C;4Bi%MK.̋4?pE&='N4wCq K,UVaR$@$ 1 BV4S OC{Yrt>`|>ٗ榦2 }dD}}k[dNI }뻛 o|p+7M󋨌 $u;@Cm\ ^;兘! ^Het0h:.JX9rIkcF"WeDWv:ڕlysuy~X^P,a6~Ue?qaYƠh.| MDGbT!g >YGcol/3d%OjHC-<Y9a1{9o)_(Ŕ^+=˖5J o>NdHff`MNpl4ݿr*q` &|SSa}U:F⌱(>bs9B-qvSDg,F ojP h~q#%<+8wSnn/l ㍠،eP> U!op'3j˓ѺɔTQGGO8282{1sd$1X1\92 #cGw#su mŌr(mlZh@F/9rOI `j,mih m%z|)VD`(&%r@0 yAnuo  UՇ ل J 73cr(;zw)yt|OoܧB`P@а?S mnh58*#Nj&x u70m9#]C+ %EVțA|TVfV8>Di?"&rL";W%U<'F{C^)%\$CIb>j۲F[a+ZӴ t`gO"tAԎ (>-$splbg@?DG-0ՏqF8gmm>Bm5_E ]@:aZ &'4T@篈#Gv*!2َhF̩h%}X#}:ɀtv$dk*vRA,scm8,!h){z{2bhX4@!&(oNJk{)HitXmzjoCmp@~؋ڨa J[ꫭ i6 麹qYljc6605 ҸU~E1W>_SDO7ύ=j>O"R~*j}SW>9P}E+jW>SE+j (%UԾg7KlTe)j_kh1 $GEsPԾý?7*j_kt(j_HQ|@gF}E틊:*UԾ}nLEK+j_JE+j  -p{D?TGB~dA*n tfDqWܾ8ۯc)nR+n_qTܾ$Qܾ9(ni-EKH}vSDkLW>7rb1a?qŅT>,_FI9몔pMwD"ƕ?Ҳu{pA߫au,)YJ͓{{R\=y<{ݓwOj=RŇZ|L?}Q1H+qӥW߿.~}H.+<49V(䫇ż2*'5ꀺmuʡ:.`` PVysۇ!@IeboȳCs`? g!8 @;|` }B&SH=`FٴOGñm+܉GA@: myp}NBJ[@ 4lH\?m8 fV6D0 wp (c lȳgs)x셧Oj``Ѻ ᠹjKl-<Ѳ⎲-aP_ t*)򩤠GȞJ :u{*)T쩤SNJ y21a=dP']- (cUH|#VeIᗅMN6t:Yp:Y[U~:Y৓}:Y؛'u2]'Kck¼_~{X7X:@I]IHr)|0 ֬.V5M....Yw7ʵfʢ\k,ʵ& %ӫ\k0n}',Kʓ%{%s%k%cTyLY'EyDadz'KݭgrY P#M..Y..ٮw7]qdʢG,q$ %ӫG0k})E-TRd_2o?TZi^CL5 ^CBi|) B!Vu>?Kt ]\X}?_-#4p-:eo;J+#AQKotpcF!芋3I>Dloxn=؎>2=- rZl=ҳָ71t/xũk%0֏~c&2!/`ܽUW(ae{}Cdc~1wo>@{1l)%!k&zW{`c$ݾXO5}Wt*.W*GZ=5T۲u = =HJջQɲ$&=yxg8NaCGş};D2h)zTO|wI:05bqmnf0+uW\a]{N/! .mg|#ڇ=tq @%C\qMq եQi]Rk7=ψ ``i9 4αY@PaQMP\AVcβvDa2lZ׵c2ƚG8dQ_~C ;b TӅJ@S䷿$l[h.5XJNGtJCúpE-dM3@4#& xǎg `Wd!$EѵΖ}Y,uGX<cqurV:mXjUcyRŭF"Ksusuu/Zpt\ DžQ~=Z*q@2PzҠ$4fJ6o '{ = YnWIM-ɄEM#;ibF_O싶Y AJ }܉?H[L㬼%;4DF^&#tXQ.^D&^,`^9x˳sp'RoFBBY$vTY #4C"ߘ)4OfԖ'uՓ)̤GFk)“ Du3hڼ?f4TL3HX}]."\]gy1Ů-">Nس5Bm!غ~a)?"}䬣$V2K[H)lKjC4 xNtСt0ARϤHzwIE̻}{݄~oaIӀ #|09G\5fQ`Eɟ܌@ mebF ׎D/ҺɸK{"|ՑJU%O\ÑReI.ִeI bJ%U7"=RkxY(b/*NzgfxE"3_UN0 ^/Ka Y=S}b(%**h-+MT\V?T^[CEjo/״3Wfp_,8j-ܗ}1hr[DEmEjO}˶}uꤵxe[*j-)'_SGGۋ[l9ʖ=b?Rò_m#~me[!Hލh-W[W_I^l+/V}5[W{k-Wl+Wl)Wl^{o+K?9$ZWh+ڟ9b֢}I{Ѿڊg)kk/WPkvڊ5 +xu)L W Fm6ÉiI ZrX<?K' XVLvRK*q[L~Y& m<ֻ#p#} > n{} x| ,gVH,yg+B `)Ӕ]I}`SR6/eqϷ|~Y6ȏ9-t1efzfeLryNuϤ 6GCU0( h؟) =Q\cJHn`k2fsG*0W1J#{SJ_=?9)vTVf5 :m'"GM&rv% GU<)F{C^)%\$C9AUQCmߖ5ڲ[њ6{6 O G86-C5#'o+J6=ygЏ1C?:W 4XyF!u<4m\;{#*@.*g^hqaKpN,*/ݪA~Y^]Y[}Ŷ6tVAaso'E ˋW|[ .qaܬ Ǒ^DJGvJ??yE77U?*Pg W_~\,%{qJ)b,]ԁt &Ŧi uD+!7,o!hYe['͓p0IyHlivPdMvQGim':R_.$ҏ+76xS668 ?FqEk԰ԾW-kڥվ58(!Ծ.ok5 HASԾbK:)v/!M? /=j>K߂UMތPԾ)h=t}Es@*jEQm*j_QWԾ[}E3QԾ9(j{PTԾ}ETQgʣ}EsQ>WE+j_Q9[PASQ]P>ᲢO:3j7}E}E+j_QoϔGQ(}}+f?{ f1,)f_kd6FedQ~dA*n tfDqWܾ8ۯc)nR+n_qTܾ$Qܾ9(ni-EKH}vSDkLW>7rb1a?qŅT>"}Qq_R>WW"ύ}I`EKɣ}EsQ>W G*n nJ6`E "wW )n̸}Qq_R>WWܾύ}I`Kɣ}sQ>W&*nݔnq M,d1'ed~p_qۯ=x~BUPD"?Ҳu{pA߫au,)R$'Rjݓ';Ew{RP=yJ'CJRk)\ux<.xӯue繂&y}ފA| A&tUPZ9TEL*?O}r}p^1(lXlgxvhwGXl:||@L`?qa^dfM @4x4ٶ8ȼ|EO0 $a6AwDAhB~?8pX8Fpx;8FFLccEE>;H]d7vu(/h|}"{)-H@ L~W7!4W` eg1Z\Qִ%9lKAN%=T>TRSIAnO%=tjTRЩSI>O&F7'<ݰ dbauWb8 iX\_Нc  ,I5fN' {#twN' {tO' {tO' {SKctrlPwo&CK(_ 1vI6ϔfAךʵ%%%%]LYkEDadzkMݭdГeiTy4YdOdNdMdLݖ*O)d(O(LLd¼L#q%%%%K9LY㈗E9DadzH}/v (zuup:[z4ҒJuu_*4Z\CSg!&|bYg!J4ZX!+: ՟%:Oto.}u.,>z_òqR`ٷNno &KotpcF!芋3I>Dloxn=؎>2=- 0l=ҳָ71t/xũk%0֏~c&2!/`ܽUW(ae{}Cdc~1wo>@{1l)%!k&zW{`c$ݾ^*ҟj>T\UZl?{`k8ezE!w{Vw]8i%\~"+1R SM$#Xvpu!yFsoܛmm:~*x)V a j b 2 0J]x|h*.˨2 Ѥ2 L&3>tFM6Pfc2 3gy Sz>/-$n6~jc:jIF25֚60Xx5TѴI(q+6~x P,e Ѹbye**e-kISC ƸJ熆#NibmJQaz=d}ei"2X*sX//%rI ]&L3Qi(BrZ@Aiv>xч;Niȓc^F2p5x $Z^~_\ rH+-˩Uo_(iHg( dH@\o;^ ^q,x1/ļ %5(#A wksvd6 %vPN\\]ޭַlK-_~ՆaO~/lx'2p8D=mC1oz. |SH>tt-&(jr/<~Hl7×aP iCrvؽʳR-詇kߌ i<b:Rsż [K|YYqa (&RDn xQk\rH[zyQL ~ˋH" ^H>`^g u/DVw<:)yŋskݝ-rl뎰xn2 U-C!V ժƲ z))w#O۟|Ll̀ӒZ8.6rHIJ4.͖l\H@(2E{E|rMw/tK2,7i"4F1/'v7ym6DYeg{Ld2Eڃ_b@sHbפTs|D$6_΂^]N}S{ oyyVprAR63oe=f(Bgnx$*|+lwhRJi,ʇThd w%|kx^W%|I&dPR'Fp;p=sG@ϤD|}#d/"g8,nsDypqKiDAB^@P(a,R r.37`+EZ_^Ql3+Fm"k-&rLӌB/I4x0L-<.Y{KaSƒ>j۲F[a+Z+Cm9D2T9982wQ%Pmti%ٝ{z ([1,gE[æ1>jJs0}fqÔ,_8ބ8#UH}c$YT2І#/Ö ɐzbKD{%I eĆs LcґX1^Y[ز/068}t'WajX;M ~~8tdѨ"11A^S] XWp?Y/I> 6He cg ftRSz3%8KYr@~rβVe KQ\DYiv:Y*RqXl޾3, HEYeAQ.,%$T%)],gE>e PdirSHB)) %;oedL$%\nDBWjs:Ba<]zj\gDM"$T+AQżg *ř\Vu@]Զ:kPPU0F O$9vӸn}#Hf?M0)A9zW 490Nho0}NBJ7Z@JjH pX8rE=OEw*R=SIAO%==@TRЩSIAbO%Z=tTR0ϓ ɠ&O&F7':<jAXpG;NB(?0t0-KR ,ltވ8,݅28,?,mެ>.>0]['ݭús(_ 1vI6ϔfAךʵ%%%%]LYkEDadzkMݭdГeiTy4YdOdNdMdLݖ*O)d(O(LLd¼L#q%%%%K9LY㈗E9DadzH}/v (zuup:[z4ҒJ{̻:/V-!)}>{ 1ìkPb-_JCFihe:d7|:u=~W saYAy?N"' AKotpcF!芋3I>Dloxn=؎>2=- 2Hl=ҳָ71t/xũk%0֏~c&2!/`ܽUW(ae{}Cdc~1wo>@{1l)%!k&zW{`c$ݾ*ҟj>T\UZl?{`k8ezE: )_ F!%?1;qK:*!DVFKc*x[8OD}k;=w6`A\)2 wzA{|@H*,(kk8Q]duMfӓ5ιZ1eG1p  Fmma] Ğg8:_3Bkh!L4,EN-sp>?H[w]/6~ {->\,Xw/7~l(E9/w^*Vm漢Vow-{0ב7IX2xn՗ee)b r#!+NXEȋBJ"^I0 &VKi\//j)/@CQyI]ari/2̛3Kj\ E/r̝nw{ڱ;I(ee5VZco8{p@[ߍ<bpn?f2S]NkḰO\k%hXJ_! *HbnJ6o ({`0à e1] ݒ_Zߤ19r'1.q&RZ`Ndٗ%3qv"W"/b1Jv|jdJC.GSh?Խ$GHWME)Yu08H8rH tԠFKFyVprAX^w`gxA3x8i+@Y"0/Ti2-eM[Ys7t2Wnha}Ф"X");ΟDi;"&rLN@Sǻޚh:T` y9Fp[%ي!omYhm[a I(C5#{'o*J$UFPyܾGq}Ѝ1Oݰ c67(`kc]+-<S|x1W!\Q?B [v+|8'Cook/nַW$2R>-0яqJ'bh5gmVX_Pc˾46a\ &5cٛ@go#Gv*!.0o(rH59^|AY3  k2/]#m9#‡Xm9:˻SZb|] qf;lwZAx=7EhgvN4:ҏzAf5S̾b9 ?9_P~ K\Dv9mE+btof')fSb-\PE+j)] ?%_:~*j}v洈φT>TԾ}ETQgʣ}EsQ>WPQtڟOg o,5}R y\t__/{<49VwrWOjBp[uQCu@]T.׷wCʆ1١{cezAu~B$y%uٌBwi&c=VgI_qy;u7=sRRa D!na]6{CrzpgЈP< lȳg[NfI6EA77 OPKMU+XBfkYw5m~p*R=SIAO%==@TRЩSIAbO%Z=tTR0ϓ ɠ&O&F7':<jAXpG;NB(?0t0-KR ,ltވ8,݅28,?,mެ>.>0]['ݭúҹJHr @M3eYеfuritwɾwɼwɺqW5SZeQ5Q.^Zyw<7dYU,M...Y.wʓeʢ.KFkyJ5d^C05Z)X˗+QbZ磡Diٿ e΅eG2BܲcXV=n^,Kb~{ jeA:U1yt$@W SM$\ as}_N55||&M\u-~?/~[_oL$\"S*b$7}okl ֆp8m G& ּy 6 u: *Z/ZkbXЖ2= ZMk־ ԑ?(tq^dYoOURG!W3$҄\*_}b lO؊]5#jY A~G_r氅{嬸_0V NQ Bi/*> EHj1'{5þ'}Q/7_hHw[#0 'pz?`a(8qohK/9/: J&u;@À3.0Z<)e.LԒ;ɵM-3;hI&xҲon*]!*a}{Ajm6 W~ O1=?=xiSA~s| dMa'oGno%gTQ~\t8xTr¾}I7w|c<7(众T{GN-N+Wys5]rڤ+{`ɾ+?^)54q}oכ`"Mh۸XLM= [u^f]֌<Zgf BIЙIl/Yu)@@m|p0DRk5?Ee\ d珞I\VlJKs E9NG;[$.AI{@F.GVAZcCf зy|0[\]$%[>Iŵg\'smB! o7'M`A{iz= Yla -dN*X)yI.ΚA.MxioV_e_|f&5, XLP+fB0Hni)a }0vӦo\تa$np`HpLa`+o \q#e0nn/t6[]/?(bchU8/sz枀%O9F(OT&M7FC# 0B;W)I/؝; E^kh!غВ1ZUrLrJV2[..x)*[OtHclyPɉ:t1Dz{(qgMrH|>);`dO9kdqG S9Z.9b  H v'Z >mLröS;xJ.,hR\y>\9?K]Ʌ"yR@rLV"y,LWCSD]r'B)~:st&Q.򜜧+yNyjK.<us|FK.t2`5{$me9582H2/0i_p_MԝCB _QJix Ctaa0 䛒4p3 5 ol?&- =Ype鸇s2bٸtO~Y^][2!t-#j@A`&x3er擮x"J./n~\_=m%~0Z}Fjs0cW_pjHd8r'}68>`rM,fkE, je7V92,R+UF̣Q~n}}#VWRǰ=;4w;#p,pPTx>O vABB Aݣ4lA#Wpg w"y=Y`pA9C:zӓ$tFas)!,B5Sa\1L!n+6 lȳgIV2]!q[@G0A3e B gtAsӬ,%`qq]=$lI!޲NRubBe$-$joY' {:I[I$޴DDM+}[D$޴Z?V7}aƲq,+]\_Ð a7fu5؅Fm4fmkѭo[3mmkmĽmʹiƖY1W~vUؒݯn=8Ψ>^x[hkZ=qynRnkVn)kVn)kVniVnމ>K7OYX k~YO:}:e:e:m:qgg}G,rtN_rtNYrtNYrtN[rtN\8:#SL轜q9qRs5)W̜Չ_4K]3h=;S3h=ƞCfZOvϡd3-Xo.{Q{WhsaY|Ш>DO˾T6>̾6HJ6f"o^H<-1BGfY`Dѕ{,`uC ^ZI{#Lc_`Q&^VE  %Lp '݁3&B=|&M\q^ܹePMϯ*{`c g^ *Pҟjڭh >T\Uڊl?{`kUYe({E!sw{t]*8i$I[~"+1R%>n. q]ܳn\0/x0^tt9}H\o;^ 6θ DO#\ ˏʧRK '6%{\& WzҮܧwƌa}{A} l; Wmb{ׯ"c{8bKӆ=dDN(7$;(n/d P[%_$ ڂٱH>e7Mhҫ%x u_{/-™aEaΖvQ-G(ʷP -i&OUJJ݈/iZin?u39UӖ3.6cA 镀I?mo\3 EÈV2q "iW޺I *iɿ&}4ia],eخtBy]5$}b8-_@vy17KitDA螸*! ($8&4Pt_&|`l㜵EMEAW* z!#ZT#"1ʇ4ؑVckkMW SH^PӃw2#]K~٬ :n#a;[Q7 LtL7 lc4 V:8): t~Qr}&~gJ4s05 ol?, =Yp$e9LO,lX ( w7>7#Wpy>ܗK0dlKU&JrE<'w-SS3c@n辻dk92dTR959W)Tz"0C%2N txs$B6{:ղ< %A Tr/+$Rw*R*)jx$LG$*^t3ҶU35v4 gfˁa+T^.nOO kKiwrqp -9šOr Mh .$Va#lp#l\ %ab0>{V`6Z;h9v%-îdeiؕLL4G{eX3 Fhq1WQBͺ`[2p?d~H!#NCF:da"#-ؾHM@7B~ojR{xP퍐{Y-L,W)Fͨ\'j$+i .+3,t,azb̚ӬV jV"jZ^/JJX)I(qyp{KPUZq 9 4 C^o(ʃ@*ZLQ!-4utLوnZmU i?pT'-h|'.{uZo: oh$F%,fD$#fI'GPϷdg QDᵛ0JB!J6)O+!q>VD kI$:@q0 LJ*bW! O $3ÓdCIZIZsIZBIrIrIrIrxIt` e $":2@BF<>]b,jXI{O+ [cYCӛ9%Ù:˙]˙˙˙n˙e'3m#N,gXδM3HCQQﮞ+q*>#m[MçU#w`y0\?\&(pxH2O()ئgZ Z"d1:dZ(FN.)8q41ΩB^Y/G!n 8!L2T_ }?8!Xc<:U~Ӊo$@ -@`ǰ d9ˈ2J&7T?_&k}] ws[⑕lf"ݠ` !"71,b3Y6J&~`03_Y2 p03@#OKNAcmCfvѼSƹz0O9!Z1~~2n.. fןG5~2 OiץIO` IQ%UHOA'ˬ MtTnF[.y噎,*mBZM59 >8Eq^Wz>=$2r5nDׁ OZ7Zӛ `4}1s1^͟ƨ8NLE#8JMrRZ0QZ/䁙+pddŊcIz(!o<_xgdz1H@e%Se'o2 j*@ W kILl6/#@ 3^<{/6~C6WWfBtn81+T聨(kn"r։lI3EbC9X Y,RVWo׷r9'Lڣbx5P$mizo?ӧDS`C3)B>̓m`Ȼ0X \u:.BrΪ~եz17cWw^V-Ͷ X[N&Trp#XKZ#dO,Nl;AbDUkznlmM:k/6nwl+9o]?I]%u5OrK5-L7s$]\9ۭ0P`eTTGV> PF9e2(g0av-,(U 6}-J,Z 2e&1.1ƬyזVmi̸87҃fٞh4utƙ2unZx vYse(m=\?]]gH3p̌o.r͉7oZw7c[[tBf<Dxs;^JhV[B}΃q"&@vEv"Q[by 8.4rifn5ةכV&~Q/o5M5>VAҟM_ :=\=K"ۄ [I!v_Ȏ;kuzܚ润 SJq;AqH)5Z.Il]%]ښgW܊e0ELs'jjZC+ #|:hd|)M񮡞l^%Cx։ŭl+L\8r3213E ˊs6%+^+ NMVI'\P9}k@\ͤ% (}ofY!"sYN[}Vi{ҕ()s?MJn ʴ> <մAH E4.q6"["|XgfIQ 3K0֛<=ImlD# z2JYRíQ5-Ù9B:F& *~ne< 0?g bkܮO2EeN0P:_t '2`(D"Ljl$"yi"y\"yP"yp"yj"yd"y^"yXB&LwEDP=OןZ!eaoᒏjd Mo4gD,gwA,gW,ggV,gU,gږXδ8ikb96#Alw(Fݶzw8Fb̺g${zyS<[o=6eVM8n3M?`y0e=y=>H3o%\z9vV;O΃/AYߍCt0t<:}r >9NCgbpX+EO1rngV˱;U[F37)1o7ug1fi=eZO@)z2BF!lH_/`džTچw¶Ͽ~l[U/a}˶V}dȮOjHNbHrJ2AV}꼂d*%yqh6[Iڡ l0xywx Jһ&p{<^5ޔ {y9xOi%Eb\pyP?zaM4tMAdO#jH¿N|y} [Qf3ӀwYRxURi1X]cBfV Qu.RrplQy g>ɣ`[uLZhk&HjQǔӒa"kK9lz$; yIdM r]@ bdO1q&.I%\@E*rÃu#T Uq^]V-kʱ;'~,Eb m?D}-̋$Gg7dfKpHxa [6!gGҋ,V$hR)|jC.+MG'E\_f"*Rqg"TD S 䮋>aq~~*Yskձw&RsVυboا4_PS_()W/&)BOab"&)BOiĿ0O*T2Ok1O*T2O*T2O*T2O*T7fX(7c&.}7c&ߘc7fX(7c&ߘc1O41O4?&iBOc&4&iBOc&4&iBOc&t&BOg.t&BOg.t&b7>;BOg.t&BOg.t&BoĿP0o"&Lſ &BoĿ'4҃5 ^#*o?XCʩJ9 cWAt"e@$ ȗ:SeSzC~I ݌(ۛKXw|)WOWd$wG ?\_ϓ8irb'6Mјh,@be+,3O[r$]OF{ ;΅ 8¿K+:wp|FV1d\!̞]·~>رo9ʛI~JP7NT=L;X"8j\X0XX 0 ~ʯ-8IF;_g/~9v}tP\B`zR F,yH(,#)SR: 'PoT["! N %:>PƣS䅣T'b4c| ԡXzZ/4D>lmms-1.1.3/data/projects/CoolSongs/Thaledric-Armageddon.mmpz000066400000000000000000001471611247673406200240240ustar00rootroot00000000000000 2xr<?}__ô>`=&hB_< 816 9smɀX>Ƅ4im,~Zyf;eˣ][- Wi#]<{m袧jC[S]ϧ3\SM0KG(b+§Lu\^Zb"֛R#ʹfgnjuw8E ?1 _KVCtUړ>rQANlHj+"BLFT'S?d\`;@:pejHʊ߆#2&.Lu.zE':jsծX]>DB7F1jz+-k ۸Bn,[,giBym>cGsy'uuCc Ʌmƞq3.h-v46t|*VUU1rEyfTcb޿Њ". _W4w>ib]G_ &eh36N]q],wܦҌXi5/C+Cd_<_mFMgŦZhWOkZC冎'z$01vQ*G~N-{|j*+[5'~L?VDT{M&G]g=Q̺B0S|#ѯ#Z3}-ۭ|Ͷ CaYY =Yj5I? OU\7̪V'[wUo Jlpk(UI &:JmEkHukr8;rC7͑i6G4#omnBE"Fx䰭Wܖe [M+Cm~96$F4)R\c"4 5ljMPk ˚/ƈi}F23*K5 ƗȓӒS>1ۧ$a9S]L6LZ ʑxu-S )X{eރċaxjttyچYM H''/1u%?w3ޝ2lE=XFs'+TT[~}qٯSy&+K& }6 oqyؓ)uh-W2Q+, fQ0Y̢"JgȌg(@:;NLrd:: nMH*XU4y#hFMوyyU4J{jgNT}lbM&9'NϘ:u lǕC:1a%,d &K%` ӥJ|*Zx!pJꅧ/ 铠L^hBAT|o+MXU4 h.AbUTcO$LS+7ѭTfh7%ϫ2~u-ۈd-}s֭o[ {|ŵ"qFzqe 67M lmRi8pm6Xn&UG;ڢ^wzBn%-o6hXH)SSͻp_7 =E;L RR"#J>8]݄ĨYUES?[r^!N[)`OH%2_8b|ҍNF%8H*rC^E"D^%=*0D7vŽ; "[ήim%oR=1`[PLXo@,@DDto7xs_o7wC7JyJYI9yӷ ÛKI>Rg@~Jj":zW|{;yh9UuhYS4v@so/t7ZX:u/99痖@^ l l6D$&0 Ih-q-on"4[l.s\e?Xﹴ AoP(=4^WfRQ6bMEm6CfS|65&l`OEf1>`/yxa>(3Нkj}.rb|*z6ƧͰq?h%4(ÿ<{G(‹ڴ_U*xU4"EtjgTW̙Zj})kKĄ,S*R T0(qSpnJRє*Ƨ)UOEST1>M~Pє*Ψe8yQEW e'QDY /C+$J -x6b5%9rh:%Nji5Jd۲Pde44 }bj'i;Mk;W I7{i-1Ŕt+rm7%_Ɣ^ʔ O.%E,.h<-p)ಣv^0ݯ7KE,7S:عRKlD6͔T2V)qW"iRHtS -M$6m`sbIڷȥeaYLuuˬy%rXZN uW;0+b͝F`XTG#g1?oqۡG5[s9zG.b{x6AV[UL$Y#}k 6mqEbe?癆uWXF" \ϋߟ6ΨVlkK_xT7?tsQ/o)/Tg.USiM? evJs9WD+&k<[L}VmuR5tW]m(sV7Ȧ#8/h9S֙R2ٸت؝rFf2}޹FO29uE$uMڋLqJ(265_4 Ӟ 5}y9#=Fus!_w6zКy.a͐y15feP״6&꼮+#)ՃYr]e]H$Ȱb7İug݅E*؆ښK+lPG`ҝ:F{YN;|Pr3OI2.%MMy*fAÁ]:ޘj å2qfDAiBmkB3  >LY8x͜ǖ=Fg6L 4@x}҆\~tQFW&j*=W?.R=4]cz|.F&&/< dMCf57cSl:0wϧ&ǖM3:m$bظ R'6 u ܭnZ:ә.u\ut/ c&l!g!t^r۽-hp+2J;A}~q 28@# gTA$N&4^.Sg UWXvq*c8N*9|'(`L iՃvr+iLr޹xҐ%8;$P M/ 2re9/]u//:G=@ڿ.O9VqrѮnXD0u2GE g_- p7yk꺙+9 m3 ingkHR9H= <#]"yELM BA% {[ Gj2W<ї%H\^&ld/"I8H xa^L$73дgaEd \5d ZCQت,3[o{(Tͷ #a"PfdE\sDj[&s#d0ĻutpܒڦV IaTR#zJ)?֤m&0F)cvoLQGՑ'm/=R21eN,cioˋӣ̤x7OJEI|E )v5iFrz5"jeP6{9& mRW:>Nwkjv^v6^v9HjRzv!nvj'%x! 9܄.HI\D $!Ib>}ސ \uI}{A B7_M̐/$|! _j WIHB/KjJEv1MKȞtjd>q{Mއ?X4{_sY GS(''6C3ǘںA {2OgL4O"Hb3͓yytl'u:Xnn&UST}9L<@Z!NY r~:\l؇S'}f=}?S&ؕ银Ð1}10dL!cz< aȘ^Ca(aa`h]8\X{O9^tl-͢XٻQ"ϒ1 Z̬̚*#hBL(qtyѿ<;Kj4,p44ChVI}Rw>mq^[j2a n,cpb9zG!G hưLtwL6Xi$UR4kM-Ekv̀-wFqj{͝Ct"鱒ÄYG֓͒)m;C6ށjZH"Q( !"II*9JILsE=A*L* LULU3iU%Ϥ)T<pULJU3)AV%ϤW<X2}H`[ĢPLIUPF%s.[`5m9/kY{f!qֻ:ɂ?g: @g5= @'*Bń^O//2:mR78]rZLD-SV?)} `'؏}r'揠}2p"6sA"PbvFmTG#g1?tӚF~ L65GTcx&.F},~!uqT#U3Hi5MյlH3<: Gc@?FpPgњbލ_mb#ަ3DzŦZhWOkZC冎' cogb*";*Ul3+?6ZhhkFͻHyWޛF \LtYDwk*ܧͣu#CPDWH7&"*L%ʚn. m i-\dsP*خ OU\7̪V'[w:ܚG)J|Urn[[y%76⏟Eݬ!խ6kC(8~핪 z\6?ʺ'ʴpa#g hBIWvsj%8rp|Ͳ- u/Jo82ENe=՝JJȭF|,)W aC W Ù:8@+W-W͍ńt4rIB׬̣p_demu|,{^;yY0qmuz4GiYC2̱3gHU]!@N u01jlhTCh=DۣR6ߌFWbW'.7K4+ 4Ƌk5)GP;+Ls4 47)GПh/_\F~qM 5x} ,AcHa?T.l'墟(҄b\k_jߤ=7iTG\AƏ6 ?`Q{p|J|(>>|>| ַ>|A?Em>|R> {>|R>  >|A?G3|J|(>d6>> >|PG! |J|(> Q|~>(ؖXpi >\)A?G\}T胄G\T胄G\T胠? A4 ? *A@/4胠? O>H } O>Sz=j O3~GrB @>}PG@>}"@>}BC@>}"Ceu @>}#@>}PG|@>(|)G<Ҡ֛i':_A@T胀> }_ן}N;PtGB> vh5 @>}PG!@>}"C@>(2W+s2WJ|e9m @>}" @>}"[w@>}A ܀>}>}B}J}(>q}J}(>Ć@>}"qw`2W}WJier]6_+>ic𕹝8>}>}A>}>}A~@>}R@>BrB -g}{uJJ ~e~|龢/9/of\[>]}L Mǵ3tW6ŽSb뫁hX!<ܯ/rzk!@tsDg5Phb)?ǭc_'kcR?Wnzd ->W{*3eO|;^NcEi,ө_~}~2īAO?3w*?d~[Niϰ/͟LB赤\,3^{Ov rz1Ӿv,:skW ״xs*=a|{?\'=z˿-^ g2/ӻHl=s9wݔsUq9[7Z=>1Z?^'s~[ݲo=x);t:3-z|y{H&3yvs۪=~c[\ߎgo3g >Kl?[9LsYbd{s%h-qЙ1g & adɈ帏Dե@|Y0|;c?L_B"߼x\Ȓ}&X?W ~=jϯju}_._n?dtV|&?G?#L}:?{O7|?9 ~o'| ~<۠)x=@>w4_}:U:+yd?q?C{?'|/W^#,3=? '_[| ?j!׻G/u.׹v|MΖG׏X9T[8WF_QoY9G۟߳ngBy׻n䔹u'/c:ztT`;=Wf^~2_;uϽy}t^~1PܿS{ɱZQGۃZhP?ݩdƙ-vs~(>L/ҟ?3uƟ3xl.[FR8#cLΘ+fR֗qP ҩٸd?Ӳ`yXW[_?7֏aP]=ɝ%7yy&u?َo~t|6[^Y4Kgxzsm褾tZB<_wK}17䇽9>mq&Em~t߸?/]L?L0OIou;>4zj\K'?׸9;0Oz3u # sv-f_mӳF}kqΫss'Wx1ɣ}62S^6n~'7uwӳ']ZLC̼owK9p~vVд-w&<=ew%4-LzCM?}? S{ݍ?ّ{gWיLp潧o_/_!ۯ^G}Fq#?:^y |'|׉åK|ߝx{x{|OO|??<}ߟ9| ߷}{.yp_$Μj/,Z{8zz" 2͙|1ԗu8葩v'gd u#M-/KmAu L49."s_iK4K~w~\G\a_ls9w龚YNzkљ^2R|dNjh:83g,wl:#<< KYG SqǮ_4y~/O3i0j~ϙtZݞv$I>nzz͐^NS `o:V}b~ջ\W\2g?''A虯Or@s]uO~6-aqNotϷdcbTg]xեAkv՝obm17ЗsZ3c;?_,Nů #)$I-9coLKf@/6qx7]6ΏA]\p2T ;hFI~a՟-TEpg3݊xx#ׂ\#~s\wtm.Ecs!l.uf#_XSMRcL}ąG|Q#z$D Gb=Z]7=iW׭еoNJ5C׍е^ZZb橏shKvt gϸ3!n677xcmkַ:_UÿU;YCW\4iP+ ·~Bt߱ЛWҬWp֌7\47BƣMm2A/fTWm ' 7ip|+[c۩r>jB#eL7Uײ64ãp4 )? D<\2ԙ/pfV| ]j{8xGV..lPXm8)pMk"\nx0Fp&"߮"jX6oéekԼwed~Lu`Qª=&ݣ]'ѽ*G1F, LPDW+o LTw-DT֙>tspږahzcYY =Yj5ݗ|D_nUObi%6u5uRܶy%Q{65U7kHukupۉE'TM]Bw9U֥P cul pK :_Wh}`w`no9W+x<[8cM6}3&(٢mf[l i5 'юj8I܎j8Ij8IԎj8I܎j8I܎9Io#4 @<yA? @'q >|o~>|PG`}Q|H~>(~>(Q|4q >|"C`)>|c!>|>|>|C>>|A?E >|R> mw`B }U' (O>H }+ O>H }+ O>ӡzAK>SzBB>ST胄РT胠? у^4q*7{x+>}>}A|8}J}(>}J}(>$}J}(>Q]>}=1<>}>}AMw\@>}R@> W@>}"/@>}A?@EЇt\@>}R@>@>}BC\懯}Wʡ\IA@/RWſw9m @>}" @>}"[w@>}A ܀>}>}B}J}(>q}J}(>Ć@>}"qwico>റrN+>റRN+>റrpN㛒q}J}(>Z}J}(>$>}>}A2>~Nq0ʲȖlN!0 + aK"6b^fzQn:i" hS\wWѰJ8pԈ\Kb#%QУ9=#w `6Qu| [vUL$Y#}kee W$)ZjfH.D"!Qy^htNie`YƦ Rf]մbkCM_&Y-5.⧙NNj[㱣*VIU ,}3Du81*>ӓ<_ݜw/?!9~U&x(I4^~F̸Y|sbԚ\ͤ)24h 1dIkMńB3F  >LY8'$!{زlCSܖI!OڈKVMvQFWn9.Pk_~*^Hu| } u4p02c4yYPoN%k48}B`+ԅѴ{>5q?thA W}t#]h>>f[<nuZatpܰ{qtW4I\s-Rm'+g@'*DN&7
>SIܼM&aSƺP,;Թ#OP_xdb*VR+{(3')͒Y$-:6< H$Ln\ έ7[]whjW[Qf'+ RᠴIʙ$qV*?.]VlJƄY'DV7$79Ȣ7sޝ/IVtg;hVLwgMJG+xYܙ4r v`aQ"xUZ2a M2aD;I@&,S:D$ a Ma%['Z;-$ zZkg%hDJXQH®PH?,6FE7wzJN҉dMaBe ,,gc[Ő,w-2#H G!Jΰf҇6?@|! &yx&a*y&MҪ4窒gJI *y&%Ԫ䙔 gR«J JE$JL0U-bQbR{FwyƤ*R(#9-0͚ö])_f^A4+y8N圖]sZZij9[圶dW-紅j9-U9mѬHAXUŬ..1Uzϑ{qܿ,6Vz߰`==e!\nL`>9'gye 0oϬ?$E08kg3}r_րCwtt>9/k:{fANU ӽ^^du.)np)1̛CﵘZ4ڧ~Srs@OA0OAd7i/EmsMtbvFmTG#g1?tF~ L6566L2.\XBIsG@f82LkkW#,g܎uTi5/CyDk΋9n ]j{w659.6 2Ftz$\f.7tj:V)7/#\Bb^~2fkeՇƳ#q8M'c]T9/Ƕ"MѲT{_z WXF">qʋ$~DulkK_xT7?tszApj)BujrK]5k=ua^m^\^w uWu:~|FE^W-5Sl&U6sf+dd_feR2y_[_U-uA;TYZP#n3 &walY1h8S}ӓ.zOzH\?0NfO_G9K$M`֠ zPCvi{yix&zzڴ/^3Lꝟzj Q28xJ>w뻋 ,/ŶQ i8kdV#ߠH{x$WHwP!|ߙ/Tq7'i-'jFCD ×#s$"x!5Li|=L}hlLqm-Hֽ=%I#! eO>B 3F >LY8'$(ǖ=FdL 4 @xFYtQFW9q ?xUv; x"}]c~z|,F&~&/< sdMC3f57cSl:0sϧ}&ǖF3:m$bظ R'6 uǶ ἭnZ:ә.v\ut/ &ir}6j;Y2 .*@N%75A Fy! K-8`@P}_8_rQ J|*x@>bPxhp~ pzJD=Air)*=cIJVqR>|1!/ڦU ˭x)ӘBȽs5ƥ!IKpv9:k::땛^ eo rz_27 ^_^t.{H3p9]e2A.ڵ PX说"{)EF"os7V]7s4'$VִֻrF2!l ɢCJhϮb9C=HH`<+B#hrSn@PPIB6|U'O%y )(G 433uRh<re0x.5tm}̅(%4Yjiu2E,&W Y:!(l]qgۙJZ',HqjM 6)ܥحxTs#+"+ BT 44oה!]㖴6!,uOL +E栒dSLi&u[6A6JLC4R箎NwkjCpz2ÐQz2@F."{i0pa`h]8\X{O9>o^46 bknkN ~-gMĄou6bF#SIDsudY\mQdr,#E$W.Rvaۿ+){w@Jq Dj3TlSgL25 pwNoSІ"F2ge25NY]K}b{d݋ȇ~E?{jO-{jo+= C0/3}rO`ޞYH8(a g% p9'gY 8kgY$ @g3}r_tHcq~/{?].kSHR?^E}*>%7O@OAdORXf;^j3^htRFitSu-;4u> ln Ÿj#me3hy1Nލ_mb#ަ3DzŦZhWOkZC冎' cogb*";*Ul3+?6ZhhkFͻHyWޛ@jϵDhk#tPY?Y7b1T(|f7{"_G)0QݵQYgH/Qtspm0U=+EEO6_[UjYڪd.6\bS[S(EJmkb3$PT355cm:;rCkÇУ9r76k̽lM0ӳ/;1ԉVcՅX֔omZ.==hH}b[OO37]؏PAc?B}~R9l9|9"x[#o#էȽ\JgboQ.MEv=H_*OPDZ7Jbm$Ų%shZAB$M%@7oQ7 \* * EaY[o ](9}.wA(L( slK,&@ B (@ V>ȉ>r!(AuIT>H`ɱUvA/+ ޕXA)XPA!>heon"d}Q]$x@Q٤NZ_tD :$ ?G`E,Miz’O V/R؏4O_~'4} א)V<"O ix q+OhR؏=b#/DB~+I5p4#'iIf$Oj$$iCF^27< /@^yQz^aB^B^$Cy" Eh*EH!8rB^B^B^$Cȍf$!*E@>4C'WZlKnû8v8>rj|^j- ~0/XxV=Os_?>qDC*xDb^G8bbC %)ݸ`+xB{+L9Ҕ S}f`+X7S͔7AI(>)^ExZ 6jH۟ T!씣OةT?f6&Fۻِʹa6V!ã5@u4Ph^s_P \KwBj Tsj2MT[oaCٮZ(3kum|W$)Zj'U>q+K#C@T^$jKY϶GuL7zQ/ÔPL3TkCW]Y yy!<ڹ*U^r ?|"Nj3GkA6!LyAa?]Y WF\5E_U-uA;TYZP#n3 &H,/"emFHq8ye/HuUӞ 5}y9#=Fus!_w6zКyB5j}mϋ5@/5 '-򶾦QW7Qu\YO&Y-+*Ha\&@5nOX 3#y򦾪`Jkk/ AMA|Iw6MM C<'ɸh47  wyxc^(櫕{'hp}Vo)89MBmǎ*nbJi|=L}hzlLqm-H~ֽ=uIGR[zƠC"I8 UDD#ǖ=F_L 4@xYtQFWr\Wj}W?.R7u9W~gi2,`d~is0K44YvqXs3F8V|Jg~l)X4@( F"!}|b#PKYxl Nꦵ>¹QUM fŇur,l`v4d\TKnb?a@`8`wB&9 *8 J-Q@P %j@-C=( Fm 8 8/pp@ *p/^RцM,;|Tϴ2#|1!צU ˭x[(ӘBȽsƥ!IKpv9TU /ISPM/ߋq~&w%sE(6YQ7Dz-Q.ڥ ʕrRU?,LݱL_i)EvřCK5Z[uӜdPZZZo45$j)EǞ]rz.xVF<^"&#5xNKS~Q.Nvhf2gx'#re0x.5tm-̅(%4Yjiu2E,&W YlCQت,3[N ѓgۄ`0]݊GE:w(1"R"M@CvMى0e:_8nIKmS+B;Ĥbh^m*Ofn=%{ϔjRw4oIdĔn;9N#uȓ6TWy)ąlmsu~yqzI\4).vA<n˛iZlr=L5٫!L.,Yh־y&v\SɊ2<D_I GM.9 $ν^ؐS+%'cZRH"` %$*(NwO.L>eYx]4- M 2+Թ.TUI|2;Ι8k^6or甛 nk`uv6\v9jRzv%ڐQRCUڐMڐ.B1iCN}![,^-~#omȍ[2 ^@7{i KK MR loQBloM K0 d{d{Cv|/{s "'B{aw/%9P^&pf$|! _HB—Z/HUajfOBr|)PS>H2{I NG"$w`}ew5OcDvg{g䩩ONu,-[S80=;rD I G}' "Ne:Xnn&U!/`8 N&ejLÐ Co3,9?Lc4y)œ>7\JaȘ>}> aȘ>Cpz2Ð1=s2@F.#"{i0pa`h]8\X{O9>U^4͖.bknkN ~-'9}<SY1)ϫKg+zlqI}1y9[fёʮ%;"1DHb'E*I*v?ԏ]"MOVH/p8r0U8=P Zg.ſ-4qѤ9W}@15MM+Xc+KqwxDOʎY^7WҸ}A|AB* Ջ(@ZA_BDМ4hV=0Av=9,4q>D4q6i[ۤ Ii&n&MfM<6ib[%z K==l1l6UZ_WMU䟺_n.ᖏPK$jʤbIхv)R&%eK.eR]ʤ gIv)lIhĎgň9I->#fηLcKvr#V1u ? ynM;,ynmkJw<0I7{뒲t,ݼnIK7c͓~V-? /'guOYY]R~V-iguL]Y3*)KGK钲tt%-IG(5bBr7ה\r;ZSٛqKB]ZL[<'bsocCf=4j`޻:Eм4_4b1L??{g6¢<'GA(r .@PJ a/xV۸7WakyL;P0^xE(E8o^3@J!D޴w?wP"bہ q=")TnAbQiZi6?MC*៳pLO> *;xYa}5p rWkW*zxej{{Smޫ'e(W6fO U{OQy "Ͷ鈩l_B%Ʃfa)]! [ @yR~:دe!uW[̌ʸH d1v>l9k޿8db}X~QEK7ֶ r?~_Ya HRSh=77@ Rt:Ljdk 8Y~=*tجTC*_ *&ޒ L}14STJ>SAB5.Y'U *X`,QjLTX s@@"ӃbFxh1# )p1kdGS<oXղ?d!Ɏ ՁA$%j5"aٔ>2ju`eOpthu@l1kϷ-#L'N.ua>x|d$ԯk_891Z6buᳪy/lnC7llHQ5A_(._Mk92~SM)atP`x3Oxm,U},7t$C"0Rn~3F7zdÉA~YfNp v6bk Ll+0-MSRIY:>HjDvjƁ\EGҹdp(?*ݼjqF--׽m+w> V1D~χcAwM8_?Ϳ`߿]*(z%cLwچIOGsĀ0X_! 97H_03nDҜ=9/WwAU 7Lth^ $TGCGRg9ܵ țHq~` wp$q:@eQ!)7OCptv{us}qzq}B:ٞfAA8KǥFOt3U&eBY{#0R㶍%?LzӇiBaa7!7w.m]Z[c-]% zp /A9ijq}rT )#頙-l I@2j$!;VGIqEi)%'D@2N,Y\|Z]EO3W0S8н\GCר{._:&dlٖ[iti-izx|+͗3~%E<~5#>O\$w,#?LSsi.#@F(`w`+Z{r7~t}=Ǿ Hn(Ur=P|c泱>UɅvf Qc+KTW?L|Z.O N6u( U:9jCis(2 yN?!*C oO\\V΄rF?ꋠj,][;끳tÑp9f Hjt@fDe琾Y.攜3u94rf&`򊝳9㛕,aC-cδ%5K+ ~Bs r.BCCH(8 q x'+q xT9qװҨaQ_ZF=զ.l#V\ZRۺ(-J}WKq,uetB^!˾ Kp,֟yVY4l%Wei:j%wWe)BKdgʒZidIsJU Ը{Z/a{x>1"RXhpWF(~Agt8&[ԣq`UJqp Kû,#Tk#N/i$++}S:oF QH(j9D ߡjH,n*?>AB* DŽd(ȽqT1caa4+y @GV`Yh|6iImĝ7Il&.&M&M]d4q6ib7=%J{*ݯw+ʦЈe=K壆dkICכD9BBti2).eR]ʤv)1ۥL:l2)8.eR ]ʤXs˖FxV21bzUˤ;dw/7bkeXB>B[K[ۚ]8f7?L랲t,ݼ.)K7[tUaIYS~V%eguKZY~~֫qtJG{钲tt,nIKGca4JMjн-z߇TnGKwucfiNx--NA w{zx3zwC[}U[0]✙??F`[{8isyr|-pFX|TvAY!"Y-B UCGKqcޙ}GW PLi6D/?F}> { ij$Ƶ̈́EBc\c'd݁{.B9.]"=/|ܸP!ux31VYOOt 牢CDoMK f2-tR>@=׶AKBdlq⁉<+@[$0j=TDy3aK8fbv] ,?$W?8y4i x`qvĢ_|omk5p!pܟB\>- %*mg-!~h0-o|0m>W!;T#x;C0Lr:cu8Cp!{_Q`:C0TyfSwd$ q|6錁:d9M r 5HpIcp1jkCp4k`45c0V5&{ 35&LLc5Y`:r 5l,#?@eciy|1kT&w{ #u1 dzױ`wɘ`*%Pc0fx18L)^x 5y ?0!L!`cކ0-];&M:'~F3tT!Jx@㑡();2mx"ziM,A{O,+b: (0SNb+^W ?!9 !j~(\M!m8L@&Ƒl9q^apEapM7gDL'ٜh|8OӉ:eڝR9J`S] ߫ z0|gbrʵr?)ӷRTW۵ak$mאkZ+ %c3zz2F{2<]s^.];FqkBk/\]Ay-G bMZN|:7jt r Gpoޮ)y1zs{u*DTU/Rvq5G+vvпݞ]-Ure7y(ogz`pC~ w3/potiR|̵ hZKP =Qh^_xB95A3t^דNZ7֊0<8ueϰU-X{/,`Kwŏa+` /_)Ȅ Fq\f/lZ4, ܯ&y7k}0l}e9EwEu Б ]kp uFstCP1 .&T,pc meb壾ܰxJ*%CgI Z.A-]"8Нk l6NGŶw?_-޲^pI;0)?Y VDӇcٶwׄ?K?KES\/خ>u%\TbV\eIlW @N'x/sJXzC%X 6_0TK9#kYL+jFd$շ˅./(|7]H>\AJ3Џ8{}a Ghs/|,"GQ@f+ԃg=n,7xYF%,ai|KN6U=B" L'׿,.oQ /(`cy[O%Qhy !x 렐+[S X_mGl2L7o9W_Dsfo=̗<6iLޞ !&^;Q+1.Ax@ 3m4uǷw84ߘ9q?/prQgh@㘆wȒ!&eRxXӲmqEX#M {HNȗj3yϙ%en*#mN/!}*C oK\\V0g٘ Q_Uci`z%2er.1LCzFZ5K0$ Z3yP8iAPىzrSH?7qf&ڤAS[NC㛙LqC7cδ%5]Aw*qW@(_-` c"w$o}9Eg١ș39L[Y֞gLDǼE="9fsyKGy*I|E_ӖqcZ<}Ǵ#1pF|tJp{sR/'|R]җuR51ٜ`Imw'9vFx?EEA#L?Lni M->UN/7 |&H=ޱ|K(ʄξdJpuףA@=8eDc˦3Z&ƁvΒY9]itXlxB`QQ@F8㨶׌&zx>Жd"b S&pR 5Rzb"h 4P1R=&ɪtDK/bd,X|gKx/U{R3*ÈuE 1%qH[h1X89 d,NY|F`cL8j3*B$BU8 d4(|XU)lR? /iĩ!ѷJ*+d+LER~@"Bo(?5 J3u6H}Ys_pV|4=6G ǡ-ɩiG0 y #0^LNje2&a B2&#äd$LFDP\$Q 0*J ÷=PX| PGM&j) %Ca.FGHd( Pk0Vx0vD2&#a"(e$ȃQQHXHd$L$6/MFd$쨑0J2vb02FB'#ad$LFp]0 0QD2&#a"(e$ȃQQHXHd$L$eR W2vB60|AFX]8Xeo0LUJ:eB{8狯 O= j{tt\KQ^q>pTS!wʀ ⑽,b7ˈ #_A)#DdėJF|kD"#"Y〯jo.Z4+0-&LQ>3S63FF- ֜9Y6X)Ox"^!`~{;Mt OC~Q2`xN=yx 49 E'F Mw?*;q*kC"}[P&c Vt ='º1*vj٩ɨIJ(r$}UQ#v-PRѭ)hi-0Pt|Gl,")@ߙ3rG>?-4omij<;SyW D0@4<(8 %F8DiˢhmWz02Ұ0wz/^P绻قsx7w"yм5C)sC&?|ۺnŴTڵI+W3lWٻ[`K$ŬM&59OꟉE~R "?g4SU6WrEƲǾNWTJbXB.EKpP0!:0J(9PhaY#T8#`i&@v:[#|۶r~h‘ `A"vƗs^݂}0yO7h~>/f;CvoζXn=F]rY/3|Q MXw|9FǶ+ A~inL\2n+s7!.&c#q΋"aDBzqn#e4x$[@~؁dH*xk%+x;[̤q]%CnK,tq{Bv1AqKn=} Ճ.a vY^>Wu^!/pM璮݂6<ž^庛}dGrZ؏Xow7g״-m1;o./nN&ۣo#Do $6C./r}e Ysi@/ӆk%t*"Lt!M9r:dZp.C/v:kjpZtJ[VD"OO<'S:8.P9$rp>Ń\fYX4 |.fW= ڹD+Ґ P⯚!GܼNS<B\gbܙP3Aި36Ld]/SKH_viEp &?ꋠj,]O\DLj#b8Sqvë$ϷxZ39I&@A}"N8gFl9L^s6;g|22#ݲze}/UP7*5;>"i#iHyf#%>^-{zd۫uT6kw>HkcZT|KLۛK|BOq1i? gM)<5Gu'<&"nօWtHw }VPΊRqg5G+ : ,R: 1-i%XF#~58S f|m6b[3QCT2YZ6~gO 5uʏOІ:Jhj4tI#,Iсv)nR&?K.eRH]ʤaIv)€R&еlIhĎgň->#fLcKvr#VPGYskask[S׼ IySn^%euKZy~nj9Yx9I?{꒲,nIK?cz5QtOY::]RN-itL8: FIm̸EdQrhN~_A"\H {);=!6zOpA6=oCN{=qKq 潫޿^3Ӽ?|Gby0Mz4YNPJI>(+$P$>@^_]H]=@xh)3u8r ;!<ʲ! 1-؆HYo'8>a/xV۸7WakyL;P0^xE(E8o^3@J!D޴w?wP"bہ q=m)TnAbQVg:Ѫ#zuTL5AG#ȧ5FKkጘdh->,5 BZqRMu.t`|:0iOL9C\T8Su4\ [ Of?UMpOcbKITU:ǫ:̥B5&˛T˛Ogb{h0i"Vuf; Ɍ=XУcp1b.,+c'Wqp^9T: r 56\l=ŶGr 6,`c0yp1&/:Cy ƪ*Oߺأoh6&18LƂ\r 6ӡ`>LM)*zܐyJٚNHc'a!el4,jlj䖔Th+$kO-'Zt:@7-b^JNC9#M_PrqI2l1UcoZ.%}+ߋP< IVbѪK`ݨ:i+'xץX+PMF_s1$Xp6Sֹ"'UGC'lzBX/n4DF@mc#A__Pnh5z_onP=^;[nϮ:yBZ(x?B{ח"PN9k:{Z L x;GX8W77gu?P̖N?|V`q?E-m_?܃-TF( ;+E P0k9p~Sᒔzd]H(D v [_Yh*xCG2$r#v8gȂbtGVd懶s!٘e WIj P*pޱk^ζA1Oo Q_nt<%u"vW+#KsŅdp(?*ݼjqfV܏u $>e]g/?KES\F}l1kuV/$|T<Ҡ'#NEF61FP7U>n qkYdprW0FFjK3̬⣾s-TBˣ~`XX_:r%0Ong F65!{P}H n}L7) =Kn_V:g:Jxw͈߲{27/IhFif˘"vZ@Y2Y Ǥn VNvL)rVl+۶:dH{,"3m4qZg0y*h1v翊zLqA"]R`>.H|Zsig@︾// ~W@7qi\ +_^榲/0I_` Fd|cvgDi3#uD̤GܠZ`zIjg\S/UL贌ԼHM4qZl5qϲ({6=N3YbQl0'&UeȄ;fꙶdvnw7g)"q1Hl9 z _ @S#w,ut%P;t%MM8 9z 2L᱊q9dɮvΒH访X:,VG6w"i Q?M+ËiXc95(^hT.N$ PYƐc 5M`9Hz2,pĜU,P\[a &` JIWDq)v[ cEY8ISET&(t:(Bds$ЎL~Fg)O U"8ϋ/|`(7=?@LPQe#^e=%^^LNjfG I52[+ &ڋ }h2#:^w,|Hd p p^ea^?PLpo ' #a|< Nj4:A'4x g1![`wU `efCp(4x$l.OG< 4x$q xUΚa54kXjװ֨aQOf)7ƶ5[|8',RǺ.e_8I]^J ;.e"sQ3uK,\L-聇"K#uqru[Wl5ȾT'#NU&h_JR+f`㲮IsYͽt28̪K)41#Q] W>vh>EfD7|[g+-}ޟOަoߕ= 'ޭQ<.G8ؼQ`{L.H]n"}@^;`vI5]t@;  AB* ǜ Q,9iѬ{%`ރ+k1G?EXh6i6iۤHIuIUI5In&6oUǰD؃Va3[%ڡ5~qETQNGൎ 7a\-4tI#,Iv)\R&EڥL:.euIqv)qR&ڥL:UnْшϊgZ&}<;F2-Z)#,5乵)ykޅcv$ݼ)K7K뒲t%-ݼIK7OYV,=eguIYY]R~V1wgGϨtt,.)KGK閴tt:&NOԤ6 X_\SrhN~) {);=!6zOpA6=oCN{=qKq 潫3^T {zqLnM#0-^49Ӽg9>zr8A{`#,~edd 'T-wnZ2cvg¸lbeL6!Rq[׌F}> { ij$Ƶ̈́EBc\c'd݁{.B9.]"=/|ܸP!ux31VYOt 牢CDoMK f2-tR>XN๶ "y7w_w"c5LԨY6"Qc!"sמ [GDEW( V`!H*aR}[AYjQ["Ѧ˅mΈ@m`QXnFBTU(t2+jLKZPܟm9C&_ҏ> mŌ$?ԬYg!]"xo[{x^Qx߿Шx>:zv@zky 4?MRٗE:O;*[]d;uy5Pc 1C;xB@u_yoCqq;n'p \CԣOf,Iv$#K`2o д;@{;읯ςۼk +N;6K86SE}r$JUe)(`uJ`B\xO EV۵az-+ruMke3(NM\yG D2!5d!";G#lGtio~:![) 1CG=rduK j6f=8YR@&\ih[٠7Ao/7l:Jt"vW+C[D{Tw\/:: F2éwV^;^q?[ֻ'vʕy&*5,Vpb< ߿]*(z xcNd%K(/9CߘGi@-7A=Ny8\4Cng)CZ*$$P olI]98u6}z}$vB_h{fL'y%.?x>rΚT$r]v4R>L"Ifcx[ױ7=wcC7"@ufvQ߹eѩCQ`g_3K#a=?WSB:M껩e)">M7М鏤4/"|kF |㟘|IA Ocm6d=dj_Ő `;m8&Mu3ruׅrfl+:dH{,"3m4qZgy*h1v LSue%dT ϧuqE~:Lvu@P~@N$'~7 _wTF#UJ?@U84ߘ,nRڠ;BU9oi`z%2af&f#|źl>d Ifr9r3o <|8h暝hf2kM蛩FH{U: Haf q.yI1dN:楱՚t*w^X^FSTqlW{u(cWr,Y-|FL[2Snw7g9"{1Hl9((/ބ֣6w,ut7p/H]wh6([ X:-}bgL%VlЊm }wš_  1m]so-ÈTAq.i,hR=&ɪt2P&lIO~ _1fÕ!ro~qC`r.uJMeD_pg5Pf>/PIⵀ2"[D,er2]`AEJkS<2=2;>Q1zTThc+$47r9 L8&[ L|-d Õz9~m$UO19z/Ӿ@( kLzc'.}k9,/?&r}wGEB{ECE,됲G~&fQpXD 1|p&BbBdц989M ftDoId -k0x+c2va"c콑[zdQN2vmc' S2&#a,;6Ma0 P}]1栘< &}$࢐y\y8׋/'B4ko4* eGJwx/xV{Idx/k2+2+H{eWy^** {i^ ʀ/δa __m|7Ug^IXt fGxXb9bFA,Tȳ/%ֵt:KdWR*GU'UyRg$e[洵u'38̚K +41#M]9VߴX)+ǚoiq~s}{syf;+Xn6pLp֤G x|>XD4q6iBgmEڤ;Gi&n&MMw4Va Z%z [JCkt⊲*4ē{Y},m;nZ&QPP&NڥL.Kn2逭]ʤSv)2/ڥLKo2)߲%9;#fLxv)2-Z)#,5乵)ykޅcv$ݼ)K7K뒲t%-ݼIK7OYV,=eguIYY]R~V1wgGϨtt,.)KGK閴tt:&NOԤ6 Y_\SrhN~_#\ {);=!6zOpA6=oCN{=qKq 潫3^T {zqLnM#0-^49Ӽg9>*=eU]}PVHHV}>zA+Rlg&pܭ!3L`x>PeC,cZ *ܺfD6[/D OK ~?#il6m&.rZ6p' 5-/i6"[˴%Jrv\\XUydlq⁉<+@[$0j=TDy3aKWbv] ,?$W?8yx{T79ġ?(}:2wm W>SmCeЇ;n8@K#L \*Vf;Ur$JY WPՉ;1.sbrrL%ij&N>Z+ G[tz%BQgro@ITR娔)[#Ě| 757N<&8 / f(ߌ]*_\:Cogw ҷͶƳdG 0߭@L xy4 [=ҁy`Hu%kA:8Ft%4V(sg7+;AKDzR #WvBhۛ3|s(fY'>Z_X6ԯϋ{V*^h#US(?; RƥH(jv [_Y,7t$C"̆Y]kݼGVT sɟ|GvA,'\;g.p9c) <1 zG}ahw"Tj'#:-fε_+Lk#pQ~TlkkIþ{+F bJ&DE޽͉n2`[1ЬKc=xy,T+"i&OCQמ߱lqeƄkj>3 ᣾s-ʢSBˣk< )r%0mWx TotԨ| t6GR%gTlw͈߲=g~ue4f3Z9q=]]/+Η{wwQVӐqY]jtmky*h1umQgZ&]RI|ZZdQy8 3 dw\?`PDrB^yF^^@.ndQ7`4 &n6~2a?@^GCEKJ `<#,^鋠-][;R7HdLMLG|@?%|a85՛i|AC:g'6 Lgq 4t422>vWaδ%Cv>>ᴙ9Fb_n.%0|&H8O@Sw,ut!Pڮ;tMԿM8 8z$Whڥ9DρKe"XmEpd2Grh2*ծe-+7w M*yk4Y]nu\0 /ELp׳ azMw]cA;!x0LV q*`K8DxJKHdrW^3o6\*};"n,QrnACI \ژw,|s@ tzٹOw*7RCh.,Ed|E&'Ԥ+ɣ6##K,nn/Ω1Bkj]Y&!t-X,#ޱF&0a"8& Iͬ-4K 娖zv5;)X\$Bo-%bc"W&d %o/rʶIUD5CBQaFҲTWeP jˠʓ jgdL[ƴ_gL[F{Ţ=|^Ə7Bel07jb2+'[h/ b^uMF{eWF{Eh^"2KE%5"^hoNn2+L;+RP{_iWfrdW{TW֬___~ɀ/k'eW|Xs(w2jͩ@7g'_$̏g%Ͽ"(ywe/]`Y"8MSsW&Z7FK.]Y|ㆉ7soL@7bCt򘮽cNNEkc!P 4>A&o3Bq G qύә x$OG4x$l>OG9= 4x$bN+Q%?>r"LF} K5,6ɬ6vf__ژᩢyԒX <)]|>fINqg*T-Θ潈O,W aW!}X 5YJY,ѷӥנ=94jB(`ikLce)Z)[Ѹ}#S WYo?(oiY-Xr?3$xSNNIN\e^ԁkY}xM}`OyO'8 Np λxļ,%`y`1=YCJ.(:xX둂b`ke}VP~02 4-SƁ8"Sŷzxme$q8 p)͐\/8+"](lLklLal+9D ߙB@s'hChz[@%4A2zHk;KXʼG^=ԮsG4&·h&n&Mqk4qa6i63mmVڤیI&McDa=-浵JCkt⊲*4SXv%QsjICכD9BBXl2).eR]ʤv)RڥL Kl2).e]-1'edzcIwl_oJ8N!g!ϭi%ϭmM_.&uOYy]Rn^-iuL]yϪg$)K?K꒲%-IK?8:xF=etIY::]RN1w0x&YL^暒TnGKwu7{3~I(ҽ^)tSw{Blిm{=̿{z_mU{Wgн✙??F`[{8isyr|lpFX|d胲B2EZх^ b;S7n-\/,3C/ ,"`ӲmT_%z(`A"G'%j4Sz6f 9q-8 u KUֻ wqދrzB ?¿›jPDlx;^[!7g?]?eX*-H 6'>' 5-/i6"[˴%Jrv-ﹶ "w_"c5LԨY6"Qc!"sמ [DEW( V`aS9w b RK&J*.m\؆ Nf5+h$Tه~:¯&jԃK5%a: LK ӟO|T%.TIʺ:^j?h jq3Gg9B(4lXo%XtܭbJ2H) #Cb0"T- F^i"sGI8y6BJǠ~;:/a}se ;$os? R{`g325z> 3JT^-xooOo0@ɚLg(bJ=gU bz>qsypU"T6k4Z46iԇmRѨڤ>QI}B>iF}&UkC6w[O7w;jV-J5yj6O=UR͞ڪSOmTӧjTS[~*?jVFZkiTj4Zi?jVFZO?UQ֪PߠU7ڿAo@vw-oo@V߀jڿ ZjT7h oЪR߰U7ڿaoHVߐjAVߐjڿ! [CjT7l oتQߨU7ڿQoDV߈jFڿ={jFT7joԪQߨU7ڿQoLVߘjƭڿ1[cjT7>C_ ĭ$ M~S|ijKs,q4^“ZcÒcdPmN?l3yQ6#~D#1H|sח_-.o?\yKS[\P>l`^{Mx2d&T9| | #V&J sD{~b8 5-}"oŶGyXn ?+;||_O^yދ=~ 2S6{hWOh<3ya3Taunr>_nu VA /~Gv?Z egH w]G)vG_,-8DJHs ' Sw'(PHsI˜rrlS~맩S;?ܤZգI/~핛};vI ~0|ѨXJ&)rHMX;ۊ ބJ҄JT')liihl5-葹>fL҇c:kٽ-4px?dlmms-1.1.3/data/projects/CoolSongs/TobyDox-Psycho.mmpz000066400000000000000000000140511247673406200227100ustar00rootroot00000000000000?px]8> ~9$qg1d1KnI-@m˶eIԯ9~EN0ȸeWb*V;'ӏAt2\zgY'ɚz'n30[F) }c{uаӗ]:gߓd?u83 h3 [3KH?Obj)=t&P/O?|4,>fRnBuGis sD!5:n~w&+&I 1lh?n"UXRT`[!}3 D02oC"5fhtm1m]@ay0̪3Z\fܒF`}S a1~G H j;>X VzK(qYyl))<Ֆ"F1F2],*a+tCaAadpeRg}g}-YR];k{h`M04DUj4Z#3wKU9l hag}mޏb^=M}po%UPkvDzN (8SOzGy^S'́8z@OdwV H>PO r;]k׾(:&[]$:eh!2f62q8.2F* -9Z0`/p 9ӏ,9)T'sYrQ dA Od@'y, j} l]' Vzg=Qz vDclblNcV1~DZl@c͝#e4,L?dY L P!z2Kf+Yc+,,ZɊ`W-yѸ^};`S3MTx6Π\wgjs =f*v`Z;aa* "v^ô=> FO7gt>> FOǧQ{%s;S.?C+gqqpbܼtd\/rqsaG ơ8"Ɓҙqqrfl=3Gq{(>`  GN;_rL޿sP3= g-) kMUSǗIp8@ZۓƐ 82G!#CJn:; Iuvr0r9emE[g%3)s4rs$R8bΥpĐ[%?Kn# ] G )rt)1$R8bҥp y 3Lga>p0Q8bhs+ 3i&5 G e09RFPfI ìFhDIaVp0Q8Qt Z#aVs;)0jf5 GME;s!"!%F%sӍJ~[]js+6DY@2qIPT$S#ߑO\gcV\eep~.KEMK"1, 4T8\ aX @h Pcg"v9) h!GN2k8CN'oTwOIBQiR6ҞSKT3%-ѥd9Աy&yy&y-̑sWOQ3xuxxQ` +pSy)<-(<,(+>y֔~6@giL^)0O^: P+6"urޢڊTȅ P \bNK.@\ 4]/.ȅq<.4ı.RxcQy" ҳb=!"]RP{>;K9+m"9PխR_EQ2L.+}rGw썾5ƽ D<22O,#,)Wϰ1 B،{!V`|VVO(i[AfQgPO)ן#%x8Vu@٪Qhqҥly晐ܳ׀Kg3RGm ;oE[Jy--<=.H! h?0@KT- 3'ز*L)rx >_^B.SȥK=DdQvh Ϙ <7k/Q^q džtzg&kPJGWP@P@q(0NBTU\˯JZ.oQOCRR%DAR r4CEh9Dիڌ/S;u-U{Y(mGJ=,[Q(s-/i(0' y. v`'{uT=DLKUF+8a_R=NY0S-tt%d:A:]'`lu?@&\Jw]'%frd(tI^]'8x헩>tJ 2]2]2]2]RB.S.SiD[2e.Si8|LeLeGe* }TN: LwNl:rNx'NNp4u2u23uZx>\lRlֵbl49]D߬! *1e !mb,vd5T^tYW ):@_HA%egH}!hEf[@<g~5K5}էT.p^zr'jr 4/lY_;0RkL"dy4RZ䴞:*Z0%Se Mq~l0䆔f LQ)*0EFDF] :ϭ::OOӛ=JAagi|y"%F{KI gmdwc!,E|^Ouy#GB 1Y*}jpw4otv!~^j^*:Ap@3JaxĈF&t *M90PR5FҘyG;FWʸ oL?h]\!cBrbbԋG{/ [#̑,kf84"PW"BtyC! R2n"N~F%ZCrcV/PUǃB*T=ဪj&zE'ΨD@h>!+q:\Rw7,!AQUM%umik}2dnl_ײ*Όovh ,y\XG+ZYN}CtdKzQ&٭_mQk|3YCQQN\VA!\ ha2d* ,?bZtQNc3Gޠjk,݁rxo:HvbMٽ1@X]WTW+اHP}1v:kw6 !^+%B+e샇ٮ-GQܥpu!dFiLbZި9czkwٴ-ǔU)&nCV hQ$giue5)rV:YO/=Z-?ΤBLde =}gBPа OWH/VXc=.m#*mĤUD( ̆6vgTfR@ڜjGpW_ -C.'ro^kt‚r]b&h{nQ5p=j8FkleF*ޙϵa[xþ$x`?ۮ{glc]Td} >J1<`9u*,!,]L}:uзR{PG]ԑHruY$u"E]I]뢮ꢾI]IRϒBw;v<(NyBfQlmms-1.1.3/data/projects/CoolSongs/Zakarra/000077500000000000000000000000001247673406200205425ustar00rootroot00000000000000lmms-1.1.3/data/projects/CoolSongs/Zakarra/Zakarra-59_Degrees.mmpz000066400000000000000000000276201247673406200247420ustar00rootroot00000000000000x}Y8{ NmxK(ɣ63{d I,/I"p+ p8;At 7gʅ|?_yw߮Kr\<";w$;BVDo>^D"oq~ۿцZ/LJB,=Ȍ?PϤ'( <,[ƲVv7!oQnbijE*"$v'HsdOHטXIٟu?CH{ Τ[7vo<܉zo$RI ,Dbc'9Vq󛛔2*-lˊT\eۣ`/]FzݠĴ'X?ɸn(aKnm9Db,kLs,}[ComAA /{AD(eUjo,ċ_ E>&w^m">t0;br9o격Բ64\tfcV[BCdZʢfH~Tyt2-ȴ :-Ӫ9R-},@pD0sgN;grJӫA1%DhW duf:jJ(2e~Q 3*, 2 ˀ,։geT9D4QU&Ⳛh4cHӤ<-_y TO * TyT;ǵw Dcb ?/W[L'T@9헙*L6U2<*IhC&O/M(]*id}";xϰNީ,#'<aH ̓4'Q;*6a+k/sAY-[oAY աeu(szkB& ;s=Ik﷟YOԞ8,+{f"LvTY3{7ٽ!j <;{WY79J@)r@Q3H9*1z; 錁#fjTV3j0}ZS%P/џN*].ZD~*ev/uuR(`fNK&(:+ݔJ_XS-MFV d1Z+~b} UQVku*<˫j*TޥTfǍ2SLiXT#hFpAlNeOeJ4Ly*ד-ъ1/ҜN mhN7,#Kz>pZCƊ^e%xC 2qfõӮ$z(m/k<k@ؾ&2 _4\'4hА 4hsM%\'HR⣝7ˏx9p:tZ;r"{hGNfȉYĉ'?BQf%8'NH'N(uw'*oԋ\kMfNC3<[A)Pj%Z ֝k+J*K%PeIomH JM'VZy WaPawT{q J.X*m'9y _U7\[AUE5.o4jz9Uksڦ͘\5SVh+h\%69VqmγToUS zUlCdNNz;Zmջ8nt0 Zh9b5Q\[A̷*>Tӟk+h)u9(V-/VmC!VԥsX5g{N*˱n6sr*ݖ]Vqtܬ=&x!<xN<x9CyZP~:/t7|gT2x*bu5q{w;0< ܙԏB!}"?}xo?v ]W0?YQEv|ktIQ%b _2fɛl 7,wn2ĢG&&tw^pcyr<&=?gj!jrII"ho,Oku5;U|Pke>&"jlcI׼Jleb= F޳8UK f4Iuv,#ܨ#쥛`P>069.3yhg%3bTGsn7?|v>_w7Wݑ |z83Tҧj}{̶]= B'\ b|ZdY  u 7> ƷQ.gp' v;-F Ŀ6%{Òӵy }~lr12P0,}?nf[1rօN}x>wɞS΅&*lΧǏU&ioEwM8,߮>~jd0`̈FiW2.nYXU1N,P0kz0 =d̖鱰S|gh g$zJ1Wrdn%q"Ui⿲_.gfe2—Uk|a뵪TfsOJޜmƙw5m 6tA%Zs#tbF{DmAuuţ[H#CV3_^^}~QԔn);Tn馗K_d)tP 0:o9vOӑ2<#`@ _( TzxMhkl^#jcv #n%<?YA$닠kVvAL~J(L]!r&K!cDŽ:{3oP=*~:[:{圆׭{YI2̔ V U+N Cn!ۜ*d) "lppCfblnB򯘗>ۻ=5GkwzL6oG&{x N>d;4Y"UO Nw%oٕ_c|:s:Pq :-N8Fs=?V|a<゚Gh1O~s ~\axiC0O۞y8.y8Nyz:_ /9l],##xiL_^v͒6#uP-!0튁UF 9䗡YF2!c~۞@ 65kX7l`Rra +%rA~>$ Yda9e%is˹ٗB)7̾ڜ2 ds+x)5ЧDY>E,-*ѷ|4TT_FsY"Vw6#3,=mZvx| a^0{|S2ǔ 0qE{dѯ԰8%zLɀS2 8EJbNt_2ǔ @1%y\tY+: HѤsy//G:5ۍmwt<"_8_NZL[<x z?P{쯠15?̿~#ݪ\.>?x+-.<Ǜ}crJ2u.6B16Åq&m RlcBPL^HޡJ0=ZA~pp}+ A^u=LrCT|~$ .B^Cأ}Cm'Udž .b;]wry횽"ǎ/)Suzg<ׁ43vn&Yo%V˺5FU{7eT+Q`g%u]㒗(%Ix҃*cgg6k|?Q.rmEASNuY0 vuH[)c/[";Sq݃S yId+Bn(8A!桘g]fhgx0uCQR~ )w;jgx[6M?m/4e!Y'&+e ɚS+8ua117u!@M mZNTsjisjCn7^2Xj^P+krS皈rҹՂ|r]k.rw MU SUkwE\6Ov,Yby.rJ"_65&Yܦ\19&rC C >|>0IEaiC>|I+b ?~ׄ *?~ׄj~У9?~`ɰ}?~?)Ӏ C?~Ik'?~G (=~&? '?~\4?~&`PGs?~$5ᇵ_~~>K]?~ޟ,Pz4L_~X?h&?~V?eP?5X?h"`hKx?~f~У9?~`ZU?~ ?~~XhH?~`' @",;~kq. K'm r _bDh QEZG (QQ[HEQ 0QϏ8ƑM懖/ MvIV.Lao}8Ƶs¨ q DŽe<ޡRzl ɋCg`\J[A^κEo$ٹ,:$Y|8\~!J\ Rl{ɴU"=Sak;m!=UƉ nb[V/V/g"k}9v~IY"e0z|fhhsSssLjYf1ܨ*|/j}%W7*uŁa%$ <et[91wnn9V=k|?Q.rmEASNuYKw8ԥ-x8$\[/[";2 ™G[%RJ f/3յR @ $L*z-H @ b@B5v[$H @I\.Ȳӯ $!ˑ @t8'iعo=6M'ƊQ2Qì㍒a.3CAlg%ATk\/`@GMecYhzH~sr}ɭ{ ^(Fr39'|fpsUHY1|J间Q&Qj#N½c_W׳fdMv4F&n~RO]s7h꾺(GvyXr".mcB"PBplcđI^:ɸr>2z$ZBG2,g 8c/zo 7ޜJqBiQ(hfLN!H`_$I.7R.(jD.EŇE^OզЊA%yWilT*u#ut]/Z{aJ>C][\xVсe^pw{bdgmNrZ1eR[TY"z /sI`X"*PU>:A~g&_U~g&_U~g&_U~g&ߘU~g&Yo*3ݨ_*f?Y:Y:Y:Y:Y:Y:Y:Y:Y:Y:Y6Y6Y6Y6Y6Y6Y6Y6Y6Y6Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y9Y9Y9Y9Y9 ޖ}G_j梻⩺J&=9uHN_|u/)ex-W2t-? Lݧ]'{<e_ۇɐKY>W!w: w# mN;t9Ayȟ)t!?_{]/ەo盧hX\}>IX]iA[\]|zwO./$rIMϗ{d9?_Pb;nO}r&,,~寏 ;`/s+= ')]dߟ.)ϗLMqm긔N,{oXI{gOKL'q /Wqb?}W~h嫆Eѓ<̯FīK߽l?N^vx\͕{2mQ*U.VH=vRjw2:R-i@e3OD1ah?њ.Ue8T>.DEoݫXʛ1n?5LBǬF◫NH/P]7pqkخm$5n|䑘f i;ղ Ur _ !-ב#遤$ 4$%i ^#X@3ndTL|&DH=?c|R v9jtk5)y4,g7솔a֏'K? d=ѣjhK72;gWuÃaZ4.1Ni}!7%5ֈ&uDjPza!:f9Gyq]ͤLY{#OȡLA]!g=h7fW:t̏`^``\ -2-izfNZTբzY[/_/,Vu݀E3X4cьEsEY4^UH=⪧l,.;j,g*A饧}}LECUQjG'^\r[U-g=kӄZnJLmf=uu6t_,7Fn:TSN:5׈3Xilb㬖 ƒOO/eO㮯É2Ɲ%3yOKEOT9 %ƛ7T2Q  <%P{⫦i ?L3f Tada˞z=['^a3W"}z^LҹQ@FݜHn-KGƴZhl 1 ?6416;arQ{Fbb ,6b#׈3Xl5:q_;v.5c'i?1T?Eލy7̻yN{M=Orfg8p4)ca{'zi)S_C_} 2}=8tQnl޳7[SNm](]2X*crgT.D|U/{I7V'IrMxB~rK7[_ym$G@l:udFA~Kֹ<R~.d/*?:`Ç,#D59>rg_%|U8Іm@|eD>§Ǩ5;c]hT3kneLTZd񸱨["JHӾD직7g-e_ޒy_irShd}%}O*#MΥzrbSQɢ1A#B_CbL?fJ_nܾPzyo3q)6Ӫy(&j9l?R_n_?i1Y,7tUo*+J~"zd:d_Z*T ]7x庽ls70VmE+JoqBQUqBh>UK+ios[,{۴js{9-1CD"6]`'k_δZUa'_tv(Uoء&a2[|ۢJ| "GoK4e1m,X؅w1؎Qu;/J D 'ޒ|Z0͑*l[3,v;ʲg0`ODUA3Ţ5&GW4]lhj}|#2?-1m3.g398 }$ϔpV]I'sWJt*RcJ J]v)PT1gUKzӉ J~XuWJj';_2J\BEH>IɓgNĉ|sD>Ʉ7p?_;Y˙K:MrHDOTi9-6q-88[Z x6hR])K=mjgwh_UmW?}I֧BZO^`Ҡya1sHڵ?m$i9'"[V?z; LbϕnEbgE׬8|+_/[LUD*` X:V̀U*` X:_ U*` XuX( XVUŪ*` XV/VEXV+*| `XV VˤV+ `%`u _XV+,+ `: X/XV+jo#.E^Nb]:B<YU51`R. bu!*=ld+F}Z]8OѪݰ6Q ߷êDT()VBSj~&(Uhߧ_mԧՅ`J.^ BڨOdd2z @ D_d21LN!P`o{;vhoVKB`XVgV|n$ ;1߃}dV" @ ȔW (JX @ #{ @fݑ mvG]`w#l(XV+~Ij.]/ `Xe:NV+ `%` cUepU+ ĭt|r3n>J k 4 T`d/~+If\ݫd>SK?ŀ!Xuck]-ߵMԅaRWm]{(X>N]bhZa45A2RzZW}uH5uGHo vhQᓕE4uUGCF`5_~/c㿼~ݷwon}/w:PQ778j0ᓽqIAiVBSlDkb2[j%Oݼ~duKp~64­vIENEju4 mͽmqژ:%1T~׻_}= !H{gYoIjןo? bHVF,Ny#zgdDj$ײlt7&.U"Jl zoL^57["ZөddlǚN/*Z̞͛2RhjR)ֆλ&ufO]q획D#1m>by ]©mo44Q+.ˆ:?qITn\OviV~>~!7*[E?$cjymcJ4%aXA}w+YQ- E\f0W}Cc!yl44s65w34u])ۧwP旹n%5>~ XW)r$mpо'փ4HotFb]/ Y(y!=yf{2K"ypLd:nnTFk46j0'BɊ CyΎ\=㷶&&Qƞ)IS}GOw&x+Y\[iϼ[hS=b߻֬z,>33SU50njș\+oif]}QB+: ̚b"7hL\UiƜ{ &DNLwG41vְCpӵ4[q/2iZ*E*:__J^%×! h8x]p {L`={K(uJN@_^"V?U >/3Sm0y򀢀>-<j"T<خHmCȑ21[U~bvoe<4:nMgrv,Mnh-.=4AČ_u3)8%vw_ϐGdR*[ 6nvnByUp ϶6hJ*HFshlK:hc]~d={ PH뾊dEF.jعڢZ )?olO3 ]i۸2P5D@JYjnv2n7Jh%1k%{'y=;A,m~91rkK˞i[*)#Vr$vګ}7櫎I-zR۩a8+QɝaFB!ݺ+"Uǭ'tN6&;^Q<a0.i., ulP"ƱʏZ Mc1%'LY~U7@<*ra0]V#+ݼO_>%sU\J$s<9~הi`.7z(ju|M`U#S-V.toTZłRL6OkE2Vyʨi3+~SAXĦeR"mvlJM[Mݎ}@@k:XLX}V%L7΄X`. KM0a`6LW V.0a &41a?&&y^ kk2PaAW6V% TCaD *+TXր o~VZTXT0 k-TXCa$jaIJ2q.+dD kM1_ox}fgh mZM4L ޷,p2{+ (^[ec56V:\tT6-7 ffT h@~E]NeS6Uxb":Oa?Mm:ySpMpMpMpMpMpMpMpMpMpMpMpMbޭBKԸxQX/iqdaDIEn'J9EKfhdI_}Sr'Ӄzk!XZUJ>M'Fό:dhxSzl+a'vooDޮv}3iM }G9A;öU~mғe2xdD&ı]_ej[TB'{s9Li8Bj!56!G,ڏ=ͮh  t$U}VĪLD0mQA4t0<k2MjDgY1βՐ:v Y8β5:րC,[ ǐ:KUtkoPJC ?~YT l׮e[cְD|i]9Dsu2*vaXU밚) ѰXa5Wqjb\utHAX偡U^}mMP~#_£z45Nʻ i5#;fyԌ4ﴪXLgq-,Y~BuzȳNy)5#:jY'V&It EszHtN)5#9j$:'VFQ)&ow~9t\S4͊> ~kH+v@+7 <ƾ֗-SK|I8NSgSh+Wy;bVSqJj'HS-cj\ 8"xq^QڨO U)Z6BF)66V Nu>EVg"P͔g B6"05 ~6EQȈU :̹Lt3O{`}ƩY[p 8N N SsfNS)fNS)ԙ#^ZLmUa#^ϭ^GN{iNd| H.H1쌇]愌L|`'YQOP Eк5uod4}}HIlO3LSm7W<9|#JI."(ŪM])L"|gkHZjyW-h52㧮F*P-iJ~Ď.'*I.nfxjJlu}"qԧ Ga:щY}։:"]CoXoS;5gY XJTlSux;'Ki>zƍmZI]qVJVD:~&Pvk. BVp rU!LkbfU!F ,`JD yUʮAT?2"o+]l22,k延ix&}Gbښ῰zީuLXklI$兇%~p}P ʛL5m%-|/B Jԃo~0cŷ{%*X6cS=G PmMƄ#yZQf] 8KӰ~KOa*"IqOѣjޏgS(WilJyx0,q:\XHJw$y? BQSvCfYC +Cwo4YyCD\)JJz0~[nV>'z+Ug mM],ѱG(f#Gko}Impj „V9NmsFU/tc9~kVHNSũ/RS)pqjORS)pjhZ}W~$UehmXт~`[nm j᳿{# l /cwHIlO3LSm7W<0;|#KGNLodzp,t>ChLk[/Fu:»n N/r*3Ahf8{LoD8z$J|[/nlDvMp5Pj@A/M7q=y]]sI@TZ &zo9/Xu`2߾e*=*x71Z(wV) xPȈ{C7a9_-ߵM3O< ϫNcBG՟\gfKuHz )/<,?XP|eah-n{AO`^oWJT*P6AcS=G Prd[ES1ao^pPfh,a֏@`$wVӘ=6HiV`Ӕbj&\īsq%<<G`z{1l^t´\sYv]%Xw=XvvXNgݎX&T -~0. 0$bN1,*U/!w"+^Toדkf݆ Oۯғyz܀}{e2r&[Ksb ŞGnq!EO[rwv{r -[|Y]}W~$U!#{]&\5 >W=Œg"2x>'H/~+If\ݫd.A5, 8 ۺ5ٖڦI\2Z0k.=q,vTWIiAVJS4!# o/_wp?uWGTa[.y4ްl_YI߱_TOSG_5_}4Tkz0 &P#>~>~2<˻﷛}{b` U@KXQ778j0ᓽqIAiVBU nĈe2J\:yQ&64­vIEDju4lͽmqژ:%1T~׻_}= !H{gYoIjןo? bHVF,Ly#zgdDj$ײlt7&.U"Jl zoL^57["ZөddlǚN!~ʌMGMfOs)JZt45$dI2Yӻ@W{hfc~ q%jH@q4T/og-5G 4:E `3ݦ}/wI›ٰKjL>}ۇ̿uKk7E~0(Kmh.w2/7D!Kh1 %/kv-C۸tml-y>8Do?}JeXy" L@qltx"QDɐr2vsڮFt[D;LIGO4FrKZԞ$wz}mgP{7ߚU_gff2J*|\Q"3KV}-ͬ}/JH}E0]m;;iSL:1 x˜s҄ӉvnF|}hcvf 7λ~v?v?fMfx*__MRHU׫jJh8ݜp {l`={i~ҁOgɀ2 H]tJ'ff.MfKe@2d(d@`f 7O>~Zf$E:^hKˡ>y]ёBmr%pLc -۪)wg(OFYލ7ҠjΗ-9]'gµUv6]jvggb2-.qUY"#k&3LHK̤dd_}y_?9ZIkl6ظ%y +UMlk&ґdo `iܮ W ;`ml󛘑̔&b'ڇ{\oeB?df0J|zJIGN= ]:n=kv41񲍪<5[Iغue, uDc?z&bJ 6/l5\OHoqKsLEa0]VR}w>}-+,El9{FSXB,bScśhr~LeΨ̽LK'Ec$Vx?ੴEޘEnɨ拋qF,^s Nؔ@L<,5Jӣ=erbJ#Bu;B=#^8}HJ>QIG`ɵ/}` z=/l_#!?ۗ٭@P/koa2L&: k&옰0aUJ&i` k+L6"U&V0KaVIݖ  `DE k-# Daa ʅR0) @u" DX *mV+ D% ^Ñ"A f|raGZ$a @" DXJּ5 "@Kx8Sb6ЦyDcw+ ?_.Q}`~=ݷ}rww+sJ7HuA_6Vz6VSacu<yX^ظ4%@| X#_g6DžKe\XGaɚ: x0n,J9&z1 xb| rgpyVÛTΛ4ޤtޤlpI'\$Y^ `z,uHU}kr՟aV%XTbڭ5i,Zi#h ͖,)뗻o_?}*L{J{bnPÕ,ؙ hxËF'_i N"~oW^'Cw"՗ك:T/ E,ߨFxUon A,Ev<_52!˷[ToTmr,|wt4!rX_e%vp'61n'БW %|^D0hT '4 +q54ǚ=L2MtC,cYFT lQ;βU:˖C,[wla9RPJYAF,*eUzhn?,rjڵlulv蒯W檦wPtUɰ؅a5W| j;kXUxa5Wjb\ENI^1^Xű}U8}k;ojԇim]ӧqWMHNi)5#;fyU4Īd I~r 5$["#GIyaIǵ\ud_ 6} kDbovK4oh軪#ȡ#CeGh;:ElZp.OiG1Zk|\[OF< Ո ρ2bܩRAT_KmO~j|ˢ\{l,?~Y\b B9"+P}LD8w/T8Hit" 猿R'T |L/T. _>OzwD"b/ڿPD?V"'̿~P}N/EB9_ oB9o%'T)28Esƿ,g eҬ[ X| <tDaY:.p, %nrT@L0^/(B\ljB>x>b8Mq $kAWR@HςiGZ@LrUb'6I8AUH/*OE,&3gk*rJžRH^61ꖋB#q%ޒ'K%sce 3  A <q|QsgcǕqܙ~sg#qsg#qsW+qswޘƒxqoܕ ";oܙ4A7\w捻2ׯO<xЕ7\_*Ӡ2Ae2Ael=@evK~Ae *T&LP2AeULPBe. "AE *Ts7CEݨDҩHH?Is^H5L8U *} *Tf*SwQT&NUv"9TP8Uّĩ 2qLĩ~Hĩ>LlOe*dΟդlto6R'|1*7xwDR_xžŮt{=x =x}d=x{ۃo=x{]o˅t% }r*~=]U\W.;Udڰ<=凵gYÏW=š@G*6{HIlO3LSm7W<0:|#O#&h+=-_njaW , lK+kZZU#o9ʛR'-qк{[W;](A lI|7N'Rf%dXX糂L\NJ hJ`$4/Oa%,t,SW}WBteU}|؟O?Aupdzh6/aH'S5am{?ڋQOSQضw,\LA-64(W0; 'ݹV2լtV?X=nlRv-UؠkҤ*j$J9mbުtk,n54Q9ic;%Yq8sK\ф cpyM,dQX:dп}\yƫRGF eN񿁠\[]pqn8 9mmč3O< 5ީKXklI$兇%~p}P ʛP5m%-|/PSmjOlt2pΦ4Mx%=N3vջnjt/]E;'9=+{ǝot3~OsugP})w9t7g/;{җwqt眧/sB|ϦIw9/]wҝsS3/m眗 =9# x3O;q & }yN.N.^7^9 ]Yob[m؉9Ӿ7vE9f6;|wܺܕK8DFznoXo4_^Չ9x}R s/WW#h.Sa^,mo^~a85i?fogz9Sja$K{[1nlDꇟ&8vk.a5FE *UpRpC@7& JD yUʮATb va9_-ߵM3O< kjzXxZV1aO3k%:r$=Q񁆺$=7kհFlDcɆ|NDEP,qP4wځapc.#ipGOmgv{h,XnoxF7hq:RbAa!@@:gB'3lY]嚟m&?ə$#AXfZv|R0'P4ĩjAY ֱ1ԜLbwИu ACq*Eʼnw-=_ĭadS'n?R ոW%v(H0->lao,?DH68TuQ9",4!؟ i]MzFR+I1 GXiRKRyOFwie*SRᓜp)hq(}k4͗[/4kiaFi~i+$9_hvܐ* 42阌ý:^<X Ɍ2U<>R}[Rј$ҁ(7bV:f)NkE`rLy 'cY9p?S~'GIioL)JEf2#W/*C^ >b-Tz.Y50`R2$TҀ)FNr*.!MP^1IY,EۥէIDRryS&"AtNn2e9eL%{V/S Ȋ3+'܊Ɠ>T_^%Jb"UU;7K 7enV4-්L1)PbqIAh)hNJqNBO;JfiZ売`3r U2GtLY83r'RA\T53QY 'J^wf -kģjN̕")V2@PʍXMO]2e+jv:ĝEKiNi'2#l>94`|%;)eR4?J͢6fcqMŒ>^%kYErCҴK.MѾRR_qևOpi*.M.92MO4ؒVɔӜA $e3BW,cA^ヘݾ{s*=54Fu:l=hN|_F2מbe)X :4Fig??\?Pٽ[\TV˟0R?ç͟7;O+D}aDG^55IU}|\Bh|Bm"¿n?Y15 Վns31N h\EF# Hxw+WsHX[HNh˽ H΅d4/8Kc[oL :jş6lmms-1.1.3/data/projects/CoolSongs/Zakarra/Zakarra-OneDay.mmpz000066400000000000000000000713261247673406200242300ustar00rootroot00000000000000 jx]s7z| :$vg?wvjw't2ş?F w\LǠ%ii鷄4ً߯b? ~^*?r߮G:7;(H*"$~vo7\~t\?_}HAB\im_>ak4<adeO'^lK^n{nP C)~X!Ʃ, L"gc^4zTu4z{nkOO64zcqP)TdrɞUFHg =HaT1%(3`/mПY %ſ.VNj/%8PIe)iѣMG+Ʋt_{.8# "Ep[F)kb=/=r6۬) )o$hy1':2'K3jż5hoغ:}{ӧ-<U$Yނ&t${ .%v$xEuN UvsjEy-<|R+bȴ"?OyXFF鏔mWOI^xKᰏӓrBd?_+6DE)|~xrcl|߆Q2.~: k/^[ ?AS@VxB/8|/Ө{)*$rO%Q۸9#Z%G!\z% '̷2,kaZ`:#4o?]77a&RD6EM¿>r\D[e^R]3j..ƴ636aG36i3h[U-[3u c hN8'O,n1- ~z>=&v \$;j$+%_]X`EUV"8}. jRjr jr#q'.kg{7aQk&P_0Yf<( GZOYQ0 C.`z! ȞþPкl=r&E('J  noįbcP rv'[BXaT%B !'rېMCS{@x)U@)Ud֌LTBJjql}P@԰^`P;X/T4`|Sg "i ԙ" `f _,ֻꏾcFz!M̏z=."E!RH"J%AX(r9l¡6' (OO`fQކ,q'B&U D!H Rw$|y ok֏{Oa*+3%}}"j?vn[5qv^} +[2$jahԡw'Sѓiطx#;~Lܗ/Sz S v͞W88}=JOa\_i_.S͞W<9t=S(عe@Os`rO,kbr%3x_/~]1C6 *xiY.@ٽ1=5?<ǷuAC5AyQis3EdQg6n̹)罔O~ xiqA`y{XJ}~+}>@4g/n%NbhĔ9a+ɲQXxncڂ黍qǔCD -DBD[;hizhm4}WrJozJ>48 ؇uc+bXnhm~B]8qb?\KYg@k&s@h -Bh[qB[6+m35[@[@1 [蠁IzO7T-Xd\5s@1J⥇3b-fA11"#Lj|?+4]Lg\0uƪpljUҧ-ɭ\j52ZjIBm]V!S2.4`[Ke;t %nRX5rdFиm[o!U!Ug566oשdoYƦjNb'@4yQn>~|<(>GOaILX ;ENgsmP&%;faj2M {~/TefKձD\jEU3}u.UZ9l[zo77қɴ7َfD}io^Uj9{ujWgқg7&lVoc[ːx齍mM3zhqӛt7/cқ ٤ U1-^37@~kD(GOU0)V@꥾DkOTq91&M iҚfz E}^^ >{8jKj H1?Z0TZ-L?[:u2F^U̶ lZ~ ׍w|^z5B=: S+Q\TMKsdK:D_PY9sy)ы8XS05RcУuw"&㜶?RÍ3R_2'g['^8Enm{U2h8"uxovpSIhؑ&n>{J{ 3S?T-~7(- כ߿MqEMܳ`9AC ͨr 9LzEZeғeVN aGh!n/(mXw]0 VIQg{-sVfbKEUу#~F Esbn4Xxb}km1ҕ8:Iށh+=N yi|>@KK44x5--ؒΡhi] z$ mv0 Wv';qFc󂅰}3[;R !Z?wܧ[;h0w?;MS͜e)tzm ZUV8Zs0(lwH@"@dwL *2@_ P+50MUBq@Aq@-nRfB{Ct 'Hweb!*3ϡݝO,h'+@> 0M;Ei3lf%Sp LlLckT*$:c ,c!2IJrd߯nn?;d 8|͑%͙fi?; HD55Jsz#'IZ3lR^|2΁" A. t5xLu . :ml5»92&xN ajRʭ,1*xwة2We까r(jnPi ލ/Mi+3 |_}`G (7 c$L a5V 0@ 0@º$ a 0@ StHXv&= a"<HX33@ 0.&0@º$ a 0@ StHD+ a|<HX33@ 0.&0@º$ a 0@ StHT@ 0> _Z%@ $ 0@ $S r$6 0N;X}Q@ ;HXef逄 |wH H a $++@H4#@ 0$b@ $N!ab)(@agY 0º(L @aI3( ., cPX++(&( 0T?E(练&  +0u, 0º1,`aXU%q:`a, ;Qa[aJU vi ™N=DWeAzozټ&@\Dqy0w$r?d<9>ߚa<[%Wq"90c|}''[F#_m_77FqJiud_>td_L>td>td>td~:_C8;U}Yȋc̍?im&+Q=j%r)nԏNn!3v # V!Μf yZ>!#ʼnsv&&0JAvg%w*(:o }%?% ۺK'4' /Cm}/5>A{!w"Ʌӭ)`>;u0k#)Rf"mHMk!e6- ) PRf@6&kH֠BOA5@ =7[ˢR}i]vXǶa}EKV\*,k,dX,taX,wX,dvX,uXɬݰYa%kJf%$'tbb̴Oǘ)Eٓ_~y6W^-3<{Z{xqya%CwLS2y aޑE0,8Ng_2Yǔ q1%Cu\gY􇌳&iVK@瘒!9dt+# GqP seaN珢CjꤟT%R{FԞ}3Pfj?B훃Pg}%,]SΟ\_NTKƻk|1> so#3\FKl$.Q?H]xI=*A(k^nI(={z."|(_#ƟFZ;(~ 䮝${ .Qǻ\UU[k7["Y{s'U=@rǵ*";UDWq>ybF"0(JJN?L^uh==)7r<-UpٿYb1TwY(2?u(/${%n|Q`KaDzetzM w *P݌nB^"?K4{ʩ<+§٤%WF [.#&P_z`!#DO떔|1z|K SF>_} So_ޜȵ=~*2'F_ᅱA2xǏ,DrriG Si \raʅ)\rarlr1zaʇ)NStSYOU1`[eKNٲ!-2Nٲ!é|)[6deC)[6dʗ2el)Sz>)wJf|o+7k>c S(^Tf%I*#=M~n"E(DLB eD ub0P<GxNr/F<zK_ޔB͔B'!qJGuOe駊Be*P'!z|E$L2z+M?_{YE&J-@hӪ Ā7RU Pe*c@P$Qb h@=0*4 d4]Cc@U]$&}"`*[1Tf(QUL@(SH&18UShu@ M tgFUCRt@]t@W . . .+ʌt|@tD]@tE]@tD]@tDWX@tD]@t  8kd5!v)] 4E)5px<Քv<NB@:-=<Г1O/_~B)q"5I %7N_b?1X))G2~"DO_f?IzD$-DO4ZuD\C(@]Kc~kNQ6f׿8f8w̹Vq5 ̹0œ s.̹0 Ü+2Nr jbs[$wIܓ*4CS-SMpĽrƻk)*[z5B?: /'O 6`8k ]{" (\kde8F/Nn|_,RD<#ؗF*,HW{{8g${)(52y?Aݠ%+։n8Ͼ~CZS)qsoW7wc~}D/Ş!kjcmfQOMlo.A;&~[.21E 24?~@׺;~G[hiLHv]-bjx/c?ŰCٓ6#oM"|~pw{@f!Zr0gox&_kGuGTmYW=8҅,Ŀw.ZFB^#Gfi0eEe+ :ml5»92&xN `jRʭ,1*xwب2Ue까r(jnPi }/MY+3 |_}`G (7 c$L a5V 0@ 0@º$ a 0@ StH0> $ aueH@ fH a]XVVQLH aթ~:$l0>  $ aueH@ fH a]XVVQLH aթ~:$ 3$~]hk $ 0@ $ N$0^/@8HXci@E $ a)&!a& a53$ H aҌ $ K@˜: 0I $ :OPfPX33 0.&0º(@a 0 S|Pj™<6( ffPXɨ&`a֍ `a| , 0* e XI SMS|l8 wXOh-t)&* ҋx[ 7 }"L'S6ɸs$! cJ(ɸ.ρ#G}?92*ju\߿]>yo1SJs =##b##c#{Бz:N@*949L5959L6껙m 7+X^8uJv=̩pnntmm:6ſY#Y:R68rɆn} (T"eyk azF^dn-+SAF)xKVhp̈́+>̈)a _l8<>Q!oM}ŬE'7@ I.ne>fOoWߩ`I]mM1Đ2iClZs )i 5&nHMڐ2!e6^Clz O0 *TZUB-KZ:m ;+ZBT(fIXHfA'Jf JfJf!JfJf솕J +^V2+i6'9;c}:?L1 ,Ȟ]2n//dţ;kn&/¼cJ0!;h,CygQ5Yv8!:d)㊆8Ȣ?du6N_2:ǔ 1%Cs\Y t8""]L7w-{˵mw*U8=dRsP',R-3 lԞ7؏Pf7j47?S(a|r|uwuZb>-p\7=._˯c? ^T{ke4Zb&Y.v AKQ Gho]pNF[[|vCi14r^٤LG[؄n&w$(epZ<D*\x"  s>2L+>Ug"jq+0r)F鏔UWuygb.PeD[OywiѯUͺBBߔQGy''+Qu>r]$ k/KO w zK9۬ }d_"?ږK4{ʩ<+§٤%-9WF[.E#;YK¿v~rh1UR2Ӓbɤ xY0-`Yn DC<}`b)*@Kt?(3~ĥBjJd7Qf$4@#qxpҷiN W~zD;q>rjskg.TкiXYr9fΖnZ#<+rp;~r={cOm<GҤ^m6^aa}mj+F~n^-c0(,(\FG5!I_PEPid瀔gNJujc*CmMzMlM9nBF| ݒ"KJWx!z C"[/BOR?]zi"._b?1z|K_ޢO^WDfBI(|(SGz?!zZ0A;H74 S'&))GC/4P/)?/-ߔ=MY\O.RE_B'&^ː)4AEA=E1zG!z~>CK}MEV麉l \U A 7Q\[18BxZM#'!Oɢ(,'ɢd(4J(ɢ|EdQP£l(Q6YP%EQBI(4J&ɢCdD@ɄeQ!P2gP:YLE )b($GtE>JWP6J.DoMI{>[N |[ﲚ!`=}&G\r}%; ُؔML&FeCِIv? Si\raʅ)\raR1%jbs=Gar3~}!HۗP/DO/ El^_2 kS"sd7d!:^EX^niz+W R?j^P:'=꼚g鈵nO*4O㗩bAiEM˟IFB;gSrKv1T \M!@@Ĕ/) h:ETUЖ1d ȀVHŢb y t)Ub@Iз,`*[e0ȼ@e8UA(So.P)k (>.@sH . .?t@]t@]t@]t]U.  h .  . .  n]@tGtu&yE7Qȅr ţuG#_1"E~;4dCVsiwyӮ O?nD1oZQNQDҩ@JAB)F1oZLDpqOgG.nz`;pd9M4IҟMӲwasD `=qLU$ 4C2 iLd 4Ld 4tLd 4@2 giZ6N#Sj W8椐R#IH-ᔚpJ|^2:dSjpJ|8NSjNSjRpJ R R#jJ܏#n- Yrt[Xvx Yvw!"[gi݅* s,$]Pw1~]O Pv.SMi %rԔ.S4>.0]XdwqI$SZZsψ[sKzOWӴo[s;@lM+i}GE d iĀRsYv,b!ݭrވe9*bBD YԛeiąbAv&-p#>҈$#ݫ4b% ݨbD,9!N}GnUq^7.%76 "mJ#v'|)8# 8|@qG@qGQ8# 8#A[pR'9'Iq Iq8%Sv'IџS/NIquz8)NJ>'IqpRf'Iq)8)NNFt ) . 芶  .   .  D!q9g* nIxAU\.Vb~BQ~ n{Io^/I¨R<ջ~]%QKEb/zq_>!;C]`#j䭆OEDɲ_Yg?UI>6묟BK#?GZ ScLiTMvzn_=תϳb5*/3U_. X_u"2AvqѦugD= _aI:rKPKpn57Z[vQn~4Z0nB[EM-X fbQʞF)K8$qJ_*U#26cLOq\qC׳VMVMZ;O\8gUKV#& |Z u昫h==)wcNWef݊PewoʨRW앨]FdI^[ ?y.Ӿ }d_"?ږK4{ʩ<+§٤%Q{9x>s`.[$Y"INcԉE½4%dO5`rAU g0^x29$TdrAK՜dTͩ5MЍKe7E4MMR7?M=M?(@[Lobz}J&O PA‘ Y bZLo`cbz *8azC#|F1.&Lo`Ď7@s?=az(82*H82a2QS709yt ƤtL`ƙ2QLS7RpfgolNF9QA‘9̘͢ÿ\9M0sE1Y4Z#3k3!V0T RId:lhĪU6UaT2w)(Yf,1UtLUe:p)F(iJ2]A$XE/VU;(ԘCHhL`JK_Czd&j՘>,lt RԘ^aBl3}B `J1fFI :'L01K'LF:'L&uO[L0-j$#LK-i0}T+dQ ShKVFL0ddR$fjѓLWiEO2^aFld2}¬dMPɢ>L0JaٴLOn1 $ E-[@DC,_@DE,c@) (@(o10#RZL瀢w@ABa =8P`R@Qg W  iY.? 3 sIo. ?\ rz>PO8u2Bp-HVo8 N"T ɸ,_+=RO_ѣ{c7>@ԩ`[n{\VJW#dG'p_|7YX)yr3ǴD&.'zEȼ_#3-#﯌!0zq"wb >(#ؗF*,HW{{8g$E=kpa'4ʜP;['^8EFM#&\ĴLz/^  J=6=z*y~o4x{%W μ E^<=K8iux%g9cc2aڬۆGD1%i\d2'lp.7ߘ>A,3vzvjQWw} 6N%3՗/lp8BH,o_o~7nMtjN>M|B]X٨ w ZDg!șhrM ;Bpxql?EnDzg׷\VP赺OZ}>oth,2x'E4P*TKKcR ˾暖 vlI|_P aޮM=_6;maPfw1yB>)vwoǐ;w]ӭ\;]Pܺ,N mXM4`Pр. =DW8P|4P0 4K&PbtSFY]sY 3#WTc$Nix9V]c$S  u2ө uw=g"/+yX=qE{soޥyPMoYKNљ1;itGgb22M!"cvYɥdƾ_^~nq qw#qKK4y3̕Hwqرh0 ݎ֥赹Fi^c$IkΔ RV{^`O;]!]`!E&v/|IrӅG<)qS@pi|;X=mz *wovh "iiB.ͱg/woS-̝*'٭.Y*8b5ajlu٪}ر7f+IL <{vra4ظ̤RQ]XzD &MuXG=s`َ]t9i&31Z$[ن/ͻ[! s?!)^Q,Vvrm~s9:3;]@W߿|nE+EںH>J{y5֡Sײ(۞sE6=mw+ӟdL%~K8 {E_vQ 9-We|TgDrv*M\TK5 ֞F A`P[F课;ZSuS(kcO"O h}=}tp/ >@+4Oh_ >+ @Tҗ΀ƣɑ0m^ Hw'; c$L a5U 0@ 0@º$ a .H،]0p$L% adrAvv@@a #+@4#0 bN,zpr9agկIma@a֥Q_@k, @ؾ(8/=:;;:\U uV{`~>_77FqJiD ґБ}Ȇ߇l>td#۽g tT%aQaQaQaQlsX\^~`Īͳ-uȋW{/浃F̌v3Y"*GVΝUj_OWU Rr1JJSsp]]#tov0WWIUg4 yxLUsQKZ2ckuQtlZBѹH`GOm֖0ԑRaK6|wkЊOG/p#'xb؇GX1ޓy nCi vm¸ZYaKR_ݨ}d%B>-oԱv oaϺ#՚ˍn$i&\x'٥l(AIعkYJxKVhp̈́+ #Av[7| YZoo' /Cm}o,:^ FȝHrt+1{ QH=3LPl!لl ) RfӢvHM!e6-KٴRfrHBOQA5 =7[ˢRm]vXǶa}EKV\*,k,dX,taXɬװYa%a%pa%a%Pa%= 3?1f^~`Gd׷_͕v?x֯x&+-pa^s3Aw|S2yǔ aqECwd2̃8a-jYǗ q1%CuLgW4YG!㬳 t@!9dt)㊆@Ȣ?Hib\mtXmS#ub*=# j>@}ovAG}s3վ^߮PxQVh>[p_}:S-18W e/H*Ͻ52ZF^pi~- R,G} u%ѣ@kzA' #F[[|v᳥14r^٤LG[؄n&w$(epZ<D*\x"  s>2L+>Ug"jq+0r)F鏔UWuygb.PeD[OywcѯUͺBBߔQGy''+Qu>r]$ k/CЫlzmKPft+'m: V\"QSNUYm>E&-o?_"~0BVr-H/ŏҫ-y^"i%{g8_['aEm(&uFTpEGU΃0F['}1JHrR cJ;u&GoNT@MEIܫM<>b@sEfXw^rBzG9Ex!z|O/BOq3SF$/F_x%)uEd 䋌^|zJHG漦"O"E/M_oJ_1z3M9%DODO"RE_/DOi?G~ɈUbMi?!z"?E=%~"?I ?B.&4LdiB901T Bx TAN"gL]%GtщR;8v/H2\b=#D WIJ v{Io^/I¨RnC[&ɬ,}3 eOåw8Wp9COiOWoby5 nJ6{[$hh> 8QVQdnHUURSs_QVKSԕZQRQ'th[=YɈÊ//ꍪM:gl #wy Kd9SXK^xd3ʇU4`*|J.i08!rBȋlu8EZsHz֑ l`Gz#%$t>M@lXB/I'٠ntu?bR1ٌnFt' e(/n@ޕP"X8m )}ws% 4n@c (#|SS';֑x{ʄT۪2#v !ↈ"n!ↈ[qC  JyFq^K`~i=NMeO=]N=VWX_ gDeOД=RFfR`o`Pl)3c+o8]x\5"#x\qj +  + :4ª>a}Xq}Xzއ>a{s{'/T#y_NȺyճR]<07^~ ȬPrHOސ?SA3ED~$&h / LdP_EvW< La J 9AJJzfؕPH1&9@ǎ@D Ch6FÒc)!Rl`6xd}ivZaI0X]Ja UXjVZ*Va UXUXm*q,`7X o|,`˷_`˷-ߺ_7X o|,`7XXx7cRj#tG^ɮ~Տ>$ мI9Jh@9\Ir*zKFo0c2)_ |5wꫭiQIh+J٥Jf4{qث-<9O@ nv[gzHA nv/v;RMRX o|,`7X o o7۶^Ma-7;ƛ.p]Dr"r"܎D b"z/QV~-:V.&)kʵDY\Kb1Hu+z9J^D65hwOg.H1٤*w,U{>EﲢC{YdL$hnqWiܭB$Ԛ!PkVmEv蛮gj0XSfyXST:P3\߫]nQZj;]jL}T\صmx׻Q^`0+6^2 Pr!*R4̜ͥ1ejw7WRrf}+ňfS/jVp6bX$XvShC9 E9UR9YܔY.3V="F9"'Az1ɪGŪYȝ0FoʪERn6-%Cm{r>-1xs Q^*)cZ=sJz pZ9#]U& sj9U!)fN` $;FAp4^ |~0C^5 1)AZ)ed{՚-W'Ş'ܓX̑N5Y̡N ̱,‘=× 2G?Kh+sk; {Wg {׊^7Q8aFQ=AZPY}Q=[ @$b:m29N@SЦV1+3S13e:HAЕ#Jt )蚞e^ЄO 2ry1n(1n#֔pd:}2'S5 LL`(*Yp)L`L'`hL/`zvaPIԯ0aL LG`f/4T T'%Md:SvW${:)^L`N YIHcZ$'Xij_,4IIW G-XX^ck1X3:A+cTtg4a(9#3=T!+4(XՙaZ "~J70Jj'3̦`/v{L^*hf1 bALH傮c`/t@hBfCISfv>A}+0&rc 0a91ƬMcY+0&(`L1k%`ƒc 01k1dpL1 8fmpZA1ǬE9cY+ 8&c6pL1?Y;&~pLV91c֦1ǬpZ8&c 8fcI1Cc*Q΁g*6GQIq"ezYV`7#&S#L6'$cIѹҵ3Y10ݚi)V19Rv3+v3!qvSd-(D-0A[6YZ'Nl&dCu+,-`giF;KTMN IBzhde#(g9) ^vdC6i'< 蛍x>ԴIZNi;N>8M>p50M>@2pL>/K.b& Kȱ\`%)NUpרeרeCElP$F-$F-$F-$F-y$F-s$F-m$F-g,naۂ0"/{-:m#/֋4/0D];EvEz2MSiLծ̞[tbG]?W0NŌqD C{+ѓ{.{r]ޠWqKNTuK*¥p#\H` (!zcEeu:=jX'{UoUִIG9*ixrdY%/A/"7z؆ٹ~'B^ׯA@ًb\dunuQO?\}=]|Avicu\:O4QD}AQHpJWRkaΨ8R볩A*&P*=`%EF:Pr,'ʴ[>M:K_v՝lս`B+^8JKmK./ƔՏos{XY@n'E Me?xm/TR7udvJӕx޽|ݠ92n[Qb4;1ߍo}ObWY~짓&*zJQhΞx>gʠ3K^ |W+MjdeF0`}T,! ['/+ U%HUmԊ?u򧢭/w4Qô"st#lG2; rٙX)W(WW%?jigJp,WDTDQEúT4T9u|-mw 69B+خwO~P<>iO;j= `Y#QSz8:|#ɡ4\/Mɡ¡(7QNJJU&W~D'czΏbսi$g?o2)G.XM  /wPC"ں~0QCK >mKR%CTCHVF,KM#6~[kWt-iO'澂'#˘]yOs>IkVq϶tғfpwYy$ /Kюg^O͌n6ɵH%gP=qID;j<}y|!1b/'SjЪ]N'n-״1p-ꢐ @"M ZU@\]`:٢TkˉA0ȷOc+'ʧASaِ5j0Y)ouڠ.P]/ %!i?i?i?i?i?i?i????????m6 .{˂CcgUHZItE-4U}HΏ%iUѽ섐cr#!埇#埇#@'H'P R  @'H'P R  @'H'P RI$D'I'QIRI$D'I'QIRI$埏'埏'埏'埏'埏J|[h3VeM?y zжp=$փ΃lɄ94E7=n*S}Eךw)ϩy $^"gt^Yr`S_@F, 䵳ley=YSztaq퇄ݜ+wf\V lVV>Xĩc8;vTGzN;fΊreMMֆͳ2el]X]rKUͪuf7 &)ѦjAU1jS)ܭCπWSn}'ń=ɤ"Ium/;Uά'Kd\q4a @olmms-1.1.3/data/projects/CoolSongs/unfa-Spoken.mmpz000066400000000000000000006260761247673406200222630ustar00rootroot00000000000000-'x[s6| }}6촻&5;L7f!h@dF-Ik---}=XgceWCh_O," thӭi;z~ ۻ/}0-=|Ϟ.}o.'߱w~?r4c͝ju(X?ys0'PFI =0Յ>?t444O? ^Q[A{5??~쁹4Ϧo>Y !ז$}K*%`Q[;r[} d`ɧl͹+JakؠQҠLG,d~Q+'$ d&}_, 48q9`󣏮vbi:5$9G>Ei=? +!|V.$70§olh@MO闰ێ"F }#䑴0أךkhϦfkUCRY]=lڇ}R__ݭWu']Oט D(E@PUGahFqOP*'-\r]c~U\?Jz!"!~{WSBjG4Җ@ ]5Q m}]gb6*bRK1L.BYʽUO `Ww4\Xn 6O*B]D%ϪDv hCؐNC#,Ӂ|JXs?Bp=&»R "} 1Oá_1!gzJ_ {J5Ⓚ?]èfR[4CXc=vL!V0^Ymk(Wir ke*/3ʍSiAKh]p).h@u4ȰuT/&Ci2yD3-Sf8Ⱦ9h̴? /Bv^si!g=CWHqBɢ5hEBTSzX0t;vnHg_WWKiyn(s!yki^VҼ9y7ƊYMP'I4 LO7w?}s mLqZ (] T` zRoP-횒њ@Qzi[ xHFPλ&B(VB~%T "~%j4.tqz ;(Nt=WtHRUcssp@KRR5ڦتo昏J@Q}7e?adD|6<-Ӽ Aв?,}*^5 V@^37f{`Gʺ0`tƪ[!Dh!\'U H4#xĢ mbҳJ0t'9N -O(K7dqKi/gr!e^g{&'P-'娤UE.HC ;{[*΀nU+.,c2 Z.k.ML\w,v`5nMg e3470Kf, %=Ldcb5>f,%Vl߾>f>f,eL-nc}̒Y6dY{fY,[YA>h-ed샖}ВO샖e%Qw-䷋Z *iQ[[-PLW[`V[45~R.hqq6.Jk.`(//Mudhocĸhw>H~jkzL׿EEXA& n0âl@yIoNpaQ:&Vr/i93gw+0ᄣPR3TyckAH\-Xn*lȟNa~I:ڊ ZIlr-a 9fI敲( _Q,ױX4GnEhĊbYŢ9R*&)F7'&2)F7'&r(E5ß;5pQa9LAX+wc% s!炏<߇ ~@N8.oq\N).i^bd{ vv}X>nx> P\9!1|>B'!Latq]ܻM\໤߻޻/{˥wu-.޵%sq{gdq=&.]ҧ]R]Ҧ]Rץ'{\zOLTo֒H#ĥKKګKʫK⪫w\zDZK8֒Z2վ~Z|QtuuxY喖&K/Ÿ 0_s5ED^ƙf fJ_m-Ih&h0,s 3C^xc263j3^1264赙%6Nӫ31lL&1 Č1:6κl!(Y}6>SLPL>S bLMz64,(۪?!nW)V1AbWb7b*FL^>Io+d7SAJ 滳QJe[U0O${ǂ61E3zwLð+f1N1WAլ ,~ kkΰ߫0f{u&vD3zm6tڌaW*4?Ԟ(f f`ظ<Ά>q*/yOn|<:}v/wWu^f_C -Ъ[y5çˡitW ,;zb}-Y$­y/ eCgXkikEa<V{ўִ cv#҂[/nj&$h}He${72b7[QcW~oqjH*}Fx8>b-?) sb;eNVLfSN0ΫpZ5c iNV$M8QdJq59LۨdΥ=҈G$G$MRIME c]҉B 13@2},g,;spiǴg n;0grdlAa*je3QXD¬u.;:7wxVzPD4H3.pcc.GdS YS zbdsՉܹ4x1 x{ifL %j؉<85z(!xkZHx/gTS]>+]E.gaݦc>D(ɗ>fæhoHZk׵FgSߵЪ=氼Y]_=NN7(WILE' j.l)y0 ήz̤%! 3hQ%c;ZAcc9$e2Ezk6d'-Pv8VR 6`{z@ssw7!%OHrz\_ !5kpGZh f rD UDj8/vBOXj)Cbg9OnM.Bs$^H=ee 8$#k g[ϛ:LWig]o@naI^4^*%s!F,FϪ>iz;>*0{[RC_uQ:֛N0;-p(KK|Y5fxj9j9:͏TO>mh4rE S*}1HQ՛a4?ZbizT~ '{$\@GW阫_Շ?׏R].gn ɤ}ck4#8SRR#ΒjdS.Wt7"?ѥxzEe9&PLU mwl7a[ J@Q}X:a%}D|6<-I Aв?s@T j4[g &ؑ. ]jיVJ܎e j> V67Im‰H:nC[GIJ0tԶP;8Fhi<5<3\DY:'xxL>n)m~,Q2"z5CcWp ţK3(, l;1:::j_p`YEfhֲpu^pǶ>+' m(B[㳙 L8l$!X[K]f}sM-Y(C$- 4r!hZݸ usDM4aRX~W[|0~ZO*څdot-}O*Z7^پ.uG'?@[8|I5_V4ksHnqGL.(Ȍ4.c(`仵65M!v$ kX`'@|Rq"fN*B}  ey\EK2 RURl~$si8˘?M6tcK8ɠSu if]:,e9y\6똒QѣYb'A}b=L в}^ϼ4!/&O ӂ >-} v.-YA}Vл"6 ~|v-w0E,IwLC7}Ē X V@}IJ3 h]C}ȒYo_doiC}ȲY YZc}̒Y6dYih*Eq,,I:_%˲$=8|Y{e DmHF^i*wc սyY|Ylt5k%=$J{I|X(&{IPk:H}ZG:H}G}H\tշoG_ZRe<*BYI+s€.&.(t ҷ}RDSPQQio|z~⎳E&g{=lVy|e)x@3Zjz= m0םӃ.jW 5o)cQ:Lx`NQ&~kTM`'ՀHuå[ *t F"|1砿"ixZ/iC8`Qi-߯LLvDh^)bѼŢy+EsVH(͑UQ,#X`"htC{b"htCb"h\T>#Z% *d![r' 1V <r.h8.8.}q\ w q- ~Z%-HK`gW k߇㦍Pub#8yfJŽkĥK KKKʽw\z׺KZג]Z2׾'{FO'ޓm%}%u%m%ezq]{X.'[ͥdktIl-kߏ8;M\.z˥wc-.q%sYK징lE\W75QniiʣEÏs#=l}bvKvrGGֺ#g$Fv_LB bdU<'/ /\ʌ3J d%/pzMz) |s+|NƃJoHu>3bazcT)1c44?1:Wڇ #QY FolKf{"UCVeUOGfetdA!dn%/1E~oFCB_ bFo)b$dd6'ҫY1)3,(Gb"2Č^b2:4ՙ4$3z}&juI$I8B+q6gcQP$YgƘ LlONT:;7MCsAF'+d2]1%'Ë!MPLTӛbh򓟪7E2bb$`h ET|]g$[K|f3BD~1A2Č>-DB࢏Y( zOq..*CZ]TEP bUmƒ" F0B?RR,7z}Y!e֡">+ BAgk ,wWa+xZs?of~}=}`94m?_p[424آcJaBu>Xw s0m-p(Bx/3ؚ40~cĵ[ZE_IWi4>$[i}{2  sQx刄 29 Gćor_PAG}4{o-E~>=PU`3#$90{ydWNZ5L/y`GUa L ݱϱ,ޚp ,G7} ?laC/ '2=B*j}zQqaF^ղ+̴P6l@`*jgn?;;4p;TTaih Z@c/"Ga#E_f(i$%g$ uG5㞩ef\G^^0RL[k|ٝm6gG̱<93P&53cSˀc˙g8PFLE>0E:T |t>_ԭ1V:Ê2_ͽe)ϒmUU#OIA,X  QC4x1 x{iflP(LCN1̭ ,hִ`/l=x^4@qX]?F]rgkZ3tx6чWK<1h~]G`^k 6z==V.fmsw6yzXm\"(1oS/ T3_ufcMɃopcb ΠEPhE7;ثώ吰+Me.Mp^֐!jn-;'DZoGsm:0~ m3tCR="pd˧26 ^Aiq tM.'m}]gʽ'BV-Ŕr t6Jr)׼cilsB8w˲&tjiguL"X4hyFH'!Ѩ鷎>, FrQAUS]>PRً1λRWmA,* 77kw՝v)]èfdxx X3AL],7)1 !m[5-UaL"{9.~u w"-h Nq2-JvO#L·e!RD[g[ˢֲ缠3vBb,?+w?Z{ͣ-դqjQ&3"HR '1L&놜+n0λm Rol(.@~UÄòAlȶ>²!jXYzNIc&I~ L4cwss mm xpܺVJs<16}ʋ)}~KF'P5Jkp4-x-w YGY2@ƥ@RataZ_η]lnWT[2kT.mwl7asG%tbi'T擧az !$,cv4m /֙|bInkav #vA )jBt& |r P5`+iimoB`+M3ڎN隶V$։"9+2 ɗD9ː2v?k45=j9)G%}Ǯ*rAGfPYn:P9vtctOj_p`YEfhֲp%rib :/lXf#8\TEHukz>c( ^ͺ.!X[K=f}sMER(CpXUL/:hٜX`CJ-c2;P;Q4NJ=6yvn52D 0.(rH`,^={ Wa EUX)gu,Ig 3܆2dުFHʘ%]eaI~YieIrK${ץY,r3m OTt\ozQpl$JGgeMǚDiw5k=$J{I~X2{5;H}ZGwD` [rӹ1ﻫ/B~e}Uq%Ҁ[w`VI35 EƺmTyu;*eThTZެ7%3~QtK}vA\sL_]2g[kNTۍz8-`gA!5+bR$a Zh<2sPt>oudg.]rTg8$*0ᄣPR3ѭU 8~l-E6#qLrTQdCt< ow@:%M>lFWeXTZk9$E!*&f߰JE$EJY慯(XQ,#X4GbEhb)FF9Fχ(Q0T Q,•;a \ՐsGqqC\c ~\8.]mq\{u]o4/n@2]ҽ;\\>_7m<})D 1b< g3k޵n%%%%~q޻X.k]ͥwktIu-kޓ='h6q>:62.=Y,ޓ{dz{OŵGrq &.]R_]^]R^]]W];\zDZLTo8֒%J6䋢Ǜ͚(4Yzi"އ9Rr|/ʲZ'Gv88uGPH©1!,L1 d1H*2ErsPi@5\̒XN& D  ӏm#)Izc4c%:j%ӎNbG6֫yG,F`ju.8k_{Ю=5;k"MCh|8護 >0#{G>/1|\`&<3A L0鵙Lfbo2:宪3^Iɠ3z}6lU}6fg5{&Hhl!&j=>31^ИA Mz}ϔ3A3A ڄgs1qlLaXnqiκg :F u62# ȬȬ"Hd)2;^Vd&h6%d,!c+]7f<$2z=;e/ɬ!d<4"F%I>RXҗ!b: pHv  M3L 3d  b %Ȭ(fZC3.eg'lBՏAb bFYKŬCuQ* ((f $[i}{2  sQx堁 29 Gćor_PAG}4{ M??[{@@U%Ό3.KnPv;|!Q(Td~HgrttX2.'1Ju,|[~Yә[oO'qjT̩ Xy`TOmF8n;DbApC!4DanM`d|tfkZ;(#:ދx+> tXC5]>6x&a'_Lx$F }{;}|]l@{65{] }˛:VaEtp3az1A{UTt\Яҧ?@5pUxj6THє<gA=!! 3hQ%c;ZAcc9$e٦w [Cچ27TJʿlϵU|n~Y_?bڻIVa ya9Dߡf H $y4? 4_~YU nD'Fj@5|(Cbg9OnM BsHME&-(/ Ɓ5$YK8 k2ޔu %yTtzpz̽q5R4e)5J eOV=IM=Vl;"CЎ:ױTt^AiCYZ2&7VkHoLі:ڈF,~K^9aݰ؀4|'k̆}"R"gquG|qik5{a6폖cl2V")Fy>YHj Tt&nw1/gF̌29Qre2H.hHLBawerH/\™a9-ΙL$i;3$03 ϙ"-|'SM(TqZ (] T9OzRoP-r@E-QH;  NLqvCR*Bj ] e~i8JJjdSj}M:Z&et*^^QE[BBŔ)R6}V}6|TJv~.ڡl>yZAeIT j4[g_&Eؑ. ]VI27W-@ըyiVGcQVE$։"9+O2 ɗD9ː2v]Ch2jz rRJ]UT1.ܾ͠'u茐'V0DR,ImΙbiY!1>f {1샖}вZAKږA>h-%A>hIT]-S-WZ߸ **C.Gn2c=*^c~rŋ TK*tu=I1^C3^71Աhw>H£·gk;!~ dkg~7>~To|27>ꆼǍr'.yw4~͟17ϙ[?z~FoLz)oI`e!eٿ?37LߤMx;n>ݦOΥiGLQiZ>MZlܴ0_g Ʒߣ3o A]wp~33I1]6렶e-2ʘi1'I5)Tk-oP枊Vk) Z%ԋ >LImBWB-.SB}RHZt3ԅZv "hPKPjTz^ YS5ԲmP=OzI-ړg"$SnqVgw'6^L#ӃIjW 5#Z%*d1[t'1V <r.p8.ȓ8.q\ qo- ~Z%.HK`kW k߇㦍Pub#8yfJŽkĥK KKKʽw\z׺KZג]Z2׾'{FO'ޓm%}%u%m%ezq]{X.'[ͥdktIl-kߏ8;M\.z˥wc-.q%sYK징lE'\W75QniiʣEEsxu<H,!>H_Ls#;GGFͺ3g$FveD1&br?*}k^N $LDccY .5_XnoJk}R I!sNp4"߮<f$U-۾L{elv 4a^8yxG{C%Us8b8haVz?*DbF$GgW;v4sV0}FG3.3BTeR_cyZ3~6A(grd ́K{}+1o7j;]PdSQ e:: P?4_O$5rX/YF̣e)NщVѫh4ADR\,:ԝ{`?}i|t{i};0C®\6텕dc!; -;^m{.K—w7qvip_$9X=./u_V5x8#M4Ҍ~3p|De9dv4m"5tU[E㋨@;y,ukh&mq ME&RF_F RkH2wRa67ԩeu %yTtzpz])~?f&d*tz|*U`8-qRC_uQ:֛8h8,`~xn]lʩǦ->mh4r5x䄩vÖ4|'k̆}"R"gquG|8=0 G1R 6{ZV60nĽeKStׯß_XhpHGZT wU L?c* 9~WiZD9"t`Շ4Rbu\2_!W8H.js:ЮTHmBd2cdw3cdw¯ڂ|eI= r:sZB)գ/Syh\PHI"G'$ ^{)x:*Q09\ BVuZD[g[ iK 43=(oNHl1ppP:W}38kHc(,gtG|0[ Z 1L&83c^Ό͙erd\;dq@Fv|~ムLAT=o|HCo||i$ }`ýs<Ͻ!}0Oaa{ey7X^ Www%`{XBoR&5}ך7*|i˅<>^MMD2Z4K]v%h'ߴJnZ|-k XRidMX[_O0&iO.%)@{eMrFu`&؀1U6\^g@`9dsHDN^-Tz=˚$=$1&t5I {IbBcM#dx%@]44R-dëoV׏Xo#K吴j<'Ľo5+]2$UpH^YDÈfo3jDIPD5yckAH\Xn:l̟N Ov I@: ZIr-a 9fI楲(+_Q,X4nEhŊbZŢ9T*&)F7'&4)F7'&t(E5ß;EpQa9NAXKwc% s!わ<߈ ~@V8. pq\7N).i^bd{ v}X>nx> P\9!1|>B'!Latq]ܻM\໤߻޻/{˥wu-.޵%sq{gdq=&.]ҧ]R]Ҧ]Rץ'{\zOLTo֒H#ĥKKګKʫK⪫w\zDZK8֒Z2վ~Z|QtuuxY喖&K/oGz[ō5g^#{M3#%P7C:K]׫3AJ楠m)Yg$%i%gJ v~+ b*fAt)*Ʒ p\_K d.A2g R1)wUzV3dz=+([@f bFgL^ Z3YA3^͊ aЫYA8~E.Fd1 WĄ_4;;W7cLfǂ&]°8Č^ibF?7E1 0@bh19o .~p3N<:}v/wWuYf_C -Ъ[y5çˡi7U ,;zb24"E"aB# G ʳc ,5T5k+B }h`kZFK;DniA|cIWi4>$[i}{2  sQx堁 29 Gćor_PAG}^E??_ՁD\ۙ^6P=7:t" C#Bѷ%H4Lia;v9[N_ff*q?R>c7`:?:Zl1yznWvYUXP5B4\1 Rj [Ld(3Rߐ ҹ2{z(|(!5-Ô pYr&K8nޝh\zZj4KQZ-|bqTZR6bq+γ&rX뷌ÄN6ӞEh9{|u^ PRB36r Ƕf"Ѳ 4DanM`dۺ>ߚ샭!ʈyXF/*p|Ra 9rFo:gj̇SGH8{쪚+ ۧtzeHi3Cdw¯ڂ|eəT)Aondo4;Q <.hI3hj;KPc8eͳZ NrZx9d9|_˦ѭїXR(7FNN-1r\)N%SQjmP\˛ATA"ч x`idy fNHg\}_V$B]2dy>YI*C"$$ۡu8Y7 ~uC!{!s}0g>2+b Ų!jX-Y ew.s1n/wJjJO&4]iޕnJS|ZW>ʏ;($ֵP1t>J{~jiה2-DO"(\x8M(C25Z/r?z' CmpY1$jK\%J5)]f}&o-Ӕ3T/\$(*T̈́;9P:wTEvQ:Ogӂ0ŋ -xLݧҸUP`:ef{`Gʺ0`tƪ[!DhR!\'U 4x8 mjk `tOrhZ.,41|,[J|9K H-c.VFZyrTw"xti؝=cg@7FG9f 1UdVl-[ Qn5&`;heZ;oe_TM L8l($!X[K=f}sMER(Cy]UL/@uв9i ^0ĖC ZНktgyo L<~S;tXњH&!u I[-7[xnԍV친gץmA&\xt{/v_8ȗr̠EZ}C m?F.sm1W879e@*v:,LRv (u 5F5Fb7sX^\dvv]bAD강c.((f5à4F]ry܀5llkuN/tH%M@iKsY>ظulsJ0ڱ'XX˲$=|Yu{v%`IRK${AX&}FM ?|Q3ߨtÃJ)s2%3Zb>~^ -M\2,7u[ltǾamޗ[E|7 h- m%޴SL{Q}]ym\"|.愇ّs{TܝKeٶ+Ļ;2z2 Fzu[U6;xUD,lҮFq?zɫ^Ax/k=$+&k&(kK֋wZbz+iO(O(O(O)uB`=muO;-~hyQK# .UV9!ŠY麕!"c]DS:rpJ* 4*]o֏[5Wv`/zK}i͆ zGu'y}uI&jT qBgwl'dEś)0v`⃘[X5됎G9 wx@hNaᐼr/`gՈ^[pւ ]v$.}D,7AAE6O'b :ױBwqFYeXTjk9$1F!zi|;囝vKr(KeQ,WX4/dEh݊bŢ9*EsT LSnhOLhRnOLPjЇ?WwD£D;Xs,Fcs 1^jȹm#O7"q.2U. ~\8.jSK`X .^]d.}V믏6lC%"ENq 8I>w)]k\u.)...i+޵r]j.k]KKwk\\=YD{OKiiiuibl5ޓ%%{d.}?k@86qG,q;dz{DZe/Vz!_p]?lDK+ܥ9J4c5$oe;Z;I0uxugPH@I12^H.)2S%=eM )Ĕd1g<:$@IGo'bcIAɉbdΥ&^vbEv)q \cS!P>Ɵ\CAK6z[t6k(J]Xd6XЛ#A"#{h9/1FOo%z>[_լa&ӫٙLff N uULD鵙4ӝ ƝuZC3WC3)LT:;7MsST:47;&9xPX…,z VpڻΊ<:}T,wWu+/{ !|φhU-ٚaд ѵ ؾ,V l_@PQk`v~]XZE{[ӂЏ5Z!o^aiA|cIWi4>$[i}{2  sQx堁 29 Gćor_PAG}ޫVE~>ޣD\ۙG!FͰ?Ȼ CPsjwzaz;-8b|0 ]f?0m7 t<Dz@\zk  z߬noJk}R I!sNp4"߮<f$U-۾L{elv 4a^8yxi>08KPcȉc>a =GF5ʙk̦ga6=-Mjb 4pgtiMQ-gW1%D5`{$I񹇒4= ,I%Kb|&zk'E +a^ʿH6b;/ޓiH״AB&=ѭ@/t'_~:<_m+f&A0v0v( sy6LsV*tN!ʈA 8g8`H*@]N$콠/`g_n=4DqA\Dr}D w{9 3t~uG23\<\ :6n3Fu lbw;7"f7Ĕ[p$ 1-B 0FEPh o~_o`]9˄BXnT:NAgGkoΣPU~]K}7W_n/PxsgÌ/qEMϗMݢ0Q0{ !BE~g/~}5c;3>%EȐxO^y>>'s?ظ]oYσSzꋌ9y" upӓhѰ%MV/Moq‰ Cd0Fa.^2}HYl``TKhہ@=X`fgFܸN pmǫ7{SkKʤ6TF.9j PhL_Wr`;8cX"HXgFl4{6O2Q 9ƭCyF4+mvAv 闚EN#_?oVWjaBhxG\g@H#p:϶a}e,r|RA׋۫/B/<8䬩,|} wQy?_bG3UZﳶb$U5ﳶbU~__NCc}ڒGI̤$0vp6 j,9 'lleFf3#sؖit,U[6fي{6f1-QWD9N:f&MB\~>I#P !8h IArSH]P=ۦ b79\y_.FH-pXA"6]Eg!m m@'h492`$7^QF=+4.‘jod/Qbc:K`_x%:_c Uy_d195cf*-]eUZ{wdUiQUE}(VUUZԇJUi }*S M*S *S 卐|PĮ 7F`qm~Z.p:]'u7"]P @.ru7V Z!uxļ  l*Tpy%PZBct I6B fibmZ%w޻g'wmZsuѦ5]mZ3jӚW['dy--:]ħ].i\-Y.ڒ-Y2]^m29;~$ÑWm8%{u]g.m8ruц#]m82jÑyWN+=Xw=W(Xz)"$,Gb9T ]-[죷BSL\l;'TL 0Qu8GũJ{J-fLh&v 1< 9by9S|^iEYY$|,pWInUrWIE*DfpPEb7Fi6T=gfbQy紊]wD4ۉ#5؉j Nj:Ӕ0P XfpU45ͮ g3cfԸJ&îNg5p>ʿ,i糉pPYgYCJshYΒpiٹiuvnZ1rs h"zW-MV[n-u 7Buit޿xxd:ͿX.Oiy7Y.Q_ B7BySo,ibpƬ+lzhl=߉Soot7 >r΋6]J8 |;dƉo33>S2x5C6ˬhKE_2Du5R)N4M~+:bEb^G|JO$??C q%H3>4q]uGm*~.g'>(Ax-=|(uwxql6n*\Nc Gto)?tXPI{Xq@O A|XDҿwa:Du2Cl j`V"Mȡq,/‹`ӟ/;ޣE8aa03F=M//C~M#W֧AĀpS$mkH7X&R5v?ɧИﰝLl,M$r}xy#|Bc=H '^(V塼[Ar+V] ]1_> :^:n R:/osN B+H޴Z9ػZi@f(GqL!H''U.%>6[A.H:va/h 1"^Wi y]諦 _AH>=dޗE9F&j*\7`& *NޒޭS[@Z;ƋtJMwdȥqZht/=8^x( ]/?d'~`b Fba6ڱB)@dE&o3ö5cfЮ-ShLKfPZRk4N>"LV}?DckΉb$xcr:f@1F@cŭzAKAKAKI`G-uR@F-qrF1K1ZYzЗwX= ~},AFbȢ( AGxy|G0%=$MWB+Pio 1;CM&P-kCNс8t"PP`/t5zS*5~ %kD"p5[ MFSvQ-BKޥВw|7] -yMKJYhF93DrXgҊv!i-BZĻwOk"=Rٻڐ:jxˣ>G}.FWȲ×߾]~yU 煜ZP4>D-& KriF,u֌[UUCw@UU`PjI|s_nﮯyIG"yNrIn'_̿ǧu]FHʊU2C쥻㟿\jM0Ypi1NJuAB{]ȭ$9 鐁a ֆ:(xfhDPBwyG>6n_Kp[GD,9\c5 &dchkY}|e~z㰙"EJzWY*-YUZԇnUiQUE}hURUZpB{rBrB8+>xy#=*UH)b?.c* .i1mtG߈P wA.-uW [[.j\) l+TK+Pǻ&Cr BiY I)$9T=S45i]KK%zܵiEt]iTKԫMk2gg_mɞВ嵨dtvNĦ]"ӳsdhKdtz%T G^XKK%wEt]TKԫ G2e_a;`M(~V(Xz)"'C(a9!#KЍD.>?)_?VqXl>`zWTld(QL b5])v{Xf"' F9wY;h̎.EH3>P3KMf f-*)'j&2:~ss=~+Z&?=Rg~j;+,Fpbf'i~}p-|hUU")aj2,$BjX_D 3ihbM Esn[epb&biV034;S04kYL853*p:S2t6Tfjlư4b( >7Ui8ٹiuvnZVgٹiuhnv6sȋX"+$mϔ-&BS2x5C6ˬhKE_2Du5R)N4M~+:bEb^G|JnVJr??N q%H3p]uGm*~.g'>(Ax-=|Iwxql6n*^e//&Xx[Jk>Tz1ֹD&ccB~]<6Gi5[<&XD>,rh:*huC.J4z}|B"^;&S.{0AӣY1 SKMA#xX`0FF1 c4T4h@ xE#4 E#Ӛ1FemJo$?r0C- z)KA+2*pth U 9V4H ǖsƈDmtYfQ;1`djp@%4M 2M k#gE&@vgɽ.s_7UB.X_,pxIqrSxC}CH|5։Nn;/~sfw~u?a/BDGE$cڸl=-^n#{v>TDѬ"Xf>D!E\c EPh o~_o`]9sWt!-Z|k-vVd;7W_n/kPxsgÌ/qEMϗMݢ0Q0{ !"E~gk7Rzb@G8g5$7W# _-ky`JX}_ 0mg';Ѱ%MV/Moqd.?D( ŋXC)6@ FV++@ԃ 6o6޾hčPom=^nۉ t 72 :AN~Ӝƴu%4~gecl"QcFb?qD1* C䯘RRdڐ~W: !t7]_=U}*P}e\dcr:h,1E4Ɗ?k ~zV": )&1T-Ggpl}70 ༼7:]AU вH};b!t Nc]"c:yLG*p"ӪL {)U8D{i.lUS APխA\a%{]'Y Ci )(UMi&_[+NKUOcڼ#eš|WT95<6g3(ɵѫ*\eh-WPy -albX +06^]hl|vojv:`/lg.=o˟<( 6sH,MG2  [0y6vk-&^qd7'^g}AnhF NC NCkez$1aL#z.@혫kl##&wJ!H8$5N 'vPrD AL H.$^&v`>I Z V FDL23=F㩤O1Mw_D[,\]P?^T.'JǢ͍EoG?rA ; 346_ЉcA0۰?h6H/_Hv-< #]@7t)by>414× XVӐse1{I|H58C~~9abJ8X>64Ԛo-hmJh@=Pj8)%k@V .͡$\'wbg 3fsmg}҂eLy.[èu4 .{V],*1 cH{兑d(Ymb [v+ >B0g)!_\ڥ)AAC y/@dw%D_elؙMm6Q;)|U! Qx7{YЄ+{MgJrMt*%!ygV_g$=KOZ3A LvӐD2(k U@uK4 tn~}x'&f{Ӷ0 nLe֬A n6,͌YٸehY@\rg hn ڴVl[k+c+ˮT\nn5 ,2yٰd^f%zz&25MOԶIo4IRLM%}$~+j.c5~%PD9`*,-r>0,Cu5 #:Ls&PhfL:B)Cu9۩:Vrmx6u|u\C2T7]Ct2Y5 2C>xcONz4?Ftq:h)JReϫ(WKQN:I,RV/w_Z tai~÷V !6:]EH{Zv!i-BZ仧wOkh UvOkb~>G}BvPeӅ/}ȵ"j 9' nwqjr~ø/׮\:3 +Wxy#=*UH)b?.c* .i1mtG߈P wA.-uW [[.j\) l+TK+Pǻ&CK[H,q$m*)@ӚڴӥK%~wNڴMk.ڴf*%զ5SdOhZT[utOD]b.ٹT[\]%KE[LeDڒe*svH#pӥK%yuN]p G.pd*%Ն#S󲯰Vz&_zyxuw+[Z~Z,jrOB R-t#OK3ƅ{=8-!E,CbbD/ݎr0TGLcblj^t>jO\j&1/', ӲH 9Yh/T1/jU)Q)T+)Ti&vZJH3w{l1 Ef)" E6Sp:S3o8$x˧ό"/f -級liM8QlU:Йlf t6Sf]e!f:S:Sc l6UfVW̒3SufP3άҙU:$MSjp>ScY橦fg7 MeKɦc㸬"_".hXqYE;rH3R }D\VQS&.h&)M >Sp>3?]%4ȬMUhpPm U7i&hTYgZ$〉4ܔҬCs쟾҉s?o\Fky8(3rTV͒&\-1~%q\}wc&By 6M[KA&AGnyqW[Cg@7 i'N hDLL R:,.ixZp}Ha8uР61*Fć輟/u.{ l)3y*'ܹ^>kp 1X*}Ԇb QK/xv4<f+]n>v|aC%cOd2=A:/aIޅslqa V+*{mZ8J4"ơV7{QdKLJ~!IkNfR-aD2쓗2Z JM J J1RRhbS@*i*95S1T06b1($^b{;''|ČC2pcJ[1tB&CSC$+5aΤ1 ')a K!4 CSM%CiZ#KplXjڰCֆeMhc49 ?>a;nD $ZmelA= ݿS2b~GM31fF`H*!+^P^ H/H!8ߠ~/"9xuӻ[΋ߜ8vws)y_..ް!oW3 ?_^l{PE`r[j" 1-B 0FEPh o~_o`]9ˁBMoT:/ jvL U;݅sz u?gߟ~6qO^d|-  1oz~ kG IG=1#)! |}}N yԱq ߲9 ځYs4Dn6OOVoGR\4Zl4% '&%2 Cpb/֐C#mdD`ZRDC7J4}v(om=^n] G_[zU&R5v?ɿPoBc{i>D(:W7GC5İ☉b1nUʻ5$7_1oڥ)е!s㯠u@C"cn~zTVz N<BGGǐF㵔fc,Ef": ) _'Pm4Yrm{ ;te(`8 /d)M PZRk4N>"6Z'Th.5$P\;I:j 04ljt`Le;0D'1DylR Mj#feiT CMw_D'\ \]P?\.j-#!J^v#gJ@dϴKD|B'n< 6Aۜk"!N~Aėd&j+wa!e #$"@cvN$F%T/W)BIyn`C:& /L mc<*7N=-.V8%8,>6lڷm [i\;|0HP 'Dx\QSPmti%ٝ= t;1 i;,cJSd]5EcqJ .{ɆYz(1 cH{兑d(o=42l f*R3⢔_/onɤw :3SȌvߜEclfc ];}S({БI`Tz\`:z]&]/]r_?QV %{#J7}cJ:ɭy'7w_xXۥ2b3v7tYLLɭ2k'"Ԗқr=].59N'hZumk&5R"p ml&xlv4f¶f%Pv{;<7S&eluWJis;>Tww?$@@bM٬yCId -Y7(vKѻr.tUy_2E66܋ܙbݳ$ֵYj-BZwOkR"$=EH{ZOߥֳw!u~>G}\ eӅ/}ȵ"◎ 9'(hs-ZLygҌ.} ĴftV;"PKZkrwxw}i<ʥ;/^]wc?2tg5O.to^Иo:KwǿTv?pժ` n0j:,]?FYo[;ٍs!WC`P |1vpX8"7Ss hƁFQ%t?=pcw7`&W0!ՉX S 9 ^ 8DW`hkY.kִ9Y8l檈kQo!ҢUVEJzGV[UZԇbUiQZUE}TЧ25Ф25С25ʠ><^9G Ecq k  7KZ.p:]'u7"]P @.ru7V Z!uxļ  l*TpyR(-K\!1|:$q g3дu6tw߻D]b6hӚ6tziT-ZՖl.].iشKdzv.Ֆ,Wmuі,S.Qdʜ}?ȫ6t}uD^]⮳S6hÑ6tzT+lo^?^ 喖K/Z%,1YjܟsP~RH5+4iy0ĎvdzBĎgݍY. BApo;q&W&AGnoXySo.%nm݋Y-cah)IA!{xC[eV@ޥ" Xx/N)TQ&?FEшOe"tt/#M>%B%'$~:;Kg|hWuGm*~.g'>(Ax-=| K/rql6n*BcKvcJk>Tz1ֹD&ccB~]<6Gi5[<&XD>,rhrCkn!h"I|a* Ti\RRSKYYXYYTYY±a chDuMLunnÁbZ3uO s:U7@ cPcvNs/AB іbM pq008tLcSJwhL'dř`d2a4'ilԱplcCdcCk0T\Zn,CuĚYޘ!F#i<(gAO8 pX@-gR&-ʹmѼO ̓SeMF>xRT)CTdu799ҚFl#>G=Qޅzs|ɑٙƉV`$7WwdG>B!i[X@u58/oޱN B+ݴZ9ػZi@fpH'U.%r>6[0h]qY2gR*as^# dllX>5srko eo=_<:;ib̂P cPC:$ㆽKU8"nаJb3f}w4#4A 4<jtwZ([)-o _[jFvirˬޔ`>i6\e.}fYjfu%pfF[q5x}N8応V4ki5kfbJƴx.(f#Th[T_`\x^q>A֊MCeL\8Rapj8 ,$nFaq6,,4άdxll<H+dYto.]_x0΋kO ۆuO.to^И8Kws3j8XZ Ɠ/{x wAn.DMnaB%6:4c5 r @pZּ/]׬isqUעBREJzW*-CŪҢ>JP*-8Oejt=9Iejt?9CejA|xr *b1wu1RAn_q]6u#OtoDӅN:][toӅNfBvy*%U]!r-PZBct I6B fibmZ%w޻g'wmZsuѦ5]mZ3jӚW['dy--:]ħ].i\-Y.ڒ-Y2]^m29;~$ÑWm8%{u]g.m8ruц#]m82jÑyWN+=X/p--?-^J} 9JXcR-t# OU 'vpZL1YP1c?fbG 5J;]H;zpD1#QLT?^-L}">z_X "C~)t)Ԍ:JƫjΫS5Kjǚ,D7Of] ɇjL2UP|yB-tbV xQ&v<ݐ=bbǾ1春&`a1PdZiVMopLȘqfy0,NfW̄T83E糙/nU:LQgpNgS5`(a) N4"ͬ>κt|nҬsܴ:47;bZS?E6ZL-t [oqZ,so.Y>}/ˇӷ|Z:C{nwhz>0{~/vUF>~p%MZc{Vݘ1P^Mo;q&Q$h }+o-ščM{ћ˴߆ g4f}d&j ɇ )olYz4<`-d8>j0S:hPEQE#WtO?:ҽ6\$~:;Kg|$NoWuGm*~.g'>(Ax-=|~wxql6n*^e//&Xx[Jk>Tz1ֹD&ccB~]<6Gi5[<&XD>,rh:*huC.Jz}|B隴vem4 R E35 Ti\RR8򥨬dxX0F1ԍc4T7Rg^;M\mIҗē[y2߲pӮ rVw QF a F*wQ轠/f_n=KqAc5։Nn;/~sZ[O~xd?C:6n'D|_^l{0XE q[Qnr$ZRrL!ү#eάW(&bA%"D 6~"2^ ŋX uRTd#c"ltZ\QKKhA֌ٵ 6o6Nzv@XnP쓍ؕ}x򖙻ZZ{tj?`aBY87]BKT-d %W7'4 kx|i(U%Y}4+&GƜ-_>*QM݀ q_y>fB#KZx 䉋.tR_mʔPpRtk= )32k'C [ߍ"9 ;1|]qy}L '>V΃/.8k ,BDoA1Gzs_]"sz:p0ZЏH=4~DNc {)pXW D{ g.lW"Ь{1y>3 ΀,*x >,?kZcLl1g"m0wkYQ{,)Ugxn40ܸ{_ۇ-ݍӨu-#`/@1Ňͮo˟F4Z.B/0C0.&rk [F -C$F !UyYʲvhdSmh; ІŇ퀫k^@:pHZɡpb9XA2Sff5!ɔD:vP!,dt-ԿِQ6miFDg3جfh.}^Lpt' ˇۋ/"&+'X/{mf r(!EoG?PtP ݎvY6(l{ 8 \:` 9 E8B~ADV:&j+wO",Ӕee'bybPOo;."jr劑*ucmq¹ `'-K/Hoqu:"V8 "CVm[kڪaha0ڸ"=%FޅH ҬrpWk"ݵ[ind,pz,-UF {&BQ԰Bf|g's!kMmr+/A.@P; fD,XE} O.e.ȸѰPH5`70\b4^Y~H_ȚReZ4Ӕ9-D3]k%/4auNOV{pO7qC"%'^eGU A"d `yB` S 4@jodS1lvYvUġUe X5ݳ*Ms[5޹jwՓJ- В'+/Vژ&K7hkkawwȚKV?ve=XSO* όi:'gȧ kJSjS/l҆E]|P֤ygTdFNZtߝ,*u9Q3[;):-;s:R/:}N ӦN@?OZr^%RL4e'S s)VO]2N&dmBkln2;:w9EN&'’l@ѝOfl];L໠T;L vCpmVM`A;GJvH(Rۇ h>.6}@ldO}9nI0Ļ:.?Nkϡ?AN4CQ+? 29B%]yu]=5낶tnXOб.c=}vCz:톎 @;Cz%Jcxk3Mas.}XcV98}cX"Hۼ{/5?OGFrM7\rY7kGQ|ėk5Gi&y6qu7/C;.&=}݅nߩL{JY`j49">-}i?'3c.+6gk'{,"=8$58$A5o )r*D F=v6#x t7 7ӌOmu`B3 qI"*~ 0~XV-R&˄8e,e\SNY&+v2YSɊLVe2W'-LČ/sp3sBß7!NJ<v5a!j+9).rrڒ -.{ڒ-.zڒvN[r>iK];mu{f'f3XvEjwN\b&{x'V&w)rOEvţ_&&m/Yy*Kfʒhm).4EհbgIYKvʒdmg-ZY!wcՆdm,Y:jֆCG(=Bb¯\?^rrҝiNXs1,"_pPrh]?yͤ4ו2D|z}e5xgհ'Sw:SQ0'ӣc=ÓQөyA<ё)yK`mN/`z6yhj5'^&bUpUq) )2UOIutB&wD]SwJuη`ctf{3=ݴ5!,vaBXl:: 'av:= ,6NnЇ =F'l{pvOvB)̗S/ԣ#|:2_#|6_:w,SoӁ.^Ngs@0O yLO8> kyHdM1N.CۀN/ݘXՠX dޞpvcڂB')Tz1ֶD&ccB~={ϡMQ'-3:^Q1C]Q"Bӧz>{q)TRTd 8h礥qӇ=O>4f3^DC?b\ݑ|$L%fo 46g#IvtlVY[`U?MUeHV+/ WhwTv*[ا9%ib~bb]~J]B ]t J/*[t-t[x}uׁk^׼%^ fdZi^׼u^{uA Ee<2uH/*zQы tE4Nv^Tˢ#P:#P>r(5k^׼)^KGRuu^z N/AEeb2׋^T,]/*zQыJDѡt1]VA96fU"lɅH+C&ZUPj \ÍPWהnW[4SG&dF9aTɾ8HX|2yĠ8AOM>jqk7Qk >+}6ɤGR-5EUdYUq2jbw5|1)C*SC -R3g3 OQ+նuF@s2 YQf` {Q LuBLצS S"1ej9c=c釖81NlAU|Bm6,T158q(~Qq% r<%YUqB4-DV)j5Veo ?$S'Yt:M[4j:͖pjo#6 }"Fd14 gx:0FdxhP51>##K5Ĥ]CjP5lJѐ*ߦo$9kPgs0 |}4/Pi -O[{>- `O&>s\Įߌ-7cgF-U뫊vstLcJzW&S>Hl>HG m շϋXaDXVN K ӏ" HܢH FyWi@EuEW'Qi3El:IL@ }hKFMʉ/r#7lEE*n$ & Y8es8gi&`Z`Z`Z8ii͘ւ0-EQ3}`Z8i)uoƴ#Z8iiLKa1iiCvX0U0-MBՎ$>!6-E+NX ddkwQi.jwQ0q.jwQ1E.jw&E.]Fv!]va]v!c^]"L\]<8ʗa.jw"E.jw&E.jw2浻E.ĵӸh^dE.BE.ĵE.BƼvEvx"wqJG]HkwQ]kwQ]y.jwQ0q.jw=w5EfxNdVQr 'E2f54dvU!kZX1i̤HCEZC8ĈZF !"MyH4qC;]8;j8CEI8$&Gl~ׯH(CrqH`*qiĈCx34qR!" "MCRfL qi&$0G([ ]&aZ aڪqiEMȕU.ND]HkwQ]kwQ]y.jwQ0q.jwEwř9.R6CDKml" _=`zQ" \xw)ҀI1fwVwCtHS.R!"M`Pqi#&0b(qi#"qi$ ICbrqVH(CrqH`Q `Z`Z8ii͘.LK4qH`"aZJݛ1-]yEl6w&1g):-w&J ]n4 AEJ!:a.f%QbwgOK.a%4HG&GdER796ٛՕߛ4gpg3os7d^ k7́dks iRSR̾[f[wS3'`5e"R̖ю(>o6.je z*KV#eg=&:Aj'zLj#P>*)[jԛ"a2z&|2IIiI2L>!@Y'MYU-a5ˤ#&Kv.-b2 ()td\ZfΥeljRiH̒K,̒K_jͥe\Z&Rf.-hK̢K,̢9,dL*IRyGLQ.-uKpj.-sKˤ[*㈌l|#bKYH6ʥeri\#ITX&rL*g4-fD},Yfy%Z.Ȕ 䒌HB.Ɉh䒌fYӝ0j|O ]@jP.v ]@.v;NI+kP.v ]@AijP ͵ ]@vY]@jP.v ]@24.v -p9_ET`%'4Xd_xdNdɸ0ᲕwDp}}0¨-s4yZ!" XyM:e&"M^98MDyH\<5"-uRǙɸ4"-uj$:4HC. q=RG>fҒI8i0CfrAs tmUZ*L"8[*rwi㻲u tlUZ&afc NiDz 0Z];%IsjJXt>H¬Υ'%qhfnJ˜:|[H%BMqqç .ceD2~ C!X$`7$i&8wԔaQ~ʢ UNQ+"Hә2\Ca3L'ie 1P!cc1G8CEA, i!.HyG).'&Z2׳HKz,))?Ғrp:UEh`׹6U{ib׺ߛ؏]!@ߕ ;wJ#|WbG#wJC;w%v+#|G[cf$Ն ;wJ#|WbG{֪='_blFy/5(l"Q95~Cb ȼ @bHX k ` $8yp5JB¤&[)  28fM{8 ߤ1Zqh)v2HQ[rd A{ Z:@_X/,yO uuA@ 6dmM+i5fYhh7 Yd! *zLAaTppR:v;:v<[xG<[‘lkLk0 Qԣ npˢ ;:v<]Pllt n܅AJ.+q%( LEڄ(E]Լ=.v-oZZQ98B]sj㚫Ur6-FPtVjS~;3q 43d?Oo]d7ito Rz74/ 2~_ mAƯwk>b;0bŘ1c.7Jc01*|`4>0ZmhfFkاuv|`>;>0Z`|K/Զ*ab4%5V6tuy2=vV6N$"۽pclZf _A?j<)b/~(t*f3]n$oAGd:/_S0G΅44&ASn| Sp}B7i2? Bd{3MA @@鲇lOje%bNª.d{ 2l!OĚd)A4&{:,@Fu3! ;ja<94 3 R2h !hhB>;Fd5CɠQr@5F>:)+4 .F6FAAg;1]Ae?7Xprc˫4} !C A8q r}"Q=y0"XoD^>Lշio,afWL忾Gr=( -( ~.)X8o%^0X.d^I&M6hVI^HE*N%\EW jĂ4 (kLt^Hx`#za? emc3]͋~!^Z$3V$[_V k.Fyͯ//-S@V/Ѻ])5wox]p~'9F&`&>>\|i3U$^>Ȱ-|~ϝ=/d>fd̵'$8[OAjnśzFXy$BC`)8u诽U2Hw`*n{ Am8dW0E92'!wh.n*˝," ,DBG O8+% &Wo,7iS:^)i/&iWm+tKdz1u{H ?i,gLQY/W7w]_<4@F+hNG#?,uCPfV4?ș+-gXQ#5.A&hVޭ( =|έ~h8Gd )38s/>}yg k@$&Frۧ6/2+ EQ]6t4˱iųG?g5)YއmA {m5!LC%dDv=%n#'ͳ˛]~t+?6s&[NmSW1-!=_"XDe^O~$N[:M' n¤; n64J;5'>?W_jAH^FoajipY!gK[~]YdyVX6u,=YNݽ5 ˌ }e;YW߽1y(Ik~NNPXx}.o> _a](?fVm[rYQV@r61MK`{[(`uFP`LrJ@`ˢ? ؏%uqdbu} 〫/J*[Bdͩ)NgEA:K,xw:c<5Bl2m+mORo.4ig'1f] љ3UYb]\f[vm ̲DfGfkSf3RJۛD^)'_W/%NoR=-(7emy/UT:n (?Gkizp*)(hA֡LuдK-U8c)ooL X`Ó3똲*( EZcFQuc35aĚɔP/i>؛zUG0}16h/q,n.;m塪1 ,"3_wM;Z*MÅ1aD_dgu [a0o&[ߤ!HTG XwciEw׷7W[%|dnLUJͪO6ې %Lr.m*@@:LtW^F2P?Av攊TV&:cF&;wt֜ѭol6p1o9H}sߠo鱂0:zˣ9Ct Jy?A)ӎ(e\|7Yr 1?BӸy2һ{r ;^3 "):a*_Y(]+\͛[E'k"SqiY|S< 6t<#A4~T2KJՓB)& y DcB|'ih羓T: eo?VOM`e`ЪJ3hHV.&d+LR(Wchʢ檢5 ĝՒڮkU%u/JT,QNFT\'[`'fXlvb] Zz.jW|Ww^M~?ExXBn\Ba^^`Q@/#skE]XϰX/ MH}{gSz61uxL:wϦw:w&vޝ3-Sz~֜ݳINjuSw`X t-M&ށi;0w;0?iZT6;0x]ށr*yxFQ,ށQhq'<;0`JJM~|z|=Sauj?d{ eGO} & ) A"!5-M g)]VDG˯2}VawsFo?d JCTz 8T vqc&d')#Jc$!TDXq-}&+ErW6@^Ave5Z-تOgiToryCނ"I2?C׋1~a.ؖiS!lSIMўk6E[!%lSPMQl6E !&m-<04hoዄ A=7eSU"jɾe5m{n-_k^D:^LPdؖ°-CIa[2ö [m:e nؖa[$o΋V7v~ } OJu} aTQEI^{.%e;=EUؿ&aiS\تjX5;΃-kM5llHDӷ]Uw SuhSL'Cb(qMՙ:i m>vT7 ZٓvvAuuvC$ZSn'ÛcNʛ4K̪O:ZtC+nc+aYtKקM]ݛJL:_s:J~]/5_z{d8s@M0ϱN=ؠv !8}?A) .[ˣ'SkA;џ?0tTgA{ħП">EzGGǧdBw<F|)S'Oc1%>5dzjL85kmi8#_<kN;_8's`o\]C͋[u&UQW":֙pE.vgn f mSn GZXlȬNcPD~̛N3n#Q6aiM[gw]4@؝nʻMy7LZ m&F'' ަ]۸uvl)TXV]]4.ص]%amq'g ަ]4xfo+r6#rW2D+#rG];"wD5nOOA]m#rGĎ;"w%vDא"rG6d#rWbG;"wDkȝLl#rW2D+#rG];"wDuPoڐ!rG];"wDJ#r!ٔaDՆ ;"wDJ#rWbG{ ;̟"rG6d#rWbG;"wDk5i D]m#rGĎ;"w%vDבK]"wDjC;"w%vD+#rG]&`ˡv>7/ֵ/8ʙf`MN'nbniNOpOEvJ;?q)@369#rW2D+#rG];"wD5) rG6d#rWbG;"wDk5C]i#rGĎ;"w%vDבK8"wDjC;"w%vD+#rGȽܭ13"wDjC;"w%vD+#rG]k:^ n2ӅM7iP]nN ilѳ 걛gPTbfV}(&v>3 ]˽sKFC֧6`4xB v2..مLaf0ƎI.`vA ?bvGIx\;"wvD+#rG]6} *1|̤=E> };(5Gz>ʲ^)x6} "A۰iT_$dbc3C7&KfSU kRׁf};*խQ˞cwnXqˎxn͎ڭ㹭6;MZ<-㹭6֘NMDՆ ;"wDJ#rWbG{ϨOA]m#rGĎ;"w%vDאĢ;"w!C;"wDܕ#rQg_ۅ?]kHWiL|{w}pu{SӐK׋ˇ˻:E>I,eȯ{04xz ؼicbɆ V`!3V$%*5(}^p4r[h~}qO~imz ȉN 1wҙkl"/ A*jŗ 1s=a/2l%_sG x(fg)h\o #xSoר+y3Dt"q,C [.V-}/!mT[ 9'v.wkN}~2B}t]V`')AN3ǖf+{jP~{0mUeӝwkwD ePa`wwc(KQpn<4|w]|]59y!Aa](?fVm[nYQV@r61ͩK`{[$`uGFH`LrB8` K? ؏%uqdbu} 〫/J*[>dͩ)NgEA:K,xw:c<5Bl2 C_Ɠ [j9i>ىfiYt6{CtlLmUXٖ1?c?0>9Ѡ԰ Ҩc*.aI66KFTp !MtpG6K+"t$V r ~d禒bRXd $_M$ BQ3"zvD;Ջ 6<9)"" RD8/4hţʽ[xQ㕠4SP,, ս.Zd$&]Gl[}$fjÈ51)#Ҷjvr٪uF_>rBԸt7 6\LPU{{bn Y/ۦ-U˜lg/3K:v_H0WuY rނioҐLB鈅y{G4ƀ cϋۛuM2ZIM&@fUW'mv&9\ dip {-[)/uR ^H&  VS*RPUd*#˷` Ω jO|_C$E2OMZ4B)Mɟ}ϵ\dӪt|θf/A* KJnhIVG+nH%r'0t@'' |}}WYʵX37>!H=_c?!>x *|yv6d 7Sos}ө'\׷~rp+Q)`C؆lta?2Ui i(k(J6/%gzUh)v=RȪSUњvq{dZ)xD4xAZCSJ^(V7-/fj^,P6=/r^z^zs^^ʾ*}M~?\RġuA+_υ(rriPlrn)Y7XYfVdaڏUV3ӯYaɚ,YÒ΂d KtDb’`ڛ۫?\ Պh."RaJE 'p"ǫ<O$,O6o "&!G\sU2DIG)ne~wc$]-ӦC ٦h6d=אmPC)J ٦(6dِm^C)L` [x"aiF @6zDotu˦DԒ}ijc~![ּPst hɰ-Cمa[ö efmJ2td7lAܰ-Ckö  IЉnx4pGd7nb6^K{2+ϴ~Wm]'N扇 a[Fw̖eymaޑ)aF k8Kl'Yoq1[Fu̖giYGnYEse:lqFs#4*$ULٽ˻ۛZ*][Sc RB:Sٛ>͊$~AFDEKˉ1@<%׭@' oyދ?CG}!ϯ/R5?b=~O2\nwoO0fϹ}ΤVd#@`Uf$.8{8kA=ףvAIb2Xrv  D/e8_rh(I.PfEWA"]k!'W="I k]$vѻH|?K-dHcEOɱvp3#( M23'&O5,FFsAf.ä xӃe]_e=PbmGi/'fK/vOGa`DIfqK* Z7I/9;e!ܧ7L=UZt;5lMNS/M]:3=uǶ{nec)LW_-nI;ӠB:; gwͱ f'Mq%Fnfէ uS-vU`7tӕ0,:%DiE%XY/չURK vWKuv%/_2L}TAS4V*3~A0>Qt' F9d-Dѓ%x5QGOڏRdeot4>wG=i?ZM(p#?xIQ昦oGkRiҌ*;ZujNuk'V6qͩbm[N\k|b"2m"μ̻e',ףj߉UQW" ֙Dޛvgnf mSn ⦧ZXlȬNcƀD~̛N3nʃO6ai1ܯ>YƝhbW4M*vn'mS .n.iyIibW6n]e7;:t>UUgWq vcWQ4x:lIibW6 *ަǴ DՆ ;"wDJ#rWbG{ S#rW2D+#rG];"wD5>aU "wDܕ#rGĎ;"r'7Dܕ ;"wDJ#rWbG{;ԛ#rG6d#rWbG;"wDk}6a;"w!C;"wDܕ#rG^C "wDܕ#rGĎ;"rwM#rW2D+#rG];"wD9rť=GFП5iO020vE]ގcmKz BlXϻa1UL=]w3!K*ngm9LbN5z{iGc^Ϥk^OU\%c/Ne ںVq\J"KB5Zٸi؍2Ulm1$9q.>[ 纺e6[dش6CԧoZw:>qrǂԡ!=XX}XFXPOXG369#rW2D+#rG];"wD5) rG6d#rWbG;"wDk5C]i#rGĎ;"w%vDבK8"wDjC;"w%vD+#rGȽܭ13"wDjC;"w%vD+#rGȽk:޼ 2M7iP]nN iLѳ 걛gTbfV}(&v>3 n]˭sKF3֧6`4hìB v2{2KV>;S7f0Y5v*NZ*`V jUf 5Gn8 l.(02QQo]̐ 8 ;|6-(02p- E,fm4 li 4 9}`%Ht$M.4 y f'iŅF^831q&Z0 #4[xF@Duw F]w ©'b2Gwl /wt#`{ewt25._Դ.!xLdEf9B'Il%-8fx? ,[l|QIJ$`B#&[(xB%n  m ,`r5 ky(jhn5,_A%jXA a5,ԃzr_C.kT.[A!jh4 aT,)`èd0b 52nrh¯$fGv <M!nXꆥnDXqa[ KdX&abb[ K݄dXꖓa[ KK*K*KJ",u{pӷ`VaYuj`Y )2B2,2鴌z3RA,1)ԁ%bUć%b%b8%b%bX"V %b6à/P n0w`s7o/O,|x 񢩁!N!C<\_1hj !@ 1h55ok+$v#Ωv okv okW)֮mm!v ok |/֮z]x[ڔ=WTbx_TlX9-* }jbDxfq#N+bʜ0KMLpDp F`D_rgGeeRXȜj1ȁ9!"+8I rD,U&=(^)UD \r)  EKU[P--U[#\ \ .ʤ.U&epR*pRh:-#A8%5%\, Ԣy8ܲ ],"U0n[pdp:pw^fp% IyiZ.fZါ˙mp9328H˙fp9S2\4e˙z\̇s]ZpE|Dr)B3-Qqlzm!%Jh`T`\`dM9sUW6G#lVgcl)1```JN F۬vtLpst0f[wu3:pOX9\*S Vs\V)^Χ]p;Tg]pu>c&:wh6V sk2s΂cVrEqsT ϟpХU3u4P3 b,XN?-7Wbi0aDLKU)s76X7K{FR29r`¡%0 Ap~A2q6$`FpOG9@F4ɬ pgkU# p/J7ɤ=2 nT䂁E_PWz0#A0a#FR2鴜gLC8q 2387=WBF @0a? 0qm0a#F a`t5#Fˆ:#?xX8qhj Ψ!@8amb &0N0aˆ#N`ؔ3wC*)F|wCʸ|w X:ayj`N:aR=BuҘd&08La2q qHna;- 9C 9C' Ɯ! 1g8`e A(@P̏ e$F M u2#F `F0aˆ2#~\q =BZP B2 de yP4e A(@P Bweln2e i C(P2da-B2PNP B2}e,|3B2e4!A(P]@ &g~_2r42Q#(Vk"(.F5n-Qs+V7z{DC [.V-}/!mT[M 9z~r Ϛ&gHkD v4ܬC1lEFn&-jBUS BlgLv7 TEg?ypOs*-.ZdY($/EArPY/D43*9OپSF*ۏ-NQe6Q vz2M"4~yXc Dt"&Bqxx Vqx=y!7ۭi' Ue(Tw j%>KY`Pd+)nI,e tĢDtc@I(A˶D pl n[*\MFC?3ԧ߻I_zQm%U)$VS68TN%t*i)/ro_~W4g{`hNi4̊^RU6h~v.ԥ>[j>ejc=i26MI53HJAHj̲ ˰9qy/:](HK0^ v [`D-YIiIASMd^+:#Q L0*z>|-%0ye=I; n64J;5'>?W_j r"iRmp ٙK#sU,6KlE!La) ~'7搲0w2\a҇.˛kB.ul"4p{tJl۪eedSo 'pNBINLL] L0c?P_Ra8 3 ˃/JI*[dͩ)NgE1:K%<U^CƓL6Ox')ASs=}M؝ "IЙڪ,V..39ApHt4dƹ65h&9C)Țg.jr֢1t_:tK3NC;qtwt4/!!!!'mB:ˏF\kS[ ytpk+]·kR6kCꙵ#YAHP|yE- %W_`=2'yV=Im'6Uej%2@bƫU'q; K .zA#( \ S~=2#)/&f&=VM{j2 pmc=ǝbBZX v0n=)3KkүU$>6o "&!GϋpE"}Os&L[! Kb5F(L2m0Đm6iC)s ٦h 5dܐmjC)J ٦(5d֠'&m-|04hGF?\^lJD-ֽٗ>m;k 56M7^LPdؖ°-CIa[2ö [m:e nؖa[$o΋V7v~ -^D֋}"~r"JRѭ@!O{qgx3^~ދϏ:UC__7f~ry{ﳥe_#WaM]X:2Z%6{*Anbf q k %4Nfs9m|_U&-š mG}8MrȈowz7c<(״x,>o :^ 91LR(~^"ÏE2?py^n'EdC.*+h~Қ<;<'#( M2#GɆI9Tnbo4\?Tk2L '?=(Q%\Ga٥KIx|KW]J~)ޑw{g?'M4Ӗ(x\RY8jI - >fhD*X\`z1 AiG]䧱S-Y6ˇe'1;w^J⿲Oew9Ϻ8?b)Haƅ$:{ƶ@Q:k(XwruS'~}&i3lZ e&̬2& ]Mh ,XtX$vfT]. .؎( bJukh=e猊Ӳ'س.>oR_2G NaiQ~ R ToxjAcв+@)h55^ >nМ t> -Lmt>dBcR8DyQ'Uk4Yd.(4@PjiڟjD%a& `7z6# =!c'h7u[:QƮun`;E-YyeШ^ަ-ȨNGN̹wz.NqC*VcPqR:Mrt+LG%b~M>["f65Rh5ßQ遻]W½2Å]a?7 "|D#G>qr?tlXsƐ0YK!;z;2ө&] <\bEr82\r%L=v`JC3VSNe~;岋cr88̈S1iNpSn)WxX&'-i  ;6To9ݎ2V&25(NnKjē:Q#r/5|̅ZĜԽj\-u-1mcfgoj(j2&|/L۝$jfd忽rgn_rf_ZFrze[GV/K[u2gkeg7aEmʙSiUI9@:?o֝i(k\# FI}$ ^03$3qK Wadϒf6^kWI^DUb|e4.1 '/Ѹ+i9$x ?rŗ/atxo $>g_ۅ?]kH,[7{q4o~keɪ%ZyNB}Wxq.8XdyIWQWnno.4LB /7a~Em!x!/#e.m;"ߌl=-⢻aDo625wbq3.GRJ5Ni?koE ]$|>q2&Oq `sdN^h*˝,"I`Ȥaf!Q#O'}^ūx괩A[I4pǫH-Šւյ߽RCRp'?×Pɫ߮/o !F*hN"/,u3Wjϐ 4l`, Bh/k]=\^KS;PzN[տ9*q;KS?gp<9_|~Oɗ1d_~Esࣈ[:f9]xSLEJtmkP=[M, 2~GKKlS6r"4_/X@B a=c3?m%40y6C!^ɘgxůd, ^V2 g9K#QMM4[x:M' n4\x+}O:\\}ir yK麦-gOSn{f-mu Vd YaXbα/u[̸ Z(ۇ [kusHY6❄t剥qɯօ*cf?ٶefee$'ofVw(`}!$'&.@"@ Kn)0 'W_&g/T|Ⱦ/ScS(tkwqlsxj>ا%B_Ɠ [j|)i>ىfiNlxLmU3˚INJ) .oo.n>:dc^}8mKxTJ. qmÿT"voުo C~dGbRXd*$=_M$ BQ3zvD:Ջ 6<9)"" RD8/+ }=Ykl+AI1-gj-J]W,P٭>uc35aĚb-SFm>؛zUG0}06h/q,n.1m塪1 ,2_wM;Z*MÅ1aپD_d[Wu[,]ز0o&[ߤ!HTsG Xw[iEw׷7W[S%|dL•JͪN6Ӑm %Lr.mҪZbxE Ppx/a$KNP)YVy*2JoJ^Jˆ[n5DB'!S<#:R+ hL{2'V}km/Ķa٥D ǧ{'$kqA׷~rp+qBik~0+N>"V2D(M9!R1)"bbDVG-hdUtIhDZW`-IURPbEG$ !)"PwX3"(XQ9"E="J=R9"P/Rw¥&K.V)RPJԺJJB1ez\B&#d%cUҕÈ84PXi V`V J4Xi* + LoSi0fXi(+ 4* fұ@E&VHJrW\cf/44V`VJ>bn@N+4J4(F^i5ԩ"ir:MOPi4?W}Gv(b/r=Y^#OCG=< ay:4tiwQ=D===dMXHǑ]~|ub7)[uS=5?o(:w7^2>`Wזߦ- ͪgful 8 R@#ys,-s Z&~bjͷMlWvo:*Sz xإjIğz0*A]I* FQB\Fs2#)q$,nB6q-c9ǝ/,)bBZ &)9!M,OWnNgiT/Dhzr=o¤H9 $]-ӦD ٦h6dMאmPC) ٦(6d ِm2^C)` [x"aiF 3@6zDotuˮDԒ~ijld6~!{Pc{C-E˴ NmJ/ 2e(5;lPuؖ3a[Nm:_el`ONxn5po3>'p+AZ˗i^yۼlN$[J8bzNd'^Y/D֋}"~r"d1@£2noދw?CŞgHS58Cim|.-/Sv4?mz JKLh[b_FIV]%3AW_w%zn208ɓeAyl_F`qhkBG%^]$vWWp|3xM{ˢf+ k赐$.;]$wq~q\$A1?kdzӦ2`?OOa.=n1I9Tnbo4\?Tk2L '?=(Q%\c,Gq&zCǻREwl~fOTai-OQ鹤p(N}yOAZ}Z}#̈́ш#^UH9 5^u7S] Ӫ):PMMc_n7b`OGM%=Q6ا;1<;lYDط@|N+ht~P>*=5w/~a|9[l%=OBWӨc"?P*>{X AZ/I^ڦf/%4?zIk.~?)N}[yOI+QZg"Z:R"TS*lYᭌ2N1#ޤÄv3?L :FS1P+z1{1M^NAdVA0M:3fag/QM#[!)K|fkƧ`?2ƄI )-.hApƹ5c ″)? 8#))[l0@DpE1)-.%g 28qp 68sX3 q؉re)-[θa8a gN]ryX̥CjX2 Z8s9 ^H b8ssL g.wiB wfCX v8sY@؁rL L b8B6R@4Q!m#1EeRnȢL*-YHadQ&,ʤ݂EFeRnȢL*-F.q˅5%RWچU0(ȢL-F #R`dQ"EFeҶn1tQ"V (Iwk҂/x|Q"֤_>8V`LZO0JpxQV ථQ"m#mb#wOH.M8CbjsWoalUc[InKc[p'b c 7'ŔIY"Y#ń]P"pxR[L,6Y [Wv [B,l1`dQ%c).)#- #),v#6#E5SgcJTykc;k{v/,ZlȤx~RD7 ĒFh\heRQIWC R]%RZ0G65!J  !B?sZ8BcqFAL Jՙz0(bCk+T+T q F a Δ[uUUMAE^hHR&vC rQPOP¦´ A0PBc,!$20 Ƥ fg1h xP3c؁|3, ΅%xu[T[Ī}a/A(GKٔiRJ0a1 j(S4,n*QW0MB sCD vfT0X3A`j{ & I%J FM T`2D5D eJ0iL(l@,c(1ɀY RZ F(S VZ F(Q(x&[ުbjQE&uW@ `{ӂOm0t`[( :>Ćoj`)=] cU |SXJ"#!B%J")1s!AP!E㺚 B2e E; D(SZ7M"!BlBD&3!w8 B`SD#F#|}&[|CW81hυpbt—8)tD:M\!(A>F(Oi.%"̕o Ghnb F4ft( N(z'4@(A盹G UD NPA@O Jb]c GxIqݫ&(LVVUId%Φ F@ _^>z4T:k+/寂*|&|K(/GdQP^> GByh=|T^> G!Byh-| Q|T^>Z!G 壵dQy|T^>*/y|T^>*/G|T^>*/GQy|T^>*/Qy|T^>*/-H|T^>*/ݓGBy|T^>*/%GycH^>SG|R^>z壍QJy(R^>?QJy(R^>?Q.||t0?jţT8{a!Mɂ;R$%a1 -qmd=  k4%qN!HK`bАHKRҒi*gQ$`i*_Nq]m »6Rl`ƙMlzqHYiO ogWݦ+gTx/,d+mseD~}@ vY|-Ӫ`iC@۴ggc;Z69E;tKwKK {fď0 vJ<|*9LCin.Bv˜;>Y Ɂ8U?#' HQUMS'~3*{ΙIF1%:3Y5]?`hĦ2w3|50Jw2S˘ ,NPv0O2q3t$ґHG"t$ґHG,F:Y֒D:H#D:H#H}#,eF"t$ґHG"t$K󮑎]=#t‚L"(Ԅf/% kk |S |fSl ] d`i;rh8Qe1oг BYptFK^AGg| f:07Gϋ0`ς쏢`9euFAUIN}̣|z @r=ȎZ@r=\zP]Nl`<KDvFr%x%x% $晱>~ZKY~j2%\"RAC䧹D0t,t3Y VfN̜ieDN+3'UEfN̜`9Q2s7022*#22ZZ:~W$ӔwnI[-} yjAtw=ȝJWz󕞯|!{| %󕞯|+=wN9[0tM^+]cKX5t߻k|8yl(zHx5#xq|q};zۋnՏ0zqTO:5-zOӠ^aƷAUYӠ~ql* + :/Jc@=Xr̀zƥf@=Sg̀Y'JK!+D5ES,^^)5-&k68[fdP6'69P0Gs^,Z 1P6хzԩG@bPAG@=[ GpiQ)!kwׯ GgF=:d+z/mA:aGA_/(@jtSI}~HA* 1b~?YBK+n?Wu2$hPRM(EIF5+T2ɡQ::ʨjRʨFF5!JՔQ j F eT12UjreTSF5+2Ys2YQ׾ҰL֔aM8 )Út2YO(Ú kʰXR5y2)Ú2 ʰf]cdXʰ kVeXdXB'Ú55<\n/xeTSF5a:լQM.jʨf-jndTQMլɨ`PF5#\Ȩ&PF5eTB(u=':-IF`q)2)㚀%:׬'qMP5e\S,^) F4%hZ*m ϴ$}* ML+c3X~65p4Ap4 LLb`<%M[,Y“ 1Z1dx&E gx&C35xf0`<1xfha a&G0Y"{: QMf55,f!d"`\5Q`\Ӧk2fkMqM[kڊ`\Y<ฦE3&nqMd,}}I%Bp@lZ&G7i4Mj17i> q: ΌFg?U:v@__c v}}2z}}HgizaWߢ7Q[ӛT77QUY(!É a h Ne N&DNq2iˍ'j)N0':wЀӛJp&3%?4aM,%TNqb)eSQʦ>}8ё'81tptprC7́ӚLa3&o N,F9 uYR`@D FZ 5fav@sL0,@=L0*Rw*]M0*h F4`T@+t( 4 c4i]c33NC&`&`!`&04*#`\0#L#3Uk7Q @>aO9N,!',!',!' ! 0h $jfyX3,0`H}h  K 9YpCJ+'ʏ[< Oī,(|'f(mWTݪ-hu{z|lK< -$ 6~.ҧ= >?a\-Ig\x.`14W lo7R6\ebǜ䛟,E8s3eNj:'_&ktXm>O ,O%ȹ|ofߐ9r"Sy꿄~4oWןon/of'Clk>yM(a܁g?ߞ_]_g]]w/SG~M7uUC%S/L獷f>f!L`$C@-Lj ׏n)@6g{yP[z6m¶@n*TGm%=%Ky𪼺x{ss}gB3jlE<~ׯn>x&/7DUdfs3!Ll Ň ]{[T#-+eXpd"aUo *]$˵m魣nLI}R(Js#32?Lb(B_%2x:^| *BL?2ʘXR³#`2ObC%X0%FP%5rr^ J+W-B_iy'Nb*8PiS5젿4֓:iJ kWRǢ_$n1i,tev<8 Y+MICǼ&1v AiW`/+ީ-u5R*0RfqʬelVi;g^eoXy;)=q ~M6wUW LLM?i;8޼V_x~Z[g֑quzsͣM5>(YiF]鏅CF늲[Gf%A{f-,4S./޿~;ry;F<7HF BdB{ ~qDOڑy6ĎS1Je}jJI J 68C2q M#6Xhqɒc[k##Ű2c_n6]79S0^Xh, 7P :s͙v %Kf*:K0!g/%+0[dזCccGGbLUqꪶ`x )GI<`B|2':;Xmug3UQ3>S 7-Ӹ-2S\cP%2cS"3YPawZ!;T9Ry@v(8 w #5t2@F84d߁piU)ʷ=4{Xj֨aQOf9&1d?_|0bXܶKM)s 謇׵O+BISkEje! C~,Ƥ\kپ={EGe@ 2NMv7|ұ0 MoHN{w$mM?ەxA8"8 4`DϞ$._}z_I9Y L|Odfp9Mm 2èBְL-1Fy8DlHӸN#6zc N!G`Z;cB^ mA0`[NN6d`5Y<'[s/'X93UAs28׀Ĺ4w890KE=*o 7iӰaƆc k0Fl1bpFL} cTeqQ|(18Qc@}1CUHp H؏ƉD ̼R̼R̄Rq |UBcCG eL+u8DL(Ƃl$VN#jYK\YN Jr]p{ )|Fݮ#9ʀ[NN/g躵o׉U6^ռO2lk/;lF4f7ԗVɒU̖r,43IJ[V7)&z-(~#?{X/Ug oK W/E0׵sk4f?tm38#=;*JǁxU 6OݯD=y \(&9>4Go"n?bYI!g?f32c?Ya΃=eEɚrTnIc4|7gTjk"L~,sw*&aަIZr{)%{{;c#~h1;ߒ0ͤe)e=S9Sk{N΋NZ۴N G `nr{;Ok2$l`E^;X=G=nsR5K$2#%-C\β&N~䏀"J{fʞӆY.qҖ۩tUr[$:xU,ߡzTw.vS|0k,Wߵ~]:Տ*_坎Gi?|Mw-o+H״sy3jڏ*_-[Qkڏ+_zv[QmG|zqUKP`,=0cu91V'|tX[cmTu8]1VWc#FsΡsd"uhYWY|Z\D#B:j~Q\;ڷEس4QZ{wFqWt[{"}oU#mx_5S`SL/-DcSiKqItT(ע*< \T+_m}p]'?98p]U]Gq\kڏ)_~T8p]U]uyQ5XǕWnʻp>`"ZvO *uPA9C5[qH8AcjzܷqtMijoSSr YҶSHmkihoX@_jՐvFutqhjtXU|MJiQZz/nҺޥ4 UMS-*\ZUJ 5<' NYS7bx֔F ϚҘYp1,֩-X7=4+gmg%iNj{m(d$JpWU[ycͼۭ][TG?mQ|[';_>!߱yS|/BZMwHK"-$/DZiI%i nJs|]Us oǦFJij./M .~(G>WL#jsG1_C^ŴkF]luk颛U-?2ҋ4Sf0 _M6:JTўmGPE.۰E((VI.M1 "֫7 #9]"> +L?_&V2LrRR~Zzb}X~/QZIlh-\OYHYwK89^0X(M*H26f#eY0I^28'pyLDWe/wۇSB$ 3C9×aw&2YN6}ʾ7sr3OЏ&_"u%C&/jKz5O(}`Q*rz~{~uqq{ǫPuj~{=k*GzaҲR_ۙ.G V֠Ryŏ_yKEn#Now e:M3%2Ȭ4gL12#~.=@]E˵D&OdIȠ)T,9~"e1bg9Gd͟ĆzQKaJ JjJ&%2XWt^=[:P*xXj C~3/o'# ޏSWzuvTVQ(0B;"\5qjΰ os |YB 4hjڞvJsis@,<2!+ u tA\tT^i>b6Z{k$I.wǙ޻K{wuH{w$kkskX{?]~u[C{g~$oH!kǒ kq!mG kݑkǒ kq!kG:ޏ5'>a`H{{@:r?|4~t~~DG8~#ţ t~θ7#ØX{o?'M4~X{ԏh|?κm##ޏqe8됅##ޏsj߁quBqm m_#%Y9ęlt8됍#X{?Niܣ9#ɅcWƴ#Ʌޯ~9h|?.tUm:~?κHraHI.t~HX{odqrO߻h|?N{'\Y]t8EߏԏX{\W\WG:?G kUm` # UAoڎc\UkG kKW+PXhnX}>n;R>o;9'}v4>r;ґ5}vi]BuGes%+#Al sy'4'p3aɰ xW$CG G@}7sKǑ f3N@7'rǓ }&w$,>;d@K2 0dHr=4>;dx?dXW${cII.0τ>;dX iA 5쎧3 0d'B-ֈ>; >;(îcmO>G }wV^w,a3 CͶƑ 4 UAltЩ#J購#QчyG:O6yǓ GJ}Vgzz;}wĚcu }w4˖ojK0Um#A ^}}wޱxh{B+}wX ߑCc=>;@6}w{0S=諢Ot>;Z~}1cEif^t>;E|HG4iߑ4iߑ6n4i_g#mh賾X-X_iV%i裾#ɪ9Co $3Ce9cu%f%H~>;_#1ߑwH#k#-IvǚX?|H|:Rg3 # ߑ^|GLC+>;҃tX}wd5ۻ#u%pXX^w$?;hqw<~ }w75ޑ5+ciTwxGxGZЧzNJt?;ҬKch?`9Nj^\_~]_\7H_,:Ko$jgRa71M ݝ_}r/c+ڷ׫`qQ"<_ v$oǩY2>]x_oϯ./n02G>wQFmx hm$'0G\Ұ6 99R cB3tL\\;x{A(>ȱL{L zqӈ32&C5KLD;F''`%* 7UG"lV[^*/rۢ41Ԧxv]oŊϦ/oY0S,ub[Z 233IꭟӦ"j{b Eaś:frA4G`V~'7o ( x+{ۋvqP2NLo`}]n#$Ph&P Fo 'pBN(} F%'&hr`0v?0A%mZIX%`1BYbq0qPDx{rh4x(PL)\}tPWC,ƣH8O9KG{Bo>ih<<,n 1$0dS3YPA'M/oyy]_\5Իj@iA?dS#NCF8K4d&NCF8w4dNCF84dNCF84dl8\"B֚'"ɬ6\:狏Fn;p.o6mf^sۦ5^%7Qk}jm, XC1,%͗/Pl)EC{ Dď@!: 60$!G &hz` eFr* oM?ە~ŷp>a;EG< o9 GAP  (?g(إv㱏wcqI9I L|Odf dQgl׋[1(Og i t&!Cϲpy,Z)Dhxsˆ\l /Yve?0-! Y'N 5dܐujC Y'/5d֠%-l74h#Z/QCїm6|!._c\jwEjB' E [3f(:lЖݰ5Cq m [3i6%yC#vV ܶ귳cUl.?ߴ[+7A==ںVO~e!0wy,aޘ5K7f[y#WSOz bɁq@ጩrpL[kikP' G¨:X:[}=*j@X's^ ZbQpbVrSS*)|F=#9ʀ[NΏgperw70lבCmBʀJExZu9ƌ N 1ӆ HvG8 ݿO=vqoH07>ӉQnCq">nm@9N$ew㏇R ]I DrSG*UPM/ͦ/wۇSL1f4&McUeL QY r,4(oAZ /jڬ"087r׋`n,adud͟ŮޕMrg7ۃxUE8PiH5OWAr$&=M$7q6ݍw8Y̓ +1?waeOc gf6kQ\?U[!bf+>ښ}(.I<$^]e=X۔yɏ}숎K48QsNeLQ:9/N:iq^n;&&D2X.ye1?iM`DM7y,uMb{do2/PHј!~2>m,kdG6.1X,Ji) iSq[\uթ,xVkmuRۤq3iM}Ufg?dAmSfۖm6S^X^|Vrˡ4[}s(N:޶mpЎ9%h0 :p\!GpY£AUM JUU!Fk!yTꆁQmNa jVCpZR=&kC; 2~$\w;nŝnŋZe\ՑUgл1(`nh[Ⱦ[SZ-5.5]IRJђ]2@Huȕ’6=;%;E1a#Nw '٨2Lm ":7L]sG1[B^:^oa-oi74=*ޱV5aw7 =(ON7LeyQlZ{43_0 &H4EfY!Y@tF8 u`dH5hF8iPWCfE`lSPW+9ga_*:h,Uݳew v:+!ú0O&Y>p2ۂT,,$y1 2;K#> W,Yxg9Pgb)ϚVr@LL|FAd|侃X5$k0R y('f̺gbY72bsy|ZѺK:X-P# )q‚T4z 65Њ;LS kִ3ئ;gϠ/ihƙI14[ ]ELQ38 S9ŐwiѷcQ BpWw3: W(S4|Bd`dL rb L 4 cD[ywuec[)A¶Պ g3s-LE$^OJ GGۋ4. o9{v`)]AGڊE5b9)i?Z| .w臙Jv$qsE r ߲7?Ydw`E՟Is4Hd_E$BXY~I(ֱ9eB$cC$/hiC2XNdn~s&3x)!$3} fg)h|(>47M[ߢiY/,Ă#ʋ.~\[u[6vU*_ܡ{Ai/5.W(̸r#32?!ЗkL"ɲA%RP Y<2D0&V,_P/:ԱTIMig@DRի]DŽR*xXj C~3/oiޏSWzFvTVQ(>^b˰ os |YBJ്fm`;s4UK9Vbxl?p<1~}Wz N2>5}\!+- 6]:ch䑾 ),4ZY '?yp%ć`xcI/|h*Z FYo kN enR?"$p?3~'`A*7šh8 xdoM57ޢxV >(MmQ̹Gj_S"v׭[)~f2  YKnrfilx2qar"Sx'Ĭ"e5=2`^o--IGY07⭀fteaۋvqQpX|v:XMSxç,".mр =/0䄰 & cadr[,`H, @AX1@Ybq,pP{ rh4x(P)] u4b0wiVInowFkB o= ihl gYy2D#aY}鷅edw7gHd*`e\~غ }{`-+ZmnۄarĢf=$9>$~6 !Bjk%hh%ŏHԋ7Pd2X>A'/F, .6"iϾY9Z8}jm;lijvOw6hAh&'bn>F`kyLg 3ă v p!ǜ:DCEDel޷c-E1@r̺e^5٫zV1.GdFdEQ.)e6opˀ hPFt`/ >• `99•]] ~.9[TХTx4UKLٗ(7in.֬ͶwlmwsnkmzRߑ.L&)"5` D4_yAb;/$di2_L|dkR拁2|FV2_F%2_MQ\%d?_L5tY2{9cZ;c$s"s2g /9c(f2gueX˜11dΘ9c2g %{9'g9c>gg8dLK25K4bl XBeOUޖy/ؿ[%#lOCF<< ay24dicӐԧ!|Nm|+=5{XlԓYmt Z%y|xGi3ZI?COq:DIM2r`ߤZ۩"K2֐r Kɡxs}{ VZS Z$~~ߦrىşJ4b;lƈ 3(z峗L$>iBݘ$'Cr/%Ԕ[DfQa&, ٮ(SKc'$qؐq[@Gl2,UVf8 #bN:r4+)̦_okWY@풞a)SYD QJ 70]nś?qԺ17&䆟yO-|VM'sRj C~3UN4#FtA5>^S sf`G7q&rj#L("Kk, " o=p]#7lLa-\j%g F,/ I/X.yCr p!F`7e~gIne^C$LUxkk6?OvFBfpABOP"cy1bY0/Ėz}" }6/jHz/2XOg&3C|r;C{Ne?Phyܵ6:%`@h@@o3*9!,`v|.~mi#U</>@\F2C>5/t|o!][Zqj3e\᠎f{C c VIn/My< 20eOlv8%8fae ΂R^\_7 "|O2 "u[+|nʷ9ɷg?;uªAov۲y G]mS7y;>yn~Zj7U@Q=ZfaQ~[u›=lъjm:yǜS\>]~a+/n;s\(q$qb$jP>uJ>5.[V>Dž1qiF`|XFL&LaD>,JN|XfO@F|XdȇeNNȇej ɧ:2raR|X/ȇe= |XF>,s{2-0 Y'N;3d`ؐu[C V Y'/4d`Ҡ ?7goaA+} c PwW N!W)ٿo1FS[5P;"5CaakWYZbhh'ҪF4ZSnS..M5 )~8Z4pWʀ 'ƀ4x? ߀KXy"k8;\ʀye 6PKU ׉_Cz* 1i c@\5TTt@e?b0vH3m3mL4;H/Cʁ/Cq"E?|1Nd'2_/ƉDfDb +'z(Z_j}_n?~)fӿ^#lٟf0domQZ>Xe\&$5Lr,4 *coAZ/jڬ"08w֋`n${|_&`k?L'h/vtm38#=;*JǁxU 6OݯD=y \(&9>4Go"n?bYI!g2dzwKge~Ü;{cb8Dh1BV}>3*5v&G? Q9\0ZoyIZr{)%X0}Ei&-Kq(̙Z8ݛu?&s^tܦwRMM>e\t)w ~g;M?azpWv.֐ج]-D1(vg;27{lFeaR|Z9ץl߽n^k2גaofwX-' /kzaT#Ŵ"zstߗKvJӚ$d3n7[vKXIdޡE %-Cymeq&i2!]>0SFSVx({P%J`W%iItkOٴdgJI`64;`RK{7P96寍1\]fZ^"]: OlWv#YUze,(Dd%N~qq9f,26qSV`OMؽU0,Tч$x ?r/ ك7dyʾ7sr3OЏ&_g'۫ŭC?h6xg<#L[GGB3ey%SC[lj׏n)@6_{yP[z6mY}tR3{Ŗ&a}PX&o.ὥ%gWoooϿpB9Dax`H˯^Ϧ_D||z_Mg2r31QIfIͧq{GaD&om^!/xUҲR_v Ģ݋] /N7V*_t^CPZ7q(̐r#*'ؗhZ")T ~"ec8+%<9&o$6ԋqJjJ%V%2X:b(5WVsofk{߫T,QЈ8ïb >HK6DU~;zWٝڞvFsis@dBV@ Ĕ~w?}z NECW_\ T H^iUQχm@=B- s~AKuLl̤'pb8 j  LٵИi'Q6S5d9`F` yvd ]Z϶~[C픛K٫WԽc6m&>-a㦪c>]czkVhg!|`T!̢M_^N0{,d/:{̉ "َPu!c-^u׃ڇ9us9"6"C"ZuaOc.۶c~[ E6C|YdTUaeB/Wb٢̥Ps \Zcs&3*(# wGNfyw_Cpbmb"4nMCeX2EJ7'9EЬ̦0~=]=f Lj Ea!9iC󹆬B Y'/7dڐudC x Y'75hoaA+} [ ZD}ie[M>7_@okɰ5Cхak Ef [3e7lFܰ5Ck m lIЈ4p#[O7M-wEG~GՓ_Y' $a5K7fYyV-aU0OZ +8'ƯY1k8k̚%jFY@g%f tƬYq@g#4Hjs97 NtMNi~\B: f0[#X^Y bTt^iWMd,FK%m &Eu$Eo]L|YcNCuA::΅Д88bf}%1@:f\剓6)xM.E#)b2V OsQ.Fcsrg<=ʁCOk8puhc  h?9Oq$Ɛ!p NY3fj#6PpC1s@}`'f3m9 3m7D<7D}D73_3_3_tOd'2_/ƉDfD@燈wCz1GP6Lv8qʽSNMlZ=!w }$<.H'[>A\PŊ({-ý>|z{'P29GD@:Ĭncv;\%s^,΀{E([ɟ>eٖPX]{9ӭ|_gh=BHRL Ϧ/wۇSL1f4&{:*2!~CpFe\%6ͶQ =R%^MV[QF~'zr>Mdox/adud͟ŮޕMrg7ۃxUE8PiH5OWAr$&=M$7q6ݍw8Y̓ +1?6rđ6#(3u<]׼'eSE%"oߜQٷ09<^".ҟz(M*ؕ)(w̎$L3iYCu=Tf޼>1⤓6-jhB/2\c``~Z1$dM3yަ{bdběl:d(IWl(gY&k?aG@Zo;LҶ=3H;jdVJkV}qMi]Rp:5T;ܲ¥kDwN-WUKv*nݤNgY7♫30Mq̖3[dtfv8jf⨙]S3k351]Ml9bf%gl뎫[rtuYw3PTMrf˙y1MUrf,bm9:edciiq"N4^. O? DA(XO&Q([@e ;Ćmc4 %t|#(#?GPnsq;2mF %$PBB %$LB ZqmV,i1n8JCWc@DRK5{aiPCqE5 zv7xY$\L?BH-)ίnӟ=X@뛳{ SqE(6[yUv>9)+MW g˛3,lO) o8|X_xLou. gEFZ2TwC 0u GothycB Ȑ<_ȼ]yyv"ggٌI1.B 4l@˜ngz ,Q;5C0 mx&Y|~s[ Y'a' N8o3~%O~!C^#_fa,_Ȣe|Z`&,5-CdBt_GuG0\avo=2 f@{ QܸI*Y0 8F#0zGk]Z,v}I:MmT ~kVh&΂4wQ[~@A%=rf0ǎ@N~*?@|\0iRtba~?tȱ o-EkF<_wd^̐YM|)osxo%(gBݛ}.4mf=L9g 圝9(V-YIn~s{v{!҉2pn/9mrnݦ ;8];\=uHG6(l~0dr@t[%XIkbhP5EG^B Lg#l2yD2B@APHq4̗z0%Nlϯ9LF&xj6Dr}{tM+?`Pr;U1ڔ-GDbjEa'c؉VckkMW Kxz30:.HQ B`$i\9pSUk譨:&J. c6TM„`h]"]/,rV(9x?ɉLi\!̱e0}k|VaІ)Ew/`zleڈ"@fs{u Jg$J ٟ\cPȽ4E`*9J:Y,Mby/7:b}o<b'JRew(*xKd rU `Qԁ0j jPdgHVb35@ kG,h[( c6"tb2{(Ӥ25L4L~2.# 2:NdQo_&hKF9쇌t2g?d~H7qd\5Co#{i0hadf&+ ُK2k OS[r:BcwKgHP+þ)ʩaZ2b F$ns}MN.=ֽ;oORhg/9]Uaj Sԍ\zm#rFe1AہtJsڴaj ^6YyZl4H:Jw~cG)CpG g p6@!t&̔'hCX>*0A3E B d-|r$G4+!} XEw_HnÓCtɓH'i%OK\г!O-Ay 7BR?AXJ =tNpt vp"c|tv ̄c#A虡c~xpLK)^(#-dvc !J`'݅S*B=U Wq=y;sD1>DP_Ixgsr(<=LnTr䧚vK#R]ѷ0,޶ltr`c{=1]tw /ͫ M&.T!!X" ^zab{}DIuھ@6;`fD$Ku\j`CL7UR*b;? vbnPA .칸G|+2jjnFDGp hT'h`yG7ǔa~ Dc+;xa̲<]_g O < Bj>:,h qˢcP֨ FV> 78/A} rB=ɰP^O_4${HG? Bɽ?q-"HJCN2PꙂ3l{g<5roIFl7"q w[#0 gpߌ9豾9C"?d3]zg#u02w;|=li&x=t'lerѫ; }";Nl`CfGZjq=PŖ5;xՃ4*?0Z\m6g׸afI῟~zCfzvh8/m<@v*oOL~v AGC+\OFMݓz:e쪱?8vxn80#pMad`pFڕn=BQZاXzw?.otQ[]ZXO?ʵb+4pv^|g1r\wo L{Z -GFea(-:@~@-a)I'i!q]$i{G մ6'-|^[r&1ؽ7*JӦo ʹsP3QbQnm2ޙv.7g"( lA.ѭDpGxBL*Yw׃fT."ER`HGC)'  HV$qھ&|eAYb"wP۽ F<*P# ` ~v z0J񋲹?"e7S)ۣkl] -|Ѧl9"spcQɘv"6ؚZUCK`g%bt\R=܅H Ҭrᦪ;[Q7 L_ l* D^pe5Ps~sݙd3 5} Cc`E'86H)xIcC,FA_gw7۫sfTTb*Y%PYE(:0C%Cn\NT&ּ9›Jj1]pPBF) LHw%Ur* ('s@Y5g5H(23+ "[ g~a v4'P}v K_Vl+T١1 Lvv BC;%18Nz#=UqqW$ ڂyxFv9w+;쁓[p+>E8nf$J[e&w?x=J 2Ľ+p_| u|Rl.>{rgu4J{xzHmф7H 7 (Q"-YBiP8 WUM%PEj@DP QpSH [\ n0+,@h Qx,Q*MrU7 jlBDB% ͈Z6$(RD<߆ *n0Jcʓثƹwyu+w<7zBRw*\wzMR ʽSw@*N@; * r0*Qw2Z'|Uw*MrD Te_.n9.W"@7zXFh :H(v0/ƣٜl9E.=(C̲{Puk5 Qk^za p ]&grni9M}ij`xZh3y2T|TxU晜*BeQ̳:;Syg*L坩3wƂj5lRV** K =GUޙ;ARyg* 3N$w&_3w&^Gw&';Pyg,l"w& L4LʴLŅ~ÿ8Eȷ` c=A߫RS:7kdCFy쇌ts2i?d~ȸ|2ށ)f=L5{k0hm .~<Q".pqv i=dc}ɍ>PR?KFZMUN JS`0% %7wkrMy6S\7'~h @[6>0U0Aݷ06!GhO w"➞91<M{_,ף$a$0 AT /BHRf ;O(fe=Oᷳ;F?P$Yg'ɇ'i%OҚK%Tf\414gZ[δBiAn9"r[L۲3m#[δn96:$ohΊQ:fvv1[ۋ\c|=]½){kхvܼͤsVn)9+7wZ;1)? +a"IYSrV~)9+?봬ubz7YP蜞rtNY9:ӲVΉYGӨf1s9wW[FS+ my<9I >J'ˆz*XT:u1Lb4+)Zv&~`]iSc1L -6E1;bN4PT1L Ue1HׂlQL2%f;gU/&yw\d")\3I`݁Vcflvl>'2s'VIwK~Nӆ1z*FTBيx*~n4m*TR"=qŻk#aywspJt 'kՆ3ڡod'W^{kwg1 ߓAQ.dDl:bH|UhZt8q)GO|%ŸCDh;TPp~gƦE<!0eFhd'hMYuoiwbEιvEتvX ~ "b>fnLa>&BkS!GrVs6*r|L\䉐aѝ>S롍:<vt: Sn֟ yM/Sj?IT5\ mZ9ܬ^+վ^ Û_3˺?>~grWװ})n޻nX8eAeiE:T5! 8g),]#(t4v ̄c#A{ϊ:FG_`TǢ?No9V _ :}Nq"]?|X"ï^Epø3wo>@CE?'wңe`?';€pP$?մ[,T}Nꊾl?-deYen{8熾8 /!8i M&.T!!X" ^zab{}DJuھ@6;`fD2[hC0~:>|wD&b6ky3-n5nRQkT77Rxƍgܼ͌Tld&Fnl~4 &ldڨMfdMVzݴ41m6ML'ltڨMMf4&jfͦYib6ndfFnlL:BaȗN>&0"|,`0" 4!&0 [!YL`E:B`@wԖQnV8ribY'Oh (XfcC T@Z ] U@\ U@\ d\*P*P@!,3*P"*P ]w(*P M*P ]w(*P R(P  gf, hN,01N Z`pcjp1C-%ȸuFz8rG.8r(n 8rG.%F6N$J#ppQ@gc?yA$J#?Lu& (\Mͦ (\ J#ppͦ (֭idDr(4!% D pͦ (fr(\` D p 4#&pQbG.0M`EY(dXM dO%*կ(H]E H(4H]E (4.T@E TBACeBЁlv^zCRաyru@4qЁVաiru@Ё4wu@\:&WQTyfVT@ DU@*P =U@\ U@*P ] U@vͥ*P((;X:w פ܁su@\;73l:w oչiru@\;:w ];&Wչs(j K%PQj%Ht%&WQir%HsWQir%]p((h(%XesX`U_b፡p1C-%P m j(54қHG.% 8rG.% D p#UÑ 8r(4q"Q#8+ț"Q@G.afk6ID pnrm6MD pQ#o6MD nM#['%D pͦ (\ J#o6MD V5HG.%D p"\ J#YH`E 4!Eri&+LAd5!&'%ȣ2 T@E DU@*J =U@\E U@*J ]E U@v*J%O@q*KNizRՉyru@4qāV'Չiru@ā4wu@\8&W'K819/IUQg[=s ]=s M9&WH]=s =g3gd@z +-k`(Pj( Ht(&Wir( HsWir(]s@ @ V$s zMH1Wչy3Ʃs&Z;&Wչ麫sչiru@\;9wPLFT@E DU@*J =U@\E U@*J ]E U@v*J%\hlTE f}˅} ؗ} ؗia.`_pG.`_p@>/8r!/siElU.`_ 2ɻ/qCe_}+"shrۅ(hrHXU9XeUJ\fPfNYI֤JY,e͵h+e15W1e}.LYdIKg|Q0 {1TO0n[q U[n=p$qbbM {4*R1FEx ^]òT-4AhO wqg ;=aCz${ϲ6L }qIli1D-4.$&P( %{fYǯl1xmg_maG.|cdLc1C67DB\~ݜ=\mn?Կݝ\>\KD<Mxёntk|`(ۡn`y7`L0+{lbY$\BEO*Ԓ;ٳM^ 909gE(5[yjh`go)ͣCK餔2 \&I,o6۳kϰT>Oia=!3}Կ~q4Îو6 ; 7'@.~Ӭ]HP37N:o3~%O~!C^#_fa8_\Ȣ|Zx&,5-CdBƄ_Gu1\cvo=2 ;<7R~20 8F#۷"8zG]Z,x}IMh .-Z1che8;/(9@@qޓu&͝Q -_xZ#O ߟ'@-=bÏ0b'$&,*r\_Cg'X\ף&ꪥCq^ d=LӖʓTd OR {WװI4|k!.]4B½#ejpa y ~F>/ɭGy7O\^+\vikӹioȻ_(da>QbSnm2ޙv.7g"l lsex?̶fځC:@d]%ﴩD>y;Xo!sם *J9-_@v>)(P۽ F<*PgA=z (+B^/Q7,=&JJ0(Ъmʖ#"1n`Ǣ1DZm5͵%i<=|<AԨbdw!04kDypV %(1j&ar0.\E f +Li^!̱e0}kp"דeBvU8d0=6IJJmDTMuvw:gK6 *)ds*B!7Ҁ<;q:Y,`byx7:b}o<b'JRew(*xK: 䲝 `QvՁ0j PdүHVb X5@ kG,h[( c6"tb2s9N/Ӥ2ſL4L~2Sep|#AsOVN4 1]Eׅ8G⤫#*ے>!#=Q~H2CFzԹ2ңqd\5F0ha\FlS-L,W(vϬ3.)Ǝlp,$t 3q~2RZY*#(`KJon63=f\414gZ[δBiAn9"r[L۲3m#[δn96:$ohΊQ:fvv1[ۋ\=`imM_.Gn&杞rNYyܼӲVnމYH7OYX k~YO:=ggNYYe~ֻqtȂ*GsJ9%g蜖rtN8:F6 ˹{2rXN4mꅋBA@*FĥtfUP R̃W ֥-%eN:uJ);1XeڙcKt׺u;~dqž`xCdλ뤌c1jQt]auKci(j_bV[t7EP :Ycvi2DYu6}o_ "nϸ VYu.c!cڝ"Fl1N#֡115S?X|hcug&؏P"c՝|LDǪ DzL; AXewش'aiO.Saۥ"K9f/ѓ0%PE?8T+y$jOɈ'1>BG=y'>R0SzxsvPk={fYǯlQ./şC c K >> HJ1DqH9'8X\ooFQ`'9i<@O /G5ѓBo lRhQGZm YAÏX>*QN7usg8%]S%jo$]R쬺GJ}|&5M͊{\M"@ ,-T:F'v L\V5PWa=M17k PS"ԢNo(\p@֜89zgBB@R7߮`$i1'YsgB]s>>^J3*a# d1.4SMV=6u @2hobS t ~3-~lƬ!D1%9ۙ>淞o 0n͐_GEku3uR+eq2g3X LfCqY4(`i72V\8Df-dLu\Wpa'0fOR V;<6R~20 8F#۶ޣ(zGc]Z,v}I:MK-ϮUds~ pBpv`|3gqr\o LZ -W@xZ#O`2k h-}\ 0e}LӖP@ _@ Wװ#@_4|k.]4B½#sddjpLy ~F>/ɭGyO\N\vii7k7LӚs6mY4r8N7troqά$Cvwy==gd\8Nf?7Wۛ rnߦ 8];\=uHGD>g;Xo!sה *Jҿ8-_@v>)(B~& 6LGe0扈eTY<(o/7`<K`Eܟ_2}l>F(]W~+vBc)[Ժ X<i4ךj'ӃAqDzH*Hfp#1HAZG@oE10QnXh&,CzeQ԰BINvgJ4* a-[R 86H)xIcC,FA_gw7۫sfHTtJ \cPH4E`*9J:Y,Nbys07:b}o<b'JRew(*xKd U `Qԁ0j oơ$АgklֆɏY)$BQ;ƶmDdb݀2n{ XzLK6B& o!62/ep|YfGj=Knxj59S̒x̑rǯu§ԑF#,1W&sd(C6W2F܄ ]\OtW)J*BkRS4{%R*=j!Fĥi4fl"}`I ' 0@.Cxz,gwuIV\?i-ysi5^қ;}<ݩ!#!h "຤%#z!8LmH_!#퇌Hy?dG!#=~Hç2_!w{"{iO&D00[m ňOÐ z'* # q(оw$ݛ}~@x2RZY*#(`KJon6sx{s?7~9\AZ |wWF8­~zm#ryWKB d`GIiVCwd $a1)BzA@f-P 4{pƉ] Uv/-|Pe1Uzwӄ_bEvA #ε =;Aӻg&izuRݧNckoݽSrwّVets3;xl-}$l2(5Tr7[Dܭ;=&ݎ"JV}Q%w &܍!R*LŠ{VܭUr7 C%wnJN`ZH&6O҂KO"xX|̺s"cp|LGrXŸ;9DǤ!2l;tLDmr $5/]!2^'eړ2}ғ %x"JYړ#d#Ԟl ?BW}Ȯ7gkgu|ϖ?aYqRi=_-}2 j24"D*ٚ%!]۟ ! `pG/;,D8?gi`3t&z(a|-SRm4H ;X)`w&Xf9ʼnDwbTaPzaU\~^yeQ TWt o}\ DF!GI~i1Xw)?*}k~Z!ʲmFklp M }q@L=9CKlll;u Uv-Hi=B*/{}DJuھ@6;A$Ŋv0 {wAAD~GpQGB88-1{[}(5`D? .h>F*Jr'ҵ!J/ߑb4M&sQHqU\Cw=,uu&oG|Cĺ 8@7FCORr߾%Ak9Nk?YWkd >LR!$) .W_&^+ǿ0Kv %Uj'Yx,W/V<^yWiܳE:枎f77 GhTߢAtxDh -;ıAUl!EJQbHTXATOpJ{8vg$6;5V5ȇG/UDzLD"|gRu4xa}P/g8T7/Hw[#0 gqt0kX9CK>r=VN7^t ob)ۡn`y7`L0+zzEbDwO*Ԓ;ٳM^ Ưkge' ]R7o6۳kBhZ7m^>/!p.gtH2iїQ_@~|=fkҋ+6Ȼ$A :~<4&}Y7w|]=cuK*P{-%ٔj`g=dWX59=nl*d=8`tR6ʥco|bhiU\G|[slAMOzQP~5=*M-jv5Ț'X¡;BMr:_S,wIYS!xt͝^rh3aQO1ԑA}9 Rg@&kA??/7߈Gr |3 ~lƤ!D1%9ۙ>䷞o z0n4@ŃfY9-O3 N8o3B07cGX9EK˼їxkLXkZXȮ龎 `>Mݓz:Z @cGqC=Ofh]y㖛#]a}Aݮw/IiqڥU\+B3x ,g7q#u# *0kh;vrS0eLӖP~@ ?@ Wװ@^4|kᐸ.]4B½#dL~Z_pkLy ~F>/ɭGIO\N\vii7if9[(tΙبLG ( OngJr;dw۳sNɅdssuξ m "S# ѵQtTz Y6(l~0dr@t[%XIkbhP5EEP۽ F<*Pg A=z (+BN&Q7̭G (UW~+eiW=GhSu;;jzlMs骡vrW=|IAԨbdw!04kDypV %1j&ar0.\EA +Dw4LC]2@>+ŰChÎ;d0=6IJJmDTMuvw:gKeǫ56;HZsdȭɒJ$֚7_x@C-K v T(QV~W RD@.WxXN3:VpL iJ,}HamhEMb+tE#alFNL&%o!Bķ@[ĺ-db]"2.r!c S:MiY[t׬ ڒn!#[FhKeKv!pA(-CO-Ay @Cy[@Ɏ0?)GI~i1Xw)?*}k~Z!ʲmFzlp M }q@L=1CK`ll;u Uv-Hi=B*^|cSr/>-n +7!8QF` F1{vdž%ZG/m}l+ר~0Oh=]$`|@+/:bM h#Rm ^M#){9lbT)w32w 0'Zk {hd=oEhזڪQ_[5kڨQgF֨iFM73nfmҨiF}N5tڬY7upֽ& 1#.]1VNG>^s=-<\~ax 8YWk o[yppG&<`}FMyFMyͬ.< 8XߣYpG^'<`gfsa:Zbjh!8pZISMQ*‚4J`13jgN^ Ǫ"G#qsH%Uj#&< ;}OKIqvdHH)N${ϲ6np[!-R6C ) E|j[Y՝3l{g<5roI;}ۻdLc1C67`W_7w7gh7 QJǘcoH7:ڤ$Hn}݀3-p$*&^!W>O?'RK g6z=d6Z㜍>yB;z!=s~뛫우 lO) o8|X_xLo. gE6bNC 0߰]8xCx+y}v2m BId|?9ޣ[E[x%& W)#RI;rdH ]dH#CW2j3H:N^<2v}'p>ɹA9܁:;a>^ SA?F&-eb\iI3;{m>\{{{d.o|#^V6~*4-~lƬC H'ŘnhR<t`ܚ!9뇿B`vjLN<Ψ/$gN:o39B<5c~Mmsu˺ )-/aMH*$T|Ot$:S]qZX)RJ\Uޮikb5Jїx})rԣTT2<:Bn=a'0[Og< cp(>r5wW+?K+qaޑ)if-^|I#vW]ZOM'yXKNYol Ǔ_vq҂w5tǫPFqN5M]mCOx^ *%!@Iq^ dLӖʝTd wR Wװ/I 4|kq.]4B½#XfhE1&y->F[D1rin|7 o޷nͿ6~/пt fqyS~m2ޙ.7g" le{rEeb/g Q8(];\=Gl]e"tE)-`=ۏN(n+M bd%Խyf_"v/7OD,*DGGD_F3#z (+B >Q37ؐ=&:!?#`vB+c)[Ժ <i4ךj']C;/玠"U.kbf͕7U6`@oE10Q.nXh&,Ck%zZ ڰBI>Ĕ&iGU09 om?zChÎ ۴ džXv( ɿn6W8}eU%dYE(ZF?0g{['!%O5o=Qԡ{oeޕJRw(RxKda  `QNaց0j _?$ˆkl0&ΏY)$g#a\Gʧ[D~db=r29Lpr^$c î⤣twY%#CFy쇌ts2i?d~H߬2?뇌z"{iD0haz3T " VTH.0{r:BcwKgW+þ)ʩaZ2b F$ns}MN.={%}?w8#pWfyGŞ"MSzm#rYe1a@ہtEUsڴaj ^64yZl4HJw~R)oCpG g kp6@!&̔'hCX>*0A3E B dYr$G4+!} X_EInRޒ5wD].ʣ&uh.eK.PrBR ݢT_w%.(͖O!xo;IX!oLJRJ=!H'/;Mf9JxްnTR[?5:,:w6`%O5OF_+QgJt:}-d14el. CY*Q'sU(\%Οauj[{viFn[.>ګ90iR:=]8;t!CHv  l2Z~0PrkLywiV-ʇa~x:@iZuz7oi;(V/읂' H *8^$dߞx6(ǑfځG:@d]%ﴩDg;Xot1!(nˆ:kbh.Ks{ u/0m`˨ @!~ h:;^|it&2UU$-[2>6зGD90yH Ge'2\CFb`Ժ <i4ךj' `gat\SE޵ ͚+njm\uCDea} †IBv6\H+:VniV 8kU,[ӷ-r=Y!aGJQŷK2bمeB 6p__*-pqJ缲PȾ5 /e ,Mby30+{ { ԑ.O0ķ@R!$~=o\\ cu3qR$gHWb 4E@ kDd6`Gpz#m<2j"g0 m tañ[JaT7j&hkgu3#!zHECh ""5QbEDF-FG䠹U$UhH jUݵ-Iy(A!Q0$Մ-ESr%*d@ ,TQH QBhKK K+y)QE_jUTQ0@$\/BA=n_3Q"wHebHqzJ^&{ebpC(b?ILPw;;=\ڛ[_)2;}Q1aQwcԭ2c\ GjUwҷqux'AQw`w/6OZKE%x͕& 1>{.{֔=qyfRn9+7wJ;-k杘t󔟅gsV~)9+?딜uZ:1gG,rtNY9:SrViY+GĬ?iT`y˻-#שZ6|>BΜ!E#rqRLuz3ᕃu% `Ibn)u&R`]Rߥ(Fwº=©/˱\(F035[tdE8%k=3/a' whŵ~XltBdcq 7nY VCtt{2R;\:n  Hmu4]PiqɺS"ZZug?}{2p"K9DFLr ./1xdLz2^&=/IO˴'eړ2xdL{2^o6^zƧojVR՞L'o}ړ-G=J~zW̲_2B\b=5,+8>n_?WBl}@5|}l"lc7#tm'FH9'8X\ooFQ`'9GmmXLx9>c~xpLK)^(#-dvc !J`'݅S*B=U Wq=y;sD1>DP_}цRsr*P6xz# 72y ~Qj-i *]d>JuEZx2D{۲U`sCsEK{۸pݤaB"i%R-A&=|'G䰑\ dco [`AD)[ǥ1~kzS%"V91`\b@\sqp`''*oQ2-؈CbO\awo?C23aZ;4q3dCF<#6R`y'YB0~:@ NaCOr/q8!Ysyh1I׆x$)/\l.;1Shu%WmK"5Ra㩬^T(Q$Ži߅ͺ6]O ÒXGjf;b}}rD=$ƹ1HLA|e4;}Jeٲ Xy$3DTP>F aXkiqꢑFd9q\^_n3*Ybw]<.8Cѽw9-AYVL0,N'Bٕqpsi̖_A{k+/zc*WLL>D"wg5GFD=Ko 4 E$ض;`cƳmo9ZW_7w7ghst~?dH{EGAOb<ȔߡOj`y7`L0+{=q"1 k'DjIPw~uÝ&RZ+5ţEG p uܼX:?#cSz`z8#ܛU•{9 ؐ%%{@,E[aoLe|HB-8]OUD6`[*L.9Xd30LK% y2zgOϯaL-aC/<"u! u&$єNQN2UwOk8)|G&x#Gp(:QW bh3 8 "ȿ td"ڎk 0uť &0Y<0dT`V.d(I+D{̅G~=#%l3\ c,"ҪL'we6"RB&}u(5wU[q\gJKC%H\IZU2 f%;tj[2]c=b&SGL':a:GTI^7h?lGݠ 4euFBNBrBZٙӦ. 1=:}eЈ=,!%xud#~z~?*.>bXb3[ g+[ g+HM)*w}%as{[a[d8 h _nϺ>0"yg6!HL]#s.go@;a;lM灢;*)&öt3p"A f# #r^)w߼=)+D!V, 0&!u[@0Ձ8\bL R(4OP(z?C}^KRxm(B$N&'eBĉrĉrĉrĉrxĉt` Ez It0 Ez Yt Eڢ4" +6"U님/b&澈i"LrڙWYjy+YV=Z`济WܫymbռvQj^˨RJ Kzpdg׳YmbvQzV˨R0zV贎Wt+:mbvQN˨Dѡ4 MsSԵlG w nDqtL> 1,J4Q3!W:2HdadTMGlaiF`,`<P`$Kl 1Ev-)2ɌEss˩r;zQ_N}ԉB܃'b_Nz>Gr]+M-Ot7W~{ZLy+/sXwCH+iV Iפk5i}ML&-E&ms_6jפkVk֫Ia8}Qڋ+zTECKl5댲p;ZRAq#k\L"KY qHCI ; αcE]NVuqjZVu@;eY4j,1@>^YdTӂf&E?ZZdU UtT$BTk\kTmL)CU^8wl0rxJu)z~3 A.CH8O>q)K }0\_TfU7Zmx&0,ۧ_k@[ڝ8kʖI7jeWTMHE&6a|bUc~btV%knuJCOh^q bאS$GM :9IҲW'{u uaW}fX8xvWGB0ϖ<p:@b쪃_p3r #;*5N]qĩfߍZ zVˠ{7_U>^F:CcS(\5GW&Y^;R'U5Je%?Z"ف{Dx X/ƳxڠL`Q:\EH_Ji\G`]Rɶ4/#3+ ! PPzX|iGAu0&zR67|"$fِ-?s`fo*MҖBdJb-1 7WcckW5R^C8 {K gsכTGomGa7P TK,+_TPh5INS"&o ev|ҔgCeI% b^S7̭6~p$s./,S"L514׃:/V1YJo=[J=[ MQ2--.7O[tv.9S3})?V=@l,{!)yeM?^b/MU߳Z 라e 7*j.>gZoӗ\oAކgܨi0'ʍ{سκϊj5dQM0׍`n"~ʝrl1*&ڼDݝ^VSҺNqs:9nJT5.i.ҕ8(+Y:ZLdMk26ߩQ!pP.Ej AĕAVZmz!.(q|f6 +-}JȄt=dÐ?  ## I`hO;GG8l'GV|I aO'%t$ J$0@yS$k$XٱxO3 Ț'_R=~)V+Ze`+56RA|c.@n$tPYBy q&y)slG3O>Oi:ZoOfiN.!h}}d5Wm*m)\*yyj+Ͱe-5as{vf3IZz@4R{~$Nv]L|cΐp,KCU<}g;̫#9y> /tfgSyQԟ0vTZGrNFhƵ 3ܴ3]?eսOQNqT$;z2 3j@/ʫ& ׶dU#@$]v@0%]1Eg3^gGpbL`Q:\E pK:쒀-67O]ՠ9yXYa~2h<(rwyhr` 4:6Up`o0L+#6q{|S!.XɔĀ3cn68jr'UyewЅa x½FijK/MW yyցˍ*./jrCee=Y̺So@ / N<0yk8."哦=,*x&װ$M?'ԩs!tʔE;Z_À:u-`HfqEo"GMYM3QbwZ`X4`Re{1"H薢׼9bU|*>u3PeJ\Xp3+BC1ɝLɸи"q 7/AoYMQi(4Ek\xP\a!ŋdνۚobv'9.oHZ H TMru<#E zG@SE zI9=%7Fy='EH'H(4!o ,G=`N  g9Ff v *v/K aO B>oK\f.X&K4.L &ɷPyd`CjZ6zP 65-ڧ\}%ڧ\}ڧ\CtKa9hi_;Ccc1%}>xE>ksc<߯1Cls#·}>xr'Gs~'G/X:9Ʃ9gc<Lb+.O .R3ѳDE="i0ˋ!NV1_i"f#ead 2g'ak$Iz =a|>;*nx<鷖I<"O4]#K--a*J&-a +Xk36&kCCbj".0=Z ߥ$ͥuҬTv*XsU'R^y'?+k%ѹN~:!c5r(k8doWus{/#@F,jesdl/LHCV,FLC!r3g3.?itȏp4*:3|*i4g%tL JL#3 ]lD"qD"q>"q8"q2"q",B HQ*PϷDz at:@A5"xElnYB]TGٸ3~3bYb1b1㼇b1\b1㮕b]Ōw#XPNaV>^Fݲ${zL> z,zV=5Qyiռ1j^{5M̽.^kYyUIaIB׳Ymb61zV{=egg}EMh贏Wt+:mbvQN˨Dѡ4 M*ۑ뇧=!֩؎T#Xʤ4S|&Mh/Ǚ4ƑT{= AJz0dx02Hr2A_ ͒!nRHgsHS76N9}4{idĆl|fpJٜ>ۨPK`nѸDq8^!$A ":< dqpGWvm$A"<]*:tt]Yו8]Pk0\ 6MBz.Ox.ʼn @n0#q'+.)h9Ħxv;WCaꖭX,+EG{mpwq$L$B%ڶsP2#]~t|f)U7e(a {zʋc_׷TGN<6EiĴ!*r8gVAa4^Fΰܪmc` 33 0LN%v l|^v av?VXi ̲UEd*%Pt97 8ʝ6g"NX5NLծđ"Vn*[cRK!?LC Le ő$>DVyqVMz,y 1a"M8wǴ#iG)ˎIJI9' (qCv_hS қ"G^iVKm=xZn]hڣh[[-zhXr&2: B[ȃ%[oc4^u_ls`GMt>N8j]yU^a 4]p!:p-`k!^SoW0xFۦ#pW@aKLz[1NL4D>D0xasߩ{TG=TX%EgS+Q3V GS(O%8e"rcj7)^DDփGu=ն<6M=5t=ˋnڪ὇6lW,+QcxlA gZѱwrIb1m~[}U h */g~:5;x1ߋ ְ]v`1c?EopT_Op`o,Qi\\UXh^?Pt_QR`bjOd1T}ZID?UQTGyT ;qM&5W3`_c6&0Y n2k5D[&Sp*`< D,]/] Q_duOw`O*KɒvƊ%XeK56edebϦ^Y1Ïk@ \c,24:FGrqTA}bEܰ^A]7oqG8ր@Py^!"LSg`D{JrOz9 & YRǟa8Pd:_\]ɏ?NnQBwoo~\}VT $7)HN{tTI3^[;yYe 4nn$tPgHy qf82T}tוw@kRZNUE>p}S ʀ1A=؎k@6uť ~+ -,.d >˝'I};M; |{¶zpL?%a*7 Ut4č=uc#xQ=Π-ʜo8*;cu>^سUjpB*>xqpۭ-bdT p4 g?變AKIn*ާ0,ۧP`k@-oa?9툥{OGVmqIj0R[=}5tipǓZʧK9͖O=Ϋ؍XMxLULv5M<ˣf*r|J8ގroNf3IZ@ 4 0,lczM HƩ=z,ߘP0Y;a^ijeV̹ZTܛ_[u薃@"~;* 0j-Ӫf x.]R͚u\6r\.NqymWƻwjYuӪe3iI=\?n//;;z,%5CxcHUDG:TG .GW) .b<;(t`E񐔒p-;G(HBc@dU  `{NOЙE((8 ~T\[JI<^ S %eW<+o0~ˁT-ɔĀMsN\cɝ"KBv ]hY [jTG<; ԛTG]a7P Tq)+_TKA{\, "j(s_ѯ?$' 6q[q])4`!PٯK409ļf40'_MwDv>MvDg M,c|P3廳q;+)[ޢo >nz9*@u戢ӻunǁTO <ƬtMU>M3םyyG'oγfƇ:puc  2g\NfLFdN6cnЈvFO4}ݠ3xb7hW@#fwG' wGg PxGiSlli,nLTN.hT!?e0GM,buzzl%ȷ|l%H䞭X+"F%as{~H΂r {]7g kΡLoGGwa|"1{7Yӏ8o+6ZY={oީ2/@A7&öt3p^( 43"ւwIyp/>Yk;;o"ZW, d яNDZ' CH붼 `'o @/'LR(be=!,qPKR&*48Q:H(#M$N%'ʄP `Ei5"x_,KalnG U7s3u"3λ 3Ή+33+3*3N,fEX̸5qf% J01`-K YԐ"Ӡg^i͢g^muу_*^ks浉WܫyռQY,4z=}̽&^jsg׳ZF}zևQtЄN{EM̽&^iu贌L MФ2 ˹~xbHNeD|y:ܰXFNfwu&@RaºxN+q׏ɋ{IQGLmSc+0znp-'&|X"g"O<0\ԽhC*+xi< >~:ysw;#,!S %@YsPn[p;ŋz04>`QS6M=}HmxXV41aBW q)@`l/ct0c1m~[}U h Jg~:5;#!|/(#6h7Y`c?eopT_`q:` ,n ?4&M1B]/Ze%0_OGA8a|Lò0fe⻡ /$ b8LRWᦘ-" 0̜ţ:Pnt9|ټ=>rݧOJT2{ޅ'@ A!p4(uT5CN3x /# j$o7`yd!)_+ 65f to U(.Iɤs I:MEPiv=lx#ˀ g㾃#IvX }ID5'p9[^~ \zHu]œu-"T' Wr뻛ˇQSm lX _wtSC~W~ /ia혫AU#$ d1i3IX;P3ݭjcIZ0dԂ%+69ĺZn,oq d7:Vc) S- G8R^e9e՚f*']Rҭ d[*3`n*D+5,|vMhG=ʩ9i<pS9FuS;"!¥]xLeM bd7 ¹4Twü:yjYGp$bW}A) 10vT:G\’rNFUhtExޙ^+}Zru2]7u ZSDcssIN6xQ^5Ѯ|pmKvXQDeyۘX/ƳxDL`Q:\E/JWG8]REɶ4'#3+ ! PPqXiGAx@I<^ B2Qʗeu'v0\ #uE%} !7ڲNjLI 1+ɘ섛M15ƫI)/dwa x½FyĵU1MW yyցݮˍ(*-/jrCe*{\ANPh܉$' 6tq[q])4`!PٯK409ļf40'_(qyD?(qDN>ʴ-nHepT#GMq#0}0,R8KbB|AoABo1A@6 !#8t Z BۍAS((<1my3i؆t12nz0W;nAz<df~'*B1]ZHGӆ"袉V Mܛ&fѻ(rS"1*P;J[0F%-7>T>"ݗEМ.Ldk[."nM$DF&zM@\Sؐ Չ0 #M I3հ I!iWh ~3,K4׃-Zk ar81cCjuXYL~D&bh?Mdx4Dv=OQ>M*-ҴfϔE0 Uz s1 9*q ^՛hċnЈݠ/.A#^|vF8x qB#UWhV V V 9m2Ͱ循*$U4 Uy7RR$hYk~"O,RV|VDي/\nihqzޢ/^MY²'x}svttg+/Sߒ5KQ}nkw؉2{)@@6&öt3pq= L`D(`DIYp/>Wiڷw߼=)+D!$uY@ɟ5a}i"= ?BZ T(8ABШ0IP0/I}SkO_ٱO3ԙ"8$S"KlLldx2QO;Hrb~W HJK)Jսk։`OH邬z´xv]͔ŵ+]0Oˊzhmni."0D]fODZ9ZHlQ=yFuF%hhBoW^vܧŰH,>WULDgye_3U"PElDL'ԺE\SZ:uM)(Nj]%ٵ`<Ϩm?GͩsAѥ8jnPI h[~o*S"]$T̐*a4@ʡ^ˡvq_7WOUA]|Xu4bugWcB&!Q`(PFgi`hDc(9"?a? ?@w@Dc(? ,GUPGs^e'`eĉ2gDD9DD9DD9DD9DD:"~*$S"F(S#sE?NB+9lJ=cs /:24 fC,f/3Ρ*3K*3)3L,fܥX̸.qX%  I01u`-K Y$: Ӡg^i͢g^muу_*^ks浉WܫyռQY,4z=}̽&^jsg׳ZF}zևQtЄN{EM̽&^iu贌L MФ2 ~xbHNaɾ`TyrIoIB$t4L)YLdYI ˯ade7)V9fٶ6 Or !F!f6[.'Y8&Rz6'ƥΊ(>Nϱ8n8"/QO$R`AV&#UT:r`l&&,[d.NaڪVtd,L܁BȰS]`1NnR> yg,py0Isq*1>,Rl)&Jl.&H,$Kac²qEaDё2a/vdL;_/ӎiGd#LYf_D\6xVohFyahIxG4r !]<>sɭz.4_4S--E\yi=4,s|^/nB( _<XU}FЪ۾^ t}0,ųzt3㻺[h2Ct[*,=|0/ |31yq7`kč6? #XgK ' qb‡!>|!C\uNێ::1>L=_K 6V 7AJS9FٿHXᷚ v`hL90勇9iaZ{XJ5P؆eE6*tu Rm"< V"~>:QAw0IZ =?@cX{o 3?3?kz :|/(绡`w.pW GXo Fyi#X0[2inH$YOG  QLQR>JŘiDDKlx:0F9v:!v8 6n]!PF%WELF"md~M6R) Kol ]K% 09M(BhPj$Sa5 !x(Eq0_ G5R|3~}2بb(u@S3gŔufϷVyr-ȐXjNP;RP"FT)6ƹxU;)E9X @Ԩ x6w17])*Yv.7n0LV|׫ɩ"4v YPh݉$' 6q[q])4`!PoK409ļfeV6~p$s2fW$J72!xhƔSdH͓J D6 ^h@[-" Ɨ\ XP2$J+*k9e@j BgJBb A a4 ^gLƅq: \Ԟ0oCF)-)h";MΧ4Ꝃ&Rhg YL P rGea^q_)hF8x 4g7hċnЈݠݴ4KuFBNBB啎ٙӦ. [ݶ1}RԠ_\>i*c.i?dos'ff+Alc+A"lXU;rsEo3``׽nUFv0>uW킬G[AE{v[ |W,ݗ 9l* 0[ Ɔf&Q0kZ0z@ԎK3Oܑ7ov @d`Pg Gz&LDZ' CH붼 `' V(\b r  XYGzUCI6 N!'Hesĉ2DD9DD9DD9DD9DD:"=$B:"=,B:"mQ=t}G0rޗ -0~J@aA`ƹNbyb9qbyfbƹ[b]ىŌw&3L$9;^[ F}:9beIx};+|!|+Y̫.zkVVԫycռ61j^{5]Խ2Tz=’Sg׳YmbvQzV˨R0^is贉Wt+:QCiTF1w9O7{BS)ܩ2L[q0ix4"13İdl˹hE5J!Z2φtLőA{ ui:Hvt̖ eiiyT ɑ1G)oNn>yCU:fb1fb8:XTരJ,VPl[tl[tLXH::rOXH::_&/iG˴#eڑ2~vdLO_ {$92X_ wSY$$΀c#Ś}>q _A,i&q!  LHf_$ȑzG9?ѣ s=ڼL/cE_օ=xJzϻh?o߲?eMeE t-A{PA,W+-mLɚnR< .ˎnp|Ww`1a 4]p!:p-֮>~wǛ4č6? #XgK ' qb‡!>|!C\uNێ::1>A(l8G}3o/*>PJq 4E ? 'nS<C3`fa}wl~A(/q9P؆eE6*tu Rm"< V"~>:QAwXq: 1շ[]܀AQԟ` 5p=ჃEbr?.6h:͠7,H:?C^\Ge`_@*!<5/lu_{Kc"vi4f\%4/qY2Y $1q`$,`1  6?a idT@3eAt tH dāx*i<&2ɢ^yzWx,%0]0`I@:".X f8Yų"Jj-j0 ` $|0$`Z&I.cA0/e89`0 `:*Ibm0+ ɤ2LbZڇ%*LNѴYLG5G(X0uI\iu^,AR 9lɪ&IL2 fN\HD/'R»Zs:T2ݿcZl.hc1c`XnKE2^C,0[$|(YV-,f(5t-]g i!"DyU ڰCO|E`6l닣j"C,${UFC߬om.[T;wY9WAy!od-FTAixW>ꎜ.2i r w^f;zPɁ?-o/؆W^h0'{W&[ XΑPe}wsy_"͆U{Oa M7>}<1(f` Ǜ7,y=?ʰ#Quߨ8_y)ޙb["O"K+ (/)b k$N] [_9&B8E)a 8dhG_FEVtK=Ae",mo@"XUTK52N`bϦ'Ͳb=LRH \ؖ,.6+:FGr_75]}Lf-QUFҋcެܓ^ax,)q0s2/?~ p*cʣH<"(֭HToSԝ訆[^Y%1(z{n$t`U<4ęlPe]W9.?o7ߑ-t P u4/6gNqDT6ƹxU;)E0A( @Ԩ xvw17])*Yv.7n0LV|׫ɩ"4 ]Ph݉$G 6vq[q])4`!PK409ļv40'_3/@TA{Yue"H薢׼9"U|*M0rʀ*NZ'xN&43c f!]Z `2.6av|ÁazwXC|a#NazwXٻð40"VgjEFAaQ)W9w*SÃazwXC-?;LJ-`zwXԻzwwA 0.w{zֻV$Ja9\b'0Cئ5tD m~^`"n1w؎YD ,C[nȏ &Cק#DŽi eߊ!iGS"ӎiGd#Npuwt3㻺[h2Ct[B:`]?&/&Fqc3M-Fᯀꙺ Hcai}`?pS{ ௠]>~Iysw;#()TncQ,R9(7Vf8qEDi=T {mymzok{ݴU{mxXV41aBW q)@`l/ctcھ45vP=cY993Aݱ78^P(&g6Br ^0[~ 5਀kΟ: 3PChyjVR%: v B*H() C@AiTiM#'~ﲻ7A-P9ZBywsy_V 6=Wi]?/4T_ @t 7N\e5, 6n2k5D(Sp` ՌE:ꋬz*ږRbraXh2>`bϦ'Ͳb=̛ǧwb5P@X)`1qr֡C>Èx33,5 *y;"ıtr<{b-4q 7+sA+!KJ3 L+)BnQBwoo~\}VT $dEy Vwg?:$c83S@IF98!`[*;ضα#t]q} !URgx|A8s@ \MY2)@F*0N[0\_Tf$4Tjq_ )uvMh1?\_ɩ5-8JuQqIjR[=ʼn@ʻӪԀ*0jJȰClTGj)F{[zlen=`!IZztI4kөKI`X-hũ=,SߘO$ POH4!] kZ\yn9RGS>ՙ7.Gl*l1򪮉y[k[kê .GoVXI : ^gGд-yHes @6h_`|0,4R`TRB /:}9HM0=ˀ* /V'(AcX&mIud\h\qP=r'OC'|""'Aآ5tDm~^,@!ypKQXeBfu~q{<&su>1o5-NInL1+a׮yt7\6yzM8wk޸n9+0( jəp g1SxxtrWd|^ ŝ'NQ gOq-YвH"WYɯrDUmq*B"TĦJP$JC1( E4wdIXL/i<IG:] I!$46xHc"Da  R3 )|L?ލUӻ?:buto8sYwGEnbyAU-W:Kqc ^u,@ԓV+֏-珋ۛ?YK2h)rVdbu T&LfaډMq CU'Fs/ 5@?pdC^}r'/05-0QKťPgIqX\*"o6jrfY_[W>Z&zͿ?>=Iy4hM'S).ݠܺ4jA#%t7htFCnЈ@O"?I#}FgBލ,6F4 #SY- -_zH^ms>)p 3Y҅9hD z {bihٖ-sb@0_nϺ9ߎE#hʚ~EF"|-z&@>S`2lK<r6f&Q0`D.z@?,^)|me(Hw߼=)+D  jA}~Dz~2nQp>GIlY8 R#:1*O5&*48Q:H(#M$N%'ʄP `Ei5"x_,KalnG U7s3u"3λ 3Ή+33+3*3N,fEX̸5qf% J01`-K Y&Їi3f3YZCOS浏WܫymbռvQj^˨RJ KzO>^jsg׳EY->K=(:hB{E}̽&^is贋WtZF}&QhR\?$Xb;RSe6|=3tP8OnRѲ) fYCz%T"~a2HLdqT41F>}@RJ)92q O$#( d 3D3ҧ^gt! |js,,SJH;͓cEeˎ#X6ڬIEj8ˡ6 #T1KBb9[W8:6L'1beS8I'ÙԭI7-G!y\wõ6-,n?{u",C~"ıcd2 ԇY1frq7ǘE|,n1g>Yć4a&ݐ1]&,CքE~ 1a"E~ɏ #c7ش#˔i eii4IGGPh[6;/Yū)7T#F>ahYpGK4r 1]R=j^$G9!&IǴ}h kaoVW=7zƲr07֠XӏnG|/(wGswS2Ila1Fc?espT?uPԎ#X1qq!{Xՠ70%;ϥ:+zOҘr\c(֩,.5[BŒsZaY8E3WZCgҾ=zϤ43,Yv+6g\ݫg_cŔ}M?iS!G Lo<sH=S Կ)QW:YS,]Y/Bd9/+ҿ,+ȟH#ZI=a{EEvREָYҽEV,iյNl4j5umFщ6ى6Y]QԜMetǦ2JcSq%um"Lb8^̓}utfe东d = xަ۞@̼骼r4ɏ0Ne:fHỸ4¼lQy)ϙ a ƨ dVq|.0 NJv lkhoV|>(qiXSgBx9#:c۬ mtՋ,éD=щ(sS?aUm;"I˜Z%ks2Gk óoZv#~_}ǯkk9bU;/S&=W( mQ ǡT8TO`g^ ۇa*rvx jbl ]Kס NC8;Qhhp'j2a5 A2xju 8 G5h&(oTg!lW\UlTOy1k]͊ V5Nalɐ72| Rϟ'~p2 Ùf`h3;/V݁-}ID5'p9[^~ U^~PœmdZ'_@bG~r|sdGWua󴹿4l6] ˯ػ~Z_h!X_^+I?Ȉ4@97'8^ˎkX`z5ժpˣr(]p 4DdwְmNc^Ej{n jt2?<ٟp{o˟3yG?G vGડXEo^sp=| LgNܕ?pcg |/pS'~垩<3{?uE乷/o~xC"`h{W >xD~QxFƑoHA<e?Vi\$<?h| ;8*)tDϗڃq6%)r?1A>q~}ƻqj96p.3=yLԗ7grw>8I;>LsyĈMrߡgd^s O|7$0(r2τx[z{`0) Laa''?: ki߇b[i Py_}z{/_t'rr_T~@B_~sBAOKw: /Kܶ坪aӫAL#8CU0V/о*7~*Ci.r:z_4*'M08g|&$3Dž-C~_d3PC'Shoϒw}y\yx,~d~sO ?!?d_^^2篡UfjB9׎޺~^SuǓ:g;K C8<ӕOIAr9> _Vp)s%6].hϔea!94V?)ٗpW="[5"0~lG{1!^KC/!WE?e}shGbS"Ry v4)#I:jiwk8Ӊn?ryId~ZSa+v׎zu*u}o?uiqs>GNmZm4aE߇c.1}0ɦg+z-K_iSb70}y=/7ܼWy_~֋>ӗsJ_~_kYY18:rtz__+99:-/G/f/qt.4u*q5oWqo%vn/n)abu#1>7:0ar7(ab);ϯL7?ю_`qz{\]c^`vO_>Uè/kǡ[5lf abu#1>?Nk Sz׀\_'5K'r]IܝW,>!A<~g\pw>'>ζ^c_9S> xpI3ckt5(2UQUnoRx.Ÿ&pETk 558>k#f|̗\D?|>|>|>|>|>|?|?|?|?|?|I2 ÕӖ|@ᗔ\GI֟ǂC#?ϟzfCr{:{~>whڶ=-OȍO|]dvVn}z;G+N? Tn!%U ?ܭy_ Kšym:E ~v;^~v-oMngŽxo 8xŁ} ۻ@;ZV8QyO z:&zD&7;t~8ٿpq upap6Y l/Ƃ#[zQN>eУ Xз()r+4K"w,{ {F CO^R?K{;OFq~IR#<ɾMn 7븮cAG԰6'N}r'oa-(>؞io L0gn;dkE[7VeNq3]-u#wA[K}%-`RۇyGPmodo>0Y5z7OO hs |@ "K7 y{ݖPAz?on{!Reoek_7w<`K]탏Oҏ/OZG>6 GF?L;!x = =a ǃ6NA'ǗI|jRWG@ewt5!\|!%zW5|s/7=zq|&v~ TRݑw8|C E~QuiӐ{Ȁ+~?o`+00z^刺R<뼠{$AГ?!i{I{!2.p~q1<$^:{R=%0Yȃֈ`e~u< B?M|}"(ejUĐnop" LC鶄z^?vu'!% E{8' 7#O~@=`{sIbn{=&wPGiacZ (g Qm s4_cb2.kn{I~L||9As(2z [>k]~~a jN?=oCw1 ɑc!y;G>U(܅O>q{*C 7OEyk7&C4qxpL2 >%xoQX%o~7}}Oه|KGkyyo 8zqiƧ'wBՠ7 Lڠ7vjl26_ eؠ#.08-p< *Bu74 D C\{lCnH̓NzAwT0y}E}aȇtľ}G{̣4Ǵ 0k9A} ~h~?? O|?qɰ<'N O$q⊂&8Z7$vjP̗; w7ae]Q>q8Pa{7gyO{=)sMlvqHA 780qdhQ6cCrqڏ?l'vsJu{1(D9JJ ȀP>vFnH>b; C# tGoG^!y"_jli؀b <@e'/6 ,Aoͼ@͐$SE_k3ϴ>= FS#+;;@7PCC08촘9oՇoԈ_4>X9*hx8vƞ"{>gEU(È'[(FD; ߕ"~2 ^,o|w/*s ˤg44N!d+v=G >-`/{7 u?Q{ºn7xb~mwX< )/=`ț̲;zt" Mݻ_K,8 %S(GIpӵr /7/|<Aǻŵ*d,znzDׄ%rʞ(/PO$]ȃ:*8ș}/7G$чYŔ?!ę!_1t҉z2GJ7(ˇQ7䣒Z>dt۞>RJCLd8O:lF:OoYdοk'' uC/=umE6sgP@YÇZEƋcwHwS~}$4r;qz#B4暿_Oa&eg \g@8Vǒ(:I{C޽GE_7@N~Rt~WُNNTz0zq7ZBd^(0UUK 䮳q m໯P_ǞY}/;!5vnbnP> ٮ;N\n;?/ѻ?7ya:wxl~GgI>L?[>7hqrBC xع/aa{rE_䯾 s!qq 9Y8^|4~Zd @}w8Yv܁v >yT ?Zt&IS@owla7 ^ OțL/%op nϯ"N!0ur|C`8$s)Agܤ?2J!;%č\C~|K '%n(4|}(eR׷w߰-8^h~U7=CXo?_\ğP/yğP/g>?br?(M#?C?M?7P?C?M?7P#?Cx?M#>7P#?Cx?M#>7P#?Cx?M#?7P#?C|?M#!I.QऊamSݗ|Y4 h)͝㯼}cXn~t|NoD=Ǿ{Gȑk՛p2|031n.ĻPrnVWXYi\j8M{Xn YakWR-݁d)9C6na9Ѹ`HIr>oҳlA4M/I Lk]Cg-$qT15-Ykz]@Cn6ߙ$1PŮ;|/$W)'3̉Smp+gMa3Ex<FH X>W#U!.w``Q-_gJkwp xoR>46U;a$vK 8a>Uv"jȰc% Ajg#REP[ؘ_ ]jn,p,q2H[-f!-ZD/.[ 1TfbԄ' 9.T#h5V;e%TBښtcT?c<€Rܚ[qKVCpᶈfJ)Lå@0Dsן(K@l$Ƅ S:DQ$Ev21FC!IC[@. Qڹ:w6X'i6],f7e3uf5;\퉤Fa- yY^ZQ0GYvH|Ԯ+߬t6&Nd&OMKP|F:竄,- v-CBtΜIPEg x3v0p9@,CFAؼ;,IA0+.: z"bM^H%V+186zX. ݖVOډթ}Q+81e o*LY`XSjH+0+mҟ^54K]&EѮB$.eĸmkBv>pI"+8`&Ӭ#5@Wl|{ZA|ȑ^o`LG^b021=9]j}cNkN`ok$:cQ􉺝ĄahTْƲc!"~+'1%ukB?J9e<x"Ɂېn (-Q&%rZ2pGX@dHZὄU֮VK.Rn@oO6@Tf&55*= ]"V*F#Wjg \%/QBm@"kӽ(j,a.Fmvt^mʤ˜]R yXZmY~nrQz]a^`T!d9dX =oxʻ K5mA8`l{Ta!P8Uo" ^WDm ˢC'ޢ*vWe Q4xoZK_Z9V&)> V;/+BW` [a[C*Sy@s5?^1;Y'44F1r'"D/˜`i70ә R.?vew'}o5v׊j}Qye\ev-]놀i[jݓf"*SI_Gc@ ]F ̋`A1dwت6ױ*bh_W(6>&%y:2 %Ugi7pv0&ևRߞ:HɚƄ"䇙jЦur6 pi0(b0nkQfdi\4Xy=I](^=$>G֊4U'9%'p8īr~2I✟fJSK=Yfb{EKV -Nv@; ](\(Wld"Fb3IAjGc󅛐1"鐵`ْb 6խfCGUٚ"MyT*`8ddaǃXϋ&ZTe 'IG:Np `~˹ED}Do^ %rUne3)ҀU";bKF5+FҮfd^4-ikT p8s:Nˀ3rIJOT*u+nu s:$Y4#, F e2-kbnSPR:;=ʪWN5)L-M m`}q`DzAj6RYkv-+eLWWF{ ΢ SsNLGivCq*phYKWqfܤZu-қY[+PY"5fﴑ(\͍`7H -V/*Q*e VR^ږjٓuK~'|Y>KH Zȁ&` % E359rni$E9~!|;o[˹ƆI.ց ;X8TCCR sg3i i)\minF0UXz(UՈmG]xPA|aPڲ JƩu:4fV5D 35 bäHOfl&%7&VMra01y݁*A1%F@I!-nq)YfԓvhdRHr2p PTl1>뒃E=D+v0䚰m2 Pv EE9Wugc4v&$6;H*Met84p놖,tr٘Ùyv1ZJ܆4[c͊Ɇ +iR ,0fZ^nz!Kd#i53&yD؃ʊD0.}~5l#XTcx/'vh Ǩv%`"9FihZ _cܔ^MȉஸK Q%Æ<3z^Kj`؋6w Tf$Y%Xjf")-a>Y44#)=oͲC=ԅ1xeho}:̀ٵiW|wm0e(f'J| c|n:xcEnMK/"^W-D()-Zq ur21azL隝٢#M3QiKHju1Ǡ96MwXQEi\bE}JAe-ڻl 'ZnU$9ڵ lSyy0u)V](B0{F5^NX(RQWr})TxD憣5ݤ a`] !d][𽯖QX( E`h[53Kl]U(q(]y5ZEor8Ύ`Lg ndfOH;lwyG֦51!| YJ W:1PGJm̴m׳Ӽհt& AKLeBk A >3Da9L7Y_5|XeZj;/IOuAGBQ\kl$ɑm$(L`ڲg엮(lL|DG)rFF#&r< f^u'tlaq UbV$NǍQϧTY+xh 3aZ8j9HB:6chb͢ox_'hYCJ^[8w7LløKۙ$_GH>3! ]ci.5;1Pmo= y gף`BXj,%c}!m N2Tˎ'!?EHceJh(*vA,)UZǖ*p3jUDmrw]{TidiO@eǸ3teED$$"O?+ClzC @m%JY~wq fx>VoQ"Q5J[%g5KsMU +oFV 0Jr[U+/'t˼eL\1!+2Ƭa,4"GTq#𦵸j 6[XT=絙tIl#lZg3nLl6dܺEw Ś֪>ڱ!2l*dWe4JA5c.aFhcݩÞB ϨٶM}\70 )Y]O4_yp{,bRp(ν&E4 *b !j:g+s(@@KњvSkeI @UVmv7>|2k #(~=#a6^Z ̖s|Q[Qb;q!,ex` l3eż? %sӤ# %-ȀJjhEmFhR4GKf॑imx[]m6"|AI2]=6J5=P"bPn'9z 4Qذp/alSN%n*Us o\+,cg9TVlyU\xYɱ6Vws)ײvkvcFܳȡ4孞fYni,sBD7&$I|wZ-+Rc27wۑWxPjfuXNAY DhWqW$vrE^"kE(ݒb"-y͆QcXYᙏu8,_zM bjldd|1^"CRiu/HRBmBhW/r@u_ c5lr5m4̕RއJ3qԴ%BF+QYQVᴛo#Ѝ(̖hlx zF&wqwЂh=p1? 'cEFr:Z!20ygLS\Vٖ՝}C5&ݎ㮒LwӚ<:f!lY=Ml)f,?ɴ4 LVjF0eϢ 5֤ EXlă~Q^ EF!ͦ0`:yYb+zx8+6_٫tۺƷ+[4Դg]QrhٞІ*8_ntb]*GJ*]  NǨXʥJE[Ý4Sf&mBEϖjxl9QEzܒ(!&vq[EVZLMTFŘ#ԧ3qz0-C@]Q勢i fDgÚZ[JuTrm؜a5,e4uA;܊z4A}x`SЭ+2 ȚRXss(hEZ[IAE\{DYT-lJȭG0 75sj[x:huu3Gs%4,$u[DiMZ k,F$EZ qᕝ Ķ@v8/Ks+ZژÈMfFdR U4e6+5ǘ8gVSoиڵ \bѱ l3PtWDEj;YUW.&d!V \062`2B]HUF.4[ cUGXfmZ42ff2KgMŝaU'\%>5rHW nD-7.el6\&gz*xnA4RL~CDE9dHZcȖЪMm,5E͐qk(3ۯ5"CTw̦U"{"B5fO ()N{"QY,zvDhڌ[m=F5a" SaƳ]7Zrkm墌E' #y4Tg.:巺څ3 5xpJznL0Gq7Fdd@kTCKm pq#SpЂt8F< 7ZGh&uBʬ=WkIJj!\I4ɝ3hF|RV(I ɑZq9Lw7`4/ޞGS':C{bVU':u 3s<-jY9015ɆѨE=q6Z x>!+EEV,ZKJӖC?QD(y1lFY0[5P12seCpM0V+&US k ZPՂ(҆tbНvg]`]+4No6pS'5Oac >HB>D=Gݨc!ӂLO@b' f 1cr@5I ,#w&Ai5Kd|۵kxt/tBN4MM:i'Đ77VE5)dnO6 nR2NrBRUk@A6^ rgY* Q*mRIzf@Rf-Ljk {xN/յmF[Őq"Cv^r]kf`k[ !9ZT.JɖR`7y/,v#6V]Z)Y!_b/B7f.Cfn$@֨(ZL/nlؔeC*J2-tZAjO0V8 -WK[uz(lj xqZpy h6Rz#MAxKQ8'zKAFp6mqgRn=OLf64$Ev+\f[WD Z优b|o{м M>OvdO\DըY@c) $fɍڨ4ao}aQ:Uͬ;#u %evU&u^ 2򞁘3maVJ# [#e+Q@Qېf0^dq>Oavac:@ ='L|pEh_}IP`B봄Ͱ6ۊe":@'F׻Iauyik[Ӕ]{JބXCMYfT^iAR$oO>;GcuY{pFA$C]J'H\⚤MFT(,N;8[)j8SchIw1N7*[x8q.w )3U"OUou<3cptC~IGV׎8c B4` {7$\u"OBAUM@N+ߒ j!&ߗi$6 cM'S\W&q'V ]*M,/Idv7?R5<6@Χj<gs}iҺh)(Ѹ8oN#uf.v`ϑ\HE Ȼ~%WI80߮CoS*628om da^ xFg%` 7ˤ4[um&G"H l3pWr/1,o U @1P8ɡn]}IyaX,F72P˄ JCƜxCYFA\g' ?R%$ .Ż*OT-˔ILyEmuLoEB뾔 Ꮦ8~%W~#=C(/up L9K3U|E~lVH&#.;d"=PNO,Ih^kfk\wÏ.=SUI ^71^B>F JA]I >_Hj=dz7NGF7}ޘwn6H%cVek<.srMŸ/Kir ~1n'm\i 6 {|pӄ:ͺpVm,Jʳ:/s]Td>-=^5^U7 ^"I~&Bz[_B@o@q̪p ۚ$ʡ.PIV$Er#ӕp?_Nlyp@KD_и?ģ:o7E0JiZIx:]ZV,{#֧Q"|^c?7WROk)2>[O&_wdJ? cD-㪓"|+ :sl>Y~&pi6mrIm7?Mwtd|cW]Pe;[̠a#U 0]:u%(l~j9*w8iU@7$1Jԩ*7С?>2P;+bd-ӜSI\T"kH.~Hحύ !Ϙ 7$5[D*c:3sUXEɪUZ sLU.sG]~KIaL+i3z${odD.LJٙ 7?%ᓽпy@Sa8$<+v3 /yb>8QH"gПi=0 bCzsNi,jۈ؎ST3Є0-ɿgiG;4|@-!ua!cx&NB*XcS)y#7xDU b&sѦDP@ p4T OD ~ _ypKVrَD7#/pVFSҷL!7@{xxShab<&>%-YpoKH1JP"ɇ\d[7Ě줠⠙p1wwU,]QD 494y+IR'h  `yܺ7Nd~۫BD4tT1mNn- v9kⲿC~sGꖧD'<z9mƉW-.VuH %#3$lUbϭ?F:cO Ω'ذp^ZK !;f 9_S+A'uvpunt Fڇ~{{6WeԳQg?hs(H!$;Gۢ:ڿ0>ӄuFe?7;Viӥٳ,~Mg1*p|y`eŤ*+L>iU{UL}OP9"n-SzGF86(+)ytg#:ҾC$CI;!Ieö!O[aOsB?w8RK ʮvԻćONq )JxKd1'\0 An13o $ -8;B<2 +/Bzl}edh'Pk~/ƹF0X; eoq~KAuKx1$φ{VEkBHϊ݄wwDmC90$^eC"b-x'#$-[8!`䛺`&V5yҙ(QvtC UM|ym%# G>/4EЇÂee#Z-٫](av)RY'p,給"M|NF(WH\("\'T4 XpUǁHao%`pţpPl~O]{$w23C9Aso0$;1lDepL@ !AÎPͭCaMU>w c`SUrP6[C&bvOzep`BIOxS%B3'k $p?(AsxP/5ƼJڴY#ޝ2]`V"בMIt|`ac6kI&>C3XS2WIhn%w7HW~ {1R%j#'Ǒ|5Hm/v @z .C3Kt?Q&]m>V2I&P4Hzw ~g_WE'CCzsZ_z Nz@&@¹y`C1J*JXO{pGUE:՗:S`^0mpZKJz{ |=w& x$;YWA#O \f1X )rD$ 2ZK|73!S–@" U(@Iz۪ S2GZ@F)˫M \c?24FN eL̛"dA|7ژHe bG-$ 3-~|ya+ފfH5j:iI] Fޞ͟ +N| .b3zƃך2@6[3L# t w?~&+rxeԏiXH!^4i-xQBJk>~f^ʲ]Pnq"t=>wcJXKQ3zuu_JϓWg"^4_s3C=/O^-wҁ )`*/p6>u>zvނ!%KQ8G*)J`.8α24ӎQ8^ȭr"JLM~i[@9i $'*b?bXw*qNR` 0l_d 2=$߀z ;&+z7j3Trf9s$3Ր[U"(*)~\O=`^Uc &n$d4!bu$TV4xevkg{!ɟ;(L<:EȦR7S7YNQ̶f\Z5l,SZhF񘫚>:jP俒"7-K!h`t'S?NJ" ) 0TF(v4`+8+ZBb;DʀK0Ӷ/ΕDbשT𪶡P!XqGU0hV!?YomBAHɋD!۠)XJ"Cjч|:&|jjN1EI2pyPs6>or~x ۭ1^[kђl0 -]f&g-{JL @J=2֬u%m+} <24pb84lz9rZٕN93rFtQCOfD_ 0t _!1GBu oNJ U,IO V1߱3JKr[j]*ҫ$OQNѻP 7MKTGU-zgi&Og*7/e S&֠fvL]Ar 0Hh5|ʾGKdO1™s04{kN/%eI{ v=ͭ 4eE3ț Yiv7U{;B6]>2my$7:sXwM}^aJ4V~Z7mN.<4m{883) q=:x U.5Ovȋ;> iI]'=yg^om;(“@"`aB6ě䙯tC=zqy>^W+кc`q&NeI=_E6@#'_q۟d8/NkwN{i4ǹuA^eWG^{2%|4NlM94LG^~w A(d OoM[9*"WW<m+,ln@ `931_ ӠJ}W ÁMR]}4 QMmh N# oј"e͹EH d]Wo.=khňpըݶ??#\-Og'ԫ;Fm- فI/RL̖zV2ڧ~OBT˵n;x}%{JBr>~{} GbY|"wfPDiǕWǬ?߹B˪uR0XoxsDUS2RߴHD?/m_r#eGV_5q䨩x͗#xEjcuΙirt{KVgC{f$Fv.sق%}0{jP8uJf/| 4IW (.G< G;ֺ8yXvh*{n+sݚ&RQ 8ěP[D]+y]\őO&z3mXUQٱ4#ZD5YvQ_IoV, *CWBl[(~֦c)(L"`Deo-JTC>p!X\.2^RpPVòo'S27o~kY OM63|L**{R_/8 O>8Mk.yL%e%%5`Ǻ/_[bXHC;ĤG\?Դ)Dzgh'or0$h$Tp%fFa_/ J_e:M~ 1=6_d~ek !yZh۲,ڐtyݐ6L@#50W ͖sĻHV M8k'lF yDf'hs]3iKskI9%o!8m^W>Qxuz37{.bLRԝPOV;(~5ROYq"3g|ϔV7c.,/oQ`J+Qh3BY{k{{+!5vZ>351IY_em+vu92~sD*`ݵ(> _ UZo57>NFB"#4!o2e0EUymSѫCZ/5n gx~*X|.G |c*#Ōfbᜟr8!T-۱K\}Kf=E O.g)+3m[wcⴈwV'ӏ1;ԭο3(zޱCVL= Gc;N)ǟ)].zWKֽ8oJܦTP?V̱ﯦpUVl +݂e)%ʅV3}4 k;pٷ*k?9  $Nv,`vyyP%b'6iЮ|u~H~~k-ߞ= _][8lCBLdatk"SVq:?oؑyU~LQ tɇ'WiW1JRJA Ň)ZPOw70M &{mخ\67o-eoi  k|+}|ԞtnA>wnTA볨5BxuUD6g6+KW>=NH ay^<0eN3T(V^LYchgY8gv%U([|J;u K>֒j;8s޵O.d&~ }Ru/7jhf[I9 ;؂~./| (la0h7 C\.L4 .aQHCQU&|Fx ^5^c!S:.5_}h;ir/h.3E,D b{өr<4A4$M JTfmMeMV2u'8 T@)TH6Wvʎ!6&;>tIan FB8oYCuf)*,r\落-gZU??7Z8>8C'J-ϿPm ڄO8StCB̶. ׹D~jLP|4oJނΟN&1fI{V0|+R4FBUv^D&/ųG2 kӻu*5lIAN8ǘ Y%MƁ\AUF) N4aN{#ӫ>b d/_s0XaCT]+i^wW˘ڌn'Ps:0#.I nGBY$8 1?oyx6P~3\۪{9_0F,s?}iP/WfiV>3O.ԧe I?C6=)d Y{xi,-h(+ĚCnwK˪ׁ *y:YJ+Sd 7)1Cȫ(OיtȢ@S"tO)TВcMYmvxc^ ѩx>I^lVW=OK\ >O0@ jTńlda\%#0m8_ht{BtNK r7;ث4ŋ@HNm7<+ܼ_5<,գ8Dݣ@V G]L}¶IB|;tT۶ɕn hNaU+Oۮ'] wd]*M:qT'+_2tdE!LB'{/SU%9d6  ˊCU L_tJ!|)j~]?u)@@Ǜ5(`uܐ6t_ݝoR@rw;bTLv<tX24^E0{aѾڇ0 UIm)lCe,'*ٝ5R-$ߛvleuyVC fcXq5~ X|/#i)) _Hy4_MТ ght޲ttZM#"HP=Eߨ8sGIq0Y0^ p)n#Q# K<jM#'l3I"4Ngm-7&;mb 9^xh ;R` `!(_yy+Gi֞s 1G}0ҷȋls!4 j:g u$wo?7T1 n?ԥɄ$EϾ3A?bI{]]~?OC3 jxgE ]ɓ<\XTt;6Aګ_|-ķ$-*Bt=U}o;ۊiB'28MRH\e?(R8Xl+ڜlUt9m9Glq-6*Ŝjޡ)&KadK~E'9)l^vgtIL0,~,Kcqő(l/LHEO0؃z6F@|7hvh|ݨ 4 MF醣(FG1Ǿ. ٚy0i> t~ay[!|N^)=ԊЍIW_nӸil៧ӹ,㛿m8<Wb9=^JF{y Sal ߎY=^xJt$`}f)|Ǽ&$뵐xd 5 vxgx|Nb޶@%DBC 85Q$rQY_]n$ _l66-+m_W(X:m 2%!aF$ p )e{t{jy!G ,Gi J#d^V|9*۴Sw^Q>LCƷçεNgl9FD.Q0joc^řUcl8bjDL CJ0<ڳ7 LX})xtsFA4{VcVSE;|_L j'Zh%rN@w_ gzLݺFuX?1lÄȁ q S+?Oz1 %gR"SCR=U}xhpmiD<~A91;!r p``dtΞ􍹀xX(lZ<؝ "VƘŒ}㊕؜kTXq )y"='>e h[DY 3pM=h,ZpiW O t[|w1Յl5 6K$BhFD&n+`XBPP>fМ9v)zw%~pD)o&lyw7`:¥١G<DJW6E]T!)՛A c,5ɟAb-0^X`Ŷ3A .Kc)DI&3G,t4a&D,:Pik >|+S]U @Ds[}CR4`c̐a ֛ߙPkr4x!$ĵW l'fe"bL^XȵB4kWhTnqs bos&PA1+ƶO }y%wlv"7-i}$xMpN=|5fG~$Mb3qs20PE[^^y`ě93&YpԷ4:٘ γte I k͒c6[| 溦F>. XU7ր$V3={˃ܣ'AʈVxohC\y3]?-`B͸I1}~Q<˞[l ;V*^D<}bK?]ru^e[}mJRw4 }AYuw=ǩv\Tdʸ>>x1mX_z'\"L{;` w -.w2f UeX_/uUݖW6Nx(rH\EvWsמ(aʼǤ$OVpUkFA%| dV92N:̏ÀF, O\h;ˮ ׶߻ؠ=rjsy g$0j)ϭt 9͸,TRˣux>|MB˝ѥy68ltmf $&IpM0>psPDl p6-͑%nQzZ[H:7 NA4\)􂙕MdAq#'ĥ3#)r=N =ϩN ̢h,ݪZn&꾫i:BEP-y,v$6ಸڇJ٘6J`D _7n+{/,<%z4T>)_eY֤yR2\?}# v+KjS*;Zq*ovpxWYWODC3<K2yY=ƉR:>lGRaPJclbN@{aOǥɹ/-Z _)1U5+=S}=TnU*]ĔxR ;7Yh2Tm\!( ≅wܨV{ p8qg8=уg?7|}hB3&rt4şBԎE3鵋Ը#x<}~ i*nː+NK< \nT5k458NY4S,zL ;i`9%_%%*4)Bqء#w%> 6U[.nLBٞ_oѐvP̺h310gr7󓨰 a*P pOptփ&H4iOʉBkռ.LNoܝrL}kϸT!<ٍ>,A/qih|273 Ln~JAU~ѭO0 ,rlNMcxXCT]、^ͳfˡnY@iVPT K5Yq?o'- 086m"0*/Ңtq%H*rKޤ`~;^1$KGr%F0xLdĊII k}"h<Tb'X$Up rH< nP rf.޹VcQUX\Բ*K ;bqV~Z#s~=G16\KZ /bdbF\};i"gp/Pz{Mr|톊7TbPDwmӰtpJJD>SI幅_+N0T<ʆ0=VajC=\[ 54: ӂ^MyӾhbSC~ymAugAAgTŖy>.LǠs4 .0kOM{Q?~_!)ǞD62P|QK#o /ҵ_PgK67m[;0F|I_ID p6,j-sp;5#Pg( o=ņGpЬ/H~U9_ <"lmms-1.1.3/data/projects/Demos/000077500000000000000000000000001247673406200163105ustar00rootroot00000000000000lmms-1.1.3/data/projects/Demos/AngryLlama-NewFangled.mmpz000066400000000000000000000264301247673406200232610ustar00rootroot00000000000000BxےF`+3c6UUcKom[ؘDfrIf̺hmaM?I;Q*BRi6mb\=q/oogz.__o/zz[O'w֗!\bt~6jdW_}Osg]l_=M]I^s5n~[/΢j]/_/f͵5\w wMsųkz9|uyL',зͩݳ$ޜv}=iu󧴹jrk^([ds.=vﮨZrG&x,oz|n\ݍ監nTId쟲w]ہx5WáhYvpnrsiUUE3V./O:{h|{}7~l2^ej/ۈJ^}+,nM~()9KnךFwz9^7,ԗoG|7]LW_7ϻޜm̛?uLvtc fퟛ؍.scܡ7yݓ'4?6W/7dq6؜v_zk6|RǍȧ`_wtsKKϵӃ{ d^w7'=}d~dN'ӻrMwf/Y=j,_^׳tn;ym,ӠDw۝|s޹`c?sLzԷ߼%,ꫫXmM, p z9ݪ؝aY5_ҫz~ت^_%r}{Ҟ{:KV4UqӸ,;yr4/ty&. 3s3-b e1}yr~mzrNNP< :dp ()$\qVы.mi؏mexv_oisʲ<4Ͻ]l~&/lsחW> Xͦlg*n#o,(,=`7_-9՛jq#4;$~TCy8d2] *):oYY l6ǽ8߼x> ;4;s|xqӴGZ~\~\|4ߗ{6X%C=wI%.ےG'UCO 8>4Q?wAC-W? `;`K4Nm`{w,;T(I,:r[{׻zj~ z_TD`3'w%C,߽7P= @=@b4RO#u:liF#4|H=M3F1ROş<!#4A|iǞsl|:cywlAckwl7xxGn.v.ц=S?tz=o7vzzf^@_2A=8_N7^ֳz3y;]Geyt3MM=߻h#7?ӇxE#OcaLMHUdռUt,(rcmI̍ r|gcJz*z'7 \w$Gp:z!t9>E"+)StF;UUTiáNeb!)C֊^\V CvgNCvgn$Cv+vk`ɎQBNDs:׉u"jZ'9u";Yf',P*P m8TӊUOm1T#lPJPS#TlábZPSQjvکEv[n%v}JT:m*vNjv ;]b2*쬓+TL]uBD*v&Pks| cTL;+C*0w+ ;Q-:C-SPL8Tsá%*qJT\DWDe\WASs/ +o/;qJ9J>+HAx>+C}Q߳n,$]#M@@$p|87 28Wy3|% ITTu™R8N8Y':d]'t uru:] Q I;K9k' rN9pM9q5ԝ9w''u\g7 E2N˫]8//%擌3(9UQrNu^'Tނ:sTzIrTDaγo<*Z ؂98xNIY81 qpy816#yX֌X :/k`$Zgr<.L'b@jW\ iF+iU\KҨFLW4jriĄ1Wkj$'(E5qUM7u5q]`\/'*z**b̥9hn'D T\;Մ)YuނD *TP\Bg8yá+EtX1)YkcXcS. ^A TrEXc7ō 2::riY jo@V{)9;ñ+Zk~΂d7`nL>riaZHJr8$ ׅ Tc0q]cO;ta]T8cǙ @*qJ|mogǩ5>=̈TL'U8b3~681`318~Ǚp |Ssa5>DX4t"ZLi j~z i|"gr(X$'5>NSPXP5G5>ΤǙ%V8̈́bOCT-VA?C[`> i LԊ sA7`sZayLю,xC90U*t3a&WrspzN>G`+7FXbTa h-cWuXrVC0i'ScWU\9VS Xc>o(rQŚ-<Քo#OT(]`-,`!bv.~ NPcH 쐐AZ5c*cc_=j?C}`5":fo/ LhIǼoۻ;Vvݯƫ_O^4_U7ķ=HlZE/aZۯ@0aaSq{b#rδqS@.uTVaN.XW, Xʅɣta(#lW4FYr( 0 TKQ`( ݥb 0\7eEr, X, c"P@yP9 G(XPpY4 c.+pOW1B*FIV]9b\{a AR Ӡ*E9(ƍrs) BCQ'd;,GY9p( fp(J0b( ݉ GP 먒$h!^U pD1 22!7` P뤘c ,P> f%b8Q&ҸKXeb8>CXbA9 p(mpt8G(WL*P&̫X#q2Ffgcqݣlc0w,6r8a4Q&C(*a<Q&DraP^10םFfm LYbW h8r!P&f-/Mcpn0,lQ1R 06$$Hs[$b9r[.PP&e#=EbAP&f -,H_xp crV9r[b8YP$C0n(B9P$fB{ ł(2:RGp勜`ln0zӥY'RMF]`^nanQw;`]Q0.b]VѻV3b]%m0ꖺhϺfg+5 )ݕ*l7l0讌13CM*B,,ۅv)v#BF\Y.`sV Ѵ3{aFDPstXA( w@2keJ WeJ]x%l*@Tto'3ȳݬbVm@ H2ITQ[%ˡ$q\X^`r( á4CiH2ˡ8 ]arܧ.JC0=W e Ƣ0P)Ƃ,= &NL)&J)&NIXb%!rr( r( Å}-= 4 Jr;f Ű`,X I;1 $nP = &,P k= &,0X`aRŰ`aR~!ƚ/l܈Pl/`A7_h< Bn/44},:l;f2`AjqJBp( 86\ +7`lá0 &  bŒO \0,q. qmOa04pugk<٦Rm@[+96~ݗ1=5b85b&Ù&7O}n[ @J}=bA> Dཷ !xc(B1Sbj\W\b8XUáL 28s,X aA@}GtS#F$Q#FK9]aHԉX R11X?[ԊѫܢV g7k9@` ݨKHXBb9igf^uc8+uc9} ưuc9}3+ߔˡ@ &sa6ހ>=%bAQ&( 5b:1 { Z. .ZDž.slz A*@PU(?Z!C"y)}.xQgG8mVHSkG8lN:;kpOZ;l5uv T#U>?u=|5]^–zc9\pv01}ʔS.='}ϖٕ91Avy$Q&DAb)>Sd=0T28If@1 Ж n6gGZ}(끬- \Yĝ}CnlH *BmCAK`MA#[ǡC`kAy"u 0kpNprN_90fLRPCi"P98lP8o8>/'y|á< 1R 0C9N.LK} _pȫh7=Y߇J:FɌB#C`64UC6mc;$d”eSCZ)C&`@* xYse{+g8'cȭv\wcchƅ`:&`#R(NrQ5OP[L\c(1u* %DB[Wcy@*.qIBo(m|Q^&V\+qQBb@&*CW+< tX!PKe q*V(`{,j yTPǸjC5z B8jD5 AB!V; Yʟg8= D q,uV(xE\PR ^&XT~rBS"s% W%`q+C>e{*C kbʐ` \Bj B]?/<񇥋ǓlQˆB/Cc< )h-E #%3Ki3gɻ/?mA1kT{ҎLJS)73* ;J {#4'0k({R'㑗@Gx A-F A|*O)|4҉RFDhH1 eB >VRaJ2X)+c%E1 JJLŒ SԪL堜 rʄe`e12rӽQRƄPF$!HBJ" EѶHBJRg vR )61?Ph;݆WF)΂"*rgD*!-O@;l|\ĵ"n{ vUܺ&wB֦Ǡ5969l"F)m4!qO6acS8ZC V|$5h@k;KZC֊$*E„gvsT1^5i=xqU_]5۾ Oڃo2Qkb|I=_47,X_.&ۗQ;noq6۫Eo-Hs+[r1_/U#:Nڪ&Ξw;+Gޝl;罇Qrjtbj|S'kt;W('T/3؞E{qQ5W|Wc57wy}sZ<5ynPF jA>7s^}kܠy͟%^ jK%^ jK%ڿkA_ɠ/ڿdPx_2K/^jRKx!/ڿtPz_:K/^jRKڿkA_٠/ڿlPy_6lϟe^ j2eڿkA_٠/ڿ|P{_>˽/^jrˇO{ jrڿkA_ڿbPWx_1+^W j +h6%E~-˿/_~%b}vV(L,6j(+6t<_Pm?Z{G߶ϯUd^Hhw[.ڢb] d mTz[Ii.*FTu}~"⏟GgOG~C4>?Ogz}7oI./_~f};z9\?'`h|~<`kܬ볨2Y5T _V͉9M'mNItY>o.7G>8^b.,jj|;^LoϦYџW%wݿl^'Yw@{Ou;}>ܝ\vΟw~rnJY}$6?,7'/gWOIV>iݾg5k~P^TITETghFלy}wӃG,Ezl|;IϞ{3]Eb&"Zߌyot~cNmik' 3iָ4.6T'Omԏ/h|]̣es4nN;]Gzy8VUF-_jfk ?uٝu͇avK]y]\Web~~֞q2?]o?z=ujlmms-1.1.3/data/projects/Demos/Ashore.mmpz000066400000000000000000001171261247673406200204460ustar00rootroot00000000000000 x}[s8 'bv!S"uQ׆۩rmeΚ~a$$"$KHxe%Ӓn3{q ۅyp~zmLP?yiճ]wߢv>(a{yY.zµ/-@{L(at۩gۄe`a*XΰtOL19ma}T9f[jX'Ë.a^O[`l.sp' ]g J ˃-K?z6,s` X^oZ~+U<1BR~MX)ciYk*%LIc۠w\{Tid:jQ6M ?\Sh: M iasB~.u_tSoz} 8Ho?7+HۢTWS{+S }Sf$q}uu{x ߫dp6p>YV9@Fh&s}ˇv  űd8 sqE;WGW9( Sz e Y23,8EL#kNhl^K;hq{)-9p~C\'QS wk 4@-go)ЀL*~D&^"q~ɦ;|yP# $s{𛞍&+(Aײ r+b+i>H"`P`A7j2ELy_UP*=ƅׂ&S,P(piJ增h[1 L[3HD\(?-YmЕ..4JG6DFkO \~]]_)W_oɉ@)gy "D dAՉ;{ %u=w0xGA%d` F:H4 GOɅx4N O#htT6\lUs]:lrz&,iK(mUgg[ ǐ`i8_$,/vNg!3 r 4aRֆRGWtmI𖓀$yFRi HRDh,jRiUT%!(&`6{/F>kZrwzqʲk[/VwwWTk;>wLĺspMڔ̒wLFyʋJm€no/op.ZMڠh=`QoT,@i)&1{=ܓi< w~٧V-v 'Њ*kꯘdPP xx#hxL,~_ެJB @_!LA`=C°Hd9 BW5((cIq؎t&ռd0ӰwyX7KE0Z3#,-ϗK~ş OP{>L团 $TDe)1 !&7<$4f[DIu}pZbXݠAQVA! (??"ޖ=>/Sߞ'=Þ` LiLȑ[(,gx|[s,p MvGe >sn#8RB`lhy$o?h?6TFTi6Kt8Ui%l>b gl۬ gp fRX>[4:/HN:PPm.8<38>38=38?1Ӑ<M#AHlhlbbDׯ˫"1gĸE,QJ(8۝!T,yrBuAP %0)wTw!0ǫ4ͨmav 4sS`8!~{a*.8O}mmGr>?t<Ug6ǀsSuS-%N>@ou lTH"ug:D3C;i ,}/ oU:vL(1<6"#}4xrG)a!P"VV^hH 8VbH:s # DZBpHUޟVr <z̪_}"U>t.j"@p6ƀ ߈NO'`i't)a΍ ǨOLYt/UUf0Ѩ"8 Cqq*`W]Uz&TOX&f FIWl801HL-0RPY ƫ0'̾̾}SO81ČkgH81Čkk SY81Čkͪ݁rbʉ)ڔ)'\S.sa\2[fbLl-3eΖY&sIZHh!ZHhhh4ZHh!ZHhh<B -$BB -ħAƅTIe9 Ӝaf _Q&~Aw꫱3:f < HKpavÊ'+2+XdNwF팎z;WO P_ m,d Xt<=zE"An he_/?lX@ѺPu?Sh:::ƫi7~ -,./5{_?{;8})ԓn~ӳ|T O9tQCdzbG8>\>%H4$6j.E* Y}yF@lj WQ,mPEr.r! RHlXmG:\@ui•r.W92-.Jh!naeƈg d`rN)SX!;S[`w aѻoCw!Cu}P k^5+K-0?Rƣx[-R?uFt\0ǝst&4^ǯgA:v8[m!46B= m%ԻR);]p >p>p'yk_k ~-\vǐ+|·/|· ·P˫%t0ܸ·ψ5Dۯr:$Ehܗy' xXς,Xς,XN\wBuOLR*FէHץҬEzYcM#ĻǚFw5k=ֳd=?K׭ܧ}Q:O(~SAJ֐,%_.K|T\ w@"\u)tA46[k>T.;I 5&X$iKi}i+eƃVI:`/,VIҘRӛOLBha&: !b^ms HՔ@ǚ}>?gUxuhU;!'mIڍ2Fi)LЫB*7O2{P8$ ]W77e!_<+/[L XZg+ "+2K4OFgSt/s0_;xz]*) i%+jc0g_[iS({>/J \]v<=iW1c)kO^o 'Ӏ^.pџG梌+QtC>?3`Zw@sP>>+_EVXLRkѧE>z5b۲=b-Ů߶XoŢx!n[,Wm(^Ţ]xk4!=KZ YJЇ[5p*)ϛUsQ,~_;K.ʹs)ֵǥ,ǥ|ˡ=.; q)?hK6A{\Zu]-쥈mɥ㪊KWeui3i]´.%%%%~r.LR.´s5LD0dN.}%۠%[֢’-%y%q%i%azrY*,R.’s,LDddN.}ߓXVa8q:c)a8ÑHKWD2vZ&aA(:ຼ^QŖfSӅ&Su]03JPioRoeևo2M!ZL}*[҈*[h}ʧ%O%4'|YpxO꩸t_oiO$v_֨&\kYtx$@Sg{]сe Klǿ lG;A7 _tK4՝s,mgA:>g8fCH2* ab3*okzXBG,3-HNH;h`Ea|+󋶵]s?_.OǓ|(كySu)ީ6'F}Tѷ 6w$c3t]3C 9i $}/zHoU:vX(1<9"#}4xrG)a!WkX= @\ТJKQ?s p`Cl gf O'0̚-`>iqý, G w46Tn!l=-K%9gUޟ 2?2g4<Xz׼'CO{v EmUDSI40wʪP*q0m=NU+U2a.3ٳ؇.ff>v1\&ch\ SKR˘}T|TYT2Cƻ Ud]P˄]Ḱ}J\صZofjOʔ]adݔ]aصˌ]Ḱk5vk5 9VWsvusvpV!pVcîذl5Įpl$v݆[K 3Jldvc#7,E òXa u&#1 !òaWs86#v=c3bWtX6ˆ]، u]a"(C-pJH40KT:*AYCNj>J*ӻ_rTCXgt HU ZJ$ϵ&F/\vhOwn '\t>2x|퀟G)4yQӴ?y9@c(rgXÁ78HۢTWS{+S }S&&GLfy[X.Rvyy|\]| |r٩ _zwj)vhZQ}3pFB̒fEfPDUmC>eW.D C|cP$+Xv'i[R㹸&bX{${E?>fqA5{`/3{Coz6. aA)/jLO wˁz% i?6,t2;X%YP!5۰a~x GTfH2̍9KR7@Ă>ktP*p^焋Ŕg(JYѶ,&*6<@ej0 ^DiǼbSԃ7ݷш&ب͘['4vFY..:FNq?H"cF41L[UoǷ=g;r1/_CfV7zlJ;2z=GHL ޱABzTpdө(bjj]LTgWytIRD6e0 T7Z4gqyKyw GlF&WTdF>?(`%EX:E$ 4"#y%WHW!$hMS $" Tϯ+M8RL š)AX4$gMl!GLvD:qKʈ,Ya1"ݨ`#y$Z?v̨ JB%h S0ˠݤlUsM9<|z.PIFUmS7Ch냥! zHH4' TM4ƣi.@+j: zZֶbfjHݪR7i4"`k[ u<U 5{kJ.f?Zn阄)tYUH "/HQ8P5SPY=Yr n>#)Lb&l2T˽Tʗ5H-gsE=[ب0WljONU7sgj=NTkwslGYW5DrcWxYWwǛP8=7OY/VwwW *1EuqZ.#8i-S|-ctǰg,!F_}_]d%^`G%0JYP/ip Dy(| V.$ɰ}hXM$f 5MQhPו=RA* (MvK X˧Q䬭*\лiINo0:W7 ' "1C;C5U,IuSt>nN5R|<|mQ+$P:XL#;JbI.<1L4JEZk k!_.Ɠ_N|x?@nEtAN p-rHhcˆ*(0kq_j[+'}b(Fa>rB=a >*wH`E"ppNޓZFwk 1C CZc8kc"*'9H [s@aZ͖jD'hb`JîX%zpy&i0-9p\jI}7)_BUɖږ} x]Cg )f,!CJ>UBd䎙e!W#\ˑXs%{A zA2y+y/V$ZEknZZڅɄte2IJ_L)ǵPY$^˓ l!nP&Ր2etrr2oR:L9[@ǘoTUSc4n:=).i\ثqT[xw aѻoCw!?u}P k^Ю54$[v pX1)OsyV#sOdY*>K ww2%\T䲔Yug)|gI%||| pZ pZb2'$~[8-9 eyU:崜NP8-yiI0pZ %pZReiw Y %#;ᳬ%|gId&|gY峜+|gIWN,o>3YR,ϒY汄ϒP>K>KjL>K.>g)|yϒ*)|@ZVa(Ur.Ӓ9yy1ײMn|8p-cn^dT/KbaTrP?^M3s;G¹/¹OIG\Zլs?i>}}g ~)}<»OyM})ҸXaT>eU鍽tUze/ U흽Hjp^aWpGloۣ{Ix h {DI|}eDgN6HCn1#}<,'grUP}<{iPel/;: ϛ2?*झ˗i=$^3]9We굝I4L75)K2\;]<*~<, 1yRs3^g9]YM:js5h«E./S>&b#aWSZê pS%ʇ^ s2g'' HU뻇˻G׏4&-54/m-agv~ԈGfXʟ*Ѐ3ʃGb+墠`y XF%?t=?^dVEj,x4C;ז4-L;zӓ1L:>gp3*sʑ=Mxz&т'#<=9ԞӻAO׃i]鰿'Fbu q]Ġշ0j?)R7"\vr-D k<g8\uWOgMLqYgʮ籘d<\hh0ޔ QYɩ-&/2T곹EBF=x6%B'5q3Yg3&+\W3杄b9uLwe p);4^P$w+k-YkZծa{K+R 6UFjVB Wxip`tυʅb tBu vl!mABz㨶دYd!et{_l+pܮ\~Y7X/X/VwwtK2XǯWwd /^oP)VN5PZWɅC{.жR EE)߲=hͩyТ/r>ImG7i#bi<OЦ;ֆs+#C"N P"J(DSu5H|LPi%H$%%nh.<˜wc#E=XJca_YbAIm_I4$I+5DR qr=D1),"޹>"h`ET SE\%aateٜgxX{"A:-eMsiX(=4dw5ucMsrXK4t6Mbis]vz\g_OO<$e'R:xBek2p{c|י]pi?T[v[R1uP.;Iλ%wX Iw.Iڧc$gVI]{3D \9kN]1.@s>3t zʌӫR5*^^6=ЫvIݨ)+hTV"\:kڮb|yeq$P㆔,xOêz89Uu,U$ò3QBMwЫ [$0~usS O۾l0'`jmJ۰( "-좛T:iOR!Wi^kY#J$ogJW ]#$a,("+ a)eA}N` zAjo;+d?v)O^o 'ӀhpPnX(#J96Eݐ FK|ci@ V`1IEF`@?S\mjӳ(^ŢXbQjEB-+X{kbQmF7gI[k4!?KZqR qyKN%rRz&"KX+wJ'1 \s R,jK˷=.q)CmKǻ=.RnK~ySK`Ad${)HayqUrݢ"EOs 7GsIǏuY ӺK|{{Ʌ0KED2]´&9llY KKiiiedKKEXD2]’%9}OcYXĥKKҫK«KK\" G".^a8ɜVRiނ=zW*4.4$'}Ko)MUJ>| z?| .>| i BeKPْFPBP>-xZo/K-~.u_tSq,U5`7,s`4W`".zUf|[6phT*GolJ9餕r2ʙOZҸ Gitψ(D2Eו=.@Bkc]@bEHs]pmT#ٺ6o"h1xE`퀟G)4yQmbiZ[$z;JgCzԃI X\}]^+]~q,oܢ GQBiI_>,"IFdHB;UA]؏A4n8>$D5j:8s&P%>K^FQBhϊe7Qa)0z]c4c^)A~|SPG#`z6cni?eէ{hJ'F\6`#_Y8*Aeм[,ɗLy̶f'hH(iL4׀|r8U0o("!gVlh*,BFJHIѩ 5㯌oq@NPtX3T-}2yYplvuw}|_})9YB kH<0:١`iP/L؛F]^R; ssXMa<;FAM~XX~b}$T01 dV5ה3~ ɭlДBO\R0&kE(WnD:jc6BxWD> WHj m_Uƒ}7̃;q˻LSjyTf~|8$#Jht1~x$)MQw,a]TE4 J4UGq 4nū` xzBHT$i&,"ag1dVd*3a(44SY?i0RB,m蝴$:U7 & !ݱB;藫 =DnNk0Cf$I yP j4 Z 򝙠 Yc2(=o(*D:DSGEi"nǺ..㬋C"G+Ⱥy..˟"k5;I<#Ń}Nf)IHLN(> | TU`aE9 U.߶bMǤ?}e'I$O 6}yv[FIJry-IFp*IdiyR$Y ˆI/_2h0ik@Oo{ե368y2f<) ͓Yhh $|jUJ.ӫO؆=:jWg:?e-ɷ6-gPMwP [$0~usSeAx`*O y/~Q xEAs}X\}v<'u @?`7y2W$l] tn;̶{ѣ;ſ ̂KWqu@T1͝ xcO^o 'Ӏ. uأgPsQrsl (!0G-;HbP;**bZ>.BA*-~&ܮULϢ؞nEb-&o[,nm(vŢmPXFҳ$45ݐ%[8}𸼥ZR )ݦXrlbeP9z.)RlKױ=.rǥ|3=.[q)?,ТoLd/Eh}dN.}w_WU,3*BAY8ps8q`hZu0tIwIwIwI\ Ӻ0\iM$%+Lk"K_a6hɖdtIvIvIvI\ Kd\%K$%+,Y"Kd8U@E\$$$$N.XEx.p$#i/IX//ѓTt᥉&|LGLi-T%[[t[LS*S_ʖ4ZiӢ{@|kuKf֯as@1p{>߄k!K{nXdAhLw+:a7u`h8/3X&@;h;Yz``^|c=$`&6򶶩}+dx<X!O݂ıVǨ(ᄁ~01h[5=__t<ɇ Q=l  n_@NTGgcʵw aɢ(U{n8aI @) kLm ?m|p:H1VQ0+-f1.Cu10I{zT$ߺ4 uGCŌx:13`i jMX}o]|&:? C/Rpxe]uý/SviCxE:^Ol6cyXUG(|ufr`f4P*Iv-1`M,Bbq M}kbC%$̪3%ݖa&*7liȮ0†Cł7ZҨФG7+z=Y+y&=A4k<~ y * IjB`Vy0,*Lb/C*҈iq\&msŨPKee>p1\f̭*p[e.0(3(WQK쫨e.0\fc7%xT2.˸MȺQ˄]Ḱ4v®p^vZ k5']Mpk5v®0\Z `jǜ]0N|DgAUѸ٠Qsn:4v5]JSQӥ4u5]JCL) 2Ҿt)M6Ki*1]JC.nIOxi>3;Jt#:?z َp׵ >|:(}{i`qGo:,6sV1'/ߋw {oνyWSRO5C\i O %üld o>FEmM4>ۛh.7[EȎ7*}\YwJk>Bi݊k٬btB+j LYgCA~k /QoN9TkK/QoIF&p^87Un Fq< *: K; KJqWUL&2`eV:JuW%83+nfp_ܺN}qy~>jz߲#NV&ԅWq9_q; S=WT0?#*r{/ 2t`:9Gm7S0BZFT*TqS>BTʮ+T\o1z_DlT\ղT\@RnT+д{ߗNwʽ1igu\GjJ5_Y_.SI:0)QCB mgJih8SJCR-~S;R͔~nq34{ }ϔP{34 vz_l~9[=El~!6?bn~+*zkq KN8Z~r3fiQq%j~~&ibV8\^2%^2%^2R6/5%e\ #yf uDE쭚p^m pp pp? g'ʯ伐kq*ƷWr]0x.Vt^t\EuL+q|~HoJ8bϣkX zZRFEe<=BD.uEמ`6____ϙ^-~S.U+.U+.U+.U+.U+.U+.U+.U+.u_rvU9{4L>^t-t+.h. : -qVpVrxsgdP\}k1 J:fse5f k6f7SXšͩHš ltof|35Q͆f k67SXš`tϻ{RMS{Ck%{諸»{ÄwO"H3?mO=xσe1|AcG*TuwA"",ǖt{o( BƉS4# ].+Խꄛhv]S_2 s k[b? O1 q}y,R(VJ'>X>+{(Q:89 \a0hxƯmG:4M Ch`GH"[RKE/̳hi#(29rR_g“=jje_٧eb&ٓIDib*V|&j^#m/\i s&oدm-HUu7 .p`qҘ'ӁVj]~K#5,@!ct&S]_}_]4fCغE|A*㖹hRwq(f `u6 OҠ;Sv@-C}b&2!0ɓ0!` Li #џ]t|5z.CCS=Aq0AܒˀAP0{)냥Q(*~g\Z[{HE'v)mX/1%wװF5(5(YGy;Kė*|B_ԗ*}_䗻*J~_䗻*J~_䗻*JaW%U?vU%b쒿%b1v?jo؈]!.v1K~i1fG4KYK-m=0K~96bRKYKr;Ę%Ԓ`qM[̒Ў3KAK;̒Ў=6fvؘYEY1{̒Ў3KA;v,"*؉V?o)UۑV?oJy;~**g-{V?kGGNX%q*g-/Vy?kПi;zh*)ocNY}[XUOZ dvU޷ŋU޷k*****,[,[Qy?먼uT;*yG~Qy?屮wT;*[;AuXGe4G%Q#:J_tU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?ֈuU3mXW%?!ֈuU3mXW%?AֈuU3mXW%?aݶuUwRWJ]=+uȮ3RWJ]=+uخsRWJ]=+uճRWJ]=+uRWJ]=+u3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w 3rW]=+w ܕ3~ղ$뫥O|"ʓm!7>@BCe6"zǃw)JQ-;Z& ӌ.zz۫9J`詬oDpTVuvehN(t)ue}4ϰ-f!FIXxL_")5+e!wю\mmUufѫ/3Pܭ7 w'A #x&wGj0wU6O`m;@ayajVE9E^A{>/*qڣ!462N 8BT L phg3c 2ɯ뫇Ad=.$ф ,B<);2g&G"KjiK~ѧ2%nY*./o{a|{ղ8dwbV*w+Y/>Z O?'LKѨ0:yw;'NxX'LxHU0 0^ 0H + 1ͯH(0Kpp߹Vt=J?r?bޖ%,@0>c ,(z37;ŏߡv zA9H {gs3B#Dny[8Q(T R,*f_(Bbfq=@f86EHٰϟ T K D!4B)Ub C{<BØ3HS&ɄhLid$Ne&$f,|iL{2IsMImkSH"nXBw-Eiqy[J%*U.e9eK+awQ4MEβfK.r.4[rْ-ȷlE9͖\ilE3͖\Ӱ$9;+iɱxnY=,)y[2":QAG5ul KERn0R66CUvV uq[US盛 ծuK[qkFk:ﻃ q1#Qz2U95}>-^W%EUS7'J WMbgxkR@{Yŕc* _M]\9jīW;F6JԳt o-Tj*=J]M=G6J:v6&dđǨW;FAMvUr1aRVS/u[W >ɠbQD0Y[&* WM]\(UzżcԳ>lTj/(uyVu*5u[t(uuQ(u>Z}W+&^HR[~u}5uDR1u:(m.>ӡŕ3ԣŅ:TVS'׺M1uSL-E.S%[M:v3J]Qb] ,NJ]8:ynWE#JUbEQMyLn]5y-I޺\Q"_QE}08q(uqp‘'E; (u7Fpv3JP%xg>:5}q /Ξb1Ud0q*(K&(^xD NrZ28@~*_B%\Qj c u:\?~Ot@\Qx0Έ+[.>MaqG鋧pgXoqPү*Nt*6!5E үA9D=JTMY@8cX"+*]/Ma8%bQ48(~%>/-}+}yl6^~JطXhZ(" tIIhնauUd&fF]WIX+m1;JlڵV)ٖ¸+Q*mY%,Z3(/[۲ȸ`QȒzEcSB/[%l NWM]\󊭳+WSک+ T-_uJVEX⫤.y5uKlňS"-ˋEV૦.FEs*ivm;ţRq65%mNJJ`F+aP+Ufv(iVUVI\h+U*iQZ0c-)iT=̴wEk̗ɖ t9˙ 9e+*pܡ\ O=FKu>+&C|FzaR灣ֺuݧPy{ VkU eJ|e/CA]inRWelp/4yW{.dwJTSEuq^(RW>>): {Uo:>oJc]BzSc5uvdmnGE].Z-ULA])W)UyFGAqIJy/y5کۭy*;N]y5UpUgp׼5N_'Q+G[M]\9J׬V eVmQz"BRFKuŋV5s N]zE"dy N\ C!u^q80rh>rN^7G~8p_9 !pȡFC>r"pa8fC s7r!pAA}80rP9v~8sC!8MůC?~:" \e|".8^~"^IK,cjMYysҝݮ^d \q@:ٿGw.6Kqx2ܱߟ"V'T( vw~.Ccͽ\Ig&M Wa\Qu[k:o$쉵8'M 'A6x.ˏrm5I)/MW{ ]}eK>}>w nB?k͏>~w3ˏW.^^}(J:蓿gK)g#3ߦeIsB:iib7o6藯_?rs7k&I˛}ϯĿnFdvmq^Rmp7aN'?jLbc"Aq62:l0dGbx>f&:՛w )41ᳪ?OmN R6R?!lLNl4fyįd,ij]ど5M=|d{,пOQe֯-Pt9VQg],EY>Yvqor2Pyi99P-6{+I{1_sy* (ٮt*chflVm26}.ip']?~n^2ybteJ چq@[=Ō(o`ݗMiq4ϕD48mc&dR`|<˪g:$C" 8G"Xe* ?c&.Eqi,4`iJL'm`\ ZULVЄzX7:n4Œ8o6!3&93Iٙm3\XaMbm&C^W 5\LqJ㻛˛Wp}GZax_]jv8#98[!ll0$NE:_e~>*;| 07 vqGޞMw7=uM 7ۢ9_~M25/[SMjꗫ_~o o o o OtE~+]DW'"?OtE~+"+"+"G~ߓcxq V?ᑿ,<8G~ox8F~~*[oF?8f .o~C#\'FIOo?'?l4'=6'FI?k/ǰ':Xz:؀}tu9XY nO n?{E|u|{Di?~~pNO8xS,{}_~a/xߗ_X/,{ =)޻⽫){⽧){⽧){⽧){⽧){⽧)? wd:)MA?{Ac~v:BS4~c+ks{sLWG昮ȏ1]]ۛc"?67tE~tmnoѵ9+ks{sLWG昮ȏ1]]ۛc"?67tE~tmnoѵ9+ks{sLWG昮ȏ1]]ۛc"?67tE~tmnoѵ9+ks{sLWG昮ȏ.1]]ۛc"?D7tE~tno2х9+Ku{sLW嘮ȯkkkkŮkɮkͮkѮkծkٮkݮkᮡk审k鮡kkkkkkkk k /ѵZKt%]kx5D^k /ѵZKt%]kx5D^k /ѵZKt%]kx5D^k /ѵZKt%]kx5D^k /ѵZKt%]kx5D^k /ѵZKt%]kx5D^k /ѵZKt%]kx5D^K o. wׯr) P=!iTopG];҂3yfbh4mGdQ$A|[»OLfS\mѧ Ixfifu. /~@-1ǻE$j 6*6*CuadP0 tQ-7uw;UBܕw_]A0kO6q.~ N-ɸS0_EڊYifNE&Ֆ6rU|sXitc`͚YSyT1gUqٯ~?݃ {1.Q3G#AO8 gn,d˿wH:km ,@3-gƟfҦfjScUioӐjMY^Nzcy6D(bN~lIp8$, hf lƅn6a$;ƍRoo~}5Շ˪2~)`w)*>1|F{E҇ !UUA͟@UxWͫ_K1X0"u(Lva8RA{*sd ZZ9v͇ -\iE3\^cOfn\辁;Wͮ辁kl}ܣkdGNo[" LXǿ8F<ځ kfS;& ~10a2s40aV׵  S540abr`¤> Lhj`*d`T0%60aL;>"#z߁0 D@ D0&a @SV1$6a&j0{bE;aljG D@a- D@um "l T D@0!ᒰp`ӿOEׯᒐ5[[l|}onn_^WH7GM|> z=|ç>T𪇏 G/!"Mvkja1fy.\+WǫW\Une$X;"Ial:7-G H%V%*sZht I.as읹q=*1§c8O ]S%|dǂ|ى՝hNdwȜv}ۊlo@N x~"|aX+DkRYFջ޼P\yzax]-?Lc첣PIO*|\ϗ6}*,iZ2-?@f}rt2(P\m&3)?7Qrcߥ~pEIJPv4+(i>@i@ 9TV}%C-d]ƟlXviPZ_Be+33/cu&P/!&-4DX4_vr#:0IX"?z8g8Y. yygcC&pjO}۠,uӿW螌*hwf.äӣneQhOq&z}J).>AN4,QG빥Sm'&~`0tZ z V`' yi/~-}-H. ԆmqǶd;!W`Zz Ԥ$=gQ15x:\ B2hDWQ۲hfmSlw~M}:}N6Wߞ:v+׾+OCW?8~q+_ DXHb.pH .+w9钢αxN&ÇavavavI`Of_{}T~[0UƧ-⒍"^фԚL;׸sV\r3'SO'?mao6rlw5 vtmzK\WGwtd2eYl0l#ic,t]`LyS\^I5ބk܍4-4\?vkI Y|ISS[FvaZpg3F!C<$.]!-js̀mܺζĠd)صB-[0Ѡ_L,5ݭ[ ؎fXҖMf iDF/wi+LܳI|_VaX.u><`yVl-mc(r؍QםwtV }ן$Z=}b]4:ovÝa?v]8xWwuf ȋ aiX&fJrv4~&粔N.+3;~Ew~& a\_Oc#h'LДwCcX%pAGR;Cx@g^3Đ,6!pAK-Y*!&8:S #qh Ob@[E`@[̘@[ŀ@[63@3@ltN[@E\X<v6d bx, 6<@;;N 6Nk. ?Z X=Ӣ.ۀw pw8@3@ŢpwY("cy^1S S ǩ4 kZ"=hzK3`l,d\ sn?׏T\cٱ.؆-ICabҀ^uK4T"b'eAi{tFJYP)&@&E4٘U%' X4,('˂} dUO('֫U,0yrŤ!ŤoJ[|g 3c`Za_MX3AfQ-JÞ 2Ұ/ Ұ-I{+ {)e}ŕqAi3ؕc1A_}YPT^'6~YP2Hg#ɁρpYoÓQ +t5tqJtiu [Pu :e%9tT: U@t:N3ӡdtVLNo=C)LNt.N2Nay#T2m@%.T: \)㴠FTIMiD?gg;Pi JSfd'@o4 WS@NCiMKS T4&kBCҴfṼM߈t1:LRppA .gMcEp:oNFpIhFpɦ#@2)t5$\4{;>~g k7*Qvf*Ҽ/giJeE^|FpG4x6 ^~NFf\]|hEx7zFa،ӟ|gmzs>!/2kѕ:-x[r'=uewf>NrF/xdSN>Z$o>$ %K?3N~i&ct[lp&+֎/;Fq1 ;Vݥ~cHh,wGtZ螎x_g&ftlmms-1.1.3/data/projects/Demos/CapDan-ReggaeTry.mmpz000066400000000000000000000067671247673406200222520ustar00rootroot00000000000000x]r6?Oh;s2IC#ڹi6S>:N!~,76 }H E"H&D"vHYxDqeO;S{\}qaGk8cr|qa|{%oi{p}]4,3L# S.{IL{W͐*3q⌿`?RҼwCCuEx<#{J*ʢG0,\CKe쁧_^;r(0Ct/{PG7q<2mk(gMI[#3sV! l|>x[4')Nho)Wi|o!T7]t"T3ځ|wT}PAQ3RɒLC)`'D2Ty\Mnz%IWr;#j0hI#˞Cd' mB?Y8%ڷ(Qʺw%I'Ns@PO5Sp!S$rJ9K/GD=:t8epFgcbIF~X5 ysVY%=y[_1@ɜ|%:R23" M?v03GM)0Mnʉ|Hok^|o!iyS4?eLmc:nA4PF=q yD^8v1YdY²F;j1[h{iy֒ bڒY1y2 M&$H2|Q&\´AD  K}DZ@f}u(cOGt!*icQJf]_;oF7s.5J̃gJuϏJ.)[7UWz/KwPQ8Z @;R*-V16ԟXsY5e/_&G+Sm_D{SPRgBS+ZN[>VD;F=?{)=Ҍ.zdoA>Y##K&F21Ldbt̉%fSSIWb Wѡ)v@iΨT?pY2!ʇ%*U蔞U|~oc¶z›@3wf}ʔG<2)Ly2^=BNQȪZW{#}>mQh)}Nyypvܸ>jp$& o( ۮU7 uY7uY78ҺAi:H9Eo; 6C>)^ڲu6Y=tOJuuJKuuOKuuQŀlN}2r *⅊{#ZGq8Tf^C/-!46|Fi2V@]5xpa"Q#N;oϯ~]ZL(woAfx!/H>N>a6uìkҌsdM} `Ir ޵psc_[ VQN{k>Dt8Uݷu3 >_g~'S<Ͷ5;M2qmw1L0*3 uPp\ `*;ћʵI&9,`/`W5 ҲOipಢ4S3^[#yv7&a;L5 > PW? ,HȂ,HȂ}mRY^V ~u?$(KouUзj7oebUЯ&+ưUo5VwMSAkS+G?#9zL:zn5\FzEa'2@p`a#/><׊x "~6+b};4_;+cg#9d "I<)U䶊V*e[eg5z=PDUQ W)E$kp+Elµ9a_h'C~+~lwM4*M|ɴQYAVYD9LƶɅhdO2p1?-d|\&'>Dddt?ŤcK`e FQY_Y~O:U613*ᯣ&2}SU7WDmbUG[Dv`Pہ DJEJ?gI?9GkPGkBʯ=*_*|CzM뱏ʷgB&4&iBOcŸ& PLB2 ??( PLB2 ??( PLBOg.t&BOg.t&BOg.t&BOg.t&BOg.t&B`! &B`! &B`! &B`! &B`! &Bd)L&Bd)L&Bd)L&Bd)L&Bd)L&Bb%,&YBb%,&YBbDC8\=w-VG u%5;젞;LauCޙQTTVqB2%x*Ci\f)TAȌ#FJAϷ,r mPtb\|{//n~;o߽{{ z}E~(77 LU7?@oqt(lTIu}Pgx5!۹۹F0ZbkFAjj'ǚhe <,f.F$D1/b;z jW#%:O t"?}{1o 4#_YSyA|Մr k: 8.hz!V.yh.ĩJ7Ǿ8dN.d:W҈莌>Zyw.T4b>ܹ\ xO#bB{>9#SH8_:t2~^ܰD' "-;_/Tɝ®$%"5 d6QksaWXlmms-1.1.3/data/projects/Demos/CapDan-ReggaetonTry.mmpz000066400000000000000000000105321247673406200227540ustar00rootroot00000000000000px]r6?Oh2w2)ɑi$sqIru:-BdIʖ{sosp/;8r鴕(.XX6+OQ@=Q߽x2߿Vk/qWqaY? "`'At6xt޿DKӷ/ʉq) I.HHf. Dc 8MA ]?X~uo"tJȩ$ }Ȟ}~b>[IH]ߕqWA\%plˍn_$ؠ$WNrV$pWқuHp}TOz4Fiu:lMS]6"T=ЅƎ(eG(~ "ϑ^^Cr׏W'Sl_9fҵM SsۍF_8a#;qD2HXO2Լo^G0Rְq>;?Y+7-յs^ʘU1ϱ[G FS| [ԇ'yqL/嶎Atk@r,٫$?[N&ݳi28AY,(6e </Wœ,SI U:ywt*ge "'_[K6"!myN@M9huTK۟ESF| xaa'0f\ (\?\'@F=w7 xM0^^ھXm&vBo4j=<{c&`|HP Lj3mm- !4LtBOW+) @Cc8*(x`թ\>*5vCua,c.U[F6mܭ&Ap ^ln5@K7#sdL#g,YӜo.#kՙK9̪ :sJs!s!pc {nHSGQf}VY>+gej8*%$# N)#hbs7$HaMj9> Ymt̀~pxe8:ƈh9^BN]*F:Z'_8#%Yr >"i{+Pl/=hj1V79[v\sQ-(Qu=j:t)z_zIhC/^]|EqWqWqv"U`WSriqGb~#=thZ>#C ^~DuycXS\fc1vc1vGcW +q}q>mHO=0[iNlw;hhGz7tI{oySwUʾV0| $ŵKNkf귩\X7 fL6Q*s^~jcPG2ښ0r[>)|d;24W 2K>&:ƊKW2⥫aXժI|XYJ܃v`nl8yb'GJӕFEO߼yƢ2ꩪܬmհLfLo#n+dKُ,*S>sg)kv?77 榹t侟Y5A~uva?N&#ؽ|_%n.Cڟ|;{ m2Wf/&CtA'WUKjY\2mphNO[eE14+շE_(0)NÏ3Ea?6Y`ªPfuzn 0"ī<qvp'#؃>5ifE5YQ˃3f}ɲ=CN9TC"?H/8n$5 IR/$UNʓ"e\Ǐ'S>SgJLL)r)DeJͺ Tpj!9PLj˕.P|Di>b׎3|T):*T_2(Gp0U@C m3 0 4߮Z`SMVvc0ڋA3X_!`4^G x* 髀&fԌ{ ^V{{x{x0{V{BWxZ}nybtD0[MR]W(#i䫍nZFv"R(ہHfyKcNn4)}L>)}B>9͠ūP͠B7 ߌ{H.T~3!PȇB7co O>U(DSJ?U(iDӄF?M(iDӄF?M(iDӄF?M(iDӄF?M(iDӄF?M(DӅN?](DӅN?](DӅN?](DӅN?](DӅN?](D3A?C(D3A?C(D3A?C(D3A?C(D3A?C(D3I?S(D3I?S(D3I?S(D3I?S(D3I?S(YDE?K(YDE?K(YD8zV4_>س?(u PberAEUmeW7f Ye1MJpac8.02BYHzފ܅( UŅCLLa ѕm!7_|_\;WOo|͹4O,_|~0NY~@,$<ۓ[$We Eȝ%'N@S/K`;/+عY&` $T@4N~vNU-L﷩*OҋShX+{:J. vDRʎ?LT 7ϋA-g΃(> `yp TR~/=(}\8 .s9 : P?X ANj􊔌_-CmCA $=*eU'ٝWc#(5Pj!ksa/enalmms-1.1.3/data/projects/Demos/DnB.mmpz000066400000000000000000000170271247673406200176670ustar00rootroot00000000000000x]kw8޿0'k"v$qN3g-TDʏ&AR4Y`zf|EBCG[.gw|F^p%^Iza$fe{۫;N.;T Қv@7$B56>R)KaSr1݉v-|\hR Rľd/WQqeNybjtvY)^|5ِDЋ['P*ԘVJ7YM }8>8$F\0Rޛ,i Ѻ$L#Z?)_L`Ʋ&n97J(CQbO^#9Γ_ODbL,km{wCdzο+g6s$7PJ2YJ}ꐼ;M3Aaܝ䅙:>cNݕ%[mBbD__w߄ɍ'nHƁC@J߮NKg£7$m3M~1ʹ"QEy׆ʻʘ^Xt֞D%)DٵI5!cc@$Ԁ46!q쌆 ipٹ4(6smu+E-BT(J}h1jr$Ǧ0XMG͎&ҧ,2l! #١!mLTM{6̐`s͋acYAA5B+( U72c;t]eSNT~%Vyۙ^8?'ƒbh3cm11zqk֮lWin7ɜTю&/hԷ#ve:gٟ<)E`d ἁLJ{2!}ZDYd.F$$+i_:4h%=sf"(.8b< O$dȥVlMudsIm&? O.I|)bK;(ROMQ")E"}!"fjzIx0tz`|I ihIy@&B5JZ׬ZZ*EO[]]Fjtj%u%+HBuc巍ek8mk"2]9ҪXiU8]8k$`bާzٹ@!ZW$HP5ijmtP {+OHQ8F5ތ+ٛq|=fJn )~=*;4X WG*i"vLTWqem<_W ^hO(>!F PXA,+RW 9} *"DZZWeYn4;TOc!{I$^lHOUXuRy߾&l}|ZlfW[.`ĥ2ޟ=A83Ce.0-7p\ KAm?&؝y=kB&lf), weJhJ`Ǒ!:(\KRP"O.DY)2")2")2X)`|`*c|PL 2TBZ2U $ݫ[]15$IԱ/.i%];DZB>aK2}Z)&\8n0?$WBrNP8A+(W9y{%?oo$/ǫ^ ve1lNrT`ݦۗCgkPDKM͵fd;2F%1=nVͷr2É0u`@:8|LPR(3S5M-ްԊekތKG572 )54Tv(Tg_7og qVFBz  ٠{0_vpd$X@4!X@D`@֓4Vv'BH5Cȯ XpvgP\D`@,D`^//̽0bp'`4g+?Sk*CEAYdQł{@6ilD"@$L6bFL rlC@$h5y3hvZAUbm^gf $Ae3(lb͠Lx;pKe L 2)Ȥ %Lf.>0c "PHa P_^ܕaI:WVU. ahYaWlݩct [FۊOugsON@P.AKP_|o 'zӍtk4-]Of;M+,'k;Ķb7wsICI3)VmN,ނ˟0'%I (RBʟP'ʟa'ec04)mwa`P2 P ?)O0pz l;[>D-fr DE$PDE$PDY4몠 q 1**P?HNG_ .#dlA:_;,`KL|oc$|KTLţPQL>؎(i=Uy*(b )(fE;;<9ЊqRauj$ xBf;d;d;ddddddddddbox}Hjc3Ced9r8P^+Rr"=PCA=,(aV2VX >m`m19 9yѯ3͟6 ng397=~E;9_?_[rerv{㹬򙷿3zI3~rm2̓}|JWlA BvƢĤW>QSj,Ƃ j,=*5n>c+ $Xu]um9o;JXPbJNnD*8?]OFp4h?]"OG(i (G!-7:֚Y[,mtfQ tc-u}ǚ>g'{.U湴3?|Lj}vΥBzmCI8GflKKo\*Ǯ93cӜn5oˊc\Ƚ6̡zmÉB6̥RzlKBrR!}vY Y!"6*K^7DeK^{UZxJ!˦>Y0p[N{xK63oC1sF:eXz%wT*O0 |G0ZG0Et}J^X:;<*'XgM 2!=1khl‰QiPG,ѣvwzpT5R] Axv*[ǨeŚ@&P kŚ{&V  V в45h@ kЀVvZ V4X5h@jЀvcՠ&vHN6,\wߒVsWYFW笕3>Cg8}ɜ6!xJo| ًO.pz{)ԧ[e/ \ͧN_"q~-y d)u.ހWXp>6hkݽ lXDDJlJlt*UT渥S-SNjq\$9qn=92ءnjfEPvB[KCYjKTܭ\aOr5G<*v+Ws^(W?N ~pH1dҶ :֌tu3P)XXK/kҧӸ9:qgT)i܋Ϊ^ +5).?WSt#A} %)xN=H&.#Qrs]4{e9*[q󿛥_-w~ nZVطu᜞7Hw.?-;w~qgSoe'K^KKPҥt%بs&R>dGrVxH3SrڝV]T^ŞDlSoʎP$m!E^]6BΎG:JFlqt`2|fR#<6uzeALjY oRBuD\Q `DW=$[Y)hE*(SR)(%*JF% ^IR7J?PwkX~1&*HLީ|_ҽ:wfze8ɑ~C݄}Xrm\PFcG(#SYPR:JG9|e֜^5n)R݋%+\bG*s ޾U1: rq%#b6t]4X}3ZAL0jYd]1>[63;h遶 ڡ /͓Q\n~<2qZ/\./(zx9x7Ds߻Bi#3x[77&6jjRz,>Jls}f(5Syɉ)¾gK)h #gPϚxCY[][L//ʽm/%ڂ '0OfbS0D8Hl7ZP#}D4,R-3qx슅U8IG %7r/+oK5k<Κa7ϪLtS\2K+WpJ.w6~uoّs-@1qV1m|۔!Wo:$5 HqlC7!ѭ6t t&y*#(ܩ=[L4̈́ZLhDS֐mou{VLJ@=ju}V@juVAn,;í?0í?0í?0í?Om*S[ ;>V?Om*S[ V?OkZV?iOkZ@4P? iOZ@tP?OzAtPO{?Oo:[V?h3ZVg??zmT/_''wdnU&Mq0!8¤0Ņ9ZSZԊhmr.=?FSQFlWb_ Dc%0k1"ZG듗/u("lJS֓ZM nSEtEG+.mhlt#wX*e\_)UƫpK~+"`H͂azlmms-1.1.3/data/projects/Demos/EsoXLB-CPU.mmpz000066400000000000000000001006351247673406200207430ustar00rootroot00000000000000wxks8&}FTK7 %RȲf%Է׋t-~Eyͳu=|rk٢ʼH'o"~Φ2_b?N?z,?>|4!,Fl0s~F(O }tWƟ.v&%hx.md02<%zw觴"e)X0{Xn_nGѾ Nߓ0Re=SyA|䔨~Nnkƅhg$+Avq2 Uh~JMNkUĵ0Q C%l!kƝֽM)W;*3mtٖs\cH2U5Oh!nDTS?vB#AUJ4U=hrB+ VY DsZ|V283/0 %pp?3X(y8FCFȃ.YEdZ^~O֨4D"iAG~4 ~?O`8@Y. >S߫ )+N6E+1M-,pZJ)Xioj :7%DZu.f̲?vYvkW(\ny FsүW C6Ip]7ڬp\~C hjĪ+f4GmZ**S2RK͝J6.27 s27 s27 sk27j&'5~=|,4#RKom+fyӫy/ډGhš0ny ":\e!kV~6I,).Kۈ_s+Pg*A5%^oШWzJԫD*oԫU^M zW$4ývO=t/a1:{p9U齧 q0޻+ZKlD#Lt,03#+2"+2"+2">G8C1>ď}*zǞ g^Gpy]gAtmG [vgLr8>CE Tw:ō(qyA>^K._£gb\Gw--O=4àנT{,7_…oɇt8>41#Fͺ.FϺnF= u1e8b臦W41zl1z151e 1yp,\#%)֜vkVt[#%ۚ)_]kVtZ#Ԛ)֬H}$ZEF3:h+H]$ҺbI4I4I;}&˥sc(-5 &c>5lFee%D#MA*]򬖘U򾖘ok#eZj:R.m=R6#ڪ:RF#SűbmU)3VՑrcmU);VՑcmQ3dImH~ȏi ?Vi̎̎̎qٱ*H/7֨HF=G:>ԨH{tFjʡ98Rش#E͊6+:RجH_5+:R׬Hq_#E}͊5gF|pg|iXgG~ "PF2k8  vv#E)Bo^I.FtNt !h+=,k h>kup*5doIƇJc0rKc:hdڀc*b4! \ #1a釶L. &I ulHB[S!]drklh0)H 9HT}ZX YH iH먙*3VL̴L̴Lkgi2ZYmsj#eRTD{agv@#R`ݬHu#mPyL>VܬHs#͊ 7+:R`ܜ8'~8}bODRW[;Jed,#cXFƵFCd\E#ƍj7*:VpܨXqcǍtV.:C4f+X#c"hqfNJ5+lYBfMNJ5+lt(Yӱqk:#? G^`۱8rPƀ21`gPx1`#ŀ͊6+:R جX5*:ֽqMc8ֵq͚/1Zji gvAD=#ᝳ{0$ݴ δЖчLYlW؁BA^ <=6[LXn:M~nw :b)켰 WB炎 +]\'BY\#,ϹZ0"Hv'%*DYa,a ,ax,aL^f1DLaxG-LaCXnrotܛ5fMǺƽYӱnqoW~zO%Ad}ҪʹYnA/X2RMxDrk;\Rz2Dio9$ *?"ke<,8oⅿ~|ŘTR95f"v_Ƃ~?ŊwbͨQHuIGY_*^ Q|9VhX5Ezwx}XuKZ[mR[.5_QYT_zʵLҶ* N9|I:ЁUIOi<%L^ّ+;ru{eGZnHrڎtʴ#m5Hۍ;H+Qٵu͜ѿ޵8),HyGmG ;j;R1uBa:2s0_,G{lV!hQ9X,v>0'S{%r9"e+uw?>Pt1OX߾\/:vH$.l({-MĻm8/r풯 Kpz[ O66FZQK3?|.NJS?`C2N'O{*TW$+7YhoF|-PɃYȔt;Aۂp&N(}̦C{'vUZ|4 P0c&ƀD耱4T|&:$]i{tY; oJõsR2vx@=\pfǕE2깺2Ud(K!)QE82P&/ ǘfx?Fs#3tdio\}A, &FUFFs? dMnd.!Xzdm]`1j-?c9=]4^?C5zœtǐ8N梧{ȑK0Xl3Yh;)~/EP`4iFdS%r 'מP`U#Ti L"59FRh]ץ>BC&,t&+4`@P5BvXdEmgxI]]c\t9\1*睚.;8Ur6ͣA~? 7e}C]¢}MKU`}9ELB*o݃Txߑ3x_y(a]MNSc~񑰀x_U}]&aEࢢ}KU}WXշt ]  MJAᾪȉGX˙GXo1>&Ӌ/DToKKT/U),ޗx&u)*w꟰_ѧAc~SRT/O r-IXY|LkEr2 +l_Jo|~𫪌EKQ<+-T_pqTxߖ ~ΓJ_`oȔ_f-+Ў%~9-ˍ~y/dǾD#L`IodFIv72  +ߐHqL>8f/&=ż@S?XM "aHΦ*vsWɚzabC '04z S{Fdx۠Q/˂$Er| ?b̐s cqCXGA⼧ȼ83r'f8ʳpE2BB"k`3|xZje_n>^q'5[+]&¹GP7y]4x`c!3 ^2U~{\lR[fefSdf7ٯD2Lw0dj_[ ԾL7˾Ծ{Def';1~ 4rDfG1א=,32Rf9̾2/32/32Rٗ}Pٗ}22U@fef_fKv;K_)ݥ2.V8Q4k' Vh(͊ +ȟ.V祷lI?!@<`Sev10dW7G\ fSh6vq˘fgp\/C:PTR#SIdO%;u{*)ةSINJ vTRϓq &O&y':</w_~ k\;\<_bs[Aa,KQ ,pt/DNxutK^*?,dO' X}B;+='X.>0焽K'! %PQ@mx c!ӵX,Y _ܥk "]vYk)9At;yq=YHғerNxzNpzNhzN`X*=YPɶ"=Na z')̋8B #KssBss®.8HDZ]8v sN+Na^}B~Q|ko!5ҊJ%KspCFKk>y a֛4SH AӗH APyM^ lb=|mt_ϑX&lF)#?_5;Y&A|7Yb*\w|{ut re'tAoCd9]$9eFM|_'s4ċ&9f])dY⇪(%Է׋t-~Eyͳu=|r#hPCNFCE M oe< pI!!+;|޶Jd<>9'7}a;祾+j軦CDTZ5\7gTk=v&%hx.B|$lGYAQ}~Jqǻ ^[Qﻂ$̰Us3/(I?V0j}Iei$^e0JY=WE,4F$YETdA`2?ZXdhŅhQQ2d_U^ũ*tul9]euJQZ'4Oh#HP'MUEZ Ԧ+V҂Q<#x.E~!.ps};~;w΍vWtq^^vכLoB򓷍CVe`'ƩAd'`“u=t5Я#|->LìOyn#{!|Τ2މF{&vUZܭ|4 N}ҌQiDdv{6e<fJQlam,wA47r} t;H(qOQi"=ʡ$d嗲{ډOR,\;'.L/o7  7dtQzLEURc pdT O~G2y ?fX8?t4˶1#q,#CxM{[wH_G dM0/PD,4Z7jY'mw'tP#k%F%^g3σ7\{ OCD8^r\9ra%v@"½ZT)E6"*y$c8QZ=N-ʊ*y^[h]%|IضUUwtJMV4 _ {`S}[l}EOJ4RMWu$ېNErީrL_.5w(zӻhf ]JQѾ8MX_ti}W KU ߺ*073$*w ..dJX?t|p_t$.=&0ڗqh_)XQ#hߒqhߕU};]}W}SRP*rr[o| }6 ,޷%*ޗrJT.u)$w꟰_Ac~SRT/ϐ r-IXY|LkmQ2 +l_Io|~𫪌EKQ<)-T_pqTxߖ ~ΓJ_`oȔ_f-+Ў%~9-ˍ~ycʗ@fQɡSҧ܆?IS@&?9d0iL17jCia,G>iS˶ }W1o/n/)VwXFig\}k&^vÉ4z s{FdxܠQ/˂$Er| ?b̐s gr[ &ˏyOayq:N6pNW11>dͫ+F(f'm*ʾb}jVMso?p"H=nh[yd;R". _,zLIaԶ8 ֨` ]?^=*R9/Dt)e5;,$vrcYx?4Az !#,Pa6Bl0߃#] =: t`oo]{`R՜n^rUaݻqqc<{YfJ]F~PVQsٖNHϚ2g_}eϤK^mTo(r%,Har"v%%_oB=TjEu ^Tku ?"5W5Wf岆\i5trYc7Q*D-kPr]\hAk~kaٗfٷWLrŢ|~}G7_UPb*3 n!ϻBfefsp} ef_fef_fef2/3<2/3edf̾쎑wTx2? >}~G/b6_sMozy}޻ j)o,R\p~Rl>?ytOjP??y@yRRj3uΎ9?sTx<,PW/?x"/ z&=)o^c/j(AkMpgӢB'; { VJ=fv8o^.%HBΦ`,7e4P+w1&9ɃO6ަ&;ˏg`bBI˗[@@W a6_}_{EG`)|`O\|[ seR?xp3q{żt9:,( }p7+ߗ/߃]84^j'#fMd!:_J# ^Yu{TaGv8eKb a7ć'*#!{9bJ^5LF)s KKN%;j<TRSI^H:셡SI^9셛SI,ĜL@O`db~ 'E˯\Ap+YΙQ~Bw~0( e)NN8t:Yd3陸ίNxdNxdΜ x y96Ps^&'! %PQ@mx c!ӵX,Y _ܥk "]vYk)9At;yq=YHғerNxzNpzNhzN`X*=YPɶ"=Na z')̋8B #KssBss®.8HDZ]8v sN+Na^}B~Q|ko!5ҊJKspCFKk>y a֛4SH AӗH APyM^ lb=|mt_ϑX&lF)~#_5;Y&A|7Yb*\w|{ut re'tAoCd9]$qeFM|_'s4ċ&9f])dY⇪(%Է׋t-~Eyͳu=|r#hPCNFCE M oe< pI!g_|?ɇ *mQjsߜQE~MMu 0yeI^Ei)=^2DT>EQ{QnGѾ Nߓ0W)2{Ωμ&corJd]Fx,ˏ*e\9ğ " hfmvپ73]G ˷J6.D@Fjo?2SU;*3񭃧̶UZ4-v9 XWl>;M[&Y/LKyPL7층店Gn18A'OA$|O!#Vq?*'~:'7 h߭; 7_/pd~qNX5a@o?<-33/̂Mmģͨ2Ko©@m}\% 6([yOq8ј'Mq?koF|ո}kC~ C gS~zwm_e>[hи/Y{G=CdW} ߳xx`!yz$`C=L(qp&N(}̦CG{&vUZ|4 N0c&a!pPqy*M>Tۮzf=7;TPlam,wA47r}~0wSFuTpwHOzyޠg\3?IpԺ0̿$lfǓEy20OFTTu~cT O~G2y ?fX8?4UtdƱ 5m"}/v0/PD4Z7ʠ~<@! O9c5K ,&V%^g,&=㆞aBM i?Ԗ~h'1~32K|4H$8eG6rWųn>ޒ! %A[GEaG^51W[| m_J΋>$~%݋0ٟ{=w<r.plِ#OeOl˶p+lSciqĆݒ3-=SwZ[6ağ4hL 1g7uMl,u?O,Bb }OjL<'s}~R*OjUJ͓)9?AƼدsvT_Q}z3aB|{o֪GKÖ[;k| QWQJ`" .o]/9]ĩf-:,( SOyDIsfM'Vx7[ˢT6+[C ;hE{Ź-'Q|6x::Cn+!zl3ͦ+fi33s8./C: 詤`'4O%;q*)عSIN&J vTRX:灞8VN&Ƌ"w_)תgbp/G1 9IZAa,KQ ,pt/Nxt>^9,dWjN' sB;+='tBa {9vPG߻O7c<4@E] 4ЎE hsObZd9'?'|?'x?'tqp5(teu0ҵWzGd!JO%9999cdAY'.d;9'蕞l0/?5@:,Y ^"vY)9At;yYE k|K+*y_y \Pi5xo^C`5RC%54RCPv4Ԥtfӯ!8;9X,v~g~ls/aI0Q `NI"}0MXg ]=m_qd]>\:.Eś08\.um ~xwE0׸79I&9f])dY⇪(%Է׋t-~Eyͳu=|r#hPCNFCE M oe< pI!g_|?ɇ *mkQjsߜQE~MMu 0yeI^Ei)=v2DTS{QnGѾ Nߓ0W)2{Ωμ&corJMQK7&H#2X.9U*rf?AE6$$͂-Z&] LtG[r Ѣчe?2SU;*3mtٖs\'U7Nh"=fk'4T DSZ+'pEZ f9V2EqL~̈́6*9d6 6YXfB`o| ; mXWl>M[&YO/&L 4g}gڇ`{96a蠽ڢ}:fH\I]q:kaT*^.NFd$J76~o+򷊝FkFQd]kc5oA?DEHJZ з4ۮwZ_`Qpr~TOZ *_jW}OEEJ˩ZM\2= 2= 2= 2= 2= 'I@uR[gΕI)[ # c'M'woAҪue=#W{ͪZFun-YAV A~N$D]Rz݄jl,iT&E{y ծ146mN6Q&FV { B A@ %SJçPJ'\|J%,J1Kj.oSJ (%wA8 >:? uh` J3){rh^ PQ!G|ގ@AIB!pJfP6N#1لr@4GA9y"BB@W45(%(7j@^|/|:.!w!@(AwPr /1 $`VPQ0B `D %J"( @D@ %J *>T(|PBzJ IBj%'T 2- 費!( d& 6RPP %`Vϛg@C(yT"y3q 'R{{%O)Y'ebC uR&:IP#e㬓΃uR&D`Rz䔉uR&HI(Q'eD5Ry:))L2N:)-L2J ꬓ2N BFeY:) J B!eꬓAIAȠܐܐܐܐܐܐiܐiܐiܐiܐiܐiܐiܐiC:?dC:?daC?daC?daC&?daA\f$ Gh !01W OҶyc@r$[LORd[즔$9'OR$;>IOR㽿ҕ d@%e@%V:PɀRT2ꤔ WP:_tfFTPueAhP9݆kNC.Dm @wg#@עiրI_wuۘZS/[n!U]KwCA[ ^Х).dwQMAU9 *yϐ,Xf2`@MLb5'm˪iDP̆&7BjDԨc T'B8rm&4Ю`9MB s \>5urO')Nn;4 TW'~*!3"Fzzeb]jT咋WL P0}JhAPA.…MD޽IdBTz]MhA͵ C"ESh߭Rll|"ބQuL@"X u +atTQ״çzPTM2Z7lܟE:rUQ:Cn#}bK]7DI.rɝYQU2\KrxK W(4TVM[xzdB7:M1tצ+1n5@8f%N.rF3FreΆzw 0ͥT-(iAW۝ qu2d[ uTeϦR MycgX{5ݡژVgnL]nI Pg(5t5dBhMF%ZiU{bhU Jt()5m|?SI %u)5vL:KM7[kVֆrE]k r:[-}n4դwC]#,&|5 ׎B0x񵡛.7\alD*MؖeZ:Dz1Fl 5=pfltArq`@2zc1 ݒm+ε%k1 ݖmx&!Уbl!tk6*yKl[/9.7,tĝm9d) E12^m:m,1 ݧoϛnϻR>NJ[ >JUITʀJT2U.e@%vBPɀNT2  4-2jPT2j Zu)*PʀJT]t2U $ ]$X &0u* _a ҥ‡ʫ^]ֽDmC4Kcie"g=oWB/JJ;S|S'_(A6<#m ޡ͵=]L/c '!M㓐LŒ%x g(IBc\[Pt= jL'm9aT)١d1-&q_D9($ip $ Aa8a$o0)!IhҁP J @{A(%jB#%F?!F?%F?gHoRH$ n0"(x{gH.3E+m "PHfXqVuVmU^O SԤF'=5IOMzjSouZIOMzjSF驵JOMzjS8S3+rO _+,=5IO E驱/S#!Oyjįzjy{B1ΒMYNO(n,Fe<5=v ۜU#/@%.u%ЖY Aw,݋ ̻e1kn% {lujeoQ.q@xg @( Pd SRb=K*/U栯{l9kq_d%{Ta_R|IgwB섌= {24Oؓ< mK2B/st:"cns˘No&斫#|ru3䖫#C=50>IOMzjSF驵JOMzjS8Ss$=5IOMzjmtSԤ&= {jx\zjS褧&=5IOMzjTtդ&]6:IWMjUH= jsLUP ҷr utYtx{r쩑zw"!J} iBh/.'iJ5^аȅ`>[BCOrPB޷'9t୐SƄ#tʸ}E@)c yPz~〰Ta0a:eLSƄ:e\APzRB/PJeJ C)y_N!V)wҲ%G1H @ a ŔD*4-Uȯ^X%i띄3jCj|uMՀf1u`Vu`+ToU[MhBhʹ=EQKXrz f աcXnJ`GK5VIíB %QJ(r[B % $(r.^ΥPVRru-*0T-:҆;PJ&2Ԣg uR&6IP'eC 5R>DuoQJX BI Q'eD uR&NH]&PIHQ'eBEuRp. Amp) dTmAIAȠ dPR2 B%!AI!CS!CS!CS!CS!CS!CӸ!CӸ!CӸ!CӸ!CӸ!CӸ!CӸ!C!C 2t~!C 2t~! 2 ~0! 2 ~0! 2L~0!!Ƙ\!`Zw-* {8LdUrqLj&dr#krV܃C(`=X\rVM=X^=u_#G&cGQ2fg0 p1pV(Vux/;ա/;8x9(FxDhRG0jǃId ~/eju%r^SAf Ms獞oq8Fε-=rݨRCG /M;*ëEEՌ|jF(%p*ߒR" ^?A7ʒ0zLGYhaΧ!xRA fr8fzq8߇ŋ7I 6x| jwQ%MeE%?+IfO݃QxȻSFQ E{XQ"O_o~._?y 4I?r3-܄Q77[]__ܟ3)7~w(׋i]^|kR [CpTXd6"ЯY7aYImxT0&}N/X.9N05HFAe+ O_gSf_//`d !GRòZD^ x]|Fm%<zKψ !d}ei Oy?wzrlW tx<Fq0B7v[o|e7G E A?W夋ax EuP-!S$nsRrvƔm340hJ b=Z'U=xf J9UR:^.Ӏ)n'!+b]E 'jZ~siM̫_^^߷gۑn`>Q ,_8&]61k6UCT}B)yT\GmadY~V|]B+:=1ۙp龘,ɏ|Z-<4D\W<;O>yw_pEp*q_}wQf"Tw2iC+}=fpkȁ~Lp^DfV~p%~7Qc|,]^v%T*M @lkAq!0紱Ъ,]aêy@:Snthx#kmo x <][P Ҵg.<⟆'jW-_ٴ /,*`-S>Xjje,w|- Fvc4=e]QAUvf +wD!6F8(quզAs;]o/돿v\j_i/PI hyu8}\x?@(܀J 0G2 shSee(LSUH?@@~D5 N]xaɐ-Mcgc 2684E+ؾT*N xr:ysoi2G]DMsv9/ߖ{o\X&hc^e3N$.Gx 3ClKeV.ݖLz%44K [9=B(_)|H,WL9 }Ɖ|cevIdyO؏̋y3u2XnݓCH\|pLo_筟o6rsc{&XYEJ9 .]V6xi =?D6XL8llib֪= Ӝ0]xۅѡ*CJ9!).ʤwW!@{ Q7r xs/K:6pX20A#Cl[AiD|Ȧc3aNYP=-m";*_xԜnf^CJUaڣOqq#QA Im*l*{x 8,%Pɔ[')5haw NkoF@ɻg:c/xx̦Ww~yu]_~ePs@KCF󐑽5\|ryY]EMVnl DďaM4ŋyI0'OK¹Hz`ޯPwY\b~.UNu+x}R3(gar+P<=c#ݥrTmd(&吅~mQt>޲)ȟ#.VK%l ,.`\8ae6eO鷋c`ICm:|cήuvPǬ+w:jǬ+Av:^Ǭ3uJ_:LG%3tJOFw_~}cq,~B>0/Z5rY5yjfN[3+pܚYIfV5[3k!5׎[3kH r(\:r/c%#W}b$t3lLhymibmmcGV]8n7wwʚwʚwڪwߤ'V ~VuuʚuʚuڪuߤjnAssʚsʚsڪs߈ibr.onNtvJsK%%wuc1fi=c {g8oZ oN[h}3I̦_/{8+49X,v~g~b69tQi6 DY`LI"5|0MXJ]>H]~W#GkN oD&,N0M`٥A/%]kduMt>GM(]Ym3z<ݕ%~QI}x(+HWW$<[S'=BIJ&"=MD7q6-|'yC*+?i?ߟuu~ Üđsޕ?5K5fDD{oZ.ڊ]IIgV@MImw<$^=w"*/,`(hEIaeu=Tg^Pn179%~-`tplq RB `%GյwSğQi /HI_neId¹(:F"ƴ!#3Ds堦%_C$gQ0#@ů#K3ST⦺/(TQ޵JY\xc 20mt߽:0e7uK:o-v:q-om˒N[pХ:/Pv:ܵ:\Sl]:moUSN[pM:|6gFe>:!^x;TW&ђ A1LYd6.ן萇jeaj:8\9l 5"6'Ut&:Z9th !ET! AH)M512g:$ @K@F4':1 at$F75- F4& ]9&}`МESJ9CUc *bc%11#IJbb ScXijc0$N@í9qJk1oc"610Ht>1 4J1MCs10P@1L$1]Sb7RЀ&XjA=!`K#Xq+|Ly]%1/OfIb&MJb_,>_,]B ]ڧV\a[3Jt z.0iROƶL ضE=a@۱'ch'8Eu]`WAE\aװUǴ3GLjDkx dVe]nȕ`ffn`fzmm&AT7[͈MHE&ϰ߼VRUfס-mhÀI W9uNQa0"r42fd&442t[rb^rH1BH!o & )&Qc Kf8/\Rcln%a#paY9\j`r6,؈8\r}A؈8\iS! sv ! {jG9\ \A8sU0DxÅi!F<$F7F6\k0` 4W:)hQ#p@ِa a #E0ÅZ6FᲚ?LI 3mea`7&$b``/ߢYQ&*;?k,J{fˬ.,)c73\T>HQEzf!⒃Daũ؅SUqj},(HiPakRXW'2rkG(]=n ;ѡ8!v#0;jȼ&`bd_@le# ylM.M}@g "&^4/Q؞'߰3122 lO b}»~1BlWJlDtugT87!s"ە7*(ue!9tBީ4nSYODLnG,q(Q!h3pfWE cr̡B֓fx)6ڒ4#Jo[shK $EtI3f%llrڒ4V9(%i pP]C̱-I3Rf$A-I3Ff% I3:;ؠ0 +)yf]žV󔎤o$}#IHdG7o%}O1ɢ.:sΨuҠ?OFdO(I^,S{Jvt]0h[ӲF]?UBl`!-Ez 0Ջl3m<u=Q} @XS0Tj Ba-ƞwCa_m@IiP:Z%gXB9iqP:q _Kr;xH;XK+r)p QL˞rԩ%(AIt0y(KZ:&_%:@Y 0ewAYeg?2ZLV(Kyj1YCIꮣeAI8qA9(h9P:PZ91zZV!Je=GϞrHCYϸrH e|Ses\K< }5(Phl@Y>Rk<d5B-(P|uLG@I꾯%CI5v-~%ĩ} R4uE孙PXoaEy+u{o|Ogl^FUXTw&&|Z^YQ% MDlʳd(/*t+9"gήΪDVwpe#Z3⶟:Gt`I뻞|PV~@L \2Ҫ~m=nuiwϡma}w^m{Si̶tsj r5}EǗ\Y9 כFiqmw_8ݩyUį8:U mʲؿ]gmM9[lfc3~[zZQRǩͪx1N +Tı8vxTIÎF|իG߂/a,Q8U/iP)()*1blsݫb=25bd$ʠl#&QejeP9+@ 0wL5 0$BϸF5Dz U" J o|N;X-~q70 _ROxv;fܷi-#͈}6,hәf[YYN9 O*6%<ߵz>wr\K`ѩDoăbG2 dx(Ly~ Ym5K|gmz2E'4?so!){!φ 2M`(k\ w9za&+{,˵z(j=)#(\If+TB.SI.hp8:v5mirSuZ8f<Uq@8(GD}^Gu=fI讟a.=SS|八&-*[&{BPh>.>{,6[;K`D>h{ASim} !uCw&z2f9d J0ԹO ~b 1D"ÂewL»Wa3ӕ$1gQ/yvڥ[a>Φ2#k h-huI*GBa+iMoce-!bb<7pQ b(}G氞-I}>igϦjL'6/sX*)'k{4\,nmhߩ+ҔVO%ZaDDtG4v|#ӬFq!iUݪNU0d;W;߽ۯ?q3A2lɠw[AﴶZAd^A?<(aG@# ?2(ȠG@# ?2(ȠG@# ?:(QGA?:(QGA?:(Q@c  ?6(1ؠ@c  ?6(1ؠ@c ...O(/OeLpv8mNbb+\8v>֎ps4u1 )+@+q\:#E&@Tlޕ?=р{g|4+MS8HTiJiǿٛ79^;ϭSd:Nggj;?^-b}4ڷŇweJ3y<+y1u,nUT}2"+^Yb0J-O!0yovDlFG:&y~m7'Ӫl~o{e-xE%W醿#l]wnWyDqZkѹ`Wq:){\_fז֭$ZyYKyg\&zsNxK.ǎ>mwl}tE K>߁[(pß#kqV RVq7{ڠOR(E-j!'KԳ5O' "Y;1)xM̘co#Oe8NmmQI:쀈P* Q6"}Y=P8͐:|ROS1.{߈#H_Kn1Vb\q~cZt?ż8-i6ɿh{F6;NWjV#߫XYiPFougUe,}Op,YzArZdōpRo,lmms-1.1.3/data/projects/Demos/LICENSES.TXT000066400000000000000000000010741247673406200201200ustar00rootroot00000000000000* CapDan-ReggaetonTry.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=1370 * CapDan-ReggaeTry.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=1369 * EsoXLB-CPU.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=723 * Oglsdl-PpTrip.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=1156 * Skiessi-C64.mmpz - CC (by sa) - http://lmms.io/lsp/index.php?action=show&file=472 * Thomasso-AxeFromThe80s.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=474 lmms-1.1.3/data/projects/Demos/Oglsdl-PpTrip.mmpz000066400000000000000000000614441247673406200216660ustar00rootroot00000000000000`xks۸.} χwNelNi>NvtwS*Z$v(RMRdjH" !:ąp}`a{r N3eobwخu I V,kMBNJk_>AOPwl7ן>\0O-igI/~]:?D?;hXv_-0U?8-(v§%`:?X~* IYOI?mcZo-w޳k@PV4Ӊ^:Q]w6:1MF !JY*3㵪4[ ™Z {Љ8O~>8U`M_`@U=ZL5f J֖]zNM\σUYO2^~[΃dRUPa 'gz T)LΟɕgJLIM+ Ҝ:4~6 l˛QfJR Sk5I ~@Frn; J)#VvԳ{-8Xr>,yT|_p|K8_.N%H满H5ӑRGTn="w1U1ADLJ!1i+ć໣fv|[sy)[mj./Tw ՝BuWpέx ؒf^>Vvد) j(Bʘ=AN,"WrjNټjC.u6rZæmC.30 &N̔)+7r /F! "&gjƈ+|\ė"0 gF^00+ <NPF9˻+ WL:,ʙ.瘍+rfy4e1s0LP\VfV^=¨q);`yTW\;3=*v_=3Q ;ճL@N_=fav&e a?*ڙ\+V ;bұ_+@OT;3-2:vkńcǿV୎Z>>cV ;3#h`?*@0vk2T;QAG HSH[[0syr_`vE cяLoG&vgR?"i(+a;l;35#v_м!v+grCWמB<[V~EMC'$/ȺDKKVC", V'+\t$c$ExS_BX X, %X4Nr`E YX'a<$0,I .<yW>w  bA:3.bHT$b*JX`I_V l L|I,0Hq5,0$PTtYTAY"C'5,0HgZ>t,0 .:Y'8s _|l$`.H( H`A-JNB "ID LE!X@$ H`$B!i`$"IM, X@$ PO $q4 "I4($i -0 Pp$Bs, X(!I, X@$ H`$"ID z@|nU$, X@$ HB!I I,XT( P0MTd& &"ID BB 9S( P@$ H@$"IBR%"ID $I($L)JB\R#!B!IB $  I*{$X($IPH`$B.` P@$`B!HB ɧ \ A($B.H',0 0@$ hHࠐ4 pH$"ID$I!$AALGac@pP e@pP e@pPHr&qϵ5;W"[[܊0>+*"L+'Eӫ 0= 0=azUA3*r"LOQJ0FI'h%E^azt"LBRQI0=ӣaz4"L,(H"LJRE^azAGaz!G#0=ٔ 0zˏ |+,_y)dॢ߇ {6܉t=o7pA}[88 X5hрn"|z:HE;=O?aΙ7%tK e ¶N6Vv伹孝7U\#RōHF~L8B$_}˶e"O}ziB!+S0zubM=sM$\}PwۻOW7է=xL8~ /_/ a ؜IӦ*?>;tpywd> /Xߎg!qTgYDv#P5k䁜x&V.Lӫ׹n{ \xo>b>߃'Dpc䚜W#o8SL+(:.qL䧫w7ufןe '?J|0OhMEҿ~{eyg:@ D=K/c!hn!c;x  9Yh\jCϼS0Ml#0KoaMbs yn[)]dC_ 54hPS}&Q^-`GF Kz7d0<'slO֌c0GUR:N!h1`/2^pYTMu:YG[sns1n|yX󋦇ݝ,jRt~ l0_=Л䄬J l;!Plx"U.[*g=vk/yQ+ m_aj>k@1Y†z9_=\~BiYz@]+tiBFԻ-}!VS.*B{ )ɺ1]S_\5\ܔXz=ʟǠ˲[FfdK53E໓qhv(`SYt˛/o?_`QLcSʣ4^ߴZlV*Ue!t63~Op؀{QWLCCxni]Mjb3__Hmڤ֊'he3~G|gHƱY4ŦtPܰl.ZLkTDir0h*~(o^A~+PZ,=7^c[2X+ǟ0Ov<9uy#+NM졨05xwۗ˛_R&xnP^8N}z+Hzr9Aw{vm*T~yCH йx,qxy@|WD}\"C-uYpyMЩ5OW"CQaz"pu ZFK+Ei3&V̂}j3bt86sR Yv1.yL0V:fTnzѼ Jq P!gC#gl2mi 93`et$+읹$59@!uQ~{b+6_۹ '3ep 4p٨`h+IbZ$©aD\/vBe:UK+u>+ ȅ5k2rӕ?LI meM:`q74LeeFޢlkeZAqm&[O7W^ՒtzDiU ?H5475>E*\Hd9g/Ңߦe)5cǥT[9Ki;.֢YJ$p74ZxcPKYȒwTkVa udm#FbgTx4nFlf ŕN%Gp ^0$ű1UpLŸ&-`ijڑdj|1FN?C7Rcڨ PI+i;hGм˲Im-olyw` 0rڅr7=+|ʯhCt7+_ϕ_HW>2߹g/_Wm|C^_KƗ=bmS>RD)6ý6wfCO֌ؚ֌1И_Y[3{ٚEF%߅[3Tmؚ͐ςؙ;3ڙ;3[R+vf3FؙAU*9e3>Cg80|ϐN'cGޛBްM")›")›")LB oooԦ)$xFN!G wpljNNr w m!;ES;ESQ›RȆq7:H|dF\\@ci;P$o蟅kabq9]@r){Te{f!vq%"]:n "ࡲ~e(?rTji>ɀ q9\Ğ?ezb,JA=EqOy<IK*|=]ʊpfn|& -G-B?FoTV톙̊י(u.|U< 8 K'gT%V'x- ^od1ESƐv)]Yg򂡵*;Krz1*k)"}Mqχ}Gh^CϒK3/v)=&O-ϒ;ͷĮ|mcyB\2Lk!}7@ZM5U0-llG5=YT}ɶ>Kz^d˖dm% sS} rglϒlt2^^۷p ׽pw>{{Fu/\uߺ .Wü^վp ׽pݷuT-4ݎ/0ܲmٺjil4[c<:ʚwe^dsl9':Ld^Sbd/&{1ً(&"\Kc7AyEPWEPk[mɔp /&x1^LbOukmvfjhL`LSt5L13M8w;HK2֔%9n]rCײ<N4bZ}3Yv o-c;fx̆~3<Rw>Ew@v8E6㻟{`] fxV~3<?^Ֆ\3<盢y{]^ہsGx3<"y3<=v9|sǾw^zYANDՋzۋQ|+iUϷQ|#7A^ZREݾ5EGˋ;>"#QNs[qm ^uQ|^sq-4/ہ[GbGoGwGݾ/~b>اb^Ӌ}zO߾;=ΐv$$b^Ӌ}zO/>}NLb/&x1}ku"o["o{"o{"-h|WT]ԽWxE ^'{'{x-gk~e-^q_@},_1~z"VB2(ǡ gAXO)`:Jbq9L]ϑ~:b REXn+J7RNz #'5~@vhK"-o/JPBIb%T^M_S-QNBf&O$a`#c K4?ٷThRHK a f.Sr"hsPl+zӼN!d,o{p GS2Ҁgҙ҆`Pv<- 34%#ii;^wtrҳ T&;j"N+՟J zok8LX(I*`H"%rK͗K˙4AOb9O>0[TdH^N(i*&lVԆìeBQIa, 1tOGO<I$ؙ|Iq ~ -SǷaW[ҙDe #mE=U*Te@\MgE_m7fgdm3Da2/W$0<'\c˳UǙ\,gy}]$^W&UxV]wɳ:yųYw6F=xLgaogaow/Ϫ}<ƟijoԶiGEq$\xy.zY5gJj&Uw)ϪKeZ1M5`{ܮdzo|nWvUgU3Ϲ ⎙xV OaYwoȻnW7M,?9~uLijN7Ce`-f]g:u$k">;^r]y;ЋI#'O{]wi"yھyyޱ;;O>by;O;0c7 Oa{i^aiۏ/i|7O7Oa|<)_Wf*dv5W_|cv_ƹ v{/s|o|%i{|g|'w|[ `i">m=gr^-uwMkղSS펣8wwN9vJf=찻P/SТxM~DAGd}A咽:Y>hQ\·^ \"+HkQ;EN&.9R&.9n&.#jm-vyDV Y^r(-J5zɶK%#j>KdUZ_Bж%P'/ jKxd[{~DV|֧QQ1joOWv["Fm[G>"v[DMĨ)Q1jMD~>mh7)R˗ DZ;%bDDQ1j۶/bDQ#j{QmLDml(ƨqFȽG1GGm1jۏcz0옶>##'bԚF8&ɷ S2vL91Fjq"e2esc hE,^uﯾeqRȣ?m߯?yj[{r ӅaBB_ֿU&ȫ@8SL+(:.qL䧫w7ufןe '?J|0OhMEҿ~{eyg:@ D=K/c!hn!c;x  9q|ѫDŽ,eg^hy;cۉW~Cmf1IlnCs*g)wC ko*j\0O$ʫL8c0hȊYBXTԃ!i:^6U93+:*pyuspC_4=׏[kyx0jHOS~khn=W*͉R惩jː2K؀6 .?aA,=ԭpwlٓe!-1V@c0p+\5ïNg0 &O\VMUG3RSϖMuדa'1h{ǟsƲlh]ČulfV|w2-EYt*nvyKR, YM\,.Z6=û6"/$G&{>wtG} kD3XZJg2*22%ͻbt_P` 3 *c$&T ?(q³ц|D@">@|W<}\"C55Tyx"@- k Ւ]ws|.JYZv; dy2ro1%/ {C1b{So֥p4[cgΆ&;%.?,\l`?c8ASQ\]ޜ| 4E(~pI[/L :6)e=t cN /K<K 6:$E" -Mb'_S"!\K@r{!h(ߍ\XV@tO`d(3kX^ʳ kٔQ-8jZF=nVW#94>[O8[t *i= @jT^ȣΘ6F)-/#x r։NbLZh\2xn&&hjز #uoQO]Ѝ2WʠY8K=FmݧۛDjI:a2iU DH5275 1\Ur^LE1KYȒ]}*&*ұaQ+6 `I,J קYt7tl fIQ%t/.ZDuuU/yե8d*/?4i1t=A"M;0gHN gH>C3"|g(|g(|L>CB  s-|gH} m(gy>CukJq|P8 4_Kr*jP8 iXNC4NC409<0#N#xx=<1Qfy?F>F>F>fSQVinoO% ĺ](ɨOV^b"/džj%vJ@dQ<ֈ6* ʮ7/x2;7~t|;~n/Љ":}"فK7ƶ]`:Rw,h8m #?vqoblӴ$~S]Ve{f!vqAkHds0P(;W-_DQBVK;xa7OH(+PQZXbіluٴf*KM.m6fKKM..m6|:5$jttjtX2'2$DWW-V~UkH"zRjMs6tk2٭e/[8eq\Zm]uk!խe6SHGa7z:6?ntlzHvyspņi3gmSQӼf4oۥeAviYмݚ4oǦ$<6\Og޲Y,x.- [ӂgYGCt3*- K˂Ҳ :5-ΎMC46Dj,wW7XM9RRSDsN"IX,c|soJߌo0JLB雉TT -?zQyWhϫnǏVl%Fﯾeq>]?:~\4t"x ~қ:Hd:YŐIWY HVϋv`VIK= SOz3YExdų0QpZ0xRDP?zAE~^m2B{:0E/J>%&'oD&_O:@b+\:᫉S1BQvK5ϨQ=(*ja&0u&y] _rR4]rbhlSI6?n sJdiDSYy* Yh-Iv =P`L$sB^Zoȣ%nNYFUi™Z+/7Ν ACV_|9-AJm Oz2ם$Q&5iÍWSWj'`PI ˕䲦qO:EcjC /T;2_M KWM8o(,WͿi00)}M W~C |+I",=eY`P)=sPSP5ÀMA )l*0X.&teF5[~Ktf|i dAA}0ԏ'x?ԲsіN.n'''d+xsx> seI,R]\|:zo?fϯs~~~yr_^,gep;_|򿞯38L?˹:G涩\)}ữs4/˻{{OiY ?=7n~~Sxk3ǻz}83 =4WSfC??_~/i4_h޾.>O׻;[T{z)7tw2~oz?_̓aE{}g]߿s|޿za>!g_lBp^ST/}s n/+;w̛~~dMǿ4oqw_x^ O>9Vf?EsQ럿 %t/?篿M>o{`=%>_MKM=_wKiﯵ;?}u?Ϸ_kq'_mE.6.X̀1#.Mx!zYoza/S-U+m]j!"IH00 Z zy;YjvɖǒdLr|3hJ($5QKpPp@ 5/推j|j;mjoUs r;lͅBh, 'f35wMV6w={)Vtc.uB])}jwTIA#+-ETnzls'>hθz/__D*ßohbn'Z~3HۻO0p6s( @^jkA {J)RYxip])؍E4^:h8 UZ4x&V0G:~0i8G}bJ*%$~SqbBuP?\]}pwp{spgT2ߓe%|'4&"_?_ރJBVzX47j97*a}1" ,z7>RaÚ,jTl*rwKCS+jhЌ%ܒ\f1}4iJXЦ  'OӫhoX&ӨbP,*^:ZebP&ϙYq@.bnuXzb+x0jHOse4oh҉+:ː` h9}ӥFCZA;˙ȩYQ0Vט WEwh2] y`(4T5hB13xyՇۏWFWCɰ<-ȾV?sXKmf[ypSE~t%*:CCi`tl-`t\BH:}MP X-oJ}8pհ$dinw'5k#Н E0Z%ZsYz2˨/ESJMsBTBUc[#Z)rZZb~::-O}^U<҆Ggx -kk-jHWt1CrI`hg1Lަeܚ%RV0UnQ*֏m-c εN쪼(lP5N!%0n4%Y_YRpFAA~ѧQ .ooo>P-~߸f0j\.R,b/w+ (uח߾__=|eDGwtOOK~#)O61SMJfzrAڣmjׯ)5E:}^ &hKS-X {QiS)+iQ3E3u c0 L._BAUoea6 q ıǡ9sos { {if *cmR" ܻs>~!MJ~&9B%ه&2qthK{ҙ m]`(MupVwԔvtP.Кv,XNsw61]َgqn{x+ 5:(*L}/78@6]'(7$YgyVou к8/P鄼:!mM Ur@dBxȄE& ~|dH+.>.ܞKKCA&蔽E2CQaz2qu Z2 %mY/R]cb,6CjjA7򗼋^njuMվYmCu[8qrf;F)BYϷ<9<.$9za"IW$B`{AUiץߙWZ &]YT+ݪh|dćۛfOlɉYD'G=?:~zVesqHŸJxvwd)ۥ.޸eH^qɛTu|Ǐ]O^DhZ!7in שO <Ԃo{fq[ N[<x%#jÏEG Y-?Z.z]og}LPWh>4&bіluٴf*KM.m6fKKM..m6|:5$jttjtX2ш|[_o+]ȎԚU{[wk2Η٭e[˸Mn-㶮ې2nc$#Ű=a7e:6c$xm7W&̧i3gmSQӼf4oۥeAviYмݚ4oǦ$<6\Og޲Y,x.- [ӂgYGCt3*- K˂Ҳ :5-ΎMC46Dob6HNHqOm+A{HR*K1o(=7c[(}3̿7Pf#*UwC}Q?m߯?yj[UmG h/h-xPKo:<5K?Ma$U2b$ ىDEK{l;~p}xervD*rBxⓞLֶ\8Sk=ƹ@4U P0rY-A sIeZ:55g]$TKϦ9P* LcWl jj%ʲ"F z5!hȚ&bmv+OVxEjإI]3t ,UޙW3ϙ\VX:oU!i<^2ಯ|ǖ&UGm|`]yc@*J&/:@5bhWc m] 3]5߻C;.r;NYQ%gCnxѦ&;vUvhYlhW?;Ee3q-'k,[N]ԸZLɫ?*\-='g#wK:L wx`jO){u8cZ ,XW36ꪙ\rUYה)y Ϋ2F8A#{K7OV2 q]zNM\σimo)RX4駓Z,xϾ0= 劰,$“ #GB> iXQq[JKE`[,ɳ%@KvZO``KJ顜s-}ZSZwCQz5Fߒ}_I0D3? C$Q(ChJv=rޙ;6;iq\^qtYᰱ8Dd-C7CTseqC[ٷJQymo쾣>x@;]i'^ h3$n13{C#ZxP%Z9QD LehC7dv+}i{%zqB"Nfq2R;ī2J2[&f$ǯa8~]Sǯsݱh!_?nǯۉyІnqyfׁ8~}Gp#o 2+/ nffڀX`A؋|eH~zi΅]kwZMhY}*Cjmvnvgnz )@@iW5K,4`i ,f“$MFSLu`iEmYUcG5EPs(kwF};nwA_e<rͳCE͵CcՖĐc _/܉`m> w-+FnNDk+'R%]kŨO wt'ӫ8XXD=ʟ%2l9KtwN?q2D4rrTx`FVϴ|7(H<%ȩa7͟SUN*əz?*3 r-`#͂dce8pr* 82FP5t}hj޿$la43믊-ewq 0<@0'8pŨ21a}ZU*a Vp$83E& 2% b&M11D#JY|Wqb@ӕlhXt=ˣPޣa@3z4,!e,XrքPA,hA6u,5YXІ9X%%k t)= ,*]gr/ ,j󡁅]PtTi`@ tElX8@p b"hbl`X8@p bl3p b&42&X8@p  `AX8@X,̜v@:C<(!956 y@Ax>䀚PJ4xJPP+Y/ Z'KUP~YPpJ²O(ʎ_\Z+CrIڥ,9J2~qIE>5"MM7sI@e/䜐%[t QD5,&$aI$\VnsP(@$ BR d %I,2kI"CI /d UH3vWȠhJO :(<%Xd(IbAQ ԰P";(ְP""aq:JXdzXdzXd(Ibb>t,2ȃu,2Ȧ#E$d; ,2F1wXd& _JXdK> ,2E$bEy-Xd(IbFWXd(Ib,ib$E0E$k~E@%m9<2xd伇 ȀJ"ð`X`@0j`aaXC,*XP PA,"   ̂R pP‹+SE‚*S7+$,X$@@ bq)"aa( bA7 PA31'ew&"xg""w&"xgb!9T3;|(xg""w&"3\ ~o-XQ{ ~o;};?@D=],w xw x"+:A!wć؂B3(5pƯ -l,@b\/ Aš$, A _):~AP"_ @Q@kD(AB4 @/ 3DA,X@ b"8*T 7*X/g\;Y` ~%,yM@ɉ91s"fNaE\UP̉93W#(bD\EP̉9K$E\K$E1s4"fFRH9I3W1s"f"(bD\UP̉1s8A3+ 9;NN_-ABs(W Ǐ1{Q>}̓K7^z"Ƈ\ajBjK yV%$駬V&RC@JI_ewdzMCg FFLӞt;O,o6{=/ZcfOjwi;^eaAAY#O෵ |TD(sa4M 0 ̊Olpmw`x= < *O`č_Lr[nTh#s0DF^kO40"agه3=P`L`= `8];)**6eRɗj99g}u$F~57 ?;ut0oxqUx-ʺ*zHR3ߤ~DY(yY>4<.kd =+Uu(4gك Bf#uX(6UMu>} Ko5s\+8.!:s@D3''藤7O_z#]wcx1w5JHY#ОCg<9cY]֚'wITTZc$r8*L1ԥb*2ՋY A!2DZhZ@؛L쒂CkOư #>h[o-Rkzf6'ȣ`dHTnoݝ,9gu{ygJ^|)[knaJ_R_m2Ws_x;BZN)kv [vvuW^'Ў4F{whDžu5Cn |֡^Lʋ65)Xt܎-y/F;LhWs..y#pK׃5^/ȗMEkJΔ^ԽRbSp[w(\vq w&%>kff jjs2Erì*yT֋Ncfv.Q)( -Oe(YZ~q ۵Q\LQ5((*FSjY2j&<)[@QBuJPX`#j,jeX37k) P`^xQu5Ս'n>8eI|Ae (Wd`5}igz,<}Y/ks|1_xWx ^܅}sǝ$67r87 /\$[0% ޓV2g£xRskMedu1Zkwē(#-;( .Ҳ۳"E=1mjq&z蠚h1^yQye眢({r=Eᙊ􂡑]Fm9yQ(-=8@,f@Y)I%6ߎgޔ%Qܽ[5`rv#8VԃbèQt5IhkhimV6siim_&DƣO2 ŀ<3hSY=3*rݥ݋Vҏ[r.gnGAyHHp#ay`I^?Rwn <L"9ON $}FZ_i|UMSNFaE3#=8@pWQpW$ڇK?$!b@>d}ةGSd'>ѣ&S8WrKz;]ULO$2O>S쓉'w~2NO!))DS:?))DS:?JO")B?SSt NO%)DS;?jwt:?jOT"J?SSv*NO#)iD:?ZOvK)iD:?ZO4"iF?SӉw:NO')D;?zA=䨞NO')D;?zO "A?S3gtN ⟱E?$o6~ȏ&~wxJJ;rN;̌VfA + bM&z Djc%x][h(qzJ$ZkeF8xzZaեJ8?pqpGϗ_>]>y}wr~/.ڙ_ޜNqg|p׿p:&8t'۠G?ecu QVkvQ3xdS~ VZrZ4i0O[۬7k狋4$EC8YDӭoJL:q|WNϵh>ۿښ v}*Ltc T@erå6kw,}e(8epw7K[RNI~2mTQy r*#f,f2ZŭYĉ^Ey徝}&Ṿ,VG35- [b?;vk=mi-2w"jnYC 3RCt*'cteTL ja&;A-ރx= { z/C:CZsVQ믑2᭗7ʇvt"΅8\s! s7Ҙc>!y?cg)9|wkrI('{x'ផn(LQ#'!x2őrJ));%kҶM}C=fiG *[g .PzR˚ 1,Rct1fCP)@m nӣc_i\.$ukӇI4O3:[oc&)nQ!^;x]'[AA|3#;ra{j.8F=t~?!;f]ܩ:hIvtv; lY8xsHAib&%e`Q'`Vrk)S:OClZq0VΆq{Վz{tp5:ۭq-*ʋX[noR{V8B{]ƺu'i(>szY+|~oo~ va<])V76IY;\rrգ՚8LWml9ō׫RHN\l63뜠{8~ jJ]GXLEjX"MD*#5[*˗|m`}O{Yu'(SݨcwN'f1ǰ܄ 9h%ֆI3jx" *,4߯_{]łZ@6g2UDPnfmtڰf|FI0UN<֊)QpRتvVxZa;C}g~Yp{W_ajMߖ4ܻv.h:\r,i'V-8-]{ž)O+$;7t5(w~tc`[߶k|ga5]@>ׯ߮߾gMi12bcU gbxhn@8 ȩy=tXn@T~}_rm?A}q ;^+^Yt-Kͥ1.ZWvlrxZvˇ2wpc7Ӕ{/qgum5ْhpf;sYY.QT3ڮvg-YNMi}/wHm,霥{" !f!Vm6l7C9hBzY q:Yq\/lFu*=Wv0K1ز[/ օg&<=G+mvQ 3=)sU6:Bh3NvnBDɾ+>xU۬s y9&$h^Ip͵ԭg31bMfgfMZ=銩ӣn0%:7R{KuQ͝ lMiV-fّd,]/Otm/fM(thY=&]ҪUo|HN!P͚Wt2t-,kEϔ^ |ɗcMB mA.@X@֜¨-/f8ؑ`pXA!I̺!IN.f@$#c@UU%f AW Ia@$&0 V$f? UKaz@X)v '$&q0;6BP{rq.=Vb֧!ߧ#Si8l4I_[͍;m,}Ǵ Q#eoWo G<8G\>>q7y}}>>@ɧp8OqY@]}~F9ag O%q0-/g(M^y,n)%wZX扟gIK?딒:dN+Z!'wTKG甒9dqtN+ZA OD1%u9>ztHWw <#~ԅIbE=F~#0r#/wї;r/ BW|O77ԏ}o?77jur{I+UVj]n*l$߂(~ht< h1 8Z%f:X%K4dEhkNt+w߮.Ռ7Y2N##ky| X/U=ܵ5A5k'z:. Q>D5!^|wh56+N;j2m'uwOݟ Ә";/49}?&khooUFxǻNu1Β",\nIƫh>|鳵&V-[⤷yٵrV"Lu5YRCn`k=T-G_6PkٯYQ۪Vs^[)J( Ֆxu+d/넫p\}Bf6YĹJy+2%Eۯ CuGj6U:'sIK }p!t?3Sz>@ ral֝ŇziO:Q9OzyIlSfN_׶__it7SnB&7A ?A r`c;(:fêmb9m–ogcf,Ua'"WЂ4-`.{g4mKqFtpmKgY(ёa/^=Ңj< 5)^Ϲ?-UUR+g<,TΤ/[3[[75P4C~K~ؿP]ORP{RWSא{>78n%8I:؋ Rw ;:{Quv`Ց^ē#K6axIQ!QCg ?4~ ?4$~`I/I"b?Z.oH@iO}OO ?4krf?8SC/_H&@>ts@$?tqe|@C]`)0~h'/s)(M~Q$~`I{ $ ?4~h?t_H?@$C)G?s(PISCG?$~%/W~ߡiX?l~"C'I>0$tOOg$~hI1? ݟiC_J}3GIG@$~@Z?%'S,QWlt@'_d5߂/)]Eu_|k HE HE|8|S/_OE(GE~֯xGE|8_ę OE'"lENOG`d50)]Fu`k HF HF8S0_OF(GF~֯xGF8`ę OF'#Fkz?L>gno^ #Tpx 0N<0$GGHd%I @>\AI$S #hNIABPI `N Rdl34Lt@: +`?%?I~~ #.H)\䷓{3{{?S['sO R/CiO ҁ@^ ;[0@>H hg'd@B tH#+ 23,h 'h14㧁lHa| )`GG)1AF3AJ\R"dT?O 2@nA6r*LdG 1AJqǼdY$B)ҁҟݟh)vn?f23:`h1$~<r?/?h/?[CCOW>AyI~A/?/ߑF#?3H+Hf6~@\s(IC$btT /KD.Dcmuü@jFR4`i ̈ 蠩«  xO?ʶg'f+YĬ.ʾWǡO.>q _O[8.:wpOS鴅[©bOZx-|bn,>p O+np[.OY8.}-\'-b> _׍[+v]-|*?i܅[.b~)SN_f>=-ZPQO]8w)v̅['n:3pWEp[x-bn;iuinӹ \8->pS/n O+vSn[8-)np[->q _+fp[xDWi O+f[t-f[x,\:wp ?J+|bnq O+n]8,^ [«MK؅W'vصc'vصcRx8 vn"dKU%#WW^q/WRxҿ^֏^/WK^qnRxE?W^_ n|)bK_ xRxU+++)Rx%WI^'W+#WG/W'WS}B zOEsGQ'-?̢In&hRg1~I-:[ '_{ʢQn+4G0$~v+o?g)N[K(m `:*;dq3q,s䞻̄#= ;0tt^$_P Tċt'xry?g 8HU]3;AN'!Lt"|ว o$t!+$ij$~ۣ?@$ǔOB''3с+.C#OE'Eh:o`; 'C'ϼY@O$>a@́OzO?I>?ksI& ?$~CHnP#3(it ƕOgޟhqI.$>0sM:[4~@柆\~R ?)Y3ƖLZLt4kzOJ1#g&HH/.?~ \fd.܂st fҼkjN5U'tk8ޥk]W]] F5 F5贠k]ҟkxt 3F]Ó/|A]t _5,~A]t wq:>i&@}t yb;^00xVx D01Lty1LpÆ<|f6. i9\x rnx5Lx˹95gǰ-L~.< [ 97 o93>S _΁Ga>H;&X=)X4ŕK/N{oW'}{?ۓ$~h2J?0\),&? ??|`GW$`ⷿi$9~@> p*u ?04~ D'|$~`NL#{(е .Ѝ{&{3 ypg ?a?R s3G=H$~`I9&? `V?T`S??TH??n>$~hj\?fM>~gޟIPW?4$'߁gG?GG?hf$G)@4'돫? @? pGg!A82iA&@T HT'M>0$`1~I~I|6~ @3 Gxbo(1 4~|h70+Ӛ-Ӛ0ݷcy־T ֟Ly)K0)k`ʻ5{_E~֟La)ALL`ҿLy_'SֿLy)KL`9`*S ? qt0{ 更HR$~E)} {QfGG({eC'Resg? ?E)OFzˤ`>P &?=p^4~8 ?}I?;c>q3iAsόcCwʺqD'u$Y{$)NIt֟$:%)/NItJSKS謭?ItJSItJS/NItJZ8ŐD$:&'NItJ$)NIt֞ItJS-_DgmISDgKSItJSH/[3[Ubml4Z-O4ڼ]Oԓ-;0p ;wt't$tͯOS!qCw!'C? ~h~CN?l?N~ݣb?C(|7~?| o=,_V-D)P)@M|?0~?wz~h.l?ꍟďjS>1 KIh|j)@:?`M=SH>_ 3mJF5`k%X# k$X# k$X#'k~Z5`k$X# ?y$X# ԗ/ H%X# ֜ XsՎW1e8Z, [)e.s뿥j"C%Glu|ăSH<[|=]ڕ43H &RoӧlCDCl:,\;]' UVZ~d{]-\^XﻹU뽦`TCUS9QlHWMnXMXMnYMYMnZMڌCwm/wBwBwBwBwm_T ݵ̙Ew0Bw(w1Bwm}kЍkН5d5d5d5du2G!C7!Cw!C&{ؐ,ņ NC>6dFv=:@wmlX՞~ -! lv6dvvِtng7lFv6dvv]-N=m= u׍st:9:tgw]Mnm=N<9=M}M;نwwzq-u=ysqw[χ;z.r4tFq;׋^.{>u}_z޺>ѡ|hn>q|CH#HwbgTx9:BXSUSUS=pvs:󉇠2*tf<SF2*tj*(}nx7G ]1GU9:t6t8Z>6t>78> C 6t>u5@y_st>7xz>ѡm D@!st>ѡ>su^WCt|n󁞏χz#t}CPo1kl>ۉc}>j:"ƑCHdz;>y#t:>ѡ\{x:P ut:Z5n4rQA7a7t]<+!\HPhAo:xkD6YsW갧MUȍ 2\*jnlT*Tg,9gCnzGB6Mk~ZF'GيƳi_Cf:=e:d ߺ_:g) uO2t2z\t,#g<{O cL2# Z<8p\U9phj]e9XXr`3 -xV8_7\g<{{M/Xw7H1vacu5Q8^#؏1k*k*k*k# [E^ 7:\MolU 5n3 &Ruj2<4x UT I]xŐTMR5] |:Rut.Zdx U?RuN#X#X籮@V#/ j2ۥ/zH} Ǒ G}ː;i2]'Mt$iO$ٽfs\xؐ.2<}m&V7txpŶh{j["{H%RߴgstxlCGg,=,Ć$%ѡ;d,6Y] /Fxxл4^7SŦ<Os QTqX3/nP?O1~FlWjٮ-N1<ئ *]l, 1 >w544B;vMe a׵շ2]O9QбX>`ͱ Xrt^YEr\{oAJp*b8vO-ؽSqC`V o@k2<p&ñvCvϤ?Eo(] >jRyNQѳ'aȯ4N}i#9<9Z=9=9Z>9>9Z?9???mlmmmmmmmu+_Q׭F_u+o[iڿn6jۨVڿn[iڿn6jJ5jJ5jJ5jJ55jJ5jJ5jJ5jJ5jJ5jzרUڿ^Wizڿ^5jzl֣:ѨUڿ^Wizڿ^5jzרWڿ~_iڿ~7jߨWڿ_F|'> e7٘ߓJ+/t5N(.raHwrD@g)m7rrwJ7`:ŔJ'yJ)UB(֙0FR DJJjerzuǗ^|_?yz~u?O/.;ۋ}/j}v{ڟ>?\xv/^WI|9j)]%>\--/>[Ju0vՄ=YUC?m}ҟ?ٷs᪝rr W?_ngb6|l}x9k_J7? /2[ʟ3Z?'[j u7 oX-_̓xTJg_g7h,*$':?*"5wjжOz>t(5hjTkUpSj[Oh0䗹E[ n> |`^-ˎ-q Yrj6ࣵ6@I0fXi}ЬLީi/6әl7_ plmms-1.1.3/data/projects/Demos/Skiessi-C64.mmpz000066400000000000000000000126301247673406200211630ustar00rootroot00000000000000x]m㶵Bq?n{"Mٛ ޢ(Z[kK$K./7Z#ZҡLhu$"yÇq>MhZ:y#bRm[m}KZ׵Jv_ԓ6Ӛ'z |:.WAgM%֕9]6\!SNww^Z NI>jj[3sڋhD{oA(:-Gnf3"]Qgǧ;WlI壻 +/!6ɫ:^z&!'Ejٛ$Z}&õSUMftWq7q*Ĉe}+u#_!!OH*Hk_݋j?{|]<9A.i?9Kl=#7J[oͳuy|]:lͳu K9]]<8ANi?8a,Kγs:ckͳuxGtx2' _Lzy@V oK{HR!Yn 5WrUDB9D`!b!b!b3䓖GfV:`@wp_7.zb]E!\j{`@SXIN%~}sYӯ~âOsZp{`Xϲ ْ~M(% ^tX8nBLWb0ӯeM%BQ3zP絶 {.PiOT,L`ρPaWT%~GQ~Ӯ`Ls墦 1XTQf!:.@3)5] ^ysʃl5YgɅyzC?m"Cdysek]\j{h[5\Cn1NyOgKP~yM' ՗ퟪ*xTsfT 4q)Ub EhjVf7^/#b^V0Y[@>/StVb.'36ʆ 2;sX 8P x[=4@-WBAChb#ꌱ/F".9G[p̔y3*̖93fޜW,?kU$$1_HgEuTg]DI'ǎ쨆߯kpo ˥:( 0sb|{ (b}(E/JaFn~Ԧ.@s4Ⱦ :u_7T@yjh|?31 ͩy }_(X| a\1mp( m(&Hf0(b3]*,`̣ạa̛VKk>3|SG븝W 6a `qX+J޻Q 0Di$Ohu;YlTiEagr'$F"h$E VYhO1]U+&1q4ˏGggi΂1 \a,c9=,-}4Ύ㠏foࠏfYhA͠xF]>Q?ڑQͨKq3rьE8uvE5xF]Ό>Qg㨏gم8CuZ_/9U9VQu*Z*Zx^ kqyf JysJDP, Zk;ZnA[&MXcTzMǠmEàV[xwj o|[m᝿A-5l~ǰf0j{S$nBxūO['uՑVF:`9׏~8.Bdw,nw8Bv,Uw9[yq[ʭPi+&q#'.=8gS'|z[ =BbTX6 Sճ$ڣy\]qQE1GZTZDHNq!T335StWjow?WÏ?S&Wg_tO6I›_|jw:[%d=yfI]n]gvw'7wLjeN.i槪 U?*;O?a%U:+F #!ro%.IIN qq[+:~oob170?>xCzVsCj쾥Ze{'$o !VRys7IAJI\; V_<M:HʗK7㗒W.n~χDY"%7%פHyA!v+:<'}xdo ҃U;w]eLjy0NAfv=VХvh\f +˦r7Y~#0f_[KpiiUϲ45}+wZQye4msw7Vlmms-1.1.3/data/projects/Demos/Thomasso-AxeFromThe80s.mmpz000066400000000000000000000352561247673406200233600ustar00rootroot00000000000000=x}sH+X{#oYMvcm=sw Cb ȏq[xH<c5I2~PxX|ӱ9ؓ_?|ZAxs{H /}aWay./WWw;-f3 ^]ˉ؏'̇0r4 yjo7ȋ'F=9ǝ d;N=,&\3ט 38 |xMw@3m1Ϧ;WNk_iOdD|\Hsy2}ۃUY&L1A\__|B+ ȸQ5M< 4\͎*^v ̚"b C8Sۣ竭}XŅsg~ n_hb^w?vwmo_k17z=|H 1|s{u~ys]|>8wNOխJTR_Bz~{~uqq{W?a kB4L? RuUjh.ԬZtW<*6*Zpn#"/=I@@8 VP .|rLW_iyu~4 o<-SW_NSװ=q]smC:2*^]~>R84vgڏ E-YM=ĊV{*E 8E Ǧic+[W5gPu,"SdAmzHr4K]K֮h gT`Qd+}ҔY,Hg=$h-V b'%o7/ JF;P!ݑVؚ qf^uPɆMTeE!!S}V;h=j8i n07w/+9;b>RW[[U>NKoIazkiT̑ ˓G6tzd{?ë+BLR2i<'5mGceT;A/澋07JՌ?j+Z:=(kR:\(O:ԧҩ{+V&֧,ŦX1(RScLQI:W7ח{#kvP1$rc׷#E넔=#¼IfKF-)>{iV9K~/U'aඏm۾÷}p{x'z|EW*V2{2Blb ZIb-hjF \DcRc\s|_19+!(9}1GcC1rt|gA۪tt#!X[4 $턠c<t#嚽Hc\t|gA"Moc tT:[$t,' %!΂!A} tl%!،[4 $턠c<t#僎-t +踐!XC]ckzs|g1G"HQM2w).7@xb\эD\ᡥ3?kWڰ^ }IِNl y'R6w"e9}'R6w"e}'R*G!(H~I}~㘀w4,+v_XՑq;s J(]<[vNgo_bn$BW[s݆E"#"Rq;P-Beg$)rF4\M&sAݩ-sV"$)r?8M@mIъ/YQ͗/yky> 4ڴӗХÜ"|j"T6iD۽#k3mmVh|MT_'qo_%=vonFI0:~FNݱ ;pu4#{>HIhkUbeu^x`㒑fشT\vc̱c[;&ކwmb`޵Ky]Gwmp`޵4wVk7-1-[ǴmC3svwqr&mM@s= @wO^kw7o dA{c5X76oޞ7xco176 zcG Ո Hz{ =op`(' EfV\_\7_kL586YPB^HtuqIPO; j4q@cP,U.,gW(>7ZX|5̴s#+¬ݸZ]ą?{f/v#J㒮&PlbVC<߁\NW|Cբr`=RsI>lre4/P$A&"!H+(A`|+Q%]F ]Ne"[շlB~\ ѭ9y r9r a:Ī#wtZ,],qwhET3w×6 KmL_WW/kJ /@/ۃZ=y 8XBa(%~'" rkIXqrl]d=@IJG #5B@w1R# #+uUEN#Nj8vul9=;X7`7\4{ݹ 6k]f9#{EY{RAc?>9vivU'PmG /+#-JBk"µ@@+ۮad#L6^y 7py+3}]=3{ߤM=ΈQ+rg#6F5F kT͉L3!̄0LXf̄6^ѱB$ sB8 ,98">/~Ao^e <"֞i8zWS{np k)` .`e 3}`Nd>%.|G*e w'>ɚqw}Gቭ͉8bYC? 0+3}]内~7Lzd 2e3q1u\NT9Zs:CePzQ$bк 0Yz/wىors~\x'7'͕)ǍN΀*t=5Uz8wjpbTᬫB)YS ]GcM՚*t=5Q8kpTBñcS˦ ]GM^I,v=6Yz8mpd0b1rŮ覊/5v2lRPc.-v OAɰSA]N>E,v=:Yz8updbSŮ#g']N,v=;Yz8Zwq(d8bAŮ#']O> ,v=8b3=bf nB҃xJ蟼ۛM'2kMg=RcjN7)0^Oʢg}ї}j݃ >-=S? iџsv}jɫ>5J+|$P@΋it@m@^ΓXeN]IHs&AxY;gdwMOq^5E>>||<x1Ѥc#ǜG!'~/Q>>;|NvDxY#e~v']pD6L0?}?Y>}=}<<}Y;:}9}9Y87}66}Y5v˛Q#ǛE#Ǜ9Kv<}dO 0|ݽvRS|5B g߯am>4 sUM>ݘvw&muxZul+FP۫˛H_\|js6Xpp<w't4ml%u몆lW}ED^{J,<ڪ~RW&[,Y/Th**Mի{4 a;IZȭTxҳrb!V8~gv[Vk?+d'U_׫}Y#oKIug 1jЍWױ^0 + =jӾ"';27fMS/o//?VX{O]8q1\,҈hؙpsxgqY11/( JDq?/+Q`EԬkR-˨^_\ VsGD+T5ZuNl@U h _l HAv?-?I ;3zU͕3lyum;V'rB[[_X _"%!%+mR\}*}ּcilllݖ43u׋*jPlP˚$fIuӮ\V4-jפ'Intd`B [nE~zT;1՟sh29~v6 U|COT#\^7Ѫ9JٜЖ,bH$G.X-ՠR lO.e[Ԭ|"}_Vt_3],x.7U` /t&WH"[ TwM2+GmX5P"Ƶ`KQ "['([di3&xvm|r7jjpuۋ2W,'KM<1ZN"yϦnՑaޑ+#4GqhmR9Ggʏ^in\z qJ7/AXtw pZS;J7@Uۻ _p)J!J?}u~ǍBc(CxTCZcr'cEE]B(v VVݜȮۻ纽h`E-Fݢ|.bd- 8odc4Ӵn;W"wo;5Po:Bǭ%[lw7G }:\&]Knn.?^EP!\Vؚ qg^uPɆMTeE!!S備Vh=j8i n07w/+z9Ч=HfUNOoIa'{kitҕ2G2a |=`z!%^ lkerMy*=0OT#=(t촌 y6"Rw^wE\':~umRJukޚh'~T̽ԕҍ4CsSBbc,[i^V% :W7ח{IxQ$ri׷#*ְ,g<0d ln[3~%1ucڭV@J}t#0 BSW0t dԽUT2&4Ԛ(<s5SS>*$IMA=~zwB#߂.fp{b:™U^aqL?q?qL@; W}/[,8h_W%{w'7ՍE#j;D vّHjbo`0ZYR K% b;V581%R!ZΈHRi(=m1YŊ)Eޤ$ed䟑N:}sA궈 }Ix8Zbw9? /TC$([(:})&rѺOPM+s h#p%&_@%^?e}h&1|G39KfΗ(˗]z1K9u@_?df?!T^ s=#P!U fYNY==#~1Ը7ԯӌFv`֞)RQ$VZ]JA#'잎T\ 8:xAz454m;y9JePmr竭}X-g ;ػ ~UBJGȆ燐QP`c,5Tƴ"Ȋl}䅇L S>a Y&1bƖwtȗxX6H [)c O;Zz`!)ncdTYX~6.g׎g 0џVt|Q}ʚG3"×-w ݣ{B=o-k^RQ !ݘʘ £<DzP\1:IrxLltkͶw}:A(nDRQ(Ki$#%/4m7Y 蟼 Ǔ(͋D%H@0Fi})"('@@V7ɂ {{{o{K{{#螨ZtoSE^JH_/vt]ZD n_B 65 19@9WbH0E2/ E 'hCuH ]Z6^01U|#)$||("@@T8x(819]#Bb38Ƙ c0c"1 cx0',,`!7NA`o$T[%(H' m 7ao$9ضK$V|#)BzCs^aa A|̃XN1A 1bMW@0a >A, 8EL((ߛ*߂gYP>PqOJL;slw$O)])o[Ÿ~W/Tt.#fY=պRE:U{/iW!D^Eםҟz]' !躱nN\ ]w\]'siWQ':i }):4 躱nA{t]7&t]'guGu fAW-yAu#w i5wݜ6 }7vqmnh㘩إDS MBD]ɇ(6Nm¬.a8Au7Vy瀂uQvWsAuҢ֥w6Vtjͱm^xs\7A@NΡk;;ri?;zzA=wwz'+@^@@N ?wwow"K{|-lpw"f@ߍwsH:־8H:ھ hnXw9 nw-!#}wd}',<־<־[t^C?$)rttotBH((IRJJGtq_P:P:B[t((qJJ't~eP{ttJ'w~YPoҁґ)v~MP糖ҁ*EaH`;#X}'A[)Xz} ;38U\8jh3FmF4}' ɩw#/J&‘:j@Gw w#$AGws8Iu[Oӿwt4FntПrҟhLT2밥>J$ӺG:1'x`nYP\GgDg4^v=u@_7%bߡ=F$ VjF{17査]#q`Zeݍi犥b^fb&zIjnǭkgTߴ VH"[ìV$j%/k P\ 5D8$m W[8FܝIp5ԣ䥴4w ce!9 X=A:K &Hr9'LLYDvBϱlÔYʉ3E,6;[; |(YiJ yI5>v@,8ow@p|o:ǿ++| Te7z9 V$>UF)"^eΟ{,g,.!.S& VM]_Kbi(da-___|XJeX&=z(tI؁%hvxE]$(%#Hh h-!h m!h !h!h-"hm"hm"hm"hm"hm"hm"hm"hm"hm"hm"hmhmhmhmм\& 6Q& 6Q& 6Q& 6Q& 6Q& 6Q&6Q&6Q&6Q&6Q:D&6Q&6Q&6Q&6Q&6Q&J6Q&J6Q&J6Q&J6Q&J6Qzgyke`(5Di`(5Di`(5Di`(5Di`(7Dy`(7Dy`(7Dy`(7Dy`(7DWވ2vw9$'='W|8_~9Q0* }^Yf;!4+^6!bE>k) 1FHʂb! 4l^q.\\f6 |Ka&X&0̸:}4r㕉nr¬0ӕ1ןv>sIElmms-1.1.3/data/projects/Shorties/000077500000000000000000000000001247673406200170415ustar00rootroot00000000000000lmms-1.1.3/data/projects/Shorties/Crunk(Demo).mmp000066400000000000000000000552061247673406200215740ustar00rootroot00000000000000

Put down your project notes here.

]]>
lmms-1.1.3/data/projects/Shorties/Greshz-CoolSnip.mmpz000066400000000000000000000051441247673406200227400ustar00rootroot00000000000000Ox\[o8~hfXG"EvdM:ݢ0,խ;ŖaTCMy97~<-~'1gEe酅WzuoQy0 &y-9в`ϊ ]nFzo(Cws-a3B!gVkB B$T6aE%Z( JΊ,nBfItwyi8/7вKȋ`i#m_%sEɜ2L0ij@5!b+2Y$'Y *YD sLJhd<߄ok"h'L @L$N 5"x% skU _r;7a6;,Xn~jr1~-?(Dq%,M-k]q![Z ) VMmk8ǭMrW`a-kc7r {C?|C8-7Y; FDuײ:aiD+$(r^GRvS9ʪ)6IS()eLxJ{ѱqþ㹆a;&v|ƍ6~3NTg:q8Qw\Qoq9#ϣ:׏_7S׏7?H?~_'J??¯~-¯i}Huizx }n I|2h!ZK`HVXk X:xd"V&2$`d*.v®*@v,CV.(˰&{׿[@Ay-YY )P;z(qu )TEh-%FW'DA_ uxyu79zt7s ~ '',MrߎyD'o81퇃i':^sSٵbn qՊ~V 1wx|S\9g'7[%IU@G[c|y7.GkAfwe/Lн{ʕf;ǐh(#3wW1O>>:m)Ϟ`[7VMOOtӹzӻ;eb'REIȬf#+@+/Km_ҏ?6]vפvNMjT=}vߤJԤJ̤J(<wnpgQJF1+AE==lQJF+E??lQ#J#f=ugQ#J#F(??bQ#J#F(?WQs?W'^#Qs?WQs?WQs?WQJF*??j3?QJF*??jQJFSg<%yFSg<%yFSgQ?OQ?OQ?_Q?_QE .C]jo~]sɁfL性#jcy5Y.r0k-ST8*_4F u*%S˗}:\|7?;oz+dMlm_^W̱g3&"_ZؒraWɦ @d$Qp -]s伮 pk1:J'<ϝ|e"4Rl|擻8[~Di~8bm``iyYq;}(v)zȶj>WEΆ  7xiuNq2Z_wןipSMT~na}9lmms-1.1.3/data/projects/Shorties/LICENSES.TXT000066400000000000000000000005731247673406200206540ustar00rootroot00000000000000* Greshz-CoolSnip.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=1170 * Root84-TrancyLoop.mmpz - Yellow openmusic - http://lmms.io/lsp/index.php?action=show&file=246 * Skiessi-222.mmpz - CC (by-sa) - http://lmms.io/lsp/index.php?action=show&file=543 * Surrender-Main.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=489 lmms-1.1.3/data/projects/Shorties/Root84-TrancyLoop.mmpz000066400000000000000000000105521247673406200231400ustar00rootroot00000000000000x]ݒ8易}3k$~jWMtWnltEwNLTl3鬉yy}~l@26teq$s>}G8L^}3ϯo'mSo;x-hi^{G˿_ ߽}󂼶11'!/GIGѴKL`q־9Ҷn.l"(A^6ڒ"/]l^ӑ$PY\k2%%mD'mX#Td-/IG{Mr )q%ޭOt8TF#]*d iTVT -IMtH+둚ny:LDܢa7i-h#(tzW.qZ$iLF8H"7`V{:^"9ru&dSҚS\Go(P/J gϴ%^L&^BGZq' p~!_ zك_j#iPq{M[!$Z֜?ZbKp|GGvD%5%b.3龛fwcB+:Y`Eaۄl)a"qpWú~ d|x,6a`Ͳ :cX&!nc-k:M Ge[lH U/kp"w^\XiމoqyAK)ơeKɓ; /}`7վe^(ꀼqAYA2cw Y4@1FjEBp[ `+4Ҫ F R^48g.0`dc,[cYܜF0lviv6YKfn:'ԩݒ)VsQjM'IXH1ݦd„ݢ߭kzKHD3>Ђd|r;S^'yTf6Md 0fr:K~Aס,Īf_S-q^sfƍ@L9) I"Ծ3q vwə (x $'0B] ht~It&g|==#$w[|a?y'[FS=-uΉհc#HNC:9kHWㆎ҅jxVux|0구^Q':_F?OrS}zul~\L.n~Cyfͧ"7Enn9~ss}77U> hnsܩJ7ܩYץwrznnd.n ќ=z7yiqjDn~ii3vu I>$]5d/S1eMpuDD==0:|pY ԷMVBmf~%5~S gUH82fy̔qQLU/-xaGc >1[M͍3,֑}Y$mG(J?wݒI}SYNqI `ãN0ZķVNnZuY:?Vz_nrkחʭNFö\tjowпwoe[Ҭu b*vb]wxuYK*wӀr_=KQΰP0~d;Xn~e.Ol (7w×* ͚qp])Hpydxw%Zgj,BzM[AkIgvYn6 OTy[3 .;0~K'o?]4]DS4C쥏7a6:(=h/X$^InO;|>6Z81 *OU APd J*E{1cjBPr1Ʀ b(6kLьv 3qUbHcLN1 )a1$CP77)aU)X4D:| H+ҁ̊Y"JoA~)Q6)y9d< (z1MY9ATr"(fr)oNנbH a\) lP8)kG6oMּ0 90+a])'k-aXR¨浄Q]%j>0b g t`K<laPQh-rrGu15¨-jȍb #-j0GՈ56va]# k#k9*/>>J<3~q{tC(UpOQ;t 5P$cm+h-N'/6@(smCtR:IG*2JLR-nȤ;*Oeҧ*dgJF wn pRRJ1HA(E= =RRJH(E? ?RRj)?(?RRJJ*?(?RRJI)?$?ڌW*?$?RCRCJI)?$?R3g*?SR3g*?S5?R3g*?SR3g*?SR3g*?KRg)?KRg)?K]Rg)?KRg)?KRg+?[Rg+?[Rg;ː|_]|Ch:5d"1CޙyAHel+3&atN*<ʁA.ǡ)֞f&-5 gN$ARASȄ8t?gV[UC!o7?u훟_Oڿ߼{km4Fu͛91t?&M~?G0^7zIi[tLkoq٤xY8^D_͓{ `}&7h/c3~E1no:jgnni+"cr⻷^k?zO.}=Ou^{fahk/{m]{\lx4h aJW r#fr؝t|뇋c/X OR?hVzG$M &א 0&|Mb >hqSS^K]+xഢ\@FoVb+7zЋ?%?aQf!Z~$a0X۝O\z8 Rlmms-1.1.3/data/projects/Shorties/Skiessi-222.mmpz000066400000000000000000000121251247673406200216640ustar00rootroot00000000000000^x]{s| jnymof19y89[-$W ;QM͌-[Ij5?CCLcL{yxqоkQÑjCԆe㢷d TdžkڻSM3LkwLNή;"r3Mwgܭ9ѯQ{P] t/c4_>_B{l5EED]hC͈!Ä, E{03tm1 W hSp^ Ԩe;TP{]F 5IkXs{z/A5 0h1ǐ+V'p ^ ~\yQ,4!J>=QhHÆR 7 iV(V (YPeE8~DAU\[th:Mױn50{=_\.Y@O"z7r=QǰQuJ{RϽc`Ou&S ͮ} j0j^qAt W7ƳWM^/ ;3!#0/  |FtwUWz6tpG{~Eͧۛ@׫BӀ:HMuw 53:H0HuTdPsFa,S#UHGÁ ,Ώ:qثw蔀H + `UHƔ"2IEZ)"`mwh':c==6"LCUTj[׼Bo<Cz ^"ҢԮf} +PjifX# o EoP7;돰>@54>B7a('D󗾭=BdnTNxC n`<'} t(uO#͝WJ0 X4K@=q]:sAJ 46>u9¦x@AcCSW'yO቎>x/Wذtc|G#%V9=GOb:7mǭ~DB%8zP}ǍԒmTOvw īs[yTEۭr<^Kzx:ҷxb7CEzr-)ݨOs~s1#r8~;}J_<;U]8C\M]u`s<@׋z+^!y ?./Wa]8^5VC#s]4UPLMO^ Av^ΒyKkoh_*"/ : )~7Ǒ Ba2[W^Dv!]aT>jE4g\t ՆԎ9r\R|)aOR6;q2`LP6ħii?aJ?kn8;t*ԡX6=*9j HFr BpKOb%rM[u*@̇E9<#2\sPQ,KbB9\7ijv> 9{fOAvOA~PI;ۣ%w?*y/:݄f _I Isۙ+##[_))8l~ +j*:fmu'yK]U褳U xiX֝/ ,b1{[gc27ݷe:ݷeݷe:̉ݷ+}'dZЀ];!1G^l 0H"UM`^86?[-.?W->?_-!P-1X-)T-9\-%R-X1\ ȅAP1\ #!ȅBP1\0!ȅCP1\@#"ȅDP1&Vl.&U 'c"lŘb"[1&Vl.&c"lŘb"[1&V\.&rc"\Řb"Wj9\1&rU\.&rc"\Řb"W1&rU\.&rc"|Řb"_1&W|.&Uc"|Řb"_1&W|.&c"|Ř(bP1& (TB.& cBŘ(bPJJŘ(bP1& (TB.& cBŘ(bX1&(Vb.&cbŘ(bX*&/$x!(c NwnMޓSE0'Amv,M5L,dXzDK1pW@ A>8H 9Ab|E&*?upΟ}vJnPMh} MרuO4=Li}}E_4Pqm6nN@34'D3pԭynciǝ0LtqPAPF/saf?᰸VC{9vhٽٝQ^n!:٧vD]+il'=.jUCUŲ׌kZk9|7]JI:칉4ƽnvE8cGDTCʱT#[(, u mI2uLݴ?dTLkR]sbP3sdSAC66l"]"FH Ĺ4Vkt !>Q(r\ӭǠxIivHEv5plmms-1.1.3/data/projects/Shorties/Surrender-Main.mmpz000066400000000000000000000066131247673406200226070ustar00rootroot00000000000000|%x]PiM= MM %K>ZG+I,ڴf&31x9gǑuE&p]~2o|Ƿ_Z:a7nb[5Uw;^zO~Zzum0"#}Ȃ׃"MO,k <:p1YA.品{ 4b]$ä.wŬU,8_K{yP/Lܺ } NXXP}OX \(K܆Ex1XE*R_d vx1bׅY0)hΜPY1Qzq-bk۬k`~L3f^LZJu4(HyE}⢵|+[EP2X"`Fx=`~dWXܰT,Q;]'3YY8u7ٲ)՝lV cqURiy2L$٭7J"ߣȃ?gl.a)8wmκ>ShEE-> r楮ȋtC2g.z𑩹0buռ={EU8ȯL4 Jhz;`qD懗n"l̖㼕6__N5r/YJ nP ,X.C!]iqFJncP󺩔W<ңe#mC?ҜZa)4DOהQ:HeW^"lվCꉙmSKBRK,2bQ_i7bl浘"X,(u4OL OoO5ZY*u!̧<)Hqgz SΰbT$!eAǨGq:D}OI[ڧ%G>C>'{p{_Q%}_w>q[Bn'7ǍiGy`r!D}\}!  g*z" '>ӈ0yT<H 5(fBQRc.%GcvB_xEqxhiBb`Oh =#20򇨊 d2H/]|/@wD]1Lў  b( u@A 420" h<0HhZ-SE*f]UJ+33t=nI7!tC7c9ͣ&inOuYiQAE~Vަ6|6Ƶ7̳ 7M}}֮WDwWߠx;j;^kha}UInpz|-{ENσ, ʊr kQQfeȅh>AezLwa0Ai/j< q{!ZK?U|Նc_%e)U9Vy+ɗ5 3R`38E%nء}{lj-mɊ:28:s3g8s3g8s_0g8Ŝ4IuHfFxd6Qv4 [s_Mo:2}GKSNDPh*eG^ch;kw֞1x/ ݬ⑻#?B@c{LGoj35?AzGsMأaX ^#2lEF5XANlԺu N]A8;ҵzZ߮}‡rp"ė9%=\}N^ 7t .]h6e,nnOU,%^D_d&Nyx_}fײh9K$.񈟝h5Dfn ޲e2PpkY0ȍ?31b=z#:*JQW+)Eetho1>&R#a3둵kAX M^ uJ/לXonSwvww 9u\upW ?>i>iOwL=F+!կD~dT[QJk'F+1_}-QZFjE??hQCZCFi??dQCZCFi??dQCZCFk??lQZFk??lQZFk??lQ#Z#Fh??bQ#Z#Fh??bQ#Z#Fc-9Fc-9Fc-9Fc-9Fc-9Fk\-Fk\-F{B ,Ky>7kU\0C2c.p%[u̥l, $*  3ZTas'C~^T4kZ;n[TYQ @R إ}:.g?|淕/_\} momVf/<+J ۾Q/}fqD]<ӑOO?|9GVfE{VHh;嬠QPd8B_* .,w5/gTvHz=Lpap/4bͧd~sQF; vFWEqY e i]UuR6VZIQ\h):J70O.fb}ǬOԦmB.~Ix&%F <$L^n#U95cKyOl rp̯e)me롾9]$UVl3lmms-1.1.3/data/projects/Shorties/sv-DnB-Startup.mmpz000066400000000000000000000101211247673406200224720ustar00rootroot00000000000000\x][s6~ϯ`ݝ]I$R#xIt:Z$6b;;IhBdPW||>  nB'|QJ7D?U5{7l+Y/%Ԝ[K s'CcF^%2#D32%M쁾.0,+.2NUQ:iE3nIMxbѰ:"ѵ`6 1vKcL=+iqΉ|DQ2 #[bF. 7@QP4A4LE':װ;hJpkGF4^i"ԱȐ> Flptfʐ" ibQZ҄jhnYhB'AͶ! yvAރLm1GȌgT1u%aIPpֆlLmQ| [ *J'tpakmLC [ K+q"39İD^Y0•8O!0ƙ pVRv;2I"ۋBB5 V^JK+<)|XpA*mA6 v"IK*U(C%{*!ӻӕ`T/ tw+ {'?2oDf|B02wSRtqYZ&T2{}OP2 #~%YG/78{#3>Ĩ uL^'+Kudd:on|bIGqu01}w>dӹ3P=ɧ2Z*;hY\!}a=X bnՖEl񼮘>>cv`wV+;SV RTe^ػ˴Lځd m!2Z+I;YL-DQ@F v2i') S@( h12i )$SH( hH&L2d ȶE-yI&dB2d ɶE! Ap/`D /^DI|pw45uU0?OMͅ \wa<+䦐7wX:J+?3rVp>J+V d_ -YJvF5檖9ȧ+N0A}T[ 7CX% gQZYdtScA\ĐVuҴߜ葈ʨ!6\n-%^(zO,+CkZŋh6KQ:Όx2Շ++5ZV _v|2Oo4ީ9^WVt c8dԵ{;j720;(k-WhAX3^!RA" `܎Bk裏Ȯ} x3Ȝ=gu bTƌ]t0+ܭNЩ1ukz'}@5ý08jxafF:1"r 8#1[ˢ͏a @Y (}m;[emJ%t\&I#_we.,xdr7Z&u.n7/@*oJ߽&Tjߒʿ{ERwO΄H*.RŸ!T\RpH?? T\RpH?? T\R)L.R)L.R)L.R)L.R)L.RrJ??( T\RrJ??( T\RrJ??(,.YR%,.YR%,.YR%,.YR%,.YR%l.R-l.R-l.񏼠G+v3ʳҀ ޘ|6;-.ĞFWL)7G WKY_ݓiަlhW#6'Rf+ <{RvW]]zW?]oh?7?\ipoj8~>gO-,>w Joo__YC}f7nbgrI2p?qE3r6Pt^NGŅRa8g6hW[xꓓ\ԿK!my9n#A.z Ϝοy[ \_KSlXqV<^V!αk(3̽E߿,o ;K㕏fYEB7?M?69ǜ #k6U˅ǒ._i7EZe  j>r u 893FDI96Oq U]mE\\Ke蒡iy,·ei@5{NdOthJQ|0~o*8{ ;z5 :` f/ ulmms-1.1.3/data/projects/Shorties/sv-Trance-Startup.mmpz000066400000000000000000000101111247673406200232420ustar00rootroot00000000000000x]۶ї3HIg2ٝdꫯi&$Hb"iG:߻IOA|'xbw\}q #^ :7/z6[7v6d C1V3<$v쇯o.iKZ} Gywy᯼"otǀD@h&QnH7hcG1 |X: q<^&@ CZN<_Á8P^48sߋm#!w1TЯW<@@yp6dA5qV@נڝ97.ar ϮI-SRI Hx@v^;^/Nj/tbqY-%(h'aͰ Y\Yg0#Ё$%2"\aUb['ΫZ'.G+'JصQ`'\@ `")u:TN!w-TwI `4>M5MpZ^ ˜fZ:7.>ڞd 䱜G_X87Aw -\7S%ŗ*WkXń?d wr(0S}abnRpPMvcQn0h;gIsv1]L{-c;=$f9΢'2LI"LVJ\Q="4&4kPY}k7,J& B8xu<#MW|E}ܶҕX4G*!A5uO+ͱq8jk:UZ]Jn7S.'-VpY\m4b4[hbU Yʛ)) tzdh320<葡Ghψ ꑡGjER }gG1>,Y3 )<(wa>:8ߐ>"}j>ҧ>H#}yOnOCBC}ޣsz,?}x}=KѷO,I61ٴjKF7Re'UkޚָŒe'UױU]缏rvͬ)g>wxc+c==Jk5N֑^y;g|Vߵ7Pq>֎;W}%bXmR;~Ɂʱu{XaV`8v V[ Vp'XQ; +jXQ;JJxi+j7X`jV;Š`Pvj T[`E+h+Z'X̏8X1xX/-uطq6GtA 酩(6Ʃ#U!T )P}h8 U}*\U6Tit`GZ&RUsgRc"xWmYI>lՇ䄭Zx 5o'+{9VZr +{+|"Ի`jigVhb3R5kq5dl;Qt!¿w!r^G&q&~{kFK3̅kmSXf|ޛ齙ޛ齙C}iBn˒8={AI.&T M!lw;%" ာ.@TBY)\H|ɇ "ZӬs*W>%ts瞉yQOJ 9/b1/kgmǿ]~L~L~̓d ֭tb“25|4=NM|l<҆H!itJz\L"zS2FIlmi>2ӊJəZiZʭ0M+*}=Qhg=,Ng=iHߒz8`qz8,OCu*YgYgy' o,3DwEvt{}tHѝ>edѝ} ݃a[v![KubWr P&`M$'?ӛz;i`W6S* Ћ~ΆvSwټ'Ɔ:,fe_occǎ!VKXRSʄ5~d.k9*ԅ|/mx+BjV[WO˟9oühY⌉e.0jx\8dEstO$el{ *=MW!u4ME}5ThZFLf)XJk4 f6-i|2Nv;wUJV8DyUtVQ% "j~%}8D")j ?Q9Q=Q9f״@muw{/O]J^楫N˽tܭ+{OށT7ۿD&T&wmbkT1פߏz??QT7~)~-?_~TӄI?,?,TBR K?,?,TBR K?,?,TӅK?]TӅK?]TӅK?]TӅK?]TӅK?]T3gH?CT3gH?CT3gH?CT3gH?CT3gH?CT3gJ?ST3gJ?ST3gJ?ST3gJ?ST3gJ?STgI?KTgI?KTgh >^?9>"@ǧ[7 MBigfc{>7!Mp{M!w¡S6ca=Љ>/N:(eLq^cODccW^y}Wo_\r}}]ݻ.`(?MR`TEy88Sѽ>Õrۋ:޸Dq"f4|&|!Pg&b%;Y?$ H+(s#/_;1ҝP !އvLa-gJ_<"jc7xaM`|qW2)@7g68͹g<3T5BK*\lpxe|0X Y.Yƅqa9ÏC[N΀3J`;+tz>8"g Cۛg6@t_nA(^tqZ+{h~}n#u`O@f cEdLo(r} ǭ>"loT ( ox .k#C{&^8# ~| ]oO=ނ3λvO^mW* >g  :~f`;Er d9|Cn);4w)bYVeu)cS^/lmms-1.1.3/data/projects/templates/000077500000000000000000000000001247673406200172375ustar00rootroot00000000000000lmms-1.1.3/data/projects/templates/AcousticDrumset.mpt000066400000000000000000000173621247673406200231100ustar00rootroot00000000000000

This is a basic acoustic drumset which you can use for example for creating non-techno-music.

]]>
lmms-1.1.3/data/projects/templates/CR8000.mpt000066400000000000000000000655011247673406200206040ustar00rootroot00000000000000

Put down your project notes here.

]]>
lmms-1.1.3/data/projects/templates/ClubMix.mpt000066400000000000000000000217651247673406200213370ustar00rootroot00000000000000

Some drums for making music rocking the club!

]]>
lmms-1.1.3/data/projects/templates/TR808.mpt000066400000000000000000001017511247673406200205530ustar00rootroot00000000000000

Put down your project notes here.

]]>
lmms-1.1.3/data/projects/tutorials/000077500000000000000000000000001247673406200172675ustar00rootroot00000000000000lmms-1.1.3/data/projects/tutorials/editing_note_volumes.mmp000066400000000000000000000120321247673406200242220ustar00rootroot00000000000000

How to edit dynamic note-volumes:

1. Open the piano-roll by double-clicking the the pattern in Beat+Baseline-Editor.

2. Now in the middle you can see several notes and at the bottom there's a line for each note whose length indicates the volume of the according note.

3. Try to change the volume of some notes by changing the length of these lines with the mouse.

4. Listen to the result by clicking on the "play"-button!

(5. Create your own tracks with dynamic note-volumes!!)

]]>
lmms-1.1.3/data/samples/000077500000000000000000000000001247673406200150545ustar00rootroot00000000000000lmms-1.1.3/data/samples/CMakeLists.txt000066400000000000000000000001241247673406200176110ustar00rootroot00000000000000INCLUDE(InstallHelpers) INSTALL_DATA_SUBDIRS("samples" "*.wav;*.ogg;*.ds;*.flac") lmms-1.1.3/data/samples/basses/000077500000000000000000000000001247673406200163345ustar00rootroot00000000000000lmms-1.1.3/data/samples/basses/bass01.ogg000066400000000000000000000115041247673406200201240ustar00rootroot00000000000000OggSTUU vorbisD8OggSTUK-nvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M# ?o U6̘uۨ:c7gn벭 m ʾ.qp*˾ʲۺn}ʲq̶-p7~.l1p p0 "`P1R B(Jjc2ƤTA)BIb BƘ1)J)RZ+JiVkk-PJkJ)-jlZ1&!sLJƘRJk2tIɜRJJbŘ1)sRJ*1RZ+VJi[KbC)Zl-Zb BƘ9)J)UI霓1'Z))9)sR:礔RZ+J[([-VK)-Z,bT[(RJ[k XJi[lcJ)RZl[kK[kjM-Z9cPJkB)1jm1J[)[ŚC)1RZ,b9Vkj[)kVcoZTkZ[o 8P Y D(s*PJsJ霃PJJsJI)PJJPJI lДXА@*`RA))F! R RA(%Z3 Rk9gA(%j RkA(%Z뽤Rk1|I)Z1Zk1Zkb$l=ރNٜsν!2<N Y d dR RH)RL(c B!BH B!B!B!B!B!t9s9s96hJ,PhJ 0F!ƠR SA(%klcB)c圄Z\+ Z5AH%Zk=BJ՚k5Rb5t9b9瞃Zs|O-֜sν჋1לs!d5{:j9BkA` +IgBb9 Bc9Bb9眃Bc9 B(b1眃B!d9B9眃B9!B(R: BRJ!BRJ !B!RJ)!B(RJ)%BRJ)B(RJ)B)RJ)B)RJ)RB %RJ)RJFIFEh…АF5Z+RpB rci3qCHic@iRAB A m! A%@DL Paqvq] 8pp O 78AAqDD44padhlptx|OggS)TU )%y|qw9[FoB nڟ *K<#ʈ Mti}koFIN8J'4eJ~bptfM#h`]A#CM%-'"n cރ."+^.sci.hawmJlE<S .k泸܊6DȨRцwX3i =txt,4P(Gb=פZ\Bjº Y@ZGY#λTKk&wp@z-fZ! tI^MB|a*4THeɔB{(Rg*6|†؅):ƒ(&d (X^Ok@nTݻkSUr=jֺ_ְ4*򮐹Qg'}?ig?,eQjdimQ?%dH[Cj+Pz4( 0L:GYgħP.n+e4`*gC_ _0gl)JB݊˥vJn#*?:ۙ܆inDJP* ]`0& (@0@}GXkR!ܫj6^W!1&>-mMﻰwO"BeT7KkT5tcB؀l ~NL,b1xСЀ A&<~Ǽb6l{9}7p]$7˴M?_TbX8|o-Lx*_0/ѢDž0~y!aX^//M//~! ܘa0B^܀(,t@lmms-1.1.3/data/samples/basses/bass_acid01.ogg000066400000000000000000000161661247673406200211150ustar00rootroot00000000000000OggS^.gfBvorbisDOggS^.gt(-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M?7<=?3;:9-98=0,559,85RRZhAP j4&#*G&lc74d[,R-})]^"RZ5*jg$+%W@D[ m1ƩU R0QP␒`!DB-'@N 񉉍$S4?i~("z2UPj[ q3b6?Ց!Aq`\[3{mx쩮djX$cv1$&h41Ƥcܸq^*1MgV?xfSثaXLŠR"cYVTLCRQ悤ԠXbGtehI+CKO*Jૣ*#FAB4bG8"]M,GN,Y咅 ?TWGԀXcv<I IMqKq-:mzaU{P)H"aIBDi$cTJ$CGRBc YDZ,ʚ2(%@ĈZk }sy88(>tGsk=g`c*S$fA$1AaF(0$Yt=ɢ dD Ū֟a ?,r ,O"5Ö'akt6 a{()U|F$$ 8),d$IcH&"c>g86sڰ pbE-baưgj# d^GbQ\|Jtb\NLeV 6PH`.ÈႡSZHv>I)b2xTau3 @ܨ* ZF`ک)2R*Zq&:s M5/Bi@C,V 2Τ+*5FL!dUfUJ 5"F5 DMMQ)JZ|OHr'VAE#@(j \ክ2 HUhx)d inUjDX1j0*[ ń&*Mpg/ i9D_ǵ?00mq mN JMDc]:ZAbI6&QJ>;;K$,{9`\ D;|KΗJvUQDb!Cü(' @I$":5i'lP?5i'؏J*5UQ);F.[0D1ˆĨ1"QA-jVUllƋ#&"vA&Qzސ.o .;.oL>\ B6X6E(CV2۞o%:g*TOT_-`ncn> ,D>.p >۽*G#uݫrd:PPc < L`Pc4ƈ"1bְ 600^(HIa;C2E2E0Saa #⊋Dk. 22 7)T<$룫".DA…M`~J:}kId5Z&CQRK{y#7k@[;*($@}㢖]hHl,Pfw!7[J4vBU"1bkk{{H ˆHDb#qVAQ$(ql0ֺ109qdpPBQUFrXĒ@H(.W ," )o|u$rIzוavzzwU<3~P`wPbSCOx[|z @6@@my"-*7KX+$3QHa& C5"`Wհ'k>>LP8ɤvJq8!O,+9APt CFd0K_n_k; d,dX,ze2`8B >.%-9iɘ$ P24q' Baq.kRuGdQ Y6F#P\X睇P+Һ! _ܾ": CC2Ue"ӂik4b 8F$u "AbbcHaI)ICK~r,N"&ERy+('&xCs^[vA+ r66pZNſQ$Nzm~QW\@3oqKӎZ?7X-kCjKZ: s(رh  Yn~u7;_FB}&&LU!U{;XĚ*"J$RC)qd%|T]|_=~D(qh AFשP]m]ƶ@6/S4JW:"xS)m9`^/X7u<,U|3e A`)m7^'] -#N 򶎌 &cxXaUU5S1BSVH4 m;S @X˼{նzLީ0"CXD T`$ ;:&x@! 5dEuvAqD-]]w J=U:OR_b^h_.u =*^8μ8@ I4Yh'ݶt >{}K,@FiTUE"Ml9&.!A4$0+E! ΐMl`٢dY@(5UFpLFnK 3k$2` C'dV ' 9'! nun0;7@{y GLܜ]:@'sJr9A1o@LNAH^'}_0/FNgQQUU r!92\, ibVH!A38dJtL1JF =X׫@mdAiaͲ&LU&гxTY$i>ɐ_.g5-0888746073315-+;35*.513+.325.-+37ݬҏgy$ s=iF!y5%yRl%)T}TyJ*-vT] Kְ0¦{PŲ2[~=O0/Ѥ2CϤ2 6UWBf  ƙAZFFqDȩa8ULTc-=j@4TPԈj&H:$Δ/1dm~̬яj@M0_%C $$=/!j'FL.))"oSO|zR IkEI{߼I%LdL|!2O<4@ PJcJQrx JڟuN*\i?JϬ:CB)R뭷pLlq~vYf P Q "9 6SJXT,B NdN:xd*fڬ]LZJ@PM#L1icX3+}M53A1*!YLf+`H\_o`Q!@XD@Ρ nwKt~t?P 5%Q e("5`;i=J F'O+'=uSQ)P Ƃ:u\=\Ǖ@vAb\勇j~PrbL8=zI;uW|"#"HF&)<4q(Ur8,w|ϮnDd"\SǛ@j& Q":UHp l{}/ jJry\u77Lϐ3 $IwgllMYPA `ϿYH̀ ZlR(bb ?j2 S k&E &$66W@* &c8a)k^ٽf*~+0@OFM", /klaaFe@A-*jo0M0H||$&U$HBhVn6^g?i:6:67Wf/Zm}Lvȍ:i^F1\r-b]4'zNF+dw%h8ցZTXO[]E)-!$!a1}nzu PQw03IQ&AU4F11DH ^QXT}9@@P9dUGDK[cވ[}rt}$!$`{WLQĶ0<# 轃A <czKޒJشKK>t{t&@-^;\|~c@RM}L{HIlaP1 l$+8LǓX;1(^A,D0ζ+N `a"q>:^JF2$r`PԷ{F&se켦St5oj[-E`"vȈ*yc2'Lmf5gԾl|SF U_mZ5u&"{ٌ+Q1(!ֆ1|~l*պ{gTB抙( BɄbH%*8E2 z?9.HXf`qrJ6 )= 0x|  1H'xM?y[ 0kϓ˫1[0P,xf'mf 3Te?w% }>TC]G-fj1⪪@6؛"SVbJJFQ ,REIYA$KBel)cl6BuڲX`F B+DjFQĬH "qkxaՆ8>v DNyj{=lٓ͌WB r>@[(RpWO$m%-!KN |~m60@[ȅ LyaTU[{&PV&!DJDq>;ތG5VH.Cm.M1pn``#WWkhyw ptBĸeXZ k\J 8ֺ w}v2hU y΀m9(lʌr@fTf:Կ)Q[i64ƨE(bh(': ¤ vpR &FHYģ- BQ v&+"N`Xml$B&H1aP``ɏ㍞H?uXv@"% c\P5pOr][._]' F|VC,>9?"^lEߦb/65{S!kB찄ǨlU,( 8Q$E +QD#!@tTHQqlcZ [aXb-@Onnk @ ,L:HI`ɐp@Ws٪ }Qٗ9>fo+1i%5É%lv":,QL~Nd۹NtNv0jTՍ0 ;51-v*v0&%l(!` ]Ll)كZ|Ǒ8$^hma4[%81;r$ a8Ke(lclkVy,Lk03z.hOJd(*9DfvE`e;ޖU9%a6p;l LTNc@d۩:beb+t0FUYcZ ư5R ;$H& !ة"r"FIqLdǁ80qE mkY{"!B ABRn *#0ʦ&@`d;t*44>QF8$ 򧰕şpj5ӯvm&M/&PPWXaHE<`>2G*j\  +0UY@v;C-Zp$#0qV+Ĉ9Fa$p"Đ@HX`d!7 !!\B0}X'Z4cCvXDHh|51(4yAwb;qP-crQ7]\qZ\5E$l! >,~Yy0 f ne0U10F4&6jQ$h$ cb@2 %AL\B!:@ZE` me$k,ZWwkAe%[ lmd׫AZ9.>*Z)'  5'؎~ed,/q.xuK[ ƒr}qm..*ĺi ʢJTOggS}_.g?ڞRP;bo)t=:˒K.0BàѨ'h+GD]bQ J<ċ(Dq,@jp( L%۷f,fd;0$;&osnWgcuɰfuI[>>gxÄe* ɋK fVkBp>u5ҷIh > uSLQ7 uSLPiT FUM@6VN㥸p >F∍h$X;E FDR0V $,WJ"X`J"&u^e e#[@(zFxiPX/ ưg Fmwmyr:z-pJbg--c߅+c%͸$O2*b.e8Ԉ>sd g@}kzgI,`bCQ4aU4TATAlL$8FNC ETI;*FGu E%cm2kAIa+5ĥ'XYLnDR!- jfC2I{x}C#p Fl{kF ?2v^RYx3 ULe-[~`:wBIld$a>3LHmgn9<4mD <0!Ϙ*S;`10l4L+bQ8I(EcNR턕Ɉ BX!vyo(K\^fk&8t)hܱkКC>&,:ތageE:wCǛ:23IeɁDPW(i2"wx~;ImשMMVdEAl*QƒQT (b#XD cax+ ,HV&45\kbK m#@#+@JX">t9 2DFD% ,# @]k0Ўl9o8KI3NM*&z e5TJwMj|]5{&e2mҲlD"bL qϺ41qUHфK!%2*F.NW ,ڪqC۠g[~$>96#_66(ȸ۔uxS* a&{Lcd;B,ߩΆdQ B 8`h@QU5j1Xu ak'$FBN($I + eg|,9g1`cgmȉ1`Q6N0^$lB3I$ra,HRgq)ٍ0+lA&V ٞx,YbqVt {KOAe[W+Y6Zaad@">?,:?,FQEH[DIO5 b FAIh&0T0P) ;: #Pr:k/,#> YFX1(xLᚅ#p`rbK`10 V,Zز,<I0ǴǟR9H{V+PXEhC,o9F6H`+M3ǀnɂXΆ(.o314_xTU P5MTZLOl4J@DVTTpbT[2UR@&"p,PIPD@.m+fu"5},!,|rYiP, F!$?0Ia҆>U];U-x ʚp4jY㻗"ZL%Вϗ.+-g֎;8^kgM.Tj̞)mM,̑(!fBeiZaQ5c IQ" )5IcP׶dhSBB5HL(Z©+6(j(LRġ( FHzQ, XF6Ypgh YاlJbd`]~n9}|#܊ehjk"ա0 t)?e֥JFuʔE88X2Zs(Z9NMVfN"V#aը2D4b3-VU[EE0 b )HRr e[PlPPVU"ilS+HcU`, !r2] \ N0 MI"F3'eϳj#R܄&N]W==eRؙaUr<ԑ$g0LEDwq h8>*N+BZ|@*55RFU0TU Pi00,cHVL舜 g)4cB1* rD J`)@V0A! eɖ Y8m1Mb2%b,q<(B1BI"H"LȘC+x r)%m3#k{^[ EC^,2˹bq_?'Z3z *W{E(*׻Agf4UUYh /^&D '4gMMEh}m|pʚsЖAnz8*2dEޚ d%_qCOVV?5?g9/s(Lc\+x[ۮUk?̷hϼe[A lmms-1.1.3/data/samples/basses/bass_hard01.ogg000066400000000000000000000635471247673406200211400ustar00rootroot00000000000000OggSc.g.EvorbisDOggSc.g^<-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mw?ZHY [,V`AN`{?cDd+'84+|a_]!QUU@kF!AIj9[csNs:h?|3p4 @ pĄc":cL6pHlZ|iE?09 Dyelz';.. N$ ,o>PCm  eY,wzOvN\Ş:Έ15iKl[9<)F5FE$"$HD4JD;|(0psBDJ$DL \89uBRjPD]?,2""G"\[՘ڪƴ&B@!P#(!N~.gӎڰs &R$q|v|TRQ*F H`E5y]3 + '!b" Ǝk@oR KSc57(3,0q:`QX`(V"jQ{QX,i(j'I&DCE"ezvHNNDé,~i0z9fI 6:d̍5yn67&]ĭг&R&*.,8O( ))*Y$ d^<Φ>(g< ,aT0 g 6\ְ["ؚVbi#(f"!F!l ".׊LӅH!$ $P]a:Xg@q;|mT$@D| 3hM{ x00N@D0 FF tWB^ж3$VQxʞ9TtEgb%m+@}v^<.&T`qv)5j>Mnt0j&iXmE[lL ChE 1&m S$N/ tBF6F4ݶlv!GT\-] +@Mai]3t^SyGKs5,5~gC -f^kln E H!0><*jcj BRUiCaa[*3D XU`D&j01u+FX%˳QEIk~|o dHJ@y؊u5&N&-Uli IFP{.(/⹔eQb E`@pZs$XHJO1^<:GpMQ<:GpMHV)0P1 0lCXؙji1mTAmXLĂU؄v(A`Ā""VBP@$`X/< xMH$>JTyӸl O Fm’'}v[K ũ9l\ 4r-#Y0 J 󖯧KsH!'dMd>v.#@J:aa'b s @M iVTQ[P,jA1EMkѨ1IUa`tH@1a&dEo t&:ޏk@ l$q(;>EZhcUC23zHZ\}FWu @8x\M '%6  v"EFNh_H0$$n)ӆN0 v ƊE {L5 {ðZml5lM{@Lk$JTvRA(k\6 !DP]O$mc,lbBؖe0f룿onKc4otP4Cdڷq /n,l@$ 灱 ˉ PLc0`$ "G삥Q*AF`a01F "bEUU bX 4S+Q8"& @Ir>ڐDjB155',_ko_JJ@aw囋ǝ$,bq"-) ]v-ڙ>L,av@SnR2Cm0U> :룑008Ffac0(>{"VPr4  mE%abv@4PP#$@6X FQ )(E}ݳjԁIgf~gLGk@TU;a$l?AD$$hø~;iHw%`5?xIVL "Bێ© @2  N2E#ALH@DHK[10m `*iWlm@-ETEQ NUTm@5CHh4P`pq; Q@"Iz+7M|=zC ~՟ɛlb*#PY'-m6 StbP npw0#e<  v^"Lx|N( [xQ1mUlLL1a4QZH$.dZiI \bRNH!a)8Kd* B,0`pyE2o$bZ e)B噰Y B 0A_S#a ̸H'._uaBXQit3dt5 hO71eqNsl&+pVj෤LDaE*#Ws$ dv,'߰c91<+XҎf0 m(;[;0T1M1,UUEbZ 5TCP@$0%PeTa9 elFRb@$`\&;'R%3˵>ĚYӟ!aˆ~cF}CP60* hvW{ɔ6~'a,/%1$FhCm@. KA0/J!R-tN' cFFiXl S#1X@ P6b"!#F2A@B:;-!G;E*mc$AJlY8:|r.ǘCսP"G_3<5.̩;?LKѴpyhFpB^P8ش#SgƊI,-ɲq!(҇7҇7$"&™3 ։16 ؘ`cQkQc6 b mDZHX@B8 pP2`rb,).t.`)1$ 2tn ,yEmڵJ('ig/K@tҍ,.Vl2X,pdSX &Sa_L cd &q aob B5R%a' C1 @Q#ƊUAըFEĨԪN@$11) YBb ߋ/aH˜uN$W>nh:^ Z9Yj:(+QIe0 j1,ְv1aubІtD'--Ë{EZ; ,oyY@RrFB P$E0 J^26pP26p:nS5ah'a1QTبXLPPDŽML" bA cB~9SM$B9Ƅ@ӛp9<R#ma PY4!L[;+a*ڈ(iZLj lTbid@ Il.7MXQ׿N7akv(^0Nu63cTmo교E`ĆO=J6/@Fγ>NibX(L~ӗ/6OggSc.g v:u `cXH 2!q0,h'"*V@EbkVlCMT`Ņrfֆ<0z(ew.z߈AH!}5UF4(NGWp[f~Q<DžpWI;V+@@1('Y& B k"b1 !HF rbL(R ~ ~p&S ڨaa4p Y԰Vš H( A(qXߗQ@ 80HLIIWfcRBp?ԛ}hkFB$fp,mp@DrQ0mq=i 3I]^h,eHWo;> :ap)nɤ8`  CYl5Dji6@1Ɖ&qh)tbc0j80.@ ǖN;X њ=UVPF }ル"*H! U~R@5|V P\ɽGn0?Ѵpb 5PI(E8m PBȠD ` v^> :>ap)1<0`40# Nl^ ô3Ĵيjة"JBؘ * gMm%_H a@kmO;c^ne D88[Ԫb!@g dq8f ᖟK ad\jK@(i0B´Od"%Z=$S;q|`1^,YT1@ "(5!F>&0&! c0 Fbexbg1-6"bبicZ"&ăDH "$p$II,!xVZEvZsZ0ڮ!hw6RpvDlQo !0dK\* p['&QIp[,mA11AfC1 7\[DJeV)9c \XdaQ<Q`cQwTZNG)"J-H""ȘNA, D%>l]Y-}W3=h=b?F -pw|ylvڀ}!@  {mQˆfr9r'<"$AQDĶ~N1u SX",3;N,d3bo6!V XU7 DD$F!IdpJ H$M0+2P,d' $ ` ggx+?px38& 饁=˴7AW;DO#+{F` ~ `g2aLUn(G<`pB]] > v2gk0 v2gk[00Te! ;bXTX UAU1F0J0ƇXAr\,$FѠ`T6>w~m6B mbNiaش [GyTЄpŅ].|f{XZ/Bd6./X Xn ÖcX&kk°edH$D4H8 > ,1g@dp)%Ob;`!E'`[iia I p&PHMVlɊ /;PX!n Ig{0J" 8a 9OdF@d~ `ɊI@ Td JIq H%H]x =euI$miZc ihCu @m$c c ~ ~p0I 02X8Cs#bgPjV"NR, 1aزr 0[@BaHMH2jF/0ŗD%6UCݤZe/nWyõNŦz*!#Dl'cq|Ǭ E/jMe`R ˡq[:N:|VtXd8Gv @`( ăI1.M/åIq v:, LeAְ8#AD % > !caD| t, ` 8a!:g@wcp/!;!-I F׉"z$# qX HK87 OH(>ٮ  "~ &Wp &Y 8Y`TA0HNLAԉBHL($6Z(NRllLcDM[8) L[' 2>WGgC/K`$/=SCbG'e7{aq@@5xL B@HFxI~jaP bo . A lj '+R&=;Lbc3 Cg)cӴ`oDs ؎ h1Ɉ%O,_vac$$оQ?+?C&[bOEi;62x4?c#0esTY8aIm@FXI)<7'3V0u$FrS d@B1i->+$ Bwx; OggSc.g3.GS JE*H {d4`1j8`ĠEbbVEm-b *VFFBCB""dc[D'0(ED!1`dip2ڔt&2P$ MLA1@V H/2"k,j\~./݆$ $%ۢߧ04P7 <1% ::θ&% @b^,ή,P,ή,pV{&L#Ð5 `kA bUP* (BhbcbH"gPD,AF @FN$;6 `웛R:цa*d?([SrZc6j>kOMN9ME8/b!rzO=&6ijx#\ ]^^ğ^Rviet׉YBN08p ("<}?,jޗ b 3 F1vʂbQX L4, PRRHapLb"!I@%@ B B@`P #vftE%$dcdlYXgB\q]u}˦l=G@j^nR yeI Lz%V0xduÝNԐ7_ =bM*=bKT l 90a6؉ 0VEbg0TD1S  (!IQc)ĤdJ,P$K 2E\ؠb08 )M?V pd!~n0N5F ৈaopU!R1;et--:4*4=S+j10x0 YT@0lML[aZEvvD/Dx&#E׽Ǎ=3J5e @rl'WC /r:%دV}*XIb:lI(md!jBrB0Ѽ)u5 `qmj/x97mš؅'$6 <]V#q 2Ra O 0MPQQb! >h4 h"0AL8 B  >ۡ-B l BAI!%`3 0u^Dj-: Z5eXGvw,0$djayNIbc4(8)6kO 7vb O|ZN?n H #$DjR~Jܮ!'EE`+%SJ<9X~LnLcrseJ?- axd!k50j=iZ!a"'⨃#I%Db01JBDH_7`r*l, aDi`!/QrBSkU.-qB(iI~`d !a5F;IYDl '9DqQ!de w\D[kYfdLHʻhPP^Ln qA@-`k" X*ajc"V06 >VA@a4.@0F$1RH$Y!E/+P@ďON ն~e~:-ALe@ Y6ݿ+AN3b[Edb,+I_>{l7m@B%j3o- 64YBDss5YLtD_T &S$? a+pYL( >LNq(3arC .?b*t:!d8kubbE40mm 5)XDL'M #pv0=FRa0|.K w-K7+ aY665A\Yj0e4$lARp n^2A B PȀe-_X%ذ ێ$0I1>/4™(K-T1I@2 @ .K88Lm |uXQ0w!@' Fx04*ijgjTըXbFq(  (@QI+5`BhF. S9 ^&Yd53X>GC6qn5c c FdDl:H `~)YJ[tsC Iwh-է/', :"H&!*C(OggS*c.g^PD$%a")d acYѠ#b֓[bjmH8W Xc1@B "0bVdQ xu[цIx!6Ax]p߹Ps0A-` JM"@4<܀q},[`pc`ȢmZ6X5hL)@ ڎ'"' a(Y$"#D L<%!'@FΈS/-ʜGl' y 3hG4ѶBV^#|${  %Kr="0h"H*oaon<&4ȡ (i^LNi | brJc\"W)!1I VEQLm0TVEQ+!p$Q:$AcaN_KC5X :̍V[8۾X|W'wPGUA]tWXI$z٩XDl#eB^5 ]kie0;SFV0 $YB !I!XJjLa:&y;,~ƶ_u1[h@=$%mI B`1?X@ @tl1N`cmINl#d -ٖXY" $H„6 AU;@bs`@NFY ڄ!ņ 7Ԟr1Avyx'.2< ca>N!W`mvč5ttÐ@ B!/CJBeZk&τ޶2HI!A!!ob&2D"Z.v w^-^-e H ش;lh_/Xd $i'7/W"6v=Żgm ѧ;Rg>< ؛22fpv0d!0PؙjU0a qX DBD K T lC&()dc68 "&BH(E/T%Ť~k3#pCtt$ j , 4%eFo2m}ü> @<#18,n |dqebXs !cad-Lj؀b-bؙ"`BĆQ ZvIBGkg%d^o̘~DgRw.Duw.Ʒ< %t(Z vyBv" |:x"p创06Dp-n9ʿH\ĽN$$D@$^,Mp@6 oA*Pq@'2B"da U0jՈiV 1N4aJ HʐtD") D"ym VHmL ^J{wTTP8(yF,(d&q6`8gqeiZQu&(' \"aJ Mr|ylpB`l3 RBh[d &d8GQ-cd%x&1`Y \d-:}[#Nxh N3-M=_l#`al y3#ŀ@>c k!!c, ,+ % {ddp __-%IvMܖ͘+޽.)ji[[!WA}za?g/ pB-$c6@o8\T23ܧy$1<.}c} j7ACCY xd j6v! C1qaxb#ALX$dGH -E8 '0[/Om9U9!r} m;^8U'ڈ~7 22n $2c_&ra.K2`Iq4$%-IiZ^F%Dc@-;ؖda`g,2 V,@C;06N$6>@aT&)PH`ƀ[40NZ,B B)N@p_x f˲E =N@$c @ pR1Yc,$ (D! )e4a?Aۼ55hVvzbyMӣQBB&`4>ڣ_ffF$$9:VϘk 3qU~K8am26$HbpI#:=2QRm_\ N C a" '1D)EeE>OpT nflaa1c'lY;WjVcD䘸0Fѐxw HŤBKjt|NDD% !Y>ݕDxJ@<УXurDžnp[QRW2c*eOIXGp2G &[F IHHKa~Z '1 lC$I &mp4> 0 p`0FclSFM fLHablEc*фaDR(AP ˗~RA L_#%mBnӹT ( CLaĔ3IڵZrk#p c;v8eB&Au/LH u;k$vLvgXZT\S$~Ns X8\X6 ŵ3ge1' &A0 BFC;$6b#I4فlbe't(C)b,+&7D=N6KBź9Rw$c$YѶâAG]hs $ll l `GL@4`H $@ġG(j c/0>- _IMfa`% u(ɡN$N$3$N'8Y0[ T- DcжCFZ0EX lBC7=iƤYƉhH:LD -ʳ) D^ήk ,[8;x6l6q {@mFLCĢbUQHFHDGD`HyDq:q02 Ɉ, "&1v Bq_$!d  8,x+IKXXh 0]HFc$0Yt" Rxye3d)p>p&<+:ښ3ϋ6u!wˏQ`#!v`}>+i[ƒŐN ,j11joSD #rL$`I!Bd-ˑEb-,_R EX GlЯ3>0YSbI;A6>4oR` &J ]P¶ ^" ~#P$?hBQ6?LH(IMdK^ <(Z Cc؆-k;`ZŴQ1L{ڣ`@M4alX 15$RQ '!();am4_sׁcgbK~]MHK%.X: - \ ok-.p;ia@{^ϭxMA$ek8 v^ਤ,h8RdH('1ȴW8ι>HZر@g*0v–I`X;P`V1VD0D0B4hb#1 pH #@@&%ݶrT 'ZӴR8 rA1l ЗqorcDtlZ۱>4y,!I ٷEbB0A"``.s.-V$˜K˧;aǀ`NN ,b aځ!"!PB4ј0> DØ Ab @X&d! q!- A-}*|p#9kcdVͻ::P;9)ۭYky@1Dqlq1@i qN% 5e?A7]SkL , JmnN$epWZY $+j(hJ! 06ud&cB} Y,: 01-FY8 "`*BlLQGG"v Ea@I:X ہL mF>#  I!dPLPmyϤYXS ^|>E{E #OJfȫPWhӤbE|Oei!FMS \~1 8) `Lp E8HH($ nefp+P7.O0 6  .(jX(JđH&QNU]eY$(E*6DgShcQ EFn,oV/l1K&=~83 x5H!)pB3篤2gKةkl$b+0/pʒIJȒ [;nf7F"kYN*`UD#6>ƉDHPbcQl '!G@ "E$ Ƥ l` QAH8vZ7?)r!p90|;'_Z 6Y~`Kώxi#0Q!|گà Nl0o_۾ń+$lQ"VD ^-cP-cH -2f c0m & @,XM{igXUl1S !t\%aDءDCPG@ "QI%cmO=3fePon=|M3}ȧSձ.MA#v &;bQʉ$@$8_tgTN7H>avţ0r(MEME4v `em6"*XLS""J4>"(@  H e BRD۲NjsX!FFde X2 l]a.UsN&’\/ڣE&1GwW^'$A|݌SxSE;@ /.J4fOvmB@L]Rd! FfKR$.ȟ*v`d>;EGab}F_ vBc-kΘ^1PXmLC0N F"q #@21$ F!XfP&pBB A0$ ]3$n-5 9J8dᅓ#4NF@ əN`t\=/#ƀ%RA?ζf]'Tm:GvM(#`q:K1N؆lN [Q5հS{UGmF1 J 1A`aAl/l`%l J`$=RK{ج%/[TqoWW_;k$ѢzENU)ˮA (dKDlԡ[jպA@" ,@$$FIIl)OggSc.g< ؾm.Ivͥt_3rK0 ;1F1VSl1U,&6Ą8& 0q8*41H&!)5pGNі4H2 rc}%9HK°m:(G`AV GmTQ^i[]d4bahYIk Wh2&xA_eX)o`GAjFM T[qNcYm VC 0ؘHN$Ul8BKMHB'6!aYs[t׉7x-Nd^hkAi <+ҘU%4]a(0 @A$ #4@訅0=2$@>[)eZS y vX6l,&ΰU0"h4Q8H#L(PDBH"DBAb!+& !P$LbII[xɋ ])|ABlG a 0t58hSClE`r*"!7MhajM ?SG (E9&@ *m-*m- = A Șmda@ L50 bb*!b`QQ& A,ALDq4b !Гձh %dc^`B҂hq|c 6(YLS39=ۅLNQ\ Vy$έ1^prS4lXyUli{@΁TX=`E@`)m&q 򦴙0)vA (HxlL{X *jkXL@E #(  0-2p?UD r" Xvy&jebzu=uPcYBD9 2@uq&x!-^Maʐ>A40? | d.g@.?62+*142+*697)+.474(*304(*238+,*1/Ь]5lU+T̻W xWɥT:9q^o? ۖs/Iؒ 6Dv7۽f vV H1 &Hx5xR^*{v\|@+L@ [C0rT2׺tq,vEliG-31E %0 ,ƀq2P33liǷYFTPB}.{f۹Uzd g's8<;C7QɈ j1ֲq{vm/(ƍ$1vӶ}~TWU!`$A(I4IcdIV2US7>u@f\ !T'%J$."pܬ5((0b,*lXSE˩(UIBjB b,qQ{cɬ]`TT Bbc+F[͉Ƥ'* e9sskC?qaq}tbn'nQT 9dUQ^ aa𦲶"2uԊֿHAHRBADц6hl\΁y|&̛,C ĢV%|wfsBQI;az 5}~4fB0F V%>bXAJY"JQ$KQ{gMʚ:Xc,x\maS1(o |>[W %(.ظEZ~+Պµ]kkeM&ڈ+Ę P"$eb2ӕR@%rNGj&55j }!$9~`zO Uzatؐ[N:Wj:0`=<+r-Ők_rB{h_4U-:~ьh%N3 0CeNðZմ+j I(ƎE1r4L\ {U*0y׾׾%<'\8a4)Zb¬xЬfh^ K5ܟtڗ+ d;@{B\(J*.}3 |i3BA %lOAp/UM;m>$2APN 0 m2'Q5H#cq!P$!@(bR-1P}ug%/9 (؀ DH`8&1 ـ̔m@I{~g‰ljAb1Lc@qFpMv-]XpIB<f8eW5+!%D[' |`3#Q`AmQCVH0 01&8" q D@B2 pM4VB Hd€Bb |t& I ԀC9H =žk}M`cJs ʰz*з O# /,g),GV#H6kF,[bNU5#M-1,\N2u0(bg(`i5E!Q+A (N-lBn1zh^u_D( I4v/6n+ŇE,l3MTckoN׿fP)?WW@'gTB2H6 \L,Gq0"_մ(_$\l0 ;jocCTbZCHQ8GCřhH"@8IhDK +[R,60N4FZQ5P;1lU1L1 m)B '!lµ&۽ͽ@7qEX{N $G I8.:f!rU~>FfN8_= ﱎ)4=7QC2ebHKXƓY~M%[,,H|CnK1cFLִ vFH4DM4"#'"Q8@"D!Bϵ-(D'P8ZH (wt/T4asz=_(kZqr.U1%ڿmm[%/oa qԊ,1O2[+k< 醚hޚFGvC$5::&IGr aXl0l5bcbAllm{&Lu!Hl(KH *&iӝ nc%G52D} $&8ȑ)b^VO#?U Q /úJ'J2אG[ 'Cشz`oIlJrBo:F IƻD=˗F|b~EžKRZ#>L5HBid0FHVDQU1:C18N&(8ԨQh)A L"6Sag0 a$!_뜒8-٠`H`p`!%uu)ԧxфsչ7v׻z8z {-ol@ g=!Lb6 >EGPěM㢣^~(_D\D\3`0aȌM0 [U{W ŰT5 $abbp(9OPDecccp<0$)@`9+vKX"`-2$EGʮRpf+l;n Ph_*3yVN3>ڪ1,cUf3$D FE\k%I̯hTtʵ_JX l`f2Uf`0*jؚXT ӊ`bFH'!B` aj-nc5J{6Ά $,Qd '!@B8뱆-HFEK&%rr)VlROYj~33N kƝ1L P"M-1aNVW&8x"IU4Q|dH Df lN mQ9 LEW,v VŊ"FJQEb5 lL X-")q:aIl􎃋o+͗I 2@F&'Bp2FRYT"p+` dXk#[+B$0[# חN,z%q"(ZFEG8$*FEG8$*Xΰmh #RƂVL45jV;jv8ńH1DTFGHBSۋ]+ ]rj  lm(B2f'QXc/Xq9~coXc֙׶m#DbO*/[f6X[J&ފF{v<ĶQǞ1"_F!d- 04L$aXjU"*Dcb8B HF$,JR^mJ0]Xt9g2!b9S,' dMϪG7֜%͍F(67Y,$0 !e2nRNk…T@peC}nFO` &B9#G\ D#G\ Da;hjHvհ1АD Ja#N4 @@*J ) H!@DNY۶ks'Vn[$D0 8}IC(J(&nQ8#BCU ?)Vcmv"TJ;@+ͯoμZaL<_<ߌފGF% >KƉ9\ 0 Mj U& b;i/b*LC-`ڢ!$XÄIJ +5Z%A ?XX~Ÿwn4"$儉K0Bi7n $loΪ&.ܻlsrÌN A6MN{ ŧzC"G$. OZEH܎vB04Pjk/vjg1բ"!+>1D k%6+")@lE4&(Pg&p.9MOUIQ_1F{[%Im7N uIõHu;:j+$6fnc_((B)(U2uԱwܝ+;S»;ފF{VC%>(K#bu04NTÙ8Q+6bbo` 0&1X!abE$ ;JOttQfmĔN4rq7^= /^V @R4*& E,|=j4jf58 q58-t5VGg PN@'`ÿDwD"Z;Fe#(IȻ1^ơ^}H?Z4C!GdeZD0& cEX1QQjZA4$(;Ea$c B1ط..DG@s?r=5 !br k4 &)[FHG?;f\mXXSL^\\)6N/대O_@ B^Z)v]騌x&N39qhKx1FF[' ` C9TvXjoaD ;a1V`DD 6 pFo~\\XF{m6+%%M :RH0I8>o9 pT`)<0FlZ^&mWP(7&U! j_ 8U xŸS@r/OggSd.gkwފ&~"qmEGuH?dľFf@' `d2* `ŪV jTZXE [ `# 6Ila g-9Iu{jJ8d'}]|/f# 'P’ET$e6W $(<ڞЬ; PZՅ.jC"3~4R`E0w$0*Wȶ"{}ۭ[lszI_H,qhX8׫%o':amxEj1δ[5D8X)FHH"2 DT$86 ib ~ݖ:&:šjK~[c^Dö-)M NJjD 72w@X8)aИ^ m,I"y]sg᱘(boa7+ńD!ଔT޽/ xhP8=otb;Wq"3jؙ&FH8ęx1  I-H#v@Hw@ XB ؓWE 0.j]ux7s?C[?b$Az%%krdDHrN+IRș^KaފFEG>@$1QёI;2:0 ېq"Q Tlm ;[ð bcb1Gb x8~/" v[Dv KW;(xToe_MAy&pJVF`+L bsMQNT5rjeRIo 7~z& i<߼L":P(@}wc܈`#+>P~2ěEQq(?DHv9\I0adAFMZMƢV&M8;6TCH \?o2Eү'AR$ r( s#,&b}a'=B}c1V";зu7 uCZxwivoA F8bފ&}CP 'MϹ _HQ d\t:ax40CVZ5ƢaUT:Ǝ# 1V0ȾZF& 3b`$L"TFM .r~:ɠ:ͩ^4K0XD㤔t 4:[mbBT?[:n%}VUn @nR``b<9q_)p>>' qh:~bA' ðQaT$@TMjNDU`HQLaĆĀLA{meX]yq.fM_K e,BvH#ٵ5$$+zŽr!:f\7y7*7UXfUP_2\Yoa!Q JR!m!ފ& Zʹ`{ueYB;ZGqj0_d/( "6 FE\aL+r1;KppV E쬆iXbW4^񊆲ADxpp(^[¹pVM" IHL"2"ָu>?Ƿɐ^0@"Ak쭤94¦~: Q@AfB;N gB7,.ofuo4I94ފ& 猵X%K\+(3bj,Ȭ 3:!G#8 0(FU5bmH\c8V"ā $VH(–@4aNlN +DH@v2(Db K4v%퀌e7 &Va~ r2^lioox6 g)ӆNl![ڦn EV% BM"'鐐їFKcI$.—ǒB-H.c`2F %{j^ j b*>TF$s_r.[ъVDcp.S]$$q 8#`PH|kY @Md{VW~+ '#A$pB2dPRJJ%#̻hv1mz@1Tފ&BD?,fZO֊&BD?,fZM:DXꄇA"cxV-0V! D%`)4ƉH cq<"$ vӅ{] 81!@ raJ ;9PlWJZH&YtYJq^d9k<.K)N2Q!`3g;!x j9UcDXkcCc:B#ax:@Ib 8I!%HQ1$L\~sg <};@ةa=:,h,:`0T픷X h68!r4hފ& \c I&[dk,!Do,dLA:dm 0D k,*&qA$8@D4(0 DKswq5(ANE$mrJKGj21 ~@'l!@JMܩ_cONjAovdN;+w( IJ^?H)s>ȡ bd &§\k ?hMO~"NDp%tN:AfX0mX VVNB HcC)D11G('2踢#vמ~&bIJuٶ2,N82zK $d b-01I H f{ g̴Z>FsKTpf]99RE B:7F9G/\&K^M2Y!]vaa ; ZQbTU*vb $JcG"HGQ$`%p-1mZacQ$Iüp,:wܗاQ% t0y[or2ru.ezt.=ob$6MoZc㒔d9AvR R?IH}ٱ&N!|!MW4Qt5 h&[!;A&LEa$b1EU1MS01E 0xEC@l$pϯy[2C+`qd7E3##^ÒR(&;bJHDJ B\u*2?4m% K5t/-V9hrBe(s`Z/ފ&N)B4ZD){VߔKIt`1 PQU$j;ӰX- cba p@4.>a`pH&b˲73s߀Q#,AYlY&2jAV8oZXYz<ƈXXw0sxM IA ;7bk2ؼ 8B2 JINyG'Q\taTE ;dD øXEbbEBّ@!1p va#t`BYua``]VQj;@朲y ,#QO؄" bȁY` T[a<~w 㽽UzNɞȏ˟ٜ\*01M]~܄´x8lmms-1.1.3/data/samples/basses/bass_punch01.ogg000066400000000000000000000113441247673406200213230ustar00rootroot00000000000000OggS*"2?vorbisD_OggS*"Wc-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒd<Ӛ" /D9|~Cq( .<UXon#ELԺm|mkzOu4;M/cLMy~r%_FcDUx*= a,f1Ϟ6loMhu8' Ϙ$W\>[5aWƩ$,tbh6XG 9 ﮚ0~|#O'ڌ%AQ W__Jlh1y9{.ޕ HWD)>$SjHNQZу`Ό ^|Ka 'ܱ1-)z#9l8ćiΔBPFP9Cz*GjTBR#a$T |gD`Wcsr ĻdZF6рYn."$ξ>x)8݀5Ip kgD 0Z?¸l:ůSz1ER9Sn`efEZS2H<4lg>yN`ùyzy.8`2fwLOsb)G@pܨGqEo'%}u 0\gy6XXƱV(aTpu칩^UH0YIZ6:H. {h'΂l'\gy6zűpލ@ki9~,ص CӋRP5n|'[ZFйP&/³0O pO P/lg|{K{Lzhy?@Pٕ&FaqQVyFx<{pPO '+;b?[gM ܳu2V8XG9Rxc lE܂n€Qz7[wv= /Dt1RljY2վX2-{/2Γ(vTl^;}%Ԋj?ܿڼBI#I.k]g.ɚWv 4p=eK:_gZ=2\)4vh[j (7D]+;{MهCrUOloǔWpu?'u-Jp/^uZ~JJůg \*@[s ʹ 4'M#qŠ QֹG; XMkFu&=  I#P[3௧q%'WNI:CJ H7a.`dHN2`w ٫N]g%qcp|Z% ]+lMg(=-Ł?MC~1w4z匣5(-NMJpMٕ.zŔώO{ `-}wK%P CݔV8<%`*l ֜]b`y6e|?+\H>VrNx$"fo܆Y3x v8 פkd Ӻ?gRoĊ݁Y+_~Z|蕽3jt!ˆ/z59Z(D^O:G/+fHR0*7^=OSgJc1Od+ΗkW ~]2<1o5Бq slOAH=He!Ɗcw6 ]\.(PPtZ4(%#a>R/ɽZBw%ֆtj zѳ~a/)EhzIf{v`=@ʂ)'_yv,Yz#?\ڟ/.^x1{ڷ|o //=<a=0-=Z ȏ3B‡Ҥ7d>uޜws]O+i9h.j(1N[>lmms-1.1.3/data/samples/basses/matrix1000_pluck01.ogg000066400000000000000000000324601247673406200222030ustar00rootroot00000000000000OggS5"vorbisD_OggS5"M-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒvfb6V3Jt㝜v1lQR=L=7 H1~Hp vqدNYM2=8&GZt^~V ڣ5$ Te w XܚH-8I`KOc&:\e#F!. a'cgþ#|s{n5}(8 >hژ/ ^ׅnT^/?tYiKNh"ql8 } H /Fm _zAĵ[lCae1|x"k2!萞ٖfU#reb+R6l9eO(8Bt3Dm$|6p_8z1lb q}_ Ķhlfo`K 1X 燯DWu_ʪ___4,VV잵Y* $yLEX}[{J B-k .? p7ѯ RF>\|艤vmMO/+U8I`\n1Ll{y3JV*9^DR\̖_/x_ZG=n q^Xg }\3w|׳$?b%$ejyz"#sB+bߥp)k|l9% x;9j<~lUv=#DMml 얫_kjbYCVI(V%%8 aaaaVv>y".j^uޡ\a{jeN?3}9XXEH@kE1yL_Bmuw 蠷BxܮvAY:brRr&CW7:^(TFoOۦ#ߟ1b=ߛxJdqK}J1l^-`-y[sԲtZnn ~gA ;9KhsK_h߱k' X_Х#,vv9&!4}h~fd.7N]MUc: 1[+wNJsZ& Y$0s4v_ޮ8v̌3;\컩/cq{-m1\54gnRR2>*$G5[M0b;^f^WZ4{5>E@*=y<{q=OQvtEص9?}c&~\Gq`V-SQwx*7۪$4ޜc4l(zq9Kw\hiMS;Glq~l`n}4mgR]+/fGI@6n֧W2 :^6~kXZVq n[֊ilц()(>\~ssUϷͣH-H0ҖF6ܵ!'g?ng_nx܋,>| ߜqsspOehPD6py0DiX*j*+L]k 4r4ZWo!ԎƬ՞HkhU3=eP)kU 3T0 ^L~#xJv+ UUgg%Vm^jҍbZ#~%jG:q+SGW 90T3.*c+hPG_ˉ̷sv~_ Pf-|bscYk aעrbW* 7tkSgKnfwnD(!~<~[CQߪ*sPh{vg'2ČγkJ ѱ]uZ-g K2`f2 `'ɍ1OdMjQ/AN]`my*l>WxJ1XZY"{s!@YJt'f>9MLt OggS@5"Jv><ՏIUvL. Y*&2M?%3tZk=d)䨍q?n9Sskߝڼ5 @z跃cP,f7amQ$ߧELi0_ZpjS: >|_q gEOے>FRM,5Y8V1ev՝ݒ&yQ}ơxZ]ΖPmuvHG)c3DotgMyY2iՑߓbJլE1XiC0 VV?Uv 1Ӵq6uL'kW`)d81p>,\EcU*=%$zR^ߺfyd53u,tz5 xq&I; D=>?+LboN,̼Vv-*<.W8lz&/44nܰbu$^3dsmO%p@%p&L5R|Q J. ; ]cs;)Z+%@UU|-m[con5.Y|3 ";)0 R@vc}-)#%3?0N=O \Q&sXSZDƼr„k7>pO֝HajP uYD{ڈ9gwG }T= =@nf{hBͮ]1uKR}d.vMſ C,)Hyp;[!u6@Y)F5Aukd-3^=N: ˎy-RP/w$ҖIo]v/1T(l󗭦+ȝ.8U Ld -!Y6Np1i2 *#R/]]kAB;ܚ=n,ehQAwa# B!3/O fpuQVi#GH`KX;o[݋>{{UgFl X3'WdFǿO1Ưu1q Mm1~搮CL]NB~lTsxڳn] T<=T'bmI0R17K dMMfCMytyʳLc~5ZPUQ-u~x'U_שBXgx 1Qx^k{YJv-Z24`gkW2& l3sKC:5ݕY,v:bϱD0F F%:]S|iŃk/S<[ZwT>4R]MY=1~ dWV MT %64Z{LIQRE v:yZ$e3w%2qkr8q31f8Ί+9*g(T4%ؾg-Clz‘=43gLJ: Mi;R? )/mё~获Vhn= b;$*RO1V2 6~x3Xfɴ.t}Ҩ[-H?q5ME+YZ 0}^~Zp.+- 0ʝsFt׺y; 'q[%,ֻO|3Pds׊!Cπf)69zIb!J^Gz,|DA~k*]VyO]g4d'a?HDfz,R2kpĝ('5y8yʯ( JOdPy/svFm\n`]-O]+[̚Ox+%=TE">Ezn_w\xEN&s!^͊E{wEB7Y`Aߣ]$& [!.L2݁#ػ~uf$dP?S/Y6?ǽ8(\R J=C@3UUq.ޑ~c}_\mL湷G!G;/[VQ(15z!DnJ|PBokּ(!qq*cݤi:6 v kȆC faXg (+(GyݲsyV[" /D%=`IA+< {wa{RPkHZ{l?wu oRjjdqHsF#۶LCqE%rq`\1πprvqY7wLsruFIn˧ͤJ_*s++-ÿ*O4a8ѡkb'grcm5&W @㔺= Ǐ>!UئI6[qw<mb{.i.i(,8cr=:hu2/![gP([8A/WJ a  K.*1\.\^oѸiL '08+j)~HacߜnWD`q;{?wE@ khPND:e ~}ʕ/ +rOiRJ/QYC4|V+1hơTOZYEu!,9@MYYk[T ԡK}ra2Jεϊ&K½gAQ,͈Z-7sd'9%\F mUj9sSI-4i7$*dU  ^~@ xW*aIsZiUv湥g;ٜ9FEUgJ}ޠSR <r%0!pMwW:PjX 2zh5$T,|ԫTp獚źkwB@2H!2b4hy#xS#!iz &dUBXȂ^Р†Rv/BkEDf'31?9޻2mxXAʥ嫖,U}!Sq֚DJq:$ ƵsT[S4PI6#+̟:ͣ-9 ѨKھfь 5*$n;ִ&v 'ynɑn<3P~ߴ%& e/ j 4|y_/+,E$iU Jf\9򷮽laf"e[f㐪HOVyTۧ_ Ʋ-% E`14eH+6b b`Ԋ?N y??)E[6uW3V޺hwq7<Ϋܝg@LSq#B9MG͉ /OggS#5"޲"Ǟ< + /9,<&X|\<|_Ճ Nzmyq1ww~Iږw7F8:ˍk(NÞ=?U$4U:tDk`22q.ŽP6g%,0vbޥx!}jiiФʱ?νu]ZWՆEArPEvJŭ%>=.y)Wffr&`C;Ϙ]|gΕ`SWiJ "cOX;z=GFAظ=-'{:hSu-kLo|m8N/b 2;5E7`;`zU5HtGN# AThz3R2- #wFَu- 5]|\^7$xh#m1rU5y>&$5Io+-E*҇jʖ.rM %Z]yX/TBAvuOy8wϺz6",Pz\S&[k-#E>WHa̬)}LH'&)/2R81𼥉& OM#} U3`/lmms-1.1.3/data/samples/basses/rave_bass01.ogg000066400000000000000000000141131247673406200211400ustar00rootroot00000000000000OggSɛ ͞vorbisDwOggSɛ  -vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSH ɛ GB>.0212.?<Y͌_)`Bџ UͪbvZi>JYǸuM&緇,W9vnC /7q}zrrR]n]Knm ^^2? cVNƵg>9debeR2-j?uM{b [bCk< LRI9K A u.sQ[)#~A)%DbQkR(tɲQqR&Te\xPA3ҵiVǗnSbO d99nMڴ1*E:z&жi7ٍfJðd퐹mYȾM6OzHcsH;dY""զiLej7ʋ}7|K,7_FjEmJI0Ǚ^L6T܌þ-BBH4 fxrN|u)bnE ̏&a(Ӏ-13 4IqōCu"@2 W2D?(?UQlJe!S#8 [GЦrw 9*9em%fSҹm ۴[AݞҪ|2JRcʒ:QW9$jpQkڽQÅ;St+D29MW"Y+ce`K8i nW#, m\Jl$$41E 1ȅ/V s@%Rr?~֗7q{(.66j:]M'_N:y#U9f';rj6;q B$t\PBiKĚ>BU鲖[/)Dfpc S~&QM̵3O>5ZYV]M%+u^4?ZETk3ڨe:f%V+OgiT+I,{F۔#жk#se,,f%udռDW2Wn>al5i3D;=OrfjLe76$dgF>-v=rU kN͑Tm0:%] !$ %@̘yn@Vf3!fz+}Ǹ7Ϝy<44[vT6TiC}˼"SzH՜JsiVMhq_DӨƢNأǼG 9r}xzhAr}-U;Iv?_ۇ-?TK1[3Sπ5nl|6oxs]#b] <I $T4S[vdRE=oh3^s~-E+SʏiWH1ܛ'r#^xM۹GV_S!VW{h.i# Y[vM5ZAu[O{߿|qx}M^fJlmms-1.1.3/data/samples/basses/rave_bass02.ogg000066400000000000000000000171511247673406200211460ustar00rootroot00000000000000OggSKvorbisDwOggS-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS`;1s=8 !Q EP649M6fkt{s:c׺Z?2B%4WqŐ w8͂v]l=fڻoR:><yHjY< K9 wN7DuRvӧH)# ᐰSW*Ngl'8fTUEˁ[0"ѵcd6jIDttJ0,j zH){Kj;orlʸlYDVyL("i{UdA⛵,)1< =iu 4OOiS#M&pTDj}TUc=͘6И-I,# Gx%:lGAِ5J2l'\kƞiZvS5 t.ʹ;|{shԒ{(zݚ x]{zY&HXcui{ f|0_W"߈./L!Dz䞧 (>{QBn3( V8Hk]9M pCD[}C3\"zJBNEXMI8;"mMuD 5vidg,@Nlg:^7 @-y9*u&*{n!`y!TؿeU)yѐ%}_]JKJіS\.TP #M0WC J1 s9"HmZCZ@3VJ$c˜(Hlbh5Pvwm5=V%"1VqS,j.hVY3(AǪ4h_ @TӬdz \;*m ih`\SیK n 1R؃]g ?-_p%#|w j?imR1cp[:Kk4BF0o{`aj[dTZyѬ ~yt= pH@(y`,)B H-8*qdᯑ)nl6Ʈ411] DJdJrj0lBUk E+Ъ}(ZR6Q57.ijWduJs[kZGѹ9-z.caXԭõ#XBA[2y%J3ƾ"UъHAjUBO*@~l)@p:06@}oYEijC쑍lH{˰j&zF^B7˸5U@*'8 G5X|yd{2Zy5"=GiS'CZz|sEH\nTB1W~-GŽhI1`'bq8VfHy :9s[UEJ/j0|d*% L]D4KTmibs 5tE,Fiq^Fs{!I5m֡] KJ2[#ba~kI m!M‰d@.Ams1K%U")U&E6M#=R0H^UOy<2p۱g]e?v^I\WQ!~+pEJ:.Õ +싁d V@e 0u(yQr[QWwifo@MUƹk!qjMn"`VG/Qen -Sz[iUD Y*FNYuQ/qu\F¢1ykG!}wݼ+'|,I2j#O &Ĕ`s0x~%} fIYDK@ήA^%I=_i{|-5$ SV;ٝk*Hݳ=ڜ'yKSrY XUBNfy?@մ3Ov6؏YC_ .yNC鎩3 ңqn5bVz;-EKU)V=3$%2x':6=|Ձ oECmY *O& +d5N3m%teN4p/s=}Np''l}}n d0YKٮ3{w;r_Q73*XQ+6f4yw߾p4DR@s T cke!dr2 dǬTCx^]Vt,neCA9Ty\$ _\>:7_ACP4#% > 쾐 r·Yˬ`Ə`.qtC=˝x5d'ǾAr/ٟ bM\6`#pv-)n+9*mӠ!\V\0ϙڴ|h@m9pX4VިDnc!*~̿}ߙGg馐"(**?O u?u zqA/nzΕts$}N.c?iԚ_.~%/VW yC(_ ):}uD0_=T+M"Q%{6?kn\Y"3&ZsuW{gR/-9-Q.v4sh WˣVa5%mqr/ևe"YR"PqV#IE::qz;?ԟ:Znp6Fv(:!/_܍Dr=/˦`'M"5A"E ﺻcJ<]~oB=V4~4M U9dF<4Lv~~ȟ0XǠȟx[I<0, /Ceplmms-1.1.3/data/samples/basses/rave_bass03.ogg000066400000000000000000000130771247673406200211520ustar00rootroot00000000000000OggS{KfvorbisD8OggS{K -$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIgN#ۧC9̧x9;;>Nhzo^ӼjW\+b^ԛܰlq$W +.ѐIl>=qyU˾"ǘklSzS91q2xH{j;] R5Gm72qKedS:Z?$;_PGxB3$vn7K3ooff&w"-sTݏt*6}d)OUzO^Nq̟aKVۦ9צl%K(KvŢ?8g{z._aɒQ7cn*t%mu;4;^ Bu1k[dž/Y&XV's\5c~THlQ1>B?YιmVUUeIh!™$ʠbm[n8߰8/A𚂽:͌UUto ]g5Ƨ{w<̎鰜uyMS㫫E-1ÊhM59̜Ҕ<{m8#+V}gr=?g$UYigÁS]^(T=#nȓsNS .󷤘r",4'h|^$gb.m3AMӻGwĆVHPޙ~NC3ZwR9 ۳D@.4q}^]oIC0Ji UTI;n݄;X&@@n׻mS9iRzli;C*pqY9e |ts, 7`N/8lmms-1.1.3/data/samples/basses/rave_bass04.ogg000066400000000000000000000133611247673406200211470ustar00rootroot00000000000000OggS\+ >vorbisD8OggS\+m-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI^cl͌̇V&tޏPtL"FK~(` NvXqPȖM>kiK`U :ךyZӽX{g&\ _&PH A.$A6=E;Q[5݅*#Kqvk,hz!zy\\jڇ#Gm9TeHX!>%Q%R7YΡ;I Mz?sw}W^mW̹̋>_R> o^YqY%|L hNj&tGdzEs.~cWUUK9u]Byp|)2릒{,t9hҴk/KU ekK@Вhɑ,N^D -Nˌ4, <%ʰf+$^}}x_/eu|c_*Aa:~(eBȏA|`&Y,$is%./^n%lqp3S>ѰVwngf5JyV,[Q=kP 4Yb\t,/J]"lt "R X;X.Inq$ɝwmVޗeYOsP4DDbSJk K-jM6's!%~q|x=iAGc.+w\qǹM|J F.^.;yo/~[n&Ņ:*ɣՋ}SuUfٜdg&%k'@_vXd$yAJS7D5tkDK|H?{VnU%&I[!C!|ooWzig5d|fYdqUIQF~frV*io||Dyh*P$P厚ѳtS._*Fo1խ:%A R9I㍯_.o:-DxhFJjy.(,2*x٥CV }OX]=z>H\7gg6P˒jt5'/Y.vP;f5 fyURMM<6C|G-)3TUU%-{{V48rѡ/ ;﫽WO]__4~8PP7^ˣБ9#9V_=z)oj84r"@IW;YRO;/zљ^2/Q=nسDD@o]ŝ<nbu/~WϻXo­=xsN_{znw*CS7ɸW߁r{NR<7ϣTNS3 wA rGqݭ~s 3 NxZ䛋s )2H!\>?FEקQ>T먪(ZEwϴu&kil GmG+nh  4 8p>s C绔aB%f$KuBzHl+ T15B<1\Xa ?qV!KzЪ駺̺ z6i,6ן$&1(!_ַSZgBȁ |/}hA d2B"R)e!BwZP\~?jx%MFň9$CQ 1L$C6y?{yDch6@ @$V/vkRd@bMps_<ߡG?  LA%XBV PdU$UMT}x7ͦZ%2ࡐ#[ i)#!I`28 ReH>zTt<կ_)Ϸ&eXQ1}'?@D tוfɠB,vvX HH 8oy^U|Քb Z>@鶢 cP]eE)f0!G) UUU"FF jՊՂigko' $&Tala}mWהsʾߒi)XL[G9?u6;^Cصc8BX,p.LV{Vٯ%^}ʂx-:ъKWSdVo;q|!H˝G, f3}e+ c <,FUEJ[bbڊha"D'8qQe4m9ekㅽ/N־]!gfU2VȩDa2,oY)!ٱ#J;?HD_ݬ 'ڇrn0J6A&8 hI %F!p&^Whۍ|żf;2RMM$'jeQU )[{W0 VXcD$whbB;n6w 7P/7( BD,WA!Tˈ `b XJC#"ƕ. #=[N`RwZB 0DUUDmaUbO DH`O, X"hhgg63V^Vp,$aQILUqnXFk_:2kOꭰiO Z! AB_pY4qg g4B0@ |G^),j7~ĊPC7e1TU%007쭶vHDc#QE PD}r=7O:_aby˼L&S&7ZAq<) yYo:aI eKɍ{7E:u&lސA09U-aj@6@?Jі6ɃNNZ% d0jTWi(}y{O: +5]Sf%TQ"b TW{g ((<7ߟ`2> eYedZ33PYeYNA A.e1eYs> ha ]aF. B{߹oO.z84gŵ`C ,,,@=eнzl}6`>'7/m !""Bz>o1t4*p8 lmms-1.1.3/data/samples/basses/synth_acid02.ogg000066400000000000000000000164531247673406200213320ustar00rootroot00000000000000OggSu.g+^vorbisDOggSu.g4-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M, ^mJDR%!omq~|jPd18C@vg4NsMxA lu|)i`kAkB" 6c'v2b) J!w%"BCX ɐL$ћ;?Xg8'&RC =$\!u: UIj1H8bIU\JH>O~TRQQ1D]^aU)?@ @射I`aIDa*橓3cde-9ͬ%2a!aQ D0wVL삘";a?(!5! 脒N$G5_~=!:flo@+ P@+ȡ8DHRHIqhiQJYGazV)kDB ZE1DtuqCn@! -l|œo}xA@GDÒt(6 #*!I.uK] |KE}$ |A=U}WqU V7|;I J$C IH^ akgrb{g=䩳JHT`,*JB1@2*/݈m_~DtKفTQ( @'L@3Dj AN_~L 05-?=x4@@ /9ͣu[}dVR)L 0j B *j¸&]"40At.}Z@@+e8' "nbhFX/Z_@8}zjW2**"!HdD s z|h :#* =#JUedL00Ee+Qik`1챵+a!(JbpE"Ʊ92:=(9* DH@ S?~A8&,A (1326̃N{W#]Qϼ .D$c>K _F%7-aȌ,2""񱱱AP >6FA8h$Dc$D& xof}NUzl_wT?= eǝw={c~+٣j..kfgfz=6:hفW`T  ~cPpcPp0f05PpL\\TAbhT " DcxABZA `GIm%?Ȳf~>80FZTrR) ⱮݲʋR@F @0]:#Kvt;ն\ތͯP}wXA2NLZxь<q,[[^}.꠹MT|Asq[1։R 0j[MU %O%AlL ؘ0HICL_M( |0Br?B Bʆ(AC{R1[u1eOO{roD¶- UD-b *&))&y'HGW P/}~l?!C~A XbXUad1" ;4^m*XhM >0΄NCj +UVt)r" 2l_L*/*mA`li `A`/g.@MEQ,IE8@BHKKdD2vhefoȈ7Sܤ _YW[qX Vw a!Pւ}~{ۇL>=C&x<#dU Hh""+$Alg1cSbHF)$;:MRmS`;0FK`blr +!VДN3ZfN;Q\*leHd@"= zKӼA 9,h[k qFǜė1\ :DfƦgIoW/+~vo|p@@ݧ,"EFD[faȌQUZV [ [ll ubJ! ( `[VҌ !d`cNH"H-,  AY 04>ledgLmiCGr[c\JMbSD8& p= j@TewqUvN6 hpYƳZHԒËB 燐L_*:UT X$1 xc2iԿ,{ţ,N~'3 KQR$?ITU %׋h",p~NǯCQO|GSFd-K>z,״FGuqm56dIߧR{yծl*MԲ@>akpO/R{atݰ6-VZ!.6Rٮ\t[z*S-ke BYeY8+,"-˲ U@X^, @Xe*Z00.YehSMy q`YA8fQg^XXH]ryq<;q ,(,,$ l@y'}]r 0˓/em&\%2U0 ;.D}pdlmk+.9vl鋧=B.yw ghas\bHG&+}vi* #s Qm*fYLO)SY0Q;&pF58ٷm\cX S*Қ,m8W, .lA~lQޗ[+ʋqm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ!~^̈"tMu9zٿR^梌YRZ&dZ4o]Z9] u.l 1:E_fL^^ush~Yo Pyz_7*hY)|rlglAo[5{2zYpιSzqb] m[h& qsN41NӪ Qӷ ݓ U[7RSRRw4 ]z[}!m8kfR! w&]-uJLEf_9A"4ˁiEpPݕ] J>23ZsUbvskk̟ 2 6JpaA>j=rzcl8@@UsK\׸=zz=gyDqTb{\33!>$P] NKasvYgšfFJFR\@h/F例# >nNq<с V(|= lXq:]U`5^ű oU["ڛk=9V=d3T~EJ!>6%?0s2}%ɤSj 5o&+yԬv&%:~|OV#Ze5gUIF?jܚ.FtX` *߳A x;9JǸĽVղh F\~86tNJ:uAZG9~lx.$H}'. $9kSU˸)MxsӨ`LcJX!E$?e{n*n֬ϹL>}}1N>4Ey8^ I:Ld/;I;~rp CX.$~ߨpcӝwH[2tX&:Iq#3/:ZGWPb[r_ѶAhUdRo(ҿ IL0 tRH%~څ$ |Ǥ ~Ć@jU<D!$q平%7yw+~X7YV#c,CG^~>v[ՁFzJ® I؜d "Ln6!XeL̊IޓnfpXJ~us(aB&~V TTHͧJV9q&Z !a?者g^(eu0Y]S2' TE+z\% q.qP4ä%Iھ$A~_}KSVlol*ۖAd'p^*ꢿ(j 01E=e5}5~ބ BkU<1&b q$KPS~72ǴL]賿&n S]htP |Κk9oUS97#/>A܄ BC[ t?n(kc.Ad L.DKII $5Ğ1q e|U.a⋯r$ $$a֖[ڑ嗹ᅓwZuԕZdDC|]&T" DwPD}H9fr:2N%gL1oX2 m SHP$t7tLB 5"jmC0_!EbM% n׍@e>^Bq$xp 0܃#8 X|EΘ$ڲW$v1G&.½2wT{Ï~tx~9=|e3]lvOOovv}ί#ou=:h;$=ߞo0WaHB&pq<>|+#Z|iFg&Ice6fgis"EIgO?^wиvÃ˃?^N=Nws?s:iV YoٟNMz͍lc>rdr2;cڑqr)S&{˲dl $$IgOّmgܻSU}҈`̙t8Nrjƒg''Wk?$x޾btg͞G62v4ÒF3M!ݜMCwZŲS'8Ȅvc>\hvt=˜v];Kcُ}dG;jHo[˲\FS0NуoNv8?3irJ^+ӏ9wјkGq6qpVw~g)9d~bY>Gƛguj%mY2HLɸsvL9yd9ÎL'Ig#zIl_jXM?s9:39(퓎9JuAw>h{>o`kᷙ[Uәsݸ!ef;kG>~ȵ#?;V׍vO<˘ dO|[7f|]?yjw4/.y?|:$wk> ݇2s6sfGD6i1;ruc93K>fqɵhe$m&פILc;9l=묾z?1),ӟihw S-m5-bsjM#Oߤoҭ4c>4dX7l8^Ϲ.57[=l{;fИ`o59o H2ģG6!ھ:%M"Cg_>=mјt7ю郎3 BՂ$+O RlCǫl)yGvލP vs4Fgܚw} -9ORk|˲ K?{%p=DN^/Zq­ɑ^x[7g/(f 19paϼUÅL;ܜ;&}udȉS_`8:)2ܿ4SK2̱癪tt|Q2yXiϜۗ?k^B8?f;l-&9tOz^>Ms;6ܴFGS4CrMG>90~z|f̛qOoɗkC7S2ގHьiqi7L{n6dޑ\/h>?~4Z#Lv=ryVdo^oܽ-se>ogi omNϾ= [6O?} 7W(ucv~ގHt]riSfӏoZ5?Iv?2lGynIvx1ɥ#y?یFr'3v̶x!}s{F3R~tp/hB$?J2t&ܴ.[es݋|sCLWӒsl4Ixstxݿmw;xs~ι9S׵Fo_px}F=~7 3d*wǦw0 V6Ur~眞YGJ;l& 翿ѳbsΙ+$^ߦg po%;発젉Gûӧ.Mni1i&㗎{}{adY? Kyao=Zul7/ͳHvۯAu=o}qC225i;|I/Gw]>OF z3bYҮ)]oz$7KYPW!c5%DFv\f }ӱ[YÌsd.҇/!vl?LH6KttM~ cKܫ$wUd]?O^l{#McvgEbc^^m]>'Y>u}xvG[Ny?m=?]D\;õej5\[>VM~w,5q#vhsc]3G'Ƕ_Ӷ}6R_Mۑ?D%l(ޓg׭_cvm.̈nxe\N7fqysm:׎e4zrḷǻ]yGgetNʈy!:ô):fb09iblN)G23#=L0i ifgk>i]fYuĜاs6tS WL}7Z,CݟLmu6iFλ`{n|pyҏn_n۷f6]ywK<3,<&H,H$ciIƶG<:mƩǾ0q{ԪH3p0;;$!QwNowcΦFt6MF?NwlIkpbū ٳ9{;ur۷V^;nO>6buq˷skl 8ulp9r.mF߾4M3Ksp$o%Z;ه՗v\ۏ$ù<d;<ȑc4c4>7/#|ihdȬ_C%}^3.|=Q/9s42`v]=8jswO̗1_N`8= o\ń.sdǞk9o{x޹8jsH_x1i^NG9<}'3,{N~^}rؽ_ڌizn843Ew/sx8Ysfz杷 !pҷSCNL: EWϧ{7>vG3NsNps|燽羯f=ܰ<<Ø̎cW^a4/5kz~2l K㛡[8GjƘCҸk;%9$cM{1GPU9oꯝ$%# OggS2g\qoıjtY~~~Οz: "8i-^GN;sOvӋbs9ޱyp:f?u[ɫ=l>{9&[c=>]x~伿=Q1;Q]bδK;ǰffލ/vwGxF<3tyIn8{ws&M+%QGW[]܃xrMOzngʦ+;ӯ]&3Kewh[ɃqZۇyxlz}H}MmKwc33;v6>22*av%F{?tlgٳm;ϴ^$hGΡ)'vy

Q慇g5$Y۟Dc0.vTczA,* M)ė׊ynZ]qifi48V4Al 咬XEgՄ?ǛzXͥ#|'TE@8P M 9լřtxVUrAwm˪id7i!NNo+^E i`_O${P&N̳YjZ'k29RƞN?R;AVl_& %!w*k1E9F;Xuƴ`h5Sp R@ǜ( 'D\Kz2 R7=[4 `Z`RdD8JR&Usi&~ ~#KB٬9W]ljF  АMD2ߨᯨֻUޤevEoNԗsOFVpyW_wڬ#Y:5C( #=X@В)` 9GS85ȐFq\ܶuW%8EUC6bҞO%a~ 24`YK{>gȝ3SwǗMLNQgI^umS0:Td2Hѣ OU'@4B޷ < /'ujZpVs4QI߁4W9|>{f?izeť.kh^A,r)\/2ma=Kpe*=UXUhY xVW]1ulPUqVIa8#Z6fԭ ˓&]Ӑ` \BR4Ӫ2@_7$`1X\k}v<@#`׈   P YD,46 Aw#4>1+K)lmVЁ(E!ޯBZxtEkq}"7z-<+LC2cȝ~N!o͙ qi85W⽚X~g9G9ץېfMP k9t̟2$m^rYmIdҹ ,+Ht0R0I,gw!haxlhY8ާQqkg׬zs#1І"y,`v`Hֈ͓X, XDmjvvs2ؚ<ͧg7,'>h3, J-3u'PLDXBOxPLjE,]̈3ڵq~OH.֐7e (ă \p r&`#n-n,r_w(leT(S~m]UugM1+H&twhi{&܍LBy>a@*)Nc0@j.صj+F``m B.F@MR.XrM_JTi= Pttig/iM>{¬pʅgFȶ0Ź)XU]eAxQQқM`w06.}cbhPb> =vV 0SP4ԣQة ?-}DҴ%=N%܍o:33PbE8*ޗ"v1 H4`v"A^@e.XЏcx~-L"4B^bD7iS晬Tj ¾Ϋ_kh1p0GX7?7ST3.m#>Áfa9"K B)n},Dh ͅꥑk*w9cI:6t_9lWs'$7r 0o#J0])#,I~J)g04<yuy6@X;:`4wfKu5??֞֌)N?4:1]#r87EOT +iz9DYf[ CoĦm_،Wg?rt遐]o](4A8;\ WYMǦE"ȅ` Vk{-F&J)vd!&=(߱= p0 e*nd;2 4v(ZUnX^xPu';ip*~v ?U3e3tn,E?/xDSjN_B~|ߞcKeJ+5/! Q)j>wFě ەtz_T$h ";W(%+槙^w 2$`ۉDdssI)Nke(*|g8;\|>`Bvp91g4 /6g:]DaDB1$7w<%.O˕S0"?fHY9mNGy:KN QX11|_ [`A^}P.#Mh f=/ш[IMݛAY37Gw;JS!7(0xv"c-=j/{~vk(35(z5=A|EƁf}T;  @1sIbW>۶ba;Fz9sa$=(Jȏf۸+H'=9`õoݯL) - E`DMol:NSivD7.~vHq:3${ jQQ4t:فxb Y.%5Ȏs ɹ"$QFZ5eHU[LKWd!HS0 ћ;x^][[i~0@8^ F9&UZ$]k m P .@KBT o^K_+X@LUe4Gt3\}=00}mS&)$)p:oSsQ"U-rR*q>ĴT1ۃ6H}`%ɑ Hk@Pœ( '=g;MM7@_]7;R_t M7N5oEd1W]=\6:3:sP(߀D|$.fZy0Zfž@&g޼3ۮ T`k (ТܲByYĵ`T$,g@C;OSV?!grũ$X tX?Wdu{'Φ"BE0H \ RV`mx [ Y(ޮB'Bw= [hURs@{I"2}J*ӥ9u4J@{^CEK@bx--mc, - oS P.|ja!bL:LkOggS,"[ч$!)**)+(&330')'42/(/01S )xࠪREe~[s]:nd}/u?BO k6Nح Y#t$` j< X :WDZ m}?Ro| +Zu oaޠu6&Ai՗dhpXk|+ns.읜tǑ*&v/2x)b hzҪ/<Yῲe nhA{e 8p>8, O[[Z`Mr-':7ۥTz!)&N+ ֠riE;`$H+|ruz{\kmF iN14b}_Htڒ~spSMR' |Sڮ0RI?ON6*yeiP_!\t(3[xh졾R}WdA9~KH!8Lo"(Tr.u6B܅Ő 0=n0yWt"uAi1KӔOن(/EBхa;.!iu JM,p;d%ƒ @skLyjʐӞB;gAM˻wqGpu2hC};\< ŭ~"K70NtchJ (gWMZr]Z[ށE54S$_-e:7ZxmjUxb%vPr?8]%J% fL>j%5oYQ s!4-zsZtXU]}%31n{_ }tے(ΙU9HJ~U(HdAV4lT57qM(p~x[mxY/{djXۛF:2wL ̊ r@).%1,hhR| t+^4S]:4Za뾒5#urs Ar^Ed>ud70-yGYH68nҧ~T,ic溟Hd% W.Cv4A?5&E+FYIц)^ :dz%pJ|f> !Sz8 w/ .k˙ȃX$1}襱?|e|A:-{11(4) .06oJ+|bJCK0A훉WP2{4Wm *c"xxK—lceb]8(kaY2k1hKP' #\ժIѡ& B/r$it{ja ϙGKb5ǶcnI8$ y 3yɪ&>IzsVFSE-G`UVmåt}O"7SB*GE*mJj\Ԕ9ԥRL}(˒B҇ÛP(){ֱ4Ɩi5.-0S3*HޔZ\\i+;}k]4D ΅"eX!0|A+]6.@ '^-; ="-=$z1@0+D$IXVV%gET5q YB:MmR pnofwڗ| 9bx1D"씼q+/*lɒw+*ASͤf5?_-dl&iz) aPE(8l9֥ pzwph~ lzRV w83 d^Ns@ jlvEt+ PV*dOSDA6,GݡYbbcOb z/0=tStJd0nbRզaQPԳDגDK3{s5R)C2k2ˡ7oNW%u&v­UȈ%Z*Gnd# JO li?U<;vOԠ[Y9gTIjEsl?-;^"Ę3\Sc{5 $`X <h2J4hG{KZ/ht$깛L +E-v}FCYYrutv3c-ZP|I-)̠+p$Y"8#ٵ $.d_ Y}`)E*m2NyDU5,5diT&=x tabD^+^%. щ-Xk>k=@؀ `83 yu/wyqEӉ `$LBm?,:3ҋ)UژfE=cI2ԫ}1J]ξZ}/TqĐq[3bSA/ෳr|;94FR㦠VVu;h=E0Pd#wʡppRL:tܷ9:5b D{6`Y@LoJ{?~V>~@_j}LD^5YmOZ,{l'ѴZmoPhT C1Df8gc'm h 8k1&Vq 8Ql nP䦯ϭޫǁd&hnʌ PUi>^ Ssi@\^z\'Q!674qB??̠u+ii ieW`e/xԊE+u96@+Q @u-aDsS~Rn|--i.&n5 2maUJ-._=_ѶZWcաUxn;OggS@,"T'F20)*&(144ZF/ fי3y&n[jU Y|$w9 (ZV(9 pJ_o]5~\̱Y0{bJ?&WZpA;ZV1nfc]?{_Zo̴߾3/ʽvA}+Wu-U(RA),qS͹>@C{ |Z2ʈ<+>,M kV&DɄ0Յ1@w rR2nPOq݄؏cDRVpB9xA\Vt^Jp ;Z'IAm OLwl4Ymk7$xnP̉%{U'K*ߩCG c"8 tӬcOؕ;y259VdMIj\1.mw=OWrKq$9Hx7k36V2S 1J(X-(m+J>2 IZzf{-:Ρ& jE``MMh- Jx 9tYڈ;/ "_Gc}R 3Ð׬SCRS>ab|z; {9|ht@E,j~Qz%و!!mEZM^>CRK$Z?e1SpC| <'ێuG+kKL* :J@"+@hiu@JrBF@cU ENepfKmV˥P z_R2ZC﮽T98CyQ)a=J2UuSw+J!zV㪁'R}V94|Q=:!q <29cG/3p6' -OCG{&u,^(5jKZ6XH*R=EU/G gOrRDs.ufwi Y U4?]ڬh,wIaxb$XM:E=(r}2+FM+i4 uhPS}WER /UZiCB9R*Z\#鰖)Kj~K4j9$=j:ST&~xAT AT6c",zM=NLGt3&@5vpU~ xkU5BHH@LRL7 SyyXxC$VBEG/AEoJ7y--M7X[f$hRK ri{55uxN+QߠAMh Ϛ"?xcB ]:~4&+{ b(`wD(@:XIf 5Syu!8L2׬cȴ%D0n?$ LV5@:-@8~Q>i|(>pi_iP0r H#,IR?D47z'hҽ}NlQtb,WZW>c"oQhQ 5(YŜtJ yWTu,6s[/r~"AR˸Y~|$b]R4>#?D !q9e| ё#!&&7i6KƑ. QSLI-@2lt\apbJ #iOzjiL].ӾTl1UZ̋C}OpM|JaD7@~U[XԏfZ3vv,*D-Lr'@ӗ 5Zf~Ӷ%B]vR ڪ҆n5|vT \5bXAK#k7y/Y]!-Y$Fzi%h]T05+[?ß97#ٺ):mOqI"X C"P^w]>6WY0n}P-z 龁g4L4!E!+UVɵ!$v_9LR >n{0e w.%־%Wt VB6t.6h炔t8;H+&Ի[Hm͇*lPDB4HI;L3&ZJ )I˜,ȗ~q]\{(x2Q]!msw2k:AbrJyG0ՁTNsjg Ř w ܕ J1sV`RM/_yqS[ ꖙ&Fh;`L^^>V0CgPI::Г;`%!F%6'}BRTxh@풛ǖw8sTƃ~yT7-+_-x1ibBٟY>uN̦E=,+F`NqL΃SE7(SzN^Y4Me 8`%uSdH^Zq@,l/b>AmmᦀZ¤Ka @P99(m<^wAxv)Dc "ѯ" (&O,lDI`ؿRh3mJ%OaBBk o8cңqb6_U2ûW 6.%#-8FVD7,pЪ{a5l{jDY \GŊ'f0c M}.:CJ)*D.nsf4$[ e0z,zx-`W4 4F6#fH tB9FPCqnDPW1mˣ.@B=K!1u#uT+zY, tq8o&9[w#V4d>W|TuVpچrv_9-5wH8J \uԄ~oUj_R"C"%9g8Ru;?ja,~G%!.4ZzpXkh$*|-8:/B) ]iDwWݨK3I>zSU׽T`xCRp$95SJ@ י^H!oy8a0ʭP\!PL |Ӻ@j6L`QrxbF7w|!Pql߀(Z 'yp} %Bs*DASd2nX iM@ ܷMG>1 u$H@A1Y؀ L"/@~u}(ڞD+۾RgPڬZyؾ"NA%zwס25?l* DqT`:,L9}tG_1 /Mn$V)0xºQRX/ *VrC6X䖐:)*zܖ.4 #ю/zU! (QeX^Wu py-(9b`L2I:R ӬygQ:TX:gU﩮4V캳Uxq_|}c==׋;#5S$jߛѺN NQR{JƳ"7e>g~N*҅`Օ⪰t u۠6QW7~(0ӷkBmF]R `2EG$`rЋB5P+POggS>(,")),+*)43123Q (8# `F'|,24;TMRTT?}4F)#dp@t(T*WCkTG1R/QTB&= YP¬+USx 1Iu}*4:) M'7N S\!9̘WkwC}fÈoc&WF)Un RJ`!Ӿv17:4&~|`Ż.$Z4ZF,/I&$X:7~69h- {m9oOl;6Ah,Qsld2(ѫp x0D|"WxCr0҃KnrрF:bp}I@My] \l@tZ&uHa&xlq9!u$Ϩs`N[>N|J{ꊉ\W` 58g,x-B,d3M%=6?r,Z* Ea4Y<*09Q<9^5%A36RnWVȭ[Aӫbe]ǚ6UvS(jߣd(kٌ{ vʰp9|4p vQث|LNQvftc[ё ?3Sxx(@ٽ\wX+?\(QKIF+@53qq_x<+8>U{W^^1zvnUZY^;+9ܔQVǰ/F; G`dgz_?Vi'pY2#;jq|IB7[/%aD=K#y[r. ,Y;ZM QK՝3/.KG'xtڰo& xP}u0!&$#]^2+]cd\šT8 G ]96l/ZA E@$|3}eG#\v+wgj~1oŖscd:qJS]i>{& bIJiNl"{IA>j^et |b EW2J9(2/\ߨT4AG, A{VPYe$m>TIPu%uL-d?m{.@]"L h`5b5 H$J3,n ݾڛxqItzw*g_ ӢU@rA,88+l;M[ɮVBXjd ׁh]Zp0M/6ܜ9$p籡6$ ,r뻺F)c\׸ꮫ7BTICLG(=Lyͥ P:2A[m Fr ,@_ސhZ/Gi4&BZtX*V[UDӦs lgҥ " ,ގatize"*)uYHSD~ ;n+տC<5p O*DlEr&UY%Su;v=v]݄ȇF$μ& ?+VI) y]N4Mh tk֒$`S/ӢM}-DpI_Z#o M[Յ^S]*zރwK(r99O< / ҖEC+ڞ'!o A !L]`)n1"-#ȿ'{怓 G;Un4ikE^MR J%f@yyc(g!Mb P0wNr $\RZeW2/_gA}˒t~Rn]? lfG_;lVӖ|HyuuxT4<wOT| lmms-1.1.3/data/samples/beats/break03.ogg000066400000000000000000000501441247673406200201030ustar00rootroot00000000000000OggS-"%vorbisD_OggS-"Ynl-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒr|^|J1^EiQ[Cd,0vLs'wj>yrZc*QnQ’DCfѦ'6r3G{}1?OW`:mj:UYrfU2ĆQIuX4-4HFS*c* Ge-PKGW wLg^=U.?d{(?27͎&4k`f;>'&񀇳N`dУ. lDL$hd@5\֖$"tܟ!B5ճ UL ;u_U!Uپ?.T)f縥 lit[(NAHc+详K}PgUE>5⛔ AuWai Ҵ*;-9,#lCbju"pD8}icMReF[z1E[]4SE<*$]t<]Wǁ[ Xu\lQ@\3'vSS :Up߲:t@2udXt 㔘40b-]fI_?ox q  ]}Ah4@D99&Q\08JGֹ-Gy-@"39cY 8 C 8!5 3-ajK[P.#3$z""%n1*~Ky\*vZ'`ۗB: hWE`99Q`(& qS/% T@KyB@Apʆ4u7%X?'n.xRZ'G9 0|*LJ e׫x3 @8xdZ +6F T3Ie1¿(|P~i !vZfrn\__[f|b\b"s?p-Ƶius> ˝:ʍkҬ8כ py 3e'^Fg2\&(֨d j*ST~''GooyGWg; *0 A,eR,3PjX@L :헩(E>ӑ=Z/B?mkZw`TE=U*:Ku(Z]&a/@@EtQ`IlL#;BT_;Ђ\03͆f?;N=6V~\#[!fvνQ'H$x9ζtVwqjNUJKgmGh̸SGoyqj6R0S-R!+ݙۿ~9(,: x Uύ=/O|4kzWPsdka3EH.%/y`fn]q*X u'OߖDq/44ӣKBsPU^=_6MiBWҖS_8~Ȕa!k;%cxN@_=#$J@0 -ˌ#=+C} koR߰Sb0E'p>[bzH׆jk<-`# LǨ;榴Uyh OcƬ\?"~K\xInx!M~zbrJ[ZP U^B]ojiۓY(D!XP:>mfd= d)k]]t֜:hB' pp8;ݯ4[voKkx p#@H6~72N>P ~-s٪CzXR.'4w8L~kaR}uw}X"QxJP xDQzk=-u\k!qj !ڻX mD%JCVF'(&{*W']J@?R qjpp:ޚw@8=59Q*'vZ԰)Ck "`١1X<`'N7##FDxtn֚I2N / rM(v:}AQNbSjP 2^@9gZ[<aX\; n ܢP_  ႴDg^ksx|ʶ8 bRW4JmYQn] :TR-,GJ Lln88LjbF΢s1:1a\(r p}ҕxEPK|D*yzF7=@I0󘉝q.ʹD{>%- 83D 0q@;GA={z@azE3PX".TPͶFQh .ztPʢ!vfL-+RRU҂;+!{½%.> O- Љz I%$K1Y?TtxfB;q3>8 m0 pMوIC H ؠD1kK5\$P<$xLR_=*~-=E ([N 8W{]֌ehS PaJXB:uA+?U8dVD"^? hR0L3uueg;(ʇBϪ)`eB@n| X1>tpZ,"IcҔgV4Bo@iL UOggS{-"l; ,*-300(61852 ()*-| Bkhl <ܗш H' k^ duiҐl!"G=Te{Y$W[bC-cZ,œ= D3ؤS/B/oԈdrfx^m'-l61vy@7C#]'ZQ f !bSDѧ nK,anuݻG6Ξn3lX҇=1Gֿ=G}J=59H,9.l,=4QmeNX }([%9{ĽN]lVcQS $32H8Кgzx?B3̮G_VA=JP5~c "?~ Pf-&rԝ!mCs1S=PI 2Yz}~0{~w5wCނe2xd&sAjm)ynF&/Wc2 |4aBd+5'Ⱐĵ|ɑXa 2q2 & X0zF)o] e}롋Mv>\tNU!+kOcE>6p['L?N!1'D9 -߫#' ښ5#sy=7Z8\93 lӂ7Z 3ё!x cjf7FD1d1%N't7+zagx-Wsq ~O](KQP #wI۹0'}QmcD)κ?Yy"<]{_}_J#F%Li┃,   d }\;`j9;d}e[Q]&aJ Zs<ޘ,3[4-졘5R!\*5<#TRm%㵗tDJz Q{{"(* [mZqϠl'%˪iL]O&ibefrqv ,f+:ͩYEhY,~3a% &]Dʳ'/O PAа.9Ou0!ܑVlI* 3#A`C{՟cCOp{Hh}aJFGڗՁpl1jUoR5>G\3W<tb'DL^ ) F5czg+ V9'3"R7,<Vڒ?Qk!'\OT" ̽y:#2U# Dd]yp+ +4}.fүF sٟҗGNWp鞒ٱQi(o-h$G#}#)! +U0A+G0w0o2Ӻhۮ~xfazlKw.>zCq„QAFp21cm֬ \IL*G\-)?h,# r _v2$٬UTfcLҲJ\ #+ͻFh]FZ{l8C2!)s!ПL:CqJ5 FT0uVs0Q78K~|-ִi">/p {_d1&Ҧ )(ov1%{ڠ@3 h,DdHpsтֳͼ$q#L򺥷 IF~lr (1i=ޫglP/In:P.o*)!ӆ= 6v%Ar7VUЮ=NPԃ;E:7\?1y5)[ɗ$<ЪzFo>H9G؂fx6[B`&iډK뤞ږ8߷'~ FA8Vq\>\vo$j %7O-"9a8\Z괃#G|V`YWرev51k~ЛMv6D$4cj> /aV" 6 >e$r=U.@2K$H1#x2tM !2ߧ6x V۶7 7}Ez{Pcc: 2wtn=a cQ%5ك:V>,(OƖ}wU/NəeٚaPiQxۢH]yQgsŽ1&ZCG; !FP \V\){x:g`R@$9x >hMa%2)No>X!"h 5w@J A(nXgXsS{tou{tQT= vpmVXV% >~! 0)OnA(zT8\9RC(~Uǃ?ʴa $ Kʀp0n 8Q-0ɼܴ rfޔ \#@DzCZh^' AH-{>'u)Ć`8: зE>$ȱ4#zA]GhM2;$,ٜg21cnm# ,v;Z Q@G,FBuIckdY@lFjU6cF説TTڀVOi*LH7ƗBSqqXC#1Cdkpx^$H!qI)֐Zi(ZzY5w?y\J fA[YPP\jgQT"YP/щ7cى${_dV?886BPtCM@{!>kd*VC楞4%8Mp@Mp[Esm/a~zڃ1',Lz`61W9./'tg'- #M1'K)N-oͽ" bN@HqΌ -%u~&m ݾ,ՈQ9,'o$ϋ㦻ariFm/SF(NA}1+{j">Wjr DU6`AeO%z (W76ꎆ&UOc\]%y`9fA>jCƦ:mE,B`fay,H[3NGZ6M9EnnZ .3cLtDC'ɾ1هF`"BAw첹aoG{D+:d@hKAA/aF2Ԗ Lh~EΤw}]@@:2zSPh`KQ z#D()]nt-@wRV aRIg؁ڂ8cm2aêc%.ԙ83Qd_ g O0\oB9kYRPoDޚNNm3}nNӻm8ڇ 响\\o Ȱ\;95,X~چvF4۰܃r#<*{ǚwre9SC4 5)C|c}0ODء4T2OB8:8l8 -EمH`)J/MCm^VmvێYܘPx1 7@XʳdRY,CPZl/+F¥ٍ;نN0=9͟ξ~Zӄ&.tZ5Q(IlfkcV~ jRqHT ){σǽ3دv,#xϊcǿf{5LJ_ xa0BV]'CfKT:<+!@ٓ}zzrLP-~ )ֲ?{6i"2ۨaD`"hN$#*u=@m$!mHԼed,~`}NۀFs 2!%QE~4IEGx RR.SՈJϴ:d||ĸyÀ`:1B4m;ECIgQ \z~X6DqE1Җw.<ک#ZWoĥ{9_3q7iHT6,A26J~qi$؃]0MZ@F⽶QA: y<lNBHEXuI[TK S_!YF ;ͥ~5IJkƒk$p: xʶp_+jo=xNKl̩Q_m8xYІM-=}3.v;M &ubԻ" gI@ 5lmTfa"lvXl@ ~+ HZ-\c%UEhf/z( L+hggm {f=ץr)#Vw袬/EB"2J| ̥xc6 ?]UI7J鄋2\Ύ(GV u3s 'ݫUPgA  KW$ -G_4Xm=6QKH  Nem#H?ʜl<$ (Y0u_IVOtz=4ܘ E #[9zm|]ѫ*@ E$~Ӹ@Ԃ$invD6'fc&wKٟ(NMG&p MQ T j\G#YSO?k,oL*"PNaG/h{.}N/z?8PT z1Y\:g_P}x|/Kt9ZE~%ASZ9LL xW 5|gCD1ɮ^'6h?˟' z<,1J9q !VsD)xoT6Tz͋17SZhzw "D>KEH$ |mg&O jkMH+ #-޷{(g(@OLFiH(@˗UfVn3^'B5)TlTG䮈RR.]Ɖ >+c5<^Kf@.UtMh8Ǯ1TS!c[(5t,{GѰ30xl "ZQ-Gk,F~G E 4ttf < |z QiQ; FHЫщFיOd[+=U/~f4-Q*Ĥ^mifDXUWRoՃ#;*͙8SOhSR7B!xd7JWejrY$.*xh|fn Cj*\ZE8~myfef [f.7RN=VҀ*Эs 0EB&]q d5^"@#F> X 9ZW.k:LdfB' <3X2-s8glt>wX1rM4[}<<$!i "SHΣ󳦥Fz"xX2mZM}x" 4 ޘrL+N&AG-αBJ)B5Dq)X$_YzcV-5*qIԊ;4 M=V(d%m١gcB_U @ r/ ~J#j~H̢!W">#@1jPY$<]-8AE8<B-<21{f8|(]H @~!t!,@](Q߄j\`e E e';-_>+<4]ҿ)P:שP4@ .w(tH ,'#\R9-rpwzА+(-P,3oij"*/v0oZ`eϧPW9u}JZ6JL-?Of@!9!h&Y@Z FRMK__b<(ubotO!^6%紞9 #D@2?+ >+y&a *#>',ь( 7QZ>)q @؄%S0hZE5$/0S_fWXBbkr԰*k~p>aWAx ;+] JҫVEx A >TvYTt(!Qi sHs]l3QdIDrC0B "rt&ρ (x<~mv !\\WS<߻1Y k)o, gUJ-D@.,@}^DMJIޅKcKIGaLݥv&~.YAr,~wo}idr O n%}<蚣 E2bԢ6!3tvlH<lVw daCEnx + 46g-]C 2SO|8{:֑֩ǝxV:ƌrzձV Co8qPH5TtT$Y?\'⾻(E~ tp'!omň;P銯*Yl.rP#Kn&3Q+Z+ݶWb-CftLtk1IS>Gs}ql-oBD͇uGI11?mW̗oe Au[&Pv2s5Y2z{ykq2VT|&< VO#x9ZoXi a(3v7ظLK*uirK ^ o vyZq)&;!g[/%Z9kA?V,8bζ 1Vzy(]Vsw rZŶz P9:׮U܄}.!Cr v")9 \S0U4<5n?^2GeRV;R\C#Gͼ]fSh4$M JƄ6m9VboM91[#qb<79al؅N VUwgei' Շt0jR*p8|ᦏTRo7Ha9nGE)@b,QT{'3έ4 AR!*mLG9} Y0ᆬH7 Üph=$ ^Ҡ!kN#zcj"6]fUyv>r&pXvx1݆"/*7}5Mm4YyڥAȞ`aYuD%.1 c=%Y*xW go ig4ݡdE^|o؎j^ ]4y1xr{"?4+Ԗrp=Vzf.I?>ԭ' ,S2}aB<`墀0\%S9g刴xYRQ_bd dSg x2)TJ2б'2jTMHfUʄi]y[RWK׊~5dFaps-..DliܒL= ܏RQk;81Iʅj;]0(rT!f\"TfGzGjC;˙W#c9\$Ps ':ޙU%2H7 3MlaY3irB*[= Cv8=}fc$$=._o%DK~E+-[LR5/oCC-XuXq B#:G kUtFTsm6bO6i5iH6"+CbJzi˩y#:q[+O>Plp\Fww.c\v/Kw6>Rݢ:>ȸi\6Lܖ%n/wtKdWO"u5 os5$RKo&<-wғ )T:oҎk`5rPHЁ&Eڔs'j8cZ  ' 㹾 ;@=pRr,I `[ Bp_9> 0z/vh4RʉT= PM#?\ј|>•R ĨMDBMT?Ma qmOD _ޞou}w ;tqQ%WpG2T=)K+ܭ>nU aRU9Ob##.|J(!#`Bo$#Ij_ _0gp+s$o>'lX_vpFh7\<8)@H< <0p# R% ?;ޭ~e*!4Fs^S.@zu'Z]b~fWtgpmpP L$2-Ӛ+. #ȶ Z1\ i.<>(@+5p,[VvnLf@ LVee;*&E^M iu%$}s&3a[ 3Ë.s`?9Mr4 rljx@@` h-AsɳsAz伿PLpR”r*h~NErO3:t2+:[T T@ rOS+қٱ[jJ:zcN+WT`+iW [JklOEB|ukjRU ->r թi}^~I0RAm8VIZ? $qMLs(@&Ǧ`D2O $N @"p,G^- :/\pDQtwQTُKr1PQ]k,V @Rh]#w 'WOQ\UY!8ԠZc͒Q D@Bʸ7 P1H(( i,HOXд%.N [$M)0nuciFL8xH 4InRۈDIɩܬ'3eĦ1UhT[aj1a Dm!,yTtD~.G^MʴjLmp<OggS-" ~**(4/D$^,|Q8щlWy.ݖB\Z3hW쩶K$ӎASȚ_}>165I Lsk,hH<:M|HU3k J`@d9tt8Wz;.\u~?۸oQ,*_ϔJ5ȣe4@O%}tQPJ7i |(R"n%DɎSYOL.[6aYySz.?vw\,fv62.!c͑#yxLڑ&qJ'fHeW_5jeJ'-LfG2>VwdjsHg\yԔnD{L2R'@5f3W͖GѪ{̖%v=XB,i9y6839L.kcuOӾNw:6ls}+1Syϒ1՜[{M;Zcfx[Z29y4xZm 19;\Z#me?˛xs'o3a،'G׆,uz[z}$Z8=zamuwHiw?7Ԭ'ǘݑcvn MKw;ǾՐEDZoK>+mV*=Or5"֝Ob?foOqݝzv4=mOz!͝&g/>p8Z @}9]3O3_V4Ms>[6_7޹OZ}Wu:Q=a}~篏8T!!DUђ^v{53L hDhB(XI U{s9{+W.U5yMC/S/5&pכg/\<K\uo_7muu^&fy٧1D@Lj-N+G{ wK楜wZc|tn?:)/uM')Sj͸wkG \޴ܬ xh5h<1o*{d2sUHf}=OHa2a}^t7v꩎p=y6=Oov۽מ_2|8?d[ԉS <IG>o|ϑsUSzn9o%}|Y'_7ӟ,`v2p-L1?s=3|wf>pN rjǩ#%νy>rN;>~S_rߣ]܏;/K悳ofci9/ҏcL{L!ca-iͼsks=\r޷yIJH1e엄l۶z8ٶ9g_\d28g=6lt\d/2W;_ܴojYZs_~CKw{lwߗkZ҃n1ێd)] )qvrT0aFb4/3k:ed6MXcs,WsRJ7/ƌfZTfT亴OP-<&5y'ԫQrefU~XHwJVzo}ܓ7N^܉[|tޯ㹥k~v{1797y}9Dy66{#Y_ӇސKLyik;׍#~&i4=L3}$ff=vWǛRwHuBJ  - "VT~VUU-WËhugaP{o02O?蛪 Zu%6}yF~_ſ)زo"xA6q36zoNpF=#cr^yw~6/Aɞ2FLPo߬#<6;{a(!5[]FF~G}y&WUxkg:I0_ȿO7'[/?٭w^\?x㻯ۋ/ߺ_~#ٜ쟾<5x{xmc??ɿ]|==>?V-}+j]GL^~TYybΎ~ZMcnxt[Y]O˰e8vnNYӧONNĎ)̚cƩͰc=iЩ{y=8}?M;S#_RIFFdjSm63$'Lum. ~3άl|<\ {=zktFRuGY1;߄p,弬^͑v.Oqklb Ypnnkf/ӦGdH/׉F}o:3vtqLn'^]vvvlKD$һR8rR8 Lͭ\#:ȿ?m7^ߺ>1g5YKKKQTvN'4RFOlIl÷E#л><9=y7<>|ח׾|ouAzy_k㘡yө1YL2/i=Ʊm%ud{֓M2|xٛ}{0lʹ%Hs7CC{cN*LMbJp𛿼ևK= [Nbg#~o_`H} "[NO,kWѿL:䕞!C'VV~HߵcӶo/}hz_͐${?#lD;2f&8J;s)ںx%bJ-g+dal-{sʕWU5nx><jۜ_ߝ Ƀ_`}W_;ț zog{S1z (ڒṄ#={o&1tü-qGd;#ٶoOp9ӬZr-^[]q`Yi5Vb X\~=t^Cʔn%8ߍyvU}|N?k!7rK4o'bg-'Ƃ~[| ͗ǿƹ3{'qe>{?}9;N#u˶=!2=55V |ne`Œqݔ6"~zc*yCߪjSkl#WcS^}{ o?otnQ޿pzmwn/t{sJnOȶ IAfKW}mSN0n^-SO}/k/}|6l2piTVl(e,I=~Ic̏>鲷?J-uү?T7|;noŰ,r5sSHt/8W}82}pa4~?si?=Ht 4IȘмm4cU}"f1}׎8q2_ɠ=sGddtT͝R\1(3ޓfnE]=sy:ɲ902.b嘬=6fY l7{8XF,pIЙc9>e2O#?\fH ]TH4&%$$1+%2\'OggSCi\lкخε߿g<Ņ)*n!=;upv[6Rn2s͘e=@҃=vn"ɘ<}YRjl:miZvX.%Lmi)ƣfŒX&0/3:]M.ҡ}'ϣc4MA*^yղM8?}/TUUm~emMG_Oyыw`f|rtٚ?<1nrdkuOf|q׶?=)~[vWOm}7(ZwnSǏd9q~-Ν2}׏qom:?Yзϡ;;(&)JT;Op,~<Iپ7mB?1Y=+})V8*_KZχi<>{tGCnmޝu^ TOg遡^p:yy`SOu7g~yO}жbaG>i˹ 8κo2}+߮muwcn=~Èn!6ߍ9Wa,;;%g%{:RDv4wi\G^uk"5mק8Ν Czd~n|iEz8o鍇O}xNͷ$LCo$lt5^12?+:ov4?6#My|QwI^50zsΞ̅աnSsXC9ey $b+#tf;m{1+ëۜ:ͣǖA[4h%ЙW1+ːDҎ;q;=5v6*0NSi3gl*`ɮsrq&êK$iR.5cRtrXH$1J85}_sҽg"Ƚ! JCiuGWױqnuR'(<ȭ@zp"T~8TjѶDUPPJpÒ41n79piOYe<8<$2kf*i&ۇapT_rاǏw].X3R1X h*MJ$r+I[OH͞e6na!u'w?畇[oNzr\tJsX`KV<<} y:uR9w:*S uQ8DEyǯ;Wo1ʘtO҄kT,sr#g GxٱJ1ޝ=6:׹)^vu3%  l\%kiOn;CGsИ0nar&݃h~8ڟd]59[Mo?~%[j9c4k0vp 4 uH*miʯ.جe1nޫyBMIH4SA[G|ݼef)s/vGOW{ߏP]I҅V~{:gͅeeZȲ㧣YK|3Dn_8;n>Q- F&hۧ:﹵ȵ '=;vq a`hI~ϙQK7"McQ\7Jm2_qFO_]!BT%R FE=2<; =s*| /ߜ״0A3;NtxylGh,Wq45ҔMOm?5ly>uZXvmk41tԵlk;l)Tʈ搒&gGn}8u_=Y #n?_TzF~PJ T037_<f N\_.ŤLk[T,ؒ>9荳urv&,G%&CGߣSg|>vlYH4Gcj/}$C2;f4ebee%C&ӓ/hISm-#%2U\Ckp9{sy,W-Y ҝw['O,I&Uw]~y3_cy"+g\dl*C&Ñe[7DzIF5|,F3Jc䂓SGxhq̞G>'f2NәՑu8{[|<˩X!.Z=7[ ~6wt~Oyf(7ʍL/[e.UW{秧tgͳX_~:OY8]׋ oxtiP/>Mq7OlFd`$gGEkf{mHKO5lVu8/qhb_zH \a?4tcW2 fnmqON'^_~OypZ>ywf_|Mb۽XqNDS=Hy:ޝθcv}1 Wzܬ[?u(%S7ӫs?Y=Ys<_`Źq܎Ve+bfg&mEOL2s~^{\ehao'dެ7F}:I7>O?#.];z˛5{_GҶ&rUr9oOVJo{rd;i[6t<5i.wz5RBivf%7_cب72Lhu+/?y[uXU/qZF~O/YT;Ӻhh1[3Dʚ#_^ۗs>5=w tϬʚw?zʇ.λ9uwym;\ٮyÜYJtVyO6C:01De+V,!؏t\+99+ItY1tYs|58xX98 |jp{ _,u,?wnĮ F49?[[ϳl^q|.zLDȘص΋0/e5h4C_nYO߻~0(sѱud;kIWHios4MwQZ?baW',̶~Kɓw~vnsg'>|{ӹB:|ӭzxvvlbxӏM5céyyhIc{Ҹ4ߚi0~|SI#?Af+&Un5n'#MI+}IfҴ#;\lTS& Gvvu~qgɯr:cS)+gޑ~uY!aуkz:O֞zk, v_|,o+^#쓾j%{,ӄgϻcn: ''v:_8?cNx\|ojxbӏ)fjL+'c6k+mo)Ik0H>a.>1hEr[&SUA!\^RܟdÛX˷ޜC>ި:l?"_N- )`lyo_=O7N ;'[iN9z{klWxYOYt(mR?*eM|"jxf^)_|~I鎞/~>+ܓ}Gߧ7"=#o2yn8oƬ׭XcE߇2 kX 1;>9TsڟUUUO׫lƩ5-9hvPWïиg]O>͇l\^[-n@n9B8kނVU4=#rվU,_tihz~^&rGϪJw~)*"ޔQ*ߌ}X"U2Gmwt}9n۫{{سGl~ͥ\C- ki5w&:[k NR޺O8Q~8qQa~SMYcCj{\ZE_=|9O7_f;ϯۿ:p Y{K2|ϟ197~xs?7MLyQMisfyiMv{G9OM֤8fD=F/>o mj+@ߟ%eޫ{ګZqwͷ'2Fy%7}zLJN^<.wݧ?\:;drîe^SsG;Cn'N|sdG_ȹۙl7ݐn:ᑕ;LLy9s9D[a]% i~I]gKߪZsvb4}1B>_sGOu^<οI\G '9q"Λ$/?=xO})$R@Y! nOgSG[z羾dܑLH8z8+U!丆{?ߦ X[[&#!.ҊZb ǿ; <7SUL#ߡx\Njeޖ} l n=i,-W1ci\n f~V֚e0d92kYӟLo=S2Ov{f3i(/UMr-,㠀E}3UUii_97%݃/woe| k'{il'~n*k{)wZ?_ 1wr6>;;͛O=lOl^g_X5eS}yin}#϶cUO {֩)b¥o]kM10M!YaQ窑ݷ>0ܻz]}_[rm{MgIӣOԾMj{:q4%5!|Eڳ\|wǼIl}pܾϽ*$>;佽Ƈ߷t>ƭvzC#n;{ȿkģY=\)hCݟ՞I޽լ+'DZ~YeY6666$c$޹vs/.>o#q{41iuw ؚv]i51v99|{rS7_yusV2%IG~$IӴ팦G&iYI\#={ļ9D䜝Vy ! L+qvɭIDASÛFѐ>;Ξ#ތ}tӭfu.Gzz|!{GN#'/Ϧ^.}3=wvp׿^Ҧkߛ>y~L|=m=ڬUIё|c66=tȐdovgc#i;;MTw kG#ḋix`<:S+)\֒s?fnnqIͻVSt|čZ{^`醴{vO0JOu6&7^5i}Z_!Ɨ4:B6kOggSi\.ƫpٶۿگҹ \ZQx<^꠿_NׯN?"a/o~~wZFݞEOzC_0HڇdƈQ_N8wLt5[R:S7}?fp{j[z~)9g3RläoW}}㳟˔Rus=˧gl^_q &$iIo}K~f$b}oGbHTf[do KglmÚ{C8l~>ނpP^!333oN,-!O1+'3e~ z[)qJvѶs>fY9grYu6cY2_}uVn}&w{Nڑ.t5ecufUJΎ}D;zL ^07Ϝ~fe3pE7Gh/70Qx]9vֽ:vvo5i?6~<}hѴ_GGM=0d4uI2_I~ףK*Mi|4K4#M4zE["S"A?3Y崼\idVTײU{y-w<{v\Mo?]w?]W5n<^Y.xËߞ맞uwHޔLJ zG4s}DkHQf1N {֓1տM!_̺pl jdüw孾c֬> l6._:͖3$uRWr;!jr蛩kewW>;ZOpX{;ؤ.\tE+??Ma@b؝ a0#s9TǻetSm^5d>ڿ5޳L'2+=krdoF;wa\="}oUUI'䭞{g˜->.W_:#>ѣjxҳˏOs`itխ0j3&؀ǻ}qQÕ|^S ըX_W>-JM=Zll4m$r koc-n۹R:pwcZZd^1^Car{|MroosO?;7|ٿҤNh24FhƎڤI1YL:<8סh;cC"|166 tӝtFpLK;gXlw?8lKO-κ4lƎSw.ZĊ);VLٱ\؏eY2iuݼvShy|elqIg#l.#1ev,U73z3:%sưNaf%qe\G3qS/#7Y64w+aDMݻ.ݲ\/ha9q=ˌ4y[cMnm?}6tILdS:ڬH3֥2״sYgg'::hyO=5z\ܬr[b}ΉVU#_پWU6%W;?mP·ԭuz:c#}ڳ&r|).x|5o_i\[x4v?<ɛ$'hM3M|_(0x8Fr‡9=lA%b9Yw_DZzuȾX=1}wkl޳t`6+DRm-G<"pV-W2yC!r.kݵ?ݏi=W׮7ƮWǛtf賓^ ii;DmHi;>3/G?[߿lܷў~Weem S†WnUfL{[߳[~L dԹ %jn⼛3UUjet| ߬&ɁO$isz+>dy[-m6WQS[>֭sSBKǦg3?[WxSNK8;<n::P<> \G$x 8*Oш.??r[繇TU'dSC۝s܊n=8~`jN^pԧ<3ˣs=bщd }ԛ<9Ar#﷯4ս]/kHV{o{mePfM|6}WǙu|j5LOk6BJ%lѤY#ܿ|~kD=F0?wsw qq*+޾˛]{oyKg]kl>eNsr핓>> ӑT%:HQWfgѿ}7}t<9hyjeڽն"!/<^igB$|!:Lf=s GoLUR{%--!sVgֹ$N7,Нlc#c#Ig׵s&sleY1Z溶cVH;6&av,uWdl,V4#en FZ]1bX25R:EFzƈv6K:[ԋ._{b3b~q&&gLʊ.4tin{hswh7q5fffC/NǗKNu–aԑ&>fLv82E2vyanoJ>OzjY&wMRޙ8&ǘTYm{yߔFιanyhV;Gu~i&=R'Q?(Nq^yq\Q@#ݬ8OSDX}Tg?aU8a\UE<b̮Y?d`O{w7wڿrHJғ&|aǭjmm:vڏ~==6m[M͛;mEۻ*d'<_ maÇiu81Qif98#Dt~Et:^Yz~9v:=}wO+OOggSi\)ösἶ~Op7J  Pݙw?CTm~Ltsۋ+/\>d|$_'/һ_}ޭqga:2raYv{ËR6B~Kz4aBepU!>!C?Wqgզo7c?~9~a)/=~&?S*߫˶} }rGIxk_v'Ŝi5|;9۬1FOOZe=Jnouz)3dyds5Q-%d > `F4/N\/á\媪=݌6ߏ㣗}6og]{}fg߭%:YN)˷=?scaڟm|⧛N5>|;*󹖸1{WOc(Rc]f<#5-5A}1O:;Ͽg{<1}5SNᾧ[wϽwd㵹K=MZI͝|+#'a'įtm{ڲv ,KomogImCO'^]r.=uiiǣz]ܵmzdL6m7mWYeiǭ2mڔ)+M[eUVa3?|eU^$#Kd|0yuڭtV|ig۶m[fzt.I4ǣ!s<~{f43G~x(|_.;3ٱr"ߧucc=u)ӧC cT֍G9,,_1uba|U'Kjܙ}"%/n49k]>F. ͬ[Mr4mTڎxlnaÉKgɵz9?=>GnӛNz)z{Lfqqqvsq.1k=~~i'vzmg>6?rkd7qP[ë43? :)2!*:MsѧGl#P[aHOe~7^[!͖iC>< ,)dSX]X:}&]O>)OOCw4?C|nUM/*OSSe ?#s~=>:u$)ToKݒ߷qѕyyaVz5f:g1C,a7Y ߏ>.x0V9/(y9 Or=5gN#{4|<22Q9R|oz֣<?P9佯~g|>^ONJ^o~-IT,hHs=w~0uv7Gy34=s[1fF̊4}3c Dǝ#&uFϡs\z -IpSΛ$KpP?m;۳sz+d۟zWis/kfhkی>lFi6249Í!i_Jn7[_$ mFʃf ۙ,d%}N2׹qy'udY.C:+eX:t3NgX1saʴW._9uGڹ6m۶Mksܹ%Cy}KH}ggU%Aғӆ49 <գzJ s/` "v.˚v|ͧ/IYT.p5hXZf1m-w<]܎av޷8=7fu[c&ccLffnOIzb!iVB2Zo/?ttBI^\ǔ>mtND&c =MJ;^%sX[Ub?mrfcnvwx^׏_s2UsYS}^.qٟNߤG׏n{pp/&`wL6xYw#֏Cds>8^?" c%I3]=r2+0_[n9o{G!XU$%}ɨA6!96Uz?u;r̛&FS~ uܦP/^ң߶N&0Mu&Pl -sH^'j|tb{.%vNI^orZ3#(sʀض.Pm$mE܈^#l>ތx!SJxoyL~, ܞ}$I+ A$}{iDY>\+ξWߍlխ=< w,Qc~{> uY~&u:UE,`M\Z64&S IŶz8x01_wrunJvwMTଞS+iUL![]!!/Rn`S{$5K3"9xю55L8xa3H$I6}&U!aycgoղGoK/JMdJ<߆c}'.Ӵ(BDǻ|Ӈ1T~XYk5۱\OggSi\xoֽpiѹ>{-5J!eIV[اIH_H▻CYo[U`H8~ܚLgNNLigR|ǩ4ӳY3[Y2Uݺ;UEI;xѫ͋ݥRtob~g7ښ"aAj5CoBc}NNvݿ;zKIsz$3G'mfhtItO1ˎMtb5LhdNe7y[И!Ӓ?W툵Wch\|r#[{N ow)2%A$4}nͯibdd=~Sٟ2LET.~sά2>yޓpGޤ̓ԚɑBõ˃?v8M{X^ѧ!MpsŘ7?{so_q2$y>6:N>|熱7GcEwmO'&MgxnGJ̤ɐ(uN='qtN&MG#\ȋE,@8@d9TR^2(qV=+ݓ6Tw߰\͉<0a urRySq`d_;i6=O0LͲqfjdrL/m'`^Iji{h;M3Ȑf̣FgVK|Nc& x}FKG)81\ey{>}n/Ϣl9pڮ{o[Oz{珞ox n$}z"}^B9>omU>ڐ˔^'_!FaktH>7 [>5Hƞ{V&^+<<hY .Z*x+Ŀ(W݀}j,/25\m-NyYtgA볏BBV2cϻ%rJ= kc}` nƦQ3-y)v ink4C*^S|#τ{|qclr&Sd3s^+=mpg_>a(r8*o[Zbe>Gd]y{>{_5JeÔP5U$bZC*ڱ#*eJʆI:ǙX_2}}9to89-=W l-6 <e.01u}ϧ,fGlGSS4R.]?09^koz}g:?{_z'wγq5^=Kݰdʹgzw{ۼ!E59a|ݫuM'ҳ!&$`}4ޒHfS7k)ɚY!_sF<í#Qp10L}>־%7=h'?9ر-=|ijxGr~橚Q=gڶ|F՝luVb76OO < f iFbJW WYu+S0痧ޟ+%4ĮÜ|W;q,:"KceQ+gzDid9+Itf,C[IB纮S|ٛeْ1FbeN8dʪWX2FSS71Ƥ!9̥eʌrt?:2SJ4Ҏ qNYSsiM4<%Ma/mwOG+=#d}'|rSW7^Ynss Lx*rU^~6n5wĎzK{5ݺ6iÑæ81T2Ұ*C4h:40T5KÔLJ5aT3X43hc\e[46sTM֡ :- "ϽrPF< tƫ\SWБϛ7}1l~v'xx=gS_ﶟwO{?ug'k$:;Y~wyz,b냬Cϭ=Y-b㎎CTW22]_i==;M q~gc*C\>z ]׮uqpuo#1?7+f/W<:͝Oxq/ys}r}~ɛO"B_[99Sζgײ@MSxl;%UkFΘlGL?5 An6ppc僼͆HR#WO]!zg2l_Zazh OggSi\=9-޲۶ۼحٹ IF F|6sC߬zrr7ɧӟx|y=ɧ\lw74>OiS9ۗT?4'O?\=8ov6ovzk7^뛛m??tz|MޠoYhg~[MJ~Kxi[sL37s<?j6ՎR‡wYNh}\mk}OPޯ$P9T3Ken,,acb\atyipa'S7IO| ]C''׽>gÇMW$11r?ҙF~鐤c<6#o!MLsz>Wڗs̤_|Mk ]Zž~N?fĴ,۹gU6=#K܏5IrFeYbz]%CwO&$UM2ǏO#cqvkGHwV k1Xδ; Q3%.YWf9\=iD63r/|ё##I8idݧ)X鑎{ko"CÖƥLfNu+&z/;: D;th#ס3jtڱԵlu#h^͌Lh"zЦ5q4QiTЎ9 IԓFf>m[hBA'ЙwzeUݩ_ĎXuӌn^ukj;tat!n =tbUkٰK2gG/MsG>݊nG+/fvVGCk81pWoGq8oܛ+1=fc[y]4wvycֹDi}{evV76g: qd۔JC52\7s ^~z?fb2?n}|&*m_8'Eާ.n0ڳմoL8YۇNvadF;7e(1;}ziѣct9?ןv(7Sf!^tܭ7LG W5tAnsM"'Y=}UUߔ3fc|/͝o7$vԎv7{mu[jwҔ[f۬vab~>4q|}F2N۝nyJ =)mY{,fgBXƘΖ'\VxX9&:)i 5?)>\;^ºvۇw?/뻃7ߎYiNyyes|S<أ:moMOdf۪f][0l1<6z=3=>ssfF.~z}yćù4)Gk]Gd,yX Q)σm/ C=N_wо,մbsy^{za']-?2yК;Lٵ6=M9=91~P&^;qiisec;r}inRcǓf<eǼJ:0ghi:&汦.{G\EMÁ؞z }v==Ko27&t˸䊬a.\yژ̬caJ;LӇa8T+2)=MlO1+4d Rqh:NQ5\piT2֞58=iK; LÑ)xgOj}]ϫO_PO&$9ԧ:JɃ׽\:t2EͧamJ;EáGM樑CF2Rc9:F9S0lʱÐcƱk_Mm#kk\˱9D/*1zJ<\[z̦~ 빎B{[θ\UJ2QktݼW 18:q6iJ\Lzzgb ?g=%-=vzm9]T`å,&pR yAL[˥+fUU5#7?w\k:)}zyRLOʿ&y/^>~?ocRM?ShwԨT1%s¹GNfaopwFCgL_y6}n+;WV֭Gۯa܀M~ p khGV^4<\|}jCc(^O{ w҃dM'G>N6]~y~~6A_2nt[Py[:1وgj֑##G?7y4BJqe=}i4V?7yӑ?xBo6cԗD;uQOٯNL;-],2nON6S&2Ndǔ31cp8$pt:wɫf,<\G7/u5K}:XF:%|̫vyodV.˨dTILzXiQ4ר +hߗ7TJZӒF$y[۱|b;vOYG szy5c'O\rn2ØbC23y5r?f/#s9tޑ1Yl g#uuc&6sd޵ovF t6uhU|}[{setd7^xٙg84ƕF iF]t> !6W^bhe{eu6e8H?~qf]=Ḙe̗Ƽj:~{ʹu7y2?2Ht>gtЌҎ͉:% ÐA?fw̨>6XcMZJl=2@tf@[EolQ<{VB뼥?d)}vݏڿ4۽ɛk׆ڜ~)WL7ܘ8oxw$mok$(Bѩ5~fqvGN|'=rf5!~;7f)Fb+=dv2m<>+L#i Ta L!n64m짣͞;wo?Cʸ\U_=}Vc=E1O xyNG/g6WЅY(w Ox674Wx}eז]0'}5Fjuj|:m:"mVoG=[uzWx4^bVio]H1 lں0%Z4?c=Xʘd&K|$+rvGGX?ۏz^ շ+ܤ>l1]Oioz[C>/3~[{6S_Z/kKx=kȷrR>ם3V+NB w%MOggSi\ Aٰչս⿶ڲӭ;GRޱG*hj?wNZYy8C{蛫Zon4zsª ;7L::_뙸v7W?ŝ\o/U<5#mΧW<V{{1duZEMkhUܶq3S먇~}xQǛՑ֤yGG>kR<ْtH7t^W7o'{?뤻ĈY^•M?]4jr$?SU~_94y;6M|z~z9N5?ߍVq~/Wh@C>&{;}ڿiFӶў~8:;Dv~[D>ˆ)ߏFlm̝j:OCOyCRX~2ޜ~8z\ 8y.e*|/w<}P^fouc8NԆU6M$aw+N*ݭYkCZVQI^Ж9g8,WUO^٧AZ~5s?oq_ ӷ|.Y}}ǵ͓ /܍0\ݐWo9soOf\m'?I=1?3jSܓwP7m4̙1;퇈&㢒̌T9F^  n١=eMǮbD&-[,Mdbf#qGYH;u?V񱬇]mWwNlMD;cw<2nom=[缼3t^k.#3i1#Mc44i/u!yٸHwcwx0|lL\; wsN\E%~]q's-ݝ&7W'^{ou/' !yvOh>H2C;f_d8'ogxt~IÐ'GǶ9G;GH?InZN>I;h{WѤig;:{&ڻFD RGj4̐rmLGgd}m8{s_]Usw0~nϏXz7Gܖ {I_6ۑٳnǿ˻ydÉ͗4v;Zא!4x'^Pz{sPV )P[s穘».W: ,=ɽ:\m=}qY9o}<@W6?Y%/oHXNS:|6{Tn Ixh2 !Fqlk-7v.;kY? O{hǃPΘjvc{P졯|'?71Ir|C.%ϏsⳚm/֩fnd$fwSVtv=2zGsǙ׫l|$JR:ӿlY4VJ} sxo>'BV;Zk;pt] f/D⯸}\3^R>n ھϧ>n;m]/fbO'Wn9tu;a|LrOoq>9{sOv'e~|6l8?Wl[\V9aջ>K&#pcuטv/ߓ_<9lsl-vt{ǯm.폟n}~bo7Ӽj?<\~7y%g'<aC:6'}~;mCs9lrM|ivfHug'l*iF#fg[mm61gOggS>i\ #8ûȰrtÞ7 yg{ffRJC!nX~fcBims2ّuwɫmJ{yu?ϱm/31_mMfyuGhehkl.V RiiwhLjhH+3i#a>7yvl66lW>mj8}?t'݊5Q&UTqSn֓1G/J>r9={gostj9`;痟?;o|I.KfH~x'?|pC 3Q;1͘4m^c$mft+ώ\t|f6 z[ EU[4+2o#see"\kXV|e鼿ȣ~flE>4yx-dcyβlT]ISӛ_ѿmqMQkc#!6>N8aϖevjMՓM&OO-SGWZl։#Ƴ Y~k2S.bi:G]s{ϽF*.K}__z'O^vͽ|)3'7 }|m„ّH7JAaj9Wύ[?o:OVm0^{^=4syfx(r!lcQ^,O1M[Cv-pKWGMOvL2XHOѴUgl~pm'ۜOOוۿj=ךY߭ WYZG(Mz7^_HBj)iړ{ ڏSÞq28ru~ך_O7k$WZ B +F^Up94Mɒϛt(˧c󍾓^}׿׶Od^6@jl+|.'e&[6_zq,s:1=DCrXºSSѴs>vpo S{pޫ[+OMےߚ{7ަQ>Hc!rh\UŹW pN?nToyxٳgsn>>oZڧy8'S|M[ccGVLҳK|'i{?:u0哟xJiH/bu GlYXaOz5캝^&y*//G ׾63~+DvU MfW@GSaNwvW7/mgG_/N~>{7ڟ\.DNo&}~]TDsj-}Ծ^AjqVunY7395=4בNN@݆u t>-/VuږOKT}ϟ\K pL,oD5C&ḿ*׿pg?\~ѫ'~x>۟9xչo}8{荎"_ۼϿ;W߯uF Ci^cZQriLV-{8uםqc37:7[U^]K9in>f]Yg*uʮqۑmF QfcFP J=$MnҪCG~ˌJYѹߛ92a{]۶R&x5;<\ Hܯx ?6g[>KZyVU{.v9|yMS^;rVuOsZ۶5g1!4~Ę84>4W#2cʹSI[fC\Ef} ~KPY2xw`s%C[G\G5MgJxsg'kh<4>6F<[/rCfq>Uri:=LV"D/ez28[dlƾN'?;W~mH6ߺ.y'7ב\ƸLY\V}9VIqL吧{˃42]2C3bakϭg0n8Yk(L> XtzN㖮jeck= ]c٬c/F9iݗP[Os_ xd3 Q>,hRY\,= L=5VUeֺtV̶S=e~`ݹh?/o瞏x|\md/6mߋȺG_zgn҇ړ =s:CtEgb-]绦GlOi찎s`)yDb,OggSXi\ It]uۿܽ~;8Wg?*~w.Nۨ=[._gLU5Dobxc'v??\}zCf?3YH'r-OU}*k˸1qHHRH{K+guLe&qZ;~sHr9h%u,K8o>~f%'EW#9ʹR*}:T?>Orvw@n4s=G?{ܦohm[y,;~/56AI~Ku>}bnmk֫fG2Y~!z!¿wo_7KblnF] k'~i>+yc&J5xn`/jb `,/r69Wug}>BȺZ/~^-?][ǫ-k{^ڏ]vւylmT߿R8#U m+3Jڎj$~~%l{ۏ07wn`\u?L=wXu-.OJUF̕VD7 K뜏r(۶\U;t=y={\4nϯJ}yk͹fKneߙ]&vF5لC}I;k;TN;Z=33fdҐO '6ٷ}kFN뽎.4nKɉ;s{K*NwUx9Y V~;tRN1ƹjW\pypJ|hӓ9>^?U '>oeȥtTņz]9f8?9y#{ڿΚI*#Gl[u;'0ODQ߯Z=)v|N\U:F/!\E{}s:*|ώ_ק^/wӿoú>.?K'уe=o;>_zaϓ3yku-"ٶO_/=ng-hl XڅwWQm =ӧsуkRI[kl>o^lޫ-ԕj2$#N[lfȕJ/:s! f켻__=X:>='r ON>{ޝ63vԉ:]yl{A8 K'O=O],%3X2uꚕq+|9L4fYmM}o=ީ߾jf7Ms[yܛ'Oѱ;S9v8eH:4ھxngh?|bp2M93fG%ƎCam3F2'MkI9~$O~׎G,tN1; OjRcqnO$)-_\NdeVZf2E&z4]͌9X1;65aifb)S{6ֵchny}ېԃLi3:2/KH'w&IshY)&oe$mc+ح>8sdvY|$3.=9w^;HnodwIuF+հbcսS{e6G2,m2YΙSvֱi~_;NiƗ&f,2c$_cN~?c#1vqq 'arI&] ZAmom _u3ejȽO;b󃋲O5'}]-W^W#o;y|둫և7~l]En_s>q& ܍m7\2;͹oZTLsT_ȟ9=}8wChMkܼχ1ڜNuW4{^61q.yl%V{UR\%oczzO^_kMF^nz=~9s}T|oރw)wϐ&.J9YqߟHگoy$=?lƟ_:89ϟ5%Soi/5SߥqZظNݶl?ʁf^pUUu?7K뗿:ob '<~Eّ1i~z1{wn˅7tf Z>7m屁̓l~L5nJC q'9~wjhu2J3ͦB~u~Grsvc3ds л ov"u(shﲡ1^n̟woMl|xam\m=$ϯۜw]zGޓޞȡo?χ}o{c4&QuHINڏ4k2GG$ujZ6'59#5ڮ=:bvedgZ&Jv_~ywr>>nivo=__Npo_.ʹac?S/p?3kif9^瘣ɞ})ӆ3:L&O51S̵i&͔iSabbX2h۹N:+d$cYX661H9seɲ$ :sιnS;[I"ͤr9smg֞pv99l;MLFP61 MP @̎r PiܤLjYQVN6LN12NY$Ìinjcc.K̤ku,H;&sdmf0ml5f̄56#5G團F07 d)볚 46a E_~2(;xu5D64jc :ƺlFPkO3Ԙa YhgVi־}۝DmmLN̘nst̤ḴBǪhhWoccJWmCut@G-+@!]c;@H{ܣ\UUM79ŠӦO铓i3;D39ma)Ett0fv 69ljcfSJeSCtYû{9[sa^Y5{ŵf16h Bx Ywv{t% ({,UA!D/pcJy&SUU$8* C8tbbz놚IOdD>1&q|lqJS3znbڬYn:mwg)Mu$N\֣ ˿ b;y |>U S>Z)!R>{\\c(L6LqjL)U&&:$&c2l6v`dĥǥuΔ6xw<4;8t;7?3`9L*<~wKD~꧶{yxkUs[+/Y:_aYtäaChP)j ER5QĤdMMfsNf5ke6*CMDФ:cl2v! ~Yn.eeïbdWSz5֧JШI%EZF 0u"2LӇeYH3;1Ct0gG{zny!eզ22.q w^o<^!ŵC1N64MlC.4y5fQ1":ZMcLTl';ۯQkRS gO`M (&5Q$%cskl괶;]62ǺL KP$5Tjt.Xɚa{Z3!Ôtvi.èI]h#|?vNj6CT* lrm]Y ^L!H8Đ NөP9a0t1Hb6U iJdvTtM:WRc01̕19g`lMkFL1]ӎ[4d-+ tnqR7\UUK$c ʲ`P<d"%%U9hFVc8I]::4;gƯ)և+ ۳g?Ćcl'}}y[4iȔl?|iWL)LV-^a  C$I QIM@fd$`rUA)D4Mp80ң,Vkmls5g"͔Nϔ$V{f̦d.r$+XN}B\)됢Nfl&J8pporU9޴(j2әI標6;ަlt`-n4j*4qHkfwzvhO\P_ۏ4.YV= FA:Ov{ @2Dx *ЀQ4eJK-*똂vZfg9ڙ2;靘oc4[uѮjJKs>UllC67"$c{pJz j9g:H> \d gTb: >LϸUmL1RR )xq;7<lcol/3H|^XcQ˚΅ܡbq#ZG;\rCxY?dMq𿬶^;&{ſc*@' 逅''W^? 8" X.aHxM1;;{aȟ,.fI8ӣH^ʈ/3"*̣Pl7Vܶ{0f'eވȕx~!2\ZG]{$ xsH=2OK9FY+@˥*[CFWk,sc#v'˴.c3= .ra4g糌KJ#O9\3;, a&o+;`qq8$khܨ&ՠirvKa۶VfLGcn1%!M''MZ:eVKƜ=6hhքy 697{h%ca.}n' &L;4vOggSTh\u4[\?6CJ*Q< 7ga6:W1SiY27W#j,kƒ9iYIƲX6666bYcĜFX611F'd sV212F21Bvyq6Z߄Ә"Ә"ӆSfvzi3:8iMLN5dj'j06fMKQLLM el\'LI'3>fb4t5QfcIIgƬv#fat𸏿M]iXHKf?[?" @FW?^33NƓx,5B2fҴic4cfdFØh͹h64YB5!:Ndr&O NI1:l u,Ә2efviK36GÔ+m21kZ6cL6yY6)AbϞ͓1$;Fld%Ôarr؎C3eku9,ccɜc:ǒu)]i-:4\״IenNctnnJd]k窕iSҩ$CcvYwMG37gԖhr:|-)ւ xdV& Dd{^21((C"&<`d S;0)d;mrб F03Lq4ElH&hl2s3ϑ"()z=^J'BIeч޹Fa*_;.^ludb1VGZ@!s5˹+Sr25+DT3N&gƸXMҍU"1Ϟtgơ\Ӽtp'{OYP5<_ZiyQ5㥹3G$<{G'z8jk?V2=Cw:'5{1]2USL24|:bqDcidf0LLd0#5t4Mu)؅!2=:{d[1n~,ُtc4S=i៑.Vox87medKl pif'h ʢZ-fc1;LN25.tTZV>#]&T%RlpV:aN-tM(&aOhژLmma 2}fOؚ$޿l,\f,C7Ž7k,#]7g2nd$)It]eYF6c:+cDg$mO,0Y=97csmf,C;hH:en|>,"@#YddFN30=Øq&s%ru2A:HnjQkT5zvlm'E8ogۈq=v<腤a4MyU;$BRL:VcL\<.Sr4y$DZۛ\)c'CԌZAȱ6N;6j̸b%foi&'jfq0Vα8ߊ4_KLiMGw1txu:ˎp8<ޡ_[cMSnIu^1oW1PVۛ8'] x4= ^KO.WUUF0N c2t"[Yur3 ۦvî"FO"<]b-͚o|bx ٩-[{kq(J,!98d9ٕXl8}1)i~J|enί~;>̉d8D TcN"Á,rUUE4- #3}0N]&kfVYkڑ^F_ȰVF䗒taMw keuhvtj0V!뫧r̿;J Ӯ Qk~,!Ӟ}V컄~.lSUU,JIuNLi3L'͎2dr-fDcڪ1:Kc]ӶK)5(z^R]Pn8Utߤ5F\A31?׋Wh~0K[+5dkg5QeY,01ebS9llldD\W}SLƩӧM 0 C:999999fbڔE[t]f6trrDZͳjYɶmƲ:+c1s7~6cccs%2tΙ7|]xuIjR"JxjL ]GbݜuL Ĥ4Fl.k6V6sØ)Lnn,f̬ai' 510LĴL[Lf!LMtt]o#[lX3#ygY1o؜ͲlZ"F 53].bdP3OYN{a7=LQ @H!ʼnŭd!E)s̎n4&t(ú̱n4-C7efdmsiŒ\Jr#2ee^cL bxL9m訥ǩt +Kw1e.k~49=^w(jpq֖q; =C87Ig5Š3RCC+'JTTj&g'Mvf"ÌcWeCvFT,lB*2-4';i@+h'XS*Pd9;92qxWڶTy(絙Zv81+=sn4DI| G3hܔLU#vdVҙtvh!5GTI}H`OwN:e9X#!*͸rۇ&Ll9]4ZބtiE%ډe&5c0L,#:ssْ$0uXFh+#ĔiӦL AacD:K}IMD9߼y~3}?Ͻ9uJ .nPc"Z]9ޭ)(GӚØq씩m3֠#slf&):LLCD'4flʲvɒQĐ6H:aZ0L"$Ȕ\;1%L a02ieVcI;ccRbnV1c̬;g 65"ĆMfh"!3#RCUUUB`GMfb 516cSʹ08(l,];2Gf3eː.]ur:9 !cc_VkL]`QvMFs댇O; )t/pk~LLœ1Wҷ?G) lj(!exM6uh^S0 DJ,QL2щ]3}v9$ 힝mt\ 6/_8,Rv9=oa5_gv1NPvHs=ռR֌ٕkR{*rQ)7X6i6]Op+ծpp۸*2*Ѩ٢^(]C{1E3]N`T1ezʢs40uL4L&襒ľ)m6as͘f.g&! 7}l.ܐ.Qs:mΡ>NwOE=EǗn sDtӤy7Mz I!33id9F!4F"I:I&L:1N&LCg8C;ơѩ3 3F*͚Q2gG*u]6eZDFٌucvifLYZJ__5GuMڤQj t]0L;3;!](H(zmѨ !JQ͚2KB ˺n ,FfG,D!1uܨ0sL͘I7LWQӪ F3-m6fea%,tJfF"C.OggSh\w^[dC ϊXA`Fhz#CfM&LfF)2GYnz&kwjjz~%_9<(^y*k(tHo?3)qӦc31qr{SYu%1Xg2ti,Cgu4Gma"fqrrb2ebH\9Dz_!Ύ$8TZ]p}g\=XuX /:vwC2O `)q!'|;"2X7f4aL]sDl#H*k8uq”[11ݘ)&'RuLMeh4t1ktMrБ1g/di,tR `@h `0 ;}UURH8(b18A ԐEi3N6&f2Igє&&):>Dt)j϶rt8jcw. uR.5;3=^<84YVS+^j&+\D[+\D['!ۇ1UUN Ĉb20m"gvjM$ͪfdfMmpYyjm ͞R;C5 W@4T#$> V$Z(zjg:gHddg YZ$|߿~WnLsLk6 #m3kTsjv[^f홐FfV_R;=(Q{IboN D.|@jG!LƸ#! >}81f,\leĽ]e|G&/n,ے&݆qrB+&;7V%UV&spWČA+Nʜ\j{8泜[u8~Co DpѷO ŃC!0S;0i8\c9'$qN {>NiIOdlꍻ zi>n5].3׭8xߞnxÚ46IrLXA21%"'F KzSiɰoHCQIMD<bq2hh!Eڥ21xsgaiqdJp[a3NX/GhoCaSwnlah!E_+؎o|9GK_Ij~ ܄2 p ܄p(25 P46EH 1bb1j̰ͱ[QH̡Wan{ḨūQMBt'fHc(F2FŝQ醣 4I^ \f4.eG1p ѸHИ" k dَ`vC֌Z"mfH6D]NyO#qB,;saMoݓ hcb贿ZK<5jA&Ӫ&ٗ:}:=[!L4װ(:})y:z紼ڵ;+Qn0BG]]f&4%ꐙ)˴\T 1(؁)&ajf;utuV%q?_ձe5RS1 Ֆsr>WV{ao\TԴ'ӸU4fc PsJgt{k8I~ HL5h7`DXv V2yUX2%%`N){:::С C2Ndz|"ôe Y,[ƣ;˿4,ݯ5(xQDgBT\=^g kx OggS@h\f_$4Z% NOseg22U(d"qʌ3d)cuӇдLΩsLCCm', z0Tvn۳H6bVx;w1JnR[[{HճnR.;lK5DnTCď &%@ޞsU3&A(38mqNqZGmtl&L3j'ө38Y/G=wڇZ-nuG dA2U9D-Lq)'LFʔ{ʱѣqnͶ܇5mG;'՝J u[ 5,1c$cJ]CpqZ)s^<>[OgE,‰ե0wҨ/JyK습O6Ę; 臶R;t|~ ܻ)pp ܻ)p^Cc“2E(&5fFl31ɷyNUO֫ 9{s3}TJS9VtUC[3B=\3 qoO|^c|t[KcY~;2p;2p{L Y2kj+@aL3RV&sfc$5ڙ6d DGH|Cg3Fk^rV=fh^*Z1v9dP-9Imnmfnw\3㻿2Q*4cY0e5|sgHݙSKC8 *WdhRm cS2Nk:̔QlGNpnim\Қ,O|N0;MμGlNs)el݄IJx+U׃(۸M{4u >W%fw/:K\Sx=@U9W%hR|J캗dvfJ+sU8ƣ9R3ݣ#O߭VYʦ}{!yzt0z0}'ڨSyugKPolrrUw@EIJiR ߌ3^U.D6Ӵq3RHDtY34.4ԲV_~!;Dmӛ\ܯa/=Rlqth?GZ~Tfss٭Ulwãf A_#yM{ٴfq ,$۴Z$ pgkM#^WU!DG08cئfKWKZCGFGs;MfϘٓ!/l긩-]?un3P 7מM/٭p>}_oOgU^ \~ CߌB&"HYtmvI=֮awi}L=K3n⾛)@lhm?O?[֦K?Y3ÿMWc t3{R>q~b͕]_1Kri{c@.kH}TU KrǏ5Ris ÈXH_]\26cm Q/!O]Z_6W⯷9_f_i:>lIl*'tjG:`2vipK__*SU ڢi)K.?1z`Xu6rz6}7@Z^G tFj8{9Pydn+1?UXsl+hlK6yTߟ ӟT}ق|9ԭ=>6m,c>vLФ$)}(SU%;6{cc>dsK2\^H6ݴҲ}̲k]qC6xVybL}7dcz?;+K kZBuwNbN*f\|;6KCVY^o]Ip:N+z^U,Ӊ6}b*8cwz;sf3c컣_CCnŻ%pRGkyssʉ.th43:+aŊʺ;=lmms-1.1.3/data/samples/beats/house_loop01.ogg000066400000000000000000000516261247673406200211770ustar00rootroot00000000000000OggSxdK"vorbisD8OggSxdKOx-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIޭ[ikF6gonyjXJşkGN]9gn}irO_Nwέv,ȖV!B7dZs쭃b9$'R2_Ng^Zj3\Ε.R?-أ4 u;'n4%jIVw;QpЯ X@ %$&Pb=3iyU"M 2: iZftO̦U{iez:Nsv78֢Y˻f{KziF,)>YBʤ:)-9)DrXaQ,&W9T9Z5gNhCo>d`~23i<~i^љF Nw]:W*~at( b=Ϭ~´/.3&  8PNnnjEHAooX\iU7۾vo@wTY&vsZh}~Vrǚ}zP3˨YDᓗr8͞u;,2և u5>ïc܎<|o[e8IGqR~f*:DrIfJHa{ydD9K/0"~QC)sgGfORo"fuC[ 0"U_Pa3g"vMz '>(&͆tF!5(9mΣ;VUUUtps_ϗvߺև7_>&u!ɝUަB;Ԉ`j87)&ʴ;9gWVE3b`?dRZ M̦5-ioX.VuASuvc-fb0c9 e2\ :϶)39M0W=Q~G_ΣfGU$_˫_7f[ѷcw_MԃU*I]m9U_vkɕziq۬&Ճ4tR#Yū/FQ1%/R !< /heSH_O{V+gsZI08%]%B6X"*8%Z6j7!1ʏ_Y!w: +'?~eT<ލ_UUs\eiv?k^ۋ~uoI~ιzSMZݚe>_Nw`9dl9lbIŢ~\3pOeD3i)T[Z[3/vۖy.דD3/ WvwZ>j-ʱEulͳiJ)mU-TڨF$vך,<)u$(/Xlhug$Z>X>cUÙDI)bkݩb̨ U (<9>˱+{G\)%\&֮rqOGS\<~(`vm8A<24ooҾPʈ SԹd:eFЯX1O~nQPp~Yfn3^ZUUUnWvD9{c|s>4kפx<߽3#I#2O)R:,?ubyz&1DnZKBqHeD"EG@LsBŕT0sVvi7kS+_g!֝{b|fJ`@HlA;cN.O%hY\6Jރ gVYIE=6}I;5_~Wp^?~qThVl^XGy9q_8ǥ)N|ެvSemSUW6elQ4)$4 ulmr{™<ΚV"2h<2hc4Gz qDS݉H@@VF zWN(~g'1Tu~=vnqUi*/p` C}1[OEfgS>=;'J#C}Ҋ3f qYSrXVXloq(ڸM$-C` 2|檝vL*rC^d6\>JɁ~xkxzVUUAʒ&)Γks|<:6?qӝy}ټlїg2ӫq<;,M-B9nFim˟JGjr?@.;%M[Oݒ9]T{Ln^-bbnWFWH¼א7 6 Q9Zc #@X2n1`֔~Zshḧe1hǽś񪪊yx+TXf.e]x޳ R}(fM UhNp<ԫ7QD:!*rnV%Mtĉ8r;om=MU.,]$ђ[~Q.[ByqͿ,<B-EgYzt>{G9C ngoU]őm_&h)dVb%]E7{*IMN cuO>~vaZH%c5~V0F}Wg_.F]I^ҭuDGjl9G:6JD*sW\>=nm{i'SK"v?MKq&0;j-oQoe6h1IJy~DQ•X}4?6pH{ff{l*LD 0 xL MYjt'l9dǛU]Zssʵ[)۪Rh ʴNۉgtY\?ç(my3!S)9K0BΡg>/ѻ[T q,g[꿋XcPnT 5-MUb;]dg0 %Yt Yt͆LHqk^z),γB};GYhA6JԨ>FUߥ:TBzR::F Y(>CʭfZb(ζiifJmφZ J, ZcYḅuk=.:#L _X\?Gv ΫSUNxOYKZؿfr''@9{-Vժx-ELZPl9"Atf=_ߥ ){?mcG;8( '`^]$НNL3R~d Xt`}0~xǴ}^lٶR^^ _!ֹ hnKGGD1HnmՉ BO+svd6ϳR{5׹ˬ>.G:þW(:B@ L\Ih >%$HH Bee%eu^[na$ <_5%6>[ގT<ĨJ% _yPYfޜW:94[o)snfvt,@S(ɱ{GP/TTHi"1ˍؗ sUL OD?vXe8҂;e|DQљMZKjpZ}:vl1JV;' g۔LUZ[./缪 E<2أͷ_nw? 2#|=noM&}N׿40=2Odr* 9{<ҐKGFUȕ]^|9GJjIOGrț:J*Z^vPH!c[u\pSɹ0I!U ' jW̓|UMd~qzշPpo͹zkT "w٭te,U}r3*9tKiV9& w=ӜbO r#4NpT@95asS)6$ɒrT+9-lƻt7ProvOPK!cx (~$)^< 4 ZbKbֳUE9;;C|$bŒ"e+K&5 Xb3X`J/on5o̻t-M?_OZ:N8ys; =؇˿bӪ`GaIWo~_eㆰbvcUYKwپ`MFE5k*5v,^} fvaVȗ۱I$[L&vύqLY}r(@*fǟ φW %l_2PLgr5%#YUUU=?ؼ|͛W=ߝkV;KRESdp\_z+^ dZųGF!:C )(pPCWQX|F֏+y9kdꭾ>X_9ǵJk=hnekz$a'gt_ ~ {;EoU%; ݝ=0P-jzaNM9?75ժ5gtE9ќn{mmMϡs3 Ls644GRu+1A0UZ'%\)V3W9?XPao{MlX<酕[ Lp#g,` U OggS@xdKBF((0/,)'$'*663jw0H=g2o?쬪u9߷+.)f)1߬7] ޾zv۲}k"՘;r&: s;3GM!-lԢ=MPg2q¹QCU2l- &;DCmWѭSfk~ I৷q9Y`($bJZ>%k,Pm7.$KK튮d~{]Ϋ (iuE۳Ӝp~R0ߔ+0z.O6m8&Lޛgd<]TNolR]GXb<*U#) xٴ]W}-W/TaUa)N%*wpҭ]RwD;bګVڹ !FL#:T L'wyNܴҪ,A^7q':#amlcb>Zp}IJFsU9tZDLd b&,&Pt tl&sO/$;瓌,  W7Q GUL㲬T"oܵ̚S@I@p ;kGϼ~rUh)QD (/$"3SkU=T0lSaݳfe| [46.&q۷|'TIU9MN|6KT E@s(QVD|zEqrǥds&tYG o1Pc) ocƒ & PEfH&y0j|Lٲ)^2_6dSn8O*ΩBM4iԳ':}Ì_x',n^^{=fq>nqk\QAH~M=6ƃpE8𪢸ЮbVY-9!d q> F~YT5_fSwXk[]5f Yݚ\ (yx||C+H!aB0PP*R 7q"Ru&X*FIŃf@ 4-^vx;h.gol&.ٶ E,Ⴚ#)hNeJm&\V4B4IR\9,@MzuD_*A>PXJޟ #TbϽ 4~VJ,rN & 4@~z2q>6dz%uìs o&F|(p#ͺXΚ:OkTRbg>sԙUx /1nOod|Fbcda\?KV\VUUQ>X6l>0\vӿ+fXyczHXͣ)nWd74UUE|'b73"}_")),*J6式 B޳$%jocЋaX O65H $2BJ@z*&(y ٟ^d z`#x{CqUUUcF/k׮Y'kSw eVn~5}s|6^op\np |viֱsKhJŢF,G(g wG  oxCKUʯ{b1A?b_G zJ4lzϦ9Z\!Vʠ($H.:vwbH |!pda[/W񪪾:|ִ2edYpTU}:7"HTK5p/C\4* !{g'92 ^;A>2"F%0{|* i,[Qi`5H_-3" usەc 1'ē YosV@NGum\VUUT݋zeTo?難_lnu'PY}7ʏ?#$<& ] T.! y~8AEM5 rIwoyA[SSKO hoW_4|t.Fd:HR0t/A FH 88 76[g 3; Pi6 x,*)v -mv mQ'r^wp6}%_Xhjuᝇ ΉZxEMLPq@s&ǻjTY1mogǪ$#r,#>R_K3a^N : kcg\!G6 ԀjրHhhp>:f 巳XyLoOGx4tqJ<"~#/U?͌J7c_UrVӇ_=Y9s)&+h8oip 2maIxf?a݄&K>SH?VȏZ.LNe1h?:97ǫ(a#^jb "Zc Ce'7c0=]}˖W;vUz|X{\V|M|bdѱ[Tޕ:K_&lw *Jԇ%6V"vs<ߎ U< Q7Bvy]}f5ִj|jsi-S Jd0;SX3.[ϑ k&) 6z6wT~t|-^U]qv󌺣?Jێ߅ĆBMٍ_~=DQ*VȌUw1Xbd{rQ1-]}i(7uWLV>eeOIiMxwCSRfWgf,˱Ϩl~\$`OÅ'64M1vw> N)O^_?×3I k6y>+ 6Xcیb$ѯc4:?;HPIr.ȝ5_+s/]UExUFAۍ%FFUEuΛO2X??$XnQ5T_xW_sۤØz¨w65s;y>XX2)߶Fz6"3 mDf6V+>&/mlxYU ,##ʜ*<89/HˠMWp)U>I3=ltf61;+; ~〆2 NhTNX*5DN,4$WE)>嶶rMͮ_ז>\c ('W{㋶r*g.qqxb,+hnNbAs! h$N fxсux;ǫȰz,3Mx:i5cwٰiۦ2e/msKq4⫮r \%礨bƿ8+]*nq8<ù3j 瀌\ytϭ1@l$4 O*u; &ek|qdcoZ(ת6S>Ħntβjpl&C4 äV 0 iF9X Ygy!Cyƫ)jw}e=Uwnjˤowޟ6wV<~|׎N,wIuפJo_=$mδMBQ'tHr]$jl|HysfkT[@&j2sZ{ҰHq`Pb`f=o`OΦ82yq}~$X߃UHMa4Vڨ65a߮Xp煪:Lѳv{۽p->?FJ>I$ʁ559]sFڭ5}+mʜ,fvDҴM3ҢMQ Lv)fSݦ6!dBͧQ;\H SL R1(,hfqq@”b)f^s5G"paR"HF"M4Z30e .>`h.pax?ؐ[;DlpOJ-}'$j/mo>#UcF"˰,D̤+MlBzAPKNcYDoo.%cHk"}SgWb.eDiu9 &yeAQ>Ϻe>? ,:q=3V $ܖLI3z"I5զJ7'Q\RjR|ҞV&mJwYZU@liY$&к+Evb:Am^M64o/"Nށ ]sJ I҂8[h,R*C2` jsē갍.m"a ,8pUX~)$Z=M# Ql)l#i;-]-[\5 [(CM=G!k˕s"Lƪfn`n I[t-:[FDX3QpVX(*Wy} ZAۉ:EJ[ie$̏78=ZHb_gJhfu(žTrC7W<Z ])pv Q%63{ qu[*ohUKM❏.ܠ5smqnk)Wڻ#iH:?=e!W^5[/gιN`%FjSBߛԯliÌ/ODh},Zi( |B//#TӮXvm{kOۥ8@yJ"kţj{̟p0 /71`ۣwNn٭fGUUU à^uM-2QݽU=Reг7Yͯ}^?~/y?+ BwNy4L*:?)q0iʤTu9$ :zf$zShꯣ7<%˲Jy9WKu?޼wwӯ}gSK!K/sË^c]n5c-eFd_~+Uy!B* BJ*Φ%Tbtmxh#ք`%csb_G HdmbfC{!\>zW'% r(i =O>9Xmp z)@z;_Ruux˳{{oҢi*׿}z*ruv(wi FDd6S8-'ie0&#HYd3T"Y.%)/GWwYI\1'ϯ UTmDx #_x'!5Sp@wH݁OggS'#xdKi,)+(,436zO-c%7zfOM9ᡈ(şVUUOWn]y ;uR̽j]$qDťZ5z]u{~͓&vD+bmn.!vZ _c%Drh mnnnC> CVz?oP9X<1Oiٷ{;zǾ#Zr\aqX>i")|*B>]㇯UO3XpUɞKX>%d3v*+0yzx{u򣜜G94z!oX (Nrm; I警{^R߿~^ 5ܓʬoYMnqSm: b&öMժR9=ojKSr~M2`lmms-1.1.3/data/samples/beats/jungle01.ogg000066400000000000000000001017541247673406200203050ustar00rootroot00000000000000OggSp.gdovorbisDOggSp.gS-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M>,*>6;6;P͌By3+)@%m#`Oٷ$A?uXUNQSGՕ 29$^B 91(V1m? $=dUJ&2(2IZ!0YTUI[wl"Vb`1 Yj[R(ij";շ\X!aawc -v;l3R&M]o·(Y[lb'&pqIs!} ۛ[XB~BↀXDIvB 1>1 {@hƷ[0 *c@l5U# c"@ĆȡbB a\HU0DdǀAI@11on=}#z1rH*"1mQf0#fwz,~MJ?"/*^7=2`_q򈆺P uM=%c O zΖz^ f-{8*.ŽU;>,ޗX̰x_Rjfn+S, ö V[[ SXbc%&V! b FDTtLXV2ZݦSMSaxܼWkxVֹ`-(?&"0=F#1z>+R+ǵY忰W:/dtU&zygbjc#]̑#jnLc] J'6ZIx>]2C y$Pf !,°v,d Y l ư: QI4tH<AU\H1"8iߏ@R ~7I + J`14iFgﳽW|Dϰq`Sl0Lޞ<c`B~ $͚ͬT1QViٚM6eȳ -/n7<[<_@A-2a 0 U$c b C06P@[&bcX.깫5bO"*.$,ʱ : ܰǍOy\TeDqnNystaO"=y/1B.zbY13zapSvx؈8p`L ,>S.X|)AU2p:,4SDj`H¸AFp$p)J$Jb9+sL5$Z= XŐՃ)UϹL${ Nd,RQY9z, %Q=hց?;M+Z7Xf185|Z /d_wHІ! Q "IDS;"bj B@K(O  HL ;P %H ۲rto=!v,NIY&DhE)D2V=`gy"y׆?v4xf__ Znmw%ۧ.uuPm\4r])rEv iT/W/o JPf" fĪTInlIfB, !n4˒{TBrpk\n.ߝZ HPTU 8Dn>b2b [O &daXaQ**ZcY$ aJsQ4NZq c4Q6yCD ѩ6#jZk&H:ID88&%JbB2Ha"2UV\L I$,tL`!H3,]@ Ð-*kJbkY,jiƊ# ,F# eiO;S k;,I74#r%F=׏%69N̖7jY0pL(q,e*&ٔ)t$85o6 8V ΘG) #d0k=f>\zIk=f>\zIF.2R-v: K vIUU1 bUA"%XKfcRC bg왷(Ƞx7 Fcv H|2a`` H EUe- d9ptP`B,(R@ D>a6vjD6Z:=<3;ZB4A"Fcg}&ڲz=߸vO7*k^Б\LFpjꈂ2`봋]Fa* ŢX@ @P1ᄓDbqL8؃hu 'J&,0Mº XUPebHp ch<.Φ s9z AlP8 'Fex1<^X!M޼)x[;8eJ>j]9̒!z}rۛ{qH#_['/̅.T"eSMO\P 26Rꡃ50q%BHM(Ņ-"61̵pP2BI$؀5RcBb @# 4U" pv[ƊOLL .$18fRIMɪ0a  *}0Wrҳ\**JU,0VEJ!`TX$eebb% d%<'p]):i  :j#3*.3-{q2 )@! Э7d]mt~cRY͍uUUfY^Fof^ˢ 5*M|Q0`i7{0 (( ڣ'*nӲN2"aQjcR Pœ FNXD,!E⃸q(B"g5r?IXH"X~M6fNӥ6pdFl?Y)䮣'p^L8c-|I=P =9>ґTyʵ1~=h 'j4^[PTꨩ(!GTDkT b11 %&+DCBUhJV""($1,CrLhmA><&Ybn^ b(||D:‰vmVX_;E3<{x-voxk9-[?V8IaD)bn<7 @:F soldcUk?/@5i huPi~BfJ &#̀!&/~ibuYIx iNZg4' fY.exH  &R츱 m\[^:4I+D7ʖgjly*cB"ow;|6)$M!3Dh:FbLbobH\G6^ F(d2c" TSeUSe:jiFԂ"IiB|&%_0!LS]!Bvbц=0 N$#܎bɄo&R*#+QG)i +EZ:$~_29! v6;1Z@$({j# P1B8BTXA4D1Ms`BN/v}Im϶^"8&d8J"8]$2"!B%!8 M⨕$bt,lI@t RaQx]'_Vj>!B)%q6kI2,$ @^oY*K%,v)OY*P?ߍ ,,%AOggSp.g,#)@m;g #hș'+xbJcW:L]?̜5Ť Y&T4֮n+Ea\t0_%Kt<:-Ʌm) JԼ9Oz=&)<BMܱl!e2>Yeb4xa'L̃a`a Cbڪio`UDb$؉B" bT%񭝿%E͹؝I?)6")$e[#y#,9H䧽Il%t>9T.qpuQq˗Vrwo qiv ά-R@0Wa8p3P>횤36Ah$MϜO> : 26a,!SUU VjV1Īack  AN&M0v2@T"I`0bm&>`9$ȐpH>ju&~Х);\c?NAJ`+X! 1`ʿkm"72}WI*ӉeFS*Xv3e^'"@sWHJ VTyMjlx"/^ 6YቼGNblL[j/بi5Eִbkg+bcH:$CSɀmc VRRV oUY|<%ԑ(ŕoqIMT~RH&(xWT6kY,EL,E!. /ϭKu7R)xz˶շ \z+Ӄ!{* 6ё TN=<WTN 9JH C;E8AFLBFX ")ND%pp2 Ӫ$f,%q0Qm_^i16M>~1Hb"J`w2VߧYGsVu$cT'|Q(IIs0b.$^z|w @7$3su V>w=]VrLf]=]VU5Q5D)2B%k802UIZcQcƀEZk(đ!h!$\`Q8n0!ADwP YΗޟցgRصD &!nqkc>EYY ir ηh%?~'!y qQ -QbQU|n#My$*"`'FE5OUD t0wQ Lk^Իm *P!J[dr-aJvb1X̦:H(FjgBR9v#;"O)hH.' OY٥<^չ*{ (aJR"Nx;qd0S&RP>Cb2q2Xc9)a!I"!5^D 1I:WF.$]%J$2.$>ȨUUHɼN-dQUYbU1*jEm,jcocZM`f7 qbPv`B DdҼ룫&PN0@ȀAӀ,a#`vdX bHa@1&Q ǀ0-1Ba ʴMWZ52Jj23&R20 +a'?xrE,kMͲG%21BB6}qUG,yO';߱Zu `1öd[N U6i؉a DA(>(5EYD D(l8>?([ݦd$+|PG Jc׹AY<aXNDNXQu+vZZbM1-pN+V%[ #.1 C2 X5xs0@ MH vH8 1J@), NlˀQjBҲB9DL)`Yood"(4H꼬g>Xf:s97F?0oٰpy8 7\yv L6]`?^l4)'V]-Dn: T\Z,逐gvEH ЮT `k (6 :H`9ʱ$ʧLhm'"1̐Hu48˒5dId &6]16# u<=Ŷ2…'&W` e+eL8 P+pX#Kɒ+g^'aimCN(7Xf5&j ƌU8bo5  ՉUbP0Rl` x9Sd*F \:xC2aY8H%n2G&_C:;8AI(BAfNvWMzL]AcoR5{ӹߴDe,(r2I}: [ > y^'ͷah>&hRW'ͷah>6lRm(#̨aTeHJE&FaHDeEjQLG'+L`x$H@P@* "x$ `!Ic'#%O/anr,}3 { "V 8]o;B@Џ[lva)e漎 Z.@4$V'ͷKJ4߆/iuoP+˲u0DLU%BZĪ16tфE8>> QL:BrR!\I`'XL9ԦƍzҁZ8Nߜ{AH -KX7 UBjîuG33[W蘫m?oU"dBdʔ0`L Xc0 u*ǛV#&e`Ύ}/ .@힨*5*N&%47W~ -L&MxM %4F R $NF b4 'OtBH+G]ћ 2Q%x5w^F}~'d4QQ-, \z Xl-vvP *\WV$H:z8)T9&<X!zhX!:zuqsvXUfD$I;;{Z; #Ċ a#X+ FD H $ 8X~EMOA1C2`*g0j%b!rLD;xܜP ڲ Jb c XmeEYD&CB"E L;bт-%6ͳ,R--rGM@0V)rx6E&Up 뉶00L:m9Y,d8aFMLqa0 bF'PX 6QUF(ddK`ާ͙nUF]q)ze-/dL0 ,) XUv,W, a9>&&ݓ`aq33eb4#LS ¾Θ2ִl#5,x4j[r d>dk0hdQ41= {6GFxNp)p FeQ11Q4L+a|YVq ņPcQ2 Tb̌ě@ a\ dzSW% [0,`d-ey897S/wN]H>o[nA|7p~roY 102OggSp.gٿ?**+;;;:?;:@>^M7SZD2?R%I씎C"϶\uq]!qK + GˉV-:(0 b#(L/HDl!ɀ[ј0aܮ~W#.85/ FaĊAg(>6V&&0F\7@"9 "$^'-Oq< T'-Oqq3F6b'V  E cD ¸D҆qHփP-$1x!dpL @ kc섍1`S<~NNG FDLM ~žICH NV@P xURW0])l ^'~ R'~ "gv:,ab4*&PL|4.cbb@1 $Ht"JHA`i%FQQdt !QN 8O?PxQaNU^{_oQV[5Fvɞv|l9]tIYvI/ ֦פ<.(Ku_·}$h pV'٠GDNZ7łڛBVDEbD1LLDDX#tQ1  rpT|4IѠEEfb Ѭ Hdr$@F \z 6ad+H?er)3FFN;̮gCs َR[/3ita G/UDW8]}ya@H)'Fkf8 V1Pz 7d/j0ZE1rޟYITz Dž P( e a{GoJTJoj;/sh]*PPA\-TkH_cZ]JDyzUr [렦d``0 8`Jڼ%3IJvH$Ř/&sR#ȥ|kU@7GCY,%9d M̳ {߼Nhn;JFtXkA_ )יNt𙺗?EH(ZLOLOkC5{ikڙ!JHH1bG'HMH&Р爲d h$pH-څ9fH]c&>@VZQUs;0a25*`56j+vv6+bi5D+Ȳ(sYoה>žjÞ0:Q:io؍ y8D8jk&Qalb?4,F?UV˽u?1daWƠG[`o?Y ? X@\7L~*/hij%| zb BD҉w7B2$$HDf>> 7/4@YbY. w!a$8D2G"8)ne-^íE~ `@g;1YTU Pd&"^lUllM*QC0;,9' CR̗@wxY;)!М^z*9 c%p vo ͩbJڒ@x5>M^E6 ^c-2Q)I=\I1(ݺFM𳬫hvR_SĈ>g4ei5xͤ#?9ً އ> A&yIֆN !3666VڣjicPİÄ0: S#cL` 15Vܙλ)¼8):#$$@" =uY'lso?&yC1u)k˪NDvd:E[QbٹMѶ i]1'5]1'uN0NaobXE+D!Ub1Fd N@V{&.sCf,1*Iu/q C"K i1qT_9'WZk]Y KbK-,X< ;!qN_J.rxR^^̑ \pTxVbn6;#EwG*+da1 C54J jUXu aĊ F bx$eIJDX(ymTp|=ENểqTCr&kfUe\C_SVݘ8Dg̼rt$ӣ:d}wzB7I  >{ u٠xQw C0TU%Vbo;İEVB⢁8ሂHhD $KXCd=Et`q6*Gc!o;",mP%cYt*xm+gCp!bߎhS\-owޞ%HX圬L#bf.z>,آ+?n ִ=ާ#(džd*TjEQ*GuNa QUUDED0kZm-b(Nl| R cR ,!ݟ"o&&h"Ƣ*Z!|r^»!+?Z{B9y^?̰W6;!,]6\'7 Bʋmpj:gfs"Y߿pX\1zc@X(J@A+"" DH(dB׾ٍCV/ c DU44R4(\Q.ax<PLZoFrhkLѧ**8)NOWûʹ)2\/ۥk&3  r!6l#2^iDej4x _Y~B"(;am8CUUbZTVSi#&RPL$D!0ąƐ16ldtmhg`ߚymho,~2F!®&e#Tط[9yHA `1_#|k>rmBu9sX, .|~3Z%KY݌(8zVT]/h_~)2c mKiSh C⪪j'!&KDAa\|/,rT CPRI& U8FGĵZ7W-.l0) !,2)ч]ml$H"D\!YQ설B]{9X$?;yuNCL豯UЛSFq{Y6*@N ^-I$P^}e`djJ&v:bva:a0TJ b٘B"Q'6X 9  &5'qpt"5I!; +$(RyYivdI)3!N8hlV'1$$&ェ#N@@ +,8;8=;> 8i<|IF4˞ 03 C*b DPr„N!JI'$SrL@":*-&F&&dVIEV Fw__1Đ D=@R0D[D}홹lX*YdLM4W\P` 3Je8[68Kul+y;"mfa\NQGPYO6$u=3!˅У1aZ:ar.K]VRV>8ćvDI#j KzGo/`U:o2i$R$RIH\\\D`)\1!El$Qhln4` Sl d2  pj" 3mkqqGNU"1EvܑpHʬUg tI' gpPUOZQc-(j!6V5ְU[SEł"aNQlB1(s*ΟiFF|yU=vI(,ȊC"0F-l+Ɔ$1 !QlS6BX!iͶj}&yVD2p;MU/\WmMo:G-\='?$nq3\ě/JI@B!T]f D=U.'8N;8iq|)FUq ji+j9' &6L 0FBH9ܯo*fɵ_R*qabq0 \/b"e,"@ܞY 'z ymIQ1D!:! `$p"B3\搀8q5MBȑE3dL[=:̜~*\ c8{`f0>3 QJf{ҙϋpŨyQ%32,.VXlP [[@q@4AGD"A C%S jYw9 M`)1B1 e0K2A x3DS¾N?}F$(8x<;dRSxw1{mCN/OwnA6&^W?HǰruxvYDT3=.H[X@4- (a"N !A:$J)ӹBj"U2QN$ȶO+Um ` w{$8)Y( $bi821!a.Lysš¹@lJ4\28R.a`3$<2`^'M׺dzn,`a%U-p(Yv޴ 㩌8:=v2ر|=DSʰgf>NĘ"eVf?+b|/DD‰>,Nn u !l! ðeFUU 0jb+"qDB968L00&T VTRuuﭛW]؈1aP Eoa醵k+z[KC00[rU^\&c0n;V727w0Pbی۬Lϥۮۚ?\lZ==T.{q>,ާ>@Aa>D ?$XiaU*jgcookb![,`gg`(&Q8 B!D٫L1@vvMS蚈ܞQǾLbFT-fmq:g~x)ĹF$r- Y rZ]&WMb{{)ь Eޛx!> (MR'1àa' TUIU*vXP bq #B!褒N BP0 lῙ|,jl4>{`oIF0HW]NDvOv;WN5q˻([3$n*)fM9_܈ Y%@+ly!nߔ ^H.7ByޕG\Zv;GC<>-p.x|["5FݛB:,aPUUD"V" 1%!  @DBd I#BTp!wGEW쫳xZrR߾/΅u4x2HQ*@S}t_<({.dO䏉U]J¦Ēۦ:byٳc:pBjm-(q=-G4FQӀu7Q cPUU@,b؈Ph0q!ADى(EB YQ,b K-6U xpd6-( TE OggSTp.g~W+8=>>.-;AC0/<٦)RE22E b1B{"A<QJ4WU.*fݰ#jeX.2/ D*˩#%Ptt2`1&C)Q2&dCsFL +XVlK! ;la2#1A&iA߅u*}τ[nLH.qUL`.Et.ȅ9ƸCmvQP@P=Ò4Q nNdX1lD(H Qم%D'&*F`V7Nվ-˖/g׈Uks/sn oLU9  D+YV]N;!;.m#|4@{.8LL,J`)=!A% 6!MYTD6 *!j+KC<А >DaTvS$Q1ҊHHh9&XAXFXRl 1;c" A(O1XC0%E¬1X]S{@`= 2nlE b" T^!NH`Ma^ (4gCP^(_C<;6tB Ñ8LLe$ Vb8X'[mXqA p ZI UH`O1 sEGr[Na6W! !,'Fh`$ )Vf c[d E-XT.3Mۯ! {䗞6Br:L.h6ʘKn e".)Om'MSxX0b'M%%AD-N.KKeTeEc9F"Q` + <`%SO!!DT"Ed 'NqKB 2F )r"K0XLJAXWW( vJ(h%Lvh/EuB!nV:Wu`/3r (/k2 ٹ؀X0G z#o$d @@@CPEB50M\;{0RjqZ)jXIdB,?x6H"'wڶbNQȞNQȞH %@,AB [1$?"q BT<Я'~cH97ꐨHLX1D"ܞ@!$D$ q-#'pd2@JDLx8SfDc)5MRLF'0GIȁFB &@,"ia<":y-@9E,Kd`0 mUUe-eMT;;CLC6G0 E"lD-9?bi;dԼW^LٕHD, c2(_<#%0 )`.,Y}럺2"*mmRr,kM.܀rMr+c3z|ķVKx*L&SY|>G K S9-F2MCI^i1i=J`lmsv08XMSVbccP&6.ea *6NA!$B VIbR$L]V_1F !@HR$D9I- #`a$8@!"X*aD"Jq:hpVR IBVy>K/{߆fG#kUti X<)*MZ;5ʅKE^@?` Դ[Mjajتa(JSɄ B2JQ}t\#-$d#})aټ&M߄= nh$ aGDŽE$+7}fK5qyloL6|u%,reX J-B(ܩv F#>86BN=ɫv!O}Ȍ2Ya؆0TebEjĢbbCLNLM1(J:&1L Ebk0oZF/˱vv6Ҹ,0e,PRl~/9`YJL,oȀ1vD*bѨ/JL[=we[H7Ҡd5tv4O.2{VQҀw1 B|v͉昂! &6#Cjo1EA|l-b #ĄR!It' 1( LvP@2*ܕQS[Ql\:y9y}{F, 8)2YݷkQV1-p+cD҄(s-lg"j.Sl|hmjuY7 btnz#t6)R)3{so1ɟ?&-HaB^ 111qXAM4GEh $ . ZDOTSSX j'B1#}z0%"fΪ7iԺ(J_L?ND6DR@p !as[ii(>לH)%RhN~)4sx'kfB`S &BD d+*h IR_$0$@"HDOggSp.g=?8B??*/1;;;9,Qpe% 47DDPjF FN'/lmLinG' #!8LU`*f0 FQAсT篴NQ V\]_]o k@ RR/=}9LPR˒~:>:=8|#lzE!$Yf66jl?U"{Td-X$Ź>ׅRr _52Y?KՎr0`,' JND,^fD,> AacEը*`7m h4cbƄ&Ƅ|Gj_>԰4^?j%0Ko[2nxφk9FߊplˉvLq3:_clO2+W?62 Zn,3^mP̈́=̨tv6΍ B4 ~eB}X5 ^˜?Ѓ<\ZDAQ+l1ʔ$5bE*&D11ahڒ(X!B)bd"$C- 'DUFN[q7sL|eaz0}8;k\m&lTshhx[Qf\q?~H\4O r(?&z$b(CQzۢ2aσmØ0?Y~0&tV3MG`1c*ưT [QAlƂ)vAN&ITb؎"c@y֍W_xO\8Z9asu:g2H;1mXwv ":i BBgESpg?w9}9hdc; sgdCGpYJRL ^+N}KP_U" 10YF(Zk-X5HDc*! c"  bvp  ^G%2s <:R!줍DdV-~l?]:sm' 0#WUy1Z2˅W ByˆyZo þeK2>젅{W HPQ΅!f K:Z} 3íg"'~ >:h+p >:h+pӏ YvBUUYHVP{L cJ # 05 ;[x|&.bH NHwUC~0!ՒQo mHy\ aS` jVgE*:"Z&B\8k6=C]䶷tSOQ g6nN~ fp'ΨTGQ$#Fna LFLiUXlJalk#4ԧfbiLL  |ʎ i d""edžg":kÏzފM{jg{1Lս>*"gF0~5{)Zmt:g㝠#S\lZ<]Rg& *Xw~La"dE@VGAs9IAD"D!H?#D"E"H$p$Y)d2!M}BR 4C4sY_S$<,`HRR0pqWV>-c: W-waSeoڬ+8Ik"[.%$ -X{²XFF19ZZ]Vdz-(e%,$Vn` .K [j'Qj8 Ŵô`QT 36&>.Zqa4. :0&J(bpGZ13 qw4* T$X-e'7jB(&,#,>jvo3DxZ=%mżgZzJ2:Df/v}``Ŋ(D )abl )cph@X@T &c0 R8D e6t1qI:CQ;z )u^`DoLv9^XP΃7&}; dp,к@\ z:˳G"b22.|PȫR' =- vbVAPC,  0cLh,AL!ci!,l1eIlXF*)l + a8@JZ1h;r+a؀!D@>94eD)}shQɔ9N>fp+ 4FfJ""QW{ik5TLPE@QSa0Q#oV}/K*,2QG@ԫ5~m"q]-.ߟq;4]](#PfFe D&c4t%&tP} oy!e#(k! >)2ecڤt˔ "(xL*#BEӢVSlZ`NHl e8DcD*JQph Y,EEC"cdJ $J؊,y2C!l[@"mƠ^ ]X_ZdR!c7m"ƅ~GyƐ x_6y:#_ܐ'uA@Eb>>HȨJ,[ c s2U!ňA#qA$ b alTE0PĎL8N K"=Fvz^Gi,9x! *oq,c$`i$dm.v *1ӌvXY 6\8gũ{J]33_`!z"7DC@@rc[h1̛@R@˝X;oWrb!^$!P^.%vl럱z)!;G7eu砭82ٴf4@@ ";4v]/v|Җ՞gkm'QmΧ2!cp255c2^g^VBBB/! j%U02YV $N cdQUoYF""a+"aoU6jb/iXD⬀  Qa`YQQQүQD_N*-?Zӝ诎aV":a2`%%`k|qu.Fgt9[ueVH-?[Vokp&ر`g5dDxi5!&a>,>FDՇ#?m6[8;aFYǨ2UUΪvbU+ #a0. 0"nhS4I A,%lB `tbN-퀢D< J}r0\Pܨ^eYo9S0>a lvPK3'j1o_ Sn^3L2ފ3/*LnKOggSp.ghϼ>7??3,,9B̶> ާO?@DCX)Iu0& # FeT PTC-X  > lbcmECG l;@Nbz܈Kfou_oҷ)ױw\pfB,D`-|\/#br+Kя, hd(bɬ2Ľ‚,9޽l>ms9yC Zq^ݗ)n@BAw_h 0`NjkUQְUAHbB'#rV Kx9.ǢNㄔD`,2݇͡?tD 8U#pEY+Giau;{5HNQ9F"(,(v_flZ޸qy 1A M><>{*/ݨ d::,;F$`bQEjk1,D1Q1&$F"Q;p Et'B"$-B^^[i`\n !X,# 0Qv*I_vaa!lq9ю6c7"9lI&XWDWTʢ+*e@#1jbXa >)ܺ$Iq 0,#cdRG8(D[.4rtGy\PR8`D'@8,;#qJ* 1YlbCd0[؆aD*8%@Va={1bŰbAQ6n2M" BcA7:~e/2!'MN>Y^G!C! du7Xw\^IyyO E047DҜM,nsH&ͫ270:Q.a)( 7A9lS 9-`vぇD 9-`vぇD @$Na0؉r jڈ!jl1ӰboLCCEDb&+ @ mr ̙Zq"!:!#M/, J(ñ5%qDB! o9dDݻoD,iÉ]ˑaga運b%3~WIo 7Ͽe0x_-9 KJS0*.|ؽtr{ƭ1~i,: i-,:K\H$B ðv0Ter dSuR5̦B8Tp !H#Vct~q<kĆpm ;&zn<2;K@ -~AHb݆LZAͳ&UUIeiP1|6ò[1t>%B g,#Nh 9-"#Oy3TdI#{"M`NN8Cr ڙZL{S0&a$@!$*%(ǘ!$Pt a,{Tΰp͜y}٦#w Z%p67}JWኯ6H"âC l$ַE.jg(ҢtM|]X)s&d&M~`5!Pklix>-225y"#SSp:#vH" , $;)e1cdcH1 !]U/8ͱn²elh.7K"bGNZp2 b,_"#RC >F`0.{Y[kRF<ٌ \1Z.Ul3/OeVxI{p2-驋3RmbW y=iggTc;^$M1d8[Pl#˕!\f i9٣{KI?hH˱O%*Ue!̔"U 01,2@ZT֨Z1jQb$&B@B&J[+;U8(:E'Q(^8s0Z_e49\NYe>'GtMs`au4eWywdjқKN | %hahnND珝Ш?TD"- 5/¼^-$jB,T$L%7SI%r+u"VT2袷?}q ٩cD >;!v)2@-&XTDMXV1A8Q0.(Dcbbѩ*߬F+mJU=H "dtN.8˲XITDQ`,I|Nia-#8r`Ua|u9 8f3=~'ݓ!c9EpZ]': tcP}ZwI hB~ R ?<:M 0KKp*ŪLbH|L$L0q6v"R-1a,,%e9q d,d`aE7-M,a" |0x*;9/K V Le9]`A!2{g{ VriwiU3G^mĴ/?{ֳb*/?5{<[sr}CdW0Fi5LU@Q14A0A (ajq66T]T7a@%)9` 2FII# o(gIDBRZoqBY0'؜Ǥlx lmms-1.1.3/data/samples/beats/rave_hihat01.ogg000066400000000000000000000555551247673406200211420ustar00rootroot00000000000000OggSq\V.vorbis"V7OggSq\ɖ-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳έOjo*qYl6Su[Vdv:l4ZFuKAӓ6y3yEA<)uHٹ:ٛ]! = t\~],{MFn-[5b ~~Z/ܰ.K!b >{2NH4Y]K/tj#SSS<gξ^ |>I5֭(H]yIbΆh7)|qs4 | $$_j#H+OrAt2-T.xh!dKZ7ktiz$ ٶ T!̸?})>iUS|hCHjY}=9^Lo05>6A/<_W7S$}Jf @]*s xLn(] BZRurƁ;t`?[ a$U\UK(u>yM+QM-F/hҫ%nr;??^R- s<Kf{=,>O"Mg9j*fgpch0xlN|4qem\Tv}y{dJi)A˩ >ih VY 6~o&][ȑG2J7\\:ԥ*MU b؉RΪ$[\\-v^^'nBAB#! .]3֕rVVI<JVKm5ǫp\MRW_R#'ΡWߓe1ܾ~ύiC%aHn"l*H (1 ,E$2f$`"I q?Sdd@հ(rljW^hLż.mu.ξ<2~ڽO(G[?ۙ |5xT{i4ztr WvB`%`䫗Yse&q[F z~v&*ye[uж~Zy{ ֚M"O|<}^䧽ſnLjP%`d=hݞ~qH[L:h1#ti*5EAk*{!p~レPԻoJ&GPUiZeIX( ZI)PrQ(J1jv`݃;#`@hl0_#_N6fƿxٳǝ^\mwbFqttJWzIER6O@6so䛍vUg3XciTR[]Mn?OtlyqQ? .{(\:[UlM^d1W0Fe1LOO(,I+ 5{Mә&;FF֮=oM^}ϛy8Z} ͽbkch[~;&εFh=<C=$A#&db9Yu)@,R_I|2L6~D%qda[hQ4e;P"R:|0i&WS#gU+֕u"pm5^yM!G*pPYf$Ǜ`ͩvۍF4[qyWm6ek8b,1Lan׬򙞟 [;,8aWva KqUFݎihz*vh淪}_z_̈́ɫ+Z' 1}_{nO]?rg!aoFlXanP:(F-[cބe΍M.zC{KzkXfp9m=~M(8Ӂh^>wr2 1XnZj 紖]?C4 mA|.'I[c#:e~IbSRyv@Лۑs—hp:.ݤct2~?7 =m+ ' [f\CnīR&PP!Oӟ/knIԡ sNIVi }TEO=>mn:cn.:^|oj}1OʯKKESwY Ljvk}- /BEP䳜`Ɂڄ!{ ss`HyB  '~.>UGpr[ Zֺ ;'^ߙЪXf-Cb(ޱ //ͼmKz6UN-X655BYJOJaQݗ a94v?OE-E#_*.Ը}/=86qW!|_;ql@xYz+)b}XX/~! c2cJ1fJ0 Ae~>)eT>b.ZZKRK>&vWs')3.H6e D P=n:-Cdg]]{gCd<\z j>8gb59C,G9تu69<Ҕ6&jd.b6t+r"w_ezK1Mр&ޏWDiLm,dAͯe L!.ZP]}3XT.HAQyHNg95 JW`5W\Bp@Xx ~ :ل U۶lƖͺյ@~`'Uj{|9.F*B z#(I>ͦ!Qx)Jۜ *ϵm2-Vծp\E;aJ]NuҹDBF%l' hkY|Q1РI%$yi?paq[:Ⱎ%b _[*?Oq@DbǦfa}aOP OggSaq\%@#uusqHlqtunpoponMprKjgj?fŗ[sޖu.X; B,ZIX~>ńſ/ő -)tZ]g?eRsl/F|8b466WIyY?s0q.^8i?$ʔPv|y{#Ry[tSx>mֽ>~LO뽰qU|cdN UJ,`^zxJ_+v?L|H栽K a\!5,TûضFQrr Wx`- ɞ-kU+OyBhI*q] sٕ$xx{D6yNӜ7f`愉UQ$=mmY. ky}09N-Zo(jqJC >gD RyҌ@IrA<+Ev,Km O%z Z:98 %S9A6MWvٛSa1[&Q#khQyaQg|v}. ]f? FjVhAMǧ^{#~'$==&fX}D$ ߕ /y[EZIn~ 0Woxa˟HkV7[S4%YGe b֒p܃H/7>zg_ }*c!;bmgmF:793znO޹˜2)3V`; c3hQŠhz >nwzLSƺK JYH߾Zӕu'nk+ڼ/.!`wK|kdߌ7:L'h|gVK0zLЇNޅ?AUna'W0WYiH b51+H(ڏwھ-jOSuIu[>BNl|@}X[JL:5cRO~BwCCx=hB)a3gɃjCjQݸ8d<g^UVBth|:@E;pdrR+q RmA#8_Ay˚ZUA2٦h0#ԽsHq35FzehhD5HV] u N;mVؾU'XFm>l8wjٳx49phέh'_N a8c˦<TY |czz W|[V^ ,;\@Ը'pm)DՐO;o. .ith6i\J2vVR[mo_'Ȑ@ė<5ӟ-O<^7.UϻtCo`9b=B|tW9 }%gQ'_qҎ;5ĒfcӃ%ܫp_᜔P:V//jqȥK@! Pq>lhQNG`Q\n~=8'V4n2aڰDcs\/qmZW-~5M1F-9}ZUsdM@~ R}Rq5rk+wŬ;~҅x)YF~SgOQloùb-B'dB_OJ Sk]4kyM#kzx>eѽ\aEOB/N'Jk]_Jy;Q>f'Liy:zy ø:%`L8XUskxdK^nۡGSU5w~z𢥃Y{rS_~Mt|bNM* HY/:;,?Z: XX):;,59,=0IÜzn,Ҵ*>d^:iQjB kPJJղqQvM Wƻ~7֓k i&t.AE6)U =5EQK Hr"㵵 $ /hԄFԐ0WhngUn%4#깳x'ܗh1YPŪRs/\0YhR>=ju< l5j:_ 3e+X ݘ:bU4F x[fUߖ֒'Kͧm?{ғ.^IԌh{  rz_ǧx_Џ w*J O3ybI:i~²v*EJ{5иxZo;cp|J_ߐ2qhhrvfA[ Ңk!HKߥ/jvJƸbm\WU[F+h\2>CYV9<4"7=@ۢmEf\ۺ^=n/ھחe8?pl`_ynJxݵ%gmҕ]"07 R,H' & wN䢑ʏ2keqZ MI-c3>?ɲlA28.eɎUٲw~%bnZmؙæ|LycGzP:SRyN,~V_$ngs{`#[j9noULܘ;wOn_l_|N3Y?N(yy}'lË{ǴMɫ'BJ,s L+J,q7iQ {]\[ndƙ EW)4ej.1*:;`xfAU4FiU ]V`te_lu}xb4Hwe dɝZ+hͩ7sݒYCigYnT">H|rNUbv'u4wUw+ﰳ}^\I-9>%$,EޞKI{t wulYҭ{WI;ˣ5a\±֥b3y}߿lh폼%eytB;z[bxn/$c 1-ָtu |%dE@R>L>N`{0>Yɻ_[<޽Pe*%59ꝶwmP%+BR~|OBQ G}/{e G& hl]/,-r}ctx'xQ5Cs" RZ5ZKO8= ,ߴ;'.c{x0v]ΖXo=u^$Aq=O[&qY}QI}x+&f<| m7Y>YܰgلScҧ\yOggSq\hy#HkzsmsqnstIwlGnpweJlpsgpj oMfՄv\n+)uա$o Ao:+J߸IJ 8)jO@ay>qjp!6dFtrj] ]0G>TCcY[C}YuE^6qxM|"i W(}jVk&q 4W>tV΅6_ZC ,mUJB|^ {-ᣚmGo(}7$|C^/_l/PxV[c^yS}>`=IGUu @a ,"Ls[ӄr?M僳40C9EbVh,sژ./(?Jϟ.@ ж?mN(/Of:bu(˅DmGE7;fͽ [Bgl1HFn܏*6O#@vRiVYg*K=QקUFB3fb6ݓ s0WN@Q5?ZʦVمN.S/tC{ h 2~^vqk-KqZfpi5-}e}KJb)[Q":rN ңuཔQOJO&2 &r(m:Y={]/d ݙn-\ݝc'wfs8i>Z+x:4Xt>F>`$1懧Wdd8ͻ 1>ADufO`fi 7?ٸ&1o4.||Ŝ߳ưw*dՓ^بf]%y}Y ]B-4X苉+VZH (qz\:\dY F}ڷLLAVL8Z9T]c.Qm)yIrVCh09nK~~~S};v!1^UW S$]{LB(Ty{ᄅM.Zf):wC'º^|Ӣ +>p,69 "{SRd;V~ֶ[گNFNZ;KæOd6XgZe&Q|]X8MPWEfZs@Urol]c 39jPfq;$O}q X04Ŗ/36EfIKa\ r: (!X2֩KoefUል2nS9yE YzϨ]x 1Ox2Ϗ JyH4jC(73> |ig˂B6=*0r$-]{3Jo 6"դOg3 ϭtNzBsA6YA<]G# N:ޞhtwrg)aNIhIuZ]IʪKaS,fSk\= ZxGxH2%@TD]_XԀ@r%aGۏchֱ*(?Vk]&x~߄v]n"r2GӑjCi=n 誣t4b9/[QdK<ӎ5-a^]fհȒs8Um獧@L;oo%n*Zhk]4$|k@4;V u<63҇gjt>sZqsy<[9P`xvq{Mߡ$?i΢vZ#{[ecomgkב.ޗsO#Rthu^#^U !CJ~et ղ5?K'iOv$Ip gKĉ_Jl_ӵtlEtzh^:]Yʋ*> Omwªϖ^;] Wiy.J?{]vI nm~͡y ƬmC\WuO'4$Ĵ֙qÿp$:j[] H6-&x zig!=|}hjMhzzd_^F(A񣠃Q.{goC_S˾MHj-uLž9AVK?",2p(Y*z^ԑQ,ivS1Zgi$-դ~i\^^ǐ$S@iG=b!Hd'.7y<ޖ4Bn* GgOggSq\'"sktpiIs{rjFmvhrrgqQ\lBmy'gckϣyHl>=~cB|5mVDʷ9Nۈin6O-4;y La;;6]Mt˫ZYm tC~P.ZPPKڞz"^u۞&M,`dg8{ <}DPƚJ qwJl>3d/kojdZW[ 7 |xb'c />fYŴ6 >S> ڣM ogyRմ l~G SCꭶfQt T볝}Y:\U|6kuE8 ybB(eB%QAf./eV|z1Ur;5iBIEY]oJ6r&v/^4p Jy.:8tH낚67;ƹͳV\rפI/_vWOG!?s|Ȥù0X섂^9wSڮXq߶:N5VNU0?qOA]pX'UD꼐B84> >O~h󬀗<,@^׮o3ƙ|M>IQ( qy ժV[sʧ6ny?[7G-VOWfx2g~x*ȘͲYIW,@`lWRw/Rb,O';֭݃嫻1΄'6ӞQ>;ssiDz[m^ S^-k62鷌hp..ղ,Z!wfO Ѣ匱dkQ;3V“<MnvwGM/mo @=ܚ ww.lpZ~zY|;E,r, K %, *{ PV#OuF1y𹘌VO[&ƛG2BƟ`>tYcD%tqԊ(~Y[j7=[)y JQR9\˲$yX)&DM4\m򺇧[63Ü ~oIi|--? ΁Nng%iL1\IK 2bP.eZ2@#%Pl G >"M#hZ{Z oMc1q`c %\i4~1;y*v|PbWYpdc\h?07M, qZ^,`]ٿ/wY ~8p;+h.4 k[A 4't /*Fr1-iap>vcWG ύnYRa7;; vlï<>Xly^6cCCLųH =lgo]c?{#2fi͆Kmfq%##ƻ|_Sk pyI~ aL̃/Z9X$uwԉiZH[cs~iO26yڏ֖)>QiCӗN_\3,ck,zt.0flTZi,|5IaIh}u+э*FrKgTg\5zO-6C3ol" :r -l!g>O R9<\ j'Xѥg]i׽-۹| *¼BW|XۆMDQCPy'fDC'Nt.]ags{5 ?ѣT{Z/LTG+Z $:v6 LHғg_nr&G"VkGieQTY2w}abjpmiBf-К[hجƔT`kExk%X^O'lzɇt3oGڬy/Z,^OE^ҹ}`},Ξ MQRq 1I'Ul? ~l4iw$D8Yf(L\|EGWF6s5'g_~">z {ptX*OקMΡ zimӅBc^®vm*v1qW[=f٧E{~c?Oy NP!7Pĥi_sY1S;M!w2a*E\ݑ ^ n |HV[0^i~I55wVzCbv7k-ցgf@sŮD5>+/~"z2@_`vX{v#gZHx4bI]/KŖN[˃&pVa9fgEŌ!.eQ> ҍtъi?4simHp瑋_>NM't6-Z>́BLaE}*>FZd Z9ix@߹9KwmbFhkF&pǘh3򒈷 H+[æ/ŰP> ֣D5$ǶEMpמ˯oOY 穦yI̬F_e^neslZbdܣu>B(6ufCO OVʽh4&lh*)ZYK^)\K?U4#|l{=xlZ%7`8t@=U1)EM\gڔX\{Xs`se`;iE"0$Hp0=j@-Tc.M|bPhU6 <*F8mάhO.p.ܲ՚6I_dH8Ңg;a=?882D2 B]ϜXoo?y9I)o.a,d{6P֮ZXA}& &d֧a_bwc64ݿ[)<-xnUGf.;GdMჅ1fI]'o枢ڇhB41U^l}j=r^/ NSy|N[G`P9ll&5`De_KoSY4͂)K5+NrүO kGc;&[7΅5G{bO/[+KQu]~bO\[[%"_@%AsW3ENri1NT:iWޞkӖݚ6yڅV+ֶ=E6n\/ >^3ڋe (~|H.?N k5okwruw9*AG3(i/J&T9p(l|7eDᘕSέcvzC|+m,xvdnYǍ:~)!ty zW ۗe}U0yrӒOmrSx 3{p9>c_Ung4Yr ,oi"cgIv8&"|.[AisV5#Q,Aϟ/Uxt:31}9?C4R#Xcg2yfOggS4q\]gpsylKlnFmzrlqqlej)Y}l X勂$2Ap.?[l'Ezf,I4m_Cy{]43wp|yӶpqa 'qۧ; <dx>z?r+}#'ܟA0i:$zlkRua>xOh_xh \l,Q-ȡs2%U!T?\h 5t7X,>z|դ`!s&xм^PRƭ;=niC{JgK~_rs /4m Bf ~gd'{enƄj~fqjϿr4(^M4q Ѭauj@||3㫣cpb~Q3#$SǕ,@Ӿw&$46y!u>&8AȒ8RlҶZ6Ke9K;(y^L*õ[J#9 6MG+%Î| +Ʉ6._wYc?O-?/x`] /I,SB̷WLRS7--+HR΄n<}&{Ġm/h7h2MqXQiQ:D^iD%'3y mJ,n=\}N'[ucsɱjyq;=_Y_Oek%JW+/rs4",}P^X3^dXWv{}SA;F&jtV9Ms$5rrbvXzrM_|ߜ%'u[<[^c贵ݛ+˗Ol}eY;Nh2O#IkN_1{[stR$l4U T  _]4FZ_{][#zYتMcn5Ag94;hO]}9m͒gA§YCI<^l>P^$$K0O$ڼ7KCs`QKܚXr{!h\U᧬\~:OM~i\:Gf],&>˯qE'}nC|+mb@jʯ%9^C~Oj9L9x|?KjeZ[tvr~kUAbn+3s;_Tfbn$8KcF#2y<@E.WRtv5s:yz~\/CY) V~$demLXS.a}F_٭U`}Q  X=R+wD}S䇾q͕z_BھD7j6Q#D_ ̭#NZdud/ٓ}%B E,6o=*dZĊ}js4M==|z,vM&:MwXhYlŹ7珟dp,XFKQ tײ o! \FdCC4i ކWuqi@6%0 ꄵy{4ϛѤ˳ٞ6Z{'Ӓ7A5bIӮ#>y%9!&]z81?=^!M ,@`P3>Imׄ4t>zi,ϱ!i5,ߞH啗ۍ9&IB q46k-~Y32&VK.n뱬z/} ZP *pƣMߩc 2&y Eo!(LHde]B&.]OkЂFHnE7ܵ.Ҕ6w痩OZԿ1mp%`.SʥÄQI6iRPBBѶ.ǕW9O顴^)3z73x-btUx O73vDAUcJV6@9}l`PZfP %pKd!\ =|qlj;]^\BWՌ|{BXx s*zk牒V?tQx,&Twk~%!6I>[< s~:>blkjN P)_x:¹ډkY rtZsµ\?y8YY4Slw!3vu9*14/i;l?Di;@-Ws}+O~~w cVO޾Ռ@t\83ϣۙ]\~ X5m'oN- xnMr~_n&-awe7cѣHs1qN=X A !w0VtUލ_Ę0vv!YQ&r `,`ΥtKV+Ӄ#_&{x4V:i[ӏrqu)Z>.Wl OiПhZ, rEm˞<>J_c*떂hn|/2Qj]8//(w)(>7t"y|,Um:.zjEDOkqٔBjĥ9{^f 83J ^ipii$@b.Zof:{t.vX98c-AA c$Ҩ"f977A삘a7 ĥK\*hLie\PD٩^4%m移/q6eF۱x9#&GV ^q. lġ)˲b ^+i_}5o:OV"tO5@Nx+n:#ȣ)^Yy\Tvhe69zKV>1sqǞc,V\4T3wj!ºxX|Fs5? yi=y W!%.e:8:KKp**6y:BqsT|kgm ?v7'nُca,ZI"1-ҹ)rw%8L-n~+v X"izrw{bI sR'_+Rkgmky}f4򄳾F?Χ'[UK[1o֟u-EZ%|'(ž}[b'*Wg5G Au *]Iˇ}TX֌x35ۗӪtb .7;,Oa:a y'XʰkCON\qds͐Pk ,SXp 441_n" g1i[ͧ М\l._hk%; oqOkywHhGvG?%T 71cUP@m ż93e.>$qW׬P})e9KΚ egO<=f?k$J%Z](cy[Of[EVS}1y-w ,.*BBնzlyh|?wi qE΁W?ʟu֑l/I>䣵m ;daCƳ?؛wOf1~6w5Og@OrO!X05ou.M[ zhq i < #ui ҟPӱobAI BMiaT}])=A"әAr`Mg?EV<Dj]޻6lD9uѭ QmevjNj?W?y׶Х[yt?(Ӯ nw_B BlзZߊ+FmF[b̬׮f,QS7*y\&{MIM5 !Ь<6cz]=?]vz5ؿVn)S{C߈z I/^|k,+ܮ<ቷ#dXπۜ\VbEXꆴ- ^9eF%hZ6Ukbuٲ7ub8vq)˫hyCS^|:Bo t=.?\əos.3ϴ!\[όnPʭhxL !V[^dAs8  h~ lzl7!xktI)V5g }K {:TM7"W=dZtձOH~_,tfN~QKG^rA(ކRQnP#y)yzMFUCdl}ڙrؼO.%/79i\bw2L},mbLpO]$xt`8dq0cˏ$Qvx hXQ=Jߜ GFᨊF+vH/uDr~r <~tAퟂ"g9\DOJi\xFWޕN%ѓVR'^sf2yT1I&Fgq4jҶ'Oв,$/? [LASzIcf鳴7:􊭸R=b)Ա{w=KVX_/6f]-z&@BV'DP4 YE^9\t pa,VkŮ$>9xYJC-*Efe/71>oi~=Uu=ίjk]֢e/ջ{WNxC՛lʜQ͍$16ۓ_aI9>ix Gh'l ?X'fkDCOiR#K;ۄ$P^X/>hc[M}eT7zVX*+|7A|6Y"پk,q%C6?8q/r J7Kc MG>SSYvyϤibq'ht#}l>:1̈́s'=^Oqt~(NcH={z]ɗ%uUH:b񭗿9< wn/68P)&{vj4DGg;9و1O@Pljn4"b7;tJe+5w>mj6ƒ,VTZMAAKWD ~IMwPʹn7Z@k>|!k䄿.| pȏ)Iy"`A~Ze4rGJ0j^e6.ܱ;]slKzw х!:EB m0x6G>9 ޘpN;$gh'{̌?|~s7cl_E64VDP}__SC&F ]Mq"ҙmed*F="6'7֡ DVy{8\` OggSkp\(uh NrossGrx8E܃lЉ\hk5߰}O/svxy?]EbG" m$Rn=$.˰:Ha@bc̤r;;] ͘ R v V X֏p羖K^(' e95SU5i*dIz++N? Lܗp拐C6XMVMpp+ؓ06rB m@2S|qԯج.Gll [YZHJV+ͪmOjxh?ͤͅt8X(ژ)RRY\bJ%8b-NZ2+ɋۈekSrՅYN/"V6iT^I3!(s3I<LJ¶SEzyrG۸FLiUNhmUD@̄;s8+XL_,|̓_F5rʐMgbO;.^YxQvնm{3?v%=}JJO9_*lMq9t^wDK7~n5}S1.-+`ѦqaT{f29oۡG ~Ki|BG4`z!HA 6Y<~'@kVk0.\~'~~L>>]KhsjU]mOe -m=PttL<J!<ֲ?Xu]ۚIZcyD1yuM;tUܭ(+_M&17BfldkOϓΞ47/Yu=z$'`nR!؈]:^6s3٦lC0( Ux p/}{ZXY4x[tX?wh+9az}LX⤦4O5h|8i-]l$]2tXǧ6>g3pev} 1sZ v`eb1 ж*m{mvt>KxirkO/.n"*J@x߈$ËD#lu <_;^مtZ]-ƭc1 A`ir=>՚`9a\lM ^i9'QsV|i뢿{y|Oj5q^Yh|{ZK0Fj`4a"R|K2F&YwPgm?!ȗ'tU^Ϗ:G-H?>I-;X pG@Ib߾z<3{)^N7@*G9OԠۊxj#ryy,MW%%yTMmW:9A3oCݎ ft$3-pBh(>IZIދq1,x̥m|_5]℥`##g[Ĉ `/*y`chDR.G~ -立ނKYq 1dy ݄!arXKDidǪ%j>Ye \lvf}8[ش?{^赊|Id蔙}2OwU}7tࡁz.d ۲㛰ӸyxV߶DnGD V|:i%^/K6vHe#.<+жlW̉rO]0˻~X?9C$Ď-/a2s& PwKÁNY^j.Gd,6e׮|M@zM4g$P%~uVCшj-v֚?&mƦHĹӼNPk_޼'Sh&R$w.sKߛ/}NB'n~ZXZz'3Wr! >Yq+v$lwpߵ7{ї6Ri.4:U;-\{⼕:fg+%C&L/2my[vsVKg[ιH$_|xO/f3\>|^Y٢j@y$Sn 3,6͑3pHGՖh:`d>JWf*N-x?$sۓJ+) 7G|CHn9#[R vqw ҍa/+^i! (Zm;5\#ߧ?f?6qEYIz!)O֠XrQ/Ih|WͅVO]h3DK7Jov=8.dj7tхJfJb)u^I CNx6ո%GNklk i8~R̻g1bd(TF*Hw]SqM}A4j-rA;C#vC. ?J6I1)>Ie :%j{l{}p~hd%bLUE5K@y^jn채dT Nt/_lc"ِD(7Q+)Ɯe!K\ˇӖ m 6YgbxVNvjybi؈ҢR.XkEqYX";-,$+ Qo}Prl.U|ʙGWt3 NF`ZQ}j#4^nC j 8kW7ǥTi{:o/QxF]t$b՗YmY_fjtg+lQQu+k<Ѩ"nY8~9exlusj =g Ї鿝P^.ywt/|KIR }~;OW 6T!/#~؇?E1qU؆6 w=Xb~/lY}Bw٘}$Xú0zt+tv^G">'OLt&4[ю4_,wۧ o4`ӌ<+{\D?ow~Fu}|ۼ25>=krz|RiHg tcyUO̊uL.<VyHPhwW6uI l)J͝W ie_3.7=j'z-ы0rى}ҤlFMd _F (01{C>DP¨٣i`ȧ=6 q#y8Uѧ"50Wfbf-Iɓ^x1|5񅷿ָ:6St&߁6qC-V~O.D[Ay7ea$!G{73Ѝa3ˣ_9(4D<u.Si):W\OggSp\y!xkusnmyqvoJnfIҮXr  Z}duZG'e_R49 繦-%1.tnix daQ)ؒ*L:'ĢcW׎s T{̢ !=;#4I4 q]+}m+Y%`ʬVsϷ>~YMkUA鱫C"9ҰA`i``T=i ?&G(&UqlJuq M(؈X[=f %S57[\b+~cKw7Tm6I P xua8R/^"=[VܖȎq0 ]JN[ţ)G;PٶDț;"ԆN6Kb1/S?dt8fRIlfkT^jS'Qv x4;;ӝCKI ]ZחHMbb4ٸæ>dYw ɿ50!!H~}&YJnHrumc0"[1hg%kMB{ۛScr OCy3MQAiO7~ruumF~y]CTk=+' r&cTZ<'pOLI @s.gxۆҖO]2/'|r~5sYL^ۯ§>W/˹@Bx|}}NX=Y<¤* ]BA. |[d$ZK>zYv0:fwͣ%?q鱙62EױcH6\>dz!)wb0#[ZY<I) #.ͻÎm۶=9n[ߋ&N&\^߬f#`j$jHї\{iJW6[lDwWEZ1>-V&g#n9 |]Aa8"} >Y<>:Iq,նXoɍL*#.n;Wx+M^޻'[]xom+v8vg('^e E^}ҔJB:W4cA,|U1!%/^Yp2t pEۄ.O_wmoζ ãgT׺]B=69Bٺ.QdG:/nB6< h!.';%V{rtvOm&>ie2I.jh'*I:g{Q4bE )E*(Og?$$_47G oĦX U;@ջiJXkU1c[hWATdinJX9;6Y<4~7-wJl{uw'~_j݌\ :VɃi^oyXBȢnBDL.YgO&< M; =ż39*ۄasC߫Ḟ$ ʸ9FY C| % tXj&=;n姡Lg鳵af\#Kh^44FٶlwMNȨ)NJxO2ĐjFJ7-CSxk@hKA+ *2Zƥ ZFz5Qs85Uu9uAF*;_`{0|K~H4x9@?mSU&pr,4}Hh .flkdO<хXl!V6vcƾCǓZWE']N\"Wފ&RjiOk-ߋtتY59 M^2?OyU7| 3I$Yswu|뉷·>cnM54Mg']L#baH!y*'%!%eGj'ܜ s# V9UZ.BQYGaƒhB@2^Y<] Ut~M׋-oҵWěF#4. N 0݅Ie9Ai)<WmZK6Go4P3<"D8$M52$MsK 8UޣLÕeSߡHGZoۙ/~i?|Tez? n&ĸr"ϨˡHs},3ӊ%O4x%pS Ck uyt΀ZssK3vI;ÑBշo9U@,wIUy(@ p.6|HVyM<='ʥ S4ޛhs#)\Rp*VaO7RiT讳o=bAGSk(r䰁@}ۅ"N#Qbei&{ >9UFrtFe&^|0O遗گ:R'lۡq=ˌizGt҄ՄT];Kxdڻ;!SHx,x^}1g:햴 |!E%t)>6)*lEy?h. g5iE+gH5O.oN$rMhZ)yme5(6k|ްI\w(.1zHTf^羠kPt2q3Vwqܼ $Uvl~ =kXTKChm1VӜ^ԌXN:w̫qG|05}SB/F-H2F yUɦ`=ΩQ#hO͏%]ش+Єa~WuXS?.V>fJOCi8 ؾ0ai pitN<&ԡ~ҥCM`gµX';K<}e1l?ϖau횱 /|y}n%ͯiG{򳃩lN/nB&41T1J5ڇ5cy"6HcX2;PJg` ( :_KϮv홹+[,:@v>Y_󦞥y9+L&гsm>u j,nٛ`N/*ap0,bw0">w$VzhRo:(d!|oܕ!l3ILt 8t,ȜNU ۭiEOVdl$o!Ynշ0~*8x #:6_[},kc>d1.E,Siӛ;:fOxiewO7ըcqũQ}g_BHFPO7MQOSVUw o=O'ct!ډ-3!rxӗOzL:;xvm!x:9FNm] n$  7v4Im1d{դkL7_0Rc!=ٌNsbJF-`2l%OggSp\S9y5#6+m%YYö^$.{>Fm !W 8KfUM8dmrn^GÄIo,yBH?dSTj6 mO\82a~S?0[$T+Ĺ i~9u[ ,k=.l$z%qnϔ=" ]BV >aps)zaSy9Ar'-6wku86OD}V2quUN:]i|s6˭FatV*>IUE\qQ4ER_KZɶoIfeۮg{ofprTcbٚ~ ;le\̐8c}>_Y+B+f~B@b薯,i]{f>5]ǜ^5f.7MU7PZY%mF$^=U=L\yv]ү>K:ibCiS> RK v\("n?. r{ʡԊ4N=,3zG 4F-#q+ 6aJkzFpJŎXՎT*9UPUr E-m['dNЎ8=܅t3?+&,ICЉ lMjq|G=A>BCe3&ȡxaJWHelt\]nw@9ƹ|iMQ414h3=p3K%mt,8 =g)rQr X+O!AҸa,sxܺ1bF]̗Ty#].7UUPH:j.q:E$DaJj/.EΞ|Ԝbݮ ,L1MDP[4/;!Т ,7By μߐnzM,U^7¤ /;81C{v4 pBǝ]'v i4Q;m+hMXSutڵOWt䮓jve?+^}TtÖHmwjn(&Q-syKղPFQGGӘZzMs OY^O+~YMq fn泥ε_=0l۞DdJA?503 tU}^75-sdwT(X-C/?A6XZ"IXi|E_Z 8{ZmqQcwյ{ݯEyfK wݟeq˻&eklNORvlSkމU_õt5Oޯ{uyxtyu>'Hۏe!ry֭T*.M5MR/ $(Ce {2^ a,9z99-4_:Ё(̫l!2f(WP#]l!ui%~y5WŽY!lݧwl9~M}OͺZ Ǧ+ t?f89ҕdb 7dYu4~jfieקXnAxlk񉎔Ȁn rŅ9%Yc;`7U#.DN`weo7}.\a1Pe)N\h؛YkUsr.6=x8D(Y%[t\\~A)6YֲŰV7n8ߎV[ϴ޶}]}i]=ضMN%jT`VwDCʼnoۑȺvlTx#Bnwnܺ&ؗ]CfpzonFp A9c<#Q±}:#8UV #mǨ4Uj<^}C+!xtIf QI8rU&[O+ ngt7.wFI+TwZP2~Wm u 2+ȸKU=ĀZdSrX%4Q!:\q=Uɶ5]% 쓛*CNg$sԹ+Sl38.сSq,oů "샒%]wO=#'ݮQ, 9$ us#RmUԏ^I5ԉ # *p%:iNtOΝL_]ׄF ǁr Sﵯ+wk{YDvwsc?X-io~}?< %w]jہ&__'/2PزMo. Le\ ljg j3e|;_b)vkm[[\?G*#Zx]K#ӀuB uu5"rP=޶N 91Γz8GB\PY?};Ad&#zdh;$jN7m/M/PbpTۣ8KX)4!5e'.lh[e80Bs*g1 2٥-u릙sG {˖ +VANaDe@#tM]!iU'\yYK;eumvc?v?;s)&!aPHa)"Z*C\Fbg~ْD0lubzͤ1(1eLTsr˓{\H=BbB☦H ֚`“rJC]Z\'O8N{w\ac[F<\h؇,sH~)YuҎ&h̎ KX_ج39loK<+V %YG"v+m1V|Hyi62n~.84^hAI%PUW%~гO4-WNXH%ܩ0sQ5{&v"W^]￾F=z\"aIx 0b URӳ+O` Di~H( iusFq~S{+z;0W uksKk%Wt]NZ^I5`.ϪӶn]e?IƳ^o]b2얥Kԧe/qx۩EM=BF^tŽ,o+#J soUoNA9#ufoV'nvo53hOw@NU~:?'?b斵.fsc&d5j#W0'kWi^.:6? U ]Paq&Da ю6\뫻FIzڻ+2D5 ڣ[L@9Y&Xɾsu6o>o;|X|1MR* G7h2ɲ}cJ7-zb8]cbe%mȖ]`K} ߦH]mrBS M䥫 s4>/$H#LYU%\h&F׷= =^?k-b5-Azk3-$ ĎYׇP=2ӹp5g}c87qY1\faOo=~ZOl!^ۣa_ny4%NߛF+soI1^H)yo^-i1ȉ}'4vi5B vȾl=2\8aDRf7O d57[S^jYvc׷a߇FNV[{Z xr/ ~QZIEY4"F֯GsBދw*KҦ[ + F>\J:RE %9KZ^XtƬ[2'86RO~}h> c}BN*4S/T$ P8 miLW8ftNZKG_Qq~? xTN:1Wvzi3 ZѶm'ǧŝ=K=Nd_7[Լ0]|̀{}ΞXINN5eM|)-`]w$4flmms-1.1.3/data/samples/beats/rave_kick01.ogg000066400000000000000000000521341247673406200207540ustar00rootroot00000000000000OggSr\'\vorbis"V7OggSr\d-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳{ljt<5g1ǹuLJji}:u@4;񮨑/crk by%|N /M`ۏx {[G+)3EF<Z1q?: ({X(VD+o[1c Azn?sXﳸ<\4o$g7ӱc@ѠvU^:@J7e^`V9k;zѳN܏u頴' ͥcjJKne}E|`W8+ISr,L(݌~DS$ET{K;p!pvInn]r(1Nw2i璕g \l@,>f;ag{|c=Qi;;l_rN}vtT Fؙf|w;/:%,ߞ@ 0) -,JUmS e΋Ef[]"5t>2) V:7,E۶_/}^J%"Asy]<\)Cn"ϲC/N˦ m%rOϷmn|]sL x-8&}54m*X>rrx4  9b0>9xt|5@ve <&8>_1j}}}NS? S¿4˭NOV`A}bz~ /(k)+_BqZɝhUB1, K<@Ӝb˿}O _ޗIOwzO[[ gŖvsR,G1_cG# U tk2ey J*]J\iiucww=OB״(J<`%J:ZxrM~ 3.QRswGtNR18ntbwk,M7:{wkEʭM'Yhz9Kp k:^&c|mk&P7ZEgSbl 5L @iyFh0rd%fL$.҃hU -̐P=VEo.,Gn'#bO #JńΞ16av[b<> MMehOʼY ;5d>%,^CJc} =r+l)*]e~c@i ikɡg E T7ph=~mVqmC30#Tם%4Oװf{t/CxUǞh7Mb[2-ދҴAuil8TN:m~饴6(0^4ohS,^O@`ךjENkhU<{4HtZk;B7;L4k|.!Mp${y(ZXm;{~΄k l&HMD3>bQ NXg:l2.WEl/WPmo0 L lgHVO9]!%~ B A9۱ĭ=חnn}5N}d{@&-bXf»z\=US6v=OY>n#)#fb_Q^0zQ\t6`;jiח/|i֚>c|XV_I\mI_p(z% !F%y>?9x/o俶;uFo+1:a/} ͦJݹNGv ; F4rr1~ a'sB aulρ(4MZa]r 7UO0σզsA3F]Υ*.pOHOу!|)L7lF@4m>j;#m-|s:p}|6Ν1(׬6d[Nk}[]C"|Ucz%J 7LF(4M>'-~/ۆc+"āVK y/Xm Cps/HCԼ `a5aGXܱOs7l 4mٜn=>#)lNEߣܖk?LOAw7I3>`fxF\ msX ĂwxOe5=\< TLKN#bw j֩BӮ1YB[ dIܹ΄,@Ӵ9[{BAsg_|qh>i<nyylx>xr,~~ɖIx~l)T#H68z=W tI@=E i:b*ݒwts릞G;u8>6*}I֑L~I`/a) l%m۶*'CT|/ Ť ^[lΓQgeX;_)b:(M7#_ O|t(P2 \51pGxBP}M}ESTvypt unzRYu]V&[cV=10Rb% s$%Oc -cʯZY _X+7aZZB 8sv׹=Ϳ$,+T𥬋= ÞtRiΞEt:sKz=y'Ӧ}zt=yOn%M4ubg4TB|Ҽp<]d??mjt[z%K~4'i0> Sfi3g_}kؗ']M|qz0;[g;N.q,d{;!GiG<9>yb{œI 1,} }dyyyr|ߗ 怲//ǥ OMϗq8?.aCFy9Հ>1ffK$; &Q.f\s'?i&h(OᾶUE^"u~ǘJr ⓱;r G|ib&pM\VbO:+D:k10\K2f fS9>{ۗ/>ci}90Ychzpp6!^||ޑMC˛M,`|d{m}Sa O]6d DXH¤ 0OE do'5Ҫ[^D{(_HZ1a!|=t~lsJ!ɓ/}#Nuˉ{st$M/^>ƙ{7:o[]|;ue=ĈNwЂq(ZQf€-mû_\>]tҚ~HmANNXƕ>pSbyUd ImW:_[-b)_cE% /s8,$Wgϩܠu]#5s~Èإ͘nn(&mչӠk~uQғ+ ?-'K%[l<[h-v/<2Н10MƇ1qv4X6S}kLM!9a|LZvg4/|q86[E>Y竣/FПo_ɶ}h!|aqq_fEonU4yُo39D7.!YSg@[1ٶ|eH.MŗFG.?8=Ι8L{NOX-pUGK,Jej*8R"WTʮ>l48{PFrp)AM37 |~ Z}ۑжj̶w|tGf͸w԰3Kee#Ħ #C'+@޺,i]+x櫙G* ++(+I\1} Yy^l?3}܊;sS2jt+ A}_>fc#RMpK2cgq!&Y˳H KbbicE i1s4+"9.کuE&5z8Z4|x*-*o=%z%Pz] O$T][cEfm3'k/_N/Ds~-ݕs>{EO7R[cnFkLe |=P#Li4۴F!Kܞ-y$so7l&(|H.OggSr\R#Hgnb~qLlhjeHmje~~}|m^әG֓,wh[m-~3Q?y2 qVRL^_ˏGc_8`!՜R\M772o,%ZyF9` \@ kRyF,~}b߱fѶ|.2 ު#u`p'RxH#_2\ 4P&Vs3Djt,t*(lv/F^NU!>4$^|̢Uj^(],Nk.֯A-D6Ӓ07j)֪uRI`:6"IMxt3ZMs: rG-'RX]wqۥkI#oBK Tʡv G#>h'mOOY,rxh]|Ek]esc1dN*b琨ivػz!wҗbk\Ev5LK}I?,f+lxsD: TFҿ7fCadHᤑ ' ,MX%W`Tgo8Y8o$ǯH4?rwq(:b?:Ǎwm_(!Јڥ_W)-N g"y4FM!$ mY[*ʅt>f:_HQi^斜Őf?,K= `я9L< ~q նV[ĘkyXǣ@NB$D:54@A~k^Ș7g ו6Oi{'ldlU<8Փ窈w(N\ l(gs#lua-kvRsFfUF\aಙ8y_\'o't 9O_}M՛M7N쁷ற#a3>j![(oΫ:Je<ĥ$vWoC+}{1~ |9m۶AOӚ/V9PYv_|*<8:|>x-C 9L&MNana?Ni$i^12 I}j۶m^:Cl5oMgIILtMF%Ǘ[2CJ=Fc,Acݭn%.v%m]]m?'7gg)A֕ɼ _>OaEwm) m;NTwV!87v۷>oe.J`Oka֑Fl΋f#jB'781|՚ѫJ<xr1RɂleH$2\:^' `I$DZZk zmƽ}VK 2֍jh؅q;Y9 ~G.@%[IKz1BkIƬy>-ʌot!i>UȘޛ @vņz0mAj~rl]8Ͳs)d5E]F)޴g:f*tp!o 6ad) .frQ!5VM(6O;C@섋ی[գl8$;UAZH X`&3q.  -I]5I)Kul LlL )\^B)]lvzBS숫hk۶mۓ?h6+..>}z~ގWrWUڱo,l}8R,,|>8cF߲|Z8|>q\}`ge,8R/9)%>ܻ_xzz`'kOj:/E%SS fBzYj Z[4Ms[gZn}8kΨ/du/:xx9` *5c:m_j3?*/{e5I,@$KO:+}q*&(a|N)_O[`>&wvt^ ?̗5hu Viԑ׶ Yfp0[RhPͯMՒuc~0Rj/|ΐ O<vT,ǂ/ϳ)HD!`e!9] 4[cښwh{ $yN0`rҼaMnbO¬tYB9>]1CME϶ot:J>;EE>0ԅZۨF1W5\Eg[K =j)v0.b¶_ܚՏعxy<~s$5a[3QiOv$ ]jwG0\Xn3=ihd_Rr0_Y]`E*CIDՆўfƕ!C$0&r]zY`>=C6zPΆ:BP-ߐ<1=}E~UY\)/h[xi>&\쥵c5ʹNx||\.>_: `5H &+^|,'$pqΤr,@$,Yi1~GJ 4޽m>vE#?Nǎ,iti}/~MdGVMp/1=OV,o]_>X);ql [r--*|>6lw;{&{K=; dႵ",rWNyENd0/%XDU?$xxlq:̧=[@UN5b6_?rߚ^`Nۖ2ӕc:kH2> A3 `uzsM)3uISr%=!_J؟3^T _~3_{+_:@30=y֨XC^nX&mU;bV.6zN;a]E\P.?y5Dǻ="_(k/D#Cnbq6թj@[)L+1m9]l68a$K^@V cn.tH#kōNp6,b5V#:pܷZ4|f"N%ʍN9BDדZ"F' qd|.oy@Fn*jhyVd^[?@v֪S=kbF]友h3}Bn09pN߼(wڰR%>WC$;U ײIo }ةҘ>1g>_ XN61jm dSjg-囤,Ju|~FVnU72@gI"2gz$ `ѻhEB/!۔¶z15+l> >{$$@[;l}_{j?i~Ƽ^f-ʭ!WkMG _ @,iㅓp<{?H(/jPs+`=FWA+9`Z^*<\ j)JF-o%=;Uz;'+~4OR^-+Z;O_궝r[r-,kɗΖ[K|O,JyʌkJ2vYAm۶XɓЭZ·n:=oO4_.hDˊ- f3O/<PZ~tWY<axZv+)}wzIIw4yI9MihO&4jO&-| h֙ ,C)q<蘎իWn63cCqf$_b9y>>:ݬ)ֿ^7] .4'xŠd{<_6x-szy_d~+Mn WnaV@-V}: \ʋS{!iڥ +BN:H 0T3}{9ڜ9y~nY[ '@ (`gat>|3 Ghy>1C){:pU*M< > o{lmiñ&=l>zbp -BScyxah!~LZ-@Gq1<&,X`_ . ļ|6m]ڞnq{sX Y'?)}C󺮳R bwGJ-xtnԍ;'J_KmT9lt6&|}h>$jOVd:ˤdihq?.YIJ|75k~_ũt lBeR@:,@y۩㡃֎wge޳{I kY`$dd#⻯}˷H1uyI&8;%5<= AӜ=75yrӻIk?lxX&&اLӏG ~muz(e>gދ{|*qA KƓlK4 :Ayipf> qෟ c##OX5 !#t,B X :m⣨yʿyxtule 4¡F=# .@Zi9~h~)#kAy*8Od<j۫bZf'I|I@z1ѹ i7:Y(\Z=}Q{E}xJ[,Y,d7)I_QniV|#1?/0|CX/־M/ςyA͂.0ǜ&:48KUUx ԣ1߁eXWKi麯 Eɓ'k'N9^[ФRZ r˖=KzaB["dz;E6 \r/-lSwv7_e{qFȏt{,}lc_RMCtx)gFNI{$cHm5ܧ}!.]>3/%;4Ob`+\Z +5)P=E^O STCMBz:Ky-:|o 5Q!=ۻ]>[H ݖ!C}㔝b/sZg8җxlv)[Tj 2۞&R} dh'][=tX?Ox".^r7? (e$-!wUyxSW& i_aPCAj%b8 67:xj=+HyI*-+5. $8Ѽ~>s6L@7τLsW/]ުeF?f%+ʕȜbR]cW^VYvd=K(92Av ;&w%`ŶcvBxk?Ct:=cT~ (///8DԶqm۶mܶ:`1F1bDs;7o޼y rvvn"q6PVe$k@ ;.epJBT0%΃K3Vf%Nz"WLU?F=l^OyS$֞Ddً܂_)z&iw-(/LZ|0J`a4kʻTFnWm}Dىm.-uobE!pPR 0oGX13,p 8 @ٻ/9m1:k.zvy05^O<,Soݻ}n9q^?yQ.O_|q #fw8gC|~{<79L.M|_,iO&mL`u }$~oUkݣ&5lũB]B ,[ S{B{~h=5Wב #?w Lۯ4ڂ9-LҾ{Ǘ*}hS/Nhl,>^5k55f+F]#u$>R4jj]}#g _fGwj .T q)T+mFvJ&A j~ΕRv`Cd݂E rYHMMf|7_XŞ }vk?|m"5a<0ފZsuwM ? VS `P-mEjo"ݣ?욛BV@WgȚ6\TX Fr"]hVg&7hl/ޖxOn1\N[MSDmW^GWU@a6"[NaZ|Ft93h"'F\A{-H$+bgV. !{BB4oNm%$G+KJr N3M ]!}M$fʯ:vVA._ 8)alԱcw_=& ׿_v$6Dx1ʆ{/"u+izEh95]X&p`F{?fOggSr\gKN fd~fibC;Elm/'u5|7b/&$YOvesfc ۷x:rWL }2DFnwE.UٯbzkI*;ݫEiu;דƉrqG7u% /[nJ=tYt&(7M;.@0ع}!jr,?YDvѫWGW8~kPN;IH?Yo㱙:bXrوbi޶:0~bger/+Or,BpgI_5,iC @ԫ_"bŊE*"݅۽07C&'Vl5 mm]"9?{);xF^_8ygkܗ0ӧS%+&w:Ӌ"O"O\ᅕwՋ/:》:1*|<$L<]cl~rz<(hV& oAT5'lfF_ڽ9[\,6r.[.B Ƴ`]Y n-^oYb(-;a%~^ESӎϸS qтb_hs;aY&B&V/To[2(/Jk}f[U\f{/dƔP=/'{m8|,Om^Sph bK#C D##of˩S]λHvxnp$g>] i*Vnkogě.]"5Xz8O/O9Gz-ܱo[gGAxjֱaDJQQΑ鴪:E# y;V*V;>?ߗmYzqeIFE+K`gQDe %T' -*HϊMaMu7UEqp xț|`|gV۸(LDy\SuW罻Kh=!4w]ep Zgw- ɾzmlӔQTWw?j%zU 6tyJ[h# 2̐5!ŹNWwjX;̦Bک qbXFB|h9<)g\`{UGօ/ZpOʠ"q˭VᑶX8-/@O;yX6 Ͻf]]<ڝ`)8>{M pk@ r>Hض^wˊuϪt_Kp )vp ?.ldJjF/8VnVk/e!˖ }A^*nsל?V{l5~ cEI5>)tl~|\+r'y +vL}{&/ʷCdKo4 KQ(Xl(݋PZB{ +&-](I(U`{Hy.w=M,d>KeD'ro̝Γ5v s(c'rEIń .]/zD) 5j'3T ?tETlf6[{WY}ۺǧc˸"\xF~(JkДR3ϬsD1['&SxMwJ,Bda-xR f|a|\ˋqW/Tf^.Pp~^`6ch/(cWW( ɸH%2OظBa ~yl jI``xZ2 w&#oڨʇB;pvyl j1IHh5 `5ub$ZO,m@Ңt AX(&MS`ZT}ls1uYK+/'ϗ$FX'Hԥ߅J=3t՟lՑ2)W4.-RN$f APD<%hD]*h*k@4YeK‡'w>&=߶,O?Tlxur `8N ڸג>!Ԝd eI8;!x=2NP4l=ǝկҨ+8z YCvMӸJ ŪJ9Z o#%Sΐɯ#Gx!HGeyM&:գBa c1Ƣ VNd 鵏Kzc/ n{F&8jnخ-Cr/22s4Z<]?߶sd YP8CDMxRS% % mA߯`o2uxɓ'uٺ%y*գO'ʬӯ"xI~rbZL#9cq^W^$m6RF@/]ՒB+"cXM^3 첸tдmۃsXvڃeaUjwnX̟  ֯XALܻZ2p-ql A/7D\tej0\ z(1\ >u0 Q[g@KlY{ ~nO]c&z8(6w5L%j~7YMIl$Z~X݊I]cm)0-xk.}/wp7dpzT8ZP2g[6[:+?\[7u4n kS2:.4opXي`ŦBf3'&8K1 zRGW{5emή륛Ż}oyyXs:4B %҆2gޛJL|M{/%2*&A՟BVqp5<VNdx Wu%Pb%>4+m[۫A~N$a s6b]}ƵȽM,ݽ=fR/T ~t+T{/o=qƃ: YcZ‰R1qy3{{m.UlVI:~ .L4}3* rG3cJۃɡ)ƹ $LJ|^ko1/=ϘvnF* 4)n1l,13Ƌޞ]P5[a;"wbȘ+um۶./MI|AkL\|*ot _QtR^>-M{~}~>`5:$vyl jIHh5 (X]D loUg43 Ho 1\ XFyyqzKwqi|\ci|ui֌evx-yųJ=>zuV2qlYZWl?)8<,@lcNo[MyӞ`,3ˆӋtgT~8'j6UG)z|?pFDz'yX4M%xz'ɖ`',=k1N#v1HV;\c~$KybV<ҫpcbbMs4|ÆFM>sr(s6߲O]TwtyF4]'MitNZk{$r@֖0j!Qnz^xaՃ \9K6~z*03:ˆWGF̌n pxly|>Ϭx< D/,@Ӡޟ/ ۼ^yEm{N8#ymDU"IiIE%'Rv$+m(q:"qE>mh@ysq*r^vEӋw/mrfiVW,tMxo'Bv&1n<X{$\ %՘2UЀ>D;,@xnL[~7 >fx"1K7}oosr\k@z~~! {/KŻ s) jCgV,H̲fxպL&=1$%Ӓ:ROg6ΣdᅜDj5c~OG>041) o9qE9@ӔҸ$ %_=[Ƴ$ FY!b:HW&,7c>D>f.ڭmx,ד\nURU>F~ˢɁËh m'~_8ƽw MV b Z;PJ նm}?>J~Lx={pH*:[2p\R}gxILb |()h+nvpC26;Dn}BBr(kmev>&eɧk fs wO<5ų/0\`t4+{ ZV$uO/ᦙ՟5JjeOm&&he|p9MP}*x)f$ 3P(V}<\p:cNjJYP$5dA4W!#WG3/}lO :^n98?Hk[+&[wl+gqF$Z/H8lREcf=N$ #ӱ<%S~ ^c5,DVޫ_><'R)+mGa\X`6 \z>oS)o_)ѓʒ4Pt/w6+ 7^޷+l.soI&G&`9 P,'NZ-¤ݛVh|<wf"/F A019JrcY?!>wXfxwgkDdXfH~ DON6NJmL/][q ]l`&t%nK ۂ0ŌmLcu9#7΂g%A9eP%IBwUFERejtTLfB1>V&vYB Tm۶m6f=fp~mm{hy?E˓~VIw>7.ъt\wԭfhaϱk@!^[4MN{:X 1vȨ>ڵ>{&?aKEG'I²t{D-v[-j{qA}2 ,Bѹ7)ӯk7}m]ӴlJ O MmBH@?G=O9NQ>rG Vrvc*9w{;(tok7h[&][vn<"I/?&oc^\\zC~wP@{uW&UD*[n-UKX By³bmW_ sB,xc`T&^ p<@Z-ڶ\ofuy1W]}ԛC?щ*'dz9u )4{7[|uJJS AUWqRoyÚnkIt&_ū9L&)DwX4 ]) WR"cWcOGNZzZ^P\تX1l4tV*&4,w% |heJ3cK bB)Oq=xuc IM9&^*;A"=GtvLv]QE~{9;^5gm#oy[pvҦLՙ^9!L.X>\! Zd.vr^pQX3Dvʾ&T,GU)F(m۶mOwɧw?tgw[be׸z˓PGq^%ϗ|2  ǁ{{yyjx5.O Yl|,8pi6$k9;Ff rp7+hqORۅ:$*ihf9s㓞_-Y=ǟ JS4rٳOggSs\2:R&kdlx89\jlii~f7*,kokghhq^,@C\ Yj^g9N{e9;J%t$\s(cMr, ,npT(]E>NlujbGtna_F~{ѧ rR:sƕzɯkm $|ZK#f +g.n `vWjmD}zp/k7ԲC9ښ$lwAP=pv̝+kN;`)BQ6˞ܶS☝>P1${60QfzTdTz^$o*h Z,v®Z2 %k< xAz.#vFc,ɘ ZPXyZ 5j gJpܳ_HHIMHC2S߫bS)Za37ϡh=AS2m#,D%&h|>{2@}9Nm:\y ,j7jtn@bb1,c1Y%X w>s{:uGmW-; H04_y1oB {}T`\;&ժ]mi_/|51 퓲uٺ@)<߃vd vAg%A2uY*z~vvĤj"S{6!lq>{9Sue>萸`gJi=6;\[l鼕nތ˷dΜ'H) n묬 $WS7T≞I%C5q⋺9R>4KVހ:U1w FnPgZ>J))jUl9l6K{F۾Vn!'JN_/pՏ$.gqLʷ hdQs %NBETˬ]2TsYI{G Pk{{&fIE(ڞ'M|vCyd%Iph ~ӷe^0FiGnNjFC'Ƞ@S#8]}YN郧$QNG:NGu8-u4yޣ:~ilHa5$)BSզJoKd%3/9\u(&X˂vyl j 9I Fpؗou9Vx1ol(Mwh24t$%wG ;pu|X1׳x ♚gA6L3}Lggݲ&^mIu%\O:7Z7|6YMlT\Zg38DzPӵ[\Ofv9-柋|O-'O%6=]Zba*rDP)-''ɹ},'@JsfwMm[_AOyqhJe$f AB1j 2,jZrtd0i ]^Oū!>#:~9Bpz-ͳqW?VײG<3tZqٯ #,a$ɟ6~LR7hjġW0f+׽-?~ OɻdBÊ{|1ˡKXI7J!'d}K9a>?ʒ@㢐38ȍWtV@n-@4KƸ*myݲ}RNKh> #kxYTW܄)|sQ<&շ!~i$;}t@ZM$VkJS>b2"Y%]zRNtI/М:+RzttYP) 5@SkI>/ݪ֑<*}ŇT~J0S\)aW01Z;),Sd󕾍h39xvۇ{g~z={&>4}Ξ'76]>g^6|W_t|MףדN;}z%iWVLHnvyl j@ Fr(y[ oM}{kfv) $k@ ;b $*߯0v$k8 TPh{Js44Cw-[9lt3>wrpco&,{lq9vd%#n? )^ɨyK/x̛t_E1}=>VIܦRB5EZ@|OOv՝a(.=ne})BÄ}anoH INs,kHelrcϧ˯XXF._0V[(:r{Q5b 8H.ڶl_gJC;IutE}e~yg潌|S o&I^2 ^qD?kׄG /$t' ,LY,K4Jr?}<>έb>|>Ǭ6~S7Cr<sW~ny*q<~ LGk@in.bZw ~1i}z!;ϓv"ty\)PS1Ԗ%>N:ٙbе_9ǻ7L+r>WSP8qAP4-vZtݸhN ƃpw]SNem﬷բ+gۯ㜱ۮ\*ލϟnͺ*u<=ǍuZZෛ`%@X-ڶ0m~vݔ.i+fXr!We?s!L)8D} li偀1γ #-|FW] Vt݌l^w0QV$n.ʬ֊OggSys\/w xzx:01lxb#il|ps~x35$him#>lvmE{w=2cbica_e3bhSPtuo'qߌ vq,gy+1=~1AeĩlgѣE/ׇbYLd^Kvl^v]x&ta ek%<,`L?rWBp!9Z2]}n23}k2{[8c44wq uc8KS#]շd {hUJ"@ŚD_׼~umdMYnh hMW"nu =u+ն|i՞  @)ѻ]V[--"7f |Wb_9i#nE gO6dpw5Vyj_6LMf0N "3D_GVu0*jjM;):#]]k'jU6~O:'m}x^6$ _BqNNju eɭ~O]n ٔX sI>lj /vGɾ6}0񟒭 -7jD# \_~|I>O2xӗd| lɩ5q5C|IhMaղՀ6Z;9>_g_mf3v*ϥ넧[#;n,[&=?ktӗ6H;z Ap\sn61ZL'ίόԙz\<tm\+\ VZZrيzG_hq1ZOQٳ- NGTXaZ\)LDrEU杻cI/ $f ADPdLnTYgޒ'jRG9k4,r\?_־s~'L_ZcxO:el[ ~9-%n?Zcx'h7oRYh;D<ī=&}];_uYӶiz;!k+UfmϿ#Υճz+ӕӃmOӧA^Z̽86m7,yR|W#ޑ"(}T+O1<{"Vsiiz,|IShX5"trX@āJې7ˌ"p3th[(\Q۬;a@ϺKL-1WwҬI Gܷo\yf-oR̵E#mE(ۦn'/oMOqLbճθ "ͽ$DpM qkn-TPb+?_GaK[D+O'Jcw]fa2]j\azeRzJ:HV۶yŃ˶gK[W!@ ㉘E6DdDEʌfX?rg<ԡ,6eӀث\Ya/9>yK+R/l YK+El~9zcaMWm۔Yfv~ϧ}'aZU-Ef7痗i\~fMxMq~zfEK2l'GM~yl j '&M̅_,qOw!%" h8vyl j 9&Cwh#Yuk߈L(3`$:  $ @v ΙܶH^R- [mr|ܴ֝K.^~e1?&:Y\6D~Ǖz v>.+$sWOogKf<.ۃd&5|_ر v]ֶK< O]YyV_>\^>s+Z(OL;Uj*+^r }{D8}[=뉣VziKDX|x:3P;-$!,lmms-1.1.3/data/samples/beats/rave_snare01.ogg000066400000000000000000000507331247673406200211460ustar00rootroot00000000000000OggSt\Xuvorbis"V7OggSt\r-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ht51/,_4RGބg-aqm\bxL1>;wC?YƱ#|xq1MuV%qzY_80 =,χ](`gjy;?q6zaxbwo:[m4W x|L+MK!A96n(JU=|6ֳo5X$PĪ9mS}Ƭs]7a>y%SԴW^QZ fQO~}HZv)3*kpɽM(Hyҍ*d(I2eY2HV01Gh>cޝZQ`ggMe*yW^mǵW}H.\A:V%*3^-XJkpZ%|e"5VY֥HHdמ9JWbcovPdɞF]ދ.y:MzzBt/ 5f"$݇ë`}m/g9s~^C,c5EqZIҸ[}m/]BW6NUNzDM q&SE-=DnK/WхX5`4pڹI eSLzG;$M뭃@O}btL0ִɤ[גYyQdxNE+r"hQ#=ʆhHDW j/{;,d!fquα{yC끊6/NΈdya1dWLKx^SG WմEf5Z$^';}]SVU8K7f]uKWWjOui,꽐NP4ӏHU+|cß}+sU6Ng&шW ,=E{`~?ܜwN/QMs]T'}~騈>fo[S>-R63Ia!L=/ΰk2*2ӅLWuTkh4-I% _0F4MICnk$Azj?$ݰ24nS'G9 'Mn~S*,0kx._Yˏxwpȴ_ir#{-/>6;m Ֆa-VÕ`:c|t7,?}8^$dĒp N'C׸trNؽ|gT2y0It8c|\UDlRzSz,{$f APD<%hD]*h*k@wΗMbw[m˲n/l̝ ۓZo?lߙcc} GCJh6:«u&^uEyG䞄eSF=i +*k8W<ӡ\!#`\}w<]nζB34>N0-Wmdzt<ZB4l0tg<;~ؗW uβ1TF[9@%dd-ϳ[- q 7~Ul_=]˝]Azq8vF$f[ӎ__'k~u4ɩБ6 Oфr~⨸oO'oi }`aEf't@{mE)O_?\~zg ;??4f`l7/4nQC2hb5+KnN912%^)CV<6%d+XOrSnszMzWk-Q2Z=9A5}:kͦWjj4,_o;_Y?zdWt{oIuM*gZh~j<#zE:&QƊ}ZC *'%'=Ku]v{n k~ Y,Mj't;qSh[eEk^0uԭ-DťQ\ed ,M|eXݴQV4ƊZ` Q:gbՠǘ+ O7>&ΐ;E>U.|SapݚOxE٣V\)JSԤ\nGN{\vM|L)r`ʣrXWX+Pwj@F@t+w37P[%YP] BGr%d]'=%⛓pȎ*[k{ >4 /XT="gں~_fpjWjXdeY$Ggڒ ','B]Ċy5,^[$AjݶYM7l}Fsvei>;谻rϞ q *DO.N.$mdOeݲpL>6p ~ӜU%5B=]lBW3Z=oDxWڄ2+PĻoǡAHqaC"Dhiы2Tu^ p4/=iw}NQE`,_jF,u".^FBIc,]j$:m$Ɏeu}h^9hf\tk4YMlLY#Ͱ(|G<\aٝ8shGI8XS;fw۷q֧BT-O8).9_?տ?\Ipӟ%!I-W%VIoݶ5dѓ20|d& x\7\vvmӱIAI6,s:3 (C`Ff̭iBpg8QPzzaɖ`@Sh|CӘGPV?hax $~4Shf$λw͊6Q/w_9~oLztX&@ 5ꎫCܞ!^6"jM=WuDxarN>rInؤoprVw$%DO^ mS JW~A1Q,2j׭ 'znyyyZD;欥yIgT뗥ưlt̀C;OFgZWܐFW9Cf`οO9o-:D_YUwtJ-^J.սx/=F۶.\{ؾ#BVXizvsU쩖GCzG#qv!Pc_јk)m>KfZ.vEKke= vɃ:tmOggSlt\7wrH GwuwIn|(mu5Y=N]s%bv}0O>74B?=GuR#e/[rTDLMzFg+:BGj%Ur+Oxdv0޽,?>dS۠aA7 ~r%X(]d-;6Vz.w>_fws4Z3 =el_Y~Fy[,w>ןy JRɔMvjнhЄ7-&`:z^JdjOp/ Ul/_pR/i=mɮ׽8bPwý~hĺR&qvryY IpzZ4d voDF$}܎9i !HI.^zM+҂N>$v1)wÝh\3+*3i˽~|:wm}au+ H/U&HF3>VUج~LÉOT"}GS!c`3']gJi6m5>'ܰ ,m+I8[\\?Rnrx\{Gn,:И|i:/Ă@FrX/br_ TSlVͩ9e6W<~w$b-GO)7’K♙kOB4i94ףӘn[ # C+!bɼet 1SI 忭 º{7PRG$UgxX}?Y .fͅv}toy`M//[[ӆNW~ykߟlMOzk2Ǔ@"S{JOp]z~L6<}.{|~ t*2TՀӮ,@B{Ima,mcDvzմ&nP@\&Qvޭr5ۓ~21X}1"گO~ oXr)pMzPTn$h2<.b)>YZz4OVҨ5uX븷oBs;ֽI~EvW kX+fJ\Fļ8\,_:YOޭ򫥌nc J0E#Tt,:a"j%Yq]Ss=@-`PO:piVd;oB >g w\rSiLbWDVB7iϫPkNshܫ[hT>C UևE~ju=E_4RT'ߙĿHX|u,w")qϸ?5;/$;􎠗݅. xDa{^ߐ7k5aXvAC:%ysq&*C#b hoO1th_֬Ʉh\7&Y~iW/EZRa97fxGns)RtMj\4M +ՖqFA֤+A߃d$ fMTƙ mTa(E}[*S@M W-2uvjg}W{VtAߛxεݡ{ڪuR`3zGY` cPRn%|ְڳ\YL7@NְPx)1V=ʰ~TS.2e/'JŢ]v:7ύ,s⏒D|ǼةVXYU1cu*By͸Tyyk_bx$eߨ/HE۶= WZ{/\eQ\nje8Oozqތ( #Z\cAA/;UXOYYnXokêEvf잦0rXjIA?IdZ+>e"ʕʻRE5i'*61Csz`Ͷ "eWt7#c0]1.谺&I%Y yd~,DM |Xi'C6YKGG\iev+ E\__sV'֭;-$'|gOshZ=4y#*hYj 񲽙!m#CK>-RStFn%I+/Xe~3wJpyn6| %¤c.M՜x*vrS]cKo叒$rH0@T>!Ȭ,1> )`QأC]Vٿ\Rn ;'qh(F7W rҫ4%W_r<˞MT|2t]ˏ\Z}@MqGȂIpM*x286跡17o[MZ'I iEbs89qMZ0KT7EXqY-)5S]VԔI #p_Byui/.i [=IUZzSyRMdXuLZ\@;ж3hږz!oݬ;*@H^9:Vq&Yӵr[xK$cA %]n0fƒMB uw`ev9u}FdiX$l;5''ϻ_.;.]Y^m5^a9= GYɧ} lqҘgͦ-Ym(Kދ[ X w?*!zOs{ΎtK,޺7$Ӊ~`EqFZ{zyfYJKB^M4R[$9hAڱ`&e#`Bkߡ> $ixfLJ9m/b6&]*5@L[=k,{ycxzTOu;a^*t+X>r]u5w!oWHdѝ}:x.YfLx2z ZǛX7#%pUcil? &p !֡ ^cNƱr$'?/dgVNn u}YJt='5xyҤ[m=%`pIc~sZ6W3;=\{FP!]4,5LӔߢ+ ./`,W\Ip֛֙ fG(mzQ*ƴz68=l^${Pi].voIK+mj64RC1 a+=Qm5/)z2;`[G"Ft[R9Z`}uL) D<X)jQwg&5MQSDÕ۶V8+{mм0aK HwA;Mi^)S- k|!o]_c%e})*1׵@LEB&gM1!Ad2(~yf :J_!Amz+LNGuZ{$l=I8OggSt\Dz"sxItpm(krJqr~Yekt dU+mqaqSpeNxM/~5} +gfq蕒vJN&mC&3b-']QoùUp {]|+>+<]6 przRn'Iu0; qM3+]YD"V *MkDbj :3΋o7~ɼ:Cu^rc7LJܙZVn[ i-IxK]|JJ̗9Y߬l30ihqYe޵(:̞x@ծ&< |Һ}|vz1Ƣ|b1Iڹ<<,}hVѾ8=\mDfu kv|^wh+!D8溙I,1ʌ D Gx{ȨP,"{#qr.-lӢUB8PoĨL`US@굎dkV@rR9;V=İ nKޘ`%{d rF7(NM {z+R{ue)D%aW 횜7wӑVv/}~6kiSLh4DYB.Tm̦TWœ 0yOQ=M֣8+Z3k}f:'^ެk M]šKVJdQk ЬmoVfPo+60kpwI:7[ܲ4Yos܂ G:g};=R/~d-ob&![XK:9S^z|"M}Q"T\kFpYl6Zs3X҈yk]wNTK4a`T$0dne 6/}Ss'gScÃUw5 :ŗD"'ک  h|Gv)-tӁuzZ&F8..l YꚟJK^Pu].:kډ0'EFܚ& yfNÚauyI ^iE=ÊգK4s?TۊmE-uO:&.{,ܘn. 67Vv^5d͕Wǜ^O>Dǹglp׳VllE)́MSV2,=$+gk܊ D*ju}D/QwWjA+V O_x~_sHa"sݜ&u*h.wRQt'^{bC/Bۍ[8~F|*f݇pn6 2gX*j:~zmSixrCb{i][/Wx6SI |ty>ceoڬжX-:y␦ i߼wIYߵ6ȵkA$>QT︢؝]'[Vq@?gN !Zza M<s ԔQ4W[M.vc,ٞܿk~8~ }3 w c[LTk+չ _p$R VJ?[#VbIR~@ |,I2ܬxCs{ǩe,šwu>OD'=]\ċm}~xĻtQj/G#GZ4''lQwEUL2`K2L eN]RZ6wVz9l[: =YPrΧ/t Kf7s,Z$"ztQ^]ɑg$D=9OF:- 𮙎<ŕVRzpˉXjV}?Xu.ӲgnObZ8wa4/k)'"jwOF\f2y% $ 2boӵ_hYuⱊ:$f AB1j 2,jZrt{6fkrR gi4Kײy}^ l~9HG9/T h64.tdplQ4 H/~y0sp3m#"VZjy6#dt=`jO5/| Da%cYN^!~p,%,_b~yIe8$ IM'e܅f6 L5m~^ t7;W[a+h5t,^[GDڂ+꼈,MbE/'I62͌'ʒ3BX^Mn.Wf:Vyz/к( v}!dKy7pM*~)%/&{^it\l~r#'yvtL^DsY↴UUF] JBKڋ&3 }bLaWn{Z>|W7eeJzS*Ȑ^ r5u-vyi?OΊDrILْ^ 9uu_e^fV| ߞ7ٹW[]W FZt S}j`OpVY2QQk:_ݰΦk0ւtm%B"^pt:&uY \jr|JtxWVK' =˕Vv:P]ѓV,%MyKjNote{w4#ͭ8;ӵa5Tv%Kr^} R* 'a"82%bCxoo'M!n !10VL'N9鰏m=ZM &x{ t>70?y֏GCh~.k6à;6D"Kxۈ6όQ?֖)?7+{;[LϲcAv ߶tW!o`,hVc =I}C"mB9]}&Q#zj ̆<0oR̨[Xpȿf/wUfP9dѰ׺MMR1/K;twZri_}f>\ڎA/Tkb=hM m}Tԃ.\aE@4 02M/#ࢹIj֊uז֠|4}m}$FcFiI$1>I<@w!mI)k9M&T61u`3ۗUSSz%5ۓ?4i|N<F^ǚ؞U}\4PG{T+t"ݱv+1OX,fUsIus65 $ϨYd{^PM: {H40!xlԣqsA|\`ӴG" 3sd$O5)/_I"0~ M@gpU'qv/ٷgϞ=69>pZn; _PZF3rLY;hIJ=`ORڮoͨ[FXeKOggSt\2AOrzwo>jڌ&U;>]]O؉c=XO΍?NPƈk,aS3*vVTs'˙O:ĎvY`/VJbQi9h3hUʫ77k;>IE5.Ӭ@&.XTj;͇7]ý1h m64o/DMQ0RF՜8 $F' zxfhq'S6d&0䋐h+WӲg^4m^* ~ +4dp_mEcl|$'>!h"*Bޓ˞73Zp:"UtD& 3D&]@=Ͷ,.L8[cNc|2bU` o RZM3b.R6ԋxB~i`ZC(wD%nEEeI{}Gí-sGn#iwrf#>3;rz]0k% ] pT9`uЩ^|uh-^Ck[i/M/]ʘ0Ъ_KsBakb>NZtSm>3בǑa,Q\f=Eh,љZ1&^'tg4;Re?j֙-{tjg~ZV]ۦqm?ޑ>0ݓеzʡ19f9ӣ(J$hP)Ơ$fMN_%}C9v*^=a]C \&Yϩsp;.B[e#',i+Wznuԩ6aZGh}{L³/ DƓk;\G*,Uy@ V>NEN|:5䗮q3oL6{BLqf?;hh KyntO0.H?0Wټ/vg O) 迧w6_,e' 0oB lӱn$@x;uOni)1tyz|钄|K6x'mꫵq wFϋElkJ "aIT|~1}T.کM{sVl[/7;צkh~mm̛tihaEȁCݣZ4(Il%aI9Y㦩FZaY}Ŝ0-rs[1RJ(.c0dJ͇ZiŅhoX*VvOےIO-d9qb#gm'׭\Uј4u6Cq'k$.mŐs@Í$Sd}h} h Tq~Ğ o޶0ξyu=24螣G-bI1_{Z/m:^'_Mwt%ޯsuN 2 [-ٙv"]HNIg9hDj۩s'j}!yD iSJE{Op+&5|yq yĪu"b"Fh[m8N|6>zBc@d"ᰝ_+ze|b09u]!K ;~BpE0YvUf5+2ӵJdk;kG=׻ؾ|[(yid㫤%כYUbnR]s[-(.ۋџn흸~}oՉ++m ?_ܻ*qee:OM1##+54 ~f8 xf~zd^jΰ[% (51!C;QV^+:^L4*]2ńm{*lك`m3M0{UkK !7B Яj~x ֖ MR MytS]L47FF'4=qGk^*MjPzhoVMTlO^w.&%.3/8߆jBv]vdBAa:R@םH /oJ`2"M/[J?w>[JQzbF ?0 ΤI$6.;@~Y%$g?QYhۦ*V /֥;c.{~ e%.^>97;8t=wo<vaH7M€V2_dj"JbT̹~Zxpp 8e}iH0kU=v.3V>~1n Ws|Q qwڗXO^,{Qy[DMW}ڛX}yPºgFPQ i0M_8EBQeZ[OB/~ m2y]^ETǶmj‹s/m_};yr>jߖ)VP.ECfXƬ^W fx,M?UyZ$JHSN(48jzV&A9!HBrU5hpǾRվ̹h-mlm, ;d#ot] ۚa֤n0-|bR?+[eUfc[߸"xB{LeM]ԝ7mŮyxesqC qbũxRRubD z0ZYɂrt^05OPleC}_8E'/:_^IEµ1/Rvd !;ɶqZlӺzYbWl qϕr,GX.I@)dx4bc_!z;YMz^-͢`s] kSd_N/>ڞqs#ϟ.FuzO>`9ls|:L߸v/ X-AV/o.(F&qEgq^,LYIfjgA}z[Q5s^9% uEs]2.9)/v-l^_wLrd?Cgoi<71n jh2nFoo=gOl3{S'NmMM@L*2)Y4;!zˉ:}YmkwrxJ Hնm֪ûFW}u?͖L-gcܷOC;:L?G·B7%QdP\[FCO~ !30OF¼>'iH٬^Ȟ+8%R ,ne pNm6Fi'ˮq5klsI^ elѱhkM`nPz!n jb÷=6эu8O_Wꃯs2K|]ت7B\NyksOFq@K<Y^Yu=%fG"vb.O)O&>pĥx2Lkڎ.Mc[I4s>l}Bq G5a}cW=>DCNxW1GZ+yz "!!HRۯ W>9e;(J& WnbҶl|s~t8Mgm8$"٠t=>15:z7izkĬJ}ԎB[ /Ĺ*@VjJW钉];GxZ%=k @ÕjlO];V3/ޯFan2PS(  Nk: _dcW.]M89!aͥnRE\q 쥾mQ|<'$d$)D|/s^y|OggSRt\@npkiu8N%\ejj{l{u,ϭe;<[r8 b=|=ēEH$.:Z5'[.kσ+Xklmms-1.1.3/data/samples/drums/000077500000000000000000000000001247673406200162065ustar00rootroot00000000000000lmms-1.1.3/data/samples/drums/bassdrum01.ogg000066400000000000000000000233021247673406200206650ustar00rootroot00000000000000OggSw#! z4f~{UY- p`m2A,V݊ OXKG-̦'EԦ'E|8.q98FA(C*?EޯyW:2K*vk>+|s"+nVJG%<VUY"LTllfKgFbLJ "bZQ)b*0 [aĂ+҅,#+  @a80 ,K b1qĀleŒ!pXƴ,12a`X@>Ť*-5~Ŭ.+6&g󏲧 >nS‡(~1 8{ƀ{÷fjyJ% +/@J|? BEF R4 bG܌-ǣB6QbB0PCY8h5e. Xk,G@ mAAVY;(Z(YiYXX$$"!Xu4ŀ NTmp3M|-U!  'TU (VXEi)b!jS,T؄A"[#}Q[ӡ q"^ݥ\-Rr- UHCK3vKBZ)d3:E|REl$ 33 ʜءJ pSy-\RGb(ãuI@9KFS, q ~ S.Z`@Z 5F<*!f^%Jx~^2|P;l5+S*'S7T%)Me/*bEk #l!3Jl<(rJBKKMכB1b֋i:aL.֎lH4D.t/adIV>]&(|_S\`e'Ls +r_$4 {MhD:I  A a`*9xϪ$ *B1cU).u ^aB c K&1R@A%"$ WIO5Sނ JB$bUa z&n͠d象C¨=@/f&tR^Mj,50S(Bkj,^"%k)ԨhVD7дԞ؃:5c"cTwBڠN9mX?+jB[gHwpoF@xRHf%*VU% {{5Q RB𪅔Z2BITިNfP FPRC[@xLaʠN-Gh8h|:R/Tme@&R-Ê̳v[voo4zvWbTM߸>LMp7ɴcB 0<ʧ0ZuT<F Z*-a`64bg#o$JPªmZڋaЁ""\MPJ!XP܎(PTZck8+B+Cds5h4C\Bv^H9{Y #2 d5 ɥu $%d 3ZN-[A3PϾ0;/Gvx.._YD5@ ^,5APҒ-ਪ0 JiUembvzl δX U;S4JOECC ȹH(>3jj%bYVð4)jŴwbz,*:%zVq+{oXxXxYC(%,SNj29rrRiTPVs5<՝N<)HV2=VP SM$Eжw7ek;xev6 Sn[^s5ݱD\H d !>,Ӣҙhj%ג^n$\IP,bްb')xQgcP4aSZU҆ Є`SDBlGe֠CbeV\ML'qg펁Z0TFVkjTވX&߅; 'A[xl}lԑ\Kʍ#jZ!*4qP$+l lŖSaf!/o:EKy}ufB(. HjP>,Xf0,, b ju*:* !`;bcoE%Jq-ii"ba[-E0, P!,#&3@ `U-+T.Tf9v E%gߑ٨MS6EIf'y{>0RJHL1IPj8FV9 j[!xc4FAtFy|B#;pԒIh*Wc袝RHS-8 @ elMR\b}LP9JUUeH-'Lӵ1- HZԐl!j!aY"*$!" ӴǛv* xv|aLs44FW1%&A PmN~h7ׂJ{ܥ ,=`]{@M Y% "p8&MS琳qRUZM?E&^(d B "̬BB"lkNXx1dwum+ŘV+89CHA Z0OggS Mw*SUAeU<)6m*m+;Yba9hja98M0UM'HEVcթKA)ċI-٧*%!M;~"좻 Dlڝ9 U8N4qV5N{rl鄸!Րʡs ײvזCܘJsC{i{5݈YFxZ8{ G$V}zQt˦vv g@ $05`;^%Owr nٴ]r->Z>LehT*!ǰS*͉Vf`TyIfEg&ki{TLsbag(u$u.{hDžAa"WqvȋܽMCv7_G3SZz ԢZ$V5Mg%+F9葢ڝ{b< '%d LؗX=_L[;ѝ1rYKFXgL9sJPX1uN}:0Rr`: :LTcXU*]0L`A@VP d/E_G^AcС:`eeîŀHFpteVU)uiI4(k֒$S.C#uH"FSضm;իtBZZMw8_Kv܄ 7l@I *]CE)Lr,0CQde0 L7z9(t7qY+2tVM$)+{9' _!aՌ,ʇ@M6YاP\;v@~=9NJ*Lcg-`V-2&(ަ&1&2tnPF.iaFhqYq,deeQA5PYx#  őmYUYeAIJ,vЋq!(`]e]l6g!>> vmYXk.kag힞g!cuY5UU ‚=3y233lL\/||||}|@/ͼ,,``lmms-1.1.3/data/samples/drums/bassdrum02.ogg000066400000000000000000000155761247673406200207040ustar00rootroot00000000000000OggS`.gh̏vorbisDOggS`.g-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M!!(`x%|  dh$fu4s AdV$g-jX6-CZAWKAF1,[FdCzA_+Rhp-_=h6$aWD# F BALo/k $8 툼Ӓac;6$$ImH/9^’@@XZ\W ,!M=0|@Pȃ! :쀑XiHB*# !B(((bV֋Q<2t[l-g[)E. ) d,Ojbd" 9!4K 8^|W^ ph$f5K(4b^% YBGѣ{U*edj|*u|PāXX6~Y6zl&'y3+ώ˗e+шd6^ DDHRڝ3 &H4|W>(@^d?%*+"BdE ()`Էx0w0jN)L]) mlH%ء]$!9mE56B `wE*RN@Z{G^y51iy"TXFDPRPP37ٗ@rR>dz[R!AH"CP02\<3P@2@2 m8kG`îy D 1*PF Re~kdI¶QII jRmH¡$8 Im"y[`۠H]?obkJVsox<jKރE (́ A[z1;`^ 3RN?9 zAeA, z0)P0G@0p [GLFou2M0DƼ!Dj5VUE~yt'~Nh022p@PteI(3-VQ  @@"'IJ$,9G8QB;ĀJB@ @@CB(!,e H@!6Fh!0EѠ@ ci0FH/'2Ě-L <X+G^됣 /!G`Cb FƨH \1w9@ * ᥏'7 edؗCuq {)JJ i2Ր &#Y- H#Ԅ54`PƩ=owLA-ҶrRǽ<{%hFbBALvUZ|@:wmh omho?UEU$dpXQC"&&DcAFQ6!@1ؠ,c &a0EY##Bk,–hJ VlF!H$  ^ܢX5bxEp,hQj!Ojv"#g.ߋG>ˌb-G-Y~ܾm^QM;L`{>H$  ^'} 2ꞟiPyWJ3ϧ X ddrA3zZ:024C2e4;e;l-kFq GF ȉ##6 0ȕ,T5I1/D9CQ􀅣;qg7Jcui?.n6nm |ARҘ])By8xIF@^'Ceplmms-1.1.3/data/samples/drums/bassdrum03.ogg000066400000000000000000000150521247673406200206720ustar00rootroot00000000000000OggSa.g5vorbisDOggSa.gsT-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MroS@=3ESr{x9Y&A,(ÛX^,ˀ]%C `Yf KӀ@CܯZXXd?ޜ~~+ %`VgRhNa03)SV `aTLk4daT@U`ZGbEx$LlL$!IĘttRS!Dw1_[l{ۙǍyE~0⹠qEܢYGEf##UT?}KF)Ou .fj3QÀ0HsN ~u B6’onAPGTGU tX ÐȢVTA6V C[ [[DCŀ wS rM@Ej]GkowMΩe_:`}9nm`c*dg #|Q^pk3 @?Fha\@5&eoYg2A̐#QUUPc0+KA$&A, $&P *pHj9Itvf$M9*XGJ+4(0 l9)(I:ڶ#o̹e3iǡ.63qx#?+#evBx $k`CsC f0 <0E@!gJ$ BDFD('(BX@&_L(@2`ENfX80~~kjPu-/xԠrd[^.Ȼ( |L5Xq㨥cc0&B $`CR+hYt2P'Ș`"i% )\,zs찄!˭+=lMJ_PqS 08oG~7-N(n Z-Bs>-c4nC]/-j @C X AChL4&U-+)0:M|H"d– crQ *ZJDFGhM#*e0ӎ&ucؙ3K+tWy)Äb#7C,>~ |aT ^g*BJD(CDIDeK+UD#,^В$~)<$iIcD q~>]e[?7~>]U[?wR֎d#An|*c-j+$C!,HlLgB)$K)ۄ'O1 0Ck++q B% ( dX3Xebv'x#Ȏ^`t CjR29Ԃ k#yLk0ׁ)׎$؀sh*%7Tɷ [$Vvd2xf3"0֪1A-OXי8pu.!& F J& B[BIE!&#KXe2.f#S \ 1X 1/yk?7iyR{8jY# p"9Hg.A^Hb|t(v ȈI'yHBj Fmt¤:H&l(lN[a(%P aRQ@*F!)E +&l;( 22EB5X6SJcR[ȰǬSJ 0#5`8q`rl~*.T5]t8O4q1Jp$>.6#Q9p ⃘hL$>H ˜"DRBSAQx97dq`>& Hˣ0SF,O +P̐D@(HaSb' \-@\>`q+YexS@ @^'/Ceplmms-1.1.3/data/samples/drums/bassdrum04.ogg000066400000000000000000000155021247673406200206730ustar00rootroot00000000000000OggS{37ղvorbisDqOggS{37{-vorbisXiph.Org libVorbis I 20070622vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS'({37XLII?$8 ̔j;AdKX[[ @WVK׬]%)4j];a0$b??adUÉDHfpҭT"ABYQ-z WUUkB\雺m"n$;Uv =pommL9 U]b (- ` .@ !Ű'(<0WAyТ$ah DI 9=-Zqq5l59@UU=:-'TFǬğ ="fsK@L%J),vSD*v SAi i|F5Lİ4 ֨׍nwr  1wkt9;aD(ZU[d# f\v_ oV%cd|Ɇ}Um`?!D4Cl!!"0#@݌ #rk~d&E؜,L$ iaؙ{CTĺ"VZXXIl+_Ԍ֫)z Z^-1Q@Ш_,j" `-b1Pq_[`WaXiwu8"V܊O^ ޴=Sp#ApxNteA7eF@&:#fvpp `eZ{1b*6 igkG:@AA'ƠXbؠ""TolƐ%UZv{{Q|)MVӻde}<߆r@AQ@<@4ph845h@*>\> a"81\ތZ6_6b'bL;x@s&'<&)mKY4Īs iV""k 4-ptD;4@ qoV\]qWF!' &,VB@s@--;y2`ڇfz^3-|YR\vȩT  v6`LV D9 D*aͺjEEEM0Mn  lPDAXH[%Rkk2v(t9nիADU: 9~ED4 PA z=@ T@A~]WnkI:2anב%7_6W<@bLN#*F %xbYbXbڋ֠up@kk] /dbY'8\,ŢdY"rA8)iWXbc eFa*VH@̕E2帘PI,Gh&A $s39#OG_Ji$ -Pe(&8@tJpSmٰT+jºi )UE@?lmms-1.1.3/data/samples/drums/bassdrum_acoustic01.ogg000066400000000000000000000114531247673406200225630ustar00rootroot00000000000000OggSe T߭ovorbisDOggSe TOd-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mϒ|{&f'JF!QÕ-)RS$bH'H >.6 + dd0{ކ=46٧|D,DUQFtҲu>F<0aTH0XGj jYlbƠH4&6 D! 'H@ !R-Ō78%C04"({֭A+F9@9!B$Hڜ2(+;xROG 5~IXݯ{7Sؘ9 ;=Rې_ʕqbނ|(WޢB3a8[j JTĊFEF%&6"E :d))PDNĐ ɄpL`" y{+;LJ!Mp²H&b"`keR v㞎'xX53Yv[8gi\eMxҏgsS,]". X ) @9=~.e,]"W>ϵYOT$7}0c CQeFUBԢ a#VCEU$+'01  KBj8r)"L;Ty 7^c9k- V,eaY9 {~z unaAmZw]}{{B>qw /'[ @Cܴ`lmms-1.1.3/data/samples/drums/bassdrum_acoustic02.ogg000066400000000000000000000367341247673406200225750ustar00rootroot00000000000000OggS .}:vorbisD`OggS . -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggS@p .Jε!%"%}x~y i<=He"^ /vVƝ 'ӊU2c9 :GKrͻQJ&pm\㳝Id~l [L6?k){əňFtMs5WU_c"xplW';?=zn{ѱ P:OmjD${fS˹]/^x6 `)?%#J'bb~_BԋѳN p~CcFM1hYTeyB⊝KYˀdrL;O8x,yYWBY{k!g zp wԌa_5=r炼)z$ge~eQ2__j-fYI(iJ53;tJF}wOTK2I e@]njv 2S.`ӝoMK+ӧ.η(5x|[(LsdD -.л~u{[}֒dݝkV!XEԢ~^.dy cHNLХյeF9)_aގwMkPtZ,Ѣa!tȬ-Q 4dTk 0Dڮ ctd|m?>ݗ:WbG,eEp "^˨'Y|.bY0$MQ+j E`Og+j7fcK\vv_%d}=Z¼Bgv8>r1bc7r`].(ؿǞayYO2= e.BrU)ܖ_z]Xa}xU7%I@jU2Eq\/I&Ox~PLMdPF|۶߮#KwŪ}3TA 3 X9,vlE$%${vMcC9>wST_f ̱CZGjď$߄.EB | tLo+ޜb{+4.J,-m˷¸].K;1hoVnZ=FYڝr+uyXu+L<F35_ٟ_cJՉt\oǞZ3Fap05 ~~h&ܛ0:jWgW]/-dť#@I~W4<+$SmL 䔆ީeO7ߚ2EGIEQ %<-\)G4$k#;0}NL,~Yql,67 "HyҥTf˧Oe=~c.5Mɩ##9㧃$=KHǙ!Q\JH ~6PƆoӣ[tʎlcӅݹ$ Sg}MHz:9bT۰KÊvPX\ zۢx^&pWnX"G Ƥqfi\0KdNy >~Ӽe&`XN`m$ 4;;L۾}=pk"I\9 '2l9%C]k.⊢ț֭BNɸЖWX`&Cƥ[ٶ& Qw TF`stE[gjt~~s]5 N@RX1Qxy&#SY=g>x3ot:&wt9w/؋h6ǯ1V~/J-NQ #eV4/> {4M9*Ti} |ȁ @>ݏLCs3rTLz{ΰ?\swUSu(./n)se ǣJX5iw~WIi);8s&e!^2QG2~cŁVaKi4E!dPE :VNҴ* ޛ9q5mva٠wڒL(x-Z_L#>8)b3,|T0DU&)#vI2xR+A3 tܓp%^ce|ѵlۈl2Id#l- ߀@9@vpUNlbuTc^tB<d$ @ϴ&eٴ= D`_(X۰tjf,`:RL3MX4ǩj{ںCK4zqanJRC3m!L"X[X#1ER+ ׫{Lf7[׳nPڠ؝kB4( \fuF5 bI*Q8ƒ帿(K\{n?;UĮNbtQhמTl{u7;6T{|F/y'u똱M=Q!"xz?BR_EtRF: ~^Ζ`]gwNJ/b?/NeQUsFY)*{ُ;#wAۓl|H_I7%morEudtيCjCT5L`:J^{mn<%u팼 R1 {95߱SHxwaji鱄kg̃ȰU]΃{KmʥtZ 0!wc^\BSQVktxo΅6~8qR ~ T4u++ p~0 z:l2=".XN'!2F ,4Uoo6p>uY "zM]i*%t&aVQzg&H{ms6SfM@y&5=ѷ1NHV}ivj,2Z(3Y0wyꋙmR`K8Y{i~Ro% xcAXy:M*7>lp<531 _MσY^gBΤor?MuVHvPm›I*/6Z \@IW) ջ$&6\'{ksݱ]X1&,5ebj٥ؽyع9e3GrfE9>b#"#' BmcD~vz^8fDDڬmPOEof` ޚ<p"6 ։MX^ֳ$*/UQJE1+W<:*3ΤP&QXpZdENK6u+aÓF0$<+fTZ|k/Re{k! a^L`e!-ZI9d՞IcbW ]Dq<2pZ֫CNN?JزwF!X4Bfcޟ0!fQ(嵜pyaI 5$ xsh7=^xܑwQDGՌ:d ֞=eNrLʠdz̾@t%wؔQvX)Dh^RglW{Z `ó3 tOggS@ .!{{}z~t~|z{{v}q}>Z7f%Ҙ( ]ˤ'.ڎܱyﱺf&Ϭӳ212ÉXᦼ0NC|!tVbˁ4T5rL9m(ev!]qىX3{m3P`^##DHl.wN!aHGaߩ}u c#fމ)oGT{YD@\,Msfb םAQP=805%%0{V >[ jEV,b1 )mE鶼G^%Gqݪ7so 4~-v,Uw܏lnWx]:c.f IQlSr_,WCƘ%7Q91ۘ(R Ȧ^mUm)&v.ԤC{m3LD ?$I${ƈuhu@Fcͣ,hbzB=PUL&JtŅhP6Ap.&frs)_*&T*i ޚs@vy¦D0q{nF{ꂈWؗa G\S#Qa%dkrtn"̷"4F yAp&?_?WB@[pɭapn@奜[:XD!.F]v=H *Lyxfd "K )췃J-.l1M!'O7gGlFV)}{~f#O*4?Vg2uj | >Mؼ"\-YIL 8eq rcO{$=lg½ax -dF$tTW8!lވNрxbف=41CJ3*=0LB1i~hA D`.$I&I|[gf9߼z#ּbŚvNafW[W Ci43AҨ2aYarN,׫)6N?BO{I-I(2{i3~ hAlb(C*-qAX\tFI=GİFKWbs;*Rة] "}/Lș*E4ͶM@K1̯$& {j j>6>'vàU$ 7;ᔄ'"YOl_e +fTKKǨ`-NE2ob3F(Xb\l*3&x6:m* TmIX>eåҙKm,L@@$TL_#yKP\>`Z 貤B j`pݽk{4~uN^=W^ $uIMCfM  D”SY:S!2b4Z2JkeTiU5n1+˪j#w88R!c(̬I#.D#T iOZ,qd_3!Qh{k a^m60&b$gZ~i y%oRR99]BXh9O3oFҺێ0 j'[jJG>q"Y61P&eto9E{m! 6{ $ZOcL۪7/ M5A;tB#fF1"PlHsڭ}cܑ&.Z9G;|e%2pj#X7ҙc Ƃ{uo|3R͌HPEw SyQ2Al$QD9Y3>dg|K_#Z=.Y_OfU }d̄ ZLS⡍k@o#Ne,ޚs|2AT" y]A/^5#9~[Ŏl˫86Z6g{m68f°sP6+Ѹ'G:rWnV2UaQNmnG'+'@{j-n&ؐsCHKJ($b$ G?νfz;\zol"}< =r]O2bTFRN2*V Ǒ' @cE%制P-lX+x);d&@~} nnp`^Iu`OKJ*QQ&«mc3w*-l?.$9icvԘise8zҀLH1Qh/tQéJoj 8 ,Hb0j=Atɣ6Ҋ>M 攍2DM XbOޚ{n n^p`-L'HJprnsj?ѫ1g+T LѿdFfX$Yڸ+UaMgqbn ⛒p*?=.9]fLB=i"V a^!B'H$I.rMK,d% !>lGyֱtm :vdU^*j֮6ͪ吖Q% NgPEENH {j-n^agp`j2I]kBx5UD쇘E1]@t-. %8fiyv@T0$±J)=Ly_3=0Si['7_|TޚsmPh6p"hD(򒨾31Qq".pqqM_{%mc.`X k']*[lp _uHfv>\vpqd*\Xl 6d.MXǒ$@.q@L1ŷTV2]ٚPiArD]TܽʲWp 7Ÿ(ݬUD6= |/@V 4Gz[4 {7`C!؃8VD'gul$$Kd:c{ 10FO/Nh>v0:X23!`M(hW2wYgLU5!6C b~{7:T%G^;VU8~9dr :'?K;BltD:GSsV*mې'!`MMFވ[R;\R!ab;WDSvym+\މX g}iwI]ӫqZcLD[YEm⎏qyir1S7G /[F3p33iؗpsU!B@5!s!N$IS`1rjg~+xb#? GWVfer/wF>jI& e-(I9b(%L=r{j07ة1 vIxIY:9L2G"2#m{GGf8ZdDХ3 G떄漚v͖"LNDz.k?\r00K 0~s.  JA N[*PU ܍"$;8L^#ĊKz$P.`v7-YaA. -If[*Tq>Ъ>2 }ݺނS2P\yNAML(D?=] vjWjft ykBDDf)G'}@x(SIpo$Ҿao u~h$s 0$IǙ -ġPl,/Do)|J!50Űa2hHI< WlݷIV!Et Z'g)aeL'ݲa(t(OggS@r .I#|}~}{{yxxv|{x{'$Gb~;K0 10&Qp|zv1-no66RJUPj]ccQKnͺ)56p6ah(?n_QCN!Zb{َaQ2  Щ$S1=x:P∖{Au2P5+tM0D k*(UHb7An[Ux!CcbہZ@ 揆{S1 k^h'Ye2 hl* pGmT h 5aRU,{v\HO$Qpǒ3-y!>)^~ ză'U}l4GeLYU~ i(omy^ L?*ay&_VV<k]QގZVXLt`vN̥E,{K&I"@0m%7]3Sj呂ޡmGϕFJ[v'ި5`PP6'vFWV#$Ev\A1& Dk-e̸͉wSbuh]Ӝ6oW%m !(;7`bu:z}ku6G+Erॊ=&/Jh]%] w ~{ d.`/i/"נ_Ǝ;pPx%1W]ڙfi`YmvF*#ggݔClnn([7VF+R Enh ~\t1&Q,vM !i56y >~{2Fӑ,0[kti#^+M`ed5e;=&бKcɥYgsJg9E{{j578IWd$Mcl $.FbCv}p,WqO!Y} wb*. \D8MA P03:ﲱ4,]v(! U ( 6{?~&SА=tb]Cjg1?ج6yt{S.ԋ&Q,v̙NO3[LW*_WC:ˢaBչ =I$X 0|ҔfǮ8^7W&a',x 8Y7eI'k!mG5,G/rgkM>._PCY7Y$ +k-?Y|yyybzȽF"h4<^(ln+IBiOã;XRҝ|A9!1GaQeAli@^>f ̀=el=?t3tﻘtwU6Œ 5"ˎu23KGu2yrʳ36Cp@[dyRv!3c\|5nc9&&pݛ6$40t$?Qwb6 Tk8E@Zc8·%H$⊺"jH'}l![cqMg*g:̞Lji@Ԅph.UwE+%+nm `~u+w9N]qL;jcS)#w2J<] qmwsj7cJ;8l6]At71n+yymf,ge{wn{PBnd ACS;mסPl[ٮJ0qNBoHUJ{ܨQm94 ȶ^GI\t*WLHU2q>"t 4#ks`ĽmDJTA'g砝$\n-vrN2)Ӝ(VƝ_aߒ˖ǝvlmZ@TV07HؼR@ ۊš6n#& &441鰅qFjYq5MEzY7tj,Ɣ?!!EH9}?ZGuk߽*1M#"W! 0 ~(6E敦i;(*w)z8q%D>>jt@}98Z@1HjCd-g\yd P|͊%TRs_(Rލ`7fs)vU*&~(l0at8K/ШvOpR 7CSGQ/=Pc̵Utw*`, `cft}^hUܳJ6iP,Y~.$<ҧѐH~>4E+HHת:WOrF돃#~T1\>ܪ)_ iq",tk,q-)£K!-@&E*+:3d >>]D)rҔœn ;JY0ue~(٨6QJ ilJ*6ƳW{s!3G z$ձcoS>9t'}UWuRK#"ev6?xĝ gB`%ٖwœ.PL86fd;Qk5emydy0T9`Ƽɰ`8¶Dm{"j/(4}7;D3cg&ii?m Cf?6:FxFEbZ־"Hl}8۸ymmD~{Zc@뿃ry q+W2ֈX1B&D(枑O% ;2?1@ ,Fva-]0Ho74%wp^agbhBcXj@V(( n|n6֏:LfIXb2HŒ6lVLT`<'c8aq(ָbZފzˈ(\b$|Du2AեPX9TVY`mAxۺ']E91[f1砂h8D; Zmd A(Ng9bϏ~~8O }_pJX#YZl3:zЖ˛{0j.L7 V?X0 tuj&7L$BȊ p4$ "F|7Y|V\÷=bx,ƼJSsiLkn$dctПVWAQ:{1ZqT,IV pRi ĜBAz$=)h^v~+;vS?{zQ5ӪU1M´i! 0Դieia6 kK bA1A$EEpkBD{{2x6 l5ZIѡe{e_UZ$`q:^_M?"!翷»quqM&k %3 .@ 7EyAPА^vD,9? Hܲc'b! r#Lp8:4ZUUUF0UôaXmmm%bӆaiV*amMA 10LSnM}X~ט^ `{ ,ٚډǮ^֗xVȈ 'Ҏ%C=V(6tm$bM6I#gHr-Ghr8ڸq5 6 FX`>DHv?gN;ra3/{zV) LU 2c6Xjڴ@0T&X&*Pa, YQ8(5kPve@7MFʹ=αfldT@D 2 SƒzU7 k_>0G6uﳍ/`Y9 xfO:9$R '4" a,Fv*HAtTUUpRl ?`׶魍̦-6,#ƈNE^a`wF>돸Y 9ĀĘ~p[qnΪ w>g .\(q\Ylmms-1.1.3/data/samples/drums/clap02.ogg000066400000000000000000000135471247673406200177770ustar00rootroot00000000000000OggSj.g e8vorbisDOggSj.gKU.-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MB=7>8:97<,.,175ARqb2Kʼny ԮL5fZIBZthh%#q- !Z"qqiD[NY*qc,F2Z0Q1")b"i{¥vH]⃨|1LSaT:uJDj#鐐cD/q{ L>l%&%k$Yxl^dGE.$j"bcoc R$LH& ;9HB#'DH4IYU'N$,B",%pv:p:  !6F~,EYt\Qڨicq )D2!F Hb v"& $Q8/DX`Ђ[m'%`g^VJNs+$ )>a`%D__6;Qt"vr=S}TPoaɑcH`c! tD]8 rq* #1 Tr&qj>׶P2D:t 3uڹә Jy@kNg7( QEEQRNSƂ`T-*vj'ňQ¸ *6 kxx,!͙'Mix/^_ Bȶ>'Iȶv9X$@Hzq;s:~V3w/^#RT}m7:EG6?$6-^mvpL+*1Z!yvlBu;_eR`-B2s D~K!9x"- 1FCFUg` D ;A4J >QbJ؊(h$";&HHrt9/1Opy꿶%,:L(Qy ,E]Ec~Wđ13#tDF1M!v&W\zL"QOEF\q֊ [n@QX1a(TR Di-Y$BZijIN2B8+ hAl,0VJH$^1Q9JQH$$>S;,ˑHԈ# FJbJ pN{jFJnN7`ZK4)-f3ð̮1 q{:S} "Ҹ&*SB#Y"0H> BR!9 L&A+Ȝv&ߠ0Y*cAa`h\4.VaF H1 B%p|BE$A,c(gtJ_eLØ8qy}_ZӮECC@Dpβ(;fsz1{'6U5'F-K;As[gb]eQJЫ?=Q6w뉗rHDd6^g ]޳xy$P.wʬPTE֮ȐBgԆa04hTPEcUZQؙۘV[icI:b)zܨxI["h'Re@O9ITlhݶեvCUBE1tc!⼚F(z,3ƅ]տPa'3m>p2I $7{\Iwx rR6 PvfMi\δk?% [;1-v$d:RgJ;~R@Q2MĴR1RDY*g#d«l&C aNwxŅ+U L9 7;܅ `O"O<R͞U{9`_Yo pcZ(Y&[)ݑT()3o#lmms-1.1.3/data/samples/drums/clap03.ogg000066400000000000000000000131461247673406200177730ustar00rootroot00000000000000OggSk.gzvorbisDOggSk.g (;-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MT{U p8Iw3l)E4W=qWӏ&xD\Voa͗ qO`GǛtSw,[\8`'NXK lv׽Ia xvޤq0C:"bTEO(/HNl WF%S8&RJ.ҿUUE( aؙ[[%V1( ŲŠ50r)SS(ͺ)lmms-1.1.3/data/samples/drums/clap04.ogg000066400000000000000000000170141247673406200177720ustar00rootroot00000000000000OggSl.gjvorbisDOggSl.g$s-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MB5UD6BV` VEUz䰉!!v؉H$#@2: VPUW.,aMXr/ 3.4-V{!VH|ro1`}U\4 Ux\QV$Y`KXkD"v*)*X4(TIBLc(&"иUxr YNHM@Ĉ`w] e*bX$[WOړܫ'LjIcUհǰ3Ѐ$"$0AGowZ_x̎I 1iz3EfTu0 b=DT+`,%wEHʲd 'Yx$jE ZB̨cPXli̷d@NH v?/ )&H0 DENx |K4 vA¸ ‰7X$$V$ ѨXF,[hznyBӋu mBA 3 ؉XL1DĢ {IdR;u1ș*A<_xJ#UcFUT5&6XE(@71(TN"$B GH#:X>0X>,(UY"ZiHa2, aT N1b1Y,1E6VbkbkQibB$Ԩ#JD!#+wy|dXtzlYGY}~^$ X(Ѱ*طv1.pw}<@j1{i}sfy?ozF3ΏG2t  bPPR!I)l>X.^3-*Jv/Ǚ&z -  `012,VQA0ՊV$aD11q HI"F '}#7ph&vLO|AثS3^ӈ D,aZXI%& CeF>|~tCm[sf;6]b1{6{x[{ІݬT6-|&~ve.JD^ݳm(yqw6EֆaQU (Vj HLbAbAb V!D &R2޽Q쌗D]KWouWo2h" N OK@T;)\)l%lFr>=s1M#8 ljܦqZ: tiI`NxkboDDр6a'N9N9>Rw Cc(c))j >HL86HhT1EbDĉ`Jv&3L>XMK(> ),Ÿ 16 bǮs.Yy<>LȷT qm}h7bٜi_\>o9ByONٔw(p>'ޏA`N9'@`GB ca ? T`A]{OڮKmηf\V^__6x!^'iHP}zi2AsM@ QC`&SESc,;JK4 x!Ll "@w&|oZE$0D:nv(&$yųzG-pV1` 6&i- 3inuutԷ4ۑo`yi)iܱ;f3rxt&m^D $ 8'| .Oj܀,tbļ0"0lLb/1 )*EI0QFy粀D@Y$cbr vRj-uO#m.QM)I,u|պe\8_.?n#Fʏΐy-v3#.7M,zEiq˖6p w g4#@8>' s}>P>;[0ļd,*)@ q:IHL\4&."Eob P)저Įλز%_Hf#rحO拜|p z mS+yadhMlSfS!,4qY{lO<* 5L^.#F$8 p' +} qҰrg}QP0 Y0(#Ec1hb ƆDh46^aL mL2R mCC.MФ|qal3姩 4[DX=NͼD;8|&mU) xǚoW-SOM7Q$@8& q FPMn{A;['00" UU&>*' h$ &>ظhLLԶI[N1:EKd (@_DN9~0 4 `mp)K'uRɓ:Y 8aCDLEU"Ӵւ]h x)*E"vġ`De"+$Bv9_+{I."#Օ @"MK@GYݤGT^=Rvv>+ JB],}f+̓`@>y{% 9X 8A '}><}]xáڐhT! SldHQCP b Pqa(Cl(;6" Xvj%1Ki27u/,'z#$` mdgէ[-*K9ڙ Q WDþU ۙ2 1қ𯜁`$$}` yO^g2`* jT 0D,*FQ ÈD&tJdl@2AA GDgm5 [&矄J V$ek1Rҁ($@b`AȀ 5cBdi}OE;-$H ஘F#(`TE Jo=_=忘(BeD>'e$Uhچ9)'D3v:\z+RG$%,fиpz$6bPI >&&esFb",-˲@` B,37ŐLle9VbYeY( `YPL9A ާc昿#½A|gfx {L -c{ lmms-1.1.3/data/samples/drums/clav01.ogg000066400000000000000000000075171247673406200200040ustar00rootroot00000000000000OggS0^5LvorbisDȯOggS0^5<-vorbisXiph.Org libVorbis I 20020717vorbisBCV R!%BJc)RR)%cJhs9'A1.bkiRV!%S [hRT)cRJhs9FsB'c.b[Ic1&SJ(c1cPJ%tBG%t9c1"[ŞJ魅[JR*Td!|F[Jc1cdˁАU@BCV 0EQАU@Eqq$G,BCV@(#9dIi'뺮n۶m۶  4TD!db@h* @$'IRa,&IRʣ?ɍdFvU;Q%5=" h}CIkRC,z9'x,&!5 ( qO}/KX @e@hPjUU %`lmms-1.1.3/data/samples/drums/clav02.ogg000066400000000000000000000123051247673406200177740ustar00rootroot00000000000000OggSm.gvorbisDOggSm.gNG -vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MrJ$ mSfZ^)3q-L"-UCF,d)L߱F&YRR@&U'M K f0"D"%D`r0#јؘD eYV!9˲ (oq<s ='rPYPp'嶷>}TIׇ* CT) $;&HLb8Zrc+C4&JdB1aHYbĀD 9TܯjL0p& E؋.o($Ab>n:7( `-DO_9 ϗAku ]dBɗzH@ p'>YIN"QG\U!2U%` SȖa bQ05Vaa&AɘK!ի2R$DԄiaY mj @1`T%٥" ݹ xAPI{E1 40֔rZbqc1LA& *ҟ`fv1zܭKg5%hrWK& QagK ~'}?/I #ULѨ"%Y (FrWAP!apBִˍe=7+Ay1 `R"'lYdG`TX$IVKYuM&&tJK!\D&cBrBkSXb23Nne=$TTB8|,p15@3~':ҷH~[$`zԨTP*B/YZPB8pG#U2E^gn5VYR (/®IJ$LhZe X28 #ClvZ ,hS8a`"2HH_ۯ}:JbP5;q>α06pC}EO@U(NA>'/e sҿk\.OJUU%@$ fǶ^#/ShAQ,e], pbj]XNdQYA^ \Ve3==PY.%ke  sv/,|w\.s{x{gw҂3@>5lmms-1.1.3/data/samples/drums/crash01.ogg000066400000000000000000000441761247673406200201610ustar00rootroot00000000000000OggSճsVh0vorbisDqOggSճsVEr-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sճsV$ OD 1(*|H.\]BBX@ 88'ST@  "" !)19A@HRh8:<>@BDFHJLNP@TcQr.7 uXl 1 8'jRÙ{8y~pN&g`j=l6u:m"@Y57luTdQV3`E23<3 g~|83痙GnCH9ju; D?\t4rwu#5HZ\HV$XZ bi2iu=< ĪϔLNńYyE a~2!,u'‰`Fؼ["*i&8׻呑]W%g~@6yhU}x|ПUk~' FRQIm鶯[Ӏ,PP'N6@O1_I+?\.Z%iR[aZ QQ,j!""`V LdgDg똦Z1 A 鎻_K6\ 1>K@,DL&3C~ J bUPo˩+n-Gɔ&Lœli>pnڶݭq k,+X:'_0j}BVUrxY߄̈L!XZY&u0IFqk$ %@q2ŷk0c#s9qTdrqqqqqH%`cQVbY baZU, |s' O0"li2 fCv20!so&ol0$$$_3~*C@FvAʳ`W]wJ|I[ƆR֍R"7f7w YHVPɛv;?CC$+lnݺΛŭk8(J.n@jiX DZ`iXDQ||p D80g΄ Ahf7 <M3 <6$L |7 @r_#k'3y:6!#}@>-jZ@.?Ж:}ORBda`x0GnETR͢ÕJCLYF6GfR9\K\$`=XTL+jb(US&j!V :;J`L~ L*Y|*@@3IBл| 0},XS_sӆ\33l֠ 4`lؕ*Xѫ| y; Q[kgE?oʼPP&nuk}jzqۻ9 *jG :ry^2LRDڭ`-"V-Vl*6aXҴn)mTTLW@|8k@poBG Ώ;|~23EPK0.@c. `_@H&rSﰙM 0@p@ 0(fy]{ 9 lsUًZ+s(RPd3@0&F7DNOoP)Û9k<B `ܵKkIl {P7jډ5L4LAQ,Aհ*EyN DQQ,m bd%s( 2= h,l0s ]44Th% GP@pX2ʆZaxwEf% VnWiI Q>fNP(E٭T?4Ji 9]2,-%X^01-jQ5 `XAĊ `sU+Xf: sw (C @`0 n-@&$y(qꭎŇ$4~=2z~d2 Dhr's-ĥӥ5rTeG3;!E9F7;]D`?mBf,M2"bwu X׵[ɭD`X,bgj{-V UUj؊5K V @U´Y,P Z냾ј' x kb *uE@fz\:;- <XM?Л 0< {%Haw,GιZn !4hwv8n9<=1 2suԵۼrMPTUL3Vô`TUfŪ,EU,U5Quj0ON>HfaI>0y~_l2s܁@@ ,ҰҮ7 `3Bz%25<d$ X|ͥ@4Ǣ$hh8pb _FolpF~ܥӥHrsNN#˳C/$#C2p1 [9r>'YJi&XM[{l^3*jU bZDL1T1LfAd s5fUDDT @o /a Y0BTEk 0|f>p0!3nw驄3⯧eؚN3aJ)D ed|& _XCI7ҩ?_+p9nڥSBV)X F\g$$ɵ Z,jgV Dq /R>P؀|uS&*ya0"OϏa aXS$00=@@x/dGN _{im`XgP8;EL6D}-%2F7;EkK]%=NyWcoGDHY,s#Ae uM*עDB*c0"bEfjM4  +*"5oNj f7V!6IvTAPfFĞcK[*$eJTXc(ukZP5,-TaiiuQL0?(" |~leLIxoT9 PEnȐ.fzѣg3?{!3Ky$5҂ou \I@̓ P`_e~7-1ҿ¢~iG n}oBϟ0dlDj\$ u @b؃j1,6`XXf -Ҫ5y `~? h!Ü0͎R$,0m+om$ɇ}-'7F[}C{%)<@g!9dIF͓fRu)B|ig'ҽ1-D /_:اefN2LL r,eY5Fو*^e8,+e+͚"cj0L~\@/'LS3@lP ||xPy`w =@fC9QF Шwa? ґp*(ApW̜̄&@< >fGׄ[=!snv[kuyhn !; LQ>Ns SR I1 ͈1 bEUQXjUK"(aRt(`a>z0Q sAo`xߐ9@  B `߄ $H ``* +],H vZXY@T 阅*̴(*a]vִfCh0P #a$ *~f7هv2wf7هv_2w nݺyn]Rdr2I'CMEaZ,[&VؠXaU+VUFAT mdC9| 饌>dfj]@5Tlythk (90 ^! #ׁ*}BG4x@K!կ1*=2 'nJ˒hK:^G6PM5 =,͌mzu3 6=clnieiCC f @` S+7D`'[À pf>0 x(?|ަFq!2@gq0 Hdߦfq!A8K@YTfv.ys>KEBQH"j'*ji`b,Z5jM5 UX(bibŴYL1-"dByL0̜d9 U1L(j8 ] )x!23pLc `\<k lpOh?Iq?BN!_&9b |ޖSQ"W,d7:%5XCg X+"ztV..\$riUPND3,ZRDLæZXZb#m4X*  l<-9Cle B*Pda@1-AE3 ?L CD+1`3a=P ?=*a-O%p-XP!_r@ ^,M. !;#5,M%$B$R6#[׮E"uGPp( &.GXk F5j< Y 0l[y| ! I@Sw~u ~ƓaL 9!ď O0@)Lr QQ!OYL!xU%|2W8uPy J/"h[R ;^C  p(sq<bvFy7h1;@gMp#syBAIIêb6 b+aTV,3I39jk*"MLQS@ր&k4 d~!aa(j)* *Da&S$INnN`@H3pf}wsϜ(7wTHp`>,ސDspq> I'E.ݺykפ. uMLb[A0T0MQClP'<#WhєUQ5MhUUld2()Dh@ve61 -]ktZ  1*Vfpj0ʹ8eBӊNzg&T!䐺AڅEK``a5#k}Қ 0ZUMSDTUĚ| Ú hF8=Cϔj Pp|G@H[ !|ױ1a9=\ _a%~be2LHac3M-5ʗ5~~.%`2>W,.G?%V1Ņ*U[y-1f622.nsڵkג$RR`bZZ-[mE706*""S@"9f L~33`C M9  (bbIƧWYDԷvŹn aʧ}Q'@lf6{cuBHk'GaIQ~V캸#uBH..d)-bF:`\%ULnE*R 6ٚYբi`ư1T,Z+ Xu+&615T1mu;@=}JyBwF yT0}h9S*)  γ@ 7h;CbAZjLkKrЄ$ ZOggSճsV]q 6RJL]VBlmmإ88bCADDPT;[]dfJ$P 5ZUkM,Ҫi*6X䉁aMUiav  Lt L~s^XXo pE>e z#2gd``268!-(>w,4SyU[;v 1kBK\u3%Id9 >iJ"-Mj# C LVlDE yp] fd "`i!(F#n(1,X\.Ȅ0 /i1XU VoJ.ffVnFޯI agnr0䌀m` d~& V^AgJd[áCkrLD<.l wtTdrP" NmTTP]2RİiɡT@ðjպX5L ]'c237< *a8Ԅ I^ ( 0  o&>50Vn\Bq FC|cM`30z a@V8? Ð "^W ?{+ORUA(TRܺΑõ$)I))IbZ#XcẰUTK+L,baXb) 1ĩs&0L< `݁s>df@@ix&P & '|6h(]_PPhÃ2V{ۥ_Z"p^6)/J~eΝB":oN`c $ \H \$a1 {CmPbki  Űb+11fժX _&y  # ("d)2 AB"` 3?!<_3@e` T+@% '`R`0䔶"ے T<2 xȂAP- Ӂdnh:ߐLBl >6\D< 76T5U!2T\瘤ԅY E*jDQKĦXAniS+U+LP5L1lְf6̓< 3&r ?pf/N`0* h ߙ<`"ӥB \0RW<'npZC/2*?v~knXAF_9SuSHK~HIFVKvaR.ɼ\>]Ubjg XUÊ( VX7'(*ER@i xP+"u0'd@^ (@Ƨ@\y-iO/h@& @!dfُԐ0 TV$fN1cDF HRy(#>6,ȫ+t3BulX(2S{WܧFP}z,3dnsN2ɬ $)p[[+ഋ,/je'E liZZ**հW$a Vo~j<"qV  "J"2$*  @„)vwvL"P%B^` 6  Y%>2fCYM2pa6e pp]v#7.tt!)jȦQ l bdjCbX.!=<=+ amjiEX*`f* * 3q 0 @2 C>.Yz@8^$vXǶc̬[,#0 (cd R{  &R= eK` h>˳VDN@bV r-ch&B >6'QXذ rH23ʲfE@f.9\I܅j )ְUoA`1*+rCh&jHf,! 숖Y hp`%x>l!3{[ I>:aB6 0 p 2LAD@aYVJX AV-j]U2ےUN '+ >6,hA AgXtZJb8s&մ". XQk5Mjvb bZ5l jVX1D[ HC 0|p6Bz0y EpY C@(aSd7R `֖EClUyPd%@2nv3J#YEhTF %&Tɿy[(|#؀w >2585,_öDyvJ X,`d&AI.r9ec11Ţ ) PS^A,# Zjf>s6& ) E79!lf?@& Yz>o4 ĤAhuj*b|aϚ|׶NH|y,r^@J @GPH( tP6Mᕺt̂ߔ Āw 0}!]  ~V TuuRTgj*bkYEμTta@fZU,N̜vL($P[-vbbZUAPc!`iʹ"`"*b!361m"#Й'IP`X=.0q ЈbZ,; xaz~0ЂiN u.''Z:2m/,V`c$@e,*p9,q%E<t a.!b*H)dTYU#l9Hn3."u!@1&5 (bʨ`T* "V5m"B$+~d@ `@`@`m5f-@l RCqicH?('2Ê"3Aa7vTzJ o 1,)+t{['Nh"p @#) G #8f,Vߠ*ja"m U p@$33s#)| s(D j1liͺ MD!D8B"9oi`d h^VOg"00A 0ȐHa H& Xmyad0' /`H ɴ Mג`A@PgXMUmƖ@ (K%A aZP@OggSճsVQ~f q``d2;jg?K2 T%@JvrAF*J( (4 Flة*b{[Z5ΰX Dժi ,D50ڌ5"h,?0$@` u768ǭdiY@`>3 ?dBK[,Y C`|._bN}EˣlЯ$˹z҇3)A`dIl!̫kR R@fy%7":y^ ӧ蔧Hdf\9HE*RQ"@Pj5[,jDlQmb@ Zk@FK TTCMZ"Ÿ?͓@<q($ld> 0 kBPhī6qKȓ30gr[ ^7_c\!:qiV;^KW8Q 4s* 0@e Td0 N0)@d( m\BJ(PcҊMX`hnM- KlDA 9'/ *p,3 0^EOf`]8aXy#k65y+VT|L7nFN A#BGK5/a(QTfxP5ؑ&T-̨*zse5T!YAdf@*ʰO9rvTE*IEHV{1 #U c-1kLCiV-@DUҊX`06ea9Pz`w&bRԇgI}^l 3r>R #BfTY]rtOTT(@5Ơ3 R-Zڌ+&bM 6c U@ 80%6R,$%P X3,EPsfr~ VU4/ S)ED#@`h T3f51!@MSFH@F!/ ^/@H $'d%tY6kc@Jp@$ exչ!7]7 ڳ׼LR]4B%wEQ`Pi4өb՚U٬  bf 6!Kհ40-3ݰ:RV,s 90gGЌ2y>3!/5 0@bLՉ˟Ibݚ jX^V9 0o(f(/A(P-Ydd5 2 zV (wKw2  Dž%l`\lmms-1.1.3/data/samples/drums/crash02.ogg000066400000000000000000000474351247673406200201630ustar00rootroot00000000000000OggS1^pvorbisD`OggS1cK -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggS@_1muu()&]d4G7է_f0{zٕD_"^=;Ya-I!>jZ@_(ª1DWG:G%30 -)jՌ㥺P:zV9}!z߿Ysr]HRD Lvoͧ=/>DiCKplǑ W^9ϒK+H^,"+({{|噞g XY[M7e0e{\NXOr&4﹁[4'>z.X&!>.nB=)KEXFN^ѣG3O9^ccV}V'y>((~cay`ۆVj5Eu^WW)V{dœ5kΈ IIWמdx_#ǘո Vw jVql$T;5Ta*z,6)85?xT2>boL7Ho~qLU"e ՟n1")%2e rO9xx\G,>܀ F,υ"]Ap0ZNii*&; z&y>#ҥzȥ'n;e(/˂cVs<~oyR>+z|0;QQwVm\6;>yys}Bz9{hfKg*7jD [y[/cee)WCX*7`SyV,q4"zD7Qmtt%q[2LӤG-TG>st,F^uƩx7g4qrSg2" bѺK ޵"ѹ ݋Xi?Xs#) 2,%2Aߣx%Py3hH}!c$e{׬6զHwL0|}}%12%=ȅ$,Չ ҁJyنzH<? Pԥ KgyMF+t h: $N9TlB(B+(t>z&I%6ban3s1өIbW9ki#)߫ONfڹ.ζɈQ GΓ<pijvF #Gfyxt{S^aAХG̫LҋCfIv%SDw N[ 1^Psv|4š>zzV&OF͆_6;oc *ǗkRی ĘvIφ:GjK1ee5>qt~>Kt 5;Zg=>řvh]"/QB6 $P '=?}`Hp.KO(It%xB>zLvjjKޝF6hc-ݑ#8x>gZZQn=eW<8nn{ٗ(-2ܼ!r> &»y8|MS=TcTD|5 cD-mN$<l QigvQ;>*Ն}t1Hhn9@PC$ >zVAGҡi8v@Myc8S ;W=VR|T=8ڎThԆzZ¯PmQ{T'Q7F.gxpسF#3K˟XLE* rQZo ]6ʦ¼LU{)~zVb¬ '"^R6B7`ޠ[ [IEcD/ՖBjTpjL! 15m.TF$~\~ή*.Mt<(w*Z R܏.#oj)Ʒ@1!adE?ĺlqrZyc&fnn^z&)8yw\h5a! 1 Gzj7[CjuyDY[uHNZbj-uYK#b}&--}F!lV$qk`V`;8Y'QX#Q=#89&_*cVhs@\^z&~pZ$QiyN" IN i#1]T<4ISNH^rAJ3=QܪJcQd&bSJ;)@-zV}8KP r>,+tbi(hОS#fG\\N V|t=ʞӕ~<~_ޚ*4v]|(F(z`7:O.A+]#}"WB*;v4lNoWq tD8I18:h64G>z\:8  S:U݉ 4 D!n^߈@ 1bS'}_6̻1\6c|=p|z㼇0128\rhXr_5hvTE,^iN[p'9I\2l >zE|޹ԍBi_IId~;) ݔ&L/%w g^sʥcƐS$oQ:Ιl#Ks1j.9QN5m ,'1 HlZ!O~6ØT35B:]A <@;J>j?iz`' :y n<TQ*7#&mcc=V((W(A݀-r1p٧>m5ᰴ:TP;n9/ǥ뿩/DBaPdL#\c]*S,jĶdB)^kO18 0|>jVqc6탥 Ê6&Q361BTxo|.zHp=SR.lM>UYk1爒grd}ec}ĘxVKxu=nܓ$NIɝ8&50I~ʚTPǃ[1>j洿ih6=F(lDÜv9C1il$mRO\?VUj&i`L̟dk  >QIϲ߶1"4g0H8}R~)6[}#'* |?yKqژukePqCZmRТD2/BE+;U+/U;sC :\꿭A3r6^XjVpYk:e)4V' kw;L&|#1y$}E[;Te÷F-ŬcdB (+ H/O}޻hYrXے[.!p錝!J/ jr_z)pIDwѲ@g >jbYi(`%mM@Q@JE_K.S}Uhi0.&r|7_Xq U&=?q+`b1 ιcs{g8aCXv5J ?n2\U61Q_3eZjFܠ >)n&J`a*W%ߟzHϋ2=joN[ wR}NI1}M?_/)<}ˎ*mHly(M+bUe4&WKt4*u)mȦF4!Rی%_V5z <,V#?@S( CSTAz':R^zU)i4Ob$:&ce+_ЖE9{.f2ǯ#+eu"C'2cksgqޏUݼÈB]jd_тUvtbUE͎q -Ixį X2<>z>1a2dIr+_U@kS)IT4|Ԛk&[GIu}y쏺t*4ʮ 4KhM1O `=Hw-v!k,mhiEgn잇#6a f4 ̖>zݜ`,NriK}@é(ɍID Z&FlbA]>^֞?(~g9UQ@Ym}m`Ё 9>z=̹>mmdiGID bDvNZXR75ѱ>#IDog+qjԈ v99,fw  pi4tU=;lqCUwT#0vf㷰Wo]ʊF \I#d QCVk7D!H_᫪&_>Hgz^ ְ+Foڻx|֮{UW}]/ah* 0\Ǽ5?JK[>;g@پAVʺbmDHsޱ) S2FzQ*VkKO1aw>?8ϕc[,ص\y~/kTGb ;qw?p5Td}iFaoC-on5 |+zPCO­>f\ I VcC[L[ÃѦ\VJʄ L6ZWO)8;T,8P@bzM2c`O}LU4Ь$D''g-C|6Sw{vծX>6Y[D2>p_LkMZ;f1DY? `mIIL9{,#}kЄvh@{8=?--Y @k=M@{qe筆q؝7#}d2I'b̫ZϘjKi`o"5=b 1"|8۶wS%ݎjրDSA~k%t~@fUM5%vl&anVowBjVg-C>yOӋΉ'LBL&rwh{*_S>}Zۣ}-?2Ao ,YW ҅]ӝz_H4d엒Hˁ!ꑼ󋰬((aU޻nbf/mSPr&(g/V!}`r >>(I6%!IxczGg 5cxa{.25|mU*eʈ"jos=꟪6'DM9*-t_v?\$:g좘#33K@\H}>i9w|c@^ ig"-)9I4v׸|G]ɍ(lc{p)gn̳`fU3D bQث(IS,[7>ps\pnn]#wS$Kr|ǑL?kgel>HHhN4-<$;8LIo6}}Su8^Zsv)0qtMn|;l9F?;H5ZEԩ2Yrw6LJeBVbn@7uFu<8yn4|.~VVwB۝kI}cmR!s$ǾǙ,T7hOW\/_n{.㙦y݅ܶwJP?=<|X0 `I)=M?$Z+:7D 蝆. ce6&>ɳpKv-ȊIizĐhHǟIa{zjKS*L˞rޅi,NuMwPuU] tFPH"-LzpZğM]BaZcI jS{DEƢc>ֵ3âd5C*NZb hM_n_kKT]Z8|@[L %ٽ6+{^P_I?g2@Ɲ%r0*CΪjS eSnVf0k7-rB^ ^SO`i 8Q, [B-(0׹Z8%*kl#$H2kH}o3[w,m ޾*GRI v*4csfU-P\E4>1ό13{z"KK-m\-}pe=#Iی">Z#ݝ' JTl[[rzBܹc^5 *|b4"&ñr@t;$>YT[06:i' $v+ OrM@6[ E.d(3T6{G4zRd062~4eg4xgIsغݱc3IdQXӟÓOWq|=blg4[_W,vgR[ mDoU2S7|k~~^ҥg= i9jP&OY272KDF%Cqfv8'- tɴs6c=J/[U^+B@ N|%[xrcai31YiyD/C,UnAu\qVa3lu8R1$ѧ$tbCCWҤ譗6XvtC)5 5>PQM:ekVAȪ*Qx̶DiHrnHZWr֗ATc4%ZG|TGd#^LV`h,KtK:i ujbJN;/&58 ,ut>ϐqϖhU \"uqUL[hKV3/!kFx ]`h43ͪmS@t> Q; 1tajϸ9\NgL`6Si^aL DbVrOggS@/1N>0Ip3ڎ0t;TPcMe?õK,~xO9W/%81Cm.&0{eni 3sI0Z&(^\kƛHg%/ LE _x+ '`@IIӧn%# 4?>v5mlYGl!\))DErN !T=>c,*7q#6]3eu:;]+J=XTEp58Hfo6"G#_l=M"%Y@qζSYO2KrE `@$syʃO=\!رݽln;2%%!mIy߷Jy 6MD>ˠ(V͊ E/,豁\9[LDGĜܟ\lHOOAiv|IhO%gbtwNrҧ9OG|?bmGj׾]= T ީ']4uNN|kV3@^ 9O]?81|0jXhLb:IM!랉X2RȟԵ%] PJrNI$}W*rY[keN0f;c0ٸϯ|ya1k!<345؛ Nbjk~ܞn NrV,h1I(Y썾_{5tϩaz>>=q}$ؽmnp، ɚ&QN嬕.#7{ڦ%hUnkgf}jw:GAخ;O6\R#3:!I\_۠%Gy3FxawF[b*=JE3%Pe*mtqq6&${%ucӸl&WO%]hmG[M޲nDu\x~)q5WG6k ǭ%?{Ú_.mͮS2r`{mo$i Qtr`<2՝Y -c*[QtE>6N 9Zٽv@Ed]qߝI-\wu\ga.dhgH ~O?)16և,R)@Ȭ5(4(QWؘ;HR$1DCbh3b*Bԓ,qsVI Myr/*YD=bΖOjֹJ^Y]m3) (צA8Tmw6e+H _õ+-|?`DG0 eո^8qS#z#  P>f6 (s7: K#޵D&V{D]S[,RI_pP[(V/}2Q~Xg)NsaYŴp)K!?n Ox8W^)p0;]ӣE}Ft6~O ¼5d\)V>oƎQ}_Dv\@a٫ Ԋ1H-}uD#BMJՕB{_ZfPfb4X11`:xA8Ra3]CsTЁbJv>c۳6J/)i"GUl ;d+85k5>/{joq(-vWۈ$[yȋb!V\b/BU8Uͫ֜WcPM @"iz(RI+6g ~3C!ԦG"G0t@>} ^ʟhpH$TQ+x?2IIrOk*>^e{Tgc. Ѡo]­X66ȊI@s3%a#Ѷ &4/9ftܸNYd'lYqC}Uŀ>7 =ݶ죎cls@}!L˃a'~;1;F^Q Dvt_֍ L[e,X ַc'vpU?EV 6Iu-Nޑ")QԦa"3qDCxp q}?r| G+;V|.B?8[,?gJoQ@Z_Ҋ`CIEUc(H^1ڢ0 tT006ғ0%9psrkrC0mH1 #TЁSwg~~^sow\҇t9{SsMb^2y I&jOuYutDD"h{gSG0d ipF:ssX%H>vgNڭ)eʝnG#Masiogqq|Ƹ5!$PU"ymWng:d3)aEC=7?;`B3 8EVAša(Vata*V ;cT <6ˡp V\"TIc[Gϳ0̾^}q};뺂C D:˫lq|Zټ] #Ӣ-` #GnKmEY-H2qH ׭>iRSHÞ$Jns3noc ǻ}aM*z ZƍO~>_ ?n%'8Ԕ f)lzT>1"j";4i+QƓfzA)3G3Lݻ^@q4 Ae>N+;-RTmpN^$;ʁDyI@L۹# b/c^ >UhDVr`lg _4`\5NيYtuiz}G#|>7*w ,Ř96=LW-Ȁl 8†L>;?MRܚ@a`W`n}tB{0&!\o!J>s&.*H4?_<"fׇOi圙G\ޟ:KSuWE(<Ҙf 6 -: ,Z;v-`;&h[~@Q 1a0CyFȞZыu 4>#;mKO "lv\i%*f1"7nMz}IƎ#s\e SM|SCfү#Gb'Zq|Ew^t _cCv+%-J-wflCGI(m% j/w-uhs~Z%[ӱ`p1<;,jievO^@`6W6:~)@h#zC75&X&Df5V2q >;1N'\:$X !n] I*ge{U-[% 9Mle|J&=ڹՓ":^ߣǪƺiGri 0uWP=ʌpulw 磁~К!u QNvPOggS@1 s>#%zZZ#``C[l4X̲ƭS"#; f-%'N펱BչVBUØ% 87u/@ߨqe3Kރ <},-%L]_CWM&X0R8[,H]AQ"Ġ2E9: >m!1jty5Y$J;#>Nǝ- %^k#N`,)!]约Q$oQlnE]pʗ/n8<ٓy%Bd@ x m{&?EWQB3v n$U|\0ٌ⎖O5qՋ,>+IqçH [  "잢$mߘ %fV,G:z2W~ ؝S  T]FS%D)H@\ŎN ĄN^ #3X4N*pJ`T`XgQh>n=;/i}&ɍ$rv-ߘ++;!M8'/%:?np͎4?vW "Bۺ5y Z'C1[Gl|4pFƷR^É`t[j\vp Cn6tx"_CQ @Gr1 XDh)) $pJN%ܿ"Ûuo;rKXCaۇ&ն _sJtG'Q+`8e]]ev C;Uae=f=mͰ ӡ& V@"an83&J[2,d3C/ >N+ {yVt8qGY'$]kܙh{T*-4\mȞMM=ː`L3uy^T5wR2Z 8-8И1EF|apZ>Nv $ vCn+o_ W4,bit/+KG$QlSl*:?7 /1^)pq!~;[V<$UQSlPzX#5 0&U:)Aq ~SU@BNeOAt |l]hˉD+.H,h95?2cx~Z]Q?,t]Yf*QܼD[ RLLw; XGh'5ZzDD}5Hc¢ \X T8 GD>n+`ç Rk m)I}[1y:7c>;qtV5{SwQ(ƒW~V)#hIelp@ȗ * .Cdžtg4 &a4A #%a0Qq>ם27Bܚih=hED`{UZ;On'5漪\u\) {# !FVf,[݄;kܭHA4?B$.`{{2pl,[_u]l)eٴ9D!Dk>[8cM;͂ z;Qz'M8HY?u+P|<趐j10>,[:y-K'%w̦ f#B1]5Ug$6T,z JS9^~;jeQ<>η;͝A ȝ‚w"U(PEz^= ŲN}*ܣkyDs+plD` "炓c3,CvXūc%@'Zr!?u;*FDǨC^'3-}LϝMFJZ;3 VM`R6 hYƻA%V> IEl~m/19"â,7ɮ+]T;\ZLW%c|=7OXtlCnzX9]5i/Z_ P: >η['c\ms]! E*!lI|NhC|ϲѵ_zB0oL4S#lu3 :=:U&WO>~pE\'ُ y\r'Z+.dfM/ENP>7'N[p;]@ 8RH;#:}ia}!{GKe=ʬjGzG1eF&'-8;?gOLJf vglVt&Jf}F:={(,J-eR P>nfƨ ŀkw Nc+&A{05Ͷ'qI8؊CX9L-s<nś&,l!>d 3ӊgӉ]{P:Z&#\̫6WmnZX>N#K֌>H 06IvUdLu KR=(ʵutUG't@95"M`E )Ms{Hz]ˎ)K $K"9h%WKDn-nu}ytE*bϔ3@"kIîIf]va9 )pߥߴﺿ->/83ړ{ÝNVнK-EVTCaY|?nKOO!aszV@vݳuV, MF~4FZ\3h.xPC{Y=[iY4V%?a+* Mo*)@>n X 72As6iGq^+-%e꤬KI䵬nk?g}FMqUT#vmInj6 %m22?ML{mS#\є[f S>A՞ӀfP2LSkn׃\E1@Q9(LHp,; #_)\j7HnՕ{* -X FR0&IY,N% 92Tvck>]iuP/r1s(vwM$Bԙ#:Y}?y\NCDZuw7) 2HnyYț$gۚdMI;X\P)9^.g3д'e~'xNBK>.ﰆUi `m dر2ȵ?C{%ZәݪsCpCGp鞎C>hKu !&M݀zĆd0:5t-"4$0>oM|of{$hj5v}v~cvUTk=l޸de|MX^@7̞lSºT1Gݰ״XTf;+@z(OggS1ÆZQC8!>> $2 )c8ml\>~uwI5a4n2{b+bCĕ=1yW!mXbsU|ң*:1>3w2ފ6m7!RS4] ET=@W]} Ml4q̸ !ag ^1 p@S.5ߘVɸV T"\þ9ktv(t>-@BplC~NijFvQy~-/t8&>/C@tsSQHYL>-}in>/Clmms-1.1.3/data/samples/drums/hihat_closed01.ogg000066400000000000000000000125711247673406200215010ustar00rootroot00000000000000OggSE7`QvorbisDOggSE7K8-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4s\_ڤR"&DigWXFb 0ǎmp(RFdfazy8y3m7-ve%S Kʍj?_7tJeq[MU< C: ?gk &?;UzA-g5m!'4*{*zNfx#>vc`?cffB$N]g9Yyc??kf?&G5_eٔI#km)';C,`Xy֍(ǘ8]k0K|eMAB /xa!({②Z\} T9b.o~vpuyPݨ*Bvn w~ݖUU8q*=qº^#|c˫s<`>%j o|"+@LmY b?ْ&瑌wW[߾z?a9bg&-A?"`Y)Ua$?ιUQ;,f?aų]mep8R%0Ч`!:9|vg?lNS2N[I'g>1K$:I/y^8} xF'-AU)Ow Քŵl g42%-āq ¸/*tE5Hfp±{1iVRWk<"j2_o@K,?Im=J F1miy̾u؇D-c:Fڽڏ'.R[{kaje@PI/d/5JRʼ3(5_^+O.oǙ eP64e%VJ>MzrS@Ę1` ,^^'omu\GB· 4\̉vT xH/lJBmyIOtI$r# 9W;)?ZNnI,-~56H_j2? %adI1|d:_}u4%N'z]\qhܗÕq+-ٖAf$Xcui}SMj}n5Mͥ3ijM^L~v08O+3^0ezŏ^t[6jï- `ed8jlmms-1.1.3/data/samples/drums/hihat_closed02.ogg000066400000000000000000000110311247673406200214700ustar00rootroot00000000000000OggS/"ٶvorbisD_OggS/"],-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒى`͖XLbk4KS=[QfM}3.Q)ŀPeK/8™VTw%8&u?m馒Rb(4U!vzӤG[ZfR2,Ru]74EdY/<OGҫӞ~a0qnAHMWNo~6OaN 8pgyB 4;ɟQ#s ~xPTh>>18`$`4 ww&g4OWNs3F?$o3WHS\151xI\>r)y(Qѐ%b4]EmM[_]esFa\|\4{M E(+a PR-pF r"(TrM` L;bDֈښj[mM;a"j)VN&alK? &Jo(lAHLjvx? \bHd! )R# `ZxV*5so !$af&0=¥w|:Bō}EJ dAD%T K.a}tj 0ֈ1r$l 6&ŔˍŃM 'P,gKm=XjM@@ ́kv@4 ˄A ]Lw%^~*kQK25Vo<’ȅs9^cMtD.PX {YfdNs͗_GCyMvbd_*H"@D- $~/Vַ>[v> O|&>MI@ VJFsUG9` O@?Cl> JU@)huc3+-;Lv%Lv%6)"*؀VT'KHD|Q?[˫ aC P\P\/>-;; 5r!J1G<ؿa\blmms-1.1.3/data/samples/drums/hihat_closed04.ogg000066400000000000000000000110101247673406200214670ustar00rootroot00000000000000OggS;"vorbisD_OggS;"-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒQYC`b_oLꨀ~\͒4ݪi[ڍ>/AWak7y~_xU)X͚ՊMvu_p98>~gv"4{ܛ=J I-Zb{_99՘~KUαu t+/uhzq+kI ,l.n~XBre,}s(@׹/KDR>z4D^=`mo=9QwbG@cub;!fUU<([]MZ:or~ѸLռG2H W諭2bZ*8tYyFs2ٙ4jI{sT\{4/Z7CG xT}pqUW_rY\bVӆTd7XQϖ:ғj=(o=aa\O39 xz 6Lz6B8?|G*=XURK GSwh5)Z.ߧ뵉'@DFkgaj̋s*y&~I}|U#\wvTt4k]đQ*c!Z՝Xu m4,NW@!11LRl|3m{C-X$$k}}3 lmms-1.1.3/data/samples/drums/hihat_closed05.ogg000066400000000000000000000105601247673406200215010ustar00rootroot00000000000000OggSIM 1lvorbisD`OggSIM" -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggSIMn $($,Y6R`f>?V9hKb~ d.hT[N ]?6L" %>Tk.r?<_*0Nп_9/Y6Ψ# :&)d#TpzD ]ed&оdǬ2]H?o;jpgDSF! N,>I3*K\̹ke?]hS@bawZRY ޲I({L*#V#wʽm#ܞ{lʄƈsOLKnsqt+x^ZFJ Odl1` (1r65ݛsQw&״agٲwx F>k\ 1Ժ"~~o-LVoYm۶ͼ.PDzX4(0}^5tuXql$݌{#}K+<zfC?%yCtdh#Kyߵ`"*(\neW~ޏ>lPH gV='[S>2J.G2e5l Kn/ju[#ャdtZ1O?`w.WN=8 Tt_ث[i4z6у. z}d1! 0lL+ֳ=aNT'Xg2ZTq!'C (b-XܯGr:N=JF/cʌ҇G>jYmIJbtv$uJ߮YU~^?vg\R~ljlϓOdR#OƇu̿==G~9Qgq`njaN\g槟'qv·AȬ7zJVg(_ _ s (!YPMj{{;5ȍ;"Uzv{߬ݪ1_er47 ftg_lUu6xhWV;/eƶRGM̾nDqtcoI \XuW]4*[guMk1WVh7GdG5H}">H %To0@mD_oy3={Kxx91>ug\IP ~B'7JE^W%:#%5a]`Z\\\\k$[__'xGrL>y,.bqQ2L:25 &lmms-1.1.3/data/samples/drums/hihat_foot_pedal01.ogg000066400000000000000000000155141247673406200223440ustar00rootroot00000000000000OggS9,'vorbisD`OggS9{ң -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggS\9«$H"#(%%_M<@Rs.p_8:;FiLfDb8&/q ?m/a^,O軿>T[Kf&d]UtIn>OW~L: lWX؞Y9Z?q__*TU@\@h?F~2|/YZ&Zn 0{ж~Ze?">k70lCNfo51vo3&y~*(XD,0B(7jn_R `w}*Cv c2 o Y?N-j7 ǮJ!!p* "Wɲ|TV;q!Ы'N}g3 <{1}<<rhr4)͌SR䓸X`߉,f%%0^#iꃿΈ䆝Cֈf)j8W~e. #Z=sIMSQ7Efxj0F N$y`˪hr;G2&ϊMlRGE8$[Q/HLO5(&E'= uhSGA YD@!eEífyFkdǛv3ejT `"6Z7֙ [)l{:8l?匞Zk Q~uc[A}SW/\p kxH1xPIsGF\taM?kUcN+*KdZ|#nT1mw~N EӾ/"މćI+'Qbg5{HxAA&.4zUM46x8r2.oSTqb dyᾁwH0 rT92 cqFw]VFiހiKcu^|wM^*vS1!yذ A3^C)$KsDa^ޖE/s7Q`%`uwcb=]ή V3 M]kݷh#F>514jЯc47lE&ߜð+)'AwFj~x[͟+>e. dmNJ')Rb+*? -5Ө]fl5&γ"kvc|?_P/GTMDc`9v4ow/ 7;K%$_JGhۼ@T\2IvgfG6`d>bjl.tTX++7V7lB9)ߧb1Ҿs9<q^h#ڌX&Ia-J1.yGf 'ƑՒl#ܛQQ4"1T[]պO u}mxwzDdGwՊF[/Lk櫦_O1rȌ±9tBK yGXz v~b^ـV ^1^.?LeQ] _bز:Ъje.K}d a?{ĈZI1Wيfޚ>HH/";lcE[}56iT6l]@Tk+>HG)P86T1fmX@&?Bd*$0*l,n Ɲ1(SE*&פ#N:Cxd%7.8)ȄaT)^1/fk[ &AGII{&9[-6i6<DRFk| OLK6CR:Gb\'%kz+>TɚM8Ncmt]#Wr_0t@4!?I80`*4P5.P5zkDwxb}y<{wI*BSFBD)bٽ2 2jQ?KcA:n9&X@i"|]d yrI*dPTbJ͆!0A*@>VY5_dPۋ&]%YIT<%W1& l݊Q1NQ4s{Bn b@_XdZhF-·-Y'=wU _VJRiա#9[)8!aMQe!hsvy.=M>[F"ޓZ$ΕDwfdb\%Q_׊2.ّn;!|dǥvS"APrwQܡa«nOY|/fm׈b/ɤ[o{#yN3K3pdgy$d3 VQ~jddyerXԄ+WϨ~>2EqAE$Arp$zRe V<)}Vmp}S # ,)t89ܶ]ԇ1{3+m.O2Hld\.ɯQ|PjaD ڷ)fK5w]ksf ~~̵kJGՑpሻu!HV]~3{#7y/Ͽy|]q^,1gdDo,1@>Blqmqm>RAu<ߤ > Ҕ/Jfe&[Of85ji䁤G^o-h|);OtӦcD{dKTgߏKyq)j2h.U `]nJ$ LO35'cԾN$A܅W1yiXDphy\靖p b1$*\I:n ~=7C*R]c߹ԭon¹'k#{_ r3xwfɤ K s$4uW[15{!"`pL=]_D:.0fR&f[[--^ g|iMJ>~s@{e!2zoFVK]yq~tlnTm~Lδ6btql1ҭQ$Bs#џpM9f ?[RkKd k4mlzVnGu%S!26pBTwI47iµW2Y~ƘsAW2@6I%J@5-}in lmms-1.1.3/data/samples/drums/hihat_opened01.ogg000066400000000000000000000176051247673406200215050ustar00rootroot00000000000000OggS8"2`vorbisD_OggS8"RB-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ{UҜm1GK_{x-P2/0.xu tO<vz-ZٻJu_#Ƌ/W,.uf"{)(r~=v%H@߻ey=qu>z$k1ZLj.KDAWӬabg6Jl(ǵePRh9-)1¥n/Jvwdpp%zDWZ?ZN2DY.H=TJݍ.Q}-@etPaBm~Pt4bt b=k2㮸Dph%F@/@@[k M2})ݬ!3_ƴs${5>m!H{#]ß 6g[>ÌJF 啕 O5Wd_ |D%Pf&\&x- ALJCH%Gw!K.|=!ʿZ^{PE-<y&KE; >C Նo E$3Pꔷb ;^2=톥]ˎUc~i`S0`vhD+Hk7;4s]T6›bbziL!I SURr;_٨mՊsߜ4OM_ n)fu 6,&U SFd\Qs;ٔ`$^@=f' "񘉅!2竤oG|_ZxeOw =#ؾF"WuKRhOb˶aZHDU5k_lOQ3jRnd޾\Q^DQA.L> ^Ea̡UCoLָf P?Đ9&f @A9aO7^:^JRa!eA\҉~O`:Y؄&p$Тx$,f%`͠㯛d6uA]3D'tnHbսD U.z%H_&F7~ >95|~q%n‡RP?A=eะFU &iZ]77y!UԼ3 T9X̟nz] 337y9!iK.FwK7nv@[Fo3 ҅Vw ,06 t;jN.G@Z#$g*k1Id=5}"-5vԨURWjw>bzfh aiנG mF^6Yg^}Rʾ _4$iسm`l>;Z\G?pzKCӌx!,U'ٖz.x6EkRR69z+b^v,0f@rWC+t# F֬4Цk='omW/| 5<=ֵIJR{NLe{* \q:oSonB0KVKZBGX(4{H7˽આt[zqwҽe掓)VQX !uFG:d8:4;<,Vv_e/q/Bch:E̩B$~V7`DkTq."p$z0-eMĥQ0FԧUuNe*aF<}VqG+W)@52߮XĖf#NU<2 ~Gt&?Pz"q}4B %RMj ;0HLLf5j+|Ym$ n:rt#Hi+ip. g|U4V&,hCpED\R$g D$$qWƢ9K./,dq-Xyk01h`Ȫo +& _^Kg,ak{3!PW(nLa$y9[CU14$#"J ^ET|w#ɣV&%x Wf*psc4(\xV HK@Z:tF;I mw^HnZp2Ttg,`6@^l20[]2Yi6tOggSD8"ra)))+31!" eGǠEfilO!oXlij t)g.>u +L3w\.MIyTO" AX3ëN&t֞1FˆEِ chH|!:/?uu!<*f$=SCD>Ws ͦ,[ d2oLؾj6dW;@3<:\H͓K^_Σy5{FJ*ی^ݢlmms-1.1.3/data/samples/drums/hihat_opened02.ogg000066400000000000000000000222401247673406200214750ustar00rootroot00000000000000OggSz**.9fg^¦V')}ժ傅nZaZZU5FSlt{t1DTAZV2TdQOQ9 cD_ӆiX"H; CæZZ(!@VAl kA A#`@FwoE03p AԶh "6-, :]fBRQPEtW0J#w jcJa8* ߚDOOx7v34",'Ɇ';!6rTUfA@_Pku#l,K/*쬪`YP=!&(SUUccT+چ!6R!j T"FPDaZZ*(ZaCIa4 D,2,ާH  "!m"1C6_!& ULJ E)!Lt,X`Hu~_)uh0 P4‘*yAwOְ϶:i0D> Ē??6$Wy\<L[H\𡕨Z,9aiOZ x䄥=!bkRg0Kz Ojzh a#1Ҫj5 UjgZ 1EĪbX-b1چiڰa2 aA$$p Y*uFNw 2 DvĎ \lJ$01RĄӍh0:Ba@b"R{kar5]CjM}*b|`DRuXD=HV޵ã`" #WyYw(.@Abuh2ҁn'~v ,^ENcXDAaY#=}ΐii .iX-ZMU Z1 T&؁&& 6 # 2y;dv K MC E2 BV!t=l ȓ Q¦UiqjL"1 ѨD` u0@0'0Q0yA]48舡Yk$B`@dSUBxd1 48DDCC GRq_N  (/Ѽ# 74и8"A GR~F,*ZpTXT>" ?HhҪ{ja5VŰjӶM۶`Sզ( 9=pdeyZN\:S,u\G0`X6P DaKUPLK;l cEcáwi,>yǢ pwG@Iѫ4ƿhL,7)ݻTaKw_ 5擃 !i`68 ĤSr@bASPU!7/e pg,"F"_ rh4(+PTD *apĘK4-HV@FİZXQbiJA8"b1&jZ@E)vd-@0 XeT5LK;W\Q~kD (Ah`4~uGh'4O{s`@QsP!ԧ+ǟ4 e$ vu*\ZMRkygV 7@V-R@-Hg`̙pL .he2V *ŢVC +*V5mmTTUi)j -  l"mPva"H4M[X؃ U4F D4r(!Ux"X@ @ ؒm+#r$D g-m.F80 XlA  QDaâU t jŊF W= 3P.<+5I{gi ;E"1I_)Q2IH3RU&d* z8=#miU SEPXcK3h 4´ie%*jD!aC;Kr !=q_ @ X CAL! J\4L# ``&׼0 -p|a.t+`[Yx \3uӰ>ɸzD5c;㸕۪Hk(Ln 3 =jXI':S"ff"{Efff}IIT#Uj;;تbڙI[RKT(T@HL#9`i D$SEĄ 6 APQPa)A%`bJ2bZش5k5 bvRU11. F0 0FϕJIh*ۏ Xa)]0k"Z̈́"6q{dY.Nr:6!pB'48͊&I'JZ5T )4p! fαS{ޜ9)ґUUU6L0ŶlZ(ieibX[ABK;,K+CDcF3ƕdX@ 8 u`@ہ1 ^bqQHLIFa ,@Qd D@8 ,E )S# ")Y 8 >AR?2s"O p@])Y h7i͓PAlqu]!VɾH)0"lLe>@JyV%!sRԨ`DW;SM TȰ20 3mڰآס%Yŏ,m0cn7|4!a bb:-YbZy׋6:I8c:ɔ<3@(0U-##NXe4`1NrGB0?~ chxM:K$0W75y|~t6TTJ 4VeTQ 3; ~r} ٍZ#)wn|>ōL_59NB]Q=;^QJoG2_X/q=ih9t0)tvͮk~r):P2r*{v  L]21Z+>n}={o26̲K+n?7&dkC!~X s,w^la]_S @a~kGF'n ݝN7naK7k$x5y\'lSX5'׌;ٷ l̊ߎ} \/;bzS"pe $+gQ98}Ghv1*+.(Զ+r--`:U AI$pOrQZ3|X-oͼs5k`8t.}w/S5~z)u+JqX8>%=̌v>纝o[tgvJgdzj%IOa k\埇Ó 4/'i^{[xxD!<3808U-^{$y2nn -~bAU^g ivJE҆`zt$8O:{1Mt6_4zM'L:b0˔Dd-Zq{?Sfi<ݡ]7e(q||Rt^F f[vu0:˜bT* ~tZ֋̴;mJ/FRRS䖌cɍi{! | J"I7 ]-FXk@L4VhKP_`g,Wld#2oX/u4uBB=-7Y3V;Gg"ֲD5(\ l݁^EDJҔI}Z%Ǿ^D؆ `z<Ai|cd`lYJ'n&z.n)̉ ɤ!{[P'W'<(iZpL>6u+/,%҃=U^/w!и`q֛Ƞ"=q췺毽-%|yޯ(TtK, ƧX+VPld]'٨EVLtIvH UNlŗ~A3i%vZfЃNz!CgHs\m&p-Kl]i巸XBSǺAIfƟ`CJBlZY8OR XHu%`y M1}T/LZNq#¦r@[ 4 \킲 =OLhf:fnNsO)1sf.ZW>Mťx3 89n+B/P-ͶTAcVLܺKng nY Ѭ@!PU>@< Tb^еO˽n .wߥ (B"g ٫Hį#_uqT-üE-`H256:čtfM(nzHР|zhM4wdЪV%ZU>$N3OZI 7="R2; gG=z9Fy-%*Ej[ z 9`LJc+#=RUh(u9ۓLz{Rъ8@prDfDL08. w>xHzyC7)7?ټGDC7yarjYU̎%@WiZ3(29&A/<_p<+\WsV{;[[צyj98 `k4>:2gni.(K` hUmkcʹrtb=Ml]%bbg3m^"ItΔ%$&kѷqN^ZF+ι|ptk6OM0| "ڐy AE06#.ïH(Bο]vfz Tӥw+id^ޕҚ@uOP PR^/D: "Mٌx U4ʈE}(ԴffUv̬w/9wCݭ- R;|M J%EdS/72cJk;ǥw(k3VybΟxXN/H jOS`] |S\]fv"ii(~6(گ 0G_oGBcLv>w:+wf엲$r"L^ $ 1>2 v6O )%@]Ɏ,Q4O4W:#j`{1 9-Չ۰XFJy˹t_&gGF-!sw;~ٓ@m4]%DqUz/cGrVMU@ H-y$iL|DVJ+3N{~V؊UzDN'%vYRosDW -%LK@ɶB)*k۽Ǘc/b+M]#A_e)qmp{B-UK" X81(#fŘi~Y e!q@%b+̿Õ5uŚVGoǻMT>nwݯf\e_$vit2Ԛ`xU,ɧ3ltdRܫSX_bDC+KI Ĩ&ǡUAwtJ`F):n4ҚR#MV1ԁ2SrQK!c_,yєxtuNfUyhpTOggSxGhr*9211VT4{gv.'[)Z3;fpd0Fn֖utˠ70?}-\eeP2 '0*8}u΃KٟIE7Ӱ#lD'h:TĨtٙ90Jm\c&1(ly~%QKvsi7Gދ6$; ֆM UoJgEsQ K+=|RqM7),<V1֤Kj9$]>}Kp+7ːέ+܂$5H K$}&PN٤:zS64LaoLZ3q?@ڃzZlX= }~xgȏ3r# m]lmms-1.1.3/data/samples/drums/kick01.ogg000066400000000000000000000076301247673406200177740ustar00rootroot00000000000000OggSh+Kvorbis"VOggSh+8-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳`du_LQe/{ٙ٦?꯾w|ɗ|ɗysn2vKW#H~_%AKlH0 \lmms-1.1.3/data/samples/drums/kick02.ogg000066400000000000000000000373041247673406200177760ustar00rootroot00000000000000OggS6"2UAvorbisD_OggS6".]-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ"̋ugpYuub6{Y#?iP6C_s()XQrVƲwfe'=e=nޖkZ~=B)[)ZU9)-Љ、NZKdW"Ѣ_o&?ajGa]y~MB@tOGW @ޛ0, *|7,d=Z;*͹NMRLtM.mTO]  qΰ֪UO=-)0sU]cXHsF\r?vMZyLDŗkA`[T[\G*_OJ J&އfN=?@+A ZnݫiUs讫Erf TQB*.>&:ӽF4&xH:h֭rX}cuGhFnܯe_ %mkK"Wt¡W{  Ze.AQ:=^cWs6-+ ,o=6b9r#v{ "U<@팟n.\r܁y5~{blV04[NgG%~wXeZ>1PP`$/.;y ɨ)є[ c䗶Ne3̖~t']ռ A)"4=AF1V;X"޾* 0L#L}+f}(ql=!འoCj~0Jde5J>{ ( 0 o0NbU+}ni= bS$8+n06B䙻y ^zjy>zQo̅=YUO/#d|) 3@uE!htjxId O~{}h.TX5=l!Ey\]Yh'BYRfi+}ߺ|Ȉ2p)8J<FʈQc6skq &-μwe.cǘkj;ER(74 pa²8B>eL P~z^k B&HU* 03-V[|eV06L*2p2ʰ#E+*V"k6Xhغ(fU^\T&snZIQ",u %{̳o~&whtP@ޮbok\ú,/T^k9TB@@ehYk D&% ݇"lXFJ+fk۠X.%T.5^Tukio2 LC[UN54Uef ޗx0c:p;Ll.9o\xh=UH\g{ɢJG~M͢iRZC xhUmP?_(nG<n]go %%/j;\5xLV3-vE[!zj5[~N;85{-{ID#1hdwGJ nEZ&x5gw{< ]6s`I &Kʍq Ԥ$8@xU rq2KT.l7mxNĊd_~Gؽi '?@EVݮch{FXaZ`ەRc15ǟy1!&l-X,cЪn _ h]EɣaT$$)+Q RwzR:}-7"[1iRa:B,HfJ[&[6vگM$*Q#'5?HPPȱ5,-.4GoNjH5%Fa% 15zsyXUIޑd# nG8E';at"pO$V5yrQKaAT ']> :>V 0UkQ)u~[}Nhxtvuy7^~cZҏ&9/!o 6GXtكT W rBAQBŦ6%0OZ^#ˁh B$ u ^JHK*J&BF)̵KZw;%ĭı=&0 D8ĒOVn܊Ji:Y̙$@Sq̈́B/+nAvKPRkC,n#Ao}XBA NPɘ!( POG޼Zfƴ_s en *!^6ģ%xW,ϟ\qsWh T| qJUP{zY.W~#䌴jvfyKdy䥏}rL;U:ea&ڨe%~W6Y,ӇƸHCqpEE;W*XR9 zKLNU~})AY@o'QÓtƴVl,g_1|?guZd+)aT!K2Ń#{;&jQwsM*?]5&!brURiTEaP^PD=]U]^z-S ̣;p y .i̪>IpT \gRꮁbbxx72}ͤ"J2O'8Q7p"e}Sa^9FjfN IkSG5/h6yľR[w/|!pD2Akw<"OC=Ra5d54Ԥ,",OggS6"Dy¾ƻξȾ }+" QJDV0wF`|'q1 uYjqUHhu }APm8ӻ/gb"^o(:;uq1==UD'yyi9T8 `h8_-$P ' qH?עܓh"NkvܓƟi~h9cH,o(U.:%/&/Z ϸ=w^sqYE:A ;>2ojHBF9l 0_yn:c{FQ 3~]7@ P9*o}~ qس)-_JcJl[6D8,ikZ.v]bX5g+H"Zv_,c(>lU NCG'|3V):g晰kRc({lԢSILGz첬@zԁ\܍Xa@8H9&ҘuG^mG5]VDZhzGᱧdYpk{WOiP|Q(ƻ_"K9~' :x;e]5V5O0x~ES{8ucn87\zGgeQ|ݾyhK#MI#}{UFDsr3WA9x@GnF̵L[Dy9~SQ KE~̸՝II`ܻq{ԳlKbul6+UR+3hlk?A rbDV|="$V9qJVvFcX5ֶ:\ũ5\VJj+{U >v{P]]'UQ"bL ƓT'm~\@ё [<Ԧ#vi\v4Gٞ-$P5fs 4kOTU &'WC]ƯCHn|7JF,PbfLK1kɪne@r&lV5e65Bx9@3n<޹} a042jg0-JHMVGfK#|2_*Vx.m Uk}FUޏ ܈G8LÍ!U"2 .ġ4dӁ ml3SIELe8l=. .q͂,oQ54(Rչ䄀~aͥXp(EX5HQ+Ԏ\"ʭw7x_8&>Ԧ^`AEy2kb82te8Ef$=V-Hs.7a/k X,Z< >vt^IgA7ǺX>C4x0ND}MG:KNJdWitgրzz5TzU$p27qrX:`;iR&3|nwvR1=p EF}]ְ wklx^'@חHC"+3qf> +} o vFr}e)5=M6˱HB&uCPUyZ8*j)L/'M*b%τ#8M])qgL}[A54HbF9л:mk}I~W?[4U9jȈkâǘsҾt9\](+Jn@iR#dӕ= z>Ʃ^K >Hzr`*wGbuSuiY LjՍhj QR>:3}ީ\Z%DUHE, &A=5]dc\w'`NtM|X6*3kmNO`-|jL!h6\> 9^j̠Yw?@Iޙ}? apHnsVW"]`Bbm%iŞPt&&"X 0;D2) (5|̧CR_^c[a U?x_ڶ ǔHoS̺Wc-2'Rӷ(B%?kVgFDG'ۼgqMQ;ď}Jz$n}^.X$Tk -SyIoOIzp榥s9R0!|:qed@u?FGl}`:l-T o~h)'7M$}<#im|($jx=ⷋUDXB7N|>Rz{ jQ9̥މkn04@ޝoMwc㖫*nÎ.SA4*Xqq1!Ov;IϠc&'jғnVݺ%Pʲ6ޅZS9*uw5}KA0IC+f1%vV%ɘ^L.=~]sS&G]Nމ}? apv"|E\p.{1GX!@fjTXW):^v(T|}P7\k"^Si1AOb\|j.(" Hf+SsC@Q(!Q.` .10#CyjdmS}2i˗,OggS6" .y:npl$Ys 8)/3֊ƶpb>u*JB&ΣHvӺlm9-GLqq@=jbƷלk%7lJ;X m?SHV`^ t1(4ڐOLD]O[qTӭ!0.aWtbkq}d}\ZA Rʙog5uYWFḂ$5mED 5FT?4q]IKv/I|rL҇j`#KMEDE̝Tytzc21 8Cܘ*]o"c#BҔcTV@,3pCw E\]diB.#p$L@$QTP>֘E8m,ir`hUR.л;0P5|mOͥ~ %nS}9`YXJSz DͤI)3i<ȴ06o \9R|$)̸=sEAb퇰vy3YקE5ڡz*g;˄z`ܘ[dtJy}rpf.sFQXvUvy?MLYYV3YҪi(ZX];J_2\a 3/$B_:U]B`s)4NG<&/Br;R=&"7n ^ zbT)Շ UYG ܩяƐrXKIM)9Vz-.]ue1U;ΤE^YR@ptj5vVn}Fg?}) b4VYTZ!DW쓝'¹>PDGT5 wZhU{+TCHXgmprx*pG 1G1$!rF )@$**;i*D]:ry6av~꽲1;i}s= R ѻ*D)X.&5rXb,I[;NgZn"uáz#wl yvuD ;>1Ӓ ],G?Bw^;&,8*Cץ Pu\(DXC"0E ϱ i ^ ,|莌pj<}au<(VRtфLQJ-ɳteܟѶ\\?.ެX` -G n~S;K /kQ!gfMT6j01;.`I}ƀpXsF&_U?q1o*J2<}`Ltt{~[z_*;$ԪI0S;L*>t)v'<nHyJԳb zqm4^cJ ˜G쬬0 j.q[Ēgz/g\?6uPծjYmd^I*Ts9JDJ-r̹(J\I2sH(e?~M}*`!] r205n v$ꥅvg}Y_qYf3Rj]H|B9*1u3-*4Z,qRw?U;U틦ԊPͲU~IrIFf>>fFU zN-ڵB寶bWm$T\>Jï9qI+XE$a-\ Y)^ʶ?:@gnez9;ʼK3 ff%\jJHO@E9ZW2ތ[b* ctd5Y~9R!`WUm h%sN}Ite*Ԇݽ"ZrzQ?̂Po{ L}H>WiRrt ,ˮVR|`d2<qe7vkQJ /)Vs4<^R+AƏn஄riRS.AK`^I`qN.WluoAmJr$Z-ۛ.U3;snVv}CϞdL eWa hh1%&A3ң]9K%U06$T$UABkw%K)sF ]&Ü{'߲[:'6xM4Z* g"y'COlmO=qn:c+ ;#ͪİXl%R8+Ώ^tW$ЁD>)I}ly|VҲiQ35D KO Cft ao UB/ {*6xG DWey Χ5(`B([:g#6*Axb*R)=κX5uD(I˕'-*J$,N8U6yr~_cI<;w\Q+r[P:^I}c. I @UZtS?Xϗ_.LLIsJN)Ys$4A5JZ*$^9r0\ !r%r J-+EGdp ~% \bR{FڎUs a푄iS+.dH] [,&,,$:4}nfVA⑋?K_O-h㿗Eh(~蒵r :twoar^A"62t@UN Y>2J"V3UAWEc' =q{*0@ )979#W'8ɽldi|F~0@'T>m-HonM㸍\sLF/pRg#2/_JfJS{_`4mUJʻ$ ѧkx3ք`Ɖ{M_ov+d0 mJHv't}+wDzJL^8& ӎ$կ1*2.r VۆbU6aJ ba Z1NiF>H'z1_U|G$w/7jG>W6L24s=ehzeCgEz KJj:%]FfzהaGHdje֑M. .GI6ԩG_!TE |[eu.*izra*lmms-1.1.3/data/samples/drums/kick03.ogg000066400000000000000000000116411247673406200177730ustar00rootroot00000000000000OggS<"vorbisD_OggS<"y^-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ|~ƤG`|6$'^IlnhZ E}fxGP)כOz>7w-A$,>>m#}n&(K gn6 h(T8j7q֥ъj#Ɛ-bec}ل %8*YZE*}Ek]{kfQw]YR^{k ;P!ג5e53nI4~~޶]\5CC%lFzk\[#$Kǣj6D@fmB&-d`A%Stn[W![ Kvn;:#s,'WP Ѵ\4Xk(tQ83y=S1R}N[~Y g-"C=GALT'+ <<%>jg4ỉr;8 ^K iAf}_@ ]!Ԕ?fm V?cTi_Afw7IH%Hn7ٽ2rݍhF3UdmJaWcysRHFCf VKF~- PzԘ bN}|VK$}{F wW>#]#6F(mD7s *ǐ$%(ŀm!l \'Ɔf".`]5ZXcs(c?_n2"yXd|}O4_agfA:>"c-2d ,:S>hRxUoiY(S:g.2M(ƶ*O$Ľr~J950c1c1c1# YdHHHHX%Yd뺮b8H%Yfi( hh'Y'yygygyyyiiiiiiiiiii@h*@@qGrqq$ YQEr,r4Gs<ɓDILɴLKT  Y@TLTTEu\ulGvlɖdɖlKlMdQeUeYeYeYeYeYeYeYeYeYАU@!! 4d䐄X 圥 YYgipVDY ZSNi֒s3>8%RJ BCV@AeXlAeڜsR2&1ܜr¶Nl+ڜRАUBB!B!RH! 4d qGr$Gr$I$ɒ,˲4K4M<<jkPݚeŧNg206eq@ :[ R -VR%t._Cq\&@/.vJ'n9r+askSBrn:Zܛ;)tVʗA؁xN J_xϛhVbakR0E;&ѶP9\'7xi+ =cǧKt XYU) A B'P 3 8 6;dŚ2Z*\$O;=.hl@ @'B |[":6_H"5BA׬aU%FW7^hZ`6*93QRBT00;9` Awz xŪ`P$?ٗ+T83A>j*2(i@Si[@@2k8l}:tկR҃VVGġ>Z?;i`}WDVmE Ԫ1+RFu3V9?;1Hұ~x E H~bQw?9N1H/BjhG6wB:)?+){at]`I7U`p%ul[YYNrUN*hUIʯMxEJ0p ~)PBlJp [wxI,oװ ٍ@Wn3)ʟx?@-@`:Nk}fˏg҈ͳ߲بJ0_cza@d_kpoSDFiV{gdQ?BL>T0=+WR= j*EfpV# ~pH@IH:P- sìӆWyF iU!AS ´ s_n0jٖ1;tkeTZ"Wu0!hϊ]}R,$FNJ5aIiL4J\h7Z!$xFhOggSmwh>VGiw~ j / .d|:%5s,>д[Bduwe0 oM}3})<]S]ClvR#XBTTIJwCd&;jmփ廪9-^0ܞ.>pǪ@RU1`vd:]ZbO=K_dzf.޵ Ys  9sص_*RIR[꒫8J?x-&M351]y7(J rܱ$T p~Iކ"nʚ`Yٝs"x6.9+KD Ì1Qc1}%fU2z=΃u z[XB$@lmms-1.1.3/data/samples/drums/kick_distorted01.ogg000066400000000000000000000174611247673406200220600ustar00rootroot00000000000000OggS˲gp6rvorbisDwOggS˲gpi~5-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4s1Ą U'`a}5O 4hl vA +:zK%_M2hm`<2JIzK} AU;uhm6o_\xaoGP\p;MYx!<>$Yņ[_$$GR7cOc iQ(fdQH@T#@U!PmJ[O|Gygz`l,ڜ٥a>Q[B[2uZdGF{$.|.N7Kl虁<>ؑb\TW$ #и@׿[7 g~~[DAVms0vH(tFz*yM 5 +yc+gO)yOp"un!kL @\u MBZd)%;+-]ult[sM~\+&m`qfJ;9?^qdN^ٲjivEnX2&h!SHs֛L:f'rFFAnFc'e:یMZ@0X 9(|})`N[g&}C-݄?σz' 9lzMunxJ ̌S{ ^^XsYiO]]?'?-);4ΐ\\bdLGݣZ tq1͢Ww҇El4|^5yIЏOuH!˜@-3Cfs~?+c;I$IB6Tkb 8VEZڠq8Iz L~z6Eln U\>sٝաz琛$K,{}FA%Gkq|㤘| G&͍K[>/YC,s]mhVɰ Nl._h0 Ƽ 1vj^!PD\$Ph مͱ -vA {C`ûN BBRMzhAͣo?x$E ɲ{"XbqV$dAR&7[Sk08P#kY"5J~5Zg,n5vJUML6 )ւBZ}-tf9 Ob2J{Ur.  3fU&vBM3"%}<]V͵=8~:?wϖ''1<jt_2ҏC3x52*q=j+9cbuv?Mƫ"8 ݻ ]} hjjP+3vE_} (G@jcȠؐyYBФ \G] ~^78|L#gy@l "F\6CE\F'ӡoe蒱ƽ|!dͳ!/\n9.8B. ] Oi^G&+/b!.s7HW) dw,xyQ>i6<Oܶ~i>k+<t_3Vc/ڸ5 ς} P(&|,Gl ,8JV(h론Wu>>>-z.#9lWaF&$C+g٠r#`omR c1+)%Sp/Aȷ߼}D4(KBm6w{2(FfF>A/NOz{?|}h`#a6~Yt:ڴ֥Xέ_?b8м`u*.DsI찻)y5DD=t =`|V C*,"jco?K۝)B9<@+? y.J\ذ@ GeIٗ⍵H^Gk[իFifPU29|}tFk++\x.r\.˥;fssCӼ'zaohJ#깿{y=???<a:/*m(s2xl߬.iVVsxY=l2In\#}3ZiܐCSlvt1H:}X Z'f_%wILWfyYhQ䧫`;f` 8=0݊ ~Qf9/I J fu"3 T-ӄ;]Kh-5w m"ĴMӲp4Β,,˥\\i0 D$S6XR%xh $)ٖ8|Yz=[Dh8 *IFe;N7ZjWѳp/4ӎlmms-1.1.3/data/samples/drums/kick_hard01.ogg000066400000000000000000000150041247673406200207640ustar00rootroot00000000000000OggS3B]vorbisDwOggS3B-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSQ3BZ,052Ѽʳl$XH\ k-1q@7-!yl[-s(<[7lԂOZD0iu̳!l)9PΩQuTQsSEU\]կ.7DmFD0qF;.XӨQ~^+:JV :K"+NhC%FiEt2Iqq?Z XLj8,6ӆ"`bbl@tuVkdA4S*^ψ%Y-ѿBUz<"Pn)} jDv t1mu['K)lDA`ށ?)?-leM ;t/ ybhBz8Hoq#[ \^OcЛ@ry=jAoΠnq1dsDę 2Rհ(k* u"3˚4 R8T)rC* w6*&hlILtnj&_氹VTڈ[aҥm|5Tkm6dr&ҟHːSokg6u醅OrK!&697i=y*i'FN[ 6 DDúͲNBQO49#a1 Nb"cFchlMQdin2 Сi8G37vC(C% -zZ6@] Lս|:I^VH:w{^gب z92F}lެ~ކT$*6!A! N5E58TP0F(`޼~}m-w{Jpy"Z᪓n08TE6C SU05Ѵa꼸e(KJ]@q1*Xvr]DfmB! $<䌀 H\<%i:'HkeUmHd$K1^/7!hG%WTҬWYT֡\sv"ҊD'\qH~~}m[~vR9^-zjA@t`I61SC1'ʲRҠa<i 51Iյ33x&JEI)SJ/>t"RP,:]>K g,߷!|Yl3RX]K8^|Z(ͫ DnnW = $@<Ǒ1cimd4&NmQB̊hطQ٣"wVBHu<;psu %D,v֪R!K{lwT{tEg&03668Uu;d)DVd"W; Co .8|-%Bq?ʋ/ȺۖB3ڌ5g}DP iq4pSlpSlc .! !FHEFQ-#Z4mL#RDVJ](4q06*j7ɬWKK5t6kIղ쭯Fn.FY㶊i^)kxJZ1&03ݰ¯}[ ^v~DbK~(0a2 M̄k^m w* -qR*Ѐ5*CR!1%10Tb: 鴩^ELQ!9 R(FM?vdr4O> M-I* !himq7p~ |Q[%{ֲ-NB|HpwvlN\ah~]#m&C2uF%D`"If?` x|\br]Y85 a My6sv ѣ-i`\x4 .P:Mhm{&*?I eqܛQY 5▔:A *,)0/m`ؐu_`R: 0!@l8+6{CN-l=4gJN4oQ1&RzI(#M(6hHhPm6[xR @ /C  8lmms-1.1.3/data/samples/drums/kick_hardcore01.ogg000066400000000000000000000220771247673406200216450ustar00rootroot00000000000000OggSeWuNEdvorbisDOggSeWuN&-vorbisXiph.Org libVorbis I 20020717vorbis)BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sȟ<&'(I GHI J  OggS@3eWuNE@@-#% ?(APJ`簭puuAcaHEcǭs~ ;q#wh^b2PEg#LioQH7gը1e n69uSo{(!(̒fоfDyT b.Z hFk-];Zbƞ~B:@R]YG#AѴjTUDZ-p8KNpy8a)O~p$_&ml2>̶aS573ma=Xn@(WA B$,$& Y.Y KԪaeEqhfd{qizaf'Q@WhN(t͈ J|]D@Z-*N[,KnNb]06+.g,c1rꆻ?϶[)VFk-ScXc3:eMW?3 >\yi~)1\t}T_+)aUU 3bdk"!ֆ'ҧ6-1e EFj6"T($*jd#!yTep@BDT, 2QM%  gA0Vɐ-,hCdIE14eB& @ duWoGcqXʱ|J'"ǀh>&sx2Ek!&_'%sTWLwϰA-^\n2y ,TUUUUP k3tʹe;9Hc/) QK%Qw:R#Jh֡BVpz",m,lw,;˶0ql 2$ebڮMcʊ=  BCQfUرpG(,d8 &[2z㛬N|" 2 򐈌1_57wSFS'~ +Op&6P\g}:"hKX=}V+)Dfg!%jH2myT;Ype3_ X2oVక`fu1p &Um[*3Aw,j \eTh!<-Fb{(}z"24aE`dA٠unC)`8qW\+RWBrZUuT r2.<9Lᡝ#W3\bUUs%F5;ٓkL:Hj2@*HJ㖃N59 "FG N"Ch.bFX=@A`j¸b1" nhp͘Sb*8aQ!]V[ ꎙqeYJK;h:^vZ'NWPd활䫫۾, g`(wOiv>d dvRH0UsY_"+jDhSJU6E]#`b29B"S$ YӿqpvɈf1}8)) -^v8WOh !ahFb 6(jĭ `K%0%DZTB6*s*SO/"Zqg0zԨ2dCKxnbI:Hj6OBWQbIh-:Qw:dŒ'0cra(]Zj!miel('"g>6}:xn%ٕV)MCT@3b.MY<:x̀0ʛ BZצ[ Ť`E#ӵ#*2nvd_.(ʙKjN KbF'ckrzH .C<[{a9&e<zPf,J T b& n}y.߀m:>)* #b'ը\Q( Tx5MYppSzC H&C!WX2PmQ`UEmeL_>ۻ>N LWϮ>wRG{,N8a:0H: K~L[ |*  Ӫeo'0Aa e3aL׻,NT˵elm-Vۙ<ΠOvxp Kl5ud46ݙ]x]. lb4.%] $dC4EٸKD5=)~BY'r$岝k"`T;yٱGe7oN>#dǠQ8=T6 Cg (`̪]KACP~;~.k0|_R尲Bd5'FtOlkS1LfHsosN5z e@vÆ ׈Tc!LGMj I `i6=m!LyǪ笣#A+U0vCZaך U̶ |pBB+V~yX "CmI[axՅ)V-ub)®$&Y#6FZC. k#E6iJ悁B̬ɺ|6$SzeE_'sc5 ŽM]:n YȒb !KQMǦ3P ;eQY5-iEmāgsdsH2 ( 0˽9UӎcKGLX^ӝMMԞ3J*Sp@/X^dJW߸DG;%ɨk[pmg)Ĕ8*pKJ<`l2ۭןefϙ {?yrxX hҕ&;P>WO+ ų6Gk~=u/N߮/^}m|\+?ٳF8)4~}O{ٱF>iW±EmǙVE}_GuKzJJƯ/oK|7;gx[U=8\LG@Z8lmms-1.1.3/data/samples/drums/kick_hiphop01.ogg000066400000000000000000000121701247673406200213360ustar00rootroot00000000000000OggSe TjDvorbisD8OggSe TrV-nvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M# ?o U6̘uۨ:c7gn벭 m ʾ.qp*˾ʲۺn}ʲq̶-p7~.l1p p0 "`P1R B(Jjc2ƤTA)BIb BƘ1)J)RZ+JiVkk-PJkJ)-jlZ1&!sLJƘRJk2tIɜRJJbŘ1)sRJ*1RZ+VJi[KbC)Zl-Zb BƘ9)J)UI霓1'Z))9)sR:礔RZ+J[([-VK)-Z,bT[(RJ[k XJi[lcJ)RZl[kK[kjM-Z9cPJkB)1jm1J[)[ŚC)1RZ,b9Vkj[)kVcoZTkZ[o 8P Y D(s*PJsJ霃PJJsJI)PJJPJI lДXА@*`RA))F! R RA(%Z3 Rk9gA(%j RkA(%Z뽤Rk1|I)Z1Zk1Zkb$l=ރNٜsν!2<N Y d dR RH)RL(c B!BH B!B!B!B!B!t9s9s96hJ,PhJ 0F!ƠR SA(%klcB)c圄Z\+ Z5AH%Zk=BJ՚k5Rb5t9b9瞃Zs|O-֜sν჋1לs!d5{:j9BkA` +IgBb9 Bc9Bb9眃Bc9 B(b1眃B!d9B9眃B9!B(R: BRJ!BRJ !B!RJ)!B(RJ)%BRJ)B(RJ)B)RJ)B)RJ)RB %RJ)RJFIFEh…АF5Z+RpB rci3qCHic@iRAB A m! A%@DL Paqvq] 8pp O 78AAqDD44padhlptx|OggS *e TlB **|szZZ0!@OIr^[jb+-K7u;ԥKz,eX"{=+Okz9tgsNw݃^Dd'C}\rYotگkHIv]H_DGY\PHXHszyj1J|fsSI2(I衽bUOK-1M^L8n! `b~.{ ds՝fRz~a/yHz^ne^mVL+PnN>I1>]܉x07E;@-tuf'6xHb^мh.mXr9k){<w"' $@@$~~} ÀquFz{lX[Ur/=ڣAݗ/s]EySZaQuo_ؔT%Ugq5| ,ZI9LV4mr 䄉ߤQV)jU&Fvej<(tЀ^~)K0i: `Zn,bQ~ߏQ-GV쟶][%4-5>FYHfͨ/% j9qJ٢$uTHBDt*Vҍ <@  :^lWj4>Fv twcXΘ15lE. EiV-Ki/zi: ]=jc[ä756tEG큀\ugId0F&Vv/T7܃Qqz;ai QP\K]mjWFeC0ag]ԥ:rWCUieMyK]e:]. fArP }"ԣc$ձtSU?^Ew[$ţU c+.v$twc`II 7נBBً+MK#UҮM\X?Qܷ;ґfe'YkHAQ,jL]~*0Ǻ0 0 Dh#3T5t4?eapXdoYZWR u0ۡ+=4lMכP\N+M6th۟M$.mT6Vh/#z h A- ~pg:LvݭjKr_jSju֕.ަp 5=SR GtOCԮ5+a?g5јڑ*Ev\,N'Rڶ۲^5g,~k$73CX B!.ZOqFP4@ $(<^Kg>0g@~FGcU km{r!]Ϳ[gd%@<"Q=5ٱk& !м@Rm}by |>jdY^7mp¹߽O[X7t&hlmms-1.1.3/data/samples/drums/kick_long01.ogg000066400000000000000000000174311247673406200210130ustar00rootroot00000000000000OggS%"A vorbisD_OggS%"{H-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ˿[c/*_|붭y0/q4Io;Mgg$H: 7T9vo!>L<Ԛcq`au "]$c+AUn<߮bXr]gI'5yG=0VOř_~<܌'8!̑)6\ IX̧Ua\R^#N& I'&w#<(x <N )פEpzeqv|6D=;˗o/,4bd1-=Yn 93l nry_7zJ.-9@ͪ✹n{$ph/qc*1kz+y٣|P%teYXOo8j+S6Qjկ+5mf5 I_aX; u@~3~ ZEKƃ|w0:&=adfwtZ? `UUc-V2r8˙{65h3"L!.`;tb*>{(`GXꖃGTf6O/(uxqƫ3.GֻŸ;SU~ڕ x3':}!^ZɐpZO)hZ`(5Q㟼[T/+ZmD%ZV,bc!{] UzfVݙ 4mkߡ/OϠV_4]&>ӭJՒI]3RC;N T .RTX7͝O=$>&E5k"sHmJWk'V."w'jU㺝nwU4C8epa5=4w4hoWS=ܶlyY4sr]K?t+,Tu>\'oG3ݍaeִO ь; WLeN1˛&Nj=`3/8m\MQ.*2u#u>6Y~>[Slx2mYUU.GKrM+V{H?Z6ʐ.!PZi%7Y0gYXT`Ni:?YlQ\ 3ҝ|[&V5uCD c!|Bv3q-IvLU3u[04@1Q [.9غ>pFƌ]O{ь K(!C_ZܙJ"aP̨Tww=B _ls*LKtI/ɝ_9YC=h*ǒ<\*{KBdgy!Kh04@krd(} 3lin}#^ws-Ŭ[[zu1gRF5Bh%Y`LlZ$ f5x*Z֫Oǀi톶鴤8EV8hWCSp?x4tInxQݣۼuJWXka/5S?04puN}6ʊ#]dpЩb|zp 3ȼcE;u#w|*3+v]O. _ Ofzz*X{=ImUUN F] m9ol1j)w|Ȯ6=N c]֮Vt|˜u+$!rX+d΄$r/1T v" U jsqmyy)6GyµR]ᬤ@C.-Jgr4+Q) ~~ =Hj/AXTwj&b? _VA5eEW% ] LiXEݥeH%ϑ@u] =e4SQ 6M+)Otw.pbLaR&nÁnzbJٜ[rO&rF)Z%=>Ďu5Z*flS_9z̗>j Cش${ ƾeUWt6fQEȩgb2 LJT۰ ^Bޛ`ɍ5|&Й~a3{g+~̧ pODgUU>DD@o8޽%r|vK ּ\ut&P> \w4^aed]ƼBT]ԟ( Q^܎%h;|ޒ:Z*tv+,(}H10`w?U,a裘>r1Sj ؇@ot1,EqԨQF5j( ?#N|/F!tfV/״R /G @&NLjE,U`_GB昐t/仍 ྚ:BIxuHy8 ?ph"܊+*PVIF7M7&Cw|;w{'U Pp@l-[c:0$ +x٬u~N^`VU<3O݌Ls|ǁGs$`d.cpA?g+~!ɭg(:ؚ۾cZ)n9JbAK?߷:+ogK9*|wdoƽj}*slo/k܆@EK]^=q{K)F^U^9=s0rO2Ni9^ݚ%۞ז%לAkBS\c]i:39~cQZ^xz$u*FP6G*XJ_Mɾ\=[^-H +睼Ҕ&ukQ*AC3uarjA픖X8qd-M )lfil 0gUZFF`0.Ö}k~i.(Y/}Qa%>uX>KH;4ÏpH哫1;cr==K2ۙ׫=͏ӮBEFoT;-V*;%zJg[f`-.doh:\n 0q*:k#ZoiJ< #KŸDZ607iZL(&C|L~Ս{ _#MDRW"_4618|]_-+OmolYU8 ,Nwq*5D zM8l >u$:πBƩm5aHZ %v .Ϻ8~7Tf-èOb -QApe-OggSP%"z&./*{ZM2.+Sw !Qōݨ[T ԹDT"ڗ u`U5~Vs6*ZKGґtd-YKGґZb\&&A<z=^OpOIlmms-1.1.3/data/samples/drums/kick_soft01.ogg000066400000000000000000000566101247673406200210310ustar00rootroot00000000000000OggS("cÝvorbisD_OggS("S# -vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ;:=B=BCHHRRRVdefjtqv{Ԟm7r$8 p5n_2oS9*0!uJ؞䦏Ÿ,;> Wl-=W~z{E96c04@@O4qq3[{ۧO~ɗ7\]M-GM_դgeH^71P|G a(HЯOFIa`]G>lg9 s[ [ tPalg3{@~{J_f@(D7lP [iPT} 8'd ~ M(@x̄![\iEp1+Pt&LN[< HKp8P V}9<1*PnK\ibPb?lHC xdڄTmRA~K\iPbxkQ@鋲gXx^K CCNHV$M`[4D*z&%)^;gf\wfnB6@@k]È6ӋC(^;gyѦ0 : l+Krq|>;goy3L;`  RjN0mdSx3yEaZ~G^;g`v @([q4]t =ɻ`(+ a(j.w 69R˵,)Y$jNcB+|3 PPPSPF$W%.Eetphg$rC:0>Wi)`F)p ls@ct;'ҲQr*/7e}KW|&0 pN@+`nF1T.XImou= Jf { W|1L;`  lJp38[v@*V:ϏP\T> ׏iif :Џ9'L)Sq=HUn`-ᨏ% ׷|В C#Q X|%4ƳO5&e?u. AMToN xi@@^ |0L;` H @R K,]cmąjd5Vsd&Y$A!׏|00G @O`&P@&Kqog{q]oYm2̰`Y9uL]ma[>h)XvQAs4mii$C4CUЧKm+:5gW4fsPZGhS D ~LHl]Q֪=$z$*T(Bfh.!% &&4:wL;0 <' M0eUB(۟*f sK#H8qft{OI}ԡ&OhY(NwM;`&$ 3\!ڀ4@hq#"3arϰp= {(@`Ч`Bwf Uf"H(SZҾ|HRET72~(RN,J+&lI t$@&]%*T4wy䋖N S$J(+qNydDtrؕw񸺲kL); f3&hp/8~—wy6@t| DiJBmPVU1.?u0S Խ@*9O~߭jILgbI mTffXw׋6 @t1 `0H uYloJY:W`.^3jHoܔC -A>)ʑWRIB aHtǽ wGigg$r!aWRؓ}M@ 1wuqOmc{ f4qEBTҐ"r -̓[,wG>( y`'$P) E]G(D!LbQHGmnIO* m%qna+x{h QD#8ȢoH;=uK?>wk>pi>nzH#h*gt?]&aC?̘2ɏzl=C?ઊpŁ:MM\vDPN& Ԣa5[xӓ NچGH~wGiI _!*ڙ1 $$:cl lv <7s;kGb׮UL'J)YL9DjwA|#RNvF vyu0QnQA:^w%|ᦁr3mK#! )?Vs)֍X^ME 1Z,!;-$zzj# mElfcFu "h^kY(+˩Be'8wq#`INb64^wg(S DWErs u:9Z V<.+/n(8o4'Q?~YbKlX۝j_6Q zrtgwqi)9CHT@QN(=^h>w%|R DP5N)@mgw% 0P5˘sFO=~iı^IC+JЙ5}Xa?3]Tfw?fV#i 4&2:9G^4s\T~gA(s.*=JC D|īپ&h@^Fv@ :inJ(?9nf'uM f_7j1 ]S+dl$Ѳ$AźSiẾTc *q@ЛAy^Ld6H^QLY%L)+Zf 7&%>@;`=5. SNHA %RAy>4πn%UUb[͂e#n{fyHG{ αl":\AO]y_.ʾoqU2!Ƙ*KrO߬M$fM;UXxS D@9r(z4040 MvXTLU!k0YU3+H|oP ڡ1>P·n.yR£+!\ 9[IvesyB!ƈ{h#J%Ed3G}&`dC3 DPUβ g$C(0\7o{ QmҚ*~o7Ǭ}*5VJauFmPT4oCݺZ6^NrYk_ܷ*ChfmJJeolvvq~':$OggS("}Nöi̼w)!ԂG.Ha*:"ohڂ4ojǸ}R刯"tCBLX0iɤv@]y U0Yת϶9'q)-k1ԟ H ( Sy@ 2U-G&s^tJ#!49EjHӦ+wi3=1lﳧ)Q;%@O+T Vw5lFz蛆1"9%@\  =tWVOpFPE 3fy6(@^Uٝwn MqgD+_hf.Z{Nw~\+<U7ʔQYyFy(<Ҏ 'X% Llؘe|;utٵ(-IbFCVX6tޓ:llcDy˜J` zjVyIFEs)ZN {8a{*IȩfV )1G$ Lj8;I?S=HtcS[Cڝ q*d!%X>eJ)]2_Ji!*;pT^i9w%vҀY@UniF%^oD7 YdatVFD*$Od{gX8cl-gR&ݛi\f=NHɼGƊLZz.ӎ%+b41Sd}pa&TA7E/ i^児R`6g&}FBP\¸ς?efxiQH3knד8Y9'vu<ǻɖt@gЛ<2=" tr6F8E-?: LVlf.wyO&Sڀ?Kiw?څ1  D/@VY B $01Z] QbM孫^ӡn@#4"?,$碙xcdTco26M `fٜ!p&Y7P9d]HYwp52(&zfm @Hbmu;HXՑm]54A{GMɫ҈ 81)qj>Lrnٕ.}XuC/ny}00[0Yi[FT|o* "H`\E]ЦxDdҺrԉ)w? Kfn& 9\) #aRyT.b~=:s j6]HcM.' z;W?I"=&`N.{\ K"H{0d[y!tn<\v ԦS6K_-l fY[FOٿCݴ A>C,=nh\ܮ~I;쒺z}|z#zQVz- Իbei>'ά hˡ+$H~)n5$P#@4 kE u?O} b8mח0(%VM1`* a#Ĺ<1ULy,֦LL) #O ib2A ymL-#nku^S=RM;x ! /Q4A*^)wykhUMk |}Z PP 0T+C݃F16M ]tA59 nR}-Kh%`u;bݤ4a@wLC*$00 ԍ\:LU{ n;K  φ=)/<뷾Ƽ/ZbV2ӵ0f-Ͷmah >)wy1  C*PpiPHJ 3NjtlmO54؅2 0;yKQ.[("yuz| "S$/pSz5ѠD+^j?A7'ޞMR22Q E)ɵN6Z/S\#/[F1>gnahYUŻP`q+C(ZP tغspaGd sfgFUҋ`CAF7^]tNV]Uȁ:/!(r QsT5,. Kxjc-ȖG[>TJ: YHP^KQhtPDMPO^wiH`D/@UJ9BD# 1mD;L~L{ֹ ^$a՞*?iuu(JwcHRB5hy ni}hV >”6oL.)+xMP^Z\@7U{<]\Ûu5 ٭+ (˩4>k<Ȓ=S !L `Urw<@虋4Ҁ"#2mG&ΥFu8(F9}ŢWKַ'LVPACVP'MFOy sfg[Ch;o69g6%s%b$r·x)LЖt*eUKWcN #K]˪u-h\> v@`& ~ je8a/"gNp<8WE3yqp.[&I$fAIjxΏI @tnՊb40HCI\wmcU?jSh0ShacԱ  Wm@`=}*@v@[ӟD}0;Ɵ`KzBB4xY^hoW2ί=w /b۝WNB*Ҷȣ[ 0" =^Cz=Ԍܵ{m _Xǻc83nEɶ3FTDO^1OggSj(""ܙøýŽQ7CEm-(O{CF^x5LS%YZy֜mvIM'F욐Rv$g7q/$hU9n.H z(յ2[v| cZcc,}IVn$Xm&%i_#&$7≦տ~c5~ +#,%a?1J u{RHP㡳 SG|U&aj.IYQFPڍ Ln#% W윌zcU#Mӧ4χ'G8JWtM9bs"-rK>2-h TdzEhĀD0+}< h*w=gy-t; _L}MbRPՒ T(]; b<JL!PPBIX?ftג~|Q -`{8.5>o%KS\uad83Jq֍ve ;䷃sS 8mko΃y5RuLQp, L Jdy 'z ?yC@`]9_đ@OIE!~#mBӌa6Tn sW~B]U^~Nr8H8V)^_Nso5ýiLSbr}i]ȋ ޻˦((e#U#D¼}(R&ɤz}95rI!L ` PZ93w_a6,o?]#v!z(G" 1?m@6|a>iZͰطf꽙(dʜXf`/τ7RU/,< m{"#a8+i k+&GJjhi; r0T ɲΉu5N:H/HL*7 J9rwIBr^vl)Uض^y=%w!l!\4&2T4tӴbl?{>AqrRXYuska](uxs9*6,efL`[Ԏnr<45/kr{^|]7n&쉡fMGnpra#(ĈKYR⃱~vSz,B][R$EW1 Ofq7E:kk7Oe  5=W^P)E ;KPДiJ&:D6Z==-x]Q㫎3- p\TQQ}[5r] 2-KMDFt6@?XVL %QߵT;l&K7g!ܔՄo=T88(Ha)z~][^Z.Vx#ǨIuU¿lK ODLb&tͻ9_+%}HE ~ dUU٣D&:1%Բ u5g~2F1tXlV\yq׶\4 NK09p!پ&=Ga[ w k48ѹ$cKdB-1:h]sGS%Ҍ{gˠاT~/*mceB<#^,+VQk@~x72j@`Sw)k?G;ɻ̲w1'leHፙ"aϏԹ p."x/G5SX}X؎{Lq eHo7:vMgWdIH졶&:%q4 RT:ց=ƖcZN_UxC6 e:' E9yQU@V#~66CX^?קN(a CØ|jvd^Qz$(Gd j1q~y~ wĤr#ע/]nb'.$vƝQk"mʇDx|7 dMF65/%Alta~]6 !j.rrcԫo[jB[XDn0vidh%k~wWstRS&nx$,X va6pW{\Niw&#ECe:oUR.Q1aw2*zbB`^x|nL2C٪rET S=8ͺZn#}4wx;@&2agƢl\QH͍s_´;8d|ޟxz!*u GJơ.0 utdF2usZ{eX(}W2K֨I< n&!(IMԼVz vVx-K$FCdg fEx>h|6 d@Gl;(&X=%PWx ;sV)3 L=e *l!F<}Z91&9Pێ ՇA3 sX­w#kmY\rs!LoKk(ܖ ^jD᧼^~sE3n]\ ٺX@OggS("…Ǿž>h]|wU|N3w `'$YVж;v!4f߇yxhV{(SӇzzT 17/l 8zbuJD{3&i28B屣.LUB}`0H:\GP(GBS-gnK.\,hD9V2`h^W~#AG"VU=\tZ1 M# R9y1 𹟿VTRgD+ *Nl9uDt0yJ}'5@3H* f'x=+H7uJX413hmr nfU(?o'(}UTmLiң{m_ \(Q"ɲP7w ݼ8NZKlajer靲=5_ o'npp!\3BI RP+:/*tW@/LIE<.ȓ(uA}<Q ?I@95A-oh|6yhYgw J Lfh]TOZ)𙍷mYUrQϼ-^T3K7@RPKi07Z %0byE1?YtӼYL!Lwv t3AC"2BA=\TO_~K-^:")b*HC~<~dhz63"`cvl0g;@\Bi\h^2oi69: ͽ\ahRpjZ;t~B=ՑV"k,XKUИjH`"sHb юQj iԲmtZy4CSYWhyNn0]#UUd(>̫%U?=p>kS/nLJr~+[kE7lYUW4 `.@hȥHsVeD&1dUÄMZNiۡr y%vf`*}B,j ɑve\}ȷuiHċ.AWX`Qb[@Pi U0̏nI3rX]WX,-vmRKS$';Pe8JE>83)89OZ8+^c^h|;-}M6M3]Ls؛V潇A~v[Q!ݼo-PIn^=kV?Ow(Op+e"=O5OYJaj^w窌 x/۽szsVBgPDgJ ,+#k,\8񆧁.^/R3ݱ,dv!%Lh<ַ+I@QKiymM_ϱQ;fH`s32QFTb.}9I/߆Sψ Ś3to`4V,7ϱ'G0T3]p&g Ώ+gND`C̖sΞ$*V b7j:U:peǬ&]+fvq#yxҳV(auRU ER+HxC|ŏp|,ѥPL>L"PW1@:U1m@S`tC-Ebh|6|Y9W9}I4o]d*Sуp썫(?뙉bD:/gCѷ"x-u:1W4]mPM詷^H։選EjJNOw\ ʹz:zT, ^LKB,bIfٕg fMK؝yV9'vRzEf*2( 2\.?!AzKaԚ$pt6Aq^&%dUۍX?TJ H+(3I5n܎"T+Uӊj0&]7Qח P 2{>8bS $v4g|79oYiU3tfgؼ{z>7uA 4>[ݳۆO>툱ϒ1ܿ3>hVMyJL `([[;eЀ,0uf`j{|5C!Į#<ŎT}[o|o+%;NJ}bcǂJO;;Qv̲޾HS~g|3]]&ٝQ_[5SBt%LY0/+o-IXS<16Fe?l)Xq(x5ăD*O)ؕ7:zut<0XV6ݩ8Pϙ[obP+ZOe\m%?4z9CW˨޸ig|c٬E7bVr܍zײ.,^xF쐊kdHg:(HwH1'p=Iw?Q 7bE:Y?ˌ: `N-wi{XvE3eyuyPw^<6 Ty`eտ~;9,䪧lMz(ӒT˒]gJ `Z΄9+NrJ|XwLA^IurqUjΑ{h5"1I[;pK[tMgp쯣*?F 0иZ2 ʟ6ST>|AQu7Se3m QS3tK.3ȦOW+J}|^LmUWVgNN4ggf{Z5yu:O%> -ڱ; 5.wZ׸},9z怲vwl%p>\wCIỚD\/va>1fVofFq? Z;8PnCt*&4y.#ùb %X+nc5ǺV녋'gN>>?6a3eƈZUn|eqa\q$(6wю{{$w;l;pL=+.y^. =&3QLq0ZVm|?0ͼ 7b-܎*V蔖fmhRkyDO4]}]Y:X{UU< g|} b`QWΑ3PM45t8-j=m <7D4 Ζs:43*#[W!/U)"5IC}5 fi>6%&OggS("½¼ÿȴg| xAHlZWGF{]^v6RVFCQ>%a=om 9kC>D.gX'DD|̞oyyt_46K=y 7p=b"ұkZwW\AoEJ'Dnn%D>hdOѽǥ#v}d0V0fSa Iٟxihn4`"wTDjLqK$Ftn$J--:^gt#kг)jzJ2 @~>yӜti~׸0s5߽>+<1MApv#.<8oXJ4Vr#JGˡO랶2 2O6qw: v~Ep `.6aE5iozOK/LLk0Jwrx,9\鬛~W|bCD˘ 6"Yͬ9lFp,ec6#Z99^M!G 4^| HQF@|RVB4{'4ozr39oX9͌ n'_v!5=M_Qf1MK,*xj` ܳ/%'rw#c^&9ϩeZU^g|}d1 08G.&'a-yx3~n|Wz"Zfb[R+nd /^ȍq00v^3^nƷFS^|m$Qɩm"n 4}D\D;Թ>#=Y<]G#h(v&p̆ ~W|ȷfю,Bhx>*QZ wL0[~Mtug|>1&ȚFF ̴9g(B}R_J-u}T.Q%]վ*P<%S=u8v7Gt3UF{B1_ jܹ J;O GEHoq6ƫ#AYwӅP=U]μAH5>g|>0 *>QJ—PrJrpX߿O q;RVuտk #g'ChP=0ܺꎻy&2~FB$M̹,*M&"*8ݙ0.}5VyH o3:m2#zr< C^woRW e"f~g| 'HܶkV3e )- v/=t,P-E@;n5fvUqR5KJpF!^~/3.zƘK~h_[ruXd\['%lJyV͊R˜mr?/&y2/[Gmr^+=Ud: \r'P,^W|f{ܳRH\9+WٝI!ӥͰ6~\/br=Ut[U13((C@p]ZŻ~Cb`XW_#Vg*@斏 v)jkR&(a8w& ({3d:p"\Ѷ>g|= v$1 AvwwPVj&{ʭwΐm;9)8 G'/ՂDhG /԰|r歉$$q;E V 5KJG!m9fخ:TMm ̓x_&Hk*r;Cn]2Abߋ7{ Ɓ>gaa !ݰ9GX& %Rݱla 1(lp_܊랅!V)\U&vcTt#T"⦧CX:㨟|Z(T-t>1r1ŨIp'uƜmFBh''iAHF%_U.1vt7>I#SfrDd;Ic17& ٦jƹ+]j7wRZ>Xh `Bdt~Tt}d|}K ^ȟ/fLqJI n,Yk⚯ҋ siwܬ]rmԚU8tA䦹=pn(ys'ʺJ2ZE׫;{ɐ,~. ].2MaQE~nExZ|Qs{n-Ux ,-2ׁ>-,H[L @-8ӱU 3lmms-1.1.3/data/samples/drums/kick_soft02.ogg000066400000000000000000000163361247673406200210330ustar00rootroot00000000000000OggS3" vorbisD_OggS3" O-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ&զՙpmՓ@hYhk{kil*;i[1eJksitfM٫N[r/sZU|{9C|4ێvz%G*Z\"uEf+*4jKi`'P|LlHy PTKȨQh}f3|RҨoi;jT>NL1$R(gc(Kg`b P[Ȏ^pِBe"X\\t"[(LBQQQ[ʍֶJSfo;XK]t[sUzanItk_2"b/ 3m"t^+g`v` z2xr>66 (QA{O+BáI}3z\T09>$tcA})>+M; U)ԧP XR)>aP~٢>.rVVӢKCF;G=`qUWM EW‚ oL> L; U)D_`( 4-dIQ S%BdN{z=ֵhY{,錛{ *A;A?#*TQ(B<`> ׏|D@,p$`H C@iujPaUi7UIv0y\fr[> vӦ0^TO',JXڡv̷o|f[njgMܒѯC۶l\Ņު/YR/.}p[g8x@  ׏z1;`=^(`n" 06$ZUaFK:ca9/4غ?d>gE`\\i$E!#lRyY %}܎ǖbY'ÕWҠi3g:9J.~om֢D@@t=vQR D/@U9%H` )$agz$ofzx냺Bohqw?6߶1FpR^;%%7.o>4TOmI#JkoCU L1PbwL;`=UQГبk*4C Ă P?[4."[ߢ e XѮ"RǤ[B~_ 6NM^ Q~8*3IC02p&*SY+ĝnٽc?WŚͳ1ylH]DJXMZxL/ߋi+gVI"JPF2wy2@t|@} C(Pk<321"][b^=K1}bKiԶ^GdX.%XZZ( @W8*AF ԆO !-H>ڟTYUǯr+RCd/lYHB/Synų}H7RRzGκ j@Ա$ve Ӟ4~wy2 D/@kKx#!!!a1,̝xur=.cZhsZYE;jXg*1u8U_)0RJmDbf^2'zwy֋N zj&IN`X2,@QQQQuEEEEm9zaOь'@y1U.5dݡ#W8' ͮܗz@opL-ן^V.s @ --;d(®h ZIކ4jBi].`Ќx-niǟزQio^L<岌#_U_ۄwb@PwC^ #p;7 H^ L;`=.1QUZ4 jBӚ·]=N! ;47>@ ݣxN!F hX8AjZzwWD/@U3(kSJKF7;YJ?xDc\D6ktg}}3%!t! /SC{@Yˍ; P5SW~*Hd2NQE¬4؃{hs8BFci Ƨ8%nlQ/h# <8JTN"'pӵ_tSi(\NSwܠ14@iܣx(8,+gh(y!w"D`/T]er*k$Af6M(M_Oj$ɖA~/}JÀ}YBg9w Ie'A2~=>wN0'J~)hʞUgkju_^H=ڞ=뽶YO-TURPU5=EN**uGc^QuUEd=/m76ٽSCjƫk[eHJ<۔X+.TP#A+<1]!Bj}PއwA}lffKG~Z/s|"auvSss5 Cwt^DOax_(,Ju|\0ߩ%#-|'[0UOUD*,#f8`|җ6YB>=ˢFqu7̀D *Mlmms-1.1.3/data/samples/drums/nasty_bass01.ogg000066400000000000000000000136211247673406200212160ustar00rootroot00000000000000OggS oc(P vorbisDwOggS oc(Q-vorbisXiph.Org libVorbis I 20050304vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4sLb7tjǗ/Z6˴{{.F7?OS_h3*0~QL?{w㰯$!uQcm?ԡ|[ ~,wr`Y}el S={գnSM5ʫzg+fS?v^0U%{6Z)ߨ>v/oƋoHӛ*=7}\)ig(NcTd2~![0G7~!qƍGY(.3=:UԂmQ4)<;f?W&LneMpixI L TZUR Ζb=r)g7 ?W%sGSRwx>VM>Rnw!up[sПy͹4 2yǏy{G‹xAa暙 ThQrRO KҒbbi[1RVD^s]kqbF 'P3y"F脙rZ >OXpUN{NM 7 3oU]miẅ]I4m9OA\xPbwy WRdgp%X%lz9".o(1~QLMN3R,}w]KW҆r?QA䡵,jC Ph߻ f(^$_7ny#ݎɷ#nߕBcl}G Z XpV5VǪ% p;e#W2㓯_|&ŕ\.mWB9^0FNh9˸1&`A/y <\l_W(}.S wa)Kn`J³(()1/i_\Dp3LMMz&LMMu,*Ɇg>Щl; mB)q:*X7'Dk"qcO?O6/kP,MH/QSݻ5Kp<Ȣph|590Ѿתͻ4XsR2f^;.=ބUط€Xy%V<'p}6 * Az9%@mU9OV+s>ڼs`jA7M}j &7fs[W PfnO$[G 瞌?O 3"h[?omk{]23Yw:Y WEזҕI2y$  1ME!}^ѻab8ZkWwb3%m\F?E 4i =u5r~ 8\dxozUIib^¯Ә;t~X-㓌d95Bzȿ")~=1e5\p_9=f՞e-DY f woTp-yBvn}kXA1`M+\֠@i@$G$q:T8|p]hj T̼WȆRY7rۇ[T1+\ `?`߬//ҁdZU1j]»M:j4oէָ9:NP2oq&ֳn3K;WeOgOmK#ʲ4ڍ|%d{QKZts^w%T|T~#j: sGFQh>p>c ftXt6Sah&nX,N'啭-bVc4#vMQCp^8-OGu}sY^ >?Ϋ%VIlU oHcCu&aHg[u{ agiMLsh.hf77ʕ'PSCE׃ 1Ȼ2FRqYNg;:ZɄQY},a{`cFi_`٭lq˫SB́UĞ 5&TLpJlhӪJ 3^=,<=0_ĸ${6aqQ$g;{٢RS@T_Y*tތFO@6u2^_"B6 CTԂL$8"S .4;B]j:0(Iơg\a7Ǧ`ޙ  O@[~UѲ$M),|Il'V?NcksB"'gOM&杓AknGh#uqs& o~v*g`%57.SjEv(R=E`P!/Zn:+^S0D}&nr$.W'i1C6 rSYamؔ\2\RLвpM>ʴ)Os &D2/i؜[gf>|]idMXRK_y`8MY>~X? -][79[5ΔWJWx= (D?VٲlW]}vT?Pm-4/YOٟL.ȗ-r-@Mً(fأg2wi["]RľiEVH)J:cUR ֊[]i>>eϦ36>F625bk譌LmqZCݛuI:)oe})e#Xr6dꜮK&]]e.ULK-Z2٠?;ȽJxF_-L&PAe ~q=6ZL -+!Y-^%^ @ @?,3A@WQ?w0o+EN kR?Z8YcCW 0c܎l0muavGD%i3i0n7ݓM6#iS+M.#Mq*KIWE'z?~JN(a ")\oeU *׏~ V]tTN.iTy֡KDՁfٲ7 OggSK1I|uؾ>)$@x6b îB&Њ2w,<j٩"r%f2uLYcb`M-^Jp ن,NX-GQӃ:OsZ D~ v7EɈz1,F]=eDYCMAw~\{eI^WG)|Pu(Q?eߞr=FG! fTDfy]sp-GBӘ?Ȥꑌy$:lmms-1.1.3/data/samples/drums/nasty_snare01.ogg000066400000000000000000000156751247673406200214110ustar00rootroot00000000000000OggS0J9wOvorbisDwOggS0J9~;zl-vorbisXiph.Org libVorbis I 20050304vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4sDRDiՑ@<6l~jeu/3nS8F)MaJPJ䏘Lj9R[zlu) \J(73COM_V y#)zQ<=W&]2ުHZ=0@О$/^XHzzTCC'<NQL;1ˊ_;3bo(6GTy%ܓs,A7/>7R=@ҷib_ɸ-82VcuYOTZ KZln6J a&ϊbNV t]]6K7Ru*TcҶ$,<e$T0\R DI_#GFU?!٤l"2Puy NR#qhIP42[+Y{|[=zk[}ty}f5--YAސ+$3 JMJĈ5~sQ:wRI7' M۵hD+H+D6G~`eVaG;Hh~2"йWU7aD[.Z3"PzBZ]n _Jtl =R)f흞jB"Ct 0~(:ڮU/c>X8 Qߞv~$\*.Br͏J$@svE;afmS#yS*(&#蝊([Y0i]Qآ JA5KbW:6{ܕpWJ[%\H%^1peWq6VЄ;Bc2EK>ePM ,J8iWvDvJ~ %CG-c*H^v w)azԟVÐw%˅Tόٰ=X8T1c!L^XRh^½YkJ)(Ѭ݉HIߏ$|`g֜!ktIp֋F7qd9\ܐ ? qO v*NH&"ZUav^Hp%.ŏ>ωyn+aDq6 nt{;ݽG($0hxw_MLM  ͦ_톉A~Bɧm$ 4qS)H$&\*5/h < YÎ،p Ż :aK 4ypiuBSO Mki 4D ~:Do;WmѠNǪN u'n[ow$gNl_mA#K3@Q>GFȎXd+=o:hۺֽ2JEGhC%V;$#^G.B eAC}p(h>C $ֽtV-8gO ydA A)Y31Pc ~JiLf3Cr s 2mx_ -̦(V||y|d~l w[t؊h*5itﭺ~jh/ 8byˈ ibG̃< ')JF踢+q۩7_yXzjxs$DV.5۔J$Uv8TK" $ЎiUjLHa#>AJ+)[m%gw.̴Is]̪OZZ=R]Ml½ (-7=MB,MnpIdR#EB =S~lb6gA_I֪[,#^4It;cv_'INLԨ p1Ans^srVidˤ tUnh=Jgk-<,NDžjt"6!$'`$clp J:U l "&y.xbT:a (ЫJROnit<Bff*n5χkP䀍M@so͠lyNiYOQ+}pFˌoL>~%~d;/!l_0 `ې-͚V} >.\, ;ݯde`vݻwV5JǤ/ͧW^yzV0[|ƳyI @Vz^]rÇWKwlmms-1.1.3/data/samples/drums/ride01.ogg000066400000000000000000000404251247673406200177750ustar00rootroot00000000000000OggS)"'vorbisD_OggS)"Q`?-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ;chy]99&h#{WK$Ì;W\ʼ1um6ae9ރU 3#Xݼwմ5˩5c5-De<4=Buԇ&O=K/:U<-dlR|hDJ Vص+IZ[cLcu@&)!iF w,a@ .XA͞ MӘ>%Nhȅ^(_9f|)CV3DkNj #$K~dmIFeWΘ3Rl#y=)Sj d+ExFypoѭO{q؋ ("^_90=$W?Lu&HW=سz: |43mA~f)wT n*QilmYs՜8Sq֕c=ڐ/d%a<>ص0+Q˨uE,K3f՟x$s>[Xb`Ht p,T l)nHLȢЯE6gѥ%YŇtEv ca]v9]miapq+T-HPדd)* \o#0+=kYR(Dp*?s 쬉ZH!vEJ ;0AW8Ux"H<9R.+^4 j]7ET'i@@~RqCS=hJȔda&'E^U"pyKJ.@j4@&:@c4mh 5A@xցҗ:E\ԻWwuõL5>$- k[yA Tν ԫBkKtoO`غ:RzJ;UŢ\Jhӥ}xx?tZ$\m@8̙[mJ`!4*Wۋ(&q r/4NLT+Dc8aQ-`п O15"o&i > !b=]uV|4>:sYdD `GVZZ&ѬMV1&:Zfߏޫ`|=-\# UT^R iad*kir_S9L@(,XSE0&L8F33 gM/&(D.RJW9\]`8c fX[ϠhFm$ >v?y@ k3'RǺA]\}QnxK\L.r \y.$OP Z~jf.w`x؄zVoj3[%LO!YVʽv[bZ ==YQaIh:mԀXdt+VïSvWFlPQ%H%9V) ]/+A5o^: ٽQbjr&/hT YeQ\ݔjyvx) "cDZ&}n1 1IIm&-s!emO$>5K~ @m.Tۢ#vM!Ht!@`arWA[㧸ZqKAB;z׉Jm oMJ}ylԱ{fno:O[S,˪;By`q[{H+@ˡMsI6R(^=VcXgMKkKQ/&@Ѷ,"?ϴEخdžfej-|ǎ[F{[Xgg%6pS 8hX'x_Cw0 hnH9*hF`5|y@d@x2 1c)*@; wWYl1n]?9ѨM JV=Dʩkf^{OHԈ=`' Ё@$>¦$5585 } i݆S }c]{=,K9 6ȺIׁfjp%s}oNQ߅sD*TZUIIF1>ByHvq5U69Kp=hиH\|`BAoyP"74 s`(#|+¨ڦ(CiI^O5Mbөig}AkQE !q 3U Xݑ-^X q6{.!Q&ݻXĮhCF 4<'kP0-tCW^A]WVIApQ7 tA($'}HZji%RVZ-Pr ?<umj NDnEɼ?[†Q?? ,.+ַx8ްMgF_|!],q"Lz8~n/X[ ~º h[.)уV:)0A+I&v<2#)Ith-X!$1PB3kQ`=a dرya$#Ŭ "f^SY:^KʢElk@߼\EkJlߧKSIlY ]y:@]TZ;o9faZh_*ؑz86Z4 <=e¹x!HkI-x{iдp,%}QЊ;01I_ ul~ bm1$ QbW-lT!ikFI>{*1 @,Z ЖTғ>YBp|iCUyѸ?aBT' m1G"씯YiA @T&U::3 4wx~0UkV)\ _m_. o oUw1J*lPr\-XA 9>z.js贈pf5[1ʂ ߋ/Ey8PpP F rx XU@<T i3BP)F} xAJ k, @[C $X#D&b*sw݈s:wzCxO\NMԧp.ĢO]$H-~Y`qUP۞cym7Y1eq!  0 H q(2 8u/Wj"curhZ;<,*TNujtܨjf7z|RB3 W$jHɺ #ʎX<(!]*6?5cBC3h# x H iYV(ΜڏCB2! cCɄb[},xhOuS LbXG)i/JħVuq=`X ĵQFt<λ׍Y%k SWrix?5Uʁ6 V [ߪI,(L&XR DqO_z~変POggSn)"4!(#'&(#~8  !]G~4NϏ @A4tzN$Kҗhp, Gկ.K8C.P=6,h"M ROe-PSrMM}llD8ꆣF/߻rXxUB0P(*>OR̿=@aiܯUlB!G=Džડ{G:j ~û]!d2(m\Im`n}l`Ft7/[42Xer53U7-6tjN]N%8ćG)Z v.$PX_]~߹_T>^P 4xDQaoij$:LZR~=b(LAŠ w}˱хϼhЀ7ADXE|>1LRWfrp9҂t+'F)C:|[<3Uwxf,W8ꮠ -8@f!AnKm V]l]肑:@,8dL;-];X6ȷr㾷EM9V_D\< }.bn*(rFQ9*( BV7~^Q ~shT ׅYakRq7Hǥ177ptIA/r> !6m^ϩ_b3#o03f= c-!s"mhXo gGo`/"C*)A5fz@ ^ #HxMo |@P+c H--OO@o !4@]Þ[ppIb/z,LPV]7]q* bt-2g~)2,kp =8$Wb[[ޝ؏ <G$SZ bS`% ՜RxF4-J0LVj3Noxh\3PےQD͇gfbj zq5Z:+ƷJE*OCʽQn(#@xf꧲O~fQ0̏ ]S)!BJkvd% ;>D`X4ԅd6?P"me/2VG=y`3#{s@n4@, #5"?ĝOhQƤz[Heg ~tPK A'RSp:+"LPhzX֊BV?, hn-#wTCT/L1 (~KHK`S1Yj!VEf[Wd+Jkn[^raLC=1X+!rJh1$FE%4 D _>-"HyR DřzI ͨACm@?o A"1Z&8]2)&@CwZtj61쏌 b$Pyм,z|Fu {7_}4Nj-X b-} 4 a> *bEDH\hami @Ý5YQl_L-Y; qg\&Y Nd E(w '8#j|6ŖyЩڴzU4¢R{S˨\ ,VI. Ch.pQOImG.`< :D@[zl i$EX5q]^T !]ESO lr?ZŞWn&p*ʀ/Ux垃X^Ғ׸ /oDFgzo ۯ:O\` {J ,t.? +XU:tL{.o$PD86m7Qp<+PlZF.4q4ȳ bdYCMD)@k3 ^MN}xk8)swQ87LKxzɇv# cU6Gu5 0ҔWXD`8,5}SVP Z֍ 3_tYp*.@~[3L"(0@=n > աwg VJ# 6, @Bp$fk$)*83cQ)>airȥvLă7Iý44Qs(cArh%qfu;1ԁsuM1C[3Xn5f \V:+\"q\d#P^ǰz#fᇬ<y9{S9WItIՈST!ɣ2 ?Xh)?bdvOy{΀;>,F< vj=1 \ Ґ':N@ϤMrcS9Kl؅TYmi7mg:ͺ^Zi8jMkki!} (ʐp4}Χ^!A:N ,R׽6#C QLwE[K&,_Ìc(mk ݟJs`@^Ǘ946K@+g2#Aw+aOggS)"|!  '))+)!4|b\ 2>,aǟ"\@(`my.,xf(`z^qIX@ EU̷[Z=/}_H~{snNb6.PAJFyl>\oJ^\V B9awr_0U;3ԲUٷ. Jፔ*T me{<\`1$`&xPYn4뀃oE$rgJp.@ %2EN!Kd^?C%%@ Py.@pЧw.1z>sL&Hx\2tpPheX8\R()AlK ]\m't\@bpD⟺c՟EhD]c:dq5IX D Q煮LuD_T-9O/.`e5m Y& P,XxhE(C@4@xԋ(` QxA]_fyX?[iȠ#$zhj@2&U`M2^, `Z_#ָ`$On5<,  9@ ̄d$R?s:ޕQX޹K1gĽU+ (!{:w"I^-VD@2fv-T0CesʽC8Ȉ8VxW"j_6Bn? T.x&U1T5{: oNkK!} `12:3Tz=i[_I(CY 8D:X2V3g`_6Lq`m,(t˲j G0@`j2 ~I> 3Z&/Y{l ^c@NR1HH)!*ɿniF8+1Q0<(wp}ȱeiEy 9$#% i {m1 s#2&[:ReBpZD R #MS Cv`GsN )pwcat ] r(Tl!@FZ ^a{^` bbF"% 9cPۥ!/[>T!M:W"t؍W5 ]`\_]lmmAHYe/6P߯V@>wĠnd:a׌<`.VL]y`-|iȀCY/G}%a9PaF8-nm(DI9/huPm0dD!TݲE?z+ nbxKL5~d"qJ > $<@m.m,? =F2Xҭ @sR-H34 >K ~C7;7hToU59UTz(5]cP-*"$CK>sQDߦY<1>(pg;MLk-:@?A"l. pSپ`BeBsPa*"KET3rW On{⧔<SACxdG6 MVW6Vhf-IA P L P;8{@`$2$_{ #_džKm?1}/ b=!U{bSہ\3䆈K(jްkCM Goʘ:*uu=;ʐDwkq,K eZ@(JK{oE|GlU q18B,9@ IDš2> ʙWH nڏr &\e>P4LT 0 Io >,BC S0Be-:ϑ-O,$pجV6Y,N 7MOt (+CG;xJ߄qrJx4^-ztQ^PC2mMdn R¤s$}v.HGȁʑE UXjģq%v("mRR|կ 3AP'd2B\079Ѐ% S |'(򽃡,%d.V+s<'A> 6PPo2@ACUI'OHH b [hMXo˓wnH+Q7P]q{E5G?SUizu%m4ҍ& )EjB괁Lޒ_ݒ KY 7Hn\.Wʣֺ~n?W.W[y^@;3>2!CnIжRn]KuV̵F?|S[Ui0L tTU:h.szP!t}#C;֪Omg"8F,F O[rz4;V:O@)S@aSRkp&  GiF"g=ߟfTGL̜%1&P4ܓk_%f3BBS]$4%= b:hZ mT .أi&^u ?qBcSVWCX.S?Jcz0CA2_,#N# L7%GcׁviD2/  k$3L򜐂%Pκĸ6/ ][7L@jMtc:mX`Î HM%HB¹E **:./kg7^{\ԴW) f߆6~ x[딛I10Q[-c>iu:X #y[d'},T+hIf)]#yHeO0ƿ$Y T :iNuO4';P ^LUDſک0`"P5B[|*z|` %_ ,ǝY)q(08vג4e*1ҿfRJWN9N=Q @QJYfq-'qS@`RbD_>,BV6\:=ݕ/lOoN_Disȋ; `z2FnOȿ4tf)^ Ma%)L eOj vTlsh-A( &b8VH室m3JoUVCRo=?.T^>KrPA.>VJfJHhS&[*G`FOkޕpHO9t4tkҠg]xN[D_8 v6ɗK9`o,:;]! b-DH Hn,% gvrEX$ ҅i3[)_L]%aC|is&c TT+5sHTfjX&-2S3OggSg)"F303 ]h\Ǘޮո7?os*^ sTvݝ_tJ S1@%gm4stN^jZB[ 5Zh[-#$(}W]~Grmq l U)+b39דCO9^AMtdƶgFSwnhxLViX<+۟^{<g$ziN%Tveg9P-# 좗{(K迗` րQWې6|X,.n(O_;ىÆQB_]txR7 ;@a'F(Vc{u-IT%U^Aryxǚg#y鐛0aDe^CCدZ.Z;6xy5se0liBŶkU,ԅjtWaiJ46XlV?\41w DU f%ҝd6'*c^H"=ɏv+9:UBӊ@FaJUyoVEјEbWVjon;KBs%{x̒hj# E#-Vv%ЬlRgHKIfHAI)TJHsV-#$/J%wpmu*Bh..gRbGIYLmu8G=|< r1 gJFAja~'7O_ytj2(n$&Jqw [c4z֯2B@ KylGzKݯE:fL+ҡb(5( mݟeK\ŽeN3`Mڏ`{yF4}Q#`Ҥ&x'Q%) O7Rk}ߵ5h;D]:+po|GϯV)"x[n FCɲIkuD=fd&h_tM|}̤ *y|?^~9cƺ1wًT,9 &{|"X vB)Rv`qer$!t>R?%^!cJں64\GčA5H#;tal Ҿs l̩)%`JByӟZ2-Z1%d6P[#ٖ̈v+ 8/iQ(RvTv^.XQ28H 8 lmms-1.1.3/data/samples/drums/rim01.ogg000066400000000000000000000160371247673406200176430ustar00rootroot00000000000000OggS`9W:vorbisDwOggS`Y-vorbisXiph.Org libVorbis I 20050304vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s;Oq)ɿ'2% 2:+(d!M&h!+V><:237-y;e>[+O9Ew]zC<Fꈇn&riz/g ԜNPC&YT1ጳ|x&R ϭ>{l$< +Bi#_FP+KnæynGSgNV"DY ˜%s'-Ǵ52PӪ_?'{)j 90QcUJ([zTqsh.d4߶ɔ>`rt%(M K4K5ց0"ZtwzG wףyNwfmTP)";B kfI3.VQ=a/G=vP= j菂 `OL>N*ĩ!>"ԶW9KyZ,x!Q':^JUH.@AK ܎NVT./gg6׺ʜ[+^@JCgC>~ɋ鴂*~5A:څ{]ΞPZMatrE{{rzHF&[PS3UjL(fx eH.:xud1rt4ª2^e^@5rnrL̘vCiܬޥ+y^M؅;Ԧ0)>TH3mXچKrVldI-os aNVڷmc*%I"!IjxoeuNy1QE ^ٹnz,)6=y)ZeYa([[~(A!44rACR2/p\MF̿{|"KܖZ_S`-0?GfE ˹ rT&;̒>xae?$ AL}Cjǒ\>k9#,X[)>breE,XqN~gAMg||?x+@NuBvy8uxð/p&W0QD6<Gѷ(Iuφg0Ɏ*y2El-ZWŇ|bfPSfbDK~tEb N_0 gdg!Y6^YTHwcNZ(e{~▟cæ^py9z|Z*ވWсeʑ:!8P*Fih$Xs( y"exΝ`țik׋n:\%a=2Hi~goͲAܖU !P;ŏ)x#ʈfW+}\cfb{FȫvVYI ߳a2 P&juEL~v3uvL\jMɒHlHԴVX yߕcԪ8?qCe+-HHyKwWvj.U$ʈM ZiQf踜.`S)d#j1s˂4"aՕbcyv1|gy%rTbE8 :(RȋĞlԡ23K$,ԩƖIHK'Ӱړ-av˿٭-vwUeSS7.;L9Q{jJPGQ'ʬ&3TTx\؊_3k_P<\RvRC,)S@1S`]k%%|&;J#)\M7y/v,'&pS5 T) UrjurNۯSN08dBSRcgءͮJ-$|gǯ,UL?2FOzZЗ|LY=sw;JNkǝ/ղB͍\Sz⁉|5G(&p܅D сZ . "$1sRM/z+#AP0Ńf\ʔ)̺qpјpXr(F]lwɸzL}f9hYk̢ (+jϐ>G |'{.M;mQ*P qC㩣ZޥXsvl! (B@S !-rHrTn{:<[XP@gC‡8m<Z>xdoc0~t9#6-}Vjغ7- !h+oZzia!8CVTmQ+,Ǵ:q8"ďݼIv$3dЃ\2;1J6U*zj (-"2RZ}u#7Cpͼ%D `ao=FQ(zϤ +t-m1]a[L{-(3RKEl2Y(@Aӑ؆HN[ސ`E+T !D*a4h@ osD 岄 B9D;ّhezI 86ZXOe* 6ԫ# 1~:,ثثicnuGB 1Dz+!ޤFiSlmms-1.1.3/data/samples/drums/shaker02.ogg000066400000000000000000000126561247673406200203350ustar00rootroot00000000000000OggSq.gqvorbisDOggSq.gt=-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MZ!P,v @TQaՊ'ɣlW?u"&1+ةacc8BrSS/E/q{RQr<մnTӺUHE2 bj2aN8޶P1A}B[A CŇ1qA( jqH%gL۞Ҡ$PƴCMRFewd U3 ĊQ *# aZm 3a8G)(Px!z昤L" c|>U/if!Id2" C$~ kq:g ) $\Wq8w6>9m}:^[L`Զvl ޅ2UW5#^2hdE8v~pj2,K!8(8%RHN~''vI":ݻ\@'NQUU1M (W00.Jʼn()JwR')8UiM1&foqQ9>,m'IB =?sdרSvR2(QuB !{Tc>BXtW u7bBM-I\!dŚlvr|ia)CH )@$!9NDDb  ;nA#Av>hǎa(C`c+jZ {VmU,61Q&Ɓ%4282&NZ ';딥p ~Cm@~j,p @-n3 q7+:mAʁX$9Kh(8F#1 D+ax yO(efUz- f(SeUcckgkڋaag  #a\4P1Id#{/~aD_?v6jQ;NL%,>E|~,CL+/SZR˳#1+{ЎMT{;:[HкIrճLgT= K7o IIa %S$J%Z$~JUPX5bpjXy>H J]V>.2֋9"PB"b_e3{2&&LLJ`P+S8QA| QjNyςmpBD:|aAi_ #5|aA_ #!JMuU!#~ߤ~6 <0 Y2FZ#cU؈ 6A1DLDDbHf@!qsUyX^ , P a3D5A !e=;f!iE 9 7:/8^| -,,蛗+#slmms-1.1.3/data/samples/drums/shaker03.ogg000066400000000000000000000124021247673406200203230ustar00rootroot00000000000000OggSr.gauvorbisDOggSr.gN-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M>=C?03-.-/<8.馬/2V#u6bqDL:A$8F_Lff~:P,q)x_N`t3 eO)?9NH[r<DAⷉD4 ]R\LXKnl3f2ADLp 6jڈa(#ByhDp\QLLJF$O^ AZAP&`okA +e˰?(øh׭(7r"ԐH&&Y̿h"+ge>0oߌTeQYVDJ&e Y0aU֪bZ 1"#b%CEceRlN: ȖQHҋjϰƬݞ-b2bKFd*n5\⺖MɩܚtNf?iFIp_0b(Ko  -\}{ѯjt-q),LQ Ihu `HHvH:9h!d4OEڪ5A(+QV:kE6ebT 0F+ VUMicgkV[{j(tLlDl!ELDd㛣˟@U=E 1ARq0@~Ks83Tͧ׆rf/&+?-֪>\\ث )j:-0' ܡzMc_)1ώ{O˵=H¸$ELطL跂@Ip P@v@_C2N Ҫp*J O/B%@HK2$>s;qE^\&:_MvܠɎ)bĥ J!cо!V MФϟ:LH!Q%5 [!nֵoACQ M:<}X( ₄CAݙkBWjaE+)lRO(PP3^N߃~dz/N(γ~'YZ&ZMZ0ILT")x 8* 'bhRt=],1q`X,r۟D1qh#b"yLDY R:'=X$^NfMİP?Q騊* +-d !"Dc*TLsFD2,,ZFfѺX,`dQ,,`A,2,G XVRC2DYeYu1XxYee rce,P2z|koq TU7p7g-}Z N|鑶bsaRX޽o⼪x<Phlmms-1.1.3/data/samples/drums/sidestick01.ogg000066400000000000000000000112221247673406200210250ustar00rootroot00000000000000OggSe T,רvorbisDOggSe T--vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M:>-/89hVhP?a4`ل$ÄF&1nuϒ`$n[݊we$2Ĩ0L ᖁ@I# 4AmMuة(B.*lE&Z 4E jr":AdL"JQo˟@ŷ,&7Fnf¨! JHUD(6R4 4,Xb7BH7T0((*&!&!(Ga ma Fɴ, L,@eŀD2Y1a 2:̞fb^/x<x<-ye9İY&ՓP@lmms-1.1.3/data/samples/drums/snare01.ogg000066400000000000000000000160571247673406200201660ustar00rootroot00000000000000OggS| ޞ=wM.?\.xH6P@"}:6ә҂rf{ Ec1+Z"DxyO%Os/I_LJRNvXF"*u7(%c NB $b1\:*<2?=P eY.^,++"p8!LG:*2V KR,laցLhG#f@`Eb(0 |odc ],)VyȵBlוyQîV@D1B鼱Gg۸mL{ bX^ߪ>Ӏ ًӢmc `2t piUUUaT( DA,l1 ʦ% h !1AB,?!Ìkxd #c 啒ϹQ3y [&T}."+UMV Fa[eIkv"f4Ю6mmq@>8PHqt-QNBݣ$_#`VߚP"e1ҁ!^iT\* @w pTU*d0\F(,a2 ӰiDhAH$0 CaF`1yup3Z}#z Sk 3tb0Rqha"ӇSe2tNG;6"^sDF`c)vٲMIH/]횳t3;k'8a+L-ˤ^0`NslRX%H8\<-BQQ*`a:VUUUbUXU[TUhDb:86Q1"!FÎ)ݢE}~}Ps$,8Yɦ =8WheG;dvțz1A|˰ٖqlO by/KSTȳ3Ozי1oPt:E5\! X,1#FehffHx ϶SZ rcLW2=pLc84DLZL+iamZMCk )a0D!닣p7В#F(D29>-pYvYRP?#C 1ՠddrH4Ǻ \MB lzWsBH @* ꀌp84QUUU*VbZMiXX*0P kLŀ0 Vh V(4'mRjxS1?4z7VJZrFa` ؼJVS%ڗʌ3Є'ŒmT"|rCN5O-lOZ/wŞemb<I>B-l8̬X΁(^X5/ӳ KzAߕH -N1*aPQ{Cb6a-d %AaRh)# `hyeizɻiHzfL.VZ0itn~Wef_ЪCdYP(lFL*.}n2- ~;#$w^&V념Oqj B:k;R7y[ >xELo8(j:pQUU ؋=5l b-vU2^- 2FZng(.Vz.`2K% )5XT=391=;ƞ;#4^2Aalhr80ZBaZc3*Ĺs3`$0z.k,m#>y m p^|T6 b:䣱i\^3'UUUbKLîu": 0q$\@AXV01BBwA;㊌L *,+0 +[dJF bȔ`L0eRty 9I@{X0e92i. 4*Nb).Ga^?V3]'Cy>pe{9_ !^of'#hv6>|_k@Xg78#WUUVUTB'%#:\Y^M[WyT`ZXf*}{ѳgf XVep:ŝ8Ț(ѽ{`ϗ륲34u&?/oi42o>CrTnh?TgO{ߚ55w/3PY8*T4Y=4L[i| >ާ ^/}f.BÂ~Դw'r|q0Ak3 lmms-1.1.3/data/samples/drums/snare02.ogg000066400000000000000000000130451247673406200201610ustar00rootroot00000000000000OggSqݷ=%vorbisDwOggSqݷ=uH-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS!qݷ=BFL455241ͻDUDU 4aVȊ"O^E-"BV9|y  8SmvaD* +*YdQd*U2DqjjOz{46s ۤ$UJp~,tMW^f^geG$=QT6KhfgY0oe\=%p8b [6CH>|\/3|\/$ #s2K>jib b]UTPaJ dh3ʧzF>Hi*B B^nD~zO kf'벲{o A_ Lț8bLsE-YoTmTfYOv &" Q%OWcl2Qia $~-e!Yb@ 6HT<`sȬ)h^.)rm/B#P̓`_Pz=fUo3C.u3޻_ͥ؟d&E7nz쨲6ɽ̈́}qoR{zO=3䞀Kۤ8RN~YipYi@]tt(2n8`ᴪa -15yXp0F"zH4i4`~^Lol3U@&Rxx[tDm{L6s`#L ۴x lmms-1.1.3/data/samples/drums/snare03.ogg000066400000000000000000000177111247673406200201660ustar00rootroot00000000000000OggS:"cgvorbisD_OggS:"*-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒr3&q:=lˉIiV82syq{SHFuܡ2ކ1XYH\fKj=8={kW<+cQvVe5V krw/ {Ը2EA&e(kH YbsB٬7 ȽP @{j -F 0cv \UqQ^9K=:5MUWTiQ{ue\F*x*|jeۆ/NcjЖ޲}=},sŁ`Ãf^/2fSi5X ~GP.#Q G\>8Q/=,W a{*ȣ!ą3T^k'd?w dIVOxd.:-NH4x>H2|p#-5*xw7{UX=VOaW(41'3ʣ^#aِ W]]E؊G+, yGnDUL V8t3 %׈ޜژGť!uPX~< 88i9s6w1(~ 7Mq$ &C̭W!6]>Bq?DћV_yixf&j`ݜyG*JJH+kOH|$${wr;d1k^T%+/0)-˦]Bc55t)pR*ZΏ+i2*v9u[(zӵnSޖvؓ0.UCv4N8㜮p (7"Ff3EЋʖm!-&9'<]g uHU;C& EK{Ju7B=4k'Ts9eq(e`*uyXTut٧78oW@'m.M CtbN ~&,Z=p/S.k*]JԊڲi`x:(G"_bLZX3kj0d(4]yc]TOS[hjk.!"Er*&=6FT|a^z#|j')Zeэ_7eL1}#Hb<w B)>V ͆|A>1Uyc %Y9f??F&(KWzO!:vNnʠVQt_Pa!Q"{8{qѥf|~T.~3כHmut$Ē0Qf}`{Ϡ ۅΕ3X@r0B\FN(L2O)^f7I-31粹Qo UMKjb)+Oc) :5C\~vhvL="Hm}w@ja> LA =MwIDTJh1/ 6,MLDC*=aD/gQT FA;"3~l m9ꀇtJc$N,fA|tF.YU9ОDW, lft5Z*JxT;2or$6auhyŷ"c{z(|PfClA5)8gG㐀y91[BaGi`nBB=)mo jh%H4FQW8kCC44ـ$>f@qK;R=Y*3.GR¬d[JkA61kSG[7;iN1>*%GA P-ݍN|aНϘ?j6Z504EJ\{ z\ꆋAj3J < /y"] [$̪? |V*r]fDRP0!Fѹ:#ZZLBX\~+ҿ7fO3Ht[{W;X.i]C:{XCMݪ]֘6x|!zp#)"w8{rRR*5 lpG݃,j'b*9)G=Wf1^}a;@2"ww >U1%c%mD= IўZ_@⊊)=aH-Ĝ_-N%8BSә`UnfZͶݩW mN}a|blf ґ[F옪$:(;:PJYٯJ@AfΣt'gX̪ʩ;3 RNnQymg+G;۹f)%}{Q`mB1\ac}ዚk uh,0bdwVњwvRՙP>aTWSةYFa֟ݱ+K7!S6Rp k_D1fԷתai6jXbu6%|qJG=#$!hojb+0OL׼, fOP3>ft`ylӨLMjvVRϜ\gc>:kdؓv& !\Gmw:4L')9l\%*(y$=A}MmoqsY/%.szQY \MϺe0 amA&u(bp2[ĴCTvOW\fL s#ƂO܌P󹤓1$Gwzu>JfI{ J\Bxv& RWD0qdq%LT#qF=w{bg$ʻcR2פbj3àn"Y!f,o+0!@fzаڬ\S%Iۺ[{O=/[Rxhp,j3*b7'|*[l9zZgQ%8Q3St{S\n)j)\3Y%5:`mYZp~uWK0sm3eׄ"!\ƊnvH(˨ꤖJvoR6>f Dl͏^ȌPUݝPKʽGCgh3ƿw"CJg"CKo*YuFvz%}j>M*YQJ&ަsx[A%aV;T#7eöQJZ[$Z|!pĝ4mA)Vli#l{Y*rwP?)W#{C.eli9q/ra #bXY3t+_I>5yI2m[/*EH#;2FقQ$B6.{:*~13y0t .in|Õ5p&>zvSmRT{7c.#d- Z3WTH8c]w?ҏU aq6kun7}.! VRǤء&\md35 AEeH&vY$#ÔV;% 5(OggS#V:"KL9uK=O> ,}1_)ϠF+QVR@@9QIL@#;-)%)- 1(*|H.\]BBX@ 88'ST@  "" !)19A@HRh8:<>@BDFHJLNP@L4%?`O'ooo^7L8+1`ɓ'9Ϫ).>cGYo &aIpiO!ߣlfŵsL01YbZu(tV@CH+Qel ' TA{a=sAZ0g -hKV _ W N\SՂ{Ӱy|u6^{/z<8aGOUb#lXfcnX~eeJYD B ?? 3syY[>C j]QZ!7PH3y+2#(r\5X58Xgg\KW9 BoJWZ~@8ߏ6cU1VEl8άUfEf(V@/LB{>(Jšl~L"%|."b fy-p4@my `@6BPzqI̒]7"wMKF D A58ϻf:մwt8NKbBԲPD KC,m&5A&a2< A& e LdjmZ&Yk# jMH/ aBE@BB WYu6~ZeUz!L`#9cD1A!X iY,Mz ҾYsO˳m?rZůEit@T7@V~3A,냅UT&/Ydct]w9ܒ&kJn(F#`0j l**CfiŰjͦ痄yfbje@a[g0ssgׇW 9nG8KM$ˣ!ҒeިTmlT6 GwQYQAm9\vCuEK@FPDXan4 5E,,Q&C䗁$˜@7Z>8\'[E}F ~R! :%Ƅ'b2dk%uښޯIQnxo:knswOCYr.,oP;;BD_mA!i@>?"{|Gp1>p8 zt90¥nh7uNn$R` vSl,ijڛ6*logcPڠ(&(!!qXBBll[ KVD+RpaPB@ <-&{`J HƠ8+ K: 8&$H6Z"XrN #l &$A,ˢ@Pxf> Y 0=:^M4Z;bvkcej itXT(Fx5'@@7 Ͻ!X}wb꒾Is,-hI;Ѥ2;H~bb`ۈmbV5Ū:{icb5,X-y![f0dl]y qV/jØLE[<2Ic(nlU Uk8+V0K@#o*Ї"2 +,$idG*oW(6x@bWVsb,Y^) |cKfXX^z/6C,ǣ8a6 r8r.L e^6 : 9 t$QU=%\$r֝Hd"p'U(IYq0Ĺ`ňhog*=L8%O)aab5`Q/ L1"Pn1 ;(!WB0`=J[ЖRd!C2XMrIxmzpah&^+fJxЀmB#R/#QzD ^ @K PdBc L` ,' @1I@Š{T6 ֆ" 'KeU)jA9ܺ!vԅk7.rGJ0 8XQU`"b۴bZbŴj5UPÐ_`dff+a#k 5, P C;Ƙ- &k+S]ԘYNvd# PvBx{$BZm#y>z`}v`0m˻ͤRr (- I <;(2eA(?XOggS45w<#-`cRbl!$8T6  @H:sv^uN"u @5}iA(&C%ܷgF#c/ "jh>ő|c^Z  $,CZ]rtjC/К CD`|L+f$b 02vrMֳ0B>> FnK;T+AZA%Kebزb٭r"1PW`0TX=w H-[<(J6`tD@d-Ols6nʬHBDJ `Z+bͪH0&j6VbY]2.b9yI'K83 CF~dR!Tq-&0-VF @ƁӉ Z:FdlAVdX a?=a&0 /fBsU2V`%1߲QI^26@is$s,f)oaҲuԗzmP=kYR@U?l#e~5 F:3Y۔B"F:3Y6R;BK $I.SKԚIڷ5mn%[\%nfbPbZXbyJ>'a`ӖeYs~ @^ bU,+ ,,7 r3a2`,T( Ƃ`F Y rGwV:  ק~n#{ۺeeY# `ey ZB*]7.X2r*8e9J|,_Y.\x?fi6=lmms-1.1.3/data/samples/drums/snare05.ogg000066400000000000000000000223761247673406200201730ustar00rootroot00000000000000OggSEN_zvorbisDqOggSEN-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4s@BDFHJLNP@E \RʨP VoeeP,ZIݪE30O{F|Zb~ߩMyo~3nu Ćup#(Հ,a\ bji|eEᓹ˞e |8ܮW{VLRƂ2PQFG5"cy%DDNQ<2M\@].7O"YO_tklwkt  XkbcÙg  aI0bb¥$Nʛ7zv nqޯTɄxV/$E 3Gā6-|sY~/M}d&]jB9بVa(*`4]x*Ed!dٿX-'Eq-bq!PO AlCm謔Bӆ?Vd=+2Gmt"RRI.DQז!-a fᑵ|8YUXdYaǭ-CȐi1E%!̷.@Md![faY+o`xY8kaXVe D 0enl@B2/MF%a`EAFP"o@6AH4cB<<*vFhyg8SlцY#\E6Bh8G@:~d*/"I|d~ uthӟFCq*ڴWmVu!\J$wn`@x7g]a5H2+1L`HGo_!+q 4-e&@(餵U#@Yf`k5H@!/Z}B``XAZ‰R/w~M@%$ ~63#@616쪓@x\(;Ymvdqf@jJuWRJ$.g?hoN$Bމ6*XTklcƸXPm=[bHHX3 !mB< @ &X#(n,˸6mY,b@0abz1S*E*y(b3|e#+N(V-oᯏ\D4]@!+QD@^7q@͑6| jⳔE߀OG ݀jW gC6zڍ[ \i 8Qji38S'g :g:9Ez3CV4~oFǜmOYD*I)( @95gNkłIl3@^<1Ͽ+:OݟAl6U  S @df9X~K8M"fE"Y*ShY_ e{NUflEKR}WS:1R/s )M~i gA?b~ПCu:I z'7I4&%T$RPI.}dMt>OO] ;eC~4jU Ƿ!q(K@qx<m/0͉ûl H]^5\}y7$7{fuc'}wع&䊸JEj*HA f5Q @@~fN](?#Oki {k"z13#5kK$ɝEf`<_?]]}YTڻI }m=Vi= h|Ժc>8fC$ j%;#b@e7ǧ׷^0^( i PbQԾ<~? ? ?J5=`L z0_`f,X΁>8(&_YEt?@?nc\ ͖H[Oco6+IDQHF׌5sZvZWqQ-8p?@|R J{g Z FMI2B~2 4ݞah1 p'3iR{,L\4kQo{_Ty{?0ʘH%8|@ XgTf,V,'gbۚȅT$ڵ"(=oR,}ǽcqI6r/qJUe}؝LߪVbNw#a'BwcH *(}1YWAx f5=HF?S nn򽕵ɿ:Fұk~Q;5N/V0orXjvB<_+ $H >gTŸ$"uk"kKRR"70U|}}}'hH"$sA .W>SKG w$p5O_}فu+G.D `n@SzR ? >XaC/iJTh\˧ItPo~_\qw-S/{L[wcCgEvpC]&?ݸX*Mg`8OggSCENv 2L H fBF<\-3[SW/ 8\wCgO8kMn $RIܹ/Ivxqv}e"Nҕ>|6z[v/@ߗ%v{ ]>:$GLPb /H@8k/Xb` ;#S{+i2=sBAvͩkWa!RJ"@`H*0f,"c4).c%H2\CKvStQP::DHJ">4y3]O_}?`}YLǾnF3cz˖fnaF`^_srXalmߛ @~8x?n:ξI%C 2h&S~c|&YœApHnfq 6696A̱1I Ҋ ?GWMp^FCRvɛ,ɞPGF>Kz/ZG=T @"(eD/t)ą96qye۷(05- -DZoOYyGL[K+$3k GNwͰ=nUfݚU 3Y$o/^7*˪y ^,#w}=yLӕ-HE% B9{ξXse@VQFsLyZJk}Laǃ8OTIOO*4YGY Yen(CAdϕtYʾπ@A(e`5 /a`Y/`Y,ك7 ,_(lmms-1.1.3/data/samples/drums/snare06.ogg000066400000000000000000000140501247673406200201620ustar00rootroot00000000000000OggS'"qvorbisD_OggS'"92 -vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒS ǕznaRBl8^h | O vVU挙K൭ Y3a-L(Wq\8l(dl+v*dۓi^4t Sho tw$/77Y 4Rs" Zb3̴orSSCULz?d_uXdzRUJlBI^MZ\,:X{@G!r'`Ϊsr,VEьT\mmC.ϸ8ڛF<ҷ87=PeUS2%beҕC~I!c^gZ3Ɛ 8ECg.TC'娩 [BGf={ P=K$:e I?e"X`p0{xNkX=5KA ݐK4mMO] ^3)Դ/x^V,$v8> Rf+ܘLLTCbIe3HZ;jD{י{ZR-:\Kԧ*ϕxˡ@ej>~#BvU[1>Y7Z>[q@f @AfUU3I|{{q"a)^6H:MsZ=J[ʕdC_a{®9{UY $`/9xWE9obﭪRZT X\f;ܥ{%$F+RVH7{trTr)Pmu^KtW ^Lr>et-B<31Ć*.f uy#Ͷ*k~/My 䃩>3KN62ڔ$K2c  \Z&G|3(@NStǶ~:Cv#ulmms-1.1.3/data/samples/drums/snare07.ogg000066400000000000000000000172521247673406200201720ustar00rootroot00000000000000OggS*z#vorbisD`OggS*+, -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggS@c*A1'#$)ߕ\$keyG?ΪJ_.T9_lYbgḶl?6"ʿj$ْSAKK[<(UpYˆC͎c5|`w ̰LmE-f0ll|[Q{F0?|+B CDJ-~ii_>{NMV?1{)uߏ"?e_,1z a=V*bL0uopMDBT❗LV:̏F9kL[9 ~j4[BIa@в]qd Z;Gz"b52)+1z(9)r\Huu5Zm%`J 98wEM S{cJ :^;zR?* ]S˹MmA\jXnGܷdBꀉvwTJzt6 \;=M[I뜅q'!.sA9gT+!E\p}%:>t) @daa#S+ا,f2r]V>BN~^I$/-$8dK( !^j&P+3?GCL4BEPnbnj0ޒ{Q8vI7j$_IM ^;wph=Z`; QIbĜ`nǰnc0&s50~6wa"E,;)h9~jD1E? Uh_eYU5{Ӿ8=_R3.WcS%^=;hd֐\"_Z9)$<.75V*9ug 0ߑ륜J0twʳ_ql{ )EQb8[)ԫ^Mb}gZT~j0%( !|˚'X m)33;2^h[3uŪ=GpDa9pwǽB_m#>G۱1Ti3| fkfx'(Zy ]UY˂1>oĞs$ ѷ.ɠ8f)ky|g3?HlyNV : \0kUi5]$'G./mm5|ak6*R\9;ؑhb)uA}}+Iԭhbw~f ӿVm hc#M.q1< 7<}usVmL}Sl0vqz~6X0"2%E&j!0T[pccq9 ]7:X]g2;^Ǹj rP-+N'OAa_~͞{\D_G롛* !|N<͌[Zen^ֶ 4R.WЀ]-JXsn$R/Vxſ<^^T免_卤Z^uPu1U}Q\t_;\P3oFi i6OлiٻCV-k b4#F.ZvMȺq|Rl5FUHwPͣNWN m$EvT%ݶnU_:\Ho^DG\n='4X󢈥nhp\,HVD%}mDCzE3ܓ hb&ϯSUG[GۑRLbUnE>-*eoDqUvvDi.A@ESkpnz_5w},ۮƔ>4'K2Jŗ=[4LN#]᳜Cڼi^. #3ӧXWqKRRVwn(%Q~^8L `.Pݶ$hm3ҤQLv!ubH\}ql-RYY< ǬWt)&Idz35'* FxHlI^t\6Ip'!}>hI :qBWMڟ6}}TGGM@ʵ%gD?UrH1y>?~rlAW iˋu;ΥӸ 74(HBŁh@~&CR.кlRĐO.O}vqtأڋHm*p3&ϓĨBW:! k^)荗#,A ! `*^'#޸;D;+wR޾κO4cHjyr,-. ~r@9,k@v9(%!)wW+ǥ׷8#ƯXFu,f60j(y:dDr*| C}Derl{":ҽ%QF=&P-] ]-UUyj.m& OggSur*Zw667<\`Z{p&U}ت3d^մFf6+~P%j+v (GmtKc *a}d4ܚmRTu/t}||lB1үHw&\&Ly6vI|;A^6<́.H \ -Du!"`iy|s01k*, ujcqez';M=]Ibwk_(]b8MWjrC<]g΍5|;2C>`9Wy^S1 "VI0$^*aL8[ 6@tM?dig* "] hr"V@e,T4hLD\:0X^l5̢2 6<ܾ%%`L0@7Cpv 4&;«e x& ϫ5%s` lmms-1.1.3/data/samples/drums/snare_acoustic01.ogg000066400000000000000000000134661247673406200220610ustar00rootroot00000000000000OggSe T&̓vorbisDOggSe T e-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4ML^Bzo:jH:1QTR I H4*&X$h9"+! DH(b=ҦymFh8x<նqRe}d=ʙy܀I`{%ںqtq`yI6=^cb1Ue`tc?#=_0~8 @"4-1B!!p$G/{| ?Kn01TBY#CHATl {;(3W iň8FBRId8ve8%Cbln]vXgeWfɴWQѦަuʹee=@]BU̟-ENaFvu{zujkw/X+mB  `1mUN=lztMŔM KG&qdo $#bDf1a>̎,IjKrԮg1֪ZIK@`7,(5 (B8 )3GL#&DjeJVQ@k5Z?OTNH8>]/WJXuK3a-PFƃd0$RS$$QXc/Bb" :'7a`CBr\>J!(A(*uP:yf||眰hGVEm p9Yp8*WV4{ TPl h@Plmms-1.1.3/data/samples/drums/snare_electro01.ogg000066400000000000000000000500721247673406200216760ustar00rootroot00000000000000OggS?" z<vorbisD_OggS?"-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ\W1{"v s=LIM^46it.K&c,N)X<W,%DM/y41[̥W9|tA$YY3LZ3iJCJ#vΝ]S>Y5wawNg}:\t -*ud VhTW' 4^ OKXg3"Z9yYw~i~Lb9d૩VQI;sB+:gx "H]shafk4?0>‰8 lljR-u" \aܡM*LIxS P$mT-^}Lofi;٪*@adr<q|T 3;:<]/ݤZ>6 ɫx$zCd,Dhu \t69"YIrb0BqNr֊.t,X_`Ҋgt؈ygW;399mw83ds$Kty 9}t&)R̪͂ޱܫq55f*Nu^OWǛ&J,7 VR7+[g?CF]weL F7n7xdALVNm)aed `*8ѭ>&:*|6cLP&դ~&Zc児~}]m-Y'L@ߖ7Q K#Yh/B#wu٥yu|)܂n2Pĩ757". (Ġ_6w/̯6{Z2uRV$J>"q#:e'VUeݜ@MC|ߙzkj7 2Bpyg" -]"(IycZ2w|R5čN?oB*v29O;(LK铡 J񒠃dY*hE!/_o[m%1ߣh1D[ f-S߱$λk3:,O|~ d ]r!|qKt %َpC'{EըZLjN[PT*mElSAWv0:dK(IoٚNFU<^S%π0>@ +,ތV. rGXp c}LZf_zm[Hk@LP~^AU\#]$T =DH&>{U=Qx%E UO%Xԍ?SVY>mO%n7i9i$$Up]$k  P{ZFg6\j- buf8 $@YMDb?^FD 8[ 3 .)z/%4PɻoTR Cd~Dr>"J}D85 & hk-AΖ+.[u6/fZU[KN$~紒ʨ -M=J+_Hj r5*ͮ˓b6JqEԎ[=1Fǹgt1kܺ&b_@JKn\Ĭ(&"NfZ=Om d%2DZy& ,j{;Zyի /)nfĽmw+*Yeѻi|,"婆.RMT&?T5TBb"}/s^KSv'bYVyRם9.9/O/vrB@l3xH}˳d)C]^SkiXw^O=#癣jVSw79g6_w>+қ6Xb,>3 LFDP׷"m lrA]Hu)J\:+Z#?D6R& Uf$+Hd.נH :ZHO=mIW=ѕ Y\cԐ4^  .!Y-g/7O ^~1m{jyΦ2C|͸&1ud}s S~CWa}[P\##RKuY˖[(]x7\FtS/ n,J \H+,LDJ[&D xeRbQܫ]MBrf>@Eh!N@@() Cѹx |@xxמ8y븶dW:0[m-Fʹu)Fi1~g,bl[l )ȊHX;`"Ct.ړӟ/ȅ+UmwggYԑuܮvA7v EҫH\MkDMζi3yJHb7Aڴ8] 7LdVU< τX@26oG^>`g K4h[Fԙ=@EZ`'-&)%W"~AzZ$^#Vޙ {uqʬ(#vN}$$P+_":YWP#hӛ))1 [RE%W36!#rjWKBeY،Zy1&V3"Q^XI^ `u&5gs&Ȫ4KeFOԖlڱK;ܚqUh#R/Ѯ;"` )^7c3бvnԺ{ƄTQbv1hWAA5y|-P.7"űkH|J5U -|{rOK0Frv Hm#A.vf6 UȹIx;Mي_MQy>J'2lG.՞T {Z0U-$Ԝ81M&wWMoӋuW\-֭[Dm,/"6؀ US0coru]6nIGwW}BY {{fYUiŲ|r˹&f%m\3$U@L48SF1i|gRCH|NCMt (^_U+J-reEZh\KiU"k0 6Zy;Q4K7EjX-I)!aF>d>D: Q>Y]Z ;UNgկtvEb?q/iatQtxõrYva;'Ku73J !.,j[3U=񨊡n_tfR隦ݒ8ȮLDɸ^~hkhQ]S[ܘg՘s/7kh2?K"!l|.֘f1K18*nO/r FBJ֬V$JF$OggS?"Y=ť .|bS9Uecx*f$sKl ɕYy꺈]uALX 'C oީU,׵%Ӹ a^UԲm:[@"iJoHoi9h P-^y%#.8I 1<2C@}ye:`]D8'#f[M@0]:Gq GjXvOq74}DZYY?m B2θ_g;YoUng2E(5Nn[\'UqǓCzbrrX呌X]3y `U\n&Jk AI_LͪUѭ)u4|3)i*UY\U Q![7ǠGV$-f+m 6rȬ 9d=$wgюgKJ&OKa2J^[sgW\Vj-<#Eoa^|_Ly@ \5Kw0eȢBġGGQÇ(e{(-45YkD#q-=!$5D2͗O8c6IHHY މH(I$s*"F ohwT4oi3ΡJݏ|ӵ))_7EFwj*D֙uONj֩Xf*S."m)YS ѓ$aQwyuE7DK(y2q@Y:} ]"pS{#fQg'R!QW@=&cZ9Sx4_WpK@52*YvݔH[A.~~zI(Tt-4oמv};6 0xrV)yTL0yKi$D' yg0B " TyuGpC н-6rxGM[ݼò= @ YqlnWS%RPG&j_Rnv:sib D=`s!ȿ|(df>H&0j+Kн5\V/ _2 ٥,)JZA٦=!44y}["p3->MD |m3Zg۫S<INv.2`U·s ,Au z\('*O9Se*SZ{ !Ќˮh`.=<ߦPף|ڭa|m0XJuc7(|1ǶQb.* ~i:ugwD ~6%@%RC~D-+>%E"ZQ6+(oMxZ9:(.Z8*(diEV\赋'`/KPsV Vة:^޳B1CjCoy 7X 9mic$VC9"7UвUKڀ4By?o!mW}ϟ|:Z`~Mc˩TZ݈,""fk8v0z9=o+#vsG`yΩ{'$]Ja ~6&J/i2[õ/||0DJgϮx{B?1DtcRd3Y]uOޡ b&r=U,^wdb-m)@Y}ŮF P@UŹ$QhV?GE]$Lqr?6?$\4t1v ~RG8ri51-jixzspZ#3߸-j- _Nlq㜳]kTXZs<)LD^Y}lYp@" Ц*wID`X=(`+iUSߣMi~Y&HpvaMSy7|'fo)),sZǙg|#ԻP{G=`YFO]&)E)-H q,7N%|^F7)ovp̲,KK.Ų<1M"ٴ1Pa*QUⳁ٢OK3zIupl$L9sUٙDDVgc]edNea]0,82J|o_gu9lh9ef~fi-jC..,[ʗ\1puPs0]p){!f!Lø PTJ lX I~cup\fAWn; ;]֘(*KF}{?t0[3Zkc5W@]¶g%(DהYp׋P%^ÒvLN8P'\"S^~8HΕnTcYCY^ @0OggS ?">`>94. R!f$"Pn=40'(2FVSuŌ>f#b^)n$xX+WZ ‰[ͷ+W 3+.ӱ -z {' .c3)+EViڏ--lxw -vJ,9ypn ;@2#wIy4.ڴD1D"$$(w,8G(1)j:N8z\ַT.b:"&zs̮<,ٶ:tڣb-GBzYJM5oC 纪 ۃ 6.zD;`eaux`^9}=T95`7HHQ5+M!?V%$0}S SZ+bW#2 `]jp`".>rkn5_UJ CR_ 4O)מ%OAtluxדCK>&}:#^:]f<ϠTʰ)12u _lv`j̎~9z. rј9>B  pʚH7MTM(!ʄRT eP`}e3'PA*ÞEF]csW:D="'HF;Auyܷ+UN'Pk΀9}#:9.@,*1kyjmՌ1)uhml? 0 즜U,Pqcidaϯ㱅\6ntή[- B,K*]q ox3gܤs $^e.|-(\*4>=9@U9~_db + i9DD}9?KaRjiXӔó& hq8PS.foUC G.er ұ*aޭtK4i.&eu\KO2 ݶRyN8TbI3[_RL8Hat(?x0$chݙT @ R@6T=[3d9GhTReG tx%_)y_ `\]ɪݘXU:tuRKB|q͖az2"N}-=_! K@V$ocwJ>@92ZA̷Y%A} RKS @sKW^mzy΄t uNV*vaʑrd~u\!Ɇ4j{@^,q`;2#I`_n|.ce%DXL}rp9)y"79&KEԞ$pGbΏ7Ex۸) tt+\-ekT<+4嘁ح$H.Eȸξ7!S,SWtvA^z_@JƮrO%"/꣫8ꍢcqt=kI׫7;s:d:uz粸RjW *^ WBS@䓩+V:)^fDX)T˾NZ% &~*Oil/JocM62eUj"l;zd%a>H~ ZcL0.@w@[4򪸛$)._/oq;hZQ6F#j%B΂΃j"` ѧ; e{R)1>T]a6,hk.`hfh>Dͥz9=jn 3 q&B'ŏ?]RQ}NCh}`%#Jtit0>; ;BY쑙]NW2iI&]̠[_4}Ep,@9ȸjd-ʐOSkJmJcې5-2 UkxK{KJli,v{{ܢ> B@H|[bchZs9Tx~ᖲ"M.^X^`EUGP?}vB{LKM-:9Fy{^ϥS1t}/o{wI2/\w|G-*W F#sgIyqi"Fs.6(J#<%V8Q,m+JE`>e4{X Y\.>GNold(*7[a;Ӡˣ#Ty5 )Q&\q{?$sn!Fv|L^:p{Y  oXsXZWC]z!#᪡%ؤ !d.'`_1ا|/"qkDbUιKJI=5DZmi[t|E(1<(ĘIQz@tD8 7KN}5=*J & KW3ne#cR7'm \}<^jG%/R:"3qLA7v֤ lEܸ&bqN U.rd9D%ʠsu&!T-U=sN BK-htݵ'>19;,cy,c륛nˍ@'q2]\F 0 ިO@ . $A]LL4Q?kc" #6ڣg4t*figҒ#=ۋҜ\;ʚi&tgVJkAݞhyMN q5`.rl(ΗKyٓ6\6+i_ zo&$~Op0(3G&@L ]#63juA2Xe1hb[}8݄~#q:vCO;ۊ}-Cqڲ2H7 $apOsv$MCp/0R cfUAN e{lpgFJҞtd#^<K <4@sNMU,_jZ cԥJ]8'sq[1fB0(St 3\b7Sb5p/y͉ŦNw{\A.Bo&ʄǬ(kJ$9oGHӠ}F=/@6aVUCQ"Pdfv?]mgo1¸͟Wm϶;r{G]!ZHvb_ ;Xk޵Ԃס#0m 7h)m6y܃;Mz Ewx&-FF+\k=m*&ӄ h~ RVQv W@m) א7"wY[BXb_\k`dK #)*uyaQ:Ż/EQXܷī{\JDMɥRu$B j(L,U8$B&K03Kd{n9A _L~x|Cy;4j|Uv3vU6PlzT2󜕫N[vZ3]W{l0xi3(8Cqݵ;aNSCZ$%vzDcP.48n^l&¦(SLb4HZ/1*&v,R&Y7CX@ OggSg?"&~¿X~h<ǁC&ܡfUeww>ʚU>8-*sOo\0>OymaWVjzeKg6;yG0SUki qM&a`,i`Hi҅J| I{Q/X2m o#G*~d<䩼=X]F:kv(h@ʎ(%^hG>7wt3gU9P9`pg_{4OWOy1xdՍxٸCUQ< +A>6uV}73UO:V Bݶ̈L!%S-=գ8քpʰ29cgܐ2rSVXʸJP͌D&g] >h<N6wTCZ9ID¨ӃD79џV{ݹ7:(<*onu0/ƾ+H9[}"E 2񪪦hʫI}^KIqs]SFINXOe~Kgo=64 VUM9*paggtӾ1u^ N"Ӹ&&s/VxP˙0XGUx40zj%a$cmJ>sq$85ɒv)Je  \;ː]{}Cc5[aY{Jշ0Pڤ9)C"PTMRh;dװD6Zp%С|+egPT4]Caϋugܯ>dZyL" ų#)Jih~/dk_'yox]UVT\GQKN C[Jac3O`Ǵ9H|'ma~sd[rJ.Vk׹BׂHWpI8rcl/:Ehnjmzo^ux)| ز)EzfRe"4$04(0(!;HV~g\/#md!0Dhb yKfku+-&n&XX1T{8TGJ^Dr%z^VD!qI'p[E' K<}Kj`WH׸.PeaS+-1'>n>uQ!,[dc*7g\A64gr"Uͪn\,g76/10 A H8w;=.+j~t WwY{ RHHda&H᣺cܰv,= )V]N8ʮf?)e{'E@u~ .j}&>WnyoxFXsI`1.mlP,3F7 ·Ƴp*M:uM6胖+GݨS6{xqNdԫ)mt\ loٵ"=g۬轖h`5zҡfc&Vcsc5XfC"\LuJmRv9ӊjMwrOC hM$QܫRiևuD(3LśMl#|,G(HKs ~N42&_9y~LȀ@a SPE#kDrƐzuV!У*6 ~f\1p\vHb~Q3$<I73mw /^^7R'=n,oGf=% *$hF&FBwU^523Y:˄P|c.~ ^!, 3J`R&k#}Dg`)dJVtvYuЩ :wl  0>fKdprz3fyKNo6pF|urưݵ%tAͪ8 ٌR-?oms}i[,MjK4JE+H)ܭR;9hЩ@^^Jxɥ9} !5PTC^yʩVi}Nn^f\9+ G i垖L]Pd˛3mai^69$}J+Z-kbePlc/I~bR,#歺̔Q mNITH;]iaeM "gm#_K0Hu\KS%sPc=Wf}kyQwo~0}<աBBKMa (cj ځJQrbU7LGLւ0'TbθlSx1gOo {w^يڝLWlim@1*/Hvs%\jʍFMD -D;z%iY?΍o/=F :~\bMKK E&\nгHdV7DkIE|W23>BD$vE9+}m3_NfdLŲ5{BE39@Ls3:GSF `\۠Tas[Y =2%[ƺm:kv«ۧ}0_61D)jWĊaO^)$ '2>8Q5[ B}gAh~;.͡R?k\٥WQ$uJՓ FvHӐhnwyb_pH#dkI ӌ G;?瞹eqLD1oUZkAl9TQpZAN%C9~4g&!yպVUp=S띛f$&]1%\S-Im>J3do  ̇L5]ҤCLSdKRm(2 F1_M!?} q`0 L u7K *O/A5]̖E_XbXX4Ao_m-3FO|V^k6U&llmms-1.1.3/data/samples/drums/snare_harsh01.ogg000066400000000000000000000262431247673406200213510ustar00rootroot00000000000000OggS1" OjvorbisD_OggS1"-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒħ\ 2.nWD<|t!ǘ(_6ې\.'qW/7BZE⭷.^8)n1C~7ܓhEб2yԖlkkčh56DVsS7@k5* Qer' װtP4 =WU|Iİ\>M1ȹB;8{K0ϊ5&9])ڋ3鵭?E.۶2B>,_{R-/41|\`=ž̅TE=\Kzf!~Z[$Q@j󐔢{T0ڠs]Qq{2j{ryM~}sg`:f9q"Ogod yŃ2yBtڲu]-#{֪ѻGu}%~Zצlk!.50\_OH)8 6ijG|xHԒׇT-emM!!'[`҄U*)Հ? ObĿ#M&pŁ-rY6&>}㾜.~'b1i9e 3(4Oz0Gi&C#xUQM7PBgՒZ?Fa [5ҵf9_J Ç1Foϑ T1#g rd򾪵, :ޱFõ (8ߍ[fV~/7Ꟁ3MlX<ܚB%Igޫ9 `8g/bŠq¬x`0Gtn:e,UV#~aX\r+ qO>w%^ǩTYupDzLDQ;+h!P􎑯+O9V3/K4aO2F8f[ϵe1 0Kg(`5"TkQ=UDf[Oi5CTz)NF$1̌~}{˭l|z{C6`4MٲS+kL k󥢽c̎iRUYw]k䒥P:y.{GJN$0װhTs&ZjP5]|Ɍ-ܘ+0j1oޕNN#ol} j!"H@Qr<Ho9݅Qܣ8o;c3V_8ۮ5L> ~ ^XZvaVUmEch.:iłqn _5T4bC*~ j{vV?tE:o@K_s#:t6"[.kV;7P Ɔy|Ez*dGҞ<#'qGPUK@WCR!oב2mt#q8'+ ]f[b(uE 9\%e*W 34sƟxy!}`qؾ`ѷ Fz]GF3{w> L?'2/eE7Rob\!Qx Oyh%NTQ=%Q̃z_xX&Q&-PPjY'-SҜ )%5K/3r)9Kf¬3][yβ*Fs7A4}hvU|OwF4x/5Kme!Ï0 UMYEJ2tf}f.K`:=DƮk`C^?Ț5ЉTi (Z7 ^o/=`}zW0ն@˪HTC}M#}2W%1LiK:$)#3{TQ&jVyM~Za/X/o0{)$ 1e;<,UmÝ`v S[zdu]a"j4bV#C鸽5[>˔fŇ~/q2 AP@p>'kR$yRCՀdt`Q@z}hO `GB*W@i#EhQ2Cΐڿ(dȂVVG< 1̉Z-˥iOo{y.8w4-ԅ!{H0xu&i%?3<e(Gk:ӺRE O(6'vX;Nlj>۪Dx}[MG{wQvg0آx7{JNWٹ,/!^"n"Z*`ٶC]\jz]XۿIs)Wi~\Zz W|ܚZX! [/D|3Hk("R]+խWizIiY ; 6UsV"G6MlHWmmR@XR;ed$N0h̋R>$vvMXNtb&l[V˶ h ҇ S8zM:%nkW$?qYz !}Ior^h{>qmq.>ɪ~@3' qYje\Vm`nr@HljY'9)({b:uMhR.W)k kZt՝:(>ED@RSBް&B^4.DS#(G`wH?RUr;d] Ġyz_}87Ƽ:/;2.h1vm5x iƊlq>49=/@*f\|w3 ߃T ׿ χݗȭK6 EjpJu9 l7s8@^hyroɨJ=]yn"-[osKj%Dȉ?\D aӵ4fy ?:;!_&ax⭬sQ1ŭsaL(]ƈ {| !&R3_yLˊY]GefYӪh8߆O>tH$ Э S"r6 ^qf|W-~'$"uRkf 5(HԾoM8vm*+2*D)u m+ΓvlO?&5I '<j;ivכgښ ~\zOC].OD& T>w9l=^W5 ^ 6݃$[3yHηS UARxCan TC 6(5\#a 샐.]K$~6Κzuf9Jŵٛu=_u8A󳿕cxMOKG\dܮyJu:q%.ֶm7%{3Aj p \iw1Q>IHT,%1jfct|͊bӏmuhÛ*6oeM[i~hb]{P,!)%idž_CcQZW8q.Г~TFaJ?;+w5tv[Q6RByh5lPI> +%m퇂&O?N OggS1"eDOл.&f| $ "WwkI"M-(Ӕ08ʘW|Y\MF:Tk85?:*~( e=2$~swUX%Rrb4ˌ6gg nkWjnyZIʙv tѤFt snΥ)"~؜J s|E6 ]`ˉ#g(n?g:hė#ŮK[Z]diw=}q1$84SIzk0BA7h#O ځ]KEB$d,_ Rf"_^ˣoi;ƒ;jR%nj#ǠMM-}l2orbddǝ&mJ~F$w/@v`լ֛wY4fxv`c'L")Z^X y<]*+Sc#8tZ"1G3~|Cz#oV.щ)EqUOŻy7'Q g :˟iɗRb2-JU1]t݆"{WC][3u㤞ٙ )‰#Ѓb'Ǖ =-!m\]I43hU%(pV2k4ܒ k]*SJdqT+c5J4Ôخx:RfE.kz K8pM8g4Jjw gZ?+1 ks먙*%Ybysܭ~(O#/uK6GwXjPZn0n9t=ޱ3hDZJp'(;"Rx&3 NF1 SQ\G:MVR) f#](ݖ"؅`Κ9J3jXL%fo%AncƮjӯ<>K^sΛ?imeU5Hҳ53OAѦ ?.ډMokj뢰CJ\v<{{+sf7dmj9) ]]Dx_m-*OT%< & MUuWA6velmV􊸪J Ԫ5Q^"08.KרK'2(7mz^NkJւ7TSAS{󮃟Ӈ @׾,[0 R0[]퍌MVH>KD/ $vszLtBz{DV.pT5% G)-fGS9}wٮmTc=os\vٺX1-rDfmkmZ!ֻ 3[`_Wv]G/|MO؞W-ĽJ1P$ FV1HLOZQ[&z9ci}0_%$AFLKUHO%TC΋}ThqDڬHwMgE]fmXXhs!nA9vV32-ͫޝ&/`RH9B|궠s)q t0qZX937u A#_){Ի?bAZ*ϻIW J `uÂUy.RdMVm?؊B׊CQYj !fq~ƙ7?/vn.-W.)c+ka̒"4D=?Z^2X^ӥsRy "N;-Ӎ]Sc Z$(H슑-kRDo,gl3>ri;{Xiܳ~-U NԐ79_IVaPB\4(jF_we%'^Y=1@634 $ӊ @%HPMܹDžF׎tFqZw۴bjݝG,t0F}υW<| ϘO;C@M| b;6D;ON[`%z~Tʠ[ tp1b*cP]NuׇO,TA8!6->)W⿃oh9u.rc0*fqO7#d0*{fon(sy.P.kT 5Pݝ?\l2-2O1||"U-l -wwBx#ӷUzN)S kf*ٮ&%1un,}{] `@ ;w9q)+oFjneh ڽjL-sHY6"Ֆ!o?ZҢcztЉwI/ 2@\-ôg,%&Ȏ,8Ptx9CBDlmms-1.1.3/data/samples/drums/snare_hiphop01.ogg000066400000000000000000000113101247673406200215200ustar00rootroot00000000000000OggSe TvorbisD8OggSe T,<-nvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M# ?o U6̘uۨ:c7gn벭 m ʾ.qp*˾ʲۺn}ʲq̶-p7~.l1p p0 "`P1R B(Jjc2ƤTA)BIb BƘ1)J)RZ+JiVkk-PJkJ)-jlZ1&!sLJƘRJk2tIɜRJJbŘ1)sRJ*1RZ+VJi[KbC)Zl-Zb BƘ9)J)UI霓1'Z))9)sR:礔RZ+J[([-VK)-Z,bT[(RJ[k XJi[lcJ)RZl[kK[kjM-Z9cPJkB)1jm1J[)[ŚC)1RZ,b9Vkj[)kVcoZTkZ[o 8P Y D(s*PJsJ霃PJJsJI)PJJPJI lДXА@*`RA))F! R RA(%Z3 Rk9gA(%j RkA(%Z뽤Rk1|I)Z1Zk1Zkb$l=ރNٜsν!2<N Y d dR RH)RL(c B!BH B!B!B!B!B!t9s9s96hJ,PhJ 0F!ƠR SA(%klcB)c圄Z\+ Z5AH%Zk=BJ՚k5Rb5t9b9瞃Zs|O-֜sν჋1לs!d5{:j9BkA` +IgBb9 Bc9Bb9眃Bc9 B(b1眃B!d9B9眃B9!B(R: BRJ!BRJ !B!RJ)!B(RJ)%BRJ)B(RJ)B)RJ)B)RJ)RB %RJ)RJFIFEh…АF5Z+RpB rci3qCHic@iRAB A m! A%@DL Paqvq] 8pp O 78AAqDD44padhlptx|OggSNe T *-'(%)&*,)t𘗁ׯ"jngj&_7RBYta4PБ-1i5 jiSY]沷X 5::LA$;Yc"UU8-bp? hbr1/Պ_ul5lJ8cJK7x0 ƹWpo(.]K{W8{w̪OKv/Z>Rs_:*(' J`Z(`@@BCF^-f&g@r$;^][UXҍbz\m Ui\2<J\S B%B|;p:WOz\lxג]J?iEvԙ>2ڸ3n`3TzSixLˬ@ &~Yd$$}~8bém nFUS}ű$24/1il-l5Vx}BDn:ͺ])|F:첔dOz.EgԺm<3{)lQT:tF.u W酴tixAa= @ >) LId_A\Hwj/qulUp7˾"*_$9Lf,u,RZtVβJEAдi[!coЄ[2w[WG$Ƶ$:sr\4/1o-Q_]sdL`t U- Os#+yx6?_R&:=؈㽶sLDZG1+gwcdL-oDn12TyʷtVHHL1N2( )䐊`[̻_ջNIr} g]Qt : ,kj'@ݖ{'dfA μ3zpILrРgc}7N`S4$Fuߩ M"!ׅ<eaFfzӆgNO @л-UWqW}|P|@c|UMOΝ 9M:UMK 7ksڝޏc&H yHe=7jD{{{D+;w pG8!؛M3o#գovRlmms-1.1.3/data/samples/drums/snare_hiphop02.ogg000066400000000000000000000106621247673406200215320ustar00rootroot00000000000000OggSe TovorbisD8OggSe T.;-nvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M# ?o U6̘uۨ:c7gn벭 m ʾ.qp*˾ʲۺn}ʲq̶-p7~.l1p p0 "`P1R B(Jjc2ƤTA)BIb BƘ1)J)RZ+JiVkk-PJkJ)-jlZ1&!sLJƘRJk2tIɜRJJbŘ1)sRJ*1RZ+VJi[KbC)Zl-Zb BƘ9)J)UI霓1'Z))9)sR:礔RZ+J[([-VK)-Z,bT[(RJ[k XJi[lcJ)RZl[kK[kjM-Z9cPJkB)1jm1J[)[ŚC)1RZ,b9Vkj[)kVcoZTkZ[o 8P Y D(s*PJsJ霃PJJsJI)PJJPJI lДXА@*`RA))F! R RA(%Z3 Rk9gA(%j RkA(%Z뽤Rk1|I)Z1Zk1Zkb$l=ރNٜsν!2<N Y d dR RH)RL(c B!BH B!B!B!B!B!t9s9s96hJ,PhJ 0F!ƠR SA(%klcB)c圄Z\+ Z5AH%Zk=BJ՚k5Rb5t9b9瞃Zs|O-֜sν჋1לs!d5{:j9BkA` +IgBb9 Bc9Bb9眃Bc9 B(b1眃B!d9B9眃B9!B(R: BRJ!BRJ !B!RJ)!B(RJ)%BRJ)B(RJ)B)RJ)B)RJ)RB %RJ)RJFIFEh…АF5Z+RpB rci3qCHic@iRAB A m! A%@DL Paqvq] 8pp O 78AAqDD44padhlptx|OggSFe T_CK+()%&$'%(*+,D2/{1Y IۿFNњ`|HWH$K5Vj:1(S+i@5dhzܢzXiMxJe"QS|:mhWww:C4{GqBi.^Wvs g­u)kN6*%>ˆxDpU+>+@+tq$2[v^5,tRƦ6b}( r͚XRZH@ P&ʵ$8>ؾӧ<WV/[ zJ.Y|.!EA*եI EYUC(KK O!xWdm T& [`CƒUWIQOn :Hc=U :A >x Zz(=T}ۣSQe$|:Gzk=7\ttZm[ky5e^ɔ?}K86%YpQ>}ՠ.b}&~&>>]1ImhI <V*h La0݅/L xX-)(!F 3`UP*c8s9fiwdUpCf'd3fy^<#1KHHzBթ# C\qQ8-$uJN3D&`LR_ ɊP|dδn~L5xI[j(TH0@G`yDUk?V @s ̅_!ynų.$F1pZQu$:*r+ }Ԯ"'DW ~Pz18Ϋm%4 =ceر}[t|?I}5fS4SN߷@PJjfj$T.{A hj0JϾE]\Xuk,a&DWS T QVߑnխCxy_I(5X 0@$Y?z_EՅ}/ꗘ%J/ =xC<4cś4ޛ5tˇlmms-1.1.3/data/samples/drums/snare_muffled01.ogg000066400000000000000000000144471247673406200216710ustar00rootroot00000000000000OggS jvorbisD`OggS Gsh -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggSX O&%%{urpld(d3. aT~>k}o䶆 ;w]os{56 [ "J6K4Uuq>.q6:lY']|"}L;M訪:?~|۴Ƣ .ȹ8f,ISK ; :kh?OEJΒVDs:">w[c)SʓEݎ = ve ,և#w%B#`Nʜy )|bHUiFX|+n(K Rd ݸ![ D8VRay5^c^k&N&8!\h`]J4v??+ӑi쳩7}w01Cm %$C=<[o2 .7jX+L܈07t n_V&WFh2o1KBTWL{lrKҴpao~j(e}AhO Ŋ@Ӏl _m,qyQ n @tJ^.{ā'd}XNo1a$kc{̷5wW宍u1e3WM}Kb[a-xK$*L=mi;  ޙ~̒ şt=9/$n,UciGUf|?cɒ2Eyklg훺UNryoU^ŸGE y˛m UHRUza'{+uٓ." [9 CpvMd@+~a=|Ke ].+.sʋuHwkxM<^-8BޒşO l`g;l7}/WP(pWi=%3@ btf+q7fWajԭWޤ˒GTSu7=C^cQ~cAM3m mĢ sOuSUǨؚ;k 3E ڼ94}%\0e]Mg^I"*ܸfY:I6Dux*}Hz#)KՅ.9w}2 R fѮO4BE~>,3O$%/Ͳ*bVU$yZhYv<.]1u&j RLC4'BfB_#1>iuM&.䓚#M@:s |,>ws$,C&,]V>B}Wl[%F]5x粒>O~~|ccDnrM1fهݫ;9S-]8-T{|o\ǬGt:Bt- <$]caS]|.ޙ>=[Ą /dm1ZsR9KlCg9俥Q5S'9nxz&+.%}δ9F#/'IÒ}@Ue`WYXZ:aea5bEK@Q[?Ve9_O1^<xΔ(nr->tX逪~FRr?v<:1؍ ԼGNf\~ QMw~so5`piL%Y{6ܯY|qnZ66K"Id<0~YG{N,ޯ)*ھڛm"΂缙99d }`4x3ʁ6a@Xݹ$oXR⒯-f5k={TK_FIYD Tͺv7K܀ EG|rR뷈! [xj@2 {nn(""wIV3'=/ňe1w)aR=3곚9ŕz$̬@_o,GhT%! >5m6ZJ$@D'C<4LR)yg`> ćQ>eFtٷˊ~ H܀ HޙCG%Q81c -F lmms-1.1.3/data/samples/drums/snare_muffled02.ogg000066400000000000000000000117511247673406200216650ustar00rootroot00000000000000OggSl.$ $vorbisD`OggSl.$"ge -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggS0l.$z'&){MnV AH=*2_Wu¸~uOǨtY}Ú&\`*|Ny]Ϻ:)9 |_M yMJSY,N8g|*֏Y^H>L+@^ lcEIJ;ֵ|;VuĉzNWr/*!o F[qD\v˨{TմH3̲GIWp"`"8?4TlI7_uQꖳU&0Lw1),{,5>D/¬ @ z2z~kѧ =؇"´r6F)oT[؟1]+gw9f(dn\L#TϺy~OQ s;v΍1\8Xt寠)U5Vsma%Ҁ5&lYwEwj 2uM 0i2w=8jvΧI&8 ZZk)PVAz\Fi_FzQ<::I2!UQU$ _),dl 1OgyB2$S5O~NHqrU^eRF4Lt|VK)=]]cxz—V[|u][P8{ޙֺ%xwr&5°]v)[;WoUٝCbeH u%jN͏Y7;xFҨVZ8qP ( ̐ ;[ [r|)w\u!Δ{4︐{֛Gb|Lem &~NX\=Pe[% Ux11e^.6(;΢ xD'> cyu>zo]gH(uxd#)qc!|81_W#R>W37WNGJIAzކ\p Ot{;mRZ3^2؈ݯ۽VgrGlw).ؐgp: f 6#K <Xz,wĤs$/f:%Wt˵E! ~C>(ާS1&lDՖcimlN[ 93/FZ9K.#7]n:ixAYG՘)`cH3+iPYD2Y˝oyρBmnO H$*%sVn[/!`C$%dXEMs٧uћۣd/Q7+t3[RMDlޖ˴MJs}_sc ~ y 4FA)ugy Xt,0Ax5 t>/n )@\Q )cb5dE/  )/fW|l* `]iZ$ 0>/Clmms-1.1.3/data/samples/drums/snare_rim01.ogg000066400000000000000000000111771247673406200210330ustar00rootroot00000000000000OggSe d[X*wvorbisD`OggSe dv -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI*,.02468:<@OggS%e d~< '&)#Sdl'4/)]IEUu񡼝wpAD&$[l.IAs} p6*> t[8I /.i![5"}n:z.Y`3``4ػ;(;2b9麵3G~,bB}V5+g56afVGqXl? a7C(3GWɅa!k~Ȭ>T;W 7v<'ӋIwƏrCv#o,9b^J ~j&t C!'/=_chc,{-{ 'aV-Ӻ3U}bX;.ws9st9]j#x"j|/Jfs}qGlk^J1.k^Y|k'UYL̡gJr ;aNJ:m뫄if>fL;QMݡڑ"Oҥg}y?GlYLUu#blY31;5EgLY>*ER奘%jK$$ J_5-SGX4☸Xta<-liGjiv_ǀi|uW>|]SP$>6ml^4-aCTV'$&Qj?Y>DO4!őq(~8"\7CZ<)8ۭ3^,Kx%i N_wm[b*DkMJOY oߕ)Q`r'^gi5o#YN/4-|%0'm4&*{<ж6< D3q6y~:N{ _nlYQL-m4[9뎸jQȼJ*zP/ q˓md3Wt7'ТEwU*6^UTj݈p)1&ǽ[f37BX.%')pPlDٮԪ`r0}ey_^1N_E],=j:c'a\2&"Fͬ!~蕤?Pd)@]q݃bsM$zD> ϢsE"۱E"i̘}V"[Ť6ʙ˻VO76@-)فO/F -O=H1I J3N4nmXl2{^}X>1ePLҾTznxp.]wG3Dz ]wX=QI14JIqG 0)C8HMu/PD`3cE UQlmms-1.1.3/data/samples/drums/snare_short01.ogg000066400000000000000000000107261247673406200214020ustar00rootroot00000000000000OggS@"{hvorbisD_OggS@"Uu-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ20tNzAէԛ(ͥuhpnn\lv Rw(K2>3ZΌ3Z !&(s͞қ6B׌Ntfmnkflfsj 8)zH(BJ ~X$%{ӟFc`λ3f@]ڻ|ug[w},II2v}mF߭=$9(m|N:lVr}Ga3 Ϟ/qȋщ3XCJsl־jk[v\u:7:YnpC#EaĭPB:e` .#"A`':84Mۢ>FvЌ*ã#%|2&3MS[[wǯc%VIGm4IKK !Z4sݫy5q6?~̧ ug\͏!% ;ccЎ3ӌ((o. k$Rs_J̎x{U}O8\ϯɵnRϯ't-\to]Ȩ65{i6EUrnK&-+ Gj/}`T/zuFmȼx|W;2x<(<ؑI pDzLU`?@ p5lmms-1.1.3/data/samples/drums/tom01.ogg000066400000000000000000000245141247673406200176520ustar00rootroot00000000000000OggSw.gzu.vorbisDOggSw.g-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M01A(`Ex~N'+,+ iB"4ԶS;#zVM|Ge0U($/k%`2*Wjj[8p%ybA #Q: +("iD`c#aIu"ӥ!<1j `!I[~[Wؐ[~[O`: `vr!`y\1\V|Љ dSFrj0  8)iP/2;NJ00$ HL$vR$^+e1aC<^c2l0Gr!*p_RPXFc&G,%IHH F 1 `ǼDK 9f5qf)TAeE1RK  k2H/ivSZp `h `e@!~ i/-Qi%$Y@XBEXJq4P q Q# HDٲ"ٶ824Y @!ȩfk*C#-E)Z Hp$!6 9AJp޹{x $:q@3 [a3iULPk0-(VÂ=( 8`#aQAQD0ma Є6id@63 VAb#IR@lO-<f !.b^ayVAX"VE$>JFp3d`= 8Z:i9 }p3hE%6b0$/(&⋛5FUU /("&\OhHtDmdC2D J XؕJ8 2 hp~ Y#UNT@5-XNҕw&c n06eDOhKĺa0X/S:l2B5% 0|ymĖ!(CA2ͺ ~Y1Kj )rY6Kj;)&-J[UUe '`9 c2":@abM&N, D\8(B@f"ʱdd$xmahq/aT@)bD`@Gg EF,;ޜhVo/L1}~ޒڞ7y7`M (^)}ǰ RS ,UiU1TjI@ aX*. &6 EU=EI-I%cbL8P6%,L YRЈ4ȑAD0qGA^G H'#zV CA24dhBYH{O|#0zr+z ܯܭs/;扑Z290oLt2ӇDCR`(CX (} `Vqy2U EY**N FAa J5 E0r AFrH04%.$2B!GDWzyu,0 *lȶ(d,u:J"3H2M9,8_d.bf.O\=EZ 8)$hSxz&pkP#D(2c H~!t:jgLUը0*Ө 6#8"  D +ea! ($;! aYc(6ibA0`0,VXf`YHC^Q4XxbJ $]- I2?۪ȅL5a\g.6`Sǚd?~Ƥi;pVfzY۠ (2( ~2$(~5u 8r0QU%@5 VcJ"8.C ≄ + 1&!~c6#9+I=7#rX!n qNĴAmn1T2zWR 8 D.E]hԙŘDd*Hb,^X`+[LGyIN7\--Ò9!T BkQ5'j5Mc%1KB'}9A @/YGZ\CƌLP@(5U񌹄D#ѸJ$pS=u1&ِWE^VȈPM aҨB 1HC[N."NJ,UYՂut)$ 9FaF4M10B U*D`E@ XUe[DXa"6LoI.V/6ԩ85Lsfa]rH*?dz+D >'²^#AĜ z0LUEJ| $61*# HATj2&B0A ) ` %a ha cV[5C4@3 BE ˝VJr(*ba=\a"dԭEӹv9iM=8o_VnwWl~; U0 р'}"/Sv U5TcLUBH#j"qY1F&Pa]7FY6-2ȋ,dL!U %!&kV+@(C&,EǁcW[2i=J`QӱͨM\ cdW+a 9W=]somcƵyti~8*X[E~0g-4jz &p`:'}" NzeAnQʌJHbkYaڪiH\XaS$B$MMS(N! ٛ!ʔAw64!"ZY6݂Ȍ )I!rNBdJA( `2 [. kili3beWfF2i9TIrۦnyy3函%Pqe>(,('}p&:7ddAH\WqUTE"UcAEEAR 1A$B[8CGl(uh%BB]k/! QL#T4vZLȲE7YfY(, TBƳ 0cj>'[luenf&Y,Kʫ mHqlnt$-rB.F|3RQgߥr@'}'}T]HŧiŨUE+ > ML a`E 8+Jh$c Jf2DF8 CRlY B!Fxe?*, ܊#s8z{!LmIP`܃u7oΟTVvgD* [TL QAtu|')[$AmO/@@&}My/`*>)c2UUbVS%&FETdB6!&E":H(,Sc^e"iA]Jf@Ch#@>,D2b, 2B>57= Hn,Z^3k liYVJu)Vv*xWZtgRAhfkMȁjOggSrw.go Ӿ&:5-QXl/npEJ`F찚v"F4&P# adIJPd28#ر" S@`\LI^'\ q tp«m(ykɈR/_bҍfg ;q1EEY> .Xp;ޞcQ6 :OR&}I>=Tv#'&_>**ӴXjI$aHh$>k2A`DFq V儐A6NR0AI$VԀneCa$;qRUb@Tq+G{7B86:xk֊וȮ3DYY~Xp!M,gnnD.#YFV F'q>c}1EVYԨ"ذU$DCc (PLرԬ2I%1YbL<`ab XvQbTPJ (I+ M&o;!(0rdWPbK 3jֲQ I@YH0TN,;ta+7n[p ϙ^q{LhEbV3RN;' A^'}7p~8ܰrc*"D ޴w fcqQH4Yq\Y! a @VC al=-WNS84 [XJ(ֲaPH7*fjOҩY ՂQ.0v)$9;DNmY?^t5FOplvdJC6_Oausg6vȇKJ9V_誾Z1p,9Hp&ޤ׾%zr7*kU%BbkQSlۈE4tTx)fH*.]EMA*lQ%a,a;)أ)y-j7*djT"tgۯ:3c)ٝ).|vwӑXBmO7%#0^̶ٙ֡l- &I?)=pcbȌ`3Ũ:j{ؖ*|dT(EV e2RIVWXAb1 ,A:f M[)]StJDG5E@aV P6 !l" 0IoɔHv@$V.Vu*FDںgoDa&ʯi0^ݮgpԺ3A^'7V\'M :*OL"BUb bUrzMCA(TY-CT  Vו(В43P( &K,j: jo²%d;%-P67a 0M!C(ok/Su]B{ܘkS ^n%ߗHoCrEw7ἲw8)u`~' w!Ԩ*3j*0 aҀm; i4CINv96Ƭ, ɬ‘X*;eՍp /`TY0ZK `BU#db$A; TYL 1$ρD֥ߢak&"V-Цn^p`. XXLA|\jLfߓ  `phH>' 1FY*W2UEGBFHV+ & aLc(vއۆaecl7 LdDG`;( ,&dm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ"}HiKř葨yہ.%Letp/B|_(0D/u _ kwLզ|+Yzc}9qjsǽ&'Igо3&P 1}9:̆W$*_XiXIQzwt]6*voy@*#qo'ٹG9ꔇ7Iff甓 \),^׶b씼j196Nz_cK86@?WctwrumM"~#t6m jDdLlBT/gZ)f}.~f :Ya#^3]]؂J0/9@0<n(x%H6ZN @[{[8lGr]H0gӱi]ӝA!coZ>W\o8T:JO k5Xpuݗt2:T:NǷڋ݉̉'狮 6e*; [OGCv $D_B<=s}<[r15z'RZxD:tS| W' NuEd\eCW1)"-ԸB!56zj}f!CϪ@.XYdUc9Zzs]jWH-Cow"~ jQΛ EϏSOId%c%s̐xH=].wtω6;h,[!EUT˹$C a-Ul)s}D-_2 vaoykIt?l|w6mGV o㷧=kN7^~,ܹj9P;^YmzDN@Vi䧉̋U/\JQzok`>mfט*bgalQH`#(h *u3ZؖV[ށO U9UBhWLlo)s:;OOn܃cSN,w=Ө{{&${w$ߞ^۴MM~YMiz}dW;3 `kz2fލ"T__ު|8ݿQKU0BQEuVfJ]XM,췷7~{o]ϭf`ت;`N7&.獹)llmms-1.1.3/data/samples/drums/tom03.ogg000066400000000000000000000246771247673406200176660ustar00rootroot00000000000000OggSAgvorbisDpOggSA/-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4ML>{ԝb6;H]e Y(v6ﳣ{(zơ. }_]; nzL?Yü}X-4W$][\7#$8_e\A2xa^\⡇]u&?H(KXo4h;w* 4$bldi$?kیg7i/V#"L C@P}5PUwaI|h 5.v34 ~!v Xu.1>L=_֝g 㵱0+A,A4rd]A4HWA)$dn,`*l!OYw n~%gJ_PZkhS#ҷǫBa4{K%ql4tTig 8Vj-l<櫓J6zo\2Q 2{^;nIWx+V>ht>(}g\sY] !#3UMm:C<51[V=hF[MS=F9k:.\ LGed-oQ$7**^eWa4 s{>VYF!\Ӕؘu=KHӠ&0EqhG%$@}Cw.X]$N]UI3}*}/qF2r<{S[e=΋*i 2 wI[a3zyV6#`*}πJJ@`q_QH釭l!V $k^=U (>%X(}#ˀWXMv 2n]"#M^g j8z mH!{B)UAvuG-,Fg/)U bC @,}s:=8l 1=EwYA\-\ϔZu2Pz1E!Kq<'ZrFUZ]);~X1xzhZkSFyE^P,h0MǬ pܵ.`0۠ R󾬕5FĉNl[)䶥ܖ1zCDɨVMTJ]v%f뛮57R+I( 'ȝ WR¼@}{X꾾۹7 ~{EC>r@,1FuvH?^}`{D fr 툭~r_Bڒ̐Jj#@"UР- }ʶP6Z5Huۋ0g07J#28s,V"ԓD; n \L 4*\*7m,햔q"麥U? kC(6R#ZGz>lcwz[ #NPn@iJGI7{)z%bwq}kz\AMN*wԅ6@ހ J,4 57QF> $ ׉mZnX5 a0(D!}=>k&qmFLԏ*!@&\=.ڡP\ofBzЈN*o֡% Nd:sK>Jh: ,3a޸l r[fajfMY)j ,e#ܑD{ߝ̦O[!w!IruZ{;\|%eV@tNފ5iY\2?AvDf$JA;;*q2/P2dk*n-t'ѬQ8f~9!QWL'RR^>.xo,cH*ļWؠSc,6ɾUV黵OisFh\+IxL$篓] R|UԆ#K‘"|Ð%V( 1;B 6% U߲4:[b՚Vcȼ4VF+c,r'b:V1&E{2EU,RBڬwa֍/MIλ7%P2 ª-RC~?U΃#V";. SŢnكdWi8 sv%wK8O `(, d 0++(lpI+]):\8Gmܐ*2#tk&GQ RAŽm| T >:-\ 1^<  %w.G>W$[٦8K){R8hk R|KJD[ "pNqa($l l51ף8\boxKw@>,ņd7w(t` #hT PՉp7crƎC{T -׌JtWhK>:#fJLMuʾE(w ,IUrA[jlH<(L"@zG"Y)XZ4rյ~,"%gM5 %#iCQݦ% 0IC.XB Km-+=`5 D['vӖ̇N5`MZŽQWp`/!ڮ}1P ~\<vjbu SV6vMlSɱat33][@AC%q]VT3gR;5e[dz׮Gz`sJŊwܿD`/mv9@{KSz<{SM> aIX ~F+$ -^uH96j` "BڍqO5w\cbȄcN&/V9["JO@>hLW]/bs738(mz c]!<^X`RIE}Q *9&P&[:X ׫;ܭXal=g?nԗˋ`^P KR>y#IHC(0rۡNxQ!;JYk߂+Px^?lʚnK Hm%!PrOF_S~r>AАN(sxn[kd3hQxTsJUmq Qkq:jx_ʊ2 |M#lĠ/ )KN[ aF.:Pl(#i@ в?PB@v1_'qk{RUB&݆cɜ4{;اZhNʼثTJ?Ww**a<9cԓzGQijmS5~&ߑāz꫌(]8sbE@4ǏImo BC' 6ߣfR( (&TZĪLHj!I.#ck}7O l>]Ͽ${v%I =l*O8(B- Hjp3JJ3+zZ?Jn.q_*StDսN^!=oeҥδ,у-$nr#졕2MJuqY=YH쪯&2qNT.aA\M 4^ ˻Llj(5`S$o$5HbNl$أt^n76m6mYFz&)-2yXNÕ㛚\Eq۷+9ۇPV^')yJN୘$.2P2Z`CDܱ@_c" +:EePV#?f1}tb[-*j.e%!p4\]3Þ+UF v !ba$=FrNMQIz7V(&)4=qǒCtT[: l?ޒPЩOB[^ b8I DPtk?,71#E&f̫=jVzG):&~}}FMn WkY)$5<d\_͹T-@3 1+,! 0׼uAbj׌D@yY6r昛^1=1Rb!ξBD MÃ-n*ݩd1ֱ>d`r rZA­]m .$ ;<űhʻWJ82UO'GCZeMJٹI ''VQ"^u! a8u4B#|Qn2C&@< C+5ϏF{T OҴNrt'/񧐫By*+v{P!FATݶ' J[,E`]b:(t$@t~7F$IR]+% H 5I]V t&Y#x h/H$I@h `_./I(/ )u)٨*G+DpU%U)=-IP*?y=\,a4a{ D )YRA3,5eݐ'E%> $ 4kɬs}yo| Z!aDNL[\Za)n6@myW(Lh=F W<`1l$ pGŧ۴:S[hR5 q7hvbۣ(^GAlF"+6In dH:jCQ= [_>S8JE22@<%E}O2Eb*υ>,>Bvn_ CTVH@{k].C#ck^;+}c%?n2GPʑ$s8d9zqG 98d T4nvq(e3QȾDaW\ɝ=s w C4$L e )ԺrzPэ=L2Tvfj r(wkx>`K5t?3qSb1~ץ@TXNKG39?%Z^"roGOr(ПXvuP4(y(Dķɝ%^A[G$pihK}5ٖX#T*[I0tRǵ 7zոin+bs/pz>([Y ^'J(4$wFLG~B"]iEBYf'QE;0\Q)7~%S|oi^zD@i[matV]֟Blbxzos7e&)鐮3H8ʕhw?"̘UbxAhy =:YTX%H)3CX{6\CʋLQoV2RY,P ̈́ɽ=$mp$4.$*pnjME}뭨th+#+ֱ %Xj T4|':P5uWDW865'.uC4M0sԌbPpxHf[&ɽ=k8 @`F,8$\@{ج.OVb! .PRf|8(@3$^2!|8hgpn 33"R08iN\Di~[垿`e(r,"\ܠ 2E߇bi8}7sQí~T/s@8crvr DRRn3:!tw62$~];?I: TRN'j}J^%a;{V;@ W(Y&c?%p/z_ ,}%c[NbA$g*l C0KJm^\Ic;s]WImgBЮU(ι@*NJx{+*[~SbLW9իSzs"`v%#l1%75OC~&#MqQ?+ :7_f`A!Ssx*63; <v&|{\5:aHQ)vhJ ~gVdX)!ߩwi ct`\L/RW8ĕۏd#(_ 4<ɱȽn@ LQfNQ^2@E0W1_0 >-(> yhZl]|!zen 4 *Ra \ܰqwEDԺfnu8~$qrRڥ`ܭ-Ľ+X `7E (M! _͖^C`d @s ;X $5آ6oM@سԦ3(2HgAJD{I!z@Q%ACT~Td<1{{£yt:{H;(̩!G/Qb 銎ȅ!'~rC4rB~cT"$%$o~  Zdy\ȯ\ q]!S-M#Oa*RZܽH2=V$qг'k%+*Q9M?2g9#56ΡbuzH'JEN*> 50LUl$lOymV[ٹ\=EP[<3`@Ge|sHGmG^_?C$V{Ƃ@Fa:.%o")zewe1#I({%ش >gMT\nxDH\;`}do4 b?ZI&~/I!glp,X&\ZnF.';MHCsbW"HA۪ث^(@<%@^s{8v::@RwL@.ȵA^b's} X.΢<4HwL:ĕ>&aVuI7*vg݊!JQQyφ@>΃$Ce٠-*#nzRB&zu :-_3rt1gw,Z^mq!p֘^XpXfV5rD!+8y#pa!}*9[l\Hh4NPݩEftQ!, X@J}}1p*`NX6 Гf.5=:+a?ZA_E*[ߤi# $R:H +AҦ^m?d֑&qcv_/nIHpvAʱ6i펭$`9bezSthW IJDp: [30R$}WLjFb㋧ڻxXG_Uq!%`0`e">Utl p8)V݈5>Wj<O0e)ѭ /P"`dL]S1Qx (Nd5aĿ/ 9; M_NDyXTiWuAD|g23+j9rcJ- +wɒJB: ake0Y*:~Ƚձ_"(}F@C岅Dnf{!Yoˈj%c'R D"Z]* $ |gVk&茷#$ܙ#nNq/ em++WORԚ4Qx 0D@C-!l-E6,*5xQ4 wC=zʧ7m4DiZ*& c{|utƿ~nLtVUyJ-QҶ2-^.ak9YB.6@t6E}oFh *{DLfIGRuΖ:1h 3P(qV8Z Q$>{Pʹlhf7dBrؿԚTNwyHp8@P[+aV9Oq6bk&%tJCF>kL%r6]fqDw10")bSw?ck2a`x~)|m]\R(zF~ ^wӰUL ‘V0,BŮ}IVr<Pi,^E"(>c|֤Tأ=ܮ,[gdQi"y萙R?b؆w:d^߿װQ+W^8Jt48V@9Cƪ 0kp,~ а詬UYH\_G\ϴpٔX@0=E w.ND6QyXN?w\i{9ЪFdzkym~. {؃&|X" Zwh`T^}{h"YC.c˶J8UK^T=mcvz'8V; o;i Z! RWɇ0K80/:˓ST?꾩S ۺѶ79Y>}<潩ַ4>}>4?P{nI {T,]S弾ۚ.{AQ, 93רZ$C$XxWyf% *rLhE5G=oU.Q{>,I?;v}_@tpX!4U!yI{U%uLXtcc7`.L]R?d7SW|{&μ()BɅ0M$ L +&bѹ~mKB@mO~s@RI2{$ysԉ5k~ =MiesSC80 ruŏe,kY=5T>E\;<! >궙vBϿN3l;+h+{Ah6PC"%G3[)Q]Ց.>&'KQЁݞ@õAEcy_7yt`[KCR%28VF̀*._9q\J`@3QY0ݎ$s*TF֧ lPݻ$wj*ozӘ~ 84:fq n17u٪l!kQZ9=OLRfmwqO͔Aat7^`];6DV PX'I0%1ȕ d&R2-LP\*޴lȰV`K yt1P*{[#hh݈ 13 QH%{2sZ}H!^%aH^%Aq3#W@R]AJG=fA`VD_SCP2; cg gt'P@ϖ"=s)T߄Xt/I63p'cP~ٶ?eZ33ke"lk~V 8fX`-\] ͅlmz;yYߛ̏aҁKsI guko-ƹ|:t)@֭y;zj>,(K9eOrq$ a4Y劺;PP teܘ+t g>sA5і1β%yxB3alA]:X y_iK)1.$=aPd[H^x[ 6$ ݻ%4i(DETN+UZ0 PBɒhŕPf):<͎Xj$8NTyjEd~= >mOje~o\'?$P0>']f *,~H T([H`hh)^ x# ֬]FF#OVdkPPs >VjC X-/lK";CxN%]1w}+s9*+n8o`mJ (ғ6@J @w,]U  bvs39a*&ebe"˭y]7  -Q(vvO@.A@:T$#+Eh.<yo.#=yEQ;e=c{~y-= *䄒)*/ˆ\mVݖBy.zL.S 4TP~%dT {ڣЋ2Hf jKN@ qwZEAB6HA5~9gJ_әӱܷfh.""SDT媴fbV5A&K43ULG -~@P竈D 04R$/=֭,nIww̽stX܄qC@O*}{m-@]Y"6 GP= +~{toZr`)hB7TN|P<& @.?&om.* ^+xΖFZǶB{+t8oO$ ʸȐPB ~pϞ^왥?ګrQbH!ebf7>k*IGOcV]mo^pىí}p.)zd0g`"^\2[5%RenFxre$Q1_LTM[ ((j]s7[jᤤ ȹжRjzڬI ;2H|F6O*7B Շ9s h2 FST[?AN 5!h4Hz^]|"@| vc l!؏:{N _!.i'U qX""]1ip*KOejm]:1ah2򶛸'*inAcW6]b̈́P4u5^h ԁtśJE`E,OggSŎe};^s K5(T},I-8 V0ͅ$eQfuu+g>ԓ*{/ߌ`MS?<{yU'(G7I\}!<.jKN@25J0đ;tsXHj{w GE03ӟ"hnBr4T IZS3n^Z*%{=yӼ$ҡ?@L+GDq4.q蚪J0e"O d;>}ކұ( &̻}yMj*x܍K%ZлuѠi'Jz" ⦉+z05B2/ Umvj{pnڧQ$3.u']"{T>)} )_ʂe_c=5HPwAͪXkpyWo+hcr_O/1T]eofuE >]yJ]kM_+6w^e$i\#C l}_h^S߻?IaZ uh%Nq;!<X >RzpE2xV9B8\PR+QI.K8gX;`3R˭'xV[t絕ɈO܍pfwlb0=äsTxk٪;*#EƂG%;ؠ~oc Mt7p%dns{\('?<3~#Gl|騥+ߞ`p68YV.: -صR}A)7e䦷ܐx]a JHҌG} ?X}q=okHet5?\3&G&4o8?"E*LmHQu:T6|hLXK:1L\c,A$ ҽl\`XZxG+ CHKX{K`DgM\-$ lG8܌FrElRr5#J C/)u 2^Y(aiBd]+GtHq[z>V0nC{%Q?)y XYcYXX=ZI=[<~^AXeɀF \=clFJcPs)gы&b0Jt`MwfC-3\\7y0i _O얻::= WT$7K's.X]UkW({4SB!qqP>fj]~u0mr lXBLB؃O/_ߊaͲQUUU H2i$1H8Ƹ+ܓu#O)80gNs=K@'][Lz0@&`oR:d왗w!D"qzi>QKDOcd"LQ@E% #E7WƐ˦3tVF6v 4M}JE,[8* 9A 20J'qʑc1$d$] XQ d*X۶ XXgUC/ZBFX  ĠQɓ.H0@B" #X q O3ȣo5a/ؐ![omzӇBs1=YMCT`B ufsmx="ޤFu06S&# Lyuu!|z5O܄|è2 @f%T H =aG C 6@`Baa $r Bh}l `C"*"$!, 8BJD, #XSnlee@\Pm|o# e3n3&3Q:b{@Q5 `rb`KCx={2V,n>?l%t!ѯK6qǝv:=t}xCA0 q k~Igqm@mx-1(@_\Y CeD KH-jї]&)XDchzeǘ2 KNX(x﷪UMX#0 B aI:Gp0u4,A dJ J LU`YQ Q)@cl/ 8 ܉RLbv1 a sd=xhV's>z8r>> ݆~͢װX_Yf/xoLQU%Ԣxpt MqL@BEbJL 2@1a @%ɩ0Br(h]R!0[ΑHX!4Ή@‚0) #x!Ă9@݌&-I#kífMVf:x*VuV.d\yE'5IB @(xbB6<~ZVL|FD"Jei&x=ԃz=)T1= %V2W:4鄣,Y(I @,0CApN+*pT1 0BILwAH:7r܄tў9& !ظuw(n:hz;c\cZqhby;LezB(r,/x)jH?Vń_rUSU!d 1B* R=`)@:D @F(qཛ[Z44 ƃPkpcרb`ba&$s C)`a`be%,nSJ,%$PC2Ofû%V sfHC54x]<+;]xO)zIؠKgb9~c8  '=%J#uz)?@L0D*FUUEhVsxG 1>^ jYi Қ2`+nIG"JK@Mц+prbBx0i/d?d׮rA8#:ɲ M0Z)Sn&MB@;Om2՗a|~.XV]BmW2*hѦO6ؙ5+^/Aֺ?++#;K F t2Ke+׼,"Tn*W7~K{-̠"HX$^ٸq$DWc . ef\{<- ߙLlRe|!`UkcӊlSn椟 RMՙɰÄ J |3D8D'ʊ8g*?u}=ɔR'.U'w}K$?8Ǫ4 dtg7HTyߍ{)RGiy1u"ca$Y՚NStuO"rSrߺ2 l+U5Ҹ1իmaawFRO3]4@40e󪅅_Plmms-1.1.3/data/samples/drums/tom_low01.ogg000066400000000000000000000163411247673406200205320ustar00rootroot00000000000000OggSe T}+vorbisDOggSe T70}-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M5l+bń'`PҨc ,d}@o(N 7qXy *`˲%66(;nodT4! rJcaDƞrRꦠ,)+(B zVYsJ>@ CurnZISJ>hPn0fP +c;Ǡ@7)2\' <& yJ6қqӬ/< 2E_$;=>#+{:"e8K^%3 tK3gf` 1F&3FUUa5p& ~D %( 6$#BIXt_Lu@2;;0&U7iC7;C~AX5Ҭ(p_Kc3_|R>яruoM/I ezʐ?:]ns1׮mu` p^;SŠʩv]6;R$nV}B I J^KG@uTO󩝎@vT~\-*L0FUUEPajբY-iv)Q^y\ GD#qQy2 "X,XhU 1֊AFqm_&w3-L]*|fJft<A堀 ^3CRL3橝p2l,{\p~ђ^ Iǻ|[3A}xyp˽8 G;]yLG;u(3$4+Xx(Eϴ]bP @08C:C R"/ & lRx@rSٲ @la%C_bk˞!E`GUƨE%E2!zGD -HY0bK#;DBF(ʘx `, d} 0F& F+BV0Ă EX$FH,e@zWa",$ދ ;Ϝg D"f&`0eM  ·7/71˓A_5yE^}{2]bM2ZkC̦IQ֮-*SfD\OՂJv}XVcQlE JTHD9)0Ys> @` BFN cx,ʉ!Pt)ʘF (4Sl\<X,΂# 8wwZX <#]1)}f*Rewú1>='zf.@/ `Bp>}/hi|AS8y% eʵgGQ*W6(I9@Cd%V9I*Ia + 02"-kl$cAҬ@4 +W@:8*AGJ00HN/)"`$:phӘhN(-Y8e69"eoC'e"oɜĬLۍVc =BrVBv}[m!V8})kEB^fUU*  V;;;S(xS^(P0Baň%Z=m6N ,6!J,c,,22Ҡ!4,""J+D1@LJ# pK (IJ #D1E]]ܐzɛKb QRQ}wm;8XʮU20x ea-!44_᪜-8@hPWMgd PmN9pDc$V\zll<]gTG U  BD{צ|H[et_80+IZ{(0 D:XB"-x~Q 4]ŠSA! N5 6jn,pSp YG郸:ʜH@0~դ(K)K('! W b,]rTZX H M <~ , ~X{I?Y! Q)ݡm 5CB={` +8Kf39$IW&I8W赽ǃy^s?mR7ptt?iL< 18gע J 4> \w]6wց:'7C⤿.E p`Allmms-1.1.3/data/samples/drums/tom_mid01.ogg000066400000000000000000000156231247673406200205040ustar00rootroot00000000000000OggSe T_)vorbisDOggSe TNqC-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M:: 1223<9Btadf]d>ժ0KDU`"ad3eԤN$Ć./tEoi}l|_mav֩:*AMfub"\u|Ԗ5G[%Iαa0G'N>1 UUUDY 5 adt"e1JEbaāB!RD Q'$2 %) Y0B#@Fl(!r?uLɄe#`TS o&_81+bzz_w.&](WۉdOf,7gb9xV9;@!b]!|tmU H:~<,C/x\Lh6DF[fUUU88jUUHXrL DZaH* t4"+ѷ ubB B[# V(#9,V"a| ^Vp0l&Ruh!Cp -m0,',, #w3mz`3qv~hOeqq1Tz6 p7ԮNm8@L<0+ c rk./tne/-LLJ a8 w 6.A|TQD+јhBÖ,#E )XO4AP%$4cɈ6#*;`g6TֵٴWsS&s0I!{tpy}r9Ll[zO_P2'̤K~Y &c <8%0\^OS+x;M/uVnfNcTUU l j. q4ժJVSP`F$C:,b)So0dd$C2p' d,/FI [vs͊UPLVՎT9! @`T7ؽ}i\MidHh01IIQL%>L@~;5Y 󖬆j dh;%LرUӰCzјx ց $LRE"e$odV6} /_ZX2A4X\2t~ 1zuFVFaFϵ2 YV/B΂[HjXL_Zcn,U9c[mfi58qVH;G#h$r-~ɏd@"e3*BdF(FHSU@kՈ:U!b@ȁc(%(HI$hU(+4؋0Q,acA$)cj"ˉT`$[2E(J+ TXL`I$4 +i\pu] WK٩GL^x"VLvenS3" #y{EQ[ 4@p})40}?17QRPl#QUQ!UTXRKh-'bc,YDX$D dDl@"-/rsc$ h"mk`m4l¶@,ttA%asr0a΅ERqE2=%Ǭe9Ɨ@tsM3M#-/!<&`P ZbvuJ;+/61UU(@1qE8ÕAPKMb$! Z8Ÿ9󪻤#RҁģNT2!M@d"TVfBmfd*J Cu䤪bQ_dh솩*BP"f1!9oފήmʺ#;53n`p<1 [[j|S`0!"N@Pޏ8lϾaQUUFUU ?OL= DMLb5cRpl@ A! "f k4 Dˁb9D22iELb@N/=k\v)+Ga@ 5u&az*K0CEZCGn% C%3R,jcTVSy.Xrq!}`ӕEjod/3. s)/ȚÀdur2KJ.0y}l6YRUU Ÿ́dk#og8i(E * S&SdR(!$y2rI8ZVV28VYK7&j1#:bko얚h{8_}3励q\(yt16i:Yz&-}m~egW=Lf9.bI~|ss23l?Ig32 .P 18,[etUC&$Y0\L({SRI0O_0<_p\[Ny a$@D 'U58W]z:j"D[w,\݉M- ,O+;=e^^43OE<_eiUNO~ p6ItU#(<;:P:jcqq ,]eMzU{<^U8,L(PJsq z9z>=&RfMSG8go,SEE8^SUt%Fa xǟ6qzuß_WN- 0zL`e ".yXtzѫZk^fd([Ȗ73v6/l:'m sҿk~38X!}Qddd$\." DZ{ TUv Pvnvnvnvnvnvny}}}}}G 0)60)<(lmms-1.1.3/data/samples/drums/wood01.ogg000066400000000000000000000106531247673406200200220ustar00rootroot00000000000000OggSA"evorbisD_OggSA"WT_*-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ靔>O U|}|u: b' E@E]q ]cJqLn,Ql Z;!Br"7-'pݮ_zЉuJ>9\l=´,e\p =5^?Ÿ/@Nfx$kR]Cuu7kl)V:,A_de8aO%KA!WԻU.-x*˪ Ů=u&㤣Rk)>Xd6QMyl42C~ Q\~4=ꕌh)Ӌ(F,Xa}IXc1W' ]cFUUUݝXy/=wzwI ݗZ8Aa (]ze~"gY~-ϞE>#~XT[Xޠti?^]eg,g3)^: ]3ݼ^4]w3yב^w] /׼z7U=rGEq.,s4C8Xlmms-1.1.3/data/samples/drums/zap01.ogg000066400000000000000000000103621247673406200176410ustar00rootroot00000000000000OggS&"cvorbisD_OggS&"q-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ=40Nknk~b!%믋leW/lw}NeeplϩK<>o?0 ֦j1>/rӓ$X7MaK7;O|̅o1~CvAA쮛`9ټx4aSA}L~zu3}ô"PI_M[*RG\Q.o PǠN+j J{o\&cD\6SsqsU2FPeel+[Emn y` '~jѪ@RYf-AsS3˙[xe k)/߉ʷ vD[_3Ub|wrf;%wjj߂X#4JΞk5$?L&6@5b>(Z}ϊo+n_sb̏=+  rYf~ŜPu\t]9DZ}]u$9{Lg9Ƙ락5əLb' 5_~7'Ko$AOdZu]uW;q~ƾy_Cۿc2}L[&urnr3{BC'^؉Rslmms-1.1.3/data/samples/drums/zap02.ogg000066400000000000000000000107121247673406200176410ustar00rootroot00000000000000OggS="LvorbisD_OggS="X-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒץ%!~v~\>@8?6Gd=;dX^<` ֛>۞&M2pmy ENbccy~Vtq~Iغ;"R{^o[Ջ`qKJ6n}܂?b LnhqɆ."E%MZ.L+S;~q&~Nx]ΗuuoN# Qt,^̒_\̒G/3:}lmms-1.1.3/data/samples/drums/zap03.ogg000066400000000000000000000107521247673406200176460ustar00rootroot00000000000000OggS>"dvorbisD_OggS>";-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ" 12/%&$$%%%,-)^y{`OXJi5- 7^'xgq=EAk´{8m*Wjw_W<1M=$>o/K*@OHtD bwnUcFB$ ӘaUQٞf.!oFުntDeo(L"ɀZrW: #Iz7~6Н2d5b~#inhm[#)nalmms-1.1.3/data/samples/drumsynth/000077500000000000000000000000001247673406200171115ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/acoustic/000077500000000000000000000000001247673406200207235ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/acoustic/Brush1.ds000066400000000000000000000006461247673406200224250ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=87 F1=180 F2=125 Droop=0 Phase=10 Envelope=0,0 89,95 596,24 2384,0 [Noise] On=1 Level=64 Slope=-58 Envelope=0,0 223,87 1654,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 lmms-1.1.3/data/samples/drumsynth/acoustic/Brush2.ds000066400000000000000000000007001247673406200224150ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=102 F1=180 F2=125 Droop=0 Phase=10 Envelope=0,0 492,81 939,28 2384,0 [Noise] On=1 Level=64 Slope=-58 Envelope=0,0 536,70 1013,87 1460,26 3665,18 3844,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 lmms-1.1.3/data/samples/drumsynth/acoustic/JazzKick.ds000066400000000000000000000006501247673406200227740ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=132 F1=90 F2=68 Droop=76 Phase=0 Envelope=0,0 521,96 2160,46 6034,17 12962,0 [Noise] On=0 Level=64 Slope=-70 Envelope=0,100 358,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=119 F=100 dF=18 Envelope=0,0 52,100 2086,6 4708,0 lmms-1.1.3/data/samples/drumsynth/acoustic/JazzSnr.ds000066400000000000000000000013671247673406200226630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,100 2502,100 4940,56 6746,44 442000,100 443000,0 Level=0 Resonance=0 [Tone] On=1 Level=128 F1=180 F2=153 Droop=38 Phase=10 Envelope=0,100 521,95 745,19 2458,6 6481,0 [Noise] On=1 Level=100 Slope=-68 Envelope=0,97 275,15 668,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 F2=200 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=1 Level=86 F=400 dF=34 Envelope=0,63 1494,37 1788,4 5810,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/acoustic/JazzSnr_H.ds000066400000000000000000000014141247673406200231230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,100 2439,100 4940,56 6746,44 442000,100 443000,0 [Tone] On=1 Level=128 F1=180 F2=153 Droop=38 Phase=90 Envelope=0,100 521,95 745,19 2458,6 6481,0 [Noise] On=1 Level=100 Slope=-68 Envelope=0,97 190,92 317,21 668,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=86 F=400 dF=34 Envelope=0,92 206,96 317,62 1552,36 1788,4 5810,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/acoustic/K_Muffle.ds000066400000000000000000000007141247673406200227450ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=181 F1=90 F2=40 Droop=21 Phase=0 Envelope=0,99 1862,50 5066,47 7449,38 11546,0 [Noise] On=0 Level=164 Slope=29 Envelope=0,100 291,37 656,0 1192,0 [Overtones] On=0 Level=119 F1=876 F2=1356 Method=0 Param=54 Envelope1=0,100 1266,31 4470,26 10578,0 Envelope2=0,100 894,45 3278,30 10355,0 [NoiseBand] On=0 Level=161 F=100 dF=35 Envelope=0,98 1341,0 4097,10 10578,0 lmms-1.1.3/data/samples/drumsynth/acoustic/Kick.ds000066400000000000000000000006511247673406200221360ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=132 F1=90 F2=70 Droop=68 Phase=10 Envelope=0,0 89,95 2160,46 6034,17 9088,0 [Noise] On=1 Level=64 Slope=-70 Envelope=0,100 358,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 lmms-1.1.3/data/samples/drumsynth/acoustic/Plain_Kick.ds000066400000000000000000000012621247673406200232600ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=100 F2=40 Droop=0 Phase=0 Envelope=0,100 1266,40 3129,15 6332,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=109 F=2630 dF=81 Envelope=0,100 210,0 690,6 1920,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/acoustic/Ride.ds000066400000000000000000000014041247673406200221350ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=60 Envelope=0,100 894,45 2756,18 5289,8 20113,0 [Overtones] On=1 Level=108 F1=4600 Wave1=3 Track1=0 F2=321 Wave2=3 Track2=0 Filter=0 Method=2 Param=72 Envelope1=0,100 1341,37 5215,10 20784,0 Envelope2=0,100 1713,62 5661,35 20560,0 [NoiseBand] On=1 Level=138 F=6500 dF=22 Envelope=0,100 1639,38 4619,20 10802,10 21082,0 [NoiseBand2] On=1 Level=23 F=1000 dF=42 Envelope=0,100 968,24 4842,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/acoustic/Ride2.ds000066400000000000000000000014141247673406200222200ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,90 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=113 Slope=100 Envelope=0,100 1490,76 3725,48 15495,16 16538,0 [Overtones] On=1 Level=100 F1=7182 Wave1=2 Track1=0 F2=5.3 Wave2=2 Track2=0 Filter=0 Method=2 Param=100 Envelope1=0,100 2533,38 11174,8 32181,0 Envelope2=0,100 32032,98 33224,0 [NoiseBand] On=1 Level=85 F=8500 dF=35 Envelope=0,100 2086,54 6257,27 15942,10 32032,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/acoustic/Ride3.ds000066400000000000000000000013611247673406200222220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=1 FilterEnv=0,78 442000,100 442000,0 Level=-6 Resonance=0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=143 Slope=18 Envelope=0,100 3000,35 10350,2 37050,0 FixedSeq=0 [Overtones] On=1 Level=164 F1=7834 Wave1=4 Track1=0 F2=4569 Wave2=4 Track2=0 Filter=0 Method=1 Param=100 Envelope1=0,0 150,100 923,30 3129,12 12738,7 37650,0 Envelope2=0,100 19443,0 [NoiseBand] On=1 Level=181 F=9000 dF=36 Envelope=0,0 150,100 750,55 4050,29 12738,7 36300,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/acoustic/Snare.ds000066400000000000000000000013301247673406200223200ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,100 2309,71 4246,44 7300,59 442000,100 443000,0 [Tone] On=1 Level=170 F1=380 F2=230 Droop=54 Phase=-45 Envelope=0,100 745,41 1937,18 12217,0 [Noise] On=1 Level=142 Slope=-53 Envelope=0,100 521,24 2384,15 7971,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=1 Level=128 F=1000 dF=100 Envelope=0,20 745,96 1490,36 3203,12 11025,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr78/000077500000000000000000000000001247673406200176745ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/cr78/Bongo_h.ds000066400000000000000000000007021247673406200215760ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Stretch=102.03 [Tone] On=1 Level=125 F1=623 F2=623 Droop=0 Phase=-180 Envelope=0,99 231,72 946,21 2138,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Bongo_l.ds000066400000000000000000000006621247673406200216070ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=125 F1=412 F2=412 Droop=0 Phase=-180 Envelope=0,99 231,72 946,21 2056,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Clave.ds000066400000000000000000000006641247673406200212640ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=125 F1=2450 F2=2450 Droop=0 Phase=-130 Envelope=0,99 149,66 946,21 2138,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Conga.ds000066400000000000000000000007111247673406200212520ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=147 F1=212 F2=212 Droop=0 Phase=0 Envelope=0,100 328,83 2145,48 4082,43 5334,21 6853,14 7002,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Cymbal.ds000066400000000000000000000012661247673406200214400ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=0 Level=153 F1=8600 F2=8600 Droop=0 Phase=-180 Envelope=0,99 1013,51 1013,0 [Noise] On=1 Level=79 Slope=19 Envelope=0,100 372,32 1490,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=1 Level=132 F=9500 dF=48 Envelope=0,100 521,92 641,52 11174,31 15048,16 21305,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr78/Hihat.ds000066400000000000000000000006611247673406200212640ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=0 Level=153 F1=8600 F2=8600 Droop=0 Phase=-180 Envelope=0,99 1013,51 1013,0 [Noise] On=1 Level=89 Slope=19 Envelope=0,100 372,32 1490,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=136 F=9500 dF=45 Envelope=0,100 521,92 641,52 2160,37 3278,0 lmms-1.1.3/data/samples/drumsynth/cr78/Kick.ds000066400000000000000000000006511247673406200211070ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=181 F1=71 F2=71 Droop=0 Phase=-30 Envelope=0,100 372,80 2682,37 8865,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4200,50 14000,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Maracas.ds000066400000000000000000000006511247673406200215750ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=0 Level=153 F1=8600 F2=8600 Droop=0 Phase=-180 Envelope=0,99 1013,51 1013,0 [Noise] On=0 Level=138 Slope=50 Envelope=0,100 998,57 1013,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=136 F=8800 dF=50 Envelope=0,100 410,94 633,29 916,0 lmms-1.1.3/data/samples/drumsynth/cr78/Rim.ds000066400000000000000000000006611247673406200207560ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=181 F1=1600 F2=1500 Droop=0 Phase=-90 Envelope=0,99 57,42 143,17 310,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Snare.ds000066400000000000000000000006511247673406200212760ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=170 F1=300 F2=300 Droop=0 Phase=-30 Envelope=0,99 253,21 745,0 [Noise] On=1 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/cr78/Tamb.ds000066400000000000000000000007211247673406200211070ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=0 Level=153 F1=8600 F2=8600 Droop=0 Phase=-180 Envelope=0,99 1013,51 1013,0 [Noise] On=1 Level=45 Slope=43 Envelope=0,100 2086,76 4023,80 5587,67 7226,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=136 F=4620 dF=33 Envelope=0,31 521,96 1788,87 2160,44 4619,36 5810,6 9014,0 lmms-1.1.3/data/samples/drumsynth/cr8000/000077500000000000000000000000001247673406200200255ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/cr8000/Clap.ds000066400000000000000000000015341247673406200212370ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=108 Slope=85 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 2384,16 4023,8 7211,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=138 F=3250 dF=75 Envelope=0,99 104,38 440,0 440,100 521,30 894,0 894,100 1028,26 1333,0 1333,98 1788,28 4097,7 9386,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Clave.ds000066400000000000000000000012521247673406200214070ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 FilterEnv=0,62 442000,100 443000,0 [Tone] On=0 Level=176 F1=2300 F2=2300 Droop=0 Phase=30 Envelope=0,0 149,98 670,4 2980,0 [Noise] On=0 Level=98 Slope=55 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=1 Level=170 F1=2320 Wave1=1 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,0 74,100 670,4 1937,0 Envelope2=0,100 1266,57 2309,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Conga_l.ds000066400000000000000000000012641247673406200217220ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=161 F1=195 F2=195 Droop=0 Phase=0 Envelope=0,100 447,67 2682,43 6332,23 11695,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Conga_m.ds000066400000000000000000000012621247673406200217210ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=168 F1=302 F2=302 Droop=0 Phase=1 Envelope=0,100 372,96 819,67 4246,24 8865,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Cowbell.ds000066400000000000000000000013641247673406200217500ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 FilterEnv=0,86 596,28 1639,13 7449,0 12068,0 442000,100 443000,0 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=0 Envelope=0,58 10578,26 12217,0 [Noise] On=0 Level=142 Slope=-53 Envelope=0,100 521,24 2384,15 7971,0 [Overtones] On=1 Level=145 F1=817 Wave1=3 Track1=0 F2=552 Wave2=3 Track2=0 Filter=1 Method=0 Param=17 Envelope1=0,0 30,98 819,47 2235,24 5587,9 7375,0 Envelope2=0,0 37,99 745,50 2384,26 5364,9 7077,0 [NoiseBand] On=0 Level=128 F=1000 dF=100 Envelope=0,20 745,96 1490,36 3203,12 11025,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Cymbal.ds000066400000000000000000000013661247673406200215720ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,84 442000,100 442000,0 HighPass=1 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=108 Slope=92 Envelope=0,100 1117,15 3129,0 [Overtones] On=1 Level=157 F1=5182 Wave1=3 Track1=0 F2=4399 Wave2=3 Track2=0 Filter=1 Method=0 Param=50 Envelope1=0,100 968,60 10355,16 19964,0 Envelope2=0,100 968,60 10429,17 19890,0 [NoiseBand] On=1 Level=73 F=9200 dF=49 Envelope=0,100 819,78 9088,28 17282,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Hat_c.ds000066400000000000000000000013521247673406200213740ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,78 442000,100 442000,0 HighPass=0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=85 Slope=92 Envelope=0,100 1117,82 1564,28 5513,0 [Overtones] On=1 Level=87 F1=7182 Wave1=3 Track1=0 F2=6399 Wave2=3 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 1639,21 5215,0 Envelope2=0,100 1564,25 5066,0 [NoiseBand] On=0 Level=115 F=9500 dF=49 Envelope=0,100 819,78 1639,24 4470,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Hat_o.ds000066400000000000000000000013761247673406200214160ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,78 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=87 Slope=92 Envelope=0,100 8641,53 10653,15 14228,0 [Overtones] On=1 Level=81 F1=7182 Wave1=2 Track1=0 F2=6399 Wave2=2 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 8343,52 10355,16 14899,0 Envelope2=0,100 8269,54 10429,17 14899,0 [NoiseBand] On=0 Level=115 F=9500 dF=49 Envelope=0,100 819,78 8567,52 10355,17 14824,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Kick.ds000066400000000000000000000012471247673406200212420ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 FilterEnv=0,28 1713,38 442000,100 443000,0 [Tone] On=1 Level=176 F1=90 F2=60 Droop=0 Phase=30 Envelope=0,99 819,15 2980,0 [Noise] On=0 Level=98 Slope=55 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Rim.ds000066400000000000000000000013311247673406200211020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 1974,79 442000,100 443000,0 Level=0 HighPass=0 Resonance=0 [Tone] On=0 Level=168 F1=8000 F2=8000 Droop=0 Phase=1 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=138 Slope=-58 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=128 F=2500 dF=92 Envelope=0,0 0,24 0,100 104,20 396,7 2233,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/cr8000/Snare.ds000066400000000000000000000012421247673406200214240ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 FilterEnv=0,74 442000,100 443000,0 [Tone] On=1 Level=170 F1=240 F2=240 Droop=0 Phase=-30 Envelope=0,99 745,14 2384,0 [Noise] On=1 Level=98 Slope=55 Envelope=0,100 1311,65 2205,38 2563,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/000077500000000000000000000000001247673406200205305ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/effects/Bubble.ds000066400000000000000000000006571247673406200222630ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=102 F1=40 F2=3000 Droop=0 Phase=0 Envelope=0,7 894,40 1341,84 2160,61 3203,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4200,50 14000,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/effects/Cicada.ds000066400000000000000000000014431247673406200222260ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,79 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=17 Envelope=0,0 670,4 1490,19 1937,3 3501,22 4097,2 5289,15 6406,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=11000 dF=34 Envelope=0,0 670,2 1192,20 1415,56 1788,19 2533,3 3278,19 3650,43 3874,18 4544,3 5140,12 5364,29 5587,13 6108,4 8120,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Glass.ds000066400000000000000000000007251247673406200221350ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ [Tone] On=1 Level=128 F1=3000 F2=3000 Droop=0 Phase=0 Envelope=0,100 1490,23 3203,8 11621,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4500,30 9000,0 [Overtones] On=0 Level=128 F1=789 F2=861 Method=2 Envelope1=0,100 1266,13 8418,0 Envelope2=0,99 447,31 3129,0 [NoiseBand] On=1 Level=79 F=1024 dF=19 Envelope=0,100 670,17 1713,5 4500,0 lmms-1.1.3/data/samples/drumsynth/effects/Glass_rn.ds000066400000000000000000000014361247673406200226340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 57211,94 71514,63 82836,34 88796,0 442000,100 442000,0 Level=-6 Resonance=0 [Tone] On=1 Level=128 F1=1000 F2=5000 Droop=63 Phase=0 Envelope=0,66 2384,87 4470,49 11025,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=2000 Wave1=0 Track1=0 F2=2003 Wave2=0 Track2=0 Filter=1 Method=0 Param=33 Envelope1=0,100 87604,0 Envelope2=0,100 88195,0 [NoiseBand] On=0 Level=181 F=630 dF=0 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=12 Bits=6 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Gunshot.ds000066400000000000000000000014171247673406200225120ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=113 F1=3000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1937,24 7449,6 11621,0 [Noise] On=1 Level=145 Slope=-82 Envelope=0,100 298,14 596,0 [Overtones] On=0 Level=128 F1=789 F2=861 Method=2 Envelope1=0,100 1266,13 8418,0 Envelope2=0,99 447,31 3129,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 Param=50 [NoiseBand] On=1 Level=142 F=1024 dF=72 Envelope=0,100 1639,17 1639,66 4246,13 4246,54 5885,7 5885,35 7151,8 17655,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Hammer.ds000066400000000000000000000013031247673406200222660ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,100 1043,0 2950,0 2950,58 442000,100 443000,0 [Tone] On=1 Level=178 F1=200 F2=200 Droop=0 Phase=90 Envelope=0,99 231,72 685,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1728,85 2205,38 4405,0 [Overtones] On=0 Level=100 F1=8000 Wave1=0 Track1=0 F2=6321 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,29 2384,35 7598,0 Envelope2=0,30 5400,50 10131,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=1 Level=136 F=500 dF=100 Envelope=0,100 100,30 7479,0 [Distortion] On=1 Clipping=10 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Laser.ds000066400000000000000000000014141247673406200221260ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=1 F1=600 F2=4523 Droop=0 Phase=0 Envelope=0,100 4544,30 19741,0 [Noise] On=0 Level=73 Slope=-79 Envelope=0,100 194,8 685,0 [Overtones] On=1 Level=161 F1=700 Wave1=0 Track1=1 F2=1000 Wave2=1 Track2=0 Filter=0 Method=2 Param=89 Envelope1=0,100 1415,42 4693,44 8865,16 18027,0 Envelope2=0,100 745,20 2980,96 5215,20 8269,99 13483,17 20709,100 20709,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Reverse.ds000066400000000000000000000007231247673406200224750ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=117 F1=200 F2=180 Droop=0 Phase=0 Envelope=0,0 5140,0 7598,7 12440,17 13483,87 14005,93 14005,0 [Noise] On=1 Level=128 Slope=-39 Envelope=0,0 4768,18 9312,44 14000,94 14000,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/effects/Ringing.ds000066400000000000000000000013311247673406200224530ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1200 F2=1200 Droop=0 Phase=0 Envelope=0,100 2011,22 5587,0 [Noise] On=0 Level=130 Slope=-100 Envelope=0,100 596,8 1490,0 [Overtones] On=1 Level=128 F1=621 Wave1=2 Track1=0 F2=10 Wave2=2 Track2=0 Filter=0 Method=1 Param=100 Envelope1=0,100 19294,67 19666,0 Envelope2=0,100 19070,100 19517,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Scissors.ds000066400000000000000000000013511247673406200226700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=0 Level=92 F1=8000 F2=8000 Droop=0 Phase=0 Envelope=0,0 10206,0 11025,5 11323,0 [Noise] On=1 Level=128 Slope=27 Envelope=0,0 968,11 968,100 1192,3 1862,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=151 F=100 dF=35 Envelope=0,100 1000,20 3054,16 7449,22 8641,0 [Distortion] On=0 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/Sonar.ds000066400000000000000000000013701247673406200221430ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=94 F=508 dF=12 Envelope=0,0 13111,24 18176,47 22944,28 28605,52 35161,41 40226,47 47676,12 55423,3 77473,0 [NoiseBand2] On=1 Level=128 F=500 dF=17 Envelope=0,0 596,90 2384,16 21156,8 36353,7 87008,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/dialing.ds000066400000000000000000000013311247673406200224650ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1200 F2=1200 Droop=0 Phase=0 Envelope=0,100 2011,22 5587,0 [Noise] On=0 Level=130 Slope=-100 Envelope=0,100 596,8 1490,0 [Overtones] On=1 Level=128 F1=621 Wave1=2 Track1=0 F2=22 Wave2=2 Track2=0 Filter=0 Method=1 Param=100 Envelope1=0,100 19294,67 19666,0 Envelope2=0,100 19070,100 19517,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/hammer2.ds000066400000000000000000000013331247673406200224130ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0 Stretch=90.0 Filter=1 HighPass=0 FilterEnv=0,100 1341,0 4917,0 5215,30 442000,100 443000,0 [Tone] On=1 Level=178 F1=2000 F2=200 Droop=35 Phase=40 Envelope=0,99 231,72 685,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1728,85 2205,38 4405,0 [Overtones] On=0 Level=100 F1=8000 Wave1=0 Track1=0 F2=6321 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,29 2384,35 7598,0 Envelope2=0,30 5400,50 10131,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=1 Level=136 F=500 dF=100 Envelope=0,100 100,30 5215,0 5215,18 6853,2 16835,0 [Distortion] On=1 Clipping=10 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/impulses.ds000066400000000000000000000014211247673406200227170ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,17 33224,98 442000,100 443000,0 Level=0 Resonance=0 [Tone] On=1 Level=178 F1=50 F2=110 Droop=0 Phase=90 Envelope=0,0 819,0 819,98 1490,0 [Noise] On=0 Level=138 Slope=-100 Envelope=0,100 1728,85 2205,38 4405,0 FixedSeq=0 [Overtones] On=1 Level=140 F1=14.11 Wave1=3 Track1=0 F2=14.1 Wave2=4 Track2=0 Filter=0 Method=0 Param=52 Envelope1=0,29 0,68 5140,37 12962,15 22050,8 40822,0 Envelope2=0,30 5400,50 11174,28 19070,14 30244,6 40375,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=181 F=200 dF=100 Envelope=0,0 171,0 253,100 268,0 7479,0 [Distortion] On=0 Clipping=10 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/loop.ds000066400000000000000000000017601247673406200220350ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=120 F2=80 Droop=31 Phase=0 Envelope=0,0 30,99 1117,31 2831,0 22199,0 22497,55 23242,31 25477,0 29648,0 [Noise] On=1 Level=104 Slope=81 Envelope=0,44 1043,0 5513,0 5513,40 7449,0 11025,0 11025,38 12515,13 22050,0 22050,35 23540,0 27563,0 27563,33 29052,0 33075,0 33075,33 40375,0 [Overtones] On=1 Level=128 F1=220 Wave1=0 Track1=1 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 11025,0 11025,57 11919,0 16835,-1 16835,58 18027,0 27711,0 27711,61 28903,0 37843,0 37843,18 39332,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=106 F=1000 dF=78 Envelope=0,0 11025,0 11025,21 12068,0 22199,0 22199,76 23093,10 28903,0 33075,0 33075,22 33820,0 [NoiseBand2] On=0 Level=128 F=3150 dF=62 Envelope=0,0 22199,0 22199,76 23093,10 29946,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/effects/thunder.ds000066400000000000000000000013271247673406200225340ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,2 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=100 dF=22 Envelope=0,0 5513,79 10429,32 13111,58 15197,27 17133,39 24136,36 41120,0 [NoiseBand2] On=1 Level=128 F=50 dF=16 Envelope=0,0 11025,64 28903,19 87008,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/000077500000000000000000000000001247673406200205465ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/electro/Boom.ds000066400000000000000000000013421247673406200217720ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=147 F1=80 F2=80 Droop=0 Phase=0 Envelope=0,100 1564,56 5250,30 19368,7 34863,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 596,23 9000,0 [Overtones] On=1 Level=94 F1=80 F2=125 Method=0 Envelope1=0,0 2235,51 11993,0 Envelope2=0,100 1117,19 3799,0 Wave1=2 Track1=0 Wave2=0 Track2=0 Filter=0 Param=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/H_closed.ds000066400000000000000000000013031247673406200226130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=98 F1=10000 F2=10000 Droop=0 Phase=-45 Envelope=0,100 516,21 1904,0 [Noise] On=1 Level=111 Slope=69 Envelope=0,100 535,26 2548,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/H_open.ds000066400000000000000000000006601247673406200223100ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=98 F1=10000 F2=10000 Droop=0 Phase=-45 Envelope=0,100 1117,24 10504,0 [Noise] On=1 Level=111 Slope=69 Envelope=0,100 819,31 12440,4 18772,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/electro/Hi-q.ds000066400000000000000000000012501247673406200216720ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=102 F1=18000 F2=20 Droop=45 Phase=-45 Envelope=0,100 1862,48 3501,36 3725,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4200,50 14000,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/Hi-q_2.ds000066400000000000000000000012471247673406200221210ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=102 F1=6000 F2=20 Droop=29 Phase=-45 Envelope=0,100 1862,48 3501,36 3725,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4200,50 14000,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/K_8bit.ds000066400000000000000000000012571247673406200222230ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 HighPass=0 [Tone] On=1 Level=132 F1=90 F2=70 Droop=68 Phase=10 Envelope=0,0 89,95 2160,46 6034,17 6108,0 [Noise] On=1 Level=64 Slope=-70 Envelope=0,100 358,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=6 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/electro/K_Linn.ds000066400000000000000000000012601247673406200222470ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=128 F1=105 F2=30 Droop=0 Phase=-45 Envelope=0,100 1862,62 5513,35 13558,0 [Noise] On=1 Level=111 Slope=1 Envelope=0,100 372,24 1117,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/K_reverb.ds000066400000000000000000000014011247673406200226310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 Level=0 Resonance=0 [Tone] On=1 Level=181 F1=100 F2=40 Droop=12 Phase=120 Envelope=0,99 793,91 1824,37 4097,25 5959,20 6630,0 [Noise] On=1 Level=78 Slope=-40 Envelope=0,100 291,37 656,0 2221,0 3807,5 8328,0 FixedSeq=1 [Overtones] On=0 Level=119 F1=876 F2=1356 Method=0 Param=54 Envelope1=0,100 1266,31 4470,26 10578,0 Envelope2=0,100 894,45 3278,30 10355,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=1 Level=161 F=100 dF=35 Envelope=0,98 1341,0 4097,10 10578,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/S_8bit.ds000066400000000000000000000013471247673406200222330ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 HighPass=0 [Tone] On=1 Level=149 F1=380 F2=230 Droop=54 Phase=-45 Envelope=0,100 745,41 1937,18 4991,0 12142,0 [Noise] On=1 Level=130 Slope=-53 Envelope=0,100 521,24 2384,11 5661,3 5810,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=128 F=1000 dF=100 Envelope=0,20 745,96 1490,36 3203,12 8194,11 9461,5 11025,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=2 lmms-1.1.3/data/samples/drumsynth/electro/S_Linn.ds000066400000000000000000000012741247673406200222640ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=128 F1=200 F2=120 Droop=0 Phase=-45 Envelope=0,100 4395,54 10355,0 [Noise] On=1 Level=111 Slope=-61 Envelope=0,100 1713,28 4768,18 8641,11 9982,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/S_reverb.ds000066400000000000000000000014171247673406200226500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,100 2502,100 4940,56 6746,44 442000,100 443000,0 [Tone] On=1 Level=128 F1=180 F2=153 Droop=38 Phase=10 Envelope=0,100 521,95 745,19 2458,6 6481,0 [Noise] On=1 Level=160 Slope=-68 Envelope=0,97 275,15 668,26 2086,10 4838,5 6266,4 10708,4 11422,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 F2=200 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=1 Level=139 F=400 dF=34 Envelope=0,63 1494,37 1788,4 5810,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=8 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/Syntom_1.ds000066400000000000000000000006761247673406200226200ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=128 F1=800 F2=400 Droop=0 Phase=-45 Envelope=0,100 2309,38 5736,15 15495,0 [Noise] On=0 Level=111 Slope=-61 Envelope=0,100 1713,28 4768,18 8641,11 9982,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 lmms-1.1.3/data/samples/drumsynth/electro/Syntom_2.ds000066400000000000000000000012721247673406200226120ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=128 F1=550 F2=275 Droop=0 Phase=-45 Envelope=0,100 2309,38 5736,15 15495,0 [Noise] On=0 Level=111 Slope=-61 Envelope=0,100 1713,28 4768,18 8641,11 9982,0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/electro/s_eq.ds000066400000000000000000000012531247673406200220260ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=170 F1=180 F2=100 Droop=9 Phase=90 Envelope=0,100 745,41 1937,18 4097,0 [Noise] On=1 Level=89 Slope=12 Envelope=0,72 1043,9 9386,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=142 F=800 dF=42 Envelope=0,87 1490,36 4246,0 [NoiseBand2] On=1 Level=136 F=2000 dF=70 Envelope=0,100 894,29 7747,0 [Distortion] On=0 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/000077500000000000000000000000001247673406200205245ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_Bongo.ds000066400000000000000000000015211247673406200230610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=161 F1=130 F2=62 Droop=30 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=0 Level=53 Slope=-98 Envelope=0,67 203,24 1840,3 6358,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=245.7 Wave1=0 Track1=0 F2=633.95 Wave2=0 Track2=0 Method=0 Param=100 Envelope1=0,100 1599,65 3648,38 6096,18 8994,8 15990,0 Envelope2=0,100 600,22 2099,5 3748,0 Filter=0 [NoiseBand] On=1 Level=128 F=7650 dF=47 Envelope=0,72 350,29 2798,5 5746,0 [NoiseBand2] On=1 Level=63 F=50 dF=12 Envelope=0,56 393,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_Cym.ds000066400000000000000000000014651247673406200225540ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=164 F1=125 F2=62 Droop=47 Phase=0 Envelope=0,0 317,100 635,100 1428,64 4759,18 10153,0 [Noise] On=0 Level=53 Slope=-98 Envelope=0,67 203,24 1840,3 6358,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=7650 dF=54 Envelope=0,41 216,31 3348,16 7246,5 18239,0 [NoiseBand2] On=1 Level=54 F=50 dF=12 Envelope=0,56 393,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_Hat.ds000066400000000000000000000014541247673406200225360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=164 F1=125 F2=62 Droop=47 Phase=0 Envelope=0,0 317,100 635,100 1428,64 4759,18 10153,0 [Noise] On=0 Level=53 Slope=-98 Envelope=0,67 203,24 1840,3 6358,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=7650 dF=47 Envelope=0,67 216,31 2678,2 6866,0 [NoiseBand2] On=1 Level=63 F=50 dF=12 Envelope=0,56 393,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_K_H.ds000066400000000000000000000014541247673406200224630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=161 F1=130 F2=62 Droop=30 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=0 Level=53 Slope=-98 Envelope=0,67 203,24 1840,3 6358,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=7650 dF=47 Envelope=0,67 216,31 2678,2 6866,0 [NoiseBand2] On=1 Level=63 F=50 dF=12 Envelope=0,56 393,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_K_K.ds000066400000000000000000000015111247673406200224600ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=161 F1=130 F2=62 Droop=30 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=0 Level=53 Slope=-98 Envelope=0,67 203,24 1840,3 6358,0 FixedSeq=1 [Overtones] On=1 Level=61 F1=245.7 Wave1=0 Track1=0 F2=633.95 Wave2=0 Track2=0 Method=0 Param=100 Envelope1=0,100 1599,65 3648,38 6096,18 8994,8 15990,0 Envelope2=0,100 350,0 Filter=0 [NoiseBand] On=1 Level=128 F=7650 dF=50 Envelope=0,84 800,27 2848,14 4497,4 7046,0 [NoiseBand2] On=1 Level=63 F=50 dF=12 Envelope=0,56 393,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_Kick.ds000066400000000000000000000014541247673406200227030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=164 F1=125 F2=62 Droop=47 Phase=0 Envelope=0,0 317,100 635,100 1428,64 4759,18 10153,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_S_B.ds000066400000000000000000000015211247673406200224600ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=83 F1=130 F2=62 Droop=30 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=1 Level=63 Slope=-55 Envelope=0,70 1699,25 5197,0 FixedSeq=1 [Overtones] On=1 Level=172 F1=187.05 Wave1=0 Track1=0 F2=633.95 Wave2=0 Track2=0 Method=0 Param=23 Envelope1=0,100 2099,21 8695,0 Envelope2=0,100 600,22 2099,5 3748,0 Filter=0 [NoiseBand] On=1 Level=83 F=7650 dF=47 Envelope=0,72 350,29 3998,10 4697,2 7595,0 [NoiseBand2] On=0 Level=98 F=200 dF=36 Envelope=0,72 350,29 3548,11 4697,2 7595,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_Snare.ds000066400000000000000000000015201247673406200230640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=83 F1=130 F2=62 Droop=30 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=1 Level=63 Slope=-55 Envelope=0,70 1699,25 5197,0 FixedSeq=1 [Overtones] On=1 Level=157 F1=187.05 Wave1=0 Track1=0 F2=633.95 Wave2=0 Track2=0 Method=0 Param=3 Envelope1=0,100 2099,21 8695,0 Envelope2=0,100 600,22 2099,5 3748,0 Filter=0 [NoiseBand] On=1 Level=83 F=7650 dF=47 Envelope=0,72 350,29 3998,10 4697,2 7595,0 [NoiseBand2] On=0 Level=98 F=200 dF=36 Envelope=0,72 350,29 3548,11 4697,2 7595,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/farfisa/Fisa_Tom.ds000066400000000000000000000015101247673406200225520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=161 F1=130 F2=62 Droop=30 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=0 Level=53 Slope=-98 Envelope=0,67 203,24 1840,3 6358,0 FixedSeq=1 [Overtones] On=1 Level=146 F1=245.7 Wave1=0 Track1=0 F2=633.95 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1599,65 3648,38 6096,18 8994,8 15990,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=74 F=7650 dF=47 Envelope=0,84 350,29 2898,5 6866,0 [NoiseBand2] On=1 Level=63 F=50 dF=12 Envelope=0,56 393,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/ferraro/000077500000000000000000000000001247673406200205515ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/ferraro/curb_meat_bass.ds000066400000000000000000000014501247673406200240520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=7 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=100 F2=20 Droop=0 Phase=90 Envelope=0,0 0,76 0,74 20622,0 [Noise] On=1 Level=86 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=9000 Wave1=3 Track1=1 F2=4566 Wave2=0 Track2=1 Method=3 Param=57 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 11184,10 29030,0 Filter=1 [NoiseBand] On=1 Level=121 F=6000 dF=40 Envelope=0,40 2250,30 2250,56 4283,22 4283,8 4283,0 [NoiseBand2] On=1 Level=92 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=38 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/ferraro/eel_bass.ds000066400000000000000000000015561247673406200226650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=0 Level=9 Filter=1 HighPass=0 Resonance=64 FilterEnv=0,100 952,74 5711,49 6663,28 14991,6 22129,0 442000,100 442000,0 [Tone] On=1 Level=163 F1=60 F2=20 Droop=0 Phase=-45 Envelope=0,100 3093,58 4759,35 4759,100 10708,21 18798,65 19750,20 27840,9 37358,19 57822,2 78761,0 [Noise] On=1 Level=174 Slope=100 Envelope=0,100 521,24 2384,11 5810,35 64484,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=545 Wave1=1 Track1=1 F2=4 Wave2=0 Track2=1 Method=0 Param=73 Envelope1=0,100 4800,50 10232,25 14039,61 17846,0 17846,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=65 F=300 dF=53 Envelope=0,20 745,96 1490,36 3203,12 8194,11 9461,5 11025,0 [NoiseBand2] On=1 Level=34 F=1000 dF=100 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=6 Bits=2 Rate=7 lmms-1.1.3/data/samples/drumsynth/ferraro/feed_this.ds000066400000000000000000000014551247673406200230400ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=7 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=5000 F2=1000 Droop=100 Phase=90 Envelope=0,0 0,76 0,74 20622,0 [Noise] On=1 Level=86 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=9000 Wave1=3 Track1=1 F2=4566 Wave2=0 Track2=1 Method=3 Param=57 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 11184,10 29030,0 Filter=1 [NoiseBand] On=1 Level=121 F=6000 dF=40 Envelope=0,40 2250,30 2250,56 4283,22 4283,8 4283,0 [NoiseBand2] On=1 Level=92 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=38 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/ferraro/gerbil_snare.ds000066400000000000000000000014111247673406200235320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=600 Level=-9 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=92 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=26 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/ferraro/grumpy_buzzard.ds000066400000000000000000000015241247673406200241670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=162 F1=250 F2=500 Droop=100 Phase=20 Envelope=0,0 317,100 635,100 1368,50 4660,13 7833,0 [Noise] On=1 Level=160 Slope=40 Envelope=0,70 1699,25 5197,0 FixedSeq=1 [Overtones] On=1 Level=157 F1=187.05 Wave1=3 Track1=0 F2=633.95 Wave2=3 Track2=0 Method=1 Param=3 Envelope1=0,100 2099,21 8695,0 Envelope2=0,100 600,22 2099,5 3748,0 Filter=0 [NoiseBand] On=1 Level=83 F=7650 dF=47 Envelope=0,72 350,29 3998,10 4697,2 7595,0 [NoiseBand2] On=0 Level=98 F=200 dF=36 Envelope=0,72 350,29 3548,11 4697,2 7595,0 [Distortion] On=1 Clipping=26 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/ferraro/jaguar_hats.ds000066400000000000000000000015031247673406200233700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=1 Resonance=23 FilterEnv=0,92 26174,0 444000,100 444000,0 [Tone] On=1 Level=108 F1=5000 F2=20000 Droop=100 Phase=90 Envelope=0,100 7376,20 7376,11 15070,0 [Noise] On=1 Level=181 Slope=-100 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=109 F1=9000 Wave1=2 Track1=1 F2=4566 Wave2=2 Track2=1 Method=3 Param=19 Envelope1=0,100 1250,20 31727,0 Envelope2=0,100 11184,10 26968,0 Filter=1 [NoiseBand] On=1 Level=49 F=1200 dF=40 Envelope=0,100 2250,30 2250,100 4283,22 4283,8 22209,0 [NoiseBand2] On=1 Level=92 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=26 Bits=1 Rate=7 lmms-1.1.3/data/samples/drumsynth/ferraro/radio_hats.ds000066400000000000000000000014461247673406200232230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Level=0 Filter=0 HighPass=1 Resonance=48 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=108 F1=20000 F2=2000 Droop=0 Phase=90 Envelope=0,100 7376,20 10708,16 18322,0 [Noise] On=1 Level=86 Slope=-50 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=9000 Wave1=3 Track1=1 F2=4566 Wave2=0 Track2=1 Method=3 Param=57 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 11184,10 29030,0 Filter=1 [NoiseBand] On=1 Level=49 F=1200 dF=40 Envelope=0,40 2250,30 2250,56 4283,22 4283,8 4283,0 [NoiseBand2] On=1 Level=92 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=26 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/ferraro/worm_bass.ds000066400000000000000000000014751247673406200231040ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=64 FilterEnv=0,100 952,74 5711,49 6663,28 14991,6 22129,0 442000,100 442000,0 [Tone] On=1 Level=133 F1=30 F2=60 Droop=70 Phase=-45 Envelope=0,100 3093,58 4759,35 10232,20 13563,0 [Noise] On=1 Level=33 Slope=21 Envelope=0,100 521,24 2384,11 5661,3 5810,0 FixedSeq=0 [Overtones] On=1 Level=74 F1=545 Wave1=1 Track1=1 F2=4 Wave2=0 Track2=1 Method=0 Param=73 Envelope1=0,100 4800,50 10232,25 14039,61 17846,0 17846,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=52 F=7888 dF=78 Envelope=0,20 745,96 1490,36 3203,12 8194,11 9461,5 11025,0 [NoiseBand2] On=1 Level=34 F=1000 dF=100 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=12 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/instrument/000077500000000000000000000000001247673406200213215ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/instrument/E_Piano.ds000066400000000000000000000012461247673406200231660ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=53 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,100 8400,27 26550,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 [Overtones] On=1 Level=128 F1=438 Wave1=0 Track1=0 F2=220 Wave2=0 Track2=0 Filter=0 Method=1 Param=69 Envelope1=0,0 30,100 900,38 6375,16 29400,0 Envelope2=0,100 2700,99 9300,27 30450,0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/FM_Bass.ds000066400000000000000000000012441247673406200231240ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=69 F1=440 F2=220 Droop=44 Phase=0 Envelope=0,100 14400,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 [Overtones] On=1 Level=137 F1=220 Wave1=0 Track1=0 F2=55 Wave2=0 Track2=0 Filter=0 Method=1 Param=100 Envelope1=0,0 30,100 900,38 6375,16 29400,0 Envelope2=0,0 0,100 8550,68 15000,93 30450,0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/Moog_bass.ds000066400000000000000000000014261247673406200235650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for more controls Tuning=-12 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=95 FilterEnv=0,45 190,74 1758,28 7680,0 8630,0 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=128 Slope=-8 Envelope=0,22 649,12 8123,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=109.5 Wave1=3 Track1=0 F2=220.5 Wave2=3 Track2=0 Method=0 Param=50 Envelope1=0,100 7775,0 Envelope2=0,100 7759,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/Oboe.ds000066400000000000000000000013311247673406200225330ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=117 F1=1760 F2=1767 Droop=0 Phase=0 Envelope=0,0 3150,57 24450,89 29250,0 [Noise] On=0 Level=53 Slope=-100 Envelope=0,0 1200,100 5400,53 54600,48 58500,29 60900,0 [Overtones] On=1 Level=128 F1=220 Wave1=0 Track1=0 F2=880 Wave2=0 Track2=0 Filter=0 Method=1 Param=57 Envelope1=0,0 300,100 3000,95 25500,92 29700,0 Envelope2=0,0 450,100 3000,84 84300,97 84300,0 [NoiseBand] On=0 Level=84 F=1000 dF=69 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/Temple_Bell.ds000066400000000000000000000012661247673406200240420ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=74 F1=330 F2=330 Droop=0 Phase=0 Envelope=0,93 11400,17 33300,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 [Overtones] On=1 Level=128 F1=220 Wave1=0 Track1=0 F2=542.7 Wave2=0 Track2=0 Filter=0 Method=1 Param=50 Envelope1=0,0 30,100 900,38 8025,22 25800,8 58800,0 Envelope2=0,100 26550,83 62400,0 [NoiseBand] On=0 Level=127 F=1630 dF=15 Envelope=0,100 2100,10 9750,0 [NoiseBand2] On=0 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/flute.ds000066400000000000000000000013451247673406200227730ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=53 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,0 9900,82 36000,83 36600,0 [Noise] On=1 Level=12 Slope=-57 Envelope=0,0 600,100 4200,45 34050,45 35700,80 38850,0 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=1320 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,0 9900,82 32400,79 33900,24 37950,0 Envelope2=0,0 6300,45 12000,0 [NoiseBand] On=1 Level=14 F=880 dF=73 Envelope=0,0 600,100 4200,45 32400,46 36000,83 36600,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/mute_bass.ds000066400000000000000000000012201247673406200236260ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=80 Slope=-100 Envelope=0,0 83,95 83,0 [Overtones] On=1 Level=128 F1=110 Wave1=0 Track1=0 F2=55 Wave2=1 Track2=0 Filter=0 Method=1 Param=38 Envelope1=0,100 6450,24 18900,0 Envelope2=0,100 7650,20 34050,0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/pizzi.ds000066400000000000000000000012241247673406200230150ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=57 Slope=-64 Envelope=0,100 596,0 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=440 Wave2=0 Track2=0 Filter=0 Method=1 Param=81 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 1043,6 5000,0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/soft_piano.ds000066400000000000000000000013371247673406200240160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,41 8709,25 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=0 Level=53 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,100 8400,27 26550,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=440 Wave2=0 Track2=0 Filter=0 Method=1 Param=74 Envelope1=0,0 30,100 900,38 8025,22 25800,8 37687,0 Envelope2=0,100 8100,25 47980,0 [NoiseBand] On=1 Level=67 F=2200 dF=5 Envelope=0,0 459,96 1393,15 9750,0 [NoiseBand2] On=1 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/square_lead.ds000066400000000000000000000012611247673406200241360ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=80 Slope=-100 Envelope=0,0 83,95 83,0 [Overtones] On=1 Level=90 F1=110.5 Wave1=4 Track1=0 F2=109.5 Wave2=4 Track2=0 Filter=0 Method=0 Param=28 Envelope1=0,0 2400,75 27300,60 32100,0 Envelope2=0,0 3000,70 27300,60 32100,0 [NoiseBand] On=1 Level=127 F=220 dF=6 Envelope=0,0 2400,78 8100,17 32100,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/sweep.ds000066400000000000000000000013501247673406200227730ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=20.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=106 F1=220 F2=220 Droop=0 Phase=0 Envelope=0,0 1200,51 48900,9 53400,25 62400,21 66900,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,100 4500,30 9000,0 [Overtones] On=1 Level=141 F1=1100 Wave1=0 Track1=0 F2=880 Wave2=0 Track2=0 Filter=0 Method=0 Param=52 Envelope1=0,0 900,96 8700,13 19800,0 Envelope2=0,13 14100,13 22500,71 31200,0 [NoiseBand] On=1 Level=106 F=660 dF=0 Envelope=0,14 24600,13 33600,48 42600,20 44100,0 [NoiseBand2] On=1 Level=90 F=440 dF=0 Envelope=0,12 34500,12 44400,32 51300,24 54900,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/techno_stab.ds000066400000000000000000000012771247673406200241510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,63 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=1 Level=126 F1=220 Wave1=4 Track1=0 F2=220 Wave2=3 Track2=0 Method=1 Param=100 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=1 [NoiseBand] On=0 Level=110 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=11 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/instrument/tinkle.ds000066400000000000000000000013301247673406200231340ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=22 F1=6520 F2=6520 Droop=0 Phase=0 Envelope=0,0 9000,59 17700,28 28500,5 40500,26 48900,3 57600,16 67200,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 [Overtones] On=1 Level=128 F1=6520 Wave1=0 Track1=0 F2=3520 Wave2=1 Track2=0 Filter=0 Method=1 Param=40 Envelope1=0,0 30,100 900,38 8025,22 25800,8 58800,0 Envelope2=0,100 33000,72 62400,0 [NoiseBand] On=1 Level=117 F=8000 dF=53 Envelope=0,100 300,0 [NoiseBand2] On=0 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/trumpet.ds000066400000000000000000000013411247673406200233500ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=117 F1=1760 F2=1767 Droop=0 Phase=0 Envelope=0,0 3150,57 24450,89 29250,0 [Noise] On=0 Level=53 Slope=-100 Envelope=0,0 1200,100 5400,53 54600,48 58500,29 60900,0 [Overtones] On=1 Level=128 F1=880 Wave1=0 Track1=0 F2=880 Wave2=0 Track2=0 Filter=0 Method=1 Param=89 Envelope1=0,0 300,100 3000,95 25500,92 29700,0 Envelope2=0,0 450,100 1380,21 1500,98 84300,97 84300,0 [NoiseBand] On=0 Level=84 F=1000 dF=69 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/upright_bass.ds000066400000000000000000000013241247673406200243430ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=117 F1=1760 F2=1767 Droop=0 Phase=0 Envelope=0,0 3150,57 24450,89 29250,0 [Noise] On=0 Level=53 Slope=-100 Envelope=0,0 1200,100 5400,53 54600,48 58500,29 60900,0 [Overtones] On=1 Level=128 F1=110 Wave1=0 Track1=0 F2=55 Wave2=0 Track2=0 Filter=0 Method=1 Param=48 Envelope1=0,0 300,100 6300,28 16950,12 29700,0 Envelope2=0,0 0,100 14700,90 41700,0 [NoiseBand] On=1 Level=26 F=100 dF=69 Envelope=0,0 360,100 1170,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/violin.ds000066400000000000000000000013461247673406200231550ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=53 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,0 9900,82 36000,83 36600,0 [Noise] On=0 Level=18 Slope=-57 Envelope=0,0 600,100 4200,45 29400,21 36600,0 [Overtones] On=1 Level=128 F1=1760 Wave1=1 Track1=0 F2=6 Wave2=0 Track2=0 Filter=0 Method=1 Param=81 Envelope1=0,0 9900,82 36000,83 36600,0 Envelope2=0,0 14550,51 27000,86 36000,83 36600,0 [NoiseBand] On=1 Level=26 F=1760 dF=75 Envelope=0,0 600,100 2250,20 33450,17 36000,83 36600,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/instrument/whistler.ds000066400000000000000000000013351247673406200235140ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=53 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,0 9900,82 36000,83 36600,0 [Noise] On=0 Level=22 Slope=-85 Envelope=0,0 600,100 4200,45 19800,30 21150,0 [Overtones] On=1 Level=128 F1=3520 Wave1=0 Track1=0 F2=6 Wave2=0 Track2=0 Filter=0 Method=1 Param=81 Envelope1=0,0 1650,83 11400,81 15300,0 Envelope2=0,0 14550,51 27000,86 36000,83 36600,0 [NoiseBand] On=1 Level=37 F=3520 dF=75 Envelope=0,0 600,100 4200,45 13650,44 16500,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/000077500000000000000000000000001247673406200212655ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/jorgensohn/hihatopclo.ds000066400000000000000000000016241247673406200237520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=2 FilterEnv=0,0 714,100 2538,100 3331,96 24271,44 31600,0 34423,0 442000,100 442000,0 Comment=schauer-sohn@freenet.de [Tone] On=1 Level=72 F1=200 F2=495 Droop=85 Phase=0 Envelope=0,0 3173,19 6107,8 14198,3 33551,0 [Noise] On=0 Level=143 Slope=18 Envelope=0,0 2792,0 10279,0 37050,0 FixedSeq=0 [Overtones] On=1 Level=162 F1=7838 Wave1=4 Track1=0 F2=4395 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,0 635,11 872,26 2142,19 3649,12 6345,9 12818,5 31727,5 32615,0 34027,0 Envelope2=0,0 952,99 32520,32 34344,0 Filter=1 [NoiseBand] On=1 Level=181 F=6000 dF=16 Envelope=0,0 1110,26 5711,11 12691,5 31647,2 33868,0 [NoiseBand2] On=1 Level=181 F=6200 dF=18 Envelope=0,0 1031,27 6266,8 16974,3 31330,0 33234,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/kick.ds000066400000000000000000000013141247673406200225350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=99 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=117 F1=200 F2=30 Droop=40 Phase=10 Envelope=0,100 5294,31 9581,5 16498,0 [Noise] On=0 Level=12 Slope=-100 Envelope=0,33 317,8 10184,0 FixedSeq=0 [Overtones] On=0 Level=80 F1=800 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,29 1983,44 9359,16 19988,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/ramacymlong.ds000066400000000000000000000015051247673406200241270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,0 1491,0 3014,0 5806,0 442000,100 442000,0 [Tone] On=1 Level=162 F1=100 F2=7040 Droop=100 Phase=90 Envelope=0,61 381,48 666,20 1840,20 2760,44 5457,20 7868,11 11422,7 18655,2 32615,0 [Noise] On=0 Level=181 Slope=100 Envelope=0,0 698,0 1618,0 3363,0 5933,0 13452,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=7005 Wave1=0 Track1=0 F2=7075 Wave2=0 Track2=0 Method=0 Param=34 Envelope1=0,17 1491,57 4569,25 10533,6 32488,0 Envelope2=0,22 1491,56 4822,23 10628,6 32361,0 Filter=0 [NoiseBand] On=0 Level=111 F=2000 dF=47 Envelope=0,0 2189,0 4500,0 [NoiseBand2] On=0 Level=181 F=8000 dF=100 Envelope=0,0 254,0 539,0 2348,0 13357,0 [Distortion] On=0 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/ramacymshort.ds000066400000000000000000000014621247673406200243310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,0 1491,0 3014,0 5806,0 442000,100 442000,0 [Tone] On=1 Level=162 F1=100 F2=7040 Droop=100 Phase=90 Envelope=0,61 381,48 666,20 1840,20 2760,44 4093,21 6916,4 15578,0 [Noise] On=0 Level=181 Slope=100 Envelope=0,0 698,0 1618,0 3363,0 5933,0 13452,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=7030 Wave1=0 Track1=0 F2=7050 Wave2=0 Track2=0 Method=0 Param=34 Envelope1=0,17 1491,57 2760,25 6060,5 11580,0 Envelope2=0,22 1491,56 2792,28 6155,6 10628,0 Filter=0 [NoiseBand] On=0 Level=111 F=2000 dF=47 Envelope=0,0 2189,0 4500,0 [NoiseBand2] On=0 Level=181 F=8000 dF=100 Envelope=0,0 254,0 539,0 2348,0 13357,0 [Distortion] On=0 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/ride6.ds000066400000000000000000000014661247673406200226350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=0 HighPass=0 Resonance=80 FilterEnv=0,78 442000,100 442000,0 [Tone] On=1 Level=139 F1=7000 F2=7000 Droop=0 Phase=0 Envelope=0,0 5394,51 7297,29 10787,15 21955,5 37691,0 [Noise] On=0 Level=143 Slope=18 Envelope=0,0 2792,0 10279,0 37050,0 FixedSeq=0 [Overtones] On=1 Level=164 F1=7838 Wave1=4 Track1=0 F2=4565 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,0 238,41 1190,22 2914,13 6345,9 12818,5 37691,0 Envelope2=0,100 40102,24 40102,0 Filter=0 [NoiseBand] On=1 Level=181 F=7000 dF=36 Envelope=0,0 238,40 1190,24 2855,16 5790,10 12691,5 37564,0 [NoiseBand2] On=1 Level=150 F=5880 dF=25 Envelope=0,0 238,35 1348,20 3807,12 12532,5 37755,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/snare5.ds000066400000000000000000000016071247673406200230160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 6714,100 444000,100 444000,0 [Tone] On=1 Level=137 F1=195 F2=200 Droop=0 Phase=00 Envelope=0,100 190,100 972,26 2201,8 6255,1 7854,0 [Noise] On=1 Level=108 Slope=-24 Envelope=0,100 222,100 1314,27 2803,14 6302,2 7696,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=285 Wave1=0 Track1=0 F2=75 Wave2=2 Track2=0 Method=0 Param=93 Envelope1=0,100 190,99 952,21 5431,4 7807,0 Envelope2=0,100 158,100 839,14 1077,12 6033,1 7696,0 Filter=0 [NoiseBand] On=1 Level=47 F=278 dF=10 Envelope=0,100 190,102 206,100 966,24 6096,3 7727,0 [NoiseBand2] On=1 Level=49 F=280 dF=12 Envelope=0,100 158,100 934,26 6033,2 7838,0 [Distortion] On=1 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/vibra.ds000066400000000000000000000022761247673406200227270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=schauer-sohn@freenet.de Tuning=0 Stretch=20 Level=0 Filter=0 HighPass=1 Resonance=96 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=99 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,35 793,100 2855,69 5552,68 8566,48 11422,58 15625,29 19512,35 24112,18 28808,19 33249,8 39976,8 47209,5 54697,5 70179,0 [Noise] On=0 Level=51 Slope=-100 Envelope=0,100 635,0 2617,0 FixedSeq=0 [Overtones] On=1 Level=34 F1=1320 Wave1=0 Track1=0 F2=438 Wave2=0 Track2=0 Method=0 Param=66 Envelope1=0,100 2379,96 5235,54 8170,36 11263,35 15149,18 19353,17 23985,10 29315,9 34772,3 41372,5 47590,2 55331,2 70179,0 Envelope2=0,0 793,100 3014,51 5869,59 8328,39 11501,47 15308,20 19433,23 24112,10 28808,10 33249,4 39595,4 47209,2 54570,2 70052,0 Filter=0 [NoiseBand] On=1 Level=27 F=882 dF=0 Envelope=0,100 3093,47 5949,55 8408,35 11501,44 15308,20 19353,26 23874,12 28554,13 33249,5 39976,6 47209,4 54062,4 70179,0 [NoiseBand2] On=1 Level=39 F=663 dF=0 Envelope=0,100 4283,100 5790,56 8328,38 12056,43 15546,21 19591,25 23795,14 29062,15 34265,5 40102,5 47209,2 56473,2 70179,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/jorgensohn/wood.ds000066400000000000000000000013231247673406200225640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=99 FilterEnv=0,100 12215,74 442000,100 443000,0 [Tone] On=0 Level=117 F1=200 F2=30 Droop=40 Phase=10 Envelope=0,100 5294,31 9581,5 16498,0 [Noise] On=0 Level=1 Slope=-100 Envelope=0,33 317,8 10184,0 FixedSeq=0 [Overtones] On=0 Level=80 F1=800 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,29 1983,44 9359,16 19988,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=128 F=1770 dF=13 Envelope=0,100 666,2 5774,0 [NoiseBand2] On=1 Level=128 F=1750 dF=15 Envelope=0,100 698,2 5838,0 [Distortion] On=0 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/wood2.ds000066400000000000000000000013211247673406200226440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=99 FilterEnv=0,100 12215,74 442000,100 443000,0 [Tone] On=0 Level=117 F1=200 F2=30 Droop=40 Phase=10 Envelope=0,100 5294,31 9581,5 16498,0 [Noise] On=0 Level=1 Slope=-100 Envelope=0,33 317,8 10184,0 FixedSeq=0 [Overtones] On=0 Level=80 F1=800 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,29 1983,44 9359,16 19988,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=128 F=900 dF=13 Envelope=0,100 666,2 5774,0 [NoiseBand2] On=1 Level=128 F=860 dF=15 Envelope=0,100 698,2 5838,0 [Distortion] On=0 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/jorgensohn/zurrr.ds000066400000000000000000000014601247673406200230020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=1 HighPass=0 Resonance=98 FilterEnv=0,100 40134,100 442000,100 442000,0 [Tone] On=0 Level=28 F1=1340 F2=1340 Droop=0 Phase=0 Envelope=0,100 40293,100 40293,0 [Noise] On=0 Level=143 Slope=18 Envelope=0,0 2792,0 10279,0 37050,0 FixedSeq=0 [Overtones] On=1 Level=164 F1=1000 Wave1=4 Track1=0 F2=1000.01 Wave2=4 Track2=0 Method=2 Param=100 Envelope1=0,0 159,100 1507,33 4045,41 9121,100 14674,24 30775,2 37691,0 Envelope2=0,100 40102,24 40102,0 Filter=0 [NoiseBand] On=0 Level=65 F=7000 dF=23 Envelope=0,0 238,48 1269,34 3331,21 6028,14 12691,5 37564,0 [NoiseBand2] On=0 Level=74 F=7030 dF=25 Envelope=0,0 159,38 3490,20 12532,5 37755,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/000077500000000000000000000000001247673406200202205ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/latin/Bongo_h.ds000066400000000000000000000013251247673406200221240ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=73 Slope=-46 Envelope=0,100 194,8 685,0 [Overtones] On=1 Level=128 F1=321 Wave1=0 Track1=0 F2=254 Wave2=0 Track2=0 Filter=0 Method=1 Param=75 Envelope1=0,100 2712,15 8815,0 Envelope2=0,100 209,18 2384,2 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Bongo_m2.ds000066400000000000000000000013071247673406200222130ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,0 2607,88 3500,20 8750,0 [Noise] On=0 Level=81 Slope=57 Envelope=0,0 670,83 1341,95 2011,42 2682,13 3799,5 5810,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=4000 dF=35 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=1 Level=128 F=300 dF=27 Envelope=0,100 834,15 2548,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Bongo_mu.ds000066400000000000000000000012531247673406200223160ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=77 Slope=-100 Envelope=0,100 194,8 685,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=1 Param=81 Envelope1=0,100 983,12 2414,0 Envelope2=0,100 1043,12 2384,2 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Clave_we.ds000066400000000000000000000013651247673406200223020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 Level=0 Resonance=0 [Tone] On=1 Level=181 F1=2450 F2=2450 Droop=0 Phase=-130 Envelope=0,99 149,66 946,21 2138,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=94 F=2450 dF=25 Envelope=0,5 1341,34 2905,39 3948,21 7138,8 11184,2 18560,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Gamelan.ds000066400000000000000000000013621247673406200221160ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=500 F2=500 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=73 Slope=-79 Envelope=0,100 194,8 685,0 [Overtones] On=1 Level=161 F1=700 Wave1=0 Track1=0 F2=1000 Wave2=0 Track2=0 Filter=0 Method=2 Param=89 Envelope1=0,100 2011,47 4097,23 8418,8 18027,0 Envelope2=0,100 745,20 1341,95 20709,100 20709,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Maracas.ds000066400000000000000000000012731247673406200221220ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=92 Envelope=0,0 1415,63 1788,9 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=151 F=100 dF=35 Envelope=0,100 1000,20 3054,16 7449,22 8641,0 [Distortion] On=0 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Shaker_1.ds000066400000000000000000000013101247673406200222000ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,0 2607,88 3500,20 8750,0 [Noise] On=1 Level=79 Slope=-13 Envelope=0,0 670,83 968,93 1415,40 2682,13 3799,5 5810,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Shaker_2.ds000066400000000000000000000014041247673406200222050ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,0 2607,88 3500,20 8750,0 [Noise] On=1 Level=79 Slope=-13 Envelope=0,0 1341,95 2682,13 4470,12 5364,34 6630,10 8194,29 9461,6 11323,3 12589,15 14303,0 15718,2 16835,8 18400,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Tamb_hit.ds000066400000000000000000000013061247673406200222770ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=17 Envelope=0,0 670,4 745,97 1192,11 3278,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=9500 dF=50 Envelope=0,0 670,2 670,100 2086,26 3576,6 8120,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Tamb_shk.ds000066400000000000000000000013141247673406200222770ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=73 Slope=17 Envelope=0,0 670,4 1341,63 2086,7 3278,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=9500 dF=50 Envelope=0,0 670,2 745,32 1713,10 1788,28 3576,6 8120,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/ThumbPno.ds000066400000000000000000000013211247673406200223010ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=32 F1=320 F2=300 Droop=0 Phase=90 Envelope=0,0 596,0 13111,72 15644,27 22795,9 23838,0 [Noise] On=1 Level=136 Slope=-100 Envelope=0,100 36,11 387,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=512 Wave2=0 Track2=0 Filter=0 Method=2 Param=72 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=32 F=395 dF=0 Envelope=0,0 0,0 13111,65 15197,25 23242,9 24434,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=12 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/Triangle.ds000066400000000000000000000013271247673406200223200ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=0 Level=111 Slope=69 Envelope=0,100 3948,55 12440,4 18772,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/bongo_l.ds000066400000000000000000000012541247673406200221710ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=77 Slope=-100 Envelope=0,100 194,8 685,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=1 Param=56 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 1043,12 2384,2 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/guiro.ds000066400000000000000000000014441247673406200217000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=45 FilterEnv=0,57 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=129 F1=31 Wave1=0 Track1=0 F2=31.01 Wave2=0 Track2=0 Method=3 Param=68 Envelope1=0,100 14594,0 Envelope2=0,20 7075,20 10724,25 16117,64 16117,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/one_clap.ds000066400000000000000000000012721247673406200223320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=-59 Envelope=0,100 117,20 729,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=155 F=2000 dF=44 Envelope=0,100 143,13 1373,0 [NoiseBand2] On=1 Level=92 F=2000 dF=60 Envelope=0,0 1188,8 2929,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/latin/taiko.ds000066400000000000000000000012721247673406200216610ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=94 F1=120 F2=100 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=147 F1=250 Wave1=0 Track1=1 F2=315 Wave2=0 Track2=1 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=81 F=10000 dF=49 Envelope=0,0 3501,0 7524,20 10876,91 10876,0 [NoiseBand2] On=1 Level=128 F=100 dF=21 Envelope=0,0 3,100 2533,23 11621,0 [Distortion] On=0 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/linn/000077500000000000000000000000001247673406200200515ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/linn/linn_cab.ds000066400000000000000000000013311247673406200221440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=1 FilterEnv=0,11 0,39 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=130 Slope=62 Envelope=0,0 1124,44 2169,0 FixedSeq=0 [Overtones] On=0 Level=153 F1=1081 Wave1=0 Track1=0 F2=1639 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 626,25 2771,11 4678,0 Envelope2=0,100 656,25 2712,13 4648,0 [NoiseBand] On=1 Level=154 F=6000 dF=76 Envelope=0,0 1077,100 2185,0 [NoiseBand2] On=0 Level=98 F=3131 dF=78 Envelope=0,100 477,12 1549,0 [Distortion] On=0 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_cga1.ds000066400000000000000000000012551247673406200222370ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=-6.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,63 442000,100 442000,0 [Tone] On=1 Level=153 F1=230 F2=230 Droop=65 Phase=00 Envelope=0,100 417,50 2056,25 10355,0 [Noise] On=1 Level=92 Slope=-35 Envelope=0,100 98,0 [Overtones] On=1 Level=138 F1=280 Wave1=0 Track1=0 F2=420 Wave2=1 Track2=0 Filter=0 Method=0 Param=27 Envelope1=0,100 1758,10 7509,0 Envelope2=0,100 1192,9 7390,0 [NoiseBand] On=1 Level=113 F=800 dF=52 Envelope=0,100 521,15 2086,5 9237,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_cga2.ds000066400000000000000000000012541247673406200222370ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,63 442000,100 442000,0 [Tone] On=1 Level=153 F1=230 F2=230 Droop=65 Phase=00 Envelope=0,100 417,50 2056,25 10355,0 [Noise] On=1 Level=92 Slope=-35 Envelope=0,100 98,0 [Overtones] On=1 Level=138 F1=280 Wave1=0 Track1=0 F2=420 Wave2=1 Track2=0 Filter=0 Method=0 Param=27 Envelope1=0,100 1758,10 7509,0 Envelope2=0,100 1192,9 7390,0 [NoiseBand] On=1 Level=113 F=800 dF=52 Envelope=0,100 521,15 2086,5 9237,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_cga3.ds000066400000000000000000000012531247673406200222370ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=6.00 Stretch=80.0 Filter=0 HighPass=0 FilterEnv=0,63 442000,100 442000,0 [Tone] On=1 Level=153 F1=230 F2=230 Droop=65 Phase=00 Envelope=0,100 417,50 2056,25 10355,0 [Noise] On=1 Level=92 Slope=-35 Envelope=0,100 98,0 [Overtones] On=1 Level=138 F1=280 Wave1=0 Track1=0 F2=420 Wave2=1 Track2=0 Filter=0 Method=0 Param=27 Envelope1=0,100 1758,10 7509,0 Envelope2=0,100 1192,9 7390,0 [NoiseBand] On=1 Level=113 F=800 dF=52 Envelope=0,100 521,15 2086,5 9237,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_cgam.ds000066400000000000000000000012541247673406200223320ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=-6.00 Stretch=30.0 Filter=0 HighPass=0 FilterEnv=0,63 442000,100 442000,0 [Tone] On=1 Level=153 F1=230 F2=230 Droop=65 Phase=00 Envelope=0,100 417,50 2056,25 10355,0 [Noise] On=1 Level=92 Slope=-35 Envelope=0,100 98,0 [Overtones] On=1 Level=138 F1=280 Wave1=0 Track1=0 F2=420 Wave2=1 Track2=0 Filter=0 Method=0 Param=27 Envelope1=0,100 1758,10 7509,0 Envelope2=0,100 1192,9 7390,0 [NoiseBand] On=1 Level=113 F=800 dF=52 Envelope=0,100 521,15 2086,5 9237,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_clp.ds000066400000000000000000000016051247673406200222010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=70.0 Filter=1 HighPass=1 FilterEnv=0,11 442000,100 443000,0 Level=0 Resonance=4 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=154 Slope=-100 Envelope=0,100 63,33 238,92 238,8 603,71 635,5 823,86 966,32 1029,89 1219,15 1396,39 5520,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=173 F=1700 dF=61 Envelope=0,100 127,0 238,92 333,0 508,9 633,0 823,86 934,0 1029,89 1219,15 1631,33 4473,20 4918,8 7868,0 [NoiseBand2] On=1 Level=137 F=400 dF=40 Envelope=0,100 793,18 1364,89 3141,20 4886,8 7805,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_cow.ds000066400000000000000000000014211247673406200222070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,63 442000,100 442000,0 Level=-2 Resonance=0 [Tone] On=1 Level=143 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,0 135,97 968,59 2411,0 [Noise] On=0 Level=145 Slope=-25 Envelope=0,100 387,41 1013,24 1043,33 1371,18 1549,30 1967,7 2056,22 3665,7 4529,0 FixedSeq=0 [Overtones] On=1 Level=99 F1=1081 Wave1=0 Track1=0 F2=1639 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 48,98 785,87 1761,41 2284,0 Envelope2=0,0 48,98 508,24 2189,0 [NoiseBand] On=1 Level=93 F=2389 dF=15 Envelope=0,0 71,98 595,24 1682,0 [NoiseBand2] On=1 Level=71 F=3131 dF=78 Envelope=0,0 159,96 523,19 1586,0 [Distortion] On=1 Clipping=6 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_kik.ds000066400000000000000000000013511247673406200221770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,75 887,73 442000,100 442000,0 Level=0 Resonance=7 [Tone] On=1 Level=145 F1=127 F2=47 Droop=14 Phase=00 Envelope=0,100 364,98 507,0 507,95 4545,47 5621,0 [Noise] On=1 Level=69 Slope=-100 Envelope=0,0 0,99 443,6 443,100 491,17 715,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=115 F=3000 dF=88 Envelope=0,100 180,11 715,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_snr.ds000066400000000000000000000014231247673406200222230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,100 1249,100 2935,83 5096,73 442000,100 443000,0 Level=0 Resonance=1 [Tone] On=1 Level=173 F1=164 F2=165 Droop=28 Phase=10 Envelope=0,100 1150,13 1923,0 [Noise] On=1 Level=119 Slope=-20 Envelope=0,97 0,0 615,36 1487,25 3173,20 4144,9 5175,0 FixedSeq=0 [Overtones] On=1 Level=163 F1=210 Wave1=0 Track1=1 F2=412 Wave2=0 Track2=1 Filter=0 Method=0 Param=60 Envelope1=0,100 615,18 1785,0 Envelope2=0,100 674,21 1745,0 [NoiseBand] On=1 Level=77 F=400 dF=34 Envelope=0,63 1494,37 1804,5 3668,8 3926,0 [NoiseBand2] On=1 Level=119 F=10000 dF=90 Envelope=0,97 238,0 1487,25 3490,15 3827,6 5750,0 [Distortion] On=1 Clipping=6 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_stk.ds000066400000000000000000000012701247673406200222220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,11 0,39 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=125 Slope=19 Envelope=0,100 790,0 3203,0 FixedSeq=0 [Overtones] On=1 Level=164 F1=218 Wave1=0 Track1=0 F2=1270 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 685,0 Envelope2=0,100 685,0 [NoiseBand] On=1 Level=174 F=1270 dF=44 Envelope=0,100 165,17 3236,0 [NoiseBand2] On=1 Level=142 F=3131 dF=80 Envelope=0,100 203,17 2132,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_tamb.ds000066400000000000000000000014731247673406200223510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,83 442000,100 442000,0 Level=0 Resonance=40 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=138 Slope=8 Envelope=0,74 477,11 5423,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Filter=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 [NoiseBand] On=1 Level=129 F=6300 dF=44 Envelope=0,100 462,17 507,67 1818,28 1818,47 2682,22 2682,45 3153,21 4719,0 [NoiseBand2] On=1 Level=106 F=8840 dF=22 Envelope=0,100 317,10 507,67 1408,24 1460,55 1904,35 2324,52 3054,35 4263,27 6801,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/linn/linn_tom1.ds000066400000000000000000000014041247673406200223000ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=-4.00 Stretch=90.0 Filter=1 HighPass=0 FilterEnv=0,95 4619,91 12962,71 28903,0 442000,100 442000,0 [Tone] On=1 Level=123 F1=100 F2=40 Droop=11 Phase=00 Envelope=0,100 2533,54 6704,26 15346,17 30095,14 32330,0 [Noise] On=1 Level=151 Slope=-56 Envelope=0,100 1341,20 2384,1 35310,0 36204,0 [Overtones] On=1 Level=111 F1=208 Wave1=2 Track1=1 F2=300 Wave2=1 Track2=1 Filter=0 Method=0 Param=0 Envelope1=0,100 2682,20 7598,7 23391,0 Envelope2=0,100 2000,20 5661,7 18474,0 [NoiseBand] On=0 Level=113 F=6000 dF=100 Envelope=0,100 626,25 1877,13 5602,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=5 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_tom2.ds000066400000000000000000000014031247673406200223000ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=70.0 Filter=1 HighPass=0 FilterEnv=0,95 4619,91 12962,71 28903,0 442000,100 442000,0 [Tone] On=1 Level=123 F1=100 F2=40 Droop=11 Phase=00 Envelope=0,100 2533,54 6704,26 15346,17 30095,14 32330,0 [Noise] On=1 Level=151 Slope=-56 Envelope=0,100 1341,20 2384,1 35310,0 36204,0 [Overtones] On=1 Level=111 F1=208 Wave1=2 Track1=1 F2=300 Wave2=1 Track2=1 Filter=0 Method=0 Param=0 Envelope1=0,100 2682,20 7598,7 23391,0 Envelope2=0,100 2000,20 5661,7 18474,0 [NoiseBand] On=0 Level=113 F=6000 dF=100 Envelope=0,100 626,25 1877,13 5602,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=9 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_tom3.ds000066400000000000000000000014031247673406200223010ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=8.00 Stretch=50.0 Filter=1 HighPass=0 FilterEnv=0,95 4619,91 12962,71 28903,0 442000,100 442000,0 [Tone] On=1 Level=123 F1=100 F2=40 Droop=11 Phase=00 Envelope=0,100 2533,54 6704,26 15346,17 30095,14 32330,0 [Noise] On=1 Level=151 Slope=-56 Envelope=0,100 1341,20 2384,1 35310,0 36204,0 [Overtones] On=1 Level=111 F1=208 Wave1=2 Track1=1 F2=300 Wave2=1 Track2=1 Filter=0 Method=0 Param=0 Envelope1=0,100 2682,20 7598,7 23391,0 Envelope2=0,100 2000,20 5661,7 18474,0 [NoiseBand] On=0 Level=113 F=6000 dF=100 Envelope=0,100 626,25 1877,13 5602,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=9 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_tom4.ds000066400000000000000000000014041247673406200223030ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=13.00 Stretch=30.0 Filter=1 HighPass=0 FilterEnv=0,95 4619,91 12962,71 28903,0 442000,100 442000,0 [Tone] On=1 Level=123 F1=100 F2=40 Droop=11 Phase=00 Envelope=0,100 2533,54 6704,26 15346,17 30095,14 32330,0 [Noise] On=1 Level=151 Slope=-56 Envelope=0,100 1341,20 2384,1 35310,0 36204,0 [Overtones] On=1 Level=111 F1=208 Wave1=2 Track1=1 F2=300 Wave2=1 Track2=1 Filter=0 Method=0 Param=0 Envelope1=0,100 2682,20 7598,7 23391,0 Envelope2=0,100 2000,20 5661,7 18474,0 [NoiseBand] On=0 Level=113 F=6000 dF=100 Envelope=0,100 626,25 1877,13 5602,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=9 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/linn/linn_tom5.ds000066400000000000000000000014041247673406200223040ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=17.00 Stretch=30.0 Filter=1 HighPass=0 FilterEnv=0,95 4619,91 12962,71 28903,0 442000,100 442000,0 [Tone] On=1 Level=123 F1=100 F2=40 Droop=11 Phase=00 Envelope=0,100 2533,54 6704,26 15346,17 30095,14 32330,0 [Noise] On=1 Level=151 Slope=-56 Envelope=0,100 1341,20 2384,1 35310,0 36204,0 [Overtones] On=1 Level=111 F1=208 Wave1=2 Track1=1 F2=300 Wave2=1 Track2=1 Filter=0 Method=0 Param=0 Envelope1=0,100 2682,20 7598,7 23391,0 Envelope2=0,100 2000,20 5661,7 18474,0 [NoiseBand] On=0 Level=113 F=6000 dF=100 Envelope=0,100 626,25 1877,13 5602,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=9 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/000077500000000000000000000000001247673406200210765ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/magnetboy/Eye_Eye.ds000066400000000000000000000013621247673406200227540ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=20 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=131 F1=99999 F2=40 Droop=17 Phase=32 Envelope=0,0 27761,95 59487,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 58250,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=880 Wave1=4 Track1=0 F2=480 Wave2=1 Track2=1 Method=2 Param=88 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 19544,16 31092,79 88835,8 100732,74 193532,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=100 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=6 lmms-1.1.3/data/samples/drumsynth/magnetboy/Fp1.ds000066400000000000000000000014331247673406200220550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=6 Filter=1 HighPass=1 Resonance=89 FilterEnv=0,63 30140,35 106284,11 191153,0 442000,100 442000,0 [Tone] On=1 Level=131 F1=9999 F2=400 Droop=100 Envelope=0,0 9518,20 67419,37 151495,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 203050,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=880 Wave1=4 Track1=1 F2=48 Wave2=1 Track2=1 Method=2 Param=100 Envelope1=0,0 22336,86 39722,67 191153,0 Envelope2=0,1 4696,26 19544,76 27761,14 31092,79 52349,29 100732,74 193532,0 Filter=0 [NoiseBand] On=1 Level=157 F=56300 dF=43 Envelope=0,0 18243,26 134838,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/magnetboy/Mist1.ds000066400000000000000000000014061247673406200224240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=9 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=131 F1=99999 F2=240 Droop=48 Phase=32 Envelope=0,0 26174,11 56315,66 122941,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 203050,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=880 Wave1=4 Track1=1 F2=480 Wave2=1 Track2=1 Method=2 Param=88 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 19544,16 31092,79 88835,8 100732,74 193532,0 Filter=0 [NoiseBand] On=1 Level=90 F=5630 dF=43 Envelope=0,0 18243,26 134838,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/magnetboy/Mist2.ds000066400000000000000000000014321247673406200224240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=6 Filter=1 HighPass=1 Resonance=89 FilterEnv=0,63 30140,35 106284,11 191153,0 442000,100 442000,0 [Tone] On=1 Level=131 F1=9999 F2=400 Droop=100 Envelope=0,0 9518,20 67419,37 151495,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 203050,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=880 Wave1=4 Track1=1 F2=480 Wave2=1 Track2=1 Method=2 Param=88 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 27761,14 31092,79 52349,29 100732,74 193532,0 Filter=0 [NoiseBand] On=1 Level=108 F=56300 dF=43 Envelope=0,0 18243,26 134838,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/magnetboy/Randion1.ds000066400000000000000000000014411247673406200231010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=150 Level=5 Filter=1 HighPass=0 Resonance=33 FilterEnv=0,63 49969,11 106284,91 191153,0 442000,100 442000,0 [Tone] On=1 Level=181 F1=9999 F2=80 Droop=23 Phase=90 Envelope=0,0 9518,20 67419,37 151495,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 203050,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=88 Wave1=4 Track1=1 F2=4800 Wave2=1 Track2=1 Method=3 Param=28 Envelope1=0,0 22336,86 39722,67 191153,0 Envelope2=0,1 4696,26 19544,76 27761,14 31092,79 52349,29 100732,74 193532,0 Filter=0 [NoiseBand] On=1 Level=157 F=56300 dF=16 Envelope=0,0 18243,26 134838,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/magnetboy/Squelb.ds000066400000000000000000000013631247673406200226640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=131 F1=99999 F2=240 Droop=37 Phase=32 Envelope=0,0 31219,70 182428,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 58250,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=880 Wave1=4 Track1=1 F2=480 Wave2=1 Track2=0 Method=2 Param=71 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 19544,16 31092,79 88835,8 100732,74 193532,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=100 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/magnetboy/Throaties1.ds000066400000000000000000000014321247673406200234510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=6 Filter=1 HighPass=1 Resonance=89 FilterEnv=0,63 30140,35 106284,11 191153,0 442000,100 442000,0 [Tone] On=1 Level=131 F1=9999 F2=80 Droop=100 Envelope=0,0 9518,20 67419,37 151495,0 [Noise] On=0 Level=62 Slope=-85 Envelope=0,0 40991,75 203050,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=880 Wave1=4 Track1=1 F2=48 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,0 22336,86 39722,67 191153,0 Envelope2=0,1 4696,26 19544,76 27761,14 31092,79 52349,29 100732,74 193532,0 Filter=0 [NoiseBand] On=1 Level=157 F=56300 dF=43 Envelope=0,0 18243,26 134838,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=4 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone1.ds000066400000000000000000000013101247673406200224070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=109 F1=4400 F2=220 Droop=44 Phase=0 Envelope=0,100 14400,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=220 Wave1=4 Track1=0 F2=55 Wave2=2 Track2=0 Method=3 Param=100 Envelope1=0,0 30,100 900,38 6375,16 29400,0 Envelope2=0,0 0,100 8550,68 15000,93 30450,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone10.ds000066400000000000000000000013711247673406200224760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=51 F1=65 F2=652 Droop=100 Phase=0 Envelope=0,0 9000,59 17700,28 28500,5 40500,26 48900,3 57600,16 118261,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=652 Wave1=0 Track1=1 F2=3520 Wave2=1 Track2=0 Method=1 Param=40 Envelope1=0,0 30,100 900,38 8025,22 25800,8 85900,0 Envelope2=0,100 33000,72 62400,0 Filter=0 [NoiseBand] On=1 Level=117 F=8000 dF=53 Envelope=0,100 300,0 [NoiseBand2] On=0 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone11.ds000066400000000000000000000013711247673406200224770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=73 F1=6500 F2=1 Droop=100 Phase=0 Envelope=0,0 9000,59 17700,28 28500,5 40500,26 48900,3 57600,16 118261,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=652 Wave1=0 Track1=0 F2=3520 Wave2=1 Track2=1 Method=2 Param=82 Envelope1=0,0 30,100 900,38 8025,22 25800,8 85900,0 Envelope2=0,100 33000,72 62400,0 Filter=0 [NoiseBand] On=1 Level=117 F=8000 dF=53 Envelope=0,100 300,0 [NoiseBand2] On=0 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone12.ds000066400000000000000000000013711247673406200225000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=73 F1=6500 F2=780 Droop=80 Phase=0 Envelope=0,0 9000,59 17700,28 28500,5 40500,26 48900,3 57600,16 118261,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=652 Wave1=2 Track1=1 F2=3520 Wave2=1 Track2=0 Method=2 Param=30 Envelope1=0,0 30,100 900,38 8025,22 25800,8 85900,0 Envelope2=0,100 33000,72 62400,0 Filter=1 [NoiseBand] On=1 Level=181 F=800 dF=98 Envelope=0,100 300,0 [NoiseBand2] On=0 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone14.ds000066400000000000000000000013621247673406200225020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=123 F1=760 F2=80 Droop=100 Phase=360 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=0 Level=111 Slope=69 Envelope=0,100 3948,55 12440,4 18772,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=1000 Wave1=0 Track1=0 F2=120 Wave2=2 Track2=1 Method=1 Param=0 Envelope1=0,100 15943,44 78285,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=30 F=12000 dF=100 Envelope=0,100 6000,50 64960,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=4 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone15.ds000066400000000000000000000012621247673406200225020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=17 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=108 Slope=36 Envelope=0,0 83,95 83,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=110 Wave1=0 Track1=1 F2=55 Wave2=1 Track2=0 Method=1 Param=68 Envelope1=0,100 6450,24 18900,0 Envelope2=0,100 7650,20 34050,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone16.ds000066400000000000000000000012641247673406200225050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=1 Resonance=77 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=106 F1=50 F2=220 Droop=100 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=72 Slope=-15 Envelope=0,0 83,95 83,0 FixedSeq=0 [Overtones] On=1 Level=102 F1=110 Wave1=0 Track1=0 F2=55 Wave2=1 Track2=0 Method=0 Param=99 Envelope1=0,100 6450,24 18900,0 Envelope2=0,100 7650,20 34050,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=100 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone17.ds000066400000000000000000000013251247673406200225040ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=81 F1=200000 F2=220 Droop=100 Phase=0 Envelope=0,0 31219,70 67007,0 [Noise] On=1 Level=30 Slope=-64 Envelope=0,0 40991,75 58250,0 FixedSeq=0 [Overtones] On=1 Level=152 F1=440 Wave1=1 Track1=0 F2=440 Wave2=2 Track2=1 Method=2 Param=0 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 19544,76 19544,16 31092,79 57869,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone18.ds000066400000000000000000000013361247673406200225070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=159 F1=999999 F2=55 Droop=71 Phase=32 Envelope=0,0 31219,70 67007,0 [Noise] On=1 Level=25 Slope=100 Envelope=0,0 40991,75 58250,0 FixedSeq=0 [Overtones] On=1 Level=145 F1=880 Wave1=3 Track1=1 F2=220 Wave2=1 Track2=0 Method=2 Param=83 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 19544,16 31092,79 57869,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone19.ds000066400000000000000000000013321247673406200225040ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=12 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=88 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=159 F1=99 F2=55 Droop=42 Phase=-45 Envelope=0,0 31219,70 67007,0 [Noise] On=1 Level=25 Slope=100 Envelope=0,0 40991,75 58250,0 FixedSeq=1 [Overtones] On=1 Level=104 F1=880 Wave1=1 Track1=1 F2=220 Wave2=3 Track2=0 Method=2 Param=39 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 19544,16 31092,79 57869,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone2.ds000066400000000000000000000013071247673406200224160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=109 F1=5400 F2=40 Droop=44 Phase=0 Envelope=0,100 27483,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=106 F1=220 Wave1=1 Track1=0 F2=55 Wave2=1 Track2=0 Method=3 Param=100 Envelope1=0,0 30,100 900,38 6375,16 14467,0 Envelope2=0,0 0,100 8550,68 15000,93 30450,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone20.ds000066400000000000000000000013531247673406200224770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=17 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,78 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=143 Slope=18 Envelope=0,100 3000,35 10350,2 37050,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=783 Wave1=1 Track1=1 F2=45 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,0 150,100 923,30 1399,8 2399,0 3498,0 Envelope2=0,100 19443,0 Filter=0 [NoiseBand] On=1 Level=181 F=9000 dF=30 Envelope=0,0 150,100 750,55 4050,29 12738,7 36300,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone3.ds000066400000000000000000000013071247673406200224170ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=109 F1=150 F2=40 Droop=44 Phase=0 Envelope=0,100 11041,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=106 F1=22 Wave1=1 Track1=0 F2=550 Wave2=1 Track2=0 Method=3 Param=100 Envelope1=0,0 30,100 900,38 6375,16 70555,0 Envelope2=0,0 0,100 11548,82 15483,34 37945,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone4.ds000066400000000000000000000013071247673406200224200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=109 F1=150 F2=40 Droop=44 Phase=0 Envelope=0,100 11041,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=106 F1=22 Wave1=1 Track1=0 F2=550 Wave2=1 Track2=1 Method=0 Param=100 Envelope1=0,0 30,100 900,38 6375,16 70555,0 Envelope2=0,0 0,100 11548,82 15483,34 37945,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone5.ds000066400000000000000000000013111247673406200224140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=109 F1=1500 F2=40 Droop=44 Phase=0 Envelope=0,100 11041,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=106 F1=2200 Wave1=3 Track1=0 F2=55 Wave2=1 Track2=0 Method=0 Param=100 Envelope1=0,0 30,100 900,38 6375,16 70555,0 Envelope2=0,0 0,100 11548,82 15483,34 37945,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone6.ds000066400000000000000000000013131247673406200224170ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=69 F1=1500 F2=40 Droop=44 Phase=0 Envelope=0,100 10787,0 [Noise] On=1 Level=62 Slope=-28 Envelope=0,0 248,98 60027,0 FixedSeq=1 [Overtones] On=1 Level=106 F1=22 Wave1=3 Track1=0 F2=5500 Wave2=3 Track2=1 Method=0 Param=100 Envelope1=0,0 30,100 900,38 12944,50 70555,0 Envelope2=0,0 0,100 11548,82 19036,26 69925,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone7.ds000066400000000000000000000013121247673406200224170ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=69 F1=150 F2=40 Droop=44 Phase=0 Envelope=0,100 10787,0 [Noise] On=1 Level=62 Slope=100 Envelope=0,0 248,98 60027,0 FixedSeq=1 [Overtones] On=1 Level=106 F1=2 Wave1=3 Track1=0 F2=55000 Wave2=3 Track2=1 Method=0 Param=100 Envelope1=0,0 30,100 900,38 12944,50 70555,0 Envelope2=0,0 0,100 11548,82 19036,26 69925,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone8.ds000066400000000000000000000013321247673406200224220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=74 F1=1950 F2=60 Droop=82 Phase=180 Envelope=0,93 11400,17 33300,0 [Noise] On=0 Level=57 Slope=100 Envelope=0,0 248,98 248,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=220 Wave1=2 Track1=1 F2=542.7 Wave2=0 Track2=1 Method=3 Param=0 Envelope1=0,0 30,100 900,38 8025,22 25800,8 58800,0 Envelope2=0,100 26550,83 62400,0 Filter=0 [NoiseBand] On=0 Level=127 F=1630 dF=15 Envelope=0,100 2100,10 9750,0 [NoiseBand2] On=0 Level=59 F=220 dF=6 Envelope=0,0 225,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone9.ds000066400000000000000000000014131247673406200224230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=53 F1=442 F2=442 Droop=0 Phase=0 Envelope=0,0 9900,82 56870,41 111360,0 [Noise] On=0 Level=18 Slope=-57 Envelope=0,0 600,100 4200,45 29400,21 36600,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=1760 Wave1=1 Track1=0 F2=6 Wave2=1 Track2=0 Method=1 Param=33 Envelope1=0,0 16894,75 44735,50 104698,0 Envelope2=0,0 14550,51 27000,86 36000,83 36600,0 Filter=0 [NoiseBand] On=0 Level=26 F=1760 dF=75 Envelope=0,0 600,100 2250,20 33450,17 36000,83 36600,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/magnetboy/Tone_float1.ds000066400000000000000000000013401247673406200235770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=159 F1=999999 F2=60 Droop=62 Phase=32 Envelope=0,0 31219,70 92087,0 [Noise] On=0 Level=143 Slope=100 Envelope=0,0 40991,75 58250,0 FixedSeq=0 [Overtones] On=1 Level=145 F1=880 Wave1=3 Track1=1 F2=220 Wave2=1 Track2=0 Method=2 Param=100 Envelope1=0,0 22336,86 39722,67 65357,0 Envelope2=0,1 4696,26 19544,76 19544,16 31092,79 57869,0 Filter=0 [NoiseBand] On=0 Level=76 F=5630 dF=50 Envelope=0,100 819,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 3198,53 24435,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc/000077500000000000000000000000001247673406200200445ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc/'lectro_hammer.ds000066400000000000000000000014561247673406200232720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=4 Filter=1 HighPass=0 Resonance=5 FilterEnv=0,96 1299,30 1999,14 3198,8 23785,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=500 F2=50 Droop=50 Phase=65 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=65 F1=25 Wave1=2 Track1=1 F2=50 Wave2=3 Track2=0 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 2439,95 17489,89 19888,0 Filter=0 [NoiseBand] On=1 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/'lectro_square_hammer.ds000066400000000000000000000014561247673406200246520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=4 Filter=1 HighPass=0 Resonance=5 FilterEnv=0,96 1299,30 1999,14 3198,8 23785,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=500 F2=50 Droop=50 Phase=65 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=74 F1=25 Wave1=0 Track1=1 F2=50 Wave2=4 Track2=0 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 2439,95 17489,89 19888,0 Filter=0 [NoiseBand] On=1 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/12-bit_heavy_hitter.ds000066400000000000000000000013661247673406200241530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=150 Level=0 Filter=1 HighPass=1 Resonance=38 FilterEnv=0,0 350,11 442000,100 442000,0 [Tone] On=1 Level=34 F1=500 F2=200 Droop=13 Phase=0 Envelope=0,100 400,74 1049,54 1899,39 5247,11 9144,0 [Noise] On=1 Level=74 Slope=-82 Envelope=0,100 1099,55 2498,29 4147,10 7096,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=800 Wave1=0 Track1=0 F2=500 Wave2=0 Track2=0 Method=2 Param=100 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=162 F=630 dF=50 Envelope=0,76 1049,41 2748,14 4897,7 8945,0 [NoiseBand2] On=1 Level=135 F=1500 dF=74 Envelope=0,100 1346,34 3895,0 [Distortion] On=1 Clipping=6 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/909_hard_snare.ds000066400000000000000000000013651247673406200231100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=130 Level=6 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,11 750,11 442000,100 443000,0 [Tone] On=1 Level=164 F1=280 F2=130 Droop=23 Phase=20 Envelope=0,100 278,50 1071,17 2578,3 5347,0 [Noise] On=1 Level=104 Slope=55 Envelope=0,100 819,39 1666,15 5097,0 FixedSeq=0 [Overtones] On=1 Level=62 F1=280 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 297,39 535,17 972,3 1699,0 Envelope2=0,100 745,11 2235,0 Filter=0 [NoiseBand] On=1 Level=115 F=4000 dF=93 Envelope=0,100 1210,41 2479,16 4164,0 [NoiseBand2] On=1 Level=102 F=7356 dF=83 Envelope=0,100 1210,41 2479,16 4164,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/AAH.ds000066400000000000000000000013241247673406200207650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=1 Level=128 F1=240 F2=200 Droop=9 Phase=0 Envelope=0,0 14005,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=200 Wave1=1 Track1=1 F2=1200 Wave2=0 Track2=1 Filter=0 Method=0 Param=6 Envelope1=0,0 1564,74 12142,74 13558,0 Envelope2=0,0 1937,54 12120,56 13558,0 [NoiseBand] On=1 Level=39 F=1200 dF=39 Envelope=0,0 1937,54 11397,54 13558,0 [NoiseBand2] On=1 Level=16 F=3150 dF=43 Envelope=0,0 1937,54 11397,54 13558,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/B1_B2.ds000066400000000000000000000012711247673406200211620ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=81 F=10000 dF=49 Envelope=0,0 3501,0 7524,20 10876,91 10876,0 [NoiseBand2] On=1 Level=128 F=100 dF=21 Envelope=0,100 2533,23 11621,0 [Distortion] On=0 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/Clap.ds000066400000000000000000000016371247673406200212620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=-2 Filter=1 HighPass=1 Resonance=2 FilterEnv=0,44 442000,100 443000,0 [Tone] On=0 Level=138 F1=67 F2=60 Droop=0 Phase=30 Envelope=0,100 2309,25 12515,0 [Noise] On=0 Level=181 Slope=1 Envelope=0,0 48,47 63,100 920,70 2284,34 4093,14 6789,5 17635,0 FixedSeq=1 [Overtones] On=0 Level=62 F1=500 F2=328 Method=0 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=1 Level=175 F=1000 dF=100 Envelope=0,0 32,44 45,100 131,66 228,40 363,21 508,5 543,51 560,100 652,62 767,39 898,19 1047,5 1076,51 1084,89 1161,53 1225,33 1301,18 1396,5 1434,56 1434,95 2387,40 3585,3 6187,0 17635,0 [NoiseBand2] On=1 Level=85 F=825 dF=43 Envelope=0,0 48,47 59,100 952,73 2261,49 3775,31 7995,14 19829,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Distant_Thunder.ds000066400000000000000000000014471247673406200235010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,2 14991,68 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=128 F=100 dF=22 Envelope=0,0 5513,79 10429,32 15197,74 19750,63 24136,70 41120,46 46400,32 71861,43 83282,11 92800,28 130079,11 207016,0 [NoiseBand2] On=1 Level=128 F=50 dF=16 Envelope=0,0 11025,64 28903,19 87008,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/N_low.ds000066400000000000000000000012711247673406200214530ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=-100 Envelope=0,100 4768,41 9982,0 [Overtones] On=0 Level=128 F1=440 Wave1=3 Track1=0 F2=440 Wave2=4 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/N_vlow.ds000066400000000000000000000012671247673406200216460ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,0 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=-100 Envelope=0,100 4768,41 9982,0 [Overtones] On=0 Level=128 F1=440 Wave1=3 Track1=0 F2=440 Wave2=4 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/RimShot.ds000066400000000000000000000012511247673406200217600ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=-3 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,5 442000,100 442000,0 [Tone] On=1 Level=144 F1=500 F2=500 Droop=0 Phase=15 Envelope=0,0 6,100 444,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=220 Wave1=1 Track1=0 F2=1000 Wave2=1 Track2=0 Method=0 Param=38 Envelope1=0,0 0,100 882,0 Envelope2=0,0 0,100 447,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 2500,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Saber_fight.ds000066400000000000000000000021231247673406200226070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=By Steve W Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=164 F1=100 F2=90 Droop=50 Envelope=0,0 5838,35 13706,46 23985,14 26270,14 50683,0 54490,10 69481,93 81617,47 90897,11 111043,46 133252,14 143563,89 187187,14 208603,9 245881,37 260158,5 277608,0 [Noise] On=1 Level=139 Slope=29 Envelope=0,0 48542,0 48542,51 54966,8 60677,0 134838,0 134838,31 143563,0 FixedSeq=0 [Overtones] On=1 Level=170 F1=200 Wave1=4 Track1=0 F2=55 Wave2=4 Track2=0 Method=0 Param=85 Envelope1=0,0 47971,0 47971,26 52111,8 61867,0 134838,0 134838,17 141183,4 155460,0 Envelope2=0,0 48098,0 48098,61 51635,7 53063,20 54966,10 65040,0 131665,0 131665,38 134838,5 138011,11 142770,3 151495,1 172910,0 Filter=0 [NoiseBand] On=1 Level=115 F=1500 dF=66 Envelope=0,0 48066,0 48066,55 50921,5 51873,17 59487,0 131665,0 131665,28 134838,5 158633,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=8 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Simple-c.ds000066400000000000000000000015641247673406200220530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=5 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,75 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=150 Slope=-49 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 4529,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=129 F=1300 dF=49 Envelope=0,99 104,38 432,18 440,100 570,29 879,14 894,100 1028,26 1333,9 1333,98 2309,27 5661,7 11837,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Simple-r.ds000066400000000000000000000012371247673406200220670ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1800 F2=1800 Droop=0 Phase=0 Envelope=0,100 186,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=128 F1=480 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,0 0,0 105,44 387,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=13 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Simple-s.ds000066400000000000000000000012531247673406200220660ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=153 F1=170 F2=170 Droop=0 Phase=0 Envelope=0,100 1200,16 3375,0 [Noise] On=1 Level=90 Slope=1 Envelope=0,100 1950,20 5325,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,100 525,12 2025,0 Envelope2=0,100 450,11 1650,0 [NoiseBand] On=1 Level=88 F=2000 dF=92 Envelope=0,100 1275,16 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=16 Envelope=0,0 20550,0 20700,100 43200,100 43350,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Tone_dis.ds000066400000000000000000000012511247673406200221370ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=17 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Tone_sw2.ds000066400000000000000000000012501247673406200220720ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1000 F2=200 Droop=37 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/Tone_swp.ds000066400000000000000000000012471247673406200221760ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/airbrush_bd.ds000066400000000000000000000014651247673406200226660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=3 Filter=1 HighPass=0 Resonance=5 FilterEnv=0,100 16498,59 442000,100 442000,0 [Tone] On=1 Level=180 F1=900 F2=50 Droop=64 Phase=0 Envelope=0,100 1750,20 6266,3 14753,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=24 F=10 dF=92 Envelope=0,100 793,34 3014,10 6266,2 15229,0 [NoiseBand2] On=1 Level=34 F=300 dF=40 Envelope=0,100 397,43 2697,14 7138,3 14356,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/ambient_noise_snare.ds000066400000000000000000000013301247673406200243750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=7 Filter=0 HighPass=0 Resonance=6 FilterEnv=0,23 442000,100 443000,0 [Tone] On=1 Level=22 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 635,26 2221,8 6481,0 [Noise] On=1 Level=32 Slope=-25 Envelope=0,32 1190,17 2776,5 5810,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=129 F=400 dF=34 Envelope=0,32 1190,17 2776,5 5810,0 [NoiseBand2] On=1 Level=63 F=3000 dF=89 Envelope=0,64 793,52 1348,27 3547,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/amen_bd.ds000066400000000000000000000015311247673406200217610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=1 Stretch=100.0 Level=3 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,89 7297,78 13769,50 444000,100 444000,0 [Tone] On=1 Level=78 F1=110 F2=80 Droop=54 Phase=70 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=74 Slope=-38 Envelope=0,41 2189,38 4315,17 6948,7 10724,0 FixedSeq=1 [Overtones] On=0 Level=139 F1=1020 Wave1=0 Track1=0 F2=150 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,91 1110,62 2919,37 5647,20 8376,14 14436,0 Envelope2=0,100 4025,50 10232,0 Filter=0 [NoiseBand] On=1 Level=133 F=120 dF=31 Envelope=0,100 1808,34 4442,11 10279,0 [NoiseBand2] On=1 Level=47 F=5000 dF=78 Envelope=0,100 1618,46 3141,33 4473,17 6789,8 15419,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/amen_sn_1.ds000066400000000000000000000015031247673406200222330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=2 FilterEnv=0,0 1685,8 10985,7 444000,100 444000,0 [Tone] On=1 Level=32 F1=300 F2=300 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=128 Slope=64 Envelope=0,100 972,86 2300,47 3649,21 10628,0 FixedSeq=1 [Overtones] On=1 Level=78 F1=400 Wave1=0 Track1=0 F2=340 Wave2=0 Track2=0 Method=1 Param=48 Envelope1=0,8 1250,20 6856,0 Envelope2=0,100 1758,38 5796,0 Filter=0 [NoiseBand] On=1 Level=32 F=305 dF=12 Envelope=0,100 1473,58 4164,29 7456,14 10490,0 [NoiseBand2] On=1 Level=172 F=650 dF=78 Envelope=0,50 793,58 1487,35 2816,14 4442,6 6643,2 9121,0 [Distortion] On=1 Clipping=7 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/and_loud_sn.ds000066400000000000000000000015701247673406200226640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=11 Filter=1 HighPass=0 Resonance=31 FilterEnv=0,8 0,95 8695,79 11961,8 444000,100 444000,0 [Tone] On=1 Level=65 F1=500 F2=160 Droop=60 Phase=180 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 8045,0 [Noise] On=1 Level=70 Slope=-64 Envelope=0,100 1682,74 4500,17 6694,11 8445,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=160 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=41 F=964 dF=100 Envelope=0,100 2250,30 3998,3 8795,0 [NoiseBand2] On=1 Level=42 F=9000 dF=58 Envelope=0,100 1015,60 2475,34 4949,14 6896,5 9794,0 [Distortion] On=0 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/another_909_moment.ds000066400000000000000000000014721247673406200240200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=300 F2=62 Droop=39 Phase=08 Envelope=0,100 317,100 857,53 1396,31 3173,14 6218,5 10375,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 508,50 1500,20 4315,13 12056,0 [Distortion] On=1 Clipping=1 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/another_example_snare.ds000066400000000000000000000014071247673406200247410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=-7 Stretch=100 Level=8 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,3 1618,10 444000,100 444000,0 [Tone] On=1 Level=73 F1=600 F2=378 Droop=28 Phase=0 Envelope=0,100 1199,46 3798,0 [Noise] On=1 Level=119 Slope=-29 Envelope=0,100 500,20 5996,0 FixedSeq=1 [Overtones] On=1 Level=74 F1=357 Wave1=0 Track1=0 F2=630 Wave2=1 Track2=0 Method=2 Param=81 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 9613,0 Filter=0 [NoiseBand] On=1 Level=128 F=7402 dF=100 Envelope=0,100 750,20 6916,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=12 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/application_bass_drum.ds000066400000000000000000000016501247673406200247400ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-12 Stretch=100 Level=-2 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,3 6092,5 12310,7 442000,100 442000,0 [Tone] On=1 Level=160 F1=600 F2=72 Droop=34 Phase=12 Envelope=0,91 3046,92 3934,48 10279,8 17132,0 [Noise] On=1 Level=109 Slope=-16 Envelope=0,39 400,17 1249,5 3426,1 12542,0 FixedSeq=1 [Overtones] On=0 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,54 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=0 [NoiseBand] On=1 Level=181 F=72 dF=5 Envelope=0,53 4569,26 11422,16 21066,5 31854,0 [NoiseBand2] On=1 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 25001,0 [Distortion] On=1 Clipping=0 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/b1_0.ds000066400000000000000000000012701247673406200211150ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0 Stretch=100 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Level=0 [Tone] On=0 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=1 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=1000 dF=0 Envelope=0,100 1713,42 3501,14 10876,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/b1_2.ds000066400000000000000000000012631247673406200211210ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=1000 dF=17 Envelope=0,100 1713,42 3501,14 10876,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/b1_5.ds000066400000000000000000000012631247673406200211240ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=1000 dF=40 Envelope=0,100 1713,42 3501,14 10876,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/b1_9.ds000066400000000000000000000012631247673406200211300ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=128 F=1000 dF=90 Envelope=0,100 1713,42 3501,14 10876,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/basic_808_click_hum.ds000066400000000000000000000014241247673406200240730ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=50 Droop=58 Phase=60 Envelope=0,100 397,52 1428,29 3490,15 6980,10 16339,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=10 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/battle_hook_sn.ds000066400000000000000000000014211247673406200233650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=2 Filter=1 HighPass=1 Resonance=1 FilterEnv=0,0 1650,39 4949,38 8249,35 442000,100 443000,0 [Tone] On=1 Level=131 F1=200 F2=110 Droop=18 Phase=10 Envelope=0,100 1150,13 1923,0 [Noise] On=1 Level=119 Slope=21 Envelope=0,97 0,0 615,36 1487,25 2284,14 2919,6 4315,0 FixedSeq=0 [Overtones] On=1 Level=163 F1=210 Wave1=0 Track1=1 F2=412 Wave2=0 Track2=1 Method=0 Param=60 Envelope1=0,100 615,18 1785,0 Envelope2=0,100 674,21 1745,0 Filter=0 [NoiseBand] On=1 Level=115 F=5000 dF=64 Envelope=0,63 888,36 1650,16 3300,4 6092,1 7741,0 [NoiseBand2] On=1 Level=119 F=10000 dF=90 Envelope=0,97 888,7 2284,19 3827,6 5750,0 [Distortion] On=1 Clipping=19 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/bauble_bd.ds000066400000000000000000000014601247673406200222740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=120 F2=50 Droop=82 Phase=10 Envelope=0,100 1049,71 2299,47 3998,29 5647,17 8595,7 22636,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/beat_box_bd.ds000066400000000000000000000014031247673406200226220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=18 Filter=0 HighPass=0 Resonance=11 FilterEnv=0,85 14691,50 442000,100 443000,0 [Tone] On=1 Level=37 F1=500 F2=75 Droop=30 Phase=110 Envelope=0,0 0,100 1904,100 2617,21 3649,0 [Noise] On=0 Level=82 Slope=94 Envelope=0,0 0,75 1409,64 1409,0 2169,0 FixedSeq=0 [Overtones] On=0 Level=115 F1=437 Wave1=0 Track1=0 F2=800 Wave2=0 Track2=0 Method=3 Param=8 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=1 Level=37 F=5000 dF=84 Envelope=0,99 555,35 1190,14 2459,3 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/beefy_wack.ds000066400000000000000000000014311247673406200224720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=1 Level=128 Slope=-18 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=160 F=200 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/big_80's.ds000066400000000000000000000014361247673406200217020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=3 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,11 6223,17 444000,100 444000,0 [Tone] On=1 Level=145 F1=1500 F2=120 Droop=40 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 2633,0 [Noise] On=1 Level=101 Slope=-10 Envelope=0,100 857,34 2602,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=220 Wave1=3 Track1=1 F2=1720 Wave2=0 Track2=1 Method=1 Param=80 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/big_80's_2.ds000066400000000000000000000014431247673406200221210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=400 Level=4 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,0 250,17 6946,25 444000,100 444000,0 [Tone] On=1 Level=145 F1=1500 F2=120 Droop=40 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 2633,0 [Noise] On=1 Level=101 Slope=10 Envelope=0,100 857,34 2602,0 FixedSeq=1 [Overtones] On=0 Level=101 F1=220 Wave1=3 Track1=1 F2=1720 Wave2=0 Track2=1 Method=1 Param=80 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/big_sleeper_snare.ds000066400000000000000000000015551247673406200240520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=15 Filter=1 HighPass=1 Resonance=31 FilterEnv=0,8 11961,8 444000,100 444000,0 [Tone] On=1 Level=65 F1=162 F2=130 Droop=0 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=61 Slope=-64 Envelope=0,100 1682,74 4500,17 6694,11 13071,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=160 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=41 F=964 dF=100 Envelope=0,100 2250,30 6948,23 13071,0 [NoiseBand2] On=1 Level=78 F=9000 dF=58 Envelope=0,100 1015,60 2475,34 4949,14 7487,7 12849,0 [Distortion] On=0 Clipping=13 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/blended_snare.ds000066400000000000000000000013521247673406200231620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,29 3649,44 442000,100 443000,0 [Tone] On=1 Level=82 F1=200 F2=155 Droop=42 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=149 Slope=64 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=158 F=5000 dF=100 Envelope=0,0 0,98 507,43 1788,19 3486,0 [NoiseBand2] On=1 Level=135 F=4000 dF=70 Envelope=0,100 839,35 1900,8 4402,0 [Distortion] On=1 Clipping=1 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/bouncy809bd.ds000066400000000000000000000014421247673406200224430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=55 Phase=30 Envelope=0,100 1750,20 19338,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/break_kick.ds000066400000000000000000000014141247673406200224610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=40 FilterEnv=0,51 1428,27 3807,9 6663,0 17132,0 442000,100 442000,0 [Tone] On=1 Level=108 F1=300 F2=120 Droop=35 Phase=45 Envelope=0,0 2607,88 3500,20 6901,6 23081,0 [Noise] On=0 Level=81 Slope=57 Envelope=0,0 670,83 1341,95 2011,42 2682,13 3799,5 5810,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=200 Wave1=3 Track1=0 F2=125 Wave2=0 Track2=1 Method=2 Param=89 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=61 F=4000 dF=35 Envelope=0,100 476,11 1904,2 3750,0 [NoiseBand2] On=1 Level=128 F=350 dF=14 Envelope=0,100 834,15 2548,0 [Distortion] On=1 Clipping=10 Bits=4 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/breathing_snare.ds000066400000000000000000000014041247673406200235260ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=1 HighPass=1 Resonance=46 FilterEnv=0,0 95,16 3642,15 442000,100 443000,0 [Tone] On=0 Level=88 F1=300 F2=110 Droop=42 Phase=45 Envelope=0,0 0,98 665,79 1788,19 3486,0 [Noise] On=1 Level=113 Slope=25 Envelope=0,0 48,38 554,47 1663,20 3452,5 6081,0 FixedSeq=0 [Overtones] On=1 Level=90 F1=110 Wave1=0 Track1=0 F2=100 Wave2=1 Track2=0 Method=0 Param=50 Envelope1=0,43 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=158 F=2000 dF=70 Envelope=0,0 0,98 982,89 2312,23 3452,5 6081,0 [NoiseBand2] On=1 Level=128 F=1600 dF=98 Envelope=0,0 0,98 2106,87 3230,18 6081,0 [Distortion] On=1 Clipping=1 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/bright_house_sn.ds000066400000000000000000000015211247673406200235550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=5 FilterEnv=0,100 1599,77 7695,85 442000,100 442000,0 [Tone] On=1 Level=123 F1=880 F2=112 Droop=50 Phase=15 Envelope=0,100 1799,51 2998,27 5347,1 8095,0 [Noise] On=1 Level=132 Slope=74 Envelope=0,100 1849,57 4500,30 6496,11 9000,0 FixedSeq=0 [Overtones] On=1 Level=45 F1=112 Wave1=0 Track1=0 F2=220 Wave2=0 Track2=0 Method=2 Param=80 Envelope1=0,100 2439,95 7895,0 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=1 Level=119 F=6000 dF=65 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/buff_hit.ds000066400000000000000000000014571247673406200221710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,100 633,14 3658,47 444000,100 444000,0 [Tone] On=1 Level=136 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=0 Level=129 Slope=83 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=3 Param=2 Envelope1=0,100 1156,57 3816,29 6698,0 Envelope2=0,100 3009,48 6191,0 Filter=0 [NoiseBand] On=1 Level=84 F=6000 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=0 Level=128 F=3100 dF=89 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=31 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc/buff_sound.ds000066400000000000000000000014501247673406200225260ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=10 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,50 792,38 3658,47 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1393,54 3436,0 [Noise] On=0 Level=129 Slope=83 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=3 Param=2 Envelope1=0,100 1156,57 3816,29 6698,0 Envelope2=0,100 3009,48 6191,0 Filter=0 [NoiseBand] On=1 Level=66 F=6000 dF=82 Envelope=0,100 1156,29 2914,0 [NoiseBand2] On=0 Level=128 F=3100 dF=89 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc/bug_into_water.ds000066400000000000000000000015201247673406200234020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! << http://www.fruityloops.com >> Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=96 FilterEnv=0,56 8804,72 8804,15 11660,0 34027,49 35217,12 444000,100 444000,0 [Tone] On=1 Level=128 F1=600 F2=120 Droop=0 Phase=0 Envelope=0,54 3649,38 14594,0 [Noise] On=1 Level=128 Slope=100 Envelope=0,100 1428,14 5473,0 FixedSeq=1 [Overtones] On=1 Level=129 F1=31 Wave1=0 Track1=0 F2=31.01 Wave2=0 Track2=0 Method=3 Param=68 Envelope1=0,100 14594,0 Envelope2=0,20 7075,20 10724,25 16117,64 16117,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=20 Bits=1 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc/bulge_n_yr_woofer.ds000066400000000000000000000013741247673406200241070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=1 Filter=0 HighPass=0 Resonance=34 FilterEnv=0,25 855,88 14691,50 442000,100 443000,0 [Tone] On=1 Level=181 F1=200 F2=45 Droop=50 Phase=110 Envelope=0,0 0,100 899,38 4247,15 21737,0 [Noise] On=0 Level=146 Slope=-75 Envelope=0,0 0,100 4797,3 6296,0 FixedSeq=0 [Overtones] On=0 Level=115 F1=437 Wave1=0 Track1=0 F2=611 Wave2=0 Track2=0 Method=3 Param=8 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=5 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/bumpin_quickie.ds000066400000000000000000000014211247673406200233760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=40 Droop=60 Phase=12 Envelope=0,100 1699,46 5697,13 8445,5 11693,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/calamity_snare.ds000066400000000000000000000014351247673406200233720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=150 Level=-1 Filter=1 HighPass=1 Resonance=3 FilterEnv=0,0 174,17 5394,6 7971,10 442000,100 443000,0 [Tone] On=0 Level=10 F1=120 F2=150 Droop=83 Phase=60 Envelope=0,100 714,24 1150,13 2459,6 4442,2 8883,0 [Noise] On=1 Level=181 Slope=-23 Envelope=0,63 654,38 2538,17 5394,0 FixedSeq=0 [Overtones] On=1 Level=47 F1=300 Wave1=1 Track1=1 F2=412 Wave2=0 Track2=1 Method=3 Param=35 Envelope1=0,39 615,18 2776,0 Envelope2=0,32 952,15 1824,8 3966,2 6861,0 Filter=0 [NoiseBand] On=1 Level=51 F=800 dF=73 Envelope=0,63 888,36 1650,16 3300,4 4521,1 5790,0 [NoiseBand2] On=1 Level=108 F=900 dF=27 Envelope=0,63 888,36 1650,16 3173,7 4620,2 6980,0 [Distortion] On=1 Clipping=6 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/change_the_channel_snare.ds000066400000000000000000000013551247673406200253450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,6 238,39 3642,15 442000,100 443000,0 [Tone] On=1 Level=88 F1=300 F2=110 Droop=42 Phase=45 Envelope=0,0 0,98 665,79 1788,19 3486,0 [Noise] On=1 Level=149 Slope=-34 Envelope=0,0 0,98 665,79 1520,5 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=158 F=5000 dF=100 Envelope=0,0 0,98 507,43 1788,19 3486,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 839,35 2502,0 [Distortion] On=1 Clipping=44 Bits=4 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/chow_bd.ds000066400000000000000000000014231247673406200220010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=50 FilterEnv=0,89 5949,32 16419,6 444000,100 444000,0 [Tone] On=1 Level=181 F1=600 F2=34 Droop=60 Phase=0 Envelope=0,100 5250,30 13325,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=3 Track1=1 F2=50 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,100 3750,30 12151,0 Envelope2=0,100 3522,32 19274,0 Filter=0 [NoiseBand] On=1 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=20 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/clappy_snare.ds000066400000000000000000000014611247673406200230560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Level=12 Filter=0 HighPass=0 Resonance=13 FilterEnv=0,36 3048,31 442000,100 442000,0 [Tone] On=1 Level=71 F1=300 F2=150 Droop=41 Phase=40 Envelope=0,100 1749,22 4997,0 [Noise] On=1 Level=49 Slope=33 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=0 Level=131 F1=200 Wave1=3 Track1=1 F2=6399 Wave2=3 Track2=1 Method=2 Param=66 Envelope1=0,100 1639,21 5215,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=1 Level=88 F=3000 dF=49 Envelope=0,34 0,94 570,68 1663,68 1916,84 2898,40 4054,26 7346,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=6 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/clean_low_key_kick.ds000066400000000000000000000014521247673406200242120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=2 Stretch=200 Level=2 Filter=1 HighPass=0 Resonance=5 FilterEnv=0,100 888,2 1650,6 2126,17 8598,83 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=200 F2=30 Droop=34 Phase=0 Envelope=0,99 654,47 1527,26 2126,16 2697,9 3490,5 4283,3 5267,2 9657,0 [Noise] On=1 Level=158 Slope=-40 Envelope=0,100 10,22 41,10 105,2 213,0 FixedSeq=0 [Overtones] On=1 Level=108 F1=440 Wave1=4 Track1=1 F2=55 Wave2=2 Track2=0 Method=1 Param=55 Envelope1=0,0 1396,2 2602,0 Envelope2=0,0 4886,2 7773,0 9930,0 11802,0 Filter=0 [NoiseBand] On=1 Level=164 F=50 dF=3 Envelope=0,98 286,41 603,20 1745,9 3744,3 7868,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=9 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/clean_soft_808.ds000066400000000000000000000017261247673406200231160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=1 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 1099,38 2748,21 5746,9 9194,2 15441,0 444000,100 444000,0 [Tone] On=1 Level=175 F1=120 F2=50 Droop=71 Phase=0 Envelope=0,100 1142,68 2284,53 3807,41 6092,31 9010,24 13579,16 25508,8 47463,2 69799,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=0 Level=158 F1=130 Wave1=0 Track1=1 F2=630 Wave2=0 Track2=0 Method=1 Param=47 Envelope1=0,100 444,47 1250,20 3363,3 6250,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=74 F=50 dF=13 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 21193,5 69672,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 68910,0 [Distortion] On=0 Clipping=0 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/clearly_snare.ds000066400000000000000000000013551247673406200232230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=200 Level=10 Filter=1 HighPass=1 Resonance=22 FilterEnv=0,11 1393,16 442000,100 443000,0 [Tone] On=1 Level=22 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 635,26 2221,8 6481,0 [Noise] On=1 Level=121 Slope=-5 Envelope=0,81 158,53 396,31 792,18 1425,13 2929,5 4180,0 FixedSeq=0 [Overtones] On=1 Level=26 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=129 F=6023 dF=77 Envelope=0,32 1190,17 2776,5 5810,0 [NoiseBand2] On=1 Level=22 F=421 dF=12 Envelope=0,64 1348,27 3547,0 [Distortion] On=1 Clipping=4 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/close_mic_sn.ds000066400000000000000000000014401247673406200230300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=1 Resonance=30 FilterEnv=0,5 5901,10 444000,100 444000,0 [Tone] On=1 Level=119 F1=200 F2=90 Droop=40 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=126 Slope=-50 Envelope=0,100 254,36 1174,11 6567,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=92 F=1500 dF=40 Envelope=0,100 508,20 1523,0 [NoiseBand2] On=1 Level=53 F=5000 dF=90 Envelope=0,100 571,35 1206,9 2411,0 [Distortion] On=1 Clipping=15 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/compression_does_it_808.ds000066400000000000000000000016301247673406200250420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 6446,9 14391,0 444000,100 444000,0 [Tone] On=1 Level=178 F1=120 F2=50 Droop=71 Phase=0 Envelope=0,100 4822,83 20178,62 38199,20 57362,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=0 Level=158 F1=130 Wave1=0 Track1=1 F2=630 Wave2=0 Track2=0 Method=1 Param=47 Envelope1=0,100 444,47 1250,20 3363,3 6250,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=74 F=50 dF=13 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 21193,5 69672,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 68910,0 [Distortion] On=1 Clipping=0 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/crusty_bump.ds000066400000000000000000000014731247673406200227550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,53 6446,9 14391,0 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=54 Phase=12 Envelope=0,100 1699,46 5697,13 14991,0 [Noise] On=1 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=0 Track1=1 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=109 F=80 dF=21 Envelope=0,50 200,29 750,20 1349,11 2299,7 4247,3 9444,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=4 Bits=2 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/crusty_snare.ds000066400000000000000000000014241247673406200231160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=2 Filter=1 HighPass=1 Resonance=32 FilterEnv=0,0 1396,20 5330,21 7995,18 442000,100 443000,0 [Tone] On=1 Level=67 F1=200 F2=50 Droop=48 Phase=10 Envelope=0,100 1150,13 6853,4 11548,0 [Noise] On=1 Level=119 Slope=-29 Envelope=0,97 0,36 615,36 1487,25 2284,14 2919,6 3609,0 FixedSeq=0 [Overtones] On=1 Level=18 F1=300 Wave1=0 Track1=1 F2=412 Wave2=0 Track2=1 Method=0 Param=60 Envelope1=0,100 615,18 11168,0 Envelope2=0,100 674,21 1745,0 Filter=0 [NoiseBand] On=1 Level=115 F=1250 dF=62 Envelope=0,63 888,36 1650,16 3300,4 6092,1 7741,0 [NoiseBand2] On=1 Level=119 F=10000 dF=90 Envelope=0,73 1269,16 3530,2 5750,0 [Distortion] On=1 Clipping=19 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/cymbal.ds000066400000000000000000000014301247673406200216410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=117 Slope=90 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=325 Wave1=0 Track1=0 F2=693 Wave2=0 Track2=0 Method=3 Param=100 Envelope1=0,100 538,50 1935,19 4664,13 9581,11 11897,0 Envelope2=0,100 16942,100 17196,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/decompression_snare.ds000066400000000000000000000013521247673406200244370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=7 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,32 442000,100 443000,0 [Tone] On=0 Level=22 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 635,26 2221,8 6481,0 [Noise] On=1 Level=102 Slope=3 Envelope=0,82 685,40 1362,47 1789,50 2914,56 5000,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 685,100 1967,66 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=129 F=200 dF=75 Envelope=0,80 1358,49 3566,57 5810,0 [NoiseBand2] On=1 Level=113 F=421 dF=37 Envelope=0,64 1348,27 3547,0 [Distortion] On=0 Clipping=4 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/deep_bauble_bd.ds000066400000000000000000000014551247673406200232750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=120 F2=45 Droop=82 Phase=10 Envelope=0,100 1049,71 2299,47 3998,29 5647,17 8595,7 22636,0 [Noise] On=1 Level=65 Slope=-30 Envelope=0,100 317,22 635,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=45 Wave1=1 Track1=0 F2=45 Wave2=1 Track2=0 Method=2 Param=40 Envelope1=0,100 3093,22 6821,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=50 dF=10 Envelope=0,100 750,20 6088,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/deep_tones.ds000066400000000000000000000013441247673406200225230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-1 Stretch=120 Level=3 Filter=1 HighPass=0 Resonance=4 FilterEnv=0,93 3658,84 442000,100 443000,0 [Tone] On=1 Level=36 F1=100 F2=155 Droop=42 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=149 Slope=1 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=1 Level=28 F1=100 Wave1=0 Track1=0 F2=100 Wave2=4 Track2=0 Method=0 Param=21 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=158 F=5000 dF=100 Envelope=0,0 0,98 507,43 1788,19 3486,0 [NoiseBand2] On=1 Level=135 F=4000 dF=70 Envelope=0,100 839,35 1900,8 4402,0 [Distortion] On=1 Clipping=0 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/difference_snare.ds000066400000000000000000000015771247673406200236700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=5 Filter=1 HighPass=0 Resonance=31 FilterEnv=0,77 15467,71 442000,100 442000,0 [Tone] On=1 Level=43 F1=908 F2=165 Droop=63 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 8328,0 13071,0 [Noise] On=1 Level=95 Slope=97 Envelope=0,92 1666,41 4521,14 8804,0 11897,0 FixedSeq=0 [Overtones] On=1 Level=74 F1=200 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=3 Param=11 Envelope1=0,100 1999,80 2792,42 4251,13 5235,0 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=19 F=5000 dF=26 Envelope=0,68 3046,49 4500,30 7852,0 11929,0 [NoiseBand2] On=1 Level=88 F=9076 dF=58 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6901,5 8090,0 [Distortion] On=1 Clipping=10 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/different_909_snare.ds000066400000000000000000000013661247673406200241410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=130 Level=6 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,11 750,11 442000,100 443000,0 [Tone] On=1 Level=173 F1=280 F2=115 Droop=29 Phase=20 Envelope=0,100 278,50 1071,17 2578,3 5347,0 [Noise] On=1 Level=104 Slope=-14 Envelope=0,100 819,39 1666,15 5097,0 FixedSeq=0 [Overtones] On=1 Level=62 F1=280 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 297,39 535,17 972,3 1699,0 Envelope2=0,100 745,11 2235,0 Filter=0 [NoiseBand] On=0 Level=115 F=4000 dF=93 Envelope=0,100 1210,41 2479,16 4164,0 [NoiseBand2] On=1 Level=102 F=7356 dF=83 Envelope=0,100 1210,41 2479,16 4164,0 [Distortion] On=1 Clipping=1 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/dirty_world_bd.ds000066400000000000000000000015031247673406200234020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=4 Filter=1 HighPass=1 Resonance=2 FilterEnv=0,0 8661,23 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=20 Droop=13 Phase=0 Envelope=0,25 697,83 1750,20 3135,57 5250,0 [Noise] On=1 Level=31 Slope=-77 Envelope=0,100 254,20 984,2 5647,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=20 Wave1=2 Track1=0 F2=50 Wave2=1 Track2=0 Method=1 Param=55 Envelope1=0,100 2549,70 4133,40 4766,23 6239,0 Envelope2=0,100 1000,20 3769,45 13547,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=14 F=3100 dF=40 Envelope=0,100 317,11 1301,2 6853,0 [Distortion] On=1 Clipping=15 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/dist_sub_kick.ds000066400000000000000000000013531247673406200232130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=181 F1=100 F2=35 Droop=42 Phase=120 Envelope=0,99 1862,50 4097,25 5959,20 6630,0 [Noise] On=1 Level=164 Slope=-62 Envelope=0,100 127,36 381,3 1192,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=876 Wave1=0 Track1=0 F2=1356 Wave2=0 Track2=0 Method=0 Param=54 Envelope1=0,100 1266,31 4470,26 10578,0 Envelope2=0,100 894,45 3278,30 10355,0 Filter=0 [NoiseBand] On=1 Level=161 F=100 dF=72 Envelope=0,98 888,6 3300,2 6980,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=20 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/dist_sub_kick_2.ds000066400000000000000000000014241247673406200234330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=2 Stretch=100.0 Level=2 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,0 2320,2 2598,0 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=20 Droop=62 Phase=120 Envelope=0,99 1862,50 4097,25 5959,20 6630,0 [Noise] On=1 Level=164 Slope=-92 Envelope=0,100 10,55 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=876 Wave1=0 Track1=0 F2=1356 Wave2=0 Track2=0 Method=0 Param=54 Envelope1=0,100 1266,31 4470,26 10578,0 Envelope2=0,100 894,45 3278,30 10355,0 Filter=0 [NoiseBand] On=1 Level=78 F=500 dF=57 Envelope=0,98 297,36 714,17 2142,5 6980,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=20 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/electro_dnb_kick.ds000066400000000000000000000015021247673406200236530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100.0 Level=9 Filter=1 HighPass=0 Resonance=33 FilterEnv=0,88 317,53 857,29 1904,10 4093,2 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=20 Droop=59 Phase=120 Envelope=0,99 654,47 1527,26 2875,11 4204,4 4937,2 9657,0 [Noise] On=0 Level=181 Slope=98 Envelope=0,100 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=1 Level=174 F1=50 Wave1=4 Track1=0 F2=50 Wave2=4 Track2=0 Method=0 Param=78 Envelope1=0,100 190,41 635,22 1266,12 1999,5 2855,2 4886,0 Envelope2=0,96 349,47 1269,19 3046,9 10355,0 Filter=0 [NoiseBand] On=0 Level=164 F=5000 dF=57 Envelope=0,98 127,38 381,17 1142,5 3680,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/electro_snare_layer.ds000066400000000000000000000014221247673406200244140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,7 5473,18 442000,100 442000,0 [Tone] On=1 Level=1 F1=65.406 F2=5632 Droop=49 Phase=0 Envelope=0,100 2126,20 5616,0 [Noise] On=0 Level=128 Slope=-10 Envelope=0,100 218121,100 218121,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=4 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 1174,18 4632,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=1 Level=128 F=122 dF=17 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=101 F=3100 dF=60 Envelope=0,100 3093,77 4500,0 [Distortion] On=1 Clipping=2 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/electronic_rim.ds000066400000000000000000000013351247673406200233740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=70 Level=0 Filter=1 HighPass=1 Resonance=59 FilterEnv=0,47 5147,37 6696,29 442000,100 443000,0 [Tone] On=1 Level=160 F1=500 F2=150 Droop=30 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=166 Slope=10 Envelope=0,0 0,98 507,43 1599,29 2349,0 FixedSeq=0 [Overtones] On=1 Level=123 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=3 Param=15 Envelope1=0,100 1726,23 3373,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=108 F=3800 dF=100 Envelope=0,100 596,38 1299,0 [NoiseBand2] On=0 Level=165 F=1000 dF=82 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=2 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/end_transmission.ds000066400000000000000000000016331247673406200237560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=73 FilterEnv=0,100 73764,24 143563,17 159426,23 161806,7 176083,22 178462,8 192739,9 203050,2 222880,8 241915,13 256986,3 442000,100 443000,0 [Tone] On=1 Level=98 F1=10000 F2=10000 Droop=0 Phase=-45 Envelope=0,100 53142,33 139597,16 239536,0 [Noise] On=1 Level=133 Slope=69 Envelope=0,100 819,31 10311,15 18772,8 33313,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=24 F=200 dF=50 Envelope=0,100 11897,19 23002,0 23002,22 42038,2 55522,17 65833,0 89628,21 108664,2 123734,11 135631,4 222086,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=49 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/every_909.ds000066400000000000000000000016701247673406200221330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-7 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,95 1269,47 2919,22 6092,5 11675,0 442000,100 442000,0 [Tone] On=1 Level=181 F1=300 F2=72 Droop=47 Phase=45 Envelope=0,91 3046,92 3934,48 10279,8 17132,0 [Noise] On=0 Level=109 Slope=-16 Envelope=0,39 400,17 1249,5 3426,1 12542,0 FixedSeq=1 [Overtones] On=0 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,54 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=0 [NoiseBand] On=0 Level=181 F=72 dF=5 Envelope=0,53 4569,26 11422,16 21066,5 31854,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 25001,0 [Distortion] On=0 Clipping=0 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/fatness.ds000066400000000000000000000014421247673406200220400ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=133 F1=120 F2=50 Droop=73 Phase=0 Envelope=0,100 2049,51 5647,21 11743,9 22386,0 [Noise] On=1 Level=51 Slope=-42 Envelope=0,100 278,14 595,4 793,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=350 Wave1=0 Track1=0 F2=312.3 Wave2=1 Track2=1 Method=2 Param=86 Envelope1=0,100 714,20 4997,6 10232,3 17132,1 22367,0 Envelope2=0,48 6425,17 15943,0 Filter=0 [NoiseBand] On=1 Level=36 F=130 dF=15 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=1 Level=16 F=10000 dF=15 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/fattie_bd.ds000066400000000000000000000014241247673406200223160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=2 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,89 5949,32 16419,6 444000,100 444000,0 [Tone] On=1 Level=181 F1=600 F2=34 Droop=60 Phase=65 Envelope=0,100 5250,30 13325,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=110 Wave1=3 Track1=1 F2=50 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,100 3750,30 12151,0 Envelope2=0,100 3522,32 19274,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=20 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/feel_me!.ds000066400000000000000000000017021247673406200220310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-12 Stretch=100 Level=8 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 6446,9 14391,0 444000,100 444000,0 [Tone] On=0 Level=148 F1=220 F2=220 Droop=71 Phase=12 Envelope=0,85 3046,85 3934,48 5838,17 8630,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=1 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,82 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=0 [NoiseBand] On=0 Level=74 F=50 dF=13 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [Distortion] On=0 Clipping=0 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/few_people_will_use_this_snare.ds000066400000000000000000000015351247673406200266470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=12 Stretch=100.0 Level=-6 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,0 16783,20 444000,100 444000,0 [Tone] On=0 Level=181 F1=100 F2=40 Droop=47 Phase=0 Envelope=0,100 508,49 3680,19 12310,7 33884,0 [Noise] On=1 Level=88 Slope=10 Envelope=0,100 3458,38 17132,0 FixedSeq=1 [Overtones] On=1 Level=134 F1=161 Wave1=4 Track1=0 F2=111 Wave2=4 Track2=0 Method=1 Param=82 Envelope1=0,100 1301,68 2919,45 6536,28 16688,0 Envelope2=0,100 1523,95 3204,81 10184,83 16688,0 Filter=0 [NoiseBand] On=1 Level=141 F=200 dF=73 Envelope=0,100 1301,68 2919,45 6536,28 16688,0 [NoiseBand2] On=1 Level=168 F=500 dF=61 Envelope=0,100 1301,68 2919,45 6536,28 16688,0 [Distortion] On=1 Clipping=1 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/flat_tire.ds000066400000000000000000000013341247673406200223460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=2000 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=153 F1=120 F2=100 Droop=44 Phase=-180 Envelope=0,99 79,17 174,0 [Noise] On=1 Level=133 Slope=38 Envelope=0,100 982,70 1583,25 4576,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1916,25 7500,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=132 F=9500 dF=48 Envelope=0,100 521,92 641,52 6596,41 11593,10 17239,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/fm.ds000066400000000000000000000012671247673406200210040ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=2000 Wave2=0 Track2=0 Filter=0 Method=1 Param=91 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/fried_food.ds000066400000000000000000000017571247673406200225060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-17 Stretch=100 Level=-9 Filter=0 HighPass=1 Resonance=53 FilterEnv=0,0 2031,23 6599,31 6853,60 10279,23 11548,44 13325,11 15609,15 19671,4 28300,0 49874,0 444000,100 444000,0 [Tone] On=1 Level=92 F1=880 F2=220 Droop=29 Phase=12 Envelope=0,85 3046,85 3934,48 10279,8 17132,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=1 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,54 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=1 [NoiseBand] On=1 Level=181 F=220 dF=0 Envelope=0,0 4315,11 4442,35 5330,14 20051,5 54189,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [Distortion] On=1 Clipping=32 Bits=3 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/funky_trashcan_snare.ds000066400000000000000000000015371247673406200246110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=17 FilterEnv=0,0 11675,5 444000,100 444000,0 [Tone] On=0 Level=65 F1=162 F2=130 Droop=0 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=61 Slope=-85 Envelope=0,100 4500,30 9000,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=160 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 1000,20 13198,0 Filter=0 [NoiseBand] On=1 Level=106 F=800 dF=68 Envelope=0,100 1999,80 2792,42 3426,17 4251,14 4886,5 5362,8 8122,0 [NoiseBand2] On=1 Level=78 F=800 dF=58 Envelope=0,100 1015,60 2475,34 4949,14 7392,5 9899,0 [Distortion] On=1 Clipping=2 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/fuzzy_sn.ds000066400000000000000000000014411247673406200222630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=34 FilterEnv=0,80 776,17 444000,100 444000,0 [Tone] On=1 Level=181 F1=300 F2=85 Droop=29 Phase=90 Envelope=0,100 2454,20 7506,0 [Noise] On=1 Level=98 Slope=-51 Envelope=0,100 500,20 3009,3 6825,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=6000 dF=75 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=47 F=8000 dF=74 Envelope=0,100 839,36 2185,13 7632,0 [Distortion] On=1 Clipping=15 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/gabbakick.ds000066400000000000000000000013271247673406200222750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100.0 Level=-4 Filter=0 HighPass=1 Resonance=66 FilterEnv=0,48 1190,12 4283,2 8090,2 442000,100 442000,0 [Tone] On=1 Level=181 F1=250 F2=80 Droop=28 Phase=0 Envelope=0,100 952,12 3093,2 7852,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=200 Wave1=0 Track1=0 F2=100 Wave2=0 Track2=0 Method=1 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=181 F=50 dF=10 Envelope=0,0 8566,3 22045,0 [NoiseBand2] On=0 Level=181 F=14000 dF=31 Envelope=0,100 1043,1 10504,0 [Distortion] On=1 Clipping=39 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/gimme_a_hard_tone.ds000066400000000000000000000014141247673406200240150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-7 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=71 Droop=39 Phase=12 Envelope=0,100 1699,46 5697,13 17739,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/gimmie_a_tone.ds000066400000000000000000000014121247673406200231660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=72 Droop=39 Phase=12 Envelope=0,100 1699,46 5697,13 17739,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hard_electro_brush_sn.ds000066400000000000000000000014141247673406200247320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=28 FilterEnv=0,3 2697,3 442000,100 442000,0 [Tone] On=1 Level=73 F1=500 F2=110 Droop=58 Phase=7643 Envelope=0,100 2142,16 10500,0 [Noise] On=1 Level=47 Slope=15 Envelope=0,100 2935,18 6028,0 FixedSeq=0 [Overtones] On=0 Level=55 F1=880 Wave1=0 Track1=0 F2=110 Wave2=3 Track2=0 Method=0 Param=20 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=1 Level=38 F=600 dF=68 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=65 F=3100 dF=90 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=0 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hard_electronic_snare.ds000066400000000000000000000013761247673406200247200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=2 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,4 3300,9 444000,100 444000,0 [Tone] On=1 Level=1 F1=600 F2=50 Droop=40 Phase=0 Envelope=0,100 5250,30 13325,0 [Noise] On=1 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=0 Track1=1 F2=50 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,100 3750,30 12151,0 Envelope2=0,100 3522,32 12786,0 Filter=0 [NoiseBand] On=1 Level=56 F=210 dF=60 Envelope=0,44 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hard_hittin.ds000066400000000000000000000013641247673406200226750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=121 Level=0 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,11 297,16 442000,100 443000,0 [Tone] On=1 Level=164 F1=300 F2=130 Droop=23 Phase=20 Envelope=0,100 278,50 1071,17 2578,3 4918,0 [Noise] On=1 Level=123 Slope=10 Envelope=0,100 819,39 1666,15 3874,0 FixedSeq=0 [Overtones] On=1 Level=62 F1=500 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 297,39 535,17 972,3 2458,0 Envelope2=0,100 745,11 2235,0 Filter=0 [NoiseBand] On=1 Level=118 F=6500 dF=76 Envelope=0,100 1210,41 2479,16 4164,0 [NoiseBand2] On=1 Level=36 F=5000 dF=54 Envelope=0,100 1210,41 2479,16 4164,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hardcore_a_bd.ds000066400000000000000000000015501247673406200231310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=41 FilterEnv=0,0 2665,4 4727,20 444000,100 444000,0 [Tone] On=1 Level=133 F1=440 F2=50 Droop=49 Phase=30 Envelope=0,100 4597,91 10500,0 [Noise] On=0 Level=92 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=54 F1=220 Wave1=2 Track1=0 F2=110 Wave2=0 Track2=0 Method=2 Param=91 Envelope1=0,100 1949,59 4497,24 8345,12 14941,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=0 Level=71 F=5000 dF=100 Envelope=0,100 1099,29 2099,7 4500,0 [NoiseBand2] On=0 Level=96 F=3100 dF=100 Envelope=0,100 200,35 450,15 1849,5 4997,0 [Distortion] On=1 Clipping=44 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hardcore_bd.ds000066400000000000000000000014461247673406200226350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=1 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,100 2502,62 6540,41 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=75 Droop=47 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=1 Level=128 Slope=-18 Envelope=0,100 760,32 2074,13 4671,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=106 F=200 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hardersnare.ds000066400000000000000000000014101247673406200226660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=150 Droop=15 Phase=0 Envelope=0,100 1199,46 3798,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 5996,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=2000 dF=86 Envelope=0,72 750,20 4947,0 [NoiseBand2] On=1 Level=98 F=3100 dF=89 Envelope=0,100 849,32 1649,13 3298,5 5846,0 [Distortion] On=1 Clipping=8 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/heady_mix_sn.ds000066400000000000000000000014561247673406200230510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,3 1799,8 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=123 F=5000 dF=63 Envelope=0,100 5250,30 10500,0 [NoiseBand2] On=1 Level=166 F=3100 dF=40 Envelope=0,100 300,65 800,39 1500,20 2349,8 3748,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/heavy.ds000066400000000000000000000013321247673406200215070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=128 F1=180 F2=40 Droop=43 Phase=10 Envelope=0,0 0,41 715,39 4228,21 22526,0 [Noise] On=0 Level=100 Slope=-68 Envelope=0,0 268,100 723,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=1 Level=11 F1=360 Wave1=1 Track1=0 F2=60 Wave2=2 Track2=0 Method=1 Param=46 Envelope1=0,100 1490,17 22367,0 Envelope2=0,100 3252,66 7077,0 Filter=0 [NoiseBand] On=0 Level=79 F=400 dF=34 Envelope=0,99 670,21 1788,4 5810,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=3 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/hed_chunk_snare.ds000066400000000000000000000015661247673406200235240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=2 Filter=1 HighPass=1 Resonance=31 FilterEnv=0,14 9518,20 442000,100 442000,0 [Tone] On=1 Level=69 F1=230 F2=230 Droop=0 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=139 Slope=-32 Envelope=0,68 3046,49 4500,30 9000,0 FixedSeq=1 [Overtones] On=1 Level=74 F1=200 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=2 Param=41 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=85 F=162 dF=75 Envelope=0,68 1396,83 3046,49 4500,30 9000,0 [NoiseBand2] On=1 Level=133 F=1600 dF=78 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6980,5 9994,0 [Distortion] On=1 Clipping=4 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/hi-pass.ds000066400000000000000000000013421247673406200217400ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=1 HighPass=1 FilterEnv=0,0 2309,7 3874,25 5513,54 8790,83 13260,99 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 19741,0 [Noise] On=1 Level=128 Slope=100 Envelope=0,100 1937,47 13409,55 18176,30 20560,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hi_pic.ds000066400000000000000000000014151247673406200216300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=130 Level=6 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,7 1299,11 442000,100 443000,0 [Tone] On=0 Level=164 F1=280 F2=130 Droop=23 Phase=20 Envelope=0,100 278,50 1071,17 2578,3 5347,0 [Noise] On=1 Level=104 Slope=12 Envelope=0,100 450,53 1349,29 2848,13 5347,0 FixedSeq=0 [Overtones] On=1 Level=62 F1=800 Wave1=2 Track1=0 F2=200 Wave2=4 Track2=1 Method=2 Param=88 Envelope1=0,100 450,53 1349,29 2848,13 5347,0 Envelope2=0,100 450,53 1349,29 2848,13 5347,0 Filter=0 [NoiseBand] On=1 Level=31 F=800 dF=19 Envelope=0,100 1210,41 2479,16 4164,0 [NoiseBand2] On=1 Level=59 F=800 dF=83 Envelope=0,100 1210,41 2479,16 4164,0 [Distortion] On=1 Clipping=10 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/hip-hop_fantasy_kick.ds000066400000000000000000000015121247673406200244650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=40 Droop=51 Phase=45 Envelope=0,100 1699,46 2792,28 4949,16 7614,7 10660,2 17739,0 [Noise] On=1 Level=19 Slope=-100 Envelope=0,100 1142,16 3046,6 7361,2 14340,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=20 F=700 dF=40 Envelope=0,76 750,20 2411,8 4822,2 7487,0 [NoiseBand2] On=1 Level=51 F=80 dF=14 Envelope=0,35 2919,17 6980,6 11675,2 26904,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hipster_joint_bd.ds000066400000000000000000000014161247673406200237240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=71 Phase=0 Envelope=0,100 1678,76 3927,26 6698,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hit_me_wooden_snare.ds000066400000000000000000000014341247673406200244060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-7 Stretch=100 Level=-1 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,0 1013,5 5394,6 7971,10 442000,100 443000,0 [Tone] On=1 Level=18 F1=120 F2=150 Droop=83 Phase=60 Envelope=0,100 714,24 1150,13 2459,6 4442,2 8883,0 [Noise] On=1 Level=158 Slope=-23 Envelope=0,63 654,38 2538,17 5394,0 FixedSeq=0 [Overtones] On=0 Level=84 F1=300 Wave1=1 Track1=1 F2=412 Wave2=0 Track2=1 Method=1 Param=35 Envelope1=0,39 615,18 2776,0 Envelope2=0,32 952,15 1824,8 3966,2 6861,0 Filter=0 [NoiseBand] On=1 Level=160 F=1254 dF=73 Envelope=0,63 888,36 1650,16 3300,4 4521,1 5790,0 [NoiseBand2] On=1 Level=119 F=9 dF=51 Envelope=0,63 888,36 1650,16 3173,7 4620,2 6980,0 [Distortion] On=1 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hitthosesubs.ds000066400000000000000000000013741247673406200231250ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=1 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=600 F2=45 Droop=46 Phase=0 Envelope=0,100 1750,20 16040,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/hot_morning_bass_drum.ds000066400000000000000000000015301247673406200247550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,0 13452,8 21193,1 444000,100 444000,0 [Tone] On=1 Level=148 F1=400 F2=50 Droop=41 Phase=0 Envelope=0,100 2538,26 6345,5 10500,0 [Noise] On=1 Level=36 Slope=-79 Envelope=0,100 400,17 1249,5 2792,0 FixedSeq=1 [Overtones] On=1 Level=158 F1=130 Wave1=0 Track1=1 F2=300 Wave2=0 Track2=0 Method=1 Param=47 Envelope1=0,100 444,47 1250,20 3363,3 6250,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=74 F=50 dF=13 Envelope=0,100 1396,42 2250,30 3553,15 5965,3 13960,0 [NoiseBand2] On=1 Level=65 F=120 dF=23 Envelope=0,100 635,44 2031,23 4442,13 7107,3 10533,0 [Distortion] On=0 Clipping=0 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/hot_snare.ds000066400000000000000000000013201247673406200223520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=159 F1=350 F2=174 Droop=69 Phase=45 Envelope=0,100 715,46 1788,17 5453,0 [Noise] On=1 Level=64 Slope=-5 Envelope=0,0 22,98 521,52 1043,21 2890,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=88 F=4000 dF=83 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/i_luv_u_fat_noise.ds000066400000000000000000000013461247673406200240710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=5 Filter=1 HighPass=1 Resonance=21 FilterEnv=0,0 348,3 442000,100 443000,0 [Tone] On=1 Level=170 F1=300 F2=50 Droop=94 Phase=0 Envelope=0,99 2534,94 4547,77 6046,53 8445,44 27083,0 [Noise] On=1 Level=109 Slope=85 Envelope=0,26 849,9 2249,0 4560,0 FixedSeq=0 [Overtones] On=1 Level=49 F1=400 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,58 2748,21 7196,5 13342,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=143 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=3 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/invisible_909_kick.ds000066400000000000000000000014271247673406200237660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=1 Filter=1 HighPass=0 Resonance=2 FilterEnv=0,89 1399,27 3426,12 5996,3 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=300 F2=43 Droop=51 Phase=50 Envelope=0,99 750,74 1499,49 2149,40 3048,31 4447,25 7046,19 11843,8 16890,0 [Noise] On=0 Level=16 Slope=-75 Envelope=0,100 250,22 450,11 650,4 1149,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=110 Wave1=0 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=55 Envelope1=0,0 3348,20 7445,0 Envelope2=0,0 7246,23 11802,0 Filter=0 [NoiseBand] On=0 Level=158 F=50 dF=4 Envelope=0,0 2099,14 6696,30 7868,0 [NoiseBand2] On=0 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=1 Clipping=3 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/it's_like_that_snare.ds000066400000000000000000000014151247673406200244570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=8 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,0 254,17 1047,33 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=150 Droop=15 Phase=0 Envelope=0,100 1199,46 3798,0 [Noise] On=1 Level=128 Slope=-79 Envelope=0,100 500,20 5996,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=12 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/just_the_bass_drum.ds000066400000000000000000000014561247673406200242660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=2 Filter=1 HighPass=0 Resonance=5 FilterEnv=0,96 1299,30 1999,14 3198,8 23785,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=500 F2=50 Droop=50 Phase=65 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=25 Wave1=0 Track1=1 F2=50 Wave2=4 Track2=0 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 2439,95 17489,89 19888,0 Filter=0 [NoiseBand] On=1 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/kneel_and_buzz.ds000066400000000000000000000013631247673406200233710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,5 38580,0 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=45 Droop=63 Phase=00 Envelope=0,100 5250,30 42260,0 [Noise] On=0 Level=30 Slope=10 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=0 Level=59 F1=200 Wave1=4 Track1=1 F2=500 Wave2=0 Track2=1 Method=1 Param=64 Envelope1=0,100 1713,48 2221,11 2974,8 11422,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=32 F=8000 dF=51 Envelope=0,100 286,1 1777,0 2982,0 [NoiseBand2] On=1 Level=181 F=45 dF=7 Envelope=0,100 508,50 1500,30 4061,14 8249,5 27666,2 42514,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/large_hall_bd.ds000066400000000000000000000016011247673406200231310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=1 Level=127 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=0 Level=110 F1=342 Wave1=0 Track1=1 F2=1 Wave2=4 Track2=1 Method=1 Param=100 Envelope1=0,85 1904,53 2221,0 4521,0 Envelope2=0,100 2935,74 7456,64 11184,56 11660,1 29585,0 Filter=0 [NoiseBand] On=1 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=30 Bits=2 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc/laughter_and_jellybeans_snare.ds000066400000000000000000000015771247673406200264430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=17 FilterEnv=0,0 11675,5 444000,100 444000,0 [Tone] On=1 Level=83 F1=162 F2=130 Droop=0 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=79 Slope=-29 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=160 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=37 F=400 dF=39 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [NoiseBand2] On=1 Level=78 F=800 dF=58 Envelope=0,100 1015,60 2475,34 4949,14 7487,7 12849,0 [Distortion] On=0 Clipping=13 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/light_snare.ds000066400000000000000000000013221247673406200226710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=16 Filter=1 HighPass=1 Resonance=32 FilterEnv=0,52 442000,100 443000,0 [Tone] On=1 Level=159 F1=400 F2=170 Droop=54 Phase=45 Envelope=0,100 715,46 1788,17 5453,0 [Noise] On=1 Level=64 Slope=-44 Envelope=0,0 22,98 521,52 1043,21 2890,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=88 F=4000 dF=83 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/lo-fi_bass_drum.ds000066400000000000000000000014751247673406200234500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=6 Filter=1 HighPass=0 Resonance=36 FilterEnv=0,19 7595,77 444000,100 444000,0 [Tone] On=1 Level=136 F1=1500 F2=120 Droop=77 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 2633,0 [Noise] On=0 Level=101 Slope=100 Envelope=0,14 857,34 2948,45 3148,8 6596,27 7695,5 11693,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=220 Wave1=1 Track1=1 F2=1200 Wave2=2 Track2=1 Method=1 Param=70 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=21 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/lo-fi_march.ds000066400000000000000000000014701247673406200225560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Teddy Riley pitched snare Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=14 FilterEnv=0,0 952,8 952,44 442000,100 442000,0 [Tone] On=1 Level=89 F1=214 F2=100 Droop=13 Phase=0 Envelope=0,100 834,89 1877,11 3308,5 3903,0 [Noise] On=1 Level=141 Slope=-55 Envelope=0,100 328,100 715,89 1341,37 2533,14 3397,9 5235,2 8328,0 FixedSeq=1 [Overtones] On=0 Level=134 F1=13000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=2 Param=100 Envelope1=0,100 1043,31 2533,9 6250,0 Envelope2=0,100 775,35 2354,9 5000,0 Filter=0 [NoiseBand] On=0 Level=81 F=3000 dF=40 Envelope=0,90 268,91 1251,16 5483,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=2 Bits=6 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/lo-fi_rim.ds000066400000000000000000000014441247673406200222540ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,19 444000,100 444000,0 [Tone] On=1 Level=137 F1=565 F2=120 Droop=40 Phase=0 Envelope=0,100 1750,20 3579,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,25 507,50 1283,62 1758,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=500 dF=70 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/loudness_sn.ds000066400000000000000000000013431247673406200227310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=120 Level=5 Filter=1 HighPass=1 Resonance=34 FilterEnv=0,2 6726,10 442000,100 443000,0 [Tone] On=1 Level=128 F1=330 F2=114 Droop=43 Phase=10 Envelope=0,0 0,41 715,39 3046,8 7868,0 [Noise] On=1 Level=100 Slope=21 Envelope=0,100 1142,39 1396,26 2284,13 4822,0 FixedSeq=0 [Overtones] On=0 Level=11 F1=360 Wave1=1 Track1=0 F2=60 Wave2=2 Track2=0 Method=1 Param=46 Envelope1=0,100 1490,17 22367,0 Envelope2=0,100 3252,66 7077,0 Filter=0 [NoiseBand] On=1 Level=85 F=2300 dF=71 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=128 F=1000 dF=82 Envelope=0,0 115,14 1039,11 1504,0 [Distortion] On=1 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/lovely_clean_bd.ds000066400000000000000000000015101247673406200235120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=4 Filter=0 HighPass=1 Resonance=5 FilterEnv=0,95 1399,50 4197,23 7246,11 12492,6 442000,100 442000,0 [Tone] On=1 Level=150 F1=110 F2=43 Droop=50 Phase=15 Envelope=0,100 1799,51 4048,23 6796,9 10500,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=0 Level=83 F1=110 Wave1=0 Track1=1 F2=110 Wave2=0 Track2=1 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=20 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/lower_electro_bd.ds000066400000000000000000000014451247673406200237120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=80 Level=0 Filter=1 HighPass=0 Resonance=40 FilterEnv=0,78 2181,32 442000,100 442000,0 [Tone] On=1 Level=172 F1=5633 F2=55 Droop=72 Phase=0 Envelope=0,100 1586,0 10500,0 [Noise] On=0 Level=128 Slope=-85 Envelope=0,100 555,21 1448,4 2439,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=1 Track1=0 F2=220 Wave2=3 Track2=1 Method=3 Param=30 Envelope1=0,100 952,26 1904,0 3750,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=146 F=122 dF=17 Envelope=0,100 11104,53 31727,26 81696,9 161013,0 [NoiseBand2] On=0 Level=101 F=5555 dF=60 Envelope=0,100 932,0 2578,0 [Distortion] On=1 Clipping=25 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/mack_bd.ds000066400000000000000000000014061247673406200217550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=46 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/manipulate_bd.ds000066400000000000000000000013761247673406200232070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=30 FilterEnv=0,0 1742,5 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=40 Phase=65 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=0 Track1=1 F2=50 Wave2=2 Track2=0 Method=1 Param=80 Envelope1=0,100 1250,20 5241,0 Envelope2=0,100 1583,81 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/many_frequencies.ds000066400000000000000000000015401247673406200237310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,11 9613,11 442000,100 442000,0 [Tone] On=1 Level=133 F1=160 F2=150 Droop=60 Phase=0 Envelope=0,100 2648,50 7096,20 14291,0 [Noise] On=1 Level=65 Slope=14 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=200 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=2 Param=41 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=119 F=232 dF=65 Envelope=0,100 650,61 2250,30 7445,9 15091,0 [NoiseBand2] On=1 Level=154 F=5000 dF=94 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6980,5 9994,0 [Distortion] On=1 Clipping=4 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/mello_bd.ds000066400000000000000000000013241247673406200221510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=2 Filter=0 HighPass=0 Resonance=6 FilterEnv=0,23 442000,100 443000,0 [Tone] On=1 Level=181 F1=180 F2=50 Droop=31 Phase=10 Envelope=0,0 0,96 715,39 2458,16 6481,0 [Noise] On=0 Level=100 Slope=70 Envelope=0,0 268,100 723,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=0 Level=146 F=400 dF=34 Envelope=0,99 670,21 1788,4 5810,0 [NoiseBand2] On=0 Level=158 F=3000 dF=89 Envelope=0,100 100,30 3547,0 [Distortion] On=0 Clipping=7 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/mind_ya_heds.ds000066400000000000000000000014301247673406200230150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=200 Level=1 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=2000 F2=100 Droop=42 Phase=0 Envelope=0,100 1745,14 5156,1 9121,0 13325,0 [Noise] On=1 Level=181 Slope=-90 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=119 F1=5000 Wave1=0 Track1=0 F2=4231 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,54 1210,11 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=133 F=300 dF=66 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=128 F=500 dF=81 Envelope=0,100 1500,20 4997,6 9994,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/missing_snare.ds000066400000000000000000000014121247673406200232330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-4 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,11 442000,100 442000,0 [Tone] On=1 Level=154 F1=800 F2=55 Droop=54 Phase=65 Envelope=0,100 5250,30 9597,0 14753,0 [Noise] On=1 Level=137 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=55 F1=660 Wave1=4 Track1=1 F2=440 Wave2=3 Track2=1 Method=2 Param=100 Envelope1=0,100 1110,15 8487,0 Envelope2=0,100 7932,9 14277,0 Filter=0 [NoiseBand] On=1 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=1 Level=128 F=3100 dF=50 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=8 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/missing_snare_2.ds000066400000000000000000000014111247673406200234530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-4 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,11 442000,100 442000,0 [Tone] On=1 Level=154 F1=800 F2=55 Droop=54 Phase=65 Envelope=0,100 5250,30 9597,0 14753,0 [Noise] On=1 Level=137 Slope=9 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=0 Level=82 F1=660 Wave1=4 Track1=1 F2=440 Wave2=3 Track2=1 Method=2 Param=100 Envelope1=0,100 1110,15 8487,0 Envelope2=0,100 7932,9 14277,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=70 Envelope=0,68 1983,23 6425,8 12453,0 [NoiseBand2] On=1 Level=128 F=3100 dF=30 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=8 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/more_basic_bd.ds000066400000000000000000000013551247673406200231500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=2 Filter=1 HighPass=0 Resonance=1 FilterEnv=0,85 2475,90 4220,29 442000,100 442000,0 [Tone] On=1 Level=163 F1=400 F2=67 Droop=37 Phase=110 Envelope=0,0 0,100 1904,100 2617,21 3490,0 [Noise] On=1 Level=128 Slope=-31 Envelope=0,53 1079,11 3458,0 FixedSeq=0 [Overtones] On=1 Level=29 F1=213 Wave1=3 Track1=0 F2=67 Wave2=0 Track2=1 Method=2 Param=88 Envelope1=0,100 1523,23 7500,0 Envelope2=0,100 2157,36 5171,51 6000,0 Filter=0 [NoiseBand] On=1 Level=111 F=3000 dF=94 Envelope=0,74 333,28 808,9 2459,3 4212,0 [NoiseBand2] On=1 Level=81 F=6000 dF=80 Envelope=0,48 1108,11 3721,0 [Distortion] On=1 Clipping=2 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/more_snap.ds000066400000000000000000000013421247673406200223570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=95 Level=8 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,8 442000,100 443000,0 [Tone] On=1 Level=127 F1=350 F2=160 Droop=36 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=149 Slope=36 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=113 F=3800 dF=51 Envelope=0,100 596,38 2801,0 [NoiseBand2] On=1 Level=181 F=7000 dF=69 Envelope=0,100 150,53 450,31 1199,11 2498,3 4097,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/muted_snare.ds000066400000000000000000000014141247673406200227020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=40 FilterEnv=0,43 6060,39 442000,100 442000,0 [Tone] On=1 Level=156 F1=234 F2=112 Droop=49 Phase=0 Envelope=0,100 2126,20 5616,0 [Noise] On=1 Level=128 Slope=-30 Envelope=0,100 2887,24 5425,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=4 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 1174,18 4632,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=1 Level=128 F=122 dF=17 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=101 F=3100 dF=60 Envelope=0,100 3093,77 4500,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/n_hi.ds000066400000000000000000000012701247673406200213110ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=100 Envelope=0,100 4768,41 9982,0 [Overtones] On=0 Level=128 F1=440 Wave1=3 Track1=0 F2=440 Wave2=4 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/n_mid.ds000066400000000000000000000012661247673406200214670ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=1 Envelope=0,100 4768,41 9982,0 [Overtones] On=0 Level=128 F1=440 Wave1=3 Track1=0 F2=440 Wave2=4 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/neo808.ds000066400000000000000000000013211247673406200214120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-1 Stretch=75 Level=16 Filter=1 HighPass=1 Resonance=22 FilterEnv=0,39 442000,100 443000,0 [Tone] On=1 Level=59 F1=400 F2=130 Droop=86 Phase=45 Envelope=0,100 238,26 1904,8 4997,2 9518,0 [Noise] On=1 Level=41 Slope=23 Envelope=0,0 22,98 521,52 1043,21 2890,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=88 F=4000 dF=83 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/neo808_2.ds000066400000000000000000000013411247673406200216350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-1 Stretch=75 Level=16 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,26 2142,48 4045,83 442000,100 443000,0 [Tone] On=1 Level=98 F1=400 F2=130 Droop=86 Phase=45 Envelope=0,100 238,26 1904,8 4997,2 9518,0 [Noise] On=1 Level=55 Slope=23 Envelope=0,0 22,98 521,52 1043,21 2890,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=88 F=4000 dF=83 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/noise.ds000066400000000000000000000014501247673406200215110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,100 633,14 3658,47 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=1 Level=128 Slope=-18 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=160 F=200 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc/noise_calling_kick.ds000066400000000000000000000014431247673406200242050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=1 Stretch=100 Level=1 Filter=0 HighPass=0 Resonance=2 FilterEnv=0,56 1399,27 3426,12 5996,3 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=200 F2=60 Droop=41 Phase=180 Envelope=0,99 300,62 949,37 2099,20 3748,4 5796,0 8994,0 [Noise] On=1 Level=109 Slope=-75 Envelope=0,100 250,22 450,11 650,4 1149,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=110 Wave1=0 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=55 Envelope1=0,0 3348,20 7445,0 Envelope2=0,0 7246,23 11802,0 Filter=0 [NoiseBand] On=1 Level=154 F=50 dF=4 Envelope=0,99 750,74 1149,42 2099,20 3748,4 5147,4 7445,2 9644,0 [NoiseBand2] On=0 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=1 Clipping=11 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/noise_clip.ds000066400000000000000000000013311247673406200225160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=9 Filter=1 HighPass=1 Resonance=6 FilterEnv=0,23 442000,100 443000,0 [Tone] On=1 Level=84 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 715,39 2458,16 6481,0 [Noise] On=1 Level=100 Slope=70 Envelope=0,0 268,100 723,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=146 F=400 dF=34 Envelope=0,99 670,21 1788,4 5810,0 [NoiseBand2] On=1 Level=158 F=3000 dF=89 Envelope=0,100 100,30 3547,0 [Distortion] On=1 Clipping=7 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/nosie_calling_kick_2.ds000066400000000000000000000014431247673406200244260ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=1 Stretch=100 Level=1 Filter=0 HighPass=0 Resonance=2 FilterEnv=0,56 1399,27 3426,12 5996,3 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=200 F2=60 Droop=41 Phase=180 Envelope=0,99 300,62 949,37 2099,20 3748,4 5796,0 8994,0 [Noise] On=1 Level=109 Slope=-75 Envelope=0,100 250,22 450,11 650,4 1149,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=110 Wave1=0 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=55 Envelope1=0,0 3348,20 7445,0 Envelope2=0,0 7246,23 11802,0 Filter=0 [NoiseBand] On=0 Level=154 F=50 dF=4 Envelope=0,99 750,74 1149,42 2099,20 3748,4 5147,4 7445,2 9644,0 [NoiseBand2] On=0 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=1 Clipping=11 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/odd_snare.ds000066400000000000000000000014411247673406200223320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=100.0 Level=-1 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,0 952,19 5394,6 7971,10 442000,100 443000,0 [Tone] On=1 Level=18 F1=120 F2=150 Droop=83 Phase=60 Envelope=0,100 714,24 1150,13 2459,6 4442,2 8883,0 [Noise] On=1 Level=113 Slope=62 Envelope=0,63 654,38 2538,17 5394,0 FixedSeq=0 [Overtones] On=1 Level=84 F1=300 Wave1=1 Track1=1 F2=412 Wave2=0 Track2=1 Method=1 Param=35 Envelope1=0,39 615,18 2776,0 Envelope2=0,32 952,15 1824,8 3966,2 6861,0 Filter=0 [NoiseBand] On=1 Level=160 F=3000 dF=73 Envelope=0,63 888,36 1650,16 3300,4 4521,1 5790,0 [NoiseBand2] On=1 Level=119 F=1200 dF=51 Envelope=0,63 888,36 1650,16 3173,7 4620,2 6980,0 [Distortion] On=1 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/original_tone_snare.ds000066400000000000000000000013471247673406200244220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=7 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,10 1552,26 442000,100 443000,0 [Tone] On=0 Level=22 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 635,26 2221,8 6481,0 [Noise] On=1 Level=28 Slope=-100 Envelope=0,32 317,14 713,6 1362,2 1789,1 2914,0 FixedSeq=0 [Overtones] On=1 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=129 F=6023 dF=34 Envelope=0,32 1190,17 2776,5 5810,0 [NoiseBand2] On=1 Level=22 F=421 dF=12 Envelope=0,64 1348,27 3547,0 [Distortion] On=1 Clipping=4 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/ot_12.ds000066400000000000000000000012661247673406200213250ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=128 F1=440 Wave1=1 Track1=0 F2=440 Wave2=2 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/ot_34.ds000066400000000000000000000012661247673406200213310ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=128 F1=440 Wave1=3 Track1=0 F2=440 Wave2=4 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/ot_sine.ds000066400000000000000000000012671247673406200220420ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=2000 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/overdriver_kick.ds000066400000000000000000000014201247673406200235610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-3 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=54 Droop=47 Phase=65 Envelope=0,100 1699,46 5697,13 8445,5 11693,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=119 F1=315 Wave1=3 Track1=0 F2=630 Wave2=3 Track2=1 Method=2 Param=90 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=56 F=890 dF=0 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=74 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/pleasure_factory_kick.ds000066400000000000000000000015021247673406200247420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-2 Stretch=100.0 Level=10 Filter=0 HighPass=0 Resonance=33 FilterEnv=0,88 317,53 857,29 1904,10 4093,2 442000,100 443000,0 [Tone] On=1 Level=181 F1=150 F2=50 Droop=46 Phase=120 Envelope=0,99 654,47 1527,26 2875,11 4204,4 4937,2 9657,0 [Noise] On=0 Level=181 Slope=-29 Envelope=0,100 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=1 Level=174 F1=50 Wave1=4 Track1=0 F2=67.5 Wave2=2 Track2=0 Method=0 Param=60 Envelope1=0,100 190,41 635,22 1266,12 1999,5 2855,2 4886,0 Envelope2=0,96 349,47 1269,19 3046,9 10355,0 Filter=0 [NoiseBand] On=1 Level=104 F=5000 dF=57 Envelope=0,59 50,38 200,18 450,7 1249,0 [NoiseBand2] On=1 Level=168 F=62 dF=5 Envelope=0,10 1699,14 3148,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/pop_1_off_snare.ds000066400000000000000000000015761247673406200234450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=80 Level=0 Filter=1 HighPass=1 Resonance=17 FilterEnv=0,9 12881,14 444000,100 444000,0 [Tone] On=1 Level=65 F1=130 F2=130 Droop=0 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=160 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=37 F=400 dF=39 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [NoiseBand2] On=1 Level=78 F=800 dF=58 Envelope=0,100 1015,60 2475,34 4949,14 7487,7 12849,0 [Distortion] On=1 Clipping=13 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/power_out.ds000066400000000000000000000015161247673406200224220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=-30 Stretch=30 Level=9 Filter=0 HighPass=0 Resonance=87 FilterEnv=0,100 4188,85 442000,100 443000,0 [Tone] On=1 Level=147 F1=220 F2=100 Droop=73 Phase=0 Envelope=0,100 5203,89 9296,93 13960,69 28951,95 28951,13 58631,79 127700,0 [Noise] On=1 Level=67 Slope=3 Envelope=0,100 5552,5 23002,12 58694,10 79317,9 161013,0 FixedSeq=0 [Overtones] On=0 Level=143 F1=500 Wave1=4 Track1=1 F2=600 Wave2=0 Track2=1 Method=0 Param=13 Envelope1=0,0 2235,51 11993,0 Envelope2=0,100 1117,19 3799,0 Filter=0 [NoiseBand] On=0 Level=128 F=500 dF=52 Envelope=0,100 19290,47 44417,0 [NoiseBand2] On=0 Level=131 F=500 dF=100 Envelope=0,100 21320,54 58123,0 [Distortion] On=1 Clipping=30 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/psychoacoutic_bd.ds000066400000000000000000000015431247673406200237210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=1 Level=181 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=0 Level=110 F1=100 Wave1=0 Track1=1 F2=5 Wave2=4 Track2=1 Method=2 Param=70 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=6 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/punchy_clean_kick.ds000066400000000000000000000013531247673406200240470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=181 F1=200 F2=35 Droop=24 Phase=120 Envelope=0,99 1862,50 4097,25 5959,20 6630,0 [Noise] On=1 Level=164 Slope=-62 Envelope=0,100 127,36 381,3 1192,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=876 Wave1=0 Track1=0 F2=1356 Wave2=0 Track2=0 Method=0 Param=54 Envelope1=0,100 1266,31 4470,26 10578,0 Envelope2=0,100 894,45 3278,30 10355,0 Filter=0 [NoiseBand] On=1 Level=127 F=100 dF=57 Envelope=0,98 888,6 3300,2 6980,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=20 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/puppy_kick.ds000066400000000000000000000014371247673406200225570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=11 Filter=0 HighPass=0 Resonance=2 FilterEnv=0,56 1399,27 3426,12 5996,3 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=400 F2=60 Droop=74 Phase=5 Envelope=0,99 450,62 1099,30 2199,9 3748,4 5796,0 8994,0 [Noise] On=0 Level=109 Slope=-75 Envelope=0,100 250,22 450,11 650,4 1149,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=0 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=55 Envelope1=0,0 3448,7 7445,0 Envelope2=0,0 4497,6 11802,0 Filter=0 [NoiseBand] On=0 Level=154 F=50 dF=4 Envelope=0,99 750,74 1149,42 2099,20 3748,4 5147,4 7445,2 9644,0 [NoiseBand2] On=0 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=1 Clipping=3 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/q'ey_bass_drum.ds000066400000000000000000000016711247673406200233050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-7 Stretch=100 Level=-2 Filter=1 HighPass=0 Resonance=40 FilterEnv=0,95 1269,47 2919,22 6092,5 11675,0 442000,100 442000,0 [Tone] On=1 Level=160 F1=600 F2=72 Droop=34 Phase=12 Envelope=0,91 3046,92 3934,48 10279,8 17132,0 [Noise] On=1 Level=109 Slope=-16 Envelope=0,39 400,17 1249,5 3426,1 12542,0 FixedSeq=1 [Overtones] On=0 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,54 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=0 [NoiseBand] On=1 Level=181 F=72 dF=5 Envelope=0,53 4569,26 11422,16 21066,5 31854,0 [NoiseBand2] On=1 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 25001,0 [Distortion] On=0 Clipping=0 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/q_kick_2.ds000066400000000000000000000014671247673406200220660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=2 Stretch=100 Level=5 Filter=1 HighPass=0 Resonance=47 FilterEnv=0,73 500,45 1399,26 2399,15 4647,2 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=50 Droop=66 Phase=0 Envelope=0,91 700,64 1799,34 3198,12 10294,0 [Noise] On=0 Level=181 Slope=-29 Envelope=0,100 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=1 Level=125 F1=110 Wave1=1 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=49 Envelope1=0,23 2049,1 4886,0 Envelope2=0,0 0,44 550,22 1449,13 3248,2 5896,0 9930,0 11802,0 Filter=0 [NoiseBand] On=0 Level=164 F=5000 dF=57 Envelope=0,98 286,41 603,20 1745,9 3744,3 7868,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/questoin_kick.ds000066400000000000000000000013701247673406200232450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-5 Filter=1 HighPass=1 Resonance=8 FilterEnv=0,0 550,14 1699,12 5996,3 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=400 F2=60 Droop=74 Phase=5 Envelope=0,99 250,58 800,38 2498,15 5247,3 8994,0 [Noise] On=0 Level=109 Slope=-75 Envelope=0,100 250,22 450,11 650,4 1149,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=0 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=55 Envelope1=0,0 3448,7 7445,0 Envelope2=0,0 4497,6 11802,0 Filter=0 [NoiseBand] On=1 Level=154 F=50 dF=3 Envelope=0,0 3748,4 8545,8 9644,0 [NoiseBand2] On=0 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=1 Clipping=38 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc/r+b_fantasy_kick.ds000066400000000000000000000015201247673406200235760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,0 35915,4 444000,100 444000,0 [Tone] On=1 Level=181 F1=300 F2=40 Droop=51 Phase=45 Envelope=0,100 1699,46 2792,28 4949,16 7614,7 10660,2 17739,0 [Noise] On=1 Level=19 Slope=-100 Envelope=0,100 1142,16 3046,6 7361,2 14340,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=22 F=700 dF=40 Envelope=0,76 750,20 2411,8 4822,2 7487,0 [NoiseBand2] On=1 Level=76 F=80 dF=14 Envelope=0,35 2919,17 6980,6 11675,2 36295,0 [Distortion] On=1 Clipping=3 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/reverb_please_snare.ds000066400000000000000000000016311247673406200244030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,71 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=1000 F2=509 Droop=60 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=342 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=2 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/rimmy_noise.ds000066400000000000000000000014421247673406200227270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Teddy Riley hollow snare Tuning=0.00 Stretch=80 Level=5 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=129 F1=375 F2=375 Droop=11 Phase=90 Envelope=0,100 1341,0 [Noise] On=1 Level=123 Slope=36 Envelope=0,100 819,98 1862,34 3576,17 9163,7 11174,0 FixedSeq=0 [Overtones] On=0 Level=134 F1=13000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=2 Param=100 Envelope1=0,100 1043,31 2533,9 6250,0 Envelope2=0,100 775,35 2354,9 5000,0 Filter=0 [NoiseBand] On=1 Level=104 F=901 dF=81 Envelope=0,100 894,91 1937,30 2831,14 6034,5 8865,1 12440,0 [NoiseBand2] On=1 Level=28 F=20 dF=89 Envelope=0,37 6704,35 11025,8 14526,0 [Distortion] On=1 Clipping=0 Bits=6 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/rimshot_1.ds000066400000000000000000000013311247673406200222770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=26 FilterEnv=0,18 6318,38 442000,100 443000,0 [Tone] On=1 Level=133 F1=350 F2=174 Droop=84 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=166 Slope=40 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=1 Level=123 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=3 Param=15 Envelope1=0,100 1726,23 3373,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=108 F=3800 dF=100 Envelope=0,100 596,38 2801,0 [NoiseBand2] On=1 Level=164 F=1000 dF=82 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/rimshot_2.ds000066400000000000000000000013351247673406200223040ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=26 FilterEnv=0,18 6318,38 442000,100 443000,0 [Tone] On=1 Level=133 F1=350 F2=174 Droop=95 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=100 Slope=40 Envelope=0,0 0,98 507,43 952,9 2617,2 5949,0 FixedSeq=0 [Overtones] On=1 Level=123 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=3 Param=15 Envelope1=0,100 1726,23 3373,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=144 F=3800 dF=100 Envelope=0,100 596,38 2801,0 [NoiseBand2] On=1 Level=181 F=1000 dF=3 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/ring_fray_kick.ds000066400000000000000000000014451247673406200233610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=1 Stretch=100.0 Level=-4 Filter=1 HighPass=1 Resonance=14 FilterEnv=0,0 2320,2 2598,0 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=50 Droop=62 Phase=120 Envelope=0,99 654,47 1527,26 2875,11 4204,4 4937,2 9657,0 [Noise] On=1 Level=181 Slope=98 Envelope=0,100 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=1 Level=13 F1=110 Wave1=4 Track1=0 F2=780 Wave2=4 Track2=0 Method=0 Param=78 Envelope1=0,100 190,41 635,22 1266,12 1999,5 2855,2 4886,0 Envelope2=0,92 159,8 10355,0 Filter=0 [NoiseBand] On=1 Level=164 F=5000 dF=57 Envelope=0,98 127,38 381,17 1142,5 3680,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=20 Bits=3 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/ring_mod_drone_bd.ds000066400000000000000000000014571247673406200240350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=69 FilterEnv=0,0 267297,2 442000,100 442000,0 [Tone] On=1 Level=1 F1=880 F2=55 Droop=74 Phase=00 Envelope=0,100 65040,36 180842,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=435 Wave1=1 Track1=1 F2=224 Wave2=1 Track2=1 Method=2 Param=50 Envelope1=0,100 11897,56 43624,27 101525,11 186394,0 Envelope2=0,32 70592,33 194326,0 Filter=0 [NoiseBand] On=0 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=0 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc/rm.ds000066400000000000000000000012671247673406200210200ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1000 F2=100 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=2000 Wave2=0 Track2=0 Filter=0 Method=2 Param=91 Envelope1=0,0 6108,0 8343,89 13781,90 13781,0 Envelope2=0,100 5140,95 7673,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/rubber_'82.ds000066400000000000000000000015211247673406200222340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=6 Filter=1 HighPass=1 Resonance=32 FilterEnv=0,10 9844,77 22986,39 442000,100 443000,0 [Tone] On=1 Level=156 F1=200 F2=50 Droop=84 Phase=130 Envelope=0,99 104,85 137,30 313,23 633,0 [Noise] On=0 Level=119 Slope=100 Envelope=0,0 0,98 635,53 2459,25 6028,10 10311,5 16498,1 26095,0 FixedSeq=0 [Overtones] On=0 Level=166 F1=200 Wave1=0 Track1=0 F2=745 Wave2=2 Track2=0 Method=2 Param=100 Envelope1=0,100 2199,80 5047,56 9144,39 19788,19 23036,0 Envelope2=0,100 2349,59 7395,20 22236,0 Filter=0 [NoiseBand] On=0 Level=67 F=20000 dF=52 Envelope=0,0 7,100 1788,56 3331,30 6742,13 10628,5 16181,0 [NoiseBand2] On=1 Level=181 F=59 dF=3 Envelope=0,100 200,53 5147,11 13442,4 22086,0 [Distortion] On=1 Clipping=26 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/rubbery_deep_house_kick.ds000066400000000000000000000015121247673406200252460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-2 Stretch=100.0 Level=9 Filter=1 HighPass=0 Resonance=33 FilterEnv=0,88 317,53 857,29 1904,10 4093,2 442000,100 443000,0 [Tone] On=1 Level=181 F1=150 F2=20 Droop=46 Phase=120 Envelope=0,99 654,47 1527,26 2875,11 4204,4 4937,2 9657,0 [Noise] On=0 Level=181 Slope=-29 Envelope=0,100 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=1 Level=174 F1=50 Wave1=4 Track1=0 F2=55 Wave2=2 Track2=0 Method=0 Param=60 Envelope1=0,100 190,41 635,22 1266,12 1999,5 2855,2 4886,0 Envelope2=0,96 349,47 1269,19 3046,9 10355,0 Filter=0 [NoiseBand] On=0 Level=164 F=5000 dF=57 Envelope=0,98 286,41 603,20 1745,9 3744,3 7868,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/serious_bd.ds000066400000000000000000000013651247673406200225370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=0 HighPass=0 Resonance=34 FilterEnv=0,55 14691,50 442000,100 443000,0 [Tone] On=1 Level=181 F1=200 F2=50 Droop=39 Phase=110 Envelope=0,0 89,95 899,38 4247,15 21737,0 [Noise] On=0 Level=146 Slope=-75 Envelope=0,0 0,100 4797,3 6296,0 FixedSeq=0 [Overtones] On=0 Level=115 F1=437 Wave1=0 Track1=0 F2=611 Wave2=0 Track2=0 Method=3 Param=8 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/short_909.ds000066400000000000000000000014441247673406200221370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,19 444000,100 444000,0 [Tone] On=1 Level=137 F1=565 F2=120 Droop=40 Phase=0 Envelope=0,100 1750,20 3579,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,25 507,50 1283,62 1758,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=500 dF=70 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/simon's_snare.ds000066400000000000000000000014221247673406200231420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-5 Stretch=120 Level=14 Filter=1 HighPass=0 Resonance=11 FilterEnv=0,86 14691,50 442000,100 443000,0 [Tone] On=1 Level=37 F1=400 F2=200 Droop=28 Phase=110 Envelope=0,0 0,100 1904,100 2617,21 3649,0 [Noise] On=1 Level=117 Slope=100 Envelope=0,0 32,97 539,31 1269,11 1840,4 2403,0 FixedSeq=1 [Overtones] On=0 Level=115 F1=437 Wave1=0 Track1=0 F2=800 Wave2=0 Track2=0 Method=3 Param=8 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=1 Level=39 F=5000 dF=55 Envelope=0,93 855,49 2074,28 3563,10 5305,4 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=11 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/simple-h.ds000066400000000000000000000012641247673406200221150ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=0 Level=153 F1=170 F2=170 Droop=0 Phase=0 Envelope=0,100 1200,16 3375,0 [Noise] On=1 Level=82 Slope=100 Envelope=0,100 900,18 2175,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=136 F=3000 dF=28 Envelope=0,100 19800,100 19950,0 [NoiseBand2] On=0 Level=128 F=1000 dF=16 Envelope=0,0 20550,0 20700,100 43200,100 43350,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/simple-k.ds000066400000000000000000000012601247673406200221140ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=153 F1=180 F2=40 Droop=32 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=53 Slope=3 Envelope=0,100 150,13 900,0 [Overtones] On=1 Level=72 F1=360 Wave1=0 Track1=1 F2=120 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,100 4725,24 9975,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=0 Level=136 F=3000 dF=28 Envelope=0,100 19800,100 19950,0 [NoiseBand2] On=0 Level=128 F=1000 dF=16 Envelope=0,0 20550,0 20700,100 43200,100 43350,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/simple_click_bd.ds000066400000000000000000000014301247673406200234750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 1904,42 14515,37 444000,100 444000,0 [Tone] On=1 Level=181 F1=400 F2=60 Droop=47 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=158 F=40 dF=8 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=3 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/skiwlz_snare.ds000066400000000000000000000015761247673406200231200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-7 Stretch=75 Level=7 Filter=1 HighPass=1 Resonance=36 FilterEnv=0,11 9613,11 442000,100 442000,0 [Tone] On=1 Level=94 F1=300 F2=150 Droop=38 Phase=0 Envelope=0,100 1649,47 3198,24 5996,12 10294,0 [Noise] On=1 Level=121 Slope=66 Envelope=0,100 1849,57 4097,26 6346,8 9000,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=200 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=2 Param=41 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=141 F=6000 dF=64 Envelope=0,100 650,61 2250,30 4197,13 7146,5 11243,0 [NoiseBand2] On=1 Level=104 F=5000 dF=48 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6980,5 9994,0 [Distortion] On=1 Clipping=9 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/slepper_n_the_wilderness.ds000066400000000000000000000015451247673406200254670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-7 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 6446,9 14391,0 444000,100 444000,0 [Tone] On=1 Level=148 F1=800 F2=35 Droop=43 Phase=12 Envelope=0,100 984,49 2221,26 3966,11 8312,0 [Noise] On=1 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=1 Level=158 F1=130 Wave1=0 Track1=1 F2=630 Wave2=0 Track2=0 Method=1 Param=47 Envelope1=0,100 444,47 1250,20 3363,3 6250,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=18 F=342 dF=51 Envelope=0,50 200,29 750,20 1349,11 2299,7 4247,3 9444,0 [NoiseBand2] On=1 Level=39 F=334 dF=49 Envelope=0,33 456,21 1269,11 2657,5 4521,3 10172,0 [Distortion] On=1 Clipping=20 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/sloppy_electric.ds000066400000000000000000000013731247673406200236000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=3 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,5 926,15 442000,100 442000,0 [Tone] On=1 Level=181 F1=100 F2=30 Droop=21 Phase=00 Envelope=0,100 457,64 954,36 1510,21 2094,13 7110,0 [Noise] On=0 Level=30 Slope=10 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=59 F1=200 Wave1=4 Track1=1 F2=500 Wave2=0 Track2=1 Method=1 Param=64 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=127 F=6000 dF=84 Envelope=0,100 1066,59 2170,32 2906,16 3959,11 5241,0 [NoiseBand2] On=1 Level=181 F=50 dF=5 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc/smooth_rim.ds000066400000000000000000000014471247673406200225620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,0 901,40 444000,100 444000,0 [Tone] On=1 Level=64 F1=500 F2=120 Droop=50 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=137 Slope=8 Envelope=0,100 1333,85 2627,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=4 Track1=1 F2=630 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,100 1250,20 2487,0 Envelope2=0,100 228,70 508,43 952,25 1675,8 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/snappy_809.ds000066400000000000000000000013301247673406200223030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,29 3649,44 442000,100 443000,0 [Tone] On=1 Level=159 F1=500 F2=174 Droop=42 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=149 Slope=53 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=113 F=3800 dF=100 Envelope=0,100 596,38 2801,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/softsnare.ds000066400000000000000000000013741247673406200224050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=150 Droop=15 Phase=0 Envelope=0,100 1199,46 3798,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 5996,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/sounding_kick.ds000066400000000000000000000015021247673406200232210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=13 FilterEnv=0,36 3048,31 442000,100 442000,0 [Tone] On=1 Level=141 F1=500 F2=25 Droop=35 Phase=40 Envelope=0,100 1749,22 4997,0 [Noise] On=0 Level=85 Slope=92 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=0 Level=131 F1=200 Wave1=3 Track1=1 F2=6399 Wave2=3 Track2=1 Method=2 Param=66 Envelope1=0,100 1639,21 5215,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=1 Level=25 F=600 dF=49 Envelope=0,34 206,68 570,68 1663,68 1916,84 2898,40 3798,84 3832,50 4054,26 7346,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=11 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/sounds_like_a_low_tom.ds000066400000000000000000000015031247673406200247520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=75 Level=6 Filter=0 HighPass=1 Resonance=33 FilterEnv=0,0 1713,4 3426,12 5552,35 8598,83 10184,1 442000,100 443000,0 [Tone] On=1 Level=76 F1=200 F2=65 Droop=53 Phase=180 Envelope=0,99 750,74 1499,49 2149,40 3048,31 4447,25 7046,19 11843,8 16890,0 [Noise] On=1 Level=39 Slope=-40 Envelope=0,100 10,22 41,10 105,2 213,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=440 Wave1=1 Track1=1 F2=55 Wave2=2 Track2=0 Method=1 Param=55 Envelope1=0,0 1396,2 2602,0 Envelope2=0,0 4886,2 7773,0 9930,0 11802,0 Filter=0 [NoiseBand] On=1 Level=82 F=120 dF=42 Envelope=0,98 150,32 286,20 603,13 999,5 1649,2 3348,1 7868,0 [NoiseBand2] On=1 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=1 Clipping=16 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/special_man_bass_drum.ds000066400000000000000000000015271247673406200247130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=9 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,0 13452,8 21193,1 444000,100 444000,0 [Tone] On=1 Level=148 F1=700 F2=43 Droop=59 Phase=0 Envelope=0,100 2538,26 6345,5 10500,0 [Noise] On=1 Level=36 Slope=-79 Envelope=0,100 400,17 1249,5 2792,0 FixedSeq=1 [Overtones] On=1 Level=113 F1=80 Wave1=0 Track1=1 F2=300 Wave2=0 Track2=0 Method=1 Param=47 Envelope1=0,100 444,47 1250,20 3363,3 6250,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=74 F=50 dF=13 Envelope=0,100 1396,42 2250,30 3553,15 5965,3 13960,0 [NoiseBand2] On=1 Level=65 F=120 dF=23 Envelope=0,100 635,44 2031,23 4442,13 7107,3 10533,0 [Distortion] On=1 Clipping=0 Bits=5 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc/splatter.ds000066400000000000000000000013431247673406200222330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=120 Level=3 Filter=0 HighPass=1 Resonance=4 FilterEnv=0,8 65,15 442000,100 443000,0 [Tone] On=0 Level=128 F1=180 F2=40 Droop=43 Phase=10 Envelope=0,0 0,41 715,39 4228,21 22526,0 [Noise] On=1 Level=100 Slope=81 Envelope=0,0 268,100 723,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=11 F1=360 Wave1=1 Track1=0 F2=60 Wave2=2 Track2=0 Method=1 Param=46 Envelope1=0,100 1490,17 22367,0 Envelope2=0,100 3252,66 7077,0 Filter=0 [NoiseBand] On=0 Level=61 F=385 dF=31 Envelope=0,63 670,21 1788,4 5810,0 [NoiseBand2] On=1 Level=128 F=1000 dF=82 Envelope=0,0 115,14 1039,11 1504,0 [Distortion] On=1 Clipping=28 Bits=0 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/sticky_q_kick.ds000066400000000000000000000014741247673406200232310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=2 Stretch=200 Level=2 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,0 888,2 1650,6 2126,17 8598,83 10184,1 442000,100 443000,0 [Tone] On=1 Level=181 F1=10000 F2=30 Droop=75 Phase=0 Envelope=0,99 654,47 1527,26 2126,16 2697,9 3490,5 4283,3 5267,2 9657,0 [Noise] On=0 Level=181 Slope=-29 Envelope=0,100 30,32 85,23 135,16 245,8 381,3 1192,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=110 Wave1=4 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=49 Envelope1=0,0 2253,6 4886,0 Envelope2=0,0 1967,4 9359,53 9930,0 11802,0 Filter=0 [NoiseBand] On=0 Level=164 F=5000 dF=57 Envelope=0,98 286,41 603,20 1745,9 3744,3 7868,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/stiffy_snare.ds000066400000000000000000000013671247673406200230770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=32 F1=160 F2=150 Droop=12 Phase=120 Envelope=0,99 1015,32 2316,9 4949,1 6630,0 [Noise] On=1 Level=164 Slope=5 Envelope=0,100 656,58 2335,41 3198,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=876 Wave1=0 Track1=0 F2=1356 Wave2=0 Track2=0 Method=0 Param=54 Envelope1=0,100 1266,31 4470,26 10578,0 Envelope2=0,100 894,45 3278,30 10355,0 Filter=0 [NoiseBand] On=1 Level=161 F=100 dF=35 Envelope=0,98 1174,5 3649,0 10578,0 [NoiseBand2] On=1 Level=74 F=500 dF=31 Envelope=0,100 127,35 603,16 2728,2 5108,0 [Distortion] On=1 Clipping=0 Bits=3 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/sweet_tight_snare.ds000066400000000000000000000013771247673406200241220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=92 F1=600 F2=100 Droop=30 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=146 Slope=10 Envelope=0,100 500,20 1694,2 2597,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/tchak_snare.ds000066400000000000000000000014121247673406200226540ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,11 6092,5 442000,100 442000,0 [Tone] On=1 Level=156 F1=5633 F2=100 Droop=49 Phase=0 Envelope=0,100 2126,20 5616,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 2887,24 5425,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=4 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 1174,18 4632,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=1 Level=146 F=122 dF=17 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=101 F=3100 dF=60 Envelope=0,100 1079,11 4500,0 [Distortion] On=1 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/terror_n_yr_hood_snare.ds000066400000000000000000000013641247673406200251450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=9 Filter=0 HighPass=0 Resonance=6 FilterEnv=0,23 442000,100 443000,0 [Tone] On=1 Level=22 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 635,26 2221,8 6481,0 [Noise] On=0 Level=100 Slope=70 Envelope=0,0 268,100 723,86 723,26 1348,19 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=1 Level=63 F=400 dF=34 Envelope=0,99 670,80 670,21 1788,4 5810,0 [NoiseBand2] On=1 Level=158 F=3000 dF=89 Envelope=0,64 793,52 1348,27 3547,0 [Distortion] On=1 Clipping=7 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/test.ds000066400000000000000000000014571247673406200213620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1203,0 1425,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,0 2565,0 3009,100 3769,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,0 1219,0 1219,100 2597,0 2597,0 Envelope2=0,0 1251,0 1488,100 2581,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=40 Envelope=0,0 3800,0 3800,98 4180,80 4370,0 [NoiseBand2] On=1 Level=128 F=3100 dF=40 Envelope=0,0 4386,0 4481,83 4925,97 4925,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/think_bd.ds000066400000000000000000000013731247673406200221620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=9 Filter=1 HighPass=1 Resonance=6 FilterEnv=0,5 926,15 442000,100 442000,0 [Tone] On=1 Level=108 F1=100 F2=70 Droop=85 Phase=00 Envelope=0,100 457,64 954,36 1510,21 2094,13 5152,0 [Noise] On=1 Level=30 Slope=10 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=45 F1=200 Wave1=0 Track1=1 F2=50 Wave2=0 Track2=0 Method=1 Param=18 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=127 F=6000 dF=84 Envelope=0,100 1066,59 2170,32 2906,16 3959,11 5241,0 [NoiseBand2] On=1 Level=121 F=50 dF=5 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=17 Bits=4 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc/think_sn_1.ds000066400000000000000000000013601247673406200224310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=6 FilterEnv=0,5 926,15 442000,100 442000,0 [Tone] On=1 Level=100 F1=300 F2=70 Droop=6 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=41 Slope=10 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=127 F=6000 dF=84 Envelope=0,100 1066,59 2170,32 2906,16 3959,11 5241,0 [NoiseBand2] On=1 Level=76 F=200 dF=30 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/think_sn_2.ds000066400000000000000000000013601247673406200224320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=6 FilterEnv=0,5 926,15 442000,100 442000,0 [Tone] On=1 Level=108 F1=300 F2=70 Droop=6 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=30 Slope=10 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=156 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=127 F=6000 dF=84 Envelope=0,100 1066,59 2170,32 2906,16 3959,11 5241,0 [NoiseBand2] On=1 Level=76 F=200 dF=30 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/this_snare_spells_electronic.ds000066400000000000000000000015521247673406200263270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=-1 Filter=0 HighPass=1 Resonance=31 FilterEnv=0,14 9518,20 442000,100 442000,0 [Tone] On=1 Level=51 F1=230 F2=116 Droop=60 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=113 Slope=97 Envelope=0,92 4500,30 11897,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=200 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=2 Param=41 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=30 F=5000 dF=46 Envelope=0,68 3046,49 4500,30 11929,0 [NoiseBand2] On=0 Level=133 F=1600 dF=78 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6980,5 9994,0 [Distortion] On=0 Clipping=4 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/tomita_clip.ds000066400000000000000000000014171247673406200227030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,5 926,15 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=40 Droop=65 Phase=00 Envelope=0,100 571,59 1237,36 1999,19 3109,10 5965,5 12437,0 [Noise] On=0 Level=30 Slope=10 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=59 F1=200 Wave1=4 Track1=1 F2=500 Wave2=0 Track2=1 Method=1 Param=64 Envelope1=0,100 1713,48 2221,11 2974,8 11422,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=32 F=8000 dF=51 Envelope=0,100 286,1 1777,0 2982,0 [NoiseBand2] On=1 Level=181 F=50 dF=7 Envelope=0,100 349,49 1142,19 2602,7 5076,3 10565,2 14214,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc/tone.ds000066400000000000000000000012501247673406200213370ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/tone_deg.ds000066400000000000000000000012511247673406200221570ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1000 F2=1000 Droop=0 Phase=0 Envelope=0,100 1862,51 18623,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=0 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc/tone_snare.ds000066400000000000000000000014301247673406200225270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=7 FilterEnv=0,6 1699,14 2948,25 4297,41 5647,57 442000,100 443000,0 [Tone] On=1 Level=119 F1=450 F2=230 Droop=27 Phase=-45 Envelope=0,100 760,87 1937,18 4991,0 12142,0 [Noise] On=1 Level=150 Slope=-5 Envelope=0,100 521,24 2384,11 5661,3 5810,0 FixedSeq=0 [Overtones] On=1 Level=162 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=3 Param=4 Envelope1=0,100 1949,39 6596,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=154 F=500 dF=78 Envelope=0,20 745,96 1490,36 3203,12 8194,11 9461,5 11025,0 [NoiseBand2] On=1 Level=166 F=700 dF=44 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/transient_snare.ds000066400000000000000000000013561247673406200236000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-1 Stretch=300 Level=0 Filter=1 HighPass=1 Resonance=11 FilterEnv=0,0 0,19 301,38 3927,8 442000,100 443000,0 [Tone] On=0 Level=36 F1=100 F2=155 Droop=42 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=150 Slope=75 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=28 F1=100 Wave1=0 Track1=0 F2=100 Wave2=4 Track2=0 Method=0 Param=21 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=37 F=2310 dF=100 Envelope=0,0 0,98 507,43 1788,19 3486,0 [NoiseBand2] On=1 Level=181 F=11 dF=100 Envelope=0,100 839,35 1900,8 4402,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/trashyovertones.ds000066400000000000000000000015171247673406200236570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=11 FilterEnv=0,18 444000,100 444000,0 [Tone] On=1 Level=133 F1=160 F2=140 Droop=55 Phase=30 Envelope=0,100 3448,27 10500,0 [Noise] On=1 Level=166 Slope=-42 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=174 F1=200 Wave1=0 Track1=0 F2=11 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 11543,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=84 Envelope=0,100 2099,58 5447,36 11343,0 [NoiseBand2] On=1 Level=158 F=3100 dF=94 Envelope=0,100 750,47 2199,20 5047,5 10993,0 [Distortion] On=1 Clipping=6 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/type_snare.ds000066400000000000000000000014451247673406200225510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,0 635,9 444000,100 444000,0 [Tone] On=1 Level=128 F1=250 F2=250 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=152 Slope=77 Envelope=0,100 1824,26 3728,9 7218,0 FixedSeq=1 [Overtones] On=1 Level=45 F1=700 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=2 Param=52 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=152 F=1200 dF=61 Envelope=0,100 750,20 6663,0 [NoiseBand2] On=1 Level=128 F=3100 dF=40 Envelope=0,100 555,33 1500,20 3728,7 6821,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/ultra_electro_bd.ds000066400000000000000000000014471247673406200237130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=-3 Filter=1 HighPass=0 Resonance=7 FilterEnv=0,100 1172,9 1916,9 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=1 Level=128 Slope=-18 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=160 F=200 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/usgae_bd.ds000066400000000000000000000014311247673406200221440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=-3 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,81 538,17 1678,3 444000,100 444000,0 [Tone] On=1 Level=180 F1=500 F2=30 Droop=29 Phase=90 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=57 F1=30 Wave1=4 Track1=1 F2=300 Wave2=4 Track2=0 Method=1 Param=47 Envelope1=0,100 1188,17 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=11 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/verby_soundin_808.ds000066400000000000000000000016701247673406200236650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=9 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 6446,9 14391,0 444000,100 444000,0 [Tone] On=1 Level=148 F1=120 F2=50 Droop=71 Phase=12 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=0 Level=158 F1=130 Wave1=0 Track1=1 F2=630 Wave2=0 Track2=0 Method=1 Param=47 Envelope1=0,100 444,47 1250,20 3363,3 6250,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=74 F=50 dF=13 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 21193,5 69672,0 [NoiseBand2] On=1 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 68910,0 [Distortion] On=1 Clipping=0 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/very_basic_snare.ds000066400000000000000000000013441247673406200237140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,29 3649,44 442000,100 443000,0 [Tone] On=1 Level=123 F1=300 F2=180 Droop=42 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=149 Slope=14 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=158 F=5000 dF=100 Envelope=0,0 0,98 507,43 1788,19 3486,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 839,35 2502,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/verylong.ds000066400000000000000000000021211247673406200222350ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 14899,35 43206,19 373956,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,0 17878,12 17878,71 29797,38 61084,25 92372,4 186233,2 248807,4 271155,15 290524,24 294993,73 311382,27 344159,20 344159,54 357568,10 375446,17 414182,0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=1 Param=85 Envelope1=0,0 159416,68 326280,0 Envelope2=0,0 140047,0 385875,77 429081,0 [NoiseBand] On=1 Level=128 F=630 dF=50 Envelope=0,0 40226,0 56615,25 68534,62 89392,41 107270,84 125149,67 134088,27 184743,0 184743,41 207091,0 320321,0 320321,46 330750,0 394814,0 394814,35 414182,0 [NoiseBand2] On=1 Level=128 F=3150 dF=50 Envelope=0,0 71514,0 86412,16 101311,28 126639,13 143027,3 227949,0 227949,29 232419,51 257747,60 280095,54 311382,38 336709,21 363527,8 396304,12 432061,31 438020,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/warm_deep_house_kick.ds000066400000000000000000000014411247673406200245430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=1 Stretch=100 Level=10 Filter=1 HighPass=0 Resonance=42 FilterEnv=0,97 3426,12 5996,15 8598,3 9444,0 10184,1 442000,100 443000,0 [Tone] On=1 Level=131 F1=200 F2=30 Droop=41 Phase=180 Envelope=0,99 750,74 1499,49 2149,40 3048,31 4447,25 7046,19 11843,8 16890,0 [Noise] On=1 Level=16 Slope=-75 Envelope=0,100 250,22 450,11 650,4 1149,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=0 Track1=1 F2=55 Wave2=2 Track2=0 Method=0 Param=55 Envelope1=0,0 3348,20 7445,0 Envelope2=0,0 7246,23 11802,0 Filter=0 [NoiseBand] On=1 Level=158 F=50 dF=4 Envelope=0,0 2099,14 6696,30 7868,0 [NoiseBand2] On=0 Level=45 F=200 dF=66 Envelope=0,100 100,30 476,8 3712,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/warm_digi_808_click.ds000066400000000000000000000014721247673406200241060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=12 Filter=0 HighPass=0 Resonance=79 FilterEnv=0,98 6425,53 9042,86 11580,50 15149,61 20860,18 37913,0 442000,100 442000,0 [Tone] On=1 Level=73 F1=700 F2=47 Droop=78 Phase=7643 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=0 Level=55 F1=880 Wave1=0 Track1=0 F2=110 Wave2=3 Track2=0 Method=0 Param=20 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=0 Level=38 F=55 dF=8 Envelope=0,100 9042,35 36882,0 [NoiseBand2] On=0 Level=20 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=0 Clipping=32 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc/whoa_bd.ds000066400000000000000000000014261247673406200220020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=800 F2=30 Droop=69 Phase=0 Envelope=0,100 1428,44 5869,16 17608,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=32 F1=500 Wave1=0 Track1=1 F2=100 Wave2=0 Track2=0 Method=3 Param=14 Envelope1=0,35 1666,9 6187,1 16022,0 Envelope2=0,100 1000,20 18005,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=26 F=200 dF=61 Envelope=0,100 635,9 8249,0 [Distortion] On=1 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/wobble_wobble.ds000066400000000000000000000014531247673406200232030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=200 F2=36 Droop=60 Phase=12 Envelope=0,100 2299,63 5896,29 12792,11 26143,3 40483,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=30 Wave1=0 Track1=0 F2=40 Wave2=2 Track2=0 Method=0 Param=20 Envelope1=0,74 2665,37 7995,18 37691,0 Envelope2=0,100 5330,23 12818,5 35153,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/wobbly_thumb_bd.ds000066400000000000000000000015001247673406200235320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=5 Filter=1 HighPass=0 Resonance=54 FilterEnv=0,100 397,33 1031,11 12691,0 442000,100 442000,0 [Tone] On=1 Level=128 F1=300 F2=50 Droop=65 Phase=0 Envelope=0,100 1031,59 2617,42 4759,32 8328,20 13722,8 28554,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=172 F1=54 Wave1=0 Track1=0 F2=25 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 2697,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=40 Envelope=0,2 8963,1 19274,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc/yet_another_electric_bass_drum.ds000066400000000000000000000014341247673406200266300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=0 FilterEnv=0,74 444000,100 444000,0 [Tone] On=1 Level=181 F1=100 F2=40 Droop=47 Phase=0 Envelope=0,100 508,49 3680,19 12310,7 33884,0 [Noise] On=0 Level=181 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=134 F1=440 Wave1=4 Track1=0 F2=220 Wave2=4 Track2=0 Method=1 Param=82 Envelope1=0,100 635,52 1523,31 3680,6 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=15 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc/yr_808_hummer.ds000066400000000000000000000013641247673406200230060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=200 Level=4 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,3 442000,100 443000,0 [Tone] On=1 Level=157 F1=470 F2=50 Droop=69 Phase=17 Envelope=0,100 3728,43 8883,16 15070,11 24826,4 41879,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1937,80 3501,53 5066,32 6481,19 10131,4 19890,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc/zoom#4.ds000066400000000000000000000013061247673406200215070ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=20.0 Stretch=6800.0 Filter=0 HighPass=0 FilterEnv=0,100 11681,0 340610,0 340610,65 442000,100 442000,0 [Tone] On=1 Level=128 F1=90 F2=10 Droop=90 Phase=360 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 1000,10 3000,0 [Overtones] On=1 Level=181 F1=200 Wave1=4 Track1=1 F2=125 Wave2=2 Track2=1 Filter=1 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=125 dF=100 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=18 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/000077500000000000000000000000001247673406200210545ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_bass/a_day_in_the_noise.ds000066400000000000000000000014721247673406200252100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=0 Resonance=79 FilterEnv=0,98 6425,53 9042,86 11580,50 15149,61 20860,18 37913,0 442000,100 442000,0 [Tone] On=1 Level=73 F1=500 F2=110 Droop=48 Phase=7643 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=0 Level=55 F1=880 Wave1=0 Track1=0 F2=110 Wave2=3 Track2=0 Method=0 Param=20 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=1 Level=38 F=55 dF=8 Envelope=0,100 9042,35 36882,0 [NoiseBand2] On=0 Level=20 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=32 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/bumble_bass.ds000066400000000000000000000014251247673406200236640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,0 6345,2 12929,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=5632 F2=65.406 Droop=75 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=137 F1=65.406 Wave1=4 Track1=1 F2=130.813 Wave2=3 Track2=0 Method=2 Param=60 Envelope1=0,100 3048,26 11643,0 Envelope2=0,100 5235,80 11543,0 Filter=1 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/depth_bass_drum.ds000066400000000000000000000014401247673406200245460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=12 Filter=0 HighPass=1 Resonance=55 FilterEnv=0,2 442000,100 442000,0 [Tone] On=1 Level=99 F1=440 F2=50 Droop=56 Phase=65 Envelope=0,100 5996,25 14741,0 22886,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=56 F1=110 Wave1=0 Track1=1 F2=110 Wave2=2 Track2=0 Method=2 Param=87 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/dirty_a.ds000066400000000000000000000014311247673406200230360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-4 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,89 5949,32 16419,6 444000,100 444000,0 [Tone] On=1 Level=181 F1=8000 F2=55 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=8 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/filter_idea_bd.ds000066400000000000000000000014531247673406200243230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=4 Filter=1 HighPass=0 Resonance=8 FilterEnv=0,100 1650,62 4442,33 10026,16 21320,8 34011,5 59138,0 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=45 Droop=76 Phase=00 Envelope=0,100 2031,53 3046,36 6345,21 14721,13 32996,7 55204,0 [Noise] On=1 Level=30 Slope=-94 Envelope=0,11 43307,2 90183,0 FixedSeq=0 [Overtones] On=1 Level=34 F1=500 Wave1=4 Track1=1 F2=500 Wave2=4 Track2=1 Method=1 Param=64 Envelope1=0,39 59487,0 Envelope2=0,100 79713,28 94228,0 Filter=0 [NoiseBand] On=1 Level=32 F=400 dF=40 Envelope=0,100 714,13 4500,0 4500,0 [NoiseBand2] On=0 Level=181 F=45 dF=7 Envelope=0,100 508,50 1500,30 4061,14 8249,5 27666,2 42514,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/jarre_bass_drum.ds000066400000000000000000000015001247673406200245420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=12 Filter=0 HighPass=1 Resonance=5 FilterEnv=0,95 1399,50 4197,23 7246,11 12492,6 442000,100 442000,0 [Tone] On=1 Level=99 F1=110 F2=50 Droop=76 Phase=65 Envelope=0,100 5996,25 14741,0 22886,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=56 F1=110 Wave1=0 Track1=1 F2=110 Wave2=2 Track2=1 Method=1 Param=87 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/jungle_laser.ds000066400000000000000000000014631247673406200240620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-18 Filter=1 HighPass=0 Resonance=4 FilterEnv=0,100 12691,0 442000,100 442000,0 [Tone] On=1 Level=73 F1=220 F2=55 Droop=81 Phase=00 Envelope=0,100 68212,35 136424,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=220 Wave1=2 Track1=0 F2=5.5 Wave2=0 Track2=0 Method=1 Param=80 Envelope1=0,100 11897,56 43624,27 101525,11 186394,0 Envelope2=0,32 70592,33 194326,0 Filter=0 [NoiseBand] On=0 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=0 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=1 Clipping=37 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/low_end_hum.ds000066400000000000000000000014211247673406200237020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=0 Resonance=9 FilterEnv=0,87 2300,2 17767,0 442000,100 442000,0 [Tone] On=1 Level=28 F1=700 F2=20 Droop=18 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=55 F1=95 Wave1=0 Track1=0 F2=800 Wave2=3 Track2=1 Method=1 Param=50 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=1 Level=92 F=45 dF=8 Envelope=0,100 2250,30 36882,0 [NoiseBand2] On=0 Level=20 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=17 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/melodictone.ds000066400000000000000000000015331247673406200237100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=11 FilterEnv=0,80 444000,100 444000,0 [Tone] On=1 Level=133 F1=440 F2=440 Droop=55 Phase=30 Envelope=0,100 4597,91 10500,0 [Noise] On=0 Level=92 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=174 F1=220 Wave1=0 Track1=0 F2=110 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 1949,59 4497,24 8345,12 14941,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=0 Level=71 F=5000 dF=100 Envelope=0,100 1099,29 2099,7 4500,0 [NoiseBand2] On=0 Level=96 F=3100 dF=100 Envelope=0,100 200,35 450,15 1849,5 4997,0 [Distortion] On=0 Clipping=6 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/metal_bass.ds000066400000000000000000000014301247673406200235140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,0 6345,2 12929,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=65.406 F2=65.406 Droop=15 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=137 F1=65.406 Wave1=1 Track1=0 F2=130.813 Wave2=0 Track2=0 Method=1 Param=90 Envelope1=0,100 3048,26 11643,0 Envelope2=0,100 5235,80 11543,0 Filter=1 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=12 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/more_bass.ds000066400000000000000000000015101247673406200233530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=1 Level=181 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=56 Slope=22 Envelope=0,71 586,27 5996,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=110 Wave1=0 Track1=1 F2=220 Wave2=1 Track2=0 Method=1 Param=20 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=3000 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=41 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=27 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/more_bass_2.ds000066400000000000000000000015101247673406200235740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=1 Level=181 F1=880 F2=55 Droop=100 Phase=0 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=56 Slope=22 Envelope=0,71 586,27 5996,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=110 Wave1=0 Track1=0 F2=220 Wave2=1 Track2=1 Method=1 Param=20 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=3000 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=41 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=27 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/rubber.ds000066400000000000000000000014461247673406200226720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=40 FilterEnv=0,100 1110,20 2221,6 12532,0 442000,100 442000,0 [Tone] On=0 Level=128 F1=5632 F2=65.406 Droop=75 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=137 F1=65.406 Wave1=4 Track1=1 F2=130.813 Wave2=0 Track2=0 Method=2 Param=60 Envelope1=0,100 4124,41 14118,8 28237,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=0 Level=128 F=2332 dF=7 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=155 F=3100 dF=10 Envelope=0,100 3093,77 4500,0 [Distortion] On=0 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/smooth_bass.ds000066400000000000000000000014131247673406200237240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=20 FilterEnv=0,0 37041,3 444000,100 444000,0 [Tone] On=1 Level=1 F1=2000 F2=50 Droop=70 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=0 Track1=1 F2=50 Wave2=2 Track2=0 Method=1 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 13325,37 39420,0 Filter=0 [NoiseBand] On=0 Level=56 F=210 dF=60 Envelope=0,44 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_bass/solid.ds000066400000000000000000000015351247673406200225220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=-3 Filter=0 HighPass=1 Resonance=73 FilterEnv=0,98 4838,23 19036,14 444000,100 444000,0 [Tone] On=1 Level=181 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 22526,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=100 Wave1=0 Track1=1 F2=5 Wave2=4 Track2=1 Method=2 Param=70 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=1 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=15 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/synthbass.ds000066400000000000000000000015421247673406200234240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=53 FilterEnv=0,78 6896,13 444000,100 444000,0 [Tone] On=1 Level=30 F1=440 F2=440 Droop=55 Phase=30 Envelope=0,100 4597,91 10500,0 [Noise] On=0 Level=92 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=133 F1=220 Wave1=4 Track1=0 F2=110 Wave2=4 Track2=0 Method=2 Param=61 Envelope1=0,100 1949,59 4497,24 8345,12 14941,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=0 Level=71 F=5000 dF=100 Envelope=0,100 1099,29 2099,7 4500,0 [NoiseBand2] On=0 Level=96 F=3100 dF=100 Envelope=0,100 200,35 450,15 1849,5 4997,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_bass/the_funk.ds000066400000000000000000000014711247673406200232120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=3 Filter=1 HighPass=0 Resonance=79 FilterEnv=0,98 6425,53 9042,86 11580,50 15149,61 20860,18 37913,0 442000,100 442000,0 [Tone] On=0 Level=73 F1=700 F2=20 Droop=18 Phase=7643 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=0 Level=55 F1=880 Wave1=0 Track1=0 F2=110 Wave2=3 Track2=0 Method=3 Param=20 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=1 Level=92 F=55 dF=8 Envelope=0,100 9042,35 36882,0 [NoiseBand2] On=0 Level=20 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=32 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_bass/warm_bass.ds000066400000000000000000000014161247673406200233640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=20 FilterEnv=0,0 37041,3 444000,100 444000,0 [Tone] On=1 Level=163 F1=2000 F2=50 Droop=70 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=880 Wave1=0 Track1=1 F2=110 Wave2=2 Track2=0 Method=2 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 13325,37 39420,0 Filter=0 [NoiseBand] On=0 Level=56 F=210 dF=60 Envelope=0,44 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/000077500000000000000000000000001247673406200212265ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_claps/big_beat_clap.ds000066400000000000000000000015661247673406200243210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=80 Level=0 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,21 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=100 Slope=-40 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 2935,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=108 F=2000 dF=72 Envelope=0,99 104,38 432,18 440,100 521,30 879,14 894,100 1028,26 1333,9 1333,98 2309,27 3490,6 4362,0 5631,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=21 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/bright_clap.ds000066400000000000000000000021731247673406200240370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,23 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=76 Slope=46 Envelope=0,100 500,20 586,97 728,84 808,19 1140,35 1172,99 1425,86 1536,18 1900,41 1900,98 2264,72 2344,21 2644,32 2708,92 2850,65 3832,26 5305,17 8297,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=80 F=2000 dF=62 Envelope=0,100 396,20 649,97 808,85 871,14 1172,36 1235,98 1409,77 1647,14 1900,35 1995,93 2217,65 2359,12 2644,32 2708,92 3119,59 4529,11 7648,0 [NoiseBand2] On=1 Level=139 F=4000 dF=81 Envelope=0,100 428,16 507,98 728,76 808,30 950,22 1140,35 1283,95 1393,74 1615,14 1869,35 2059,98 2185,65 2344,13 2613,35 2834,96 3135,38 3626,17 7775,0 [Distortion] On=0 Clipping=1 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_claps/clap.ds000066400000000000000000000020001247673406200224650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=70 Level=0 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,10 3880,2 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=128 Slope=-20 Envelope=0,100 500,20 586,97 728,84 808,19 1140,35 1172,99 1425,86 1536,18 1900,41 1900,98 2264,72 2344,21 2644,32 2708,92 3373,10 4735,2 7522,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=2000 dF=56 Envelope=0,100 396,20 649,97 808,85 871,14 1172,36 1235,98 1409,77 1647,14 1900,35 1995,93 2217,65 2359,12 2644,32 2708,92 3373,10 5273,2 7506,0 [NoiseBand2] On=1 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/clap2.ds000066400000000000000000000014361247673406200225630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=93 FilterEnv=0,81 6730,100 444000,100 444000,0 [Tone] On=1 Level=94 F1=70 F2=70 Droop=0 Phase=0 Envelope=0,100 165,24 444,6 3783,0 [Noise] On=0 Level=131 Slope=0 Envelope=0,100 507,20 5225,0 FixedSeq=0 [Overtones] On=1 Level=158 F1=140 Wave1=4 Track1=0 F2=115 Wave2=4 Track2=0 Method=3 Param=51 Envelope1=0,100 982,100 1251,20 1837,5 3769,0 Envelope2=0,17 5986,17 6000,0 Filter=0 [NoiseBand] On=0 Level=176 F=280 dF=24 Envelope=0,63 1869,31 6777,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/clap_layer.ds000066400000000000000000000016761247673406200237030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0.00 Stretch=30 Level=0 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,50 2538,49 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=128 Slope=-70 Envelope=0,100 730,33 1142,49 1301,92 1682,44 2157,32 2157,95 2919,33 3204,43 3236,94 4500,30 8249,8 12405,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 949,69 2898,44 4897,29 6796,17 8745,10 11393,4 17689,0 Envelope2=0,96 4297,11 5497,41 16240,81 17489,0 Filter=0 [NoiseBand] On=0 Level=123 F=200 dF=8 Envelope=0,100 5250,30 10500,0 [NoiseBand2] On=0 Level=166 F=3100 dF=40 Envelope=0,100 300,65 800,39 1500,20 2349,8 3748,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_claps/classic_clap.ds000066400000000000000000000017001247673406200241740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=1 FilterEnv=0,21 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=131 Slope=-42 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 2384,16 4023,8 7211,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=59 F=3250 dF=64 Envelope=0,99 104,38 440,0 440,100 521,30 894,0 894,100 1028,26 1333,0 1333,98 1788,28 4097,7 9386,0 [NoiseBand2] On=1 Level=181 F=2000 dF=83 Envelope=0,100 100,30 443,0 443,95 554,29 839,4 934,97 1061,22 1314,1 1314,96 1774,27 3880,0 [Distortion] On=1 Clipping=1 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/electro_clap.ds000066400000000000000000000020371247673406200242140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=71 FilterEnv=0,6 412,88 681,14 1045,58 1298,18 1314,72 1884,5 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=131 Slope=-22 Envelope=0,100 119,34 190,9 301,74 447,17 447,100 536,32 760,62 760,6 886,15 886,100 1013,28 1093,47 1326,12 1326,100 1631,11 1631,33 2027,51 2384,16 4023,8 7211,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=59 F=3250 dF=64 Envelope=0,99 104,38 440,0 440,100 521,30 894,0 894,100 1028,26 1333,0 1333,98 1788,28 4097,7 9386,0 [NoiseBand2] On=1 Level=181 F=2000 dF=83 Envelope=0,100 100,30 443,0 443,95 554,29 839,4 934,97 1061,22 1314,1 1314,96 1774,27 3880,0 [Distortion] On=1 Clipping=1 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/filter_clappy.ds000066400000000000000000000020071247673406200244120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=80 Level=4 Filter=1 HighPass=1 Resonance=31 FilterEnv=0,11 9613,11 442000,100 442000,0 [Tone] On=0 Level=51 F1=230 F2=116 Droop=60 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 6377,5 13071,0 [Noise] On=1 Level=113 Slope=-62 Envelope=0,68 444,95 1142,24 1555,44 1777,92 2411,18 2836,56 2855,93 3331,29 3609,52 3748,89 4500,30 6314,6 11929,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=200 Wave1=0 Track1=0 F2=240 Wave2=0 Track2=0 Method=2 Param=41 Envelope1=0,100 1999,80 2792,42 4251,13 6377,5 8059,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=119 F=4000 dF=87 Envelope=0,68 773,95 1555,25 2003,40 2003,92 2538,28 2836,56 2855,93 3331,29 3609,52 3748,89 4500,30 11929,0 [NoiseBand2] On=0 Level=133 F=1600 dF=78 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6980,5 9994,0 [Distortion] On=0 Clipping=4 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_claps/pitch_clap.ds000066400000000000000000000017121247673406200236650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=1 FilterEnv=0,21 2149,58 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=122 Slope=-64 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 2384,16 4023,8 7211,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=104 F=1300 dF=84 Envelope=0,99 104,38 440,0 440,100 521,30 894,0 894,100 1028,26 1333,0 1333,98 1788,28 2848,3 9386,0 [NoiseBand2] On=1 Level=181 F=2000 dF=100 Envelope=0,100 100,30 443,0 443,95 554,29 839,4 934,97 1061,22 1314,1 1314,96 1774,27 3880,0 [Distortion] On=1 Clipping=1 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/pitch_clap_2.ds000066400000000000000000000017111247673406200241050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=31 FilterEnv=0,21 2149,58 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=122 Slope=26 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 2384,16 3331,3 6107,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=104 F=122 dF=34 Envelope=0,99 104,38 440,0 440,100 521,30 894,0 894,100 1028,26 1333,0 1333,98 1788,28 2848,3 3966,0 [NoiseBand2] On=1 Level=181 F=2000 dF=100 Envelope=0,100 100,30 443,0 443,95 554,29 839,4 934,97 1061,22 1314,1 1314,96 1774,27 3880,0 [Distortion] On=1 Clipping=1 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_claps/shutter_clap.ds000066400000000000000000000016001247673406200242500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-2 Stretch=220 Level=3 Filter=1 HighPass=1 Resonance=22 FilterEnv=0,38 111,89 325,18 325,89 611,15 627,97 41721,59 442000,100 443000,0 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=-45 Envelope=0,58 10578,26 12217,0 [Noise] On=1 Level=146 Slope=46 Envelope=0,100 111,36 309,16 309,94 484,26 627,15 627,99 769,24 880,10 880,100 1087,20 1515,5 3371,0 FixedSeq=0 [Overtones] On=0 Level=111 F1=380 Wave1=3 Track1=0 F2=200 Wave2=3 Track2=0 Method=3 Param=27 Envelope1=0,79 5447,26 9994,7 17489,0 Envelope2=0,89 39896,89 40531,0 Filter=0 [NoiseBand] On=1 Level=144 F=3000 dF=71 Envelope=0,100 111,36 309,16 309,94 484,26 627,15 627,99 769,24 880,10 880,100 1087,20 1515,5 3371,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=12 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_claps/u_don't_kno.ds000066400000000000000000000015731247673406200237720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,26 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=100 Slope=-40 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 4529,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=108 F=2000 dF=72 Envelope=0,99 104,38 432,18 440,100 521,30 879,14 894,100 1028,26 1333,9 1333,98 2309,27 3490,6 5552,2 12849,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/000077500000000000000000000000001247673406200215615ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_electro/'lectro_spliff.ds000066400000000000000000000013611247673406200250140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=120 Level=5 Filter=1 HighPass=1 Resonance=34 FilterEnv=0,2 35153,8 442000,100 443000,0 [Tone] On=0 Level=37 F1=360 F2=114 Droop=13 Phase=10 Envelope=0,5 32869,0 [Noise] On=0 Level=100 Slope=21 Envelope=0,100 1142,39 1396,26 2284,13 4822,0 FixedSeq=0 [Overtones] On=1 Level=119 F1=360 Wave1=1 Track1=0 F2=60 Wave2=2 Track2=0 Method=1 Param=56 Envelope1=0,100 2031,65 7107,27 13706,7 22209,2 32996,0 Envelope2=0,100 3252,66 7077,0 Filter=0 [NoiseBand] On=1 Level=40 F=330 dF=5 Envelope=0,100 6599,53 20940,15 34265,0 [NoiseBand2] On=0 Level=128 F=1000 dF=82 Envelope=0,0 115,14 1039,11 1504,0 [Distortion] On=1 Clipping=6 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/a_round_thing.ds000066400000000000000000000014731247673406200247360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=72 FilterEnv=0,100 10311,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=10000 F2=50 Droop=40 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=439 Wave1=4 Track1=0 F2=441 Wave2=1 Track2=1 Method=2 Param=100 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/applied_engineering.ds000066400000000000000000000014161247673406200261030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-2 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,4 1031,11 9280,5 442000,100 442000,0 [Tone] On=1 Level=181 F1=8000 F2=20 Droop=83 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=8472 Wave1=3 Track1=1 F2=4726 Wave2=1 Track2=0 Method=1 Param=60 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=0 Level=92 F=50 dF=20 Envelope=0,100 2250,30 12373,0 [NoiseBand2] On=0 Level=74 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=14 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/atmosphere_of_space.ds000066400000000000000000000014421247673406200261200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=60210 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/bottle_bill_fx.ds000066400000000000000000000014651247673406200251070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=3 Filter=1 HighPass=1 Resonance=79 FilterEnv=0,14 635,44 1904,53 3109,24 4981,42 442000,100 442000,0 [Tone] On=1 Level=128 F1=800 F2=120 Droop=53 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=34 Slope=-70 Envelope=0,100 4500,30 9000,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=500 Wave1=2 Track1=1 F2=200 Wave2=0 Track2=0 Method=3 Param=100 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3750,30 7500,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=26 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=3 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_electro/casio_poppin.ds000066400000000000000000000014461247673406200246010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,11 269,53 444000,100 444000,0 [Tone] On=1 Level=1 F1=6645 F2=120 Droop=10 Phase=0 Envelope=0,100 1750,20 3579,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=0 Track1=1 F2=630 Wave2=2 Track2=0 Method=0 Param=83 Envelope1=0,100 1250,20 2027,0 Envelope2=0,100 1045,43 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=8865 dF=90 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/category.ds000066400000000000000000000015241247673406200237300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=63 FilterEnv=0,1 2221,82 444000,100 444000,0 [Tone] On=1 Level=1 F1=5632 F2=55 Droop=50 Phase=65 Envelope=0,100 1586,0 10500,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=550 Wave1=0 Track1=1 F2=241 Wave2=1 Track2=0 Method=2 Param=100 Envelope1=0,85 1904,53 2221,0 4521,0 Envelope2=0,100 317,49 1110,29 2221,10 4283,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=26 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/cheap_fx.ds000066400000000000000000000016111247673406200236650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=20 FilterEnv=0,95 8725,32 44259,15 129286,0 442000,100 442000,0 [Tone] On=1 Level=12 F1=624 F2=444 Droop=60 Phase=00 Envelope=0,100 6028,25 15241,85 24835,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=440 Wave1=0 Track1=0 F2=880 Wave2=4 Track2=1 Method=2 Param=100 Envelope1=0,100 3750,30 12093,89 25384,0 Envelope2=0,49 8725,49 23536,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=0 Clipping=20 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_electro/chrip_q.ds000066400000000000000000000015251247673406200235410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=63 FilterEnv=0,1 2221,82 444000,100 444000,0 [Tone] On=1 Level=181 F1=5632 F2=55 Droop=50 Phase=65 Envelope=0,100 1586,0 10500,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=0 Level=110 F1=550 Wave1=0 Track1=0 F2=241 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,85 1904,53 2221,0 4521,0 Envelope2=0,100 317,49 1110,29 2221,10 4283,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/clean_rock_bd.ds000066400000000000000000000014441247673406200246610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=54 FilterEnv=0,22 1749,97 22037,4 444000,100 444000,0 [Tone] On=1 Level=181 F1=1500 F2=43 Droop=60 Phase=0 Envelope=0,100 5846,38 9744,0 18439,0 25384,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=83 F1=150 Wave1=4 Track1=0 F2=50 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,14 20687,50 22486,0 Envelope2=0,100 24435,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=30 Bits=6 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/cold_shot.ds000066400000000000000000000014141247673406200240670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,0 2062,24 8646,43 442000,100 442000,0 [Tone] On=0 Level=181 F1=8000 F2=20 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=8472 Wave1=3 Track1=1 F2=4726 Wave2=3 Track2=1 Method=3 Param=0 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=1 Level=92 F=50 dF=20 Envelope=0,100 2250,30 12373,0 [NoiseBand2] On=1 Level=74 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=2 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/confusion.ds000066400000000000000000000015121247673406200241130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=70 FilterEnv=0,46 13991,0 444000,100 444000,0 [Tone] On=1 Level=1 F1=6645 F2=120 Droop=60 Phase=0 Envelope=0,100 1750,20 3579,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=130.813 Wave1=1 Track1=0 F2=311.127 Wave2=1 Track2=1 Method=1 Param=93 Envelope1=0,100 4315,55 16498,0 Envelope2=0,100 1045,43 3807,68 6314,9 10438,59 16276,0 Filter=0 [NoiseBand] On=0 Level=128 F=8865 dF=90 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=12 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/cymbal_madness.ds000066400000000000000000000014531247673406200250750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-9 Filter=0 HighPass=1 Resonance=70 FilterEnv=0,0 2062,28 444000,100 444000,0 [Tone] On=0 Level=163 F1=2000 F2=50 Droop=50 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=136 F1=440 Wave1=0 Track1=0 F2=55 Wave2=2 Track2=0 Method=3 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 5790,92 10153,65 19671,49 28554,20 42990,0 Filter=0 [NoiseBand] On=0 Level=137 F=210 dF=70 Envelope=0,44 2250,30 39738,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=35 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/depth_fx.ds000066400000000000000000000017261247673406200237200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=-10 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,65 3148,47 6346,73 6796,23 9944,44 14291,50 442000,100 442000,0 [Tone] On=1 Level=128 F1=65525 F2=120 Droop=40 Phase=0 Envelope=0,100 4497,8 7945,0 21087,0 [Noise] On=1 Level=55 Slope=1 Envelope=0,100 894,45 899,11 2349,20 3448,9 6496,0 FixedSeq=1 [Overtones] On=1 Level=85 F1=4200 Wave1=3 Track1=0 F2=5402 Wave2=3 Track2=0 Method=1 Param=70 Envelope1=0,100 894,45 2756,18 6901,6 13563,2 26174,0 Envelope2=0,100 3000,30 10943,72 20587,0 Filter=0 [NoiseBand] On=1 Level=63 F=2000 dF=16 Envelope=0,100 894,45 1999,91 2756,18 3898,65 6901,6 10294,73 11893,13 13742,35 16290,0 [NoiseBand2] On=1 Level=36 F=1000 dF=14 Envelope=0,100 714,13 999,93 3348,86 3748,16 7096,69 9894,22 12193,56 13792,15 17839,0 [Distortion] On=1 Clipping=1 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/dialed.ds000066400000000000000000000016151247673406200233360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,0 10232,65 46638,87 90897,40 442000,100 442000,0 [Tone] On=1 Level=1 F1=0 F2=880 Droop=8 Phase=00 Envelope=0,100 6028,25 15241,85 24835,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=440 Wave1=0 Track1=1 F2=880 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,100 3750,30 12093,89 15943,0 Envelope2=0,49 4822,86 8725,49 65040,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=0 Clipping=20 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_electro/doom_bump.ds000066400000000000000000000014501247673406200240720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=52 FilterEnv=0,100 523,56 998,29 2565,13 444000,100 444000,0 [Tone] On=1 Level=1 F1=130.813 F2=261.626 Droop=50 Phase=0 Envelope=0,100 2391,47 21337,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=311.127 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=0 Method=3 Param=19 Envelope1=0,100 2391,48 18589,0 Envelope2=0,100 2423,56 22736,0 Filter=0 [NoiseBand] On=1 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=2 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_electro/electric_triangle.ds000066400000000000000000000014241247673406200255710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 871,50 444000,100 444000,0 [Tone] On=1 Level=1 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=20 Envelope=0,100 1140,69 1457,41 4671,11 8187,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=3400 Wave1=3 Track1=0 F2=630 Wave2=0 Track2=1 Method=2 Param=90 Envelope1=0,100 8266,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=12 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_electro/electro_perc_long.ds000066400000000000000000000014101247673406200255720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=200 Level=0 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,14 808,98 444000,100 444000,0 [Tone] On=0 Level=92 F1=600 F2=100 Droop=30 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=146 Slope=10 Envelope=0,100 500,20 1694,2 2597,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=18029 dF=100 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/electro_perc_short.ds000066400000000000000000000014071247673406200260000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=50 Level=0 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,14 808,98 444000,100 444000,0 [Tone] On=0 Level=92 F1=600 F2=100 Droop=30 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=146 Slope=10 Envelope=0,100 500,20 1694,2 2597,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=18029 dF=100 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/electro_rim.ds000066400000000000000000000014731247673406200244220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,19 7595,77 444000,100 444000,0 [Tone] On=1 Level=145 F1=1500 F2=120 Droop=37 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 2633,0 [Noise] On=0 Level=101 Slope=100 Envelope=0,14 857,34 2948,45 3148,8 6596,27 7695,5 11693,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=220 Wave1=1 Track1=1 F2=550 Wave2=0 Track2=1 Method=0 Param=70 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=9 Bits=4 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc_electro/electro_rim_2.ds000066400000000000000000000014731247673406200246430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=3 Filter=1 HighPass=1 Resonance=36 FilterEnv=0,19 7595,77 444000,100 444000,0 [Tone] On=1 Level=1 F1=1500 F2=120 Droop=37 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 2633,0 [Noise] On=0 Level=101 Slope=100 Envelope=0,14 857,34 2948,45 3148,8 6596,27 7695,5 11693,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=220 Wave1=1 Track1=1 F2=1200 Wave2=2 Track2=1 Method=0 Param=70 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=18 Bits=1 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc_electro/electro_rim_3.ds000066400000000000000000000014461247673406200246440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=80 Level=0 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,11 2181,32 442000,100 442000,0 [Tone] On=1 Level=172 F1=5633 F2=55 Droop=92 Phase=0 Envelope=0,100 1586,0 10500,0 [Noise] On=1 Level=128 Slope=-85 Envelope=0,100 555,21 1448,4 2439,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=1 Track1=0 F2=220 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 952,26 1904,0 3750,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=146 F=122 dF=17 Envelope=0,100 11104,53 31727,26 81696,9 161013,0 [NoiseBand2] On=1 Level=101 F=5555 dF=60 Envelope=0,100 932,0 2578,0 [Distortion] On=1 Clipping=16 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/electro_squeek.ds000066400000000000000000000016021247673406200251220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=9 Filter=1 HighPass=0 Resonance=20 FilterEnv=0,95 10232,65 20226,0 442000,100 442000,0 [Tone] On=1 Level=1 F1=0 F2=880 Droop=60 Phase=00 Envelope=0,100 6028,25 15241,85 24835,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=440 Wave1=2 Track1=0 F2=880 Wave2=2 Track2=1 Method=2 Param=100 Envelope1=0,100 3750,30 8804,71 10470,0 Envelope2=0,49 4822,86 8725,49 65040,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=0 Clipping=20 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_electro/fuzzy_q_bd.ds000066400000000000000000000014121247673406200242630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=1 Resonance=9 FilterEnv=0,0 1507,43 8646,43 442000,100 442000,0 [Tone] On=1 Level=181 F1=8000 F2=20 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=0 Level=82 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=3 Param=59 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=1 Level=92 F=50 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=74 F=3100 dF=40 Envelope=0,100 1110,9 3000,0 [Distortion] On=1 Clipping=2 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/g_question.ds000066400000000000000000000013761247673406200242750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,4 3300,9 444000,100 444000,0 [Tone] On=0 Level=1 F1=600 F2=50 Droop=40 Phase=0 Envelope=0,100 5250,30 13325,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=110 Wave1=0 Track1=1 F2=50 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,100 3750,30 12151,0 Envelope2=0,100 3522,32 12786,0 Filter=0 [NoiseBand] On=0 Level=56 F=210 dF=60 Envelope=0,44 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/general_obscurity.ds000066400000000000000000000016301247673406200256310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=3 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,0 550,21 849,31 1549,37 2399,40 4247,40 444000,100 444000,0 [Tone] On=1 Level=101 F1=5000 F2=230 Droop=62 Phase=0 Envelope=0,100 700,44 1750,20 2748,9 4347,4 6596,3 12043,0 19488,0 [Noise] On=1 Level=104 Slope=100 Envelope=0,68 1699,59 1899,30 3448,13 5147,4 8495,1 14841,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=802 Wave1=1 Track1=0 F2=290 Wave2=1 Track2=0 Method=2 Param=90 Envelope1=0,100 1250,20 11293,0 Envelope2=0,100 1000,20 13941,0 Filter=0 [NoiseBand] On=1 Level=38 F=5000 dF=37 Envelope=0,100 100,44 1249,51 2898,32 7046,8 9044,2 11443,0 [NoiseBand2] On=1 Level=65 F=3100 dF=40 Envelope=0,100 1500,20 10743,0 [Distortion] On=1 Clipping=3 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/hard_bork.ds000066400000000000000000000014701247673406200240460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=-7 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=1 FilterEnv=0,32 2074,30 3214,17 444000,100 444000,0 [Tone] On=1 Level=1 F1=2000 F2=230 Droop=30 Phase=60 Envelope=0,100 2344,29 7442,0 [Noise] On=0 Level=128 Slope=20 Envelope=0,100 2945,82 4972,0 FixedSeq=1 [Overtones] On=1 Level=137 F1=5200 Wave1=1 Track1=1 F2=1020 Wave2=2 Track2=1 Method=1 Param=51 Envelope1=0,100 2502,97 5210,0 Envelope2=0,100 2074,89 6239,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_electro/hello_q.ds000066400000000000000000000015211247673406200235330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=-10 Filter=1 HighPass=1 Resonance=99 FilterEnv=0,8 4045,92 5314,21 8249,81 9518,23 11897,67 13563,28 14753,50 15705,37 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 21098,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=60 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/just_the_tweet.ds000066400000000000000000000015541247673406200251530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=0 Filter=0 HighPass=1 Resonance=70 FilterEnv=0,0 133252,41 442000,100 442000,0 [Tone] On=1 Level=1 F1=6995 F2=400 Droop=20 Phase=00 Envelope=0,100 6028,25 10628,0 22764,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=5363 Wave1=0 Track1=1 F2=5555 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3490,11 3966,0 [Distortion] On=0 Clipping=10 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/lo-fi_house_c.ds000066400000000000000000000014311247673406200246230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=52 FilterEnv=0,0 1504,4 4529,4 444000,100 444000,0 [Tone] On=1 Level=128 F1=130.813 F2=130.813 Droop=0 Phase=0 Envelope=0,100 2391,47 7601,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=311.127 Wave1=2 Track1=0 F2=195.998 Wave2=2 Track2=0 Method=2 Param=99 Envelope1=0,100 2391,48 8677,0 Envelope2=0,100 2423,56 6936,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_electro/lo-fi_metal.ds000066400000000000000000000015721247673406200243060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=-6 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 133252,41 442000,100 442000,0 [Tone] On=1 Level=1 F1=6995 F2=50 Droop=7 Phase=00 Envelope=0,100 6028,25 10628,0 22764,0 [Noise] On=1 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=342 Wave1=0 Track1=1 F2=5555 Wave2=0 Track2=0 Method=2 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=1 Clipping=41 Bits=0 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc_electro/lo-finess.ds000066400000000000000000000014151247673406200240110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-7 Filter=0 HighPass=1 Resonance=9 FilterEnv=0,0 1507,43 8646,43 442000,100 442000,0 [Tone] On=1 Level=181 F1=8000 F2=20 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=0 Level=82 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=3 Param=59 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=0 Level=29 F=50 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=128 F=3100 dF=80 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=24 Bits=6 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/long_q_1.ds000066400000000000000000000016311247673406200236110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=50 FilterEnv=0,63 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=6684 F2=509 Droop=40 Phase=00 Envelope=0,100 954,36 3398,0 7545,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=90 F1=3566 Wave1=0 Track1=1 F2=2333 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=31 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/long_q_2.ds000066400000000000000000000016311247673406200236120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=50 FilterEnv=0,63 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=6684 F2=509 Droop=30 Phase=00 Envelope=0,100 954,36 3398,0 5846,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=90 F1=3566 Wave1=0 Track1=1 F2=2333 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=31 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/long_q_3.ds000066400000000000000000000016331247673406200236150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-2 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=50 FilterEnv=0,63 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=6684 F2=509 Droop=44 Phase=00 Envelope=0,100 954,36 6546,0 21587,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=90 F1=3566 Wave1=0 Track1=1 F2=2333 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=31 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/long_quack.ds000066400000000000000000000014421247673406200242350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=47 FilterEnv=0,0 12442,62 442000,100 442000,0 [Tone] On=1 Level=128 F1=220 F2=110 Droop=55 Phase=65 Envelope=0,100 6546,50 22636,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=74 F1=55 Wave1=1 Track1=0 F2=220 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/low_bit_tom.ds000066400000000000000000000014101247673406200244230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=120 Droop=46 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=31 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/metal_noise_shot.ds000066400000000000000000000015121247673406200254440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=0 Level=181 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=56 Slope=22 Envelope=0,71 586,27 5996,0 FixedSeq=1 [Overtones] On=0 Level=110 F1=5827 Wave1=0 Track1=1 F2=4562 Wave2=1 Track2=1 Method=2 Param=70 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=1 Level=128 F=3000 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=128 F=3100 dF=41 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=27 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/open_reso.ds000066400000000000000000000014651247673406200241100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=4 Filter=1 HighPass=1 Resonance=89 FilterEnv=0,33 2379,74 5949,32 10311,14 16419,6 444000,100 444000,0 [Tone] On=0 Level=181 F1=8000 F2=55 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=1 Level=56 Slope=95 Envelope=0,23 793,95 4759,26 6504,4 19512,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=3 Param=59 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/paging_the_jetsons.ds000066400000000000000000000015561247673406200257720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=-6 Filter=0 HighPass=1 Resonance=70 FilterEnv=0,0 133252,41 442000,100 442000,0 [Tone] On=1 Level=181 F1=6995 F2=384 Droop=60 Phase=00 Envelope=0,100 6028,25 10628,0 22764,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=5363 Wave1=0 Track1=1 F2=5555 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3490,11 3966,0 [Distortion] On=1 Clipping=1 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/pan.ds000066400000000000000000000015341247673406200226720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=0 Filter=0 HighPass=1 Resonance=70 FilterEnv=0,0 133252,41 442000,100 442000,0 [Tone] On=1 Level=1 F1=6995 F2=384 Droop=60 Phase=00 Envelope=0,100 6028,25 10628,0 22764,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=5363 Wave1=4 Track1=0 F2=5555 Wave2=4 Track2=1 Method=1 Param=100 Envelope1=0,100 3750,30 7500,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3490,11 3966,0 [Distortion] On=0 Clipping=1 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/pleasant_combo.ds000066400000000000000000000015401247673406200250770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=35 FilterEnv=0,0 6901,8 14277,2 444000,100 444000,0 [Tone] On=1 Level=181 F1=5632 F2=57 Droop=77 Phase=65 Envelope=0,100 5552,21 10500,0 [Noise] On=0 Level=146 Slope=-94 Envelope=0,71 635,11 1110,0 2459,0 FixedSeq=0 [Overtones] On=1 Level=110 F1=550 Wave1=3 Track1=1 F2=241 Wave2=4 Track2=0 Method=2 Param=100 Envelope1=0,100 1904,53 5235,26 20226,0 Envelope2=0,100 317,49 1110,29 4442,8 14198,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/q-ziq_for_the_masses.ds000066400000000000000000000014331247673406200262340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=0 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,11 6223,17 444000,100 444000,0 [Tone] On=1 Level=1 F1=1500 F2=120 Droop=10 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 4442,0 [Noise] On=0 Level=101 Slope=-10 Envelope=0,100 857,34 2602,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=55 Wave1=0 Track1=1 F2=220 Wave2=0 Track2=1 Method=1 Param=90 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=27 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/rich_bd.ds000066400000000000000000000014221247673406200235020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=-2 Filter=1 HighPass=1 Resonance=54 FilterEnv=0,0 2027,49 444000,100 444000,0 [Tone] On=1 Level=128 F1=5000 F2=60 Droop=35 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=172 F1=54 Wave1=0 Track1=0 F2=25 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=47 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/ring.ds000066400000000000000000000015131247673406200230500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100.0 Level=-3 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,46 13991,0 444000,100 444000,0 [Tone] On=1 Level=1 F1=880 F2=55 Droop=0 Phase=65 Envelope=0,100 2379,46 7932,20 17926,6 42514,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=2640 Wave1=4 Track1=0 F2=4 Wave2=0 Track2=1 Method=2 Param=80 Envelope1=0,100 4315,55 9439,16 15387,0 Envelope2=0,100 3000,30 27364,77 39420,0 Filter=0 [NoiseBand] On=0 Level=128 F=8865 dF=90 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=9 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/ringing_sn.ds000066400000000000000000000014431247673406200242500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=-6 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,5 3775,10 444000,100 444000,0 [Tone] On=1 Level=164 F1=200 F2=90 Droop=40 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=136 Slope=-100 Envelope=0,100 254,36 1174,11 6567,0 FixedSeq=1 [Overtones] On=1 Level=41 F1=865 Wave1=0 Track1=1 F2=630 Wave2=0 Track2=0 Method=2 Param=24 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=155 F=1500 dF=40 Envelope=0,100 508,20 1523,0 [NoiseBand2] On=1 Level=53 F=5000 dF=90 Envelope=0,100 571,35 1206,9 2411,0 [Distortion] On=1 Clipping=40 Bits=5 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_electro/rockin_electro_bass_drum.ds000066400000000000000000000014441247673406200271550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100 Level=-4 Filter=1 HighPass=0 Resonance=54 FilterEnv=0,22 1749,97 22037,4 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=43 Droop=60 Phase=0 Envelope=0,100 5846,38 9744,0 18439,0 25384,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=83 F1=150 Wave1=4 Track1=0 F2=50 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,14 20687,50 22486,0 Envelope2=0,100 24435,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=6 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/shocking_kiss.ds000066400000000000000000000014571247673406200247560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=5 FilterEnv=0,96 1299,30 1999,14 3198,8 23785,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=5000 F2=50 Droop=45 Phase=65 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=0 Level=74 F1=25 Wave1=0 Track1=1 F2=50 Wave2=4 Track2=0 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 2439,95 17489,89 19888,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/siren_sing.ds000066400000000000000000000014431247673406200242530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=47 FilterEnv=0,0 12442,62 442000,100 442000,0 [Tone] On=1 Level=54 F1=110 F2=550 Droop=36 Phase=65 Envelope=0,100 5996,25 22886,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=83 F1=220 Wave1=0 Track1=1 F2=110 Wave2=0 Track2=1 Method=2 Param=100 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=23 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/slide_tom.ds000066400000000000000000000014061247673406200240710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=12 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,74 570,9 1774,0 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=573 Wave1=0 Track1=0 F2=330 Wave2=0 Track2=0 Method=2 Param=97 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=92 F=1200 dF=80 Envelope=0,100 618,7 1473,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=1 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_electro/space_dynamic.ds000066400000000000000000000015371247673406200247160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=80 Level=0 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,0 3113,98 442000,100 442000,0 [Tone] On=1 Level=172 F1=5633 F2=55 Droop=32 Phase=0 Envelope=0,100 1586,0 4184,56 5830,10 6702,61 7932,10 8546,38 22886,0 [Noise] On=0 Level=128 Slope=-85 Envelope=0,100 555,21 1448,4 2439,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=4872 Wave1=1 Track1=1 F2=3283 Wave2=3 Track2=0 Method=1 Param=80 Envelope1=0,100 952,26 7099,52 13792,14 18838,94 25235,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=146 F=122 dF=67 Envelope=0,100 11104,53 31727,26 81696,9 161013,0 [NoiseBand2] On=0 Level=101 F=5555 dF=60 Envelope=0,100 932,0 2578,0 [Distortion] On=1 Clipping=20 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/spaceness.ds000066400000000000000000000014461247673406200241020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=54 FilterEnv=0,22 1749,97 22037,4 444000,100 444000,0 [Tone] On=0 Level=181 F1=1500 F2=43 Droop=60 Phase=0 Envelope=0,100 5846,38 9744,0 18439,0 25384,0 [Noise] On=0 Level=128 Slope=20 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=150 Wave1=4 Track1=0 F2=50 Wave2=0 Track2=0 Method=3 Param=100 Envelope1=0,14 20687,50 22486,0 Envelope2=0,100 24435,0 Filter=0 [NoiseBand] On=0 Level=128 F=9683 dF=81 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=30 Bits=6 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/startling_one.ds000066400000000000000000000016371247673406200247700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=21 FilterEnv=0,100 72971,47 115009,80 155460,35 192739,67 222086,27 251433,41 267297,18 295058,24 302989,8 315680,9 322025,3 442000,100 442000,0 [Tone] On=1 Level=1 F1=60210 F2=440 Droop=30 Phase=0 Envelope=0,100 219707,38 425930,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=439 Wave1=4 Track1=0 F2=441 Wave2=1 Track2=1 Method=2 Param=100 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/tone_percussion.ds000066400000000000000000000016241247673406200253330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,71 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=1000 F2=509 Droop=60 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=6300 Wave1=0 Track1=1 F2=18500 Wave2=0 Track2=1 Method=1 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=129 F=6000 dF=25 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=90 F=7122 dF=37 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/tweet.ds000066400000000000000000000015541247673406200232460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=0 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 133252,41 442000,100 442000,0 [Tone] On=1 Level=1 F1=6995 F2=400 Droop=20 Phase=00 Envelope=0,100 6028,25 10628,0 22764,0 [Noise] On=1 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=5363 Wave1=0 Track1=1 F2=5555 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3490,11 3966,0 [Distortion] On=1 Clipping=10 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/wee_dog.ds000066400000000000000000000014731247673406200235270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=6 Filter=1 HighPass=0 Resonance=36 FilterEnv=0,19 7595,77 444000,100 444000,0 [Tone] On=1 Level=1 F1=20 F2=19754 Droop=47 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 2633,0 [Noise] On=0 Level=101 Slope=100 Envelope=0,14 857,34 2948,45 3148,8 6596,27 7695,5 11693,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=220 Wave1=3 Track1=1 F2=1200 Wave2=0 Track2=0 Method=2 Param=70 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=21 Bits=0 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_electro/what_to_do_at_220.ds000066400000000000000000000014131247673406200253060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=0 FilterEnv=0,74 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=181 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=134 F1=440 Wave1=4 Track1=0 F2=220 Wave2=4 Track2=0 Method=2 Param=82 Envelope1=0,100 635,52 1523,31 3680,6 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_electro/who_hears_all_sound.ds000066400000000000000000000015671247673406200261410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=14 Filter=0 HighPass=0 Resonance=31 FilterEnv=0,77 7138,21 442000,100 442000,0 [Tone] On=1 Level=43 F1=908 F2=165 Droop=73 Phase=0 Envelope=0,100 1999,80 2792,42 4251,13 13071,0 [Noise] On=0 Level=95 Slope=97 Envelope=0,92 1666,41 4521,14 8804,0 11897,0 FixedSeq=0 [Overtones] On=1 Level=74 F1=50 Wave1=0 Track1=0 F2=920 Wave2=0 Track2=0 Method=3 Param=11 Envelope1=0,100 1999,80 2792,42 4251,13 14991,0 Envelope2=0,100 1000,20 3569,4 6901,0 Filter=0 [NoiseBand] On=1 Level=10 F=3921 dF=33 Envelope=0,68 3046,49 4500,30 7852,0 11929,0 [NoiseBand2] On=0 Level=88 F=9076 dF=58 Envelope=0,35 444,94 1364,59 2475,34 3998,21 5425,12 6901,5 8090,0 [Distortion] On=1 Clipping=7 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_electro/why_hit.ds000066400000000000000000000014131247673406200235630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,7 5473,18 442000,100 442000,0 [Tone] On=1 Level=1 F1=65.406 F2=5632 Droop=65 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=137 F1=65.406 Wave1=4 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 4124,41 11422,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=0 Level=128 F=2332 dF=7 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=155 F=3100 dF=10 Envelope=0,100 3093,77 4500,0 [Distortion] On=0 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_electro/yr_tv_will_be_next.ds000066400000000000000000000014271247673406200260130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=9 Filter=1 HighPass=1 Resonance=83 FilterEnv=0,53 9486,31 444000,100 444000,0 [Tone] On=1 Level=1 F1=55 F2=8000 Droop=0 Phase=0 Envelope=0,100 4220,87 11771,0 [Noise] On=0 Level=128 Slope=20 Envelope=0,100 1140,69 1457,41 4671,11 8187,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=55 Wave1=0 Track1=0 F2=7800 Wave2=0 Track2=1 Method=2 Param=100 Envelope1=0,100 8266,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_electro/zappy_bells.ds000066400000000000000000000014161247673406200244370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-4 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,11 442000,100 442000,0 [Tone] On=1 Level=154 F1=800 F2=55 Droop=64 Phase=65 Envelope=0,100 5250,30 9597,0 14753,0 [Noise] On=1 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=1760 Wave1=4 Track1=1 F2=440 Wave2=3 Track2=0 Method=1 Param=100 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=1 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/000077500000000000000000000000001247673406200205415ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_fx/2-bit_zone_drone.ds000066400000000000000000000017361247673406200242370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=40 FilterEnv=0,14 4981,42 442000,100 442000,0 [Tone] On=0 Level=128 F1=150 F2=300 Droop=78 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=16 Slope=-59 Envelope=0,100 5584,34 12056,81 22209,68 27031,8 40229,39 46194,84 61169,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=1 F2=220 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 57996,89 67260,0 Envelope2=0,46 7234,79 8883,32 21447,58 30204,19 40356,68 45813,60 52793,81 68656,0 Filter=0 [NoiseBand] On=1 Level=92 F=880 dF=10 Envelope=0,100 9645,62 16879,80 26270,10 42260,83 50509,52 58631,90 67260,0 [NoiseBand2] On=1 Level=94 F=55 dF=7 Envelope=0,6 1500,30 19924,53 28935,36 34645,73 43021,46 51905,73 62184,55 68022,0 [Distortion] On=1 Clipping=0 Bits=7 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_fx/2_bit_click.ds000066400000000000000000000013671247673406200232440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,20 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=92 F=1200 dF=80 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=18 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/a_blast.ds000066400000000000000000000014551247673406200225030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-11 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 30775,11 444000,100 444000,0 [Tone] On=0 Level=163 F1=2000 F2=50 Droop=50 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=0 Level=136 F1=440 Wave1=0 Track1=0 F2=55 Wave2=2 Track2=0 Method=3 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 5790,92 10153,65 19671,49 28554,20 42990,0 Filter=0 [NoiseBand] On=1 Level=137 F=210 dF=70 Envelope=0,44 2250,30 39738,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=35 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/across_the_universe.ds000066400000000000000000000014731247673406200251500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=-14 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,21 442000,100 442000,0 [Tone] On=1 Level=181 F1=40 F2=880 Droop=50 Phase=0 Envelope=0,100 16656,47 30140,29 51556,14 140390,0 [Noise] On=1 Level=94 Slope=100 Envelope=0,100 8090,64 27364,38 120403,0 FixedSeq=1 [Overtones] On=1 Level=51 F1=5200 Wave1=2 Track1=0 F2=195.998 Wave2=2 Track2=1 Method=2 Param=59 Envelope1=0,100 48383,35 72178,12 125320,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/alarm_3.ds000066400000000000000000000015771247673406200224210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=0 Level=1 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=342 Wave1=0 Track1=1 F2=1 Wave2=4 Track2=1 Method=1 Param=100 Envelope1=0,85 1904,53 2221,0 4521,0 Envelope2=0,100 2935,74 7456,64 11184,56 11660,1 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=2 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/alarming_buzz.ds000066400000000000000000000014361247673406200237410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-15 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,89 5949,32 16419,6 444000,100 444000,0 [Tone] On=0 Level=181 F1=8000 F2=34 Droop=20 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=1760 Wave1=4 Track1=1 F2=880 Wave2=3 Track2=1 Method=2 Param=100 Envelope1=0,100 20940,100 20940,0 Envelope2=0,100 26650,100 32599,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/alarming_buzz_2.ds000066400000000000000000000014341247673406200241600ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-12 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,89 5949,32 16419,6 444000,100 444000,0 [Tone] On=1 Level=1 F1=445 F2=345 Droop=100 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=440 Wave1=1 Track1=1 F2=880 Wave2=1 Track2=0 Method=1 Param=100 Envelope1=0,100 20940,100 20940,0 Envelope2=0,100 26650,100 32599,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/alien_curiousity.ds000066400000000000000000000015661247673406200244700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=-16 Filter=0 HighPass=1 Resonance=64 FilterEnv=0,98 110885,37 442000,100 442000,0 [Tone] On=1 Level=1 F1=110 F2=330 Droop=50 Phase=00 Envelope=0,0 5250,30 80427,95 114216,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,100 35930,41 109695,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=2 Track1=1 F2=880 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,100 96370,100 98749,0 Envelope2=0,100 3000,30 93514,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=1 Clipping=8 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/ambient_backgroud.ds000066400000000000000000000016301247673406200245310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=-16 Filter=1 HighPass=0 Resonance=54 FilterEnv=0,98 14277,49 31885,28 46876,19 75668,8 107791,0 442000,100 442000,0 [Tone] On=1 Level=1 F1=220 F2=110 Droop=50 Phase=00 Envelope=0,0 5250,30 80427,95 114216,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,100 35930,41 109695,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=2 Track1=0 F2=800 Wave2=4 Track2=1 Method=1 Param=100 Envelope1=0,100 96370,100 98749,0 Envelope2=0,100 3000,30 93514,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=0 Clipping=8 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/click.ds000066400000000000000000000013221247673406200221540ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=16 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=159 F1=350 F2=174 Droop=69 Phase=45 Envelope=0,100 715,46 1788,17 5453,0 [Noise] On=1 Level=64 Slope=-5 Envelope=0,0 22,98 521,52 1043,21 2890,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=1 Level=88 F=4000 dF=83 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=6 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/coo.ds000066400000000000000000000015541247673406200216560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=63 FilterEnv=0,1 6504,17 444000,100 444000,0 [Tone] On=1 Level=1 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=550 Wave1=0 Track1=0 F2=241 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,85 1904,53 2221,0 4521,0 Envelope2=0,100 317,49 1110,29 2221,10 4283,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=30 Bits=2 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/detonate.ds000066400000000000000000000015461247673406200227020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,11 6092,5 442000,100 442000,0 [Tone] On=0 Level=1 F1=5633 F2=100 Droop=12 Phase=0 Envelope=0,100 5250,30 53935,20 104698,86 191946,32 264917,23 303782,44 333923,41 398962,5 398962,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 2887,24 5425,0 FixedSeq=0 [Overtones] On=0 Level=137 F1=65.406 Wave1=0 Track1=0 F2=440 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 319646,95 391031,0 Envelope2=0,100 337095,94 391031,0 Filter=0 [NoiseBand] On=1 Level=146 F=122 dF=17 Envelope=0,100 11104,53 31727,26 81696,9 161013,0 [NoiseBand2] On=0 Level=101 F=3100 dF=60 Envelope=0,100 1079,11 4500,0 [Distortion] On=0 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/dirty_transform.ds000066400000000000000000000020021247673406200243110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=-12 Filter=1 HighPass=0 Resonance=60 FilterEnv=0,0 0,55 14515,51 14753,0 25223,1 25223,54 39500,50 39500,0 56632,0 56632,50 71861,49 72337,1 86852,1 87565,49 99225,49 100653,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=0 F2=880 Droop=60 Phase=00 Envelope=0,8 5250,30 20702,22 29744,68 44497,58 114930,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=440 Wave1=2 Track1=0 F2=880 Wave2=2 Track2=1 Method=2 Param=100 Envelope1=0,100 3750,30 8804,71 10470,0 Envelope2=0,49 4822,86 8725,49 65040,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=1 Clipping=32 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_fx/dirty_transform_2.ds000066400000000000000000000021401247673406200245350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=-12 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,0 0,55 14515,51 14753,0 25223,1 25223,54 39500,50 39500,0 56632,0 56632,50 71861,49 72337,1 86852,1 87565,49 99225,49 100653,1 442000,100 442000,0 [Tone] On=1 Level=1 F1=0 F2=880 Droop=30 Phase=00 Envelope=0,8 5250,30 20702,22 29744,68 44497,58 114930,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=2 Track1=1 F2=880 Wave2=0 Track2=0 Method=2 Param=100 Envelope1=0,100 96370,100 98749,0 Envelope2=0,100 13801,100 15467,1 29982,4 30220,101 43307,98 43783,0 55680,0 55918,100 67578,100 69005,0 82331,4 84710,100 96132,101 104698,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=1 Clipping=32 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/distorion_oscilator.ds000066400000000000000000000015271247673406200251670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-15 Filter=1 HighPass=0 Resonance=99 FilterEnv=0,100 5552,44 23002,17 66626,3 129286,0 442000,100 442000,0 [Tone] On=1 Level=73 F1=220 F2=55 Droop=81 Phase=00 Envelope=0,100 24588,47 61074,21 136424,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=220 Wave1=2 Track1=0 F2=5.5 Wave2=0 Track2=0 Method=1 Param=80 Envelope1=0,100 11897,56 43624,27 101525,11 186394,0 Envelope2=0,32 70592,33 194326,0 Filter=0 [NoiseBand] On=0 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=0 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=1 Clipping=37 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/electric_intro_to_a.ds000066400000000000000000000016411247673406200251020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=21 FilterEnv=0,100 72971,47 115009,80 155460,35 192739,67 222086,27 251433,41 267297,18 295058,24 302989,8 315680,9 322025,3 442000,100 442000,0 [Tone] On=1 Level=181 F1=60210 F2=440 Droop=30 Phase=0 Envelope=0,100 219707,38 425930,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=439 Wave1=4 Track1=0 F2=441 Wave2=1 Track2=1 Method=2 Param=100 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/electric_waves_out_my_window.ds000066400000000000000000000017571247673406200270650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,8 104698,11 170531,29 245088,9 321232,17 365649,16 398962,5 444000,100 444000,0 [Tone] On=0 Level=128 F1=600 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=83 Slope=54 Envelope=0,0 4500,30 139597,13 218121,21 287126,5 341854,23 425137,0 FixedSeq=1 [Overtones] On=0 Level=101 F1=600 Wave1=0 Track1=1 F2=120 Wave2=0 Track2=1 Method=2 Param=50 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=83 F=5000 dF=79 Envelope=0,9 83282,30 170531,14 258572,46 331543,36 374374,8 433068,0 [NoiseBand2] On=1 Level=74 F=8000 dF=90 Envelope=0,5 1500,20 67102,42 94228,11 143563,15 188773,53 239536,14 268883,5 324405,29 341854,13 363270,20 435448,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/elekperc1.ds000066400000000000000000000014021247673406200227410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=200 Level=1 Filter=1 HighPass=1 Resonance=54 FilterEnv=0,40 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 635,11 10500,0 [Noise] On=1 Level=85 Slope=23 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=1 Level=26 F1=4364 Wave1=3 Track1=0 F2=7642 Wave2=3 Track2=0 Method=0 Param=0 Envelope1=0,83 888,19 6218,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=1 Level=156 F=9500 dF=29 Envelope=0,100 0,72 819,8 4470,0 [NoiseBand2] On=1 Level=128 F=3150 dF=50 Envelope=0,100 714,4 3000,0 [Distortion] On=0 Clipping=32 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/elekperc2.ds000066400000000000000000000014531247673406200227500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=24 Stretch=25 Level=0 Filter=1 HighPass=1 Resonance=90 FilterEnv=0,35 714,100 5473,38 5473,100 11422,0 24271,8 44259,29 63326,72 442000,100 442000,0 [Tone] On=1 Level=181 F1=440 F2=0 Droop=14 Phase=0 Envelope=0,100 3093,50 13801,14 31885,5 85900,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=200 Wave1=0 Track1=0 F2=100 Wave2=0 Track2=0 Method=1 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=181 F=220 dF=48 Envelope=0,100 6345,67 13198,41 20940,26 27793,15 35153,10 57996,0 [NoiseBand2] On=0 Level=181 F=14000 dF=31 Envelope=0,100 1043,1 10504,0 [Distortion] On=1 Clipping=0 Bits=6 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/end_of_broadcast_day.ds000066400000000000000000000014241247673406200252030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,7 5473,18 442000,100 442000,0 [Tone] On=0 Level=1 F1=65.406 F2=5632 Droop=65 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=1 Level=128 Slope=-10 Envelope=0,100 218121,100 218121,0 FixedSeq=0 [Overtones] On=0 Level=137 F1=65.406 Wave1=4 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 4124,41 11422,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=0 Level=128 F=2332 dF=7 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=155 F=3100 dF=10 Envelope=0,100 3093,77 4500,0 [Distortion] On=1 Clipping=2 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/entre.ds000066400000000000000000000015461247673406200222140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=0 Level=181 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=100 Wave1=0 Track1=1 F2=4562 Wave2=1 Track2=1 Method=1 Param=70 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=1 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 15241,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=6 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/experiment_1.ds000066400000000000000000000014741247673406200234770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=72 FilterEnv=0,100 10311,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=10000 F2=50 Droop=70 Phase=0 Envelope=0,100 5250,30 225259,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=439 Wave1=4 Track1=0 F2=441 Wave2=1 Track2=1 Method=2 Param=100 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/experiment_2_-_turn_off_the_tv.ds000066400000000000000000000014741247673406200271670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=72 FilterEnv=0,100 10311,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=10000 F2=50 Droop=70 Phase=0 Envelope=0,100 5250,30 225259,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=439 Wave1=4 Track1=0 F2=441 Wave2=1 Track2=1 Method=2 Param=100 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/experiment_3_-_the_transform.ds000066400000000000000000000014641247673406200266470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=72 FilterEnv=0,100 10311,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=48 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=1 Level=65 F1=50 Wave1=4 Track1=1 F2=100 Wave2=1 Track2=0 Method=1 Param=80 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/experiment_4_-_clean.ds000066400000000000000000000014641247673406200250570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=72 FilterEnv=0,100 10311,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=48 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=1 Level=65 F1=50 Wave1=4 Track1=0 F2=100 Wave2=1 Track2=0 Method=1 Param=80 Envelope1=0,100 51556,41 204637,0 Envelope2=0,100 51556,41 204637,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/f#m7_space_signal.ds000066400000000000000000000020371247673406200243370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=200 Level=-2 Filter=1 HighPass=1 Resonance=15 FilterEnv=0,32 17132,50 26174,24 39262,40 56870,15 77096,39 90421,24 121830,56 442000,100 442000,0 [Tone] On=1 Level=128 F1=739.99 F2=739.99 Droop=15 Phase=180 Envelope=0,100 25461,100 25461,13 44021,13 44021,100 64722,100 64722,14 84234,14 84472,100 120878,0 [Noise] On=1 Level=16 Slope=-59 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=440 Wave1=1 Track1=1 F2=220 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,0 25937,100 44259,13 64722,100 84234,14 110171,98 124924,0 Envelope2=0,100 17846,17 39738,61 57108,28 75430,39 123496,0 Filter=0 [NoiseBand] On=1 Level=92 F=554.37 dF=10 Envelope=0,100 17846,25 36168,75 55442,29 74240,66 114930,0 [NoiseBand2] On=1 Level=94 F=55 dF=7 Envelope=0,0 26888,45 41879,22 64008,24 79951,8 129445,0 [Distortion] On=1 Clipping=0 Bits=5 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/feedback.ds000066400000000000000000000015621247673406200226210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=63 FilterEnv=0,1 6504,17 444000,100 444000,0 [Tone] On=1 Level=1 F1=880 F2=55 Droop=10 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=4336 Wave1=0 Track1=0 F2=142 Wave2=0 Track2=1 Method=1 Param=100 Envelope1=0,85 1904,53 10708,29 18639,0 Envelope2=0,100 1031,49 3966,30 9359,22 19036,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=30 Bits=2 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/flashy_wind.ds000066400000000000000000000014671247673406200234100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=47 FilterEnv=0,5 2935,56 4838,23 7138,53 10390,10 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=50 Droop=58 Phase=60 Envelope=0,100 397,52 1428,29 3490,15 6980,10 16339,0 [Noise] On=1 Level=128 Slope=92 Envelope=0,16 1500,53 14991,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=315 Wave1=4 Track1=0 F2=630 Wave2=4 Track2=0 Method=0 Param=54 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=10 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/flipper.ds000066400000000000000000000013661247673406200225400ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=34 FilterEnv=0,55 14691,50 442000,100 443000,0 [Tone] On=0 Level=181 F1=200 F2=50 Droop=39 Phase=110 Envelope=0,0 89,95 899,38 4247,15 21737,0 [Noise] On=0 Level=146 Slope=-75 Envelope=0,0 0,100 4797,3 6296,0 FixedSeq=0 [Overtones] On=1 Level=115 F1=437 Wave1=0 Track1=0 F2=611 Wave2=0 Track2=0 Method=3 Param=38 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/formant_techno.ds000066400000000000000000000015011247673406200240740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=15 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,95 1399,50 4197,23 7246,11 12492,6 442000,100 442000,0 [Tone] On=1 Level=99 F1=110 F2=50 Droop=66 Phase=65 Envelope=0,100 5996,25 14741,0 22886,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=83 F1=110 Wave1=0 Track1=1 F2=110 Wave2=0 Track2=1 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=20 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/frequency_revolution.ds000066400000000000000000000022241247673406200253600ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-10 Filter=1 HighPass=1 Resonance=30 FilterEnv=0,0 125399,47 442000,100 442000,0 [Tone] On=1 Level=128 F1=5000 F2=120 Droop=20 Phase=0 Envelope=0,100 4283,0 11422,100 11422,0 19988,100 19988,0 30933,102 30933,0 46876,100 46876,0 62581,96 65436,0 75430,97 75430,0 86852,95 86852,1 98273,100 98273,0 105888,100 106126,0 112788,100 113026,0 120165,98 124924,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=200 Wave1=3 Track1=1 F2=630 Wave2=4 Track2=0 Method=1 Param=50 Envelope1=0,100 34741,54 127065,0 Envelope2=0,100 1000,20 4045,0 9280,94 11660,0 19988,98 20226,5 31885,99 32599,5 46400,95 47590,2 60915,95 66388,5 73288,93 75430,5 86376,95 86852,5 98273,95 98749,10 105412,98 106363,11 113026,89 114454,1 120640,96 126351,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/fried_food_for_dinner.ds000066400000000000000000000016551247673406200254050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-17 Stretch=100 Level=-3 Filter=1 HighPass=1 Resonance=53 FilterEnv=0,20 27412,2 58250,16 442000,100 442000,0 [Tone] On=1 Level=92 F1=880 F2=220 Droop=29 Phase=12 Envelope=0,85 3046,85 3934,48 10279,8 17132,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=1 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,54 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=0 [NoiseBand] On=1 Level=181 F=220 dF=0 Envelope=0,0 4315,11 4442,35 5330,14 20051,5 54189,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [Distortion] On=1 Clipping=32 Bits=3 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/funky_stab.ds000066400000000000000000000015521247673406200232410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0.00 Stretch=30 Level=9 Filter=0 HighPass=0 Resonance=5 FilterEnv=0,3 1799,8 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 949,69 2898,44 4897,29 6796,17 8745,10 11393,4 17689,0 Envelope2=0,96 4297,11 5497,41 16240,81 17489,0 Filter=0 [NoiseBand] On=0 Level=123 F=200 dF=8 Envelope=0,100 5250,30 10500,0 [NoiseBand2] On=0 Level=166 F=3100 dF=40 Envelope=0,100 300,65 800,39 1500,20 2349,8 3748,0 [Distortion] On=0 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/future.ds000066400000000000000000000014351247673406200224060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=5 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,8 2300,80 15149,61 17767,0 442000,100 442000,0 [Tone] On=1 Level=73 F1=700 F2=20 Droop=18 Phase=7643 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=55 F1=880 Wave1=0 Track1=0 F2=110 Wave2=3 Track2=0 Method=3 Param=20 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=0 Level=92 F=45 dF=8 Envelope=0,100 2250,30 36882,0 [NoiseBand2] On=0 Level=20 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=26 Bits=0 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/gmaj_lo-fi_chord.ds000066400000000000000000000014331247673406200242550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=500 Level=1 Filter=0 HighPass=0 Resonance=85 FilterEnv=0,0 4061,99 442000,100 442000,0 [Tone] On=1 Level=74 F1=587.33 F2=587.33 Droop=0 Phase=0 Envelope=0,100 3750,100 3750,0 [Noise] On=0 Level=130 Slope=-100 Envelope=0,100 596,8 1490,0 FixedSeq=0 [Overtones] On=1 Level=34 F1=392 Wave1=4 Track1=0 F2=587.33 Wave2=0 Track2=0 Method=2 Param=44 Envelope1=0,100 3750,100 3750,0 Envelope2=0,100 865,36 1666,92 2403,14 3085,59 3750,0 Filter=1 [NoiseBand] On=1 Level=128 F=1568 dF=5 Envelope=0,100 3750,100 3750,0 [NoiseBand2] On=1 Level=80 F=987.77 dF=7 Envelope=0,100 3750,100 3750,0 [Distortion] On=1 Clipping=0 Bits=6 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/gmaj_lo-fi_chord_2.ds000066400000000000000000000014331247673406200244760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=500 Level=1 Filter=1 HighPass=1 Resonance=52 FilterEnv=0,0 4061,99 442000,100 442000,0 [Tone] On=1 Level=74 F1=587.33 F2=587.33 Droop=0 Phase=0 Envelope=0,100 3750,100 3750,0 [Noise] On=0 Level=130 Slope=-100 Envelope=0,100 596,8 1490,0 FixedSeq=0 [Overtones] On=1 Level=34 F1=392 Wave1=4 Track1=0 F2=587.33 Wave2=0 Track2=0 Method=2 Param=44 Envelope1=0,100 3750,100 3750,0 Envelope2=0,100 865,36 1666,92 2403,14 3085,59 3750,0 Filter=0 [NoiseBand] On=1 Level=128 F=1568 dF=5 Envelope=0,100 3750,100 3750,0 [NoiseBand2] On=1 Level=80 F=987.77 dF=7 Envelope=0,100 3750,100 3750,0 [Distortion] On=1 Clipping=0 Bits=5 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/halt_variety.ds000066400000000000000000000015221247673406200235640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,11 6092,5 442000,100 442000,0 [Tone] On=1 Level=1 F1=5633 F2=100 Droop=12 Phase=0 Envelope=0,100 5250,30 53935,20 104698,86 191946,32 264917,23 303782,44 333923,41 398962,5 398962,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 2887,24 5425,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=0 Track1=0 F2=440 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 319646,95 391031,0 Envelope2=0,100 337095,94 391031,0 Filter=0 [NoiseBand] On=0 Level=146 F=122 dF=17 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=101 F=3100 dF=60 Envelope=0,100 1079,11 4500,0 [Distortion] On=0 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/hip-hop_stop.ds000066400000000000000000000014151247673406200235030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,0 2062,24 8646,43 442000,100 442000,0 [Tone] On=1 Level=28 F1=8000 F2=20 Droop=28 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=8472 Wave1=3 Track1=1 F2=4726 Wave2=3 Track2=1 Method=3 Param=60 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=1 Level=92 F=50 dF=20 Envelope=0,100 2250,30 12373,0 [NoiseBand2] On=1 Level=74 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=14 Bits=5 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/hip-hop_stop_2.ds000066400000000000000000000014261247673406200237260ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=0 HighPass=0 Resonance=9 FilterEnv=0,0 2062,24 8487,26 442000,100 442000,0 [Tone] On=0 Level=28 F1=8000 F2=20 Droop=58 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=8472 Wave1=3 Track1=1 F2=4726 Wave2=3 Track2=1 Method=3 Param=60 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=0 Level=92 F=50 dF=20 Envelope=0,100 2250,30 12373,0 [NoiseBand2] On=0 Level=74 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=14 Bits=1 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_fx/hollow.ds000066400000000000000000000016001247673406200223720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=0 Level=1 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=5462 Wave1=0 Track1=1 F2=1 Wave2=4 Track2=1 Method=3 Param=100 Envelope1=0,85 1904,53 2221,0 4521,0 Envelope2=0,100 2935,74 7456,64 11184,56 11660,1 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=2 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/howdy_oil_barrel.ds000066400000000000000000000014361247673406200244210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=-12 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,11 6223,17 444000,100 444000,0 [Tone] On=1 Level=181 F1=1500 F2=120 Droop=50 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 4442,0 [Noise] On=0 Level=101 Slope=-10 Envelope=0,100 857,34 2602,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=55 Wave1=0 Track1=0 F2=4353 Wave2=0 Track2=1 Method=1 Param=90 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=1 Level=74 F=220 dF=20 Envelope=0,100 750,20 2221,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=27 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/jaggies.ds000066400000000000000000000017351247673406200225100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=200 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=50 F2=50 Droop=0 Phase=0 Envelope=0,100 5433,69 6092,26 12564,49 14975,12 17386,28 25127,17 28681,56 32996,0 42641,41 45306,0 [Noise] On=0 Level=181 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=50 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 13579,68 23732,13 46067,67 59138,0 Envelope2=0,100 1000,20 3807,77 9645,44 11295,84 21447,28 23858,77 31473,35 40483,77 48732,0 Filter=0 [NoiseBand] On=1 Level=45 F=300 dF=12 Envelope=0,100 6218,17 10153,57 14340,22 17259,53 21701,66 33123,28 40610,62 48605,14 56473,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=1 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/laser_gun_&_ricochet.ds000066400000000000000000000014161247673406200251370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-4 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,11 442000,100 442000,0 [Tone] On=1 Level=154 F1=800 F2=55 Droop=14 Phase=65 Envelope=0,100 5250,30 9597,0 14753,0 [Noise] On=1 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=1760 Wave1=4 Track1=1 F2=440 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=1 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/machine_drone.ds000066400000000000000000000015721247673406200236710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=35 FilterEnv=0,0 6901,8 14277,2 444000,100 444000,0 [Tone] On=1 Level=1 F1=5632 F2=57 Droop=100 Phase=65 Envelope=0,100 58504,95 62057,0 [Noise] On=0 Level=146 Slope=-94 Envelope=0,71 635,11 1110,0 2459,0 FixedSeq=0 [Overtones] On=1 Level=110 F1=110 Wave1=1 Track1=0 F2=6842 Wave2=2 Track2=1 Method=2 Param=100 Envelope1=0,100 58250,96 64215,0 Envelope2=0,100 10153,80 17370,86 27681,75 36486,78 39738,89 55839,78 61677,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/metal_twist.ds000066400000000000000000000014301247673406200234230ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=-7 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,11 6271,48 444000,100 444000,0 [Tone] On=1 Level=1 F1=200 F2=120 Droop=80 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=20 Envelope=0,100 1140,69 1457,41 4671,11 8187,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=220 Wave1=3 Track1=0 F2=1720 Wave2=0 Track2=1 Method=1 Param=80 Envelope1=0,100 8266,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/modular.ds000066400000000000000000000014501247673406200225340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-12 Filter=1 HighPass=0 Resonance=85 FilterEnv=0,100 46004,38 99939,11 442000,100 442000,0 [Tone] On=1 Level=73 F1=55 F2=110 Droop=0 Phase=00 Envelope=0,100 40451,27 138011,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=0 Track1=1 F2=220 Wave2=3 Track2=0 Method=2 Param=80 Envelope1=0,100 36486,29 137218,0 Envelope2=0,100 31727,23 93514,0 Filter=0 [NoiseBand] On=0 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=0 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/modular_fm_counterpoint.ds000066400000000000000000000014651247673406200260350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-12 Filter=1 HighPass=0 Resonance=85 FilterEnv=0,100 46004,38 99939,11 442000,100 442000,0 [Tone] On=1 Level=73 F1=200 F2=100 Droop=0 Phase=00 Envelope=0,100 40451,27 138011,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=400 Wave1=0 Track1=1 F2=300 Wave2=3 Track2=0 Method=1 Param=100 Envelope1=0,100 36486,29 137218,0 Envelope2=0,0 26968,53 112629,100 118975,0 Filter=0 [NoiseBand] On=0 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=0 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/multi-ping.ds000066400000000000000000000017021247673406200231560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=5000 F2=120 Droop=20 Phase=0 Envelope=0,100 4283,0 11422,100 11422,0 19988,100 19988,0 30933,102 30933,0 46876,100 46876,0 62581,96 65436,0 75430,97 75430,0 86852,95 86852,1 98273,100 98273,0 105888,100 106126,0 112788,100 113026,0 120165,98 124924,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/my_atari_memory.ds000066400000000000000000000021501247673406200242640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=-7 Stretch=100 Level=-6 Filter=1 HighPass=0 Resonance=61 FilterEnv=0,100 32520,0 32520,100 62660,2 62660,100 77730,0 77730,100 103112,0 103112,99 140390,0 140390,100 154667,0 154667,100 180049,0 180049,98 199878,0 199878,100 226052,0 226052,100 263331,0 263331,100 306162,0 323612,18 419585,0 442000,100 442000,0 [Tone] On=1 Level=1 F1=60210 F2=440 Droop=30 Phase=0 Envelope=0,100 219707,38 425930,0 [Noise] On=1 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=2000 Wave1=4 Track1=1 F2=1020 Wave2=4 Track2=1 Method=2 Param=100 Envelope1=0,100 2502,97 39658,33 109457,0 425930,0 Envelope2=0,100 42831,0 80903,101 126113,-1 172117,99 227638,2 294264,98 348200,6 397376,80 423550,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/new_sweep.ds000066400000000000000000000020441247673406200230650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=-12 Filter=1 HighPass=1 Resonance=64 FilterEnv=0,98 110885,37 442000,100 442000,0 [Tone] On=1 Level=181 F1=110 F2=200 Droop=50 Phase=00 Envelope=0,0 5250,30 80427,95 114216,0 [Noise] On=1 Level=145 Slope=80 Envelope=0,100 35930,41 109695,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=2 Track1=1 F2=880 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,100 96370,100 98749,0 Envelope2=0,100 7138,39 13801,100 15467,1 22367,31 29982,4 30220,101 36644,41 43307,98 43783,0 49969,22 55680,0 55918,100 60915,35 67578,100 69005,0 75192,25 82331,4 84710,100 92087,38 96132,101 104698,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=1 Clipping=8 Bits=3 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/noise_filtering.ds000066400000000000000000000016201247673406200242500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=-3 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,21 14277,30 33313,65 46797,27 75351,50 80903,26 97559,29 107871,12 115802,20 123734,5 442000,100 442000,0 [Tone] On=1 Level=1 F1=40392 F2=880 Droop=50 Phase=0 Envelope=0,100 16656,47 30140,29 51556,14 140390,0 [Noise] On=1 Level=94 Slope=100 Envelope=0,100 8090,64 27364,38 120403,0 FixedSeq=1 [Overtones] On=1 Level=114 F1=5200 Wave1=4 Track1=0 F2=195.998 Wave2=2 Track2=1 Method=2 Param=89 Envelope1=0,100 48383,35 72178,12 125320,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=1 Level=101 F=5732 dF=99 Envelope=0,100 1758,38 327577,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/not_trying_too_hard.ds000066400000000000000000000014531247673406200251470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=-8 Filter=1 HighPass=0 Resonance=52 FilterEnv=0,100 523,56 998,29 2565,13 444000,100 444000,0 [Tone] On=1 Level=181 F1=130.813 F2=261.626 Droop=39 Phase=0 Envelope=0,100 2391,47 21337,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=112 F1=311.127 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=1 Method=2 Param=19 Envelope1=0,100 2391,48 18589,0 Envelope2=0,100 2423,56 22736,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/numb.ds000066400000000000000000000015131247673406200220320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=0 HighPass=0 Resonance=35 FilterEnv=0,0 6901,8 14277,2 444000,100 444000,0 [Tone] On=1 Level=1 F1=5632 F2=57 Droop=40 Phase=65 Envelope=0,100 11342,20 31727,0 [Noise] On=0 Level=146 Slope=-94 Envelope=0,71 635,11 1110,0 2459,0 FixedSeq=0 [Overtones] On=1 Level=110 F1=110 Wave1=1 Track1=0 F2=330 Wave2=2 Track2=1 Method=1 Param=100 Envelope1=0,100 11342,20 31727,0 Envelope2=0,100 11342,20 31727,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/obligatory_ufo_liftoff.ds000066400000000000000000000014471247673406200256340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=52 FilterEnv=0,100 523,56 998,29 2565,13 444000,100 444000,0 [Tone] On=1 Level=181 F1=40 F2=880 Droop=0 Phase=0 Envelope=0,100 46797,49 287919,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=112 F1=311.127 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=0 Method=1 Param=89 Envelope1=0,100 48383,50 310128,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/obligatory_ufo_liftoff_2.ds000066400000000000000000000014471247673406200260550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=52 FilterEnv=0,100 523,56 998,29 2565,13 444000,100 444000,0 [Tone] On=1 Level=181 F1=40 F2=880 Droop=0 Phase=0 Envelope=0,100 46797,49 287919,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=112 F1=311.127 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=0 Method=1 Param=89 Envelope1=0,100 48383,50 310128,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/oom_paa.ds000066400000000000000000000014641247673406200225110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=0 Resonance=40 FilterEnv=0,5 2935,5 6583,0 9835,0 10390,10 444000,100 444000,0 [Tone] On=1 Level=128 F1=200 F2=50 Droop=58 Phase=60 Envelope=0,100 397,52 1428,29 3490,15 6980,10 16339,0 [Noise] On=1 Level=53 Slope=-83 Envelope=0,16 1500,53 14991,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=315 Wave1=4 Track1=0 F2=630 Wave2=4 Track2=0 Method=0 Param=54 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=10 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc_fx/oom_pulse.ds000066400000000000000000000014651247673406200231010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=84 FilterEnv=0,5 2935,5 6583,0 9835,0 10390,10 444000,100 444000,0 [Tone] On=1 Level=128 F1=500 F2=100 Droop=49 Phase=60 Envelope=0,100 397,52 1428,29 3490,15 6980,10 16339,0 [Noise] On=0 Level=53 Slope=-83 Envelope=0,16 1500,53 14991,0 FixedSeq=0 [Overtones] On=0 Level=119 F1=315 Wave1=4 Track1=0 F2=630 Wave2=4 Track2=0 Method=0 Param=54 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=10 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=2 Rate=5 lmms-1.1.3/data/samples/drumsynth/misc_fx/owwww.ds000066400000000000000000000014711247673406200222660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=6 Filter=1 HighPass=0 Resonance=79 FilterEnv=0,98 6425,53 9042,86 11580,50 15149,61 20860,18 37913,0 442000,100 442000,0 [Tone] On=0 Level=73 F1=700 F2=20 Droop=18 Phase=7643 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=55 F1=880 Wave1=0 Track1=0 F2=110 Wave2=3 Track2=0 Method=0 Param=20 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 22367,57 27523,98 32599,0 Filter=0 [NoiseBand] On=1 Level=38 F=55 dF=8 Envelope=0,100 9042,35 36882,0 [NoiseBand2] On=0 Level=20 F=3100 dF=40 Envelope=0,100 4918,27 35851,0 [Distortion] On=1 Clipping=32 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/playing_in_water.ds000066400000000000000000000014571247673406200244330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=52 FilterEnv=0,100 523,56 998,29 4124,11 7535,3 444000,100 444000,0 [Tone] On=0 Level=181 F1=40 F2=880 Droop=0 Phase=0 Envelope=0,100 46797,49 287919,0 [Noise] On=1 Level=157 Slope=0 Envelope=0,100 500,20 33630,0 FixedSeq=1 [Overtones] On=0 Level=112 F1=311.127 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=0 Method=1 Param=89 Envelope1=0,100 48383,50 310128,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/plot_thickens_2.ds000066400000000000000000000015611247673406200241630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-7 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,11 6092,5 442000,100 442000,0 [Tone] On=0 Level=1 F1=5633 F2=100 Droop=12 Phase=0 Envelope=0,100 5250,30 53935,20 104698,86 191946,32 264917,23 303782,44 333923,41 398962,5 398962,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 2887,24 5425,0 FixedSeq=0 [Overtones] On=1 Level=137 F1=65.406 Wave1=1 Track1=0 F2=220 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 319646,95 391031,0 Envelope2=0,100 129286,20 248261,93 391031,0 Filter=0 [NoiseBand] On=1 Level=146 F=122 dF=17 Envelope=0,100 11104,53 31727,26 81696,9 161013,0 [NoiseBand2] On=0 Level=101 F=3100 dF=60 Envelope=0,100 1079,11 4500,0 [Distortion] On=0 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/punch_flange.ds000066400000000000000000000016211247673406200235220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=0 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 120640,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=20 Droop=70 Phase=00 Envelope=0,100 23785,90 120165,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=342 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=2 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=49 Bits=7 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_fx/punch_flange_2.ds000066400000000000000000000016211247673406200237430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=0 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 351372,1 442000,100 442000,0 [Tone] On=1 Level=181 F1=500 F2=50 Droop=97 Phase=00 Envelope=0,100 64246,29 325991,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=342 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=2 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=49 Bits=7 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_fx/q_zone_drone.ds000066400000000000000000000020561247673406200235560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=3 Filter=1 HighPass=1 Resonance=66 FilterEnv=0,77 5203,82 12437,56 17513,56 19797,48 24874,48 28681,34 38199,56 44925,13 58377,54 68530,5 442000,100 442000,0 [Tone] On=0 Level=128 F1=150 F2=300 Droop=78 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=16 Slope=-59 Envelope=0,100 5584,34 12056,81 22209,68 27031,8 40229,39 46194,84 61169,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=1 F2=220 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 57996,89 67260,0 Envelope2=0,46 7234,79 8883,32 21447,58 30204,19 40356,68 45813,60 52793,81 68656,0 Filter=0 [NoiseBand] On=1 Level=92 F=880 dF=10 Envelope=0,100 9645,62 16879,80 26270,10 42260,83 50509,52 58631,90 67260,0 [NoiseBand2] On=1 Level=94 F=55 dF=7 Envelope=0,6 1500,30 19924,53 28935,36 34645,73 43021,46 51905,73 62184,55 68022,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/recption.ds000066400000000000000000000014171247673406200227170ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=500 Level=-7 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=82 F1=20 F2=9000 Droop=0 Phase=0 Envelope=0,100 5846,38 18439,0 25384,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=315 Wave1=4 Track1=1 F2=630 Wave2=1 Track2=0 Method=1 Param=100 Envelope1=0,100 11593,67 22486,0 Envelope2=0,100 24435,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/sci-fi.ds000066400000000000000000000015331247673406200222450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=-3 Filter=0 HighPass=0 Resonance=63 FilterEnv=0,1 6504,17 444000,100 444000,0 [Tone] On=1 Level=1 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=90 Envelope=0,71 635,11 2459,50 2459,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=4336 Wave1=4 Track1=1 F2=142 Wave2=0 Track2=0 Method=1 Param=100 Envelope1=0,85 1904,53 10708,29 18639,0 Envelope2=0,100 19036,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=12 Bits=6 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/sci-fi_door_open.ds000066400000000000000000000013751247673406200243150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=200 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=133 F1=120 F2=50 Droop=73 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=144 Slope=100 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=110 Wave2=1 Track2=1 Method=1 Param=86 Envelope1=0,62 11343,86 19288,0 Envelope2=0,4 3398,40 13492,23 19388,0 Filter=0 [NoiseBand] On=0 Level=36 F=130 dF=15 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=16 F=10000 dF=15 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/sickly_wineglass.ds000066400000000000000000000014551247673406200244500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=0 FilterEnv=0,74 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=181 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=134 F1=1900 Wave1=0 Track1=0 F2=3420 Wave2=0 Track2=0 Method=1 Param=61 Envelope1=0,100 1250,20 62311,0 Envelope2=0,100 1000,20 9772,47 15736,29 30204,56 43402,23 52666,62 64976,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/sign_off.ds000066400000000000000000000020741247673406200226660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=1000 Level=0 Filter=1 HighPass=1 Resonance=13 FilterEnv=0,89 1449,100 3048,11 5347,84 7196,18 9894,59 11693,17 14391,45 17389,22 442000,100 442000,0 [Tone] On=1 Level=172 F1=5633 F2=55 Droop=2 Phase=0 Envelope=0,100 1586,0 4184,56 5830,10 6702,61 7932,10 8546,38 11293,33 13941,77 16240,15 17889,29 20388,0 [Noise] On=1 Level=108 Slope=90 Envelope=0,100 555,21 6696,20 18789,0 FixedSeq=0 [Overtones] On=1 Level=163 F1=4872 Wave1=1 Track1=0 F2=3283 Wave2=3 Track2=1 Method=3 Param=10 Envelope1=0,15 3750,30 13192,49 19338,0 Envelope2=0,100 1399,8 3098,89 4048,8 8095,76 9444,13 12043,62 14641,6 16990,57 20787,0 Filter=0 [NoiseBand] On=1 Level=146 F=220 dF=10 Envelope=0,14 3728,64 6821,20 11104,53 12056,14 14991,32 16022,8 17767,38 18560,0 22367,0 [NoiseBand2] On=1 Level=101 F=330 dF=8 Envelope=0,100 2617,8 4997,34 6980,11 12135,62 14674,11 17688,32 23240,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/slow_moving_traffic.ds000066400000000000000000000015401247673406200251320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=-4 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,11 6223,17 444000,100 444000,0 [Tone] On=1 Level=9 F1=8000 F2=30 Droop=20 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 4442,0 [Noise] On=0 Level=101 Slope=-10 Envelope=0,100 857,34 2602,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=55 Wave1=0 Track1=1 F2=4353 Wave2=4 Track2=0 Method=1 Param=90 Envelope1=0,7 444,67 1174,24 2570,75 4632,93 6885,10 8820,35 10406,0 Envelope2=0,15 2379,35 3458,92 5616,24 7234,24 8566,69 11580,0 Filter=0 [NoiseBand] On=0 Level=74 F=220 dF=20 Envelope=0,100 750,20 2221,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=27 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/synthetic_dive.ds000066400000000000000000000014301247673406200241100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=18 FilterEnv=0,0 23858,3 442000,100 442000,0 [Tone] On=1 Level=128 F1=80 F2=20 Droop=15 Phase=180 Envelope=0,100 22336,74 37691,0 [Noise] On=0 Level=16 Slope=-59 Envelope=0,100 4500,30 9000,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=440 Wave1=0 Track1=1 F2=220 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=92 F=880 dF=10 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=94 F=55 dF=7 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=41 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/synthetic_dive_crust.ds000066400000000000000000000014301247673406200253300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=18 FilterEnv=0,0 23858,3 442000,100 442000,0 [Tone] On=1 Level=128 F1=80 F2=20 Droop=15 Phase=180 Envelope=0,100 22336,74 37691,0 [Noise] On=0 Level=16 Slope=-59 Envelope=0,100 4500,30 9000,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=440 Wave1=0 Track1=1 F2=220 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=92 F=880 dF=10 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=94 F=55 dF=7 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=41 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/teeth.ds000066400000000000000000000015141247673406200222030ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=-3 Filter=1 HighPass=1 Resonance=73 FilterEnv=0,98 4838,23 19036,14 444000,100 444000,0 [Tone] On=1 Level=1 F1=880 F2=55 Droop=0 Phase=65 Envelope=0,100 2379,46 7932,20 17926,6 42514,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=100 Wave1=0 Track1=0 F2=20 Wave2=4 Track2=1 Method=1 Param=30 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=8865 dF=90 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=15 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/the_plot_thickens.ds000066400000000000000000000016661247673406200246100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,21 14277,30 33313,65 46797,27 75351,50 80903,26 97559,29 107871,12 115802,20 123734,5 442000,100 442000,0 [Tone] On=1 Level=1 F1=40392 F2=880 Droop=50 Phase=0 Envelope=0,100 16656,47 30140,29 51556,14 140390,0 [Noise] On=1 Level=94 Slope=96 Envelope=0,2 198,91 397,25 523,83 841,11 1340,93 1658,14 2284,30 3974,0 FixedSeq=1 [Overtones] On=1 Level=114 F1=5200 Wave1=4 Track1=0 F2=195.998 Wave2=2 Track2=1 Method=2 Param=89 Envelope1=0,100 48383,35 88041,20 189567,7 208603,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=101 F=5732 dF=99 Envelope=0,100 1758,38 327577,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/the_tweek.ds000066400000000000000000000015721247673406200230550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=-6 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 133252,41 442000,100 442000,0 [Tone] On=1 Level=118 F1=6995 F2=50 Droop=7 Phase=00 Envelope=0,100 6028,25 10628,0 22764,0 [Noise] On=1 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=342 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=2 Param=90 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=1 Clipping=41 Bits=0 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_fx/transportive.ds000066400000000000000000000014371247673406200236360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=1 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,21 442000,100 442000,0 [Tone] On=0 Level=181 F1=40 F2=880 Droop=0 Phase=0 Envelope=0,100 46797,49 287919,0 [Noise] On=0 Level=112 Slope=100 Envelope=0,100 1904,46 8487,20 42355,0 FixedSeq=1 [Overtones] On=1 Level=76 F1=311.127 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=0 Method=3 Param=89 Envelope1=0,100 48383,50 310128,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/ufo_buzz.ds000066400000000000000000000014151247673406200227350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=500 Level=-9 Filter=1 HighPass=1 Resonance=45 FilterEnv=0,0 19829,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=1200 F2=200 Droop=0 Phase=0 Envelope=0,100 19294,67 19666,0 [Noise] On=0 Level=130 Slope=-100 Envelope=0,100 596,8 1490,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=440 Wave1=4 Track1=0 F2=5 Wave2=2 Track2=0 Method=2 Param=100 Envelope1=0,100 19294,67 19666,0 Envelope2=0,100 10311,89 19070,100 19070,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=15 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/ufo_buzz_2.ds000066400000000000000000000014151247673406200231560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=500 Level=-6 Filter=1 HighPass=1 Resonance=57 FilterEnv=0,0 19829,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1200 F2=200 Droop=0 Phase=0 Envelope=0,100 19294,67 19666,0 [Noise] On=0 Level=130 Slope=-100 Envelope=0,100 596,8 1490,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=220 Wave1=4 Track1=1 F2=5 Wave2=2 Track2=1 Method=2 Param=100 Envelope1=0,100 19294,67 19666,0 Envelope2=0,100 10311,89 19070,100 19070,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=15 Bits=3 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/what_time_is_it.ds000066400000000000000000000016671247673406200242530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=-3 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,21 14277,30 33313,65 46797,27 75351,50 80903,26 97559,29 107871,12 115802,20 123734,5 442000,100 442000,0 [Tone] On=1 Level=1 F1=40392 F2=880 Droop=50 Phase=0 Envelope=0,100 16656,47 30140,29 51556,14 140390,0 [Noise] On=1 Level=94 Slope=96 Envelope=0,2 198,91 397,25 523,83 841,11 1340,93 1658,14 2284,30 3974,0 FixedSeq=1 [Overtones] On=1 Level=114 F1=5200 Wave1=1 Track1=1 F2=195.998 Wave2=3 Track2=0 Method=1 Param=89 Envelope1=0,100 48383,35 88041,20 189567,7 208603,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=101 F=5732 dF=99 Envelope=0,100 1758,38 327577,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=5 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_fx/wipeout.ds000066400000000000000000000015431247673406200225700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=23 FilterEnv=0,1 11104,78 19036,14 444000,100 444000,0 [Tone] On=0 Level=1 F1=880 F2=55 Droop=70 Phase=65 Envelope=0,100 2379,46 7932,20 13008,8 15784,0 22526,0 [Noise] On=0 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=1 Level=110 F1=100 Wave1=0 Track1=1 F2=77 Wave2=4 Track2=1 Method=3 Param=70 Envelope1=0,100 1904,53 7059,17 12611,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=30 Bits=1 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_fx/wooo.ds000066400000000000000000000015111247673406200220520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=9 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,0 5996,62 14816,73 444000,100 444000,0 [Tone] On=1 Level=128 F1=20 F2=600 Droop=32 Phase=0 Envelope=0,25 7995,72 14182,0 [Noise] On=1 Level=34 Slope=-70 Envelope=0,100 635,66 2518,50 5108,79 6599,31 10375,81 13262,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=500 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=2 Param=0 Envelope1=0,9 3585,53 16117,0 Envelope2=0,100 2233,74 4782,95 6856,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=26 Envelope=0,61 1678,71 5558,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_fx/yeah_hit.ds000066400000000000000000000014521247673406200226650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 2062,28 444000,100 444000,0 [Tone] On=1 Level=163 F1=2000 F2=50 Droop=50 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=136 F1=880 Wave1=0 Track1=0 F2=110 Wave2=2 Track2=0 Method=1 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 5790,92 10153,65 19671,49 28554,20 42990,0 Filter=0 [NoiseBand] On=1 Level=137 F=210 dF=70 Envelope=0,44 2250,30 39738,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/yeah_hit_dry.ds000066400000000000000000000014521247673406200235430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 2062,28 444000,100 444000,0 [Tone] On=1 Level=163 F1=2000 F2=50 Droop=50 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=136 F1=880 Wave1=0 Track1=0 F2=110 Wave2=2 Track2=0 Method=1 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 5790,92 10153,65 19671,49 28554,20 42990,0 Filter=0 [NoiseBand] On=0 Level=137 F=210 dF=70 Envelope=0,44 2250,30 39738,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_fx/zipper.ds000066400000000000000000000014311247673406200224010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-4 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,89 5949,32 16419,6 444000,100 444000,0 [Tone] On=1 Level=181 F1=8000 F2=34 Droop=20 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=1 Param=100 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=0 Level=101 F=50 dF=20 Envelope=0,44 2250,30 8883,8 18957,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=8 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/000077500000000000000000000000001247673406200210635ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_hats/amen_ride.ds000066400000000000000000000015611247673406200233410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=1 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,74 7710,51 13769,50 444000,100 444000,0 [Tone] On=1 Level=24 F1=800 F2=500 Droop=86 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=128 Slope=62 Envelope=0,91 1110,62 2411,41 4822,21 7900,8 11073,3 14436,0 FixedSeq=1 [Overtones] On=1 Level=139 F1=1020 Wave1=0 Track1=0 F2=150 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,91 1110,62 2919,37 5647,20 8376,14 14436,0 Envelope2=0,100 4025,50 10232,0 Filter=0 [NoiseBand] On=1 Level=32 F=305 dF=12 Envelope=0,100 1473,58 4164,29 7456,14 10490,0 [NoiseBand2] On=1 Level=74 F=5000 dF=78 Envelope=0,100 1618,46 3141,33 4473,17 6789,8 15419,0 [Distortion] On=1 Clipping=10 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/band_pass_cymbal.ds000066400000000000000000000016271247673406200247020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-3 Stretch=100 Level=4 Filter=1 HighPass=1 Resonance=13 FilterEnv=0,51 8646,37 18084,38 31251,68 40927,40 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=76 Slope=100 Envelope=0,92 793,34 3490,5 6028,0 FixedSeq=1 [Overtones] On=1 Level=94 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,74 1586,29 5235,18 11580,11 22843,6 39500,0 Envelope2=0,79 16736,85 39182,88 42514,0 Filter=0 [NoiseBand] On=1 Level=59 F=8000 dF=70 Envelope=0,100 872,92 2221,21 5473,16 11897,7 20146,3 39500,0 [NoiseBand2] On=1 Level=37 F=15000 dF=40 Envelope=0,100 872,92 2221,21 5473,16 11897,7 20146,3 39500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/basic_hh.ds000066400000000000000000000013361247673406200231560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=6 FilterEnv=0,47 206,71 442000,100 443000,0 [Tone] On=0 Level=181 F1=180 F2=50 Droop=31 Phase=10 Envelope=0,0 0,96 715,39 2458,16 6481,0 [Noise] On=1 Level=100 Slope=100 Envelope=0,0 0,93 380,39 1140,9 2407,0 FixedSeq=0 [Overtones] On=1 Level=106 F1=1000 Wave1=0 Track1=0 F2=500 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 554,38 1488,8 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=0 Level=146 F=400 dF=34 Envelope=0,99 670,21 1788,4 5810,0 [NoiseBand2] On=0 Level=158 F=3000 dF=89 Envelope=0,100 100,30 3547,0 [Distortion] On=0 Clipping=7 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_hats/bright_808_hat.ds000066400000000000000000000014561247673406200241330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=20 FilterEnv=0,65 1071,91 2161,93 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=102 Slope=100 Envelope=0,100 1190,21 2657,7 4382,0 FixedSeq=0 [Overtones] On=0 Level=160 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=2 Param=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=28 F=1800 dF=14 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=65 F=3000 dF=8 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=22 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/bright_808_hat_2.ds000066400000000000000000000014561247673406200243540ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=20 FilterEnv=0,65 1071,91 2161,93 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=102 Slope=100 Envelope=0,100 1190,21 2657,7 7813,0 FixedSeq=0 [Overtones] On=0 Level=160 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=2 Param=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=28 F=1800 dF=14 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=65 F=3000 dF=8 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=22 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/bright_808_hat_3.ds000066400000000000000000000014711247673406200243520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0.00 Stretch=150 Level=0 Filter=0 HighPass=0 Resonance=20 FilterEnv=0,65 1071,91 2161,93 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=92 Slope=100 Envelope=0,100 7170,88 10026,7 13357,0 FixedSeq=0 [Overtones] On=1 Level=12 F1=4302 Wave1=0 Track1=0 F2=8201 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,20 8217,74 12659,0 Envelope2=0,100 3000,74 9455,74 13389,0 Filter=0 [NoiseBand] On=0 Level=28 F=1800 dF=14 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=65 F=3000 dF=8 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=22 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/bring_me_out.ds000066400000000000000000000014571247673406200240730ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,100 633,14 3658,47 444000,100 444000,0 [Tone] On=0 Level=181 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=1 Level=129 Slope=83 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=3 Param=2 Envelope1=0,100 1156,57 3816,29 6698,0 Envelope2=0,100 3009,48 6191,0 Filter=0 [NoiseBand] On=1 Level=84 F=6000 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=1 Level=128 F=3100 dF=89 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_hats/clicky_hat.ds000066400000000000000000000015061247673406200235270ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,63 635,94 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=30 Slope=100 Envelope=0,92 270,35 809,8 1919,2 3569,0 FixedSeq=1 [Overtones] On=1 Level=94 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 381,20 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=59 F=20000 dF=50 Envelope=0,100 238,30 838,8 1891,0 [NoiseBand2] On=1 Level=24 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/close_ride.ds000066400000000000000000000016571247673406200235340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-2 Stretch=110 Level=6 Filter=1 HighPass=1 Resonance=13 FilterEnv=0,51 8646,37 18084,38 32123,35 68054,25 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=76 Slope=100 Envelope=0,92 793,34 3490,5 6028,0 FixedSeq=1 [Overtones] On=1 Level=94 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 872,92 3093,28 6425,17 13563,10 24271,6 93276,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=59 F=20000 dF=50 Envelope=0,100 872,92 1428,36 2855,17 7138,6 14277,4 26412,2 39976,1 87090,0 [NoiseBand2] On=1 Level=24 F=12000 dF=44 Envelope=0,100 872,92 1904,29 5711,14 13087,7 24747,5 87565,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/default_hi-hat.ds000066400000000000000000000013741247673406200242760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=-5 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=181 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/drama_hat.ds000066400000000000000000000013211247673406200233300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-4 Stretch=50 Level=-2 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,17 800,71 41721,59 442000,100 443000,0 [Tone] On=1 Level=12 F1=851 F2=500 Droop=74 Phase=0 Envelope=0,58 571,14 952,0 [Noise] On=1 Level=181 Slope=87 Envelope=0,51 555,21 1428,5 2379,0 FixedSeq=0 [Overtones] On=1 Level=125 F1=400 Wave1=3 Track1=1 F2=765 Wave2=3 Track2=0 Method=3 Param=32 Envelope1=0,100 1699,10 3490,0 Envelope2=0,89 39896,89 40531,0 Filter=0 [NoiseBand] On=0 Level=102 F=6800 dF=40 Envelope=0,100 750,16 1983,2 3490,0 [NoiseBand2] On=0 Level=82 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/drama_hat_2.ds000066400000000000000000000013211247673406200235510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-6 Stretch=50 Level=-2 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,17 800,71 41721,59 442000,100 443000,0 [Tone] On=1 Level=12 F1=851 F2=500 Droop=74 Phase=0 Envelope=0,58 571,14 952,0 [Noise] On=1 Level=181 Slope=87 Envelope=0,51 555,21 1428,5 2379,0 FixedSeq=0 [Overtones] On=1 Level=125 F1=400 Wave1=3 Track1=1 F2=765 Wave2=3 Track2=0 Method=3 Param=32 Envelope1=0,100 1699,10 3490,0 Envelope2=0,89 39896,89 40531,0 Filter=0 [NoiseBand] On=0 Level=102 F=6800 dF=40 Envelope=0,100 750,16 1983,2 3490,0 [NoiseBand2] On=0 Level=82 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/dusty_simple_hh.ds000066400000000000000000000014651247673406200246210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=-7 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 871,33 3214,17 444000,100 444000,0 [Tone] On=0 Level=181 F1=60210 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=128 Slope=20 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/dusty_simple_oh.ds000066400000000000000000000014701247673406200246240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=-7 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=1 FilterEnv=0,32 2074,30 3214,17 444000,100 444000,0 [Tone] On=0 Level=181 F1=60210 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=128 Slope=20 Envelope=0,100 2945,82 4972,0 FixedSeq=1 [Overtones] On=1 Level=137 F1=2000 Wave1=0 Track1=0 F2=1020 Wave2=0 Track2=0 Method=3 Param=1 Envelope1=0,100 2502,97 5210,0 Envelope2=0,100 2074,89 6239,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/electro_hh.ds000066400000000000000000000014461247673406200235340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,11 269,53 444000,100 444000,0 [Tone] On=0 Level=137 F1=565 F2=120 Droop=40 Phase=0 Envelope=0,100 1750,20 3579,0 [Noise] On=1 Level=128 Slope=70 Envelope=0,71 586,27 1758,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=8865 dF=90 Envelope=0,68 618,66 1124,62 1504,47 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/electrometallic_hat.ds000066400000000000000000000015141247673406200254200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,77 849,95 7645,100 442000,100 442000,0 [Tone] On=0 Level=123 F1=880 F2=112 Droop=50 Phase=15 Envelope=0,100 1799,51 2998,27 5347,1 8095,0 [Noise] On=1 Level=132 Slope=54 Envelope=0,100 1849,57 4500,30 6496,11 9000,0 FixedSeq=0 [Overtones] On=1 Level=80 F1=5200 Wave1=0 Track1=0 F2=1050 Wave2=0 Track2=0 Method=3 Param=10 Envelope1=0,100 2439,95 7895,0 19888,0 Envelope2=0,100 1099,71 3348,44 22336,0 Filter=0 [NoiseBand] On=1 Level=119 F=6000 dF=65 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/errie_ride.ds000066400000000000000000000016571247673406200235350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-3 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,50 442000,100 442000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=94 Slope=100 Envelope=0,100 1666,30 4500,17 12849,5 26888,2 65436,0 FixedSeq=0 [Overtones] On=1 Level=96 F1=127 Wave1=0 Track1=0 F2=810 Wave2=0 Track2=0 Method=3 Param=5 Envelope1=0,69 714,46 2617,26 8328,14 14515,7 22605,5 32599,4 44497,2 64246,0 Envelope2=0,100 83758,100 83758,0 Filter=0 [NoiseBand] On=1 Level=108 F=15000 dF=37 Envelope=0,74 714,55 1190,29 4997,19 9280,14 16894,9 26888,5 38072,3 69243,0 [NoiseBand2] On=1 Level=108 F=11542 dF=32 Envelope=0,73 1428,44 3807,29 7138,13 15943,5 31171,2 50683,1 63295,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/fedora_hat.ds000066400000000000000000000013371247673406200235130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=12 Stretch=5 Level=3 Filter=1 HighPass=1 Resonance=92 FilterEnv=0,47 115,74 442000,100 443000,0 [Tone] On=0 Level=128 F1=180 F2=40 Droop=43 Phase=10 Envelope=0,0 0,41 715,39 4228,21 22526,0 [Noise] On=1 Level=72 Slope=18 Envelope=0,0 30,93 723,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=11 F1=360 Wave1=1 Track1=0 F2=60 Wave2=2 Track2=0 Method=1 Param=46 Envelope1=0,100 1490,17 22367,0 Envelope2=0,100 3252,66 7077,0 Filter=0 [NoiseBand] On=0 Level=61 F=385 dF=31 Envelope=0,63 670,21 1788,4 5810,0 [NoiseBand2] On=0 Level=128 F=1000 dF=82 Envelope=0,0 115,14 1039,11 1504,0 [Distortion] On=1 Clipping=24 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/feelin'_high_hat_1.ds000066400000000000000000000013521247673406200250000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=34 FilterEnv=0,25 855,88 14691,50 442000,100 443000,0 [Tone] On=0 Level=181 F1=200 F2=47 Droop=50 Phase=110 Envelope=0,0 0,100 899,38 4247,15 21737,0 [Noise] On=1 Level=146 Slope=100 Envelope=0,0 20,80 813,38 2637,0 FixedSeq=0 [Overtones] On=1 Level=98 F1=500 Wave1=4 Track1=1 F2=800 Wave2=1 Track2=0 Method=3 Param=3 Envelope1=0,0 20,80 1091,24 2637,0 Envelope2=0,0 20,80 813,38 2637,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=5 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/feelin'_high_hat_2.ds000066400000000000000000000013521247673406200250010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=34 FilterEnv=0,25 855,88 14691,50 442000,100 443000,0 [Tone] On=0 Level=181 F1=200 F2=47 Droop=50 Phase=110 Envelope=0,0 0,100 899,38 4247,15 21737,0 [Noise] On=1 Level=123 Slope=100 Envelope=0,0 20,80 813,38 2637,0 FixedSeq=0 [Overtones] On=1 Level=16 F1=500 Wave1=4 Track1=1 F2=800 Wave2=1 Track2=0 Method=3 Param=3 Envelope1=0,0 20,80 1091,24 2637,0 Envelope2=0,0 20,80 813,38 2637,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=5 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/feelin'_high_hat_3.ds000066400000000000000000000013511247673406200250010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=-3 Filter=1 HighPass=1 Resonance=8 FilterEnv=0,25 99,65 14691,50 442000,100 443000,0 [Tone] On=0 Level=181 F1=200 F2=47 Droop=50 Phase=110 Envelope=0,0 0,100 899,38 4247,15 21737,0 [Noise] On=1 Level=146 Slope=100 Envelope=0,0 20,80 813,38 2637,0 FixedSeq=0 [Overtones] On=1 Level=98 F1=500 Wave1=4 Track1=1 F2=800 Wave2=1 Track2=0 Method=3 Param=3 Envelope1=0,0 20,80 1091,24 2637,0 Envelope2=0,0 20,80 813,38 2637,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=5 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/feelin'_open_high_hat.ds000066400000000000000000000014011247673406200255740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=130 Level=-1 Filter=0 HighPass=0 Resonance=34 FilterEnv=0,25 855,88 14691,50 442000,100 443000,0 [Tone] On=0 Level=181 F1=200 F2=47 Droop=50 Phase=110 Envelope=0,0 0,100 899,38 4247,15 21737,0 [Noise] On=1 Level=123 Slope=100 Envelope=0,0 20,80 2340,49 5076,38 7099,7 9320,0 FixedSeq=0 [Overtones] On=1 Level=60 F1=500 Wave1=4 Track1=1 F2=790 Wave2=1 Track2=0 Method=3 Param=3 Envelope1=0,0 20,80 2161,37 8883,0 Envelope2=0,0 0,80 1567,74 5255,53 9478,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=5 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/flat_cymbal.ds000066400000000000000000000014721247673406200236740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=200 Level=-11 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=181 F1=50 F2=50 Droop=0 Phase=0 Envelope=0,100 1777,58 5250,30 15990,8 42006,0 [Noise] On=1 Level=181 Slope=100 Envelope=0,100 1777,58 5250,30 9772,20 16117,10 23478,5 31854,2 45559,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=50 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=45 F=300 dF=12 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=1 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/get_out.ds000066400000000000000000000014761247673406200230710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=300 Level=-3 Filter=0 HighPass=1 Resonance=0 FilterEnv=0,84 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=108 Slope=100 Envelope=0,100 350,63 800,39 1799,23 3498,10 7495,3 11243,0 17282,0 FixedSeq=0 [Overtones] On=1 Level=150 F1=5182 Wave1=3 Track1=0 F2=4399 Wave2=3 Track2=0 Method=1 Param=61 Envelope1=0,100 968,60 10355,16 19964,0 Envelope2=0,100 968,60 10429,17 19890,0 Filter=1 [NoiseBand] On=1 Level=55 F=9200 dF=49 Envelope=0,100 819,78 9088,28 17282,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/hardhat.ds000066400000000000000000000015151247673406200230300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=11 FilterEnv=0,18 444000,100 444000,0 [Tone] On=0 Level=133 F1=160 F2=140 Droop=55 Phase=30 Envelope=0,100 3448,27 10500,0 [Noise] On=1 Level=166 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=174 F1=200 Wave1=0 Track1=0 F2=11 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 2498,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=84 Envelope=0,100 2099,58 5447,36 11343,0 [NoiseBand2] On=0 Level=158 F=3100 dF=94 Envelope=0,100 750,47 2199,20 5047,5 10993,0 [Distortion] On=1 Clipping=6 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/hardhat_2.ds000066400000000000000000000015131247673406200232470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=11 FilterEnv=0,18 444000,100 444000,0 [Tone] On=0 Level=133 F1=160 F2=140 Droop=55 Phase=30 Envelope=0,100 3448,27 10500,0 [Noise] On=1 Level=166 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=174 F1=200 Wave1=0 Track1=0 F2=11 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 2498,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=1 Level=71 F=5000 dF=100 Envelope=0,100 1099,29 2099,7 4500,0 [NoiseBand2] On=0 Level=158 F=3100 dF=94 Envelope=0,100 750,47 2199,20 5047,5 10993,0 [Distortion] On=1 Clipping=6 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/hardly_hh.ds000066400000000000000000000014411247673406200233550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,9 3268,21 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=181 Slope=81 Envelope=0,100 222,21 1500,0 FixedSeq=1 [Overtones] On=1 Level=79 F1=300 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=3 Param=50 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 2189,100 3775,86 6250,0 Filter=0 [NoiseBand] On=1 Level=89 F=8000 dF=84 Envelope=0,100 444,22 1586,2 3712,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/heavy_electrihat.ds000066400000000000000000000015061247673406200247350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=80 Level=-9 Filter=1 HighPass=1 Resonance=15 FilterEnv=0,70 5996,64 442000,100 442000,0 [Tone] On=0 Level=172 F1=5633 F2=55 Droop=32 Phase=0 Envelope=0,100 1586,0 4184,56 5830,10 6702,61 7932,10 8546,38 22886,0 [Noise] On=0 Level=128 Slope=-85 Envelope=0,100 555,21 1448,4 2439,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=4872 Wave1=1 Track1=1 F2=3283 Wave2=3 Track2=0 Method=3 Param=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=146 F=122 dF=67 Envelope=0,100 11104,53 31727,26 81696,9 161013,0 [NoiseBand2] On=0 Level=101 F=5555 dF=60 Envelope=0,100 932,0 2578,0 [Distortion] On=1 Clipping=26 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/hh.ds000066400000000000000000000014071247673406200220140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=50 Level=1 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,40 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 635,11 10500,0 [Noise] On=1 Level=85 Slope=100 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=4364 Wave1=3 Track1=0 F2=7642 Wave2=3 Track2=0 Method=0 Param=0 Envelope1=0,83 888,19 6218,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=1 Level=115 F=9500 dF=49 Envelope=0,100 819,78 1639,24 4470,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=32 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/hip_overtone_hat.ds000066400000000000000000000014241247673406200247510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=180 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,62 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=123 Slope=57 Envelope=0,100 2031,5 9000,0 FixedSeq=1 [Overtones] On=1 Level=88 F1=6543 Wave1=3 Track1=0 F2=2000 Wave2=3 Track2=0 Method=3 Param=10 Envelope1=0,100 3300,15 7500,0 Envelope2=0,100 10866,63 31251,44 68910,0 Filter=0 [NoiseBand] On=1 Level=45 F=7600 dF=81 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=68 F=9000 dF=40 Envelope=0,80 1523,94 7535,26 13087,10 32996,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/large_open_hh.ds000066400000000000000000000014131247673406200242040ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,49 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=96 Slope=100 Envelope=0,100 2439,95 19888,0 FixedSeq=1 [Overtones] On=1 Level=74 F1=5200 Wave1=0 Track1=0 F2=1025 Wave2=0 Track2=0 Method=3 Param=9 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 2439,95 19888,0 Filter=0 [NoiseBand] On=1 Level=65 F=6000 dF=75 Envelope=0,100 2439,95 19888,0 [NoiseBand2] On=1 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/lighthat.ds000066400000000000000000000015101247673406200232140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=11 FilterEnv=0,80 444000,100 444000,0 [Tone] On=0 Level=133 F1=160 F2=140 Droop=55 Phase=30 Envelope=0,100 3448,27 10500,0 [Noise] On=1 Level=92 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=174 F1=200 Wave1=0 Track1=0 F2=11 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 2498,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=1 Level=71 F=5000 dF=100 Envelope=0,100 1099,29 2099,7 4500,0 [NoiseBand2] On=1 Level=96 F=3100 dF=100 Envelope=0,100 200,35 450,15 1849,5 4997,0 [Distortion] On=0 Clipping=6 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/little_hat.ds000066400000000000000000000014231247673406200235440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,62 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=96 Slope=100 Envelope=0,100 2648,50 6296,20 12243,9 25584,0 FixedSeq=1 [Overtones] On=1 Level=80 F1=1500 Wave1=3 Track1=0 F2=650 Wave2=3 Track2=0 Method=3 Param=29 Envelope1=0,100 3750,30 11843,8 24535,0 Envelope2=0,100 61629,86 92087,0 Filter=0 [NoiseBand] On=1 Level=55 F=5000 dF=81 Envelope=0,100 2250,30 16690,0 [NoiseBand2] On=0 Level=68 F=9000 dF=40 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/live_hat.ds000066400000000000000000000014351247673406200232110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=180 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,62 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=123 Slope=57 Envelope=0,100 2031,5 9000,0 FixedSeq=1 [Overtones] On=1 Level=88 F1=2000 Wave1=3 Track1=0 F2=1200 Wave2=3 Track2=0 Method=3 Param=29 Envelope1=0,100 3300,15 7500,0 Envelope2=0,100 10866,63 24033,82 31251,44 68910,0 Filter=0 [NoiseBand] On=1 Level=90 F=7600 dF=81 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=68 F=9000 dF=40 Envelope=0,80 1523,94 7535,26 13087,10 32996,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/live_sound_hh.ds000066400000000000000000000014101247673406200242350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100 Level=1 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,40 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 635,11 10500,0 [Noise] On=1 Level=85 Slope=86 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=4364 Wave1=3 Track1=1 F2=7642 Wave2=3 Track2=0 Method=2 Param=90 Envelope1=0,83 888,19 6218,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=1 Level=115 F=9500 dF=79 Envelope=0,100 819,78 1639,24 4470,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=32 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/live_sound_oh.ds000066400000000000000000000013711247673406200242520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=300 Level=1 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,40 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 635,11 10500,0 [Noise] On=1 Level=85 Slope=86 Envelope=0,100 1564,28 5996,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=4364 Wave1=3 Track1=1 F2=7642 Wave2=3 Track2=0 Method=2 Param=90 Envelope1=0,83 888,19 5330,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=1 Level=115 F=9500 dF=79 Envelope=0,100 1639,24 5108,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=32 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/loaded_hat.ds000066400000000000000000000014111247673406200234740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=34 FilterEnv=0,81 14691,87 442000,100 443000,0 [Tone] On=0 Level=87 F1=50 F2=70 Droop=57 Phase=10 Envelope=0,0 89,95 899,78 899,20 1549,60 2249,19 2748,10 10144,0 [Noise] On=1 Level=72 Slope=100 Envelope=0,0 0,100 4797,3 6296,0 FixedSeq=0 [Overtones] On=1 Level=111 F1=600 Wave1=0 Track1=0 F2=859 Wave2=0 Track2=0 Method=3 Param=8 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=15 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/loaded_open_hat.ds000066400000000000000000000014071247673406200245220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=400 Level=0 Filter=1 HighPass=1 Resonance=34 FilterEnv=0,81 14691,87 442000,100 443000,0 [Tone] On=0 Level=87 F1=50 F2=70 Droop=57 Phase=10 Envelope=0,0 89,95 899,78 899,20 1549,60 2249,19 2748,10 10144,0 [Noise] On=1 Level=72 Slope=100 Envelope=0,0 0,100 4797,3 6296,0 FixedSeq=0 [Overtones] On=1 Level=111 F1=600 Wave1=0 Track1=0 F2=859 Wave2=0 Track2=0 Method=3 Param=8 Envelope1=0,100 1149,49 2648,2 8545,0 Envelope2=0,100 2755,17 5400,96 5400,11 18000,0 Filter=0 [NoiseBand] On=0 Level=119 F=100 dF=18 Envelope=0,99 1788,24 4321,7 7449,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=15 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/oh_so_high_hat.ds000066400000000000000000000016311247673406200243560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=100 Level=-6 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,63 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=1000 F2=509 Droop=60 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=342 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=3525 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 7246,4 10693,0 [Distortion] On=1 Clipping=4 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/oil_hat.ds000066400000000000000000000014511247673406200230330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,100 633,14 3658,47 444000,100 444000,0 [Tone] On=0 Level=181 F1=200 F2=100 Droop=27 Phase=0 Envelope=0,100 1678,76 2724,4 5250,0 [Noise] On=0 Level=128 Slope=-18 Envelope=0,100 1235,45 2961,17 4671,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=160 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=160 F=6000 dF=82 Envelope=0,100 1742,44 5083,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=31 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_hats/pedal_hh.ds000066400000000000000000000015111247673406200231550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=-7 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=10 FilterEnv=0,65 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=113 Slope=71 Envelope=0,100 894,45 2756,18 6901,6 10044,1 16590,0 FixedSeq=1 [Overtones] On=1 Level=67 F1=4200 Wave1=3 Track1=0 F2=321 Wave2=3 Track2=0 Method=3 Param=10 Envelope1=0,100 894,45 2756,18 6901,6 13563,2 26174,0 Envelope2=0,100 1713,62 5661,35 20560,0 Filter=0 [NoiseBand] On=1 Level=45 F=6238 dF=30 Envelope=0,100 894,45 2756,18 6901,6 13563,2 16290,0 [NoiseBand2] On=1 Level=36 F=1000 dF=24 Envelope=0,100 714,13 8595,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/q_ride.ds000066400000000000000000000015011247673406200226530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=180 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,41 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=62 Slope=64 Envelope=0,100 4500,30 24493,5 53555,0 FixedSeq=1 [Overtones] On=1 Level=58 F1=6543 Wave1=3 Track1=0 F2=2000 Wave2=3 Track2=0 Method=3 Param=10 Envelope1=0,100 3300,95 8376,57 18528,26 47082,0 Envelope2=0,100 10866,63 31251,44 68910,0 Filter=0 [NoiseBand] On=0 Level=45 F=7600 dF=81 Envelope=0,100 4997,50 14515,20 23240,6 34820,0 [NoiseBand2] On=1 Level=68 F=9000 dF=40 Envelope=0,80 1523,94 7535,26 13087,10 32996,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/q_ride_2.ds000066400000000000000000000015031247673406200230760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=180 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,41 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=53 Slope=81 Envelope=0,100 1650,59 6345,24 20305,10 65357,0 FixedSeq=1 [Overtones] On=1 Level=106 F1=6543 Wave1=3 Track1=0 F2=2000 Wave2=3 Track2=0 Method=3 Param=10 Envelope1=0,100 1269,60 3426,31 10279,11 65357,0 Envelope2=0,100 10866,63 31251,44 68910,0 Filter=0 [NoiseBand] On=0 Level=45 F=7600 dF=81 Envelope=0,100 4997,50 14515,20 23240,6 34820,0 [NoiseBand2] On=1 Level=68 F=9000 dF=83 Envelope=0,100 3750,30 20940,9 56600,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/sandy_ride.ds000066400000000000000000000014471247673406200235420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=-3 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,21 442000,100 442000,0 [Tone] On=0 Level=181 F1=40 F2=880 Droop=0 Phase=0 Envelope=0,100 46797,49 287919,0 [Noise] On=1 Level=94 Slope=100 Envelope=0,100 8090,64 27364,38 120403,0 FixedSeq=1 [Overtones] On=1 Level=51 F1=5200 Wave1=2 Track1=1 F2=195.998 Wave2=2 Track2=0 Method=3 Param=59 Envelope1=0,100 48383,35 72178,12 125320,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=128 F=65.406 dF=9 Envelope=0,100 1758,38 23835,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=5 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_hats/scratchy_hh.ds000066400000000000000000000014211247673406200237100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=13 FilterEnv=0,6 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=170 Slope=96 Envelope=0,100 500,20 1301,2 4854,0 FixedSeq=1 [Overtones] On=1 Level=85 F1=542 Wave1=0 Track1=0 F2=821 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=10000 dF=80 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=87 F=17000 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=8 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/shaker_ride.ds000066400000000000000000000015101247673406200236700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=-7 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,65 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=113 Slope=81 Envelope=0,100 894,45 2756,18 6901,6 13563,2 26174,0 FixedSeq=1 [Overtones] On=1 Level=67 F1=4600 Wave1=3 Track1=0 F2=321 Wave2=3 Track2=0 Method=3 Param=10 Envelope1=0,100 894,45 2756,18 6901,6 13563,2 26174,0 Envelope2=0,100 1713,62 5661,35 20560,0 Filter=0 [NoiseBand] On=1 Level=45 F=6500 dF=30 Envelope=0,100 894,45 2756,18 6901,6 13563,2 26174,0 [NoiseBand2] On=1 Level=36 F=1000 dF=24 Envelope=0,100 714,13 2855,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/shaker_ride_long.ds000066400000000000000000000015061247673406200247140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=-7 Stretch=180 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,65 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=113 Slope=81 Envelope=0,100 894,45 2756,18 6901,6 13563,2 26174,0 FixedSeq=1 [Overtones] On=1 Level=67 F1=4600 Wave1=3 Track1=0 F2=321 Wave2=3 Track2=0 Method=3 Param=10 Envelope1=0,100 894,45 2756,18 6901,6 13563,2 26174,0 Envelope2=0,100 1713,62 5661,35 20560,0 Filter=0 [NoiseBand] On=1 Level=45 F=6500 dF=30 Envelope=0,100 894,45 2756,18 6901,6 13563,2 26174,0 [NoiseBand2] On=1 Level=36 F=1000 dF=24 Envelope=0,100 714,13 2855,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/simple_ride.ds000066400000000000000000000016341247673406200237130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=80 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=74 Slope=100 Envelope=0,100 1650,30 6853,14 14467,6 26904,5 32107,3 37945,2 54697,0 FixedSeq=0 [Overtones] On=1 Level=72 F1=338 Wave1=0 Track1=0 F2=9865 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 1396,56 3934,20 7487,12 55839,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=0 Level=76 F=9000 dF=71 Envelope=0,100 1199,100 4397,67 6346,60 9644,62 11543,50 12792,35 15540,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/sleepy_1.ds000066400000000000000000000014141247673406200231340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,62 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=109 Slope=100 Envelope=0,100 2648,34 4997,11 18789,0 FixedSeq=1 [Overtones] On=1 Level=88 F1=1500 Wave1=3 Track1=0 F2=650 Wave2=3 Track2=0 Method=3 Param=29 Envelope1=0,100 3750,30 11843,8 24535,0 Envelope2=0,100 61629,86 92087,0 Filter=0 [NoiseBand] On=1 Level=76 F=5000 dF=81 Envelope=0,100 2250,30 16690,0 [NoiseBand2] On=0 Level=68 F=9000 dF=40 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/sleepy_2.ds000066400000000000000000000014011247673406200231310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett - http://www.abel.co.uk/~maxim/ Tuning=0 Stretch=10 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,62 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=74 Slope=57 Envelope=0,100 2031,5 9000,0 FixedSeq=1 [Overtones] On=1 Level=88 F1=1000 Wave1=3 Track1=0 F2=650 Wave2=3 Track2=0 Method=3 Param=29 Envelope1=0,100 3750,30 11843,8 24535,0 Envelope2=0,100 61629,86 92087,0 Filter=0 [NoiseBand] On=1 Level=90 F=7600 dF=97 Envelope=0,100 2250,30 16690,0 [NoiseBand2] On=0 Level=68 F=9000 dF=40 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/sleepy_ride.ds000066400000000000000000000014231247673406200237170ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=120 Level=-2 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=2000 F2=50 Droop=57 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=128 Slope=100 Envelope=0,92 714,56 2776,31 5631,14 14912,2 30854,0 FixedSeq=1 [Overtones] On=1 Level=59 F1=2000 Wave1=3 Track1=1 F2=3000 Wave2=4 Track2=0 Method=3 Param=6 Envelope1=0,100 1666,44 2617,27 4045,16 7694,3 29982,0 Envelope2=0,82 2459,47 9201,25 20464,9 32678,0 Filter=0 [NoiseBand] On=1 Level=13 F=1732 dF=4 Envelope=0,100 1824,50 2776,26 4521,14 8487,7 31092,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_hats/sleepy_ride_2.ds000066400000000000000000000014661247673406200241470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=130 Level=-3 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,48 21193,37 442000,100 442000,0 [Tone] On=0 Level=128 F1=2000 F2=50 Droop=57 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=111 Slope=93 Envelope=0,100 635,63 1015,49 2792,35 5584,23 9899,14 14594,9 20178,5 26523,2 37057,0 FixedSeq=1 [Overtones] On=1 Level=59 F1=2000 Wave1=3 Track1=1 F2=3000 Wave2=4 Track2=0 Method=3 Param=6 Envelope1=0,100 1015,49 3300,25 7741,11 13706,5 23858,2 36803,0 Envelope2=0,66 9518,51 25127,25 49113,0 Filter=0 [NoiseBand] On=1 Level=13 F=1732 dF=4 Envelope=0,100 1015,49 3500,20 12818,3 36803,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_hats/slick_hat.ds000066400000000000000000000015061247673406200233560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=70 Level=0 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,63 635,94 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=104 Slope=100 Envelope=0,92 200,84 787,79 1919,2 3569,0 FixedSeq=0 [Overtones] On=1 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 381,20 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=0 Level=16 F=20000 dF=50 Envelope=0,100 238,30 838,8 1891,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/slick_hat_compressd_open.ds000066400000000000000000000014731247673406200264610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,63 635,94 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=125 Slope=100 Envelope=0,64 6663,64 6853,0 FixedSeq=0 [Overtones] On=1 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 920,100 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=16 F=20000 dF=50 Envelope=0,100 238,30 838,8 1891,0 [NoiseBand2] On=1 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/slick_hat_half_open.ds000066400000000000000000000015021247673406200253650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,63 635,94 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=125 Slope=100 Envelope=0,64 1919,59 1919,2 3569,0 FixedSeq=0 [Overtones] On=1 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 920,100 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=16 F=20000 dF=50 Envelope=0,100 238,30 838,8 1891,0 [NoiseBand2] On=1 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/slick_hat_open.ds000066400000000000000000000015141247673406200243760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=4 FilterEnv=0,63 635,94 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=1 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 920,100 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=16 F=20000 dF=50 Envelope=0,100 238,30 838,8 1891,0 [NoiseBand2] On=1 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/slide_hat.ds000066400000000000000000000017141247673406200233520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=-1 Stretch=80 Level=6 Filter=1 HighPass=1 Resonance=7 FilterEnv=0,51 8646,37 18084,38 32123,35 68054,25 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=76 Slope=94 Envelope=0,92 476,45 2379,30 5235,21 8328,13 14753,5 22843,1 31885,0 FixedSeq=0 [Overtones] On=1 Level=84 F1=200 Wave1=0 Track1=0 F2=800 Wave2=0 Track2=0 Method=3 Param=5 Envelope1=0,100 872,92 3093,28 6425,17 10708,5 15943,0 22843,0 Envelope2=0,79 16736,85 78285,75 80903,0 Filter=0 [NoiseBand] On=0 Level=59 F=20000 dF=50 Envelope=0,100 872,92 1428,36 2855,17 7138,6 14277,4 26412,2 39976,1 64008,0 [NoiseBand2] On=0 Level=24 F=12000 dF=44 Envelope=0,100 872,92 1904,29 5711,14 13087,7 24747,5 75192,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/softie_lo-fi_hat.ds000066400000000000000000000015241247673406200246300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=0 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 920,100 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=129 F=5000 dF=57 Envelope=0,40 723,38 1449,10 2249,3 8645,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/softie_lo-fi_open_hat.ds000066400000000000000000000015171247673406200256530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=0 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 920,100 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=129 F=5000 dF=57 Envelope=0,40 8895,25 13392,6 18888,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/softie_lo-fi_open_hat_2.ds000066400000000000000000000015171247673406200260740ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=170 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=0 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 920,100 920,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=129 F=5000 dF=57 Envelope=0,40 8895,25 13392,6 18888,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/squeeze_me_hat.ds000066400000000000000000000015111247673406200244070ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=9 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=1 Level=59 F1=6000 Wave1=0 Track1=0 F2=8000 Wave2=0 Track2=0 Method=3 Param=91 Envelope1=0,100 750,100 1149,29 2698,6 6746,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=0 Level=129 F=5000 dF=57 Envelope=0,40 8895,25 13392,6 18888,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/squeeze_me_open_hat.ds000066400000000000000000000015041247673406200254320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=9 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=1 Level=59 F1=6000 Wave1=0 Track1=0 F2=8000 Wave2=0 Track2=0 Method=3 Param=91 Envelope1=0,100 6896,80 10843,33 19688,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=0 Level=129 F=5000 dF=57 Envelope=0,40 8895,25 13392,6 18888,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/stack_hhh.ds000066400000000000000000000015101247673406200233440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=1 Level=11 F1=8000 F2=3000 Droop=6 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=1 Level=43 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 1396,24 3680,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=129 F=12000 dF=73 Envelope=0,100 666,11 4500,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/starry_hh.ds000066400000000000000000000014051247673406200234160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,53 871,50 444000,100 444000,0 [Tone] On=1 Level=1 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=3400 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=1 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/starry_short_oh.ds000066400000000000000000000014221247673406200246430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,53 871,50 444000,100 444000,0 [Tone] On=1 Level=1 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=128 Slope=20 Envelope=0,100 1140,69 1457,41 4671,11 8187,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=3400 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=1 Method=3 Param=0 Envelope1=0,100 8266,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/static_tone_hat.ds000066400000000000000000000014151247673406200245640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-5 Filter=0 HighPass=1 Resonance=9 FilterEnv=0,0 1507,43 8646,43 442000,100 442000,0 [Tone] On=0 Level=181 F1=8000 F2=20 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=0 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=1 Level=82 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=3 Param=59 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=0 Level=29 F=50 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=128 F=3100 dF=80 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=24 Bits=6 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/tarp_hh.ds000066400000000000000000000015351247673406200230440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=3 Filter=1 HighPass=1 Resonance=45 FilterEnv=0,77 3173,0 9994,0 444000,100 444000,0 [Tone] On=1 Level=1 F1=5632 F2=55 Droop=50 Phase=65 Envelope=0,100 1586,0 10500,0 [Noise] On=1 Level=146 Slope=-94 Envelope=0,71 635,11 1110,0 2459,0 FixedSeq=0 [Overtones] On=0 Level=110 F1=550 Wave1=0 Track1=0 F2=241 Wave2=1 Track2=1 Method=1 Param=100 Envelope1=0,100 1904,53 5235,26 11580,0 Envelope2=0,100 317,49 1110,29 2221,10 4283,0 Filter=0 [NoiseBand] On=0 Level=128 F=110 dF=10 Envelope=0,68 618,66 1124,62 1269,40 3252,15 8487,2 18877,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=8 Bits=2 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/the_sting_hat.ds000066400000000000000000000016061247673406200242360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=50 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=96 Slope=100 Envelope=0,100 1199,100 2449,59 4397,23 6346,8 9644,2 15540,0 FixedSeq=0 [Overtones] On=1 Level=123 F1=338 Wave1=0 Track1=0 F2=9865 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 400,65 1799,12 5647,2 12792,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=78 F=9000 dF=71 Envelope=0,100 1199,100 2449,59 4397,23 6346,8 9644,2 15540,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/the_sting_hat_2.ds000066400000000000000000000016111247673406200244530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=80 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=96 Slope=100 Envelope=0,35 949,80 2449,59 4397,23 6346,8 9644,2 15540,0 FixedSeq=0 [Overtones] On=1 Level=123 F1=338 Wave1=0 Track1=0 F2=9865 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 600,68 949,39 1949,17 3798,1 9594,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=78 F=9000 dF=71 Envelope=0,100 1199,100 2449,59 4397,23 6346,8 9644,2 15540,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/the_sting_open_hat.ds000066400000000000000000000016051247673406200252560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=80 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,20 150,56 19274,84 68054,34 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=74 Slope=100 Envelope=0,35 949,80 6096,86 9044,29 10993,25 13142,26 15540,0 FixedSeq=0 [Overtones] On=1 Level=72 F1=338 Wave1=0 Track1=0 F2=9865 Wave2=0 Track2=0 Method=3 Param=34 Envelope1=0,100 14291,78 16740,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=0 [NoiseBand] On=1 Level=76 F=9000 dF=71 Envelope=0,100 1199,100 4397,67 6346,60 9644,62 11543,50 12792,35 15540,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=0 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_hats/threshold_noise.ds000066400000000000000000000015011247673406200246010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=9 Filter=0 HighPass=1 Resonance=0 FilterEnv=0,88 442000,100 442000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=521 Wave1=0 Track1=0 F2=100 Wave2=0 Track2=0 Method=3 Param=91 Envelope1=0,100 2349,9 26634,-1 26634,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=1 [NoiseBand] On=0 Level=129 F=5000 dF=57 Envelope=0,40 8895,25 13392,6 18888,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/threshold_noise_open.ds000066400000000000000000000015231247673406200256260ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=9 Filter=0 HighPass=1 Resonance=0 FilterEnv=0,88 442000,100 442000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=125 Slope=100 Envelope=0,59 5806,57 8947,32 16690,4 21637,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=521 Wave1=0 Track1=0 F2=100 Wave2=0 Track2=0 Method=3 Param=91 Envelope1=0,100 8804,95 15940,42 18639,0 26634,-1 26634,0 Envelope2=0,79 16736,85 89707,83 97797,0 Filter=1 [NoiseBand] On=0 Level=129 F=5000 dF=57 Envelope=0,40 8895,25 13392,6 18888,0 [NoiseBand2] On=0 Level=6 F=12000 dF=44 Envelope=0,57 95,21 714,9 1666,2 3000,0 [Distortion] On=1 Clipping=0 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_hats/touch_me_hat.ds000066400000000000000000000014031247673406200240500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,74 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=181 Slope=100 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=134 F1=1900 Wave1=0 Track1=0 F2=3420 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=5 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/000077500000000000000000000000001247673406200210555ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_perc/ambient_tom.ds000066400000000000000000000013761247673406200237120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=156 F1=600 F2=100 Droop=50 Phase=0 Envelope=0,100 1750,20 6983,0 [Noise] On=0 Level=146 Slope=10 Envelope=0,100 500,20 1694,2 2597,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=155 F=50 dF=10 Envelope=0,100 750,20 5986,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/bell.ds000066400000000000000000000014371247673406200223300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=59 FilterEnv=0,41 1849,20 5447,40 442000,100 442000,0 [Tone] On=1 Level=43 F1=7000 F2=6300 Droop=78 Phase=0 Envelope=0,100 1749,22 4997,0 [Noise] On=0 Level=85 Slope=92 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=1 Level=131 F1=7182 Wave1=3 Track1=1 F2=6399 Wave2=3 Track2=1 Method=0 Param=50 Envelope1=0,100 1639,21 5215,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=0 Level=115 F=9500 dF=49 Envelope=0,100 819,78 1639,24 4470,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/bell_rim.ds000066400000000000000000000014031247673406200231700ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=4 Filter=1 HighPass=1 Resonance=6 FilterEnv=0,57 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=500 Droop=22 Phase=130 Envelope=0,99 104,85 137,30 313,23 633,0 [Noise] On=1 Level=119 Slope=-72 Envelope=0,0 0,98 42,93 69,43 226,12 396,0 FixedSeq=0 [Overtones] On=1 Level=109 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 1190,10 2855,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=161 F=98 dF=12 Envelope=0,0 7,100 1788,56 4470,32 12887,17 15793,0 [NoiseBand2] On=1 Level=181 F=1000 dF=19 Envelope=0,100 100,30 952,8 1904,1 4759,0 7852,0 [Distortion] On=1 Clipping=0 Bits=3 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_perc/clav.ds000066400000000000000000000013731247673406200223360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=1000 dF=10 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/clav_2.ds000066400000000000000000000013711247673406200225550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=12 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,20 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=330 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=92 F=1200 dF=80 Envelope=0,100 618,7 1473,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/deep_cowbell.ds000066400000000000000000000015231247673406200240320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,8 6107,53 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=-70 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=160 F1=330 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=2 Param=60 Envelope1=0,100 949,69 3569,28 7059,8 9915,0 Envelope2=0,100 3000,30 16339,0 Filter=0 [NoiseBand] On=1 Level=28 F=1800 dF=14 Envelope=0,100 1904,70 2157,10 9010,5 13325,1 14848,0 [NoiseBand2] On=1 Level=72 F=2000 dF=3 Envelope=0,100 349,56 888,32 2031,11 10184,0 [Distortion] On=1 Clipping=5 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/dist_tom.ds000066400000000000000000000014201247673406200232240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=300 F2=120 Droop=32 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=4 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_perc/dist_tom_2.ds000066400000000000000000000014171247673406200234530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=1 HighPass=1 Resonance=38 FilterEnv=0,7 3880,23 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=120 Droop=32 Phase=0 Envelope=0,100 1750,20 6112,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=31 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/door_knock.ds000066400000000000000000000014141247673406200235350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=-7 Stretch=100 Level=4 Filter=1 HighPass=1 Resonance=9 FilterEnv=0,0 1507,43 8646,43 442000,100 442000,0 [Tone] On=0 Level=181 F1=8000 F2=55 Droop=68 Phase=65 Envelope=0,100 13087,28 35217,0 [Noise] On=1 Level=47 Slope=55 Envelope=0,100 1428,0 9000,0 FixedSeq=0 [Overtones] On=0 Level=82 F1=1760 Wave1=3 Track1=1 F2=440 Wave2=3 Track2=1 Method=3 Param=59 Envelope1=0,100 4600,34 36882,0 Envelope2=0,100 16339,28 32599,0 Filter=0 [NoiseBand] On=1 Level=29 F=50 dF=20 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=1 Level=128 F=3100 dF=80 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/electric_clav.ds000066400000000000000000000014211247673406200242020ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-4 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=181 F1=200 F2=40 Droop=60 Phase=12 Envelope=0,100 1699,46 5697,13 8445,5 11693,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=890 dF=0 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=32 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/feel_me_clinky.ds000066400000000000000000000017011247673406200243510ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=12 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,53 6446,9 14391,0 444000,100 444000,0 [Tone] On=0 Level=148 F1=220 F2=220 Droop=71 Phase=12 Envelope=0,85 3046,85 3934,48 5838,17 8630,0 [Noise] On=0 Level=61 Slope=-14 Envelope=0,100 400,17 1249,5 12542,0 FixedSeq=1 [Overtones] On=1 Level=158 F1=220 Wave1=0 Track1=1 F2=340 Wave2=2 Track2=0 Method=1 Param=47 Envelope1=0,82 1904,42 4061,17 8376,7 21066,0 Envelope2=0,82 3000,82 4822,62 6853,44 8757,31 11295,18 14975,9 23985,0 Filter=0 [NoiseBand] On=0 Level=74 F=50 dF=13 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [NoiseBand2] On=0 Level=12 F=80 dF=23 Envelope=0,100 1269,65 2665,50 4442,36 6345,26 9137,17 13579,10 20432,5 58377,0 [Distortion] On=1 Clipping=0 Bits=6 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/fidelity_faction_tom.ds000066400000000000000000000014371247673406200256050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0.00 Stretch=500 Level=0 Filter=1 HighPass=1 Resonance=50 FilterEnv=0,11 6223,17 444000,100 444000,0 [Tone] On=1 Level=145 F1=1500 F2=120 Droop=40 Phase=0 Envelope=0,100 412,32 1047,10 1682,2 4442,0 [Noise] On=0 Level=101 Slope=-10 Envelope=0,100 857,34 2602,0 FixedSeq=1 [Overtones] On=0 Level=101 F1=220 Wave1=3 Track1=1 F2=1720 Wave2=0 Track2=1 Method=1 Param=80 Envelope1=0,100 1174,24 2189,0 Envelope2=0,100 1000,20 6872,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=70 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=70 Envelope=0,100 744,45 2803,0 [Distortion] On=1 Clipping=24 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/funk_box_perc_1.ds000066400000000000000000000014161247673406200244530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=1 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5473,26 17608,0 [Noise] On=1 Level=51 Slope=-42 Envelope=0,100 278,14 595,4 793,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=290 Wave1=0 Track1=0 F2=254 Wave2=1 Track2=1 Method=2 Param=75 Envelope1=0,100 714,20 4997,6 10232,3 17132,1 22367,0 Envelope2=0,48 6425,17 15943,0 Filter=0 [NoiseBand] On=1 Level=36 F=130 dF=15 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=1 Level=16 F=10000 dF=15 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/funk_box_perc_2.ds000066400000000000000000000014201247673406200244470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=1 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5473,26 17608,0 [Noise] On=1 Level=51 Slope=-42 Envelope=0,100 278,14 595,4 793,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=350 Wave1=0 Track1=0 F2=312.3 Wave2=1 Track2=1 Method=2 Param=86 Envelope1=0,100 714,20 4997,6 10232,3 17132,1 22367,0 Envelope2=0,48 6425,17 15943,0 Filter=0 [NoiseBand] On=1 Level=36 F=130 dF=15 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=1 Level=16 F=10000 dF=15 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/funkay_timbale.ds000066400000000000000000000014311247673406200243760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,14 4981,42 442000,100 442000,0 [Tone] On=0 Level=128 F1=150 F2=300 Droop=78 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=41 Slope=-59 Envelope=0,100 222,14 508,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=500 Wave1=0 Track1=1 F2=200 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3750,30 7500,0 Filter=0 [NoiseBand] On=0 Level=128 F=6000 dF=8 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=2370 dF=7 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=2 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_perc/give_it_to_me.ds000066400000000000000000000015061247673406200242200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=-9 Filter=1 HighPass=1 Resonance=32 FilterEnv=0,10 9844,77 22986,39 442000,100 443000,0 [Tone] On=0 Level=132 F1=2000 F2=1600 Droop=22 Phase=130 Envelope=0,99 104,85 137,30 313,23 633,0 [Noise] On=0 Level=119 Slope=100 Envelope=0,0 0,98 635,53 2459,25 6028,10 10311,5 16498,1 26095,0 FixedSeq=0 [Overtones] On=1 Level=166 F1=200 Wave1=0 Track1=0 F2=745 Wave2=2 Track2=0 Method=2 Param=100 Envelope1=0,100 2199,80 5047,56 9144,39 19788,19 23036,0 Envelope2=0,100 2349,59 7395,20 22236,0 Filter=0 [NoiseBand] On=0 Level=67 F=20000 dF=52 Envelope=0,0 7,100 1788,56 3331,30 6742,13 10628,5 16181,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=26 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/hammond_cowbell.ds000066400000000000000000000016241247673406200245420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,61 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=1000 F2=509 Droop=60 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=1 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=129 F=6000 dF=25 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=90 F=7122 dF=37 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/hollow_wood.ds000066400000000000000000000013721247673406200237440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=12 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,20 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=330 Wave2=0 Track2=0 Method=2 Param=97 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=92 F=1200 dF=80 Envelope=0,100 618,7 1473,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/hollow_wood_2.ds000066400000000000000000000013721247673406200241650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=12 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,20 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=573 Wave1=0 Track1=0 F2=330 Wave2=0 Track2=0 Method=2 Param=97 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=92 F=1200 dF=80 Envelope=0,100 618,7 1473,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=7 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/it's_the_simple_things.ds000066400000000000000000000014351247673406200260430ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=40 FilterEnv=0,14 4981,42 442000,100 442000,0 [Tone] On=1 Level=128 F1=150 F2=300 Droop=78 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=34 Slope=-70 Envelope=0,100 4500,30 9000,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=500 Wave1=2 Track1=1 F2=200 Wave2=0 Track2=0 Method=0 Param=61 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3750,30 7500,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=26 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=2 Bits=1 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_perc/layered_sleigh_bell.ds000066400000000000000000000015621247673406200253670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=0 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,0 351372,1 442000,100 442000,0 [Tone] On=0 Level=181 F1=500 F2=50 Droop=97 Phase=00 Envelope=0,100 64246,29 325991,0 [Noise] On=1 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=342 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=2 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=0 Clipping=49 Bits=7 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_perc/light_tamb_1.ds000066400000000000000000000015111247673406200237350ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,83 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=137 Slope=93 Envelope=0,74 364,50 477,11 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=34 F=7000 dF=54 Envelope=0,100 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 4244,3 5321,0 [NoiseBand2] On=1 Level=106 F=8300 dF=22 Envelope=0,100 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3911,31 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/light_tamb_2.ds000066400000000000000000000016161247673406200237440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,83 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=137 Slope=93 Envelope=0,74 364,50 477,11 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=34 F=7000 dF=54 Envelope=0,100 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=97 F=8300 dF=22 Envelope=0,100 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/light_tamb_3.ds000066400000000000000000000016161247673406200237450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,83 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=137 Slope=93 Envelope=0,74 364,50 477,11 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=34 F=7000 dF=54 Envelope=0,100 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=76 F=8300 dF=22 Envelope=0,100 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/like_a_tabla_1.ds000066400000000000000000000016041247673406200242150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=3 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,0 550,21 849,31 1549,37 2399,40 4247,40 444000,100 444000,0 [Tone] On=1 Level=101 F1=2300 F2=230 Droop=82 Phase=0 Envelope=0,100 800,41 1499,0 10500,0 [Noise] On=0 Level=104 Slope=100 Envelope=0,68 1699,59 1899,30 3448,13 5147,4 8495,1 14841,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=802 Wave1=0 Track1=0 F2=290 Wave2=2 Track2=0 Method=1 Param=90 Envelope1=0,100 250,50 450,19 1549,8 3648,0 Envelope2=0,100 1000,20 13941,0 Filter=0 [NoiseBand] On=1 Level=38 F=400 dF=0 Envelope=0,100 100,44 1249,51 2898,32 7046,8 9044,2 11443,0 [NoiseBand2] On=0 Level=65 F=3100 dF=40 Envelope=0,100 1500,20 10743,0 [Distortion] On=0 Clipping=3 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/like_a_tabla_2.ds000066400000000000000000000016021247673406200242140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=200 Level=3 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,0 550,21 849,31 1549,37 2399,40 4247,40 444000,100 444000,0 [Tone] On=1 Level=101 F1=2300 F2=230 Droop=82 Phase=0 Envelope=0,100 800,41 1249,0 10500,0 [Noise] On=0 Level=104 Slope=100 Envelope=0,68 1699,59 1899,30 3448,13 5147,4 8495,1 14841,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=802 Wave1=0 Track1=0 F2=290 Wave2=2 Track2=0 Method=1 Param=90 Envelope1=0,100 250,50 450,19 1549,8 3648,0 Envelope2=0,100 1000,20 13941,0 Filter=0 [NoiseBand] On=1 Level=38 F=400 dF=0 Envelope=0,100 100,44 1249,51 2898,32 7046,8 9044,2 11443,0 [NoiseBand2] On=0 Level=65 F=3100 dF=40 Envelope=0,100 1500,20 10743,0 [Distortion] On=0 Clipping=3 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/like_a_tabla_3.ds000066400000000000000000000016021247673406200242150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=200 Level=3 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,0 550,21 849,31 1549,37 2399,40 4247,40 444000,100 444000,0 [Tone] On=1 Level=101 F1=2300 F2=230 Droop=82 Phase=0 Envelope=0,100 800,41 1249,0 10500,0 [Noise] On=0 Level=104 Slope=100 Envelope=0,68 1699,59 1899,30 3448,13 5147,4 8495,1 14841,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=802 Wave1=0 Track1=1 F2=290 Wave2=1 Track2=0 Method=1 Param=90 Envelope1=0,100 250,50 450,19 1549,8 3648,0 Envelope2=0,100 1000,20 13941,0 Filter=0 [NoiseBand] On=1 Level=38 F=400 dF=0 Envelope=0,100 100,44 1249,51 2898,32 7046,8 9044,2 11443,0 [NoiseBand2] On=0 Level=65 F=3100 dF=40 Envelope=0,100 1500,20 10743,0 [Distortion] On=0 Clipping=3 Bits=2 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/limited_shaker.ds000066400000000000000000000015421247673406200243730ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=20 FilterEnv=0,65 1071,91 2161,93 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=128 Slope=-31 Envelope=0,24 654,80 972,35 1388,74 1705,20 2320,66 2756,26 3688,12 4600,7 5572,1 7317,0 FixedSeq=0 [Overtones] On=0 Level=160 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=2 Param=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=28 F=1800 dF=14 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=65 F=3000 dF=8 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=22 Bits=4 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/lo-fi_tamb.ds000066400000000000000000000016231247673406200234200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,30 7198,66 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=129 F=6000 dF=25 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=90 F=7122 dF=37 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/low_key_tom.ds000066400000000000000000000014541247673406200237410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,3 1799,8 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=123 F=200 dF=8 Envelope=0,100 5250,30 10500,0 [NoiseBand2] On=0 Level=166 F=3100 dF=40 Envelope=0,100 300,65 800,39 1500,20 2349,8 3748,0 [Distortion] On=0 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/low_ping.ds000066400000000000000000000014421247673406200232240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=47 FilterEnv=0,0 12442,62 442000,100 442000,0 [Tone] On=1 Level=54 F1=550 F2=220 Droop=85 Phase=65 Envelope=0,100 5996,25 14241,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=83 F1=220 Wave1=0 Track1=1 F2=110 Wave2=0 Track2=1 Method=2 Param=100 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=4 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/mellow_shake.ds000066400000000000000000000020551247673406200240610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=75 Level=3 Filter=1 HighPass=1 Resonance=11 FilterEnv=0,17 1309,80 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=88 Slope=84 Envelope=0,24 377,82 793,42 991,83 1487,32 1844,74 2439,35 2994,72 4124,17 5988,0 FixedSeq=0 [Overtones] On=0 Level=36 F1=5200 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 899,53 1699,17 2399,45 3748,12 4497,25 7500,0 Envelope2=0,49 899,78 1499,49 2748,77 3048,47 3698,79 4147,50 5147,19 5147,37 5447,59 5846,81 7595,35 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=69 F=6000 dF=25 Envelope=0,5 462,17 507,67 1099,25 1549,35 1774,50 2898,17 2914,46 3498,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=90 F=5000 dF=25 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/metallic_node.ds000066400000000000000000000013251247673406200242050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=75 Level=-7 Filter=0 HighPass=1 Resonance=58 FilterEnv=0,59 14277,16 442000,100 443000,0 [Tone] On=1 Level=22 F1=851 F2=500 Droop=27 Phase=-45 Envelope=0,58 3398,69 3398,0 [Noise] On=0 Level=142 Slope=90 Envelope=0,51 555,21 2538,9 7932,3 36168,0 FixedSeq=0 [Overtones] On=1 Level=107 F1=400 Wave1=3 Track1=1 F2=589 Wave2=3 Track2=0 Method=3 Param=88 Envelope1=0,100 1699,10 3490,0 Envelope2=0,89 6345,20 10311,0 Filter=0 [NoiseBand] On=1 Level=74 F=6800 dF=40 Envelope=0,100 750,16 1983,2 3490,0 [NoiseBand2] On=1 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=3 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/mild_tamb.ds000066400000000000000000000016131247673406200233360ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=40 FilterEnv=0,83 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=61 Slope=93 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=0 Level=144 F1=6300 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=69 F=6000 dF=25 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=90 F=7122 dF=37 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/ol'_skool_shake.ds000066400000000000000000000013451247673406200244530ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-3 Stretch=130 Level=12 Filter=1 HighPass=0 Resonance=10 FilterEnv=0,86 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,0 2607,88 3500,20 8750,0 [Noise] On=1 Level=74 Slope=100 Envelope=0,0 999,84 1449,95 2049,35 3098,17 4797,7 6196,2 8994,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=4 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_perc/poppy.ds000066400000000000000000000015051247673406200225550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=32 FilterEnv=0,10 9844,77 22986,39 442000,100 443000,0 [Tone] On=1 Level=156 F1=2000 F2=1600 Droop=84 Phase=130 Envelope=0,99 104,85 137,30 313,23 633,0 [Noise] On=0 Level=119 Slope=100 Envelope=0,0 0,98 635,53 2459,25 6028,10 10311,5 16498,1 26095,0 FixedSeq=0 [Overtones] On=0 Level=166 F1=200 Wave1=0 Track1=0 F2=745 Wave2=2 Track2=0 Method=2 Param=100 Envelope1=0,100 2199,80 5047,56 9144,39 19788,19 23036,0 Envelope2=0,100 2349,59 7395,20 22236,0 Filter=0 [NoiseBand] On=0 Level=67 F=20000 dF=52 Envelope=0,0 7,100 1788,56 3331,30 6742,13 10628,5 16181,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=26 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/q_tom.ds000066400000000000000000000013241247673406200225240ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=24 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=128 F1=2000 F2=50 Droop=57 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=1 Level=59 F1=2000 Wave1=3 Track1=1 F2=3000 Wave2=4 Track2=0 Method=2 Param=50 Envelope1=0,100 1149,39 1949,16 3148,5 4597,2 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=0 Bits=4 Rate=7 lmms-1.1.3/data/samples/drumsynth/misc_perc/resonant_knock.ds000066400000000000000000000014311247673406200244220ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=128 F1=300 F2=120 Droop=32 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=440 Wave1=0 Track1=0 F2=440 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 3563,100 6730,0 Envelope2=0,100 2233,74 4782,95 6856,0 Filter=0 [NoiseBand] On=1 Level=128 F=1200 dF=26 Envelope=0,61 1678,71 5558,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/ringmod_rim.ds000066400000000000000000000014041247673406200237120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=4 Filter=0 HighPass=1 Resonance=6 FilterEnv=0,57 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=500 Droop=22 Phase=130 Envelope=0,99 104,85 137,30 313,23 633,0 [Noise] On=1 Level=119 Slope=-72 Envelope=0,0 0,98 42,93 69,43 226,12 396,0 FixedSeq=0 [Overtones] On=1 Level=109 F1=6000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=3 Param=36 Envelope1=0,100 1190,10 2855,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=161 F=98 dF=12 Envelope=0,0 7,100 1788,56 4470,32 12887,17 15793,0 [NoiseBand2] On=1 Level=181 F=1000 dF=19 Envelope=0,100 100,30 952,8 1904,1 4759,0 7852,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_perc/ringmod_rim_2.ds000066400000000000000000000014021247673406200241310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=500 Level=4 Filter=0 HighPass=1 Resonance=6 FilterEnv=0,57 442000,100 443000,0 [Tone] On=1 Level=181 F1=2000 F2=500 Droop=22 Phase=130 Envelope=0,99 104,85 137,30 313,23 633,0 [Noise] On=1 Level=119 Slope=-72 Envelope=0,0 0,98 42,93 69,43 226,12 396,0 FixedSeq=0 [Overtones] On=1 Level=109 F1=6000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=3 Param=36 Envelope1=0,100 1190,10 2855,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=161 F=98 dF=12 Envelope=0,0 7,100 1788,56 4470,32 12887,17 15793,0 [NoiseBand2] On=1 Level=181 F=1000 dF=19 Envelope=0,100 100,30 952,8 1904,1 4759,0 7852,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=6 lmms-1.1.3/data/samples/drumsynth/misc_perc/shaaka.ds000066400000000000000000000015111247673406200226330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=133 F1=120 F2=50 Droop=73 Phase=0 Envelope=0,100 2049,51 5647,21 11743,9 22386,0 [Noise] On=1 Level=144 Slope=100 Envelope=0,6 397,84 714,12 991,20 1210,30 1527,12 1824,24 2023,9 5195,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=350 Wave1=0 Track1=0 F2=312.3 Wave2=1 Track2=1 Method=2 Param=86 Envelope1=0,100 714,20 4997,6 10232,3 17132,1 22367,0 Envelope2=0,48 6425,17 15943,0 Filter=0 [NoiseBand] On=0 Level=36 F=130 dF=15 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=16 F=10000 dF=15 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/shaaka_2.ds000066400000000000000000000015161247673406200230610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Adjust the overtones 'drive' to hit harder! Tuning=0.00 Stretch=200 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=133 F1=120 F2=50 Droop=73 Phase=0 Envelope=0,100 2049,51 5647,21 11743,9 22386,0 [Noise] On=1 Level=144 Slope=100 Envelope=0,6 337,56 714,12 912,26 1249,17 1527,19 1824,24 2023,9 2498,2 4025,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=350 Wave1=0 Track1=0 F2=312.3 Wave2=1 Track2=1 Method=2 Param=86 Envelope1=0,100 714,20 4997,6 10232,3 17132,1 22367,0 Envelope2=0,48 6425,17 15943,0 Filter=0 [NoiseBand] On=0 Level=36 F=130 dF=15 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=16 F=10000 dF=15 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=13 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/short_tom.ds000066400000000000000000000013531247673406200234250ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=147 F1=225 F2=225 Droop=44 Phase=8 Envelope=0,100 476,53 1904,20 4045,10 6028,1 10232,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=1 Level=69 F=212 dF=21 Envelope=0,56 714,31 2062,13 4362,3 8646,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/short_tom_1.ds000066400000000000000000000013531247673406200236450ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=147 F1=150 F2=150 Droop=44 Phase=8 Envelope=0,100 476,53 1904,20 4045,10 6028,1 10232,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=1 Level=69 F=212 dF=21 Envelope=0,56 714,31 2062,13 4362,3 8646,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/short_tom_2.ds000066400000000000000000000013531247673406200236460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=147 F1=100 F2=100 Droop=44 Phase=8 Envelope=0,100 476,53 1904,20 4045,10 6028,1 10232,0 [Noise] On=0 Level=138 Slope=12 Envelope=0,100 1311,65 2205,38 2563,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=50 Envelope=0,100 6000,50 20000,0 [NoiseBand2] On=1 Level=69 F=212 dF=21 Envelope=0,56 714,31 2062,13 4362,3 8646,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/sickly_cowbell.ds000066400000000000000000000014471247673406200244200ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=6 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 521,76 1639,63 4246,45 7151,34 16463,13 442000,100 443000,0 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=-45 Envelope=0,58 10578,26 12217,0 [Noise] On=0 Level=142 Slope=-53 Envelope=0,100 521,24 2384,15 7971,0 FixedSeq=0 [Overtones] On=1 Level=145 F1=651 Wave1=3 Track1=0 F2=461 Wave2=3 Track2=0 Method=3 Param=0 Envelope1=0,0 30,98 819,47 2831,24 6630,9 14899,0 Envelope2=0,0 37,99 745,50 2756,26 6257,11 13409,0 Filter=1 [NoiseBand] On=0 Level=128 F=1000 dF=100 Envelope=0,20 745,96 1490,36 3203,12 11025,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/slinky_tamb.ds000066400000000000000000000020111247673406200237130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=31 FilterEnv=0,88 1399,89 442000,100 442000,0 [Tone] On=0 Level=170 F1=509 F2=509 Droop=65 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=1 Level=61 Slope=91 Envelope=0,62 1099,28 2498,51 4697,13 9000,0 FixedSeq=0 [Overtones] On=1 Level=36 F1=5200 Wave1=0 Track1=0 F2=18500 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 899,53 1699,17 2399,45 3748,12 4497,25 7500,0 Envelope2=0,49 899,78 1499,49 2748,77 3048,47 3698,79 4147,50 5147,19 5147,37 5447,59 5846,81 7595,35 8725,49 9617,0 Filter=0 [NoiseBand] On=1 Level=69 F=6000 dF=25 Envelope=0,5 462,17 507,67 1099,25 1549,35 1774,50 2898,17 2914,46 3498,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=1 Level=90 F=5000 dF=25 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/super_tom.ds000066400000000000000000000014131247673406200234210ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=128 F1=600 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=47 Slope=44 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=101 F1=600 Wave1=0 Track1=1 F2=120 Wave2=0 Track2=1 Method=2 Param=50 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=83 F=120 dF=9 Envelope=0,100 79,9 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/sweetness_shaker.ds000066400000000000000000000016561247673406200247720ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0.00 Stretch=100.0 Level=-3 Filter=0 HighPass=1 Resonance=60 FilterEnv=0,21 14277,30 33313,65 46797,27 75351,50 80903,26 97559,29 107871,12 115802,20 123734,5 442000,100 442000,0 [Tone] On=0 Level=1 F1=40392 F2=880 Droop=50 Phase=0 Envelope=0,100 16656,47 30140,29 51556,14 140390,0 [Noise] On=1 Level=94 Slope=96 Envelope=0,2 198,91 397,25 523,83 841,11 1340,93 1658,14 2284,30 3974,0 FixedSeq=1 [Overtones] On=0 Level=114 F1=5200 Wave1=4 Track1=0 F2=195.998 Wave2=2 Track2=1 Method=2 Param=89 Envelope1=0,100 48383,35 72178,12 125320,0 Envelope2=0,100 102318,60 318059,0 Filter=0 [NoiseBand] On=0 Level=101 F=5732 dF=99 Envelope=0,100 1758,38 327577,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=5 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/timbale_sound.ds000066400000000000000000000014211247673406200242300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=35 FilterEnv=0,36 12929,59 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=78 F1=900 Wave1=0 Track1=1 F2=300 Wave2=0 Track2=0 Method=1 Param=70 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=400 dF=9 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/tom.ds000066400000000000000000000014061247673406200222050ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=1 Level=181 F1=500 F2=120 Droop=46 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/tom_tone.ds000066400000000000000000000013241247673406200232310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=9 Filter=0 HighPass=1 Resonance=6 FilterEnv=0,23 442000,100 443000,0 [Tone] On=1 Level=84 F1=180 F2=163 Droop=18 Phase=10 Envelope=0,0 0,96 715,39 2458,16 6481,0 [Noise] On=0 Level=100 Slope=70 Envelope=0,0 268,100 723,26 2086,10 5438,0 FixedSeq=0 [Overtones] On=0 Level=100 F1=345 Wave1=0 Track1=0 F2=200 Wave2=0 Track2=0 Method=0 Param=47 Envelope1=0,100 1490,17 4991,0 Envelope2=0,100 894,12 7077,0 Filter=0 [NoiseBand] On=0 Level=146 F=400 dF=34 Envelope=0,99 670,21 1788,4 5810,0 [NoiseBand2] On=0 Level=158 F=3000 dF=89 Envelope=0,100 100,30 3547,0 [Distortion] On=0 Clipping=7 Bits=4 Rate=2 lmms-1.1.3/data/samples/drumsynth/misc_perc/tommy.ds000066400000000000000000000013401247673406200225500ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=69 F1=500 F2=120 Droop=65 Phase=0 Envelope=0,0 2607,88 3500,20 8750,0 [Noise] On=0 Level=81 Slope=57 Envelope=0,0 670,83 1341,95 2011,42 2682,13 3799,5 5810,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=1 Method=2 Param=100 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=0 Level=128 F=4000 dF=35 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=1 Level=128 F=350 dF=23 Envelope=0,100 834,15 2548,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/tone_tom.ds000066400000000000000000000016231247673406200232330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-12 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=80 FilterEnv=0,71 7714,92 442000,100 442000,0 [Tone] On=1 Level=170 F1=1000 F2=509 Droop=60 Phase=00 Envelope=0,100 954,36 1937,12 4350,0 [Noise] On=0 Level=61 Slope=53 Envelope=0,24 364,50 1329,13 5423,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=1000 Wave1=0 Track1=1 F2=509 Wave2=0 Track2=0 Method=2 Param=80 Envelope1=0,100 1071,17 2221,11 2974,8 3232,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=129 F=6000 dF=25 Envelope=0,5 462,17 507,67 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=90 F=7122 dF=37 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 5425,33 6801,0 [Distortion] On=1 Clipping=30 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/torn_tweeter.ds000066400000000000000000000014311247673406200241250ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=128 F1=300 F2=120 Droop=32 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=440 Wave1=0 Track1=0 F2=440 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 3563,100 6730,0 Envelope2=0,100 2233,74 4782,95 6856,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=2 Bits=1 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/tweety_cowbell.ds000066400000000000000000000016011247673406200244330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0.00 Stretch=30 Level=-6 Filter=1 HighPass=1 Resonance=5 FilterEnv=0,50 2538,49 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=-70 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=160 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=2 Param=0 Envelope1=0,100 949,69 2898,44 4897,29 6796,17 8745,10 11393,4 17689,0 Envelope2=0,96 4297,11 5497,41 16240,81 17489,0 Filter=0 [NoiseBand] On=1 Level=28 F=1800 dF=14 Envelope=0,100 1904,70 2157,10 9010,5 13325,1 14848,0 [NoiseBand2] On=1 Level=65 F=3000 dF=8 Envelope=0,100 349,56 888,32 2031,11 10184,0 [Distortion] On=1 Clipping=17 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/tweety_cowbell_2.ds000066400000000000000000000015751247673406200246660ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=5 FilterEnv=0,50 2538,49 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=160 Droop=82 Phase=25 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=-70 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=160 F1=440 Wave1=0 Track1=0 F2=739.99 Wave2=0 Track2=0 Method=2 Param=0 Envelope1=0,100 949,69 2898,44 4897,29 6796,17 8745,10 11393,4 17689,0 Envelope2=0,96 4297,11 5497,41 16240,81 17489,0 Filter=0 [NoiseBand] On=1 Level=28 F=1800 dF=14 Envelope=0,100 1904,70 2157,10 9010,5 13325,1 14848,0 [NoiseBand2] On=1 Level=72 F=2000 dF=3 Envelope=0,100 349,56 888,32 2031,11 10184,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_perc/type_noise.ds000066400000000000000000000014251247673406200235650ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=20 FilterEnv=0,100 887,92 444000,100 444000,0 [Tone] On=0 Level=92 F1=600 F2=100 Droop=30 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=1 Level=92 Slope=49 Envelope=0,100 222,24 523,84 681,8 998,53 1219,0 FixedSeq=1 [Overtones] On=0 Level=181 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=3 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=18029 dF=100 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=2 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/very_high_clav.ds000066400000000000000000000014351247673406200244010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=10 FilterEnv=0,100 1110,20 2221,6 4204,0 442000,100 442000,0 [Tone] On=0 Level=128 F1=5632 F2=65.406 Droop=75 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=137 F1=65.406 Wave1=4 Track1=1 F2=130.813 Wave2=3 Track2=0 Method=2 Param=60 Envelope1=0,100 3048,26 11643,0 Envelope2=0,100 5235,80 11543,0 Filter=0 [NoiseBand] On=1 Level=128 F=2332 dF=7 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=155 F=3100 dF=10 Envelope=0,100 3093,77 4500,0 [Distortion] On=0 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/video_game_clip.ds000066400000000000000000000014251247673406200245150ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=50 Droop=58 Phase=60 Envelope=0,100 397,52 1428,29 3490,15 6980,10 16339,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=0 [Overtones] On=1 Level=128 F1=315 Wave1=4 Track1=0 F2=630 Wave2=4 Track2=0 Method=0 Param=54 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=10 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/weird_1.ds000066400000000000000000000015221247673406200227370ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=59 FilterEnv=0,34 206,68 570,68 1663,68 1916,84 2898,40 3769,86 3832,50 4054,26 6904,0 442000,100 442000,0 [Tone] On=1 Level=43 F1=7000 F2=8000 Droop=7 Phase=0 Envelope=0,100 1749,22 4997,0 [Noise] On=0 Level=85 Slope=92 Envelope=0,100 1117,82 1564,28 5513,0 FixedSeq=0 [Overtones] On=1 Level=131 F1=200 Wave1=3 Track1=1 F2=6399 Wave2=3 Track2=1 Method=2 Param=66 Envelope1=0,100 1639,21 5215,0 Envelope2=0,100 1564,25 5066,0 Filter=0 [NoiseBand] On=0 Level=115 F=9500 dF=49 Envelope=0,100 819,78 1639,24 4470,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_perc/wood_and_metal.ds000066400000000000000000000014201247673406200243560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-3 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 444000,100 444000,0 [Tone] On=0 Level=181 F1=200 F2=40 Droop=60 Phase=12 Envelope=0,100 1699,46 5697,13 8445,5 11693,0 [Noise] On=1 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=56 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=2 Param=90 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=56 F=890 dF=0 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=1 Level=128 F=3100 dF=20 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=14 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/000077500000000000000000000000001247673406200212715ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/misc_synth/average_rock.ds000066400000000000000000000014451247673406200242550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0.00 Stretch=100.0 Level=-6 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,0 412,9 3864,8 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=195.998 Wave1=2 Track1=0 F2=261.626 Wave2=4 Track2=0 Method=2 Param=50 Envelope1=0,100 2882,74 6413,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=195.998 dF=0 Envelope=0,100 2898,74 5716,0 [NoiseBand2] On=1 Level=128 F=311.127 dF=0 Envelope=0,100 3404,92 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_synth/c_maj_chord.ds000066400000000000000000000014461247673406200240560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=53 FilterEnv=0,11 5147,5 14091,2 442000,100 442000,0 [Tone] On=1 Level=163 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=-60 Envelope=0,34 500,20 14741,0 FixedSeq=1 [Overtones] On=1 Level=100 F1=164.814 Wave1=4 Track1=0 F2=195.998 Wave2=1 Track2=1 Method=2 Param=70 Envelope1=0,100 7096,31 21037,0 Envelope2=0,100 15740,18 27133,0 Filter=0 [NoiseBand] On=1 Level=128 F=195.988 dF=3 Envelope=0,100 4747,40 15091,0 [NoiseBand2] On=1 Level=128 F=261.626 dF=2 Envelope=0,100 6046,35 16990,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/casio_piano_c.ds000066400000000000000000000014331247673406200244100ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=89 FilterEnv=0,100 1799,78 12193,77 444000,100 444000,0 [Tone] On=1 Level=1 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=91 F1=523.251 Wave1=1 Track1=1 F2=261.626 Wave2=3 Track2=0 Method=1 Param=60 Envelope1=0,100 3048,26 18139,0 Envelope2=0,100 12542,77 18639,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_synth/chorded_perc.ds000066400000000000000000000014321247673406200242420ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=60 FilterEnv=0,11 158,27 444000,100 444000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=195.998 Wave1=2 Track1=0 F2=261.626 Wave2=4 Track2=0 Method=0 Param=50 Envelope1=0,100 2882,74 6413,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=128 F=195.998 dF=0 Envelope=0,100 2898,74 5716,0 [NoiseBand2] On=1 Level=128 F=311.127 dF=0 Envelope=0,100 3404,92 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/consumer_fm.ds000066400000000000000000000015661247673406200241460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=200 Level=-6 Filter=1 HighPass=1 Resonance=70 FilterEnv=0,21 133252,41 442000,100 442000,0 [Tone] On=1 Level=1 F1=6995 F2=50 Droop=47 Phase=00 Envelope=0,100 6028,25 15241,85 22764,0 [Noise] On=0 Level=25 Slope=80 Envelope=0,100 406,3 914,0 FixedSeq=0 [Overtones] On=1 Level=144 F1=440 Wave1=0 Track1=1 F2=880 Wave2=0 Track2=0 Method=1 Param=90 Envelope1=0,100 3750,30 12093,89 23686,0 Envelope2=0,49 8725,49 9617,0 Filter=0 [NoiseBand] On=0 Level=75 F=6000 dF=15 Envelope=0,33 596,66 1599,24 1774,50 2375,18 2914,46 3153,21 3712,56 4220,14 4854,38 5425,11 5965,21 6789,2 8185,0 [NoiseBand2] On=0 Level=72 F=7000 dF=20 Envelope=0,27 317,10 507,67 1408,24 1583,44 1904,35 2138,56 2882,16 3173,48 3553,20 4156,50 4569,19 6496,0 [Distortion] On=0 Clipping=41 Bits=0 Rate=4 lmms-1.1.3/data/samples/drumsynth/misc_synth/dark_and_sweet_fm.ds000066400000000000000000000014501247673406200252550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=3 FilterEnv=0,100 1699,59 4347,38 14241,27 444000,100 444000,0 [Tone] On=1 Level=28 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=65.406 Wave1=0 Track1=0 F2=195.998 Wave2=0 Track2=1 Method=2 Param=70 Envelope1=0,100 7096,31 26034,0 Envelope2=0,100 15740,18 27133,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/dist_high_c.ds000066400000000000000000000014341247673406200240670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=89 FilterEnv=0,100 949,27 9094,20 444000,100 444000,0 [Tone] On=0 Level=172 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=91 F1=523.251 Wave1=3 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 3048,26 18139,0 Envelope2=0,100 12542,77 18639,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=31 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_synth/eno's_lift.ds000066400000000000000000000015071247673406200236550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-12 Filter=1 HighPass=0 Resonance=85 FilterEnv=0,100 46004,38 99939,11 442000,100 442000,0 [Tone] On=1 Level=73 F1=200 F2=100 Droop=0 Phase=00 Envelope=0,100 40451,27 393410,0 [Noise] On=1 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=440 Wave1=0 Track1=1 F2=550 Wave2=3 Track2=0 Method=2 Param=100 Envelope1=0,100 12691,55 36486,29 168944,5 407687,0 Envelope2=0,0 26968,53 112629,100 118975,0 Filter=0 [NoiseBand] On=1 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=1 Level=72 F=330 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/eno's_pad.ds000066400000000000000000000017221247673406200234620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=50 Level=-12 Filter=1 HighPass=0 Resonance=44 FilterEnv=0,98 14277,49 31885,28 46876,19 75668,8 120561,0 233191,53 380719,79 416412,3 442000,100 442000,0 [Tone] On=1 Level=73 F1=220 F2=110 Droop=0 Phase=00 Envelope=0,100 26174,15 129286,33 195119,8 287919,42 415619,0 [Noise] On=1 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=2 Track1=1 F2=800 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,62 38072,24 90421,56 122941,17 135631,53 172910,7 199085,34 227638,16 268883,65 302196,-1 341854,37 383099,0 Envelope2=0,100 3000,30 93514,0 Filter=0 [NoiseBand] On=1 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=1 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/eno's_ride.ds000066400000000000000000000017371247673406200236470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=-12 Filter=1 HighPass=0 Resonance=44 FilterEnv=0,98 14277,49 31885,28 46876,19 75668,8 121354,17 233191,53 380719,79 413239,62 440207,11 442000,100 442000,0 [Tone] On=1 Level=73 F1=220 F2=110 Droop=0 Phase=00 Envelope=0,100 26174,15 129286,33 195119,8 287919,42 415619,0 [Noise] On=1 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=55 Wave1=2 Track1=1 F2=330 Wave2=4 Track2=0 Method=1 Param=100 Envelope1=0,62 38072,24 90421,56 122941,17 135631,53 172910,7 199085,34 227638,16 268883,65 302196,-1 341854,37 383099,0 Envelope2=0,100 3000,30 93514,0 Filter=0 [NoiseBand] On=1 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=1 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/flat_square_c.ds000066400000000000000000000014421247673406200244320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=3 FilterEnv=0,100 1699,59 4347,38 14241,27 444000,100 444000,0 [Tone] On=0 Level=1 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=154 F1=65.406 Wave1=4 Track1=1 F2=261.626 Wave2=4 Track2=0 Method=1 Param=40 Envelope1=0,100 3048,26 18139,0 Envelope2=0,100 12542,77 18639,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_synth/fm_c_bass_burst.ds000066400000000000000000000014301247673406200247520ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=89 FilterEnv=0,100 949,27 9094,20 444000,100 444000,0 [Tone] On=1 Level=1 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=181 F1=65.406 Wave1=0 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 3048,26 26234,0 Envelope2=0,100 6346,60 11543,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_synth/fur_strings.ds000066400000000000000000000014671247673406200241760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,15 444000,100 444000,0 [Tone] On=1 Level=43 F1=261.63 F2=261.63 Droop=0 Phase=0 Envelope=0,100 58250,100 67641,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=261.63 Wave1=3 Track1=0 F2=261.63 Wave2=0 Track2=0 Method=2 Param=49 Envelope1=0,100 58250,100 67641,0 Envelope2=0,86 70671,86 84948,0 Filter=0 [NoiseBand] On=1 Level=166 F=261.63 dF=0 Envelope=0,100 58250,100 67641,0 [NoiseBand2] On=0 Level=128 F=3100 dF=39 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/fur_strings_2.ds000066400000000000000000000015011247673406200244040ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-9 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,15 444000,100 444000,0 [Tone] On=0 Level=43 F1=261.63 F2=261.63 Droop=0 Phase=0 Envelope=0,100 58250,100 67641,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=261.63 Wave1=3 Track1=0 F2=261.63 Wave2=2 Track2=0 Method=2 Param=97 Envelope1=0,100 58250,100 67641,0 Envelope2=0,86 32520,4 70671,86 84948,0 Filter=0 [NoiseBand] On=0 Level=166 F=261.63 dF=0 Envelope=0,100 58250,100 67641,0 [NoiseBand2] On=0 Level=128 F=3100 dF=39 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=60 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/it's_the_music_tom_c.ds000066400000000000000000000014331247673406200257110ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-9 Filter=0 HighPass=0 Resonance=89 FilterEnv=0,100 949,27 9094,20 444000,100 444000,0 [Tone] On=1 Level=172 F1=130.813 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=91 F1=65.406 Wave1=0 Track1=0 F2=130.813 Wave2=0 Track2=1 Method=1 Param=60 Envelope1=0,100 3048,26 18139,0 Envelope2=0,100 6346,60 11543,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=49 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_synth/layered_bass_synth_c.ds000066400000000000000000000014561247673406200260130ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100.0 Level=-9 Filter=1 HighPass=0 Resonance=43 FilterEnv=0,100 2548,48 8595,24 19238,8 442000,100 442000,0 [Tone] On=1 Level=163 F1=130.813 F2=65.406 Droop=40 Phase=0 Envelope=0,100 3898,36 22286,0 [Noise] On=0 Level=128 Slope=-60 Envelope=0,34 500,20 14741,0 FixedSeq=1 [Overtones] On=1 Level=55 F1=164.814 Wave1=4 Track1=1 F2=65.406 Wave2=0 Track2=0 Method=2 Param=40 Envelope1=0,100 7096,31 21037,0 Envelope2=0,100 15740,18 27133,0 Filter=0 [NoiseBand] On=1 Level=119 F=65.406 dF=3 Envelope=0,100 4747,40 15091,0 [NoiseBand2] On=1 Level=155 F=261.626 dF=2 Envelope=0,100 6046,35 16990,0 [Distortion] On=0 Clipping=3 Bits=1 Rate=3 lmms-1.1.3/data/samples/drumsynth/misc_synth/my_red_hot_guitar.ds000066400000000000000000000014631247673406200253310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Use FruityLoops to sequence your DrumSynth sounds! http://www.fruityloops.com Tuning=0 Stretch=400 Level=0 Filter=1 HighPass=0 Resonance=43 FilterEnv=0,91 3248,24 9044,0 444000,100 444000,0 [Tone] On=1 Level=46 F1=880 F2=234 Droop=91 Phase=0 Envelope=0,100 2379,46 9494,0 11593,0 [Noise] On=0 Level=56 Slope=22 Envelope=0,71 586,27 5996,0 FixedSeq=1 [Overtones] On=1 Level=56 F1=5235 Wave1=0 Track1=1 F2=582 Wave2=1 Track2=0 Method=1 Param=100 Envelope1=0,100 1904,53 5097,14 9794,0 Envelope2=0,100 21653,100 29585,0 Filter=0 [NoiseBand] On=0 Level=128 F=173 dF=80 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=3100 dF=41 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=45 Bits=1 Rate=1 lmms-1.1.3/data/samples/drumsynth/misc_synth/raver_organ.ds000066400000000000000000000014541247673406200241320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=12 Filter=0 HighPass=0 Resonance=47 FilterEnv=0,0 12442,62 442000,100 442000,0 [Tone] On=1 Level=45 F1=660 F2=550 Droop=66 Phase=65 Envelope=0,100 5996,25 14741,0 22886,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=83 F1=220 Wave1=0 Track1=1 F2=110 Wave2=0 Track2=1 Method=2 Param=100 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 700,56 2598,33 7445,14 22336,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=23 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/strong_c_dub_bass.ds000066400000000000000000000014321247673406200253010ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=60 FilterEnv=0,100 1699,80 9044,80 444000,100 444000,0 [Tone] On=1 Level=128 F1=65.406 F2=65.406 Droop=60 Phase=0 Envelope=0,100 3898,36 14689,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=92 F1=65.406 Wave1=4 Track1=0 F2=130.813 Wave2=4 Track2=0 Method=1 Param=60 Envelope1=0,100 3048,26 11643,0 Envelope2=0,100 6346,60 11543,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=12 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/sync_drift.ds000066400000000000000000000014541247673406200237710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use this space to add a comment to each sound! Tuning=0 Stretch=100 Level=-11 Filter=0 HighPass=1 Resonance=70 FilterEnv=0,0 2062,28 444000,100 444000,0 [Tone] On=0 Level=163 F1=2000 F2=50 Droop=50 Phase=0 Envelope=0,100 5076,61 15705,20 37120,0 [Noise] On=0 Level=74 Slope=79 Envelope=0,100 2728,64 4949,0 FixedSeq=0 [Overtones] On=1 Level=136 F1=440 Wave1=0 Track1=0 F2=55 Wave2=2 Track2=0 Method=1 Param=100 Envelope1=0,100 13167,28 40927,0 Envelope2=0,100 5790,92 10153,65 19671,49 28554,20 42990,0 Filter=0 [NoiseBand] On=0 Level=137 F=210 dF=70 Envelope=0,44 2250,30 39738,0 [NoiseBand2] On=0 Level=128 F=3100 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=35 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/sync_man.ds000066400000000000000000000014601247673406200234310ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Remember to send any good .ds files to paul.kellett@maxim.abel.co.uk Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=0 Resonance=5 FilterEnv=0,96 1299,30 1999,14 3198,8 23785,0 444000,100 444000,0 [Tone] On=0 Level=128 F1=5000 F2=50 Droop=45 Phase=65 Envelope=0,100 1750,20 5250,0 [Noise] On=0 Level=96 Slope=60 Envelope=0,100 949,14 19888,0 FixedSeq=0 [Overtones] On=1 Level=74 F1=55 Wave1=4 Track1=1 F2=220 Wave2=2 Track2=0 Method=1 Param=70 Envelope1=0,100 2439,95 19888,0 Envelope2=0,100 2439,95 17489,89 19888,0 Filter=0 [NoiseBand] On=0 Level=65 F=6000 dF=75 Envelope=0,100 1949,19 7445,0 [NoiseBand2] On=0 Level=128 F=8503 dF=80 Envelope=0,100 1500,20 4500,0 [Distortion] On=1 Clipping=9 Bits=2 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/that_house_chord_cm.ds000066400000000000000000000014351247673406200256250ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=You can use [Ctrl] and [Enter] to trigger the Play button! Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=2 FilterEnv=0,100 1425,34 4465,28 444000,100 444000,0 [Tone] On=1 Level=128 F1=130.813 F2=130.813 Droop=0 Phase=0 Envelope=0,100 2391,47 7601,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=311.127 Wave1=2 Track1=0 F2=195.998 Wave2=2 Track2=0 Method=0 Param=50 Envelope1=0,100 2391,48 6856,0 Envelope2=0,100 2423,56 6936,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=15 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/vibrato_pad.ds000066400000000000000000000015141247673406200241140ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=69 FilterEnv=0,100 5552,44 23002,17 66626,3 129286,0 442000,100 442000,0 [Tone] On=1 Level=73 F1=880 F2=55 Droop=81 Phase=00 Envelope=0,100 65040,36 180842,0 [Noise] On=0 Level=145 Slope=80 Envelope=0,11 37279,12 364063,17 422757,0 FixedSeq=0 [Overtones] On=1 Level=181 F1=220 Wave1=1 Track1=0 F2=5.5 Wave2=0 Track2=0 Method=1 Param=80 Envelope1=0,100 11897,56 43624,27 101525,11 186394,0 Envelope2=0,32 70592,33 194326,0 Filter=0 [NoiseBand] On=0 Level=75 F=880 dF=15 Envelope=0,100 53142,40 153874,74 250640,17 325198,71 410860,0 [NoiseBand2] On=0 Level=72 F=440 dF=14 Envelope=0,0 59487,82 135631,17 216534,77 306162,17 363270,73 427516,0 [Distortion] On=0 Clipping=37 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/who_loves_ya,_baby.ds000066400000000000000000000016511247673406200253730ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=0 Resonance=21 FilterEnv=0,100 72971,47 115009,80 155460,35 192739,67 222086,27 251433,41 267297,18 295058,24 302989,8 315680,9 322025,3 442000,100 442000,0 [Tone] On=0 Level=1 F1=60210 F2=440 Droop=30 Phase=0 Envelope=0,100 239536,93 425930,0 [Noise] On=0 Level=74 Slope=-20 Envelope=0,100 230018,9 322818,0 FixedSeq=1 [Overtones] On=1 Level=128 F1=439 Wave1=4 Track1=0 F2=441 Wave2=4 Track2=0 Method=2 Param=100 Envelope1=0,100 49969,26 132459,0 Envelope2=0,100 51556,41 149908,75 243502,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=18 Bits=3 Rate=0 lmms-1.1.3/data/samples/drumsynth/misc_synth/wowmelodictone.ds000066400000000000000000000015351247673406200246640ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=DrumSynth 2.0 by maxim digital audio, Copyright 2000 Paul Kellett http://www.maxim.abel.co.uk Tuning=0 Stretch=100 Level=-9 Filter=0 HighPass=1 Resonance=11 FilterEnv=0,80 444000,100 444000,0 [Tone] On=1 Level=133 F1=440 F2=440 Droop=55 Phase=30 Envelope=0,100 4597,91 10500,0 [Noise] On=0 Level=92 Slope=77 Envelope=0,100 200,40 600,19 1449,6 3448,0 FixedSeq=1 [Overtones] On=1 Level=174 F1=220 Wave1=0 Track1=0 F2=110 Wave2=0 Track2=0 Method=2 Param=61 Envelope1=0,100 1949,59 4497,24 8345,12 14941,0 Envelope2=0,100 12592,100 17789,0 Filter=0 [NoiseBand] On=0 Level=71 F=5000 dF=100 Envelope=0,100 1099,29 2099,7 4500,0 [NoiseBand2] On=0 Level=96 F=3100 dF=100 Envelope=0,100 200,35 450,15 1849,5 4997,0 [Distortion] On=1 Clipping=38 Bits=5 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/000077500000000000000000000000001247673406200201705ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/r_n_b/Hat_O.ds000066400000000000000000000013371247673406200215160ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley open hat Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 447,16 1415,0 [Overtones] On=1 Level=134 F1=13000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=2 Param=100 Envelope1=0,100 1043,31 2533,9 6250,0 Envelope2=0,100 775,35 2354,9 5000,0 [NoiseBand] On=1 Level=153 F=10000 dF=57 Envelope=0,0 39,100 104,38 417,10 1311,4 7062,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/S_hollow.ds000066400000000000000000000014051247673406200223060ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley hollow snare Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=149 F1=375 F2=375 Droop=11 Phase=90 Envelope=0,100 1341,0 [Noise] On=1 Level=123 Slope=36 Envelope=0,100 819,98 1862,34 3576,17 9163,7 11174,0 [Overtones] On=0 Level=134 F1=13000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=2 Param=100 Envelope1=0,100 1043,31 2533,9 6250,0 Envelope2=0,100 775,35 2354,9 5000,0 [NoiseBand] On=1 Level=104 F=845 dF=31 Envelope=0,100 894,91 1937,30 2831,14 6034,5 8865,1 12440,0 [NoiseBand2] On=1 Level=28 F=3700 dF=30 Envelope=0,37 6704,35 11025,8 14526,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/r_n_b/clapfilt.ds000066400000000000000000000015641247673406200223240ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=4.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,100 3352,92 6704,74 9833,36 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=102 Slope=-25 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 4529,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Filter=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 [NoiseBand] On=1 Level=170 F=650 dF=30 Envelope=0,99 104,38 432,18 440,100 521,30 879,14 894,100 1028,26 1333,9 1333,98 2309,27 5661,7 16389,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/hat.ds000066400000000000000000000013171247673406200212760ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley closed hat Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 447,16 1415,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=153 F=10000 dF=57 Envelope=0,0 39,100 89,32 358,14 760,7 1192,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/hat_rattle.ds000066400000000000000000000014671247673406200226570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=0 Level=153 F1=8600 F2=8600 Droop=0 Phase=-180 Envelope=0,99 1013,51 1013,0 [Noise] On=1 Level=40 Slope=40 Envelope=0,100 297,0 1605,1 1664,35 1961,5 2615,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=120 Wave2=0 Track2=0 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Filter=0 [NoiseBand] On=1 Level=87 F=9790 dF=39 Envelope=0,100 773,10 1783,9 2912,9 2912,97 3328,9 5587,8 5646,90 5943,7 8737,6 8737,72 9212,5 12957,3 13075,11 13313,1 13729,0 [NoiseBand2] On=1 Level=59 F=9000 dF=100 Envelope=0,100 107,18 333,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/k_hard.ds000066400000000000000000000013541247673406200217530ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley click kick Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,100 268,100 3710,18 442000,100 442000,0 [Tone] On=0 Level=161 F1=85 F2=50 Droop=24 Phase=0 Envelope=0,100 372,89 1847,0 [Noise] On=0 Level=56 Slope=-98 Envelope=0,0 0,30 1073,25 1758,2 3903,0 [Overtones] On=0 Level=132 F1=82 Wave1=0 Track1=1 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,0 968,99 2309,46 3948,16 7524,0 Envelope2=0,0 5000,0 [NoiseBand] On=1 Level=181 F=76 dF=5 Envelope=0,0 0,100 358,99 574,57 2533,40 3516,37 3889,0 [NoiseBand2] On=1 Level=62 F=3800 dF=100 Envelope=0,100 119,95 313,0 [Distortion] On=1 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/k_muffle.ds000066400000000000000000000014471247673406200223160ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley offbeat kick Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=161 F1=75 F2=57 Droop=29 Phase=0 Envelope=0,0 596,88 2384,81 3725,70 5587,20 17208,20 19815,36 20933,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 447,16 1415,0 [Overtones] On=1 Level=115 F1=82 Wave1=0 Track1=1 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,0 745,87 2309,46 3799,78 5438,0 18400,0 18921,60 20188,77 20933,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=153 F=10000 dF=57 Envelope=0,0 39,100 104,38 417,10 1177,7 7062,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/k_soft.ds000066400000000000000000000014101247673406200220010ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley swing kick Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=161 F1=100 F2=152 Droop=24 Phase=0 Envelope=0,0 238,95 2652,86 3963,18 6496,0 [Noise] On=0 Level=56 Slope=-98 Envelope=0,0 0,30 1073,25 1758,2 3903,0 [Overtones] On=0 Level=132 F1=82 Wave1=0 Track1=1 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=0 Envelope1=0,0 968,99 2309,46 3948,16 7524,0 Envelope2=0,0 5000,0 [NoiseBand] On=1 Level=151 F=144 dF=15 Envelope=0,0 60,93 477,91 924,32 1758,13 6198,0 6496,0 [NoiseBand2] On=1 Level=164 F=76 dF=2 Envelope=0,0 89,96 685,100 1162,51 2682,30 4917,14 6496,0 [Distortion] On=0 Clipping=5 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/old_kik.ds000066400000000000000000000013401247673406200221320ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,26 442000,100 442000,0 [Tone] On=1 Level=155 F1=200 F2=49 Droop=21 Phase=0 Envelope=0,0 328,68 775,100 2205,53 4529,49 6228,0 [Noise] On=1 Level=181 Slope=55 Envelope=0,100 328,20 1460,6 5691,6 6257,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/popclap.ds000066400000000000000000000013721247673406200221610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=300 F2=40 Droop=24 Phase=0 Envelope=0,100 6657,100 8059,100 8499,98 8725,90 8725,71 9628,0 [Noise] On=1 Level=38 Slope=10 Envelope=0,100 834,27 2086,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=162 F=2000 dF=38 Envelope=0,100 159,0 297,93 535,0 654,50 4291,14 7726,0 [NoiseBand2] On=0 Level=164 F=3150 dF=16 Envelope=0,100 2258,36 5468,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/popsnare.ds000066400000000000000000000013771247673406200223570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1090 F2=50 Droop=43 Phase=0 Envelope=0,100 6657,100 8059,100 9535,100 10429,100 11383,85 11561,73 11800,0 [Noise] On=0 Level=110 Slope=80 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 Filter=0 [NoiseBand] On=1 Level=173 F=1000 dF=20 Envelope=0,93 1073,13 1788,7 14391,0 [NoiseBand2] On=1 Level=164 F=1010 dF=37 Envelope=0,92 1132,14 1788,8 14341,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/s_pitch.ds000066400000000000000000000014011247673406200221450ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley pitched snare Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=89 F1=418 F2=387 Droop=11 Phase=0 Envelope=0,100 834,89 1877,11 3308,5 3903,0 [Noise] On=1 Level=123 Slope=1 Envelope=0,100 328,100 715,89 1341,37 2533,14 3397,9 3456,0 [Overtones] On=0 Level=134 F1=13000 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=2 Param=100 Envelope1=0,100 1043,31 2533,9 6250,0 Envelope2=0,100 775,35 2354,9 5000,0 [NoiseBand] On=0 Level=81 F=3000 dF=40 Envelope=0,90 268,91 1251,16 5483,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=4 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/s_spit.ds000066400000000000000000000013331247673406200220210ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=Teddy Riley 'spit' snare Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 3500,20 8750,0 [Noise] On=1 Level=151 Slope=-77 Envelope=0,100 298,100 670,2 10429,0 [Overtones] On=1 Level=117 F1=48 Wave1=2 Track1=0 F2=250 Wave2=1 Track2=0 Filter=0 Method=0 Param=19 Envelope1=0,100 1117,19 2533,0 Envelope2=0,100 2000,20 7598,0 [NoiseBand] On=1 Level=153 F=1900 dF=37 Envelope=0,100 968,20 2011,7 6034,9 7300,0 [NoiseBand2] On=1 Level=43 F=11000 dF=71 Envelope=0,100 2235,43 2980,2 6853,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/snare&hat.ds000066400000000000000000000013171247673406200223750ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=111 F1=550 F2=3 Droop=30 Phase=0 Envelope=0,100 536,15 1070,3 6062,0 [Noise] On=1 Level=28 Slope=-70 Envelope=0,100 832,37 3269,5 10044,0 [Overtones] On=0 Level=83 F1=600 Wave1=0 Track1=0 F2=500 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 536,9 892,0 Envelope2=0,40 654,0 [NoiseBand] On=1 Level=33 F=412 dF=81 Envelope=0,100 894,17 2211,0 [NoiseBand2] On=1 Level=116 F=6700 dF=60 Envelope=0,100 1132,39 2384,17 4887,7 6122,5 6122,63 6538,9 8796,8 8796,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/r_n_b/x_backwd.ds000066400000000000000000000017201247673406200223020ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=backwards flick loop Tuning=0.00 Stretch=100.0 Filter=1 HighPass=0 FilterEnv=0,71 442000,100 442000,0 [Tone] On=0 Level=161 F1=2000 F2=40 Droop=0 Phase=0 Envelope=0,64 521,58 521,0 [Noise] On=1 Level=181 Slope=3 Envelope=0,0 2384,2 4023,7 5364,22 5364,0 24136,0 29797,3 32181,16 34565,48 34714,0 [Overtones] On=1 Level=147 F1=8000 Wave1=0 Track1=1 F2=4000 Wave2=0 Track2=0 Filter=0 Method=1 Param=100 Envelope1=0,13 45,0 5215,0 5364,74 5364,0 10280,0 10429,66 10429,0 15346,0 15495,65 15495,0 20411,0 20560,78 20560,0 25477,0 25626,64 25626,0 Envelope2=0,100 36204,100 37396,0 [NoiseBand] On=1 Level=140 F=7000 dF=90 Envelope=0,75 89,0 5066,0 5364,74 5364,0 10131,0 10429,66 10429,0 15197,0 15495,65 15495,0 20262,0 20560,78 20560,0 25328,0 25626,64 25626,0 [NoiseBand2] On=0 Level=62 F=3800 dF=100 Envelope=0,100 119,95 313,0 [Distortion] On=0 Clipping=14 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/000077500000000000000000000000001247673406200177725ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Cymbal.ds000066400000000000000000000015451247673406200223770ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=0 HighPass=1 Resonance=29 FilterEnv=0,59 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=88 Slope=100 Envelope=0,92 1031,11 3173,0 FixedSeq=1 [Overtones] On=1 Level=106 F1=338 Wave1=0 Track1=0 F2=957 Wave2=0 Track2=0 Method=3 Param=15 Envelope1=0,74 1586,29 5235,18 11580,11 22843,6 39500,0 Envelope2=0,79 41483,78 42514,0 Filter=1 [NoiseBand] On=1 Level=63 F=7000 dF=45 Envelope=0,100 872,92 2221,21 5473,16 11897,7 20146,3 39500,0 [NoiseBand2] On=1 Level=63 F=12000 dF=40 Envelope=0,100 872,92 2221,21 5473,16 11897,7 20146,3 39500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Hat_C.ds000066400000000000000000000014531247673406200221440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=1 Resonance=49 FilterEnv=0,59 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=1 Level=99 Slope=100 Envelope=0,92 1190,27 3649,0 FixedSeq=0 [Overtones] On=1 Level=124 F1=280 Wave1=0 Track1=0 F2=540 Wave2=0 Track2=0 Method=3 Param=54 Envelope1=0,74 1666,10 5869,0 Envelope2=0,65 41324,66 42514,0 Filter=0 [NoiseBand] On=1 Level=118 F=6500 dF=34 Envelope=0,59 872,38 2697,0 [NoiseBand2] On=0 Level=63 F=12000 dF=40 Envelope=0,100 872,92 2221,21 5473,16 11897,7 20146,3 39500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Hat_O.ds000066400000000000000000000015411247673406200221560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=-6 Filter=0 HighPass=1 Resonance=49 FilterEnv=0,59 444000,100 444000,0 [Tone] On=0 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 4687,0 [Noise] On=1 Level=108 Slope=100 Envelope=0,92 1983,40 7694,17 15229,6 22447,0 FixedSeq=0 [Overtones] On=1 Level=124 F1=280 Wave1=0 Track1=0 F2=540 Wave2=0 Track2=0 Method=3 Param=54 Envelope1=0,74 1586,29 5235,18 11580,11 23874,0 Envelope2=0,65 41324,66 42514,0 Filter=0 [NoiseBand] On=1 Level=117 F=6500 dF=34 Envelope=0,59 872,38 2221,33 11897,12 22922,0 [NoiseBand2] On=0 Level=63 F=12000 dF=40 Envelope=0,100 872,92 2221,21 5473,16 11897,7 20146,3 39500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Kick.ds000066400000000000000000000014161247673406200220460ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,40 444000,100 444000,0 [Tone] On=1 Level=164 F1=170 F2=58 Droop=42 Phase=90 Envelope=0,100 839,48 2391,14 4750,5 8662,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 500,20 1500,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Snare.ds000066400000000000000000000014201247673406200222300ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=6 FilterEnv=0,79 444000,100 444000,0 [Tone] On=1 Level=163 F1=308 F2=221 Droop=33 Phase=30 Envelope=0,100 776,30 1663,7 4624,0 [Noise] On=1 Level=154 Slope=24 Envelope=0,100 823,26 2138,12 3563,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=0 Level=128 F=1200 dF=40 Envelope=0,100 750,20 2250,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Tom_H.ds000066400000000000000000000014121247673406200221670ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=6 FilterEnv=0,79 444000,100 444000,0 [Tone] On=1 Level=163 F1=217 F2=206 Droop=36 Phase=20 Envelope=0,100 1314,39 2803,11 8329,0 [Noise] On=0 Level=154 Slope=24 Envelope=0,100 1473,35 7997,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=101 F=206 dF=20 Envelope=0,32 3404,16 8123,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr606/TR606_Tom_L.ds000066400000000000000000000014301247673406200221730ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Right-click the file list and envelope display for menu options Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=6 FilterEnv=0,50 952,100 444000,100 444000,0 [Tone] On=1 Level=163 F1=200 F2=137 Droop=24 Phase=90 Envelope=0,100 603,99 2253,30 6789,0 [Noise] On=0 Level=154 Slope=24 Envelope=0,100 1967,48 7997,0 FixedSeq=1 [Overtones] On=0 Level=128 F1=315 Wave1=0 Track1=0 F2=630 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 1250,20 3750,0 Envelope2=0,100 1000,20 3000,0 Filter=0 [NoiseBand] On=1 Level=119 F=200 dF=27 Envelope=0,0 2665,19 4029,22 5616,0 [NoiseBand2] On=0 Level=128 F=3100 dF=40 Envelope=0,100 1500,20 4500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr77/000077500000000000000000000000001247673406200177145ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_cui1.ds000066400000000000000000000016701247673406200217340ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Equalised Roland TR-77 kit Tuning=0.00 Stretch=90.0 Filter=1 HighPass=1 FilterEnv=0,86 442000,100 442000,0 Level=6 Resonance=0 [Tone] On=1 Level=148 F1=5555 F2=5555 Droop=0 Phase=0 Envelope=0,0 270,0 270,99 375,0 795,0 795,100 930,0 1275,0 1275,99 1425,0 1815,0 1815,99 1935,0 2355,0 2355,99 2505,0 10500,0 [Noise] On=1 Level=71 Slope=44 Envelope=0,0 90,24 285,8 585,24 870,7 1125,24 1350,7 1635,25 1875,7 2145,26 2430,6 2685,28 2895,8 3135,28 3420,8 3645,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=148 F=5555 dF=0 Envelope=0,0 2820,0 2820,96 2955,0 3315,0 3315,100 3585,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_cui2.ds000066400000000000000000000020641247673406200217330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Comment=Equalised Roland TR-77 kit Tuning=0.00 Stretch=200.0 Filter=1 HighPass=1 FilterEnv=0,85 442000,100 442000,0 Level=6 Resonance=0 [Tone] On=1 Level=148 F1=5490 F2=5490 Droop=0 Phase=0 Envelope=0,0 270,0 270,99 300,0 795,0 795,100 825,0 1275,0 1275,99 1305,0 1815,0 1815,99 1845,0 2355,0 2355,99 2385,0 10500,0 [Noise] On=1 Level=47 Slope=100 Envelope=0,0 120,23 330,6 600,22 840,6 1110,22 1260,9 1590,22 1800,8 2190,20 2370,10 2610,20 2850,12 3150,18 6120,16 6240,0 15450,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=148 F=5490 dF=10 Envelope=0,0 2820,0 2820,96 2850,0 3315,0 3315,97 3345,0 3870,0 3870,97 3900,0 4410,0 4410,98 4440,0 4950,0 4950,97 4980,0 12150,0 [NoiseBand2] On=1 Level=148 F=5490 dF=10 Envelope=0,0 5550,0 5550,90 5580,0 6150,0 6150,91 6270,0 18750,0 [Distortion] On=0 Clipping=11 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_cym.ds000066400000000000000000000013401247673406200216550ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=1 HighPass=1 FilterEnv=0,84 442000,100 442000,0 Level=-2 Resonance=0 [Tone] On=0 Level=181 F1=130 F2=40 Droop=29 Phase=0 Envelope=0,100 447,100 1639,43 3500,20 10653,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=139 F=12600 dF=31 Envelope=0,0 38,99 540,100 2025,80 14700,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_hat.ds000066400000000000000000000012731247673406200216460ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,91 442000,100 442000,0 [Tone] On=0 Level=181 F1=130 F2=40 Droop=29 Phase=0 Envelope=0,100 447,100 1639,43 3500,20 10653,0 [Noise] On=0 Level=128 Slope=100 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=111 F=12600 dF=36 Envelope=0,0 38,99 540,100 645,18 1230,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_kick.ds000066400000000000000000000013211247673406200220050ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Comment=Equalised Roland TR-77 kit [Tone] On=1 Level=181 F1=130 F2=40 Droop=29 Phase=0 Envelope=0,100 447,100 1639,43 3500,20 10653,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_snare.ds000066400000000000000000000013001247673406200221710ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=-7.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=1 Level=148 F1=443 F2=443 Droop=29 Phase=0 Envelope=0,62 210,11 1530,0 [Noise] On=1 Level=113 Slope=50 Envelope=0,0 20,95 1408,17 3292,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=1 Level=98 F=8000 dF=72 Envelope=0,0 120,93 2220,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_tom1.ds000066400000000000000000000012301247673406200217430ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=144 F1=220 F2=175 Droop=83 Phase=0 Envelope=0,98 1140,27 5790,0 [Noise] On=0 Level=113 Slope=100 Envelope=0,0 120,93 7230,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=98 F=8000 dF=72 Envelope=0,0 120,93 2220,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/tr77/Tr77_tom2.ds000066400000000000000000000012301247673406200217440ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=144 F1=475 F2=475 Droop=83 Phase=10 Envelope=0,98 600,35 3990,0 [Noise] On=0 Level=113 Slope=100 Envelope=0,0 120,93 7230,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=98 F=8000 dF=72 Envelope=0,0 120,93 2220,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=1 lmms-1.1.3/data/samples/drumsynth/tr808/000077500000000000000000000000001247673406200177765ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/tr808/Clave.ds000066400000000000000000000013351247673406200213620ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=157 F1=480 F2=480 Droop=59 Phase=90 Envelope=0,0 10500,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1937,80 3501,53 5066,32 6481,19 10131,4 19890,0 FixedSeq=0 [Overtones] On=1 Level=155 F1=2558 Wave1=2 Track1=1 F2=125 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,100 555,31 1190,11 2300,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=6 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Cowbell.ds000066400000000000000000000014201247673406200217120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,73 1099,27 4197,19 442000,100 443000,0 Level=0 HighPass=0 Resonance=10 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=-45 Envelope=0,58 10578,26 12217,0 [Noise] On=0 Level=142 Slope=-53 Envelope=0,100 521,24 2384,15 7971,0 FixedSeq=0 [Overtones] On=1 Level=145 F1=851 F2=561 Method=0 Param=31 Envelope1=0,0 30,98 819,47 2831,24 6630,9 14899,0 Envelope2=0,0 37,99 745,50 2756,26 6257,11 13409,0 Wave1=3 Track1=0 Wave2=3 Track2=0 Filter=1 [NoiseBand] On=0 Level=128 F=1000 dF=100 Envelope=0,20 745,96 1490,36 3203,12 11025,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Handclap.ds000066400000000000000000000015651247673406200220470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=1 Resonance=12 FilterEnv=0,12 442000,100 443000,0 [Tone] On=0 Level=98 F1=7600 F2=7600 Droop=0 Phase=-45 Envelope=0,100 1043,61 4991,47 11025,25 19741,6 19741,25 19964,0 [Noise] On=1 Level=132 Slope=-56 Envelope=0,100 119,34 447,17 447,100 536,32 886,15 886,100 1013,28 1326,12 1326,100 1631,33 4297,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 F2=120 Method=1 Param=0 Envelope1=0,100 4800,50 16000,0 Envelope2=0,100 5400,50 18000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 [NoiseBand] On=1 Level=108 F=1300 dF=49 Envelope=0,99 104,38 432,18 440,100 521,30 879,14 894,100 1028,26 1333,9 1333,98 2309,27 5661,7 20038,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Hat_c.ds000066400000000000000000000013271247673406200213470ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,59 41721,59 442000,100 443000,0 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=-45 Envelope=0,58 10578,26 12217,0 [Noise] On=0 Level=142 Slope=90 Envelope=0,51 555,21 2538,9 7932,3 36168,0 FixedSeq=0 [Overtones] On=1 Level=107 F1=453 Wave1=3 Track1=0 F2=589 Wave2=3 Track2=0 Method=3 Param=43 Envelope1=0,100 1745,9 3490,0 Envelope2=0,89 39896,89 40531,0 Filter=0 [NoiseBand] On=1 Level=74 F=6800 dF=40 Envelope=0,100 1190,13 1983,2 3490,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Hat_o.ds000066400000000000000000000013411247673406200213570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=1 Resonance=0 FilterEnv=0,59 41721,59 442000,100 443000,0 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=-45 Envelope=0,58 10578,26 12217,0 [Noise] On=0 Level=142 Slope=90 Envelope=0,51 555,21 2538,9 7932,3 36168,0 FixedSeq=0 [Overtones] On=1 Level=107 F1=453 Wave1=3 Track1=0 F2=589 Wave2=3 Track2=0 Method=3 Param=43 Envelope1=0,100 7456,38 9677,7 10946,0 Envelope2=0,89 39896,89 40531,0 Filter=0 [NoiseBand] On=1 Level=74 F=6800 dF=40 Envelope=0,100 7138,64 9677,7 10946,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Kick.ds000066400000000000000000000007151247673406200212120ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=1 Level=157 F1=480 F2=48 Droop=59 Phase=15 Envelope=0,100 968,87 2160,49 4097,21 6630,7 12813,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1937,80 3501,53 5066,32 6481,19 10131,4 19890,0 [Overtones] On=0 Level=128 F1=200 F2=125 Method=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 lmms-1.1.3/data/samples/drumsynth/tr808/Kickhard.ds000066400000000000000000000013351247673406200220500ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=157 F1=480 F2=48 Droop=59 Phase=15 Envelope=0,100 968,87 2160,49 4097,21 6630,7 12813,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1937,80 3501,53 5066,32 6481,19 10131,4 19890,0 [Overtones] On=0 Level=128 F1=200 Wave1=0 Track1=0 F2=125 Wave2=0 Track2=0 Filter=0 Method=0 Param=50 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=9 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Kicklong.ds000066400000000000000000000013661247673406200220750ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=157 F1=470 F2=50 Droop=73 Phase=30 Envelope=0,100 2086,71 9237,45 18027,23 36502,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1937,80 3501,53 5066,32 6481,19 10131,4 19890,0 FixedSeq=0 [Overtones] On=1 Level=80 F1=940 F2=125 Method=0 Envelope1=0,29 1983,44 9359,16 36502,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=1 Wave2=0 Track2=0 Param=0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Ride.ds000066400000000000000000000013611247673406200212120ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100 Level=0 Filter=1 HighPass=0 Resonance=1 FilterEnv=0,97 41641,46 442000,100 443000,0 [Tone] On=0 Level=68 F1=851 F2=851 Droop=54 Phase=-45 Envelope=0,58 10578,26 12217,0 [Noise] On=1 Level=142 Slope=90 Envelope=0,51 555,21 2538,9 7932,3 36168,0 FixedSeq=0 [Overtones] On=1 Level=172 F1=291 Wave1=3 Track1=0 F2=469 Wave2=3 Track2=0 Method=3 Param=9 Envelope1=0,100 1269,32 3807,14 8646,7 39817,0 Envelope2=0,96 39976,36 40531,0 Filter=0 [NoiseBand] On=0 Level=128 F=1000 dF=100 Envelope=0,20 745,96 1490,36 3203,12 11025,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Rimshot.ds000066400000000000000000000012741247673406200217570ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=0 Level=128 F1=1800 F2=1800 Droop=0 Phase=0 Envelope=0,100 186,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=1 Level=152 F1=480 F2=1800 Method=0 Envelope1=0,0 0,0 105,44 305,0 Envelope2=0,100 165,6 444,4 749,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=62 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 1500,20 3750,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1000,20 2500,0 [Distortion] On=1 Clipping=16 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Snare.ds000066400000000000000000000013171247673406200214000ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=5 FilterEnv=0,98 442000,100 443000,0 [Tone] On=1 Level=159 F1=350 F2=174 Droop=69 Phase=45 Envelope=0,100 715,46 1788,17 5453,0 [Noise] On=1 Level=64 Slope=-86 Envelope=0,0 22,98 521,52 1824,6 4521,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 F2=125 Method=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Snr_snap.ds000066400000000000000000000013301247673406200221060ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=159 F1=350 F2=174 Droop=69 Phase=45 Envelope=0,100 715,46 1847,18 3516,0 [Noise] On=1 Level=131 Slope=-16 Envelope=0,0 0,98 348,30 1190,8 3569,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 F2=125 Method=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=1 Level=113 F=3800 dF=100 Envelope=0,100 596,38 1824,8 4124,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Tom_hi.ds000066400000000000000000000013321247673406200215440ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=3 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,83 442000,100 443000,0 [Tone] On=1 Level=142 F1=200 F2=181 Droop=12 Phase=0 Envelope=0,99 1490,60 3278,34 6704,0 [Noise] On=0 Level=149 Slope=-16 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 F2=125 Method=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=1 Level=161 F=181 dF=11 Envelope=0,0 7,100 298,49 3799,21 8120,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Tom_lo.ds000066400000000000000000000013461247673406200215630ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,76 442000,100 443000,0 [Tone] On=1 Level=132 F1=120 F2=98 Droop=12 Phase=130 Envelope=0,99 1490,60 3278,34 15122,0 [Noise] On=0 Level=149 Slope=-16 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 F2=125 Method=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=1 Level=161 F=98 dF=12 Envelope=0,0 7,100 1788,56 4470,32 12887,17 15793,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr808/Tom_mid.ds000066400000000000000000000013241247673406200217160ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=1 HighPass=0 Resonance=0 FilterEnv=0,72 442000,100 443000,0 [Tone] On=1 Level=138 F1=133 F2=133 Droop=0 Phase=50 Envelope=0,100 745,62 2443,35 4768,0 [Noise] On=0 Level=149 Slope=-16 Envelope=0,0 0,98 507,43 1788,19 3486,0 FixedSeq=0 [Overtones] On=0 Level=128 F1=200 F2=125 Method=0 Envelope1=0,100 3750,30 7500,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=1 Level=128 F=133 dF=11 Envelope=0,0 0,100 5587,25 12738,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/000077500000000000000000000000001247673406200200005ustar00rootroot00000000000000lmms-1.1.3/data/samples/drumsynth/tr909/Clap.ds000066400000000000000000000007511247673406200212120ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=0 Level=138 F1=67 F2=60 Droop=0 Phase=30 Envelope=0,100 2309,25 12515,0 [Noise] On=1 Level=123 Slope=-32 Envelope=0,85 146,20 521,0 521,100 670,21 864,0 864,91 991,13 2175,0 [Overtones] On=0 Level=62 F1=500 F2=328 Method=0 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 [NoiseBand] On=1 Level=176 F=2000 dF=85 Envelope=0,84 149,20 521,0 521,100 670,21 864,0 864,93 983,25 2101,5 7449,0 lmms-1.1.3/data/samples/drumsynth/tr909/Hat-c.ds000066400000000000000000000006331247673406200212660ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=0 Level=138 F1=67 F2=60 Droop=0 Phase=30 Envelope=0,100 2309,25 12515,0 [Noise] On=1 Level=138 Slope=81 Envelope=0,85 387,28 775,11 2175,0 [Overtones] On=0 Level=62 F1=500 F2=328 Method=0 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 [NoiseBand] On=1 Level=66 F=1000 dF=81 Envelope=0,96 149,15 685,5 2324,0 lmms-1.1.3/data/samples/drumsynth/tr909/Hat-c2.ds000066400000000000000000000014131247673406200213450ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=10.0 Filter=1 HighPass=1 FilterEnv=0,78 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=147 Slope=100 Envelope=0,100 1490,76 2475,30 9375,24 11475,0 [Overtones] On=1 Level=136 F1=7182 Wave1=2 Track1=0 F2=517.3 Wave2=2 Track2=0 Filter=0 Method=2 Param=54 Envelope1=0,100 2325,27 8550,24 11400,0 Envelope2=0,100 14303,53 15495,16 16984,0 [NoiseBand] On=1 Level=85 F=8500 dF=35 Envelope=0,100 2400,30 8475,25 11775,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Hat-o.ds000066400000000000000000000012721247673406200213020ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Tuning=0.00 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=0 Level=138 F1=67 F2=60 Droop=0 Phase=30 Envelope=0,100 2309,25 12515,0 [Noise] On=1 Level=138 Slope=88 Envelope=0,85 660,21 1455,15 4800,17 7151,17 9684,3 12664,0 [Overtones] On=0 Level=62 F1=500 F2=328 Method=0 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 Param=50 [NoiseBand] On=1 Level=62 F=1000 dF=81 Envelope=0,96 149,15 685,5 2324,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Hat-o2.ds000066400000000000000000000014171247673406200213650ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment=1997 Paul Kellett http://www.abel.co.uk/~maxim/ Tuning=0.00 Stretch=100.0 Filter=1 HighPass=1 FilterEnv=0,78 442000,100 442000,0 [Tone] On=0 Level=128 F1=200 F2=120 Droop=0 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=1 Level=113 Slope=100 Envelope=0,100 1490,76 4275,51 15495,16 16538,0 [Overtones] On=1 Level=136 F1=7182 Wave1=2 Track1=0 F2=517.3 Wave2=2 Track2=0 Filter=0 Method=2 Param=54 Envelope1=0,100 4425,40 15375,19 19070,0 Envelope2=0,100 14303,53 15495,16 16984,0 [NoiseBand] On=1 Level=85 F=8500 dF=35 Envelope=0,100 4350,42 15197,21 17133,0 [NoiseBand2] On=0 Level=128 F=3150 dF=50 Envelope=0,100 1500,30 3000,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Kick.ds000066400000000000000000000012511247673406200212100ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0.00 Stretch=100.0 Filter=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=161 F1=300 F2=53 Droop=37 Phase=30 Envelope=0,100 819,81 4395,71 7077,29 10653,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4500,30 9000,0 [Overtones] On=1 Level=60 F1=106 F2=106 Method=0 Envelope1=0,100 3750,30 10429,0 Envelope2=0,100 3000,30 6000,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Filter=0 Param=50 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Kick_1.ds000066400000000000000000000013261247673406200214330ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=161 F1=300 F2=53 Droop=37 Phase=30 Envelope=0,100 819,81 4395,71 7077,29 10708,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 4500,30 9000,0 FixedSeq=0 [Overtones] On=1 Level=87 F1=106 Wave1=1 Track1=0 F2=53 Wave2=0 Track2=0 Method=0 Param=80 Envelope1=0,100 3750,30 26254,0 Envelope2=0,100 3000,30 22605,62 27364,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=1 Clipping=7 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Kick_2.ds000066400000000000000000000012451247673406200214340ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= Tuning=0 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 [Tone] On=1 Level=181 F1=250 F2=80 Droop=28 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 [Overtones] On=0 Level=181 F1=200 Wave1=0 Track1=0 F2=100 Wave2=0 Track2=0 Filter=0 Method=1 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=181 F=12000 dF=4 Envelope=0,100 596,9 10429,0 [NoiseBand2] On=0 Level=181 F=14000 dF=31 Envelope=0,100 1043,1 10504,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Kick_3.ds000066400000000000000000000013661247673406200214410ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=157 F1=400 F2=50 Droop=40 Phase=30 Envelope=0,100 2086,71 9237,45 18027,23 20305,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1937,80 3501,53 5066,32 6481,19 10131,4 19890,0 FixedSeq=0 [Overtones] On=1 Level=80 F1=800 Wave1=0 Track1=1 F2=125 Wave2=0 Track2=0 Method=0 Param=0 Envelope1=0,29 1983,44 9359,16 19988,0 Envelope2=0,100 3000,30 6000,0 Filter=0 [NoiseBand] On=0 Level=128 F=630 dF=50 Envelope=0,100 2250,30 4500,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Snare.ds000066400000000000000000000013131247673406200213760ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=0 FilterEnv=0,100 442000,100 443000,0 [Tone] On=1 Level=138 F1=254 F2=250 Droop=0 Phase=30 Envelope=0,100 1117,20 3054,4 7822,0 [Noise] On=1 Level=108 Slope=-18 Envelope=0,100 819,39 1713,26 3874,0 FixedSeq=0 [Overtones] On=1 Level=62 F1=500 F2=328 Method=0 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 Wave1=0 Track1=0 Wave2=0 Track2=0 Param=50 Filter=0 [NoiseBand] On=1 Level=119 F=5500 dF=78 Envelope=0,100 1536,15 3959,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/Snare2.ds000066400000000000000000000013141247673406200214610ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0.00 Stretch=100.0 Level=0 Filter=0 HighPass=0 Resonance=4 FilterEnv=0,100 793,88 442000,100 443000,0 [Tone] On=1 Level=138 F1=454 F2=250 Droop=50 Phase=30 Envelope=0,100 1117,20 3054,4 7822,0 [Noise] On=1 Level=108 Slope=-18 Envelope=0,100 1110,18 7614,0 FixedSeq=0 [Overtones] On=1 Level=62 F1=500 Wave1=0 Track1=0 F2=328 Wave2=0 Track2=0 Method=0 Param=50 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 Filter=0 [NoiseBand] On=1 Level=119 F=5500 dF=78 Envelope=0,100 1536,15 3959,0 [NoiseBand2] On=0 Level=128 F=1000 dF=50 Envelope=0,100 100,30 200,0 [Distortion] On=0 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/drumsynth/tr909/TR909_Clap.ds000066400000000000000000000007511247673406200220610ustar00rootroot00000000000000[General] Version=DrumSynth v1.0 Comment= [Tone] On=0 Level=138 F1=67 F2=60 Droop=0 Phase=30 Envelope=0,100 2309,25 12515,0 [Noise] On=1 Level=123 Slope=-32 Envelope=0,85 146,20 521,0 521,100 670,21 864,0 864,91 991,13 2175,0 [Overtones] On=0 Level=62 F1=500 F2=328 Method=0 Envelope1=0,100 968,17 2458,0 Envelope2=0,100 745,11 2235,0 [NoiseBand] On=1 Level=176 F=2000 dF=85 Envelope=0,84 149,20 521,0 521,100 670,21 864,0 864,93 983,25 2101,5 7449,0 lmms-1.1.3/data/samples/drumsynth/tr909/TR909_Kick.ds000066400000000000000000000013041247673406200220560ustar00rootroot00000000000000[General] Version=DrumSynth v2.0 Tuning=0 Stretch=100.0 Filter=0 HighPass=0 FilterEnv=0,100 442000,100 442000,0 Level=0 Resonance=0 [Tone] On=1 Level=181 F1=250 F2=80 Droop=28 Phase=0 Envelope=0,100 5250,30 10500,0 [Noise] On=0 Level=128 Slope=0 Envelope=0,100 1000,10 3000,0 FixedSeq=0 [Overtones] On=0 Level=181 F1=200 Wave1=0 Track1=0 F2=100 Wave2=0 Track2=0 Filter=0 Method=1 Param=50 Envelope1=0,100 2500,20 6250,0 Envelope2=0,100 2000,20 5000,0 [NoiseBand] On=0 Level=181 F=12000 dF=4 Envelope=0,100 596,9 10429,0 [NoiseBand2] On=0 Level=181 F=14000 dF=31 Envelope=0,100 1043,1 10504,0 [Distortion] On=1 Clipping=0 Bits=0 Rate=0 lmms-1.1.3/data/samples/effects/000077500000000000000000000000001247673406200164735ustar00rootroot00000000000000lmms-1.1.3/data/samples/effects/chroma_sound_effect01.ogg000066400000000000000000000435141247673406200233360ustar00rootroot00000000000000OggS." vorbisD_OggS."_ -vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ@AlgF]Vsg⻖tL*Pn-ӸˠKqY!WJpᜎdOVz<%4LQpX .sSge"A!;9TZJCƔq*imхX{أݬ|]֡I(,"$&7m۲3 ƵPQwXW7 NQp(7vx!~E䔦 όVN"ME$ ܖЩ^.f,o,|ȬZ"HgpJ 똡w 2`>"!MTY,& XKe4[yձ/>D=sXp[4o,:75oΉ9O׻uk/͋/k~gk-W,ɧ`94Nz=e^IGKN b$8c @f=>8*06 &xxO>4C` Pܵtx8x@kgUگG~)vh(P\:u{{ {caTJZh\͞zx@ܶSH㜣P@<'DQNUP,RUدg~*Y5x\  ;@QmI:PP5mki@K|I p[LdDdDJԱyh[.x`y?'=6 "O'{'@@z}{: A8زczv>1:2r\; rumjTDK@=pPSʡ Mc}t`g>QU* Ûj5 @a84 U&G'Yy8[Nݘ(P*^pU˃-םE #N9|"qF@B4w'$7M}7k@s$nxכhl<%El5<@X[ h`(i,N_r}19ts{1)ecB?mE.p]U/&Q*TQMni(K_ &UCAgXߓ/?DHx3)@~  Q~1~<P   lF^ JVCoWKj5<̀P߻/ky(~1 y#d&N# @ug`80͟85I̲~NVӐ@,g\;P\|rp,ց]s xεPV)B6QT^uB\T`9}@墳av } пCѝIh*Sk TzFP 5  W}@lUއ HC.`O0^vUB^Z˿χv})~@l /G63@޽0o&kr3@Ŧqw-iYT+;b^!,Kwܵ?PzǷ4}(PxĽ// jVdَܵ ę+M_MlЩ_X@čs'V [+xjItm PV+w7 @L7HUu'؅L̻8Ҟ$D &ƦZûG!@g8WМ-̞H ܣTnڻE2zn#^~"h; ?*oÔ@}nٞ5#^| pbyͧÒ1~gѝ2xZW!r*. lT1OggS@{."%"!~ƀ Ӭ=`L c*"AL Gv "\IH! Pnj) ;^20f @[*$h=(^WQԅ=LWP @b1⚳h)"eR@D{z )zоPBf/#I@!k]DT dK,I^V*'CQ.r*zf(.@PAxb\0ɀ7~o;ID^9Np< `K<zx`k@]{.Y`A$if7eŁR-]D^<ҩ*!HuI_U B/HW5P3"X#:JWCSpV@.5SeEu}*dV4~(=}Po;@Q;s- .  ベT~IU"v|Pg؛^ #,Dfs-Վ%gd0Q8:}hz܍ = w3s>`" ŻÿBZJHd\)*8gn)8TkbP윎), nW!|o<@ {//[ߑT'8EIhi1J\af+!?(cq8l'}|bf~Il 򕀿^=U7 'P8-k oo7~0f;W}Vp:Npk<@230ys#Kq ྫf1η[+B<{PBNz5;QE؛Җ@#$k^;'8%EÊ{K&i-yh/c4@΀,TLv 3[V"^{(: t'请^ 7%5X`Ou&;K1`SZQu8wQMh( ĮU z|LusǑ<>HlrS~MZ%A*BI<4*?| .m \uz^'9$ȓH)Dch1E%R3/- @!tv@E͸/{ IvZ%uzu`h[M4d?~'0~6m ?nS=om9@)lSDb^[ďz{j"E "[^-Ǜ8DQZ1_\CJgI~ _^ U"s2WΕxؙ䝌+f A{UVB|3WY(\0Tٛ9k$/`^jJui h-k~V% L]f="v;0jxv @KBŝ]6\+QKT_X} 4O3t1 **w~$*h(9j!s<#vGUOw[Ńh ˇ FP=d Q |U[rz忍2DB%Ff$ ~ =38]jsS<@'O$n~@v @pS$pMSU7m=GPMIv9(ڴ(K# 2Wԫk1DbR3:P @X].0ͧ d0E:p(HNixjS=U }7ynk ?u9֕ /ՕZ@:!0h\SWBBgA j` ޠPo*4D+[˩QUnKL т1Tw Pn.:gWk08C+0Ǚq|`~U:/ r4|LupU`4 yH _d#GI&-;֝srZ(JtR|h.7).YYDAЪkӸ3@ׁ߹PgT!U*u@h]ћfԵ^1yZ} %kq3EAaWFBB*!m[>US?Mu;`84ss(au=V" r6(MӮ x}]O}L Gcx 0ڞ&eK/ dTbV9nq jCcLVưPRTU):mNk9)ԭ+Z8laP!4`KS h S9S9٥g^zf+7zAzzFP*8cPa[&(Ppp~Y/uˋ66RlX'`[ 7n}x cSg:RpOPt\U섊O, <IMw 6?t7}N^u(Cf> `3;'QǠKz9~YrvK KwuWiLӠ&81U r5ϴ8,@r3}^ D@R `&@8(j$ ^Z\zXЇlcpeK}Ix </z$:1c(hkKґ@6ms9z)Og PT?̅_Lg&k䨝5:QpR[j"K_;(; |;Mu _9D?X ƖjUj~r+>((OggS@.",ɾĿƼʻĽv̲oz+N< 6Fh]?JmE=}F%]/jI͞[k7_xh鮞8Å! (1!AuXZ((yۤ_auŸ;c33 oұW5p5!|ӊb" ea#J*!XejնDJ_tT-N^xfqՒjϋYj$HŪcN ZgGx=A ':n ,@0V00 64GBQ (՚x<ND.=l+/,cxj{4ƗFb}`== x~NY>W@wצn7qLsli82@yLgͨh Tu}3WK I6I̪-$D*%/Z10'd >n&`K \|wYT/E]RQL~ =|~=a3/ n-N+ẕ]};]Mh$z^Tw@\GV[&;iM9 .Ct`Qg=w}5LeRj/&RujiazU]]cAZ$@#'~& ˓k~(8Us8'vkRa^1Ýo >}e m=LJ#%G1p"8Z ޳SWUiMR+Qjy, %iƠ.Z5znAR!ΓfcŦ|CcS.Ư.dT (s& ^<7 P-j5(xu&p)A5|޸E쫟VIPO. 藀YYAc"-J(=5>%DU'ޜ%5aUt1X'JRQ].6A[>Ӿ$Й=/l᠒|yԎկ:ljkҸ'V7n8S P~2goP"k2 ,*XYm kzj| @R$/ 0|w zz#ikY'U,{ %^Z(+ vH:EW]e]v.Km3ެy^aE'x@1Hw]±*ߒLYFt(%]4z+}YRIKg0 (P>%5:E$^"g%hJpj 7iH3!uRR{ƁU H3^Zh8QO^~YS|-.3 RM@ yBKIcGaŨ8*ӕ̂K"ŭs*:p{MD >*3v ?q(E{}1v5uXIE8`mH8œwo3S\Flb+'IyrvPA 6s(TX{`2JW<"p9DUiovƘA <萉+z#}MZk-]达'd>;ٟę{7p,ƶ(BsCT8J =1u` dd`xK\X\6U~NE{L5mw1bYݬ:VC="s#A6IzZZ<]qze:ł< ^VϜ Ng5>N<Ke0U˩uI7`:ш4>zSA[xNP̪] #pިE{v"3Hfp) @Di& ?Dn6^QWĭ)pkTVoK۔ 6M:GAGq*KqCЀ ]-!J!%VEC>l# /ʋduv@oKHfpe&UWG4LzOuV; MZ6}RCR9#3@K*v4¹EO[Kf0!U|*d` {7CX4%=HZ%pIYR ka*抚bsAcKg+4#NG%).T.]>VR}bf9y!+;*6x~S3~DzPUiEu1u@yeg+G'3TC+|1_;{$@7i_=鵲y8ma5`\5WߋPÊw# 8%`lݻ]٦ kUP~`$;#8u_RDX8m[hvW)lJ-nXi@Unf0n~V߲T[nbf&^ U. ,,DhGg.0F3p4;!`Ii+Ȕm"@xI]_-vWZȭE]Ri[Q5 CeC!;$n[%vS[G_ Ԛ9u%@?& :m `YD~NY.V b:ZosG6n8ZkBID{; p1`Qm_b-'>1\5Cf!׻ ɨ8B x5Ÿ} $Ħ=lP.';H0!-La4a4%OVj m0VQ.@']w]!rT@e7Jv҃ӗJW&^PdC|(E-3+/-a&m KfoBOY6B`)3ѪHyJ˫ޓ2 ;@uY4!]҈t{!i(TZi5h霌 =X:*FR͔W6s1GUҍB~E{# X5s  Q7O@͒aQ9|*ĒZHy V5N5e>1hLJ())sT*QVP=?S"e =GlF mIG!9dͰ*!NBil)}RL'3

Vv?z䐙q+BtP& Vy8>ڶ תN[' `sVr7??DD$I͝^S%u<:[~+ZZՠ*pݦ| c`;&S fTJ׆Dx Ԉ H?%tYͰPНI059 !y"<؅ϐ+L(a5ss+NSd=9n.lɗI uԦ wnjÀU魴OPB&kEcī<{pF%׿~p~W&!UQ!O4TZ ,%3{H`Ok8I‹eU&jPuƪ{_c]aJ0efݣ rsG ϙ-J2һf#T_D`PCŹ%l1-84# )~gBRO\iKS3W"n$הgUމ)THg?PrUyG Sk zMk r8˪-V2 ݯnY~a%xm](;4F/LԜ.1d?9zβq64#'8rQQUuFPe>׎ iǨ5ʍl>VíI}R&0*nkΛOf.H9CJ!t9y?V/+! l*W䭀L-5NO01>]CZa\ WS= YOUÊ_31ug xge޸ώJ0<=ife(]ְ^e^[upRr(<NE|Z.=V܄j")m p̟(jnE](+ȪƏM15~\Liu#4LͲ:ZyR5 i ʝ= 6i[WeTV* a`X8.v֖Ņj{~k(Aʅ|f O%qq={^Z-7-o׸(RO$4~i[G{e2t-Oh=k(&Bh^q{]1ŵ\+SU֍,(GqO'+54BV`X0??;N&[x $:4Ծ Ec+]sH >0зG6~a׿y4~wY.qNak,FYb!f[6}Rez[%՜D_E5UWsk#8ix`yվY+=0 y52/ZSlmms-1.1.3/data/samples/effects/explode01.ogg000066400000000000000000000546421247673406200210050ustar00rootroot00000000000000OggSi]cӰTvorbisDOggSi]c}|-vorbisXiph.Org libVorbis I 20040629vorbis!BCVcT)FRJs1FbJBHsS9לk SP)RRic)RKI%t:'c[I֘kA RL)ĔRBS)ŔRJB%t:SJ(AsctJ$dLBH)JSNBH5R)sRRjA B АU@ P2((#9cI pIɱ$K,KDQU}6UUu]u]u 4d@H d Y F(BCVb(9&|sf9h*tp"In*s9's8srf1h&sf)h&sAks9qFsAj6s9j.s"Im.s9s9sspN8sZnBs>{sB8s9s9sАUA6q HEiȤݣ$h r GR TI) 4d!RH!RH!R!b) *2,2,2밳:0C KMXckZiJ)RJ) YdAF!R!r)BCVKZ " Ǡd<Z]&Z&f$[ @ml%`~YJR5J VRfO $IH0̑iСH;%CY& :6i +42rK9h9p`86,&+b]/dU1G.I5(,At%Hv'f7`<"Qj >,WϗaX+=ci) Q[;;d0N4eyid&d472hF䴚̗$c;tCܴ}m7V9)wX>;í{+lgnJ8=V7u&{ST} CHᶢ+g 8'|9M%L>cORˉ ͗ȍȕ?7Df44% qѽS҂Fb$.DI品u'dH-e*P_c_u';`7+{4F2ҁT)0id]X kOtZo8@y?i\`0'0X(Ri$'#?73'cf!fRy"Z'lomyvg˶w|5fĖrGv=9׹nOϧ͇t0܁g?!FR47LIQ=GN n4/3Y=_![?bisNsjSQuLd2,XM-шաR7'@\…kwq`;ӺR?QffiFn$5&&fIiT᷆}0ϼ]q~q]#hPqgvwm)\nZ\;UX.+ed]PpԍNtK^gZ9.y{ph^Z/a)!˔Ɋp0l^&idEfҜIIbK#^_qvzHi4%.۽n%~Gސ_oú:긯ޥ$!$:λ"!A #nj mKO'-KO'-.Esd&fdD34'@r!CF^fFdA6RD53앺7:X3 c'0yzYu.uLARef6e'.vqPsR-P:N)s,$;nwq0`w`8'"x'EҨ&i4&a}][C{RH~xSwo;67m O9ʗ^;>nZ J_VVܛ}1` kԛek]\keg;fN+OH4M433@M$'/H4S4( WGy&=q%c IefWCinu/wnV&+c;lhjD*_k-" ;c>a .H[̯仃~˓|w܀PLi$#+f4ffyW!t萸j>}bhވ1uN\۽DXw|ï;W[^ uF AmK7* /˽QG::\$Q,~;WX ܎;iNDF gLsdDOss,C3"iQ?~oRڳT6oZFf)!Y*#ў+{xOzr(ͪKi]MJ!7o܋7Ϥo,T- H~kOnLܚ'NeBh|Yft 9ihʈlhD4"&#c4's8cq?547ԷXRrV;'c!deccCw_emJQ)1&B3l5k^\w# ɳ pU3(uz緋s3B}|l1>os~}ƶڝ)s3⟇$Z>ĖU>o"FSٽ#2 ij,x~~ϛ%b ~]ߕtŏҀu$S-I^L'N>88O2a& ƿOnq>kQtd7~* :H)‡7Ω39HN ̅D԰3#:^{}cs)N-}WnF/Z{\<>6)*ЯH/_E!>|^w Zi |)O\)9T&Bo`K`4fE+_qbݞ}fhUT,m,ot2Bm],ìnT2ݻ厦(m>a!ڍ*̷17zy( ~\w^e$KpQ); щ{+;{ԥ?Ǽ!;%i:}GO2#;#"1U?ֻTsћ$<2epNۿᎴdz02&#͚%ߞm 没[׸MXm^k24B>l";F/w10it"ˮ<}2Y7#?ݸgNSIy@$b'.mHHڸ H9()xOd=g5߿iJCZ:֥g{ %X(pF8OggS@i]cQ6˺{>ủDgӳ.,JVz4JB:e^x;|wwWItIrwߨo߉+ =u)mvq CG޷bYX̤X˘"3U%R89P!~;;v&6\>זw@i] /fcSj-wppg.}Hxϓ[-!҇K0BeIL҉g0=%JXl5_i"ho i4mgqrn2vL"^x2'[^O2P-'tb: v!QGrW/:N0o}lɕ] !\R5MΙD9AJqr* j6S<::ӣkDo_#;QJ LA9.hM\`;;W|9` Yv^ec (HC2%1EL/uHcwìcYAMmRn9lo3Qդ#uZXePqlEgsV:LpKq{u,EmŐv" [^u%mp;OpR?m3'82'{qY[;4c1_<Ѽ0'%6l:~/_DCazIܢ;mC89VlXxlzq׮myUV [Q@;^į@[f7F MLǶ㦷ʼnTW =:kɪ#*+W(PJdmxEhIWCڵOc03] ulYN-2 #uW Ae@ N*^ ~;^WR7r;J6 pQJ mcwtl8]z:1yl=ڞf|\}ͩCvsҳ&Èrj2;d(_baR}rިn9N~l=e;_s1*n躒}5"/( [>J]i[0q* @t(yvIzttp,#U%y58óc6.|ձad('NR{wn!:ȔnpQ cRq>5~1K}ɌAMV~W){#"mv0KO堹A.yҿ9pu?!N\.3qdOFO]gL-܎ RV|% 1 %Ș€!!RDx:2mYj6\r(FZ=bl ;=LpoyOw%zyptQ ;͟]n\/OQN (B֞ dwf,N>ecSEN:AZT#UD쩏Wp+wـ c3`i]ɢ?= 2{vı;(wΧ-s$kՋקq6rV~Yd2NL%A?M[|: UB]QZ{Ëxړj*JBj7nke\uG}vٶJKZM=?xR ^Ȏfޝ~մ0ayJ)"qqpp2#eIo311 rluOQS-\bj*&)A rӍƂj MvܒJX|aB6ݽQ4Unߎ}1Wc$X7*\*w{O$h NRq:"K'.,|ݩTn?]E_6sc!vx$ _7UjZ7u;O;<ń)>7LQԋOݸa~+ٯi4܂g;,7+G2C=~!Y@㧏_\汛UDrlt+BtX*cCPu!ڑy*RN*ה@QBi}ؖ0k8;==-WUMݙZyn Q妰: =pXK>v[96pNT'Kǖ$1رˌ<==:ve;kv=Kk/N[+!un@7IsPfIYq[͟2wDnߚM!8pJL7RQF6[^D+ nŋ|€Jۑclt4֝15.[UV-Iy}w_b5Ml  qW>+we܎W+RccAS;G\'6/3qJ0ҺXU͎eŤ 2VIysLᾢb I1ju\gbM7M7Ϗ8%P1UkqCAB/LAu{^wTflrϓ{ Ү (W{vuu[JzrcƦӓUf"nzR!$C HbP^@>YE){@ڶzX$7rӓLkd;7c} Hdj܄ +atP 4V?B|7=yf.^uw2{'\>^:.$rR߮ow$?$ܱGrem&GІI :woZ^7XX2_mzm)}ef rRW՝5Y00+^O1wcXsKF)ꓛ{|uNp;=_u`yL.98dVI'l/68!vy?nB*z`ts~ߵ1LjnUdˈҏD㵎U$. ^^WϦn. }ƖcW£1V\.fO=Xm^!zc^*0Ʋu\KL;Sq6{z!9#0%X~P]V'pU7fWE97l ui11q8~ ^i`;wV^?E*S麽`q=gn0l=?%\WP3 61V@Ng\JNwoC~=MfXXܒ.g펏r.e>[6깭n ZWSlr@4 jZ"lN t\eRjXsO9l,jR*[>vo1F(jJƍXJx@H S˦"چuZ%)!9y }#䷹RG_4aw׺ZEw ɧeeeP> w4jN:pZT?!-:n5=.L/rY1+=ג;|-W}ndtR2>f''dC[4yJ$?^g[fncoz?%!>1@#!`Fb>bkw1@`  ^W P ПdpPKH֨WO8]W~J6FJ.cjԉt;ڭ 4I3&QBrʼn>i> B&*!&%11V擿l+Hqtv&kɨN_v3(^+%Fۃ!< (ZOggS@9i]c>p۝w Vnɗ1&yU?e{w鶌|vn/qIr+x,YtLll6oSLxNQLCS # A })] `ƧF\btW^7^(:@]#=nT}ED >]wvm20@CമV W]{ӯ^D2]%z0OO$wIiR Rs@ q#)Fps>-ͳ).wdg29G/*ͥ -%CvwE;U`ͽ ![C튰PT\^>t{_uF9Ӯ4co=ytihz:sg?5fl\2A ^i*bmgd QbOQj]%PHc|v,6"E (RJԐYVn7~t6] hӰT"˝O{aB?3,lp;W埐F}w-y>Mx<:}.TÈQIwC)sJ0p"QWuU'Yd!S@V#dz Q3ô3IP~J EH4'N(]wi`8@wa?ISA]i OQ𵌐S|#ڦۼґ468<0}frPkJ ^OV-Oˠ  'l70]";QOHnʰ_bA~NX+xGx%ЈcùVJ%M>I]xQ 1 ͔z?Ee!T{GtMοK1q@ DZ#9 >=O4P {n f9ӡW i}ryNiwpt[v{F~ 4TCK 1dF9O{=1di$8/%Ie~N`LJ-٭.Mo|ޝUATa5^9 &hɟ&< g?" ]wr'Sql38iybw'LK^^^j6γKym,K|$tMr= q+D|wdÂinbzYt" OY<]$;JـӾV$w 3q;?ocɽ9l>=\8N^{ҌӝO8bL6mixb}.Q|Ȧ>R%:J6'Pٽd R m$ZpFuB>۽^wOKAsQJ?!-D!Xywf~Nhlm/-ۖJdvL\}% %^ؿA p7Y" S­ƚ>\ggʹ 5|ʼOCx-I\uF34VRT#uie @=w vg;I:t#R'ףwW'_ž]xwO$f-4aCLr&㡶t/(#2r{휏vb1G者pFeba ()*} -72Kl5pcX=`0xEł'(#_%k]a!nvPg+TPli'"urЍE[֓eM3nuŚ4.[jNqXJ8g uNS Q0AWՎ*kwXYǤt+{vWl $JA($7I$^į!m]i)6Oχ}Y%.?cӃ?I-n].cKpސ6v5Ƣu3~]"1ߞhto#y3]p5`VFUr1#D$~ O.lmHV~1v#EB0`r=f?vu7;/rn,>Z>OQ{[f+D4p5q q2X 4yJi*8Jp8pk?TC󱨒; dq$\]>ap@+藍LxW`Ϲ!%-j[Y*.㫗ebݗV WWŊViM1=Rv508/9 TjNe@{rP$ܘI\ )(Q̇wܽ.2j@]2qɾ{ޕ]?!bcWΏ;̷ܲ~<^|ڟo984`fs$mSSaeBk?eJs,5{xPFkKھ%/+jĈ+I8܅ēf[a~T.I%\%MYRGZ%214X`n% JK1=O.`@w5 3NRD7꘿ގs%_1^[֢]w% ~wl*`ND0Gt^g}Vpҝgttzy >[Qʳ͢qb#dv狔QY`̹u$W~O`ʝO` x F,%*(tҏNOu:p#7Ѥ`_p%׽=cC'in]7'hl'ە_jt؋WՖ;pjK.T*+MKĺAJmp~=w vOӇ`ځiW-}jr:(yu^'W|#M;[/2@N">vL;L0.

͸9MXդ7z)Haxoi<(233norD"1"s7zJaHT%b1OggS@i]chK{(=O"`NcT?ow0لhq_I4yyvWg{,+m%@" WߏMs/7!+:J^g+jR2FV"C}H x ʽ]@2`ة蕶WMV|8߻{b<&6XyEwr~x0㟯ǢU-a;J8r&AIJ+x}Z,3*"P+^=w{l Ի&M]q#HF{GBΒMͮ~sp|~=~TUrr dټsH0ks]+w|j~+I~x7U5@@J, =g]H>ĻKIe'7*)EBϖTtǤzL׍Mo4c'o=JVum坛ֆçgK?t J^0g͔I:BȽ> ;q| uIKQ%!EH]wB[ & \5"vJJ0 LT=Es::߃8fvHI>_n$S6X^u߅6kM(bH'}_ -!Wt3 p""$\Dʽ诞/.3J&POOԶތ@' k`NzߎMr2Y><p+6U΍;Dp?;>[~(bN"jLr@6/Hǭ[_.(bz+"` ^ʽnf;{'€ 8-Jq'$;^46j{d?%wzkYV='Is\i{Z6IG9FS(n0uepSD0hu%EPYc~c?ƹ9wi,;PVLO >=גmދ~+hs#/qQՉE"V[ѸtzS{~j-^a9W^HG%-!yZg3jܕscrR-M9DB EDTPXH>꽚ʎ2{S${%xcR  '}ь^{QK8.= B.iH|U![{+ |X4H|k3V cGLzMV 1/j@Tg#LF@ep679Z1&D^P5|y;*zwGL[F V͹U]ZBtnck]z;8L|jx;[ k,Š@VDpAM@=W:Lv &MDRϟiNjP< #O.+N_|קܕJ{{g[ H2Oܚ6p 52)` ʨ8O2R$Ʌ~(QJ$"=+lz٣L؀Avs)""x.=8Oq])MS'l]otdQWz}'t;ZAv}~&plz`<U`%lšT*+X .ٽwXÿV6lK4''U_'u;Ԫ6rH"PJ4[@B \V uP!"~ٽG[^3LP8ZUOSBDB^mg=~rxi7_~E35޺ob/)0X]F+DskF՗r޲)%Ġ ^ "]u@"}g[@3>Vv%ꄻ"@+xHD~!!i<1}mPjw(|DOcR6@y[2 l3mñ4WniB]l!f+ٽGD {bXJb  ܈]#Q"&tF޾}vS>UxFS}+>mH{BtFːHIk!\ 6MQL]gksEX?P(QDH q-pIٽ[QhQ^+  | pw:pDh.~_<V}9zx;˭-6} n^ʄt9MȗNM±buY($PDX0Dٽgoa*W}OzA]k]M1D 1!z{ǽk}qS"v{nCgOWǴlTJ@z2w0kwvq5(!=U,H,aD*~}kOHe{I:>Jcڀ/I}*?""N:mg9kZznlv+9'\ZLs Dhй `d?]+fYEil)^V(X;P\"X\}P8 fV=m_LxWJ*F$BD"p4wE彋B{>յa< qW!dGM7ӻ^Mn%D ަCfEP c  H$(H}۰a[|$}j x`WBj-#o/ }^ sD_wE.tw|%Bh@5pkX T$$. }[%/ނ&+5&$B"BDedr;B?z~&~⽍oGG%1gm$JW$bjv`2dJ }k11l{5'`& HVsB]j$BD$$" mv^wt߽ӇV}Z3$onCy簜>;c Z5h$ ,"$ }KJ'p}kGIY_/hlsyDBD$$D뭬mtQ;}t,Gf~ޭb'7(%sH. QHU1`: TT" }ې& v?mfNOxX80[t^^u܍~Ccu*Lэ2:Ad2K7Նn] 0k7n׆kt0?6n 37LkCF}߿uCjoٗL] *V}lhLǹ_#D:IOxo/ϸ/>:k1O{'_;O>w| 'da-|9tp[8ߜ_[ٷp8dku2~Oop5N;v盓kuװa7qtQ,_6_6 "!RaPPOggSTUi]cOK+()((')')((((((())(()()((()'()(()((()'(($,_6_6 ",T_6,_6$"p,_,_6J0^,_6,_6 !!rY E`,_6,_6 !""pAEDA*,_6_6(*.*H,T,_6,_6!HPaA,_6,_6 ,X\pQ,_6_6 !&0H 2,_6,_6 """TPXX`,_6,_6 "J`QI`,_6_6 " bP VP_6,_6 "!I 0H_6Y4l""`PA@B!,_6,_6!""2p`_6,_60$D\,_6,_6- X,. ,_6,_6 !"$ D",_6_6*P!,_6,_6\qp,_6_6 HP\JP_6,_6P..H,_6,_6 !!"` ,_6_6 ""! a,,_6,_6 ""^,_6,_6HP*Q*,_6,_6  @M@ `_6,_6 !"\"`,0T_6,_6TH*Hp-T_6,_6 "!Yap,_6_6 """ X (,_6,_6 X,,"P,_6,_6 bB"*_6_6\ ^ ,_6,_6 !!" !0P百4l Ytl"!!\ ` U$D,_6_6"!! P,_6,_6 ""QPIR`q_6,_6 `H!~Ƚ0C XH(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI2'U&s@ (x[ @"3\@@L">/lY=en+ym@/ O{O <@>ŌyU%`~?t'sgR0dG_ Po||z7< @Rh,V(Dm5~÷hKxB @ `$> 3>vAMYdE;Z8ܷq4`|XJ$"XEk-X2`U7*>o7|wxs ^@Z>z}`)`x&Q @i5!T&c$`@DmlqBG۸|es)=`~%!<@g}fZ[D,J]QL. CMW_w =p~{ށd {7>$_` @4Vs@?PO ^!:`\ nl<mv M!o[>s< AhϽ#z1תnfxV%%= `l x 1zo#@ _J X.h+(0 _(ңÈr1X*`CЀP 6mܺ,CB3/q/s"C.~p}ϳEk*"5vj&@5 V `P/˩?^?f|@ ^K 4' .F]8 ҟ Am-m?KvmaiW0gMI@Nk?x~۷U͕pJܼ{JuӒ'6_ Ww`/ >gG_`5R \&a``Dt1 S(eLޙxU%;:kHXhZo#u]u9n/:9"'S ^`ԜEo m^_z@@^O|n '{Ē `G @W|hy `)b\P/0cp M.@d fx}cMtR:%pX=xo[4xIDP/kn-uvuoo.f=| u77KxW7uR+ 8*H+]",c:@"d"*(6~yelkLxݴVmۯp ,^{?yY/;pH74`_n z3&޼qr *Xt.[£t>T#&+=s`_>D"ÉHA~j4i4Ot[N!v^T~ˁeŹ P5z\3FCܹQ$<> ^  7~{;pu_ i,+EaIC`ge _+)W>~m>hdw$3Q(~gO@_koTIM@W@ hh.f)H5@.o`@I1~{=lԴ̗ohJO@]<}߇?bsi\(ܗ@ ̈́D\]G{\W ÷nWx7>_44 @ <5}qAJ W#z xE8fQ~ԴOk-Y': @ u߇xŹY@ ̞x 1 էy9-[-k|,\ ~}?'׿o)U5K L .S,^8J@; [H`/ޙz*KvHM|yJSy/B7\a/ʹx%"ܩZwTqc ?nM}wq 9Xp{ zz+>޺۳׹TVP@SwHV:?6_iZ˻hX X?48^ v @x5m OV;ne/-yPoP?z9U+ sp  jX`)+ET ƠV0.?4~WYپC]\YO?>߷x70oj-j@|^ b2çz P߽ wOg3~@}_T[,E< & ^,6(AR @`>`N4vgڱ}|Zrw O}xډeJ"b*[ ^'o'XDQ/*:|Ldz~X(=F_n_*@ `R9hp )=Hl'}äv~Q9MG="ȾVy9?8 x/ tX9W/*EmL?(-aY+'/M}XNL5=oW@:`@ z,@ HhW&l(@DhX 'jR0 OggS8Bڞj}<-x(ۿZKx<ܾ[g~~G?7#<S(NL,|f@ P-`}`U7 {HouK[p7~ nUkJu so h$K9(2`DpnDj.X>iqƗ_-#ϴrQ4WlBq8u/90$I}Ȼ{\7@/pP8jdl@ _8h8 @$ @;@"P@~jnƼWg*3?a2s ` ϶l-')C Q<LЏSlO7o]~7Y ^uu#14xXWu_R` \V.$+$@8O@`),8i¼ _9[7}?5Ǐwz s^ ^cu*(^B0Js<=34@!p `W\Op6[[W)7=\$`lY's`H!(WX`Np $ciՄ!|t6-m9˱P [GpK |wZi/Sbі I pM^4]N  8ec]zlyE t: t@`]  .` Plx [p=ivڽu枪}Ft%G\,3 X?~}=OS9Ur@=_xؽ_{u@gj?|] ep~l޺7| @_k4M >PvB`XaB _A`p jvu __ϴC:P=Y(o _@{h3%R K7#/_ct{Z xUK˾m: {o H + =`m rJ  Np%-xd iv|̭Ok3uԫ~QPP7.< [L%80qI>'`>Mr@jxk @ڭ5y.9u@_w+:@*+@ U[#q?Zab:^D͐$%GSx pzzFzi ^_)K=!4zPÿp:Pi @: ḫK @L8D A )p)b.,p"iT>8 ?r|Ey fezN}gsd@U* @V50f @8XP05 !X @`8;X!~jNڿE' h#f?s&K#W/໘>k TTP|Q$+=RmpK\[V@~wP? _{V @5@] xAG5bVH_`@~j2B-;)5]My:~f7ݒǔ@Tp8_uU-ރ8ft&u{ 0 b}r/o?@WiT [ 8?@z@` , SP`^\lzjO?Bgl4]e~ Bni켽@ntO@ xW`ՙ&;_Ue[ _ `{ttN P?r_f??@ݼt To|@ +9.A;Z!` ppoK] ~j2=:GZ\C|nC4]e}]Qj|LM*"|p (3(|u:4^E +y@gJ(q& ,8: l ~/> o8X/,z~~ /O^ @@kw)X5]z􃠐0!P;HV()~`N~j6| w?J>ӔmW[U[ߦ/ P}u<@iY9 - p 8 `㌰Wx 㿻\{ ɻor @:=Hz@/(tPK- @@d,|8a,0] @K7qDOggS8&1~j֢4Fi-jr} '  pp(οhJI%QnY pkBo?PP>.@p^u.- $9h :/@,i ~jv+Qw8M{6Gt0 ' ^ iU@VD3PoZ3P"|q;mxx=<?6 -5@_z} 7>pPP 8 >.P|xh(`/f;?,~ Lab 870aGd' Th'Q_Y O./.N?P~on@P<@. ,`\5pPqp.OO4 6~jr~rϖ֐f1~NZo O?>?`Yx\Kh#/@?^|Ś G$=[ilV8 @&@Ϯ|+(@(uk=@~Z 7)MV`@J x 't^ 0WW "jf>4~-k|^"/ >PG*[Ͽx\K$"YH,S, L~@D*.KʸZ|g~/#x}ڽ@_OoPmt-/誠^oB<( LVF<`O@ {p0dX ~r\Z~ӴpkhQQ x O/,T(xK8i֪jp|h0#hZ v3vN{:@ pO'qȄ? _?>,g x >n0&@0pH{ k\d%} hU.P~Ff,ɉ:nwgЧߪ Z}[?'/rY{p#pq n}E㜫R} ;ev|JtfRd.i4z7p|7دԏ-0:2 | Б) Upj~vKCjZ;Z[O~|{_k^܇esM"@1NS`h8l^ȓ7^IO6WS+p@3WkQE}/|J/}e0ZTy ήȟ`Kw=z`9@uo> | _r` Jˇ?ቇwy`0@0 @ yi_1:-Ⱦff~l}c矝N h }ƹXD5R'$;xMj3毴@~W|]˟7|}`UGF_ŸH5 *( 52pkK^v?(xئ $؈ P+ @־ԾR5~ߘ|_+Ӏ]= 0@:6 $ Iމ}4k?C>nL;d3cǃ~gת$p?@`qUEі KKW-M hU`cuo4 .xp /O@)mh@?&> Y.P\%@Gh!!A#BFl<xZJJgZyg*^>`1E_ :4' ' 3 `TIR' 8\'$6Hfx,ȇ~k }p YBF5# Lt85<0e@(fiaWwR&mbjq3u_,k5>ξuYִ2$ Ʋz"dYOS6m 9n~ +?p1|&?i @X ,œ,]k Y H7@ Ч{J@ ^ }(>ֹIr]~p<LamH{z3>cp(l=:rY`1\m1S$Nk@c%|r/ X X-4;,Z\y5z z^f. |uo, a &5`P@h)@ mHVHz )8hGxމ~M.a{g:FWk??:;@K\n̸ƫrNz p'Xp$vɏؾ`WǨƞx~? p~+GO?hZ 8]? %u `|/16ʔ" t=P8M h;OggS>8vy-qMt]í̿O`ߟ/%7OLVJ"`s p:$ `@``⟧O7xv#ݱ_7?P~ @ , 4 Ē@o"OJFh88+U<~)?%ePtlϘ_6 lp4 ', YMWbX|]˾-:>,w3'Tt/`@ U(yw9"X9pCޞ-Я"gC@`1q3<|o~.O@/~Z }__P7@3 KӀ0taڮ7`lbP! `6~f~B͈cz_@@?܇?833_SkU**tzh1\v+@ #P ey+_;@~{/P|@~ $d-p40@@@k``LBâN$0` .~N?c֯E(:Fűu,z7}'>/p?P<8"$nHj{*K੄!d6|_~ ~>r >3n/t,4]t!= 7| p4p `Ͼ8p~މf=X?jf3͢3g9?rMA ؁$Eрc^LkUD[s2(vH@E(' /@Mjs}7py }H@=z>p@~ST@  %)@Х6|- +@%qV*gAЁU0Aifud#:O>WM?c8/%8 q]~ϫ"@6 :g@k2xy lpZ9UNt o*i@@#>@$mupo $jC\'S`a  -:0fgAGyF.lܮ|_ls{Y`89~@ 4q^UD2M6_Ce sV` |_  _?@#G@Ht5k@(^x _^@ȃB=šG&<~9O?%g:yGOv?6^t|ںW"Df- [q}}NvéWϏp@o0>|@o o @ pҍZ4kX@|(ȃo@6m8;a‘pA!Mf_B7 q+}N '>p=~yW?UR ~| I85/!pgm#{? _ DK ] "@>L6U9F6g Fx098,x~ֹZ?jPgMhZO#'yp <] |4p><ϧZUVD x c/Ny"OLo`v-7 #@p R@?n ,95} xQF򡬤hVH%Gmu)p||Y߸nW83nory4_UeD}E~Vd?-YuA6ȿ+r?ni_w@@gPN@7oI />sp @` .@:BLp!A#G8H~fy5|ilqܞJ_@?(\Pr|>Wk*8O^VK =fQ)8 0t.|~78P* Y '!(  c@+\5H@0pI މ|5GDhڤl3prx<t|_`V.Pxp~ ("04ǍdSå"{|V ~3=9zn ] \*tlE jD8> > B Z9 [*m` vGꢅMSp_}l89@pΗVL 7J0| @Q 2|5 ?pK_/xu5>}˿_u@#@ @6'%  @ԠuC>~u|x֭qB( ?g7V?觓b<证_lpj?^U<$'`2`,KE7?+v?]@}} ׯpsv G3q MpЍЮ)@5"BLA kPpHPCr/]yDsnx鳞=;,/*prbht@:~ϵ~^  g,f|@*o KV@iMJ .z@P?@>fohPkX#3-@G r aNh@(X 68I̜Ly Hw{t.&yfP6u |(m:gu8r{//rP8 n_ Uլ= }M o~:t/ `+H2|m:d (] X )W &{}37i\dz&\s:9<|88ϫ)x$hs(lk&W: i^xi&|`|u_< z+tni^4`P& `.%8)1 lS!(biaʯkVg<1'Gv}k]WUJu6Mg@o]E 7?m;/|RnXxg z4]W6':6] KY_.S*br$l8YI)OggS8g yrv&|(ZQ0/'WNW}_3P*+ȃm;0 @*ƶ ! Upsܿ o .|Hl,(0 gUA{ 6D$ 8 0~0]9v}k Ek$^Za"0xd#/-/:>wjΫ*" Kfbq*x ]<@!M:I/~p;8:'#_:M]6tcq `Zj  0B~zR `@D&sĬ`lƬct޲E^?cZN.O< Q_*Tfu}'Qfd GQ _>u7~~TWe 愤4P-((D`B '%2g2ֲC>D}`(B})q$1y 'Ɨxx ~?UR0>9$pn( zwkKK4$Z4o s? (s8M>f@d@HI샯8 x!x Pm DN1 >fum7(_ _wP'zozoTzPk_ @,jSY=;x m6A! ylH],Fu/T`]/QutEY?? /{.U,VOGA` Afi_s8_}oo ~W{ o+Pze oʔD F (dm`x0t6:`"$DC މ;܇'O>_J3_ŧ+:[ :px 8<W8l/POyQpf HSޝ+̸]^`u/rs ~a~ *26t t)t8O Y8Q HACN!<9h5&S~@(:̨~~X}ow@3})jUI&[x ߛ ;@RPk<oؿuG7x} ׳8{ zp1H:X@.q 8 Џ|e0w68   >>jnm~E_2S3;r~L+pPpGyUUnxkP4QfpkL] x@o xSq.~?ݿା 4+k,m \I^  `ALd Hމfk|(;ӌS+%KN 7_k.J{9UEĞ^T )zc};M_|>@ԯ)(X'kl4G c)ZT)" q!J<t L- y t>~Pi}XR!4ZkO9 >؁|~<񪊈`S3"@v<~}   $Nv @Oz~x?kfk.-Kjxc 7jt2Pȇ _@ @o)`4\|v0h} ܈Ot=e d>Λ_⃮1j;ܫy'CXZ)@- 0GsɓS9:_V?ț}gj t,85@'|J`D?؀; ?8j4_ g{7\p׀_6k+-ԔJ: GPQR0!5`p6W ~PF"qﯛO훛45/~9"@ ^7ﹺ{<}|x *k<9O ? G ^3oHoU4c` lN,4%.P/'\a *JGCVHVH\EĀ`:$fqm]כ|~-B9̎KZ|4|Np~‡_Լ*"w c t1 ђ`;c7!o:h65@ @ O.ҭ@MgC0)@@Lx!9 d8(j ֮'ښ/P,|/dW;"0.'}+UR'<"@5'ڻV_o`_"8PWWPm .@ Y:0%0&2Q25g.Dl6Jt~Rt47qUY}_v ^A~|תJ,"46V$|" I? ّS~\OW775_?ps Md@vq @1 k Gx LnPw7 ?è3v^>{ w>| `?U%\Z4/ w' w5@o@w7W? @:Y _5hs|+O`9p$OggS8Z>f~ѺJ[&w#.J7p2ſعoAۧ@a%i:tr|/NgN>682'\]7+|8@@^{ZُYS=u@ yૄh YB6$"-fP5>fЄlW,/p w_ bv?@?Ϋ(4 \ f3\81 /vXOѧͳk|Uzo7j`WO~ #8h0t+0^x3h 耈@LAo8 t,ip'ә>Wa`04}s~<s~ǫgy~ݽCp?ó1~uil]|}Mzkp-ADOPe)@kft +`Nr W `A]HVťpuj:ӆOe;C#8nakWUrmvMSaﶞ }q{ @Wxs@>\ \ }t, #' `QObppA AM xpd\|w@ r=:aןg?{mg_+XK jU9iZo`~焯L'Կ|?@jfpl{@ >M@f7&pV @jx@G V:AC@RX Aar4Fb0F[~|+U.<L~p?@>OXW-^Dv-@`pxh ~n.xm@_wz/xdl@6 @8`J CC 5A0@aPv&I9>z]b5E @4~O<p>゙ U%ۺ @nK~^ >4u ^+xpG}X@|K!26 9H"(aM+gQ%pE=0(("YfyFxLV.?_ I?X/9<gת*_gv@I=ݹX `7 Z7 O'_`} txW>?x} @?'|LM@++To@I6D@E @>q5|C3MMbo/VBVRUUMu?@k7PXx ]Kg^6  _ૡ@Q@/X' \pT4L E#tޠK2@M. ~q5gMgӇj,t6~ Z |3Ԡ񪊈 -pj.`?߶zT@x%[~^Hd'N@}PйP%/=z@p' 7ٛj< @XX2!@t)`@.+7x S]uBA(4i ?>jong=} 6etnIp>+(B08 `X `XP6d]'3rdyn(z +6_w|̾U"" 8{]H6;pu._ ?p'>}5oЮ FdCDX67VP@ _N*>6u0Q>BӲCpv"~ ܯ8y@gowξuxUI@d2:9 @g @q ̆vm3?v>@po X\&(k` .)L|_x(32`" $8 6Xs8OѴ釿y5Fqv/W'8ǙJ"u 1ʁ'b`rS+H1 N3||NoDk 8):)u.0A.B֦@hh@C`x>7k]Ϙ MDzy y?˾ ܛ{OS3(<תJt^V]@lN_=x_z  ::H*t@:  LM088`  4.s3t|ӈt_f gyt: GVL>>p>fyU"c ]p ?5K8@T a_K7/U?? _pP(( f +F iD ?Q L@kx >k`<asc=bq<>n/ |{Ύ^yUR8nj N/c.~'-@MY܏m;8czW!ir[`,Y%9g @F;ag 8CsBp `b'=.XxD9S~?x073fVU"D@`[FitV Կx7^7@pĀ|]TSPYg:f)u.j Q`ל _>S03kcCQ0y{-u|Ns? 'Gw FӴRmyV`-^=wu~P?o`@[.`KXT:o6ldC! I \4P 10  OggS8w~? ź>^??ihz\&?~+uruǸe~U"gZ3Nt , :S` '_x@^> $Woȁg%2 qV2e1: : 2>>RswTGTߏ@?x~y܂fMiUUBd=ݾt]Q 2 d/ kh> Cv?!Y pZg`! ,І  p(>ަ;}>fӪ}NXϖg>S?,=?pЂ4^U{Ir) 7@]@ȧxx!o u7tz INXh5%=Я|v_ BKI@p >^7 $FuV[E]M'K tgX4M*Ih n,^nPw76z>PVqo8 o'&-Z8>^HBs2WF>WC_| 8?pJxU/ȉ`@Vn_np ~[p=;@> zN6XPk@,*%zY {8| 0<p>QQrT'_^>W\3^# }@Z]`7@z?m|@@} 7 +.զxWQPk3 6 01`M+$,p>j% co|^u坺YgeQ?'@^i=>niU@p).h )ȝ @`_@_ @=x>>';|)@@ 0%:' 0.@." ^>E>^]B//'H,3o P|3_>f֊k"hoFn3U.B[?VǯCB4H϶=Fӧe"t?E~ .V㍟,<ʙe*HP]HVu@@?W/@;Gq_wp/ 58 x@tr ĠiC@^m>=sӍn[`I*"pM5Z䎮?i6 /[Wi=-S*PS***ヂ.wp_߀[g [ H d7S yޅ 9% lmms-1.1.3/data/samples/effects/scratch01.ogg000066400000000000000000000126141247673406200207650ustar00rootroot00000000000000RIFFWAVEfmt OgD(# 1 fact/data-OggSN`vorbisDOggSD Frvorbis Xiphophorus libVorbis I 20011231ENCODER=vorbis.acmvorbis"BCV!T[={S9{BJ={{{s9s9k9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s΁АU@tH9a{d9{ꘄIzr{ɠdH1ɘbT(RZ JAȔZϹ{1{ %9[ꠄJ9B+)IɘAϽZ{ϵ{Zs9{ϵjm{k5^{s{ 4d 2 2 1CN9TQvZH!JH)s9 Y$(2p OSR%BCV@hh&ifiiiiiiiTCQBCV(b9I$!  Qr-ՓEueYeYeYeYBCV1АU@Cbsb 4ddQV29[eR2hM92-cXK*9gPJ)% YQfbgQgNjsΩJ9ʘrs :4ksJ BCV B!dB!B!RH!АU qɑɑ$I$K,,4M4O<<=EQ4M4M4MUMUUUUUUՕ]]Yeu]a؅ae 4d@dB!B)RJ)c  Ypqɑɑ$K$,,4Q5=3ESTM4E4M4ET]WuUU]U]U]וm[weu]u]BCV:(")#9$I@h*@@8HX&ygi@h*@h戊(yghyyY(*(z* $tqqqGАU qGr,Gs4ɓN鑝IӟL-Ɔz$e379#MQ_ {bwCL2нG~L?{#GNϏzkU4wR r5>nF>2ucovcݏeha^f&мы"ʧyOpdg<,Uacf\|w})̏8F'bS[>:6lLt N; r/O#PO^ ^\O`\gKp?IFEm}7S_ma}^>F\*Uh4mB݂Se4XU>EV <~ ~kү>BoNz#[O:m^JjwܩwVGY?7vN cZPީ8z,IV܏KogͭO)Yc*Ano>v]?ӕM˾ :ߦw +G~_m;{>˸W˝|;7m 5 (i+nE>*=l+=9RZm-+?|ns:D˯Cn&g1S5yw'ilɡa8/`ف$L)ݚ%^K,~ȫ߾}k +(ͫ Yxw + XGs0JM.7mk뵾%f{;{%!J4I1쮿;;[[xmL6`ulL24 [zfcN,{K7`LISTINFOIENGA. Gilllmms-1.1.3/data/samples/effects/start01.ogg000066400000000000000000001672511247673406200205030ustar00rootroot00000000000000OggS DGk\vorbisDOggS DGN )-vorbisXiph.Org libVorbis I 20040629vorbis!BCVcT)FRJs1FbJBHsS9לk SP)RRic)RKI%t:'c[I֘kA RL)ĔRBS)ŔRJB%t:SJ(AsctJ$dLBH)JSNBH5R)sRRjA B АU@ P2((#9cI pIɱ$K,KDQU}6UUu]u]u 4d@H d Y F(BCVb(9&|sf9h*tp"In*s9's8srf1h&sf)h&sAks9qFsAj6s9j.s"Im.s9s9sspN8sZnBs>{sB8s9s9sАUA6q HEiȤݣ$h r GR TI) 4d!RH!RH!R!b) *2,2,2밳:0C KMXckZiJ)RJ) YdAF!R!r)BCV|tQPD)c8E:y<QNAIp2<IF# ͨ$#''`.@Cwq7/ΠoC ݉]2O`/{ `"7po\{#N`qbZsun[C59ܶmY&Gz<6m*"#3OА6bi@ȟ|ܐqw&b0VEЎhEe ,a@<}Vpw A{ 1FYfe䏑n؏F6* IJH |IVȣ 2+!`^,Ty+YU;*}@| @*A䋸]2.0"# ޴d4:]JEoZtBOH.% fe. " #&*K$ ffINth4@J`ޛ4 V>ޛ4X8@f'S A M$b'B\ȓHF0cge\ x4[z@)_6@С Pn@P#Ӈ`I- J;@m w=",?P[]|ow}.6$6@ )EC *8j$""$a9Vatxf .hg( JΈah8x6>iElB{=p¿RB9#"tpFW%F.8ҍ v"J"  '$$@"*'`HI@"#/'FKSH8 q@sW|j'iO'[Wh#rqQi]\|=IӴ]5 Z:ii^ElɨLi˨d< jdDFFF7 1t%rOlTɦz tn7mtDJ3`G&( [a`8ңLpz3ZnтG4$EX ӨdtAȌMqe>ֻFsMq $O8v+Hx0Yxm"ް%(NlL&S%'U ؼЙM(Jv V$#q(h6;` f `nClAP?/3AsP) X/Z[T^vc5 /n̊}. E(t(;oN9t(;oNف 3&3D Q4dPR@baae :n;2n]HKt]NuD~~̺jj)ؒ uX!A&d@r>ltb,m9V)Π&RyӉX8H.XÊ,YDl0l/'@a7(,^2hL(,tysI¥{rY RYm&@CaRn>s.:E /N9hŷ)s!4$ER$?I IeSb hT rnDI+S "< ɆxbTdPA3h[JI >|Bh/ 1/jފめ5ؠ d!G@6/d"'7aZTp"dAAx,;3i^k5Uav`DT{` >޴ %887-,=B o%NGLhH%7GȢ2rSYL^_dI yאkE~[71#׊M(5 X䡜%>|tQ-*e6v鴏 <<[ *e6iERH4)/MSl$jXl  ͍yC9t[,]Y0.bWiYFP5+0:a$oڢlH^\bu =#U+.ĪH9[DEvIiJh%DN̼,$ r{!Z|*WT]dxC{0 ؛?D_*mj;/ʦk$Lb!!#Z>޴(ڎ@A0޴(ʎ@AtӧLfeDie@;`_$ sf]½,\Ǘ8%\<R=Kj>/Xl( VIAgfqa͢e~K%5 $M4q%㒞$C8+؏b(IJN3",ˌ8TZ @ˏ"x- *K1{/~סp,j40V  ~>"0%{p^Rfq,I,bA#1:W%!2 P[ 8rC4\2o @DM T"T4TIdLjR[tr/0|R6x˛a?;mB ,Q 0d I"gs8&côLijn} 6)ZU A{?動J:!@_o>#rI rl]rM/.'.8k^-2OHdc[YrF-aNn5!Ƥ(q[@+~Fiۄug~5sz)7#Z.ViFcjjG9KD!*kKKq1V7@\~p -跸tݰ,J 4mb 3a(:k v@4ImC:G(.]֞{LYS,e{[bdE(^\4pYFVM Υ 4`I.\R.iF8[t:a)YG5tXݖ=q ! X?W C{_%Y3I12eyI{9luoڕ"JAMRM $K~J% Z,Aq&o \<]@Z NF8LIXJyV2SCT5X:8epb Q0:H@Se6~~dr("CT9u7VbZE&(mqF\炚 ^|~y waQq6ؼ*Kqp- J e|w:!y5nelkn@O3@q1,B`d&Ȍd#D'0O*>z4 2p&Lj;)^;>.TWfob[X];i4X6 SNG)SN6K5H$H em8d)!4&5% 4FU+LˉBb$$QՄRp+>Vۀ˗@׮q-1RQ.BtunOQ:aN%'*h2̠ E5  d+>rԲ/_"$dJjgt'DbJg, U%nPiV0n@*d~OggS@ DG@A;޲cRo%wEm>LIuu[ fM@(3T0-t` TV ^2jmlx~ Fz{x vaR Ax. ے Ksdw;_eKK^cD-8Lwpӄ;NH95v<1ݢXi@nQlZ\H߬#x)oZa)Lw>c'.=ئfhEYe*U1"~[.Sɠ#1+| ?T3td?fW#|.xX ?8$ȱ*4Db|W!L=[ȸ`u|?>{b֓xLIbmRRfy%c:2iХ]#D e8+[N[0M |ξ524o;\ ú)eUJ1 PM(@UODD^NP4ȸГh& P o1mG< F .7,Ȁӱu)4Nu|:h"_0h^ʎ#]) ~;+|jΎ_04\>3UΎ$-#r#gC#S *(tB6[$C͒9]R5tQ`;S 'e]hVA,cZՊ(^(„YD ~K.- %-̎=}g %v+zI 0%e GL&"oHs<> c74N 5*,2ehnolI$B[nL/GM?'4fb45W.%[A~[bˍm:o!]bڃB!؟=vIR]PX8w֒!2]-)@nBüXO,]pˡy'=7dK-4.e*ӋPDýJBuӀܑ+Ԙ~F= 5\qwe"aOףZ"lJ!N ͜Gdy4`ۂN::Y1Z /Yِ-6Efipcݛww9G+nSb&Ċ=+/w)HqaX6?%$ fONi|Y 4e (JscI@!%\ԃ)tܩr캿Y6ӁvaK^EToշmH l sɄ؄V1fvr?5v/*g0}aW;TtS 3)`YQFU+ctx0O@#)b $r1+ "\NzӖr7wM[ʯpI vK}fqtL.[k@m9pzl"{ )HL@OJ"g']30!3i2N@^4cIoC8f 5B ~ Ow_.%_'. (eR=SDR(_!b)x~;Ku#D 䎥H  tch1! ߘv– !k1I^6܀9綂 )Ξy)k-׾ÙH6.-&R* X$"M 0$KvKg=o.Y/-eHCm{ >+,0*Hb7;N(с3(HHMF U{EHT޴OǏ{)3* 1[W6cgv]%TK[6[bv}DnY/mdkښ'E8O뤎Lwx>@5 ;sa2| ݺ HNk !nzo)i;bn(M哟U Vb<,ceDcO kz3꾭{ ŏQ)P<"v{I8ل  G˷"`AiGdk%47BFS i 3 ' ^RW4Ej? :?9ŵ'le6φYVI ?)bw?p%zd@fLq iZty׍Ts60Lmv*_mSqYjhe rR\jqD2kݖ Ç]{k(//ۇ^*$6MR `MU`Ჿa>|" O1SqrѲӂ_ cz"NFݕZbIf> XiB^!8tm=yqaoT{G.~uސ`b^ }3$p:`qʞm44git"=6⦑o6ݜrbhz[ƺѦE5ҜN Dؘ# l>Wcg ;iksqg^䞈گa:ׯع\ދ~KH,>)/l[GJ5/i0VD4#W"(7fLYyQ(2@\d^Ede\,\`@\/M nO2߂x6cLi\˄ FsCRl`T+( DOggS@V DGuA BZ>2JY®蛻Wè-Ce ؄#'憠D :US׶bz_ 74z^AVM0A=n|l]1:-q2{j1Mf&9~nzةO~˵ \N1BW{Qi4Q4"*|K9yX6 dc( ly19/o R"zЮ{CHc)+SYk>Ƥ<~AM [S@+>3y%7i~KtUoYd-~{MKZm,cF40A!@a D<մ % jVs/ t3_Lu@P,ўT:&qSJ#[%:JMlO*1b=yJak0U53W/![?!Ø$dJ&!>3& 1OQ`) DZyJj pJ/ i~!9r})H2&* *=D !C"ދ̫ؔdo0zu eo.u: ClM(^v+w@611!Fc׫&_bf$t0bUW X-ĒDĺTiƟ d-J.{Mu#C/ps#Fu0J.حPjԄ ޫ"+8.)^g:"6`'pUʇ PE)6߲ efe퇳y6np3$1ܿW@*agB>3a_7(i:$3r9~s5koO p0.yG"33 Q53  ` 4@I &6@`tԡiUv "Tl\ {,qp#E"Tc [6黏 ?lw,w* `ƃ0L|E'1@q&Pg][u7+m3I`yo/,u97z} !40dMT2!Y/l`vRzI@)@@m`~"൞S(Ix{5cj a>m nD(H^'!Ӈwֆ0 Y>(Gz Ȫ7dDnSpmcK B@fh#Y PbmlGff.F茶JX!sYR+ngml1ܽ9Q J%@^M(-SxnB^ lE\U]~X*Ё$+"/{2!b4ABYXh˦KX8$뭯\%O2`80%:Dc:.obRlvhn4EC 6'MaHRys]kζ1( ˁTnfc" (AA+K'F gS%&t+y O#!VdH81@l?ia >1Nk= :.Dمeg#-d^gLnw{ɟmjh d:Asj#JN%q=:yb0¦X!q*%;r37sE혹\ NH8HR`q8 P#QKV2Q-Yl}=fHFY-`kþ)@cN 0.M|F#[ ߦr-^{ƳP> O+- aW`E^'Cde.'GDϑ7gbݺ2ǟLPڙ慎 DLL|e rߓH'(Z@DfЙXPmԬ Bia))[xfidSvN(yk!Qs,D+(Zps&KGp~3g8\,h'JeS$q}'6}`R@;8:n/ `fh?7M ~<&n֊} 5b 3~ $k[xƑ-3qE +rH ?-.oo̕RK?퀾z 㷕̼T@Vغ;ш>wFAEtѺ(#I(cAs5k6vB ﬗQ1Oáp n;bD-H?? \|w0y|e.N =9cQdnXSn?]JpIKol*] 5c$ZDˡ1d}p THQM V3=j8w0 v(ZB q3x(s4n&ԇI]Hn aD0 Ivчj>h'%M l 4t.^0 :,;WUR<;:%G46mB;E 7~)o)iLf&.C=oO.ܪ#$bi? riÀw"y޿Cd#`6]=tq{yH˩9:F ''w!^|VV`nkr!?n*`+fe w:W,[ Nyp=  dhnnhfqIePǒ?@ ;2. b0'4dcE}n>h,Xy29`b$Lf¿`fB; %7#cW` '"!@&$5^Ki tqd#hȧnm^Z 9im֒@, 83jϕd~U(uX\O.(~~µ r(~~pC  LM ( Di2Q y}@mmV H4ABp#ot#3j5ҍ#[k$jjA loA O{w"\B.>O8L8Y5@:% ÜCL!m^3Z%f#_A ϰ8,tRN2>[Uw<@ОUq(پƒ$wn6bsIE T>lffVBvqe7 gF{?C0pA7!b48R%Z7x\zBi<"4r 6@^tn_FI0,0+-u{qc[G8Rl=]OggS@ DG|Fx~NVUϨEs޷   1H*% Rܑy # }߬'} @7lM@Q47R&,"sk: r#5vnW)Ww .#@ [&h?SLM Ilνr]0p 7d1R.+]ټk&esHL^}DvN8ЂfBwt0/;K ea.dʼVSM,[#>\6aRέ<\fl$Sל36ȍ , J~Y1&@_htӦÒl1>!VjR̲Mncxi[\Y$7D TR\fk1~1ʠdCSbq@s3 0'&yiFq3/cdA88€ZfGRF_& Q>LffM:NoMjf&v۩de/" C@gOf0j3gP\p_д``5ho+:wь пd^' ClиrU⏇RB S9T8 [G֪; [FӦt8om27-laWm~羪Yd?EG`HD(NHuP@,`^p{x 0CHuY|ͤ`i?iYxvU 'DǙZDH,.LfbudV5םW2߀,9/X9;ff%Ivs7ZG+%6&,ݘv=N[P^r)QZ݂CnZ â, ?!PɊ▰ h;x@X `^,2fSdط2@ǖ 9Zxήަ]W^r꽵76d\ˑ; 䌇Ί$q +xH0&&ACGJK?@C=$)HDMSff#f8)6-\`| C;"OQ`La% oroDf 6Rőu_jmXHeV)!Bsp(p6 S" ng`5'TB7^09'+WA@Hǹi YYF 5`Wf:N5eKnh +`?&@ F;%{IA 1@2"+< Ә$k>V>1<7Y]j$JRK+1\oݏ=F!}H#F z8V"'?FmsIL}~\з\$ YJ 1p]\3&N^.]v Q|6n܌~I!6sR2+EP ~ 78``ߐAZTY&2B?eET#rd|v/Xg$D|&@3ok/5I7@sh^dsn QnŪ݀}Cy/Q,aa(;v1g\jχ5bŎu"|H#aCPGl>;"es4Y4=WRL` PPPT: EBgMD39Y 5NӐ /ۋHu +DT ".K. qa]_S-5Ľ|Ƹ>-O)!s pX,!L c@/ 雁&% 9lY\-94&X0L8Pycf=&EA(#V$[ )5nYO@>uFc @l@6GpJ/F Q`bͭqM-hnlDh{07c@.sqDa0Դzipv_j$#kva ҧqs쒓a5 R7W<'YUl?OGh5Cµ"]#Py]n-Dƍ k.DqY7H=sT?`l30Z)@,BO_, 9 /C}D ވ[\40h  Z96z$F0@2@:!eַhDlG" ȁUdH \F5/vH3PIH9YRkVc#0tRZ. *^K㋔Hs\ %IJzY?'[h: HX8&HCcNtdz d|i ta!Ez@l: 'x!y22ڌ$ka8uX{9lрw~_g û zv·u A=EB '$)^   |XLb tIHl}v:vɀyi.h:ti8@hT"yT` OggS@. DGA ^ &aZ;'tcaPy>%A5A 6 `ABMHJ|cpY:,'@N-{@ea22|l;[iM_3D.X ^ fq[3Ie+ƕý srxGr87@#^vl6`PHi$"l ET#6^ qE|?*6kX],7/K/%T+˧sO*h.-ɀl (%$4%1N Ql;J(xh+`=IϿŋ[{M/l *S" @o׳a"x2% ` c,]TRAmƏSsIZ.MWЃmMp- @A%h:^zZ\ d$V@̦踁naXH26S)e#44jmc!l0+%] 4^q-CW9vm+]RZE\΃mXv!m[#0@``3Q $#%  p @ LA$)N\2*-gGA$'7#3컷JymrQt1 br>fvgTl$cc̐e;R?WTĩF2Ǥ !m A&=@`d(#Ia%.mТ|.0z$r1`@tOzc Kƀ9(9NaHCe0ƪOx94cQ( :fq!MZ>DQ%lKӺF/j"#b=;,v@p@ళh訵5@vy0h ϻ C6z1/" 0͌eC˟fnF65-!c~SS R~"1*X~[NKzoGxqe;%|ȾVVI[~(b 46k€0kd`HH \Ü|U@?KhT|poG[N!xcqfD4mc1 II"+>{fZOxU4mg|GʑPIvv @& 4 R" "xc@ D' .4"@3eܜbRe2bQ2Mb=o7`NHc&0"7{bl>*;6{֢Bf'c~ Pl S hZؠϏR[+@@v5=-Ќ*>M 4Dy2PY@2X>K6n$VY2bWl*! 6Pn' $$ rdͳRdf[PqB;4@NuE&Kob[FM-پMho]h7rRqqg3>;r\Bf۰ 0cVZTgU۸ [C Xn N& HHHpd0|V\׀:)NȆtm@OAdE)/j>>}U[b]bZb!eJPB&ri=_4PCitY`a4D[`(hT]"2HsmBbV0` BN.*!Q"y:HP'_) :yOe460~ɨ YoogH3eP:`VQsk)}BO;%wA!T!m('$ HA2( VhgOqP1@4D's2&R>'Nǩ`u:]g1Ez?-zwI q?Ѹ_Z-}{xuɤNQ92s6 ;8>4YCb Eo=W~1 VQRP[鿶[@} 4uț 2Nffl^^E:U"kDDZ逛g7XQ4#/Y@3% նhifڥVy q˜M"N\ޕ֜lyʸ}]9%_f6Z׬4f!6YntA @ cΐFpĈp60e$/$amKt@c€ÌY@g ~ as9~ HWvR 5`}kLiuޟ>zəLq~e&y;Sk(5r:۬Y3ML 0@@0P\]6@۶H1tF:W  L/ @ctYu̫J%hdYe/I @8ֱ]\;yZLw ~\lf9KN joAOV-Uˊ-6&h"d"\ `" j3 {[>d@ (HC ҹ͐6/-=߯$~lj4q&1n 1l CHֈQOggS@ DG=`JHfn9q[JC9aoa[)כbqp6CMA (.,*dϽy @ʀXXȗ2%?<ٌd$@d\5$SZv2`s33MI}yN. Vd\U[*8 9;@)ݪ{ ZnVM,@B "AL4xRUbIq L(%'XKțzܿpy yIfHټl5ɾЯyH)sqh ti6nRZ`mqqŠDdY! @TBIi^ 1m{2)Ŧ@tR-4Ѕ3&MLf h@v$FN y9 &&nspG70c c%hDr笪̞+c&S =gFPΞ472P6@$d@  =E4oL99ddz0X @ؾ )hFGbK (/10Hv Ҍ$_3m涽ɰ%d&"\J~ I[vª@0ۊ0&2  0CT86 4o *@2.(@.t,.f"Y 0I",ׁaCvȀ:+#mq2NEm]pjh|Lzbfhh2- 0:GҀ3h@RЩy{`_deM2`eV_b ]4>ƞL'^FpGg[{FMlnZXB3/a~|aOpZJ<x`CWdkLb@ f Ba^Ab`PN D@os 5!@3E0_ 8Cbɩ}_wsf;iL:.wڇoyA-v [O{.R0r NeBHAWY& *"Ek$rB77P @-=).4_$/a*d|;>@(s06/-l8dqa!-{ )9Ôyh> V9T"ʧ`.mׄc8hfZHH 1(wIre@/z<2/p#[Vr"0@ɄTH'c6 |ۮm7.l>P* 8~ VXYxa#IVy'>0ǎX W]mh1 `ms2 BMH{HPeuMs@"`K`YXja, de 1&I35})Kefdf$A׈ϷNqE@B'Iڂ+pKB^II{':/$<˦#8`![CB2:q:ǚHf?+<[:C=P_' ҁ1l͘8;**Q:tclM4wlD:@d`2{7؋߻ɬmE ]:@>D^jQ7 Np^ثcBrl$N>Hia'd(B([P @|80/7;stan` h $tR 8OX*.S| s26Wۡ 4bs#_N32 |M)\QHM&IFdB1=OQR`$BcN2OT>=hoDuLz U@. YC=hԿ|Ar}uAt§wh @ ع*g}@ϴMͦK2$-wm99e!Hٜ$$ "pqx MtK ȗfbaqL|@3 ScưF7 tC4FV0)J~zFDu]C= oѫ57QMOO'g&e 24$$ 7]ܷZt{  ,L6 6[Gt+VG M&Fn@38H;9f$lM+B戲 d3T`t^jFOκj>oXK$R'&%WMŃ FT  15 `+֬!-$`&m,KD< &'W: U 㶽@cr 3I[pt9M\fL̎&+M̱8б݀|Nǧ҉"8g.vqc3Y&Ȇ(mX`@uiFdCU\K+ @u<#Fi6AC0@l@b"g/P,o4XI;~|ݍc@z@#M%Dk40Bg̓f!476_XI4٤>ȡx^)Sg$*brUP sIADbHA HP&(3Z5fG*`rE V%@>t9/.`CV{N@s%Ӑ!?49b[h6s @bH9 ,,{Ў8͝-躠&ޟ^%C7W[KS-؍*.EJ>@+8,֬(k6 %Qj[W t,@5@ r0l @O aQ|*{eXN blp A$_@9 qmjk& @.J)@ 5!۱x zE.RC M J<q 5Kkքɀ ނs R]R.A{4wCN-:sI,qHrYlɰy$'4s2I/ a ̓yltNǹӘB0OggS@ DG,}KI^@ʉRNA T a٣OWp\-P-ڬ5"$) @{4ZS HuP %[ rqK.Xḱ[,# "5f&2#c:زNxZj@yڱS@iXiv{ CəW0"`4!rYKh F.;fDk!dJ KB?@)(U^C@29@EsqU 0d$Ҍ|[ s4: 8?Z0\*OF,Jf*o/gZŸJjoU`=,0;ᴈ Ckd` P <k^-c)˪vI { F d%5(H^@@1A 0n ^P,8(6f^ Y"@ێ8y(@gØc..H'ҩ]%Cu圦{6@L&4uC% -ځvB e p$Z⩀_h -2/Z /–}ᄐCLbi6+ $ǧ]-@ؓ,8~pGN16 Qĝ^zE2뮹XcYSO(A0Yw,+ >'LbH" 6! %,匣j*i(< Q(ȗ](@f#>Kyibn1&2l3mfIH8Hp4:FE:cUk%k,F$5V]- ` DA@$%I]#reQh#5Uvw^͕-UB حe AHPY]P&3M{e8o-TyٌY(@  D^d?&$”ɰ},[t0NɔL yJ&B/{,֠DD %#."?-}rp*"Ĺh<@` 60$e `"iVl rxdȁxOCnRPSgx l_K[4UW:Oy:LX8 ܈i5,##i32 ^t;Z&Š[`9+B䅖Y]}pɵ"I{(Xd3ӊtp$e08οJb",26v/lc3n./Č@|~|{/@s&`ƿ0 7q~}9yƌs1EmcoEG]ZƤlGW+QQ0gq[geV+QQ0{(MpdNHd04fMpQ, 0EhB&x i=$/#M _8@q @oxЌ&(an:t~9d% M d)FD5]7eց:ŀu}$fӴC8!Ib0ZK[V }} "0@f/>L+n' ">%@6fz%t3.ѬD^Z s _L@;vЦpTIjkY<{Q,fHXM%:.HO lMƸ*<ܩCC8Y\ ~_?9 zO enXa6n>R {PpXlV5c(CLEʆ#5z0@2唳lY &04m @ RtOV39fD^@M 64unqY{X!H2Lp:)s @?sa(\7IdIIٴ(s{WB6 _o_D@s VA:ٕ<@d:~RO !֙#Zx=P}pCMNEf>"! ?LS _\2+r< +-TXZ4HIi2q'hRW py3EQ S {Mb'psc޹u HS?hC%BmRyD63f qq> lltC>O TXeW 2;־CWjzm!Ȋ2B B\ `AoLk]d @d'?tE# w(aq ݭ5292. c řϕ$3:0K0=),G2[Te2ŶE^Y+&'d 8 ` 1D%`'lIQ_?S +Ē@G`589c@,gߧGW'&{pOۉv|gvy :UA>?9þb+*#} zeEV'$ECbv %A bPZ' 1Jh2?0_ao~]V=`1sD2p U_Yp?@3N[ȱ>^krrA+m| 29Z/),FjWR9l}ܡ_'8.X4"%&a 6Q#Ah ]0t˸^'p K @)A4-l WX_ttu@28uD6`{Xl^ClۘSWD2dۻ&9a$j N6 8H#%SnHУ!@sZ`,`șhKy!XvhQ->mEA^,l_X9gp >۬'XM2}'oFqO B;s֫\]dbg9n2:ӗ0`5l )D̼ ɒ"PaU@r 0tp00Y#3 DH32MܜUm%&gFX$m@利qD*!ltlͨs0# %GvC xAN[wؗ c&h +@DQFa('0ʷtE<%pzB/ĒLU!qF?7`anZ`h 1}j>4#~lVTm w:I@?c1U͎̣;ʅ2r00)8t%6e Y "I`"DR_(@#C` -\!p?mȐC F'Y V:ؾm@9p!00 s-xz5h5o}Y7ƴ >)l MK-U\V),Q(eߢuKv`HU*4)] %BN$,$!Z* ,yy#x0@kku>7[m) M d[N{khhFNژ6$:fJ`̋G#< "W<>9mc!.[;uw~V$Y eM5L @ D% cc%[@fnwb(6Iwt8ϫ4 ]V`@ƹY pm\ӝ n_ O`)`Fe}1' r.\BD`ނ^B#.ՎẊ| V:6 TB>/$_H?8$.Ƅ O[`hiNHmhFFXPeb5-B8ʷZ !_8CfOggS@ DG \ f~8i 0X;R \%'X)H hV@rsqEL?0  ¢@K$O;:|(1 "@<#0r[x_ ܌ÔY3gHǚ $CƆUm8]t֬cV S.[p ޗP0=@ i8fHHP/I9 fر4g ,dkAtT-r[:&c<.(Hs͋$Pdx &쾦bdwh|1Ի/vby?7טF vf%Cp^̢?*KYk*_S8ËR,E'zakF0Y !AXdRF I7Xp-4Dbңl޿#Fpn,L]CSpl,iiyV9u I5K>-tZp@uUX+=E%}ÊCF! ]7nmGL)7@b`0B{ٌ$*RcP< ^_@!ܤ9i0fd0KbozŸ# 6A᳭,ID *].G@}X_m0PB Y@L}-nl`HK^KB @#\qq8Ip@OLMtJIf$p-Ȑ^qh~*.np5o@c( ~*Iه(-UI 6 =}hT)(@)`? !! O>@P;O .\wEHVeC 4~9~a"K $ oAb0-𺍲Z+1B*>ye^b*$)-^w?)#- INz ܰp*hیPP`2|!4 !0%JS4-}~DiD @}}B p~ðmnAv\;1)wۘ[ Щ]|*h_p 5: @dns>%iQ. !RX2 cmB 4f̗d2d`b  l)R|-+>.0̀f @IA' 7gH $pe öl/CWM_'k+ Mv_S,1A( $D<  ;cEX@m%@X؆`,w4yy꾸:yw zMb,f8 ~-Z7 ]_`eA{`%~ n6S@KUUOv!-n~ ߄Ta)pX%eM~u=l6֚)HhEPPj5MDLɅw {d VXo0@-)h2UnauaЅL cCA3JdK!{ #ra*]  1 a.=Tx8tG`&BXm ?a*v~N?J&xjzf&, ,DBtKvh~ϖJ>FV8s:,fM C  3ѕ,`QYv4g."9-#3i F0:wprEK׻\qۇ46 v*#ZF/'YEe)/~ {; EHe~K]R$- k c\V֜ f!!imťBZNVs< @()fy(h3 P9Jf4{K79[s4vt1}ehM$j(%k$ DdE:@*@ H? @[w $/)@T\`y}5SXQeN?ؼB'Lwpp#U쿯l}5 wB}B 3|S)N'.˟-/AJAЧ"i' #,(D%0Fp0Aչ8vo\8 T(ڝ@mbR'IRdv=@?5%!a_`=Ͷ60MCȘٜ`I;C(jG#)uJT7U2R |2 Y}opg  cFBABKUܭlUe@2no1uJ?@L1`)!Sܾ BV @s'\Q8f ;ݩ ؕ[Sn5Wn S8 ̘@`$(Oi) @+A(G2OgFcv 1!IK~iB u۫ӥrH#&PM 6#rHű.N`'ѷ>gm'y>u*Kw˨ᒼn8ܤ|r.Cd$ϗ4; !aPfk0 B "k ~qkxcnhw@Wx `]>q p:=h%_$m3|- -/7jǩ)ϣx ^,E]Bx!v"PNIP,. Z1߆s=$t u. T܎(@s{yWK mz<8nP Iiĩ/!iV*@3ΦFNm|']S%aRU].Z;Kh. ^?##" A&4 *)0\h K@`R^ W0 :㰾X\@{? ڴ;]("L!t3{h: c N}$RGxe' -+8{ؕ]K%:XyB28(4ɖB10{9JK_בܢ ZFk61A$(AdlI2}MX/n'4pw,.,@.= 1/ 4ьɬ?_^2[ ~0@R;`~h<@Iա~3YMab+j/Yuf=]]P/92xvMr1ش;h%*>,t@xD:Hbm_"u01547*s"AԼlշ:i)bX.瘟S%`2̵|l)0=Nx*?%`& 'bL"bXCW|6ǩ3r f^jBmzF,f`t& I;.;! zœa#9 jme{otUzgf5G$'`dwnAIASPH2@FaS -`CVX?(@m=od ?ent!b57"IR( cnZP)72?9J/~x*FN=Sis$~ybdE <Ŧe0 B(=Yi"00= I 2w2,F@7 z:@3[_w8"gA!"hh}=!T >i$L܂DZ̤!Gȗk졿E+ 1dP/i"D d B0BM^c. !f@ @rnw@@9@'H32"C3p#5xD''QqHƅ?FK mum"xITՏSQ1( i>ԙe2+O.:SRD( ''1`M澡ɸ`̫''dqȴ.MX0|Uu(*8&dHؠ) HO_2|u3HFJmhYg%I}jwWX 3pB((͆m; ,prHbP%@A5` ^,% ͍4s llkQ'tJdοn~Nq*)h%+k_"NI+>,AїS+m!B Bo5A~gł(f]۱3`K$) E=n;dDW@M& bI]u¦c &09HYU}Tլ2 U9Z~H]׬bA ' LSт#(AQZ 'ȏ۰XYB8F]%:~ƅ_9hG!9Di\N ylVD"I#1srM\ $IQj5_jKDR^M S% gl2%L6HQ|3SPO wy2 # Cۆ ́ Pvre[鄈 NC!x{1&j _3$[)pO)d㢯5 zd8JFJ5 Yr8Z|Yک))@$rY5HN}蔳N0#:tdhPm"M㱖mVvNt?)1vo^K?os H)# ˳]/]4Oz@k6 CI""(ec`l+Zp8"cp]n2;J7Un )<=aw;OggS@r DG gnY~|݃K'"9ym/IK7T}"Mf a)$*D%"" 82.h<ynqm @T>.a:iIPޥP/H y,9Ոc^ݳr;RbwT#3.vu;zf@ IL&BNz]1ZT!>@Q =I/L|g6`7vƒ6#Bd KĬN<n " ^0S`:zM)5diz+zO!FJ ,-<||\ %`& p" D!zώZ/5 ~:I.pQhnhgT =qQ/&p{i`)r:ͯvu@{ T9mP_K fHlŊ`H7Շ}"`%uQ-PPLPPD@?~z[w0FDv poY1T9s1d|D3o#tn3 1/,JR72B"9ul@%PO.SH;>fQWI0NWBBEa(HPD D=H0\?0H!Uy( }V`uU\ :gQ$~EP@1`͸0{6$RT;6A35jq>mg]dVNE3H7RBfGo>.>?ڄ9HQdjޭdŭ @@:6=?5,"i p Ur R`3 z.LsMz&l謙ǂ4N?َWhA"飡NrSy:K}SH*z11#[B8_WvX !" H8Ai FeI~rfpNG0 @2$O0YC˪/dhAB(qn`m:#BF t1@e1>N>_YԿl&X[tjU̗%!  1y@JeqVB*@ Y l( iqJ`s}unX0NA 87*"t|>_65^d$G?>=WQ89pH`. #2DB"˜eKX7 b9U @n]a4cQ ny:^D+9܏^@H>A"M<ǔѯv.&c%Q;up <5vZ &1aq6QPu\FsxHO(ŀ. dT D/-L n @|֜,kM`|HZijMȃf N_/$b (^e< R~{Q>wYCr1|>P=Ő` 2BDDs`ǔ5{lN8*OsGp0lY2V!`Hg4+ & F&F7'aSVShX@z%}|>ֵnR I7cz eK: K1k LdPPYhX\T4\A HЅnx PΧ+ܷqK0Q#6`>]a.ޡd*(X-uc$~-@Rtk7EJMf$`ek'~=_wn"aU0 ,1)SE2'٘2[Xxp.¤f7Zم`f'%pAdM |?'`sN4> \͘DnP UPi`7?sjk7EEȬ.g6nEҍ@L*E$!31EPعzFc#<'Qnl) (D^@Y]tptp{hLnZ'z `3"ܜ @^&p>TNIX:mf4OڹRɩp1,(!JNO7̕s$1,J8G#&A5."u~"~Yhևc\ǗXW"pQYpct {~%DH^߮QQ3 }D՞V ` 92K  s֍4(8:r /m`Z 82h217~goXPau"N""O}n*t /.2A$J[ B DD-U8$(צ] <Љ@3@L/p-wpBj'@_2d*Lz}ES\y->X_8EFf)tt[vWnb41d@Y_sxO!29 `OV `?N n5@ta' ɊfQeVa?/o D5r,&k#i75'l?>2p'!єa"F#H^Q`_8%@c9Eܫ p_r* Oxn }0 S:fs\ ˎWx jP>sGZj(j yaѵ}s^EH.FS"B))jTd yL8O3$ qA3&N?B,X|dj ],adF>  ]dɓ?~ k`6j/}*04KHIH)d|n}M0r@aVmH@s!ü@& X+LX.ll [GY,[#9)RbLR_zo& 8#OggS@ DG >~7ͧ$XuZb75~.RkR>+ߕ,l"( S("!$!% \tsɗ/#l4cRZ0 v3aoM#8 %}3IDM2 /Im >7=ӟZ~-.MfC;<ťF/b u& P I`War*0Xtxܐ +:`v@yP(пSE&ivU ( KA+PtT.C&S ,[>u?-Mfk [\jt?HJvŐX!d$ HQ`4Qx@.n!lN2gc dБ@-Qk !\:^ $ KZ? :P&RU+}o^\FB>sW ڰhA#$1tp$F2 H 2> i(gJhrr$;0C0TH,Kȯ`hL0`C;1 1ҐEIMa 0{.>5ȘM+vYcZyOIm*|)nO;^htP!$!%4j 7'yaAhHe@O3\[Z- %aoAAœews44EK;BBo2ˤ-5[:_< qH¸()jUg%(":TѫI# dTKܓ@⠇( Q* ǀ^؍ N ,@`g#SSl]ɞD,>e=ۉnJ_?a{P7/z$/5we{ /gP8$p!$8='_Td{zV/^u_L^]e+D.:`7l0{*}gB2W\=L*+& ++Hߢ%*B\W&;mRv]M)JW3fQ6 c!LR¼2PU>&:16:.4/gBy /#86`)H#D䗠uNdN 0\>L䀽!{((&O>qN f_S16ZqgxZ_|ns.KdBeTgl\pó 11q()*@ h@@B@K7hi' '% =d3[ Op}؆PIިZ wNWt HGգ4S2H1V7g, h[`뚉$d}GjA1p_ %7" a\K3! &2n8 A>8ړ hy#_ 3lLyHj|@0WP0vj@߄8Xw%>Ԏb:@7ϩP xW|EɜŹ3Z^-Y9|`B'@Op 4d.  bPeJw#?u9vK/ 鷵`Цj<W<w0PS >4";Vaͩji+W0 ތ /ޘnAbg~Z3*wsK=r Z ^4B&($q޼`ipXB4`hq9.VT<)Na H`97!:\6|ȡ$? bG+?ع%{]Oc.=j []M>2A/q<]!ii3$QT$H, t@zqH@zP0>Igc(B$e4 2f0ɓ 15/4] >|ڲ=Ӄ5G~P`&/g?Hi-BUŒaiC$e@U `.CGE%N'f6>`|PT)d 9 oB{+@||=X7[Ȯȁu6r&>%S|G_P0H-꫑}d"| tP ش0%gB, !E ~{x1U0 *~`6ZکU/6%k@"mb06[q93 c๋7#>Z]ܿj{G&oRK}y {_K@;4[SKVd PR(}55N) q|Gd!Щc fW,c6\~@c"L_ם2eI& '_Z\SdXKިU|dǜK k>[X=.| }J! Xb  vkCyʿ\& oR S)RUK{($tBm;$WSuhLȿ*`P%@؈f @=vv>@^Y#ԺRn8?NcB;>15Yk07E&G1G7; vKظTrP!rRSs6mϯ.h5k -R %`AQ"vl!3h':Ep存q[`]F4>>E1[o`'oR |7D&Jϗ6 +a`k2 B(E (dV[ :fwc܀3ʿ z7?&T~m@H<:`b4rZ V<ԂZ66[B{Tpcem>GS' d o2 z02t} 5`/Y13IP!p()j_N߿@%4D ܌-7e˓m)'I2| xphV m@ C@HQ Dfk5PFZ^ ʊf8FH2PC9{0w#dS0;p)$JƊ9#x[>c]sҿ(137//}螄 | P55`@&15t;_*GlSڅ  t" s In2L 3 P?SW@C)p3nFэzlxZ:ߵ](q? )<_`E-8F)j m֛ 4Y j.`K `ͼ/$V:µW@^Àj:xZ!"S` mLsk(>>l> ;^ޏHJw2 |fΧgC/U-8A DQ) #5 7F [VVkFzま)h呷s<;yƍdq 7]+;pI`}#Q?pY}ќ~Em"p'"O~vE=j)R6Lr%my!( 6٥&pc |% 1-;e K"UQ + ?8(ך&2X +ؤXdGO%ޘ7iNjIwd'm}m$ھظ3ٞ 7G#co]nFAY44xY`XR# hq6-M @JMqDȠ ka_ިſ~1khSJoQ>/mJU|wr6u-\u%M B2@C MkΒl @  %@3'@+:94(RX:TRMc=ٔ 0Z+K_4 &vݝgmd_\Nfm];"K@`LѥcvK;MpkPo%q U5uq!56w>`]L޽; Dnr)>@v+BRA ^G~>_T4!~ʮc~i@zp(XPjL> -$Ҏ {iC`|F|f!8w{@cf0pCi Qf@wo;y2:ҕ/HBLГ܊p$ kx%E92 \/Cލ#QBK7i)DUh `z`rTC'qi, hgRLbCP$~il'+2`"q\02[5#U7(cܯ=;"ctoNɏ}%aJK"Mi 'Xwh~Cr{Ib!0MoaБT!$m~Iha?m6!bpM:;?Js}o,[L_W,={Tsڱ}&r+R[H%U}Z.^/gt͟&HXh %(Mba nrXkHAS56F ccU Jnav^ 7܈xx_ޘ{]rT^z?k\9݋#/b^ɜ2q҃A{1en Ze~1/A08H8P> #w(lQ$ G0Z8X]"f`)Y)5{-\ϟeȉ?M,;T=xoNOlppŒ}fm)e~і@{X pIRU cy5!(9gLǂdd`0oq# V8bx~pSŭ|9gOGdVIBt[Ny0%| \քLƟUf&ƚ#]Ytb #N o#dp ( i}b `VG ܰL(6޸ս~o}.w5_"5cl{+e@| s86q By(Usu1`M! zʥ9O{ҙcЏP&-$/u9GddNvb7 2 99^{yo_e̺k_g/eMB@}<8582&i"HjAz~b7x<<0=В UU}=!(3b\/(B+n?uGB)I%}~uݞ#Sփ3fުtWbFx.;GVD jaA'P{IʭrKЖA H HNڋP }i@gF0F'\*"|.n^$ fnV:1BWOV<5,VRuk]y1Qw$Z䚣u?f& !_;8.Bc&M8 jh46Y_{cA=a bVB%= N}L{;4۶*tUGnUF(AF>>M{cӺkUrG _`WƊ6y0$[}HݣP<%@ _ x(BܿI=]Enš>ZocD|*&(7 +DYJAR;>-{iD!H,rkn{ST* *"Ш$pDF :3 =w_&H@BZeIB&2$ $A:r ۽?K'9q !"Ђ+"9LEȍsn=o-GX/hKIؗtƅ_x0whgHZ?=:xA*7 H7= RG˒ H% U?e ߾4 _} +%Qs ;;d #sc oȍsyosc ,r˔>g^G`| Ȅ%`7`|~~0ߏ덣(e8)T5/oPd(LL-@>WONह(V>0V/3P$O Mg_ϟRDF{nYH M(VJ#gi|6u3;Łp!-"Ogߥ  lZ}8;@$ T` 4/2{@<AB9z~Ca >Mg߂o,rY_c^g !_`W yHi-ITp}o,֞) 鵏dJ Frܵa%`'}S>  wVhA~)1ق(@tj=mK{_B =Q䖳go.#Q -X29rqUyt)8z}q֟s3pLƊ=}]*=Tg:KY # a.| }H}Cc" RA-:O΂En[jmC 6jX)Vziz0X7|?/? ʠqH/ T; s,dn@{pʡCW0* cMϳ̿`"'EnZv߾Sѫ(S&tőDhR5@85nktw;6Uu.dzʣ]'ge[sP`+Z%#*wq q)ɭ۩g4G2ܶKo^hoB*lh\ZZ:U dl o=YI6Sڧ*hpvnzROԀn"KWފ)(Ub pt2 +E~}ߧA+fknGOF_('Qf|OFd3rd9S.;qf¸ƏKa0HgK2>r.)<䜃ٯtfO۷[8}v8>9c$7='pN Ǭm6p_|[gBgd,_6,_6 ! 0,_6_6 *, (,_6,_6 ""百4l Ytl!"1Vb$`_6,_ "`_6,_6 EDa(_6,_6 ""!.DV ,_6_6 E" H(",_6,_6DD" Pa,_6,_6""&DX,`Q_6_6p$Tp,_6_ .\.,_6,_6!""r,` $Y4l Ytl""" ࢺ@Y4l Ytl!!"V(`I(,_6_6 +(,,P0_6_6 $0 Y6_6HP(0,_6,_6"$lmms-1.1.3/data/samples/effects/start02.ogg000066400000000000000000002523741247673406200205050ustar00rootroot00000000000000OggSӬtҐgvorbisDwOggSӬt+-vorbisXiph.Org libVorbis I 20050304vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSذ:IX`!+TrNB)B9&!+sNJJ19Z,sB)XT꜔Z2))b”Zk *ĖZkA]Sj)؂R1჏Xj > [+1ZfD # Q1s9$c1sBd1sB!9sB!RJǜsB!PRsBJ*sB!RJIsBPBI%9!B))B!B(%R!B(R !RBRJ)JRI)J !RRI)B%RJ*)J RJ)RJ!PB)8A'Ua BCVdRJ(U@"BGs,s Zͥb)12RLJ %uL)'-ŘJ眤ssA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS5ӬtS(,$+?>>os>١U%ԃ_էw-vҽrysp~}g}v@nیɔ{}ْ:\{n"mcbzk^u/tdeigmE[4y!ɛjIZ߷Жw[]| 'b1?wF: ·"S i]h D#yn(+l!ͱJ~ }doryHNXll/6^{^ލw#4},FDr=3N{G`wՊ%k4jd5]]٬v}/.\qJ~B\6͝VL-.HsR'+ۚ76~K{kc&U^:&?"w$\]-inR%5]}kfVm >*h¤))z3%u<{,Yz3ٹ2y|m'j_~Un>4[?^{N.Ԟ]۽yoVэ=!S,sTĶ͓Ksf%6N3%mO+ݖkžܫm7AR4-U^#NfB::+E/m~Y_iK37rnilU:$dH|bL |T?Z & ( Д8c>%kss+ zexJN(5v 'K1F:xX^`cohvK mJVsa3|`*.o]</zPLo}եutڸ\?ZJ'sq||s,>-^2,vz{ug.}`$y;UF숛bcim$V7Cލ&WKi ]6iMn 2 K: D[lX:։7.˳$̠UIR~AG}Bn1G($ I]ن+/8H>1˛ԨN|uoCَ&_Ŝ,ݮ~c}=_}Γ\$DⒷSҧ} \ULdst e#]ujz뒬* A'Bj%w.~ &IpT@KigE;-w{M+Lu^ykvJEXr7√ftxlV5ZGvԛ %?B9gsq$ Rg@~ufO/6/ӕY6>}ݿ>;.,;>.{vyOe/ZCeMّ/'Ξמkׄjs-əIL[lqY 4ӀYz8< }zκNg5$B-"GSBCD;!iHWeڶ7RW9?3&m*UGӆpwXMe'V)UpI~Q @0ηն_-U!>b'] 3Wi/?ܾv_;FOCpwٵQk"pksq~ez]\ME,QɕĨqK^aP7rگco'~W,KJo}_X ][O> 1;D&L4IoB5C.FJJjg|NґDK?ON@z.JYhztCytlzeYDK^ LQ'^n%a:7gj7tizr$u\v:,QFLQP@DMgO>wd\Z{NtZm$s.u&Y&tLԲp1X?uo6?OثM|-LUg"ǿݗcԒ~KrrD~zצ$(z) Y7N0\Z{ur5g<[soe@z~ [s&m܏ F__Yl5ex.1'ȒY.~#!l8[;\*&E} (_2͎*-sDg9VݍM2$` mx8flt'KO76/opƏVD?<6RmP"$^GlIvYw&z* A:*ta1uVyh <[;╿ }L6⷇wo;2umc⍣Ӡ.N/s{st]\-xyyJ*{@֬SӜgV>?nwȸݖ vۧàLKӼ싉}>עY;#&Uy ќiv];taDKT w2OggSqӬt^ "#(G^=\67mwNy 3THj Sd(]\FTVU, I縧lNe}:|ݜr3ttߓ\d#ػ$~cy}{Q׋zzxIˢYYgqv˶fOll]f, 6e¹vᝮke^T"<7U&K65iiTzWkV%5'yb9Fk{^&8ťTVbQ3Z2,3m'(^KeE[/E]RNyjBseh] u y*gofå=0{ǶmH 3gK6̆{b1oM6Ϸ4Av:2$:%}eYf {we..d: ? ݺTrlc=2^lH_J-VB@yV?mYn*IfqG)u,k.BH7c(P1FЦ&a IZO )T`r`b3m|jLGCΗJPv/5)^/] B-b"iv8.cmĜ3yfޏ3pH l2Nlgo'hKf_G@#шG1[XhOx3V;ڒ$&H mmv2VJBwYS)2IAj|7KU!4;iKڱgp\f{[Iwxr{֟z<^ݫWץÍ[Ѭp}b&\>e8~w1KrGqy 5m.ݟ^/ >m{$~.zk2s.ʸ۾yߚz_lk{+۟?Dii61ɇ$wm#I]A@kBFxDS% :jH&/\fxh-zPU-rCï->^NscN#q^__\~ѡ?{n̜/o~|vlL_Wt2]q$;e|ꭐKr,|?<mŲm)qlq)(PEJEL~.W&iMR:ܭj:N=]Z:W}Q3x:_6Ɨ14gn+'&i-+mZ{T V2&3|#k*>ZZ ث,!>LvWe?.bB!ܘs_+:'?FOG qs:L3?݇cv1r=||9]^E=}\gSDž94#dn^MxΝ)?:{y$BY={%>ڱ_uh?R-=deM~x)i?3/Id*ϺC$š6[&͋iWM'ɸ("m⚫:=Q/A C'"rVʅZL תz>d,z{i*BPz[~Wgw{ttE4;>}VWވ w>.oμ+KVnMKV́^%u5}6* Fb{+Yݞyzz:[`b>tہ,?}?Z9%T+*LhNCp3)yc+޶ɗ{ƼzLPM$ˏ_<4a6ܣFF W X`Lت"e5X8^SRI*I5?As.9÷԰}[n}^W˽? 7m?\}iL^6(R^fozH'\.sn#E=Vdj>mD$Zpxb}=,/e~jvx+)MK~w7Qٽ~F!G@]DWwj2k5LQ ZbKA,H.kfWa( ,B\lܿjʾi0e[w/n,癝?g o/|u[DS}.RmTwX<>٧_f׉Eݡ bk;vh>d )Eoh?i*j =İD[*qJ[iak%mTo5mTUs59({:k6 4L>s|u{X2`-1L}ھW.#KD5r\ZI>=/=߈BYn{s.9oLZ 7qqaKw~JQOlJrkF&J>ޤΙزw=jSCd,\'@(a<743O5lu6!,b+QCov޲Ā[S !8HX񅝞NW"{s^Y;`JpZ,^xȧԧؽuofE%؞6\X>s~c_y|wc(lsIP2OO`o&2W*M%DG0νY$DvfN^}6v|LAW7wqhӳMD_ Uw$ڜhUnKM9Ǘng@t'+ONjÇO7t?/+߹ܑ޶0]\_0|ZPU( jo Y>k52EбdEN)6ضz@7U-m_V`jfGl?l!-Weo4DF+Jr^;}v![#+b!e';{ȟ-s9_n˭V[*3yΓgw{r,M悈9A pUl֞a7+}WDZ[aIȮa i]_vfc\cHG60RxelS).4 DZL:BdK)^&!ApEtfA+8cfT$XBͫùs.+%jy|vxT{O +{\{06/.0]gLwKI)Y~آ3NAEw\...6Ot Dc6ڬ0mcۼ<\_>lm[5?ȫ&S9qFm7xSiM;"9~\$Ҥi~Zf\zt 4RtuGXȎ'үTE~ƆE"UX"tmME'u4Do0?˟cIGk(U$h n~̸u!ĻY~bLC9LнyzwaW:* !I\,76M{.֜?kg{]k/_/O33snF_|F_r۲]}?g-?yg399W@kVf7}?\w[BR> *oz117;B C<5v78w_ ~~DRhߗ/7*ѠH ֹhAܭZT/Wx* lIڟ*shZ6wR4]'v=p5=5E}bծKp+^hJOPy^C֦0n^u(mhx̨~vL[b}cO?G_r=뮣a^Hv|`wc<]L>ϮgV]]~z{UKŧBϊ*C1 jFYN)^C2vkQUim-ćW!ڥhH#[v@UC5_q/WVSZ=ʶwޫ5g~uZbbQhv&a5U^sPewZd}3ݑu7c/o^ m^=şgr}Sm*6]f7"2͔yx{UNR4O{#mGƭJ{DV|{}׃-hs$iv{+4ӢVߍe VcK@ p HBd)uBzզFĤ}rav EkO)3xjşibl!-JJirюyp{i6=GL~d|죲ݝ%EyIs?~v:@}Ciw/ v>6~s0v 4lnKpB_Fմڿ(dw51<0k[oZIW#OBhO5[hmFiS*ɺ_]PcJh11ޮe2qWMI2!x@hLUbsqIK{J ЩVvoŒ ^}>gv%V|~?Wsg̹*r'8GLZx͏Np? 2}Mן.νeʦT8-}0P_k}dU^x p*Hc84WBw1u7Crbd;m),2#v+ sEOZ luw?M#&zM<-}Ŏ/ذS.+߳h-5V\ck'iNT]*r &IHձU {-^h/w$R[<4[M/mh4Iii^cKwбymMے˴'DU$W٩4c՟R܈De DqH~ .c$Ov%o)6&QʲzٳzYjNcyKhB آoE2W{iZ^{>WnI6hđw ڊV;$->иr Ήhl`Tc>[ >\8kd*[yU ڥ^ӼqS <|,Vl^|wbgl]&"5k]USHED+{orFw$!spB,"5+ u0Z웘Sigcuď(Y._X~1 &sSI*\2L9q2!4^ vempcTR.T5h BZ'3}L]~ swm=On}d>ml.>擵/]i/.- ܸqj^ ,M7P'Hr'5M|ZsD~}mc\rbsku*ECϿ4\T ײ%If1ܨB<4&t!ӺV3ssܰyv]]<ᱧpb|#gsgǡ< E ՕsRںخCMy㦖&+>E'$E?D؝] Ces>>%U moב![_mڵ15C_Jmtfziis١D|ȳl=)N/U}h׶'p,*MS&qHv,¹k&}q]_>c'33~;orc_'lu{1q{.P2?O~1/)H6Ֆ=c1v`T{eN'M.KC]}mZM}mR]ZyFpFldDžL;_ ww|Z5͚4՜FZy[3@q4рhl.yOggSӬt1e *B?(Q [fPe@X̶&|Xob`q״n$6 e:O,kj4*秛t袜ǽЇ]7mَ}ݳ9{Ux%Ԗx: 6 []#Bzw;o7<?oPݧV: 9rq~M JVn;39i`OI0"Y"rw_ T^l]3!WcUVkPMp$R0+.ur]rwkߧn> ~OFv4~>)$Moi 'Òպh/ BBr_~8򗔹2Au#4ͽ'72ϿaM5K=Į?>{_c| U n]dnҮ|9vE^ɢeUf :[kƻTr2b3=&i\=yjcEon//˿l ?w;r5=6.՛ @XT\|\~jO3ZI4*nx{l-Z>61[:;=GlϾk58%CCⅬ p`Zp& >ܕPd=ޒ*V p\nL*IYu*y|3vVM;ry3%^؉1_vr\Q6m-AUT0#ґ_}/!s:{~iUo#x 0mF@K:'9vc^Ӄ|"IMόъozp$-T#k7xPw7v 7=g>\?Տ"nε%0nqO/[CMi2u>f2͓iՅesl0$c~DB,<4 Ao^<Yzn4\) G. OkW91иueSҶmTԚݖܔVIZ=y"r6o=0GX- 8cdzqڐD Ɯ1b0,k~D4Y.7V5 T!x6\}m&G(Fxjmعx]ŭicO.asrKp!NiZ2](g~7_fb9z%7g.c}I1>/xgi0t-WeSJ2ǿ%{κX}7^ ~mn ',p59@8hpݦn ;P( <b+ӌ6=C<{*3 :Np {vf[ټq_\}ݽ8+u|q׋-b~.P/l 7Xߏ-|+^wie9 &{=95}ie%^^ VBzGu#:6iFVhyӦQ.r11&& OZS ]_FȜ!@[)HWA\ gj2ZܲBr+1 (gv[Vxh-HGY5[)~Uoo:gS<-pymkۑ[]%>s޳ۘȸ8׷Omw?>u]w<|1_ޅD/\|n[}l/{3ϕ^خ~`>7X=-o`ImLx=k߫z۞NQ_M+^'\R6IǦ/ՌPUT UJB0m&uqxccw|"{;.2Uê - Ђqd"\pO]LG*ٖ;b'&4E)cۗw.r6dpgoF$lФ5woz53 d>f V N\ǽ=E%j/hӧ_揶WVi$]zVz6Keݣtjx*' kWS@BB| qru$1Jh'uu5oVex[s/}/^=N7?ݟ<\\lޕUA-?{$kEyf'sY$/=kwc:WD>k }Li\sK&gau߿*")=:_4֏1seVѵbYnY=B|6I[G|ȢQ#u9) aȈ粄߭b8/K^e\M'Xg o a9գ4b_Sq.ZR bgbAiq I Y=^EjKsKQ;Yspqd0Be% aUݫ՗+v݉<ߤXg}d~flE/ bjOӭ<[}҇l Ij{ j~ z+36^`9Fzh.ihY~hEx^'ٗ Z|ЪEK(x젧O 3j,vK# dOggS&Ӭt6m&$ܾ?2 kJf#Y#e#Yddq"7E9cgJ-s^c_{u?'y'ۛ}ݸ럭f;f<ta{.KwʗcN]^/?щK9/['Y''τ[OXz,%j Aw_ūƓ/1 MS#3m>9Im+4jɑflDeeVL7ЀE 7)x~%36<ӳ@F+.u g' ^Q}϶a`6zsX 7\~2Z\7l8vN"7.RiuGWe6} p0_\{F[;QD!YW6F4I 2L вՖK߫;E5%HQG~$({4لhK$m⯿9^EYԶе?e iQӖFOC 2TZR ˥$ IΖC49D[ E\sO.RHB,mp/p=<{ (vR>gbe2|ݿhY.^om^^OǞ-̯Յ|&mZ)M(!\D/x:'Aiz.p u guk1Rӣ'CSދ#aQ1>5Nz#QvAe$7V=^=Ӹ~iԒ82C%i@(7Z1}9xrt/?^~?x>nxÓ\):nyxd&MHY7Nq^6+"^~_fl6Mf?ϔ39!![ߢST6Ww _4IŰxВd_k/Me >{E)Vyo:rT[ ԘotVx^&XHu}Dep/So!ͫ#ϞNc^OoOg69,n^޷:?ߒ ztn6053>1xou ne2ﵷfŇTɍ]zP6 ۥoc]Kʥ6Zi1Bg3'r^5D6I(TGtSן(nDy $x5rx0kgjNl>ݎ@EbLv#F\[)/b}#Ue U_b72cn!2sFmk_w޷iO6 f{Vk~q/oV\S\/x=HVovk@Qo,iE1{~/>١O/7׉ LB4i26/cS5Y5v&&s*鞯 `mVU7V ,Ѧ`BQakhÌ>KpQȭE]ǒO e`YgMMYB!M"qc yPݿ\8]v~|qXâ#^f\v;42owKp#väϽ'ݔkc.E[+װCc7/9|Gb汲SU>o{QƜڶF.TWѿߝX⸢8*T9`#YApS f]W|ຏӺ+ 4 6ǹ8?7n'kش\{dHNaT-.H~zɫmng4?6nT}uJ%s~/j1-'ߵM_ZД6iH~"oxj.g9%Ҿ?7v"W3 ۱C7Z+9V=];L-ۅ+&>~2b!Yx|NJx^!x|,1'[݅?%۫WOm<ޠ] FY7zx/<>jbu@:]Xz?լ jlCjbkWMgrmMnBfƃҤO76v̿Cm^f6qK~/J&>95-mܪwٱk]kUtkAZ'o˗o;LWIBZ|\^;y=q_6W.jޯs5QW{?3\_[9͂|lטV{k~%S>svvb:դq"kP. =cUų$jAˈ jg#ΌDY gm;[(hy'jK$XMJטS"^0 a4.I7 ht|La~\mj*ʼn/5srٿ+/g;b!*e~竿{;|o<`_ߞ5᫾U_7G7/z9e.d~o>v7Ϭ9y]M&4d~ *);ĵf|A7')zy[4ӄJh<ʶjj [p>3{MTj$r_偹\wK1uS\" GْaԪ Qx 39V4A"⹓sNB)W*~Lbל=GN'smݗ}\;ǹ҅X/n:{J[r"t?s6u|qx1No|v>2Ebb݊,]ʰ{b9[ݾ7ܗdy7t\ ;=M7 =v /tnhQ)c2ڂvߏmB:5߱~^wOL/mzȳrv:/0j:qpM?YfiO/yjCq D?7g\'ط2u]-KOPXSB{ E,堟Z9~]^]-s3X>n6ynu \T촇ŢdElw OIs\]€񝊼/ς-:a!rʌsޛsZ4M} |lu2a*/~KDoS&C;1}F-yqv5/q!!֋y@nӫ Х TiϦ9޻#Ko9q=຺5%j,U%$6*sm3ut5OClbdzE{F2w{urV㷧υ7f>;lwYvGj7M}W v\l1Y{1nta#}7XM]TvG֭T!"i_6-AD|1'o5TGmW<*m_/# L eB81٭(`ԆDD8  3<|v/͈3Cp {eu zTr845 rCguIxr;|Yn|i;V׺n/8Ym_>i|)t%LKܝ9o@q}~3dNi|#_)~~ W\\gcr[_L&g~N=MUvx IBB;~5@JV߉ -T-0?njΑ-;X}KnCĀYL>,f3pXWLi?RA!1mìzy^?g?Yzv{y'?~;hCF2W*Xl;V8;U<ݪWqdR{2_ޟ:yj[/6\3Qȗ)Sؚk_TQmV#YW56cC*.U4>C]RRw"7:><?D8VI\ 󷻺oVk jEHZeB搞n u!mvx\]?d="-Sq\]i_/R)~-"yjg0ims }E@gF/MuLNX)޻:O?kϣ@8akc`2+_1*zU*\$O3CώNΪY_K*uZ;`eg]~\/.YvsxOn-ֿ|"x*םLEn'}͢/5^O}<ۺsG??]竍f[]EɵOoy|Oݛ|i/{<ϧ$pd!} m^؟D]3G7dzJ]%ܾW]1zD4Im5] GkeTRi4[[LHV\mduKҵz% Cu*ywHR󙮇q3뾰./tLXBWS=5\i,sҼUuj7p8/fsv_[mqqS]ft?.p\Q4}dmDyc~]-? N{27AKh"ӎ+O?sSichr ZUiaFH;uuAokMK^\(KN+=)+7iNg%o 9D ^.'^' Ly\ .ĭKb*V|"e3/6 n<.K~ǃ.~_-_ l7(ǥsn: ^zW71[ߜgZYnWB0,,zVYM{=Z{ّ$f.1].NS[ۅyY^ڗTgsIyd_ed V9\SA9yeL}0c_WB/Xd>,Yڴn7T^YfVB4H$}?HM$_IIX}mڡN˸LӃԲ(rBpF8 !Wlqy"&ɺ~#l33Bli1{nrrd4M~r9ɽ䫧]<0畂>nOe9lImL_^3w}{gjd v ?̐ݻl;!:^rRw0H%On{v<й76]쾊Fǻ*^-.Ҧ66i>=U&G_}hdPsfŬ#guVK<8m:8vTP K r8C{;HyƬ3L#@"KBDqkϏ\šn}(;Z~|`؝.Wn\eY/۽w\·I9آ$iP.96M:jn>WeF> rqNdZո? ft"s}MUԮg_injF.{|nC9WIẬ%A~yؤk8~[#* kd\/vΧ4Pa/d;qg#2=٦~aJȈQÛGrqjى]㼉,<ܲ]6˞.~U>#%c8ͷU٦ޤL\i2ܤk>*L ]+[lVAslzO;ϝnRBFT4_ضM$-mgCF.m;[[vK'3h%$A]gƜƊ/}ݦJδ++2%VXz}F؉p(LB)0a`8'󯗼)7s\Ikdǟ2mUw{gÞ/8d>\rOqK 8]lك~تe#O@sՊˆ}&>[nzj?[ؠ0藶-M[ɒJ6vf 0:lU>MO ڪɧI+ܥh=T.Z 6\lڲ"4sA )lOTLI:e8+B6Z*>pW(T #PlAp@#8=:þY͸iF9B(/h׍th7:\,L~.eiw<:36HkqvO~ɩ,Ž/z07lfnsrR3~?CҴ(FΊwrmI(+@4Ne 4yŽX]j?նi[ڳiDF6FZLڋ}݅b6t[Sy@Rx ݋WŻrd W[uiv"+WX0*䩸&,!Pق;]2F׳>Hyu1'f>vw嫋/7M\am'I1s/Tzt˫j̑).ӕE߽h#V \2_⬭le˂8ɑ`I;VsMH7KJWHщggsHh+ղgMTѵy<(@'DH{,p8Js f3R'Q+qAq`1?O|.>>v;jhx:ͼcpsh8{l7!Ӹr՝UsNEoe9,|yuO^MnQuNU1tL5us)DZHD[EJGFtJY$'ѤMڿXdqhzw{5'A |c yp>)<"8]ߴT $ Ymk2LuW/="s I@n D^PH{DEuBL@D_pEm?_wȪI6էcc`"1DZPPk012 u3L!MLBݗx߫Z@ѕ8÷˓5g=lwef^ݞ66p݋J?Zi9I]j#vrn*zPp%f u9WjBUiaҎu##78nKy]L'MMӶTP$Z cWuB$Rh3OHN KS|ѦyT1>+@'>Y{;?,贽 .w78|y|Ŝ;pєvݒ丂'婕7HF"+T<׹*K (#uMŕf v`8203B.pٗiGҊۺBlJ~V?-ԙJ{_W2}ߏ;|,<=ooqgq/c|.6->}vrP6H"u?7&Vz= 9Gkixd݅:/2+;}]fR]Zw7tlv}PJ4?YD%۠P泘mC7&SzmR' #D⏸b^>v^Mo~}ֽ;9' ±49@^֏d*>$'ٔM8xq={}DC4MBcASy6ԟ.l?O^:ſNߛ~{*6zfY[]Ϸ&Hz sQ|};`Qdx4D{6aۜL{P)yd|)Vl<'G0s:*~\u%!o>8ZhfjJFxϣ!I[iҢ&!S4u]w#WE"nn@M9Lʩp%:m}< \umcybS(+n' M,A[h\_m5\oQE{mj>Ϯh,}r偙y\n3^\? [˓I/ybۧfK])3KyYl p3w ">k+?o6MUfdƹ9dmdlگZڻUVm*&=7?59'M{DW2 гtDk@cE 0,#5oosuwdJރxڟ!x!xMO<(YYiT3ynS;p2brϛl_w_ b]6}os sɓ$Ϯ}>!^.ӕV|.2 0Δc\]RH  =nJ^ߓ6:%s@{ J1IC5Ñ4mt|ov_So2x_o'%qqN_c^7!iM > n#2[[#8WpC7,jKIĸ&]͉LN2IRG_w9y?m76awDV]KYuxJyUKڋfשSzGgK7)v?p~[<˷w}G)t*O7RZ'?Ll8hOm=jRI>'*$޵4?}D%m4)hKF:+ sG]d (YrкW<#ް(m`pt?LGoӻk7U MǴ R,?^n}u7aΓwo\u_ Aĕ:0n˦m.ҎJwk#Ep^l/uWj}۠)')p y2+[mm*jl] i2K"w:3+?I28BU_|LD @) @LN3j.8rL3nAuHZ/^suo2T"_ծ) {N3O^v1'tؽKnFzP7ǃ^cF7h>RTI&aMƋЦ7?GWw~)%>QkS[ׅνoOO 걝Y-#~հȬg 'mMwR{UyHtm4In|+)DO*ItEncJ;Qә&6g!\pyh4KW&oؘmw<ףDwU0Pقͫ19FW#hu}O wv|x{nmm؄7]޷{{տEa,il_:Yp/4޽˃9#Jag] Wż];al<l9iLy6n2p&] rew3WtM4]ۓf2D fIpl u @F pd>LnWYy C(.Wگ)p|(:VΟ&Iy7CoZ~oG_?[L.UO_|e]ճxWqZF\d bO{l;woKSP52k~4OeM>De7<u Ba׃ߟ6=ߤmlAVR魣hҤMTT똮dj%>fѳ{ZxLզ1ۂl#!GnpDj>kWjPUlɰUƃbQ{'w/_ָ̋_vW|n51lv/V`j7gu5_.=[Ee:ẘ"[< .f+9.]IEji| /(kZ߲x/c5I4o2hj֯s3 .I:>ZY$>*/A\CZ$`e^35(e;O7HBTw>6*+B<6/ܥ_gj.1fvOf?:[{|?2??_k_.l١Ջir mj !]Ӽ;G>\_fUYȧӓs:E7= ߫l7M$svK~6$l "GshH%.hƀ.WE:$Wz V,$fq}N/:L,#qӴ9M3"[P~G#V;sX|"p}#8Mc x qQ]_bos?zX==,/\m ܿEj|2^SgԶ_h7 .4y~R?Tpٙ,e5dHLy] ?*}ɒEUoެ`ckڛYZJ RI2$\UwXZ}e$=G DSOggSӬt 8^S *"#'5Nf%b:u̹4+2o~CR5Ib~p 0y !XY7rP}ح,|w??C~0~zoq1zIXz$vp~Su8{s.W +qܶݿ۶׬#V^4Ҏlk]nZM.{ALiz|tDJ?5!X:U M+M]&IKbhoNYXDBZ,I"ZÅƞWD Zz߄"K0KW8s<.' qBfF7Tu8R* ?in7u/VښUSd.Mo=鞻'O^ H7o_H*4oMK,v]dcnY&q73ݛ^Bwj0kg^N_-o<72Gt#u G3-# *dyR˟k_V#7GŷZo5ڄIҵČ֙ux]Rɲq_%TQ"$d&R`;5ԳʍuB"4!K+rH>H ahoxsY_D/ KKޚ`WT:2z?G\O|Pȷǿzdwץvl;vƭ|droOkk0Mt'2v_v>rm$O4ξuL:us3 9ш^g?-ΛiOPV?THIwV&o^mCUjnȿDGɂ?36 +>Nµ>͖.GG0<-eҾcwLXm/T^ j_5SPh7/?d][_n8?=g'w? z}s(̷;>).]?П.`#}o yaXRe5\}KDڽ'kK|^]Nq]a=4j6+6ֿgk~hokIdo%XHDݑ}†??pҖʁr -7^^ge{k%o|ǂ~\.opoU!xn\?97ok/jrŵﷃ7|pox~|~'rֺb嫕} qLE0u`OIy\.Ƀس ܧ| ?ar )3$4c#ڴO# -}D*5rm=$Mz'ߥY3=>f!'?rq7^}Us䊦e:`h^{-a W"h!`ULem-߂[9ֻ̪h![yq}vu]%gw#hl7mr6?m׋x3qq;xAӐ%cI DP\˭4+w\<>CRXW}^hB !a!J*e7Ewk]8H-qגFCpUvw/aw-KGS;4Y(wؑkÅ;eBM?d 4)l N҈_])VfJnG g}$i:i*2k)i4IjOm[kjݸg.P&7!+ e= J`.bpl#* 6Oǵ'߂ܿ{\g^t}{;v%1,盓^atp49~ʵ#s{V~L`]?LSt_א^W_l拴/r'k:魭zo҈G/]/ p.$vŃiСwmPwW OV 6 ͸Z5]wߚ*$c/_\ "O?SS}+Mv2nT>7ջ2W;fM}[I ?UsWuR1\]?rrZiϦ$) $:FhpR2-Z@r8` (e޻W|[E\o?s6v xGWp KMT$,=vQ?xw|E"}Mw?ڞݝ>16Z~~ctxM-˷\~/\]f9(OܶZ/; oϾ6~z?M:]jrfccݢU1G>HT<[u7) MiHR!)^vmu\LhIroZyjSIWdMh߻eE[ 11)_tWSMK) faz)۝gBlZ`~Eb; .A*pU @>ŏq&g"L@^reʹiCbϗ'D" 7kvcJж%ζ}Si⿆o{=4E _~}l|5z[T{o-C˜s@~wt<|Ob`|wGSؼ<_EMf܉99O>2S˓mݗM8nyOߚx}8ϟu\얾N7cde}i:><׍.N+lD$i6AR[oHYGBXI[ 붣%dʑ_[PLZio+bo.K-{-IvBګV5OggSRӬt p> &) qf.kð9%s.8Gtr  .;i14h/|8Am !DUS:ß/oj?ӆx[Nk~qZ_'~|-_nw_~ƴ5trk,; l57ܷ>'dnn}dď&=|<{`߿lϫ̅.2MvV*K՞N6ҪYW"l7hZ\ۈ|#+F_b&NdC>o2f2La`6{uw`_$'b,CotgI&wpu}wJxT! B o+sA6o8״k_?gOgbs~}5䟈=p=#jy~|o|`en8] ,P}v.{ߗY0}ZTL)mJ|Wbr67g@$^޳6&fƿe0m=[Ib6G2VV~6j&=S1m>CůX"ldNBh?IG%$iYQ~-g.~\nS\s# :wK允M$ַ{'kV;o[ql;f͒G3f8:Ynq ڤ){oڪouVd}nwYԎ@? {)e]N;tzyTwI/tkkѴARQ٠5r`>[D"4M4}yGY&F{j}>/mGS/)SMZ^>I:ԗe X36~':7wK4W;znG}N .ʼ\C=gJ_ij6{e,8@C;Mx48 83!2Ԡ(%i3YJo٬ RX [mW6ُ@3>S$=ЌQ'*4FB-kkmڶ~_^>7IX#~=of~Ӽs2/ K>߯:KfŜT.k7mѝ[祇h/}edg^}a:|yFٹ3VJ^X糦c ?ҤI%_WuըlrZҽ)2Qy<\}ov)O~")lX!4 *GF>` ^BOb Fxl D{b[W+^Tlt<}=J՞C]ϟ𭛗kV>7ӫZqnvwh|~eػL 镹UJm=m\eִ7_ld]I#b'9tNu!I!q2[/3w&_U$Kcr\xCzIv?)8Z$ڛ |&L Z958P&}I\(EB2y!U&WtDHľK7KBcjז%g=,vln?,θbx4Wǵ{`is&}5x<ٯ={21.NWOvO=ϭ۰}RWs%Zb:WPNI{rEn+.ӄ1oLȬHlrӇub n\I&itm$'t`CChۆT#w4Bݐ 8ڻj+l-@s`n~?e숭kBZJ*[#_;= |U???.G}}ṺxkǣgO zэ%檣͗!9|wοϻ]pϕ]ޮ$ѕT;be9M";"DlP: ܶ>=M\J=<cioİ_R"D/k0xM!78POBixP^7&=4 B$…ar6)P5> l5{_A\6OlU(79G_.7Mq?\ICFp¯.p} ~q̞{{7ߟ~u]gb]NWLjl,z~7;#n\~[Eݐ]ZsiH&N.`hBl}CCOѶiIB.ڤ6#FIi{jej<:'s=GvA-MrB 9q8 d]Ưpp"0x~"/M@7tGǚcK5UK \ghZru^U? ߘwxb_.{K}=nIy҅<9z0.?gSc۟\s*9}y٤v_]~JsѰ?ъ # G/`WB^+Ug!,xazdjfP{1E=7cOggSӬt K!>HV(Tph ^_c>"is[,~ f岛BH+89st.{K/x~1?&~rqv߳5|5ty좮nYĎj?W]˾E׋kIgڙUlϻL &Zf;?I\mx3G^F A Ahh6IoM&4TOo{]}ogޜR{.&C50t&]1ׂifw;iW O.u7yßoۥ(/]m㟾Ň8ݽ ~$CY燌y/rz{x&jC.oe+J:5mab9uW7-ҹJj-E ]w)~ [UGrZ;^=Ӟ3En_? M_]?/y^;oY:^x]9dAS ߹˳:_BcHR76D4j݁˟Τ}Tj4Wg׷Xu,UYpw]x^"f0=Zi1oĹ=6?1͟ޘ{fxy|I;l:Ͳ et/ HwWݿ֍d3_]jpKf}KhM.dJ KE?yp\mg믉A#;%vӄeUTL{1/pDŽqn*n̊JX ]گug3ӱ<>W!|u>r K y:7{=Q::ttOՋ/8w %7_/t]bbЩM/>G?v>5pکoYdm4E! Л]fݹqӱ}*'O#qc37#;x?QJzԥb U ύ羚\Î\^ O]zCڋ{2.>vʵC ;w}yxO"{y4ن0AC|\xsQE\ zW=L#n5ѧSdޘB*[spܪ߆kJ>.Gzp}5T,|.{IIյf;ϥ/ot=亴m%F3k,n}e:7RUDz% @ܨ4X]*W<&. ph IvG/z;ơުFҩHim75MQk e#fx0%C>z5$+Fɠ^"}󯹹 64[NPUUH?ލ>Z-g2Szi vf>{'s{^åc0y^|y̙;rٞ2.,molNb:Mx#k%,iR2R'[yNw%OݯSBE"o%"S$^LEGtE+J Fح^Y%s6I!?O pK^>.k};tB?:.aSBA H{G[nw}pr>fݛ_V۟ggY߫$˅~͗۟Moj|/4C2\ZY!׈:>*cUؠ/Y} \P\9΍OmC]Ñ<7.mz,(il&n>;66>%o]|vmQ{{_W[3usrag&A?~:U;>طc[M|JW%}}vλSB! ċlLy6ϒ#q u"&DrseMv'$WHȰt/^ _?~ToVK^U*Va4]ۯ_ sl҃u7q1OW_?Sek-1ԚQ/<aIMmx2_ՎOː4ef{oK2_\{<*^wKu^.NmzeK]]tú찿MŃzqngr-fИzl JK.m{ccTFDc~15_K:g_weֳF<YÝL79m]S#i #^ ~`;UpW.zx1.iͫǹܿnPs^KA<=rӧ6mOvb|E|.t=}]7s G廛VsW]uOݽ7"$vj/mnWk''&{VɧjлbnDe\Q*9O/WNG'6T?#:xtSib#/X^z?l3ad>ޏ@HZ3 B} aӠڮtҾ^.bDg t R_LSeim3A\~) Ā.g~iF85t1U`w8v1izY\̻׮oϗ7oE|\+~y~_F&!u؆kn [#{64OID.щ\uyAꢮA.\wkn~{*ё/?Ya銷bv=g\ų%piqAOggSӬt ;    r}pâ\ۡvf RZpܩu!!4D@Ë&6}{yѭc繙)gG{oz1N.NVnō#]ۋn?)OԿ}pKwgOE})r>E$Ii{tF!T ֫ZhQLZ{EzN'ƺj-o.:Lp@>,ާiםf'.fM l^mG6i\߼/ofgp觿ӳۍߎV0ѧ}Y]T"_n7غx[,őoG6W Ziq{5=3 \f;7foȯKbĜNz흶$fPY.aŽdV`~,gHg>FFPI].npܠGYD +" @ _;47zLʂ>qYG\L!&cpK/7][ 3I?8; {37ܻнe޸b\c1.ޤ-絾<_I0ô –<u1fq[xy/7RF#IsH6u3<qkߵ"{ّ6P'mksVzLFzTT%Tr*h}J蹥:^08#v9rn@~]z5ćb1_\{W󀣏r[*/T"q.W~^;ڭ _35lzz@[!Ҽ/t^j\j]w]0nΏz/c&{949/]Nhѩg;-Ouo2E)il |h`2 G|8ji\1,߲v 2(Gh̝ߩm(/ۿѭQHPE7WoaۻHJϫlATyA=/DE35,?w+xuܨX}8%6TQa?| KqD޷'s;mv2 .ۚfziNqwsj>oUbrWn*ݾg[ϢcӮ'5uqS+CsM5p?y餋H@n ;.ܘB*I(ue?V%6zN?ذط{C߱_3e.ZtՌo\kY2WWLG^B'eٛ3_-mGpo s[IDcߝb^&3y.E$|Avu;)j}#-JKr vǷ:!>;_*uorXAL 0h?CP :)i[-&ݮ8ܛx#KBBD>~upZ{GW-POMLL4^ޮ;mn/>Serwlխv뛷?T^|`6?-TM|vF=.|\?okQY}/J,ߚA8]\eGu\T˻iWdp贊yRpѯ񢒪rh$~oIMwmҥo&Zm,A?FS!Qi6 ~]@/uA}y 7}PfZ*O y8"uӝ)(vqrϕe€\s/Ė<8b[~peNYtom4׋sK_ͳMSiwETӃ}iW@.=V\&"Z3DI5=ҦBJMlR*} =?]|zdPPtt_z8uHX]!dZE'ۖ(ѫ9V U%O|qw3";}oq`dZtSy{ շ >l/`Vϥ@|C+g'a9ۅ&l~ %/fv.-ysĥ}3m=L<6z˧P]ow@>x9 .o/N+vkj δL(`$3ltlL^%Hz80LK*["m=^]lVnʪ'8⹱m>r/9X\z.6ݏ]>7|w[v.?'7;5z]9o䚭?eZ˶p}Uvbz+c:gVV%"?h.F>UhZj?KUQ 5Ovrco"Tث/X:7`P{15cPxҠq)s[w[]$V9O'q JeR*͖&lcI._2N{֭}x2yᏼ7xms/^]>ٛބ\=/ޛ=wKj{{]s)\Dy?|+V埰IstY8EaU4WLrC{ﶩёcG3-S\(UeׇBu=Xlz3q=w*yj&%틘)BF+j)-˫σ_'uX@m?X|{5r͍TPB1mܬE^HUl3lN/?#n[]-z枏l 9k֙u/LHxn[z͛R6)Tq*gkVKڦ/g4z%&cl~V6J$N4mrZH{zqN؊HN"Li,~*hWjZJ۫il%,)1vԶy9N(s_!gKp 'W.?s`#^>__0y^H49kʓtytxmOS+=o ztcMc{y;l_&޷j6{;lѪ%J_oduvSp<04YQifn&Xgϔ24iU@ѢuUTygzH||& m~FOu7dTOnu+g!ܝ[ B`oE4IQ~i˟>4;=ӓ{Yq=% q_;i:^+˷&?~>Y;_>OtcťU=S#tF㘥?&M+>7MUJIT* !3SWxM]$HzQ?Kzu6tKRԬcUΥ2۝ϙ_${!35-gChlW0WsKl[dA%g{xz..^{'o̻ͣ2_<ɗ⹿ =Kz '[>K!^'=v3E7>l<6xgc?SK3yA?"/%S/^aO$Tary7?2vbGRv/t~JT i6/ݾΊYDD՘6DZiM MOggSӬt    #&A& ~_ 'y3c0 բOS_xԄHlzFYK˾qϫ x{~>X<'g&xխ~7o}g'`gw;w)鏀S3Ţ9_}~^UJQQ\쏫NH:Ec`E؍wtCs.?ڋ[db.<:{[͏pQpupe׏&; >|ywђWf3GϐɭE^ek/\Rn6+9 JtzhcDEm[.R-jqYz70S蝹&^' ͮ-pƝ( Q?s͗lTJS)T0U` `؝N{V7+t{z\uOS8mll/q\g~blujn=& `us.:9Gaѯ&Ol^h治NkO&v˵\,1mc"AEu 3۰3W,}>;7>ˍՉZo=pgӨ_dXəLЃ @ ]D`Yoj5 USxM`,vOߟl?yXk܇)Crm9ІIǣ͸~Em#%e~;NdߜvGXW=+YЫ}Z-S۔͑-/2 3$̷ֵJʋ?9 ՒՂyҫ+g]Dig4B80N;Q5x ^֯4^_6q<}u[ॅlv:1}[xr9O罹xxY=Sˌ䶉QF '/|睇>۝mk۽ ,k[ل\&=ݑ5o~kwߕmϺ (lM^QvsW52B;.HMRʐkn_dmdsAqŸV[uq紨O0l(8> &]^$:2޷?3oE_Cx`*y@DpSi('>y/f#IpoXk 75dq{>n?@`y{{;o| }Sy_{9OM|\sщg#?_ekV"Cm$^>^fUZhdUQ/E[02JWT!.?a\+`_< /"c8?m]&P:և{l.h/* "#8 4Խ=uߟHO~y908= T;]]\Zlj٢uzs_W4mw֒2~y^mȤۅݭs?d[E'6p9DoˬȚjEJ@YĻ넚:z:I$4%jέJVvO*1gnįފQjEhN9gtd"<)XC+-  >ܽ\>g~x#90)a{]Rd+vx?}m1M(yaPf݌.}qxy1:O.>s<Ε]nF(Y~Ks}u<.oÎ%19N/.^רWq-7٤!3ɗIŲz3H%EL]h- oA3 $eLZ:4u/Z.m wt\G44$~@2+6 _/AzwcėR^6 B$tJ/Pu1vep-Cw#h=듟V=ˏ~Y^]ZҐw&뾙_RS:̻cPDs!Kw!"sg>X/jcPt@ċvY~b}9er#ScL9ΎxjKH$?4gmsr[Q$A"Bep4hp`@_3I,vInbΧ_e .7^?u>g70kP/߽8E,liهY㝈]=~ǿɤٞ|vEߴζsHk[*<놯w X[| %p ɪ ns4TcQPTDav*I6ɋ{O&鰮-RIsZFֵ̣]!O60:-ӟy˓c8 >.A"x~g!%_šMĝו騺f^Wۏr]}އ7u3+Xdn&po"I6.̎*8k_~4~5r=RlK}E$F[ԲM+K`fJ%+?5oVƢo@w1[-電jOI\ u f2;w]ׯ,%4ru>YbO>\uulXH<'f~;0S7y_ߞkOwW/<{l{օyڋM;9vPFuߟ[e9\~vD۷?s9튌qeD5ː<]^t)\[EM]?h/)&be3\fqiܾ矛 SBךּV6By2rϡ,Ao_ XEulP=ٽ_)"ކs]By۱$5Սk*imTWR747Qx r:pgZ B~{cDq6'ws Oն1l OuηJ31/NЬ"vK#㛳P7o1=gUu(}E;}X[1!Bq_?"Ia|C".;=pk TCß^>?3(`~|Mbp6=zqaSNT!8xAa͇Θ<_[x4~|`y:|/<߼qḴ_F <0t%Yg{^&DZۄ_D-k^4q- z~}cҷtߘΎG{ژ9l}|u=k4W" lHs!vYQ-* Xa܅k/^˭DɜYNyϜI,щ Zc(5g9;oy=0~>8o߸v_ٸ{n,~+]oY5=/@l~즳N?!,riտ=c^,gLxw7V"@&t z@gO:|tJIao@ Nz\aLP6cZ5MkM/oqލKّ tr&thN"ᓇumB9nemAڐցZL9fl)86]$CS`l՜2 Qioi:|vZ?Gl%8* ?޻o?7fp߀]~$m ˁwh_ě϶\n޻ 8e-搯>_"sЭK1>3g]i^{kA)2MI] ew2΁o&t7_Q&3xꌏnB^TPtwd~ܬjּ蒯r]L6Iz9V؛3_ʑн-1*jklO@ށΟ{R >x@* !Tߓe;g`s8?Ζ7~ \8I"|.kxlq˼u۫$?9(<-,dN} slC%XtWm>U A"CgY 掔WfwӤVjNؙ%c_[]sׄ/[d\ȟ foCmoٟFo陖7]u*TFC# Vtf~矛i3=.#FgGaقwmc{15;U T>:חB~;y=m>Ky.HcZOmyzX _\MrD\!ڃEwOnڻɬuy-=zҹ0[IגT$A&6 Έ]˿WK#Dvr㵪jw` Chj>[*՞߆B@[B &Yh]Fl\O;#O)Qٯ"/x$A6Y t2lj=]N<+"j;AwF?W"zv~~\Uwؾp{L-7U}wc(bRq<Ӵë*%5!%wKZu3=CJWNbM'mV?Smp{n$3?ʴBkp*[]RL;? 6Fw7U' I$nGeɷrغ"Y˜PVmͫV~V}Iۜ^mJ>y6N.n鈍%)\#Tt6n m?m;'qdkWt<{~Mkn}Bڦo5?*hm~?%iP2s&jعgʽNr-wl0=oZ0"z !g@>=Xu0m{68t5p߼fzᣳfzV|^re9>Ao^͗{@ʙE/B݊mf*'+a;2$Ls|2wYL~Gm;pUS|}e !uח s7'U?w}M"Mhƶ}>7ߠj_ |Mip:սhSw/n)3]!-l!Y~=nߑ69tO+gz2(TXHO>bٯoz7wা5_^HnP}RQ!soZ?ڙbs˯٥a\Eخ.j䖵LzQSp D؊TvMš%s!7=/ͫKLv #ß+iJW9ll&nT/1yAr^M<) /}&m7S 5bj׍I) Wr};`=#ptƟ_Ś^N;o{iᕭNvÏW;e؎w۾q{taes29n^ٳ7x)O ~=D?O2_ȯ\6L6שvغ/Mk?s7]t6=WiPvO-)gg?dp6QOiRcg'~ָbwt4ۉI z- ~揹Hɮ69'ё%Pق=*}Ӷƪ߯D>-6/// g;]8Φ/~Wwٚ97wvj7lSLafضy7~,/γtb+Ffϼϑ[R@f^ (II鿋i"9s%?oᩌz/tZļV("Va[gr]huo[W#*UfznBR)CR=uE;$_\RD: (X< o͕g^3O]Ov.Ϣ\W:_-Ķomq\禺 fWOv- pSݹeҾPd~HҶizQ2GncJ 2U߉/_\RXVL%0ujy@p'B_QP}[PV6,c*JRlusfMgR4P[! @e vלh^x#>+zcġO?ixZr֟>꬘A:7r gN9}hοmt)?sg“^\= ӢǶͩ{DqNiE$lT=DpBS}ϞiIIy)]W6|[En(HAVg~-y,A[OggSӬt`&      q٭7 5(~,f`DvSfjBISM奅A|p~vO68v8a䭎/?U6+Yf-9tc piy)7[Eo_,E~Ui4@8,>n$:N t$ elV/(*8 MHЬc,oX먶cΐO7)6rc fۆ 3X)Ah7'`^-~%$o9囚o4I3ctts ׳7euYj[iiӲRwѰoW7Ll tFw6XE6rMI.[5UIjF_ҹ(7  Såi.3p, ptiA<1!6ǡ O/6AxǏ681̗W}t~8rی`vٿ&;u[/^,.4)5o~4wC%\&%]'BFMp]?riޜSmDU~F]M#QEedf 4]k0oYdi%-4 ru5$ߔx4 6?ÅvȶkOß1-oӮ5??%/_bg%|"Ѻue|?qMOl͛F<)n)f;g& 6y| E7}vmYm%GѦI[3fgێnzxF t:H|ϟOw*V*$wε5O8`;8<ޛmW^?l/JYx}BHĢ}r5{ {=ED(wwFt>߾~c6#tpg))2q5.s=kZU1x͗<)Wy9osuoخS q tK&ԛXMfh4ߡgZR1?2Dp%V[#h&ڥ|ƍDaXьkuȁE=4Y'q2(G:kl&qSzJ߻ͣ>]Ff;{#3O/:mg?cy_q;}?v(X3wnaDžym6դ7/꙽v:ٙ[B3@GU+mR)6"?t}르u4Ɨ /Km+5RҐls)[Q:>sӊGSNEH]7 e. 5NLR2̝?sA2YWBٌu35K&ID=Xpyqur4iHvʗxߎO^~͏o{"lm.cOIL||6.{RBYA8ski&߲&;S/% :Q{K5{>l-iJӼKC?QcK~+-]\Y RCѨhb,)"R2 :1Xܺr@~7BkӔ92պ!r(tN| `"bkw浾s}\{_5o>(&2Ʈ~~WA,N*碅 3OEE ".ݭ/R ]#l{\\^ç뷗И3CYqNkJ_^`'- ;'uvjH͊ϑ8v8mgf2Fk tQL< ;3_s7m4&3(y{,U!H벘{˜y[LM{9vՌ1{pzCWΏOO jIdʱArnSaaۓ:ŏ=+4Ӗ6~xvW!.asUp+"ob_2k3scgFf$h:]3N4ӟ&U+AxRpV^X`kuhojDIA>=>7q(n]se}pI|2qtXS߅P a8}{aq5G˺(2Y~_ܽ7}mٜeߗf@_=inô?fڏ z>B:.6;rK3wjiKJ$m4g|4}Wؕد1ϫo9uNtN1xnZNo~`^VcU[7Tdc6ms@h^ >&za'Bq;v\d_z^߰kLUI0~JvNl^=Ѫ<{㣻~}cn{mq1`7Ll_B^b(ϭSrN ?۹/űG` ks+ՔY'+!`CcXD6sXX"fxq%Ͽ߮bX9}شOoER[ʧO1V@3 =UxsDc,7oi{>oTiU$IFn}Zq On2Ƨ}߾qt'[rwl&s ֮z%ixK|_`,QWj2Oxf-)*:llIb[?it_1V-9V\ s˾m*W-_^Ů,VFAdwDZ*pK9B@ ufcg6'e?U6[[km=yMtan*oNsbyq%ݓ9 =lk(83y%]iK)d7`{:?Οz/#oeeNߗh͎y+Dj6ʪ3y$}?:|ok[W{]↊-:{-De?QIRh!j:wyI?]7.?Mmo]mm`BL M^rgpwߛ욻/-_lƇlP9MuOKjnˍ-,3mMcyID]W嗴*gve%U?A-IȐXalgÓ[ OggS@ӬtJn^   1>?q .E T` ?GMgLq&slI|3keh,m5ɧ.-lX[O>~^D}?N{ۥ,Td20jJnSw\n.onp 4.UQgS,dJ־co+WNstF1SiSz Byi' !b2,>#hI: dݷ޶:HNo~xf|q}UScXh$*Ѳ;{8p+[a8Kˎa:6u5h\Ň; ;e ghgw/&evFM:;5!VӴPgygWpc3agM6[cvNuX64Z:ȇ%*"TB5r+dX0FZ:%pM~w5aQu[*[$)02ܵ/HUWb|toq;kSÏ<⚷nEܲoy[za6颿 uϡuVy_׍4go]OrO}ŏľr<%Gwm[ՒyپG,W򛄓6&;\#N-;C0(= O^R4\p` L~Y_o Mc*8hS^@g 6_NdkgFkG?abF.<^?~f\n4}~{՞mU雇o*%;yz1K\;,v!:C܃hP\ }Ezjšn&8r')n$O[RxROc\gq!Bs[jFA'DzrÇfVt#ڡ^\.=m]Y&ߓgx]>AKӄ$aجV<뮿9{wgzWV} w{z4yܸ{\qshqO7!y?@R*K゚ȝoϽ5S?WP{>La [\<}gT4 ?s]mI1)5J>D;wUveȦ'ːG/2}Q|vY'.jz-8W 4|NE8?^\\Loj)-أ> Ul?=x<{/3ǟ=w]_kq_Oj>bds}?Ξv"$aͶ@T\֬h'bMG<L_a~G4q_XԾA?=D{Sk#ަLJ)D,Hd`}׮WU}}*Zɒl ڈz#g-V]*=ll#.de޻ & nLRSb'&xADbG0af_qm掞VjMWO 7@u>̿Аp؁%1d\rżI{3m7KK{U,YS5=›PYjSLmli#^KMHSS$_ÐayV͙Kuʭ/Dp4a88h˝σ$%4@y{/&:C˚_Y/TIpsaw 6k ?}y]~c 쮶.|<Ϳz=bx5͗g5 }!ϱ ͒nʝ.䙮=^fr{KwckNۍM@"=қ*N{۷>ȨJ?4JV+Iwz ^l׼Tء *1YOZg,yL qi!#^1`i l|h5W{Kn'O7/{5{ fw78owϺ}~oEk`U̹NJ{wo>bd8Mmwlio! \ضd0ˌإ{ȩ**M]iTݺy7ૌn`{zԢٜJv3o281^0ϝEpo8B C<^nV (@ry~Ee-'WǕtUD"~H٧@$nTm]ԙ_nO|qnE? fyO!&{sZo$}fq}7?$mw>ٵhqj wyr*+>#~þx딪]V=?UGU4*liOBHL|dZj4lcPwJE\^'Z97`l0S,06ba=m_DxQ.{c4/o:P韖拥T~PNjm<.?RO1ǼI"ΫLwu'7.6&f]JDHP?ז%uyT$is1]B #f#,]F.|UWVcxjۡ5{ n˵ ڳBSt8hV|:mW`+hG2|V`%O\ȩ>c[uspcrP&.۟7-x۾2~=qsv/zpˣ?__肤s54wmrS].?. *lg"43^yZ A(ݎOIOy,I/"m%ky}4a-ՠ 3߷8]R7'Uv:qImDkN~Lk6y2P9w[œ@*(J`]whIq}f\~'O3 l{_jЛL-0ja7O܋ ]-6?mʕOG\Ծd{kQk05?{Hשv{6uZ|{y9s6:Vz{Zp teF`twEgm\v{pՓ/xA"0\[>юHH?2NGQJj>lۓ.[{PN(W_09`oN#y_"ͯ_Ӛ(>5g_ {9ͬSCUev,)楍vi,Yζ?m$Ͻmw*H]CgLS^w ~n Lo4Kό`=p\zSTURbB (OvƘ\죗жLcwcW=Kz5]~xjs`ŝ7=@*D?،5wSq-r#9q5a2;i~]-ݗ7*-%.LQdpr*~IEqRtʂ/ zT3ַtI?9A䕎Sy\{]LYʿ7~آKWOggS@Ӭt7B' 6366502JB@ 562?><KAPpPl[Y^vܰn4R,16{U4M|ͭ3ad[^u==:9 uS9WgSmӦ,AEoo l[f2tuQwn۫ c[/󋺕W-;6Z s|TuzsL~VѸ_'ݯ8waR혞fkbnw\ڶo0+z]W.}967^~m;j_lTƻkD~*){UIw5)u3\ۚk73cmUiY:?B"OiI~W&z l;9BXj@/{ |'=}7=®-?yt35k۴>?A+ 4cWߵв`?&n?CkOv\nĨ\vK\_n\̷weuP/qWXX\z(`Zۧr_#(MbUaIܲ ic+qjr>?1t߿ώ)yæoڹ{YK3,ǵ?V޿7vNtIK fOŐ8Cִp֐I3Y C1Sex3pGj[@!Heg^3B6ڂ6y}~2Ɯk|Xp%4=!9輦 *xgre;tt7[}rI<7s; g,tkzU.!uUC E$k~|M+/\X=4 TERѩzhG楍Ğ:_^$_!QQ 1 p @^L_D| >o((ߞ~f96 T! 0PA^YvO: y}ގ]xjՃ xó/A,x5oO߿̀yus_qX6Y.W{4}q0ޝ"dJxMDCO[F-i謌y}4WUv|950OJk4ST=-S$>jJ$dj1p<~̳Pβbwx^bF׋?^K<}716+p A"b^gX:=vr# 42\MC`>ʲ{$.d⣝_o$PO{VA03#P(3^fR]<lB"ȝJ.O|֩1P Y:'_['.fJhHbaLWN)<G\.3{g } ~I;؀A <~bu7K1qjx~(1B?YΤ1S #*\Iy%:׿m\b[?o7G;' oǔ}m&iĎQ'ӎ|+.Px1}&|kn-e OnCvXJ!x?jk}'fgs:%5K{G7g_۽}x;C?.yUty?r c \22ET-t"Y9 W`>Nϩ\y`].hI&έ.{y.lv@%^ՆӥCiۆo;Tr]MᦥU"`5QS*bW5ױ 5cp20duۘm} ߻ڐ6q;êsn2SQd{XΧU}^ؿ9_z56ˋ<.'I۶$7$!y|P:dDgc/@BF]OQ&a_]wŝ}!5OJW??_l&3{u})e{COa\xin{޹cK_4mT҅s{9Ǯ#!x+.,`ic!z݋EKA4..ߊ.8*j]Q'y, tfM:=HIEqM#z)M!IoYu*ߐO1Q2XL8Ͽn%Qs瑰^GdT:1oZK h(p>\3#̱5lz+9g;||Yq$٩t*T^bccaܿ ~oZ)w~}g5~UO<-p1niI:ɤwݲRDP| zQ{lW\nmpζjΝx$,E6cD7;᧊6Fƿͱca,bAf2KALjl ˥lPzm! B <^o?͘3mޟmZ|YUNWB%f WݵtGN;=p"lmZ0چ$y<}s|&ҩ.D~Wݯ^XЕWtS>>ؚwm2y%kW/m[)[u{rˆ.[.ގ+u/[/ݫakLx%?j+=^嬏t^.Ĭs[,DSu1^/R3ّI-@_X{qk.,^-HYվ'w(Λ׼Z|?4:?AWoXFÕ_SOEtGů ة'wWό7|Dsg[)U22?ɶ{{Ɵ[;%oe<줥m-zQ=֋J)~E;ʦZ朦OYah kjEƷK^ZCφ bE̽V8sM҆˭'_Fs{J$H#ZCd\ebM"ZbCm,~ٮ.o5OH3yҜod{Ǿo3q~r-r.\oX6/ьR=6ITDI K SIDn=8M75r`&&x׋;Wc B)G3Ɩ5*wI| tMC;: {f[_p:pt{^Q)doUnWO9u>fE:^]c{L& &TSv**FǦo;|;v͛/D'T^v 2 ަl4\?"cn>KXBùOggS@DӬt!: hj]~ۍΤ  dD\iA| xnorI"TJ$D. W/xlkoj-~[ܜXhvM.añ?pE0_~ߡ_Û%ew~v5Fϭ.غHf6)}YpGxݻ9NIZ2qQ #N%GZ m_G"Wh%Kt{*REE,^j[sMR V?bщ9 z*%/ M󟃮'-ۯK,+TA$?{:J{HJiwԙ/Y{?Fޞ=[,t٧;1~}}..nwª/[/bwҒpuJļߧ~w4bM{m̔T晫,%~c%y52iH z?ޮt#FCp8?@Xg!ZKה1.Lk Q7I]8}:bBsbjxw?8Sx!닩h*>5ٿ̩B#0ÿQ~,yjH_ۂ=iAM$F۠߯rrrXsz>3m:Z>}]ccqf*}y#m;˶MM@~ o_3 ?W5[,w $o_,uO;>EFz_h$WM\I{&9|Wm8r61vRzZ?Tze/cI[Y{3V' 1$^lu{>7+tm(?\o)JD$5AtVt~4x{YS{[h{پ{یl}f<(v9vt^cT3'%ukh.3\;Xn|[8G%Ms b;$ZE#"ԣlҭU[b#sGB܍hD=ĭt#zT UUY.} ;~5,1e=9/Ƈ՘T6O&?@>mwܞ׾s_Dq5]{_rgh|~gTud,k܂pŎo'㢇OQ"P*}(FciV0]G[ݸHx3U4*cM*I_X ܔFth/ώ'cyA~Bg'bo}iƑ4 |<~Mꎪp63 /&ٌFn~GYvʫ$? !nOG/Oo΋Yrs88|Y5r17Ҟm/`<,z6Z }^kg8 *=#.\~v{CmЛ-L>u!!Ń9!mӷ_SP2oQ\~㿿le=#ͶB;<( veT`wfDE^>#-br~gVы1ikilsAS^u7k5{7btI/,yO?,0-bhsn; | _ \B~H3]m=k}.g@7sNj󳱑s^s<\sG;!N]PI\jMK/&~YU6?Ì׋UDC+Űx~^?3޶9,"X ڎ79CxA*rrL*s3*>^>gE=qY smb@l+ y,pYob69/.,zoSuXUQA+}8A/;6^mkn bjoo.ùߡwvlw:}>ߧmmgQ{&j/!;X@e⽤s?vטKqЦ lҭdUӶJ?_֝gyf1B^e#~~j@#Ynr%!|w+h揣VLqx'B[c{n{u+Ǵ%/|:X~<3v:<͢OFZbC|/}CZ[W(NN! ;'[TL"$.>fk_o3Fmu ^Զ4H#KZg'.pIGr`͞7YS2ʎ@q>L/#Eh31 YMAË}9u5<:l$,!ݙ$6q1]/&v7p7<٫^n>X$63={pY{nr]z_e~7e `u| ٷ6qjٷ(q6?.*h-HIRH}€TBd/TR֮oE"(#kòWZie4f+Vil0G׈W52r` 5K_v~.?[ ` ^lA܍p~qWqI-c}Wmԍ{z`}t{{hW/7z01|~?z}Uz`{2LyMn=coBnGۜͷ֞YU̍Z$Bf\ (积1}jc}_D\zkm z_ 癆eE}}{ }$T() ]ߞ?VIڿԽ4m8@Kt@ <ޏ-ikqy>\)8f 0%AHak=s/>_8>F,{ٕ?rГo/%ۏv/=fnF`Iј/Gl{GmI(Oc׳eޯ1U¨2!pL|αZؤ/`f7"yj֢֜.NWEr$#c{}YBL3QƅSmd h,>n_{Vٍpm7]݉=vM(?}woų-z[Zع{YFxU 27ЮPn3V#u\ `ZͧvoZ߯S׺&~ wFqi2h&aۆe}\9#[r7`nR'͌)iVOMB SɺޘNilY %2i1! ,:041sK^_ǃ4pe֟i(bStV0HH$v0[+Y$P\ |pFm.NyqV\>/ხy[嚏\s"]O}R@xw箿c5mh6雘SiٮM%Јn;rLuA%gيz$qCMrW^w*Iqamє:SM(<T{vN>Oߕ# HOggS@Ӭtr"3021>B'5,p! \=e]EzneUJMͿv/g3HKU qddF V-_nlK23c[%b '\;蛬;OR%@flBW m/g=OHJl|OlNo}}XZc$}KDžVTyoa r-(7y/ c|cC??ZޑUnKol{Ъҷ7} 7{=Xg,{&ré_?ݺxsOCzEz״q^:{_ZKN믖 fqf^֖C B#'u_m<=ޫs^^eLJ0VG/nysy9odN}6bmX{/̻Ematx\u?v9_flos\|\*[~XE5n.52+\@[y9ۗv~n~u9cEҦg璾$ޛןcוYt9tG2I?LK ̈ `! pړbNrxC7uvx-ߤDAD?Ly|f\2&ٕh?[)|;ÚP=kc?\kޔzX'~]ʇzQӇ2pt6f]Do;.iw)%n_ k4Kl]h&<;T٦bTy= Uױ0gKh yJĢKV 64Eə dAD2bP h qcyCUUA?+~[v& GmV;K\s.;>.ٯGީVt*u;u&;\ͮׄ]FK_6UKU%UWޱ,L!;B[PJJGEs (\(-W;W5H&ǯp c]sÙ)J$8zaw>[4!~/;v}冑O~_rp$h5I?;נSh}%Gnޏi,]it#.5h^s,[w:U~fxV\de6k"˿uol3D" Xof)졷+˪!o/BI&s} (m2 @ ,^ΟNvL>#Ɯ߼qX+>UӋm5k]+ y{Z w2M[>w7WWn]žL"/K9]\/ {o&aWW6d*k_卪HS%C sNߖo%KEcJ_S^ڎrȫ65LDs3 `l^ujj[bts3H5RL#ZSA"qG{ژvm>]_;Ǘ}}̿wٟq<\>Wtn7v飞ܢ߫.K4=4H G.8 |>^? ť\o?羚x1y^{!cuֆʫB@Np$kx[K^Cgho_=iΏlwmCκ80g\WfH\{}Λ]{ߓ]Pwj&>.hlZ, PlЉ/*||/]_O,>ܰ ܉aJWoGGΰ &X d~<;zɶົϣhI[⣗gݎq5yFDA3tG0_y4 ǻ9ݫ܊.vmfpؾs[?]{uлy>]QkE".rj'rL sv )EwVU3:ýg6k- m:r>{vd;Yٝ.yꄰzkKQd8  ^ `ei}9:c+4!TJ ̾F˻]{j=|\z] Oo?S \t v>g/oSϯX4 fI@Oܗ3LMFb-qq\\$ RN:d oA#l@J"̢OuKM{mnv /)-]3rDW 9:c_ &eiL5j?~UfCg.Q'A5 %Acd_382d~w~,'@H4Hp vzcËqhXNB汻/3EwUŝ˳,(񾽿?f> xƾ,yn?9MIɭ/%:lQ=E@z{AIK>!&?*]q0QojX>ߌ|ukFʴS+>C'"3w통j+  3!m\((y&OQ$c4p{͝:7pxPO"q?'&xqZKێ: `0;.y_ͲF1oǺ^1J.\t3 Dz{]S7QzοWrUtI̿y:Ǥ< &>${#e35́J +RԂ !,ݪH:awuɃoau]\Q!cV 8E2/fZsSAC2z\؊P/H*AL>9hx_pP{{nc߆Cwk{ͺ|IuwG/̥k`fN:z.̡<"^ery uhܾ kv>/P,n25 qJiʅ~K-4y*LPXy؉{0_IKs$pd8dӼ ;^_v1o5p}[s6.v} H\ w}|Fv8[,m%|R"*w4vW7p,uu\-~x4GŅ:G\Z||>uY.3|UmDkSiHI>QZEh jq:߮&xpLٔױq}_K"l|TM::85\01 h^,>?Ne5ܽ.[nlx0\!IB|^fPc[h~W?1OB/gBjm5Хnw..%nx{#gm5|+vr9[r1S/;tA. ̝Mz+h"y4 ,qomo8Fެo>ɑЉA>? ]wրĤZ67h~s9?l턝Ǘr0n? %5cNgy2_ {IMDؽlҬ?n+CΓ=0,&T{szg+6T:}ݱ~Yv']U|z˹xwfTLݵƊ4~ׯVAoǂxK"`rږ|[{^}yƙ7G|!4^O6ϟ~pFA{v#{~y{ɏD;Ɯ]m{2/εG^s=Jq4ۗꬕCmG:A2ľ~ -ׯ=k֫{!2!Y+%.MM}>ƪ y5 g 0p `L^]?(%]$#'s3~UlAxv6Xɲ3DGZ/6RhA2-u@d<W.2| `ls`Q(zySm[?A+Sż>;!4k.>Sؐ&u 1ȝw$VM*M&R=ӽK7[L7hɘqO_[/#٫;/1zc@*r~ 2h_,k.'ӂia͸XA f>U?cX"t~s<0,=y~0k->}?\o9иy 7́9i̋ ]K@1O~M(pMZve^RLWB#oߜt.zf$G 9J,ON'zkצt0iT? %~Zt Ŝ çN_Hpy9u77(UAMb/h{RKi p~+y˕/Yǵ|ÈSnkC|Ŵvm?yҎeO^9%v<Ǟg& z܉+ʕʹJN:$J'/d#E7; *U .QG- ETSQ#M#e>@id*=_llJ3e ,;tz爈> pdmo97匸yyyqp1|g&oqmf۹|j\}ޏ潒\~}X.ͪsocsd2EEGw}tm6s-N1mS,*̫^.Y:7.\o+- 3*m=kiHpݡ%,Š`2xw*=P`luJk(ӟmJjp UA"? `뾋;ii+Fؽ&Gw^_gѼ;6o~{ Ρh=H> BӦ\~.Av9C4'?_5͠}H&S5'9!]>*FKH>єNjs[\u-x@ ?^XRUNE5u3c,Cw^xz7Oo~Gz4 x6}|߿M ׷w˝y/sl ˜uYs>~ L7=44s!MӠ5Wck6Lϛ<0`(XHplmms-1.1.3/data/samples/effects/stop01.ogg000066400000000000000000000243711247673406200203260ustar00rootroot00000000000000OggSpFtWN'VvorbisDOggSpFt7-vorbisXiph.Org libVorbis I 20040629vorbis!BCVcT)FRJs1FbJBHsS9לk SP)RRic)RKI%t:'c[I֘kA RL)ĔRBS)ŔRJB%t:SJ(AsctJ$dLBH)JSNBH5R)sRRjA B АU@ P2((#9cI pIɱ$K,KDQU}6UUu]u]u 4d@H d Y F(BCVb(9&|sf9h*tp"In*s9's8srf1h&sf)h&sAks9qFsAj6s9j.s"Im.s9s9sspN8sZnBs>{sB8s9s9sАUA6q HEiȤݣ$h r GR TI) 4d!RH!RH!R!b) *2,2,2밳:0C KMXckZiJ)RJ) YdAF!R!r)BCV*f"1hRTI1J5~nSo^U,[ޥ|ë46Tԯy_,,֓ݼelvI|~nStsݤD&~08APqCf6ݽF7t\\$mr>?*l+q@<0Яv~Dq"֓v֓"ZDLkwy|=GkuEHDC齓咽ojgDBb}b<I$o_G晧X^/G$d|J1(/{Sc면  "H]Ľw;Vy8m\㫪`|UОIIA,a*_`ig]ֺs+CܴIir>C6R4OS~:Z-d 1XMݰ{]Q:*ڢ-HIQ)))cq&~kOԓHԓH+L"Ia,b6m{>8/濸qΔCZ] R?wrz?IͧwrzLSDObDbLŢcmcc\mrq et.O)b)嫑zCuwl^t8\֓,_I |P bknO{Q4+xNhBf)FtK7;v,Q%}>edM@NMygGH_*1Cӱu]d-~-=h(d`@!HnmrzML|8S<:T)`Y˿#o\Γ)747۔^U<HtËYA]νں۹0Ĉ(κSdqJ9DˈϗhZApPa4F"a_KRL+VwJ_iQtE w]p8O8>֋ >[BiD"!xcֿ*7\+&^ Th$M{{kwrzordׅdׅ(cX$J<߽!{Nr'F\绥wK& 1༛{7a[: ?z=\w&jO͏ÿ͏Ik Tٹ~{+Z0t4)dp] d뷁D ؒ eϓϹaWGLTVک)+e  +7,j(Lz0~7u}6.|*o$H`AvcL}ҩcLOd~k# 7> D`9F P*'7? I~Rl fY ɁOJ b2GbˆJnKL5 ^TvI~ MeE  @-DMh MCf2 yj8GҀ97_;'ǚ>= oE׎ȅzjR~ۘWhpFB8m!SD Z%0r4:DLwW14WFf0bgϮmM͕yV4:4&Kϯ"7 SRx 8=&f?4J]UpK9f捽H ocwi6R|%]OD1 sh`; E4 $dR<`dU;Lsx?ގ·߬!9,r wg*ֈf@\~:O-L>kp:O-Lkma&B$BD H@<MHEF6/%3RiA4pWElXǹiODxz|ϊw-j۱aY=~fWIZ~GkMv `Lj %HH+ hsY/fdh{~e4ΟgW2B}{N_ϡ!kIRc{*"J`KϘW%g+ x v#IEr$sF:d4,<WnިSG&>n1(P^[ 6P[ 6e2" 62 ͗:v0NcaݴS;jwYssЖ$ !^+_ZM8@i5+`N@ I3Jrfd3*rrӤIdCCcYSԫDa $e>;_.+`RZ6"$y$9/܊4$ uetV 3#+JBJ_2 `(3a" V$ "X1@72 hzF$uN $H^TJY ؀Ӑ ""@h&mDmM% ##'6ܿ+32v (oXPP1PYTG})6G}+68LhB"HD9|IR"4/i^6䏤sLC3L[2f~lߦ+v X,* * H$kB ؁OS 8HDDHDƀQF+Bאfd4mI,izԐ̟f i(CV+ csd7\0PHDp)(Dp~oGK? 8 "BB$'_N&!RINnN$?_Bjũia| _7ůԀnAaP ,,DP``q-^|w6P|/w6  *E,_6_6"!"PaB_6,_6  P\PH,_6,_6 /0p  ,_6_6 aE``,_6_6*lmms-1.1.3/data/samples/effects/warp01.ogg000066400000000000000000000321171247673406200203070ustar00rootroot00000000000000OggS'& FvorbisDOggS'&A-vorbisXiph.Org libVorbis I 20040629vorbis!BCVcT)FRJs1FbJBHsS9לk SP)RRic)RKI%t:'c[I֘kA RL)ĔRBS)ŔRJB%t:SJ(AsctJ$dLBH)JSNBH5R)sRRjA B АU@ P2((#9cI pIɱ$K,KDQU}6UUu]u]u 4d@H d Y F(BCVb(9&|sf9h*tp"In*s9's8srf1h&sf)h&sAks9qFsAj6s9j.s"Im.s9s9sspN8sZnBs>{sB8s9s9sАUA6q HEiȤݣ$h r GR TI) 4d!RH!RH!R!b) *2,2,2밳:0C KMXckZiJ)RJ) YdAF!R!r)BCV#Kߦ}v3*1$;劸 FWQqAb*4id; OܼsYah 'Q4e&aYM~VtI(uİdw枛 )3JLGJK{sCiQ3՛ᷧ1c<7^"g@Ʈp*I R51 |l |lV c;V2yylF4/'_ ё4<޽O^j7CLv66čo+v%oR9f>/nq mqӧt^g,5VT5:ϤPP3BMRiAic UGJx5UGJx5.InHU?|r"inmVH$4ǿAL򀵷zy05tB+;GoYWD M3 EG}itx/n eؽ%hQ \ 2LjɵVFD3kv PCPf?4' Ѣ&0'#lN CQCPdN+SR|Xyҥ\kK?r-%y#;T_s\;iuO#9 7϶; 8QZ )DS0^w6J5vo =g #<dReBhdӌ) inҴHK&A0#ON0o8{XX?N"6n[dӝná""γ7Gw* eՠ!9h(u8F2aњR4k`ZIdX"%1>ɵ%v@$ז$~zN2c |I3"_Dddi^V4#7BHBlwB~۞p[J,ћʳnƤ?|ݗQ\Y$4_",̱oطw16? ,KGU Z|"Ry% -5PiJ:Zj"59m/lܜܤid3ffDf$sl44o^;t|^I] wX4U'c&~=<5C:n)U@y&w=ǶEԧv'I %V;kݧR~2;xY|2;xYβr6˶4Mͦ4K"ADI.rs>ӛ?g; egs3[L!lnhgJ3*kRnK5Rt1 dX?\!l 0, v3-6en&EULϟ4"&Ӽ4BɟF6Is32r32Q*&Pw_gc3n)F|4t7em4g?#wuyP3sCLaX Y4/sF!1[#a(VP5tADk C,!3V99$9yIFmnF|23rrf!M1tΐ؉æINל[!/DxR;߿\ٞNv?c81Pݰ&7z)սF3aKtF%.'%iF9i 5M,Is0Ic9 lJHBFHsS4'taa04r*va9NSc~Pz!Y3Tޝ:qە{x3uHװMB#DdVeAp 1 )qZ %A2vY!cGoz@4|Y~I$i4#ii*ids"A1hצc)g^~j2 ^bIC|cInݵS^ճ.iIҝEצt+YߛTؽ/Mot_ʿN|aѸZ`\JrPBlUXf%NRJ+rϬLӹB!|VvZh0ˈ~Ҹ5-~Zjsu bˀKvuΨ֙ULGߙULG/3Ef#YeTDu-SQQv101ͩ| czbВ?vgkjV$ȍ'\Zql_}8(16O˗M'Pݐ_ʶV|tO5=j}յX3N{,C I 4M5nD4̮6~6ֆLR8сEH|k>W(24M=ynAx*W:.ْ$O2^5 e$)@ |ͻ{0#oy O,}480/LOR%sxŸaeɨ\%I$&O,8=ӏRR KE.w!LX Ձ# 4ҁ<#?<$+2 cqK_+1G)J{/ChHL7;_m!KdwA%8Dm^PAӶOc%b5Tд-*oГ؛d#ψ~Y%'#mF|IIf5MDIVI9 )|vSGXĤj>^el>MSYb<6cQlß5\*?S%/f[ՔTNjR4@v<ᷤx~՜˚Sr&V*dW+YdϲyS4i2[ZƀLninNdhƄFF6АL^]gU|荱yXmY nځ <͜?tܖ;^poC.e^t__[fO`~Ízs-r#j n]i5І2P?ljhAv^ݟ2BK&˟~D@4 OMEIf^'HGb#]]QiXR*ǮҊCfژrdzof2ݬ?5Z* i-C2ej OggS'&,/&#%#%+,Ľ($J>P0?Oi?LINNnn^I#i65KIlg=WDNf@ΰ%y;l>=Q(N;w^^'l8<_[L L ܛǦU^+I7X.?>_}$4?7%Ə"' yX{)KxRK$J v4Mssb4/'3ٜed#I44"mAQCFPr{oٽ4'%(57R#0O21v~99Bnì]leߚ)ךǒ7\h 8W7>EQ74;+K0IE^(g:Cbj~;IHJä*E1!f\1Ӱ9 &qRq3ϵ=tzQ6~ٽw>|c7onڻ]Y7*sXEĤV ULFUKto>%O֙doctXRj;{Q=%Ѻ$Ө8/TD1 u@2i͕]-Vi캙C]$@ DZ|!a>Un`횟mی4epp8. Ak>T~A۟V-П މUG3iM"ⵋW ?Sdffs44eҌ4mFf1$6"3Q=ʾN=uHۊEYBc\%8 oMMNMrӴ#,-r3"#1;De1' >Zo< ݆uܜd#BdQ Z67Ȕny%;Y}T֎x~§SڥsNKse`^3eE .[ƈA#Ӹ$d0#|a'."CK!_QS+/8Я~3@0QI|J]IPtͮ{ zߦ1ySffeɭ̗S)f>LfJo<9)k׋gj?\+" XCj Znxˁ"lש͚v̕.7\p V۟n cv9޾ $HO7^Dhsѫ353Ϝ2wx|kN}'v;M8LX,%*I4,.ޞ1٨5Hd<%'cvy-Źgw$<(xӺտL}-jOw7ؗR0Rf]rId#,PԘ.廀Q_TPvS,ȁ9-JԬʞ<(iuicÅX<}\ҐLf14J)DbslMr<> VV̹Sìhhl9ҶJQ4p1^;[A|O :> ZomkVƾp^G\ި&@Gm& <K/Xq|6*,W}ш۹@@haF*$r-q|YArdSX~tB ^9RmyZ<6Yj1bXVn̜o-C6w2s!VucO|.+zjr#$6jvs.ήO9O>/sVOnmT/zylx=!"I-\úHj؆zm8K'ӿ5zNLsC1nO6ueb[yJp#w>BJei[ǁiq%ȹ(FxިUc| D Z5Հ: ^E gR_XOt$w_|/_-Ƥ#9 =1$[8Yt{ew\3@G=3" Ioo);9Xwگm?_nHUڭQָ#4 N@rosRr- IZ)`VJ.av\UαM>Z?N!; Sgmĺ]uSi7jlRtvZQЭ)ڐ4|1޻VUʯ\q6r3srsijG wj k <=T! >$Ohn*L fo0^SVuQSʺ.^nԛK-ݫTD.}v4O1)~TZbY -^S;ղJ@x˿YXiQG8fF٪C+t_=~橯 toRrXEL5#*c%> qA ~@w]NHJ)7swS%YEA) CHS9M~ȿvFbԼ u%1I9c^m|0KIJ,6Y)Uz\ݜ|nbM38?xx1)/Mͥ\{yڟe)v=}ڑo33s9mUQ%(L`ͮu1bc>{S纊Ьzqׂ=幩oҸx_-ky[S">{KݨSs i\;gn+<C_~xx;y`e%~ Li0| yf;0O c:K"a>b ?>vǂYM $o[%N/е3۫,!how~}Tp>amNx/q0y>ٝM{Ժթ_w67kUOêe7߿2a`6OOչg'Oٗ3R^g5=|[-rl3D X+ Xȸuʒ5ޔ%D-Xc/"POL$=g[vsը3k W/ߞ3vw}W#U'Iˉo߽S)g&78ѨabOEO aUZBxhCݛ:Rm0vB$=(W8KU beA@K^bF! );d_6ūʊ?jKFw}W>gM1/->w}=ϧUcZMIHչOp9$iaT!mUؙ7D}596YSٔOwoߥKI#*jӎz'wT}uU~5vBP?Y:vS[@P WdNzr쭾-=6Y}/SZs+~$Xb ꐀKp@e53f?'oͧ:Ng &Ol)qeVH8fVEBOggS'&?06EZn W5jÃDy/] O{ ^J#N ΃?O=_^IS[5XRet;5$~XA o, }߮ sy=B-7W7{YuK+C D"Dj HV|帆e1g&87-\oïFnF8׳U>Jޒ+>vOv9 c+w؝(N7 Yr.,h^8{ s7h Z B}i'l,|bn_t:QO,=,1N݋/ƫPvbY7x7sMbP7MY(Ҭ Um)iilmms-1.1.3/data/samples/effects/warp02.ogg000066400000000000000000001153451247673406200203150ustar00rootroot00000000000000OggSC^ :ZvorbisDOggSC^ :D-vorbisXiph.Org libVorbis I 20040629vorbis!BCVcT)FRJs1FbJBHsS9לk SP)RRic)RKI%t:'c[I֘kA RL)ĔRBS)ŔRJB%t:SJ(AsctJ$dLBH)JSNBH5R)sRRjA B АU@ P2((#9cI pIɱ$K,KDQU}6UUu]u]u 4d@H d Y F(BCVb(9&|sf9h*tp"In*s9's8srf1h&sf)h&sAks9qFsAj6s9j.s"Im.s9s9sspN8sZnBs>{sB8s9s9sАUA6q HEiȤݣ$h r GR TI) 4d!RH!RH!R!b) *2,2,2밳:0C KMXckZiJ)RJ) YdAF!R!r)BCVlN>Ddj5 IA7# /ߕ%bQ2寣I'6UcIEe]MaDAn˽G@;h.g# &Pp  &MڡGur̼P,?) qgOm_ur \g>įp(,W{"  D "eƣҢM~irjB}#"/.~U Κõ5>nHPBCn$S~ő~ٵ]Ǹy`/boX{9FnA彏[c}>c7__x^P+}qB?Iϐ5N5ZV ;I{XauRƽ7к;R7v1+V&R(SP{zRv,{ZL-J  %(wNu,rGgB]a fkxfSc]=Ɔza냏˥^w;Zw:aS+?_q:\7|=WW;gBY!,V(+BAGίT),&@-9yplR k"P}y!5viָ_앩Oڸa|M+,IO"pEPnw[@Bh 78"|J&=Y@؝z',\y_tXB;0b:սi{=~So_;RY:ST"ޘd)e 8N\L埝}gބ8a(!q;?ۘwa8ZV (( א(f@FOZm@OJWH'6}sdJyӰA~2g槔~67YwuliS;~*%\Ǧ1% ʎ^5M#WVmk_%? äT7Jm>?;o,݌R<\ׇ/6~mx *UsO @_i#~g N u~MS6=mwY;k/[ czӼNMw44B &aw=T&!xTߕZro8BMt7'p:Tۮ|^Gg,~8ڔ7V1?~mB/c0 3෩̌\8G uxmH<{p[U|u_W%Vׇޭ|÷"(o{Z=~s @^M:}w\aKɹnؿ[zšhPVl'6#L%Nݦ;Jȏ|h,E*Bx/G(eUgv) M«7^K4Duc32*%;pےk9 '*w޿݃i q@U4zTX1[,ww+ r:ʤjv0Jobk2^{clK%n&&ѣ) iSExʟ|=฼0i?Xf)oA{})ػ]ߺd.b#}%:3_F\xjU|3PBa}O=EDmJ/4#]|}>Ni;)s/F0Y5LqtBd;Zb\[mb2 G>/jbJ.?Ξh F-g}oh}~i|7=ڞ.> @9,7$~Rwj3lg9$O{~-lf7+8ZKʏn/I[gx)I\1 !IC%t&~M 7\u4?"gj1H̾T o48,FQ4)WbUw;׋` u*!9 [ZOipI5 Unlfm7:6ܕ #[cejYp*鰂CgI|^bTҵ4ŢTSo-Ջ@!ej1E&}~D ~{n/:vw~6Ep{~{}V}Y8Pv`^n .Y:~}4OKc<¼)1uչ6&v=jAHcSAvA$d N~^V҂G'HJox`C]s;Kh݁ۯ2 @$ zauV73 *A:ޏI=7jؘ)u\5!6v̤w^ȽBTBT 3ֵD"~u\irw-в͏l!u޸yf|ԠG/ *@ w25=TH'to<5^ue8SU<{5k=_v 5lEu=}5$+pR,X, *^E^@p N=ni:Kსa*8-OzqlS}}}$XGߺ ڛwwvmh%Y!TԠeutnvRs:^Io6j9[3aA(dJpJAk-E~IaB1 exFhcZ pzGRg'Z χ TS?ԓҡdՁ_FXD𧫳x&&t$AOXv M fػ-SNvB/eҞLn 1>ҚBS6F׵OFpDCD5el}8Vn%=n.~Z>KU~S_{v?H޿~l>Owl#@ "9>}$ E̘zx˯V]֞̚Y+}GCsjq?V=8m65_%[0^!,E"p]<*^OggSC^ :~?}=-3,,*),'(0/,1-/,21,20,0+,(1)105/4.-11/-2#,,&+.*--3*>b>=!KQfHiVdDSҠ|;_Od~?,a'm:O-Wؽ;?\ ~g3t gyRgvzs6mnjŵ^m j8q7~Z-}?{>A64jRXy RX˚1BފU yсh~L p]8\[}}1ͶycW5_9"xa@ C?_O=e>5e!NǷ{xAVmgLWl2ݠcD#ˆ+ފU؎ü@0fev xCS|Jkfk_iyٌKׂe}{'%}=_ bd@ 2sWFkWFsxz^r43[)Nn)W6xpGO#*"%&AS!D/q{U͉ܼ/ZZ}<{H3NI̒cNpy܈.1vMxZG6n.6qQǾiWNk=ݲHlT5SvX -(.Q)>[U-ik!mؼ~<>\N75C*TUqJ"YW; XU;1Z>W/ BO8UԏCsoAZ>\=7<~0b>,VNvS ||tiic$1vfB[>"z}&]Q#dikC-UIi~x~h9vosd=?YxlS5bh:B (+ T UL0j~ eg!p z ihR~N}~Q[ :r{Ió 7{O+I$n(wu^b-Tc>N_oTR&FEDM\ܤ8|EA@]T ́'{+7PUlK3p:T8gÏdܺ|~Xٛ{_u_)Vϖ鄖 ۦ|cC-7b/!|.tL}kZBo>u?/nf6W~hݴ;CMTP "r;TCU$Qv@o`+sknq hbvpҜK34Ӽ:p|ߥg#?x_}yxۯ|>Ρw'6'M m Frd9牺jgmBФR@yћb3|Жg ʍC%!^T H,_6$Q[^;cjir w?Ko$n!F|W!Yy՚c{zvK[۷7/3ɓ'O^~Ts0FkOwxfJaF3f9_g:dc+\Q=?#27|IV|A?=Jtr'쟾%ՙ=O7_g.DszU{ 2:ep}ZT0|}zx[^ҡ:+bܴ'˷*:Mr*uQ}QXT)ѬFI~6p%=SHy{nnk>9] _Sw'hud5;/7u|qt+TG{ 㓽堚>vGt/r9=|}/\Bݔfl_ro`@/NS/|;.1v8e+| Ow~lZ\.(vm%k4kVnYpɓ'c'rvAa]>S'ZkM=|zVlTL=uwb?K:nopC|ov~b 8f] 0΃ʁw/n=_754DOvW`rGI?;[N6LߝDWOY?XH۵;ݴGw{_6;6ct/,l_^^[N@u^rWoEIӭ糹 dӣ[}wP?Ϧ_: C@JHxbʖE ¿F7L49D=`틟t{pnWΛ^wu_25tg4%J?{\-wz_E0Μt8k۱4s;[U Nzٜb'ŷ~ן):'=iF 7_\o`8-ݒ,BUY;|qTOv r*x18 oz?>d?ʟ:@g2re~;/Uߨ-+<w7|]muK"9_~Sv|9L1]G{|^=u߮}XMQvn~wS$t9s}CMvȩ`i0l>(}=5b%]OggSC^ :ӵ=Y10322,.43*+-)%+1+*111)1+5+324103)2034))/0,(%14)'&,00(+2321&50,1/-3/+4024,*-107*+'(01+)'*&T/Fܤ{|ꠓiKrɾ {3S at ,"FiOe;~7vp4=j5=Z8Hc{.aE^t7=d[7 6?OioOM$p國ll>ϻ \od !O{&C[oG`i q_~;{,..}}:@Nx} _yϲD\j D=T|y_IzJ6[ω'Nvnd'-'Di<8˷ <:e-'v(s+9o~]Pd 7˽p9`eGT|}*dvf;~:=p kgߞro/n'ْ  7,|=9^ <=j73U9#Wq!W7ѤQQ4N;rT۶Cg'+o↑Ю2:DDT_lGӻQ\'7*<[ bGkEܼKI>Dq(ǤOG67pߩ60w|+cd؃/rIRL߾}sdַoV4 /V{h>[wv׃k~icN'ݤ{</zL'_Ǐ8_T8n χEB)Z3,d'p%>{lȷ +}߼yߝf[bXxS. ,S߼Ssѷ~sJpßlO6׃~b ^_CGtc"ziy&&L<߱U_/tb#_mZӍ";{TɟmalO5}LiqVsd'wWJ|냖Wtkadsν c'߽v=XS-ptgm6{n.LmTphǑ>l\4~qO^>]9 y%8oD:;(4/NGjkL/vȩ8To ,z Wk7ǃyɓ74ۋƧ# Aޭɋas%&S`T6d+r}{,o+^0|sڵ3 =3C͜ں'(PB̓ax$? l3i~j~Xȝ>dON]7n.4=tɎ(g ̑ύ-LIݟ|';ɹ99V<ߛ1fz8xTvES@y;ny7rN \L珎9J<ȩp^c< 2Uq/e"L`?1som9 aXv{TzJQ  M{c_]Wwk$I<譵p[7L+I¿׆flW 0avdw: tt{{Z<㳟do<p /-fa8mw7ߥL/8]?F_&cro7Q<k'dAcK{lv6DNՖ晩on I ? ^.u~0Xq'qÏ\,v8)dO|2JO ~mcxhs1evhs,=k^5>ɿEp=~]V{zc4Q?gctJWH^MGխnr> 1}|7{R<ً5փ 7Bc^yhȬTӃ}; m^~t?g;X׻k>Zy3st|$/ΰk8\g 8/J^8~1kh=ȩ`ƀVx"_sPSW?_W~sw}7sOIymrnES|rzo9]˹9$,ٳD8؀ xdUx {V[_l8X^l?F<Ǜ|/r* {Niogc7}3W- n]گ}N4y͔2ϿeOo}.i|+A?_3t$j>nzٲ~f}x7_փ lL_y+ƞl>-v ; qFLߕ+1׃7 lEϹ$>o'oNf?,4ǣt ccߧqaʍLtdipӖvw?v?bc]D׳U?ۖSANh8эz.8F>BM<\/"rZk:eY{T%Ϟms~xo&%M"A5${:5,zN%91}쬸w7M\╡޻{Ar32Tv6_Nx9QD߉^{sS^aZYN_-|;^Ѵ;wLNyEDȫ?ٞAN1ϸc/9'e>^k=mw$װO]/Ͽ]y쳷r*\\ G@䷇?q D!?K CDt#iKWR?v)׃M2Lߏ= r*`sfۋ shKS0$v%wq[@T?S;9W721DD 埌T0s7 t֖ul&n/n픽w r* 36Mn[U= s(<M4>@sz}ze}wyg6Tx|׺ `;Hg }K۾W+Z9׹C篇?wCɒhX?~sgyib\a̜,=XAݓx͙͙͙|4ßvc .:koZ.QVMiyqsw-Lӏ6)X9ENN,B2qɣY <#vWZV׆fU};r7eˇhs3fZN;'o<|`鞞9 O>7 6ٳ*nY S0eE`3\^b{6 7nvlb}4ucGqL+)9 `on$x(ÏW~ heE+b%D9r,<6O};bQ׋?G*-ƁfjK/vk-֖F*,a7ݍ_덇{ǟGj9߉4-,۩;nϧ_|8@ND.xEwVȠgΪQRk_F_ *c.ioNZ~gmxboDB$ⓝC~]mH/օcZ y|7 ULX^^Y.|MІ}=9y;dToo|.i? gk&^Z?r>WdE TᏟGN>P 9|S* g`ϳ7~ϔYjrnL4=k rD3j4s~Fv7m݃ , /ϫ47{>wuǚ+x4aU`HA+㷧7t[ˇrx f' e?Q k!4c7{ `s oMKЏ%I{: r* 8{__c40( hc֬4| }exϲc*{ <W/x<>_k)2v?y-nKl6T7'}xO7h}ӥKצf ŢLϻc8@xW߱h/4r#7wUwwW\>upn}pF#KۿzJ2BՖOlD.OU?r*HYN!X4LȕAN>hzwGe5@*7oi33ǹ ACY@'Aa Oo'ڃfm 3.{rf̖9$$+'Ο34+)Ȕ ]nׯ |ƃ`(ʭܳϟaޣM>$uArAlSOTt^+7FㆿF%45=d#$tLXꫫO7ua{3׹s)\'h?6#Rz,4sn9zß\gT'=Z 3: ײ~DۿU+LTݏí ȳu1Q^c۵]R*Ugٺ+xSC\fƗ;@NAl pe 3V.G"le ?qYG{7CNAd;웝?? -rE\=C_NOeS@@?o`ND'l94]=UPD׼bnt~Qr*v.z$ڃP M>τaYc=PK(\/s?Q5<쀖fћS,O߇{x4P%ޱϡz[tvAO7 ,Gsٲ~Ϸ9vݖvw L|yN <0KO?8?Pvd%XgS~>$SJ Z~!pROuVS\Zx4k8AN;=9#dmfhEPz(K\ ٛkjw:#T0kodcc<]EWOϜ^/a" Oߝ}9ܱ<1'Zݛm|iO6?Tލ\¯Tu?1o9fv[1m4/8ANsqppp^%ݘyWʭI>cǚu 1^X~_VS[o}U0:4\F|Kan2<:QkOL:k< [?Bփ+C€3 Iyx,s8mh`1m/ d{qX~˩8L'i[\>ŝ׿gJl珳Q7iޝjg29V,dow~CNA2#>0Um:.QYblMs  [3b%.I\6QT-sOS{*L'>s<난 }`jzvC՜Oq҉W= כwɾ==HtgJ-k^oh7oo}~ϑ{<]oXyß[JEiqG)$g<ȩipql_,ER:[&~ߡu OggS2C^ : ӡD++)36))*-*87*(+./1(6,,+*33*+80*/5'.+)&.306"47-)'61'+74+&*61-k^ ~>$[p𶅆6}݂*Z^L'@/P~&]0F"?W3؃| >=1.Cn"Z#6{Y ~bt6?6dYy"̓NbNNRQDAR\/pچ10xw7NN79Ǭs/;JT珒ANXtV G C{ԗHU\PD'> 0hP.*LHd'do7j җ6-Rik.we\V\#Mj'pRgX?g?`_"2|*\K4'FzS϶'dIldWqku;]\>0ߜu-Y'Z6/`kZV4,Ǔס|')<,=a霦߾'Ok RO mԙ r*C .>!͝:;ۇBc^FD/!koa9ه͡k;ys$ӸZ./ߍ  C%-(8z1sQnׯTG)ӈ/ː;c>\gy\7'Lᕠ~ă\>v'Gc}ߤ޿Fb_š=?{7O?\o%7NPR;x^G3-liJdo+1.ȩ 37=eKx t_$ \owXCꂜ7s$\oO;c4  IsmN \c!p^|Z;ZNEq8A/6pFlgj;@X;xYksݤĥ[i9'o߾} ɍRmgo{F6d1E]Mk\[wvk.?{W/vw, @ P#-Jk^OGv"影,Z/H;wi{W/7g5y)QAm^m;!U1`Aj룹ӧAN `q([ay[!N#V x0\>\@g }T|+/LtL52ՙ93 V@3`o?umnf To{}}M9 > N/o@Q \&Ճ ُvd珳O>k!w6PyWK7Ulsk4^ [=8+R5si zBD:d;ds܋ dKuA @(6XdAryMʧ.PQ}|ڻ룇,lEh.'W^{u/E>>Yp۟c=EP X/N^;әio>[\P/:yU$Y<nU P.Nہ5VwDjR?*GPZzpdSa⒙sH_sx Iߑ{n8@'۰740m>+gE#k[O4 8cظ"#7^խ[A/7hl^z, !/K''<P? ѲAƀ"W@&i>Lە@ÿ97OxxLÍM^[mIjLgd/>h:/ <N*I=2 ]_~}穻doK*<ݡxm]\bo5g/<~*M篳ΟǷcYH>ugBQH !Bz{ 蓋/nݿXN2#3wdG4엗f&=$_ӶijW%8X}hdm8tn&~-F5][c rK*R)H@EJ(nߣE.YrLb/υ.UQ/ASyN>8(qg4^^ 6=Z4zzWϞ<~Wg4^^>Ov I=Id$ؼ'?ep5 %<؟;[]u:.ׯ4[7,//o jd&N*Kk/ x+Y;L:pU=*5瑁caixvg3\z Ǭ.f7Gt7XUn_='8?}s?޷_ey8ܝy%@kG5d衼BQ{NΖMG o QJ|nE2HR:EEaqQymS@%?Mw"+We.ZoKgD`lu֛ӑ޿_eO2ϫ=O$h?7BW֟W Q o YWEp>^q>WDZ=9 z#~*_t}QKsYW%@?O)X?۔_!^Mm;i3Ae{H?ϕ(!P]]8{gjSHF[NJ_~;{/um%7]2}Ʉ#/|lv~kb UU)||Y5m4AWo4Ѓo/oh4)\">ϯF_f/T}=u.;fMr?tngNfv8f'_'BC_a޼]aΞnNѾ]7Q?=~7/7r x?]Kz˿״?[bnc,:` ?>?Nю%bǂ .^/KQ%sȤ vy}dw c- u?nPɛjF-ԣWZy߻᳿jER<(O#}.>)߿_D^;Ev#߹T47gW)R}b}?o6pS]ƨT:)-^pD5H%(≲{G&./Ϻ =,W_Ds>#1C$'/O7:ɖ $]x]#ո%~aYo_eJTY97X7{Uw58Av^2x5_n?H|ƪntgsm7\EkX/!_>}poZMyLqb)D﷪LgpzJWe+r;]AO)#OggSC^ :JS6,('(/3)%(52(*.6*),74*)62(+07.'*,06/*+45{y*/_;AP:U~XϜWZ]8_*kKV&MSO3дây[,/Vr>:+7XAv,J /Pw+{OϿɹcC8V.7 /q:m$^vd^~:_cK;5jI+< =A`AFPG6+øYo_}kɓ[Xz߰ɿWw؆G K={-ȃG vO P|ve>Z0dxX\ZײK@/h-:2j49I$.m|ӧO"즜+ Td⊽Ŕ0 VH `v ]OZh>ѓH?&@\:#>:n:vcӑKiIiOsbN|3)V> ÷vHC;}0oqqov[aT&SM({QJ,'@:@P>xY}R?0g̯^*/X^ƞ槵s_;CK܇"|Acx_t@Uwb:Zae/ v~WpUnk̃a}oM+4~/b?ZFrfD;wkDΛ^.R w?j|4"aN1={@ox^ly;^F"8a/i|[ZO#4Hox>Mo\nfBtz|F6Çr$]C\;$R./`4+/s|u+G`ݳ? 䯀vOTS>†sn*Ï]={w/t? OvyK$mH T^*{8@+vefbY;}j)}btP7m7m; Lo75~r8@N?_8pe#׿I|_$V+":ߢ(h]ψS/p`ӑ]|wiDF/&g>|  @zHm; gM7.mk6%:`3c z~O+/qmJE U(E.. v} ;g:~+ms-IWJ@ǿ~۷yȱooVt# I'Q/.sʶÖm=vdx/c֓p>Z9KeXl'w 7L$CH[jLwj5x}mjX( MeDdT\4ò@^l3 c.}V m'_!*r*I19|KwclYڿm8Y;Ȁ1-,KᕢVN=p=`y6 #+)ocC#yCxxyx7nnQ^J;@;}@2Oًˋ~͜lE?Χrٯ9E˿;݃xg},ʵA3F(G+z݋ Hh8Er4$b``<Ug_cNڷ]4?FLgnܘşNk"S0\Εҕ]L uHB+Ss~ ^_WxFv]_ :^\||[שT1'S%>]-޿k.ltnglΛ_~;Ix[jFn}ޤgWP{$Rt hiĻCe/ХR9r*J|<Ҽ<F כ^4m??h|}gx囅g|h@j[,_u\|} .Gq1#Y4 p¿k?/T}-/ g]Z|ޠ9E{dkXJ߱bqnY ח?ϗ}D[?۸pM H _gxUd'[r''z/˟~?N#֧K+}? Kjj")( I+B6~اFzۣsq]s+y;vPH@z5yҴ 2X/Lߺ;EiǭvNVt~o۶+_()kx?7UgJacT޽_ Pǃ 2O|!<}?n(zm? T=+s ?+}ãywx,`?<k9փ^W7t0.~vٹ6Xy['Vo=T_k 9=F]f9{cX*ݱDlݖnl67o\˯wqe ڥ$Ix_/K}^빳 s8%o]Trr\ P׽;_Żgm\W DDL'Ohm勇ǣǧã1Gh87ī^q}pbQgC(f/D.> C] Yh1s5v]n+E@&Bpf3J}jj 4а~'G7vyxuPpBCe8\PWaq#E v`voX33s9}mM W h~~Ek<9[n&XH`]{OShUi6A̞ &{m۶ڝ6ԶIju-+?xb[ˤV6}\0qS5/6 ? `i~9_Vl-p+-{D/f=4yxΉ?dԦlV/8h׹ Oo`}߾˰7&Ayg /qGȩ> 8y{xSVyx'0/Ls>ę5o>3~Z.w!v0*+[ x}6nܭuCehDV `:1蟸}e:_MR eoE"r v`=q3RAH{Kgg~^nڽO:{&qws  D`|JrD|H1qBD BBEV)\ipڒ<Ԃ;prRWOGGo|&vynv!ϯ9gġHi0 $@jK;pNfn9iԶn>&I!$ṇKJX*H..$7\o?ANso/{ .AdiQűz\xyia54ݨtsm%DDi4x %NB$,Tdʍѹ $:2s E:с? D?$Ǯ=h7ڞkqm=ޯ{?>9`y=8y yl ٞ$.@ %`TrId^1<:klmnR{_{o`:s{3u}?4۾kD(uFOו۶]9~aX:ŷoߎﺛBRb 70J\ rY@ T_܇עgk0w"=g>hLgwW>e} ^$ߔNg=wZfLl7۱Wu2l2$dn[_[}r/[2Xjiò ztƲ(PCD .4EEPƀTѧ7c{_ &,'OH {{dHgzw~۷v1Pɲ-2UK]Eiv@T 3VJɝEP&_V= $w?*A&u+`/eOO}"^[[o+j\ܶ7<,;C iu6H Lz^;>Ѐ@ȝ/x汻 o+yZϣ;#8 Q@X?3?z k[Be og9dBXG,HkX#b߰ !Up ߫W~jm?ٝ[DF}<ԩ~v/P?dRjǟx^zu:^+ǝn9΁ws~}522qo)IhVJ[a7UﵣoYDr1*cjR+q+VCOD*ܾl$ L%eT~:2_;ܴ v&(='esәCB\luwJ{B-aY֘dV[w|K2 ֨NnCψvݎ8hE<R&pH ۶0'J/$'']HFQGb4Mvhh=)~k 7 =n DĆVőFƁzkKWI?5ERSkp ~ǫ~>'LS5\ kX'8 "?[kXz^h`>FmX3 T}pKyf`ɩ:z^4La>{PU陞o g5<>'Yŷ p Jl[ /=(0U24պuE9w N]&=!^JWgٻ~1M : ߥ(ߌF Y?7 M{Խo,0 ӑ I,?5>˺+-?#\Ld9^8=FhF$߾}-VՎ[OMM@An+툸PV1.\ ?e1{q=(1S?=%"4RH A0iu_H"Z-hu\91/''']mᆙzMOj%Ik\%ą uCbDٱ!ă<_ey x^~ D_= Wr*E$^)~|?Z[JM <Sg'|~M@|SHR/c{mLL_ܣځ8[8{ȕ^) .ȷ6ِQ~;Dkej&S"NrPw PXUY, ,(H`ɽқ+߆gG)"MTw>}υy9hY> @ӾY?;ScUxb, -)FRa%͈%2R$Hח}^5"I.ڨso.%su@~"J!\܏6//΄Wn}Pa OeQD53T=FJ@`!OggS@pC^ : Wag&}~wkiou02(`hjgnmcnhfhd]^\_gc^c_{Z]/R|i{QP.T/.) ˆpB"~T~frŭ0m 7 vPL`U>6K˴$GB7D Jy@%B2֨Gp9mz, } $ӕ[7ùN^`YJ[:un[6wO7 fY-IZ$ȟiӻ QaҤ*Q ,0u+nd" ƈ\7ˋ3w`H'BzgM~ƚ.=,k-=:mG j*9}#]۶mexPZݺ+Iɀ2X(`E,KsєV{K4n74<xpp5{Pɻ7糓6̗[C."I[+v'Ae$J %r+XLSHh́RqAkM76)0.`3"l0?xe-[ j~ЇV?SKw* mgwӁM=;X @η,ggwӁMw;m~EgwӁw/mݳmn6_|v:m79n9N6_BY ~uqzpӖ4R[kKO cB;VO/eWb-`|n懚3 [4 jbT.$ ?|YnG5oRdɵcǚj p  !!aB$ `\N7H̪_| X T.V- T?VeB; 5]2QꕹGWpqʰX D$)ad;m{{XU EE  "ЇVXU&*qn~qU—Oy;wo "!>R:NnٛKˣ%W{ҋ`!""R@`DPw ~+ #:KbjIe'}q65d"!%",I!ؿMqg02v*@DIDTP)}޶n>~6vh8V/VqD#"b6/>.nonr8TG.^l}  Pa` "}?sԕ]~$}Sŭ 5 mN HAߨ >x:~կ^aL?|($*z7e4h"&ޞ@ jwt%% d!1P,/]n^k - A1. (D\.ɽ?kiDro~eU+rC7`! ۟|?4u9tg `P$,I Aɽ<]ZkvWՔӫlѸ+" 0P4O]X hutn'pIHP]ERȝ/H~h+}? vrʸH#"Y!X c8N7fmy \ԫFW}Ɵֻm?T{>_.ZEL&("Q"B`ʗst_#rod 4  ,,ȥ3{7.>n~>ZoU$fDH 4[@S[J|vwuӶ>oLo$ Q~b`QȽ/~_eGvMo}򽍲D2n&! #pPO.K?'Nnw_+% "PeB~X~7v7{֙W1]fP$""BD$V=~opa0,"*\."T|_*/ϭS1ϥj)^%q3V@Y "!h-'n['4uέ'o[͔cnMӧ4r2㟱f 8DHH -jZ[-Sa˝na_+BAY0Ys>tRnv?6/<9'|zJD* y~^=6f<( i*$F* AxcݯhTP 4eDmqynn1<߀sB n}wW]( r\6ݔes/BNu7άB[|;=fc=f;ໃ_|ww??s?skovCs/6b=fucuH\+ϧO[Sٚͤ@6HD 9ehTGKzvz;Zb@aA2H(OggSDC^ : \kȭUSTSXZUOUJC)'())$4>lM]I?".@te둼k@߷!eˡKmqH~?^ @~  o~Ûws|Zޜ..22w]_b_l~ эS See7y_~;u_LV $\:\Rk]OSK$2d}-}n%C7:Lvgb)RW?'tߟ@vZΜv8;c_W+W+~"B:ɛ;~t8v~[Ο7aAI`o[wԒW{#~/~PB a:;ԑ$%yWƶ:"՗cx #D?3`/EVZ"[4rKS9_i)p~@ CJ/w+|%@EBZ %@TٰFg).2ߪ,_)|3 D "Uu@zetF@* ! @W~hA}0,.k=dH#G(f+ɄJuWCO-}-C'OF ^l9f{#"s`,QJNF(J =8(iIWt\XƒnVQܰmbiV 7X(w{Yoknܔˇ.z%UUUtU"Tq(}rS r|柖w?xp@`p@}`XzN贯EkG!F>|V ٰ&tMD| cw_8{@ND.wVӹiNi6cq{flPxOE#tbť'a0DIqb-+L|Do_}P%v2Y٪JjwCRNSF cV%8 tЬxO F8#Բ:]ԝQR/k5x>"˚gheZR3d ӵ5fZDXsnɾۚyU6WqL᎒2[r};l'6^(Jj h2v.pKD`Ya"  OEĴvGhmR灤9CJRjꔨY$GX:U_ JsNΚc N .}_&!@V'oXzՆ1s1&i?>'2pb2pu^H+?J!j#4iz96BDKΙ$x'(e]zX ROXjwy,҃>ߧGOp l].T>bGO,'vd.4NpJJvsRtͶ;gۖi?LK[ >Y`knq&'3aPszmR yK 5t:M$@<FnHШC;Zpu _tA]N#UU^0y0?12$t]%sU TW 2g/Ru׸q2dm'^ӫSdy@e^,-WL#|: Skuf[3 Ê"حXٛ/O%H,˸Mn][uă>~׌NvgΫkqЭZ.yR ]ҜWQ|f&:٫om;[v,D@,~(,\D&Îv5)'?1mdlHz=E! $w]5eQSo=׉?ytΠJ>8=\08*[ @ $dBqmWg:H1muBNA= (+jMښvZyMFS_~2566֨ WPS9^kڵ Ꮾ޼?o[jŕ%½CϞ`UlI`,<OV7o"@%o9KɮV7zauvOuYdsMN ~*2/2I\jd|B꽻},V̺˖IA50DpPEX²~2±*.сjW}q`R?Uv0VP;"O#n=|86Fߠӡ[F>U-U)nТZ3(ԓ9=+~,{"ƍ,7K24׉i~*j-=\NL?;7&L"uoC!x# &Kx&(t@X5%c̪*T.Sy0C>y;ΑZÚZr*cVX?%KĞ(@NJ!=k>"ǿ bS&^x*W{Gf+_LaSR3'nqw 8v#{^õ)7qSa>a`ی@^׿Uܮ_>H& ={zk갩H1(,*h?*GZ/˿z\+VہKwO 8^G F]vWc:,t0TO' HsoЃ0D < qT`JtN)z@(ɣ{:b|称/Ƶbx8K8peBHWS[je" j~v5I-+)*U}5siWoWlWp)5"lBQgPL?R7P!"GeP_(&)x7M9Jh{9oOlp=a s{׮!ymm2YT{1m,kʮQf<-`Mn,7^k.cR֗BG= ȇpE!_gixGi?:M6d@T8s/>;6G!C_rxQ=㩴r%`Edæ_e2IZ@>KJK_VGuocɸ6 0fNc^r=+?e%DGWBůᏩ x=@"O'$(2NH>lJ;,qi]070Tv]mEQ{muk㱮H"[@T j3 CрVEX"X<[[dm/Yr^ L@{Nas~X(>m=%j}ˁݛJxkZ ĥ|| q 5  \p ~anY5 X+JtP`x|quU#^6t7ܦoM`} x$z/_"0À es?` m8C'Wk\ 9@ͣ>􉄾-]Bѧ^S,`d,3&)^JOU%!Di^68׎ 䓚7 `[)PJ'| j0M#k$@LjR? ,h% vyLf(swPCOmŖüwh;Q -g]ijqls&-pkQ;eUϪȨܬ-q.‘*Yg?.vFS)w[Gû1VOk5tes lc ([A态8Y~CS UOggS?fX¿%$,ި{cV ̈́.rϧKl[aǚH@0@T{G}!h%LO$,ۭ4UT< EWK|܍N&o)ǖ/$*BS |Ug ;[BM0`'Z-{0T:?@&B^7({Kf24WT= UY"W_~زni*v5XW 9.BTVVP?jh`; xΓE>a"n:`O `][$ǟYEZy;>W|k_K^/ L]J)@dȀ~{h{i.v3iz! Qu}Kպ^;qDnbu~6$=>DHd~^{tU6ExOv%qU>QGcΈ=rE??F%PdO~|,lx-n{8l 1sυ':JtNBTxQ݉UlvCgrT@ͨY@*#@E;F)sȥәQI`V1O ^)x|wPs0c 0ś kgKΜrq~ `8yi?y5SFvO4f-L|=@<@<K Hnqpm``O@xfl]{jS Zar^ \ >o%j`+\t? @^ `'s fp=@`w?﵂,za.j*~nkvccQ(k%KT2r#t"5S?uw 0*r("Gzt=~Ɣ%Αak|&dEz܁+ϣ`pnu;żdT餺Š I-L@ <}܎1_5~u4bx0 m7֢4h3QWա"(D{ =aHTyn]ۈRfgx$@_)~ІVa1(08^=@<@<UiG+MeHY .l Dm02(ӵΞ1=::7ĿɄQP.%AS@Rnptw(b9%P x X*yn[BͩI mشy.jXFWܢ65}l cH$Y: @0`GM@-%=Tm5WX\/ 7ZoZΎ,@kā4|=0Kta7w<ŠT>' (zft-9 =G~ g z6Td6 #֕g9&: ]p#N_{ D-'XQ`C’0@B@ynV"^حZ%eףhx]#"`>(䑏) ހ4t[?/" |FD ~zjaI%'*vu߰2r" lB]XB,;hM-*jEB EHk&G@Tc0JA<ʺRZڣIg]dO;T`bAY;$ioy,_L;Oiə|WcVggІp"xxx]|u `aB_^U7,(@XTtf1ae*X- ڕ3 =@a<4=L̀C6l.{ ͡o,%@ TD!ţG=XM-0Хz] (q s" @IAT[NyfH JeLO#qw:-ࡿ$*@Zvs|Ae>&ܻqDâ|ոtA!q]@sת"H Yx7f5‰D e 5*x=۳M{buUx?eM8R0` ( 9#GytFQ뒡Ia\ZCn= ?};peHEx"l7<Tt 'Jotm^ qU|*_(E|a z%>6_g <\xe寧l&h(2y H?_}zE%"< h(2;U;5=C=K:]?l|][x__8T`CzD @{@KA/`KI0xl.=^b~Wqm?^'A˕.VK澳<H5hz4H:7'@=@^}DJSlI|~QM' >C p@ ĿB@zμb exe HDhwEnxgzC]*JS2M~q\l$,TěajQBH*Z@bPW4~|t RH( :d :@@-a5T7]|UrlŨ=54MBj7:?%[i*qPRL4yܬ[Ӣ 0,1NO7piOggS@"<+(-+(),䴑cUtL!4u;*Tak/|T_xUw,nmB7Ěc{db,Q2EJp[6ORYk4lLWXZTX E0w)g!>TTŁ8tqqQF!$:Y@\}q¡eH"d/Tl) áq^qKP\PTum\6J[Uxrd4ȿg \$uTX\.U}> v Bc;2=? ڣpkυ:t)@O<- #j[*p/|xO_ذx3e<,~ӹ92{^Bq%D;7Э/W'Q TJ>HG|@=Y&N/ws*[#ͰNՖ^"qGzz/ 0K_:| 0 h^|DzG@ yxm?Uzt9Mf_`I͹  r0Hʵ:-+Bu5 B/5eDlͪ~{>q<ꂛI|eLP<<%YWVt @;mӱu&RݐS<& @0r@ I\tԧtҧ카{5 oNp  E_"o:A7@$09` xby `L (_ы۰)(w ʢx]dxNvpQݷ `H0$ppGu{>il.,@A,xu#h:ݫ 0.k|Э^=h_WlKܲ E--+6iȽ|[ nvr>ucG,TՊQc5JFn u,"uC@d.GI,~yf}UqS$BkF`Uڕp D}!@2؄ !ueYv { T׿ gQS~.Jl舩`/*fIj:A @@4$~]@ZG|UüfQ>xJ*[mkă \49/v۝5QsMǐ$ 7VCZL`?v֟p]yADy}䢎o8U㗈!pak x4J$Wid-Qĉ}ȴp,Q#4q~R.iGoU"PZ5 EhTYJ]]9ſJJ.N-f䎉$Z\5O,3G`m6>Z$vH}P}򀯫8|fa(vS4xVWL1q;qbocwxxa }[/vrz}Mc;ןʈt2h9_iaNWv$e6Gu zs^JtK.((Yr ~ (i^Hy3#;ҹ05nj} ,Y; TP$nwȆ#AdJpHa1nf7,{״ ZW_\yJk6 ,/P[|}`T _ di/xgO.%`OggS~K(%./^y\H2?`2E}*/V,eqtC/np@pC9 !]a@#t3n ysshx?:9ibm [Z: %|O<z |/Z| :=а{'ٰ ۖ-1 FV %aFndr+xA!f%&I*Εh05޺&62#debYv.Y8$}â'(O*~e^f~vkϒv2)XWP4w.3rd-cFs0 p[@ȳK`lwcv!˯qH&O;wD`(R$5 :=v>H@SIR:1 P~D0<زVdAy߬\c2w B ]j/0$ jΥKl;p% ¹p0wl%D#P@-w$.;7Ǯfy9֞mU>MVq 4{:lb&^hO h^l6ChSw|]͚N_J<پ@2NkEQ5,)}ܻhtl5 ]@'.YL]L{@((z4zuH“,( mk÷b84* T%EۿpSqP&{og![oLĜV e"ox x p$CR??4P l(]Uؖ|u_Z5n}x $ ʲ*pGQ͸WsgHn* rs l\W60zUma˶Go~92G ⥞@6?(UJPH}U([d 챵vT>ym8Wjx:-Ix+ Ma? F -|ȫ,yAWWneO6׀pG?t) {~7" ^J6l9@G0!$D * Hy,k0c_ᝥXuHծ`66H@Wj dyrV,srcݽpmitޥgњ`U z''ao 􄏌 @Ŝ g-V>?֒).죬PgK̷Hnxk(_/aaZuXaLdjR6XVLjyĮm83l H7m}j-utH|H5u[,dφ4na3I;3ZWzlaD_a %KTw58K]Y[k~2P Pٛiڿp_wWފYL+vb7gGw<E _3& k Kx=  Bn`KXs@g>( `GӂUyL.pCQdPu>55бic Լ 5 JZg-ͦ+b[ٗ/yKGQx@H'>y";e+vT]ln#yXPt{@Hr%0Xa@MO?_ɸKW]Oחٗ>O |7 x# \sdl Kﵭ1n MorI-7]9z_~ +<`]@K@z ^p7J|)20׽5gݖ*L%qCiL 9nzԢ^H ?at9PҶ0E,@J dh>^%]m˔a3'WcZk~C7 p L0@<.pX}L [ j$"kf.%?{q?aܡfY0;\P&t ~C_YR> nF)֢qFqӌ=k`"+$V Y@U; p(K >$J|a l_^ʝ8>yKs2 `>ķ psF~-|.T|( %rjCxP&k^όqpܬx%+D[%p KY @}scEi.w4Q4痧mY: x] 5@F@ S%x떆zUiPq/HC̑a}L:` Np{UGbMw.!NXz b: K) P" b. wShS(Hj\>% =-:`8XzcmC s+|3w$@4s]_QdrpQ(8r:vרM\Jm94)e-7 _ >p4| D o$Gdp.Qৰs6#wypP\z hD;Lҵ al*1GZoW*~(^E( OT$;?Oea b/ P^Ha}RIH|,RKГjR'@4>DA?o %`d)ή]+~*CM\(#EХ,()ӧlUMx?l W)/t}Pއh~*¶劍x.X h ѳ0i$X 8 @pQwr(V#pYy۰^Tk#zE}=' `J/Z(w+ PxP2p[I<&X `BзY0aZ [|/s\(Ǖl*IiD6E*@ kX?<'r" @7Kxa/yxsāU/Xt @Xgo7a pPXU_k_e{i]O[ft O@/X' L+P}~90OggS }z{rwd^c\MOOEF;8,~7L<vW<13#ăg .; 2qWnWK ,UF_J 1yhٵV,3ۮlE)@Mr$pع<" jڿXd.gd؛`">p|ik\=@hyi&u& -WG8l/CFrsA$]jjM?K%(w'~7LΗ'0{wku9mjRN47.x+?m Q:s` ?^W4U*$>}Q)Q@3GI%XN{|'D&2X 5K@B'~=yR^G̘Ɨ_p =ܿc\HBjB_?=_Gg6m;<;?PWP h`@Q:z-@7xʛ׀QY_سP$$]V˙(ν`C_m>qq~ڬXq!>Q)I=sXx7(&@"`Gx~@kԐI͢"^/ @FFK9ʫ=*$IُE<#3-35ъ*I'@c-`aK l @66L;r )\k-&x5IH0@@l `ފ?_Gl._?x܌mɃל/%t\>Ήl >:DH[ $^D25LՏs˨dp,Ѝ #Ȋ*|R>Aiȳה=PֿHw%,g=P`t(^Ç2ѣ -FtR5'&.™z"ht'$TZQ*xϘ{ S!qH}燋 m[M>DrXg/$q=z (Wi藀;$!:H|\4: .فHWwҏckK>HbY,5l `E,r b$h: W^ezKdq?Nm?3^/jl@`s*[`~+dgТʔ2 I 6Wb[dڪ?h+#2ش؎%0  _|1hh=8yHl%/H@'m$gh-;xRrF3a"QVޗ!>yQ+ 6F@]Ƙꌸn4OVc ;`,P^Y@Ήgd[A~P9o^S( @C`HL~]6oZlLPOggS\iLIST,INFOINAMGill_WindChimesIENGA. Gillsmpl6G^X<lmms-1.1.3/data/samples/instruments/000077500000000000000000000000001247673406200174475ustar00rootroot00000000000000lmms-1.1.3/data/samples/instruments/bassslap01.ogg000066400000000000000000000161761247673406200221310ustar00rootroot00000000000000OggSf.gXgvorbisDOggSf.gZ-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MXdpLmI7aReւZ;>'??$R;>'??$U( 1F%OP "EEa QQV9hKH+t@R-db*VŠ _!ᐚ@zqqr` c@[`p>>mSe.<3331 pH&b)_-zAc fb, Mu-( 1D"5E2b pL-oڗgL)֪aڒ}y˔b!2 Q-RBTȭO:ahQ# (b `#&v[5QAXVAPU"bvBEHb 8PB"nAJH[$ J{ rrw퀼۬,G&?3? !zj2 IۍgNjC|%F'<U@Uщ\#ٵCv!&>C$vy8*XX`$!S0d,JbԂXU+ZQAĴb/`b5G$Pl Q91F $`bPLo9F π#` 04:u!&lK{pk>JM%ïJzx.ڢY6WEAL7-ѣBUKX',ޡ  QB۱9>m^sӸM!&i:%l1l&X 5dF`ovvZ-T{[iV1Ԫ1TMA@Q'؛*bEE( I"& P< @$qj;AP PY ɐ  ˊh߄?z^|`ro̊)DrﰴM<6WkDhM1Eߡ6^IFMv{@NO>m^QS.$nڼNW%<\ImM?a0da2U;AXVY,6بX8&; vHM HE ChHB<aPd}![dro3"2oQ ~mc PC\6j]ћ0^H\ۓyD\獄\nȏe H o裒I'"YeYmxOOA6Ihs{җx I=F F}p!3ģFE@,-ZMP{[1 S@0 ؋!(&"ljd QŚ0a & @@D0c |Xp`^C2QMJSU0A`ݷ'o._K՛TA[XF)v@kܔߵk"VND`\l^0)YyJ¤ fY# #S,b'V{DՈ**H$'1a@( "!)IRm#,bp0H@,,ލ&A-PZKF@,m>}-LmӟbѦ˶P_[?b #).􋐔%1j[XX,z\Vǟmu<%hsw d))=$%NJY̨1P3 `caU5P b'L!2NQ858-B2 ǙqvLE%d dȀQHJPhVH mP@F*Gظj᥵e頋`*פUR,y / q8_Iz >m;.SisϘp=ƒ#$x Ԑlc'!fF9L9[ƂTGlmTQ1QXƨ xa$0P$Cy݁?n[C݉XP(!ҸSX pWwceqrFRwPjVk-.DY\,M5u~/0^`PH}lvyejHl) ʗё\ o"d, Yƨ66Xm^- Ybi"&  C0 L`  LHB߮*n+lfLO=ue/s9ߛFkf*9W_˄ ^{C 4[[`x{-dAk\h{ayn zlmms-1.1.3/data/samples/instruments/bassslap02.ogg000066400000000000000000000477551247673406200221410ustar00rootroot00000000000000OggSg.g+֤vorbisDOggSg.g6-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mپ a@ ⳔrYp<~8qǛ쐚p AN:lvÛ32d7g~%:eSlR`n1 chTJD $;;CL^mL +FCQQaq QsL&bq 0c@)CLXQEl.`d)8ET@&@Ȳ)OqNm>fD|'&O;'Jc `oq>x*\wS8^\>,;|Z[%ͭwjc%;K,adLFZAl0Ű5Pl00 [ ;jd@dp2I Y4*O3ft-9jȲByrm02^L(vm,!ʠ DUD^* HQ5A//L3?(3Qk&w\T 9rx02 j&9 $ MlD L 1D #VTw/E㐍MK3ǼG#@YFXB!c``@P #b(B{2 Y+ $?Q?Gr ⲧ`~| o5yR ,Wk%71?ʒzMo6tWb ^ O>jEbe`el~퉶aR.E}5( ~z`U\3۬zI- KNWƎ (V-Eccx+ab㢉$BbQN~GCv")#v:k@Hi0kFV`K#P$ˬr[Y krZoon$pde2@-3Yтk#I-]@~ ̗1;QZuy|CU!TUFDfWBt$YD eFQXj1AU4 SL [J2A, iI . 9+p!9$f)B /we:"`8!Avd٣7BdFHgMW`5S~hٕW'SX^x RX8"N ,+-2zu^(py|qsʱ]rξXldjb uDyb pV}qM(AEy6-DPQKٗL,A'p-cLUE aioUT*jAXM "N IHK"P];4Y `hL і6!BeM(H X=C`ј) ºKQNȺ[Jnj }cvy;O9]|",@طt{VrnI=EҺbVOozm% 8}2tD>Oс6AlĈ0TLQ( X2! mEp"b/ZQ`Ll2[( %D-56ca;\&㚡q#rBO6:q=˷8LץXLQW6s7/a16+$H>fn(l#o"ej21阆,jTD P5jAbV[jŪ #A*# ca T5؈$tn֊ @ DB_7Xى #I^_YfTM!mSʼR}9WГ9boS&ݺ%y(;|[LkI?KL AF}22u7lבN81.iU@[[1 ;0lŰa1M{L1 0 e Ƈ<׌nϫWGI"@F=BDnJ#֧ r XF,o A֜kƦBTOح"--w:#v!W08WI2oD0qG laCi0&ila( ڞM‰ 22A ȄȖBl` tAez(ƝaXb "V[a"XYJW#qk]vgMOggSg.g=s@^yfI&F`xቂQ@iQ{lT QcѸ@; 0_u`8 rIKq6&ؐ0В AB@N!l sOm%#ۦ"☷Gda!wyos}YM3t(k ֯I X=\t"+vK?2^?8^[κr\s A=?8QUXK79`1jTl,jcV6bb*aX pʹpbIJ BYHF I[ M)@ȋ2:AN'GE` l*,,@-(}WWaq\18eQ̱>ڋb"ւH!%.jO`oda 6$Y-'_u8QV߆nB a0Qc eJ[C بV;4 !6 FQ&V`(; /]S,&JLA]}c mȶ`c0$p,6 CƆp0fgy=j0'Յ?Uݏ5RY+moõHDzf.V3"zw-gR&!BIAN`OhhT`QEcv*VU5"H\$ pDnخ_\9 v" ZA(d 2M_cަ5}j r:mzk%+@P6|>rؒEo},y@!D7MoY/ VGz1z_ d^2"H;j`zmF!CRnR ω*! QU 50TLikB J# l _-/z> 4$¡ JFbm,A( @@ #/ 5>|c~[284K.,]ZcDa[ښNmC%5\ԙ:PX?^βvP~^HտQ% $q *L( eJ"bTUۤf^8ؘ VQl5 Ehac}Z,&D 04`4lXX*JA9A<ܷ Pn!Pk:2PdiK{9=o/LU,4``,є/bmL=a7"N{C?9A#c#$5UD~y'*o#급`fTU%QKQ6J iLMU_Cc*Blۥ@sAZvؖ eAy F,6@Leɀ%"c)ph`&vEH"  IF,W&;"LT !P풌KgCp~{FbgBv'Y~ͥ0'Obo J웬"ԈL&ӆv熡*1*";bcP0A@q4IHȠu *BHP#@i؋l`Ƣ8+Yhd RMR""R -mVuay{ .O~Ie{6.EA:cOzl]ne  ,B_&͎+[$.q"õeJB\ ސr lc6R [x" 5*#AUFU@L؛jk/& !9\vU``_:;"R l$;ur2;z`G,bU&v#UV>|3&R}4;N!=Q5nVJ}QD0 ,K+8WV^f,vUYMKT6w} sf*va.lYE݇"Yp9QthU`TEEUTQElT*V(6b 0#4diށ>&wTP!0؄V*i!yș>R =OCBw#5ŖY'adMDtFu/.GigYJ]B0x^oS^pg@Vn˽2B8b sv),uuދj)X6Պ] k ʉI}2*Q婜4Mvz@J*md-E%BRF-9m@ vG<% "3-~O[JeT۶[AEj&p8.n 9iv\tcAM {'IP:$nw(O4tHm&D,!+n0FU#"^`Xvb&V{jc !(Thnz2t**[8+d/Jl@xD,F҆- IB3Ge2rfr[_O;=R54K[{;2i;PB'"PK] !>% #-N褨CHqө00ȌFcD`1`U6jck؁ ( 0Bd# l%, †IvhCBctaM?F7w, /6@r"{aWrNg4:>8^Q6=";j7N)@JigLreq[3W@_A^ln3Hlކn$ <5QLȂ12UA8;td/"vjc%( NĐCl ~RxS6dKQl, "WsvV`H.׫lclfվ>.,$ ˋ7VKOx-R޻CۻeDPHu:k:ov ?C~# ?in)4t=҇pAªDaj$01Ŵ5T, `ioCT Q1$Ad`, 82(Y# e0|:a IQ(hBc@EkkȥqUUؖ#`er6LX- f2ƌ,%|or=EWxKZR^$*IVGI U,d(+!;4e0FA ZU U[0j(&1Qȶ@$d# Ae0` 0# af++BhsdRrNA"H۰ZRfV - hdwRG4gM3:p1")L,̷|-(Y&T*kԈXQpb &b @d !)ZaXsmEDC 1P lBbhA1x5td?2\H*&봡ظF}lx*XG{(zmW*6kuHRvk=K%lt^{9H[W?uH.NF;d^ |) BBKx2ap$eGP, \jZU)P  ˆK'd7S^#M7Hbmֲc+{9 DPs Akx.P͂>sCc<sCc& *2jXŇ1LeEQ#5FEU ' aT0@'$'16fp a" (lm3dR@cK`hЬ+4R`K%$S@ν&qg = >pB` ?7 ,T)b]v$ v`b^i]] hf[ T0ѣ0ѡXt \I>fa(S l ;b!V 1l[[l a$'@ =``4&0Q$e!@†$e3ZJ7t!FA22 ("DJo{ f}E4vEuASZ_rS,sv,c^hlAPs֝XVj;(s ~JD3:TnOi(@'mˠC0hdثŢ&V{I[;j"c4*˖ %eb&&^`Ǥd$r<"'V  @{ J&F-V]lxv5Ek5F8ѷz,Jjn݋ꀭ[M%"߇،. I/!N%cjOOggS7"g.gqw3? YJ,%Τ$d7"d5˒L*h+fbubQZU#El3b1 8Fh B^@ ,, BZ ! 3JT HHi A#e, 4``0+)yJuj'DQYS/fᨌ-wa%s-:TҒl ;S>3hFC/,)Ϡ$wDmː(L41"jEŀ5l ڨ &,aH"`a)X+i {籪r( 6BA2-S41}-; cxo:seQ=\Tv_tg켢HVeEmy IL7Cb[XhZ oz5N<46:)P j e,3Ԩ ,jU1jE {[lm uLaٯ 8ABހL- Xߦj[[43h胗@Bwp!֑HpGJe۩#Cd_`VUUF3drcgbF\@G,yUM>{gN~24:Tg&K:?!BPքCǨD1j!ŨbUԢjbX ;zB'6 \P($ ( 9Y22ʸlYvJCLt$pR-9Aʊ$H`,ۅ&`)4)B&BH P~{ځ Q7 FeȎճ NhډZNȢa{ȞyZzyQ}ӼhTToI})3eR!fЎ$B``Uհڋ)V1PA 6 >cCd c$!6IP؀1`Poe]!=ɗoX`)4(hllW: 舶z},A$--ΎvMvaSvtKkT+% ^yg_S{SK=kS=HR\ R2Tl تb*,l41#È5% rB-#r`Xr(/2Y@>yu)@Qlv^. #@If%M|]]cq`%[Vmsrl;M뽊HU ^"%i*v~"q,jeT%-͞襨%+E1a ejTEXF-ji`ooXD&8&J` ^Kip:euB"ZM"2q<"Y ?>p>=)I=oP_*#8ehT9lX}BLj%41(3! *MsQbZ5[ #h20@IEf^m:L2mdl(0"8ްt  @M\ENb*݄|H/6sMVqE^;XBGaqc7Ir 'MF.߂:%ikاuR`)yphhS}`AXX i#FL`Z;Q mb!$$&Tl,X9O-!$')a2 [/ I@ e*J\f$a v΅T!7cբ:˼<^ۘy*Y܋#׏qY[Ld@9LiAf-f$~)řd ._8,b@c *aUUFP;{UmP!!a`vEф$*BZMV\v` 1B(*aa[FA1A8T6D -"YQmB$9AY}tlp*rPi"k#"N2׾* ;^:3#ݙQwMS*\61 mhoqeP(} {@1ŏOX +zW2C`MTkhGUUBZVWe@5(6$Dc,(2BX( jbB$Nr %u9a!t]f` a`7<Q$&H V @(YƹQeÀ#Yů%u'VKum"-ǜ/0)}=b$BRyɂ; Ha7L2ll5Q 8AB"4dp0B &,c01([ @BxQE d4MJvd!d9 $H{)w#FC 52].bb`?Vv5^†Շ( {iT(eG9WS=; *q(!DCD om]%8(\Svaŏ[Na!>V H oFaRu',@UEĬu1).5rݛ%\cࡱ@pbЏ yK&;_G=,ep1k,Y,?DdߑtJStOggS@V cHTS LAR )%R &`>޿1C;2l*i큋OOQ$y<)--X(/=ru\ 0Mv-{eMTzߍ'|S3;a=)eQ;-^m-a׳o$A whL}wG78Ydva~0R8Eئh^ mIK JD)IO|U+_YknT5,շ# QWU}ҽy/h7hԉ% dus.՗YD !s1 Po-BaKv)1Al)>}ED[j @HwmL6r^˪JYnm)Azld[i>HT)M約hh-A9YR`qkzzHh9mZv*؁܃g):Fu3x{U{?QvaCR&.w/ \fvUiX>H=k ҇'"*f-ɬJp_~]ۯ qkwݡL{8 S-/jH,Vo{5ʃhKWD* ldƒt+"(ӌh'gͯREUo~P)@_7HFޜw,Ou~H=|acbb4˪B Oί,gי1wtl^LϮSOjH.7 !XO|utX4iwqvUk&WX`p Q3*A=$E,Ay%αrؐ\c::{w6|s-(xWo|xbX%\Xp{'kǀ'MfHD9z48 Y:Y&Z.@Jc5NΏ!o.#uI bEMa;4WDQB}Ǡcdь'~UZVQJlYT2yI˾8Z.t%bͰ\\nL!m++G61+J3r7YVgG ! dY ^HT=i{l)bu$2f9fMQ~ &P߽@Jm2O.ۜhGex-vuԱR{")Nc-NgaDȁD񟈃J b@rH qw20RQ;JbjD6*KHJf;H~^*GzqL b݇mx&%"1HOoLdoJEm7㈐|hj<Ŗ>VJ ʁW]ڡLb<T̕}X8gD0o>YWeJbVX5M032]e"?oi feL$DȺMvXeݩxO3M:P7x *S,zkj$uVTybV""mX<jnɣr/G:8jC-;/kTFf_nk"DKTNc۹>Jo\uhDf8pC+6&ͮT(2l71wF_[`sRz8a[Ylen{VVp8E pKcvG5ԈZcE/QY{9\fovnB'7Zؠc R&l yOcjz5=0hs6c/,ƀr~{>x`P\Ŝ@o[myy`R ɉny4mm[CzJ[XHcXFzN6&u)P

%g+3@UKIfȿBg;1_PnviZ&qE.Ng=oLGi}xc #gs?WV Z!\g?^>xc``.hhesh(ґ)L7lxQSe ؜=; fRqjD`J4}@)Wafs-MlBIi\YZ)Z5<\SQ1xj`vCȧVم[oJ@lil=Mq]g\D~o(NS7ۓw%b}hy$W<[46_)zKߚo?1nktaNt[Iً&:4-#ӟyq>Ie3:-ϢfOUճ2_P͕g^.[H2Չ* Exߜt ,bjԫN.NޮsIF+ >$-lg6-]I4fd^P TZ+'ћM]vSdzޛP쒑43WQ=lV*OAѣc-+#r%hV4# "BQM~+ ?ް-zڽ0ّ!a޼ulIo4:T z7̷%T Zd5KW?u3rWe~mPl 2'!ϫ"y{VޟI}ַjY=b Ď멸hj(uAs=&&|U= kRy+b#{\iC%&חsg&fo{zO2H#;K]KHLZzb̻mJs.}c,: |#Aa]֔M@Y¸~9Xmƺ5q1W}ZE;:y2^ñ Q͑U mURju.M{j5RD,= } Ah0KnfàQ#Qshg(1z?F֦ sSc!?Ua@&%mۆn>q7s{a^0Q85&Itα8֑Ks\I|n9ReQuU5zN+P@L>y${D{7*1@0r3CLMst4xmi:T#F=K2P/-"ks34`ҚuGber2oq9j Ѱtp*Eo_>W`ffedb@meC M(c^.'GE՚6*hN`w907={|`읶ׯ5ָxGh#T=ܘshD)C=$p@>~37*( ۾{ng1yN'bL0_~c &un ?/RV߭+'QAJJřeM}"zf7Q+[_3xlnMfjҕo#$ @'{tyiA)-no5}T2-g6]s_M>>yO 14 ~geTCW(Bd H9~sd${}b1%;m5 kM(fѦ@i(= 7Dpm2<02ZYx}MhheCSuWt&#<=\pKӒgυA>_ɚ1pmcI:e쯬V"Th"`(6Yy-8x{$O$PlFm!jP8z'q.Y㖩ȹZGSϡ1w9,e*6#d vIw5#T4?]_G XA[ ҍ8&_OBTI;oKy*m~?ZILU<4i_Gc㬋xq2U=$dwǓZ->yȧ" àX!WȞ6NTj2rx_6l%W0gٱ{]W;K`{J6:[KK57JVxZ[X$q*/\(;[9VpZ(܌=˿ĥH?=P= Ts~;g\'Ij},~`m <ϛD5s  [Ea(u~]ylV V,R:"FػJ7@8ڷc>3F+u2g f/һ GR7L\5c^CO(DF),8K0x uy8Fk _YKgV[F;@ɞofCf+2#AGw_5>j5PJ:WVڮ%^C2ѻ?T6z?N ;&cW "CRrs;{?)ʗߤZ^#Ц%N$ek,#d)Mlx3nB9ۣLbcg ќ1wʎ0 Q0:}_0Br\^7ZeBWeۥb -Ͷw` W BRU.OqKvE $[uP$y^`eB4JpGs;Cn4ЕC6u63m;`%M4ߞ q)!3yާ}80 |Q!]3C4Fb6PT32;XR5(9Ҥ>J5]U@fσRp1όGRv*XJAk{Eic(^8Aĭ3%oژ]5KV6kY:Ucծwn *?O:ڃi+w'K%50B$>]^ƍؾԲM^) | !;'τ\Y:zKpXƱGPMTEMEҸ zkCVۢ, 4Z.Hڬ`pcekjQ-zͮ,(;|do Pe#,X=qΖl+=u@4]riҶ6]}HTTs'0$l?*3Ζb(0E5HU)i^o>ƳJs=Bv7|P3Wdt"/^1`(|AubkƄj+u8OUyȒt@ fids,C^mV|9 1Ë1JT >Tba8/Kn~<9?fnzamsj6y~D(}gll-f,L<]=x=TӚ߿z״hޠYiK8Uc=VrcGѥFO\#PS_]@i 0~'>oV]+3JuGgY P.l- f๧igez,bNZ[M3k-썄jO= gtK^丛Ġ9Y-79 ;-Z~O'lB?dr7Ԟ}p2ióhԓ:~бlꍳwE-K)oDN ײEbj9laL~UC)ۅJ: 1VL%[Me76C)`ofWȠ eteP_+%`⮾bz)l%^y$ȫ(0@>Lc!f=bAdiAIm&: G|>;,tzbRRW{꼤,?lz{u"7T5-'PmM:Ro^)*(l4bu29<4Ucј_QXaoa]ky]GX^6\G 嗘㵵1ղ[m 0/ZHOggS@ XL^ɇ"X(j-{(7"ш0)t@W{XZ\FPrs i66Y _ׁ}浦ozL {furUƁOY!NۨP%-.1cJAEQ4DN5K tV-m1-1șGr g3üqVpV&t,_Z t;{F֦ ý9QI 乫hY,Gfj%3ǯ ^]L ޵V%MXx/VӶ`K~/XxZm[.duh\65MHNKhBf&U"U 6mr"7̺E˄koG4,YgS#)LLJJ_9В~ih"47g]iKa7#Uw+Ƽf܇:ʊ*EzZЃWj3jzW'P$p^Cb6104d"SU܏Vf-deVi]T48J{zRAm7~ԇ;&9ugC|5~&Dqr;~@ K5_0^EQ@F7uw!!/\}? ӖndVnzVAZ;>yC4 }8:.j!Zٜз1M&d&7#18*3=MI(})ߐI(UmT<v>z x\Cr=D`KsV;wR Dq/(EbCP5/Voo e o$/̿ g7uݗ;=; =G ڿqߛT?(? 5 }ɐH ןŰaٟ0+ ُǟX2b053T`z/T7^IG*|إngNH[ Tfu<U@._9 ϰEKw}$**hpq1g4Ti: Չ㞆`4:W y/^Gď`LDsi6@0)I2g,e\әoI劑F:#iD7{2tw FPhZ#,Mjf$nyvC.&Cw7[ꎢ2 'Ę K7%ihd}@?hE~.I0VeF{2(^~f(讛zR+_C%.U`  ℘Z v&5 0SBfMd+Ik.wLԸ`sqjNu\)u<~M!Kib>xx4ŲPHkip?#=&9{蝡RMIBI{O~ϖ7A}C}U/KbN~ggSY#A ^$U 4p}uy.!;!;v7'LC(HDd>~`yWr% jE}TGMWb+ :jV#>+sD 7$y٥ZiYWXcz13B%s?fGFŷiKlmcdIS]6ekܦmsaLoMybL hDA=Q-Ec6}֚4) q܃ћWVI͇ӯUx"i`Z%hc8WޮX*@>+NJcp /hٿS-ӱcE+RF.jgC}i狱e˚7Xuz5rC&ˊU֘m Dwכ)U^GG{<mD)(r}̿b.FW#x|_g.v<9/`kR& YѾ+to6iu>R51dg64QU[VWh4uXy픽j|r/gq@ -ƑqYm,=~J+-ei|&aA'@Ѫtw}VzH ԏ4΋PlrbISWsɦߤj r[˲%%pX,K*v.Fm0k^B ⛄,"4UqPNjA78 c:5QkW@im:KZ BQe`ʂQe?=>??߆͡㙥fs0N}AV (P{DH_(>[[4@gVe`ࣉڿm3/f2tYi/D21*zi8=MWif|^tBpEѰH^+ `wyl5*C5%\NzfYDFk{UUʕ[ F_-UԹ ~hVT(UܛeU4䕛P iAҊ034M ٸ^-+ W5l32T4J+9IYR6yT#Wg*ōЇOIiLZG&R74xWY2MNWCq݅]̥zM 6Q벋J 5|\*AWǤXz^j8ft7;=+\~$Wf0!|nZ>f15M-SFf @3/dJ8S٦I#17b4F#Go"$o#E!~}i2 G-X#SljNtuK)/[wF./tvz=xX%sqxS}u Z ϗ &?Bl)f|>Ӗ!,aV;A字iTWɋyV11C@߷i4m YW84귩qk?MA$. coW<y?FhV+)?$BDPqʃ̑S[t{ɨV#>U,Mo; A+%LJkbY5% ,i{|i6-Z\M7c _j*{>$@dh܈Vr32BJI[ޣ9T{>iֵwa39]IiRg{B-,9m{Gkㅇ^ 9 y!f-^ۅ<5׊LAW\ϬZנJ"*J>N~+K;z7x=,pZ\=x$ճRP IJ~ChfjD$`>Hb!"r8COGn dkw'M=js\HDȨoz7? zrƣt@ %ol=S N-=u<㌇Ҵ I9ݵBCАZZ?Ek< q嗘g혙jES[f`!R8a[ ~$a0(VHB&&3Щf&a+8ݰ =Gɝ$%[Uz b!%F&OTS:RQ+E ZUͩ_+`S YQL87?k`sSV8:ȨWzly:%9R^Gj= "'vwI wH:gc۷[RszhOggS@F ;Ѿ[!0Z$>*$Mh kA0"l"-̖\]cy ?PB|7 4)ВHqEjVfa1j,9IMIfU܆55p*̓)R"+<':o=7ҐӶ{sڢɭDKyl.:~CL fRodPR I$Ԡjvb\kUk+y^Yq_F,)YJ@^A!Ĝ"8 _ia#mO8:L}Ouǟ>Z vk”cJ*FaysZג:p<ߧH=M%#䘒r۵}>DSH,i|ۗ]$ -dj`^P 7MpϦZ6ĩ2JEIF5w5@~, B<(4Yh}rgeX( ,9g5zS4D'-a\یhs\\&<] _k-AV="ioW'Ǧ„-}O 6iBQ o~+wMam W>CdaǰA0430,tL2s~w\kfqnS>Fzp,K1Е`PHY4&Y{x-$?sXCt ]e{_>`+W/[krTh[ix4qL"^5;P/Um=c<6`4ƩK^wzO+[(`/6(4 O2rX)6ljgPVZ'>\ 6Sfy KsrRZd v'z. ׫jLu.&#_]7.>ѫ#n|pQf/U(,(#uMȳ7dI|6}|HnuF.qE{/ 7PBO 2m-'vt_lE*3T=qQGɨuLʴ߬$g%=b^,ܤ` 4[PVM>LV 9ﰝ늘WJM\0귆}3Jaev.9*2sMʵ02LG5J0o'ǵWWzLhzH7̃G~kGvW''13i B^$'CjN$TeV{dQX@cl-!4`lb'Psn{p2plEB#{Z0#@FC%/-Bhi .,VQw(8f^_oHɋ17g̈́jT܉i:Yjd CMT di>$Ϲs껻M 9YAil<ŵ1h9D3&c<ۻe[ TQ/t2 j޿moBA&vsڙt-ș1܍T%%3\n!ך`O,THKZD|B+[XC~?-{p/{Hd{bjie`1+2ԷgMj^UkCZ<LIYj FchX AvLH2VpS\1fo2_giMQbUx@rO}nj祄]*ٗF#Af ;k0yTԋ$=doD,%^vnN;zтIaѪ!v=yE*rݝ?a[aF̩X@ ߌ~o*Dm K&ZXxx̹AfGؤX-eXoPC`Nk i"S͌~wڔ>nF4~tERRJ,B yC#Ƌ [y[ėzx+#aeEo5/8oJ7仒G&|L0c)4<1J2z qS> PX˹YKQQ7 #3 S٠rH{/4$g>lX/|=ݐd4* T$R2qUh54oԔC -nvMdC2%5۔E`#͍D֭v ~KTYu ,k mX"QBKXFZ^Ou.eGH0#S[Oo_%rlf_O}zX*H!= [@ qP1w| ]8o?PKNYW!3 HK Wxg"gr"9b-/|+}ND1ڿ^/{23UGjx%.nJf-g(?{Ȉfg293U9'ڑ+2砮|j|\MⰄ\ݺ2;iNڀpcf)U 6^X<9+eOG+% tj9oήFnՉ#ux\olz4X=pCR0FABgJ2zG,+b:28 rs!"{l;JE4}:4ԳL'-ֻQpUvd~SC]w 8j]6 j2& :'TlG ߼s|[\AU'7h7՘hY4i׼RP(,28*)aMNdL\ F%;ȩapQO)IݑK^97k.Go@%+A ۺN=dōY@dƛ|LG i(劣#T< eԤi[XjZ*M٢s0ylKYApimE?HDHka 025d`n/Sք,v{Iv49)~3Q=,\#b#U8k$b\FJyLk뗧Y^>a %Wq0O#glw[ŽMXNorgz۞2UMDWV)/C-,wdq[̛Y!ͫX|T\e$ 4 *>/&I| ύ0Gzjםĉ^xntymXFV * z$lC5n &n.Wӓ$懿XPflU[\fˍ9;qG}%eTq3f@4D{9\3BHcz).$n4Sx \@Y8yR#[@,@Ik (Qp>Q:"i+m'@C.F]I2X(d?@  .axc]]g/ M((5t^9e\vs&?%Pv@?02ISTlnPAڈC:@A`Ścm\`׎5pk P!"W  jg X"tan `9.K&yS_mJ%2(3`<@@j7 @ 0PBG 9R @`zpFa A @(ZN-1>Y tch ^)mLmSR_*kPW@8(p&w(8d^Ta87H >@@ *KVD* WJb2< Tz@™XMlG 9VJN͟,h4ު+p8v00%]ep<Mܭ+ l @EJ\:gՊ O8=Y9,oO< o0 ~ ˨oϺr fus%S s5{[^>|A =?@8( H &IlJP`8 XY, 5'P^0^ Hl @T@ As@ ~)eWݶ ӈK*Bzn 9@3a2y J9%EC)랲gR;0ޫpwX(_  B7MBPx % 8PW |mBXC""lA[ *ACYDx=D`59βR#߫7A<_ [$@(ȭ+6t9+F2k@)722H } p ( ?<e',jQRDt( |Bb[ Igk~/78 `>4$ L |` P`Cn83pb@P` (P/6 U[`ll.tEgJI1gjTxp <K4~]@@jip:G@kQuXGhEJU qA@}8(0"{ xe , \@B@z``A "9վ;sԈxp|@x4@A@0@Q'+Tt@䧳*n8&t_E*—L LJ@+@*{,P )k9s oe  @HYP.p` IZ+C݂_d `@p = p .D%X ! @% @7@  BO&$ASA[ >yOGgӀF|> J |zz & D4 OISD MJ^ 7(PJ` d>8/-Opnb,+@ c`+< FZ4~N~9ƳN@~)w@ͭ p$@j%|@p`} w?WxES T`:gS$veOF_E*@ >'օ@5`(T+t)6g ϊܢ? 0pTP$lb\ @ zn]W6 g}J-Sth:( ,Tũa[+M9cEmG`pwX@,$ n@~X[  P@ d=0zHB-~-  @D#t izH~k@r~0ѐIy)\<ß5w_@g `>P< p 5J#@ u6\ ` ۨ`+ `mH  TQ!z@ g_Dϊ Qx_S \ `&.)aj$aj@?@OMx@)^P tH! noP |!;+@!0q*Xx҇Da|^>loH<~ W`W%= H$VK ۀ6X%OW t PQ@ ЄhH+#0Р,$D9V5~nscc$p&N(XH0 p p#@Mp&4l?[)v'Xs !@]h( |yc IlH5bXA)&~lN0 @pwhhH0wW@)Lp@P D://j إ `X`%WA& w P :P*$`F OggS@=u>C淯M<4g ,[S@x  I \`;<(Q nL@o*AJt7?@,(H4 8  &L gxIb6rcm^ L @5@A@jI |TP SeAQP#M`|V =$,4@ 8N : & u@Z@`1)e~ rcCWAUxK8` 5 C)BPw q(pl?hAKG0- ؆S@4 o< P S$, @4`39egUnAP^PNp(h$aK[-eݫ@)`wРtu . `@qXp!x@IM/_;`rB  I횥3}95(7*P N$` Ig`VW7  Po"L(@`kpsj-ȭeA@pHEx 5p(0#4|̲X,|N=k||ogkr܀ ;8 )p$zp*{9P@8D׈=g XP PI H$46t8 ` L`&,hP9k|ٚG|ʍ}{u  p` Po֮Tdp2(PH?+(L 5 a=|hT =h)es|ۚxVTTYP'\@er$A9 Ex9@)@j ^.r 6 pT יbހAgpEHP Ɛ7X4Ikl̼܂<׷$<@V vR A~@-{p"%e(Rp#j>D,D@QlBj;$Ȁ X,yO>~*U|9*lp.b I0I } pPX`m0 YwFX /@LtI " P48_)@!AdwSX1))QnU FZ|xU9^P"zJ,&PnN$!s\ v5e\Kp.((f Pp *A=7#$„LN@7<H@`+;Iu=.96Tnl=9?DL0wp;4  .F!4iZ X P*pRwJ@8Sx @},2g`:VPӆj)G@k  &t56Ln<|% Orp$3P8V O3U`)(k@]0}p+Ξ@9`&%L`)''0@=\0k`0 )VJYn[sP|& ~)p5] 8]&w0 .$){@4 ޱO,`5U'R[ @ ,yR%֕Y7ૺT/ 5J 3N$-OLPmn)>\4~YkvYH `K Np@$ @Vpwg@E-@ShW+LqM`S|(@|z|2PC5d"A ze y'/ Np: /o@*.\6 #p 1迩& MH%OL "D00\0w{x$B)γG35Y(<@ (;I%0" =wpt%/d).XxH+yx ,g\`KA! t lb+ 4 푥y>~c UPp(HH.]Nxhnp@#: )(4G!3`G8x z"fөH6YL|ͤI|sB=|98{  @A@joޗI-Tn"@4`nw((&,7齞@ @t'ext~txx#@I;5?@T#<~,0* wpvp` 8$(1'P(VX 4JP_@zG=eN@$>QU`x j 40 ]9㕥(R_~U @   \-%t'$p~_ N B6|B s'p $/)k@GN;<'p$HH ~``xpT%M_$tc pH+xq7:,P_P M&؀F[95D}?5/~(yV@Ȁ@A@ޡΫP!uXn!`@7@: $X@DX@|,mHPl TƠ!O5,|zOggS@3=uvVNya9-xTP ܡ`p  I6*cހk.P{,8w`\:T"~%"7_Ub`e ,}v`Pk~7-V @ wp R0$Dg' (( F"'rW` |bJ`@x,@Y- -F X:Lh(tXE)V%w Z#`5p>TP*v8@@09b<nnAS p@$^/%.I4Mj 2PӜhxt& I!ۏg r%8d@vp  l7y `X_P;<pp& 8@) lD6C@,. d ,|x 8?,,I@+? "qvP$FA.\ M `\uPwo-c@k@J`%WBrL<ِ$00 hh/@5u>~p !0uתP"; I@zFa" P l | @FX@ H)@ v^¥'P C"0T $hPiP :?Agܢv`x? l>[ @8 PCj$ D,* rTHj 68p4\h>AȂ<@C*K- 7SŶ{w,6M)e[ܢ? &(;$F8/ ^ ^QcX__d`W;-U @0:j tC] '>ԠFaXJP9ۏ.JlO$Ykpa Rxo! w>0,J.0:@)`k ˴L p 6Oa>XI㕲(FoI@O'w0 @0tpT\J @oi-(3||`l&uP>hryK`7پٚG ȍregP$\ ;XIRu]pP4o8R( @" +o|Q~V|BB0ShF &dIm8X @x a` 0.V Q r+ f@ @On $!LCM0 |s>)W) L dA y&jL9횥۳}5O j>e6~CHG٪(#;$u=(P XW 8n(pR܀`0CH 0(DBMGG%L=p)()۝׸-l|P#>;0@.H $(1U{+7 ^@6(ʂ@I?ԇXHпUS@RP|wl@u <D<48L$]h>~s~aWRo+('}vxFUO-l;@Oa 0EPqP`(3 /H 8(zc C+ L<| l5^(NU THX0.3,b I^BrXP|WPo  @` A|"CWG([F@5! a n )1~BUx|kU 8[&(8.L)xm@x24"- <(@/ `>SXP SGPHU9Jyټ4LnlV=U ^J +l}.@$f  PM4.Z &*R/Ux an&nid0Y+ aa;s@ͭ H $ *@p $a | ^@cT7(@P8VLV@ Lbީ@wHU9`sR'Sa±う*9m /B xc ?UPFTP '8p3 x C(( /D@ 'r1NH,@%L b)0د?Sx-d'<<[%} =HPIT?ZS*t`B%c`WW#|&×E&F%|EA1}d5ȳ瑾KC4>K5@<@T  ;4,@/ r@ `S `4w(Pu =,@nt%CWd%B=$N" ` T$ӃXOggS=uA~.++>mK7>(R|@*xp@:UМ@7@(& fbp8 `c`p~p_Ȕ^)ʳ3?We3Q)}H(yTtgU| p , Mx 6,(P& IĜ(" P-M`ϛ$ܪh"x(T @* p M(dlbFb)(8E*I,xd5OxO-lP`nԑgX ,X3p8P\@, UKi|0؉QXABS@YMH|b "7 j `>*v84F687 P ,PW) 7(AhHC/pAD$M >0 '!`RaP'hI;5³N@x 8}h@ P$(0'\nWH@)bG8 h*t$W5X"U/` T -91QO`5D``N0A9wFGXK a` 8`\{j6 @*-\ @w%P@[ P,-L!E%LӄIC^)g?Y` p-,Fj( t @q@ 󢀇OjhI@> ݀ )%9HiT@1@C؄JLǕxk/%@O8[8 kK=\dBpO(P@cglX;"S›*V|P&5,ã<<&C%:Uβ-? TPP` IZ=X{niP83\`P%w%>@`KR@=$l((tbx<l+`9Ez~?¿ -h<[U]P.r\$as @-|/@)JU<Pp(n 0X]Plr#{*(7CX ЏIl @tT@yWfiLaUEiy=|UH{ @.\$aM*7(@< LR@HPIQł.W)xZ\ a \łŃ ZK DCxNԀ $`m@C!P6'{Wj 8@)@ n ?/wCSrT~B:AbCp7h$̉s lL#Q}Pl"#sTT*d' T!{JxpݦbWL¬:|Tbaɚ{xÄ {Y+*=|n=T-[B@ XXoyU4wTe/ )yVM7:p`~* 8$Qs[Z5Wj j2(Iс׎Ւ#%ҟg "L L:@Rx;tǟΦB)gr U&w; 5`8@) nh|s(EdCLFm=fK_ 586g qKؾtt)`$\~&η-lN `.0 jРEP$@~6r Wg* .;hI&FH0) Շ(- p 6%oC9_8$7&U( c,m-% )>mЈx/$W82;y@p 5%p4`ML@E`(PS* )325 ko$@|(T@x#y@@B5$P"T+JPg,{vp_Np_ (*Tj7$ڪGC;7)1^*Sk#>;p  `vI=0'0k0->„.0H ]&PP 8@8u` #0b@ρ@`tP3??|_$Z(B,OggS=u&ʳ5Јoj ? \wHHH\j  x@@́2] 8oAWX5\+L3A9  @%6``N DilJvJiP,W0DAjJI\kH{R?,M% @vp ԣ[ _ Pz V K.@P Q~,_ x ,w64ѠcA79Ygj5Tn8iba:YP^=@ PA!( Y5p PlpT)h;nHx8Z`01` Q`FRbP x:~\)}ٚFMnA|x *(' HHRB `HJ m(@h@y\j 6iDPo ouPldk̉A)xP59_f+SEms$0'/[P@A@;@<Y_ P \E%2sp)PP%HV` 0/M )O`c؀T4+ }A)>e~ -f&z*hd<]Q*3nP))@@ ~ > 1` @I$(4a*:i06qrH)ʲ_1[4^U3>Wͷ+(p@(.6T-k`P `; P` Pp;8@t7lF/bB0}8o f-BF@ g.r y?@法p IP$(0xpSX1*P @*BOOz.W5`n";4KEP~#AvLnBB+n{ I%|jг}K7 `+ / tP% ^a>7H7XD(@,@u8 F`=b|@9jdiI㞲yd c @/~[0;,Hp |/ZU p Vw(HF@0i@`@=<Cm|J @/'oU`'8=@L.2Cr@Yޡdt: @[^@x _EPM,Ðɰ00 4(w#-9};_,hı  I@`Ih@ 2T@7 D6tKx 0 (+@ +iPu lj48?Pޠ a"B٤H5)Wgk_@hK Ԁl%`j(8I&F`X,1 `~f\Pjp*%wꃭAb`r P"C!SN2j@u~pqQm(P^*;$ vx.X5:@4-@)`g; tz^6lg$HR`+ W|m@ \!#)h)ugR ( I@v0 F\P_P`mF(wp ( @p\>rk{p +i20s~I h5`S:<6H9%g ?od'_U #=L5j9Yu;xHQ _) -?@BcsP(O| ӻVl5pP#A(P<nI=u9#64 ?p0+Ѐc%=[ 80Щ&63g PpW dP@)W8 *q zغB6>`iP&@r7D'$2x  1Lai7|? e<Ӏ[$\@EPx_Ce |3܁w3PtNh n @[EVFI|@DG >)kkFL`@8( a@A@pIlCv`Kp\| P((P@ `NIM@>L=X*%$0 )IOH~!&oCm6R@x vpR#LbN@7qJ7Y@B-SB $0:U3Y OggSh=u0" m~!5Y#?TU(#y@A@j%.PQ`MWt Pe;@ }BPOPRjUZMiPs"pր@p~$44@_x5Oi )5?laԈxS0(o ؉p` Ivp\6p?TJM1-d $UԿ  ; eB]n% TNJth 8. WA"\z5XO"D[3Q$3p/LLI힥3?DU M  {@__PJP "q}]@ZO}FI[E(1& w4I푥۳|ݚ_,ȍ}UCp rIP.4 0W+8P* u ( XIHEb$G X4 X'`biBI9?lͣ5mupwX@@X2*p,77:,To.*!5`^(؆ щ g$6Q@Â)p~D 5^Q<^_7'=@xNA#xP*瓀B6݊pO3}S-H>„ANY,S$L8JaUγW{ns<r>Qa!4`k!ʲY^SsTp|/0 (@@j@P8{^`nDWT2(`Y@@_0\L7& `. ,б  )5#5 x&(uޡ`p 5*tdw @OPP[p"'D*cE wkAo-PHSAm[@`P /SOq?,|q@b,@A I[]@Kx[\X'$5 Y4 A(`l%BJr`B *(tLB@kJ>Mx-eJ4@sP#.9t$Ex @ 8 >lT|A%`hAÑ@Bo )ʲWo[A<@(ؔU(uT&wp&IA y F,d`YJ w( @"HǯKU`<0=W+Ph3,tTGqE)eϏxȍe*ԯ(,@ _ߌ|R@$pQ({$)gϏg ?/V e3YzLR#l@Mx \@,@)\AJdV0y!0~@lAo $ .e!OFM&z)kMa3r>jǿ *` \@C@j:A .knN 7\P_ - uSP(@*lD eDpXtUC43g@ #OggS=uՃa|kPW  @p$p 5@'Hw,@p8C@gu}Yૉ{%J4$@0֑@SΤY/@ ** )2u3ܢq`=|%}3]. ;@! xJ@|K@!W/ҩ"\`:KtfǤ8)`*U,Es1<ڶ`69ugFx;7E>J4pp.;48&@p0 `* @8@@m !٢ HF}bg1cԀ1$I1>lͯ@x Dr5@A@0` :P#(Nuw @pWJo$Vp+@E'_ ^dPC@A@jCm9 @%"{  k\ CU#v`B/nn|[PCƣ)A,|Ovn LP;^ I= x<J`(PX @Zf}:tWH3y)P P6j n0Tp~26S l~U @  h$as8&@" 8R*u(JH#+@ BVs4`@,H& 1Ĕ@O JkDh>m!^n@@@O'  5s w`4 /$F^l^}r_R ա7:@No8!Ehhp `J* );* @pH&]p TF@hΥ( (`ڨC@ySBbϦ5#`+u|*R$^eLep*p9푥yNac[~9@7*@\@ ; IEz`B~8 (P`܁+(iPEQW &)@I푧Woos[x(d@ l'wI%@>@Uq" @ 5:H)@ 1 # &,TV  @Laa:4IaY}O"z<\+8߮  ;h(gQn x _ `)@3PZ@`9(,f8zJS $0\b! X@ 95|9x|?#M% P.@A@:S XK@*`)h @ "*\l&T < C2V3& @R f`)kldz߫ @\g; R`^' 5-@ x sQ, IXZ p 1 h`& l*0>9>ms\#& $Di4g K6| 4&F !V Я u)ʳk75-hj `HlXX T. /x?.lr`A8} D]m WP(@]s@U(95&^ @}w Hp%F,@Hή@9l@()*"+= .Vrt=` 4Ж4 P XXD%Iug~ ۰rcc25^s /P p.o}=Q\pX7QHjpp7@#( <đ()(V[%S?)&izcJQt̅I>kghnXcmp8v$ЗO4!m*p\z7,^2kN&V , xLp%L{xql *&&`(IV\e#[NX?m`\`'vX88. %P~+/W,J@  pJU+(@\`sYX+)*" F鰔Rp *u2 !>M>!9H~&7* pz:P0 )OH@UFW@&'@KT 'U?h- c=`1(l% _l92ZG5rO; )2>Mۆj p8N&(8$(0 \!*@ P[@pJX6Up qi 0 @x ` ! p 8~Jr|JL>3h6PȲ_[s!/{a R ?<T1IJSᅂu3ln x:f7gHr]'0Q vx ga+ OggS8=u Q>ms|U(P.$@\@S P`u@N(% ԌD`+QX mF> d6( qW˾x 9|5b"cpX xX($\`(+CT!8P բ(`29l AA"]B7A $TzX np0)ʲ5F|2$'`3* [` 5 JGpnFנ@)PGtW@ 84@(Hyn"  `}xhX^ {@~Ma =`YP.лC@4Fj .@P5(;MR@Y\`e!p@J   PzZ't;d@q{lhoP*}@g ր 8vp IC p(Z(@9|9@bzpP@q  , )[AbFX+0~)0~}aY+7x8Xp< R#lbP`>VANTAp `K_{H|5X+` TiƀW`,,9ak5D#* P%\`'v P$0PZ  V( FpVMب~OZ.0KA@PLXJGQR@#MT"PICz?L&Y0_8,(  ; R# g_Q"@-ovpPS p@t@N:PvEOPJ(0=pb+z0 B"MqL7r 3Qpw$@j | `YU|pX-@ xP.0PEo `Z ք ,UP`AE  P3JQz@aJ?S H_>!_hx4=(;8 IMR1-0a . @!P<`ձ H $P FPlj0z=M((:NV 9~Vnx=_`!~]`?WP x,$ P;] 0 P2"p'u4+Pup̳K<`&64_~2g ݀p SCj$aj>n>:8 (A?;"5 &)5 (]OX>A@r 0G2(tp*0~HAEcxT◿^@XK @(hHRzo@E8++ +@.@C @, (}h K)7[iQ*tZAS{,)ag DUW@j%@~'o2Fg+0oUl',pl*up# ndC-`l 1RDABK93B#<(( `v0 MlswP@\pI.@Uj^IH +Sm) Xg&[** m] 8 ,k[ & _@e=rsHOTPP$(XHRT[,n+( p.@Aj  VvR8Il,6ap  IyN̓jJ U(7 I@E+ER@w.n$4?o7_R@` +L(6pXJ``Ԁ``AIeڟx ?>* %\Xvp R`ߚ?8@Tpt`;c 8 |@k7 S `SA|ۤhB` 9ힲ۳s Ü`bF]OggS=u Q˚9>l2d?f姐'@p@Bk7TprPDMJ<@(w + O (@~P@i, 6t7p )kgjY'@ NL0%wkoh h,8 DpQ_mt—s@ | M( a@ |@ 9L69 ٳ0c Tw@x>`Pp 5*/+ l$4 Pp\AT)@@ZP-Ó% ` HXe0N`3حrXIJټ4ʍ}TP*@"y( IsX+n0T=eHw(0lw4%+ PkmͩHtW cؿ 2I t6LnlFf$( %t+~ 5k~|j> -$|^ 6|  IA׊J x j @(@(#pb[WM Ҵ `r*RIJCDyIgǏ~M1FK xIgj@E3 yVP'ŸH61c\T q(@ty ^4@t!'AԂm(҅-` 2(K$ J`z/,b!@@9핧o We\Q5` \ $ 5\T QZfHC(jZ1,P@wl 48 ЀFA/󓦐3"Pk)R#>ޫ @\@8/n p(@a0F$@n @PPl@7q!Ag ! *^{ Ll:J;EdQ'@z·ر^ IP@H P P)P ]Q@Uj.1 M؆o "$^@mFqʠ{_bUgϳ}9K шo<*J @$\@ ; ^w! @vWtHA]DUgZ0 I`0p - ,cp^,)Nj#p \< R#L@/x@,U(T "k;fJ9tP_2 X@/SM"(h64<+ 9!55L*}~h6_@Ȁ7HRu >0u CPe *K()ЁP@P >LA5@> TBZ " QjS0Ey?xh[PIl'6X@Up@ n#S W'_I`;001+@(@ h [n`u3 Iu~P :@(P",@A&1'3E0=h_ p~-t bkm+>Pt%+ pJ0؎s* 24 G=X&" |_[V%_%.x/%j@}* ;, nXH 0OnES;-, @R\'J D`Hs: xm)6-zJ @vp Ml74;PQ.XpOX+x`@ @ K|l@o(@Y0Ȏw6Cp%+ Va9x@#$ wpI(HHp9 @m @ (uL L~XX E@ @i`,Ӆqh6HXPNPEm 6_DvrHZ/`ZoAR`U_P%@@uK}FsdP_ ,@m%@J3mXm1C"95OggS=u M)NGlxU?@ ?Kx? o\ Ā*s>} A|U?ApK :Pi4wIbwbNI푲3Rnq|oIx*p] @x p(xw4P;@]+-ʁ Pp#T ˁ-L b@'©5dT`|E'@)7%p>[ @8 PC `II.p+7 Ҩ@ PTZw@l<8L% a  a P UЧtjLI"ˍNP.#$as wx^@4*(J쐄;}IGs 8I@'^A|0Zؐ01Iw@_ @HKB Z:L"9ힲs4YGpvb(^?uP`5U,Polp J(PKUkj )(_0M P C0PX,@/m)垲ۏ5/,ȍe< P?@x;hIP @uQ,@tPo@<}G Ri+jN|A d zM| @(T  9~eͲ^Rܢl^-0 p&ITrЭ |PRhX~UQPb (&8`I DZt҄Ӏ&|-&Q>~)5r `3J \`+wX@wPp *P @ =Jo@p`KW@,ApH#|8K@a$T4&B=Lf-!- >)۞3o0ɂgu|ClUp; )O`(X) n nD u3,&@- |Q8P4h~7=H d93 [8P & - 0;x krf0 6uh4rM2`~-O Ahp >!.Iټ4F|~)u$\ ;R#`/:pX3  p @*Y@ M_ pb(PXJ'WQ@qaI\&z51f |e4,ҷ?[|vn,/~=G[ Lr/H u_ PHjC8+.vP+s( !!& K9ulKjJ {a``@pIl T7)J @% _@ ?I8S !K"@Np~(Tz@8?(|En)>l7R5>:^@(5* [P<@,Fx-l\ ^@( 0fY h `_P}j= &28ʲs|-f' 0@x$@ATh'p$q`@7 @  :`¡@.pB_YUA|M  8# ]=ꑖ_% )Ȳoj.F~߫/Sί #*wXXHR?; F*Š?PpA 8@;}0( >Ax,P`t" P  4>JtXxU)γ~nac`T#+@x8;v 5(c ԝ@;,@P ȚQwCp.vHFm4t(KC6@}cGG9lͅx>F?'`= \$z .@(8?.5 (Gn0KA|(R:'lBrB,]Kl*LLІO2I5eEgU0_P^P.,(hHp7 Th;d*Pl~P%m@)kAD4P)g 0%@&8c0p*g & & pxxjIggj9g@W -$R`5Q)}H(Ly]p@JPR( +UN8@t:`0'|M`k@QR8iRf feLVpW@%9o ?^*N0d@x ;8 I@'.Kpr(GS@;;< ՇP&WZ !jV|82< ~N r(L)y9@(Y X8TP^ `< l@ˈnB ހ5^6 DBX,|Cዀb) v KAb JcO60ߤoEme~ $2MHjN%@# ~J@xQ(O I”@||e+$@pJF`l/ G^@!<L7F4) }>aZ:5  a©"pXOggSp=u ձ{^)aۏgSnQv^V{ @gv(hH<D6hUºށ@( @mwĀ/88|)Q`$X 4@g-N955B5cJ6EU ;8 6v<@5"( tJ@*  (@d)0 d%xvM><  >  =` AbT4hd4bp4Iyo [? 8_P `v0 6~-TnpX[ Rpܓ8@>Z p 8*BX@0qBbXCS |!15oS؆-.JM_(XH6 l c(.P`x &lK[[J Qe = pF 8ISTuLW@ (N7igy|J4*pj$a *vu ER uA@Mr) @` NPlLAtpF@9UkkH8 WT PA9@eSm@@\_! ֧Fqǝ(#` T$TMzCd]~)~g@ @pvp( IvV7{ () XaEC2}E٤"h@c: "|PjhPnpϣiAE6<)ur#ᗃ@-K l(OI8pRPke $RS[\ @9+„zX \ia%>γWРF|XK @OZnފ h T(RU@u  \e1@Q@Gю8_9rXeanjPPd)呲8mxT;x@?}hIR0 Ԃ*@%'p!@ P(p@<8`+5E (  RP0ߍ`L95e!r K @.$ JL 5XAZJ:@)&P@QφK ,>tk&b,`}\!R| DCgIeϏ!ɂOo8:Lsu )k~qr#U_~N H8=C[a Ղ_(^p@Y<@Pezl@t3 H  @_Pa^@xHP 2 W$W{ٚxV5g p-;$( @;,ufpl(SU]}+9`t*@5X[X @:.h>aA@! E\etDt>eͲ>mh}Y^ @LV܀ lLj!6*#Q= \ @. \`AX +[P@ !TBiO.М$hLA^)ϳ|xN*`8UP^*vh@\HpY8P(7nCW`Pg!uJJ.X<ғ0x Rg  iSD[LՀJ9eOY ~/x:  @pzw5$)%EpD- e:<_<b+p %DO6(Vc CY51"MAIs߿3Vnlp>@} @Pp@0%T-*P P1`&P\a#l^ ThW)U]30JO& la?A Z&+}Na\$+p;48TM} `SX#(PVM:Pe $U W-)f͘,K&@m @P2@ p A <ѠX {< p [ˇ?.@ .?d@. I ^>JF\D*C) ` @P6@0 @%L8߃ 9?Sobs* @@ ;T H˰.4`5n^V h%+>,lR@j8ᆡJ2'`RF ʲY>~w<'r cp>T@xcx$$ GVTARܳPepV@L@kO`&`<` _YP J=,6!Qv*gzxHOggS=u ku}>)βۏ&r ×Ys}R`J @$-vh8@@B_i*߄@8-p  LX6(d`)i D.(@"UHS:8I5 >tPeE9 qU? fN$Fq/g|)DP "ׇ7v@g,tP,e!c N!gjv*6! (aL(撀J@En$-_f🿇x?lkU(p@A$)uRehpZU"rx2*f894hxH% TlH!"` c0y$I1eg ?B)~<[U8 wp-wh8HHZp@Q@H&% h,p`[D]@(l r`0@@T(K!TbV0i@WT@ 9㕧~ٚ Jl񏿆x@=` [h8(Ru'1@SpLl4P j-80<:8 0Y*u uЩA)N5>lS' p58T@fTA Jc i>~ij"l~S @ ;I )* ` X+ D8XDP.lN/B>Q . @ (@p: L &"]NdkN$ wp.;Hسp4J /, @8I:IR53٬_Ji!` A`kY " !m@K6oϧܢl* I8;p 5{RVP lDT+%@m\8JtƇIz`nJ3@ pД& 66 0n4=pбuHJ rv 6 v@00s~ _ C.9H`S}2')o EWPX @Oraj0~*v 3CR@FaQP@'0Px't-DBBE9푧3'S#*PjnUp;HIX*% 5 Pn " l?6̑Qρgp+` `mРAH|aI=eϏ^2'8 W@$AdRp PųP PªL;H0ns6h(5A00DOFˤ=ă(I9?ldzAoYw@  a`` IM-TV4( Pgp@7PP"1%Dt(k33 i,Iq@!*Gz&($\`;T2.+>(x,'  P @xnpahG':Haw9ʳx9ȍ%/3 $*X S`tChg ( |/(GP><8=PC(KpNE:q`d2܂},HBh)γk~G|jg  wX(hHR,@[ErMR PL 4P(!|>L]_Fl*0ȎN:?OHJ@*0C$Eʳ>~W<_4 oHgi̭ p.!`PA@:@bU2ރP `YpWM4W :tf&0Խw%XN)P^x VƢW ȍ}j!f0p IAoo 5q  @\m( @Yp`[ {|XW]A!pKԋ01vРtE=i1GOXOggS@=uB)lx-x$ SPp` IuUo+YrxEn+up)`hg&m@J_@"@aTCh$IU ԹK| 9ϿyiXm:??TfP^`Ǹ(hHR{!@ JJ@ے0W?L@AMMeO`@ av~܆[a^<F\S(8^ ؉vp ze wG>R@Rw(PI@ph@+u0H%  KnA& i &jT\4I.{w װvD =|%J |zz IT WQ"@H`@ pp)oAU< @U(EpT Xb4@C 8Q'0 "iR y{_ uk:v>/SS)0~)p3Q)}H(,\x-+5 TXkPNe+PW('p6Lp\Ё )0NhJl@@4=! :^)2>l]" @ 4$ S$C.\,vSz@%ϯI[@K`@&0!HlD(0㣱X&5 eU? Ոo|fH4O-;\` IAv(aAvU|Ȃ%xNbj4SN`g#1& [C >6xAb a۳|5"_*Pj `>H`R#LZVp+ peo@p\ z@0#laAqKdq@X>Y:iABGC$谞)W5/ [xQ@d@x>;4(XH#O*L?2WHc(uT)@6_M2 X_o,_/ dL jRPNg&!Q9y>Mͅ4)8Va` PT, @Vp/':6P@ PzLO4$`%({ ,iҘOd.XdJjSJuPI?NQpL,Fvxp"@QT2l?PK\`r(՝} h@XI $KxlB$I㞲g } w!NPW @;4`4$)p'Ի   (P qdA۾I πfg ĩe.PI5kG5  *OP$w Ij@ ͢`YX@P@GPj((%a&`P+@.$nQ>xMW  9s; jIJ};$UٔU(pj$e4T ( 8P\@F(nPK (-0R e CpFbCg0LfK)kl2SUa*(/p4\H0gV=(,@M R 6!#` X @A*"ې'zHi$YҹL4gۿ)\leOx$J{ . j$Veo3)pCS@6*J@j( @wFHUP~ D/3@,E':~p|шg'p<`k@UP;LNd&@[@4%8\ 4s|M@`k pj4Ph`:0 X YV , )>xO*(7=C`R#LbNVV{7*\r@|Fk7,`hXH0:IgAճ&p.mA+l 9Mz~_QrKmت㗿#'? 4$)hG7p@%MwJ(@Zp` 'F'_ P+(D; ?`+MT$t `P`ւ0Q 15>lVnW'^?l(PnT$0&I؀ZH&P@;  ,ˠp# =L&X @6% 8"$*:Ơ]ͲJ)55-h ,$iLWx ILR^i]~B'! d(D`(Pw -@)Z [a8n C!j 0B,aGA ~@( @Lj Jb <( Aϓ ¸&`p$`g!X(СRȋ`&C )6gϪ܂?'P``R#L`M P 2N̗Bp{gSH ,|,09|S(THZAyp oZ&)ayW|ş9XLVdN( I)7@ƂTJ,<g T [8UFFE-*tUM1'A}!G K|"TB) 0^L |RyOggS=u#)β|Sn8 @xJ @W@x H5@hޙ2TXτIu5?4}QuWPN@@A@ϡ* g @TnqP:R.} jA)$6n l(hFM=PpI5W>oPWCU/  IPBdXQj5P(l?z(ljY4@&&0\0N8!  N&4I~n5³}[H4pvI )u> R\ T:'@`{p  |Q ,( Ր `kHA9gϳ}9xVO@x  ;  5J @ex^P @\ظׁ t  ^VV`)@ACލ yP0=P(ѓz>)ۚM|,j:x*PY @$.;H$x/ =*unU]D4 9 ^D{ TMa}6BAAsa4b›%~|ٚ-hjx|F*pR@@j(HHRDZa`O0@Y6.@ PO pDR LEP@` Z1  Wcf¶X]~1>muܢt5%n@PHi *R 6p&t ' ~\@_w:ؚ&(VZ `# $5 (Xd%4)嚲Wgk4TnAk^I||رp  I._F_ @5XE>(: kGp(Z"µW @a6 `CLxLSNi 呥5&<_ ~S @ء`5@A@p;T-]  @ @ P87@|nXД*NO!8MUHh05H^` IH?{67 }OC(Pt2  5*W8t:j5|)@ @W1P LW|pOZ/[C @4PB @c:MH5ЙJl1@YMV{]@/@u,x@ ~(A> `Ob _#8oY#({:]~I,>[ @Ȁg\$pC = @U`b+ % $ :U l"xPlE t[+J@ՒH~+luL?8pP^LrPI /(^pf` @?@.PaC8R۾&m| \@,@BQ0C eNeNCaM3)呥W5Yo@W _~^ @(U$a 8`=mOP M((o`p % W.+RA_Qlb(T%6x 4t]rqP9Vβk~I|ga~Y4{*$@ .4@R~C`6 X]DP},D*xv[l !p~,3 kа>0 <8N4)g m8U I@$w$l`؆,H|@g@OY PzX69X/`)@ h6цG~ )L88I,OggS =u $"#$"-,-9CU[N0VP PjIY`bD267; pp s;ԭ , [T(Od`+&`$lI:oXEm 30 ;HIs & 8PW@lDc 쫣Z`͕@`@xK M6A 54B@lcmr @x8*vp$a ;7,@%@ @^\Y{ <HVs 8!UHi 5OB1A@}ynp +7Gcx<_< L_*('}vX(XH"PX;2x8?X 5 @PhR@ wlbsO rbOtHa9Lrcmx Lc #=C ;x4$ P+[_+Bi HԵ%@ZP pg2]tj^ ` 0ةI`:,h)VAv{ }7x[^YP.4@$)߆ Tf* >Et#)` ts+iR(/N0: ( } q~g cx+( l.@A@j-1gP:@9\[ 5;@gZ DD %  k`IM@ V6Q!N*AN 'HSe.: \a3^|BEnl<|9DYUP.b@,F!^~݀ 0"@Y(u42(@LP[&@~sdC2\`'@ 9iT1)mgEx'@0p`4$ wNo_h/`(+ +`uBsׁP,$,(n%`ABJ ĩlAz :9eg B?'P v I``֟P <|E|h†z:(Ccw=D(th$@@1xI핥{4@)7j&?Tg =;;hHRe5X* (@@) , u8J)/ X)P" A!Q0ai` ,F+xOj>h'(d@xK8;\$a @Th( (2ႛp D_b1,XT L@[C)HC2Q$$th0MH98I3}kP#W %pa`5@A$ _@E S N0p \RpA{0]xU6[@r@}S' X3@a 燅G )ϏgUn @p` 5k)(ppQ@@tP\?Um\_TRbiTvC IJ` CX68/]y 3};}x GPn;44$@B8Bv -R:~ @ؠlp @Vڡ 䔰mBG($+, BKl4_mM򣆾8=*Вc'%?`<_Ϗ=AB =7-+ojA j,_*EU$2'(.(yl8]'wl<ݫg5W[AB4>P9W;Vib;Z45ݫۘi[Z17C9r\_ph)x'j p<@J |H(h$1#/=F, U @# %t~4J4wGEjġ_=nmv;d+uq5P'L© c̀V?|B)ϏgUn @p` 5k)(ppQ@@tP\?Um\_TRbiTvC I VK@,xya~k\j>jg_f㗿L`p ;8 Q7@njuSzb( @T 8uU`E(t8s7M KBY(L6n@ γ}|Os<c4[S@xK8;, )1Uy6+t%p:@(+8(^M wB]V64/> &Cll3A*Pp@x~)s~ƳVn^U!KfT P4FɂVURXVpW h: X1X`ӔXa(V)d^q@|H%975/ 9jCݨ>g5՘(._ NQpv2yP{ b' w @}8@嚲gX[x 7p ;R#@`~ Nkd*@ P N` Qtp@W`В@y@4bO&BbL`TbTxX`3yO|-j xy* n_%N8;vX8@ $).t"')`xntZO:L@@C zP@jt#0@~NݱN  P6)Ϗok~ųF#x+$MQ @N$w0.$ SBF2@V~&\ tPPS;_  KOb@xRALI薱!D6͂43ZA+ 푧95 h>:~Vp@;4`&5 ^[ @6<-@E{a Rs8 &. t ćD@N `-B#!IYx5Ph$ S%@j* PJۗp0 $CSRAlA*QQx`O` q7@IeǏHU? a3] @x I`.@B ~vJ =E @*Pjp"@:@  ` }{  `>SH<@ 3*pLAp2|ʦk;@(YJ@} @@@A aj'MwjY/P,} \ *@tF@4܀ 5TҍV"_p2ض w#C(b )>>k<` @.@$+@k u+4,@)as7iF|,p3Y:$a@@5(+ \4AOg%\khPX@^]aNx`3 Ә@9%~P?U T(HH`N (%+u@ p. ` _< ?w)l )Y`jp~ >a00O,<& U1~Nͯ- $&+(pzwH8H%!H @P:(p,2@](X %~Cb[`(J(PP' @sKl!rci_ <ۀJ @\` X$*~u +P8h@5 ?t`EY&܀O^ *aBG)mX)0 ;@ Paj`P $ @K\`3}[pWPX=X HJ o D$4@3u& zC(< a955Lx*PyV b$@A@^w+W@\†Q~^`S l" `&&X#S~Jo {%-hg!8( \Ώ `,;).ak-l*_O . @A@j%2t +| t Fp>(J@xiwe؆|&ı8&NРLTA9핲g BP*  Iv(]@v@SPi e8 P } ((5`tbFă&踞S||_rIǿM e<_ U% . ;hH&1';n ]\HSp@tIJJ O Gl% ZQH>IO@2(K$QPW Pn) d  _5)e 7x*P lFpQ "@R(  .3@RCz@g5˿CQPI>5 FάV{\nSwCzTUOx-$ܪ 8IRplF>?ʂ`op: |`w$V`!x (>=a  YW@)9АГJN9xwO#H~VP^}wX8(aJl` ,<(NQ< x54@vo6@ `}@ ͨT6)hk@mEip]$)6,uC}Uu lUp;4$a!I, \7M(Ph@@9eBOM@ pB(lRX@L @TėwXl( ʳWݖ4>|H5.#$Z }MO`}`u7 \ }dP$Δ,*XxT &o $fE9`t,=16dzVnQ,$o+(#[0[sJ@p@!P:tP޼Lԇ&O@ @Y118xBY¨P Oė)ȳs|ۚG|jķ}C( 0 Iyٚ1ʍ}Q!x0<.a5FAA2tp7 )ܣ+ $nT F- A ( o}ChO\PcpT,HHIʲ}35OH~U5pHI@ E 1+$<A)om! ]p|$$@R!A(؉gq CxP ct$2PH<,Ik3\<+'8 WP<@ H.Np7w@2PWJD [`k`B2 U.>@j JVKS+hvxƒ 9o F8:ͯ+('}x@@jIl'[43x K(lp l %0PaiHOT(hd8::=?SL(x)g Fx?+@8,O`!$VB >SÇf&iJ|E#>9PWOJ{z\P@ Zv#uuݛ@(U R7]p!Df$@€{T(b)l3 :)呧s|3kF~,PgnU H R#spa( W3(P @(BaAx6l!`W kP@x&P6!܍ħN@(b/u$9AzƯgc3pd@O@FPI8C \P(PZ@ wJ Hm@'p7.U|<[:&☄斈 ISzNsV}`_\?8vXH ղ{bDr|FN e@P  @wP^-`nHD HÕH>S I5L !igyUD * HPas zԦ pN(6Z h=0#%M]B g*BzA&(p~($ Ԡ @X  |oXN@wU`@pvb\H&]0f@P% `|PWh pPym xH=0}[A,4Tg %zH!T``OggSD=ug)t{naaJP'\wX@4@pP[Uf wuJ o PmgPZ .0݃~hN!;_-D PQt a©M @%Kx:YT~)0a5K @/(O<@,IL{ (p@CJ8^]Yg* @ *."`P 8 р(6!DGtb:G~땲W-y[:ON {T0 5 6P*<$H*)S0Pvpb \i P@ R@ 20-w#J[  im~J5?6܂?#p*( lX4%N: p5 W (f g "lqX?b p ,l>BC@Z "l6F* 2)7mFx/J@UuTphHr_)l\pPP@X P8_ !,PLA|AIePnQv`h0n<\ ;  I66.6|![`)t(+5@ro!U  r cp 9zp*#&핥FxZUö^Pn.  I8ZV,Up s(@%P[O;4`S~" hG`:>AL7Ƌ~b"76%po `';8 Is 07t*P @-lGt`;f` 8c*_<r`iPVp@k8c ;ZY HK9#x4W͡dN :['H0 `Z . g t@%@} q\u 8D 쫏9 F6ѿR&$W`P3,6t& ,)嘲WyٚxV>,;@ GT(Bgnp' `p |@ugP`_t(@ (+@H`tb l ԠB`D~8ngj -h<8e @or5@ .{@uu(T P1V@釻@+5X)@%@lolB)a`65^"uβ`=-, #}ݖLNU8vp .FV Nk(\2(1P.Hp,|/I>SPHvNilXX:)~nxuU(W @p$A Uk(@]PX)_P^+ eE *P9jUlbc9횲gVnW5] !``-On( p %@pPBI*/ K *=`( f3-l(JX?wr @*7=C`R# HJ  )@Q |@'A9 8؛ vr Q; Ga_P &:`,J K;5&7.?ԈI9\D0 Gd=nĖ5WW=^ _?T 8jAX},$Ed M(T6`$Capw!r,K'|Xo( o[5g AHs)%]GlC10[N@W% .3;48.](@"p#@eҨpe<: x @ v /8PP+@eB=<  IO *@)kg/Sş p@8_L$FA(M.P`@4  U/|XoX dTp )i:%5N^Xx5j 푧~y?Y *pN(HPMT2,+p@Y@{ @&gc Ax9[݀/ _ P+N 4j"P(PO:3&(I1y=3(5UuUW.b$(Jf ,XЁNpMP&u puXMIGg9-h<|U(p@@j{B 7(p 8@i/pT gW%llh@8)$(@pl%@ !j:ƀA9k~9s6|)8<P(HHR*;P |WbS Mp8@t|8R//XBQC/`7@28 @8^9Ql V@fS! A'  H=ǂ$9t:mrm|  @p(.gX@Vk,7 @* M@SRI88Q }>t#,T_1}HI!F1VX{)|o&?p?U(;4`$$ ww[ !.P%\ J@DRnzzp%Uh6T"b#Qm :\-4qeG~gj.ij*uU@ @$\`vp R#l`+@YhR@ e W@(0IJ [_6|  _ 7 tA B5L hF|{*o`@η+(p, RT$$oX2@*M( x'5:pX /H dJFbCF$P,  Ҍ o()eųx_MUpz`p@0N.˪\`DW`(@`8FWpP# ,pb@pGT/(7$6mPPF)`.l$_K9.y[sQ:7/?A@.;(tT|-@(pAO tiPH/E"xL;[ ~0 Ų@a `a:I흥ESn( INI)e +J@,U/q`k`B3WxhH8I@,Q@oI=L <`;?x>%R/Ɨ8U9NP$)K7@ض0e\oT @ Zh@l "P-h%]/ITL{? A9흥95Y[x[ p(;hISy JPW/|9XuBkS SQLo7*~  %O`a&p P' T@,aT""So7P@Änd`I~ەcMU*p YP;v$@~5 2`8 pYB8F @bVJh ICcp7M (Pha@9eb)Vg5 kjO @p-vXHƤFA;xG }F =a%%@| @C@)@++P}%(&ʀ] 6OZ OPe)횲5& ~ {`sʢ@YnM6h@DtC']AxZ]. Q@%B:~# 6qLN |0y^lߚ [}Q 5< 8 q 0I@{(P |h,<;`w !Un;()0hp@VB( :nF9. opO赸}%: [ @O8P HFt!BU @ vwp ! @PJn݄s2m_8/|Q ɀ 8 :sO-Rp[Wo; iwA~ mièK-ћ F4ױ(S*XՖcm)O}CYM.ϣ=m$ z=(p4@A@j\jky1z18x5!@콵F@RM(Wh4D"{[T^Hq\H6q]bS"}1u$8)uOͥxJe^s@·J wpwX p  Ik |ڀxX38Es*P@ pա @,l? 0:@]橺Q8 OggS4=u?229gǿm0?@TP"*vh8@ P$tp YXp"@5RxFT] Wy}yyj)$9@PC4 T9uVۿ=5TnQv`rNU_UP dp @ –P@@ Tp%@8”YJ۩(+[p@!P@ aXwQ-8E@8Z*a tEɋ% [qŏ?ҰS9BԿ_`@PNP8{We~ l T  ͡@`>NE` l@) 7 w4vA+bF}Uuez{RU'A<P$wXpD|x 4`2Rw p2pRL1{]Po'5 P@p CPKrQ`|zǐ p/zTRbi(Juځxh;7}H7 O,7sTp @@S `L+w? /d37, @ڀkYe|E_m(4K$ath7 H,~Nl{+9xUK |IN-J-s#0C,3QB7ോJ@b(y݀!tA8aࣾ \d >aL/W .`(!"aϊ6H$@G6TM6C$ȕ"=$( lBWOB\G`ۦa=?J<O@+Nzs UL0^( Z%?,' 3cf)j@9VoM߉4gNMPA2:+DY+2eX~gUɺB?|Xe!L@  P(fla^@.n\*@Q 30a9.[QR wS[/pȨZsu[WQ;nR UAD'&vMOL(*At~1ܕeutG1fA~Y\Q0+ضݡHևy @\ *i %P6sH?@"T (ŝұۼe ݝ8e>%)cn.5vSM(ɌQ)(H?qEfX*d@(hEY>bZȍ|w-L!^`-m0 }P(+P"Sc] Y$ Q`( P RqF1C I9k@>] jPML״fTۂKH=RJfl.N"S % : a* r#4kXOh M h0(ܯ:-p)\\ AM4VRxIJEq̕;H U(n>oaӍB_@,F`I|- ~)Slabef4vlDLMxdwf[kBB P'VUAiL߮0+(R@Z#* u=Jp]2Cr҄wz|C*.Nvwceo7j;WRZme.K6'Hq}>,g+m# $Bȭx%5^;GM$N5 \ lS3_sZ=%A5M.Z;Use296uV-!DMV̀# )IHcs9П.`VZvP r@ 7 hP9u^ MƆ]. Hە4= gԴZbaZC',=ѩ̮ ]NٺeQ0Ctn%_C𰁝`?Ou6T5(TNX:Bu|"1c;1y؟as>#xr1_p SS 7H6ZbpqqJ a:QIVt~ȽogZFhrC;<ؿ`(BR4[pm m\mq%cFܧCd@2&[,-Z%8(]=hyieEȣl~k2!ԟ1 I睠(!*ۀ}P;jD qmbt/P}Z T]i* /T^8Yz'`ovTS@ y@` ^9ѧ_]BڪO[6{>X4[ܘFPdC1Fp8'eJ(DQ BW$s hw>3Elz*QEmR5p[#^v^ ,1 PJđɗ0o{F!C^T=`3 @CԐ\&!` @e*T$XJpL.~. `3Pp2Ig(8#2EV% R&Zw\̳3\cS(LOgrRNuv`]qێ)'H`"<@>JvhΉ"35kx@(4@` $IR^ݒ Mp tP]@DRP#MPS7\(&vT@pG0T6Cx +`(*mހ m ^J4;us.A'`رɜ$ [8f< R @(@H IyTo?LcA+J\*Pb}Gw4gGTa@? (<t}hpJVu ?| \@ @ ($ *=3OR<*ǷO"PKWh*!?I?,-.(ea0{Q(ˑZ;3Aɀ4%?dt]" (,@7^:枓c=ϖ/0 \q|##O<{ zv s P $A(l 6G xQQ0x @)HJ6JŽ}, mku|O!Dz*ȥ0wyo[4$`v>:\;˗@<,/%$LYonk(A_`X*tQ_^|~gB( A6(-S6: ,+`r,yP|+x: >J1k|m#S'Oh.xQ״$Ij'`_u @3 (>h@=.‚ *xA~c# J pP-8mLςoJ(畏{CPq`a65 68x&^JZd=Ѽnğ p%nJ0_@Fj + =N88jl"A\ʀzպDXF \W/> vи3V8,Vw ,^JfĹծg<H $L% & zPU(TV 0(<ײ@2 c2rGSD1D\ [>~/֎[2 +` ϯ{5V, V AP^J\ݞ(n5?Jh &I sqq*n A z㩨\36@n+oMu@% _!ݼ-[!'Pӝ#JP kB)ԫd;~@P[` X>:ĵ0]aku@P |9HxX.`.PCRKI ,uQnX   4`F}?TS !a3ecH xoMGC!{6xD! e+J'(!Y5S@=H0~:乐Ǻʖj./ .`4- $ Y¶9M8sSPX9pn0 C_̩ H*r$|`\a$ /JJh84?>(Bi9vĄg,56Gy5zMrBlP ƥ.UTr\ !>DjH7^"@P/0@~~enɷ^ Q5:Ro"_`;EQAB@*d d]@@WSN)B˂W~:|ې6p,G EQ@DyJCx@( Y ܭʣ](ҀG/?T`yHjIPhs^Ń(},@@+@%,(cu @?ū|8&EAA#8@?Ts+v #ryPuk[\; @&{jלԬV;@CY5.%@ד L2$ڀD`LcCB*( M  *}U"c \oaha@ Ɖ+8 7JlezXP$V` O:WتyxUL h^y4xN ^ j!J&50ɒPn(P Fn 0A=BBS9Bw% `h i+,I\@5vh> 0a*>^>?S<؇^{ x>xhL&GZQiV,ERh@\xS"@, 6 ΁>l߉?%Z[r8 BE0N~ $Eֳc=/Vr,@j&9XP 2)فϪ+"52 gwN9 $LV0 wEJ( P%ЩlZR6UQR2WIcm2 V HOggSqz>׎ | i wiڇ [\ \@l<4&;`"OSg լ OFJ8FЫH1P(P@ZNJ 1Q?ap$p/ <6I$zMփn pcw&-ğ*(3by;SRP@d^1෉^%l@0(\`p@^8.P᠔H0Pz5P CulkE͒[NE#g 5  H85 JsG~<x< , <'d2I҉ei>EY ZJE@SSpO[Jjcӥ{L2FPo96pg%  Kz4 `0:@9&'هj0 cL$œ̗.)\@2p*B pXɀ?@pHЊ@cusEnSP@XoVd0w@,L@ Fn ܇ Ϡx[ W29be"y{b p < *xn0"@ohA&0HR_eSA@&LJmvt+~yX(/E#hVZÌ v<v@/0cr `RuڵIum_T(?8"Bp-jM(e@ņ䞅,@(SN[,])|hH@U p?ax)G5cl}(t%s5( zrLI峷~(j?@'(bA $p'l p* _>1az1/jO'l(m تP:` 5vƑ _> 53l4֠H2]A?{পB(C dm~^;(-q~7^)jWi_%F% hdphpUJǃ =rH,jxH.`\` 49б@%ંr޸Gрq PG|6M W Pj:<)V5tgi.@] 5IkԒ@5<R`)8-yQl(}2BT `chMe Te+P^@+:(p9G15+WB), *-f5akm%v SRx@ >j;`A_֤;gR@Q(HǁSЎ"=@ >W{ ` c.>I]䰟"8q1ϴ) u+P3?ccth$^ ZWڒߥK 7F@4&% &YcD P@x(EV-um$m*,G)*A=QG?@wC+n!X<NH.P)q4p d2**>&{UPq^:2՞Հk<@r4 <&IPXPWp8⒌ TROe(N) ]S m@ EY ww.+Ls*JR@)4Tp548#  ~JfR1rR}% ( XB2] j0 xFwUg"  xN* UfZ Eܙ n*0u !& UA A"0*8YȻ <@܁;$aF HYT>JRd=|tgn 0* 蚖HĜ8|W4VJ\d=TܣL-!?W%~ @H@t-+)s\L T*% / ՄQ5hxRIQ p{1 u'uƾBx x489B^Nz؄tUu`~JfcJ\~̼n = X x%$I@() @5@]`K}LМ^,>`TpXI \M:tGz x@@ Kiv[a?L~iTXi< `|@x~:f\=xV?PJA0&v$sq)M p&\ӠBT4@& ɾ`DEqq*,De?jp1*ZJ)"*8lȪYTa@$OggS0qzR~:fZ=ʔTۇ('<@r 7@5- $%'0w :M@ah'*Y*s1f8/P@ +l?;#"K !o, S 't& @~*<>r%p,.--1]Qi `z' X(=|׷x (! b T]Tzyޘ^Rg@Rmƪ_cyMMzv,΅+!;ʰ|ۏ$.7PL &J~*lz? 4@-kmS*҅'x(w@KPP!#0I SEPi<V5S.f1 x\D- f$PՐw>~Ng&pg38J7L0h?X~%4jH.l4&IPB Z 0 @<#pe蜭%!kWlVxFW pe,tӒޯ 0dn%Qo^pz @$lb:\@ڇCs^@aHonp$RtEmZp H~luoCcSR(cy2,ݴS,3rb`t::>V^ts=}g @\1I(a  ( @((ˁU",`hH\Vc$h4*݁ B@-xڂ?hdbPU ~*fV=m!|ps<(4tdp mHD" ((p /lʅn(-phso+pT+(l:BT _虇 ' <^*{+8PmxHF="*pK(ZjT+O4X^X@B(vlq] Tl90<8p** c 6epo0't`~:f3 S}X_/.x @+LGF=~:<h@u( J(ߜ  S,e4!P~>Xng)*$ .< e)@4,06  >JhV몁8}QK$J/Pt!T<(%PEU i `a1JP fCG/¥KT^ j@gU@CKB0+8L AJj‘ۇl| p^%p РRMKj$,קkap>Qp^Ma+ Bih$8bG^P BUex6-ϸaV3)#0Tؾ!3t  J*|z\4; )! `W#x, (0s gO$˴pCz (v7m^hvq MUA-V!oS^jc( $^J>!oRd+p /dR# [B `+ /-* UKt@+ˢu#N/A! <*R) Q4`lc*,U\PJp1H@  @^Jў&o~ :0_y@B8Lj$$6g)t% @5U@@_qX@5 D%A;d4(q ~J1-y$0 d$>j D@S@!R* =hV@wgSǷ6r 2{ L++vew@X@@ٜC޶2܇{K'(}q2zs+u  HzKAr@)0pWoHja 8`u2\s)P W:`$@` ~:fyZpj QVSf^Oh.@ `IM#YJl  \@ xS4«X(66cQJ#. dlUУ&%c0a@^*l Kɺ@CBKI}pPGUQQqft@3M1tСBPh.XmilR8%? +˶i߀021pwM <@OggSqzqR*𜴛yKJC^|*@l,Ndij$I@㇬ ,( (\W% EH"@&u# 2hw1-S8_zP@ Jܵڣ]ek>sxG @$k`N4D@:@MS@n*Ab▢<%PTx#.$"6owdhz9ܠ!u*M@Už 4>JZ=ּKu/5L&@֟nKx @P `,D*M \n H&C+Z+VeV+:r 'ES%+ n)$C @whTpZ ?+ LF=f5s*fuj @ QOIHdRt@ ]*( 9 U-=<8H,b6cRzRn$ E?Xw N\@qT)P~m0A @^-hQ|YC5-$H.j8h1Uu)-.P@W4S,@\f 6p-P\Yp&gf:s\עD7AIV ĭE0 IPg"= @~Jf2ؒR/P?XPi HP@Y#>ˋۺKI+ _X0I@ QЃE:ĵc<-9Ձ*p,@mAjMĨB,9=Vj™S@ $`i. XE0NQDK #w8K? VDeԐ|>WPJ,aV]sw3L >*ZHU5CP|/ hxdzIx(3 .ԁ.`BP"JP(B){6; P@J0-SӇtDPټ F 0> x@@>*0k]_j<[ `] h!!$ll\@@Ch$k xlh | |-7 pRAS:"Hƙ;߭f&cI 4t--@@CX +^Wg9cuX`HLj?S.Tesp=@ 'A 9E pY` *1!Kl 7S*( S < lі[8σ8[T) MO,p@ F#r/Hm` ( d$k@ P H? \ T酐p*v@wMp?L`(*̈́MHV^"ˌ$ 3 5E_hSL<]N?:@#v/i+- ` %4@,<؁$c;n.*8 v t`4: 8+D34m)lnVҝf?  KCҠO j)eڮPՀ2bp< )Ľu\(_?p^Z$KbjpPZA#:\VMJkJc*@@mH 56SZ: xqxEz 2¡4VJp+ 0A4*~t/ l> K 8.%1΍P.'W\ wp],WPК]' 7~pl=O@ xTDxآ Խ$~:1c]aK_%< `[$z2t5>m.W R ( @**tOc!4=6$ ~`H9 )<$z   @%С` GIGxQ5 .`<y0ImHc `WpLN!7- J~)s4 "]*mhpNbBQچ a%PB۲.!,5 0 MuIFZQ[j؇J*^^HaiI84 <\MU ( V ۯ@jUZS_[JY;\KC±Qoʁ@\%)rvP6(͕ItIF=8߇UH.x/d2ITK5U8A[6A2@4iV-&3C| d(RiM (x'@C-SYTLfOg X `I&+'Gcj30/bI.S 5s] 7`j%Z]RV"/P@1R|~lo6 'u8n !$$|)&=j|JaƗş_i~ $@@}( | Fu¨EretX+s{w8@4#P(.[ ޕF(%܎yA~kC"m«Uq#v19: Q\> @A j `L0 5r/֓ jW%I"V x@@c21`U8 65(@"9.hP6x`FޚP!6`^yijFU x^E2Iv80Դ% NJP\APO hdF\d 3`g TRQ.sV`@*)q x`K@>*^ZGG uH3p%NBXdR#;zمzBo сgӃvzJ@sS`,I-/i6,?`x (PVpe 7\k4I@`4@*Ru\m+-U&#lA#* 7 U_EQhg^CPs`q˥*>[S,> mC2hqteR;`0~+ U`x^:fwQ=ᥫx%@';` )@q_~-Q]0+~BAJ)Zlѥ|8d8sd* T?N"RtIp2Ry_HUPKz -. 0v"~:fR5m+kJ$@<aH$w`/ UrH Ȣ(>[<E TT~o/ġB[ů9hϙwc 4L`cڪxP@ՀWq>J9['j?P+I];ԑؒ W9:Ei.XNsw6?4Q_,5̕n*WSA a ^"LU,lf{8]VP:~JfTd{\ek>K<r p`hL$Lb;tP(PP ݁ PwU{wxA!㉮- L:p|n! tgR |Q Tp@4 /vQAM'>'TrYHO|(6H$>>JFĽګ=K'  ;` I @ [Հ q4cJ)+@H¥fHTzIf³i 8|A FC%Uت1`Xo@&`>JVdx-]j؇«_~:l}djU h Ғ$C@ s*@"R`WR.bU(xoap_po) p;@p]q/̑-Y@>D}_Fv ѡ{y&cK ]͇&:&L@X>:uoŷxBKW/ ZL$Cp RH"ȳfRqo iQ+RGA.a.u $ēoǀNF=LPoNl%A C&39A =<`;^*ZQf=Psdr $c/P'u@'BB\*@WY0Y"B{[̀]0C+rXQ绁u|``V}Vť?! $-G 8zst@G`,?NeTu`}=f U`p  ~@՞Pxn"(3  @XA)tw6 BЬ;4*8(H!\^ %F%(lG"~q$9K_ 􆸯SV DZ^tUxS j 1F / Gph Xbuʨ(N|\q TXyg eM[VA ݇.,a/(6`xKQ$8Upk$`L>{4(~\ /0q $ [[W lhS`! x8ު6$yJ,TD(M`DUGww% ?b[ VAФ P ڄz eS?  OggS`qz̽5^^zp%p%q$Iڄ*$OT1Q*iPn-LKBt/(@pvـA8Ȧ kx&h8/h付2!:-TjF. H~*f%몪p9A p~I c2b]] @S n!.*lt@ iJxJ]~)b S 6[jD5ܪ`(^:QdǸë ^J.2 db$t nA- Xe NQ%D@KVI-ࠠvwL+PP.(.@Y Wk0oX9hyHP^J05 dRjJ;I V,(p zӂh RtU \K251+p R{Apq.@X ! `b JґmоLll\Qlc2I¶O xbJhS--M y@ .-\u0H9|wpN{Ƞ#> jH8dAV8# ^Ji5϶*T d0>P'I[$ '<)@)zHp҃ `" ^t80O`Q4f?{o!*T OțmRf <J6-m~*^xW < W2rrJ'8P ($  P?>@Qs> `Aq; X^JRl* PF+ T(T|p($<>Jٜ-]j \.`'rLj$A 0? P nt'6P"EʿlV! M)(4R# a8 ( `u` Jan!1G$^J>;~*_pf]Z"U? >d,luL/q[}p}A0][@(r6Uٺ P dQm@իS1dGI0J# p_=du@8&Jӽ-><{ \@l<@bH&w@iҙ P@uHHpGk LF7@_ %_*`@}/EWh<[% 3I$%nG@(pKC 1A}pr|vV?(.+h 'e8kj@p*&^RL]iK~ۇ'_/|I`=p5I-IB[  (PK^QĐLTt‹؂@3@[pP QdF*S ?c iUFNӤ`<^4&~ H vq2d]*p(P`8Bzn pƩ#])~HhW5@p,@Ljd`37xE î6_epAe*i.+pPT*^gsHN+& w:fMfY:i3Ix;;`^JVdXϖe?<lL )Pb\.s " `|0!22PCߔ~]o `S`0d#kv_PG RUbq4%h Y$C  >JĹV{bmG ^% Dd2In^@$tQphN1B@f"xlkKŶ.=\OF_udUK[meo:&#.FޥTQ|TP[X  ,^Jfĩ10nfx@2l,;FS@S)wUi7 ܧdV>dLuWl,SօSgR^Cy3F(qN=jX8JLF"zD]\A %ht^JR^%z×/s@\.uLW_^Upp|;Q*z Bg d6+o ֤X )h+ RsE%pxX&SUЄZ $ܲApR>373XJĽH=m `^_~~"..@dRH|K n*8@`P\!)adfWF [*qX2[ \dbl)\y&p7TPr ~`HLtOggSqz]>Jĭۣ=V[fN Q$IV4P IB)+7)$ R+j@a xp`e LǽDAP偰0 \ '0@@K/@>:%v5eK~URp&@B!f3/c%9N7%žeLlB ,DH>ʽv$xr? G\ L$)sgP^)H ̞j$"*![/iiҚ E@چ@P^)R 3Xsm ǖyK52iy7,L ĵH~5H@r F[4+:@(pAQA|^gm 6BlxtBi&|G)pEk`qDe-gC(3xXb;@΄R0"`Ob&`x@>:1|  xI!k2;, KA. ]Co*@,Dp;6 .Ax PߢYpT Pj(k%t DI @/ ~y#A @PHZ:^^י?L}p'p`a%$Ix0(P CN `3:ԎvN-(@W;T@Wn.!X~BPY h\)*p,`,?[w{J$0A& EZv4S,Ữ/,@`=I#V}(K@(B)_(gR4W" ?U%2 ؾz4P^Zf! } Cx+PT` 7pzx `)ڧ(>S@u'JG<@׵d2I2$HOvP H"@ p%{Gˆk@Q)1[:@;myF+3xW;`/+ hqQ$(,@aQ)F%Ѥ# ^-u%076F=F*k;zx6 HT_7& r* Jڕ{j(<>"w@ 9,@ei͚J6xUg, 9鍈4|V@L 9&G=-T ?RH AwH&IҴRtTR@)z)`:@?qH80rQc &@IP~ JpO6q oC(ʪP:8X톦 W*:@ PI'U,Ì-pl`+42XA% t@  ( &@vX~[&.u^҃>P *`8PJ'u@ &&{ՔU XC.K 98&%IJ8oE4  0ʁ A-M28@@Q܀VDՆR%k\?V F %8V.E0Y`Wz< IO-Uecϳ$x^x$%Y:MQ߆"PPBpt* @T(0G(P 0C@& { l ``v n %<:@@@I잳-*0K&P<:a\ɤFyvn|P`I ,E]b@Ak xN"k8mːۈ8`I#v#( (~WXp:H*v PP IuNknH d$݆%KPM9Q5 (xg07؂?P S {<"q l,zYY>,L<I-4}k`pU ژԒ$aS~ ` D(-4lNP/l : `bhtLeGm HXF h3 aV&I .\@Q B *s?yWt^H @bJpW/ZZ)m>,@^PvItCdE%0PU u TX3  OggS0qz k&^OGA}x[QP<;l$NsPP .O@WWT uBH]@Qn*րAx%aibՓI^'PU`H*L~if0P, H>:Zpuɫk , q2.K[ֵx 0VP.M)B@Ppv,~ hC%l0`@}o'5pDH8TfaB% _ F `:9vH>su'Vp4 eLj$K9_ **(%-)K ruM H^<%<1Jl(~zpp@/1I5kpN"a +TS](+D5v4 ԋjFD]!=U(P Bu m!5xa?!Jk / 4~J{5m7ܬQهڗ`p c$JhP>r`)( ^D|m (E/s)܍],,%4A]x.a4fª?wxq4|.YG w#pQx~J\gx#vp,@B" vQp P@SޛСxєAb71 ԋuUI$~AhQ;,' "uR {7ld0fJX47 x9;w7 H ^J^c|*<@] \/0D$is WWX ĥX(`Z%T E Tms|rPXQ`@^@%@]tDW@ ( S?}@chX~:f2*Kp%pp Im$IX.( (\+G!Q*O7ƞ)#'B DsPDB8ۨ^n5s-*x\[;2WjV(:@@~:fܳc<ǖ|nw4i; .YP-$ A  P+@?C6Eܱj 3 xx@U[BVJh\ЄHeXɘ&+z8 Ё*t]~^8ҐԒR@ ,`az0P}bKV &09L\-@KAobmF>(l h \k @_6J%X ET?>@,~*fij>@Ui6&S5a)L{!|(n@]k@G:ZW:uxQ`XԒɚ*(P"@)D+ 隱8T466\AQ?0EV ]PIY*?Q"@Muqa0jq10lL:@D:1cKTNSra@p;]ܷ * !P ԥP!@@ҥ(7F 86;C.g0 .>56TI9[kG\YpLq2~fZ=.Gs4 PbxW` iI&(RP0 ~Toߖh,D `=CqRʁf()Jl`A PQƐXh}(hZ+D'NJr45%h̝ @>*Z5UUg x`<&u]# J 5-G,@([J"M]dd c l<GJ2l)-ф^3 |Bk.Wԇ#@ /dZ:H^*Vk<Ɩjj^SgO"!a$v^5t9*P@HZj4A8AI-v`d@2mA4@3BHxE\z L%_{ԊG7g%wH0^*{H~ |OcRK$` T 0| J)!H@f76'Y` k`h(Wi xny (6 *8>IGvT8Հ7` :|(- d?ϯ `K$p.Pd $6&2ty  g  t4*%QP(࿀}7d ӆ h[)ŋ5 hd \ ,DdZ3@(P^:j]Qu\`1k$a (@b@L3Oa\ђET5^m1 XiJPJPpD$,ІqۀXw9@ AA% ,` Jf|'wQ4"A8LDn`B 7 ( 8* @4 xeXf)78- f?p!]>+}Pj `C]p8H`S: ~JXLS>_c60&IM#%ܘF] .(,\ qs!4J(8T*n14$@_orR m@MwFhlz x93qn ʦj1|v J^ld?ޱS X$tci%Mz k(B% PX/B>vп@\G!U^q\ԕ1-p@X f=3\Ӄ\2@CL0^5P)?' tH^Jќ>\_[[H.5A@0; R6`A 8]:lQSHK(ώP|8 eSmo܁r;+[ HKO.& uH< OggSqz ]=~1Cފ܇JY5. d2$N5]bA@ p *؝ @`( nE@E*`+dX mv8pl=>!P6u2 A^:nVۇA5   4k$vu)[n0 F@p9*MPQh`S1 S4qxl: Mabj`< o"j)d&v%9j tt`:i/Hm>?1 }LF2[mWՀ(k\H-" dj\VU#X(Gd]*/2 }RPPajq-.vH *잴{K!xU;x|p,@$I [g' PhC@5S h)j` \BkaG |ch5A[]x4(- e h|r=l>*^؇T = x<h+Lкs:Q(Q(H@ ,(&@SnZ?@ `T@7A^ RJlӵ iU(J_m53N@L`~fl.(U<,|,@аU X(xL&I@{ q'PT .( J#C8Z(_ŶN(0lZQ tL` T*:^.@}:v$-@~>tv5V<@T Li$ ] @,&+eNk8s  ~:ڳ=T@`AS}$lb; u %@@i .K6֡$z"`ש F@F./o @@6؁ef dco-G聻|vUa)hܙB1yds |C(~JԳS|\Gt}$IZ pB)Rʒ'r!mtMr40A %J]7)R@KZ=%d#lޫcGJ[<Vʝmb%  `~JfRuJ%f)5whp+/#@H: "p @x@oꊺJyKp4 <[Č`)V7 (7?V8^@=JX TP]4 O~f𒴇95LW<}$a PYPtt+]\>>0'8vBSJ /𶒆#w%@=p `e\قC])UgpL+Pw[? J6]mJTu DJd oڱ(g p@H1 @(@P z4l !6V .?#Cۄ]`+K &##e X;pL@ `+IHxMRqݗ{@ 1%I:){fqPjcmPݪ8 lmaLP8t'40d?@F?P-\\4ǴB lbph 2`,Jc՞(~zxW xǤ$ɐcOP@ U(J{.*Rpù .eVXOD8"XF}EԀ2q? A  pe(ȫ)`&>:ĵ=.g(N%#` IM'ɒ7 P Hp.SiD)Bt`{|3:4*#3?۟S~gwX )1uMSLt^:[rP{ {+ a}$z(h gPJ@P1Fr*&׀;4{X`Dr)apkk ڡlrfIfUp\+i%x< ^*:z_J4$j`=9&H P WQ* :(Q(<[l8kǀ /9L!@ep]6g%āK* >˓h. nM뗁 @v>*s ~3~Ik`v@@(g@k TR{(Oy(]$l*CdG|CZN?ߊxA Auʢ41m@oz a9&~:K5(l=Zdq90(p $I:N*PbGh/wGi +R̕aM]. s NxkTE*}~ iI'F`ԿBc= 5>%re*n@n.7C\G\< MҤЋ`)L80 xF"DGSia@%U PBj P:W)JQ,J]WS.e3 <)R[%?^ZW9?s 6m$I6(0Th4*X <' xEv:4U&7 @I?P ?eHm&@SN zD&lN[?&}@vG:t`B+ĥ۽(Z,D^[ @F}LdMbRk`@ ˨(ؔ))Һ#C\&D+ p%E] $:$3| o@&OggSqz 3)&kұ#m@ *\x qL =boI' @GIxQBQmZ7pw%8}UՐOV,%tAt`s h?4 l:1f{<eje gx[Xv@"ɒ-nT* p: +4N@ztjyMi9[thTxf.sK>U ~ P#@ 6JÓ~H@@@%IF^a gpP'x%; d,/ P@h6Q 1 A0s̮Z!$_Xs* jI1 r^ @ P1:1 AA)@xL IFj2x@XA<@@;P@#T@ pq@ ^ҜrBoPVS(l*N,$!< ׁPOT+o"̊A#6o)A,, 6I{Wwه |U fp H"I#{VOP P  pO`8YКD@ MA7˳(.a = : iw`X~q~lGC@ 0A~I&%'{q$/UهJ}:+l,Lfr &<X (P l(y% 8 E|y"݁ ; UJοi9@`ePP (0G5,/c8  IF⒳n@0/&Q`  ${HZ PQ@` @t)@3p7@Qp)JASGSX4o5|`t` 07L(_;&T $0 J֐R/>LR=2x/ \ c2$=Mf76ND..P'@WWf&R@0@@P\hXpu7G HX^}@ pf'  tJӣϺ^}x%v_ W2,^Իp/`M7 TKKJ EB@L" A(ӧB8QRk.fW5;pl`*axр]` HX9&''WS{{هQ0^ :@Hz$٭N<[ RY% o (4 5<(&@ (?JPDnTQ^H>`]@@9&3^y\..pA1I6XhIR/قRzupP.hvqxaAh|L#6M](pEf 40 @^IXxLVnɷV_>pnp<(!$7"-,E/)WpCYK :h,N ~߀w7F=2d#!HBBuxsJ/&!Lv=h^û3 ?( `k܀1N&$%86?1?v# @,Y  W@؆E0"_p.\8%p> x6X A>1nr4j>8x=_ j.  kL$?] n Ȁ4 , `-R:@&3xeO8@#gdF P@ed AWW #.Q `;<=X1j 01& qL$&BÛ @n0+KЕ]pز7 _N~"A6?&p.q7 ԩP-oBbo~1lA^<@t F5fʭn@P\%p/ $ S@jWPU z ճUˏ9n_ P/#"@ \~]^q*/YBA]7!q`#Ȯ*蚴phPڪ@<)\@\F]Ktv⫸u@`ZWP@4=#ޜfr,` X>&"+R" u G.XeeWeupDpyXnc*|D? h >*=f-w!Q pXד$a8QpP| PW.nPEp nʥ"VRY@V1-sA&f &ҁ &^'0ַ.].߼:@>:ڧ}<݊_ ><^ Q@ @׵1I?'`M*@)\qV7 p&lYk~ <>. %7cLA΄-ܷwbLP)'pުTglS30` ?:ĥўe >Kp$p j<@D$k q F@EJ6%v4=~L.`Q) $ o3(IcD 1g&?Od(4ئau@1G= #H~`Ib$&HP>JZu<4Q( $ @D$C`ND`a( U(<]ңWy64'S"uU5Rl&U)UTb-45v93+uO $jRM&H@9HQ N)g@^JVx^ QOx/j.x crHJyOQpRO+@]T8\@ y,4p,ҕ^@ueXDţf<챀  t4$~Jf:ݞc*~efBO$4d l7CPx@H!_%?&9@ H T߽MjZpE#j2lxE6<(СSE(U0L~Jt5)JtnՀ"-'I${@ R SJ=PB1a椐(o(( $$6u_n <& +w.$yx*>F2  L`^Jfn%ꅐ \@I &IP+-(Jb(TIT ka+oN 7Qt4@zQQ B!@HXth$ zp_tL|%FBy; e(V>JT5ʯHCi+_ = X ֵx$} ͈͊0T ^K [tUbS/!J"Y=hP* Myq (8n˴ ezI TѠmPI%4O &;8v0OggShqz N^ QU4jV[pj D¨'#I&S|PP`@ 8q(RM$F}J [2Sq<[47.#EȀJ'cH,̣%bp| a u0j GR7pPXX:^:n} Yz-, J l P*%'0 +^*f\=-ՠ}8^U (==&а\)n n"Iw}*~;8 (u՝8*nTH~ߟAV+^#5&0D@pX ^Hp2l0 LA^*Z=%5<@T xcd(F,U(PJAܒ Rpj5}32Tw@&3m)$8p F"a3ѷm)uImx`(ԫ( ` ~x{h>/ W% HR#jlP`)@%t"TTo#` *ܚg'u6-Au!׎CU Q4 {C]uB-JPN9g   \.GѠ). %F]#1(%+N Jwu\+"T`z@BT K@)QTpQh(6â ry8Wr^l9~LmBE̐^^(zM5 x{R=ֶT>\_fo!NvA& ۯ6@Q*PP%d EB V@tPiBn3 ϲt؅D-[;p,pWƐIZaY. z քyn*:tx~eV=t$X_ @rL@Il! (NM; 8bd|-{!ޮ X@8 Vf6KEA G<[T PˊtC,=x& ^*VݮpKڪx@\G\`yL&5-.RO# #,/S W;Azz>~J`S#i*!4ET)*pVV݇J P>:Vd(Gg}Jه)x|.*pH<'ǤFU : XQPCWyG4_8Q xjHGtp-(iAB) p6 - "&@ @,:l7aK+\@5b $I._pv+(  ,);p)p0 8W:(k!G[SW@ U􇉂,(؁ԋm OuPBcďlP J| a+>߫=\x0&S0I0U!і`ЁF@j*BVZ칫}@CEp(S @OZ2 $A\_Q`%F`Hh@A^JPN@ qd@0w`k B _VIji 0۽ 8Y DtUV'3jDQ/okMvERe{ DTV`(oDs8ޚ@"%Jq$zp'pې ^I=&ɚ f)JT8tRDp$+K㚘阐P>P(P@}1W %%w w*.  en*/?3 _KBg+x;RP(`4>JZ-BWe x+ AO;$S@봈e P(HE.A Co( _P5:jXS nWT·4 q/͖=!cdp4@%,<@ h~Jڞw,VŸݜ؇OBx:c:d{49\ZpJ+-)@0<j_U}l!1[TY7rme3`6n*2p6㴅_v@d , xtJў:%Up+ 0ZBH@H$pOu̾m&ދ,Y@[)om)`  ( =E#>u,W h@N0t >:֜ڊ?Rxh L&I ka;@ZˡE7@5\g ng()7,7{NzfD / 4Ǵ15,8 P4^:ќģ԰s  x d2IRuJ4 ֲ+ `)xǵp "X~%$ @JĂ#caz GPR / Q<@^*i/h=lPL.'hRdA% OggSqz Q  -i/Hקr^`p @`6&5 u} v@98Ž, .E8ۃ5IMկi_\J)pS J@ڭ_h/C تoSwD@x ~:t,Έ}N%`pɤFֳT*Z ZRY@ (Q  .0 "i 7AX Ax8 Iyx@t#H0Ruy1 aT= 80 / [)$% [*JRk*^^oI$|\%^ $iz&fA:(`8  $(4E$(t-0-] ɀzEY `Rq/ R'O@x- x 8xP<@^*ju,>VP`A% 5$ĵ5Hn \-1Lj$aaNgN P( /@@UPZ9Bm`Y6l5NmQ A LCq"%nEx\KP _&pYρ1t5fh \ۇV ɺ@dB#F롢\ .oB5+9? M!:P8ls&&pLsUg7! cH%v i mu%p,F` `C<_u< 2{~!Hϭ @xC@=wFeލC%B(3JΘ9_hz UlE,b@X@[ pF$=5x`P *蔴hA!~ ...ddiuͪAt5pWE#J*d]P@EPEUK2]I2nZYX,-0Jx| {Z$@ )1%zp$pA_<`$Iz[= xVN@pAy3pT"k:TǗ>@ @ A5, jjE+4`QYOx` *Fѳk=1ѝ@+] x/  z%$^MAu p,(@$X) SU xta$X+6jo!|E܀uO^T!H8'Ҭ Xf(9F6JGgKlx 8NjI,90.4 *Ґ z0C!\F] V 7R mЭ<#a&@ʪP&BB=Vh`IF=0*\ ^aL@$vx<p`:2ʀR@l vh)L`Ž/(p*p7l&lJe / ® wҀ $"@k` [I&PI+kHo=?zp0@ cB#: e,O53"u\)" J`YDS1:.&8:C&gp`Gty b $z IFc[a\[ +H$0_)P4B\V&tBp5Pj5~c 8~ @)Jpp6B\SJ ]K(EV@';HhXIFc[0 |yij.  Lh$:ړG?aP@u(P.P@@A.@S R *8EvR~~@8\jS` {>4k] ЀI&=gz X`9.iH$+hRmS@L邸4@@S h @H~,ti#f6`RȊt~R7[S Ll۫s P4JjN? `& z’*08`L@ޓx mr}3 P p x(!ރ 0/~M؂ TS@TOEi󖌧@ЭRWc{X|@R4Ic[g݀@pJPػ5+[RXExpҀK QR#Cm\2@wg Wԃ6Pe! $u{- h@OggS4qz%9&3c )><>PW zXO&Iһ:f/M-@)UP6DQPRn p T (`2dyS xk` %5p߄A:x@9&3=؊??xYHxhp4@ HVrI;Q U@NN\ H5p`#~X-# x"Z)&G=#n@..`<0$PP@q(`B T`Ǡ!x }6$"69)-O"pˁ@q@]%7@~80[+|I_xX“ @h/a:*FZ1G;8'(4@+$C0-Ÿ  % hP\-B @BU4K hR !b ]8qݫb @PpX! 8k@= Ot<蚴t+, /0"ɘ*S( D4>GXao^.~͑Rq~`'  lA] OOeʦAQ(D*\@tF-v7>Pۇ_~ 4 ,KZd)Yu|nxgK@`ڟRP\wMZEYnhwYZ&k+U\n(`Q ,_z(f"!;$>-r7(ޥ.@VxjF&p* > Rj.@P E*fkwNZ.M6?jFaP5 m=ʂ3H^ʩeW iH׍ $π,)lˑ$<@p pA_;9j$IbN< @*@)P `TxŢ~" ǾRj-== NIy:D-V0:X!֗-N&+ .%* U<P\tP6 4@d `*Zs$߮Q@u0m+g=\<0JF"ߠuo,6 gAuHp@9NEVZ%Jpd8j $m> 2ʓkZXSHݤE))aw1OM0ŠΑ R+&&J-z#8>:9k<pj D}HjIkA`_(Gpi<tƒ/>P8kRtUXX2H dNj,] g#>"@ف;=QH+ ^:h?|/px cr$ls\Q(XkQu j"S]jl*6읟jQ2 0CUm*@P-w3_3pa%o4~A+4(`+>JR=ƔL {^wD% h JPd OphJ`B^pKXRHW[մTE CC<*>!%v#ѐ;a$Ds,l M;U:V#R~,_R(3 $^JZվLG` pzzI 0<(@O8t p@"9~+ *A]0@)r\a0@ ;hیk2`źPz}^@ >Jc<ʖ:ՁSq\/  BH 8bJTs5u-W]Jqw v} $Sk1 :T(^ pzAf& 1!WXw}eiF?r=y*h MfԪP*trJfZݮ%Tnjp`.8HvܯRҌ(g *%  Z@ ! P ^,=˵ GpV!fs]2|_ָBc^ :sm0SY<<W^Jjv$pp ¨:IPgF:(M@)@ ,+BR…{9`M|s@[~'DW=]lbCA5rސY~r2"'>ķ_ >ۋ@t aX9|ǞZB*)?0 , T 5m $]_Ta # e+,[E~~p W/P)iXQ&$XIfEyoӿ {ҕTq(sI.8,h@: $^:٧k}c dp0C"IڄzI0  TB%O]tD$mPY5 ࿃E@ `lu_%(0<^ 33. @T*ͱHgp|@r ƕGrzbE (7H @A ~hh+&7mea 怿$J `0 l(@^@@:P^*Z5gKXJj 6xX*zRZ[) (.ɱ67 axxHW$ ?~% P¢OQptelknJ0_+$B>Z=(>pp,%$K9_|T( 0 bS*Lep `L $VۿU]EIDAչ'g[1J_O@h`gu Xx:~fVnŷxVJc||O6ZLRL!p^{[k(t4]X: U9_ P-7F("(t)z֮(eOyT P `i g؆@aP ^s,~8E?U X!&DuYxF(GqE`}.tX T`8++XMp6BF=jPe^l+B0qֈv"Bې^f`a^؄;#W=*윴p$zRe6 Q }Iʌ],7~UpP :^#Հ0a—B\/%(0LhzwiN@r[ЀzϬGw@ 5~ d@xR"Pv\Ġ!<CYD.FJ1>L~:f𖴇%UCs  @r5$h[Aiv{+P F#QFj/@Q=-A)\)nP xcGa:a/I `⪮+@}H ` @J=9@,@L ~Jf|7i ~CO _p(0\,$p߹Rnk™,@P 2wu 6d@Z||:6yP-[h])XJP- 04JQ#m@}W;xUx4dr$jAl€nE*$@ @Y‰wzXm j)@(B,$XM@~ #( @~Jf.yX`Tx J&$Ac W*B-L0!u#ep7p3J IU3) |&P PvpNOi~@  ~JfU[[>/s;Vp/f0d2IR8R1OaPʁ,/ tpX4,(i֤ޚ@  `d TR*8_ q6 48@ @X^Jٞz$a M $P<  qrL,U"[pwE@8A1 P-XM,(Aq(@Y\1$E)vi'e @G! X1$&$ Jӣ v؇O /~8 5d뻭~)|8QJ+$,Dܲ $%0= 8v'"~*K0`F\ Ы3W.f,~:1؊3f3A_ JIT0_p(P(q 4+ 08#5.·S .׌ׁD%40W*@ aP W i@@@%G ^,L@*fn-ݝ< `&0F}\IPŖ@P@ (S @ N6LW2E_YPT+F7+!mK[LK@ZJ/ `P*|h{xawAB$z[[4#Wm,P H5 E6,Z j+XR@LR0"@9#& 2/pS7/F&I  `^,@tH%u%p԰8 a%I@ 4Q("*[sE9=uFFBF)lRxwC)cMx#m&(^*d0֐S&,UT+P h~WB` X0 X@ `!|7h {5˟(< 4@ :Aד$2uztxbJ@k P5ґ D\ ԀB !>,fKGcc+5 K]֭VQ<|",09@< ^ZNґ_p6:8&IP@@mQSE@X@P(E匸Gx[B*a5E @}DqRGpM#: 2T Rsov ER@+5 H>RuP$8/L@^P@-FE>;eb" ẅmЉl1U3hbF| X@ <>*V^t+ q0*\@ @0Hz2 (  kRHߋRQR,jP p&)` #+$clh*0pN` Ptx,L*ĭHz?KM`Q x#@FO V4(<(J?,N@(!6` i,C p@}oHl` JQ5=FC~)\ * DJ Iѵ-pBP\n%Qµ[HG"P8? 5 n L4@&^JZصOpJ$0.$IS$Q@ Ph@PPϸ _S1Q܎ *, /0NV+@ |>Pk' 0>>J䩦5iKx=_".@]  @u=I8_?7ST r) -1P/{Ҹ` Nx}x&uSk2% r<@HГ$;+J)?tP'("z!CLpAK E/mWdutj'*:|˫tO+Xƣ~` EA>X9-4>h68Ch, htOggSqz{]!*+" !)/~:15eg8. c2Md %@ 4N pr YxMGȸ(@R9= VO@ _@A-&|:Ȼ;"`ڮo1DIYE.$,J =I7UJT + "_4pqÂ* p~(P/@A9ܪISr hMKT8S-1 QʺP]>;N o!Phr? xXKjFҴ**uBB2 ޥx %@!t|`6к-8/j+,6Kʨ 40~q4`>ӱ^(J<@$ITV(PCkU{N-a P@FM*p(x u,+д5䯥jUSj"uul-xNpP=X$ĥ==YH = ԘL$%qm34Rנ$:v3M@W0XQ!-V>w0nD WQ%RRIp*{( @:F䭚ݮ64KU)',@z"I.\+"H @ pN/g-7a.0p Aw؏8<`b%'%'+,Nl'!Ga[@b,)蜴-7ô~.+ X LHC$r)hDUp"BwϠp&y^pWAPZz:OŧEbQvK$*y3˓iyƍN6;$*i7HpJ,pH2 i\# + +TLNv0A_QJ{'Sb4 (q^1\+ (`9Wcߠ/z\@< d2I:&*=S pPP`[k(z DAp\>O,]`6\P&v_T <@=((@I&{fcqp+ 8(8;IT? ",+ʅw ^vv7+#w ҥ$0';|Wo܁l@ʡlcM`W// (^Sjw(;(` LaHHIFjQYÏ^ ./ F=Na0qQ B!@.PnIs"ԋ1BA XXI&'0M;ü p^xoHITe.#KD-\ `8 “& U4`ؗjGP$e 𹀎0Fqn)C>fҁ\@ ( ,v>9Gg{r -I(T)(M >hpPqAi`O][Z{~WgY*{D\qbA OJAk\|`_b0 -Z.C' V߮.񒱃Be85j;h/  v9(}Pr @Z`pۀD姎qgן|܌r_: m&Er@4늏 s좦܍k<HwN9A@`ѣwsPu?w?ץ L;SVj{3,+́Tz .L][d4@onjWsruu?zbb/^LD[ҰII:hdꫯza Z^kII:KVFuݿs@ Yc"!@vMDjiH1&hT/h/ATBMi\pـ 0/E {ܥ }T (p$eB3 _@t! r hܱ:tIF#q$g]Uu*PWl HL(\mLI$ە4XBA7QXpx% TJX1E(p]zMDK3-R @L# *)x(ol Ⱦ$ dhU5LIVwۀ Jl!ck\x0\4fLDn5~] u2S@BSp%dPJ @t X ӥ`C񇁀 (P >[X+t @ o(W!y:Is%Ûζ.  V2$ H )iX)Tk*Xw3#_j\pP`01@a .pŽεh1 Ft[6jx= ..`<0acHIPU'\`~X *8\)@*ELL0*T@oiA]T+r.cU(l@9 8&@YPx X@(q xF:*Knbw xxcԏRPc/ٰvL>%/CЅCo.A`l( B5j |x0)*' ..@ dR*`ߕ.I vpE w ;Xqe췓_/"(A !Sb  ĆQ~7d  Y<0)3i/(-هw]g$+Prc܁ I~q\[Y((0|8J* _jEpBxњ Z07(z e@6@_n  P >6^W۝P0|p4^@Epn~4AoapHY`(WҮBmL(S~p;M d7EV% 4#+WO5r&Tef&TP i Bo( -*t,閼+(Pu&mU_`KG@\z"k-^_5T@@hH"  @M*Zݢbn2;PwB•s:ݟX7:Ћ``Op[+ཨp(^*pK<qi$ Pp p @)h[>J$T._*V[?UT@Y:2W:wi><^oxh. .B5m:&Z̎hG  \BԈ$ABW(#P  PKw; k D** (hpcGVc_!?[!8xe v(, bc=g%N(RB 4JP0)Tj]U p iCM C*8LAJEP/֑' |K&#ېnhx#RrF.!c>!2%klC=h %>is% %@)PM:@@؁j@ ,f:BvL@ :,ɭ\-KsKbQV z,< ,F$֨$wӆ R"P܈(6EWV`2 PD65Q)l^, b@= Mp 3F @gW [4`Bv :xȝ YM{n[)RN@O$I$T@X `!ˀۣz /Qy*+8&6 $&z@&@~]"А]m )|D+ tIvkhk(F. Txi@Mdd`bAOL`^$&H݈ʬ!܇+Pz՘H$I잺f^ ~b' ]|~"ǣ?iNԣs;:& t݉\!*)v $IrA6y*\WU+P^ ǙKvh5Fh<' lBg 04tЀOggSqzxilgjdfeb`dfbaY[YUTWK3=Md.U}sy  -$IBOQ7Bş3Qwu@£?TFp\@IEpDo ^Ƚe\j:o86M$P¿ S Xct$nTHPH`ͥ$]=nfQ9XX`h<X@xt^Ƚe^bx< $I$nˋՓԮP:0BT@>`&HM _JdScyXXDAdҙ@а>";mm/j|cM$Iƒ|؏R(mG$Ĩ\Bp/32:FFaRҀ %(%>\{@:@ ~W^[-H& I$p o|76`طqx|~,ޣ̎ @`B S(4]-hg&4P~K8JO]Z*| ?$IĂYZ^)Q0t-{hCΝW”fJH0=l\3tt,I|{ &IM@ @4W$y-?p1KY⓽#D&t|"40:t+XRf'%y={˷B!IlD@`&@LE% x!ݢ]ZwrxiOXL 0~+/ l{D<|FS0$I=BP:PtPHo]Bt ,`` `OCX/.PB$ | >HP&9D# p J t^6@W A@;ЙPc S@ ~/W5Q$I%T: 0f '/{JA )Bn" H ЬI4!xK ~/f q? $I zN#u~\G>C~T 4P !С-&L@~/ s_M$ *?X`k2PZs6 &h $ӡdf!d I~7 =#@4I$u^|#Cku Jm \#}{Ȣ !@, 0o ` &lmms-1.1.3/data/samples/instruments/church_organ03.ogg000066400000000000000000001427341247673406200227650ustar00rootroot00000000000000OggS#h?p\vorbisDpOggS#h?d -vorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M#2 >x牄ǂ@ 0Ger -Zvy%vӌ`% U AB@6Р[@/pKL;Jڂ$H Pr"~"J, ?B~)A܈FWU@%\x,'[0B$/p 5 nW-W>uݔ-Pz 7 j/ RP I 4CH?(!gx 03U[C 2 +]4<]g LA!  3em-R6mxLfOC/Y6 ()t;@u/P@ Q E_-(4vx8hL6tܚ8P ZGBCF|PDO h&@= `%@LLrF#9&xJ%A6 ul#G< ў l@` Pc~ !z`@5fB7pn ^Z&=j|x@ 7 $X6 ǔHA!0$e)xa pj>P+L8. r&RMXoLO(UA!wQ8?)&x(@LNOA*^j&#jRh0 !Op<*x@(>^h R#;-WQjY`k^F@8v8Me8E(:@A{8_c! ^ (0pDzT6_l 00, ~j&#B &@_fl2( fsԕiP_QbV (H~U$8E3 v/#&G'rEЕe} $KtDxP~j&sD:T[ypa=2"65?@2sބ8 4\q@ ΙSh)H"@A0<|lKNQt@#4'}ͬ'_It!@B DŽ{@yo%fxjQhvdTJ]F em`phX `' <~~|])n)(M,NA)%3P;BJT"JPJۄ\q ,s9@&.;pv_]|:~jk.R) EyX& @p^ .$p9`MI(!(@FHpJ-%P#4'qBk X4W? ( ~:^jF#/z4@?faca,HlW6t4P4w-+.D5jҖr  ,Ipq "4 XC,]|8*8 XMCm/}4^('Gf ^j&BhvP4!O€ X `(=$Y14Ppl7[Wza+EE (Me7( (Wܞ<Kl9*8gL @$ bn1S$~Zhq`#V$~j&k Bn B.h`\ p>(XHp/ nV& = ,A(l(W(@AERW.Pp.<5WEa T|lH,LJ7[e37nC@TH:~j&K..Jn B Hx6Zhwd (AŒPELYȯWإa8q cp)vRBk P"(E  q`q4oXOָ%&6{C) | b`nӀNL_AjF)"-.Z#o! `S caX/|Dp0=}nR@"nΙ*Tu(@^ePYR~,E@DKɅ^8@A͞7R& ,Nj!ltsi@k& jQPjF)J!_1 GZhxؚ$_X)x@RӠ5C"-_95D>0SDX PI ŅME,h@2 ):(@(# 6,Lwm7KJL@Oh~js<\b*-C{?fE3BzHϗ]| HjP:Q3F mҹp0 D(Nd *JlHpPK\PPA</1(<Ū |Mj)n!5B'}F?Pz,D,> a>N & IH}v{%͢F&n C(,! xQ# "Jΰ$N . _훉A9cRDlBv`#-@@̹9%~>^j&CDZ]+(E--|4mlHyt7 TD·j!Ǽ JpTVM B&ڢ s+!@eA@OggS@#h?T^jFS<[\j":, < |`v14PP@R{ 9MP,!A@E:8PMQ !n 3.X 2WT+C3pJo/) CB;g$![NAQ^j&sYh <RPC{X*@b G&L?)O<-4.(A8aHP] 8H@y>9j@&)G=IAVK 0p0Gj)-4U^xZfGg4lb> Im(W4R`<.(W ,ũLd-(Pc,O"Y4m#NqxJmehn ҃I j u /4>jVs6 xDs.T@@{`@3@XB>]Sb:R+7POKnrpd # @1Ky w'S@Y|F3d2ݜ`U(Cj)/V95NjX `ͷ>` Lj0ۛ.nI8㊃AزҎ Eh8Dc K AB +( @nSSi]Blhymi9GPdil u8z X~j#-51!#,  `kX@{ I ؼToaQ)X>EP▂ D8u)%P%ͮ0 $ 8)hQqF:6jt\M%> ~j&k RqfC PG}_04PP@j\hJjR`yR!@SW. x2 Τ[B"pP@xgj&GtiI`9FckN@@5B ~j&KTJ; XQ$ITЃ)X/eZB8( ]/AQ\  @6 Pwd:>L [PGtX h5Gt?mG* ,top}&mj)ni@>8 @Z  _(8I¥7vDee04<Q(! 8%c)!KApJ$vR@j־4raDς J^(|0v(Q P6|W %hk0> R#p:R;%"NWP<Xt@ @DR *1X K9Rg[րWmPeɈtC x R\}* `VjaJ4((@֣!`ME4|@ $ [X`/Wt+ bSr*PY(6gwC, /|&B 0{) (aq|h``o_I!(^j&SDZBi#<#l(5 [x> jHT b]Eui@)EkXDce? P [hxrICrFocA՟P9D(t?Ft"E*!7j𴲕T*B:PX;x@X1@AS̱vۜq'Z *A(UC`4 +@b,8xknʑb~yCpՃr*;  Bo4OggS@*#h?J~j#-55繁O, im,`98?xIPP@j)KyzuU6ŀˠ W܏(Ԡ( ҩ M L dDbbJA\=;q+/EqE(TBh^7 J D0O~jښ+xX$ yX`#\P1j*RA)hB PMHi@( fePǷ 8&@ P3|s4@R +͟g Oa|: 0O0^jVK`A <H <"H %phm1D4P$BBi d #! x'K$rArX9:J)Bp p`3LD#X2i⠼-8Y7 +3kƫ` ڛtE'U,lQbQj&s,.!5B<thp@H aƤ `Ы"h@. Kř?PpX P Dh6wh 5qܢ@v.# ̆?t`?S&A 8f>jG"= 5A *Pm,eH @,J)B@ "`A4kҺa% =8Q YMF- V~ft*[QӁ?b0hj))5U `Xh `?ڣH@H0wU,tHʔP '@%(pPPi( Ձ*l&MAȃ 6p%A ?@q\@Uݖth)@XHP@X~ ,f|EBL~j&K:-Rk4(bP >O@  `@KolG6NHT VEP\ -8Etal"gy[pJ$A"3*RL _> 0jFpp'@4Jh .x@e, h@j\PbDhXR,_HS Hql"K *1* !BR3HqSbB{C``&}_* &jF9n.B#_P/$YQ'7(`JḦ̝́7+XA8%Ca w Ԟ>T)@r{ZM-ʚ|qJpJ r:״*QPQak zN ^jF#-:RӀB)Pz4ah4PP57,C nQXBQ(E2" Ė]@AtݪyJuuۖ`srr(8|#f9 O+:(o~jơ=>Qjq  `. JH)6#h5DKqԠ9eq;U (ҽR^LP@7ۓaZJ/nQpHN ZР/%@EPMnD`k ~j=/.JS!I5ǷZ^Pj؂$ ch${6m FVђ a38Xt fAS PQ\U |m |A Hu%V/~C!;lЀU( L`fCW^j&B]ՃԪ-<l ,.x@e,lv΀2hLM t(KLVQxBQJ`i @pAHIhj(PPWB b"5; 8%K_N5-؆)(ic@]<0BBMjF%B.bT@z44 O  jH a+^|pS\(JV @9|(1/,h@) RB8m( PJmh @@`AB>jVk,.!5BєP@{$t%p 8y($1 W$[vJQ(0(lt %K]fఅHW痺;LΦ7m}#wހp7"*Y P2!h` lW@M2j&s"-Zi4x( !z,<m63 jH0[5M,P E)B7 αwD&tGoB] JH_Ȼo/(abǟI4rWO;! ~z&KQiUZyibG@P`=M .F؎lumuUbY%[,E %(&Ƙh>p"л pBx{P3 bJ ((6ܡ*D 'Y@I8+?8$z|jp/19oe@B{4J ̀/K jHMK@Ūj, -oTGp#= =G7(*DYv#E紁Sj>lW= H <j).rj,xX!`=NЗtH蟁7(S)dAȂ4QK\! >@J@ d#m/M)jZ ` /Fx`(Bڭx`:>j&G|E8Zz H#l(U4د>jn]BYE-"Y 9A, EH홆2,>HQgt;@;нɑ_ۘ`Hޗ[Fɭ~@T: +~;j9-)5! S GC؀6@h@{<  ^$limLV^+kZ?]:rPR±8 h=4ԔALR ph H$K0Jv KR > t0쀯|B@OggS@#h?J;3^j&C":F5!OBiac@f" =@A@d[Y?ne (+HQ$@J8ER6s=&}u• + T*I- vѩIeԗ.d!: (&J5@@jPsd zy!O0}x@ 8@@@jO@L{w+]a(P BqJ(|2E@558P hCҜ_|>yLθĿ Z9  $snζ ;Nhj/V55 x6}y@]<A?!T)C S6-( gt{/({CA u ΅4iU2ocy r"jF A.] _U>jiE#<b)!l~@%Ax FPYҵ ]-}7R J Hu 8oPQ*ZҠF @\q lhI4+=,?W-o &QjVjC<,5 @l1'EH $ Sl5Y*(1\- 8(*҅@U! B@gjzNo m9Xw%Pln\{ -H *j^}ZE!# 6@= (8:`;uU7,`MEDh` hFJf @(qȥ +Y/+n׌uY󱱖ѡgZ|%(D `inv64Otj)*B : H /}x@ <-wD4P0 *Y)Da RڰRxLQC]Q u HyC:@ E9ӔRG8QBT^)&q0ju䣪J!`U@ڐMjF%"A(e!O4I`a?Ks @P0 I ;K†u@9XS@]XE88(K/ڟ\W][A D O^&SUQVh Iw#c?`Z8~ OO ^j&Sܮ"j'@ %P{,'P@ $ JHMUCBWr~Q#K8-nQL}m4 pA]#R(%RRv̆C6ːA Іv0cTY5A~j-55Ci@@ 2& e(E)Ȁ7@J]@ZTw (L]ە~5\HX(P ~"US5U›:giPRʋ@N4V't KAj,b)5(B4 %! X .؋'"%[6N Ts:X4T:YJZTM RJ Ppw-.ApąoIr +L6,l(~kགg>jF=/V59|'N @ $@‘⊔9 %~Z>E(KRzci SOɜ ~mOVjJŐǷd6T R8r@ @m,Y'$T% jV)59<4Pc| @7c&\H])F,MR."Dꔆ GAQD6/qAP@͵{Ju妏`q _S\%mWYPxa I(v'76`f^j&C\bh < hHd(T:P{~@A .%m̺ȩeҍ"DPRQpPXn9# @yq.EMi{7OC+v?kH B=(m6мJO ~'{`k)j): V%Ue@ Ѱ}x@ @8_p@Pp ITl4wR` u6W>\xƩxi hv PrJF[Yx!m"(!Fp6?QQm$*#!4j%-B"z—92S'Xp@(y@HLjGMLŢJCB JEYtv0. ~BjQ ckQN pB!ↅJ=%DWh(l"],6A>8@~>j=/TmPP'M%6$v oc:x` *$thr$:RѡEO ͊.B,ĪWYMJq1¡"|k._"X>$?J8z]3&8hl PjUlEjB]7 ,C ..8@J:@ i`%HS @Rm)N)+XDjOS Ym#c[ ѬJ1F?pJ0W_ìJ>j.]jUC HP c \HjbGFȯXXa-*p"F&T_EU(. gl~%f9:e˘^ :X@@r7-T0GPjV(,xh& =Nd4l?L ( 5sli?W% +YGBTO:4(.eB P$8@O&2@*@FA@h(qlxڗ1)E h {.(Whjۗҡ Pzӳbe?[q ( (ğ#UG0 P,`HOMj'J#AF!O0 </8@{| @5$ TlwOeht%*࠸ (~n?  R\Au8͟9\y!S#Ѐ1ty5 L /C**iLj9dRрEq8)TPG)@P u; td ʝ/@t34hoF ט?c.@0ݯ-hDp >j&CG4QOuU!x,H< | =N (x@j[`Lj4Tw"$8< Ӡ%YKx% 4!')ch 4 |+X j/4 y֣tlfv4l@ 4P@ 4v&NY CSi,8;NE 肺X⠈s,!@ef:ǤKNCƊBnN5dD*7n!^j^h5X,<4&!<Fp>$@`?x@ iO 0.V?¡(z*XlFm@ JAHi Ep6 \{iZ@\o,s/ )" mWz0~@sH_`0jR]5! ax,,ЗWhG R'ܛF`2 @4, ""st `7hfC)G 51Jl AH ~j%&8 @80`=P$$,l>P'@`σՐ⪿VadR\CZ`r)B(P9FV&Pj —chtp6i94)vs=@ Lp.VB*T*^j&s<*l1 K P{4 y@ @? $Fr(_)?X @yZ @82P|AI(P-TqHEVKCj~x:4)T,bEAA.,l0wߜW@CpWKjMGtii8(!"3,5  `MU@`@ I $ = ǜh{,_ /'pAYF N( Aq%"@QxR 6ZbCuDk ܇}^~z&k<-J)4(btz]6x $A$`dXȎC(Jn()<nGNrb pXxBR@yȑĐPGANQa ZGA)PRt4r h,k%l ZWzF)ZC<SÀhxЗx@R'\P =qSwNEpB78bٮ Bhhi3y1@  [AJPKpPJGEo:@H7Oj"^":4G@%O@`Q' $L` Kdg &+P8=(h Jj"=h9"0jOh njg½_u(͸ VEijS02h8 `0=F)@oh> (( |ZLJ˲4P1P8@)}R< 4IV-uW( ~v*wh#w!K882|o(1`rS#n10`+?I~j[`@S[up =^p@/6E4P0MU#FI-`˫N@ @*J@X UbYp(PpL@|0.Fly+E)H /APV^_a@j0p_*/PBj&s..J#! @:0`=^:l~`"(:a l3q%a  t 4"WW>"H*:@({{K!`S`H'2XY 2c >jDvNM ڣ!l0 , Asd՝EP;"t@Jdw@H-@.R%uVrǁ@EBPGɠ˩?h=lG:@t4h&m[j]ksB<4LBz,4`,Yc&x%@R#LFiWAɂ"W./=<@ [@]JW͵;JUew)ތ hL\ph 8% YS@Y(H!uh0%dz&KAQP ^jFs4-r)θN…dž />$4PP@j\zK`۸Y.k)V8<࠾r1&Kt1(@80Vʡ b@(Ezmn@Yue@7rݼbB 4 kD_KFjMJQ!aڣa@/6_@{<p .بwq!WI@@JNp;![``_xfW=Bzn3U[N/Y LWP/5j&K<-)5tBrHxJ6?Xd{@A@j)!1^xcʫuWRtQz@p =&@@˥).@d9W )29@ xD MXJN4tUu֠Tح*:>j]\F>8c!@lP=6O'xT-6͔¡& ,' +("t :f4iԕ5Vu׾w+\p799UFdc& u~ (W ~j&Cׄ]BC=jX1)@{4<t(x@x@<+@A@RsFcwMS!I0SVP8 -XP(PPPvP`pP-E(oFBbRcrJ 1DP*}ѠL2i|VD+!99.0$>j&G&o 0>l~а9|  5 >-.`u5Lqj%_^Є ^\d{ ! &%%8)P9ͧfc %*LƄ[o 5 H jJрC4L %p~ Z h"h`@ܛI4w+Vpf ѧxQ [AӘ ]zE ݁#09M؍W Y[}Na%1`nxd L~jd % X `K6? 8@ H>pIV mp)Xfz!reZ=tAS\XBSqO(Xh)YUA@%P̆fJ)yJR @ptP @1`v M8M 1Q!^j&B]\FBRh@l0+6o d0G# JbB n EP O dSj'4~@:8D jwVPpJC$w$ʖID4 j&s\F>8~ Пaaz,<HHlNH>&@H?1mќ'>\ dde4"$Aq8ͷ'РYPPТKpD P`PeY Q5ЀG't5/A$TH^j&KDjP'Xh+>3O@`@ gbc!).tnW!;JCd1_p+ Z*5@?{sJAA bm!`ÏѢ:N E(A B'/T95 @ᨱw5ToKu +Pnu7Xig [ >jKvDT[ u4 5 $A$A`L3DDRJ`B ꀃÉB2&P@N <q.(@lgt޻זLDXm96(:xQ 4V1@h~KN҂Wml!j9jJ]8 Mct(x@x  ( 5¥pj\$s,KQ \)Dt? #t%W.@4 m x ( 8)aaݯ%98l@0HIOggS@#h?S `^j&SHҜ'Xh YC@R[`"p]  Bq|Q"Pr h8AƉb” 0V} `J^$JlCmp\.F+.p-`ՠ! 8NJ PjϏV{  z8'@hc|| jH r0.j'%J,B w"}$4@2-u1 @;P3sϕ+Y0dfR8Q=]ұ &(}XJLV:J<ƀ/Pj#J8x`'S p@@jqBBb+mX(`)SP Ph?( ~ dp@P'Qu4$ٛQ:N+:P؊0dAo$?56>jB9UBI5OB$ 4NPv`AWB8 HFAx)uRB4|KZ"B(R.rۥHqhJQ.Ph $ a.%jF9<(')@zHO ~#A{|@hip/ $N)N q-_p(.@ JRTXP 80(aIܒF )eJ @yS;{c(4 pGGؕNF=X R7 6?;)>js\V\.:͟YH R`R-JhQ\~,@ @)}FAv1LA$G@(q0[(pZ(pKB5(HfD@DŽ f9 j&K|I<i8 7:hd@Pp DsX CQ PD@l`LW:f&  HMKta7(bX7YbFZ (лRuO$l &7 M :ÅI p7! 7X^jEOi !O.:zy@ 8c'($;&+˰Cb(t. (q(@}7E18% P8~nȱ~: TA}v(քn޲TDj؊!!=`hdG4P0 . bwNq$"L%RR`)%gԻAlC *4PTQ6ͰFm:8@0E{1ҹM[H!H`@¤Wx@EB(~j-z14U8 `KTg|@$0U9, U,A*'ZJ R(;م *7!T`uj~o/ B1$Abj.\]R yh\%AB AT@Ţ^jVBl 0=N4L' #@PP@jJB9i 47tO AQ\@@Pp(mj*"/ 1{S2[$z `ܾpK P&A~j#/.y4g !OB4`pF4PP@& ZHc)͔X8 {4!,BCj? pHiU[=*Ɛ5vfeМ}%@'_j&GD~pQ *\p<@h@|` s/5qb5KpP2Y@@(|cN 4*D@?=$od P8@Y0.t9`5 @ҟqS m@ ~j&s.fnP'@. c!A@f"ڣ :( ܛ&`G K'Z-(T,\ss5 5k<+ j(ڟ'e $[Y @v <f~z&B^j&#jV4gҠO.Xzy@1: ?`R#zK`/~Zw@]吂DQT IQlp>0( 5_+(JE+|.⁞' P2!8hDŽ L j9a.B!! B  @f@ @{|#\@Şzi IFiBQ@Q8*2 @pw(KEL jF="_rky !OK `ͷ`@MB1D4PAaW{+,q* E(.@K(@4s`8l :-@L^oqĆX\0KfS /ֆ2۬tP|P({[YP5~j=95U p`=:/ؿ|< (hH9(Wאq%[c(\S}((4 PEPܪ_Q98SPcP oga\|M"LftOggS@#h? 0>jF=biР'€hhh=$6? h@&5ƧReKA@v ,ħX4BpQ+k{BҬ.'cb.*w>l.*!jA>8 KGB ͗Xx *.(q]0.8e'BP88@J3Rz#L4(#rKT@Dr/PKb-gʁmu @g4k ~j&sOB!! ` XGw=F (`/hX3й \(8 *ݠ4wxd :\AA ;̈́:Gn*&8bɰ ^J ; TN yj)jBq GC@P `oB5 R#\@r_TE1A*"&3 % i,Pr(.^l  06Glo:" PX:F o0!b+i^jQiUJE uh `)@`h$aJ9A‹|"@AJoQ(H)4p`+4mIM>@-) (@L)n9rQ-hD TB~jF)"[R)5h8 0`=6:`G @{ T YMuހ`P(L@Iw(E 8B)PSpPW^@(P{߬M"9\X-EKXӟ dҡT _:B3,x`cBLj)jU,Md! Bh}| p< @A $K V$YL9eA]PC(KEDw8 )9A RJ[(Pp8|׃D @-AH*&S /f<; V)@W@[z^j%Q[AF!O=@#3 \HT;*VWGM@MbՠCx#$0jtT_R-! ѐ< "7@ hI%Tlכp" @qAQ&  8(;L 9 @e6])Dro{6KP0o t(E|i Oe7 T%~jFOG iT6(( `9p =@fh hhk0%Og].DJQԉG \yԚ )a VGxSwc9؁/nR7s2(Bmo F* "(>j&G4[2" (2`2(/&AG^ 6l ج N"`jXy'@Hh=f`)@{<@P@½4"~VD29d9 U4:jW=P 8 |+84_gϪiNYW,&ʓMW(;PQq! lR~.sB+HVLtP>j/}(5(8 hh=# P?w\$(Ii%#&fJ+P+X@A(0 (g~jXąA@(srKyHڋx\[Uܖ٬H}@(l+ (jGZѪO"xhj8v'!J8_'$ipe,,)2.n:@(PWEOHQAtG@ ~;c/{X.kaςBm.`[m}ŰA aĿTH^j&D4ACA`l @?:(`+d+lO-p1nCYfA 8iD61e8~ _)`pu ҔM((psP|W0 ^j-,^>8 `ÀѰ @{@5Pm:X︡A@6U/H*p8 "D<lu{EdٷYw` @bɉJPF-d- ^M@247tXsj). B0 =2P'@s H> F@uq[/H p.q >;J P<왻duwHPQ)e#$}0PP 8VQb+A"<@p=+`+'35OggS@#h? ^js\F,<l ЗL ox1@4x!C0q' vux+e,@Y"bpKg;@ٛmvߚ"Ǿ:-pAJk/;?@+D)`i.<Ud0CRj9"?(&<H5 h[$ h/@A@j\I/ K 2@A-, pu@@B[Nqąk3&XTnVPݟQ+6/pC'v@p(T~jȖ%, l+ p|HAAIT!1*v=~TP~AQC,JA:kSs)RH8+i"w} @Q2؝2S%Q[рMB^S]c [ ^jF#4'f㱰 @6%$jmJJܕDĢ(B)Q P+@PP@}p(kqDr}1Yx1 S\QHw#4b1𲜨X1tV)~jFS" | HL&Z,DE,W PAJJ JΆgjX:`RSӦB >qcԣp 4Yx@ : !+4jjCx(|P' G@f&$6y\R#3lE.;,{@ 8gP@   l k#i)#̆Q1I42#j&s,B)4p <.h[$$o'@'mG@-a7(pAR-0.Ahf&*֟,Ah%E%#pLE (`KWt8(H~K@n ~j&CyHC<lZxvlа :([$Ѥf 0yY:$? 8Q(b"dtA)8 gԓ<[|şe䌥p)Bu(0 vxF!~^jF#zy!OҀ<@'8l7( I ~񿮥 b)Hg ((#g7H#)a"@1M2j(;&࠰̆pr6=H $T j):4BkXD5 h@ U2ʢ(C P] )vZ7Ā @o(j~S"'Ji6IJ+P)($P +Z qؐ~:X8yt6n9DT@^j^NE*:tp@Mel>N2Ixj=S]H^G:+Jt3@`Bc߆A  H@X]NMx@9SW ~{%?=UF< ]nr۠Ej9-VJS@P'mltbl R#\f4J8[P,q8gp"l;3X@07*(xӿI$7FxnlP8(M`cٰ@BM6Z@0 ;^#G~jFS.rijb,X 54l| 4F*O5뫋Ϻa Z"(^@9 ,@u(`}2\. T@R\w(h,QZh^@1_di^j&CG#Ax H̽;;x8W:g)8@J`\a9UL<[ u|_ ;ٰ/P! .eHܫlBBMBz&sb( "GN-y@6 ]?  Ȥ@Gv*R?6[ k(\h]` rt@ NIںP*m(\YA'/iS\q $ ]t t$0D*(TR^j=jO555y !:, 6< |аV% x@ Hjlcr [@)  `w@|, 7 Pb JV@#΁Q Żb#&tQ /sA^jF#jG; XX` H]LN[%T!4Ei(N'~ iv*8P)@JP@W(X&nujhuK  9+.TѠ5@8S‰*~ ̂j)|P'@.4HheS=6: @j\ E~\%Bb, ,@E()^ " ʑiDrb Ҽ# &1RXE%4pcWxO`0 i,^j&SHTGyTXh @Y,c L@ 5flJ+\(|qgP@#DJA>0`6ʽ$_j (;IOyUJ$谘 t| 0tif4 ?j֩psIy !OR  ;x@x `)6(HMKiGHҚ~.N5So@_R|pP(%IͲz(JɥB)8BPU|sGކsBr@6ژk0m ~j&K.V4g:! ^6: @A17 S`e,ePJ' ;AAq\p:J :@QʖD P#@lE):򋠼Z(Jw)PJP O,QEh$uV:5Hl j)<(EM":4 @G` `$epl{m[>-:JY+@A$T0bm[@D@@fuAoj @8Blz6[檙`vI |P 1 j/.5yPBzD$@eS `x @%NwX@*% [X@%.,h()`) @E8QdeJ5XP[pQ ^1o ?A pfߐ*R2OggS@#h? DN^j1ȏꡖR] Nfa=@P@@R#w0=kYRci)\Q uE{\T3R hI| /Qyf !ƂC&(ngC}Fis [Q@b N ,~j&#nꢌZyF!OK G$76#  .$ aR\0 I$ T%7!C#=ե\O+ "@s!Q1} < LItbr70?g1PJ ~j&K\B>BX6x@@h0>PLj lIj`P5&JR)HR(EC\b32@J@Qvl'P(PZP 8݅e,^60@y@E|~j&s<<<H֣@'h/@{| .$5 m`R4E*L )޽i)  E`jlS>9QM6<+Ƭ.$"@*UOh6Ij%/J)#:)=":zT$hG4PP@ @ոJL\Z/)CQ)@ +VP \UYY6jP )ᅾr is7= H@ 8y@ >j&SD:)MռO ,BJ<P$h@& <;%ՅfJB=Wp(E<@u2لm Q @ Cd0M!*͟P 8V" z`չ^7૒*jQhvTZuC>j'а`CH||M tU)5Q۔:® sX(š(FP(RT)Z J6(*SXS#7~2z@+@r' XU~j#,b+#<, /h $I R`szB9X4q!OK c4%p }>|N H^klS?qĢPT*PU9Pu !SzHr @* pݵ=%{q\Q!;X @(gd l%+&zF%9"|/SuE??G@O, @A XƊԎcLuRŒ-@ gP{@QQ(4@P@S@8ѼĔ3˜a2fRxUKPd~ DȆB^jsК% YxA{4dt@FI H0UH̱mvK}-O) *@HOG\fCc?WQ_p(?8B`mh{ |C:Jpξ;h`6,01ey&x c>J K~j% (-vh<`=@'@O`v4E (( Iت./tlR -R"*4'%iJP@ 7-%@\ @qp >[7Dyi/JoCRZ[L\aѐithp ZA@~j&#!a% !O x8 @`  P! (`(@ (Ӣ(%a|eN8t@vp6 N"oaр@]POq X|#:l`&(N'0م j& G"[, YGCJ|-6cR#3s蛍KJ K]5 :X hxF_-|JAY~j=-:4 [TЉ}>K /R{$tl&#$( u& RnR\8 @h 06@ۯ ( ToW]%+gZE"_;R yRhLRP[Duw+Om 8B XlFvlFPHHj&kC*pP'@6<`x4fVl?d4Pp j"6\0u0 Fu´ ) P+U  H5w+W/5R pRJ)\ yަ >+,@xvLWX?)OggS@J#h? %w^j&s4bhOT$ 5<xl`ad` 5BiɫtWm EwйP*T$PEQ`P!O7P w@AqD< X6;* `%M~jF9',, I8&dx  u xnfuo * P$/Eq@pRp P,-9@9;;I+:4 HTjG ^ss*5 @ƪtHd^j&K.b*P'e@z,.ؔgɋH(XHMZ`[zZphRS@< J!Jl$(O W,Ok7ἤ2@msD:PXG6J1Y0\E]#,g ~ j&s.Bk,<b4=N4lf% 7K]Wa%((Xk)pU/"D"F_u@K58wnՅ=Ǧ: p W/XXr~1sPӉFTEA5 wP^jF֩tDJ]|P'N%< =@'Jh $5H`\nإQ@,[j8ʹk9; `Q.}?0(@KRx/ n{VӐnpPN[OCVv޾c!u-=_jQ5U/QF!^ `͏ڣH@L#ArC 1jh,E 5Pa,(6 N8wWPܝVS^LV@e6ϧaÌ'#L&pwP E{~jF%jTͳ a<Pst@.@`kRʗAL~P*xi" /g(A8 ^&N8u- BH\ĊTtc]l>I.@*C^jF^jzj  xA{, Ї 3X>3H>~@'`@jL`n䦔u%<\8,J5.(n(A=,’/2hZJ(L Zs2nm$J)`YQLx& M~ jf1-95 Gu2 H/ c"h@KN2 "T%rX pU(9-'-R ]<ʟD4dux&V *lx4Dv%6tP C" j^j8z <,%`mH?XW@{$@ I ^k=gֽ" :-(nPā)P=xu?:gax$4 jXx V$e@$T꒓)"MXg%nPbBJP(R.P*(* P@,#  C@l_ Ua m[k`` 4~j#-rj4B YH ,v ( GV,N\**ʭ bXX:b %  GkWM%p_ӂ8(VEPT|fS3DJ앃;:FT5%B'@'Η 1 MA@WI )UbvePAyFRCS8Q :U%٤ؐ4K \A?_f,C} /- BoP(%!!B=闩x`@1@;(hHew;m-F^CiKw`B9B We@AJ(?bt;0m"(LоG:$L|P6O:~KHe'eaa=2$  s |\l4P$L )fV !:P+8<\E6pezpEhP W%XrJQГ]+t l: 9dRKaaUҚ}QZ}OEꞰK"%$pXx0L@@D4P$(-"uCoVQ@+(*(EԡA Nu(P( Eu) l@#@m o sD)/[o 0*Jo~JC*⳾O6`p`=N%7 %O(aD56R ;m?%Q JAE WSMpo@, ((K ȕ0Cũ^ْi<>.^ `@WAnRZхoTCU, c] UM4n$kA_(`Tjk> |)JQ0,C60D -OTA(_=br<BA*4^ȕĜCI(Wa> XؼX h M-҂R/qZHᠻ 4@:ZQ @(PP_!e@Ai@D'SP M\"_H夤0zc1D1t$STT1xOR@V(c6Rv(~P(䓃 ,t̘kK ,_fa?t((?{mnC4Kl!Bҫаpc@8rE!CSҤR&\U(C5T @Ey  P@ u!RPAG B_X%QVB\^58SJ塲OC4RJwm@62~,ld8ӕ'1؃3'buQIv/;^$ rmS({{05}^|HY@K- oi3LaLn@g4i|^y0nH^s-SEFEVXM{=U (wNp:Ulmms-1.1.3/data/samples/instruments/church_organ04.ogg000066400000000000000000002014011247673406200227510ustar00rootroot00000000000000OggS4tv[vorbisDpOggS4tv-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M^3zڼ>)6x k h0I $a} 2M]Q@p<)CrAȔ:(EqQ?+TU[6lJwR IEFl %cKg@Xiq} 0 ~_8^[hmwrkv|N&;(6xM C8jI=|[zOݼ}!]mfi:+B Us" TwJJ'RB¥Q"3/lo9V 1k&b-ɥKJhp6S ! ,,^{v>Keh4NH@zNv-H9PXlLU$ob]U^A}ŵ)S݄&0MEQ@%F#I~s8/ ODsͿM#@!J2#$D SKt8ކ ^{Dž1Q2md6 〺Fuiz"m 5C33;&([`t>;P2PN mRX0Q֪ C JRɚ^)(D6<@ >kʑra<:xpv Ag>vuN\곀+BnJ3.(h@Sibd`b޾p;Y qSuQG4 _e CGZRK֜O5m /f'Lh@< \ ;@Ibӻ=H%o\Ey URo44UE߂)7TQ:'A ._~2yMw]x0'UYTp@]8  N>+֜n,jNQste!~h|9 y @'YI,}c\,^ZTĂQB N r@ q,߂F+fMYk|,<{Ϟ,m(P)P{>;֞? { xـz$ {xhdTƮ\ÜJtEFEX Pe֢@ (KMY@ NTtHo"}LFKe>͗:5 <~K5>Z؆= \K _#"+av&w  $HcuS_͐PNAX7.F}P@` o1^ bD<ܔb®pl([` ewGO%t>[v֔Q7vL <_Ot\(  tpri(O\TuD0hy 6*#2 PP( o 4 <[4$ @?K0\5ţbA)WT@AxGP$kcxefp4hS l@`:`4H$go]uɭqø`zfAq"@:"i@ &I`yBXypv+v  Lyn/-X,T; y ip֪@[6k?|Q% '<ǀA4ЀFdy4Ҧ1!x R?V   8PMq@)͸O$s^0\燐𽴅2ќl˼~P+<:$$V&Ckvʞ=n\ep-| i&<&xUT؄h5R׈ڼ%lK[C7aa(1 ) (J8Q* =9 #+(!Cc>@ K2k?jTmD$=,{6=e; z~2Uf`$@z@kY_.C+-Q4>Ca xce:P@x\ W6 lfaLo7CTs7P֢@7D!4 h{c<B'X#֛eUO-/p^[7 `  IaNJRZ9XȄY@H& B2@7ăPla#7')BAhh{2%+t0 #xM:D{jH6 `թ(h (mAEv(P(\}lǽi&KmM0 E< NSY\(5wl ,V*`.J)Fh`{)Bv F\|}YxQBB@#` .#'t#|Y.6AKTKxD@GFp 4_+t`ETXW5!yag>P I8ciWNkE{x{=H6 +L/QGNhxA,$L^D%jYJQE{APi;ݨ#V@ EC)bQ@ `PBC x/ "X &ҩxue@B vo$i^s@,{6](ۺBϳHACwHhH4г NLnc؞ M Gr"Z) *J,\(@ * U P.VMx GlqA=PPQ";EeI:J,c74,{:c[7MF]@'0I\w{V;;$/wPO*2PZ@JE@#@xԩ";Fx޿F=mΡ{ !ZC=8KO)H3te @l{)X;+̅o_aN;p`r@p>5MqkT ݪ($(*UHKo ED* PsAz8s.r LuJ[Kr.C{,3u 8g MsjyG(pL:k%u6ٍ :M=;;x@B@]#FLygk'̈́U ~$F818X]Λ`7b$KQ[8Qـ(ڑ2l̳Y)wg :k^qLS'A. Hг pbq438V.$k[D)r P/0 tu 4( (78GItKV wm 8#mZ19PX jn*JKw =n'@(Pfk58inEzӔpuG x\{X I\@#0IDRc߶Y5t+k@N0:40e7 )U18 :pu4(?@)ؼU&69%I!q@](I\Q9oEJY(0@kBA =޴vڣ! @%pFP2 ћO7۟[r*p*uLH@Z0o8e9 %n*T74f5/hMp*KzI-D[VԀ<[E(Х LJkvX4qy'! c@@ Bk!r k鷽\peW,RP/ (XX`+lCaGUhѥluAiNLj8"]@Sk, =?4 5`/tסőݟi$8L-)-fPtM$I݋t\SWpө1|yce Pl"`,8>mU:I, @'k6950mC4ϗƯ; Ԁ: ^@=IM^$,Aj,݀;8%YK&l4@m \dQCm5+ xwS"t(6_"bky3[lH0v!q% C(@kf%uƶ~?GZ $N L0,`إVIi1rK [Ǡup JQ ?4):S)(; UWVR7NŁ;!#bUsX ~IQk%@4kvIhzIsS; p @`~`XȀFTfu&:@ pr R1JE"D((K*TfɪG$a(92 r , &|PP],LM m@^P`l68(cZVY|-f a=@'$k'p @% _rFYW%pw\$Aj)F|%@.PJQ v7rmIm$~:0fUpD)튰 !9(Puk9*ej)_aj vPh Wq5PݓkWaδ&hD9 ; <zN4jtt0Otkf_]֌MٽTmC8n+RxnRT((`p,1Ke Q*BG2uG  {%1L㚢8rOrۙcd,\ޜ~@?pP Y;X넶FXC@FB03{6Aa}=6͎%Cxq!mUT)vI} {Gs{esbL`U S@7 [Nt"lN9PSinv@b-H(owN kŒW ]xh{6byyÌM :p|BG=IF?C!-CD PQD(.@k..,QEtEh0d|q<m`twҏiuxW@ ^6miLO/O#E;JLj*a [(TjGībq6&JlOH@^@ {t9o/zgPZHE4v E:{XA*aig}4 @'P' @ kTfmc6ƦF\e9T#Sa]@%&-= V'THWрu 7s]deU UۗVHg`]y?s $|đ؊7@ _$ :k'H@ҬiQ({\eõ&^xw]_0Boqd uO]χNj  b8[ Y/um^ʚ/ (<{XvE@m=#z$@7` 8I|$$kzpP= U(,T_%E=@pE] w&#qVw :LWF[d` 5\ {%eZg<+i`9^LBBz,$!D[@ P#Io] "Ogf CF8&.@i?F9est!-Mw>C0IV\gM%EۛM6 .M |e;<zóZBi г P0qh!X#-n5cjb 5 5eP'FU@Apʽ⊀g'qEA+@h k 5s*?( A=(Ada{vUۙag1uzh`+ |7@@L8[;MBվ~gAa 1 q'S:PEu ` P$7β 5z*H?d@lZ `B ` (<&Dm|Nj)iG`;}6#xJ @qy MgyɼHSRUZ:4p):J/ P,[. d;`t`+HH_˾ L8~/:`4Y`-@H{8X2tZ’@Bz ԖNFZ#h^/_ݛrîo f DAqPST1_06^_O0l%#Vl5( :Ybau:J7`s#:{%}<a:+|'q!20l' ]vwRQNP  QTc@ {Oig(Lvl,9GLl2}YJ7+s]  eM^ ڼBA{6-\g~ߤԬ p< =P x In$zl!ؔzHSm(;2e P[x gDJ8@,P|ʴdp]* $$N`INna)I#zsW,*ݠ-j@Q*T2q]~B(H{uKVO PnQ/B3F]GF,M0OggS@4tvy.+|88 zN,HW v?~yYz36? %:Z98(G ~J@ ZPGpj୵RX%B;mx,JiL>_EJ7ا(wBYU&*T:AtE{8Rn0]g3D4_ Du |'e{^oCꠌ,p~f`)P@' PhmSp$X{:DrjB_*L*8XyFlTV!X1C JWڂ{6蜵ntB߯SAR < p tԓ,7W AǺn8) T)7>TPX ) JP `дvv$1`i n)s1tg65aHG1Bj+@{69cΤag) k l@=l0v8@GFļܬ&b|HY*  ReZ[`l @WxN-T$A\cb[U(S!{ +!.XہF/p\ȁ} ,{vXU,[O% {>l~ pDP4 0N:`ӻ+&P"KU%I68 =hd/AM'ފ'9uUo7|{c0\2vDW3Bޘclh[pX {đ I }@ڐ @h L>R'0I1*Y/gOt NM]_&( &pJR^X]5KF`(A Q HBc|(bBh }*de!"tk9(c3BY)4a9P{,B%)@b &7@&&Ǟ՗=r":*PM  E `pA)3)  5PUV@7XAx {k+@S[6WH//QZАk)I)N )ux@ub2: &/ X#!Mo=[w@@A}m%@)*ݬr%$hBmBGFN/kcK|#lAA)tk9B< 60 P(?$}X2V#I%3LQEP\P ]i:qAA`yATKBWaK0E+߯@yz28d:JK#@_ k9Ҷ;_eeTfb   `O$̿vz,x 4~g C-1^%@ܬBů8\/CAQ@bzUW;0WLt[(/3@4p;LE?r\"@8Vzkv9c+&tF9[ۗlM(fڏX@{ JSn +Q5eTGa=/rt661-~(>1jz ,n&!pGt WvtE8p@Lhkvs]s\L `hIbgwLbyYlvqxSjEQP +Sg L{N8Z@AYuԜ SotvRvcI(PxP8k6ܑnʞm6 ీzp<`r@h3oSs?dnRS%,K7 Uh/FT@@Ig!n16Pȡ iRA%Я-(}EF_]pn2bH錚l,7h<kđNh<7~3&l^ @W&P`~ :AvRRl-:(vM(R=+J pp)(> kA(@r _Ʉ0rV8ޞqh=M0((YE@ܧ6vګ0qy@(k9Ҏ3iEy&=(!ax<P7:w.@![ںBuwPWG NۆRɔ7E،?] Y5 xeK՜?N-@cX{_\i) =5J#С: T@0EP{BIb]6;vt헥 +9*P@U7~ Ha 5 ࢀ3#:_hG p@;AYZP3 ɦwGH`:OggS@4tv{{Mzώ h @ |i|87@ W awJᠠj +@@) İ ~WLEC6EҀmr}R8j}p\}q*UdQʹGegt^8@{ڶmЄo h'tk1gj}KÎV`WcTXG[8 V;q\.]eˇゃʩ5"}")@p/4gRph>{9Hs 6M0@<^6:|R#P#u].8S'f2 !(* 4Fp+&N;R>O:B]$H^lfG;ęȹ*yWW2<Β`*{6:2m;34ϏUdZR `@Uz  dB jP}1#|.l%ZkuV Bmp]i7Lk087Қ$8UTNiQ4>gB3C:!3J{8He~Fxx @@L\^q`17?>5Uަ"R{U/8e685J9@RNddM݅߿Rz+C`\T(  we'kTqPQ&{%cDm;Vm-4W  lH 7@$q܄G%ݮ9'( h)_\ UȤ PPxR]PDjπ2ư"V+oY"*/@{6 L=3ax$ @=p |BrcM?f{ POX%#T7—SJz6( .*KL7l6vZSoRR^Qb5Hex%# 7 S%@Q&u ~{)c=DllSRx1 `x,x#$L. fsg:+>dRDM)g ,T)N{-"(P!8H<$Z P}ЉPƢ@)P&}YsͷSplHUCdh <{v)c?tb_7)5 `S pP@@@FML*>b>V%4JUh  8@ PF(D] J%&ՅGxfxL jG#¶йh|m=zq!=w5  `0k$h2m8ϾEkP)Pmt U 4B)FHP7F)VƔ<@(LlSc!XP(X;@ ^!] tAл@J+YP @Eh`|q 32lj[M@lL\v?dQbk7szP{Ch(@4մS ٔ"qgo;WTPo<܍+& e[)$  ,`S1'5ud X{v9PS4~E@@xN,Ӏ: 8m` qyZ–^&^pO j³"Lzف(V5]6TD' ځu@ᷱ qAs;%X@eXGP Yr`PP{9ؖy*Ff5hXg D04j oAt+'G,\=hP j;E!B$}Ǫ011!R&4efsmá X)<>{95hc34:%*8 K ioCr Ȏ~*Ue=BS-:)ghMνȺ̧@'4 c-lE_ ; bS[b>aE@t4{6>zʱn,!G$x @  0Iڦk,ۆ:88&h S]V c0mk :Jp 9˶CwcJ=%nVC0_BƢwLtLZԂ (,X{68*m%L̥j.(`s#`H${đ\.PoZohB id͢tu}6oDķ $y3pEB |̦aШ"c*dT27T|n[4)ٸ|祙>Xe4TD  02LiWWe($Az v 6HlvΏy-M@bt, -)]MԍWv̘tBX1>ZVڙ|:)4_?YQj&K|=t˜wʜ6ꀪ@0L^@i/KZA ФIb%B)D9Ѫ:(k?YFQ gJ1gɽ})nq86P}$?\"dBB+ ZR( {61zmsD;@x4Ӏz w6@ԓn[\Fs#ov5rj)i2(* P@,8(,Jf3 3MrGwxDQ{)8"mͳ73dhk9c,RZP癌揋fRg_"cP@9<(I5 %l@`"W!RQ nX(?nl LJ+)6u-! XqLUP{~@hlN^*nZ筛Ϧƒg^^@%^E+Om/m;7E|jԴt,QFR_ZKV(".E/I#BFi2 m\/NEokՀ*E*YeXlN@S =O-Ua0 j^p΀$Pi= ]޺袺%^DJBKʭ-o@ l5iK&u PΝUT()&Z9ŋا + X=)ESK[8@)e& , k5m[7DW^`*z:"6HL}ǰT3QMš(J\ (+~ trF(&ãYsj!):L][rok:жu|7Lx1  4 0i@ 8Itn1j̷+U"uj) K`uor$@~FU PHؠ1'y c*NE"D 6p/ lBv|}',4 P'=|/7H`kn'lz#|*0*,Uʝ`" PQ5V) %>فaC(EP JaL?}ieҫ_ (aE0>|vstچog%I֣`xI< a$m_G/K:gPRN_wB/~F`rF @)[6, %@Y`)-&hsAQvv\D\8CKfUV@ LkmlKVi"N # 8P@5b$JHpPxB!Qp {yDpJh8h P@ڢҌ(즒DNe_Ǻ;M@ ٵ2s@mrt[<5^ֲu~Xx k_r B)RY4z$z%@O@0t`<{=;{خ$}-QB*RrEC^4D,0/ Rn4\VM-&,`ְRŽq9*P(ljSpBS2kV??^k6mKC0>1 I! < YK^&7k)^ Ɋp"UGi `(@4 'ĸ0lN>=V) +2RT˶Z!B%p2K_"2,`|ڱn3? ã! l@=t0?R5"g~kĐ: COwN"p Dt '(.@*ktAӌ"t3\o 0j[Y. z<@(|vil`'#U֋T@8 @x@kת5:W=_.X)TC RT 1 فSHxQ P p]W sB[G"5̏WTs#ݧ!CB8Bag+tdžt4bk68T tHe͘P7+8 ߞZn1佻CTX hD]@R 8`E Zi B$+uz1-޶at*  P_ګd1ߵQ@c+{H8K<:ϗ~54,`$IҊ~LI@< BRwW0U\TNpU(W67:xH\.]8(a 'St<E ݞKXI8p 8@4{v^Qj۩~-s 6@O$@LX#$_Mr׋͏#v7%[ Tj)4U&EA\k68@Z>Y9K%61PVv#6;*xvkJ!"p*:m)@@ POggS4tvg^|NHCwt]"u?_t4 PzxF#Io&3TFR(SQe?O C! S { X#AŸFt*ؤIw[ ({{9rA`O@<>|HUSsWZMXlVN.$ON u_vS R8@SP/Rʉl,pE+8I X]E.VPp t"t5Ge /@, {vX{&2W :  d&arL  >wĸ_@@F*4@p =zȨNRf 3އxD&,r&,v+JR| h{ZUjalڋٰpmUu`RX#̳{察T 9T`uPʞ@ 2p܈ơ(J 07=᮱VB]=h! .};"P(^:{6ilKh<cS <  Pp~L$=^-Rv\ZJPiG ,7Q[VA))N؂x'pY'dmCxg"d!0 WApG{9H3B3uw75N/0lHN$_p\@`$2YlH3pe~ 8Tq\Clm~`J@h'w 9F@,Ddz "gV:?bta`͓>K V  {6bۖ40NB*#CbcŵiSUR1 (8D^sP-rŞ.< PE: R/ᲁ^YE1ݼOPJP@JG<{_AjǙz>Զax+U8\tj,O?#ecP)**R0܀)_UPBotPXD)MV)] PZAȮ`Kq4i{v99C_y'̎r!=@XKl$R{dys+쥤pQp)|* C0{8@ZrbAQhlL1b(}M]9Άt~FX{9ԎSKIzhhl%p"xKk@ P#Ԙʫ?n[t)SxN:V!AQJzUq% nߖ kMaG8};N;pH$/n3<%{ۢsibDt1(f &;_cZ6Ag&@{6A6LC@xMI-$ &܂8Y(uqTK :*瞚(.f{8]N$-LbR`֮~+jVEE@ynU8f;vHr G PPP,:{9Hm{r1fE%$ T  8"4 $ҍ`fA-D(`'XA BA)@RvJJcyUHCyXtź`q@ܯvE/sN:n as^;L^G[({vl+L/QGNP+ћJYsUgXWQz)_F+LZpWD=S- %nR(+wvr\h5UpD@o^`1ܦb:T>+@K?87 OggS4tv ހ{㘮@gCB{4D @XH!phFΧ@P -878 t85&@up#ڙ -BA< bvo4+pvN!12k@8߻ V@>9 @#70fvy{(e[]Cw2  Hȼ 7Tm}^V3u nfȖHPQJXG;n8HW"Ule(Cm 6< l$VRfl1x~{9k=DeltCBϟ ]` p|= !Xka:~_nެZ7`@XTX6gZ%@Hhs Bf .ڲk^A{Y 19ȉ`u[l!U4@ 3 :k)=ж6?ԴW^cHv8 ԓDo)zK2)`"E6#Sˌa$@  Y,ZD*J uS;!Y^}D:p0$~2aLpXKT,R A|N7:M_aEe=H4$qݭYH /_ne"v Wn?Ј8@Pv PIP6@+nB_aNmѕFc5v.sn|X3*yc/2ݟ<pH04{:a+,צ`=:kP7:|0R'LsMm>Pfw?w O+e)+B!U9"NrpڊJ1\$kGiSYD+.*@,j0D5`)}j: ߹^p@ kMs^n_m4:^L</HkĈ)35fj[6s,@Fo@p;/zTm,.>% xbYPiW,$p.\΋tȜ@<k9c<,RFyBOEA. Ӏz%?$IVtH3@nL[Hr P-jo@Y@ОvoQJ+ٸdɅ)uJ]/#ĐXV&D3 fL_O>VXV @ .`U kf%uPƶn\g ?M W 8 /qN [0yhS׈Hj6K&ϲM:|VjziBlENQBG)Mka!="J@=4yHr0|tC{ ꮜ"pZ*8pU*HpBP Lp @ jF%Z"feURYTBEvR1-Lw#yՁmaRAGiz@(:ܣkv)Ц/<~QX `=@'xMjX hkXm-G:XNЎ6 B`MՖ9x0mT$XnZfVGmJסP` k)Uә`42Bsm4:6 NB\/=rw< DQtj)̀o I@3@A E^D'@e筡5][ED1t Pl?@ `mcaW_xUVqw_&l{v)oB^NIp/-!vJHz^( @crcNR#}܀+`A-wݽFAq.B*yV7A@a(TfwHFDZۅ'O(g[9Q/Sվ]967@4k9BۦDZ $@_@ InDk.ܖmrـrt 8 (r HG WhgTj k01@zY5|)Y Da!ʔ][3]Pl^&kv1 3O%چP N 82@i :J5gtQ3I:^ B4t$*P@O[(woo8D2d|tq XfD 6;YUaԊER !fSP\a4@tlvX- /AxGC'$k|@mAk/٢EFϜhG`ODG=T@(%b?mh өjE\Ì|@xnpR7?Z~]\9voG,k9:ڶn3a6L=@;pD04@>ūD+W8rF \ ^@,U SP /ؾcbd1PUeq1 GX|6fT]gbkv)zqxB/+kaN,׋Jizn, &$1z}#^zM *P*(.o)X`R>|UE)oILKmPo (t:ՂG*+B T[&<lpOA/=-|#2EjQ/1MlpX@BIV?alͽ6{,V RE:PqǛLDA)AA5 Pc A" N:6t\ë<r~r7en0y~*H4f`-Ab{6)2m; y҄:CB{4lS` ]Qacn3Y.N;Jxu@ T,;Kp,R7)8ɯkWD@*#@90:<{%1) mχ9|߳2 g*`pK'Pc2I~1=c7Ge (j0 Vf DKR&LnHu[ I_}~k8s8>mg.\A%*1KS N|qK̷!5iC @ ^P~H&/ t4:iPdAX(8:-PвdJxBIjkЙCϟ0*[E98x`ShL l pxOggS4tv J3T{8e;34G*cAxq!mpM`rIbړ~&Gҷ]W(o5)4@.HE/[PFPamrUʗAWt@E >XU-Pl~n j:@gH{vZډLaY a= jDt`) $aI`a-W \Q|&#x ^df8]Э F>u@Qܙ T  6!=q X>CQx{95жSyfvïD@4 [` @}@F͊I>.#ϵ}dw)@P( F$ F9@hiq*JP0ʘn.k|% ¦) (OQBqqfQ"p#Ȁ{6)zS+S'c$PO L>H0>fJ{s.tI.. h- ,s@HR P"Pl̓3Ji3sPfnmd_uSYPP苯|vԶ+L‡+au^$Hz](a]9? ~!Uހ`08өDR(;Pz dL@|wAF ob-(@>3WVq+XQ4PH{ZQl۩j3?,+' hDP  ./9kV*קo;*FCA@O K\X D,\Yt߁| 2?{គ37|!;AeA<AXr{v9*m;% /#:QWN-*Yp/(Q>|NZ(ۺݦ#R4x3 d0qX1ֈ'0w#V0cF'^:CD);PB@ FDVS8P6ɮJx@0MGIG͞tP7gDοẍ́[W f> r# {vEhz{HЫyVj@0PN}$Gl475r,%Bm6So**(UW,#@&@V {gC8}t.c(]cҿ!bZ6$- -/"Z{v%5mBS z@02> 3N^iR5uxZ&Y|`+zuB#PUH\%V,(*FA:ZǡD1w)o[}W0Vi @`U{:m[BDF/j $. t XcH5=ư6PNr fCɦ 2DPI)FD@czO\8Ku`n<&;& 7[#} k#8K #{%uL\aNz1 鱐}H` uf7Ff:KJbE. `fPz0PA$@ġSAURkXJ=L rwkcWZ(ǔ S $-niDǯz qr/!U>`KG! pQե"(`jL Ip@y,?T/HEB*+|x8ѱ[Kŭ* E{Uj[,t!Ѱ u0BC`ؗ8(붽/PxpYgx0>('H,\@*p"@Ql;wCZOqK'_APX'$L8̢kk[P$|Z2 ֝>< z^ WP //5V)4QH潭TC\8A(BqE*O [PA@3Y5]y@5@k9&xmVsS4F@ih`{- +|s!,$P%z%@m@H#m4ߗO7G5RE\PRwoVTHkkdzb ({=x}RMEupǂg@Y`A'mcmH‡H%Bח `{69znDž20lHT$(?$`x@jD9?oM~X.TRԺ'[)Q: P^GC)E@A+ ɚ%t_QtĊf%4Apt{]:x:Z߯"­@@Ea{6-7)5l 8@t% pr$ L=c|J=gVC(_QC(}$(TTH|N؏HhgtZ]* x8  )51ɉ81n<-&2P;mUS"(|9Z E.РJYZLFcPh}ѩ_P 6uOA}I8Kc9a6Lܲ @)v|vvygWX>\0XU'_gތƷ?L&O@)4p@)Rx(PXh11gKs[y?(ԞD9k,Ha} (*@,":X{v)Yjg9E̴!R4 <jp%b$6?7ڧ}KPF\1t )7 : "0+ ]e1;@Yy6F8cb| Xt#5n @aX@{61:mlCpbt!+5 =z%@<m@j,7&wŚmC*.<gK(s{DJPJO(*V&.=9KyQ_nH(g:7 `C}I&F67&0&{v)5:l!g) Cu8`TU')]^@'X#bhwnValL Y]IP#R$(!% ^@ T]'Y2Wbma“7L -i߯, OVIzBOW@͋0oOggS4tv #{vҟvG/KwHh vPLnLvЛ`ڳw;Sj C=WH# ]@#D)W*JDU]wvXBMJv_U S[sOجü i*( @{6UӜu t$fT5|`!5V`l>pq(@̉8 @JTEؽʥߩXN\))/b1nqπ[ ,'e/68 ' k6)=0mF x0@ 8"8> p Ј&Ǟ՗^9"\u i*QGpp" J\P {rktc--)%-jpPIJ`VH+d_- hlv ̬UM =H k@%]1[thM i8T((; Z٨R3R\^lme|?r* bU>aU:u_dP2@ {9}<ʶ m3;&1iX ԕ @@9^ӄ gė (U@^TpVkbSdlt]̗ yLT4A2Tݚe567Lk)'mB `xhq @ >[>IYJK:gO`JD PNkyx@70?o@:3­Ba))쪂 Y! l}yYX8@x{:(eZcy7Cj† H8te P@ 8IIrbuw 95)M]PAA=)i^ h* 18\׺W49> )6 ڸ 4`3KW\@@kf蒾(X7 T ҋwxxWz%{P!8IlF/9'w;N,ՠt9 uU"U(P,,T*HBSie"ڝV(yag~{UJSQwxk%u<t3x 0#,m;H%$X#ކtf(QHh@8Kk:J"pJʋ@ gPRj*Z 1>iyQ 8fRοI$J@! Sbd k%uyG白 HKb``>mҁ$ Ƹ$S>uCo/AjuEK'u[@qW`)e`"ȸ:]6G+=ߴ(PF六v Kz)RO6aQt{%R SɧOԔ0<P < Ih[LiT+jFpvwE \(uz8p7PW<w\j**4ЫKqyL?=2rjR@,u_ r4Wn{GqL+@S*uc 45b]6;v閴_\ Ҁ# @Э)8tD_ VhΪ&{rR=:JJh ~G ]{U# L޼@Z k6q<ʶHh^`N0yh!uQ,]T+t PTUY@Q @BNƆj=7_D:h0 Y(PJA[~,5p/5U}Q~@]Pe{ݏ@h{{d 8pm /$q@C=Id\s.c7F9paoP@< U8@7NPf(Pط ~W,Bd2ن9vӍn RpT_9. @_EN(`:-@@&{ƱnVaOth <@WNN0itjU_Vs8p*PaO\ J7 `r[UHggd6QX {5}=^/IX`x\| |:P.ooŽO00 /.OdJi}^8$Y TDobLp+Oڒoa9^BvG RK!  J'h8y+ 7X{v9PSy~":U@z *@pDpX!F5ԐehG;C]~E,Ե@ xBQDN P" Epc8Ey@#{n7 (Z%d@{fag;:1&6@(`OggSI4tv L{vXQiy6ƒ^ M I\h@=IV<͏/ȇP&B*N pP- 87G@ lZIQ {x.Tn8DLAl?8Plѡ&!f@-{69`Bsu<"N &k&T{뻮2h/qN l(}|ͫ:P  JA(ge0pcnX{SN[ɡX@()@%p: ! (d%U"\@Fq.Ζ7i' @TO]Im@O]QmgN W{9c?ڶ<ӋM< H*@=l/D5z3QMkDQ@[=4Ppq [p$fmk dkƲ/uR)t3-w3Jһ,Vv\ޘ / ({X̱M yEth;Hڣ26 &7@j@FlĴH_@z@*@@Yg"Pd"VJ@WHvaKG[>;I( cX"6_Nx\Z]X,@{XD{-:mi0z[Gz@l^8~HX;7(x7(PWRr,@i$ vٔ."®'?Z"2DN@M P_\G090H*d,:m`RGkТ6( nP@{Ujs}J2hKKԝ:"l:@y`"D_@ X# wVҾʍd1 -p( BR# N* ⧎#pS)ҝSꯗ~E̻W'[mۗ}*(n@X2A{@i TϏHKT p%p6_j@BjĢïީQ;\{[8E 5,gJ*0TP/VbwO%lUMa?N0npŌ QȐa *)AF|6ڇLiӜymz洓C@@:pr5I9{]#Ѭ"Z*@L'dTUް@)*p=kmiG#3a=J V(wpXQPDTgC3ܑ\pu0<|ڱn3˯ChPCBz ` | IKbHe w[qk( T@-pwX#q?@yVN{IG(L2\C]>;q(Tv@@6Fs18d;cHLGQT܆x {69e,-Lr 4, 8FoMx]Sf*5H2B(^iyER"ϺhbqFSw{Xۿ|!p\w %QuJ+Xb@on P k6)bٖZ~;-a0<@y j&|6X#\E^1Ҏ,wNi J*\'$RE>}4].X bUXqlg覻}Rd+[LXlvhۮҲ6p`= v8/p܀(8 O5xM=/+lUʣTEj(Գ@劯8'%"Ph\, Ev Vr D\QB"-EH \S 3(nULOggS4tv V|z;{6%ʘ`gj&I@{4j@El $9cWl[h;pPo∅*PuOzZPx PsYoPpU@az GWSYsHX7yfn p=IT#6|PIBo&rVH  ]ƅE( R̓IʭRx((`Ukd{xؤO'k| nhW:S‚ Yjuwp\QGy; 0k6)}brgt_OoTfY k6)"8e+|ORIX g*p`r Nsmȗa'S+i TO^\{1@ X(NB@8hFWC ͉k(ha0:s+@ Ssx 5+fW5PR |v9al-mC!5*a=@;Po @@i$VA[g[FbMPZpUx(@SEP'@ M^z la$ tK \J{AC%pSYI`PPVLP{95n`LKCf&!=#@$ @ uvHmt&7lp:DY(U `l{U@ E"䀋NX &[rN$%f$ؒͫhc(ѱ:0lu<ڶnVWjJ* `= h 0XHֈm?$olz"g[ `:Z"U* 544VP ( ^PPWvxQ0 gh PZJx1}r D [wJ`0Гk:m=,3  `K'0 [._8Kq!QSVb PۀO-:EɂP*RM:fMzŏMPH)*+m@U%.CM.\Wh*% A)X$$k6Y{=OGX 5 Nl$yhxfG(}ny~S]x"R{Xl)(Rx("67iW3WEZK,pn `(Cu/5$ 9ƅF16yP F@ {X7Ҷy~XMz N48V'&@8 ROl6*=n63mKx8r{A#Uuz^#E(Px] 3EK ߹7U mF(x"@c)9ߦR3cE3"'<h~k)Pn0B/$MmӀ|z6$6,$cԑq tpઉ`ح3P9޽E@&*PX8nU'zw{wG1oL`A>ut;S3 @>l?P9z-?LTh@;8#`2\:$n#!=~q_ WF WJDZD@K8 ֠ detRXA[U\7ˌ6G3nPV+L(|v i3ˬ,P{^z0yx c4S9+'zOc8 TfNm@]}3<) [(*҄gHf&`GM'E#z+W7ǕvLk Nb# Ek6ilWi׵Є54 `0EX{xf&9h~NPoq߅: 8ap719[]}DfQ$A^8ױyDMhV}5^iܐ!0Hkv:!Hg=/!tX,а _0I/M9CRVO,XN ^+4m*7QJJT[6}.^*0/X8X6@|Y<(Bpp  {9}BΤ<ۡ^a t \$X#WCf:J?v߫=iB!ZPWp@pB(\QrFT `y9_rѡ0NDll)1"=[S_@0|RÔLoZZ+UX#h:0HxVD?Y"|B Y @؜'- "o "c~@71Sp,߅8fl38q `$|dg?Mf恓 @`mN(IrKdw~t- K4^T \U(:8JER@B7Ei+)#2@g㨴sQ1MkH&,,]0VL(p+ G{H*L4t?<؄]P` '/ 4[swzi`)+C @)P(^@UB ]ŴJ 88%e+6 wJt>G:mx*ȇE{6>PnUKBXCABx,ԉJ{&$i_5}K>+j(+ 1_ u)Dw UJ0=ДY$ в/ ;ښU9AqҝK@UT`SQ'2V0Vc)Jy@ `{%q<ڴ =ߝa< "Ԉy$/}J/X l@3:pnDA v%h©PrPXґ#&Vݎ^N7$؃(@IW90}S5ۋt2r({vlpwMJMP /$p6p 'B|7濥Jd.?:Q2j@z,g66A=#(Vu*4p0GƟʙTI'e;ɓvKoLD*ծ폄B(tOggS4tv$ cN/@`p@5Va&}x:BMR"% K+8Za5)(8@KHh^tY؅BI:@9jU(26(^tl=?Ia_Z+w1&B8u. P\\. .<Jpay{&=wJ!h>r- (@0tYџ?d, 0{v)c67C%r= ,U @$DL?,iُl7媪tꅰYKB"uZkʮ([V>!^,"Ʉ}55_Wa#@!@H=8dD]qP2Q{H*LgyfDhZyHH@@kԤ19m^)WZT,Qt"@5*&Gm bR:4kx$ $) du㎕SQj3:Vِ5wV@t~ @ {9c?TAp9MD xN pEjqDνgl=Td-qJtkPY PQШntD`-WQ{,O NTw& (`L{FiI ,S+= Ib<ʏd&i7:BTcK$r H(A@*OPtB@h*4WG;I+HvY ǵx L`rYk R{LхÕ/u` @{ʶ4 @BxW_0yX$X#- V;[taPkJqi)?#8ըe\Ib VO^L(PP(U^(26'8hS4|]Q{6msas M4Ӏz$`@ @ t& MlD쮦p*DPf"U(+P(UEbqfTzQ)rYN3]M*y"1`W2/@8t7bIth {9m17& ^pl#o ~l4'=׷ ~G$+^ ʪ5 NXgC@&w}(kS‰9"-<:`QV8Pvaϩh6Ll&׆P96y+P F{B9v@g *`@,|4RJ[p@;"Q> 8TSh Z綔qj%F6DoMI{ڨ ne ׷{_S#D@W@{mR а h5 W4)#Lr%I!<-$^P[u"N(@*(D @Dwٟ*L6Op\WGX+M?JR]R ; @{f:HcPs҄%,W4lIb3sDoHe pAj0qUZ(gP%8>^ uNfMweLNjgk7}`{9Hm;:BCz,lӀ-D 1HKwR pkG {y ,*r@T\J_&ע:<$Osl% ۂ vYa:+C*( 0 kvcZ9yvTmN V\h=Oc]  7_fsl}\D@{蒺(X<"R: |TJ0@K’q)vcjj_X@ ,(3w@2@ AF[D] } s\*(lo[A\># XY:@G6k(G^W/5== aM|q C_p^VߎDB/I#@Irfv1&,'-U8kw"m]I~`,?)^]E00 /EEzMwj@8(EA OggS@r4tv<_ ! #$!)*)|uV}$@''Oup%lmYB#p 0=sQ3?SߖFULb ؠyiW?<PCav[!X:Ď_YHl qlucSRC!K^o+~gقBs;|鵙s+J(O.SU+Ȓ`j2tE[?oM @Mg6~B02Vn3wOzWpQld| ; suS#|Eo؟L X@9/ak=ShsjF9i/txp\ @o ɥIRɜ| p)Wi!\\B}kh )sC:7W98ilw&ubGDܭ ]  ^q\[bu¡VGɂ*0aQkMS)5>q%z 54 T&@` X#ukB^>S<KD@)| @F%C&]a_ԈwwWJT]I&ێ8_^@ML[ ێGJ2`Ak L7~MZJ,  H8 D &8_]4RÀ @>(zw,WV ܋ Z@ER.rIA> P UcmFxnF SNj[I@gk)x?xڋIhX4.  uDJL<\D Ԃ_-qdD⮗ TiDU7ZnE 03u%K Nbެ aGZI/pʶ t&kQ*i4zm*`=[ pprԓ*Wbf! b GI#pX _uʓB(YIAPR,N;pY @Z ySZR gh~k)cGe/N֣;, N kjج]f&LZ3 7E(WDЌ(M@t_NM67qҏj\T')Uwu^A`-IXO ˍ L k1ن`Ii= @t6@jvg϶UXWT+0@-wf*pE"7T5vKdr$FPJG|D^aS=˯P9Y,& P0Fk>c[<-iH8: jHP'N@Bs=lCN8X9GD) @O BB@!o E(Ҋ $`.qdpqpp.\=iVR'+hjBvV3k6XvZhJ$$@WND0`h'(6~ _ ~: Va E)_$F-QJ T0`+֑/*AmqPVf"ǎP6Iup@U `k)cZnKT@d4&6vXi7{E\❫@Z NN -(D $GqM֘Ios[V3BVėYVS&i P}%h|!{S1g+k%(mZ/T,k $\^5pFH PI"#yٌFm$a4,iU"K@@-F UWǃ T(̮An3 @}{*+lȴW\@jk蒺eh£$PP4 DUҤ46Z5%V B`)Td ,Wk-]Un‘0GAd,CJUY\k`1GD;Sha`vzDp Jq ʄxl^0xgǕ~- < :\c$9%!OzU_(8VCHKaW ޿rB'-̖P-n@YӅg6}NSn\lvz޺MnȰLxy,4*@El/= +$o:~O7Cd!U @ U(RjL(7g)r.l?.Фgp&YCP `uuGv} u2=|=h +|vvl3xn)C{4 P'Wt0_`ԓk>ve' *B`ikRUUl4;Q xKpR`xWmd%Xk bhJ2[OYNEmpW(H"${6qygn/Na ,x=U@@`hlj'㼇Q_saTz@Sʟ;P5SS_@UFCޏa{ѹ QH [%+TXvnP |ۗ={9u<173eO PC p tG<mԓDZ>Ǿݣ Sp8# < pȬW/FkTnM;g_Z7'\PxNqP3>llZ7(*ģ|v6)C+Loƒ6  c@`~ I^@'L#;܃*n; O48 `%.]M GTQJp; Zō)(s`I`pnWxP[MN*D`@hOggS4tvm{v):q38ϳUh/&!`= z6^o ҀFlbGo!~̹)d(JP u64 ǵ^Jڍ5bx@XR*U 4mUE^Q[p7W U29h d86St@F&{Tc3* ѐ; M 8>O&$ N¹V\I^F Y`YKmJm  m@.X`uL6 > Ɵ6c>}_;Tv#g( {2mq-,PP{fq=Pʱ#FR `N 8FRIE79 kF,Vp RW]]LU ]Bb @Yn*C+}5Ud pOEy# xAv=B4 hZH7t5w P {Z(ӶGkaxK,Ӏz``@ X#/AaOnKV6K8@)7i PVf0E' TA:,  T$ BSq5prn7 Йkv9Heꉧ]'ptx6x\@8 "P#shLNefJ\\q˃#Ѡ4@ڮ(c6,TCUV7 U<-НPIE9?A}!eA\a}UwnG{MKN2y._ ) x] P`xBCpe/*>|@?pRI|A5U xw@} PMZԔ.-,5f s`5u;Z ·1OO:_9@^+v9c=t53Aضa4`' iuy)3I߉+\\%DЁ[(Ӥ*6, ٪2(n`y1@ӂp1`~;;)((Qm.e,%ztq,K`Qu9Q(O-M,Ӗ pN,`Ѐ8txڏIcn]/Uw*jUUxeZA(-y+9_y"`f@ u(^M5y)Xm>cv P`4twx.2$ '@#"I&HKJԊt.R߸i%E@O̶Y6G[{\?;C8C   grk48u^+GŜE[15V0ƵZʕ5U F@ywI i(_~8"FRRIc(U+@*P BѣE]P֬p[&Dx8jA}I'3r짃& Ș]wX!tzp\F "e9vH_>uAUv& m0cH(7#&5;$vZQL! )7(@ ;J=U5[kpаcȂ޷ٛWG('E伅ja&?fyִx-U֋P'b݅!fuz@) T0 ͢i [RE~I{4ŒYVl/i><3O+9x򵔤Xu?[^Fy2=]ۍfd'{?D0NO3?0-c=ӻyhz=?Caiizg7ҀLA/2 @lmms-1.1.3/data/samples/instruments/e_organ01.ogg000066400000000000000000002136141247673406200217270ustar00rootroot00000000000000OggS *0vorbisDqOggS *г-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4s@BDFHJLNP@ʽ4uԃbƣ[sU{J\Vܡm/eCxfKI,O]ƧjiYF¶_rΙGܷyd*qGSdRLiV}hԶŧR!l vwD6 `MU d~/yȯJ3;9d 9#Y%U v<V)j+dT!0:8ݨQkX0d:x\t]E<):֎r*N "kT%D$PrcX'I D-RRE.K5r D *4j`EE1 j[\ML5LS KLwXEEEEY%Nbe/;+8)#U⺨6_7!,h[E %PbDEE Ӛ˗2, \̜° w<_zX *52z|>gjˉ/ZkY@oykG@_pK26< Y8\|%\VY*6kwUy+)7X`ﲏx/+ 2Ւ!F $@r$y:\uqt"u AΪlBQj(7P *D(b˛'LHpK 67GD9XX~ A^u\ ?Ex ~P `~EE0i;%b%c@Cv@{Txw3r9ɏ'xU#=g 9 2Unkp\>4 jf,e *Jހ$$K XUU5yW]<;\\\(%㍪VE{iVK%@L X;^(#oi1Yb]M `Z ȝ,3~`OwvRp$$2+q y_'bl, ,b;@P9>xv-#eWy蟴тjGweeEH Q+8YH$OrCJ.܉v *RJPB0, 4chQTK)Nuc^Gh_aQk EB( N+YՌZ1A1 1<Ծz}Њ@v P~"pNpfb+·Z%Z@k3'gy XTwU_.r%( JWC[VSX Vxʚ'IO YjF Ǫ.&\RhԵkDe F厎P Puo<@@P 7 zȾ |喨C߻,a|f1B4C@ғ+h] 5 XPťJ@0iV@f @~C-6 W Sb O _ZK ,xv-c,q|/*ZX҈DPV H%:5kr@O 9x:\܉ԭk2ڵ\(,KGcԈ&ix#(P((2 P vfIlbX%S+!$dЗC; l7/2Ъ H.a OTU3 a"x.^ J+ w:]Ǐ~8h{U v龄_id?,k?7`UU ,5ʚ ǪPʵ\%kdUD75I(%"(`d\<*0x5V+Q02P m,K n eD&Fϗi 4?$g(4Xϖ\8K1:1YL'xU:3,l4؟r\V˗(jfPE Y}x&j$t PʕND \J @21 Z[@H." UbEEA$+z%rP9CWe=yO @g2F["7(>)h >zP24@E@KP(4xD8֖B%<,h`7`-}%]>x?CCł*iLKQDYR >2UI<dYI@܈vBq$HժHrTcJ+ ).&ko1`e Е%VHUwGPPo{b$f@)rm36LtHqXV-Y@0 @45 2VX oV@K@w-cShjQwǏ$GiTHTV7HX<H$@*pJ.HIrIk56=, @;)P&(eET 0WO`,W*v QT+u47 v+l,-xe1< p:D ` P~ҢXow;s*(`X-@wwq㙞B@˫8JKH~QUZ98F@pc ,5ʚ 2ܑפR5eZ"r02[@L.hDLX.U` ED|„x5[dL#;X`i-X% .^W.n+pzxd_T˜(Y@, 7 xp@ v@d  0ЧAY|#(w-t~7HcUS?jyH~YU$2QUV*JP#j@H8VUeM.Zw>zz+_ @m G R+ (SWd05+$@2JA"@A7hx ( TbCۙ!+ <@la`[N ! ZOggS@_ *s[^=8?93:>@Q[BID>` mbـ`eXf~ l pv- q|chjqq~EQ%ZP?0G$$K͢HrPAEk: H@yYPI+!'(/oG G@g > Ʋ\I%hE&p@8'@ # pMB68edV `N(5K^|] ,Z 'U b>w-i?}rZm?˗/'`?<*YSRjE?@NV$t Pܑvqq@\4W8"y5D @2p>8@ YPUΛGP A5?PVS / LE0tyr2]OtU O@grQ8p!K?VcAj0@(_+6 q p w-hϴ?HQU%׏A~<(k@T ,5*@f @Q.4'uGJJJ;(H%iMlguT[ pV@F @Thj<9X~1doX^JƯ8a&aB}~+C% ¼rDQf#*S9 1x:IJk( $.mWz`jP1@eكpi@JP#v#/u'݂<`]l" b cDl^hy pK sa('ٌo2&xg-8LWkZL. >w-S~|E [N}#/#PQkZjxVH5@XUjR$uԍkBKZ*һX H Ű=%9P&VWSX]PQ.ȣ@8P @qSmEDqu3 p#>@&r @`p(ՆmH*"80VXC<d `fwNvΣ8eZLblѝڬgY?i15* VIe(k->YP ,1}pTQ I@;(427i$Ȩ& dRjbX@u XH+P& %(% @xxs0iys(/X .K^@y 6xB@7UMqnV-U]l0VV1fKx`OwUq-g6GnyUQx/a+.(ye?@H$KUe5H*kAŘMKJ DI 2Y(@@Y2 G_):[Reh N(D)cOP|9xƒO-A2p2j>6O@6 `X`X,d˘5LjS/[ `W3O3m& PxwGHJjGxLH8(j r@O 9x:wAeys9ܸs$LH)} `V M,PN2 2S>^4^\z||*IDJL/J-K p7"*-6}[ڣi>y/@+wgH= tـ:8"Q @b4q] Ŏ"v-^]SQjG, UPPp$*jV$tzrHrq"whwt[2͐T!i~{l(P$p-dWeJP WlaqY8@bȡpZ^B, ^X.<58 F@@k? " ?]Bԭ !1 bdf`1lv-hOU(Gt?h4b? U| q5E#uGW9(J($[() "@9<PQA6QI1s8EP.!n 4[@$uC485G5j$t$y:rPI"ݹ T @("%MDm."na@ή(@XH Ɍ (: K4Spt:X [)xPX^Z lVJ 9`ecT@P+tQ!,T . w-c8~X?h14X[[bp2j? (`~eu- g$t U]E*RkB AD @ ]U$*1J 额9&xE`D(YW`6ФaغV@13y(x林"09 b0C@DUJ-e@@sWQ Z<>h~C˥" XfMGh#?P(R ހ53x:R= $t%pZ.5!BUZň%EsrW#` ( hs(2BPy˸,o osKxm7 %`hͯ }wK@ ĄѫOggS@ *48CS4LI@J4L9?L `iq51y Հ]vB@$0yv-t^8eeQڬ8WY-Ѩ`?*P1|FZdTUH$@Uq#;(R2RHI)*}N(K%"@&; @nEEpf@%Z(|xGd,˩,%Iβ`g, ~u_ZW,7ω<`Bme_I`@|C@܀DbH?33EX-Zz0 <^w }!m_a@>IY5YY1"`HVVUW$bj Wݸqurv#H AUf " n @d mj@J_Uzr>u MV˿>%osD0 O5B>`] $-7о@r( KP v` uA^w-tZYjTjb(ONC#*+EjQQj'o@EU s̚ cI<HAe)Rv5*J #1q*]WueEDw g; Z,`F,@(W6%bL^nx򚕷>@,Q<(; L. ֟-q@-6)x"e7n8wU:VO'Ԩ`}UqHGh?.y'I<dEQU U]95.k2UYR@d@H&͗HP@Q#e K(Srd#ŋ'4t  sMBy(@,Ola h5+<j<9x LK0:S+@#|:@" W#B 01XR !;&v-νqjOϤhJLw瞒pjq?Ae*? nj<Hz:yq2w!RhūW` Q t9A<@%"@@Y@ %,_Zo ው-%*@;dúx(gyYSX1! ¾ozPW `UO1lP`-lKS+ 5G(mx@:P_w-ꎽq<=?#Hoբ8VO,OJ@%PkԬDYU 8 tf5HcU ;(Lw- pM{)`kAM @(173u^(ͯY3 *I860aoIJ 2%b0 +! BDb` < ĦbwU:YԨ`{U*q|EC-FdUE" X?ZI<H4pCv)@VE"R %lei0DQ"ȋ8ux #P̒&K?2q.KQ㿎* 8jP XӡZFXNvy=.n삯 e#0[.sv-\?¥IFkw۩X_d(c?D"jZ砖 Kb @O YkT$ 5ER v JMT! S)V1 1 P$,@ J+$O0 CΛ͖ `o7Cx]Ej^`#AhK8 À2&Հ׃x<  Uw^CL 5Q$vc[>?C3'Q#EEQ YVl$@r$*k%1]ڝkVeSF 䘍G1Jau;\@'K@5A 8,&Wԃ":?cWoy^M>֧j-ZS. 6¼=j88  @u0y/> Q \yhyYh-. {F v-Σ(#o֢8zq|I~e2QDPKoRH U)r U.֭(*C @c܎h h6,p&ITo@XrNYjDPJLN% !%oV Xd -z 8- |# :Hf*28V~KBn@ P < ?~@xwUÏ?JRHUz?Z?R؄eDUu"Z95x*@O 9jPt5kR5e2z(5%w1 Hr@QQPU"p͡X"^k@,e4-!_gVpCo\y@4G ZH(K)Aa8h 40pDZ owp<>x:blAYX:g{X eEPQIPQ jP5G5x:R}*:ݺTKsHQc2APfPid/%Ho(` (|X<$ƏpjWDRG0d6o2`͛<~`VZ(&T tm B6^xXSHgǠWyQ ? /"Orv-ꎽq|/ߤ(cmբ8ՐGRPiT?'PUk**?@$t UY(7HŵkrP AZl *6j"("@@Y kT÷ҟ_K ,T1Y8`K,HQNXP'ZզE(-Æ P OggS@ *S:UZ4J3BC1ASB8ձ{ }P(jlc@! f4:` ^+8RwU?%i+ 5bP䯪vu|JҗЧH~5%&H*?~(j9 ,5+@O\vt UFl4"!-" ѴA 7 ?pI\墆/ &' .aIVmĻQP(~9y] +N'h@c`h+ = F$& -Z ^XV w-t[0$C@+͂5i FeAhA``Vq)n@w y[88d~O`XB@l3x:^%Oru?!Hc@lI<HBŵs@TB"JjQE$X-U@D 2Q$<^(Ub Pʨ@5%@ @a;;?@=Xu6S#\S + F0  @mMP |eV)%o wUGYV_elvudz,42Tj$tǨH*jN dHݑ-B UH0w"1'@sݦbA^F5+{B ! z \D`RMɃ@os6[8uJ? a #@`@ 0a7JHxb4U`1>xU:9GiTSb--Fj-BUpcu?Q H$8V$;(EJ*Rkw lO{#Km48YH@pa ,ݍJ!VVbVXJmkxԙ ɖ fh/@e<w0S𫁁7{Ufr)9\Їk`@xU>U~DF2hJO;0F PֈQ 8YHVV2 H.\u5PQPʀP@`"DXWM-. 9@CQi< +R/ڄgpEcHT|~ `i#&L Ç0}u XޭXX0`x< l #|; O@f,`KH s <4-Nv-t^[?OWRij;֢UD?Z6**@Q 45yqQUwNTk7.9h -/A("f`>Gd(mT@ARyd,rE)2xGk`t,U P_b3kR`%| ^Y9p E`|(1 D=I2rdj lH@ lab} X8^x;xE%򠑌ZN;85T%?@$$@Pʅ5FkRB !Q@H( @HT$ P&P"Σ.x\Zhm„TP`GΪ!(~rTnpϞC#"= @֓ ^w^@+ @`/ Mq>UZ 7¿PěqY! V0; 9wg$blce+~ X8 (}d`lH2(0>w-tk/Bϵ֒j$@r$y:wP.13(ɵ (!J@BD} XTY ,JT-V3Wz7- WCel/^ dpKED>6o @,dztV@gA mx`i @^ l+y^@,K;Ц/k'v-m8~K#IתEݹ9.$FYU&*#P]Y DyZZt qD.&uƵkDUiU)U@%!^rj]5 @ n@p=y.?/te%JtYE5ՅQ\ \>o\`A @x0@­XX p* bշJńư8XJZa@|yT w-tZ_K-(f-tCAE~jNP#~*D9V?0 IIݒMr*S0$J/#Ӑ% (PZT6d dsc2Q$PWPjP+؛B-GN лaHb*@2") f,h9_  L3 anP,SeQB]| `XX/ X4@Պ@xF wVhQp^i,µ@ &d5@P( g$y:cU vYdEr[GPZ@Ƭֺ2e2gdS`xfD4p ^.5 ߚ7@w''8B@z !@l@` V 2-E+[``1x૑/`@Z@fC kBy>xU^UV(n(֏PRdqL*AEg(x'I<d" UYkU#-HѭkBVl| F[@YPP @V`!&^{fW6<\2 c/|+v75AլE$4JC+($ 2bAK,x0#6O&/J~;-wo<(Es9Vm`͑ p{F S , (1@@$epBI0mUB,/h{ҹWTv莣%i`kՎn?!֏eURQ$&U8@O YQQKe@ DJ hRv ?P@ (O`iQ?dĞކply,/#(`r{=OݳMpx!/98^ 0 )Lmwd#hv?)L`g6,'c=G6Gw ߥߴ e_t$=iހG5H$@Oõkd]2I"Tc2!@f"E3(ZTH:Y RS by ފx=nC6<9@v魹w'F|r A=)'<V p6@F(pp<].#3l+p@\)~ ~hlw w6JV2W:v~ >VVGK+Z3 JG5x:RQ$t򮺒HEJJBHC\X vUaWMB@m.‰ q"TPDLxݣ/_9{L%c4sefb*̷P0fɵtۘ`P`! OggS@/ *V3>L,-#Q0s!xV.@2CpR: ZLσv-t?ҪIB V-t[?ҥF8f(eP] <+kH$@bj@9&ݑ]B U JcfV1ɸP& 5XE (70QE׍(#;bex\5zWj(XPx$Z,'#=N0&PPz[< : =F+9w wQdz\$hU ݵmWt?IQE~YY(@Q( *^R @``xd +Z̿ ?K }@w-t?8 4f-x~/NC#Փ@@Eu3jH@xʪO-5V'Ip:X9  )-Ѵ`dBV-jU_j D>5lN0J@Q& w` $/0AnL _4u'j7P H@`7 $X @]~ F!\ Y0FwUǏJ8H^jJ៨F?20ϵ 3x:ɊI@;&kڵ\@VI@%[c@DVB TQKԧae4A|B^pxgqLd)18*i}Xe|9@<Ӝ>z ЋZiBPr @c, l0@ @`p'Wq@ pŸ P xU:J8WU:;X~%H0Qu jI^*Zx::8&S7B)R$ f&*@tdelYFFWCP=1lGOlln>^O?2d 5 4CB m#BK*X-sBddN2->z /R`wUG㑞flv둞OWDP8X$tH*ŵ P X(9 S(LMU[<=9cm*o=/d2Sx Oer|!|2,u#ޗg>c@S^nIHKZ`| - Bjg6z +Q8 WҼZ6^w wsoXį$Fc*]NKXf2QYUfL>F 7**N$@T׬JH8(DJn$5 EZ+b |lJ*, ۉoj*hY46ipY\qxC7<N`ox0`>~u'Ln4`A {»XYXAtuBv-ǏQ֪C_G 4؀7 j&8H$ E*R:;@L$(@ @@њY@RY&7E,`THPJ'T˛*HNCae^Jm8lO)~i,"y @Nx(d-b$0 $`Щ@JpЇ} _H گ1K"&e uP>w u^K>?WRnj[[-Cь2abIEY Ox:ɊUG@UyAqF[7ݐDTkT2bd ФZ,P"H@c]p(_4PLJ¬8/8Xa hW(7+*X`a-⍰.ao dT" #(h@T ЀWi'MVs8t؊f0w-t֋gyXA#mբjLFEϙjYpaI<H*k Srv'Rג@E)C$HP؎2HJHP{[8A(Π)N7%]'@Fbq* GXa@@x@pXnSx( OggS@c *78/{@޹, n 2̇`6@(.@,ީ}͇ %4tOJz 9@x:`=Ӫ!FEVX_a}bh?sP%GGY+@O 9XUEAH%R E(b@Ԥ(>>.,E3b@ ÌuW;9Q > a7xXq .Ҙ2Tb6j3?ۇ^#X p7@*07h  >5ℿG (Y ,2(QЖ v-hK^UF325jH$QUG$OpP*m k׮Uni[ D@@ @b6 @xUڿKZ~ȃFjWgGX-?RA#?VIYE@dM>fP\V 9 IU]UU%sDs},(kD@QY #,((/"W]!L*"Q,|l~ >ᛚ,g@L( PX@l .X0@6Mۊ|qD2  J] 33vԝG|E#h528V莽(꾂A#?d5grT7VI<d9(.Afݑ&Uf[dUOnOز6^%(S5VJ3oI Cqy]+4WL@. OK\Sz P ,ZF 5hl+8 HXX h1pxtv{v<|` z8xlwU֟!J U.]x3E2Hej Qʪ? GUUI<HrIvBJ%(cţ@Z(ie%15!Dmj2/`8>S ?>@;~eۜJx}-~xPx$.4LbxaVԡK@f(f,gpx_Zj v-=—#4qxZԝkm|/+)5ZP jL\5+2 >@O YjTIp5ArK'.]\\\Z@BΏVTUL@&%J%+ ;=3HW bz&olqnV PFl^q'( -}eR p5xX p+yqBC` \-@ ]y4*/M\/|9eOWgWw>]Ǐ "hq(KFDTEG5x:r!sq;w9HRf3X!kwDԋ%Y Xu @`'P**HyY$ TC>%[yͰޖ i,T^Qw^ a@@I 7 '9G?} /TX@ %Np@%N1v-|~EQ֬~%!Qi4c? P֌<H$5@XZr 5]dR)(!KH(Xc"@:tn2Ia^^^\,7X;%b%C6'Cel9̯tM\*PUлE@2<eX VmW  A< XVP,Z4(6/4^x%^gHQ4(X%W_L 2^V|PkE(*x`I<HtrG;i4nI*a/vnΘZ05@0,@U,%P&P PUxda P_>SX D6.2$;[g r k'/X)'/@ `C !d!7TNl#pXV9Հ0k `:z$* v-uxڥ~%F YcYH@e-ՒZ&JUUx:rTEMcUԬ HP9Ȓn5TcPZcXIQ c\,@ 3Ed'`tTkJ@]tQ@r`},B8oD~w;2 L%r P*t@L^ K `|C;V XȀV`F++b~Dlw-}x#h1428@$ v-ꎭ>?ҥi4p{m@"jEP] 'I<d9<W]\\T.Kr U ɻ$KPӪ IZ% ' P~EiP1pݔ`Y[q 蝃jcV1ph\9W ' c*COggS@ * - =AVI.>KS4E>8LLM?@oEtb[N#A@XdX>w w^K_gRHv<_aJZ4!,YkjlȚ3x:Ǫ\ ͺ#u[.,DZBss1P!s2@LPN@ J )K=2XXGjY7`Y@᯵G |h P+`V]H Pd  U2ED 2@ق`NѠ$6 @XC}H Z0?>xU;w3<eэ۬~!e*Q-PYT<$eZj$@(j$OT_ڝH]$&dA*"r `PIq:  KJ@!⺴u?7Of:c("b2"3ٙrRh aQyq 8%hmhVh1N Xv.ܞ9\~?^PZG@Rx.xU:߲Z~D( JY˗ 72P23QeR1j@O 9XUA\.]@h1P6Ʊ V}3$gX0AxU BHsR7"ʢANe)bKni<^}ɛ^\g aCI" [ڐV+qNۦSwU:V.Ojt J y<˥.FPJPRk ਚ%@8*0} ,5 ȵA5vq"9*KΡ{a5ceyk@bPG( Y@` +Y ;Y2H^O׃C=,dJ 1j@%+A7aE g @څ3 T wUڎ+ aɫZ]GShd?P,9 Ii@# @ ( u.a>q? A^`(/`Ú G8Bc 0=uxś PqbNV@2eYi  j/,M쁀Ro)H(,l*wq[~ȧQUNws(K2PYYY$@VT ?@H$Q Ǫ pwtfq$@QRB][(H4lPR @?+B'F,A RRh=d(s >CCul"p?`'L<vH{SXX".P\@o ` >v[nLHlv-(}bQڬEݹ-oϴX1@Uu&EQ|P]3Ԭ(DVTGdYk ptt5@O 9x:wP.HrMd&((o_F/ݨ&'Zjf-*[`D\k3e D/2UzfWE,3`ls#:u%Kl0$TxNDk@ ¨;ݣ,^&V y\@C^?|@'onwϳ\/!]K϶Ꞃ5* ZB$tfcUkKt@iڝK TLY Q  UP|lHG ,(H޴NbY8\ZWLKP+B($:#è"xX0l2`P  Cbf=@_'"@,{!"@ 8x]X%pIKwyZdz[Df]5iXZ2QQ]A5 UE%7x:(5))kJ!Djl~s&MW H2QR (P@T`%~ oM!P^> įY>3q ,@@W((CpCht@dqaG@`>}dAREK (vzHO=iZ;NY_KҨ`@Yʂ7.'I<d5@cUWʵk%:p5P$HPB h[ĕ2P2o85ܢ@DɂzouBwD%ΥHA``cd.H @: -,pEt̶O% ZX0!@ # dgcc8 p$ D|xa-@%M 3$`$#>w ws[GF1YCwgtOjT9QK/@eT`jH$Kͬx:\u%s--P r,KS6H  V8 XRK\8^FHJM*rWP|LB[y-$2Ȁ"}7@:P7 X"L @!dݗdKV,,`yIT+E #s3w-}l}~eW-t/ql-FZ2PPT7 ke-I<H&WUlܸ(JZ,$8B(mФl-ecLU8f4 ԀYᩀA$,eQ;W2 f0fB>!.B q*Q=YOggS@ * ޞ YHpTKM$@5@P*&wrƅv"WPT (o sL J@*,@T? `)Wo@K6V@ VHY49`s@%1Mhz{oZq5)l+^h56V`~Gu A+ @thBXa`@pe@!ɦb W>x:/ϰZ~2FYh:Ǐ꟢Ԉf*@eux*?@I<pU T6\T2P)"Jɽ J; #%e8@kCC`bI G7fkOHl#2wh1.  ,9VdQ~-Ci<.8w-c =łjQwcq<=t?QF kT@H$KM5@\v, %ujTd@F@ @@Փ-je:hg~@@qLKzUCC< (-FA .-m (pBc?[%X <BDw@Gth ` `~`R~ƵuTa( {ed<wU>,ȥFZVԝb}Š,deU %ꚑo@G5%H$f5 \qsq! UE F4mDS j@ @ 8A4z=.bMKhidYc@4 o~@l#,l i NH?0tDr` dRy0&fO8w><"͂ҍhgRBre AT **+_*kH$QY$tUdʝkR׮]&(Q5]CrbJ K @ QPVE0\ANRܼڅI)r}U֛`/ߎ֬~,>P]zI~ $\P@l 0+@hDk!@'k7g ".v-ν/??!֪EݹaaŨ~e@|U%QR H$@&Mrqŝ@I%dP^Yq L`8  p PTf{i6 | UR͓FX0pp)N\ H3ah Z@PXvt άyG% V k{j!@l ww<_CUeUjd@D-bZ 8R$@\5@ J]K HjItlRBdZ`2@ ȓZypK02s>Dg7Tʸ0(h.iN(`]^/[<>d rP3xbu,@U N\ =v }uX psf-q|GrL V-hE4|ਖ $@r$y:\)uII@( vn"@d@T%AsUYK)ǣQ(4p@IW7(y}p<y Bb`a3|[ 0?TA@- 7Ba0Z1P΅7{8gt3 +.;W Y ^x%޾%e82X%Z-(5qUUZ2j% pV$@Ț UUY+M%T#z@"M" `rz0- 54(@zaH n@0:rDRh* -{|s$~=@9{wx (0xDZ (Fx&pܢ&z'/䓙v-X_ee`kkUV˓A#*Q EeDV1"eZQe $@r$tAL@LJkI.b(IX0=bL[ PP`EdfD$g 2]Z ,}KCӔ.i |&_+ iZïKDbmw"  wUޯrY~P,ثZ]GsLOݓJ##QPSRYkZKL7Q?@$tfI<r@..iפ.n!=v@;Vv E[@9"%P$g@@)'Omʻ4]Y8C{l `yoLy0jxO@N<<H{8q!@8Hq@㖂<1c@|Џ!, >w uk3]F1V-t63=_$܈,12QVQYU* QQU<H$@UYQRRnܸ*}OөW!J2Ĕ@Bj5* Ic Pc Brˋ Xf:Z+Ws`Vf.-A<X 8؄- 7['86Ȁ#O `! ,`gw:Wo/P6>w wVϳ|AQAEY'Q M(xQHeMA]]-BH($ x@i@k+M ?\ꏇxkC-o6M@`M-c4W`M $kNj  Z+@0lOggS@ * ˞SZD+:@;B>P.9JA-  ?膓syG(X, 4`/6ЯB_A>xUGYtOQiUr"iUՉTd O-55jxf*$@r8VU 2Tr!%@VЫĂ=*'d Ў8Z` `c t Afz8"H'/$PVrr6>N<}6ZH , 8NuJ&D!oAm`Z8 հ <w-cϲꞴeA\5mQQVIj- 5P@YK깖ZUH$K͢HtR5/R -,j+@ %0 !B+`A  wpH qE awUx–ltQ?2,dE PTe?@H$@F B5MJםkQI   Ę2 k@e"@@Y@wC@g4* eƒ J)P3>/.q^|D%o\ p@ i(@ % l@ f@xip{u (d````v"x^w ǗetX!gYx`63ty5H Z.L7(*QPd i:h*; %|U 2ѕeºdA] }XGn{}do +|YĹ3L.l8<a# CZ vc ,2g uC > y@v]j'QU;uשlq<[IˠQF~Q֔DEPH|PN\ 8Q I<rP.MtP2fB0-qc.,h -geK[#XFBNF(uI/Q @CF՜ H$OD.k T ^s{VuZ/ m)eqp"JPMGrewOxDX@+@, 1[xt WP/XS c  z0!+X`(V@ } ,8*G^2"v=s<-?8FYvtǑWype Tʊ@-%%o@Q#3x:ra5HzV E)HI]\E=: :H)WfH < v _`<] 0r+Uy;B@ ,A(&se !@# ^4zNR`84`А>}|v-8~A#U;TEHc@Y j7fH$ ".R&uPQH Q@R:wL0,P  C]<*t+18k&KvR{'wSG޼qz=j!P7ZPO1"@3#`,@ ku}'(wj,%$Fv7yb[eD"VI?@ਪ@O Y@UQku̔õ k7n*R ۉ"fHe%%! @ ? @Q$PiS`XbZ2Tp?M($H'6 -:?~2`8o؀(< 9u8 0*@\i:&0 8ܟn!<<S8. wtdv%a)РA ?QH$@PtNBE 2@ K$ P"@Xc(9ڴqks3?!Nb5_ D `Li# r[Y(-tyAX`!uz h !JVIs='*XV@]0 A <=cg!Ƴ<,n4*]5S_g|eeހF*$O YT$OkRԅP2TDVQ2(#Rsf?D& d`88q%J#kҜuu)P6KBKttnHhzx BhJ:v@yT @@DC<{@.? = x} ~wǏrY~& 7*(xtۺK>?ڪJnQ*3PR> d'I<cU5ԍhפI3]@QĽj0e$bu5@3`WP Fv (PFTGȔ#!L`Mdrr4m~+d| 9il` OggS@3 * ~C@A?VB4445F?L@Hei p Ձ= rdmx́EmF9`V&GEmBk0i{>xϴX%h4cU)~EC 52 @QUe%8 ,5'I<9h\nTr! E`Er+" APPNR .iۃ2BF'h3Pkԧg,Lr: HE:8jر(@VHX @`XFV} b!$` XZV+ i pw 3iqts-A"?(jPQ]Tj\:EI<cUU\tEt]&J2**FHCPPdT2' P5? Lb(p <%<Ẏ6dhiͲ Om#In^8*d~ h3I@y,>'?V|yо>J*6;@^~^ qw-cx~#9F[vtǏX~bj ?`#h$@u$tRbHݑv-H @ Q%2em{z =V@`c WP2`zKh^<J*X.B&V&8{iSdXh8]`f >C6׃:h @oh x~M8hX;xOF W廱%+rQ~QUɂâYJQ @O 9x:: D ܐ齒Э.I\1J &*%((P@,\:3*QY.QPɮS H`Y=,2o}k" ` @ l@8,@AF Kb@+U!-C_wUW?(j1U&"@Y'I<dE*ǪYA8PRɍw.P-e)@(H3B@ 'P$('@ӽG~ PGOG8D?%Nq VKVNrOS/ ò!`xZx0j!ēhpF" t1(cܦ{ G2; X jP t` kUx>w-tg[)7XUC_a!15!HTD`@ ހ?1x:(#kkZx/0MF= ݺM:H3cv /߬5YyePRb,kt?x@:nc@lA({` `A,L ENSsϨ g yZ%A'ШꪡnGq|g :FQV$@jXUjUEn$%}rJ"!( @ }e @VZsrW춢$,_B@&K WR&2ˆnBo,/FB 6 Y:# e94p@RhP(@G0}Ka&8pM8PR`~|>x庱X?W -X`rLO4@VU&PTȢVI<Htʵ+D&RגkF"jt'8yjy+,@ P cG.U!ceJ)@}I M-_ު$!R2$ &P&kMug*,};e _A< Rc',kww-8ҢABڪEݱb}EF :&D55OPke2BMހE3x:RYUX5j\uHE$%kƠVw-tk?J?fsp79/'Ȓ?9 I@T&)$RRRRI(  EJ2ˣZx >N.<Ȼ<*'t$7K_/a<),تn.\bq#N.YOӌ83?Y@(Vi'PH%Kl P;p} 1 gw3=!tڬSJO_J*Z%jTJ ZQ͚I<dI<@ DqP-,hՅ,ߒ KW Z |(N۵ 2RP#,HS| ZAuW ?1 ^B.;X;pu`RxP@߁zlb Xx @bXJ(l Ayv-νh|/9JUCݾeֳ\$(c1 T|<K-I<cUԮ (RڷIIAP2HHi6(U@D "S"`~0 j.AnyxGP-²%R x"<B8=`Sхq "2$ , xs @By ګ0 X-X`@?l#aKxh`e86 i xU:W7])F1WU;t(4@uMjU7pT&@O YQ}TH:vqڍkwIBmnEDT>Z Ѷ@`lX4vwg#(EA8#eHpQ@}@M<9 Mob6p`& ^:4`OggS@g * )C8=@IS;K@W8KH`M @ I <4 cC@$>xwy<8~/= 4*^5#]µe j* MHހ\K qY [NJ*RҒDd%  } R<Z0{K P@?Di0(Zdžyx($y>"]-|P('d97 <}.`C$t0Qȓ !c @X9 @PxK |wUyp5^Uv<%hd@,Y?@VQK Y x:y]u;*dAU5u-1!d@eeCVPBWDK+Yc%`b?vNWy Ppxa[1+a>Z_}@k@ c.<xUWG?E(cVq9~USF,h*Er&ZQuM $=H*y$;ܹv":pqMBItbtED *$4$K(2Q$<+N+K&%@2-e" 8Kή&tR&$ hP Rn@cSϫ*c@VyPGsAX 6v-xҢ$hcm8W?h4ʂ@TfHTC|p$tFH*jt@DndNTTȨ۷PM Hܰ%"etc d'.k&C-S,/R @KPG+ Auj3 1d#F,*}K(K@ 8^Xb[0-@z ʼnv-c }~7i15H[;<_EH#?H@ռ8 I<9A4M2ݸ* Jk@0Xs!KJQj`dP(HSJf9x xLOb,luYOiWg//еp"< в , b33 Q`6Z0f!3h bN~w-t^K_/ՍfZGmyH_TeZ]D|eUPdQV'I<deU Uݪ(ɅM*@p' )*6)PM`@ 8@m* ķ,TW}e2?u#hF˺)?DZNHP-6EE t ~BdfX`]` YuczJ nv#֬yJ9@E(+*RH$O Eh5` T"0^(e@w ԛEi"Q$PAJlfrB@8ϡVOXpM*U, R`) Tb@66 wLG6Υg_c» V.cB v_!hTjGJ'Fހ*`H$+*QX5\ $.z*I @ J"h5|轉E85?GoO!%FM4h`3X?@ 0B!Xm 1w3=-Cpjws/JgzZ j4DPpTH$@O kuAR@P9Bj @G(dP$%E W^.P}bR)HI[b7 yy RHdC`Y_w^a5?1@ & ({b10] @o !#r Zc"``1@` y!Y`-!^[ZB Z wUڗ+wUڮGY?B^Uv<~¶iPU$3Pq'I<HD".. EUsQ: H  PgdPX W7 - (o@LXKo8>x;oth|fLi@ֈDeIORLZ2 PV$@r8V@ʅD*R5HZGvDH7!vD *d,i P^=i ' q*^z .m)}S^hE @yEpB\OggS@ *9V.$EE_S,GG7D6PHnLy*.T<Bh,#fž~w uCe! 5j1Xh(coހ8f&瘵&dQVpTY I W3RѢTd@F@ @Q`1UPMp L@ (X!}2 rå~<B<|"@Ԧ6pkcrP@be|cQ@~s xк>S `bXX`@+d] b a%-xU:J_QF]Nwp|?Q;TE $@r$*]K]H]R@Ve)( K@B4ql֕DH@@ wa@^*OUR^ɈCnqq^8}6ƕ5 _-[ߘA3x.8q8 B>Pch% o0\@Dr\<qp 30|lG>w wkϏtYFnVhg42((8JPYfª3x:W[uֵ뺸@Y~,ubX*P:F(id9TOxOhP0ON11x5fz8B_nV:^`0j`EZX@` ^5<mYaaC|,w T` `O>ع1IT|wUK kQ8vc]C~G pP8Q I<@srqZe)J(2ֈz P$e@` #˟ea jpUn~ FJiC H'rhc,l `lgg)3v65L8K p`0mTl a7XoLj @<pl^Ef)h<@>w qH(A7b=Ҫ!14PYK*x*J~(Q xFI<cUUkW$ҁkJOR06,@L(_`d@ d2\O)4'WAXX^:-t 5 )' D<@H$~"T9@$#06[<wUp~ "hTxX?SCexI3x:$uP.]$vq ՘@2>TY E@xP914.WIy P>JWX%FeyC@0`)%TPo.&PxТBo6h A'd^hA/0+Fhyh`PǩV  v-xgr0#=?B e5%E(@Q (k 59 qk2R\vHɌ\xP%" `[ (H@ pT( 8.ѕz eP@Y-BTb?-@:vije beCCd06q "-PPțFs*LKfj ($<O0[wUǏr IтYHGt?Iь TԨ5QT%D?)H$8VEj@9LI*)e|hҬ"]/ʚPe5=I@{@D (*E`(`}rG%P BE&mXxp7$v<@_D i4sBk`<oB +^fZv-}>?ӗ#4jGy~eD͊TD (kF @O YY]kE@:kBwA@Y!Snh*jM]  05 $aO@por+H9OggS@ *qL3BX@OF/?U<;Ji@0%RF+" @kKX2p z)J@ v-t>Jr~ьUjfe-UPY]YȊ*Uu $t UU]Ae:EK]hwJ2\sn Qjp& D&"`]}CxS(04+ }pzIPz;n'Tqa@4  7- p4V3;Mg>8p, 9)k @>xwh+"L&@O 9x:j@J4\dDPO&h4T c#@0 oE& "~P >^g{VBRpE 8` O͂]' g=<kӣZY8\ hPYa=Eo[=` 0`FIB_/7v-(=~E$hAjGwEs|#*@DqPdހf0<H$+kJH\/\n.\(DH4̰tHT Po)P 7"^ݼe)(lCssND4 9@AV :;hJ0pXP(  .l޵5@0xhl/ P`8JPwm_YRiQjw1h_QE,U(yZ#E<H$@cUN(s'RRq$55!A@U@]RP(Y @ |g+:H}gʇ6" |;ؘyڼ!;^7| *pPh@ 0 yh@Xb ` j=cO->WQ5f9J.wU]ϏhyU#59Q @$<H$+&HtW]܈]+-P"E@%#[Y ɮ Pv)P2 .Ii j,"\BMs*`x ,  m’6d#P:ǯ/@H bXy  0xA`b *` :` B  n 6lv-?KoeZbh-F4PHT|pTH$@*'LZrVL@#R꺢Z&@ @0EV0IFzuU<B:Ms(3KA0h ++F6n#AO 80g8 *5S. hm= j B +,-BOqld@wFHGxB WUx钿bhF%Z*KTܘ>?0U$tGjrP..."H]BJ(Rhk@$PD P2Qh(D4Ϳ]uj#ed&:xFjß)oC{V/x6aؠ_@i`Ufc [7/<^F8x7y\_IR0v-tVGa(h^u~XPi@֒ J**@QL(kr@O 9xZ΅qRR.]\g$!ehXE(@Խ@^ƌ.((D/ @2U Z1Zg +n^dF)TLdb +cWOEy@ BU`(η ?ۜ`˘~ .  J>`,N 22C4xɗvV@ +t<$ `Q1 @hr" }_l!] !?P[`}x!HN'hĥSGYY,4S:>I9[8w>>'HJ]/g?h~QCP/1x:R]=$tU.冮wRJZV5RQ> K@e**wX L;DH0LH8͙؛2X@;8 4~(@4>L {9vM#ڃ2mX'+ PSovZ +wUw<,EHck8jG,"@VdTWd-PxV Ip\#%s!%u-ZRȄP@!Lr(Ha-`,EÈ`N2Jp7 n4o |pDǃPFK(&H!JeiH\~LWq^?y t8uU@(0  /A~-NzL'WSnZPw>ǏP >F3g q:JGFD TDZK,*x?Q-G$tGUU$O$%u!ܑʍkZʼV@D0jZr[-FNJ@*y@? (m,'Yٚ`1i / 20P;iׂ .=MIwUm$/9M0v8 >xU:p|_U翴"h@L72I<pQ \ "u@1P%d}@D 44+P(y&ʵ* 93j~@xPC ǫ,GkI of]oO=3l@!p(`V FDVOO l `Kwy@ 8Tx9D tu?w廱ϣ<ԯ9FrFQ.WpP,~E%*~@S3x:*$rmrڵk$U2p(_/`JO% m }9TP;yTP((  `*#V`gb3p q@hV ,x]& ۰Y,4  jȀ v-8bA#۪q%W[,?5 Q 5kL vh$@r$*x4 %s5T9([xYE${ղP}2e((Ӭrv-S &^Y<^_<("K@oO C=(q,+K:@X +z180įyNG@|B_w-h?~/'fA[OYO95 L7 kxVY @O Y:$t9(ܸ  UHPpE (N,RJfN&F @>q%/2.WIϗRq c @Jd* +X+}Y8 @x)蝬5>3tPQExO? Zd` 4dd〮d;"6v-tQ#=Qڬn?0G, ?ZTdVp j$@EU jjH$@OkZ;ZȔ,d`kNJZTjP"+HG (\,$ PXnrwˁ4BpXdwPcBUy +,o4:S^( b@7- RA 0Y|!"pev-x~/Ϥ(ڪn ǏPAB ~:0 ,5'IU=\u D@B$d GVMg@(dhXp|=:ٴOE.%$'\tR[e8<B'dfus H' hS;MO-@I ! . U0>`uEO~+`d X ɘo1X* b >w-~,ON,uZijJʊ?JXϵpTK@O 9<<劯RRwu 0+z %jLA  nLo"5@UP\pj#f|H|#Ro88,G b`arŸO^ ֙5 8*Q@eZȱ a) @ql  @wP?v tBex X0^C|xU:#͂q9#,Qj`?U TVUdԨ*De5@uUϵ`H$QG8Vռ&\uMsw]p>eHt`4.-C6՚ 薨@˵ d D%8pU 8Ny1 d[̧08*#qtB_@JFA+af@ m N ̧ xȀ9|wUǣ]%(c{U.r.FdDV@E#Rj,dTd-Ȳ*pTYH$@D;UKɱnR{)D),.-n o P-2 a()-%P6J(~B@lwl<@@^@P@ ۡbg OggS4 *#;>YH45HM?GmCHCCCEL;=vV @  FX,@xU:W㇧Sr]`OKFĆc*jV>'Ǩ.P(QIp:R $XTpCR&i!@Q![Q'XnbPR&ם \@@Q&@ *C,PvKF0 dB9P :JoR$ `d0?*w)Zl <  wU->-5{V(v_i4~YQ*DETj)@ (8Y ,5 PqԵ5)P)DQܠt[! vT$Ȋ蘺 `P]_`>c$.M,¿eTy( i*G,t> G_@ @ Jغ0O *bkqLZZ8wU>FQ?RJ뫪]HOWGF1>IUI*K*Kހb2`9 qIrP.n[7"uq$$(=cQ$_(DY&P2| & e t;Yь'KptՊ4(6;BP7@oLk@S` hg`50l `#9cEFAeP`b@ r7hv-tVC>?C$H6kP)ER@(R*gP%( v l;=7%NJPP>%j!) ^@½S \`5z sN.1hJP@+PPF J(Dzl^+~ /؀HңX5u>p g>w>3BZ jw}.WX?'?Z+e5j$=HrPnD*n\r $P"(%"@P&@eeP"3R~%oĂ!RO `Y>XvzKP<\>My/қ8k >!LARxk[н Vy%Ł?UG) w-}/qMi1V-} ,1@YBQ2k7HYp 0$tZ@U5IMHEJ@(ejP\5J\ruKh2UP%gVs-8@ JU^ڴJ(DP҂vsYGPl֔$>2P! +P @ϴ< BXPF`kH_4Æ^P`? R+Vx-|K%͹4AkQ{VemN`U Uk@R=D=:v Y&$T1MӬTMMcEDDXѠU5bcH*B2CDDD{P&6ϮX"*@VB|]0az%TҸN*GPZ1PQ%Zb&ue([ RM,˜+JK,̓$ $ C(!~:! R/X7ҟ AOZ0*'5 v.,xl׀ 08  \^'9`l%(n8jo3 =Su?P(Z""U-]m"L l6RP$99Z`b1![* AxǾeUQdASVl3Yl(#JRk*)RAvK;Qj?Ԍ)dsT;@DP`,+Q*Fؖ|,Hvva?jb(.P>8 [IV싣-`Tje X + PPR3Qɼs(W[W 隚½8P6|I &AC% wDe}!OhQVD(`_3u`K`L#47-<|X lmms-1.1.3/data/samples/instruments/e_piano_accord01.ogg000066400000000000000000001000441247673406200232320ustar00rootroot00000000000000OggSPˑvorbisDwOggSP=+-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@SP-/(+)%'/&340ξþÿ¸6j5w Ň:@BY_}f#2E=Zf -_2,ߚ;ZOydLTfE]wZrz@y.u#f"b}C\Ej[ʼ ȪՒGN ?%f ˁMy5mQg }dZqS&'.*$J(R%2Kk/wcc>mvk#c㧃]X13wtD{UM;)]VSi׌8b>ָ1:q5-zM"eTv}$2ԛzq1wt EU4o<6%V,e%JR18i-N%ml_E#n?6u_WɼW's~l߯ ;ξ_n6lG |!I1Ceh٬YbݾXgktC}҇6|UkEGsN\3ex*hJWխRֹ(k:*F+դʨYV&*~YIddR[:Yd6$(ZZM> ub*!NU"!h edd4#̲ƬX CȬS!B C5C:Sp(5 `X![f H ՘_^ T!05! s0 P -40@ )i>M,Ӣ)<2U3DHd @:zdZJA 1Z <3p 8ŤPSں:Hc ( #Hq zR4!NP1U0.Ѐ`:d& _`p$ 4rBb@Q=80>F42eکNQy6Ob~r@C5 @H4RBX2:N9EqT @,+@lSQ+2n)0 p `aů @ crHȆ@!()5n \4A .$P@h T+5p ϳJ]0mUd|6uȶr&@ !P]]MV%HUPð*h brS, Lpngl pGHIp3rF @@ ,P(@Z0 T;h ^Fg;5`۪VQN+=G VR>ZuQ)I6cpxp i10CmȬ@d%iGڄ]*!s0L;`L9CmF@ x]Sh#t0Ej@ ѿ8Z0Op5@jy ]X *@7 ~VRh3ʭ%ϚʌrI3 ]uZZJAI1 `0 i+ q0L`,녠.=PlDy6@ .p@dZ,* Py@C0j;4AB 8$b @&ߓvњ`ت]AS _ e]"2 8 @$VWP*Kи[ubZ bИ\:DQD `d<L(R l M X(%5;0wJVZ3 TBK< !/`UРw$=@ WI4ß*4, ϙD3r!5?5 :LVQ9b91Sq&5C)"%'&XTmP@nq0N<@2PF#ü; &2`%/,h28x,4 PAH ᤹t p`yh 4^ ơGEh;ECbjcuJ>B=EBڤUSR)dI PPʅ"3s Mkh FCf +Q&Ǧ°`  V  3A 2 05`UL-y h8q+xqS`@6I *$A@/pX'8~cNAh;UxBQ'@Q5 a:LQ'B( vCA-#&#/(,$cHلqK!h0`^ӵ(<*~|X(zDR4.ē@ `nZL^p;5I@:IBh4HEiUA2|J`8 K0 ^KɌP5rTմj P)C @sS& 6s@XdUP`t-@scDD*D 0l @Wr6`#<1!s`@EDT1  .h_5𕀉$! c@ 8V;d=~Adz~$@ Dp-JPp$E( NJ @-u%`ƅ0e3sX<_pXX5[Lh-`2@HmG;@@d )c pjy= @t>V1`FU#?85(+[ <9HY750S h7(+l("*Fd\ `^?9 38@tH<T^ϊA8l@ > 2_G#Smg~68jf9‡I@$it5*8T1P2QLb[ ,h &u1@jK<aPO?i .gM]Ȋ)4A^:p`Vh 0s(<LbSL:Xh%@>k?%ϑUPf j>T*t@:J)"p @PCš V j:uXI"%@-!c<@2 ;,Cp4 =?!P:,@lm !Ja hK@X8pW ^tڊY>ϑF9aDmVHD3jꕕIgM#c@P'E `-@  ۲@u SK&51^v0v`\ ७Bip8d,  0'h `)V5p q@8( 4`  Ņײ#3&H/.&Q7+ ]%"( @Tqbu ݪjHl*Zh`qYPV @ 0!R8F6zFLOa 9@4#K+B_8C8pUz6yjWdkQjQH !d@:($CC@ ;g*D j  \0 XHaa t `k` `03* KLIiGY+0yBv؁ `'XZ5Zt|@C$a2h@Eev; fY$ّ>nF+AzuQDB!=|( tcE! j@a1")@X8-0pn `(@q<jgF1  Q W@T m0G\+<0' p8e綣d'-^ٕc_vtU""xnDŽ%PDE? A`IRPPi@JjSuW rN]x0#M T@6h`—ns/S`,LZ6p!qA! ( ؕEaF{aF=Ǯ,zl3H30Q_QL‚NFP G1 "$ƦًgP b7b@Ű j`UPSE3%4Ui8i(,bPe`fG Xl2N 1sj@ TE@ `>pAp* %xp?&̰#Į(~Ė1aj,cΈ*@&K QU%(1qXEi))l5%]A=@Aj`uL|vf@Fqd:`{@Z m 0"` (<Cӊ @XG 4U9ȥϐMnVis2?7̨ȨNJPoҢ!LŮ`iZ\:@^(='ƋLx* 2 *'@ޅ gN9݂40XZjw:2 <\u`P8G7#M#YN?w?Ԥ(2 AR(T1PL:0S&F$YWCd$B4Gd/  Hab:I xV_:p`+'6u`A"0_ x! 1Gu8'mL@ȕh\p5!Wy'щ]YZ.8Q7@ԊJ6X:JEPpB*sj`Q0MUE bH٘D4@IN k4PJfu9,cFC E +$!A`PP-@vPpF1| 2k >q@Z ~lсJ#ׄCT3:Lj>d5 T"LQWiU`b-Pf+ 1N%4Pd5{ ㌜34`)TF[m: 2`|b@R3*V;1|:hH-!\8Jj,PC$ȕWϷ f">]mZeˆVPH,#!u`&@-jCbխ h";QX.CF, <pC{f-`3@ḥx X P|}ր \ a ")( he+nyZ̲s~7\c݃VPngM~u4~i}/ avҏ]ꄬiCb @3g*(! j@Gm/YטXd0B̆Q L@ReYšdg ?4< pLC+ $ yCV!,6Gz]4 p5W#83L"ׄU҉8 jT(% t-- UIC(@DqN b!njG td1@6n:҄@lF-plI#B3t=Ab t b)he8' ~On#(&^SfG6$A~ՅW~ްaBϡ+ϰPȇ1!A8 !ȍg~u3XxV:|ݰ~(je%$($Bi$c?DTp5_ EDQ5$lL%Pj LA)I1, rBhQY }A3G+Ii GEQ]ӔXS"F. ʥet3lz{>1ʪ@KB:H59*3(ZʤzdaR(Lr&x'00862y@5Kxn 0(k3Xm~QZ4I149 OggS@ P&ޘu<$#:LV\z?|dG>aCs($U1 j;.!ᴊ "!fHF9@bt"$d2cTP`0O#$ V@g@Tp8I@"0xENkb2tAn|܁ȍ#sB!\0 F J, 0pp  $f9q xM0>2UADmBȍW!qHNH$'|6"Z|0 "*c?Tp3'*P NwXTtd a0,9)Cbm(a k$c70UDJ K.5[$BAf"# 8HW~&'>$'?V"# dVt$Q0(8sg0)SC%e#q8F  +.@x I0 7p!d0CCԣixS46uۖC0C&Jkpqe..o%0$ȭ!D'4rkyPuPՕG`AZ)ˑ? 9bS v bTdЁFBC ``b"Q0 C N@(_ڣTwc-(3 MJX'~rdߌg MkMm+$``GM'ʅEn >$Q.EeBZZBa! 0MQ@a'һ%[@ ))ì!R0u T8c;x6ADb>V+rAsfDMJw[=b.]ԚH : q$@!g30n[ז ;@QpX"MZ! rc9 0  8;Eݍ%Y z4ށ9`K&<] `#d ,'.iAdeRwb6Rԩɱw`̝MOe{vk) s8%k@ZLդH eb@V:_ I1Q5D9 H&3 '9 +0 1oX!G! n=8HAWxUBp6OxlZd#IϑVOI6]Bȭ~A"#q(  ԄD@Z(< qNIwb 80Qhzd2%h$aI,-$ ԌA:+1X SV8'Mbz尤A d䅚C>lZ;Yg DQB`-gm~>xt05  t$cg (``M @AU ,h XTRa@ &-P G0X8! tDs%QÞKiO$1"huEb)9̊T Y -HmkK7g#I)z-lj>PH4Ŋ!&j5L' VġV q' 5 bLH@<NF8ڄu(b38&iCfO>p*Ъݜ\wfexKܪib ܲM30̨miVse;jk|(jLIhiQH! :D԰MP; ѨӮ- TL `d: 'X/X0w .Vj @hx9y@fݩc﵁9R8Xr{9ӕ.VϥBvW$ځȭa~!Fn_BQ[@UfD-G$H4V1DA>|ՁSuZm #8$r@ p&dVN( =  6I İB)JoBxQھX|c۷k}η>#7`C iA-6?7Ǝ~-?T̬@k1zZ?9s&H1BV+FUTӎPcmkdR@It!mp{P5LVBA)>;Pɜ|"F'镖8D\Hp\`fd,r{5D 32|-Ce%*J"C @*`:V yUDˆ P`xB 38 @* Fp@X)m80\@cKXsRVBp" paaA iZo }8WcE$-7ňZM6 ՒeT(fauNE +@03 @D hD4`3L a Znc /E%SnAҔ d"#gOX^6Rvy@bA"P@GH;|bvDP[(r(UѤEB"1af j;AY8APlCD 5hH!"N0UðڜȲDF q. Y50 h<$fJ,-?Մէ+ KiuIV.sI8OggS@kPE˘ǎQC#wxQvjd@g "!D@ab @L @qA L @T@:@!` H!fDZRQ@ )HIe{~,$NB9wRJF/9g9?UddPE2{HeGCӂjJYD 9C "49b(ΏKPAdG)̧<(TPHK$V<8z>",@63AVɔnk-VZ2(Kȍ1᷐oc8{x4}ʧTRȝ%_L#wo[{c('|ԦJu$Z Qa7&TјF:( d] 40MANxJ ƳNJ$(Xw! i̴t_ʕ9Mf=F|bLũ}b$b_-p$[~F=.yHF&uE H\Ή4%?9**p`f`*ô*F e"*d F|/|e-0B`Voy(Z*XH4 @9U'TH1bB@PQP@a8#ͱdRr8 #8xB etOaֲzf .2[Ҡ}AͮyRnXF5mm&B'րH ]6_y"wV#Qd .Es(8Zw<:TD0@(\ ,KtƘ,Ǥ@DAc#Iұe-mϖ_s7h|UɅVFҐ{;mB8JK(@]ۡCr ]ۡCr R=K8l0bs N4RR@Y_Y` 8Ct)AqKࢡ*@0+p_C plX%ܬM^5~x[d٦`X|e<-.ne릥:q$,1 !ȝk6"%ruoqXV!e? Ae-*Z E1ET%QQS uGD`@hhJHj`&6,nݳ4DqvAHlIſO&j]ɐE/decءH k*@_R\B]Qܕ1ߘ;3 X:!(Au6ivu aCd%-lL0Nbb8,cVcAێ]o!+9ɨ|/TY:_c5,%P TY% fHd2  ]ۣ5118BIj$`H]F]fEX28IKr-@۱KHȝێe6i4r}6ef] YMC@E@DUSd4TlDHMjPhag`(Py p@00.- ЄYl1-DB$H\u} 2KQe)aˮ KsؤG <\vGʁ p]1v]K.&!PbSæ&`ol&*RWZv8w,`L'HȤR`m@p61 RXׂVD c[5hVI >K`e=Vjػg]܅q~BMdYF6$ЪPt$@ DP@ӢV(0A3(p> "& =H4%ai%gVK٬[{4ؙU'$kDv\Nq?9DMbEyq F ]C~7('+w}52r` CMa⴦7 j4b `k 3 sAA¢/c@PMt(ШJZSRv]~jx=rZZցdnYA`~*zKZHt* 0(U[ܝ7( ԔTd âhD!:UՉQ)J "+EcUo@z@|4ĺ4 @/DDI琇rf]nr+Fv:j?,5|Yꑩ ? dGsU I!:݉a&54r7}wF8M#K GK j7#d4LѠ,ޝd@ԠȐm: >ABm!bXi#ң֐IrbPI*QCU`^ |('_fp{BlgWr8  ݉UK~~Ì<yBVjLVE!TQPQb]K )T'(؁E`l&ZB<Dl赂k\aLoM.}(*?@ݢJE[m`m~ԥtI=G4 lmhh]˂whcF9]˂whsG95dxt.BY!PUCuTP` SQAT 0`/4xb؆64d*-Z io:r ەicƐ`j cXr$ܢ#*t*,Cvh F@c=D# /;%6}v?Ԋ,B@t=MC✨n@%eEBdH")eXf@s30E f$IӨY-5WjWHk.?{Ob"E%[)QBB'UɏfCǷ|[PphtO )(g;qߗdFmUH-G$!!8 Dp j"4Pz4j.CI, "(=:Y R%se-!\*IJt&EeF2Cj>eTPK  e!$3jSF cG >E< : &AGP@E͜9N&ج  jqb e`|@3 F1dfvqe o|kUkv/v-ۥAc aX&Qt5Y$ OggS@PuPòþ=QƌrhC(g|e:H&-MDc (4qq*84iP Du<@ Sjа"|AI@҂Fkhn,8ҦuMӏp=݇ŒE8/Ɏ,?TB&@r DqHb9C8@D0;(SL  a X I`Df:b/k1 `m.DKCΚ3|+l TV-jPH_Bm߼Mw %OL4=ӎK0D# N;.Œ>ȨNh$IG;UP5jX4hLmZC1] E ;p](̂RDehM# *BiSLJeZ1I=3b]hˆJޙ^qeŽgBfݗ!F2pt*)6@=㊶f%_1,1wd5e\ -O$ u⺩]T>P(@ϡ˓KG(Х@7FThiC =U.;2~2{˿YˠNBo݊qk)Lp,TeB2Pb:2Z@pK$ =KC1F ;;jqEm&XtZBSEPiX=@@jQPNl'd[ $/—Gx LN<10h\i0: *㉆skyHyb,ګ`Brd-6F1I?5e9t:c[&(H ȽIvd4r/p0$;~ZQz%dCBc@j>UCA0QHh]Xp  J38\O,Mu: {K" #SC(Ŕl8(h5k nbW6RyŤA{R:X+^.UX>R$@ȽRh^~m{aG,j$)?*h@EM@)a\q`($D=#PU1HNEv*MRBL{iK9HDY ]5GwX:If_*1!Kv#@ d\p~5Ƣ'r8ݒ4`Ƚ}e{aGFGVnVp p:1 Ul.N +`Pd6ZITJ. :pȑA\˽ I鐵TY֔Ph7PB;uֹ'**mJg+1"9#Z4q0D iH pȽ}m~4;2g|xwhvd"@rIky1" *g`&@ 0f@QŒ hҢ'-$kiݜ֝+H'} msR;-` G #?D|S)[I'ZAHe+&k[b]bi(%Hޘ-%G wm=;jjEV5h8I?2$aԁ +APGf $`* K:WEsD)ybgJmQj^sM$5w,) N%[~BcIGr)8BrȽm6?_+W]4;2P YK$C #'$@q&6@ N2HDWad.]wpc(Ʉ교e^Jw:RMՒC&Lo Hm:dWCdL4QR?Avge ٘ꁈ>dhP 0 `hBОm(¢c(zص!NEɜQ:)0޹w3vm׬Kګƥ> z$Y5mz ЂO Ƚoh^~e~G#Oux$@4#c*Ql QQÎ* d|n L XCX! Hֈyf$p2Q.FIm=̡ʳWGp1!!kqQҜn[i Kҧk*P}a{Ivd4rxz^ؑ၉LM&:u?* C'V ffQS/0v`9: gP De%H@kGī7s؋:w-:ΐ+8Q _]cbYKNH $CȽhGhve;`b"j%\4)RR!Pb5VGU@a"͊$1 tXL 4*%, ha^[’:$[FiuU{z36eD\n8@iYu4W!&pt S~ՒdCβrA2H}wo<}˂{`GƬ\tJ<{!@1p8Mje0UTO4PH8&yxFW5-;hc97$1W]a;[Yg4k֠<6K]fJ]:xT=A Ƚm~YF]GؑdpI ZNc@ lV39@K8զB}@l(4 GPtBMCjK"X1afIJ]%jG.\Q45Y]"" 0neQq+/]{@ib@ $}m3:vdU+S&CU0L3PPa5 Ba" 'C d@Wc8Ⱦ0}xU8Ȥdx ҽG&seX2,Enj>Ě %,o+RTAHemTBٚZ#%JB;tG3$ȽF8߷ivY#@H)?PSPV " #S*lF#K  (u2ҫK {]wyѦce} gb gVDE̖׆\ѩ,?LՅ0:%,Hn` C HOggS@PVľĽýý}m~M3#{U͎<Z:@4I(""8q2O5eD`(sAGVwrPd%sACA갎@ՑJSz. W;foq*d}$xoA2}ChERe! Pr4:EmI~r̬6 pA IȽue~M#h2?ޡؑၕkp MF(!!S&Vb7@P@5ņba:!2RgP% ~ 9j) >?`2'QWߺdeSz]ϘB<ԥ.^Hq8Y$ AtH끲@NC&H.p!H}<#ї@5CEE,H)%p5S^@u4*Q`n! y֨dIiQ)i:|;${.TZgzFMf+նMIH֔CUD~S"B?%Kxgm?.k4Y't[P0}y6?_ܗw-ّ%'H$B?`bM&Ŋ! 8,b0@j Ĉ#Z!x@+uȽ"Wc,*6U%P|geG º -;|tű-| up} ͎rD#׫35;#XϨp (.?Tq:D6*:e 54 @$Wm>  IIChIOD<ֆt*q8Qm!^cub2Ru g"ssbZ7@]*:9hG#MuIŀ}h|6?^>5L%%MGȂ/cO*xJ9DfY#!(G  H@ kfy;V[0мjXTS$⿞KT%DMdΗ n$mSkJΕGFW(c@YQVۋX*m/e_ , %kZD2 a~43"=ߵŎ8YH Ic@Q@ fDL P1*0@eN(R Nc$fp1%1$ݓ($!e44eսzl?"dՖ׿t>MU4** ?mc^EeƃEfll 88e~;27_ϗdG@(r ` 0!p9V*"jhHd q*$oH% Աm35k;JcELn(h[$iY;q$2[ "}PNH8ܖ $88}m~E#tQӎ<p D4PDD*0@P Ӑ{`@T>$"ܯEA㸃dM2T2PgDtZ jQ .1w8*XEwl N'pW(k瓔2+,ǽ9#ВXQփ}eIvFjbG#+@Z (C"``qXҲ FkTI0d}Y&FUBfYˌB6="4U,s,W=w5vfPw@Tb?W) AjJAPW*zcz)igs)ЊIVBꎭ L 2ӣzvd#5%pHё!  b5E@2tEd`I+!$"!KKʛy3Puѧ>dulH({AsY*VC^,YUbSN$W26>~m|K)e@ 5}w5ŽL`q(( :MCFY[{2P#aViYCj~UᬔJlVev^ժpZ PC7)RID0pb|I2hR;Y\=z] Uq֑\RW=PkA }m~|^ێ8Hym;&,΋2  vӴ 6 XP5 @ e@})HNV=rKLڴ(xx mD^~f4#HI|c9L~BAϴ@ K rPɨ1$\QZ8jP}wӣ|l;|4r2?^$DI$/b@Q ĜTPNR3LD}-*PpkloE)2vA=hL%Qdu[r4O'"8bŶcih:ډ {i]ļaKC$>2pD#C]Y 5p!@H }x#v"nK#ND L))LR'1"F]JDQDm@Y7$IL$9H C;:v,!@$2%yifkB_~|6_o`u%` pc @ N"Q(#eh4Sd)z2hCZ {xSNk[@gI&StK`ΪD ՒWTed;(v!6ku/$hcTeC01ߒúVl$R)Anܗ0?>[ß2+KD+) QtaZL@9}&L@.m}Hn`LeEecΐGFt' m"9`m ;8ܱwX+ IJ*^ `i6SM!C#THT 1턌h-}uBԪF- &$6V{­xr]#svT"Ty+QGg'{v)T Cf;JX(ɩI]KdJaPr!2)ug܀l<'fD)†IRh*`CI @!C6B`JQ#eXնZHa)SGGU*q$1H%d܆B6]1cIkbKBFfo5G_C1qٮR|Wj(g=m)6BD}O=<01NB@@0Q#S@e"i23V@os0?>ÇII]JC i (b5Fu22YWjY3vvS[ΉaʠZ-ڧ@Hd;K grW(f>֫i|hFVP(wb;Wr;*2 T?%uPp}k LA͏u6lKxHA,Z)UAPK&(IS$]K#e( 0*ⲅ캔oYzyUJ[=nLnkQKX1uG.$DQz~8!B[HILD0)5bٸO >qp %(ëra^0n~$<0V&MS4!Qu,6(`(%2jjFPW@t= Q`լ-'DI[ i#kQCjNvfzGƞ]Īqw3dtW ^c])cYqkp#(DiB6sJ&Kjt^I+aC!=nuH6\SRJt1D<{hwbPP#t$!  m!jhtD<"iT/ݢd5mN`S%ڶw1|Wc! `P&cɀ pw-ɈXJH >J=<7|9+KS>!P `g֮Ym"dXL"k+2 1MR_" gcS5T[Z'}ka +5ׁ XVHWB +p䪈B?.Id, 3* ElwJT$XD4¦ie<zfRɤ׊~X%˗ٖǗeh6i!`Pp:[C!=80^}[+<6l8nm68%R $ eiWP@TW)d%.IXHn ]&E"%g'~mA^H;^-[({ffBpmwIJ@ `M7( .!b l>I<6lXadL$~!0XaMeRW:(s5dmjRWQkT{!U ElERSуIGn!rHA "V&!M@QKB6Bjp>]GoaX05:/%@ӂ"vQ 8U@QMeG #5 =?  ;PEiJmMѶ2&#ekvޚX eΒ6yۄO[n) $ H ~88N ~w6_ 6x@Sh1j&XêV ݽD֏E:6|sU?vq >jlFnavceȒSXaEo(G V APp  ^ϯh m`#K&Oh1@ X0A,TSF.R84t[@hBWXL̹T s7ZD[^.A 8(1I^uh6r]| $$:ca1(`TCh!+BϗS|J Gt'=K#Ad'u :( Ї ~m`!_y Pc1b1,a:6L*0vN}@AYQIuNLMHryE R%DΑА(88 ^u/BS~16x`-b b1i.͢ᄢOdآ`2я9AFz?G@J5 @ (^u/YBs~1 66C 1V (@?F5 X@f T,]}Ҋi*-I M>=,` _ )O!C!&EpX,%+*ptm { aФ.N ,&HHIp¡00^uo6ra k`C !'V@0 6U3o)j< w  ~b` BC0ԪXH6%b8|,ANhP@8~bp 1@QaDaXg XA~7f1Rh(R8/C !#GpP- 0 /Ceplmms-1.1.3/data/samples/instruments/e_piano_accord02.ogg000066400000000000000000001651121247673406200232420ustar00rootroot00000000000000OggSO6>CvorbisDwOggSOؘ-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSIOS#X,()+%)36l\k32zG'Sڈu[L6a#rM !Τ5r|zxnv2i>u@Ekݗn*6#6D!<7q찰0<<ՎdI$yk{8mQ q CWyE۶|~V(owk-d_t)YY_Ef_ޫ]ݥrX岵UvǗ+ʬÜy3D&V-Ua*LXz; M]0ٕao즾476U]D9޲ XйHϝ3Y׶1#Ȅʺ5ߢKYYC1)Z[Yg4smInA CyB2R0Ӫk^>]Q}.\}y"8iCϝXѫRHG*ٻ|^su^zD-V˃(D+'/#2̪,@)&ɩ q $8ESN< ꜈X,⌫x ꈔ1!4 ^Ҕ4ggJ΀*%']` y=Wpd/DS:pJ/ +`Ar!dDFFߢ)Fc ($=d Z@k>9&u-eS>`b .u<0LXL,HHtTUp: SD p@E!B4@T 0o0R0#y bLge*ZN d:A{bL)jRFC}@)D@PPAĤ@4aN q !61Ε`P2>J9]:׸,́La5¾?ԀJ2 `҅J8DZPI)V E!BPe( e y^\PWC # lP*`w$`>&Z%hӰ%8Lh0?DJJ˖YD(Y O )~/y/5;? ,I+"zShM#EՉ8_sf3Py &x`wdV184@0 @EYS) j bc'Z̆E h2@;\R f&I=@"I  ~"8B8À`H8MS8(QzM/*ΰE~a׏q6uSP,IXԫi-!Z4Mh8u! $@3)h1.N>&P. FSp^9BY&B!UMlPY5)*#sP`(t@aVNyl 5) ˬ#ˡ/Q<*a`80!$~]}\r={A]\;e3?TRj@D%]k0AB]uCqBjM6(yXiUP"61=2e8 @L0NhcX pH@ \;>qVE OSđ4΄qB HIt@@Z,,5iY&DB@`m` q#8"n\ϩ)%0 E,(i`5 &Be F5p* `q0 2JE}-9@CmPvP1]g̉--+’ 9M LUn:B2 ~]}:~|EzqW?qxX.Lֵ "n T DNaz (hjRd<@2cRnaR=;}1V}k{ɗݗhɌ voOKH6`$NBЀw %~ƝV]' H/XgzQȌ%D5] *K`@$sh NAT@uZr@.  k P A2"$ 0-jdij]H0@G$:$A,VyZd)j~ʫ m\ ;OB,s e`)&^]fz[WwNne.?*tPB`dnT ;d@Aԧ5Q * M PSDFXgQamu "GD3P8NcD(2\ yEAҰvLXV@kAajumXn ,QP,K"#* RBeV` ^ ]sZu([ z>nu({89 E8 Er!.U A{.v. @, v"j$haXTQ;Ⱥ2bP<X0C% Dӟ`qp 0^zjAzgnCY(*Bژ"ːL FC N1 S^ ]]^]}IX=={ ]?,,j`5CE=~R- (@ ҃պ2fQMM+*f@ܦ6P;1IM&%_0 NV8+ɮ &X+-[C$-yI0XƅdHdR)dH^ f],~XzQ.sE<&0\ 뺥V!%a؜*;dV@. , L3QȺ:0y! A, 2gxrX Q4zXa8=OB͗J;MLI!LBt +p _.>]޾\"4vqW߯k_j/e" ``dnUlsLr 'Ms`b՚(0@0hdj}fYWȈh(we(HHl(%L# 3 |A%FϔK7,TF]5~[1Nӡf mg k80.N6>]?ljY]N}"gwv}5 ᚄp &ȝǀBf9P9-`Jéd@ԕ@}Q6I(Js@d* "$*ajuthCˤ,?c3WdKqew͝Und9Rx])pqH n&(KR>e]>,,({e]{._Nȥ]<,U#X1P +] 뺅?@PT˙*b`jl]Z!aq@ݸ!8^  2bl\`: (Lː @$SG00(ruec2Pg'TlW^b+8L_3.ΗKpΉ 1>{2kD]\K"i.{釚En>@JYL@ Ze),AEPcDp)] FTFhdrQuX P01YUD.( E?N#g^?JxܧoŅ&+g4 eӸ9& @l 4>e]-UQz\u.]&:j2&|UuBp1tI*dUp:DĞJǙP@.#L dD0 . H2@$@!`ݚ{"?BE2]) \]ivJ22VE"|2ZD.t̊ 9IdVO]'K;}VO}'j&dM8Xa!뺥Vp )TPL D`Vg)P0-N+!(kL8AF `>(ø0Q2q ՝`ÀWG KSvK;J73Le9E^WֺݫZj|3ig3w | @cH!4>e]dW߉v5rY=3KOWEy?G01j2@"^5CPD]Zբq" P1Q@"Y4LD*8B^#H]`PT @ s@D6@m#35eܲ\N~-ԝy+;˫ƾeYߜoYFRw?jr![C.Xlp]}wCE4rY5gQIl.պAMVÒ VjM% *3`4Sn #@L8@8%Q ,ƳΎu@@^ eϽ(7~ JO$)xc2_.3-iS.bl.6b@B]Wfȝm#uZ/gQ;~` p&=uZS` )[rjQU%cai`J ً#$b 8H` @@iB,%Tr ʠ woùZLUUUݿ[X*f7wk)77֟+IHiX! U8RV\]^wfW e?;s}Q8#Ⱥn!3C &TSDpL5P"A]Z04S FB @2e#"@T&!UKe̺RU6|qq#Kٍ,YASH*/}WCL1m0$ )ŝ?Wf%e?\uO_*QXԅP0a Nk LULE4'$j)b*0iPJF $0M #0 x B4 JcNdTJ@a`ߗeʺT&اC*T/sP*߅[qʢva q5T,?ֳDR:饝?úe j(_ \]^úS$Cȥ>ۺŗEyPBV%1BYW ?  \9EP  (%U(A Ld ˄2Ya<1.'MR@pb3L`t_kِ'>;(ԕD;b Gny[Yaas*!-#dɁo #e OggSOZ]GrLK;}wrD8PBTJ jlQ@pb 'o(bƋZPU0e@a PW(2Y8Ar2/ 3sB#4IzɋE?1ϻ=9[~b)ߍqԼ4hyڭ r 'mcH)Dbإ]}~\2O#Wt|rQ9j2(Ka!uK7`?]iq CTu"b"(F@TSGa:Y`<5.(L Y @Z4DD+@sɕ?4Q;ckD=y]ԇP_eN6iV^;+> $!A!$e?ØS%j==rEw[xD"LrBV**6 b8gΙ 5sOT#) G ` Z`2`Ņl(0@Hgt<[&v|=fyb+%侑Z&n$'n5% 7G 4i؅er CPāإ?eC$V>m!eKc[aƁbȴ+&X2QlPC25 bAF4E d`HT<*Cd2l `wB P$mXiDU&V*#:nل~KH9⭦F~,)݄sb05 Π$Pe]mK&ʖȕ]>øŗE Y% -dʤUL)25. 6$!!-56H@Y2PLHB((HP1^t\0!r?Ƣl.S):ڊCR-ˏU}QTRT4mW)_dwe" bM[pd2$HN0A]}mD~ȕÚ*eO.?<&0dJ^ "8򗝤n@$: X}s#tsPР,0( pTb%d!"a`;[U;Bm"lwgM%cB_lY!YlˍXLg eW#HK.uXʔ1mȥ]["Q?\-re w8%2j@QM *SWLb$<EP1K@5BEʀp0 @#u9@.a^` `-gcIk+jY(Yej"W˸afCtU,P%wQ 8BʸUab \He]އtD+:d"Xr ].iUL"6puN65W5d6  U< t(`jN@2mf(6Qy ?;"\֕dyHx)g\TV}O)ҘO\i1 ]\Ne%3 ~ QAe]=[S l糤[=d|˚0P P 2nQO'? &CE1EpZBYT[R8 @]c&YΰpB L `.p `eeX҇${Pd f=sF"dǶbג^)+N;Վm)9u"dJ`S hȕ]?˘S "5mKM"VJXi!uK `Mى @fnj1(9MfT@픚rt(%@=@Ό@Z@YaJ_ !#q@ ͅho?wJ:z=_ ۽vQ0.+Zf ~4_O{.wL8+e1',MhqBYr %+u]]˸I=}I=DZȀIL@t5;?(kBZ .]@,֢ iL"a  `Rt$ b)`# U"hi0>n="uts|ue]7˫6|ӯ 35iu8RZNW8II~<%j3%1? $Czi383 u]^xAԵpW#7v~|tDy?`Bd3 P`!U&CvsYD #&L@mJD 1 _A$B,b*  BL/%`!%# 3Fۚm)O2;.O)/S&?36Ujuuyeliͭ^*ih(>.ǂX.nLE ӈ`YNKp_=Lú{Y]Ø"{;ƬzȽ`,*(@ ' &x?"nUSPA(b*bK`&Xer @@ Btױd*냄vndD- oV2u_ϒEjWU^JX;pCn9KwHA4A(j0,pOggS1OYdȍ].wI-wIxA=}-Q@tLKT0v 8K(6Pp4 u!( 48TT <  8`ni$*%ەyE%"<6}y=Fe-/{_VVTĩ0~\Mզ򜤊_S@\^=*tu]__[9:_ߛ!'#\  Ai(AADKZtJ jV0 S1ED(@hdIө  0ZC60N[ūIIlFXu5733|n5Ve>}z*ټ33Ć۹6`)Wofr_[Ls18H14Ƣ [,ȍ]Y$QȭE=}"DVdZjA3L L"Hb pʔ L'T$ 8Di vϕ rfqK?yukC=6/ -"ew {\|!O'2 KIc*}s l G1 M]? X$ҭV=><0Vp 0 s" ]`9U[ff3 1]  (0/BAI c1`  pP8Hf8Ť!t 7dW>FFf\X<ꭽ3[w;ˆ6\Ή |VH! ȍ]ݾ =m],d"2Vf`dZ""nl8DTnsV`D8A @]MqP@hVi0'Ю 1xn#&E%47{+1 q7RYuuuK3^33FVh SQy{ɀ|^[|A1rV`Qȍ].%\K,g,mBN4a52ElPa&m3lV(!LM/!⒓=-zD >u K(&҃-XMӈ" EPH S95 B 4c@Ό(>dhF D\+mKfyZ>jt֍+.6>>\0yAHX|wݘ}5<> ~-DG{f2$Qq`}_'͝/%d{=D >`5* d!4MZ%2.Ub uB dVzx Z4s!%$e} ,mwc:RUo*w˪As4}vo{og%+ҫ r|qST`By-杖7 ^JO 6w\+NSWM/fqMv4rk{Y\b8KQE$ dZZYPgmRZ*# LL-hl&3P!Cl #Q -Z)娟O^y3uaLpUP岃x f9mtB3c*P}AI n0%^ ]]~KSl"84bmX -Yt`BNeqMå) -'$Do ʺ@]],`@H``\`CVZC" yjEJfaoyr 7TdQBen 3aSnF\uiW1K ˣK~cZFfhMQW29'@]_p/({{{hXȽ_Xr ,XBӑ?#@0q).ƚ1!X,b#d2 XxjH !fVȈ)L(<)~v:2E#՚7~*`UKf)vvI 6|U+ _P6Bdtcn:s͝NaE]ܲzDFBeQV`qΙ"B&%Slf) SZMb%dzi c%݅h::(`: @0OrCuv>7ڬ?CM^s\T u9_ F|wr3DGj=r [XLN!ȭ]N򠉸?k䶎wY<(":2j2@`tP`RD pXu"q-dqP_P G3̄i` (GĴ!?qvhRŢr$‡He`]*SJOt>1F%_6~D:V+1|hТ{N0%R&`qENCȭ]NJPDn]ܾY=If9tOC`Zi7\=S, X6@4A.` F00ZR;P9;Tе蜘藪 .Q]{eU$ IpsNaNoANXHՁcHp`2he+݅v  ]Cݕ {:]?%\?G"U YTr$NdNjw7a3u5#( PdN%@N@ZI\2";Xڮ3k.^_[yYضMLިq{Io0.1WA,&3ɒgB9%ǚ*@,:0m].e)+D'8}ni+C6iXȴ)PQ*V, jݑ h9j&"$D}QdA9PW8t>.nr`bZ` `(pmAL|!U^[;)no+ۨb .=pYWɥ:_z-2D;凁ߞn+6)hB18M ͝#LoinqA/GbQ pV@8 "z *<<,Q@X5]jRѰL@@] Fp`+ƌI X0!0x*R[65Z!lS^buHnTJ/6⧫ lϳvoVGS);Oܓ.)qub w(~ȭ]?\Q}}PוUh"@%D%]`1i9]ATPfb˱P$ 0R*h Jd04:EP( !<peX ` =G_ZrUY_^Pī/'yrߙzR5xm3O̪nb5k`::,(p!+,%ȭ]~="Fn*ni?G RY J( ] .@ %43QԍbQv (0B cq"A a D`dg ÌܒpC4'ۺV8~~Ee7g,uzs?˨M<'X, .O|8'&hg(r OggSOSkAȭ]r Fn-/n@LȺL"#=UA-.s *S+P$q40N4Fp ^UT8&82 P R~ck7|xS7K[gZVK7Z䱎eI$:۷P dAjH ȭO#ڞb৑w\=d `bTKȄ2 İP"gj"rJNTf&YF$H?( z(EL(i 10pȤ Y @́Rm$W_r_f[fJQOY|4\ɾ&6' Dj*]][ WAsE1|GȭvsY" 4rPZ& qKmu8…JDԪ@5RA&V;P RH`ET+N,Bja0@b:W7EX'ӌC5E+sq':}yo+ 7[: t}6Log2UUwKG2)Qy D& }ȭ]f-LO;Z.x&@Q i@0ZQGY( 8F|'!IiJ(D@ 3نc p(@-h 6@Y@L8tav#&z GKyIoefs 1f2*lK𰛊 De=ni,Fw)6My` "&8 e;nC=O#wt|zD T[Bs:DEP2  *:g&T  LX]&0BF)q<ΠAaPU=9=- yiAK5oC†GJongFא[O߷ҿ.Ӛ6)n8@K`/ɍR k D饂ȭOnqIFn_|mwK, =҅@ 80GPgW Lhq%@R@ةVia,RDnXj߸ ƣ̫YA!o,c}GޕRTjuD&ʕ {4s|̺B0Y˔qI'a-;[M!QF=ub 81K`X(Zi "X̱.TL թEB`a@  !J@!@8AQ;aUR!dziJ/ro{7HrJ3/Frcc'kSbe9VRS"槏lTN nJf \mOX$>ܾ[nzDL.Yt 0\HDCqS1f PLl@٠<gA p@Ac ;І| mK#4-^}[*^4Rh?첑= IS۾n\ZSb!Yd9C<9sQO mwIw_%85 t E+ғ"Eu*BRj)XmVR P"aa ) B 'ƜPPg(piBz|Fm#wLHHcaoGo|Ky ۥ,'i"dP.ĥ  Nȭϟf C^:~C"ޙx`2'@:X\TL?PWX*éN vva H`E}wBL"_ Th 5.$ Rd]"J+~pTe#ߪzP@_,j,p)V㿼h-K{a=bq˧#Ǻ 2ibA͐XpZpJm s/"nܾjVO/&HkH,YE܅yf1,*X 8LS ƭ@orj%Ӣh `R*2CD hJ.V\m"27)C2/Q[ X=5^sZ B⡠aws1,8Ppt@-;ߥfC,"@FPtQS$P %5B4uZP aTQD@Et,,,4EZ] T(G g(a`3m2S^FN,EO?}+Fj/GFyenDI,odwYN%oJf-fR~eWDHQ-<ֳn xbyH%@?,[%m"BcVC/2q Y(Mb@L0"vG]' =S 1* ^'`cqY(B±:)-;[jȽif Cėml+aVbuNIkb(8J9;lN JR 6bjdZv h9hL Pp &BCs Ez]hka3C59>WFRe,K$0(DCLbǫAۇM2H MV 48-;ۥW&⋐iο Ul")q+TB$D5,XB?*-Wr[Ŧjbba18  $vJ@3!XE`UvOX3m-`7hLl$*XwM֗\`qj2*Sʒ"bGv1Z~7g&;9А);N[h" ܱYj"#}#k,9AT,vIvMlMJ(% d,hhUd HbH"'bwHʏzUX܋W|-|yKmm_]|Z;:&C!-~ҟI'>n˚o'VH'es1 D -;p[("CðMė qb%dN"+2-= [5j@kHEf lPAJ(J0 Bs@` @@UꐆGߑ[H+ٕA­yOwa<;Y[cyx}B1~5B)Pi  :TX \@;-Lo=П=roa(_dX&' T8 5BYg"=mzJMEV PSKV!(3*zt*ș"tB }eńf,zDg?-Y9ߵ >tqnd"VsokkE3$/J;356^\"P"j/  o[bE` SV A  Yt;K"8kfvZ)A 4FZ`rq@0@9  Y)`X Zh9H @P T04_WDb#W#qYq# o-v)[$Q͝\N= i8kbf[ O*h.dI$-O]fD6ܱnw\8 r0@qRG?PEp!k*tg\NSAT ESg+UB@I PjּAQc L3W.b7R]2[U?Ɵ-X>.'5LU2h,8N YM>E;NxD|FTt/7K&qO d@f&B9M'c  \:Rv$N T`)I0Bjj+E2 4SOH@`VtD 2h@!ygr됩7ff OpZvKf]GW\Hd3Rbu,UR ~27}HIz;NDiEU$߉#NB- "(Z]U2FqUř C5@\qA%2`X  qcBL@Pq*0 `.BޘxX#Bic,fjţF[8#ʒ-6#Q~jwiTltYKvYC\!o\0$a w'@H-;nD| L#w8r"_ぱ&w 1\8KPA@Ιxm@6Fҭ,Je08.)(|0.*p!3@`GPܓ{k6bPzqܷ}FmߦwOupPS |Ñ?WUu+[9)Y Y%~; XDGXtazD>t8QwZ@D0QQtbڹ DOJpUNF@B1 zYxn BE`6s [ +E!vYD[HTkό=nۘJtqxjL>'~)>|YWc`rM]`BAG -v) iwY\">`2Ud5,XBE[!-,MQ\*002c qV#l&8Mq6Ŷ@Qt@O S_vV3ߟ:3o]Ef6x߫v`ǯK%cैgt%>e'j:1ȁ)T%^r%)( v{Ci΅o=e"G0HDBXL*ZD4?D Dmj)BkhEPJJ.פc=?^ !TvG[ P8֌Ҕ]> 2K EuJ۾=o9ݣa<))on0t,I2v:j鏨.Y_zϯI=$SeI  w"K4rI#\/!n`rԔ *H(N@A {@NNT E@E0 Hq !$,HFƔ "X6/s=eيdxS7XYC(8/3k]d&U*`V^l"*uX(LW 09Dl A5arsy@-)tF˃&i4& i(D0KNa䦂U0˂P4E: I2/]80 x i@h@u7ղ.W-QeKX]Q2?6Q?>̚ϗ DOտp~埙Z#qrW1nKhb5`%[;v{GCFTtHx'd%r00,G)J@ v j(*P0B!`XMԊtcy'B(p9 ( dL Sl#I M1lmh9oT̿Bůu_ R8=1՝jN|ݩֵlJL+đ1Y8+P^ LUM]^GV1eñ8@VED]Ȅ0 E" !(@FtkE;"LA}Z3L°X #Fr6(8MF`F )62MӼD,U/lwQΛ:sDˈW7%oi[KʞlZ]E' vb n@1K"_;NE$K`%B&d%HP4i(!@CĚPP3^)S( H@R Bh 8G@Zh 24 t*ث#+/=o>^B;oiiWym&c^u-9ך1\Y') {CėDsxpY\~O&k!ATҁTI9*.*(Jn-b( : g30|nH5]PRt*w *[{0Y1یo=%J&W+j[y [q1In1)e祌l|n,j)P$OggS!O"]:fxȝ !@KٸP'gT)!tNq(؝`{P4HD4Ȁ08?8' ݀'  X@Tp3ƌXj*kV\L|vPK̲7?}RMyO{+mPhEXm kM:N+d)xxh;*.l/-OmOU޲/ɜTo#'%#Va*ECwY,L_;vX("~G @0\HDKJ7N#_nD-@%  G("L5'-.X Ed1 L D8b>|N[o6[WV~oFX3o=a\3WnrfӅ[&KC.snF8 Hg6[) xAOyD@ Dj8BG HE?(J7C*I`TX,0O #G!`$T1tlx .U\-j]rjSAyJH,3>x- .LyXR}vgva8Ȣ͕7uփ\HZ (SyΡpKl" ,+,ilc ! JײmZ*lMu ZHT)B  (G 4h #QJZSg=Ua )Kos?lbe޾p վ@&e.?r%'xݪ)m+yiɶ57$ޞ"Io/ ȝû}1mT- @MX L+5*AEp+JV)&& 8P @ ]#EMcDNg#w Z $ `( "QBJZuvn|㢢%TosuJ‡̕Fy,̘*b,%1 V|<$1 $_rI:v 6X ѧ;v p}[i?qL*!*jTAlC1W0e0M12 Fgh:@$p`馶 M04ZY-ɒ2Wvz7omӒأWz2-8;ϝ\93 .0tW6dk jsMl8ȝv2[ZKaXdDu Jp$?(T:KFhPS5  `:* R` RT*9R4ln8ȼV4P\ܠSm/RTֳ} 5'sC%;.ο\-WRwmLg}]nۄ0V48'Yyz嬉DlD/ViI#ّɏEԘݩC[ipaCupbKH\FxMCG#ww LĨ P BѤIY""NL@@4Plj + h(P' #=R "ƼE?ޤszn\ݫ زwrwsm2wSIRr1K}Z"70kR"AІȝBYHat[T ]-u^b?9k?~ZW13Z/3|U&nb˓qPȩ\r4!` h~ .x `J -T(gD"В7uzjb bt 8N3)l {0UB 3x T)?,nz7n|m>3*RJ܃%H}ܟb/Q -3^_fҎ>as.pȝfD|"ܭ7U&^a`q45 APUT0*S* 3.CS@P0rHBf@г9/29JҐ gyݖRuf-G~#VC-91˘?yOn-OXn`/XJ>{05CCSAgU"~2ܥw9Bd #* %Ӓ ]UPUAPTDT]Z@ ^"d[0%@+kT (D@q`@$[ F=RXLFK2Toü2K'VR$oE啇,%6,U (鹦.W4݊rǗD^o6ᷰ8QBȴR%"զU`580$ pk5AB %#\:L]|\, |UxUQnta v &M["xI̖A(qj5u Y)ȝ Y %"%r<"8MHL2-MПHtdPRUQ(tg_ Ȝ^T@B0`P8 [~  y>Qy?b/DGgF[ysL[Zwҙiϕ4F,Jrt$+_,=pQ*$@‘Uȝ #b}ç CO~8ɐS  S(("!A@hR||QЮ*b oJ#kQ߷(|@H>(-* [&̈́ZZ"j;/lqZuDzUTo"d1/f|o;y2Rbجh },)&`ֵ 0,%L=pT-+ B:̳@R[\YC558Vx.W}ύa'?4?goޅvZG,)UL&&tMm .8UnNJ*[*ȝ.{O#w o]؄ߓG GmB&Dk%(Z<*h=GAG5ADM- a*! P 1` pPjlUJ0 di2kΧ)}0FڰFOĈXvF dDֻ{EI?p}o":WUڒO8uO5W ꬃRm]r"'inݱE=LgD5,XL:?( *A\:mQP}Ei@ S aTP8b98(!ۻ(6(XŠ%hqJg*ۯț?x |=k2G9;[74oR&pTB!W:$T ȝvG74r[G6 A`% H dqmCTP,C@Z UB  QpU n@ML`nXȤkV*xUGgs:k}׬tU~eIe-e?[*3,N`{9]Fr)ΰ6iI;v51qØ:jȝH^>[ap!~/Z9 {{i9=6B6[V#@zU(i3hܷ#{J$ӫy~bߝחپB{Xn[f){L!ʼΘCXD|]5H)؆@ȝc{]ݱ I=D**CP112bt 4dLA(:F+Y&t@y +( `7 *  TfO, ``cceuėjS?WQxۙQ6❳8nvdFWب[olj.2Q0~UzK).H]@s%DmW[-r~F~J=iqK_@dI,&:A5P<9ou[ 5qj@`6:SgHK.VȪ)<$ J;K72=z;65~_A92ٲY_N"Xsh˩:Ҥ9tãhuAȝÛ;4r..*p+J8C- "AB%/P dJ\"L4dO @8-0?Ky奉|~KK?5?CO$,g~%ًjOFC+ml+c;؟H*c !>$ft?[#DB"#&(]' p,bKDkx(C/6^5J BAB7.[Ė6SQ0L!)LFuZ6̙a4 T} 4@:%Q \bP$,Ms&椒?`'fsmݬJ}ÐC%D]_,϶*|夰&x3lAxJvE]a{Cd]r*~.*~oZ eaQє*$OA$Q*]I+nl*8m pAP2 $ zD뙂h i:)PB&v_\2x] 1_6:Vz5z,WqcѷTTE^,&5U .9vUWYXoSK1:nIvӺ_` `(]o!~O4r7{XDG :H(!Z P4IV1@E%*R P !v'VhlF,k/soY`E KexҌ<<=GB4VQ6d_eY^h#ޜۿU- Zl,a`Lĝ{.XS] oa4r`02?&!2bh&PC:Z"P40J RC 9PG@wp%@d@v N#뙝1Gv`h2n}62V6t !~o,^n y](b&k̭Rg=JIB tVM;]v Boc8Q)!T8@HFON365T PX28@hI Zրq&%4 @ Q$sG]keYu#>۷ר\ywP;RϹYY(ėFV rӤ@X~ ]_eVL}hNWm.xmb %4t~ldbf@*̎РH` ՊLi'zUzh:6MH!BQ,sXVy (cWF>7܌WZVG~LBޭSR6<'CS*\ A u$RV3DD+]CK, l;n0Q PJWU*MPij vD-b4@S@|؃It&F8Ӗtӹ {Y&?3k^G[絗x䋻G$`LgCk|,1H)564*4]!4r7{r<&qB&!\Hh4 ?,)j_P,EQP`$ ж &@CAl@tFfXh6)ruڥTo?Tc)yEۑ0Y*e Oz>sYN_q>8"W`Y.dB = o'R &`,Y J8XatR $YntHtUM5-(Rv&)ˀqB =qh%  L,J.Ca-)}H`օ82JxgŧnL&~GjG9?dVY%e|p[94,P ԫGO2_a<OggSO vі] Gz{O#w v w8zp/"pcU(ҁB IrH-vQpx/`%STMdBՁ&~dl܋p⒐Ըe_20$H[>'7ķXo }k\R>!ȝU=)'}v9~ߓLY  &-ICG*tgBb@yYHBhLG8-3:H}dB(d%B8MR@w.d"H)s4BZP6 )7r~?he^E˦\eas"vtj+F]z?JW(-O\_gw2I2]N[@]]xM>!}v6`@$IEKtAA(E:@7&H`վw i @)j+f.3!SBn*.1G]X!V]|]Uާrg'ɕdW|9#٤)`K<,8mX֏(KG .c87j8]=!=Y.q"9#T5 E.ǃ X[U hSEjD(Y)0NUC \Jtaer(WPd{<k$Ƴs2EDW,3}q?g֯2D^,!7,s^+(ޛw} ϼLQ^uW]%WlQ6h ]Y5\op=ݕ?uVp/Aii(BS"? V [9/a(T4 FEM` A tGrb0xrt8 !!pT焐=T&33;~I>Woݎf~5&w^ba5j.i3vLz1G#jl 5ຐi]&:gB]#~>ݞ%K½9#Z ŢIS%?m*i)s}g#n[B #)EL0G *mZ,l[4)VTLav&=/4C--y2.kGŸ'=Zi;ͼr73(]dG:TD6T-5ƭ[ ߹2*g']ÛO EJ) Ⱦ2!pij<(*]P;" (KS(9 .5 !c23`<J%G =hڱ<|Th+UvUV22q/_2RV6Kg{Agnvru{g(2AS7~8#ؤlU!]{./ .Jʡd%B"iP#K!JV!`Ŏ)40F ;J Z?̵^ms8؛sgBOGʏ<|T[~=2]v%NDmDk+B)Y疺37{֟}*\uƄ0w.9X]Ch#2L#w6 vR^D#XD d@TF*NJ6#Epbɓ0T1BnP Vi4TUD5P8%R;e"]ui~m3 >Ձ }*ҪشZVFvKf]C=eyYL&m.>.(R #},Y  `U>=:.?f;"~,&qB%4t4?`%)B%wrEELB] :[>)j @: Rl7eg1*Q0آ(#<3qBʯ%e;(Y-Xd\gݫ7{@p݂* 䮅C (@YbFAЊh LJ-5)LLThYPx(:PF&^(!XYv-(xl5z)oFއPm#}CN\+ox쥐{cLd[_jEOTӳhdFEʹEŚPq{0MG(R8:v)w8]a E4rwu_˱Ȅ{G b&(!p (RJ4MDE\RJ_ TA@L@U-z(2PӰ0 3(%>i jC!CϞZ f giH=ңj!2ڪiVnZ_9 7Ն`2-|&YqX@2E@V;M!!-s * ]Y=@BkV=ĈZPBTҁBESJ@P %N-(Re`TQ0. +/P 8IdЅy I=PElQVTh?+Frle-|~})2Z.?)*^nA,%9IxE`u9 e>= /2]Bj*!@l"k!"4NM򇠀Xx/vQQhUFFi0)Fs 8!{BC@fPzt9s%(1TI+ Q ]Y)WK7+n?UZ.qF}3ŏ^a吗ɹɍ.uBNfltO;OggS O NU"~uKxv 0:(A 39r7ysC8(ؖՋF,7[i]?H\,F׺ 6 OCj`b$S>CoBjn ĶbaHRHrjb1 vR@̒M tiZh`*uLQd`p62!PdmFS&CPOfAisL`$kRx㻹_dEfjxM7dr_5򍮥97<'vwل3(oZЉMV5>Bf˟F½#T D,FJm ~A\k%LVS2@ՌL@ .8`Qgr)@Yh\?;\$ܓC̫>>fH*ԑXdQ̽oWsmWfZ7Kb*A]-jc!e!H!$#$ݭIՎ$b K wU ZDX  *A1"]iW\\b(ajzJZCNA[[_Q1my$Z`s}`ZJ9v5zoJa:jhjA?]X&MfL]]U* Bn "@Ց^]BCDj =K pT"!2 ob^?k n#`.sPpu1@Ax@L@n@U';K1:ض̳Gh6"IIgqsQ=}WþF0U/*m_YQ64kNQL~IRd̅c~| GKK8X#qwr`v">G S@$r0(k?`SE]STQS P/j$uRdBJ̠#!f׬Jysjާ9y+#_uqo6owh> 1^ L;ha_6nvNFֹs0>7pD  ]0-=@DX5?CtH8pp%dIBJ?邒 B`N( 0B@&zsRtU XJb)E(]Y `6]`"NH VG޴{;yc(y96' ux.-VO1A\2QAb .HlZݪJI 4Xݭ˰B=) {%3ANB- "$E$'㦀&F5S0G ¶WbZ@WhH #m[F ؚ إ+PɊ"Q%zԳ/~ͱMCW5E| a:1ixe]ʒ7F9GMcրbYk.pfKw&@VbXFAA;JN=* SmZLA @z*Ӗ9%9RgHN6|ccYNm̶_y]!7FZ7[{WcJ$JѪͅF(RlKvs;t쿽?ԹuHt&1sK|tJ‰L) ? ^ UBO& L 0R i;\*.#60 Cj8C -FfPKeJEp£ͣ)KVAWU"iz^){Pc3y/mJ/Rк1BTe[?Q[hh9k4r17H)|LQJx ݬ! { w*85 e EQ? *NSqQ@ i N'Bã$ 2t+<P,SbMO##K4V# 6{4yݭ㲋?yvL|Q鯯2j{򊻱ٙQfrtNMe>jVݴS;blKG~&]3\h*)ݭI£ @A6,K gdH$y%-8R( pH!1Ii6\6Ͱ$yfgl'{RO3[D[˺:@r,eU̿nGK?#WKdZoBFV)Wa|˒p&0XQ5HVM!w*C'L 2THHHTQ3TP+d6=5TFp RW;DR i[ "gD;} #ݣG.R4Bq"?sw%C/[^OXŻo A_\ڙqUc#>v4Yei˫B^s:DƸBj5 ^]ڰAK!wjêEdQԂB&. PDct`YL3`Vp8I ,G8) %;@AO0'*L)Ae+m%<'dYid6 S*YGGK ; WeO,8X Mqf+ƥ~Hua5<>ȝBwC/Abc8^qKZU$S?(5Q9Ĥ;PTi@pAU)l7蛝hL LFGז}"ifAȎİ>Sz*DU/_^8jҶ܏Ľ8_`]o,DʺxwY+OWg sG6̷SzI@|ZӍLC1ĺ&mbCΚ wAA3 OggSYO ¿] C/} 0z,Y 2&!T($QгцRukB (`ׂ`9Q<7$wࠅ.(ALb gC!H=TWAɻ 70=v;NDޚIn?KJ|c}3ΒblWYyY̨gaZD-!B!%0G3Y%Qc8.BnOD@#X Y gd0HR@{fpD ]8uLPΠ!! x!lX b&CkKP* eLPޓz|_UF[S~ֲ-f KXUq'\j$:v%eTObK*$iH΂]aQ ^ȝCEBr7{˱}< f%ÓXLH2P &湡`q"6.TCTD1-ӕ &A2` , `p8Ԕή YsRUГ#P M[ntCs kf4Wȼ: |uf3~kvT{T2VE/++\.4"@a BnM +I#DNfc i8-Qa8U1*b-Rp8K,/26 p n&^:#~cE@dZīE[u^@.s724uTQF,b/-y%$? wamЛFq{[&k%솴vP`8!֝Icz/V=ы ~G BmTHRJB bu:3E9a1@IQQ8f^C_n* DRi\`Piˉ-SG^u [!sO욗Cy^@xUo3T wfnn6&/3=#{>։^d1lo_J_ͭ쟦u%K^/b>ȝ{-a wQ1Ĩ Ȅp 0LH a0a/ E(8mNC wكt t7}*AY@R*ͮk7 BYKשbC}b]-"EՃ3}Ho7)uwb|o3nf`]eEgZ'˫e7Wm US/KHJ~9^;:*j&x` =ՆK& wS8t9@a&ҁ((!($5@,*X ;( ! Sa`(Lbl6Y-xKsөzѶVD)IP3ucY=O1E1o~ưC|onl*qem>=ESWLbn1aODph^ȝڬz/SInʸ#c[a1&TH3CpP!SS#`@eym(\e)>K^)1REmtֈ}an u ~ƱG&f:6"|:l^tXj ެby^H;M%sfiri  KоڀmN_FM(I]AtR'z w6CFM$sP3!Zeώ ^}1 17..#ʙ%~`*nnhY! OрmlIn2JC>]CEFPݬw/G/%D<00%/)?(`Ut\1GCL-j4i1IMDt(Vp2Ils!gcfy.ϗb[zv.4t9']ǫ&OR+! H(I"" gϾ-H&zlǿRp}Xe)*ɸ}JN!udPq.F;"CFqVID^ȝo#Ч{*\8tZ@ `ё$E|r@E(5;Pg5]:(jű t+]< 'HF lf$ݮҶ6كiYAڀx{m'5Vr>uGݻW2婲"l b-a:y!>E~^fN[YZk7fvK\T G["%PLCm>]鷇Qp|rw~eRH( *1arQG5TP* *@Q50S!*=U[.[%Rg`}@Lͣ{}pa ɳx!wyߪHpi_X^#Εm{UR,:7/._*gy7̩̾t$zU^~͏Uv"վU3Ub"dF >]{arOq hQ'Q. M*)%OO?%"al%$:)`=`i&Y6;K(` FBkrVmSHL5q4N *shR${_=Y;~M"QŲ?Zr:8k7Ԗ&0uZZ5{g@aRor"eC^ݭhPS= c2zBG 7NKPBaR!QDЅAD¡DH k5u0vNsγP.roJxZuy (F>׹QYߙ|nJnlϝț2ߣtnџoa(YRm`q!eU[\ʤX5Guǝ]]s/M글)h5uRV-\ BIs%ѳusggTy{Ap¹ ݙ !E TKٞs#tDCGg˕&X+q\|>ezٙzE gʫ^zS]Ô"8˶ )P[`kOggSO Q.^]鿇zp m|GrZH0<8@ "%cebnT Dd`X@ճB@F2 иMGi#MO)nj5e<7ץwtK+@"YWuTif {Ti5t=$Ek-R SkDiZ}(eૼh!ťmy&n[2 .L|s˒[ݏ?+SN`@UCp3I9>]wN rwe˱8eBD Q$E(*]l1fNN F-[)ʽT incήBuv. ~849/WMo՞2+NwHuy6^J˿`-%~ {VP|Hom fϣfŨ|M[.Vli%Gc 1s^p聎B΍c.!pPT9DI dpJWm (,"X) =0j$#@Ν pOS 6xfۦ'F&n:%\Gᑤro,S&gX1ޅ=oP0}0)R"κ'9$ @yIʜŘN^]w âh)$n*8",ZB%1t<2vADN˘s*0@lbeSBg)>+8˻\ENLՆ"1f3);1֯y{xm=;GkV il$͟ߪPtrF(eېvG)ˆ%X٬ 49KƦ0Yg:ޓ;h['84ԨmUM!Hj' ]{,G'j;?a@pDZڄPa:@B"I)1j) )"͂$҅j@Awc#AH2OMs*i"yPC4md;iߛs-}z确g $i=4bu} ͍6ZܯP_Y-YWޜF_)LW$+g3Wėc4.ͥr-񖔢qF [aj 1)^Ѓ5?aX@KajA4!*I쿚 8@ 8 PuPR1Nu hZP;"h-Z#b,tI!fEً)#Iy2CnZ.N>tMЩ0Ů-Sg{/w-}˸nO sm곩8)pm\ퟣ@C p~8 ^ݭ۰XS=)G;V3 -D<=Yn8 VK41aY7 Q! S!Se,)%JGrXC'x%c枠q>3&6uVc7w+N["Y)|7H~7VFO׿Qݯhf&7E2۱H=ʱHb[A")D'šF5&*10F3Ȑ-aGYVGHEƇJ"oIsW @Μf+>/Wa{س,u|}`^vׯC1_`5mr{B v`&cnAPv'l Br)n^-Gz{& wppG8"QV@ YaRĘiEL$jILFheS`+ ]x0]}eȺndd)l i"KԱhk:W[LںsׯW 9sh7aGџ1u .k VnK"ɮ~ox:n _Wsg527Nw,B/&j- jXO^JD> 7ptz8d HPI$$b^JODc,J&7Ή"UtTUP\10w{qu2a|scj>Oc2,9;6׀.ٳm=?+?{r1>_'߈Xr.aJ-FH49D7$| _J{<)a1nF#^ݕ˰x UE 2!2 IJ)6+XKN%ѳ L7M@`qq@vծ[#h(&1-3ɵH\Fjͮ"-d*P !+׹Cn_^G?mV#ussn~WdzѦ.W(oZJDaT49ߒ?KęBpZ`>]ڰ*8Y gnp!a0Q T9bHQźj(&1VP5Yfۅoߎ%Ky=2?:ŕ4S|ɰ7 uڹJQςZ9HWFR;Q(#4 8^ݕݱj{JK+( t-@EEEJ]WSAQQEp E "IH<tF>噽Ám+s k3pт3H$HδLzdb۹}YyL4ʋ*D}gI`\\ll ’U_b-Շ'̬T,Z4tYFJND6dJ<)d>]{l"Q=30ai `)JlԊEfZPT@2(+@5lJdd?pb yz3ٻ3cͧsf 8>4Xw"U.ipV ſ Y{ TAK*}ME%W*6$(nĿ ܲJ]tM690.p|r]q^ݕw C'I^Q1V6iXu TJT]R('T!G4VgbJDIČBڬL¡Dg:@s˹_IܝZIgJ}:25=_c#v1d|WeT[*W=dL+T~m5*?[WFڷBا#^i#&#Z?q4UkrG<R੡j( SOggSO#^ݔ! ha9A^*`&gt"%Je$%- SAmf`n`a<#6J9S 1(p”zA_vGt1AGȹ`G;{'&^ܨG K>|[_%a5 `~dFr+Ҁ6% dJ#8@^A5{!F G9zpaZ7T"yI7-*$U @ GEؘ0si A-w Kiheo-R/WԦRJ'fʗfSکs(lWÍ/r&lZ})h[:cDc/?rޢ::S)^^l36Zz=)eȁE5,Z䷮gy?!BCNeV>ݕð39HڱH82Q JP:]J)?ZP0CQAM"v=FӛN` c+R T TSZHĴR;}aNw@Yl,0MfcO)z j^ȨZyoX'btuqHIv[jqCpO d 2QVT+7RaW)C,$^=hC/%qȽ; ^$ UPBf$QJN㈂&V`aܸհ.j]@2TZ NIؓ͜_SԊpOf^{湧c[-®rX ~bgDz;LNw__~~}S]#%5WWS37*Ȓs3]PVZͺbc 6 ^ݕAc:-?Ix*he< J$.,(ftANQĚX``: z3#*ye^b#T$E@w&}mؤJe>97sZ=^عuِT[})WJq?!&FB/_->Vin`E"c/^pR>K'/v>g(!Ӂl a+^ݕw C5P{.G5pVpĢ4ĖEq(*^h4L U`86WGݢ7dH\8 M ^ax[NlNQZ= ۬ "m1L,C>˃%3bu`qe{Rˌ}"5[LlY&Uqg /kA~=Ľ !J0, SMHe:X M)D`}P$"ĭ -M6e 3# d$Ld>Ȃ%j$ tK5 d9{8;MS㛛obF/qR/2W߆gw?W徝H ;D?j~zʄTRب(Y1#~-̵F `Bѫa^=++ =h)޹R%=V`]>_+bvjUBX!г-T"#`S ^hS4y ^m+:InP97Emݧl{k?HU#Ci\GD YV*`X0n޹pQRǨ{>M& &,ѶGx4sTn8 [>ݹ)艖Bk8*Eˬ q 0tH*> XQ*2]2L+r@*RP&v9Vh&2Lt?]T T#d_mn-,dPAK^a#`.+@vWäC$$JnlY槧ñ6yA֡{;~\^7~rdN2iϷAl>J\n-PfL;,Sg,O^Q07߸<%f4GĂ[C@P %^Ƚs- Drhp 7)RJtR)#(aUS0s+*$zWpXLBã( sHծՓJZd6%[b;۞וd%$Vٍm#~`5!@T{+`ޡ>Cş4בջ)uW@?W9+eX`᣻ec%)A9pc& ~ȽAQ^DKM!F ;Vj1  &h; uPSHԥ̩uBihmțvd1n&(u~UCB8pFHi UnfLl=6ۦ CQo_SYx7U9i[_s[ymˈl/fS cKē (c"5p8Pk1i~ȽA*ǥ5%v,&@8**KRGEA.- N#i@ϡU{7j;H;fh^!KtUSeO//ՍR1]WAqmՉ5㚷u}XKOfEMoLA~r:ȇbLP3`L}԰H@!؆(%/B f8IT)92@"fLUv@pg۵gaL^L(,\1K%Ty] JVdhEH%N$mۯ%l3+oWf/^hcٱ3)b)+탪6i3@BJ^^ Lr?V6, HM))a c͜DcL, Mb:hya `iu lWцIN;`o&1yT~U|3^`ʼЦ 0Go]3y$ngڋ'y[*GPR𶘹D]fbњ40H pOggSe OFF$Ŵ^=!^}gFVđːNqEiԴD揢Lj0$q+0u8,yq^PBhwemnݼ0R0Zc~e_RH|;o5q e[WK ؿ-]ml0( B-~$@@^u/ .E`yI1 >q8Ҝgca~= [_zJ'CQWco贰fPFA={Y BMcNlj+%gbaa %jҍ˅\K}8^u/ "8󼤠=CR)+RZ հ;&U4zm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ.Q4{q?Vulܽh9pp7n?nOwLSֿNKEmsQB;d Iso~~.i46K ,cM4Ooל>N SQ`} vuTw̜]rFWIƦ`|߿?i*7[ 8&Y['Db^kI =F;?q4X6(PGU:d~ae(BC߼ŹJu¹яnfk:6> QR(Qˤ'e0Z%"a4m(M,uvNAt)I`.Hjp@; $^g8#B*tD#(v(SPp]i.{4P*#y peSt(bvƤI̮"'*ܕ?39lQK.XJ+r7%i>I"Ul[<+=e7uYB9.h94qpJ;4Og!/岑*7G stT|Q&4􉍦0F#7c! k'I~_JxMŁ+i!pIhivg!]mJxO `TزRNxs~lzvQ\CѾ\Y1j;`<_kc1s=1u%H ϻ2F`'1ޜ4[vϻ5dc-qv F9νL/Nnǜ8 v׫߫mrHijS+X<xtM `ΌNs|4Y+ Hb (R$Alש"=>a&d%l"z( fnϨ揉Arv߿lr;v&뀿p2V<0(Bg Հ)Yzk;avهRi  E2LW<`@7 A%KR#K>JXi̚K8oɵF82d؊祬>6)>H|2@_"=o2yS[>J=9@!ASAR|C4Ґx (:xp[rAG3 FCSi=^G}f<?& _>EC==M |7j̴^v .v}e]/htl1@su[AL%6O9Cj^CKpޔԭU 'SB_! Si P(a$jO -% GEܮ8@z^7V^:xH ^vI.vHe;x;A`#5TS@xBkp'ΐ*] </ů̙(pEKZO) ! S8 *\6 -'C%ВZoQڊ58C HSkJJwjVJ׫mw!mm tlA{U 89'}7رpW} "EDWw9\ @{6!sJ%!;D%@IڼeQp_1exg9_iWl3[wa>߿xEJ6`N6 }iK$Ri&%.U@u",L j%o*Q_0B:@*q)8 aݵI*TUARwnRҚࠆ5/8%ƕ0i+9{'l &މ6L`3P)9Rw7`2VQvH`ؓ<=R@Z@FQ.G:պ ϜV`Xh  ?ASvc/l_g&pH' H {ӏb Dyb#Rz X<%6 Iv DY,]l9T@z3cvP@J|DXuG\@`[rAM𬩬wtjN0ab=mۥ c`_=wmyvI BٔVQ.i[j}kM7 y & PP+Z )4`/a:\w\PxHR(NAJՖ R%jXJ;'R!@t'̋ h.)`DZi>v߫Er1=ئD_OAFc(C:wwO(53 P@ NpV/wPxGi0N@R"&j %ȷz9Iƫ d//#gliR1CNm^v߫m2;6Ax@W_8{;l p*H Jb 5(Ѝ3H!:M@( Ĝ|G"oNׂ"PJ X 48%P7:oˠ~.^UGҤA^6L0AJ4*<h*Ѐ dU;D bS%(PwHK8nF, ň6:-Fw~#iĩEe`㦔1o]\pQvCAT J<"bhU!f]]~͙j ^v߿L-t) >;`Zܑ@RҐƛuig 4(t.#NNbAe_& (~kFC͔6=JT1[exbrxJ_zI[J6VZ HLj&)씃 i*ZC KxڼB tbv%6 ||ͬ(/6<#;HpHgeي; ?c*ܫǘU w?2oX)n5OHV::OggS`2L狟d2)MlJt[ys%[thxLoy~96 yƮ4@  {80ezviF$@M(໢?50)1K4c6TdhRc7fO%gpZYUB"%}>v߫Mrqg)MmJ4%5pTv+s@g8!?:(@+p]]P8QN#i&f@(d.W8!/-\i0xwCu=^;08(<&I.3"M >lr=EJ3y6x@/38 `hRyLX$رsޯ8״Pf }4ĠD5P#\ Z5[(ωI (F6Pp(<2ZЂFt_On&^I=T)0NK`l*͊s_b@B@=E]jB=ڧ=L $`y0%:|E zw5{B)1 (Ն 32#VR=P%̛ӄEEl72b٦>vׇҺ{.6†xQ5A;`=N`c[R=/G`&[pP޶𢟮޸&uT"AqB9XR&w*6GL}G2ЀUa/ؼ/t~m$bMv*`^6߫IVZ "cN/hH,hr[# L@zL\<P5(x_N(=E][S6Hjd:UofpQ*T:˃ LuGQ$nkScjۚ -]?P͐$q PB^v߫IVJDJ6% ت` 48@?`;19* l٢[ h^tU]*p"5H} x{Tw*:gr{$xyw)aC>iw,FIȩ=ͮI2u ַ.F}Gxo`tQ@?RW%L%J(urD":kKςyG*r=PEz$8!,h(xCV?ThXfW`;>2OW(Ƴjvr5-ǢD]S >v߫e`wjSP/)7w5? XX@v߫eqq|FԦ['Y~ r1G|q_cDRP‘th/((QuO#+O%.)e1JoTT~\ьI)뒐Y>ʸ k e^5t.M o d՞ؘܕ]VR`w!mm6.&x&akv`HomD+>(JbB~$B@Gb h C8*Y_mJSDgS~9/fhсR&&t Nޮ:lFreN_׫ȄvlyG7 $8t7}f GxGs"& ~ZψK(/6?7I%E Q->{b r AfmSGb g3`+os|*bf +iC:gkkgzR2݃fS]! <#>t7 )`[j- Ј˱V6+uu\/UP\gx7-W 4TP1RD38b)8Ce'V|jB4B PR^^jAL?:”;:lv߫Sq1;^lj{TS܂j줔sf3;tA`G-,\%R@WKb,@_.- w% F8{lrG-]fkU2`R"^K'{VTb'@>߿L`{!mlNlx6 n/||V<Uu;A((<gQq'\8gчG3?[yJ"P18( ~Oєkj o0C]ՅT=>߿lr1}Ԧ h/h*vX 4cq)YA _E]KPY t((vH` *$pGa0ptaT䁪ˠ."{ B%zh>#SlBTrFzڻ@Flwu>@9t?>vLpwh<`U0=XpSt4J1#.V)cݡ𾼢VcIȪL- @@J:uq ]H}ס ;~㮮^x; /yߔ PћVM^߫I.f"لX<_,/23yL/ALUz-Dq-(i+TIuB `MR6qww^`@:\zfa RFRU!,C\Tп)pA¢JDBQ Kt^vEr1gT)q0Y@؁xS4oEp0VN8 ӹB(AR',O,D@(T {JR%=aK(({/t%p&LhJR5I=#&4YL^vdr1(R"~ `]{@LDQpE? (Ux]&")g+tT$\1X"ER |tĿπ`+0y<54?}Pg}oW28 z0R^߫Mp1;6x;:V9_x{O{E \ .84}D@)dR(4f"4 ( ;נ6@>kK%T9f+ܚb) q")8yyolG񍠕>>v߿Lrg)ml t`uӕQAbRڵqG`C^"&UL$*Y]^6׫߫(BٴfJ+8@? ;Esn07fV5)@N @sQ@ dBirEjY?+lg%(p( "/㠘!;[{Ђ{[#~$P6F8];Ar.DWF}teҜQqX@>v߿b B)Ч.+Z97Db/bωQ0.G˿(W m 8~R@p2u0DADUUTt`[v ϬS΋ F.G$PKڠ]L")݇B[j! :P>v߿lq1HikS6PT>/v@D{flEu MC Zږ"BP G}0&7HE( u, V)sG*T2/Гܑs].S=&.w Lȧ"?;"@>v߫A& <.)` L!wb/q 볣 *ZPVA7WP@]C@Qy>{hjT!uW[x&UIENubSƛGNJhb6`6 l>߿Lp1{6X~@WEG{6pP4_ P "^JUKN5aPKu\Ztfл-\ d8sJ C5`]K;qt<0JeT;Ks_QbI>v߫bGMn r^T:CKe ytj;(9"ףe{H"ĻjY1pM\mR.oЗ @`TUoՃS ݛej15q QQ&(u H ˁa]֗b(Bii؎+JPiSg0+qi)4V#-  ʓugB#P5v(PpTpםVs81[vKC;l%{ PG3vS0$0Ye-瑁 >(Bz)Ѡ'T{i( jtPS[!/DвO®H^-Mj(O#Bx |Cޟ\S)G"% F+,6߫M`w^ؔtMx?-QIa VQxE<; JpQ*杩H(FМ(lx 5u'p->FzpĴΫl=!, qc}&7yrʗ(C.Rv̂#>S`[t D~|( taYOQmO`oO9W9%x<:)ۼ8$URu8TN1F15V<s U*3Kv31[۾ʻFk$v߫m`AfSHK <{`taRӖ^=D@L@)S (4ȩAwH`j"ZXxCS}Q OfV*I2!Ml~Z:]ݴ-)M;j*w%:0Qv߫H B)4,`8sF Hp\_R P]ZqI:V" 0O/N O[W8/++8R z+xg\L\~=LFb8`7eheXJISv)FT5{C>v߫ep;6ACv GpD{v ;`ҡENJ$(qBtoT`" 9hj'QQ k<5U4loe¸ i7S^N \&z_ix gqB>߫S`Qk4-:8`CDf䆘@/oj &x-<4ɉ D9A( <3P]4D !P[b^ ^K@-9to9d =.喢\>v߫QfSb =Y*N;97$ ;H@KQ_QZo-S/8_<.@ %OxVkIQb/:x5IŽ5]ޮH;i2fwR.YLʩ$3[Xv߫S{^gsOj<?!64zM0Z = BtQbCׅ̅`fi931:>6|lRyev߿Rrg!)` -x vܦPкcApJS@((NAeO@ql͚o`ռ'\S.w;J#):o78OTUlKyvRqEH6%{iޚ\Tnax,(@<VF8Tn\\w%3hE԰#صCK@+H\ԃo { ĭ"d5dKr)fID]f"bIu) и{rz8q)wtZ_-{1ЁOggSk`2 pyv+))9Ϧ;G`o[pF`D#AOz6 L4ڔ~{ TP*Up,Lft!FZs5R$,.I&KŻ*]P!m6&_m7C7Mz߿R w!hmg64@t8!nj#$_ xnk]:teq$pyKZiT@dV9{( (Eݓc ,/kYRZՈ'nw P4߫A BgSH3x)u%\a(-.ΉBJy8DU5ƭv]@!+x-KvL~[$6[CBHZ@k Zhhp9N{mw%C* p6:K]ɀcMv䢸GҟMg৒  $ )`ݤ(X+0t؟PFG0(Z`K%v 3练?VC9/rY=#`}呵1bmYu}څǤYa>߿d w!=۔dxk~i;1No-9| p?-,E(WTku0:N#*.q (I+" =ߪ=o {Ӂ`Tۦnc/hP.Nlw2=hѡv׫eq=mJS ,x/%g\'f7QĠ xR^sA^/І Bg(HPQ\L\Ե*߱ndujasJ#$iV*m\V{e[p3-æWIOd&vO`dv Bz -?x/|H{5ѯ\2Vh Ÿ!{8TOf\^Tsi: o8RTfN,ڲ 'k]Zե6>b)C=F*/z:>lxGҋMAZпJ~*In[a%%/ss5  ˝zKP4M`̜XLmU 4c‡UWATk(u$ dnBH_.%;XJdf6$9"iz]kRvR{^gS"xৠ{`s"sQ\W: RGjd4*5t#zUC n % <=@VYtǯ_'+!2zcz;id~KI.MZv߫m{^inN*C?4` #bF|zSNo \[PkUp-w5 pp3 }_\ُFU"M UlFX'<ɍ!?TܠvҨa z:tGW_&Ez߫I(BoSuToo| P5F3{Y3@H(ǡ@a*z \B"K(HmqG}pDQ!_;srm᛹(!(bA?&DD]JЁz߫m${!}۔ ;op/j^ucs0G@[i(75 R ĵT1+ S+bʒ"B^S Kn!AC(!0BS'vX0h^,_:t塣m۞$ Xyv߫mq;Tm.8$ox`Y$_Rڤ x%/ ]SD#;'|DbqQ,B\V(`@yZ8oghLf3f+Nԏ4I4-w,Pz(x߿R$w!Zh<KS`tHR6<]#^ J@gL(.`Z\ h#FL0Ug<5]Jc5 A0Ryd{]e_ϨH@-\3 ޔ$2B6b+f!]P]߿lq;dm vS<h~ v`-xXn>>L'DhOP-'@ HwBE uQ7kTH[ @8 @taoRrW/HI)P. @%AYBAX ?m^ uHo}Z38z=H 8>?Ġ5vҬv$|Sv䢹M p+XN'ʭ}i]MlKm8&%xڤpn:!p* R]9u%*B~%ۡ-ŁB@Kxdo\՞&F}iw$pR}v4n G7$>v߿H"Mlx ާIvR B)͖ (*x?pxqXP [ڟ]՘ P-@XJA} ^MH@K9 IT!_,/W8 DxA^BhAT)U_>z96U=W:.>L(B)h=T8Z@4@d %>O/ԸYdfԁ47I)\ŨꉴY-P0dض) "`y0ŬuɷŊ+n,uj-7IV@vR3~m6465O ]-[Y,DEd>|vGQ@<fсƩZ12!U621>lID6qk j"v0y#D=Ȝ@@ DUQYB]R$۱މ盟lwlJू}KtH:%MR]R9ArGck֡(șMWEr`|( EN>C n6[Yw|o5nIE-q TntO:( OggS`2oƺòzL$ $[ݔXB97n)w "(75vjIg4:!U֙(8E;.Xz$Δ`cy_-A?6;TgP>BδelJotEЖEG߫Mq+R)f gདྷ f`h{ 1MAθX N4Wup\ kZHԔi{3p-Qf]G9e]|&Ge{!87</+_SC h:7px>UCw߿LtQj+juE-@ 2Gg6?Ӭb?I.R٥9BDXnZ^-iEsim$: _R̦f/t G)RhOgQv}qۄ\4^zY~+-dcR4Mh>v߫e(Bz 6xتҺ6`;/fE 軡U@a" U1zGpO͒F(N ؃, ^O&Ư.T4O~yd߿w!ڔX:e <^ g^ M+M;P"Pw[-@ b9WoQuZ76Zv0Pb$?&#($1V@qv{-E hv@u>Χ 6׋S Q$k`U נ|(l6 >Q%F9 T\(݊ r&мS^A->@Q:b{4ܿngK)J5UO Wj[ @UueXIu﹡͈(5@>v߫A B !w x7H.{2gVϓٝUf%[(J)D(pgKDs8xW@Q"}WScм/\.1 `i772@aue-^5Zg"%;c=6X1,]:>v߿HVJ}EHKgxPV pXs@#/=|Dݑ5HP e #}R9JE+ӼD2^(ndcyROwE/!SgJ%X+TMeW3+׆ʝ(ZR@>v߿䢸Mթe^Z.<3@ ΉB* O[lzCP= A7=C\JKh H >ƞ"::@DBJUTpSB. =iҨzCI Mw\b >v׫߫d"%9`fo']xG ;`bYvƚdʂ?p(7b 1W@ohb! 3@*+L3 0 .pGto\!&zyRz]X>v߿Rr=lJDJt8}O'@R@NN=8n .ަ"P PxPk%QXD ⽹t6T.rI 1?cl%ezs}Ӈ?Mk//R$P:6FAdz|0u>߫A BgS%@\rh]P+fM@Lu)QqW t.KXbt ʿ4x|}?ߵkF0T 1=]iKxOM@%6ܸLr"x vl yMMT7.ޝWp=PgiSܔh9H?S<ӑ/pPi 4Q`h$BCY@\.4PWPRj0]:WJxoM]v߫AɷMA !{F-8d@.@K0IL$lT6|\ul@d't_U IGۇHQޑ m_M% n Xe_ؓ ١fnF,EvVԇ-'"Ez߫SGM.&O4;pc%bn\X=Ns[YxFWߊyi"> 9ڈ C .M<ߤVAg C gd> ^W\Rj7 Wr,:y6l xEH6 !@̝Um# X82#"Z@UڵG4 "Vdo^.BlF ]`)]k!9=/%d~s:Ү&~d"PN1*9Gn `9W.Ke΋aTrf߿l ͇ӏMxc%-nY4>KPA@9֚Խ)@ p k)\z;@> ྜ9X*bjltE?ОֹeL[>4bHDK-,$X>߫er!~Fg\]*T.: `&@U#,QltT8Akt@yPw+6qfK?W E@}.xڀ*J3+M4{yr!9F4P:P hUt[ngLi@6Mu(Rzhq(- `EApPZуT%LѰިCcksan8&S)H =XU3ԵTZPq;]@s}~(/@L /sH^v߫Lp1{)Hg>j@5&cjn&hH \@EFq" U*(dӍ] UEi5 D(PΈ3``!`qwe \_1N4;F \2ο72Iı|^߫Mrg)h< n_nOpgx`f̍,¹zwpO܀"PBzg:PN}PZJ|7fgO>\*6dqg)RIv*ڃ[Ux⍉W=,W8N^S5;~O@U8MNfk2bW7NP8:AG_+Zp\:ULYf-bI%c8/1h5/J6׳er1|"lJ4 8< v vHNCE}m;( .(4ڂ v*A{F* W]kCws 04$f\fPӾ>v߫AAh<}?vFwus*3}P^x*M*J]Lfע^ZCjI E`~ λ/%C)b(oMi YUp9$XYLEh9&Ժ@cTl6L{!hf*) `;i1 ]F>W#A)'T~Cen:?R @y 5L!DHDq),O1%NwObS4d58)B׻߫DHMС{5obCLO`c0t;}*8np?vL (( jD%Ci9Hn 9a+ lUI iJ~4ݰ=hwcL&sAZ{'14$Z/2&HEġ 0!yv߿L=EziƆ;\.HlG,9xw۳lA(\q4}l}=_ @>,Q<m>l (k' JSA`T;(P;$a(PtcX&Ĺ BK/Ly{R&$N{:P^ Oʽpˋeע|$BC6y߿d3Ta!nx+_l& ~lG)tTŕu3#G{JO`OČRh9ҼCP -7(uFlk|Fe֥˸@ ,}Ѵߺ޺0؃-~i yve2-Rͦٺp9HN7~f9{9B߄*h]).T@PD0඙g\s9BSJ F|-{th.qB}1a7Ɛ%psɰx;8mʚ%*xzLR"Mݤx0[x  &1%X#;xn*AXpm3PG(XD6;'h OPxai1UKzd܄\?ѿ͢$ $Qz+pSuY!&!%yvL+t)XZxo$H>xLG|̝pۓA<W('%((Ӝ#[;i%W (!S|.7TR4v@E[e.ڈDTz@.sfʳ#5U{@u'K uMNl~ yvME(jmu +px _֧fm;РW?)iʩzԠ^ԉ,+z0U|$<ՊKRh -vRRrnBJC kS߾&-7߿RE^)9x^`W`n(sYz,x[@k'`I~Wp( c78{cPP?.g C68VfWw[tSTߧuƣn$MP\M,Ameu'(;>"yMM4!- b=6l{2FӲ>나,MTd Ru'ѥ<"T4"\]Ef:|"FV- AZ:=%t{*jqwb &jJ4-߿l${!48}P!sF?7HNowbNAACz%zi*iSR@~}+`iS`c9+wȑm/L_*ӭL4Ny׫L$3/T6Z2x@ /xgNWK^n%I %WD Mp sZ6^-Iq$ADImxaC!:RRe!0q;&%.:X`񈸶=;I8Zqiכ߫R=)ٴX OpX qLhvT}=mEO]@IOqp)r:Rfx(RR`,P}? ٥Xt>S@g\w %C QնO&Mjȗ'Ÿ"[}i*yכ߫da{!ٔt:ox>KX`. @KIFW'_߰58Ft?Ev-HW- N|xݟ D KH WFSay[vN:1s*8:t (J!wsʗ[ Ety߿L0=jSzT )Ar */Ehbl{_U$"XLO{e2S~zz2^=K;= r2Ӹ̪f2F P2jijZbf7IQC4kE(yRܢHo&wH0`o48YHA=RDԻ2mL Cə˯W /mLCx yi`Df>ID%:^r`XX'VɡɇBUd< %zaOggS`2bxºyl-BXxoH7` )Q W۽WE@=ס_' tVг mȫ\'#h70GKD+٬BncȰ@72ހiI)YdEkylPCզ` L2y0qd_ x4pߡToUAf"/@jWa1CF20Qht(Ox QC_C lM#TUBO)j/D, O*R٦ uL(yvlr1=)l-`*T$-W;0N-om&^?"OEDxSn'PUhhE gB*dx3x9i2gY3mܽ<`M0G ..>Oyw$t-m&Y=0CyvכeSEؔhP "F:Zh`Qբ$dpTwo] }xmqwNf06㮯MC 3H4HhKpS-Bh۵ڙZuaW䂂ŖTnhv߿A"$-65v XR)C=X#@_vXsQ@m?޻[Z`?4T5MЈp`H[K\(@B{ueT<Ǡ)A:̶T@,SKݙ19@`I@@ͤ[v׻d%{)Z'x7߃u읧@ F)ulEgèJqBGThD A騈jDw<{vPT/mq w) .:E6_hH(7XUpE>`p0@Rfr7 v߫A (jtM<v@6 s˃%_Cz@eY-Kw0rs_q= 0O_XjL\2AU`ʷX\Vͣ_(S0ʰUSzBh@k\>v߿R "$Ud+%p/`a`c"n<,}S^:"by*Kpw@ N P(X8Tօ Pw_[@*D}*㾸ߑ h*P ZeJ(ɬWeJT0>v߫S w!ڔXF3x$J@☤f(LtD㨨 /QT!Щj#eTJ|A@€sC}b4(ٗvȡN' >=߃KmavLqQ|"%iZ; Np<*`a8g yinسܯEdYS@~J]S7jl@)T8Y, 4"UƨVφ<ãHװ:Ul fϣm3$+.gz^^=Sy%wm5: >v߿Lq|m H&^ x{ 2h^"k%gBƛ41((^Q8tC.ץU]j8X_UIGJ$@JTbHʭ.Gv߫SxGүMZx}&xl,$mw'.  Emޔ ܟPt%".D6V'{mSQ".*0n찹e &~;]7_$QpM5mwev>߿AA x $ QJK#P$*H +@ BI'ܶ^+ zFET a C7z(7skg R3q^ ̅$˺8vEƶ3ׯJ|4h>߫A Bf!z{9UE8'(g5k @7k( @!R*OR"K4m2+אhJ)zCa0i q)!eqPV K6N[ :}%1 >߫S "$ek @WEG\v_ ?X_HP JqWbJf{1hK*EWb݉mgʫ?Y㭚X L,z(JR9` Jܸa_ΐu3e*U+p$"-ڡj>߫AIA|ऊh<@ev$ EQbzHV)𛇂$q""*mbco (0< 1kkw yMmkU҂7UaA5<ƍ2]2+v9g˫rh"b>vכ߫R wTl&`% v<pQ@Kɰ,#Nx@IPՅBP"Pˍ+PiG]g%"U2@Dn שiO]0ϡ=+=+h`.؂ (]+oř\gf >߫S >P) `#xlUt JD@0v( = hp>PY:5ZV!ON.-Ƕ ~3DԜ~ބ)e5 umC/d(3AE9.3LzLL>v߫A BR)I*-[ ph~讆br3uqZvu׈) 8%e9!:MQJ\ '] u{ϡ*^V=dZGInWD[Ҕ[i`R>v߫A A$k<g%v߫Rp=EJ26%IPQ5v+ll DߒK. b:zUQQa."uKe䲪fv ] @^--H,*U*x4 lʲF'ڔX.(&OggS`2 RhAõ>vlq R)6UA߫A%UMcS ZjG@ygW?ڝfz IR@0 =\=NJ#P)C@w(0dF<=}RW<><L& lmC{ϙ{R3Xb;B $>߿Rq;Tm iCPx?*@ 3 h|ZxÞ{: Ϩ (fZRAqJJP (#Qɭ+M,¡qCY@K\n - O֙vm "%9KDKv߫SQ$kSdPY8{ܝ<Hl* @#! R&ϒt"E QÐ %*&;d*7>𣤫]QIW[iTj0Kyމ׋e$A$gSIg$Xgv` O J%N(Zӣ{ZV.Pxxo͖h/Jەkb(qC:PtVRlг\@ɺ"pEYzD.!'P+RiBrb ,y֗d EH6gpv[hFw"w--: f %O׬MZ0_t$Һoĸ I,'} B i ZԉË#hLtZ!Qw*if dpUNryvAi(RR)l?mni7Ryvכ߫PEWݔ,Hl7v:=8b'ѳ7|u 3!648[PAVCjҮAէ7Y@XTzg'6(dnM0KlRsH2^f}xTEЦݩjצ"G0*-2) "<`yv׋)VB~ҳMAdm< t%<` 0 pwș7! 8  *j)lT!hrvZ? Jx/w)lZ"3ӭ*hy+h;\YN\M=lR/FzJ FVّM1 y׋߫Mp"4?l fV~$6 [xdoڛcbdG @A\ĄB/@ CZD(`^T@דuBۍŊwY]&/Qn7UP]~ L-o;*{w~]!v硌;dH8h]a#%4yv(^iѹ!"~A['->5ֺ9~1E^w( Elʜ t YJ4$Zqޘ=0=8pLJ yכda:";l TG: `G%WyF+90 yFgXWxv:)y߫de{^z)ְ t v,s([SB^թ38Bͣb٫ kHH둤hV+@.Y jėji*ԴQ3 p ){CLG7b.B.䎞vG2}Qde{(Bɛ$xt^  `EqTܩ? 5fle;*>()BWJBS=uGjMmܸҖtHœ7{Nͥ,a.y׫߿d[gSXd-~?5aJd')!5#4s[BxU8R!FRЅTCf:69|h!>no],3]ϛAVӕxF,IS|n-IdRlR;)]mZ2 ^x,$[xZ;TKD@@:Al|`VP@c`]$_G@d{'B 7]nkл1tQ^/RИ8x\x%B/yl-Rڔh5N[`"xGZu NX.( yXET4P'XNpbr<jΖ%h ,Z)n„ĝ>$*jYX%&vNa8ll$7lRR5k MU}7$$$gCyvl6% p?t`5㹮3˲ا='WP]vp*Ƥ{ p͒)m9!*$s[RTib`{1A-?JW9<pwV 1^$Q3*U y߿lR|ljr8PmW q *H<2sY_칶 5/{: y@Kmp`=4',Rr@P@A RP?=38^KA Ȏa#2QEȤk;Y˿*JN`(ylr܃1OB}O0(@/+Y|,?S;Pq{xADP ^$+ҔWȾFWuZ"wyI4RzJaŠZ yX"iiݮ>l{i[y׋߫).{^&\ߐí@MPE7G{rr4&Px,x2T b^dpd"ަ,l 2 tpPM2*e*N0g/s|9{N'RP`y׫߿lPқMxස0|` xKy۞#5yDm۞8L@ PB!QBw88%]q4X :\b6hnd"zr~ߦr0.ٴC5)]@y׫߿LS"gs` ? '\٢iGs`I"\iȾO KW(q(? @YzG"b*44sFb|WWK"ꖬW[ȎAK&}y׋M"sJveZKyh1~"zr1 ³WspD ޓޫCCUAch_G;C~ZܥD 4(pbPJcIrNwKa:񧳱i:aVL)\otJWtB(Syv׋) RB,dj6ltlD% {uNқzpIJ~"!!xҩeP[v~E!Z \.IZc)D⼃-:D"˹7j3 ~G'.8%>]\bP&Tڶ@yv߫mq=lZC| Tma2l@V ,?dѺ(INP<(x(ADZSqHughT` it}ݱCD7T? Tc`,X)h@V| ":H^*pEa)L卉#׫R"QgSBdp]Px#21f,Ş 1_%8S(\$ֽ(O܏6$C)-ǭG0jtLPb 431s!O`+"n 3݇\ڜl8.SYm$zGM ,?-"(9Ojd.;v @^˝mti-L!nVLP?X5_RSOUw=SQfv4$Zlt䖒RUhgb9nʦKމ统lr!ޣI֦;1HNzO+I{o #(((^ Hu:am SRQnXq~ c6"4^$P`8J4dեP%z;ud}0oqHz؟, `vR$w8tk)Ptp;aq} Ԙp^PPP @Տ;[1[~PE9"EAę| NGe dxU wW%!x/\آbYkV]ErЌ4ܴ OggS`2 TV߿l w8I)Љ:*YK5/ $#y &;S,Y^Kd7ZԉS\P1E5\U7CEE`H5 D/ʣBLeRdr9A CHjRX:h'v߫m@"$e <+ 64p@_(`N5}ə*p >Z(PmѨgM U ]*K5DaY0(BvJ"&FMnu5BUY]o B(1B@C>߫S (>p Ыpu : J YHonhyEojbrEp4sqW,7P2)*uST[F3Y0v]MܙJ:NLÃզ5千RwO> ,7QNC>v߿l "$Y\ V~)@@/8&<(R*+#j YēD3W{! reB?ڥ0s 6([KPJԵU@W0)!5/Z?Xlr`<&>v߿lq BE4 : AN @Y3W =fB@D@;jm@nQ ӆ_}3Dl\(;l3 h *4~ +*؂:d@m-lyT؄ 2TmMW>߿l BF./g?(ahXQس4{]PޏH(;T:BvoxY@0gڌ EPUG<;*n8svF$`u^$II+Aˆ|Kgh!Zv߫m w8 *b; ojߎK/ *5ũ@)O`!t[JFE.F@lޕ 6[/njC()Z3eZdE!#vu)PEDL\Pq2] ܕ*`Nkc +Ʉ42/,R8T#:HHIhJct)^(2m@'Ӭ'wC8Rm{ yR@K4C=~H(2  1T5&N/n ze(5_[U;f\Ү;xE) ׋߫M"~FӏM&սx2%4ve#8΍*h\c+y x$TB*hZ"Ҋ5E%b>/)z!(QE۠x P"*)Ø;DI@+clBTvſquvY27!߿d "$6JPUp]I@_%@fMHذjQtD xrAF5P H=MA[z H9$ _Q0rBelw~^f'#rPtŭ%Tc5haHylw^)¼:WHn]Cs\/g.YCt ((dP@AyRWG .fZRb;D K Nu c,fK˨bݮ:m>9nZLm=N@?$yvlq!ޣϦ X<LVnؑ q IGDqL 7phWT@P`n kIAݻi$ŗ|]˄É IV?0Sfف(We\/bfzbVA0gDWZ z+% [Al K;pcxwC9 PNڀ_@l8%sY s̰;: u<6!pR$SAy~? T.a+5TZSgEûR^2e)5 , MÎ]߫I (R)с5`PJ~sg4e y@+FI<6 ".@P R۾*Ф:2ac1??q̱x䗿 "+9umP4Y@z[v߿lq;dlJ~;@[5(yDu;<z pKq=(@E/{y PꭉV|: ã&E88t@~ɱ6 .ڼ T.'jv8J;N,/U`vSq!HIŦ@dv߫R "%U54ttKC cv#EwB7MրT=o @ D}˸hnu4)`4Y0KĢ:R9U PxblraP]̥JL\.g,&>v߫m w!  nv߫AJ(BjllFX.ƽ~@ʎ;!%,5]6 &eA"9bA8^qV\XW9h!0(`:GZ߃?)~&&PozEU$\*Ϯ 6(A|lS xj`xFv+,@迮/$q`=$Pxu JݭT'`vmw!ܠ %p@U` Y,"`d!9Vk4 v"< 7Rl pPCz=ՂTM*GT^~!L&( @i{E@.!ZrTV D5" Þ_/-c4O#<[].(yVOI 7IB1v߫Lq;dm 9G< L abn W<1 @9PL"yq MQ:L5 (@9.u\A:9]]K#9`HQTHk~IA\9^TۂF!:? WiwDG/y6L${!x7 -;/${-@A @%w}Z GsPip jkET=?`gTCk;UfᘱQ*_Wl [:BI<&|vs y糿L}H&C7 \n [xC XN֚$(n.a˩@S܆ 3Hh((/ $ֵ+=I6[¤sH7VS ^([%JE'z%]uR9LZJמɐ~y6כR$=h>lJFPUvIJ@]:D"F)_b$? &9X(#π^B"PA@ ;t`( /@Th,sYgE; }а:j9\ßWbO NYo&#&.zvLyv߫I(tlJ;$~v>(P7yMxIp=L*"sJ4_ \dYZh*C6 j`LBj yZCj2< 9-Gՠ~^ܝWZYLpuي.4yv߫L {!Iܚ;PUpQAbЅ QL.Ț8 JDQb{] 7Z5q J!QL%PKFP^zÆ󮽪Oޛp#E@PR Z8<γ W Mi Hy׳e {(}W6Ao p sQhI#~@MEr/j {BjWRu'wpuJq N9KAOggSK`2 LE ilpBڔ `@gp vpfǻ(PicFP/(:hS<אַ\}'Y :tF a'V>ɐ̨j\K'3ɏY9Ab1.ݳ-ca,r)>^EEk4.fy߿l2H1`g 6 [ UE>7p@:q~M)*V1zIkS'(y$hW{u:ڈ!9rK].o c_.wNJ{Fyvm$9Ii-k$xS8- po\S߻o7?Sqz4~ 0 } pTXUHqB=~/WEsNrdXk?5nc+O2dK-E%'0u|׾-L>AHcIŦ )< XDaG8@!5vK0@(N(x1*WKK 7cN?Z%$$ 4ަ1Ogr '+5Vpv kO:Ob͔~V}XS>߿Lq(p))p}&#VX>ƊsnxlS?mAP# NS-J(r= P(DEt0irZ56Op_"E=0(NQU:<ٟR]bns&ݑU}Na#>v߿Rqg!ڄ)Vp@VWA_kle]8@rܩ6oNPoMxPb*PQe{t(4%#a0BSz0zèGQ&{`X[Ѫ+>"%Y% lU{Tv=m% E5ڒ_PtW@tBۈ @&[ծQ,"2JoUB[7gφmT=~8:W&T9El+ >߫S Nr6%H0p 8Q@TG3T > gE+8Pũ ((` :z7>7nCyfe<yR>mJZqArֿqM58izWy4CO(t>߫A ߃I&"PQ h8^xfFb`7pP_8pEapj2t(x J(Gz֡T9I^8𡧞qPdPp#:GL*P$vSoŒZSs 7PV>Lq!⋥fI*-2wQ p]νfDx> n !="6pg"[ S R/P#Ei S;=S,l8c^PaAS2L[̗P Il)9$mD=@I&3xjϕ8I@ $ r~ƿV(x4RPyU. ;u%f{BNi(e%!ŻG*#BPuںL)v[,$2@Q/!~mmy8q}B o#LA 6y߿d {^\4 .v R+;i:uD@*.i:'% /* _):t{[gwו4LNdk*:YvUAJ(VH#EdXվlMJf9~=yL-lSe2x+ִ @yM4ߚ?|@P>WrH*R8O$sw%BD(N#DZ7\mF ]]D:TäBή%ڌ)JɤY)as8~O":4Hy߿d=)5 M{1DfnfP݂Pm J@"(G(L35`6-a) B RKLlkP -P. RI꒳Kȣ=%Rd`:WM z ٣8>=J*7btmtyv+!scS-w?-,:7lfZ4z߿Lr;m ֑'x*l;lO`]<^vU ]{ @yBEZ.urA) X5ip9`\J֝fKyL${(k$l.9\gs -L`D?N=p1.?bIA,r/UQӊR;p&Q 'wj!J+yMD "oD ma ]5wQܐؤzG58)Q.W^SHԣ\(Y HuPbz ThhN7 E#'S^s)Jk`jhIjHJoǫ^c)pN4 D_׵h(r;yϥ)sw^dQm&HpsaG.r& Ow4pl$*T>T<:6 Hި Màpcĉ*'ǃpTDa?UʯxMZW}[m;.K| d yR{^)ݴ:wUC6[,4>L]^r6=*@2-P^vPQ6v 1)疽aVTg(ѻbecBBSԔ^Q_XOR*pUH/&g!-M yRrDJ6%'u 3UE!HMy:PvPGp'WwD%ȿ<4ӻ&Ҏ6aٟPm4Q,|PLLt[YWNU:3Sƣk ,j?&y狟Li+"$i;Sx` $?[F h/)0N% uM=Ej) u zR];+`@r6$0Jw ^\J( ^4f7M IV6 <,8:f\{d 34&p B; ?7IULߵ $!iȅLz<|$(G̊{=g?.fzL Ѹf&Uc y_y}MxkL 9O,Q$~d1:H Km_(FUP9(u98uߜ2x=?S Kci=BUaa $.>>C_BI)_Aqr {Vi䴂PCʔn*Sۭ {`:m&y߿lq!"_YP=s% _tQ *Y=P\%*P/`fnբJHҋSȚ@!,GR1=2xj Z7\Lkp@cd*e ٦+~2ðgޮv y׋߫mDH*M"  oW2؀*(M.LR*&D-Wwf\4A-q4[:E9 " ØuO9e]\iкPMImdCTuP]3(ngNX"y߿d 3d+8T.%g08p{3#ǜ pս}ԏ?*I,G eh]U ^@p{+K\~@Gt3=* xO MyvM)}t[% x>xL%E;gA6S,NEP%.OJu+_PWpB'*A7ņSqpXIxFR̒jE=H"1OSM[љȩ )W6Ύyv׋d@U sJ}1ם>iA((( $d= |?!>V'QY03ԫ eM~@C^%U MCד߫l"|FMaw!u Q8 `'@r( -!4w Pnp஄P泥RTAD9V]A!_.[[{9D]klxF"N#V'ZH=h-!,Frrrd6S MiI:<@E {: p<ljjr:Iq}DRET@hR*{ڈ\ =~ [/a8pޚ>EBI[R5-j$g*сDU߿2"8I)Ѱnx xv K8ZS%ʗ<@ B!DzT(Q"Mek܇\?-/Gܥ[ >LWHͯ=;> | HqO@btFGm"T S>pat- pz: Uxd}i9] b ݬQ|lGŖ&\)֖!&=yv׫߫M 3d05x]Aj-b8r>^ p_P*#i^ OIrfPu0t@io~1WPşP?7ɼT!Ea*+5N>Z5՚m 3y׳߫M#~DJ69A xI-[0V<"vBsaǙI0 @ C_AB+"9{P\䑷ۦ6v~(90[w;P_qR@JB/0(ߤBt}]X` x5aRS/2`O2 H"hX v!Q7#[B qf߬7T ;Syvכ&c-BnJ0%  fs&@|-mcL@hC0E .j)BSdZ:{oW*h-bI*%(Rʻks]*pnu?IeHOM۔5yR36Z]yb%w(Bfn;76`=Ϲ 0&τGxe)c(*8*RHzb\ … 5!]pp!7q"3<@ 7鵆Wd㱟b! R6r9"eM\M%Y yRRlc6̧E7Џc B20: @L#ZpD x?I*(%J Ϗe|֫wp@rI|HLT R#mMxgs 4QJIGz'ԟG@+ y竿3g!كHMssaTrІlyׄgZl--(4[-k@^`5G$UJ$5^j :'KuR!l!aTQoa;.w5?}y߿d#CQH^<x-|M` V#`-)W-k ׂP8>(uR=&}e/в~9@NrUʏKulRCCqުB |ԋu(BaK=ZR6-5JW/dYJZ\y߿L ҷMnA<5 =@wm TMpcEM:*Ru5HjqUǵi9BE `Ea|KV(XTIX{{(\Pg GW$c %@'nS/&&k"6y߿l#(M s\\Ĉ>±p;9N/h9 =(T$nF,HwOWII/J Q9 J+f*^"PՌch k$wiA'ig|H"j,hAy߿L$wMlj<[ -x, #9vL4P)eWm@QZ,Φe V"4 ray=Ryz,gMUC.Bgd)6'8𤯬YZS!]W Ox*%;˙zl {!zxj*aO`gnu~zps`t[Np 0j%L.w> m#z0(dh 9J38֍6;ڶ YG u4i߰y7fiyM|K6~}S7h; { gE`Y(  CVPP|nQa@< M85NQOYy߿l=)ƦHnxwxw7 X~$戚~F (HxNw@ (B`\3ނM$A3ԲkװuO" y׳m ⋥_jY3Jp 7l@Mw_kn/\ϔF 61R@\"Xc] "@';N({^pT" P=LuJs]s8=3N%r cDƍBY-> yl"CҏMvy6x+C[% Uahm^T-ہ%w{'#YFZ8l |OG7GG{jq/GT]T#G\1~Q=z.R}i,]=p*w԰ЃNyvL=E)2b$oୃJ6$+Q7~ɱpz@XM JQZ^wzS +(tMBH`ŻCU ]GgE,q@SUmYyf`{#6yd+Rz [x@`JІveisG|D/.ޒVx?1i@(,A wĊV&*ċZ P2Zr$Ӳ"jÅnq-3X*q)y߫m ߢHr6%h׋(Yf|fCv+#j l C Pa&R.b~ܘ;6gN. NzYX P&U\-eWOv=8'eIB-87'}OZJ3B$$"$>%{wA$,"&*{PG} ߿R$w!!nF7DvXs0O(_ K-s(*JX҄@0^(u(^j)8@D2oAý :^$g m0L)YnD Di (PSy1 3{W?mylq!"w63~a @C>pr!({aAUK#[zbԊ4J\Ad,U@$9rڠe*ފpj he;e]6:tU]8S*]˟=ӯYӀG z׫"{^ov#<@UV z40\1iS^#LC vDP8 ŖqՂ"7$:Pq _eZc܍+M@p/w2az [S_}Թsjyv4+~y߫M$ "RthlT /a17/MӌD1@+<(Zxf P>H[^ W1@F7+-L;co{ o$xU#(R*8St<&ZJǧq 3ZYTmW׷X)e{5Xy瓟+|ҟM,` LλQ]zmY~(M QkT(_R@BE=%^M\M]p!F/*ij Nuun$v$ஐ]%jdGځ>Z[Il"Tn u7o_y߫M@>Sb( 0 %:8c͍hI%1ٺzT pBđRQ" PK]*@8ŁlwRK@vD8F1 E@L!/"`ui`i eJұcYSWQu y6׋dD*X|xO 0& eF>)87_,jJQ& %htz'ifi yh)u5rbČ ^Wt#0p!D'sUC E(!ԡ 9qSV)S1|)VyL$=h>~+}.05H.@p jv$Hw,!6**e4~^U@ڸF3s)fA *)H5IVZܾ(A⡳kfH@ E?wkYzƆI%$3^1&l\9Y!%y׋߫e HצtRx$70,3&"=v0,+~#%Nk'AM5)ŲA T|udךMWe21 f22 qNuRT}P7 {9o'a"&vlLD%y׳߫M;ٔh<],  J9ng </Up%(DjSSJHjg y4RVt ڨ(C-J%ck_'m .PL/]PH0?&:ԩ u[K6y߿LnR 8xPY5]sQq|fNJDAtVܣ@?E!:6@$Q5U'7D'=2K"Zg,j[ْ643XG鈺\zM%BUܦhzCZ0y竟M=~m 0o-t5Dh%" PWS׮_uAE]0iBPk[GQ/"~}B,( 0H8}Gm_xc*(TĨ҇ht[P;u[HO%Hy߿l$w^.m H0[83J mU{zP;^ @t6E*8* Ј+)W՝ >"m_}--Pb?h{u1ЀlzZ>֊U)K6sY$ XP4OggS`2 h^߿R@M*$I,\,/wkAN@T_+@QH6bZ@PJ u%ϑ<>Xor 3oي{^NeDx <ӥ+->uݖ~$  ߫Sq!AϦD8 3U!q vK#PgxKrX=E @=EK-SeP9*K^Evg/Ȁ4A QxT(t$  Pz@"H)͔hySq]FJjkl| ߫mq(MɊ{  [2'pq^!g}G>']Pmн 6zf^W@sq Wg߀g(D˗#C汷 ]R#0RJ] J*wv`$ -yѿQM vdE|M6]8? ` pw"ǴqΡ]U' Pxqơ#@Jʕ .C5Pr޼D@Q#0RhN aNjt~0o*0oZ/PW?tq47ԎZd9݁GQΧB:>{)0TO$8-k snTws (^i8Y`(kAeeW.`c? W}vsH \uܽh,GR^c|ÖDI(Ҋc%:>lq|DJ6&~8`2@~7 ¼-6]C &GʢG耈)H뀚AsÆJ)'UkxTEVUD#t߱t5ę)*$]VeHʪZ6K%ܒ0M$߫A(Rg` J1))7 i (O/ RƊm#BK1؜c +AZynˀ iZU}(}Afx ߿L@G͇MTO>WD;xLOY)PQq^. Np XM7=o; L*}) (0UYx# ޵{y!A%?Xči bkh@߫mD~GҟM.<D%-x$xMFk4&o,^EjYDhQP@U>vw-^!etX~h#tݮ7E.%L=ĉ4>w7DDk>V,e^*}=ެԚT 8F0y6L [$gӀYD Mi(ԓuݢ8^kJh yI@+HN'xPMt!{ض )UԄI;6`E uXUT^n9^sd Ъ5{s|nur YyRyN׋R ӏMauڕO< H6Hsxx!˺MqLa lAﵻ`RR?B KzX|%/g\oLE9@dB8W--/O3@\̷K|߱:UobT(Ճ#%XWpByx D/Qr[W9E5jʱmJcGOׇۗ2>:U5ķŁ敨< y׫m"ރHIƦf<[wާ@ u ?>Ge3;&Vњ JKU( ̽wݲ`%X%Cs['̼$wNKqD /*fWlފ BޥדJKOc XylA$g4}PY؀ `&Rk^]]7[많lMByDi@.EB. <݄6m]"^ #HѯKt('%gnY)p`w0OԽ5k'鳤/ćyvL䪛dgS@Y Ǒ˩iY32hRϮP(8x>^0P[|lP,@(#bź-tPEfn 2̂+570t솸9#*I)t6x\y߿LA۔&E8$pL:[w[$$' @P0qr$:{su: -g} $ ^|-w;p*mA0jE ~7hoJhPy׳L"_r<(JWlf;w=DMҚRPEAPPJ,8ܽn HÕ/6Ķ|X+%]Iʅ>^r?G)(; ]j@](E.R=`'Sy߿L$3ljx`}Kx'P/oUGe  pI/866-%*nUUP"Vʹ)( >n;T0ͦ2qS5UMFOe\6rsDo@~ ;(Dy'3*:OggS`27±̸ĿyL@ރ`צ`<-|ޙ<Ǜ%|i f@u#Q@P d!*X P0S@Ѱ{u* LX< G-J=4s#zm?3RKO<[OOecʍqMU%yLq!s|gS0c'zhj.(< ϼ %k;%1wKhI+f5g{  TBa,R:TJ.p\$-|.U @ >Ż4M|0MWƣ>jk j5ۙ.F&3 vlD "$6-CxOG%x @y`M_]R`rW@[:t{q5u+ tc 0SU X?) `/Odߨ4[lGnxR#ĭ`YCSB̒0Ww7"Mg8iFL L BR):6W'iQ|/5wPA@i88mFP AB7DQ]=% ]J:T ? hiaim$/7LyObQhdBڔH: ߿lq+R)ѐ*ăj l[o|H<$tV-Y:@7/(@A@#O |v#n840/-? Uc*+W'2a P44yv߿LD=;Oi5' & ץfO-@OG6*fCU; BQJT!*4D\ ]._RDb^**5aC)hNIKᄆ偨&P^WȨ[_g6qK]My߫MDGleS޹x `@s3 o/[ 9;>/{܆GBQ`@y*/ JtB!AXꇘ>IL˂GA};?^ҁoQaup) qU;Ҳ|FXy߿L*T6؀5'_|Oh i#yȱhK&S(`!4+Dw'a\&RvO{}ax0UWhI\W喅5PUki 4y]EBULZnȓ2%v-B(y߿L"[eSӰ;/J[x|@aRM5i΋4"%@ 6g ^{' J$DD[n?l Z?r}& -J"{-XwSL.BYQd +*<]W4mv y߿L"~DHo6; NJr;7~{R ]8T(AO0&ZUtVPX>& Acx3GTϸJ蟪zc2.y׳߿Ls!A|٦VYLVW` $&u8J9C <r@{; _O4P}jxj{uMsio]u^\&:͟`ޱ9|u3׺\d6NA8'M!u"z׳߫3"GleSڞF ؁h"' /.qų8q2JDhk DMںADZV,00CR="p BYJ/V:2;g|J9ཥޢ(WM}K&0OggSs`2%<ɲ߿BMIm;Kv=@$ʍUk5g vK :^s]Q' DHM[yU9޴A 2 J^o(*r |"3__Uk]Bի`l}kA#{x6C) e 4 g!mA }ax{;WC 8is*=G(k^@sZ@Aj[9 $Z.Zl0/ H(:x}l%b|{S 6GFFM]dFO`lq;mBt~I;OX<(V?vQ"|A ^ϭ?@BH&@tB=,SMoH{~ |PF` )`LQB[>Wy]M\IqxT Wt ߿R Kj6L.쿓`xpuv *,p)Wxp }a E&γ< ֵx~̣"nE+Fw%@@6 -P *tQK{glǮQ#YL$|v.aF֩#5ySH6%p?'m~$sD`in/UyH[f(8Wu:>UQ(R.NCGK;;\GUݜ߻%Ko!CXy%8JQwk.\2.BޱΥDOdFlr2]Ok y߫d%[I֦3hث%/@coP]Yfj$%'RPU]\PpV'4#{{@ЬT݄8+E)5kSzj#:2{v${Č*Oco&_y<]&iהSgIv߫LDHM{ ;x@?&W$6ab.hם@KNWˡ<m66LX^>h  )Ww 6hUХ<نp8/PG_+4f2ϢȻ0pY *@AEH26=l%p3w(IhؿnKyMq:(jSh;Ul;Vt\rJ l*oC,?Ki -Wz |-\z43;$嵨+[V;e,~vdr{!=Dx-5pJOO'@(@0k ү ++%T@A;wuc"TI#}N? k4ͫ:A p՛f}eg;],Wa`((u[IDVx4߿Lrw!w]~=,$ R(u_P,~ (X*R+7,KZ~ {䤲.*HSH,Rzu 4OfvТeUAȜH9/X}ڋT4S?AAd {!=۔7  $~`P_/boԥx-ݽ oD4T] :S:Aqĕr mh@ /oߒ\7)_@T1Gw$y,oc x\()Ѳ^H؉/";i ߿l {MI,lx+R ʳX|D2KWǙG%p*RND^8%T4VJA!@7G?&Mc䤓_bOM57(K u~5\Ӻ+>Sg,x?/+ l HF)C5&WtpQ$VK`G ަ<2W>s N/2o f(D݃ҿʦ`  DvY{nК7W_9TSyW uGݴJ!xUq*A 5zq)'S@Qb@E+et"ip倖*ޤ3(7Y5L9WWQq;v%ߩ$A_u:I8#!yR@= x_ x @ v,7dK`ߊ3г .4iW$$=/?b ^h;sQolcը.W")Hp_.sp)Xo%km Ĉ|iiPyaD̽H|\PވjS*PPaٚ!i ?1)n R' 9>u!R  J;LOXN|1cj\d%YyR@=ʦDt` @b$D#ܕ9?u2( X>C9 -ƨ94DkUD Y%AyJ^9`2,}oD/ڷѝZC^ }aVZ\-gJ)>,7kTi4gOեHYPySqK6$0 7'^O;XNLoe8`0Yf(B#8H[U8w= 4AQM@I'PMW*pUӢB"Y%p Zjz!U e`-d=JDp$$Ww, iv׋RŒbh wAbSO[89y L\ @#0Ol/qDUrѮ *7h~< EyA"+B)om@ã/NE L! i0{l}^ґRCwUQHYy߫m#⋥? ) `K6mgc[1$@ZԶmg]?HܚVk@q;66`Ce )J2Z>/@b id<ӱ L#>kpA Р0U (Jڶ"M:7Ii{oK16vvE 1T;+lBzG ?*(EIgr';Rz61櫀yv+ɹEJ*Vjl<4;hwQSRv8o9pL `'(*(:R(!KSY;N` PLhai iBCA#b$!j2b^$&. 9Yݑ!pQlkгbNLy߿Ag^.lJlp dDj# D(@6E_~em:P"S*hfS<*ǒI)061ARANۆ4Dd-.ppVtf^r\LlzyRD \wgn\63 ! fy׫߿Ag^gS6dpxH8IZ 5uGC@XPPPF(.4:=# p3U]ڧR{'Ɉ@n΢KMZ l͖oe^hSi R餀~DIy߿Rq+Rd& Ҋ5we0k"`<@|c <@yvUER^2H0tUVWAKg;<"1SR1EfrUu&[p,"_3ԘM$?8%P@$T8yOi*ɲ A B)# p ۂk[ЦKM zO+7P%j@ ׂ*P (@յE+/TR }|U`|j Ů;x<2_eMԝR]ExBnЅ"m2DEi 9J z߿I(B)  )6$FrBoKx6Gd(1(F4P~oGG 7z -pKWU@(|QNIi·CEQAA 29T ބɤ*& ׋߿"3d+0j "X]8@E< j >=? s Gp]OPb}]uMhbjn@1ҪyD}վu  :E /7|kF֝8 0yR$[xۄZP=x o[1 xۛqQaYpP@_ "dA0(hǽ3Gl8@⸮H|U86l 5#k: qU p)BwlNe<)YlY8+$NOggS'`2jA¶yS 3U7$&pQv1xI-Y%E/?A m@xH(y:ɫ!X˃I'yۖDDUk4maN&{omܵj] zu* e3]XQnuyU"4?j5"*ð`CKMrHZp0Ks 3)`ģȝK޴(%* &(hPqW~e1Mv @b$edU2W=n"4zG:Ϲx;߿A gӢRPW`5b R6d/~(ktADJC JQ&X7 @4Z%a( 4}m(iXArWCɋ8*% 3 ֚Z`EQL w^z 3M<'H<YxG\1kQg g@ P3Vxhޠ@O+t5|G@S(A=9Tr$ἣ*agVA?z[B3yR;lj0J lKP^RpRQm% *UR ~^,Q S5QQT)X H7 )jij ZԽ@ENeX *@P*e 8yHA~HH߫msEHlZbI[Oh;L3%ћz p%r@\³ @-1 CS9@y^ Lr0.%h}ť"M!h]C[PU5*d[zOE I0c1l?5m @y2gA=I^eSZ`[j lW:(bcI/ TWUi.T$G=GBb*xX-3em =~70 X s~S۟"мtNs]}~yR@>sϦD[ {Q~,[F)5o,ǨMu1: ܊^JP7CE˷h{s܆tw1:wa !U#f{&0B*t S2HmffAq"5(eySQ3ilq;,&0< xgR_(_.^6Zם8`^1(@i+ pe%Z'u?'5RܤKY].h%_e uQN!WaEjdޏ(0#z;fil_<]l <% x>(@hapyZN)T6Y8TW!v*ӻ'WśoN"c<\*6SB-tp0fx馦uyX=PH)0({`TD8rOH?ȭ\{ԽL*oRgT4hf:u}z߿A{!ٴ8is~Tm*HnlٖӖ(80HWwH4@q)4\ (xqv[ "N=+ŋmeYxT1Xk:ֈ!4!8D-8KPiXnS 5E]{4Gacy\ yד߫mq!Sx͕mnjmQ!1a>MNA @I9o RGGPU [Ref҄l)bhdBRP'6ǶFGc.T[ʩH\FˡRlKQ$aJz87k:1{L(Bzi)x|4"F/3Q @y%<6 QJExP:;szl AV.0wO@*n3v'ғVbJ"4CPhZW}v$ eJO?>߿A(BRgSl@) [CNhF}V6 @B@x %9{kPBW?5b|${tbQ/(JCRou<+Mhh)zb#)~YRƊnLsOggS`2ļź>l w(Bz);9!g5MxG kOYFcqPkB P x B%Q WhWzUa6mJv?Mgwi%:ݓՌRY Jи^mY}Cݹr6>l (Bz$ מL@0s6 ˁg썅}PI@޵LADA!ѽ>P<헉b1FEiWH@4X? TRAP^;]4ěAG\TyI ]c"5B^]tAݦdqQ(Rz)M)x5WD pG+^ Т. Lw_TF]p:r\ uv:j81q3RDf )D,mLRn== QY"Qѹ^1w >d (B:`x]A8_-;ND)ƍ(34 JP.\]H QbupFp4޼2B]4?+WtOٚza/|ۤJ@QTQu}H[>!>׫lp{MЄg5A,pw% Я<7HT$Wstq'w;p*v @ADihO[qܡ*9g4*Ep~r41^.X cz&EW# (L݅fz1an:zi%v߫RrޣͦD 6@5 *#HgIަ#@< OP Di6Rsj9Kuhp( 1(?!9oe%,;P } ,F i'W U峺W78Dމ6mw)ڔX"V``J8` (Lz~1x3(< U(qpI"4BdY^/|\K>}`sTCw[kuup)95^hT| CԲn"p<={"QL (B:ۄ^lx{ < H|sk:Ss\{"rJ"095TTBv\!Q)wqV@Jxc!PJH27Z!$3߿AΟQM)]Umv+ 4n-1W<w@PWNKM /["3t( ]8|s 7m gHcHpy4lٍ$$^x>߫S {)Iԝt l@O{% P-R<)' {:rb\v) @@`pK|@B)f"5z Bk@'f`ଓЏ\[ HpOM{%avomɶH흐$|J܏  6כ|"%51 x]+?6t`0(w_?J b"e.m8bOQ+͉F=NRnQJay8WQ`/XwB8Du \eHa=Jg]P^oEIVLs)/P>߿"(BR 0#x f v|9nb$E)Pm \-Eз(Pa JkzwH˫PZRl<)mA\:i.@@JHa@(=:Kø4`R:R >߿B|IMI,VK X <%P0 @$ q#Uxc`(!QNg&й "@{Uث H qL%pK5kʑ 7Fz8*ZA(e+W#JXGص>RrQ[kZ:'7h" 0Y`x$@ 8P&o;9ҡ &97;GpsZP_r!`qo(SԙC]qbI hq9].E\^ kFI2γ3>߿L.(Bz ;uClI#nVϱ|?GJxgFߧ@(.hY?97PC E&2@9#y>"(߫jy;*S) uD(oȾ*]iăTe+^[wr'2Sk >"{!ɳ)h JITO[“xHpnКe2; #r.B(>#F%*D$Rh(R? X Z,xl5ZjTajwO(y9,&O|Q݈}% SY+` >S$vg))l.١O 9 <:܎'LBʔKvV@-UiVoŁ(J>P*H/J{`J> YwNv!ӡJ}7WʽBDvݨ۩{#y42B7&\3<U؂$i֓H4gw_5!; e,[hp(EQM°&* <[1prol;P2w\`@DzB!E9NyGVCrio!'s4߿Rq|)"0U:[pF2 ~n=<|Qth/ȗ!L@N[DA+U|4MAGСHfS*c+%C /$ߡC`5LwOU(^d=*+S=EHlJ!xO?WBvw@Uxh9 )VWa6D5GGr؇mCou*a(@&R]9>[_rZTZƋu./|x yTB嬣|Y9<nsЙ"{!!?@$` mDZ\_| w*Sgޝ拚wKit܏E?! l=Y`+@$@"u. 6y ( m*EL7Ekڠpsr`lq]k`J V Wa O0@R o.r0W Rx{_WkS-%1OiXM]IOggS`2` y؝QxɯMA>&@e-? X9 0̙:?m(WqP9ʾ 'vS" b1E @H- >j?p֫HAZ* owqϳ);=ʵR+&A)##$JR(y߿A BeӲY<p a O Pef[l?0U(?"75.]ѫ86@@, M$; x'BPo"ߜӖ%"Vܭy=,S TU0):3 YY%@*yI{^Wޔtc1 [2l@@ܜ }ٕ/d*MDW5h@)T c!JjK BH\#2v{~ |α۔Rɏͷ1a6o۝1iم8Aom˯ |d(\w߽;4y6 4!l=`.@"FN2w, x!M5CL}o]C6I)Tbmܴ *,EAYIrjJ6y2xPI^4{n9!f~+70y׫߫"{ /i?5B- #pwU$-]o^(0,gUX@Ȩ_DZLP() y"uqn=u 7"$ bEDX(1yjr8KƬ y߿IΟ)BgS/ p]=@F ݙoE}VD ~X+:τ*A?nM*`!6yy9Bk)zm%'ZZ7gPr1ɑP<~J`eJ5 R z"=l H6%mt'pq$Qta''C{_+qOpQtH8e|1<ˣh%L@8FKӢvͺM^9@=:&vg10 He u}yA^jӲmw*ā% 0P.@Eb~z @(\ b! A;4 Iu\2w @'wgq~-ȷh$m!3a5j_ѓ$Fޫ`3s= | Fv{y:U96(Z!ԫpB g_rC0\mA^`[@ژVJ w礙ynҿ涰H<`kj64#P(]]oQd*%+cF#&՚tr:T X&+bt 2HCzb c}Ͳ%M0H%P"AIHAiDF<nW'l؞CpK9> TTf.4iI )Jte\1Ι;A5="<@YL{a 1^E.}`z E\$&5|lmms-1.1.3/data/samples/instruments/harpsichord01.ogg000066400000000000000000001124001247673406200226120ustar00rootroot00000000000000RIFFWAVEfmt OgDPF 1 factdataOggSsDvorbisD OggSTFvorbis Xiphophorus libVorbis I 20011231ENCODER=vorbis.acmvorbis&BCV@`6ŤRqX*):夔R";M'RJ)|Rc1АUA eY_F uY{J9 !:.! 4d B!RH!b!b)r)s 2蠃B %RJI)Zk-kנ>0c1c1c1# YdHHHHX%Yd뺮b8H%Yfi( hh'Y'yygygyyyiiiiiiiiiii@h*@@qGrqq$ YQEr,r4Gs<ɓDILɴLKT  Y@TLTTEu\ulGvlɖdɖlKlMdQeUeYeYeYeYeYeYeYeYeYАU@!! 4d䐄X 圥 YYgipVDY ZSNi֒s3>8%RJ BCV@AeXlAeڜsR2&1ܜr¶Nl+ڜRАUBB!B!RH! 4d qGr$Gr$I$ɒ,˲4K4M<<aBs|B!:{ !9{A!B!D Fb!w%9+4dp<h 2J+kB/:3mS27 *; oғ"?tCqQTG4( Ks8OThJ Qk)s9be9DH9Ai=%e)Ťq[R"3DAnI)4R2̹ 0"c@P4Z<( "dH`lx9P 4H 8#QIJ@M1  " !) HLh02468:<>@BDFHJ@OggS.DPLK{Z@=A9303*-$DVJ2%I ng8\{ǻv=:H;S޲Y'^wqIaV]G&YC(}=X9,Xs<(rlӯmRN#;⇭xrrRd_8N)Wy?A0ZM}B6,7Ljy#_3ȀS.l8O#@~:|j WT0lWUR|^/oNEGsuy{Z$GτW(L8-vXm3ha^kC6zcT&Pz(L?Oz ᲇYMѣQʐ!p0KS9 "b"&VRk 0TXK$ 1*kp)CS0|ntR{fb[+Q̀%k_%Wˠ:@ǀ@U PQd6m~js[B&@x< @)U@ H P $+ ,/ܲ%˫J!DߥӰ[H(Max^\4}E.l861 q-NO85SOXhA7HPi.H)ID8HťD%"@`6WНC %D\ACPa1$pN@0GF^kYq-'@B5F '>ǘ0:X &8%,@%P+ Q-`01Fx@* T_E'!? ($NhdĤNiQD 9X݀Ha "$Ao#M A`BAc pnTHMUBuvCEP$0 [%bP`l &X@.ldk"'T@-0Fɱ@܇{aNÚgAQ,T PD ?'^`O P X(#sY 3cQ_*$|4`= 09K|ne2~A֥%!Eg W ha  &J`#,ęQ`00A TX9Ut=n8F@0 >H@bINx_ ƢU~˭2,&` p: D|r nXb-m^TW_{+Pw 86P@j(m(  Xt*`H"H(&Rz"Id&΃)nJ` Hцc"YF@(E.u 3aeXxR6v99  LA. PhHa QwI$, w" N7v3II*jt1  O Eꀟe0wm4s@K6@.` LH @xiv6A1P KT'H   J t$yd9A: H3F3t FA M o:W+)H@0`aXP)ğ&FsK?  q`{!\C׳4r@  /P.(0"`X> [$p eXb#DP&>&!p=Ş 鰃Yc"y)8ІbP$N0 mNIf3a@Z2aqT KEp%p9pasqi'@; > @  d#:3Xhd=~ `d&0܇$ܧi͔J 1@@ -H/8@=>I`H'DQH!u= MPïWe Ho#8?0`[%25@ `sQl0FK$- Ex(;bs>`b`i?„bew`Tv!02QF@ ͽ$/9L\l8M%*lFȚ.#2P Lr pAj bI@@( \ @X$l@}fF`H ,@@=H $@ءW9@K *8*Rp@_]!"(@z|P Vi؁8B u  @̿R. @q |bpG0%Z>Rk* /Y xI@%T@&l1C0 {0* K `T0`M`$x7e+ 0+:, WlL) @" ; :ȇP\.+ JTm-د/ &H|` aD <P(p@@83Lݔ` L 4Z9c0x 8/1`2+PhI_~ILb*El9r͢]&}Ú'0@w@8'VM0 ` @ "$: :K{T6%q@L@UP.:,ϢHqa [o t86$  A +3\Y1s7|  @|sP$`oYW@&( ! `z7 S0NhOYyo#Caj1dw-rr;"`@p # g  +T-WJnW`\3z !k$3$^SC<t2zH J+kȰP!A@q0S `)&p9ky p *,a]X> M ~~0 0M ` 0g OggSn@== /   @$ [RH828E '1Ŗ'.U0;yP& @$Tly< aJd"f0F0~ D tZr>’%\ tAo %̬PH`- Y @&S9. bK7q&_C(`PGp; \TfR>i*Yg.L&eB8 &8C (@`g6:3  & PXca+ " @<`z;`,"hfo,X~? t=Y`!d]W QP@f@7n "Wh: 8p 8`$,? /s*Za^^`ۆ^  VxX iG ccbTp`[6 O/L^&mc ZP ~`K0| dh@^:@u$f`@tLQ+!yV@#$@D0:{  OnwIK#p |;H0G0" 8T$HШA3@@ozE^&j2Y8uKf@t3Mp+ 2F] P5PLxS@( j^2!5T0@b4(1aa@XHLkpD >y@# -OL AIC@a!ZR 9`poNT|,FM;AV>% w/u%Y1@6B00E8E  ^eTj"|,"` HH̵<9 ocX HBMp8Q}3W1~!Aq`3T@7srI p@AD X!# Z?6o`C'HX"+jBBC_% ~5yN²NlU6~)x c>pW0 Xm`V{ލfxO`[@h91hw 0՞GDCzI]Xlz끨u`o /j PA?  ! vv @?, < &!$8p(0@1l` e |:|K@2jp@(b0`"+5qzOTwU X_gnLRnlKL`=@d$v*$D.#UIRQ. H5 F| ܕ%@SJs  {1@1D(j>58 8߂`ζG \Dp/^z~j~tL@E_a{2pQ+@)#+H@B DQchH)ׯ^ /)cMPt (@08Y'0鈙@tgȦ @ ?   pN`@XY l`xy'WЦ`~󺦄f,wtծ A?XS XVRf l` `}'yȨF{3$ҲgڥDEP/%$ 7@RU A@`#r  p8=7p`b!8t0@(@`up8$lG]Y~nMB{Fhbھ3 gCxG8L W0xXX(Kxؖed`@GUmIvj#An*q`T>4 [} Q a|q@q cXo@|P4 mgfk[ ~@N:D `^@! q΂pJEOggS-| ,Ko:,rE9d]@O/L0@(XmW xp$E ,"HڣUx"P pW\$es^;o@T'POn`|H`ab@EtX@A@"HeXDhP2b(0 J$XO@> '283pF&bhs]dERJ&N@U ЮvxtT$"$\0&@ k*H¶`{)W`=EP/`JCarU:Pl@cQ+Eס@t" W`=ApXm58A ~@I`&#:9 DnP$$Zja,qiJD@рϺ~eΞĐ/0fYwģ2L|{ =4.dD ^'`(7"YD=>%@Ez9QfX`= @C /1n] B  j/C!pl Q E0CwR`t)   Xpz׃cHUm S0 (zERtLf !NC{KxQ ~`ؙ5 ړǖA' F!=TtAD@4x @3*x pawOC C^c.9  )^t09 `@EcX(>e~әwYhEp#J-< c x(ԏMe +E  FG&~Ga!%C ^`ͯ~_)H`GtU= 7  PY~T>d'@3m  HmAEm @@HKU! p+(KD8@.@TB:$0 8l <@@/I1L" E``H ɀ{S#E߅%ȕ/5r1;4$R1lJ;:'óQC4( cc-n˾" c;*թMA=D`=TP!v|9@U/#Ib4`Du1#p v] 0M@\#:3p@9 [ݖÁ"FLӝ$9Xg'|K ~dӥu)(zzT{,fN; XE`5V^ @)m0F p&sO<T 8ԃr/QS)AP^n0J`H' |$(HIt) Ĉ` eB4\7Fp L0],Y({8eY . 8 ѕDk1)P%xx^&@Z@9\ h"  @@7xc 0a^0I@D țP -9臵RH!J8,|Qt `!HO#@=Xx|`Ɓ @X&%D D z`PL!FW%~`@"IN@ F0J @{0,uswbת'Ws0|@i-C뻇qb/!W=i ooj`933,s Ġ @=Q ؃E@= ,(rQ&0^FT8h>V I)[x-`Vg _KT`@E.)$Ğ~zGlJjYk%EGI6vOggS    T~CP"̌Ewn0i+R: p (+\e3~< MWl/t , UŀPl:/0`J`?& ^@U8 ?@]  @O` @(V;-9ډ<[bmTy#Bdfmd! > `8XH wT8SjX ( ExC݇ l ة`<| 8ZQ8m 0"/@Ctkxnwwչm=BV 4m~=tѕud8lpP`002`QQP,(w2r$R>z ݬSfy((%P*% 4X4A XOuv "0`!@HI03 v p?? $] ` 8 ^Dd*>,Os@xS1>w%W5|_\CI~dzQCtIy3&0 /cCX/Y@X$t;@)( Fɂz"@&KpzM`P^7 h`Ta~=!@sЗ/P $(B-q"!*o'Ki.ʀUpd( z~ݩH+tљ2ǺuG=삚0`#;(;eX`)7D/Y$Q`0dԺ)`Œ axIɁ9 D`3 l؀@ b!7ZpwM( ? 0@0[΄M8<'U2xfkTpyҸxj̗ȘS53SLNaIuKǝkKj9)!  8 D l&\5 w =JUԌSτ؁.:@48  d 7/8a`@wBrXATf -|&>C!dwXHA @72r#@d `pjU_'%Le~f ,s:f#ŧOc'$KB?-A;xdd(Y2oW({{, @(\eV @3e@h G9U p\<XS*D xA ` V N 1`u@$R2?hJA@6 o6 # GȤ˶ Gp7ym&T)d7ǖ 2!H=V)WD~RPO+_}_0 9!W :p@&A& <E@21P@$:UtӀB/$!D @@ % z;;]  `RpRX"Kp<JWDp p$`/ @OWP`N0G`@`dHQ/5JHcKCj_uxC8rt٩]L<]5^DB|B(PffjFfBl2Hp SPffVsW01PBitX;#L10Q$()/3qN  0Q$|N Pp(N+p A 4H0-D@&P#0*oTXh@x)eFګQ϶\yK 1uH#ISw!OfZbym }i P?I bg<N@[ !1\ P J h< <#.`aр $*?BA &AOddPFj~_#0 irlb s•*@p8J>Gmu8Ѝe|W:k9()}5s?#I[MawI3e}&=2Nxڀ = c P38 =0RJɃ!E%f1PB@XQ)47 *.~ľx<  (+Dt &B /ak, .{p\ p"{P&;#@ 3 @-華ؐblV{Y{/%>T>5_GA[] e=fD@ b)X@p6+`]`;=^x?iJWCT@#$B~@9Hx +fN 0BA@t@F0P2@@pN)#@@8$x, C(Ul)!M]}{}9=Oh 6x܆@Kƒ͆uZKdѢ9I;XG5 PD@ĺX$#ÉF81+z$'3е7@*  @@Sk`C`0b~PcHNU _t  8H@@` PC`bM@jy :ea`]SLDqBRv ڃ']w6Ǝ^:@@8` @ ].]~ayO JWj,rH@ vCjHx50010P(|,WG `83-0xR04/nQ֭EQXZ2~iWXp~plVE'0X~I{7<y0NnlLm2dp@ps5E`a0FU EYqIF i Zij(v wA D@1Duh_@D @>$<=qJ` >Е.0!}hqߟ<YaGAUҳL+3P pZ+%\`#@/Vu|}b '>!K",44c 2s -YnHʆA!ۧޙ OggS*/o &%"&)!ix .B q ZKPyKP:pAW͑$ie`(@F]f x0D; p ,Ҡ6P&8 * @ Ç܁h;vp',?[CN@< xm 7 G .@`Bp! M %(IB`q0ĠݏHJM~҂=ydEERW4>f*MgL° I$n-ҙD:{"ud `0th %']R@LP $ȣT_ 0_W pa 4DC J@+ (@I|$WlDt3,>j 9q`C,ejeqVyvt$SU6#E_$Cӧm1,"-!F4 d!Յ.DX}07A6v X (>l 0 @pb =hx]_ a@ B](-h@4&" @N5, \/00xl!8@1BO  Pr W9 `rLcwҡRV͋u;+;EWw;#tΩ.>1({R'am:}-Lʥ|!Z @RlCk[ @0 Q@h'rЌw^u]lstRz4- t"DV$@ E%_R`$@SQ5$p .=-.PFZ Dc;UsvgY[v%)J<oVt&WbzN#ק󬶛'6bd>n#E…w3չfCP2p 0YX^ @0 @DZ{8]R@P xI>D@Tkx^ JA@$X_*;_Y_g؞ p Q Hh8R lXwQkx9:,pEoyXs8W\8 `O?NC, ~k{H@Rxf۴T%@< ` {n)(p(($ᝢ:siO X$! D :OS؂)`a' HC/0#-7hH0(I`CdtLBD82(/ DY[aZowCY[&N}E$nGO Lɣ}s۬*dـJ@}(^\r 0 E;a  )wD @\كt *pJ6P u)`~ 0`Nk p8 !]#d<`_P:@kP*\*b:6ҲqaEOfTeihQf2ԪunLׅ 3CaUV ރn[L()vBqU>O 1d (#7(ƘA \_@@CaKRq@4[ h8x" +6  ` `aYb0R40`#@0% P@VY-X?]܎JPZ'l,ag(V/sǩ"TO *h{۹؝:Az1U5JH72je&츋1㊶L UꮯΣiCk0>.4yeN>+l P L X 0`"='*(林/Y~v:3^q l,=@F@Н@ D)@0׈| P.@2 G;L !0 ʑjxo:?8el5 :*a3Lf#3u kxW6ݣ(}$qt*B-OG⟎?]j c<-tbA,xPLXH8P \ @/M zrlz%Ab_]. A Q!XI T+`(wAX;1S~S0`$0|X@ .tV/@:``t[d2ni49m~҆wOgn>qƨL hb '&Q~hLF=g7Kqwyl\Oόpuc{FVk~j粹$vWruw$OWc0 .(R 2Tp$H`!@]5SƩnJ|H@ab!/|hLN&m5 :C9y J@ 6GJ W1p"D`9xh+Ɇ0-<DL/prY&Z][O66p' { _:P4Ž|p*MWM= i?:i9 ĠuIuڝ7 GF() (L`5KAh ҁJARebbW\ j#$ TE@ J^I0C t +t &pAI` K">#Ȧ% {?l?`~IOo|@m]LhfTy_C~W_WVESf-d".ͣ(%ڠW? ZT$njH~?^#<򴮭|`  #]@ ^B{;  IqcUF"4+L/,G4/F$P@ @)aBX^(5H@a`*ciq pT''Ne)bi։Lc1it]}߻S^z喐뷅iCX;C JkTxl|YtE0`v |ɚj]4uFwk?{Z&$SOG9`%*L )(0(USI &*C$US@b$9bt`@mH/.@3E}% 2~kGh'`3\076h N xK^R}6 {R IuJP !0E3 > __E [ E=Y`s /BeHdxFg @x!_ 9g(U,@Y ! . E1 p!C&N+2"6nHK:/83y዁u`q~G:M17d,0BdE"z"tfF,3WdZskG.-x~A&;W) `)$`$P W`ӕR?*e@qc H48Ѡ_JT!@U ag.b8h` (Mkp1`h H~bG]0Xy  IE݇b UhH$M`IPdd 9hKDbYF"zvB :O4sc&aJD1n1t.FmX%eude_]7rJl Uws[Ǥd}?( [OvT0nH@2n@js^(?/xUQ"!9{ݐ`]xQHLxB_XcZ ` 0I-T+ 1%v3 2&O@@n[#ceU4l}y@Y׫|숖>&T5riٟ"OHcMWM!Լ^UrPX 0kY•gK݁lj(V>kp9eN^2r06 P* b HWur攁TLɐЪ@H$Bx`j-e PVtt ` a8@@rҐ Iv0vO -pF@^bĝ"p V$/eMn8esQhM.lp=toq:g^f>G3Das8tLDƚfFOO|gz[xvjWuh'3x Il\^/mx90 + 0QxA @Щz!PaD6 j@KWb1 DgL?j0x@n~mq pskWmxHzp+r!wm28a7$UkȔBVŀPHpl1G&(+G 8 @@!#R V| @"s zU"5 )01:.0VVzaA\ s,=ӠJ&,GX<ʤ%Erkṅ?>udajE>Iː 7pI [O_"ׇo*we^^PFB&ᠲv$1kce4 v ^KFp;vi!W"iV2N[q  `( D T?I# G1 E0@t"Jr))R@znP"Ts'p1`ޠiS5lAE'Ƌ_!oC %˼+l&A0q[tcs;ye1P279pP,PzKAGGKesіe•>B fᇧiz02QyKj3R,?EVJgʰ(buFF*F̽!>KDk0[e{`&*4Qv/&L P`]ꥫpcEIS Q2zTp!6,/2@&.PP8FmKY5@0|X7L~z$isO.m1grp@c $\š`x( =͙PZI268h2̬Ěp[^|}]1Dt-cl^{ b9W;ͯk5ʠ,Q׊ԶɕPkÈL/=%X/^uq5;I }Fbhxde8 jh.&|Pb֔!LiXdE6w Aط!i*Xij>% ÷48X E:SǥáXE[a `ts# oQu%C&%$)s]Yudvݜ]^`E; [֋6nd3@Ug ͌Z_TC@n˷Fo޿'gXL3s,,ڧ1ȁ[zab;{tl2[qwLC` 1+(R`OTMUru="XS^Z6B40zl؈,OJ29е D  bX'8 Hl,mA%ruC]%V M˹#X fK -.T`XA>z_%C;L,Gs|rYkVapi@bBwrs-ߍp&hY/VU^+ixaZ20oF9=k E{-Rsy$wat34ɝ|6{  @IOKW~Ҵ; R 8`؈K6l!@yEr((b iQ #~.* 8 u|p}zV [s.?sUQisn Q =e\9Qa/89{0U8 K;Ɍp~S#LPb y(Hފ4Lr['[ɻ2\6dC'ï]^\D6Ѫ+);صD[Խ8I0*7vH KĮ zFNΠV|JvQִ%s; $0@093C>5`gޘ' {XbНbte-CtS("mh=|c!v:@l%ʒZ!Z©pɟ:(G}*ī F ?%[֠D`)ڀqW%Ѐ)] fŇ%1:n!NژD;U"TS0AitOggSϗ%E<4GHJCJLDOKKZ|:".!fO hYa6 fUna+l:gTu3 I mGdSHpXżin>ޓ[xz o;.,y~ `jez!k `d'ϫ**T08`R[6~$B. ⒁-6RT$IÑQS )~F `@`{ǣJ/v^1DbtgyI$bIYE&]EbF~![)|\Z 2D{?f篮r.4 cꠝ5ڨC(Q _C]M>p{]|ȗȰTʧz"nMd[ GLߍֺ^[ՅvhRޙaɬvA3,rkb:ffF^T2n5nHR41 I8|w74)nRv@qNB JE=Jò/%7FHXcSwJ O'vՁi;qg$)L-փqfW)C`n|rPXKͽxdفN {D۝.[Hr4k`u-D-7M^"fȇ?P*Nt*w%Ǡ%{$N0NJ.kh%]vǥAP  ` 3$,)J`Ut_hː{~(Hz^=0.IiCnMoKUPz- J\CʐBd fkDDk%!* q$ń}N16SȚԆ!GBUs*6.+T'G[X`e䯖jO(2wv`fEgTV!rAm=g~ :>ק rW]C2u-)!maIՆw >A^m%^אJ yJ^6*@%(p@9|j] x -m'}끖!:£QLz}@q2(7 "K<8牖} Ea͆6xٿ[K^bߧ=D?O0&H@Tf3ʂBa`g4YiGP%pty 966&4|h?pō_?{+if߱Vds%<= ! RcªLKe Tp@?u\lLdʗz@"^\f=+D~ь䃛MkH],& R200.Z$ C ҡ|4VxMS4]OױP k7)D+ NRJ!vʒXq[)8Vf`J04D"=sn ew| 3hJ!UR|-gmüv~cC#X3?>vo9MՀEDb.ynsʹ 3E(gba? R#uǸ^djV,?U?L%H)x9P` pbXͪ&TCڍox!(v) "H(ևs*O`t *R,E; | $WVX_xMT%3*\/»y ܤ/e^$zl:;k_IKJk}:hZvɼ{C1IWȱ<~l+I1rXU/'g%=̮؆NQ_㳛 -{c,:A,OU6m `WUX+`a\䉅F :*PzA"f:*ku(9zmBa䜌3,Q #,U%lhގQLeځ պ$=n]adC$44@(y ? U;V-m;>ɇg{[TٳD"rNޔ!T% (1&&9-kI:E:V|)k(ɸidtWH#Q{`'J!>thn{L %yii)l(P yOrڷ,]O? /-ߪS#h9.IE: j/D* vIk ~] BŶ)*W93E w. tk)]ߞxZwΆɇyUll!(ڐ763ҊhKEUpU.I>N{m;Plm!5#ݠ3%(pi 4 }+6yb']fQPݙA)+ 'J"Z;m7:=&]"y2'xK^3;^e\?rL9` *Ht0B 0 zW}QK1"PBUSyw;tEX>JIii"rsOOb$QQdK@de܃f)8g3yk?S# dSRFT'qSYMc:d|%UY*9IOն?yqt|bqadvu :14~Š 8RZ<$@|!t_˥@يvDކUnUìx@>cȫ :~>LJӶԻyD"s,kצ+=tPHck p׫ GwR ڱplyPrW 8=T #<Γ2LjO<"JL}x:]" #%ɴpQ%yyZۀ('>Z+(`S)n,T,w"4O\>yv<9yiWۢko2S*Xpf(þtzGt}=qϥ [Qu,z?sel߶j)׾R4$;2:W63}^;`֝[{>Zw'W2>.wp(&Ҧb`(r3U -s6/̄ X 1aA\ aQ0 k _F`L@,I!)<[*D`=hȨ@^u.KސM>:%{wWzu,K62 yQJPMaaa+>\nHִc)͘%2Ouqi}>ٍ6 ~b! ,ޑOggS TP$GRLSJHTVQGW$"Vojǖ-͊ڸWepS}HcxSyiKA梚#7~oOԛ\JH\>q7=fL%ڐ9ʆ:&*y$>7Uu;%i 2<״_O~pG{\(Ԁ-{5S|7^: 2'u`CEA_+;(W܉OŘݨ%*fFncxW ~l M8>zw L@)P`(VyUT'WAt!`g+;=+MF"%I)n3~d҄+fE3H9J#:IH0T1Oc[xz*ؓ"i'7ք^dv'kwɕt 0 (pXY2J]M$9'+*lwD2ag.,-ѳ(6%JZoI޹yeyzZASص95"*%z_i1LdPA9=zK5KϤbI.-n>ûsl˳0i(4Ƌ]#:L`%V $}tyuf/7|i߂ƪuWfz~ښof}|*؍ ]`\> LLg' c<G!ޚD2jUNX8I=k: JYRiTHTOS7:Ջ72ZʱUAՁI.E.H[08aACE|8401XiU̪YOzBnsZXORp%*r+,5y6r>9tmoXHX$ǡSѓ!5Z]x=[s>['3-ƣI-8ɀs8w_,[DoPμ'0OU(`|ߦ6R)%zҶ&KvK7{]kTDbge[/1Z|6NuuR (fo7˪R+{o^sʌ$J`T(+@%R. T$-?u=QT㲂ޭ!L8GW jQT4ĆYg[YOZ5.~B$n.CVumA48ˍ"c? k'R-׫`o}V? BE9i fCjkf ՗avCk&MDTN~zan jW#jB8".7F(p^_mg-Zz/ iMQHv״hHG{5M6c%["TR)bCeMVĕq(`SUO{EX BC/=|埝jtcwћDZIbkQՀV&bnߤ^u*ڠ>RvHd31GBYr<0' ^[|g1Yо 1(Iׇ֯b cD8Dd SiWG[s{z 2g2Aհm.;vPd/h{.PٹOpI~R>pS@q1k*mu햾x rV"ҋR8YɃIK]RJ)5 h5*HAO!Q`=OQ!չ[(i~Ίaw,墻Bv(AYorJEn헄2 rxV/oJxc20z?7L(uY r#1_8*«\o.QIU\LFܹycD̦7zzKʈ#EK :^_Hߕ0GTsKw|]4Wb)k b~HPOTӵ>I/յ ٠TDL` 3 |e\ѣXv?^*25Ʃ:7<|'϶.jUE}ز̊L~ٛ_+ˀ"B Ml\FkL#aV:y!7C.stS~@^Dk+(5׼J=p' jNra;.z |0fT.'0S>wx( z#I1 K= f'#K}lCT:~Kr_[fW(lwn*5~MT &%F,^RȋQ}5S%.W +w+*X\iV܊--03 !>Nxa?tUBm:tF^Җwh`t -qNёqˏ6Ʋ2o2TL4:%[zkyб9= ܜaŒ ʘ%ن}J"Z.(ǡK1^߶w!tزHO:vv\c3RH alULI aVDGt2¢OA@М7B@} +XLѼ͝>M>0Q?T 9e- 3.ili.[H\'KqYwhR<*(4QQM.Ή2% ) <5nQrJ5kmؾ]>>-ILx#T/ džJ̩KQu4UUS+);mj*O.;jD|9OOggS mFsmpl$X<lmms-1.1.3/data/samples/instruments/piano01.ogg000066400000000000000000000312721247673406200214210ustar00rootroot00000000000000OggS5lvorbisDOggS5lr-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sӔmSUuTUݷu]Xn[WQU}]eaXeYvG¨ʮ﫲l +2:}_Yek۾160Giڲm˺,è2te׍_Yn7Quu]eaYeYvW]qmr:e}o0m[h ?}!0`B(4dE')b BBJ* dIJI-Z1 sRB -RZ Ji-Zj-ƔZB)-RZK-ŖZb B昄9(B)eI霓9'Z)1)sR:$RZ*%JiZIZXC)RZ+%ZVk1 sPB)-RR9G%sNJ)RJjsR:tI)VRi-ZI%PJkZSjRZ+VRiVkkBJB)jLJiZIbZC RZ+%Zkj-Z-Zc1ZsN)ŘZVk-XkB)RZKŘZ5R)PJk-SkRZ+VRjVkƔRSjZs-ZVkjXkα p0  Q9) B9GA9(UA(9(9';砤cIk-)c8ؠ)8@!+(cb BcAR9cA(%c9J(%B(T@@ "A!tNJ'%rI4BjRjĘY*ZFXZ쨕Kl8Xdb9BJ1s!s9c9R1s1sBc9!t9!:眃BsA!9 B@6lN0ThJ 0F) (RRjb B))UA(%* RkRRjB))c)%bR1֚Z-ZsNc9v`#Ab1RL1ƘsH)c9c9R1Ɯs1Ƙs9c9c9s1Ɯs9s9s9s9@6lN0ThJ 0B!A!Bh B!B!B!B!B!B!B!B!Bs9s9s9x3a#ARcbLBJ5L9!blsBI19'b̵rNJJZs'k=Jk1s%k=Kk֚{j={o-Ɯkj͵{=XsϽ{& 6pR4Xh* 0RJ)b1c1Ɯs9s9`2K6:ɋ>|BGlF\JLN=RC-VZ ^ @ {k-B9I%! ZCrPbRF)g1u)\:AC c(JR:clr DL P2!A (,0t 1t!2C$"Ąj Cc# pAw!Abq$xnpNQ@df$Dd% I"" !)19A OggSN5lعB2ɸķl:~6XDZ"c/.p{Qf^_>9sy[;󺸢_Z9x3y&^0guB@vIRE pzE+C[6 }6><% 0:T~' @~L1]?LH~uE<h¼ڂQwr[+ ywR2sRKC*=!y%(oߖr( M54*JVAdiGmr6\%Y5f/N9nw;?<;GJF:x*  Q* /f&W' _@( R@k(y <q z ܅[ mȡ2V,+vRhMOH@8ej<~~7Yg&l& EIHx ??` :]%0s%P]ؑvPA X ORXu. `)ļP@f۰"EdU0ӫ u, PVyLm@pҏFO`$~ 3)/UaTΐ&>|CO]/8/@+@@E/I @pN~JBRJlSH[)2Џqa(0 m[c@ XdKD/c"ڮ o#,Foިշ3!S[ ๛s LRy8|(< @ GPY}"p{p{P)) TR Y_1 .hwjv$1 b-"THO>Zp1' pjYDUf_jHOhVE-^U3)"ᓡ2CLBy(K/*`=P ^(rM;A=Х{|Q |B E y(hPR1ZRmMg@0@@-H@@z . "btOw@*î~%_goM 5 g~P{!9>,<^*`0M/5|?@6[ x߹ |\> z[!<W,w?h20(lȒ3 0@0 @"#  v 0d 2И``PV el, T-GXͳ kA>xIo:%xΡ8|\>)=[-@,υ)0 $QvzM˽b8 P<߄v5 W*1k7HPj(S[Bgyx]o tz@Ūx xʯg"fM&> 6a'TOm#<){r(% > g97@[mv#/_?-/Lຈ*2a uN >J2'G /Y->P3w%Bt)agf < 01o'H_ x@7ءPkœ!V#ݬ@ȃJ) x MdN ^w@  P DW"[^~7s C`F , 7gjú56IpG; a:j0Q&[Q@,)<Ș$\@[5C,LЉM M'0m{ MX 8O`/9~GUjڄ u@ F  @'&H#HpU( 2j&fyzd`* S3S8'EP$(`+qRb<o @; /(sA: O%R&S% <+`tANpl)Hԕ@0Q Z@q'@)@[\>҈SA@@LR M|9 84"!4ߝv< ԏfAwB_y|_v  [KN[5[IP9`tAol ^ G*AF[a A@Y'."@^<){UF,M(` ^La`!0P X@v^z .;#U td.wJ> oNղ=Y'S$܅;' k OUE*ͩf;AU00+`tAn4RhDBW)lH ULt5ٴPxk @r=$Gq0|S`1ȪpKID8>{ FYGTXNmp=~!ǡ.0Q eU'-C0k&EbdqWLuBJ%s~ @~,FR453,n` JBѣ*|/`p.pЮ3@w3\ӶlQ D *  XmCL{k8kZ[KӟF*/|oJfDZ| \ 2߂IR[!Gn!)~f,(vКY>do+ ~ %pmw@M >h&6/Y@ Ⱦw 8$uD y)dr)dF*WIE$ua#]y!D.>KSkCKHGId-֝N1Be,!x1]k䶛D8erk]lpXOggS5l΂~ .B:#9˨3ϯ١|83P˃|udr-Î*; z&_L l' &X56x^@pH2vl@%x`p A@ [ȜS1ѿޟ713 Ilj_LP`szDCX؏51W#GZW`38H77bR!iTTWCt]5C qU>͇@ #K<8` @Q(pwXBbINJHzq  Ddb" (p ,1$tzv ۗaJt Ck΂}K'&QPnpIRi,^KįxVv,"~i(vj2/N;ԇ"!˃tõ%P w rH7)`;g98~ 5 K ^@Q:ʭ<46, dg-`x# XBrRh-~ ^:ޭُo*)ic3w9V}9W]\͗{:DQ+ QvêrnQ-pG;M~;^gƆ~&g5]fO,paPp >É\'B ~;<#/UCP2 f A'! ƹ@@Yr( -BZ7(D Z@ l"xWuQp8&_&|5#7F]f@?(ÊZ}檡Zz/L6^}F>ʯgK9g, >|sW`$>$lh&2Pym((4 q@1MSrܜIaRR xDC-oI5Xh*|,@@4y:f"O->F>%;6E ]=GbclK= V:,Kpk.3 dSCᭉjplgp F58Pd9Aj <K6BЧA K=l~@yœ0M%h$s$b3 bɭ0s(_][[!rQӍ7s=!tJs'/!$"K1k2I*oԀ'RSPvۧ  7_ H$#AFX6 UF .޸ 2 kpW V @\%;8GZp>{ bNĉHއ q6㲌;GMbJ[pߚ28Lp*OCL䏕f\UǬ<.C$P`Vb{g" +Ye%v(n^v$4\[%+<#36~ |%fF P\$l텥\ti6[YMX-w$BPK|0^clHIX5 5[G,Լ{Xl @dgsƈP~dAp>^9cRC@qA b_=ٯQ[#g<셏`MMoĬZCQ/}\1jق1tw $0 u'd!s3'Do@`6B)Pl paOi' @k0 U @hz@Zp% /9қB L֜1@Ӯ;,A4!vI\ۺ?[a 7V 5 (Qk\2;#zkxjI@M~w{FG7e|ԍ(UI\nXX+ k @2y@́ "xk ️͟ # 6ltQi@qL)1:>Tn$=NSRZ5㑠:Mtyw2e`vO>V$ORO %O VJ&_%A 2f @&m| sJ050IMSP!N8y@*^5 sYBG.t0VhOP0BVP;&ҞGD;$J挧PyLV( κN x/H{hʍ1r}CDJj(N!icqm4uɆtq¶bL1>FP~DXɜdH) :@| X$ $(xLs6Jh %li??k z`sXud6`EF{'2рwJ4a " $TppE{XjOu e`C  ?@$t1 g(9&>^6k1Vk00(|!0 +jƂ<8mlwGo c7縌k؝M-gDnW1]<-~IRGY TB? |O`90Xd sCQ `$=L2]/pp)xtNJ[ Փ6(@fEt6H xZIOUm +S@ϙUXxgN=dF.cb@޺O2$buY诣2H_ ى<)ɞLTIh+"?@'μ(1M!ʵ;D~Iba3> -m: w90MPpSԻ-[mQH r(.!!!;)uM"q۟ Yi,Im HtsW`Ƞ Tt4vHhۦ@QJ,.A\&1\WR.<x"ì+^OggS5l|>EsdD:h@ @vQ0nstpi @ )y ƅ@[n3i)$Y4ay vͼѥ^ղ;;O}Y_ZAe.4ƶQJ}IfM`9R6]|N>BG\)|4Ծh!;[v剌2|{2!NC]b6_/) U\~Le>d130C߃p~0f$B^ 1C…AhcHAg*TK!QkzxmBmF)IUXX\m%hq_8QQ?NJ<2aD JMn;*J#J~ !C879D&쩩X!=f!_yLWD¿>k = %L!~9 M+w,8z/jF~p^tDW4DE$Vlmms-1.1.3/data/samples/instruments/piano02.ogg000066400000000000000000002610221247673406200214200ustar00rootroot00000000000000OggSif_vorbisD8OggSif} -nvorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M# ?o U6̘uۨ:c7gn벭 m ʾ.qp*˾ʲۺn}ʲq̶-p7~.l1p p0 "`P1R B(Jjc2ƤTA)BIb BƘ1)J)RZ+JiVkk-PJkJ)-jlZ1&!sLJƘRJk2tIɜRJJbŘ1)sRJ*1RZ+VJi[KbC)Zl-Zb BƘ9)J)UI霓1'Z))9)sR:礔RZ+J[([-VK)-Z,bT[(RJ[k XJi[lcJ)RZl[kK[kjM-Z9cPJkB)1jm1J[)[ŚC)1RZ,b9Vkj[)kVcoZTkZ[o 8P Y D(s*PJsJ霃PJJsJI)PJJPJI lДXА@*`RA))F! R RA(%Z3 Rk9gA(%j RkA(%Z뽤Rk1|I)Z1Zk1Zkb$l=ރNٜsν!2<N Y d dR RH)RL(c B!BH B!B!B!B!B!t9s9s96hJ,PhJ 0F!ƠR SA(%klcB)c圄Z\+ Z5AH%Zk=BJ՚k5Rb5t9b9瞃Zs|O-֜sν჋1לs!d5{:j9BkA` +IgBb9 Bc9Bb9眃Bc9 B(b1眃B!d9B9眃B9!B(R: BRJ!BRJ !B!RJ)!B(RJ)%BRJ)B(RJ)B)RJ)B)RJ)RB %RJ)RJFIFEh…АF5Z+RpB rci3qCHic@iRAB A m! A%@DL Paqvq] 8pp O 78AAqDD44padhlptx|OggSNif+Ej.14 `sBpESc ! Lw/\ME,xހ =q4 ׷Lxv+jb*>s@f\b`gI$[s sKÉ&#Dg% ЭH#Ϗ:!ɳ[u",x!בQI@h"[ Fww/ZlV |m-T d m̲ 6y@n~@Ÿ6VM_5$+c hP;րA0.MlXzx^nDmr[!D'BprWPGSફ[(l}aYu_V9p򪐩/t|6 !`IK&N/A, 8T$̦~JZ턂)L5v@A dhJ8/W+SekNLd~_[4pS˿_J^p): _e{\i;eUj'qH`&1_`&mPo'G 9Cњ.@7V+` 0,.`(l $OO]9t[SPAӼ-%gp H1NxH(@GCJP ^ꪸZ1+bhu@g6u p"lROP8tV5ΊPlFaZ[-KBIKZ!}ڼ܅cE  ܦvP%,#0nMdS^@1 z[vR P3R mkp p "m"La"忙j/'IY,ªar-KmFq ɮD b]vJpBJCqwv5ddeMda?C[Z'+7*HHN9$LPԻl2~;  3%CIF '] MYae6|D} ʠzBb\amt!E騁RW[УJ/QkoPD'܂GaC7­` /|@!>T2U ˈ9騱1,1NKL00p+'gRs6LUIgm)/NWq/7̚?a,Z␥/B-H[i8*PK`0c>KpEizw TO% [)Lz@^"x#E_aˢM$^&$}+ށsSP o &~ƒO @kG,,DEUhU^\>qE;+PZ`(:'&B9jUukCt{ -eLYc5.Nos]@:h 7'OuGm=3=l$ jJFAn;O JH*V \iImo] np7 O ]Y] {jW40Db17h;%`~q"S&LC>ᮐ2ao'熵F)P^ qw$ AeͧL¹%(_~p:Z͕*rc;L~dz_:-SKlRkh 0 0_@y[Ed+J Im<^ . 7'8_zJP2SlIkI 1v$$:2A3ԹrZA_PjndZHn>[l“ NM*FQ8=eXYD]ɏ}AF9}*%Ҙ^R{ 3/LNhV{*A2c52'{zIA>Q`^h /FfcgAp04B8$JbMb;k奆k(`lrt4([i"lUw_p`bs*KhvL>DgM+$9!Ŏ~IޙFzP4 LHpq%4zHJo @LA>@ZcaC$66XŸ^mh<Ȯt5 ɀ ,cyPx%^T~n_L|1^+\K0`R`Qtp˦ =ًi"2BYƟJvR1FJHCݯ4Bh"sTӢ3{xd@{"DՌj@y = <  Q 4Q ]L$,C!fqJ-RWNu*ؖ|\U: OLJjPCIv*A/p.vmSr֕Q̲eN\!YaE ZӢ-D!j\T&I;"F (=9! ,OggSif+H~ot`&=K)TڬI4x5K#`XK!zcS6EiA$|F-&Xh .d|D~{O^mZK]kҶdƍ\F'݅L4VF[d5硞`tN!5`S? e4 0%+RXnqp0͟MCl4y)dz:ELW u8:X܃U^Q&V>E)+aE95d`TmFۙpi ʤmUK5PMa'h'AFEz, ]k Ą`.<„Diahe0[qW @ ILq5ֳ.ɥ93eb&C *q0•kåX*B}StqP٦1f/b%;58>-7%{s裏> $A<7XNX $aR[^Rt o%X0̔M e>C .;!ڦЖs=JA[,(ւ9Jf‘ +S`8Vnk&t^mh1npU:HJ*  *@#aYpIoLjrOjTZQo"ms{\X퇢6zQܦ0V /ˎB!^y[ﶸI8l77e>6\[?&P_3n/`)eD Fo6M@>Xtaи!p ^dO[zmȞmao-OF+iIc)$4co3*64gѢL)\.r;Dž+'KSQ -|m-3{H9N:4^Qs`Cɳ& wHoz;xŨ(ܵ0f.BRĂ!0d+k/8_d7:DT؜~7:O?=K?OJIJ[SPپjH(cL4wB9EUu)'\5(*<['ũ'A( VpHs1HK:=q_"VFO n蠽F$-vet{gSE(~J4 E Y Zy\i^ 7:p~ׄ>z"adeل:vġ&}EoN nŊ/ BEA2bBb h}Å85㌽D{ f@bOBzdSxѳm@.^- ZK_-m;Nva" I&SmH6-G)&(&R#Uxۺ@$w&NI~88>`輫T3fR1+P] -]@+q~O#VKoEsJ96ĵYHLKN5 $4h /}qݮ fnuhL,w\hB5{BSe˷,pw'Ѕ{+W,J.Kq/hz5CI:lkˌ]_c'Y)XP})V|_>( -E*K`oȚĜ}$*(}nbCK yi  G Gftp `Bn@X$H5- *-YjJv,C˄DlE~- /Y+lUԇ :hSJ7uI\5Ee._*Q!j"/k۲v*c'Mc0G%zy/l|Iu +abPƻ#_xG.lsZ>]7OWm.̠Q,L5if>mrAaR% wG+JДP PF9.4Zq yךmL8/ϋr_Nt]{7tDlq 7 xb! A:A q&Y`cS2piuc!M;n,.gT]3TfEX$LV&Q]RѦ-&k%e,bR.M\xZP\_ಋg.V5?"\]w1($tBpEdFشD'&0[>^+ dgXjg+,A &]quOi?]!|Zhkoki Ii$4n5 ,'@ S4NYJ!(%Aqă &#o֟rwme[pߐlgƫlaăT%;-#G^ӭUL&dꛑ4WS6CDj+RUn7RjYaf&QwrPH @~q|3 E0K,^K]Vg+s%LCH*@ t)$jg:0b"zJ,SfKwG-# q=AM<A@4Ot5Toq, O,Yl3I6HNJ |}.jd܏= \&;KS~oJ(`#p#TlLTNFn)uk5jXka AL犯ГHʔsF蓈A?.#W I|kh#P^ S0_<#@kӠ>v<=;WP,5n,Q4z,l4\,e{ ԃD9A|207DqO+' j8w*w%4=*8v2F}k\FT,+@L/ I18̸dG҉dQ̘} (.XhS8+NDWb` G,eh1.t.pNWSyݦmI 0pw: k&G~_/z!!e JW|XMe\v,"†R5@Hq@W w1%NZ[w76`(ouN3'J`&,Q4(Y{tNM_YEDhQ76Ax \O:,NJ&Ya`Ox"@7XHTOgfFl>sD Q5^mt,|VzN=U v * _XL$FܲLX R'jʆ_6@ WNE-ƑZr/T] \Y}oD?Vn"Ǩ|-^)O 4|[opb!;kLAMc{)rRo{ ,9^ F݌nI[)`<=< Pǎy2Dou^S{$Rʻ 8vq!H9O= ObR7Bs._!Zm[Ђ tPqA;Pe^iǶzŅPԕzok'&Oy\ܸQU%VMqbK4ϼ~0:dŤ]IP+,A^4Ԅ!-R4ٶւf>U7:pt~ J='fՠНiG z{Xn1説`s࿙fJ5x *nņՃMX"F(4`XԔuZP3m`eObo?R]@m;(.<:ע9q6㔴(?]5騠n` (\"mh/u [J;knc#Ii2lBUJjF_gzq>Q3n\nAj`bI$o4JC7_}__5eۧlQ٢ualmL{%2_Z|bI?B]ted>mD.21h PZ`/lb xH`2լAf# 4B篧T)pTCJ:mK8;Vr(8<9\KY5#WϷ紻Ϭ[NmX7rÆ)k_(!0>h?0|tf mGa,X'fT~Mm`@d \VKLj8jAȼ,(L^nJK&|paQAhU+D26M Z. (`R>D duֶip+*2J_FHdNRoծ?9)$mYfVM8[ ^;[3u `QJAG%z4 AC H IcF;>-7 /mm킂3 A'5 K!LZ%q'{U:`xdr 7pDTAlqa,O6\-=bLzbx,t0"b)?k'Ln(qK)vJSYP ^!VC+lm{ior@NIG=~nT+8'i'~ 6 (҄Au?uXm tS HO#]ejb&žS›l6Q R8HRg``Ut|s0;'c$ ͛MՖo(s\7g:Y̱2jr= ߸`|?dKj{[~^Q+nJu5g}ZS(m *[@O \3XqU2&C$ݿGҢ9nLPK/`Ԡ… Pqq} "AEh~ܢ ޼M/.Aǫs=ft2v:Y4P@,Vv0+mt\|*_I =̮&$eH5ƛOXyY*-.𠄥(`BB( qtzQ,C|٭ si(^KԃVlED% W(tvG:!ͼZm I#.zԥ@vll^w >ۭ`1e[*x  H ]S }.>6\^<H%rb  _a,\(CZUkR/H)v="ŽZ K晢;ٵt+A 'ژbUhͺE"-kKuqM#Fm.NfF6И-U#{/nl}v piLԻO/%e9Mc%:^\n Aۨ $n3QnR"冗LYf6P!Ѱ;g2r̳Y޸J# ֮5&S:u7 ʨxX\Bm0kNTt}}}QVm` 'vB0{XHX<rHMj\i L#(  NeS `)XZfiE2>]q0i웃_RNQ"o4.»x R5:CKS[Xi3nfNٕc3%F - 0UHAkLHh:(.DeÍsڴ>- /=VV]IC …:aH.$](=KL X!'uafNKaR4{+erEP+yɢ*T$[Y_Ic5_^crۘ&١ = NZls$Bc h {w+'o!QlUJ%`9O8Z3 #0 ^/tp,|M+F* }aexIrQ !ӑM&Ф?ۆ9ݜY'V3!`2(3u0-oT,|MM{NֳT \3M 5v)DCݡuHG9+5HJyF|)̠( oZ|p(UVDt=flFT۟S^`蠍u\ZtRAOR5g`n'|KtYՅ‘y wR6a0{Hh`j-_U'8_ nk$A!%`X hЊ˷,Szm齣-[[8i)4Sp\7nAI+G(>.l<"_uv8}Q=[CcY#,eIs0Kƽ}& GhK ܰ Psu >-=^ZK[᫺.m=m[; ܀ i޲,@ hTNm2O]ܴEQ2 /츅7Pxx  ŃpDKYBviUpRմHs _TikoU 3Z#k䈜~ř={:[9֊C%THvT z3%^Mp1%U p kfī^IVM6q82"-l|ÏiUog #>JrlZ`hlu@xZ/xtm`Q7k^P{4 $u\]M4HV+N)t&T;$xanx K8R j =huXGbafh N)VhwRx)% /k* PhlUwFw+(Q˧;=ؽooƖN;1,M,S 楫~Ăc1c\`>x`RWU9vTk:IM쎌dA= W˩҂D5QKB :tA(Xe{…]({|ёBpJLA6Wv/i.6[Uȅ3'f돊-=nT8_~>$ J= nffi&L4D? O4 zB:\)S(p onmHpܕ **OlS6ŕF{j9y3ظFr:7GZ%-{5.dg V+UX(`/n1:gb %"uu[>:[y=DlrjN&ɑ/ȭD8Or2a1iPLa6u^-K ZT()z5 |ȥr"\[꥿svL6CnT淹1մj̸o4([t_y7t1T7I%ɡW'(,O6\U!%6> /nT/La8.܀kY =fҢޕ9-M:/g/pj[ᑍRv[¥`2r$XJhB!7ؓ75ldhhIᤱI evI;rz˩(FZTJ1%}l1r!g {m`5.wnp[K^*k2` yWV&v)Lc~_rN U@i]n`'`ܨL(eY{4JUVSuGTcFK}ݷԟ w_ٛN 8+gy?QPp)JiV:H+02iۂ\vE =mӭQ # `Jf`MH8jT(Vh.BXx/efJZZJ%6M Jq9q##_qS:˙$>{“J@ЮU{.esMR6t Ho1cw0JGMi8 YWQP^],!QՒpH(xIB4>mt , nԩJ_53͂keA]L!YyAĊ .JKפ-=Nv5 6*6`u&bZ%4Y0! 03N! *1y"^;u B&kb*%bEQ*vF[>q7:K]9| =zaBXJ;HA蘺kŝ*)2~ p*g&qP!ДРr90d͎.elTH{,^$V#`R՝̝-oN+<lFiE▅ӉA&XVP&l{d{0 e]#P^(-]s>_JOx֞թU@@fAJ3m0Q we:VJw>FBN[q=VDIΨ3jģ^Víɬ .v2/*g; P)4gczi"Iqb#Q:`8&_>Z+z>q7ҖnWFޖN4c%ޠi:=M2k2#o[tpbrXOxpnJNXeRSqQDDƍziF{Jr#A]S^k=~18ͼk37hGUC613NAWll3LSжۗXrĎ3'e)]>Q .Z|Yz֥K۶ T:v79BC! l< yQNv w  !'da@R)糁XBAJdml ~~^͖^p9@$ p,&tg: zt~ĩrJ"CqJRwaf1 82Q(\+֢A= Po +8Hno<p㫫cMiމ`IfuzNqr &G$o 'k/{|N"Z 7c;tBaֱkIsOggS@iffw(&%%&3/>ot.pLҳZJUlB# aŧk}M}C*&ʃkZ(P!(7)p[wM(-BEE7  Bj88CSaɊ($FL ?ׄD/Y$-S*|l>H<;D~f%+@dkM8w865 58H,Y0+tD;ܤ m73 aq٩"KO2:xtIfg?ɨnLvg^A* ֩֩44NH-{5'!J%5)ڧ\x?C麯K#|I量z22V j.NҏDT˶*hڔJ= Ymb]:d ӋVikҨXej` IV  slۄMUV )]3sD6I3 d[өW}<p% Qd#oDpL=VTIV}I@@O+!=؛z֏HΆ3.i9`Ɉl1?&?:Wp:CJZTՃh ]RLMBzlw,*a U6\d0yºNcLTAR4m:UVPŖ`]Xh؄ڱWL\u~DC4΃t)GC;> '壛4N>atҳ~mUvܼ $@0HX$keJ$ }zP]l:?HY+q#*?,>W@hDN8x˂ \y]zFK!Zݯxpa<A]53r'LNk}=-#NpHrU`I,dqRJ5v@[a, {>-7ҳѕ%Al, @!G':SڣIyq!Q\jk\1KC\eA"GTKʀT dII#t\~**.S*7~ckWUrmz}&FdՎ7Kx-K?ӟS㎳j3B'rX,Y-.d+8_zg[9aW_`8 &h1O꽦ߨӻc>)ጰX0# 53X~\d+Q]ECKPɁ %W ɥOp)Xbun\$?8Ckay~4Z})q ]ag ( EI<&*ga.p 8_JI3=,X$iQg7fXT=\]PC"@ܰxNn)7(tC4p$Wv:  z"ԏ[i'63jk0Q'ҷ@jo-sW 4YCOzu' Dw49ubBo4!LF4{X Xݫܾ2C-`Epc@B|鋮g]i 5'4ptͲtBfHrυ+Je% " ⧕p ]!P\ (u iݒG 21T,S>=åt$wJt:;4X%!R˫W:^?, @}RZ@>|BRꋧ[-a#Zu_ Y}k =p0ؑLsk<~) B*u XUiДgq@ q`oqpCknl㽳qK ]TIg; ' ^4PK&S4tOʧݭ vE.$A'|Dӕ٩ Oy{U*MPؖ$tLvZP^wfƇ&IW#Nf+(0D8檔ˣ^5$B [.&bIV-ʁDSqqBʀK3>]-{-|MNz)x@Md~_˧Jw]|:-! 0pnm&o UJáX F\W0Z}H(>$֟j{՘Yx_iP8 1av7RH'&e͗)i,q62eO0.,bP ưa(B%mlXV}x?~ٚ> иHWɲ,.$&P72~c͟j⩺ ,RVS]` U ] aHEaW~dPͪXhE-:+b(W= ݒz7 umd[ wOGG+}?˽D+ *VŦ(XI3$-q.JvY-6)(p- , PW>Ls]8T+sTpN|J`h%t<)mqfU˶ eŠ@#UPb+ZjBuA[0XW3@(H‡]6YKl:"7?1hP~PB K22};Z51>Z,nK##k"{CC'@V_~Iju%Um5Kd^!4k14\]e^Q l?nQǂ)OfS)/pU53krk=j=?^ԥyK0 HIqTEqr<>):Uq@kh޺`WRamZ'AIiYkHW,$GMt)7ԯI_4ƅ? i.\VtfNj| ̿P;8oNYi 4WPa>1k* <`Jw QP6GH2Q.ܖ檙Hw fRri1,`>xγx}BeLR՜c&OggS@ifSoުm W ]M<'.(lk=ō@EХK!ShgzW\9-,aCiR We6.rA-EVݩzȹFV!2򮏽r޼As[*â2ɘݛrlgWf(u&cTy]X(^P"ܓe&TR~!l8-56x.ܮպmi;qaHK:OT]sspSuٲ-(E,pn(DpMR܂)Ur_?#gVش\B{%& >srXSD9F}Iic'x[ >^a98znӝ i/fQnZK-[3=,X, 2%D]ojKm9.xnƒ%VTEJ\r;LJUt啍s`]k;t_U [_Gu`5^0wAȊ!HKAު-A ћֹJܮt; z֠̀"vCMb=;y&݃wȂ ,O2݂!*J6F_ da7k%YV%] B+5h6d|a 9UTL뛎^Q9ڶF*}sХg0,+jɲ} @ښI{JǑ ު-A '8_=u5fRzjH؝!Mb}zfO g+) Aq'(lJ 5|Pk` u7@ ۍ?z;Fh- IV7qhMat?-/VczK3v0j?=uИdO ⅿrek#`D@4p;E!+σ٤yHemp8_t5 p-2v2AsS U-{vd! vck 7RbDՅr4u*r2$188}@1}t(<3 Wx&[MhY}d6NZkWp(r1PA8 SeΆSP#(Fh=,f >Y :Ks*[H ,͂b)d3jMHeYR&$rmZ۟ K7)J܏%.Q`Mm~IL ˁ )ȀYjy&?, VH@t|K_ԫW*zX HXw$Kd:ߵ*+%"qRg.ub9?C%%n.xCUA 꺅R pI+:֧q0&ҷ%M;JNx|zJ+E@EEq(@dSs$~n@aS5"OV0ZRE,a?2OZF q {پ&tIɅAm_I.M[/[w[Jt/ګp …[yZ(Q+ǀUשPj8%3|Ղm_*ccQ9CPQDݤઃ)O4J288fQӆ=toӰAwxAϚ<@nB(^gcLmerQ ]#[RWb'm$^sœW(YT^M5B3ԯᦔfJyݡB"Rva"ud\]nvN5FQɣo$cߢJ+ZvLg5#`$dh} Ͽ+ vCH k@lVi(uD 5.8_IUSB_a t!\3h15[~)1K6WhQޖ "un)qS;b6gvj*:t|C3'Bk25F!єYR0d,"A.6S{5,p4P(]AY2e-J\K,2CzI0zA =,h HG5M .dM0MSF ͐{|p3<4TQOUҖs=UهI 5/ $)Z@vkl,vUFQRMW]۫V{A_VHϋ63a f,|q~=_755 ]G `ϮJ%2Xu-a, RWv. ))AԠ`iV, U4md#'`GFRF + KL hD"E*z]5r}/٤Ψ{2Czg.+}BGw"TWPYap-l5|ΪЭAIVZ # \\q ]W00q7z=_%j虴68f Geڱxׄgb=p*Q2Eͺb) v`]JZjU b1dXMyi Z*҃{ )ti3WVty(8Wj1P X]5c`|Hm'cɑ.hGXT1!-cS,]q=d8_zޏAAneHXy=3q^:-AY ziFip#Tq>޸3\xlB4¢N9i6@bW8yL7'<^,X]_T,܋jeK`;ܸ@evju^;)Y}lQu>=uv 6a)TPL=^r>-/T=_z~s*vB/xh Ua$){^Ϋ/1{jBMk XZ-d;B .ro OU `Suٳsnqyg AE BFwvWcM9A0ʎkZ7 rW7\{A\+PP$ Ş=RNi>fc]iL?ުp1D8_[5<i p3C,f,X%fRrԤυzi"fiVҎF*N! 3[軉@ vg+~䍸 uj\^=׶r/~o,v.A+I9AU9sRUgUT?x~>j5OR32P r1-aeM~ÂE'W iQmYE*xDVkEEhg*xHFh d"=9*bQn ᬕGкt\М# Y hi²|0 >&XUh[y y,[JM`*_H gk)rOԢO.OggS@BifLZzm/=ó**$R "4IB{-5\jϫ-2Du=hx0͂֯LlpE APoLbCC͸ň*(7Ѹ>=IO%Ydux5~}`گ:ikV-NhgOhr0EjU^v:ՙc@W#-T+8_z [-uP oi48V 9|/\Į!.$(3xR_pK5PmpDuc*uN#.zbWA$jߦ.aHɒtmW=dN;ltnBUzl =LtWe%Q>h}{uAZʆ% ^1fm#iiMGq m, p;mҶOO @" .v!44/ʡ;ЍH^N~>YIZm{SP5t-\LX]zԩ39O,`fI7"x\xEO1NzqT}I꺒m0\h G ]:ŬW&^!_: Z)D.:(H woS# 沎cK8͸O"rDon1$xM^?rzr M uI:n+"^ka (y *SӰ=]!@z.VM۴ J*hfF.#PBYB5ʸ9 FtkYMP`v:Rd(j(-^f +Ԡ&5gҚgKI=U/9;)W4ѕ2R(_Z tr19gt{so I_a2Ͱ8GRʳRQpmPPYzmA`+uU{Nzk[Ϡv5OY K)$Q]fxSr.p!fT(_ܙx6<9ش+@[ª-!"s¿^ Ont9,ˌ)ljKdS]M1\րE"]^I־ +uc0:'VX&Ѫ zi 5/uVWv' &U#ى0dѰSja6f],?5c*TKC/?ҢR ti㈪ͭ;NOwif$bW.^Nw(\݀DkQaHٔ>^~BBL$nơA:$u'y-q]X |Vx9aaх\FڄgC4C)gUAea35 -(Ly9 X0EwMRgRt !ŵ4ĬuAJ-oj␠ݢC # =N^!x}lً_ .N57{ (;Y@qq.X%ț ЄCi Ηnc+| ] :YХDjV23w=5,ȅt46nYf +BxTjr֐x"ZpjĤу9Q`H䰟'Y8i xh84DP=4$rkJ럪GCD;kϼc@{B#x଄ 4jM_ ]Y]۔`Jfn2LkwbWݰBP= 3ƒMOp+xs)Xm!}&9]90[d] 1t_צRC =C֮и)Wi)00EcSJZ){!cg^S:z P)Di P :ުA7ztvۡ %Ia $H4,.Ik.WbJS_GCBSy alC 1BQ(r]D֖cp9Ȩi\v| 'BdoG>Q5w?V_2p)c;L+Σ's#zJs'\w?O AҕTP wܢ4VbIު1.nt5fi);fE@Ƞ0$]/{p!(`"! J`8|zdp9ZMQvy͢{$5^o_j'#o'^u76Wnѯ3w-!b;Nս_CUDwCsZp݇/(V0A[4ުmAր>_閶 G5)DWg|QN h*C2)jq)up\zEU-WWaap5b{oTqkھ*a{3-kf}U)DS *41 ,pB?QZs-73MKY Ηn9T#UPf@EikGx^V;5YxcZN, B[9ʎ%%[Lu$0GIko;_ZXECV7;UȱstuAĤ5ٲɝrdbɖz[nBI(;#z70zǞK5hM!ʲ ;z^zm1._פ-=1M i:ؔ)li0 (Laix1#X32l&V*j} >$C\RN Æ}=@bJ%$߼T} ^9Ͳ݃IPFfs5O/$QI]:Kɚ(-D\EiZDN-e .t.pԥWZ_PY/X 4X$n$cH{QnRbh vTk(c68LQ:TSFxf/CID'Wf0Re:lxPMj_+鈩hm:NYRHNT~ `c"2M!FXB:L\NX'<` ]/uksVMI juBs,SBԬv6ythb (a@TnqJlppO%NMK>rH l ^L{)T!\IiUD y$ 0p;͔ Eoz7.4` -E%&gyT wZ*-JzmA |% ]6ak[ᡁ@`Bk~A3 {KXC '=xJSkMIW~e#gT`TBNҞ|BQ5=|=/Ů>K/b׸6WGyM^VL꒭)k1@L0@DdQ! :HA}t mAWRi~lApO{fT=Tr,S*Kn<cq_CE©R&S^ ޓpϢ^mR] sCbv-PMCn5z1ф+oG+)rL( 4K.=K$-ʺ= 32ASa yB0*-qXҖq `j5t!=Dfj2{A'hn()gD/S-7Ro 4; 4KJKlgr ')a_gPwa|FJG&Vc!je~C"S9f5SԞӓeߍd~L& L\ 6S73V<<?OggS@if $MϿD XҖnWTSKa}-Xtwqti38\Q|AwJ,Seu{WU|RmHqv\ʸL{)ń Vr,vSDʭˑ>e$Bqt0]/}e@I"TvCս0 HMml/mz֥$e'( p%2vo^Vc\e~R 4"3:%ԈDA*`q>k"&t1ÔnUOjokK'r&>uO`fBdf!eˑdyy!_iY+PbpJq,qA#ỲXf-E 1gyׄ>zh@!;1LzW7򦔁G ,BA4RRx2I"R|`T_ຳƫdrijg֒>Kr&r{5'NVH.ֲ3Ր[9) ^fYƅbBsZ:# gɿ\Kե,R*clһ)~t^–5I0{8<9W% $1Iޭ2 | XK $xfiAR R츺3:Q[{ 0&Ý (xFy]; z GK(On/̚f3;]Kѻ׃q J{1n|)` h h3x^ފ-i7JOnUy+BDžp,K#MgZXQ2`BL.XTT`꺲 Tyi]W˞輏 y3/YľœWIF$&1BN_cڏ- 䄐YPCa[H4ԟ h.TU꓀z>qzGBG: xS,`I-qޏ>6 v&IypӔ?f_ K5?<š1:A.TRo}h:;߶.xߌp>jq$K3+`[an.NY&8H/;D W DA-Pac6 |eM\T0'6 ml1/mxN*J63`Y  1U7iRnϠz-\K'9by+ƳXQlXh-ED0i1^m [ULfӔdU_daKQߺZ!lF.[U*.4QHEE(c+7! =( 65z +N_;-Y/mk_u4h,Ѕ%OjveZŽҸӫ ]6P_k}(Sw%g^Fzrq:j\:u$ä ̏^ggbᛯLť omGyu#(U0tbHLJݛMQ^ך]vުm^XJ*|UוT K;@xipT`$s46O_6\VTXr;?XS`XˏR< 9Lx k[Ӵju1Õ^ŲjR9tĉi)!9N>P%R7J=[aC;.{7`Ue<ԉq_IgTv)()@ +@t uU`rPb5Рp#R*7R+XY)*%,e{K@.zDLVJ%!7&#顟\%7gܥžRr{ƻ\9^b*=kڎQr!lq•RBoq?i6>-i7z_+:ޗJv'x˂kfU:dX]o7e\ġ_ j2=oD J+oP6,P :rTDmYב$`=$kws>T'S-!1y6Q. ح%"΁|1dP]\Xe[ 쬬Mqw1J߃ ުx6WBW$%]nHMD ~j\4Gn3ڍ%78")ρ<u)n?ESu5j',+ mѶKwci:N ic/c;3\e ;.Eo!4),AqR C% ` pQ /uvɳUڦ^[4Z09y$.֟̕,Zos-e΂Z)lYPZZ2 ˫DNS]*1 ձ-c19jw> t|g,'Zi/Rkv #D}"7#8 +\}x( i^/6(4xp ݥdYo ֐/*$} J@ş:b{JT" n=ɭ>Gt>ɔ'|}-!Fk*>Qۏ6[M0sWS.!9"v2Z HH!PCMAO6 vުq ]n}cuX 1Oh>3ZL[a]HN4``i+#OOI0 c#=S,՝#^V&xjDkMF /o.N I:qأ*ͬQ0'xrf5]l»@o۷ ]y*KĈKۛU6 ުl56P|ݦ:34WDBYh:2_ "BR>ʴtKD>Yb yZEi vw滎)=\;7K,aTXn#J(a*B(JKN^lj-ܓ-W{c)⅞ 5#0˘LHAc!Z<6,uXWkqvgE-[/HM; b@;}_"&qV=Jy}lTJ7T=Χ]#?SIOz>o-6Z:M F\6SV47D_Pk* d, k6pn"M9Tc/6k= 2BR}O[3>E;%n^+RQP։ BC]Z XEFbJDӛi ~ |閞UQ6`KY.4t.aaDA8/BRS=n 733tTI=@sAڸqwI5fB%N6TȖyh$w(֮Ac e- .VKU[mrؾ5.\щ hOggS@if meü` :='mii}(l ¾`A.L1gU:*Z(a:UYA)`qPXl*EC҇$7}+RG (26W0}|61ZJ!}JA3 ӏlc>8jkuB uhٻTty Y(FiLD_s3g}@{E*+6 fsT~?5v-CC|QԆI,,efG n[81/\iP#Ge$swP-(nFB'LP\-w {X]_ޅ#INTG N.Е@Inlc`H³ Aުq |R&q4bjBR{lev[Ǻ tPw4ɧl(h-*He1Ӂ3Yٺ{3Ra@YR(kE< K[UFޖP{X ;fJaDK%lk@K˄_J+B38 SbxiK\T 7bm6$e_ ʫRaU5N YNQwr"LSEaX|P O ޅJNNcفrIa MoE3z8ƾRA./y=(N:ȴjޣ?nvNo|56wFx+\wkZ?:!p/:>$tުq,~gznz} 0`"&E9}qQ31kA꟰<5jVxe^L}`8 `@2 `x(W)j]U_4J*oXUxE:;C#t?˽&= @iNTtk}mNEV-+Q_Kt2hLm pғەC_AA2l 44 dY.$꽶Ґ4r.tWvvͰ(ZA2}dӢsKjdK=}K(XiĢ瀄---|ۂ 3:$ vj|IrơD8PK ^IżS^0yB]'TKUC,Dgpa6Xn a |gjxޏ>$5*`uÄHsU)#T&w^Yg*mVb /V=0@)6/(Nמ1oY QWv k #Iة@9Y8 W6nޱ v@p;f̅ ko׼ <_PtXf. nnUP) kJ0ea\|gتle=P$˂7F &w4n n20ʠnM],ʳ\:\`|gj"b *,=n+qbe|=hBN]+YLQtHԵHNq3P>[%"(inVh"0mKnAm @00 G4ΐ M$<ԍ(20u7n7b5[ :v&&SG@>R>ي!𫦿WE^^{CHSnm/Y\d|f>CSQQp1"ʥf8de[q=Muh =|i _Cv赓T0q5,3&GZ_/j{0+B]G#nY*`L MI"MQYNCݜA /gmw}He'e73&`)?ު-u ~-IB KԺ &Jh/-I%rsq! jFkUn"9`5M(PT5 ɛ4So5e _ Fg\LW$CϋHxBF7^WskJzT=!8R1b"B/jt1.J[.l$X3O \4uj 4͟EeO^ʢBl~ (&QP~ 'h-e"&:bqƐ@0I_%GĉXLy!=.cmѱsZna+AyߢI+Nk]!.q% bj#TYwP>o8|YR{Q8-:'-q|%UWD/Lp5O,W =v,)G=,fbiҲ앗6:&sŒL'&v)DOp޶T0鑈DEi"X5C9Ef=iD>7%iO]5vS)'ěFpX֟+ƂJBQ0d?r@ji宱aiV^h %'mAԅl+u$R;ÌE HȔ& 4۫f{Ӌ2k'9EH_[(9"q>e,v,Y[\PBj}n |rwJh`&@͸ |RplIA p`)&&^:/oMCh b M+J,j7QQU0ޕ04ՠh)MFakm_{X-~N6: + yZo_oN mԯ[,4\z@8Ggpx3!7D0H ޺q x_ K֤>RM0ˎ˝H r!ՠҔ2֯~OŬ+FAGXa`WnqC'b+LB{?gEk09$a $?,ںNR 0[*V #Ae20 $QBT!ew9_zOggS@>if ٲȿϼުhJ~l9I J f-htwL5;AXu+sn@pI2^dF` `OleN5ahKJfzpLm3v'4w. \A< 0bqL}'oXz2OO\+ӡ[q);a2%@Tb-Y^8_g*|MCءg.4v4%#30.Lּѭ0JDTp+  \0 >A^|^tpzϳeI@ԜLs6o!_Sjߗ傉VJ9q3neveQ`a{ #xz;`6,g&Q6;Ax_/VKmF \,ݱ^kWIJjm[ikpS)7#Vl(D Jl_YrMJ`dS!I\BoX:b(K/]A0;MN,d|u`;wi O?%d*әɕ F@>U6:mAJ7nU> ]x("`uCy^?{GUKeP.0ųE;LaQJ rJN$n?"$"i|yHkTȁZ{yq8ucY@e˄/~ZM4GMs|5!<%#v";*?0pʐgLT]Pz4~m8CY'ۅm۔z14UIblR;rp-Fq ^ZAU/,7[ &00:Z4U߇߹qTM7j|j*1)?wR8EBi{`)?k80Pt[8Q{/N^zYh܉8 tܹu\DAitʹJUQmJ.4逵V;,,RY\ ꋷE=BRA] ú`+@1~GcGSakr \C "Us4rwjʔm 6tZmrT=*9-&w+.ܫj+I1oW[Q:L{MҬ%)0vMtu\n-mUzZ [ h\`M⨮woվ-(AVls:Tosg:e7FPx#u2Xw'cƺɌ:֔ }OEO qlrz3~&X )a8Gۭ^=rj D,\%;)"9Q3<h ,:JUDiRWIzH8ZBT]mu& nn`+LZ(H!\* ]X@S~>S$.ʓURv$-dg+H!Cnrc =%EOיmjٽyiJ6x`AZmU0dnҦ3=sŠbV b &|-i ]ܯԥڳN\X]Ju[k~KġDUTZSƛA3UPuW,0©TJ9,OcXk5.ƽ>;rBos6G8m% \ 4GR[Et*ժhx׳>׌X- %7 ,EfЂY ,_I髺j;lض.d$\ dG:m7jyi 7lzEVXkO B}>uF3ᢺtlk] !!㴭Vih̺vibQ:%U8Bŧ3$O1ƾ@N eʽj1c+ͤ|HmWRiPv 6G%h$رsjNTJ"F$$**Zt|ᦆE Waa o'au0hDХ=dS~qVw׽k.-iλX a:JPbX1R>wxK]/)syזʅ4.bk7yz>ژ&6g@v7ۜ˸_R{dFy ΘmKX}Q/DmZA,{n&qMAEш2YjmAF|-ݪFd<=4XX \3Xt&IB@?3UTШ4j6[L!FR`RBP,btMMCRSIɡOZ9wm۞"~Tqd:3պZD5ϨWFk?s!o yfRp]mT!Z ¢#`zͬ56K;EeNھY$ݥpD^ ׹#OgQFҟQ eJ);/ul (䊔Zѣ'y~k$KzOG-a1caL0C9͵ H*QYMPhId+dB;Wc9fgsK(\Ei $un}7tzJ~%Ap'M#K9b8+%eO-ИGlD]D<ֿ@a_'lUG h,'^p&V-p0Y k]!RFQwU7{'H?+&"WטXp./|WRtmFÂ:i:Wz [Yݶ=S k4ΰz'8ju &{)()q5[:Q/*PPV\]_(XwdcfiX8+ DGvqTd^$ƕ7D6g\wI rz7,+VqR6(&HWE{~ܔ]iQz+_ɭs* )m>:`ic>O2QDS9y;Es*`cp S,i "v? ډ(꣚ηf#ֵ|Ow2l8 ԈZkcqk;*3[3Ț2ƸBi#*QQ66I2дn*ΦV\C ,L~ t Uyݦu ,*d:BRuYRdn 5]CY-eQO,!!pc=ٓZoRB Bz@ #TH/4뵷dW-m!TI]1w8t.2b4ޅ]$Q E˥~2x #Q2 ˖d1mJϠpгEgp죚iiJ;kZe6ee.gD'>xSn bYIP'RR"d=_ #[ >(2}*, c?!#׉X\ג/*jDZ֡(2$rŅxXhl5:qݦ&1 - #2d K bJX 4 ުYW ]TIgy 44#j74_ms&6 Aӵ~4WbZM!@4_M)DPqn,H&~یi`5P&y;P.KƇRv`vE'حOئi/AmuXЗ'zO*&'^hpX!|&u9 0W@BMm>+_h 8NCEKo^`I=XܦA9>)0vv0d&- [=1 wlMGckcFiGb0DF( =_6ɽEO+w@ORH"ٵyԗ+-dBH;}OggS@if +,Şm }-v^pf-X$M2A[I/SVKEV՜(5E}DpQAJ7M Mqhw_bn ~*^XZӍ\Uʻ[Q"ܐqB"$KU8 ;yoUQ r|oOœȁ"Keebv3wYM:1hCm#@ʑ\Q1AXlmV9 ~m8CEa)p**qWjfius_E9LHe= ~O{N9$J|(UW@F(폦D?LYcמ -?aя`JX 0-k{"M6A\1~l﫢Vm+] }@U¥K$S]ęqSS_RtAm]7P!fˍC!c7Pby>yy]w*$U|mQ(z#~@F7iacXhQpK՝~,Acڥ))Y>}s0A A=0@Y??v,rD~ͰAUBWn$I` k,VHAkH53O7Na#D4Lk@0 55r2pm!-fKy)O)/bu폯!0Q[}掆/3.k8߭'̓""`4oh)5#'XN47$]A "Tv- X @cx{ ԀLL$LXTPʔb¢~ ҄8r~WhÃ6_a\ 'A +P1JrA$ɖUN+9va`|KNu[nb3 Fs76!$tڽpMJS;ΆBe]POoBls. eKS¸ 7Mlܯt+Os g P pt|K MYj5E 7k zqg^UNjfS *r/-8~v]Gcs8; UAo*(^bf B߳rsx"lwص4cM7o$L_@:`LK6f'ڼNmA ,|[y{zC`8ZAwGD兲cB̟2h2>5ab)܆7G96k1@",6_ JqI2M{#7(&O}қ+ƈP2bIZU KWv̪8W, sGdFQKaFr/EM.t UQ0 fB't!f%ѯ6轼CXaXJlo'[nsZ 4 XRFzv&dT).O<8bw2ĭz6#`o7Msoஷ+y#Ri\J,A*P)Jabk,H@2H'~p[ܸUnWPI@`CH&9D:'hn!4HuR*/N7.JttUdf.МDX7b&3pvT x%jc &00vx3&^>27V6*%(V95@UƝO v33LT7:0~M^WT#o۔tap@\Hu;?&%g~ZLr7L2B#&bn_%\Pm:tE-PIwW7]=! Xn=XU+K'ͬ%4GvO òW]ONҸ`pM9)`*S[f0@n6~L.'_:q:8_閶*]v`̀c!m=!oE.%(nS]xMd-&Z'uJ\VfBj;)6obҋ F6ԁ  ho[a՜J 6E5p+pFIG+m2mZ ngĭPZ@Ѫ5XQOv0j텆 +uzNmpstLhg,iY/U^e)Ỗ#nhIɃ/&tXc #yXnٿ2u85*{-ngV)A/la56/1Guf5%Jdv@z$mEHV0 OCb0`q͢ԥ99ԇuY]>~FU`bI k-=QJq؅q.AU_&ѩM-Jx̭6㲦+Yi"@3[er_tZvmf#bʰ1Oԩ=a㤹:Ȇ?-* Xб6\I* tlvim+ul_$q- EڀF۪NZ>j2v)I5  Da353  *GN.C`PSePB3KP;!L6CiY[d~,=IX5& nBE:Q3h:j3EA:꧄^؉ž=MPT"iͬA+)}UbK;@͂IF@7>,٫΅='lg;@LX@TP2^ nW~6dz=qe0 ѰeЌ[H0;@۷$Pa/eFrû#} 1,0 .5#l)c`lg!g ~AEcB%[SPP4pY], S*40)5A'{im(7Euv9y4un;ʸA鸾MvU]?n{A3L#j=99\b %nbYnB昘[(0^M~M*[Ru%/TիDe*i N`XhB# zF!1 T 7 %+ `dM}&سQXK%FTB<˼ߩ &^B>dkz=(njg,R վU&@-[)ӹ).P-,,u6 4 lg]L /-Y161}-uWCRR}`iХf癐˔6=@D9;o{u>4ŊU(7+}^/?욶!߸w˜.n4c9 }jݠp,o+*=Tui %Լ,K߽4M2BMqMmAtvmUz&m4 p],V:mm+}:\խ2UWG[KHl*Mc8n”#ꪜ(+ RlƪJZCM_o %$',lSKygB3uc kшS*=`PT ED W~tI*mM}5h$LTj;_\]fӖ8S0Sk-u@ 1>-&BW(c؜.O'G5%uR2{4 9{Zt?ˠ.mzp2Mr! (W:Ke(KΨ1(9E>9`,ր߶\OggS@if n ¾m+=l+=A  H#B.!:?5|̢B5r-wT`[w`N8l  ⺄CvΟGEB+l׍Q?T@Xk/ Iz @(QXVvÃKg](,ugH*hk:l͘h6g+h9nznm;_$Uz<7" (0}:6\QU(A \!6p4zR Oo̭Უ&M~e*s+$}F(Qa2ޑu݉쐓Yz ӳd.FZSŔi VA,|6=Ex0 H!xMwqSR7}Jg8 $~M5.ʓʳ.邴M=4FXPY]ZZ+:mhrBl5)'HZgufPlG\3 4ѣ[hBW[$Qt^=|fr`}ɻS A ]<6,l] 0uYhMew1#?d5*p+x8~ͬUyհYm =tai4S&蒲)ci!M 5W+bt5bX`h)\ t/*pS`8/ոF(_c%}Rg$m>KjR΢+;&ϐɮ27Db p# ;ܮ+eO% 6LvpΡ!$`yy#(Mņ2H3 UіŅ m 6wPl |^ RLP2|mlrd$RS"M`)p]7u bE]mQWW6{V )(i}h%>*̀ECXJR8aq+u*?.i~b!9ۑgԙҌ{0lbﶢ.`G 1*%u5=>"uĶ\ldKwc fd3di'e_븡%ʴa}=aYQXu%UcC϶͕ hv,h%tI .sR DBan2S3py+hyj(puܥԙ7 %czB&lM+g~gخ7rg|v^$Bزꂦ7bs YWSmT'Hj`.w)UycGtʽ(~8n ?hs22^-q,}U n: J 0{K@ UH֍ 1 u=&0<)bKSf)`$P.RUۅZdYmud*v-g';ܽHUoJ~IxVx<'hݵdubhCFXKy+47p9b8ʲ}Q6CJ6A?~ͬB ҅9RA@UEB;mb&wYzޟr]CO}Q(Q0XweG H@uk3\QU^\PRvF*ȃg{,D*ROa#I[7(,?X Hoh!k`Jg\.TJ#F#T0a˔Fs{߰>" )(F[*u ԅ[Tnv6WMHHK2UWP>hUKo\.,)*JVx9VDCr~Ұ;DWpR5}}];У- CR\;i'O8R:CO<~x˦>HKZ9P* $AN*]@tYg[v (Ri[xNLֵ44f#-weX!m:$ eyi#L8O"KWT"~ʒ/h\ߙ/eHFca#Ga5Lh}8LJo9Ժnv1+(C 'e) 9˜Oփb)zUaKbmku01~ͲA$W~^ZOvR/3`pfi$I4zuӦHӪ҈BAm-z`Ɗ+'Z4Rr rV.ilGg5kn _Y 0GAYg47e)m!vFVD:"pYVX̱C*].,`zv鶅T >-AKAj ] ,8Z$Og*/qpBE2 S@.5EM9I |h Ga(K45>-iV%Z@6H\9NBuif򻠘{RθN*.Q( hƴ.ޒ,Sl!hд 6 mW椮-0߱N~iWƭ*$ak4cBXg6L,EQ HW\w8<ޅ@ /iRTW;1ҳ;ɝF+|JGkߧ 4e|ăm\ v[FSϹIyK%\ۧ+] dYڑxeux o1351YL~B 4x_]Aj, %ɔ.mx7, 94XAWwthUb,!lCIVEyխ xGb˽)A=}.N?ݳE@E8R1{N`02QDPWSUbE~n9 X.d@=&Y(;~rK[..lM ̀bu՘n+܃<\#\]6OpC?Љ qHwGHGɔOq ̮B^×(An]!DMRsR'$Q)5lC{2d6qNm zNHv# Xvc[UzkLSY%쾺MA lmX 3I&lTBB哙8.\V: Wa Kx`Q|L~PV'1GH9O4q%mѤS|S;̨W:sfz*9r9^ 5 9HŭH@s%S%-/-E .9l9P@Ip4K.M&ꖴ߳c2E@qbrE-V!BbnfxT5aqJPI P 12$*6CԆ?)9-k p :{uU=(N^sq5W}F {9WQoJEU!:x *ovw}vJC&tC5m+u=WKY ͐4 Hhzr>Л8 lpn޻aɼ!*<ZwH9C@X S+Y-bfLW2fk^z=€w{56i4$0 HѫR`: 9T  $OggS@:if/I{ÞmA@-l[Zvะ,Iwd.luHfg4iEBH}Vz'7HN |BSRBxe/vw\N)]y y@h ^l70Mؿn@q=5 xR}>J0ywj`8??<5[/I ~W@+D8̟ !iwٺ (w0HN=Eph<iL]&I0I,c\m Ճ VE% Y"g`:>5-EҦKIJ`"I M1B2EsZ"Bcs{mU 8-pzbp.ԌBJE0xFǞem֑{$~{^M?FwgLrU q6c;e!9?w1 ]hR!; WAgX1'+znX֧v hU@F-e7Jg*}MAgQ19}Iz_zk\E'8SpSG?I-Tn?yPƋ .k5&%|NSǮ"+z1{h Qo4 AŸg0h!}-*̞/u4*ay<=/>;ʤ;Vra! Dtvғۅ礭z)[,4`%)ә}:.'8tV`嗍0P8qOxSp!X : t[) `kשԷTS JkԗڙAs2yU*\],3'VhCߺ7.{Ƭ?aP|G*K/C0㹯$]U J`d@ck ~YV}UtUvvPvNLiHݙ/",h+ ̓Y9'p\FIoV.egHH _ZDZFx@*QLxS48X^DWpIkHZ0J,HdL[e‚ I!!Bn4Ip~-eBWTsm (@ v0_?^DDea %4D,U,zq}4I[w\:1Pn՘F9YuO`TXo]ʽa:u(;ECQ"I=]!}rޝQdՉL[qc]r$1naJ]z)AW $:\}zEnBLqF*g5opeSXmEqC'=hp&lx._Tn_MRgeauZ`1+|@+G(21j͚]r.-O,l ;;\Lʠ. . ap]:(0J #[S#-uQWԅʖJ[5 G,5Kd+gsѹSEyl}Q,}_M+D0+dڭ. W&C5OǛo2O$މ!9Ed#fg U .S%AB2Q(E]wɱcoi4mA5܎Iۤmh^"!Sb(ji,kBVdN0U*)a-'>&a1Cl˺I16)Ϝ}v^p8F wW=s"pvookh /w]ۉ4ʃ0gE[E]jeԕ0~c*ܢd~Z lv=S\4CWHҌDRFI,FDE7Rg5k74g&6VVj`96 o=JFFZÎH 1e6;0m6?s6Ȅ65^mBVp* [JKz&()^مL.RnnJM&T˚'#&^Ϫ2D42l6 oY36uEOM__j{&L¥`ʳbwӊn?y lJF &5 dכȀvThh^i*]PNzk[`hh+O`& g/T["4nNc,~qB kjժr >3} k *]JB(ҝpgGSTov,^d>>Cq!wdj}zչOdXHds”sDTؽ%%H:f1m hRnU<[_IU,9m:yts~N3\k]Y5MISQpjԺP ȗG 4hT9WϾ3IpKYU]ؾQbkbn=)L0!BT!O}oIg}Ts9`x5ٴnEguByst&z(XtR[aNah4S͖][?\dYi9,ch_ʐiNpntָަێč[5` iRJfHiy)ض-7gBqlӼCT(>&i F,h3HX >'a3mA+ux?נ (k_3K#t$f;+d܅ DDU~&L:n nR8 +ܖ*qwlezҳ\Q[Dn cX첆xw~vwi Χ" {"%>Lkϼ7U@u%y25o l8(Cb$^x;Y~AUYWxVKئa4XHh7B <6 ,9WZh5]fPվu4PG8G^M^W営*]]$3]h\,.!z֘nsX45h<tF`z:S%EFMtcVkKIS nE\q:^:b$Ȓ73?yfcTeU mR>.r1s~8-r5c-3xxWyI' ~pC%X~t- mX X4UlBw3%&IR MɼY 8rV3*>&ZyrT v!(j=@ep&ynS^^'2G$'1,ʳw8BL!G^ ^Vm$w\F5GQ3V&2.,N+tf_+y[3V\w&c:JkE }NI[zNGZ` 79BxX~ZDz寶ԧ}SaL.6~u+98UM{S65vkMjJR,k#|u"PۤN$eӧY,E-և[2u[q^S)(Qh!@(e9WL'~jB_.}g/H=m,n`Y$Ŷokk~U^A+ X C{TX,J 7LO( {JqSyМԜ38;a#j@86"?6}'mVǠd;MaeO౼-UTV)Pmwx]7kwFգ wE,~m"ZWK_NiލYhpm}/IUE5Oh7 & YȢOTTJBH(z*Ί&8'> 8 QۍU;.@*+!`ҕ5IM"ms{`T.j-IZuIAFZ$>;^d^YFҳUAؚoY <1<3ߔ)74ȚnzjnZ0 [TOõ"UxHݓZ2\j3Z y qUVQ t6J 2f"H7B>QlךN\*)ʱf(Qp}j027C)ݩOL^͢BUQ*ံAhf"Ia zr,,+3q3[70 ޅhY n0I)(6?ɭ`D}١mȊ}gzNqč.m|P:U 5cTP%q*2R@0P*\S~ r'E;n ؿ:'nI<~D Qy_-uvYz +tw!aXt= w~',M:L ~nR>'g\ge3aP_>޶/4F E㻓Kpm3 #'UL* ]+}|՜-ZY~DPq^P ²˩Jo/x#mZ @2l P&LTpSg=E:P !(E& *:G)cL@w. $ԿZ;٤eb}XB ;FUŗs#} LZCp:ڗW"[J~ff8џR5:n_US`(qm вV˝{-b2, 'B-eWt;)͵,4TsJb56&ΐ,nIiC 1JkpC ^`B;0-Ɲkwm?<[+yTSojnpv-`k 2SچXٷ8{:Pr֬^ .@ip ~m.Wޗ~` F}f4-i.r|z!Cj:J%j"\:Ψ F;A7i䀢 cRĞ0B -S+y)`"Q$`PѾh0 m/&'Qr^}~-u*On*j0e:bN[HE4:OaY !"ig \^NPqv3lf:#L'ח6*aL-l333Y W홨%d=)fOaYY ;TӰd ͐XI}ٵ7RDT4gH+2\rmizb =t&liuX90j]|M0"/{ą U!L^X"*W/fc3OggS@ifeh¹>͢BEAՠBz&()ÂMN6,j<&l:{!_Lh1[؞ߠ#z@9Wv}%SZ9PA Fz\0 a{Ij*X_'Ky4P柪1 XI:R8XH ςd7f66 5m!>:t}5tA՞~~Rjvm,5ҠK!)̜61dnx4<8E6P~AѢ?o[Po]=:ؗ졾 6z jlrM *gIrtTDTB/#ZN'ˬo颇$M2WU™ 6%G]&Ҵ?4[jv)p- r\1tU>~D25ImM^{y6Eˇ",Cb7o6'Qd|)LIb[JB/&41=:~e׃ U~lA)9]XXBԙgyE!]庽mt0 p[,QP<=BB^iߝypگc9u24ځ=F7ъ):~߫oS=&.Λ<1>V#E.I6cNX*(aZCeqVLI~DFW+<%lSK7Y #1ƶ䷛VƨwB <.A]DU .`ȑ%6pDډ ~AGD¤XI~@9W2ͳq Ge#`~z4)6j4 K;ex(k'^@<x~u ܯʍei%IaXݽb3:$+ֹ$(Dq+SAtRpJ+{TB4ntUnvɖ^ 0kދ)ri᮲S+a$ D%3/7F5)0ʺoLb czfuj!;I|lwU;H<;MQ#]Γ#jA2 ^HYը!,ʒ㪗7Q更+kh? x Z pǢO ^ͺBp**}}mR/XhAհ6vA \,:FTg:ѫKsWtݐx}]LWVTzRAk1y *DZ#\<^oSF ijTH:I9Jhcr,stߜ"JLޏqWmҢ)+}j!"dZR^^55 P<[`i ] Wtp[] $%^@ %v) i#Ͼs 2S>UqP(8*us\NXTCkMAwT >(:Ͽߠ<6.I#i/Mx6!&n+R (kFxVZTVI2H\>LRTofvL v紓dV!\~-u T}U6ݦu9E54 .5D#;?m G׳X:UHYew07^V^şKoQ3Y2 Eh+RE[Y ۙn!мc񣿷,.-NB;wiMeSE($ڱ,[}(PD(@"[(\cKtZsu<~m}}U6/UfK`A{XnMɔ.uĩ WzQ&03rr)hKЪ?;P26*9Ķ8ul!h|Mt>*./8jD{^-iY*TFg'HME{2la"zkum*U@ Cd*`W,i)Bk%f 30 ~m:C﫲6V fJ0G3Xt7I MC}|>ZPY;ef)[b(Γz2)H|3\ "jyM#:!wbsQZs02ハLg>y;}}.sa^\ªQ .,F2" f Лp) ~ m@9UYnC_d R#%M9Kڙ[Bgvv- XtgпDTWC4CFÞP:E=˪L! OJ>ThZyͦ8TaU %׀ZZ:EM(xG^@lpkOggS@:ifނ.ſƺľ qi|̓LZe iňzX/X_>A44ּaGwqJ.WלaOn.ocA>HE+(W`KMXYsW"+B2'5zmAkd>m"C*x_ ]j)h%h}-h$]#D)S:'}t0pl ^6sUk5]VmdĻfm{)Zl2ldU.fAR-#Q o1ԤV @uu "yx:H d6mtKqi 2C:Jg*U$5Hoi;v,$u5Hmfx@2,n(hT R|B;zjpE4C}ܫ.\` *ɨ#JpVQXjǁ\~CWKGj0_-]1!!?JvW5 |^:-!)5M.-$EhQ( 5\-flL'>m&q!T~(A`X"Hv$3ϟt~*U,p9Ҝi``:6nE+gBɏF%RBɴVej,]f (b쵳jrbYĐQٵd bvUp Rr KBd65`*)H.ךB=^-u*] v&IA g@ p E@wGD{Cc;&WuOP h%=L \jvR@h*tkCFOO|[BSkO&Z3[Y[%+ yp۵M+s\}-xɜXrX@4eREX 3~mBVím5r}讑d{z[h갈: ׉}??J_ƹx%i+uKٽ(ln_,OՑT~g֚;Wuh<IS*>8d:t#c(y)|0wU;,} NC,d/v-\|"i=L~-M*nTؠ X\%hBb|Nam7*VyCX;%g ۀP0%lE|GgH9>P%sF D>vfc!۩e2n1aCZqPAߤ [B=Fd2LMvl: a{iSM)$^m}}U:TЇ I5At@LI6j&^ܕ# 7 qgmp)bV\𸪐'C TsƵ&C7P]))(1ݰMJ I|T 6;!$V'GMLF3 9#ɥq$ O@ @pcC(b]0^:7WUS/`,5:C pr[+(I}Bn4ґdgY\0ޢԨMXmM,Am,ҌxP#H%dL?NGJŐa]tp"W3LKk "q@xU#CR mBdJDeQ=a3cBk6k>-Md~_ 7Tv}(a_4bG/5׎`2Йݦ*`Ån_.B|t|u:Pĭs4 )@ ;Z.GaY˂ZMǘȉ^m:C UJAPiHֻ̀rg3O ʀ~ KItgẢ)% $C"YsF-;U3f}tδ@sdNԊqQU{yⓑp TGig0+( Z fYfbSV_X~m.CW^R/ 3U,K!ز}<*;Y7T PWOO*6 Y Y!\)c's*"'0_9 gfkn}4oaȢߞUt\7Sw4H3 7us:)HyX304cM@ #d Zc>ͺWCjڳ:%IXYJtKѠsrU{0U#]fDR5zgR̟(eQ&Z*ZtVmFL /g\r6tđ W~]k(mvw>vʬ`f" 2(ʘP; -V`E6,D"^VEYVP c$S=R^fL<@P4,>?:L Q Luw|]v͓/I2CT-57Qe#J?[@\X,qWDəih7b4'@4[5i}O+W<l\L:8.H8cRMYE.V#Q}0?s{M CIz)&b OgPX5ΜTe}BmB*?'`bǽLud'hOggS@if"M»ɾ˽^u*mهdLBά-ڣMt ~Au(R#V+3 +|h]D )HI!as SVq` }mt}VAՖ%'Llw瑾Re2ytEqC7`COJ08=Z?^-u ,x_Miv*mjnF2z0퟽?d>=g((2Fh-i?lK| ٤—LДR""}JܧOT^̃4eH§(I+WE+\J`@ @IaDLKBE2q^6>2 amgu:) h EBw$괕YCn_fB/T[!R>U'GqpX"~F) G2) b٨`vIdך$4I<]Vc҃iu`{ ;&-!]4LY=FQ Hyp@W\7B>:C հ*=U(H6U:π8io/ӗanl:&2;לMs.SExnM%KBT.gz^tf-((LU Ö:"-Z=#܁e'Ndeed AwJڧQξ @ E>o@nͲBՔ']g6M…ՠY]H&-)r?TʻI4gS& JS*x"p|\qWf[;4̶斻bJkZJ@nT6:Afޡad]@b]Yy7:.v'>ӻ_lCv zTn 1!YE˵*(ع oz%&>BAx_ TBAG$L+smʔiVH.*L/l~3xL3.!1ڪAyM~%zϖJAz-wku>eXO јJ=7>,K9_)AavɅ4B4$HIZ6 1)8EIS,0 )^mAUBW N@4a˙fcp~%@o)Q|*F8 G:݁\ԝ#?WqQQ7#iWk}*is=XN,V_ p7{0u=Ch4";mYR ?af bwLdAAꢶИ1m> Wm~5IWH PSPu۪4-}s4{ V( Hﲡ`iy%?pyqF}l[]՟ 2φ1pP4_rq+1֦b}nYLV=ʶ.ZNՍjb%]#1x}\oIf;@>7W³:šk_5htT's2̕N g.T=IH9ߙЖBPLơv5 ̑! s)p;` se0&c1sdl(vzxV}#0rڷN9唐󤇚/Db:ey*h wh)r" >ut RWm j;M&:-|T~J9wt]Ա/?:$3ˢ"|SߖLQ?NˁS)Q2l"K:oWL˷Q׿vD0515|OtKOY߈UK3y\nDwC:s.̅a9c.Be$ {<+Ng-e T y_MQ*! b p5P-M.tvr>4h.1in*׶nz﷗H} E/ @z$+E{tt!&mjj]j 8񄋐Ih/.Y>Cb:g]i-1l3z.Lpp [`,=nwv*2gk<1~-S|  R Ą *N-jي/[!o8n>pI_=' ;TyXfD1->.ߛ7#3ֻɊL^J_@3x,3%.+Z' *m>o) >o"pluRj`AES(t.^CJ۱ ih$t7ID=,J͡M!Rj:fZ5)K#^%w(!pȦ/4Tŵޠ$XeivYxL lD1˩uc҅T{ 4822r+͓<DfF[`U-]7~f"]k͘(.xy>}}5R%~ ^f@*$H29fwiȁ7UQg)_є.z{ؠ TLMΆ~ke}fgma@iB{5h3m(BzЮ}K͚|:>}tOVG؂pM&0=ȥeY8(OWNt>m:C.ta%HU,@D:ى.9B?JqOpM7z\1,~ lڗnZ]VGZͣcl:7hF\5^F5Dvnt+A[" wLYŎFo"|}Xޞbn؅m Zf+ T-%]S%>mB*x_lnnvJ @ڻvN3Ie(Sr5kp6Q5zBKȯRvpJ* KQ6u܅&UY%Jmiu/R 2qEvd^c mZ3vl5˜ 8a w>YHAZ):ͺAEx_M* kE¾, бI2|G#_qRN5{xp*/M0st,:Y*`hI+n Kz&\_vKDFf|C$v'+7Q+.7̍3fɝs}o. jvԀZ=sAHNYm#c%@GB>{ <m2 =~5RW]AA fJ]lJwW.奱0{8V‡,g2#TvyOd6$Q>uS'_U5(VӬo_`~ѷV^. jMvtzsYBF=0ŀHfјZ(e3LIhn}T-OggS@ifUBȿ^\ t}U:=K[I5RA4:`4 aC3/r;DVR|VepHV}+TQ ^g<}eFNM*gG/ Hb|/F%#|x ǒ$)l7};uiBd$qӐ(& Nm'dc wXl>e 9KC XW,.)9P&ER LW(1I1n\ӏRz(+`ൕ|ښFA8HaLx8k[Yp˒kr~pGV`Z@鉍 ~gmM_`A ؗ$.ݬRd:pyBJNlS!)>¨ 﫡W{ ]`8jWy^(5flg[Cؽ ,BEW%T}CsP'uFb@]kK ]{Ծ5DkXan"Ǿa!PU(F&IJr!t 7z:BYMfZbW?>wA9a [5e=hN붷H\[JhEcNt X*s9Y5;>KG^ޖr?,.{7lX)p҄..F{vilkFLU ʼDZiz+جA%y|5#kevYj* +lMAA.L鵈`Zrƕ#Vi}Q٠l_ P7A лbDyiӗ/Z mD4i 麒JEWnc߳oEq0pqξ>Ψ}[5*I9x50a=QI)XfW`1ͦB WS>Shz_E@\6 BM]v$%X{ՎqH{U1: iݞk̢(')%/.brzƭջ-6NYt+ IuD+`:c ٰ\ی<\~*T&|rtݠ[d(^tVi9;\tV`@mJN>(juD^u[MBJ 8@.)3S~A3To)7~߸:]~T "?q.L/M֩C؞Pa@ 6 P G*vƍ"5J4Lv/uar sv+Nl5)GB[]\t,bT 6ۧ%TXAou<߷^-} 﫲vtAIH qB2J𹩡d_4|W/:$ƁV7VchZq.As\qqJ-t??|v)PoJuA(Nk- Qʫ)Ep>g{4w8;lǓd)S_Z I ea ֒S`t@nin7>B$x_ nMeDž, Ы Q%>f-17-] h}5,sc P2@W Z:%t/:O`sD/ź\W?a Q&wAB@_>25V5rY)K[$lE6u)q˃ aJvDA`v@@wH:r(E 6at64 H׎ӯ;ΓZQ: m*`z>i W=pVءaS0]TY:"y/fYf 6?LX68,X<(+)1WBEYm fՠб T״ʦmufx&Xd &yEfM+R2$g2E)O 0aX4hгf;K wajѿtu0I^t֋[!*.;RK!ݩ{O_.%C Q>ۏD-K Wr۠AT%72Zl b6΃u+Nh57)umQ7g00\=Lzm)u}5ljw6H҄DqIiv?ImyQDLlS <@<;ujJme,n Y}ٶd=h.ħv &0NҚ:x9bc#ͨXҖX( k#S +J&ݾDN !0U`>m.CAxngu  x%h$KJ.5>jWF0w!_7[1&s_PzIZjPJ~U1*ʹl",q +6Vf>P um _7iH4= tqVSj1qzfimCWʔri6k#:>L (j.Z[ Vj bNS&蒖iJ13s@n0JܛR[j*}m8j8؆ćNgj:d̜,>sNU}ٹk:W% |cȴKK}ts#!rgEŻ^*&Dl(xu"5<=>mBx_ VP6/(Hт(=L݈$!ꖞ5+]iۍ] T}5tUxFnBb ]m~OqR''uG.S*-M WC[s L /ġNK>]ڗeNւ RV߲Wh*R&myHcn݌ hޟj ;="#T=,[_+"aĴSi_8<}^I NL|wFBɤ(QWvڥN2f-cftx_Zɂڑ$Sl,@_GmaQ'4nENm%T5\U4o"ԕD*9#4(Ͷ-gTW%٤/gk@уs*}&pZG7<2ziz:/-+3"[vY@I5u(YLTlͦBT6YlMBJcDt5{<1SZ:iR1 7&t O4ԇN%ZDBj)mRDh!^(.^|hb&7{f Rs4+D"o%.WpM"G^=C"PFN PJV _RZ4>m>*ݎ$l ڞ бc$:7_9e7u12ӣʹ~l`TU*^J.d%o,釐MֹBDM3SbU m:T\k`\ٮS=dn퐤lBG~=JPπcڰsI~O-MT6]ޏMIf7@Ncw!]~mw摒yu"wT5vN)n.M*US.Z ;3|$@3W#"Aa^b)s }} W]Ԡ@Ecb&puըVY=^DJ Zax`^aglͮ}j*;mU~ugIBDćPNab㏏4,:WJ}w}|l%kQOz`:96M$?/vk[Cnr~`M*ځ${&+/yd8oM|^( TQ2  )۷,)VF6_~S ;@סX 9D$I%K{9*3܉,a|\"Xv:\*F8I AEK$/Yԇ:Ho,vjszZ|&"+\v %3n7b)٥*w0%Fbt`I4͝1* Mh+t;h2>B9lzNAٺMLtVS10yjEVQOlU*]TSďT56ُ|X|]kkO{ ߞţsQ܃K*.<.f &]{+D@pz*@*3ېcZ ,7>Ʋc}5K_~KdA p,vT\]ZUIHZNشZK*` &$Z=*c./ K#Kt}]fVG|Rl-x\F#NDHˡ]\6t>>fɬ^qSÜOxnGqC e;#=ZjUȾ|!k*ToDO5Z@Dt߼-M t}5sNjCi$ww$t5NkoԷ7v mw}j>ZE!^dlNg %R.4b$]jz"!؃G+ H7}Q\!YLi GXE`FX:YmPFeF2j3,O-] WST+b W  v3F)Һ41׹RtL' qSIpP`:-mx>%Q14յ!]ɩ7 V\ : [ͤ*ؙ.̧L3 W)KWH_bZd[ۄ}: 5~|Enl4qƎ(Y RZNEo]xP U$0Qw,kRY -m&C u:Hif &uO0'<!*,]R^vJ\dQmJpBCzFA0&@=u3˛QEm]zEbPi魱А̸Џ!5ܻ`F1N, $ >p2 vP|ы>-S W#7T3`XH:ߕ[RGs_{CRAnEŵP|YUR=js~"4CӑY޷y`/t/z(͉ JLRVݪxye;B Wr+='m[ֺX݅$u鼺&&# 5DGTe*p6æ$宥rizD3YЇS!Mfd˙1".4n*#;]]+5i]{ޚ7|oOsf^/p'm-} )KWzm}$4 蚖=X0DӒg#Fzм2~θŵO T[yLۈX1"iX;K,:}`;艝 e $t߷nL ( ,ҡ\OY{%P6}08pHJ!Ap/ ÿg.C w&􂴯LVg'<Z#K<#^T,]" s#Pq@!: UǽHCWky-A3HCskv|@jTp `b(u?8F"偦8~6U@B8SGWR4J^bӼ| p3n[g8N">MD {_ B_Iدt!3%'zC947NX8:Z7vGn N]4(|h ~F($StTbmnʍQP^Nq^zgwEs㗰EX:^P׆_rF),m=F6'-ͮBwm I`鍮- z| #Y|]|YV=' M=,'2=>\7}5lxk6ik$:Ikkӗa+[\\‹覔AoIՠxy}>4$n7BU S K5N)+"Σ62[)[qf ǖfpt-7e{bVڶFQː E 9{OggS@ifH{ĿºͮBT mN`n R aL=jY*y+s(,aM0#CʅP΀ vbs P7ɭ~߳^[>O. m/=aU\ <QN/##dAj'_bQhKKQ&fSkK=] C(Ci@wB&Za$0UbVzX5Jr+orWAįP{U v^t$MTLM;Hr[H{N֊ Afw|[?n.+29f׭,,PqFF*wM6'WrBiA B 4 KTD6Oy4W\zdG+P<) nCU oTJXВ ci:\)gOHkgݞ9B o{3}mW,1gƀU{űnfm% J Fv^e ֜mBVS)/(.]45>R\PyrxV=;x(d'(njf\-OD\A8lSUvEdz%znH'd k|^5փ=T{crB:ψwJs%oB^*6zB`i Ji-}`~5³u5   jn ޅ|͉q%O)VSXnB0К_M ]\vAQnmf _ۅ{E׿M.R=ٳ>2ϒҢ%.kv_PHD̵O>_ḵ#}·RBC%pUz6dv؋dCp-ee^>MQ:|_ n ;ņ`X,u@tw$Vo*h4iSn*q[ҏl#`YM-+hIlnʏe>dۡ~whŃ3PBPfB_͘ʖMX ?lQƚAfq$6P/OlF+T:-P+Pؕs"vDxx ;>CM߯f _iZ0M SZD .- 6Ǜ:Ybcw%C ]ЋFSJ}]Lm̓^+չezKai/-I7wTmxZ 5LY<9ri#&6;մ`/I&~gmI6 WFfkXWa(`!E 0!iBJl&`k3+9Տo޹m2Cjf;H m$Q+HW!#{Itא$KӔtO?>߹]@mteH_Gg :@ϒg9 s# ~T[\z~0m&t%X&)6=z;KD~}@kqh~ -HO*{ք]q>1Tm>}M wwG+H$j=}J?z΢MzVк"Iɯ$IEM58"oD$fONAU沦O`\,1I9!'VnXtfʧcSc:-S|:m%{A! 5j[kZ\E-lVI@6Uj燆 J Ր JSRCq.Ɲq5q'U`OOyITSqRV{4oޅ)=@J9QBa>M陶]Mk ٌio%z,ib<|QX7* ?7{u3p: m3R)'[2.fK(y욃^=vJ5ܪwoMyPIoLnvȱAyDQ=2rǔ E_ĪhTFE͉wJT5-:)u}5ڳz&Ik! oܮic!n^Q2a"AUJ; ~ۋ[0T\+%(JN_[ :H#XX>mC`dnj)z>WGHN wBm  "'CrQK%RLeTPdn`jPfQ7*b m.CEJY"I@, uLz.2SӭC*Gͧk<S^]EwV@R 3a^Ld4hTX20|.\'MkvUloM:o%Zԏ%Ooԅa qkN$QA%mڢ{!8GJYO@PcOdi'mB"}Ji ]Ŏ5: : rO?ӞVDT-ury:Y RV%i3~5g=))aaX mEڟ3* {cﳷx{ O9L#at[W;4ekKg@&͉qKGYeeKT(B[jݺh&C X{%OZAdu>V(<`J J1d?_˕!Tq٪: l Ǘ=޸"eAGf|u({V/ xq0=I[F.F6oES X]/|%3z~.<%-]pؓ|)$ `5`Tzoqj+[)-:.w6]H%Ux.!hrՈ A\0<*SC?Xw{#46e}%8A~p1úA/埓~q<\W4OdppAVi#&V?Өvv#A\w]@>S`_  ߅DMnJl\-M QTt ۫l朘禊H;|6[§ @,d@(j5V[âdO[#bя@9x_ҥWPP2ڻ;&S38##>}N5 ,)x KF٭%hID%hI'I/C}<9;Ұ_7v|e&G_F:sp{t+Pl]GT@ | t?MP1W3>_0hl޹- ΀t$$ p3-ȝ5xiB,^X=-Bh;U.1S?>Zq8Q3{7ͶE;6ĢG|Bㅀ/^y#g@.P鹥~j;Dp !KR-5l 'SE@߃7H6 GR*}ʳ:u=BU m_i"ۥb.=@B*׹O qaNS0m@r|]LS`+@(6V4뵘d>-sհYRa)J΀`iLktVyXzK_iclyYpn"Npً,u3ҏezm!Ҿ{ce74hZ*odlčIk&N{١zyk@947{^\>b{.ȩ#'AFW@Tih޹@{V]C :Qxtsj<mBTnx9id m.D]ֺͤ\Wm"rʟ{ ƕ O^ !ԻBi@$7`D;%1lS;έ ݧZ VU83[m,+,]WyG0+/V#{;܂,ֺnI\ T N3ݥ`A D+pRm 5Q<$YȞq(yZiMŝ˝8u٤ ψ SA)MQTg(ªo{j܈AaL-nkL|/'Q!3W"FTbt#qp3 ٢Z"k.|`r m>q oZu,2 $[pzEi1{!5\+kE's*t+B\ٛrҩ+t锻T}5ؾ/P>Ԧz$6{_}樺،ё]?|]TŀaԚ 0Sk2z E Y;A*0n' mQ4  ,; `w7IZA&@I׮XfYUpAvC,< fEA^\U5 ZǨ`e&sMuo.feԈo<@r%>xn8 #c1/uuL)0f@4F]`!U%4_E2uiVɈsH w؆Wґ$bA%.Cz[:@,1>a7$ox+p6 8[RoĽ͉YfK=y!;]$(2luXC2(̀!7Po\:\17u4$ h <ީbY("֦4`#60[)H)/́%M].j*l6I n2u 9ʌbPR.BDFS95x&@| ]Zڕ^~=m/|Y؅qUOrK#2z>ArUoXEkl !PީYvVVQh!̺uzQ5 **jfӚFG\f{0Xyℾˣ8A!"4V\g6>}t+#A-cذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSJZJ:8Lz̩L.,QtF2EPUYUbytd'+S9aM8]1E]WQD}9-)Ƒ カԬYT-*pMJ-.L] dm NB*zE # ($*Su b f(B*zt346cޣgfqLg-p!(EFFF K,#eAR0-`GQ8 (:@N2 eV˜@xlB'_Y/k@p ȑ,h, ƀL 9:M2|h.zM<L`HNSoB@ђ lJnV@] DqQu4 E* -۠~:n3 !+d4(D} @6BTȟ 8zP.  DL xs-2J`W^ YgcXi+RJݞn EuoBYmAha@YH .,]W*d(d?*Y(ഋ(Z@v" N@4E^H2 @* @NRx#Fa2 f.@}  2)!@H `30OPJ DQ/NS%z7w)YB! <䳘 PCW{Pn@5 V[HE.J(s M|E]EBXL4uz#C@FV_DD, Z U ʢ" dd 2Tq?j<04b H0˜I T" Y6Pd1P)yqE[CH:LI9!$zUb#7K.' a~ ϲ)$ʮ>%f2{)$`u%KbiR ӠE DQD0MV@$5 (q@d_EIHY M@Dž 飁RL8P  D}5B-] 40N ~PV@iIX X7C]BR[ݔ3j?8~r N=v'"PeJ $PuZuȄ4]*;@sQ r+ ]_qΝb4]@6 jq0 Z@ P&恥4(SdS GҘ X0s Tc؆GXtZ %Z &7"a3"LCCvx5J:7~:Z (J5Lx$&q]US)(J9i T@@u 9@e7 B$0BEu5uE 'Mv! CDP0'@+|q}řKAEVK`Ӷ䒦"ɬfs1A+?̩*NUB׈ٱYZ/iw 01VbƢ@Ǵ(*9 *Zb& :A5 JdB}T$.)?> 9. ;4NCeB} #%=d 1P0/$)d@΀sײlyi ++j]U -: .Bo{ APL$[t֮][?FG/}/Ĭ]|QbXx-2h 8 VDpᡀ"Nxj@T\@Ae-L@Y\3 #d@4^) z ])8Ǚ Ta>$$] "0XUM)I)ׯNu;[WqLh=$#'%K4UCТ\2brR -Rb< ZvZK.:1X- `bQ#Q";D8.|` 5V $052-ARF8 d2H80H@}Pm=0,@J/i@)tsL;H'YZ4𐐹:F hֹΒ \l] ;k-aB i$Zv@8d"Q쪪PTc7gi*)h$Ph5I:6ƅŅPU0NKt! 4&GFXG h98a 1x~G)7M&fc&:AI}֥`Vsѷib4KkA^sA+>24 2!]Mvuʨhv( gu`   > f'_ S s,Щ & Me#ZFa ȸd84Z@]Hh% YB N]oGB4Tk= R,XLKb5#3 +rQt B\r}v:$> Pd Z-t@CQjSP!b!VL@l@DnH$hv1hbOH, 2EL dd('ȹO"W(f*g yiR!oKj)t銢oo%[7ùO2wALjǵJ!X~S& Ur}M5Dde I.<Nv 0s&`7DTBVAfU@t\@,NQa )0 v4 Pd96 n44q1 q>U.VQWI @d"@ &dF0@Fpo* (*%6&bIF: 846`{ @;q@A =9*eY&W.-P%QHG /Pd!G%^klII MrA:2Reb!Ijz );ub njW8РaL ,z 03Ȭ`,htq 4&L.A*@a$ EhFI.V9k*JmE=PX?_R,7<r\-G'ֽ02]ID+zĘrmri$NL,V>(H 麮v@Psi "84<DUSL E VS=DS #(Xq& 2VZ b+{8 @#qLQ"*&%Qv EU qbaB`(r d., >%0I@Q 8 ANbT'.2*TJ)aٸ[7'VPzd PP-qt&fm9#򯤜MOggSZ%qΞ֧t%I;JVŠ#@Pj5dNbb {TPba" \ J < r~4Y&b:eJ6@l `8O+s M,QJy>D-0?KR6%v^粚)0KGJΰ@ E{"\܂@bUAT|ZUV,<+tZ"G?ਖ਼v_.PC0B@bQB0¦ F#Qh `t;%}! `, @]Yrj @mXQ~ G P'W.l͐3Xiߴ2a5~2l)%y|ZBVsaL: _|,jG~]0h9NBiԯHQ %Q1xfęj]4<@~AVr|lX @Y!- H@]h`3(D U 9pafaP[WPv iPK}M6Y0 8kAb)_-RW3>jZ`Hus_V>E'Ƙkr"ܐQ5 K *uEG?*nX,*8(<ӎN\Vf\ %@(АB@@w=`@T}# |{Ry Yy1c2\>oMxo1T0 a9ܵQE5Ij(F_]3IC_UfaJd=,*Pu9Ep 8|L@hL#e>$)b [$]b(t 0, aaP3QZ Ƀah,dk7L-5!!"D˺Ŷ4(`fX`eͅ08SW#3%KU_y, A ˇ},MA ^e 3*PIR dDDETPJ! <yDSPwJ4R@ld]I`g0F -B?L 1JpUqJj8#" {ةlԶ^MyǾPۃ v[q&Nq8Q3[0%ß K? $F`괴!*XSjw F>@13,TښPW<7J gZh@=O 7 2K 3ʞ PH~``v4if˟n0ЁBMݺ7Vog\\08J, |O>%OPNlfB[7a#4>,0L MQ :>!KDMU`7LLTU!D@%zPP@@@K]0M@,;iE @T9 Cza +LpOL䖞7 DVM1gI]s&9*VNYgP5$X'Lt88^08"1 %t>JQ` DZ9Sg@\3DPEQ̂(1FLM #Z`l^ !z.HaY :;ssH "YX`!  ,ní=߇=_T"e_N}Ƒ>+D[&@}_|@PI ^ꫴBMH\hXgdP&  鴺d?BTa*`GPa(⢺FM@2@ Bwh$g@kX,iQ,='qȜ(4 QD<4wQ 5:%k 7'rIa?9$+b-i>LJ8kW=Ap)-%?$Z^{;2K&Op&PS# L< F65MJ0uYTV ⰉJV0`j-Sz@, 80a @ ε!@PͬL#`^) QBmQ!CES"T ]d% KjAl2//0fvf2#N qd^֧nC,+DNmj2p-HA'3l.Ոg3fv@h 1M s:@F})K( P2Q6 `<(T:0*ix2"umV}i-̂[U-ΒP sQlq9Τ_.5pUSnVXD;pMz;D@~Ʌ{L$ Mr!1 %j E@Z I*4LTQNG&)i d=@2b <'yPb.N jpjdBC.vUV-6ss5f2ˑf4'x@Lrޓ|6Z"gLA^͵;y0nKO!5_aY!@WЊUHxY\8w*<975 )E'uH{i­PEb!@tZ2hG:9TQ XP.He1$ꪓ3X$#PyZH: ` 0"4, :i@L) Bs=А3f8+좬D|ASNx {U&)h! f7 hq,]ʴ;e}J00biEq>Ʌ{18I8\`}U1HQXL,'YX 0m5r^vAσB[%#HAm z4`q`:Mӎ1̨  $dDaL$;FqY,`Z=( 84!Q%H6Y'K|hI}U%e~ }d5% q3y%g (݅@Ku|S;C/9OggSZv>֫2A4W5e# Jh|5XarY (&&bUis3] (3:B!QFS@FN0/0B1.@Y_IY_8`,yKOehRGGEᷢq^tƹ:K>^`Qn0vz:w;j,l-$'%BpA*YSvA@mJrp-UQ/ 4P Nc6Q!vSP US38N,PAk5%@V  `N(@)GKF@A/DBU)؃9}&ϓyW-sGPKhKf>4rf$1[2sXI)f%H8֫6A#´i"4>J]e A.<+$HIkt@k`X#b v` b*b@ňAU`-T{%``p.bN8@,21˸¬7pnzrJne\~^-XzLی\22xnX ,)%aXD'jI e:wLePtP֑%K Ъ:jTq"6ðXUp2i1F#ikk$܀ek Q@]DQ[9P0 3ywHeidX* ds?W* +迱hG򓗕ڬvb$| V^旗z|YDļgzԿr4uBޘ#2У&mA\~rW ^eBXg2 UNG&\a7NH8( DBoE,hdP h S̚0")F %r5K-JtG 5u}e[TeX^ڲ7Q1/6b1 ˇ`H10dw\llI'E7+gdՂ0I<4\|b\- 3]P21a <XN^ThQ'!(,DLųv1SL PqXL?<= @')puGG`nTH @"FĴ-^J)Oe)lodho@)NSWJrXeKRF!rT=XŹʠ, UK"aš[la]"p8U50t]UtBTQИˠ k 4A&L3Q b`2 NɮZIʢR P,Z7  slt* RV%u|Z&_5-?$V~ڑRٶ>-ٱ8>KLf46CX&ZUp!$`SZ{#A؆4rlg`BPԣPD"3$NSx* ZGj%UXհM@PQxnq<,0 4S &&&7xN @dN[г j>$X +{_m%y_;qKb-gj}g:KӗL c@ɦu5xJ/C| L?W['פ>=YBȕ#?^T2BΈ* RjZ]W%? g"X2@2! ɹDV2Y(P, nZ SS$`{ `#Z2t0.  UhoD77Eo OTȆ k,FSm_oZD[X;RuTj. % 8 =}po% ^ jQ\!GlB0!kY p:*]? ڻ:iNL@? & `|(o $Y!6@ `=,d՟FjΪn$"KrQf }2T'Z)Zɒ\伸rvϑ) xY<޶A͎4r*e<a 4\a?mh9* xVbOZ@I\ZӍj")Aauet>DB s@4 #0XZ'e<D}t#4|ˎ0Eܤ"f/(35ofS_n^v.몏s*˼{!2%;<Ɣ#ƴ$J?I[}֣ͮP~ĶBH\ n"뺊NDLsEUH, %6u 5"AY 42@ -J(3m:dV() @2̀80MlUWeN^x=IyB7 hPc,zA9*t5`Xz1&h4X>c/PRyT 0R@ <+$F+R%?4ߜ `@`(i89* ЧSiځY8yt0BHN95)MɄATPՐ]؋jmnh*3j,}۟bǫKUm})S~jcD'*)p%GQ#v10 dgZ'SdԀZR8#kQ ]UFqp:bWL84"m R;G YKG84c(+\Q9Zb2?8UaDVK4#цEL}F52 4&ZH`lx688 xNF /@ʔHCa4(Z7ƖYE 3=kX^2t⫊7F^6[#-}@jg),m ıԝ8BXEoÎ,?2x&1Ut`X DS|" .v1AA50Xkl S,H.%``k0df*PW@ hp(2aF?Roe1fv#n_ Xn-/s늆ܠK!JUlNRTE [V!D%uf]N\g_F0Ip|@:[DbIQEKKK3rF/RuD  (;EBl-STP10.-}QHaŸL]X)Bf}C&FcDjƭVЙ5mg3k5a?lqș Yo(垴Z0&+5ʭڒ'l5Ȗ{Ah|uJ,V. TP֐&6CbY@(5~ P;]%pZ:@tlFL ,b-AT @6K`/b=yI&SIE|#˸W,Z+[Vl*0[P\mN֔-2vP%Pbď$ͨ8KOggS6Z*<4>ʭ%@NvPB(+xV"Ahix@Y308X(1U@ 9s: " Eq< q` 0]}!=շ(܇3Ϭ=Ы'յn*)s6%ʯSyz>&Ymh5&살֜XI$$E_s>a ޸u9vu`"t\v0 Lhcp-X i:M95+ G"B#U@)Xl`+0 FD]/ R@ @Y2N!St" ؂ *)Ga WaLgvVsk,+#n[+sfWg\zcLF4Ζ\J:׾ȦĒJ9AK auT V$A˙kNAL$dP$p 6Qp*A =K  X <#Ro+i_7ʯ +xIsRfX >tnRa#4~ n5 E.('?%90 )SpֺBA%xN X.F@hF3@2OB\ JEV(hR}uxajnAu߾ پqJ0\YVod:*7-@,y[LoUf۽Jx}Su09EMI( p~uE`fB!.e$LCB`L< @t&~$o Epa @*DU@qAE$*1WzX(`#6j  @o&L8x+ GiiU[:Pε*AˌI$C4n=vߍln|Fy1I6WYAkVv5Si\ 9RpW@|ꡊ 2p ,*ZM<9Dyh@j XL&`Ujs C hBaք(Y L#4ĉPlB," Go]?%YBx4nD/٘⬓gU3qW|QW/_kёU6,:G6p/kꗉ-YwK~'!$usd؆Ґ5QgVV13$]%`4?P˪lPaSMf7mvP0 UX ऻ N8IYPN*Jh Ěqfx!m^k&^yʾ܇6ʫo-gG6?K$_ n32*g*u앵Vb1S"uNg J ^ YW]9TvkQ2k:ǔ11PİrH ѩP4GH L05xWU ' @Q 2T,g!&2J<D!@;Q} XR\iƙkhg.$GT7-nxosN.'{v_Zp`~dO"3WWWצwY)B(I"wHmAM#7"mw$ P*%n%MBI %Hqu, @ٙ'P@m]\ 0  x ,`(Ę 䦹}\c jSQ\FE~^,.>Yo|pR׊Upk%ު"e-ruc6BF,<+1@t E3*&ݡ "n! ((jb *J[@ݤ0G`c&@ C D `UYN*p G#Oz^1yH3W"&dW߿>Qoybιݝ_cۡ4\K^oōsU>"B:2/'A0޸%N¤EnO ؔ8  Ф&(* 5Mc3iϢAN7AHEm $s])< 0N3AYh݀`gqgHZ6w9>hi腨v*?m3*Q3ʹ5ΰ퓕cBjǀ\&v҅8 9ƕeDn='i2T $HKVCզNMKUp&@$0Djlc 7 CU4d F4up EaQ#6HW%yϛ]|Sc n9Vޖf7c:4TIStPXgVXm"Q˿e+f lLb9$#a:  )iP "瞆 t~@$fEK])@ HY@!9(Mt, + J! @z6n tB.h bN%XvЪlHJ!B5+Ҟj[2!X<;ԥڛN^1Do/3{`bubl/{;2TbMF 4~M#ٵ rS\v& B™"\ 9Sp/@b\X{ X*H] *58*\0F4 vQ dYA$vtS~T&ɐ&Qgbӟwjy:~,MZ^nnIտ#ٕy>TeAny[HVij[}ǐ,ۢ^-M!NݶylFh|@7 T4$O5ii U hdetY> EBy0# ` .q3ž<!9k4adk1ϲ|'f^FlDkk}[e*/ca>Zş6/Ad-Ri:PmMQ%M!7GrPGfEKKyM\b İ@܌ 0Z%\( LAz #@)P@vtX @t1D&\_<٭fs͸B`X^~w:bm+§F^يPEM!;]W*(3cenBcU:dk ~Mᣰ%D!:pMLRA ^gP@ Q X" QT E0N*^'4(!@Z *1@B\G侶E׿V*%`^Y+ۻz_~e.6͕i&ۛo thr)J@&jo.0g}B~ڂI m=vK]Ac NjKb-?IHE'k Q@b j+]#Z@ `0u8TJ P{cvB&A;Ma~ʣGֵ#{qJ뺏}]hZ}E嘕oXIJftQPMBŲnɷWA/4Y?OggSZˈd,޾9u ܦb6s(~Q@V)X"JCBAH©Qe %6Rh(At ZB D0y xJX,Jז(3R1h0GFϔ:Jop2/~M;<&fb |F=ma򳷿*&sqWƲ6BB;̵ 94lb&iTEd NKDI?`é)vi7"84l <  mR t5Tub+9@~Ȅ#3>M2o: ^M9h\)?V2?P8VTeGdwIr=H|xY(ّ|"!`&.3`MQͮM*]"7eMk BBgeHU"R? f!SA}c"R_D lIf.n Pabt3c4OtUS(iSnXX;3wazYGb/~A55{PmR.AdLVdAȮDxٲnlȭݵI TjaYx$VHGDA7DD bTPU}"7L@@V l>4%I.lT{܍VmɧFbDeduqYyQ6ֿf%BW*Kfn|xĿߟ闕e>b [&@@%~M#fMS2&iGM$@`-'2GQ|gb90j˜.( & 2  \a`@4*G±so/{락:iߝ"JŽIg$ڢ-~MuY`-[}ҋue?L%ؘ0}X z]p)AG{}).lcP^M#d(d]4@UbHYA+%A1UTnj 2PmqJ{@A5I@= H&n @S ueAmvh5m/2{gqAWKb3fO˶e 6gk&.WPKϫ 044D|VbIS9k/a~MQCAH!ڧj& B2$&%J$^dT4j1p6%"EcH@(` 4& X d(tTP ]_R c#Gt1&I]-s7hoTjn}~[f~)1h!U/{~?9FHf'ު(+K|3% #_ؖzSЗbS S8>#51 7{0u "qM`(BbQ@չ*j7,1<7ͱ4D S*Lf\`@YVBAXX X c:53*1r.%UuFl!XMjdV[Źr$ya?cn,L!4MAݷךܡ8OŅŮC"ǒ6!t>@FEag`ItCO@$vT62`IUT@pH i"#\"ܴJz,xCZ HE2h+iJPXdҸUo|-#ߒ8\Յ],*l.r{ų/J {8͔G 6Sеs=^M^MG!lRȭ>lG>@Tg%1X*YASguyeUA1԰ZM2A(kȀJ&sl 0B3;+ K6TYElB6K]siy9kf|e_|卼zKUF ­V޳9sZuUҒ 4BcaIH3Da,\p g?t7i7X XQ0i"P@uEZ:6E& s:w( qPخCcJ̦ ;{u#n/nާVog> ~U}u ;C,G'W*9k9bFܦ{.Ou@4^^eA!Z s5D|*%&M.3$jw`wU (bA *@l@B)T8Ն@Z8R@RF]$lgVجTgImJ߭cި\rU#-^m2_5}%h«U}qƯW_JHI ZodWu,osamÑLBI ~%fBn o1+p|5Y$8XJ0**XsUXQ@1`s-#b/0ݡ y4NM(uF374!dJf N ަ?㫊Uo֨k=з\͌獮J,ȚˡÕ8Fɳu]2C +/N:$S m!{(wIRdY$Q%$/L(XTJ4Lk`*` S`8z@mCC( @92s܈(bLڹѝ/w;5v3y:V4^|U%S{ f5Cn[j,W;nDR-'j]2:4C~=f3 r`Kj!4> )%$V8ptC@љ #Ʉڲ"L= *!8 ,&ϸ3LCI& o;2ɘדּpa_+T>ȳU\z䖓iFnUB6aҰEa*r"&4JvhDJBrrsh|@MeBZ>($DD+IWU aS911" @9 s @&T bVAG+*pLP+'|جCI/^/g×ޗq1[^T,soi%>kx*X6WGAM [;L~؉:cNhl6l 'M-00ȭ-g3+-kTB"D۾LfFES:ZPiPF< $@`ÁUnNT| c2aB, POvL8~Vnc|Of+COED sungP.TaħH.{q8ZU_uvuJ NCpJu q^͡52f~?ݙ׸)b,#u|&;!ٸ}--pb8qOggSZ#Rݞ--EC3Cnio1hP[X&hMpj(1%VaԗI$LI0쎀h8':u(hU=.MB% L'mӪ,]mfojfhэUE~cRM&FF96oIʂ&"ʸ{|O@c5SMv8/,X2B0Ia8VmIM!Y{i\23Dk(ZtF?`H6Xl`w 1P QQ6&"Y,@Ln18`g6 6nW=E)&*t\W+c]bucӨ7"7)z-tyj/[X{^^Y eXT2RmDl7&D,㤞= xliar^M^ͮB*M![BJ%g ͬHN+E?tW42]}FИJY_( U<*V(tL<J' ';i) }*1ؐ\ϩ~wtMTWsyea϶Fgd2Pin-ݎ>Wy.DFzu7rpLoϨVb FS*$ 5~VŮFk 쭦A B* cZDr 8MŦ (ŲZkFHP:!)(4qj@3@5,pH[N r#2B+UZt&3\PFnJΔA7>Y%3%)d _ "eU,%  ~٢(`iar4CHNi/"P\[ @5@ @$u u0I*H5XHPGXJvmmD"Mdb# EDz+d0emݬm+h*nJzk.+ӓن0|gdZ?I ^Вv.HR=.'p`=Ci-c-+RZh)8b((PL>q"Kp J%)@ɼ1!8VkĶ`wfiD tl=FG ӱx`Pi1M.਼D8J _O~_ i'V\\L^U]}<_a1~cU| Y ܴ N$*X}B8ωA]Jg#w-}e.! ;a ( # iBI%9)*`IT 4qu`XTp`+& (" w0Lq CQ)0Vz`Q/Ru Q [JwUQrh*2|˳C}]M[^\L<(rj!7gjm5I^d-WG Gl;2=d)f">-i Me.;ᖂ-4|PW iH(D mUp*a 4jD¤jRHIJ`"0@H yi&HIiWlCsi\d9v-qëkި.iN_wJ27UIbʙ6ɘ9ʱ;V%P #a| M-嚙J:R@E5PJSR'/%@pE2hA-,K,` e@΢2@K?,5z@:HRVxLޙII25VSw2h_VoltcLP-Ҹo~6o+]Tx! . 9(&Ug ^ȭZ2+Ja(4lmBYWX&EpPT\tilGHALVX$R tk|%KmPd4:SPa61qwubϪɼ-~ZƒHq|eoMsUgM#TF3vk`n"jm7N+,P^-CKl30*V0+4gaqH:J$8IGVh [}d@P/A@!F*HN}d Rd.vS~%3MtrS#NŐ4`Lt~\0ltl,FLfuyfk1ձ{YvWf(]n˹-f )3} 02c%UE`Ő[RAj^MyHBnmNf$&"hy$ ͡!ċ&`ME[: ` sG , @f2,ڀ@sC8d~MTϐ{e|e}De_+^ͳ>u0'T=yL\&svh?=uB'[gPG\$r"YN+`;s%|^-%fHBnom CNgUZ(B $ YH?`}.w]P} b n䀚p}a#ur@$2CLH! >s&׮ :}z)!ܱ[cᛕ7b: /;3Uӣslz{z0i)]#D|\eٌEf\to"َLJ!}-?_b2x[\| ssɕ@W1AV[0O|8dG8>Z%hR Fmn"rBR]JrV_S() Z-F-5cA]MҚ3-)@h `<; Ynm0 ʒ~m`fG&nM8_[HQ;o ▯cEnS˗ыt.l$qϐ,v ܈"W}nC~]-*ۅm9fV4!@bݐCK^hhr%W: Tጔ'\HCI$IYOq-n(Xa8%}=xP5$@i. cn2/bC@rF)o${ύ# c&Z_~Ueޟ'{37ᵤ8hxͫ8woJf _Qr$zڲ˜74^;"+\DŸrOggSZct>MZekEelo+,-)#HgCXȅgKDBiJ40zU 8T\j3 (0dH*U5 p@-J VR/WknN{mۦZXpm߭ڷgٜU2Y}ּ~5Od#T `J/eti)Y\"!xzg3$޸ìDq nJb,4> /j T M$dF/C (L N]}DBm"&@t< 20M@*pSH9C/^~IrfsKnTϥmQi+{3Qیƻ4߬ H4y40WTxV1^+vK.ҕqIAp`43jPMݫ-w BaH2XJ,@+/e0PD-1Peb&  rJ "dX*;¢+@f* &vgb&N5+s}3^H۝W F/, . i5ҪQxA|f÷*)"[AB::^m2I*M#weY'!+g VZt%$oU%a4xѠ~ jX DA9' DE| ,HEKy#QtxM4gh'n&3<7z6 B* vgd,E羱Թt+m7Wۘˍp@l ^\oIkO5D]#r>-ےu@ni5 lB%bp-45!'?(`o")UP2֊kP4:h+h]n(IZ!ܩǬ00e/!wT4ZM̉/(il7[2b[mg3籌$JɒMcIeiےw R%ǭRíPZe@ ,&MdNAg?di] ` pJ1@ duE& @q MoTd-&GwhXy(~8 Q:A2s4j6_݉U?ѡ"32Ea\-9ӧ41'H-nvZ^&j!qipBF+F&+ޘeف&,C Y[5ì:@Y bp td"pj`M$Ah9U@=hITp<%Pj`. 0 PH 6/JyU؊oڶqjfb]TFMgc_;`Ϥ4kqJn53"l~Bd-PU1a(!%4ZIB {5íXD]ea RA}ZS(9͊S@9̲(H@= r`*p9gt&& ǺӅ1YoG1XuW)1ڟpV[ݚHu W3o;zMkg#·l3ㆶ4N @H׆\eucX aʭ E|F`q(RRS*B 3hPfQ@ uZ <бiCY 0u8hP(KJJ7mGt֦4Cj7g6+co+uҟYcˮ^bM yNe‹'ndK˨쏯A/pKVV r46ZFȭR6 CYNܶ֗]Bqȳk`"/5,DiQ "Q+FV Lb @;6=v硇l";SJ,=$壮0Oѐ|~AG>q~|۲C·=v>G3] &EĞȞ= g"qU^J*dRA\(*@C\~jzML֍b}f/Ia|QCA.,QCI$^SDP^h/ڢ Aa&P0NfP/, 8!QJ!Iڜ؝&NDczP Y^~x"6Zugֲɗܤfrˇ CLխW)W'9kPoH޳sjpGr~0"w!eY&B(k)0% HMT$4 Dpi6Qi6%2"Q htLhZ@-0@>K FYZ4dW]Xcfz?2j2bBŪcY1v^qΚ;Ǹ|}\ ޸i6A܉X9ܲ  \x$F@K+y?ž ;s\h`ۡ Hs3    fPLӕOc`N4ɬx}l''={{a[;^rlW R< 3ʮ| uYAɤ3XV?X)IֹW wǬ6jC`]R588RȒuRBmpFժVbQhȒ"0xbIphFAF3iذ4D@t! \ NKX7=  XHр&J"DRx K\|LPgՍ挋"J5U"+fEu[E$5dIſ˝a?zBW Q&NA1 iM9hxq>-0KMPrAZR$?N%iSfB`$v6ӎj*`F b Pa;).-䵰ނ١hEe lc~.ǭ>N귟ǺU^-^ScT.ˀޛ'}#성':$6C(/;(-3V?q~Gu2I PrVˆu& V͖u 4ܦn.Nf`<jKHKZT:%/}+JJb@0(Z/ ;Cs ple.@zq#JD-4v(f \n)$I"ͪ/"\KXBfl9/Q9*ruvPϝA)bgWo+sOg;kI# >mR%$a(t܁\np@Mi\+(4IJ>(s(8Lc,AP+"lc*pT @avB^/T44gxbC3g<^7&mu^QGl_Ѧ"2yu2bQ*7?OQ^fGfdOLGT@nW<}Zh??x<*_3mH]0e&b܅Sah*HHG`AWj) 3LXD pZT  !&" FhGpVPg gCvs x,l)9=Xc.ͥޓm"# d&rcY qqR,Cq Ԯ|s+qqrQMt$mysUYB5P\] sO;\CXI kR,NQ5bbg"& CX+T8mCF؆[ߺnJJVǣIzϓWj&Erg[ |%)Ѷ%\ʌBT$Y:bg-Wk`ʈsGt ]lΒXiq?Ba!j>lYOggSfZ FmR6 .+s5˭65&R't8pZM D@i}EƦb' N) 0@AY.eғ,p7"i9qBpm*BncdC;?3;me?w.=j,v,fFብӳW/KU,_|lF$ߠX^X BjZ -6`8@, 4BIQb1`THT4}h!ZLS\V`H4 $u`8a1iH1R!nXFYDwAgzŒ^{-+byaCn:6}*;??/5Dh :jdEg]v}NF[s/hs#f ,GڕW;lMZaC-ե6%#qMbU yp9U2ri3 p6N DBA L`K08$ @XTy!%OT]1Xtv˻nuދUç+:hyExڵTGяFWY#;Y,=d[ԗ )ZE>eke1" V(C޷۲NJB(}f-f Jd 8N*t& _Ud  2 p`b v+s/*źbHf0$gPigUWahf[:izG bu{QF}Yyuu=Hi{z|-D.iV[cCq+.myYVyfK4rWb>r iVQDPa V0\вC5SqVH^e5NW Py3O Gao3O^!1?Ce-m ǣ@3[_nϵu5"r%]"&ޚfd%OmHIR-m0E21e[7D ;{aAUM-եbW 44r4/nIhMfg\x,@QttI!?"]E%TaF**:<& @+ vp6 0ڹ;竎laGc1 ِFmvLYkmn\ {dFT"!7?hOa)GŹܥ/bi3cq#HcָUL&/9ZXȝѼ6 JvF m-0[𠳒r4%yI?dql&RcTID@ĉ g-(t![nMtEARCt0G2?[h$ŕ=[y =`L΅SS{$Ϝ_>*fQ+>_M )MAċDΉQj_}V$gN!m\mAjʄ,\Ң Q(ݰD"ح- D@wbmP= ,n T*2ci¤#d ;E'jEkt3KDMvQgTT]OQ=OGKZg^U=ďf*k؟=%쌲b^_n9G"U\]d'޸]ȚC eBiʄΈ R*4LK, .%M=P4(# l-]ht2,Bw*$U!9Q/;S1%֋< /0들M&~7:UF6BjQ~{u7;ui'8CDXBҤ<C=wA0&`u)v b3. J SlE p S54j,DoN$:i"=8)FCmSO+{_y["<1,njc+1Y~%ˌ/6}(.Sm~ԋ_H-a4摻ʆ[gA B5$?<AH 0 Q@#-T*X'd*1 P' G(T+Zʑ&U!GjY|쥁|~‡o~~WXw+^3y^,{R}~֩Wh(u;X"jErX3ˑ0*Xea&qTҘ xP_a gD- F%%?*1 iTÂ:pBtEd.( AR9NG[g YUAؐ:b$2 O]ڛgTҤWu?y.wwc\hC]yms^[*Xv0󣖢*ay|_BQ3^#3WHG@%m͐Vk.lagj,XP?$'ZE0Z2)  Jb *.pP8%P)xYn؍;vADϹLIrI ޕ}s=36qvYFE`]?0?&mߪ8 ֕3M[0Jr@M1@ mXmh.h̒0,4.+1h(A`jd&, Ԡ1eY0i@yVݥ`OFC#Oѷ:g,tyLgfJ`cDt˸TL)g 37jVّxV<el_laMu'>Jb5V}P1?ȝ|m4 ;,H/@4 $Ǡ Ul. vWaQŰXi5" (^ l-Uskk:u7 A6"+V_iD'Lt퓫PD_"r4Mg-ʢ/\sr+~I7|޵:6-2* XU{ȴK}6C Aq]12>B;t޸]xaH⑻N‡$8XDJS(0V `5.8RCr4 ;5-@ Z00$S ';,m~Do9ݼ[c$I͹?ѫj_x<_"7~JlNRWp: vlZ&ciNRY@zGS#Vꌋ]]дaA"P#7t0|S) Hr 5!T(%?(=&*`(h+Z1\UKdBHHE; 9R8j9u.}fѨ/NHvi4&eJ{7꺞geqsJu.a6V"?k6j۟|Z卯$`|oȝoH.SKæY\d͕qT'!@Y+s2޷-V=? YaI@$9.TP?*Tupz4`ڠQITsn@X !R `CN{xr'FTanx2\Q'|0kb/hcrq-..[ޮOXL$ӕsWif /91Oi`C9RHXɐOggSZ ߾\ l[*S5Vԥr@h̪(`*Y CX6PӻVMIA%N:N7@`T}紏PXmQ]U#Ɓ?ulT%Wars?RӴ7_֊u?06n.+\EuYH-qKdhnpl0'i*epMԉDP`6WEɜ!%êZ kWd662Br&T!e[)r8DeDN;AȡgE[|u([./ BNKZ)܈?_G ?m*V:V>3n6j S`SHB%8b+ip:2=0Pb\.R!IgQފ(؍X(6T0lh#adblm;G(1M3v*}f kgϙϘDk*;04Ier5x}snѼ oUv_ՆD#R5osJt0Ee-c0;R.E}ňPjtIteA ΃3k& yb`W '3u5 ȾE]fMkPFM t4qDhڢ@&g%վB;}O\"ge騥E̽c$ҷ}-YUf|:ζtFxb{ƛ+ "y&n[^^\%c#>/a63cl9iFɩ>np[޸=3dG#wN@: "tEb0b,aceQ)K&MS)Bw Z@ nkBP]&,>t[߼~ |okCfBKy-W^B#Oi6lcZZe J뜙*)y]A00j)lcde ܧs݉Ѹe82"V, $?FETЬ@1*t ңP 8d,dUQAjз9&Trӹ@T eBUb|V@M!L2yS^m~R{x{9B"TGdt,=S}[Yq{Xfq`^*f[BuX| &-a-a rGnZvP|eE`DER )PR;L"6R7 d 0:%v#?r.a4I`澫{kr̀^[۠>sQu^w9`T\<瓿N6ly7߱{/^fNoeS2)22]d u/WU|6D]XyР`_-ɩ-Kܑz6R0.V)C)(@(`U(fQEL5}SH PPU8s[lɫ'mIՖ=k7#JK Kt>GPH/NQ0 eRP n0TD٘%/u xDva`8N`-^r<ZޛVquqEJmf?ռN%d5Ԧ쾩+a;̷ZA)+q (R5GF\J8y0q2 Z★ȝqciP+K21iUTH)|D,U4Z޴kj7\4aV]o壩Tݡ)}^̼jv\mŗ䏭֦13D| 95A5I/%|C"J8imA(@DL LF`(l H"tG?(JKi PLUA3V[W r1rEXHB`ff@3 ŴiW9Prr?5[Tf=4Ȝ[u<4>fF;$]^֑Z_e2:[?h:@',.=!W9LmiaIL wBӲì#-I.()RQz~J@[M{.&FL$L.%pـdd@%R@oipx^؎msXfLYQ͍vMSMou3۾Uy!L8ʲ[~ǥ`1_؆UY*֢lŗƓ=;qpDYGA\iaC1 9²) &(tI@Stvia$ 1"ce%MVWt4S!oy4'ͰnY6;Ozs$MK{v{o;L7Hƙ W3WV,r(7g,?R'%ݫXPZ3D4!ӀFOggSZ ǝ0D܉,L$ Hc@`p4QHtyQP! VôL,4n 1k2=)xS95msswvdպۦmi}6ͷ?Ǐ^6/j?~xGΏҟ+XYgQ\i uOoVRR] Ǝ3⽝//Nȩ6ΠD w!mˬe>@ԐVK @rU|l6Q!D@hL] ԗEYN& D@.8 ܂hqy!J'Rmsא!0"S\^c?sIQٲolw#sooFj܍j l_(o3CUg1GĚ5VJ!aMJ`M WXȅk^yMdub av( j@ٮ2M"& bZ sISJ@ʶS꺾!S씊jι~6hU*/K^z*?6դn}|VL[?TWM̼ԏGѽgeC|Mj>툱 \M &Ⱦ0@ ˆYB&14( `?8s `@LGFc֋Tha@S\noP8:+k.Nb(IG/֢atB>R޸qؖ~q'r2I:B&.Eש$:Oa)@îd (bQ T:$D"4F$s pKzN LRBnF_89=2nfp܁t;t4iDTWuNⵜ!45/&^OD*n2M k&$1VziW-$Y \ . :EF,/;+(1U  ,0LiWo5@|0(p. 483^"뛚L+}M>kرi+׋(VlyxKO̯eȘm%7n,:|uʧ蕿CH ^sYft*Ayf4͛2?fw$/bU3_ -UP*i,D~AA@LL[Y C,uR A1 7&WF뢚af2X@ᖰ!PHƞfx\EgRоa?]Ksnm&S+]NrlqQKi=|WnooQ/Al %'}sHfn@3:*~IbɱCq'b^v?µ`aE(9ւ%6PT- 6u/2؁Z1 0X@g9t*3lmUeЀ<1M|ɹGc3UO"6צvyxe.LfVf1e˾3(gM{J%vWRL&*WсB9~! [(OU@)P£U0W2yݻ͢}uk kk77>q75- O:dM0^pT@%Qqa@@B۴Y "!&J,|P9P_GK-Yrd**XY-(P8XmBX 'nC\Inp7v.խ-mdh";R-O<۪jR~iMocìUƽ*3=Qq4uYGNS%$;Opq ~˖䮨_2‚ $"Hhix.GP`L@@A#}fР11;5YDXKLv=rmBs2>lڻ&O]w-޴n}(F/YvnܮUrܖc!7_'x{4bf=o6rUIrs50~,0Ր\%0L-8aLqbX\?Qbk`a$% ZbBh1636VP+Xb/ dBZ6PmB@~%@ll܄=¥f[G> $zegˣuqZYV#?xVٷKJd_y&}DsX&_*)"%R$2Zp>RBhi0 l ;`()N0T)q*dvӴV4ӗ ꢬȀ~ QfBS#R؞Y)7C A_ّIgv l|ya_wab e~f* CӖfs?2jމDb^/D#ˍu{F$EsCŅ<f$.3*/A *fo6 rsRr5pm]r0k#b"~eu. 4ES~B6 52TZMnTdF`1 @lxVQ5) RĊ,qcG%R,/J=~^<^u9)c5qyכDjUVbn.֛s*PxPhG<¸GʄuRֳ-RF^IJQor0HX1pɡ6 &F.\ߥ:RiH,R?(V\hHKT.TJ*. n,ӈt orcѵfLco3A@؄+amk+ҵgZ @8τ" wBS5c<ȅ,>@!5?" V-؍ `1*HLF.䬀EjM!Gl'z "A}\aW'Pv^iz*ܫxYɖ"ĕ:X,qvv8D~eȿ7SB,V+b29`Dl7;ՈtRݸ Fȝx0"|@D UXi::G?kJQ%"ZB><΀ H@`"1(CQL9TVۅ)taw3]軸B G~v^\a̎g,F6xB߅uve:… ` l Dv00󟰚#+Bp1 "{ 4 +k&E4K d. %d VSpE-Vp`jJh#2ր5HSFGx wJ|ʈlUtNq[*«p MMb.ja5qR_x.4.;oe~|v]PZȮ=Wu&#V\R# vkBR&\ȝ~PZa{$X,LM))0Je$P`j L&jΏH[+z5Yǀ4 QT3}$6Svyl6L}LׅÑ~˽ͼ:7D^}f޳;%-f.R'XFX ϔ.SAYsTej+= HB-ҔѐHgPW:?=6eȽe:, DI,RғD"֊L(G@+Ѿ$Pm =a+$"; ©DBjyp@Dh mvUY0I¦CW}SyChW4C. }Zs?v[.D~<˟avݟiVo}Fmh~EM8 @*Q#޸=X!}a]pKA_XLPDI*nj/(Nӎ .PW H(dyA kt e"affYEoO,uDՇ}wsWܪ6ۃdW4R; ;?G ]}RgS%Z[ŕ|U:vn;R%-] q@JK#x'$ ch 6F‡a+y) RXQZY'Ft8` *9 `Bt"#4Y$ά‡S!/"on6c1;uyD^3_[powPob/u%j;36zwm9wc,JU{w3Vk׸"Q9Z+W 3/;O"rAV}A =2e!1Ƚ%-FD\ 0EIh(*K5 (cͩv4v\>> i$; 8[ zʒ;ytdZ]cŔP]IZK~Iȗ-z+1jTD_ǴTw :-Wf^zyGmn Te/gu:TՐDMpDV.ͤXPB(SFBǝ~pGIN7( : +0(Db?*j]  5InDqW64QJiV6$* Uidp^)ŒHhx=J&TJ4H-W>OycrQJK"Sxug 4tqZ{&| w 7ceoA8Ƚeh߄{brà ȅK(N`YC.- v.np0Y̨0ژc'lov~4];vkTN;m7[+OszW:|W̍oLyU>-NŖzxy+kz#I> ,]_Qh9Ƚ%-HA-ܛ_SL$\0)J.V[[*vQq1l SDg <ة3!xUBg#B"vHܺBKzG+1#gH߫{MwWD|Pꍝv\:3ZG-lQ8ߴj}YV[(c7c&U[כ̝ւIP ȽKE܋  pSRtI miskPQf]JY퐊5i\bFQAΣ3s4J%OPNfIV<'ŽeZ¾s'AK\_o PQ\SGS\WU [oUӺ2AY5IͲȢ4+gZRv 8 + >}_ ?K{KQJ%b"' TtjI .] ڄ]M9f?$l?S*Zt7i$&SfuQZB[<7L4WWKPkĴܞ4uLȔ+w6mW喳y\&7qUOZ7d~HNfr:WDeLQɋ)%b,~-}\H 9VL^ui/087jyCS)4څYFRq}Όu{}ܲg1C.G#A3CNWt3n-5Mvf{?hoܐ UJ] b  p@2(ɐ@"H~7Cܿk~3`lmms-1.1.3/data/samples/instruments/steel_guitar_heavy_distorted01.ogg000066400000000000000000001354551247673406200262670ustar00rootroot00000000000000OggS[8vorbisDwOggS[3]"-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSN[465ſLQA%n/*aVdnCi"1гS+vaǠB}=z$G lҀmҀmQ7ɘ(jE4dj)\1F$DHh|K-%ٍMo-nt4P-ˢN*Tː2DU˱-,ͥ^ M "*"jZ2%!ØӜpmM` "S;4A򕬦BaqJ DD9XFRXO"TlHZ$XfCl䕘oux>(~2(ɄCĴlAuS227!> M@E/̃pσX Kk:7aϠ,)yQrQb U#SM5.&M ʒ!6$4! JU玥)iD <: 8I桢9Rс$ӠJKGs8DqGSWwٍvJ"- :c3OeWfDQ@KMV(KYPOAH#^-X/ Bg*QWȌ(5aUȆ ,5ݣnk<@V韚If̢aQLQ MB s9Iѫ!ːU3 4LE0e[ժ i0jV6 dH9[s>C=1Zw+/됀CJ/n̲dt IJ&FV3f]1Vʀ72| ^V KZ_-XU2(zaYX`31,vˆS)*6CĆTK5YVfg 3H& ֋ X#J$2c*0)Y! M9ЪtiZ! V"pT$k?]ޙVXHW7(Jn]>]sIsFRkj$1pP&A |y0bP3"jwEBhfCD10蔱Ҩ1CDu8TTBVB4;&EUI4M!k ̣Gʠ^+F-ddHoppWbxkdA▼?fV:EKxx)&z2n0I⹵V4J 8V G[AI63Ih45g/jyQPQEe)L/lCX4RV %$ȜwᐱIqJJ%nZJo񆌦4B+{TCbFEĐhNR6| ܤ^Qҥ{ŷ~Ftlve]GcEkÄc#V=_ ;C!|i! <ԃ3AB ~V ݊UFA@׃% MXTjbib`bڰu 2;,4Ig*Qft&XNJZ8A9 "eM[9 AHV| yh̓K"c7cjќĶZrZ0rxUA` )Y ,`{j)[Kࠜ\P8U~VrzaEiq ] `є،/b@pZX1-Elv5"EPَJ w )ZjLa5I%8-2!v"L(I nzjth@}cqo)J|f7p̒<E{dIH+0Z+(T= Mʃ`V~a^q F2U-M2bq j1jYQWEJìf1ЮϘAbP#E;!VjCD:q$B:c=KuP zSd.Xf]~ͅ,^Mk3V{K?QV))]ƍg35'4}Cr6L(":(a)dB)ҍ$Fd?IJ7 " &ACuI0U-a#,iZPU)ƠU&oD2BT)-b.cZ%#hNXpFJGD>KX*HƪV6HxbfN+ iP% ie-[or(d:VWXfJ{kzғlUzot/Mg7 tjCJQ24Θ\K O9&1zK%@e (!V`1pZ[Mک֏(>jhT!aqeŒ T% h $zf,VAKG|\2Ҍ,-{ԧܽf߬1* Z(3f~z*.kL`03Urn"й O"I AH8$ M)F0-.5 ZHBfZ `q06LJdQBY4j"Rj{֒X݊ OaLJ98EWHK\2IQK  I&VܫZ[TU2GV'q/}k$FKϘ֥%)ɺ.<@I[lID0YhF\0 r %9J@@ǑCS61k f,n 8L.FuEJ=rJHJNrTiRBi:1/rl;*Q`] W|x' ̖JTWK ͣd߮ӢV.rNU27*c;3p zM7Ht+&2*I@WLe\w!$KEP4)MbNel,Zg]:,N"q[hΒ^> ,!M;693E4 U"cڞfo)rJ8BB%ny٘ER{uvȲbyDf.hihc"Q*olƌCKCAʁGO12!h0+&@^1 =ȕ*Ncw*!v pJ܁5ndc! FwtwXn.!J P,oCfm%<U9԰,ljt21Nۏ'zԀΔc3{>aN IQvcK\@R, V(;&\4Cs"hGP0iȉ$?!GE1LgYl S#fT3 ^Q,ьbmjHg! ]Ar 0:Н "$!4DƘ|.G_MyGDmvZEdk,뛋v'6H^:J]H>su*|!JFWQYY`&;&Q@%h` R& L8hwISQGDJ6̆T2"5T]P5y?ͳXOEE^-:F!,"OggS[@/ʿKFpn a'hy_BM+ H`Q 1%SpbtՁ =gq!83,APfd&R 6) Zqv\lk50FRb+)|ctI lIİJEan aVC0d 'tnCԮddH@\{倁 B$laiV]BDNT>ka? erpflH K&c A$&-#_=7bZ 1I4""6xDŽ(T } 1pGH0uMY t+_E:?i0\[,&i+̅H 玥>^';6|tf!hH[F\UOY:\'Gqc*g.;&!`tE&2Ik[Z m͢F95DR**Ju@"'%za4(a7Lw%V8)5IJ\Zˠ/*HirVlq= i9"1#Q fӶ<)U1;!>)9 t$Bc7|NmⰨ 5F4CդtAؘTJN0VSѴFZ ˕1rlsHBI37TRic"h6(bUGJPʶg"ħs-Xb<|w, b8TJbX(-~ ,Æ%S地.á~8;V9"gws P+ hҬDPA1pjEm@2VѨ2"kO RL%E(q&ve,ze0m]KNlI$Wf<D LN !=e){׽mjUYCƒl}\8v}RN֌EsK]Z2&5@K*A)Z >"!jD! TH$97TuE91áVDН+E[v:e fT% ]C4Y:L{ H#v1BKBR GJ&-YJv4q`_ T +Z۝n';EeT7W(_LX]:/G.4? S t$RK&L) 0ȀRI+"I$QY6 *DjS̡(&Q[Ej~4EԊSiΊh(HjnrVXXd)1b+*|#8; I|7gJIlCH0ZpP%XpA ;6- ـ1 r)9!r1>Lx`a2cD%`P 18Ʋ_0 X u8DV#jL51}WY:TTdFni RhcCnXiAP\rNXa,EBİ.[UzA" a"2$jk[q!8IQ'wׁԶPkvg"F'Pp KF` 8 0J& a0iU4iRaS:=;V*EQJ}>ʙ) m5iIMPH$7 KAҬR+a%JAY@H4i`eq08hD}L%p"-Uv.~gmkKK1RFR,]S D@>LFxd dDhZ =hr# bSiS 6bM1ȩ5E)GDIzYR[fPnN8zza=PLt6)#9#m억U` )Y|&Zٞ1_綱^4.݅ܩ1ݖuamgX7 <ɰN|cMcHh䕙˗T cq 39c4@HLl v09A}\`QѤXNa7 8bĵ@0 "eljb`"4NȀ&*j98؇M 4HaJ"b0WNȮP~ebYTE`nK]44p"E6ɠjJmdT e*{jBO)9Ǩ!\' LFxELFx䰒 0c CŁNT5cq5Į1Lj"+5ibUVRb5O!)* ;P@,ZP5@zo(4'+"HBFm.0ECIjSbBy9pY_n#P槐a'[B:$M\.TE|9# C@Hd9\Ft;Lt54S"LF. YF/59#^⪒QܸH})*s!б8bf>F4u(4DNIׇDk3*xaMK65f- XHEERh瞡sfF^ѝrd.dcߍ$i9b kLNضg1+ 1jY4!FF4gs^Lld@& M:!1E1ŰٱZq`bSQuj45Z9VEPV(iM4Hq_#!$!j"*$'U=I#Py54{nNX,SmGC")9)ڏ9qr/{ | %Gx'J lLx%hd/=dl pI)rƞ}ӎEpXMaXqZ԰)bE홠UH9lC4QYDmmQ J"XDY e" PڠMUbz8ڋu~Hk1ddȬ|ѣ]`m%@Glk6u2f+"\hhs~ rז/J-`Hq<`$Ⱡc$E\H& M9%g\1 v4+FNzfHjb*g#hrB1F*"lg]PkUK9 *Ș׎UhBV\j_2y7R (ݹ5^ʫ`Ɛ˴\b["%EY榤8+lL>C;& T̿c/@B_h9"U(eDX b }[dRfYOQL,ՕV+|dx;D(c 'Ff- >b8ḮCZXJ;DRruv3 b7dBcV'jйsȚs]^VΪ+QJr>gĂ/_ "Cy48V anĉ<ĖE1K-逘%3$;m2X4i.з((`2x|5D|吝C^ͨ-3뢢"eQ_o9[|#c_zU:mv]jb/.ZtօO7Kdf*N!mSui6?ecW|-[:7jvӴgĶ*gl]z՞ lgoٛrkBȞF݁!qY"drvZU ! +Bvk"C psn3gm۶mΦlh,8T+ :>nsD`"#LNjcO,D̊9U5qTT3Z42 Bj֨kPFA**RlYi39c05k%Fi;~©mD.%XT *uєOL-a|a,C|E0fz0EOl5J[,ƒuR8"69y;` 1Ec$C L]EI@H26;0 Ŵ ju&e[RSdKZa4&дN, U"ءMlDia)oF¶5(#Xrm XלIou OHzk<1/!43ӐBii"N\Ǣ6L>}HXn;XM9 sG<8ihHv:!x!sVdMb J)2Db41IȬ4&`^[^G,*Z,<s+t7uB@JQ" uc4$0@FBFVRֲjW m 6bIgBdFSe1XJ 8K$L'\@$r4(Yr?>.ihGI S\)!W 8' ˁ^W2עfhb1sEY:i}c;ntUץU L)!IDD%Sb;C{cb=x97'|uh|i= -@2 &`ܐu(fY췮.mE!P[Ê2?I*$L@05Lü#MhP;hL1"3u1IΌ2VL"uҠ\ V#)*ZX bvL_!K<0"|\WMMGJu'vQ㛣;E Jhд X,Ps2Ι%$ M>" |'1ϣjm!uj+n,o-rut[t)Ʊ[@"PPʽzӂy.s' |#i/-k*1DVv"o̸ʶt-lU'QRn6CE.K;h|-fi"|ܓs_٠*61:b1bU+gF|gK[S)E%.cf5vڤvp&`WN}'չ\Jtg#ܕՏ"̉Ô|чR˞sjTQ5:zJJV1[Ö2hLD`TD0FjhEk"JJcK,)Qv+(Ў,42T ُ,Y@DR+ Q,DjWカ,cr-zH2DW2wc< uZ2䌵dz9yJ!(t̃ZVvđut5֕ V+dhss:cAc@eiL$XgKgDODp# ^+&)$`2ԖIeI `$ԒcpIq49 Eg|@1a)jŮB`UD%3UX}]ށzǯ7h1 1A P81*NJÛ0#szE/pf[Fӧ)MnwAKΜ,װiSU\'@jEhH `vKfhsЁBZ\UIpI bC V1Tc"hPfhEi#Ɋ"2J#C3vN T%)5AHkN3}@{(#5,pO5HD Os8 ڀ@;C$b5=6BYf5a# Ε9\hA.iG&S""I 'V+;b5y8ؕYmA|ؚB a[*sdG/ T0[*\ĘaQ$7V0}A SRѤ9XaA iX1LX,1 TJVYI35avshNL8(nxl!!n#ux$rj"DFV p@-#ō] S}0+8+MLJ0X uB\`D1!8 VRfEVAs!Xr9rKcY 8[hs@o5: S7R#)4U L)jfS,@uIdhSOԎl۝΢J)?@mt 9'0}ÙlZ9QA#~V'A)T ~cS 4j_mU91SL%lL>lː@'fblC?Pd>\x  %ނ A_!KM&MMaASaWL"6D,hD,kedD3c '!H!%bUm dZ'J?D0j $@ZED¬@0DGZ$PX=(M4mʈqCjA1R B9i_X۪R}0έXJ$\khKq#t&mc\o`"&C U"NLC E0c#265ΑP(X. S2Hoiq_c="{aEZU<+nݭЁ }a `3YNyĜ [ .s prR'ClpK 0a 48X,పPSq:@,h֘&Ke),sH 뱨OPF,P.*t2icaL&!bkYtjAWCcԃ KzP b˚jΟښpcd@LƩ@`$&BXQJ &rMkĒ5cbOpȄQ&%a錱o`j*FܮM1UՁ͡b56BXЅhN 2¨'zX|IiZ8;D*jܲ`ea"c%j8Fi pZ)էDrWw:UHa lCBJָ|qˆBhd=ŖNkĚf5cHG#a4D G8 'NF 1mj81"6DtYP=4&8юɹ93H E(Ed5VA2R+ J!ܼ`bEB"ˑ[,Ob:06Xmiq+۟.\kOp:ǮK(i_:1v&8I zK|]Y9pb4J0{`Ks@# >D}E#`0#o"3ELDj(FIȆNBL";9AD#T9( PBc,%n7r*-AU(SM4 Hkn6!BTbLD`X-^ȒpG"lA@AlhKcV >StfV `I0UVJ&r]\qi5 PS5}9*jӁ nvG8SURg)qTPSpB#f5fR#@5Q"H -'ɘd %{=)eɔBv R: ص)(kĚ)S#AQ#Jrp0D%(pLCA5k0LiQEM3sR "X<ؠbEt4Zڌ「LTFmρ4"ܕ汳_P2~`"(b DP-ٚ?VQz DG9լ(t-ĺfʩ)*e8׮55%kpשkS{`s)8<6r&*I!Q(jAclo4JΫd˚N2Y, rTaP*׫Yvv$[\ * 3ݱ\ VQl>VGcy.I|BO%Zq |8S2ԙВhG)@%?>lp1 %<"l`Kh4%IEW!X` -8[$u4i5Վ&M!Qs# 54єXA"d ^FU Jз[>.vnl.C` }(`ᄫ!bYF`[ UJ?J$V (ENՔ4XpnR68+! OggS[ Žƽ>|x1 57#a%@SH7tM( EQ+bR6&zPdiPt^:mXSH+5ʲ(t0YH%*Qc:pFY9IHPg?b#L g|XcS8_ upƒԁh,8q4A.l`1)%]t˫ MLS8c,mQp$h(5$e1 S$U )8z 6>|xO`g X,kSĂ%j:ḚDb)A\,#e7ʆQNz4!c 5T)* ,Dꀊ^ D- edZZo5i7j ࡗtV=筊'\p hڊq#S,dH,tPOB$%oC>|pf>3|Ǥ.¤U10!Sc)j2E 3kV(Ihe`tŠ6JR c:$gmׄFc F¡T=b22%@@ki@ ѭť7NZzlnxkvb='$UbJzRkd!8/gC2DD6( P~|6brٱ=lp( q `x K A U,VN5"B>5sZD mUT@cp >, :j FFRF!+( h`TY5n5ZQ+O["4ࣰbõ!Ɣ|_%2R;JdeGaMg;FOz ? $$@%Rn4^|tHDY#}Ap]i&Hd,ݎPĆӦܢVD`ՒD(&h$20ڬUDX" (E;nlhdC0 h I% []et1iOMgrLi*+B283E>Z3¥:P2 uN>ll a`Cx1EtN70JN2 ر tGT+QSdȤ*(i'UCMg6t+$&NDHUe+-RB(Jy.Tih~d!-W9v3~\8e${aB?Kʀ t=,v"" I)vq4>l 6cxIx`TqLecÂ!b 5 Y4F5VGED)k,b1m]f:jEsVGQE,Ab)nj\BbHB+J̲FJAiY/k&FR>aWKǼGu6`d$+);EL6ɊR_d&$GN4 .Auj #ol( 9Hs"H BGp hb茱Ê갈ŊU  !5&K*fQdtLImӣΩdC jP8Y8L5fwP:\t|Ј/:t E䠋N̾RJ'IPlΚK:j[\&FCgԿXK,- Z(tL2[5!A[O8 AI& _lp@ fAH̃%L0$T2?,b 6VbDТt2*=݃Bl#PBJ5I*$x?؎Fy4H2RN!"H &!)@m*[EF&P~ ަdJPW$lW?V7`&:]`g Ç8`p[qPk`sS|DBֈ S&I?n8TLD 4(İ*&!"e(49ĠMvZ0'P&Qi+Zܪ n`$@8SY;PNP'8&Q*3~v&r䀥!bY#ԧ Z 㾀.MP;X9!1ǵ@kf`į#CaX`9:!pupŴIjY3"k˲%Gv&6i IG V n:* (88FPR%KOG)Wn 2D(uq8Qe :2o :9FY3 d *&8RGU TRఓ)a\cllfFĤe@bT! 1r 3D5gԩS&1p`*XW vm&E-ܠ]@Bj4'A[ IIKDDJX) $+wHOa!JX%@Z*J|YRe%J$:C"YLl@% t@JCQkh_ aS$DYDLq:ŎR-[T! 9qHթd6m"|lFT)"> cq8 PqP-ё:\ў:9|H+dkM _^ٵko;auJB?T*8[ ;̄QpI70 HCk0k9 f|H! hJ&&j8U!*VXMQhsuդ:6ȩI"B L.B,8CABxB A]$YiiGc ۹ 'CmKo\9r$1GTBl4m?d"jV 1BH٩!(Hl`Fe"A6$`T8$e UMQzjTƎbEMմƴES[ :E)ȦG9iqTU]w+TKԨCfT.g3z. $zc勡2xa6P fM`T( kfh kfxA}$`ico vP Xմ U뢨ĥim5\%A!P 0VSS!>ђjPYA t/6@R& qݟ2AlXZ%$2kfؑ'\p&eb xC ߵK4_qI]HkfכA_ OQl$ 8@s4#o(ͦVSX 9T`%T :glL2H%iĺQe/b!0H3 7rO+?}&`T-mFB8(rPȴTG2p n5fH$u.Gb%ɶ4 >&Vk43`904wTA)8 rp)@k@r *(ҀI&ist#PE +NCŁJ씑T#d0i,hIq$95 DΪu3Q5S8(#p8T&2p2+A9E!1VޚjaAEGLOr}xI&-W?01Y1R2hUp”4֘eLsI)9:!OggS[̾ȾĿ[@(k+[n(|Aiʒ\A’G8:RTXFL+ S ɪlT"3jeD"6.Iġf[;IU 0ʫtaEp0jb|I6WӔAyX~WfB5IfF""񹝁!y]p\K9(!%XHn1JgѬ8 2[-3p!W2iHV1&*6&*iD*}DUDB1dlVlDYKQc%RJ`XzRoagH~_.=a8bTJAj9+[ ,Zg\rgJ[n(~աXhjmqdʀ@[9 P[% LW`r*ɐh%HHbaQĉjgˮJV 0Utx6tT3!5`vpDVO JT~uzsrVac=ߐ?]^c˵s2Y"ó{DBGSkW+|De:ڹ( " 61'[8[fx Xj}:a C;Pg`5*v5+!eVE95cvGB%ޡ65e-UJLmvJK, VKN2T#H q0Jc5",sjDhOT!J~s+/Rb/Ӷ@*EfUp \r6,3XR.dpA[X- Y&@Ih!o$3NȆY6ӮC t-I ;AwDIO22LƱ"ft& Œ&ZQw c@9--0[ j.Z-o|ZR}kלۡY54vz"GЉu RK[9P:^Ή84p.jM 0~ ,*DfmPQ!")'t*0Pn1Q "$(ijE{TPVDc`!B*UͲk8$ fM5%ł۝ z"RYw+uwK'mڵ. - ` H,[;l9 #C;$<Hlg l-a`#H!|dcaC 5V+vfQ;9i|TY]@8j)E8"$"qb ԁ =)J ~:#D; M6JK}t^Emierٱ]>dqЬ`;-g”Z})ڹ.i9@eII$g]Ll : xP IXB<RN5 1ӆ&Q9 mYAԛN(IQ(QH23dKaX ƙ()XZk X,$L4R`"U-|Œ&MJdזo-:f$W5HgdNX]0!R.SʰU@ >l6@فk` ײ0jDJzgL 6F +1ĊbSԤRTE$h. QdбI&7Db5(U(*k-#/FΥЙ+ྑΫ2'R&[>.3BĪkz/$0>h Р=r@>lgh Abp]& +*j8M[Fԥ 'QA;75Ds3vFd2= kk 4m MsJpZ@.T%XeKUZu`CY;|1l%cn.g"؆۝(bkU/Y5K,6Yj9SNӮ&$Pik5N5q3405'%ϲ L8 ʼn͐]Xǩ,C٠42%Csh@ѡmӦMkmTQՀ{ tऄS)9 H:( ѭ8 (EDcj?=k3%('-]e.LQJs!ؑK^*do+~]BVP{f`z  5z:|nE8KĈbaj]QjF'P5"KK;C͊ c7 r%.Զb"8"3T K[CmEr|NK3(gٕnշڮ;R_˺,uYm#ؾYQ*&OggS5['"{-R5qK14pX$cH ZjDbZAFi#\-)mȢmcUڤ38V6qHHQgR4LZ 8 @r{UɆ^6^T&} 0;7܍X7>ۅ*uB\n׺ !!*{f52qL>$TRÀeT7ԉ*FV4pb1U XQRSVt; sQwgFF ',&3`[b1/~X.YJfi-A :SurTbM%P蘅83\ I u8 Ipܹ-`l`4 HI:E?Cl[ M+y4&IQSɬenXVd5&X֣cT- iHX+ +%֛hA=i 0VtFK4YUg2cx6VVJHp Y 3E,VH%>%Ġd'#%'l TS`k&_׈Z6Ϣ/0`TB??C`AY5Kp+&VĤA ٻ,DX%c8ZADR8T)]%KXȪ[~0<6qB¢WUD ,7fcC?;2%¿w#WĹ9Y4{!Y C QF$!7)&le~ ޣL AG$ez Ć(.x8 8*ȩ82b"2lɄupZګ% kR _P3+QjºL(])\Aaw*ZNώbSY~͕"KQ/YD 4;W.ѹ UOl]Ơ{`X-k%5F24>$UY$XhjiB| *j j⪦BVԈM,@ 93v.zQR6ٮJPc*8@28:Eg&$jM#Sͭ˹l.sD+?3m,.o?E8VYJfUs lR'"btvM+0]-8Gr8(;>l60  $H8 .E"8,bZ:0 b +B@*2VecҚXRt u 4rx'U>Qj:t3NCۮs^)Rl?6R{ƣ =r$k}h.`{TGdbmݰA\lbq"}+q69@k%0LfI^#i&V aT 04co8#ɉ(6Ղiê LE/1nXadhEEYH3cȧUT@p;⠠W[gדw= ʅBR&6HQoRֶ_/۷f7Ӽ+ V黥k{Só|@RPcAfҡ$>lv&`G0= ӤSf` 챂Ӧjs+N QP#dM(dTWMKBQ*C 15ۣ̅XH-TV©p,TEVҶ^l^*Mܗj(⊋NKɳ[u!66c0'2_* +Y >eI# pk5a5 0$`rMD+ @E`T1E&j.sb"ifP&N ̨*n+MRC:iax!\9,G`3%(bYYju1?כsEOuH_'bkdì=zZhl3V9 !l h'9 gMojÝXzkf1~\#&fa)jJN'"jqPTTӰqQzfMj6V%[rA"!*i,H Rf`9!zKwrPmDQfIu*v` :j{nl.PE!||1F:r.U +vXO }.4TŞb {L?TҚ۱V8YZsҁ^=+9@LT[i~\C- uLG.H(}j/3F ˪VԊji,cBqm LpRU1)iڞq)DWCvC k3G@+&D@Jv l,,l̆I}n|T?2L#Ov ꋟبuh7~*GY'ըr4GK)z35)XtHL `]3|a\,% .lV0ijR`FP *%llFE1YPeVk(dvٖFz,MpdbDKFQB K$bY@BBtRmSeIEXN2jbՃPJβ.}VܼP*5yWsl׹,7wթX2!p曙V(f@ZHl%9u.ݖ[fbz˂D.HF4 VZšjsVRV5zgTۑ>2$DHH"*1zina;JAsbdVpTAi ʃGB @vG#Pm ;cuC]s`Fiݰ\8;oTa8il5mWF s-w;[a)*pL -1z >l $[ "/&E ŴE b`d9%و 527'-Z &mCL2ZG!T4Z-Q9Z(%,҆qƙXn7X굎,a~JuÖk]Vcl_~+;ɢJ>}L, >Y/R[{U-ך.S .!ܗN\H[jv ]#{ 9NJ bQE;E1Cnv3jB.F29ȨQZDKjni{5JR j*&FI ar0j v~3ouE^铓7]TݏYJTY +)|~{~Rm6T|"]`KjZ{ObS 8NЍ\h-kt x$ S#'E]QN[\ŮDeAjIT:16]j,iJ} !e0r-W6l̶! Zgo?>K-OkJ&VϟT3"?VbRw |3)EgQci&tM@0%\jl5PA+I$%>0@]6m!b jH)YɌT_)vD+Je՚x@? 3R% B6r%C(īF*ZŤ9T΋ QߑKJl F0N!RwO_W)'f}5slt/A\ *pw/99[%2C0|$% b% SW P$uKYE1bĴb $bȲ(}O4lb#ARU 6 2RsA+ %\b6>#9v8 wSM3 %k2^>|͋|SH$_&iZ7U|YլM߼m2rܕ\6rVہs} 8:KΏOggS[ !![h%KhB49:x3qYTBu:mQTSͬ365vB+i;dkaT mP4TIYL JCYdfViLJܚ7//- 4v|ƍ_evR?zFgo~"?e-E>ak\$ɴʴĕ?Hˈp [%@n׈ >Ԇ"VJ%h]YPu.ㆩЖg+3D)9Y UfIejS+#BGXkpւ~Ϋ\9AQMzІcu_Lky+1C',KЎk"HH)H;P[M.2%;= t[Dp$[%( LKX >TRAZa)URR 3Ѣ 0*Ea1l dȆQ&fNmc#:2* $Upw* 6[T79 ®GLt/+QQqU8w#2%*ɚ,{ _=jp7l²C-)2Uo b&8q [%[54tLZI#H**}C4PT4Aֻw{ N1ɮncG%Qլ @8*j T G@c$ycuK p @I3UD.ǖ r1f?0ꆬVXW^ڭR) g|2͕ԁ2\jl-r۷"X5%K%LdI\X& kJB9VVHŧu)$|[;i=}&!C-6 jg"&*X J'H>K%%S0BK0`%tOF) # MSqdʘL**r!Clpl"jWH2!%BDbiC+kX%̹6pɥVlҟ$k`;EtLq+u@J^VCazn HdLBg}[c e/Ū.E xp+o C]A >$Ԇ,0(%hCЇ5AT i T)l\ّ#1mNNryfc"TOIΌ5՗7P,wr:$əB!Nc,F{Z3rk͋LU-bbl硎-FǙٍq\~ >/3;ooc\W0ݻ{g~N+-L8z3l6,-g0bikXB]Y +%1FC.Yhbҙd-0Ê8j8ɑ# ) &hgvhO1CLP"9^Eq16Ic7-ݓA6:i`A嘇Hk9^O|?QO͒g:^uN⏥Cd>o׷1Y \$}& #5Кx#qaZ%1[+5rɚDw3I 4i9FkF U͜NӨrAm9iGiҤC:$9 EuwTeɆXAhG^GQav; =S&AKȣ yVtYyq.Zc}Efw糴m;Ϣb) Ć'\1mצjZrjG'{vA;cm ljĠ!+9ACo /.$iLMkE4#B-Qt+F&fvuA:X**$hB[+u'i%m8J407ta`Uqὰ%B8l{juƽվͱזaalbm8j5~c٩Ҕ Yba3Vzgr~\Hr#̯V5L$۴ 6+9ICmXL>Z aJ)J?5`iGu*IIVɘTSv)*rQ,* iҤюqFYj3Ԩ$%@[T́$cS e2Mai $QmsjZP$R:Ԥ8;ֹWʑ-Ků[mI5`\BjH.tv 7-r9À!yS!7@:\PQL+E%IQ}k4G>tGXtNˬtujb ڃl"[+B}k%(وwg&-f=+h#<7FUM!xwgn?ڰZGe:zC<1wn.~}Q?X}>dߘk 6kp[Y$f뇪(-=m@kNhDDwX`#M0U()( qEMPA&ZBV06Q!mX) 0AnڪXjz rR֎Xɔc#]dG.Y)67A&\OwrK/q鐺RP̞#k=cg9,*h>\*)ױXH՚`֛Z2#U~}v`,ːŊ6=Bv 0,g %IhJ)`5P Cjg(ڌ0]YP5Z@"[P^h,UiQ9 RL$u T6!&q월Ij$$nY;D%z[gC=̹3˽KWER=>>+xp)-S:_θnww-\._V)#Zz\ 1*v(N`Mjg` Ě0xYI0iJQ~B6w b".VDQN:(c"2wlҡFtR!ԠSL);-gc֘Bk8R+#ə9≮R`S YG5Lolf /tC-uaqF+i/.O8J,Jn#.Kyw#;Y 3]b)`ʯ,Fu:KIA3S͚ )gA0`\v 1,b%I"%<=.]VD-BaG+\D.@db#QXKU`%kKMSiHjgCX~:7=h\?"3}RZsV㵕>Js(yŚgs7'md;3+K*=##<dHΥ\Q;!v[CAW:dquOggS[ mhicb nhbLJJK`&NC &FEMLbNhPSvTqT%V>qw4#kM8&բdkd|28w jz+U^RbW&JVe~QmcګvO/1I7,K/y|2^p}+/mѬ/0F%)^ 0~+Ɔ3 jRIQj<0Tܝ\7)ml"g5=2kBjXSVi%3 UޔF8Dns:v,7 i3.R]QhWOJf9Tz8ynihzͨnşq?]=i)Z_o$?H;gMrҦ {?cxޖZ2HmsTZj˾Wȓ.7-tٔȲ>`)8;痷M}Xsc& b0vD 97rke<诰I:_45PBD$Ȱ8E38"QdW,B]}inNb2qXy;Mbi۽DjЙXL<G {9M`χ%|eQ*x_'u9Y /J˵YXKW*}ayFvddXvR||g kJn4í-rwo(P2GCZ %7 TQ vFs{8 DL&: hISJ'(/Nq84/eLD]sB[1<GH@4j؇ J3*=L9 s^&ӧϣFD)gSm/6soqHV.[(i/Vwvq!g2]+sEOhOfbm|[1j2Fז:CZOʡ Ή(> Z4F5l UY0((!MTN+ RVFAQھGwbːZڲiB!u2!FxB9䬆!kEHH5}L4O2 e-՗;╨YV=* i^7i6q2i2z;U ]l޿5$,ŵ-TܶVI$}1 : &Ȧ l(؁>hL~ n0~0Ȳ 1Xh)IRhD;j@Mqb@RNfG(QRG?T&BHMM,'e[%{ccrš\elZ;i8k'cm-3-UYs o蛝D6Re WOn0'N\_ɍ5ә+j].fI-[R `BBq^ g^Y"jI)D7qnA lj"O*2NS[ZgѪ #D +%RK( 0\f功WH<4&{ L %tD=Pay#wZF2v9 W޸ꗢ?\WT.:?`\(\̷zV.u5N4s> `:~lG"2kLp HISJtyFÕP՚p".`r1A8dm'=㹤Ƭ5&QCyF${Qpvb'34&]8Iۺ\e6UL1,ʛJ|)V&}B0b "JdFdڨ;],_򵼚7K$ zҲnY ζ,i@uع̹=;c\ > f0.` SB SI6HY.NX"+Q*Lb{S"%M0S e.N#-be9m*ߎO*˞Խ!N ~ݩq.s{&aSѨO}[7Z?Ka ,%Z3X7KG/ƫ/OJ# $j;)X+Q-kr[LN |~ vkUCD&FQ`X SФ].˹B!Md(ʝ@MfҭA[hvMm.:FppuRmqOIsgrWk]"tϞT7@mhfW)[ozldÐx7CE`Y^~okzfL$.騏z;FG-PJa}ygz\և9 UU_iHB7~ǭ.BȥRO::u(~͢"C>g_20}@(jT`X$.<7)\vh5UY$A+`B UJgqȪQFd ^IڞZؕ4 SX&Af첦s3`7ybU_$";˽^+zޖj܊ΏSwishy2%"BɵXvʤT^&v))X.?x$9ǘvHvU^\u0I)x=-~˂ < LKU^gQc\_{ZK]m(Lhȴ^Y&p8A}$`QJ}BDUxk"D\P̚X@,"S&K;P* mDbKU- s3P=HJV+>K9gOh]ErN{I6=D< 紹blC=.mF`ٍw0]"[ݢZ6؟g ivC $YZK[H; 6k#``3IISҔD"J,ZL$N4RqTFXx2A!D Aï C+LvzFukQ|yvN !Wo3\W孧⟂0\GⅩc/Zi2JڲTP*_GCf\WLmM\ew%wϙpd 9_b@OggS/[ 0q>6z ESf E i.E.%4>(vപ,"R0Q >D&B5$MS%lĖqWB&FoR }?zM$`MjVh#k̥8 yyC_xsEdktuTzwvY+Ly̻e3k +\J!F8J]3`.1`b|TFT!$hMUFĄfD4j`qUkSX8KVIۤ"aIR7`m6G/b,G;ҶuB:Cb't2m?bݔHsks}]quz2+A|1y:aɌVnEU2ٜ[DV:mi/s# )cvXRO3iˡ8>`jn [}@!Xi RJ Z ZQ%@nRBuJ#eڞqT"iMh,lQiHEpx"ipfU&9bVw"B(iK.Fʂފ%m2G0WI}am6?ho'<όkW||+C-(HP_YC{LXLGhvGHڧ2>eܖ8sWs[RPJp RJI7fNb&ĺ(lH2]F@]BqҢTXeeU!L3YoZu]X4bɾ˼͵xD(KYkΤզKXo654B\?=A/CJroq\:$vO8d|ݶB ީt$~u1oX2(=i!a$&<j1&*jOEsIJahѢ(L@B1Jn0]t&BL'\]R%:,([9Ft]<?5n5HtMKǔz攩Q:wl0gl&k4R1YJe?W۟ca!F=ڣR4iJM:g͏JUmë1^~ݟF..mEجߧ^*=uv\~Og 8l g:lmms-1.1.3/data/samples/instruments/steel_guitar_medium_distorted01.ogg000066400000000000000000001351021247673406200264200ustar00rootroot00000000000000OggS\EvorbisDwOggS\dV=-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSN\Be04dUUO֭͐jN41/б*84h=>eGG}= UdBgJϭonPjEѰi┒ct<ӦCMsS AU <0}@>Ȉ(jTj*%Hԫ,*]VFu᜚bZՁTDgEPW,Id 4%8[ () rvFGY P#R̴42 ]@i[#Pp.*3d/16;akä+c(i>Ѥ&+ʡY #\@W(FsHA^n15!izİX t.y@LnP5M"Enjt9cZl]$ YHy PRyqX ηa Hhh0>q5P"gjJ0o juD;򭷣΀o3-W `%oGԥllvlaJd$O +FdN%twÈLD RhU#aaQT԰UɆ5؆EFbB?Lə"$A6JI(U9QdaԔ `A[nJ=pthl j <|lR[2e)%,K2RL X-1t4oH (G!Fu刌] B-UNO?6+0lEEјFFRc-,p'(#7hV($Z`Do5 I*Z-3[ 讣1ҤurQIS!*{5Hjad1z` uu۽bVxO3aC VuPڥP*9OZҀ x$Buw1+$p! ƸD /qV bayeTDTФ?.XE u vv@& T Z""B]]UQU̢rDgѯ$As,I  IBa H^bXQ)MJ54vvec[lurB6 9L;>;Y@ jgL&Y@>nJ~#+D[cfPƭ33{aBtbBaQ l. aaCȘ8RG" RҴޤ[ ۤ&,$i!7\J9NE@,H TJ皙qse7Ǡdݸu!48]-ٰ*RVBd$$$%B5 gju(iA0BQNE+23(I%0vJ>f,zZND8T`1 VӰYLhѰ*(el$H2P0 c9{X*+ W-Yl2KtH$3 rHgW&62s/ɛcUu; kiJO3k3V~}hIi4:yUpc]hBpq+&*nä&%ǃ%MT(QSqqjU%ơV4*V2R1J]FYDB Pٽ/*ᤌXU Y(H+eUBTB$ł)G lq7Ϋ>Bp/ƺR1+1@es)/ኖ Ș)ԉqQ1<$kHW+& prńҷNsff%9Zd}b50iTʢF1YY-KQ*dʈ QHj,XXWeo$fDQGdd !Or\dwxfn  1^j -zbp9cdNM7Wh sU5m !W?" `+&>N3vP8\XPi] hL2dLQ)VQ(jˢJh< $J;L{ty͂ : c5\d x#֌*X H/ijC雍{ˈ!.2[8a(l%{rJeDJ CRȬ%ؚ b@M`܎5dRei>%`7mє$vSiDrsIJ-nvbGXo$EPGAq,]ygli03LKω]rt! %~DR7G@+ lhʏMD%I8SgVD԰=.Vn:E ԆiP3mF"d(Dm8-F?- YήT[,Vt;"> b7}%$SZJ17-!HZ%뱑 _A`cn }@,놞G:M'Z|`?c֨ʃJ+I*:M$3,jZ0aX ݘ1gBAYd JD&X#Ƭ AGC Y ^SQ XŜ+R4]{GjiM CfX@YM _LepA (>|hʏ`L嚙\"tMD#cj"q :RP֏ը6J;/e QMQfN3%!^a46!gUX6J M1(i%PG+W{I+q<#ekF7JKЖ4DZpN)k׻Pf1.aҚx X H p >|fp"g FŠA. ,Ѥ!e 1 j6XGEBMMFȜxjdYV 6耐-<8ahel+D6Aɦ# 뚧{5rTۏIY H,V幙`1ȶvwSR`\`!fq(>|f`?&3{0?T=b1Z(X#J`&8T,vڌl('55euLKUi"G| ThpivPtP`r Ph|[Y<8Vۘ*Nu*UDQ|6ݫJ}Q+s#^mƅZȽH.[Z3IrVZ<HAjΡkA$ |h3%1IŅ\X(I"2I 8]݆U D0"QPSfmR}*֞J$bEPiK@5m-h:: Nw&iU]H-\p%pefYaαuءLܦUp۹el0o 5U`H h OggS\h˭ɿ>Lfx c$ cƭ Ep\n8!V&6YhXfHZ2(Uf6ثZ !ۘ@ %_bVi2<.ڍ[5?`qwdOg2)+Im7•=f[)+ZYb ࿭%$D@>|f`6g.<&T],,qѲVÆSńQ(EC5qF@BFd9Dfa?M%Oȓuݳ UGp(B5E$[ID}G5BpQGX>X/c,̜YMlot+Urm D5ԘDpO6si]5rۇ(>|8TϘ"!Ku(h I?J dy.SiUT)N1Q9q1z4AGՄBPb"MFLʹ397Bm|U6d]x }`,%^iɠ6sۚޜRdp+,IJ: o1J^|ⳤK5: ASҤPM2$^P S}xQBDvW zbAh:F <r B7A^bZdT}>z9~3D+b@@."*ܬEYڎ#j/NG/FlĽTقNhK@>|fcF5L=ÄU+&M-M:%$@8 _łָͩ(Ÿ.#)T"爴M,HX/p")DvFYJ806 0N $Ĩ%zpY;XyTmV!kL@cHQJIL_2D ~_Ju1~%DYDzr>|fÀ3E̓ 8X8F$=b5TcbX UMbmB.&dZLT YG[lDt}=0!k!i:%L=V"eQ MIVkTCT:>Ji @V[\&Aqwc7BΔ~#.7J]ndȿ$d2N;W C{࠺{)T}P 9  '?@USeB mq:)Di32԰(&qgD)*TxaS{%v!g?mW0~쌆خov6ӁNA !L( 5 Ufך@!>|f˄᳄H/j.lSBH0bX-".P-hTU{ÌRJԗQdEb+t+)A%DjƘm@ź2[tB"M`׫0JUlL"R DlG Sȅ)ZD"swma0rꜘAhY|}>x\u>fˀm&|Pq>JP1AӸڝjQhfvrAmY͐蝝:FY=>H7l -86#Vm@e3;EPI HUvR_.Ȗ&="V?H-%~,ʼn/i=ɒ5ːZ](eqeDA>f"t/*g RnT= % J=GCZDTTMS(AKhq1R>K445aJ $ZRTXPH n%ydʣGmJ PqzP*='&u+KW"iDBP$\6 ̹* R?*$q@~JY7QUꃴ%8R? ;"jU i:1DEjd2ݕfbc!zHIF/CU (AQKlQ$kSR~._^3J.դ ) l5V*ۓ< )A1H(>f/g x1EŇj*q"]4acD2J vSV!BEVc\D0] }Bh;#PBRbMBj u&nvQBcWVٳWOEЫ<~ML!̛HD]bOđaј% B­CB%LMCM d?@01L\tw&JjXWT憤2 @M@e6Ƥč*ÞVδJJFNZ#GVJrzy'Ud'c_A쒡5pBQVg?60`^@Hگ$^| /*g 0~!J$k`-AbQ%;KU0UMcbEE1 zYψ䨀ڎiSX ! Ge@4:nWMZvk;[f &ړPB(51n(Z]ykWNnDTPUѥYCW@#v$֍Lջ52n,I4L$#cp)(ZQCB XLUR@ ']T@A llNUd9e&vɉ]NF ֈ:F,!d4pJ+4i4bE=9R0.s'-VWl2ҫ]0WΒY_9h1`&b'B9 ]䴁9>|fMk8**gL0&64ljU}Rb4i4t)uDZ*fA)XP)(4 sHi0v LFU5 $V.ha 0lD[‹49ln#痨56tdX ,)v;ݏ3K#M-XLBy (D8orpp>|fZ5L{L$U!&)ŀK"hҔb Πn(jf RQ_"^i aa y]" h5BJRjQAFj,t`5P,L qT0-j@ƎZtؤ;A1iOt 4UrƷWoN2G>| B&jȑؚ[u: &&J?jC؈!v%1qHJ(lD1cڑeVjR  e5- c: W?J VZZI J3JyVs*jqjެ<{/0qx\l6}Lf2*LPhA)I)kgYJOggS\mѣ>| "EgJ(҃VLG}i ׂ%@+!'?@;e BTfH7b*DRݮ(`-1Α"2331Ьa:!WHn kBHtE] ǒƢNӝe6[4\ٗN*{|ᅀ|+MYŃ$HX(' JAm3" b=1ꉺB0m]QVBk1U 2mjTmc3*2V@ө\T"uJBZ̈́4cu)u7$EA BO&_;{*CnYhnˬo+]pѐު>+gMq}&Q0fDĊ f `|M!Q @$NIgB!vIJZHfU5@p:Ĵ`"v69)i v*'c1t"OJ*kV0'srɴ"*6?4.mW}~LuW5hf6[d=*ǥ)6 qiMY][1pV>|"ೄo샪IXX8L" CmjbC"fŦbQHD"C@Ctj +R BPDNH PЀ4J"ͤG4#3lBPۑN:~ւKooHc^qټuV˾]'Dw|J<*ĸKK6 @{f 0oTz QlT|H(jINX`qV"Ic`8OJmDTD4(B4HB*Q09PB,2rVrBbdQ/: %Aq$ z r;f8S? }t&YcU31r]D0kI3~IV+M$(_8t h{ C$(6g YDLX .ASQ$'cI$ qGpaHRR&EѴ$S I!!Ñ`D1Ԫw?==`4HCY{)EEc(*Dab^`Rk/PAz`A2{HX8Bk3IdXW$1`~%{J0F5 04U_uULNSCБ"5\#5 Q A]}fRB; ZFmL2%IZI3Jq\GTG3NQ pj4R0JyAlmFPb9Ɋ#&?ng?QKS7]? Ctt#uخKMQ.A\+`{ C&ʻfBhʾ @eL%RFTFsj31 d(e5 m0$-mňDTk:i5Bi` z8 ~ C&Bb[ Q,t}Kq,s]T}i4~Sn6`,c>„ѐ+fހRzRS@'"`{F5 7;A3Q YW X4.AG:ř⶛j &C >$ɘ!:% rQ*9=ÞX@VI4CUM xKҙYA"DVbxY(*lYP(U#4\ɥ)Fbɬ|.m+lX'eq}*U{=^3FoJtfC@B4` 01C|D4E8Pi8-jZ"(k;0:IsHGj%>0\ƚ2q3OpbNvT[^9Bjd\n#O͹eXO"֥o~w/Q}^R"uHQ ߼vdolԅg ~pX{ )V`CB9% Lp- 4: % -g𕜨@k..%.e*Eì IQ$ M+S4*F?,1 -$Ѵ,9RYDfNR@/FYsg l12p<)63|>Z&bΆHl5Tnn$%7 *pMP |+ʯD0' Xg'd -*iT0J $ S 8ޑ1cH" 4Aą$R%]&'{BZΕP=IҢSXn5IT@Dc*S~æ?Ml&dJB dOƁ?i,CDDy\ !txp&{╠)xs0Qq@Hp 0 Ihb*v,h" N-#< F"So)1i^ "z}MR"1J3X#m9┪$&!v#tix6ͤ ld[~b2ɮֹa6r"*݋,Ci sԧBɅA)r^Ip^|6=D&f*9P.Hr8DI?@ "4}bn, DdQP-&XP/8-.,­0QG6IEiNT$ 6Kfa.Bҹhw{F2{: RZ1Q.[ ?d5RcS)q@R7WcH?B.{W4 ^3C?pP4T}HJra8CBLAPe*IU4v񚎊5e Ee.$g#;xXp%0*(Du]&')gwcX9 4L$5FɺVK}5j>}r.*7}-xۻҧ CZOvO]}9>|+Ih(W(mALX MQ!@GAa BtU,]Et,#(t)0?H4X 2Zր-SdhB"- jhU Oa<^G}c{Z-mE XKkK}l,r32*\%vo ʙd  {MHMAe,7'<*>2"X`RjR3fyIMPQB\1*VQ/sJRMZIm`H ۺD*8PFC6U0BbsSr@WT Zi{PK[QY-` Zjy%2w6,e7qѝP7"s"rAjr,=6ʇWx|nL+ʾ>,59N {+ fkOZFAGbGb@4)1Ć3!G]QI&U aک4ATAE6fi3P8P4M*."qYMD"5 2HU"| hDU0C+6KӮ2Ye,?9躍\hďˡ,>ߧшOz@QA\{w4- S(&>ԆDMXhW05%y]A0YRZEWP q :gLzW")+ PZa 4kP +*)#E ;♢Uxf6>s%&͋F{ԇm lmgLi]aBotIH  {ě h&ݲ  iVT $Dj=9:aS5(w-$=j8*t0&ZH24U&?@2: g u 2P+= (LaP$"Zj*& uD~\-0N텪!ՙu,7ow$ԱHws],U[Y }c+*Ƶe-$ {4aV-K͉ PfCŃΰ,NKRQ ?V`8a"c(2d>'YԦl ĕ XY( jUT%,9I4**m & DYI%vppJ+4eʭC-|laܔY.e863TOmcщap9w+@rpOggSF\XH̞kwr0[ǔAJxwq"]o#˲@)(kw Źf;]PZ(! 4)'c>v,P7 @*4.B"Y;@Y'F9kQR 'Tꈁ2Xi2t.EYTBQkv 7+ ZQ-BzHH>:Wh/^v3[3c/ erd 䤳P6P=~ 5 kw܋ ,D9#@Q+J@H* ?SUMT1,ⴆNQew@#Lu`p dp*T8;8((8v _KlH9S"ū%g9GdxU~!5:HUj/mnqo?zXf2?Dt$3hEf9P /<8`;G ,x;>dbEΣ/M QO6setДJF Y4蕐Tts t7 XAJXhDFHe,3Jg0&W \E[R7)ev'zzٹ!k獫EoU,XK\R I8k6{ܓF8 ŷe;( VV1A9]@C *5c L`LGL!bzhX39iJHľ#T5(j5 F8>"BD R}+Sc1lRstFR6VJѾʗӒ3elFn.AOYk/mjPE*"n *@k6ܛ"8jZ}vBGF\R@RdB?/n.8xNGʨɤ^}dT[X(iձS;ڦ"mRhD*u0D BU[-TsΉ]e;lJ+iRWJ"j43wS%] [s|b°O\^;⒦tT߷^u+vb"%o0THIq$ (kě#* ŹeC9BrA@EQcΑ LL -ꄜ1:BR)2#2IR(*@N$4^:XP,+ v(Y"ऺLFֺW{ԏv&I$YxF[ekwh9/[A3-Gvj؉MXM=QsJ[4\VE}Yuw \ 8@4k4eqt G4eI ,.+͡óba5L`ZݍF颚!)8d[ЦRĀEckFl6k TOv&,+SON0KN24,(\i-Ɨ^y%?gao(3meٷ&΀~RI|/;#:8-G'LP* %)tC4CURh't(qX,hȔ!=%$M C%ͨkԶ ahB﹝&U6Z K*y-)44hVvRYH;*]bXEC'52>} yR9|5bM>eOz ZRM%d kv+n^yYPA}1 XRҤ1JnCC]ĉx[qƈ5&OځB]]FDBQlI%eNFPm 4H ؂-do&,J/BlFTH)M{de^=Hk^&s;I,RK} 3{M2*S*c`8./h#@@kwtc&w˕-)$`r(1ViJ BT!H&J:O!VQ!;.HR.(HDM}"2}\Iֶj* &`1 ="I)[GB$:$&3kBP̖r(a˝1>}Ч=*.;:o4e k&cUgb݇:VvՏզWl]#hD,$VT$Lʀ$.P$XA ґHW+*L DEL^2i-*RW2FaIjx DžaCM/<4`BrJNL(mI4WԱĕ+5fAP1l}ׅm+o:U˘1jV,@О;W jID`b'}YJc0!TSSk ŀbUҴEu2!֘r,ŀ F%xIcE*03q*v5\UêbE褐=ecڠәrSg qQ2fClY:NIqjD*AVE)9hJTFC;UofMU 1Ėű'"7gGzsohoԔ~r>I _G&r 8 kNwvBm9hڠB X$" U6CT$)NeL2+I; k]bGlQ:m:X#2Vv]e^t!M6lG~9#SyOWKqzEmƽĻ:D 5feSTO_sKk@V~UaRH@k+f{]C@% wIMCRC:XtBh1$!6 U!8]MKw 2$+ j`U(!TZC|kE߆՚5e6oߛ~`v7|VL/Yh k.Od7 7F2)ʃ΄$,)* 1Tr+Al&V-gcCAhXSEESFk*F-iVt6NEKvE('aӉB(qT2zl%=7/lsnWZ--B\nμv00nk}ش{Z?3|Vg朒)hڃӠ @[WX}• d?a,IcQך U }iPaSAHzdg(9km5NJ9 ؂a{ Š" 8)${]@k/&]g&_+{wh'^3qK?тݞE`Hi_D `|@H4@ 8OggS\S"\n=rt%WY+3AXIGIiߔZκ`hl(F4GǡsrԊ YVbW\ Ĭ:yR I@#mYCu.SK{k*h%cwk/T|"JgV2z)Wt.{h_g{p gXd$Ђ*r[{*%'=\`oBC@1D8bhDrWLW,a+@[[H}uW"ʢ"(f"QI:X*f1N`*p!-AǺs3L:'%݈HiӤh mD+"uz"}OXZB[Y,/%LɹK0`Ap5p8, [+r%{m  L(kTK ESR$R Poʀ =C(IbQTB/in7c* \Ct#IΎ4(]P{Z= J9*G[\Gre%[Iҗݑyj8b'z+Dv6׆#cYS.K_b&ֶ3%@`@[{nɑDDh>" j)MG` I*Ē?1 24ׄئ9QSPZD06֠c0zBZiD+i:^ԉc{&0gJ]|Rړ]C:)u *PP*5qgcn-R4mZ0xF5L-s}3aQYzpwG01:P"E [N{Q l0'\do 9M%1A$XTn97jdXPUG4RW(jðMEC(5b"ޱ;TB#DFc]GR%LTRYHfkmz-ѓ:fϊvMs4~L?gi%jH%;l:%.7O' 2KvT82^[6{)^Z}? C++J&` PIDB|bέ"vY1VJ(Ȝ]jWciS2FR%:xF kp&6%-d;q.ChIrwۜoiicFW5Nؚ)/H3'V)\\H$Xpd` ve0(~+v{FZ"1 QGQb ( %M 0Ji +ꔎ7%#"ۡ*`L\ qJdYtWOoٛtU5AG5{ BpfV&2pHm<Ҫ7?{lurfg ¼] Z~J]c5(_U\ V9#(0~[N'f`[r&_%;"r&UbKbR#Q!tSTjkh%n DĮgL!O'8Ui)iEꔮR Ji|1[3pG[30318 8yYd+/L[>2:Ԉ2HT8lPToQ=>ͯ(K1[A!E3pxU5 H~[v{8Y_h?G*&I4ё(cXSO<\G\MfшhĘPig˓dELJ ozsWm;"$^iPNjrp@~[+~hwĿW|*1IPPi ?$1 f.Ŧ""ɂDG*“%IHmJAy9n 9ɰ>-BIAm*#HKL ūAѳ/[>C<lvFϔf+Q3M$g;`# f%0~'Ė9U(d?!HH@gh@[wQ P3b' ԥI2q-H!VrC64U'1*V[eBDC[I*Kp*i4C#c\vaEP;4ksNK]Þ'ͼ]6>W!oj*SU=ᶓ|\Y;~SAve/'? C1ĹԀAEI8~[N+jvq^WЀQ 8NSCry9 9&ϩ(Noܙl/UƪQZ6F &P.![>M¾ Eh[4Nc7cA *6{±8[['L[͗[gu~+?a3K'z DjG M/XiY&()ዒ=ZEf3 ĚfV@ڀ1=FBReSRe9ĶN 45X$0([4 Kd @ufj] Re)fU =L( dTHEDV?J(+FM@Kwx uW hG"ԉJbTR1D}&%p}eg%zdI2h쐑n8(X598ִ  vZyd ʶ6- +"sSo4>b"Ӯ\e3XT3R&3.U͵H,kg\ .)@>K3~:&hgq@QLX8"9]NuVw&vHMPo* 86QIzDFeCVPn{aC q> Us^VD@͑d+FD3M3&MiT66WCmwq@\Zl-1QpZTfA[[dz 48g J6+\L:v+\E #f(Z`! CEG!D?Dv!Ěn,.j;DVS>3A(kBN|{ |Rgr_°M: 6QH C:N=Aݨchi^̼}ef0\ŦB8 i>ΐџ)*'uDF#YL:Y*nk, )$BV@@>Kv'.'=ib>Pb* I%)a(T i=@N ; /;QROJiBLrV띗IfK =JI\2`m%PT:푌K+ M4Pe+ *&y?L4 Caڬ`l,2 =Y;jb4N딣@]t6OXm!tУR8;$Ta-QE,9im&YfEՙyͪIgxy n̶o%3YLN%Dڿ..O[1Pȑ KGʼnp~KvW)mq=<+`$JRcLT[H!Xf*dJ@-"!CL+G%25M@Y' n%U2[$7]Х0D#tH";&FT=niJ47LI5"m_9&Oըn7FlhPȻjFzBH{Nq:-~OLaׇֹw ` P[?OggS\}>K'*`q^( 2%+µPRRch)B*఩@¡!+XZd&0tm8DXTPUeSKb IgJR} 9c5ybO6^ߗAoԼ.ʜ3ay/uwצw,vQ./Y p@hD!@>K'z'VEw1(ZGԀ*8*:HAK1Bv:* U1dW@w$Zf"3j#b fK@ An6r6g1K(ȢE^mVIm :˟\2Eqf7߷Ч Qeg)Ӗz7[MG̹Ãϥ B!N`K6'\DUH&EK)*(BwS ŨΨ*>Q[ ^A]@S8H$Ji 0Ӱ#"lcL׳.Ni& *R)msNi!RW~wU_2sTJrf=2#.g~֮kP ( Kv'6j[F|y,&kCEcA}Ҹz1!&(.DBHHRW)G&"Fδ4"VvN݅St [=@I[*J`7@vL[A(mRʱ\ϳ[`2vѬ_TNƮ)M!q䫷w#=^LBrE-\C8P J֫@ UGGh>u&,p dh bVjSNC0X;AQ0jW SH}1PYR(+܇3gJ 2^˜M^D!l׿tJ#2JB%Z\16mJvZmPb?3geυdU+Bghb#Fg8Jѧh,ikc4FHuaY&AfhH 4d!$d#ơ*ǡ1$BHd*i5e黊F`Z( HxEF[jBf/)H`ߥTŮ~lUYNpo%T⳻YS3jf[ˇ,6r%TЮiXp ;v'JUqT(?@HdA0D@Q5 -9qT1hrSik#p8j* !j(pS.*4 `-Pw605)Z$-woq=6CZIZԽ+oelۋ-_Ȇ`K7!9Ignad l.cXMٚ4$A3pRp(;;6+28rƐP|E50I,\+1P841".nPrh[4TA0#BPe$1@%JڎP$P AA "6dz ) ZlL23K0vT[ŦP돖ۙ,Բ3gb37R3C[䞹'&\5)Xs 7؇aЎd;v#2Pȫ. TkIbp-XP $$q@-I8\0'&VEc]D (IF"* ,4*<v`*@ Bv,=2B}4aT鄾Q^oK+d2 sslGHOxBbˑp^;N3z72@* J'Mp@irh``WlvGD2\S$R&}Hk6ḮQò4(M+Ѫ@`N:n&;EKȾ&{$ tv,c=$vBe]%X6<7qaY_|ko/WQs0+Ip ?nmq@ ;#~52@ReE|q4pz&c," 5yٮ*SQi1`9n)r\t@VYJ! H$! SIs: )B1⨂#ilJ; S=߶i~9V0x-"X*:ԕ꾳Dxl )mI!yca DP^;=n6=*?BTA .E@DgQ^U璒LD@1X{EI4R Hl ؆V2zP }u&Jg,w-''[xzk`>.*}}M WeD #K 6R9*pPq&Qh hVis6ciZhRXRB@wBTQiNъy +rtϩ=x|m IŭG}ʢQm/I孶u!;2L}& 2H9hg jtnIr4@:#z1Ak8n&1:A+@$4y^ht1rQ" Jwj2 c޶ijP*Ѓ@!*5*$8 zFQ09|+onV4oN绰;7ɎņCUq뙸E?5.W rFRXkYKs>òzJXH3w `  :-Ni(ouy~g+Y˻)Uuj_$I8SH6$'_ ( 48p p*-\f]#wIa|@[DYbI\)C$qrPb؜i. h"3UѴФUtRF5#9E}(ЈvG}-;V*m{_E:J_3avj52g/Q[/Z+َl$v ekoo1q?[SH6\Q0bΆ21p +.kQlRƬPC|@)UK@SJUpxمd[Xrh 5, ^eD" r, baZl!>Yy a6152b#YeMd62$$X][xT,oJN?MB۪1! b*교\2nuR03j+ʄkIITLꦁF"R ںԧ *eb@u p߄2huIipaj1p=F1Ci.2>g̘4bKcxK3nH}eWܳVL3\L$)M 1@ʼnA#IG$*.sLJChR:BMZXA,\ C:-/RВNbtI pE ŭ1 RBdfeI$4{3tSr`64@`wx*-+J\c[;ԓhw:?.*گeRˍgi5jdkX3Pp*_W*n:0V6^uL,Bo+ .A OggS6\ cI*.slX 9f5 ZPPLC)9?Iy<EB uA,\dt:TAGVCD @4Doa>-..ȓ2-x%FaߺE)H@-#/+ >KuTf7wncՑeZ*c I$ccrc\&l r*#VuDPP( K&Ba?b85pTT1PfiFQB[ wVqDLKdQ64 P{~ZQc_벥/ɔi(ĚZmś+|"#*`QnO_'UXRa P$QCu̖[JDS ဤ<*.ս1c R97f&0tKt!d5UD9MT5EP͎@DmG b*@tkJe- "%F&ڀNǭ=:$E g\}=Ym^ԗQ8- >o[3:%|fbq@V~n)f4͐:rP?7L^ IRx>Ƙ vvU,Af Y^e5x7B,2*-RΔ (AljȻ]҄)]LyCŐVҴ4/Z͎WUvJ^ٻ`KW:"~#t!w,a C aI⨤o`ΩL@@)\͡F971I* H 9*ESUf඙6CNHì>e#zmu1#sc@-E-Hلy`<  }c)N"Lf+Vj fOF][2&i-ԛ?ww?ym9^]2VCpb ~NCI vB?TH4D߁r n)vA+x$Lg5P#J . i(E_*@T[ ȾE!)`LMKYm`֥Es2cE+}v+\3NL y޶dIq/W5X{ulKhvel#ɆF/!|.T@@{BhLn)ru6ko>(0%Hg XݢEEH+&P!AD$jzUq rĂ<`+NhF٫Ē7 %MԱ'El ӍHAЅεz:?R: o܀`^,TI*nn9Ѡn\剦ڪ"0i \ ]t:c_Eʼn.*.%b37-(-{Y=d %XN I"H٤[TYWJS"ms]ؼLTindjTGAOF#ȟhh~x&;`*b2.d(g)Tm Wq@rAD0 E.SQLJaP簊I (TTҒV`h "3l1b(-83dB 8kL 6h $%PZ0HG1"IEߝ}&c繷oof3To+| ՙy9zZ~ fI E/C >K$kLXs(  pn9b~{f$-T! @*Da u4 $P1DDQh$8v9  g 'V cAG`;g,/74%AVpg̨ܫ&+3ƗRUd4=:n,MnhY'DpR:ۨbV\UUz`tG\s1!n9j@hNM=G\ͤ@h|ӊH$J)y ͍CKQ*Cn#aaǜlQ܈BVhC+!@[ME9)Akx5)OMcN삾PG#RSa|低3odʫKo39-E*T:~g%o`>lw7 Ʌ@$ JPhRM9EZJb@@D&)Kϲl(7j(.MbJ"h#:Fǘ+ (Vt4Bz`lQiJMI_*"Lf=mz^4R<\E[vO7:˪:(L) ?b ULPUPp:MU NX dwߋ51*0* 4;0$4 [r&`+Ku6ͷc&٧]p3#3`O#󲯷Ó>TEm{[\L2G\x}Wt~_\=kVR̎Cp%L   )b53h1pm)\Lաԍ(X 8Ăd#*9)nPX@RX2,aGy%ٸ+ R8Pqڎ5rΊz&&z Zo4m#~]! j8k+YՂ$ln|yžbۊb) .(X\d.&C m #bHwn ?:BU 2D?D]UqR26`+!! (",UiLd *`+z@슢7dEp3,[=+bd&DfώBYJ۷>$i"/34gy#3}U<\cl P?Y:l4$eH .S8YVD>"TL$hud)cEAWB8u5 NAQՕ2RbmT#lk#`خ -Z]} [nf<J[&HCsWy\9iK빴bg%==2Sa,!^bmjAEOFMK8MHI/W@Nh @v^ .=r [G `pL9+HVIz$GW0JU*tigh)K$(-%zDRi&Z:JJ09 2[J4kz\D ^{xIm]64NIk+ŏV-yΚIoFzo76\^W8 .$%6@Дhb # ;kf: r, &")a/UPb*ju@w ER5Q80TAL@gYtGJjXD;AXu*rMI|)VY2ʜŋ2[r! { f#U%T:BDoU$ Pq)g.OggS\ %i|ڞ .S(q=f5*uUȒ\+tjRJLT)]DP<,Y*޸Mh!:(-GŲ& ѝ}$$-YP,T3qy FzĞ%h,=[6_^*3{m}0a30C1χW+^셩ʅ,1ܷ\8go:"Ljl˰#b^mV(͐J54Z2,4~3J" MM qekSęk*bpn@UQ[f֡R%!![ GUM[?}AMy=j;ջ!M'[l1Mqqvբ'o$if^osOmPJB.zOJ&,!:v /APHmv !z{uU&N:%&UHXDՀJQli!6C@BMQtg"Ә(:IQ]'G@b8?΄`]7❾L^[ezПՌz;8{H|_qZxoٝW]F=Mhs4W g0wo@:k7ָd I^V1hQoGh G<*LX&u*KWL?;Cb%q.`4@Y@M $̕F{^0a;+( ,gE]fr)R1kVh%qFUș-m4Ik-w2:݆g+JyY[t&acS$D^v˖f|S"'Į$Q8n{Mo ( ԫ60A50Th1w 4L$&b*ڲD&T($ VDPeV+ 峁,l!)Ѹm@w;q ݅i0]V\Ҕz#5r6^d]\sb`"=fBfPO 6+줂~-Mc` \S/i LBb![02lvST/U"le׉$iۣy+U>r:pv5r!.,C\2|iq-Zy0 Zb wK Z.808J"^mR-r40|ճ & ,y UE%"fP0͢CPN B[РĚ! !<bfJթoa&\v<|N&)hىۯj8UWmK-goT/=ںNEz3Yoq7LYޮMR-m27%7Kh>mf004bL\+h5ZMJt?da0=ƪeS?*b 2Ёj}/HJ pV *Bũ \ eJ%'^[a疇GG.D5]{X:,^^K`sW\hEtn5XjJg[?H}5rΕ&+/40¶1XjR 58~-0-Pv{edaLDUgd}@0*D?h VākZz-Ȅj]2frv ( Aedv֣d).X;~q/B}']oн.i^ ŹoeDTvBvgp6oղqkY"k<"^HJ~@Bhb>b0Q%f B8QUP$AuER|+O\GAE@WUPP2تj biN ^{#M"kz4}P׭-N& ISZ{r~1qQ?  f$LH gbLUsQ ِ aU I;Q@MVUF+ F1H`ƌV &Lr=x*}fUt*ƚ0 QtG%RsڜM; Xt:yvT+ۜݓ7{lE$BJfV`-6rf%.TY:;e})9F!c_ ۠ E&SJ8T=H꤃Cig>-UFM'b0JCJ@i8t$i(Y*]+q\"0uU-K0 rݢzB,f! :lmʰuPalmæK'`JǺߪRa+, Ǖ>KA[Jb&YHik{6bdڤr?&U:9#68t>-5f0B\$1< PoDJ5ECHNj1Ta-VֺTkd.$g-(жls޳wJWa ~uKz<--t0hr{k +4u2+Ŋ%1hҤP$b:@qD%֦N  3H6%v} 7cݘ p|8%k߷-AԅQzith.\hMF_#oگï5zl.Be~E qc+ɲ+IOUe%ld}!.ֵ sQfվ .N1lpD%E?k*k^--r$A]"WQ-B]@ gPs@H{0; & F:&PC j`¶,'ŔN6Y9gٵM>,MdN^hZ- F=8_ИX{JcDzji8.j^GVi !]^a`qI R:2q^%r ᔻ(k$8-U+A@CI$ʸ``I0L˞<" [`;^yH4HM4xsARG^W^L SbWOVɯTGyյ#&kkՊ"< FDK]HvVpf (vMT vbtE( jdQLӎ/bqAD shHos;"݋\=& 0,"gXUmoJq/Wڨx/s#1uŭ⣇_us_LP~p8RNA~OggS\ F>-5Eʤ(wT 2SQbpZ҈y^]6L#JP5\QV޵L@p:3@f@  ؁(2vJ,6]Ӕ^QRPDE" ;&s$.AE]] ` ar6f(%&Eeww"QKΰPaK) E9bvҴ zqU]}eSk|#BfZXooۮ|nVئo`*\] ^%r1J)*`T0p $"E%DQ("X-& #"A!1e8>R"!,I# l mciN~юLkKIBtgL&yS;gF7e -`V{nm-ri>Ճn-!~Ugk1uWx9ϧw"aqP3>.$8-53I@(w*6HP Qɣ_DZ6QTTW@ВUXəshS@vn8k ֲNI8{,IT'gsYCi C֣ͺzf0:K)ueLް gr%sә/uLn,\UpS{nZ%:-p MʑI2՚[92 @]YbL<#A"(^vwQ)vD AV@Ř M@PZ߭@pfgcHcx6?yklLmьY_( Io1gchXF̈́x$t"yF0Q^/S̜l^j* 70w6"Rj`pKɭܚN^(& r$\XRytǪE8-`b('X3P VFX&HGÁLSJ慍07!_`-tqNWѷFxy`^jݘ/۩N\EsAMtR[|UekXDj8)y~KXfI`fw >-deQёlFZI+J,PQ?dUT rt*+%Wj(" jE<R@@DžTلa@ ^|&3na&6x٪aYVs SaW߅W-QtC jSZWfySѢ9Yo&Iqx¯;"Vvum$oa FCp) >-%b$T@(wP6RQIbYP$MOWu(F CH}Sݑ)tL@Pkgڧi|@ĉ-%߱o5+eQgDn:ҺYE]n2P^Į<)şq= @ 8H+Pa @j20IH Sx:!qh>'1˪.&b &z Ν}{b")ݽu  bU]ꓸ¤󰺆֋sC%sR)o[#W={3Ke,ʟ)sj9$\u*/6RT.ۙSZ+$-8٘%L*ݐXo$[tm꺡^9ÆP(wjnZ3ȲUB]=)kŝVA\,Q zx9XsCm_.b#LXyj@]ӌZk{8J*jN3(f$핥PN9nAtq { Bd⫵@H7. AP98n&#ωΗ<*$cU XMx2G:2$ZˎKgNJAg4[Yw%կRuәzG-A>*tw0U͒o4,Џe}\j>%`30PLU>Ȳ`B? ̜b VL@ 0⬀qkmES$`vl.6b3uVRZ͏(| ^9۫C]U۾i}뺞ْe&|aZAuĩ Eܷ 7YtT[[%lϪH2P+gQ*v )9b%r'e 9$ V @t*)y@G vIj"*K@#PHOBĢ-0 w1Ag`dJWMM3R lCiwayl]Pr E򳐴RfߺJb++hֵ˕ z飵0~oq/Wݨj2LY#߁ r[1V(NAs-1" :=MG3$TTRJzAPR7>PYԈZ`ϳrMYtl %ft6 }V-]DJ8!!jB=MJ5md$+mx(ɮ8kld%3u9 Z}*iܥ2<6G/[ jrB3aF*Puox )bF1ꆨ`!$ ҨDqӧMP@`& ) @9fJ9SQi!aۖ) 5u>ۆ6|,S[mC""7?f;Bٔ i]¯3c;u_={uwbUÂ@(TY X?J_pYv)$Z)`pʝ)f$p]9< $ɋTTMTbv;&H84*QBD@vBZ (d0RYAwiT%)(5yysF7vu_WW|b˜ 듦>T</^1jv3R*l%';C6Wo_ee:Gsdz빠KEu+v^pByIbp핹1 ;[S$#@m +D2"ϣCR!ݣ t &F٨ Td"Ʉ `;ݑ;$tU)Vp SlH[ltaxgQm=~$J苙=O7FlB0[_U^RK% +_7/{ՔºPُvqB|9w[O4کv{IppOggS\ t2n>1c!r'e ]JxП²$M%J  <6]T$QjXl ŭv@"8@l܂dahծ̫}_ytGvW[_gz`t*ͤL5r!*qt(]2C^):A)rCD4p2`,LJJ^>Q{˭NP߰x``  *@2r*zbvp hȊIaSf7e{7̚Za\ԧb_Bt:%?wv}J>٥ vBY^O uT#humָ` kS`־ )b5I'>-5fcrGnhPԪȂ<+&Jtd'r'*(650l! |$ T̀ Kp(}D/^$=.v$O~6Μ\lF^"XYX ց뇆xٙ`fb>G,଱|e׳}~Xa9kO߮A/A})1S$BYDg5Q YIiRVX МӉPӠ !b ÖTca =$:LE.-(wg>*_vATϰ}{)ݡe|C3\͎ژ1KHi`_~#~dY c癈ęHs 9!b-9dP"(S$L> YEbkC(^QzWWKuZ ƘV}D*qIͅ@F2dLg8up6Tg/٠zFEZtgQ_EߪQ9i{`ߪqqo;W}k]võWfU9?/1sbĢX"\6QbE%M0oA-9b%3j:5.F D$MCR ǕJ q*)éN5%+i(^ yylGeEgD٪@dޑ٭M2&WvG>!yD .~\Ə*3ٸsѺ12E0*& (QDW3! n{ *RTaL4 JtH*̑*33 ܎tOE>GiśNL\/Gi{*__zs.yQbd0^~frzekt3{q_SD"&'OEc-)Q6]1d!|re`> *L"tthe”rBaTʆ%PDS18Hũ;dYst PvRkFvȄ#<\=(J# oߢptR~e(VZskl&qڞuW]Fs<[27;nP+?PmNrs̑(m;1I>2PL>arpZ@OAG<#S%h 33 @8\SkЁjjfv)b:; eq<ӆ˸% rVtEEJ+i>rQ.+4A=Dq֍**(3Mٕo.ƞi]0$3h\fLI噰N E+`pʝ!2>2J$*QP$dſUGTH⦂{QPdVud4,3f[Dt78Ktp9<=FN6JonOkBKeJMWBht~`زf2pa`bEo_S#Xje[ .s1E_a5:EۂL_Z|%o8h#^13i`4ʝ)b!`#Mp-y GE. Q.`bsJigHD" ;#:ǃC*>ц6ɸ{$0 $h΢Ʒ/(zyV"7ȘɍV5?/ƲyYZbX\W| !D+q{~*d<#سX >)f 4ܙ" A}%ieZT5))h,ײKQpLj8,PPB0M>%531+#+)Ed0)Y7j־T$uff̡ElTJt&àP}|C'N敍)GT]vz=]>#[ԧ=IE`ͻ=UZ=x3:!%X:^)2FkP]YEC`>dMIţ' ', N<ᴚ%!m@ 0-dml z1!pLts|.qP v:.zߧۛ2yOن$My4S3uq %YLm8xA~l}WͲiRjECg:=H;L%K0>2f9! C1xP_H(1%/L? wiJ%SDa؝"8$APSz}d DDu2A0V5aҤ͜궿[ى666AP:mtsigkk6<:[l2oq&-*k೓z[lqD:,)Jx4a(L gQj6h~]>J+9t1 Ƀ\b45.ђ_%D1Cn)(eD!6`+QP4,3RqBs"0P4}>JdIqN1L쫍/g2S`ᩮnvI;1*Zlqivsf&\gMiTɭRw%N1iuYw:.\@;H䁻1t2h|r'~𑈨 +5L%* /_P51$1LU&P"}/2 DHhM!cc.(^e>t~̛$nإ-v^K{N\[D62fm\k)^Ύ'_LU0}l&ثk^'&֜4eqandYkH ]!MnOa > 2XX]J ::Rb02Z(f2Ag`j9Ė !xV({aV@Yib`GSJwRʋԖ4Zֆ?RW?F o慰sn0޽luuؾ^7W'n<8a,X,V^1r8 `NVhBΈZN%ygj -NQ|5N .`Ya$1"F";JT!+ڍ1qܟ(J6'[dh1 Kz H6AfUzu-2+VJr[ϽRi!w謣ױdOVaʦVYʱ%-)}Ĺ͇7uPn*Lh )tH :i|b$N"kRN%ѥd[kEDm`u51X1:#, qvpC#/wbcw${+p{ʞED[ FV C!\_6W/mTpqӄ5neg)W#r,rJ7#[+;0|OggS/\ y9ʝ1|rG~  @!EעKӖ(I!6*MpXlAB K  E ^Ѩ1$й?>m ZIғўcm+yZ-5];>=yqW+MY|ݪٮ+Dֿ˦`Xյ=Vu35Ȕ$3XXuY^k0V3'} 4>!2AJ ]1 Z0DyJ ԥ(bs)NiJb$4dD"0 '@LЀ"(CY1+w[JڝҺ=^."˔yHžܑbp31([ sX}?7ja/Up235UBu E.{+PApo0 |bgoPHp ]! U8ܕ#* ,=3"J,`U-(]U9&YF6Ф57EAy_q Hg;=nöGoA--jڝ{IjjbTˬ`N;M.joo?Jj&2hv6zLUg/jfǬgWa?UU2Cfm֐!%"+Xh>;Id.SDЙ@T)jp(y) TU,8gD M$: Ȱu]Ul"wWW-^k&4O]:Tϒe#ذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSN][49ǿdW㵳+ڛ0sjl3iH-eGq&RDtܪF-ʌ[D5S\熭pi1Z~8D?<SPpnN*.S bePqN3DOWQ-ENQZ2VK2c7zlE9SӊSFudD1L*1tL=1TUB&yJ()8A#Fs @(U+3[d-.j*\L)4C}|MWbŬ+.Bmkrs!8LJ1;H %HxPj 2"+͙/W9 ׃X 4]hsg7E"H&(V5D$MBU "= J%5*=s-Qh[홐@BR՝GZ(m*=;? 6Dxq9wҠ0 pH):!cB)gkL'akF8z,SJfYL"5lp1f2|qS!m]G ]X"N;F| Y1_C>4 =+, [@tZ0cvP5Xh5(aU!S4L5YfD(*. "+ VXmP,c V$B]Aazw9mb) !vɷ݋i[ d Vu[34A-g  Ȏ0L&] ֔lX+e@C+FdM$6&s/q}<}LraƒB&oEvLM@8JQ;SB4=x=uU,M_k[頒L%Y2w4(N4É6G(Uz4B&gJxo-\zg)EJBk*{WHgoG4]Â:lWqsTgjCŔ98:!eA+F\Hڴ[|̯ ;dfc! dXI3Y@ʐպ@t6{wGudQyac]U<ߥNU}3jm.NxĽ\qm5v0Pg|Zl$q8E+u9C [&>j?-ͮрK,C(q:pl(B4JV̭b-EA#dhRDfň@D]~bv7 `DA9%)Gb%Pơ ZT萦= 4(ċFbf~<)ԍ7cSş)A͚a,/pg]xkpbf1P.[&)j?62a-q{A]RGLML uZ!*& 6ZI}F,E5J!SFt7MK^a `ܿ*e'"HzPBD@$0 5%ern nn5Dόmec3W>q4e썿Hsbb _-nO@;qr}I !` ^k9*0QPdKTa"60`IT?$ "^l@i!vgL( S+Ӗ="#Pf3DA%6,#BKϨl"e( =Xc۾,ؙ,M"N8sQM8+Ȩ5&٪ƽN0{*3*C̼$K>3)`h"o0Mdq^[Ϯi-#{kƪ.%KB&H00T)jjd9I6FY1]2R2)Dd@AtºVELŽ>_(He]QWBo.3Ϛ*¸x?MO;IU,2&}OAߘ3!ژ'7 ,Fن9p| ~[5Q3S[-.iĶM*l$iRu1Cl qՈSEVuD}{E!#*"(DcAaT\6~5,z$2V9vD*7-1?P2  m]P#=Mre@:jo6N֕ {aZI^M ^ )k&-? h[FaL({P$ & 5fU`"%6[T)2Tgz]Ryߠi#,*,(1B@vB:H0\JSAS VI+A_Z{p}!Rm[R0-pySBsAd"{1IZ5#țIIB*!Ki% K(6#c`C4'i 725{EEf\&#@)(qCT "[Re Ḫ4$v YG%H3E n#cDT+X\]-ZYNt,!N sh88ʆey PҲ#vU. ˥.gk&ST4ڭTA> 0%+I:Br1HÔ!IU2 !֒h8XXȔ&2I gP:Jqnjc4cUQt* l0E9kp,p9u ՟ CwoT磟U!2F8HNxH&l;YY<g]2fD8kF5clEjf"8LUV  Q/`"1 b*հbba|XTfLi25%!ʌ¢ Fk!4MH,\=e!'+DE\% f@GӑGWыӉֺkVL)Szz }AVd;>dY%epNz+T48˜Wr  k-@zM_3&A.>F\QɈܮt]?¹S܋IB{5Gc)yK?z_,t!-Qг &mbaq-NՆQLW&;A$v4:Uآ$;XC"IEQWF b3Nm3$d.PU $޼)?Bpu6R۪b$u18ͽ\,@U9kdR͔ӄ h@k9eb|C횡fmYBga" %5:cLS1TDa9E'#ijJD1eD$=JχBDI̓;h6Sp&Au@j "0M*B V@h[sU7P%"p#v;8|̉+CƜPL6`؆슙`5^ +OggS]NZk#*AMȺ\3C# +BBC YU+)9\*&F@UND!C]QJ!c=eub P"%T2!JQhѠm2ZF`/E7 XerXYYrYw-̎rik/ko=[&'Wi8( {'Im ͭ(_^Lה|$ʂ,BG)鄰?ECD-ՈpUDI.$tE$:2"A% hDtcTauM2!f KmIo 5X]8ZcrV"q]g)L j7@_7οsaRTJH- 7ߦ cݮ^A {Fh6U5CMA5G#+0`` Z&ҤN :UuH5Ti`5dP=ӓ̕JD:&-YoCNf-s JE$X ʪ84r; "#rbl+fIYeWPzmEHUY&I H>W6j>,)|A/ {F{d2|Bs͐s&6G1 X*M$HN1"14g m`S%dN 3BSIhjْX(ÈfYP 9kVe%Bk)pJ5RGZQ"Lq=+K8VnFv2]բ+Yg5As۳+gTi:.0pV {b) 4fJ9Ix B#@P00B)i BTДTi, 0hOɢ/Rbt1.!+8A4@DRi{P iXu  XV-qPmq+w"(cW0 )?EeϚ)Z`ҕMaV7$m4oeX2!{wpgܦP]3$<vB񑠬RPtI'\b!T'"+ *3̊&j&JdPiL!I VCce1 Ahd҅8$TNS8E% іF KO$Ѭ %V5ztڒ݈ziù_q,ʫ}7#_.1#CΗ&RI;0({ܛ")&5S'b(0IPt8c4lֈT2kcdEmSPq5 <P8Rj{%-K-nK6JcY-ּFmo `έCZ^ѾE⒕seΤrArNb& Xg p kfw&&4eFUgPlBf$ S$ 4$1PLQCj(QO)ഉ;PQJ1 ԞYHLBuG 1F`7gNTD@OL FZ5[ G`S+rmh}zX蔨y ƞF9w%OiΘl(?V $# {;ƋFsB[fmL8)xP -T*Z bZtj` U lv#D9a*$U}dS@i9=TN@n9̑P61n=3XoR k(uZAhU&C#R۹ZRK |SFHXTޯ8Ε9$}sm}'I!BTZȖ\ s3- pkf1"z˒x3AZ`i*!MqD[ ߢbBӊ0\9Ťm$F"k" İDT[hCiq:H%JꨓE#( |GH"hbJqFrJ:X>6U{'iF^ 9jEPDI|^zlS,e/\١߬}CC6{fͱZ4lXl >$* K`Q !1!"8hT\F#(51D̸PG"PFzUPI)8mB$KtQJQ5 :0BājW l^Vj|ULƥRe$_C "n-̘ҬYztFwoJ]W&w {ܛd[[@0iX!6,&TФ'"BRu JB1֣1AhУO Pc`[erl:DH`)QIBQF18 ƺ8VXJPjxUb!4<9*/J뽹i e^}RٍօXR?ۥuoVJD(pkci$(mq14tT!"LM9NĐ,:\C@!'idJ%4TT2 a 2ʡڮ(`;ڦND`mRx% :ĝjߙmE[-8֥ٯDh3^ꆲo7^\pUbez]ظ&1.6R ;p'LUvxTS kܛ#ٰQ-SLm(p ,r hEq N#lv @\M1 j1 3* 4 8K$1DCƕFPP a2l<,so:;[JCVv8ђIR5_E˟!-?_셬dڔƊcxh꺀?l?}cB)ekH$&4$kw4mrFaCBMKD=yt?.E%j3mnQNo$22)/Tf@wLCug r%X&EcP1@J8d$dJx: }<>[g}z&L4f ?E@=}\얃k~};p=j9P kG1b*16&ܛ*>Ui1 Ɠc @+:j (`bR) iP&e&ilKFhB2NVƅQ[RHYfC@YXPHΚjetDZv}?\̵sxŵA&^WgkM.KqpJ~kOpD pS# 5UXa%hjHhcr1D t5EBZQ@DchAD PEcB&#/ԖQPeeX)fQ`gqO'Jaq֒Hif4WfMVu9,8Ksֲ2y5ĝWELL|M)@P~k&7m(Zߡn1N Ui SPIVDa:`W DpjUP:D,dQ@U 3D5 5Zga@6&AiuEg80RnQU јgo[YHW^8ɝ[Y-šZe~Oͺ,6|zoueanZB]be߆9d&8OggS]^~kFǔ#PRK/bh9 ⇄JJ*+J DcR@Di3A& (ΐDg&uH#ИC2#ya:>DH&ްIeFC9r8cjODEuCŗF c+bF{{h[FGGp^%# C9YGĄ(I:IcWD#Y GĦbYa؈/UtjD!:t# Ѐf=j ltHDd'X(%, hb_E̫boi/yj41_.&Ҥ5Y4CV*qߤQ5ZFO4S2g-E cO}HzLLXx&0@S!T QCjv :D *:0:$!LHpیTO; Ix$!̰U8@)AnUK{6`%MM9FκWՋQBQLtll^yn tfWdsD\yrpå EZ/"hU2E0Z0TC@ԣ @.D!'3Z'(Q8*5+(J%b5i 2F3c \S GM(NEWF;B*Sq0 +Sm;%adꝥա8( m9L{Xf帡7ϲ7+W.W,r`Cq T&9ɭF0%m>[F`aK/00!!U DBAkБH41 UIr%4CĘk {E HpJ)*U+{J,66NDp1 yhRGţv Bzs<=!, J-O}|&!~ꊄ)ߙlb?lO!U*#rF)SBt{֮r!p_~[fDŽKf0`T|() a Đ d"'T GԪ`qA (cD}d$946N"gM˕#4Xm *,pDu!2ڢ5n9Pu[~XZ+~tYKnfgz9۱3)+lU,PP^[h0dB XC(b `SAT 8bp" AM!s:P&-@/M SeO HHR@ӡEI![(7(& Shg"E.mFd&ކ·$&cEX=v$GNT( ^[/,(ǒe4I&*"LptdC H˜C꛹`3+63+"@URQ+`4-A%R )f {5k娌c9}eJU`j4I4VR"lWaB}%[(z#_LaU A^KVZrY3@A~[/(P%3wNi0ULp-@h"i@*o%o= v0Pl) AIWN$vH jUPI?!~;%qy6*AE"E(Z)9r1mQ;׊|>bwW-G^ybkj)x}[_FFX/%|m4^[/@kĒ6r~)BD+% %\1 JlCDܱ* 2dog(j !,Q0Bb`!VT!&dl:/@F1105U"X$U :Q#ji3KbF4uڏv8F$egsjUvƒQ&g"|T>_9oz "ֽ*|* Gg|p ^[fR-caTbɂ2,!6$'u PUtA'RuU HŽ3 aPHF4qhV`@OEo m4;K6*I -M[pr"hNQ`%p PVL;pTqiUv F"5nPjMUE٢*EA2;RzhNh ɲWCPa ݡiӵN3X_j~F녚'-,gյ3X製tf= K/1N!똩o#g0$Ċ"X8XӔb,t$-cV0<q "Ԣ@a7-󈢦iL!@rF'DؒJ a$A,c]IZ/iwZJ6Yݔ\"/+X>g?k)d;S+ f厪Fq݈ ?Z$,eA ml!AOggSB]7E^Kۈ4ڛPK;(J  "M:X@LD"R@\v iEdU_HBK7X`Ƕa}Q,%  "EOmmjbX48?E5U;n6O؈~ķs˙eտFIE"7]69hd !ֱt@pK/`d:/4i&e?uUPEPkXhrȚ%gA45[qAKDA0]ֶ!G$lThARJH4aE6gPզZ#[d@XJ!R`TJ<Yv wl"K)\cٴ|at ҹRtVjRn׾HY-tregb[N,ji] &I) Kۈ+ ŭcmKfۂ#8)1 FAcb )\H*QR1J]&A!gyA b .@d"1tt~VUl&%T4섭#X N@G`֔14Jvc^݇)n=:U[ddXD$f.IJh]fCI`( Fq$)Jfp83R:p? N=4$(H@cQ$NbEp1 QE]B2RlP*I(k$0h 0P}htF >,;-{4I"gW r)L6D^27i6:\2lټWW~e=]?`mFpY.+7jp !>K6O8 ױ F *&5!dJ8!^0UGQDQD@1J*JDi"^[ƚtu VkR@0 `j8B\PXf%>G;frY캮U4: >VxgMّkڵnC_~*Tti`7  J6WNCXri%e@1A.\ 4)'16@'y abPUu]a&IlM`rNQv4E[|p=R,w@Rd-X@ @ϔ@sPuɻ-\6qUϋTW1~^F햌>yIWY\XΔ*O!Gx^.o()^TݾaxR=p>K6OMV"0F1*PU-1\A@ I: )db,VSG0CP8Ģ4>" L T5"0ECl{mX=wV`Hj3bx @9EiaSv|o+'QWU[_- 9rH}-f|IvofٺIobU ٞrW&.r$h@Jvw fS#WzN8nLZCѤ!4k>MkNm:905SARAh(rh¡9*-؄ `'AF $ v8(8:hU[(7*x䋮.*Ѿ4**;,}>Qx/ iVQu;ɥm@_|ILjy/0KwL.(}y1*>jjb2,ztSpхPWW U-ֺ@D]=J# Y#iNMDTY3PI@W KHUb5(XJ̇d~DjGzGOiozo|`g2XitטCߴ1u^vCWlKXuP" |dXDf:e1@:WviO)\NToF&.a ӊH1Fa7g(Ŋ(T ͡9 HLIF72%B`谀<,(& *e%ᡉJT69EX{2 pc]fBҷg5mvf\+5[ߍ^XARYYJ/ b6 SFϒ:~ v+fkJű +ؘe 4.$!@CڒC9DLSB؅ sBTť" 'Ce $;ЭcPfe-/TFF+xZnkWEެ[:3Jf^Tv솩9&o $b {P`8 8:n3r{aSq "{NPz#+k *A;t,GD1-P!FPմ6H)t!AT4 j4Y$z&@VJB5 PtXD)ufF 5m"ӖaH%2XNsڃŚZߗ}b T_ueҊ8lWDx(5&vA5 C'z ::+M 5\CȕlL&e@L5XLJ^E(c&8ӌ9Vi3]*W-}&",.jFnMb T5mJM]Bۈ@BlkqLto!٘mcWcű' 7qއg:e"ACsov'ăjԡfMCZ;r9Cp8:n3v4z[p`vlZLH,*5C1IE1P4*fU,gnN@O[ 8PĐp4%@ E!q]\ "`wٮ\cW^= gdΚEt?~dg.etq![(e3be!*g5ߩ;ř dPRR;+*5ܬG.nP|5Ռ VK":'CM&) SiLU*6Rhb[ 6! o, iĮcQ @ TW˯dj,B&MB߼r6vE6}7e(tLY+WϚyg+6gu k3>0~ Ѐ:+:1jY¬vMLAg +;X*MQ8:mb.(p "4lld@Jj*Ռ@3Nј x0s8րABנ`5GH[G2CWvlkAZ"501״p MhOggS]&*3fzs+@VQ`eZ*!]1"$o"جaQUX,j/ dER B&AE)TGPE6(YF^29A8v:u律]&,;)6YMCKD2?񚉎[:/ vYV%: ' @"q@ 8*N+vn3v4)(d BC@E&J#iԺ"l(aŬi# (jB q  ; Р9`DXb)@͠9$6XɫY2\m-哶ULŢfo)Wt4`ZuQGk|Z.ʩDЂ1$Z@*'Q&( V15%V t$?ؚpELqG@HV*,EJTzݠL=@Ԡ g.^3}Dysz3mfF2fͷMݫ*XUH~gd*vܹ[HQfCdlrXH0ԡ8-@Ӏ*v֧de2J~/(˦ :* A RArk!ƊS@@"NSh1$1F]\" #e2m%3$7&te:ү2EuZ#;?y6<][+e^6\9Ucksa7cKC,66zfS0 0(p~*W]lJAhF>Wi |U)1A52$"",T60LqS @hDjӻУ&RTB,АECМhba$D!KA3l6ׅN֣tmtWǥ5޿,ʙ]x:X̜o*:>q#y$r3a->̊y܁#H~*6O.f0&Дvcp/HˠLXGLk`AFC*s7+w.J1k4*"C@N] DRF3 T[}AAhC[׃PԹF]+pVmJ`^tyMEۆKk;*J/54lHɚ2Y5zhD\17/UG0R~00ʇzf+]65p(A8$~g*&*J1MQ$HXQ k:(PCFCm= @J8#H)t\QAZu/ZZQc(BnWTIÏEiTӎ#׫O~o6bFQsfLiM'Q\7e$Rϋ(PHP#( p #hfc@m5*UPς$** ?D\@ X6(LQ@ L@TD% jD @Qz IQLoMEVȺ\\POn;tLqz-q[TJ&$)]~sV wCl7BbJͶ-\ p@B n=rNվt2p BMBBV pP&/?b@!N3qK8(yTJ&3Hܰ0uGdF!DiA@(!Y ( kn=c J/aNcR sՕ.p{V{!귵Yu7 ˸RRP>{` rJ%l~3r#2 (3fH? [F2E3&Ԑhc&Mnb@f8HгWQ%lBP0@U#.z =l x3/ yÜw@HMlY _7\Nu>?* ɳXnD +]+Yn[vv_dEuŨ$@~͡k*&6J5Ƭbbb:ՄBI5NX&?êU5UqYb"=\ jPZ R8G zK,jd-YBC+ Oy͔a>M-iE禿R^n, 3Zup.㏭-K^1]Mklnu*$vsӑVŐ j±o'׊Ng\ $!h-(Z&BS-f- @? Սf@E&&h^NQ ̩89tQ`dZ(ڻ7hA:m ;6ۏnHŽݎl&09+n85BhgfL"r^6gXZ)fk,դt[U/ ImykI$8'^ =hD(dKHpF ,&g@R!]?Q';E d&DQLQj]!@ g@4)0EY PXAHF͍}@^vڎQ^}^?\*L o$޾3dۃP5f; ,5U%ҖD+I`^ 4\6AQLdHVHLP kH0+m'<> f1nbN0I b J^*lS 1*Eޒ:(kP^XV%@`2ՈhpbnU&զ2^FaYxÿ"}^fp̀`y?7/1.c"&L+},d4 ǖ@> ʫ=ao]p:SXa,\+Yy"b:bTp[teH"u՝!4j\Qd]"g'"6pčD_7/ʑFEʕL<ݬmr)7fL$~S`iI5@ɹ`qb!^ #*&J7G31 )jj +P,@ EIIfNbk"qD%;D A:MBS" 0N-:IhbCD%Pa91)M N-iXPo ]cK (Ip+DI !Duð[ w%3SG(#5(٦փ[3@;A "j(X灍G7DA%(:gXj^J3\aƞ~Wztm4k-y|&ʢ6/k0 "98I_   60Oz4RA!\bW31 n@UQ3LD(E18j5U@F@DT `ƚRb \plXJBp6-YPPs) eEg$Ӡ v{av{M[l'|&0A& @!+E18n&8}UR "FL"E#<9PȰQZC+J`\VfB1Н[ ug<3N}lю_t_#Y4/˕Gǎ^W{kٝ|JB5Nv9{֨] E*4(@ 5w BޚݮFk"0aeh#cbPsb1W]06D 5jaF TxD54R+gemQ d-xvs=-*&损L`JNf-rjh 5'_6Vwbwb5j!u7 p@5{1J7vխ6[ev|qeޙ?ϳbfFXeԌVCd\r1:?-퀘1u-.m&ԛkj dq&5H!JpFQd iRQ$IA*;37] j*; $](dCp=:hwr=DaBx#T8S[*%FecߥFh#(gIwVo%TƲj*Ri-=Ozr)Z!8%Bi>I@~#r%ٷULZCh|e +g D@EJJUb|AuOZ > v`(0i 0 P,P."V()Z-jf[*yJ*o/˸7o ˽0lx F?Sբ>$gsF6}hĘrC $h΁@je^%rTinocvѪ Rc"1I,\+1"i1 МlCF8 :XSbe$S6vz HA&zXDZ'AY[ b3Ғ0oF˨yؔ|-l6Ih [{&6q#u!ZUc~H]j8AP0H4^%40-k(8*DׂE@*(D۹Z 8-`AQ@Zm`hl&!jOȰBM}DS6gURI]!S37"{@ΐCDqj 0%Kf];v7nBl|zK%>7w_ҫ+L}J gck{Dh~TI l1~֭2P[Z.&!j*ZmLH<+$]@ g(]]:?T^0˅ "TYQ@10d&@ N p>Q0Bbtz.hKj:yl6i[=D}L2,flRXzwo >o;q=lbdޟ_L5o^:18*@~^5f`n/hbXUP @E)cDBt)4h`b J  m,lUA b*π&]4/[VE F:+ݑۅ&#AhoXp> b#؂*Rbe\s!^-[E|Y;VhK2Qg1uqM ^9f5JuY3 Q"e3PJ*d 6?]WwP(TqpMVdQP lUv⒀@W V(A"QE+dk؊yܣ/~vF]l,s*} g`׹i%,krdӟԥ@Hg knfRE|vk3Yh3gJr@DIA?'`ՂSQaSæ o,v5djE'PJC iˀLxNZJR8hȌ%D?N"jMyIGʢ.򜘷ھױr}KƚI!6#َACɬ 36 14>˺I!Bu.eebj+5(3BӑiJcT@%P0" U臺JfC;@ HZJ]$8QLEB5کڞnFLFٕuױpz:n=Δ9!vidpXVOUv` I95x MK@0TB瘫Mbh8(XI.< AUQ/(0IhPQ%0Ln04 (Pq1 @ <h8Z@N>$P=vq fmtbQȒ9ֺnR.LjVgE:] MR.;؉dܪq3\=|VA 71̈V|#ISdú`-^7B 9f\b<x MC֐$ϲC o'i稡`'*.LDp6T8'TPxje &f sBNȫ2sMClxa&bS}t=nc1[mc!%oŗlwW;35g|sn]xJN"AMD8HR$T( p ]#2(Mֵ4\2> bI\kѪP^L@qn BvQJPB٘Hjh,@@)8>mB t2ypܗbeޭW15IҪ-^{Vk/Q[WkY ZLڡlͯF%nSe(1g2ƒ8>\@(/18`x84> TM&VXJBTP$9PdET  if]P鳌XDk`ؒb!z{Tk pE2za152 ~L<8yNEo۔uUN}SEL9VW{oT}Yrq%_b9ְxYXih 4-K+]HgOŠC@A=AQD`SDq*(@qT 1@M}50бX p2AI6@e={Ae]DKJ1mI]}rojҤi}G˘~.3Yg{*[TO?pCxK3.BAsߪ2b"Adlk Dm3:QX'Gdkb*ʀ XdBM"Nsƥ*fX5UDM@EB*  8P@#(&r*(Y JOk[Ψ#~Kn^FEVLOKqZ2֌?SM)U'"1z M^& w%0$h)4OggS6]"Fm)f :5␊!RYG5" p ~&Z8zGȢ:@v`Gk]/5ediӤkf]˹xs{oMdtq#|ДFu{d'UXRaP$(.ْsKx!.I $'15SB%7ϭ\e=+ Lk`:2:%Hr@2ֈ)oaE @ =Kv, TbK"Tn'-DDEG颔ŸU{g5J7PPҙG2K͛7F38׆w]?8- >o[3:%| ȚM8>!%pD>0-C0Bu*Lu#  j(0L ,!z% cp* R`Njb`E@U@MSE]@` @M?cAEڜ))[GŽK(zS#Lg_ϗ!ii/Z͎G+2rcҪTm!~qb9qٽL aI⨤/sJg2 +>-Saw'+4:J?Q((R ;&T"JB?DC:"dbł:RJ V)CyVn`zhy R6a{o7; v0bR+VjE` bAjܨϖҤ-ۋ!Ou[m\Pp~j;2%@vB?T4 P!H-գLU֍ >rjhDA@Q# (TGbP"e *\5T0Q>8\$ =؁ad Te͉vE+Zd+ɗiByے}&-q뫏S4XF~TtV|Gd|kfFd5,H"jXxBD`D٭@&RNLf¤GbITN!DgD"P(" "(`{\pڐl*"g+0"8䛀=)b#D&ʃ>/[ػߵ(Y&73_,T,l 궉MyTPJq#(g+ @q >-sd'N1P,,SG)#@NbtVUWtFj@K@b!@#`B E2ճǎEEyJѶpQnوWRY;r)꺣ry>?1Cܼ4XΔvō=ky90r??QZ:-89W/q^$$HE0mڵtru*.5P[*x$ 4 )f#*PTUťa1-VŊla105 TPP jB F'8g6zY* >]waʓ^+;;Wiw2]a֗7eGD\Ѽ^M&E۪7c,3#T\!p (ua&(8>-#f5BrYPSdBVH?(_f@p`ٲbX Pm K,ҚS b# 46A%ֻ1؂HL4ahJ,y^w~ٛgPo+|Wgx9 ʵ7B~f߿2Xl?V]XM PRC8ɭSL=|u3* I 4EI 7؝`Uq:T[DДQd!ڀ]Pꅜ П `M#lH)=;+e*ㆦPjz83*i7y_/SIUdqghBr?!DpRjT̯j\%r̋E0B(\s0`h m֩&]l &XI F:%ah9E'/+>DAFh*͡XΏh`aaN*7 k V-$E`0a :K`%gR26erh}g^\W;3zL9?[Z_i͝KKQ?s|c߇- ߘT 5t-\ tr}G3(Jh|u#&Xib@HhUBE A.!gWUǫ&.P@*Ŋ@1+h`B 8!N@Kq1!^sT3$LfN[kޤ >6+sUַuֺ'sc2~\Ԫ<:/GFJUYKɴ2K]D3$hF?BX1@ )r$! :Nfk5Сё(hMnSU^b P1˹ ذ@ nl1v10#M$Dvo=Omכ#GᬨGQMLqٷ^O F6ًB! /6jAT\m!//PQbmE6ŬS.3\f)%|0%C!@-=2dHNn1U 0 ?:'BmDAQH]Jӿ#4q:'8T=uN1L+г4 umZ2,{`&E)# ^-JoF=jRc_kaVJ)~r~z7n8k}K2odfudg .ٱ?d$e@N*h!8ɭS(Z䎡#b̜ U DB(XU.vQ%M b. ҫ 2nR-V `d Z39@4Jl*)ּRTCvͫL84˴ [hS?4SQ[R1Y ~ӄYhjm h[,vSX;gO+?$mZjlh3^GgcXވŋXA]H11a07<*U8{JH,DV xM\g4\OggS] Xξ)Fi&6>bHPYP&%V`QԤh)WMIS3Q@1PruP[T0@^g{@>3kBB3BP'=Th`i:é?U^gg62ý oՊ^Pey-a:]bH0",2Bi%7{X`$ lCL@)MJS(0PP%`0eUI )pT{@C*m"ga ( d(j}<}n۫0I9sc4vբ'8`I3!̼sOV鼑 U?)9&$DGj7 a@@uɭ-v42 [ Gc|lfbig*E0e0x.P,N@l v "ba 67gqB.v-Nn#Ϗ3! H~)$jͭ MAfԳߡŅ+j_˯L8YboǫV#&)r~j1Uv7Kɺv\Mak\2q  ^SXŠ0Jnma7R x&HN%y@\M)NU+ NSPaHH$Į(H J`C=[[\Rl5,Z9^mֽVMŤ9u.H`,f%ԓp] 6ɭAx()4P( bDRTH&PTT]4F6L2vJ%bz  ܆3@k,_PkӨKZy*Ie(mv+;ڠ\E>Cz~Or9ե436L"3xu!9p2 A9L5@! ~MQQ[=5GVY`|P)C$)!|1'DFLQ@]3(`"@ i pD@Bq B8kJ4¬]d m7f<(;W+2R|/Mfoqf+6+y:{KVjWBO+SvQH $mZ2 E0.KFY.L J ݈,)>rإzްvuj#?z3YoqVǛ SoyB:ۙDҒP K(ɭbXKnט1ٌg3!J \+DMTgQu*k'gJmX ( 4*(Xi .eUOVJCBT= >4b.@i<1fb^gnծ0<'VԱk|Vg\jʎ9\w36\kpVɭfb)eD 8 "y ( ?Ĩ @QTp ܞW"j*  B,츏A edv֣$C V9267@Vj?7tCŊ`7W̬eDTvBW˄V,&\ 6[ (! Nyd~͡-f!Trkhkh $E+8(IhuO?Fx@) VS#bS1ʜتj "L'Ns9ɼ՚}шv ~ ږ0";9f,h3Rmo1o(/v\!eRLy!31|. T0͖ )U@DRCpA>ɍ-IiM=f5İPrJy :J" VC0Ć`lS% CիB6$jT3]z *nC춴К9; N`nXM,ґEImNos:vO?{,6!%?3T[9 d{TYmk}If&9[/mJH$m@ )NAmQ@1Lnhр Y)2P#R$tTI?ThPPb"`8aDva = T: 42!- K=xFmɫD-mkf"_抋K;%]W W糘̟TԳU#j70iijlb9HM*ϪSU:9`8D ~ɭ5A`x=nA(>z ,kNC @Sԡ8*Wͭ @ѡi"0yj@ g-(̡AkM,qW<~d}uvAӇ`M~]Dٗai>8|R]Hj/ؖ˔2Y06JMEǛD=.0*hlq T,VրKB:8*~ɭ=r9Knl1] JB|$Sf"pZBh"Co>$*N @qe =Tsv`n@{suvc!#ayߺʫ.&ks4Is+m 6pƱ$Mߗ_rc#M-)nl%jK[2O6W%k̪}ewqc pIG ~m*+ZcF3|+ćd 4E :_0,n R01Ԕ)@0Bb2RX#"lBDyeOdsϨe̓Ȍ̉ޯS79Q{&=33f7ޢ؆wXVSM:}ELZ2e*`vcM63i``@O9 $m5r4lrG{bV%Vk%BI$M?VQ=*.0TvP\p(NLwL2ӌ 6 [XHsv+@a`ӜH`}F-ωf7 $-$f-v+^z%n%l~Zz YQGzbɛ DU X $ @~͡-f*1͡#r0|֨T< F3H?f@bT!N@`/EAPqAC@ 肈4+X! 2;?{/v],-عS4淹Wo"Zļ=B}!VEd#{=f\Um8KlN  ]qqj`&P NA -5DH!.D YE\+4h<SP̩ 0!$*%@5j5H<<;P^@uҹ/Ik1hx\}#|g^ !?lOGg0Vb )9k[ל "<sV}p+$vH AȵKm;OggS] nV~^] fل$Ef 5TD !̌tp֋ 0|":] 4PSD' Hz5r_6Cs*9yؒlJyۢ1;KX( UuQ,Ls^>Kݟ59I?)b>oN}V򭢀T, P=@ -0-eBGLFu$ ATECxTQYP*ˢ8b]@dYB!clNJ$1`ov4S֞hpt)9Bt7Ybbn9z,ǣ#+LTe{0_v{ϫToRчmR=g1'>7B`/pT@#DqAbn>͡=rĐ"Z3Z?)^ o&hF?T5#Cîs H*lj+J(d.͑ ȲT׶7$j;̓^۞;72#!>0mvSg,בR\A}:Ͽel&\ip}5c*7w7Qʖ ^ɭ5r [=r43(p9D>bL<#AU(^*պ L N+6 ( XH@..0:;El;w6vl*z}Ґyf'*knQ3!+y(-EG(~ސW `m$LiNvZF $% K6"$ ,p^ɭ5I+V{Yͤ>8CYŰrĢ"If*m&ఈ͡ @ɥ*F:)s*.ZZdRLjFt]۩/PZ#sE}LTVjhBJ2t9c X|KoT0;CW2߭U}*)aZ$a^o  $ҸD6A! >MV.&fB' 8|e6ep* HZMc0@WRq(e ΠV 4)N' k44BI!a\2~ x(lxPiTPlLQoᅿs#1_ z-sW::Ӝ<]zLBe' e"48p p~-%f4%wXo |SĤeZR1`O7`(aPJbN)e$ NHP $Sr*M!ڗDl9η;UFYn6W>&=yůmvݾn8O,fa&8c+`j/M G` X4"(Sm&5-=aSBTfU< T:)em 5ɬ:fGLwf$T'2Q)ou[;[ d%u4s<l$v8 p--fLn]l~3KTR(K!fM6:*ۘ"@EQS_B e F`ߞ(! v H3l ;0!O:kHlvΉCIdmI]+1blш$7᝱*?S}~U2eL~n4[NSH^fPs HGL` ~ɭš^c)6@ VD1Qk5DHh>hИ P__\` ;g[ lt+uIgtyJJ~R?Rin a+u;"7**-y~+)6?ބivoWu«X[o6?Y*;Yj3$B̕9J+' $~mV)$kj& 𑐵A+M.<!@2TRJ6& Q,LR M1U@eMsHOBĒBJ;q { ML )]6iy@ $")?Ps16FSϊI+m֯nx[$^JkJ >Z _Atq@{.P(E1 &^m`[k6P#!dF 9 %%Oメ7'bS]XJV)הP5 0#бgXbF)YPd6ZЁx U1B{(QӦ2u~Bngql}Ht\k./.R}4R{bjAS~4٥۳aVnLVK w@3~m3 [Zkh&@m`!$C4EN!8HUaPq ZԖ1 ;`@o! AMfJz SA[ȖJƀSZ~,S)mhbфD> gI[guU.d;:3S7w9'ꠇb.UBdI1?ƕ`q.iK`p4ܑ_C7'(UxП p)Rx?Q홱ݫ(ݷ(nY,@ I0l΂ vF ʬC6cRɛ<|ogaE_O̒^.z/tBvyԖ.t.Q~-5 ;kd$ xЙJ$S%,ل)`8솳,@٥(1a- = &&vQX 0pm]DSJ9 dӿ2uDqgr>2vwqѠG}e""^*ax|Xgn,nºPM;E!ꜽ^MŭjSZ}4% 5r;\rub.AXaYxVbBQ \"J] K\P\(- l3N[Ts ٬Yfc 3&+$ѮwZW3"LG% yvmg^}δ|/Yky?kߺB6^;6v*Y0qs iR ?Fb!% @C:pOggS"] PXܞ90I12DV31(< Ft:J#Q!986)xh  '6`Q0QiRA2S%籠VnY=H x}۟[dwS?-s7l܎W9,5JTXo92jh h. gƚ/ANЀ>Y`$nFpYE  &!yD%ln1?M:Zn̫3.UaqLa$wVxr[ur 5#~9Pɝ%)kE\"M£Mf1I * `ŌBV+βiGf4%jB*Hk @r 5a,< @D$::Z1Qb5NS,(vSpFE@`⤄dYsͫZ}J'K!!Ds'[IhcΣ솝7]||bQ<36YNWQ@C0jY~"w0lY#BJcE _O]B]-c[f\,;_"뼯Ƨvgn Dhe Ք8;0A#%T1%wTͤA*26+IДTTվT$To,kRי B-}Ƕ?q+;S.zƬGSFjfgI*5j/i)S4-P %2#EvxYHK@`RttqP%8 t jfDb(p|n2Bֹa ,!uGj˴L;ZW?)3DiL6$i͖j*nA_$˼Rv(vqBi5J|Ucߺwڝ+&c`,~l~;"a@ ؝~1v!Uru  % ΈĔH5'15sUl6@ ىkAT1A#E]l +dlhuU[ى I"^DZ\!n$),=lmm+$:[2BVzi`Gl]lyu+.1We3[b3vٳ#R}[Tx 5Hqs$?. H%A.jF +5LUpfjabAL;8lFLL) 4Zk;Jh CCqHǼH^m9 }܂jF-&Fc#{nճJ۵ 6qY.g_eh5L8BΚa k$,.lvbnU!``4$ ~ɝ9InPI,]htXe4K(T8_ ݜ@bKyXQ )xjc;s ~(jEԀ\+x5:Tꥮ`g($ M@kdxhhKEMM" }F!{ld:gjwBj楠.*@Yw3tbkY,ȠMflFɳ~}U-{]hbֳOUgks[tM5e ^-%r$Lr{~d( rp@/J:"XlD\# Y}&3 u02m#aXE[wUqW9>]WlZ3 O\=եwm fF>mem]XoFE13뽵\œ19l͆*ʹ(޼?{2;P o1`K <696}D pp4>%TDru\äK)%{P2lNejHolZVFQU;B꯭*!C**g@lejc4@cܦyٷ溑=lMWF~_yBcG ,6U @' 901mέ]Ϻ$bn68oMxoW_gym{}@oӎ\jzyqd\ {5}inH! HonSlmms-1.1.3/data/samples/instruments/trumpet01.ogg000066400000000000000000001004051247673406200220060ustar00rootroot00000000000000OggS ۦv(RvorbisD_OggS ۦvG\-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI[Mn˼fl \U龪ӽA,X e:[q'%d]2DmDm{3P8[Nj|!8Ϊ\]龺ӽLMn,p4F\;;&EumȻg'KKg drOȜ drO~DQ/(22:^+󢭼*#QEMaB`)hV !++@:63bL` A8+P ͚T f-P4`:,mTU*0`5p~AiN|9 hZ6/4#QJp >46AZ5~@Ê%a=]waD@R_կ񪪂Ph7,hmdM" *^k# 06 ,I3SE[ēe@@is46 >H`]qKL9`X3H*)(>z. )Xl֙s1?]Be6p$"eJzP5\JB 8F 9* )!"ij p@ӗ4} .\;ل@kd$Xu*y`ScSx_@X ̹XCtBk` 8LH^zb[|8Nx{X.ŇS eN\+V[U229¦t)Uu "sEA4{@">e:@4" j8K}tE[ kD0mRBr1Bzi"wIk S=m`"(Ñsx ~1 #k4c$/IRcT5ߺ_ UYj_*UQb 1TOU*6!vAHW=@ M@ `@%ː4)@ 9X:bHc 5d@!D@@K 8+H޺革SM,vZ!63u ivIY+`Wi\UUp&HI;p< TT"kGܘ T*@ЮfL )uSdl@ @'P@giQx  Yt  >z.T>Mb=?NEb0C,hI4T/8/+x_Lse8/*ZEe@faB'!v{K0PiYN1 Aj !t4PÀbOMoho J'@U gC>.ӝgFEb2u1 #IdQ~(T#crxF‰We5UU$ #DDDbP #Bal.3jq P@/6^@J @ڂx\\> hH9@hXmޚc\=sךc\\?}L?@LuXeZUCB111"ƶlG T@1~@z (nj@'dӒme) P֍D@ B%N)vJ]ZR zF l)Vb|e1yѫh5N9.Ƈe1['@\I8 XN+ײ*ӌF X)0@(),fA#SmLQ8=tAML38sq$B0\Z )cK#@ x@gV`1 ]؃E1& {Ȣ^_)1$g <'uT4CR(`@ @P;= ׷A8ĭ%xpйuHo.U֒$0D -BZ B00q8yq) -ngȀ -k 6P) U| ] @6["XU!JC<-el"M`@ɪ.>=V50n:%uL `{eqK[H"W( % ѝ!j{@ڂ` 4ec*@ 2@1йT_ ( M 0.@8.Grohzk ^3iW <| zg~5;hOZ-P_$4 Xp,*jӴ4dcHTѲvt K;@0*&[n` 3hJA`ƺXSJqfIo W pUux2iA(<p4QY(g&p^3#-qun C=&W@$/ LL.$\3R/fY.Ѝj@  `0axD#mApr"A3X 7Ho+==U(,IɆ(Te)"+ tM:4YN@09)(`D,[;4;ЏYNFE`Ӏx- oV~U7* GDE%:.@"` B " \fT3[+ dm  sUrP;Jj (څ d-*@!@~ @%~ TI OggS ۦvnQMCk{ Mb2]/T7 PPd2@}߫rZԦEP:HQ"DH@$?P =&w t(`MRjl@(ZP@lPX tR& K  p]( 4Xp6 0ntXN\5>̲[X/Tk0/p ` \\cXj?7zM ( C   DC7@b% .Ӕ%8H" ʠA T s @ P5E)`!k(H7 *p4 b@^h @GP.`8^eZ6[px!L鰜_L}zfK/I W(0~~U+ZAB 1$GGh no!:CWI`T1ei2pU 3HDT  l @wbXG @,;6p@@i+  8`ޚVIy:%<5Qycw,Jx@Z?@UCdC0 N0\j2ʍpIA!6VP &P$ T ``_@`@gفAt 0&sU Jf^  $] aXQVU.1PVVMXCkWӊ߹ Kyh4I5\&? *a Ip[V[yZ"Q1!hQdIĂhtC`A`@ v@O100 L@WH`,% gEѳ@1$s  j}` r!u1xEH^EX*('<09hVQ@@V镋/9B镋/n#OBe?@Yk@Ye%`myfZd3 @@XpdJ p beVD |*T  @3 Nݝp+7 Lhh` ,-@JP)B\DPxe%pDHN2Kk{`: ^"'l(/4@xpaݺWGv0 @"ȑXD b"@ MQmih@U 0,@ Me`XgA?0P !p6Q0`^EXötX\%?l{'SL.$fs`$_lU+FZ͍j! 'b@Ab7'ba D؟H2 8@Hd') 4-(`hy h[80 @P>)piuR6P`)SY @4DY1P@(VdhVJޓ,}z4ۙM'/4(y`aU.QJ(pDE1"qw A*)J OR _A-(P5$t0 PkQs EQ5h9X @dR8i' jA!`)=^I~^fPҴ-w% S 5,0 24 ^/[|)SkB&@ P" RH3 *Lgm0p ؚIc o*`@ LO)K@`(MCJ3\N@XJ5 P;.'c1l ^kLg .MrM%f9-Pmd]`N&Ӏx%Ńr* @ $@aEA%(v(1YCǥTdm48}`l@ w2 `3u(f 0V(gx@ "=9.2( dXӥx1g2^ OBcP/S@r}2_2FRE 8c5E 8:8Y8RЯ 0m ` H10P4 KrKQ k)x h *jA@႐MƗ1!MdƗ9!֩@:1~Yy`/j]Vk ! ^pP$ m;‚,;`奠 @MLPVabB6K%L7u`-dUPRPO h@@0 ЮkXBҍqhڪ`雉/9B雉/95?@Ym@xY4 xÃrUj57B!!v Aq"lGP3(6>Ѥrv#]#ЍS(`X <@} PlP#0fhքN@a't 8P+^vV}dX=2[F$ _(0/ Z/XjR*\P#bQTR !q(S7 h@pr3PMM&RA=}@ bP|N|(<@ R~@ P+(< E<^4taKxwi:0/װa:h @6> 4X~VjA@DE ;Ah"TФh֑a&7`f*}T 0H l*(D`Qw,)EfpT`5@`P @ Nk( hO^eϥbG إiK\\Z-s@['pe4a$xp|j4^I-dL(CjX,cP$TTWi  @$YT BEXJ! P Bφ!#Y+0'VK@"```q8^L{TMdZ匳> Ն u?&q?AUd]Tph6`c rP ("#J (mhc`i$(RH0 (6Ak\@)`x1,(8!8OggS ۦvL^U^(hg)2Cl|ee:_aW`/RYՊư!DB )E PS Tl; ȀA 4@7#{;e`XGOA( pt tA\'k"@p!@  k `1,(cMXhŊ+h=~f&a2 u E? Z J /N}Nr̯"l"X Ib Gb8ZAF9& P@ow?42K 8n*MO?U@#h@jZ). X C 0N V^D崽x.MDX崳 <?@Q4 @}_x`U`~U!JA  @Ha(0֍%R@ l0P Ӵ5AH D-T :@`uD(Y pi.p3* tx/VHt Er(0\0^D0ϥi[NL0[aBu*P"4 p_2D28 %% F† #JZ-/ U{'4 0k&T @O_ @?~M>HRt`Y  lϊt 6b@D}4K PPP^I}x8ڥiیߜԇvh/4 L.  >0//ͯYB&D"IPC C dXaJ T,۷ v6 (06[X? 0VVVKK*YK.vlP^eXl{|hm=}sqmOAN4>i@b$X[պhFPv7V  0Y5$`d<T0V |PW/8`q6P(E  %蚂 ,h(0jYLN= 5x sy8Ml~\<x?Qk @5co^ůM+H A ("B-HQh"XT  A~Ԃ0PЯ@ȊY'`:I'+8CR6 ,(*K}u0x<lDX4[PtX.n)ÞCuNBzVOx`1^տ.Tjfl@"T vnSJ42$+&9YPv@m?EB! @*,"@YK~.D6 DUk s0 ^Q:h-=~'B突3:Ȣ@ ? `X rWu* Da H bC`Z,ȨĊG@`936Зc, P 4կ h'~`@t "6 X@b ܾ x @((9^H׾cOBإL=)}+ʲE#Lc`dժVWnd<$  c (p(@J-"H (U ;020YjW^%@4<%8 ,*R@i, VP ,V^L E/taU`GyC4 P$XVDHF$`cgcc(pv@A eU}M `7.@6 @4 ZXh[AX0( ^O2ǞCKӶI.=qPm/h,P V~+S/TP&&&8n@ J@ Bp4H0 4Jv@H,ݭEx6+ @OA1Vf Jj P w"r hPCCBbp,@Tb~K~9).Mr$R)|Ue>40뵀,Ul /@"FȒCQDBn# `QLZ)!@h[@ 6`] @hmP.hб $!R:"`AsA +d >Hrn#GӁo_f-O[Qu?dWRQk~u(c  '"[ ib & A TMyJ4Su*  V$&t3@#` \Qs h'(VP"9\(1 0 pF^K~mCa12’f-lcr^  _jUs#d #Pa(I@rA0? Ҧ=#uXE PlV 1V`8n)~4K (k@`VU0RFqg^x.M[fLe< {dU"0~YT8 ܶj^y٠ 88/@$`$l,R`j M m *! "*{@ 0\b)&@\(]  p.@nX'=^EpҴOFXð:PD4(xY _{UV457BV`$DQ FsBDht[tzI VLktds E*P48`X lBtE4 (Vr A *",%h,^O2ij93HdZʗvs;T$T*/Nl,8 oV~Z*_B2h(HH<) n 7;jR@ud(0)z9UP`@o+]%AI@cl 8xV`-H9~@@@Yl%^0Mɰa,JIhZ_ebr>&$gȺr^H2  E0jH0@`PjL-$Z0!=}mz8U`@`UX6 Jn `] + C6@'\j@҉ (YPOggS, ۦvзEҜuf 5] u*6X&1 9Yⵀg0+l] "RTB H  !X$lJTΰګ*Ll,O@ ]@%LP'!Rp9й (( N`8* $E(YDڪbI%B3''KHPo,/e}Lv/t)WhVkdA@ a' 5* w7  }O?>YK >`#A(P\ @(E< \B8nC`u@`^ }~mvi:;',i3'A% L./X<p)*SVsQPvAQ8pZ DpXY8{ $@2@%K5#h&YC% 614g@01$;R6pt^dӗaC 4-=|fi5ЬSu8gU%ZBF@D\fX *U%P,nSTLdށS@w:/@2@=nA JmYHKPns q X X Xp 7 p@( ^H˾yvi/#2Y":*  )Tp9%E]WY#T p4l@ &( @ 5MD0' 0i3aA^ &@ur6UZ~ Y sVP(E . EMx\R@Z^I>=vPҴ-O"a=xDV." J`'mViE(@D @&@<+ j")U`ԀV7ضe pNYi@4BܦDX*.(6 9 47kZ ),3ibڋvh:$BMmu* `r>i@>&IwſH<4`!p<ZK6 *PMQ-){ (lY8R \/R* @h AF+xB<CC60p rjkXӰ[tX/\C?bG u ee揕?0`j~lմHK(QRV1 ,@ a";10 Cu 0`!@ \QH4@8)% v8W (Ɓ!"@A `QNS@ `^I뼌viږ7'2^":PT`r/N50L_կʿ*F 8DbXP,:Dn_' N64630p@'2T O?,6̀m]@ lb(%p46(]t ^3ieQ42w4wN%L.}  WeU+VV+F j bp$!@@LEh0<͜` m4 V Ҵ Tb0 eH@ -n N&P@`C),(`  +PXCX@t^den>KӖ30n: N"0H_*WWW^($`# Rr@!A2dy`,2鶠@ՠ}t$l7H7  Pks P 3J蓦Ȃ(,pLp@EtA@F(E hO^H|m8ڥi[ߌ̇^S (09 ◊KZӌUDň, DPDR!8`ٜUSbunco  , .@%E` f'^ @@: X5AlP ( 9`T`V ` `hj-ֲmٟޓLW쓑p^&4 ^ ` \:u D( X R f#`LTpK` &f }ZH 2%`n, `E!ER@,N "9 ^<p @BAd-A8.8EeXCka4m9~g2\^0'HXP>4 A_*ZHQ˕  ˣBtD)IV?t?@ "0%E jA`4~ 9nlunBt *  f | `E^MabeKӖ~Iye /~~-RL3rTt(c$Q*hDBfжTi ([C7 }@@_eu3 PY`D@P:xV` "Q]@T`{ϧ9!Md{hT?@Q6 @LLc,HrɺEQX`H`!&0]^JJZ[ml0V 0(=*eR"+c/,!P E( *, XQcEQ@Ru~ j@0^)k[0Cb+]v-PC:ZCe2k4 }`XLY@EiFڴH @D@ L 8$0A`& lvʨ}`` U` wHB&n1& 8\@G ,#@D}C4] 4l^IKz8aҴmwNZg cjj*^|`X̫rR9y*`'*$A5(m_U Pl >PM,EPP͠J~E@YA,bЀP j +V/4]Qn( X] ^dh{]dҗ:T[Y4`"A' <KgeڪDZDP Ā v"10`0P@HS *8S{06At+01J6M TM]p?K2+ee`)Di @e`=X@{jp^K"-n{x9a9_vSN^P (09I8YX:Wʗ2ʍ@ 0 $@' [dkDO& `P 5>MP : 4&5`Q 5%xJXVP N %,/Q`].b~V(a& {5]VdX×aϡOBA `rOP@}ߚrQ5-AA @ M[Dllp08k "i;`ʠ5-@B T Ph@Q%(pW@dmQxVD t *8^Y6w̡bMd  8Y5 oU2TF@9  BpT1C ɴpz@``O `8.+dL4Hl,ڕu"Yp X%t 4XA(:` 4k(6X bП3v哉m":*<D? ,$կ^J4!ܽt(,b  Xrmp$ el$4L ,GvA%EZ  @t#p8`@.P,#K  *p^LZg KӖ~I]yLGN20~3VRjA mA;[akIfvj(:Aj2pA)@u_&0N(b 5xh  +90$ b]Phj(k \X ~ ׾ {`1~rµ/Y"'V?@  j 8 W/tД+V-BPGm"p4bP,LNW6 0hO@`N 1pBiz e-?$`P Z P@V"pI@h(,x`@ VP0^gCb|g<'XD4T@#_J` .~mJmZdP %a"`1 HD0D  8\(`,Ij3D@ 06td V @ l @>0 @ai@0I?ifUeH44`ECh4h06RFEs@  űsP}}L/ @!w5m  c4C_t#@I (+((tAC/F( I pj~DSsF@4mI\u?5g/'?@Yi@Y:c%a֔VMUEw G I`يa - L P hAV {p t+ p`QP; 8\@ 0(;  @;#^VMZS{}(`U9|r^bu*/E^$k`-UJr#d@ GB% H1H%tІÛ j-T Tp Љej8\@MK. ́.0<0@ X@d-, N^,a. KӁ9iuco:_Warl :`U.S4! @TqG E¸d,.6È*( 88 2X0Hӂ7b0 0 @74T۝n%A +8n@X@gIV\0 8-@,`^ԗ5]H}qZPo /4(y`WʍJjF($Eqdz d`[B@MQ@q02m[Pj=tOL}`,+ hT`j]>  Jp B4xEp{a@ ). ] *y^xCbd"ui5֩h^V/Sj @DQ G"(D0h*:io @0hw*L A]2K8gJDe] sEP"  B`bp@,*ber(j (^ee-PtH̿\%]٢)@fdb|+,nM[W!ȒeV@1ō 1tnwl+`k@ ` 3Ho`}s`N(@ XR@PYU Vk) B 9<+^]~Nv.M[fN>?M;ak/ԋ}TV[گ628 B 8 8!D M (NVgN = @_1tM@a8VhzU 0pY(0 ´ (]QR0 5-*@i@V ^MZӘ{+hm=s4^":PTaN~}) 2mU"Dh@rES!N@qF CHTTF@1`b R@`SP2pP_``P ʠj-$e-@X@Ej`(@,IQ( 8\= uh`1^I~LҴ_NZlgh$j j`r/ ĭ`@ULm~^)D;LWD PP @2$E0`#pIF  Ot0K4|<@.XAq1k k..`u^ n{>Mr5~ o[TV5ؾF Gs1( EREP)@ Ʋ 5a6(@T4HV5 [b+aAKKA5u $E>I}zmC GӁ9v:LSN~o.Ny׌ 2XǪ8VhCPMa x5tp_`9=3Pj te %"U!?n,A ն\d@I`h@u  OggS ۦv"&')07>Wzh˴:T['pe4FӀ|pX*kv= BM0`ATl"@@؁`s]&h$P +&t[ - @R` .( Xch.R*1@Yp)P X^dZEhm=~2n#'Pu?&J ʿr2b ǀ C2Px$f$(* ݾ&J`@3hts,-pWf2hWeCZ@Yt QtPD@k 8g^e]8kvi7w:_(ar>40W}) Vf&&1"MG6 sñ``P&LptS*P45P 0.N@X mp  *50 ^dhe\dZhsdIu(k5* 8 W~L""AĀ$Y 8F,3bۤt@߀  TwоT :}0 Rf@?B blB6.V+@ #@0 (8h^O2,a-R]O2,#RSE@ SkZTj57Br"DAt4P>!CC "X6Wv#V  ij`@`t#4  }GXpq IgŒ!p  >j!(ܝ"v,`[IL%]v;-PtޙH}v'#A^å\_V$d@ :(A1DF Liok[T֪M-* @_}i@e"RR V@gO@Tp#E) @7C@( 铉l{/M4u2Y³O.* @j8} 8~ uXeVH9K(@&Q*hHRk($iqRQ {58S/SȀ`/Y:BRY@4I taUB0j sRk*@W`^Dð[Ҵ-_FtZm(adbr/ }3uYAHT uc!8 3*( @ϲ@zP'Vl3UcS.Hj8zP@ VP< @ 5X0(6|@ ^K"iPCإ@.$B> J"0X$, P4#9 [+Dpq%0Cj0iD`О>< U0M HE n+M$ pR X*NO" P:|N@<%P+^LZØE.M[zM&-<-ZIhP/Ԫ)T   bzUnQU[@@ v$"$ 8 jg:ڰ ?0 ƪjJ5WTBžh H6J D \#/(6(k )P^|`m=}sB7FS$[YPEOxX[EVVAMWl H,( Rd@i{Sz+0E\Q@4s @B5k`U4X@"?@b E qA k# X ~EXemVᄦCr椵\v;fS ^P (ar/p .~ٺTb38@K @$ "@V 4`@ @`d^ u `Q kU@ D֍% 6Pk@" KkEMb|LXåӢ'ޠ_0 'Uyf@ʫԦErBj$0V "`lJi 3[*p30;:-ޞAs9&T6@XB! Z`Y@V, , P!`I: Z痬jVaD"X$$bl;c1:ڶC'F@VnU@uA$n,YMh:vY +ppUV_ cj ] @R DQ@[#D[*hBKƂЊ& 07O שּׁd <[*B"D9Yl^_2 u5٘D]*بBET# c k֎7ٲ훰Ԣ D $!YuD+! LɰVÕc[gxQ.3*#v<ׅ.,3=i2`;H,,5ui?۴Qc.2=t~Wlmms-1.1.3/data/samples/instruments/violin_double_stop01.ogg000066400000000000000000000321531247673406200242110ustar00rootroot00000000000000OggSU.ǷvorbisDpOggSU.b -vorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mv'ijJ5bP\Do } &^'=٪r^`_wvKPZ3jsԌ]$IpWwu,H uP @{( Go.%D(zq|߈Z=޸5/hA3.$QB[j{.aXa:I3s{-Gc@y2<_*$s5jV ;m4鼀n`& {KZ0QX_I+uZ3p<[|H@)2E,Zv >IEW+:|t@>R S0MNrJѼn`] cA5t|/m,>?ͣT-f ?ltQto$$F* u(olB!0f_ 6XPQ d)l]j6יiǷ\CjDofJ@ި Bv ;ۀaS @Ǖ[JяLp~QJʑ&N=SRQX #4mЌf`w @.һ] 8J@5Z"S6>̎rԹ(򲇥X̐0 Kf@ޘ-&BȐLI{ ?e^x-@y8Z 37TxQBm4PQ(j @i@QL" W]o(Z7((P( Unt<₁C 2ayX}N`) eHGWu~}m XNxIr*N<5-asA#$@bG) @x@*w[=@Xt٣_ ~Q`L(@9ך"8H@Zui?sk8x%g to[YjS' :Xl`'5Lp$5 8["PnJQ* ˮ -iB $ACw$1 w(? ㄂ R*邦-/ĸtXman]R;^G+۠L ZNe21/*MU/ 0`=X,6:`iPw e3%j@j"@7HG NX@' j2p;BfVH{Tn*QTrdO0eb3J(P&h .,%w5ȖCem:+NЉX` ^Z \C5}DPZ JXS͊xnTT2w"OPeD wnC@S p6pW& Xw 3Hy(ch ?>~ V5L@3C ] \D z  7(\SEfG_Xm@F*@" t:u*0q%]l3^E>0p^2N{S&sq{/V $lk . `$@b9pvu mR? P4 i.g@ 4)Su: @( _hpy&,\9c-諓H* @` yuK{!q#][N) t|_Z*ga\JOWBsU˳x@ -XlX"{׸R VlpUDq pYRxN*@C: 2?Yހ_wJ UiG ) P^/ f :f],k/ cb='`Lj1A6:?AO H\ @nJtuROHw9uo~bV(6Nh_:(AIE"T@S1yw3M8ʲ `.l:VI܅%3R}iOP6?5lq5UKLOif+j ZFj%~ vd|#y &M0[$Jx Ha,JqAh6@@Yšg F Ԓ/c- } PQ@x?;l?5%({{2:,6 0E='8Io-\'D;~l8~̓`~m*4 F< P& qX`sXDP+h_ޔH"HOh,` <%}kTAġ8,).ҧSK}ɸ/g|[-W{\(TKy1vsZ?8|w<sW &T۲%~C|@w ^( .#EBkk@ CB0 lfwp s=q>p[#Oq^pV!gR\, 7PHPLi'lMe!bZ. (QEP^{#4KN!^P5  ~!S{tg0an '1 l @"6Ɗ1v`R u7h? S (\B'R )am}8. = }EynoH<D+(pR6'dK5ߢ(؂~5y?zQ7(-3~qv/d# ~-S뽅9̟7U/ Pؤ``^֗t=z \/4ŧL%AkJ QQ8_@%\Omc2@1!h AcJ|@%2FS )2ߞ\45C8Op(X S JLJ|Co =-7S6!(\"I]IJԀmB!8F |~9g-7/{ V*&,8T(4#>'p.1 DR"`eO+`17 бtl1:- fs`IW h8@KH&MH|5 m "RjRv+aңܖNϞhPzavvݶ(#g59>`,X~ rnUpk@ X֐&ufSML+UgƑXO׳ a^eC[F? ^uz}`:6 @%,I"E=-@7 ^pOEAP((Ri,0/wv(}x]Y[kbAS aqVnWA]S:N="- ̇ ?JiXh 6 at.!%7;|I7$-N R",|HSVtJZc4W.a"P\36uWLJL!A*"?!p7(NP0W"g^rؤT*0~ }[c2]qNx PAM fL_X !Л< 0"V8nQxJxUd @E T MрR`a6׫_b٩KQEQ)8#-wS\?LO7%qz^8n E[ҙ@^^Zڐn%Y5@uOix`phX^XnSK )@q'@y[vXW( 1PP -NY|ءF nUVPU} CAjiF9 L nuj:!vlvU AV^3y T \&Pw b7~g XhsMoY*7 >`4(@eK=2g%Iv+a6GdQ [ap\Bd:PM;U^m\nvJ8'| O ; p,6$F =mk(%J < XJSP? :Tu#%2"`$V/Wv6 *8XDq0L+EQW@PI$NP(}*U挌3ώUp>H aaD]^Z2D9< 6PH5 a %Js5 B| P6Ъd]h @W8 8`]pO'b`TO@s8 @MyeO1GAD %uvnxc-i Ȩ`hvsVW2*!>S~0%<j$f0p` kLJa݂Z%*{H:P4 庄.SVуz6*G` GHon)s SUEa`)^Obmb0J:SGcdc::|OH.?Tb' j~@[` $xVxAMXW]P2Ъ`]KpJ@jX]^E)_?cb@p uRpؼxpT Q}s4i#dA!T56yo%=~ފ%]hn'N x@1" %-U p6ih Z r> XHI ro8 kز8h|mPbpEZG )k2W"V9hn˖Fkeb!LTNB>9j^mOb$\t @4Y CV gT )S(§^xh"Tp]F h4vc++6[8_@(0 = >E/9,>pl &0^pXZ]\YFix}*}N[5,ЛņIЇd$$BM_N" ʸBw/RTO pJREOAF ,s>Jl@ b 8.lqHn?A!qtĊ@/yYn,c BstE"b%߂DǸ+@":[^~'D> Oƶ !@j`CqC #mP!.2>76˘S@S &epBP.lpF ~<Wyם p!J,3C#H  q`F Y\] YlΖ$ ?z˂iX@&0%F ff*إ92'^]J`ũ6F)XUInbo@ACwU6*z@po|=T;l KǣqRIѮ`|s3x ^3c-& dlo xf;SM/B .LÓXi;;}p,U8 ,(׃7Q"HqP&Ӈ!{8: QV(1De>/׃c@.m1DAxfߐ"J*S+00A'$.#Շf5A.]:> pg|ʅZUÌ|t%M-X@bl $DrZ`# α'+(@HA,#+T. )P* (p E\+zj_o6E@Eŧ[#Xdt}CZWf({kT26uY*m]vtv צH[fg>`N@ oN\, Pl& Xhx(02-g;+:d+!Ğ 7"+`9S;cOl*oֈ; Gd@^ P ;W %uj{`Nwr, f qc)= : ./Md~!sב40oHLX$ o`(D@{cMX*.0?  @ D@ n xQxqhJ/[[ݐX97U& |_\@ 4(p: @YXAvήqe z-㬠$f9J0.U%Qp Ѧ)Y5:f|6Auo` 0\ DFUij:@8C 뇛Yn h2'Pu GJ (YzNy[(ъ 034 PK@T=*6wYB`bjbt0T:LY؂5 l1enz8,l'/@{HZM  PzQY@#Bp> pJ,G@w)] %@Ey?PCRƒ1U+  8,x5DvbQZvm{dC OggSU.   :O}J/* x[@ 8Lx8zwIQe tizwGC~:"gXn6b%U .p+&5&E)Hh+!* ̏whx1  pBP%TA *6QX`}\hl( Yie WXApYE P@ RPRPP^/PNk۾ϝj` Qׂs:*  kkĒU((K"ZH!z^GU F9P9~6uLJo(jl桀'Œ"3 Dn %ahU.@Z xmSl:RJ@AFp;.[ZW[)@ew͝.#~0ʸ(}QE Bn39Jgt4NHFh] 9R-禩)4gbk `m 8RcZᴰ퀳Ram  J]2T<)D+OG0cZr`rJcr]@9$ r?6 Rl*!&Ja^׃$\;X1h4 0*;/ȵ#V ;L_w3v6dR*JVwbC︙iY zJfy =w5 ]O}KA~;/y}Z͘ Ƒ,az#d5$BUIgo]bStI'opIKS|C%Beѥ2qv]x#ZTsї~Ev1֦g5{splЪ-Gew֖Lk@ZVTIzvϯ*zZӯ%Y? r%)` x@ $[xP(@4#ܜ._0f fqeZnد@lmms-1.1.3/data/samples/instruments/violin_fingered01.ogg000066400000000000000000000455451247673406200234660ustar00rootroot00000000000000OggS%[yAvorbisDpOggS%[y A-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M`0(ىHi#gqàx|@\/&~(&ar\)05%.Pgw%>Q:a3G<"*U`PSb3?ZYeêS(њt ශz6ުHHa;% Ɠ j8s&r]:@cKLHphM <j%*)%Z_@v] 8k~ox8L[@(ygTw~)tu}7В }v;da>WInXps} J G:'T V= @ ڊ뤖n7U*We'@C 8Rʳw7t$H YZ m0) y'+Bm6pRV)טD1ltm(zp|N"!lvި ;g->г&.`+N$@$@`Zl 3 PT@Y t @ (QpqD,/~JivE)pdʼnm 8z,eDET #}c 16|lZt" tx&)>5*@X`$1HD@v!X;;P R$J!:#R:@>K`g}J@l#B._㣸ۘH -Q-$0q=㦑,C`b ޘ-uUƖ[[Y )Pl 0H5@QbV `66 i*~K]RW"JA5 (@] G 0d_F+4#䬣 @$ᇁ Fޘ-eUˢҤ<Ӏ@k=@gjh8d.5T(13vlPw @]`gB*hՂ=J_ U`)ruATVYb)Pf/d̫`ЛkQB4<ޘ eD"->@/ P5 /`'O``=  $0 `!XQ L=(K|(hnVGR:n@k PM N\P9WJARf|! ,vdzm:,ݴ8 }D'dޘ-ॗ%o<<] lu `m[I H*_ie@S lQ | ]T~~BQN;gt7ZZpVI EOAK Eܴ{Bŝ)TTz:dQπ5cȈ01`4"ޘ-uDrSr;ctx @<@$\VP 1XK,5 g)l ~p| )B%P/%r@3PQ/p pPgb/ ?[Хm2P@ k< ZR^>p+`-$kX[[J<^UjN x@ p}x Z,T*=b @s@uUrU^6~ P/C85Ui n<$ zoocE(n/E'mSJHm^Pfh@vޘ-KJs x|ok @xM@GUm[ H2@OO"  "01P ) P HxJu&g-6Pg7lFA»Zk֝ޟ5AƘbK~0}R߰;q"ޘ Fb"|ɍ{*.`'k .- d4"&? x%`8"^x.TkC|,N' ZXx XR l78s8p%AiD /f8 ԣaUpPދTģL/ި-kz#M[xU<.г g\5@ C И?K @ t(`6@C0XsNȳpӭO;t  9` R Wp $*iQSyjkS@,2caD5B åW&Epam %x<U 3p p :| P0~۰ k {`W4iX5vu8|7az J2W$)C!ٽ6*R:ҍi5oi*:tvk8CC7kV En)ޘ zN qѕUO@ j 'ю x*`[@ HH{B5q)PCIhgx!p@Pop @C>mtU bb|/0Nt`$p`Aި--i1!ౕ$xПXp`)Km@_:PA JB 6T 3˃ ZET\P> W ֿj |Ic;' ) n^(h a|ךd@-wnJoUгzN`mLj0(jT)eo!v.:w B=&.֭a(@TY!8P@ZQ,14|: ણcaP0zBS, " tT.W6̷?@5)GU= Hh O0P5p> D8t@,2N $*S A!Hit`b?191z7t88(5b_0*Q֊д-{&Kom)}0[jNu$pסXj7x; 7REimR(rp(h @MWIT,p(Adhzí>j)w@86aLwosޘ uF.?+UO5`@hnQ L p$=l ,MЖMU`gBܧj @> x~WV%G\, ^v S*dV~9k-zFKZJV`?/Q pjM4kN2`,'Y =jvX;&BDPP|-40=3iT @xY_ZǪ;BT/q0@]&39`) WU#P}zjVyN$`kpٹ $-DLo xPnd3J@P[W@`@Th^bͱ*w B@­#CA>h([(plL0P4o!< ޘ {.Eh+?5,@~N4O PK5"& p?YD(#( |[g P R“B`ī  Vg9Z=7J ?\%0(mbP"( ޘ-G&R[г <;,@@0I"6ci4m *HN `KG_KC"6GwX @l8E:`L]@;(U(J V&kX-7V 3mp,$FPNYKl@&u" Nua$ة@~>LB Y Klzl%={8S.q/pW%GC!l 5g@]W#l^QrNFި-Jx|9(/6. `d~w@yV (e@P*h @=!xL8 0sO vͯ =0/XhT Y5Qul'I:ة*$;l^Sf{.CI ù{Vy..<}}V@_j[4@b>VPKZCp_ूQ f-x4Zgj ȳ)S m+hw to%+C?y9auӉU hG͡0ws;:N DVtK5_] تT= ٹ .@5ܫvZHˀw.,_1HwX@H5tL_ P@P@ v>N RBUغ2@n p447)$§6)zn;pFvIaha 2ŨRXKxޘ-S,zi ~<71ЕU kA :DJ(&[hP> &v* 7PX&"m@Lë}_`o #6 -`,dVG"U5}\)362s" I:G?5PuVz; @0lp0hBa4=J%,Q }"ED!8@@ * I  f'%0W|R@E 2]_W12P`)#{Td?-yw2ժR #<x514a+JԀ&@ &@ikJ^O8(U* O]`߬p+@  (h/ɚwO2ZrMc0*l|Whh s"gt7}NV}CHJ = [e$3:oZ(+(**6 lg p.Bm@܀wAl,tH| .d)Pư[8! QV+T>\J8HHި yW-M/)?Q^ yM6l@@0SW odC@TFX( Uf4exIJ a+!ԟ(~(l ^@ih .HW}@)n֋"h bl> H ] e-M k<@U > lM$pl|=Z 78!'((-x*?(8AGN z@ mplO:B¹}C T9@A (C * h!ׂs]ȝ{ޘ-ihƖ/Ui$ P4 p l-  DOO`i@ P8`:VuI {ⅷa`X501x_cjIc^RX/u`a9 pF*NOF,m P.PD {rIm-B񸀞xT<`' /@`hF$&UZ n@ D{}vE,t 9w/hJ@Mlp@E|[R w}g%QKw#POggS%[yʘ¹ T##kX8`wGWs= `pX:&U\*3-ج- sP jr.@ jS ͯ޾Iߥ+H͠[ Z˝܆Q\X9FpEQAJ { -KV-oV3$g?g \ > 1+V' oC+*(IH;hR`8 k0`t I.E.NP(k 8ƟTC?+QGA dž5ި i|Kcok &;y*Oh`'FLw^u@ +q fYq6VL@)^6 P i0h)uw`!EUu7qunE`[Fy:ޘ-E'iz#tx|)U <@ p'c! 0 PQXl4xS ^@`V&@`,p (+P|@dUOMnS P1B Q cn<! ^\xXq51 P,@GH5 4@2Y0 =ZF t*iA8oH)(u,(8/N#ݏ.n#Ȇ)~v<0S{'شX^P,:D%w#븳EqE0_jh~턖,yo2?CV3y ~(jx!H?K H lP?M=LNEuw-[_/}톍0KauNtCE5HlvgCXro@ckCA@/d\Zr-}uVpi?|9$`<`' ` I&p TPOP7-3}H lSkn=g}8Z7E;q`6*ezט7b9 hި-\򭭓j8g'  = `X;52:^6n|i \ P@THS*LP8䇞 ZKT*`mL9 n i(mn䃻y)(|K#h "liAwV< j py&R|:uP*~;8p ]ph`j ]a:@@;ڔ@an$}b(87 ΁*_Q(vAA.waHL?z-5,[u-v!> @; o` u!1S(* ] ` qt)6*J(kl0~@4L ~S( :{?Ħ]sPbt}r(&"j5>Q 媌uV4! <^UHj=u54'@ |Po7 4@WElCp]r@7w3 M`WS`*(rd+J|$*XuAͧJ5N f75b*@0|K-eGbk脩SUik/` pKam0{0@ p!x PmNAbM4[ xq(( Л1R(߃k2 Ԛ f竦2۞L3)8| nK8C?QxTT@ P\h uF` `|R1 R @% Ц@ .n V@c!X}Ʈ A&G:olUK %7P|f=/хf:7ږ qu"UoǗӀ&V `k L `J2@Dp*O 4 w (Ľ) {J/'>~8ʙd@4kq8*( _0qC-=A,NoV } gEި %K!Mg,`||lH2:@ `{)wEJoW'P(O@@o@ 4ƥ 38 q-^EGh4y>cX8]&0klpvNF`V u긣lV޸-hVܤ)oǗ xUx\@k.K8 #P׈ TSL8J,R@L( yn.vgR  RM&8SeSN!0P`具[2nX+6p ޸ aܤixt% гO(mؠqS&S\* z @"BxJ 맂H,(1ҕ6>~=ϖ8+~8(+&rw Xv[] 0@JwwlCaX@m=3E 㥺ɴS{a?CU5 ؉ @$xzjH`X H.Hh&@m@߆@"uB ~PQ< xC@fȷU7pP Ey:"XWWhŭᴱpa"wA8 ^hި %EO x&l%y=z @1 M+US @hm8Z>@~TXq*@ʩ"~JlV *pZl3`?A*0ܝQPQ7(@PUFQpCDQqOggSLN%[yaǽĹ-(-S (ހ,*}k j`\,X mlu@; )Y迸 T"F *shyPl7Im@@o@OTRGE8L4l;ނP@Bd +H EUҤ<^_.1 PTXNaHdX_~ o ~ T((Imnfo][DQ^Z {/zw;w {lu d֏5$Q> c%fvP5@Wx^ x}3 xl&O#Rl^ gVF@ B@*B淾[ܼ ؾ!8` RVM.,`X uߕ @ۭt- e_e5H>B֐C$ި-{Z*)(;*V<@%@OO P xbF Oe P۩DJ7 F@ i ;>@P-ByB,4R m'W u +3 bB* ـ/]?N.-pVs  x @O_xz^P{ D0P#|:@,UP`ZfrzxW'؟W*_Ž.P? qSğwj= `@øqPPE&u:F:-v! E[aPS.< 0@)d5O07 nZh8 Pp@{.ZlXX僖R`oh>J^ ,F:cf@˃0kCG)Pa9 T2 ! kW8 u%KXi)mCok x?@U <3a{ 8LV0 PS'wl~h6J vh@$; EtJ@6zzTHPw)8 5>?1Ro?>t Zۚa eOŖ$!^]%:-B.:ФMS: xT&\ $@l|)F` Z""" eqSHLB 4GuA wlvVN p]3 TӰ0cpD܃VUCh-pSVhSMc+[-k= <5 8R$@=-uS,Ԧ@z9.mT\i( xr P@ Iͫi tZjRӁ+́VQ McPiH'-ih>dhgz1JUxUTu xL(`#8Wg ! M+rK:6:-G]@$zN@=; Mn:aP&N g &4d~ @x5e 9l u 6 ޘ}C* ӀS>j^l`P)j-$HǞм@͟{_dxq?@MN;v& <@Wvc@|_X> M+ K)@$( E;7_&_i_7AL%ky%MQ=kAPI^X(;T =N\%hrTQ V k y@dM: ̋J fEkNPyYP fQ`] 6RqLh ʡs\ut6u\C0`=%(6'G@ %"E!%-{TRvNl"۟%ۜd? N@4 Ҵ>Gq#^R ?zodXGp8t24' A3OS̽ȒU{QP rdc@*Q#n xM-GVRpZ1}pQA6~P| xfHߺ.ı xFz^ lÎp+f& s.Qb6 Hº $k Kax1=P>} L]i/@b|kSN$$܅*o[lnz(]t:@=QJۥZXy~:麎gW\|}sj6#~^@׋_so/6y-i<_*-lmms-1.1.3/data/samples/instruments/violin_pizzicato01.ogg000066400000000000000000000132101247673406200236770ustar00rootroot00000000000000OggSq_;r*GvorbisDpOggSq_;Ψ]-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M3pjR!"M@`8۽]^LWqZUS P/?ZFxX\k b:n ,Iۦʇ$`hrO~ E ""M>xNJN>&5\'y' i|"f.L=sf0ODBGW4=w` s 4ܢmALt^Whie e/DbvlM|l ʡ^\i9{@^O]-bBFAMR(;`%K-o'Еp@CP ( -߿ (NsIiǏ:zTљ> ߭ N7BȀ ~m"Sp*퇋bĐ\R^Q5'۷z4UC mʫ`a[b`ɥE ߍթj Zݐ!^F @{B[_E.xW{,s R }ՒA"W]^qQ LrP@l)\D@+ml5ڼS?)B[ t! Z)g\ (#LQt^ TI3v+mGs1ga{0&]#m`=X+;?֭ p"?Bb1aLƞ7=Ba-7AiFi ? 5 Y&|X-mڧTmĴ#g<*]"'-5zXikQumԕFUіWAH qW]ǁ?f VIccޢf05ŷ͆ԦkZB ÏRr-9Q@b7x{:E@7hp`-8"8r\(TS_\qA9%ϝj 6`ιZdJO]],uEyzP#BU1ڠ+#YG`/ep_nvܶLsx} cU9E!K` xIZlDŽ6@ pD1p΁Qh(LBG;"@RKl3=с-g{XgVvqUa*=O dp^ g8q9;a$AK~@.=9ZznMJ]/4]JoT>C$/,e}y:Vq7D,9IX`'{=T_'X;b}=e,٨ڼ_I|I-ʣ J0_.;|qڍ9/ ,z< WsZ\x5VUnďhPn<h+i`mW NY@a $܃2j-+6,N FP_X[$= 1&ԵI5ހ̻ߠ}uJz i'xf!I5O)U9@]9, N) u[v@v`6V#"s7oaȝǵSfO|@!i_VAP~Եp,rbhP~$%l57l|փܧ` h#1Eڎ^Z"\2UJikO`ܜo_IH¼{CȚQ`@[$F(Rt)*0}˛9)8*FcT H]6Rxn7qm$}ulug!xs !)~tXV@)znV/\[*xdִC2 M5M~P{Upq0(/CH$tP @K,h0@lmms-1.1.3/data/samples/latin/000077500000000000000000000000001247673406200161635ustar00rootroot00000000000000lmms-1.1.3/data/samples/latin/latin_brass01.ogg000066400000000000000000000536011247673406200213300ustar00rootroot00000000000000OggSj\7vorbisDOOggSj\?d-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒsŒ),- 5TȢDϑ~Q, |c[fy6˚Q_/9owx0\JiW:7s N𨧘.fXm^ 6nWw,\/; G`EAUCp>5tVlH&Kr}q$PT9 f۴h~SZ%o|ԓ@/@́9>*>hd'i1&YQZ򢂜=s'NH0iF1SF* ɌAC^5S ]2FON'Dܸd]3 y7q0΋sA䖻-N7[g@c - A( ﵕ'E\ːL ^K՚%Y10$9&y6#](D>-@upL>㮲Lz8*_E"ܯ붂!(R q0KnE]ԭU PIz!1^9+@͹X@vԤzM>cS F; Sj|YgkUIsa2gh z.2 ìU1vŎ.ɓ&50PBIY}9uk^;FhuY.0/xN64FxXÖfYB=~7Fakt/0+_I9V gvk30|ِ$0&>MXgvTF֞t.o*s?-\ТtZ6i ?߳1́\ "_ TN"140w!X֝i"z5ddȥ[^;czJ'{6vTf#x<x,!t/POgsn@ vD ֌G';g?#=|W>GSpLJ-t㊴Vԍ๾,@3$sYG H;ְg`IZ`ߙ Njl8)P\\jCOSDkDޑ&@d vA8QM8eK?^sEN \Sm']K_S xue9t>@F@O{09\-rcN׫caѤ(T@yO\oI~NvȐ6c@Xր4JP\atG3l R~nEg F<\@:=u PUlCuzB @]k2~zml? +> 0hE8pHf{mr.q{\+gj4;S)PFFqQON]4;ꍚS8,q`W O"?V{h,*Jڦ[00Z%Y'4c^ІPK)Y C PR>(  0Jᐱ>Zgt=f jhGZQZpkz9;&5x4Uf.JV1\ ? @Df(EP*CCnAgڸբ@{C'+|[JpѝsG򟰓,ZCrSYm tOtҨq"9F8?~ߘ!LK}aM|Sh?A7YrǻCTfrRؗ҂E[ڒ1Upwn.%&Ic( !gv"h@s B2~q\8/S^u]Bͬa8<]3%u ~$/îeYД1R ?Ҵ*J8_ ?|"0Bt;P 4>ZfӠk~yXM-(VBGgUDjdˎ"x ΀0 /}ߘe4z~o'2IQ21?٪V3!kݍkQ1\pVG:(kgqkg>5#E/cՆ!g}.AJ@8U]7^-i<2.@vXkXk P)< 8;Ni*75?5'5U]B %qb3$P3V)yd v^#&.vpfIWOggSj\zG#ø "#+,,),,$#"$#$,0),k;<δg H08 M0X17$Fv̬&Rh<TD)9ȱW@di^z&*B"\. i.4 Ap`ayNhIdC| @/x  3T }MGj2jMcܓBSJPzwu{~ϟ @b])C)>="7PYj|5:{Ǯ] p| X,Ƴr521j. 4/BPf.'dHʽD3 Uۿ?xON 6)(8ān- QX(hG5E(n8XSg\C(B\imN~##w :t  X7f\HMXPiۦzkEgeAW_M5mS3IYǾQ-ꀻp- PwڗQ}G ཏyhD2HEpNϿsFAci:BbN{8@y&G ~K!1J⨅~!h:r|vtbZ* P/@D5TA+VvXK=T~J|J5%P=ۙSH]QRFNBZ"a\330sCw; >h$\Jq]?K`rF 4#_ksgm:̥ J O_;TF q57u׆r]#,tf+JlÕStEo\ވ@i;Tu#(ꂵ%/Snb^\nv~){*Wh.&].@ 2 ]#a@т``~ɨA-F򧻹/R?Z7KTZ(N{y6.sMwdiDa#QOqSa|M _7M RvRk,0XZxvWPW6|fHi\ЬuU h&ڥЗ52IkK$ in^v2f2Osvģ%qķtE8MPT 5'U{ [?6҇z.PA9ʉ. " @WpxS @ ԏh{ ~hd.FCa,4 !uuH;X5|vp QߌN\BRcQCwܢu{!u)na\BF5OY2n5GӒ TU𗶢Be7vU b5@áQ6骓P{A zF;hnM&ZCV֕Bk蘡v== 4k= ! O Xh<,e*Wz,8R+|F{I,J)1z\rw/_mrf+oj㭴N*&Edt{Yi=xkPxOT5#X.h)SK+EP6zAwf $~"ۦ ê'*p>EJ#vxODƬP -ٙm }4PxQ2n6 ,V ,1_cmr!?v,.kuj'!m> ᩟:f/Ajpb~9|6dO}a[:wU9K:(:3dFC'Ae,@Raθm鴄tF xy)h7ן;w0IqN p{zF#msVӾցWͶXplJܢw>>2Mүx%2 y~PRfR&Hd8l9^(,Qó,NFQNUӷF'4҇_ݼm5a<[Ԋnb6QC2q (̚A3 @(n4ǡتnqҦ7Q#֗?m~زg':fo5{;B4D5ibX @bU@sC!h(&Iv.@ns?Ou-pyo#"/v90`n[XUHc$#Z@6Gr:_r@kEE+~[jU\:$o/O\ DYk=R`ܝ֐&?eSu|K5F;8 ]D`SA*MN CQ1w+F t.jםlt)2zP]SW>JH6Kn "[s1 ]Rlu$Fq́ze5hKv1 Pj3Yw{RDJU值oosTfey@I3 1 +F[7Xi0Jl_o+L*LVE{ `wT?jר5 Y3-3DAf5وH"iG.࣬6w60SBWR +HZF(%gcNهBcA*oU}1:T]G$x~1 ? ;yuo3:wx\)<. $["뒇΅ĝ`y{bk,HQ{Hn,Ֆ ;G]۶Ÿb`r ;Z!>r@KD WB]$q-P[ 4%(Ōø^W@}j@z1p Q0ePV^M6[eU08_R \gip~{)O^u'x5:lMiOˀ%]`.Na lOG+vz$x``s{ji?CK\%'"N#exlZq2Ly@bNHG1ogej}7ujJ^կҤG(}gz0+@ɑ~΁?'ȶ1l/)so!maÃ1C?`}U}g JƛC:⭽;`K[*/;7(ڡ ,JןaNgpmwk jHwԟDv 0K@'F3jQTc4Uh=׶P2ct/֖o Z~hO[ر#u34Hu2vnW L /nFO+@t3ѽi[>%Tvƽ>;n&JRƁ]l{-J*bdW|i3pOggS@j\|($%&'.,#,,*vZ5v*HF@u4Њuc(d0ZxF<$K\8uI\fOGG?d\f?D߈.K1_JKrwP f5+]Fqrѭ_ τ@ʦ]FkcsA=LM΢2[(sp T+pY!\{@eK(~O@{Ot:'Jy5Wnb%g[4*"RB J'Z?,lG֏SEma(;2"Hf~x65jvB+:sPRkܸ d> %by:; gx{oB޻UtoLfAZdC~DvqJJ@P뜝cĊ4z~kBsG8ݛM2ʠ8V i=+E|~itlrl↨r7_';5UMbz&ZJ%E __}ucUv9SmdžSEA%,Y=p!$X+J Ï*M 0 k2v.Zt$3Ժtr3' cՁmdjesog[PD=:o*ծt@8WL< Ac[}ME}. A7 _X$x"@]vX|oT-ks!q«v\ pG:%fq.K*K2޹=!?-kuROYe(8ƞYO]<=k:> Ǚ%8 ,`G$@zʵW{ZTfuZBMɡTD,#.Q(:G1/Ri=zڼ Շ$ 0 ƂPK;iժ")À&JKW/5@_/|f'#-*#wmÎdlwk(k-%h~7S|,ҏ%D=@(PG? P%%Cpz]UHSiW0Kd\Ŀ)Og26|jz0 ^T1.%+_&{]qcutJk( xMa o{imł"@'Nx '1ϣ({U2s/^wi1~[ԼKKj'p`n#?PP_SKY ;Yhr\n 1Xj{^+Qar71ײYp (x MfJEdU;j[wS=#p&Kyy 2 WQȏFO{zeneb1aV!C=(zP i7 Ę*s(Tf#{(.s@8-t{&,(P_:|OW-eP#䍿a60a @bZ`<'Ɖ20vYר7[^myL*Ë]rXl- l`1@kVʭ5.';n,sf먤| h!,՚,xt=bfwJIcdGzq]'Hւs QAP # qoO7!(,aV6<H-Z`@wЂf&5 ,j]rˠI+zeV?NAb|h-E:=/hXE\$i3Gh65%\&#Z⨪EkUs]dfP!8U]P"*]P 0cJ}ėCxq\H銕ј3H#UH}EX$^hFTEh<ڣ{]ʖi( kS m^Nx X,`%:Z:iIJ}o{RJzBg.Np US*;+c$I uIrX_._Pbc8"KկvS駧Խ?YFIw.^~ J ZQUn؊+N@_&'.*@wZYc p^>{]rB>j$aOH2Č5D4Xb?HXf 1βlo3e4dT |u] K@a܉7kYnWnk#.֍^YF+XleC KDL5gn nHƢ[J?3n 'G F쐁 ʒP-0Zl-<֨*P2iM7hoaIZL\ȸ=)6xR[4ULM6bX@ 1.0NSΤ/H#r$@i8p_q= 0sS x 忾g]i4,k#@c՛i1%NÜzŖ :WT!a4UI_ B4ӯ Y] +00iAOggS@$j\- 2Ľü;Ze0Gb|'zDfC|tiι@90}sTlK i>/Xj AW灗URʡP?/Xc_lNB6oCCnl#b! GiIEQʙۉlu/:+eG~AK?lSJqv*o.@J%q*VoƬʫ]dž; a! ,N͂[@KK軉Xdu44 "@qo$=3x4H0R=紸F״?IV6<.wت @5qWI?S2Po#} s&A_)5Hko*sz3&fMIu__ GŽM: >PSr:,aZc?4ϙkbi--2Hnד:x7I}"6x~ l'{0zpp$@N@[l@dKUH!Բ\+eOAKLёDUD-ghۭYBH&/MG'Qڗt[vxqךEjXV/.< *^OKTw8PMjɶT-(uw(B}<Ǐno+l15%0^*bVlJc qأix0z< <#7zJ!746i^]Q? Qc YY xkH(Ћ.f+37N5@ cg\Y(h$?;a^i[]~/@<.7fLOI 0KcJ G/wom.{'Zuh=R1<,NJl ͡NPƌ $@T٬IHOj|q(PQ~R@?*)UұgKIX]5c[wBw@Cbʘ j$t /V LH1`Cv EM]TM%40"F5<3̀ \9%Fi?{Yz:*cTzMq5[u3Gx">*ӊ%0 KiT[pُV UP]j4 %X|e:(x|&@{}ĊG`6,f{nR. a_]mPeBd. ^zuox܌z[̭Sx v_higd @H=902 HR;uL`(DjBF'R?U<5ڮWxNy$AG8JA ]ϛc %{6ջ:<M[vy"гң^a׸N<.5j'E%GJ m V?Pt%)_& ~ieyuZ/{ʚ Twܤ =i!!&ABj.Gbxw|?E$̀u/*3)GeiVp*V-/5uɵUf_!!*j[(R5yU^W1H7*%b A=v*2iP>`^WY#sa*}?ed-<) `F;:, D"S%u٭~N-3T&:*^&uzZן$@α95?Wl%t!#0Rڒ oTGDH`4˪-bq7"U=Xl&idY u0\Ms[bgvjlq\'AHF+N>3wi8^*Ay_4*CKe,j/(}/8ľd=#t9G"M2RQB$`d$f#yCw$#'?/!U PbtMR7_Â@.օU2Btեd=n j=Du W/ҘP i3U2C[Gt<*nLD%a:0P Ս=^~xtLĻ |4u Qkh K@kNc/W7cuDSU[4!u lMiNy(g.UQ?9@ V%gS"xu'tBG(׹z.p@J+Uh]Zr Jf8hE(Bpؘ4sIQwh$bM %`Ak 2%H[ ؿi㒜6}isꭀ ݫ=qB*5Dũᭂ+( /{[/P0U .xP~5@Qj/;ufUB($@wFZ{[^CP?yQQ=mbd @a6R@>hTb ŌC`4#dЀj@ZD^<;le]$_&oJ6xiKh<pZhѢC82v"W!Ahz@LDY(tǎtj} A TJ㺤(UqNvHbx=* w >EoA c͵:~DlS~ 5[MuQ@1A.ljy6)VOD~l#T7sdK*DJ(!aUPK0!N>Y+? <\~kACGLX&wW8y8v$c>f s:"} bpt6m%p 0mVP@$ioIX}xoO_s ˘! QړhVGz$]FC*c\mPݝL]!пZ0NTfp7^gv  P,pgKE 75NSSE>u_7`@|s/vrK) …nWSŹppޒߝy,lmms-1.1.3/data/samples/latin/latin_guitar01.ogg000066400000000000000000001254671247673406200215230ustar00rootroot00000000000000OggSk\l)vorbisDOOggSk\=ٛP-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒcۧ7pȠEjPA!!>tu x\3%7&K&E$kuy2ޥ(Ӏ=8eTְWnaڬ;;NG !+RO~t345h4`'@:` 6V$@b~>[%yU51IZ% 2MZ t4uZ@F8A@;{/y"~l,eׁZ*r(#7D_OTHqF X"-EzQ:ㆫEA(S L)1] ^ejɩb m O_)-%3ޣX~K }@6nbk$4Q H57x`e h`88 6nV 7me |;36I4'YB,?*P!g{@E=CxgcisPq `hYݮ6;TmJ&-xJ-i 1&x?8 `W[^ F!Ta  WnJT5".LAa7aTZZA%N)0L D'hQVn:(RZ2+2O?}gzPx7lQ H@X @' 9GrLx&,oQ1 .*f2 ->`Z (`$0@O 4Г 4 3ƬSΦUH-5Ri0 nC-\Rb0dD+\0@x ФC@ ?Xq??@ %G!hx-B:qU;gI|d#R5 {P *. W@Ų(w}i~M&c$kG';6̙gNz$00EBbo4˭, xnũ9H짖Pxdă|Ƹ(:oj @~;܏/#^~(C܋@ ĠZWwi XI .OGZ#SWȍdژt fyT?]EUH- R)4**-KW '˝]0Šz~{?$&l%h6A2Mzsh[gmGO^Wg rvꊋ-ix}k5\ {~ TX%({5ō3QАqm/(^Hr1B՟:{*K:cL ̩+mT(nC9l(@)E _.&H/Ũ/F &S%~}?!k<1bb2dWL!<=0iK{^P" X$: a&0  t!+k~l9 *vۀae_F&ZSuҗn~r o)y"k9+LtEZ2D{sƎM4Qڮi|]dfm*O(s^B1>Zo%A[T/P\Wwk8v7Bdf.vkE``N#UE.| ~x<Lx0*HpHKCx0fwcfp :؄ZR#]Hk9qRd g}Ҁx#Шvڟ7=cLDGq\b~򣜻cͧ.ĺsKUJ$ îΖ ];N'9 10cvڐ{1y,m6 8P~&JPNe[+V.>Zgg xvpyJ合5AbYp  k-"˕gy^U*"Q> JT$[Jb36| O<lpNpی'Ar4 VKHz}_\PeװsG [#7Y(v*caFBkN=(3 W87]!(RƑ"($?3`i1MJ 4$%0))-*~zHWP4Nz(t׺9-:&I̜ROggS@k\,&%#$!%%,/0('''0,$&&&&/.0,/ɵ%../l: Es HqP 6qB@6 s~BnmceLϷg˾mR .-(u?],Re&Nt?u lRaSwt/;ZpZ.w:hҿN\6u :ϫbڼs8vDW]MVI;4[/XջtY77Q)tFTw]NPSsVnNOf2'r4 к ׬BoDyOނкuƈ+%J?QOK*ٶgE~XfЌr64S+ ;X,%$ysBգ] yTF(a5H-\U Mh >Ң*(k\U߆+n@uRT@"6:,>Skv>[P%auvDDb4L 8ʛi[10ʪ!T5-?54~hګS% @vbCv ;\ɀ;Mzu{vsˢ> Bp&lTk_~cR@ xUY骴M$t%BBhfUl.+K5J$n~d0$`RWcmnㅤNc,_d&[ntRuSPnA Dyo%-N+ZYf>;Td @=o1r@٦+hG1^@K;hY@} BRxfM)oo!ܑĹG5E_*!=n. j\EaZЙp즨KGj]J$"/B4zt33m"4'1ߠ+[Z@b!p т *)oHOuEVz)I/iH#ְ7A*P,\%t@BjEbĹZrm4xl](ě0yd;+ [D2KeNdqcGE^BG݉CD.i a 5N Z|Z:%jY@'@zhGp3]rGߦy\6,U;-t?Gn t--FБ]c0ϤvQc{\ҋNK ;GTkwM*e ?.C">Z,FG2T0G~+`uuۓ@Ce ;+QtH(@*uYogc .dF ʝWئRk|CHoO9L*ihyk8C x`b~Zi2rU3~ "g]/t2Eio},!I.`Ѥ܌DyU[\^gXZ#B {56j u2Ǚ_cn;%|zȸIU8d+b?çF:A+aR֜Y s=S]ﮇ]=x͓pFO)^]3U֠*k(Ũr?JPr8 ':I/e$Hg %eؿ^e0>1{t.`Δ vh*&uɼUP?ۗ"i:ф)A^I)yOüox;:Yb r adjǨjGc1uT+_ΗCb_K锲O ܋ ӟWq i`Dz,qwƌg U=3_xYeu!_=oU `+QV@7tzM ɧ0Dt$N29 ~P"@oLivmmuK-YoUU&iait(>tw=,h+ 2-P@\A.sL<955*@/R˗E(v+(YF^!BH=hJF!BJÂgkaBw_wC2 rCا_EBZ›,@À t.0&5̸Nۉ{ǙT dHZodk86@kۖ8>SQ/u o ۿU⬡ !H:ͅ?fr09D!|Ŋ3}X=sPV \(YZ J1JH6ݣQ 5UGdD!mBcρsp;x`MnRJ%=moR  2QΦ$uҁ[Uz 9*m2W2RvJu' 9E}| O?4=N| 71 }GW6e 0.c 9 d( |)ɫi+E~M̂CWzUތt@Uu=-s ;?WٮSnm$3'╵<\\ji+9~1E/Obߩ mw}!jaєC؄ =BBC?+JǍՌ D֚ѹc%y;ą :hz}}WPOggS@k\EI*##%$+4#$%$((%--/ %&&'%%$-/-d2 ,IgI }m5QG-8Eg}D9O-ᤱHS#wn6⦓X )%?Ѽ,/QÕ@-r-C _Ip頜Jtvl7 LZGfDZ]=U}5@ $|x̨c[MĂ 2`Vv `Hdn `2|̔a7(kl"_T^ `XpRXB5Sk’}ty]x^ p.*=?P,IF@GM,6BP*cqm_E`ah[qמj=q Z #%[tAjuY2q~F󤭜/~:*sq*m~j@9X5'3,,,:h,X[3X%= [;ge}BIN(+[5ڈ!T5H A̅,-HeHwQC >k\z \S?f> ?A ~%z !_g(w) 9?,HKMhZE̐sAPY x=3@@$h Z `dHC8X ;Xm蔸&E{P;[WjI .gcn\䍎\/B)M!: ,|SW3/-g>..C s{QKPt6w(OJ<7΋pTSXnkfqWK.y;^sZ<{ ~uRGfDYY>>Tج ^0' nv:@F{il:4`\`]ؾܳ#9ScŝiM4vҚY fŨ8 ~ H4JE|]oPDbT(/\ϖZqE}.UeB(AM !؁2I<٬ =@¡O%qNhe1bxzm̖oq4JEC^5DNOgB@9n3k @e40 HR.xpK llxv<:{ViSٽ޽! ¾ BAE,l 9`R#P ZJnI,/$z ,n"ҥ7'HxTTlg@tuV`֝.H`88 /QMPoœ]-$1᳣AӫjuR̊ثopQQ  n9 n3.5Q 3A8+$j-" z**=;T-83@X,ֲixDJ^o 0h$_k@8Ipb7YÛjtwq*6ؘl@AX4+$eL#,/?]b*cIpK#p+m[`[ `nX}g' eu:Jw f*.LkWgǙRx;}3Lmrox)Q+@jl2Mx1 !F$ZxDE)s5{ڬcĞ'RPߞ 稙&uꈗ7<˅zj}nlUDvteZ3#9p 0[8ׄNcm"ϦS{] nWqedjoĚQ:n[@@' , `JKd0I˒Cz_ҖT,R!Dh}pcpC%SbwBL%o+h<\R9jA  zNek`f;co/.[hl;kU_n1MNW|1B|ro W<$0= P5R\i(\ZbT#9&O V/S YrKPtc>ZňcAi+O~Z[W۾ޙFK3Zv~qHjqgM(A= c1彦0l։kHd{~z@_i( ~{ӲZW 1a0Px5Ų43^0;{e mu(x Gj."\8kutBc "TUK#U&{7mc|mܯM"JiJ)sO%QBSLN(K\y MV1Q4%TA 3;v[ޭK*QmcF*KTdWDSE۽{`I 8j!i`A'fM\;j/a`n*3 {UK]R+SH%"W/5 vVOGBi&o(W.)z pd2r9%(T.E}j§ xD S9(ַPt&k@$̤ }P*tEI{X0L(ou?Ee2͊rL2t\ ZWrQO;0PU \:K"B'4|r3 FFށ&d"sEm:DUwi^,(!H=Ƃ5LkcVPn_kk=4jQc Ax"m*T*KIciƶ\H%C{l:_0{]/`&X1~ZB>madSnoW懫9Yu05ˣވ-4;V=K^{QuǯQJL. :/r^xeNހݪ@&i X[йX ȋm Est-ЃRͺlG~43qfR2׾X0!v y&6[Ch<_CZTEoMxT[_ *}d_?)TT!R72>dfwNOSQ-qd˪>rDꮏO:; Xlf(߄ٖ,\kUCGLAeX;@o0@t Az Qj'=:A'i|.`A ;:uָ;81@pp%ZTkGTBИ]K<*$31p>v s-:P0+E퉩j(ΩʴP2NTpf"$6x3, s)*4_xLIG51`)j( 0?8T2\Z-c4:V^̧?y]).-3=f4*6 hR3R#O݊&f21d*-W&R:aAsT`% h4MX~f@7M܉kuHȨ⼶ g3֌:`ejtv\-Ka[cj~|t{@>oT C SQM{Won@~Z-'{>~{U7`SBtGb:င'`>%tIJ!.:Mڜ6CؿJWR)+4;g :i̒^}:96Ȉ"(5,5p$)NF dɃg QJRzrCQv2C@ehu0  &kfι(FR=1 ud:}KZ(nny9_mI45X?'~[f;x 1*AGKR8Qג߯qTUnWU8E awݽnJH+N?&iujЄ%yv/ACv86v`H9ed ) kJͿj ai,p' ?4gD)ZB! @`s6(8(-<*\w~PJil1g FW{;<`Fhe\Y|eJu 4 \ۡPP|񨧳Ζ/(+RrW, q bĈ;xgM̙) H%{{$:RPX\:guY!L1тF^LTCVDҪϥ_5޿0x sEy@ Y'Ïi &EoY< 9hoUmrY%i: /EOҪJB9Nu 2.F NL `"NH/کy=\-\Z@@ ]u5K\ #J"jv8EgZi)[Kr_%~Jq iDhKb ST:#%)\t:=|Ōpqľ@fCQAT\;&E`T0UWz Tք[ R09*EQlsDG҃D9[Tz 41QtlQj_k rp4I#[ z 31-p 5 ܬ@j;Eµvjߡ*U;2zpوjO Fq^ j>#X3Je~m T\ULЮ,'0 oZ:%oKl:\>+H P4 H=G\Z8Rv|nłtb 3S5j띹|9-@u;Ԋnϯ*, ZwW,SȦu ysa"4"˛s!4:1 \0~u?w5&]?[2(DE+~n"ʼn3xTxNHXAPq Ėe5nge-t%f*ڣ˅l<6G܊lYXhV= LS= ʋ~r{H;IrCxI]F5tVҤ,#$o9, 0jaos @p{*6JDGy #O-MޚoM v](5UXlbբѼiy! |B] OڗFq}stC m=%jE9e0*(/jeԨF(5HygĆa7pC@M>c~D~j0/ !$V _40$ą^>2(X(^51=y?'ė,&NFY;"y@7syO _y>[1L7qOz7#e7*}8.fL(t5JQ:*c(lBZ\!T5 VU6 #_;GỲ|3"CtT̆*ٵHE؏ljHN1^ Tu#[$OaW;2n|/YM'+;0vE=V÷ 56K 0@_)ʊ˪6ݽj9Vz/ G?Zղ* "";MfAP)=D_z 66 Y. 7 - qlb^M'rj!OU^$[$lfD{ :qd Yl@| ,:lg=XDvF # dJ;=.sϋix+NÖ @% @>1( @00L1їjE$=TnHO򺢠_ִaȶc@〭/6A $|@IPdR X`%gMI'OblpV{pB 8~[U 1/XrMBF;W?"0EG!.j6iՁ(EEEiT}B\! >Ɏxr{Q zL~I 'ӿR>~'O`{70A':! 8.J<^8,擨޲*a:5qeR/p'3#BE._R-~W@T@ @`X\,S-gtŔϠ`@=L:%.  jĐȘTh?}޻7rmоR}t< Y va<+ xl 7n <4ᑅA,X PPyٳ8#fF}C' IP̲mfD,5'Ps G $@@hTR=ʃ݀(HV`zaLPkٰ8=xjM YR%~zeq2g)I ` za`x%x\À@ !3:Blc4ׇU! C4 A <z TJ~`PpO/X}1&7-jXfx(݃ C*^끠gvG*=xf )苇 nIP@'<2`&= $@@wD!]WabeU_:vB<Kzг0 3\ e `Q@Z.+~ (-- H6*-@V@ `rvIb͊x)S /:$ͱ4(`̰=pK0%<Ap,8 X0nP )3#{;Ԍi3Tpv AW}۞ڵQHJ=:3h4U/8U!ܴ8@{/1E&n3:8 0 !ETt@l<df#>9p X2gҲI9 TwBPd8 tj5v1uY]#V!vvt}WdF#+-1Jc;H܍{xYNlJ]Y.xBFuxwՇ.tn:;Ͼljsks?YҬ&52౛uNNza_9-,(s1vj⸈Evx97KlF#/qVpD.4yC45/ #:*|P2fu6@+[JNրXv1ER:,˙ N 1=(^{(iH}cm1(ȏԸ5LƓh?@2vZ(=f=vՍ/o'ZX'hmGFr4pQcwmld[!A|Wv’f¡!^' -X|GݠMb ,[jp * 8[wŹ R}NB$Ӿ vVa)Ya: 6aGuxV闟n-dVampNsFZ s!R/{G}FjxXi8Cw}qv)ZN/#y"u3mcfyV{Yo >n&w(@DMIb %[*]y+j!w)[VEQHǘ)}%6\%M>XǾQ\x *=?&<;#Рē "`G`"Al:{8k4IkG oZeNFę=A=·{MZ!AػՑRhqx}f0kլ=ֹ{& wGXf$юjğvS''lN[pZ@ >S xm(rVZJ})MU ]\xӉL4Z4 @3<<}# h`4`G4t5 &qD^cX㩛QUF\ǻC%>xm .PHv+*$©Yi E#P 2.3h௷*0O" qR ܊`q `E_'.jY@ӢQ n p'J(J[@O P 5b'~}Зr`l+U_c !֣ ^J ܍S_:uszuId*hX/ՓHPz2C]Ft_+?$,T)Tjf$߱?ـ_|?jW㟰^#cHŲBӥdE6f@?=+x!nR S@OyR ^Ǻ\s/WZ2x{. `+͵(}"W_QM^ ͏O&]T˰%q%Yk2k*_0fJS(v'@+ .9:[}"e+b'+RQ>: ΂Fܽe)X鉀j'ŵ'?4Pg;hWh̵SYBUo/ޥQs[Q9df-[ZE7P.fy6e0E&PsDL yNCܗ(?%l K!Q]@oH%1O.SS#N {h8eYOW#.P1^Bty?JXsSz=ؚ k h@@kNdm zc#?F3yV14!8a^A:E=X5pd̸S@Tp{,j2-Ј W &b-{qH6hx7GVI`wf&As@;ĽS ( Mp͔=Xd|@5x2n5Nd%lF\~ cZၧ  @$u x< ͐#p# S 8QVÙH ܴL11y&D xI0P%%h !Mi>@SCq[~9JTOw6}#qzA#4RUl>Pܹ*L[-rx4%ai@@lf 6*]nS^%HB%+Q:.q|sfj0%f >Nm x" ] h@%H0Ƃk ~"b~sjD 3k*ҭJavZoʮv "_*L`Ӷ;9]}(cB,AQKi8eZ~7Wc7]L" G*m fЏR{@1˽_?E4;$/B0ǮJvY%FYl@Az}WZRT5rݧtZ`[K&eηOk=R6;?6$pH%Gk {ZuIgLQ8MwW'}|&`B0SgX8jô\tP$gkUr xuO`قm#_FF4N z 6QZC./_ʏZ4Pd2y&ZV"$0O00'WM/z|O ~B|I DyڕFKDYoKcϮ=Wxd d,ij5d2RgMA(`LG(sO2TR*rF6jC>ڢ woRQ{ma# f̱m02z z $D-0Z<43G i,*GLކy* i"!^*7Z3X]5L}uzr8TW!7h$h$`vyTGz8oi&׌ uԿy\ ܓ,S Ы^;إc_lg&:\?wH c‚Fh4Fl HȲv1pYLK_)5x庎TOEWz%]K!UQz$lBy*{C(jTygmt1p&`h hTZ`|qdԟ@)˨ZtSVݦ1@{9NZD2QVIQ5YfYBQWXb^lBSZh5W'C{OggSk\gXZ*&$%.3+0,ŭ(/0#"%$./3%)%'''/.-V:,f~4g$g$:p`XM<źXwՃ8Xz_Eu@ISu$]+hBi?WBr>a&6E$. b B W_tlZGGZ4huzuw0PTu& .r { 9X-JՎ7$~rZSIn 2  ,d" 1dyH pRX逐o]RD?9lly\ax]fito;z8u9o;: *)z{O r!@n;R@H6j>E`$iJ8 0nkt"܂d5hϊ'Aϥxcr} 5?0Zniw)6Y07O YI_nz~;U_$uZҨ<J;Rڅ4Z,R@oRg2ł>=nÔOwjl/G#/݋jܷ_֧sD:{Yr1 -~ep=Q &hQ!!"> %UIGw#Z @5p +y{ѡyu+9(rtd׼fQ#OWypUbcfTj}ȸ ^V7(޴:[F skvz"Ac#-x޸8ebqSNfO}htԭS|}+G?iYzeQGwcuN L_<\^?w #۵Ii_pw4BX)yo2KUg. ۖI=FyN}T#h҄={h"P}h [M‚|K $KK=yCW*`Nk 2ڋ5~j-k7&~Ry=3r,j#% `6s2Ij(i<BvVπ8KRKv&DWS#.KL'U2O"J7$YMӱDEn;av:;U*Mi64 8klFJ6-z"/m.]y^!.HKy.\R~wE[A$pPJf+aTqBXi~4AVyh>sGʥhA=agk0tUS) P{O( :@Ըs AQ|bA%7]&ss]?RO~G, =t^tOYr25:4Q/P8}3Ϲ/jw=.zw˚WNVY%Yvh3Si/7_K14d#&kw:}-0?tYc>w\Wu"V3)Õ ѩWyc=٥꺷kl_v׸v:xy|0;ޖ(T!e~ d#y  I.8:k)U"qĻz96, ]sj_wQzQ/Fg݈^?&,:MхHq󲟘>: x8p`PݘX-JGX< D'1~=ԛI6zU}U; =R3J_u/ukG_J ܺL wJ`aMxFv9|iSuO r-e8A_YVF2APx[!މ}^ FJ~ǩ{ np-2 5 `0%`De]^ z?Y~|l"j9 /`G3 Tn@zS?/'@xh  %PB~i sHc6{TU5mZVk|)&Hl + _9K%~Yh$줓{nevu^'%dI? g TC1ϠX@=C0OI)GzߏSBޔit] gJMq KǏ#w0k6e).^ (iҁ ;εW"Ls՗|5„н  $r8st A0zf}P6/`&eD=>5N$rm/n_lruePQ~8h`XEdIm { ƦpwD, otTTr QRvm؟/_!TՇ C]uC-'Tv1Axe!zev ceIJ,k`mkH,ty PHA-~ie*Y yjm]~hb9h3^$c ď5k4#7ve6MEm%jh*j1##p6%OIV[F 8W뗗h;j>7hx2O5W \a!g-eRN"mGY8 %/ui.DѸ*6@` J*)v4~PEMvOp&@'Ɓwdk&^+OwW\e&&G)WػJ#=> ˆʠsv5pi򘠊;.#xߩJ ꜂FY |@ejR8z֩*pC$95>04.s#(5L]M8w# ,J>~ @\{E/.WlT7U@<"èFZx@d[{,"mހDV{'+V 0B 9i8q]< y߿yN2|H/q)? ` *TNY˿'?d%Touk!sflcD[Ew#6gsoQF.7=ŕHnHjhNCa~l[^Ik 0? H%a9:¬ kou' j; %e<9-_>gkK"2N[@M  ."Y;|񥘐K |*bTT*vbʳ6 V(8|PϽyݎ8YwDkݻڌ^pL=0.qvz ?LЗŕLV%1;`5'%Eb hD?eQ+Y09cѤ,2a["$RNР%>HL5U4F'(&Ge{βT_mwm &E×l.HPPaP@>dWx3(eOewӍ0BJ)Q(yLO4l(q( lp42EQB H8 A*~хc@s[!!7)y\&WuW[_*(Q W[zk9p$AckBYT#Xڹ Eupj]ZEf\٣My Ձ5@`K$, ǥ@$WrK uHjihU.Ӯ-|y@Fe8➓#/z s։yW&հa[*PIWQD/v>槨Xm_%!E-@5 j1ܮQ=eE[T ѠWaI)%gl%N\s׌ε _Fֳ̊e1mN˼ؗơ#|tpui cfW?KdaXMN1aٝÃOT`2T&h xJnNh^rF2ԐK[RmcG]4F1 RDᛋ!@X|4X:R+i:O]$lqD?aX$ ]` тH{Y.pv ~5ƄQ(})[" }}FkwGc^n3А𕶌TV5bk~X)EEV'\x¥ ң{ tu d?כ'=4v,mSpD7I 5@8duT>~ӹt)$Ϋ, NKaeBSř&<@ &:~A vP"کKNw-^`ثW_k R[X8lb<(pJ _,_0A i(NlP$SG`20xm~E2fɁTF5 Gv$l0nЧH.ļТ^UOV^pmj;u]'UڡE8IEU~{;ZO' P&WŪWږRa\mT5/ a @x1M;Z(K&@dlVDثnfHbSҍNQBiRoKc;j[0:ٕ8 J.J7,*\g(.NҧTgy5[?,ȮiVW֮^i ^ @}0Sl!z*Qd˜-[rz@mKwOPMk-Z1uGѮm%^Yu:xc:gGu 4F&jS\ɥ7(mC2 uBKbzn1;uIw* Aր/H-awRޖm1N׫rV7|WgIĂ&(X QgpZTMe"?!DKzЙ@OoB`h BI@ wZ%O$\ѫe0/ ())/= HUoXGۡgh r}D&~-\)6L{i*;8M'١ՒKF <@ F6bބ5P+=KX$#J zl˥f}lxR.!9?kb\V jp*[tU0 ]hkyk] ;tQs@ݬNXGqQ78>jH6>R@ڷ^$nyeU-rϓX)TRf yU3d@g;Jki;a[=o4wm$[J$së*qprRMAҲsa'*ܬ)n]f?3vyM@ |uA7x>z'u@R9_frD4.J)Bg(nnTx#bҝ| y]uyi ;jQ 4yN~gjB,Ҵˎ΀u:L"lb6YN'{u N܁;'h< 0b" 4&XÚUf4t|ڦ2#]~r.F#(YUUޔ^pUUitmHք5DMc{^MXhoN3k < .3ŝm^łC8!(5Nz?lzLx ֏.OD"X=Hsiz<W 6^{;LXl1t,XZ*2ڞ>DQUfot>szXѩ8ٷZ0i:av ,7 lt{ AF vt{r,}F\¢Ojy_g;U^FvK8ZFuo-)K bKj pI%6!;4 !D)Uѥan6]Up7Qm̼4_ i|sMq(Wퟒdi6|CTuTe[ )77ފ4F1ڂEJ&celsWb3脻 &eN 4`x˂N °Kd ?,GZKٜ"R>Ov&MuuSfvZWx9z]}ҐXn1vZ6{NkEVb3%Sh 9}Bs@{]6/AԕjJWWx ;9' $$t.K0?L Z-}dӍj|ofGbC>PQ1ͰI?YB sV@ "i<HA |sjb-ٍЏCHCćR^LkI!U\rsqg;@R)ʥ!SA]h-9zL* {&'65N #CؙY$W!v/Wg4p=d c b1@cQM`5C`He6ꃼ/-5 jLwUP3t=uM 1A= L$3S$!Mv>˘5?_|7'W_<ҦO+q*8qi@ m5JeuC`[B8(Κzeg/TW#)P GP{4C0X3i/sfhm(qp8ZF_'E%,!/?vg ^u2_:vgR:hUeqc&idY|%}OKBt!$C'dV|ZC KYHZE^ O>mx8yDn2-{c=|l}w*1|&*vUEhJQwu:E΋}b?oxPV NҀ&xԴOuO&H4^ͽXZ\i^2R(ߤ\0U5Ek(\l:ꎚ=p`U 3ەþp*޸]m]\P%=-(enK3A/̨ÍNjzgx.-Rf@vsNZrRuߘi+.>%Z֟?#oDŽH2О}X(HOԐS TF"&Oً/.15x rl+亮 Pc mм2*ϢJONrPϤ` Y60^ YVb <j!y [Tjƞ3yH1 & =pVS֘^o@^a!+}s˄ JhtiAp@~6;7!@}M!Dm!dРmuEUݤJFlH)vP Ѣ ΰ ~ޞ$ʧ?&y,RJUU8!QefT&sۮpJo [RrZld {o+b<9/\c kdkXC|OI԰0cH@RZuʢ#t? :޷?UI9P 5/ڍ4֡}Gu+MS^q)+u ($(jD|A&`"1EDFf\CPA$,rOBkRAᘩZB~u0&ވz|pOZ&aP*uKrRFpj 0ZkDCVg&ö5 }I7RJњ%T/ڼ7 *:ݏ^ao=\fh!|oڇ'MgP9H 唣KƋu 1r_Z|t*;:!{$BIbu@LMLLK{j{Gf @$ , }ߠ _Ҥ5@Zn*6'( \ ]fj'>z͸щE*l$%42̵ٷաME5(u(LpaTĭ&8(|jtoK~ ˃2֟]80tVoy_)P fҗ;ϐLGvr;vR:݄rp)TRQqSBܮZ*+>ip^{fJv)p{al T>I8#]>%n5R t寢@ tMEXf|qgdy3ag?}Jd |%hvasj=jzMpwUu-B Rl;#ꉢ kLJvd;RD_JOP-|\N͓Q<*rmߙjQ#9EhRC+ȡ`{zQQJVD(dTy5! b{/;-DIY?ݛQmd (~kFP|-  ӶEA5tUOi &=k!GLq};Sk7JؙA.r H;4? @,, z\pҩMbww6vd\WQ& 8{6t0 Zp:w  tMՌMzm>Gd>>ryҭY6`԰K] ^$@a`ƨ T@n9^FO[bZ*U_2JfjApM&_,PӀz '$Z}  8?;0&@jpگAiz8&.Ωf"0 Q @y >j2)+ Yܐ}Z;v06lu [ O<\@3`^@ OwF4;;Q)pH  l%cp-/@/pB' P M~N(GO(/-QYjg|e:ZpZ[.--p 2 cOj ,4jEў/P }H%t '͘JTYw؏/ 0_2Y6eј= H<4Q, H@"*AA^-}h$[iO 8@0*mn@@yZ~Hf t:a13@~Pfx n u u <28`,4 PPg&bkM|.M1֖ ,;A' wXҗBiկIa=YtB,J\T q^J,g:| (fl&C+ eISkmPtR];?Rf40UPJ3b8Vi;[֧ P@OAOZtpx* cF|^]30Hne#"T6M@M1d>ciݷRBL ң~ *;P{ @S^i=FiRZŅ b=īBr5 8P氃ɟ"Thmdn#;ĕ@@3JR iNHz|G8QMKNRQQUQ~<"C5zQ7o֚6_r;gI/vRyރ~^2.1BTUrUUU1*a, ~N}?|RG~}LRuO֕EݝBI$qlsO2.9mS{{V F2U'/-Rڕٟ޼33 yAW<>'<:#xʖ'cqzd{N{DӽLf4md o[Gc{ zm'{Xc16&dR&-DJBuڳ9C$33)vֳwTx78dl*f?^ZwfQ=gU*%T_0)͈%{[W $ KA}C.LS.m4cWO/],xGݿ's4p*lg[[!H6" N)a#NlッltZѶq[6r𩱞͛s_V3<5u߿#_]wZD{8=y/N{K4 w7_wśUVm֦2 E䛿wLzp&Z{޺8ZlkQGiU8RoK+o-A,]E'歿7W(J+;i^w}wxh:k;XViKQ]]~Wq,2&\_ FsZ|~0dM՟fs"j~|?jz^%X@Թ ޞ @bx\V/_[ 8;]ew9[ƒCo4U >^\2: M8aʱ8@^e_Jf&4P.V2sq񿭞*q= }(jśSKbtK ktRxok6xϴ+Eϱ\TxdǾx|~ldE&r[SꎃYnA&l9-K }眦ޜ~Fyr w-xV|YCsn~2O'rM^u %J3{t8g1 v/ٙMUg^h뗜ZdYQEK^g QRSZuN] VipދD6~#nƷb6gªX}05`^-g[QYϏu~yrKy~oRC%(x&s詁vB0~秷[}4\j_:zNE7~^ҧ\2"ʭztYoi| ?:Z4` 4eoϔTξe>i /۶_4J5H||@ ,ؽE +kLw4ϜMNd~`}!d`zܻo{tsu+"SZ4oz{f5ܽ:rp2LI bLRo +Sw~Đ_;%n6gqQΏ^^7쭯-A$1755+FX߾PBvgD=_0Z<&R4~Oǻ~gpc.պK,i x}7 ~\՟ LuV^nWJ8{45ҎUh.W"V |W_c7Gg럜R׆[D`_%j@\ B/r&)FG^&j ;l;״X'ځUo0^څ8*fq0Qv!~j-p;]g#yɡ ǟ7.w>*{3*H{_|t{ǿ\T?E.jN 'S=pY?|)Hq*"(k=NE"_goWGc3u9]ziOfB3pu&.$oZ .kp*tγvpgp<< j^lodQ]5b( }* y}8-"l 믡 AP`c`Cd{5-7\b_|8Em^ʢt nSJW K΀~;EQ@dSQ.[;[ 3Tų6$M~dfq]&}=\x<35SHPk]6H5l531k}WS]]|K:u6q}[k~lixD:f – +2#egG-*QATLATwh9~[x4$5(v/:MU׷K.p85^Xh!0/ 9 pY)Hap: (y1}7m7'"W΁\+﹂?+6c?gB}ƴ|uR*Z צrE,?aG@eTJ""/K6WM_';Ԅr2"W{bKñ՜j/ n45,sJy1 I|"4%?d=w/fgv)fo$?[7{~ğ vJϲ_% f`K"g`#2ȯP5Lo (V_>Kfp 污!Ub{R~c_UrL4S}/z5X g }<E j8K'ܪ{-?c@ּ^W}W}+y -||_I5-)=ů C9J 6s8c(\ϋ#4] @Kݚ(s% |^tt_w3>_;G3+!埗b3t whXK`I|:t%/Kf_ I@:G4wQη1S +d _ntP7Y*U) VJ\j 9)`_ N:ӷNиp~C9pqu"PE( N=-;/RfiÔŗl]w-0ɩT)k6[Ju{@7xZKz g ?X)A >!MWze->h?_7M&{z 8:oVQuJ_ݿǛ%)v,x#~(OggSMl\} #99IPO?@9LLTSUwr}ZJJX9;:IPP=܆5?Pu;m7o!_/>N`'k!"lnA>)Wܞn >L>ax:97UIpCSbdUԚQ|`DQc||㵣I&qKǜx>q-dv&xX{YeNz~~ ̒^n7pQ޷; pw;;KTϷs2=h?_G/Y~a(DTY3PLJcsr8 O1M6Aɞ䐳[v|oqp0S6c}|p%A\P6O1|oG'VZVjnἼͮꍻP˖FЇG/X F Cğf']`l$1󭞮[|ԑѵ||~p^^7Z0M6 x],|LsV_>rVh鮒NCajޜ]pV`|&Ho*0m 'Mݍak߽YWhhb=SJz\}m]o鍧yoWͲ_,qM1^L3M߄nwENZ0ߣ7 @EQAm8v'U oI?(* *lnHG?+h$HJxVL96`x+- W͂Y5G~i Ծ˲8qf#'[\~[DKnɾ~~_A{:,9ǽ"gXy9KD uf916|j>1zCf@0~:Oکy\ N1sS+twK^IۦǷ1Ӎǘe98>0\ LpY@f16^3ag~Cʾ]A묾Cx 9B٥O9xߎf:q(> jM^q-L!b3 3 5x(z&|wlx3uɸx;hX{K"~8` !v r<> u =N}S? T]Hϫ"O4@Ic" YD^,'\@#TT.P UP "Q+2mT5X9_2w^ߜw#]"~eOpt31;ܟ$%OE-Νy~(=iw>{Y3.P&6$BB3B1v aF4Y |͋VtJ)ܨY>碌ݛ?ݤmi*_a@T;"kTWKuIzI_?^r|TMLSoπ?- x zmH {Y }@<W@2c'<_@t_V0].|JV8+`BL7Ki}$McZ_^ůKϦ} G @_'}y{|1Aϗgȹ*0{5,a_} *ҙ!;楁Wky\}Nkdy ߆X 8=xz:#;I3hhoc|$42t 9+H=12jiM͏eV3KpnQ;eL#?apjr|ڕENy.3C&7{Ѹ>Dz2Ǩ%hYjXUF3c- y7DWLV[[l??1tҍcx%!0"΢3bcI4KA3^=_OwXY~C9gf.G[pT~@ =>f9I}v(2r>t~ѻa^z-sC5k'@aKB"$a Ƽ@=zfާs6=qר{N6H !vwfjaM }a]+B;e5p睄N\g eA)UFtvĦq$-ob\wzZJ'<:;+5~U ӿcOggStl\mL#=RRPvt;.-8E;>=><iVQ-:K5s߬wݖ<4!ٺp<ΎztQo Kdh&h=}bj&Kx Q xXСc}Zٖ}TVp3 `Ú}pqn=}L:̦YqUG]tf[[оeJu뚱/T_*﴿|ٛM _>պ?[gtMrq+\ouk#NlYu@/gf[z4w*f":?Ѣs` |M6$w-߻/[gRN 2DP $D pܔ]*TClSFK ݫbFw^C R:- |x^e,wfѾ )=^v9錮^o~ެm>*R[Vn! ĬF2t}/涼 lY~mKλׇJ7'O7&in ؕ';O}l~u3gTL ^:>[Z>ڞ?}ǙPygeOWgy{y=YIxA|W)y8ogC]X.p=[-ݷ㤻S6 ]K4gA>J?VՏ3P`YE] 7̅χ '}~1.L ^2hٔ&gC\N+G߀>x{ Gի VM`@A92t̀ۙ. >Xv')nqe˓o{W$\/vr}uw{ϯ&+re]g}ݵv!q5hz| z  2/_NP0=jz/e5?0=g7w%We1ŜkP?B3|JTC k=꠽XطF2z]3;ց1‹>BL$- Ӛ>;ˉJfKyfYڏA=7{ Tfhy{]|S777[VH OIE/׆{_So-S@4dU_278QxXyfuߟ~\r.cTRpr>] HxrYI9?_gw305$̹jo%ktS"'!bQ kR9lTFO gvZ=q lʜ}|\~=sBh䨷bCL# -& 3&'ZUϗ*xyeLD]! `gYrmJʞ{{2|@CgIHbʾǢdo˚vX4g4Ϸ]02kՈҐug,G\PwLW9q y==Q '9c]ufmx[ ^Q|i4*o=VcвϜ?_uͯܽey($%;qm__iyo~c~cҚ䙃/n@E`6'۟ YnO%C>͜W@3yN4Sp9rskoާFL2L?9h;>UMwFOBO~mM:!F!8nJ[w>wǗ#P-am9c@vH]AoCf6 jo]0PD3ctG= wmU#gڨFUX~V6+>I992sQމk9iܪ7V&^ǭ/Wt=}"iNOjU[3uއs3lwz, :Iv]LS~z)\ ʣ:]/ygff1G㙃 T[ЙLϨtӕޔL_9a8E)dJ]^f3:>= $8$wTeXj H$DN›W"53~ \> *bS&5T`c#~fObSIk/0Yd0_4J7G8b!gJ9vi\bKHq\5;Պw}l t>}xYLVܽ=n1=N+Wg\5[GxG(1zGTEBDǫc05C?r0Vp'del]|óm|b.= ͰvA/?,JφNu6eljR `i=NN.׏9n>|M OUB <>W ȩ3RS%hțȬ#H^ۗW)~ђԽMPwyH?t 4V O?-;Jt}bWM8gg57|{# K( ~۲oOFx}Y9?"x;k3hA]ΩO{ެ끅49yNo  6M\+oh& Ux }TISȟ0ЬK4F5Ѓ#Rj0Mu$q -r-_sSE\{>]G49;ƘK }W5]~wB"s25BHWAJmCMֻ;_5qm~2x "u,iLRUۿ p.bNpP3nbDao 8gž?Jqdb_[қ7uß9$\ΟjVNT6cϔo*/YkhrQonVcV @Fԥf"z}D?4u_=;~`/|S;v}56]^x3? zgR2/oNC;C$ 1ue|p\ !]z5g9e{um{1w+OܸP E*Jx q8~203.C#m #n}IWG^81mLSY}H{Ioo.)[m2Kˡ&8Tm{c*R zrq5g8{M Sz?4a+?^|P>.P`+t/ѫӒKwSx6v  @:,˖] }BI٭ 1FkC+/0_aU)i [i%]l~<:RY>cwjxKenb:@Bn> U{VB2 Q58| @~ZEEb_3 t): q9I=y6R _Ik4K_&t$ӄ(k>A}5,< iU%`!Ds%M\@ &cxmhcM *@Xd_dpk_+U6vS7=ϺXi`^{x}('>" <bGvX@rף@&+@=jX`}_ =`ݻ#4 ^s xǻeKf-I>Iaj\ ļ|lNKq`_\Ѫ@3};<@`9l A ( @(oKt]b|aH</*(ʲ|zPNu3z׎t RJ&dt*!'UC-!xm;*PuIBߺ5cnTx !덢 g3SŁ v KyJQA|„gSZ@ɭd3y&)l1;gr?c uL5>' KIFUҼ- BQ۪<+`~~ 7_oR( @~e|es @hQ@~$g] sz!%<8 [? sJD}, yk pNupN{G3ZN~@=8`X63ݏl *ƒ^(n:|'ׅhm-cO{TJe}Ā*~ĥ͒Owk(0WA;x_i}{}oh!52 cbx<_w rb'|^|!OIM=@oNEP;l+@h.6І&[ Rk\Y~Pؿ+ǛʥII*QPZ釭\r=hP(p-k.٧(r̹%+ΖJ5\??e %f9"_b~ow\Á 06)6xoM*jispƪbZAp4qҰx?GB %VUUY\ e~쳈ȵEiJ[Kr#.w6-RBh3B9_<-i՜ t",Q x =y }*Gj T$b>bN1Lu/طSSh=}ɯ6dIQ$MsEQ[$n`_`lAr[T-P'>Rʅyo$,kҹ,B)M;wQm Pzٯ)8djƦH ;њv -Ӕʜ7}lmz׸P&KÅHi~gSY7 (Jvg:SV]#uIln8lR?$@g{5ƛ - i]BeV՜/kJ5!fi4N_.繗M<*]ilbme(Z7zP8FFv<b^͜vެ)/!@53J=]_\.1thZ6%"tf WwVqâOPh ֚mLB50u#ԈNQaԍ |f/,Ŧpd Pk@Bׯ!\H^SG}ro>/f;lQa{A^|=r03ʉ_GN4M5ރ;.o_֧^t;b;f7#OcՋ|?sߙKݎ[@§F~\Ng~q ԭ;ug?Tt ܵO\ޯ;ۍO}[3ݜuyZ{- W.`Vc%o#zV) N')ب#3s}9y{M~3ޯ}$kBl fueF;{%ƽ:x|_r*{̝_;^b˾M 1 1 j;V 6 =pOli p8GOy+ou6iw |m񾼧/ٕ{*;T72ju\qrGO1 `G a,oRt~kֿٺL~=o+=) 1J7m0z# sjR!c`޳u_>\'q>o$9'<lM} Qɱgfj#(^,9&x58?G!TJ-i钾_+#v_b \~rÏ u]`+=F00&|ɞpmssvjL%J>K1^qD؂P.h/E[u$Pj?zMLZʻEl>OB$t<%^w?G=P`-}YogziВXvx|Xէ9X4Ovo_߸_;=^Jg멑_H(_+te~;Ҩ~LqB lJ-TL= ?K_.PL>ۍfeiD/O}$hnf_3i1ZD~Pz/TT|# ~{{D7;]۬ϯO<{e}p՘:.B0Pa 1Ekl2o8-moe֓/IdcF^W]zca0[&%f.޽7_Yo"Y z?>͹dWocM8jϟ⿏Uv(.4)|!}ZDmJ͠!6+umcL=8h|W9 1R@5πk]w,pw<-tY7&J,㖸$5޺Y0~ַo,Kmᱨ!*b#yL,>E2#2xXe&6RJq#0yn$&kq/g2hp6q;)2$Q̓* >% GbئvMN:[t*hr4=_&?vA'DRune';OggSl\ok!PQM?@OTLNw{g;@@B><>OSvg$ L t/@ϸu .m'aGRNQ5;03^!|/i 1J ,lNMzؿæ6O٘x||:0UӇ<ܨ̢[Iyi&ؒ~ve/Wx==p$sۋv'rtd`5B"E,Q3VV9hS(?y=B5~u~˖Bwhhu JsB5u7|.?ɜ63ks"|Om^6zę0j"B`‚+ @'V  u=]q}rf-,rr,۱ƩՂXt%FifwC:.on j^[lK. QT4uQεw`]J=jtHݘjÏ/2mQ ?FÃ5?,'> }ܰæbk?lJo7muw_o7׀-p1gw[ @Z8ǑN(6vuz_;_dXmU0^L-rmFmآr܀lBb-ېF,o<:,~夔ab9HC[Ơ[n@=>YƦ=wq6 !.$WC%X\mɂ ͟W>'}<1X64rݱY&7lw 6]慰tXs,9ۯ1| ie@!lߙ|/* b r SD/R@> +8֞>KDKZIno0"ysAVSCB r kp8UvmdzlC>~VFJ98pi,ϗ|nPD'RnDžLqCqFLAAکBbRT~#~X>wwCNGg̅Ai9}pϭ'_1g?3 [̴<4Y1Lgȫ bb}?0}bQCNIWuLY@ zxi} 'U>ɣG@Ȁ, o;f`A-h f~q/M['y\?\ ?f74d͋O. 58h8~LPP@&sK/tZAGC[)]3u܆qprY ٷi}Ү%CInz 7fpSc|+rA㷛h3~Y,6ק3ﯯpw~Cɡ-k_D|^7& @DMUwSJ0 +0!&~[͘rfL Lt[l%/X{>bǬ>dq !A7SԆlrRp)WhҠ|~3onN zϘν|`ڗgaR Ot5jy_a0 GW~ g}yaբ}n|9K&,liԢb$R3݊a5lbʆw&OWI2kٝ, i7e̖jLΎiuȞO}Y?ﳢnF''{&V2+Ns*Ůz_,G]W12N{zfY lg}vvevo)[.Իga syz ooH?X5&:ٛ&vhorV#N DvnYuկwmXv!yv\\|ULays5:oK*|HwEDP{ߋf[ 8ոSȂi-x=o]HT3;/SWwpۏnl}`(v`EVi~4¾( CFGr/ا/bMaoVP^&m:JMvէ[~[j Gw{w` ]䐃MGg}wG~캟;$gߺ,rϙOrɾ>)5S7B!~s*79ӫz_">Ӆo5NPBc_ykX9}_*fWu}s{_P59p csJ+nZ [>;-'/s]l._Kf\ hRݶmVvk]Oz2@wFR&]5\U* ٰ}.^½> ncrTQr@_}pӽuוr]n>L"3ϗȷ aSM>tsSsO^ ErE=/d':Uϻ#))R\{^yVЛEqvٙ{ @ܯ;ѱJ]/(\`c_W[|i:A1f=ʥ֩Z/ PsNjbAocDES& |ݴöOggS@l\j%MO`d[R8=ERVQ?BDSNRSP=EB>LLNZ`9߳y|h_rfw|Z>sSfv/pTP1 mO?R}Z:L}Xfe~٭vqJ>4pc+Wse_R>}yE2~]4US^ߞ%?5Jw? )xIe\כ]R Мwҿj zs<<=KT@2 5bw#j,OZ?@fuY^OX~W* iW ;X&f ˰[C/zP~ _^v2D Ys!ѸP9)Did=q,Iϼz1]/κ 6E+)ɰ9 x!+ v}  aur[p`[So1^Z*ruNgB ˚1NZ '0Ľh}Jm-OJhf{ 1&^l6J~9e<ӯ-ᣌڶq>X pws/&.>O!RMt7YJrfr\ZJg\컷B|/$~\/d>1NW$=xÚ;&O?Ex` cTYYJ_ri^>7Ѫ=}BS] 7.0 1@ " Hj [ƟV( 5D<}c~BaPA~%-O`>;U-ִib^vz#_Y  -?-KS[bwO˗7-U[m߰FhO%v-aK65SWגE;@P? Thps i%>Mv0}^yixcv0S;wAW x#{ nʴ " @P m\h#Ǣ^G` Ʌ-2jo7^U'F/'=Ǿ/~amjx[ྒ˾VHeYc='  y62m|{PwJnKV4> @n6jG lۺaBǩ+E+(c 3Ou/blit뗘ipDc3~VyZ0p 湨nhT3G85 ?o뮮\ix ﬚i Ի QA5KYz@y/H ן(KgjIvWj+K;q)`Ԗ/n")?[8%WNCȘLK_.kwUd;;kyԎ˄J_f=>ewF4_ͭo6Gv"b^X˷9GܻV^8rW߫^盤/N+Z>Sdkp??rQ1 [2xsvkf\GDzo_|QDt}/"°BpO7܊ ^c4jwOXܦ/ -~1LiNk9{7Wu6L U_q\JB~ LYf4=oۛ4]:dwB3*R]ccz RӎRAՀ[fnzQ/󲯸o-gda7L(3{ #"@_a]G[Vvk6ί?}lkʩuj jah ΢.0I],~EZC.}=(5'2_דD/0d76ϫɗFc \v6fg81t["|ӏE9wOu<3<FǮPl6/| Aޘ7K ?vg&weo{9_c;{_e%IA(.[XA?r#;nkV`Ϛg=ɭLB}yMrm#>ϼ%@^OCvJ E2ķhδ;r ˺o(`6b#;[R/ͥߗ_c#?%}8y/f$5 j#"5M0l 15Js] _iVr$~i =mWhǽc\>qox{k]oSf>RE)&p/ON"䌑rn~cѝXn\YT~c uNȯ؂EMx_Vί{CYW[cP9ʮY=Gc1-] E*5ioJ{ٚi9vnzuTOZ\k|:ϣ=0#HC*2D~  {d*Od[_ FVha/NO,qDhUGô?}ёC}6J_X.,\ һ kݛmÞuK{o! wu::٠HgYpxVYL4$5KVYIc7('? Gh~z|5^9ݘUmejRec7 LOZ&{{r]x;Ι&7MYǃfrQ-M=ҵuO(݄agOqV3`[qԴ򧝢_݋<|cWq4ҳ==_:sv}>0LοTSN0d{|bL2=?1IW @q eF 2evpi'GC!Ə"*ȅ!#Y8a`kOלt)w4;}]=\5z65۲lcd>vvO p>ɧZ_zקR4H6w=jA"ɸE?o,4huvd)N/[5>ヘ=!|ŞoxeWWWg(?=znQjsWWWt3'keq>&Ku@Wy}r~ezR77"h\T @BRO@/[ChOoW [ *<VP.~~~ʍfC+O?>b7ɭԱp(ʍ1aߩ z u{۸?|WPAiF >Í^w=ޥ'ϋo}ֺtA6'?(D1]IM^]j*pa=t%`n{?MH2j38RﮩUYݛ|5.?T@KqzwsՆ!h2 ö>=~60?"r#2J- ,"WwAr`od7L~0 C`Yު}9^ʛ:7{ 蝐tlpZ<*0 ;;gG_VkU-~*J9NϷZ'lKU#dM{sd g]|5?y UqpMæ|} L԰ԫ p&"?Թ(~~\P%IG@jjHNL _S_0۾ l/nu韋Oo 5nő|>a}mɄ.t~ʠ)A*ݶuF{CHr ?0,=MHHIkV-c /Q[UH @ʵn[lAG@n6ﴍnX_"i-Gz?߿ޜ^;Mv*3ypJ!Y]ዳ=Toܸu|@]>`6@sS=}5t{ gbg-T8᧗83.op@_ӱOټ^(Ax~5-PE'V1[̇ Z=/B':!ƞ:CP S-,lm}lYV^tQ ЀvI]-jfU DVx7g@:(h! BЫoUe0pJ`?6:GVsaL:ig-K+K8}ھ 1_ڵg4JL;(~?o QTr([՝~vO~>;?]|)?'{'1 >'If,&]Wy;r\槪rhȞ6}hrg0LB79T1 &iAۖ06 +IU|6TJԟюOiҬ`޿.39}˗ׅBrԜ09o`` Kw,BSjоPo'1I9k r:GQI|S<ו>|g|Λ5~ (bH~[ Z~+ o. 3ъ#ĸ|''r8}:1v+:6j϶.4B}¼eGp?)H|dgCYuh?}__93x>;チpu%oc. 'oKW!Ml^{C<Ο?"M" M<ӻ"@ ELvNhZHMy&@2+(n\~ydKk |GgCTn ܲGL:!wFUȮԮ[5޽OcG"_|(?^22.CQ SS!*<2iO5K)[lPhd䊷n1rΩr7:q?;Oaf r'Bm' 9ZqzI^&ُn< >Pb,é孵Fq{> GQ*srJӆ.}u5'sVwt5}XLs?K)Jq]y|m%kzd c!{?n*ڛ5 >_h:O!{8|PMVULR,4M3Yk/:[=4s˽<=gJ4,yfqSD D33@Cs/'WM~SK('GXY[Bu [8THjw4|> Yr,d+CyK}Vb)( E; 8džZr("q?8.%R35;RQuR_9{*g)>gkтK]ݫ__h]0O}s[=Ud&\/>稬Xϗiup0/L%eKpuQރ\tG?{ 7,ڧ?Cz~~9ꄤÐq׽V2NNPx%匛ꍲO׈1 wF^vx|:?3Q5R9&7>9:h^$mF}{~[v6)%C2߆f MwoMksU5Weew%_{L5Ms5&1C0E{@lw:V4ILvg>BbjPwPwV_w\?>}'*[w-;; /쵳{9:?j{OwP9RXc(^h.{6ͽCc};k{dʒ]d),5҄iP4$v#B&&hkf|X汆 GSU;ϦrN.Uw{`5vWH-AM+yuQQVG%L=+?>/1q~a/Y_qwԲ=7TGRT_j7m9ew! &,r.C5CMB/6U3To/|r|j--͛Ngvm\e;C1,̺"[hz'Zϒ6o6 0T^-+jb_Y2@s4xp/ZiM )X ۬Uedsq1fyO/W`*kҝ۟<֋{| @3qQ]~-;CW {o ǙwnI`Tl|~\.C~,քZ\L&tvb(DYM-yn_w|NVw`a`LP(`@6 ۭۧ7@f0Ϧ16$-3; B*EB$lgzxpG\q\1>2dyp{ytց|5~n;{ _GTJdQ=1x Le&gv.fVf3Úڿ87 {SwPqX545} ~!W!*T// KAPo~m_D'a0 Cm0Hmhs'ThzL-d> 1a~'<'$0 Hǯ nhpBy-]3 yiğ `O?omqYwа,2}5п~տzn~򥷵iE ^DdJ EƓy8<-1AuwWu}] |CHýdgf@g:rlm\U^}t̿/A7 N}"?@s>Sݽ^>5=r6I/%LF}`$i),S]kM$lVeegUYۂr$Tb綑4^UqqY.`+:.ݷi|ε}L'OD2OSP-xɼtfdBh?^:*qRγ!9sɂY{ּdZ~ {N$|jz!@:s@6p*$dNi <2`z8Ͽs+di_C2M>KAo~ ?uŹ;|>;]ٔw,եϏ 6é?ggyo$9pX,3MY\2atD+s{^:zO;/>_tZ5H )j\:[[`^o>*D.,w>e#{ggc50|w-} ij_Ē!0t "l&8ݡj5)zHkp 7zut{o[̤QkCU7'UПgvy'%50ӲpV ZtZ|>ݸh.{ƃksӏtw_=`o nVcK` 5O\6wɿw^ٜs]]ԁ z(`6T|^?g~~Ez) lȋ 9:N;l*=CKoxz$V?PYjT0IRҮQ~)R5amBOku` i;H/1Bd>ubyN"-=NQhM7Ad-hZjQx _V4fyh/{ն @rnO޷ yK<_*O"x=O]Gf };ϵ7jk֟餱8{(_s|n{mY揪~_TAL}||||xy"jYzJlX+?/Zգp:f6Hkc.A#{k}?gW}hu}%4G?TxyĮGNuJgW󖌗%ヸĽ4spޓFθM!Qܚvz8Ga$4Ft_,>]L\L? +xC!^FQلQ)2y},t=U*f޶=Ѓ_S9sydsJv{ia!l0OX j03lkO"4Ȳdx  (S ېjfF$+B52/ӳPڝ%{3zz^>pqma%5-}.a@&fIvᙧT;|_؋[ ?okX1yʶ6FcWӉok9 ,xSwOS s? ī-O,&}3x,o6=Vfs9sa> 鋫2n~?=d昝D/<nܼVLñ3 .-z}ԀIVup 20mݗy(LQ0@QTe CLd e9B!F,=(*wAѳL?eo I!7#' 6k<%hH;f fkZgiN^6v"ľ!F1.wym~lkbqf/<skv\iҎYSw4?ⱽ-%6^JmEOeq[2qO4bi4}!D@{ȯsǿ>Z}͗([Fś[߯W@b K\:C5@'WW$f3랢T^*[xCy^'qeZ<53w^ W^;y ڿ^ЧL=nߩޙɹ|2'/&S\*ٯhOw],/uvދo"xR(h瀩"@V zK"KX;R ^n9 b$Š4H%K-qs3ʼn죉 ݒoB.SXpߠ5j 0KRC n]ۺ/I7s9-g -a~ف"r%;|smmD@=WA?Ȉi=N]Y ?xlPQA x7TQxsNMT`da,edE؛d\qsQ;f-O c*)|*LKS#04hTwɕV`wM_Uo] wm'6~a,IvRڈ? I2 v_j9x<6v\%7扊8oP1ymomwQ=+ݪ uޯdXŐץ-L$7tW,aiOggSwl\ /ZdXALPSURp_kv_cJDAITOSFt[@E6"{zf`JS & sӌ|%kvGaZ|(Ї ۘMz}x@%@U%|Jb AHn?y;޿HلjO{р*L\( ӑhgvC9v۾&:3i{+/esV`4(QMRSmPQ{/E|QݑiK& s/ef]2LeUT/A?IvT$~/yZʞF*iHrp9:z٤0'?G0\d΅: h9;`Ϗfdf $ >q`5 `#:E\uFFWUm`%Ze bzv*ԎA5ּ?禿}T:4O J#|棆2jSOx9|sR3ѷKh'eީcӍ_~|9|NG~rmH 5䆩һ ڥς_sc#Ywy9njor[R|}ͬ/} Ι?<)SW7-* ~Nmv,wg{{UY'֏9 +hё{`˜Od]K;5d~PAT?àCT3Z 7}z3%ه[ǧakS|辂|JXB m\hXT+1ڵ!~x0(и y#UҥP;?ڦSZq7!δpy<=bIuI̻7 @i4oko%/U{g${Ƌ8X`Bw]?ץjɽw?}U;φS%3snLnkX$;m̌S<ڙO')%׺v͜_B_Ck:8YppBԵٜz[;,Ӻ&a8Y7 3" A &juv~ʦQ6Li"Ϝ,"m d-i PTs-Ajl=YeC2`|;H}2'EN3R0wlY ’퟿4[65cŭԯ榄]#rv'y;a+n+J qz UKu V_t\1[72kY{i_'c;wT ?ށ -DiGƸui bcS4??5fEm"u:S}R"m[`|}營fiR_]=9/5\Il"0>H| 9/ Uvi {Wx uIhgF } uj6v ***@R@/LjĽAd"`j(a*rw 7^+`NGY]*k\,3۾s8<\\qӓw#1}A5"DK& ?[_ KkbH l՗.'auԵ B?ɶP=̷hBl%~)V_?5JyN@ {t>ir9Va]B3 [lGu?Ho@@=[A7󓨨-w`_lx /-YĞn~GioNl-Fy@nd?'9sgz<ӹu}S=w G cO 5}Y{_^ ir]wngs&.sdZ{;3n(}MFsv PvS䰻>{i5U??D#K4j1A4O_'?X[t L~ЏޏT?~w?VC/yYlFUс6[~~'|t^k9;5ާ1^Хb3EJ$Ҹ` ,!O!c5;B,Ioa%S4`,PpSk|F-`߁0FuzHpmx-$KD VërF*˲*z4 57.~Bx>qsdyOiۓ+P횥zrY]9T6V>j8r*c bz.KqWN5 935, ͦyn+^w=,5(g@{z5z"z] mz0S :+pF|G(&$ﯫ55y  i'9C BS;E$,B1 ~@.+nob| f=.D߈ e@Ͽ ) 0`ӶR>B^k NL1cw m;i?8XFu3æ{8}Ɩ׽`A~ޓFr~O)Ql0 {.$}5'(?]w$gp#2Ү|=S]yj~S~s}͇r_ㅂ0J ݘ>kheߟF[kQvTVgs*wϝ+m$> .l( [HBT$w/BFx+wpCs~d mA`v%>5EeͬJ9TI |k i^`tHlz3W.2 +@*'<=o]i`^/לڏ67;3"|Ouٗ[:TZ 0E>^lL[Ԥuv+Ќ E~=uz`(tSmS*ǠWܥ`uYrdW9l0=l'JAvv34OjPɉ)Œ h_B[`CjSjF#)wƶ<;Nx)Wl {l3Wد%-]Y|~A3ٞrj>?@F?uߟ@\D/r?ZE p"waXĆ1-Ko}IgykG/Ƽc_=~u/j|:N{cH)3fuG )d~Ѭ~6B=I/a9n1OggSl\ fA.PFEA@?MOJMQPBBKPVPQQ74,A:8::9:KOOACNNOOPOq@Ff0h/mpGWe׷X>mFF}A9&пU̡PԂi s_hX +Gv/"|;~<_oLR(n2~wh)EE4gKl`ڰ\O(~:?xVK!4Z\ 9˞jo %CPSQ sKi y!܅x/\8R^ݯ@ @ 8zEej( 9a8 ΞQ ~j@Ϩp.o'e?41Gtc?QW+7 ߋA,&xyxJ3qo]}">kw^IwS])752Z_ު}Js v?o>Wg.7Ns}ΙϜǴd]YߣaP#G.)a[W5^oZ8y////7O?"|)tۻ[ c*FM@ɛ0Hyvi ֩}§k|ћjS79/Fb>,yRoa7cIt%5eE3(z-ߜl)M;&@&OY$m754h.ԑJs()-H=o(O_Vz{_zXZ^J >} kC u6y~jY3 ^s&Lm_OϿu˟_ҙ\}^ί'G|E1Z8U gЌ,ꂽ%LƐ^1ur[,68zϗ%;{_n:T5{ί2| a@~xMmDžKV@N[%vE'Rœq[#?Y}Z`| ]Wlwzdl?Ҍ̼7lz,w>OHa[?7'aw܎B(9zfLg~:mgW*Ͽ}&x j.r܎Ʉ(PY=RSJsIP U}z3ZzmC2ig_IUƭhT;ܿf$h''VieċKQskWCč'_c*Z/4.>`8O e<]󛟳;䪬}O|]}Gs0@M.cηIpds0tŗ,f/u_!+ rg3ӽU~f?EQDqOO9ߓBU@V2ߦcAb|kҥ|!%sbO.V#>>>d5 ?>.|>>f9X >]ۖM$$u3[Ma!xJ|)Yks 0Z02':,T&WMqN!tv}V.4'6i32>mfq!޿J@f&B?\Yl՞"&RvA]*9-AҁH|.J^̖.Նi,| 4P8k?MM Ug.z>s㻺`YO$JwMf Y%{@`@h~=y "wY+ xݽ7T*J(cj^^G;)C1ٟ/tJw3g as?b_?W8UcT;{iwG_usij˝Li?UYϲN%]p5tܩȹ^5LZw!:e5Oot+ xFiw+ɧ]ݥ8"+)4vXScǜYn^>ÿn[l<2/cC?#R }_T8^T@Pc̎؆@I{gUZ' ?.Cxd=e<.dv%ȶJAk&:ds_?]CU&@Ny P R|~=00|QITtXFM&I6*q߳(]$yU$9*%ּug=~=3g)YhUkL8ar̡HR,P> U n[N_^s4mz%cf'፭R.4vx O䴺tv4_* A6w%Xv]h( t7;̔6nܻ+WG([o"[ ' o|j%ՐM a9M[d&"@ k+uZjOM:];hJ_Xv%pV+%L4{+/nIpj~Lv8_@z|! lnKfRY;& > .Ahw$Kc+'?ii'e~3TP5X}I8r { |$ޢXi`aB%:ri?ہq5߼OQ$P^3d4W`laG~E - 1ϲ z{:BM)dǥ<1{{{>ǵKZ~~~6 ߕAOggS@l\ r?.RS=IM[[fa`[A=S@Z|t$[/Ja~(̒KLG"K+KŮn?p fqk̾|ym+AOD;۰:ӬbvFO/N'Xs _{UkYk%<8][H#?L(3ߒ|̻g~}/.ޙVb?]<.2g\ב͆?5UwbCu;>jj:^bN3yG]P {t z PN!wl@%~)5ֿKwٍXjM3Y& (| [(~ ahi2A$v3!稤b ّt\ )OkSK[iYnrA+;<=q24g Q?Wi?aJuL $рRcNbbP/{δ[ rı}诼6zqiY|G^"5[b(/2fS ^8m5Q#AMc0@)?__hCnNEs=WjuGW.=G}9mp^ܪHnmُl;~`AaMw]Q!afɲ6Ŀ4̋|}yg ȿT8xXC<1o:):7ͳf\ڇ*eiLk_Qt~Z=gw|1 I~9+}_ 1(P }Ix,0LO24@U pvy&у7hbϛ }6,@`}~|zik:m<[Nv>X`nMꠥ7EvQ]wgƜ[@v_B#:S}(1Q4/Jf`-GWEU*Xk8l.hyGc4Z#_Ei?遵sQ| =]'=9D͘<>ӓ-;4n:/^/n{)P^!I:,,&?H4NV/k^N \?/@M8[O5 6"Q U@w&̭> ۶̹3xnb ]kO-hϙ'RAX񾇼 +pC}Zoo"ўulfWڜn/iN;:(-y=6WF{<]nw#_~:^hmàj؄|1W?LpoɒRoZ ϵ?ʿ(n?x,[Yf$'|ߥ)nzb`&߰0fA< {~7@umB &x\K S>;V=4gf+3qm?F!f1>5oWkKy<8BOOP,S޶ԖL/|~%|}S9 h{?@$[~?Lyd'Jn;<{$<~v浉^1ZzDEG<]gHη t# aB ʽqw>l@?Fq1<.pD:&{Y\UO7?wmOcX:vvr=JI O>Z8[M~^2ڿ(4RJ>l<'{AtY +~?}/kl^uUI#W6Lհ@gg@A-4-a XϷc6@?`ˡol*qteՆm)eN:nh!/нmY8$ 4wa\0˸c<T<+~NjD@pg[վkw)DCiٵSL͉ܞiڏZk9;wg$M.0S73粨仫~(ߡG 1wĎnҐTpƝ>^P|"q/˹#ĝk.aO|u?~FpSPT7tTwn)acWb{H4]l.ڿTOs6Z}b }rC K_]@P逸 V%耢"#  ڶjt$t[r&H>֒ZfC*֯=:}M>~%.sz3㭩|,1ޏAiҖX J :7 e2mQyѵs,*锊"*I.[j'n|2Xsﺲ[/~ca.6T_A}3r͛ڎ[Mg{}\&|/՛i)f`H(zbSP wXw)hQ.̒|3Gd70 DCXXR@,ydSl_1??:9|DG & Dm e fbmi(ۜftS /&Vwŷl548=9[3q 3_\? o5v<76*d|)gcz/K' ɳqkRg?;z_-R^6_ |bD p 9h0=#;/XB>?MdwJ6p\7/ DV6Xv~5@o"W\0/0| |5U=&(@?!@Ql; b~ P+@@1Lg"c>檪X'ȁ~^ =(#;-z"9N.%c.*=-^eO9rL2QEo|\^uԿ"<#C& PA;4TԯJlcsOguRXw>;%p.ni1ހS8ta @ߋpΓ/g@%@L?qc( )jJ( ׿4T 72X1)]PB<*<)+SJu6V%2u7z6}~_URCk[r9 84@Z3"m ܋|K٘roxOu3j٥s[wsڥ<m ly : *@fs}•9_ݾ~x?BVR/| <h[7oY˿!ʁ9f~Tuy,C4|5C754 pdsI@EW1+Q W*?}pu[&$Zg}dP}Ls=05PϠ-rdZp ptфnߵn>^L_VS׌/4s{T7_/%wO3nx`&Vk6m>ys<_ %ӭ՝lE92٢P6^ .| ɏ T1/R/5P`r#@oM anf\<$sOsfv rQ5<6A-@U"@goľ(~(!։v(Y fmZ: =Khgu,&4>XãQ8 ڥ中_> Tj5+ju*c4t^g;X67'|p/yoY2p7B;f ת|^O%u'g"/tnx=> M{ˆY)+]Jf-hWyu齓;P%yt?=?}_Uy$OF n o%qZW'>٬`YDhTڥKa8 ke'uGB4~::Vyc5>Tcࠐb`Y=ߋ]/srup`G?u׶sM&Kh۬6re~} Դ޵ yn9]7mkgIuߛv^:r`Ruj99_/_??E 0RߕxlNe~9==9@koq~ Xt]H:]_@+kLxb=Cftp.cblNj*:?y\sV <UUDUmal_-MȄ.QL@LDE? %@XO ILLk~bQ1_ *C Q^KƄONZ\CZ2$@R38iqF $,ajzxH|2lru}(m][HY=fu|{fw^.bl]]fq7Єur>bݗ>nXYԻ Sbt.\EQeweAk{̭H9;?ynFxO,;L C|td=~TKs|Ϫi)i Js1_ѣ1y@?,=[OzB3Ȥƪ܉hT_[1Tf_5S@{G)x0OEm֠v1n`x]r~ֵ8oM^j7X-\Q"vۍD#-nD$e9m"b%c~#(RI 湈Ov꘣qVn2ЯnMs>=6:pLiOfDTPrs~vavvvֺyμ ցJ!dsiʃaXzyW%%aJ _la/_8A?EYVHO~6ek"L~KZGTo$CP TJӁNi?8NqR T:Te^~f]k&}U{2W!v\U*Cf?`7.[*!-oL.u y|?O~tɄeӧ3QcY?LMczR, y3cr+dFg~8**yOggSl\ô% }tq][CIQMAHGABPLPO2/@혣N>fLyq'~5wD^)'Ӷgmǫlf@ncn} jqj GX| Qedf{X@$/7%^zn~lҘ#$B W9cjnO^Nhڱ ,G;EV=t0v)k?窞3%c xM22#>6UYxo.g})UYK۹‹Foǡw{ bݮmC끾Ir{x弸5XL&ow0ɦu\{jfFf< ?ݟpo8}ٙjaDWM "+EY&eP}pO sz 1;Z  󦨨#4p `d?l ˟4 Ed蹢*&<TPQZpΰw7:TE@.x(ŕgx {o@; .ڟ>' $қ\^[O N]pd.;>証DoE O.j'Sdƕv;@B/B[@5ijđU;?Zb/k}>p;l$8z^8R{}}s"oOj|<. S]mm jNU>\b=Al" 'E@ CLgdC`_O(|B"`6lKc Zf(h7V/zX{Q1:(ZS'1&ڭ^vWO\U / _>ۑSI1~I_rcJ}WJ>gPpLt5ñG/m䯳3#O`:QP ^|mO3%`e^ |sv%줟owPlQP8 hNT g/u8 &~K@ OUj"X=/DPa! ||^xOۃEI6ڕ3@+(Xe 8 h`͔:ڊJ@XG wi3Q~F'vO/g\?H{1 [iMv.])]4'. k7//i/,d2 @hE@ s7 !F>d)S7r.iyπyƑc5 /V@0@"j"t!G0 =\][Q{Vƶm9|DbP%B%G+ʝ;>=UvjŲAz <ձY ӛv_=ǟ_1h&:jJvwfzAeY}>O'}kge~T,8H N᜿&iqS_;+Q C\*W(εt7ހ**iz~V̞jP#ff. ?u87=1۽٭%K3}e w$`puv`@7 "G/֣C଀,G rvƼ[j/5졗i<=w7vO\9udʢc~ VP)iUߌч!֎髭=>]n+믟OOn$>}bUU5ϗR#xUB}ʼnzJδ+}*4ku!kfN_1nCoA#}+0G ?ۏD r5Z ϛG47fך%Ugdx6v)Rc3֩pg%&ej̷&sxfZY "$)&Q_z҉J@nt=ڣ?pռPZG'~k֍>Ԛ[S]00p~HKe~UIbV{&'/Nm=B)K$"** )CPI88xz>4e#1}kBkxcOs.͜6,C#YO7u*$E>A4`R $ A+>zRG2y]|}{'Z'ӼK6z$s7Mus<[#Oaxzy[bxu濽h^^n))<Uw8YE$>Kںr 8K5 Q6B`9RqU?ǭnUJUH'0Ȟ? ^/XuE'<7?ykn>YJ&փ,Z8g\ +Y \U;gG3;+뇢vaz6<|EP9U'+Ut3 K4!bzzw?;;feų]?givڿjNiu7:Sa<Ӆhh6wF'y- ԷKxz^h³p ֲf~31[)|uo>^ NT'xWI?x?5FU kTiaϞJhOj(rޜO:{(nMO[ o $HPT.jX[yΣs?-K`/ _]@V74gH|[q:3>L{Xhv6}O=|Eu-Ԫ>uH̑ /Tx?yAU*^UÌlgW] [ }_=5#E!@ܺ7n%^"w]?P^N}T*Wec4)uoW-)؋NQ"&׭s'{S])޿h\* ^?N؞j˪楙δvN#掷 JrZƐ@ۡ83QR~3}uIVق\g/P5#<_ż'6yFLιf dgi +oPAAEx^Wx / ̔}Q>al7m8>:=8Jv<;jύ.fB3RR#ިlTe@>AOj39 htM^LN\R_>xK5ݝ3IDf_JWuB[3gYhLo+祭ݟd3d vjfq:m+P0 OggSJl\.l??CTQOMorO`M;{.Hb+|Ǝaj%N[R̙_-b#aʮ_vA39P(MVga/(6jYlMɥwwOdNyAPM13}vtۈn$IzMc m!!X]td?vը->Hg& csHQPi"`E<'(%ihjr(V}y%myVFv%|Jt c)iqkD"'Z{wo`bhb}Z|y+Qu^W; CVVquF@I+u[Frlg8l8OanƠ o?2CVI~6=@,lXvg 7m)r0|o<~n3b>خҠ}r3hz-Kݔ< d~کU8 Toͩ<_"U4ko,}&W_E ~\VkpFpXU6Gx)ѻzuR:YcdNhٕ 绡](ݑ+ȥ55TQb]'t}z&qR#8IPɻ"~}v7D}QJhv_ǁSP݅3b4?U>_S돔TMކ}ɣxMIQ$5&~qjbogU;{̣tՠHC$ܠГHB֒#5UP\QP~T^QEQ@ (` S\RTF#c9%CQeФQm蠨ﱭ_}^_~w׼'NwQyzN) k_,$uB6To<\Z/q>ڿ<bkD"ZN/VSLR?]ExͫsoSWX P)7}WK2@ xH4>}n i22 EW([ߩED F[(#˲8U~z*J:o7J%-~_܆PWQ~\vbdaI@@qEA" #}yﴵ C# _X"=OFԇND[,ƾ {f*pN3j%gSFye8Ï/z4Ӻa{_Y8@sa;_~o4h <d.X ȗ+`<* yUT'~ l(1kxQRnk՞kO};ۙf ~, e9S2@pS8 shX&pmfZβwM\SDis&Gß곛sf ns˵Y:x2a2vcș Z~@Q+V}F{$S|iI|bux*\EٜO.h e}ֿqc!@ǜ5eE>s *!"BгON-f`; h63N(("wS@G`> ` p ^ ftG-j5`}ojht}[ ,am h)R6ȏVhA㡕?2^]L=HJ.^7]4P yh=Мk[YaU?yguQ2Vpb8[q}WE `OQsH iֿDDd 0_j|Q oj{vyrcYPhPPm_{;f0o9@7 }2ț碀e{-@_<~5b4u, R ѽH~yV k4}J'5xa;\b/؏ N@g\B6 ];بb[t^ qzdLB7t2\2槖ids]ֻ &5 $@6wđ֮3W ue]wسn(\C>Mv3˳iCGM\m Ȃ p[J/lw6mUzZ <* CW ``>\i!1 B*?@x F8>8q8>68s -jV POT0BKv8(v.|&t29F%#m&s(>>LpbmP%O1_](P=ڴ+ܝ$dʃL]Jf @ь]F9ʌ<@%e2X'*"M:VoAC\~9_Ҁ6 5dss@OggSVl\7VR9Y72q?wf]|bvr[ qzgOh'\/}pl`.'؏}3kl>[ﹿ E׌BJF7Lx46P G|*rl J'|̏?J8L'|Ś{7_Gc'g?[*)V^ê9zLJ:ک K = n\4 U\hf8o=}XHథVA/1@ES pBZ8ش{?p 77eO& zHջS?ۨVU%Lj?+MۆE_[FOo#z?w{͛fOn~/?/xHf X9eM,|}XLZsLee垿;;;;Ν|m}k}vAڑ{ *+!!ϻĢ~o>TY{9'0rA9|BzflpqΛm8Oo%$ lmms-1.1.3/data/samples/latin/latin_guitar03.ogg000066400000000000000000004076001247673406200215150ustar00rootroot00000000000000OggSm\d^JvorbisDOggSm\k-vorbisXiph.Org libVorbis I 20020717vorbis)BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4s38;ROPIQhZHu5ڿ~d6'hmiE3+?*5ԄznZmL"hXۖ@%ѐҋҷS~/`~o =3n ;å b1V`Sgj;L>(o Xt}?ʙ7Yy>ՒyrzJ^ʏ*m8+d%!TM]~ ָ?>Oi;ۧenY~eKrHǶOv/yzcF{ffc+''ڿ#_:/_OFs[<) &xrllioOzQY@H6-+oӮ=dmWK7>3??0 KŵABef k`CCܙԡ^-sôfWBxܞ)Yyag?LbB~{YtB2y9S{;U@CB[W1oB/ EteP!.1M;2mͮMkQӛV,w9/ʞ-,8\Z$@$ ;䋺i1'Zl-;F+a,ߍ_gۋ͗tڿ:>2ۖߞ:Y`I@a&G%{TK˗ku6t}\+O(W葑W U[4U*dy%wbfX ;1%j'שF͏]<1Vϻ??~Zfl ,h:'#̬;oi qҼ^4c\'-s졟i@_+g`>)fj7 |PYM]0Ph40ବrDv`+r#U1nrǠd)n칒X fԀ;WY5hp 1Rce]` b8x",}ŒiڒpJ;ZJ֜[ ̬ʒ@}">_kۚMg)h@ EQtլ?{&G_~ B*?hVx/dM{!]q##o>+g}|w%7)nɧ+TʿHh[7Z6E`(`5=D}8NϺ`׿},UV oOOuΰ+YP噐 dY/TTD **@} DD@%026b^ Iw DDؾ\>\ޗ9;bͭۈֳqNk )ZwMm5h+8.;a@,..p88 Ȯ&49-%#sGol\ \뽆54('$s\$O~cz|8r܀x Xf=OM~!N %m `:=6xtLe%mf`%P^]Rr;g@itn @>p Ǿ *=2Lz{9p iHt}x$u+4ԏBU@0dC).)̅Oo&"=H/g:f3'k^ r?-ı/8I N,VtL fCs;-U{i\rS7_^2%@/[%&r?;T9R(.^+`p1QTth~YoXȺX;OdS/RTo,oۉ/ MW[ .3-o ^>5D7@R= (b% B $+u*OZGL 3;=c}x8"jU?}Yڱ o9.(pkp񃕍cd{dhbc҂ڭI 2 P"7d~ow`>$N3k;qpjXtu5"a>+ ^v[8 o{WOggSXm\BMRUNWPSrp٫~+@Xd}~l0`@Y7]o˰ mjsihH(~K.{6r{:iv/g1Mzwv?\i&+7pr5ǃG |k \Wt{8a6WW-vC݇I.hں~dI(~f p3̐@u%C+/t(D'L  NPC}R!)^=`bo*n?aYV?:ۣӏAiNXizQX ~XCv,**JcsE!p1c'y%U& [jŚO,)<-i}r;^J(mP 9 @h9']:--R^;>n8XG"֌_ [[Ẑ\ PrY%(Hsw<ØTcp?S; Աy#Æ#,G%J{t^6dPڭi RmpQQھY}yp& ;UN'U?_ w; zõQOhCF|o\t=c[s>xYg?{>v^9gt~?/^ouy epGJ.%d\F%س* I\nGŹ0(=0h}^/";n}v[1oZgx7y%XZ:zUO8'aJ~8RNXD_I/;g6=nе=kv}**aﻆ,ą $gGJ?l%_8Nၷ:Ѥ r3SSgI/[r>jP;> e eq?1p7`\}g|IϊG5̕w|»: ) 6# 5B8ox ݹKs_/5(.gU1@hv]ʐ;?sx54qԽApg@G%ajPextb:p}t y o)ZBbp 筗 j_ҒvjptvvyP3gS]ؘ{iCMݹԢ٩ fJ~iSfb`zv0'f8?άC% lq ʫg |uj'n_N4d?>څw >WY65 Yl#1v1km>ۍum z"_nh Jna -_9Z[%Ij!І,;tEn21y6E|պm%}sV_bn $0]IOaFU )nD"hzkvzqgy=^5侻~suޭCjiX^yf&-)nY? HNY܇(y.r0$8WQF{RQ]wĤ'gkom./[5c<e%v{m+:qZJ8[& ߇C\@%F,B~q"7]3.~/+3sP@觯`T@@EOL/|]MY~ ;~.L4 ij/;(Or-~H{lᣥBiOvc۝P:coA^`  @4%(zc˺݁%f0ܚ$rr,jb5$|>*2mV&$] ٙVrs3fj6G0p۝{Wv1P{c Jj@.` Ve2G\z;ei=]o8m7o cX/';ZYNQNLdL>@BCvmU `cZSZ"_;gRë57JWE*2_[BnD\B{ZvcOxzo7ʭS$J>?vL\cd laVQHҾsJw:GXeFn:p܅I!*#z2rQtE2(gYuJEFIBP{8*[iِ5-umze&D_}^84PZö+^V X8/y iivG^:.׹cށg|N7im*h?/DŠ4S_o4>jw:_~LVO8T>|DR1!'Z [>55kαW?R9]jzDi6agZd=ZrЈ~d_ޮ8ߡ/Rto5?O+[TRCi~O_$#v]*&e0? Jrz+^SΫjE7zZiFj hN3ҥT<^^,K?Z?[ѷhI9GM5MS_1 ȋۗb7j|^\gUlPLAB;3j^m2ח;<)CC~k閗z)=qt~-Z$XҙʺGmbrv:wf32P^’x# R?:9laypvz゙y_F4΁hz򟮚E8F-`)1_u@>x;`6!i`qz3Hoڀ,|SP@ATŰD S>< }ǽ"_E` *Q@!FH|[~H)[($][*U*<r_=< m.@o/o8r1GNHz!͋b{,ONݸ@i,9By5ו@_d jXeŔAun$ D>':jlb>@7s(YƇdz=S"63Yjz@#(U42~@o8sv)N6E=(1f&[Hj PRy'Д M dkUR^d`4 ;= Gn;8~}}*{ݧ$X'\/yTsi^Ľs$#!X9FGc~n['S!u/.}lN!o~Fd]yN G%C_ާhrYzYk@733Cj6G6W~3G{!kۺ;OK1i޻`*վ)][hm9.8Q۹S <2`=^-te!)f튬$MT 1M5VmƆ~;F ^aLFKJ5:j6&|4 hVFiUg^Fpڞ-ۍ3wڴD +%<*H|m#.yaں^_ QH17;l>El]/+^,`)>~i7^&{ V(&Q)wLw$TKd,ipBGx oX:Fa5~|EMԁ  ~=e2i7,.w:0/+} 4Oj<*2`9 r\5<8uL eo(Om\G 㲝n7 pTȝOz<'Yx4=ϣ>v_큯3O&꫘)p'䥛ɞޅP3 [8ot bL3]:IwU۞sf^: pzGuTf7_\4}n{jq#>td$i^_ʴ랩>Re:+|⯠C,n[-.R' b. 12Y%>87e(0,"wLŽ`4 ^pJ8}8Y2WUU~Pky'z8qR򞊓>|rs_N ӆiP׀ U(o>cMV 8`Ir~>a`bava뼓 u fk<^'y> @f@rNN?T13q6+(Շ}+iSUEwZ'UBd]ͯpXP̈́StX*PcU0Dm)M?yh_F%.AR"(:֨0w4B p V-WU U*Vc~/ا4;}:ECݵ߳"zMolXҍ6yM}r48K_HpCgӞ\݃Eϳ3s.⺫|y- {SUifL`.A;g mzPaOm0DRS_OUU> I 6ʗd=/3OggSm\ "U@>(Tʗ DBY /@Ρo=yzX3[_S5*?X)z1z Ld54*F"GpU~ͦ X-lr!N|k}Μӱͱ/,G{Aoo<<>! /g!`=SY}'IO/\; KM[/ ~,۾? o#.kð3 \Fg!in]c_w;_e-bĖﯕ]l ;*]< &p+gc;z`w=y=~D'G*~eZ(TJi{!zP x+2nRaY<_Nr7|ym_nMc"gB79T>)5j(*ȃk<6ZRC9?~'SS_{=877~Og[%14:5:DJJWD7:Mok ~; >}ض!y`u|>fbKjE։/,V4š5%I3}Wn~Z߿MzLS|-V{(vA ZEo9E (/<>Vm+5Nn;`S/x~xm_=+?%Δ,@"*z3}ümIo] ͲG>vn:6"Sq/WgBA94kCY^A~)PqqWN33Q^NjZBuLTg zU/Z oCL,ONJs1g;0Lk ~ڟke/tNlNΩ/ bڍޱPuQ jS{AaR{;3X4,wgĵezW_aөJL5_T? :*_￑Z:Ɗ@L-ԍA{%g/)x4s54ʔ?W|Thkj?xH'XGo?%~.1 9%x)٬WtPټ5f`o^!+"H޷4.eBDdOg gA~ ~OXxgB﫡N}x]ӏ́Iy;.1577- 3eErܹ;z^9  x9Pa_Xt\;+o̯4Ӱ‚؂+3kO>"(w"_?;h8ɡϺ4kqI=x6nj󗛼V?\Ss6 {:س:n$_?*M57P`!70  !b ^@/=\QSL%YEw^jK@~;a#*OD*`ښ>ɰn-{c4QKt-=qzTn֣lnL !E<|G9TߏS6t%@>} ~o /8~ mf@_8.h4T]/ %k_d7j^"X(* g@{tQ^KkĬ$VRǞ{ip/MUVQ- tc %NqBp;# iNha{򗗒TcoVˬ#m_-Гt98@9l3QnR`\ۛOsxmBx P%xf<՛^l[6j5g2J?;kٙBbxl{~U9r 9R~λj_wlߺq GlWj UAUAz{~>! A =>5s!,kȷ @~z8w }/7Ag/p[)`)@g?J@~mt]Jr3W{jz~tB7^{>+YnWT'IfHu_^|&4|h0`-퉿Z`*(:r Iۖi?4+*'0O+a`O}BؒG F!9{h @+.Ot tS~M` 9D::`JkqA-0\h!vQe<I Qr1<6XWHrJL*qR?smY![gT%e&bL]=tBm|%`fi뼀d7j&Y/`i{ oX OggSm\.37HP?I7498<Lyro r4GQ&<NW Nף`െxB'} (}羃tA}u8:z%gN/ ús)] -vAݮ CuX)6}rUU4s<5իA# V2 ֌p2?&31l i;?Y0&dWХ %E[(МQoUJ:?x5v}e,g!G+^Ueɘ^oW1_3UG ڄ6j`;#[Dw3ݒ>6>_qYgiyo #f*vw2v*~%TOg%[/:M8& <' `?Fj=&+O7д&50d3oP3oLRkxL.z:i@tAN,@Qy~myOp(S5 9{'J#g$qb7N +yp{./ȇq#n@x+;n5h5xy5z9*!|kF<o@90&orvӝ.` m%wn RdA|v'Y7ի Uw@,x7- @}<;yfjM |<}@m* ƱȚ ;0{Hap@wb_%9p۾Qٹ9=ez<;AXEݒ{6/eix5xYlkHFUk5ׯ^NL)y۫z:76q-:rM Ț6 @ZUkSF[:O*Ϝ |+ypf8qc<Qz:kYvD}28*N OQp^ *ɬI]@J@WXFWЕErCE? Ln?Zo HRvRlϷğ$2Jk} ֫F׉w}27]xYry ^O(j(%R>o#̊d= ⭎\\C=7?/ RZ@mψB38ChML=-/'Jr @ⳜFk,[P䦇]汑x wbau]7i.pц3,LHJGCr `J X d6 @_N蜼),rnY~&(k]𿷵$LP#&)n_8(!;U7MU_ݛpQ-M?afΦ-m`l%nJT޶[1scj{TvZpWZmmۀ09>pi?)V^jS48#A+V<H7mG2=ӌ<&5 ޾OV#ׁ=xXE}Y @C1_5gT]Z,i-M]wW|d;f3U-K>WpG~d5 j| $Cq4v0~3]80xjbΡ#3d K>O$|ϣu8FEMвsj,͡퉯x eR\fm P}#7}ms7E ֎>a3B.GcT%[U^iC_m~櫾{_FeH(@nBv *ilmsL8>+\ me7jAp/${]ml]3Ṕ X>EUtJx[mfhfj J!++V#B|zkۦ:,hMS+Po۱=l\FTk`6#f#nb#^{wNh8^ZCFP2 a l>%c;_yq=I#ٶҶAG'Ƀv" 1 [rmd"5?{$I[8Í8['VTJIvb>1ɜ.^HB`"G֓2Ol~r23h'xtķ*.2w yffO4]Ciy{ TKސ q8Ij 6`,_M+Fb7a93`o @ _r,3Ubzk8$})ў$A_Kd{{~~__ٚ7S~wib< fث]lǓO>h*~c jmǛQ?K~T__h]vMqx| l ߤV!!O4}FLzX!Yag<'6*ھ'ѮEP6 y$߸ t7?bEY,;9￿LY<36!s_wԲ2oJ/2kY bQX^@ ߝMuMX ^v^ٻY|ѓ68ʏ?X:%Auc+b\\ތ1& n}0|~Ty 59sR:yr*Ǟ-75 afCj 7H589M>}dJY\[FSKyӚY1麳:sf?oPM'$ѻ/Cv^V[XuA{ڒ7 Ҵ/[oI~T-^? ?0%}b'7R%oT>a[OggSm\m4!TSQ?NOPQPVUlY^PI:L:89;NOfʣ7ekWVAknw<6GLxZ]&xb;DEU1UJAh_' U?lɖBMQ>6y6,CVz?Ə^^/8i?'~)cWp£ס?B,j kMI"*n^NVzx-Ab Y~*kCZ  {x;e1V>~_}?.N-gHg+:ڛj(|*G/'TwR) +V Gyӷku"&grwqS?yݷagw]_|vv`976E kZyjM`rLM=!'/Oq>R۲UMMNI|o}h8ve-|1Wa:{psQׇmJT9gZ;2T`m'0MTӺ0&|^?nTݏiov^ȡ=9 QH=ņ~]+}k @SGjsYYה`xBχڒG!:F.2jMh/[}snWz6; [ڿk#\0@M/UWv/Pwnuߧ|p\pHC "6lv+,~9?#Sx4{Yy>vu?@'߆Sٟ3,ɥ{#(oɕuR P}=ۄ5QИ`&`<{T cb}5ĩX&+NVe0KiB>Fɞ~\pRc;8 @Ud*Ǜa<`߀ͯ &!ϗxQ#ɥƾ-]sg2l[R=̔.SfbBT⧒ܔm'OcIdIp]!r1 ?*/?-Ă<^;wV5xW[&#B]׿|7^Bw~u`}>\;g`ac}Q!~t @~e0{(2B[A:7nQ]s&+l5_l]wէ{!N`(>ҐΜܩgy _#3٩/T'Oyɟ T>8=~1]jc=j?>Ct3YC84T @LNC,>ŵB!CU@P.,1n < C^ҎE ^ڝЭ΋rLri5I%ņ~3nY!XۏpǾeo[jB*e:s1^gQ ޛUdZP]/BF> \tA]e -{ ˗cL_{w-r6 %_-L֞./1[H(\q~;pp7qtfl@O>6% Og9.h/dԾSJ{f5+Fc@7w)6FU0 ַ1ⲆN#.$P~m#fJ67DrY;a:?^zqLd5;Ί˧5 ;`|T!Jzb~/Vs@|$1@d0o~wf:mhhج|8LEl3@<^6[Ƒd\Csgxgma :޾m7~q5iFA^eF]TvAhnxi=^9+gكcԲptzAv-?P(:cݵiow{"74^'Ύ>P MKn9},U3$keslw}D ~R\&@% U>o-ftz]x3t F?;vſ/U]~`}i^!$”al[!™qK)XRଡ`ph^ڭĩv\P-:v`ȴjьh&/ pK[Q5T2dC1@zYŎF_>+Q/($ڽ5sWH3x'xxM_]Z|_>t] iCoH@-O!x'?8*B^6ofOw!2EzwbCG9l"kw`p $6U$YAtN3 Wx./Fc@IZ>z* SΏnޜ{86[m] YnC)vיx75Z}mZ); ^SDrn#߆ Xu; Y\.if{hz*x7'US0A03'wl~[ߖU|=|#L؁a8sI7o`"` (*sfW |RT>,=)Ѧ議Ιd.5i=quU.FFF} Ue]rm8b{#߿ Phݱk&ɘ{fF7ȓ߰*J%ԆǸž~ W"ϊkJYr0m]A~Tk?|tT+[pԒhImw>=쌬LRR3,*=€ᚹs\7~s\LNtk4窞hrZ ޽>\=LvjݓU~7~ m RAgGH{~qӲMq4+!/Cy$A2W녍۶BRLñz%=f;hu{"Ӫ9~ monEq1f̘1""a4@OggS5m\ <(PKACPUNq3!9;C?:C6F)SP#8iͶDQvis~I^zrl *˿m0UX) Zo;bQܫ_>t?_nhd]k^!XV_ӗM靫~|_CYv'$wY׻ q_॑/@~߂Jq߁_Pu9bnGK-|dtft*uNGLQe5^V7PӚE?'YVՊ7ʯE,-(OS|Fn푗BT=U\ gx;0{AWM>nRz}mktQ12j^|=0f)/պi_ow !*Ôۗ ؏<*uP ~_WћΗ[A c n8|֘C[zǕkuéjFJq,2.i?/ǥ}̳=sݏۯ6ΣZ}UlfsL7.o=ڸ]́"7_)YVœXƯ;;,G7w \W>՜{^~x>jTf}KydoaM\S\E1p{yf9ŏ~&;ܯX3v􅗷9W__;콯PIpB? M^3Jw2ϯ'K'g$Eg~hL`utLtꃆ W55m0!Ÿضx/oYu%SQ#Ce~)~rF:0O˺S jւN鹧A`2O%|㟽JL̦M֮||onx6^o ?}oj^+5/+wD}v=zkb ]|eM ?I7y~*ZƳ#koZכ:<L8@xI<_rVg40?ɰrЈ_j9`9'~|;srCeS RXXq- y *j!O`@Ml;? x  - en>x @Eq((~-@?P_]cn$cW|KѓW6r-*kTkA$hlzUv[=1o98bo#_e{⻡߮{/^*w::'nOm*kes}]_$ϱ*'ϛͫR]w6;eQVmNGL;8}V}ϮS$㽟GQ4T8 qTv4uU =.$$,O92!kiα@J4f7vzezuNO=pƥ];4$s<J@^۵ފ!ԀVXُ^k;Vq )vjT 5_O/v>Oq#Ynwrv=q[͋ix\ oYUZ17r@z8 eΊ54L81,{]FjGw؞ ~bUV?W7H!!:2!O'I;}D{l I]e& `xJKTᵉ̋^jAը* HU]Lw[SK\f`Z/2z) ϙ3|YC7^N{wt&t9rz3dgq: &Ͽg?XLl^* /:2=90MWYcfjaNҫz=6k]`2OB=yʅrX(Vy &:OX&&4CL9kH>9SAGaK2ŔS"ԲUΪ[٦oe^kL񬹿EdǥLUDNލʅ8¯?u8LW|x8kXh>.L_cQ0C$f1/#Tx$[ڧ Byʺἧ U54mz!䙬R 9{cӧ )ȱ"&8tͩl^};i݊ΨDKO6VVQ3 $UYȑ[}e[PO?=w/4aJTM(UUv6t+iº۽?Bt> 1su$$f.`aA -M‹i`8 lCe3ȍ8]O{[/DI8UulL&\'UB H/Ldry] rj ss&grn*a“ƚOEw'>]Faff KHV|o"%RYX䕱#gT6pbfjeEEqٔ$ZR qwֆ1]Q>n,&O|;C 9ܯGpd=vVWTV%V8>~1jd,؛6 E(+^0?FJGÆ&㓟֡WyVG|.:3g4SlG!1"lici~}r:7Kn8 2s,?wvoxuO$TD9U砧j7 nνLqdm':)Kq~l`چ+u2[Ʋ)lfnVf!33ߙ1Y400E9O'AdM(fxMKB jx-ʅ߿D[:˔:ccm^]Gj̫ ~G,\RW08?qX ǜk" !J ؛Vkq } ɕUU @_MmQ&[JiW{u-oZme17/}~>W?LOvg29?[ׇyN:Ν^==x{>2AGfN6:AǿO&ܽ{kYWL790TN>߷b&ڱj& %3'/V=>|ˬ 1wFF5fK5:߸e8AÏ:I'e7u;YQNc.簙' IQ!yGf>ԿoDXz9]0={I䥋l J2?욽>瘈]t7$@JѪjt$}I (qʬ&U~hK # +ƢΘ͜ :,ZDH~SA%i5J8s3o}?Xm^5/<ԿϛuQ6ͩxSmb*,'Z?λ  LFn.FbTI.30N )uGuȳ{6R:Uig~2dHצ@Ums3fq4 3^̢tgp R|OggS@fm\ 9$@D6924GC:;9=:8;GNMOOROKSS`fK,|>ȪF!bOdH4I~֐\&Iub"r?X/q3~fW 1ڙՄl<<[]{35daY+dL;&Oz'K3g}J2+hԔΐeҌt_eUUU\2Bb$ƋG!L]^Ж%!gBsyB̯?8{sbKI$ן;n؄bQ05=08%BgQuF{KwEdI7EqrnQ ' Fʕ*iJ y.^N-OV9r ڣ`ċQAQD9M@ ,^?k'ChULj_\,('ߊ sL&؝nk,K.fG.OU]UPh ԯPžFZUU*%9'"c K}Y~[ rw?gl3^A3 cs'ѤLRĸi o")mȦvIxdBe78㬱2ٗe5&YAmG/9 )ݻcFL=)G%$j?Yo ;ۦە~_l> ^ԕKSw5;r%+$4$$g\Ӕ5D[ 8)q;MO..FV|Ҫ2 |WyY:yd~v2L?lr&JӇI.3m >??4 *ةQ3@ejO=L(sr콛yw_ڹO®sә5=.sKٽ0 Į}g#\O7h&W+:NH>pw*W?ƞXQyib~?хuN iMzm!/[æƛ:bZ'ii|;<8?1Z޳h>翧f\KZUUeP;>a\%&=|qa;X}xw'kۻ10?Ϲ gX*'f:^[Tdםe=, wBg[,SNmɼgj*siӅOg;{?Má4,q_uGB,KMf>oCe =Ŧ\S40Պ><s4ԻOWu–qvHJS?k;-5tlmt^}u2uBKPgS)&؛6Wp 9=E0 L`:h?8g}j^z!jk 9ӆʢ-B/@NC l$0)uwk|r< ieH3Ӥ9K"ƈTKn XUyݬ\̱H?a iӗ'=\/4;ECҼwv1IB0Jq?Þv~;*t/{i?N'€]3Xt.%9L̐EV>ɢ́Bp/_|ox 8}{X6,Ҕ0-c>-IA0-8 tB)4*<& =M]3C07rGln]?js}osc//{GA#;=OQP|N5ІBĝ~ǔ&wa:&o]Js<}r t (eTU}!$F1tFBZ&)_(5={R>]{;_~㻽_yѧg`tVPU˸4L,LG}oK|霿aU?7C:|[y ^ if!GF7Z XrLU/t~dz} ?K?<7:WsR%0JBD^*'D΢#+3F=9,}u~9;}s|<>;Ƹ m_A?`6Tf+۬!٦Nծ'~KWg1}L7|j[oW7Koj(_&cjFXEcOf1{~~=]nN>nܑkGհD81Ӝ稣磵1_#![~wT>PZ`sgC:rM26Kg*~1ibe&[;|wO:gf"i[|y7a8Ie+,P}62{rp= 3Og{uxgؙ] y tq,ih_2SO68/L@f9h@_NXN(<8o?&cXt})8`K_BW0SDz/2FvYqf}<0c 8\w 7Sў~5nȢb茨 C"( č5;snc.sf[ţy I:g\+"D҉sˏ$_G,هK&}\Pg@/ &ک;qίf);s,`ÍϲVM'j?:iT5lǒoл.TIrG Ae@K;PяT@iZy~" ~2 0 mXV(B~2'cZOggSm\ Kmsb^doHOUwt>l^DKȏtQ+٣-җ؛H}oqvXf U,k_ׅwpš=` /?p芡RKw k`kXh*90Zyrl3,'@ٗSsL&S; M϶@}BX4X2Ѝ =Hw]CuGS@A'TfTp4VZ ha @ίށy3OOr7zW~_a/$h pjo 1OסS*:S>؁s؃_ɜL gؓov)T2ELs8Q@E  RQs nn50ς(*b>(d>>,^uKG[1[80·T:g[u~}+4d)n~mxv1 7UC\-,k(aYY{:2+!m[LԽF\{G(iP_G_W &tBu3f73r S֘/еW~/,7((41zN<$QP8ۯ5>479<8}y m95Ԇ~bj5~9 6c6 w.XaQ//-TN ;;o--DwE@Yw @H.gPQ ; oaP(G~+A60~Ok}_ob\Ofk_5 Y-p5hq7܀c58 -ʜ-yZ`Ѹ+P@wAَBfo&۰Un e6(#WOZ<0߻3M@:"n1/6쿸U hN/!Q3#2pc,_ ⽁b+$zP'Ns8TGx (f`~7r?Чr[6Dh JUW']蘴_vx`_((m¸l>9.u!J:lݤ |],_h۞ӟW /L['& VxN?:~q<Qz2称s \v@]LJ߶W  a6@S[ `7[o9 7EgY 6ƫ)jYd^|<е ,R~cG)h]<"D1ٶ^{dʾד'KV˅OqPqnk-7//H3m8aS36Vֳb~kz1:r$k8f on[ +RZ m29G8.֗ -Pϟx.W h/lr5OWhdO7*>jhOQuJ ُ=ϗ،N @kb>$t >e&T `yt$xKQa,.O؁a\! pV13\C IֆXW1.>l̋)JSmm$/|!tգO1#kobUC`ӣ77+JJHO5~_,;X}=7+MOfcW&;{\<~Kn H&A#KDmdw1߈e-~ Ge sݲ'u:mJo@rMsLC`p9@aWo0{'xvw![FDB, 'c> z!;XO1i&jS @m E˙r&QZv4~{>p骪`YhOe`K_[>^o?|B(Ǫr+.w܍Bemз(@Ri+N_*Tw]&1?@ӑi_dO swDp<9HC*‹ţ- 7=^.xԭo[@ nwKK p{_ " _Z>! ϴ7da8b2LR)  !jD0|+L7zV{nj(djXf\,t1ru\hms.- Qm (x  bi\)}],&ӽ/s3yyWj/}~`\qj3S>l|Qf)&\U,:B$ϟf/̶ u?Q.q#~\k,%WM %"VO rыz5XG)%Pxw^b ~V1S<Ka  SFdLlҟriPKӚ]~}:_^e;L|yL/~:|D֪ҎwE=+ ?@Rd(&Utg 袀2\|f{/Dqn1*8iS~u =dfn MB} (bIwkfށjgT6T\JBYb0A0uƗn"~B`fy, dmPڥq ֡`n~a7gǑ/hpZH sS&f"ȣ&|ies7|.^@27b}z5N0g 2AR}ke=uwCy1~y ?g^|NUZR?;-aоx[CM PqV>>ѷ8AWDy<:IwT@́@xP^t4?QZq,7 k|S7'O#{ddU֯ۧ-YvϘǩ;T#S_&ev5^oGU)@>9O«yl}  8=H>pQ^OLѺ( foI64 Բ=L6 ͏ elӏ`cGyH῿6^&r'0w8<,4(Fc50N슥j\gV0n8_>* ʨ&L^^mg;P6>?rr%깃Oͅv-hܕL PAA7HEWcSl*2bBprsS|nDI4wˑY:gj|}(xwt+SG}H4mEuww6}aEr +|͆>OggSm\ u$YOGWA1;;;?9 ' rM@vz d\ѻNx8C0@OYiñoS |z;kvwOgd.Ͽxz֗3LOrPr* x@. Ld^e\+ӅUxm[ێ7dA@ ie? =OftJA'v ΍ҿn{#gReϾsV l 8yA}̃] ߞ4؊r +`Ù޿pޢSS̩ 9$Gےs*m*O#O@.pxDd@7݂ Z;:sXdCf3s>'@x :xㄢ<( -f _ۀ,ZN8x pXC7{m?m~$ls.@Vmwk4U WZ~z=!bY&(c7UKe[?8aVX'_= 0m>,w`?WE*4s!' sc)祭 羚{n5q)!??ٕ4̒X0=@9z tޕ v am秓pvb=_O W<س Z g}fL]9 @Ou!eIyt{ i2mܙT^Ubq׃d@Q*(ax#@; >˄QKL4۸@EaoJ_s>#tB/X-go߼Pq(6"} 9tgcSian5fNQǥtJ_)-WUW7o0weŌ`/7~rmR%]nO do?2PϓhOyl<|P7@#|ES J< saNN31".!j>}gCD &LR` $لqrViu]Yn[vVCU yU&Ͷd0ҩR\g|3j %;<~v5I;>&L=NԮeʤt>;^Glѯ/T'a(.*ˆ0 {M$p`Pٝd>wUb h~duCa~?N}){IC& \i(\DtXzpQ3dJ46 ;44r69ЖҦetTx5P?gf^gfkN8/-z9IDn!>'sb=;X+}1IPzd` 1lԾQP6i&;zw^vvӃ`Ώ>EED豿%"ޝ$QלioozhUI "N6GX 䕙җR,ݙ93(.h 7l'S䢁mSTUcs`F AjIkUvk";@h @| lf4 6. gkNiA+%jw]O螚fe&tbjS噗Ys[WЫ?rZ7~_]RPpfAp R zSs#g0e;+:pMs5:d?d&ǩ16> |ZÈl3i(>0g2HPr7]Ƴ@9ʷµZcBiu! lFCIiH}Q C1@ :ãu,&?o~'Γt,^q%]q-`#ܘ7+HL^&׾5/u}2WDY#.~{"flsz߶x\6DV4zsm e ~_Bܛ7˷b78y^O"<`z?m7!|7)R~5VVũL[YĭpvN~ͅt4Oy|>὾nFBqIvM/ZhN1 GZqz~U ݳ1W)Uw=Q¯L7T#/ 0L/,:#!o)~`Ļ8_~~';f|diTfta^aO/,{lRV`0j~2H)1@mGNi-֛fY|˯ϯ>?'dnӧ"bI$Rf*39ES|:dySPj[E0t6N_%C M#E1躪 W"6)3^MwkS95yj5 ;XKu1z1ق|5o\H҈u5"*i P=0[=_ݧ*x;*&gצ(^yǿ>ħ E _T"5 3ܛO@s<x|^Xrfmo0oC3v9sHOm; m$[ϼiJ`M*@z/@sZt e-sV˃jjw>]se?빟7PX͖?=&*uHt:E+؜ ֒c5,[1]al!Adɯ:uH=$d_%ُ`*(4kQ X4i=3x?5aYt*z8aSR?zkzzA|dF0#--*Y&vR6 eԠ5ci jAO 7f#4=!&a F\nn(.Na "VBbwbŖ\`i>kwwߍu—7ۜ`nxUP =-#܅7)?kF.X©$Umh댽3Fٲvau4+tSSܚChgQ_cH{go9=o[h˺d_#_|镔27.pÙo!+eJ.n$R׊[M:P/=NvOggS@m\ ؈'}845;BO=:>:>ITSIPAo攪76OD~fgaOG.WhZCD-|q2>4¦1_Gx.sh,4kt6G|0$t. ;[N` Y70(DHL/d&Y}7UݬR}.rlquW)1ǙW&]d}ŰIO"r+dD[iLny7kjpRq=|fWV79X^'fo#:JX|Trd cM75=~ꈬ=Q9=4}WW뺳۹YU@aW.9mJVM@ӐOeu'ڛ/Eeur4{wJƛ u|^t2uDw=$>bϐR],`ꇣpbҁ=NzMuMSLN:_Cyw#amasަXCߚl pe=͝$teQWAux 6 W7q&rKIV5gԦjaa*n:Ve[W1b4i }!0~x Nz\OF;Fm޵tytLnpފƋ޽uj bbtuv>j| CLΐ| ~3룳{ݥ~<~sf&dU?s2].A-j:9>s]$H醡XdS4Um8= Cù}r.)DY-UʬJMѺlP ր5OQܐ'0pK5Ϭȼ&3iлVg܌OYWFWaxb@تrIFZcTbS3yl=.1sl˽TjtMؿ~dgkӈ~_M twwRIٛD=僚Yq$B 3ԟIpMW e7^8k`z#j:*kdcL*ܧ`hr_J0?d8-RVl,)ӇeXId2yh~˛^y䏒1o}(rTK`hܟ! tLMkhgR`qg޴dMxfh2~\_%ZZA -VUyf6ubɜrH/;OCF!8k\Ua䮏ׁ 쿿 h؍^OXOs0xo=P$ŧ`W)INȣhBkG톘`U5v'p=g&RAD.x>L2~*Z )& ,wkؾ+mG#R[Ygz]-L"Ϩ;Md◖߈,$,+it:@GbF-Yh'`KrN[Vo߯R犧j7¦p0~| Gb5]C%rқ$Y8.,wXAp99u].a  1U]L_cn 0s(X}%ȷoL_lJ6XƧC&j< $ QCX 9\zT [Xu1>oYw_էnjkr׎Tjc0ӅX 5mֲֳ|JZ?oW'@]on`z5bQN[%&αIG7__zV*'o~O d $:p4r|WNht%9:Id׷(Fc=DuIIw+x^\:6^;ӹqsk8zSUuN}o?l:f5(9>o;}bi-.л_ޯX/ 3?_/Y]lN8<7/ab_MPAEekkbyĒApLze%D5~620>_q%}Sk y.'M[r州n90.Ċ,5a@_G>H 6JH~g{`S%a:QѯU%zfP̂WX/춞nd.kgw!~:f2%Bno슡  Fr^F6177I1]xp]&Ikz;"xbz)ة)5KZae09?vlkt"ɗ08y,쿾wApUș-zt2֐hbIds\ ZOsS!^ǞY]!l/5\Z&|z`-Lt>úaIn8wRw^1!A+6  䢩ifjwS'y6ˋ ~oT~sөJ^q0| ;0{ o7x-Sr$ofqgGM㠒ݟȿ| ܿ/"_ bZzƼKC1l;nJ/0t K+t8AE1;l|1o,wwHo]wc\6~0ljv[ttKTz:LjXu&-u2utLiinY}~SO4IW4Ig3$0Ѣߢld3*o+2+{ ڕ#ٚ%$[cJ0`˼eTWE ~t)ìe2DYFxYݨ@ƂBjُc t#r&֓{W܊iɐG]Uݮ|t~ qPm= 2X߲Mu,Mt .Gyn}]\y~V74EpG~;5k?}$u+9{& D~j?E"T{.7kb_p8_8OggS@m\u.mbNFE4:MNJM>J?O[)9 $9,qfQyKOxRGgsUoTJ{ o 2U3 <^?&'A`N7KV6?q"Qh; MSGk , BAwrb3`!nm[wF7inhs/=M˭6s͑xyQهG& -ͧ>x2~qOz.-OU9M{Tj=;c^75 rև u|Q'7_E'C>c`t`0ĒC4(>]h k.NQY3 *(ƮAQQ@VJȲ0`FɆ0w2{ V<0VÑxei(v}5sgˆ{Ye9nT 8'+@j'-_o3-$9;^ _Ҋ @,M-mxre|P\ P?iQBܖiS\Dˎ%Sd5] x#W P_uYGd}SLY;$?z6 >7Yg L:& ЂŲ'ٮ1PYEf Pţ(@_㿋" %SQ1[ ZVvZ(9.,ֲuK$OD%P> F7p=~3ώTo)^`?6c_.d~p "ґxmFmB D.?zt @\᝙ om0pL^ @:WܐS..>a b2 V@+0 ͉?߳/w(8M+`{OP?qʺcpؿe0ů^"p* "/f@M^)Y,]6Lo@x¿7? ܪ^ 4Xc`8Sp P &m8WеY0_$_!ɞnl9(?ڒ83% 4k7QL}a3 WُJɓpMH^氻_Ge>\ZygO{N3W`|N֮!p>'PC梦p fb^~w*h_>Oc-@'W5tklF9D48hjg@o!׷9x'~I" ]@_Q8oŜ]h 蕦)GB>N#eZC_7{9~nvUCl-{"Xi7oSbdq⼏zg퍂?L}88sv N99! ?sI sWyu@U Bis@:kb)aa>:]n.5~5C\>m!'%-@x̫v1>2 5#*i9Q3(i:4%#r.a@2 ձୀ>v ^z5Tg =QUNlv Xrg6' G͔O[Q@2pKz6] ڳ Ms](elr?E3dDbGz:Jt~cǾtQF 磉D8=>10oԁL}|~/@MՓ3w}/m hzA2oi|_+h%s]VGܝ:9't t콽SP 5/$-1:=> U) jf p]91 u=SO>ȭǗ4ѼȽ)58I-\XT+ Ƹܿm#áfPZs.@>@Js:]((m|+cRМ8,Pu-4<r~Y74oCp ?}Ww p7'KZX]ݔL{uLjsYycz-;6pQ570pقM8'sN5GJHU?ܕ$k=k2VN?oK4&KLD֔4JT,+6pBB 5:Z ]KG@Aba$MS;,Xc $FElv~ڕNvN>spX~=ZNSpip^\kTGhtq/'+|G;*xž @(}fL꭯:zSuphVZԒz=#48td{'kO0oJv6<0wѳǝj|9_=ݾ2deO U3Qd[R&[nP}YٶQiuu(Ǫx >=)JZfFbCH`fyNbbdbӜ? cyoꤖ)0k>*[*d#mT%O{= s3&q jF1MPc;9S΋Lu}@9zЗǧ;%jw{ *y03#q`k d/Pd>oxdТ *cP;by_Ws5~ʨdö: Ysב-pM%>lc %Lh䨐)/CΥR:?g׈Wgc|vilՇO 1̭ḉ'|]`(~ 0 '?_HT ,Mr!H~0o x{x|ݩ܄%m0yjκ]= aR3-i4ij5FoQ{+޺У;ȯˬc2UTioX 6tx! Ҫ2Bm.Xp=Ly) ܑ̎{:jxaaI F>@(g2>xr;׶ W˼sQ6Ht1M)NSyG f*qn1;0p,Xq>2S[L=fg⫡y ӰHu|95uA.w]OggSGm\Mr !XKECN97=HOUpDXQRBULVMhT?;]5KLd-rgpIjSUh&@qcXIh q ֚, _Aҍ inX@ivG)٣2" AWEHX: s 68hczk9_bN FOfvٺp?"?/L+9)f1wp`8^mw91)s6Zp`lͻGH֮{u?{Ӂ5:V࿦K3/XYU%@#<;3dU{R=M~ǔnx ߘ![u|:V8sCmY!;QP297Qo>%x'nu\f8.,YK8 m 39Y}3oi߈( W!7-Kc %h~ 1_0C@2B4Jv]CRzuzӞtzW--jTv+F-C~] Pp{nhmVK;6@S`ah干?:kOh%hi]d w5^hܑ>M&\x;t4շ2AGr&]opQ&Ar `>yZ_ dxs'/8nV@-ɘoDv^G&=ȃ\\9 adhdѺ0;]RH]fٝC?{PPݫgn8 /Y2*.ȑ+ YLߨu"Ɍp`=#FJm/+>{bLÊFxG,?bYZRUw@)|s^۞r_/m!`Pżt]ںܽlI>nnHW6j"v*\*oA\o`n>i'ٮ*` 6ց#U纻ca}80u ffj8@u,ۥ+k{bC*3UwQfz^$asDF=nQn3fu$EJ5@`1r颻u3t9z&M\B׀E֎ 7J WL_ʹxy3$?ui{vpp8K3 `XFBA|NB;Ww<ꚕ3ChoѺZgIK[1Q}F:S7>5->(ZOUOl-R%$?>v1WT?^=OߧKˤt/c Q=-c_pR8Ej""XuxǎZtQUUU8]3{;;oDg[M<&z.~yKOOgNh/w6-3Y{loRuW2̸gf94LS峩wߞcrTAN]Eӭw2Ң=4}N?܀rOy3ޯLog]]ff2~eOǼ3۝{~5٨m&F-:Ch0Y"[V*#sYʌ)S$WV;XQ }Z80`@V FTm"n(({WxdPf~>Cw0+J6'?=tE<+z훘@_|S,1F27 b~ p~*q3(}\y ȨMso}<_ ؄[o@sMFm{B5p֠vŗ6,=)״Hun}]ci?PefDEL*/_0nL %f~ 65R[ (6|VGf'E*̷ AfxyBym;Z:g~?}=oT;_-ϽW9ҳ7@Gjf @P3k8`ض1RmٶVIRj:`K}3c@'?n ߽]:NvJ-u<4E"1>;K)LWxw:w8. +~bM0vJ䳻]-O/gP<[]d ʄU":bkk/׳eL?gbD~ߦ4]LeOg*;9b*Xn[uemgazAN Z(gF3AL_Է=GAZL#Z뫃4FYhcɵ*طe4:rt* 1*b -7/iZ~ÁӸ+`R(!o|JPˇ";/|k> ȷzڿn䍷\&9C&0￟|v9vz;`1c$_8ym|*c(@T~P?` XێK^ȋIr vw`LͽȵͿjcOH]Qw < yFFEa@Ն1n5NI#9۟ovr\Mb󞐺 uPk08xTuo@׉ $O__W G:</UcjjYWy{^o~B{y )yzzgptWHz+LG3F/ `_ q( `$ ٸ ț "Z;Pmx2_}F\:! +%&@[03agGz16<(񕛳Vxkqv783Haıq&ߣEA?r0GaCՃv= Pf(@jr0_@͆i1)ҟzםP}}y;ma:]gL~f'9H,<^cf#e~4 hu@VӂOggS@xm\5T5b6MQ1мdaW˱T*i:* b33$Ͽ}Xl(th($?qFzPhJ'YWN3ϗjg gXS< vE4dd95P?98.9gȧCvdb~ 4]|H{{(Lng+= ł#fKMW:)g.r̚ff_?ۓɨQ6 V2hƉC /` #"@n7]ͣpF2Id`NEreKRZo=S=_CVW8-ɶ,ki]ρCxNOoBE_JM@TSZr5Eur9.rWRPkPPYz1יp_:T8驩9y̜o8= Mm8_6$pXY5!׵ 0Ӱ@3p0w!'@|D;~Y/ܯOTF@>EȽ^~_: ?lv?m۪zm (>+.݃/i @%:6by@Te3XOz@jfQ4wYPxBZ%o=Ԁg{ue;=nߞv~JZG{sDd+_v9*L|h?O&kUc]v3+r(E417lC/u3w%uoj_n;p>%-Xbor!ķ% Tj{6ADߧ{/3=aώŽm9.Z#>8v^YnqꞄMHʦ~Ukgp)~]~]05z^NɺUjbR}ה)jn  f1A)GN)LA-Pj&1-ݐsx_deѽV`l_Ko) nɵ'ʨ\p?ȶLZqA1LQzv"b ;kUjS/_{g{-S[mamx?q?]v+c8k>T%ݵ/4 ݭɜR]ԌO윮 rI| I2`:396E%Ϸ)49ɤo0v0՞>UdWar:Ư]tD+{2-Њ~x6VL%6ۀP.T TVwQS2^! O6P>Ӽ8^5 >Hb7VԽ[#Ͷ ]2GH;*W஺/ScYngq$A3{󛏾xtlQ_==׽K)<辶)b~K~g{ʿ哬d 8Sbϧټ#sC/@Xmsύxm?F/cɋstO֚ .o0}T0PY#YF8 9Ҁ8`Iym; ~,:#D1s4~-9U*S'?Z40cVcTKSPciCs\}ٍl)LB4oŧ,{?R|Ø^aOӸ~g5Cr|:{#A0=ϋRZ-d]y\ٶMgwE^u)|̚w=,i?@ܙL*ӑ>4sW2qXT:>Ϛ:4p79|yF2R( =#%[r;'|tu@LXeL -hv {@]oP㼷)萘T>K?hT߳4-ᦴkUj$UcTe\F+Eھ3iށсmehBSKlh[~p?XO&zhBup_8x)QIg{uh%Ψh͢cWul`wYN_}z0?}O;Iv]c]@70040OjD@oz+.f^_-Cn&)2޾Ogmݞ|z 90.BpUY Bjefb0&c\M /`T^8-lFUH*0G敗{y+-~b5*&f.kWCs  dnUOo_k t ޯ;NXmd Ù7"Qɚ£Uc1 M `'@ 9z{J$͊$HQLbCDmqV8kYUe Ye˼_mܻ<>Mxnz*Mwmug_l:Mm騮.F|S2''d6E~+fr5пjWw>r1=s<ھwe:Mt֎3̂[顆i rx]]i!k!nꭧ >UznYNYFz}Δ{(ſւmܒ2:~މ"<絭Jw욂Zٶ JGUvS/.]J[|ؼ ZrBBa|]dүNKe! 򳪹CRT^:6<0Iw_Q¿Ŕ N܏7l)Rbrg8 QpZ}lt16vF|9k9>YЧ JVU@]sl1O%f]uCYƣECt^ol>~ƴ>{)" Ǚ7PzUPMb)&Ou&S#m;}`;sn]GdV.|!W|]sΜٓ1p' C l *RV]lٹgbK}W7i4sgcԝe٪4NLtgzlrwtaB7ˆ1zrHe5ZkC- G{l5k+TUUߧ^aٻ[rr\v hJ-6ceڟ be?>!`mVu|aݝICY%\ɫ]$stҝ8`~Vxf|S sr=ZS_?O Ԧ~F]˥Dcr9RGj|תּ.:s7iG=lz~d{Kez2'cRM7-py+5e5U5- X&lxaQ[NS\N{d #P 秝> $" ʔ8)sV;c1f)P;KsO[T~;C!*ӳ5&1DQ(4Txm=&2 :_ 3bGԮu/T&dn%6WxngoͲ+̃]>_E/\+/_3M^^v]11OFC(HJ@CRM%5oO8?/V}`|=ͼ|Иƽ8Ҙ}o_xzW(gף*]xZ=ݥn(t{?j!8h-nb<^Uٮk'0H 6V1H P8Rbݪp;!/\{om/TVۇj)7N(-1jk "|8pVHW|ZAgY^P3\m ̿tzfSC?`J@`7y#޿Od}\ܯ9ljMh$) mB^=G |%ukl1p{|,7^q=뿮n~B%&RuCQ#)ب&;€[" UM0}-zkz{w嫞6<=%n0=:y70Qnѡەv@:􋋥dȌ6*@'W &Jsvfx^ z/-,znp c1EoZ%I,>ez1s$waEr97w'bFEDN ; s;g{j.m[1xdV)Ni?J.6^ъgm`#[h[^l*!$h3e%J-|@>߻977}Gj k #?A_yTO0ɕZ迨%`jB?~/xrx7 {ڨ t42<}jN?f ]>yϱǞ[o^vԮ}} L 4ǯ_7T0U $Y,Q WH4 n'YyɓEE9MpR%wޓM,/CO$]s}E_6χ~_a=tZ2v.`oGR{qRCgn)@݆tyf;>BpI\?Bj[YV% ,R/=4c>sޞip7Ϣk~r@jc Ej}\gk4kxNhS\)w Eg0t֮NN_6ǀsvQ@g< Lg6G\3SY9 ˤziq!E;f˪Vox4?[:N2];4bRā?"i^,)v1wӧǀodIxȸ9G}v) ZltҚws.hב4F?&T0{LDMwkaQ&̻ϲkοABn׮i<JŹaW?8jv?E3lT +ocv3ϯ3ѯ?@fg_yXׄe}<=y1ɨ+Īk 8Ls6rfC==ᦧ1w6f>M!rה:Um)Er/jZqՓHƄ(؟oAS6^vjco6f]TjW`E!` I=k\I s~ /mdll#U)D c=pTUP9JҪ*SG])9dUǖ\QG[mFV2_u1I&4}N-6:2ڪ5iJIN-ؓ= UfrHzy)suR9_13@E^?ws9gbNNQtλ8?l/ݹw]+uL'_̻z׀m@z!Z _G](2R+%fK ?5=j DNn Z cޣ71ڲѫʆUU`Kաbs|@@[^Th#Sp)vkkXwLڗT ܿ͑9,9JLwUT˻Ie_ ;xD7TO:_,S~_]sUW]l\Gd[g5 4\-:>zF1캙swy:y5zfż_6|yp ~ȺCB5 |uC33>}JըutpDRM}5p}\ӂ5卢V l[lz+5|qByITPQ#5B k}vdM,[UTHޞNa;\fOaXa\ &ɼkE";^_| Z8 7ZV_8ݳ#GE=4R:1WܯZ|nXTvg7=9y3"'_j}jON5=u^2T'+w>5=0rgmo9<Ps~ O48PoOVB$bĝBP_~4 [x@b6o߇߄Dîoxa/i-4* *O~z.K*kθEP*-JodZ 4}C)}u vk`n14.!}^T?CcϦmB<3 ήw׍s)h;s䶼tm(K zAiQ)(|t||<7?Qf. ;庱::rs1tmŹ\wxje 맻@׉Nӱ "0%ks7~cKM/}抹z6I~wZ `Q~,ECcm\Ϯb)ӎ3k웧z>h/5ĝy}*y6T. FAja#`VMTZLMu+.V^f-b#CxZc;~x z}gu{aLrɅ;؏)U@5Fr[[HxnCew~=;?{px9Xt 2>>T-J+?^銯K{K>﬍OF>ѧS12'G_g  T=6dx*njvʆ&4\OaTtQ/xM}, Nӄ 7lZx<7Wウv2L$tH=ycc?:U51ϟΚw^Ͻ_iovcsrr7z`^y`50Y(zTmщeo(Jо?3z?ukvs+x)^> >ƣ~cFRBؿ)l )S5@,,'J';q=|+#`'f>;wNP^Q5B!3yO[[:;䳁vVpsx.Ú~{R0J7+VS۫ jͅn/łƻFv 4Q[փijn4>H؏cy*w Ͷ&^YP_>Rh}@JG,}tq跇'BAΝlOggSm\R\fOD9<8=8NKSRD:OG.31I:h~,KUWu/| !Jz+*~NCwdwbgf7R]dc63'L0Rq pSEPksvW8 %b-5,0˟nd }|^˖s.d?ӭ3 @z_}神G~\+335m ^oS6&V@7~'il~?@FS$pzc<s<_Inߨ| hjF|iD8_˒Ïv2O,ߡ{kOk @V-tA2Ȩk|j&GnTIbOP,^6r1=F iԆme1s+f/@ =qIo hnПS4~{͛҈c_~_1f: @}+>*+L2s뚚>WثW܆m’{bċXCK/I]Tӹ\6Zs}wAA<z1X̶ 1. ˠu|::_ o-,.[p*}6d;?a;H}c ~6=.!_­dYK1>G7ΐk"Kc~y.\ cS~e `_ X^m-0MJG%bK1v`;xt_6-7q!BWN7fOBۊ?6>W$TDs_9 2F(M wv zw]QQ,}Q qOi47ìTϞ:rv OzIߙCC{3ywjKawwM0Y?aH=NDm-/M26bu&ڤ2$`UNqq@ī p;m>;lȖe"H| 96ֵQ|#f;V*ϭS~>y˞lyT1;зa8 Kbɭ=sN!tomS٬?s^]KJ$L<D8#>%uRԾt8'k7I7H$Jw5R0Sn{?Bb̷Y_QRY}r$a==+X{wYΗnlΌN$`}Bӟ5 CDoY=2K".НUK#1%@o~ NphJ~LrH|~#\։ѐḅUL\}Scw*/\ڨ6rG@~0H[y3sj-S8sH o("ʗmq(C6G>7>SUFF bm1kQj:q(?)e6OxP qͧ{3!kJ_Aw,KxHȾO*J>Kf>giOi7h0+IVe]3vMVv)< Xq7&'%MI\ ?İ[/|3 >e^̌ʕ%݃$a'q\P0i]hNbzQ48MQdSUAܳiD_Ű͝S$"#KD[+<)k( _iojݴ5 Q>Zrm,ت+,,vyrjޙJ]Ӹ9#;3d- `t g2 5h/^FtNZIjɢp/~|p{୙:-UUe@$cMٻxe+H|Z{@}ݦ1Wv !7~/񡌜-MK\%&+:|S0o7q;3Y O>OGܬ [N:N_u%+oqB%9շ#gt]_llf?<;]:0yi΢40d`R'ă^JE<%X;Cm: @ywA)r-2]4iU&+)5sF3Hqj%?>˶G*ђyx&tu5m7Ggҳ Jr'nw#_Y(ڈg'<ԑ.fqցCg;<:Ig_j $ / {S+KR, }ňoQ?[4}JMhZn>aCVs*BN8kgԑ%qċ{teށIy+ `zf#i01zi]>Q.Zܽy!B?!2oȋ\FUS1 HF7TZ-ߝ$>YM|Su64fODlsjTs @q]V}%T{P).e\y pzád;PtO4jK<{P<0Yd)M7<^hWuY<ˁ| /3Df 5tQώOoG)fo7;){h$Gh-pLr]Rϩ0^aaLT5S^:9}p:}~ tA?O=E+ay;9? se S\E]O,9_T<,/'GfpN#إCLA\1$tòqp@T08~Yi)?*LG1fF=z+8VASUUY+di>%=J0.X/.^5rw,^/OpmEb%n gLO?7'C @~0٭;XMb_])1% |iw|lE!ú7~^AҜ3/:xҝۻ2_34IqT趿fzfGAaHIIW N7jr6N?Tsߕ͘=z Jrd&S_-đOtg`$U_B&gwbę rfXuԴ ?" 2X8/Bj,1o0+VdE G|;En'{LF <$34/_af:]g؋8˨-[&Q>xA\*y´_85ߣ(R, FA3y@$??3ʟ|:%'xezYN`SL{qv>/>D"=J&xF|(ygA>-t2q-ϣ+cw^VaǠ}=w:Ϗ-S=^O}3֛o I:t*iju* sE)|o/гYv?Xr[ z6A%!ck|^%LX V߽3^9Kк[Mt?3fg-;Բ/YfN*J{X3_mU2'go<}x_@lڤ"~RzI|<ڎs%KA}B4zr:욞_~X2OճjO߂J!Z $ kkRvԷ}fxgk>cr+XY[^8r3% + X'&r&l@"X\kWr}EQSZqNfl~jӴp!Iy fk|ފS?h'A7 [Uϲ*o䛱FR#tc]m-.7h{o/gJfޚ|c_B|Y"@j3 J }Jc 8ٚ-RSf3;n)/=cRܟ{`"ދ/ySj}1n?!/"~_LVNEHN) :zJgƲ x71)K?6Xȸx3oaSKDӣPfi+ 3gC#`tf .z}{,ރ7K'A9;~Gٰ0lѯ\/L-nK(1_@n*j 4;p[ɑ/A4ņ)5k r7S9]{soS^*vk7}?/u/^}vfhWGnfk ]:]0eʬ⨀Qyo V} 2򳿮9h> gYr'$Fݼ6~?" pL[-"*mms\.쭦X>e@~|?=2SuMi|vya?hJ:p hF-SIaUvs`hrͼT+~_vN5qo=93;ɝ<||*]/V5{6/?|>uLmj瞸hv5ətN |}p.^O 5(^Kh^_9Yސ%'uO E}t_0<]a}φ~C;Wy ֞nQ m>I[x)a2 xv\h0 0~ˁ 9B(**>D+?,Fwis @UU`V`tTiZQ[Yq6:]ޞنJ+~T,y.c~5S=וY+=gCvWsxv%#`^꿏k>ЪVyJj@3Gq7Ekgz<웧j& G;'/4f+KOksj9!1rY9:snhRz Zv[d?q:߫CA{E]Ի8*8, \N~Eh,e9ݛP}MW5>K GUUAeXb9Ͱm}_* !P,6Eq]T۰O}՟~jn4IyrjTU47dmΧT@}z"{v0G=;= ||/'lKdTXUD/ԧ51`)-MR7J"/g<8;3mX=z( 8iRpޕxқ) S< Xs M0U:W9QveL'I,~ ׯݥϫڕp>j8jMsݻ2I§:VSg +wCV2ӽz<TBB%P$L[0^i0@.\]MsҪ?Xp/Lz8MrnmdLkwP^&L9CHn4f4j'UGܑ3WUUe FjOo^|:#*}D4D\6W/*'}ofmm@g8EŲ\?wH&;| ni{; 1@VrAg<ð~t,CN_]l 5y$ sfxzNTnfpަ;k&P$.;3Vo;-^@ne"yq{~}Kn'\LksEq ꡹@-i1pNwV$dW 5H!H *v /T*A6UU$xiҋķOx{6u!#]-Z}|Αĥئz}]3٭3 6Eճ~twkWU}1ie[twoӭs:5 Ifޓ%TU13{u>Ҍ_sFDԩbo=f4w'%uk9PUt9{IuT3HƀVv]cA^o7nF=PZ]hZQJ0T#^p9)>TP͞19Ș@ķ]>R UU"LZ,/Wn5oS񥗢mٱ^f3ϸ ?~KsH=T_;Nqg'j'1&p;z&(Hn}^fkE]&?\;p &+8ԫmF/ПUkpƂ!+)zT VyJA W+!YIDuqlU>/{Z*ѱh+uOggSYm\@Xy%;9M@i?#UHG)'}J;9CcW-U^|nG?@5P0[@_&WuY_̓|IƷ/}$e* “br>٨1qKоW?5ݗxVS}ǡϛ ;oG%lUtiTibzM<|0yQÂ*;S^8v)ҶWͤ"<0D 1s}?(]nY&=4&@QA :gZwyw%ֻړ,:{gf/87>2TbTuHj()ŬÇk5C hL/}O"?/_?Itk쯟yNg6\*=Q}!x)+,CKV;ޝ_Rq%MKoN}nf?}&/{FϑCdYO+V?o* S>TJӌA?J6  qc,c*ݱXʾkt#aӎY^BKmyᘗ81}?iP/E 4 3Ms,FW'(yPt2jeQMBti\ͥX&>-yQorh}Fk y ~9ߎڇk? ߜ<7rEOn1|:`mHJGSە娐2f*tyf#lm ^ #n.̴wF,8Ga9o9!ݣצa~ {b)]#XtH 8 Wn<YBjX 8_YUBcњ!+w]7ݴEFMQ~OPr^ƽ @;_op=`!ʪlq=x nCWŦ AINNK{sP5YN;׌Fu'lVqvtPkxRZEv/g4>А L_~x+KP}6QS0Z{WΙg 8W2RE$E! o.$;ٖ8}kaچ+~+Q{ٱ_Q./:hUݰ;(#[Ϲ-FqiUĻl(Z[,{]893LνƸA?4wt} rM=|# esxk@n@-t^iGszd=٫ؿף:ϓδ /wyysP>3+O7 ƂX?N/sQ`+9 ]l 0c\'99 /9X<$d Ԛ0 'iSht]Ы9c1rHO-gwB \ߙv|MoLݬ+18ﺽ4䞸[a},(!~s(>9Q7a;Lo^hDK5G=Ej҃e9>~.׳:ZE࠵(7_{U@Aypl==pC>KU&zs5#oVƏH z) ^;NB Ző[0\f(G幃e:H58k<9*9m̖t!O<ӮNxم`;^t_,eZ \KFa97\90pޗ7R5E|=QP];O53CSg%F$Gn_u}svts[!| cW'_ YRV<bHp 7:PO{ahhg:;nCe0UhOON>/ CؠujߗexNT 8o'qZAI/&=3w\sc}Tq.G6ur88}&۞@uI38.euHbܪ 29`yԵ s_EwP+ Pj-Û 2/$#z-w R~`<U+.vs+NCgk9Vt+(V6T2XU0}yu붂~<,۶i(r2a3'^ ;6@~JMک)^_}#9E_nuuY"EQIקυwr p;;@n}'8GYdds${wΦܷf]8/ȍrL5u:h0u/!Tr{XlOEݏޮg֏ԃ]ͮ, ^v넄Z*8RjʩWՏ oDZlª ѳGު&x3~_/A J|/\#nS&>Ѱp@WϦbC/&Nz 0}'|z:Ir!7* ^Ux}D[>i(aSq&T5^\=t%$U!JB<>ޖ̢v0|L%D` {ڶv9Q\ՈꅚY~Y*]^( 9"<f~ حѝѮ'?W207V_F OR[*s+PU~M,Hv{#jB!b Wl߆`ձx(42PGO1 ]xU ֫5uSw_l^ks+}['PZ턿2Ol; ܂̂ QI)_^DU(ݜFaҟd =;x?S:?yʉ5>wXyIgnv9׶0Jm1g9ϓ?I):f κvm[ŝ nn_V|([[}>sq{ֵXga ;\VZUT2Bspa}nYs+ykA^W]NG^4G܍V Zhs!LE=tG{ks }TQ`qr17`\p w8#J޺2=_do?<2Ȯ%>S$ᏯN^~v5\kdO f#[)}&uUW= ^Sj Z8r`s]^qzc;@צw㇧4cMC1Z~ FS=$̽CE=cqyR}grdZ Ccә'Ovg $Ia7x*N$ =5-yW"ev􄱏eG5a]b3,gHl+ۘ7|ϋeq^8aOT|zq+5*gZU@QyN:2q>ϗ/{0f2|0no<-W7;r"sxb '`s2 y{W*!xkwAgOH{UA'4|~ܭz=;L'kGrvpq߹H=:-}/oY q]Z VH'bo@鶄^n\g-FcOVt UA`+xOXK/f<D/dymrDv:z/7~ ( 7Y'm`?8arP@}*"(D?te %Lڢ*Fb{|3<0 lf)\nnL]d_zPkל:/g Ez}ud&=I5*'poFx0_KǗ+#3 \ڍτ.zď3zv {l섺Om~b`L`].<>$^xeN܇Q@c9Q5zYZUF͉{M>V:ۉniqi߿wn~ƿy~Z8[$(S}CSеOx1 wDP,LdtNM7]n2MsEN_q>Og?b; ^vfx 5\yM'IUMjE,8Jkr1]0LC2/Ƭ?,:2=eH^]G3X}j3I&]o΍kqG toF jdUUZyl0Ouf T}nw^Em8ҏb3"_/`}< g L zӳ0=:Ӻ8课j ޣ4nqwq!I3&E=x}*ۯʯ<^{Tu&I̙?gQ)g1P_?Z"g䯋A"2d {)RL16$b٥x P8+֩]`֨]ɱ)] pm UU*^Ue-5b}fkWYl}TLMq1\AoRoꆓ@vaMf M߁mz;kj)q^ ݐC\IvL:jf0xfuw?ժQw532дnPYYE^F{0ړ ?pHgϗGUA+\deg ddqQF-G:rp,`+ @.lbŻ?W~ =>o8sVRFszDϯ@!gOW͘4 npY,W4LgR0VOzN{Lz|Jo7c BC1d3jR #RLm)vVغk\_Qy-|5u-|.P$[AO|d:zK>aԈ"Xmj`up';Rܚ|\Hevd՝[bcePOu{Os/EVB"S*$C>$/>M.8$fu,E׍O[#fծ)gL]E|; by b+sTwwkQzeC8$=u,(*3nsgދ,±kk#3³>W|BHeZu=eϾp=e_jBTx3^rv7oL~Y0 jmJqgSKΜ Rƣm8s.qϯR'_߳&/Z{[b[z2670ma~ pF1pڹԕz߷ޣ]:=ߘ-m{7[߿=݆ϭsVa|?Fj,e f1@r#L<`*ej?ٕfɳOŨwq<@J!qRA [ͅs7)-*y>Wn*gr\{-vq)O:Ni ->4ml͖#֪ 矙?OOzmաdu~|Q?ݟ_Qfٵ7,5׬^-7raМYL"JI7陋iEEOߟ:f`j$qKqwOggSm\$,"ZTWQTj<>;581;G8;GPQUYAZWQzrazs_mSҲk+̣g6l _?$1Fu?K %/KG&" r%ӕ Nl Ú>lSL_o'_ˡO~ܴ̅C?Yvo68x~+V PnJ|,oaql';`4`932>b{W'l? K1&)r)Nڿ7#l,(s1m¢nޞ|~p:I4yZ?X+XUn. j'w{6F/u><4ZXL^f_>hk/>=2yGU wodA|P@Bz:vd'S.ׇ~"H _#4gtֶQ5ZRmSc{ 1R:X5[' b7v4c6hr ʯZS~e_Gԧ$~iS}Ae`Neq0?;[tvCVޙwpʜ_'vJ%Y+} K*vʕ΁5eOOqg|M_:;N't]PYsJ{:yk@sYYY˙qDLx1^ mLJLe]dY p~/#N腅^;Q쩭偣"^G_ssǸ'j:::(낾KZ"egCqȝstao;&_G7>L.0M^ ]}PN7L7l( ɢOlQ 9<1ĎCy4Ȳr<Ƚu:nV7ܺ}Qm]8HJmܸ1Pq5RGƾ-5s*ț5u|6R%ƣ>b-NԿ@%RfGwf0 G O~m },oYq%9IpRyf{P6a~58ٙL@FooAbNm x8ԛ// 1Od z 0=yvӛ5|hU+wgr~.sIȚ G%}`צ0`߅Y^clat`>'e ~ ~']/_G8GUj{Jς;_PtZ_PcQC۵qm]H:eQd!!񩥯 t^tn) T|Ky,y2`ނӢ-6yqimw0tJ LNeρ3B#[?Ǔ/Yx ,j\ʢ׿pWbT NW3 oa)%.t&!hOf>a4]gӗnG3=y۔|qiyfU<{c=VV^{5͹]PBԗМi7e,@i'4-1Na@=m"A/2')D8ځ ДE'~ `ԃWѩ}؟&Q~leAY Tp7 QPsx{~vC߅&L &J-=<:{R?¦ju9qirVRɬѯI :趑6j26qWy!'OGL>w~4Ը=^VU;)YsۼXlYZڿcD!]N{J{<@_=>phzl;LܘngRH I-]uKSE]]~?ɳ!k`X'ǵ]O =S$]kNUoz>.JGmVhezտO dGD 0'5Dly;Pj8c,AV%o]GW Cp>۝w;R00'n{6hވU qo&hx5\ڞRUvMVͿ{i*5s®@hEdJ=6w%-L 6D͵m`}$`oy`0)=r7HrY30Y]8‚8i`̔5* j83=)2 \#pLc8^$@[>92[4Iu*7u:3+$ץ|ZՅUPe3iKuʘzD~=[$v1+n+z[:p7ebV'94=~1<䬁 M%X,*aךɌ+-K1}$E˴/Ue^І'( `=hUYst$^@qo`t_ 2O|{˃ۿ6&b@e=r੕ٯN>|/Z\ER 9H?(`UlN]̏;dŬ̌6=R.Zo^XVCA(9*Dat|͐Qa=m_1ahV8cZUe0XM^r)ik3szfj[<jtWo._h՗^'G>mUV[MtǏw#_iM1:ӳ8gj9! F%!9 u^RKNwXlq㻘 T]Fj$DSnfi _tASͫ,غ~q~ea?k k}s>zA>QFBE1D <[|nQ[^ƣ7 :,B)Zw?v'n3bbPOoych1m#?%_/? BO͡:67{~R|ߡ B]\10Z  VóZ5!=}sJ6e=V5T6Vf*VLR w?`||"?I,|_ɦo=Bo!Aڇ۳"<;R&֫apvk;FjVw~.LK<˒_rٹCd/˺*,@f~]^GD~$!rN56#uO5qՆ_'_Gф|W>zy]x{62EMCy3[wA >y$QOggS@m\zNjO SwcC4>4?Q:NKG>?;>;MG[N~^xWub;_#R/KafmSפ='ϩn]~6t:o_}W& ?|v.F|Ny{a:=kRcT8x 9=`5۫w;{XUND'̵խ[֛*Kfz<둽_Q^k8p9zYk:SDt8*oVĝ8peF޺!+j fG4Юl*w G'w.KY?3u$8TpiĪdiY $@vrS@3 ó}w5LS3YY b3Y2/?@}dNxJG3OB@+y! Xo?BwDՏ0Q1_H/ ;,e_v#H)7T-9"cj9 Îݎ66+$iK'? sSbx6?ܝ4T{~4vOD^s6v-Fl~jiȫ#"w6d˒@uFNZvzW[n`ӞJNԸ`׵$ty=S/jqPdHJLu|,L΃w K3z}J^uCZךBM/!R%yW#uY"\xcYsjl[ -o~0q2`aME :ɑ©Js^!ݑĻBq_hKQA<`Ԩ$ Hs4o9i|eqW]y\yr铃?uv"t=N'8vqC}{6}% ~*kgM}L{sMܡ緿ٕ y>_w~?8v =Yd=잼g* ]IZ.K=l"}f`|PZ,} .֠#hwf<&7$QU EO훕&:a o_Fef);p_]0K@mNHpǟald[uy'䗓T'\S&:.%t:嘼u<~z0Z5 _Ove/pC$N9' *rnc}]G5@κ+!@}5A[ʈku`sڈ6[?cLZ Q7_}~<.ׯ;:~po?Lt_gTLK g*,Pyؐ3׳ 9;SUP QDLJ>Mjk8_9oeM&=53ES8gaJYazzx?w|: {+/qZgj2Aҍx>e$o>):xd9]1)v}cB4@'tOKj C1pYcJU I2y5d6N:n5uGЃ^MVe;sOߛ 4,/^a0}^5dq-*#@P LW{}NL>fUgnA3]o; m3Ιϻ~{bgn_U>M]vrO5 ?Lw(5yZӌ8b=۱0k}.2 >RTԙ-aM+8^=mk L6aGҪ$?i?÷hmAU%2`5@@m;/G^;|= lW!ھf2K7C`1ZaMؽ]{89u:˞]SSwБʕ<_e/,*w215 ŋW΢($4:Yrn~3Qs63Gէ=SIB*,= ͼڵ}X6`KB;ݤ[q_nXI l([.8ڡUitB  `xPdr4>IWD~JRz 0?>^~N')Th[U\^UiaWoq>Y?'9d( J[B;?uv|oX:Rxroloʡ8 w8aGu!u7=DIPTsxj1dfvt?$Fsn/3 WIUS;3+is2?ڇmWU.s)g^}zfgb|a;C ӕPIRnJ*+2bo5+H9sIm&(``l^n6AYu*Xg4L>85e̩/|dkFT^%9`>)xgݛw>ϻ&wվ^5*8FT.4:nj \,X6y~\FZQvޏcU/\u'~~;މ+@K"fcdn ;A %x~)-oҝjr;`ˮu^<|Dmm^U!mе/o?;(DRg<2J&C0B ,[9.%|;'~:_ӔakVjTDV=vB 0+'ر"*P]Og{Nq{NJ]hheKU#_U8,,2Q!1IT\8e~- _zy@|5""vUr"7=עҾo"F6yGwSGP 5̵y/-8^USv|a*lk>`/1s ۜ/$z)#t:DΝZ=fOND(EI'!V>it-5yQSf:4Qo/ɗJ5"e -u#˖2z::e`V SK153cݲ(,@ !({V쿥Z{?۽ v`UY:lȔn|Bor5VG; 尋(QshT;\:Z_*8i6 rM?x:xP{|{8:](ΡE#oEM?]ٞJALi۹LVQ`¨OggS m\V,>KLPDLPL?<==PTMVWTTTPWTS,& jm(t} wTzUlUeW1*w#̡ʱkj$GA?6koHg0p<9#'VZJ߿^vE6bO|2B a]r $*e_ \LUX<ӏF{B0xωm# FT^ ~A")E8',;T8^ެC`')ۗ-}4<ril+>i@oZ <)b«};§ -g*JīC=%)~:Ǐ k ̭s@*!bwhJrv*6Vn9U&5UWd~{7zTav&+~cVr#I?)89ρ,_L?Ǭe)#}wl(k>$IVvnku'`vH9Y׽$}Ӯ0hHpSIM]p_i3Gh]Gl* 2`}O\.)]:($@` 0!{ P}z+3Mp"(:{C#[3v>l`-_}~#?ϟ׳Ov5#5MsC5( ZhΆau135O&'^ {yfhyRP7SS{RLR1`>2 % Q:7|"* q' ^yfl0g5a<>|VࢆF lrjʨP蓳,?5ope nl7t:Cvs򑱧16!*a?u_S:/xA~ˏw.͛8 \F^HºݗK/e6x[~fe^﾿^Z|sX(غ]͍C뻐 $ *$Bu7[*5ޠeM<.a"0\)>G[V`W&|ҔR/>[d*\ wu~a9֟G?lt^?am":3 2w\$LXMQ4U#Bb@GЗ04W5bw^b4WG[g"o4{=acKo c]_"QU"4LV,=<@y{BcK4azw'9,;H}>f'xֵϭ һ G03DE3Yqs90G֪SGvͲ ٽwWީ(tOd5ק#=څv1 [rɤ&?h &@Y9kcH?z4l2{y2X8tjQ1mV1^>uGS0Bq7m88Ϳ:]mn?-|ecix^"/Z k1WQݟﭟv|~u{z -є7oQ/ߕm=b ":" iQ )?w.U1]<v“ϝ7dwێsHϫUZ޼Kos-)ŘRhi#}ff=L'@~q3M'ڲTU iq i/)]nW[;~*͞v5%/;^ˏ0k_{Zϳ#/9C|S1H8)NOPu͘MNGW::Tȉ'qg]|:#/hIWeeTLs9T<:FԦ6gEUלdrO1,c ̐j+a [yqdN ]X~k.d,+g,2ꅀ-˖eеw,PoQ⋘8=Eso4l#N<C61{i4k@C vwr~ř׬D9P0g!{ P3$aGI[RjE ,侼u vynm&JQdgUODŽesnt ů*Ȱ|qBa;0$T|30U1{U{<4u?ˍj5 /$ ~`h)4@ϙ0zzg|};A1}T;L#,1;3܁xeڍHu2^M~Q?wOz4ܢ?V#UgY.Y89-k󸉩֘0 P^çϷiz =H36tazPv. Փ'2<884f!?LÍ8|h=(Mm$V6q ~g 髆x^*?>c W~avk`aկ0g?]di?ca'@ fg%OVE(S܎mT^蟑Lɩ@Zhe7]hvFˡhW2WĊev׭fWdo1]_uo._Osƪ.v|bfj&?_UM3k6ZYG,bwu;74̌WvCbˠ?ocRN/@NUe>bv.Y/&;.V r^Gord-d$@%*|4wu܌ӘkNv~O]/~?~`/qyo?=uxKE1cx $Y V bFIBWI/L-cV|ԗ~9_/wt>)5>6EA -G~]R(˺DbotKu}wm % xƖ_Ν_ďq?z< ؖdW D U-r9Fstk8)3D9Aի4u(z? [g8_E-,? f zq25{zƺN&=gڗ@ƿ=2#k]rkUQUyG|07U~57$7Z([R\G~Q^xgܝ1w:z/|[zgZ䃜ew h5ju#T3կ 0M m ح7_cE4y sURgy_WNIPJ0b1!pMVT*ܯHA~_XZ{OO3'6) gw:s{S[R~J!AXUZ5w,yWVF6A3r5׷κa.uO|@ r*=ʓ eAj%=``Q.'=mj?&l{F[]f^9y<-h[GZi*gi o9h[~a!U_lu:8`N>>hG/^LčLz=z˸A1@k*oUf[~O㷼:iz__ޯ/"~-a*証® r$o0Ɋ@5x秡KoCu80/z[K8Suvӄ7Pc}dOQZj&PNƏO,c g^ pim[ViBt%.#yorx|El.Rşl'8' >^w<$7ʭ3Kn]~BZ~1-T| 2^op?y&y1#82? pv^2Sܔ!`x{ޯ{]$0h-S2PEu+=$a:i}54pw8>tqgoX+w%z [ж#[I=}( ~zk`=>liQ]OO. J/?ji2O /fqp=Jy8rTˉ`iȣ:c2,n}#mCә1_ ݁jagk38 3gc"ѧ>yp{<4=LѾ3kΜ {{[ck1Kn"0?:TkM%,Sc@#*@˝`@(5/[ G8,E1L 8OPwXo40~l.]dgD vpVOhp_G\lî<q,migJ?)*  lZVM@7.o hHAjr!:+m WQβ1d9pxfJHM\t=1&j("Ҿl77>;ׁm\`&&x?8[]\f<5J/@[;'~:61ScȄ_R Sߕ0R9^[aXrDdṀnyY;H}aX?0f###)E V^;ha-~):W)jo Ry-~MiGxeISۙVq՚ @5n|;^}yAn_%.|ȏ _MO2 hxAt9I] GBT1  4L| :1w-~M l]|yD4~ן%8뀸 [S<KB/&Ky@SrB y{Yh/0tn 8Q9@B ЎT O/Px\B/~vRH~Qօ/ޓڲk8VP<@jձ3R L*6{]cH\[.69Yv r; 4{;0<Ցzzd<^OGd&{" Ungu| c-#@:SՃ2QzT&c,NZ%2MZXm֝5qg^GFM]x~;![:a˼뽟!;žڏe>.`JZUhWt!Ԕa+<2x}⏒8̬C % f3;{# >8l(, 匈 J ~z=߸\~q/m{9^Jd>/;!Ɍ\bH؅zy[\o ?$8]ys݅=Oӹ)n:f(>?UdM767V$ek7ITr6e $' QMY,0 f ׄ^<^ 򫔄eBDRjdc~ng^T?\5==sky -`,}LSڗ>~wZ kךa_ۆwsB,d|м}lKׯf "vQ3u(:^&$9W~!:2M/xZ>0K@g`o!X`|P} $PIߟH,/fO> ZI@N54C^|1R2V8O U: mpHl։1íTyW$8a4KەЛ3qԚ. ϴ:H$0Y+l ]/Ԏȳ쳇JRZ/J.@֤ꦥAWU[}Cw\ sc~ZJ7L\ӽ8GT{5t0gj9Cu x! fJ8 ]߃c.=MivOggScm\&]L-DP979:;7KHD:<;:<8JLXB;MMT00?8<<92yy>g_<4vQ#M&0,& 񍙎"kbj EU%}- (7'|9ɿpTTMU?fެha+)(_ -vvɜzMy(:iuxַi<*ϡ<=Swڬ\k.Ȕᑋ=mUBo+'5\CKZkַ=va67!e5\%1|ZVwhOEgx\s?x Zs#_a6(vܛ4uuGMӘwДP܆ylmKû{ήPӟ|:O2":+ƍ( 1W7YbSQzoR@եar?dtj*OgɅ=&wߛNF7לM|dO*;_`[94NԎ:d| Ԡ)ܳބ[QSot:'nwYUDyWbsom65'5Vp?-Ts09`2SytN:s"?M*2܊e7ŷa,nW Py'0'QQĵlί1y}IvQnz뫧)VYCؼ^&w2^tOn9K::x7tB?9u=_7zzO֎`'H [2>ح%ˏ!9^^+9Ş18r)bvog2Yn=I|cHv|M,ܣY,>nnw' o}~fG/>@p̒LZ څs-ISwN|/9]R Sm _sd6x}ޜ:Ls{ѣS3sǦ}kw܊U%b{L ?{NmbM@||9}ٴdso?NђY?/F1J :9|[pٛ )mɎ?_O<'ǣʑ߲0[C@|9Ч22u9P):GNNYxun(YCHmժJdD@a\DJvglnLߡ.gqe%t?\~7quhCuFah:Q}q[7:T#'%%YI}z_!,:CNx`$J'rƃjs*蹾3gxI?RI*]^_w_'iAI{h&s;,:[TQ_fۭ3๓~%)^M{paOܬsn̽"Ww?WUd6:18W6zeku#V.wneQfdXY};e~=WQ('(!#7m\FEx~mX9{glIԿ3Γ.0/r_$T}>_~kPӛ5@5 _ud<x}?έ?;,l5ʔ]|O= {/[ -(i>=-϶Tj* 0V9'Kgzz> cgV/|p%yez^O ׮T3 &-ΆV`q%=-9&51 )9׆14Ʃ@=VV[~Of q];fܶBG5Ҍ0ʷc N'Cb"'b%tUCInK_W@%g~'例y4@=PVa[=i@f*E/=L1LQuKsbzȘjCO}Rg1wFg4Ѡ҂[TTw]_6.*9`2CA ~c`x( Т혮Gu3{%)zhK%}/p iV{Ukd}:t4ɶ,K48TUOUe2kHL-} {]~#S?\3?Y{ӹ#ђq뚏uݖTQL<]usެ =F8:TMf}SPW, 4'j>Ҽޞn<4U `` t_ ́4ĉ|Hē q!y 4Z}/;+q77œ8 m< ūQѝ%HqvX7Sp'^ˑ(EGUFAv3O1s'視Le)F)Ұ p:W l8'/_ܠ5UheB7i!*,z< fVUѿ19ODՙ fo뭫4|rۜ/_fZvJ6|Tku&M2;J~i>YzezJ|\/yfEpQcriߺ}Ẏ 5rKHfeȍRo#Хy\?IibȲmf9\j0ԩ12ܗt>J*~0_pN߰'N~35ůؿfr=ii>qUnvL&ԁ*hЇ :@Sl̺6C/ݔj|<*"]/Wj^%_NA-)/3fYt^\-ÝS{浝A?gï>y]z˼*ԾoE: @z٭3{V]׻Oy$->Nque?{+$=:$B oTQZG@nC)&؞#s_7y%TmҪJ`4~)[{2||qVȁ/;4坘uPޛr*lm8x=m0隤Sq'38Tk,72!펳͉'$wh֧v[0tKZ+ӧy1{\y.*_wwd8lӯyTMw{fOggSm\_q_#cC85D/847EGTS;@=XTQPBEXSTO>YZg%ukt,d٢wo*j@Tc5ٲ.fU|.SjiL@iWXͷa}Ҧ`rcTVi>E@Q*AҴ.HL d/J R=V\mktɖZ0Tf߻;`>3awڬysZ:^_63 -ZNLiǓI\w3Fa}G,ye **lJfn( A=20;IZG1&QjRZVUe`7*ƵZROQѧc~9"m:gmZGoT){#2TׯZaC9Ewع|& @ASz=LA'aJ3']xV^xto]jiI-lC>IШM ؼLuS_r0d|ϺTMk@y:O#އ,g Gt&Mt۝Ӆ𙏑 _ Lf\(-dS/n{{~y Y _XB9+@XK.pGEӒ;ZCqy!_i}cD!t^%‡@ 6YRAtTUe ikG_)O [bb(s٦d L/E݋&Q2chs ~s]ꠡ{ IDs%i֯YI<SY{dQ=q,#]2YOѼEa{t !t+Z< k~z}̴SՇCeq+&y6s_?;vj|ĸ&h|"uqY}Gm\e3EleJ!㭇C$">Yu|[z|;/vD.l :Ѷ]A32&MY>Zd<g1c?8%lK2JFUUUDn=5~-pCWRMEUko(>qjZ/?>1áo-Lfڿ39z;UPli+4gPA Wݶ(kS,OMʯʯ~rټЍc羝n4?JuFCtZK`6O,fAQ=ٚyE3Q])U(G_jξLfT˛"Up+83JIf0C0;p5@PV9̈$`)Bksm~Q!U#|UZUy25ܼu_ 뛧< 0FwX1^c;|˗lϱVs3u89 [5 Hfw%XzbZ':cNS}shrܐY_lLVm/p79&{y)N矂zN~~ԱZnrj9QgH6&DhnKa+ Rn~4m)ߜk^:āPG|/ Du-|d2%SR!Qja d0& ֙2;|N? * P K78ONH֡{F|Io_=/ r)n-eyq2&}rNQukhlkh|20dž~[0SeoUwzb,kȤtؽ7=ssq#ޟ-^?Brcs 6Obظeqpq;OggSm\u;XS`fRcYPCHC6/7fn\VWV,L˙fB=}8s7kq_>_ꯏ:sOCޤS7627jQD?݂Aϑ}coٔ sa)_8_=\ $oU~xPh|V&_T^~9VG#'gq}4H|\(X *j׶Q2ǪXe pmOVeZ 3yB.9;N4sH--|G|~bٗjjM9sWߧ<4FKL{2yP_C^Z ˙9|rZ /(o>K/O20POoRuuGVMGސ52_b u跺  ޼$",mOP` ^K6`o6@b- 26- _ȭ*>\j4H > ^j[F7j2_Q]k8nx\g Ҷ:Ƚ׳l~'.]ﲔ_y#)4؉^өh#MP3/\3"PdϢCGp2٢`>$L/fqn|P9ʛ>{CG_C!jy`^ʧ74|i<Ӫ| [Bdgˀ9U^LT@PA"**uk<Dp_`@t7<.;V-݁M8qdCm0\,v"U.U˞M::~OrЁ[͑o;.ClPTiva/`=y"d\EL dlũ'_ʥq~gzvvjL6Vf#gK놆`NEgCL UPP4m ( zSQD*ݻ"1F ]z#:SæfiH*߭ CIm7e+N5O"Aj] P) ҟ.@V?:>v}h !6gN^٘  e0{8)}6Cع&nKo' vY=K_|ߟη1μAR >utcᢷQMCmywlt?EOL`x׿q{y$VEOP wB8~ #J[ ȶ<( (mYO%>WB]a{2 qY*O,)"Jj1ვk̈́D\w; O/5[=Dz`8) yuw;6F44'S[w}Yox=RB};c4 s7t}|u^Y o7,ݙCư3 =b(G/b}):z CxA/h;dn_:*HUn"<f$Wc:]z@M',Pq .jCV)[\V6迵mHvw,:R= l_<Rۭ6a,[*8IN)?֛wZ bơm|xaS m-àCEh.T.9DKKo/c6{?Rm?8o_./$V#b5 g|w ͩ~W_'}l3ԴTNF KE@FI4x뽟QkuJb]=9~(_ w4w{Cv NƬ E7'Yヵi?8o^Zr.`m]\5D[]}3%xU0h]v]2G&ƱW`}HT|yR^,<޻0*|Utn ,kr>i*ZJWB&SZ1~yxUx:0j^p_k fBvf|D yW޲4Av5sϿ* 8uwC)Yv%@R &|[^7aoSx 1u}8\Fd9bHr/첹a{32 8BQ<&<^z `b@7s_+P L<"v~qgl_q,q$Q^WUaL%Ǎ87)_(y|>,şJ/NRwkȿ(\">/PKA<;qsħuѧqZ2h_ e.ճivhRM2xs\Khh̄?`»XefF +]HQ(U`pI`N4?nyz8L X U %P@Qޜj=ohጇ3pO&ukp24f~Q dػ@Å잼rsEd3fGMC6an~$IY*VUS@g"jK-̘hj*;&uV7N:e&궑;^oGv>˧,uTVdf.Bp/ 5:ꇐm-Qq2ɷ c;곃v{z﷑TS߼283Ls Ǒp `j//<@s.͎E}kNsWϡE58PiZY 0y-/fcna臦h#X%!b!o$]v;.܏hOZPc0gOggSm\nA3A+:749>8:97:FRPYUKLm=Ȕg7Mval2g_rL3*֭f0 [Iuт5kL3*XQZdB[iz`M=W;@p}C_%Nyioه27Ў0դY:(%x_BVض^r(!tH}Uv&nAiȞqe!Bi}t`0y&P]ЭЎ3L` lL/yOuk~w٩nU@#"4;!2EvƩe(.za[jٜ=5r-wm{։ްg^~boIq> l쾗Ktb_mž:~t:4OCHZIOOU);w~ \ak ,ߨ{ C @]e%+eRRY@#{AyZmƑZdt49>ZT.7\KĶVWiojtq2PN])E(x| עP~n_ߨ9 D=\cǒUBt%Lׄ{C<3W1~$(h!;>ԕI S)'g=}Bn69zMWQ{@4Ϊ~ߋJ4)Ѿusi] (xHۈ6iFK%ٌ)4iR`[G⭡a㊻eF z!`dްJK4ݸ*w/gL|hIKbn4J>vD'E"%!t꠻<%!xo9g&s~ I7j*?3Yο 3-Ms98-Ckd/ꥏj,~c gz<0LT Q0 "b5fXӭy/0*YA< PYLG{jC-6agԇf#?a`T߈ 1*~47Hm!`f^:F2hb:53[{. λh7wܭ_oQdLA&֋@ߝ=9_^wV1X/o-j~CFjSlj1dq:g ^n\uM$O4V̥ Jbp{R$' QXOUvY8ޚmᖁOl~mîP{Ό0ٱOnkp$cZbAI~%_vHcѲyuHxhW1} sF⶛F^sBi)mwF pɡ k& 3T7wUYws]uU=3 ̉_ww}Fz=N|N%$ IеOpfސ9ےhcP K#ߓW=|vһ+m|VU]i'd3wo֖įʬ-C۶o{%ta7}t;UBn';q= 9s~Q{Θw1UŎIW~9egR$`\wf7Ϣn޲FPLySI#گ|PPɯi`l⢪R|7UѨK4 gƮ[*|-D[#a-aF 'wL)hz-rN,?bcO K//&@ƹU}g*gIρĆϑKJ>dd.xpio^r]+"y&Tw_39X8wωɶt53޷?΍ ɟ}p\+\n?*w趖=OrzJvih+ڌ[m(_7g̟{nX)*Ÿxg_ޤXQ^'(SS;E&N*bٷƂ7zY>彲أE ?:FZ%u֔oa"#uɨQ;gGFd~GVAugz | Y{0LA]˯K1VB*<>r1G6tRQ&6z=?vŕ{|N :P"ZՆRK9!9(oo1ˉ}#K PڨQ9iQU9f9U2Zhq>3[@Ylېur%Jfp{d`}xn}]lLrhYsEgVsfj;APqQqkЇ!/=]eT\KWduE<9 560B$@l((~CfyCvԀ+}kz"ӞB mC#yвյ->>fѮ*f8";˰? !S=SgBdir1$ 7ME֙4l 5ԕB$z`FԦ=&\|`⹔Oxk1nr< N5…jk؁H_~c14JNݿn^ݵ?7u>z?3u2r Nn!jC¿]r&" @CvU9:ʍK$P W u/E'y}Bj쁤T4|׻2|7:ͳ\ZcuMsuy/\Ci/3gĥl,yb4 pVq=,~s*t6ODL~λ }@`Fy+ʖ8#8\l-;kp+u7֝zsY>GŠqr|K[pKT/ ѷ_V7 c>'ɧ%cZh-^3~?u` / GpYܠ,]oO(K14')e _N7ފjp`7,Nhhg+=5_ yք}7` ZhĜ ;n?E3H q@#M/z% l{!n#'5@=O@AGUP#{p@iVqGػ(uf-#H,g&ٲz4w*5\`2>pem#aҴ5^,+h;v!OggS@ m\$UIJA3O=88<7q]ty|?Ӓ_u84iwDTE  ,mFx0/䭱 o&^<-0YbW `l!9s4{5Q1o~c2-us ⻷nߩ{8ؿ.yVgw'ε{QχZb @ ЦsXht^g>'7PxoWq.IN0 ר!%uVhMYzEPsJRKGkEAqsH铓vxc=o(C .`^ןz k'U@uoPJ3 mm;]Hj'l)o @@M,#!\F`LMW}.f[(]i Dx-y7cW P+^V#v]2,P GWS +Mm<:d(y7No?A౧hq]t͓?0th~`sBo\i~)//}':9' 6㛷}Jch}lC;qf<ρAz8믜.dnp'lFPRd /xNN(R;   k|sخ w*䣚)Nf8b҃M+t*O)J%WEmBiw ^ۭJѯX5&oØm;kv,m9۾UVU #ݵJ9y [c[/gxfe~ֺ<'9}ip9avIo>ujNV̛k`yR6@n%ô o N?LLeoO=3k48N&=qVA®Wߩ,>Mdv(I'@ Y6ߓe};vIOՖ0 *WQ9 j `JdjBz9 @JrCҴ`<6o ~5ыC8ޛ~lA?{~570mT_N6Lc~,auT͗$ĂH R/~2|T;o2Ȋ0ͷEotw~ZZer؈Cg~NB0k`,ۘխ+:+յ+|w% =l~۰29r\ m=ߢIۈdX7wvg753 72I҇kz %:[5&\tIdʘ9s [7@{z 3|x~Sdp7ӱ3"iquwεӹؾS"*n^ pӽwĶ 8q=n+֋7y88(_W:r?o? C \&5|N'.H9sw,[PЩo]$f+s^ڟH o~/!6`*vctBQkx`Ӣ@C1Y|.D6W|t=y~4⩼|k _ !&{cF~~{s@A5V%*VbzwOIжDfKN u3`5X֚/DE$֤<'3?G:}s^7^'m)g.*6Ezbt(Z1$Z`|)b%g$3IxKҦ7uc{ּۉ(]c#*M8Zq@l/ FRWV~L`vx9_ay(a>nUC794KsYJ.xZ\hJ<5 .Jgxl7%/G#%Dx|V*O[n{#O_;QA~' D ^Gv3,lS 絑9s}O=ߪ3ߗyF"7PY ÂV Tj>ktd8N@Jsl9|Gj6}ޯq8;:ir-o2ƒia+Z6!cNtcL:W_Mv󟟺wy}'58buaj"Ju,1iUay.1b6Xeg2e~,`>GOh`|;kMߤ@ҷs Nc $֝MP]¤C[13y,6^0ǿksX_ ߘ,ZZ$KKS=:p Fz[弗}]]s8y5u{Zm50&MC~qSOi:_T]ǟZӦcl$oEŇc4=V[!X0<࢞-6KX=0uM'hũ<ޣמzzG>??xzf<r||2MYά}mc~k&Y7z{距Tgy}6vzT=*s{GeaO39,:6Btl2qmI^?IKZcj/(b3ǯM:*D6᜜kEڟn6Od?CrʭI5te!ڐ8ȦAhbavU~N|H7DTsg}4>٩__fpTk .Kek ߶&9|\FSѤqr}=B=вYU V-js'6f7oE]/r|??Ӽ卺2f>stMl24xb4|*>w L tM49:0h;[y^>3όwӻ>SY9&kz&p' 8P}>Tp_mO1*)fd45=Yg}>g}ѽ=019]E䭌ԍdW Xϐx9z!v>M-kw6wahgVGd~؃5 \wNUՌP 7(,WψmuW?PPPs4 <jFRO @eƌ(@ ^)yF h@q Bobǵn^ACA7UUeNN)7suX@? 'n~Ma?[לs7=-:y0?vl] N"\2 'J 8KMxK7E5ӰzфΘ٦n%mAђ]͟2Oֵ{jZ Gb|s'\Xܨ5;&-ҶT} Y\;J#L>ʶ/@*@GaXˮ9A)ڿCc;_^,J &.c/#bHC=%05u~7kf;Y{! }*u ^Ԁ߆>|CSyd aX'$agyM)Uiu63y5<9Ӑ賈&0}(r4Z}?.{~W:m/@fFF֘~}Es9qi(?V4q۱!OY(-rSJ0<>?Gbƥ=Tga3pY,C@\LR\4.οG"<*l|\M]:ӹlJCضBB.  ՝h 0XZ-/ah.N+;_]>+÷o{" ?F%cL""i \a&Xp[E"O}t-=)u1WӠk# ryA, J?t):6_ޑ%=InCUpx9SfmKdV+l 4"5 _bq&`^ox?/>,kymZ15%)/$*Q(3g!s <2Nr,Rz>J#bqun?l޽l %݄)θ?M~{ozʹBx׏'~tzϟkj`ta۲ۿՃ[Z|N5 ΈS'N!CLk,Qs_,hY4sGH}G_>R@ͻ+aIB#'b] W  |~iq3Ǿ =<%:$TX/c OVu&P+nEfO8n8Ϊ%?[:JO',ɶPð nlISZ%HwraBY;xz2&Uٵþ2VtSgxfʥDP)ç)^ L @e ~؅?ޖtr#NS > -\V AZ֓8rHnaInN6XɄ.c߃Sw׷: uש>Y ͨ/+c)zY@So!Wԟ_U b-VpCjG&Foxyɧ8yT\?d'1Mk ٵ<n=h,p&MM w;7',Χj5Ǜ9O&7Wuskt`dɡ]0N1'3I`e Zֻc[gFyQ◡pTuї젬J#/2 Ե8II_5zcgQtj{5#QcS>|o]eecy<YF#~֝}y-Y^tZ-T* zAᬄffN88w^ w*K: ~~$iCqC坕m5˾_Z U&6Qm`ks7DZ+`Îk̦ Ӑ#<@mexGN| HV^_ջoq/C _>k([9uUpc~Я\D1S@f 6-G;Q!ܑ *ܽ3 gy{J距 OggSjm\!t[TJKE:@989;9=KONNGc[><&-Of )+@.f=4 `Vw@?̙KeLOӟ0!BO `};k G>+駉P 6;.50$K\iPIe4 i?MoUf}:۹n{>Q PDY^9"u]6x  ݧ\om2}JϸIKJ we羡N:M4GaR0/OtYŒ8qB! o.cu _ 8%zn_o5{x^+5Z~?~ewrۏ(G;OC깁T΃B xB9&ueSo((T~q^w<`mz%w!롳-Q_p#Iy<0[ǚRkZUZ鐙{V!y~03:ϝy=v+ Z^)e:QAh$<<&euSwQ-,DdyAj }gl~ע,[iCf+j(YG?{ק5vrW8p,~Ѱp/ГVZAvK&Eyܣ~ L.&ӊ離{MRw4!+Ѡ!@َ%m ּ!ؒ*O̩k";l?ӯSi50\$37~NjkE?Ehz) jhMlO*݃GϷ.W8x`Ʌ*?V䮝u(ʧ 3y-x c7c0Ы Ga ƺpi|r; Y  mFHoLTe洼pP0VqqF K{ҝ1c:^9kw];_"o.Co)P_-}팿U*m`Jr׋"7gzniN@N6c:x;T059?|>րK-gZb $ /}=e86,)_qfM3O Y4]5||{,,0HkHjcRyюtɆUmQK@01)^; w":6k_Xw# yfRUikS{;TU6,* 'Zۍ)V%`ѻ.=¯_E)P [ ]\qnS'a!OϟY5y\"3jhz_u7PCAr h qCΤx@%/UE E z ``LM5 ̼$sF@g G(w߷k(ӓ)0*_7DG[[ā e*B1W@Vwa0>qp864[X}(=R[q'Ҫ +#~ř<0DZ=:.-b m?Qޛ֋c9#]cȑ}0W&Vq2?>E]&,~~jK@:̏kh'z)= p ?ʮ'卟 bϨNC1T&И-Uk1.΁ʯ%0nqTQ ۠haA4F( &ѕ%ѝZP} ЅnׄK59]8XK( K'w5O\¿rv'K,̎/gwy%1ex˝W;2l0zv8B_ ޭl,L |f_R;s_2.W~_v3 Cf }Wbe*8|D-˄NCzٷi=vֽvw$TΪ=:/7UMhI1{X]Wy`#{j )-J[iۈqȴ:g=^%~kϬLj2?6 RVީ\u>[yl2#h{pY?ǞHE<(}q}1|>р{{Uk?}- f;|1my9O:~3CELaD \Q ,V@v>i$[|,|7>a46.§,^ ;7:|$TsouvlUT2U'nvel_=si˛{OֆW_C/ *mNϮ_{{{vl}QAA,k,-GqdY.}ezzzuge+ 800uYG8Y9}U잞~yywYuY888e!adYֺ˺QŲu8eYaajyaaaa L/,,,,Z{lmms-1.1.3/data/samples/misc/000077500000000000000000000000001247673406200160075ustar00rootroot00000000000000lmms-1.1.3/data/samples/misc/applause01.ogg000066400000000000000000000633111247673406200204640ustar00rootroot00000000000000OggS)Jyю@vorbisDOggS)JyUõ-vorbisXiph.Org libVorbis I 20070622vorbis)BCV"LĀАU7{Ƚ{G{{Gz{{˽s 4d)rBQ*ǽ0=Z!B= Y@!RH!RH!RH)b)b)s1 :褓PB )PJ*RJ-ZssA B!B!BBCV B!dB!RH!b)АU I˱%Q%2-R5S3=UTETUWU]]wmvmՖmVmvmVmYm۶m۶m۶m۶m۶m 4d #9#)")8d(8H%ifyg詞 xxgyxgyiiiiiiiiiiiiiii@h*@@qqqGr$ Y@R$r,Gs4s%:$:,v[R64p' ;'~|T B,-c^IatE[ t[@>FNVu!HF]4 e&СHH'$UU8Lb #ӊij"U$` +"K`ߩ `11R̫6p:giD51> o*둁UHhwQ F),Iɳe/t~ܣuM0fBsSD^8ǐ~12 ^𵖏ȀmY^*W=l/g:#.WD*DH3M<>ި oN QA2%yFtq4hPUUL4,lXX-bbbmUT#c3E #(RH*d[z*Lc9{oH&b@L˨1SQ5}(G~` PKǕEr88Չ+0F3|%6G4uѥC].+ Hb23h=5jR58!NStD:C}{.$rL$: 1I x6SIXMb%+SLԪhPTs)!V5U D%! $#Y88/J*g;]҄QB= (aĔN>IK".ma:>=)ƄF nqTd bS.B3_i+C3&_AJ 9g %K@ ӼUH"  tGdbdI8! 8fN~;7p Ԥ" U `Pc$XkU;մbmK5Զ%ǐplx2qVpvoTq ж&RW@_,>?7]5(:3*F|K֓tld˖* LqײyC!aЌIvY@Ev5{8Ɉ ~9*$83<#!&Q ^ȮfH,hvDu̘!1cFA(6vǵRUo@`jE~͕'~>*9eKdP^5?%gBţ QUJH't9"OmWI>fޝmqĤ\Ye m%ZPP+Rz)qDd@ǘV^̑ q 92!.A"~nO4Ub;iX- VV1Em 1DŠiLh%0 m@ q ì}!0H#a#:y9Wgv_)̙)9>-%;/":؄O`RugBk@f92k6ڴ {~!əIoF&Ce:qಽh!3zjJ"F 5gD78 r8 LJfNBUUB`uS U*Ti"j& bi+( p 33#z,BQG0t:sƀAزq qdwS@ A)iِDhawU{OXYfcB;$ 0?*%],s%\5o3AùsY~ĂĹ&(j90coYٹ=kuhqvE$7@ãxjUmV"2##M_W<ʣ+UUU1 XkZ5ֈ"b1V6Ŵ4mYE@mɎrwsNMЄA Z!X aXɭ$MvhiA1N<'NG =*U]9 |͐~<-LRq(dyB" = 潄z1JN2J701,X!t;x7c:%Vfh F_%0a<oy}.ٚ2%RkD'p$R +wa"9)?ZS~ZW1NVViQ4!`X*J(wJߛdw:q?q!JYYeD6H<)R'x| <^0x6 FF&07IvN!-Fh8r}7 .њM=/T0x\UNC 3d<ձ(>pcftr7X~\Xhka"Y 8ReI &C ꎤV89!9֝j= 8H'uG؄66a^RTkI@WŠpHPU*Lb UUFQUX`jj`X O.-ttHBn, L ,-°`= #8创-EFXm "I1:53@i!Mϫ?>|z16UT1i*NJyعn&avi#f[꡼JRςWTnmpo-7 |M8l7בCDUUUPŮVԴ`wDMk"b"6Vo|]a3#!$  Kk( H&2C3\:YD|AV=׊$SW AŢ]k!|@y@Y34<l݂rZe0[niV.6e<ɔ@6@>X̓ ;X̓ E:#i DLôX-VUPZŪmv4*ň+8 1'ᅨ\dzE%C6`B vYb }읨kT}iY|2(wxq" )&Hy-$T-U;&J<5ք@(WQBY oSlvB*’:=8Ra0o#</Xbam-kLӪadK DUbWðei 5d@A Y 0 j D 4V\$dX[1X %Q0Hf j1 LO,K,6U97=!c>8kP|9D[]\<K^3eɫCWGhʸݼQ>U3Je/PG{57DTPpOggS)Jy\Ѐ}8(‘uwpSFȺ9:$P#UUYYİ`b88::h]` c6FZP԰mDu9{<THÜ?Wh B8杛_w6hP~/lIK(P$9["r; IT&!WWtFbEス~'(|CQyO; 1H LGλ&~fVe[2r2 6X"|" sVOYֆL !1yTU+Z1VTK+b-VRSLҮX[j`E[vDQ;X!%d#0v&LOIؔPKZ3 d3(ÝN<M1;ƗGeBfA۬>l؟a]2*Zb<p+ uiG=[3N ǣΤqw8H,OCޘ 8.Do`^fPbr1x>f D^E!HT(@bU1M#5]ˡ.j$z4#d2T4oX؀0m|=3%4i,9軶6Ec 1xA)}2LzU|t2}0D6Z(& YZId^N[BDŮB{ψQ)*_FZ+ X`tzluJ%D6Lã$zQG0f4Vf4V?eQod x PJĂjEUQ+jڶbE S,DL,bQdGZa?r B>_ HƴG\oԝ淩e$?,)X6Sqd-F3%e;jl|K}_)u OG5ӦH*u5ՙ2ac|- "-->BjeԀ婆@ 8F\8F\\`6^gxP4+bXXZTK,,-ŰۖX HlNa!F`!E8DFQA1M-j"0!! e^>d-m!l 7#Ak P/M>$K<!^`%c.2Exs[WIK K9B8 hJ$nu+Ŗ {~"uyG#<(`ôP!*XXXbia[R,*v͋V<:ʆcE!9jiBUPmiFA &}ަrjP9ǓAQR\\O?oߤcn;o4Ȗ`f4ѕ"gȸSϙ[9{c"la0UfVEz:Y'G#1V &h5F[x"k CdW`~ΝZ!TU1`X&jQ klY6V0M +*jW@;$jmi_GϋTICVFC 2rhL~"`dĸVz^8ocՌ䶊g%9ۿ9.6Il$aacKQ{`t*̺"(D"F<(*AQTYXo 8H@n"kZ7q]0ٴ@יtx!$X@Sq좎V#VbZ İ1Mb-Chp ȶWϘ5v"Ews MFKLL%hfwh2$(K`LFFk-@i{{ j[̌J9SVTcpA 8D#ȹ#_XN-D{,qB@| >m) !Ӝdޘprlđ\vc6ɱGrY e dᩌJTkU kHQAx!500-jCDb1` "DB 1L8vl|~Z!HZ̼*X#7j\Sjo M͟=q}ID(;_?rIށUr{bys4Xy&]Q)PQ_u&$kߗ\;Ç5ߓ͏aMC$bƉorʤї' >͢Fq&YT(.VrSFYS#x$^ !bXӪvEckTLXVKՀBG (9:#?^m8쫲ި(͆cCv n}&~[U]m}8YUSgPp` +fԏmc[G]s>k&u8Dv^3Ɯ r6{lm+K #;[)e`a"7ABQV$:<^G GT"QUSEiƠZA5X- ,!D䨄b(a٦?=_|ٿ d!1=Mg~6v:ES`OAA-=xYM>9+[R\ Kb} L >Lf ZWX͑>(Ҫopz铋"Æ"V6<*#jTj5Ɗ(5AMVԮUB K1baRo;l _R15 CpwGqÏx/wOb(GrOJo^>kΠ:/O3| Af&f)$όߓ+|u زV=r\MڇI7-uÓ]D(l^h݀/}DOк_TD5B:ȓDA *ֈFժUD--UմmŊZ KӰ mXEWIuzO-K4Ԛث Ca!$0Gj+>'֩D{%aq[.kQ9WOe2cb rQU4*h3GwW ЏKep2je*. UJ`[^ Brd(+>V|Ҽb5/Po<>^G(Hՠl "VX6j'VLk;NK[;Iz"LV3ށ[%OgATg**C@H!f/opdm%Q h)`d!@ ݑ |&B+Ggo*m|xUvLәk594I/.ݔ ?6)'R u4iި+5 0Gj\퉃 0PԦБJ X,F-b ze4  +&lDlTE5EC,$pD6%֒B"YA7?kne(3ΥDK^*jIs4ıǔb#z~ɇ`{5ɠ,l*]`xS71g;=;P#evQr-$޾c0 ' p((އ LXAXe!)2kx<%<$SUӰT5bZM, QP 0m`hp{f nx OϜ~<ǮGrK7j#3WÕ'BꇸH>_ tI6HKgB[<~+[8RDp|Jr bpPE/@Qmqv-ígh(x }rm,`^Ø\1Q֔_İQ TU@F*U0i jZZU[-n(6 -Eb 3 XF/f_\y8b BD9d. IN[1eXeaYG }8@ PG#o֎3`}#?ñ8nXITp+%J-؍/xy!HT (ja:V`XU[jiE)jbVU@R(Xϖnd^)^J5E$Ubɝ[ӵ( 4! ‘aS_lVHa32D?bP07:<Q/ d:rNenR,VB*DD3jpwHb%Q}׍).V}>(5E B <#<^0AUTbUpP jUc`-jX;lL>gz{_&[gۀ6Ct xsA򟮜qÛl "1C*W>8YKۯ=UY$c ^Xb%PaVfX TS YB DUXb(*F jڲXXP XSm@` wRy͢7kzAT6vHTC gm5/H*]_Vtߚ/ 4VA EeKTiMդ?8ɰTrDeB33ʖ1dQ?9"-MǰsNZNbKLz5&Y}b GP [11m\f:f 1D<1Q~HƵ3:k} "fr@:/GG U:@,#EV,lk3B!BD.8D oAũfz34!Ik08Ko9I Ho~i2&3k(P">xiJɨ=(6'y>%"%^dOL1$k`'6ٖϑ4xR\Ьkfn]U  A*i:-5İF +j)! F bDü9yP/;=dPa)@cADZM*=dڑg:D&Ozhe ͟uA l/k_D$ zIG5V/+2|H9)qaq}P5 7r|HR~H R|,.H7سH@V%<$Hf Qd! V!!< *QUUnhX &&زbԪUl[bU@͊YI?b. ,0@2kU0G<[0m2^Wc!CqžyW~)OLT͝MACwo [; Ѫtbh˫ |bFw0.LeaGZ$Zd3Z*@`>1T|ay*>^T%D`I6*46$WX"vV,DEFٲƴTi 5U0q؈V7N>݋"΋Aơ QYGva3(r5Kͳ(\E]I% Sٽ#l>&ì2vH!a91}Fxq[ zHpH!+$wOyVdی0:hs^&$~2/19ۭ<Ng^HRk+Qu(q Cjy%%]/<>AU1+ *6Qi3lVuZ Xêa3+Јr8*rR\ F\n)' i%tnI%q$0( 0Bޓ-rJO8jVgznjeroS ]^ M v5pu0X1(u JSYfB5C@ Ѡ*(Q Ơ*XU+`miiUk]ԪiX1U A4 `Fb - U(@,!u7!dn8ȭ ;3xK =RV\5=޺ ̤Y{Tܲ"~D{R!J3OGtL-x"K{xoޣI#ޠ 8aB-!#̺Z&M>Hayt=HaytI6 < AUU0v iՖm+UmبaŴBKdȑP"B[1e&$ugQ֜ҸDlPt=#Y:rv~ Ux7FsMtӟCNvA"SɕX&m>1R-?N, bJI=ZK?tx ^j!FZlH7X,lvuxA %/Hb: ``!av5ôjihꪡTF @{ObI:q kz73`ȨgpcvT bU%g$e"Ȁbv'B̄ob>` y"M۳)a@|ceGǴf^h+`09i2@v'f}#=;0;)~DSfIOO"dȈ`Tnutt" `ԒefƖtALRߩf3$`H0= ,Bז$G:o112[W8S40O\5O;,ɆڡӛH 9#&=YW 1.C}K,eSyn[,QP|V=za#{XV7L_+1D婪"0aU͢Z0T CmCcA-&"!  `_o28F9ЌAQI8p$04EjlN=HFo8, UlE֟N7p*CP9%17wvT6/[ >>&D7}~GŽ\kwi밃(fT@T 'ݸ| @뎓n\j u pw:D^ sݽٗ"Ahm 5Fcsp1 1L۾3 `%?]_*=EEiI2GFhj Mݵ;_ʪսT PhTb&VxA%hb%wft#/"$ ŪjQTf:*ZT*EQaM4-E`&@1Req_ ) c gFo+!!M7zǜ3#5"kY ۞^ID>KX&]]0SX"ic4p*4S;~{k-f_ޱu'ܵ,+qarOc ;0@-@b ]0cϱ@I"GXPjh:V8Zm`bS1 KKSEPLK,laH@dY,;NÛwGRp~ HA$z)\ ̂gKM/TUhATMGjauU5EՎ0 BL9 ) BfaLvװ8g%XCE"66 @Duo#-zy y .Fy2Hy; gHּ r+3b} fӾ1ӷ1f[J3HrK"DUʃbP ۏSzF X {Sn,.0zgx+ %QU@ f ]-UV*jZED"RJuN8LCl 0RH "Z"`K; M;Ȓ1)$0KQXzr{@IDEzuˑPD'" G<L̛J'0kO `V0,>zLCn'u`Q@ k9CICg>0H1)9x|AёG$ KKK +jƊ-jiiXZbZXv-(@D,6 c3/p iP~qn:a;CQ8mPɄOdOKz]ݧ@ k_/'Ƀǁel9b-،Rx6C YCL 3\ۥS5s[ ݼ~ TkU_L>ܨ]:PKP ߾g 7MKEmDNjac T0L VZVkCE0+4GA?A`"ᬾg3i3&Rl#>06rb- s !;] )KڢNl\PfdqnHrff"|%|:"CV'Ks}B~BZ#ChȩɠLWM9I0}~RJHTwRJHTLXe6bGbATULð`ZbŴjQ-KeXVvXU`Bm; H76_jC{[VKnʈ/D$_C,! < Up .` .8 Vo@ٻY !g].arq&ZNkB] ~f!1|5diE/OTjMGc8XV QŖjZ VbaXTT14" =ה k6$V֟aW[/MtTH6 @DAv+ =BV$M3{|399@wR 帅aӭ%anA`BzdCsH"'s1D}36CP#ya9J ]V^@Dy,6`XiQee+`F VbWaśC0R,gma Ĥbd# 3$jC%)@.},NOvr&VbOLt5Q7L Bp$"|*0rݛJ4VJTdc2$_&F3Zp~SWZēl(OggS@])JyTm_@q < BPU1:m̆i`SŰjXTmY(bմ1Lp L FmV hie"' RůW8ѭq85TeVK:K>Y:CʉС*S 2EffƬ 76CRƗݧm=T&+hվ+V"piv:4?ف{_X~wƥA3 ?8Lr % v#UE%AUŊPPjG yjaU;mXZjV-+Xbia ]`P0^Kp$$GB(h`KZ=4@ 1*2a $LSZBB$#eeYc]{ mrfŗ:nzRzu(^ˍZ%$*XMaTD-jZ L0%Vb`( "a/4{B;lL$$#,u@0"$ގGv c}j ` Mβ.j u0 vC,d]}lYP)Z=+WG`NiW"ѷ g܊VȠW3J%$b՝g$<3ƴf:ۥYrvd1Y%%0SU QU!ZibZvزbiZ jn_C#@#rhw:tG@DLWWJ5뿮W'D?sޅsc5˕ux8 &w0(ROmh2}"q~@LHr#r2 3 <{Or$?rڒC+P2 v A -<# Q ["V  KÊbX`NKKk P5-UbJQ+p:J YJKqmʿ^;,BP v!%y;KNf(3ߣe phlM!*kr3EOi-&}п>sZ,>8ͅ^O+` ;D[ ~w R{ "]y$xTE`TM,,-0-i 0MKU5j kkBLAA\t2xj YR4VX,j0u8 k 0l$X 1WфHǑSg@W'iy6_vE W*29cMSF5A|Vp&~ HS.;Ҋ[\Y"293~vܨBwvܨB#ӆx< TUiZâ/Z%4lVeA"!aBB(P6`}e&=sHh"8A?(dl\T\_)llEvUz#΂Ix&/coل4=M4&aS.|2sm4AiZ!~0F `V+Tv) 1Ƥ 0hv"cƞb1COP1sGg'O*4-VӊQS Wf jYe!jI1 >Ս El?7;  Di#z~tY}/ǐu\~=14u8^~#hM€prqCICDM%k+T/a>n)YܜZ5,n;Hlމ&c@^vܨUB%F*ݰa&bV xAU1EU-jIPM8͊c<1DMK Uӈ KHXA"Y#S5=[Qn*Z%ٙK 2q.Cm0Sϵ.v>&&MO iMAU%H*F/{;1r㣔\ϾLhI |&CXv|.= v܀o%J ^ Zp#*Dnw#3*vbX۶ƶXXX B T ul/K!F( @#n{@0 ^t/N7ȑùy [5ehP NwB\48#yL%0RUo)m F"xC@1[Gٞ1 cPc?<p( >vhXC$;n4!-x!<"QU,8ŰaŊZUTja. bXu(!r e4b2-,#ˆCaq \w7H"0Dg1^"$by1Tytu R]mh(S7!|n+ ҆Yf|_o.hH@/mit(*]࿴UeP~ܨC+kqv-yǣxQ^PU 1T;QU1l,´6Ml`K,R"T40:"DEN*S`ז':P,+ɅI"`0(: f9C0a&o.v{]˸݌8pt0U$4.K.@[ToxTr] Y)~Ԥl7C!fӴHªRcTȽ@ѳa\v܀];n Zy1'$AU4mbw4ji5PjZaU,,k av1b:0 k>ӏ.2rK - G(M Q n9ޓ yOD%s8L@`l :!LM_&Ag``b"P:4k9ݹi4 L۰nLCWAV7vnq#V  ;SUE @*ņuP ;UpTgVN %}j*iDb%jD PBN2XP`gxZjB'z}3YèRfA2l,cn2&]ۤadA;dAtys {P?Ջ4 H04z`.`=9? >vN7ܰA [hy1!yA4. 70bUlaZKk+U S!A2Do4ZgIB\z/Co EÝCTϪk(bęCLz?48 $:m(vwf bN;;Ul6#_zo̊jZΗWNɕ3]mrclsK<C^vZXˎ {xǵdJ jafP P[m+X X6bUKjM,PR+?ΤFZh4p)d +@5BWy!巭K5[ 6 5 m@[ewj~-ENMR]EhXddF_6|gq[Sq-4F0˪Y] jWԢjuܘU3uܘU3oܼ3yPk1 fPNC Ӗ!VM[jUۆ-ҰðTр@a4"[Ȅ.`ޙ5A&A:zĭDe-Aǟ`L/7O:!(=,a$wk ݜmzilT( Kbˍ`*`y 5>5x=` B lmms-1.1.3/data/samples/misc/bass!.ogg000066400000000000000000000165651247673406200175130ustar00rootroot00000000000000OggSkEε.vorbisD8OggSkEGT-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI΄%QćTp˖}+[=Hم![i>Oζo5%Ձ( P␔~lnܫԑa-GHמ/^ZUUN , HԫT4XnѢt-.}I{98%ҬC{L>_,:|j7!X2yGg "Ix8i싘ڤL3B ˬssfs0<#c2&RT;Z`DajEtIt|F˵l*F喫0I1v-^UUUf  βNh*U_2gM&Ioߐ)[}6{Ey?]7 :7\lDF{ i$^|&K Գ^l3`׌~&"„r$K\!aD:Wg|Bo3qx:g:%3,pSUVHH$'׫}#1kTg)DRDzJr`85ɹ# x w8kksP ,ZF!B}yzlxVUIv:=}'oihépXkz|#DKvQs͗e0. Eq'gp}T5%8 "RoY8PѣW뷢sY ^X^b Ѷ8z-yM@!L& *k۵ys^dմR>ڧM /XWܪJVs)#Ai*.ŃoANۍNQюUKIUԎߩ>e\䐃|fwKC.'I MjؼȐR3m {~R؉L[>~̯ª{|K]&%־,G+kT2Wmw%Vq L/^E kyA^R\3+CR}mm;o˪"wg`JQɤLiBO_wGvB(qM[q4ʈchlo'X-x HD H!c_O'-t$}|pӬ BߦZa(QeQ`/U0@eȐTF]֩2۳f'M$>Ǘ5U3026]4\Y7:T/v/ovR=Tw~k.|l\VdI a{& kFWZxh7}f4Op mոUUE%}SNiz7]Yv>$z%ͰaVSս6J$"QH*2/64I {w~^>6i; r W+lN..rȩ37Ohz/Y3;40:۶^L+}|S3Jk`H^3p,* 6z 3||}a#?迉3,d$+qVUUUhygZN۽Zdцŝc=S4 'T8N@sabqhȳCž.&s :  ɗv 1ʰ r )~N(;EB"* 3ٷx;*{E[-?>U͏*~^Wdۘ %gWrB & OgB0|Vm)!UuSzJsac{2 uH,%6p[|@0Z 'q C"KKAZUԊƥ/6+?|@g5@ML0 *dq{晴& x/6E$0a{|#]VێyQ9' Ɯl$VN`Gڛl͎q5A[I_43mN5 `U!SHhguKzf*oܱW ᫓_o*K&@k9d|NxV et̳_ϼ4sY|n6lmms-1.1.3/data/samples/misc/breath01.ogg000066400000000000000000001325411247673406200201210ustar00rootroot00000000000000OggSE 7hvorbisD8OggSE 7=-T-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIX)@.gP\U$HziƔz=ڪiP֖ 'KVx\vңΖGdR›]TirOwrlI6c̑$X,$֥РtrԱw Q<"{zw\t)4&Y3+&;D!3*vk^r BleiV6ALCn( iPمi ` 2๯,a[VȒWf|qzy=yJ9'48.3ckJ 7aI(sб.=mǪ̒ҜKa-UOT+CUD+ȟ%'~~촤 '|30X=9^}nbV2HJC$P =kO^{ :Asi0Tb(z>͚q84|g23TUIB8n']Kez5wnN쎫[.ƿ&yҳ]s7;4c$efv6IYvg,R[:,K&%eޓ@gN4>/ 71W^Om l>o.k,IT|E:vٵ*6VQ=a=ИP&oJo-Wgrr @!BV1EBķ'JHZY i #3C P#{`%n~Q%FageU4*pWM[9fy6;+~/KomjO6{kW;xz$.%p9u/i4q$Ab*Ķ1Yv磘պ6,Sf6΢lv~Ј4 /.AR8ǃP!RH{ J`U i70hlh4 d8)^c<\?f}n~_%4u>nUnQ"R&d}pZOZ 1}~9Q^S:)-P@%KZx>u4i{Rn1ܒmK ]Fp]hMN<áe>=A%O8_T9\oJti6 %IMC$^^Tx:^VSx(n,ɸUUЎ3OO'ti (YeY}r>^qٓqw]Nr䖌%).֑FOqJ3 ;$ۏc@6_4 8=INڭQ,l7di_KoctN]\\j} eYQ yv3? 3H<|UL*%vǝo.TR2kR ika86lF皬4kk[\pc@Cr:3E'zW=9;/<ގ. ߳me{mq$MUw-7” Ee^yvKυ{?ezf])ϬxKXثUtlm3baD<ƴ U%2<x(K@8މ670>iւ e~U\x㍛⼪4. }[WƟ6ݻ?}wBQ77m Cik)&:z|R'}V'~~᜔T'M%QCXsn:Q#WgT=o422R`HK_L˨{A!g~bMgwc h)UWt!F\r?BAkmމBtv<8b6B  FƳ.^ųIeͰ6YUUOC_q?~Z?Þ3fTf;6?m쎿ܮY͛_#S^ㆊ;)ⲣ'5!!rZڻGu'Ζ'0Yj{뷼Py]\r-bcS=}p@gFd,ڿeI\^8@7 &c4e7%P=xy*«DxxDmUU}Ic=EVnTAWKYe~-~YpX\E,u$6-ڴ"bʎ]M@Hl*BGtPDxi6Pތ<,)W oMh`ʑ^&jak2VQUYܦlyYVwloV G0fB{=0g-o`ݨxzC53| WUjE_ߟƶ晷frmg'_yuAJg 7 u[GuuTV 2tğ(}4{բK,;"۪V ř̴kB> fT_S+.m: w|m?W}2gs.KvKTrk P4xޙZo= O:ZK?Ⱥ&5kiϒ7n5[*_Q-*.^:G~2pb{/C"KN$BIc珜 Lu: bs4N Y ݊J֯lOkI5#\h{|(WLD @wFDJ;;6ryЙ[Ƈu|Es烪@pdY2)%$Z މֆP>lL?fY-㒝ٺO7Ŭ*݇p4R߿;#>ox}|_r^eכz'/PjZl{vI41:Dnֽvm#(+3$/ZQ}phW$I*N޼OFh`;_'?cAm}\RW-Ms8>+U+RoT(aցxމ6B? =O6I!h/ C皌|PڡxxU:8]`=K:z?98{{O^p}o}9Zm#~|ܬdOQ=#?ާ9i"$Iyu~#E|'u'ѴGEɫ#*tjEg~*_N@G嫕9e,,n3l;ecb.&BĪ 1 OggSE 7-\瞙Tt ֆMo4ҁۡ=SefW%|RBT:⶛?px/K;!JJnO]׵"t}Ve"(|O~2Z(mnk~bh&KUbgMVc2{º4};O^`Z{> [1fˆ77&q>(o5eU3a]ߎ+&%z6%<{~úZ>e^/~(ATG,7\c'.iIM[+w#ˮ;dRV$dH$+/ vնmy|-!HH`}x8j/7n Tr3$F'  ~zMG5FδZFGT^QZύUKVUOOqiƏa뢳UWƥ>npOb@*U= /pɑ,n߽P3ې$9I$pnGxģ-~H_5DN$LEA|NΦX|c ތ| 0Ѕ׿^J+k3U-(36W\QO@ BM%KikDZ? =dka/&ZCy=M6_>Ϋ bݣfqc/8O>Ah;R9khy ݚ|Zؐj?|>I&RsGO嶗;2=A ;[UB~H¹-I*g:Z䜏ZlGqqlͅ / UsP<Q1HͲ0Pv2`93`!.6Lђؤi' `<)[".^YUUw~Xm:6=;wpsS)Cu>pyj2$N$N_;nͤ!اNmCv)&ӫ@!i+ݫW$i;ÿM)껶s#Zv>p1#VKA%X$B1(@މR(g7i;w{g|:ƅ[U%~ݸvTuS'7\J]ݰyq{|w.~fYڬYJp $X!D~pTlͲcyD2B,EQs7޴3U~r&-^UH-3|oFi$tj}S~c@'X.;AP% @ 6‰oN7XIS4 'iMW*./1UU\)kYz}7Q:uuz9Omγq݌nJI\f,aW2թIF*$N!b8ޙNYop>&V#i)xFNKX}xkty_Mͪ$@?{E8W]_\edݓx+G.VR[>u}K+8'rf$gzwB,i{NڍB!ǿiZ슴?ڥ+_v$ΒOK'8 "*Pg/blUYKM8 U˴6 4ޙNn\"o!b("e\xƛ=,n*n/96:I޿\ݶGR۵O=#zE$'V'E=%^_"J  {B5Ib{w^nIUH ^nzJN|NnO˰L"n+<{#}FJ(NJ4CD. +H΋J:ҙNމntj8o]V3WUtb-|XNph+GX]znu|w'wr|i39Z1jvNDhi\AI9Pr$WnrJ#@k5ܯoH6hbwŨ8=c7ÛD4zuzj9#k,VU i b4% A ޙw LG/ 7efQ88iL˪]~},R<,<ӊS?5-u%MWvo}*?#E}&. 3o908|}oXD;ֆBn4U =N=kȥE" ;?/o/xHaѕY s?e 4d,(ڈ/ nTKa5Xg:1 2ļxcTU~vO0i#{üjmW VeOO;ߗ;I!Ku&"w^GeI{|o_]?I"Ah9 z&ZX}[Z%-ՆJҙU:On}u ]c{T+ӓ%Ip XAZpD%ޙƉ?\M:3b?@ƃ`鬣ws%Vb/= ;ۖ$@:Qj3_.pכNډѕx{Ŏ{_p<3g{ݶ;ogjeIiǷMGFwn Nu$+-nKlO6U}{?ݳHNv ^^x_@ӆ5[X\vG_Y^ Lp+AJ($m$OH`ޙNڋ_ nl $zXċ<[ajTU/[,= :åOwTw\{Uk䳗Rz"b۟S#D6"ӵmydm"9sܮu4~3K&]Q^7piҺ᫧$3*ΦcF. "{CIt?dr42b!Tբ6&uG0$&B+4΋ =Yt^ QWJ:BuofvƍVUލrs>v>g% F/ZCޟv_vƆ^%ᐇ:9}ѝiRj\Ңb|HII |}WDin/, eʐ罙*~=gsϯ RI$p$w  z qn $:94XgFF؋pv7-@˕Xrh Qy.g˯.qꢺ?Z׵n $juqFIwN =1RI5+u:F(0dWnEorf?Go~ؕ4,M3X0g'WytvuYnͿvh P4 M jɠ\ޙ.z{x3|@d`sͨmJ7t.ynewk//7Yg^9~075PٻobFݱNFN,kݶۏik@neo9$LN- mzsr|R7?SY\a+ lϩfÅ'Z!@Ey Xc $Z0&)@:LgEzKa%eյm)$gm2y"_]|mcx_p}y-da ؿoIuåeJ-Z&ZA;@3+fŸW vZk9SkS@۾w폣ɉ[ MX&7('5֫9o1b5"A*BP4 i& pn9@=: Lы_@]omFyta9Uk)G(7E YӮ߉kLjl 3y$rK훼ݯgȽт{I&k?:ܘrϿNbP75mkWd,=(U ]r `  ]H0@'#>UӃ1 4kn+a`yYܪy!\G90@1alrŗ/!gf0c !zGEyN|qHn)~C(!%0@T]Mԋb5, VUQprӥ?vb>U_MMm۱̎joi^K>TF}onJ~lr{tL5vv&=Zv6]k/+(}IOw ]$CE}9fa;!n|ﳨb\zv0dAXB4߉?k!H i$.cH0jáI|K?@p>*K`֍VYUU2[kƗM -߷\[?:FvV]pIGhw89ay\FE@/4O|RtpiKߵ @wA:MN"ӿS([`~Eo'm >Nc,hgV[R B2`p~ Y4tY>p\3 >Rñ7մUUa[ߛbdx\._~z{x}oR7)q0 r+"BQʇî8c ¤'ɡMב'"VEJ։fmv9~y36m s+~jRv. /+lZwKvj/k T2|ZqzF| (plQ&.Ei83$0*Fh6xV`3 fn 2(j+ausɠzW͟+~qiE;w{y<QpNta"،$.i&OTJ/eh99#:Wc.$IO|U]Nۉ[kMqBV ϊ4 U> &Cp@ `.sjXtM !@-:d,jf{p;Ø&UUI]ĩ%ELdΙt"#Nw-QӇ08n"=)vngBp4 mR`.pdw[z}> Ck%vhI/UEΟ9?{/޴-׆}6lWXdc<[I]k`trɀ @CҁOggSE 7$$ޙn.8.:55_DkA cg/"Z^Ν,EM<`޴C͋Օw|uCiM$w`EBhKNߏS|4>psB :"\sR#Y·A[1(cLɉiz嵪J6z2cW>?s @׿l4!` pq4@wBpD`[@,:}6A>eN~?`i&C (0;5geJ"ܢzxbG*88I޽ OïĦIϹb<<(q|M4ΥG4ޢ $r7Z7sJW+'ތ|$e!^;+&V|u:[υL}?a1+.;G:j=9x$QSyΊК ѹpFrهs{t+^UU?Sv~favo Fo|ɍ|W6\Շ\Mvݩf>ҹ]k$LֽhvKs%ٟzI㐓n4 >=V%]߻Ul|(HŒ-^.}vt}bŏ{gK%;{&b9PPJGޙsT>V">}*`\Ub͌۶ĭ:.ؾ;UO.z%[Y(y'?-?Gn9:%{#ўΥ%upSRC$N'>[X,I|:]Dҫk! A@ފ{w'QKv&hYх@9wG>Ver3# bvmhB8V k|REH.c}V^>5QvZWk$7?;Ȗy3{8`ܚyz5n@_$wnl'8Ko9O-Y",@|H78I LzNtw̏TcLurre}kJ2fyЂB32sÎK̤K1;|Ap_G aRj,L)?dd5-``oT: ۘVVUy҂Yf_k`kfn>],z>H.6ݽyxk tTt&i7rݒkү,4އiv1UeNyunL:scs:V&AJ9w@R ޙ.SAԏa83]&NgܷxfxU*zow;'h?/I||=\H>/Uy}:i Ui=]F/tzzi`|.hߚ\~O3t&=zDOȋΞq=~ vXNY{q1*y|Cvr7AeG t  Bŀ8Gjؤ}ǘ?[c:Yّ3U/-^U0,?FMjiM*\ ~-<)y-=M~\r[[OI]i#6/^W7UN _)޵ãPĘhA4}~e7m$_GSճg^޺~kP/H 36eKEc]pNN6Ē8H8P Z^Z![Ǵl4=^:RKد|xYUUE{\Tчgu;Eق_,/GvٯpmΤ˞<58qtIU+o{}C;޽eUrqGfx\VDe'2%MfU%3}O9Hye[M:v(-8T*ud# jɺ,5ۨ 4A O9$ :^jݪ/jgzMPY9b.-kƛauJп WuNKmFWsBSNghÞjʇJOۛȓ2#>3[ɱd/u+[$+Ui:}Pb Np^?yotmzmg/V@Gr~ ͥ"kɍl*B/{l$ǔjbFђ9Osv$IYJ4<$`L j,mDA+tVO-kYD>jz,zNEm=h_][=si>>!?~zr: rԩw$Hk돯}F -1^ڠ/CCnjRv3&'9}rs[Sׯ6$IFeo= ^w@pf{M|٥^j-fLFL{ۮt9d @"SykX 0@lpŽƒP^if`eT|qf\/˷]?ʼn85Ww٣ֵRpwG}Lek2ugQK;|J k4$qDOZ|gS2Kbea^&_/7ulb3P=c\r͊9 %OggSfE 73)|rA+4Hgz pI5[&+i΃wͺ1!D=[:vM3o{%7h}gT%9>jY&!'I"IN%rQnb״qL5n?;Yu'${\''nI_bg/-]ΏO__ WUWJXFlИ5] %p@(PDhzɽ@B4:KK|ﭴ7Yܪ* OFjy8-|\}鳭8[s,?R>Wﳉݶ9}Kr)~&M붇Ѫzh$O.Hu^-6)&4zS^Py7p= _tJoO;ռbv$B["1@H.А(м/\gzl'mZ {9zL^U")=?4rgp'^9XIGPGJo<1)NC_V;-KM% I$9M_+W*+ Fw}?n;x$JGJp{I-6Z^G(pijwi^o^$: H>{p 0hN0!V^kHcNcq>S?k JB{n*fu9,^NmLEtK^ ^ ߭ke1Z=yFM6k>K]Rj$0E/$9K_%M>%V*bG1P,FW *mnsu 79#֘ Z%A^Z)H {|4JxYu"؋pfZn}R~=yt>b糷qhJyvks'-Ÿ79;۶*ghza:-zM yY&}deOυQٱZ):B[*]婪>Ni((c" ҍ8` *>,@HT9,Les՗a(}73+J"*w3a걇ӝJjxz<+[#[?T*MKtFGoLRR™kjA%SI-erpbqyN^g%:&RqXv%oӳ0#,SEDbΚl.@G^kCS:$D@Z}OMcuMVUuo_/?f><>[X~4mOVs_z =C;kU䈗#ۏz$i٦/F*4HZyu{Ήb1G,<>9CMӫv6M>*X^ܑ/RsX X5^yXXhzͽ(MX^[iVUEɃ?*0y}apM \<)xwd;[!j_#*&δ|7xS;|/봏8uhWbQM<#=YJ/go{0_KU:ͰcrqqԸq `8%$@hDxsڦ#|p~Gy.Z%ٞ6UUQ2وvxquY]*n$ 9u֫ѪKOCH%/iG ] bמRDH]?z|ZOHTQ=>'dT1FW43]#  :udSB䦵v&?*kJH$  @9^,m3ԦF?񈓺6Cz kVUU5`wg.^߯ͷywVwv9tPuVKs:z?Si%exY N%rKOc*K!*hՋ(<}ܾ7IF^-+=ʴg]VtNawh+8E"Rd]szfbe XF7MDhzk?/Mg lf7eUUc}:}o:tUϦw/Sf;]#"t! 5[n UT$V7coyFȝv2NsOWG>w~f%G_j&lM&>tmjx7=}$\-u98>r[9R`ޗR3?X)7– Ǻ1[UUo})^:̍Wu _:ߣo*灯Eک5.^G-}zOb'|On?|[ I& qZc$.q@1p@BiD^[=\m<3_ F`0YU}ͥVv>ԃK67o靪ϫa]#Vcoj^HҪsZǵ@:ߜU])2 tv-mzn6Ǎ [׭"2&=b {- rĬV}c z|̑uqH Ɲ&ƵG [/8Q]cXLc/~czp_cGIoZUUZn ^_ ? ԝw͆/oum}+1)ew<~M I_f#J2 UyvwetI[/ñkf`j2|9>}&&s~%!:֮&|kavZYA×  r()[;2҆`},/2*DVUUQ9̆Z}  >f=am7z67o@rBF'Gai=cPI%<ǎzWAHBV^zs7c{}>?Or|]QJsEm>5j1G "əM+$!2Sipܜ,:րHh8^$lGa/3A`x>lIZ~{J`|x2ƫ** Dʯ"? .p3+(ٺޜ.;[޸U>{1}JvvɬeYgZ3gnx;IPk{%|Vb6^G/~)yɌ8e~f_z&9֪: REoj ݰAA`w0XI|~ 謣9T">[.ڼo<֍Y*0׌\#gíe`_~~6:e4ܠWGZ@>UG/I_ើ9RJ>e~[1cYSo5輏u:ah^Ŷ袯ruZM%JB1! %A # ^ \sOL/ AWƛagܶ ÿ̈́Kl.Z?dWw񇛳ݱ4)RGVz<>]tB@ rET% :oRn`gw{6jJ:]',Mb k8&oؿ7;F\Ķ>Sgk%%J(2$|Y@׀D:OggSE 74>:kkVS#m>/ՆvnvVUU96" ?>lÏy0ZKl?­Í^"c{ap]oU>$Z`I{SN@vJ#Ms-: m+,,Mu1ʝlj,W7.| n϶J$ skm2s*8XV DqiއA|lEy*P9lR#= ;*!_zg~e=Ǐ.׏]?ÄK^Nǯ= -It/{5۪ݞzl?Bt#K24qG6:dorRqnyeF_$x[_qUs<[Ëe.JE-x X P8=/祉4>ϥPRW6l7KMZYUEttt}(ϻ}?vSnh(w_V>_?W$8 IT??3'aKoR*S!",>)ZY:<3MK< !j=i={7_r|\5̴/l\泰2AU ;?}K% vp:|̨qo )%hB >/s 1>{?p66 PG;ƪ(9+ɬ\ӚVo V3W{|_J7+U8ײ~Yj|;?ye'TFkխধlY22^eܫYp83p0ZcտbAE!ie*-; H+P24 >w4M,cO LйDuNX|ܰ:L*OՎ&Çw}u[[?>^׾eVPY9;,]{rE}Y}<;,jn~job%g ѿ''?[~qɫ+o7͖!Vb5ߊrŬomH*2ju>sa]ؤOyacpjQݏafGq~ӪTp{8>re/u%sG㣳TE+iBV&əYV>{عDE(ݖ:#ZnuVZMҦ<$G@%$R~9~pju|X)g^b㳡<'?>>|3*w_+800.Ilb >I(PcK B0;msKSUfn<,nUѥoɱrnZOb󞿐,yS!#q3_5U^k4[W?;!| ~ǧe٧d(j%Mu[ճګ/{{ͼK[m%XgzG?KqyVX*շ[kɣضw^xb W}Os˷&j)jlBujj#ɟ_Z5kwIY%ǩhZز^[}GO,tr&N79'bs3Q%-q[E57;sk6`{_JNo&,~$ʼnl8R"MH( l\唇c>ӧa0QZsݞO+nUUtAYZEW_O?wy>{q*yAwps_} kF0B~ ܸ,K`[ɺ N:Gzf@3eO^&fT[@ׇ ils:ŹmD|."[ځhb>`X$ 4} @i5pofv[H-yK]os+njϓʅϓ:oL.;:SZG<ȭ:3}zI'%lgq^d], VivI)qy CVW=sU|m$?낼xdrCqCT^_BA >Y(Puc;TBӗ~;ni,?Ϫixq~1^#: )jq?Ї/uy~/irO^u@YoIq^xj^w9LDUJrg*M寲6%w}ȷ򳵑7k$_iQ|'w)uQQs7=)K6c]^_,g0WzN"ExhYpX 4r$yҎ>~>/LklG%nwϰǮl.*!Z]^a`j8]_oVu@~v|)_ ɀvȁ;u^dվ5OO/kTsJD@ߕ'Y?FW꽬姈ZKe)$[ҟVtXj:6rH.֖IߢZAwg8B >M 癉Lg&?;&-vYUU8筋ͭ7_۷ջO7RBsIV9<F;`]I+!孟Jc4>ߚe\.oYR (ms@C3a۵i^t?o1];؆r3oIR˨{$ϒ50pr I,V0p@ wSi M盉I}ͪ*"7뢇;^j>>1/bA{e~gw9D>UHeV)ԂNE"fB7HW;&9r#_9s$62;yb-"#qB%YU' وW})*j Q4W|Z!Y,B8>o_ 15Pظ1pv<7YUUB}ݬHVh_M^~ěūW;;]oU #sM4ڷ[]$$Nv;<=}/H4T+1p"K/}~o%KH~-Uj|hj.*ҴޘZ[ׅ7k]]0:Bp > :oqF} N tz%rD|իҝaʝ;?-IX$Kku^I|;3iCĀ6k( l4QMH/KAnNY>CCI5PlOggSE 7Aɽÿ>n?@UnBa~8m?[.Wk^+Y@N*mLH͵3 Lov{9:oy#I8` ޙ>-o Je]>ߐuO=*Jƍ*!e`S}FwN?>?<9Fv9w Lk8j4@ rpG$h2oҪjv Hɒ{snI\$x~\JTb7跽 1I9f+9* M*JNj=R%̎߫(\,l9}>ϫonc:C{OqVθmVVUBv|h^/V_\]h{ⰩR)9hw'}<^kך2Ƈi {>}H2߶g=jB"H1SW"sld8=d@ɑƟHr3kc}7h 8:?Y0fp I4^Vڵah4 >PL_6^eUspʪ""J>ZiT W[[f/~HEm UMTsq}~6^aj=khBo/*>c@U7O>SKNuvX}v]_o\|CT7T&h׺?pK+paJ3@* e$0Pp@_ 9m5g-~l)8mannҪ*2lE˩ӏe?8縭#:skЯ$OW. Ra͐B|QgE$ !zo;ۊJ_e'+$! uLwnab#8n-j7o.Ia2uCy߂ k  X0  ~lo éE6o:86LAPc|mMVU%"4J|j=yrE{1*=_Ӄϟ#+NWW:s=|tSF\ao4.ވ IO3h[ODzOs(ߟ=j.gkﶷ}7Pf~Tb ⮌IB H@8~m%&4}?7CGiQ^33F Qm('7y{{Y%\f}tvqv>hC XbtZC獷q?c#ד;dshQu}Zg;Q:5\j&M,J&#miEud&3fIy FF@om+>o@ kn+id/t!29Z_n>}kj1V4חkOϕ N2mҁ׎-6q_㯷3ݽH?F҃~r0T?.Iȷ?mawQT˰U8B-i Oq `kA' 8ooLca6|Cm53Ɠک)0V !aW|S/zD]w^ǿٯ?֤D{8ZK_`ane,JVzӴ1ח~Дig#ю,;~rҺٰ2= $ 8 p~=ƶ'4&Ø5Z;$@>*>+'> xoǯGos$~sKzt//p{ܟ}ݚ=H rCFJQd2"$ P[X9 p~ Pm ~_zNO@G{ftH,z?=}_<_\kF%uQ8vBK t#*8}(㳪P)uf;g>ȝg},-fDD>,n 8n$Sߵ3S}@ H0-ή&0 ~mP=6~s"gWV㭕`|(3@UV/R?Go^_g|m?ʡI >\|woV;+!Y O}S/|rrt ſ %gժL@kԿD|дEڽЬJW3BI!D.%G p~o kN+1>tenq|07좙U"Vj4r W?ëv->>z 7*'jև'u)V?Mҕn_^wvWNd#-_7 a|[OfƇ'r÷9K@bx`Q Gjh ~o@ eM?/+&P{|p/OaWUDChpkyQ]$y~XgK yU_K}/֌|#YP~mo:˘6QtgJ'~_gVS9CfntǺsVPo<-V ;\j`As'CΫ:V&9s:g "Kt,D'XZj^Җj>~?'ym5o&Ξ $ XE=h4 ~o U O_,$i,fY7VI""'/eWى-}ge/|lc}<C{۫ݗpDj%gpB#m}MO אNutd0O+wC16&_]x:uE{7\p OggSfE 7 ~o@9Lф1 k(Sol0H(z 0 wioמcS$d+7S"o3Ӷne)><>aY%,\%MilVMD omi$|rEPZ E+ԇ_EIc{ør|Q @ @>_ U?`׾|;eO+zaXU$D<_~*_^A{tzR0ËdW ·E\m|>u)1 ҏX-E݊'./ Hu~n9'3^aK]q6'@GEH4 `~?F߀΄:B_( t=m<{))!" r,=6{n'\zGR>3ץN.`)r}cWsiTN A=ЗT=II#xܓ['pds |((@@0>~_@g˘ƢB>8X펾3YwӟCr({›0u M~-;w8J܋}tER'IYGI=|uUh1 Qg0I>:F'pi~G ǜ6zmv`+b::F둳+t;6^* ySJnd.leo+Fӡ{5K'g[TF*.?0צ_Hu7I.?;YuŸ (E G/dcBӟ} 뙆W5Jú)!!!`B[,^_Wvsnqw m'Il<^Zɹ"=^zN̛WZ"Y Gҟ\g+4-~ ``/0p(> z|;1D0cGqc خ*o?Ti.<§u^P?gӏ*Lw&^CZ঎k_oi U٢CGx-G~])OmN۸Oô@zY/:D_~K&ڛU5B (3X$,4'sG1#}hX7%  zX>V m~huGio^W4'?<k^=̑$Qr?eJBjC߉zx/ܲlI74DNN_W_v~ya "Clpp p>~z9Dߏ{@70UhpfvD"GwQ\SA]r2^pd!r%"RV%c#0~-DA XOq鯒"ۇbmop:p:G΄xXhO:cބ1 hna!2~B{<ͭ[y=3Kmez\׈y7K1Α8+!7s*a#'e'iemd'D1)y,l@yE'`mA ~G ,gM9F0 N s+Ô$BvT}-o}B9Ki||k@˝9<8b*뼨rX~fhXn&!ĒV" 9$5"pr_ImĈ .0HM׹Zm5l40 (:DH0;å鵽$mŅ<ܸlV2KkաJFq_y2r5^6|)֖z_NP~O,Gr9ju$hH ߀6 G_> 8=A_.meuzK"^lR:1UQΜ<Ϟ篟њVұeS?]H'wi֟v`+̑v{9{[ѡԹb@.kʀ~ysgh{8eN+aL{|nzUYt> ٙ@?`mx;QϵR+,X7%$"ux)t'!>f4_wQ#=扚uE6hF/VCVBnkI$0eٙcP(z峍G{vf,6Ʉ^??oh2܏lnyn]x}h~x]!%r͒57vYH^G W"Eӷ+x mNqė 9 >yDˮ3އyg{G0ߛ {Kye΅ٱw?itͪ`y0mroZ*n/uJ$zu1U Ľ]ozՁE\WI^׳5B8\sN>K_rwH  8zi)!z㦄ev4TV_ 3v}*_xPR_ŀEJ[Ϯk.* "em7s‹ܽj A:n5z~Ǵ3K$-9ol@>\3!>ϝ0"QAyn* z͸]BBña:y{eH D<ўH/w:&LN ̿O{OD|mG;!pĩ$TXӿ4m>J $N5RK7l>3:{>|;cd9coaa!!`PjXg/{_ܱ۞uQcwfJAuixVP㌨>ԅxBe-~'$cz6}*h$zNKN=$˹+Ȉ.fP4>um M]"^>&-`l͸IByZkUCmzҹ׀Dn:T@q~=lD:XvQ΄:}{Jܑ,9['j4HMO֫p%ɒ%z6呕 >߳3Q:}D7sbx{-!!ZSoݺuI]~m'ǿ%/BD$ioqB35fQqzq7K>O>zk#RR"dqXUOggSE 7 Nf2~S!c6}l"potؖ1Iks1<8`EwS{LZNO%L_vr+ aMUJ7*rk}Q-3"$/Q_qYXnFx땠@~N`۽cʌ⦄DjOla'Wgy۳k6oll{ө_$n$CT??kyaB|'8m`9:} Mjc1okeJH$[^;n}at8ozo$w=c %? m^/&<$%H$^oD߾V-@c'9-* 7 (yBoM;?X{3*:L @U0hG_|:ܱέZx4:*Nob |xzvPnO@Hx^m@ӨjsCjz*Hπ>߳3S?Mӟc<}9M"$Go\o[n uw7$X?'Ϲ&P!וfrziur^^tr'ʮ~r}n  UDxg .s%$ |0noKg;UN~Ǵ)>W'Vh@dz` }]~IO/CoCʡW;9;L7J=t䪹e( >um߳3ѪsL`QM <㞝W?鳺lz]'̩ʪvϋ|4hۼHFz戬t #,]1-pǷ&9$nZӪo??]3Phus'TM^31X?Xk{ \ z׹rre?n|8%4W)BR~Y"B.?]I }~y˔zgOГ)O-Cg|5Yz >umߓS1Yc,f4{/{ 0?Ģ3%Bre3IQ ԝVxeqɋvo7`b']{NЯ;Ⓟ+VӗhKϿ~Iq"c@٩(K}attp%$}qg'^gǾ]ׅ!}߇{6E*GZImXg6Z}pJlbG6qi'zsE&DZ=#Es??x 0uP MLczI _30nm8qֻG/>}', oLMq콿?R;@Tot'Sǟ9"/&;L%z -nӟ/g.x~@T{ߵ΄''X}yL7;Mt%1P<`'zi~Lak\1{s*bxB~Յ~| Wy>﬿ :\0INr=>~H@nc=G=Y b}} ĉ^ʯO@h>ukߓ@~hZS1=ƣ[iX"gw=xdeww|k!u?t9+iK3zyJ^{iǶ|d4E]^2!j_2٭L }2Y.腦bMmi);=j~x\ps~~GH[6_έYV#;|2g7fRP+(')]z%@8Y$ohpduD4 M_L謟c,=>vJuˇ\]?g7on_X_>9R^d­ᩪp?F.5"I'ߩ7A."ߏ`[3 >\~gs!Yc,񽕆%`>χ-Nwdmtv}M5oAC7-5쥐{kw?$o%$Nc!o׍@r, azl'n3>L4 l.ZzJ (yLiK_[oZ]z]ܯu"kw1 O~ e5INnbMn-9nm(n]qMJ;dKr""GR0 >TFU{G1AUOovl):~}|P6u~8&/W$'>N/:eUlJ(>%}'sE;qhG>-ONXIFu}`OXb׷M' $Ouyn)$nsy1뚳쓜Jl@X5r[)5NdX[Ree2Q 7>o>c<5M]w~"{1auH8Ny|_$= wJŝOdCy׷\bsYR9}ݞl&lzRԧ$ AVO;5">5}g65l`|'}>ח\ܤGtkIN*yD};I<ԭ) _5D;9*fR1xߣw^ƒN >-g@w?OtsK<5n؜dmx_~ūt_O>ƒ|z+_jp?#C:KuIܱEDNaFqehBĴy˞>|&ܷ4d4$Нc(cG˦~ݗw_}RYUvoˮ+oJ &u8uGkuAc yλW$\"+I`>4Fߤ%k}i׃f;y$@lg!$^ZU o(𝷜La$[\݊/ƳJaR%TV$_HBiqU%PhOggSrE 7 c;)&~ywwvxwvvpongkqjnddhha__aYXTV\SP>oF K tM{D@Avkl.om^oY+[UYݫUqV|{[xbt[W'ۏDڴ(Î)(;K !@>5tg4[I`()#DZҫ ss>N>ͯoTq+[ZU ٍ_9RkQ.҆Ғe$}kk>o t2o }ctX(:$8?xߖW7׳xv~kwHer<}=+d;+auB6>*fF TG*&"hjyD*ݶm@?G>o &hZ) {a7pO~{u!W.67[喯>jlu6*vVg::{+Q`K-E]3>5I49#F_>z45^3DK^Fuzxnz t~h /JvG~4# vyHK 0x)88>5L<ƃ[00:8eD4oKw6{_볋u}}qmŸC_~>]F~"bx֑<ғܺ^"nQjkd@~)C>ui_y`4,Bp/4XFJ`.3g?|}QUМ_ 뒳,mw(ѕ[y4%bʤm`:5!G@>o sE/KHX |$v<ܭߌmlVs~3|{wC*,vCW' |P6/DrN@ >/VC}sɀ^yft lۑ_x u}\&?;;O㫔T/Wad$UX׃.&7bC6rw%21/ii% UY>ǵ~g􎱰ߥ V(10!`,Hj]nΎn{mQ殉&}SE~x;Lu`|h uZm=ek~ɽdD7F80IZ h}@{qshLJ9Ktݙ&|6A1y^.=Cp_ZōSI@27A6-$1{QlX!I+3=+̿vK_ǿ^}P8k>?^wn[W6#lIVӿ܍]f^Vh>/B:F |_݌&g'm d͛g|5wRFP@Jj82:|jf3Șud'G^DD3 >G7)7 >/V c(l4i_,EL*U_e nףuf#ԲBOoYc)/TX} C=B@Oe%ܿ6/{30t? WI<0.tXKM~t.ʑEg=%4}V$X `>Av G  >TcvހD6Iߟgt!|>!I΁@r80^PNٞBwx>O@>/0AFEt ގ ||R_~;zbC9$o{Qkڊ{?NS[OdF7!i9 >/$k@t ѭs ֑Y}oIy9O uɣ2귇QE;Jպ='KhQA xO>/FE0ݎu a~}k_`t?Yazt`ӍtrM;_F>i/|AK"(p>/B ;FE,1nǜǂaX/u{5Vt0JJ/sK5Y/Z!׏Nrlyж >/At2/*o8ZwO_xWcGQ}ro!Kɏuu 9EBLnI%ʱ >/*~qݎ!@eUT2:,]=w`_F.>{*-[ څ|Y=\Q:zA>ڽzZj#}!De; >/B ;1 >P7cVP`9/2o>#@tiGVnÐ>DnףwSPta@@>/pM_!at;%_7ޔ\|ٝWWgn0.nܶenFV&[gM̠Е`od6Y>/.ߥ~1BFH V{ɏwyЧ^0U'7˻m`irCz4QiL@>/.M_Sڬp[Hj5!l4?@t1; f5ƭuSu?'E_F$)v`tH`8I&hߟ8~[>!H  >/*!hZ@rnaf'$xZU.ZW/*F8@c (ɽ/{O߮ylxaHtRzOd+Z$ܴi{8Jv߰>B ;bF8@̭$PoyWn{w?h[Q.zs(T:?tk+'rOH8>/*!hZց9{h/|rz/*M_:( +Q+v\\bVu\ )^ʷ xU1^;>/!~ ƁRy_5/f׷Ss'ߎI ٩ҪZ ĺבئ[i>/!~)Ъs@[H[8/!ߵ~i*Hk|_?@4[_ܼߪ;aGddqa4>/-? p17B=>Gƭ7y>|0^Ms>$Q,WSH#GC!ҋ( >/%~iХ+ ʘcӇ|"p eѮӕHPJ&N«u.>/%~i*l3B_fO}3_8w! 'Fzsui/9982n@hOggSvE 7 q9>/CFepm!  !7}9[CX!183μ lmms-1.1.3/data/samples/misc/buzz!.ogg000066400000000000000000000145441247673406200175500ustar00rootroot00000000000000OggS;p[IިvorbisD8OggS;p[=@-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIrm2{&Y_x#kv`XƅYXղ&lM,ƵaqUE) 1Y4,Ғa m37nqLM[G!UydOS_\IvwLҩ zRigf^*Y޿](Y  CM7֛%}7:MIL i'%v %8.x>khe.RЦZs$E9%]"q޳qYUPMQU*U0-~w:)`jF]@R-=;;n/d2ژ?-GԽm8oTR}Z*ϒْ}h Ylg?skw_, :`ш3ti `H&~jֶr譋ԕԌeƼseZUU%$%XB\.g@oQuO,,m%՝)H{Zgn fJK溡a.NY*H2٭m.~),%oM#9NSμݜ~rw\cef[m{kU=~ L`B  r0VB 0^~Si!Д\Ynn?-UI(=8/ouV(X mZ4}# 2waiLR,<#S9_mH.!C[9VvP}  ';T-E<SN#ל5v8sXMS7>&/icV7ѽfUVQ)7qA1`0`~jf4^\8'ɫ)<'y~g,3\u\YUUB$&&d50NT)dxrh;vAjh┸I053V'H?#̹HP^o|N8E/ևm $`)$_廸XZ\k;X2 wɲF-FП_OIe|Z*bI4%0ȃ%jU8~j億D+Oo91?~xUׅSfUU"mA:St,;ݎ/3]M;u-.P]X1$ymTH7!/RMh5gumGOr\Chrdԭp~MHUR8O!'R|4YOYcFG4ԳcﷷݍW v2+%g pV$! |{ubaHcHi]_(NQP^6,T:~ Y^ruRk(ʪ jE &ҴDh$jɉE;ڦ;㉨ٴQDf=M) ,;&S9u=i ىjtMd&-)ж rf#@zڹK7N>)ggf#E/3J4p!|;֠0qEEa34NR>-$ jlbjM}IҪZ9踼ƕYUURIUmB-Z\ut&n3oL=>_"umv6ˋ$/R 9_(+8xyvMM9nnʟ$u)h7^\Iz쌫*2Ҍt*MgrkrvJɄ%'RZAxBR42RWb9|ጆUΪ%ap:T!;&FЩ.ی82IՄ\~byBS,'m~'[-KT,s25{H\7uSMPřs\bѹYX赞/ۜutz8|\7/,l#\ˏ>oaho?_xlS,7y${o%b909 "lmms-1.1.3/data/samples/misc/dong01.ogg000066400000000000000000000430571247673406200176060ustar00rootroot00000000000000OggS5 VvorbisDwOggS5 |-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSB5 :=l͇ɾگ03/5 gq [1L3T"d*4K(P@#Z燁JIڊNo _{ӿ3l2]>t 01ֱ3Ňvh4%Q@=4K "B{Ӌvh$ kjThC沕.>Ip/xb<őכeMS[QZGoT'4o-<#9+G2W 7+9 KЎ%'8W}B @jhI.uM.?ު?vYq#;r!-pYn=m}%gi[onil̾D.`Q1FTESؒ&UxtqRL=[ sߺs$YPlRl]pO{0  ޒV*c߱p,U&Vc_kX`A\ a *2{Q]@*hq`B- GYn6eַS[3-$Glm;kC5Iv@637?DН۩My0@Z"(UMĶ"nε ds"VAfEmdݛ 86&t%Nܿ>_%;ezvB*݄u&<$b##Y{_Ǚukk:#.G忮<>u./'ܴ58;stuyoAa9i.1ֳ[=ҫrb9dm˴e_X]A;Qgޯltpm-s# Euy qLmb\L@܊V $)D3_65Qev/$ h^?ҍͷLxб6m( &ր&} ^,5TErK! LJYQ[S*_aG\)Qڒk2-fzjq2I[S2k@~ +w' &"Jנ y4@WJwTN?ԯZJn.o:mfd& YI)7uOK@ɨ1@ۇ:w0M4MA+ФIׯ[ ?s y^1ήO[ $YhrfZYB|76T\p10 t )4cu;1٭p-@++6ۀVD5DZHΗ*"V@P)0q9=,-WꎦN )^w+ņ"Q0C&*r4vW|X`/,ڍ9ekb֌Sǥw[T9LmB7pߢ )W'5 Z5vPPS@;.hEk7r~<;EL},ţ8ThK H߄ |پy6sZ/$] 8&ƨr;kLFVU=y(L2ycEĿߏyψ?IR͖I2W^rif`Cs4ڏF(OggS5 w9ZY|݋Q{fXl y͢(!1 kux` ̆ GPΝb⏽VM2="(qP4syw¯|aj$8DYVzpw͇M6x rG%Ҧ h,dAH7Xf~TRطZæ> 9ZtO{rho`Q+R)cܒdd Y92뚨lSٝ\d|!<0 ׿GX;OA h$@_Ԧ3ݷ][pqn( 6~҇#4GA9 ]z?o=6 u}~;E5C2=TyL #KRdoJ*j襖J;  pU@TZ\-tC5+ b;bMACRfֳZܱ%Q)?UO䎮clw@[ }PD;>yD.9-fjss=rڴ+iFFJ9 >^i2bL0Dhb0yԫ{ۛ[@ eӆ́jm%Q0D0y=QYgaMe|&r1<.|gVbx!C@0Ҍ`y5~^RO츹^vc9z:k`~ ӕH'?Bpسl D@)蠭i̬=VHxy;98Qs*}/9o٦N_E){5'MӀ@x|¼zrG:?Cfk̹؟#W%cJkn)YyPʊoʈfS5`wKwJG ^ٝTFϳDlkjkxlMACfoxk)5#Eʌ?d%  M(̵W;92#IFe^7;Ɏ Qߗ z!iFn`b+ 0y|agvm_7R<y=۳ _ )W[+!ZXVyvCfGJߗAHڈi2Oɥfm:IG^Z]g΄Gm.Zwfl6)<(w@)|zeq3}@aݩ{W|[%}8$S"1  &L? Hmޓ``+ F+|N?*t}?V #.ZVҒ6`]FRir^Ks߬wsxoDBF2y7#Eo۾|~`Fc1oO\REdp&/K.G[2q9ʱ@Ak(Z3uCʹ6AʉK^28\tDvQwBԚ}c_xPԔ>=l#  u O&%ŵOmQg5Cyө .9إTk7LO|/}gm.l;H5ȳ2͏~5֗?>K_-&YK-Κ~nt?Āe]g[tvGV~Y1|1 @B)^\AW(/;S1[:2 5aRZJ#i > m10Bi9T߂R\; xpa4H}Xw`h`~̤AzyNǯzC{(mյ >JX歳P:I4mMEqs|BG^mxYȍrv<|-,ԫ >M;&PG>ٝ@?"eg/2a ="̟rD&t@<~ٝ\eA(I.;3Q[⩤uDys<Th(X@uX 0+L8e[B*rƤ׳󙟐]} tzh{* A6}/%-v0iܳK-DF_XdL6@X}o0Wds߉H#%Θ;W/ u R^ɝTeY!j#]{/}0 ?W(, N@ЗۣnAA!j{4\&d}c u cl 'i:;aK9BgpY'P'Iw^;@=f;ٿWZ(Eafx˜]x-\sfl]6{P͂LLe_cX2d=|:HT2в{Fmes@.Qri7KRK)j 0oF:pf04e@n:s f)3oQ mwth xE/H>+_wyb 3@Lfvz`d*R̼IG[24 ^/ܘk+.'4jlLU؈:;j⑸ bSCl$yzqrXK, .IRkL]pi5Wekok'] >5 =@J(y9(KJ~:RcU0ٌ@֮du+WRGa۾y<;z粮}u`y<=SpiKv,Uyx6Jz\'~VKGGZ !eg%ɣrF eZ@^fWQ(d9ұP倾v'Q^P ]Dvsl`0 @R-5I(Z^x+AT@z m,lse|YtoBEѰ哆~>^';{/Gn3+*ZW d zɜ/X ${H)RYf*G=XA>Y @X u:q=4BsWwepi"Ɖ3p]`Yu"Qvt]vc!O)رoRR?B-f}Paw0xCs@7:<Jy;fmvLf_6O6Sýo;Ng^^vF&o*Aq̋L4YFj?Z|y@{)W2p˵ ;[`cMq!+g);L % nqur M]a9DtI»Q;`c_ `C TRJiT?dQj56@K]Qspt+$a_߶"kx#w`SG1=^:41Gs_ thGVJ'3׼r=z7Z#Vuj[엌kWx½ZUM/ak|4C ͗vs?x3VgF{պN$~q<'衕gbl*ɠM\mUQMF%OggS5 ^,=ÊJ~@Բ=1=j'1kl`)yQMT 1$(XNbu|sBz W7l[1=E]NCaJy%e\4w-Y[OQ)hjmǡb毛[Kfo W0;(`ϨAkaSl,)KŸ0F56$qR:= ZgcjԎl(AWE~/G6$( Z[$Rίf1fܷޝq'۔ yD{Xm {bcHR qAr]~W+y<$☋R71yk4Zĭ_F"sL|sZ Z:/`[DWC[xgΔ4g KGjo9WXۤ\jRc f =`+zmv%F۾zAKN'?DT@Tpx'BSɵ,kɾuOwb )\{!}x29A7 \Pxx/y>c^wW?3ΔDboU,׬8v\KEˌsldm%. (]x rBި]Q+:D]~GCeHWذ HDR@N 5j$ +Z_9 \ tcfoUW$Z,k-81'"|=ޗwRzikI[45B}=)(չ,;%:z,nK(#^cЅ%gjS~)LgJEq$=T []Ԩ]Xu;B`C ""Ğ @mN#A}sSGqҤh!#UR!YCdǣ UnuݘRu3R?VFXۣIDM^i^y-?UJ9{NJJYfUz[-ꈩ#2cK4L\K'A;򧻷Mʡި=pnQfM-\@f唰m_XiёǂdZ8e{^3ߦDs ?I@k~N͙nLOOn+Z[[@oxC'p0FU:PJoiUcQ[4?#ߒVEoGbBijCD}Zș-3bϷN ~)ē 0DPި=t 9=XVef+Gf4D)5H4@ *Ydڊm]ok6yrm#Chmڣ&^z_ٸGaL;ՁP'mm[zFb~?x3_jeV*3I/9@-vૻZ5d0HBRx:1mpި=\::"Dn?jO:ZG%^¶o6$HI%/II"JiVrʡ;`tf\LF#תxeETi"k7J}<£Ӌ*)jvXaW./=c"-li>38Zri9ZuEQq8.0Qz|uyu/+ݸX^$* : ꄵVSp_ $(@[3: Aި=heebnh l𒗒@N ^c2OwPb9@f_;?D1,M恟LYo G9dUf c{ym Yޮ~Oew8D9Xq_F)ӵBWdse  FѠT䢋֑SCh\hE_팃@ͩX^S&ޘ=ÈP~!rlsc,@}5"Ej"@Y }d>SAQ@uD+ף<~m=^==ʔ^"k^u)FW@ˏW7;(x7fԶM7_J=S +9Kϼk,!*\.=pw0=bLPR2=ъP- DݥKSͣyAjoss> :35_;[6kz[/[<=Ý\6gեοd侙O6ړNyty~.ןnu}шgtC!rxg;&;1#Z}RfXb^VF[c)ҺZW!c)ި=X.УU2lx4Yb, S(<,IPfWWղ%9@y֯Յd**fGgeEuck𙢖{9aO}bs͇<'\y3``j^O֋{3gW(GWJ-:ўMX s Ɗa`F{tҙj KWm|B@ ޘ=!jp{(Dݭ2h;1{Fsmv<~$$\_=-lyvw0f,5r8J*,ò}Q۾iENX ӐBf0oGg/$бU8cbd+CaOb0t} v wZOВumv %JI/l() W9{"r} !F&ncK1#3:Mory>Kh./(}׈|D-2w(Ry). 7-[I~T *fW`6I=y_f mQJ-YgbcyuGfEJ>˰!Vk!ƥ,fطA* ?ڔH)c2& dst޸M/E{Y!؏S ǾK G $P`y-MEo|d/Ny:-۷fսޙ!u{G[H@ӷ_;ß7}{Oy~yA_fNC6M^{`!{Kc?tO,ʳB{opqs:-<`7s0gb|my+?Ž sJ+9`N8eR@8lmms-1.1.3/data/samples/misc/dong02.ogg000066400000000000000000000323551247673406200176060ustar00rootroot00000000000000OggS5 KՃvorbisDwOggS5 N-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSJ5 ޻;<\g#ɣ[dZL3t$4f!GW55~LF<yK#,JS/iujvthAͯ"14WR)wo,HzٵoטG\I6ڮ̭730u(1 c1l uuCc%V,9tt͢{Nj1Z, EPq@f_$ )oԔ еP4#psRt 2_Sf5`JD<  6| @ 'p03 G5ҔW߷r'"o>ۡ fV tF$ 9HfE_,J5b($h hBU Rݏݕ|wES߷o_wo {.ȋn[cN3 ;e@ Ӡ0 T/^Dџw]b:@oõtȂ[r'e)?6?{%Q[hIO@J6#T'Ye,m\ZŶ^kg?{inLoR%7S-冇k@7=>2 lZU9N@&$$*qE@bE',04h-OC rU鴡OLo*jjHa LuЃP@}#r (H@"D+qA#ꭵGN=oZC% RخO=DNFr湙z-KV+~貦< > gcfC_C]wBd2zy?H@h HP!˫؝qٞom~3aUL$ H'pV<[b}wFB o69x@-Zڽ}m|g˄0@ ΚZ-aH؆i" p H~u2L=+loeSJ [N&)h5IE0 d8r pka@V:Z@ƈ҄_9b'^Ge x nz>^.ϟ\a囮p3.2 k!: D^S'WJh]g{@@y^[ModAz6C4,5/X ) Ҿh4 8 [L _սrmWw̺Ft$.Ǟ 1@w_Y~ K嬳JZHAw1MgP++SЌPN?:h{)P2mUmӌ;0 ~`X4\|oLhORµoTdueT|x,L}j0Yȁ@> [%3eQw:`*1N 0ñj0ڰ@Kt%c L4sS$?׺ZMΩv-â4g}H: Thz ,h2-gbq8ʶ<pCu$#@)~e!XC+ jpFNZgH$k@>o[&y*T2-ͯ` M߻8 `4!<ġ +@7hXPP'LTa7]fȖl].w=߿ @f~~hEZ_B8+|!msW(Xb'V7 p~`uV $4DJp~-[蔢x̏%bd宓? pr"1-Q"=$CrLsB`Zpj$G[ٶ2=OoMŕ]= =XVؿcd?oS v[dU 﨩p  }|Lg,,{2󣂕s'0(YH !+ N@p$һvk.R'|VfTYm0Q?Q%UBKxF<+֪ᖭ&6rF;G}?fK 3ޥׂ_,];=}uW7؞K9,oM]<@J} mz |8"_0 6ZCOYTqV%`A>Ɩ顕Rۻ&ZR\徝PtpaaL*?оkWE>6ok9O"hfN_%k_2 L!h\WT2~mOyI>}1#l(;xz[x 7 a47[V#-l_Ck@$q+$PA(3!@mG+Y!M&/mJu0&5)?#!K2#ꛞiG.9 éq9ZtZfxxν `0kv?| g7'xyNOjT?z*<@1 l(SL= PDm:+e Pvq?> -ia(G%C|C)߄@l0S$A<^зtOs 9@3[zQ XpoteDǏ|s'6 /J@Z @!/L_ʜF{R,y,x%j4o@ĿU}d<́Qk@Gj`\bL8. 20HF(@m]iwCA\rV)zA48^0 y&0Xv=eCCE<=%G (V\TXi97>ɘV+мU] Qvytjq–bKE\={=VٰO9&|d|Y?yo?mRON.hg䝕P&JM:IXAN1&Pg08ȍK)3&zY\rKuIT۫ yiij$)<M1fU[@ڎOjr6wwϭá7\qG?/ 2@|!n3=  3^ ^/0M˙G&m۶d <۞+#; .SBJv`oY.ʑ`U)  JrCOggS5 YW~ɝS;l_PpqvyfQYtS8 xxR? 8tmCe3y܉fH=@"ZR@#b=IA Bt"XQ[zX.i_ l@[/GUXv@5w|\ԃesLִVCj #&k q&m죻evZfR4A0m8A!PhmϨ.q 2p-֖ڝl;W@}lno:|@)[?T;$c4 f@QY0H"Ro}C;czã2>/Wd^33b$ ZI8 miaR %;w{M_Pg>hlAFTC  ui_ݏ[ōcUϜQ֍׀@p'k.1ҵ Y%2@ޝh|Etgȱm*Zz.E[^إC[չ |ķx.RS"Gf# xRC+]\1h ^G{.}|Dr{CZPNDQ)1 q#oeMrHQLI+,^/dmbw4O9wn˫`mT <"m[]o4/S@ < Ӳ w@f}p);b6?+* ) P)`J8ȭ4qJ#w/%7(ڠNnx?$II5@e- oY-iƔyHY=P⏳a~l=L:ol `׻C B3O=7oSqu3ߴA3Xdhɑ8+g [P6ɁPulV}2#瞜."qp QcCo PȜЯ5׎_>@8Tma(R9# ߛ"rXD6WR"8 Ȣa:\"0p-@p^ͻ&IfRnN q(`vH)C SFN. @abT P(v":v:ZG=(nxy~zY *`ٲ]!֠-*h-v~44/%S23CCx=sFz:D) *) ?כ ($$${oLO#/ H`K&BdTxbm yu|ftfcی=bj:9(e粖5m0K"iˤtRFn^IdMI8 `ڰ*HBœ?b^{#֐B.R"7?ǛϴD\f>I oLм։|L^x}%G|LX\XYLo|`i`/TA"F\ rQr1w0?5U8 (vׄ\\O9~0430M?da$.Rv]FTdnZ~< DU;leǶ sᐏn iߤyV_,u~$ú]}P{"R-$6S!8 $L, `h փP"H ]>S&u$w/ͦy:Tz|QybZJY"s'RIphLKI(EIg!:!.5 A(K6Z͓Ng]><9?Yo]߿ a؎[X~Ļ)e/Q`I_Vm/QM{Etm ucVP3<[q 6\XJd2 ݍK_w>Zz RR_d  $;]M{AweWG:naսD!~O[6\a |8_Pm]*{ 8VEf;\V?<__f][.OU6q)L7.7Ϣwh\e4;ϥ,mmz}APj EYW>(rTb=Fw|#hˡ ,nl;b7Ss8 .Dز.a$[L@E^]9kaȝ]Ǎx6CrhR(I3@*d$]ߚXM<]lia}N<7/{osJk0XYv;ᆼBy?=0^2nA8VOL?s:<ON?rlv.~0KW:cșLPQD &|c@!Af )r~]ZPЧ?1]s}9 `ШE1Xhr I5t$YcjNZ ޿yHGhq2eĜV`L-:'eiua>um=ǕkoȅvC=+ yY?OԧZۡ抒bIܳgoFlU({9q8egJQ{;6bKU_j%"|* ?VJ ܭ\_]Z4eޣ:˿}iQ߳˞<`u貕#3:DŽKʶ0NycHސ9 I@tyJ2Sڂ'=c]TA#}1;ok2 @*ޯe]q?f{:wg(1UQr %~#EyA\l0LNy cKRv{ja LB;ًkk9W.}m' L{ym=9z ^Ǝzcr8Ni9ղdKGAZ 3 8POggS85 fYܹucVw}Iyg:7{$$Xܫ)ȧOukV0PXRoT TA` +8Ƚ_kԶ18zduZϻA ~zFBG!1c09w^/οHFXݬ'mOu㇏OMTzTYhHt/4MD<˚wQ~}+Ⱦdtذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSN5 h~;8<̹ܿ/1⭭&z0خoZ[S6i{l5$iǏF<4,[46[Ǯd`Ls:0v㶌QM#e!2\eJQF땈(J~s}t3?Z_$YU+7?~؞>LL@ ^D π0~V` Ufnxpn\HePQq}*(Sbר!Buh6[glMјլb\{"PBFA?UEUsG;ݿiumEOP2ʀ)r`~cJG}h@=jԱ;a0i2p] GVt4&yQ[?!u(y/)2/#(a^S@.RHFK ń[ gCTk9SE;Ng oxm?P>9`G 7[ $nFN+&*ˏ=hB;A6i ~5*6%?D.Κ%]OD֘5; (h#hcL3L9$I~7*'622vO )k[ᡂJ[u8G[+HҾ|xRYp+xU6qrIWB}o~h_?;!ً!'uПHTQ#8`b0:@PTTiݙ8|XVH8'r}k`(^eDoZz`Qzgti^#^yLghtM/GB+5B @"º$n \h80^ȕ*JwIY>>WIEj>&/piX(p;`TiA! @P8$U {+/Ҳ]{%^H{I{^o^0>]]ر${\i=~ϝDzmu`Ti?! cuacJ0R++ k ~I+r}WIdE%r7Klþ~_4;&14 B `] a*Zx`>:bRXu~=WR=2V߹d_,^tm3"3@]t²FDG9lqio$ BddV+h^bR0~Pȭ,O.U\Ë\NҶ/[IS.EI EK47h@b1GehAC6(d.b\L:ۗ~OYD2ޙzxz?EWk[*:`h>|2k[{/-<rL&@C4Y@=d(p " x@Q@1$~M$yew,$qb"50/A1U#UTDD4|Ehк`lk$D |<,Tۛ~˲,~_B^aM2+ƀ>cGf[޻9nH'$2r~dă`u`6}>[tEn^}{Q7pT.l~DpCp8 ! @x(*EpaqD ,R/럏'%pT): ' /4 ?ïHCYPSzwvONĸ4&Z}us˾fsu&y9~HR]#\ݟ|X}د<htvdWwpL A0Z5M`?K>ZvjDF#ԔS(.hC!}% K=$fϵHJw|I'PyV*3+_+7Oer\_6떕H )%u`4_!h jվp]:HiSӰFp 0 ** bh @t-.)kˑA!;6:|n߯Sۚdc+8rfJ&duՇT[UGSDgZiT`  3+XZa OggS{5 ʻ øYY6_WU>^"^^$_"/?J3lAJ $)%`da jb+I7A+<{ |Mߥ_`O(PZ'ٛzE߼);B-_foP9+2A@Q|1 M=Rq\[` ȝY|_DvA$eKh7 SGQ3B*D7b4U!|UDDUQQ*wQ^i3H/zY}_lcy*ȚMfB]Zv_>6*_ sm"懫X]a@?hO3T/d8|ԵFŴY$<28&p UvMRl%#wgiwr gHuHRSr \" "  hlɼGjI!R0Mۆqպyilf l+D?R Ā kg2ct/W @~?eg8F/Հ(-vi)(\@H q~m.:Y.ltYyN\J +lC} Vk|HX1|kDjkBFN{(ʝ/!uS ih_%*xѯ x: H!Dd  $'~nI + hH ȝY_WؒȝIewj-GZ^FHR9/"BC @_@%H~ m%xӯWšD@bq@Ao)۽6ވf%] y`&"iwI6 iQF7$@WhYW_&%+ԠrȝY6ʪksI]F)Z: rI4c>{.YP$7͜Kg >9ߙVoށ~'V~$0)Yoה}d`B@N$&:M92p  Š`V ]YQUGJN#w2gI]ϴ؄hS "C&؀rY +K(חQ6{.7@8kcI'֑"#I_jV9slBp^ǭ3sM"3_Tj+@%@%E@"w8]E!oMa;IEI}A@D0<- zA7 ItartZ;|i9d @\wJ%A N\w+J_IYcX""*TCm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ9[M t`;:D<@8Rg& s3ܣ7q /1u+ Ղ~K0 #Bi.Yiq=RǦ@u@6PM]&(9\qSwE-O[ } &Ob0+d$Qb8Ѫ5hM ٱYfaH Tt/S|%xt;ӳ| l- J@$ Db[ E L?3XiQx_=)\55Tf:WO{=uB0;֢w !z!{Ck2ڽ_}:0" 0ua>`o7p1 X!@`t`;6"O q @#O }8USz\6s1ꑠ mwsRaϬ:}s4#Ad&#S$Dgeis $h3mw 4n՛? Vkrĺ4އ[NSvԥN,KδDY#Q>\y ˱̷ƪTK> 1әh.BY]5S V< w$ ŕ!As|Y|8@V.Ӵ0UFy_H }GێY=5[r{ؐEbiUelK cO}#s9UwQKZG{ 6{s{nϭf`wߝzne*2^\\QkLjX _\clkY|鿖879ngI.ZcTZŰPE34ҢQ<Ѽ/\)nkBIPz3YF~-Gu`Yt(Fs[&qﺺqmCu=E"a`2꺯>yIull=Ξ?1e<<ݏ+''wŕl2ՉA@՞*Ժ)y"㜍y$cuJۨLQTGlTKt<9,^ܗFE՚rU(I\hW)=(}*=V汹?Yxt|o8< HuGhmDѥ\ƈ`]BcB!.S:>ߦ)"c|oe=Q]ܹsJL/xo?6.|LĩtJZC̺R}$*#o?%)¨UKKEJP(@>1G BTLp^۫?F,0(X>_4yVpUM=gZ%ZS-24>xoo6}CUL&V]Gn*U# $ @<ďrI ;/?ޞ(+Ӳ8Ww{yYIi׉-GQ=ڤu# .烎 q]1k:zY&ݩz}dn$ w_[\/} Yd dA(J+Tbmԩw:lT2fŌ#ƋF+SQ9Q#a@@)`n%pA%n܇GfPlnq/ 7;" Vo֚5U,SIBs;>/9MDQc[RdzJ՚],OH٠?_zPw1~ Ȇ!B@+^<Ər,a⼏U=7q;Fhcu+Zv1u3:,Owov}28,bܱ~ 4L43MWkz '|G5-vbuR*y#T%1*\-]=}PϷ̋09Hwx/2>rv^5Wg_yxSI+O_/"ɇ)еH٧԰rkwľ~\ͮ {7ZnצXd}U(6,.NXLZ>{\t.e;ooq7i[G=Uq ҠQAt@J<7.q,!~pn}ڇزhN3~TwKFe7H<^!qzTEXˡKx`-+NlKye!}{`o>6%Trs&el4[2%ۺilJ u%fAފ;WMo& xl7KQ* m!YG*kRL2 g,PcR12Zگ!s?'-8_ϗpFG[kƻ">˺^cӜ:zd N34H" ۆn_Xdd_fD.IED(-[p 4Z.TI>yiSQefltc( ֥M;VBd Nf<]yx?oLbzV̇ u;R " HG6yy]\|^YZCl[+Քw=;뭞َhmek#ݟݝw>cleNMNP;=r6{P7(df9(7dd5k|oTZ7 Un7AZ B)J \D7~zۧWCfk§y]WY?R~G]xGopJffo'ζa6W{ 'V{L7d Gŷ^3 -~nBt>?)ַNǎFYa͟UTe|'NXd Dފ;G6 ϋ5"'Q#svtq}wm\Df?GOqʹW>Z[S=jkk+勜nKj7ƼZ5_}O!ג{¶W9YQa@Q`~'G9Y{й2}4XN?Bw,9 8vXJ9i/\kwtJs0ߚ`:83J~|sz?q߬ȳ0|fy>FmP^]^+QX> ہs 9+ |xzC"66Z ys܃O3\LBӫ噭9x2mB7یdcuUIM'̉~ }N)*}\-N>w,]BǸ,I ѕe p!z.̯g7>[+qT+Oޟ7Cf9v?<ɯ[FEN[,A4EJ۷##zWlLg}}Rzzwq$tni=k20rV.qiN^  ;iO˹Zwz{y|J^㊿L5}jؖ;Q+|X0텂ZWF0W̋MVk6;lxk=6]iYNGt;4t鮳+K#L\*6UTVY Dy;]q(0UZ-]][5$YAROggS@-!!H{уaB8oDRPn0ļ\&}n:yo7Ol';"'C6&5~qe>rq!ecXvCZd5CZS*\`Q iM}t̞L=lrꯇXȋos>>9%뻩绘hsO+ֺ3v%FK2ܒ2=Q3wtkMcrU<yْ"7P@FaTE2 yOZ֔ Ӭ: >M1}U8ubtd3v{QZiA{⼧]>"ycn)k6ej]u)Gs^:L ߏ?]k7ok*~7~z_,vnmfkF:xim3NB:Y;"!:^ē|9~k.V*BWOJjs7SsG979۫yH(5^}?Q%]~P3)akѰZ)gykWazC>2K61Z1'Uk$ WA^GTϐ8<ڗݻ%B3~DI`^^83[j>Wy,"\;wD\x?ET4ygɔҚt^ NN5J׵O9CoWea^p QEK:Ec>`CT i~]O9[ Ug\26[ZZi[MhC+rI⧣7u'LMot/)g ,+/:}MW>JwfDJg9$^RYxI7xԵߡmd`%h=6E<5Eճ/ye_[TgJA,jÐ`N͎-L6l^j4TӲ=ZkW?acHE*U*&( ֭ވ*(BJ\e><]k^ U?VmJq|꺡}3|]ӡRq:W:u12D? F;rnZ!ўoX/|P} (D B08o=|}ly(g^;n^; Y#*]䷤Hs΋.;d"n}SF:¦ٌw}אL2/n_l8bhnG*_A HGE^y̕emEJzPWksB8G!"Gj=ƲX7fhtes6+r,~7X7~d{}lϔq*gwkfz2ɤ*>|k=qkӐ*RR!jBR˦2w6&5=v/b5-uJŞyb>軁`T1y1zrɡQ׭*ēt4_\*bzȦ6vmk{ݵLm̂R.-NFmpB.tGea`ˢ277x+kF}_{19)kcnG0j.j;/p:Ief+oGy&{ T,rsZXqfaܷhݑoS؎ݝe) wߗ_yԦ&#~]QbrCwpxQun ![c}މa_uwjZu}n ~5%e~yNՏ2}?aR-6iV}`ԮKLWG9$]Ҟ wYM&Sf ?62֤i U(&| oM(Ay+<x=Zu# q:ּU=Co¹*#T`?GgMl<;,Ȓzdnn?c0=:" z~=Hm6_N?'Oe"6-ܰ&oWuw%ȵ2+ ^KiLlٖ}ǾnEmS/fcVx*1U D2R~=l1y@7/ Ou=9h{͋YOyMb}dM mf{Uhճ7?|S=:Ijlڃ'[W7u:<2o}oG|vIo4ZsiSY+pb]OYgUoR=HYRRqЍɃ ;թgm__o%th|3do`W_u.|M9D3ү~ĔV(s%y3o2?hZA;`aP7=k~~^ r=ߧ=o6CqbԺ.C#f˂y۞>4GF-"43J~xUZ7و[ˬqwo[D-+Zqu6067V8g6{ו67y7ֱ4yz:5G(٪ZqՊ:DD8.2$3fB%PkX|o1jzaiH"`)wC_ZDmrEofg&=Z=<Ζ '_,xXFw1H^hzڹF:?na+/fY'ᘛ\S%2 ܊~=x!2ܢ֐IqΕ$ڮ>_--z2_N ϳiUFcߗKikN̴׈>y&mߑ)8ˈc$SR^Ŧɕb3)eqB2FǸ24ZIPX(~=R K^ʁݢVĘ=91?4Vױ}(vf"w3[FoN0*.yxKuO&76gK=* &q~99Sey~v /jU.wIo:`Ge) ^h Y.ʈGBwkŸnmkF=im' wCN79=حŚۘM7ە6FMy+d-hŽnh1}nj\$[ʄoV㭫skD[l$1TU",~3 79ݮNUηQ il.*S3!z@3龿VL( \qc\7|L+;Fglt(|7;ٚrC;EcCytCʔ4n:>Q#|p+~# dW= ,W}VַE,V?blK_7u Nj>QSeg(b)UqjKl̼tYLVOHY?ͥ涺Cg1jXhhk,Mz^.k[((An@>#f " ^"+{Ĉs9԰Λ(}o+:f}4YH8iϘJ r]_jVrTE+OW{:6jZύA daoT+|R[nȬ)6cu9K" ^# F^֫C1m> O[~Sw>̍Z9{YS'% r{y,%oh?tʥ%-rbfF1`礤:!='z ;:kFuAţR70#'ɀ8o]pud!wGuwߝ/\)*HN98'{xY;U&qdc~{_~v1FaDfl.-7t%c7 0ݎ^[7=,!ƾ$r[ݓqUV*ՌV2ve؞Vq:E[j3%dc:15z~g=!5ll6{Bġ73wW SfG>5k+r2H+$X\XI@(#0FA <sD_﫮yiZC\u9A}Qc@j5 :5{=p{7_*Ύo^uN O|ccWh*u `9,FGi=1RJ-*^3d@|Ssv?ܸP>^ ~qgA5Mձ陽@6QuO,3SVg+>-l*UWÞE8Cs^f9STֆ Ҿ1KI8N ֽ7wBjL+c\@Ij^x̳e .ym:;x\Xg}!-kEh_֑̽ϯ(;6}T%O=ڶL(ދ8ME:QI]DF4ܭc"1ҍP⊐o)ng4;%^)XkkJk^#`$ w5#S?׵s?l\׹G#B=77ވRFޣ>8IWkIn']5:r[vC:%ƱۅmMoVSy8(r{gݴͿwqScD^5)ǒ/Ɩ[Z;|:~RZדȮu)%%0+[er=y=j;u<܎dߵs/;_ʊ#u?U'3O~݄ǩ9ܹ΄v-bYQ` D6k&704`͋b4'cZuEDC|V%wOVG1t19<{`HmƢjnUяByCQKUڅ> ̶}lGR΍M}^V;ZCɥL1WĬz ̍01rA|ْ+zZyVQ4]Ϯrj鿶iٖT5i}<V3[VJ|*J ;6Ƅߤ[cXʥr{3s?6YEf#EJg+T%}m+פ΋&"mb ;36t;gy591[j_w=#jݍk!ɦ+]8R|=*JWS or8F]rKMx֐b{'5JXc܊χV)@7>%OggS@xiYLG}%pv2M+Z b-B*~wGP(!1ޙyqDFyMy;_uol=܇G{ ~`Ôxkjbe]H֟e Vn G! AeY* @ @\-`Pά>)Gе|ӫ>r _>`6 2f(&(J3y wVL5m. 1Q6.aWIYxʭ U 40^[3ivuʾaMyIlxz|+'L?b0OǛդ-}!YQPT~UJ^ sD8EݥhnU94NGctm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒV mg4LGCsͳ?Ҏ7Z5+yxpMe23S|jq@tN* 1~za#X;e2 HS 2~fŏđv^ݮo_Nx@c˸z]"N\o<_{bq$oBv߿QAE(~y4,lX=^f~yNp&Lb64֚$EɌ6*2S~o޲k_}hOnxرzehjBp/ZB{3JCЯKu88.mnGׄrV^~* 7s˩?^vXFR 9e#^E$TT:Juß ΃ʶe:(n`B  1z% }>9n 8bD6賀%}DSpJ|7/}[%Sͻ9D*Ad}E=۵`}-{іFoɻ8@'1k]U0 ?:a V*HѦN ʈZ(ٙ!I\%׫jHovC)Z~ى-x۵[uiZ6h:@ xa* ^*E䂀*= v`BpF@*d ٙ4e\$Ia{Iګhԩ >I/%) f t{D `AhuF mQ+\#p2$s ?N@}[ ,.ó09u$@ƾC]oIb BitVKwHrKIMTޙ$n^vBθ]-7z^ lb#cEXb-eu!^ًr 66TJ2@9۷B}D"Ɜ5 ` *i6 쎼=ozalM=SCڢP2Jmc+ F=7.m(E~@$@y$e^+Ʊ €c:BJ ɵ){n <4ĚK$dsU6Wث+Yi* 4OȤH43'Čb.0 U3ضTDZH|@+M4>tp[1R˪O,h'L Bw#9}#4TXU5~)DM)%\m layPQ^ˋ('t'ʍs45@pP뇉 ӬK\ZU ji-ybJks&*;qkoWW}t)틚 ȏDO(%AՏo<7ߑҭF\|j=+mCBT?iJ\w@5=SOc59 ^()׀" )G` W!#h`LL(i G K/t W۞;90UP,#bݢ={rKBGe6ǎ,(Do`˂YT8\AG'a mW@ "#$p4)(?E*mFCWL3RE+h>2ŭsG" h,@VKC @ Ih'f[C%|OhO JzLF @5_ŚZ8]T@!ogv.jhdfSA$JI2 uW(j{cҏ%xu\vN@?qfyj:L{04(^Gk}Ԫ$p $3-4˂x( @^(RgmLiyRǃVu\eAUw7ŕ9hK]}G.N/% ŕNeaa( qVk~p>.ꢓt7@"ɤfgw2$48o촔$A4Gm 4~,`"@Z[,$ "Y.w;uI-4u Qndsg}:03S B'G10GoZd)*k/ 2oW?0 |* !S?cN-_NBw\r:IBۍ ,%HgvF*qY@)nkyr=^ﻳs^49'NmlL.&QF8&mZ;8|QvQ5А~MiNʅ%j<ΟxF'b>i`%/Ix`Sj%͹P**Tvq^~hGD [6hm'[SE}Zgg:R{5OggS]9">}w6ɽ>LF sX"Je"6 @`%$&5:نȪaˎw|UÁjY@S7aڒ0TՕ՛?`wE ]EST6GQ!^f @DI*%Mv&5^0BVZs5Li*¨Mj@ݯDrYZ< 9"6 o9CLEXbsp[4%`$v ش*uH@KC)//EzF#t)3 گhj&rF`9$C7.(L0i8C WԈFnCXbWP)ei@L5#< e-K(VۏacLml:8RR+!ȱcHBnԁ=$`̙S5 `cߘIj*6Q(Z. :Vnn8/@"L̙,9D+~^)\:Gn^0bNԉa!>~#**DMwn("t_\uQfKKWhV)6/!g]Пr <ι.Nv[ث=ݬvlIof ᝒhD{Tʤjb -|>ka{^.@tc='&(׶4W@*i[bh9i\{5i1amcY/l z"Xr7.\,yy1xE#IafY![:"Yc"`]z@rKBO@lmms-1.1.3/data/samples/misc/metalish_dong01.ogg000066400000000000000000000167751247673406200215030ustar00rootroot00000000000000OggSEz]i!vorbisDqOggSEz]g-vorbisXiph.Org libVorbis I 20020717vorbis)BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4s@BDFHJLNP@tRPJF=9ɓ==rŲv“'?`ϟO? `@Ȑ`odhdh;m}s?<?|w[7T&9~]pc>~387ߌx0;~uU_]_/{O_|޷U{?Q U77: mab KjީcOj5UBτ xv s ?i5SSo6?FLP9Чr0dPQf BTKfh!LiBH*%(2l"@Ktt n D@^[S1/g/^ML[N)$p~UUȕT tZQ>e {`%. ;~dj -1}J9d@$a%R@YzUF w 0'14Km* 0, QQfKIo=z_lCGΣYp$J${6T`!&ZSvd1 &E'^[ ; >+(2d\p"GމbfLDƴ[{!X QVYЂU!a'߲VQU@ɖ (]JDAxU55V.ԅh{B % Z<8b^ \@'VfB hթ&%Q6Gԕ@rtQW>K|ʦ4õvDz30Gi0V~fNzgj' YYA+B@1ZܙGK~& '/ofZ+H@\V@^-*r"1 @nnI e"X?\ !+boX(@~smM秔"Jm$]2ٖsy@KQQLDT0-6B C4ۗ'Fˇw2s02fx> 5Z- ^6 2 g~`kA%L^Jh3p*  DC|~6)AeY&i9T+,DYp}`#΅#$As6G^ @Vʀr+((isM 2R9b~؝r*%Q<j6kPf6C+``P1)j(2o#@? 3ADѱ,P XUo`2jPA|(0)C1H  H$1R 1g @&?`fn*5LZ;H=19'== _n:YT9"`d,pw1MvӀ\H"X|h5$H, ڤQzfI4,M1ŒI* m" 5V5)6 72F,c,H:ݙ@@ԂXﱂ84 CWڶiF  1m((!gYY6o0I` G5i>AE `du`C@ /"c#pH.P-j`XЄ ,$,HŁ@)4;Q5  wD= 0XSEJ%r_ ,2FĒ1 a>X_C`\6{7jQaiTCŗz@Gͥ}tG*]s&ht&*mRamuTդvܒB1Xu kF~eFJP4 @lA6Qqh("?2~kZ p(™ `U"3{ ҭTO ~Mv 2%Z*ܰʠP / H Bȇ;BHKa `#ҒP ATjiF++W[Ο` B6*+h0 L>hFr e|_dbf XG&/9N'666z.h$q:tm \l"{}F-X0Ŵ;@4Ist,Q,+jPX#*b[a i/b2b ,oUٕU#g] e9+TGu_wc0 sӲ@:Xd]wdQ9!( QQ5@̜v/tF cYXgg,rdYplmms-1.1.3/data/samples/misc/metronome01.ogg000066400000000000000000000112221247673406200206510ustar00rootroot00000000000000OggSe T,רvorbisDOggSe T--vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4M:>-/89hVhP?a4`ل$ÄF&1nuϒ`$n[݊we$2Ĩ0L ᖁ@I# 4AmMuة(B.*lE&Z 4E jr":AdL"JQo˟@ŷ,&7Fnf¨! JHUD(6R4 4,Xb7BH7T0((*&!&!(Ga ma Fɴ, L,@eŀD2Y1a 2:̞fb^/x<x<-ye9İY&ՓP@lmms-1.1.3/data/samples/misc/raving_crowd01.ogg000066400000000000000000002001561247673406200213360ustar00rootroot00000000000000OggSQSoBvorbisDOggSQSJ0 -vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIU}Svte_}Yn7uuamXe[~X7gt]WmWVYםeuexmXn]WY׍a8 OWcm}]9~gx_)p˶. /,躾ʲ + 1- 2 r eG}+KWcu]*1T 8P Y 09)!R!1sR*栔RR 1rLJ朔PJKB)Tb Z5Vk(PJSkj9'%sNJ)%RJksT:%uR*%XRrNJBJ%JJ1Tb,%ZRj1PJ%KJrk11&!sNJ朔RJk+tRTRj朔BJtTJJ1Tb XRb1זbˡKJTbl1bʭ[I)PR1Ɯ[9Rb,)ZR1ZsPJ%KJsm1֜b5Xs1rSk5rm1\k \|'%PJ[sXRk1bKJ1Tj1k9Vkb5`l˵kn1bʵڃͭL(csBsIir9)sBH)sB)uI(9)JIC))c6hJ,PhJ 8yhX牢im;yhjۚ牢iyh꺶.ihi,i꺮+˾ʲ-۶1꺮+۶mm0Tnu_aX Op*auBCV12!R )@!+8!J!RJ)RJ)QJ)RJ)RJ)BJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)JJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)R*RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RTԃ eА@*`R91眃JKb12 RK1fA)%Z̜Zl=ƚ9'bZ=s'k=Zs%sZcsァ\{^{.N Y )Řs9b9 !ĘsAb9 BŘcA!9眃Bs9!:!B!tBB B!B!BB!B!B! lXh,А¬$r iRb CLRʁ$c*Б&AB@BdH(e0 "$Et.:B H 7<'R`\FGGDD4WaqOggSrQSHpuC*.# 8ܫ㾥~~c)FaTGPM8= 32׫gI$2 ʑw7uQ&kR^_},9XN΀[H7!&Z*9DkbY%jr m  ժcuHYQ>ܟW_-l#U29}JExdbH|0=V>a#f۝up V)`6nGUkB_So^tF?XF4(ӻN^kC=h깊fd*^|׹, 5*2$Pa2rl<ʪQ hHX=1aU0'o rk4k-xC i ye1mEFp f]=hZ]+sffգ֏jo~vvE3H{zC%q ZGbGCEg )9X8%D5NP$Ip%n1"No~Zj#ٺ|Rȏ\*hC@޺?>OMmu䃱P,<<^|822dFJvhU|[9_5gV}Mo 1K|lve' n.p|A:'W4sl19Q(A\+R`:ޱX1oV g-ToFzyEТ}srWr}&Z¦VtlZz50w 0΍~Vlt͂nr9mhuD4Сf]sޟv깆d/P~]x[x#gTGӁCMNoIp+“!29 0uh5c۳'雦O'(c5Wa7KH~$R-:x/ף'Uilɤ1.yVfF&knRR'Q)vQubx&ʍ0KZ*#=O+sN.84ͿW_17>CW"igu ~tld$] cEVv.BO:0ZX+,C(w{k߯}t1)ns^'aZ,N{mha.5"j20DP]I ů>7w~^Vk|u)aA J1_ܼ#'nھϭTdi`zL޺?v5XkeR<^UJ ?Yܣ6ݾ pUTҁN٢$VȭrFWw;hm]R~]Thl=6D響T7պ`@(yWYFa,P!vCp2ەȎN[`7ְ#WL,|z.>fJ68v oC's{ XŠجOtFA,jvΆbHnlI6w5qܔD}z|[39 6B:hoSg (?f?#B깎lQB)f\}ɾnNI PIW1o+6Lr2ؿH$wRR\4FLϚe, A&Dy|͘u:V.!]xAF932~'${7'Ũ*ع38 :ᐰTާ9Dو%imtdq8fK 8 *r)P/C.a>M t- ׃֧Vb[M?ڮ(L!<#_q]RLUHDDfԗjW[716Ȝ+9Sފ4$_"9&:]Z !`Ђ2p4o彂ۭ -y& (ge*'vV#iI(n:SEf:OqH>X!msv!^Ml[3Ezauv@؇ґ :Ԛvyo~͞U/'q!liVy he,t[TG .ʷu(7Ĕh/xA~9 Ikm݂k:lYZg-q_(c#7-Zvr++gY;=J.l7%{tBչVf,@nxvDL{wtnma z1I*B=l&{>G !P0?+بk&0 2~ed9zKXWE9{FMآ)E#z/R2}F,_B%'M^_,zFMɮ31+M:092 u!$L$6M; ҩ6 :2|DWu?'Y%SQ}RDAm)vފynv\mJ4&8ᒇS`o "IhTZ8HfB;1iXhtSF>A=MW8DѰΦO3hX>+مjل方T]g0zv֭l:UTPq;p'{7}nh29MU|co%<8+^4f;ә|?Jc`Wp"r(𯨶&KORMTeGv~H%ll/+m3Puz=0=ڹW*7+RDtJ6,C UgOH#C_F)B۽_tverqX*޿8߯¬ܹ1ܻ!dP9g[3׷Ub7BdhFpCxܲ *PQ=Ɲ+RzW} 1*;THl̔ϻ=ǟjUvY!)[17BZi"NBjE]T L-2n%մ帞Nے@* CǸCW7$LSXh347o@jFOggSQSC6? -3ꢲ; ֜L)wL9aF7 nC /n#j 𵧪3JEaprX`TP]98m!H; :$pz>~>kzgR7n %!.0I?P/v*8,pRrژ!ff2NvajiVzxþ,j\=I1*FjYEBl i 1+p3 ©b~Ms1 [t@F yʶ_p ;WΌL?Ů/'2-2vKe!$%A5%tx!D9T+x5VG3t±-FG#w2 Mݎ˶  ͽBY@BStz/xZ,jk%”ꤸo}U荰2^;" .Xx8'jy̳oX'QyzRyϙ~*p u5\X/seJ?  N%9Z-j߮;ƍsVx 87(|u7u?h0@13 /k`p8j~GsQlkcgK)gmTe{Dfw5._E#lSl,WO{y_ .Myz܁a`LaN KeI hٿ]?mL ?czΕofP;[xob<ө֫Q1j{U2Wh&B|V̷Maf;q˜OPJY;Ix En/u8,\ZqyVnqULp}Z6: ֛6 ..\Uw7z1ugJ^ʠs8-3g,"yުf_- "?3VnFc~Kt:Uꥤ̴Нѭ\S?al n/U; ;2 tF{fl"HAژ&x?./ێ7,3@a y(vz^bVEե#|nqEl eH3O^lؤ2;~f0'Ld2ss5i( 7ZBʣݮ43BV&zz* *̵0fF+x/3a2zg^90qz^6z]^Z}#y(;:J'T:|\iPon˓@&wKx݃Ȝf ~n

{u'}ثTLv9FJo4;*&y} Bs_"kIv}KU_WV~2=LJfzNoDr; Ժ_l-r&@f? /5*2K8?^wI|wEl twWĖ$ęsU6hn.u)DnW "㔬{o%*8C)s4f\_ӝÜ5f!:}.2"ILG*Zi*Lx~|C?J_(ѭZtϘgg.!u"8:nR̩O ٦I  (U\+Z1ItR7\fcuu@`fC"|hrg$yݓY}g3rsI8TL[ē|tn^LGVqCh$cؘa'*Cpnz!꣺uXD a1y/nz?ȖnMI0jE?@+OS^+kY#3?ŗn֜?>)Dp<0lUibOBcbmM+ǁPڿoxxJ礪θ}ZqLU H{@@V3խ͕נR"1H6}G-F?@ cW(?5ˎ3gDfPZμxbTN57Uif+k)$;m(a@Z۫.Yu;UԭeGiȬ0vuVWZ+}R-{.`ۄ}nibml7~p :l7&B+j5L#Du[q5O٫v e' + }_g :ҘIv?vEzM2Cqohr1W{呀C063xg^s8/%*bHwgCRzqEB뺘 oxb"x3(~[?!jJ$`/YR9g&L)O%W1Vj: 2ys0$V|A#= !G] #.ڙ {|3wxVH)4k>tٍ{$1C6N .|>Oj+`Ff ]D=~ 553#.k+N$Zox-T=%(ӝf!ZԚ&&CW-+jgcxD-:EqUÏP\rof.y]0`Pua ~ӛ1cmB99`|UqTgk7&-Wl?ya {r,bSqYf@瞪#;3\6{0!~&94lljU6ۭOV'ov0RH,%i2`Zك {-z)zy8~k#;-re+`^]nzt6KO&),gL6 f?s!͊r\gd=qU~t5rR(掑OJs~jKuљH2wڜhk=ԸQUe:MHَbbskUoV mW]a}&iV5ucŒC?y"lm>*(h"yvyQ~f)v,\m͸jv̐ DqX]6sn(cMBCiGA:ECUO}jcLwMx0\L!ᙗ%y!:{jۭ&g/^Xܺw8kx=bL%gdž,+=RN<:;3]u]D YS Jg0{:f˱8ۻw8KDzrv+BW)ۺosUjJ? >O0,f"X*y=>f}漪6|/OC9 6.R[B}l)sƜ%ےz9^C0EG^_ Trj@$,.\[[^>Ld?j||HeN 7.{zѣч! {2ʊ7^sL冿[`3׃?{T,Q4)ud4APl,./ntx;7d Ϛ(þynGfC\)chX?<_1Ux9vCP9;t{f5#o]g"~nxfyR@-gmKf}tv"4}եI&ߤ c}cO<\S4s.zg{@x8t0_!CdIdʟ[ M18r)WUg;?ޠVfD5s Վ؂uwˋc7{3::_R+R/>4]:*?gK * ?K0.[ӵ y(- Zȥl&Crz,a`*Hd J荎L R¥jw-.6RPMP8fvαeOnN`$*F9`>HG2B Oh r|,ƌ* @dvfi%¢h{~a]ke 9-\jYV1_9/3-VRebM"a}$%̶:nqчudl%G(cU;7xfb?%tCuOoߎѝ ?_EZy]̔~Q^{sf*Yɷ? `5OWӌS Pgv=bvn$7,@1#ތN5qxC`,^ IW*E0dnH/aq n>x:}%:E~ڰ4s0#ւU&+ƹRNfV^ᾁwA?Efw~#Y *g83#3ۺ~9qqt:wU0 "7&mYq2Y9A^Vd#Q&\er %S*NcMܒb5G7r1Sѡ,uƐ:李`:&Zȁ.{!@KJRB7%Vt J^/&X?)(2Z TӤ-N_x}OS .SF}AwlXQXWh7 Eİu^^OHӍT^(s^!0&H9L;K:ߑqOdܥ<{O#8~>`L&6Yxx/ШT5,233LߟF >:ramQ![A9IhY5RZZ@)1]YnELYS?L2Ѝx@le^2.qÿi;7ɪ$5332ҙ+XlBS2}7Ҥ Ѿ'|6cޏ'-CҴ1ȳvj֨Qϭ@TY8 \zg]sSC~F۬p0v?aHሟL}d5fȵC +r7}~PJHCWdz}}RG(L,G;$\}Rq i67vBghJ,bI 4B׶p[4z~P¶J";qH_Jef*(EFӆ*Lƌxr>%J>-ڲ/iCWmqB]pAjC`$I]:xɸ=~xW xgB`%{fj'J OggSQS;|B?}4M&ؚ&#ԺfGPơVxi_WC'!暡+;狑2޻-}U13[B3Lz.=B} z3̻mM+6;>7,&V,Gԧ&V>3#RϿnݯ|꼊}B{aنW#+QoP,ERk1UӺ9Cɧ ׳Cz N?{3"Wtԧ-0Q`L  fw~ϕ&"Gઑ+\@@GyhZAyא^R9eWDܼvqNB8a =#d#03Oml~p"㓩A1@3͊5sfd*ȼڹYz}cOl񴐪ke]3>G]px2yUQ\9v]Yw/7Q~>my0U nv+Url+)#WIfM E*<?j7KIڳH{]_/yZu,qq 8ew,xQ>e.U27wzь-3?d+&(M˔1*l.Ui΋LӣŏQRJ f?' 88gץ_9j듭Bh\yui ?N(Wsһa;4G{.Q4݌LQIV>fuDJŘhzH![aG.Uȸ{sjXeu0aY) JMYF{\s8`;4Ϊqlך/kɶqjd H,Y(}`xnlwBl=aFOrƑ |3'[pE|8䄌,{[4`6 ?^CdcY #;*\{)@+-nC߽e)U"bϼ.0Y VO{Cõq;]LXfÂ.R9XvFIB" S v4fk(~@o@05 @oS1JݨznΫwXj6x9#š{Ov̴]w!Jv:LV6Y?e۔>ϯ 587-; #5+Ε^~Or>Jf?{5XVk #3n9Ĝ[k#rvo$$lcS0;DDo-5 t)9 Q] a|p\Q1J()kV;Gv6p1Q=#j‘MWi歿 hҍҊ ]Q'Kj#\5wlS`tBvaP?J%̊Z %m[gWǞPe3HbJNW^զ+Gg)CjY ߔS Y@Yl7''n-αdi{X0֘-lW[?P?| PH;ypip8 r8 9|zC+ᯅP$v"lG -z Bᬊ-)myU+|Ӎ;K'{t鉑uоfBVomfu_vfXf^4bFff*ؼTvQG.HOx^ɍ]sث+Gψמ*zfwԓs{)v&3zk]Zg}0C %89d߷rfU*(+z f*3gDK}{}T7/pzW,^T?BƇ8\Zf6ce# w(.K9 .(;KFciپ8 d8.? g]s;S; Ur?锊3kd2yw+7nq2m),zGz׎U tG%Z&IǺ ?J[N^azXAl#k}~W36YB0&)ߚa e7@.㠮dF@7~^Ȗ6fC=&~^48ldDKMqs/!gcSGFtMSm0Cmč8]CQ\spTsWiNSMu]B)\ ?0?\!X3STHj,Fg=B4}Z}Kؾ*\_G8ZM}d|pgJ`j Mz4QLo1- * UԊ9sF Uwmǟn^zGʱfP^m}~6~k& gg}^d{ zIu}R (wd:4AuJw59%Z02ő[. 'fUOժy‡ 5.'J )[{]V}OID)|{hIQer;i˔T0`|xFLKywOiL sa^o12*ѽ|&f&YV=WsFx>L_?GM'Ѭ m1sJ_K,WFZbV25빣!,e˫b.J0p;;@Mx [#Q\ UJF,ǩ& &0;?E_-~ViF hEhz qVkE`ՀV&;i7^@ُ} iy/znBsi2 ݦcX1AU ܦQl隚|՟{J>S~J}Zf 8j)X?װ=dl,-XZ8KEǽvhW(hGG\'GHT2(Le%-3f\Y6DkCզLHM.Z q}{ɗw,㹮׾|?˨g}zDGBSf*yZI5w\-fȔҊMEOw8[YѰغ1r&c$%ژxTɓ\ 7 =D"u칹{Os`Y[Zp%4#q,?%q}(Cbkpw 7@6$U>_6l )pj˳61FCp[* )ƴH|5%_c^H</Njfg괓}j5.D%cc<. wmks,,6,B4}tVC1s gw+S~zsuZ[(!6vR"g~@ OggSFQSO1SNKC sf9tV,mB _Y62c*O uV)]#ˡuݵD?CگC%|_QhECKFy 8l0홿a1Ed a nJQ4:?AgTZ;s8 ;uJ 7VuoۉK)3;U#4K9UURl[/,Z":`5OB)#YKw3A,-R*)?].yQD2qPf333CqyLFJ>M(ZEr݊/,/nWڹ}UzUaqZ1n(f|.oq@KJ[K(A?g%)y>O:UьMY1Kޯj[4c k4RK]e9m[?kRBux ɟƳN%Ȧz@h}??zpȐ>wOX2G=LϞ"Bbma&32Cϭ-6>:u>=L0ZlsZuκF`h&v.ʄhq^GFЮ.eQqpLadl̞:>;|*g qW.ip:~Cv#0tK/z^"~ Ќx?H+ FukUked)WUq<{|z=ճWh0wm;(۬1;Gj;ލY<f30Շ;8z@f dlMS,_qˤ-]\q:l 3a#**LɼXg&ZjD2|dED8-ٟv|1صrn͎W!s=D:'ܵ;WFZiܑVہ!i}?-9(Jmpcխ۸:IE?/Sd^_Ar'dd (tUk33L {y+mU>NeIfTğjhA|s~nQuJ;<+pJ䫹P4? ']sl w<{r\uQUXX%[ǝI;B-&i~61Sku+M45Eo6ЊG"񞮹F}*Qe0= ;2CsTF U|.i0S*W<{WyڌbVd\m%x ~jFg RGwX)!Pf0BcCZQ~ʥ\k \lN`zI/tю9ِ[ : f?@hB\EH)譩/ syTp[q)ݻMtP sRN62[UcNNME>Rt|]]Y.OLO؎=+3Gab6,HڤZl#H@]v׮Gb٥@{B^zw 0#]N%v(CreZTh)EZLNܵTV @+G Zw}:qۆ։b`4PWƮMD$f&B|.YX5ZYdd*0lo鸻qvkt#֮xFH4nXP\9LM2j7!h9Q%YBƂ_JЇ}N"ϥ uﺔۆ @ / srq!IupuijYMF޴pIG8Qeo\"a&/]7`(Ǚ_I2xRY0^} ,)Q߶"%bc3ę&# ,?/QUudR.խeZ4C,k'?a$[{("l<-C˄խ#N)1K7n2BYT!vs>juc+;"}oJG ۯoXt.V~m,X֑3dkqkn #j*^&A̩RhUڪ̞49ֻ? ]ehg Ľ5~fGgW(2;5u*4*^* fM#|hj\iPwY8Kx䆙3u^I>UivZ묙(rH`zvji%F+~½NCqoi>nT[*NEA:7c1:3uaw hM?>H:)@.F쿧g]ylu4ecP=oz/:r*"-{NSbr y#;%. {ut?nq5%>y* ĎdΊDBߊL.B/]-P\Er&HAčzk Uyvs>ค^tj29w&pΔlj _25;6-tlʀ+ܑ*0@I<_C1gh`d.1nqF孩|sUw.\σ0Y`Yz19Rȿ5yPr!SoZF %G'$D9xdk71NZ5D*8%Zu۸>Qf> {E1SGH&E%:|0V3KZYf~^QASl&`OUoP馷q-}W;-տo3"'Ybc^㵥h^OzYqf~>lf&B|(sd)O89*y3}3vebȠ'.vҭZxwy85j@BFؕ5>(j2HSR/pcNMZ f]}|5 Ac_fݥq]]qtЊ.E?W *wE~%{I) ݕXRF`Lt5aAMg0y,%V4,<1 (uU1Yhz/M|qMʤ UGuh&]rE \ZUylGb}C`β3FAF8'h*8XMyhlvv{tJGStP (J,f,#CP^W]M''UcPtDDo~nG tsw)\$ݔ.} VvT{*d >)ȐDNˁSeb_*g{@{MGy9$L)t7~vt͎q̍nh=SWQqrZj[(}S#Vq !>{po']bc)@TK(}_Wn30,{݄0]:of]weG|͟@st{N2\x='k!_A_vAnKcY&];W㭰#B՛z^\*DN?ʹFL`+lT:22(+[5t꽪\n\7_ĬpS!m̫cr@ZOtK;ۥ.UdnPygk|&@L[8]86ri# |CyڱT5,39+㤞(|c=L =߃.QN5Zyt2D!Kʦ[>f =7Dal8c]Lqݒ]q\Qiad[~٠E! g@.u$å\EGfw!$G\slFT;뜚n⧴C.z:MTĔLJ*\.L$u+{ ;1 }Lx[Ց(<Y٧'_QYΐoDqr[': @E*ۤyX(2S56~7CQesٺb4qI &?'ʢmgS#3R{óO}Ֆ~-2'_Ge"둋>̟qO։F hJ8Zij18wLi|Gk縿m&w0 f`oƆ@/iGP3ދ/o}ܐY-';4;3M'?Q.2/2u #>5ncO}-M#F15jt$h?  eWS9gȻ}ZwW7ON~%bÙq|GvRVU]u&g=w(vy}'Y1'J'ZstŰG9ۂf 4}勫H6"Eas9 ³wkwϫ˦iS>ʷhCmj?^m#: cꂖpE6Cro7:rc;b$ReRr{\9 kX'pN2J8$OggS.QSbf?@2F%I`rexw{zX޿X h#ԓXksݳI!k1G K1nJnt) .<ĕl2 Q BEKشQ9d0:f?@"|.bۦZ\mMd g7,iK˪l~ ef77LmzyN˞ltgY+qNY1W˝[qg;fV2.7xIn=$-l{tFAG/!y*w>k:rff*UouxhM+_E/yW>X$:|zDnv!Z+1d v?^c|1c ZQ#}%q~p#LYTjdP03#'fuS6hЇ6&ylsk&J=?gyRyV{3mֽS uo\*hmTo^\uڤ;R7ES G-Wٷ0}ŭc it{DgvSsR-x? P~Z3 }3#ʶGW;o+rG9V*6?9GF2q e,)7np/0$k]?nbIЙ+틚-> @&4|VQVkeT{bG5fu^Đ{vI;ϳ9ڝOfsC]{?üF$rPXr5nCs iצ;o*& #AOu3~4˧3fMhZJlC&6Yfl36/E Ƕ۝_5rxUbwfe<߾[]%WJHN<ّ,]~24g}Mh'_f:pC/@*HcV@5̈TElg_^(rie|{|2{اwn7ا#?`Uc^}Kjk =bd.TLjd~HJJpICՆk|HF=(0x9$_B1D[YՒsgnlVGڣn WpQGlh%&; @VL@1jL4%EGNC\OUHun Ia~@e _SȠa3MJ]fn ۘG"p:;X " g2hUH :@unT`#̙fJ;噥<*Xun)-ih#qM6g)W{?cW#nLt-@3Blv-< t.b;\]f?狪Uց`k\3 pt$Qt<;n499t"ny ۝(}D org 7Z،=/z5!k=kB Cx_0, f&~/Ԋbe@u~YbҎoP[^}PEᥪ}/`eΎ, t}]#k8)fXhuإҒXvו.|_5pi٦7 `;ŢUo?493#YM{g9*0eNIqY>gքhVóMЩlyi}6Q]p'D[vjcWw!>92z?U*ۂ^%kKozeJ|14O~_dB24YG:4$/u"?ur@-;$J@,)ë=^ Qn%KD<.?fCYqv vd76\Besv켘Sׯ_߰*>z>FxM0i^89, /FEX̠}|nCE]|A!Le}Sx9؇n?2|S:̄<Чj61`s;4, E$4om{O:R|ET?^<]#ZftoŪo#OuOm Cbr)Gೝq/E,10LM=,@I4Gw:mlG1Z2\˳&Ȃ^?Dj(zifPvp~cQ̜iOWS 9ra# aRr QmXUKU^$H1zQڭ|U ڻ[n({xJӵ2{ [|]f?^ Q+>43~~cuUQHu}=v39޷а)oBuDluέ7g,7cCh]wSة;k {T ylv܋ZfsoNx"7U=Bo׌]fyA@G#+b\4Zil}x\meCԇS57.1]f4lȨ;@|Vo% csZo8mچ.`:`OsvLrݎL\ $;^3׊Q5##Yf?w`vqjN^>>fDpZUL ުCB arkh0$Č): 1+o@1v: a /#0Oԁ,}f*yV9s,Sۏgp<阮X<&?}ʋ sWNٚ=ц2IR3E "̭'p m+,إ>`tpKkxސzfqRx`*|B:-!ȌL&Z,7*0wtVl!¾codmȌhzs#sy$x6fpM4bq3˘%Y!:˨%m2p OggS@QS MC#*>VDEd笑)pku<I*Jܞ̝zG#_e7Y[/tVD9VBʁulzAnY 5Fq6flWPM3#q iAU@\+3#3ԜZ*GEfdzK!w;b~}[隤 &ŝ<3UJ M<`5M#Jm$~(|w|l/g}n=#vn{Wpu1 *y~Fk5TtƷ|Kus\簌N2bgT)\r WUOzQ"zIlzDZY#Ts ;8[C{g Vds mߧ.J 6#X aEVL&y=ʼ/rq}|Gb:f.Yto2n 7dm~w]=A?{%2OqL㗫dN7w%FpóK.{Κ<ΊקQ<SS5OH$ ޏ2'GO(Wisws#kD&@\ɘ>{6C*TFPGoG=z?żX[AlԌe5Kӗ2nJ 33WjldA躎Ait9SG`[uy:,sG=vY eko`>[.sp]v: cj,\Q*m `n=pusbi!EӺ)qrqVdi!L0Х* s 2Jht`Id;o\Ћ0o*E Uډ-.lLmmf</@Ucd.:zS+L)8~tj}XI^fuk6G6qścфQ&=g{'L)DfA4&B>Oʹ ~f=1BAיL8(cFN5i%UHL*F\ec_4HNwm^#8c0c:7ߙ0.fp1G| ;{PyF˵EdPט>HBg*Y U_ᣐ(W }8&\Ir_JGxNy^vvcL^.q?TfEfdzkϪqzYmղޘ ߶pG[s4O:pwso|@[Qhmeӑ%w{}`Tm`k__jpO/{ Qa!'bT00 xZG!t6hp(yCn8dQ _uxNG3K7hF[`(?O"MDFb NŒ@{0}:>^;Z#p{bvNhMh8?2cW'WΕf+7fP*aVN2Vsnco!Or3Lg=x|OiXډ-m[YZmykCZ{+5lSO1.F( &޺.>]Q]䓱ߍ1ʿΏ|UV=Oqb\>5amQǔmJwL8@[vf.'1m4pf@c6sBɳy̯] /OB3)jl8᚝x{wMtӄ>Zt-dc2G {miq_{~U`d!}ÜJ @`r,3@zo=3wU;o~JS\ɞw2a7IÞ}Jd6bDSVs]6{.'yp36R 83=pgWd[bbÕ@ L? Ę䳈`,(_3VMɴ燚(ZYDwZBЧUFzCGV)Zp0.(iNI]Ȅʥa@zvChvOk*?)RysՆ 36YQŬYUBGҏʨ&yңbFOD)M6>ηvCo)/>f{:*#~8¬j:a$* [1`Yir)^ 4 ՎUq 2:c[9)c  [WġzL X*YP9zEkGw7ۖdhǰLj'UO'Enakʝ ( :? vW+bXdRqg֋lǔGߒwsO{!C'{+I͇~Gȇ.,?{~W:߀VEŊo {JXz̦X(~,!Fi,y6lzYK~J$Pegy68Ք5N> _|4e>ꮌ,ΐo`e GSsU:N7eq83ȱpƘBt\AFi o luh5hӚ\4VqH{ط#8kY Y},<]^wQ9ze^35)͞M۲l21 6j>q#_l"-t/ϜL&-J]!@wt5Ju)|ݥK?/r95 :g2@ySqv68V"6fM;ft#M ؤLO@ (LW;XI7u3a׶(t=:}8vs;wުz~L1D Bk"uB\w8ɅE8*9:j)h){*3ZD:U\ AR=VMUx/ΦO3u(w}ѱG5rP7Rg;=qqTYLRQmy8ae0+٬*U+O.big !س9KdcbV>~(T~j!=&=ov/`CVzHb5ffP .%^o\5YZH_2[wo6\/Q}K?b3=6"a3DWzV snϟ ~n:s`S]~y- >=hl( S{Pks,7-[x}]?eUdtT]zΔ%j e^MʣH(Wi(R4̸d M*YkQJd_W-knA)\ŝ0C`M ?K%ӂ>ƌn`XfS{vP'g Q)ko}{fs@fYa "m8 IIqn5&cBݸF6!G:a)"G|q,,-n#?'=?H"z͹fXfjw8n;Sё8-@-A|tcYRdXy'綘,OTHqA(*ip4b2Λj^'feYHWx6)}/V?JN55Nz:8.~b:v{&RUF{q=z/2_ylATqS:VonF> bZ|V2jGC}Ӝsk_0A!Bq="޿]L(0a?8>~@W?>6*ǑڳR'БX_] c%6gfV~͵aU{-E ~RlhCq֊<9AfCGUϹ);wM}2p[%ȼ~~m| =`I 3*b{yؗL`|fp@(%$x|A tSt -yKĹfSdAo(%?y}5*5Ady4r7G:Fu#YsCֱc<wR࠾ۆsw %ݕCTH\IȈTF#;J޺Ut:OkYkV>"2(tt6[eaTGQ}bܾLp5g'd wKע `g#5vh*)A׼ g;{H4Y0X i$f!BW< Ƴ) [14}_!3rU%;=;`yVُ~*;^%7̒Snc2>78Y= ^xpti{nd*R@½]Q\9ר d̍F<#wT5MBY^e'dKR&iɁ/c'n.8->;.RV{b7:#pu*Ch@Sq'lLgVց&T/('-@YQq&? @o`-?dyUk}VwGufep=mf>ys0R>HtB@>΢E,zlB=cDx{SX_|g#Y?0Fj܆ WN-lI&&B+e<4٘)<|}sUNaOtxe+F?K(Z ")6Yfgœ>=/d,DŽ<X.ÜkꬼwFdDzhQ f3HV=f& &}vgcQ'1]iWC#jJ3uԺy9݁d3Gf/_=) wAfD6xeBvS?`Wg`x.uƖW3L4MWX z s6{p??v(n-f+5*4$+Mk3OBҏ`5<C$n-4Ҁh_AS".@> iSsMdFP}xW{G&Cd,MZAEDuзi۳@ɶqF`>2̔RNib"᫨È'X] nhVӳ]*VhlQf^w%QU5f ߏj+S*{PUuĤv{2GaNl5!~N5Bve8d˧t8-S+Pf% No=~6I2r̩HQ;r;{[4Q@`4SXuɫ ΄BO7;_Y:6A1[`eÄ/}yqaSbPOggS@QS >w)E\hB@5ʂY["fX~Ti30ڀ7ɱސ{M24 4~`HWhwXxyzDp>bb"y{`Lצ*ƳI-ޱFɜ[b1KWC4mUX+3L ]r9o}qTTc7?&Ro#I ]b dNT]9bnf""֭M;1R~[]tfyqfb3 l݄㰑cz ߕK@?>OMq,s5m\^[6*v/h3ItFpZ19&j#g;[)79a㭍 I cUSD* =Ea*{Mq;iv٧dpד6fMp?1ʹ#2|‹w˟=Y$}vwl.`c}-/Bwu,D"jN *]qQ~ɺ 4;}O]߉PDqy ! ,pf>Iql"2ļj|Vx.8A*G|X:os]Z'e@l,Oħmm rV+- h>כ<3}-9`qP t@C>aVpL AT5%>nd[+3Y8|?i,蓑cF!M8ن1:V眎@Z2Yb{+@`zVS@ϷkqzJ5`q1\U! }C\>Nfoи|d xuM?1+KW ,x#SkQ7ph8)w#̼Ƕ'8-#!|F}= b"+رJȊcqf\+pF;_9p8dZFLdMQT|f? e; 0jofqj׵0 2`/L8Wm%dM'Gը"L=c YDMGgN0RFs!ZC`:Tj0.B<|~li@u ,þ~y:=j;rO-=fEA)xj?w)똡 UE},aO +FFR @O6G~jƒ=M/c1cnȷ}\f?(eqΕ+ ߳_}]Oɪ [p{OD0b^ ],;8! "&wKoEƶxNLt_?T.5zxs ]fB! ?@"|~ Mha,3@c^;ȭReGfh}Q6)D^(44bQ;u˩6[95 t9 C5|hJ\gffG_oq혇c)K#!ôp89Fs$dP8pQ(ىSRY|_)66;EZ?Gx }T.J{43Nd_Z|2Ճ6 fJOQi;O3D܏g͏ffYĭ=LCR 6L( SvdǸEK>MIVڤ`lP 'GZ {$ wn^h_$j U"U7E2+=>\Njw%5;b7;9Wn=YȦrkMAS%twPNkoDRhFMgDAiOϞl=5a[r>Q7T5;P? crE4#^Tơ(9nw2!fl&sV{Ot_Z6aPե+b7tcv]YrFKX~y(gZ߅uU2$ߤ;z(-0!yP6*v,2#SՄXRڟ96g#|v´%;9PNgH5F<XyDDӑ~e5YqnD#]$!;2 wMj]msZ^f2WwzGmmm*B<]u8VfFf @߲[B|U$wi✫q"T[^v~ZI+kHrjw;>rwgkC4uD߳phc$$a7]a(gs )I.Tkd)4x:x6gIT٢/]p*e'g{ܮBx47;98Wݑb m"]uf(~z/T Εh*}Pltu㯱(vp$  vд:Xe U!rT]ݩQ?;pMsCցe`umՏJb \A,f@Y^T'o*^*LnkC-w*kV9l.V9;Q- eūwa듊(o;oaZu+ "9d-Ry:`!J8|yj+ٗcϣ7cɻ5Cc,i͆q]>}>>|EEӲ:4Dnxk2QzN>mhfͺ%M *: "HߪՀ`l22uEwŮh8\*wTuTd9 &H_~=\h@rfellX.-5KN= 3Fsags6=Z_u~ӎ`@6$ھmk|FfN9-U'LǶь[OB(v¥b:\e:z#EZpʆI%фt, ۢ߷#0YcўVj{;[^wAX0jh?O KX0vh]i`BxNqzEIr%C@;of5Y!tzV~䩾}ܓƞJQ漼E1Kd}ޮ(s43=:Cեt\Q<liABi.|'m OO3mU(w5uh1?@G#5s,3|1xPr?Fwz}^zDRẹ(aidQHV8mv9ҠQx14ssh;_NW|l8{Ώ Y*p]/j@v`*<8JlT}.qs#fٔzQYTS^*8J߇؛+gFfP`9[sljѺT(S*~0s(rI]ϵϹMMD֯c%d#΃.ML+AԱYb0ق~_e;>sg0^2b* 2@U>AԊ=XGfo6ޜtn :QIY}dR^r16v xyZ_aQg_渖_>sۚ +Q0Ѷ,!u`+:il{P?(jP)>Udfft>+WQv): %0::0LL^t*+^1]m53_urخ@UhGfөOǗ ƌB.n6"е>W  /7Ś&#S/daΗ.'2uǸW/5Z7/u7{³`L {7[36ekTF)J*rٜ9aE/Y &mͻ({q%DE[v?Ţ|+33SQ}U@泵}Ɂ$l -A0SD*峌)!gu~1}8N89U~CccB^L"+2lcy^Xk uf"* B0o,|)URߏRU^TLa坬UۉSyls>u#?#O) 톦{LŤʮnُcwk4T^ \w[l%eLrTƁf]s>Fj>b9e Cch]Seݘ̚1/ -'| -}6tJNg0&#'aK=Lz~\_Np+A 7teF1Jߓ`p]|B"\BX+3 !ڶ'M=o/Wƛa()3'O*4dhm#+l_I}>oc''#ٔʐ$Dh^Zj WYѶ7ae,v${ .;`gf/MVM]%t^ @9B+uI!Zf :dQGP(KvF!ptaX,%]AF|[7&:6$*'f(T TʼGҧ{UT5+vv+ kp0aJliWWeפN %S,WzUG?Hr.CN5*yҚFV:){ksT̄h f*yU>+483#3(k?^\0`.-]-UtTg^&83'`#|m>Rǻ0C!N]58!:vmj 啣N;TBX9)swJ Ʉi*׈qvfIA;M:iT.+c耵Z:Qu!Pґf/ޫXMTXqy='sslt>1Q 8&C wQM SxT{tݵB J f8u,)2&-x}`;!Ⱥms1CR.a0+< ?s5NmS:heJɨz]ʌ_KɥsCXW(=ӢS_Kہ믇K@f/l88LO-sZ,g^KXvȠ0Y;@Ҳ*|*Ս<ҋǡYұ際Mj͌%sjkpI0z:AaZpq <C7+OP<PEsYԚÙ3YPޯ~>,7ZuM˓*d-hQJOVm;fQE#͒4upW1rr:N0bt%p뜇KwIR#ԡu1㴞TQA?w @hv,/M>za]uD_k?Wbɍjb,&#S۷ٛunJU˄rC`J[m'5i4nl{pn5}DkkqJ;P4pa[}Af**5bGq$2@g_˟?Lj.TBYs:D1pubV[Ge ̥[I6M/`,6d°&v2 #kX=H,N։z( ޺չfuq;}GT7|r UKVPT#&1IKHz8$xxd/'yreSY8@HGa! (@<ha|9Ț;}Yd'{7npѣ.WLJ4t)m1r5G{ @A.b2Sqsqv.$J5oZ#xWw;?FT6dc&?U>O(>q6)}=xj[rMdt옵51(̚Y!tLvwQ-7Ocgʫ `>ZhI:*`r \>w:7jKqY3Nh>իwͫ]Pm|5}p~ug!q""ʌf>FE}}pZ^iq걝[] O_$<@(c'z?W'EkeB@J<bn}=2䘕>@ȐrA[ > TDq"޻Rzd斘eGRbW:qyM֤yD]T+vS_f&9-ϤӨs&,CGݼUғ|\UҢ+FҸ$EUخβk G>k6}]j(f; 9l;2F2v0'10EnM>cf;6PQAЀ?@Q,Q)>U4!6/]W{ׇ,j4xd|q}FuΫl`wYx6fΗMW̤4o?5O՗qWmcv2vfMF#Jz|{۳siٻ#@ yA(eHؕ)&YM{Ɵ WǨr>h n*;'T rǐ I?#ռƛ~8[o8Ʒ֊{_ȐJVS\um EnOQb{w4>+=MEG f?Lr9\e>33(hŏ~Œj8Gh5մ[`9y?C8>^'c{u0naqI\Q&K}/&6O#dyIUWZ.%#<#@/ `%X"٣1muls[~r'4qQQJq\C9Kpv^}:s8[ `EթnrT\ ^Ǽ~ 3Cdn8?=- Q.Y}V~՝VoTV29#/K0!7эX]Wyͫ#ȩp ½ ͦ -Ya|W  c+[Kn 9+[y{}YQhi=˧,h?J5 @5L Xouo>=gVb[׬yպU%È8qܹ'{[ xH= =*XڐsNw򠻋^Gr< #jr=uwM CtEժ[sle*qYU޽yrǖv5ӈn1CށeݕM(Țtn?-W# Kh"k4p %=}(-{P4lv@"Em;@Zd7QsH rCiVu t^8q7lVwt[+(S(`ֳ?*na݅&?J=WTMRyتє[pd_Ҫ7ME&*|DVgf*BYn>R үsz*>C6>W2R E0򝤧Pn8.J:D3S@]*euszjuӏ~^ >JP>0g;;/==(V>։b*2iOmrBg;m Rdzg=i0쏻`g41?l,.:{2;nhdX5X_B"',0?@ TTN!ˠT]c,?}2k6:<⧼Ͷ&[:[掉.mtD$ V< jzr̦а;= ^<ޮSEϏ lsKl OکZ|+{L\˽>|;/dV6 q9cQ=jX6n?Yɴt9/f|\_ ~z l]L6wjt CR3>Rp6KZE <ҡ*B0Hlv&` >hw9zk߼Ŏ #8Ȅ(WUHؐga#!IVkcgqݺamRYphB>O5oH Do,~Adty@Q6h~iJ`s_cn8 ."|V>,3#V5󳮩=1Ǿ{bޓeȜMkxF8mq ۇ~9hk f.לGע9Y4H#=OI|ΕEFfPfq5K-aZrC_lkRr*bVZQN%0 9]H_܆*q~ݻS~G8E`1Do-N(yf.F\Gf/^k cW*9N-^ql1{Q*Z:P\^f}k]']+i)P. FXJ*ڤlB;>Z~uQfD/5?Qw5Grn9,)5#dlKohA|䡸_=7z&|>ގbC{%4ŷl04t\:aU"E\@f.|qWO"3gF,Ѯ(j\>VӇшiN9l'E>&Y"##S0OnK7uFac=723>6VVRU*h0~'mUQ>ъi)#wWe'$: xMpciN`.B@ZƬ`a,|5 gGtin{xC25 (;<_}BsZf GPv-ˣ5"CO+Gf6<6[ lg؛Ֆj2xOggS@QSIޑ;?ދUε"#3Y{u?.O _Vtϲ/hg0P˂TLExv_%}.6Cy^0Y.A6_+J f䮢~H#!}|':-G4+ Me?_b>ا$Ers.U>Q2Pm5ê"?|Shՠ~D ׺ts&K;(E.-N;``[z`7f!|L!Ex(r,2"SRf;QWZ*Y\l˼Y/\ DvUASMkÃhb*P!y!!T7eKSh0.#snف]~MʹVfFFP؈y/ƍ}*:o1t1R#ߖzz|[K˺.u8V8tgΠq^Ոt2j&ـwYڵŐ$g. 1T, )0 T5 kY,)?nQ<}pI;s1جҏZ#fJ*z1os3vf]w|yiuQz;gxSs 5;;J賨O|/ Mih\m!xYrk|_UznGA5Sz[l /4qvdS%.Ec2{;ٶz&hSBa8!A5axHH?\>ֱȡ! |ST:=8.C?oZ$d\{U!P~S޷,ݼOcFq*v8z-Uݧ[-Lc26m6sWQ[Yk#\: lۚL^vAԵ}<_0[fntwׁ%NRf .Q~qMc@2FǰrD6#^,6St\v"%zG1s~|\FpTL4"H:\D"gfRb];^ I +%B;uei3TplP.i~-_/7{p\P]:t"<|_hu4ŘRTW'V7dZBt6[rRKh{UjW1 @$>L}9J|whN]d~0~$> 6 ∙[}/h F?5aK/w7۾Iq)>|jVǡsC v\,}/i6в]/[jVFۥ4`DkvQްZ@l^v3(x@N .:zl7m ,6S{Хi..ʦ1#BU諸mk<auy'Vʹ͜65n Ng&1?gx=>u@3opPp:.$@_dOB_Һ:ˀ볻-?>ρ۬R rgfHdŷ6NO7E>aNvzvY>e eha=ܰwdu,fs`3X5iuq]rۭqr\J4 F'L q63ug^uD]5eX9IkKvGo:h/AƔCfv cK׏=* y?66R)]2 D`Oߏͣ@dH)eZ&7[׭ٝxV\SֻKoP#y3S·>K=羥4!I??.ab,EVqMTǟHe bK-r˦R&@{괿Vф%WLķ1_UǛ(:$^2{1w.e |&B s|dJ=njOY%> k⋎f ʍ|OpCyRkŖx`<^=\OÎA"Ϧ+JsЫDӊe:߸,U{hY[Ǜʜ)cWS9׸LA͗/UՔy>QT]i >:LUeyZumB|lm2gddUQN^3 )@Z Jt΂ W1t>剮C!H"spYZ &G Җ7PA/t.٭=׳@ #Mp+P4C{ysŹY P;_}'תyoVŤ/%wc#FvaI>WҦ3>}gF OaHS/ϥx\BDg[5 ?-]G(&K<*"|m@5W2)*чꏽ{u\LӽVEffOM[c&V,i ܙ=t4i=Y?u V}{P70~MT*לJ@.͵^DŴ9;@ *:ř163@vUqcuP٣8:^nܧ;Dr7[qtwus1fƤ5^f}l'R b3 ry{nzc }xqk1:*<|V֑aAF7j\y^hmɔ;)d.:vWXAHvrd h_wޤ〡0^NNil J)q`6eG=f?+Lud62޽6oq]8{LTH&r1:TQ=?V_@\4 :óhlRs{0/{i6_vE->X<e8 G?#}_vl˕keSe8sgΧd\-Fj }J-k,€rJ3[;# ĉ]6Zv {cIzONZ~١ m"A% OggS@bQSc'C+?HeG ֱTk^js8JE&4ѯD@)LX)d#Y!}o9fGf-k!Min2T-n!C;ܹ5%H?@e*rco=Lyv60z4+AF}i9{͟IL[Yh9 !;ԓ6>΄~];*}1u7\=AhWS{h04]g݋GHCFH?ڨ|왙!txޚz>~z,-GylRjG=TU.\C>QwTzJk ͘rDz1EYaVw8;λfK(dJf&B|0xl5JzŒ8Ts!)QIuMx!|r0ܕj/pqExRIi:"RH mE}b2&SXKӼ~{*'ѱp2G^9}6B߱>$ߍۄ (8&\QW^L..창cWz'ޑ)V& ']I,\#NfXt&"y傴KU8 (fSrYak'e@,w ٻGޡ1egpT,$0mi7vGIYӸ~ZM \~8tʠ`@P<9hrz8B9Iy?PRQ8&y<cWk+32iKJo?n~>4v㿣gĉv|W-jG:ƽ|slTQP05Ervk6t'1]$!퉘^@=f?0P>qfL_z闅z(T'ek0eL?[י^_qzr}c=JS۪ߺ: qP|k-l9/ +-T Yzٷwڷ2G?³yXā1v+ wiJ@f.G^a,Yʌ̐Tn+_vǘ2 +7v?X$6(rG}:~@اI2;WޜS׶T+م Vt mpnz\^!9i`h\y3䚙LD?CsM 8tf?>C\+E&Uoc\iVSn{8=^AM)Ķsi|UtH1oD=(:#f85Y&8%D޾mm۷4B~N:wtYyUA.ṑ:ИG4#@~K2WPTBR4<%9F?ZL؞auG-lZBvILmqUXwt$РaQzE'@cCTR!"1'?@>OA3S;Mi#g8ѯ̠n*,e'CײgT8cCU̪:9wL.(:l)TW9)RS!Q 淋Wo7/w>^9;ΓL& =KvT ͒kǍuVن/r4``w`A^=8d?R4|l?E*C9?a ߀@]hFڨN>Isfff(R7|A& Es"م:2Ext'N[z6^cp5*~^*Ѥ,4A?(YeLhi=kKS/yz4@o @QFsd,B[ϿPx;kY*l߯7Qta6)Ӻqlmuz;$,0Y#}c%VWͷMR]5/Yy#$?4ai\ifOM5~:>Udr?ˊy/C @I?}vy.fjLi/Y&" [6yНnaPyo#v#]]ViE 8@?%R:5~ɳP9y=(̴qL;~[;Mr2ťTc1d[ݢZzn~mOg 4Cmhq ʖ,qsHf*ε23Y*Nnҫ[TrUY<ȼXhS~)@&ScTkO8b[ c'={ oh+;nm:ٰ*-t?Ө.{):JbR?@>_,*p )Ow6 -ƕFjG\G?<=<=9͋o0W٦>"#n8>'|f?na *=+:f+eH<%.֞n ?1 sE2U;:?uշgs b2lA=lUUjv#akX]$ږb4KJ~|?> K:[ʗe?^V‹F|8+0űH{,g"4?@UgA,fy)\뿉B? -_k`;bQ*@ 9zV*71;t:+h90gӖ%.L}>PPN/Zzp#~zstƔR=={/Ħ"?~َ-I{A** DFlw#!__H^E  2PtH$g!{SKUض$ܽ@} Vm7Ez)z*L xmryߓ]a.jllMQJǤxǭB4Gzhy= 8Ɠc]eSL9H,|tiSuHK`!->fmm^a1%31V<00^A-sg\ĥ'g^IRA;Izuqٗq%s^CO; ~^Ao &('(+=6kM^AkQ 13z-h{9]-{kƧuzGv6f>S9Q8,ZMopJ=c-Q}+v& a\ U۱ )mu!r&y~/ͬ8s- ^OyDޣ86+30.^ :[}Gyo롦iؘ 9K\ߵi=z@YRaI"?~ 2w?O>֯rN" ŴO/ζ#SvqL'WT`5dP=zBM<ۛ }4EM0i8zD95*ΗlOw`vWƨ**$'Ǩ Nץqu8}ٳ-U8a֟S6}D?J0~\0X $ ?hN)f6 1m3f2ktNuӻ+\_f'g3?[R*~ ͐M͆= pڦ؛xjY068= 0. ehs'EL&whĹffDϏzwkk_(/gwΣfPgB9*X|S!odCR10<丬D?l41-Z gP)#bZ<~à Oj>|q#AC䩉cLEt?Y Ys&LAV~tv|>ݣN՜W e15Ո}?KDP20Ռжvة,71/n!۟Tl7-g)KP03}~w5 I\o^b/=`d?9gj>F{6Y ]q{gozsش;4%T։>.[ʧ8ml@He8^[t~/zuOM9L f`=xQ /@]޵Y4Ϲbfd(vG1˔q[B[Z ϷV7HFHU*f_psOES6߬T+cԻل0pM`u{ V~2u4 hc\d#n#5{fxq'ƙS(81+}뵷UMn)5 Y~yk,5T :7^M> =xo6ٸ]`QXlmms-1.1.3/data/samples/misc/snaph01.ogg000066400000000000000000000113071247673406200177610ustar00rootroot00000000000000OggSUߐvorbisDPOggSUߐ-vorbisXiph.Org libVorbis I 20020717vorbisBCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIU}Svte_}Yn7uuamXe[~X7gt]WmWVYםeuexmXn]WY׍a8 OWcm}]9~gx_)p˶. /,躾ʲ + 1- 2 r eG}+KWcu]*1T 8P Y 09)!R!1sR*栔RR 1rLJ朔PJKB)Tb Z5Vk(PJSkj9'%sNJ)%RJksT:%uR*%XRrNJBJ%JJ1Tb,%ZRj1PJ%KJrk11&!sNJ朔RJk+tRTRj朔BJtTJJ1Tb XRb1זbˡKJTbl1bʭ[I)PR1Ɯ[9Rb,)ZR1ZsPJ%KJsm1֜b5Xs1rSk5rm1\k \|'%PJ[sXRk1bKJ1Tj1k9Vkb5`l˵kn1bʵڃͭL(csBsIir9)sBH)sB)uI(9)JIC))c6hJ,PhJ 8yhX牢im;yhjۚ牢iyh꺶.ihi,i꺮+˾ʲ-۶1꺮+۶mm0Tnu_aX Op*auBCV12!R )@!+8!J!RJ)RJ)QJ)RJ)RJ)BJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)JJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)R*RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RTԃ eА@*`R91眃JKb12 RK1fA)%Z̜Zl=ƚ9'bZ=s'k=Zs%sZcsァ\{^{.N Y )Řs9b9 !ĘsAb9 BŘcA!9眃Bs9!:!B!tBB B!B!BB!B!B! lXh,А¬$r iRb CLRʁ$c*Б&AB@BdH(e0 "$Et.:B H 7<'R`\FGGDD4WaqOggSUߐa i doN -In5&,0pG-[yky\+w޼-\wH#ESwCH+=.{5 ޽\yi D MLI%({YNWu|rLDes@8o3Mnc5޻>\ӶݛɁ>յR l ^Tnbb}ږY+^ zݵTA򅗼&e%a!n/ L4 > ὺ#>;=_`$KM^[Jn=xwhK)Z>XR%v_+m\[Z(M= ҇NZ$3cKv`6OWU*p|]'8\4OvHֶoѝg[[ԫ6zFA4Y̷:eЇ}Pws_ W''0)qEODgI~G%g5}-i!bFSqgמ[=NTw6DRh1Б]FI)3m3B$#l 3;9YLShR~xj<*tZ]k ~^M4CPw±533SgH+1.!ojHs2G#|/n9ꩁs$=5Rh mrz.2KR&VmKvJmBs2]*jcZT֛'kb9~6˻vb0,ƽ`1"Ͷ}ih.a 4ca9FWB xIon7qx: ^b>mJ K2at~Χ{-M"\|Rލ*2[5z WvFf;gax<9}ӽTÖ!>4/NO2Xfe[WdRV\~^{_BSl"4R#m>n@Ġ{̑ ۶yi9',-G:A7.. KTOs-IXH4 LC+ !_jǭ8O (Xlmms-1.1.3/data/samples/misc/undefined01.ogg000066400000000000000000000161341247673406200206140ustar00rootroot00000000000000OggS؊vorbisD8OggS~d-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDIz.M{iZ ޟβT&A-I@30 |`WJ(PUUےj \YPnU&zJJR*B^̕W |u<ӱϱx`;<`X{s"=ס)EO[a> VwG)&mZ$hܜp>jIWO/Xw&s8HSf ]h,!xYU,qVE @yƎWМńJܤ*7N8@ H)Nu$ bL|J/?O`(cW 2=ƨmix]pǨc vnq\ȃ&)(h.f1+3Է_wL^lqR߮*3UVTRֲKwy`.?jiOeyRd4Nss+z.9\޲C${]Ґ(HH u> T)dw~ J/2>itӕSf*Cd(%ˆ j}זHmkVQaj?wDˀj>j.ArZ{(Ѝñ4t-'۞o,~0-DJ,L8m"<,iv R_7MH =iwFM&h]Ͽ~EC}R C o%oE@+ޫz%{J)< 1g~J Ԣ_IPТHMQRQ#E%0id\>Ѫ.%h^6 Hs1/}7jZj# jVqmqϝYAB$(KY9ZG΅:+7xųAI""Uf.i=zbw4}^by)1w]Uz'uBH=vBNIR#vJI.M0 )َqw *ܭb%O`Wo-{إUY=y}`Q90S$9xf_@ ~jtw7Ϟ.e02=z-wlƭk$U"""Z>4 īzu'TڞK( S-wSRW\&4\(t{u$ 0.@бI(q2xL10,5'X(^j.k3݈)5kwע0)瓀r&8q3VfSRܬBQQ5pMtD ͠JjnAU KRGi/`MFfzp%m P'<]Lċ6_ @' ׯE :+tZ p @>j.ף{u3j.MZ-Nn)"*bWfū9j$u >IW }YS%v<|Ųl1}]vEO(lx\VRu˝s{F۾W ]1++/OlO?ؤR͋#Rlo+9<8cv8>jVL}2pè{-# -PIPORkq⼪*9!ڰm[$R v2ͼ5Z36\{"9(}ǀ1DXY ,7W .MgDvL7H'NRL=M"2ϙҴ䲠yXߘ_wҢe oȟ2P8z&`0M{@DRT{ [nWe 0}p_* Cr}.Hͬ բ%U%1BWh|H N.)TN֑5IBL>*`vS8P K.k UŠz}mTM.5Y2mfw*TT2v|P`gŤvpV2ޢҖo#C Xin\C8j)&|fdy" ,0kUULÂY# Y;`A^)TӶڅf^feuvFNSE`RپCL[GKH̩&3t{U*J䉈I%i $%ac94^ L= .J7 m 6ڼ/@L~{ zzp jfmx(>PcŇV1= 7ʪJT+h{V -I`*C|s4ZB/)'\M8hf "u@hœ6i>MK=c̣$7%߯6*;bLe'/e46TXg-0m$s3fGb rcھ+a>{,Ahrl뀒:v V\v=;X:/]Ӧ|inF!Q7$LqURY8uǜjp\U7284Iɵv~`3CXz^|~ r|ܙnܸugbFؚ5 J(lmms-1.1.3/data/samples/shapes/000077500000000000000000000000001247673406200163375ustar00rootroot00000000000000lmms-1.1.3/data/samples/shapes/additive.wav000066400000000000000000000013141247673406200206460ustar00rootroot00000000000000RIFFWAVEfmt DXdatajޜڭ"6 id (3(87533Z4e68(/w,]/4(n"&'+M-+1)&+%"NY\-. { eG Y E ,01]#tK"S.[/IF^ fn29Os6 2XsIm#$"l +|- ~4FGK ޘjZ@/ْNu=(*g3{ts_8Az %v#bHnm"=#$3\" 4 6GzQj+߾;_>bټ'FA &-1743L5!//}>*!x+Q33w-+2.3664455B340,*# ([!# ?y!m7ԡ҅eԃخJ~x'tbF7lˠΩzFU - X$,.&c#)g0/:(lmms-1.1.3/data/samples/shapes/bunglist.wav000066400000000000000000000013161247673406200207060ustar00rootroot00000000000000RIFFWAVEfmt DXdata.p  H :zQ< ! h Mgu6~m'3?K~V3``hnswxxvs oibck]XSPMKIPGwC1=~4' ,I ܒ *+Y<r[>۞ ӭ(8VIi:9WsܡFlm)((r6؁Sקbsٮrݸ V8)W )e*WY<Zi(ߑr5$3ƺōƻΗ .K.2ԌPƷf1Pko7*OJ >!*299$>dACVCA?;61d*+#4 NaAI&U2*FyB3{G U,lmms-1.1.3/data/samples/shapes/bunglist2.wav000066400000000000000000000013161247673406200207700ustar00rootroot00000000000000RIFFWAVEfmt DXdataXE \ , d g=%p & , j?:m!IX~N@>ݱضآ ]ܠ_Q]ăhoc/_j+^7AFKLT\dkp t9utrni/d^5WO.G>5-s%Ta!! R0?Aރ-R]U Ljܻ1#;#>NuZB߼0q } N*6AXIORPUVzWWW#WV(VUUUVWlX9XVNTPJB;3g+;$cn 6tBj"IGhMׅ9pةh(Pm%h+/r376P8":;Q=>N?P?u><:k863A2Q0#.u+(%Q"p49 9 XwW|;mJ~6|#3x83Glmms-1.1.3/data/samples/shapes/bunglist3.wav000066400000000000000000000013161247673406200207710ustar00rootroot00000000000000RIFFWAVEfmt DXdata9}D& x g :)"$r'0*-/258 <3?ZBEHK$OXRUX[y^YadfipkmoDqrt uuv3vuMuYt sGq&olifc8_[VQLGWB~ @{=0u&+{g^fVB|6f0Bqw["|lmms-1.1.3/data/samples/shapes/bunglist4.wav000066400000000000000000000013161247673406200207720ustar00rootroot00000000000000RIFFWAVEfmt DXdata 6\6 ?O Rn G!"T""#f######## #u"I"!D!y #_X!RNNA?8) 5f-NdT3#4j|9`>`dbA #$&)'KnS^aUIb6D8s M-<̞_ί`eƯɰ̄ Җַd2r}mlmms-1.1.3/data/samples/shapes/bunglist5.wav000066400000000000000000000013161247673406200207730ustar00rootroot00000000000000RIFFWAVEfmt DXdata_KF+ 8]gY:Fq +$Q#'<*\*'$"< "r "5&%((V( (( *u,/!36:w>@B!FILLH>G.8&|`$Iu'/ՒDzpjTN!3W ߎٰ՚ ?qԆgӾQM"]`( إ.SNPġr 𮌳ٺEKu g8ڎRJy_U} ߩoQܻ[@$ږ!ہݵ EOBdR+& +efJ1JX C6  ILE{RO3]s$"#$$l#$!%% jh ` 7!l#J%&&Z&%"/  _  2 b 4 4P6I^El6 Bv>lmms-1.1.3/data/samples/shapes/bunglist6.wav000066400000000000000000000013161247673406200207740ustar00rootroot00000000000000RIFFWAVEfmt DXdata`P 8 FZ}X>49F!c#%')+,+4(" (ݲ ɠƋtrڿ޿8W)ȳԕ4+  w)3>-HQ [ck syyh5ϪU*뵳6ua>j'1T;pDLT[bintx|yg= s %r*_/49>CHM|RWD[_behjygNW1M;H1ѹջ;.ԤP /qZ WDu !k""!vPq+=(o x8lmms-1.1.3/data/samples/shapes/bunglist7.wav000066400000000000000000000013161247673406200207750ustar00rootroot00000000000000RIFFWAVEfmt DXdatat l I ( (LsZ9!g"#$&J'w()*+,-./0X1%223844v56y66F777 878B8G84877y77y655F4A3,20/*.,*)9'6%# ~m ?alxwݹY|ëڽNQ/>̣q!ޜ= /^2߀ȀJׁjZ~$BZ!:0<GOVo\lae#ilnprs&u*vvwxVxxxyxJxwwwevutsrqLpnmkVjhfe.c2a(_]ZXbVTQ9OL1JG(EyB?)=c:74+2q/,)&$=!e A p 6cتրԈ8̌͘˱ʋ(_5n̠kX' ӱԘ~kN1ܿݴޤߙ|}rof`TE.n1E cl{lmms-1.1.3/data/samples/shapes/bunglist8.wav000066400000000000000000000013161247673406200207760ustar00rootroot00000000000000RIFFWAVEfmt DXdata f!gzR0  / R a=@jc !~#7%&(w*+,-/L124M67}9;<+>?6ABDgEFHvIJ L>MwNOPR S/T3U=V:W>X4YYZ[W\]]J^^Q__`X`u`````````a`8`___^^s]\[ZYXWUT RPMPKHEB>(;62-x(#PN -V켖񪸥8#|A=!!A2aw=J"&0;EtMdSW;[^]^_^][@YU,QKDL=4),Xc|؟ʷv[B=s ފPĜ߽3QCNV[)^_>^\$X]RJ@m4%t"GɥKڌc :!48G1QPVX WS&NF;58<=@ CE"FFAFgECAE?9( < -7iMg !!#G'3&$# !#"sv'M/$3V5 64=7o4P) u"&qN@G %O.qJ#]FVU͟H\`)"ї4yشǶ{V;Ġ؝qB@}xĘalϔ2ezIқaf`AG " ڻ/XTN5ŷDͳ1h f}  #ܿԯ ,$W7V2 dw+^4H6@GHGPqT/PKNVFHA>8./5/=>I2K@S:6E*+ Z h= h f!t65 e!|EPkCGG7;;G@TR;8R*la !.]|Q_almms-1.1.3/data/samples/shapes/harmonics.wav000066400000000000000000000013201247673406200210350ustar00rootroot00000000000000RIFFWAVEfmt DXdataO"F^R j/֝Ӑ:ײٯ{C;z q&i,0N305s6P77\888 9987 6'3/,(i&W$X"2 ~S m@7>'чlmms-1.1.3/data/samples/shapes/low_sine.wav000066400000000000000000000105461247673406200207030ustar00rootroot00000000000000RIFF^WAVEfmt DXdata:Wm*=^q.DV x 2 H  Z  l *HYl'}8Ugw/@]j!y0>Xb o %!!!1"""G###P$$%W%% &n&&'r''&(z((+)))1***B+++F,,,I---L...Y//0Y001Z112b223_33 4[44 5W556^667Y778S888V999K:::A;;;@<<<4===%>~>>?o??@^@@AMAAADBBB0C{CCDoDDEYEEE?FFF2G{GGH_HHHMIII.JvJJKbKKKALLLMoMMMJNNN#OqOOPJPPP!QmQQQDRRRSaSSS3TvTTUNUUUV[VVV0WpWWW9XXX YIYYYZWZZZ[_[[[!\\\\\$]_]]]^`^^^_V___`O```aEaaaa:brbbb"cbccc dNdddd.ejeeefIffff(gdgggh9hthhhiDi}iiijRjjjjkPkkkklJl|lllmAmpmmmn0ndnnnnoMoxoooo-p[pppp q5qcqqqqr8rarrrrs4sYssssstKtnttttu.uVuwuuuu v.vSvvvvvvw"wIwfwwwww x/xMxoxxxxx y$yGycy|yyyyyz,zEzbz}zzzzz{{4{P{f{{{{{{{|'|;|Q|h|}|||||||}%}6}K}]}q}}}}}}}}} ~~,~=~L~\~h~w~~~~~~~~~~~&2=FP[clu}{qi_VLC8.& ~~~~~~~~~~r~d~V~E~7~(~~~}}}}}}}{}i}V}D}0}} }||||||v|a|J|3|||{{{{{w{]{F{-{{zzzzzuzWz?zzzyyyyvyVy:yyxxxxxax@x!xxwww~w[w9wwvvvvhvEv$vuuuujuEu#utttt_t;ttsssusHs$srrr|rUr'rrqqqRq)qpppwpLppooodo:o onn}nOnnmmmam.mmllml8llkknk>k kjjmj;jjiihi5ihhh^h*hgggNggfflf9feeeTeeddld6dcccIccbbZb"baapa-a``x`6`___C__^^G^ ^]]H] ]\\J\\[[E[ZZZ;ZYYvY/YXXgX&XWWTWWVVHVUUtU1UTTbTTSSESSRqR&RQQQQ QP|P,POOUOONyN*NMMPMLLsL!LKKBKJJbJJIwI.IHHIHGG\GGFvF+FEE:EDDQDDCgCCBoB$BAA7A@@>@??N??>^>>=j==2|$l RE6~(n QA0vdF5y#g U 4 d R >m M9~#hS3wa M,}[H3xcB0tbM1sd O@"hYG8fXJ.$ma ߫Uݠ?ܕ5ۀ+v$rٻ] صWףQ՟Kԛ:Ӌ9҆6ц)І'y'z)z r"t'z#z+ǃ'Ɗ/Ŋ:ĒEßE¡S®c fοv+վ2潝FZpѺ}2߹L[v0ݶA`ȴ0곙Q u#౐Kq"ޯLu)㭙TĬ6󫨫fתM 5l*⧣YڦV ϥI Ĥ@D¢}ABĠE ҟU۞a(杰m6Iӛ^(隳A Й^)Jݗw= іe4̕a1̔e5Гj;ْvC葶X+̐oE鏸g4ݎ\4ݍ]5ጽj@͋}V0 ⊿sP+ቿxV0ˈfD%ÇcE%ˆqT8Ņu[?' քu[C+ЃwcK9#ЂubO@- ہ́qeXI>0$ ހҀʀxofaZRKF?<30*'!  $(-17UhƒՃ4NezȄ,JdЅ $C_ֆ2Qq·2Pq؈=aΉ:[Ί>aڋ+QtȌGm@nŎGpˏ'Oߐ ?jɑ)WHBwޔExI|T-aИ?vWʚ?t!_לN9x-f&`ܠ]ۡ[ӢUףZޤb'g6v=ǨR۩h6īR$qC׮i@ӰiBڲqO-ȵaD޷3zĸ`T<ڻ%{ļeRB;,xugô\Ĵ\ŨQƠJǢ@ȜEɖ@ʜ<˖B̕A͑@ΛJϛJЛMѧNҪ[Ӯ _Աdt{,؁4و<ڜPۤZܭcn$߄;GT b}4DQ l|8HXv%CUh#4Ui%}9K n)!=;:G976#532K10.z-T,B+'*)(')&[%$##G"! 2tb:!c3d  % F j :}]5'4FS`m"xRLa q;dWJU*RYI'\KzNSmk%WE0.HAA߽߃P޵ޟރX:"ݺ݇=kwۺaُxM9;% زثؑjJ'׬םׁ[G>8-4JKLVNFF-ֱ֤֠֎ֱ֓ ,BNB#ְָ֮֬AAYpdsd`OַօyT&՞ՒyH%   ՛տlmms-1.1.3/data/samples/shapes/moog.wav000066400000000000000000000053241247673406200200230ustar00rootroot00000000000000RIFF WAVEfmt DXdata ,zjZH8&rbRDB<6.~&vj\PD8.|&tlfb ^ZVTRߨRިRުTݬXܰ\ ۶b&ھڶ8\~B.: D 8<^BBzj B  p.N\Xz(zfBX2pT:~ h P<&lV@,t^L:(rbTF6*x nb ߲ZެTܤL۞FښDٖ@ؔ>ה>֒>Ք@ԘDӜHҢNѪXѲ`мjt$͆4̔DˤT˸h|.ȒDǨ^v*ŔFİfÂ8¦Z6\ʿr>*>==L==;::Z: :9v9(988@877Z7 76r6$6556544L433Z3 32l221|1,10080//B/..L.--V--,\,,+b++*h**)f))(h(('j''&h&&%f%%$b$ $#`# #"Z""!V! P J@8.~$rd XH:*j . 8 \$zֆͼ˲ɀH>ZɘT2˞Z̤ ̎Fˠ@v ʦ

ĦFԖH,jpD<*b`z X߬߂Z6ޒb,ݴp(ܐ<ے:ڈD@ڪڶۈF\ P&.V5T;r@D2HJLhNPOOOrONMLK JHGEDBPA@>==><;;:D:999|9b9L9:9(998888n8:8877F766h665r554r443r332v2"21~1,100:0//J/..Z. .-j--,x,(,++4+**<*))B)((L(''N'&&R&&%T%$$V$$#V##"V""!T! R PNHB82,z"ph\RF6*xjZ L < , v  h  XF6$p`N<lmms-1.1.3/data/samples/shapes/roundbass.wav000066400000000000000000000061601247673406200210610ustar00rootroot00000000000000RIFFh WAVEfmt DdataD $$wwqq#"cdEDRR  g g 0 / m l $ $ W W O O sssrtsnn  ooBB0/ZZXYWW=>yxZZ87||[[@?99" ! U!U!!!8"8"{"{"""J#J#t#t###$$g$g$$$%%%%%%%%C&C&&&&&Z'['''-(-(((((T)T)))));*;*e*e*******++++,,P,P,,, - -d-d-----B.B._._...//y/y/////W0W00000=1=11111 2 2f2f22222'3'3x3x33333s4s44444x5x55566]6]66677;7;77777770808888888n9n999::k:k:::::;;y;y;;;;;;;)<) >T>T>>>>>!?!????? @ @_@_@@@@@AAOAOAAAAA B BnBnBBBBB C CbCbCCCCCXDXDDDDDDDEEEE3E3EmEmEEEEEEEFFFFEFEFFFFFFF9G9GGGGGHH_H_HHHHH1I1IxIxIIIIIJJ3J3JRJRJJJJJJJ K KEKEKgKgKKKKKLL5L5LjLjLLLLLLL,M,MfMfMMMMMMMNNNN N N4N4NQNQNNNNNNN O O$O$O6O6O;O;O>O>OJOJOPOPOKOKOHOHOEOEO8O8O*O*O1O1OSOSO}O}OOOOOOOPPCPCPaPaPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP\P\PLPLPFPFP2P2P1P1PFPFPVPVPqPqPPPmPmPKPKP"P"P P PPP P POOOOvOvO'O'OOONNNNNNqNqNVNVN4N4N"N"N$N$N"N"NNNMMMM]M]M%M%MLLNLNLKKKKKKJJNJNJII$I$IHHHHGGSGSGFF7F7FUEUEDDCCCC B BAA@@@@p?p?&?&?>>@>@>==<efNLŽŒLLÇÈþ)+ZZčċ&%__ŠŠ&&xy QQǔǓ yxJL67ʗʗnlIK̓̓̿̾&'HHqpͷͷ--|{EEϐϐϽϿ0/YXгвухZZҲұ uu)*tuԹԹ*(yz#!mj"#׆ׇCCؗؖ ووaa34ۇۆNNܾ!#LJ޴޵\\߂߂ߨߩ((UW|}MMdeED-.vwJJ55TV$#89=;79 on?Ann77~ &&iiqrRR}}**66++aa}}>>##FFbb00qqlmms-1.1.3/data/samples/shapes/roundsaw.ogg000066400000000000000000000164321247673406200207050ustar00rootroot00000000000000OggSJHH>vorbisD0OggSJHH5ol-vorbisXiph.Org libVorbis I 20020717vorbis+BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sH9 ){A jsJؔJE à{/2b1FU)[R(BCVQB1bA D11!A%T2!PRA BIPJH А@s1c:tJ9'%sJ(%JJc2$dI %JIR(PJJSJ-vR Ji-[J)Ɗ1s2砄RR 9'PJRJk2tI JiZ(RJkZk-b JiZj)Zc2$dA JI)sNB!A)J)eI A(Z)PJJ%B)bLJIZ)Z;)RZ Z1c(RJk%Zk1b TJiZj-ZSk1bc5cj)Z-bvR JI-cj-PJJ%B)bLJiZIZSJ1bLcjJ-Zck,` 2PhJ 1!Ơ3)!)Ŕc"cBƘcIcA)!JI)B))P`Bb9 RR9眄TZR1眃RRJRL1RRjRJ1ƜPJJe1tJI1ƜsB))9tJI:sB)%bJI%bB)%ZRJI%b1RJ)%Z1TRJbRRJ)Z1ƚZjbZSjZ1ZkFIFEh…А@b 1c2s :rA d:H! BH!1 t2!R!Q(B(4d%)c1R1SJ)c)c1Ɣb1c1s9c1c1s1s9c9c1s *pQdsBCV1J1Rs9))51sRRs9T1sJI)s9ZsJH:RksJ(%B)Rk1RJI)b+)ZkXRJbVG8) ,4d%A!cB!B p0 HQ1 )ŘsJI)R1 RŘsJI1 RksJI: Rk-JIc !RjXJIbRjXkJc5הRk1Zs 48ذ:IX`!+<H)c1c1ƘR1c1c1c1c1c1c1c1c1c9c9c1ƘsNP@"a9 RsB(%B))9'%TRj-9))Zk1vRj-bRkcRR-Zs Z1Zs(%b5C)c5\Rj-ZsνRk֚k=b5מs=c5{<8@%8JYhp!+F)ƜsB!Bc9B!*s9!B!d9B!Bs9!B!9B!B s9 BBB!B(9!B!J !B!B(!RB!B!RJ(B!PB)RJ !B!RJ)B!J(RJ)%B!RJ)RJ!PB)RJ)B!RB)RJ)!B(RJ)RB!PJ)RJ)B(RJ)RJ !J RJ)RЁ@bW# &BCVBRJ)RJRJ)RJ$RJ)RJ)RJ)RB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B  gXI:+ .4d%ØsA(ZkB%Rl5JARRj3(TJJXkRJ)%c5B+)ZkR֘{=PJK-X{9A()kZk%b=\sνZ5\kKJ1cs)c{c{{l֘kϽ{﹵k={bs{ZsϽ{ﹷk{Ͻ ȍp@\0:˰҈O @(&`2K6:ɋ>|BGlF\JLN=RC-VZ ^ @ Zc1BPZ)ZSrbk%39iRȐb[kcJ9k-2(Ŝk+! DL P2!A (,0t 1t!2C$"Ąj Cc# pAw!Abq$xnpNQ@dff$Dd%E% Y" !)19AIQ OggS+JHH T=DCNNKEJFGJbaJ~Z-Ți8w}֩[6Ml6ȴ:|w̋aC$hB Tݵ/?˅F Pw[y>'0|ɏ=taS>v88ԃhs#tԩm9:|ҭ& qQlE [Qhc7fK L.UՁ=mCD=uRƲ!i|Cl8ҩ')㳂l+a|_5N6 uE-t'7>5##rBt* d*.'Z9_RAr'K2G͔pS;`̀H$:މw-$]1;s/ C#VT Ep&gnn!nAnA TiJ4TɆBPGc n Ƙ-;hE7P5W,,hU_j?ZT{&41$Jp\v-_E7ӎz^y{n{fP䕚u~׶? Oi9l4ZS)ITHP-٨s|_7 #d܌Bp͢3f;Yɠ6)뎳"U@`M2&O嵋 ~qziYdرStB ^wտaN (3B8T Vqd욱2/4Urbl%S; B+tָo2V$7(N|uݷ`DqVhovy*).$@$Zwտ0 v nn;BgP%dj;%etc?M,zۮ*?nT dj_{ڜhlWѳ1\[Oʠ;7<ң8] #=?ؕ7 JޯQäjQ <4KbBSw#6aiƸB-sDwտ0 v2nn+ Q U{G޹(˦azs.c?4u /|n窎˝[?61Ԋ%T̢uf qV~h8v=q+=?yFH~%f-!MΖ7Vfp/m1,?rݣ͍S7Geu}0G9O Wf))7iQj6weol0.\o7g\ׯ|7/qG}׾ͷ<=c\ު޽wfP͝V=NIN޴!!p!]jZV M6͹s.5*|:OdewQEc@NF[ߪר]=),w7xys{|2duُ;~Gd=@XǔNg(I{lnoQ~}־8ó6\oWKJ𛇸Z0i`_;{wfr@ӻ7=7ɰp8aPﯖ)w/QJ𛛸Z0 {o<@!A Py{3}anv|zu[0}5KoJyp{oス^ۃD8m~|fp;`wFӎ\GPcu<3ndJ3t<Jy[ ?z{oスW{w6vn#J@GW>3J{?z淾awf `Bw4: s158'$CM@yUW]u՜ooymo^sx<Ƿ{b#.rOcH>NEnۡbz!F2ݵ6sn3%:xƵE}#mߚ{~ٛO7o鹛|\t^C+xsY wKyZ[L~?O>v77-B?|WotvvԷmHqm1?!>=9uj6ؘ/a<[2`aӴZZq6"Y=s]j0@>uj |p_XZjv g|~C4T[>{3bS/-}B~qy+/WTjf 뤓wտ!78)y?8N5{w?[)uJGldy⢪aelf}oZ???wտ!78)y?8N5w;[:#oqQ0lva^Ʊk7覫V??xZ;w5TnO}{89?\ ,v[/p7ja5q<6 _- tkOޱm7/n7lJlmms-1.1.3/data/samples/shapes/saw+sine.wav000066400000000000000000000005741247673406200206100ustar00rootroot00000000000000RIFFtWAVEfmt DXdataP  #'f+&/2~6:=AtDGK,NBQ>T'WY\K_a=dfhjlnp*rs#utvwxyzA{{[|||#}*}}||.|{ {RzyxwtvBusr(qon\ljhf eca^\ZXfV.TQOoM+K᳞\㪭W8!%CjK:Ќ{;&_Eނւjփ` Ѕ׈q댃7 (hĜ:ʡs5#V_j˱i/lmms-1.1.3/data/samples/shapes/sine_dist.ogg000066400000000000000000000424711247673406200210260ustar00rootroot00000000000000OggSJHHҲ~vorbisD0OggSJHH$-vorbisXiph.Org libVorbis I 20020717vorbis+BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sH9 ){A jsJؔJE à{/2b1FU)[R(BCVQB1bA D11!A%T2!PRA BIPJH А@s1c:tJ9'%sJ(%JJc2$dI %JIR(PJJSJ-vR Ji-[J)Ɗ1s2砄RR 9'PJRJk2tI JiZ(RJkZk-b JiZj)Zc2$dA JI)sNB!A)J)eI A(Z)PJJ%B)bLJIZ)Z;)RZ Z1c(RJk%Zk1b TJiZj-ZSk1bc5cj)Z-bvR JI-cj-PJJ%B)bLJiZIZSJ1bLcjJ-Zck,` 2PhJ 1!Ơ3)!)Ŕc"cBƘcIcA)!JI)B))P`Bb9 RR9眄TZR1眃RRJRL1RRjRJ1ƜPJJe1tJI1ƜsB))9tJI:sB)%bJI%bB)%ZRJI%b1RJ)%Z1TRJbRRJ)Z1ƚZjbZSjZ1ZkFIFEh…А@b 1c2s :rA d:H! BH!1 t2!R!Q(B(4d%)c1R1SJ)c)c1Ɣb1c1s9c1c1s1s9c9c1s *pQdsBCV1J1Rs9))51sRRs9T1sJI)s9ZsJH:RksJ(%B)Rk1RJI)b+)ZkXRJbVG8) ,4d%A!cB!B p0 HQ1 )ŘsJI)R1 RŘsJI1 RksJI: Rk-JIc !RjXJIbRjXkJc5הRk1Zs 48ذ:IX`!+<H)c1c1ƘR1c1c1c1c1c1c1c1c1c9c9c1ƘsNP@"a9 RsB(%B))9'%TRj-9))Zk1vRj-bRkcRR-Zs Z1Zs(%b5C)c5\Rj-ZsνRk֚k=b5מs=c5{<8@%8JYhp!+F)ƜsB!Bc9B!*s9!B!d9B!Bs9!B!9B!B s9 BBB!B(9!B!J !B!B(!RB!B!RJ(B!PB)RJ !B!RJ)B!J(RJ)%B!RJ)RJ!PB)RJ)B!RB)RJ)!B(RJ)RB!PJ)RJ)B(RJ)RJ !J RJ)RЁ@bW# &BCVBRJ)RJRJ)RJ$RJ)RJ)RJ)RB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B  gXI:+ .4d%ØsA(ZkB%Rl5JARRj3(TJJXkRJ)%c5B+)ZkR֘{=PJK-X{9A()kZk%b=\sνZ5\kKJ1cs)c{c{{l֘kϽ{﹵k={bs{ZsϽ{ﹷk{Ͻ ȍp@\0:˰҈O @(&`2K6:ɋ>|BGlF\JLN=RC-VZ ^ @ Zc1BPZ)ZSrbk%39iRȐb[kcJ9k-2(Ŝk+! DL P2!A (,0t 1t!2C$"Ąj Cc# pAw!Abq$xnpNQ@dff$Dd%E% Y" !)19AIQ OggS2JHHsfa##$! |eσQsoVmE/Y{;6򆉵.i۫;eNmcBcunδhw'w 5ukN~OR7[Bй)F<8ΰϗ|8U7%]K90,[{Z*~j+1DVtIyY&r 5Zߧczmo_vp:wKØ'>ydwWM<&3'S6771DϚ cawտ0 v2n`@I$8*BcB/5,?|w.Jj~y=\8 u}dst?NU3m\L:xѭB.g½4 8<ZrK+GnD96"Cw ZH©l 3/LxzLULj\0<Uwt\bϾSco5M~FBFܕ=?oҠk,__WMx|BD 2+%f)ԂփZl5XTwտ0 v2n`#P UoٶC& IJI2 GPؽݛ-u௽\Pe4UwlڗD9hs:-(#C[LAPdؠnt%7uwpkEUo;"z{ϧ'VtgEݵidtF. x]%K`oz*Ewտ0 v2n`Zm/e"!@2 G0z WJ? j;MyZ/\bڡ}#(Djg#\y0z{yzUxkwUjҊ ;[+E,SN cd~!xvtp8!U$kW%"g&)<ABY_A}1Q4DEY;DJm5FcU8߶jnNpmcRcK ETDwտanSps,`_:[W#$I2@^spǠFܶf=IQ<<Cv1]M#o\e0v{׫qN/UYtޘ>F; wb{2ǕNZ="K#17;<PUӫż~io%{nx'%HP4 UAuc9%lK\jA:`\Yk.N}]{XOr_'&&$WJwտanSp#eK^Jֹ` KIi(T {sww=њ;o񮫁*>?=Z;iشp5!!{%:|rߦ7.Ji~y=\< }= Zo?^B@;G^JތmxddDjLwc5+`V!gNNVVPjDs΢)fgis-n5)*%YiiȰ@VƮ/< [-:ݯ}5}E3wտ!78)yfsR$$$6_ķJ sߦw.Ji~yߝͦʼb[扗ŹJ͠ *6Ǡ~U.[AXǃQϝFzsu!s_DegŌ6( zּhxqӴg%&V cSݸݏ]=_&g`!_s1:SC4Y+}3Ӏ)f0LCHkwտanSps+9HGm;%y4}? f=q^ W}B N2˙l[黅Ryr={_zRgXt> Wue= ~2SZbص (L$>u7}R=\%Ϸ-j 0 <4n$ k4c&Ɵ>ajN2:)ݱHy롍a]H W YwտanSpW@EM3 GwZ{{%C?V!^hi#mmy$/i\muZCS+h_=1qm{~b( {K>!uE˅A< ly=[t4~coxU":̽ x&K;W>S#^f31_79v7GB淞z jЦ,U=y* Ib^LBÓg#д 05ATaKRoi^MN2!M?/cO;TcO*WSil<+7 k@wտanSp!m6mVq;#g2$i(@g:UJ5n?^fn;UcX}׼ =';Z~!]yy~ۦ7.Ji~y=]< mmowZ2,vlB7OmV6&yb'j**!:4(zj F,J ! z[~eź< =|RiT. EOggS@hJHHcdt) (W]b !gfre\ ʘ] DX.vr(^>w̯!wտan?[&hnojH8pT߿݊NE1_p sϹ ZX>O;c)Q\iՌ̫p9nW0mxu`E?, ڛSWOT2y$@5vN!}:/9NS-Y5G<9I(.nBh"(܎f'ꗛY?ܱ*1D8]6O 1̆Lb c< !M;&"*] wտan?t;_̜̓ؒ:hI)nj"Zݨ£ F?3Qgɣȹ(ӪiWrܮahFa3焋m!iE?Y33mPvC5X^{}٣<7w5YpxN $Sw[klTs_#MA"'W¦_JCWAdSu=u'A ޔ=RLK.qkNfܛ!!KnQwտ0n`D-5)X(@gw{zw)sblG(]zO_)KS&sQE32^/wK]D81ksQoJ%9RPFc0Xtw䶗>Sx}Zm1|򸚵TnxrFvw-MȣFP[۪*̺ =axB-)y禉ϻ@y_MK*"f@!+¶OFs7w,wVZ.wտ0 6<mIF7ӻWj¥ˣȹ(ӢipٯW0ulj *z; s;᪾l<,yV^hI.4;;γgv "@ Mu;>"F8 q{W~=UAYJJg>gp 8,.wtChc\TR̎)VX߫ԏ5J;⃋K{aDKh7a81=?4JHo)9ƵĀ[庒u닝Z|V:$Ze[?u4>leFzd ܺZn, ~P Q<zO4Vl_߬n=BDPws07ps$D)0)3G H.ˬ#-[ӂiOxku[5O'${ޭ(r.hqZy?\y׺ӳ1;gEԈflm rP-6WхOZgEx}^2l6C ֏+Bn8ťq:MQq}/yyO>?!IEEX?7[nڪUQnM5ݨ!/uY&}'NIHYS|ꛌ<^S· p?uQ{{ 6a@ԎQؗk+jwoJ\\ڼsnzHeT#lŞ$hmC`Heιj}tE:"FE?ˮt߲[W"r L AZ s *d12vy.0T68'aL>MID?fqaLo.pnO66O{gj lC>sZꚱYS WCxѰp/}Vw}vc^/jCw[ n "}Gy䓟'{GRk/=~7Oi:Oomn`?#9p|㍅i:O |d23g̖J'1u̾|iNJf駓s/n\u}1_aaIM]=.6}ָE5R@9A˅%ܻ`We foŘs3#M >_8ssW\_}Sx@ tDZ[a=%N_J(5-Emnv4TSfïd{Κi̸ӻbpES{߉۶ =]_~g|w;MnG/M"uޡ%Sӽ]h(LJ6NſO{e <\:dFws;77j1 >$njMգς>UUЏ˲쏻2uSu.tF+QG|hPIAo 3> Q3sGB5}IY栳M&.CMZM@4Ov l<8L1YĞv`<*djJs@<+:wiIk!H%[s 2Ks[dאjG基no+B_`\wտa^Sps֒$gjqU0lVn^}T?]ZcUv-]7Wjc s ((>QbRandl =\SEqx|=9D@rE`$K QWS\M)$!ᕪ#Б^$HZ3H܊=c"ڊx_0K6SYW /=Wh53ܱ<*?bLI#mz»wտanqDä M20:gnד(D&EY]Oj?ebzLXGd_(K]>H^<&af8hثޤ3wUg.wWhl_vU}8}kعrPIv^2}_kHrFWjTWƺ2Ӷgmؿ™]eJPzk XKTkتЅ;]IlTo^ ]U足ĉMg4_̽EXoyK^i.W!wտ0 v2n@ۚ$$9g0:Vn|4EY]Ojs6&,A;۸hOtNTKc(;r1JlVޓs蓕;kM)c)/xfmmjzw-^Ҷ K"5G7L@z񹮯mȄ2̗mPߵ[5K8۫:6ڬz\u_fwՙh`|b<,yvsK͊Awտ0 v2n?pWWsf31@3 hM͗zJRUeNG~W" v>t2g:wB/䤾9?y(aeYmf=} ݡCA7ZM}lNW,gUjluES{?5JtsS[iKwdf|#fGZP+rʎ5^{foCqOggS@JHH#v$) #3ʀJELurU#qQ0l6nk1A D1s#I@;Rbw@3RjWU;Hp<wmiCú'e7'["$~B&7Φz%)`2j mES#C+a.83&Hɤ#afmOB6=\8;hyb~F*9@wտanSpR+ݙO95F!IRrFj߿~tNxIu4n\Ok'sy,ڂ0?2t~,8C\Tu= ,zج~욎̣.gE nz+wpmȭ]ō ynZhs=oї=Ѻ_E $@/i/Y@w~aλ*^GR2'4cn%ȁ -_Ӯ@Fa*fgXP܆A@ ܗ^a2.wտanSpd9}LsT; I$g&Кf{ Y9קCO"܅tNTܖpo=3 \\1j%ɂ>EU0˲zAN^m~ԪWdV}uS3#99T=5g,zi5"`4U ""#<'[.$ecծ:۳f&S:Ɨ5E|1oKviHwտ0 v2nWw+@8#A$ $Ub '͟m]E䁈z$ͳ[%Vp 0+A[Ɔ T|"8C\Tu= ,|ڭ{^R D/ĉW}+ؠaѕ򐧃ͥk).leM6}ijuc{4#KD-``Jұd1\ڨM{Ig~>qt9)d $,wտ67)y?І$IN2g[%8 ɂ>EU0˰zjǡPRsF^j,7ip0Bwч_3UϜ 3U48Q<wegM+RZXڼղ.Iz_q680K8W'[ '{WlP?9MP|Fl6kM/|_i}cI>K(H:lo<6?/ wտanSppۚ`tcµEoqQ0z٬üVĦ 4C'(Wǝm%LYy r@Ϫ/Ug&rS2* y\lu<"r_3 g*>\UIօ;bGs+8|p`-m ڐot3QiJܺmkO5ӌ`%9F#I%@rg.wտanSp}dz^w$$I(N`ӿ.{qDHu5b.m,8C\Tu= ,۬ /b'14~oޭ,wY޺rd;32ٶۚA~ﯾԶgG.7QϚCDq6v+D+JbUv*D1Mi$EUl``"ie5$e ;'E%O9=#pIFVʓY}f Y9cl)[-& wտanSps,:/gw I$Nz\kܝM蝼3޴ ;aCU_eddNUժGAo7YpևzqY6.}4׹~y;sfǹc@#3xV;˜39~ܴ~^+7B~WgIeD4V5rF*-'vhLlxeYXBPJ.W1=%>;PԱ % ΀xnPDwտanSp>18<y}h$TVE˕KzCKͦ::ᇷ*L ɂ>EUЏӲzǮRq^uEGljsꍶ/ioe Al^(P'(Dyv ذEe{ɭN>mRcE,3Z_+EiF%XcQ!]jD[+qǕ3Y4_,fD)Ewտan''Kv66?z<ɒ$IQBD:U 71i\}I4fw6' _{_x;tQkm էqZ^w{(Q1PׯD ,S6xL0E/Vƫ'h0r(MY]0Iߛ^rWht≼K|ULLպ(iȼ<"X3\ixqnDA {ԆL,iSUr/-R^6PDwտ0 v2n.P}~?9o%)%(Nusw_5?*\BgɅ3_<_e]y(eYmfYھE w*'JUBIҔ{]8լFxC<<̹1'UGI5 eG͹1,KF#䨞$'>:\Qdx,su>UB-is>ORu=tVgL%u( wտ0 6<I=`؂ lf]}DhU%u@L{V-Gk[}I4˲2}ױ.dKaSXNb?*& ޖY}*Ze?4{~8:w24}un:j_vb~2ZF!~︇s1<~v%~ه. %'KM*U,{kUMk?yd!s uiś:PF{u7wտ0 6BpoHҖ^ \ Akf)`Z}.$Y^OC?.j?oVo':wmwΓ˙#&9̃m)ߵsզ5w|y){+qs,G__VR1}(7 y }#\T9`Aj4:צBK~ӘZ'Qc*2iE.9.u+0`;A23F(;q߹ʶ޹iÖqFc꞉hvn ,&8Rwտa^phԈ uI0i1lU*ZKlcs1$8!xB4̫q3OCV{Gxnَ̢.t|h2 |7+0,od|qDRD[ۼ=sgbl⋷(S#5!j9`dmxeb,©E5vsoY600fZ[_~()kyLqǶqS8%ⱎ⾞R$%31zA(vg: wsv nn~,JKY5MJ](mL #=0TjWG)%lbZݟg^}XsqKt+sҶ*=}Ke\4i_M\Mm9n{nn 0v|ѝL] nkUc-Q.}^lM$xZLҙRčyh- SWǦ{mZߨ2%'+ІJմ뮢UOggSDJHHDԜ8?x Csp3/}V:G%m:Ix:YE[\N\:]2{Nm]&PwShlii+O~һOz/|ˇ/>߾}~}~/}{{]ve3\W?|?}jznF=?mϷOwׇ/3@ŒO_?;sRCkXgzCS޲rnINW'_ܤX3dC$%NäLPe8yka}x?Cfi~wز7|H%'WɡvԳϖQ瑋r[@:I wwF>&͗~}*۵lXl^oxnƞj -h+ab_M ؓgi-a#7}d=Wl+4&,Yn3x^լZy&eIww{8uf/8ٲgq&'5|o^"xYoT~)ͭh>t7e޺4?Vk=j@6ችElmms-1.1.3/data/samples/shapes/smooth_inv_saw.ogg000066400000000000000000000370461247673406200221060ustar00rootroot00000000000000OggSJHH4U%vorbisD0OggSJHHK 8-vorbisXiph.Org libVorbis I 20020717vorbis+BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sH9 ){A jsJؔJE à{/2b1FU)[R(BCVQB1bA D11!A%T2!PRA BIPJH А@s1c:tJ9'%sJ(%JJc2$dI %JIR(PJJSJ-vR Ji-[J)Ɗ1s2砄RR 9'PJRJk2tI JiZ(RJkZk-b JiZj)Zc2$dA JI)sNB!A)J)eI A(Z)PJJ%B)bLJIZ)Z;)RZ Z1c(RJk%Zk1b TJiZj-ZSk1bc5cj)Z-bvR JI-cj-PJJ%B)bLJiZIZSJ1bLcjJ-Zck,` 2PhJ 1!Ơ3)!)Ŕc"cBƘcIcA)!JI)B))P`Bb9 RR9眄TZR1眃RRJRL1RRjRJ1ƜPJJe1tJI1ƜsB))9tJI:sB)%bJI%bB)%ZRJI%b1RJ)%Z1TRJbRRJ)Z1ƚZjbZSjZ1ZkFIFEh…А@b 1c2s :rA d:H! BH!1 t2!R!Q(B(4d%)c1R1SJ)c)c1Ɣb1c1s9c1c1s1s9c9c1s *pQdsBCV1J1Rs9))51sRRs9T1sJI)s9ZsJH:RksJ(%B)Rk1RJI)b+)ZkXRJbVG8) ,4d%A!cB!B p0 HQ1 )ŘsJI)R1 RŘsJI1 RksJI: Rk-JIc !RjXJIbRjXkJc5הRk1Zs 48ذ:IX`!+<H)c1c1ƘR1c1c1c1c1c1c1c1c1c9c9c1ƘsNP@"a9 RsB(%B))9'%TRj-9))Zk1vRj-bRkcRR-Zs Z1Zs(%b5C)c5\Rj-ZsνRk֚k=b5מs=c5{<8@%8JYhp!+F)ƜsB!Bc9B!*s9!B!d9B!Bs9!B!9B!B s9 BBB!B(9!B!J !B!B(!RB!B!RJ(B!PB)RJ !B!RJ)B!J(RJ)%B!RJ)RJ!PB)RJ)B!RB)RJ)!B(RJ)RB!PJ)RJ)B(RJ)RJ !J RJ)RЁ@bW# &BCVBRJ)RJRJ)RJ$RJ)RJ)RJ)RB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B  gXI:+ .4d%ØsA(ZkB%Rl5JARRj3(TJJXkRJ)%c5B+)ZkR֘{=PJK-X{9A()kZk%b=\sνZ5\kKJ1cs)c{c{{l֘kϽ{﹵k={bs{ZsϽ{ﹷk{Ͻ ȍp@\0:˰҈O @(&`2K6:ɋ>|BGlF\JLN=RC-VZ ^ @ Zc1BPZ)ZSrbk%39iRȐb[kcJ9k-2(Ŝk+! DL P2!A (,0t 1t!2C$"Ąj Cc# pAw!Abq$xnpNQ@dff$Dd%E% Y" !)19AIQ OggS@>JHHwnW}rH5~B`oܪ(g F~ÿ'ٵmW*Ԣ ޟ.72 oδ>ws# OqkD޲w?lJvcwr1\+2PK#'(Hckrwt׏TwI%:]PrH ~xldxb`)E-/'fK2X%eꦗ"\䄆Șj"-skuoϟ=C:̲c/[vyTcXwߵ B B !V4 xl?\8c%l7+|ͱ̮YsQhPo*Pܗ9xKJjk,pN̟Ep/!oU[)Htpᱭ塬n\֠ g7H}߄v}1?/ϳ'M$_R@Xȹ|l`qU2}70eU.6[J`mBC?[SãC^ƌxUah.1d;um^%.R @Gjrky^ :*>Tj@8,=' x D84XGUMߦ @T h@WBaI;'u!~캾n<ϊ"Y;oOSQENcj2UUж]ӶSWUE9N@=?֟n&cQ%epuG? ۗ##iՆDkGkg 10$ 8(b R"d&siAp悤A'I4k?NEIȻw osAoSps1CDD(T ) HHBaYaQ2Wb,8C\Uu=tmum mye-\047 IɌԖҟ̓2E' gMM?u!+Ԏ]Bz@x& S?\W55LTwտsv nnb36`PI = iH`|Xey⪪ana*,p#+8:H}ݻR< Gd@BaN,* %{2>C+7K:KalU8U{Yq4x%݂;->"P ~്a>zHf}p >wտs0Sps(BL$耈&@J@9Th À\}mavMgŅϻLV+`C'(NEܥ0:,ȩ2dk/= 6 2̈́O J 3V{/mRfwh+xq} !0p:$F !,+^wտs;77NS@(` Epއ(zڶ~Zjʼ;hup6&N+yd1wQ!;*Q8p_}n>VHCyA)Aߨ( 0S*eiV>2iO-N4 Q _r [iQf-#1]/R~wտs;77IO@U Ȑ\}maF0$%~wտs0/)B Ĥx& H 6y⪪ai~N/s˝˝^@vݔJ+^5xyq *ɢBsmqRIUi 5;=RO-nK N$yjOArlE%OGeL o,q!ڊi=n7S،. z Y=5 `Ywտ0 v2nn$IJvjq0<"8C\u= 8MſynVVJWm[iH$X06``ӳEƻ% % ˠLN;YDDfl,=bcSl F׉@Ai@a02)xt?'& 3D@wտ0 v nn[#gJ@$P@~VYpއvqy_CWEօ\֠QTOOՀ +K8{ui֬g_ZOVLqp'", k5`tFi R"pp νMMΌ!k-R4yj8X[kZx JJ*wտ0 v2nn,&xQDW 0"8C\u= 8Mj{жMNwVbL+o)MuչX HaI>ȵP=R+{VJATBQ:e1t4(g)q%d#s0"ԸIk5d@ΐkPc{b0F -s%~4-h' }V\TDOggS@JHH)j7cws;77UHP)* QEXeyҪieYmjڶ?nw\Fbݱs[`؊.-hlQכgΙ}g)'(ˌ,|Ej_d#$Wʄ.y:mR%g by .7tߊ!ɳ־=@12`ܭ:ޚ~nAK_Ĥwտ0 v2nnՒk yEpއ(zqm'Cwzs;3pcp?ؼUx Nԝ?+鿳W Υx" L$ێ!rtBu/[d:ex25+i&iG7~K]o07AteACEn~m'ALhk4 x9mUQ\@ v9+="QR6C w=w~_KT ûH4@g+d;]+%7qZKߌ ȂԽL |0 )z[Ns'گT7)3Sg[7lݺ%'[Suk3<5g'Ϥ.v2vdlI2#-"^FPhy(>zXFa6Z JC=eS >E=yŞɜmwu0`T3ahBҤ%c0"~`>$ߠ7c8W /4<|O͙hgjH%d6Hbc֙Z4u[_T dcpJ [YwgѹVh)F BWzJpF>R^/=Udz%}Ac6(6pC [)9t.jsY(xbώQfuLK`NRwՠC]Bi_ws5Il%xkLyӌ042eS{r"Ds)OCCP{U>{5>P/MmIm'FVk)^tCJ8LZBGˠXޠT+s(ѯ6ǣM{QtEzEFs`LIbPrzY8ʶ?yBBCe^|6׉=A7{Grܜ(,%6b;+Rwտ0 v2nn$DQvi䝋<q\zǦ)?_sc΍Y9TTsp:q[뙨_9DdV&:p? xxut@ЍMl7iF=;`NeYnU=#RxW iyܰ&cr:97ky|fo\P1i%nk֬O}*湤K-5ԧyY[bws;77j-IIr8 [w.ʲ~yݝ]/{kvш;BLӡ~y C%*hccjtY9;e^?wȦbyp-F6ws8?{RзK{9pQ"ϰGVg?e#(AiS^ H5:6$_x }@1F59+([߱;ywʲֲ)9rS3YԀE4-v4~S$#6:&pB>8\ݓJu #wտa^p$߶y9EqZ48M^oۥ.wʅ8 2l5Es{C_e%] (@|Hzucx:t:5f'M}jnwP3\I ޼z^hbʋd]lH;ޘ%{oc(R.Ւ?,~Б筎8hu?5‰Z!Y ,~_&-{'?3Jwտs6Va1RRQt)"|E74z[O}Te ypmlUlm^`&MK2tM鱟nԛn*9yvl]ԁ*y=FIYu}j&]T>[P6&!ͫCpqeFWD8\2 ôrQ>tGzn?:w;Y/&ԒOܼ>wտa^$#f pͣȹ(Ӣie9lo#/Lrl+~P UՁUUm!C_,/JDt4lAGnjK^<*=ދ-+oxp@ƷEIcH07hƴR%?D m>ǀ]_FK;r("~wտs0/ps!9!B pTÒGsQU74zYo2Zwznr`+b6}.)^yЪ·ݔkywrzj;+gIAF [PT#^oYYsIY4O^X6] ~f;|YEsG*Zu@F~۹o 8#K7T\~wտs0/psArB\<3` pLH"¯F>s>ӢaiY"Oqi b]xS[L'QF} -((nH!lsaY\\U9DeD(M˳1XFtNNRXƱ"mdi.7x()ڂ 0`1Ns7֟I]ȄhCd ^wտs0pdL$H j :m(r.h~~eU /|rgimSz@KX))襂y.0wտs8ps!9i pTy*$xy9EqZ58M8M< u]yz 7\f1hd0[nSΜzIQ' Vqp:/Wa{J&fwտseps$g')0$ ͘`$pcEEQV<CC?vMYVYpp+WJ'ɕf]!vN+ cVz.FܞחVY.Za lyM-ӡgbQ]9 PaD p^wHٯJߜct['.iz] .9&Dw5os78psXYĹF;Ox@ys:Q\iՍ0mmSyg:ǺF#fpaTo^_6yD^GIsۑX&U]Edn,ňkk( 3ϣֳ݉ %~띭~T5Dwj.۔aJ!/P 9K' br+ Q!T woseoP&IqpF0, 2"$y9EqZ yqqʲ˝ Wߐ'XfLa y_B* pb(5?Y'y SK桿?R Cä\򥼸۰5rF댭&YJfX  RAR*5'MIl !' 0`;)S[ܘhF`1Z($#x V="(Na5OS?vC7UILF`Tu"_~_ZZqˑI/fi jy6_'J(Q3!"J t9 EZ7Tp DzO1` TM'w8P~p SV 23$ *wݷ v !oT97ʙuo5R<W:XHjȘ h(H{,/m*O*O۞հke'̼9_lֱv<ӯL?Yek,> ʰvP;lX>$1ݣV fp@e% 6q$QIĔ5X-xZlJ1 XYbN0~/3͐j.i8wߵ B2C wY(2i~%v^ۆMkWϭ((RAj>x 7kD]ʸzx+9"`_n}ޝ1_8h'-jj}ĭm 9j$vTǫh % y1G͖ ֍Ebv_uo]NybX8W0q Kn7/_d?$3ފkzKd,sUhJ8NJ!fc:d1U$89 w fr "%%v E-!6XrZcc"+14d8O=F6?[w͗(‘#U`y9w7vM/ɗ)W2<7/,7˽"9 g4~ ȸ@fe^dOlk; w<;>i(H`Ct~Ws{p^'ng߸w>?HfSV.RVQ7})5 31oC" Iޢ{́p(oo8f&r+i8] P{8?l'C!3jwzO+6^[ۯXO|w b$xٛIF^fK-t#ڶm۶mO{b}`Mjy挀s=\z@6YR3Olmms-1.1.3/data/samples/shapes/smooth_inv_saw2.ogg000066400000000000000000000401211247673406200221540ustar00rootroot00000000000000OggSJHHR1UvorbisD0OggSJHHEt:-vorbisXiph.Org libVorbis I 20020717vorbis+BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sH9 ){A jsJؔJE à{/2b1FU)[R(BCVQB1bA D11!A%T2!PRA BIPJH А@s1c:tJ9'%sJ(%JJc2$dI %JIR(PJJSJ-vR Ji-[J)Ɗ1s2砄RR 9'PJRJk2tI JiZ(RJkZk-b JiZj)Zc2$dA JI)sNB!A)J)eI A(Z)PJJ%B)bLJIZ)Z;)RZ Z1c(RJk%Zk1b TJiZj-ZSk1bc5cj)Z-bvR JI-cj-PJJ%B)bLJiZIZSJ1bLcjJ-Zck,` 2PhJ 1!Ơ3)!)Ŕc"cBƘcIcA)!JI)B))P`Bb9 RR9眄TZR1眃RRJRL1RRjRJ1ƜPJJe1tJI1ƜsB))9tJI:sB)%bJI%bB)%ZRJI%b1RJ)%Z1TRJbRRJ)Z1ƚZjbZSjZ1ZkFIFEh…А@b 1c2s :rA d:H! BH!1 t2!R!Q(B(4d%)c1R1SJ)c)c1Ɣb1c1s9c1c1s1s9c9c1s *pQdsBCV1J1Rs9))51sRRs9T1sJI)s9ZsJH:RksJ(%B)Rk1RJI)b+)ZkXRJbVG8) ,4d%A!cB!B p0 HQ1 )ŘsJI)R1 RŘsJI1 RksJI: Rk-JIc !RjXJIbRjXkJc5הRk1Zs 48ذ:IX`!+<H)c1c1ƘR1c1c1c1c1c1c1c1c1c9c9c1ƘsNP@"a9 RsB(%B))9'%TRj-9))Zk1vRj-bRkcRR-Zs Z1Zs(%b5C)c5\Rj-ZsνRk֚k=b5מs=c5{<8@%8JYhp!+F)ƜsB!Bc9B!*s9!B!d9B!Bs9!B!9B!B s9 BBB!B(9!B!J !B!B(!RB!B!RJ(B!PB)RJ !B!RJ)B!J(RJ)%B!RJ)RJ!PB)RJ)B!RB)RJ)!B(RJ)RB!PJ)RJ)B(RJ)RJ !J RJ)RЁ@bW# &BCVBRJ)RJRJ)RJ$RJ)RJ)RJ)RB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B  gXI:+ .4d%ØsA(ZkB%Rl5JARRj3(TJJXkRJ)%c5B+)ZkR֘{=PJK-X{9A()kZk%b=\sνZ5\kKJ1cs)c{c{{l֘kϽ{﹵k={bs{ZsϽ{ﹷk{Ͻ ȍp@\0:˰҈O @(&`2K6:ɋ>|BGlF\JLN=RC-VZ ^ @ Zc1BPZ)ZSrbk%39iRȐb[kcJ9k-2(Ŝk+! DL P2!A (,0t 1t!2C$"Ąj Cc# pAw!Abq$xnpNQ@dff$Dd%E% Y" !)19AIQ OggS@:JHHGVv9Ѿgq[K222sNMҲSBݖo]vz-"p o}g̉j4vQ󖛗jmv9 w[Yn 8êd8(y|GӖ~k|_by(L:Y:-gBŪ~8v ,pEaarc 󳿟%չe~ԛCT?3d܏BU;r=_Thqj\x)ji[B=G_$2ן; )U.ǫUG^*mx·>Zoi ;s)Ljc3n $&Z*n,`bR}|){qz"Dml'"U9M 3}J$yTR钲W:^!+Xwy ϧyҒff<8fιdI5Frm:lnߺͬ}XQp4g7-! C+* kJow.)Lqh;˿Nq,CL@Y Y-M3X J"PߍY)rs01uzu_5sx2}Ǘ@倻G9B=۬aRҙһԓG63V6uɫ1o|xC.؈`l<]㗻MuZȃ*`gm }:Ӕzfp4'V>coi4UT[μEegPzw f !?]Ի+=&X׍"XZ  gPI[;OSv J˜AV[.F'2KP$h)WYpiU4}7}cm^CK`̧GW׼r@.7F)c$xӭ1#Gaԓ8-ēR_t:uMR`( U0`QJmWErdA- M0(+/(ڪXR,95[I fVD0C3yZ{3 ~w ? Km  &`Ґ4 '%Aor"8C\Uu; }4u4uYdiE;u\δ:a\tpk>nGduߥE(CDGT1@Y%nby3KN/5{fvVkARa_hX Q|qYE YPLhl|q _VJ"*\d:-hHL0%%\j| [@.F KLIvAԪ[@$wuos 5 "Fj UҀYpևv~ںj<.c=aK Qo_+>h)!_Kff"57l2Ȯ,oԪ ګTњrֱ-e)'ء mYGx0sqM?<{u2Ŗnw+ߔE t:PA˯>c-[pdc 86؋V3*1RYPtpiBKCɬcxkw?9;77R5I0 rfy⢪kۮۮkˢH$frm8 znX[iR 7>Acx3\.SGMTv/N?|=BR"Ad>GۆB2xR<]<V׳=#QJ|t TGtL60]XR8*`HvP*5YٟNJ`0t'7~ 5EBwok0`2IHP j 3P)ٌYpއvڶھ*4K:orx6h/\=]([Wԩz-V'կSOv!g*F1ًEgwSmB^n{-.ΫjTIvSym%2-fɨ$HHùEc ?X@߰ɟi)HЖ@UH>wտsv nn#8" GL  <c!n2ϲ urr`wktjZك:j>lP^y|}i8_?nnZ+sSt&kTU1)iteIV窉h'bHZy|`S$-=f0Ȯ;ϩ>D @[^wտ0I8U@ a΂>UU0z.^EgkpKA@S+i[:E ?oZ1.\f{..G5̤jUa$v XBpW:9Dx&,ԭ!:b$w!kJR]sk 8jS F(SH<@,p~wտsv nn+8$Jx*9 WUNC8.諸,;uy;7~RbXRWl5/®4-Gp dO_l"%~992FcwWGYXG"vǍB [hJH&kdqxݭa&6;fK,~wտsɐa (QTM:e,>UU4j۞lulkz-70(¯V!/fy!3/opσ])Ka %-ȁwIJ^g52?_=qkEnCTwfo׎v[lSCXSk;cU3s. wտ0 v2nnP!  ~0Jj4$ !R> 9o}!.~y=nihq/y;\42p%a/%I!|mR7ZL/DU|+;x24O7}a r8QpkSkmc ]O\F)I+nO#\s&6\LJ%hi)[bݍ3s5$wտ0'77 KNPTMsqQu׵0zǽת?읋W驮mNEG9(Tx:[S=NU_VRϝUUX. BI]3DHZHF/"ܼK&9&L^WmlyfFZYqMI^s8a.qQ'<޽¯k01wտ6/) 4'@qU0㴬6ft׽u\qyk^fzjPhq֛^{ޠGnEF:_MueTٔ j^|G*'!*xrKS=XSA/s M7ޟqU$[;ȡws|۲[{7դ;ԧg5u7Z0Jws;77U䜐j\}i9eۮȅus;\Yδ o7okcP'OZja/yTWw ([j͌?!>t>*y RW"{t'%ϔ-A DuJpfdAz %;bL{3-j /3q)Odnʕʵmr}s/yt/My7iڣZw*OggS@vJHH] ~wտa^Sps1$9 鈗+s1-n5y⢪aiYjڶz/]o[Y,w E4`zu Cj0VUr Om"xGe+F|m(|Xkj'-'1q ueUd++=}cIu1mR-2,gl&V2IUL˯ٜ˧3'h?f슷wտanqt&&К-OwR)~}!.fmSvWv [iU;EZ*vqөLTgj6?0j[jV+wM9(ŕf-qVVAȀK+o="%ȏ'bO)ERKf2eI7wR>7'W:Oq:>1h>5[LlnרJ wտ0 v2n^ DU$Ir`t߿NIZ\}e9^2]#xFF, Цt& ܚy|Nwv[ y#!oWsOމQVɡ'$w:]6RLFHĚ/ 6qDcbTR7\F)FtŰݻ酮a|Z/w%/Puj<+1Zr08%}c6]v 2wտanPmH F'pxEއdy=M㼬7yY/cU?_xs;ulhRMi;evYS6GEGIrg~5iy}C^=*/_DTyhr6aso3_uHJOcM*-烕#*.rj6$?m^|Zͷg!&*xZ'`vy5ZȐQ#J=.]Pwտa^P HCA$ tzTI[tFcWn Bf-i*+I ֤x!vZyYVf۹n{cb`zV޺ua뙠b%.6zH4Tl}趏g 6L yiʰm*~ˍ<&t$fdpSEDN$mt5uڎLQV>ON ÷(D*D D2\>Չ:>/SϺ*ɭwq06<@wr/Nk;w?=;;0xk&Q7{ڨwv|gNONo|gaxf&zN}o~k'׾i6$'f{T0D D<}=5t_NrmϾ^xҵݍOr-E{!9uԬom6O:5du}pMNNMV?1=yjlz~VK/Ç| +;z\&9QÜĨە(-K_eR*ۤҮ)Ru +'ww6fGS}EտiW7wSikPᕣwdZcq7^41wsh󂝂 Z$)pFJ㒤w.Jʲi~qݝ<Mw{mqnr$<UvŜU3`=nS9qUl8P*qP6nhUG! 줢rh0^"oMЦ?CwjeNÊZ6 D΍ǫ맷R ih SY0P0>ktⅵY$H,[F=vKp.1- wտ6/)y@!R *f+:DUjT;%etc?LOM]z/ƢYrTsu>DT/\ n 7_!h7[$636VV//j iĦ13[*/!"|l@~yFvr f,|CrH"a\&" dT(e(4^*6,9#V>ܠ9$PDQ3(&wտanP({Twd&I3 GhT٘\]e\L_SYjגGsQE3ӲZmqm;sFe*ʫXбn|Y'66ý'CJm;f|_M.g?t?x"Z`(Dұx/꣈QMghL@ > F%\Iq.mPoׄbB^?H˚iީnˈwտann$I3 GPؽ:buEEQ8N{ /Pg޶Vsoz1AlPU n?G]MBo[w=N?}/ 7LT)-vOljH2o٬ Z{{t~~u(2P\nmMU1~Q%/Dwտ0 6<m7$ RǕ($ z(rGqZ48-N<]]SOU{7E5|@SwuۡL{b5 V؊Gr]:3]vعGnɰ&vZ6g<,Fَ/S#<ӧDWPdv8tuZªU?,hժSmLky1Q%+Yp\wտa^9c `{Z(r.yZywM]_/ܘU;OLk0we^ '|nJoJ].e}co^jS23l~ǹ"vӻnaQ~xa]1fӿnJ?(-ws07psX՜"d8 vQ䜏hqZv;8tuy{-Yt.Xtnz޸\bO:4`z_ƉuG=jF‹D9en,$4i8rYV]Kjys3?&_'rNJw' 1}=hlߗ50\tU_>_ߧw?w{@8Xe9# "OggSJHH.0Bxjwտa^hCr3QO<8qy^o7z.ȋ۹N7³p&E\{~$!I.MRP6tݚY7'as4vog뢏d 5ꬼTCOV׬,Ρ9g }˵42gnw|ܟlX6&_~?=9B-3ˁҪXn}ݶ/IS%i^Ӌ1%49/")}%J XtAU&z?[ځ/ǥ2m,h3` 8$h' bj=;8-yqy4 ur"`6z6=$0jQZ+0vSK/n/*2X7;Rwտs0` O( ,@ԇsy|E70CWUwysUnFn c ĝFR1Tی7~- yMi잎f׋^?{u[ 1I17Ny'ȅAEGx38.#>a`J, w5osl KP$xwGqZt8 mumUyei8V1hĞ8 6M9ЁzBiuD i#b@CK׾K% }|@woseopj.5 c0a+,abdAq1oB `"br 1A<8څJ$ 8'^FS 1\/H 5"2Jnqb`/vm#:Lt a!sWI wos7ps(&Fp!4y9EqZu8 mum5i%qx5Xfp+/Q5]@ ֐.==މߕ`WSxRP.фr-kKe2Yy]&"P)7EyU2@Jn{&**rM` sf= &SH[V3 yʕ7yϷj83Ojd9X()7I~wosAo0Sp$IMN6~ ObC]#j8p4vYݪ4Z!u7iX#_dH\` ):xHaL$3qQMMW]UE8AU7XA3Q76#yxviS$)mus7kkq"$Lĵhj´DpD:±! SH'QeE!{s]*^===l"2|hiڠ.PwT|Bk)ho AQI[@A@#bpUe=8Q[7wd %E6ai MvF7qQM]׶]UlG5Km|_8w{lC+5,qdn(S{a7nN *L+3/4as1E[a ee-GTR8lg.NB6RrZJ2CnPDpzlĐE Rv_RxHw9AH&@"]4hh".^usӺ/ַvϸstbe- p'H!: 0_d;oYGrv.rYNiM#em̑,n 4 ?ݩV/e*pe~/d1{y8UF.β@=hZ5\W'dmſ++۳"osSVA׽K@u];90QWHdZ&K薃˕mmY}lwx<aBF (WVnM.]yPN"5B?DsPAZN!Q:"0ޚ-,m]! cS2rLf/-7':~eu)3p@Au85u?u^O[ɩԺaBYTWJ7$k%3z͢?'̾>~`|lmms-1.1.3/data/samples/shapes/smooth_inv_saw_dist.ogg000066400000000000000000000414051247673406200231230ustar00rootroot00000000000000OggSJHH!vorbisD0OggSJHH5eC-vorbisXiph.Org libVorbis I 20020717vorbis+BCV1L(ĀАU 6kZkvZkZk&ZkZkZkZc 4d@(JdRLJ)e Gr9H'(G b9=dkM[MJ)% Y@!RH!RH!b!b)r) 2 L2餣:ꬳ: -B Sm5s(RJ)RJ)1BCV BdA!R)r 2АU ǐIO$-Q=3E4M5mUwuUWuVuVe5mVeUuWuWu]u]u]u]u]uݶm 4d #9)b:d !*&jiyyyyiiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@q$GR$ER$r, Y@R,R4sH9 ){A jsJؔJE à{/2b1FU)[R(BCVQB1bA D11!A%T2!PRA BIPJH А@s1c:tJ9'%sJ(%JJc2$dI %JIR(PJJSJ-vR Ji-[J)Ɗ1s2砄RR 9'PJRJk2tI JiZ(RJkZk-b JiZj)Zc2$dA JI)sNB!A)J)eI A(Z)PJJ%B)bLJIZ)Z;)RZ Z1c(RJk%Zk1b TJiZj-ZSk1bc5cj)Z-bvR JI-cj-PJJ%B)bLJiZIZSJ1bLcjJ-Zck,` 2PhJ 1!Ơ3)!)Ŕc"cBƘcIcA)!JI)B))P`Bb9 RR9眄TZR1眃RRJRL1RRjRJ1ƜPJJe1tJI1ƜsB))9tJI:sB)%bJI%bB)%ZRJI%b1RJ)%Z1TRJbRRJ)Z1ƚZjbZSjZ1ZkFIFEh…А@b 1c2s :rA d:H! BH!1 t2!R!Q(B(4d%)c1R1SJ)c)c1Ɣb1c1s9c1c1s1s9c9c1s *pQdsBCV1J1Rs9))51sRRs9T1sJI)s9ZsJH:RksJ(%B)Rk1RJI)b+)ZkXRJbVG8) ,4d%A!cB!B p0 HQ1 )ŘsJI)R1 RŘsJI1 RksJI: Rk-JIc !RjXJIbRjXkJc5הRk1Zs 48ذ:IX`!+<H)c1c1ƘR1c1c1c1c1c1c1c1c1c9c9c1ƘsNP@"a9 RsB(%B))9'%TRj-9))Zk1vRj-bRkcRR-Zs Z1Zs(%b5C)c5\Rj-ZsνRk֚k=b5מs=c5{<8@%8JYhp!+F)ƜsB!Bc9B!*s9!B!d9B!Bs9!B!9B!B s9 BBB!B(9!B!J !B!B(!RB!B!RJ(B!PB)RJ !B!RJ)B!J(RJ)%B!RJ)RJ!PB)RJ)B!RB)RJ)!B(RJ)RB!PJ)RJ)B(RJ)RJ !J RJ)RЁ@bW# &BCVBRJ)RJRJ)RJ$RJ)RJ)RJ)RB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B  gXI:+ .4d%ØsA(ZkB%Rl5JARRj3(TJJXkRJ)%c5B+)ZkR֘{=PJK-X{9A()kZk%b=\sνZ5\kKJ1cs)c{c{{l֘kϽ{﹵k={bs{ZsϽ{ﹷk{Ͻ ȍp@\0:˰҈O @(&`2K6:ɋ>|BGlF\JLN=RC-VZ ^ @ Zc1BPZ)ZSrbk%39iRȐb[kcJ9k-2(Ŝk+! DL P2!A (,0t 1t!2C$"Ąj Cc# pAw!Abq$xnpNQ@dff$Dd%E% Y" !)19AIQ OggS@5JHHh_QMRNcSe >,M6t}wZgsi85v7Uc:IunF?R}Bm8noh7 |ʄ&4)|T]v1 Xyw>M'P*B͏zԡhwUuw7L\zu}{zvuy̧g]eW?ozé80՜ OXm/C󚬇߬fZr{>\rROµȪHs :<{dϝ S:33sy9)`G_P1p)qOuuwoc:Ɠr[*Y 4Tif5lJ)Oyp9!Ȱ͌d&ee]E$-5anܐtV퉮ꚏTrvWcFyn>Bams.!~TW|`l%]f1~5mUҖܦ *%KI[pgx/*30 ~ \0ْucP]OjO2'?p(a-ۭtjyvθt.@iLOEo'=9 8KBi|빞yosnK_59WM9GQPw}`J␉F]M|zz{D3]| K4b& iJsL#b+3^nS Fhĕݙp||͜V?e8?>FQse.țx:7zwU+NJvs=ׇ7_^/6qܦtU @lT\l+Kת!~ח3S2JM:k9,@~ڟ瓿嗟l =f`f،ȴcCY/t9%i׫pTtvp^^qw.S J߳zypanzp}u4WJfjElm~z1˻i[1NL\޿q}owS>ذ^'>Gr:ƵEnO:5I*+~ Ǔ'cIg_/ BJH=Sː 0 ÐLjg^ڔe w~cܓHja?_83?MqvrqPh'_~Qm~[:s(Qh .@/W=~^Λ$NqUDvceWGwE87;R$!*GX:g%q90;[NM.RA| B.|{L}+I6 d ,qr X)HTz ^wտs0Sps68TM`&'DR`sqU0z=MSEn<96m\Tkm EczU(7 sm=-뵙u6+.d91m !ͨ1B}ITёj~_%EהAe+4Ly%( B2p9Aoqec?,o#0=d1o 7],~wտs0/)ښq@DU'e΂>EU4, ug՚U W;JXz}0yA4BdWҧ}>6<;ҶB+ûn,ݳ\h-f~ɬzƳG-?i%mQ0Ȉ|+A%OoSM=A;ss֚@@kzU'zFqcfD;|wտ0 v2nn$6 P5 IYT4d@oEY]OӼ7uS~ wl2 (WȮڧ]sPtW(ˤFmMn٧o9VR8.'%eJS9iA9vfۼtWc|zBKl#A媭1)2UB[|$YYQ\~%S1 ɺ64Iu>B>{}p-m! wտs0/)$" @Q0nDZ k.>UU4lwk1˙尧&Jls~ru>3j=~W֮ݞ78׷΀>K9XUozMhdr84ΆM\m*tzPZ,IY=tD(AVLڡϽCWs3ؐD ɥF:X{mA>f#C4,wտ0 v2nn$E &եH\}i^myڲ)~{Vu3pa28~unsSuJp_qןzPyd5y5xGqp.0Ţ1&j<՗r~Zq֢}R󩭍_u_{)e=&ь%EB֕KnWA~Kml@>Fld| Z c¬c&Lq-H撈'fUtkovn+⌹ QZ#"qؽ ws;77@K INj8TLԪԥR:6YpއvqZVy7OS_7Տ#v}y.Ժ_kL2>Q Tws;77RaB * 40" l?"8C\e=t}?MY-S6Ovλt7^@$dwM0U)7īT(>7px[.OPsAcpn5+5i, S~[Y$(qTC-fPeɽmLCJ)8Gbf9 wտ0 v2nn7$Ip7y(aiZ< mT?]w׹ܹieLk)6]ڟ5-@SʚmCzbn_~,G˪42Mn5< OggSrJHHY/=]mSBwտ!78ɸܐdHF`t?y(iZj=}Ɯ\δ2˙ݫʦF: =wwm ίSsw {'6r>T! D9G0GE^t4Ns:duU^xHDuk x"9Q20HJOw{^N3}Jd&qgJpeġj$#wտ0'77UML@>U!.f>Sv?G.tsc8jZ]ݽZrOvGj (ĦbaO^bf?]qd&͍@ةk$"л_׻_zKt%O2͏ f{DL}UAԻ/@J<5_ ]n[{ɝv ,A c$bx%;B2_ Qwտ0 v2n?RHhMNw =?y(aelf} Mū;RNwwTWPmOg t*s]#>24Jt {V EM**>DŽdQg~WCWW<%2]K\3ltcӅi[]H(нzs=߶T;p.}DgSYE79ÑvFTF#*Ywտ0 v2n &Id 0:~nUUX.>EU0˲ڜzGj`egJ,n,֦oN/go5I_;iɢ77sPѪg̃$0XFo? T`x=g6mӒT;.{Ddη[[,/— )xA. \5bih5 4ԂۘsYO+|I9 7.cQwտanSpstYG,Qj9(`t!DUhq,7kɂ>EUЏӲٝv ȝxw?Xq[ j$QRZ'2eoʚt,`I~#9Ǩ*A `NE tN\jݹ+9Aaߕ $m]Fgkb}@1X>W6N#ɞ8.1ZoGDNl8k;[Iq)Fwe5 _=x۾͝7ˏNԇ7>q>}z`ܾnu5g[}E$I Nyy'8+ ;O}>SD6Tׯ76 e,2x5~ACxd,O1~XuXi$*%>eΎOQ2{יJVgЀ? j_NyFAKYQ^`bH0S! ZmTul;Tq]J0ŹP+[}!Iݮew4c]~v>)/w@YGFnRypJYcP~؛-=h䎳w9dwrgٝ$$ ;/<3Ul :d@irH~M9w` [Fٯ)gws ӟ߷SӟO縐-Zݟ|I6wgGۺuSwOU-Q57J߳zi0 աBw-1%n4{V@#d?FpƵ3ܻ` ;;k1|Ώl߇[4Zws>al>y;^}}Py9mtNjPzƩ|zjvONҞ;?MZ$IB piih&kd+c|7ҿ7WNٙ/FjqYKVn^e1~7kO2r/mQNƏa{!,;Ǒ%1s: Iɞ\yQ"SY۩]g‹cq51K#(YaٜlŚ X5wտa^SpsZrIQ@;%y4}?L^e.w:wss;{ ˫cu7g/ a*,³M/[Q_;zwOX8 'A]Oz iQCYǭ65\Ohv])da[XN {dWǾ/֢)wEϟ=6NoܢγB}MJPK&$E5 5Sw(wFqwտ0 v2n`59ƻ7w+0ߔG޹(ap9nWԵrP,g/:´ f%sĖ;H:u􃜇tl-O$nohAR˧ 2#LVdx|Q.9-}^IH"yII}4'}A#jHFTLu5)@h5&EfnXٗ3GpN/J.oLmOVch w J=OLcX1dLr7&E \(wտ0 6<mj#pTݛݛN)j¥ˣȹ(Ӣi~woW0Yz2~Vl=wvFPsr]~ZG27Irkf@"&[ʤHY е^/U2҃W_g9gv}_ I)S>ql~3ZU^xL Giw;=[4?rWOggSJHH9'dwտ07aQېGs>ӢavwگW0n_Nwݹrw.2^{]N*cRԬ0ؚJ 1.22҃2xz'DSkIoSA'`%j/"`,KSغ6CYt'az" HewCʚM2ELꌙR̛S7 wտ0 6nX`NQT)"|E72aǡk˟ǽ=y:L+|wPuE=*Z"/AiAP^z{jTx,93#YꚂi6n"G7 } "iK5{f4I+V8mO`K'ڹjDW:ULؾb$DN~i-:\_C|gӦ6/Tvg KeѠo_"a\wտ0 6V5'y08*c#hyYyﺺ _ /|ns˝Lk?S5 +^zA|a7Շn{z$;ZAs.Ujq͐yO.'~FᏁ6"Pb#3ςOq cMJ~' rӢavsدqu_sc9t68~P bO7i8R³)Tp.r/sLLW.ۮJ*mxKݖW6VԝE?7Ʀs>ӢeWc׵y/\c93mȓO夬TU*NzDE%juaϻfe ktO6Jy{ȝCbG`#e@[ӠLf41l!s-/On7R;6Jy_%&Omuѹ26V(oU h8je\fb 1wտa^pÜ'DKrΏ$uEEQV8NeRsl4]6ԧvQCfTQ:0*^wtZx2# "rҥ0Z5UxFYㆹ( ,Ìeʴm.W}]L%jP$!Pwտa^PIR 8p %2nmy|E34z[/}5e^]/|sUrf]Nqvu۾ׯʶ+!ؙn*kä+l%ekSHz)ɒ[ӣF&)JLr60:Y\6G~h1JgYXB'ŭ5 #)Hhp >e˱dk9 ]N}4eOC˛xwտa^PQIP(+Qdiɣȹ(ӪeW]mz׹87XfqjxKO:ս„8m5^AQ W#1&&CG~-kT W]M%=AeLuPWJ/^ZvAiLƨQ 2/p{W]H&5 2  )|/AΞؤW + :?J^wտa^PUJhQabRh.φFpgy@W' YŐzٶ1y PA*,2EtE{z6͕UB;_`y_$O'"I06jx͌}}IFO,R~wտs0/ps Rцd0>dΣȹ(Ӣae=n싢ȅu3lsRV Ῡ 98r.4p_k}口rȺd@u?Ω6!>NHg#떺"ƷsjbLɹ\2;1B%-I3w0n7`"X(M Ishvu|+  iw#"$ >wտs0` c.%RPq UGGU 3cbI(4 A#4)yocE(Nna.*͟{۹˙EYuvQŮQ<!46}ҝˎ;LU Rw ѵj3x-vUqCѢY LV+mj a1hbanh&,JK$lv_v?fhn&9KN[3|kDewʙj PվV$U/ܗ6[Y%qVX6I9 hNTԑviͤwb%%i9 zotVG^¯3ZHv >w5s L# o԰1gm7m~9ܘ3m0nv~{}{n=:2peu+Md߆K2aO=q]i+gϴGvţ4TSet5^Ŕ[ϼL7'}sqq<5jn9ݜ:uvȢO]=P:5vAB C4{_^[tNJ[8Xj}UsnPh7)ռgL;:1'89/ܩoTTN3,UV WT~泺h=%gʸ^/kOƟ@˪M6/ `BeGsQIʴ*a+d DŽن2L^cFE죂8dJGx eA _>*{{#ԜiMw<~X!>nTv/a$opFZbK0?wV[__u -tHOggSJHHbq.1~fwesy5eo֛얇G?my% Covבylaˤ)y+ĺ}{-GCdxptc|6Qp(jvqKBsw]K5:bٸ} nxyީٷʍMݏ?oSFiA81slqr7sleS3rRMom 38w0yknS婺SujggQ~qblmms-1.1.3/data/samples/shapes/technobass.wav000066400000000000000000000032021247673406200212040ustar00rootroot00000000000000RIFFzWAVEfmt DXdataV^䞗fLGJE?&Mʴ"ZfR1ٻԻE񺍺(EӸ]뷈'Ͷ}@Եȵ͵۵Kж"|߷E" u_ӾEO c½pv(z%{+NJMȯ|Cʧ tG̵!͑wZEо-ѤҎx_Mս.ׇ֣dDٵ#ژ zcCݳ+ޜ ߁hM8)xi\RB4$rnikgfct-Gi,\*h UJO [ j  |0?^~5I[ kz& 4!!"A##$;%%&-''~(#))f*++@,,{-..O//0 11L22t344055T66t788990::J;;b<>}??}@@AAvBBmCCdDD`EEWFFJGG:HH&IIJJJgKKBLLMMMQNNO|OODPP QqQQ!RkRRRRRaRQQONLJGDA=l94/j*$Q oO^0:ӹƵS@Wq侣‹I3>b˞-|Խ0'a3dy`*]Ccg_Ex8~M =,!c_1 t_M3vT1 ]/  } N rM(oJ/ t!f"Z#Q$D%8&,'( ))*+,-./t0_1D203445678k9H:&;<<=>Z?)@@ABPCDDE\FGG|H(IIpJKKMLLyM NNOOPPP_QQ%RRR+SwSSTTTTT!U^UUU VAVuVVVW3W_WWWW X0X^XXXXY YJYoYYYYZEZgZZZZ[-[T[{[[[[ \-\P\k\\\\\]2]R]k]]]]]^!^A^\^~^^^^^ _'_A_b_w_____ `&`D`W`x``````aa+a;aOa`ataaaaaaaa bb2bAbRbdbubbbbbbbbbbcc"c-c]<9603/+'#sB [X=ןQ).a۸̬iK Q7љ\lmms-1.1.3/data/samples/shapes/technosynth1.wav000066400000000000000000000011041247673406200215010ustar00rootroot00000000000000RIFF<WAVEfmt DdatadE {zܿ0#ү0⻩1ӭSڎ q3 >tD$2NK!#K#}a kc ~k bhrCK( #Ad,& az0҈ϼͦ^m ` %!(*)5+*0/* *k'kDn;VNk]9 A\e  ti8h@$.! P%meq9n$*} _-jl! A$##"i N ]!#6;"m!%%t)<~fcw؎1lmms-1.1.3/data/samples/shapes/technosynth2.wav000066400000000000000000000015301247673406200215050ustar00rootroot00000000000000RIFFPWAVEfmt DXdata, vѧKT@e)8}OŠCL@˵ȗdܨ?ʝq8ȻЪ,שׁˎ&Ëgc#/[тٺџ^ϼJ0K!8z(TF<ӦPN=ԷԩǹDyr·H}:[#%!=Nٲ" ^"ti)`J64$qRmG #8=͹+  kL _:,sҝ/A   =#7 c$J=;  EfR%)$a Bv/$% }:$TO1).($H1;$ 4VHm(_*,q%9@\lF(8O7#/bIo/ : ,,&>BpWSlmms-1.1.3/data/samples/shapes/technosynth4.wav000066400000000000000000000010001247673406200214770ustar00rootroot00000000000000RIFFWAVEfmt DXdata i&& B;"&%&''_'%&\$7"fRR { g 8 !=RO OE_9j  1#(,f/0'1o0.,)&#zdR)|sK|#vtV+~ADvI-Mv.OP 26Vx[S>o ;`{rL%^ uF'*A^a-_zY& ,Jj1lmms-1.1.3/data/samples/shapes/technosynth5.wav000066400000000000000000000026201247673406200215110ustar00rootroot00000000000000RIFFWAVEfmt DXdatadA'_]!JC N@&`/8 BJK T \Wc{i]nr v\xy{{{y{zyw4uqmzg`PXNJD8,#ݹҪVRɠP 󡵣Zک޽)ľʬѮآ߇8;  Z ! _zv̍ƾ4ڪ ֢Uajy,GEݽ& ܇+}REI `A`:ޥۚ؀f϶˦fZˢ͇.Sލ0~",  H!! "`"I"!u! ;?fm֮B̎<׏ u"Kuv괿7V& -$.6U>DI1MyNMKbG77/8n8<8W76543Y13/(-+(0&#  hx  2 /W1_ > 5 T ]yF$J5 b %9QvK|d zKk)-s1 !XBT X79Db_abxB0(myQcvG|PhX`k4:D+Zu@5Ro4i] nWq-sR0dB.p*fniK1{Kh)t? ,4(nJlmms-1.1.3/data/samples/shapes/technosynth6.wav000066400000000000000000000026541247673406200215210ustar00rootroot00000000000000RIFFWAVEfmt DXdatau,vڌ4wu4kqi 5 w'*1'l@oA];2:5\'._[ 7 ,Mh B->cQWIG1+/:IN>R&X)&/&# 2wb3 @gZ7YS ',(~-n| / yi &;;N@9Q1q"{"@-;V>[e jpzbٶ6 tb7:AU <%( J %64GJ7 l$k޻M te1#s-\z_A@fvbΙjˁ'ĽڠŃȟQ5 iPGuѬl;˥e זYS)ݯkMsW (Nc43;3ZPN𚮟uwj&4rzޔr4ک><įЦ>ݠc Cۏ@#j}ְΟʼrqf,y<0mҰ7,A+;q͟3 H# )0%flmms-1.1.3/data/samples/shapes/vowel_a.wav000066400000000000000000000025601247673406200205150ustar00rootroot00000000000000RIFFhWAVEfmt DdataDG 2v X#E$%%>%&$$!"xHJJiG !"$?$#&D$&["$ "u x T8 MޜRޯ}ޘz$ܰ۫ڔAвύ-Ϻ ЪXԻل4Zx< {!Pyq d!$%()+,.012 45K67j89y:(<>@@BOBDtC FCFECEA9D>AN:< 5%7.0()W!"94mE   k ; " \  k mY["I` Z6ܶDܪJ.zg8Uds2pא|r˄xʡψ?%ٯ׎Zݝ6=rMN[n1R` v JI$0$ B^h#;T K j2!"P$8%W%,&$%##w }n Im!##k%s$X&#z% "F(}s}xak=ߚޯU޶wާށh޸݋1 ڇ`׬֯ԫ-34ϵW~Ͻ{&dH=\ hh"a#&'*%+N-F.&0:1235%6278X9:e;"==v??AeACBYEC\FCsFBeES@B K 3hV %Y@߂Ө<ĔcǼNþp7,(ϙԅԒ؂ zCۆڂl#YsVҙФ* օٔ9%بwװNY47!̾ !T­VmˡWҫ"L4ggFH{ J 6  vXl'$lPU/gKe7 =:('/./426562553310.8.',+)U)p'w'%&g$$#9$ ##"#M#$"$%%?'Z'\))+c,|.H/>1*23450779'9x:6:;;z<;z==>T> @?AuApCBD~CEECEAC>@9;@3B5+-#% > 3 t Y"W!!&'w,I-1I1537372?6a/2*-$'  *U J7  A  m yo0hvd^;#N O | $##),<+105046^5644320/- -+*(q(&&%u%#$<##"#""$#$$G&8&#(V(i** --/0y2o3456%8899;:;z;@@tBBD#CGECEBD{@B<>6802M(C*T N"| 0  o L"$(h*.8/3lmms-1.1.3/data/samples/stringsnpads/000077500000000000000000000000001247673406200175735ustar00rootroot00000000000000lmms-1.1.3/data/samples/stringsnpads/bell_choir01.ogg000066400000000000000000002664621247673406200225540ustar00rootroot00000000000000OggSY|vorbisD8OggSY"L-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDImع"!"!iܝt E M6[@-,~hcp;8;4rrڄڄFsLH7  @ ޙ~?f SOu #|r5]Cz 8ϭJDHDD{-P@]u t<V! p>h` 4KC_Oзz=(I8+hr$  A~p$w?ۏ+Xfb$DB$DXI?3@sЊO {{<~(Ɓ /@n(Ҁ+dZeoM5 # `Špޙ~_od6w6p2K<<|j g7:WR!!:\]^aws%u` o TYZ/ V v $\x1WҴ>gs ;p\aYL?Pi3}oCCqR郣c0,+th678]r[s,OʳXxj W;%I$D(7NH @:Wc||:P-~>cL^gѬy˫nX$DpHֶ!̛,cQ#%@ `~en9pݭNsE5]D|78?g.("q8oO?:_qs|<M?>`@k@*h>u`{[}$* $F1\<\iQ}TTCa >vPq8UN܆+pjC LϥwX8U_9)Tb,ہk gCnGP HЀ$$AmEXCz*pM GpUp p,8a!x8 3}7qjD]CF^`+/o]xq"x7k:eo;[' <D/E@{ny ҟ'x'p(Qph.NF@^<ѹ1ޙ˴!{ Xuq%*9h @ ~,P%􊎑/vE&e!in룍r?X{kf`}gZ ;1 t$L3qNf {~ݓp;:j2~=?7<G'KUO 8r@!&ފ.O.U{8>eMGmzt q lՋ1x=}X[T% Py;q o0@m/uyc*ԛ׻n'Qb[oI`5vN!k3ft4Hb@'C̆WVm h0^ȥO#y>V6+szZ.ʇ)@ 5G+@}8nī$!9s==Y}ɗ+FվzWnj@~ p3O NE+B]WZhyʽqjdᙊ!C^Ж#<ۍ2cNn/(?Y?0|6@Ysȝ3a""E͟޳}kޞ 64R`!0zs|T(9O@s@ p$I%* -\ $@ӆ ~^#^ p2=sefGmꇳc2n.aRfDyc[[TG%g Ṕ-pz^󯠝NahW5ƠW%/@Z >#h@H,B@+}*g`VQyGwebNW7\έB?\O[ 8 cT0":8,:٩/No|74 I;+&@}L7 >'o8W7Z~P^8@ ewҀ!]G8p`^%HkxB pjp8x^uT t0 S˲0Pйk__IONp7EiÑژMHvBz@ nZ7Gy 6EP7 @"GCB]2ˁn!s fH @Uޙ=;r+B~Wt=\Mm}ҹbu8MRADJO> /u)Uped77¯§[E* \) 9Q@ZK/VT (Jd$!l)[ 3h0ޙ#vD\4t89Ӡ@!^>*__':t<xgw߅]nq< Z8)4<߄\w:3kb΀~~?ac5J< /zm`rp@N}x8b\W7ݑ7 [%#o#pDUn*>#y8 Sj% ] '\OfȲd]{kнj)/GsS!g\a"|< ^y kyµOAk4B0bwxx YC& p.baUeHo`XɊW, l/0pw@Dr_̱ ˡZS4;X`a ,}` "C-xC@ۅ nef4=bABmO }oC@ pOggS@Y<ƾȿ>^КMB?k 5"L^G?oW: }=+A7փs3el_/\$'?m/?]5l~3z.n`V_G_C:h@aH}-?\)`Fc@?t&A!yp ܊N|>j^hÍ7NV3#U!?[j'?`{`/9;%̼E<|m^J( p%GKt/sxDCigҧk$Ü(3H9j`P!0Oxayx= >&lV0s |'PE/.x̟aU jNd DIhW$L2\-[Q mg~&`=\G0[ *wgF989h75iT\Khwxu@@b!e5 z{|7 nX̤<$@w 6Dr* Ѓڀ%@~Ů0@9G܁麆=TGGnby90'h~{ r6T6 4/dHp?5/ c[8$@֏~ptOR Oc!M ʿ@@,R2@rՃ @[U>W`9hB~>}bnvMn b)J e{G bKQO=ݍG 7T]J3pZl@˧[.|[@(BC4/ p/~\-!Jt sеIHj 86 p~VO~5oW5R,L_wZSQT|/6{ p]XG& OT#^'MbxެX+s4[un S#_WR tvaË{P I)uR/fc%@ȝUP J3Kjz`M ܀Z j)?k1iz[fo!Y~ orkC} vk^.\t^E^*("`\}/FpXOn0 '[˗x@jg6Q ޚ^'?B[MOCqL/6vƽgΏ>VJ`볃 n~yE#p}Wޠ>Fi|Cg@zT _`{Qū WA+X}5Ce U!@6]V#YJ*(]j)- V(bӥ) &1]r  0y;wv V_kœ5<ݨtPaIE~{ 6PNg7s-[ ( = oFmVvvq!#ke`~>  PT+] V 1ge$p^j=wl˳rTezM;\ ʍjhJ |Zg\k;nJPD@ޮN W]+^9 ?_tMgT@frIo@Z_VV8uTg`= kWw1p, >+th'~-}xG+lkl.YI05ȭ̦Wgz,J,$b*QYV 8Ͳ xueо\S~|8fnG0z%i֯T7@?6 pK_?Uhn;Sx_N,YeNv P_:$ =ٗ? qܦwwJwȭP&=+qlh~pY 癀xB;!z,zζs@QN? qC_(^Z W"@AOu3(%e . Cndfr p@آ1 s/FȬyʧ/x(MK$9 ?@5~!Wcta_zLHBӾnO>v*m\`J[^\z'Oo[ym?<@` #֏y8"jOB7\U:Ay{ξ$'Xn UzZ_o.7G [ )X=pw?s\̫v`` dTΟw^ 聹hޜZ1Hudv̮"`. gu ѹ~i tU~jnH$\Uͭ6s_?F׵K_t\OAf_G(#s/7^P/س>J>^~@?+u< :@zP#W~"k箴 5HoФ\n--ה Ea <te~n sɭPLΙq\˭Q-?j coO(ֻOtqs!fxB ^O|cgPnb̶^%(-qg8,r <0z{*ّ@НD_{ g+uʶ1uXPU1k W;y`b5@8gdfӗ.M`ʴxa񟅰tU~j9I$'Wr D.cUb?DZ|5WAג9! 'v !7 LQKCtS ܚt6W\@W:_v{0,֒HȜj-u$о~$SoPڦ>&a R28^# S99]-AHIw WgL GOlIDau1C^Ҋ~~70eyo8k- Ivt( c V?/P W Qa=(vzO ߯ x^ /g x?RX< !ZN%Ij>F. 5-Ĥ\7Jᶏ:--_ht};E%$s"Ś__;A7C}_Wf_>~<˟ `ߙ>g$}Ic))) rЫ3 hXOڽ @_G :_x H+G- p`H>j%*뗥2JӍ'?<2 ٜoz } }n=\oO4~'Kئ)Jݬ:Y~a\_@/P>,"0-g)$ٽ?{"HO݂?=7zA//"#\ Q~j#(~(@YN=3D\ ϭ=$[ O6s4 ("0 (ߏ{6rfN0.>,< 'N5P_pgwn;$k? ̕C QiV[Z?6.q TWM7yi  0m>)zǃ`yMZM7gp%FU|[ s-q*"zz;|\mh0oI K0O oPiQ<|F` 8ݏ*?o$dik >M3y+h1Rm}R- 0x0 >)z!{ 8h(ȯ?hP#bӇ[jn< U vzԂ- !V3 M@$&`;cm @#5y$=U/T糏@ؿcE Q@1v9~}/&6 \~]$EBESKӉ8'ELg}N< Q#I>hJY-' |M|]~Yq_ hMxԿf+ x'+@旧)/#?h .|Zh[}MoPH5n#koAt!@.{  W,x>?9uBj 3] sHBqޚ6 jMvX,J[#=H<ɛՓ yYuQ?ƥut^?:ބQ\K71|8n~oAJ@ #?IB_4@O;?~Co>FY`E6>|P0}/ WA@ ޚvV_yX9XJ&v>ρ+ )/1 ,K·fNzUi|\VRC$xx@4ʆ쭗 GV&c0f8z;f@ ZKmm5 `5YK.|SU@,p.S1Аq5u?MGyKr - ځm-ڬhKQ"%G/fn+pXt">/4ԟ~sq+l?,|unx.<`PRF@ y+KݻWp,{PN+d.si˞gMy@.SHR\#QC =1خ/&ЏCQEGtE+egۻ|XYqt [!?u  U d 8i3>` e|_y*gH+)rAo``H ` P1MޚNHԈLtON4Ơö y 7mj93_!,o Nk5@ ҙRЋ&xQxZ-{_ ^]tƯ8855Stxm0п_횥ٺк@! ʐn:Y\  *R_"$'F 濑p"K/+o9,f2PK]lנm8^x$pJp3Ŗ5m5P&r@ xpS x#t-hUĕޛp/=Y[osp~ 5-DE">30p=+Қ%|F *]|帻wuၡ" zywqLW=X.]pÌTޞNדk'_?,ȴj|ui )fk9~,_ ?^ﱤ #']|v| @ >~G+ 2jMGT Lj2~8PO8h{ CgwJ}zJn_Eb 'xn n' pd2B_J <V(;x.2;I by j> U$F`\bI ^>3OD(Jt̟>}5 L|g-=|~V)0H@ 5Wvgyz~K@=Rd;z%) C =lV {-@z˫yd_i$$;E*JOZnc!x>MI(  Zv rr^Rն8>.{0T@tsgz1 phٝe ?.@?T;Ѐ?KŽw7:w@_)0.z@i@l^#s_=l PYx^10@>%__Tr xM+e*-Y͟-Opv8(ΙbsXQ@n4)~?%Czs U~f94rcu(ޝЧ z`\s=D=mC*[]Ѽ=60( {45K հFgӓfc \X#QGcW%1Qgj@+A(cn) +g|_z~A1k8#9{s \(C4@/G04K%S }Lǔ5S`_p V d9ޚUf[ ׏1+#-y)9YKCWQIO/]j[_8Xk-0\J h Id;O3u |}N>N{ #/mfHg7-\#SpxЏ' *kzl>k bޚ^?䖠#+j"S :Z|tSߓ%oZ0! F+g=RB_0@;NVpV~r m{@uh7 { Oqbo:O.ϽEҹ.s6t? ~_{mp~PȜjE6 nVd ȭkkO_ZSaZB󗹄Z @4<5 {o]o s-k6n\#7)`8/ :3 Pvϕ*D NjB%S*bC>3piZ~Wr^Hj:ˇbaoO+zP}5/:,ZЌ #HWCyX3l_L|+cR'+櫮 pȟlk$6 OZf -w?5@̍ķ 9P gˀT `lbð' %-f?ܳ =V|`9)o^ /.`( ekűU*:#}Ś,7KP ~V.  vJp:ϟ cxc gY*@75Hr@oa"x J@!X?OggS@Y,_þN#~&Wu* 5S0 Qw ݌sK%Sք1o;/fyX?^ч{4 UaS C_ h? w@r G-|(m-Ji.`CS]^ )Ju^)PbA\]W_ Pޚ#˭L f? БqeRAy8⇶`k)`йK+Hگa.r??|{3 n{@O-K<_7}<= -z`{Z~\Or@@~o+D "V`pQl|Hx7(5Hj:{MX~W3'x=`]߯~$@a  HޟʽʬNsལ`(/§L\4M;7 PuWzsW_H4 c"7s i%5`c@:EA*_/K m7~$biӻ(7.[-CFt8uաb bH$Ac:=Q]y~;&}'Su I@} mhٴ{7[`1U}=v #`W<Л6q@um"Q@5M\Zq]=ck͟Sǎ x3% 6j(2O?"@WF2ox^|TX-^3p^QD J>nփUg@SE; uw| @A~t3j (|&GL$^@?x.a` *wa>]W <[~6@< P] WrhQ=GOi}_j{_EKҲP o΀׏ :m ~6v o NyC =s-EY |VCF|] @7/[X%z`6-^쐫d෢?~+ vPz%(pd೫1Q]k8KuvK-n( ߤo`e߆3@?+;~px}2ZI|BqZ$@k ] |+|xaTK%gu3$=u&lnF``c؍&썼T. >@SL^vhO>^7`]&STA%Dml-{uKb8H@? Ɲ },@ t`t6i 4 !}UՁݣHG4@@,zǫIOS㬀oȌyJZ8[X^v$ [@\M{t ` l?<1|o;-fX qEG1rz\zl@~si/ NN=@uV|GU @Շ9eSEz<& r >u ; o %l z.{#H{Bm~v(&\]"ښu{8@#h*'h5?x}~??OI K@@R 43|ne@)mo@){u \bӊ-7 6 [_= ΃ @CgaNa CvqlJtjoW4ՠ dS_Xcq]|{1-Kx ͿޢHRRg`[_pǯw<86ڼe{@ۢ @ rO2DQ_g =@-?'Vt0s} Dl]ŀYXvlWmC~1~⒓7HSXn dӴ/eNݺ۹E%K?G-q:@ ެ3d+aHmTgM};vgo 1Վ @[ @Ox@bu 7 tC'=FOp 9Wh~SЗAζ/VZB[}W1` pP?D 7h+@s~jL PnHjd*=W5W5 /-uufR @?W64cI.6hKYͽ+?d "x@@J?n@f?<3ݴAr 8hsVvIۙVHX*+ m8 z ~P+Q45[ TrKPOq|;8g.N Fn>8?Ov83aKFCӿo@ӗ.n:mz3"@@Y%'?q@A@%o(|;[)` L:c7^! x- n% :q 2J?Do rcI~4`'uzՙ A"}5yzg弥I @z냬+ d$ d<`ɷ@\4#?@*]~ [܈/<k3lnT惷?ੲyL3^SaӶ] ʭ4-G)LnP^e q5d 9Kx%d ELg荿N~紿n|f}υtM"Ns@9H9h''@o=z3t 5Go(@t`'ޟe(xȹ?AH8>hK'ex8+PF_emIjxnEOQj'`s?H,px͌˄Ps%^h9_)Ύ@Jx g_ 6(%!HJl9p/:+G `Lqd|3 ZzpfY ^'nJ#8Ti:SϾaYDPum8}+wTaJ v-sr}y/ZWٛ̌F L2MI9?#W \" :־To6䋰wpW;G8ϼ`{,g)8?6+ $Lʭ>psR>L> ݕnǮr(}։%E~,TbT@'}Kq `=h@ 7T,<.]MU3$=+'el釜 3괴+o@ҦkTx(ʜ? d @>H,l1Qn 4-3 5DJϣr[/lg*P*0T <`KDϭre9%{,2y[ ~hI u,?1k)zu ˆlݎm1f!UKE /HN'p5z |OggS@YiĿƾƼОH8GrS!dgZ'pKqH)/>-N. o_.FZ%Y^kiYYnpu#KJ1u| OdO_o r;@rwYU Nf$;44Kg *06̥ѿ0YP5 dU% N̻qgS–lPȇYA~rOk-%t7Qwt5BȧjcK%;'\N 0rf)Q"x8 W I#ZT|LPP O~ '~Hyw֐Ww H,E_Aހ@24X 3g ?t%W*w-ޚ- k߆6έ6H[U$ TAG N qY*$ ؜{{s[h@ -?>g^xRWV|p}d;50@An&__ @ftUsfHԯ$Pd[L/P=m5-y`^n/VnӴd^2scSOf+?0~lx%.2ah }_DsR@Vt~F@p1[ Pn(YO~b|,h@ bحv-9@Mz(̇;~x=jVӕ]8]-DO>om<7ע:ά, /; pS @gH/H\ c!u]a^@w)8͋ݟ} $%b\ K( x@ޚTqyI~Cbcja1z`~5 t=nOYF * @IO;oٔV0o?45{GmikqZhP76 );#1$@aam ̟D yй`e[ LF #@M~ڧ+sLy&uMW&?jo<[nM|̲x%`(D@7.'[6th@@?uL'P;T|LztowP:xƉMRwޮNמOV0 /oz3_8ӀiKvnTBy$0KqfXf|ꥤ-~8)9,{] $ Aoϯ;{X^B~wB 36O  -w~/ ޙ7'p =ng N/+WXA 7\obI~x0@{m[]UrʐPL: 7 д\n*g }gXm_^6?F?@VHz7T)9V ?jQ2 96%? o g)MfAj I+P&LtGWajL@>{?}Y)I:ܶގ'U A]w1Dg.sx^ l?5LTvEES tۓIl79 ޚn۲(YF}j{@x peq-q-E * m#)ǿ 6,{P_(S~'7zpJRs ~ xtz>\|Y ȩzETP@̨+e 1<D 0~SN.ўzOWS+MG*'+C Nq͌YYDxLEB^5//jR˭E<.;pF+WUB @l7˛n!:y `zj`J^|=$).`'F"hW8+_ 1L;{G<{eX }5%NJSoNNðȋFqVYqN*#Jb,;9|'z '[]@ 5KzB.K^;ģ%%i|2IMW~g 8{LhU,Mk nCY+LǡqNui|^x }[w\ztYH@.7evH',^\z 7+ Z~@X ;DV =%ȯ)w~|YΗVR =x^rB/_ Mnw½/jI| * ޚnT؝ppjlz[M7(Pve }}|fkW*xK:,Iy(Q @/af8{ P8uh Q_W*[H oӟT?B ip&Xr |-TO& 2 60_a`q;>.ũۻtn+]#j5嵊te6sR` ܞ]J@* @O7zk ୩FOus[5I5M@`P ܉`>WK[8N[HV=\)AZY FG^|ޚ9iqx\ss :nM/odR$n %šT~<h@p<䭣C])L 2 W_x &!/dbnH˃] ׏^?p= tha @kRO(']NY(d!x,pI!0Z0cj.u2*(\9-ʭt[:Z,p+k< p>VU z_Ձ=F ?[| @?@ }LE. }ynxp;: ,U4 p*^@ylӁ7OggS@ZYJ{;Žȴj֧nIv-SQei-f5cwjL@:2˺,'Yw; C&l-=?gxxS @<|݊T^HMw `W "?`,SO&y%u`W`|Q<\B.XSM>ݲW^n ;Pt/.ޮJ;A#F*!9ր |,n"i bSY:JW. :=:3*4א u0`PK?ٶ+z[߸ $o>YwY<@y^+wFC$ݏ_f< -HN|7~A)Zӣl5kJ'M xa|Yd$at#uiN[R@,/G0}W 0*$ (4Ў 0R_`|!O~-}N{?¸~MDlr0ͰxpB.ljô 69.u58>7X>n9 {m˪"gg'$C Z`n| gV`W~`^v]C+; zj?-xoR>^L>rOmD)\G$u @!ݯ5#U \1 Cg,0ޚҳ1 Xj:-v/բ@>_, /u>uqi6t ,oy,p\ R *Uz$OsEirjw~=} 6ꭈYxYF\ g>h%r zU{[N~xKn]-7uυ}BӬWs5Q*n7m]:zV5a%P헍`tSO $Fk\4/_<꛷FdjD.0@?P󸻪HtEBGVe}];T}5T}@T6ޚn|몔 h:Ǖa{Y5>fxkeJ U@ N >Mg8[*z 0.s  j8Ae~"=ί/=\ JZ [I P鲣G<.@ЮE N{5XMWzVo K蟞4(pþx]~. H@6>lx+񸄇H5,]qB!8,#z`o(ЧKdׄ/hH=iԽv!ZTp)G% /]h;r7 nE T5]uT[\oWRCISn`}3{v & \-.RS<@.<Z+cv^ϝ[\`B֋}ho V nR'ė%]'G) e2p@ޚ { }5uN4a! Еnܹu9fQ@ [UWJݠH{~(gY;,(3؜ xMԼ;n[]@(3l)OðFp+ATE+|nm`*(WntOiDw -5Ӆ?^^C}.O, jqȪ $o`l@x?l{* u_O)YHpP@v=/uhP@\k]:@Poְ~9 EEi }_-:(.c[}z;S_!L6pG jpToi{ŘCB?O-o:^ū"""j?`n(E 26=` h%ă/zW@%b+Ad 7)Ɔ2Y?`3Φc Gs@gh pnp đ L՞:{ b//h(7+x@@?r=@ k9!^Z$}f@Tz^r$])y@"0{abtQq36bPſHùo jјP/[3P,NCwY}  p}խn5" x0 onju v5ۏKs~WWl͛8R\8*Stl[D}PBpz3OJ՟] w@034O8jNn/1p\iÙҬݬj7\?j;yB_x`ӂ=uu{-DH^Jg .<Pszpڼ+} / }E/=U j%դVBH0ydJ\c=T  Dvh5Lqh&.>KE8+V2R!EoWTy,Z!C&<}0/[iW* @, t*bP-;/YV^/(c z-BP7 @ @ jWm H k@0=}YLH&_4저0)~N_ZX#W!Y)SǴ>;?Qno,nH@Ao%`1n+{#[=1oNu}p]p_@ݸ:KZ@$e4@M`$!Oƾ:0(pwYYqE[~EĆ@0^ڽR=cvy6ĚKhR}ųt{2[ٱ?*O ?,U!B}}?;'?bY&O E׻[Z\%b+$oj { 4ٍKp\_O@њe9,,Q1`"VӀfgxXࢊxn?>Nxr5v@=MW$uS #;l8~|Y]1 .b0IdׇŴ;eGy@`Իo]=@?d:)U oCT?(EOhc+.)t(iӥcZ6Q!rdW/>R@0 jpHփI?5 4sWLt>5s$pCja,^V 8HnmLi| ~ZPNJ|5:z ]Tn>IHb+ p-[ar>|M+U 861Y EQ )BK@n_% ICv`S^NlXkuofI/\[!~X @rū"MECq/ny]lFHl) 9+T P@=s|N^JUV]o>wli]0ȺD5}mNu'76Z4XgN(`},s~xל5zyKMG^&<~] eB>\_X|ia`Yx&ؼ87؆Ѵ0ˉ2z7^|݂ p,0oyQ|KQ_refMS.W٩% eiB'zߗ֐azE;^vxS}6WѪ&.ﲴd ]-)vUz bwUA"v<LlC^`9h V~z;w_+~{ځWwBeG/71w=tl*[ = يӢbYx*2"l&en^`b[7WA^#[b x<ڣu,]I˵3^UB Ϧ^ )X) w䦣Ay@pZ~@>BTHj*^ HR>g*!m*?]UV1>m uCh| CC_bcfq+\\fD ^6l^K:\D\{r zdZ=ulVYU˙jm6]<[ a03k#6՜?q+K (8 y{M{Oq.vyG`-:jQ?!/3"J}l@ M3 hPHfpѳtN # 'C \}帬[ϭ"`oh4 z3=H; KG;aOH=C_(@O'G'@{:VgWh/β.*ʖzHnf'Ŏ ` 8 vq .9Z4q"!T> YA M ݗ$X8_1qU 9R8jW7ߒG/Z=s:_+s Uv48nPEu5]9X2X<؞,WqxUU*LK~OmхS+R 95P.=] $o=Ғ~vK @mz3ȫy[tmJ_1e؈4W #{"7J9.+]v<.7檈tsķ8c|__ "Pޙ6>2\SA+bŷLW+x4I[WvٓūJH{f&(\2p{)$ ɥKt`ѥIB85HZ{7zT $r=i`f@ s*0@ 7kO^ $[L[lU^US22e Vf a|@B>:>vx[Wc{5 tϦѬ]sK{Mp ho0y,U%Bd` b i ̸}P)/|#[gPrcSAM |U)H%5 9@Wsr DRF:"{ĆT~d )߆~}VTpܫ[  q?Ⰱ0p8FA>6<8kSQ7ʴ>j Xx5\`>}n[D OO=~[-OLI3- pzB^ T dq;29 5>󧮠1G2HrZ[YJ*CD,iK;b}0O=+T_% V H \(|I_n|ۂ!*M'Yfi3tUB)zBF+>V nH(G/G[Hr`j9:JAH/;胣) ~q(7Uk`]GMΣ?Jz>:X&}{x4q!ܿ:`S#pI v9@l*OggS@Y 01hrŖjTYM~ly<ؕ2$Fb^:Y*t3ӎ|@sNϿx!Œ;7 sz㏋&}|;g/q|R^PUyZ՝Bo .2[|f6ÎNkxRX\9uo> _-1>1700ޙ61">FW `ꗡaR;ɷG":>:0zͪJ$,K,ϗ_%yc~j ){U h^KYm>pPsҽ X 1O=+[Ҧ16Ā0JuMGv6mVkF20l!bv`<юx jeɕ@InMP;dU"0j`p}' g~w|2 Oo b 'C87)鮐 M@ op3@@> –?w]|cP'2@3հgƄʂSR.9Nqjj~f((fHx5[ԴSfnCg~f\yj qOyO/W'x-{WW%B ī4#S/}V5 71= \Pfmi ػ~r|^=j@W $E'Eܰ`R<Ռo܋-e HV6-{Fѯt-q5 0/LCJ`Q,3-JE9bv}{!`zy_>n ԭ' 4>9PkЀz^ t@NZ?a> m@:ͦ"?CmZF,A_ (`; 6\Kz0WsQ#iom0E~N |<4U%E30}ݚ4tR?w2a~SjaV g/P@:Z+A[ ^Z Zp^$BU isJg 6 pTB{3Y"N=Aa2P@_ޙDy&+6`m駫ғWQ ~a@-Z`>f/%FU w-|c){V<5O wl]=ݩSG`@ C_@^"7? |1:)aFՆJ6~h6M\c\ c#D _R)Kdt4U@Hi,^W}vekG6|zvY*_僃X/ W%(l]כV 4bL1exI GApٛbt]NyE{ ~@ $z*+wZ [ZeV8 EtJ㩻e;<JX ë(2)ޙ`5h|0W@>T5/*/\`;3YUE|կ75Yܠ`XI+}Y!(KPZ_oU@I `{}yy)Seq=g3[Q:/rxl{yy_noo9zl*~{348  xC+\ԙNʐӺpy?%rd2ŗ^ggUVIl?!~חhǧyΔso 7? lAmNʉ޵zzI~$bf ]>J̜7&>slke0cw w '@/Y|WIg:}5 W Q_k~a]S-LJ_xkfU%B:KWkO zm=ᣰb<ۋ>f/a݂i < u_r-9D,Cv(> VU8')ԖG~!Җo<5+E^ǕH `y.>[.kd4iMU&\ }V[naPYfUP^|pRܗu  pvo%BGPo i!=ܛJz:pgzh_$~-3)6[@ uF'+"^EjmČYl!8Ti>6lS^d:pt?5VG`۞*7NU%~]{?{d np'xPh?*S TV.[ u?OW;R=@c=(NYx¼o m_Y׌P@x 5nP, 6bkJ'L{6Cy=V܏SR0~=0x{*8=8Ā]nz^@} ^oNc> ck OϠ=ֻCJdIߟVN]-1O%y*9K'r+/U{.jӪ]<Z6"V ^Ft)aX ">;/V5O97_RV"vlj^^n^@srIхV=z-Oy֦@ڷMiIAso[*EM_ngM=,P5nNo  "#oiDp`"h>'*> I` ^K(5TJYrLv5^uaQ5'Vs1<խ3YUU%b屼>]X뫙s5M g~=  O@ /޴8(CоI@jBQڭImY41鹂C0/]RCbQ+:,yI 5@ 5OggS@JY  ^ޞYZk Qδ}Ϗp,WaOvC-O_=+xU"DkpV=/hpNgYeǿ8ā݅S_hw $|B[ '\*. ,̑g"0HV9Xϼ <^twsuPvJV' t [nz% jn\A*DG')կeER>va~EUx& {33/w 'ȵ ^eT~6hy!RU.䛔cP?}85ܣweaUDnAU] @ Z@*†9׫Q !ee M2H#2hl2h_d+j=$h^tKv5J`*!U>gΚ ЁzY*ӑf6ƫ}ҕS=7dw @qmO p9$/Er HHZ1xn{,(oBO3 >H AJ% 1kST4iF)6̥֘¸XdRW8\_l]m)`FPD!ڔd($JQ Ɏ&4 |hoSjzPb\ۇ*8Gwū)0ְ ˷%顇[0~B>Xe%NyMN@$qr1Ԍ$V_m>b1cH\Ԋ屑-xd428=3 qE|%iz.FW@k1'WʟxzKMp`}7:+%R~e~Ns̟g6Ű|G`*cFg0R{`7v9R[]lv\9Fo I7 U_ 'hWHƝ=`-: 7ڕ_P)KQd,vʐg= rzX(ޚlL[ t Z Ųrx+n߲x8(ym6l.Y~q߅TKշVg[䞿aWmp}l<L/OZ-ID[Otn; ؄Gip;4#H29wYVHR4`9.ފb| QRnjt\\"ilkfD*\O:IJϩ:. FS 3ϺQJIyqzgKc5h҆'uW~QU|4`2~1,.W&ɷZ,ְ^hu]iָ(Vה*< fފp OcZW JwWai{UuDE_ 6]ӸVw/W%Bto ޷YUItW%Z:@߿F m{T/;:@m?@~Z/0Jj:{Up 4. do߫n%-Y [ Яha>V'TG =?m-*zz$eke l{>եJF.A/g~cj8EJ@ ^U^( xd*1(2@i4ōa`uUYRL6֗k=@j(Rw@©| ϳj{%9RGm@ ' oǓ(hDSGVLdlf1=G P9ۗVe}NCH"2 B&$gg $e.f*=#ɋ.\Sy*2| aO*es^/1M@zūJ*&\ߢBOxXԾe@'燗7vr.@;]p Ԃ&>9q~n v`_~WBc_Mf>G(`lPF"2?E[ߐZ{bXUA 98:4+)ܑh>vl [\ LjW)Ԑ{=@4HI#!{sr;o/av+l6{I{Aꯒp@0VaҗݝTJ]8r~V<~Vh>Zմ,* .E_kP<ꑧ^b@yG :{nJJ \׏Myn~RŬ`s4 @(/A]jJ4@^vϖ&H@e Dp0j| eSOp&c:W\z{.h|/6I'VVQ(#L;~N\ u EJkL}  HqެyJ@w>{֬J*Vxx37̲K=4>p |Tի Z.]}@oŐz@eZ-߉Ж uQp0?Rp7Yy\nT6XXqqv.QS `QFuuKƺаJyW.~5n; m2u=S+H ,wt{,o:G 'W4 >(|ޓUUU;eG 4>@s=vy݃T M9@R&} @{S:(]z7!kL03YA[N-6@ m+~Fv;#V.BhQ{!>N IMg݇IM] <h~;WϭbvU+GN`v ^w}8Szx3hP2\ ~# iPpоP nF׬ 򥔻,]2J3 ^V$W`7{~,} DOrsVO9 qƐfޔ\(ԙZ滑cZ4 "` ޔ@^Pi%jLF 1Wђrze Bw?:},^U!_='[1>}0tg' O=^A@S>P滪jV@ ;dzRv^@pfYɊNyd~RpRP|L;=Y۶N;)Ytv"M>a yFered784^nfU fH[i'9m;Śxpuvųs`8=Sgo,-`;u=hJwڠ|}M5>O~@?igHR$@?pTc,rG3\RX*~-DŽЊ:Ȗ!˹t)5p[Ww%~΢t7!2#*ث1- fe-}{ @<$5rUdc5kB^hOn,e@'vMCv+8z{ͅSjgdm}qw vYyMq%kz5^MO\|$۶][K+)"?Cv6N{ r|o+^_=gUt௧_ӏ bq K@zձWȿYn68_T8bjIdX#*V!e /A%JeU Lb|~aI93kME>ۺrugmUx 0TPH{V.ߕ#2@}7#gxB}{@9ׯ*0uqB@;gu`@KO@R [>y M *ir[=~]s% = 7>d>C 5$ $5ĠX8io0.EO xGǁYuTV%QM}/kiuaxo9v o6'lB9譟vP%@OY>H9>h`ܥl½i'ԕyAT^ A}-׵Ih?=3W:6$#r?|_'#2N=1|zznú]RAyM7?dvnJSKQ@H 1>s.gdLo5E - MkIrf @7(@o= X Dw9t`_ރ}kOR'˦K^B X -E+[1Kfn~]bd%/\5.>dY[L\Mj5=H+>;lUq|{ͪDtk] ^zO-t[|F^ ԏh ˢ 4xV3evQ Ag " @Z^GcK';ҠM{e-}LC v}F 9!B 0<)^ƟA{.eAWCbQp[{cJBl_)W/0U?v@XNPwd@ (duHzdt2/7o?w@= u e_OT{AXySX읏io g&3k-gʳ I &+ \/"~QF0KT#Eq詥xZ^.eyUI 'S=;{&*@ aS@;Ƚ bzOAw!s @ n'hj_w  orCICHóJ:M r(@2;07V‚o";XJ3 `QM9ry~ ^_A,Q gcJw>_[rnݼ?נ,)+m0Il@10PPgi}|ծu?9G7[a wn'$@@>6zTfՂ$9MgGstxGUzJͭ^!Fss6@nYm@)Ag,U)qvæo fzm(~NnĮAkz}kh۵*O8ـ_8}dglq"< @#؀j}Ϟ^ 'v¿ P NrH;vO*3ٲͽVb5E9XWꠦޱG %c{nA+d̍)L@xIqW#VJ[9Uy4..n%keUӀo9U,^Z%Ckђg-,7Aٓ@7``+ 8]X4tHL_~N[{.y7/c @!Jd1vv016mKMM %mbϗdz@_)Rwf{YI7Ru[J`:B d)*h¯ZB3SP`}Ryi@7_v`)WxZ)+S5,HEJv~\\[p>m˪*8V@i) @ƛW/g] w:I`u@UwC2t˫S˾i@&{xLQ,-)~5G j W`]%+:XW7ΧHsb d@;J^x2Y ٘z E}p@<I_/;obfe |G 3? @s_}Jiwj;E}@w}^d wlEqz:< od$q5\-8 GW6{|oEBYꨙ $jP^N%)j5z9D/m/6 cpXuWU%R"a 葭L?q /]t\|T*|ir* ӳByq*|QV`O#qERWḴ۔vYF֒Ia]~[ph[p%HӚ/;[\жt|нw@;p\,^UBEk=*>:)- "Wk V;}?:@`p}@Z.лW@2Q _ͧ- rPk|"J)!\ģr#T25.L"ɼ-1, HA n&?cP2JbsJ詳1n`_ú} `{*[ePv?kϿcOn 9U0] .C(E_z -u:} ?C_e@ @zYù={^%_Y FPX m Ƶ e,XWWR4jZcj:'\h[~Qש%a`>ūJ2=(/k[6E\rڷ$X%g js.qw{'  ywu 7p/:elW%"|4b{u7C>n}`'q LZvVIg~<pU40`Oo2)l9 6@1iV0jsm, i*FW VK >&ۋ`U`h@(tvǶ x_z0WTH-8]"7;0=aoqx@@H S)@[(탦EkRJ;oK-Jm귤X*d|Ks\o2Bkrn ԁ{#`s~rH[!;MG+ImJ-(kr;㩶)gY%RE~mx]m!zt hDļ⳴7_\<?h~ |*З e@_xW ,DiXA\_\$UCȏn>}uX\!aVDf߾S>ά|5*Jt̾ẸRA,y 50ݳ*;o~??wWO34O}$^=n7Owѡn_rӷa X¼eN^*%DDxv㊇敖Ê_ULQ5VyuLp#H`ޙvht n* iz%).\s65P.ѧL*BG7: /a9Z`> g@}ݲEWK)^_ wG Ť DR×E<Vxz}™o'1IYC(D-YPJ1UԚ! /g>nDhT d5@lY|4. O9gϗ3ZgUB 4?ld&rtӳIli3=:TdRUuu@:?@(W yiEwI@s%$5``6ÿ^y0П  ACKͨ+?mXEd"}^(E-N|M~/Ud@違)(i @jϘJJSwS Ѻ~n]Oşo)ϯ-Ƚ˂?c p\S4M=Ҿ2oR"@VnPyM+ܰ@˛ lOflEKNX~r_A{N:,LZ3HLޙ|}cjM5p M6Y+Y|=6{lJ.acfoyP8nv|~.H?@~@Z86%Ij׏4N `3BO0(K7br~[xo`A@ eR#bxCs7_Z ňPJاpuOggS@:Yޙd3Z=.cAr\<-a̪H"(~T' 9o| .g/E$pz>_}d(xkF^b zIsBJi[]dD( 5Ж,& 0x^^O,Ȓk t)Lǒ2ԅ?znxBU>r`s׬f)eEBoK߂μ <= ~ @7p  <]`-Q { Gd[du@#B<הjdzeC @MU\&/uUհگ؏e 8Pv|^4ד)kC4 G,x>^_=9JJ 6ǣVyQ\=.n I`'p=- 5@@ʗ1B%t)إwUrufȻ>J u $KKSz֣G<53ҿ&MV0]w+˞_MfBbX64ޙ|LڇOCo fwP,͞z8y yTp%WDK;/v;@<&+k}G;@ݬr 7Ͽ=Tz2 0;$H{y MH 豇}^ME E:-i+plugiȋv:&IA8@)6Ĩ*aʶ\HxTqͺ]ji?p8UE%˧x>`5<4 (> ^ #ÀK@ ]@uB R%{;IU: Ke GZxf6=W,# Y-@ʹFI=g+@l 7@>>K`] 4]qX\U sqQWw.~!n<_+(Ȧu;|(z667(+I p6SP~G_!}gjۨ|+l2\d\r>OXĕ+{|<FWSn@S{*^RN^fV/z4X[5G_Po\ߏ PYRo/H""`'6rD9lN9;Wf@'5ޝMcCُqJ|i֗>|(ˮ4w&߸R|Zъ' @GN>^L=W% 5]}=.CW˩1 OX>m/,^U4e^כ } llhl@z6^z<7z򋼾BD ہ= @|q BQ2Ž)3>d (I3Ч0 _{sVow̕lVKfZg+)PXjr^T28hpuҙD}F[a;V<`>|U%Tp wEh^> SYO315 8.^w|Oik2==:^]UN Ky_uV G8uX5yrPhMmmHVbMSٰ B܍4~N}Ir%Li:-J(YKW1|C{OfU%R1zp_R~z«f]'Ej}PyHQ!E+}-IT8Y ,pu?@F[^Pq͗͸ZIg!LCVX Pt^hEט{)\S,Nqǁ|fS')'[\k!:qKq; :K+5TItn~ey<~z:]v:w !frJYP0K:KU[_X\2Ui/,> w8`8C|"^W2 f)-Y\5 hQ2iCg5>랺o 'mL.tpeI߿ * @;D)O;m;7*rD%@,U@|ݺ.]Buߥ*PB,YRa=,`2< J;g7k303Ze؋TLL48+PBI^xT qX iŵsDqUp8oTUU oz3:l?F'\- MNa@~|#SpV@r=zw^ s+|W|̩,P\&|#$8yz{͈*zN# cΔw tn Ai~.Ayru'tbCZ[>ǭTPD: ^n 'Ұ)MgܺUW]9?I@sp,^HX}JC6@,A;H6v?-"ɝz؄2t}C637fC)|iPeqt:*\.Hpfx_=~8WSCM{<ļ)\=S"KB\%>vG4HX\3ī}\g8_-w&q X00n:KɠU~nHJ] Û7BɄh@$^}TaoPHkBQ: ֿSc2#gY{ztO6 (9G@ )YC P,:+Z3֯&o#q50GwJ*2ǷjlVЛn~o7~`8=p  @z?AʋsUnnyWPrPeT$ujM>zm{xS u{}v1WPo2y拝($//r`5݇*ϗNj[t%4!~^I#c :ׇ;+1l%6u^jOb*u%ePSDmƗM @\)~{ #7\\ FFܬ_IG7'yūk}_5'ݵШa#P/ 4 @BzI )@D \x,D|>C@c)TCFJ㞽R;5etoM>( v|OggS@Yx8\^q>jC{S}@]q=6G9|XV7TU$@'7kO@l|s: ^uU%p|{C~8 H^ގAU#\EM^_Z͌Jcq}~p KG]k eH~xtcWoλE]_\9`|sqV*(xZzT=Q{@ 'oR KeZxՑ^Xff2j'Sf7SAYZT{>5^D=(5E,q(bE WIײ٪!'ۜx໷+2zO8P9PbW A׏|}iG+pWH>I7 `dx jTXrdGxǐ7`xJf6;]X?@v#|$P\xڻz%t Z1^'8f vūJ`]egyw @1>=Np@(|A9 u.`U['$+(_~R?[+1[KV8@[^;fA2Ko] NfS&lZ/ރl6-|qCXMTd%Xݨj>Z…śΊWERóώy MxAZLz_O0?О ʃ0}|Z_ŀL$I;@G78F;K,B<̹(Y\B@O W\.y-Lҳ&dk"c(vh}tquk*teķHW C?.xǽ ƖxVRJ ^ m5,7{Tjݧlm r z&PXu ^>\R$kq|OD8@4>al;WZٮg7~?GƒvF8.ђ!hTU@*hJ>$֕CQ帩qmY*ed~:Xj%@ǜ >ylJAe-H L ?i _%Rk' /qk 9]&iU e_PfN`_JB|mL{#G5h)Nev/ǪxbbKخkx)Z?/< s /{*)Ww3W7OF=|= u91}\J1 4 r$[@F \G}ȭYGƢ&jjZ )Zͬ%xW@Cŝ$ ޙvDS2x0<.vIV4٨H8r5T?X,}f$_6o=ϬN1U%8\K2~x8e:UzuAm./w@X+fM~+%xZA-tHO%˿V`]`юRvI%Ĕ;kC5^DEH  6h$S@ޙ`ԯ46ӂK$i>8G/pXwY "!"<)װэ҇jN3I.{И; n^mZ0D6ZU{>T:yNA7{D:*`\B6lE)d5D>P!}Z{ϾtüK;|}`cR%z.EޮJ¿zLUv ^?,(Q~gД Lv¨K)afj^z/I,h $HJ =ޙdK!4鈻1u$>?O1t<s>zU@X)KS2w. @sY 'S_P3{oNG HþfߤzU+#$=@)<ӝr0ϨbU_q[[)_zZ>ug;i:$1ޙv`f]Z(3~7օQbќG4(:n{q-+*hV{({;4x* z 3_$@Sf 5}`0ݏRiOzz}Yn4+!gAF[Gꤚf˰scPH|-O}u&  NҞN>Nh(;ZH<WK)| S7r6UU"Tn}_xA߯(6KXbpп+pE~ 5RbjVR?vkQ-R螪.0#&!wGjU n*_ٕ8M6n=Dr@a7ܛ 8ޙDT1| BQFEov~|Iowi:ORnI^ X"H#G$dM4Wt=w[C\m=EC?O9uzp_dƫJ(]{r_^,;"sw@:Pa꯬XA#ǜAA@k ^.x}HGK*)V3lw0?*Czi@>@~^v'@gSx;ޝ6h9Ec6!Pc$^pF!M;TMaQlSqW񲒨UoΙ1y=} ox_.SקPȽ NHA>—ldwJf\zVU̒+adr-ѭuK%h|0jWBb8 ~{U@q&δC̳@ Oi$ra]xYTh8I?oc_ܩ3}oj@]r6Is]qɷv^PC. ;I>? R>ޭ-Y*_Dn_Gk /ޡ*7\>_;35xsu)|I J\\20Sh[ rpڮ`1ŢK+5`,N"=% OggS@YXʃF)(rv` W1Rǻfko(Z+vxU"WOt:-7'@ͧ g ϾP DTO(_> ;*[nk!:'l0`_Nit8?c*HV>8^N{//rt?CK ?q-ǖ}؊l;w:{U{95~S>)bnU-b{moN ;>ˮ@?7,PagJ9vM7"IZ Z?ٵN^AOOK~=?іѶ3 B.H@~NdY8y(tc{ ,SzlC rmn)U"{c҉ .{/kO9hជz-5,@` X:rhީZx;C-"Z@&BJߘ#sPTDhΆ"jC!,Jٯ?K >&,} #0i>~NDb  d3>܋_i@N*o)"G}\ܪN7#P! "Rooϗj I4{ ׽"N<}/Za˶m$w}A3@N=3PW)).nsg &Z©y;Ztu@ppe~A. 3q/)i>^Y{''xnxUD]Fxd ww  O3SEh\iݍT6޵w3)1xD^#E,3>߁rL,W,˚?,+|6K7_AA OV 3Z~֕xZ/99~8/\e; ymc$", {zz5]2Ή~+ZW i@L##@^;Th߭ܤZo$t!2l>bU^Ԫ(kрr&'<~Nً&J AhڑS$ACW89;c|ϳ8$P~˯Zp}gн16d>$PjO@6n '@[%j^z@LJR)xiٵqt}L `x/f%9sշJa/ 6h 9 p /3@>Nx<SdtU,325OCW)(OWyF-al-~1՞J(q};N \Rw5O 'O~ м-7P}9M]Wn @s (<_܊A$Mj46Ǹm@3*/dCD#*Ӈ.S)wTA(Tfk~xJ mOrx! M{0&=ZZ,޸{@SJe޳qWE -8ަ68TRg@>֣ eS^_zׇ]PzGW_P ":H'fxBz@4XTŸm Z Wbך*8z7::?URUO!|h\dU^tT .qrNg)-j_ks5Dih=e[Ot|ށ<*']}b\3cP u *'_@h3pJp/K>─\,@_@5PMޓ o٦.Ԍ>4KfYQ[jF˙|O9ۗ:7b=lv|-02@; ` NJ8>`O Ȩ9qe8rU(ꩇGikz~4*G|k ?vSvbq5y=*  KЫO|}.85@ @ɎR߅ =9&,\ɢ/D2:; ƃ[ ~V}=ک 1tQ  `_Ah~8 5L;b<I^iQr6Ni:;W%B ZWW>) }q.n,t}/Y_v~oN\Rx[ .-t@V&@  HDk1\eXJU~"ŌyX18܎s sDNN~θϐ+ m4Z$ݳF)p! O~}:ū &˰qHp88KFG>dU@2:kwHtCaOzw$:$&Z bXlbR],8@=Kl9Qm#$K08#>` OcEt}hb6ݎ[X<]ߡh=吢lDxU" 3ݠ7|]~`?g٢p@ p=}tu8 {ñX"&.'MR G*-y G|։{zd vHLj.!߲V eknscXyp@dDk8 XTW7py E۾VwUHg,[Wj@&m˄otb`HZˣ\>[Fi7|j?oin?N%T},Ti%Aa&Kk' rpַK$J%7 @h.E|pjF КjT}x<9؝J$"eo߶jH+u#f@p| ǚ I[( @O| (vg>բ@O; 7B8{u~{kmxPr?5"1kL*/FOWl6Ǻdm'`0nO~,m+7^8@h:i{iE|rx^{sV#q`}v+ζ*)kduCsa-=mmi _ @)O@Bfvw}d@@9VgAPK lK.}yplS԰!"I ^.qhF?PtIdkŲZ8I,N7!/i~ r+ӓUQQgm bK_@Xw{o:.?Ȗ@} 0:޶ )>PS~*P,h+,=]M fd&D\H:!e>e^Nb7+_k A^6ᣃD &lpYK<\f:2jbj`m@z8tǫAM? ;kL5u'y{пX/ON| @oV{nQfuj/@e|㯒9./(Bk2fMrqb>'f 竵6=D@(x@EYOggS@*Y~%ͲL d4Őz֋|-EGW Ї `VqWPl?5/G{ *pؓK@3(N _C5.p{Gj Ub)|r+8wRJXh_$c* dzՔ@x%ޚEKڍzpU,ϴƓbA]\U29yJ#{OŰ**,u_Ɯ4/޿7?8@MyjK%Ҿ>^Hq(@+6iY 2`1O~¼aVſ-,ܴl 8i?(BEBXu4~Nl|\-3 嫸*?ڣ.gVZK ;rUQDڬ=Dk5-Jr3 .e\X=^TOH;>/W}&vTB޺<Dx@=3FQy6g+j&by[3O`4]ne _[v>ov%/F?&+rv-UUB7Uvu{ G*fKp"b5բt~.S{)$`y*m)|井 Q}u-=}.@CJi 7j~B"MfV:N(Jfl |K&(kD{ ,6^YhLדL g:!i$]xiuxU uNl4 %4] ǃ*SBQuӆxhy=Y*k=ˉ3wnOg^UZa+P5a vZ/ \6|OKɳTt%z$AZ `X~["jihIB>~ &oC<=$_+mp6Z@e @0I^xArtbXhةXS!!K{Mӯzp @0IY3^"ޫw-[r_>_;S-4cHn 3-*9`JB~Nt Oc+7.JMg:c1'W[#BCV| s{,^f/[8O/28s乫YWp^W,`q8M{bH~-) ptQ W 4kӺa?.Һ/cP"0Apr N @~4dMv,ʕp teC^ V> xmiaלcq^‰ # mzyÝ1Nj+|Xv兏'~Wx PxGO|@{!P no@4I o5@]5"kT(;^/T >lHv T<MW֒J >9',+/3U%B۬&`3GNga4fZ>_ q{Aw ܗ8@co ’{%XtA+*Jp_q@^V`JUud~7yH (Ԇb<J]\դJWrIW!xP/W8M>}*8zwxne`sP;(va+z@(Kg-Co &.Qe^ek: p#v UI[R3т&F"@+n(Q&X.Ppq  igc7ڝhMm| kW RPeЁ*1@ אD\:orIzp\Bx('%o~<ܢ@j $IwΊSh/@ jg k|~rup@P8-Hh 18yv䋫TTR=6uUPkGw UvxU%Dbmwm@/kknWW||_$> ~_:KN8pM={ % | hIX) u5 ڀBlW$Xm=uk1et~tIXUR qV )~ޞݚkx~ljuwV?Xտ G'pY-%QРl 7PIvȐ ӳOm’(Ǔ1V 4;sۿ?=햅5ێ<-!"~`<EjЌ="F WB(z2*Wh?Cqv>eD>y'UgsBg w_fA g^2i~@>9^K.dt2@ҧ==k-MⳀӃ~G)/dTp`QVp`5@ʘNzc4LBEԤc}b~ţ O7>vyUElCރǽbHKc3d rGHe .bU]1DnV: ӊ([=rS y ~z|MOI:1ncRPA4wZN<몷Sfh(KI@ нQfޚ͘c0LVwˍT}.}OvrK*C/Su} >JDٯ@}@`< 9`b9yĩs$K`- g@ۓ"-ʟ4Pb@~G2@lD&OggS@zY f~.ݘ$Ք'g~,6-p5u+ *upl*޻NwCcZ@7 \ԟV-j?/zu>jioO]"\o?gmSNDeN!ٵ2Q:MrY0lzp>|p`0^tKVVӚLZ\KCaf1*! ֒rW ~?֐O/?@ n/1Ri @* y } ؾ(P@mu, l|*aKC/8"L@_kT{1]-~!Y 'm|^ Қ]_%YCy]cfYU$Qw=Ϭ&Ϝf_߂#LJ% ɥ?"(o09/ɏ3U) Au(DOĻ|./SC(7,0At_Mq*F^E-z1~FʭR> u?,мZӓbWsӷ_m8ѿ: 4 /_Xf3WID.r"4/XK64)gKu;4?ܝxtqjHFx3{$n`H.</81p 8MtT6S ÈxA \ P/4~xX-AZ .cz,W*-EbAxнfD?Є? ??|n^;V-4Pۖ~tyGwס2+ @ys )1>*v,X:1q-6@n' acff@V+ G1~ X~q5,tes*Ԋm |M/8,7ΌW!"x~_^~'R/>i5{|yi-cpz|*R-/& L @v/}o[@Dm<6'm"gnlg=̵R@qGjM_5HD(l`Lv ՠݣH+WRAs{?U+71 T?G gD{0\Ծ@7?О. sH@S/a 9fE 7ɷBOF c/QWUQF`;lU_I85+8EsBf$HI ޙ`Q,/uК.ݜX , )uhcՂG e-DpՃ=B;ـ4G6&W J`ԗ]2>GI^Y'_qQѶ~LUH=%Tqa45XiBqPb~.j](j? ;Hu,Wo·Lzja[CvYUDjmQq)eU+)<[ {uh d>_?Yܫ* ǍPd|g̗+f⫷>Rcr줘R>:%%۟#qTzC4(9+`GC!ijޙtPYMil,iB]+΃_S\_Xo fYUERo=&/z>O`څ~I  LtA o^L8 G.g5<6eT]Jx8ȁPhu5맆%bD@ޙ6`كaqNn⫻ ];f^nG h;WEB_H.u =&$=/2aP ov}@ `T@` Bv˩)/ [j( nC_qe+EEgf :'PZ")gMX*gNY@I@iC/cW 5=2q W zwuEB390/:d*ؼβհgAy^5qT^@O$ԲP~.@6 z&@zWIC@*'N`j^dD6ń'(f%HDQ❚@%#)f@y~l5VGi:!ٱ20\-Cۗ_ `w{]xU"D˃|t?M W\,H\+`uW;@Oe9 ~|#^zRe @[z m، ʯ]5xpD;1ʫ H\q@\8 l/ޙv`yptj+cjLϯ WO cKк'"u;LEסc}!K)GܵOK_N. ͯtXC =Xuc$x~D>T`\3 QE잣8w%Bad~Pm/Z,!F+m nvicb :X|q5/AƂejj^b%{>Zgg*!)m9xj-|4"qh-Pb~'j*kG@~?Ө`X==^K/m(u@$=@)!S\&|/`ޞaXF:=yĈP6la@0g'WU33cƴ^MMAN?|,M p}y­ zwꧭw@C%(LJx¿ e5d1<*d@#Ľ0^|DCeB:k8)r|,yC-CSkAaP8V~vܐn5\E$֙NpBA!<祆\EB_{'}>uu"wWM<ܞR@Lc0|kpO @MU\`߯M=@ݥ}B=թG~3O_^+|HoUg1٬P4T M!esG<J )_b&9m/G.֧1Eєv~';[Y"\b39ˮ}S @k˽QƮO?@`jOi$'vd[U?PD<j/GXEx7A@cFnR𗢮"\δ`n*%Ghh` ) 4OggS@Yʞԧc4!R M{<%[WGGxQJ׸+^UB~rp:Y8S+n0L9$@ ۏUh |[7Ы'=T }\ ցofmӥiZV,z˯hP퍌8w<386Adί>b9xVÈNf~ qP4醆wcz\MÍ^M>Jgwج"Xz{ ߗ^@ HL6 @z, <.eu uե2U[Ў.I+ha3o;z ]%x=j`/@6*.IH p mCzcXъ>  I]곸WS{%nq1ye+^UD>:q0O>l5@ZW |ug&*'yNVEX2>Сj K K*4dfEI|b6!/V@pTW) )ދL{Neg^<`li^ZS)Q&h _Mv0d |6:{^{2"hT_h}/zÖoooo7vա:j $IU7s;K@K FqWLJ\<tKw΋#\4r6a 6Zm>XՆB-ױtDcq,pԳ%I5\Nzt7x\SR}h7{lVxZ%$a'WEKo4»I64)@' =+[hTH*n@u@ck 1xA r:VMi@6v(}S+' /MjDIE W+AI+ph=,^D$Z;gv^|'V[@ 0zg@@>ٗ5@ԕ,75*oZq2pŌ#n:LGA:Gja(o䯱Z?)u8. ,ޚnf>2`H\c R/wc׺wϢJ̯5&YƉO/ ,Ի޾ȷz^!6v$G )PK<t wi",cF$|~6݈ $خ6SV9W-T{V8ƨ  9SS,u#Ɩ^ۆOt>Κ+~< T pI& Mi0| ȏ86T_ "-?7G˨@ )o:@_$3۬C,sc6$ ) 19+zܯ:]  P~H ޚ. I8iQԯLÓ5#KO=ؾuųJ*6BKn Wm/~~#p ǂ ޶*=l%7޲Wߌ@t"~ s=@#>iD` Lg2Gěp=;8`#B`Ur3Аq !}#^#WsOrRsbXVRxKN[ {[GP$nV.;zi&@CuDـV9{ĽԿ{96w*5sue,+mB`R22ޚnr9 M~ h:9s/냷e8{ŋ'|؇K06?5iY;p!f:jPGG d֖zi<-hB.zi񣶿 _zlUZYr?!`gIsWsJɬwot]쥏mw5rZe")f-fq(8 ?MKCשZ.y @AZo_nyhl+/LȽ{ihM~*KB 3) % ydЗB}^tbI .BhX 4~P<~p *Nizc.__52x!mn@>^{; ߉xxE"X&.|B*TUoDOSq"pbDޚq, z5WF /GX/)?6_kuתdUII XG} {}+~wV@(;P?72Vw7P&Ÿ dMդ] `RUn-y3k |A,)!OggS@Y@LT)AυGҬQj >j@W>zY@ޤC^%DzqT08)l$e > c_TZuwU0Xpy>pCv=P\F]u@0΋0biL]8-@XL}"VV:RK P m@ >.EdOa~WxZ5 r֫uY*"|O ux)3H[Z7 7ljOX@n?|*w}aB?ҀRo L @뽞G[ԹN L`(VDRv>,OYq<4ƯHރޚ̘i4Xܠ5!jM/n(4ˣ;A|z֓ExI'󸕝,^V E|5}Z"* xF_;x/ r>/ZcyN\8Q>"zOPN_? }y\\vо &c s2xmo}q1hltHlr8 +ސH<t5]P'CyIS05O}XGyoVU tsC׃2F+~Ms7C cu@`Ϣ*}L࠙{NNJ c p4.7<@3U5A9qŇEIMNL h`>8`WXNrnDJo92n]ݚCj*_Z@z[g&+-.u\r/Nh FGxsIr-V {><~;o Su.v?=N0wt3Yc"}u zM~:D_x+*v=ۏIxО{: iMn wqvV-52$D<;c V^j3#4crT^F!\PnbK,?+:P/ %Vao*Yq(:ބ)~2 `:.>A/P/ _n WHR^5ZEw_| k}85Q:X3/¦-BH3b΍74xߪJ Pd~bJMU^E$GU\sv+S 7Xe rWTK~݇ɀu$.RJPb}Y@ ^lC L I7V:9s0rI iuJ0 ZEh-f\Wޭ=7<U,[ _@F*zQ$X)3rur?C^P9'#@LX{$M@J?rY!*8OY(-0|iӓW[<[pGĆ>_\HM^Nkr$^.Z[4@JӃXD,e?{vjX6ӽgpWx}Icw8_̆"Hׁ TbSh@wPur@]x#)\BR cdkJoomtN_7$ĵE+fl\! C*۞46O- m,a@ǷB^䒬 ԋMWy$]\_vWc 9|ʮ3ܪ*z. OCR?=V2>ȿp} ``rNG M}GIkd l˵ Get~g꠳~rq=]oKW/C^5@ %I.AU\MQ MGqJzp5Cs/;'Tܪ Ae7>~ -M4T>TM͏N> O69  Hgы`X#RvG@4׾@Ҹa*+8vķˮr+&^GP2C< ^.閴2ԵQ1BIlojP6}ZAUxdj#QԸF>@ j<6Nh-M[@[~0>bO~'𜮂`4ݑsj@>V#t|u슲D((n_`cg~^@o- r ށW8 #-zc"(`c^9 h9kztsd1gs5x,{aǬnm6\$\4F=<e~ 4- s.o /{43 T pl z0GW )FdG=1Ў_1|kꙀ)$\;~rSaRe!pr>nJWm4{9 b\z1#Nt<[|^qV *!"H)0<#y/}k2J_k+Pܦ6@[<\a DY< vT`*J0EV݄]1_Q˂fQb ଄~.>ĕVEWQɺѲU@Z8[=WūSg7 -xs?9@NdM `4$}okM rsQ0zLo`J6g=o  g}Ҁ%+V}r4}{g|@R>yޭ>Vn戼 M]pX*^Uh^ P/:''ȫǗ\(@dtlN > Eoi5g~^t`Z ޙVSDk?q3]WB}k(Oqp O)^~ʢ*J@3&7lc;ip< ";;8˻W Ar?B*W0R!uH_1$5D]l@s3zrV;Q4~ 02)ODl]PB ޙҳUTט^m+TkWA;^D?:u ϬlxT>vYT% _Rer8LvZ_W'%| '+@U ) 9}n6&<(<&iPOOd;d!(bQvድy/bF Ox9 fkJBg]o eaI^RjN -|cäNBi7PI~~3.@tmg|Fd =# 6 lQ=;4M Y$vu1T@N[7BGb~eè"H_ :,>95nxYN,:_'4$Eu5<ȇPpxZ݀-sޜY[ o4a?ãP:EC~h2]0Rp=ͥ`%:\.SF d:χ E,_a&DA Y# Li7Q _kj@_A~npL*؂ɴddObەS|:y9U4z`` gg5%9\PЇ#<T_ 7-T=ѩ8OHn zVYhs ;b|_w%|K,-`@g3!Ns8aU3Uv~94Dp-&[]U@<6g@ɢzU 27- oA^{PHNQ˶MkDّ> x5>~ԀSޙ~r}Ir?ij+|tj(*1~ |:ZUHDHrgX >c3o j{ ^wu@h}or߃+h _.X0Sw$zB \STpJVc Tp5z]ŅJtm\ޔ 8IZ,ޙnb8fkHfz`f[ WU"o|pofWʤoMCw`[ЛHkS?x|@zһи#zyAj!?eCyso/p{xc6)nsz^ogx̛؟Ȧ0efr#5Q(d=hޙľjq\=f-3z5έbÊ*!ӏg˗_走0uva`y`j^}@&/(ۡP;hԐ%?Ʈ =[=>G Q hrkpo/˯K~ UGn w+FKjCfzdQJ8A| }n!s1[T zw@]4g{WDkp y`;Wϱ}rM!7an 0ES_r3X?@JXg-0 0 Rhtq6V'X0 ÚG`9٬ƓHt,NPm_<{P"| @7jʨ<^okI+L t{avc,-*{ +q('3Te1D)X ^.9r8N 30c ˇb*||q8nU$DTWm w} F#ǰ?y?}pU@;|F|sUP@U]8@B?4QdW %Xb`3 ?]u\y5I` aha>8^^irL:ÿuKq|>] QEI5춢VES??ht뾏=k¥t?UzZy{VT7R <~wqRY(@,``^Ohk7 y'!I6y@id 4~.;IF魝p l]?XvVRP^*Y.s Pg_@V'*m 4~'i#g }PeܶhAjX2 +ߒeJ5@!c05Қ *;[_n7ZGq1%s[YīD@W7]h { #&g< *K@B HrN j}hM.#eٺ ~~`J7k@ Uw`s,`zH! 7hOggS@Yó÷^i9W>S\0lW;~a:nPhR :`YUqYDz:ʒ&:zp\`EC O ]> kh> Hvz%z?f#?cQT断 1 ٍYS)m @AuְC.p+v!n"4=6U 9WhO A7@s^_wXxW(vg J^ -W9(E{٪8ij8gMvd 6.e,i=je{w9t>5ڇG<tT͞ۮ[p~*Ɛ8> v/,t=RzD >;\z`F< 9m@ {O"z1~MzSyH(ch ̃U 7>C~K|| XT Bn/: O= Rـ#ӏA78b|爗 |mVOҢ; @  ~mRt˞np ѝ.eISQ ١5Wv1V@>Xyv~`'/fغ 7oЋ3(@~Fz`V#OAj<(ΰA`2"Ո`(H3 $ޙ5oj*:/Nv*j=5@}`v޲cŋ"":*̮-?Kn * boYF0m8]a|Oh>|lAy\)n0@|Mgw90-Rc6>]$?Y_?~ĐzXT>m| ߟ=ZD/M^F05% o~']^tmph TahAb>` ~-aX*p6Ӄ> [)/rxNLvx"Wx RUQ5eO}]ԓ@gh7߳ [@@HkPx~$:@7] ma_ X'^LH {!34A C^6}ǙA6s<-˵]U>|=Pq%'qmfQPl@9%tyTr@_uT'> ^M P/ThSuax Z`aZf~4ڒtH$q@ `hp2WW)mlhȇkHM_y u:^J(!0?^@U;rkh~[ȻDn & ߟn(c?vJ:t43*Dg= =݃z8ZZ>!;^l?@:@> -5C*(h~,дn!2k#n4Um(-m+|B@ #$9Ie>ӧ^[<]L/J[:5Tw5_cCo| ef3J$7W>g=k%vq3q_^[g,P6ò7\N琉81ϫncuPB|3. )FpEZ)oEj& 0 ޙ^靶ǖ˕݆O]镧Z 8r͘E%D$Վ63]| `qa@=˳gxC]Ur4_wQ$ y5RH'Q `RxKfONW`p __ʠ)@  >YJG#3}lSүsuq>J Gs>v*"֚o۷: )aƯ*0%,VsJk%Vo6 :E \R"@ٝ^zTEen&0H ޙ>,sZ) 6qN<´8*j~M^><Ϲe+U%B /E5Գ.[, 0}/CO;g|6`u d~>=@Po*s<@9uQLN  p=ޙ^c=R3}+ ]x áN~ºZ`bZ`9AD m 'zpp/H眮Lox,:p# rufYJD" +W6 /~_\8Lzo)Cx2īK~V 5)ژp-ʓ/}B4 @hޙm]lw?#8f^C[q0 & Ng׍[~t\-]?O I~#+c`wwj Qs{#= X!APh2>/0k,:loU9OQ~-<MRIT"{UЧw>@?k*:Ds>0 0|7*2fEU$D07'bhܷfJ( (N_?"pS/q|+i @-?sZ^_z>LWO^^sd)U-4 FG` 8H$>k.ۮ"}/ʷa JH89Ylb`o@Y9xL$"`;Ok??[ISM'/ Ϗо*Q}ՔHR;2X';I U$.o ~g] ;$Mp0`P@>+/U%D<>0Ѡq 0yv"Wa~yNg_PӟWeA~tz@e+7o߽Wɽ6"dRbq .mxV@' АOggSYW>~ҵخL_(E㸶Lu‰c|ܣ $H {N=.|eMMu@*?<C2$IkHzj  meI+Mϣ86褝 dP7s1(A$8Z~gh1]LmnL}S 5+>x;/C[28lmms-1.1.3/data/samples/stringsnpads/bell_choir02.ogg000066400000000000000000002103071247673406200225400ustar00rootroot00000000000000OggS%&.vorbisD8OggS%&"-$vorbisXiph.Org libVorbis I 20020717vorbis"BCVs1bR!9hcRi)ZJk{{s1FRRJs1GcRJVBh!bk{BL)BJ(S)BJJ%d:SR =^k̽{c9SLJh!t:SLJhRBSRb빥{АU@ P2(88b9  K$M,M7}6mUu]u]u 4d@@ Œd Y D BCVR$9I䤔Rd1I*夔RQM2RJ)RJ)R d9J*夔Rd1JԤRIM2RJ)RJ)RIKRAK6R%JN'RJ)RJ)R>(PJ)RZOJ)R(%|RJ)RJ)RJ)2АU`5ʡ$:_i ݛ(yNr+-7ps>9 4d!RH!RH!b!r)J**,2,2,:먣B Bk5cl7'mQJ'RJ)s9' YdAFb)r *BCVDtLGtDEtDGtDGtDs<ǓDI3kQ{ܾ&s@fQ'}ǿE}^RT'tuT/K 8?^Vpyiz1VsqUO.c#!TSmy :~7gYMһJ M3;g*{MZ&acmy}\'qXOƺ)@%!N@SQPK}²ӓMkS D#zH`})x?}SQ pK h7V5(c2>}(nU*N@J>,\IOy~ Th.ɞV;xsZ^ҧVn[}y܁Ñ g t3wl $ av 'FzQ8ez0zV$/_J\ܒ~Vu_eh)AթeJ@ڬkzm4&OZzG?4}ӽĘoW)rO|xʑqܺfBp֠KUH\Jo/@8nӮ@SI*L];@xcIpuO:7嫻 LiRj~^j:1H[/[`>R"7{MKM6 :;xGj]x?,N`1<pՔS\ 0S_A0sG"d++p_TV_ j'=|=9p _ _<T=|w=e_W@I:2MT5?؜{% U[w#   ,a:s򪼝kOx$$OUwJpAO5/_,GE7)}af袅t"\;zpյvM#i_/P ·p/z =9~kZݪj]w̎u \+Y&d4ſdgL{ cħ0:ﲦ?&mrݎ_&֣E \[P5SX-0tAÈ  66N :tMJ^2ֱ3{Y-yML_a( >uw?3YӣµP t1p8t1."?xGHX_f Ћ So'Bx'!(`uԗ}@N?|{y{^԰}y Nրf,EAmݶl@jߓ% THStI <>*F:nKڷT92 ݧxܖ^{2)\N1@pq t3Nc* 0 sy%@S/`!A(Ew wgK{י>F9)-}꿓E?I[л@'>¬qT Ah,V_!BPr1i@Ό9 {m}mQ4]_^/qT=י^P)1dQl]*7/iO83|fY):ť&PnH&VaWqU˷=~7_+hBd~NJa5N{^ЀJ}8ЙtFT˺hTMjʺfs5[ޙ>NOM,zGlggB$fJC7F?SOt+`>e>y3f܇6P3nF$Q9@d`Yq/N..|"DўߝUΥ?.>6s`w%(j$+v?V ޙ 'I]3{GqRO$i[vx#\YE G&}HP6P̧ZtSD@33櫛SP|x1ozv8{O!U9C0z%U.>y@B3 `6V`:Y Ϋ@U z#w >rޙ9'!ӏ;_x% e⢎mT'> dz+>~o-nL/Nq>*""dlej xmVp (O/z[]rz-#h%6]g~Y,JN &X!S$@8^.ۺ-zAb? rXdKn'&A $rm/pB7v1 m1LC[xEv/ P΋lЮ5(Yf< @nBuٻMJ"~&oҩ\+lש@JSiL*JB[G P۽[u%cLOKKh׋$_q(Z-i}G&hn&MH8{#f8' i;Ž^bero3^6(yݼ30xX( >d P$PuakDj HedDT*JUUIr% on@$NޙcoEſGЫZ-_m[j~\t1zft [4:BzZ(_`Ffc05|@%a n}%LGJ MϤc{ZR-k4E{a8{!&- 05m[ߚ:p$v Uo @zﴒ@,ݩ/WuG~;!]"7PMM t]S@(hrwb1W[)@Ug4ߏLމI8{Mh:|G}\K]Z.-/_Gc¤͸N3 "fnQGv ^79ШoO^E? b'9?%=c*K&rTq_݆D@;\4Um0"vR^7  ~n0G:¿z}u~,;j|@l,$ { )n0TG!+/y.t~Zrm-:Drkzxׯ*۽o=өj @`hbF1 4?iזҦ(,ޙvd,!kLort=S,aIFWZu ʙ=`8 x+>2_Lt/Q"݌C-S*@ 7RZCPuQf?Ź>6Vf8AhiR:iPiڵ#U ڥK$_e  (JlYcN{ZçDQdzf{[ ]̺>0+I7XOC 3p Lf:D6k { h!ߥ@!yPisY󥢀0*{K:Qfm~dn5 \$*~V>g:M(Y]״ /2/]FO|lcn#)K 馈 %ڞM2risp{ "jr+:vX;?'I(iK"I*3l (@3K"Hݪ"Umm4Ƹ8@]߃ ~6>t1;wJO#!>^"˚P V/ߜxh#ntIБ9̿T,w @6LNlلv@f go&NǾ'Gw)7VTpi֌*&]2@`#`Z4<4)Taigd{W>&ԒU{ievZhtk}؁p0pf WKnb\ ]dG'/1NYn6,No}@}gu;YmU59sc$*O]m$b&X27^<aVC"e`d0|~y/T?W@gT߳u"~vͼ⯃-$8b8ҭ+q ׁ:zl,bq? i. /Uo>߮88h?//*tZqPwhTu Wu+CwO3@~ +ޙ-K<;Z?e3]*-* [ElE?`pf.ݧ1'.ТNe;koK%Ͻg `_;J*6`-Xe>n<to?Qp i|)p@`XI5M^Jy)) _ @_ićZw>3~aוoz_G l0YpdŸN9ϲBLaP&chVTl@ņ`OѪ(H$->yV@6++tYwNfvεK?o+JpSkܾ06 &.k\QyNpQX7xǣ!S('XOW;!W4Vx+N^fLKSSG p& P?n {o4?SN]5 ë_[uU~ L:û4V's-4 HU%FUp9౼ plމvD-u믧uYo QXXZڹ,x b\M"EJ m u 5;)5%0XoZ?@A~(({> @}`9 Tom*@Yҡ@mc[ xiXܲiZg菞Bv~v|xk m=%S?۵Z_,il] ܁XP6ȘgGb*C0K4%c X7?t"v&D ˀޛ}}t >G (8i&@*v+,U9 ]ڴc(EU$,H Pyz6 Kn4wjOԜ8½=W# @9^Z |n&V̅t3!lDGltUiX`4y}7Հv{ ԅ)NP}~^(95 KːPv^@| UL XR|m*@4Yǜk$0 4M7ݝ8p?Pݦ`( [ay0%I[hods?uu[G9͝A/v 3cLr;.ݺ1W!] M@Q;lWNx K{Pgx] uT*=@ @ SFTVWN Y2ױv@82ځ%_~zpKWkЮz8=9ܹѻ^߁#JDz.ihf6DUc 'T%5<lfd@o_Rm}]Ȇ+u!曛@+ _zpNQ4vNT IvV @IQL53S*;=ב e f\* 0)#b_K V1' @mN, h\pUkpOڀ?gpus#w~|q H˝8  JtBV*h6ݿJ>Y̓L@)8ƊytQ[[-l`4=<Xr$P < z  g k>XoN(@{4I5HaR,t ~:*`8 ~nͼO"kwhOt~4ok?߃Z8Tր.ƹ)AUH7Y^;>m~= ?@*lb~Rx륟{)G Xx~w?>y@ &~I$TmM[V\Vz*:U_PkGz_ŀR~nԿTS|;ZgK > Z5^.xW[K7cL5KaS"] -Cր6όEr(7@(z("ȃ2yVM{{CN9;zu[sKha"ۗQ?+mj蚡p P˜@@t|4lVQ ~V5GޓnЩi2fP4`9xoi@X7@oQ(̺IC8-<6-3&wK5 Dc-EKz+04P$ 4@5#y\6 xKyNItK-;j!鑾 4COk; nLؔ@7:"fB*T svF]|@(-j'T~u KN_z"30[R׏ʃ~+S @8P:Yn=l.W (G< @h`jHy$G7x/Vz>_7/ `o/>t+X7@)a&dJ604(W< *ID[^&W`+Jcr~vǗ}2VpĥzHs~P1:XT4N8 9֎X(j>MUgt[ ~Xzl61~z4gZy^Þ#%&|ʝ3- pL?yMn݌u1W^b BQ%5o1>0XA] yy (tO aJ] oRu+ȇP\lL"<_*)d̥"@w_84Ԣ#P0 `Hj~zny8[^g^Ts#ÄGO _ݿ%K`/8 (ӽcf:e`H`6(<: p6ەTKl.M䧇x ޮ@u=QÁ-9B;*;M\S6R 񝺑d`|5LU/@/yI&,p-[$*e8=H=*NͣwOph_ < ݌u3l%4(3T!TL7iv1 nZk/^ 8;Hg p#jVuPgG͙2jn U?^ ϒQVOggS:%&|`yNgS{[u *ǥ]n7B}i=w Xto[Z#sGQu -@ lw^q''Ó @~8@ۣlIx'A tB+Bk8K?8]^mQ;Io(S1t@~/]D >K"@d!'~`*~yg$wߐt#Yxg- \g[pdań.u.2A>۵>?@f0* 3/z{:~:t ޜ❗ƪ/u3262@<DԬs @l lЮ-*`,Y(Ih-rwſ+`,MET&nW?٢[ᣱMCu1&w%tSBh~և/.W_, ޚf E>?nφp73jYNDuu He.- (.:@~n@aXUuiS.`aJP0&y\E'ܼN@Hz %ᲈ;z[x8l+>ZG t3bjS\HaRPB,#?ycʏ~?E>M>rG(8<> rd _Yx69?6&>}(8h:͹,l @@@}Þv/1 Py\0LTû%J n+'+ q>0pf8[(\-pES)\]P@k#׿(0PZ|Y/OYP>* ;&$]@}/\2[ hƲ@kum@̓8?W Wjy6\YMK/jh0i ъG*/IKyhwX7)[1bEB&``' ϴZ.ߤPnx Y5߼%@F˃ oƃ?ܡBp g (hL1J[Xf~!f[ t~j\5"m\:Ϟ4kwo7`qX<+:2bҡSX%Tb"ģ 7}r0.ЙmmBFJ @X+(y6Vt=]-I<'_]_Kt Wq /X7cq+aPݤpqiGjx&h?6 H }TM8 <ǿ' ό+ E_@J$c#@dM@ґ2Z`q%G6@I.-QXv?+9!j#Mw7N=G-^k…Y7ASU `̬*0$?f6ӯxJǀp$n&)tpABhcçaހ^OАyw(po-m!GÄXsTF 5 ͭ=G@ @j+7 dY;G-0؂hJ~zXloG<{>g.lߟ3_CKgԞu3/ΝB L*]dTĐ\g`Z w}5-vDVd^./OW(=@p>@O}6ӿYMNHn@RMu?h m>/¦0 XOU஋ @vНcC+`fZܡ ];R!F@RMvI[0{ (@pU6v,+ZMIh[v}+*BKԵ3Jg[O*k`̈́BW%Lfp`M8 ZoZoȴy>kO]:3y6A|Çh(r<|~%Hud5hT6SF@H'6?! 4wpyEWػݿ9R<*u>x^f|w| 8oEm]Tjn pySNh5 dZzй@)5?|5woJuQhiڤi%?KF p`iG̍ Y@dK3(*ͥﮙ 8\py^ƀ^vѾ-γo?q), lRI>]eB@7 .H%@nʈX60{%I7UgzaI:Ԏw- L#fY3f@T O@ zyfv|N[zRAn=?)gɟCOp5~;ܺPk.uց SOHj*^\>p??Y<l <^+_E?G%qWԳʰقvOͥV޿% 8۩@ Y?6@ ̻n{ @1f!qm{m-Imۍe)20T5?ΦY ~ OggS%&JyΜ4;aQSR}|#n)g\n;AH[X7)T]1dP"abF+B?~=\mcH80`ɵ8T0,B,In0}0{ />TҪP5 VˋFmO@KG @n Ƙp2UA.0E 5ciN%~-}4PكS_}LmX7@t3Eh 7U4<[mk,O8 d! >h̗#p׳O/n>z@PRX36h AIz/W[ 2`T,Z9V1vӷid֞g,2_K/d _)w[ziG^PUL'>݌t3ΝDI@P,47f6Z *y{j) إ,P|uo9|%Zݿ;}H~mt($̹lP@U[ <cߨWtl#Niv1;xw;fz VE:7- Pl,{_l=8YN7n&\P!ffݤ b XkZ9!0h{&18$68<)@0\R- gXN<v_lخ2An)m=)0dMuMv0no~zN0qUG n]ST5*ww;\B< ۺ)_ SVu+@ MhC`F^SFr̭IRSDBa{>2Id#ǒ/`L>\ @׿H~֣}`R@@$kSm&O6YTc!a(A+ijn޹^K=OĤn5;ym饽R$~ThWxѧq>o̺I Kj d%,OR\";A$$UѴN'+[(@e8GzWRz:[@*%:MpA!6 An,H퓝PijD'ynKWϲ퓽Pg>C;2:E 1&b`MχKh_:= g;`7*蹋6(z|a5 KO }zUPy0}r]@>2@d: Iw~6VT车]L@|0 QWi.SƪoqK/!QaDgZ;˜\! Xu3jE{.Ra 9 .ٗ^6=g> -lGX=9y?JD TտWӶ$@K`V@ }2\YμXzk{83%FXs<~rtIeu1V< 1.E&!MT[6/GHN};:m+(hn C `WQ5E#S~ ̞Uphw$ @Ğ3HR:[$sYŲVyn(f[u֗w;_':,Ȃ.˛-> W=#*)G`!nƺz r*`U1) {u@E ~kL(1U `~yٻ@ &}t>@@<˂TҦyӭs6@vJyOSݶb`o  HzYD8%ʖû?>3dѤy-I/0 8nfL;N~%LSN[RpR^Z}gqM`̺=Jt=HV$Is!yj8}|}oP1@T$k@B\][M0Z-e*m?/yN\7*> +oN`vVʏS?? 1-vU UզvMm (IKVS3YT 9\}|P_#eߗby(lt|7-GLd΍[5:\o\|AY$O]*^n&n&E%F\% 0)Gt~(TS`^ӡ҉_oR.bz k,A ` m۵ gh׍, /+m P>tzySN-Ԝ- r=Z- _0t340RT  O3{ f?3ލS"~b5@ԓz/=0M~9g)z ;Ǯ|h1Z~?L5@B\k$k`8J& bih2ey IrnpM|[7c /3H8? `Z7& FGZ3[;9<9{5XOH/ hb Ԩ|@mk,@  Mͧ҄%oj=߫ů0gv1eiu$iynDМ+?;=C=$Nܒu/x0aqSJ{Lt3ؓt&`aZ \?" G8_$q (Mhh<4,9:ԇ~(uÖzq9w8@tc6 v:gV X5eRhn0Jmʿ8nF $&_BO[xיAL"be]`| Cnr"톲 f'\DpF O#baUqr"w )%9z6ITS^4d.љUm;mʛPK ŗ^%@ RyvJ(4]1 wV• ֬IhtxnK/X?5.xl b;T3 iB13ˀ aQ81/2 "ӑwIVa~ a'a|+Gg7/= I"zU@߮WDw{w i腛oAw^ -zNKLɬʿ۷[<ʧZRBb57w>W_c=(%Ow<v.ƹS, TDạB~!b ěwv%.M_ ]ӷa08|+ŏcg8hu]W? 6Sc<fr %#s/ٟ+u @zFS.OggS%&(މyZBU$h^ =G%%~ҧvjoNܧ-cL)N[U/Y w_YS -zty,hQ=0AԲ⇾/Y5L ;=gIH / 8@KMSHU-)%@@i:ѤN0IҪ*w}-}I-aw~-})S9:>n)"axBCoäp x:bfzfGbl&TG4*WM@Og\|vϵ=eߓ/u"7j3Q,stYGl<ER"5W )GNJiHQͻ_Kߴ˧:^Rt?ZF4^Ux)ܺf""jݤPC0 ?mݣ@듺bC[6?4O?z;iDr}a`뮢@TΎ Biii \S"N[l0??OynQŻ^-DlyΰJ$ ޯ"`*lOVALUuYE.1A% ?))K@2w o/ uz2L o HϛiM$sMAUmU[-) Ѧk#RFy@FYK$o'>Ϟ5 eD\_K/ 2/x4@}d1u̺H-1hJyIoͻk[ʤ& aD ϱ)+5lTu>mվ<lH .l@<ۤĿ6 L#Yx P H$ TyDsdAyZT􄢽$;ZJ=UqxřntBZDI415/_H kl@ P_.7:9 ǥ {׳r|=QCdJL[ `iPIӶU sU ft kRzs` 8x߁J2D yd wTg3m,~wY_Kߴ/ޯ( w n&APcE`58:uݰ/_ p{x?ve8h|5Oc|ӇH+J + (խܙ6@GJp~@#a,* /g_ꔹt$DVUwuwB?ϕp5zxZzhFҮwǖ _ íA `{u'([+*E1Y7'5FZ^fs<^|𤏁 H?<8/`>RL|>^ Ph`ÌJneu4*z $pyN{2roދ\9)qo޾8ofbk6uf $t F̺Ȅ8C 4)=(\k5t ^ёoo?a@ݿG=go^'7FIQzݠMY Ȳ9$@USÚ૫z;yΪ0-Ӽk,at;[v(N} `ƺGD%t #f!? L  ORw370( D)` V|;+ԇ\h|xvPo4himF uYdd \V3 Ocl8+W_RJatQ5j, |%5)_K+#1y0McV ]:*N8-8 iok!ɱ \׼ue@_= fc}(/j}m|3)Ͽn5l~F?,$ЀJUy@Mf]2sWpJpY6~$i3ީZsiG ;Iwzz ]&׎ma{b^. 1 STT@ -E3Lwe=,"m o*T sCe=(w*Ge~@v@$R@wk uvm*I3p s V< B ;}i|pdE˛_?<7ǩaU4>5 ťѫ>݌u1j:.paBbL+H|zpqȺvT7=} ~p;oo@"C ptr8OIMҶJ!I% c,3|?a:ydr-"*) |wrx ɮ  f)V 1JEEʣy[ _Q?Ηj+ @٤71W2 $c-V$42U x,cIFw?+!Z [mydXYUZz^B͑V"˻_K43n,`v =`{tOZf]]ucEH7Cb R/%yiu @/aM%7HfϞ-@\l4~D^ܭ4tPN_oS)j۶ 8@v/zJ Tk,b *RU 9T zǤyiDYk8=0bE#ܻ[-}ׯk}\u' #ka P|ZG0TH%! Sboγ-%6)Z!+e|(~|U@櫧}asX hnot @$KM@u{Ҵ"-|jf&-Q訌|yiDEF;{u3Hӭ]pU`Z%^~q3N,pf PS(B*d>cy_j}Hy&(Ҽ}[HNJ||Lwم;z:qW?_@bϫ˺9^4.c Kg ٛ3lDYy E]t;-I^a.SzG_&\=G/t3Wf & ʗ t2L_ V~۶䒇_Z](@aIUV+/W@TҴݦ=ў @er3 iRHyu6ߜ-y΢{km[ܳg.Jpoz[7 lZOzE-fBfhUH7-@^ w*{v8BvP+9 x+||=ZPueOd *. @UUOӞvb Dt_j^i +/Nhv]*v(#%>[;>??"k;p)mlK7c݌.bUHL;w.V}eqXw% ~/ݗP~Ӯ-9Jyٟ߯{<%0Sh{;M&h@::4S -`|n4` ￝OggS*%&ḓ9ZogNo]l cÙnu4b bhF-:-(M@g5J*@/(?m*Y e#J5sh}44Ϻm`D9֑ -Z]@hzN\8fQ_~-k[&?z<82pp>ZtSqTtcpYto$+ˣ5HsNJp> oR ddoU*wN|xݧok6n@ti?m5HI$0Ag],byT'0yԇ_n_K/P:=\]_K"K,: NξwH7( >IZ.Eb #D $pQ:9x "a]2ary 6'ݵc l"4Ѿv@%ϾF# oh@ԀVэV?Z'{^b5yJ{v/v[zItEYBʋ/x?E~Y7O78Ȭ4#1Rt b pNMSɁdT3/`{1KBs&u@ZO[1(?NL>RfG_=~@rY&X̙Qhݺ2 dm!b nw`Xq ~8}[&V[w>ϖ$ Ta)&/7og= ӯ'/0 e TSt tTB0^ N<2 PD&u* c"r1dźR( >v^H@XgAhƲ$C0uqTe@pm cz _yv0}rjǿ0xp-+w *%xGkHgn\ {nƺ/{!&@B)C 8[=o{W'}LFqWT֛yf_oNח(PYV*@Rk2# VX HEOL}x 4s y6c]lET]A w fſghq~Ùn& uTIHeD}b ۢļ`"ePs{Ay 2ݺۺg fTytpG09hz-@>߽  dvm3evBzIAy{[y\:7x勞OD2/68{|Wb>XnF>¥#BPWP7bTQ`@,y|J3 qc(D6'R$'mg)? ڶW)`Tr"'y Jȋz{k7)$ -⻛_ @/V@sW OH7@YIĘn*p^i1Q-yD]@}O/-0&P->>/04c̥)Uig:i{&x@>inp ``S&"6U.Y_QJ֪v ݯ2qe 8-@ nt-(HE=}vP`,~}@:ZH(G`6o/o/サ@o9x>o.d3-@bv _I[=F@#P$@7BDN8J(z9k U'94/k_Kᅚ蟿VA7cLVA>pV0n2F:?}:<~w`vC40ZO:zŢ/UZ9W3al zi*Qm۾r*a@U(?J7w۴U8d@x y4}e ;>u64=:kϴi$>½-RsRaqvn+h6'I#tW5%@J'.=֑, (m((Hy3m tKYrVH!@,Y yKT +[R}khGWŸ8zkB?%y h-n݌u3t&]P tgdvcWZL}@@=f@:6:@z>^O`)@JݿQ@tf F$s#k a\u ޙ4KhewvKߴ'$If呃ҿ n7n+q Όu17Q8#&G&]ą8Td_2b"4%n@dz5pH41j 8{=cO/h̒ ȼ+ Yh x*@ͪM ׾r ^yȼon_K4pCC-}iVN p݌Kfݤ'U&ـS ~f ,^l؛o?4\&^ G8HFtڞm# spgdE yJ$H%]` n@BRiNHL3̯]_Kߵ#Ph:QrMyswou|~w.݊n&rTżRQ*z}@w0 6|q0m {Q_NM|J@G,Igg T{jEh3% *%+ cFKh[m@yyXOggSz%& iޙ mrNһN3%iޖTû>-K_%H7O:thI7% mբeW>`@?ѵ~[,yGc@rZY7.)@Q^ @[ :fP@,sƜa:TTSU~ 7d>l֠J(monm]B=g$V^'hwrflzI * | [7cLy+*0 t kFcW (Ϧv<+vQwVw{7X(N)ڒ,p4ڵY氁5K.\ |_ K ^B=uj [鯥waZ'čZn4d )op$ݤB'^ /@5mng 0@:6OۂջM@˽Prq@!_]ۥ' *t8@RiR PiNi|W #@Xu7Ūc|;'N%3Qd}ݮo-r|tϖU~[7.&sȝbn2҄!GQ*7~E_r(; D ° `(@ ܿR'&vg= rllWIΑ9yBeY[HZ?=ETns $?yf^N.wZq (%j >۵[iwSvpA7cLuZ c$MINX)@o>p287^; / xH$  *PiKi2z$;w]@ÏT] Hc2)Um_T<AnyydNV7oϯſ_<$gI؆ 1,TQ 8f ط; 1dZBszL,%_x3|t)|/A O~(Tm͇7^b$6/]2 ꝶ"&X_JJu<ZS`dXJo `u:|yND{&,ws7KnzſS`pl Ru.&-uCqgz̴R3\@7 8z`ϩ~| pN7޷SM (JF1W=Q&C+$X+@J?(ii΄q:n>tPw{oK 3_ o᩽-:*EPuё l7{ڌ WۄSП@wGN轿>Hd/W  m 3Io Ita m,Y? tڵ@@i;( ~+)?NyysNqKy~MtkkHC*~, ~f#ݺ$\4ME}#tiq` ?"\==0F,@TX3]7X,'?Q[ 6m iRdr r~_ DJVR^f~ 8βZ0IS龣k%RhGue^\>![7cLxpbJPЫiZT.|{i9 ZXo&ymXu.'El@k1( H}L) oVgO._]J.nxt-אU^$Ugё)` @@k|<֨HZJ<;PJ$77zy-}_q}w{C>2x\JLt ÄH?~e}ߜ G–7ӻ[`E02Y~u޼K;+Peg@Uu p (H3ƜcMT[mhB_o*|A|K̛ y0Kfʴ4zWt19z㖾K ?}HS|w1f4a"J mg0 =ycmK[P}4- ?'T%9@ Fࠌݟ;@ݪttɔ*@ Пo<؍A~ǀgm~jEf3*_yNIs#}okʖ~cwudNS/ 89{28}uxZ,Nc *2S # `ɺ\Em`;B}l@ٟ/8W dq? @ *i2@L& 3\N۫n0Yxo0.|EW$pxl^!hp_z@K7cL}){3S/ Y- {YVZ ,n9_juuX{ *~S`0w>S"us@ h1SmJӴ8Vx|f`a 9yn0KhOؗioxe8 4 9a;O3'70n&@IG/nR!M3T6EB/~`S ?E w,P6Zu] zKo+z,l #] ε MdPI} ^j~7HNm'߂(.Q(WZz(~#%yZr~{ow 0ٸ֣>*[o-.݌u1jSt@° oJ߃j.(Sp|fxVg&!-0$:Y|w @,{Y,' g42~EgV Dիd(D.j{%=_3p^s?{Vy0КH@q4mnH@x?{?à.E6~j}z?!Z?SA4KVd(|ݢhr&AO|7݌u3p@Ef$N"wm=6"ѳ>~|&+ R{~yl UG zL2J,h{ҩgݨPp Xrg%( @yNd虹r'|wZ_DGS?<]$ou.,eF8 fLP!\701@(2xоxf 9Uɲ ; 'm |nHmw çO. sշ9oj6xGh@}w*? ,@P?h'Ӭ XәyN|ZM3R#j_=-=n-nV7˹S YQ!3@OcaZzLR/Z?!\U/3LDATu)΀N"p{-. hh$MΔtkA1V \f[x(|{WOggS%& HnyN0<ɻ]gCh촿A|wOrb;~Ы_jt3JQ5]$ M1jO.컷V9r/ 橫 oW _QuRjsy畣@]VM[ 0TۼmImSK& tcc a[, Y64?&CZz-}hst;M"7[nˇBϭ9_տm݊nƹS\& O0!ʯ F{GV @zR$>c0 F Eu d [ΆG_? 3y_:g:aMZH@,0V 4+y),ͻ^-?stdC{cwvKg,߻O7l>:Ş-tIթ@T d/SƇy]1x%ß'$ĽpE6Z4a- %_}HN=<,'' HĀf.h+py~@%qC8`4]&~zA9 oqKg* ^ I´_KwO7=18//GƺT؏F̺Ia*qGl|P׺ !Qhrdf(ܚ}*Dm=e|Y9<b'l'  X;GHPm:uΥR_msJ+@o( 0*M٦~jn0=''^-WMG嗷.gw\dOg;\22纄(TVܽ7v Du/*vW1@\~jq1gpEל;ݛΖ>{كmx Gƺ\{C P7 F f4eaG<]o`;ԾOBG`‘A3U:S GIh B'OFdgOPt| 30@ʍڬJ vO_:q>CjS: -݌t1nAITXM %!ªυg=oU b}W'cLp ? l6*|=FT6m5za @^6c~&4)"vYf3+R,!* ~z#[p6~-:.ˏDO8nOS*NZV7FfI@u@G*0dg9g)z~zM,ou &RVZ0˹u+O BWj$K2RH.#3"|RR/XR2' 1ozw~.gYzrWׯ99cHGķ5- <zpgtVGfLS+p6P!UH7%X0j8[MOAt8iy,7L @[s~G#*yK\}PV3i-" gRp0_LQ~3iFӤ-`msC ~Mڝýݻ/ Ԣ|J-"8I)aa- L5 55p_oRwWwtpsE 4JJUj,P't> b.5w aS_i.qgsyEݼ-k?%|.K]]q؁>:2N@1>#C. 󴲧k /@zY ]51 ;}qCT4yo(6O)Pjq0q@@1HUIX@/mC7H5@ 2;QNJ#ġM0;축ʪ.^?7) UdW<حV@!@t*IyOOt~矽U4nU`p?;L .qP.һzi] Co !?j=SudP7:E[ZA70\!Y+3W1+[=è>kW_mizHǛL}<y#@?Pv6K﷯M5%  /y,}S1흖ёlMo;__vߖ.tA O Na|0Z:[_c̬"1sv^m"_ JP9g $v@@OwW9GRSצx\dZh }>4au]y4̔omS=fiZzȇJXeX7i*X-* #<,_x!&>\<0z1 kEp7#μ:O~{@$ŋp}?X_ǯܴ3C"5kg@iڿt;evn@ȸSH5`ʃh:TZzNH6]^K:ٟj/*o[pN>$> X7). *t !\xԧ|vu Ю:G0|ud ђ=@/ˉ9HYHnMIIȲ;*`Qemu",I @pOggS%& X)޹n0xEk]]A$1\ʿҧn+|$p  f\G]1+H( XzLJ!Yf ^NOP'o^jGͣO[_Nݜ)4$ sІzwɧv46֩TN@]2Z+0uKM k#.8Sﲎ[_>эk ٻo)пJ pf1шN 1dMor,l \eӖ=ӳO ;8A0۽tR(}'h ՗uEZ8ZmPY/W׀ۯ@Mމ4IhL'R5*A߯wVMG##]LQu.Ra|b fYM996cHH._|US_-{{v@@+DCt8?$jY@$MɬsR}@RTh @@9@{inIsYS/kgJ #wD_vOz +C&6|J|/pdZ@qt3BC',;Cݟ8큭 ]A D=$M}<@5 RK?pdep TVS>`i &?oqWWwz~z.YLEzCYw '^bdFM7NEv<<8}d prGfEbh1ygꊁ-||9-0m[מF}^+.&Fjh*@ %!ɗt x T=m$XN)#%I|} 4ښ>/͛oθd,޼ OkduS p}/[WL&5]b#XJ}҂ܢd;V}@x5`-!Q0 d!ϟy['>2bimmRm;פS@tI 93 p5M1cQBrD5sVi K3Fo{-D*ܴ')Wrw%Wv]6)GܺLo-+&'PTD1dh_3xX G>7Z:JͶ`{ p>. p| Q{dkRi7;F$JuŖ }]*p$ wjinX[k饽:ϙȍZemZ7~OK*_lW\b,-]B&ȼ)~4ܮ'uZT\׊@௷ağd;H^|}Ҟ-w'D&5`$i0M}Z(WZM@:tt:~~~@o]7i.9뙈ݳo#P%rwaw @Ou8f pt%:E.b.RahBQq=\ @1 mTd|֚;)@U wu5οUF$8s u6-Eέ`+_ЋeZyUt|yn0r!70Ɵ8a/838: t#i/=n`5(:\9_CqLy9U:+~@>&ۯ׍}< &kۖ:R -P{ާ0bMh$iD Q -xC͕=z{zZ@\5m(hbVO]G%Y:1T%mP o Ltι,V`?H\ \yd0;qflx<')z-/y?x[/)|pXl8*t$ `dx{>q@{ P+|d@7Dւ.ơg p Mne‹'剿$~I Z@R/8_ m_ T mU Tc Ch > y6d1B?ɛw\qPsowOu92O ZXc#1fZPSg&]QTWY]5`F 0 ? |TZ_@m pLZPtvV@ڶSbۦI T5Cq _]IqcQR/& {bjJ\9._fϯ?{Ч&!|wP_GOaKKpܾS_bҽYBi1C j[<3,kMmMfnc@}'ӞV .h1RӔ.k@(޻# HI`Q'ҤmPf8ؼ3n"l1/ind?:ׯ;q#钓o4zB|בn&@ѕ#t3Z ! FCp9p.g`7z8(`!5Z9>zH+Ш|>KhS=n @Un(Z(M~P]ƚt QR lhwyndֺ_|yd˻-}j_ܴ=ƺ7Bu 3*Cœ;$,61i.7봗/ePd`} g}G׀4t=_t ҦcJM, R|3PzI h9z&RCyv|Xk@l!EƟཥ~Gʼn 5^1x}pb쿜nPtQ~<$ w& 2XU78<%lٓsė@?60m޶iTSڶ)HT ]Dz `@3uI`{U( nf7 yfJmi茏;wʀ?,/xW[p/mh cLG9ݺ u 8vK@/[/`0:_or /SO(H.<7c@=y*1࡚4H*m/_(u@:sUV(@5OggSf%& yJ'rk=9*S35-wu5A͞BtVfH.b?qHf5'wp"쮭ifԳLE,|OPs7=֣ONx ˗v fu1'(4~@}@`) 6tNzwRGy$5gC½o@[Wp<{Χ c݌t1W!]'}ҘT൤tƒȬ(~>K WPOv Z?>^5H?RmhT[YR K]XP6$h0oLnDZ.k:ў>گſ?bLy-?>z^x4f\BN1% ;]g"5<XTY0 Hxo~/$  ldU2j+Z wUT w@ّ.)u^}1:O+~z ۆU~Cl"A脇_{;a lOAwa3Pr`UM@\=EghMPDk~ϧ=DžtU>P\ypIO$k@n)vٴA4_DW.T|?R)`/s}@e y6;+-=uS#u>\pKa _ܺfvsG0 W0N7Yde7` @vu xq8`?0eMFWN3KtF%U LW Q@~Ηթyk } <`S$~z΢|n)k%R&yS>!7^K:$V}ǔ fLtˆIT#۞OTF!_VpuS2ד%5:17ތ/>;FD*l$\6U5t۪88O''4'S`n$N8~-ߛFJT6O*85Kf2t,]֙ k@,U[a/znKR}l@':yzZzGl\~^^\ 0Nq b"*v~;C>Hu] ֖? 6auF`5j9@}/C+__A @2G-ˈ@m*(6w]d^ `N7=gKyLg俞%.{:nODt7Wx=<#cLTtc q0ic 0bIGUy} I(s |{[@=@h;1HlN  `RuH#o]X8@ϣ.§@-H@~5a4y. 3w2s㍄9r[z!#.^L]>2&F\W:Ҭ_ r[G_#$ Xj!@ Y-Qg%[r~c_ %Cv.k@7-&%sv $m Xz?Uz8(/ny.yP/^wk䆘6pb14HtS*ֿT>OKb#=e c=_Ѝy ϶_P'j!1\d @5@:"yuLh ]!J歊= K(R5 -}i3yow ߉gՍ|>>2Xe#H̩t *PB3|DvQcaJ!\O |ZU#[I@eo]9@]|}::vx"ߕTmmu;r0|8;ؐB.zfD.h)@iĖM7޴w>iu%۪K;pf_ҽJK`Lv dOj?pTp8*SlHE"09$)aqp6X˶ K?4׃7֥p[?~I:|O!&R08 h PUI^FUTf? }@bgg+0I=D7zZWB'%p`o %͸t/0 t CBB{FZ}o_SwA@WJ57HY_*|܁v`"Ĕ#¿{4z4\29`U 7rj vMӜnDyXT>_K+(:$dS)ɻ}~ (nƺN]AEf"u g508hn2mOWoO#X go:>sƏP;xWD2'($f _J;֌e@!VO#V!Zk6@AZ{V i6DҭtNTNdH7V)[)U ~ѮϠAcLktJaE* 8,o?O:)K', ` 8`+v1/V@ ؟W\QR'V: dcMFp(@1!$9 g /4r ?pfbz)`M ջݫ?a'] ROzZp[$J bNqVtQB@^6~>Hh8p{4לּ6E" 7^\@8~ 59@get=P4Q :F6l*1f .B/`PgOggS%& (aqP(QxahVWʹ&ʏ˻Ug}zɝG ##]L rGa,N5t34bDF{W&e@nܗ>Ǟm =\IAc(j\}?@?~4~_tDt v?S8_y^#Uim#߭h*0!||]/֨Jj Sp/ѧONj)JN7`x#nƹS\R E*bHeZev\Hq_x'@ N*W]_?gV{G9=;v@rrȐt@dy@!Ag:. XDn@4Z> -}rY60K#eݽw2MKI 5LRL'ktpUTP@X{&O8BI*ŕ@H@G:} /9/ 5D ժj߷8|zFw&Md;o]tT*ҮsefS !"nE@S[T+z6,Krjw$=Ѿvzvgx_O>n&t1b֝n*"[͠mWӷD.ڞ-8a-X?wZ/@ q`޻Ņͷ2s80 jHPi:jC˶S9Hm?y| &D"II[m<{T%-qWo׵B(|ͫ3|p@`CzXRԧ~"Ne< &XoЙ ?lhD'69@,Ngl" z>@jV7>ѯpZ:G0@T3֌!X2vH56MR5@L<m8MozNK([BwZ7<9&: cf]-T <4۴ Pp) GQ}Q@f+;@ՋNv}Tt%M QmUrԿ[G; FYgҩ #080y{nzUMomw g4E)]Uwٻwu7 cSd 0C`fP# Y|=/?Q`a @ƙ?A:!o$.2g.PZ1{Ir hIoefT$Me$ 2,Y~Au![~k S*Q>n?-'Xw4aqN5t$  pxrub2X!kk ?-@?U#@: T=mM5Pi;KM{omF%BTUoNB7(a *?vk [T??1yi3_/*8fTX0 bV!]TĐ0ңڨ3`ܔ'\ >K$hc4|8{3x0. _i!_QA8S)a1FZhݦZ fKChzKk zK<\z}]]s*Z2T-}~Zۏ/\0< o u3إ[)LNPvVԋ  _ k`wFǒ7 2\≬Zt ҧjm%M,s!1g%ԴP/sE-@4̥ g6pPt-~+δSyovߖ4+<SY7na&Jx̺@A$3 !* /V׿Nr]߀^$kc^OQ]N[}w$%ԟө4Zi$h@&o}!1G~Zn-937k]P蒕y__K|@O5w 0pf rt1Jw@!6Ϯ q`嫗,NF0I,rԱ{ /΃c/UG'  h;G RITy".Aih;374WЬDAz .,)%e5z_Ƈsbɬ?qq@qZ+`}O} W t3pwݡf" 0_Ky:6ky ly "[Smo*(Ǜ{ӃO~hU+@i@D5c& (:眉Wp 2&@ PQމDٙYk]_Kߴw*vf]ӻO=^u.̺HNܿC&扺Sa 8:oݽ3WE\3 ?ϥIǼ ap ÿP,C6 co G!Ɠ_|>:Z@ש\Ehjծ-$F4tVPNl@e]1UxҦr|yp3ruIΣ)~ҟDifbV~-]p~}SEf:3!h@ @>ݖq=Pc#GU;{/? @  {+ A؃6{O/nUA@۱f(Vu&6@^Vݿ4m@0޳@ # i/މrfIZgZtu۽[-?C pz>>u8>2͘`n.03 S C-0$~W"P{:cv9 * ѿH;gwGNSt?L_lH] @d^zQ䷌YhH1h;Iyv4|m1 D<ƛNDܬ% ѻҿbpǶQ@_/ )7)q! P4K4`B ,HTU2]Slt.#on|Фԗw-NٷOKگ槷_ ^rn'ࠛ.ƹS޷7pIkbL܄[@m^^/(2X4 -_oY֫rH:ۯ@k{6Wʕ;h%钱UإeX!:ӱ6މXu]ҧD_ =oK5'vpbxȝIaEB '~Yfmm\wwjYu K>my:9+2?X߮;{ND~q~ &Cb|WI\9DhnѴxV_#Lx pT嶢OggS%&fY"Vid0 wZ-VGMs$[&CR?w7,n^AOn)`̴cؘN X~{ fA_c?diȇ L5 稯_^}PCG*O »D rr\$*ݶ%ms2U h=`N(|sCjd/Aܝw{->CDGT$G^;[-^m?NgqTt3&/`E;ch$]۟:|Uv!t=O#]߹m dGu8S̞HP5@ 4@ sev鼿';a3TW$ yyN| ")߼g#`xGKܺ=L'6 j] b 7XG?OjRN.}\|/1D\dj=`6.ss 1^MDqww\.9]gƺ TR7Cab. #lz?={G<adža4@Ro ||1_ r3VUJñoI FY`= dU]f?!=3WKS&o&`'A?eMj/oo>U6_H,)5*[pHUK YM^yʠ]+ydok7x h JL8>tvGV7vPc&.M&!-b:[;P >ht@ ȟau5dn7%H He_5Gvpt1GQ1(0d8̣ pMK?{ &W(N־sE,Z ~7T\m[#-\{f]3d!)@u^./_] h _7މn DUNQ- +.%,߼O! oĿ<}HN-E0A 4{m 9}4 bKD,\8ߚ 7 (z ufT@:i-jlA^ U s &|ynd܈;o\Y֨m>/@lAv[7#]> #f]B  3$})#]?߿[pq]qZ{>9\}oCC&o@&YL+u: , +rQ8? %I&& Rյl?=^QZ/##L]I?@  3 !'_0@'B'c^3F><p| ó\{sl6K0:WJl۶JY׊y`)[m^ (1*x;>>M Y! gol] pZog,~1Ν`H7[l ̊RA  O3_m[n4p o9QĢ?NZUp{Xu0Znbpn\s☓؄xpk/~ >lkΟ] @5[/<;|h8u$jjjUxA}6F+J5 lVHmҌ OggSV%&q@wǺƽɿyP(cȰ?#,%YFR-}/@{%@5 בn:t9;a2'taTM`18 Z2 s%P@>g$7/m|ʗT.zʯU7l@TtTUSd@йm\`G@Ѭ 9x1uiyqr*gxkS8|'K)!w~-C@ق(b\DU*$d*!=?S`%8Ę\4竂 iH 76O+Gw(>OчOHƾ|%ng Db@V!*͟dyQr9 yi)Q'Fݿͽ- gzƃD-ZzaO_su+Z%b I@MLC  ~Ş콁׷i#+#k >a%f?rȧ \9k_@x@#YfF{J~਽ЍB(wK@ww>z^dLN*&`'|ː? SM-}wpBn&JNۡjL!x4 k^HGC?ƃG ޟPyl'Ue{cpZ02G 4F4TLHӬi5` G+XyM [tmY/Nk7ʚrƨwv)>-9mcI :Rɬ Qp.TXQIHE!V>g]̟`o,(6v%1܄ i~3ÞG@}]Ap|jy|=V5 g@[ n}m8̵| 1özz$a%V7;z$ w&k p2+g +=%}pu3ΟuV0PS*dbP婁˨-g~þ ϳoZ1 = ''Éo)7Ic7 $ FF Q) vjӫ(%_y~-J$Ow[u ]0 C2A nsq?) phi$Zd72|+ʳw,-<}z^jcܼλ?^񭀤R9S@U@tL4x.oOlF^L(v7}$7T^-/oe vO7n&1bPJ@ ~Πy | <'W۝`,P έo{YͶg㪒/|ݤmec&|Ć=/ e)CQһ~LObL!)^t ?4`fPa(1nP`,Ɵu;X|g1 }7s_Nx K @d~ux}'t'KҧS^BLeo|`*\MK7#]wB~} w___WV| `Њ;/Rd쏀joy]վ^Hͅl3`!hsfM\$]A0p<(ЧLoy,@߻e ^cMDo믥Oy|W?mAqK{I /@!` t3(;wFL*Iȿ{[Yo{5˱? dVc+9I}T//>|KK:ԎCrږ(@@Y235e2<U{m8Y"M^*0鼭 ^?{3wo߿ɗ>8/l-x^; 60qVc" 5$cTk>tÉ=<Ÿc|V4@^g W9ϣNMTMPso`So`.K L{Bfb)>A Tkw>*q~^" ߼OU!I8 < @>Of pt -jPc&EQY>@/?w_ {@/?ֆ/!A@?~~6~a؍f8 } iԩ86uMo5V[> av wLC6YБ?믥|cX;~s-xnƺNabVt7XnB/p`ˢ%,oƆܸq|Lt9:٦xoˌ`:i t&ev3Wrսɛo^"a[ݼ;Bd>6 ,?bt#EThC_"}l-hk<AS_@5 -ҷv׏?I3mҫ<$@Ӭ3 2[\@$'-'"o-}>Oyۓ ҽqzk!>t3Xm`"!a7>?#LRKʎ Pysw 7%co==1`^]xϿ6-MYg2Ig,$p-CEpw >$OP=Z!OyZA_K߈>.{^Jtf,E!SA&I[{]a4g_?dX 27|8}둺IHr=n_ps$$d5BAl@Y'@On`(L/))gx^KL/J29 ^ƺ.zU>>؁~̺$HQIHE4cm Y9? -z[o0|{R(zea{ YiKӶYй5t!7[]N nOggS%&G>A`C zZzB UnAқz-}=I.Ю?oxJX+;nnƠS@L%J@ ~elNF hv` 1m#`׽MC[  s~e3-e@kŀE[`>QYqK7MϒyA7^KGijwK7c݌)TXwm܂MbY k+Qu@> Uǟ^K^];/],$ HTm#$.&h6x@Eps6v>>Q探wZZzaT}ғ>Mrۿ>CB$قہ .݌t3S7@ $d"z7@yQ5w|pz"5P.9,OX6^o_$8h@}H:g6@IMWN[)L+ދw^.ᑤ)ݼ}- B'HXf[}!<@OJ`H:^"]bGF/ HQɣ:v >(q[;n]| Uq M9nx+t 'S.ƠS *` .8ߥ>YRIywgK=QI~ƧxZW:>Vt3&:,B ID~ 5E$ c_M1rG\ <{O<u/L̀v̇#7KHs1C@X0 P`կOd>Ws! wn7\!yg$Żo y^ׁ##݌SPC*q{?Wa0UD>W@;˓HwO73@֕ 256@ W92< >OgaHIiZ!Cӷ8JsG佅u[ea;'u3ŸN *HQIP*wl÷ NN0hw9xWրxOstW~%]T`ap :@2;Zyi4 пoa7> &K]_Χ.4H$]p~ 5=-Z)@H)M bąL@ g 0%0M!k-*ZؽxԛZ%,X&7-H@?c]1U Y`ZD ~ww7!'ys8?TzH7c\ Αxi+ؿ}i<3XaKZ@LJ]TU3Str)d`|Z 뚎qs4Zk`$$c#_sS:[s M_E8ϑ \-=S#j n&:@"K4h/^ hlTt aQ]gR/0+Nϟ mُ~+R@̎RG0ՋMt$^`M,Wo0(>YCw- a4}& efhݼ}-gXO6ㅻu3X:F$d"ݡQ"@Z\_)珑 ?] ׀:!L*^5( :ͨJ h皹ZIK>d \vY&Ѥ65Nir4Mm@XFYVCEZDa @1 At@ao_.8/-It'mM*Eݽe8km NoOI e> <9G$2-Hq^nF LjBB& +k _vF#QҀ2wUo_:}EHo<S @F?,ؒ_\P%[@F>OqKG1hSPewލ!|_GK7 V#MT@epvw=1@ xx I4.? Hx5G'oUfaFpTuɝNﯠ:έ!,M #@! > ˻ԿCRm&oqܢǕ|a\f :+*$dBD^ebG! n+l4TNm@͞t7o@vDȟGoV@@u/|dp' qG*x$,( Y{& >~~-ovI M?Y rw[_?R>-9y.݌u1tBB&D *a4O]>5,{0~ ~ #lEW3 Ofy9n>Bx-v8##݌t@Gr`?p-g?{@ޜ8/j'g {먗M7ۧ r&w|mPh+KmHD WTR_ tR>~駧c齓ΖhQοwzq7!<ēH7c!*`HB z~&@D,&ό`@qG*ߟJs򬢀/WVucl<5t߷$ ),kK&F)05@9>~r3$;;ZN_u]Uۆzҧ@=q3|pnF\%!{B/ Is hm&G$PS_@n>@[J}6nޭ 4T$V$53XC >/3X2P^c(Z$:>~G̍{z'Fӟ8J's=_K߁y%V80t3)hPCEotb;@7@?@ Hz~U/aNnr TrT |6z]VBM~]+ BZS 3M`>~L_so".BM?r9!oI$u+:0N^HL@iU WL`]DGl@qopX`5 pUx=vZ @ PL @9>(ALoK=#ҷt5Κ%fP7cn0TR1@o(Vfr cej45;{GG'8HuWV%"jt|@@p(OggS%&'y9> O)X>;-}~'r${Cu3X_T0TD"qv\>Ѥm0(|r|(_<ԥ{HzW#ߪз~>S)02~j gH$o>~ӷsw٢og3z4-棪ݚ½b,[**"d"Z?{P8^lre @p~r]_ެmrtyuc߻n~Т_6B%ګ-npR >~);K?Đw"tR|4 ӠA݌N0Id"+S} 2 ܴADH4@?\#=w\ϳ}zK ڟ9mPX F >~WO xGoLQ_#*>ݪoELa#`]%@ nu3BS@EHYmIv;EZASr?%s쌮f3/)Я~H!Lۀ 7ji!x/0 >WI~҃.ao`S~>'xU8lݤ5%D**E& r}a\GbDG~_wn@,]K F䅛sz]%O/Hfnk@J::w.@>Er5rũytKU= f ҭ$HG'֊+j=w-@_=Af;?# 4\ nd|@>o)o֌_;o=0/x>ka1ZPC. mHS6{C ]׹tw8_}HDnlOȿ|R#yRڳ(xg%@p>ǯc >}EFӟr]s_KLo bNs BIQ"^n%hta>9* Wg|@UxZ>_`ƭm]ًh8}1Hx>>'S84e9o|r ]k /\GN*U$"D?j<]j @A 0P1 Q-zU=*p n¨|Hk?4@'>,τ&|ooҫhkb.lU$-Z.FS*`HD&DYHa -PUO|۝uۇs ~ (`HVA5"ksp`wW"((>Z C}ҷmdhr}I͠nF). ĐKB*"DF @Ə`/qL- (Kڟ@'ggpf)>u}@ bHB>ކ/ Ewr}4Ypoo` 1H!!U33h 7E`cw @>=H$p]\6@2pT۴ M@D,@CpcI`b@>ڧ/3\iF_3-͠nƠS U zBes|4;iP\Mح*z>ɳDjX_R o`VhP(?/H@>um_?O=FoRHF;>}I #tW@vnSlmms-1.1.3/data/samples/stringsnpads/chorus01.ogg000066400000000000000000000455421247673406200217470ustar00rootroot00000000000000OggSh.gX`HvorbisDOggSh.grHF-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mc2۬l]@d+1g;c6vTI j b5,VQT8K@K*aXTB0`&,[0"5# $Q0$ Ecalvtb4#:P`ʈlJH5hOF.g% L`c]~)5n ń 2n>L{QvLlɖ%kFΧJ;i,xsaL+mcpPʞ'x>AK^Z*{ 9i-jEPtD-kY'(!Tj&bV@ڢ CH8I@ ҝj/Dkb۶Cq!4V(YĆFA" ۵6 ^a HNL"ip c l ڠ$ݫ]2!\;K_CNnv".{SF͎RQds&vPZ`@PAj*B"&X> (tV!1 ϗD0Da/sfuVS'ml@_q;-!%IK66/","@llfϖ0kr8 $Ѩz2$H4_Y5&9 >.3S4G˕鼴t ty?]L%`dUE'dr2WTl/}Nr2Wkeu&@N H[ᛆQU" Z 5";&/F(@!"awN(H'0 2H!6ٻ\X00$%6T M*#0G,(G2!`@;d"ɤ#X@tliˤp݌c1LArM'$Mr5@^'M򤒵ϕ6TNI%k+mvK)M/ EU8a e-95F#"@Q jE@ZUT:0VA<`8T!_+R$>dr`"@N5d€ ,L*Q&3~ӧ/ qPp'D-bA(DBB~UriyFu$ "*M~4&U:IM >.'B4#m6%Mi!6Ru f1YwN0R$ VGh!&+!N0HXΥT(`H`%0~6 0`G&Bv?{0D˼p4I$K ՜1qBFdfVrC0(,yAYVDXvJBciNB}4.I >vҢVHUƥ t ډ (k  ˆxP;L*e(j@FAr4LD!  !.J( X$%@@$ALT%ibnH@Nu}-Wm6ėX) C!GG`4D뉓{|j )III@d(KBH6Q*aF0ۉ--tNI0s'H$@@> 6!-a&LyE$؄(f3]sM],.$6  EԨTJ 5*"UćS0a(*\AHoD0$+0PD4b0QEj0Z$)`]X ݼXsقICoD&ZLTh6(fu7gr_~z-¬s-Nr Tc OggS@h.gDVM!*i6*/t")D%ͦ`Te2&,ⲩSC% PSQ@@-v b6vbPR!P!li?ޫ䚩Pbd; IA`)pTW)8k)k.$6@p:d'ʢQB( V UD "$&A\4tD aWP@2UL2E KL b*bf^J4.PX[l|=h@ aq\OCF ;&H'.'mٟG(S( ![gO)]j E`"L@65J PK @A" (D@ 9Z$SSXRAABEH106s=D]iڬUFH&e}*jM{(edɉH`3ZkE,RU؝ 7P$JhTH >Zzc~M^hz k镎!k+.,{0 ahGCe*B E@+&(EP @ p4Oy!x U2S%qWAa  iž;DZQak[=j %,J0&*'\3G'hU;0N&kR J,& -)!kߏ2PthO Y~t `YT{>6,b;N 2 `DC@TEjc5LS(r|0R`8R (#6ǐJ"BH0HbqHb _˺ :k1g_5eYJ+0$0/>bā)(mhp $ wD#I${Z[r@ǯBz(`H~9va' Vѹi/[Fy.. ;:3e(X^U'`]P@mM1@mmET;E҆ <*FX@'1)#3|sa| .ֲE$- &&in ل-ۂ.Bp0N,?- $MT HIU,L1HDT:H?\QwT_gJ&H E;l}nkH|g?Ѹ[HXlHA$A&PoɤO(1f&ݮ# QV$!K’nBhacCíXMORNS jjH`BLy.#Fó;o<]#e}ٝu X=0: b"j85E, ZmlMG'! I>%@QMZIHpE XA? dY)V$"UD#"a4 KGcIQIPiǽ=}5>$3 ^ꢎ,[VVt:{WPWvvp ~x ah)!#ڐJ6>t+)!#ڐJ6>t+5%` um[P0 \H4@$1ZxYҐYp ؄̞uD$&I*4AF$l|n>V:h:NSV"x\Э) \^d嘺eZ?u,1|a`Z^ a-)e|yO'{˰gu>=u : j2,*"@(5(j!5a BpBbJ7(@ '1T`YN5Y(N ;V,iVg\׃K`6`CéBA2N"[֘ث 7:q: $oj1 t~kA^-/]c|?e{ޤ4^:%:ߏtٞ7@UcE#/,Ȧ""jHWb ic@ 'm-B MS F!$l!c N41 ld:I489W9P@ i}s%b6h nNB Y|a;aز2uVIlhf0 |/(eL5(p.d7GK+.d7GK+5@u+U@m{ѩxW j֨*b؁$$6bx<@8H IULrب :K @ H&Չ Jwx4ɠjqJX9`8c00,?IEI؎ϡQDtq:#*Y rp`.m#+w.m#+w%؃6612;2kQET;;ð0B$D2|V!2bHѴF  9bԞ{-9:{+.Xݮr0( F{V'u@"M'|COn]%.D\Y1eCG~ UBr,,#٫T#pQ2 ꬪ袎e,[`+>5e"RԪ( FXE  c!#I ضsŒ @K=Ӏ G O$bwI@a5KF,Qm1a+&`#mIM9:ؒ Q-3n_Aid( E48BĖaʎpR"&jAX>\TH]<i{[ldSCU%D (#"1&@$8a|#pYH!O`ab,wQ8B r0 (N&e`$YH"9 旵"Hh9 :đ@̣$N*IXDJ!@s+3̓cMo~mKd74ߊf3? Besl()~M%cF}v(\zS $fɘQya):]tQ'X$N`:QI"B(k&`Tδت!aW0ф % (R X !`!*$c`)& C%"$\ z"*1 I!& *e \^ (1@[&:A")ӽo [$L2Q-ׂ1 NT Civ@BA>nA^!u>gL演2nA^!u>gL演%f "AMh(Xe b  "E!b"l@Pc""d$cl  (& K`4@bʵ@q:%/d$ kmn:e 2MA(a) qP–@@nCd08vN-2,/&N|X9΁Z>b ɧ OggS@h.gIz~CNGkJiNcI(z^U)MD glj)e (QJ:E 2' P >VH`n@"a\dwڀCGvF4I dDHA֫G hN#vH(6V"-YDB0I1X`,eq)Y)Xkڜ:|)~/mhWؔd1\F}MK%2l xde"d-Z1("r"1b(!,C1ڭjd`/phQ1E@& .CI`)NT@(a,0>$ɨub 1.b#b2 ؑ!ťHppI 0V\,Zp/QG#vU@>CF0 Y]d4=4aYSgIC.c%ԉu4Q##P{DUQ5iHT(C!1Iejh 2E"`@eiC8zr1 9@KHQ18;, ,:gnDPDu i|VǯP*g~-p]z!(4ynI}_=/%ēe{&/Y` bG|Be*R$ V[P`, 0 b )#wNs4瓢2Oq"v`=A0xdQUeY* ac"0bBJM[ԙ !0B2)W[$!"HBT!a:(gё` , *Ja`ŐL$NO7ZZ] B6o$-Ց&uX ěo_PnH|gUوp \uD3i^ .Hs&^eYЩK`:زDcT F vd2I| +6.LTB7:.K2 0Fx.NS"5TkXH5׎BVE X] c ٱT|X C"b˖Lp QB;̸HѳtLM!VP;! 8(ȍ!)њVf4GghƐhM+3#Ks3t Hl@F5`m UUe iآ`ĊA!x'T41@V/RHy Q~'2*`0IR,fGJd$%Nh{7tt76A1A څ? ';Cu^̰[s@a@I0Lbj~%K@֏-[P]3D81 A޸dF)gMݱAиdF)gMݱA@bB _tfĵ# FIVPYU    _Pd>'d 6I d HZ %`:d  "nU3i!:cB1*fDᶵJ:l2v TwJȲ K G` Y~eߣ,> uA,kL w5]DɲFiј/pX5Z؀,o0Щ*(k `AP 6G $j-ad,qHAH |{@QyraWG' # aᢼdTpeeI$L@rD\Nr#.7 M)0)d EA & H ΁Yt-"9pR1K4t^Z`*%0XqYGHE51l cEUA(ALR%H@ 0b#A@|`a A;<. ȀLban!/bR{M4/f2B^JŚri^L]$6mxPè*&ZEA88DA@A9\d8BY)$| HI`SGI X8K,'6v0b[1!a8֨,p. ($@*&2v<$5PkZXQڿB4W8>BF)j.x2ҐHQ{tųu +@Vp b:erJF%@Ț*bDE@D9ʥQ(^{kXJF3x  1f̹o-$K_,T `#NvufN脣1!:@QqN  ,0Y.jczK(4>Fz4k6Fz4k%+`-&&0b[;*SEe jc pB` P>#(aA$A P$ XN55h,B)rm"B*‹8`` > V>BUۡSWǏ ,dpJN(cS,$$F(3^Hڪ s)= 0{_j8A" ͡$M(%(囲fћCIQ b7eM7`>lxdSèP* ޾DC ( Q `1`@"oXB55 `¨#}Y8a M2HEc&cIx ߙ9QP! ,9`\HشQ89A|#]ךI @o[1fԊ8Xa'!8Ϙ41$4"Ϙ4XV fھb#e$Jj i"C0Ā G'F2 ˉ%fC#F(R&[%%H!qR@, ,;s 1X6i51$ i\NNpHhSS(c((0a-1~25&/aܥT"eWL_¸Ke Jh\=X ,&tģS;J"bU@vVQPaڠ@تx@ 'WEe bB$۲ $ܸM 3+Ll`/$}罟z9Ё"IhH8n舕HeF!aEj`I&,S/sIș#S1!|r}t80.#u  OggSh.gڍ ~XPTJ>V%mR ]tQ@bJˑLBldS;QU   X' #`p +B lb* aHOHA1a !Yh @PF`/`섁q X粄t Qm 8fm#ѶB g,\g tc &_S[P* XҀ)>5,9ƸgukV"ekBYrqԭ6J ހl v`TR%P"@KpxC.@~fwF@`x00Zk $MAK%ײ$X6,XdPo-D$ĄcBu[`PXDN`mK%=aVI/&[Xƨr8ͦd 'pVQM(y蘥kެ'IM(y蘥kެ'I%.#rX,G=G hLU"@Q$`EQAU B$d Q@I bFl5{~kY 0"g-T@M$ D,ppZ+B" C=Z0 \z9IIɨ"T@DˮV6yqs^ aNfq]jp4A$rY(Wa/"$^JE3hܣ`ѳVP Y4T ؀***(8U`J$`6 p0*g eA2a J)*B%2$,BX<{O䖙>O ҏJRwϭ?74t(Q"SOiӅD.As>``  5TUEPAPSx€iJ`+QY*BDJJ2 9aD!'@@EA1N) 1"`oT?%Q*i[qYmr>XpbRURcv5a/s:W.Ky54(Wш, I<>ԡ,us侗KKyiBIBKW*ռ *C"L( jǨ"Ebk *jPZlD@ . .\4@I浐qrm1"#( eapd j\Օ `Y$m_?p i dTr*2i ܈ p `~|dnʇqwbJwG|qw^e@d!eUUc5j/""@TSQSA aFmX0jտW(bWx=N @$1Ep-l)ɤY0/ذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@4hH)A 0/0/,/0B; 6131431C< ?C$[|l'`aT( wTȲj}wk5fI:ϙ^'%:M {\K;\fGwftY ' ?eDlxP.d hN{Fݨ)]LADcP0׸}l~ߗ40 7:|m7pQ6ݼ9f{ןEdZk? 9GD>92" ծVvۋ=S<ƅQovX|$RG6Q|b-ӮA ^+`#m_׈T$HU2F.K䑾1z.4N$jgSJ1^u8 !0Nh' QBFOsTG%Z??#MϷd+uF'//`Z*3S+(-=O kt? !ܧ20ea/,9dQ͌oF9߾$sK:~ՙq$ϳiFYBqfx(Z0 u_?j. X4So&Ql ;R۟ =<{WB>o[TM]J[ Cmu/C永($MTI%zT }dR'_q3(5on&KȇiTTkľ6EG!@#vӣh/[cYM\Ug$TWS{vIGUM// fqf \8TUM7A>(U}l( 6v7w6φ )>}LٸwkƆ@VTpiJ7"L鹌|^ML*L&9Lۤc5 0N}̑3ŁvE3d,7Ow+}&Iv?幽\٨WA1)"Y>4^qQ_=Qxr-U55;.RW{o.֚م`Nf_NZJQF#𥛴v\ 4^ c@m@,xKt~7/;_Smuoo-TȑYd1Ob }qNA;B}A}tQEXe\>,-`q}a%=!]~9qνt*L&qSVk^2>K*eWR"9o>ɐ18c׉$S)[/&s&Մ&5jI5$ s  Re`J#M?*b3i,%%űOHT옘0,IsН {ylgb}'DitJ?j6%ndXЎXl p߀mEb I@}ݞwɻ@1y9cؘ-Gb?noI<4m1s*zkgJ IaD$}mK|)iAuw<]Qjj>mP#( gDWzt{`U:ԾnIϗvkPxx/V7҈\Y}#1dX>/yUJ>ʙqRR/dUYo?1|0|uO܅Ў}݊G2.Ǻ7e TY6 a׏ϥ}[ /ֻG(xsiDdJqӷ]sv\qB3[nPO,__f1dIWvVPH:N֌?ߨ6 <Ƕ<*S>I\YGg lśle7c, LTY6#| N]s)ѿY%םrjW'a2 }_3oZnZTYYʶY kryOQk~sܹmq8랙vK|c6h F<]ЀFlω ߠ.Dsb۲U5` +n:w[*~v]Olr6}ue$HfO{~nW'@NqCy*`~ #r' )AnKR}D j)!D:au#qj/ZY#<žxqp$ h.b!>Y`@hB+s6 x2j[`ɘL׏k0ζ<,ҕ(<  ?!ƛS׵ X*$@ѿN@c x|h<-?lxJNOcOP>LjuhXɳ4g+~D)X0pί%H6MlfsnK$P*co Q巐%m0rŅaEN8? ̾] Z+9<6vq@_76l8}sDpE+hϫ0cs$IO[dN+Mᩀ_ XGd\=\d_xا9%S3$"XoBtp؝a==x%͌!S# 1Z³ڌOf[=Kul/~cZ3<}./-7(d!!*޾# D~S}DCB%凜|OИc",Jxtzt,߬piw3 ,e1OWWx |WlW-YzT\u<vJvz7oϺ;B̎zg~f{ұ 3w2s>ɗHF:{QkoS6d勇[&) ё>u . TI6`.˪C/[NI|ij?@C{ 0EaW[`d7۾k5A"*w yV%xg[ xMٟHpӳD0$gTOa@wi)S:{Fxn_PU^{=iߨ%+#sYCW/X_FL:l+Y Kn5au\9@VM8+ OggSmhi790/,.1.>@<1111//C;?354221= ./,0/05;? - \9lԡ{<`Z;;΁Ik7AX~C2P7 T]e PHfQށañxoH%k۶l[Ӝuly~c\7eXem><|hlY5aIPU8=-[s5.x4s%1ϕsMׯlʯwvmDX5fb!]-4k=.o_o}q: TJ˲/$h'4VԿh?@FEikk˳Oj5WɭJK]jyz*Kx(*B61֟]ᔦi_c, X7@kX'@[ u۶[gX}SLópx.I&8HH,5Vpdc]6j۳>FuF}LT+uw_@߳:#!>S*\]3vdP=?_ݡ޼mlH2|3v;3 #l]?6]7ꭱl"UUo'٤R!o̚ߒŚgl[cshP 9K 蚿 m|%q_5d[3ķn븓[!U+mvr_F\)gvAl\lݠGV=ZPM,ޡۤArqη1TEqdMQٟ/w7Jym?qp( Zg]93,^_lє5cuV$Klhי/qH^oTf:zciKqcl݊ǓmgXs{柹c\wr~ѾaSf,4"Ci d3Y7䨎iqmſs5ig[KfiH5_ l[?6!+3hrϡ=I ̧\Z l,Ώ\Z TV;iEq]khVJg0<dG%*qZa;N0_^b^~_y쥩IJ TY&Ym=|ʀPUa㙺$ϯ(YOSP^kd`~L>dnԣ\#ˋy$4KRGo23s,:Jqj7vj9jT_?޾#-F}p@wu]w:œ9LdNR8$M߷-F(FyedPM~F}ϋ V?m?#ܤ4#XYcjCŮkH\_j-<:oHҷ#޵kIj#dߡTMY[ϣ-zX H˙oz9Q c>cE\Y&YW:]*;w'i57k7в.қ!u;d[?'8TCP-)K1 ~=`>o1_NM vD]7_Wi/?\loX1wM`YM9lg> l!*+Ճ ?0$+|}Ew7WmSlFC+_NE~ f؞C 7ӌ*KI^0Fit ph|qi-**=EWT>j" {u&nyʽd`*H8Oio,ߪͿ@{~f jк+s#Og%RQ+[ح{C˜3s'2;ՐIrRjFZJL>+t ^7M"e`گ1l X ,M-0N@ XNY7T Rn+3CوQk D.tQ4sh|u ?v:af$ Cm-*ټhއoϽ 謹,2;=h=x5l XWP1r/ߣH 9(X}Ӡ]Asa\W{>t>bkrT|175<5kZ/VE˧]I 9~kU o,8"`<L|VkJ k\[6mX>&l &.} IQ 3vǗ8dC% >dyQdCuxp}|77% -~ij d[ލmwmV+zWXpgZ'y dGoG?|\.ZH 7 pDTyϚS Ź\YO>P}H0{6@r$Jk&E5RUq~~ĪE$ z 1i _Uk)e2{AJ%:~8= "aMW]? y83sTme"V⪒uMHYk\z9!Avl"pp! \cNsʆ>pȩeQd)nC:Yj9*iԕ(脱O <(`&Yћϖ joGSJ.EϿ `y3HG܀(X7^1g#Yz8".{msN4w1W[㿶mȝW3VxZ*_-Vƫf$%I%RmP\o9rz5Bg܇Ӻ$,IpYXv|gIS jLڍO$Sd]ث݊["c'ddd )`BRa1( rz}B$$3lۖPlvw \}HM!l<Ɨ7m_g(1""i5w*UԞV;-j?۵gk!"+uZc\G$a1;lxYJ&"Y5Zr .OggShܱ-~h p;RuTp@e4E^ ?{>)(8nз v^ \I5a*%:P!vh\e?5=muR]Pp{P ١ W~5,,⃒rFq IB0'Wc ?^uh,1$xUNSu`l5I~rMpx'75/.pDAK5C`rPHk P`QYh45i^>hA2֩? m^^I q}J #Ϊ%iC 3%uoeO>V|$@R;=?q(8o~نeLr}h1ԱNT/.`X Ml 9Q99_Gix2iթ,v',ҕ(h"2 Ĺ"$@ufy/$HZ-85zhux}%U p{:X<'N_yxzX> f#{1vDe6Q55͡^Z욫J|vIܳiB2JϬB ",&CKbJj) tfk 9$,N*P v> NhҌ7CnuRIo~[ ^_C RWB [}HS`KU%@R9^NHƏ7uy+_??3vpn5JXKO͜'yX??يnǖ{lq*ϋ]7W˻>gII2aj1b `13Ԟ xB%%5,%BtVW 03gH;<8 nOU/5\Җ|&*?.^^ ׌V(xMNचv$DNKqQH= —-H[>-0U=B+OXG g`| KO@￾ۃhvx7]󪚏 3~sJvLjmuJ<:]:|@ԡ}d|炵 K~tiSRJRP~`%h]*LCT\<_΀u6 BR8?W>ϟ2L_@@!|ٟ -_g=B;p{(~H(On>>Sj'%Tp9Ppye^IQMGKQ؟T6՛4'Y7ry v6%D\B-1c \']k HkG4\Iu.3u@A`HJ7Son70/eM?{ggs:`MQJpgh.\o6'!0-C@C@+O= 9k~@FtHr|t?Աss9~x=D#@Sf_!BGC̲k;\j ]iwmopIJ!{ ֭9K[ t E f41.H:bM"c 1J NDJ:>St5\1"~f]g_=8| ?<Kp%)*h4V@A8;@\Wic S  @2v}U֫/`rl $#`bTB{ӿ=]כ\_ļZdWτ,nh}Oަi'W%<390u9\.Hng#/ANQ0M7 :wHȴ.> vpZ6SS iC-ge u uPNH)z #^s " ٫91|w/ ,B=$|)@?q>ut$Sny̻bN. mMpko&vxUS;|M3|Cĩ }M2Ȣ!~ θle&VN*%isى%@=[T ]!9(t`mTeV`8 9͝fCr7Q,^گ+?>&/0'r`=›o*8ھ:"ҍt68#'{Gg쫖lkdZEܐɊ Q.8&X2wPB"X9N+I b6ZIL1VxuuXمpqnjJ:a@ . ,'u< ` |&ʍo8OhX ;>}jٱO*`}w޽]>#Kbg[ӫB3>%ԕ:cbrƏ%:€?%jYT MN?:T\@1 >!,4R^S0ò^sx25n&6Կ)Te-`[~Y ]@%*It,}ryX w|vr|on*$@uRSSv~O蜺wwH"iVSյltnGaO6P<5ki2+|ɭGhT yohRN,ASMYs&kL7V58BPLG};Ǿ`OggS@h)B-0014@;C LܪF5~3Z)X]}-@]0jjSJ 2݇ ]zݑ Tl/Åhgm?my'O>[;ĩ7G4r`X}<]LNH3TW{#'?$dn_PtQJbc$d9s{)yVZggۏi}tr7Ѽ܉I N~ oM\9 ov  +X#D?0ynl@o^7 uBĈr!];z[N;j#@Fս-Z_=@_~:|_O{VKqrIs믌gMk*_s8c`&g JhYrٹM&eI2"H $NH1~f۟`LIR?j8:qHH|?cB羍;ٟ%0ػ-| ն&ɼ3~]Y8׏+nm!r%<K@|jx RDm Q"Smc[RTt=6Q2U޹VQ{.(I'EdIg[v&Uq2^'T|9gk+\٨m bukoԆ^5Jk>izlO&e&|OǪw~L\=ק(4CZˎL[8[ʾC*yֿ1[{y"K-hW pM0th߮w_VIe)EX6hWcA'OѲiQ$oyqCQ녟聚C– Ԯ-a[_ߝ8ղ^u4@&Kʯc>!rGm v p_MXh`SXd ԸĊW 6 Et.S2u޾0]9cJѴ4IfQ9)ѣDzګ:;bmuNUU&MkHGrbgdr8 rymGs.\ӄ_l1^ʍH:ެn"`kbi.D?^: Uy /〗2DHj Dflζzl(^= K`-r;Bocn'CrTi2(#b.Y5.6s讑O; e KNա.%h p"@š{%ReGN3 ڍl'nQě|N[7 倧:6~>zY[9qbx9sV^[votkaMv\I^X|M?Gxoh/lSa+^<;jZ_5o[mTc1D 98!: &/HrjX7g ^=ki\pJ R3~upZ)Nz:Da, +xq ?414`FHjٲ~;ǟ?_LXN G9z1@}M[V ~`3 W&Ue= QW9oYQkk qnB=̊)m\;sRŊ&@1I86pAn B & kh _NSGC—z)N4s/i4%]Q/JB|s<q5s9go  9fwZ[X'70=qsTdQ~Gp+riEM&O#镝7sMs::3G&&V)ūH"eV$sq`CuS:5`2H~p(ɘwTX]G8$POҦS%S,"Jࡵ<+\n|aBsI}@J:%yW$yefJo8px>K |Z͇d8D jñ㲬!Iۤ S4$Cǩ lDVc_ށ$_ஞ,]%wl2,sثen}%3;'rҩ9dxL MtJ'Sspl|hݩvyW5 \,]jtN8`pe]BY\K H`&BW91n$^`?уj)`` k$['I?`tW# Ĩ;SJT<'@y<I'(}& hUWQFO< `/c >{i 70 W<p{Gl`:t<`>Da9-16 TWdvt)n ԅAJQnz$rWzp4ZX|ǷEVmhǫ7@{c3]V9ӻd+U+-dSLƉ|񋑕//3S?<*޽TXUx~VSU|R(eC)Y ҈_\7Yح#'IT63@S4Z"/ ږР.Oߕ SS• j`@p:X{*tv@+N{!jb+0wB-z!_yV?}VUfNEf!T^euE$IbR)T=#Dԉ$UbS+!ajk8Da uZ?fK:gU@mg=8PI';Qg*lktlm/*ZA9g_z_@tOl~ :i~Rx}Wυ<ȟl$VI E*Ps3?-+dj:?ڪhߴIX:8gα^v^(uں_RրgE1dlQ3 h!MxHeԺ, .aqfv=Rn鼔Џ$x܅B&S@rmY!,vΌ+#%{u0} DkMRtXڗ-wpS@+ rvjew{ ?Nr Ҁ1xļ]nWjI{c\$o!;AA wmRk, +siE CƅRYO5d[v&l+6 t)uVpcdx7mwuD'`xOCP@Q4f==$$*UT=H*>>@~?psy<|>N+G=]^c ׂE@Fx蕉l3n˧;=p{:2h;VЏ HTxt]me~1DdX_^/r}Hd('8*9[D,O.==Xno} scl=yחOHB\Ucl%U=o -6wG9!>0B:3xfHfu?;9/GZ HR<Ȋl ,tMDOAxLa `6\BR @{)%X6.cOpH\{-҅Ap@p_|ܞ s8n/\,C@sy:+7yOl_s&LF55y7owV,I:M'&UͷwxP!Hf&Fwa7\'^lAc(&Rk~͠o-|J՘\-p jZ,~EK ]r?@K>;@QzjBTykl`g#i L~|z蹡6z@+G)̇'mJNVpq9!92m,}J`ݎU=Bw+(hg)Duek4RL0P`:P0~O_Kk2w` ɟB5`O՝o@ -MAc s @EN b p)+@L=`{7u+0oŻA1%!I.[l>NLd}Ns9+bh5<n<#暱{2cVlxVeAu$CCa}Y@[#ȹTЌ*-ɡ\M~/T]gb Ov\b67޺>`:/?? BtLu^0+$@5{'[Λy`{mf,Ve^EkW CO?r@␈̼GZ|1gS}֦?|5Gy}T,5|ݫn]ʩ;;sjE7W bS/l+}1PaA+uФLr~(BÔ~ڍc#]z=7!lNx ]"p?^DxOT3dI"I i:Zh(\*iVHXK'RXhdsNW_-ƪBB'kPd9q1ž@~\fxkdՌlң}xTiA>n_BL1Je\٤m5pk]]Q1ȼfw6\K?#trl[K+u~4[ՂO6J}1.zR:p 8ϋ;V2K%n%.l.0uFt±OyAwN)7+**>B}M69yzo9c]*zr5V^Sg 7_J@g8B|H` {<|}y!Lxi\_-0}og;o:q\q3RnZ@`oNLU2 :̊Ol3:Evr%B8> vplx/*=_)e%~i57 |3 /b 餜OӷnMϯ!A 0|;? `Ym9F>>~rG  ^ݭvK=)}*p^z q sloΜ3->Iz)(m/\lkxV}ehp@*ѾuZ]m <0B tKܑS,#\Nra9Oz?.)cW˶h;<*:+ ScT׫f磅H{wn:`G' \]]~Hx71,Wc@̍1$$ͰWX*HLܛi!ѤJ4,r b"?MrJJ|XWSpckCNp@Y-MIRhOw W-$*yۤXUڴpkY?tL{CĹk9cy@+[dJε#?6XX b*;T:7^3])oDWr}f7"GυPe(Ga NtɌW<̩ Nr Fx%xqҁKw (h9@ZRGQaWz@} !e Xvg;93|bٹ'}//9h"]~ df`%Ow,kfZ:cKujTk`րp9.ZoX0j$8p)](N$co%L( il2'̧I@Mp<7}  >2ZIR k@*GW@pxA|d2</:]Un2=Vb ry?ϯ@>:ן1`Bݷїd&QD%GN5cAT4h1 Qo9z+vCt d~A"(]q/_+`΄t1[TZXe9*̈́'T+hS|O%p JR?bO=@3!DvT$X#Ǽ hsቂ7E,"T#I6t~>*Y&0KIA$^tVlR:qry^5R˴ ԥ҄v!&ߚsun#c6,BJT.1v[!!$~*NoŇ%zVmAКR#`| \Wg%y :!ݱp}^Ы7)@:l$py/I.GS3ݪL0Oy7gy]SfrGvĩm%s>WH<2grG ;B:c6qSm6Ě6G\}ke.!hJR'I@iv3|~"|!־"-3ӐHt@ ڏ[{js2x v+ɛeyМo^T]c: MɐGq1zbNF6Kc@! X- A!{3(#c,vyoxWLkHc؅F>ZCZY5͎k$QN=l͙\I'T\mw t囜 #B℘sXQlHdɐxHX-⬂CuC8:.@|ye4ṯzo(w EH[N dmnĵG*_ e 0hAv'p`ЛL{w4;5}S.;gJSZ6g-:jn'3GJoѣ+m08=<)Ka9÷͐uڥJ0~8BCAЪB5nKE 6xjժe0Rw7)eUn6#覚.I`t:7Yjl)!Ryg^>\/O@Ny-ԩŻ%E}~˫bL/;Yke=[OYOcfts"|QQ!}iCm-7+3^iuJNd,Oq-Mt¥!"WNntVmhQd( sdsh>:1{/#|!`]g`Vgܯԧ?ԁ0/K^ك) 3]eY^uW&+kyJZ2I2FLMXT٣"*3wNI7D~dɿv3 l;DZcC UP^`%ߴv*l=1&w|7 jiZo|X=o"O sC?  hu='$@Kdvp!?tp5:~J7=.O ;)@kN>f:  f9vGY Qy{r\Gi]@uCmMseP> ߮[NT Xp8PØs8h˘I)~utj`8UݫH$iT<:[O?NXJ:ħ- KDr=i3nYL! #@ Ty^. h> q/3C!`@EY>AR=E'<yw$ЩQۚ5<U'̱'*)@69+ܿH2 >2e[w#e;s:f  f37!lig@ۯt\ *r`WeRHǰzlmTeN7 D9tq3S c>sv: KĢ#(uUq+R~7N[ s!+\j~y]mO !ҥBzS dƸR=7%S4q-O S[$`' OggS@hP5b͈Sfʔ~NN!ę,,v?X%*Q脱q3*>lg`f; [0p^9``Yx?VO9aYx`(^`u_XZo6^Ay=V֐.-mL˼Aacb}k͑:RZq7iI{B9d >t@:nU&|GʨXmhBSo`Q*|C~%͸EpzWI?LoKpiN!v^ :TW@_ĸ tx-X `;! ;_Onr`-^==lհ/rv(\V-Gi(S##{G !RB ӊTA&\|湂 !" *@NoSd >t՗JޫkE*\9-$=Jp?>N_5xέZ\(݅zm Ρ)s>C/ gv"IxW;p娤 =hRT樏fcS&29]|=5 fo$Ǖ K5EúWM9rw3V,ه#8d.>6FcrKkJϜ xc`y2Q}N+Bmmhӊ}N+ _r& .)X\Gv"0 g`nn+- 5tY d921F9t g$ [9a s ~1KNq7s ajuzS% NtB'rTA]x =@ c`yỏ)$@?#3`gگ \;~4.C&|4OYRIBD3&e3̿[Ϛ̻"%}Xej~;}R{G V5cL\7 opKﱷ?BoOI>OKP["A*Y;**5*t;Yw,?~hIpt Q=D&T* xӟcVHX 9ۗPY˛# O v ǿA2D~]ޠHeo'Tߦ⼷!oqщˈ˴؄+rEV]Ħdu՟]+!EߗI 1\l._'4hG'8f !&DjqxXބV|pށajg6@*\Rk aұL UܽMtS w'`tt5G @d Vo?aĖ@9AxϞL ~w|r4jDs˼jO^S/7oxQS](K*SHR^9K t!%;I~Z M9 m,ͨ'}'n 0ޛ= WZ$@\,Hg. 92gx!S9H h>y ܛmǽm{<zV^_<GjD؜9W{X|G/?<'?;U[e1_zK[i%KI|_]*E/6^02ߥGE`7ns#KC!PB6J,d :8 t'NepKIOkiT DK8 P& )p @ps @j3!lbv( ׉H `_FZ|v>{}N\,7}h#X~cB4 %bvK ^,Ztz[Z%Rv83g45*v8ɜ[nr5;x#Xu>:#{yűOHpf8{D˞46Uf @vLcK߀<π˓ߋ%>9lds{y Uɔ[Lhɽ/`}P&ZsӬՊ4~gݴ (rJ+}jCa[FǸ @ ]A5lx4*nM Ly7Z$nYt;/`0-SB'?$^wgR:Uv'wIytl9Hñ@Wn2dp!g..tpq{M0K6ȸ_919(JO%7^Õh[rT V5D@sK2t8)3fv_'q^  넻V S_֩*`H?o)u?e-.)D`G@V4 Ll^MFE﻽>Xo2'0El C +N x>L ijXH}5-5KsC#YMm|WQMgUxloZJB8Dg)9"aF*|1.d (`kZ(/X OggSh F42 310/1;A>010114>; 3031/63@<-5323//@x[V@WmMmO^п[Jyx_olو}+dנCF_nX5qv7:҅RB3@3~5HwƐ T٠ tmc/;9GIxԖ-cdJTm+lW`/ +Fu4iMF:;zGUxdI\U}27~xR1;&isuu^x\5?v&Ģԭf diUwuyxhcJ9?Xsqn}ߥ{=+BѪU//lS:ulIng7Y-V)V_폁U[3/0w=22g,^2AWMx>zGCIөہ^sޖ.O\Zc47I$im-Yk[KawX3 }kJ1#1"ƢRf!҉k)[Qzp1 K0!ZXg q2ܯȜg.|S3 N;gT9tǍLD"A%Ta^(wc]txc=ב)? O'܀>m+kI2?rEn n& zF~ȕk/˶pϬ&r'sʙUv5$xi,/d$Z ,kb\"aՔ4& !PT}m), 0VvH~^(s9({o/?iU lo-;+V/ʵ4ETg ^9oBP]l٠6l E/ >.b do֏ i/?j?(h{A1QS2B:lYsJnѹm'#_^ަJgWn^,VbLY_Yʲ~LOcTo]>l^xܕfa٦snbdۡ޶ItO9b߱>%h=lemeqǗUzH]^Y5YlW,ôȯYm%ԗ,'6eU*ގX~X~<\&aKm~yz ,CC5.2?_(tp?w{l e2rь;7jMh#hk,Z.ovɢX4i`؞:1H >N;>Cq<-@e Yg!`Othl1 UW~6Ո>z"VM-Lڇ-& ThNWs.뱠,$#,!%p(GPpڕp. %v;`4S8v9A0uKWHp?Ʒ[3 0FQͪ)L.ڰ_=:{{w]kj X&}9 2ձdeD)z8.`^?W%_ȓvZs+/D c]ܞK`V^3'ՔDPڰ2E]) i cp 1@#N.f9T2m:TYo>XT]7du|0z[ v^_sPjsi o\T7HYvixwy$ y{=<.f/ϿzT[OlVR7^N j~Ц__m'SQ6\[e!~~C*ƫ=[V妗 n'YTY_WGwO.a3եֻiPXmad6%>}O _5šmvU[O/%TYGN2T7d#-qM_pB'W~L6g\!LJ+?I敺ݠO{y9:<ϵ5*NY{K*{?lY]YG>5§2wl/?gϝ肅-ZϭgwJlRd&Q?J)f0$ .^=#%d+I QO塙($s'5> ub*29@hE`Av·{K~=Wz˛q0=OW? xr`yȧ#_})u_2ƳUs#OxM:g[WKhDD"v$zcˤ|;3V!&Цr)ڡ nۄ2'eNR$9R)#GXCOxu@6TNp*qePIƨWn`8eA"q\\]/Nꆟ[B[ 2c)};ԧK2M[d['T} <c+'TTpS^t6c̬Ĺd]/  @r80j؋W[̗'3͏?[KT]&)Vx&hP)WjӚ[$s@UJo)Ҷgs{HPJ֝lCQD;إ2?@4wk|eSMhk<'0h5hu5gnnC*LHDevUwYkgd(gL ~ W 7 = , oA ȳN?5MV nj׾C&87M JC}Yk% Qߦ)22LV/:E'T*#aYRUŗCӞNà7`FHO[ڻ=u&gn+9+ӨQ2YwoPgV809R%evϦK4^- iՋ 9G,@ Mb'nak~3"ͶZ@~y%fJ_*7ҬG&}.BxPo*FMd #r:`33|@gJA:ţ8{lbZEbcquRfeU*!̹Jb,7-;@HZiY3eT/bIΑT8 %xA9~t5\[LmtHgj1[ofuXrLSW<DZO`"o? T&hbH*bӻWf r;#4g=]? =`iJS u%Ra뫶4ǶQrMsHn1wY2z[]VU"{)`o֊3_(%'`j-ż+dC̃!`5A++ @٠^,) NlZ×|S-`w΀y ,ͨkBE+bPur(ntSH,0#-?̓%@s| h`?9A*˗'6/u{)ok2RLh[m(=}39GTD}yRCd0H^Rw~BW4#=@B#+$hĈMK  xI!T360䂇*?>~~ѩ̯%űOUYT~OrzEʺɀDb>V}n<V7/PT`N?<6sAt}jmXbmmah=e7DbORؤaeP[Z80s V6N~υ\J`~ ,+^ bLCiPsk>&~/&ŷp `ܫVd@4 @w:xkO!,QҜ@^gn]IS@~d ;n.O@Gv^%p3[|3١ʕq-#kT%^Y)YD 3$B l}"[4*9pXbW ݁J lL|VS0MNLz|Hx pt"S1}@A@=1(۵>S#V/r3`u3O ,S`{ :`i@kL+i:+tdR.`9{ծT&6Ǝ\oʑE1rRj9:F v\o p w]1o;-'k.9RBJkn`1?eOqx?M@ ]@W]B'zAhK'@OeKH'^ ?T@gӯ>~{ Gg&ȻgחJXzz '@iݚᵭ`j˗Kҽ^KJo?-qYǑ278jSZfĶb skPg~8&rnEm&?'iJ_\4p+'@k2t^SBz>0VH{3yc0*ct@__OH>}9^>V!|63H֣L%wLr( zmb+5:RWdw5)JgUP͎Y*W/Y9gcOAB%R"`Ň@R*`_|hTi7GԢߨm'zlҕ$OT+ @ysX0p;x`*$@"pS@3 Fk!~lۀt .-|+7̼?pWU#㩠 .ѥ|Jn#MIr1IIvCm=mv8(m)U;e֠58 M@ӲRVlk~Z;bB3>B;zCL~hhm2oTv=O&AY?޵3:l`4E^ a S^}2Ah $O{d_@qX{DO9> ry,Z.%l\AʘǕV`YܼT[K7\,hջiU5uM6˞'9W|rluNy. hR&eEhR̎~t@K!_@1$ьMD7jd$|q&+` MXPx*:?x*@^@On S MvXBVw t~pT T|{'`;XZyA?ۑi/y\=? g%emZbʋsت֬=p36~OB 3ܒ[D"V0&9Sшմ+B0怓Wĉi!)_A>ڍl.krNף1$O>:~ktʃ2N/ ^).ܷ ( IYߪY(Q/H ܛ9@tl @7 RV$Z|ɔEk):uIRk}\oHoLњèZa8X+P[&s]ƞX-LK ɸ-{ 5uҰ  b7, xʱE)~ފZ2YNx :L p:4fDuVUa{A4 @m.{+ PƓR|D<;4|lOy@Uauvq9`f;F/:ܟk6wa.[`~yp/ahq5YUȰ,XB0)tE\5bèE=2&qA8a=MlgDO>nC4֫k\ Vs1pԕ(pࣵtwЪV}DW^l< 8hYHVmgeBDo},y|}Lu D{'_z@ 2A;\YOcj_{7 ġe=VCiE3\Y/l|uekx8s3bswkCZ=;ywTw T]^9ێ^YxWF\Cu{AZ~6v0aqU;N>_:ڕ`IxPK1nCRxFo2\}DB@{S`ӹfNrk#T|+B @AjL+ZH'i21 ^ At0NE"'X?}A=0CN(*ZZeSTRG4."ֺ{䳕~\=%ڰZ/c[?˘Nvunvqf&f3)\n(L \rs]Hc hK8hW92/p0u@I g@4Mz۫*H`y:y޽z_U~=ut~I8 T3[==-Sr X6? c> ģ߀`PsaM;y'xդJizO[djEԴ5UM)V6%}t: Iif^ P8!G!(!ڂg\'?@!}k@/^bm!エL\.eƿKKd۠S|0V'[/^ ^7[Ь3]Ԫ~L}ڲA`z[;nnvʝ^OޫrNAPD{/U c\Y? TWO}r1Ƿի9]ڪ%|KRn7d7쪭TOS?uFTï/?;Iۨׯ [\Ϯa:[VpmFϛ:ާw6HT eـOR1i1$BT Te][\[/Pm.|&xXۢ#E Ҭׇ.E4Ǽf|ƟpԳVL[/*Q -0";D6 MX3d_F׻ޤ:M,߁U2nllbaJof $D ̾=Nmst0wZY}fDeeQRUT5Vz;'O=Fyu!X~M)'xx~˟#x$)X}裧X1_/ 9w+zS?{9Exıt\j.+L5=l"B$28.pLeV0՝ Npx3Tpdت/O->`O~LK Og PE]{-S@H !]o>h><->>+ .R_Viayn9mxR Ad;S"MRǼG]"HϽm+IK%e[UɊxd6jPk(WDHůaBYk J`\Q@pHO^Zu+,&?%voo/o6 4$)c l1r xz@@[ܪ`VHT0{gۀ З,:dp\_ь㵱&.go mBr~$Z^Nܕ^vR&OMWg~fmͪ5^a"\ ՈUfqɀZAF$V<1)$ 0$w@íPkR ~ dߚ?u7K*yWgO:;9 ߸,x%)?LK3y"ԓ@#ާv&V:@[jXq46q`9>䖡`3ւh\ݟVʜ&Xw(ּQr?Rhg눩~Wa>JK'MR 9VUe+lk22eT/V3ܔSwl&+%fݎx6y\k*IDpy(Gg~͠lE%d洆3c2d]a %OxF6_Qa ,f #S'|AAqY;.c#?,Z< =..GqQ[6Iz5fjnb(SE6IΦ@M>:uYYT]-h=Xxr nKv4'Y!X`đ%0QhGrɒS A6x"\MdԲZ&K*|=x R$z' `c,x?yghOi$]fE{ΗKJ " 8ӦyWv(4KYO1K6 Yy\E1| /!fTY:)BÒk!'W<D?G NtZQlHdj],?!_YX`Zj:Exi[}$ p<ygsHgh_i`5}h=ڧ+ [4ǏX{)o𝃀/韣!aC"fyt&yN*mcW"MMiE1IS/Z&fF 5_t6$3+M1fLH``~hj<_GNŝUpS2،R!?L@s.+]! cE&(90QПrAg]@A( C[*C3]’LMM?kuk'f.ƙ>'|@<ܜ@dl&/Z%@τ}8ܕ بt3Qbsk[tN'HMrIO7"W70w&5xk 2TL:#bC!J fd}_]zI# lݠB>y/nɥPO7x) ԕE\'uu#\ݡVnl߬»hm{yxc*I?.^ )j&BD{y[ \a 6ȫ%b D~)Q|ٯ譃ǿR-~W~oHgOggSh & 1>@2235.2A>0031111??:e PK.7,4<~]*w ^=t4诿2ESS ~Mlo˿Kyxg)Uzn)\b;X4nY΃ Ιmb{W\+,O(Dv7Wc֔|X%fSHk θDԿ] R3r*~'_^4 =c`:/ycL|mpt P:  ($&x@X/, {\ |8^x`kǭcx+[PJ$ אY-Ȭ|-gsznjC+lV_.A>tZ)?h]Y6#osG,2wkeI2RLbMPB`JSLj4qdǍˇ [N, aoupҌ҆L ¶ 0Fs@Ʊ@_X@.cH,V^b+@7_ҩ{\!4 W^m=$}$x®]NrG\3=my]6s /: QӐoO,dIU(~Jd w$a5ͩEѽWok8!Y2|i!n[>Z_2uKK?pYl @f*0h(TH7<nV?5|\{_ PёW>Ǿ]ӻ;X=rBq|ml`/A/3'f-j%v&cLr}Eύ7B5k.%5JO ')\ >a*mS.Xce -!2x.SBM>u!e6ېw1"c͜=Nqpv. Z%O ~M8*q @x h}E$1݅i4E%{{Z<  7ckK؀E^+лk@^D@1u9IٻV:WENbY_Z)f}[~f  ub(n'r`p+X9$9 \j` lU,m*+FYvʸ~| h ħHU'AEYaHe@8f"Mި+]n w ~gpj$;f$8diw.ˁ`l|+lDv6V&YK3iTPZ /Og =RUN6wN&\4 \88^u`'᥍SDU֩uÞ@Y Ey AAUܗht!,*e kcG>8ON/^8 B]x#r'Hk3AӭݺJ6bz g<=7 )oC}1;.r"Ϛ#U3Gϸ\P₫YGLR]8-Yt9ӈ#AŘҐ*c)$AM`nTi7)嬿Y*iL 8@|d!l@hbhT0zxrrb9̇Z@θ `y 96] Vb݃~67'O>ۃ $̿/P*s#CBri5f TZjw,:VRTz[2* 8 \!5Tʆ v x M6ir.ۀ h,m%EGQR <)x`GLJ"Z±O4n3o+Ӿ? V7S\zkw8g[+8ԤN(ˮOhf@~-ry '`N{!^R_ ˶{")cRK?9,Fd{ѿ4ioSJFy듕#DV3p;A* /rseK-2-SE^n7zHuj|$*\ ~NEzJ TYoȶٻwsDswnPE>˕$LY+c]+0N#p~eCoVkVG>$I\\ֻS{>[dn[w>XvbK􏾆D.Ug6eH~N3Dʽ6ou o.udWE[>@掜LK@NiK3E1̻\CFMǟ/k]G br칟{I.dG⸅1T'f0v2;:HS;XޜsdW϶j=^[љ_(o?QR^OTW*3(Fo2|c"Όɵ޹Wiٶ̥ݴ[_Ń3G dWVf]٨oxb+`Dcg6?0zedup_5&X0!3's)]R8| =9d(jzCDL= F֠8G j rk,7=:G 'axVH=_C`QvR x dhrijiڶ-ZK|bO̢]"Zp0X*ҍ ǟ 9ǾuJw J-p X E=: \&ʶao6KɵOjenuZ[Yl,t۬GW3'd{hG]2y W_\jT]O瘶>Pzzh߾4jR#7χ}oA_-Z\d m 3igcUIC{0/?O qHtWT[OwzpȠ?xGXPz3]/Zےp-D%m#Gd]k?5V U5\z>]ZRz\*UtߢgC6zൿ1B;@oOTZe\_?GɲяB~`FK yn6]I4sݽWp]SŔ:ԟQZyj)־dݡ*`BwxCΊW?enAg_}m_Y{mOggSh g4@ f3\=L&q[Q?@߽Ӏ/BabHD£8 pI\wo+دAz뽎qˁ=dlBLo h&jQԗTNhR&Mx2;5.H&ų c|ܾC[?NQcxvlaq)a@c>sh*T%$ۢMМ鏀j ? 4- 坉Gs;.qnNt|}l3Ry m~YsRLv#ugRZ !#I,=M6i%\uJ.eoQ?Zub`B G9(G\R)H xHeFNZ3F.vK/rAt%I!- tܽu Y]p8?d"X_N~?wM% #L/W }_/oEz/ x3SdNu"ǖ$MtFL*UADRէ,z*ƎD.bѬ Kx:{Ͽ,{Foc[mH57IH ߕj4p~M01m pHFS=ΫDDfeLЏ >mE +II|_=CPS@ך0+$^Њsk`[?SIup3n{.pbXy>N6{XSn6(-!mV:N!+ Mm:_ dE+m֔|VQ-jj%{LYF+ښoߑ-U\qU`Z U$$ <Ov)yVOQt?,y>0Zs05s]`TpP@S3wZl:7 E @kƧ0$@W@yZPxo^xxa䄘lw&W>^m[Z\ .t}>lŎ ]R[Yb hj3c%![F4},KܹNe %B_2cjbhH Nl Ff]٣a$O(N8д^`.'jg@yq  2ݟ\)$OOn@/W Я@V_oN9CxI=jW> \tou$PB>4Dcޙ)kKг*KD@a -{nj="Q >}TA rHf2x8^ p,%Os<K456>3<̫IӋ ӿdU Zf lC@yz x pzi~} 9;`Z%H2dk1'w]ӝ JRM ռ!GID/SWWgR\X6!~ٟ%6y+&hTmo@\79P\$$ 'b77/@Z?ݹ+|rC v=:4(cǼ)MVdT2kQ5qs\KOo;]$@'KB$> 60ofc&oFj@s.\%к|~;FSW|?^ bvU'HcjXм^HwLGZl t{} 2 l:C\ϵ Duh)i6ƞ`=0&x#/ъK?âOeIp޴/$0s'ͦٲ6} B N$"iK A%_J ^ `\ԟu*iV"s -T2<4-K$%cOW=݆u`a%kSHj<z.y az"<"/p p{i!욕b͑wtpRV:&]3TҴS_+{V3>WM vS;4 SaK$+[\YtEP1Џ ɬHw6@dACS@p ,]*JS?ԗu*: _`D2p!6aO mͲy|pjY؜ ,P݂uRC?!C"}C=Co/F8ڃfY?CCw>8+erW;5gw`StjN.AhY%5fP+C)SbMC`SZB2jPW*=FnONpv /So y) ?|D6@^M m SbUQt11ªŵol gx0sl<5n.@QZnzx4mҨ䒎uBqm(\f}Vʓvu79OdCH}FR̡֝N%G 1`A58M›0(h1]bngWpcŶ@٥®.tK*$c_L$y)d ۿ}EwKq Y'f@&`NWϵD&Pp֍L@22.Q=u_Xcqsaź-.Sd6KׄΘ"\l0l,CJ"OggS@%h 215E? A;/T@#k[oLYO~Zc̀:<|lOO| ([bWDf+n ) \ՠCli^0k-@1j,cc<3ן̠ o5(3DCNK.jgּFijA4ŲUc4ۗ;r9%z,;+;@ǐAW97_@ NۿvNd}tP$:˭s?;srtDGq<>Qx'g@Vo JKVG&XHk3'`ڿq{@S~pln"sA1RM޲ONsA>qJ3eH!MPryxW0 Ș)ErWZ~͑#.ΠKI>DIqĆ6#p ${hjղ'N8.N>`/ O{14@A޷H&BůW:QL.ym p] rU^cwȇPyP <|c@ 9ugO@ٱ)I=-]Օ-7Hؙ]^kj7+tdؒHRS:c1}OqI5%p\@4L 80>>5phe<%O sOfl p;M$Q < 2`. \Lz YN]p#`zORo`]Q/6; xuaDMD}&1WFUۧR4枏#jӖbNjϬfMK"Ȑ˾~GO;{Py -eW!Bߑ%ѹ P*4{[a! 2~ θe9 휂+*K9n#v%>g,ԕ$:&@k'u@%xw$\J Ϟ9>p:2kl63f)ˇ)OX|8dU +s $SbѼP݈k^9 ۚEd|Ku A9vV2A  CI)SbEx ~Nxh[vNN3+S̡Mp׾\g!ag?覮i9 0L)\ e@@`"Y 0f' x =r[X!t`֫_+ XWl{6e +a!SMvL;\ǒE'\3H;)b1mVׂńړ5EXvpu_V 6Ԧ?ɜ)mw51ΦL-&Dmف=~ ?YB L΄ rdzM)""|PPȫu}ÃVD4Effz: C@?Y8 ܟ$k: VSߚ­ FTɷ?d G. 5 М>0.a];ͪ5"/hzxfy@=%@Cr7@hX>Ab|4Pv5Mmf4=SlT i35}ļ)5\)/t&[dLvZ9k:-tș mgJkG1&Y#ʡjiRP ! N[Ua yZÙcsS?΀1fk"/y@Pp3" гl=SXBȀ@Bxu `9y?C;- 'x(niAP^i!S<;M{V6Qw= wuyZyy?z[]mGm !?2FҚ ?ёvMX"=#Vv#nIұXg DZNP4aI)u}F,p`X,MY J"p **0A.n 8 5!Fh$$`~ďrga( |<'x)okp|0Eptq8X˦2 i#]kC^TmY߾_}L!L 070B!Yۖ +/}MԲ2`^hꭨLgj?ɜ*g*C2qb P~ 6#.QA ? Pw ׶\۳ G]hQoV"{g ??}A` `?@s: LKK:'@|9m2ݹ_@ \U$$_7R#^JL\wgtT@V 8-/۷K?9-+;>nUBQ3T+=>%܏"S%g8e\ӯceV|cL}tt:r' V\G ,{+}'Ir !Mt("@1h> vhd޴t C=͔MN87mnJ('@6 `W:,!,7֬'E%>> q@ */C.H1&G`#Op+ MRDOy1e$M 7ujnDW7\DY kuP?K}t?v^YdDILƂ9XSր:<$e OggSbh 65@D0>>~ t8P',4VNR 4xnb:]9O>~&Ԫ42 #Q@f@بȹN! ƛ-&M0R9"vjfEyhF5m- Tb]FUDqaXS5b&9@4t2z~5x4tXܥ` I/3? u)]S]"^zao4^*h@ Pl $@\C@2HdoSד: [S;|QphJUh H l#t z `Zh=f47Z`7'#@շ'3@ח~.c= Ţl Ҷg,>Z]i4MY:6muS}6*d 9b)͌?Ra1{s+o"9!A$9vP.a[F 8\~ Eθ$SoSi3O052rv9_~4u%?. @2Z=:J]x2}[bY7uxhfds F;m{nʳB<usy\1*]Jˍru"-%ۢ_\s߫0Nluàh*ah*V \Ӻ_b eRkp`M@g|}Y 6hH~7-t*~=bsn9Iji ds?րQ3u- ɄzUlWϙt{~;Er_mC ሇc 8g=mZ rXF zV7lc7d/ xSsN-foK TXzNKywΕ;f )Q~[v+Sgbs 1L8 "A6r,6n 8dmWփC_Tݗ `qiϷNA1Qfvtdp)2{]:':.R&on?;svӬz}yT"H6Q?dݤ@`oӺXМW^Z+o b_i=vd+XS/ZPdP_|_fԺ$׎S]}5]TLmx7㨇W%ho\z=;Ꞣ𙵝) Bd M^PP:(X0K %*hGh(G0^ʐ[];0"<䗖~"7g@Y,Ns8 @Q>R K_@!R-~?)[jߟVk:>Y^_'}<3ڋ&'zE%oVBl1DiS܅vT^Z\5+gZv0G e &$Z ĊKb Jr9 6kt{Ds ~MԢZ6K7>"EY(3麭JRp}%݆ pHzlS xƎ`FH@{$/>@; = `-^z s 6,[#,V"yǾsY ^DT9fִ\q듙M3+2 5LI$KFcr fKY4wI/t$ ~pHdLW~qO# lU\94 Th.`Sxc/3@x:C5R? )"+G/k V-E/{Qt E޳رWNOT)QvD,bR,'OhDYkg ,1&0p@p^`dNC|iݩxQph]!)D? BzW4hu QYF"mkE ~?S6A@Ϟp-q7r|O-/_Pb{œm?qW h5I{E²ƔsSQzC./Z+ZdUrr5w ҵyLt8nA!89!@^uxhd|7&i Onvu6DVt±Ok^Dok lL0Eq S}׈o7Nc ԷBxv@O vE ,sJ>폫Am,ѢjhҙVvzW:i"^S),B&)rb9P,$51 C=[Ȁ`C@j6pnAqM_6Y'7wR΀l0E{|"N`luMDB_(PE .w+BQ6FHCwTxS̤X%]KgtxR^AB]4@ y((MppmyFca%}nKiiI|Y3٢1;TIYܜyh_) !Nof{:1ϒ)Ծ &Ҡ<4b(p9Tdۨ9"2W:>ڞ%jgq;>4l[B 6O}5N9bZkd>-2ؖIan>rdj9w\[JGY6)kɕfd ;z:/g628hwۆ*6o^m* ZL:U +3/ck)_0*@+Qc-kr w4Jy2*o D25j/ScGH?-v P{z@ 0;`u[?7']д{ SFݧđFv 7rE"s"ԯKD-PԘgi[Vi(rDK[jM;Ƙu@]MOggS@hX)<>3/.022/>:..115/@>A;A0e>*0\O}IVpsD&OeΤ6X7.8~MM9Ed @  m&f 3~C@@`EXoqAd>~WAַ@ #  11W?x2h•W~כ#޷ʭc5ɩ~@30F&f|gDH`&. U"MP B} 0.u#'UqɜX" ?Zr|.n\.LK%b &UGаpw ~OVP3b8qލ ^"iE}X;G?6;>[2{-:&M"ʙ[S7<(d*BFϚu/r95ɕ-c`#˴`v1E})|3Wq\IN%9,@#M{m0Eo֩4Ad?L)4smSE  !g0ZH{ac+';%1qKgZ6j sԝ@^:L=6z˻=L}Ju}yN$z'G\SMG1333zv|/[ӌfTPF;.B.P􌝮^ J0&Y"ń_P_7ڋk( MjQ3Xbwk8))3\?zSg{K>@k^ǚQ 85raXB}[㼁{@_pNu_Лhb #>7`@y.^՚5yIͲ%HV`'8AW;W|UKmyUm+c;ि!YX&j;Q|PA((krH6r6E)=|L3,IZ6 >i%*I !;\++0&dS-G jR5TcmBD&-i_qxpvt)cU!lO$M^&An;0KWmلxng5Y>[_r;;&]KfL>sj+1oRZ=M@'uDpHhhx|@F-q\l۬ T|7"?\f<[H"אuhHyJYVDl=֓}6/OcdK$|+u}j<19&qϿxgfx*e6=_*wy&yt>~5N@3f@C^@Nw8N9/ <$r1eyRf.sbvy>5G{@+?>t}=_ M{󚜌F8.w>t&~6n{q*;4b3.|StKрadI euO`ǁΩMO?zK*#u00(5`#XD 4X]y4SUs(p'g{3baV}Z;1aʧLkޱdI蒊Fl6Fpioċefs}Ddn3)qlݨo-w's3~6|j?b,|Uy~C2TDŽ'T]/)}RQ_9{ 8u.L 7'6dm|ԟ"1^w|YZvY_w 6Zf-dmQ֗G?cՋ݀Lų"0ɏ>J/ZgXo|7lȣbm}Ee~!͑2⎡Kt?DKC6֜8dMܷcxb3Eԝ4{Ӹjfϧ׸GϮuS mBkkQy\Y/}eߌ#m,),u`+3OԼQw;E*jvޙx3iR$K*~ wl!p[`i4y) 8g|}ԿM'zۛr᫽I%7x! l"}اrȼaޡj&̸|Z/"z) ߀ =ATʶt(w9=)dž1n^¾x͕l۠g9!P)SQ?g'B:Hfe$"_L=຺ȼg;뎜h~v,dyH1 피Z /\N=\czzPWF )Dɟ]>kw>礶jbD]d}F-{.?/+.4i~ٷ -L7/d ]^̽tn͐FrT9iT5Ǐ_:tQs}\]?m]a+/!uڠvX CE^lޞqҹde6V!6E7# h>h@\yo0S(ֵޚy;wK쳿 ;ʑ.n.Rg:5 3౮ syOTY@?y~=Rq44X{dԬ[c/xt!Ch41Q%:rnz\E׀ )7ß:`hHpP)SvfBqZ"DLpYMpIHO>̩]&<$dn?b6X詯/\r ϑ.DQ}x5uho?πH2/?jyPAi x%C[xM${d1B):c,s,]TYLa崷f#`X _IzQ[O Zу3PizKw8L$~d_wR,;f̹eh`>qFԥOO-M( Avg!%< O_\'h ܙ`|#vcOUy/ Vï۝/ l'QpL/cwڊTrv!zibh0n]z=+ SfnYo1ʱ%Ȍ locӅ]Y,JΠF*]M%A%Fs`OggSh\ 0J@~D+.yƘS_.@~_֕$p2EEt6 !L)$@rژ_ d ɋ; E1Vׂ_>+)}!(@Y3Ls%[㮾~i^粘47ڶ̏Ʋޙb&W([JOˈ)$,;״ҭ~qD&-7p39ce _^MdȌ[fISpDrSLж>@32]+yc ')$=0G낉gL"̾m{ X9@tdStF(Ȳ`^slI}4$n6~xҾ?=Q Ͽ+#-..񞎕F/BMI/ {àpJG ZS;0 pT D:.ʰ`^ͩuOԯ#`CQـoryp%*  ]@PFH֧K@t!ٶ.1;P.׏I,7lܜ9|ͽXófC`}42Xfvis\\ј?Ot%k%#_nŕ"h)sF|%wnoUHr!9%hw>h;u8AEe>obNBn" i* RNh'{:&G@q߇7VNHGr5 wD7 Ə|?hwY~#c@ A&IT<рW#"\Y}4}_̒\5uiLU2vFw07.5uP(w\ τO$rІRx>upd2apy.:Lͨ)Q c@s@/oBC7m-,{V0w=V@3 E̓jϧ~/tI1O@?3‹T8Us:Vjca|0< o]-JZ.\=]}Ȯ%տ J {Hr5Pz,a.Au>r@" s>? ^ 6pd"ֿ)Xʶp8 t)s?ZF}WEPPMߟ^3'@BF凴gL>Ưnr_~) #hyC#O3A@kMKNO{')mFU^S"JzE)JU͊?VetKmhx4 !'9:I65XDIB'P"8T ͮ(A (~ xnM!Yh[qa?t'Q18 wt/4S*$O(O0iR* 3$@]\Y.Z]X~CSZPpXis_ <:O0]ݷ^R iͮ4%^{.faev*1<֧&b5eMf3S4"YcȱTN,X{jm+{;@9MHxt''mpc?NO2b|+,hĄcp< t@m|z (?k̋T=7 `g@"v^3 |2'j'X9|8-*YruuYMQ~c7x&&7̼&c}W-0ΑaкR`7KM7D8#id `MJf \pt8#HbNh6 p5*8S h.SbCTkk͛?07K`}Е$:'CoO:؃ؗ'e;S2j%ɒlmUof_!!MH}EHH]ZJɗE% : J#Hh F@tۤ=6wrad$W]omS 7e^:k TC^N2=ccT&Wzv.8oy}spI2 0 ߿<888[dݑV ڶC)toXcӁ"GniKf?7Nz]kΌӻGkm~3v(w?̭S:j?@dgQowLiZ b18szIIqU޵|-5|UgixW}i֩ju"峥{$j+(s߶ L̪AZ^ ]&A.du{|iI{2ϛ֥iSr`>-ڏI1":HY9_$jH)!`Lx@PFkۡ 7N|MP\[xugf^eG1&mH7~_̻wYOmޖ nZIyE +&\x Xdf,{׀sI\HР!Y' &) ~*NP?Ps}LO1@1~׉3 kS%q?:rO TAڵfj 2~ׯk_};![IZ I79 o]pC1Lr0QS&gSh1rD u핣M:ebQS.@D3?S g{ox!J f NsĬѥSd}8E V· Nam*n g^aEߍ.G84ɍ}/Iҙ>_G?{Rr:K'[:DB e=!B: .D ?&Ab'v `I ʬ "Sc>JC-n:Ǥ_vNl}=,X` ȮGկ<+*$u7g|W n[ Y8:uC:*;'µ!"L=sNo^%9{Toyܱf܅Z'X7bPP5-X0\_&NB .kr6>2ۣP+x&nU/-|g1@)vPaxR+I@S @B;/B2hq;۲ϴ}d-y&Кv ~q> bܺ p .A','LKScmZyw Zp~ӱvkjs.nTyN?K:zwKnvXsV{yW tV!HhTۊ0,81^lh4Ax=ߌuiJ_siv6>{*ߴܛ"@>$a8 :=k+hWr{syXP-'TS6Řܯq"M4g>CRIihrW^}Y:l`868%L,#5s}i=J !jGoI@Rf~h 9ߢeScCC_v0-΀&opitN_qEoQHT3<@W瓫rׇ{pgղi?3=?7뾼@iLUᅘ8s5nTGջ<)^q)[R5J>8z6Fe娶kW+H#08Ba|)`V(ƝW8oMlLSuxRK*~~1NONRqН9+(D?֧\@ jw@YH>JȽx{Iq] HS,}K ܿy|^7 /'p} wp,)E~} [w"ZE1gvKV6K֔uz2Ućp^۹B&5uS*$i! 6e]֘`hףC)p,*mi ^8O-C| ,MF83?3ի=@0V[< 4vl K(Lg mCC _ nq=OPv}ߦA]k>1+ųC`%X'7Mg\LsIO湞ȸ&"T)I.{Ԉ0x.Y-R S4 dNZo`2p,ϰ ƕ6+ Jfb > ~xh+ߴNu^F:E&&7Kb:rD|, hNUo&C@s@yrSHj/Riyٝr܏N`>9@r{? O!gG\d #!;(¤kНfފNjj%)p&ICcF{[_U$HN+l]nJX_ۼ9تi!]\n e ,y fz!G N̈́2jg[lğAz>C۷ '4uI(Շ2].ʌgjԋ"|*v)k+@3h@BokǿRЛ.5 x b<" 6.̔&IWct%)G-y+U4Ks.$#Ar&cveP`D mϯBd.8t@N>0ɜ?ś%= [Ae3yp mˏ9Owy> B0>a&SK-{D\~#ߌ76KqYl7v..咔%+ d @+q0 ֔MH 4`Ln?uKPt.z1?j.0 x2?/rWJQޒhiTnBi69K$ Pzx1~ dn4ןFOO@l~b#@Q(񐤼! }<)Zٕ=K=dj~c{=.,%[;g"ڐjBnUʽc$c]%k*:4z(L ~X[7ht5\d[Bb*@~kJSb#cCd[ʾ<;퟼8"g IݣfW|+\W/-eݨ97fǪv^s Ѷ9nRӅY,XT[Gʶ^go2vYyڱ3=ҍoYr@$d[?ʺC [3?}mK?2}dqzV~Xb]R y[˵ffOD6f n7xϘ7Zis߿ky^kgv E 8/B2M SΙx|IcS hCH_@$Yψ MlZSQ*.kRCeMq6t50/*I9?LO ߏ'/_ NӠvɗf=z;e將rta,* s!-&| K 阐D3mrLW9z=^s2ӄUSlի vLVoOIB4r\M(hϰdnH{y[& 3 lUD-[ZUa]`g 0?g8)(k!hlznN'},CӀ8iPn=Tkld6c;$Bd%멨F97fr|Q[iI߆]PhPD=HP!IrVB Xxw5B3bHJC? _+ot Ss&5:'@rjvkͪUd߫aЏO p:r"UQ< Kg XXG` k } 1U۟!$:K46 uFxS$5-x,aЯzIbIJF'~&ǖLc z tD2N IĠX6lu?[cw jfuIs>(y%\!f[B)OggSVhI,+$1/.//2?>;.0/22=; \CVm5y(UǕhrz=n^lۢnجN!)ҾNe^W) οSlۈn~˙0n7*Bu)=Ʋ 1dŅj&=[i0Z7kQ.:l}b5Yw9+dݤMwݢYZ#YPjX|+:a| qzqWd]O"֓OgMK˟L7W=U[ rJ+Lexa,Lm#b0˿.ǧkI' !rs[Gres[׵?WdbW7pP~*{g-KJr8nf)O|QsXWFdE]Y C,ŞO;.9/MszNrx׶űc#Kk f4r—xӛ Uw:Z Oa?2X ? MbPS vI&_ɠJՒ Gw(L"DȞC- Sy dZ7@2roGA\{ MxyƊ #Oώ27\~Mgw7{uȶ4: ?CJPs'S0jDַ`U:0o쟔 (&45%s'*բ4h{e >SZUj^6-/-d}{;9i ;`_ހ5; jf7O{P`}RxxUp"GD妩TVժ>O-h^r蹞bo|D诼S[.!V,TxóeyEvےrYZG 6 Fp[`~,Q /Laf"Wn7'Oho;hyNӋ P[8 ]{9?]~l?{{<С]1 ~lVE^׀ߕW Wenp]dp}N<;t1LWʪ5昘HUsϹkQi^bMwM,Iof] \!әU\e?f ;&j ԛ|qf2)Q脰Oc[pɾ>꿇OLḤSD= O#!܎o7{7 @`uGYaJ@3&@(k ߏ|(:0WJʜy|[v"@[6` VbɑL8&nl=,y~MB2 l'$}?=4`_H!iR0V  :#@LY5p\$p&):lEEf@Ml4/NIfbHlU=>+It JWE$B+*5LH3{(nSS?8e?RZs>pasPn3u va6wf[eMRL$k/b U}}t+Jlwť .m*lzf=iV΀%U$1J~u?xiwSawhH*sy}MfJZ ť? ( tۿW)$@c[EVͣ6඀͟t>? qf9˻''~ڃ} X<86 4*[1Op1o k{(o%&ILM[8Fgd)h%XJ)Nke/U&3NÁVd SH1C+=S9d] FQtOzz#C2Pw1΀˷o`%Zc `< P|Gz\ 'sb йנߩ Hз_O岟 ߟ;|ˇ#0y 9΀e}A;mc)hSt뭳]OWs^uNJBE_tf Uyd;! ΪYrd$LqΟ4QԿL"7|~5x -m*]fGdbSik`t`5&/ CN@73B R @ x <~rlSd acO\.yRj=.Nzjv/QլM$)^<# &YgqK+"a8il+ J$P `J=sr)>pDQX wnl L^mz,qeK7$35eЀs} zr4PD+ONU+)&#S|ٯ^4`.X?{;.%p j0O`Nܺs* ӅVuj8g]i`5Ld.{oGS~^˷OEI֫ Xv|)pjsoHNœiζ6i@&C5Ruf%,^Y# w>RjJ\,S,Qbi[dk.uPOggSh'34?@@ 23/14.2@; DD \YVmo6d2c*jP0J\[Yvi1F@3Xfe_y#)5cTgMHF#ƣ wHR\|3MgY_zQ̤vO'NHIiگ'\ݤ㹦 1b&/7P|be5ܸ󭱶6U\']X7*?vY#j[;D(T##qVvL$S?Oaz F\Γ˅]ubnFH?g3}=NFt w0Zə FM 4p<OK])=MGF~7 #aX2  1o^RGë=+V?Z.D$D.ɫ; uAtD[ZW%k!Ik?_Veڢu8߀BF$u;\R\j$uHLj  a ?j2vƭv  a |cu - :w]s"$@R2t.|Ҝ@*>8={HZǞ9rp} }ZsS1˶ ',szd&9֬8?\-[۶I֘h/bfx;MHiq~Puxވ$kI BMGr^j"6`J2.lS!74l02U?tJ*c|=zx}J'OslPyӝհ}]2bxhF70q&3ool n'@lN:pS]Xe{+tv-N4_lqĘ`zv97{q_L[/Onu2+4%Qzt.xU`0!,5%_0Ib Y,hdMe]x·5V~<_埝9k{tG܎񏪓cY\9o>-wBUrּ? h23Ns{7ed=ۺhNz' U9[{XSgA=sbT!Y'3dCܳ`ga=t{ңD|R.v1Z);Z帷TY&0Vmpة"qcҾhj;eg6\]OW׃$Js wrmUcg9Wlۀs oNjF3F?˿DޘX">NxdBA?8e}2&Lӽjet}`uLiЎƊ498eT_/v1J!m_Ljюi}q2iw5﩯_W+Q~NMZupNgYYWOׁIKIvɨ `f_j5SRp?P˿Nn1:mǖ2JTNmu?uRӭSEt2Yl*V )&$k}1 awz$фaB`m!brg.lHX pC޴v*_FtO?LLg8v,? @O]źRМ j@.-PZu0<6}m_/~? @W/!ԏAeZN+đTv}Vy1mHϏ#@Nz  Vo^ ]rn'1uf6ISx5Qdԭ468O$*qC+)=K\p49_ )T7[5M Ť`* 6AZp|l!H.:G p+nl4=ǟWUzmYǎҿ)ӡ~\]?&B (FW~hA'ndvoj9/ey>tn9U/~]QW T%3 ik-sL.1/\϶ax@aAħ%}%kA<g)ʳ)H]=o Kde{} mtt-H{I$ʸ _L\ٰw#T[OxƨK ΫjŊ7&Awa[kJr{oU{#wXTW7V:>Vw q3 R$j<gu̐\Y&m,N^^Q^yz'o3[gͩZ\YB/ݿ?Xϳsqx@S%dy{ZɥmUf?閂 ,c.vpfR$ _jMj9.4(}t%}DRbM2rQއ x;p{x{W s@[ȿo'Jt.s8>}A0A}{)Wtں =SBb-u]hZ2}+ ;WxzzL=.i J#~nLYa酳$0\#&\r.]/vTV:>oEu~#1Ff2ma*g-ρ+I>qڢH' x{UHZg>{HuO$ ˫-@7xX s<_@ @V%lT ;k q(8o'"lcMJJ.@FOK B)~5xnDboՓڭD [u2x0wnLpiJ<3 \]"2UA@ HtykZ%4CkW>1ߣG`yHg:j{hdu!}.~Av(uU.?$ϗ]MtLC훿N$M/l7?VښdlE,e3fXNrAk%hc ``%4,pɄ/Mi71j9l=)t±OH*C)2?zP!$@\ؽ"dҗȖgU.4=x3lL`W^l _ b)`\_ #`#InaKYݗ 缁$RtfٽzLuWJ)p%L;%WΉ;ZÅԺ*#D9 s@)م`̐=la?K*8 @NFx%]R? H]aK\T6A[đ?iQ/-2:6d,;y$<xh<y70=J@NmIjIoHɝbjIN"u_[ҦگnB+mX$KiuFXE)wr@+ {ZEԜ*dW&'ϱ@r9dچmu?l?wSvaV;eK2 L,m |mimr@G^oo뭋4Yk\s#dYz4+0?, w^P[dGF!+@E5O `MM^4yڜ 1t-e n p\dpwc9?smEv:e\YMGd~vb].ېylLÑUr}\Mguݺ {Z{w?b1zTUᕳHy'wWvy0>}{\=ynKFחT;\١mgKu[M1o_qZdlH; lXٵO͞ndm_Q "r熪-d7 Oe.HVFFFTc~bm/]_Ջz`m_( __Khu43jNyʗ勐 i@`:Wح=db<‡}ir>E .ewlv g##suW̕)3G}OԄ0|OL6H?$Ӥ!:j{gid,V am9xJ 1 $!V4$ZH51坁, pÔޡ^ IXI4XR?w- LԔKOgtqMً\FH"~۷yz[*擯n7<Kz:*ytx㔂X@"q*hg1ŝxK& )lssptF1Qv"8#Z`m h!hn1S'bO xH$[ԱDu_LL"F qHh\3w. ^h9~Rto07Zw0`tZIJ83')I~:@>Q^$ 5gхoq?[˷v/  @[S*6?5>T lßGT=[h[&q&/vؕ&?>YkV*:x/@6tKRoHMBB>X]=+,/CV~4NP8\  N)쒅vj֦[-?. e}7HnM'O&@6V2@<0\B$}^*:}~=?$^iw]6pH@1 y#8HA^wӭ֚6+}Qn̋sKf}]ښHbوYJM!;kA]2vŻR W"Ĩ^KJN+8 NhLnuRmf?u%}Jz*:~]AwRAA `ܞs1jBOggS@ h;z{.?7.0,/2//A> 010101/A=D02413B=MtgN)Ӻ 9`(x^R%p`/hYX,$WLs;xsPl\`->i~?+X~gB(*3Tdb?y}|xjRi꿦KUk+m1tݷkd l440 w+f:*ic0s@s/;E+W3ϯ#Rmu / ?8pqnБkm4a4sUUN`NH(Y/NWU)9zs2߹%ݹ 0=X}x D2C@WJ)# y(_si;c޳fyԝv*UsÐ=Wr9׸mr?8-Loy"}LZ! <=pj({hM&AFXqK A\ݤ}K JzP???V~y2s/3ߑ/gd?Pk+q*0ѿqgk32$͙O3 \V"~o::E˜N F-U]d'Q֣ L'`lrD]oK.**Fhĩ+bd՟9]Q VrWxhOv#"MRHimJ|H~g`J V$ [%glmx t2z>L:*'gϤH#S0m]U_tmыᶕ5=` *7ʐ=+Bګ'Kue`J%n?E3۽0Bռ*H_@Ѻs$7FlـO t=-&S}yoI{J.N)7Q d]w+g^?d &fl%r};P~7TSt݌WؾQS^j(Ez~.t=^5m?+۶TIȺF>Ͻv|UJvh%ϔ}ܶl>dguЙzZ{H[dCGDa8Փ="l݀}Fn>+MEǡ>z4ݦg* .+׍Z5lO^ }h5آxC~I\Yʵźӵr}<6.4dȠNERd—T}^ }YH{=R*>vk}ݺHSUu32# `N%ٛ`&KcަOhNֆ&~_6 LTt 5گĠp7@"hYߖDu7lp f'&ق]  sy`<nvy4^G#5a · Z,U].m6WA*1Í j) \LDjRkKvGܑW(a$apڀ5l&P2# 16cSbwoiÕ.tSMy±O^c4^k5{_4zP[ػh&XxhZ"}v<8ܗπ]By5!ǗW3?~3 +ٶֳV#h&'#$E"Td5+lmRҖ@mE* 1F$Z)1I"!s$b0d]?$m?z"JUխѧx?eR4 lۤG ʺߛoMPKe-T6q}}YBg܆;T]mN UOkiz>$!n=v\kVa-d]/W˃! {ۀ7zΛeP*Y\YJwYߏ UV4g exszqg_sS;;lۤCϺ/h/JV{=?ħo+XXx)O!l Yvv`ߝ\cjJVڋ}9Y_H.s_;6P\[?{"CcbFD墋)&oH76Sw&+N-y&dہЎ^[աq̐h6?׾)C,WerGӌ,QBlUճmRlݑl G݇uo 8>$S'N/c,[tm dRxsU_k&O+Sd[Bujv$W?+'O:N]5T}F&d]/փsOmYkrağ<)z L&2y1T[u]g陡uX?}ݢӪ:U|jlۤc6z{ PT }#*;F\Y}^~e3T=б!(9L].?@շ[ଋȗwRt_ǻmם43dj&Ws=Keoۧ2JM畿ǫl?RviaʐQZ+4/k \[)1me[d#` +ϋG[փB3Rw?tHq:u/mFmQ.Ž_rsUj?@ߞFRf_<=]rVzHC>sfr֕{cndqDzq3x'T=|@6>7ЋgrR'IvK`mTh^ڴجmZx,K[VSz18%90M˖v+$ NO˅v,B0& Cq^uiWݬS pM"Uo֩>@_GDEa^fw[v vB}4vTZhU{ irb`=yo)Oz7N/DC}G.&+p[g)8EӦUBzzKF5s |jf %z)_C&<ߟ ,6ITv vd>5`LHW-`1M\`MQqNdzy%?K{WIssio]x hX^npe`mvmuJ??:7wdGU}@ǞQQt n?Iέ/sL]1>7*3z]+V9ӫFz6fK,xvrKN,kRpI0QS3ڍxg›,Mr{Nl5hK ?oqw+`VHQ}n_@j_m)ҁed6ww@gZo4IPVp>X~u <.M=Q 5\RcIDݟQ)Q##j;Rj3K[6CVk'2uKvA3 W):$\heR4wА. +sOggSFh3=: 1.,0.E< p_򛴗/v#3j]W  &y±OH>aբ!) sHt ps X>?>( h-cV!;@m<뼼 b@1i4ihjYҶ zut窪7MpxK# kO%}]qK˃ *h@ 9vTĨTs֐IVԤ|KXZyN`]!͒dai;@w`t(Oi^Nk=(G4Mh˜, .} Ouf|jm۹.f<|`>S-c磽\`קBn}7U|hIt_OU~1EF"u-HIhqU5r"beVOB`|qX))gK#gxdPcMٹpxdsDm;÷569N1BμN_{k];nҌ3MO\_$LY [bAuSD67"D5:>иb[ޓ{B_##Wl-ϧtX8+4VMD`8@]o8|Ԣ)*xBםJʚˎhR闖XZÆ dv<:f9XM`~~{l(,w!8>S8 ?Y7H顦Ŗ[K5f ޝkl|+9j5ݩ͸;ܠ镣Q3ɢFg 5qE0 dbAc 2i˜ >pl?7em~=JMN_- pvx ,*%\!Nް(0@+4z Ul[?2=/π{noGbVHC G%Z"2OMEփh.d[73\-җsv$rțKۂbRI1 qOoJOMdJ_ (xB/mş2HJ ,OOQ?):r,eƒ{T߉u?@D?x3nS4u^'@[֘G 3}s'⺺IZ^3w\22eDD85<;%^K'qz=Z~\^}G.E ?L /Ń:l]K`zLLID6M-]e h׺c!=F{meS5KWA]/ $+|{Z( HƃBE Xq}(65\@l>bUո8}Lps3 E!=y *d[?'d iyW٫@hN9^v= [e̬|3WlIȶI#mX=Yse;G_; )a'd_cgY6WK}Ah22 \d]/}d݅M[\HrUjy,AOϼ*z;η4p?TG}O GҏÏl։E]AV>0μ=Jw14)ȫgeDHe]SdݤzT[*o^{dj@#Xme?o\<rhGZs>RMzhIX֛ʜPks1CQ,'x5hr;%:a?*%H\ͥ04ki?W4TT.qje{n1AKC38i=F]#a 0h}X \ lfgJpPv)c 9?fJ 4Sޑ|Țyf p`ļAEOP # @ɥ/r  aOOzIuO@yi \wn>fEFz}nMM&ZFW&[I٤zv=5&Q˔#9zK S9b{3}dvq&t jAk 5 Z4KU2o/p^Kt?߻2~H'b q@ky҈!$is6_A;߀\5&KAۺmҨu5풚32qz~<ڬ#?ݨű}C\~eJ!#6eN\~^>T`\(l mfA!9EJH2INI eh&nXoSŕ,7~:䋾V,/7Wm@> s6TđTpca8/-vqc~W_}5;o֬ Z.6WRvO.Ts{%bVmዹ2NrLq J t)6p2)Br`Hj:WÍ9E?6ŗXPԦ.%Z±O=H(MF%l=gW_9߀a _{&V#I?VKe+2 E¶egP""v#,*Oտo.TW.6 }i=!VbLn\b9?b(q{;~u? AE%,"7VT6> x&/g[Zd 'PYհII脰EW~<#7 ހ灡@hw%ܭl.~U$>Z +\-}hx'iJ,awˮX{C&<7=7ԅɢ:2*`;\IsSny).)女6yyP3J~U(R?Z0}p&k"&3M$.#`LYd:i#g4(dp8A Nx 9rN*8>jdpn4+Bb`ږ{t"{=Ù[H.4 Ig"й+@=4>Ҽ!<;> |X@r~!t懖)^I4I9hqtlڹTr5ouWP&Z\6Xh]cߥ;ɏdc$P1,@sX!20zNb) :~ xnJX~2XRmx ?ig@}n-a`z`Vi^PXgA)@A 0{bݒKGtjease)~l'I!0KC=ݕ즺Kezyf?Z߲*qGGJRcI٭Tԭt}xq5ME|,5Np|#dQ ~TO~ vl%xDuNM&?twƕ`]R.05]!yB@PsqvN sL[BCO>P|e:qe !~)` ?͘4ܼ9 x}=0R5 ΨoĭBIF:&O]n?&:q`:'N  R-X?j/AF)Sz鸜b & >Xݼ=Op#UVuyhn#󺲰{iI,L{{m;{y=+%+ԉH^r~RU$M-w&KəܖJ0Ss%X1P`M Ĵ3\I~toY&8FZɡMBN%Bd ZM@ƦMuˍzMb X /8jlX ADzJWx$ IЋǽN|X-={OO49BlWɜki9S۾ב8|by5GMw**Ӧ6`7tuH5\ c6!`).uhHtH8&B Jֲ;BH NpLʙYc uyIjb·uJDEpG ż>4 ,kS5 DH"]6~~Z=}KAmtɿ0)lmo7r@lR&;aθ(h[ľ7˵bVDf"sa4㬋Pgdfc.O_;=xf  xdE\BIF+}M̉SxS{pup^Zp?{@@8 jҼG_<BȂ~ ǕyO|3Ӿ\^ay_xxF EMz]X~~(![@9"ʍU3/1)bWVN3a3zc\5?M*&8A%FU`:|c[sPa:>\([ %X5~N7>6V!7& x5NK'ux4{}x 4D &y pH77{0;0ŨE% p?>6 aSnS B p$wa lXA?l{7tcP^fi p= ~⥳b om UUYQ^W굾IG_NWߜ贆<$l!x  Me XaĒ0%hWP`~`L%j]'nHda =Nxx\0{At p$@sZ;k.@w Ұ[b Pc9z 54ۏ@djkuvg`ٟWmpmR=ƉҐJߕL=Ζ%1pDtӳ~Tk{= C; rP^¹Y-_m thTL9^uo1ӮxUwM^,S'̀ @B &B{ `i'+{) c,Q&58@?:/S_mphx> ~B3}Tzn8<5`szݦ,u󸘠ǜnXZuR2v R*)R霱<| >sI^Kw ^.qp|'0+qMxgȧPءķ`ak[Y??Ԛ+DO9uP7ze+1-Ky%7.<c i4?IXq@<{̉=y7)3ԍU>'Vl)b&]d}%vc2>sg>"Z] j)Jҫ_R,a ҷjudF\oMSu/@hV؅swv ul̘K-،xHdܪ/K >nxNKbbP +<5B ABҷ`y ]π|~s#}<ؗ4<zbJwIibʎϸRI8SICۙuԡ p4f$NF*^rTN,|jql ' sF5d%MuBJDĿd|X(eNt±p*f@eC!"4?@÷S!ōnx KU xoSx@l'`%@G>Q+ЧMKW݆W˼)V&*X {xt1{`Sj#Wl=Oo-ޤڑm:+J_˗htj$ѫGx! ֠|rXPؑ %:H)_Y [du-.;p :Rr 5ƏT]/6Y7{`cvr*I_K -,-Sq\C D߶?cqA*!q|q|k;<¸2d_Ⱥj?acUl}+]v4'?4S-0/[7Ф)*$-cݹ/W:Vj-C"tzt}aӊzo_; !˱)R<2<i:@it OQ#mSp?g$ě@<Ƿ"^˭@_{l6lnwHd(j@q^ū=?Jwvv^9,6W*|eɡOr^y(DũWjyyj'XpDVH7RqIOggSh_ ?@? O:O֩*n7Q͘@0sO I'?z& YC\NEw~I@8{Pe@C<w`*$ ppmOO@\=zJJ3M܍${Cm}[]k<7=SB֒[f)lCհMax8RŸ2/},k+XI h0"*NxI6;; xҤ($ϱW2t hwj=8L,A @P36jv!BJ!y CVXɤs;s[_[_\oks?*Wn c:]zeஃ`\ /*s `L"/9{n4—p*ą^LMA O];@ahqH4'M2cri_= `uY%o`N@˕ :Q ZO o0=fڂ5u#7=JǤ5ٱȝEV/5ݝJ_VuCBӳWmrfO:Y%yv!B sQɡ9*. pta?%s  t[+\1"a9klj 3TP1.6]AY \. Pt7F䒙-~y ȎÿN\Z?t<r',&w;xl]yݞiٛJѸHeg8[j׻&*B⍱_"Ul%e5K{`/6@qSp1G x/y\ݩF[qJ8E% :a?[lB'zE׀Xb7@ʯl$&׺b Pdw+=`m( Y] !O-WUog,nCs5P.LAV^5[7 hEUž !۶,,4ȔRT 5Y!w*v{A/Alyg8BCb Nr̘$ocuzU΀ܻ Lt) ?Z3` x5r0Ω db\Ih~s`3}|7 x<don?|l?G[)Mڄڮ?[I4dE2hy4M%DmYgg4bR+#|= JAQұ z3CTvGsj}|hD`*Ψ 7Vh,Sb~|/V)~H7s*v; @.@Bc>gR&w谛H-f_G8萚!Cmtzio]":,xd|sW5XxRVX~ p?n.~*$d4GkYm>o1LjĻDhw'Dwej iFDKg8eH*@-` E7Q!*6$ 8JlߕmWui/S=ݗv2Eg(w4O i3ҫd׬JmT9 /dܐ}ą[Er{1aݟ}QǏSzdݍaٷ}[Q 6?z1Ť ˓QX,B<ɐacai.kq|n:CYRp*KO0"cfַ5]sh9f_TN[{>M%u$c') Ke@ˤb>g0_s]>o،x`ܯܷ" 9o{O@ L: ,lh/o5K\+w=q:vܫg5yW{pD1`5N[0_? W9n]&P8#8@@,r4d1~ Đ/nTIWa! GpG(8Y>ӊ&:gJ]¶L,4Z 58@)eH<Q#bwL R3~c_lC< I+'S(#}vXij.%OO 8K iL!EAķVX ޏ3/dC[=w9?%ci L01ÁNYbs%zcOnzDL:jkYrTdFL^ w(NjRclQn#/_ u9 F3@I%~|j'\Q9S˪ޅj^MsO}@are me++)RGTF (B`FHZl-`Itg7 2\(y ~碫cFy33˱%-Yc8hl FF,.WY6n9ˢ[Y0NדK&.QXc(s]UUpMD $/Ah u|ԢZ&Tmg4N7=N6pWzZTHc$Q*Ԧ[nЫ13oHȻV JWt )Ofw4.s49 puT%mJG;_\b="siJ"9kܭٮr9+#]}n57{ĒC]OZ%mpҜ$15!VP.%9t_X>h͠ʸluZ M Oe5@.oyP?hHt±- 4H &w^ @:m@7KHղ{ psȧoGt~ӯkCtf߼N qr3PZs)@µl\Lm4Wz+eE*y%Ъ:l* Wu'FCvƢ>B'֗ -ID6p Y٠Xq- S Ήp1Ί"$e1~5xZaUo"x[^ +$x2 㿵 u]PB]3/vVAôz0jD _r>k&a'@qVߕ'2s$'*C9l?OggS@ hW!2??? 2053/4@AC tLKi9fT6p2B| p25`-| TMVn+Oj?DHg{fO^Ly@x9ȣ 'r,zA ]=$@tcId)6[Plz0c^:Yri_O'3^>I?C:BM9@hVt"EO#0ˁKaL$z  `D&)tTm6GlY;[~T\\Oaj:]RP\ *R:Y-rJHTPl@j G8Jՙlg:+ @^6=ˬ~7suWd]ΤQVV(dJc(E'MQ۠id윬-쟰1Z.%L<Y*Pמ3չF @dhklipk%8"~pj/ЪUodc~rh4hh z 0. /'>rvg lW^b `uqCl8jНn9@ڋ?Y$?-@ X?lYA!t5Ǩ\"mgw bۿq3v*)8܅v"$1D,VK"t5RpBR85 ~ lnNv+81ˆW=(o/ҕ(<DZO"@A5P:rw@. ֌@:]>V bq@l|f4UCp?|uԲ-pd!ɦGh61 F%q~&-;kRkEf R%* p*9{sP8ڰV7pyք@ϝ | }YDh6}\_{ J#J^Pچiz羓e^9}iT+Mվoi$&ĬYsK1Wy\ x\ĄKڿ7ǁ"!Cw y)y,%,pH 5\]Q>>X'2^>~@ʙr.!~>frc+YI{&dݳXtxNbz~OVz|`|AuS:6SƱ1&z>ݑxT]Hغ`J9I&JV_MMNnmg{G-:kql]9:d]?{DEqũ8uv]l3v׊kyfj4`,Ҫrk$3Mdٛ_a|'@yM%R>ͥU ^X5hUawx=h_MlMx1yM3]>)EbV7*sR̹!97( b*hMW3=~M/ kկ۹?' I- /S+̐^f>;~FCsXpFdKJ(qhK\3n*N`hM2Oej731nLfqr^L)I d=$$ s0d# P[ﹳ{Մh?W'@@@X"[c@pSmVoR>:l6ӭ eF=4I _*#\bnrh:*{y/[ÃI!qBu2wަHu$KN@p pBFN866c"R)8)SN F>0볋4$ZR4mi+MVrg;ͪu]0Z=W6qsш8jo}`{Y'XK@{k ̗/?y'ϏX'Dd]kOIF rozH/άc1{p1 Q心pYka`x3ͦLPW _X%xk+U4iYBb/Ade1lPyWQN8nOYݳ2ZmH0duEW'T=ttn@r5[) *Z-^wWG\[c}77wUROM ϣx/}f}{id7W[q߿Iu`ov_c~bAW%J:zgD[n@QuLg O&NLzf HӶd[u8TߌfR ??-b~wO xEjŒ%"u4l”p֍׾,mo \Q}cܢ+zWۻΜ{dۡ;`Dxc!V%Y]\F<)жI:W#>|S tdž_&eP9^c\ Ow3<ɵk9q%?UZX+t]*~%1NStO:;r[gz}7`JS)]Y se*%"TʺЪټFĝ-\vf mӻjx8zd he"WOv|_{r\wAg@쩺Qd]::(x6 +i#MFrd91ۼuB`wo̸1K \tƛNAF됖CQq M!L S|lHYnV*8!&Kth @y 0n{$f) ,t? -$*aX r`?&hvS4(.۠2[brn&`ɷ"qAMb4"CU⫕+CsͭWL _}lV~-B4ׁJ[ieJpa}UP>xI+V QIm4%T\;Gqu1|)9M^ a|}S>SXlv3|W >I\gu:. 9@e`{K?͒2e.ݫ.{sh$R2TD2S^\zص/Y/t@XL W:)OBqXH%2rIXr- x'n)nzK"3js?+&JpC%Z@  I[P'~RɁ{ !y7hpN0sCr}@X=K<rl\K}6Ek݋J=RZ-9QAɜѯFX%(%GP])hFgN*l8W&ܼrc@X@ 9\V3p̄/MlF)Fا2jK׿+?VM3}L`DEUx8XtP:D/m8z7[@۽@{[|& ps!h n6?@x79n=9`멇:?QBUX+ Z%T[Z1&i)wgq c8.%9(&~;HΝs`9@EC.)nE~5p,/զׁiT.n "/ ?fFg0,#$HVOB5䲻 3rq ~2΋`US 9+?5g;[zmañ '[2۩w Aܝ U;g~d2"$;m3ɤ&0=G˘ K,a@ ه:Z8G{OggSLh]1@BxL'T^F8XS>j|bۯf|XeTtZ? 55] ߦ?]Ԭ_by5 n/?7@7~<Lw+g;M_HɍyByU3Y˞p3>(+d$$͔qHTln$L0}T ߐ 3Hw^RL[`TG\rp9.8T mO_4bMz0DfC6 9N8`jR-)±O IKD%$@u7xN/tv{Gy~$YyO_ /3`oj[ޕ(X%Ϡ*V7ue!߉ X $'*(3A`f#~`Iݡ%_<|kę^VBL) c V-5pw(O |-Jd x<G@Jhͫ}9ްS+,/@$!Vy#Ȩ=|R^ڰ{ CnuW^RQ6;jC%Ҳ\(OXV'׊ߜktP%KVHA q`9D`KC&x< N`HOuRx&ndN DݵLSWBi9 >$]*~Ǭ @.!}gfPwhfHz{f-tx н _0x06ׯo?y. nOWM%rs7"c 4h w"'V#a!W^^TRٜ~ 5@4@^"\bp}8kIpwYSE v# _~fS NU? dgxϔKtv\^)(5e}D" &bs|p8 7c֯]1 yXxY<mx#_ dq\tqSs3bNOҵ±1Ǐj#iDV>.ۥԲ8q)R,
:_e X%"T `98,\Y&?F~9s]m67~Y{{zMpըs6d[?ʶR<2}X o3U dF.Hn=YSk4Jm>kxc)kd*_Y7{{ڏq56J‚um +^?G[xy>Z=7ᷙq a`uKżϯe9U}P79\\G`'HK*I?(?'Ґ(OoUQ蛋>vߐhtP8M8Ǻ~*: 4s ա[C{LQu4z$O iuE-۸ūo R"~+#zVKD|rYH tthY$+iN$IAͤ%8"F]>phLFuүа&) _Tk@O?&zř PKfXt1S|1;-z`}})})^uW_ހgoB{cws#8_hۜOXͼz;+c:Wd\e 5-&ErS&;BRpٷ.ͬ~Ra]"i|'ۣQꭴ&'ߌBp&hFԿ:w'S%%l:5_l" m@~!s"nȈcgt<V,__ɽrr;K,ydp"ˏ?,2Aؒ&E٘mi?\r+I)WF[|{nZ_*A-m^-H6b @:VV i5h|ՌPbH׺ٯ<Rtxn eC0tqiBR?6(n@˯f XG,h}|)l[tX./=ijg$mϾdL,N5TFgrh]9$'پU@v)+)qsNS'RN=P(g;#@~ vpD2| /*}d`ժxL q?ZC=CQ@/j@^+<,Sxd VU%jfNl.[gt9I^`Waֽz V} RBC6HXArY=~b.6rS aem)x4@􄀗VpɶǬTay Fi@LH[ P^ vtnɘoQUrl+?7wtoO`.<. ' oj*d [{ 2lGj\/sOϛSйڃgZ8>tus}qHtQvtHk븭)f, *g*BfSРA]Ri@rks`1~ `jI¡Sٹjf!&܂ tSW脱O MQarWL)4@+*t@.>EZ~C'>`?{X._Wb#G`yn󣅕h/dS-T""ЖjnMC1w1XZ~볰~ıe\(9o=P$v߰>R@8\9E1!ESp\Oh0v`Y+_fj"rC~In?8yuKs-NAGq?zmp\rtiB /;[@X6gM?}b1Vmc_ށ yK;FV&ƢޜՒU+j=Y "jFZI -W()AS^I1t Bŏ( c ф:Q3T崊3BƸԛv7w ߪ h:8,)JBjN =!V!Ce\&s<"dΨ̹IT3;5X;qy,-]I(?HQOUYH9O(M~q57{ r |;_K`6'Xu/|Ii$:7z_<7/OV>~LS_2=xa-S0Zue\T5F5ҿdY|&Z@q%NVB[sOMLRJ0 h5+?X5u8>F4("1^*`̈́7Vpkdxw[MO<Ly0PAw"D < >v4'3_0?3bK0+P a} LܣkRraj  ?lj @3@ar@,!l?@v >n~k{ؼtb ]̓H t$c{T_\wa@H &I*0!Ҧg]W\mGrZ̛|֝ q=. Bҫ5g5MjܴseHK/T!}I0\Ywuj/Xuӏ]JrjXu>l\IY7xHC'ploXVsT)00dJdž {[wXNn1/;][xΏ}-,x畕'ӐwϑZTר: C?S?,1I;vsn}:ԪT3̼3L wJz7RԌiԫXbK]iI9zKI'0H Mk7nV+.{P?jxu%`tZƵvÓn&8$$ǝqP@kOPps$)}u<1{.LF/,BxKI޵ښ)`dGأ׾u+0}ER:*n'EgՖ=RJSX\#Hs&08)`PHzYu~u` Mۛ,O [uqhŔWWy'(@ a#uTA >|m #QHV^No8p~yL:"QOPw`ICt^],$7{0jN= 3{)bz<h; ج^e3\Zpg@^2aڨz4v~|i2߷-eUUo,Ҧ L66S\K-u)7 u4aPkМ "UIi]K ^VDA#K@V5~5pH/eNN*72~N.p;+It?GVAEGS@ ׾ c#g>״2t8z?>& xO@+v[׾,5pӯc9 OibO5Tp*~Cר>ÅZfi}gyBx Qh{+X~O^+S\Nx;ۉ`{O_uxzzց:dVhZs-N)>dUgBT]gG%,^ 2F^xp)Lf4A:Y]F!th2_B(KV>MD. ϠrS$Tcͫ7_^xAwTBJ|lι||3v Qfr6"|yzx':|sOc*3)-M=Ě9衉PTwhL1NItCB>`5?3:χ!46^kӴw\5_)iJElAGrƝkC U4rh`&І-dRPpA M1z1Z^ 9K~Yj1)o֩cZhyiZEc|$wϻNBf̏= #gl6>^Sp >v0o5ȼ@Wh7/βŋo=e+Z6@ԃHM[0;䉵+&2*ʛ#(xG2K3?TI.ƨ/tšMs0Mҹ@#,VRK<(@Rnwj|^0If*:L 4Wqn`@hk"Q8MT4 `tWj@M4BHn] Wu_O>pm,7ګ1bGhefX.@) /닌ƾ󳛷"$Mۊg=CC*CoyսnjaZ([IKluT _ seh!9hΤ#@iA^MhIj`i}!p, ? p78Ic7 ;х~w ~1Ug{s?wi=+~,{y340P g_q >dkOzձ;AX(+rebD w:UĘْ`B.U8c [qjФV0L2'!ij &jBHO>pn'*aS P(@+ůJ Yw;; y}h9.@*t_@J,Wz}Fݾ֜o~{;pc4?fSչ3[ȫ):vltU;u՝Otroz8uJ6el˞>$O9_tuvz|'JX ! $=uuOggShX" 11/0C>> /-0301><;^rhmboR*PM27q~<,%H ? 0[.!TZ@5@Mf SH޷`5iOOXLX/t>^kn=?5`zY%H_5{d6oW-P{+1ϑΛj!fK 5խlVNS<@|X&NˤU`(.XSJ~$Bm_Kx'7ܲ7׉%s=&|?25{itBx%`W A_:@gcI -X= p3SZ (`3`WPruS(^iQf\1_o|IXӦiUx+8b \Ge꜋eSi5tmqoRh0 ~rOK*sS#N,V pS4%$(Ҹ|]Ώ њ4Ԩע?e^lp}Թgn%V=jsM#0sqˀЫhZ]J@֦Cr&R׵QٞGR4 \A)c&9~"fwWQxc~/YyC$c\n ķfMq>11k(ڝ¶@G=-/pk ?5ezΏ)iX<#U'mR픇1F*>s3`:/)F]"}} -$Q3@S_=r2xÀoDZ*I{O@~y 0YB~n^%&g>"#mOvֶMF2gzR\{XPx䞟TJ d?ۊl[b"pT@ዿB(xAml(q.89 5<Y,cMŝ$t7TyH3~uKWd .>f* mf>]z\-`LHovMؓRlc l\Df-0FG_JJ$1FLZ c%ec&W)d#Юg[6\XK5@Cgt82-@ ?V_.yQ(ީY d tj]۔x#ze<|~LR_)@4@+Ϊ"]8` p} g)$P:z嵇[74蒍I?3m1L~}kCfLw{5ynz\]𭞫Vq);eR” PwI~$0,XsY9Oݴ`oWc4}u FiiJ}G *T5ԋB<%FIEZ*jGg6卽5KQUѸ ̜&R8g1+nsIJ/QMs'4JOxgЇ(Uav_/wn8oga&.$b_5ywcգ|ߑ>#PO^\&B1\;;?97o:&ys"x4ՌJj!}w{A)k]0g~Woc-`J ,M =:\=e]LRże*wCb$ㅗm?`/\rwb㳇N.ۑnӶGS$MTgsƦj,UMAӿ|؟gZmJVh(r"%cW?݈)F%p^Duz"rEJmh Y߸b~JhM3#u~?y-ֱCNYlv֛߮ձ$ p3ҽa*w٧U̶0Iټ:Wxws^Ҩ{RLϲ2n3 G%֖6 XMəG.aa\:8'SMƐy}%ucve{ј 捘hU=M:BSཾ7=|5U!ٴ=<书J=^>TљrιgO6=u} Dx.[+uCf-!Tr8TH~ݩ1T;gwHF^=Ef-k^S^lsTV߰g!닊.3QփQ Ao(K+L/N $KPBp@ 4ՄJMxҭ{Cv|"6)}˻01TZ,Մb^KokIjǼo7oog0?/v cQÒيUl _hapY0뢌0Lŋi$'Ǝ׬mR]V,]ۼ^Y],׊!Z(#"Z 33뗛_hutm++=W,Nk= Q?; ԇsf yzo!s'p)rWXOggShᶁ! 0---../;<..-+-+2<6-Z\Y--Q3RYU N8@R?[^Wtpq(Rs{_ぃKRh-%x~>v-o~ =BLFVȥo+D=p,*qUSpٻ]עvn-FL͎FWf;̓J$ӽbŔ5GϳTD;dZ5ئ7 B9ē -(R)&ͭҷ̗ZN@(9D2a~r2K Ÿ@~u]`T2%OspF 7uÝ,S/tUy D8u5@iZ#>w㷣M8唗zٷzvN#]ߑl#KNZZYmϯU ?XAu͹Kq\QI$5wnT&4I0X^jm$H)N\f7_#d~ll9F")zo@sŹ?ֶ<]dOc2su)?G/DDo1m7ĴY”"J}$f[ A(֨R'.Icvl y`zf_ ?RH| @,x8$KWĶD 5ֺgmsm"H1|_ۨMp؁#c<&wW\C,7?$aNiy>s4r79?G}'ʝT+,Nbf3ePQ2䒁ufly g-S=ЮXqYO=̂rAի#v*9XRuKgXJ*aGW}\3jCj]V3CjgH9Hio6r3W p;V$Zm3h \WmLVd"8ժ㚱>@U=̗1?l{+`s:?O$ժ񤪑X@Z5eS[>-9$g^ o qvjUGܓ U ['7=>/uw}3mds߱5Wh{U $U4A?h4ہyi{tX-c2Nơ\BS+]ky]|*ʩNULvdvf?@FF}{(պ &C1ώ}2^/žaZY}V˽,U-ekۑ/iC²`b7b+ąb5IgZM*4H̚xbnX֠jPjt$}7)=J*,Y+syU*e $*|rDR-X0< i7~)͖ ^u$5Ղ@ ްr!;~g;G+2OZs{U/FD]1w6j%Y[3P%BbZ,l5Y1ك8ľ˛t!W/-?U@4~3T5y,&Si1 UV\H &j_w\7r>[!c½'$9 l%U$W= *`iur6W #J&<[%k:lHVKFP'&뷞BX݊$:N~hʁsnW`"Bjƙ6i:m9Fm:Gdtc4Ds4m)5&EcSIŽ=.<rxF NΫWf9,LO%ssե{dbl^efF.g+]帼w*bcFf? `jz>Wfp$_!I@TUlmms-1.1.3/data/samples/stringsnpads/heaven_strings01.ogg000066400000000000000000000711571247673406200234640ustar00rootroot00000000000000OggSQg5+vorbisDwOggSQ1i-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@VQd;%ǼĿǽļ6ZmX-TA1JD5IO Kzuo`I)%1D#U&Aa7ӡY-%%h]u"F%9ҜcH941$ͪk%9f*Yam"ɪGw9(}I]]&cThvX(VrE + <& |d8@d]o $@^}a ܯ "RjlQTR8*ePFATQ, 3Xrmm<ж8J[ш`mimN #=ph4{QSi\rkY\G+:u ~AdPzy!mBnF,@%> $gT8$ZNXU0GBF`ɟB>ȭw\~phlv?w#,c 1LoX)*u5Av}o!j[$<S#`d hq@ 9B 2"!!I)%uCFĔrAf*K1 MْG+3yIbIr 0#t(Mס%`ȍ%ϱ cDŨ&µ:T qK Ap9L f}%(*@U:"!@űdBa@<`:QH- hu(ћQ@wlBƱQ+v+zqM2'YM$tp[ Pȕ6_7쨭i zaGm&$]XLEKW'! aZEM@l(jX쨨+MCSLWuY X nh KMikf KPVt^ Ԩ0a7g-[fHNIoܪdI l#iiD'5P ~eByްrYm!|(;\5Pa*R1PLT@ŁXTEj$D5Q&Q)da2-H8.Ba10lEp P mES,hS`T @+a/egx "kk])uz2ṱ}dW̫ *Jh"h,M.!/BE/u{\/>('@z]Gճ 8L\7+bQP5(aU# @Q@n1]8,#4@̅5b8H*) H %L @fN2ã>!r)ǰ)-9UY6aÔ;N4ȥr_7RE.-zDTvPƆK4]BjHwXFjU3hDAd66Y6 @;p444@`p@3ݭ@C Mfmb遀ߟ8+jR-mES%`aB z R%:=p)fE.1|ݝbF^TKbtT)&dC*K:Q@)HѢ̫JLd~QTx `a@1N@h3fkg`6lc*ML"ZT.ҀeY8ԫUӚ@;hh)L62mq"s:R: ȅE?5T;]\sQպT%2EQ6!BNcV4-"b1,)F Qz * %dh &PGCbOT 0"!A@#Y=" JT`H0>HF|0jëB`3Pi>j]bAeWDw! ?6ى<@-# fC:EIS岇P]51ԩ ]1FAWiY[$2@qZ 8y̰I3О4 HT DXG%ۮs Wu7s%GH7+qiPV$ը_𻁐C!BBx8EfK|/$Z.G=$9 Siܴ   cȼ@VP (z~aB p#rNQ6 ^aH@o DjРHF_B/Ed K ?fM V!B#{K|ULۊi>,bD^ lK+@:(% Ip"`dמu!I3>nETWԆh9Hl6;#'Ӡ6hBd@j@‚uI$@F *A@'*np6@\6B(VZrt8ec\" b 9$$=AZJ8ޘ%D4njԢa+<%ى^:ZOD@`T8Edv !.opIU1 ,jcQdid*RU5r,f'FfYX8` Rد#mnbq[+O:΀[rp7guW5@ U=!(ׅ\-/0# U}B=E*p 0,"8Qճ SLTt922HdU& d @T.na(d"MtQTeWF~!1jQĀXw &S `}*L"z\D( 2Dg׊+9MU:~=rׄuk.!̨[z\K`M©C@AQ3uTb(؜ pi ӪP =t2 hPu@ZIk8k f tKV!m-p !lrk뒗Rk'e΀rDBA֝5AH>% >!:Q3%~} '}|BXak pI6##㜊MĴEQD\حe kk4# 6$@>cf " $ pܬx.| F \ւ] Y@O RLW pp), (bXA7^ fyJ0uϳPN9ɥ@(50Lq 1P T RvňE@cY#Jf=`*:H ),8K!|-MdV @יSjV0.-f4aFfTK?C6rO|E+#9p-04A ^oǸD;2.æ~KgGNG0Y2Áp!`1fT6B@eDL+("brLs!;AZd"Ri$,CC;8jaJLjE!Px)BE#(YՑ*2v*{o @^ E9g.ø/D'TE N8S5E;j:5QU yP6F#@ۭqQc*ȠY퀆+4X4u֑^; d.DXj 0"Z */%Fztm-' tX(OggS@QSM~ ᷯL;a+;L'@:# n8-[(.LTVI4jfC )4jP  pXL;@uŸcgk2hp<6uAFg?7.Z޶]Mԃn$0~ơ߷JNq߷( iΈT:JqC! RE%t2M>]!Z `}Bd%&z0dCc@PIQ3j>Vc4*[aZM GHhm_U$Ah8 V̀ei=8@~ok,;j Îwt5:eU  YEKH|g+g`Ĉ Y4Z$ lwJ09b+ @d]Мġpv H4Ugt)7ªG8A`;0g K(qVrcM)A^[Def|B=YizGc .#G;vӁ4 jejFeC ("DNkDPGhN}$T'89* [3bJ6Va"T)!$ĸDyS: ;\ @\> F.=َpͿ%~ >H>D ,nfLb74PPqE0gaS@l !Ad {];Ɉ,H@!d',{- Ў>:XV^d-clZZoSBpҸa5ĞmT'hY& p0y}~[INp_9)N8uf. L!%@cQuUZ(V D5Z j%S(tA$EqqBGAl|ED@8N +)yt `q 7LrhڬPh {h$Pc@)}bM, ,KGMƱg(a jEL$ a]5#1mj*Eh4 RD1@.#1aU`d2AA45p"4DjC ݢm#ͫ,v@Qn -Zh)ơ_/fGL1 2ϷfRba cY8bv5Pm@""‹qcQ KIdCCgHg@nMBh! ixU!O@`ĹKPBKO$jZ `1@K:]hW-H>M~j'*vt$@Y,3 F:BGBw (N\i!(Qp袊B : g[d @@ c'à:V$$Y@Uz0s՘sLZ@w<@!ZCE!ЧPp%@h>~nm`ƯDTnDH,HLqYnƎ15qX(YPL4PR *$21 b!^ȺtnG .]<+|{=`‰è@G  z*%eVdePD 5BYP0 Fo;|LQ۪+|# [ AXLZCKC @Z, H\Ĵ1MUȼ s d4JQB%F M[ cvUz>  )3TNv\4@E0aE)ȣ#R&}3 (%~wqR(`׮G9NA(>,d"-! 9P3Oj LS]AE Юdʚ:E rjD-Ay,yWU@R usH@ N2 16h^0h% =)ЪPЖI8kwjjƩR!Zah+ XZ8jڠ>E#1,VC| MpF!BX_ڂS&`КSTpSJ2k+E`@WD8GQv0%s gzBl `EcY܎_GXTj3ԁň*) TÐ~_oذ0*}~PG$($UFNEPMjit UT}XW@K1Ĕ۬# 8y@ϟh-vBd5Tdh% zAXCyQQVL=!BkQyVORȦ3-d4&gidK I@R)&ÿ| ϛNk2DחXډrzz%2 1]"=ChV@; b1PUâa`\5uDٸ*RhtJC1b+X0Y_i gm:HqKD0ΣQ_^|LpPSTkC^(V{hwbo.eǂ&JwI,R!PPb7LS@f "(KjjR*9bdύKQ"hθ^(GH:l]C|! 1@I(Ǥ k l?”:aX9CVpPW!F~&?|/ʼnr&3 ~}0?,9Q \ KUiLc YCE!bUŰ! * 6jQB̝@wk( n@0\ @F9 h<…9NY;zNUe=9o~TBmhZд>%~=po&dC=QPOȚ 2l eh9> 4xP@PmN@ (@4R[ 43@٠&!dy)YY(ă<]TBaW)/EK%=;(54݄s9MdSZY%VЧwNI@ F8趷#|x , ;C NSb1$d)v5 ET43MuBRv$ Ǒ Ѱ#MfX4txvqWY94`pMI,'TKf+XS2IN1l^EpUtGy,.àDw#eQ'-KGiҹ9PL!"jkG ҠEv#%8YY^Q@N5:G4 :i*@*&3ES;2Q~2;aYs+;A֢Pt2WP ~fnm%2Ŭ%=NJ%|U`66!q?@APe,9M[,:=UKZ alsPmhlmCJ7)"#@[ `5 x@^w_ȋ[b!/5Hԯwi׸ 70))/{6Lp_Dn)4%aXP0P \HM b@A95FՠϞ,:b iU@ "j`,UdP6cG(c, :VKQ@uwRP5ú&#n'uKspk$H9 OggS@ QoѬ)¾ú~E'j b%9;(gP֪Έz%HRq:nڴ`L;}}.j]M+je5ڍ eLHҡ|T @B 9y] xlZW) 22Y@viZ7ǖB㻳Q08  ~+ce~ϖp.XqFVMQqtv=&%QpNTFL4 kL@ύ2G@"DH6 !y&4gg УpIQ=XV@AAioiGu,4<X)E {> &:~rNP%:~n!Qcꖢg @L2Bc@"X96'X$F@,P_Pd0 ]u"UK`X\, 13LsPC/|b6" R%Lm@#BVNӚN@$>%:~vN~vN j @RWpO")`LCMui@"Ni ,HdD_g@XZ(4h<App>rFr`g jJ@Gb,! 9(`kW:PpVQɰF5<@R08o 3,D T/3f\:[VBR1g oW@T:7)k+D̓0!<VCߵ2 8^(.lPCwMB9&JY$A7EŸv(4-) X ڬ($3AyPi9v8HŅ`WMBZ[Adܔ0t]! l"W rNP$w[%LɈX~D`#94fYS~FKv:щK1z?G':Qu g Rq45tc T35Lt NCpu #ԗ"Y@.n@= D( @)c 6h 9SdETzJÔU[eX*u Φ+Ɨh8@~&¿u;.D%W9:Q7 ^Us*$$0XUbsh$4RT.`PV&@Yhg1MX ##Kx,܅$*-B\ú.Jv5͵լClOmhr@8P(8~F7re~txn;>N{VbAn*ɇ!( ՎXb7PW6@- "Ng,(:m%ENdl*aޢ2uIP U]1ڪ $H,dE#XS!cƅ@hAN2S"Y q+ kAQUJ mb׃.4YRk Nqm.R'eb >` R7ܱ"3 LܱWwK`T*Zr6PC<SPHTSjU,$ ;Glî8xM0XѵSR.Vof46QnA?ɒM(8AY :mq2XSN~__b0(~~v5~D%5Y#Q p͂t$Q!&C кkh0ŰQ } cTDղ 2v*dq2zgXA2I0nZ I!$H3N4f-*b&0a⇽4m]dݚͦO+81?hT|EKh m{VnC$Fs/hL7O @4@ !p)ſ~9Q`bPaQK k \(2BpA Ո`Muê@l*`TsCA + +Mi)%ZIj@!ax0D;8dMP0cC=`hޗK3:j{m)!@Y  h OggS@fQȹµ)޾h(w6ǰG$'+Z J K% #@@Qu`U,& L8e]ET9])L`Ph` XcRfc[@ }Cj-@Åf ٸ"h봔u[7k _ՎNp @~&D(v G8Qe]eDBpb*m< !)HRg8 X@lk@ԴDDV@m T4<@ף 1/0.aP"\Qc}Vzf7bVL5d.K⒮cYugJ+ XR,D1>%;D/(3: &:>͗HQN>J$QVHh&==m;, F aHIj@D,3"b-:h: Mp @/(f>mUfl~-6Ojgҹ!Nl[@v, `2 U;~D3tr'>ToF iKXF"HhTuP(b)3`/(P3& l$"کghK!NUQtD<'= @, |4S¸a9?٬ln$zT#f -da" ^ &.cL%(~H'ToiH,J d@o*٤ET\4U21@QG} @);p)0Zi6m>ic A )`zQD4 !-;TBoOCP*bJ ^֤-rS@@H4~"} u0)׀uNXIRqY1@SC NdhJBdzQ6@@ Uʬ#"W ]c^+PdFڙBFa,c5q .S# 8A [f"UQ0ϰP:waETz2v`WMr f,@?+̆$MH'ŜT8[pe[n *+p @hb̆ Q4 @ @B~r?&()f់r?&.t]d*m6aC ( .ح@clP+CvQT%Q6(0v F0f @@4 !G .%a@ۛA XfSDh/p   X41׀9@_8QWR fvb(S'!PEA:@U%We 5DifR!T2hUFeg "JE@630bzi/ai 6c> uSCy2`n䎱3`N @)ſW{*Q)EojUt>PUMJ`nC"0*sMAcPӨ)IQ)jԖIdd4FP )PDwmѬVb!T !ʩmigw . @*v+"+) @@fǙx<8>F~poamm^E)AZ.hEǸ { QTjͷ) Z1lX6Щ@MĴjWIҡv (hCņM1 ~d*v8eY8#j28` LB "*U *Z)jB "&  @W`϶0dv.@fG0V0R2!Or^ dYgO CBX GXѐh~E_ p2 ߾ _(G j2j ¥4iusc"<#:-(4P@`^T+ن xh) !Ht8suj12N- 8U7:8<6L3v @H@ Uݾ$:U=|At<38#+:M&@6uZ UnU0vh8G}$Hq# EB1Jtl U"`$Fi hrd`)L<(_/= 00 #/^r*|w0<ڢoPkwN\sMp@7:~b𷪋\*ת>$iC!PB(bSa40QS@tGXG@hHW;&t8WZ'^@eh3(@5}teX ,XG V]9e=+ `Ѻ6R@TD;9p&ӝԆ%¿1 ffG.Yu2I6(Y pI`DE+ĸ'B ukU{@`Z`XIڣ"@1P$bDy `VM}٩GL`  @|i)C{C!`=R{EIVp[\#t  p (% ȅe< ьL ˄{ :& dU?a1PeѬ fFM(6&RQS( V@8j ; 8GHȗ "ql'8lՐ*8 8P(&Tt*1jNhOggS@Qvp%ÿo NdvwD Q+,L A1# ! dĈ]CPqEAu,R_y`8ph.EԔ;u'  ]u$? ! #Xxb &Y7H|@jKҺ+Y*"&gaƀ>G$(%~mf5\ǶlF\Lp2uM0²?$;57-,%@7ZQ@ߧ"^0N@f@  u\S=bkj|AQR8t(p\* =,K!ik` nCc+v'Q7r@QLTH NT}((bSpe6CiLʠlTj2DB6 4Zߟ6*@ˡkЌÜ@C;~|WG-@Dt <9B@<&RA5X,V%t<{ (H54퀽(UU[7"Fh$eAD[HN[;CP['!X8T  Sm:5bs~>v%i[I}ep1CPo$(LwEE.$j^6A#o#|BIe @" UMU`5ʨPԉ EMc%e-h Ќaf@S`׎#3(wzRp ,CCaFĊi#-bUd7@Y yz@N Ab: `LXJ X1W @Q .( ҮNȘ,(Ŏ#fIiR΀D51L}n6Nqݑ@3^_|ue*b ;`%rF-3F>{ @NqHt&Ht*֌vot]) =À1w"8w.i8Ӏ`X9)sxFr@|'xCc/#\nRe '}Wi#e !P]a~ 9&V7ޖr/DŽ?VHjL0H)Yj43ZL3(k*5 djLa %0{n7wCK@1[ h(S5 BV*$ǽ":_(Jy~i$ ]UP+@K?r/+5dp> Ɲ~wL1%awF9*!5rI%F@ل1:o ΢SQ˂+Sd"Z2zgd- hUa /" LJdwԀvS+TP .H0DՖ̵ [qp0^ Zkk ㎷G-O5u!H%*Ncj+I\LXSԙ XڅB d$Z;qL*I@\m̦; { Fn C(X2&4nqҠT$/<0Q#\~ fEo?ZUv%}\d'J8WYVSGR q7P0RAcA"$٠@ԥ(D8Y# JcD 1^$3b a 2Obs?%ԈupfX䖤+ ]蠇R L>E[hGfo9܏Ewԝn \V8$c DB' X@M0VfH)!e 0SDLi d> T cg @fY L ?>U2.X[P_n/*bIb0o.mQ=- Hمoiu!"2 @QLp `HBv"ejTiA%aV maU٫Nhɶ(6!=c1Yд9)O<؞i 5i?@ !\N9~/Ny{=31glmKR%a(ޘEokFU#YG#2Jg 8]#?.9SljM@L@md&UA]mt{P:@F@*,v[ q1@Hez%0 3P)a>mk =bjvuٳo%:@='!({Nd!r%, $A@ (r=( & 0, jGp*XSeS0,Y@ִ Jw@`h@Oh ۍLGWHe=x;#}@ڗǤI(DlRPq|@Xt[c\J!D@۞{Ȫq #{ȪE@[Έz]GT&ώ!$1 u(Pzaw@Szi* G^/%6G9mɤzO >r.p,l  nL+\Cr4 ȥʯ+fA4nߕ/ujQX ҵ: e1- b'VШjWIJ}y0l (jk@` ϩҝf j.[7o: RVc DQ:X3Us;rX @ Dd;AIOos-ߦHȥߋa:3jxR׃a*up@Y 4t:@Di'j%*A}oF]hI]!]P a--p-d 0V@w 20јa̪-H idz[[\hmyς/I35"ȕ֯-Ku@%@QQGTeԴD%B1T\t!N@1J='rD1$LS `8Du n]4l:cz@А,Q"2BEm>7Z*h2[^s_e 3FAo2kISboh %\dˀ?Q ȕ֯nQC#Wڿr2aF >5`㒐h*c JV8srS@RVLEԈ@j@B]YEFLG)4@k5j27p%k,[:*(1b<\\¬msZM]RC_lQ3jh=[LLk\Bl50ܑ4rs3u0wLJq -GK?(ߴ PPO@! u}IT: 0Amla@*HSkb#R6mC Ē])}ji*kaͪ37wTp)צL"Cڦk#Ru^ÔpiI$ueo͈^y%ϷbD,ぱ. M CT6` +=>Z^B `\58ij\ d{Qcdm Jru f0 r,\l\gI'-$o)V\CBOggS@*Q!O³{q_JC+-a|U;rhkn~̕#48QkҨ+t01lJbE)D4 -@LG2]*a (A9B XSP6.y0/vМn `QXaT 14V( >5ҠUH %Fq<"Fn"_:W#<0+'nK*1 D3ÑF0VE%Ktt +mEY@6/`6C M+jAO@/؀1 ="$M̷o :zpz?e Bl࿴.G%6+n EU\(IP a{?68;"<0V@W @@LSMK`Z0Hm VjM,Ȱ8T<.BC:gb;`Erl\쫀Hw:6?he7I-5m4}C2ԉTjȭ-/s }ܲN#@8XBiHC@@Ea )`E@L.8Cb;l ;fqa7q;-@6ch&HRtfrs೒,赳 ;9DM"3%θ`#o=5`hR5%/6$*k[n،q Z'ȌC &`ƊĂavEiP "s1a,4j$4( OKnw7r P ` ]QW8K>Y'%-+ZJgB=5ڷv{,|XPg8H-cޔ[^fi{?eA@)hF!P"j└E}̩ k 2GI Db:H{<H&Z_7Usr U. d H]hI*A=aȝe\;"#LώeLJijC@Qf86@PlWjOWSNt ̆ @. v!nTg N$BzHULE,+g<`W!Jc>I1E l`V({n([ɱD56Fq]08N#w\%q, THb*)(jZadC%  D?FbZň Xwm1aLa@(/8 ishN NnUmUAi!ԬuUq@ ]djCE}j*$V=Vb!>AP=9G:]YscU__z0ǎ8^$IU%)(!tͦYUq )! W4δR@p[aU] Re!ppl\v'~oL?9[9(AB*U~^qJLt![KKRCΠ@+/ΦQ#wׯx2)mGSJPY2#EP0R2,2[1O6]貶$D<4Gwlpß~*哕!]8.ş.`Ҡ$ N%l> kp0mQ08! BaIp|@BP.$CWBe Ebr&6QP # hZ(@9=@8ER/0``5&Y 5)K›TqDXB$@%%L2X-&ߐ^9Rqn s4 Ѐ=cqFY{~y` ]*$?(iNQj3`HMHId]$@95,dN!J-SL1&494]NYu.ʁӥc-% haԗ*=to'$AjP=Yo FR#B"L -Дh? 6%"`Z-Dw(;( Bd0oNH j ULܜv4S$DtBf:lT %ls1eM&m#f$US2A$A31pm@=Ǽb=C1pcH¤UH*,+ vH k"@Ԙq x -KCMCF"DG:l%HdddyK05JD@X`\ _q"H h=@^gȚ|A!wOGf9$f $u5a57&nS @N -:MD ; s;HVU IYQbSfDj$%LPn+]K0 !jscUU|m9A>Ƚm.#lro~(84'@2!}?p@i-vÉ@hZ,v@@5 ,`:|gHْ**SUFT sI5, ՂCR7EbbzKJ  H)P0^Ƚ#Cmys>|dZI&)1BQ3i7 w)aj bD"g Iڽ2A"R:4@ v0͌D+kVJ)" S;)uY ۃCA9p;(4^Ƚ#C(>lx`rMtHc >V`Zpj3+A0ہ @Lf4n U4hfi#BUTקΟ_"jpK-M BHH@:^nc=Pm1{PqLFM$t!b(U1Ł'8EP0a @Z,YYvrxҗ~P)RT:Ci[8A@0*^}LK>ƈtS}N<Ơx)J$$:B!bE#SEL12VdԆ1Gr:B,vRf +@u)i>մ!I?oh]%C@ 8h^} 'nC(來SaqluXem1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ@9QwxZpG{}}X6w3;,R}òTPUՇ<aS\3$z.b6vS&s361ɂ-@Wj!'*9A]W蚫P܎&U(kG6jq\|c>fDGغ͑ %{e|{ |WSļe(c|-*XxDrmPÅflcQ iS%{}LV&IcחuĥWMLŘ鬅}u+W7>4WY+BI7Gf"/j zFfZ fшgQƆRUW2F(9(P֬45W5ȵ]dL "]% W[((MZazsIl(eY*ڝwd<g|ẉHa+?hj=UU/][In0*CmO©bFDq8bgW)PEsWXf~vdOdi#W~{П0=%=@ lM;qf@sg@xs#_Y:n / $7j1 @@Hz:|1Ikː> I/0rѢ+)jʕ!`Dwe;*:9c8h Xs$#΃g~$VCs%^%<'n7hٳD _3x{&e@Qo; Hk8MȴV1`j)*W) (nl iI&b(Z?&2*tq l5Nξ_q~~(a(h%D7s89y #H&tXġf39H?{{=>Q7s,r1H>o$c@N<WCڙGDf85̚u)Fjg'zv "=n.<=cvRM_M+o]v0;U\FBFkMcm@9*VPfZׯo+"0HmA~"ɺR"GW N@}ϻq@5.ߵ/@,(_^tMsg(,TD7n%sofS;NxsBc̆5E_˧X!8z>Qs>knjs_{~5d^)P./e{=e fU9 @Of0K_@@@aDp@K>Pc䚋p',Ѕ}a ` JdngM.(y*R0(OBc! 0qHߛ0^(V[O[lJv|}!֘x3D*Gkg11n>;&-U=JH0N;3}I J%T{E[K 5zsw*١GTc5U@rH?=gXIWJ$V?@a7#ɉ"0NzHb觵 qMrp|lV:KQ=+ SN㦵N=b8\vRi~G5vJ~Uo`y1 ۮ>y 4(FokVZ~@ђb }H?"@(A%Mvw 4Pu_Ѱ6P%u!Hܭĉ[`iztA^= ǫSb,㢓A3ާ %a*?~G$ffs{Sz6 윻;$o8 s[|p o d?QY|;HA $)xR^sD$X@EpGcvgX|"QlR6J)W!}ݱ5tJ*Ŗ9>%oZF 4Gio mӃyM J2\ _BBZDE0Qh9-@Q@T6^UJ+8s*x3m*ި;Ⱥ*^uAHmEbHÕRc:%x0;}5T 1JP^D@&={U xy?tN?KP^{({0}dZA)YmE*DA28 4j4!\<:9S1Io])ۺRDI`u=>"K#YpO5*}?'憫5S\rk' &T7*3Aq|lb @[-% bz 8̻W['*ז_2`2|I\#|>$r9P m` =[;z5qpi,*. f -UՍv+7E7 a]YTo4OAƒɃ5眤L&\f W7<@.w@;Oa|MI@gߢnUxMWJN$Lœ1 @64cw>O ڞT;J:E1r#׿w颼9:C` z: y]= 1͎%T/Gx'l\W eKdq|`ॎ 9^`="9 ljlNp'HN?x p./w'8*$JfI4=ߞ [Y%ulv`wE ^~>xKVm&|pA9܂ƻ E,dI̟0>20>AJDRl]7?1X5XZIWgN)Rn̘Q V8!_ɴL.K_:c4QzW :R@~!;e` 0'`⒕ `oݥMSV @hp%͕b]P!!.``4 P1Bu߂%8uW-67~xPpmP.8~^@\.T,F62'pb`]v4"Y&]h*~7.BBHUYzxSai>URTxvyp]tp`|8 kة^ p)@E^Aإ\ݯ@s_QF8cOT__X4q\~PuT[Z>aT~LVݖbU)]R([qmϏU~gGH'+>YFv<%5"<[Pz\Ș(e9234P:(x3_l+a72wpח8dCiQk|h/@ٕ4p,-og2랭qKH{D/̟&?ZWSǞֲ&bUpJH O&"3@'{sE _G@/(sZIE; d9m`u#(k` sGQ:n?+{/3k7Gzd\'ڮl TQ.>>kL9{X%O)Ib:ׁ.iϋϫ@V(g@0@p׮(3*)#R4XzgX-E=.C,g2J Hd*&Q˽fz] <#6RҗֽgnZf1QcFGBJ+VNZybma!ibF&1cQ5G@^~`k\po SԺezupx@i}S{ Z5u4/DI^CʆͯgVkA!'fk(4#'  {6P;u * l@O } L>cg= %Z Gp/PJDh*Z$F>" |~xTx|)Z* ,ReZ}rLGJL)0R78Z4 E Bg2̽R.ʑYbJ/w~$;ҹ}0}xsxs o w< E`s}U D2{ PxCǽPl[h01-$ma:@@riJ'X 腩&0UV%$(vTPv[evu{؛U^'E]1W1^純+"m' <@E[}-ndy f( #uIlUHklwmZ(%Z;a@_᪻U9⊀p:{o*zYoެz]I6)a鐍X./'HXVKAl ̔)BRkѿ>T#o9cHG/u| |9Y1dE@ggvc-\hDPPx/hŕ@jG`awy }΅ sٱBԢN;kIs{5v 8ݶ;QCs8v]޲4)׸Gݲnj<oo ;߷+䳻<_wm SPq\H.Hl%Fn!"~߻x8K)%nlSψ֓򘎅ɥ֎:|% c3 5ԝ2buTJb%5WU-0ѕ=nEȯ n0p 8COLc @>` $_sƑ*E;zВRIG^A`۞`>``=PmQ8PUUuvNmyp_*rDפPW=*6XP<^]0`Rq&8:&ua ԘM^ t & ~ T;v0Vb5 Usvm j - L?iZ& zCAiB+%UPD[ý:Q*8%vz9>uQGHq`vl M&u/RڮQU@;"^۶k-I[q}= /\i  1Νh~{+iEl2 3 @ g.DߪȪFӧ@N>] ~z@g5%-,XGntlSbhko!esLN$G gB<-=qsRpZi1+")|')^ۖ%cxqp,2hrgΉI ^n@Psmhm\N/ΖN ;lߧPn9m4E!M[FX@pʝLZUTHE7f:̿!v$U[gQ%.UxK8NDYG] $唤LQ|ϰxkUNj.`dŠţs!\w i8~p^s< +Z!I(ڨ.vR x!׆8%h!5]Ů:T\ArBʋȚkMuQ( @@ 77BL`ϗ] $ ebt& (H ,E΂k}f@T q)0'm׿9HN+n3dnX;o4qt&!$ͷ.RSH1v OggS2"Ϟmiclռ\ ` y:|.l\d0`PgT@+.xީI!Ba]b)L @,[R@qGRr۲PPK)^@a z Øn4kOidɧLjVԍ!X1i,󩪮I^%)1w<+u48 ϜG% J4@@3: @ȝgQ]6k2xDyh)u3, nӐ3ˡ̡u:wGn;gS 0iosI4ڽHO_DŽ;8tugPeE"Uf@#{~w._ p,D`4.H:M]@ MR_d8ӸB. v 7Z 9ȋQS4%C6TZ/`v>Xh BNL)/|;lPDk>lSJS(De! ښh^b_g3eE”=&| 1 (͘@U`.'Z Px.b Nˣv8^5> ܣfEՔA8WFL0L& R&!] gxB9g^UA8(H8O' \`E/2p\}ޫ Y$d4RŹ x&%7G  5o (@*Aӑ N\u$.KAE: ݸ0ݾb3/_;R׫A\3ڷ2ؽQ7lĤw^\-,g(-G˖{ <@h{I> s'x \7^EN.|,) T5pEZ\ʒTkXBƍ}4UEbRn;d}sal :E'T%q2EVqSnaKT)m'8=cTSB)(~yP/z?b6J EyJhdTARMV]3)3;W]nٸoUJsYd,m.1U"]G ^U'-31HVrTx^]*K㜻!- ݳQ %1[Dk4  rVwVF2m B~ 8"R:j+-o X-vGRckG{tw"WCzws4bK?l^%'y c>`%=Ns4✋Y `o3-P2@%qYV(>( Y `d/^׿k(M~% <`C)sL|O#߈p(|,m%C6B;(hVu~[z>_HO/!M']ET5 so iμDj|ePbD\\' ^>o W &@PL KC-rfZ_L."l yِ5px 8`XAp(V_I)KLeZ3a9}w"Ql+I))B}e\^$΅13/{_ }޳t?"^%([@BҀ"a CӒ%mX\HG#I+ #SqF냐7zb2]oS jLccTMr 7`y֍3s*ֈO&e4Fn*B˝ 9[LFͰ$ٮZ gPx8Krb<5c{Xd[q讁s[c04.Sgal|H!nCɀ&ٚJu< A<@>=#ԙ@ @7(> x3-`! ,hI*Kpxq@P%p٦'W$Q?t!%/A7D+Ԯ@0[wubs١ݛ+[/n$ʤ[K'=ݩS1r+@ %`.s$ow@ s|@5V[%I~;/rZP3PE@ `*L&ġs@~x%Pq/{ʝjUSC^V2,^)Xr^@r%WiᔻOBjc K68$UZp7b\]"#bhxTUp{@> NX)3:M@;\Z8@*@kh lp@j:NL3RJH&w yVp%Qڒwa y'JthXu-u)ָ]6v[xPb?`s!zHJ0y4R6DHNX Y^E 5]ؿ w@]p@7d |FN{;@YК ZWb0ϣ^JfXy] \x)`F%4bkDr~Zo6jĿ}R+D'9o},c"<5Q_XScAp/^e#}"òz7 # 5ș ̓g8/\bp;]=l ]/@,uhynP< F@ 9]R!URÇBJc{۵{.;pKmCcՐ0R(q N^Y"C :,wMps?lB5*x {=x-؄L"(^`, -@1 0[@~"jQ>V)c!~9ȍ鈐Z}y}5hs9X&W͒j>W?P;L/ҴaLCkd2 !/+6[E!OggS:2"1u^eK9-t1 x:[&WL؁(. 7 P \ܩM\ k 7pi}(M"?BȸoMjGb<'Bs=X6^lh=c[K^P.!v:]3O4}Tsw.^DvOIڏcJW?:=sP'`8@@5'wUv"P DzbȕCs#"P("L-I 0+ (|>9tHcY@Ԓ8|NyV& ơI)޼B_T!BFkzDK%G.wIƥ+Tcd4m(=2`4n @L 'x PooO1-7c-Jf*mrbd dZ@2ݏ%h=pf8+C "`uAٶ-K{jޘncb5qԧܨ^L앪ݻu0jDEJ ˵ T{r67q2^Ӄx b"`-sL PaP.@[S)K),< dG`ic : mT60`)w$GO=' RPnxȭ튩+gS5[8=rx!ͼ^:VPj m>6NޣF $ -]`Q \ @ g<T!8ZT+[\aZ@U@SQxN8Z$5  ?@ wpA(d\SbJʋ.Һk*N3GN_sA>ȍ,>a0D(9a+J 'TgL̻E_\g߅TtU*&Pk^ k)v3q>Epk+HM/<@|~' p@&L.He>  t  ji2ȟ}pݓ@9o5%yfH2x.e`/>8۽~?j50C]jz+ܳD@jqǬ)Ʀ^eUrWzcbJWsW^#ԑc\$(8&[M {? *@=e1 -\M%)qxQhb ~w\$5X/ 4=ɨTwā!Z1ܰ8p"}ޮԃg*|1z%p.% `|ߓd:V.>" '%m DU@%CFgXCrAٍ MpȟPZ@)ǺIYi -YQq5BJ`k\ ; À YNzR׵K|^oWV1^Ʌ&86%{MYz{ 79py= YSp`Gz}:87nl' P j`; mpq<^g%a"6ă,{Z{mvc7rŎS:QuynsEIqUƃ%o'-D틂+ >$C>Фc\,jr u9k9l 2b{ x ; hH9(L\qrϷJuM-̤}-> w)׏e+3%W!HYw Tqcy*O9ypN}rsv3Ϊ^ Ssx~ T303g=&کx?%3#`e.L(@H~X 4;JKE-Ղb7@y;{j2%x Nq RF|9**V7zYм◜h/O; kBMЂ?n0-u@x^#sCř x~џLj 2w=K1c@]Ff`hƟ5^I!u|`d]Tj#ˆ! Z#]Y& Fo\U|.?E]$֞d:d1ff䋕L 5]MkٷXʧQ ~%5U7a_/W_iz+c. ``P=eX 2Uפu @ ^d4 @ҊM6u0RߵU@ R(pK5|Z0Yus-Z1 p uC fvkJιJ䊏8|_ M~7%?K`J3+\)%y%x @QT^1:&@, E=ՀJӑ ۣm! t( m.׋}YSy3[9{N&S1Deb{1~(@&whr?@K\1$w')1z䓆S5;Ң)?]x=g_}s_$Jhުf ulWr+{o LNO~.j+g1OH }KD-@{>po5HXoTo)uH7O(R!@jtoXw!UW7 EDSBQr2s#풟In)N M^/Zb+A+LCC7CR-]O2"*=NYLPo 0r'Q%[fp&gH%/"]"Er&Dg8. R 20/.U+ LDe <7fR)}b'lW2H``u. (%GE!;[.@O`/[$1@&8@qw7 `mrIx83=+J9ݩ^FL)P_d:XӕP qUU7`3; H4$ۦJc'C!FT mflqjRمjlk]Muzcf6j tH~GE##hbf.Sqf-ذ< v %?0wuH=|RMӽ,Ǽ8"5u10jU_Ύ? *{<=􋟎=~ZwOuXb91`ILts7l#A+N,} uض^%7kSHt>=x y >-_zX0 "`eswyRP֍|?T /o& v킖WԼ `G( վPuN!f]Ⱥ+:T :V#9 X-g3Nٺ_ xb} 2(KBG+ ^U;AjRw"L{ P_>t[/O:0 N\@p}Kw%K ੵ`O@|x@%>W )tx\$$ { m`=)AϢQaNr!pA߽5Eqz%,NJ2/9ߏ.,67]kũ*3:#]h $;-t * @FJr@P_%"zQ{@l_'ވϷ% 繠:Stki0a"E4Q(~4I6s*ͰΜ\qIbYUxUnfB=Wk=))hxy@gxwtv & rĸ ~ZxUZKV]TqtJ+g3.S܀/P@*Io< VD+e>@x1f%ZKBfΔ}d<-Ndl<>$mM OҤ)u^lv`T3' ! )H* \*2(oFFye%߻W/@^E$uD Jp:]s5Z6)O@g+X[E-L!MuщZ!P S(*'U]Z |KwBaMq(5EHҍRHBO$lKz`aCސ);cbc߷t?@"H0a?@(/ZMP, "%1@[5ByW }UR ƖD9M+:U<ڷeR[틚6 )b6{8P3,AN>ז%ISicg<@Op9Q'Q _89px/xf n;y_H/Qz/^*A9DA^L, A&!]/Cԭ_5V:Pg-Qfmh"ndDyN>VT@YB^#9%C? zpxykz=@*ƻg# XQ @IX{WT>;=C 26bTgEw$NxpDNhoB}ui6&o\7<#Znk :n+KSW (I)vk-'Wy SIF\]|^'%;o3[ٙ|%=?>;M șߓpcLX\um,+6kȻy8Tn'X%Wn9qr{=]Нr>  + UCQf%y@Wo.KO1R" ?KpQN6MqJ%ϩwoӭCEZ9סeъ\$ Il.bHX-F#lMOggS2",/BԞE.w 13nC .+ϏqEx Fx]`_ι`5y @]t ˒ Pp&)A7_pyz@)GJAIŃ5n'Hm)0/ߞ#FR9tD\OHrW[J3lW򜎺hvX>gO)R1r*^WT x<~s1)ׇ`"X p*kb]t59~ lݖ=ŌvNYW~OBÅn%7J`YC${ ,itRҳhcʫw}od̡SW-f+%g xzޝܲ_vZ- G%vhq=_'l p@<;/N TZS;( @VYq1((Ւ_J{Ehg+ <d^]HY o`qkrќ?gjTJ-leW9JGtEW#4z͔8_zuά*PwK"M\[5 W "| :iFf;T{e mΩF@H0Q\grB&F9ZZw^7vi#jm]FDi؞Iݙ4CQ-G7.zz5`eMr`d9>!ɒRbc Sx">0s& : *(Pp`xN I|-@K5Lx+Pf|(0PL%*(Oɴ> `wd<ԡzj}ivb4Q"d.>_czŝ{1( NiNUw={^UN(҅lbN 2VYELw(@e8^ HmW(ZJ}ƑYpwO`MW u (Uݿ:hBA7ΈDUk2h{r{U:E]  ~Ϸ 5%' eJ>H+(_#}iH{Y=((.|5F@ n30}4*< 5oDt6p obY^Py'(x➪]dViy jD:sn6>= bD](r&SpJ[dB|e jhj42%'Ir^4IGe>%07'\׿uw[ΗgN t j I|GGmu|_H%gRNTt("f< @P `I5Rqu^j&m/8 m[ϑ48BVbB$csiOݛn~X7oxt'! q<<>~ +ƙ(sb =(K cX@j"2N)5D`Cg1\UEKUAp_ʸz:QzzY{V;[4<8./x`iT{dۤzv*RWkGCL4:^+ ٭t `:q<` ϳp3Xg\13IS:ZH0PoRo|&} 8hcR4^= !*ji iaZO _y9^,[N?^+kwt1z { 35Wo( \p s@& /V*@App7  ~Vѥ>/%*UTPqL1,|^ꝰs K\V=mdlɕʵHMVXEs?<~y2t ˕-vFcKc= `_Mx c:X<:  (P^@fV*-i4.ZM~`(/m7.ٰ5>`kpE 'x w5_CAn! 4|0x6|MYB̓Tc͂#&;ӆ_~8 ?> w5`wލ(8nmon%R)jغҳ51eKG]8/|9g|1M.ƭ*q:o$Rn (*"_A P mIshPFUY;2oZ;rқ$kޘZ9_j@t P\9)b)> .8O8,= | P%DnLC(G^ \؄S# @ܫ5PpN-q FoiE^͏60ytlu{![v!ޝ ĠoZ1\N 7%Ww%1*O`u1 K8`,svG|K6vP%Nc$há 3QIsɍ2sx 'QE(>5C@iOpVEЕԯ#(ٛ2iZJ)c9ܬE˽<t#f/=wO<b~5 {;lp(r$}&g=( P#I&'+.0D@ P<亚 ȶQ+qE09b[bdDN C$T)I-6 BچLw `6.? Ώ齛Dmpo4%b.؄k w #$-y@ P7o`,=nlkb^+ZwM0 h'^ @{g ){bv\[ji r4m=:S(^SȒxEey)i(*KIvc O0$ `o$ @ ,L< %,Z|HdPms< `,fUjvR AMo1"6Jwil5WE4”s S]'Y t9CH:@`AP> ;Pl]-PF  KAnZf ׮2-~ncѰnZ{H6!s-\JwYSpoSYkŷ 6;7?PJ靄٩SR, ]q8u^T%=Q`XiQUz2(p^*< {L=$NWo8FlCcE(dfخ;)x@E`rJMݖ'װ9 3pCn]uȺE'd+:cs!3p4qX#@ܽz0;mNcOggS&2"W.^7mFa(M8s=d^.}Xxv.b0.p\  ~4(I2(An84-0VGeS()Ji(?kXզP~vbW/CVpΓvt! 1AKR-ϔNZһnˌI.ZKZ(l|3놶%1d7YQie.^+z7=k.A-,k0qt%]]-e_MI>3tք&3_-OW4ޞz 07@s@p`#Qh &a`ɠR#*V%RѬqߝ:с&"QXaa{_JR5f( +ul&7PJ}vQNK"kִ#k2FҦc| /oU *</;t ybnui:Q|Fp[Tiڑ˥HU$(2[NP2P҃:OŽئ Mo'DjbT0k~;J-pMU-UXrnCo`y}W&cȻ2m|&$cjĐ6=v`\ ߪ 7 Vwޝ @p}6h0cMq!1B1jhkAL;H (*3Jج h-{D6esޕ|wk-\t_{a`7 wzzr$Vx{WK8i>h`>$Jř3j $[tH]P# ^^&yEl(PuTn`3F C9MuxLL  5` "Z*QU릍\.D8^\Xz3^kmЋlC??jE6$CRMM*E)$Ч'P Uanv@~f=U8# `5\9f. |;nYs&@GZ#bFD )\ K.Y4Φ G:nJ ?gC5 Ya_,n'v CVcu5 깛$^tjw[.ntU HlDrv/:Otܑ!L'#򈎺2q:7ȏQJU-AZ`G9lsB umg^#lmX C{}cx +SP+^sFJ W*|ƢV:Z ^tFK_?̛lI -&f9 hq%SllKC:@J,S'Sw|n<Xx 7'&RS= [*JS'nxr$>e 1;i~NeoQ%owS/@'BG!)Sm1D:pzG@wd@^ $$[^ t`>hY#RV{.YCk+C4lҊ-šL&={ l`'yetL^Dv7`$ xx)4Ȼ+h58@q7w%9 PtS3M@~SqTp&DZtQD"B6OTݓ^t. G@M޴εepo&]Mtr*tݱ ƉI4f~ץ7(1&B$2 9|g Vm"/lmx91=& t@()w ۯAĠƔF~ /Z->Ed7@E _EpRY[8zvF${L%dj]bBS{[4WU#\u*&GeGBF1ńoo(llwAJ*!tl/WW؇^0~\[f|H b5omPZ`߽`[KqHysα}+D˒҈?_$Q9h)ypuM$kg3Dc-\@h\ad'Θ1`| N*nGH(B$HMf4G1{ %ϩ+ 90{NpWH^(9V^r"W@NɈ- PBKR JhOKW`!"f$W")@؂)yv}y2U[HS,ǽҐƬ)t){MA$ 2K̾o&U1 OJGy9@&@E9L)p9+hkT "B'tZTkIC^hޝ(UAJ?A(.-w3WQyb%^.4ػRgFJb Z÷\T[cnrkJnJh:'B >ׄHAfk q|ǘx_;@߿Z60̙s0!4 Yο9@4݋&25V!PQnKLO:-tBtR86~r׮`5,sBa\vYZ]RuRH+jxa>b7\ %<޶$}@̌KrWзz`*W伙p@ XLv? .o.(.Bnt<}A I]x/ P] <9`PhZz5H%"[![Gk5$W(߰8H՛4$B>U:bf$KF [;k-~e$2 hToL>|}xoU iow gv.2Q`:z[GPKʵשEev )5p7a]@?4fX`.suVe)Meoʳ֌پ;4mnS3ޖDž8Elw<K ߗЛDYI@ ^ @ɟK?vt])B S9F5{<6A{22sMZR޵0a\ $j\_0j>#`4/"4=,ʠó! L U"ۇ6uhI% ަD Gt1z NR _ia42X9s3Q&4 @y @}k6A 5!㍓0X. .cND 8($ի'c͒ "6F6 Ҥe{Gjo+xaƶ]4\*sbI 4޶Dz m,߂ث$+UZH%[/w,P梠#>a=2hZiBқM0 @bj!=ɗt> ^N)? CQYMTc8?|5jFL?*3٨58P$Fjdo35&wܞ6RDB@Lnq/ ;|w pK6ٗ RU,5%ׇ|t {|SA% mJ׮Gj4 &Ya F6lnާ8xF)u;4uGfЄy0 Um@vk'MAv5jl@,N.$er5>'ޖJz@8]wFż#39H0@~ob{~ o?_(@G =3 س`!XBeFKa;֢Y# [p\Ethk Ƞi~kڇT)~)x3*"'ݰ3*SVVܿZ,jCN21aR Zi;ART##Fqrt qH|<\pp_J*:"ޞiDk Q!@ C?Y۰ QRRj 9bdΌVEE"1|uC3}Nݘt3HeC4R.cJi\z\xXv,*c&U_^*TS}R`S'()cX^A©@'Z!<<t18@7G9'Q^nv- V e/].VR{4c4 5NBpI`wm98Q<bxW^LMIW.UvclrPZĪk =BL>Ё^C$]}% YJs('#\ fUbH #UUz˙h%wJhn; oљP:-3]~N*t㝓~h\Zܗ]Z-'1bx侪 &Ό6h2TԑBǤdfzKkeY CfD1^H 1{\?J$ NU99J|K @~Wkm .Z_,m* =ܙ0CA*0" M".1?RMqt~SGʪ3A!|>`?.p+Sx zx /N>79U.Om`tKn-gE i@jobriqXJN+9I!EB |5 `4&ޖ4j͖!&cx{z58 `y5 @  H)@/pUD uS 9o*ҏ#0 f@@lĤ D'Zp7@KJ*G|5u^QyHC8jTW9LNꯢ.B̬Pq0Oz+%sFRT~y*5>%[Ucv1̇Y+&c6f$M8-A]=* '~&Y|s$ >HS @Kg!`*$"5? tu4D*0wH:uIdu)Up;&Ο|-`l7?7;.9|=[E;䫁D v6YKmRk'8>f三Nƀ/]&'T:@;$ RTlja-ǚA66C qzQ)*ZۛюVK2zf"O`H}'O+G/E1&ڍ G?_aWP0S~SUK"%FXi⟚++,! /a{,d OggS2" ]Pb>fd%NvPIw[k7<>@?3Xx>8(}= 'ps(,QirA3CBQB? #$W۽(*ceA_fr9$݉|A>Pxh?$|#H%.\MI%ID<U UVfeP'wu얞rf三W; 9jZ^9 pl xOAKL&%@"%'P--A,+e7n5`ZȫJix8=ܗw긴X\ww.]JDyQy&*3.61wH&е&Uf5^)iGL#; {@>fȉ;@/ ND ;7ln(h Fp.+5p <ٮ P ~/DNvydYѬ6FһP׳, }.M#yS+ )V(”8Nbn/QV|jzSGn2GYPe/"ӝtHi ӚZũT? B IL L>f@^m4Hw*Q hR/2(< Qp@[ Pucڥ> iT!`_Q R'ckAT%E6XHi<{SM,EjA*~`fɡbb^)y*bGcw޲;'=6Mgl^nBfAh@c@>fDHA89w_*)<r)Df|z 89\I<N}3lP $@HE@zp*8@h{iaHقrOq\^]Y}p;LUG\NCz^;g8>* SqO|96 xA6"ߌv.7^VNs$ H^f\Eg.sn xx8W$m@U ZewVxixi<6L;x A & Oo:{!Ӌ>ZPd;H-33&KFS*ŭ2M(Y~dJR.발7r*Vh)~f`sB8w)^ /`V.b&YR>pU@>z]7¿`xMrE쟤.¥RQ8f\Ix eU]ON0lY^nPp*Ys(T9Cx3Aԝ1秚28ow!اg`cɤ&á-X=SH a9@t\d:.|rďk ,vR;;`OMٓX{FMDrZ4SG~fdC=^gDHm>o\g 1@y6P.|=JPPGLq[Z $P@@d]'l'WHm>|9 Dk]}1(vcrԧJ[QjDwӦDŽpA]NJ!ڦ~֚MAmU3c*uI:c=DvEL<:ZWU4(X(s>( >fd3^m  A*9$ $*b*(D/R%mtT<LTHPcV7L݅ J*(L(=giTR8ө N4xE*rI_ccMhL\X]|y E%gGbr+\;~&O*-#B;V_)V֏ LfW陻Oi< <fDdgh٠o0~MPP3@_Z7 +%ZJ{H@vmM~j?K*RX>q8۫j6́K̑Wmh^֚DSUTIL鑢vEb\BzW4dpE@J芞(fdD :xv/xOUe$ 8j{Ga\0GTG_(-X$JH pwseՐW&s#1Ib*JG <$K, 낀v\SX vE֌*WRAۆNR)=B'p e$ɑ2j8$. <+^woeI,PJ ^WQФT>UTZ"$@k ~\*xLpu*lzҳ/G.*ױ-t[͝P;5L* bqæ33:/J^j6,g.6=T*b=gaNNࣤhq h^f`Dǟr*<`;M Gi'Q`Ƀ趼OOH@H(8*>xʒ Ȕ^06c6q0dH*CX̯g+ő.'Riʼ?IntPIЕ]JWu"r꥽}M_t}+!{ԚE\4f~fdR=@l\[ 3L{xG} h[*2@ԁVz"w!ӊqRD2wp :X2L\m@"/U]C+k{i3tcy r WzƝwѿ q(3`?@fMR%1)"x Qᚣt%fԢ~Ot.7c+ ;֜|E$:AS[XO rw}"{P^qv=T;c+p<2 PA ᩡqgdp*3w֘wiNx=[,Amd6U6Iʌ'w7?qWt'6ϸȩ7]`Ӂ'G͢>*f~fԴAu;=Q0*xb p^g(8#iӚ r XP)tWxϸȀS>sF%;]ՕMG^sLnׅ[ә\ zhire1nB7P”q`ܪz5rʔe3g#umo[s=3:J@Lo7=ⵁ7DTAݙPd@>>f(RY"zNJ~җ JL >f3$2AJq+*wgwvfZo}vim96o`(殺|m rn= U]zdiE}ԃ.slEsE0$5zb aV楾;ss]je5 I3!.!J)ۤq3UE Ak >fĠ1B+]@? \0TUeT6HWF=T/e$$T4fd02iXJ:rvbF% Z蒴 *A\C;;xV%~19.!&{6"ps.b ĥŮѭSlPG<#WZ>CvTf2xA@a.J7.sYzvBjzz9Ė NIZ%IC/`Y:w!sv:(LY<AWğ7au :_|R5Hvrjul0ڕO~*Yl5\9΄s<)=)K@>+y Iƕ2U'(?@J!>f&#&}ߩs$DS:`h5XXs&.-v]ÿ=9RK;ҩW d2wf7uIfgL'X%T)yhfy֐ynOؐ <UA@eIT~rqh&FBEٹBq॔PE#]*RxoJsw)os g: UɍOFHO)Z W XX;1q}7rodL:Ԅ9^zR}F4LZ*B!S>j%,٧1I@>f2_:̟x'@'磜z(PJF% @j}7zFS2nup cp,Z*D@wH{J^lZ5颥ovy WshcALWT> =z:[ b.裹P/պEbGk9=1m?|EP@*T >ft:"&};$u W<99Uxg.GjzPE<yQ_ 8}Sls HZu⥤OWp1>Mv^Rp7u MBi;$;YnIaX7ڰ86,HǴUK{5<Հ ^-1.p)?0#S+Vh'o,<>f26c6]"'aO859hVԍJÆj7PG82bt_ n OhR(qF6Jl&qkB )z/GF T>f#,q $glS\r>2PXO(􈏣4($Mi-7[eh-f4,2Dڦw@sdV;o& P}1x{&҄ZD~8nu;cÈ5(X؞GP$λ3 ) ]A%S8#on岌C' zFimz :DB olW47##)4t1 F[L`J4>f8կ6$wٻx(J@o|I(Whl-j[P$85*akLŵxkEb);*Y.݌.,0 ]1[#wJ:64uI/63t= TKa-& $jK w՝bVC2MPPSi$Nw~+5R\n,=Ҙf8 b:wU+G&%;1ZTܢEQFVQޟ =EmKВ8ևrs{wA71TpW`\_ih.AnF]4/^Z8МpD]Ʊir򽨻ilq5فGM8d""~$djV`pvysތlm.,#/"SG96&zr"*k+BϓOEcCG>A,@vO4>VF,Ȭ6.h76R?@<t0Y,am'ɹL>Zy*%X eTLAϦ52ڱ&F]y2LHsot<3QD>iX̨k]NMd򘩡y=.xjz6;nګ,%l4aSYGȑenMHLy .w@lmms-1.1.3/data/samples/stringsnpads/korg_poly6_drone01.ogg000066400000000000000000000441241247673406200237210ustar00rootroot00000000000000OggS4"c1vorbisD_OggS4"l5-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒlJd*u7~bo4dӽyuv8.#UG6##͈k]'^dfg`S.shq<"Lo&C+D}t@e u  5{%og{+F)*x&#,n^$ &#Nڙ-D᧺"Dwф^@oax̡F7m,t$Oe _\SU41B>JgP$'a*)jRa{ZNPUWĹ ,r\E6TKM[FrotEA[r)ML̼]Q㮃~ MދɰeuHMVWM1>.^E)m@hdO/ 9@O*bD[~T{^'PPr)cLk( WO(n$&8arQB K.rҿ5RfPwAwF;̧.0#V̈FtN{r<Z^W 9G`2A*u^[I%[NdZ] oL8]b:=خ׽u{^׽uG|D$5jy5ZJ0(yb͛bj#0lx\Ȣk.# ;Vマx8R|&R=$c.4Ɉ2ދ~s[愁i :ɻ;D뫼D1ˑ2ft><&8j: GsK %3bq/4ulg3\'%RaYSMAz\ G66*'Rh{i&qM. <9T_xNa v#Qמ/ƽA[%I=ՆR|4ᒕH:ln ),}5"9waU>OMA OL<&4 k~pb[ :cQ ouh׃UYZFq\ݨr em)դ)~BmwLc%IO:SnFWEgBm4&s@a< *tA0-EL< #`Y/g#P~[~ۦ9Aq!*>$:5 _\v7o!_Q9` R=bi /n{ħhfG3k\lM9O'SU z7&w>⯉7y^% _tpb7/o!f~KE9P :rbM%?߅3?EeNc8k=#*+9TqJ}0U]X0 ނSAsFI"FDk|@$I߱u|\{0G<0%f?Oؓ]^1 L~k~`8c@6y)JEuSP%)kEoJDyM_ E榓{Զ{tݒ޴v7 ey5OSNE 33`A OggS4"&&"%'"#.3+"$$##&1&~N60l3D@\Ż(?^e=k;4hĨJ 8,C>,ǮGDH`ҦMX^iTžx_ƻ@aI=g^| uժDKdVT'Ï6R$RˉH&)>+u@vFi&Xɘ.xjJl"=bx\ [5G;``cO$UZMF-+gW.4gNPPS^|PmȪ |]fxzB֪%PX; QYJ2xP}%L+Sg7ۧ4,!`-%)[}Ioqh#G+Ёzj@a՞'Ź ˬ} O+]^w&J[~O3*;'4$_{pwzE?)u `pZtWki4BU5ޝSrPif{L8B J -ho} Ñ ͨd.e7ެ^<= :*"􂸪R.Ʌ1jj28/̎ P,Hw68(/frZa$FsU&DHE9#&0})}׾ >*'ʎO>nrx 选*Vy$nj Rp=;utbU<-8CViA g؈J񬦖z~+ESb.jJqK_j{ >s*v]W6󆉋|bw/8qEԃ5bGPQlYU/S}MR̆ߺz ;361ǷȐq h?4?}lVNrK]-iC{\*yXj;& jϕ}uӝԊdgD Xe{UVlkkܒ VED|äTj_H{\Y_jզ:|)lz8|b dh & :Yi{~voM;w|;<vؔ ,N'pp7$=zg~;paouu6s? z}^R*#wNU_OtCI$ZW-gP:^]W`JSi'豅k]1:uEϡ&Sӥ.ho`8Zw/)W:>xEC3x}Wf2c H3IwR|rB0s5>ӆ! $ D.{tsQJ#椦]*^?颇cnDbEa,n`뒷O|qK.0puf/BEng%} 2 fLF]}o~bgٿ Rf$5|FH~ Pg=i09E|[{z&Z7GHik)3q &|- g?ipv%/-%Q_YUtI]p8T\7Glqȶ]& S&ˊ}$bnew&/h+RIlE@U9gwԧ?S ˩~e2=4饐0[P232h KV88^$8[ :g~TG(bޅ42?)6ɨ}3Xg G]fT qVh#;Rhhv /E?ʙ OhNW@ON7fSQŬ2)vŲLfW/Vݦ;lZ2yf%#̽~)MU \V$?C=ͩŶ}c<>aI%$n^"Wn1s@Ac@'6yyx,3|36NM3RȷPSG?#4='BR~N5.u1G&Oz Pz ^s4\G`c8ٟ~K>Bnˠ+b__Lq؆Ȱa_HԺǍxсK?rGwZgA9p(9т: ˷bl>~T=7gX*;iF\-C ]8 fUyFv%ӧwg8r/fE1 XӅi si}TOwz# fWe YgcV$pĬ~\V^C;k)񜫘rR;ll̖̊/-0~%T*<:b%%ϳdxBOm헥(^ qNu߳K! (hq5bgWU݆/ˀ `^PC0ê9OM$_QCQ"M^lo|uC,ߖB?. yi*SqUZL(_Lx V2[V?\u{^׽u{ܮYi%p@ TѰ4| zۢyvW@wz~StO+oZ\=_Z,^{`n*L 4U =_lqY;9eMLf} H` +6%⮎w_TIX.xo )p!aBִP OggS.4"ȕ"}$#""!(2'>q2`Uz(iH vdr62f\k^F|:`UQ[gJ&-vKo٠:~%Hi'Df=B̾+JGrɈ3f˼j-D@\"7Fe "n.߅Y\lhƌcJ~SlL/V1֋5[݃'1Tx|EqpSE*]7O@b0`0*և**1y(+2crg|~<'L n5+uBcmk/BM&ERM$v 9+0( u`"cڡsBQ U2Ǭ^:ZKUqwc]|ĮH Ϝ]$yY" @kE9aن :sSCQKV*:`[$R^ Weit ӉcZ@S-޽,VS}[$b}ޠ7*5+JT׋d~]Zf2"nwk~ۦ1`(eLh=UuIPᵑA>c#vM e^w a0+U:K>׍0!m?IUl\hE2_:h*RgƋ`6{i 7PlqMh ㍥=%L:jXYD;CB'vUL\4czok I 3պ8yd0_]8=$ %ˆ6DvJu'@AދP UU\xp_voQtG;I/rd^aat:za8]h97fڥw/dx P'ыL%4B|elGlOpvJh>~s9a 6s6@:,1b#0ڛ A$2|4*CJXrݥ'Ѽs\eV*ðqeW4l,>U (8Ո)XN

n_-M^tt'^}MyGR}wue %鶜phnx(y"0P©c\a>lPAp~hCl3D@\9G&?HWGʈqQT9 0/ ݔCpPX*gM(fM$<\rX]M Xt&u J^wCvaJ<

6"J-Ӡ/[$kd%ٷN\WL9nOw˜20m[ 33QHיO)TiZiH $C{S勝9X$F.CB0bD|/I> c#LM}w_&.1E\YW2蘕/.'᯸$' ~ 6\PyjL;AՑ 4iB~Z;wӯr%9#BC)Q٠DԃUW= qԳ h8-]qYVgBҰ1Vv[vLIŤgDI7ӕv:iE${`G;".-E/v9pifrUR1벴`ң?h-ps* F/U ?7 'te[4bXa8!l T[л|JLaV9KR ?γ0\ {r}?fojgeʕ=2r;"P4Hc{lz{^׽u{} ?fm%_XԈLLOr%=:J}[­ PUGж%f/}{Վm& h L| iYq",H?2\ 굵1:N99Z;,rmVZUZ^2cm*Ik@8QZ*剮YwY#w:"rwڟH`szz){ bcJ{VШŌ0@z֮q_`oniV\hΎ|UH UQ2hX|AmrϬ˸f0%E?׍],um9.p$>;Y3WU,9.bU(뀬.<'ML$LSh-ɦ{U符}92R@Q ] )Љ۱ϓe3AKly^rvb|\PU 8߿Tzc [~ۦ8@t|UeIy@O}lWF)8ԪfD[QjDw({QBOgKDm 4ݠCpf] FutPxz]wq6)6 h5!7& ~kr[\^=!TzAVP nOfINLQ| ]PAA.])N{jȭ & F!x/v$,{1M/4JْUMhk~8Pö[NSތ`C ;˔j(A&rЖ]gNڴyGD!%> 84kQu=ZC<`.bcLlږt-}KC\f]\ˇjO ~;Ef*>"Q|rC3y8Q {rr̴*R`WF}Jh5& X=xkI:.qQ9~]Er:),Vh(58es) B2a[dыٮuֈ3h4ܥ0ⓗpz^+ӆyD/_UGQ`>nh'@Pֈ"ؠ+QCcy⩪eI=Ig xKW_\IBhl%jk^zAw]!;R`Px)W Ud 7*-}Iqrw;/jz M%I1xHtdլ"{.&;*9foNB9,Zˏ*q۶tԅr_k_-)X@rv~ Ʀe0a 0_)yB=F jI@_tZnߍ>Y/C;FAL1T-h<Ց2oeꂫޱA߭T .{Fg)d#K~yjxx$i si te_׾9P7D@\5I]Vٙ08OggS[4")s#!## ,2)#% %+0(;Y1fyvhn &DeNk;*CM탈z rVwv814cOo߷2rgz.H\9FQ -v)7K}N-Ej&OxiKm镘861;+Lr֛| ~K9)9@3\N H6u5hݴ.YPK=$KոS-~ϾAIRg P .Ot+,oH}5GA/ j7.(Lv6HW{ܼqMEs(2 6ZcJ 6\P9@5>r}y=<|P}zKΗ4knL5uG=y/y;ݦtĐTԋ\u?˳8*gʺM/R•U-ͩ^[4+Vc=3D߄nK(esPBD?Fﱝ ?ǷEc~|1bm~!Ѳo4UNϳj9Ӫp(\vp,!R 6V *[EBU䒿8P 2 "wJwa L#R4^(&%ztO~0BavԊ_˩ $oV99cDLϷYϋ\2Ӭ' *P6V(Jc{l=u{^׽u"z ?oF? 4Hԥ%X&-5˜F'KnZ~F\7j.Ϸ1???O.ϿDj N櫘zM?!0'z7qꌣKVDܸ'W ^ !K)+iNpAGR /Ϝ< 6ww Ge\^N.%w+6 Hʳ㪽ki 7mD@\2D uvԹ5Wl+*%@ 6m3ɊΜ* m;?Aǹc.9{b `7ꪐaS[~ev%j5,=&L1yj 4&Er$:Lm*E E[~[ U-ňʘst J{P xpw+>/٬;Ϩ)qqq`Uo^2RX1SuhnKB9GɹŰ/2LPjn\m "x[_W4EGUKE9 & LG:<6CiDAq ,j*`|cHXG=+C׮~`9:Z'4!4]> F¸V݈*]YZFj,#T,ōFD[Ģ;)[l z=$ @+*ݭu>Ű%2Q. rb-VfXRd%EuF.GQ$%Iq(;f5\.ESUFJ_՚”01gZA70\Z 85l"i -1P ̍1`*P|YoO`/'z_(w}ѥbQvQz9ǔ~vRxVC/;{c46%y7HlNEy^H>rpLǻKNZA6u>Lt3K{~Հ0T5%U{җRK?z_D`>d5 c;lԊյ~ؙڇWE"j~+o _k@oU.Ae,z.YiSrͼN0t.2V~.2^mw'{+ bHr4ɐCm + '-Χ p5vߏ+!MɴyD!mQ_v5lmms-1.1.3/data/samples/stringsnpads/nord_ambient01.ogg000066400000000000000000001571341247673406200231060ustar00rootroot00000000000000OggS7"AKvorbisD_OggS7"Ci-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒ7Kb1Fd\{VaG7dQ"`k][ Cf8iͧŎD;^nAlA ˝1#b&mGӕ7hڲc )ֶrqΛɮ>ڙB"l>|ĢNO^XҐ* +jtq;Gm}?bIl${,2*ADxgǻyy&d7Q,[݈p|”K<<ibUλIul~n"&ST ݽKhBLi 65q9[aK%[潾_%ktUuԥ2+Az2ÁZ2PV^_% #)2 'ujyŞȇʖJ+U(MCSYe_/Kn,r6+~HA`Ч,Žfglzu_X9ҥWVfhG~;a?%NUJw>G@@'ۨ\v !SUBgk'罁 W&VځWk.oUqJ/C*hm9P~l0է]>v,A~^?WϻGK x:ohAYHT As͘SfWB2AXъ-P{g'8zѽgD},aC񰦞ybu+ lno?mJD71mƻ4tܟ[gep 0YJ.bE+J=Φx :v^4r%z?82(]cD A Lx5kHdMS3#EbNX)˭KwۘF{Q1dR")p]|4/U/ؼ?x="ɖ+uBewr!7 u'xRl~IH'"Rf8@uRXagɲκ┑u+h"ig: U3TNI͗$&*pM'E]qb}汦E)#ԖODC\'7*PC\k6R mkݲī%H*wDs|qaLhإ]~pE#!|A.tp2F@v>r.1Hj[M8̃{!AzQm`A[dӍt=sLz EW#JU%C;c+4ti…/u-#XTp #\ro)J3N0p$)!]ܸ(n~4x֝}Uwx' PE. atߴo$H[8淉Pp9ƊO_h)EKʷwnRs}|6햣pS/íPam/w^݉Rno2wWBYvz{[|޽51zxd6:huԋqVx"DJAį_k(H=ts<'n&]ײ&"/а vWB|,< 'L̽. Q8)L1jz [cw -{`2uYq 6@Di+V#N' # *`>Hŝ]A Y6.N*_lOAX:T`U O%S%&8.DV9E_j^UmR8"A2lv*3nAzH'LV3=<UڢK.# ) !.`.efe>!xV݃첞9k4؉L`>Z V] yj7OggS7"_VcɿžHE^FcG]5ֺ'FtznpUyH:%׳mK@X!ӵ/RZ*;sTL&䨃wB[LBYI1m'Ѯ>[0 Zkx /]pjGPR맿L^#|TVW7 Vם$?#uv]{)(EIC;S!>/fZ .G}F=\bn/u]Z5X;5'v a\On1ݔN S>ÙfA`|k |74wi'3I}y.1}oЮ֘.}mfn7΀\jSO"ҽe%Q.~[VquOeX5ElY6vr;ml$,>wDטiv_?f.>{Fw)g\Y\fNͼwU]1X 7Cf7R]:e1z^Ib09 ZzE߻㮤??[1}Qk/VOT7mk)ֽj!y-GEjQSYj]Q}Os> D#3vz4K?1oFmȨZ`jMøu6sVy-,dM*{)h1phMs9!&?/&t97;l1Y}}!=L{a 5TU(4mzOOS]~`K0 ,5h嚍^+(o҈5L^:KD7 Jg}̼Vl:mU|=2 e;cOՂ^AȞXVaZ3Mylte ]\lˊJ^8PGUֶ H& X%G1S?hJ5x,wIB4@K,hsEu_Kڒ+<7˗S׫+jZYJ( sֲ\L5S1 vSu]NB$1 O<_L4qS3GVީ ]25k4p7Ħ܍cNiURT~x/(55e륭ͯҳU^| KUϥN\=멓A !MW uh!{w1@dx[#̤| d߼GYL+W]|u5~ʤNȨ;ZRW@U:澟Ŷ2뷕Z E f"iM25c 9U|<(4c&Ӵ>H]_vKi4?A1N!i/z@UeDucPfWCt$*yD9x9;z 7j0i"gl8I8: ~c@S3 f,ߝw[ yy>rUNSY^gQT#Vpb55Sa4Ҳ ==5@jn @٬\w]a~D_hS)xU+hi\UBc =stw0Gup!kZg#W#e8f[5h|oXAOdz?g K]8Cо)mT(a:q.Rkt_gx(Hĝ&`I5mwd2-Q)aT~N#1~-W'͍;#r>桡A`S T9wΫV+տ/ߨ# &p7 (Vg{4mFu,#PUz :[qs< bL_F-zEV#ڍ,zP:Nfqq-1gD(r8L~w%aFi~ dv3IK]ɕXbV͹hFN@+80毿$n vM`V1n|PH0:'.%Q~J(jTD/(^o`V,dL]2a"l#'VɾxHnuS[;(#~';s\O H쐣 $ϸQ9m%j JRlX̻,甉U60nAk/1X WVqtY #@Tb˥W0_nr]'c$"@8-'6EAEyP ~q^ԓM[[%B OȰ x>DH{uLXvPkPqS3z+-.Zܙb5OggS7"7Ŀ8'[ٺoW"ĸ2;:=c#SF?M1=/DZ5Kb+DDМ^&xSjHYlЮq"0R6 su3]iQIzxw DF( A<67l5kc&ʝ{^|/c{KwWS?YՙiQm蠟Kj >KL}YV ]9f|ifFxsz{@IXa}rW/L;Ms]"WU{zqHy12lj(A|WxijfO3My7qXO*Ɖ~SﭛV($ 7bS' UgNa$Wʤ"Fn"}={ݗer%Oc23cJIי$qTŭM~mGVCG!9gG&@ n拷eޅx8sݔ lP}{Ag? J") zbEKWꔚ˚N!CFT8H.M"I 9΀*oj%E+^ 2˘##Gsܨ3uDMe*GFM}%N$71ISlN g'y*DEyEV5gB K/@b a OՌ ,x=ȃԭx+6穪_%MAo5SQWB!7^Us^e>>l=w967 TDqN NA;Shx}Ƽ%ǠHysdH$5 ѫ;Fr uIyX^lcbOe.{37놄uqt^JE;f5C.f_)Kvf[tN'4:VU1 $T%QFDtY [aT:v(Ԏa)kQ.Y%Bi&#j4cG¤FgW\nmyIn#n _VYM굽l:4aU[x)v a\(rbxj'943)^03w͹!Cj8*x;1Ѐ"k髳!L$w]hqdnr1صVÌ^%GEo(4JA4b>nU ڎKtNO߅¨Uhp ;^EVy]p1!Z5>ٌ֥|{Lv|Ϲ@q%m#e1$JYe?GWj_VfDOxܞ #؋=A;A/xG޳M{80#l)JG,U㋚^Wch%3- X pxEBKXߡr P͂٬ʖ=DTM{^ʸݷ| ajwLYtB2G¶-ޙ~B->n#DD4M8&;1ћ{jXs!ҢkG5lSt zT*&_[,rHJh`;b sw5nl6')ń/W1͊&lش8>W杅@H%mWV*Mݪ\d7)f[ZkGܓA,\w3xOUM|}ލv9bF@G - +(dNkUf~<#A1.ⴧbWCs0tQ '#'Q #ͤ7RgR݊xV4D*3sQI=erw_C UoKT|}6loqpПjKg 9bAkƌF.?k#c^MݜdWrbȣ@ݍՎ ٱ!xM@S"b0+$M%Stc 2F 2(^^J]% Wj&K0b'X8/SDnO9$+̹9Z0rg:#cICUq}WbQ=V-Dtfr69rf9{zg0BK{ffG;wՄ=FdmEV 4ꐡ]d6YPK>MT˃s/&K,m#wS7Ucr)OggSK7"ȿʾ%ϊSqymMD=,nSr,4HD^1cF)yT>䑟`ZUJ;߂GSwD,/X Hk/76P3FC(:C/]俋rGv[D+Y%tCd }0cRJ(^)R< Ж}WϡEl:. ks9{$~eu)n\g %\@E*bxcB/LVzuFy}Ab {JF f OU@f~J5zb?$e]TO*;V Dwmܘ|ċNC&,`,%aԟA# :\SwVU_e0Kr~fc+^z_j!z1Zgtg-P⥅u^b(+n+uf-f\$g*V]T7QF Vs !/]5S-ak!ReDkKú9KFOfj.Z]wuCD35_}?sBBe.D+I6n"Al pj!ێn#m  M>~tFD]Is^Tt D,m; )v"A1]QD I%^;r/]u`MH2>̹*/~-*'ן߮Vpm% g,ӷ[{ _)KyjU̬ޞZ r⴮͝m9"S3!.o[[at5l+ON7?hHFVBABgB+p^/f1,k8v8WU0)x7T%̐I~b#t9FɔsdeZrUz4Ӎn6]-ב-Bjn9YЇ 3cX=MgWy0٥^+\/vw0n }L81AL+ݸTT~zV\U,9_eu2%3IGsIx@wʄl8_@g@u !1X5|!/ fQ7'KRtrWD"Ɣę\~9-) + )՘rs>tn鱔e92tPx/m 3&pf|3ݽ7xR3wh/g~*k[gՒ#3?B;&e^Ѯ7qhłI-@CѨjsvIOAܲCELܖҨ?_3t+"hUn<&p/:T],3z!u$q3V bWL2hoxWA&]Zw`0MI#me3)n!d88/o'ɞ<?&H(8Ŵ'҉mGS4x+*vuȫ9v7J-Ncկz[X_)fV\Gg/b|2@GrL)4lsMM%i@h{k&fM` >Ρ>ޛ&4&yw!C|.X j@7qNy+^JYeiV!T~=l' $ucG+8]%䘬/5FR01l:->}eEO= ^  y>wSۗҳ62:t̗{Q[HKZ>O#Qm+fτ7H]y^c&8jB2(;Ct=ǎLu$c2ކAv( +nb#Zv5i=sLV ݸ$!j^C3@M*D˷Esc>9k!TTYu|]#E|!!M0Hjr7YD SD^߭'kvU)&;rg EPӛa덭7<'FVTz=y1b+1U꒔v㬦x~99+ s^p`竢8 *(_#Bڛ Rm ŽU9NꭸH( f.wD l*W7%omDM>L᛭$0Xse3gv[b>*z f|mgn"wL%I-s=Xf6㔞F8K"1T[a#7w5O&RONekhIkP=WjrѧVr_iy/\k$#r'QI𚵪1E/a" J=g;3 Y0۷DmKJFW3[>'͛pϣuW A_JI&h C>#Yj,.ש$.Q2P/bH%}WFaWMKrUٍVtW asEÓZG4h Z˔ǜkrЭVH%0 OY,UވlH @OC׽$S}G$s<8׸lDF~T ȨYVpC]gy WmpBzjcY%jr0\֣;ؼH5]E/5%ܘlDkشsfXժ< _11zgPvmېRw-G#?XҽUQc/dDv]ǾH50G5aIZ|t%}ez-(`cM!ho fHAEMu$ZsSvD(ŲLg_5bby }QW皺_ Vgm_ָ[>>K饎Z×Ru}6q\ \G?jͥ% L[3uJj2Ǟ`hXz4՜ L#ʰ[FGtm ye3SH- ]<]F[՝$ g Qʐ ߚBa*TҞԡ0[pGku/s|~]F@<XwLϚdvU(4Q%ު|i~aHO=or'l)u-*n׉gGCz|a@_pe'ŔyWgS6%'&a:#ߥUl+_ dKF63 <]ފCI\1z\ p= O+r^N4:KR#Uqeq+PMK~oqc[$qmQ%xx-_ ÂڴOڵo/2wW?:/jLN"jqo÷ ,WQ5S|M0&ԌF܈FFW;uVmH_>\\0llGHla~QT?O/9cZ(-[##>ӥ#um BlM51K9!Bرuy5:J^O_tJ6.;c-̲o`i68 B5U8&\OedV*YG UJ;oꨗ%I|Ռ'ꋥp%\n^b|T8%)$`r2Y"uR&i<LwaX9Ԫ9c[r|aܢh+bGyv}(-ЪrܝQ&\)yY1?R]RylnkXrvC)^nV$~[*dU>&t?K@7l)7)HWd3q ؉dJt,+f+&kЦ1/c)!^-HI$0 yܔ> [Dgj}<4*1f@5Ǫ~s'YoPkq8a"뭧%a۬ 7Rr:j褪)U/ *lmn07n#:@,n/(QӉ$*\Ϻ%hi=0Cm\&%>\ѐ^DOD'SeEN- Y UU=bF| ,ؓ,L I(bВY"ZH T:dTc @fS~܉-ϼ9P{]Tw*oF^)A@˸iyUH}E gge!Wh_ݹȥG9z2&'S-^툸$<1k1?A?Mt)sG ժgFҿt>LYi9|z%p$~7- 43Ysn%V@tKRWwMʃ+I?ьDݼvqQv^3O;b~\ t:Q~JӊULS7>ZjnA,/C 'fW;H:(5dR^<2]ب޶  RV\ aǾ_FcQ;ayzjA&muJ~}|;nchDdޮA#'YoOֶf^Haž7]1sA|wXw<@4Ds|`Zlz+dw8!=R'x}o4$UN]t Aհp[dvc8 h*(nTvVl.Ң6-g (#hDpO6nu5NI`yv|Z%2T0;;wc3L=`@Aȁx7:~ G}j--?j@ZK鈁_Mj2m:Rwr YSIS(j*;M|̭ap`Y@Ug$~vy|.MuSiݚR dzY^׎ToH 4^$ óLΈvy5.>e}yoVH5 θ1y^92nR4Q;{1jaG( .E&!U+K `8gN,HG>q(%}`g;E[#UkeWv}"zptm6BK k,cl..;;N}}<5U]!aWms`\%sP8tu6^>7{W$wsq (z|&GU)>1FU6>I q\*=@wSx+m_CxYʽU N;JP3QmF=^[qal+ *7OzM0|,S+I$[əd 'p^5zS.e|2LO5y)|Hexi` Zx9sD/ټ6;B-&~G8[wi+jXH-+ww -J\|ə. {}H6@q<_M>C"y%W'k% l?wx[:H:M!qUoa7;sM%qA֑Ox2N7 hn*4ʿt켗K&wҡ^l%!fpEqf 0%MjU\[0s:. P9e]Q `0 \/:` ~* Yfh@:u7)vg剴6ZF0 u&sP8w+bMS}^kJNR*k#ݛ&CO,2\+ӃJ"1Rf)OggS7"ߏޘ<:Z2g-Թꍢ7As8hUrʷ1/gI'Ƶ20|V-:TtZltaS|0ø)WY>z^Q)\AiY۸^†=_!Hźj]#p :cg6b`{ǜݨ%;lO5!n*4 ?RCiOwVgtOL.[hNTx\ɖcC >ɹn Rw7D}=9S5[, iԬ`fAC"žY;:CDgƝv)4xHV e>dkyK{Mw]oLl%!2座1o\D[EDϏS\nwWގ)zCle#_"ִ]'PUue0xSEb 4(0>PcPk*C|?ʺ(t cEQ&;en:tYpl_uLоk{˲7%$ؘڍ[eR$MtNn&U GbT㽶oQ3 yME?w̒!H8N^0`=~[:5Sz-I]WwJc><5`'9y"C =<$ $*iT,~eCQ* Kd Sv !ڭ!123vkXa<}<*"\;U:numVTrخVm9rRMVnIkG*EcU%2iFI~+2$N)oLa><>*VU|!kIͪjq#ֵBX&W Y߆w>#Eԋ0@8m]O-8J3WKEGp>Gnp,l-Ѱ:%6ʩ8QԚҊC>ߌԆ;=>ÒԋkG}t6JxSQפv_I& ~JV(z?ۇKwم%ЧCl"_eߎ&2 n|&.1m(4-k 2]YxHu9ܘ#w/j5g2LfPFsq/3!${39?QAft!kr"o='ZLijK얅- [g8Zq@P)1;ڬ?WOcNGݒ*10I )ST=ZtQKIRwW!#C> ^JDRf/6ݮGr%W5NHPVH˨زekHE甅P.%~յUAvf3a(D꣮J_jn-l淏ⲭ:ƹj+^\.j#؋ͬ9F\nvXn0#:8H2|=nGJk] /Y$Ι)lRts9Ҏ-"PP, |}qͷLtkFΦ'_=}2BU; ⇐P[C /-!(${_ΨơifbfS^ $ Ж^"'a=}ɾ#;/liDh*#ww Z;B-)1VQ3R@޺6!L¸s25q 5x>:SIļ󭽽rR+OZEz +vxYĠfs`7bȕE׸X j#z¸M>U6EZ<4Ofͥ3)^8RoRqQX"{}9+6i=Pc"6ؒ~W0<9opg1nʔm z^hY֯)>T0;zeN*zLv[F^'~i +ο9,ZM"w7QXMbgFk &ZZۚM GPԋ?+j q0d-aPԙȐݒ󖫁s͝2s~ZTȝπp2Yܜ{kgP(Qu*z82j6Bw+qf+ʈFSRYӜ@.dCMah3/O3sާ,+r׏[g⥾gueZgfgSkwWZE։w$2A,kNm=sȒ< *._]Q\`@Bzd/Eb7n j{M;*q;ēAMg>CNäjn*6UEϴf[<5Em k 'HbZ/MD=uHW=saC_ <1c:r ?Xm3hHŗGFz'>f>c!~߳a't@"NrhC0vֆei(P]"Z :-%H5\k+X,'`*x^\-E_X$%uz/)f|fۦ@MlrV.5# 4rAHmFPqHWiuHgean|'=Ds X*(b 2/3#nRpL{r2Je8.=v"F.*X\Zܱ)}9+j~p?ws=sCkKnMnkM6-b9 3 ^p_<焓+`q@d|Wda/|_u11y%a 1k)ǎ;@G%6ޗcv˼iXwSX1xH!bZ*1v˸ZAD|Y>| ɼ S @`|*V!1P,1k{::wVW?e(G8sv4H6_!Bffi >x-^ԭVM̜?L=84~&G4,!jճTĂ)*,H%"TZU޺9Wc1-RT]5 N+ YgksP(_k H_]B+} `3$kZ=G9m\@Le0VΕTs9G )Ј%:OggSG7" @|2 $<5߅sgh[lGCjVU:s3OG1;]\`vSIRt5fBEДPPF9}n5w>3HDs_~*(!|BB5 q/L{|K^sQ=/7 'v*w] 6Oz_"6[)"|kT 4g=+Տ Lʛ"z˰XQ2 2nSG9t+x޳3F tKo,3@c@oE&5stb>gpEok:І>7JYN^U%GR>7ވ[㗅ԽP^;_Yn[Im5€{sR ss^zN)6e xN:Mv ˚bȝ(лot?-"R 3j+#A6jj sŗ\,@CoUBUaXzN\  ==U-./˛Ɠڻ濮>45$\TGl~68T9@./TvLPo&74J;L$wwg@2%E$HNߍ/ [hpթ5F=s8P[ =ovU<ѡ9]_7(pv7ZqXA<u\mm4kdGQ77'U0ZPO"#7>|̚H4r#z ϐr>sFp:v^U{ l_zCYϑ6cXa^Jʕ~R1uCx2⦠K#7nMl%QK7bI},g^,U{ 'SZ}hPSKu 3f[NŚc9T/5aL@SNqh }`m{,Մn;k[Ё@)BSYiz`Z7BD>3jH }#Z#4vx< *2zӛMw3 s`:]y 3ef&bZ+ptgmݗB]1`>’UA }S0b3VoWzͪQgdٗcWR٩P8K}YKxѥ >y\,xK)b4XYShW}֠UEdkGIH_#=T J;y)kafP?.Zy윢 \jIyIΡd&!Ys^<@~Z})v$cU?FLԬOlET>Jqou5Χ͸NM1WGtQ#8+ (E?)FJGcMV$qFpLf OZt"3=DS)Y4$7KQc \0⍕u3? f]j+;h{J㤪C^$DJ2j |~:pSy#HjU9nf ۚT {&Lk1P#dԾa˹>g%@7up.;Do6[NmJKL 8Ns'>1l -atl]X'8-b.]{Sqõ'9|!~w%Nfvw?LH5>6fN^| C?nO5II Ż{m1LFڄ6\FX<\l;זerv1"jC|vzuwK%Ŵ?.~c@tFk*i?èTrOț0n $G2 91\6^gWuUjs4W#BbeS=>VE2#C~|de A;LdOh݄w.UUŻQ7<}dlbT3kh =`h {N~(|LdZZ"L=ƌdLHy0k`";=UdMՈzN;7JӴQ{tt ̕跰f*Er[ |u` ؿM{IbPm݁s.>rw "I]4}3H4q=pϟ?q2>qhE[U}D#댿ɝIK.i8N\LF[|F[+=_"IլJy[_%#Ǘ`zV$J$3,Ze2UOwYT:3ysT=Gݘu赨T˗d*XvUc$b7 v:mmw i4Lˁy)[elzI&z$C%:[jr[r5L*#><R@}o?O'{tj͊3 @ǞgAN+k;Z3uB R0Mӝ"1)WMcR}1q 4Z,N]%n>QKf9j,6bKwo+2i+לF}}^._Ye&<1e+RNZW?AŽ/ݝKX&[D  g}fQ~5k$>>"ںKg?8Po FJ\sF6CIUP;C4nU&c3ysG0OpĕG9R]@=86 J&[ qN^D`<#.ohpՈ-.PY҅h-0R,mҪ2Y`&, ~y|ڗ{vq>EךUǝ1(58LH;Ҋ34ğq0b84\ ^JeYd>DȮ ,\m۩R:]Hk%Q!>N<*9"&~l+aV"=u<Ц=|y[)0P;Qܓy> .~i|Ĕr8zxOh[K'_\u(}w3Qij"lJ*5L@9cGF쓝3j)*i4fc^p %\O]WFgYsj8] )IK|1FXJjO"ԡvfi[0'}(T?nnk}:MQYyl ~0a"sVUcnȞeIhQn9ړ1it*G"\`K|xwe Y e\~nt(7 {r[6*R;(Uv]TFsԇ˫2[#.44Z~tNQHE[*7y:i:B Q~|iOL裸'b +Z87gۤW!pTH͐*S}⛋^I:=tP>ګ7Ʉfx4np ]}p+Qv3&|(437g&!.4IUYD/HŔlW" & މԘHVy-Do5|kJ0BrPh{牉!A+jTVl{`03*.0^8# (s=btiyh\mC4pj\Q$ڔaԅgD=+B õTSB U?R%APKq;iJ,)9@~y|tlIZRgV.4[=9%!CqGorvM~; d$kN܏J4].7dBX}z+|ou ˋ]I.7s:u~y[5k=/-2+.*]fpI8_HYv+\2vrg0R(0.Gq8v"21eOfg*'jMFr^ێ#Ea0 aǯXiֻ!^;˅ƾ@νL|(qBar{R2]`92%@špP}kK}s 3f f,p6IFŧ5u.I7GZÍls݌~|B {0s jZҳU=&Q 5lQknd@|Ѣ}խ0~UXY">ݝH8=nZt22$i7qWRQ>NA겉w%,=*pn ;:^n5/ӓmd]abO ;2x+8a=Cw1ŝC}u]21Q~7^N1qcQ˻BUZL0"9JhPSV8.Væ/m2leH ^ >6t)(b0Z]Cj[+~d[3hRfxR4PT4A= CD_9 ڛX(U2jyej0R4I+wIr;z7U*ƿ؟Ww_X!e=tIP(nB(]Gp(g+ lcH- /~ɼ eyq*C'P^0h K.UE][$&F e/]edz+ X>tp+X!N?2`6W8Y`ĝC[3nWDX/n"yQk75Ҧ8\ 81iurhtMJ'e=rR *ujXŨTi<,@2R1{\ wg&Q`MI4<=emNmZ΋ɲ-ZР5Z$ IϗcF*Ap }uI"(E=bv@6F-Q2+S^x(*:AV9R:I0vI`5 %n/?6adZF0h< ?w3.fΪl7E Cp/zVu製`vxDi%( 9?C=W(#A J+_H+λ20y_q-T-v!o&5􋵔~eeˣTCk~c+t5ӨDKHe7[YiRB*y7-WDf$dB 1LHN*3w)uQ.*ѺVϗ{*rc:Z\]Ou0$LTХE Ri7eDo[>gFX n=0~rRNtcQuz&ފQǫ3L/34Qqm6'61͙1 >lϮ3+yӱҹaӡqT|c4Om:1M{td\[teQv3WMvef%xN71D?0 :/l];vSN+:ΚʺT,9>d}@qO_r~|Ԕ̙p8T PW^1,F>ju㟭*6댋>O_u|tF3CzޘLnU'دZ US RP֕`ZtBY=!ЁLb1UJxBVU|\fi&~?1UYg.Ͷ@gCŠ|S4W7*5JTcu&[ъh= \OڻEZmz?P"ДL|2uTnm J9'piϹbLH^PwieN:v&d~0Q{ٛyp.Ltc\ܚdq' BkIlgGZsǙNFeI9e+.wZ0*x]4[L6rn󷞼 .Yɪx.Og٥2aʚtqnʬ=c-~E kjF;j?*X"pD7̫ΞNa@Rkq$+Q8df6jp6X8g炕K7#,ݭ-d5dDF/~N 9RiJõ|4~yi65xܩn}` 5frEZJH< d}gU} ¦PCFIGh3y𥃕ߩZtWhڒ"_&aŮVjM]0hX2N&/2DMw jk;WI(DUJu $T. &aH.z8S.'(ir͋AMћ LxsF.g7/&ib$nҙʢLQx=ͪ?TD)+c3@ښbZuz[~.&iZrofta_Kr^R02>·l d:zb4sr 8p[Bd?Ќ4b0QgM:xl"jW6ˢp8v[+@%i| ;>GL@{:UE#>_ 闷_.1c;TZiCϖCq2ajHyy Ztw*fTMT@pcjtᯥr)[1ȯ| }dTu{34Lr4ۑי"~'uedMd9eHɰM* ̔5+G:e'tOggS7" 7KhHyHv*(5w ޏ+nIKM2l ;*DIH{NoK%F.xU:< J((Mn7M9T~zoax ڨL83Y ԵAhR}qˢn e-iQޭ?\jZ٭AuMۯRD\䖱` CkA> 5y h^Y]'٭Tϑ< t(L9>*nkdOPYvJ:L'?9+!V;w]KJUG'unD }yw u +4kN4}[U:>.`%A``5r:;jyZܘD۾[J[qkl 1>7 ePAx~5)@3`Ϊya/ӵ9F޻5rnYO`6K%j-0CA;ZlT8#/1?03qG$ukM6]]X${05Z%xMQΉ PdMd>wЪUݘ( ?; -OW6+jAu|2ݗ KM֚icݮSv3NǍ M>ەE{2 o-BK5W?-AddэgB)]%b̤І~Gnj[]@1I:D&T,oU$ǮHi 2+Z^iOOBAmu9vǎ 8w(0Fr=Xa[/ W鬗u27{㙄Z8KH][^jD^atĄ7ܘ/1s^Ff!';-6Q $~_o= rqNl;V@0HPkڀs6#=a[TMzc-^i|?O޾agsժrEfnSU^l%郦a=3#fQr)ab+bwჩrPe^ynW{x>i<q?r+#7uu Lxn<ƐL<WZF3W ME 5V[3, Gt|/ۓ3yi !;Ȯb?rx:F'!Y7jlk5>mUcH< L}bؚE,c%ݹb6MM0-q!8Z^6h<9jHgœl fU<7^l;[Ikǂ11@5/ 7R[j&EKr FHbYUhǨŝQ ;9]hFf*KdpбĖTby= u>j s@}rsByLep3z(2֍ʟIdhi)~ }WoLd d?Y5xww&Op;ֈwIj C[(u;C5R3K`}k6,16l#Tj2.:gmŠa.(AVZ3K1mB-֛s,}щu1 w}56fY`PeOspc~[fTx<+DyW{Mj3WfPOª* )Y褽4@xXx .MT5) KMz|%2 xGtG> M0&͟%\Pɱ]*N-ݥ_+U)ZT72z ,om֡@o^%asp \L9ĶP)=MNS*vcpP8$0O+/| Gȹ 8VU_L0h|i1c\w[\EDt<\,R -ޏbl*-ꚍNe$I61:8XRTLB;Lker"DI֪ {Q1DT]Vd&9 Qp)D.#,VwͥRJv;67jqOUY5+h<?R)S,2dՌr%q:oޑ0tA WҋVDKPw[{2hpʰL)1UkЦL:26[,L*^I<7ϡ/jJ!r#]U;|HEgl5&ޑ]op58ch7RPI+}sug&V:SP5W w'_gn lOEp '4I9-]jefFW"D6UY=j~w )bT*)r\7; -l-J>VxI,;pӅL.3"բ SZeMl #`Hӄp.0Ъjf.)pFc,ʛT;%J˝3aͨ#Nx9MFF^~kN<=_ޗƻ1ncXGkʈ7Yɒ$2ZHհ;X`‰p˚ddԏ?SfGLftK(M(ւtAR0S,H J0M*VUIPXtZzX}h,5uB.{Di4Z\0 -~Ci}EjA;̵Иs02 0IW ^Zcc]F8 Ui $V "wZo ƇNyx N;>Z8O)Q,"ůGEJܻl [W]_[:w;Zѕ~i 掱ȎXR, riK NWBkFRw,Aw]xr(FXI38 \ oU8:OggSC7" ɿĻ>< eb=@ͪ%@@Sœ|\urNRao`gH3i%/ӞSݟkqq&'SB 1hWtL]kB9:F9n<O\@t^'sw2\zld -MJ F$!! N豶X =E m 8͜zE dgDST+{%@v4&pg4 7nŌh<į `>NJRދnv EjV.7U2ۚl4:* dYx|H7YuPR'XUV\xCi\_c׼kZQxe{Z+bv~y+󫏗*m0׺jGGA".Ai$hR?+`rb@lIJHovHGL+L\*qө\y>vHI0khCDCVJ_h͓3zdA86di4m6Ԋ^֍H/rm*2ٽm҅^K' eT#^cM6>v,R!՟TU`>A h;"sxfwutt- LWg|[GнjIU4ej 8zT7K;+CTOwcgց/Bi\z4NZ.K;o@֠6[+nE }M'TR^3n5QW gG ĖUd8*mX=5iyM {-j+PUQE@[o<{6ƉQ?淾DPT5K IY-v& npQ.]eG:]SʞCN#0 |K 0Y{*u]hh h(7F//IkAp@+AAk'(*~"UzqQ03Ph͆Kژv7=O&rK N&i׻␺=l jm[icQ'/O300)5 >L.;'heJ5BP v/w?3=g޳.PPjZp]D`bu'ys;ϊ!B >Q9F-݈!L =zbb#)";|}uÿ0ŦRߋc kRsOW@Z]Y,waf; 3zRyK'FI1^RM9΄G۪! wyZFi2~Ϲ]6mCro?jzbrE5voq2oVN!G4!LZr,>$V)°wHcםEs*fnsa.J5W~32Okg?'wNYN aAVG Fvod+F F#<>i A屢yOZY(p=5RQ;6Q΄rF<d$?y "f㮲ؽVjV[w 'NUuߧULZM1'Wp<`H{{yUjupkMIhj]x?RFIԱjc CuxSxp<ыoh܇>0wK gܙ3Q@K߱x~Gw##kY)_1tzQi7mR;+?RJ6ZBL-u00fzFmC(O"?"NW>"r4f.,Hws&7E)D,;nc1P `[#HjvM7 hk"quCso\YêJDg%tGRI6qGw5P- J SeOy7C`ՕJ `8Qڲ2>猩ph{@/MS˟՗JDO%_0jͥXNSHग़\$W %ne:e{LlUILƑLYuF8d9|BCm:Q60 h.Kw@L*n&PXO ~!zFi<sY4^ɼϵ9-sU}Y v-3vt/*ШFi-}ɥ>UC]zUi!x=KNndzϬ:8rgKFshRH%ߕ- FL|{?Pd/bXƎߙӛ~r N,]X 1_|^ oF4mA<ʉo~B]P"}xUU1NZ,{OXK91sI_s-1F#4S ;{S `~Se@zFFp L^gdհ4 %NlR [BhBߍϤz0sU.8IGLoH_-OMrO]EC߹Rfo0R!'[lMWnm4A3ޔ M&*!P?!M4ws1a^8%El0dJRK MQ&eh>} R8Nee5A+ͩ,u/yD(SҪ*j5(k7Y@OggS7" r{ʶǿ˽hyZͫ}0ì9+u]T[59ryĎlkbU-V{H\ 1@E< k.uU/iጝY85?E{1(.BBW`. qY᠉BĆ ͝UJuh8M)wuԾ`!:,h<&]|8UivfA㫲3pNܝ1EOt9*\"u5%c-UR4LYA+ڡZYceG{5^: My=Z<#1n-1>MN?UaU|6LY\We&MԚ*S{g:4]g܌d o CG;8imŎv2\ЉKj; Pם*'^3j(3p:x|$w}.=)l5=0( PMWt13 >誥S~?܂+n][+,ٶύQP5 _sr X7X{T>zsIv]~4kѭ5RcIy5eo693Y 8.>\d ytXvrb6żh۪yXP0tu4L~im >1Ro)_jU98Ν<Yawl֏xz!z%wDD0SM7$뽆gJ^emx3:tę?4[m:|`,A-+@{2nʸ|a)Գ'yuw^^f E{hƭ<`zT&&3rڠ)䳩hi{JBZ%X ^i|\<|>s`q"6un0sZ-IX4݆9`h0V+Ã!qq8a,QFfRn}ўh79 ?s5`ʑK%!UNn? Ѡ>iz~#b=V0GF|ƺ~)8 ʤv%|?[?'2Zl+FCnySWɲh hit8Nu\Fc,l;탅jVB==`<;3Q`qjrÿ Qw8QY| fEkDMWekOn-Ufx3M좷ёUQ%IeCBИŎl4oF5AOֱY'Lfx`3,;$/A< czQ.HGE PQhvεfU5\bpsV!Kji]` &nw ư(ss.Q؇ȟEI OC孺X tu9{(>hڣ>xv=-P6eVM9zZ%Cj,geU1OK""PW ]mMڡcL0dD|].I#N*'uĚz'thSh;riVLCA_oX sUUJ#{&%#&#_3 cN:m!+@̻/ugQ2\sZs)o] if|h9; ܝd$v*sf-& #!]S{IJЖ*ţEeD$Eqh_Zf%i1W ċܓQա|~woљzpo\#ǵ!/;Jj9.SHE7ou+&^h\ Y`);{NpU:Nw9 Ut]p P2f{xK1Xr١p+z6G~SM1?Y-~w; [B ŪCb]pHYմKTSAXpz{rҏ{O-;~gN[®cYo2Lnwp8ehH hܗ( ϴ߹|Y32#gfL4-kmH]uVr4N\rY5x+<~R,ԹMۮ.^M`\MMfxK}뉖TjЄ+@ˊ=V~Bئc$FB2{V7waS$WdTŖPSEq65_{$SRI[a_ϺE O.ͥjZ}n@(f t fÝ ima7Fpa"DoĔ4aguOggS7" lнŽhn &~ 0ses(-| ReEGƵlQdث 0M%tme2tid鸐Cݵ8l .ʥ(ɪM&ƺC>*֢̄K|l":eb90u-2_PX6b88kb%eKMŔv`{~p>i|2~-! 8#7[תǐ,1֏9~쒚M:WXlU欻UB\/cZc9L."?J,?7;"d/̓0 .HM wi؆Qhs8h<6jGL1:nT*r/BGVDxN%qe#MuI3~hYx?iV `V4r\F)h\爘ջ-+wg2gI(k*UrtYq"֊7>cuE{8V? HB.z).Ɉvm;E3v #Y1hzQDwJ]%H3<Jw$zN٦6lcɭVz`1UI;yBIX}e˭hMhpr N(ξxU(IvQ [eN4*K )YcFr:K \'6B Omfn^]|t(Dsy4-h<;isH%ӖYU.Q|V>y4Ylu=g)^$bib竞kOiSk~.`ۥݷ0» z~K;L P3~ exBƒ=w%|EwЉP±XE ^pP=kv[5fbS!Dт Gh&^|<%0rD('8{2Ğ+wv$ipr-w>wqJ$o?g岱@>F>Q䆚wzqtakSݢh<-{ r/@))jcn !c<%ڇ oБԐ3Iq{譑Bŗ,#L-2fG(cUF&y];neKfqj?lx1idah/NKHLHj#=ȧb4$ $@;q TNh$zFb&l|mpaqC7daBc:$r(hGaB董lZUų3g& 4x~Q2f5̺f\t5>v!d[yߔɸ kaX59Z=}}ϒ#:+n經o˸VJW1v 'mΣv!d[rXTZtj>* 5mLæ1 f5fdV9 6?]f.fɹ$f>h\g ,\.MR'aլ9wg"~gNfOr7<3eCpdSK7]y8(2_I) 9tfScqfXg_ fUnƼ}d5R&DrOq(ook]̦JСm+kmmݧ5p :0ώ0Bĕs5 Ou0>hܖ f7"b$GGJV{.Q@S>sgڿQ$ib/b; ɃJmWb$TN) Duk\#9#- +8&X8*b'}6!Tao%dX #%,*@RvNNZEēPEw#& g x_aHo/ rD`l55jm=siMtLИ*kE5F Z{'*xoWgy(Ew>2\쮗$%IyD!2h\"WW[;uk {'/G 30j?'\n"^h'"fgxiu}YԝԤz^g{+]qCJ,;7/LnjAEOۼ;ܮi͎#9NhxDUoAh̖ۿnb9Q9Z-#&(^n˟-i6CM@ICSz~bgߗ+4llʳ8w7\nG/BfkUq ˯C  At]idH[f_* [u>߅.0!zH-a/I*lURWrw8 n?W0+4˿8ZrpNea,{onbCb3YY hN{sv:{W[nrv7˄:D6˗ޞ`~lE2d)m̳fJQ׬%cnYg\\N .\tG~w8ޞT#6p,g:HJ잲4R  A}qs's#;vvƑo[;&Wˡ4 Yq6g`wo&r+ Úd#Ҟ("4TԇM0A;@|֩H(yNu;6;=]-?]Gtj; t^l4ul._(*3Z6VO4{5Nέ>بLR?A|wJj|$Wrag f_(<`gYj/&4u>h ,9 dgW6D`~~VTe*X &M)tSg|<4' '.֖r1v3Uܲo=6n!Luh 3טؒ'!} HK"Z+c\2OggST7"q ¾ȿǞg{@wrO@9s윛DjSD9gNi崴^i!'Cֲ`NfJ;%A|BH$KRɊtD=`4`0Nb7u}o]29MߥRK}*;`g8&GiTdJ,˜Sgʈ_ x@|{λ y7x<ӅƜb4Gmrcfm9dR7jU*O|%h5Y>r'ߤ-f wSZ>.knZ;x{!` .Or&.nڈIz"-7hVꝶmS*zYTy*GB c'WGx9;gK _hk=ZڬJyg.?1#g%*o$)!kUcÐloqi"%^᱗b"|4)缢v @9Ǐ(f?.Klc7lw:z6Y VUI9v`r S>39a5];DN)˵ hF OGހ\& 2ǑՎ8Cګ~Ѹ'#= ZjhNqQ/8{yz;ʎn n]׬:']gaA->ԇZ@0/IM\0 )KC_ ,Zǩ=檜>n6's:߸G)?ixgBې2 4n?&1&=rc̈́V_ҮB}7fB∩bMΟ"ccLpu<5V+ĔEqa#Xpm9gteޡ9&wm#3,9'켠YvqAlǰ2Fך6x \BRٛ6E֋q3ܡ9Ε]4h<E5n6 djfJ=sL8}W?wz"UQX}_S")40Nŏ]GݠN#6: y~1bW53AZuMtz Uh#E!~DJUsNfԧx9E{є]Xn"/eGM^h<2>H?]xMsM; lhfUΩ% 44lc6ٺ-t:'GPW~b`jS<:&aaZfNYt5>UrKMRS[t)ύ?$ +0..;YFm~SĀkK7lXwX̵J{>`* h3.H^hHyM{ D 58wwQ`8_mu#fzŻXqiIaë.⭤¹:WX_;*dVJ15PA2p+ ňJt6nIjݶ"= Bh\qHDKHCwc\"~HEUuIOm7b OJiP ,0,h9/҇BKv7*iyvwY顕ME$c^\!'Hݖ4tul{ 5WjuC`C"kL.{4gn+mC]VMU)]:tt2b]ɭ;/mJ}.n^ՉK> j,h%M`G g\Л҆{Ncc zd׬̛(srkyf5W^k^:z%Ǎ%-^7RҜ5-9SjpMf_zeT\DT%L?""^KvGHAL>Gf3s7s`t2E U4p{?(U2sADB0Hlmms-1.1.3/data/samples/stringsnpads/orion_string01.ogg000066400000000000000000000245671247673406200231640ustar00rootroot00000000000000OggSFg"vorbisDȯOggSFgpt-CvorbisXiph.Org libVorbis I 20020717vorbis"BCV R!%BJc)RR)%cJhs9'A1.bkiRV!%S [hRT)cRJhs9FsB'c.b[Ic1&SJ(c1cPJ%tBG%t9c1"[ŞJ魅[JR*Td!|F[Jc1cdˁАU@BCV 0EQАU@Eqq$G,BCV@(#9dIi'뺮n۶m۶  4TD!db@h* @$'IRa,&IRʣP Y (bb9)-X!sR-g1)XcΘsJI\J礴s9QJ)sΥbK))Xk9Zs9j9sls9[50 lXh,А@HaR1s:(d1 B1會B1B!R2sB!TJ眃B!PJsB!JIB!B)A!JIB!B B!PB%RR!B!RJJ%B!RJJRJ(!PJ*)PB!PJ*)RJ!B)TR !B( :ɨM @xAI1"!娵b1c<$sRkhH1jS!ŤՎɔrTC)2dILXB#MLQ1A U DDhut1 t.   p7x< @GQR` \FGH@"DDD3Waq @@@ @@OggSFg =<5\__}.vILB1住4׊f3#oT \]uUM g!ob?ϻyN, 8j Qϴ?]ԳDT*t~nWNXpl5c((Q""t`PD e;W-C@hu[LLRT*m ` D*@*=Utҹtp(jLlWa +ĬFPkw ׅւ HZXrPJ!"!bA6s"KRnG&*V 9< ɞW**; j =(; {8yyuU =4NzM7g/ЦZ9lV.5&x l`M!po&pc 3#2.(d(KbH7$*eHeXK@DE6U:t1EXU ؟cK |v0/X39NV񪪪F@$rʞf8<m8@Na8͡hW3Pi)-0~ǻx@Z[X7b:"Wh̍)!&-J("K`,yK$ 0*mt bZ .aQ\xu;2tPcR lVUUUUUET%1 PKweN:WdXW7^);(*Lu`(U_H}ц5bYD !R @&mI?dB7@Z"i i)UI~Jպuq]\…(*DxbݎH2pb `Ag#gUUUUUU*cӚ|[p}X`WAW a؅8#2MWJU]ݺ_[LZڏx{lDX!XT:O E\4 +򤥐D C PCD $KU,5,p("vʘ5UJźM2&%,^n慃~e.wUUUUUU #+ɐtݍe '0 fN%G".>9S&y[TIxNJ]7<9B,b( R!3FrW)H+& !bH*"*. aEEvʔ5&(60˒z}LPڀ|v0OF{NWUUUU**x 0A0(P3v-i[$wkbrʰ9IyQk3fϘcK6偳eS㐰ޟfoŝp~t 2%MiP rBHZ+d"ULZ 11 K5. U װ".(vɄ?+(v Ʉӊ.UJ2uKXrb`hKUUUU覒k*Kh܅)0i`S` g ZS^ ҜO86oݭ3mq8pW1l~ XknxXfRB,jEvQ6w8.J]ti/qMHB}ҁT& *ZakVWQ_ХGXYM]LQ{.8g'fbt\UUUUUt @-s'.6.^)&<T(eqJ8;KQn09wųk#b |7lL`D(֚=?`YR!GL]F~,z#мe¸U*mP*I@FX\P,Uװ,p(ɜ̉.&(N(JOD@d v ,pal#WUUUUUQp: p} @'-j\/~ Js@Q)|ouN̓-~4 ZVō1bBLLH"(")K"! x bbYB\ָe8Q%g6]zd `L ,r/ l?`tVUUUUU(~jr*Pu ;w%(h'+2;N ]Fb%E p(}wB}'Ú0}3,r¨H7FU,Dy ֍mX(b(a,X Q@D)/EԘd,$3Ɍ`9pa39WUUUUUUU(@}#x4WvĀX(f<BP^YZ(^*em`CylOdF:€w!r9rW 8Z(ȍXOC P2*]Hk*񪸮E 6?A)Jź 2 '}LQj"eg~8媪RhV_ÉI] 7y 6 Co .a @UuP,*(v?|?1:%M2Ղߎ߇ y{>NON#W>p#7e;sS*H4H~HI&HW%$PJ*XҥJj\ EaOggS]Fg4(^ ִa8@SukZ[!0%^8FxWTEUxou 4Cwd,\=PL\ط`w%l~oԧ?%w  Ww! r)!7(#@9\H1Pu)A*In\iE?C0P\I"^,\֮:e juk]b z;%gg*=K|6 *'l@L'L9BU|6>ϝhgpYƺkvGnqѥFXfUϐѧF).4݀ pf*^UUUUET b=S0^3r/՞:n`qU`40 ˹Rtk] e8Sn%@ouȡւ[kč"7<"« )!O)!NckH[䘈9+XHCZLEUEW D,,uH֬!DS*֭a.7iS9 X +ó0f\ūJ Arw .[pAqZnG_+͡ P ݌ճZt!B=6‘%Մ =m_HwGdGd3y+}@6Ude@s@eTaB+CTaC \ײ\%.,,%JDÊ.=Jź 2(@@tׇq`ҒўsUUUUUUJ%B>d,qj_ `:e!/R,(߳x΍- .P05Bx3l[pm w},)#7 B)e 3-"&K HT`e.KEDD) tbb7ҏd1Q8O |v3YLs窪(sgjo2q'ls,huOcn xEb a_'\ Xc'>h3a{'Xh4V<9DiB.dL*-a")K$R˄(J*rڢb-*XEDQvʔ@Su;dds;͞֌3ڪxRѦWP#j1֢@2;%c W:#w)'/5;J1Y|(F-c ~' kc`=|"kܔ/-ܔJ NrlՋ +Ɗ*J?p*"X(.eeXD.EDJ1AXIr&k\^S\)/!0/ ъR=r|g ד}6=`y;:*m:4x=e9d)%zS>OG ئ,~#6a|x u}ϰ"+,7X2bȕ d nHHm!U PAvQntU,U"ִI8Ԫ[*I+= eEaxv0-Fefh( )4F} *ŝ tz z} 4P23챞Y u^D{}=p8ijo /p,)%Ǎ*%! \H|]Hb܀$& !V `Ik.XXD$nD/UbNgդcu.a/! LI4U(UQUU%D"J%c k\߂>?|?Ih;'xqSτBCr>i |>'#8.M}8M}p;1Vs_9|ޗ-=qng8:x"G8~^QKq?>V;!;m;q~:68 nlmms-1.1.3/data/samples/stringsnpads/rave_choir01.ogg000066400000000000000000000210321247673406200225510ustar00rootroot00000000000000OggS##95s2>vorbisDwOggS##95}8-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@C##95Kv>78MS=[ݬuc*rm{~ӎ6?^<bCťQ.ƍj'KVynmw[-oE|uvWiF/2_FRfZYQd h1D͵B%C#XdvW3^%Z[+#M,&JH0nN;&$(Wٌ=8;; D NQF)ѲZ`t45œ^u:2%?^~^ޣ|wQL "Py*y0C$ +CȅE1?EU#̦?4~Va!BÅDHebRvV$Q bZ jsJ"۪\`fP$#-CfVUӄJ$G+rj8Dῄf?1;M z)@.!.dH:^K& ήb_0sNx.pU鯁FGhR1) H@2LE.vV}\쐋:ߴ0* Huj"7yGWĺ焮V1TQ|@!X DjjV2n!*Ǚ*exHn$MQ%$/)Yхj5V\FW#} TniJDT  DQ%P8@>jEMҴ RyXHH h"tO4bc2ItUZ}5Z(j#";˵P2O7չ+tASRr$K}fg)hԴȥiܓB.dL|t-óEr%5:E$몢3/qᕶ2=qo2rvŁ캭4e*$}l\:ZOBG k6ro! YAj\"E:=Y(Me=Ny F1cTUc?/3ndyEcdצ xL2< @.H"˱M $E݈I?QE]Rl5Q̷ǜEXM-  It})'^^YhA C kt%tq;@/l׍d{9*nL9GICrӿbr{3rU68czAq"Hz UbxzئM^XRz`fK utM^$bv+dgj55j%qD\ @ڑ^ɅTmGxj+:3OBy7WWy_hip5[R"fm= [W؎ӧf V=)w] ՜c zC@l'7^b%m~mYWnbz * Hh\:س.oiC3߼D2;~+E>5HG`8=qM_#DBϥ9(;4#qBv %@E]\tN@H.ёc?3p5OJH< WB02;۷s{Dԙ/:ݩ(U W,9g['H^<_?BoOr;K `Y˲U~ 29>D7 d-;9h\oV}{=feQ4ah36^ŒSbxV_pj W}p`M>š-:pE$RG/ |0 ±+.F#D$Y5&tњHB2ft9 !M% / v|Ηn}ՎJЧ^(O>KL_oc~ wu 2gϧ66R\YQqIn~ݯKEt}Qr;$)DO%q@q6@D  %;b%P]E1{/FBk}Z"K!E$S_&iS_s겎dp.S.~!ƴCUofU @>7OQ$5Wq*&x?='0C/;9ao=k۾qH|o7i۲~j\df7Y^yNF[_Wu";FM1Y8~p$Z-t7)Re}9 3$J=CUzAf>CB`Z  xq_\`IjJԐD{oR>߭jZC"Vj^{/Ox3]ؽJT]0>'lj [tCſQ˹4Nzmg~`BJl)%mfeߘ ;LҀ>%rg;|C yUV_[/shj)c㏫ÉUi;Nϣ֛0Z/n@d“Wr#z$''~x^Bvv msqi~r)=}JP[&I>M̯jӶi2rERBXصۺPزTGLH.t6xmm+03u=Ä(P& ugNpR1%jfߌ:C_E| ~- Mۯ J)o_3k::%z+oMA2~'zf> ^hL v/~",׾b0p{͠vEi7C?@}zg-2mh V*%βX-3{tfnȤ*+/r6P@DClB°\Gd =ZT۝am+ NS_//[eXGhٟD~5*$T͎ ZN5җzX&$UBݮym #R}1)Xϵ˘#wqBJfUdfsb5E #p 4)7sj3ˀ4ɅA<:b\Vu?Q7jny6<ނjPg?Wc+Yl82~ދ͡VPH%+@kMMl _  d>BܝKmدY?0۞wUOf(GmowJ&Lcၘ+s? 1Sv18*-6OggSH##95LeXOׂ}_W\)䲎γgi_N;BGͭRDBho-'׎;=1SɃ^rZwy4=DJ{T__.954s_Aw7}yS5Gmοw?KZx3q3ӓKݪ}Y,gNOW3mӀF" ^=wf:4g@6l+%ĔRc<['oO?=kGϛ&y\R^|AڧC|?[ 7T/חnN0u7E3}.@kkW4˵nc~it}mnMѧۄ|]gqm H4lmms-1.1.3/data/samples/stringsnpads/space_strings01.ogg000066400000000000000000001422221247673406200233010ustar00rootroot00000000000000OggSW:ѺvorbisDwOggSWj-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@ZW*!ÿ:Ҙ;^G:TŎ*|1}Z^a |`F7c atm,ˬQuE2,,v4Ќ( xK#&0;ݽ[ROt_]oJ&>-.mC Dhwd UISq`ifQ:NcrO Q @}%cD,80eL& aaw MmAhP"A9 jn>Q&dt ȺGh{vm*bLh B͑XI0ƣ˔wxR(ue[z a} `5%nX4)-Œ^Y$@>ɽSʙ8%HJ!&Wx*W9sgI)mX *Zqc4b8@Cg6E"Fj2D#(2XX G0@+)-\.S;)P8Kuۜq'hX*1$wH$ = 5Ix.y^=K8[CV 31tmaVtdE1"jG Ԫ`n*C u5D`qM S K2m]tW^mYztozPU' 4}$0#% bwͩE Eav1^_-@PP.8Ȑ)     Ks+f(?<\c[[R#vLkgX*eCft^ʽgYCte {ϲg$i1`HPdp:P`T-& !@а.F" a@ԕ)L N@0q4U4Au8Yt$I ٥2eDҝB$|\ubufr k*(>=Ϧڸf2=ϦڸfhI+".`AGXAKX!qPʼnT b*@QQP`0iY `! ,8 l F`"zu]kpVBGl"WQ#=m5> !`~=Ы!454{WCij.F@Y Q ZBMQjT,LAM=@V! c A4 H;  @B KPE!S+$U·; =28C3u =28C3u Ybª#ALTB6A a vPC ib@1(0z 0:C@@_ XhT GjdiKlm ;S@ [8}[j t$~]6nN^H evsB ^Ǭ$$p(-qs1@6Qp""Ģ6Pt j FQT`aL2-*  *sT3N&uBj@]!@la$["'8ٌ]V097  ݹGڃs˨SU=Ş[FRxB4}ؒ(q2PE 0-V1aEq"4l @&@@BZvraL#(;!ZH4.A ]"F"W*)y*^C94]giژ R ,]=MSWg4peVAH! XaUD Á VP@F2*  " Ls@\(bZA@R v@ &ѽC{8C4݉GeMS݉GeMSbxf8@&JGTcq( aD& j"6VEF Y 8aec`]0F ЎdL p#xtV 8hB0 4?_]ΕK4"&Z=GDwH5{2)+g0:HBVY(ƑgCaWCDPͦ&N `U b8C6Y LTq\4ycY0PfҏWh9b@ 8N0>˷Ch1SWbH@s`н̄-r7t/c3aD0i T*5-SG1P6NA0&&)ZĩN1Sm& B CTDe=@ s3Ⱥ FZ` @ 1B"AJT!G;ϘEZHav ^3sdhJ=C;gK #G ,dRp(~8ljp b@@ 5'"bE@a>@5 4EM=@GXd0 3@;fv y 0A  `p@  $I` (mޥD1@Wtsh,H+C3texR#@ ȆԴC1 cNQ(b8Q*SAV@M@ 2bV(T$^ |P ЁR8GŦbq"a1sN @"j:HA6e5, Ȃ0y!H y:(Ⱥ yTC$`'/$$LHp-gtgmzT3:36u xBXLZ `x(!Ve ;@PQSD XŪ0@@0@P0acL`&Asd @Esp@>H Amxjp @!@`j: C^3&1t ~Gdos ]*+P (g ,!zR&1EaQj)@qj8'4Zd}H`^ڬz@AlDND4H P`j2:1XTb0r ( J r@`RhZq^GԓC\#dI.; ؂ GLT*=TSDTq93@XQ `hLc @$@PS_&@Ԣ:.PȢшph Ѕ @fp RgST<p /`V`JhUS4OggS@W>˭366tVEvX:APfI#8@B6ӪhQ 0Fb6Usb:Nf@EL @P@WHJVd(q\Pa`\R0`n2,  `  U )Ѐm3y6tQ6*8#jC, 2Նt cqPSVQUsTQ(SP5PKXE=d`q q uP)+TA @D#`A} A`g@G0 0P9ЙB!gps x@ =Cg\˞Kx&gH`ِN2Q ŸC;TfT ``@UPTm 6R@0 Jq EՄh0cP@2BHb ia 8 Ԉ t p@(XЀ1hh@&+^Y͞&ڮGj4]7Y:Z$D u%Bc* YEKRA|!,1pZM595AРYS2@4E%"A0-@g% >ڣ>(` @, ~ `J0# 2e $`BBpr8 >5=9AWl]EFe"jNV%T1UĂĉ )@a*X@A4DQ 00' U T># A`ue@C 4iA  %@AMh|>B^ ;@   .( ^C*F+Cв-"TFWgI4 >d%H, jJU`1Ӂ괋SUC@3gbUE @Q@YiDD4*20NZJQp0MF0LNb!~0/ <BD9 p@SC08^ 3ڇl\ `M<}hE i%ib:BG1QUL i] *b!@ ieM 4Ұ6)S Q)l@4ll@E38E_t1 ƪ0'QB 0(:A p$+^ 6YDl#c )2j' 麁R˸ 85-NU Pա" *TjD1 uHIm4p(&#:  ZKQ+0 1GPB` P*(  !(:04$^ P@,=L(gbu Ip5!Q:SeCPVEA8D)bU&aiQm&(** 5 kPD$3YX@fy`@bP0 c1u^G@@@v G J G JYXAXϪ8@tuVG!)jņS Q1! V4Mj8P]z 6 k R@ C,./W@,2y)a8 54&XBA08Z ^ YVFOVZzb4z*PA }Xh,!KmQ6cT1Ù8TLQ'`j"j "P1 AZ"Tj@Ghl5)kpdQ!5Z(늠0j0`TY'( 2@+00+@(h`GZ3 Ck+X( v$tID.ءKDv%a\3@5RȜa\@pEi5E]@EP@-0h=%T4FT0-,bUhRkE#D5԰ p'&  y((@. @"PXZl>E#88@( ц8`M/!m(L& 5 iuVaTa쌀ͩVC ))VS,P(a iaʬJ-tHjAQ(@P6`gt?XX, `f@j180 EGq # @ 88@@Ck Gi@<9Jo4`' vᇑ`v#0IA$,e0-ݐ2Q6S¸tbC԰@D* jX`( $@4-P-&(1` J2(S`^`Q F"E`00T"# 3^1@ @gS9G( (@+4@($ GI zR GI zR KL5ʐ22ZP$AP;Դa(TS- bUT DŎ:ĴP6DQ[Ef`Z Q*(X1Ȣ*Yh(' ),| EFD *X@ %Ym4p `hpp@ @ PM.XsCIfK6$i < lERs:C2Qlv1`Ԫb8* NSPӰ(VP5, " &z P-@zTr M Pf? Qh@F !fdCIQ?:EiX 488- H@AgxL|U s@ 80~ fЦV܂88i4,`dZm(-am:TSp8 )(*`@T"il}(S A@-` E]@M&c LCgeQ80/$Y6V! YPԉZ2G <xZ 0(Q)Zh 8PDհF1(jXy&a-6DmպVQlĉ!X 0P" &6b(ـIIX` `T`T@P`;`n ] T dm@- `ΐ3`.@6:B20F@}1,*_aX pʝ`@ەUl/+A4)g +6(C6MVeRPǩ#`5pbl*UPMLĩb5m ØvG jhPT T@ Y e@k4tq Zu@  (ADQ2 ȸxP@&, '@M]SKp.T Sh *'@Hs,~P ^ee&Wee&燒#ԦNiu֤5:- buC3":5CsРQ[" q.B .ä P%Dc*ue$JC1Cm=e b-jJd0HBq?SȨE/ (!K,Ln069 HRC h9H:ԸH^eDM%1Z.#jB0/:{FZI:guC뺮!Z:0 *éMb7,`@ ta!Y4"0" qAx Q[J#`ڀ:8`' b OggS@:WӞ8Lwg gAV2ud]HuݐNBG1E- *b "łZ1T SVF(l$"DJ)D6f'B`^ 25*08b@} @2 @@' @`*H4x4҅@iC(Pd 31Pt ]\P@1: @ jN0 ە v%H/z0MzV5uM5ǩP#îv X i(bs"`!"aT%U̕ZD a=H00((XG(t<Є EȆ,:t X|d4*0S &RW0A:} DKfd p$tLfh8`a ^ F(p_Ik" YL@ԆhuVhU!vCL*a`sbX@Ĵ 7ZRF#,, ȢHuA')YW@F^3@a ԗ8PMLch 'Ăb* #AхfYDD" @:s4GG+̐`b eec&a&!WԫhuuNhUNZPL1UQP@DeT A4) #$Dԃ HE%-P ՀF% ,GhH(kX4e`N`J49"YdXB*˜&Et 9L|t.. m ,so+X枣@%Soj]MԫԜJPGS6ԂV́S5q`QSQEhP̢ZEV Au #t:CB!S1*`adVl(L,L3Z E@ b &OLc4@0@fzrE0h2 Y8uVԂCl]@auC0@ ] YjSGM!]i90F*YֈRc-B]#Y6)3dlP`\(x0-L@k^ya"p"@ pp44@ @3BpZA:' ݆ ݆ $ X:+ :--gU 9`S1, j EkP)uDtH8 ih@aR0b&@4P0/s % Ètp%986R=9iA@4VD1 Ѕ̐aR X%v&l0XP lh~0M{5 Dz |}b% (]-ULZ]'bņE1LCa3PuXMTfX0D)%RȯijF 0 - Š3@!"40(LDHD٠ @zUi8 NStfL0±+1Z Ps0 (< F3S8TրҋCX@ Cem](kyKQ*jZN8-8jł)6CL,j j5TAb (FԒISaUr%H0A0. -d ЅB X `,H H,BE:)^HBH088`&4RRh?Oc #$#a@&6.8:4 4 IתZYT* )ǡ8f4D X(XP k+ h#d )PTQ֠ &``@pM#,Y,^\£`@As-@)H `QP8NZ!M'|\dP08`# 4P`ە f@ @`ּae8\/%D9@PktdVq,:c*VĆCED$Z'tVi(:)uC`X!`La( Ek()x .`\τH պx DYf(4#YWp0@H@ x Dp * z}>&$tuzjN8E$8jS NUQUAP@4ҠHcT ^`@!s1 * i HPT:H%4Hd} #&C\ *& uX P:[G@ at.Cd1t)9"@R  nnW"& TZW]^`Vఊêb:MQL"j:*$j JD4 nA) AC B` aB2!Z‱AQ4R 10i( 3 `qa 1ȼ@mu l4 Li@gT(6k VXH ,S@gCabx J `=G{ ]yI.T:FѪtz)P F80b`Dݴ@#"2SP Z? c1-B)4d040N:Y4,A,, R, pBy0PBEPԕ:BM `t*zs6Eh@ BSBX"(:OggS@W־  ^yPnҪBg*-Q`ŎL,E D: 4+ pN0':'4ic -a @"c'bŀ@4?d cP@* P;4qW]QPt A0(pST: )0Z3~ hv hY$ieHWD7uq:G2Xq`]MPU0bH}}DY_I.YDJY_@$<;0, L\(d`ʈ BA\X((f4Ѕ@ .hI  P` s EGXtrxjB' P W :,8+_  |6\yFVpI`-c!Y% p ơ"+68-ZQTM1LPF )2dhd "D]@Qi"0`D}"TP@`= 4 ! "4O _+KHR3L) ;`l{ @ 0)`Wh:ڀgT8 ~ |6a^ "hY0 r ҩg:hi IӁX[ hI!U:@)-%5P`:F8LU! M`"^ - 3h &ppK 2@+dA ,&j©B<#@J@ءb3@!)d6@ րh%we <vHzJ+ 09 tZ9]7PHEM lji""4PjID@ 0 `OH8u zHr`d# @8Biv0 GP 2 @`( sT :@ \: P **.Z( ,Z  Xz)H~ mx0 ԑ ,qNF"SEPSԂ]&"ji1 ^2`!:GPQ'*P6,@,La]P̂M< 1@ 2B OcNNUh@g~H NB<"%lB E(p e [mx^" >Նh\:JM22U(!`1ZE 0 sCQEfXUQS@*TCIf6` t&HA`FY0E*&#P6(PgP : a<<±h " `EE]D*u mZł` H=KL@jR@$sxCܚ jRlyVV%NK*Zn .%LC*PAVņ 0TQCPadPYX0n(h 5iadϤ@HðS  ~ n@@f0B 3B]HS`A#4Ph P X2+ATi08;Pae Y/{°#մ VGP #Ê]"vv*B}MMD *CI!̆R!PfEs2FA(!P 5 h怂B*ؓ! &`$ 4d`*]@3BfXyT8(h5< Fl  (+ht{*-~e |6a_hhD\ZW9 Uq8+`q* * &4&CF5*DhLBP&2"QbqQi@hBߠ`@20 ^4 B s0pjiai(2A: &0¡ Z@@oNB'8-@&m!vvZ b1t MWO6a:iӪ *Ʃt-(S"bC1qĢQ/ePY\D;!BFKR)L E01@FCxtD cas@abixL@KiC)O,H 0l yG,h*"( _ScZZ8K `P@ 83 MXWπ6a\:Qq(ZC5 UU`Q[B#E4j@]JZ҅ F0 0@`7 Bc0,>Y ~%3hԝ$M)#0v`!\HA!#20# `X>tZ,  u|`P+Z ך:0`. i86 ~LmW 2zBXhu]%N8Z©8qDʼnibq`┲!QUCjHFl`eadd .]X"`A`2T s 2A5-mx>ZE),Zbb`:! XbVmHѰLEU #`p 0 #,} Cd1DKQ @%>&Q! ! 0(] @ SkLsIx}SBC  @PH0MR; e0Bv F(8VaI*zq(Br*&جl8l2U, Q-a2I Ady]hd.$>ႀCAYz - y(h`PX((37  -y(<,yPdaT!U PG FPN #0Kp8 bhe؃ЗC46/y ̂ʐsJ3ǘtT`7MDL!&V5sC3WhlHJY ud@8f!P:@00 '0 @̠Bx VaA YQ! Jc^h'X' 5sB#@ 7o+!n@MiD7QS*R0ڱ61QS25T!d2ʅ5,4!Q_  LtEEh`JKKDB P0Р % SA p~ RdFXOmЀ)4&.4@fPPH_I@up82I&E$}E$JʤU*Q#Î!ibUU4)j,dY ~%@z 0 @jC0uĐ .X 0@b,.xL&2dPv1P` L 0PJcmxL  Qw*@  !AU8@!ځZh T0@:= eBDW mha%,V7D2. ccVU,**ƨԫF-K2FKD$Ѐ&"aq )(B@3@hanP0NP"!  c!P*`M,B-d` 9 O 1KN@Th9qGè  X(X^(ˀ6/D_y4i Xi9BhuZ% CiUP+&`X"*vD6ZQ%TN(ZDmB&2a,dVF0' Q?y((u< #I6@@$1$**̨B`@ ` @x̀AlĠ a!Th pR \  ^V~2 e@@$` ^WҪ80.% j`DSuX E}] 2 j ȢG &!-@hS^c `itJ @k E@aiE ~ǜ|ҤֆB v!0aPP %^d\dY$ 0 WΩ tG`b:SEM8*i`ŨVed] R" # *ˀ$<騯Bd B,0 `,(34BKhj' C @[ Zds X)lXAUjCAhL &`Π07:5E(@ q` :d}|T.$<?żhÄ*`H:{ !A Vbh */di8TրSp96@   f! @p3{ T EњΒ1bV PPpXMS0DSU 6RTȚ k%Tx`HLs,40CAP!@DBa(, M'%s1`J, %HXhhx B@s1 ;B X@ Xu`hh J{  e(2 -Pe@Dg$,C& E-&V 4Tfja]B%ꅬddT&R\t!@Hd 10@|4(T &H8!P8U HB[_` $S!a41-@@ǜMa` ]@@&X ҀBZk<P +%@gaaKC:QPSТ)4jw VAc 662DQ YV ^"A28@RtRh(Y5 0c1\` $3P+X8Ch0L }&f Љ/V`Q(sx aH=$p` %&p6 Vvŀ6ܯ y„L]h9Ziu %XVXj81QMQӘjRjP ɬց :Q@`Rt qPh:  @ C ~ Ts4l*j)OZ#70uB,  fR\f@x(I/@@@gQ 6-` ;؁6ݯT9ZPeHj]7P鴌q)XpĉaA P3DT͡ il Pi6R@ԗ D]D=xqgPm`^yDLCфSG&#t ,.$̂ EJ@ @jQ+`1 "EH;݀@&b  1cZ@x !LexL5h8 < aֆy+@x@¬ %MZq!)8j7P( *-4R!"-AJ-ix),#Ti` %( $b*c \B]@sa^Pip t,X 㬨`B *dǤAxX7AO@4('@lV  0BKKzF}iIVMk iU:!pWXmvT; a}Иe)EFEt a VF0)R(;E* tX SA3O(\%`t*A il*0^PhAREZ  QI`)g r@#(OggS@&W ӞhChC(0P*H.hueh9"աVb 8TԜ:CET@E R} ZC sQQB0D.0i,B aSX,\1 T<  T0_,<hC<hCI JX(YTʐ3*Xb41q 6(("A]eȬ֦J@]5eQ 6D|  #1@8Td -`!P`N5mBHs$%tbC:Cb(Ǽ&̡% 5dj/1P!;v46a_ h H. uS8ZK!lj:P D jêj6$QBUJR cE !PH1t *1٠Dd( @+< œa9jn9 `@T AI ЦDp<hC<hCIH *Z!ZZ#*HT,*80 49 qZ QQXTC G ) S$UƌJ0,BX Yi(Y: B'wOXB(< @(<&<фJLA#aZ,& crPt 4Ps$@! .0F_`#$TxKx1& v0xd d@JB&x!RD pvM'e  ι_"  02UNThL U@;MPbSa}$Defh U?ܠ!S`GhU`n\X 0 d3$Et ( #4V9 нp#7AAw!%(PbҼkd;4@44|¤cĭ!!@ e "܆x@E '!H+@C:NUs #+v,*bPj* 8B N xL1MQ@35FXLP0,BxTLga1PL!hẢab ULj`0Fh:TF @@Q) &BJ+@^  @ qp6~@PUP#<iu#*Vg섑`P'q8 TTAMAL+R0@ffjІ*0̠)MSłOg,b<a  L) N01\xL@k}r0 (5UL ( 0<46ޯy4iVT3=ɂ)6U5!v")I#,j, (ٰF  &@R3(0ͣ$T"Ca(;dˣ `,N!0FMd9N D"\8AGPAh: A4`Yh@s8e e l[ $0uqB*ƦNATQ͚24 +IVD@cJȀ1:`Ycq4408 Sj 4-< *(Bh  c4Ad*VE fj 0`W^! B[c(g$e80Xt2},:{BµUYJET*a{[fWL0D*`C;" H j2I&D 4x0#4`ApK"!3 +hby`?s,b!P0ôS@ (TZ`*(: p/8йPРS<0!N vf 6BlC86XM#`/K՛FVga$\UQ8i-DZ`30MVQ0C"P,Q+e],* jC.4lRY,YA!# #d@x.0h Kf0 CI "t @'(0 2 (#F A *,h(ID @bF ΀  [msD@< a g0IX`ґuũJG곌qQʼnU"V**F IfcEQE%D"j! 2CFt e (a! s)0BR]0L k 1mP10 :` #KaN S0̚_9;} L!xih86^ }k$@gI҄pI`Hմq H1La؜ 8bb 55"5"Ն   Ib@a!(tH0 EE!S @p840**1">0^ 4ЙB3`R"sQA&P FGGHBX9p$ X`~ z$tRAM:;IR5ːVMK9Z" L j4p1"("T[ɐ"UeMEEC?3(tHv\B@BB6H~GaqPlKpt d f0Tt*}) L#(E+P«a6h5Lx / x` Ss @l@ 1^ń~1hmx%dQ!Z8dNq1#X`Ǧe4R+e jd(hTe A+C 3f0b(1 bPH5 pA B K8iTb@ rXuRD3DAAkmop`1!-<m@i ^~֋@gI0JWq* RqIHLXf&(CESEUk!$ D 3# +<dS!E D`⁂ IAU%pALS3d͋DaLE#f0@7B8"f<, 6p  VOggS@vW kҞe4ЛF 2AM#9ZXPBJ` ӪtZ! XFLCvQ+`u*)6*4"$4 : S 3(5 Z%hba.  B0(AM0P"J!3iI`j:i "jL(t# 0Cšc ,ء @8p ji!)`ZB`X~oxa g$ *Դ:qt.U ptL`GcqFFjJC"L-R$ N ,Thd*RD`(y`@!3tMx  脆P4pB)`YJ𠃳HP5Z[‰9 Pi5ƒtArS:{VX*--sJ K`Sq 65)J5ElX#2KdQ2P e5@C`1 $ Y``i`fLtHGt @ LHTB/h3u`ly3DAk-瘌9܄  X XcP>e<hC"R0%#A  FPay4-f`^s1C!.c,k ^D1 i`2 h04p$aZ8vY%~؁f@@[7:;ZdQIiiN2!NS91EDAQ4(#2ː*Q/C] C&X(C 0 j| 0:C]SJiBL#`$&BhN 0`Tb.t. f* j ixW^`i;@贡^e,fHZ.c$7@:{YP괴*ZNETNȂӡvC Ů&*b`lF cNjld$.O8Ss #(t60@ Jg,P`p3 t32Cm1pEXD ` IA#gC>$h>8rs V́Ύj%EB r4 )NCZ*S#AքeEA" (H 390AAPy Y0 @&XT>8FˀĴ @%1>ء<0p 8  (a>6!A8,>؃r!JAyۆPVU*ǘ%$T0 `a bPHVimIұ6,i s@C 20PPC&,40i  LA[6CFBt4) d34"!`PN\_!a4v`Nse0Bqs ́Ξ$ ,CqǩTf @Mlj`C pRTS!#ԉl0!$\` ~2G) @a!vᅀ(^ 0)`^ '4B`L#`t:`,_©*@ު0K4)j)M6ĎR(A LMPeBE슡+CLŜE@PA FIhJ FȬ@PJG32 &vB2.F , 49 P#$y h:,A` 0}`" Z偠6-&$w6 G[@kP(C@S[R! yB XVӪtq($'T6Qĉ@ fDe4BU ƀBi &Z P LB  ,;\B0  C+E ΀.',0X |1ߖ/@ B,& XAުe8a έZ#>l[̂ڤUѢ88FӪ8.@Pu[DQآٰ857!PID]U b( DT"UL8@ ±*Ao[F)JHPs„#D B? 94)P0M@0f b/,Pp0WiZ@x  C ȃVycS@'XHXJ*N2("Zl`8l6i*&P!#SD25AʀF 90 S ӊ@`n`IA <0` 8 P0'>hHF P/1ÇhP$ YA];8ު8ܪ8(d5 MZNW*]hNGEl f SPa2:b!B Bc2a*1tP `V h @aq̐/Fb  a($ X (z q `/(&` R8 ҙ4`1AM -ǀA .X8/2V'e@F'`HEtT:養]mQ S bDEM B&ZIA )hsNV\ 5OB' Tp">fcpAX iZuH hR  L@(0&`N `&0Ptΰ,w0` zN١v098e0R fP>6@AXːNKr*q"cYBSX `+"6bF+BFպ)kj"L!"& <X s(F (x\Q`((;@| /`9 P&tmNxYh g` > |f!H@ H!zN8ZQ9R0-@ņP5!2f E(FʚB)E6Dw4O iABb'L4R=TPvP0 0 'XM=PQ45́L82aHxQNp @( p@?8 njV30L28pT*8 N8LU&NLSF+L2MDQ"2eBC!< A2i /A . A1BPJP 8A#Ka҂C%; @`x@ pI@v@% '2> ; c4 4iRq(#$!4Y0PML]5uEeFP/Bu 0PF@BK(Lp@@P9 <* uU0,Щy`(SN ($E0' F25PA0(΁@ 1#& 6(:'0Pp@Ssp @<% `'.OggS@W Y f1?%`(ӪT\NR!pu"ZA:TD0L1 ] BјEJF+  %"C ZPdL#se  h3zIJNG%i9N8Gb`1Pa"8m,*РMEX5Y@4qA0 ,*0 @@46S&Mm`*#9-`1Ch1iJ `Zt5 Y/BZZN/!^8tK'4g0i%s*VA(r8Éi5bŁ"VUU"2QIF$!0°X(!12CI'9L 3h*B@ `Ёyb ͂Oi 9H )t@,9 yZQ6 F ' \-d H3 BgIB]G Zbq,G 6İab7 CQSLCd6# $.L  #:Ia(5C `f0: ` : 8C86/ )A`A$`L9P`9Lks0hi 468P p p*yh  @ @I\贴jiU*e*c*N(80-XM1;"8l*i"`E-ABMB]0 : sq @aC 0Acqm@ D,xA#K0 @ \ *BI9$`p@qhB9=`` (5 pޙEuf)hA$| ᒀhuiU8N*Ḉ]L+b V1UTb j*QWDA] ԌAS ű @dA "(B90J @`RtOv4 #)Td(t.d* ,@2`!Nʤ &6G"p1hޙeEufAl}EhiUΩT*Dp#2h#E!iX*5њLJI}Q#(hE* ;|b( <t@#̅98L]Li!-30i`p3*V <bPh!^6 .( s`\ Z!v LWGH<*@Jt58G@458G@4YpUr*GKP8mbW1 Q PLg(YWu!'`34 q\00rsy@o0O,%0A ,$q`ՠw3A 0ga $թW躊Eq:Q )T a3PXED-b*(bW"BP & @ (: %PB 0P ca0iTt+2XѰTƁ1B0I`XS0HS3cZz# 73+A 0m1`(N%R8 j"H#j[ɠ@d}jVP3084 &&A # N`L@ 5f 94\xc`8c1@=P D N49BcGh0J7j nfV2@İ -Pp QlN[P absLSLD56Ay @&x a&P&, u%p1O b HE (ͨtah1t`d` qp tN40*% c \!sB; )`  p `!vi k>a2+p"@MLup" J8ai *6*fjlEJjlâ h(I2A  1 E0@I3 2'mZ60<V8}h Th.8UGA\w $J0)@'ЁZOggS@&W Ի#Żp \  ,$ Q 2u P! dB &bbGT԰c*uDAFjP2ut3 LdC`a9ЅFY)2F p(#$d Sf``B2sXs^ D% ^S345>pH 8Fch$+@C*JMkHU*3. bs8Di"Fj5EuXqD d + @5 (0d*he /X @>y@P` h  T01]@P : h@vVt["N: `'beD)8ZNGei NZ5paXDÆ J#U Ն5IV d ?B_PbY! !3@F08! dXH2 E@4|`3-@eq  epq@>\@XA%!iU( 68DŊU0f8 CQLd%  $p0)#2i 2, 0``*a ( <]t<pl<Tt@fH  @ h *p(NV:଀epMĂ} XA Uhi9=%};ԦP@Tl@"4h*l"JO$a-c@ Ae!<+Ȁ t`; P5pBCëiaz@hP:Q TYe50R2pFҚbz$I R#tZ(8}bP iC 610Sp  f& jH\6$d,,p<iPa )(B t @0P D`4*ؒ Wk:cK&KC&D)QpTMpb*&X" )ZŢ`EU NT+`FhXp@A@F3`z0PGVx4BYh1$ CE^m:kn\H!2j >ʘC W{(c ժiT:BE4ȇ NĊ00E@ՉbhlM ld}  Y@0.E88 `F 2`,] UhJ@zP ">HI] [*ؓ0e*0-T'a8gXA%#T#1Ĵvf"jSS 1)R a 20@&֠ 0i,R@0" @ hD$ ` l:^c@@6^,) >u"(GWAÏ(F9 Txe*0Ռ UԊ!*Z b(BBQ)HР@g#qtH0ypE0 p .YNh g1C 8Jp'Ǽ·ZBuQNr|Ef;6a-!-Q"ja* N0(Q-# mPDu-(`0)@h$Y@aOd 0P(8ِS n@ bA u0Ǟf ڵ ȍ/c4ÖQr#|Ͱe&K(NՆ]EMv X& LQ@#5H `y q`΄ tq@`9 ZN @p$AFP:91dRz%>s5u5tHM.Y yi2@Ǎ/ ܈_ijh ($lA!5#BP]!j50P@ Tf Q@cDJE2hTRb t6 ^/|a87V#m , 4_t =%r%@%*A9NFۺ9NFۺ0Brblja3EQ* Fj)!(`d) ;Ɖt8 UZ^8 ذD`Z[J:W-i9bԕ={ x`XGtS]64MP *j@D@i,aQ40ߣ"k ?t BSnUId, k.(#)3g*'߆@ >6Nl݇)-Cm 18 Qe]1 3YAR # 0X03:>| iDHN9倫mp,S[!%4OggSW !1}y|txtonsjhgbbc\ZUNCB;;626&""!>=uaٲ@A[c'͖x[ !!D`4pbw TDL' Hx"t۰q)Y#zʉM ! _`7w(b\n e\; 4  kfHWAp=ĺ6Zl{um.#D&v!܏Q,& (83@4Ed25EdPqRA}̮/;B@DB?KGM n)}~/܃iZ' j(fi>Ƚm`2w1L[F %bc!+(80EPP(F6D"S _reزDAG/Ŗ%BxI*c1,T V[LP_TD$ 3$-M Oo8,-[:-wW#fBp$9(A"@@q\V:(N ebؒ ~L2f1lxI ,Ga| `U,&SUAQdc PH!0.A9W-wI#tiS ab\SyEvfu$TC$ $"ۣ @>qØJ r\{0&l6i .a0TT0-T"+ HdZ MiDh2zv8 rNA~ݠ,He N/V\Y N!( 4H([)(%^Ik,cBO*_c6&K  w!SsPRiDD 2':!yHБPkLRz_L'q Euډ@LF D8 /dh>}1a mʯƄ ,1!lb5"RoHhJ)Rj4Rdـe"'13ҲJCj2Ռ,s_GSHHp !g^= ``,9ŏq(iQ0,sN0 @**&^C @1LEZ{G%[˒@]fȈ@h4YÝ\s h@ & @gT^uo M`m1 U.a19 CJBc2&4`a~a*-}14.Ь@S3jt@WjL"0( I@8 , ^u/6ra 6AUqq!@VA (IQ9xTA2a4,KxN*E$"nҷnFϺӌR 8H F@ &(Y% ^uo6ra 6a%1!(`P *hPWBx4vDp }X9S3|{mm̦%9Ukp8  4#8"^u/ E`MXUƲc ᴈBR HR"S{T$#bS1Q64|L69nHz( @j^u/ E`2pbb ab!Jڡ؆'KdwWrdBHn(^Y}Cr3X%զ@ Aq ->=b` gCfWQq` B"zHڔ]ӗ3^e}Śri[ U [5bp(^u/ E`!CB (D^*+*#%0x[H foFPK)+RhMő,.# @& j@!h>m K~ؠL{<8D&& 42XL&8@䭛TDh5 ],U7=TpeJ!jpt#@!hH0 (\h^u/ .E`2HK{Vl UvLV!S}Fzy-[YS I:q @$@ >``C C j Hm K~@=;y1(tZ#:4FdG KK9wf2Y,F@H @A8 A8^u/6r]a g1B!:%jZ`p7ltE#B-I$1hp8^u/6r]a :;y1c1肤T0-aXC 9A!fv4a @Ґp>``1bL" Fi.  |@ZR_O EqdJV bP ^u/6r]a b1@/Fq1 ]jY[0s%oJV}S)JB| < AB@q8P z$^u/6r]a 1c1eET| #eܗT֕Q΅\ɜ#zh5" 4^u/6r]a B1 QN@Bp5Kp#%8  A>``*|B& P ! Э8@@@~a`BCZWR@p8H4z/Op;!P^u/6r]a 14VpQ;p@~a`C C @ s  c _BN( 4>``C @  B8PPc9(F@c` 1!@ 8 4p`h~7Cܿk~380| 1@8@P0JRiiP/Ck28  `/Cep/C[28`/Ceplmms-1.1.3/data/samples/stringsnpads/space_strings02.ogg000066400000000000000000001513531247673406200233070ustar00rootroot00000000000000OggSXVvorbisDwOggSXSD0-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@NX;(ĸ񚲘;Ӕy}{qye=-?7X"Z}o; |c!]65~dٴOcv{R4K"%c!ƀ^_yk(1x iH{Qe'Yajb¶DC0a]6Ku9dܘ# Ͻ4CESGZ:Uc֠4$ݖn3V1R^}74)!Wc41wjp)24}Ƚ=ueP>66mخ4 V'C ~x]\ #ml$o-c}#9H@3/l \LYd D{Zoݠ91O9b6<7i $I;mA -#UeN+'`yVҠDKB35ӔwD`>mq=smܯsTH 9SH {.m4KOl L~.Ʊ U^{ZӮXl Aq 0."”PBl&/TDCVWr!ttƱ+9;b/p/e#+ !D Г$p@~ɽK-6M] %.a̩U `v[KY z&*vZaZ""C}#x Y3 ^|p{[ -lC@Ox : Y0,SdaVjŬ,ks @7=Ḧ&7n$5@8ɽktPֵ &984t6auY]dF5BC!@lNAӥY@燧 L_z'#0p#ྵ<@GM@ %z>#0V^ܕn2dhd)\ɽhɪ.^@C:mρ,+8k@=У\Cρ}rYebΩBlp  -!c%18 F dClH}dP= dk&n݇`>v`ʑ743+%- G.Ee  tY p4 >=O-pнuKӟ"iVRDJ8,BGqO0!u}da=)>3dϱ.r,r}F|6 "ylNxKX9$ymՑmknڗ_YUd(kveC*9޼;A!=W8hS7KA:+x6L]4hIqH3NT"KQ= hORUi T +l>xqłǟV;8ް`pcq|(/,d(jM[/dr5k)nHa n,zI3x6ʽ(gs5賕n32e$1| ht4s&xaMKT 61.t=ֲF (W abL8Ֆ:wv!J]rǯqEæ`+,jFE2Xhg+ |BQxH%x:#N@jX:Gx.ɲAE&6,l+ϖ<=p`?O4fI |m,U԰n1?@;NࣂYՄo7 pљ&Kx@#nMjR,Wr\g?^?l]NvL.d}tO$ʗxZqdڻ3܇&L _B< `U,o?Q{Zπ<%` @a큽r0Dۼ@(! EB XXZ|M:,T"V%~ݔG<;(섞MsLݤ\``Y+gOp0Nx BCN,m^,K",{iK9Zz0WZ72䀵g ݺ׭piح |=` lv4a96@%'%|jq7*9\j!,=k\ !5v`l}phI013.G=!u@#+ +ݣ k .`?e7OȵK 7E5` ]xvvbɤ zH{0 @]`*|9}ps)PG|cKf7^y=n,|d$5HO!Ç@xBCjMpr܏2>$Kq\ j `4 573)-  =RXr <"9) [< ePM-K4$ʝ36]Pջi~h;x .T 8ct\xf") ec "vXem>-6 O@'׾b@#q8"@ϫA,.? p5+YB$=XX2 XD„ /@h]oHI 4kBJۃAhm@]{0e-PM#QLǩq< p N_(a1_n@kLf 8?SنAW@3[Z ׭@'Aw­*+u8=yp `?Fr@6EBF}\c 'Yh"j_Px % S@][d$` a!Qqd~hx:-O>M 3ۀPTq\èBT:@ng:@ Пwht zL7]at 0*x=du 7L _NKjn@}@C&2|(!`-ɋ265I)-WY6jW~D33(PtYA] B:b$1pDn^!_>ǞJiVz@=oo:Aa@aqpQ!ld~S7%l͛1 N@ 9e`U hwpĖ('/00zO7 _h(mTI;FԩvKF2n]_Rgh[c]{/|xpްԦTD b_6VB!AB^>P6Z8> U{[(n5oemVy=z{R<nd?p*cٰtvJ>ZW40(tv "~OggS@Xt~۝#Y${8mTf#qlsU}u0d*xù|`YrVI` iَ+reW<YW;{ yt=V,&@qcJ&s2S>]k H<&;c87,wr8hp.`jRp$GmEZNarh/H7 4-{lu N~w^pRm*hо)SƑsY`6Fqy=8 Hk6E@0Zpc{.$8Piek~+z&vrfzOSpV`B5gceiLR X@Ӈx`*' xKc(yFw n |:ǷUWGssqNu<9ܽl h`2I_ $S),O|t A9XLp@p(vܳ*<94RZ-{t4ԥHՏVxp^p:z8 5kǸ ysl2$4̦݁$ ~o8Ð. +o @<շ7DB_>[{<pJ_oy#O kN 9 \g,A|@8B#@85Wv#vKn * 6Om3ͅÓk P2 50.#-E9wlhY'#GB 7}.Pj @]]PȣgKaUWyk/9||h6 x)L@rf? \~I %j]IjXa k"Xj3xQXhȺw1 㱺 .I~Gk.'+Mv=[lGT_@.78>.6pP@5 g9 pрd@C`"A!8j@4psBZP *5B(SS)kÞ=#ǐ٦ mŎ1Xh)S%T(j1J|PE {4f-ďOƫ*`$985M`=xS qw\qq,V pӓ,5GLt/ dPC;Wm=x[xCOeЯU'p*+q6t)|;2u!؏V:<³D&?}#l0@P#kG+Ǩν5@,ĿY` doP;A{LjgkO<q Ϗ~P6q lP@ k [nlfR E8}(Ie@p%< +6-0 (\921BV*"ñ\Q?D>,4h N qtxj&Mu H!}胂~$2f4`}s  ~D|g01 =5l;pfwh}lz8ݔ9uAdxWRaN~zP\ұp*@c WR(=aKAZJ KMӷ*x7hIpk6(qd88g~E%~oG4eE[HhW> Z ~@]{_aE%@~xvR޾ = X3[mxޜ]W,?c }0k4) y=6BcKcࠌ`q>`0*cc(=QCNhH핏ɜ`%8 O^lChZjJ"Yeez };*m$y,/w/_k`B^{bl)V !g8? P/L=6W@v'MDx~y w!| TdȔ,(@ ~=O8ƁDHE}>_b *-G ) Ԇ%xz)]8 ~)_0p3Θ dK'P+49l"[P:_ 7݀#|mN_/ <fPxy3&h<8@N 2Gqt YTdA!F@8 bC @ @dH3`F %ܣZZQ`*5Ғlj^HF+߇5]R\&%_PТC4^?Z$pW:paIFwG &@דLKසrϷKO^zc`@ȱޫ/9cA ]EtiY@j c ZtPBZ{(4 a*5bߌZ`a .!-,+][ړIxFKs#9r5xR9Lh ~VT) ȵ9@94`a5#db0[7u 씇@LZxj;eȗsLpG[p{}<D@>Ͽb >@V% 88 ~@aQP̮6 *-B\$jbP4% c\z<'J3ZS \C,1CH1Ue,!Z=i-՛uTG/\vtw0}ژPmxd0?iZĺ="G<ptƼrlq@4 C0΀p}B3I)?Bg(8(4͏@Aj_88%+5HJa/q(SGLNjɇd$ ~ ΄z%T0B7X;FI(=I 虧)@l 7öVrogfh>.@nC`5ay3 `"fmq x03x,'g@ qF1(9hFwkqH*aZcp1T;j4P*8X8DW',Xõi Cc|)@iw" G.sOv`f' Wܲ;4vм1@ '.wWi/9Ad#m+J[Y+.]G (ڊP !Z e9+`uV(OggS@X F    *)t@WM)f`ϑъ8+8u w!~p,4@MBb!CòA_.AEd^ 6sB=@ @e 3xaK!@V^`џ4r`7r( @`]6("6$)Mfa҂f) f@-@&'0r0S , +Ĺ0B/9lX=LfR2LxKG p`AhZk:∂,*,XfuvҨ N7OH [B&s0xS۰G<}|h;J1%In'мjiM-  ya[tBfX.Ch*L4OUAڌ?e.Zz6=3',8rս>S@Jzhx `#% ةĥJ@2CX ^tMP-@bX`CXUͷgM?~&(,R5(@&Y>h+o6 fnQy3Xѯ0Z 4؃ h)(-q#G9ə.NފҸGgH!ׂ,XB?O~2o(Z&u XԀl$m-('@kyhaܡ%Hh9NisXK HMs@: DEW0ȱ OUHX> vhMC,4\{J< S1Pٺ؃ϰD]QLG)adFhy`|Q[$f. {J@iV ``=_=*=p}Plr XmyXnb7 HdcI?pΟ,E0,#%SG dJ 2' ? &cR1 hb0<*@9,$X,@ @2~ۥxNM & b6[e-A;+)ҔmƪC𬮠0-FZZC(GNʊ|qMl1 %t twŎ(}YaރjXu#N?a_[k=n``C p60e`h!4{k0G{NvZ_:faPTS(r `qN:Ͱ@4YhPPN l[й ɑi G)pT`Lx~մF`~)h(pU(^O<lՂLjQb BGCwܑ6(5p~$< dZ¼  x>(@v\L %E~ @!ܜ?}嗳=G^~+jgoM9@ 0&$0qj"R:y_īx:67jCI ;PKG,$@Dڀb4 >Ljۯ5)!O~"7:o݉VRZ3D1Z@#څZdwpKBO-*,p!Q!̷y'FByO86d_o_̫[`鸋75l/ yٲLO k Ɛ&@NHD|m t4 `.Қ_ Ot98_1%!%HlJwou'^Hl'jӲ4Q )Ucҽ, Ƙ[_D׎vP-&. EW'$lO\%5kQtM4Le4iU:C1#̔q:jWvRC5Y`/ ش dZ Oj  4lvt`ǫ4[ 'o{>>bƣRr(<КiSb \q"j0 @|P!@3Xz  ] @$ 8 !& m& d),M2a edJ0_IԄL! eo?Zam;\a]8ZZi t.Q\PwUro30qHrE&t2N2ѥ0@wL$$/| נpy8CjR:f@F1ee5h{Vֺ<:@,6 4&>ƢM@;2:0OM&qiS*pE~j~2u66Ї'PTނPgUXxE\@3률&ܙ2_%kkR|o Җ$ `J:nHE8hIF*K|oji )E 9<:q #.[xI ų,Vs Ǖe VWe(8uj*O|V/5]hvj1dc ӖFt䶬"ħ ccYa@ kȟ BD)5 Ty|K`4Z)s\먇JV4jR:JG8S.# ٙyxMc(f>Bilϰ@ȗG>w?a%@ e׀eQSc;NH3~6KivkzzFhmu4}@1 @f-64sM#bF@OjtJ +8OggS@X7   VL݊,` ŚHDKqhXj!n QJgI 6hlpԢQ:-T%*A 5=bQ{Oz)]61w$ gWF"냘(x:}. a3mg` ci݂Ցwx>di(@X{g9=#Ѕa M7!((DhƩG4>vȧ^ 5~2y^neq̴8Z(Y4R&f &@;؂2Y2e )@2P Wt49< T,d$G P3Rem >Ũ&3hF\)@|S {RVn*nM]4*C"#$!0HKKY s6w}K??6Su!ƹV6iUYu2D ,azgn]"0{Bߏγ~v9>Y\?|AiPXy2@wE F (f#{@;}@? )մQ `YZh* jteT\J @(D8>ۥ(ٔ܀ݽj࣎f晠',s:Bq0.'} ]t_#,6aڜ|ȤM3˞ﻴgd3WIJ.<Ǡӌ8B~^,_ 5ǣ=dlHfx ]8U)}+{D2,fvߙoڼ@FGL#d(hPD@2TI8Z^ܡkU Pk3. 48"v ~)j4R#@qؐ,S$ 4i92TDM Vӥnⷥ":QH`aӃN$Ɉ۞4S(ܔmSU#H(6dk,GxtuogNX7{=dj :> @J29"UO˥ݚ1aN i 8T+th-I$5@;ЀF@ R(~ ?2\~dt= MuBSk:-JT# -SUi-iMwC@ѫDf%e6ϟTs TC4:]S``zslܝܜ vΟ_xqyr?Q)RCȜq@35j,8bJ$C $i4u ITjb5 D6Tmo ,ʐU@2E( Tfҁ^˥8IoKAtu )z"떮(p,إ3U!B~LBgo[hZ֦A 3 Y>^%?ۥ |^ ]GѺɣ MVk*Gq#\BP{7V j#ј*͇joj V'wGk71єo5Dw S{8 G~lݼ v`Y@=rAa1@SJԽNPXX5db@` ZQᚡ@T@o( @"4D6 ``m>ۥ <Dt=k7*aZ%U18"`Y%:gxwlrcOyl8:IFvoq l z}'X'ube1Z.bZG{_KC 8= zi| 'kT\0@?Ww T M8O]G!8l Z"!L$@+ N8H&^^0AH+?vDh:z #܎ 9 ׿)Z!7^>`=6Ն';#Hݬl)Kn,{ݲXMc{|mNsJ;b 휦S@5v9-ЌS $B A q,? =[\-폅((O  El0U  2z_Dfp5I7UR 5S׉Jrpd }d#mSCoK*)kU]ijgoaj?ɫA"WH~7O#|΁y }DྵyRg{z7}\.n<(I YQn St Z0hfnD7 q@5ızlDf*pѕ0(@ l3%=c]>Dt[ ؀pևhCMهK B͐JraDˣDMo7y"z!Qv?[4&t[0?!2 <m\g pDZ.ey}DiLl8iT$h;7P (цvNMTXsWIs4D2 m/&]/l`Mv~|^{FX1GԂu6@TkTDAK8F2F-|`ev%rsL߁^&$V"j*ɣp|x.Zluq x"KG7A~ ف `;o?hV* ?a y,@_Dz6DC U; )|[Ń>vPA m@F|1Ch5@@{ 9 ~zHxA(< nRz8H\ҲD#!D#HGbcc"~Pֻ (ʼn| ]pF"'!$l`uɘL -)uäuy[|u0Ec/a*ocD12lњ@P+3 )cc%e6 UbԂ$@z7-fh,| %D +OggS@ZX׹+'ur)pxA(OgVw8c6[4Q"? eb?I'K_~zȈoDd>d b{Gi,k8u{X~|b9>9M"ʷeQrCb@KU`#pPX^a<8sIN$fk~F@y +GoU)a e+ }( ,8@F5@@) P i$rOy@]4j)h ~ Q&ytoF<ؠ@SVKzaa 5]EMRrc(TVӋX1 šŽ! x9hk tˎr>H:a|Xox@ n< X@t` Uʑ, -@' (K:4A}%GZ8Ua-1(!e-4КVq3 @@ql DEz]#8a+`upl@%y C0d1]GdQRb Ҟs%l}[TM|#. КU0z8`3&l~ 7 c 'U{wHT:S&(BܯNc4HC99TRqƺvW2U\ A KHB6lбoh굅a{kV `>!sı ä@khfƔE hΝi>j΢] 6־ !" fTARsq C.$ ebO RApӜL8RSMS-#Q)<6W_Z@)l!{4c߲@QNݴkgV ͖nH[Px8ܾ`5i_e!` g$} @tE@+q9=C r @/A 0k70e0`ǡ{PzRT\5FF$5W8a2%x1"6cp ^ Z$@Ӟ)מ45ST9r吸\Uwǭ˚`:;X̞$ii=s$ayy @Z7 6;_p{,]$eȓ^ 7\΂$u NVBsCl; >dء tÜ G.UyH$2Lc5h~ hЩw A:U1xjQ@ B 14JNAڀK~e |hbރ a;iZ-ЌѨ 0 c#^C\YRXEDӥ5UA?"Dy@^;e/8T̐BvA"ͱa Ŵ<r+f${%]u/#(d_{k'@/31_(Pb^hJeX0Gv110erXћj-!@ڿPpU =Jg @T eSbRp ~efј|<.q׎$\+0u]S9.% ISZM>z+>H\ }CRۡ07#Ȅ+lVy<8VVby=o.'>}8)PG'/ <2M<"+Nsq mM}q"{)FxС) jSiSD(œai=/Ak8p~e +Tb!PX :ڢr&x 0u3Up 󯴣a.RhdQ/PP;q F'  pa hZ1$T~z:С#m7VUI^ta=NXV DL BN\V(])КS57Ju ,f#+ "SVPwAl|ł %B-z~샸&ə>HK*E c0-0z:;> =P eցa$+v_:A7h8=,Wܜ}t X|A=s2͘B B|@_u65+|j3 c812{tBP{f}Z(ShÁU H,1 `"(g~ k/QX|#7ȕV%)P$껉0TztW@wbwՈ پZYvA+ۧ! v <J߸sN riVpaJNp{ Eז nv|,ZLˬ ʙ8 r)nhW4\e8B(&Gluo@.5Lz5Q鴌[QPv !49$8% dWw,C09"Ĕ14ͩ_ $NK@T;6q$ZΗ@` ftz 쏰r O,W( B90$@ya(xYP)@2:@9@CⶀwkZk``r@31P3 C|0 C[~ 1łA:XO6_!!p0L5g,cs,Fq+.Q =D >pdh][ nB?-|-+ /82b~s ~(vG䡐% # ©?~ב: J)5' ؇0O<ɧ@L+%( HN XIH0kk'pmY Z7WCOggS@X|\^ hz%4&~ 7_4 p0}V躩|Kh ;F"@@4Q|~EL!*х퉜@Ezv]NEAa^x s ZKD@p/P^nȱ[뢠k @ÊHyW"S-d GwkއDChPQmIhN gk H ^ AH,T4Tz)*%e".sU(FcdS5cMMqB\$MiȡbОÍ.tn,@^78't= ώK}~^^qj$o,3u)$7($3UM63@o<5]~hA!& ]H~oK)Ԙ r@7ky, T;v@v>  ^!+=8=$#AL]4BM)8ZPd(~C7)Ec;]f@^u -8;F} n6'qx_ \),peFA@i"0 (2&X7-I괗`+@C;7±@A6/R(sounL8B *@CBP`P!JhIhf+vJ 8N(7i"-<؁З 7 :SrW۠e  $@4uHg(ᎌգFZSJ_N3Y(nAסBu܄nFD v xWa[X99n?<&^sƏ8-YaFgGB&E~! tt1i5P1 i(0z @Ae@@C7E@<*Wj8^ HXp/@hJ@@%IL1HqFz`~ILBh+ +XfSIjS%#Lϱ al88T[ݘ)R|qbJ>ߢºތlٞ2lx*U_:z' :@ @_|&(@Ь0x: bs1Hd+i /bjPH f Qo8hvx4~pDH@4jÁ)s@1W0& ~n6~!n7VQgM]RE*c9\X_Tud!3מTgxWXi?u|bOJ5;KeKOw v sqN Oi8-`?A fdaF)A@3-5W"@jN:YJ 6P@Ѐ<ޱ`_4l3+e! [2K$~0?%Riëb@BP_f?.Ө%,M 0p$[EEs6]-f"!676Bf 23IC $ ?m`o' ``g QlKݍSNB|iA@ьZI.Q*c [Iot<ЏHr*Za#gE  PIDֽR(ih˕8|!XBQ"pi#'[ݗ7M~mg/ )k[`bUb̋öG gHOpP[uEΨq~z|`0F!"{ `~7wqp*=6G88>|>ͧ6%f3CVdo ˿mz0y \Oc:)<@08=DKa Vl= ɤPH*0}ׂ:kP0@EH )y 4H>FaKoM@ q|R)rjh ,^ (C]' ( v0qLckvqjAgCC2@53Mn 7-2bvƁ#سq$eO5$< ,obb!SB ϲ^ 9! b`]sVɊjOq@$B@۩-;"ixؚא.&ko4Pm,` v~ Pڄj8$hۄyoXjPu(hs%O m~OL["[~fU6 j+}w)pم'KMJ O8z [9\JW6\nqx !۫%^ø(xY d}l& Hjn2y7@ s2 p^}LBVh:r&` Ƨr !% POggS@X> T|&, Hhq ҆L]t1ZT2!d)xgeإ JGuG⧝@5\Wڿ߷"YC#:rOs ^@#(t;|oOcPpxpZ&Ϗ}XOC@A&tIKe8-̩4GJӟ/mͽ0=9'M>f ƽALխ| U_-=<ܜph@WTd$ pIy ۞ힶCޑ6 f8=FRx@B$r*XCp  GF \9̫M!+8ms ```4h*(SZPc~^5 %bd 0x3 t#˥&F0p`~ ؁c! #Cτ6&#mx^u-H"1، g2ui'Z۫Z.~PTXRD @@;'"' 0@g;gu&6,ȋ ]M}ynjhرqmv 0AeB@(=c :'gl Ǡ!h̏cY55Bsu1 8$ɢMX-B|LhQbĸ6_T+Ԣrcl2\mv\FJӌU\rh΂-[ 5 ^VƗDR`+.r-֦'KB-^XL+ mn&ǒ܆ xӫB!C.!Db$$$\lt3'vW|7*pep (~ f|h\ ׏FĬ >4(0Q܌ӡшV4GTCA^3Eu>@,` ~zqN"IW'd[쇢 MB 7/KD]kvZͣC4H +8 r%-` ^1Y ":B(r\ HC(\ UrCṰ9A*`p^ |$6Z0@fGH)he.P39HSBn yD[.>r,M2$w}*3r7f"|"aBKد?)Rhx; p p~{4Swmx | B1EMfl 8Z@Q%A4u6p(02PS .^za HhYVp 8@@׌(9@AkE'TL'i7_L{߫blrgkά <ZW$+Z۸,pyGqTu %CZGfСH/VST;'}O 5Ɇ# q 7U7ACCLg/@8L|աQYEX> u6ķ`@@+vKSNaqHP%94NzU%yOnG`d%i އ L@O o 񠎞@zu p<5L[iΔBx8JX\6|#@nN?N0B ] ' ~M.AVLb@yXib0l!SAG#0;ZX8N :tԅT0¡ W*"OEtwM=}wʔgǰ+s EZ~g6X gAO[.|@-'8Aky$dӼ@d$˓0AP47 }p&S> _aR`6(3 }jS  _=GcRBg9@ l#8@~JֆW | ` hp~ TtH`BLfRSƨ-BEKE`Ԫ}ds ILC Sd]Ac}[>`Bxfx Gvon Atz5 [f*]iHhX48k hmZh%e@h~1&-> 6/@ {a.֓%T.J8M9o?}g{"#~r2_[me&%]}ZZR8Bwq2Zc|]Nz~]yUӑGT= vp@=6\X$fO+=+筮`E<'fxgP>D^bo.A-Zt`h=a 6-( .Ghp >C@P LEsFݬB@aOMI+rF@`ss`3Oo8 %3:,Y8ͷ8pxZx Xϔ 7@̂dP t_AǹwzT;"FЧ[,C PƟRS l `8 C^<6Ĺa >P!&A㍀ų:FQ-882õu5^r>S9ӭiDS8"VEsWIc ҟ-$Dg:Jg߆1H/h UOmRE 9`sI\xS1o]jUɑ1othXGl.I AMpxӸğN;aas( 2~HqwJSϧ YeAI`r_ c KHbB"Za \l hv EΘb:HRC5@  $nmx1#X,~CEnC SAmU/auR|C<-jMmcOW9|9-0rAG!1#x bSz/z/Wn ,27 B urڄ"ȩkwϡ a} n>8!7s~Y|4K4@^JI@8"5%89ǣ5dI>gPUmPP@5~XCҏBr8@?yʗV׻hjFr2+6aF_ndq,Ȑ2FTZ^-Cx 4 UGQ]j8CGb?p>45qah@x Ȁԗҁ"mo ?@@fmX}JLã-FStcQqQVd5tGU1+- @7Of54NZ M /Ã߂Xi]2 $XqX&%1!g]1<G(F(AZ\ ΞW\g LPEME8c\HኖF}jm{U_9$H0ԋ¬\f gHy9!mxy 4dZ,r} 2xZ\ApHr;aB4 F 0#A|Ӂ< ,$ cFu -|)Qmm-U*Xq%< ' FV1K# :h=2  FQ EMqW T |fM@N*4Թ[ACAi9bD:"4q ND: ݡE Y _݊ t VT?pJ!A @RbB[&\Ԣs#WUͼ t'q \Ѧ:~"(BM@~)r s~qDγ^< mv%6^|_ ("c9f\!_g5<6>k-Ew(έk_n?t~Mi+wWQyR7 N8>zc@G/HO[p#O"kJ 錥 &@ n9 njGx9Ǽh~ 0u]WqŸɇ3h^=3Gk7(\]dGAKyl7zcx6Au,WSl 3mO_Cڐ|,].ir`(v"y憶W? %7h)R4mB рfH@\*FK^k2hĥ0b QրDCedl^O><```RYWF55AB#)D[YT7 TnZ  &R_ GD.7$_/@\:4jBQW#da~f*O0ABHgv>*󻈬iy"lN`a! |U{žv`;dY b]P8[ӹ;9]Et1#)d4(m*|{ E$8y@/K!5æ'2 ֕cJH+kՊ:Ŋxؐћb}Ǹ}LeբUqǸHԋL_&I%tH97>g(-9#řnI[>\ ` Ahm)WI]'xABeӂR@.ְ]tPMaNBOh1x > Z$3a+v+8Z`iLP09OggS@vX Ni՜ÄW._K8yLe.t]4@q,a8A;Iu3TpLd]99+.<y\ { {DSX H^Aہk 0]EL=Q Ft|0-Q/0f33 7Bet(4Z'^ Kc2ELB`Z{p_hBpY8q!\"C!>&!RAy(ц؏#|r  EP8!$#)*T4Z?6<ӄdc_׶jhlP6#<:Wb@xs "n `{†Ϟ2 Xa4b% [LkP*WD?ߋ+/aƔo:CX95 >sp@lA׏ІD hC;&|,<$A(]U*q9ԎQTga]gB@h讀}ay?nKl=a=i:;/|r3XAVP#]aIpcG!a eZu2W  Kg V@_Avr0f]CIA -9K p~%q^N@kBA}xc)cPE)ҹ#yv,M]b!sf8jꆃ/mpZ>´z~֏"'͇xN p]8~L (z`;3 x}>`OB oB|y @BۧT'W ?~ zl73Ք+h_h\PPRCFqx ~%/')":n"C` j䌝8!D2'‰lR=Ii l{%\G̲BNp£pz;%x r[BUhέ 5S$, z`y9jYwsQ$_৲ю/OXB;f>A!0TzXD:km@AQNAB` 6-~eDz8@ίZ 觏xbWx%@tM8L\ͧ]~a h %">g#c5tn*؞`{U,_i4Ʋ+<'P,OgGdG񈛡B@mx&[ϱ4-XEWo(A.0xzo&AosP E?(V@iaH06;T%~C.^Dj%u xx!Z5ÛuAԅ( 8ɞDw!`t:wR H[f$;"&X'i,&&70 LOXM`1{,' ny@o ))9lX\ p_o'4n or \'.3 Vt4_hц,9 -%p&) qQBA\Ic&hLQH爂rѕ\6Rj/\fJʸLC 2 oU Dv uWHu   VG7OBRd]6tGZԫDg4@g<@;uA/U<ވ$2$`yܸfNA6K(l'"GW4@GxzՆ@02PG@Ô ^刊m6ί[#>hgiLPXQʅQ1Tgl Wn Ը1ڣW?Q:p}E q<XdI`=.@xغUv1?e톌M Dm*mSGpE_jMڅA%@?K@B8% LFC2kGU8$^E #G&:n0e<-=uIZZ $EW5I٤kPϖ㳗k_Onjfn^i  xX?Js =XmXp{ HNAk~mn3R, D A9m!KnV& t\\Wѳde_k cYtBq24Ih8q(H (>Hr/wn eP ُ1x`$G4tt]H_NcN.U\e#xMWYfo9$ZND§G!#z rrx=qdڳ? p^IR=6X NL}2uEDBsPK:T> d xjw`YGܯ! 'a@>s6[;p ?~ԁ:n)pPcP*5Vsn_]uM"yxRxYS;\9RHK)*~@exvFx̶??PD< @7R!PV>[ynj[Q= pH1 `<>LhJ;5ƫkùh\s6"ɸfiC`gn̐q  {`Y8Ix ~CCKHjVȗAMzRcUx_ %ԥˡ앳U9U㘛 k^Q{ʎ 5hw^f2rA47ImWsiB PO3u@@p3pszvc$`G lU&a鬡sE|7^Z 椀4tsZЋ:Ep$hh%Sa`a~"A^"~ E('UYZu)ɌcY^\^2J\?9<= πI~Hxn$`:RaON%X`}Wg X:Tg,ILxIG]JASo Gz~zqaVakP@-l`ϑ2BVA2mP J&@?  } a uP8<9[G/yZmwPрHvȟ( e 4ڑZ 7 X:%fSUGUpaZZl/BQZYr8Pg ,21( >~:%;A!Ecj7FD-;]z}b3vdPԡ!ѓpB.MG ]DH/~V;q0+fk >sBFPJsx OggS@X i 뾙% "~ZTP0O#{~Y3:)TƑ\Ƒ,QFNy<[U랏,G>AHoY "16"fB +B G C} 73=XQB') WcpVBE`U[WCኖnc[B o| { Jp,A` \I f1q 2zT4RCi0Bg aCXWǙΝ;o$ dQ QD)*EίG0L甼*+}c,we8Nd_6!)4vYgzrB@[(%qeodqfi  r,B?1* uA$I9l 8em  ńȤ?4Eqd=)2[ TKI:qnk,rڣ;wU[ӶnWr 2֭H a6{z8;B (wXNeg x:Xkv@s ``>sh_$`6~ &+4 @"xTB6 :PDV{YBS~%abwf!JQ LB:K.9$:+麨P1rv u}^myfNmt:GaAH?-A (`8>94u} *U9yP>;bdh,ފ* l/ưr0-(G*<h̀L҃Rh8ʠ (N@9~%ud M3A  ~OJ'W $.EQa1T.E{3I7/Ϡ6%砉 ր# ؾ<|%'9GL)~,`{'7!zVk7rB=-5M+ķCGOGbklje+Do"dPQ(*"7á_|*k+ f`jde ڗ`糖^|ZPR뺚*Zf9Jak<~jϳ bk>!awm!GLHQ!IJ8<%z qʴG@OH[pGtn4hk 4|F.H'E PSFGSuaC  42PVA h \e  a2@9Cű~6}cA@MQSGhĶa7E4?!eo %(7 K.z/xCވ G-#7&HO(z?{.a -'n@ 7X*3reqG ±+X; $@moFPc]^C冁ˉ!uEIEVEא|Ŀi@pZ `0> 2@$j xQjTTВa3*bEA8SM=CЄ 1ji/D,$&_X}8~hbQ \vXbj{y9^ Bac[t4p~ ^D9?UI]n)V*2Tц/_|d/[i86#(5 o3A J cl$\%ThjJ26b(rohꔂSiVd32F ^; p8% z$ /X o M,ώXgSw>c.ZB^ܰ7Xǰvta*@qtP٭QJ8 @ "De1 &WrpNFVТ(NLT ~ g W glS*tFuQS1Cq9_+wUDU|وGag#xN+Z.xhbodz} 2rD =4'es?X% ) (0Qɫ=;00,UJ̀lI &x@*#Xl#v> 𙊕@p@~ bv+ zӺՀD]E#h3q[FJ2>7Yk7+Mc ۴Ɯd4%Fk|c%C]g;d! `P*%| ڿuQr('iwV.۲?"ӯ+ ak$"{m'P++7xNy"@p#;Okn;9 b fnd:)ȋ+Փ O?@Rj_u(@̉ġ`b5`l>!P}BE4pB.%0.uZTF0FKXi#Z[" ڇA ]x)Iц: =/5s`o1~`B &,R{yMV9:q7ggpp(Ч(:<"@P_Uh0"e |pҢ<O( @hyŠ!0,k]$j3`KiZT2%$m>*#1<?Us^(irD'vdd S@wtpCX~*l_@g s'a8@ {u͎3=gyI%@,/G htG@V.Z=Oo:8X߆*<L V`O\ƀDx> G4؍YH,arV`j*R1q(0d,њ. ?u[fWOnWF}1\v 4PNY. @#@tjņќ`XBhbI_ [~`e`8 MJ ͐Y vb lph)a pS4MhQC%E&72=YGEJB.Z"0NPQ̜<;7?@^ l?oA^X z >qkn_i@vz Mh:* :UY{eP7͂0f 58Gns(~nj7l= $ OggS@X {Hʾ>5b-D3JozpM(*8FK#P,ip2i!or:|ؙW4D9hv=,;AX @sy p ۸x L @AZ@Ч` VƦdJs<X0yQKѠu@>kS]> %`  aa1 Q",GKa5pƸLQtc\2L Lߐ-iǹj?-&AQ-"2'=|׆1$G"!p|Vȹb &.^{z4A8>4rai:y@0.dPx+NM 8<h'@l+@g. Y`mTjLŽ ) e},,rC,(+.S Z`zCjj]3)8#Ya^z'^!46MH/:Ud=&4hm P/L +x.`5ZX ^pyUG34W|\8=l>ܯ?jR|xY)0~q>Y $sKfw  pXO BgA) 9ɕxȕ O  SW6M-j:QpdWKGTsTvxz*mSEmxeSUROrX;؈ j͎0fq@SW( /K:&@ - %KsкXS1@O(Ӏx@ ȥ`K⁀'xF>ĵ0TPT$G!l<'b|Nx\0ҝ@R6=xZB8=JS{ l,.&Ccs owMzs p}c;A4?V¹   L\Aq `(@S`C`?"%Os'dd#O(]hi<|;uE\UnLAxhhܩR@s4|=vh#< hq31`umWhm<܇%h 0}@2'&(~<@W 0@3$ %h@+` hPtEpr)E"9Ee}W{kFba!)\I !"4UDA.)nOz[l `ᑰHwvz˥ͦ2 59puX~VGP3η J<td)aXl-xsZ`M'\"0}&&a~ @#@J xOfGM r)<ۛӹc8O;L -SԺ4b\<L.O}Q7Dߦr7o zl߸aclD3Xx_ 6ǰX@na*X`ȃ@HAs@^Zbw0/ h A  ȍxbS4*\.C3+8 0 ϣ=Z(#?;/M_"*sNw?#w$.~(Pz@继G~`>5,΀ = LF @)Bȕ<4\T S8r*'=I\{ L5@-*8#(?r*Gd]\~VP}r90ς< x# ȁZ+gAn{X6薈Z  ,ڋ,VA惁h>@P5*0TIYCبzBLŪY% h pc<-z]  L!JbQ@`jS:ᴑ+܀8at ?:֏Xݎ|Pv< : 0>T,b.N5" 02ҥP `-hfͽtb8HuSIRnEW=rIx`Z4I ]]6O瓪wAhxݝn^~C `Yh%}w^Wv{`~GD @ [a'mA NJ`),p_p) K׏BBDfĴfm>5Q^4HA%"c`PmQ9u;/ku"O1>~HBXþrIگ [נs6Ǜ5㹟>ο|:EGh X 0 ;r 3x,Aa0'dAHAtRNK X`J@o>u"rː.uPhTy<$~JHc^CɭW$i|@QK$ {X<x^`p(@ݎ3G`~;)A۝ڽ왠@EBp5QN+BK,cm]%<ʪi. #L`?3UY- hsWPk,P x(>kva=(n `rLj+y"W XCU<@Pi B5=VgA(+N (5.em 5 ഭu}tʪ- T$؃o5IA*1y9 ׆(|fo1@Fe@JQt鱂&WbA J^lzV Yx<G9@JT@ J8 G8I飔D,>M{QMSW`fA[W1_Z՘ :anB<@\Gg~4b@Κ Z  t0+AL~d _/8r?R` 7&s,m[l8GpCڇu10/#\P? /А @!ɷ㥀iu>92l] V6u Ր`U P`AR(:x`{TW. Qz ȃN 4KQ~ Ѷ" 8a~Yε >/G@2?no l @< qHӗS`nu]0 RiHڍ/4) pOggSpX ؤ{ncTG?12'!~ȝmb `܌K,d+9qq WxH,EMC C\5Vv5~]BPEXˌЛǎ& Q_UC.ܮ6@7cK-{<;™L ƒp"gp9 8@Q2$hbVRu̶u(@ %Yv3v1(A<J&= @D Ctf2؞2]y 胟*WVxhf6M Xa0\`X ۉ *v{'R6&^Y]{ù3dCk A!K2ut{{#<6-G^R%-=5J@!Ǟ oqަdӞ@No|:JV!Bg hV(p Sx)$vNI)*q ܁;$49hXp8ȝyt{mTrohubnY tY%L tQ>S~E=QI+W `*6@ ??vp 'xX gXZ0^#*dXeEߥxT͞XHBWs4kئQkEjF w,3eX)6Ϻ t&< zL]T?=*6I8kw*rvرj2=@/9<=q|PP&<=(4"7c OzʃS1=TC8\\>$H[6; \8=0&bB]q,;)9zWipwҠrQRq u61&S!A@*?޾E?K:_nx5 g'BuSh. ZMRWZDLK 1:Q6`.82kJ8~e]  nbm7BY4\Ձ؃:t*B1|pгIn+T@ɿ6G(T =ؼmˑBȽm;jnq4Jo'=NHY<㽜+gS"@^Q.=.~V<, t\4P33ȓ3%Ekf@ieJ=98k 204\'0`Ƚڗ1awߦM5}!ncŖȽ2Yl9VQz}9GQ%/c !>H&ri1D@6oW25a.Qs>ak{,ѽbB+ѦJ732"WPOTyTB ;`H >ۘör߇eӵ-(=}9l%!V?1tsA» `[x[k!K!?v*( _[쯞/؎j;҄i9f2tk lXnikAie&)-\J@,4Fxg>1Ø[ Շ]HؒP{\hC q<]HC3G~\"x~?^P=ɠs3Vb$B,w]m]`P U*2H^I[,B۲~|%cKCj-aihCq  vw ]:njw8WA o !c*tQOWG.uJH𽞚#d F@p8H`@~1aC!!ilPZ-L @8C q]ET:\0e(L2H@}9ttMe58Cn=.۪e7 N0GVKt QX= 1B2ad 9+u֖_((",ܺa\`pwerwN?b% Ї@@P !4I^u6ra 9C !!xD3ӈ8|3!Xo !]@PjR+s^Iph(p@p^u/6r]a ʤ-1C1_ Ņ@=zV% 1IH l-BE@` `P8 @^u/6r]a ʠzcB C<S" X"m00Lm!@)j@C( Bh>C_bp@ЈC 1 ,~ə0J 0G T ~ .c!~ u@  (^u/ .5   ^u/7r]! (c z~ AQ@8Q/Ce@ /C/- lmms-1.1.3/data/samples/stringsnpads/space_strings03.ogg000066400000000000000000001360241247673406200233060ustar00rootroot00000000000000OggSY=vorbisDwOggSYsr-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4Mذ:IX`!+TRkB9'+sBJ-9{sB)1K霔Z˵9))Vc、RZ1{ %cSj-\{ヲB{{=[K9\fD # R1Ɯs9%c1sBd1ƜsB!1sB!RJƜB!PRsB!J)sB!BIsB!B(9!B()TB!BJ!B RR !B(!TJ*%PJPJI%B !J)%J!B)%RJ J(TR*!B(8A'Ua BCVdJ))F"ǜBGsNZ-S)&-1V:RLR %N)GŜJ{)A3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS@^YKO\)\''{5ɉADY_ܰK2 FY_VLSذZjzuqa}r Vj"a\c LQ;&CjAFAł=x g:{"l@ԌHιu'#BpH(Ff*pNG-ϐֳV]Z1L B;ݓvOpƚOgD4@<@K=yEMxRYח&@\r]-|9f/cf5[) 8~_T֬C~aK,}ueD$$e`,+h܉t{;u@w ~5/EV_{r^je)ca1V bjT*jYVբ.f25bp CZdE2lwJJ\j}Lˎ:뵫J$T^SG2ʭCpew@khLj#LUl|YL;UbC)f2LW6jb~2`buZLH2 Ldq.bm%i) 2@ }G! ÎBjU%?\ŷ݇Hlqө2oiiP&x+b0.|KР@C d}r1{4t(ĥa2$tcs${r : 5U4FYf}C, DL2@@F tǂ'*K@}X2ڼ_ܹRM _H'5pGG: JpBi>}9q)CΓV>ќ8Ď![+ `ba!UuJllDUբ$ @ 0k" 8 *$-JdC1qӇŽmuVeX%MG5!PpedR[.K{ rLF^S㜄!mUS㜄!me z$@QLEr! bQ+ IDX(T] !v``!X`BKz'-Q/"@!騟 iUæ"@TfL@5hlZ:j0D  .,T#LWΧTj.xaMrIB"a a0> >rQ)c% 78JiL2$*#C& "3UT S;"( cаkDS / VT?ALC0LUF  px ckgPJЁ& ^=-*Z/jJe]EQ$A:B*JA1΁9U Vq Ŵ(U4FY/pa:@`RT]f* Iy>uEFE  .)`$CB ,J5g,Y ^ԥYwqVeNjiwSfYy; $Ԇ:Ldb*=)NL; TVL@AM%h@-€V0@x6w) @KxTL`K2=@"$ @ל-lKֵ 0kΥ^ʝu9_j)wVשt~]BUG6Q 5 BfnLPCAհ( EPø0dT t!(u2`3aH H pm8H-7)~!H.J\^ڝ98] +YYZѵ G#exh,R(;|j&P@UQU"@4h6Q6eP ?X ` j8D@T4 &21$`#j}%% 8 p 8J8ƤT~ʝu{،jNNu_MgaL.  jd-űgc6*j4`PXĪ PiHh` su%EZX$8vP]0`A )`n0j(+X À@G3M@zM8`I>mWFW6VQfqnT~eC`C!AY`6HC&†L" D0,6Pi((&"BQ 0s :CЎC* 1y m B;@  /@DII H$^ mwv6G*6t;#VT^ HZ ,CʐV*Ib" NUQ31DTغF2 (P6,PPYX(:)` (B@_b kDpp, 4`!@~ZcGgos?J?}%WDZ NTP#tZ R2b1!"N16X@3YW Bf`PE}5Qu 0i A P:1a B0Pa `| @U0 @jiGgt>ZAK54ף3:o DZ,'jP#QL T39!& VbL@E a03@'XHC J$P ՄJ SaFv, @30 886J P@3 O,'X耆 p(~Z0EvZ0E. +@2D=-QL';D C@MX `RcTլe6ԨD 00OA%0P UO% pl.ЄI` kBXI3:FOggS@Y'`ƾ~qc(|dm: W81h~>6 ^$i!Y $@L`!(-J cTġsf u`S@DLb Q0 QQ*HDP EhF0 ` 8\4v )CGN ;qFS>OӒq.`>OӒq.`$ V8 P,dU$#, N Xb7EtDTS"N   @YP4&YE@FX M `,T(<ia<4X(t0x vQx/$ (p >"#8!5 A>2 pFNU@iQ2CD"j]A@ PA8ud4LL00(J*e`(L A,*, @@(p Bbp <G" <L >mxxcjYr"ØgjA`QZg  DVp9Ƒæ5Ů10qb8îb P J"lPE*\6(@ KDNg>P>fB)0Px8>]@8<8T &8(  p 阇W[yh*xI0S`AҩWDӲఋaa6+M, P (V*zMQ , Z_Ph(L!f 6 2@5N3 XhdA+` v 8B[s( 8 unfޫXGp7^@0igu@``!2i t`j(8*6!j[Ԯt.E eR(j"E*,`Hh`$|V``:@ (V|eb#'!HN0udCjǡ80 Ţj4"P4b ,+P$k iaFf!@Pga!g@ -Va`>X5Њ@A  f^o f^o(0AV! 3*e]aU& )G Pv5ũPDq(8uC(d6`^1)Fsd]@ 0d  , x8<h*W8x ]\ `Zp(=56gk؜C@!$8@jZ-Qg Bb 6U0D0uj( ijT.`qqAV R2h:0pH 1`9kX EPK4ʺ`HGh֦U @ XEn{2g\p.$,dC(N+8Li5pZTPvJd}% d]@Y e TF<p  @]dsA+0H B @ <@5|Q`&u P@B@&CqrTl9gP$<&!Vvnb7)  ]0S Rc25R-,EY/*E U LՄJ< J`.<<B% @Xl0*,DG8d(:@   +FoT_bfM( zxf2SRV1c_Zհ"CC9STӆaX *PW"Bc"Pg P[`LC}@`Xl@%d.@1hXLQidO t w A-A@$V&Ms ti[GPFP 07dR%YeC91(i [E @Yjc* deF"HEX4(`ʈSHgp y_P 8`i@3m N p р$A@:&[{׹-_y:7>$u -.NJ'i  CŎ(VCEpZ @1X(հ(aQ:-L( 5V^PFiaĠ3%`\n`1  8lQdfYBGa !66@<0I8hQ]+ hJܵױԾ+rR\r^{S)j$u-!zC:5U(F P1 `  "j%ȨmP$@ghZPP( h(hDZ0-0v`(z !@dAPx @QGl @@Q$ :` h @_ 0Zp8 ${suNN[=cp9ֺom'ѭ%a* YgR!%q`PP+a H3j,3)Dck % LPmD ј FPVdHTI3'Y0 <i 'P h0. Df( `B@@C_-P`@B`KZ%r,{+.-!_˔DeoeӥE7 J-ЁIVLY0qN C DD6R_( tl P4FY!h 9hX 0@< !d4Z&Pp6i1 P_-CL3E 0@G$3#4@P4a@+f9f֥4d>GYgА  jMzC:I2 V0q8SL! " vQP"6@)@ TeDJPD@@M@ ЈTu;g % a _Ph$`n<:-u @'h0I$@k, h<+9/gӥ'TXd!NPplW5P-!lԮbZnCp SA&)*X@j@BgP4LaA jPPWMY`ftF He0-*4:`ap(4@6.* F@TYW "C Z .@!6L`ΠP_(d"u`\ RX@ 0@>a:'U@h\0J9dF˥)3$+Y*]..̐ < SӚ&`(B)h 8"j3ZTTus " ` Pa `a(J>dX 'ԗ` XI5PS6jPPKRt\`s u Rp. 2)_C!>Hh8`' 7$k9B&#xx3CĚ5y.)̐$P7*VMkպNH8P88M0XTAT01Q B PCd w0#Lt`Y4Ti-> V 5 Ah&@0OaHg8 480 #@4PjBt.aP x 5@$t%aĚ\z:W/ $ӑpGjMz@`DZ60@D@/RbCHYiLJu!Z!``!k(sL 3fc 2`aqP6@d`.,,0hI&YmX`8H@ J@((R,LN 4Y,8&@80f >69m\z%,)Zrٖ6$[@77-5S:-ӆCT1Lba"Sd+e4$D#% 4@Q$A@Bց%fX RW$$ PT2gd Jd} ( P9  `R2Ѕ"6W+@h^e&k+(̐ p;NN[۷PcU}[ P+2 њ%]VYJA8S@S Nԙa Q PP4E;3?U, 1 J \KveŸ<|fe:͒fY1._.YNԩ-NZPtqD)C;Dg"N:^dZ2 dD XHE:EK!@,ad#TF e b $@PB} PPRV@X /\3@h`2.0 * 0 I@#P@kΌ#9.̘:2?`zSjӤU1RUb(͂ jYШRDc.{Hc #eDhP0(BaJ!̆9TTˆqJzRX, % f2ll&`Tb8d*\Xx+`@O! !,h SyN ;pBt`kb;,(ƚ=&C/ JԺ֐ $ԛ:UQ*ZQ*)6CDT* J)j"DB0JF 3`*`.B5y` R"PTKd LP6QP% @`0 H`A P6@y`\bN&SL*:N'N d*Jvܜ|/Jvܜ|/l@mR2MuSWp9(&C "(`1c $z:(M+2k-2dY@&R@F?lFB,P_'y9ȨF$dH`j! gX8s@t .. E: Jd@L`4"'S hg^Pv\il9ذH|xfC6΁9J 2&J@YXu0մ6u]g"tRТSĦݢ("SDհ:AP1" "d L2e4@,k 3`H!`(X@ԔDLL 0g`q@0"(D'~NX  %H@1#b@3 `fe8g@0Na'Lu|a~*f,΁:0?wvKY{b`9!MiJA1%6U1"8PtZD) v3`B"a3"4&R)XX,2\$}KXW uY a*h *@/# .,>*RX*LO8hB~( @>D 6Zz^h-MMV;JH2Hꂠ,l:%R((bUMp8TU1E (2T:"5 L# ))EbĸJPPi<40K @MY$J"tb,@ OSB]"d"#t3,(P -EBF@ U OggS@>Y@dcNҗ^fj1'j/[y 7-irB)8q:JEͦCCU"SR(!Vcy $DD-<D}T^ >UHhd=%a& ec@7tf:.X,$.@ @3K t@SHpd.@^ Cwȥwmիj!;һy:!MzJK!tZqD8Űc j"a:DVQ0@12HAԑ1 @DMEQPd=%(KzfPIl@7 aA #E 6@  @J*Dԕ4%HYhV@`&TqQXsP@> (Aҏ{w[͂%J]'Vm) %` *e ^7#ȆtU)8"SPP"VD`)@hLVj hCDQBR vCT@@1NrMUHEh"~P6@ DHLRN @?_/ YWB! , uThL1H L~ U >e(ѲeV/C L|܍(jن `Ԧ`*NE1'ê8v"vC `*&hc"jehX(ԩ"d( 2 * `,ABm@'  Ax **)̠ +D}bi TA`,S E-`70< NY0@x A > e75uתR:GkU:cR&"pI(CjMUT8 NCM;P@"*`؋B*Tf^1 EB,LȬ0A@(P_c 1LZJPPT(3+zP)\'@~a @-  Z ,@"0  @8{Qy@R0xh@'+&nZU}b&ΡUhPM(i4uVL8ԉCqNTTPQ01@/+IEfD#%5(JȨC e(NJ -TJȢT$B0 @Y`6`*410 ,@ - @6hl:@}%`.l0O( ,;78 1@|Z]X>K&PyhQϒ #obZT 8Ij-uir F1Z,ՊX!J"vDUPLUf5R20$@&NA'@ SaqfB@Q.%bqy`,,tPOP!(" #@(0>0m `5 ( sP5JFd1i%#2F\̘@0uC(ݢURM-TLEPCĤ 4&fVbhQנ6hPT#'L!R'2¸d >O29 @* >aZ`@"a3@/cJB0ED*,4XA T'@dT|L0 @l@aO-;&݌m1Ifldǂ`&gZ:#ԫ Sq9!8ULpjX(AVլEc,5ZfFYB aADCbBdQ@ @4j=El@'0UhͶכ*4fyZ5iL9@@q N1]D LLbŁbUNuV5 AQ58q`aT(АA4 B砠J`%Y$(>gaq D]&0Bp$T!a0@(a$lDY@8P8XG+, , .(G OF+7>A?躝g V`yf 1OpݞgAZAITzZZJE=J'Eq,b7Z!X QPDeVü(:M R'V@c,Bf0.HD$$R} saqN E&2B@ 4BP@@c@<P0 <N qA 3da5<I ځ{>+氋vrPY1]OtzrN"B60iUSutmBUՆ`GCEP5EUbf6X2" 2`Q1h*d PM+IE2($X>aaa , d1< p"TX* S:B"THCd.Zfym堽`r^K&~nגIࣟp @NJVr-U*)NjA'b:UiLHD@g d:Ȳ,eP4h$P\XhZ4ƢKHij@B 44, P(@ @M]?,hd,'C#8VaP{IQ<0PPim *|>+&ތ&bh̯c8IV WZš859FKKKNņMĮ QAPј*hL98L_RO(Jkh (tJTA  Eb44 K j8>0!"T_b(. @SfG`qhY0+ɌBg T4Z ^TD\xsRqAMήY tWTZHpӎ%i Y0 A24hd\B &0ͅA֠ e Ph$܁ETB'f]6B"1@ EM 8 yA4 g`TZڠF`p@İ! >ӆ7ӆ I8 Q nh9¢^Wp*VA065,(VEb 6 (B dL)-DdaL@fXc @&.P Hhl i0A.̂ ^#h>0/DԕJ3 jJvT$EZx@0P@4ST0: fSр@g@3!1 OggS@YV~eT&6KQ /ɺ k6iM5*ʢ@g*mpbaQ0 QUQPXM԰X@DR(! P: &0 )@=&C tء>aa0\ XA)`8 $L}2QT  _@@k/ 4,Fl8;00̚<^ H$ăC^-X XIz. LgiuEk qaj✡: SU@4-P_dDQ̬PH؆d*fF4V#*`(^LCL$A  }B  YN w%NMa!AK0iU(ݐVp9--8ř"N Xb AM Y3A lBCR`5 %(8Â"h` (d|bc!P0 C$5@Q/$4Ba8T \4PspM*@<P>kHj,ެY 1mbx$$0U *cp: %85EA" b*RkXT6,t2AH!3А,BP J5M#̐{c9ffy,'=, @=E ԩWiuCbB8F'MLTUaI2B((D@$FLԕXt B# *! ghu@ * Hfe"` PH&Y" S( ppZ^VAK* ` _kf$a}fFFaL$u%IQ*!Ve:h!35 i (DÆ:eT2@B f/nf2` ŔQ 0Hmo6, LA#HHXS-N=#p,830"&&b``;P@2bAaL 0@Zd6QBEEϤHP`'^ S _Ƃ" !S@KB )2 1Pt^ "IFL-v(> `&h @gaih1@k!x8f X 0SpBOP;H2 j3\&%9P(FjbZ1,NQDU3p X+52ԅT6 Jd2:@"yLë!b*05(D ! A10itA3 efY@@ͣ "(y>TCXJc0 0`5^o{q<̈́@`Lk *4 `V;p ҦM P 4 Fȝ 0x!Ƞ3B:hT@@6&ÃX@`(̃8:9+ @hYCNeX 3ds;Z6o1Q|elsh,)LZƩ9q 8*Ul @QbJ0SdȨ/ldQC &䇜BiPB`E 2i @10>⸙TA,.**@}Blp`HB!(*@Ck(„yZZj`i@#4 (hhH@zf*Nlc 5^뙩8lx[:PJGq'(]Tq`* *W2#D < op>P s p( sQr`ʈ1AR (РW(@D$8D-)9p 2\ bZ هChP2d4  mzL+l׳`]id{&jD$*5 69ZFMU1"hjDMm6HD e]Qh@D*B4A 3 D &UBf( EP N0P@pBz@fYXTZ("&I$u@f@2`NpZr9iAPsrp:.sg@ k+ #&bI;jh1dBM VG醐iզJGP9BjA8M5@@Q XE,VZJ*)j 5Jd,2w`tEH  B .tEΠh Y!,@ٰ$%X*" *Py@Axi(71DPNtS@|2HA9 cL `j,v6Qȝ nՍ (b&AQԴQi:Ǹ9` 5NAfjc5RW i-* jE66$Ճ N00ET10 KxtLFd#YE,̐)"A Ad4%dB[f")L(y f, aP $(@@20ASfi`# 8>$@G͆ FБg}Pd(K8Zuњ:adeNԆӪ&&`j&85) j1c:`mY@Ép*(!>@:<shJH @3bX"!<E2 bJʄJ]^L0`N 0#!M(I"|Nv8}Q0FM+=^ ? :ZdЩ`لՁUGVw!lPbVD-B]MFEѠiE RsH/] *Kd: 0y@ y`(P '" 3AT^ q$3 ~@hHGrG-N`p % J!Ai5,9Hm(m^ DˠՂ%2p=}6aաVr 5*tZFũb5Lġ*j45 3e!FAȲFP86(!yTQ P€Q 4`AP0+  @!50HU\0@ \7Hzf  [O %@Y`r U:Ǹ A0W[԰ " 9s**EQCTi-&>@@GB! XJ@+fCe` *!@20P*IY:Gij`H($@ 2'sMtKBCA4J D,b8 ^uf|j o t@$$PTL:-itBf `+Âi7É& Qq`4̣`@h aGtAfC0iy Z SGd .t0 0 : "d@*U< dFID: ҅̅!`b~܄A# ݚth@$*@ P^ vl@n D_-D}6iMZn*h ;bbQ,jm(j]C좨X FaHiU 4! `,,!(: hJ`* B8 5H8P 3l0v%sHaBS I%8V8L(tք7,2;5A8Lhz 7< X> %[7 %[(/(%Q7eH9bhuZ@bdFrbC,Sհ*b fNPU:bIN XDp3k.>NAdd9F а4BA 5LE H@ Ĭ4ҌFPDR h 1$34hx+䂆BAi<qWx^h:5 <i@ׯ HB9 f!6ST8ZZZijC *spTi5 H2)E6 Zd* MD2:X0.$d @߀>80vAic@`HFY byc :P!`2&"ȵxxQiL X 8@#3/^ 6@>~n D_-@}dXeAiHI[O068 (nԂnE1D"a64&d :A$ `$D}&%Ha+aAXK(A0 (?3'0CRA}&2HՈ!31̪KpR8hI3kX :I-b !4K$&4)u&p\ < ( &8> $J 7 $J FXe(]ͩԺBG1nnEաj8lXl6ChX"QYil$* ZȀ1T(@@Q3fACL$8 ELL*pD@Q(S@(qRZ(d^ d`,$`#yzК@j9hL#h,Ð~6%u m:;B u!IKPE S01#S"Sd0DV$Y-  O8MY_ ,  e* }4BB'0A5/ AtĘ$2VȬ̥R$D "@@h82{ /x@$4 f9P<P^] k.BلÆC*jZN7UzF`E, jDYӘj*!3%dl06N5 J0XHbtDԕ,` H0,&BB4 Ty:h1-# K0kjZ#0×CҐTրFP ^+6% d:׊ BI@6a6p `ȤU*VE˱'SQ,V ` DQ5E# RTQiQQ[$a":RdB:@ B D\ <D\ C)N0̂EBtZeWqNX"Cՙᴘ6!4hl=R,IhD8ACFtQNs aF́@Hy@ aMDy iDUI :"% P⁠ *Nj&p@ h@I4mŀ>+$\LK.&)pIP:-ViKɸ g&8LEԮ`"*`jV+BSF@8Rf%|daa0Hp< c'xi``h('KFt"@`!#Ca@a"H:@CB)BA^O ʤ > h ZPhN(g:&Ɠ 171l5\kUuJeHG6GQs&vUP0X&!vAF"R%:PC`!0 L@`(#HPX<Pd3ҏQ0"6Y ]@;OS (#YaJʂDt$@/  (h85ֳJp!ZW3K9k-cϫ)i%DUѪ8Z;Q0UC 6P ͊NTDE DbvH"d  ̀d,2Q\atN Ӧ0SXY 6Boada1XU|f،\#P . `AGTԛ*ZC: H *fA bsXb"(`) uUhP2Ys0D L` B 2N :R' . X20ɱyE@  ʂ~O0 HspV,p}hC~[ր&M۲41On  r1:iU\Pq X-8 +" Zm"  +u K)DA'!(X cIx ¡YlLP Ŕ`V$MdDãՏ (d(́ 43$E_0΁BFQt uYBC )l4pV`~;6KRqqi9I@mgZZVTѪ9 9(ÜLLP0P1AU@Ph)TAQWE*^O2Ƹ2H `F0\P0)쁆$ 1'haƆfqTULP'8 2#)rPPIG @C#'$yT0iv0} ~ Cta,1?.D(kA5}`xUӪTV8%/*ΜQ1bj:  T@1BF}"t`R -܅W3 E@@0FT 0N WT LC J(BS!)> J@P@TZ9ޣ$i8ij5t9pC[^v/P;;YC$0DK:*ڄ# U i*ZAJ QɲUuP $$6 E 9gPS! NP@ t ~*,0 P@0S(&T(a  3Be i(Fp14/Z+ (-!T6 }VP>8^TNz:v UPCVC*ZzZZCXcu951Ulv E4ZT">RD]"(. B dA!90 ǀ @DvbC32i x4QFM@ԃ1**2+#`P }A Ƞ!p8, &>$>g$2ׇdާ+0IDRJmH"Z3#SՂ:M b*`XTLEc248HHREd. ] ̠Bs0&0 bB@Q/BKh@a2¡yNB90)Sb`. C0 BA y 5`((<)  @ Xi>&͸9TiT6 Ȃt:HX!-dV3  ? @%@`X( ` JU9 @`Z)bXNxMB}mm0`!13@07Ҁ3PhPNӎs҆1>> y6c| 毳'0F(u !uZ*SP+L1ḂժEӮj100@qj`tQIaaC/iYG@ ,@"C!9BjAan@0?R@T0BR#v0-A:d(ta.Ёj 0+# L_ ȑp_$ij  0<^}olgF2Z-G{c;3VpFjZ]EL0PEAQC3TIVR*iج-Idm  PZ!eCx `*&@"E*chb %&X9H! 8@L Ŕ@i:5(ySE @Y܁'@cNHЪ$ %lڀ[UhldVc m۪' -V¤^MiU\BhIN5PÊ6aQAVQ(Yu!B~ PIe .:(`5/R@a"TbBG,]OxWi8@%0Tb( 8B :5 f2Z3g+`L>e 7=jXB+£D]LI4 @  @_`́j^H!-ll$"p T,D  -k$6vAAp*I!(0IBÄ&T`80Uq*skW~p'Ύ#`:VG)PIjQ#&v)`f/)BT&0FB`JEf@P ,X0i.P\I @\B SK8m ,4 18f!`:PEh,02yj;ڀ5azVUP ~ܷ9i~T_/mΪ|5Ć)j hMӪ%-"v1T-b`I6&VP hi*<D*+4sd` f t3(da$ @ ] ,"p A3 ,) 0XTG4*b@Bh &Ġ TB:, %qq<èon 0"-(C(ZZZQ#lEVPT("6E "4VRjQ"„ `ijY$K.A2C#BqlhGB @,3f(A@P&;v 6Qb?Ԟ_ cތNi,NUѪTQN;NSLT,R&BwaxY((A!s)0 ,y`RhvS UWhq(9-Љ8KU,'T0!Rs pbA4 9<5qEGq[Ce"/=BrR/;Z-U-YU(ꙞBV;jb30Q'S*VYT։R( : "!Mѣ HP10N] ,@Z0؈0 S%DDBf` Aa%aX((ueFL)OƠ`o01 \BPTB@x69lp~dߤNl@]"g ,$kVU:-a v"*b]lb]ԡ PjVLPA/m$PC<L0t.A0#j,q 6`P\M:>@t!r L9 @CZH' ;9 ed#./Ж[ed͟b OE-#{lkx L-9Z BAPkJ)Դ*$-a#jǡb  95E!:0% Z^`jD?է9<&) P j #d,2 0Bh"Pfh$$*!:`*ix~@<"(m3+`h8ZM+(9 -l >\ n>4ţ-BJc7` _!{ UjJG c3VQUaWqiBI5"jRJB!"(\8@C +D y$ F#@9 sAa$C| i@6g^"M00ix!4( `h<@ ЀJڀP>d͛=S3,"£[Mݼ3<5â-"Y@RUq*FP*#%U&NA v1bi3a"3L FѰ6Q " dV#H"UbX@La. O(`@'<0'b6Cx!Ha1xL(`c6t : L#cH (@2PUX ` X>5d 2m#1j85d 2m#1jh0$W!5tR$L'Z 0qU ĜbNu"y쨍4Mj6@B] T(dfT* hULdQDp@f\ ,p4X8M(PjG@Ҁ7 sC0ͅL5⇿B-n 9ᯐpp$P-`ROhU*Z2az9D09T bEMİ@-T HL "EiFhC" Ca3b`!#Y(XS{ -l0B1Ḱ $ r (`PAZh\pZrgs*@xOggS@Y 8yfLJ?4[A[OًCiښ eAJhiQ*MBEiCMbp8UP@UjdTivR(Lc c1.(NUB09,Ws_( 2)-Em ;&^efw4^喩 z< H*VQ*SŮr,c6Lb`+!P5f R ) -2LdVX:"PPFbaY< &T:wtA!MXue@@2͂I0 vH@S"A]@0hV`'p)MT;@ -x~ .fl8ˬWt1/vg9;J@$RVVXRqD1 lTLLUAmÚD ̺6!k2A/|2,TM5РP1M4d}@S @ .d5iZ%`) aPo /809#@bx PP WNg8`f~5){H_鬐C2k R04Y!@I)0, ZZNVEKFq*n1VZTEp"sjN5TA9'Ȩ6)#4<:b!< d\QS`@`; YW0\IZh t9/m٠ <4sjL`u7xE8*Vv.6~ $%A`:-JP$pppŊ͡(p:AP!j%#4RFRI4o(Sfj)ia!0A:A@'\,%)7\,%)CVQ taD0-*vĴb5fŁaH I Ff FaV 06P@X  B5 #FAǀIX)l J8TKP `7^\ A3)29™G>N80N >Đ{ddVCBksp6A#@hMZNW-GK8B6"a (4U bBj12և:2@d,2ŀ@c0ŢS!h&0T %/s`AN @+ 8,A0N h P~i@ >ehNr=Х9;ehNr=Х9c1aPVqLEK*&j)XnSQ* ^P  @iN-:XHy@LQԕ`(a`NWX ΄0pt'@  Qy`\b8k@:РB )j"|eOrbN⸞Lkd>ɉ9iz2 5Q&@79zZ]'P`8M SE@Qkc TRDY ՆCI8 *@(ha (CbDFX<fhshPB+ \@604xTN }@'Oxz؁Sh Q `9[egz#C#g+sL&Kt֐ANMr PV+jt@p k$JE^ʚ@%2,B' , 18TPq 0h`PA0D=0: L B R 6PeR:\8v'`*=J8 (U:d@OggS@Y QÿEmb6JfgZM̦QLDf.T*ZVe2B˩hS*VD0) "V5,b46Jd0OPp 5?S  &$3LcdC 3 @ `0@4`Sڋ0s$}BR@1  2PC0@  ,0ޘ99ѩdLKc#fGq2- *VW:S*8(hTN DMc&C>8R&"h(2 &da߳Y,2 @ -: v1 @cg @YF\` :'2@x(@  1h+~U12팬:g*9F\fUgLJː!*GT!Qb͡" YiXT6)DVT$j+Q.A 2La St1p 0,, 4* $B-ܐPAtHQ9 | i @`*4| p K 7-fy0DĶGM0$0uZzC$-)c (5LC(U 5b* DȢHB]@ E@ 3JC @XYpl Txb Kh 1At΀` H0 RB%LqFy- G< pmZfPx̑9CbC}IB3G 6 0- VEucP(V4 PF4(*Nj`ԗDY c4S t1 ``ULJCFX(4:,8@gI!30Z;x8x .Zh8` 0%XE.wЌƲΈU(ZWӪT%3鴩" D!6VРamAF@4A@5Qf0B\ ca΀ L` ` aXbPa jq$` 00v."-Hm V I84@ ) 9m\ aH+H8t((hW(JjiEPPP0LŊ8#CaP0E@#XQPd.00 ,q08`) O,@7, :5@X a]00' `'xExxoqc7gA.a}EVM˩U􌥑;0-`u" *TG'@385 LtE Q\2h0@tPE'PTJ #y 3*N#0)@o AyiVpE`71yD.S1+(VWqYS@E1"B PW*276*uRbjV#Ph@ft`a3 Y,,#s`@&Or L(Li,t^Z#5 @]x.Sd::@`a4`M)~ȅ`7qȅ`7a9j]G:躂#=D )CEAcVjA2BA Sa*b :0a1d  `0b@` ),#2@[d -` 1@ Z&X@~ȥɘ*!>o$cҫ\Ccbp:0(N+h9N=iSjUpEXM&6,e UhP &f@@Y0xU CΠX ,tl@x pl50`A*$м Z9H"@+^P a~ȥxLɹm;R<&և6`gI  Wi* PqZE D1솩j(bFKhlf(E"Ȳ@`0Lqq@4!3 @b,@`:c@B8,^0@R 48$ J0h^epSr3C*a 5SP QCpjT T0m6A-Bcj*E=B `anX/Q@$20.8=0N`#9d#BA A JԠ`o`ӐZZ0^ȕlL쇪'Bdcb?TmO=aGH5x$H!e@=#-aCPġ"VCTa *j b`@mT 8@ $j'h s0`V@6 TC 5x@@ (0}! Њ`>exI3 r^RL3@L@GV(ơT:*;<AM08U 5QJ$J.,0NL ` Ⱥ @ B0 7c, ' 34QH0@  *@>j`NPPP>u`Juʾ%P7u`Juʾ%PLTj`9@Jơ*~3D& I5,F*A hPE0N,@GRb`f Td0` ppRb (Ps0w \$d p pJGA^xI\EQ+z$`ߨ T%!BV9R2?8DLSb,"b `FKDQ"2A5 G\>Mp-c%q 7 9Ԫ> $<Rp 1Q!jv0P@D ]HRcK~0 00 EdDu7`\@ &iD Ю!p% t#fńt(ޘRQNo1W^/ECxLiQ#LE!`(jΙ j"֠ZoXyY(zIda4 @(\F@x49[L@ .p `KfgI"9ҍ@ǍpK\:Kn}^g)H D NJjCpXp6l @ F+ITKDQ 40TF d#hs(@0p.qN0KJZ 1>yʬ 0&J x-)N6f'uBAj2!AaFPơ9u& PD!"D4&eeZ@(*P4@v]B"JpdJ#)aK󏯑F" @H%CЪϐލ:\Pp4OggS\Y ,+vl`VJB62"mhu匣}܆ZWp_8 I,C&Jec;jE S"@-$ E J ℑh'& J :<`!>@hI+)ʨq]eI?C0ےz Ȗ $H ev>nW/c]x`f[ BƞVXQ jWvQA,6L U0b1Ec3@jl :d:0,q 0`u@'#r M (}Ck`٣yzXYrKl㤰 =l PD>ǔJӢlW$*tX! p0ؽ9@wMn΁!IRT!A!@} DZgc L0C1UQ PUGj4RFm  (JD@ ZMH_  BIp ]*k9L?3%r.-iGWM0Td35ܑh]yVᏻU.#d@֍`H'L!L,VQ'jAM(`1@V00)`<p@ _Bç̹.7ۓ3wo PZoecx K !:PCwY;EV |܋vW}ν(n' V"Z 2#;VS*18(E4R"d`y s`4A X@ш@֣6/bɵfbii6_$8r?hRhs.S.4*pȽ3Ȇ@NG6L8 Tр~ a`8 @Pq& Sچ/ 4 01d^pB nBE:Hi 'Yuom Q hhB 0*M@tsp>}׷1b>ۘQ 6BgC)5PUQV 1J@660E*)`::#?@#ܴu]Y:bˊ v8PH( Dn  U8נ$>_+"_0vVaT6 CB5ThlM ZlL@$ut Il8 x.*  Y P!i,Jg2[*/h1E!@ [X^cB,u&@jvcc 8jD6:i(E@F &b0q໇N!pB8q9=Zr #4`^U B:c @]HPqC ! ;4`TPj'@!@Z 4AB 4H $p^c†B5}6ؤYPp!CDm ! :FVk1]_"Ɓ |eDBp48^u6ra 0 c0c1L6i p%Q%X @bH2hr 4` (@^u/6ra A B 1bs ["6Za0m @ ^u/ .@ &X @hA9Ua5A  4^u/7r]! (4X`H]J( ~7Cfp@x@P%Jp/Ceplmms-1.1.3/data/samples/stringsnpads/strings01.ogg000066400000000000000000002500061247673406200221260ustar00rootroot00000000000000OggSs.gvorbisDOggSs.gq q-vorbisXiph.Org libVorbis I 20020717vorbis%BCV@$sZ2fs{BB{ALBk!càBcАU@g{˽{Fg{i{Ƚ{ʽ{{{%g{H{G{{eW{({{{G{{'zĬ{7 {{^{{{{$W{({W{h{꽗{{ 4d((  @Qqɑɱ  YHXX%Y%Y%Iy뺮뺮. HPQp YdHh \CTLǕ\5]u]u]UUUUUUUUUUUU Y@i0#BCV0ŀАU@IN(9) YLJ9)G1yTA)RJ)RJ) YJ9)(Y*5)G9yR=)RJ)RJ))yҒA)(iВM=)(EI)RJ)RJ)J RJ)=֓RJ)1J RJ)RJ)RJ) 4dgr(:g(gBiB&9JJ&s9O9' Y@!RH!RH!b!r *J**,2,2,:ꨳB()Z[I[sI)RJs BCV BdQF!b)J*АU Q2Q$Q-53E4]UveYmvuYuٷ}[m׍88888 4d BH!RH)s:! YPGqɑ$I$,M4MDOLO\Qm\mTOTQ5U5]u]U]UVe׶m۶m۶m۶m۶m[BCV:#)")8#I@h*@@(H%Y&iɞ.@h*@h舖(((((((((((((yyy$t$Gr,R$ER,rАU 1$Er,˲4MҳǍJGXc<߿sd{kXe[66P]NT)pFݑg_.zVScg:Rզߤ cJXca$ >V4YpEtΜRx5+7*=-{t+L)u/7V~~wroθ^^>}g/FTGK9+OQ=Ḭ̌TaaY:{N3MڭS7I+oUoFTgt 'zWw:*u};i2g϶!z јtt4Gn'9c/gf%hl31(Δ8&`3?b]v3E/aj#nsqi]fm{oTJ߉Ii5m?hFofNc>d&-=>2;0z9wj jnN+ @,ucFCZ٩~ғcZd-`y!ϠM l]~Ȳ#ׄ~YD^f\~YFy@B>y'@/`>F 㸳uo `741 l\1"Wտӻݯ@mgOi)x!mƓ"Rj֙:m&ͪڲ mDM/|jw坻E=hqzntIȹ*d1L8屷{7mDztLO(aN4ǡ}JhHҰ(!;cTڂ/LwZl|xU?a  _~іHrP}4c%~8a0lG#0JX c-p=3CA'3 @z@~D˕\f)%lktîNsr}.g[.̸](~*C˧{;>Mt{/ s \'u`hFx_;nS X0B8 +_t!S,$/9O@<6?.<pt `ҍOߟOYXK2p%Iwo$w#dT]8 ٢`>p`/I.դU"+L+ uCol;u΍ YoUs{px" 94P 0N8BWܩs9X<[ޯ{+25DVfE a@ lűAE'YLM' ӁL4Z:y[h\htrYM{T߸ &^S oY> 2g_;sulEAIzծ) 3#DIbp N oD7]P@P%l{*B>P;:_:k(!MC}/+3vxh! Źx]EhN$bxmn3+MDH xy8:>Wx7Ƴ 0N5^_:N^Pۯ.W Pmn%+-A`~~ Л { =7r@5Vrzj7 aX 9>I.'@ksYݙ_'~D\oܜ e 8^P3Oȧy˄1@v|e(@L e\E/ K\8<90BQP,'_Y%،0Q$ .!Y%dA1ҩ-jhާC|p%r` ).(ox{%߈YHmsMWrNoJ 9_xbqp @}p >Θ:PpG9l @~;͍FOOmaAL*,,VFs$o}͏k*S֟ukt/XZ(*{1VTJ8 ܏^NQG@E@/_8 2#I02 0\o@6#b6 Mbհ?a @|: [~~  pַԑUϼ x?w}Àp4lM\,$[9pw&|׬mڗ~6v!g`¨]\XuM6?"( n8,>FBEC`u202?@n@e[lA>,}%B[ m!K-YGh% @֗޸$Ї0(F5ۡVT&H>gxp`6/~pn^lI!gW;Pm{'W D2ꣷ^Px Yz Ŀ09 XmHy2%>lH FGީ9kL`p2/LՌu,Ǽp̚?z0%3` \KvcooˀxH+_+VT /e2Q (F':n=rS^%78* vܴ\Azc!S@"{ե TeueFqf >2P2j7:o# 2:-B6IH̴ =nK0Hܿ6L5J$PS\%SK`5)w`oie""4gXB@Ly~ Y# [ȑRF 4$BC3A9zUt\]֛%u]U7~ |նmm0l<1޷5 _c'}΃G/o됕%c}^s28bZL4|=&_g1j`9y]?37+uB?omϋdZca`.'\e@ zawx7!^ 0 3z`I J HbQd eR4?RQ$7?@ lvo;A[HkkD+x*wPK ~ d}" P c:Bs*sn3ιl&quYBܻ(D ym+Р|0|(B:;~]mǶDoKs[)ljR 24f?Wc0>tH =%7B@Џ6OggS@es.gA >HJK32<=BIBHAq ?(<6ka7nd`xѭυ@E 0A  8Fs[MΘRQ\9t7` a1s\̾ۉ rv7ȓk@9P20W@ d$!&r7m&;Ɓ1FѷX8h^t4?o ;wd Tެ@kW)D~Єf.?7-fz̷KVwPrs3/KS'?< Hҗ7$E[Q`߇,Yd2zd6AIA<>Pe)<[q-h~#7Sx<8lm:XE2$kqq{{ d0B܂9cLT&1qLcd\yİhLS}H*k𒏷:t:>~ZQڦQ`ܿL@0W p8`_|% % , ]#B.MMe C1 ,[ !+y8 @h~(F6Eu-a%J~#?z=|6^9Dϣ—(@ .O$K`2Cg~ --^Ox%  g-Dh H b0Plp  ^9̿a#c\lIMeʊ7nWn~|bq3Oߌ8 1(z`dwT#O/.,iu΢U3@d ͊5~H#?]2A% 'P NЂ3@5Hn@)KRszdoRcOJ(ohN{&s@?wdnsqoV1M_<5eY8W6lŽ#xqV@!h)V $9O2ze!ťh~*7] ︬`>g[ ܵXID{n8KHJ= WeE W+~Wۊh,rlX,e-w,:J Wz5ds^2nӾ TAp6 @ՂmƱTA_"3C\ެ3O3u' ?l62  *6_B2@ 0GT[/SXj`` 9l}NR;;iP~>Gr$z3 ;pypvă| S,grIF /ndPo&d5e]izBpfp2OڥThUoq^@U:e6n'O.wV^IM6do6qry'PF$@ 7j0e7P`Y1@'Bz\145bH~).&p2>+)*E͏NF7._ט 1^v\4 snc*Epd&_ at=e /@<Λ%mzS]g*f9,h@6R ǿ_.B~~)-XO_7u os `^>]Uh[ #99fy0/Y9& 8 coV ܘ/肮e {;0@p{Dz̃^ 4(@.B:V/rPe^z)}h 7U|} <Q qu:\W8odȭSg@X)zlj n(۞4_+,0>`0>_Ā <󖥧d}Q`^`pV=1<>).R8\x5{ yw 4*~$86NcJ!/ֆP:j}P߶?b3 ݎ(λ[2U F^l4=cv9pã\~wXw᱾O!S4.kh>@r/=N c:.@Vc47vXݷ H\m5`>0kM _ Y֛82zBۿ$ 81`9."?ׄO,!Pp.})M4> Y<=8dVmgoE*d}m)do0ti4<>DQjR@-'@i2($2 )M!V* XY$ۡ',gh97qa:ˊ?ߵq02N_Uⶳ3Ȁ9_k8: /P{`-@F6~1 = DT.u+'5nA ?SpȌborB4LJ~9Pp潄&w nV{81hUҎ<@S`]baPJ_NP @8+ t@=} 'P~idR0l  +#W$`$G\4 q'i O%%)puv}O0_XS0۫p?@Ȑn, _ H9 lH,5 @2 I |Ǡ8; <`Lh<`x F8F튱*-VtVcecXopx (l_ oH+wq3w PUt&9ZOl7pYRi0/{gn \Xe/Er`Z :z^Б^SKV(ySޞz0 ? N@zk9MT:NE ?v $ TɆJȇ}z _%CXM- $[`IUp\l C x?4.@8@9|9|RE[| %GTzAH ڜn#+ ˕p zFD%o8 Ͽlӯ 4{@cPൾ ߬ GI96W%_ D 1/KOY\FE@: `o=r-8L/L`XC8>9w>xέ4MpozLT}]P&&Ü//и98`*lmd"`#n  mw6V<@&<Ϟ2EeF`3u3Zq oX8f߅[D @`ׇj\:zy_-2 WOLw/3@v;(?!uԏ9ٿH7r; fY d969"lY+f;Ē2olmx\;+2k D &Y."dM~o['G6C{_vﰨH.w,2>_>SpePJ_#i!Bа!㩇#QCrZ2*BVX3c/Xy 8?@pu t)g s1FHe_?vHojS;t~%-2Ч1([d$_- Y69a/X{(܀؂Q<jy9Ab0Y oLnoLQa0Ku/X&E%Pѓh`~wl 墮 b0,TdM?tkc "'WA eQ3dڌG H!Cf5e`^4[%C)zJ= Bw dAz{f! h9 %lɒ MzL z;Xy=;!(g!q)ˆ pJ Yob%{5+Dw k8o7'H7W nl_K*5Ru<e5CX)b!?hfN\@`7/)ٓ *ˀX^Ib@WŜM|ohȏ&Li޼A࿷B,st;l`^|KfJ4WH >. x,|x Xh4vm@ 9B I. =Bj%9\xN-o"f~ܼC?.Оpfh0q@qg00$d/cPy@8@ٿؕ"lg~iyZ#I|UNc.BT&CN5FEЉ$VCKUPr%9'=%y|7;N(|q5ҁb<3@RX`6 Y_d`m} p$ llH4I.oP+.CLJT&~} _<^@0 E W{{$! d * @yh/}$;2/dk@6̚@}p$x-`a /ҬUy-{@N `d#J֭>BЯ @j߰g:dGo nu0q.ؿ6X X=.2i0_0!QpI`-A+w$h`9.?[T[⶗([ףD[*7q HЂsagRE&0^;Xl hermp!0Vd y4z͟?8WK?['^ t/"p' 0tlf#e(_O<Pnt`bB7L>0OAp|Ȯ00lp<`~#'F)!@  ~nSfK݆OO2wMD;P9 ޠc-!#fH"!P;W< |^*xk87𸷟ͶxeRkH\<+dvZ>lUx5$Ä @8]q@x d-<%RB^`1`@}t:0:kܡRJtʝNth믕@Ou~nXY$a_, FxA0 +`Gŋm]mND;xL~@2@P1" @+r$I.Bߚ@hBV%Wv| v`}0m9 ks@dPrPjÄ <{ YM lffKEܗ֫,ُ[) 88RobJβO ?3 (/{aVan ԥ@f?͡yݿLcTm0 {Go3hyL‹RVPk @}M$%F#XE/ٲ ( I@UDr!N? јo|`=k>ur$9ZYk&d3L[#ſ&r; >N *"N D3~@w~x+P&yzU@ͮdЋX͏'C G|,Ua ˽_D$]E1k~LF_fv j*D3m;e\2K 0MZLf1(:1r>^i* |TfB9 QN1fgh; >e L+L$&>Q+G083gR!E-v kk6o t6+̞^&re@VZxH%Ik"9^w -.!. pmi79oz}fg˒3@||0> ѼNiő@OggS@s.gqP@OD;W>0A?B><V_6H%!/_d|9~~Vؔ:HXxdZ03hpB HnkT]X\ &]m 0 {|?W`ma؊^[ w `nx!pܸX2 ,7 ͩ; Iw@)Wn@&3 &@@)9|1~Tz⯯aJe%?ܷ>@a |RoI?1 -K$e(H j|}|p%7aH;, .],0eXT YPްj}jO\,`[Bx~r7|5|9y9ێb(Tۯ7? ~0>m {xg:j' !ǍD^6._*M+H[zqg*w+Sz~bvOr%돤;)cYUK*z/}4mY0dd/,e!8~@|Λ2j3tfȌm@)9u<3mrс~c d=ԃa-tow{-XƅfQBr=dC.?8yJ P t0ӄl2v6{,RDom,wY= 7T\D`?,BPp_!!^bp`rI _\7Yq%8 z 'jHs$qܟ?X@{Z߶~- Pm8D8nvZ_fǯބYU 9~Pyh3߹◄!!w$ @˒l+0d59@W ]| a70%FK>I. &z@YĤx[i Iɸ4T~sCp \v hӨ:PU0k6@͛iغ?NF)emxLB)mʈ`'Xkn `4 x<ā5MN 0}H7i5r@.ݶMm?i2TմPE] =(0bFd1N s2u[j ,A462@IwP,ފ#QLJ/la8^Id}Z1"C[~m \&5O@l&a;g UE0y$G_ |{@2vf! ۾G*gn/*p"YCpN w$+;0 /Yo}vV!(hn\nt{yL~,̳)hs; `#Xl|/;B9O&g4ɵ02P 9\)qpr0P&@^Y[W 鵉gwKGU?JqH * le'ixza0qĘ`z <58@ @ }mR?ӣ5S_x>iu^`J" zM+Ӝ )}w7?=FDCh_p+@*}h)7tM`.?.5,(9XLF LF` DQG@+nMWU>p' al/och4< bY`}M?s1kD~,t\OQ$<$yZp,a%p%5 (n0@qzM@h:<@(}>ݦ-iRFJnTkW_ rc v ٬@E'h^WSL!ճss@ۇMr@ߒ@~P:6y-:+ w36X")aQo: -hIWL>V?a\K}EkUY7r thƏh@Og*i`p5gmJ3hU뎽t-x/N=ymvj~AXgo@/r͇~boT za=؇cTمhUW0~hY4Gl_``66YgYɊFxt6gCk~If / Qw )Yebu<`EHI.oXkvB_Uq-+֐o/G`<A#= Yl3eaQdD%Z3/{ @3~@(|oboGd^jf =|%hg>yPmâePuu{S׎:m@]~N@5UC?U?wSt_hPʻVIҏL~r|h#Z II aycB WfTe\݂was kho5 s!9.&>j #(ޫ0KN7BK7@W7p`)ɀX Ue~;o<9Bi]r Mw3Rls F6 ͣ sv=ynMmi$Ӷ%! i7YKZRP~(8-3q< $_72Z (1P&8pb8Pg"{GXŕnAye> Ιқo (S?%l;wN'ێJ+@ uNP@[Y놫2{k9@;v(lo97f䜌jw@wsv `!%h*u$?hmImW0yvo>N5vc`L+6dZei0@>OggS@s.g-XMHD=950..H>94; @cl߿%.x[l@0@35_,p, `S@ _h(?›@9+rCϊ|U9)J&P |rw'K\!?RG9߈D< W1?p BnIt* PB3c0@H9jbZĿ]0>_$']_GƏ}8でw< ^0\O@?v`E+ O4gXpelJk[`U ^ vLy$vΘ2{j| @  P4햛.~{O`,>«C)- B|[2yq |5 0aZ9zé/p@,}Wߙ_;L7?3g o?'1APF%|Ѷx`:~$@]iAxU xp 9'%5FH#S ]9\B)p*ș/Qs J<8?.0.Gn 2%Nm˜W@_RS^T{i@yl`ū 3Nv0$@vxpU_g ,7͗.^fWI(%(oJDS!AC9.oT}mL*ooݽc⽗_6>~g;X} D@?@5c_4@v x`@eG{kqぐp?VS=XZ[V@nX]Kn ߨj ,>FlcI1X=Zm'5w[<мo9'm2$-3Wl!8 vf̃{ _22O~A8Sv7P3ez|e,~|ϹK+Ny6ΙQUI0p yfLJi?#@7 ˏ:9Sq5._tdepe7{886s|zWȎRJc4]uM0C5(<=zoM/| ЦTmڃ8`l~嵂 ?XDsM/Qv|Xq̽Q#!K|EH .s>Af"հAf߁;@:{h] %eӛ2k]Qh=c1/x Xػ>b Õ)3G$PL"KTm 3p&@$hh (?|!so'kS7@7`7l llźpAo%oL+$4A}}:+xsk' $w-I;yA?tnu8 ^Qڎ]}mwKK-{)ze6=R3Za=_z_ ` bNpp_𵩶lm`J[, `ĭ&XAY0 Y;hO" v;(.¯<ƪ C47~ 8X#~ #NGoܜ7tfTR|8]}!'!){l&澃U :H∘|sr@ي0gZ8g]@\uD@?Pk@Siй![LdACL]jz: <-Gg8%<#4@Z jph$ap_Hf\Y2,04&l83ش|q~)EqiWIKOզ?pPqV;RتH*?_}dޕC"Wvho 1ׯ='{[<S @Pod( ic7&l## gS @)@&()`أG[촸"Eź@ǾR<2|ݡ0Q@U'k dZOP=:ƐR'oa坉TMdί^::L,z4.rC}<'TMMtzߍx`ᎊǀQ }*d@RV] HdLr|y%@) +/N~)cbtZ c$'"O:oqc>Jxwn@q`gFB* }`WHƿ*Ph|46 O6,l ɥ뤏a .`a-T+jSo.'XL9O~ ~oT\ 4(끟LNg" # zoCyBf}z#w`tЛot``e'D/-DF@x@yH U8@ bB!OggS@9s.gaECE@E>R>@9-;@;3S^늋?ELmKӖ"7%~f w lu/ J`$0v0B? @] Ưy=eVU@x@/w2*LT}, X=%O?_w(7zN?}*GV\]ם)dG1y&JF@k& [)V2{m!ov? I@\'!F$s""|q=J|_ _`kq7\HoH>mkK.npۿs'\Ղ `=[N"<o?8^ K@9r c,/ ri%qYorD.k  f*_W;@ ϖm2!@K}S$ vߋHڿ@iYjOz ( `<ֈI6o+ @"+,@@Af )b!k@q#a0J1X`k!)p9.Cw뭊;G~Cr[T׾>? w`Bm۶ٙ2[ Y&tu@X~sCXvqB{8o 5펠mZxs@@֝̔(KQ»ջhg~ssů} jy_ Pu{SY@/ _oX`[1hspNQG,c5C>hx#1IG׳H`7!`$@WXq `8k+ ._.˕"?k9s^ιaES^y2Uj `=6\y2xlsP`q/|hQԬܳ4DkDPu@jN?SP3dW5 :뷩9C.(}wPZm:11?;&>#c" җjo Jp}mJE;a J в:/ ,O=o"7d}%Z.|4Ђn.x"`ᜭmgGD*a ٷL@y 77Gry l3y"1=#/.ʷ$b( -RV\:%åo{f.d2V)L[@FmϦ(0!^w@`d9Wn%$!_ %6vC`dpq0[p,؀œ W^` ) 9q-"9oSSjOPQ A _q=u.`\N08'cD$"GP7*0 NGix%P+ן)L\SM ]IqYgԭL͖IVRp/ ڹ%үк2z1ciLe܀F8K@׭| oQ>0t@ 0֗$| )Dl.X1€0 oGr@~9.o衫rlVa7LS'PGn-ogsbDhn_ *P| ^rH8,@f6>ϰM9PD9oq2Y HVŤ2@t dC}Aa@3=r@w'ȭ L N%9hesB}SY`ʀ~)\s /AV 6 PZJ CDRk/2"E%h(!uo}@oGup t^-4[r1xȢ([NOs<3|ZO*ONLLXgp> @4wqj@ t&o s\ȃ6潯/X_d>~nfꐋt(g2P>=N΅g%ߚ ((HB C؇J|1 !{ _n"n: G=n ',|p$ > Hbݪfz4u ܴ>wM0<=v<{;Vi_8vTKZzE)T!!|}. I`cB_88(Zu}e((2V P>ϐ2}/ȭ} Om]Zɐ[ |~ӲvۓTN^s;m``mZV4&2 ⫄3HL7{ D,Pp00` `?>^]ԱԞ6R s_Mz" /G bMgd3D,T_ߏxo G{_6=M C.+ ÖeZۡEȻ`8vWף?Se2okzo8 @@聘@<Wl >m@x7 scG#  v4h]x? BpDx3hl~˶ȯ `F `@-W"L0P > D<;bΈEnAyZ~8I9~|6xvp ضFe v gPPPvqN7 jUsҥic }WM @98QM ,/SGtS*nw PN?&(\ lv68W m@q Fhp`ff=(\n@cWkwvUeG=HD(t @%5 ;hFWa(>g1%=- ܓ?<61>43C9=~)gK Ros+Bh֖>5>qn> F, `TWVk ^ =1d fsCG*,@6$?f oP:2xp p7[A"^:x*೿~QȔޝU'`>`)$kQܾkd"!I@ <xDIۅH7ߥ L$G n"V ?,JE >9>c)qׅ[Ti5kkߚ Io%z.-AS^A48Egb'ñȈ0YP:^Y ڝ$udo8[ B~7=(|9 O?}~u|c|`⫆N @;"*?krz 9}ma6_ Pg2 6}X!@sAPւ(|a8!A^IdO: fV?]0ӓ7ykrP<ۘahhT@l-i8 P6w# (Tw f\r0c9UvxUc)/of\LՠtQz=?J+^ @OW2H@`' &/ lɀuu2X'  |(%̂Kπ&8(5TAI.?jLjZQXQt;odI#-x@l;%`d1F5Z;n[L C t!R =p:v4澃[H\~x]XSATj:@;>P@ tvj9|H)9wI 0sw@й =Mmo4p/`U$I`!e0`!~yI.Yᓡɑ5;._Fo/G>Џ8$7l|/u5xBu7/d+B7.wQQTY ()L)  lRP>x0-7Ͼ?;P ֗ތԕQ߳dH;6h &B6#V`#@C0B5H>I.>3,`sy&?ZbDo/rHiק{ mgnK3BGS<9ejpD2ns d: 揓޽t@ipo2! 5Ί/h@C<1Q =C{PbP?;g[ u~(9 rc]?! %c U@I $aC[h<saAA_F^BIRVLh̽u]\e'sbD7A y}_9`-"h;:+x@;Ro]2gpĠoN6m*h4!@/Pʴk t/2ɣDS3y0d(u(0sX`)m֛7<HYvkQkF@ __~ @`~YoX.]~3]T<׿fnI=xY5 lbh1 j ]q9}p [?7fhkO *a<).P Y 0~D;R8,G2s>^z~:,OAyks#e 4`nz+Rz߰yv'ő)`  !З lm `B q~`! +Xۜm (DԀ#y? ~Y.Vߠ1֜f4Œ 0&7'7?qh'An.pvƖ f * @^K$@^Pu7^@{>Mjv\@o\P@mG >x'idA*"m7k—] (|Lmxy>k@2@&`yX RnF)t5L6oh9OU7Ɋ3ǿwWSb|2u78v ? xvO;uT:q`¼roP vq(@VG@_ZgM|u8R[Jhaܬ=o<c41tT3O-_D/\s~9RP @&ѕ ;xX OggS@s.g "(<7>C7>MDC=9;>G6yRr2 _%ed}leKDWN9.Xqɀ4ۡwɰOՌo?^cW'ns 3-7msh uqi O@[F34 e r  :t# `k:oNCR]!ڠtj& _)u2JοdJQ*D`%l4(,ȿ$7y B~OKe#|:G8 ~9$uȝoӬd?mgk9m%%%<ԋ`lTHAl @7^\H ࡛HR_emĦ)uK 7:`]a4ϗGz 46 ѽB. f0 @^z_ wK@09 0!!x, "UV ? H@6 8P@8%@C &9W>X-ް )n+W/C+Vu{ S= X;43mT _D+ z=kz/E'3@޿F 5 8DzeN}4Z2 Ot4S~@2L* (RZL` mǔzCb2Z`E"}% zwDp . t+' _r  $m8 A8E1"(zSoM,"U#>$ʿo/7]kHڠgd$cL?v+TzH*r^ӳ @?%N8/ճi@"J4e$ZxMAOVp@üzbE)Py-YQ T: :ihO(%O-t.B6fd`ow,G IH?_!`—U`M8 LJ>#49.5>QcjR2L,!0w/o6^QH7ɶY۪aQnߖ¾]fmr1.xI34@M!F ?f_<,i xV !XtȈ93[ZRzST;dCiwY/n.}LJǟ s84,%RS-ݏahP +W5!(Ǡx[-Ud\@7?s=v灛 pnvh.-Ɩ4|1x#`378 _ f<ҫOAFK=9RB^&u+ )l}Á i#^Tp^YXzoP:@.?[] 1y@~?sI(LܶPz% /,}\(0mvDZh9eR3 @xcr:^X􆭷dR/B8ʿ G= J_059c8 7 yҘ}7WmO`c6blMuRGۿ%YX^b-=!$ mmM!1a[{}b[@sPK4ހuzT;0-xϓ1 x/ `f*EXhȿRmycYض$Nob 0N& () #@."?ԵtzX_5ٗ=yhS,< $3n0FE 4y^NO~tB+yO-7w{@;v_߉f w}i;T(ݻnnPWs0fvni3l|YǢiqZ龊y rS!ⲱ'c}YG.Fϙuu]gn e磋WL&o?a_@< x; +8s0hԆD"9&GHd7?nǹx0R'F,Y2 ͛fr HXLdR=')C Ns~6*@[d\?6 wǽ__P`m xIR/ `b`L_8b+  h/ g{D<2~e ٰ1m0R0gV0JeUVG,fU5[!V{>@>exzl{'wv*^FBu<{`_z˿w9e9G!xl`=vfzu.HؔKx2[KdE%Shڱ\2 upu =.|!u эzpJL|&g>@%M~aV;;}2(6>=JX+nb: Z|`^~fb~ Q%% x3rrC MٷRdM"v+8x(sdŁ@t ̽dփ[@.y;zxX l<@޷kjveaS9Yh:ctxRם`M(`   07 "^(DA9*~'p0 Dy2Y cބ _A@ ʱ*E@yuahW@?8o 4ܒ+k0Upt9 wp+@//ݵp.wRV^pQsnWē @o$k5}/ ۃ4>57@JqdA/p(7eU|>U#uˑEvL`X]`Px Km%, d-,"< o  6l.X4r 9;c!$( >'tESni)ߌ&;-^#rv csL%|Ge@Ofh<rwz-<&W?%5((qspcr9LtjMPUyЁ'hגfo:顖\L<|9sL:ި<FFK.08-:1bv([txhUgQ6V6vpٰ'kpC8E80(.SO/0"S08K e]z@97_@a Poo7zxČla X2 OoyhkET^-B84[Iɧi`aWok:;@fP?{(3 L4L˵n&\ !~(h v'bX_ k {+=mX(ÛpЬU$`D¤>WXT.Ov1xcW(f|s= m*dx|8e`^6ʗN,iCt-d1u P| w @@/TA(r Ւ\q]"JKL~pj@?7`BQI_jp@z @<о)`ΚXPp?h=鲆Ab.t,p ҷdp;:- Ph0p @ .&giե~5p^+_ .R {>3Ԟyȳ4q52 7J) 67i 0G@ԇo率m ؞ }rP9n*R#Pk%@Oy/=_\ȴ:c@r4ן`dJU~ʦ56c_2v_2(m!-/90xp[o $?SaN |#00~*p* 7f-$>) ް='l>mjUe쐊_L\ `T?1H7'8;AUIgx/ 5ǔg "C W!2+;睋:JB0K).FoXf=SkY?ÞKf_n(q7w3x@%нpdJ;O 3N^B~1*`mu(dn v'/l}. }ܬȺdG~$˿6vU!,\~M- X/p3 r |i)uzͳGƒz`*4gN U wK@ `>7x' 2q,]'F^g4f@4S p O-|K Fl̗Gih8A9)'~c9kŋ\|,}o|Dj@%'T P=ݐtܴ-\AvF52$Bk}^2bB@﮽;dcj:Zm@[) 2ћy"s2zOIؠrkx ڴz}(+o,Cܡ6 P-վLf 0w1x^9'P oP˚O!K@f!~%OdB=T Ej 9Z I'I밵Y_V߶S{4rPS7 P!457ض+d!F"@ ^6.ynvwoľ2htpSSZkces_*v9 }n5|15s+^:P:,tсn[ﻣ(Eߟ b0xːQovӄ]30!} iu3o6+ I⋇|Q3=A( ~]aE3PP08.^[VwjEoeQtJخv>8C)Byx&-i |4;)hpFRmpf KosޞK?g|c)'!m .`Ӡ~8%Sh*{%meH7rx3/Ô_0e0_[1s  ) Aga, Hyp%휺@7Q= (o~. ݓ-V&*ˊ ֐-h>|!op{ /Tlge*B@֚g}|6:;7c=ۏ@.uQ=%7 dvtka˨ Iג-`>~o@wd8`vaZwڼvt YEf[4n@ wqxp,+| @+-( >AOi? $yPRS `"-RZ3<%קsf"~K{x|t }x^}ufPRH@?pw2v30ؖ^>=γ⣍Pʝ=96 3ǰRQXmm{s.RXҽ%$0o¸]i Cfa}˹}Qx/= 8h-cl{ ˛hؿ%Li@f@ %Z @xR(`h 泍SBoufc窾GN7qg%\puOȃ^~=0yϓrcy }K@[VیNi@G}ճ @ދ?D(Y ,! 5?CGa7_J'ѿA8+\a B`0((/DOggS@ s.g -t8->97A:9=GKQ?> LAcO/f%W(d~|/`8pN~ q1UW˛:P7vf`k(D rB߯m Di+|2h*:V?@[ Г &-ׄ Pws^2zʺTc0۽)%C3'kQގcK@9|1~` X,ٖ/#Jߎ)p1::VtK!O 9q9b` >QҬ~~mBW5`xX$nIX9c۶Q|$x m^ WoxЄT^u-oU“S9vyEݝQ&5ulvQ(Nxv>꫹R;ɶ;@ ? z-E:@Ƀxz_` $30wXLAOc0pAɸNN@u9 <2_(@sJ )ٷFʵEwfx x p4O,\h67lL)"{oTUmm{@~;=k ]C#OFm>|D򘌏 #>,eXɛ@|gT< \:٣`r?1q[ ch3MYx=@^iXԬd_>$XXqR~[^[2W?] 1n^~+'t>`KnW^I)n90n&Ytxt}Z{O]9I # l$t: f"5Pv =qz ȏ5H@{EK|6=rbcXH   a7d(}J5J){K P:{y|_>v@_! 4;#<A8ć%`" _ ;9Y~VT[G?y$[azVw.x?. P.^@/9P∩_.'/@@j <1 tuOfk<ٓD<;dt< a,i Hc%&858W9L%/@#kbl2mߠS^-6uL!h9S a P`} D@( w6d Wۛ{j`7O0g<` I>Uv[vaH¿ش)hd>91`{*X`\*8dDf}@VBژ!vynx/K6kPR5d_ 4 8hՕ^C%U5 A*Xic2L/-@5|e2[PǒN0PC l}${~A vw06r/[ٞv1@1x FpcP؄Gxc#JHzYF3IVL 3M7{J /x858]*83L2"Zs-x s3`aQ-w7/}H&((AO(1lTJA*Daat %b.?@qAhYV[zo&Z9֫_W4:6fƧIPeA0^[x8(` /+8gmқK>}nd~W 0bJ4 Ns`IO%ߌk Eۮ`g-/txq ;n (62T4cP OwO@(8}apHsZ_GU<(! -} 6WFc|;ip# $Dj̧s9΅셩dXOPTW(]274T^ ZOHu6C9`7@HYFkkD ,of@s< 2 "A% }((bH~?jʱ)w̢vPLZ67n'ZN$]M;+3Wo@S@6?Kl-g榮d% ýAH@$2$ls EN?2˔B.H w@97<)sR;7 e>}`0۟ l#@xć2sY KX_?(XthjC.Ξ,, ml.O~?%6 =4p|niq?/Gclh1H86| ~IgR.g3&B*&7o 3;`@ZO: %#7-=] Վ"1x\Fo>X @ƽey!$ӏ@Y"^zX(#;{~Qɞ3dLbϝHc\H?V2OnЙ/)@d_5Ζ ߶H\/d,@x""D_ (r肪 ߳1:6`!z>4,BIoXW WhB Pu>؀pcsN̳o#9昀ɱP=6* m fѦ@&%g&,Ug%4f@tңNRIsJ wtd‡m/Nm_22:^G[;;yA ܼk~`=Y7|P|U`O %$~2 P |+wQ(gEu##OP{ @1@OggS@As.g צ2TL=@HB7::J=1;I.ߨݖ\mmQi\a"O:?#~M;Yh+ؖ'g1Dާǐx0>@q\ syk3 |r?xj3`1C0oD(ˉɡfJ%ٝG%HbMvw~^+7@Y c5+ִ 6B O,K|/o `I lI@+F$'R$oW; H\!_a|  AI~I."?a>WlBmgkͽdoW5 n%Zm-))YS u?f n.m.@QQ }C( |q,= MqCk`Do]ޢvm$emQԬk@# d:"̦g!gNo. F%G3NM+`M,~`$7㭐 /4>9½7 Bn!*U!4c ?{q<_ؽq!϶ZU52 77ƧM P+@8 @3 2=u쒣 m/@`jr`l2I.9Pӻ ~"Pr>d O+DaH h 38RN&W4@# 9 l?7iHޅ+ԳafA@ش 8 PN1!~9XHcײj$ 7?sn%7ӯ;%c n/ջ<^ ;3O/,}8cV@@,POUlj' 8rf J;}\~V3fvMY֕=,0s.#D@F/y\0@N5 0cx>>$QߌQl0g@8 g]8Ǎ:%@@9O5w:oH0R +?+s%`^_AWp->$ڳ%G0vl[U?3) ןqV^yI|Ftl F_ևkȐ8٥P||sp2˶=PdV)ض@ '_oj4~z}E> =uXRcZwP W@X\$@$ˎYt (`(C)p8073pAZxUB`&H9Wa|:7m8xMˇ4 wo*| 7hX#lYUCmף)vC@n)9ºr=\Gk9qcT u@\Ȏd,q,;r62v,J³tq+ڟYclk;v R`@lmCx1 ,;CdYvu5W0*% 0FxE~(ފ1U{'?ֺ 0^Ϲ3>@oζFT#އ*`+mk w1B{spr@Fn9|뗃/t (K>;6dv~dhWr7~:4j+?, T={ o|Po v?6 ڃQt'̦<ء1_&ZH2_$v7!b Va Bk~9.oX/?q _; $go7x;  VRcE&xiA2mq??S+G@zmÍȹd{ZU;s##@{e;Pj@fG%? 06 hP?yzmwd&g5.`V>'s+YWz .]g X >P׋9Mz%;xbO@b ǀ6 (߰5G_+zQbDẁ;0 Ywȍғi?93ȳɿ _,0ƈ_B&q?G o t>-?0 O CQ1r|DE hI̿ZUn<W57}^dp5u _*gj%7Qboߋʹÿh }v=QJ<ۜH\,=ʏZJV擆2:)J@ZcG e =Ȕ2{H H5t]~Xӻ?0e_ y2~=ApCB _@O%WŲ+u4 Y@o8`[/:ZsVihG~.Boة>Q(NZʣY'7?{3a6Q[Uu$xbB*k[FY.Mln렀S~ϗ2Y^#@.vmcla5`vV ^: 2xʗ0>D| BwMzLL :]`@s|cQH. /6ߨ h(`x-dSlatX/Ƥ{b4pD&VS7 /A!_ k5Z}GۥؘX'~ h5Wk5lgNmPW[%kf!OpY_|@0uSl )'Zd2w] 8HJzYz+Nĸdo0擷hAp w[/ QL/j.ZhfUKwh'{Y`3|+ =z58Ǧ|#8`1VX/B OggS@us.g ]9=9:07N7;.9F6^)gc|'b˸rضh2"~|UotË-.!U' _[[bnT4d\|K*x{m 7vwh3m?+mVnI2~(}4ȴu0\=P;xxysNʟٱmz{ d;x& @ IZE<@`# ` YO`,Ӓm$o1÷b矟EI )̽|;i6KK3ZzGF7tnr<2y= B l$gۙ6$?U@k{b "Y@ת&F ݩhrB&/bR _4l3 ;l(]ymSTo)@-jT AM8 ,`S^o `iH- }!d+~c} _lIJ08W`e~).o41FDb /GEue} q?wxTvp`([*8M2 }f&Af2HU$%k !ܷPt)4?-92= L2. M\xI=]9AY/; >uɇ{3 t͟X8M~1YY7Jmc0@GkH ׈k!ߨ(_Uwe0! $@l!*$@ (.ycMh/mܒ| y78@ q~ Aݏ3QU(@@ewq&a4cJC`Xo0ϩPh&6CSڭ2D$M*ZT |ی @YMx\{SeHOeMkc7jRȳh4r֗(/¯ݫXůU9&_1m \63Oo6AL待 0ok "ÚIɘ GA5$h (*}k 5C_uyeM1+tnzNlTU+}=ܵWE?Pf2aۋ3'Yτ˧[qrn~fn9H {+h@nܿ29a=ͭe^zxtZp|304@)bR^|ڛ @ߠ~33t_ mң=  e-d%DH7k;Ix@  pP1P^.4F;rQ3ɿdXS#lȉ-6`s[¨Mx.c`/gmX8,P7xm 8O3)` h / XE7,@S${ۃs^xE2+Y/?h}ܨ;@Nج7r{ Zt o˖ !2o~l/Oac{W/{ kIP_&>9 cy+W 9,ad4 _nEVm:r|˹N~>ȂX‘"\|Y@;h̑:Y_(BC6$@ jr*`]<;c,ؑinUQЮ} S.K͘ 7(4H=3dJmS^6)LMΞ?m 8~H`B1 PB6 K79$? `mK&!@2;6tX@~).OǡfpC)_Tsw\ ~|'Hr {087J8c0طQR+?6 WW2Vn uO2Z*Hūk{wuԟ@e+5^@|k#]9@ODF@hjork&4,*RKhhf3j.}π},z,-@ o o0-M[XV>5ZKPbX  L" 97eGge \ȿ@utP}}D]d34!dxdKeK@X|;r>*>6YyÜKCSB!Ծ7~4>kvșY y>2t(X{} & |}@~Za͘o.~fj _]vY7?5sO .p7(:NO\ p_^ rV?F=I{ù& [Vxm >>mljs@+_vuPAݍkPJtyvs:]H='(d;W)Y OggS@s.gcq=G?N?5E9@;mB`#$H@k(_л@gI#1S$6>EHJao3,ĞNߥq%_G'pd 9'` W\Unto@sJ@R8 ٫L'^)>KCz]xWQر4F&sDsfal- 7 aI1@kK/%>9BL2y<h]PqnDrO&Lm2PVl$r!"=g\w7' ^%,` QNZ1f`({Ժ6 [W7@7`?:~{DݹU0֞ȖZ$෗اq{w7|\7gidoOx(RuϹk:cH݆Χ[,l'X4w$H%W@#@+L?Ҡrӽ)@C2ݼu@AshA5|-23c!PͻmaHXvTK0d@p"M w |]aq{`Ab||`2B k<='ǚ~-R~%j ɐ p~Пo xqsbFm[ıH/޲) ,>'jPMx({68z639;|4޽HRowF4o@ޫƘѳsAE/] q,Z@/`ۑ(}ރ|.@ Y@`$cG='n+Xa @4`).BR@MBۉ ͯ¿V?`_| snjAl) \|xWA/&࣫}jt3%v] lhcӇujڮ Z^`9xp\ΏPj2fEՈ/tC3&ms3W;0is;}Lc,+Q DpAg ~`~Ch6h$ ' WR `  84גoMH$r O)(W8 ׏>7wupH8*=-m>ؑER# x9 g<?[A0gȟ_Oj_܎e6;UTц&ȂT Jye% Zd \ BzX_rz0Wu]/ 7&0 dN ,[!=dkhb'y@ 'y< @</H>Iް=|U  es:,*r,-3H6P+_OB{[GUJpeʯNP(U맻" 8[Zr)e7q7( ߮~&4"|^Cd h;){Jm UfO4xѩd|~Y0j?I?DHoBU|MoVt zNal8YNÿ0Q@"4~I[UG}Kb4n ۪i:&=,!y~|K > 3 ;Km[YHK-oDו_@X-Ws<g7@8y r+ !7-B @-OTU@/xDr.~ w :϶ l5C93s &Ւl$cׯ(ٗ- o~ xq Hl,Y@r׷ /-s@$q>@ p h@>Ibьn]Kx3 1lWLڋ7kod>8~< v6A#S1$+3o;_gdӶ9@nB*h߇{J.tg ݈OIh=j`![yU8dbU[/URj&:[kKH{؛{Nbo;|fhc` IeK`;XH`]`p 8̇Aܞ`729 `00Mp Y `I~I.R^l3s]Kk9I7?_t8Agrɝ0 `0)~5wp@ h{A{ݫQhm~uzb@= ʱd䑀C3z]@3_T( _z0 BI-$/ G[r~yN=y СTu)@- 8xm0HO@~coi[){ؽ@=, _2@\@ЗK ZI.R?k,w@v G6"_d]omp0tm[,ihԨ_7 (\9J= Jz}WP kfxC]hG7#^@_10{WqrL7O!C??tݿKoPJs*Hg,wdDHXR2!K/ $z5B+4m@.KoE)@g|9+-V`I 8M+5A~I.R> kDZnG=. ƿ'}5)gqn-'lfLU%\f+T iI^wNjwPV2@#Imz%NtC9J}g @f/ 0_.@) 2y~{$Ly:I @/ 4E Y*& YB q"VOl( 8+[H< Dxlƀ f3pXYАH~F =j B_vjm6;I&6:sRpvZ6%DPө\+NzAk6#2uPNU_b=͙ H ~S/:Ȑv V_ehɐsoSe @ex@e2\a,_Ioic;OggS@s.g'k6@D?867:GL>36_ga?" /op }/ن!58A|-OY0  >IB<1)ju?Z>y+H?xفf`U^ jO|Z#KB~JjJJ c| (& Bm0OI@84?G`gpo!h @0ppJCPL4 :CR#DI.Rްzo"m{uk>f\o/.J3>o8-mkV xo\<-Tnϊ/(F@uSܛRT@$mR՚PX&9|vMWuP`J^=Aw 't: X4^? hchb(_t @ݲ_U LrT~:FeVڀ WF =gP<$b}>(~jأ׽ w@ >#G}rLXCP>Idfb4(q*n8 o/q΃X/?UxX~&9^\*wZ|4s "dy5|iL|rONBuqV~j&ZKQY}a8@n 3d\31'wk%nv24[`me`ck\g~ aQV.̋,,qO`A@F!H >I̽A^,-c;+c* B#_s)JumJDf?*j?y L}! W PV-~3gvAƳɨ B:YvĀ,o'72۞ hO]L2U(P0t4~DmșA Ϟ2?ւ~EbW _ z!#_-D`#i|@x xׁQ/9oX1Õ4so ;3B+#7''6u_@ /`V;0`$~kH hM@_2܋P:(~@cP@)@&6|F!M(@٪x̍[*`ek8cX8@[@Odi+(]l0u:LXH^@$0I`|en`O Xߠ]gFӄ}u` XiGQr0(@9.VD$}"3/UZ~|w?@3|؀yP6;}-Ǝn-PikekB+ק r]g@S[VwwSp+,<6uQ R׳\ @n{S dW ׫{uuLnک9jϟ@yp!@`,>QXQ$UoDoS%Hgq\|HA0#9Oi|-@<+eܚ:J?{G< uꃝ`/F"sK /%: U) NJK'ȷݨ(޿emuaA-}aS(|9 @2/6iT@e'Pgz/ٺ:2{ +Ye@)@+6o@_M <}KU 9ϰ1zO 4߯aRzU3-~|}wr 'G-0 ~W6:g E#%.c x G+w<mtsp2Cs*;V(=G i@8CNBE*y @ ǵܮ+\ܷ'drO%-e,Kc/alK`[B9Xo!X ·>H(8@9ha hp>9ĿQz'DZP3q]D^w@ ءs9*"T zlM@3-=`Rk^d@jӇBijdICYč;P w>dE@׫t/i=SlS ro?GF/כuo 4soP\?`j7=Y@y[l,'@H@m@~/PayD@ `;mhəc`6n u¥Z>*1pа^9K]c] c3i?JM.w<.<]Q!*i y 'k<> P~x8\s| @1DZzQ 1vg\ 3Y;3qXτxwC-% 0iz~rP~ 4zyɤ=< OtN& $   ثS ! KXI8%?U `1 b0A kz&Ԭo*u}OW7{+,?:; l'mDD"mh=;V@&.] Vd xus`X~|yP=[Z:Zv: d !S(]7Owh@Flq Wj @ %ZP<-䊀}A|H˱@HpE̐#'L R&`a\\ d`YւNX?+p .&hS]sEeU2TS~m<@/p,;5l6:T[6KZ~c ޟ4b!Ԯ6K :ZtsS܄f8I*M=ҙ}vp0R|Rih:=Xq+@ȽUq%sstƲ `jPއ|r8dh;K(bz)o 0m $]@H h-(fC4&C@HPR@ P)ƈz 9C6@\jSɾ 7?Dn'>eQUhqv?<4@qBfrt_ձvq[h.[ @U&`yDnTg|4P(ٯFt3#h?dr}Љ 6 ƪOs+&k(HGAW@ʸ}n5^'3OggS@s.g~/G?EL>G=:D47:~>٠_1k`aN oBRpЊ ^).C |_K[)tT7hA/p>,붳})Dp{UY<lb=xn<(Ord7FvKruJSm/z,<k;ZOVM~eVr>Xw(H!ҿ,^ @?(((g~;Xί+ E =~6 Mm\cv45a lhK _pHc@$Ы QHHaK).py굪bPW ;iv5c}~|}_/1 />rsVpJ `.1igEHLer>SR(8ro=Y`}$ k^RJϷ׋ 2K;b^x],i<6'~ pjeL`tG`qa^L++.B¯hck-M[I'%1N5Td3(136jęw&o?à|>|;tYkxVOh@A'VW @ںgpܖ_J^JɣnQ~Pn NNY( 23XuKpldp/J k(:S|F!v9۩v @ Q@l!s0_~χiwrRpk&8VB1{maMa 19.7*hE'R-XoJ;o/_ӝ\`.g]tNgN `~ պyPmHo@7=S|sb?x}7T 4B[l=ޕlx,`=Я|? #zˠX/$Go 6 l]#0)2.7 >9.7g=-$zwQ'$Ow@øh&ڶ~Ygv΂T p܏f܈L.&QvV9z[ 2>?Tr"<8n]6yES2KBP~V|%t''JjP4g+*9w`Ϟfg `ʙ ܺ}7 0oF-i#@m06 s,P?,f~0Ȃ/7 ]4m !E g 1X( OYD?Zda;s̟, o/y ހp~<ăTdW9N$`4: ȍwG kWZV\S`ְp-Mw[H4|]P*Pͥcf qS5@/MJ&\hj8]`'/5^_P(0q֣w0[ lyh -G $ h$`=e `# 1[zG$8%~)WZEVe[W|k`go \i b/Oe dU$,NF0@@a(JhOd=%\)iVHBj:{$ @TmS|@u{d&!_5`-S)kGm֭U!Ohm` -1n*w&01߮ p+t`kYg%_+F :^Lʋ ua5.Imyj|wh> v2 sFIC~f^:{2ķ4_Jꭓ {C\ ,Co-m#7L Ln;*/:H.Űh4Dhzܯ |ӁB*>?7ޟ"+&ê8=N1hX8lzkx{6: %%' <#䊁PeʨOfS T@ ~{89>9ިQԟitbn+]%7?@^ށsxUOmH2jK/7  >ǴL~Kj gn\Β 0< PK0,QǖKU,+}w2խ sg@f>c k_]@Ss^_ A7poy%#xH(Ogx-/\m`IXc9.XC"-qFw|` p^9@YcU񆤪([KmQo/NfΨ *Q>y-쩳^7?.iC"\ Pf0 Z7@ݣc28@NOFp%2q&WR4B>H\88@y_P?uG`TǕ \}K7e^y鿅&y]t&LpLc/3'7#;@+Pe }++S;A-: Xr`PoZ 95]h`Q.ɐ0o@8>)I>tKWl|9Yeرd]Mi=G-[݀e g B i$=\Q:'<-r϶›R +6=Sc(^63l#De]䂱bRqpZͼ4ϖ_'(3}/{\EZgGP062>s4r)DS=dw` km3@+w >˴z<0A@NM>VH~9nY*ˋTЫqYswJ`W[|⌔c`վI̓0_z>Dc `R 56滯8 o? > ^x;viXtu+9OJkX({ w?7 κr>S_BV1Pl_OggS@Is.g1ʰB<8B6C9::5?A9@uضv 1Թ v#ddwmm!O~@c 1IVM,ko/2[%x ښ{u|S GnapWwڷv! xzЋ` C ?g o^*5۳?ms0pjs }  ѾG(E[X"x}2Jf(n?:~+9KHLU@`@q/0 ecP_h 2`]s~\ _e lh,+ o``Ͱ~] l^9硾t,pcV_wرfm3@b{x }́]s`Nf;$H 466wi@PƽA.@ \F0RPhĚ# 1 !eP pŕh},N]0/0zG ﯬuj/c}ǡ0tH1peCe /ĢylK@pJJ &aR|!A~~P{[0ߎKe~|P4|XPT+NlxW"@J0 w,{~T (|1R0hB|>}ԙ7D*SYz*}Y~c ?Sb m=tJ/NR{ԅh= ui0Gn3<ΧUfY`Y?@|< t`S*>?`x dl ;@@f P0 7@ FSub/z\ ~ QUs7jXmqp`ް-;\h 2vBB*g}vF2xo% $^f/y|d xȓQ@G-~Ns,%ޭΊU /5Hn.go<6 ܔ P}FCǘPɯͪ2tQG@_h#@AXy`]W>hb0; kl .4w}4PHCdaW0 .F!_4m< 1 ]UM=(| O4,E4bUDfrhJ[ ;d- c?]{3e_}l:@y=Р4}Զdi#z_}Yt5dkc-%OR-%>rR#G `xcU_+#B5b $4glnV({0V?H @ I~.p;tX+Ԇ{mQiopY?/|pauHpv].؉h{<{ogajtPgeF24opj4{?n:x2I)PX] \=_nw핁n)\}jr.[d+-d=YJc`*YP'3d^-TJ9gP|8֓ Q["r [.Dbҗu: ɰ5W/+ 1KJp!(?XnGW/ĈWFV_ x)@1Q͙ FՐ`5[iiP/gk ޸]O{x=;ÃoEP<"'ˀ#H<)*Kgm llh4r``@] ‡ ʬ /6I `\=vҹ} hdY 9@~DXoao2uE/{k+O.&2}b d7 yX  9{X'K(X&!Ѿ3fb~|k@-8l xdPRw~7 !$Uc30- ?$sC wwF yQl<(s@< 0zsQ-[XI(5"b_p8ʙ w`9s5LKsޯO&ǏێlP4?10\h ` L|)9\0O 3_ ~|'B19r$op\]2)[7O7!x= YJ$B7g @ i'gf2@~  @>KGȀxq^sQP]L2ŏf:|C+z~|lϗF51ӿ|s_߹@I_8bVx@o| {JР=} %$,ztѯ/@N!hx@#Ȝ b0B A19)שּѥhD-)U 2{:_J0a0(u4bC)ev TT_hf;??H`?'}΅3Pu񕡨| PVw;Ձ@/mg zP@k@Ƀ_5M95#cT= @ r \D0=: z]a}XH9 X"(G~I.Vp2=ɘ4s/6^<Y;L d+_lY_` o_50I.ް{HToMY~K8Gw7g'EZpL8̭ U㟽O(Zώ/?k@^g ľ 3l&8MUHm+d&|m-̃ߟ@_@Vo4h4[onc4'isiP?.ʭnJd@`hLo,۷Z<]àɆJ >oK\~$(ₖ %7%8 OggS@}s.g oM6;>?;3K8=A@>I7lhKe fRſK.o?- =Ѐ7̙b$"܏jҬ5Wkd(3?d}9+wUc5};`5=gp]{KfPMUlP O_}rPM~a~>z~V{5.2w}9GNC6(l@ԷB)% d> mE> `QHK @B 0)b02 HIϔu}(Dp$Tʟ_I G= `?!TMo@Y=A/ e7@'`6~7a@22( ڛ(l@?ߟrH7C @IWjK[fz.Pw?!šyx>(9}t,vH%,/<QUwӸ2cy&@CBw'Ta`]{*^P,No8"H@#P.u;kUdUAT }"2P|w~u}@urʘwvcv\6 r/)@^ @WW7+?i0{`E%6<1`OKлnZ"k+Rd 6px` 1ȁYoQʏ`~HmiB7?@)hqpQ\5n[>Nl2*f^ ܈w`SAi`m %{!o#81SPe5 R:vœQdPaU-p VLᾏ]?mv`2atnv׏dd -2 6] V,Lқ@2Uz?B̀jZ1!/ aj Ў (~IP߰5zې.e|gf ŷ@Ny'jaVop.2D!55 2 7  !2`@VFS&QpZkQ4ЯFI.vD-V- }8R |cA [(';{94G?o PF#^1w`_.^O{*)KS" [FP}߸^12ϗy.oh| /L5Z)~=agAr=%)- eAXoA`-  R.LB[ko } b)0AV-oT4ofEH`\+u@ܟ~p/</P;vRÎjD. S9B5{'̐\k@ |K  !n@=t_RJovZHmsZRt^Cc(9_9gȾߴ#'P"gh:? $̓QrH@۟ƄS(G/^8$[}@~C=dV9 H|IJзN zQ)'D9B?D @ 8g*Ho~0c G=`C'ö;1p|oBxy/(<7mWY xj ؕ@fv3,WukIXV>}{04Ѐ] BCg/3PfPz~> ==cy6v/ tA͖@d)Ϛx l@sr~!v@(XP: e $P9ﭩ˺L!}! ŏ|@0 o@/0ހX΅h5;8.Rnk @6;_}ri3v-ur}.~뉧in_S4@p-1kft YH @zD@'t>6mR8 gFWD ԟ +~MQd!@AI^9.oZ-~Cv4̸,F$7@oo7-hnFg'!U_lvStOx@h^@ 5lz-4{N@zVH]/=KOKU׶_@!:_-O*ޛ (: sE@Ĝ :/6࿶ 0 y @d7B|̂WZ`K da7I ga`/>9{ob74ΙhWkhe`l^M-ހT;>+puN|k #x I. ? vؽП PPǏ xfV@s޳=o$w(5|o3?- VP@yZNQp}C띱T&7z#m/XF*>!e`oxB[? 9@_@e!]oh`HJ(gZ_JL74jZ3C p%ϙ@o{8sI&DaT@0 `_^G`I T%#_V/O(^x_…6-4E,$ވZd2$di22@^: K]Aya L-s5髊9z8w.:1F%0YBq `gm@{_-p z/W {@ROggS@s.g7JE/86=F?2B*6~Ok=Gn9q [sRH7S+8*6gg0)bC\0Nޛ0 [)m%| hש"{(?U={5YDJ`_:{?eJ^ ]6Ȍ[ d* -Cϛӹ?y=6 lNkG<}/`dxI4>@sCߩG=sX솭F 7'#Ȓ7?xoss &0k_J >M@{d1WA31q l xd#G4 @tmV:@!r@ޕZ@i7?s㓴<SʙLw.~)J-52-~QNkm<4~~3 \@& W/2O!0Y\ , 6@oz3X3WBFF$L0$8^WkkwG&ŋܰj"̯=tZt}&XO?`ö 5ԟ94sC2͝6! فc2e[)U`@ʀC߲?)Zݲؽ3 C y|`axK@>ox*;0]V%:N(P|i/<Ax&~oM?`s@%l#C0 ,l  @\?@% 4(}fr,Fm -9ǎ?ↅ̋W` UeL"kӁ  @&^z6ˆEd#k@ď S)3ŏaO%'ccDFYf șʯ݁ { XW( k^y{ v:>w!FIul_y?FzpZ0SL{K fϨ̰na2˜n47B(.mc(`o[TxN:>T5H7+ 眙`0J*"|`_@N=a"+PX'=3B5dt Xdͻ,Pp$dAtH(ȗkd 3w|xy$_L+@<Y%lէKƠ$Bu9>6@~- |oV%?W[`y@*BP0+Xe4 %}?y[N04gz0P Ps;3[ F=}GLX@uU" ` $۶nK/@9@T/f`$6b!f6v1 >)UwC+v*4! @(S?XnV ζԆaۑd`p9:mGqԘ]&?.fZoPi'ȘP{_{ԫ)"rupH0xA@q:P쇚e/iw3Jk= 5c@f۱ m-ʍol~kK:wػ `z`󼰩!cJۖ#d~L8R 2)Vb-z?!-4z}x*}Fl Ы~'Wgo@>F z+0L}@t[[ ')GOWG\DZ+a+>gh7Z e# |P(¿cqM{wMZvg 34k{>'emCBt5/KM4[ A 0}:H2p8˼e\$غ`Mo&Q7f/z݀[e$M6T | #u9<GYÌ @I YU_?^>*4wsnx6 g@ 9;l%!W@9+) =|i@;(?f&. Yi@K1k2 c18=\5^6OHC_pS@'<r5q lNd wj, M-|4|GW9@ R+oh7?U*R%ՏߵSCwʟ)`? JP3%%^N;u(gEA+7 We лΖˁ7%!{f/C8p0`ZH~9.jj݅7l+4KC2xw| x\AɭN3n-@; j3m_ !D{@ /mAC,Z=l&!VJ~fΡ"1= 5 а$OTOeO>ޭ_1f==7@ $ytG q-G`@84$u_,]ApYF 7Tb @D6́ 48}C>6g|Kؙo/ <x|.a:-~"L$"kn<<9~:xOYY%n*@̶T[rg'l+`鹤x5K g ̑ipr)e-g^6G`0kzSi_,}1wȺ(1`I%?E:OggS@s.gr*59**0(&(0"!E1. ]d]#6t ot2*~x @L>).ߨd<˩ǧ^l0.\>A8qӂ$x vH%_@z+z`?|>\8vQ+B} ާvPٱd d Gs#焺٬|5SX мjSëa:b!{}O @q=3 8ZLk~wOoɛ, K9 8]y  `` =%l-!*|~?qn!qd@ ~9%;\N+4+ϷC/T4/ $gϗ`+Xj~Ŗc*BO@(}PO8ц=!b2Frd.UO3U Sgɻ3x[grhbQ`@ 8$)CW?B|I}OMGfqpW`ܼ 7-gJ_m4_` 3PtpA- l62xw?Mbsrgm>ꀵ$,I J[5s2qR%{ZLj< .oO>xq kcx gr, tQ k](}89 2, @Ab@鵬2zȝefMt"x3n~ t'/{0>Y$̀(a)8q&c2%gWv& {)7{_=G2ʋ}9 4? @0$0a I. ,Z:rn r.(/>~豛(^"-裫m~|1 q|=s* ";`O(j(4\4RMp|:HwwmPn^oT)Vl0 :%KjJFMe'\^;c#P:Ye@w}Gs@.[ (t_j@h &' }%d@7~ ƁMେ<}SP+8x   ޗJyDs7Ő :>5lcV 7 w|u77kTE6Tɇ1]GMjk:,/x _@ǥmh@˧wx&@?}6cW +4roC+ڻx y'Я_B=w1gf`d$\? u舠",sv\GYAIQ00We7t|nYxh >-ၣwUïFd-` ~+( g'*)FQs1W&6P.>W-L GVs ^g jΟ$fz<凅]o-auJo6(V>/ |i7?rTJ'Z C^| {]h>>N-j:ϵ g%oDŗq+WOpo,ӧa3gy k58|}>g~LBWVuqR ŷ?d?0*<X9_AUIg<tn3 yglBmd->( _wi'ҫb_&z7 .>XZ]Qu `ɋ~i.@}Uy1ҡ{r Vr0e@F`0mYZdN]$l2+L7oVqh@W-R>%9CR9v).T1$"_74Y@.7?laUf8@&>P6 '(F%cMݜRs{P(1dj[>X֡yh6 `ZYPqkj>Qc}ԩ]xBiЯ; X 0C ޴δT-5` r'G-^Gךȸ4:O"OA3og3y`^peٶDxTUp~xo<(ۉ@2g(k'<>*ۛS>X{νoh=qה~e 8j;~}ϥ @\?YW/hgj}c3`p 5xk(֓KLUU 7?]@6k<d)Okϭ RE{..K 7SX@qJH5߿5Z/@Ipڙ00 $?4\>oW7iYo p`{d(Wm,~+-h,.xz=T&Hi1ue$jGOG ^m@KA@mNVhTs\ ǁe  /"' waG[4IY\ K(;b1`6K7OP8ώ1" !$̹rLtf~.L<,& 휮oX*>U\h@[= 2@̠?Ru(mp⟡/  0o@6Eir(`\,m8 3.@xv$%5< {W{SV&7` ;~'%*Kf &G?0 8'@v@g0UU^`6oƯ 8? (wm_;@s %@B/ @Vvs8]ˏ4P?g2)P`}wylN{b{ F h0P=1/uoL{cIJMzf|R)K QYqJ &<@SpH'!*;ьO oR>5aEh4mzuuLc!] gqyo(ym zP~:䅝@Y (9 `շ}H24P ;@+9: \?@Շ5'@ z ̷l"F+R"i2Jޔ/SAgvڲ? Q {p $''{%J9iP>8T ;>aTUU/ $|{#I( ;-21/֬.m:Ǘ|˝v& l}-Rl/ .P :Y; ZؗoXP{2cѥknpUU qbKGik#W:15xw7+._#IӀ:pZ`0?\n$tU`Rϯ0W u,>+[Q;W9&_ /[)"k4;4O=˔geu7ol)}w"{ʆpYo3 ` f 'mCE3qR[8'Ζ&ӑEUUU7;UA[5r<_RR4Pȭ$J*(  A%4w= ϝ k澀jcK:+ٕ=Ӿ eURyvUO]Ygpo6; l!yۙ{yx9P!ab w ^'/Clmms-1.1.3/data/samples/waveforms/000077500000000000000000000000001247673406200170655ustar00rootroot00000000000000lmms-1.1.3/data/samples/waveforms/10saw.flac000066400000000000000000000143531247673406200206550ustar00rootroot00000000000000fLaC" pp%&! xMEׄ( reference libFLAC 1.2.1 20070917 *KCYī-QgSQy OVT_L,_g$oV,i[%ˌ5!p4DD%  {#+8HؕnoyYOsJ< <<%WhJ< ;(,8,(YI-Q9pD z҆CJ4E6q'N4A.kKGS~V(S!BCŹ9[QI(!# F%_כڥ,Lj3<`(ڵ5@ЂtPҡ/"szmE%9`5^.{6XX T4@𡢏8Ӥ OV6 vCC!jK9qJ<(yh]>BU$PDz7&'8< K$ZYsTTDN\9Y 먜= )ڈ{gbƹ=q,S0h%n5ߘғ*jlBX<" rh%}N{͕'"r"y,$Al!iŘhaAaLjyŐJشLf YMc4H,A/'Q/"-Mrr"rB <ƫeKED RIOU%hBX%ĐˌSUVGxؕ%WzaF!< 1Wz&y=J<($GPXp>.H ODU F%WSҍ8Ab,x]q(^]O, b,D*e5Q9qhSٹu($P6 !(Y Ź9ysÄ'zf9,_b4DBY RU4jyd7MܫG 8- ( )Z#i8 0leN\r-ۛhJ=Ō cQ6먜~cN3P <8pцƜjYV1= ޛIEFj?9$PЁㆎ=׮{62o%q,兜K671[TFʖ-QUsq r&4N4A-I H@ӓd0IY )%Dښbxb e0E, ,qjqg?儑Xkƒ [ڄhY hqUOKlr)IN_\rj/=ܭG{)=0YFhب<\ŐŹn$}J1n%T$ݏ0Ӌ0#oHH-hƜy[ѣb i ȉˌG-ȉ˖04 <$U (JJ-ۃޛGZ D׫fj"-O0 8lV%q*bL/oy̩?Q҄XЬ:$lomqT7iBXBJ'O(aIn4LNyR8mO,y(? 4 $ MӮ$[j5D{a?&=[,$ޑ $iKC\<\)<q*(Nq&s"xiE)[H4D=SxPX4(h#Q57\BL(H3UuiB sd cc&- UzLj . K˨lrQ3˲ T%ۮ,Aĸط|TO%_TܞYr )F9IX&-_ڦh=yM(e|{ >?}璉br'.YijjsTH$A|.$L]!i$Q.HŹjKG(ޛS!DDF<)1YRX5(]QT W<(IȯV%_Ӥ0Xj*"& mDD!BLjT瑩$$pӓd0IIS\GhˌV~O,a=1yjiM  yijcA'DYebUP=0HT5׮y& ըYF<,Z& ) mDZR-S8˨lrU6[Ţ Xj&WpD6i$LN]N\ CBCCūjyO!qvN(b{hK\!9^ 9iMeKD!^h$A.iFȔ T{IFCYv-@d\SU[U ޛFDDkShcH$OyCH8{d=e $D c196FQ%SQ !s rYFJz+s5cH$,_g$SܵM 12[ŢmSϔmYOgз'.ka*ϮYEA&P4N-BH^yzƻhKʸ8IBHV]D樑BJOyB6򚉘Cj&ss @ b3U$縱CG Z*-KR,\UjZ8ڈ(Y+mO) +h@h@ PmE{Q$.9e ^0He& *8, Yɤ%[g Zie(]Eܾ%SZ%Q5q,,o\Z&X0xPH'?9-[n4#W'hః>֣0XPhA: i5sQ <(yq5KbЗq=&bj=R i bѱɤ0$0bmrEJ& Z" (=[SQP'" B:[H<@H(<(YYFJ'X]48J mN%rrjA6ѳQhy E^\U֩(, &2q9fz}y50ӏ8]]P5W1[FױXƔQf.NzƐK>A,幬$".4{ <0$=[WfCBg7!.z/8cؚYK=рp$cc.rIMBYE9yq[9p[е}RY05ň(IȯC,\V< ,AͶ0x7Sjjhg7&&.,z? (|lbU\YūPX~b}4@PIRAd&3Е\P-Ŝi afŸƔY I܍B-C\j< !ܝR $Uy 1}${y7X=P|!ZKǔKמ}KU?&/j&jmKR{PNBOViOF%ˆBrm bcXI(ӏ$\Y*[ıj7l0FnLoz6"srCr"KL'yͮ[v _(%ɗ(Xb !5E`HA9|%*,% $h%IȾq{GlꗊyDjL4LRU+)93G\)4N[E<ڜ5ۓZGjI Hᣅ4ž,IFYM(FM8zAa.OM[8zRQ$5hyƕAgRa 4A(Ɯ40< /3zf5 ZBN$YKXYA%NGK&c.""M!yZǑ HRT uxBaepE}bT<)(|w+|"T_z5 Fc/&"QE 8W8L>طkP k?5e뚊j=WRN_sJ{?r퉆EUG^L*}U,@UiIEʓ 8Eܶ^lR]r-H@xCB\IsH,A=WSZ& i8,8$ hOLENoLTk{p</21f KA'Wz>]N~)Rsб $`(d=PG   /% sHkAg73i !}[usHkG%L%G4A.0X@Ǒwօj4Җl=$An-0& 1(YÉ4IĹbѪZ2r' ( UnVܾR,`X0 s3ە[$ƫy.cG㿱=Sh<@cN0H,q*҄kpP4n8E%  LW,8M(,kiƑ>ȈS,IC  3tba&/#<݅ 8mfni EMUصz#T%%HyőlJAwnDn[6*8X0Xkq5ShmT‹C\q5y=,`D"r{I(B79.iDzC_DKޛr";BHj1.Z1 um(zcY-yrv{Q  /҉8H@ B,nk5S8x&ZN4Ga|,;^8KCFSYvrВ#"9}YF0Hj3~V=Z5H[.Q y-RU|4L$4N{FU4ESHj0HLDTZ'XBؕsHNw%'$.h$jb*XdPh iG=W [qc%Qywb]a 0V B K.9%8X[C\l)JH_f/؞5c bQ$ y[dW?rs\X:cE kF 3 ($8XbH_b4QBphF=^nZ 0YIޚCN8XaAHQj<-ǘmed8h@ UZa/0x(<{>HJѽSZ/"'5={S=\%^ǘq#% l2A.x@>KUԡ,J/#H,Y6 "}T˜goZI T{c{ ;T5*yEf(( 骾$$5K6!E1XIƜYMbOb age5 0 e-sZ 8X]sޥh\h#5j\IIB f8ӏy܉J9lRpp/'.|W=S-|S|Q7/JU@Fd8yiM)c$U$oEh^r/^&e,-\io5 qe4Ք 2iՔ\("jD]+G¸_9=Q"j6PϿ^E)fT-TȚ Ąa><*IGė& @4dj,Iwwv܄c0<#d*B*bo!RzM"½DѠ 9VK*Z(fBfε'ɄI\HQ}jd$#C(eJ8^ YGdxdpjFK# T@ih9*ZMQLۮƁ3xha78d0lys)$FT^'ѯI}NR .:8ɪiT.uu&m¢(*A6Z1ԜUs>D^&{& FO'!'-&|# &,Nn TP_RWd4RڇPDHTtFlw[KH|p`K]!E5a3? 1wL4&X:5LxY)vO{jIs$46Y]F*6 C:(%5PrtmE\l@%ΤHD}}DP:i~)-YqW*x գe UB  :$R,H-C$TG|g?)Eldb,\,uhҾWW]XTYTPÈ%!B ?vgT3(PYҟB!$`8M¹@*?dpYHzh,ڗnm$yvĊam) CH")8E6 NkT:{#=ԌmNT޴ *s>xx.6m]w>4~MB%:(HR -:u8^3UA3 )Y*0 V7.I7:]`&_*$:uI$YRJ<}._+# V*6[2(Dy1I64$Ix ,>PTDIr *0鮵]Z)dX 0UZXb(܊Ju`#-)l +CQ+-$9ilM J+njl\\̲,L^Iτ / 60r35f"dHm,A˜$H葞_96@lG(BMd Iq""qgs~ #TtiKZG(V)KR"Ɂl̍`Ec) HBb5eBnwT|~Spt@T^$֞[h$6k>;#7RhW}o\N"9RD(%' sCFK"Ұ?ߡ~/*U!!yK\7M )  ذ 7 ݉Gx*X! ${,EX.#`+:A|Z XCƚPƊ!.FhmʲJ٭͏6  XK9B0:@Z5ʮw%UԟSS# "qI@a \aqfڛo ~AF$x*$agҜZ~!__{d^ $xv2&I+dC*wylGC1I""yuNUIXWP[;]ī-:" *$@I6Ϳ4̇SHIuSZ?yϿƉ>Ldq#o 0ՄK̯'R̥οϽFA#dK .$8nq93J9jZ^ԍjU3\$$dD$D$Ə(jeu]d<>WU+6D ^ &G1˃Tn)tyZI}Gs#8\1qD&+ƪ eEEL]:YEO, Jq;_`(t&H%tYdKTYgYZ#etmִdb51"(Eha67B}E:X^u F°kKO)d佐w-f5o2Y$IXmrX.ND) #!V\-Ƴ,QJ&4v̙j"!n1?'HFoz&U{.. :K33f5NnG;Wrqp_QuO".`*" 2d͜$u R/.Q4F  . 0<`ʢZW>~;e}1q.XqR 4Msd =$lV!lcQK@iX5Y@U2o[lc JxJkF ZjYiGH &YJXEx!:VsO1ZJI0l$FSJD2֞VW fnC6iSD6LϑW'5#--e{9<KR9QvJ[dQ>Wиg&uz ']wxt^Dy\ EcN2"Q🥰ohuO{8Zjb@#$.,}$US]4_|g9BŠSHhiܪtB Ѻ􍊬*(-⣛1#W=%K:c1$f/5~ߔ˔Yk=Ued8d`VR3^/]ku,58 -c91/ƝX:+9}L]B]-Il3 Pr.':XKpE$ ̎zKݓ7FNQ"S2.=%kDvj]#51a8J\PQZBFLK,gM|DíysxQ3aZ" Q0,'E JzQOHc6ILLH2XhV7eBhfmN**%iMJ>Y}_rm`l2PEέ[ (5x[37h EvR7s+I,y)l!$c/H@C7pf ֪)r2(آgP*nW]j/\t%dJtA (D^WE3 OBJğl)F&plxM/y <>X qI>$e.S%*s(R83X-:p}tupb̌*Re:YQV#6}$m ].i3)52M!$ ڮ}s"4$\|B!rCKA-j*pdVKޮ":#eqI3|hS!cEƌpmR$ ͽ<%xx\ };y'2;<*k )ij L|ª "@T3%Vmޓb eAj#.<,"ZTxRS'\RUoO/WxL-3+MaLY̵I%b2ͲB?}8m&A>Ң?L>s,E(:P:'3@Dcm+l|bΚ *Weo^2E<hfXMǑZ]H'?;z# >Y.(6< (unb[f "ìXB$TgdtDiRdobi5SТ˴WN+ؚEA9QL5A !x`-mWx^(jhMá\ȒߥI۪$^#j< աN*a6 Q"{Q6woDHuwk"܆ :4JD/THV>/ £B!BiT1AᗓxThD D-b|aHرT,Lamֆ֋)ɘѱ#m;{Q6EXiq%MtmzAg몑p"eB0SPd`*,}W ]q9>$:aR3]1ߕ&y4L G<+ujb tirR]Y6 G3 dJ&͑N 6XTlQbe-s!%ڵ=4,&,"XxM.YwbZ>Je:cd(i=]W|E `.ҹ>貧"0H-CၑdXPns:9U՛ĉT)GREd& XZ^۾{]x* :XR%.iR.BdQ-'*G(\͢UB eIбQH!Ht<.<\<T6O̫b04?W 2EeU8|PG~_C@\<D3H[QbbEE/e{7k bψe9d,EAed*sB I 1SQҢ̖6hEv+{ ,.?/1^=&;"=ψX'lݲ^uL^VyKJX*3p}0fTʹ,gL½vlv\$N9`֋~ Y9$7 G&&D;v愫%)@2AAOf,hU SW>PnѻOrK q!K$h3<'~O -PrH-d"T-D+쀜,hƪ֋t4z =(]p-:^f¸"FdF r JMvK^| WKv] '!}v\fʞGY5fʚRԖ bܚi$-' K*Qc%SZ0E$ACYXa]EnZ.3iuUe sHz1℺A&(zIĪo+ mLsmG-Ʌ5(lըE $Q'"c7Qڄ4b3zn%תBT$PFR{r xA Y 0ED Fs鄲F-N}^Ǒ@JZC7A'Bk0,0hJ.3{x`$8iEʞSؖ5*y ȼcU6MzE k&HȻܚܜ0h]Sȏ0h`hphphpXHi'&T} ‰蚘q.S4L-HjXW,@b<7g $PBEWOis\lTk,plyMSL4_V$HMe>nZ5 DAcGU$湬  A.q.B\hoE-Ic$L{?8XYO4Q,鼋G 0yƜir OBԲVjdSؕ}r% (x <(q'b-Ks\a1r@KGA%lUz.\ho[&exJ%\5'zO0Gޜ0hfnc\-ڄP%_RJlͮY%,N4ÞM$pUS5Acz늋1kad5FdBaMs\4zu_ۘM,iDYE !6ƹqBas4pHgZ$(4 P !hb#\K3z6ee !bѨYYOV*n*Е%LjR&3ry)91)N-תJ!g yG79nZ.P|0тNR8YBs\I Ez&ж%辺Đ%QK%"R,pd}e-NLf_No)% YkE簰H8Q, KBTWթ&hY6_RHz+r#z,SL0уEϮY8Ys4ǹ=P/!hɨIƜY gcٶ 4ahX",4@E6\TZ1[ 1  ZeMbXHC HM)8ĢЕ'- )u,L4DZ*JJ4NQ''=(H%4 Z+hS4DZeRk.P !}4BjcS%[=(nZnkan~Dr,ƣ5S[/%Ҳ$G-В Y F kP,-[ەg1(HUŊ5ǔXn88 0;Ten 1DLLp#'"Š+8Ll+Y3ՀXX8X@L@(&L<$W)`sSB >9ڍe qzT_$@<@ @|@,@@ @ @@}B@FW5a qc<ƈ0IaBehůL@7$@@@DDD$${ю@rQij1 d 4#8c%,\ al*@ @ &@!@eALNEB 0؋BT@8 @8 $P@ ~;@"/1 f5"#2w~Pp@ @8D@8 a}5OB(E+Z |DgjI5)Pkm 0H  @  L 'Pagϟ(Ĝ(6 H=C|1#w.=]x     9&Ip AY udPF`fB|< ,/L&    T0@0~?;Ndft|}ptFblJ/dE @ @x$᭵YPH T^{[]H @ ," u^qaəab9:֤Ә*Y & `8" x  8" )FEXk!A V@xՉ :   `H  L _f4A$fRj_e&Vc&$\`PZ{&ZIx(N@ @ $@8  v2qtɘK,_&&]W:L$6[#X t| @ @ L 0"썽r$+.r.B*$ wĸ-    `HwD|C(4#R97l1B&ǰݩ~` X  0 * h@ @ a486*p[~,@p$@@0$A0D Ԑf؈ @ i& iFc\R5JpXH  `0vrLX[F _XlG "xv0<@@ 8z״t}pQElZZElODlMM_<\ 2 B x L@iLa:B%++%"$uj%/c [< @ ,  ;ܰs}DK*B)r$G뙒HQM}8|@@0$@0@d@$nsY#Þ$BN'&`"GMJd X"  8 x" ,F! A&) ; ÕB0Hq`  8  lvHV01Q>|טrE\M>m" B `diHȌȁCiL)8#"d,@@pD@$@pD @0DݙbNPw@0@pDApd@0@9V̄d <lLqb&|(@5 `H   ,bcQ;gt*pu$9@  A`8$ rb(G8 b0mtipd @ @ @Mp! dhkOA>GLSX] #{E2˰@0 0$@@OcdNA%<TCB^ !|[9 @@@@ 27Q*ϛSvΉ7ȗ˜HzO@ @X$B >:AAA,=FX;73 @  :` qf~qQ.r΁5&lR Lf L @@0$@0 6ڼ|ClM.:ՙBQ.J,[@  @@@@ TR[L8g|iLe)QmW$ +@`8D@ @`P% #TYPh( |  Bx$ @ltk^$Q i4frLɖ,8:°@p$@d @,@ ffa *%xȚCpKr!5F06rG @@pDApd @1Y=P#i:2^ {0`@ @ Em_I% 3YT@`XD& C$@@#KD m0fsI0G^1 `. ``6W&$NmqA6vGtL@`H`   8"#"cȇBaa8$>eR!OcX%d0@ @ YP",g ` 00ICF@@`xd0$@(49<n 8<ۛ _ %we*O      Mvk^(RY4 pn )z(elWT `&`H  2#nEzHF.,sNq5Fl8 F+@@ 0H@ 8D.! A9<˃TAfAazbcx@@ pL2 @  &E9aBJo3f#tq3eܩɱ`P?  `H6fnb_ :$slgL!H&;z#8 x" `. 8@Kpr_9'Ôq+Dlt 0  pL2 (kp%*FCesHrdI bz@9pH    `f02>Ȫ3Fs=#Rc7|0$@0@DA@p@;`М*kN%C|I2+ `H` ` N 7P =&[IqX:@@`Aa8 \X7~ azaA'`Ԙ2CF!`8" "  X`m1w͹*dMcRX@) X"    @'C&c a!(sp̹K%S>@+x& `LӘhS8oϰhpeK9y0$@  @@.CBsF'&"R XӖZ3,@ 0$@@0bKKi;&"++$4wv&/s:@, H  8" Os4'ޞQ_1vaa>7X`@@ @0`@ >=œ#&".0,%pL6! 1a. 8  `@R~f@ &,hF0bEPD\@%$8" X `HJn_rf ҍ( PV\ @ "`H   @C4`#&b1n77#1% joZ\p$@p$@p$@0, #n삉 ʠxJ̢ 8bYd@ `p" @`$0͊ݖ6ADPŬ[0c0b,&b/{,Uf@8 `0D@ `kAG$WaJd&TbYEH3嶾 8"`H x" uH$&F pUBRabdT9   x2 XP}:&/65s8Sk7#41"(b {-95e8`$@X ` R{DNS%do;#:c6cD.$7+zH @ @  ?I\XLɜ\KyP~ @X @ Y~99s8-TP@ @x`@˞bjVNQAo|6Z$HÀ `n @ @  `1 :\IJ4HETUB@5_ʌLH @@@ @\ @ @l@,@4 B0"zrt%^:@#( fbn*dfFe`frS|h(/JiҔX܆h\?z->h&J.  FN `"` $VXSSePNJdjED!@4Ĝ<ͭЭ@ -. N     8dJVgU57S$OIT]CDa|`B2ܠ."` ``: &.  d%ZXUzS/NdA ;ö+ߑe79b0 @&  (@0, @v@K*krTu'q8JCZ^_3o瓵 20D`@5mJ,nZՆe &'ByP:&`@  (@ T`@@ Dm-IKƖ)bLj!B_y:@ܐ@8@   4'dj:+I`ȠHbSR45F > > `*`B2 .`j`z@5!˞UqȖ`)߀ x 88 ڀ-nfee>Pc4aj(jIYdrj"-Mp# 01%p p,o-s7)r 1 Qm!1(,E2rkj@xT ' &@(Hۀ $Ctnٗ*cMp#IE9,՚XG/iy`,0bX`t @x`!Z[7 e0V99$ OjI+d7@( |0( l:hWRa_;hܣq,;I;E S 0l `P6@ `f @ 8h}rrya 'Ъ?Fɡ(($T \:h \: (\ Fy&y0 &XRJM*E?@` h,@XP@xf˚+e<8$@JfNəF<bTa@`T >@!d2 : (?Ls.Ex`+Gi )D2Bh#L"`f PgLÙrG8a, qJ3$Tf"-L 5Pl)  𾛦k9F!F) pB``(hh@={oɥ1bBfZkʠQ @@ Ap`&e/:r1\RD=PM^Vp?<< - B@P\( +KZu'0ұ<EqDAN%e0YaiZ af` " x`jϪjzq`Rt(⦮Apt@, Apt@00,PhnَǙg;xv#R`(2@0 @4 B@D eɶ\WLLWFs4+OIAR8&6(&a6h x%?K2W(˲'0 .ESԽEPU5R 5(.a( .f`2# 4M7r7Fe S5HU@pX6 `h`N`Hl)yacYH(Ir'Jic B;C0@, %$@hٞh8^G~$)⠔i@\_w@0 P%p+ Ap4|(Y Ys\%CAtaK$?QX@8%pd @D@DC02gL<] @r, PyN% ;Oynx.` `&` x @#Qs&[ pAK1OTTTG.{VJ: x ( ` sie)rfhڢ)pehJ!xR 6 `P /+gkdV6"Z h z`x" H& 2P` ')gvyY.X"l ʈZu,/ B@,P1 PIѳL)qŰ,=4 MPK%3^ ` x`!Z  p[fz[eY&A 8)J&2nϤ` 2`6`h!8Z 02 2[fَSd./bn' "X&IDQ!xJ``,.^Yf?8YɚZ&"b@ENhF`N` Jr}9of89&(:j&b,~3 @4 Ad@$@p$ Eq"˱{$+"@2]5HTDDNRd6 : R!82X0>|f!a^+bX e~ghz))*(2)< Apt@T B/ B0d+rLͰl0}Q1JTT:#j x ( a> `Xp@YqY#bx)h*J& 803 X" NH.JÔhy^A %y:&'j+@+ P)Pl% \ H'Rsܓ?3|",] %MU!$Uy'A@p |Ap7Bp2 ṃCɳ\w+ñ ДIIuSH[At@, @DAC1$7 @3tr?&3L_22<ÐA#E$Jt\?,-4P%GMҕ -Z@@5Pl<<<;g~w9V""N%`@}@8Z  v ?n#c58-#9ZIbn j BP1 Ќ Gھ9cibDfj&€B"!8Z (Faf`x M4*ʱ,k#2@a8Mz;/@d' B0 B@0 R@`B"qKLIDS4u4N%pqh$# BA7BpdS %<6ױk2<ñ|!ÑI2GS:QWP @4Pl% ЌB0#IhuMȲl4i*IĕUGZP)Pl% \ @4@TR陮efQd8"rD r(P"!8Z  X" Z ?E4LC3|K0;$@2m1LSGf#@0 5T' B0@\XٞiU` &ሺHꎞ'2 !z:  fi9wؾ9F9 #Jl@(V(`h "x)+`6m,q ǰ#D,O%Bm=~ `h   hFw_ )p Ple K:MTK Pl!L Bp"{ @l*'af6` B B"f@Z6 > `*`J`Z`2FF  ^N)Fb> >an^* 2#(""po"*`J`R.&6 Je,a(ana>` !%'"Zw  N ^:`. > > >Xc&b aa a~ !z!,ꇂ`"` 2  ^Kb'.a>%a`N !2!z#*KBB2 B:`*`2 .hn.a+a v6f: ' .1"P2J` `*`:` 6 > mOf,ba`Na"&`Fv. *Z`2``*`2`~1+ pG Up =Uxxx( h `T\PVM5CDD4DYDeW#P p0 PR\J,>)ADB5D$NE$[F5 PP+# p%%ToLX RG8|5B(CKDlDo]0/111-00p55p S|K8lLAB DF7GXFo Pp!0  k@(=c:/bVa ` ZR"";"O08tD4@,@<@<@D4@,@XӏX݌xxxKNȀ螋̍Ѡ'` X8hXH( `XXɐXc(>hҊh`0ۀhXxx( h!(((TLƜlJ\)"AJCfFDqHtsuf . :` `""2[q@(q)1w#1;q 0PmRҍxxd,@ @4@\@|@L@lv UA݇oxT()DF f  8x hApECYӉ 8dƈ)RZSP"J6Vv N > >&6A 99]Y5X9x8(̐F=l`2bZ`2``` NX^   q]L,Kœ B$aGLPSQ; >  ~  N `  NLfMH Ѭ,8t)G4LQ3Uo03= `2r`2` `"*@Q`@9MՍa |uJPkWu]2P p11)pp- ^ |\{gs$^t@Bl P'P;PP p$f@I6#aĬJ&Xv!gtl9x, 4D@ @A,AA\ `;XU%UUC?=ό&o'|T`ՀX 8xhX gs {N(޶OɉQ0g=lmms-1.1.3/data/samples/waveforms/fmsaw1.flac000066400000000000000000000403151247673406200211150ustar00rootroot00000000000000fLaC" ppIxo:Iqe>ĥ1n,( reference libFLAC 1.2.1 20070917 ^_XniƊq I8CJbNZܶLddGZ1 GVDk-nydnGdX̽8XPЃiKf[S2V$5UQ8%AM,hr}[:P8R{&c{%JifNt6Hynj,SQ䔵O$0H<jر rƔ{cY8X4h(RSDWOZ-A" )~!dmdUgBU0%)BGj'"aㄊ,򒊾bi #ip$(k tFNGG0`xC٪IOvʖp'n1EMV%P,ǫ5WBYuR"H$ǜ$G7$(@6}9(LeHyY܄4`%diK R\EZ@٨U’ɶzbYsQX),Yőuܒ3)=߄ v gGǡE 2g3H,`Kb\yA"(R)jGiPBʗ,F뽋!RIB ,B)pQ9-ڋDrHJK$ad]e%,pE,8hJFkbў书g/22z9jE$`X(y;sJi T8xA'FZ&`.V|8CFk3{V<5rQ4H܎(XpF=,[U*b]r<˔G>1^gWJ`zF F  X@.N F j`R:&  `*   `R` &..$al8x(<N9敱Q]z\X,HJRܖ .-ۙpEf%!<ūUByK!XE">,eBLzaFTˮ(:dijUT7SI.$R9S1YN0αYq]YV;FҪahGY=u хj-WV9Fa)nKeY@,5] Y E[cOJӉ#rA'7є, ;Wy0VG!=Ґ9Rݽy)(0h $YIoJa R )(Ǒ-1e$z*Q5ޭYKgIĜXHVTf{D#$&Q t.*8yW?W#)}*DE.q3iM{pI$%=hbUyU֤5گsD g5~!.K5ȮYH@X(xtH"F$ ,H#iJ[/ v1OOj"ܕyGDk%sL{"-5B]Q~(̂G}8q2D$_Ch}dRy϶+-oV*iR6 P>(( hxh (8h8x$'h h(% ašhOl{f>1jj|(W%<5˨ںK ,FH5yF(ZƸ}RKu1,ܼHo`| !qWz/׼!u_!Z64j4@WTQϚJU8CJ>#cH4gi =Mnzmo5k,np1Pp#P;P Pp0)p4t1Cp PP730p 0#rmM{l~b??H T}L녎Vĩ(h[-.-AcC,%[7h^S=135KEOTIũy:y_KN0xe.TiK=^RԙJ>,qŘi QdPhpx{IDCr= Bj.q_  '|(oa8Xjߒ(i8IMBƧ8]Aag76"Pk ҟרO &[_HяF $@EN F7Yx c\iM7&$i Z/TIvcs~Kt ҿl\UT"HJ5h#TeeP#B(zIu!*{s{qSД&8b98 د˾Z>y4@cRn!.,-iGycؘ˼^qZ seFkj^BQcGt iKO]zyo)[j-ړAЂlll4CuŹyjYN.iKJ>y{<$PNJ/1t\IKR{n"$"cTx?|Ѿk'.fsYE1 ҉b}ܙs  F Xj{UZ ReEY4L Hㅻa,z <(|V%_NΡ}~/!*_lo=ɭkKS$ L9*,k(&[7TY4 USdhj/j4%j([Ea},ǩ,zRX f%& 4P‚-%[=_j$T.Y ؘQjQd8p rf"}%KؘY# ,ش%$kP"X]Y)u%y":o=Iu/!g(.bgy*{WH@-Q(ڸ^5cѸ҄Q$Ql_lp% 0ӵ#K 1ȅ꽞NJqj[5Wuq$X44% cYN=5sa$plo&"f`wj%5D(^=뛩CؙCz}F ˸pCa*ME& !%*zmFZG'6=iD腩1ɸ٫=G|cX&Pm䬁#E6ZHq9Ŝ$\y(r>31 $ @<@|@<@ @ @ @|d tD<@] Xб@ dd $@L@ $ yQ&7{ (]שyy 韛$znkб%J7q63MSQ,LCv}D%.1/..#jwPIyEv#<%M>1<5͌[c4f7/&u R&+=a,y fV` 08,E $\J??BX_7#Gqh%r8K4cVzfc O_&c'P3?#P 0t/BPpp p00p p00%0=M0P2 !1_K؋  rxUi &+x$' ԔjZ<' (-Ob0J4(4azK7aBF ucH['%FA͋'N(m1qhncܹ`wGu =1 /.xvn1 $ǡjj>lus8i͕?+ !a>IڄZ]ס<_BkA7dR\o$ǔ,CE<@@<$@@|@<@ $] Ю@@\@DD@@  @\@ @@L4TD@L@0$aQ*O D_X`$ J͙4 $pX`xPқCͫESᆻ!*Lb5Tnh)dQCV%Č a$S} A"Bc/ǘZl\ Wx=BIkbКJ>/1Iag [&b9ͯQC!L-M(CH%S5[ Ӌ= Q%7{  ٟ} SOCSG=[oD===/<O9O<<9<{5[8536<{3O1<. <<ï <4 & <<;+o/;Oӿ<;﫾.;﻽n;ﳼC;#ӼN;n뻨n點;[;#໚⻄+.ໂ;tNݻvnٻx탷nֻtc.;r;Ի`Sn;H탴;>SN;F NλJ컴ʻB˳N;*Ӳʻ,쳱;ӱ.ʻ샱ƻ[N;.;n뛯:볮:볮s.:{N:3 3N:ӫ3.:˫N:ꋪ:ꋪN:ꃩ:S:;.:n먎󧎞:|黧:v黦Λ:l鋧:f雥V{ΔXc:FC.X.:L.::룮<諣*ۡ: 諢.賡:蓠Έ: KN#n9C糡Nx瓠|9˞|糞x9sNx盝.x9[nt9Ct9p .o9npk櫚j據g9cnf9ke;`^9ۙ.^_9z._j떮^9`N_T˕Y\動XP勔V9T+O\땎O9NMJӔ.M8.N(㒎L9,䓒H9&䛑Hk.C9&NACNF8C.A#A8n>8ۏ<㫏N88ノ98㫍.:8c383N4c5;0.Ӌ+⻋,8Ên*8⋊*Ⳉ){'8s'zsN%z;n"r+!8njӆ8tkN8fᛅZ{nN{8Dk.8H F 8<˄N 8>ೃn 6.82c88+8$SN.SC#.7Mߛߓ~7ߓ~m;~m;~ }m|m{ { 7{M뷸ދ{m7޻y7ޛy跘{ym7Sx淀sx-7 x7xmܷݣxm7xv۷t݋wMطj݋v׷b݃um7JݛtַT+u7N;t-ӷBtm7LܻtʷDs˷6ܳs-7,ܓs Ƿ(ܛqɷsq7cq ŷ Sp·qMp6o 6nm۫o 6so-cnmsmM6[l3l#l l k6jګj6i6ڛi-{im6i6iM6hg͟pg-rf6hكgxSfmVكemN{dR#e-6H+d-6@c6KD 4HD4>C 4:лCm 4*B- 4A sBM{@ 4Ѓ@-s?@M4@Lϻ?>ϻ>lϫ=s> [=L3+=3 ȣ#슲0"l2$ȣ"l,S"2$C" K! 2 C ,1;쁱+ 1,}dzlyǛz1dz|1dz,x1{x1crr1;lqnmllƳh{Lf1K ekd^1]L]ūl[|Ż ]f\fŋW1hc,VZklUPkLVFCLT1L16L&lI&ăE1*[H ēF3?1@B0l> =0ë,:0ó <0ó l8[ 6à 40 / / . , +0“ ,)0« )ƒ 'c #C%0CL" , | z0z,0ljslbk0Rk V0PlB , J 02    $0,[L 0,0Z/J /+r/B/ڿj /Կ/ֿ򯾿*/ /K/篶详 篞ZK/+ᯘ" ᯐ|2+/nܯz ݯj /jگ\/^RկNrk/R/L"ү8ͯDk/6/&K˯/ȯb+ƯzƯ2.:+î ˺K컒˷r2K.ڻJK.Ի*쫴J뫳˯.K 멮ꋦ.Bꫤ.Bˣ2Kˡ苝.뛮Kz˗|Z˕l嫚.\ZK.\RKR:˓.L䫏J 6㋍<㋌.,+.&+ወK.Bͮ዁.lmms-1.1.3/data/samples/waveforms/fmsine.flac000066400000000000000000000122631247673406200212010ustar00rootroot00000000000000fLaC" =pp^'݃Mqz$,( reference libFLAC 1.2.1 20070917 rhgf4 ,EK=S18Ɣh@Hp.{3=)߯ vpIfa{BTNN(۷7/mj;.F_ άuê;kR~]S{3sVF~;44UW?Lǽ3N)zV oW^Nj uC8VpUf}W#04_u^ -#fB#B>>?E43`vMčz}4`O36v^ pY~{ܧVOE5W~*ݚYYڹ۴#?6nGxV*嘻T{W?oGvYV5jQ+_F^lNjOiE]~̎buMMi?3wiR2/GfFfv`YGk;ö+vE4Swh=U[UIGjM>v)ؕ#VS[3C4/?oB~WvYw.Gdj7#VUjUgky782_99:ߑ<ЮMlI.vV/Uz9U-W*L_Gdfo9#w+3'2#_=k/Ԋ=nKļIv=w$jW+34SU~['ߙ]i[=JY]>ߩ}-o곲s;E5[۽m4_̏YMUWy}w귒ym_$b^^VfO/Q'r;#32ȅW]Q]6zFfOE #S,ܮo鶊%l':ľW~%S\"|B].D_(edM!UOlmhA!էԚLI$"\D "d̑0HBĎ20Bꊰ|!XxB,:ȜxIqv*`BlE&Ğ<&LtIf |UqvI6P,:LѲ"6P " TB *p "D@P{  Xwo !8RE^dCPTA7>Yny[-6z'K~(6zm8J>lQL @lHLx&4m(:O]l܁,wA*C.bbf Q?/.J'awgR%YcWo,\ᗪ}ReGJk7BqMK7lV$bGTTV }(֒|ܼیx|p\~l#4Y4 lHSϖ">/!6Sy(t`D+g *#%J7:`ߖ3.*z(uo'̠ٚ IcH.lQ}I>m.s^mLӟBDG[n+D#"e W$D2@ɅehPҙ+INh*0/QM˄L8<Xb,f|Cf T<:4ɰ?vâ#.VmrC!aNʟJyJgϨ"b,Ei"XՌ4c%q[yy;qIf# VQ)n)/&U(Ux:2| MEJ#?nVcڴ(QӂsAujVh'oQU &,޴فC+IBcP>:[y(2 i4 *Y7 nEeM%Jue%R&hfud_Y¡`t5Ca!qlSQU匚6p/2!"a -h:pt8_'Vi$}݇WIUįrLiK.>OCPl&+nj4d2ܭzBI.e BNX20:0WZ*a3Ld@'*G-<|aS -o**n/!^.X㾖UTmJEe]VK cg "@ɇT8K6y:z2PرQH6hf]"S\+Ղ.gm37buyR@T(.S:% u&8#u)uĆĈK(&XZR| XTTC~^twY>C/BgFM;ChEL&A8 €$14ԮFl66.2Bԣ& u^WL 'Z&veb?i~Q7yuxåkHp.#,m%Tt PFpa0&82 4b#ΡOϨH l edRMBug2 a! 2q0d@˛rs ņҍ(uҳ|#UDXKvGFƊfM !UćBAP7$dre}9%VŇFq5;~$ Ae4ͼ1xyT\Qa剈bM6nX*aF6D,,REDuО&` FV̐"pRެcb lѡ..;I3AR+$5ԗ$\>X DutS%TYvt#eLՙ ` ÁpyVH~X!," /WQN;g1a D72AarT0dk7Jϓx".n68\h|h̩4K[L2>ieL>x]iGDO0ߣV6z@dhV]dRM." * Em$y[Xtc+}+OPti8TIBbEX-zJ%]-6&I7 ^k DC0(oW *X",l(U^2xT#.+'}Dq 'Si*4\W;&:%J$3'1ϻKo󥉰KK2hᰰt8*u?j}f&XI5YDXfkܭn Almms-1.1.3/data/samples/waveforms/fmsine2.flac000066400000000000000000000462641247673406200212730ustar00rootroot00000000000000fLaC"\ [pppElQWHFu( reference libFLAC 1.2.1 20070917 5 `xP4 B%J.2by$agraDrIs]SU4HZIDړط}r:4V=T@ǺQ=cHy1`С$%K!5F^]gĐ}Fjĩ=(LOzcYS(JH,LjjkHB]qqbT-[K0M4Msq, 1tZQ=[\&[ae0$(D !l[bY-Ĝ[# (SDK Z!%q&rq%G )}M,pʒBE.XIŲĸa{SH$Hj#ܾ蚜Xj(=3 $-[5=i Ug,sjO8>XIEsqj$A..,$@@48h$A!౅yƐqe(x@чYI=Qr1d/.*jѲ 9C'%ģPT{Af=yA Uʍ4ž tP S乽^ƫy*K%Ř$ġjbkT>xJ$-$Q.O\T%_Uu< i˪䩦Bjjsq& \Vg0hUu}q[>g7&JH{>Q5Wږ&iϦ Hb=ޢD 1u0n$N-腳b"/iƔ] ,ۉrѱ,]!A\y9x 0=[<]XJa(h$#Kƣbn7y*z!D?)} Rm1 E8YŢnxCL]e- H*SQ7 , i3T )~`.qQd` 8cmCZH<ն p< %F yFQC8|Z-R69-8~{ǩ9$(&j^z,mz^(<8$YGy! 0. K%%ġ57)q 0KCN|X'1s;F'>bAhjbuD 1al|Tڧ,i  !z/ jy50xnz&q3I_op1s}4(,a3˔kqllqX U 404rSɤ=xe14?06qJ턨녰SPjK G0`%E60O~}Fr (,PX s4%8DcRc@&h 8i6p[˼<*n5& A*'j ֔q_7yڧX4`$(<Д/kZ 8NKz?>] 0Ka5 % 0[C]&/xk s 8i.08<( NXA%7߻)}m,  VpkNpI/i5M%E]ijB BPx`,AWJa-omWŸ0z6vJT,@K?~baA,^p6m1-C0 q/OAhmjzJiG{RV4].}ٴa7?)iOOV@IQ';{v'5h-.exL c񸹔ͯ !w\4jO֒`zPjZ7kQm-j0yD$u-`@ k~  - ͭFԔ[[6^{\zl݄,3iH7/Wjڜ\?c`4-^jq0.$ QA}$)kbVԴKܵGnvQzL\$ , IOsܴ4#@i Zi iBF 8&kj,ѶUĜ4`8ۋ>ZaeL%w%B5Fp(,.ukP'l.m o7W%n+\:@X'N?elr4xyDLkWֶDN]IշI'Zj-:O+_k5ׁ)=Ӄp5A<. O( "%/|>J?^F/]p^%dI5@j&X^gxW͍^ j75:Bx'n,S[ߣR8'4U5nj[Vnu#6ehF,ܷ3HtvVmĜF|޷r#nիe{Lq'B]<7n[NhoG|v+rv;eH(]ʩݻ2+wn͎rm[2߫3"7g-TFdSWl( /3;>[E /p'9lܜ?WļؼݾHIGV@VvTn޿3;7QUrNdӹ] ]ٝ颉YG&`ڻN&~h\ ~즾K ԎEef&bGnuwEӘ|v鑋߆U|Խ^dO-~[zQ#+u]+_޳R+2q'7E6`"u~J[Gvy#7{fFoO(zݩ:_13p]zQynm6ݎ༊Wg=~3ʨ䍋ؼG幷uٻ~urݑ >܌Qnhz?v_?nOvdW}F,n،YpnfN?^ A>+Ÿ?~#_x;'dFT+wkωSQٱTfFWQ+5;Έ99fSX+=P{] {;z'pӸfO8 M=l>HAzqc_F[sh p$ƽE-, 8_zg`vJ Mm 8˶Q.w S?Nkq_{:Z/)}>Vwsj[}XwGy,y>/k{+ޝ.,sJJK\C Xz,[СNG}TʽЧ?ick[ѫJګ\ֶOk{U1^-sm.J;W7C4qsU^WRΕNjC~Sq[X_T5y/n]LmR$_\e2F&i_HU]&UMG"}2u/kM}+f:nms>5MN"^ʥS*e~o~鸄l3QQmHDW+no&DN>dS/ ̻]rl۝캪D+goۛ4uH;r/q\ I*N.K>tYmV]]{H[eUErpt'uMFdW陓MC57?FdSU[MܽgreR4H^NffG^eff fpno܈S]4SWzY9~dN|3<Db+ԭ ͼqm'Vro)׺Bzw}n nY׊[x)v,ŚOFx暼?o ;6lOxwb~'.4ڧ_wN{]Fɻ3'DN~КY4\CJ q(wg/7X+1%|EGmlw1Mch?,~lp@zB}qmlHH@_$5˭JJ#?cTImlMD_,"#jҞ޾ĔK*YOd$`H`&r2+4Lyf!d$Rٓy[X0eV{`h  oL *nu(QOuRB8!mJJ"IWSTʓTڑ֦\ڒc%!E6AS !U",Ҧ5D&8ƵnbܢQRj[Jm]t.KZՔS—!.԰ޫA*4 :jQI)N{XJJ[VP!RDMaT]1$KאI)52S[S%eARO5P0^QOȖ .( $jtJf,COyeh҄$bpc4 $aQ0 jM8JpF2kL5XYBZad[&c҅ r qS612 Xs$!&Lc4= hŤJ,k(A%k,R"c9I+ 0%^i%N0L J,jb( X 0%Ɯ4ǜQ&QA"qe)Hpc8,H0(bщL,I) R8$OX PDcOpQ ( YQ=sp)”)Q" PQEYoDZ"z$JXsqg 9qDY%x &)3) @ŚYDC jDA=!$G2Q 1IH1bYek5cW5ZO$ XQ,K9ĉ@!3%=+ yeZ$Ȑ=2H( ՋDqɖ )sil8!iN0 @k)l0QDӘi9"Z)LYR0JJ]Ze$BE"J`HiETOEӔ!F[aF,ǒTa$D:S!F4MTbb9%K[k ‰in$K HCiȐǔḢv A`Ea(F 0(P:PH"Lq ` `h T A`8!Z(x#GHBKDXV)@<#S(U12aBAM B$e)aKhsGQS8 H@ h 1JA *h)^t B rIB2CrcxR#y#:2BDfJt\wg2,T1" <H"xsyy$(ˁJJVԵm|6vỢM֭mEkmB]мO@["a}4I^|}t-$iA.ַKV-)om8[Km|CP&O `-Ӥ$}pn[O @Yx$Np'<`8Mu-mֿ&O2ɴ=rNz\-4K hx|  nnt[i8=)6^>ٻb& `%Pj O 0`N <ϮZ ax4Jaḽ~d O70';i 8-Ͷ P{ P/z-F  irl7ݮL WK=MI8J4r%N &58N&[Lq~>h=O Q'iCXL? ZJP$9mPc^l/_TLpp,KPAgxNAmΥ,↔%Pمcvahnzrnk.U 3mYy}2 f-ZA.z-8I{J$g'IbQ24c55*yF$.kQ,%IRmDL,UKg%ĔK wBmy |bܘ'+Ѽ-yh܍|$\8qc%n4anJ63{jP'$Q,YߓW6GJMD_]jBܚījb{e QcU~Q‬k D** aaba`d%e`b`!c$d!$(c%ffh*k)"ᠣk7lmms-1.1.3/data/samples/waveforms/halfsine.flac000066400000000000000000000135131247673406200215100ustar00rootroot00000000000000fLaC" pp%NJ zp>r( reference libFLAC 1.2.1 20070917 IBEZ4,1eI  %Ε;N  i΢ȇ",ir(htPDU$RJr(1'$q#34!" dH(X%HTg, Ac1Wc,Sd)PD8A$#bh\0 *Yf$!*8A%1a #$a!H$!$g21fB4SDiPhPH,DI!DXhh*ADfqI:(*TRSk9R0$wAV2,)I0CxpagI 4w)#))'yfC$"NXBl+ $)v."]HBx*T9)"5H+D$RԬF:ʌ1<8<Čx-f#T18r:FI2pA#B)b1 <*H3gR uXt:̶gs+ @N!"vg,BNHCghR3%yTGx,dž"Ѕh*d̒-NH¼1BBBd*eyNg$0"b2TYE;g< wb:Ht"بt)ҥYIZEÆ 2Dxv+ouUH*HF*ԬB{3g(CF5 [:J1=DiWAi;Y$Ys„% X*EB:]ʷB#,F*ʃuIf"H4yJӞ#ȶWb)#JXudkYD a*]$CNhQrJEI:`*dr,K:$F4Et9"Yʢ, B?*Eu*9WHurD4)4RX"q,,DY1becrYҎZ,*Ѝ1dF"UW$XQ5RGibYvL$SJK5 GV+iㅅEd4琅6(fY[+,(HGx!iYdsH$Qd! :벑jڬ{XG="^)Fk"噽HH#dS0đ^fjӒ(Q64qhCYDczQI!-9լZ^mJȋqb,S͎ܜ-hYEa=Ӎt4`H@4D.N>T]lJ7/).y YaT^L~V-0ғ,{Ƴm\!/>YŔK45 (qd- c,%G{ ,c湪޽c%KA@@[/rCkSfy5ɵ/"sT@ǔK>y99u:bIjyFش -Lչ&%Nl'-dJ68 g smj/qu_Bq<=J׳_h4{wӃCȷZ377xICkqh(7-l'H?YG{cLh}7O(iǹI_~ǔj7WiSBD7mZP?>%h|AeC-p󆸚ɻqs c N.>W'm*`zV$H@,(8$\$d`A_AFq8%E KiBj=O0 =\:JMji)A=ӆ~jiw-A1i? A4|pi@_ׯnpX$$j_ͦ}ln`= sWD%0ZĥDRW2YНn?^ Ѥ(L?6M%$04<֐ ]Z ajAL(KX(%Z$`,P.F/(hAc\M޵B޸]$NϦ 8Q@H4 rr8XdiX4c~8jA4  cv)]aB~ qxᴕfMa|awdi'n-fq$Z׺oYM'_`*wU%c=?umo<)5Iy@x3/^] }>SxO6o (LA.u;/~ۄwpYf Csp?m;nmd)cIQzi Ϧp|.[ o58hZ5Z`M Z/ qwm8N]4r&lI$PiߏѪ' 04PiO75=]hAx- N~\')Mu;/E֒ ] lϢir)0X&&xh hX h  xXhXhh,݇[h^˴bB7q al ͡Lה$?sy DDDDJB5<04stJJq6ѱQ4oTYĐGsQ7-ӽA= HᢆyĔhzGВ 9`R\z?QAxHJ=:iz8҆%M!CH{H4碚q=1y(DC4Hj&PѐIƑ}Diƺqs55s0YyƐz6\hz z?BT降B2Fm1-Y͆5GC5rAp445Csj琸cyGw DCyvCQ J4ax' ;J{SLEn ?\V뚈ލFz62 x5ӨB\MyD4Hlw]Oz xphA}J YMJ "2B! / ! ]00@"/^F?`c.?x `Ϻf6t>``ϕ\>T```ubF=`OOf>l=<``/~.\<`O &v4<)`NnyvE0 p\1ثt JQ'rt  g9zr0 0p 'ˋq p  cpPp gA/soJ) 0 !sn Q7^m} 0+sjlcVp fvkf &acip 0i\op 0fgoh-"W73 8 X#9P1U-3H 8S17EA2̌88SCK-2A 8X{M-;1 vxxsE52+ T`119=020?550R9E%/ XxɀK)_/0u7Q.} 8a]/- XȷQW=9-cerx/A), C@)M>l 89zn8Cyo>Xn հ`$#.P,*`@W[6sD4vX0 {@Sj ` A8!2E1?pc&ab <0 `! A=>80C].p` [&,9 "ffL_,9A_+uwp BLB@WOS ' WL !:+|B~ P+ '^0` ~2( n/!#8&Yd$xEI xGN0`ʁFl`B&\Xp C>B$R \ x!F?0ă\@fD=//z]^QPysK$x  7 ;w #s0GQaվ 8P~sS+9&*8-`x0`Cz p~&$ѴmU7F6h 25 l0J|@N1g@3%12 0 Hp g(Eꁉ|ad0<) _H`/V;4]@b` . *\xEajn8b G^H -W 2+I ڰ pEJS$xB@v\1JSUQ`(a !0 0Fnpk>LQ3M5\L$ % h `@8K1O!%HB.lGTF&"4p"c`%C >>Ӏz~X % `CCx HN` #8 6X `l DFՆ԰4knG,1DfF@ h8h7PyFZYp@ 0QA@tE% rr\ E@5idckkp@71SS0t% B@ FaF<P$P8P?4%5!Q7162d@`4  L&P'h@%̀<  cB!@N PCp6`!x BF3 =`=G8   \ 9;H 342Հ466( a _*0 3P33H xnP4 .0;h _ B` edxz"<QLLX@†…@ !22x@b}BS a@Bb  9Qa@.ۏ kX<X ËU(uˀ6 (42p8 C ?H"ŀ , h*(} 끨bZ e(CX.@``$C y (~@H60r A_0(a! S؟CN%0:@ 1ـ2p> @Sf@lC`g#5( `8 #j!j /T (1<` $% $\"9 AHN :LPm($@ 2p$pXD  u`(H4@ L' 0AۀB 82JC@q#%س 9š#WE؅9 JXt'q耘 q#8! |4HI iA] N $kh6: ,l٨7`2FߍȀB7FHq# B8q(#`0s(9 tx f: >LҀ;>j'cɠ.e/iPCǠ@$g0IG@ P ={@P50>\~4@0? A,@ @PH($@HPЂ(MDh`}( h Hh#h؀  pEG(H@HH@<@@IId@JJD@@\ @JxJPKK@@d LXL$@ ڄ@<@M(M$@|܄@<AA(MxN@@4@DO8O4@|  @ @DPPPT @4@<@QXQ @L@8QR0R:‘ J`h))`:—œ ^¢  D)D)Z FŸ BŸ**""ž Z ¤ ,*$*:&B"B«`(*+ FB jH++r ,*+± +$+B`+4+Z` » F+\+H++`BB ++`+, > 4++p `aa  Aac'PP^!`P=l%pBE ``ED^] 6E%^!^Ip,VU>E !bac"0VYPde$nqpgh/f!fPNUdaegaiP;B5f!jOgg  9 2 # $`hx - ,(     # *8 (  (`Hаhh  Ph@H  8𯐱 PH `P  xЯ( x ( pXWW$@hVWT@Lnl@WxW4@UU@ff@d VhV0VxVtae@,@8UV@VV4\g@<@UhU@l[]@LTY@\@xTHTt@,CE@t8H@48SS @|BD@9<@TSTD$00@'2@ @SSDD"#@ ,<@@RS"F,()‘ BB*(l( n6BBh((BJBB  $'' 6„nBv ''J &w|FwBv"0'd'jBiBl& D&& && kl `&d&b %%_`:%& %%`ZBTBVR`%L% q`VRZP%t%Z>QR SBT `$$^NBN6<$$R $,$"FAB@Z#### ?D "#  #D#RF45"#*8"">-.N "l"`X""`$&N ,!! . B  !$!*& jBB  & BP `8 t j6B N   $~? &᏾H'V>*ڏЀX  |hqcf \{x=`{x x=`:G>=: 4ˠG X# FdwHc:0wh ;r*b #N\tXZ:` t((.:j:/^9`b/pX1# >&Zqc hxQ)S &N &J*0Ih bAhH(# j܀X #j`_ȁ& 2Ga! CHh1  2`B(n! ``BHHJ  > 6 rn,lS : Jϥ> > >2,S *PS䠞 ͠O?=RRO-<bN<* >, "8 .;j .;* N; : 4蓢ZpS f \3 Bk9JNG9:NC9:@S ` FN82 nTݳxB@z 72  6 6 6Z سb 3[ B@[6i5"M;4` #4@LN 8 H? L3 L3r2L3Tɳ) * ʓ/ v t"Ǔ*L[1rNa1zI12 ;06/0 L0Z  R0 V/*K/" 6 . 4 Z`0N s*@H#ܚ>Nx"5( KPX ' PD8!9F䘑zgf6pʞDX()5FQtl y"E:PFiRQj y ,dP Qʊ!:-Q9'O\ % ~]#QR dD$1Jz; ,F<`0'⋧r:A(b8'[pM FV!V"N'b! ̩B~IlU9i&= #)(>ZzG "u8B63Hʕ82 '͚7Yfwi]c@sz e ^r$\zZA +s\(r̒"[ZJ?>q^O1@+kY5W\1ҟ aa )SɧCL!Ց(C&,Á lGCm9D@, t&hAt0f*ɉXcĄ- i |RGa[^9‰xʖm0!Ɨ!ya:L@eG L!(%ċ']6=ύ,X W@T B  aŽs)'$PqQ{ \;$L1p1A?4UR&epA  gfq j0ѳc; d11'Q-'$fQ tpg1 x3%q101 r0g>, qa2CXiA #4:l~I5t ?懀 @ @` ` ` ` !34;A3% +#4A  #!ARc{ ܽ@B I}#@@"HA!F}$=mB# D nD#/R!=E| @} d)?=^@Az *=?=M OoSz~xûޞ@g);?:?=Ȁ痷p)=<M Ut|ty{è^@l Y mXpyvtӣ]@fS˛ܞ%:::9 NJvoyl\ܜF(6;6:)ʹ M.`KqosCcPZ]@v %5% .M`Ohsjq3[\"756Mm. Aphm3kC(YV0'12m `Bikgl[CPFf@$1733!Ņ@6FV~jcgjwkfbnfF6{fk^#+SYZA塉٘tL LlL̾L`,LLL@̌ l `ȸж @Kl ʺ k쾾¼K`ĺĸLk¸¼k+ʰ*kྴĴK@Ķ+L+, ־+L @Լ ,Ծ Kk,μ k@ض jʤ ˫+@֮ j*`ڬ +Ҳ kȴ + jШ @̨ ƪ J* *ິ Jj@¤ ` K* J j JJ K)Ki j j* Ɋ K ` J) *I )ʉJ I* @ iJ UQQ,S1A0Rҁ A-94SB`!%)ғrJzOJLMI)9%<;")dtSê"(DPGL) A))- =&&DĤ򌚎:b(yDMHII!)!(9#&$4p⎘RQÂ:R2HnHIGH h!)6!'4@܌ђQb*Rn@PC (A5 3#$$4tĖђCZ B0dFEEG h!!.'"h"<ĈRRP*RdCALEHye0+"pPЂ: 0WFAEA yhqy . ""TT$ QPBYAB (M--!b!4$ PТ:4WCB@() '!,T(šꦐ1'"(h`&*lmms-1.1.3/data/samples/waveforms/lfo_trancegate_quarter.flac000066400000000000000000000142541247673406200244420ustar00rootroot00000000000000fLaC" ^pp%@0(ݓ_a( reference libFLAC 1.2.1 20070917 XSS"x  S=? ?OD?M"@>J`C)O`ӥ)bH SD):@@  ~ZUS-LUZdɕLdbCţR@!)i)JxO M?B?B!H @ D)ʪiLT0AeUUTb1kZSJ}:A LB!(Vehajeh0@-UUUUUUjLF*ɑŪULeTɕ`z`JD)zi?SS )@)!4!"!D"J>OC!@H" B! ")!@@ O B&&UVV2&UTɖ2UU@A! S~!OJx)D"!M>' iS)JSD" @@")醪1Lʪ2d&Uj֪Zִ"OӤBH A OJSpR!ҞOA!ᩑU-ZTajjd!"D4A! ZV2֙2UVA1Z Sҟ?~Ҟ?JA!@q S?@O!H4iCҚz@D"?@RH4RBA1iQVZUF N ҚSOSA!R!UkF&UUUVZT0Cb1k db!iUUi `L2F--iUUUUUTb1UkLi?D)JR! RҚR!A> x:S  D=))L S!ʫCa2ժd0UU2e:D:D4D"B!{ @H`@H @ @H@ (@4X@  @,h8@ @  @$X`@ ( @<0H0@`@$P`@0 @8`@ @p  "`@H @ $P @ Dx`@(0 @h$8@4X   (0 Hp @@ 0 @   @(0  Hp @ (0 DxP`@Dx`@P`@P`@$8@Hp h P`@  Hp  $8 4X@ Dx`@ (0$8`@ HphP`@ 4X@"<h "<P`@ P`@ h  @ @$8P  (0  h P`@Hp (0 (0P`@ Hp(0 @ Hp`@ (0 Hp ,Hp4XP  P`@ h Hp @ $8@  @(0 @$8@@ 2\h(0 (0 @T`@Hp4X`@ h $8 @,  Hp (0 @P`@ (0P`@ (0 @ (0(0 @hHp @ @  ,(0(0 ,h$8@ 4X@P @ P`@ (0 @ Hp@(0 @Hp P`@*L0@ (0 @0  P`@ `@ $8`@ $8@ P`@$8`@h@ h @ @@ $8   @@P`@ (0 Hp   4X(`@(0 P`@"<0 @ 4X@ @ @&Dx@ (0 @(0$8 @ $8 `@ P`@ $8P`@Hp @"<h ,Ilmms-1.1.3/data/samples/waveforms/lfo_trancegate_sawdecay_quarter.flac000066400000000000000000000146321247673406200263220ustar00rootroot00000000000000fLaC" pp%5g&˹܊ _( reference libFLAC 1.2.1 20070917 Y%S|ч=RXB-h<}w,ZHyhBUV]Ehb^@f7d=Dj`H(4q4L]dNj4a8h4@HW,kZŢcH,ЗqfBi raBN]*(yjPOW0hS y[RzrMTnqaС ʸS\%!%e˩cU{HSH$sT9^ūeKD! XPh`Q5[Q9qUo_-5}6q* { LR ! n$,ihC4h%!gۉ)uTl{$!!B{ h3QQ9pL{/XzQBuMirԖ4Lj.a):`Fz9Ę&d5RNl,a=I0X@ӗQ9YEXk*rmO#|?^NoG=f]D˨,Z#{zQz 3o&-( ~4E 92 F-TL~c +R(,8yiEca0Ӊryu9K o(JHobܜhCD͎J1d=Q R5^ūzfjI cHzso]J y(YɔzC+8HJ$N%ڏB{.$Cj-<ǐX/P$ǹlk.[ךCF 9pdzz궔h`Ё%'. h84DNO$B@ ȻB\h@h`Y褘, xJ{}(D6X]Hk6B`x@p, H |H@&< 2 F6z7'=g_\sJ$_]_\U%iDS\,0$P!hc4LT_N!}[hYYDc6IŔYHL{Ƴs%g 8BQY $d I˅55ShNr%תhͩit+oYJwAI&jVT"I~B*aF"rG8Jp`(#u%pB?2b)2>G3Ǒ}qT&J0L{ad\g%cؖ=XY r:o0X 5n%Ҳ><%hJ7pǡG[ƪmD[UXcz\T_]Z5ShOcL4Y<dz&T )9y5c-\Hc~CkACz e&`fMD{KBܴOiZ F45g 8`k*AYwbSE\0^OUq8JYAWgꊥF @>` x@P 3h"0Bp,#Pd`h`h :P d SBH,Z5 GiDibXB mMk!hR\RPCD'$z $š< *IC#%.$.4*q3krk*x̰! 8u}/{n,Al(F,yMJ5 AQ6JABi_˒.pydVM$};";BQr$L,ABkalxQĘޯDZ%̺FozT%ɒSY~Ab)5(Jz2Ot(0LաdBq 0h50ya 9SE^e\WxJȰemKP7i_WY1=ID,L\#.z㖌K 8DQf5JIc}U6ȢM]iDl|ɲ;`UL+O5.$S}2huY#9;J;S?/Q+RU_uW}7u2!ݑe2}w'Q3mr~53ۻ?/#9"UW%SeuH#m7Q}HIu2?TO̊n_Mvu5?'s3;q??MWe7vWf~rNb8nE^?!;_(ٿvG/tv^$L muFeVN#36HFؿ~ߦhKߢr;4H&UGG)ОUڳH͟*ԜWV̌ЍGǩdVviQsnȍ~ܟջ1~źjݑ ݃;t'i75Q4[*ߝكpvoR+oVț{-+j?|N~> O-'<ѠN Z 6 }IM ׫O֔[^?Wooq7pE<*]op{$¼oKE.X =ǦIj]X-?pg q4Ǡj Bncxը҆Sv3KM'ɭk8h\i 8Y&Zm Y/$߷}]X]f\udioi(r,Bؒ 0B 3(,  ʷ4L9-Q=⥛KK&YCEUԁ3R[2YvZ15>ҧ,)lVwQM*PBD$"" Bӭd!\W j9gdCH H! g:$+8A ! c(3HQ5ɅK]-QLZs.JC\Tk%.ŒرC")vf$Z, )-E9!!btS+),O)ƝۜS%ּzf:j qM1G!S1RI.5T(l8DRR1Oa(Iq4ØkKyɜ@)F\QD渁+T PQb$Z-Z)JTŘ[iIdÈ$"K-!Lm6zW'S3s7&dn'n'?dnﮉ۬t7Lu U'<}^͋s}^|J'[#2T܏S#v3#+n#"h_骪'C/wrF쯷vW_/ltUOzUn&`Pgr#WJ d`9wiߛl6o{,4ʨ hSGڳR<xuc7=ȝtjWpV |y&͍43°O̚lwN}6~ț-kkLԼm'^/ɱ<[djrʶD|OYpg#fte2Q%ѷbf{m@P56.lIlkc\a{T-Tm.+X4Rk|P$ 0$vؔ yJA'>t߼l,-MO7i5{ƈ 4nLTK_W7($`xph*\z6.'͡(g޼ıh޹Bٱ,$^_j hAQ'=jxYK94[:IyͱJIrU** bzUj$Xע |>%P"$V#d$đPR)"=b̷YVf+0hB1#XaĈt.EhC)N I S<0X1rk.]r EKIN*S(z L|Vؓ%JC ]̘"f*^6bi?j~гg|zz/cSJ&iM iX^ƶ~%GlɤC Q6,%n sO'expdD񴙷7;aٞ3i?h& d^ЀxP4Pݖ(/`xO3ߒy:K$Ʈ;i6m?GCh  ޛoSlhl*[KPltOOAN|-`h)% S 5XNh m84a;% c[YՒl&wSF( \ڣԸ4( L.O6 ~% q8M>`ӃLjT{M.m|e 0JtiC< qk>0YT-OP?i@sB] 0ysk`j ? a3C-?E0YBPi̦?pB"wh4Y{N$ ciQq)%Mn.-`q|6cRկ(,℄BHl}nKrڢKsRVvYz >%8P??kP? x|2auIyA"sK R aj\Jan&)ͯ>qIB0iǩ\n|Bciny=E'[堗Q.OA 6ACrnz&|Pe%u]k5%N\kPQJ Uho-GGǰAAAf 0%˯7 pEXiw a 8I oK ϙ[Il^~&YFA9Ma,j8 ru1s<{7м <bbn&vs 8x@I'5,PAA|<\ϕBj?6#о5,AOAa\[sAnjǹN]ZƎqlOmy1:45GN q..ghO\]]GR\iRmZWaScnp ]z E&o:}|euz&2RQQe56᠀X`qgYBǪ{bM |Oj,Q5M!gԡzh\{)5W9yx0xQ6p'Q%Ad]f2eD0= !}9܈< fzkH4QQXa8Q"KifO{%,yT)&r !/aC[?zbؾC $ YRH$ [qHi5lif$ǐ{J|hƎ -^a tڮ;<ǐ%HYI%'.< XkLSREIÛS.Q+5ZII*eIHhFKsY䕽K!uVC쎗Z r 2H "`,  b  &: N,n b8>"2 h&( `:X ) &`   b : : &.h` (6`>`x*h` (`&:28"Hr ! 2B8H *J B  RX J   r8 B"N h  b H`B RX   ` Bx`F"B(`.(bX.* B    8:` * j R 6h` `"v,~hZ JX X r z 2`2  >(`*v`"X:8 :x  928Rx b zx : *x R:*^h"X B JX*(bxH` `& h .`(nH`>((  j:x`(^`.:2h H`h4 `(6(`` b .H: zx bxJ8 JX jx nH `(&h .H` &`6`(>`8 jx 2XBh "(B8j8    Rx&h`"H hJ8 *hB  2   * jxzX  b8  ((b8f`( :8h2X*" )x H`h 2 * & B Jjx 282*.h :" (`"v`  (`* : Z (`6h  !" *H`&(  J( h h Zx` J:J( : b z8 x 0vH4NB8 @:`fbx `|` `t:/`|XNhrXd"(`W ȕ`"aÊ(ȶR<(dWShenQsj(&*nɀjr+–l(׎n.'!og >JT>_#s 'RhxK2T!dT'*tt>cV>@ڰClIKJ\@"=>JPKP@#'UzQh$r?@81uh,F ^b%W ^0V\pJ=(%|c`P3d_U@>,3WLE,w w @0ꨔ5P~<}{H( P0@ I@*I9np;)X  TZ -4cd~6@1@&$lmms-1.1.3/data/samples/waveforms/lfo_trancegate_triplet_half.flac000066400000000000000000000277001247673406200254340ustar00rootroot00000000000000fLaC"bNppKr~Bw}mP(( reference libFLAC 1.2.1 20070917 BFfS%'?IbD0fe!~ć(B?I?Ēq$ 0!C!!$?d4e!?I钔I?'LI Lē&='I?2zd$)I'ĒzffS! O)$?''IL'LI8!D2q(I>%3"B̒DID(I RH~:d ?2BHx!$LġBILĒzS(I1"B$)bP|JOJd)H~$BHS%'BPd 'IN&B$ !22}%2d"d"COIĈP:OIO2H!$?R d)$$$IOI$LҐҙB)H!BĒtI%"2C$t'L:A?"fIJI:d'Pt?0C!LHR!!B'2tJd='$C:O3'tLIBI)?$HJPI& q2$)0tHC!!OD RR$Hze$$ɤR A I BRi2iB$2I2 N$$?='I@@I$L"$N$4=3' 'ҙBH~&I:fO'8I& $$)LRBOI!(BJCJCҐI>D"d!A $I'Ґ'LC4JI?dBIL$!?2JI !IC2JIPI$%'IH%)C!zOҐ铤ŋ XB?")R S!?A@@ )!D1 ҚA@ => !JD)D4O?4 NCJD)A@"COCtOH!~BA!C< H D?OB0000 p p pP P00 P p0PP FL!.'\b10LU.&#d#-rb0Lp!5˖r,$d,F#k\#'K&RNZֹra #Y1tk.ZK\Zb2dZb5Q2rMpe\dֲkb0#V#&N\\+rk\5ˉ]Q1b5˪&LMY2rb2q2r::Y2u+&N&#&rdVLAa&#Z安1]UTdɓaj哪&L9dՈɬZɓp8DJReB2˔ 8:&L!XTrja a I&LFLq1\b5A\b0A ddkXF!'NZaZɭdKY9d :rk9k]''.ꉓ]TL+Kd&Lk"2tָF#',tk]TkXDb2d]'&rꉓ&0A'-X,FLFɓ'&h91]\9q5LFb9k-ɓ\],FLL:&tLꉮ&ָ9k5k'00PPP PPP0@)xBBO SҚS> xBR)H D:R!iLB OBzB!JR!eVɓ&LU21ZզF-UUq)H !JH!z? @@ ـx(H hH(8888(H8XXHHhHHh&#1&L9k9dL2d1XkXb0#rdZ kZz X5,Fdֵq5],ָ8(1Sb}dONJ28˜VYT=Rb8Y1C2a t5HU>VR;*x1LV]uDvX;.:tVP,#0A&N&#\Mq2k2q10b2d-k&#u.2k# !Y0Aֹkb5 ɭpNY:XC'Dh6ծCkZ-rb519d.G#SɬXʞk5eeeO"r>ɮkkZ &k&Dr&Cq1rֱC&r#'.\C'K2tr:Y:+'X! !˗Tk82k8 C&# &&#Zdb1NrLF#\LF#ZɈ.\\k&!\MY8G,F#dLRb0ɮZɓ-uK&#Z# q1LFq1kY2p\N`@Ɇ2q1C']KRd&LCb2dɓ Zֵ,G.&NZɭd85K&N&L5 \dZ].\kY2b5Zk@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ Rx?M)LZִZCaZC *i*e=)xCҟ CҞJRzC~!O O!LB=1 S?S N@zD>@S"B! O""UUUkZL`ZC U2eCA!LB!OOH4SH:})M) D4"D? A!B" AJt44>?S=  iCO hbZ֌F&Z1 *212)ӧ!J@R@B=8C@DOҟH ztSCS B@@ 0p000P0 00000   P\\LG\q1kF#'rk&2r1kUQ8F !.&L+b5LFd\q1k\+Z'˥!',!b2rMpVL&1kZֵ\dɈKu;,e1Hc++++.'#9e 5,!&0#',FNZX&#\b1b5\Mq5Mr1Mrꉈdɓ&2kZ \rֵdMk,F1Y51N\d-kd˗ L&k&L!KY5ֵ'ֲk5\#rk&Z\LFb8dY2dֺMuXCt#a !X!TLC#''1Q2kիa tЌG/ X,L!&LUDd1Mq5kdD d-k. NLDb0#&L5Ab8F2rֵ'.d˄dF#',TC',T18k&#\2 \LF#Z.Zb8ꉓ]Rb5&A-r2q5˖#'.\kk\&0NY:        `     ` `   `  N!O)JSO HBB!~ҟ OCO }>! ?H )JRH D)O4~ D @JOH D)H?)H M)O`ҟ) }= !Be*шUUUUV2&F!b:  iO@ iA)B!*AeS#S&UkUU2*+LC!iL!AH D)HAiҟ )H D?1x @? q !JOP !H @@)CH D4i &F#UF#F)Zd00P4 ~!A" )JSR"zD)kLedʵV -Zdʭ #@@ @ @@@@@@@$4$@ @@$$@ @@@ @@@$!] d嬜Ժ& `TGՕk5'#eeT˪r8U'T`@k'&MdAdd Fq0NL&LFɬFAq9q5dC0 b8FNZֱ9rɂ a']UUUU.8F#Zָ ɬtdɬrDrY2pC0ɮ&Z.Zk5k2uKdCVq2kY9b0-\2rkVNY5Xb9q10#]Q5&MtLFMq50#b51Cɓab5˖b55 G\Lrֲb1#r5\#b8jɮL!0&0AL! !-k].\FMb1!Ʉ2uRՄ1p'XhZb9b5\LF#˗.\LF#a +T#&a !0L:a !,F5&LR\#k9kd18!p!"e"YJR)e)K)e!XK]R.k&XI0A5k0!N& kI5c)ˬՔGeŚH)\q8Frb5\u,Fd,F9a FMrdb2q0NNY2r˜H8(H((hX84?D"@ R)JzSBO q @@)BJzb"ҚD)~!B!:AJt'{  '` (`  (       x   `(  (`(`(       8   HHH(   (h`(`H`h` `(`(`    `(  ( 8    (`H`(` `H     `h`(   h`(   XX"`   (` ( h  (  8    (`X   H ( x    8  H(  8   X`H` (     X     ( 8   X" 8   8 8 8 `H    ( H`   8 (  8 X  X   `` ( H`      hX   X (  `H ( `   (`H`H` `H`(`(`8      `(`` h`( ` x "   (`(  (`(`(  H` `   `h  `( (`  H`   (`  H   x   `  H    8     H` 8  H     `H `   X`  8  `@0@4@ ,$p@$p@$p@ D@0@ D@@@@@$p@@4@$p@P ,P@D@4@  @$p@L @0@0@  @$p@0@P ,0@$p@@ <P0@0@4@D@ P P0@P0@ 0@ D@$p@4@P @0@  ,@$p@ $p@@@P @$p@P<0@$p@P P  @0@ $p@$p@$p@  @  @P@@@@@  @$p@@@@ LP PLD@ 0@ P0@ @0@ @D@4@ ,@P0@4@ $p@P ,  @ 0@ $p@ P$p@ 0@$p@ < @ @4@$p@ @0@0@$p@$p@ ,  , @0@@$p@$p@@4@@$p@0@ P @ T0@$p@@@4@  @0@ 0@ P , @0@   @P @P  ,0@@P ,4@@PL$p@$p@$p@@0@P  @@P @ 4@4@ $p@ @P @4@ @\0@@D@ \LP$p@@0@D@4@D@4@@  @@0@$p@ P@D@ <@ @4@ , @P@  @@D@ 4@0@ P<P@ 0@ L0@ < ,P$p@0@ P0@0@$p@@@@@  ,P@$p@$p@  @ <P$p@$p@ $p@0@0@ P ,0@0@ @ P@0@0@ P ,P ,P 0@ P0@4@ $p@@ <P4@@$p@0@0@0@ @0@   , @0@ D@0@P ,P< @0@$p@$p@$p@ <P ,P @ P0@@ $p@@   @ @4@ $p@0@ < @4@ 4@ $p@P ,  @ , @@4@D@$p@ $p@0@0@@D@D@P0@P , $p@@4@ 4@0@4@ 0@ ,@ @ @0@$p@ P0@0@  P@4@ $p@@@D@D@ 0@$p@ 4@@{lmms-1.1.3/data/samples/waveforms/lfo_trancegate_triplet_half_2.flac000066400000000000000000000301651247673406200256540ustar00rootroot00000000000000fLaC"NppK _(\sSOZń( reference libFLAC 1.2.1 20070917 X3!0UUUVLF&ZUU1Z`D4S")D<  iJz@!?C=?JiD LB! ?OOҔ~!>~ B!>!D))P4)"A!!LB"=0"R!Ca2LUUUUi*ɖR!O?x"0ZLUVUUUS!F!ҟH"1H:|B b =4"@==?R :A! O1 iO UUiULUL2F(-LU O:S" " t@SJz M)Jzix xҘ @!|BOS4 D=)iHJ?US*d-UZ12F-F!HXX888888(hH88HhYN'O+)O5r9"]K !Zb1b1q `5b2u,FkՄ2k&kukZֵb0Aɮ&Mq5Ʉ0LICSJGMYHՕ>]f,5Ck&#] ZC',L!FN\#'UUDa GrɈKa G,-dK',9dC&kkh99k:\5DɮXr5d,FuKXF#\LFkK&#C# -r.ZY1LG-t LCkVLFa FMq5&#b:dY2trb5a9kZ# \!0#哖NY2ddɈ`&\#:#\&5a FZ,FMq5\`rK\b5&#Zd\2p&12pL0#VLL'R#W,dֹk\,2a 5tpGU\L8F0 a XFF11q2d,CVLFLkLFNA˗K\\&N\U F ֵkk\!db1a -f9ej쬬>):tp PP000PP0p p  ?H!!!!C?OLB! x??ҟҔ @B a1UiVF!ɓ+LUjJziO1 @@ C)J~@i ~!OTbLd0UUUUjZ,BR@?JxuTŪɓ(&Z#eUUF&P)R zii i4@@)?M )S) XD?!A!OM  SJxB! t5UZ2jUVLLLZ@B!ҔCB!i ӥ)@tx M?bJb =!)x ! O?)!P00 p p p0 p p 0P0 P00P0 KZRb2p!'R#ֺL"5&LFkXG-rֵk\XFLdLF#'2r.N\La2kN:ԸF2rb0MtLF&L2rɓ&Mq2d,&NXa ɓDɮ&#&Բrի'B0kNX0#\b5\LC\Եd`˥XbsX>;,e+.뮺dLK`@trUUTdb2ra ! FN&ɭY5a XtL&MdɈ \&#kq0 d02t9Y1b0A UD2rk&b0a G,#'R15&#&N'dZɮ`#i0A,G M&2rLF#\Mq1r哗,F0Akɭb9kLF#ZֵXFLF#d0Z&rK&AN\#Y0Ndɮt19t5Ğ2y+*}YLRC"ҟA! S:S))?C!B !D))!JD O@}>}1?<"qB!O "=?CS B SD?JD>!AA H D? #T0Zp@i)OOJ|B } "@)JpS!zS?"B 2ZeUU֌ZA="?J~ SO 8(H8(((8X((X8hh( 떹kMXC'+&NkZ :ɓC\Mrb5prk]R X99d'RNY5˖#&# r4p2uKb1b2kb9rָ$r:ֺ&K\Lbb51-rֹk b0LDTrb0Aq2uRɫ&NdɈLb1F#'-dq1b5kDɭq0AֲkZֵrq1kH:r8VQbSɮ>'#YH'U,Tpa F2da Fr&#'K&#<!&LFM]H=K&Nu+\N&#&dRNdN\&Mdɬ2`u,FԲp rɓ#dɫb8b2tL!0CRa u,Fd',!5?|A@| @@_/ ZMk&N\LRɓ#',1'eDvX:t#(KLSD8TYN$>]uqb58VR8;+.Xeeeek5H#p2dXG-r蘎b9uK.k TLK&N&kN\XtZ'.\r\kZH(8(H8(h88H)@B!駧ыS#j2eS Ab@R!OC AD J~D?))NA) "ڪʪ`UVUZ1 -LkU@SiBR |B!OH4B=? iH88 OO(C0LժF#L-Ui D"B!ӦS!!CJD" bB AOJSH H!1C?H@@?JA@Z֌Ca2jª1UUO))OC>!O)H"@1 D)O? AJ~@C iZZшZ1kZdbeVUZְҟD?4~! @@ )JJRD)JD OLBH x>!N?JxB? J~!)x?OJD 21jL`UUUUUULj@@"D> t !O AD"OjUTa21TbիF&Ldb1L@@)@'@"?@@)CN  B SEl Xb@"ҞC@!"B?? D4S  A!ҟ!J|B!R ~)? < @D"CHO>@~!>!D)zzx) --UZUUVZ1UPfF&F-U21LV֙jj " LC?> iD?OM?ᵩ(aUUUUZ&F#1"SҟB!)AB!D)BF&ZZb121 #)F-Vҟ4>?1 }4JOR!CHC?x)C z~)ҝ0?)  "ҟ  SS)1H D)OB?! "H?" ZCa !bZZVUZ A!CD?4@@"CM NOBLCHB!S0!O @  q R A zSPP p p P p P0P9kZkb9kL! k\kNXC&NX CpX8!b55 N2VX:r9Y'eO1LR95+&#&#k\Lj8Ck&L2d a FN9d˩db11Y8#VN&NZ2kX"2rdֱ5r,2dɮ˖ɓZRɄ5d&NTp82Mb1L!+`\MuTt5B1Zˉ#'.b519t1#',kY15 C]-uTr&CN&duK&Lk#dZdtVVTtVR9Ge:y&.],!\kZֵC#VMɓ]Q:Zɮd-XCK&Mq1Lֹq1\rk'T2da FdkkkKYKa pG˥ZC]TMXCkFq5ɬF\d&#dk#'\MtL5.b5\L!0 k ˄d哖N&ɮZF#&2k9kLLFdɭdUUDb9k.dɓb82jq5꥓ L!0Aa Y5T@@@@ @@@@@@@@ @@@@@@,@@@@@ @@@@@4$F!b1U1ZeiLH?)jh#bekZ֪ɖeeUiCb1UQZdePe@@=?=)?8{  '` x *X  `     (     (   (`  `h  `( `H         `H`(  ( 8        X` X`H   `(      `h     H` 8 "8 8 ( ` `        ( ` (8  ( (`X          8 (`(    `H   (   8 8 X   H   8  Xh` 8      H` H`  (  (`H`  ((      (` h` H` `h`  8  8   H8 ` (  ( `         ( 8 8  (      h` ` (H(    8      8  (  X (`(    X"8 (`h(  X8 (`h`H` h(  (` `   (` H  (H  8  (  x      h   ( x "8     ((` `H    ` h 0PD@T0@ 0@$p@@ 0@$p@@@0@ @4@P 0@ @P , @0@$p@ @P P$p@P ,@@ @  @ <P P @0@0@P< P$p@ 0@ < P$p@$p@ 4@@$p@P$p@ 0@  P @4@ <0@P   @<< @ P@0@4@P@@@< ,P0@@@0@  @ D@D@  @$p@ P@ ,P @4@ L L<P0@0@ PP @  @ @$p@$p@@ P0@4@  P P  @4@dp@ P$p@ 0@ @@$p@0@@4@P0@0@  ,L0@@0@PPP P@0@P @$p@@$p@4@< ,@ 0@@$p@ P@$p@$p@ @@@0@@@@  P$p@ 4@ $p@P @4@P @ ,@ @4@ 0@@ @  ,@$p@ 0@ 4@ 4@4@P P , @ P @0@P   , @P ,PL0@ T0@ @ P P @D@  @4@@ <P<@$p@ @$p@@$p@ @0@ 0@0@0@$p@  @P0@@$p@4@0@4@ P@ @L@\$p@ P0@D@  $p@P0@   ,0@$p@0@P0@P ,0@0@0@ P$p@  P@D@ @ @0@$p@ 4@4@0@$p@   @0@@0@$p@ P@$p@@0@ $p@ 0@  @@@$p@ $p@  ,0@0@4@$p@4@ , P$p@ $p@@@D@ @$p@0@  @ ,P @0@ 4@ P0@ $p@ @4@P , P @T0@T0@4@ P @D@ @0@ ,@$p@ @@  P$p@ 4@ $p@@@$p@  ,@D@0@ @0@ @0@ ,$p@4@ P@$p@$p@ @Blmms-1.1.3/data/samples/waveforms/lfo_trancegate_triplet_quarter.flac000066400000000000000000000070721247673406200262050ustar00rootroot00000000000000fLaC"BCpp%.hB'J/k( reference libFLAC 1.2.1 20070917 B3I}':Hfe2q$3'LtB BHOI2ixOLfd'IC$d)$:d铉C!H! dRIHDI%'!S$AtP ҒO&ILbD$'C!!>$&C%"":JdHRpBO'R„@IdNP&RD2ćIBI2tII)>B"R)8!'LHLII'LtҐIBHItBO?de$?C!pC!%2i8e!Iҙ$I=2~!')I$(I?$??OJ ''OdġBIġBIIC! R$D>?R&C3)$RiBC )$"PxI?2A~!iHitȄtdd:O$:LHI?H$d"d?I)0$H IIHCLe(d=)%""P'B$d?L3'IpC!% &$C ':N='Ґ!:OҐfOtġ&d:OI&BIBHDi$!"$ćeS$'$M"P'$ ! 2 2q"I?C"JOJdćĈa'M2iJ N 2iLL'HBHRD ?2!BI'8PS%2ze!~xOćJO 2~&I>zS2))?$!bD!&HBIOɦN'L̑!Rq$ɉBIOL$L2铥!'̑2?)?I~LȆILPIfO2q(d:N 'a d& D$" a'$?ĒzJOĈD !IH! t$IJC $2zR X !JzS A?)JR?CҞ B)A "pH)@?BD?)C ")JiR?=)Oi?jZ1 #V1jjUULшajUZeZ1 V֪ցRD8 @"CJf`        ` ``*`"` `     +\Mu&q1k,"8C\k dK1kXV#1TLɓVL!Xd哖Ma#b1CNY:b2q0#\L!LL$X&N\rXCˉ&MuHT쬤r?@iJR=?O!SH HCD:A!ӥ?Ґ%=0@ OOC) ~!?=?AH:D) iOD)SB@M O"OD"?SֵVa2eUUCakZ֭j<" ASD   D=?!O "H D>" x?B@=>! }0})OC!H~"HZֵhbeUUj*C LzzzS)A@ AOCOҝ)@AS=8C" >OA4D? 30 0P 0P0 0PPP P pPk&#LF00ZY5Zꪂ! &2tjɄ0#Za 3i{ jZ#'.PF#\哥&q1N&a Fk]K\Mrq1L!5宗,F&#b5VMuTkZL 0#UU,Fr-tRb5b2dq15Ld:dLFN'ka uUDɮ&MkY:XCC',F#b2rLLFq0#Vk5b51F#Z,kLָ2dCa k&N\dZdXj-b2q9u,2k&rdֹb19q2pFN ! #kɈɈ9k&r-q0A9b2ra FMq5k Cb2dq00#Y15#&L&MuUQ2b1FMq01rֵT9kY5`b5,FNCV#dkrdɓ'd&rɮ&u\NZZֵ\\#rԱC2trɓq8kZ`]&F#L!&N&FFFb1UrDTL!D0L9u.?hlmms-1.1.3/data/samples/waveforms/lfo_trancegate_whole.flac000066400000000000000000000557651247673406200241110ustar00rootroot00000000000000fLaC" Npp1B}Ա,R( reference libFLAC 1.2.1 20070917 X:dbɓ*&ZeF&Z2ŮVrKZ2NbQKNK 0-L !bC ɔdbզ]+Z## a22 &S!dɓSHai1L\)F-aɤŭ .)'bt$f:tӧG!LS YZt\8Y.Ц)KG!LS9'+]wO謭ɕ$]u +tr+tӣ[3Z]:9:ZNNK:]r@֙VF.L@^Z+LlL |LIt땕+9ߐ9"Htvj12bekF!jjӈ0F+F/Ha2B1kZ 2V`ʪ)*LL82u1 &Z2ɓ&L #ֵ*U\ؙLTʴbbZAC 0LrdF&VO%h+ZɐYYCSKNNYYS7KH8Ba &LL #2֦QaZYN`          `` ` $$@@(r:}S8‘*#*}$T>OSB4!jdՄ0#e.NZ1T]uIwO4C;+*Z˃&1CMq0,/ӗRՈL1MbZb G9bR:tGeX9"(§V#dey5e#&MIVFM%1RY)aD9nbN<'k+.}btRĦ;+*vVXʗ]xGۑ՗o(˜ğ]YRV2Ȥ)nkՔHAxbCXbӲxAC;*}! rb8!Ʉ2de184'T^LQjGȤvJʞDVTTnR8eӀ H( H P0pP  p 00p+Ntr9$X)1rt]tq g$QvG"LSxCS+B,#I" #ZZea &LUUW#'!LtuI%NIu1MtVV1F.LbeLZ*֬2e2dɓ&^C 0LLM#+XU2ִ0UVLSTLj0 'F+LC -21r `hbɓ&LZeŕEeeiG%.t:}5[K5 S/#dbrd `F#eVLZ)[以:ZT/nf9#Eh:+tVVVVk)Eeg"Ne`-S&Uha (@Zdb.VUʴbekV0kQaL /&F&Po#+Z `Al&L2rLZ1i#L2dbF&VŮL$a2F-M2  S)-LZWVAZ*dɓEjdL2C HarF(02@hk94 @$4$$XX( (XX( H(h  yr4b4Fa b8M].&N\L! Mk:}dOҲSeO)֢V]1C6d`@&L2ka F#\a LFL9W,dՈCr81tT:1F2e'#OuI, 1LQ uҲee XQeee#5˷VXbt;)SNG#]v쬺7#ӥ:t,[$E)]9"ҧNʝ'e#)*}YLQNuj}*}SDʜ4VTE(„k5,Քb$N%*ZʙZVQb+,#`?     `  ` `&&   " `"   ` ğnNttr]:tZ83tVp1bզ]+ZC L Z1F&Z \Zա#Z0F&VS&F!%n#Zttg"S]$HVVӠ}4I$Lq:IwEenYN1LS9:KUV^S `ZM#+S&P1kVB8].NK)]ue1YRvXG#'.nHCb*},8NM)q欤tT쬺;.HbvR9'e_I++(+)!<՗M:v]xo" Ȥ}RtXM+)bO5eO&FVXb)Y.}'K4ɥevXbK btTA]j9:EbYHSG'Eni'G#YY[uV2b2L0֙ #eWZkLe0 Lj,L*d0L21j!&VMiZkŭh)`+0i&Qar婋NeoB\SK%#9:[et83[)'Nئ8]ӤUL2e2F+hS#21jddėI'BVG$tYrtjtVpH!Va8j-LVMZ@ @ @ @ @ @@,@44@@ $ @,@ @ $@ @<@ HHhHxx!t),#RY*xG#NE'OYYD'e1D:yeIbtte1R]aF+,eNGO}+)2Ԏ!VSҲO e'찏jʖV]c+.ZG9Q<#'#v9}YS;)/NVQ !zɈ2j0pC'$jܮd.G1LTJG1uKjGN>#s1fNdF[/y5TZr b1MtLŬҷvV#n4}vTAT;9b]YHr9G*ZS+,ek+,e#9I:vR><¢FTVRC+,e#)ˬ'ֲR;.1YH 0tʞ2uee۲RI,>ݕ]Sꖲr.qńvTGL}uQKSTt2)7(R܎A'O<1[!b(eOge<±;*tybHr9k)OuӲK G}tE#+,e1r*ZʟKy@@ @@ @44@@ @@4d4@ @@@@@4$@<@,@$$h02eZd˖212bi F-LL(`VUha &U21j*]9-G'N. cV]r]'KBrG'IXrY+9beW-teLYLR8uOS;*IB);*Nb>+ a;*v9O5aLX]SLS'#O##Tt>܎bX,egoHCֲhCa YxC+b5j+Fre1D:[>jkuT(#A}q b'e>Cʝ>JG۠vXNG#|"R+++*teoRvTTKu#r:}c)J2(ȹC+,N$T쬩LVTO+)'KSDTVVXʟX8enGNXb(¦S2()  X]nG#bs>IbtK K#uRYvJʞ},NNK Q1F-rLNL#ee1L4҅%vXG1u' bIH}iaBGO#c+,:v]uO]fEҤr>܎#,]++zbbՔ1SSVTeI@ @,@L@,4D4$@@4$hXx8X8H(88h( 12S#jS&ZփhF-UC ˑZ9"何Y[r]ЦB8Z-U2M#.kLL2dbeLS&LjS#QbikLF' b#ei&VbZdd0j#&ViŨ #A /*BVtӣZtN aF%&VF))Zխ2ejbC0F.LS 2CZɓ#M&F-yS.C0LAeʭ4\re@ZdbjĊ%9EnK:Yrx"c2eVZ2Q@5IZ12e0ŪeU/-VLV\,QUkF#R1Z2ɗZ`@00LkVҌCa .LTɩUZdW  Ur12C V!RYV9 wN\rI$X C Zdbdɓ&LZeZ@D444448HXh(( hxX8Xx888 }!br+.1bf>jʜCq!bӲ.-#k*e#t\ENGeNG#]tʝkՕ'GIHvR:xkM'eIYHNRb4zF&Mk&\y80Cyyv(‘i-NEr>EeQˮeґLS!G#ԏ1DʖKv+.nGTarkpHIS'1H)2ӋDR;+*te1HK)?e꜏L]g9].ݕ;)CYtVVT鷬tZVTJʖqH)T쩔GOeKD&ݕ:v\X.;s1HӋK"v:vS2TT:eeҧ#ӲeNP    p p p P0 P0 00Pp 0P -C.K7I$HRcbZk)Zqa2թŨb jգ&S(aLbeikZ1DզVkkZ1&P@L-VAi2ֵF.Lh0Z]jN1V,N:Eg#K]rkYZ\!rKt8Ha21iVVkLLF&LCaa !rbdɕVF#W&Z0LZbbȬt謬)'EkӢNkG Y2L2i-5bdɐe2re\%!)Lq.Ktt],:+Y[t0Tɓ&ZZ&S/.M US&C֫L0UɕUkd!%en2+$]wEeoMg'IutSEiЦ8:NZrtv8$:9 Cq:t+]'IӧBS9'p  P0PP0P00p 0PPP `  [K'Nbtҧo)G#{9QHt  XZfJjʗI$!R9ޑSbeAvVR;,ڳӑC}$TG#)&]YYt9X1c)3SnTe}*y*Zʝ>Tqb5NbӧNGO6qgI;+)@9kVL!y2dɉժL!;s#]n˷eI躑R)nbYLR<]SR9!u'OӑV]DC)OeZGeOO)0si7eIeՕTMLSqO>Eӧ-Nˮ[VR;,PLYeeҠX eR&LFk pG&jɬ!r91D;*vT~eN[*ZL51 -119XCVLA0NֲɗV#'b5dԱ `&N":Z˥NGJ1unuv]7e &XbuNˑSĜLQ]YHnN` ` ``       @ @@,@,@ @DD$$4@@$$ |ZH!bד&ZjLVAL1x]> aF)%Z'KBr\:VF#beZeF&VZdbiU `S-rыLZLHS]wEbr].tZtC\1:YQkZ9gDr+Y.`  &     ``` `*  ,@@ @,@TTYx!)1zdb8CZC/&&RHjbӲ9X&r:}SVX-՗kZ AiHv]S-IӑSbV'”G#SRG}]Sٲ9.;,#Eȩ敖xY"vTr>SVTt8RTRR;.K*NbYRvVR: |G1S)vX9Z-!YLPl;.EO1Ix@RuR01pi1L1LG!}SH쬤s'OVVV],.g9R,)ʝ9C(˜+*vT"YeҘTk*tӑV]ON쬬:}H1Rt !uDry-e*}71Hs/1[jGe+^baS뮭gK:y#]SGeۑ9ʟYEOH쬬]ZʈvV]VVQ5fC-er~b:x-8ANʝnʟJ9#YvVVY@@ $4$@44@L@,$$$8(HH(xXXxX8 UZeC !Zi #0!1Z:EeiwNIu{9..] aFV be.\ &V0k\Zes++\.t:t9NBZqmwKY++] btӢS9:Nk@deL2eũZ-y2F&G$s]rI2E39G"KQYZ+xq bq:Eg"IСTb#i`1i-2eWVttr+yȩ!)NNY] &шbbeikZei+F&ZՅkP`kV &QS+Z0F/#ALb12ֵhűb굥&LtɕZ1S#`)1W.F#20+F!a&F.LTbdŠ )aTɕV\ !-Lb][8N"YQXZrBjъ֭2ji0ArC -9$4@,@l@@D$Xx8hh(HhhH8x8(8x(˜R.bT9YLTR9n˨Ꝕާe#)NIYHN&S0 GeTTٮbQ!VX]+(*^;)br;.9ʜG۲S;.2#vXVTka)n˥z},Or;.s#MYRVVVVT<1LTVVR;)"R>ݕ>On]5b(gNa &jֹE.Ndɤ8RT!jDa ,2ex^LZX:vS:v]dޑvY$#( R:teO&KʞFTt2r9b9>;,tۧGNHk(KɓdW5`FTjbNˤx˪v]%eIRʜGe>Tr;x5YG1[(„-Քen-fgr>kQR:tvT:vQIxG1tfH;,#G1Hی) QGoRnBqbvRY2eɓQɖִ֣bdZ1 !0UɐsHh(hpP 0P p p P p p p p&E(AR91Hs"e;+)GNG##r9˥NG#GNʓC9R;*ttnG#t]fuSYtr(Uu&dɈa !@a I2q1a[Ե9#y+.#Ov.XG /XV'eO!}$g#If쬬r9#YHj}YH !N!CvXʓe 25kɤj`Vq2k& J1ujt>Eۑ:O'(YYD8ˆv]7'# 'Oes>%OՔCr;)%VQ!c)GeeTӉt#찎r<#T񕕕>Mu]uҧ# S5#eeIr>]#)A9GX!:r8eNʞjXG1L"(er>Y5ۧ#$v]*sCHSQkN:ZC.D9it:QT:]<՗JbvX:]n!b}}Kv]bvR9!9Xb].p 0PPPP Pp  PP  )9.XV+]'G!r9:I!Ls[(IqLq:KEnIЦVt4t122d0.2ɑ&L2dɉ,֢nG"rKt:+]YX)KxNKװ+KEg'KG%S*ebX! #beZ孈aF#kLGKZKYZtV+t!MUka2Z@C0ZddʆN ִ0@ihbū21LF&VTeiV8r 3]u].tVtɓ&S&PVhbLզZ1Zeiyi(biL21[-iZ12jb ruMtKIȬ.tV(S+EcVIt]%I%׵&!*Zdb&WKF#h&+S#jKS-Lh14`b0!0Z1212F+^V2eiZ12d#eLZhb&LAdbe2MH+9JrtttrEiG"r+pʙ .^F.1 ֺɖ#aLJ0FL2e2b1 /&])HXQ0MIj-ɔb 1L.F&PY2#Z1Z120 MJhH0F&Vj2eV@^VtY:K)IwIfg$VVrP0iF-ZիZeLգh:Lajd&Uh0#*+L%ъdb<@Zi2eS&S#ɔĊIsfV-EiӥX]ttt85r+NQNK5߷]t8K\SCeeoIuӥӥYZbQ0F+Y\rqV i ̶!2ha /#+ZL(0.UPuL21L#&CŪ1Vrj 2eF##VʩF S&Pq hS9NNӣq$ Xr].tG!LtV+*ebZ+YN)\VӥӢ'YZK2ʴdɑɓ&&VW2Z1B%Kg#ӡLP8뜅4rKP,0A &P0/!Qֹ jKZL)g%ӧHȭ̭qN$b2db1F)C dLAei.benhSt++9t:N9.R*g 2")%G!eȬvatk+9>:t;yI땊g$VG$ӢN:+9 g#V%+t+O謩vYZ[G!LS]% 421F-i0ZխkCZVLlCa +^Cej&Z{ u@ $P@\$X@X@  (p  X`@Lp 8@ ("H`@&TX@ X@,h0`@$X`@0 ,h0 (0@P`@"L0 @ (p @ 6tx`@ `@ @ p "(0  (P@ P`@ (`@,hp@\ ,(0@ $0  .dX`@4X`@,h$0 (   0 @<p $8(0 T@ 8P`@h Dx@4x@ 0  Hp @h @$8@ @  h ,`@ $8 ,h Hp h  Hp "<p  dP  *Lp (0@$8`h ,h  (0  48`@h ,P @DxP`@ 48P`@P`@(0`@4X ,hp (0 8@"<hp,P  4X ,  h $8P`@Hp$8@ Hp  ,$8P`@4XP  @ h (`@ H0 4X`@ 4X`@$8@ P`@0 "< @,(P@$ $8`@ 4X`@ @ .Dx@ @ 0 @Dx@ @*\H@ 4X@ $8 @&d,0  P *L04X  (0"< $0 h P`@(0 Hp  (0 @ (0@,h @ 0   4X@.DxP 8P ,@  @(0 dP`@0  Hp  ,h @$8h P`@ 4X@  (0@,0Dx`@"<$8P`@ @ $@Dx`2\Hp @ `@2\p@   "<0 "<Hp@Dx@ $8@  (0  0 4XP`@4X4X@`(`DxP "<h(0 T` 2\`@ 4XP`@ 6T@ P`@ P (0  0*LHp @h "< (p @ h @2\0 (lmms-1.1.3/data/samples/waveforms/lfo_trancegate_whole_2.flac000066400000000000000000000560521247673406200243200ustar00rootroot00000000000000fLaC" NppygT8}{]( reference libFLAC 1.2.1 20070917 XRH+t.Ek)k3V .12*֭ZC իVL0hb1ZFTVQ #QaiLũ-kMKCaj\ZզU]wG"NYZ9Eg%rKL)b2LLTS#15U2^F&L2e``&T1 ]!hũLtNQbiבPu2ejԴʧ2e21QaLZֵVF-21 +Z11$ӥ\t1LY[1Mu]B2F#S&C b2ըa1jũKN,u(a.].ttt:@#$bb1 I-2db2V*Uu/#jd12jbeC Vbe y +B]utr9I$[)$X++trZda#!թ#` r12dUW9"ӣZtr9%$ȭ:9 i @$@@<@@4@ @,@@ @4@ @4$@L@,@@@8X 88Htt9GnGxGe9 >K*}aeґS}u:t)TOQTȝ>g1vk+.(eԎeO)!KG1SeN)tvTe2})R;^˷eNݟK Gdr:tVTAJ#)bR8§8ˆqbSҤGN-KR>;zʝY2Xތ)Ile#SrJGN!*xJˣ8`G1H[ QESKb}xTHr>&` ` `` &`"`` ` ``` ` ` `  S%r].:+9KR)"AB1LC0Cbזɖj֙rV(S9:tttVV.X+BQOR+p.LF-\kULrd1 !V-u0 j++++tӧ!Mӥ j֙F)0S!2V2щ0 aVhS+ZekZb12iVF&:]I$eg"Eek+N#P`UZ1rֵkZ֭jш#VZeɗ, I`bkLaj,OtVq>$S].VI땺G!V+O7Iӥt)%a9.:9,ӡTEcq%tkCP brjɖ20VZZ,LrS&ULU2F!ԌF թՠ`C AjLL1QEn>Цry6IsZN֥tPV jCikak` +Ubr µ.&Zr2 B8\:*ktӧN$r9>Ir੖N-0F-F-ZkWJ-r1 )],Eiӣ4["Lq,҆ZL21jɮRL ˂ɖTLɑCe21UiB\V.Vr+t.V++EcS+tr9:Y:)b1jִ#*ֵ2@0LbC0CbN+F!0M.F.Zֻ&S#Z-jыakVF.Zh6L0LrLZ2e2bRN#9EeoS]ttr+]ӥt|1F#02dɗ*dɓ.LZaikZ H0L0&S.L-VF 0թbHŭ2L0ɔ1rNYZ.Eek땕+++++EeeAJHt+98] b9%.)NEitVV>C 7I.]u$& !֦S#xZִVC,V.F 2i-jF+VLQa )t%+4[K.'S+]EV++NG"V)$謬ҋtEeI&MwG'ȭ$1)QNR̭3:Eg"Irtq a+[7kӣN.̭[VVr+trtNnu]Brtt(˵vVYXQ9-KIDVr]:9 aFbT''eZX)IuNLr}vtӧEg'I:9Is)b9Lu& &ZdF&VTɋW-jdbdbC2V-hbkLb14 r2 ţ+L4bjeVL# F]I21 jL&C-CaaF+F&VLLLL0A1U &# XJnVr9"]9>2tSI:tIwEkt{NG%Ȼ99PLr1yUibe2QT `   "`@,@@ @@ @,@,@@,@@4$@ @@,@,@4D4@<R>X˫*xGNGr:].T>&X9ҧ#vXIST˥e#SAxGeaL]SۧO)&•aLVtgNʞ2een]%eOHqjv+KR9:NNnqr 7IuN0)2K\t&ʴ0LɕZ2TɔCaZea2LZe! jea ZEn,KwKHk7KekP)UkF#-2 &L21jdb1kZZd /KPխCbɑ ֵZыVVjVkLF-L !b12FZ0C +UF#&LbC ɆLF-ZխF-ZkZ֚LL6ԽR-FSIS&F#˗œ-21 #0Q&VZdɖ2Ca22db1AejeQaAիLZ a !birLL+5N'NB:+tiu뮡Q(a 0V\L01C0S/-^-j!JjdҙryN`&  . . `  . &   @ @@,@@@(:L !,t(oS+!FaYbxEO5*ZG1D;,ND8k.9]u;+ YYYYSR<3LS!T>Yer;+)]uYbr8Œ*x; tʟK& HI;,N]n=#89ާ:xʗvT;*Nʓ90L" !u>܏9ޑt9bSH'ȬJGґ;,O'Qe:vR9j޲Dbt#ȝG#t+zʞ'i89]7MG1Yf'ҧf]`YYSNGeґ;,1F5XeNot1HvX"f}fJG1SLVV]bt0v]txG#eK*soSe"VTY+)#ee1HNG#KSuOeAk&>mttr:tvVXb!Ȭ,I enGeeҲ.ݕ>]jvTSe#TYSf>b 0vT+*xbN``````" ` ` ` @ @@ @@ @@@4$@,@L@IAxLɖ`r2֙LFZdbaL&L˓-jeS&dbCLyje2գ`0UF-Z\"+]$؝KtVSG%tS 1MtVp X&*ъd\0FR2CB)I[3+ttZ:Eg$Vr]7\k7Nk"ZZɕ3tV+B+9R9n'G%V].rt.VV]>aF!M.VVVqZB[r+}Nk[Ӡ'NIӥӣKY仡c+t(EUUW  VZ) ahb1 !bbeVLlMAkVkLpP1jdb1jbe،Z֭F#dbLVȭtV.r9'EnӢ]LStt\S9:Œq.Ӣ:֢I[Eekr+tfȬvȭt ٵK3:9:G!Vt8Keh"t>KZ+9K%%N:+9 a~G$[KKTX)ӧH8h 9 g":tIf.%bR[IrLTdɐ`a &Q#e-21F/&LS&F!VZ4F*L(5F&OщH0yjd0S#&F)eNNYӤV8YZ'Jf+t1 -Ubԙ2Ae21 #2dɄULŨa Mdhbei.VtN\\t3YYSU!MLL1 &Tɑ0L2˕2e2Eek:++t+t9:t}5kXE7K9 eenb}ӡLVV8HbeL21LLdbeTɓ+Abji 2וUjZi2d,Ze `Aш)Ŧ\Z2S&ZPkLF&LT#VC V0  VZ֭\ZZիVb1 `LLkVF#ɓ(b婑F-[db -Z bQ0LkVCŦF-rTS#-jkVjBekL5LZ-h2 0L`C<jhZթLL-i12+\rqjde4Zщ-iZe*dbrCLkQĴ0L].tEek3Y++.Ei+9.ZtֵL(He#@eZ]rӴr].YȭtL2kZԦQ 0`Z1k\Z+L[tVY.2IZ땕Т3\8:]$V)+t:trYtQ5ttaF)nEn'ӵ,N0!TыZ1yjZխ Bt+KK]%Kt9C1F&ZAbֵu-je\KHSGDVVVVaF)tIӥKAFr+9.),t:KD$4$@@$$@L@ @$@4 @@ @<@,HHx QkQ!HBb,OeKR;.;.ݗo-k&(ɗdɫi5CY2kb ka Gq0rЌO\MvY;tVT-ILR>E)o5VSYD:yrsVet:Oeee'#N˷eot]NbiޘaD:e#n1@i  XU;)'TR;,OHee+,NbNGoDNGS=Ҳ+.KHQvTt*NVLG,qZ!ֲbjdk&15Vq|8FUq1| 1mCs"r;+}H\b*}de1['KsYNGe#tiR]pp P00 p      ``    )hɐ 0`S#ŨŪшūS-шa221 #щ-218F&^d0Vɥ2V, H˔ɓ# bZeC b2ekZ*V2122e2L28LjeiJdbC (Rtr+]%tVVttVr1LVV:Y$A]j4S++++b\S9ELjhוF!1jըbdbՠ -V2L2֦F!&V-h\aF(0M  ʪy KWp5NBpIfV9jt,!L%ӡLq%\tVV'KSK g#8B-20ZS!LZA1 `F*щt-.]qL7NB)KLS]:t:p2dUj&L2LLZ֭hRNt+Ytr9'NEL++ [dVVV btVS9:\V2֦ZɔWKLF-t8X(( p0 PP 0 p 0 PPPP  P VQʝ2kOOD9x1t9bjvTVe4TbsGe]s+.Xn!ɸr;.'e7OvIPx#bt2wKYb}kTxMXJG+*Oۈq1r.Xʝ9C}"..GeԋSN9e#)#vײtIN˄bNFR;++*[}1YuN%Ee#A;*yYۑQ]G)!9$@$@@@ @ $$$$$4@$TtD@ @@@ @<@\@\@<@ {Bt{+9 g#%Iu]$N&r+I'N/g#ȭu,Ent謭{tF- !ZC kb.0@`#0S-ZtVVVV:tԵ"Nen)SF)u*Y9ZtVKM9>mjLC #-rшa \80LU2F!0sIk(ba !beF.L2e\LZb2LUttNg"KSr5o̢iwEbEeehegeDrtG"`2db1jɑZhdi0b0#HԺ.L()K+++t+tXNG%̬;N3jt:]ttV;8utA+Ei)".Ӥ+9:d˓#VC `\L^@S&LItY[L(IttVKN3tCj0kLA4Z2C C ZhN`"`      "``$4D4$@ sCkzG#H+:}&!nqb++O$tnbҢaaCꓧeeeKSGO5O۲NJGr;*eeTeʞvVR:t+*tHvQ欣 #'eetaBGe#GKD8#R9'Ҙ(²uҧeXG1Rr9'#QFԹe0'&LɈՓ]DɫCaN*`&   ``&F .  @@,@@@ @@ @ @@,@<@<@@YLF)a2щ-LVi&\LIQVr9KN\E`2ej+C kLU2b +F&F  2eZիF+F.VZ12dkL!щj12Z!+]wK5ӥG'NK39:EoN12e2dɓ#L2F(0U2r˓,+UbLb2 /&V&LS,2\kZb12ִ0QbLF&d kCS!0JֵZhbd+VV:}5,G#YZ9#ZeiYRvpbզVkZ#bF)(aū\Brx:}N%G"K\LUUS&S&\S ˔+'IZwEkQYVV>fV:+Eg%++]wN1L$X)G%kZCpr+t뮻S:9"8eK"]%YL&Zɓ&MKZ֌@0j      <@$@<@,@@<@<@,@ D4Dd4@@ @@ @,@L@8a8 +++)NʞDӧ:x]t#q (²SVR90*te#s}#qާO51L]+*},NާeN;|SZ0Arj F]D |GONb1RVIua.܎0}#8'r:vQ#S;.-#Rb',N'J";*soNˑS#VR81YuNG FFMt#'\'J^H@`VNTGɬL+,NާO QK.tvTp*b4C5dd-t^NYLi0 ɬ&R,,ʘQ8Ji+VeNQ US+G PC BI%r9..b'G"詊nӠ X5ULi!-iɕF!b-YXrYBt1rtKStc1 &-L4b(0^F-ZօkS=nZt89].]uӣSb a2eLkhɗW2 0Z1UkZL2ae֪h0F#F aaE2AikbխVL21rZje XrKKBtNEk5$eg$` ``     ```` `"` `@@$@,@L@\ "sG1D8 G1D;+)HtDV b5ikCb ɬ5LBT9#Lv]aX0#Xʞ2r>ҊSC)٥e#vR,EQe1LT'#ğJo"r>T#LQ#>k5I2q-fc+,"TJb(1[bc)'O5@de#&L5ZMX x`@!'#4YYtXʝKD81HJRxQetTtNb]C.ZL؍i" ɤb5ԱC&MrbeoYvGI$OO5'T9 N!qbıM+++*v&)LR9NvT溥k*Y+)GO˜p[b+,eSn}.EORvs,eeG1Rɻ*}Yfr:}YSӧ!4Ӊ&CLxCY2dµb2a Fkk&Yd2Ȭ3})t;++.J=I2dɪb8aY2kjɬa Uk-$]YYtgYi+)]S)aD>nG6, X^jb)5eNb'e1HҥˬeeAIu}deR-.' b,N˥L@@@,@$4@ @@ @@,@L@<@<@@,@,@ @$DTD$@@DT$ubZ #Jъ+V#+VbզF*ъdb1j1je2e2da t+*n]dEnSG!LVVrI.pY1LF&V #1+ HJI.St+9G'KtNt):Pɕ-5-5-Z1yk2Y8.LLLbrk#F(&&QV1LL21jTbi2L r.XVY+[G""t:IuV.)VVwEeaFg%S+ YY:I'N+]ӧI'N'IЦ"KA+]'EkSLIwHg%[ C L2-kZד#Z- &&LLbֵh2LT˓*d#0@ZVZɐYj1NLZj0e-&QLZщ#UM!0212eS#&F/\`` ` `` ` ` ``"  . &@ @@ @@ @4Y;zG1s8˜t6>-LG,LCZNY:XpCdMX!]-vT:vy+*Z&Xe;zGRp>MwbtQ.)R}Cq1fR9bu0xgH).kLQi+)>Eeer>r< 1HR9!9;)XY0>aLVVTf})ʟTse#2#Y$N:t>LS˥e1SĖIu+,܎!!SV,RkEk\%»:tt8tV.ȬVVtrt \ #jщ&LLC bk StVV)iwNrrtV1L+ r9 a땺NN.G Iu>r9tr9-HtEbQ!L,.SA9Eh)CSY!M}+t謩SY"☦ӥӥq eei$E7NBNIwHTXVLt+ { u@:\*Lp`@,h@0 H0`@ 4P @$0   P @ ( (0 (0 X`"\p 8 8@ L P@H`@ h0 ,hp DX`@ (0"l  <p  ( $8@&T8P @ 4P 4x @(P`@ 8@"H`@P  (`@Dx`@P  8`BLp @(p H04Xt@ Hp @"<4X@$p$8P ,Hp 4X`@ 2\Hp *LH0`@ 4X@(0  "<(0 @0 0,@ 80X :l @ 4X`@(p P @ Hp@h , &4XP @ @4xP`@ .$8P  "< `@  `@,Hp @ 4X@  H @<(`@ Dx`@ Hp "<(0 $8P`@ $8@ P  h  h @.4X Hp @ h 0 P`@&$8@*LHp @ Hp,Hp Hp @DxP`@(p  4x@$p4X`@ &48  ,h @ h@ $8@ T@$  @*\hp  Hp Hp @!>P`@ (   $X@h   ,(0 @ H  (P@0@ Hp Hp ,@d`@ &0 8@ h *L0Dx`@ (0  Hp  H 4X`@   T@$8P 4X`@ P`@ $8 @&Dx`@ 4XP`@ "< 0@ (`@*L  dP`@ HP`@ H`@4X`@ 4XH@&d`@*LH@Dx@ &4XP`@ `@,Hp @ P`@`@&T`@ $8 `@ T@6dP  "<Hp@ `@ 4X`@p  $X@ $8@ 80 @ $8 4XP`@ ,(0 (p 8@ `@ @d`@2\p ,(0Olmms-1.1.3/data/samples/waveforms/modsqr.flac000066400000000000000000000303441247673406200212250ustar00rootroot00000000000000fLaC":pp6*C'YpxaP( reference libFLAC 1.2.1 20070917 S ,w_֦_?Ehr vcR.09EG"?"D$&1È@0L4`@8iPWdTf9(:z s8c8) ÑISڽOUYgw\ Ӑ]c[6%Ud~%qYWAS$lFKؓ>vJBPT\X /#0vl7vAt"H4MiQ Li<#FP5t*#iJ%3j=%O[_"dO."PPjĎ7^gN΋ D㒱N5q0L$>?30-xEq)Hܲ"b4G0/v͒jOc$TC.8@#dN 8$$ dD$*.\T u-ͼ_#N"jiDΪҞ^/p̽N"vJN~cq+MS9pjiS75H-M0s㽎FM͜UG#]Ǭ0_aLj 42taClѲPL 4m&V:iR{CaNUq QIxf; Ԅ:s3Jl R+ql4H\Bcc"BbG 4HI#QvZF:M4c5.珴Z)vzR'zcWVa rhL`pАb獉6$A3Q R1'kX b8ocq.6ujYtbunѐOf[uQ,3G .daAHR- N#Z{1oPu~r^1"'LO&r28Oi-^*4kb'Hɻwvk%GP< l-$).(B >d߉+g=-n:{!ns\X~asK &IѤH̸U<}%g'%n_֌nC?ܮ'[Yl$hзJzf~e)u2(hq6H6R)# VnhWOa%^5;MzFd|8IJK?HrȸPEA :6Bn-L"$3 WKϙe[b0Dk Qģ](/]ɴEI$@yRHxbחiTRŊիӥ[UǼ-!4Y.qA+\ǬZjoN|g2"i/9R٠mr!dtG)Qh|Y$\"HΩ"Dޓf$n?or*5Dٖ;tW,^e(0I ؅W[#UFY!kt63wrO]:ۿh#Tm#@r 6_i3DE CJbJ!rQKD@KM,SˑtG"/8FW-BL  "%mfzHxMx|:g2׶s='+=Y*f(ЊӭJ]RhKi-29x>5L㙯Wҵe:t:!L 1YiJz2ErT:_}2HxPU!: n ^k̈14ZF PD=aiY':#'-'b \< ?IX L3MW\S@ca>I)S)|'ɞ[}VJ=ZS"$شV . hNtAϐO]"gndp(`;_~QT,iuHQVUx0Rws!r[9-G'֠HPK8xB ,ҞI 0*\ p^/S*^e t*0gGK fef _@ܙq1,4gm@5A) +iEIƈJZY#ocz_#kA&8Vv5+|e&h -G"p6E+U-+[:<떊POWVT!Q# ]_]Z]U]PX1Mn͑-Y',/|nOgh^* JEBz!qIF#dF! Z2vЕ;WSFjLt)`1G@Sws3bTfN]RUcfɞB|`z67eNjL7r"Ftfٺvp!:-aţ' otF%' QOUnY׃[I~%-$ 3)m+mt19mSτ=VQȢĊUvHV"#u-/"[\N6 %B)XA #ɉ1x#/is:C2\aPLU1Z}ɝB_l%##m<_PܥAyBb4_Uʑ;m#.nڬXj+(T&ܫ(?*5tjD% %ʅ DE;2CR^rPN)Ijh ,a@?|1m2tNC#}`S" ZU;ﯽ>ݰ_h:kM[8m>(Q!.!`~aK3FQ1FWx+7T>ӥ%jIғc\w!ɑcK2H^L \+ |1eoLDNI%ەgҤ]5lF~* ;}f%TĂQR \nCB?N쀯C1藢%#l'Ш+MeD"bTaA4h1d돟Gg Wz"56Ci@V G赿$+ S2Fdb'd&\1\㴕t_' 3-OKȄѿI!S4q޼ K]2{BmY1Yg#IDS tՌ[/U|` ̒%&bR'%Ee9h+ qafoX6G_BPL,+n/~j9an 'hVTzddg~ tI`E4o 䢙4%4/ҟWNW_N _~3.1J)@ uGls3k&~g%2dV lb_Ȉ_!A%S yzLnGwDA9`Rx1 Ҩvs#qlfEl*y}όq@Y@BHȢ /dƹLwj;4\3q1O];|fS=*!([A_F(5$ 2.n!{%T"`p90'Tm /`ϒ"'1B] _nPUAz^HvTH+yKt%iWO4XWi'Ѹd?7e[9GE;(c7+&clLJP3D*^@FD݆7]ZHAzthܒZ|ynXnDW9NQZnԲ?$)4vc-1Gnn׬tp0ץNFpӺ=0kD'+N,sD"Jք{%TԘDbpV*?'ɒ+`Is_ͣW&- {*aZ_QcJo~+UoT}QYʌD.XѰÝ!5N+ؿLzPF˕u"h*hk]ḯn_ \!ƬF 7=cmR /J\̦U$EU^avBSʓ S;CNspu En}; Rib}bDVs z,_K::+&1ZI%qȱiHG"Zx50{t%Ͻ;MT*B0' LeJز5|;pw%3]Jx=VHL^G .:@GȄGI &F@ٕs[AaC׃逦َee&ą,h id jjTa&V42J X,oYπ `px/BHIX@- PdjL@= 5ʀ-@-lD5*}p|"3 " 3!wJvp*`+ Bf9h1z HlU۠ @? B @>4^@Pb&XAF)4`bq& ACpa%dzDR`ŅcAXtBL]5YWod J#AҠJ-!XLr,7(zN0;e\CYɢN!yhRhao\5YZ9=&/9=*3p~'\V`Z τ gxVP܀`+.@ v/A_uAgLD}HM\M†> %YL3ud_IBZZH 46"E#J&zE'.jRHOR+,1-ƞ[ d8O5ͺT斺SQ.UΤ>Y3Li*~zd,c\OcW"ؚb N{5TJ@VlRd/8D>m<Ɇ>k4u|CkJڕ8މr~mSwQ"/aTI< +S%g\W7|gv) }Ho+ڴn}Z7P4 W_7%"7&͒PN F.BꚒ[֜5&V$ji{cuݪw߼i'YX\"0CP@j#ik$r]ՆR XZXeR7brwp>]X(b i{CV ` BD $!AFExE,2HIp /aYZ$Yf,R⋄I&4T4؄HHJZ2pecnMnA9C1y&|$&5Ӻ쭇 7w[D|n?WIA1yp%EZ86AT/aF#+JFqVɁSLI5/26Ut+UEK2fdAOo1iQXo5AsIa%,Qo,IdMDT!Y#?Bq,.^MD`aiď@!qd(E{lqsFV*dHp؆pMVKlM`&5V 0I2b$* jV4eahwI6vW~Eor{m 'F *L$:4*R|Y  4DX,T)*cRhF0כLY J:nX9(RIP U"/Z~ [U͆g1Ռ]7ߍio;@OQ*Ł ]4IƍY@(-JJҖ̊66U6L0`ߗu~<8ľS |ڣ!UF&&V̼oo`EtH_b76볒*R)-I`q&=W4Fd&#auS/v5H F?!C!Es'VIHt4 &qBD}kI UMBy τot?ulBa"#, $8   ^=^AȀ#ݨ >!si1c O&x\ad8O]&8tt/WzyM ]sn|sʟ| I -wg5_1 ^^eSLd,E$E"fR5C>JkҴĤE5ϯ~l lGxf_W(fVʾ?s|9X %䕜j(I) lD_!o` F%PΒڍ~K"gL(&u^F0BȽZޜr8#R%eHIDH}L=@SBRTɲل]GF dr_x'si-+Yʞ)^ď4.@(DlC EאYB$+.T#^fi{d*UT(:I 0o, HM^Hmw/DǦm{*UQY[uNO~<΂;]yNW6\D *<ЋFPV؍QU[c7'$oIҳ߻0,,:$jIj!c8B1J՛gJs$.$dxи١׆D gߖ=nʒu]4JxG1RiJ2JyKvOk^sP\K8J_iճem\ M1@x|Z`ؙ XTI-RYu3a;JmRjSXv 8 |XhMYFsMa;e 6 v\&`odeЏ"h] h+`=/_&:U 6}xYz(f4CVQIx:lyz1s!'bKDqBgbXGx;CWDx}>efЋB`H. A! 6KZ+i5|So:I.[-Q13 D(0  ,˟+.:yYk6PfM;B8hz  너ЫBʿVuw_m[c{?qZ]L@lmOՊmߓ1vFz=XEdMXEirocDӍuIb{eK!T 0WetQ¼ʶXDB1{oMLTsA!1c"eKA҆OUX-Զcf9`}R}/jӼFXv$1(Y@T= IdPo;7/ l[oH F(Dž)4HspN\5 ăQjRzJi^ u䥡k7kSIDBq< D},59'dMip +.5"~Dv< ("br$)hrW TX4̀츟}hrXZɏ~IY7Q=萬ϓ'U !IhZ3FaVHCwL4jư襧钬J9 `| B`> $h P%̌^5,=E*On!IAMJE|N^dVDb rȭk$8[2Q5G,N[3P̸0΀٣*nFhP70C[/ "n"?CJJ7\tG7 Dn];Bp56od⩪2Hh|JDBEi9JB0-:+:j҉c5Ά!bmX- Z;&4HtFۻb%y/dv.-x~|ͅ;Cfސ="GuW쥳؝tײ:r^#pf '$j`Rd'SfbXnH| C R5 i %.cPV|%!i(='* zo ɋ łt#hb2G>ZsW]/u3E]nmTR2`&KR^>-䲭-Y$=Q mUWI6YUT7dNL vţ/Fz쮩duc3|- cB׉No;<]3{/^?E=Ӥ\Ii,)觃 / k?pzP~lVI!@B(Oed؄ٸVMfK H'vRekcr(FHH+LMeIQ&^[&).%MU t$ B Ա4=XC~LZAXMBUU#ŧMHo]5Q=/i%Uң6'ŕ/+6xLV=A{8H"u6Yz6=ʙa$}fуF>LDs k'Xi--.4A(7$(y'3Ԗ'1,b3Q^ώG-Ĉ(HȗXaB\a% 1uū 1h *Vd5tE %ĜJٶ@,NJb-5 9}ObQZ5gѴ c]Q(Yf]VjIģa t,hoE=WQV5rsYK%W 20h{Ϥ<3iOs]`ɩK$c)jYD|kCܶmH{%%BP91UhR,JLe$p$0YŜK/Rz(sѮ< i + )훮y 4CQuZ Z\$Qn{Q. GJSX&uhOiV,[?Ŏ bЗ-E%K%RH4Q=S9}ycܶ,HM0уE734A(ıl ,a8!ceEnk?Xms  K?3ԕ$F z+ٲXCӇ`!@ "P  hLU(CL,ɎJ$ag0IWNTMT{:I <@5RUqG˪,Db"j*Gy蘊zA$|vHL!,ZUvǐFz4btJRz/<J6y*GūP 1J}!&J8CL)RkB"r4Bdy!0Ƣ& 48~WYW(huhsQ6$(<0XPhp/\Kcczye<%brJ$ܘa$Jj"c5(K40y=3*i Vۍl)h[IO!}Č8-yj*b,AxcJ^fBd%iLj%KU(\U.eŊiMUM=KYI oLsDG $!hƜN8 +,Ƣ5nNj_L{j;c[Գ )ivcQ1,4pDPcFFL{.rQ.fۉ00BL45T$g?ↄ aㆌ%b+\IƘE4M0H{=ZpEq)5r޾$E4(, CETJ45aO0l&HNO%W5Sh%W=<@U4*{ ))5IR\ !.4S.z,Qaars//(x]sח8x($ǐmTkyELF\0i bUQZN48hQQBy Y y˅'zsb\8c1Z,9mDž]dH{K9^$ ~kj0җ([4GlܼƜ[ؖ%*J/5r3l$A5 5q&=S9S}I!h-0H<@ j<Evۉ"Va 1WWڶQ% 褘iӟpH(-[qlRQK(E]TͪIFbg!$=bQ4`/QBQ9qZrr/5Q<KWK X.n^XFuF7j>f5˭iF8Cjy\[ sn5ĸ S[5Q<҂BHѲًQ{ !z 8yƣgi}ql~A& 5ɺj$qja.<3J (YJ5ƐN}'jQe 0YE7KXO'@ Sqn  )IƠ?-&)MqQA_YǣVX%%KN %OpAf>'& (_A3K^=mp^5 y?8?=,` cqy(yO,TK Sj`$ \OkK`Yf 8,{ Ơ%L/˸jSbw (IBN-{ m' (JKJO 1EIB5 ߷;;i@A.Q3-*=O7-̽EvK-GmmPH.ŧ Qt\6`Ƹywl=FS &vK=Oam6}0MĦ)n> } S2kQ7mA<$ q&{N 8]jwݴ? Qt۵w>?8{5WɦF$iT]m F'PM` a;zKqk7< Cero6^lMO$ a;/@Jvl/woA[ ݒ&vc[׮oK]>[<@pkimho|̉84 gIA>*nwu;&uLi(6i>LM(4|NqoIK佃زH lmms-1.1.3/data/samples/waveforms/w2_addsyn.flac000066400000000000000000000175141247673406200216160ustar00rootroot00000000000000fLaC" pp% ǵRMO( reference libFLAC 1.2.1 20070917 wMzLi} sѪMQ ntV|[CsSv&B;9L܋v.ƶvBJGҖr:< lBtV\fTZTVʯJNwAzΊl iDB>7J;k~zlPr5Pc6L="'$vxFJh~W~^^Jz"X-MЈMv"ţbL(dr L'L/`\ R5L JQ كBM%a57.&cv+"e[>A;yVq;_,!dgz*77D6¨ġNъ Uk5 ^6 QoƼZ&APl86y{$BeyH  PޣƂ#UΘ.i/.ffέKY񎚤J"bwD鯊iDb"1UźuMt3*nу [+:xTpDE!+g IVa6u9R|͂Z/Dy/ Daa`4lXL F֝R46aq?a£"ņBAP؃.m90>$|#D &Imbbv~'$#" D$O3-|h> 8™a g:(_ɬʸΥXLPlXG\"XɇlNMR&h٪ć*xH2)~" &ia!tK4//#l'&G2nxwo;lk*qi9$̩WJk@qQt@dhdp&<Ш%mdXV4l|VL ;Wl *~u٤#>'6YF2FDK+GH;Z[(U<:ͨ8\:"ѱ2]IWlYw} "fDž'Hìnd |scCbDP}Ў%9Bv)ߓY&I28ꋜ2$L`"$- uA4}PYTXdA4+BfDq,Da$5S  9<$\)jYE]QzAۉ} M]LAUcm|!TxDí6Aպk.Ҫ.tjoJ2K)}AhN.e:Y׈>0&Y:b+8m zS<.<2 EoKc8E)כAwaVAULQu7HtKmVWLFb>3N"%u=t^~E ͐}դb| 3j^u$Ib "S S-VTnЄ?ᑀx: O!۰2?U^F :HL&@:~RG:2=fIS8%F+]hT[BrcFYFnzdA3jZdOwSV(CֻoŲRDV%\բ:6J1˜.9_["PDI,DLL< cNt0*c } ©.ª++K\H Н!<}VL & ܫS8ã1nPeyT8;.h,Pڈ HxDxdV]MȐ6(|8uU>XT,#D Ei:0>z}VE 2čzBU+6YYR 8}x+͂旊ΐmM <\"ŅD$U4ɤ:iJqwh$KIɼCn"yCm(0ʥP*bk" uK˱tXEF JN.^ּ9P*iwYj\~ (E+%}ꊒ2$& ] :h"/~ }n2tz(/~:IX,L%.Q+)4S3CXE~&n2 ,DfΠߴ(lIERyȔ5 47hd]jԘqYbl!Q.y bVE W"A^]nK2fAQ8&qS8|@كchE dž gO Rp5ef8]h' #nj B'. lDH3ߕ͔.hM] W"p\`u}Yt(\ER7TPd@PaR$ϸM LIַT]|ӄҢ W6?*)}%RmUBcB![tguaU«QWaV$EaRFM$^6Z GeEG>yWA/wAJW/Xw%A$iJo,=AZU'!+g-CkYU7HIDҭ/ f?+*ⶵRܩe`@:.>/oѮ/lHVeu\nO^PIS^UFH> rIlrary)}^T ćFK2\^(@"ZL:,6=u%M 0D`2 !~@Ȱ H葷Jgҭ}irw/ %.O2x2(|ϡxLhU̩ 2iHɂ.+8JQqE\G>&DBǝ4m(:8|.v+&fD֏uTVu%0q+w "Xjea@b q#-"cGzjn.(}b"׻#Jhء D_dBFPn~jU3§_b .dž/g*$uwMGc0/P̰BAA6imgLw+#|`hא))i*髗 +hhX: N<=4"$sM"k4Ԁ!:Y||2Z H<\1iiUX 5$}$Pc)3vhabD60V 7n_ǩiqh{|\[&YyfX@TNx1ZlF_->kw_(F*>Ae+mzIߵ9LQ+XSWtQ j'$+ވ8 j9PJ-T'(a6RI!}}DP#׋,D$ 3-ugyNT7jmD]}dD!utC2[VTV+!ڙэYO Қg!ѳJ!D$. 7W gǙkAU7Kl`TJs+*>AZyT$]O0 V(vEnTJ(6Y,2 'ϼtPEn>A?"$6C͸̓&_ɁV|H\x蠙-vk>n^A4vξ񱀈@m/mqeJ>Y}Nj" K Hv2ӦƄZTEN |p}$'>.¾ m^u`dJaէ Z*Au唛(Tk6pdxtpdH. OͰݴaT$Hʩ. ?̮2͢D ꙤgI>hMt24D.*3YחUcG>A(%eM>a(dPt`G(Υ8իG#狖6x6(u#qYB*А| ,dHdXTh.> yD$(6YԫR-/2XEyxc.6Łd &Y!AR{u.08Ӌ]AV$QʹDXdHGT̥қ(l *P\,& [AcGX>XTh\PLXT.BKfЮ#׋^ >6e- ] VD;6o|->*?6XO+>5F>hW=^lj&t,#BePO^OUi{Oaו!+󼭗[2D C&فq% xPȠA1G;G}Nb$~fI'j_(P>0R^}I׊.`J>y'*~PG]aJt 犵uFI$iNTDƌä(\pIT+p YFD.pDH6Q L˦%9a6?B2P.C9J(d/ +7!FNЧm)I p.y9*azq4 .Iճ K>eVUd20:<.$l BmQ8léoȡRNoьq?WY~xm#n.KҗVP}t ێ"ApP܍oK 2 .8*a|Y".=M}Ze%ԓcGdWy4tPږE P\g9ShnVRcud|GDfÀ0 Uפ!J1^^.Y}W4tbFڊeƅ;:Iq]hQAء4*  " F >`çJ덱ZscCbm#F2qASM[Ķ)XLh'N A^"<2<&g/.a$LV~UҏREE*hɣfF):IFU:GDE FMݢft7Q>C0dHd C#j{`a1!1aSӈa.h&E TLdh2>cKi&+&@[#L^,e &gg\/A`d!2 :4](]1ZB3\*YX{Ү6>GJ2xu*2H\0wՂBй/>h萙 2$|KgAK<'^MREeTи,Mt)fєLȼtiG ʼQ47 Gk#D0UE0DSحMPuYكK,QXaW &%2Y9b$|H(6Y3xd@颤cuyc#ݥe%T<Ω≒"zHPާ[0{ (U60Db(qG*4rkv*7ۂ\XEhspkݯ5kF}Zc]j1%W*B|&澛oO,Yme)E#t)گ"~ZIB\"k{_fXeWŎy4'̇9dЧRqG·D8ƛk p%UtlWf9#ʋS%w]6dQ- x޿rqh_߶SM_4$>V@>~U:LГ%dFZͫ0bM+ |ƅMKx3ۚJxa,h ʫ{_t?}d(iO(Su@AV^ ֿ ɱe@DVnWVGwX_FDk{9Jipux0!̷#*/j\hA6<iM&D80ӂ r#ȏ h@ Ya5i sYB*Dz`Dk.iލz/֛"{dI)ĕF]mM",j9(/gtMjjc%xkїẏ4X)֧R2ng^D(ү+sS%Q˻H%Г i5+ԏTOzǕؖ5NΨxcVdi"W׶iCucF.ջRF ,Ȱ_fxR֧bL7ǹ>XiDJLh3 ~^g~L64rA 29ED0ϊmցTYQdAJ\;].=eLޙO=)@>^[uWs9ے| W>[qWTYRc߯΅4)X,昛dӊL[mن ,֏bD"Ze%R&Ћ DyP ƃ2wʁ4QeR;s[[Z}y580:lCjTO9I M*v(̋*}볨kDG@j,YPJZПRi:Db@$X"̗"(]ɆB5!(QeG:p_^tXfOfeMlma͟&}weMdxĕ^TTÞ80ϋ-hSLrw8p@ er]gG"|h2_ɷFVLǻkrˉ ͽS֜FSA$L !h26F@CP ,@`1l8<0@ 'C9a$@@Xlmms-1.1.3/data/samples/waveforms/w2_angrysaw.flac000066400000000000000000000403611247673406200221630ustar00rootroot00000000000000fLaC" Vpp%)nyUч]izQ( reference libFLAC 1.2.1 20070917 74OY5r#vfݧdÊeivI-nү eqz:)66rf>k> e XW7O8#Ct]5*t'+hl?:MT+o0FuE6wr%R@ӫ&J䟬t>L]LyQaXߢuW5H+ZNxHPGRmRzVsH2+dlYhd1| ’9 8\ë?'aZB42INt4O#\N"]Ռg- 9)i5R_>Ŕt C! R>d2/Hq5[LOw5$.KlJ Q^#ܟ,$Ӈ'IZrBEW"gA;Lx C21p (n*^rOz:gtulnM|n:T ɸ8-,Z6plRI=BcyuQLĔr؀*Md"XH-lA S_cZ6..m7@ZD֮Skc!w֍$3/.iV~&= Y.À 3.̣7jD^?e*œu2BG >ii/)I.R삛j萶*ܛ[O/5ii*@+Y~2}rTJeFK݋QZ!̽l3_!)?f=0r1[=d 5\s^j^<ŷl-<ǂvh|i hӀ0X:r^B/-ę4 [W!퉪r+"="zJ Q~퀲_u62W.*f-| ``j Fl.cE\zkbRL0#>Te6fUǑ@80NSX8WE&@j-ʂCՐQֽ8i2C@|b'm(*2)2yf]pl]owsIlT|4 Y@T#@nR?o9!,'>17dwt-ż{Up\kK%#r˪au.oùHNB]V 4X$; gR˭}qY ϶3yF{:eNU_C: Ig*(;_9F~=z턊9 Ek7~(IJ? yb஻TmA3KEc(3|Et0;HteAzuxChh>E$zQ1Pg!rkRF(D@\޲sza@gA:HqRf(?5jY p,P$:-dG'`+,6 'YeݩDA:p-de)0`g}=d)wY: đUK$-(CER}ߢHTX,J;LOe"3 -ON:QaAuPSˈn,brNqDCAf|Rr *D,\o~^R,j5$8U@*30֓S4PqaPPEHIp͜/L$~1bLG0޴zg؝ewhS[3i֖cR{C!^\&IVedÍ26W E҅̋_ԴA}OP2 9~f qh;Elz灆^Qc!N rfn^ȉ`_ٹ ̆!dn"5y2hy-h\Q! c7C"",Vݲ1v,Drҩ \FZ+͜%(OˑlLbS{RHw]"qlVoy Y%Dә*՗A7Q0̇s50>bsO`Wx|kZȿrNoZ"Jl'-Pϗ̚aSէ"bM؀/pQ`8A_p2(!A~ʀ<.@HO>`4cw" B m \!}n2mhw v#AL80aa.$r0& ~G dUVp +88J^\$:@ceJCN@ĝILְE㐉%7Ytؖ;"4J@}&-i;L~/M]hH}jm1Wcgq~sV.6fP8Y]Iv!DD c܃U*\َ!BN:'\ &ߩGc 2h0¾y ;&Ny)_"#\z;v}_+2f& 36B}@i}_ 'K?Gn&T 4K jye?iʼnO)^HmyGRHRτRYa~Ê&UqQ@gs', [liKh1W.Ka(~#Cͤl\;AN4uSN~Nv wAJ*ݓE_?ʘhsvj+-" =UHƌ!4Iw)~Q3b.} kWvu J[Pf42ꝺhv}w\Bu !u0Ep f7 G2&C#­I綫 6o4 %d T |E'iW*#x:)W5rᗅB+f!hT^s@R$}:?{aJ#ޡeqkǪɿRekwVbikm4faVluA\n?BE`i|6 $ɣ /i EN0AHB|r&}GnZT*8]JZi*XY yIP_d >}T"iei\Ԭ@~M9}*1nZ.i24 GB:Dd-R? mbsLRn?$'>(hIcz+e N>L@0ݥ/OaOj2IAVRەfÒ a|"A(jGagD&sia,M6yY[gkT|bpl((&$[^yNF0@OLJW5Sќ,BKDehzw4:(ʹUj> bsm*DVél$*_^ґna'EA= =/yC~_ړ \:T  ۂ)CEbLKdy~T:ф%X"{ ao@7Aa7-\"^mճy-@ PhtM*\5R A/*(+"X0Ai-O8td=IhGlM/%汜qg6~5eOd;;8vǙ3fm=һf=Xdk r Ж?Nq-ίڔyFa䴈n&P_gHA![9M,RQ+:юʽR\$g6NbYbܾȆ,MWXP%O~'S{sBL[M٪jino&بzG[B@Â,Ds* BJdD|[&j<^d-г?XksacZ}9:J?* Fg+ޔj^!4pzΔ\qOmK7-B}`m&ի4 Yϋ#3ke< hT 3'!;Z"d̊^?^%YwZG7뜮,;̣Mjlb\5Vv"z&3w}&o@hJBa{~mg\+D~XQW^#Z%B/HCPBM(z# I9m¿/Y쀉2/Y\2l,,ovQiÈmy+?(F6[C_GA A<_NihKssMm[6Y ͅ )EzXTN_*$<,F[1~83;[= VH&07CZr] ;Z%^㣄Mgh < J= I١r&x?.}mO Lb_JSL/18bхn-PFrKFfV$p|QV` B #Sַ$_k;!i6ZB66h1ApC_i3Ox<3'j³U w8L ~D>~m YZYdYH0'ﯚoXį1OI,JYB/ ̞ p%ƒ.EY-P(;H;E(9C۩a}+4m)\Fچ_i5Of)?+D?"fy6al5j{ "JB/Dΰ*rD!AX2r)h(L__J"鏗rN$ߴc޴.OibmcRuqkA$8-PKY\M }~$-qgIIL DXoT{ 5Te2rMm^'q/C[&57."9u;쌤#1M 8e = =)O3%ڱɒ)7%+>S?yğq*QIQ$RMD֔G%N;4d~Uܑ]팭fߊ鴏;$ի3hmRɏW(j\. Ftח_z+U24}g\6Q #p9R+Zc/ E;5K\7ş84%1 DŚƁQpN0eZ>tX5PrfǼBDrƛu./FVH}VHNY3L! &'ofXCr[] ELMdR]h@-`UťX>~ ;V+`5XM|Ĥ( ^5>AA3{.!ZQMrdAItNZeiUm<@*bFsDNQO: 2HrZY@0T$}?o-ᤫz{X,-;C-3LﭖA9KMbRlIhTQ [؁T4o[DufȭZzYwB&_b1 WL p/D ^*i|^ :`no 2dn tFA RL hZ`6 $}BR J9n^,-z-`N} F_mVxb` !rNU $? FM`.X\1OƱvRm8&;8._"<&FBtiN B~7?^r aI}ȑQO]g^C9s6勲e.Yg [uH{rBYI{Xj˵Zt 8ڜحAlWMKu!k}6kf7%nKC٢$X^,JuY"I4BzT`|OCЍ1Sg Rr/+)aYC UCC ߄@u4YlUgkgħjX ll 0S,FWJڲYT.Ǜ^]=Rj^ 6dR{7Ȇyf#٬ZhMo#t9&͊ГY4͞d$gWabh3+GR?"hFD'`-(N)SΡf2 vbè^Y Xlbicrgk G+0ӗ :Qwo4Hph۪tǦ xM^ra 2 'VxN j\N` Ȩc{R,5y"r?UȾ՗gd1ɢ(g!t-2oKi[@7?܎_n 3y;Q ѥ+Rnj$G.΃=@!Zj.emeAR`M6 ː%@/gc5 bKJe->ZB<]VPn\~lZ)FKF u((Ch@_:ə'yîbZt*s qyM=1ЋGk(~iXP0rvI$EZ?Q}Qvʉ6i~Æ&'SҲޣnY$hv ء[gKYA5<6LM}DIU!47vY{8/nїM#eCЁ:Î-tjT0!ACmr ec̔UpUu#25*EN8fKq(Vj6 θj_6+Ѳfg?Į,]rLۖY2{jvI=J_VkuW-A eq!XOr8Ʈڃ1!5d|tb\Y0=qc 08sE\۬6Ll8-?˒Efh 9o ePQJ!0أ@v>ć 9^β\?nL u3s{B( DA"ȕfUr#!bDA1~ g(}㫠S1@TRR4l+TAUw)3$b{ Cޥ p2=b9o̾S@rx1s5* @w(/{"Ffbp/ͺ3HrU#2~Ψmm:zc_ꤎKx3}I;Im65Z6 oWCD3ߌv\S':FH,@W,rI |rtwD./?Y'G,}X(-2uCŅC0M-Yz'  P>yPm>J+Y;IP./( EYz.e a Yʭ&E+2K% f&65E"-45\٠0G=KÊlBk6@yiaz"dtTgc;w.'_D[MJqpr#5 h~fx_x~S D?6(C5RepUI@޴ --9Lh# !B}ۊ_`6 ns!CXȸltDfkg"%n8L `Nqrcwe~e/NG UH:4fb IΔ<4JN"@T81jP &n;aU$~v|qBO(=(~i62`fFݗǎzj`E9X L(n^҉wPl!ֻOQhil|1><.}x^Y,_|5!dBVHB}Y:G"Qt/R\l%P +._ 90<䛕3;ɋ Dχ${!!Ht 4ɱYF"(NYJFn{p )" {y.tq D#G)m EPԥ$e)I9WlK&(>\2!S "x*"RLmgbZTC4~(J!J(Ϙŷ%yoz?g+;9u.GG6on ҄T|^snD{X Yk շE/n> +HU+HF7A1] _kxҖKe/-^,|c`j!̑+:Fxs9cQn xH; WT >Pz j.w'3 5 VOYAb=܁t $K_zSpXFNs3"@ ƻz:Dm1ՈXZX`('RS'OX\Y+. 7EjUϗ$\cQz8=թ@51Mh3$4'l&;3tm+?gb\Tc&l4 4R5*# .o"*ЊsO]9QΟWFb v qnݍ!)҂/6ܗ!y60ԡѻM ffꄐZC"a:~y7Ϳ0^4q+=s޻FQfB!a`~K1mVD%XO'BY%GQz^+GM/5-Bv:3C>a23Vdl=#},:A <2sT)/UXuͽ9؊#[H d{3a,]IشUuڞ~^hۘKo.:>d?:-ʏ,1wz;guvRW(̵c:TC\J 2:Jg >P./ۣ }!yH,fz~>28٢( ԿE:G"g;z[$v^68~g #<\O:\l4֜Npo } /龱y2=8)/|jyG*#ª-izS  o+." ɟ8t!-hc/#&?i)g]>jIfaYU>R7DV~)AX[c %&~@߿hH 02#\E1kRd6dA}8_ +_!Tɘ"ƢHLחc/dUee3M8|%|"RJ!3.-D)jFNja +p>8Κm"V"3iacUyC/H0n,aT3 w_ɚ2{ ytX\IHD(y^!̯$qȢ̞MF1mZ}RcmZbxwKBѾC vQl#%2% tfɷpj A7ˉ/e`ne ]Ա:hoqW89[ɀmQaHVp,GLK؝{y h  Ǒ*Z?24p8BR5OT<TT/eY18mt1Ux=P^=n`j)?6{KA+\I.~T U#{94?,S!,/`r "prDj`X9 bS`TL|@OXdHEHS 4DH>o: `C?J dn|UĔKHdѺh,_>kn2%-<_>Į mf]ĬuCJ8Tv 0谠EX_WoIyGZNj&F\A]#!d'M-m-M|mpr3ni}l!N'RCVb!h9ȽJ æ5Jm$ @?Ip&{!&+/\1 e ?4Aݓ- U9цĸR>{pMCHZGۛy.65(W'DXR~9*- -6|Mr(!#ůT;G MSĸ塒Tc,̵3Ώ\F7vN.$?Q]!=jw\&D0kMμBU\uY̴J("ԩ>hw>`(M (GWΞ0Gnl*U D?3A|\-2}kA9X>_M,pIU乧D$iCHYcr^q+Io\n8˙]5%߽U P)w*tmNd{\aYԏaW\z*$CEe{Xoh+Cjsqk axQ.9HbSz Zli*jY=)") |RgPEmSP q9>JQݤ#9֌7\.XHB5GȗP=hqZv#Cj.ҋ$FՐl.QOV`kO V-,^-b4wCj5n#Y{MXi,I gL."hLoP"]ROOI\ȣppI  Qn,kaiu"KzR*J7?vwfpd#y*6)PE^{/PuW'U:=\rX CAI =#44sr%h ,#6uA/S~`iXi*_#E!Q:F.a=#N][|"iCHhcv%Zò`)s[}F8 s'h^l7}9Dt>*d f%HVQ}R(DȍrpD !WιoL\N[VfWF=(<G-#0`Ƥv(* Wp#ʎ"1OĎUɥ""TuV²XIl٣_]ZRpyA5/h\PE(9VhbzS*(Tliz4\1$뼉(* ZBHS!YU{]ex<(zP{(-N/DZ 0?ƯU :=Vr ] s󪇮0 I'KMPy‹f8~RKYjcEi6p]lmms-1.1.3/data/samples/waveforms/w2_hexagon.flac000066400000000000000000000277521247673406200217720ustar00rootroot00000000000000fLaC" ppKDM3oDY FG #Yxȕ%ƈ%acPқ$˞琵%h-go'=_IJϡOHia?N|.hGM$mBwAIY47+.2 FUE$RE ͥ6`\W՟`ĘBܘa Taℊ X`,8[j{{r4ac_gʸDFLyTY?VT]ҼY:kH>g|gne (x`5`У7pX yɌ5WSS,,Z&T 00Y(Yez*WQ$/=W mUz'4*OWǫysz=!h) IEbA$5,k늓84@Hph`NNz.*4ac g-˧ruo+q}7!J.*sԕ%(0Xق 9 Hi!cY*$i x@~M_\B ,)_ҌWґEBz!hDnMDNz.9-_2PЁ$֐$pcY腜4(x-(Y[zuUըw_IDbe.]_j͕bᇎE < XUiiI;,a'CruTcJ$HL0BD?9j ]LT$c~k,a}rjз<%rI H`YǺ` 5Pmm_mrQqSV5Dz.3k.3kY#(CF5ߑ|{*k=,,Hcqgcq5YYzAf(xiMTNmsL%R{Sժ,`湬K4[ʎ^0C0uSpmf(xDV՗0lqQK-$9[+mER%Wcri[pm )K"{hg73{r5f j7*sP~ASsPӇF?*&*x`,C E-MNyQگR|1gUFT0eM&TSmy1ǂ#KU߯t0Ɓ&3!zq|!J xpYӏi5QsTKCyiOrTE4C]P}Jq!,T,..vV (/B*aV#K+:"byO!<}DGz= NG$ $ yĔ[zcasz=i GQ Q B ySޏGeƈ4) XH$J{S5зyCj#GCJPAޙB1*,kzp\ $iDj?QIzA T׳ugܴLDWBCToMj?QACT-h !=Q=z6;cԒ4C1y DDDJ6{j"PÃBt4@|vmWv>"""PF>c;ѰiIFq t<`'zkh)CY 8N4Ǣ7CHor2e ! hCHo D=Zz?5z6\YyƑޏG$s4 40IMDCQhi s^t 0X·\My5Ӎ#yLj4N;a !<@Ǻ XJqixz#qrj"zEC]{P!*k#Gz={<=ˮ8ByƐ鞽q"z#Q1[^%E4Ǣ.;行ޏsQCyq$04(iɨ ӞG\Y=W=[.,Gˍ9z=S% (Ӊ!sj&!CH{4 {7@jh%2F!p!hH%ô#<+'%*zA2SkkKE4A^ W&0tȹJ1nL#2MTBY=u0x`h Ag%K(ESٱAgc\)ثGÅ$Z.Mg%M0Vz!$=IƘj0IhbQ./,p.dmDAb!h%0FqBA"RѪk?"jsu$q섳з&J8IS rᆎ Ab0E/<% M8h 4q/BrC{6XhBN]eMkj-@BN\#eO!NE IEָ5cBID$ x\z,aVDyF Xf-0ҷUiS4p(nyJ.6eKRٵ5}y$PMk&Д^ozHyKIEeMg H |J8I4`渱BʔI q(Ūsv_\sN1QRZ1lب%1Vr[nz'-Q Hᣅ,J$ ;b;W ]N\*b 0_iƘޯc\ uFl=}^q*I@(j+Y_͔%Ic4ǹ_V%ƜCN( !4D  Wo]FMTME{Y E (ߜ]EnMeʞSٶAL4pHPHH5WSlTH,A'-O,-eFO!cz-ǔooO[b9=Ŋ<ƣiD'Q75E4b _N{!}8󌲞SnrT,JNDʚk\Xȋ1pL0Kg ,Ae=WQhYEo\bH{?Xx@Ӛc\S\s J.9(W8$q|uͮYYDI ȴ,c% 8BcYi< ˨Ȝ%sYuy[=6N,J$$QqU!Q%=THPXZ&)Z7+{rxpSQrahKS[\N}[\|#q.yǔp :a-VoTQi0agqd-K(rȾȋܯRUI7~$š48Ŕx ɘK(59yMG$4~QjAJQ"+ퟥiOg{S vʚlC\|Y Gyɷc8I u꿵 ru1eCL8,qq*A'Z>TH"+箧QjD„ D7fV ' _>Me_yJ"抸dO) 1rıhS9A  ޭY c$ܾųezU~QlĔ["s1ۇ8hA5 mN$c-5&,`}f4A5iCS\UzDKؾk#qrk= vʗhq.Vǔl/1nE&XY[Q(B$簑CF丳v45,p+P\O]u crm9Oi ڶ|0`XUuثSoNoOޤI ȴ,HBܴ\r24Ck6!=yOs\&/=_'"e- "n'u Iwqu>l6xy+t[0|:A'[ <(,a,c,ƸXcHy8$qlJP<a^_[-J5Kq$4-۞F V֘ųTIij/[*j%(1pDa0YI0hPD-MgNz'%υ&Q*,A!{arjc.959y0Js 9JsSٱy ,An(ғŢ⢖a=!a|ʩw/? \uw aN7Kj&e(JoVʞan( y R\hYM0{?*&9nL!*Q y蚉܍ sK<04(Iƈ8IIBQ r1QjyEYMbq$zţzMT$8, 'Yb_Cζ)vEo Iԗit.Hbn#層kTM$REELǐX&|&lG%qc%ZXh]- "Vae򞫨ܚxX%gգFFlfWmgQr%&jsձ,*Kӆ5ضlTI_m!KanD%TBȋ(hTP40lǺ?c V2{qpe[:PvE:0;%0c8O8dq''ڷL9":PA aD])ֳ)"q D+"o v!NnYIۢr8 Q<M"TtT|g"Sm[MIs++'g7Dr)&)4MMZS*hEn%g2)3rt܎otr)RFV&O3v9),&q%Ԏb† ېszcVE1MI5"o)g䕔eDR9$Gebc(7J*NekTR9.#br8ЩʛZ)JڳMjTMH!Mz).\1ɔGiHt.ќc$vNB+tCޜȎFcL%X"O1Rܷle=YOI4+VrvRVq[sOL4еi6NgIF8$r9]Q-JImPI:LmD8sJGi[蔅ъ8bX P78CSg,iIDR+tkb8B9'1Dv9n5VvVeJɔʚ铧McV䴟M5nݬ"qB1yGMH&ڧD;E3Q kH4WT4i[TeMQ,.S.!p q7*LHJ܊Ӓ'1IvV!VD)$h3)eo'ڲQ182BFTGDc]6(:MvtKIMLa 1Z!)&DR9ڈC -XLR,F T\&# T&X!pAA>N!LQCؕ%S@ ˞B''DŽSXMà dU <zĔYg,c%l!}9j9=9j1c{BdLz%(ZcYz͌%_Yq$ Nnr,@>*/0HN%CZھ|8HK0R%WN4LUWBܴzƪ|BQE^Edcؗ(܉B,QszjsԞBBqd-}^YŐ ygnR\BX҉(!h[I[PO$ xZ7P]k1rHZ5 00h]KQ$-K /xg5KsYyDDϤ0Y([XnJ1Brв vʚ܍qs醈ML РK$qQdJbs ,An1lmms-1.1.3/data/samples/waveforms/w2_invsine.flac000066400000000000000000000144711247673406200220060ustar00rootroot00000000000000fLaC" pp%Qp$aG{7^( reference libFLAC 1.2.1 20070917 p[>'\Yj=B8%~ ]-0۲Pn/L kEIA.u`Yυᷩ5d-NޒhoѨ=p Qj']7{/x5t=jQ=TM le?!@;$p6 a;+m>/PHx`4@Š&=2K\ ƒ=h3-4`Rxj ]z ~?erl'l6I{Sk AA)_ ke\ (ylz AZ 'N/ޮ/PAƵbX߳@?ƒ(| `YFǦDv 洀e-ĦDIAblv 6Kmۃ\l Pnnۏܒ 54n?=`?-j 0K%OߔѓIAXIBԖjux^ДƦm6!{ x@4A?\4O쮿QJ>(H҉ߔ,=naskHAQZT4`,(ϓr\ZqDOl&!/(ipxj䬠F'%A5zT,/*A 8yZ}^2XE-3̨+ۤLi_#.a,Q& v57\J!@J'%*L]8~b<ԑq&#QSU.XD\ePGg}ԹtC5| rgPuɔ=ϜBaGksFۉcc6DiD}D[Ө$H$Ui(IǘK󈙉 ,RT% q?)noO`0X@h(Y1ƾK $m~o}W=IHs S-iq&,ʞA&cճjkn,О5SO^no]z!fd4'.) 14q8w%bz5 c4D @0, @ TPXD&¡p\H(^ H" p8dN5APXf=GPӏ8]>sJ2獬D҈פe9B2')mg\F.q?IDaU_ڢJ{>1$q- N-ī優fsfsԾ-'?- 0hp,8|Vz8H"!2\!K5' 3.yZY܏

\-O I^Ka<(4pӄii TMn-D q7@#=R7TZqnz8,0e0^.5J'<@}&mas+sӋqx\=j=OJ  0KGEf)NXb.> OA`p'vWN6>ON`(mq3F<}diԒfZ$AOܿgj&aNtZCO? A1oC SY_)2, S~ḫuq]{T'KP\J|',NoFJCv P ayC%.hpՠU 8ɥů`$ԞpiEd a0^piA0z 0,1LXư[ n]@ԂxVU'mJExߙ1<_;-an (j:_{X-D4%L/mr&+NDa ljp_ ķ%XMON (jcڄ^[ԛE⯛slUP|AyM5\| A]Y.\~,6DƯm%t&mLl?yBbIn@N~ QyLH@ SDƯwW Mv~O*p,( Y#m*>$ja+^4-'|& B 8fǃ@V39GGU4)egs"JHBRR$R$*Dxcc$bas49&dxnExKK3XQbJ+"ʄ!)D""Hd#j:rx}D%'A !d&uʼ,D6a [%3r,<1cVYEwK2YPGZt,Ɯх$SJd,yR,$t/ xEj:e4R$$TVb2J B`(LR7 ǣqCƢp, ġcG{r//!M Uz#Qris$u[4*}!q& >dj/\IŜ$q|u–bz, )@KSJy sY15VLj!, -ƕ%bܲRN!(8E 0zZDʒ%AאF0GEGk0hAngc I f#s-0HޫTG\87s0h`цj{5YM)DBCL$AR]Ȯz2ԗMXTWkSJiKv.ʕ]15դzJb b!4ƩE rJiIeZaW.iUUVT1eլ[VfIjk.,SUUSJT"qS]Vg,VVZ:qI8"=Ğ#U B*P§ eJz5 gH#t2ɥ]WKŎ4X@H(YکDJiWJRe3R lwH(n8GT1&%v)htb-]ҪF1BL˂$GJ)gQ$^1b2SI*ą 4acǐTrҪWR!b79R)TW#i#Hf)Dnu+9܊wxAcVƆ  8̱_kb)TVa $Lj"-+aBș,NjK!ysYI(Ӊeգu5S9QWj|!dBi 6@t& 0N)Cb=D8P9p\"Bad>% A!0\*@B/*y5^Ag-(>HZGiMM0HʩC_aWSVZDSEd=QCHWHy+"l+-SF[B\kuN#Zaf%w-5,ޗ%S,jTvbHI 1\XM1,i wZXM>yejP[%*1z.a517,BeICJ d <#Ȇg)!+Y܎TY4S8A  yDG; Ĕ2܉+D$¼u:ʗR9PEciQń4d$[Iх,sάgAI3t)RU%Ye4 is^*T)RV$R1"AfbRsGEgb485F yS8h(HFS4egaA  9f$Ŝxptr$+iRiWhFMtݬw-X#PZltD,q E/$bheH4E-VK'{db%,,byHYLJdi9dZ! )%Ә)bI}nfHtAa̶OB1 9d^" \YmTܭ _6&"EZp}$\U J(I0 GnbJjyZ8G,R\L*=g4C=ʜZ/%^4 Va!eZ;yAc%۝ީR]{ FUpD= $k"Ɣ 9` ),ިSD(тB  NYNt'*4q%G$Ӊ+YL+U=-Ŝ74Ƒue#ᚫykH[". < 7)I)lQJ<aEzQHZSHj ,a.%TRb:`e )y FefI 1B9g OWB4} ^+K*UIHZ+2;ǙgLX#E[sH=G!TK!g,D==;;=;<ɹɱyəqّyYyqaqqYaYAaiqYyiQYYayQ!qqQYYIaaIQa1qAIIIa91Y1q)1QAA9!Y)AIQ!1919)!)!I9AA1) !K⇤D$$dDDDdoߒ !!|F;W_; !tF ȟ7"x:|_9#n䅳.zܽvw\9vgn\rgMr髇Mh 8pB 4,H@0x,hу ,BE,pE4PE,HcD8DŽ4ň,`xƏxHb ,X4᧋y П)iHOt&|@+T'ac[9<%f*k[L2~Mjf;&Ԥ 3~!%JGi)-FV(CvE%7&RoZ'ߓڴ|HtI7bIZMҦ#*TGFTBwhOѾQ7ms[V+VID$H:e؇7nB1H TQ=#:\OQ.j#FVoZVvӈ(nrKLNoa*H#"i.Q5*B )ĪN#1Mr}|VrDs)&Rt7rIcF]LۓYMvRI$"]kID;*f&R+I+J.kLOL;t#N%&RMRgIFY%K9,5ɵ8nSfDR+"S,Qk$%۵ܗXҵ&g2NiZR9QK7D!DvPZ!Q9!׳+d7e'KZԟi$VZgnc]fkxe 1DYK%Mv|o%77ܑ!:IIZݻvaFTG'$bIO)Pxئ.Hݕ~N1YQR䊍ĻiHrlw'Mkv,'pcu9MQF^b.g&M[5GdsTq-N"D2"ۙ(okmkv9;VvlVEmZV6ᔝFݴȋ_^JSn'eɺrNBvB|*TROLPѢ]dI5FrHєE1IHQi! # E2|95'Ft"ɧ%THB gL`dtIۈVJM)><%KÌD8FT1SXґYN*RNcmIکU7hSF.I%iRDEiSXE'*29y rJGl"EHVOD9ti-5„9e9kL3I hG#IT%YD!JOZL6䰇VbBvCLPAI+I܊Obr-LQ&rr(}L)NEq9=RJODs)"JMxK&)ҧ&"TOZII扔Oԍ"yI9bXnֻN,Dvs܊XG#ե"$P";(2 Jg3ZG7 Q#ĎȤ\KS)<2IZݹ*kYMbw2r)G̢b%ܖnC)=iYre'2[y2:2rIۑHJ#!YRNIvO^'o3;55RHHJIڶrVFvI>%s{N;*{ BvѼI-IJTQ-,TEIRJ))IY*ԒJ-J\%tIrU"%JI*ZҴ.KRKIzJҬ.JVTIRZI.hRRU*UDJIE%%)RRRVTRRҴ*"U$)%rW)RIiIjU])*J*UJJ))TRUZ*R+RI*JD*JTRU%JJRҩ%ZJI*IKIK)*JRU%T.T%)QKIRDt%%ZJZRU$$D""*Jҭ*RTRU)ETQ*RU%ZJ*U%%I..Tii%I)*HIJTJJ)I*IKJJUJ\*RTEȕ".$E*RIUi*JJT%r)R$RKU*U%DJJKI*RRJȕI*RR$Fdlmms-1.1.3/data/samples/waveforms/w2_noisy.flac000066400000000000000000000560641247673406200215000ustar00rootroot00000000000000fLaC" y'8pp%qgVv[c+b( reference libFLAC 1.2.1 20070917 FK(`@JZ220C„s.hnHwkjY>*0RDi^ s03j |+tSnK]14 3cfiap272Ld~h+Zyթ4R(+xڟ f%~ŔFwe7QO hV(ݶGI)EKEU$Z>,( t( h+9" ʐ3$ۚ*n,Y嶸 krpmXDTѺ\O(l[}gt|JRϓ@Z[Ygϭ#@|Qc:KrW=ل_tR5TKrj>rV+qT<oENEe6mf' S˵m%i!+υ[TqWXgP 4`TgǴ0髭aܖ@h | 2Yhy8QFGhvО; I$]bܒ#ʛi+LtїTˆ+u|̯YJc %9WweWW Lii8DܕdYeZưY5MnL{]Y&;{2+Q%*%E. ]/X$'fy6XY봪q.xVe.r VHrpHTί Q-MknyD3lѵǾĢi[,dM@;*`A8h^ kK'MυDR+[6MM"mQ"$K4%2R_44㬚Y+W[= `.F]5SʍD] Z|FE,:e .*lw,_Ocp~S2YƷm/j uܑ7Aj.aD/Hړ"+))f~ׯ :?$c%)oe&ԟ*$@]j_oyQ\:$;O'ˮڒHn02G*.޼ևIB`.=rAU0?8*vM$^Gu#Y2^.1`#U8˚ݩ WU{ Vd+9[P `3-=͌`Uou XN>_eȀEw!~ QˬGI^kSb{hAD[#WB%>B5m4j) x%ZK4Vre>ۚOP޶̜͐RvHuEZ]U4 o,$|h-w \o-) {U@Y:]o+F(ISRlF5|RԑC@*4ě0KMF)h#/f^HBT}1I)q//GDb4ſkEɧanX-={MEV,c臭_ p @ 0pˣ U b9r/gAky72cFtuf3~'NPrױ !5kΡ׾k P(WNqO\gh H ҾCEksxH>ڳVIۜnTkQzI Cj6(Xi}sZiJ? ?LHlbkH(@ LQV)F,F?bQҼ}䎮JG?,[0UYBFM#4˜uڡ8/Vg1=aHLavsXGŪ]9r+JB 5~i" "׺̒ݺuWBXIóP"."KI߱4^FeiKh_yW+nGL(/,,U[2/)I-83zNs-&_pY,~-!7{q B7뙤{If.@-y1pzѤH@#J/p#{-R#cG!hypviB}Ha`I@P>e'zeK&`Ii_敎+YmT\ލnƢJ{1gRsOk 8RewbZZޭ -2_:dU+q)P;o$ 2H vb =Q]iTt-qִv|?޷u8pEfo9pl *6L9[ڃe~K [}ё/9YIr (Yb~+C) @lU )Ei.|1* QFO5PٔW =PCԭӫie%R~#G sNo%]4KsM]pM%]63K|TOm*Zb|fs<,)Aw޿:xF:$6:rVCJ Bu`c Un,I ߟH禹xg+6A;w.!pYij%ּĥ]y,3_Ko8I|?|η_.ZǺwu|/^3ߡ!q'V1hf my:k+Zx/,%wpӣK /C\{-߮]S% jX4xvLlAm˩o 4 k13B+LC8/הEφIMim}9L{#+.]Jd$ItKCEvK?MόL 䘓LGKDbB39 Zid3nI6$N l۸/ծ HUxj`@Sp-\pKt~)s{S+܉OfCIG~':(z p&Qꤑ]T_Jf漘7]5]Z{0^. 1lC+J'+r^H̨_+lt++|3[R@vxqb#Qq9x 9@&B1TYTyo%SKD" 6[9ΝDa1SaC TM) CHXbrz#:׹Y:u~&gr67bJ}{l'M qMwUfI'S7/,EQFPyQ!vҍK' mLd6/诉deЦ#2uf<ϥy$;%)EK$/fFM͘8Z+8ZV]"3zJo zZ'l~DtHiUN4312ey..rƻ,H>Q|sz}R߲X6LmY ڶQ}:-S;ÍFU±l"3zA䁶{2 G'QSХ0ዔ{&UX|n)]_ړPNSuߥi|.mg4:8*4eq``iy+/Ho}'d]E+qe0].!n]sW TfEHL#89oiTT|mGVmVt)Y:h5TA X[Q^lCN`;Mi*pMpD<}:< lWIr~s.K)W~=JCzXIIwbJ}TM6aK]6kضͮ@EPq$xB9?5S&nV2!)o_ ?Pv~B+` # {)\[=wܠȽYޓ'FRĽ]۬ώe1n9BOΤT7sJD1zN̒IGg8 *V2xgRDdVŔay'[=OYxw\EU.9VPkQ]Tݴbю܋J*XWfs\#[ښyXN7OT  Q Xh[ήԲT8דHl ҋ~T߱󆈴 U%24T.:d70gz Gݖ1#SQBo )oPER"{5 _SSUZe,;wٷxXtߥ[~.SʵhȋsITf {U\^= 4y@h1;{В[k1T򰕡zdCq тbgNC}7h7E 3"8?UR/j1Ī[iz6d}z #i A|dngC: i@V-;#RK0ʔ{%b*/xى5LEfb+)/kDpY~4_zyDuAW[#]'yp#Pfiycڬ܄%$zQܴBʿce)r EIa:{ґ}'TS DƳ8F~̥%PvWT ݥ@w:9w8,{[JQ.ϼ4 LeYiC]AR~ H6rKYwHO]q':kʲ\ͽC%5BsI8ЀCg x&*M3O$LV:)̫VQ$cۧtH"k )0YH`G^{77U܃)ɚ?"C}'Du$]Z! B:G'5ZI{-j j uo$3zґ"u4aG sVnB0^Q#z.2n9|㙨Z6B&VUd}A݅|@Fo*!NZ;?9<;%7^m=G`Έ5J~P"tZ^qEj%ӗC%-N.# %8Õ2T)rJ{[i'c~u/PޱX%#Zxv,/tq+}2] %c 8-Y%zQCN2Pp% JwU-BpJe9q( luD}Fjlkܼ^ =AV($AUZSx-k m8I?abrE4`au) e<8l4% QE?Н!K [ۏqO">]Wl޲ɩ\S*A zEj]졌%,|&oJ{"qN[pRa('æhFڬ( J_QIAG(]w—MՑDAdrkSPw-ȪnNAx {z|͹&CAl0{c.\?S5zks/si4HRܧ?ޟytD}p&+qGJ!X>ap%0,|c4e}%uǷ#TI:*nuhlC=S˜bZKC5!ZK ԕSXe/ uR;]7BM=(_ܡ.ZfR]BřD#)3SGqj2@Ǔe9lsM_Ķؚ mF:7dB/9jci kjZƭT^A'uɪlxa2xI. %Sq! &m0R"|7t~A)i`Hm?nZ'+@$̆ ܨ]뮂@㇓}Ś9|B"VX~,\+P%^'V 0y@9jI,-a7oWe4!.q{uNiFHo/w0$ vȑ~~99hM\dh*xkEIQ%7IhpDp5u-d_RW;&$ ʔ ^ YL`0&sIv.GED}hl *R(3aJOLSvU. h ܽӗ=-7D+A=2B9&6Nfi>m&+EtѸšc4;{C)"jmIcUc[s*c k)-䙍*P q|zk;Ǽh"t -G{&v)g#Z y7 ^R23غZ&':uK^I/\J%D&k2,8r+%AV3~\ԜJBLaD,'~dH2ukPke~@{@CY֜Y̓Q!vjN.]BK<VE:Ai!{ +&mbjy:u"yA ,֒.*|")A g2rkZ6)CT^Z0V Q6 )h%#Ds&ypV7(PyX$vbm˪|M#imRиˑɻnbexy*4v\G-#S&ԱP]1tVI4}ՑÉR z/ (ya|-B en5\R a#{$SBO а}^Vυ-zyljJ2 4dF&9z\qf`sYDz4ŅV{[ZnE!V Ӌ"OHRajL1>sW (ڣ*V&3 A+^*ᑨK'^[a ~2^bզcdhKdXֺXv~t{D(N:VVcX/_b..k+Eߑt%'iQDžYz=/wEGe~eI` 1C BļET~s(~fRlL}VWZ+Jʧ +ZY\Ն' ' @%/ojÉG{ISIec]Rqk߸Ls^njhwMl,4էJ=Q+4aR~s0)٢|Zd}MwbWfieRWВP&E )Z+?C% 2("FaeS埼3ò2P#g1]s9u*AR] rM욈"UPĪn`񯙍Z ;j$w f$ujFD0H6uE#EQ&MX_u>DB#G_xm9vUgM;As+6}rzS` qx'1RQ0ο?}`*vV l;-Z2K)F4 ܪni[cLXt쑻q!+aqL"0 KkA ݕB3t]p Σѯ~M4X+T TF^ GA 3`oD[ǑQȩ@S٦ϻ;Ĩj̄ ui+sT|fD$ ^T=w \eMl CQP^!DB-@]=3,W#@/< ]nڋbO-,bʃ2 v7 Jx5H$FY$bEH i֔u.װ,PT /CD B|ZϨM~]uWWw"9Ҭ],l39Z0IT1vk[/.{,05kZ Db4y9dBGW/Xn=tYŕsm^̴[?K] BN)zH H]d 1L@APsԖ]oCZl^)zXj3i4STzuQ aL(!'weK,=ҤxR[Ž dK(yM+,^A;o(X 5k\:֬A<,NtɄiu>Go__#1:YYn}-`їںi~Юx$q>7n=K{E>{4kX=&/ ` ]zFĠ؋5{߹a/Y} v`$Cc#uwףt/>)Yo[!4#0TdSV_=/]HC3 su_^a!^KP/T095G"O !1ar( $Jn,vod5s^%nK88;Eyil.ʾ5Iأ\\ġOuL\t:YYVe@]cTXأQ24exҿ<3[/xdJFLցaq/~ڽQfm$EVәTڭ*H-M 4w!KjU`"TD@z\v$-n*M2_XZhD:3l4 V{lSSօ(Jk4S` k6|= !"=?VEzcYT͎? 2-"4K4NoӧYGp~lL `)̶,ͰV>Y'M9\k@ط;^*Mn;,$P՗63b7%jMOX$*v Y6[_z!R}dʒCY0ȫ5HgdUsDɟљ-QXZ;"#Tt@GW`?ڽ,{J[^sR5.fHXks R#vyܻB窩k/)@^E3!el*&JGf+wqm%..7 U5 W.pJJ|Y!XW^"\Q*m<]B!rcCK)$^&56D;,ؑjʹV~Ze]~^m~H^[ɀhtwD6$.B )]EBJf}EALERۖgr/*;%f@3|3 NU#Js1G**>HCOZfn^Ui'uo(TFJȎٲ]1,4h|bQjЊb̓nEqDeXZ F*-C34Fk*մ2eYt^*U9лV_nM:.ѶxR! ]F*15-U) lI$]]ӿ"#&>*.,_\]r:1]Ò` [eu6OԤfc_l>N}m]J{Go( X_ysfqfReWH1HzΞ0R@7GS1! tL$pƟD+>>7͂Y_ΣߋK &̣c({|lE39Dtm *t㡧/J]\ l(`SUݷ NJE{^yTaMS˫I mKfy9j({+w6I½q()6>-K*`rg˻ TEu=eIz&26Ho5 #P Dl=iy;;V:&َ٪)A(-aJiG[+>aek0~k9qҍ߲e@T½( Bnv|t\SLrcO^R0PmpGb*j&lӁ:fx;!+$_MY2s7dC`oСh" XʊtU֒5>8Fߟ{[I0Ls֒*L;`?4+EX_lɼkֳ 8e&%0Zͬa?MzO{l^KݒQšZ=fɍ/Et@OśCUc8h34E>i*6?20?fp$ڦpXbҋNIG,7F!0e"QB9~_?!ʀGR ϰү-b)Ub"aƪo/qq-ĺh.AADCB ?E9dc0ϑXf5ևe 8FWv,g Z%A!%0 1KmxB"(dka-xthVwR\bgs (f#Ǜ2M~<[[[tó5}9_D0G޺2sqDޤbkj{l#oY#,/tcT%i@Y$`ͦ7Q i^IUgS~ҨdR+!} sA[T̀yϸ*}uVljOƱjܔy#Q8"|e-$Yih:}Y;1/Aw[΃uhMɚY][V6Œ8e4]ƘحhZ^-a c/ϔRW$QY;(l,,MYK-ʵҗ2jtO*wQgXtF7-*vt7>ΰ28Ŋ| %`#~E˩[]NۖY,KtkV#wA-rv"e VC mFС-(ZQŔ,>JzI8ȉv z{؈"??Q%_e!AЫ6=S"0Ֆ@il2R6bfhd"Ams7`.ߏMp+DXjR_hF.C_Tuf]Dy! ƺ !mGWNVEi1a9](.my^!8P+vs27Eg7;y6B6UԎ9dAUM6fzJf؎W`i8J5n =%,SOl@7b`XXxmˬt~֗_#ґ!=c~OS%"nI.ߥn[Y,"+g3ݿ:APk::-&F֖g!<~h#ԲIe)rŠQ2<3Paƒ2j8^g^h\/a|o ڳ Ҵ%YOwH]>4`  <3Z8Q_ƕEqb~B: 7&HGXC   !E>ie9%@.<߹%Z,r|jx`/$fex(u7.Y!ہ(jR9/H]dO?ħgD!ʯcQ{|JrIO)T%Y1-x9_G8~B9%#u^j t<џĻk2E{՚DhGy:&DI9-2Ӵ28b6B[* EY뜈7dY$t:o8rzVӡ^Ć_\αLԵ6f#3qX]09a1VBS\L#ڝу.ŽbD2_X?iYKϋHvV333EO*Qw%;?+ܞ dAOTn=P.8˄()Asha_*[wHl@SFD >Sc+q W&9lyov'm>.+GZ>!ּ] iy1P7,qٽ- E(,G+҆ͻ7)ԘUȠ_ e OIt&^eEaW|P3O9JoIPHVÒFN&qxy|@rhM<-?[X(a(xPWiJ~!cD{ 2)֗H 1P#iL pB<6^CW{l K& bhzZGªNnEp|a1 aV'PTnt! L+ # $QL7l @dUϩ#7qxϪE@:j& Q0"@FQi t8&곸QVm= ƸPܮ(ij-tijk<ڤ$ M;*{PDVx1ۇw<*J~a`H~!3Џ\Ifr5"HH1Mz>*M)3Wۖς@Wfo}ҟ +w "^»!ME-qku, =_E4(\rv]"SC8<ڍ )DRۊ/SV km3qMǁS{kh~Ɓawù!r#g{W#Tm1:τF7nW?vee, ztL{6Bc#~}BΈe<23xZ6ӡgNiNZi):*c汹;]'%qf۔"Ol8{҂7, = E 9vCL`G_O)\S@^0ĘG&H /Ց, l^9t t0n΄ՙYhr6 К u!b3EVXUY <, G6u-]] x`tCfNۊRJڐniר?& q-,W,@[QZSݸ  a (GRj5FM"E^YSÒ2H MMc~u!:+zeST (A 3Ѧ$L٠WAm\$s!kQ"Jj?#E9`!'"Ŝ=5mXbb%Eʢ[Nz7WXK ݖa 5::֜`OmE suz~.#?%.6MV!s(IcMV?- dG ;d2A(4^(U?#~$ʞȄYtx[țQzctzPo|UD<}p im_fTn9 Κp#H |%])d/%2-Zc[qweQѢ0tSg,ۛp{~i7y涜#,=.1M 6=c|0K&@eSpØOe(q ۸ŵK*\My4#a2?Hw=Xe7 &%QI~iTӯU8~uhVaj TSJ:"bFRDxbÿ J:*u[e >~89'%{-fdU";,DoF:!rK6MB-I= No[Tߋ@!)S~ zM2i½ :O:iEܯ لY@tFSˆ,j/?R1$K8^+|~/A%f39#Xeiq0:W7x/YzG 0Wpc*1E/4;J)Sxd (۞m'${1C' (EQ&˗B G17X-54 H&}rb^(4ig\&2qUy̌|BfL\[ܐc a ?yԔzEF(;̇bd9`b9IjbVG~] Ji(6Cɑ+ ő@QAא{\k#Pk gc@6s4 F:D{iO .*}صETZ +;T\C9,~j 61u:.C+oUexp YоW\7'KӨ@b1{59Vg# s+nW 64#+ bH1AO&6Q9yOI}*sPA|X9+c{k=vf,%p7>Pa)KcÁV(1 (Bqh+ 0v7 B'-,i  kgªo"9H^s) % zarW' ta&IL>B;l/Nvoa9GG(nԂ1QZQ;csayz?e%[}{YZ:k/)ܡ,wf2D3`c1HlB靕IaMۮs"`v3z*<3F}#$|W(Eqnbuj^׏]٤0xA '~4(, wY_&dN:]P 㐎lӉ)R3#B҉a'%P,~|WҢCW9.[>2hPccDhv4V=%,kPERܴa6c <@4b*tEW-FhFƳ|Vq'[s2b$Vϖ3/#+Ÿf4 K:=dMC?%tlv3 Putzur9)@7WƾLd?WG r@{ Dv/g"U_=_z=Bu) SI]ț ʺ\E(f7ަth]|:UFOC)w`إx-m +~􈗇ё,J0꜉ 2yM pA B=fBTfVdݹ%*쩯\"K#RȤ?;$:䅡 N:5Y˞h*|VԀw_=a u3ER?f]){hv VHie+";}1+9LTMsV`PrPpomL5w!]FLe~rv|JyN(9,RLR^ÏE&<@ 2A, ͏(+1OTkХSd,<!mUQ?gUfWa!3Uqfc$C՝Xϑ랿(wJݒHMٯT" ј[+_~@_YaK`q $fwY.+B)90* <69"㳍F_4HWd&؂b]=s#RVy@tRB-6 #x긇pכG4:j?~O5(YY +gcc)wk,*J)QBm4XQ[<ѡ+\[ L=~a1L] c-O q -QtUBJc4`Qa%{7pܿ3J'BDYx4U|3K uLĈĖ OrA~hhpŇLj+'eȞt:)5kߕЅ̑f>R3-{.¤*}p.s+M{. DEc 䥪|[o!0{Qk 0~@Eנ tTʵ?'"G,])!w#6f|NdL~-s!ʹh+j?(O:kSϤɁK{&8ˣ fΐ}r~/$ ,uC#6#֓LvMq1k!C*("u v u|ٰP?<~?!!3<7Rĭ 8E\ X?sKw"QF flk0^ܹ_&6{Ո>f8b3 DVoa(V^e<vF&c\d' N8)%kY!Y=nz3+u*i=LH6vUвW+ߓDQ+>-\y^ts$On69hA2g%:A4 q8&v=7Bv,&?Mn/B'A1epot2E*! Fp?4[Ie g5cY K>q 0< 39Пq,Ocz`tѥY& p p p p 0-`֔ 34A ;xyk^CBcTY.}=w 6`i!w~<[wR box&Z%Q.m-`ϝ1Jv2Q[/2ͮ|0cj*MJgM]\'1K7*]a~ZѪ}{lO!hYgү$c' oq\*2pqGk ~s5ߟH\KT`D,r9N$yX& H淦Y aD:A$:#-M h@N[#v S ̯N x 7{z2/BpE[wun>v /Fd{>!ٴ6Wiq=/DboW2"4.(YtߤtHFXT/Y֏~S#&Mlmms-1.1.3/data/samples/waveforms/w2_rad.flac000066400000000000000000000455521247673406200211050ustar00rootroot00000000000000fLaC"  /pp%;&ɼEO踶p[( reference libFLAC 1.2.1 20070917 N_ͽ.a8wa/A *a`|Q,GSQ G70Guvn`!d ;LxiXsO0J`itX,.I<`މ3'8 ͕t(.8B T=D!K[AYĘda+B EI=iO˜$E$  l PѰߍU ށcuAnx=hqv۩PTIHcsf1ݷ6bI&mi[`IK>u):ӳV0>wWWo٨Э]$]68GvoJZDl<#&)E}n XYQԆ̓!X˶p*6b0kTR~ 2#>>sP\XrtB_FءA~+-?\IH4C175eb-oXk|Jުiw THQAqK]PTAG?AvިM=򫐖SOWۯN0 o -WVv 1dUUhU޸Q5VFpz@G먉 JpH`_r7 JF8UHzN%uHճ(s*|Pum%b'5ȑ8T6髨 - SJ"aY| \|fh]nHC'%v݌a ѩ9& Z&_4hqJįPI{/Zi^)iYkщFj?e*lY `G[d1v%}`l|LpnY7=l"Ħĵ ]G=3/ בXxLo{WEtvkpmuObIp6A3{vm|7` GԎ$l4¶E;{0­aـ⦷͊:OCl AB/z)pޢ-L|8Sy!HvKD|}jӹ9_0*gCmz>G @Zk4K/wJ0zqM*uO xn=o9@\@iץЋ=0 ]& )<۸"NgQRzyx#f>mkĘ"#,9hx79#en  dޢ[ Hm) 0}6Uqn' 8A'Jg9eܙ$7#`V8\ܳ\w25H{ЩU&ЍXpN27-񲂫ko#ɍCw"Ð"6بzܭ {@]EUd[m$S;FGiW~*k׳jz&d9YGkexj7佰:{,P̼ 1Wn~V}.jS=!4jiV1Q^c*JselKk?{DcsCRaQQH!?V364b (zf>Iv_JM4u?uAQg(,LAS10|B_Cq_RC0|;PkXU{BTfe Q H^+*nF.cWAZJe!Cklja8ڬ&]E[ӍgbF + ):oPYrS*+:Lo->71wj9<9~U2'd`%ְ$M:H74K4߁B mzFý5x+~٘U߅{& :Y<6,A%WKZ՗8J6i[N2P8p|{ŐYd}ѭ3Pit=iꈓ[e1)g  { 'Řh}+b*tˠ;L-aO")ZN@*^΄xu)qGpK NPKx~S#+<ܗ$sq߽gUߖx`[hi#-xjOfмĥ,%'&^OKu];.]H~g$Ҭ$|-*Sv ުsZ6DHZR73DOlI^]ߍAa]֊:NqE'#`eL( ۔Q7IA2> #MHmsV^u5 ֪bOSb噻K0BtOvNr[+Pl._QT:(ΏS9a=rGLW P*g@$w'`AD M,t¹o 34vi&TomQo<J,+@5GqGBD6`0!5?ˆ! µo  wŠΦ!U JHduWZiT N;-+<~c.Cc&|/r;b +浸H Ra>(#'zxg9 Q BvM.]#(^nILեWbOUÆ+(">38TH/M*<&'djS`KtQO Jֻ8U0y>~'%r3^(F=5$3 !ë { J|o$*6}ϻOhm@Bb'եQ"ʡ j|e:yStׄ2?(8LPb&̥M#I8w(ߤyRC.*/-dw1"Im (ۗ>T 7xBL?`O4x還W _G|Z{<#t*]{fgޘ'4H*^AjLU4G2oJV5M5L;@O3Xk%bCBVd.߮&RBu5 PX-% @=٩$; "{NtAқ8^ US#ETӁQ54_m,R.t%R"KWQ ;,^mұ^[\AC^#ɹJsǘ&F촡WR햱浠_$_S_m9x'FY@n iQJ5zmӛ!pܙB_dFkJO|͗ygYvKeK&֖[Ou$D!*a@eNvC"hu=&;>iw7\7"z(!rz5|r4exwȧu]'(p%[ YhYuc @9vP >WRwdNQ۳b%l*]k[y-ʜ$RlgƬ)= |L֑CN=rm!r&։~v@tcXWUm%J,]W2r?aag̣iGw6Ӭ֒wPgJi9z 6~Pg̝jyvqɼ’wP[fJΑz]VIXPu\tHsރ;KKhKVHBVH̆h/IedtHP[dTR]W} vP%q=OGcꥧ|YN}n_sZ:m/9H.w)8`"hJw8j@ؗ۞@U2;S}(/]/>/=Q#'ʩ}t=^[+f7nC wEKLK8/~)z?b'sLZT7B+O/颻e0 7.{ƅB39n>ܪnM_}-3gR?v-uQBck @zh߸יAQTDBqr-eU.lh'4U*KRch!_[0LFwm<l*e z f"?h3ƸS _] Qn0uӗ`cKlO"0›;m}ۊ^*\i߈+=-1(ف]|d0}}ﱎ.SoBa,5eP KIH"^ӽwN΁Ɋ +4ʛmY#(j.Mn>cG% .š&+̀}U ]&tOZbI$老Wuɣ˟q"Y75 }+)Z@iA8Kotգʺ2զOD)}RԲ.a)[;6PioP3HN}6.V'FR'IiANi FǺIleT㤜h&reܚ!&q[: . <x5MeF3M(' t2" jR0LMC!RP/>;FaY8: τȼ/zF(7gӠ~!O).v"o0Cp/s.&-ku-,D>1l9_JJޟ L`jͰz&TZh*W Ýڨggg@7q5&0Č)HI t+G-֤c[k4qUw0p BT'_bA ޮld-eH;2 8SuH7(|Z|X#Qv(|C:-tH 88"Tl*1ed%3yyOBt\(K)H,]ὡ Y]Lh(j(Ұ8B¡L#90I,*vmФK-/0#6NP+,H"ֻ.y!_>?٫$/"~2r\/KA3.X`]l]G薉Y&yGX'nH,"\`eCb^L}q&r6rQǿm87 .~_ w3" 0vlD^|xI'j[>xmTHC'4RhmUvylF* 1Vzg,*S9fm7|qTJro9c$۱2quVe82>e) >ZQ bJK6zaΡY'D$1+eU}ՆG*RhvrdeZ2#a7ͥg-J$%9^&h fLxdL ǘ0XyO!ti|$FOf3܂)f'cERH=b,@c z)~ 6Y5fdpR= @ }hT#PrߒH+e0 oudM" e 7Ntp9%9|O9'W"r[| x[Ӕu%Ml\hZ{r^)Y~mxHipĝed\&f%FC6!$>wOSL;op߸FIETL;PXxLgr0?jl2Dzv[P/`^DV9sꗭ7zA'J"DZj52IǯVf'MI.Ys{T)yFx(~J&M 3ztlLȚӓuenV /fѸ4^ d']fT9T3J9Iд3EG ]Obb|X.ys'ݽ)K=ܽZwPg$xԪ{{Lqk fLJ8DCu>p@=[%=#r\[+E^ΜEfTN0Oԑ>[)\kG܁$v" )IӮRrX`jK0bF-/rʣs箄ٖԞg(˳ OkFJw=n*˷cAU@^ .-"wv,)?ZA,yn'h(@rҎCs?LDqqN$Dӡ%AXK}yAm/SwJd.I:e'@#_%kPv PKH'(P;T 'AUVrޮG] 70YU =btAp!&r^NjP#O6E"yD- |xmRF(d bIJojYV4"ƂSkBSǠGVFiwĢws㒴;ö=~5nىH CWK#j [`c#s1R쾗N߶wb.qEn+^^b-._Rl{ 4\hS-kQ.$ui3iA4a;"T˯/@BeAlsMB!]G1R,@e:T.>-Y?б`uִDJlVCA3g  $AR0@Ӌh.Ȼ Et?CV༱K,02L.qU#sj>yJUObOK:p:Kx`hLyJCG #xcxi[)'A?dCz'ze't׶A! s}^Z!SRL/;r+G{Q2JDo >OnIYN-:tڹm)|z5qA ೑QBsKRSk`'¿Pl6PjVXS))XF3o5:&5nD\ 39PO]r`D h舢G6,.!XX+gj)GGː֡epO'[yK "&O$<'L>ªq(g"1h2'9lg~;LO?Q ~sn;j:m;4DYY&+H|{ GPGX c d‰@=ڻzYcn"Y []GF:gǢqwRGau[ˊI8A`b]6L܈ERM‾yq-yWT9dLR7I&{[@/6[Jus0Ju>1Q+|k_`:$TsŬ2dFxTp7E3!K!Y@jc7O>]-xAi^60RA M޵*''cS5C,c̚dw}BtibQ:ٰKi!`bBjTv:ʴ7hUdvj7ݍw{wI:HF^~K#YQ?)7}gW07[KjϦ^ot8!>va,5y!k}܄]u,3nHt4؞} ʪw,C`!_K Y}X#ԅ5;D/qȩlmJZs(4G~V"*X61@<ϯ;Xa6"|WI8\\+mu2J&x8bB3=ਏ| Y;8b8]%6$֊1|ས3QWsj.bts%傃a]\5X< $yLϲlqЋL>uoe~p+Ԋzj[OP#hEW@֞?MjVK:\Z6SM,g l'1Ze} wa:OF]~ܯ[a< {x= s׌$_6ՒyCo}ҰuG6D -(ރoW}' )t U)SJ ]K6G#-ZHqIEJ#i*6[ 0L RI_=V[SO/C}$I}FLyPF2s1k h75 ,I\ҏX+3Ȣ Bs]qḫ'?J;?~)<Q135&YVt ͻzI<9Vhp REa -`) d0|{Zg,17)P(p))#۞:yh)%ӌ/='x 擊{H%^֔y~dG #/=jU椦x)nk*KGgYB;ky< d/:%5. Y˔ 9TC]#Mi \o3?R Z~Q͸q}+!yi"/mp͒ufQz(ZP,`+ diVlp}v*`n 𕮩T꽸V;)fN:/H8.!x)4 Нqa7pJ ٘nIL,&8V\g!(|`+{1Aom*7'&WpH~ŘL8̠#4$]e##(bu 8D3ᜳ,1q߮rYV -ȜpmㆆZr[cDW)jZi{uP3[Q3KVNsJFRۏ)t}RW"#OEW'0~ę"^3%^'lNoQ[i&nBU d@KJR6j֒>L;[S"VDǖ0wtvF$5 k|vɉ \bS HI9Ew__J,5yf-ip\o0@BSmn[`$$C875P8)%Ev;q ݿSk>2lM}E6iQ/֯DtA2cp[ށ% 0OA6L@v(acpۤy Ҫ&2͖_)khTIƊmtʹ 6}KE޲5Gtz +E$R^/-Ũ2̭ ʵقyu#/rn3RGj|]%4]+pJY-&En61ax5k1Eq}R!A*6H](6:nr!FPw0+v5I`Q1QLI V -r &EI $EalDI3wA^{'@Uv;(/jh-)S∧ww;!2WC]+ତHg++<'7.ķU8jP얪L4<{ bA%O1̺htZ i/Ɯ-.$!Dn񝜑]nOM$ny;]*ӬRq 5ñsGFfY(mMdgC^{s⺹O-2S%ڷqCړp&\&PQgH1OYʐ2Ψ-'(Dtu?f|k4qGiH?zf[~"|# xV1ظH9$lgk_g03<-Ǿ_o̓(g&϶#QlG6{x/(*aE=-/7\Cgh"KmK?*C1/#)C71~tAB@)^ܒ 0C@<+FE$G?7Dh-:T뛩ВUB،$&mO%fPv>Dn]hTG/. (YJp= `FVT%t<9)"EȘ|x+l32eGZ zOYȦ\/o4Vfd~q"IAa %ILD2[O;fVZo^cIRBD4S<|$R⎤vuTބB"Zmm^[X(6l%)7#CPRMW646zj:/64O"yu5i67pqdtFW>8sC#") 2%؅%^;[u+5rYM n5p*PKL1)ér½=8 *~)ǂnx@Bsޥj+Xl),ÞBsN Ѻ@*d̩ } ~AmD_EЈdqzNGȦeVˎG+#ujŁHHh@ P4̛- /OTLi 20|_}r9Zݶ%Pqh0B T?IR~֨c!D"F2`;y.EXͷ Q >YR'OVJտMn=Eهy9,MڨNOKȏ60+yijJU¸Ls 1h0Mѫ ܸ;ᬹ2Uo jLmvkDˏ a9{1>f ʀ#I]ޅ_]_'aHQ,Zh*2FԲ2&X ÃHf~=P?SuP`}2eF?\h[ؑ[XQl Lzgޜ @x O4vqPcX/N&"FƊ?&3hy%6>:#iwSө~S88(#(ىKMaعrWF 7L{H}֤벅xbښKX̽݋eBaY@}io'1DQF )vi.]eCb.Wn1"%䯱&o[ؚrPrZZT47]÷NEԯpγ D͉'fHMհQO^{~U/ӻW2fZ,2wRXnp+ZF J SC=lMزe:'ݫ;=8{qFmv۵X|1Z.$I '^%l4 uBʐ}Q(6qT <'DXoC϶ 9jE>\Y}+%Zج`,j/edq Za?]LIiYA,jDmmnT)HqÒ߸BL+/,Cے =^_~KM7oŷ(Bډ_OU i^w~R?}ӷuOoX) *9J[V~5~&{ވv9O/rp*o-#nn7VrgxF2fjRl>uj9p<~DJ`+E}<*a6o6i;7Mਤj|ST]XnR.e&ZUC1%p[Ռ> Gat80eAѬ&!FJ5.q3N/lY8HvB&bl/d=PK=-ljrCEhr41L1RdvS+R7ҋ! \AڏJ y(cJ? Hk*JR`Fpw %u]x,a%5MXnbGbgL(pUF q湛Kd裩g `¸%5  ̒[сG,W,Y.,P^,,,ʀA@fmlNfZ_Lb;P)f94DJVc"0A2>Ye.eڠM'_^ %jP}f8m? 72`=}}"Kةy(4Sg^ ,ڕژ֎>f̙m/vppaUؼu ,d=Ev!"q$2͠A>OJfIНX-ލ$&Z"oDw|-T$#7Zighx&NCk|L˕Fe.R2xrCnk,eri*֋W;:5dEP<<BgjZMõDhPQ%fȗTtrDrԯ幩'O[#tib|Fgߠw ւϭFWi͝#ݕ>t{^wey%u.ϙae)x/7>y[dk(. ~0ح~V R -'؊^ի"C"[ ʛ"i&:R7Wzd碎ZdYwv#@oeՌ(0EFsKgR8f~Fih'{k 󿺴YB'\m% D 208%.FϽ>Uam3cite/bI"" =Voa!a2o5DyfLnbeh+/HR(R/iL>F(qܡ`h*\OF` QMl>2D~Zdp m5s2 II]ae9!C/ɣŔ19#bY癰2-duQP̢1N[WL`I B)ꂿ$D'JeўE˽bƪרz切9ŋ/CN-XKpxaL^IXzIF%a:هODLDz*k^۩nIL*$u{j9pN;tjf]{] *\.ra-o)3 y{ VQk6BN|ZN|t校l} {֝:/#NW75S, ͩ=)>qX^T /7W  wYmr،O&5aw{EG#"mv;c.&ܛ]bMG!.Htkr7/\'t4•<{Q7]9}bѰGV0)7%H-e.$(7SVl:qL~8-|FOC8~H[{[7׬CFcT&\7Mta n@&c⣻o4dМ 7JM9d)" Yr0ԃZxIBŒ%ʗUW|wj1)Wt㸐äj҈FɍcWV.@(H?]+\pDFcLf)z/a*QB;9"jiֽ}^[\B<}lIaZV}@m $|"Khj'  >LY| d4?Y6󹁜 W´ɨb2$j)"3hbÊFa+hzKړ(1 $O)j8|lCzvmn4SrLL;7>Ol拤s=kRX/ٹg:Yt=9cnk /H`ԑf<{p._ⰰuM@+%xI'ܝ:1F_@v "qy{t^O1[rxfQ!;K"?1򡦻X cG2oךGwۥV9t6hEC. e].T֣S2 Z8w=@k 2xx1F7BO fާG%ŌKh.^X 0A(1FgcFvwфs,9P!P:'NgzWZ0gNs*+ޛ7,ߧY$G0Iҧʧ+&Hnpv"] -.vFZS׷`0c7uSdB rID˨^1K 8XenkƱn$CzpE͚%T=QbdcBͩ[QGCz=Lj5Wo%MsP 8LzԞƐI9 !x(\|VH,ܺAYG0$ xJ<[CH 1 (7Tim74I#L' 8ImQf soKQWK W{C|ksx6ۥB~/ˍN.p@&p%Al'7,j8,`'i0l𓅩7?tYB R[pYQDԦe ,A4}JƭGj׉%ǰ& 8ǡkA!A0LБG=EP5յ&oVПmj%o (y>q+A (u7VM k< (8'~D˒Tzpq2,&K![2^eCH0 mMbX&`'6k(< 8, `M.pI& 0k p$Pڗ͒ BW n k ~(/{5wi{ՒxpO % s& h-|z }. @ oJM[ 8%ĥLhZ 8<@@ q&WD6dHYqvDXIA?+L[E$r\ A4ZH 8nzw}7&xR4`4A/ϒ`,Pi얃PjQ7& jK jX45M A%2N/[y֓z'h0,m~_~PޮEZ(6z#P}54i{<4@iG̾28M7h&J+\%BT$ aiz-BX%N#վm\8 Ve^>?ޮ|m'WMi?$5|]XPo$OS~}s,@ \z4$jik-< @ŨxbPJ@ӂ?q+i6pi o=(%eOxoLxg|jỂ\%44ӄׯ(,?rJJi-To@IYƖPY& cS Las/S|^.vZL=E? j ( ,py[lQn<Gi,XsZP_} 0ڿծ|Ys?k-ϯ{ Csq5į7o -(m|&a׸ j/<.kVPx`xЙ4v%%L]oIǩ$eɤ$,(0,ph@x (XZݥkm*..vi7Ő[0KR(@с&mvT[p㇘M]k%OQ*jh4e ˪ːXf[ bw3Y!Ae6c6u`Q^5K6\Adǡyt7'T>({q)pСjKR'i(yN=ˋN5S5SPCG- IQB )[|ID|@P?"FJl4b'kuǘZycdw1D ˝CX<]oQ!yFbUYEGEw=u[ᬥh],ag<Ģ``,,S]jz)ui )lUj(4TFxD5Y*Od <4j=TjHK"}Cʾ$M+U(FR$WƊZ{2UlBNyWG^!c̓BμDJܲ:#]$T%کrYT=f0m$0T,SYwHhPD%֪T{EoC!3QҊb  GR*̎FC!jI1 d4(i" ;K!ZEe*PU":7ʦqVAq`a[ҎUˢwSȒvO:r+Yj9dF*U]Nh`X8XtHyB:Jh+$(- W9#Y [ *"$F2I촩^"e4ҹ'J} Sa6-CR*$%8fH}jRK<$rȄf*].dXjE"*Fb31ׂ bB#T2]dO2PWS*U )gkr…os#4U{!HDnb#Nsqa-̗t f*)t:9b%XeqM #,6k]Sn]jl7$8>Bz S Lv\t}#C?`y{ݽ)bONnPe\HTU jc 4!T5@UNjtu#ι2ӑe{Y%)˄!_GscFqf'?9%*%3 LGG%jן Q%.%yfOFap>;WQSQVj-W ʅlo:-*).) r %"S># bLFٞXjkjcךe^ĸ̃(%fJM!T7"1 O76#VZDW7E!<:j0',Sb-qlƥp3<' ez'Zؾׅ!@ld HgNKNH [{5ihClf?ϙ Kl}= GÓL-E_CRj+.PQy"w)0ZڒyS_Dr Y1n/Lt#2f@fBP+IbF|O8U0efhHwFp) xT4 Ώx[ !mV $#P)>/\«SzvdzG- S< FB0`J`? !FNxkg +< [U>^9n/5Upnd~\B]`̉W#uUhmX7Y熩Їw^\b[DH~,)*6EVO"6T7E'隢D13Y'ʭ[;.vX=>;{LǶ|GYr:« r 7޷=ZER3&\3 %Tͱr2-Q=P^XUi"7EjpǞelJjvsQP"?4%tՁ+ H'*݉PW +d_!$bY\/|$Uw*"'VѱJ9ۤ;"rP")CIm(ݾo'cIŴ+zC_b'2=lBQ`Ix)EY6%8'x)zўXПH &C= VhX-1dpnH^rKߨ/0?|Ψ3"z٧H $N-e R t?-P!HmF`x3?]\ +<:X"H6񢛝 ƃ1VkĴ*;fz,?xB;TJpVbz0gCgI' PBL U[)tDǢ-_T/>5} /WpvBOr=t^L1mZ?$Sn\n>H䨖Qfti(jHhR=>;,nЄӵEjȴv/6? ωRTWLh"b4rHcr81Biqir=.&Gpֶ{#T+ IMFٓ2G5R_*XF*`Lu3AQ4|$2%TmcKʘm Ei,q3TqQTxM& ;'jE= Ӄ2⒕9Aj-e,S'dI-5r[V3A%Cn.)m]Ӯz&=>~R'$p3.?(zmU?8`P2a)?`EVȀB8jlrY%Iq3#>2d҄3bBb27T)= b 78nJXoA~f'$vيgA$!^ VWB'h+SzRV©G ~i0BPZэ9*-d =SEL)HOeRNUd4RL% V(#(b((5,GL_g@NPjD @bInecc.uDd.907la𤩯Y5I7dNȔv]9thTM)=؎k EhN%jҙM_ZH~a̩,?7l^ υ%3ȅ19xdv}YZ6IC&1aߪP@Z xF )2R!(VDR}v34yPFȫhJ𺍧U)aM\! by^NjHr,fĒXZ'y~H+*ʯȏŃB =D:@Z 0z$kXԹn$;*CRc* bZ, O MNNwh1tN$7$O!4}b+9 vfXbdr`9³KB$).5d<`KcTDR5|R GSOJdTk$9dRyQ*^Пna IBl3!Fvd> I#"1ؾ DsIegI$Hn6! fDp+NnOl]ꀌbּj*!. Ee*0b4խS ;-g "(O8qw,~t0H56/5=ĿDsfҏT&H6ynMPy?!E6ˠ؋RXPncRUZ吕1؅6g6t_/iIDΧX2zS51nDNd*wͯ.a$31JOzt= 9i,Ւ$ݩ^ײYZy/RL3Z.fYpcWД+ 'ܴ@1vBOHlQu2[oanhNڐrZ\niS1hf\HBTl JY˜r[=to݆W,_HbX^&%ĀUŶ\hs5BNJL,/ )B,x!Ķ$E@\d+VCH 7F xP-Vv 8_Vx1Ӏx.`H`\( 5Ȁ 8؀jQ X*(& ( R 0"{ݼ$b!265Ӕ1@ibB"vŕ x)yEgAGU~a% "4.(`B )tA`CjM&ek)NC+K6z(IXª`q8 NvsjvՒO#1pcmtqh%BW^gj破5\[Ej\5s6[v21 ,\@NȊ̈́*5\a@;SuZh3o':!詌Ț!lU$dbŴXV B:U7A=P1'v-ǜת[9Jq 7_ο"$-Vl4:3bs^>f_O> ʫ‰TK^Di69S:ZPmDq(V țԨ˘KriXj`` _LqNZ Ls$i_+%m]dKE dJfv2;#7VQ:G- s֪˓f^z랺RNҖ|#PVCԖJwυ[uSRgbCPjp~,rjh["4МL ;MWEFWH2@YcHEC fby*(r$?4b8JPiGz!SbX^@SSC vpvp'B˜c7HRg6lDG#"/Pe}^s|pjrp) &]/ẇ@b)8fyqȀ AJ"I=.Z:Q'TE=l &j𜨌 tR.??$CZd}VTs4v/J;pһ~L^,5aVĥa9 LK / l',b~*=PG1ԝC3!3[~tG۰D FDgBa"r2BV|/RbVm\u=m|QZ{$×ZT9_R!9sRv%.%x%0y륬i'hF f D33,'/rXMQfrǤI%dޡKT7EV$/=Q?4==gGBѐH/ɛ'vƥՄZ;;tupVv`ĀȵRbAy RU!1I[!xοQ 휕7U=?99HV`jHB~Gș1WJ~xj(~[`:zB4++ꙺF2j%+Dee2b*ДpVK,1(_VMā$ F|W3jԖ E2Ǭ{'X_*TR$s/7J:n%% ?!i|f2)(% BAj.5Eq&93pKIO :!Pf`+-ܑPF;/jV;0%|2bf";&dD護zΫMXrVTAJ-z6L#һ5Ә2^b"R91Y oWV+-3ViDBPj@ 񳼑X)h'eU\\3Y!A +z;b#r⟧.ptJ"&$j;i2s}E>|]=4'3Cǟ Z=o>8n$F]7]}3y`v S$录܌VF>) N/L9KKu.!LNTvLRHzhO"D5>cwޢ(L> LBDST?"O reLSCfĮ^PNφF,="v-QWG"^|ztb@B%%H?*)@͒<+85h30%l峲"Rg-J)yAѷ .5M// E!I]ذCKZkdOUucEW&Fb Þ4I\;4/2q`Jc* t!Ԅ/B`jVhDFÔ_=*v@vqTZ\n+YC7Adٵ()I^YzHRpyWe۸Οc"R`W&LS;rBow^ZGMiZON]{V{JED5e^ŢDdDHd3Aٮٯ~JXp([gaOYkl襒XU? TVxtWVz{D^z `JyDʚs{''с{+ KT`ɟKj,r-s'] Ԁj}r5Xo lP^@_ @ L20Jx}0`0+`pF@D p3 `4'.WfNɐ. V@@G+EW_7Y̡Kt-"]A.y^!h4N*SWM'jk&uL2෍mm{ h'w!SSRLhȌT' EnZ쾾Ggk z%"30~``7 ]Q< E‘Qc^P' HijS'FQl'9 ԋb-H%^7i(8$[Ւ֘h)6C,(TrD8v./2z O4;bvݝًBqF 1rb\;Bs 4 ;lVXVE/ gEoK'&\Q)赢 WA 7UM+sT%hi P-*;*1d/\3>NVRdRhL$(;"NDrLQ->?#hvf,% Eg"{F͑/$:!,598+5U5jrDػ=:b+ҲedISWڦ=F̸!ܘ.&+MW[$dN TD 4.g&0K_[ȑ[.oi,^ڛUwZ樭B:qvlr-3I7DHBe ,:ޚkE. bc쑖10fx&~XE"!1#@:9̄.)Y5I?<)kМj Oe2F,ټ Bb tT9ɹM/Dʾv\2QQJM{^H/x C4BSMC6Ryi60 ȥ2BB@QP^x)XBF,9IPDwV'"#(j~sV+܋j+M|l5>#)"6$'yܢV6^52ttjT#]邓ɭ*ܚK~HfA-.*j%`Z-KXREv%יrm$y&$[ފt#ӖB6)M<"؜ AXH=Pr0+[@` /nnhIwXUSgnYj['s)I.*'pq3d IB PX3RKa6ĶQ"5d/]r*=y="GH:2,*D,B)@ihO8[{zjQ`0d`0ԠAEG}a(1 H!brHp "0T@o;Jz'09BhP@ n @%Llmms-1.1.3/data/samples/waveforms/w2_w-wave.flac000066400000000000000000000147501247673406200215410ustar00rootroot00000000000000fLaC" pp%{;}6j]Hᢉ<@HpIu8X'CU  _g*cܜ[CP-ĔY Wq()'d%D,\-gʉ!-KUUshZ/Tǘ޸B e`pA]ITC mޡZo/ P@PcK|0HJ,0YM,_'0uMG`aaS6&kj^F4 z!,, W5EH{+(I^'T7{rvTmYE[T5Qqh 8&qhZNmmR"gA$"B8x\[l0$]dcqhjP 4H'y934nOhLT.@ ViH|5D U*<60 j.$P.Y 8Ti5B/ %^!@$nMP Xk %A}?yx%CzYBqxZ BoM., y` bV`h᪶j ޒJP[q*&-OauE4ljz@ ^&7ix$հXу\ua,{LG -I'ynA,nW[, 1KA x=vQAO<%NJRIH/w 0K\b֣QsbO !2,35ύL -ۇw MݭE4e sgaq-LX_iCJ5 9MPJSeh-E6\o#ߍi4@$*]xDn~<]&m>}fu3v Ei*2Q+?zOJڄZ %%O 4`^jc€P,`X5Mhz$K%*=I_.0,*|enY% p;kp-E,n&ԽM=F_x4.=յR*mgН~'i-0C/5jA`Jnδ Q*`]6ai݄0< 4xYH5 ib\ 4sWϘJ-ZYr\^m7k QͦTyc'7OQ   .*`:  && >Fnz=i7Fu=Z.С (H@XliIډW'+y.4A=yƔx=T$PЁ' 4"!5rc<IgJ6"bbi$yO멙XaCH/8xƩI$#{4QPU4$U|j qɄ i _J\J5IيOmH@xPHC!Hfy^M-Ii[sy(,@lnmy#L=us3 ,'$*}s8&XyKG @n&Lpph`Y͞$zYBJ-İ񁣆čF%߼7aya.,' 8, ,A5I 1D٦76coaj,@X=ORgRmET''fTZPY 8I $`,8,Sf6?Q9Ac kL=͵ymqH|agk7 Q9-Rn?A(۟ƸzPX$@HCJ'b{sK$ AlJXZ4;=1.%Mh.R}Vbj6RBwXyD !_J5'% (&ocڵ>s2n7GIi=LPLi)$.}Z # ]Zx/̥N~T$7Yԓ Y .@B~4UV"6HҾ2g (X &ӍŠwryYg5L@RRf a*5彍  Z_E\4PY% (TH {_.|jSu#%]fIkRn^Tx{\0\hL4da(&p4@XmPMji'widQ3+HIL`'JQh-4>Z a}&~WkXF<T_6-tHp.K&@IĦI KxAv539]~"v0jxΤϤ >2OiE$1e%HbW6]p/gVйlI(Jnjk 0ء% O}(`63jMa~6?bIQ<%4%Eg~Z][{ M:iyAbD,@YH/S}&?:hR~ >vSDm.ߔƯS5bFߧZL~l=q;{д%ķt[pɆY d5|ץߦ*~7J-ǡsA' 0,ga|׵M0{cwG;+ǠTZKA.O`NPH7Fq˨VgH<~(*h/MUQ~ kpӇn[yM$TLm%9A(3[͍'8K{w%G<`,8q3v0Zh&1{?{)g wǩ{ կ6;'vƐ$sZ@HP ~/Co >-h|geh< bVG>0҄iP洁>mnݟ'p 67im5rW]7йjq (Y&p- Z a<xܶne`4N6P4`JuB6q),TYmgmGTgQ^q͑AYn[2GM(UoF4GkdWX*@N1g zQCk8ڝ- "O-R>0[1k']@cQUKω4GSU7iݷI?"-:1#OO&&\YD 0&`7y(yD_&)noh$ձ3IcIJ.&f5 BT''ydG7.#k>PAg͉q$CzXYǻuŐ@hpl{KP rPlU'7 f\\ 8A$q.䏿MgաC,‰8-V'PI}Kk.5ƜI,%C,IB8Y[LvpN$?3ѰiG 8hX(( ( 8( l@l@$$$$L@,\@\4 i-v|_mqHK>5ì?γՄN 6v쌧 n. K -EyBQ~ /Ml. ,=oPˊ<*_.?>hH ݕyL.P,nƦ_ X4Pi= ld [%7`C7 Qyy{<,dqPeR4ZtL&4x=d޼j ŮexM0,`X D |$C$'@Rm(5ϘLgiQ=Jk ,=F!=tAX ,AOz)ZSw[ Rqhܵ7)nmbI!kHbiD4pHښ ae.1*O%IBѸ)6@!Nl!B\X}Db-Ɗ,YIÃSXe /dev/null; then echo "Compressing (UPX) ${APP_EXE}..." upx -9 "${APP_EXE}" fi # ... perform any other stripping/compressing of libs and executables popd # figure out how big our DMG needs to be # assumes our contents are at least 1M! SIZE=`du -sh "${STAGING_DIR}" | sed 's/\([0-9\.]*\)M\(.*\)/\1/'` SIZE=`echo "${SIZE} + 5.0" | bc | awk '{print int($1+0.5)}'` if [ $? -ne 0 ]; then echo "Error: Cannot compute size of staging dir" exit fi # create the temp DMG file hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+ \ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}M "${DMG_TMP}" echo "Created DMG: ${DMG_TMP}" # mount it and save the device DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" | \ egrep '^/dev/' | sed 1q | awk '{print $1}') sleep 2 # add a link to the Applications dir echo "Add link to /Applications" pushd /Volumes/"${VOL_NAME}" ln -s /Applications popd # add a background image mkdir /Volumes/"${VOL_NAME}"/.background cp "${DMG_BACKGROUND_IMG}" /Volumes/"${VOL_NAME}"/.background/ # tell the Finder to resize the window, set the background, # change the icon size, place the icons in the right position, etc. echo ' tell application "Finder" tell disk "'${VOL_NAME}'" open set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to {400, 100, 920, 440} set viewOptions to the icon view options of container window set arrangement of viewOptions to not arranged set icon size of viewOptions to 72 set background picture of viewOptions to file ".background:'${DMG_BACKGROUND_IMG}'" set position of item "'${APP_NAME}'.app" of container window to {160, 205} set position of item "Applications" of container window to {360, 205} close open update without registering applications delay 2 end tell end tell ' | osascript sync # unmount it hdiutil detach "${DEVICE}" # now make the final image a compressed disk image echo "Creating compressed image" hdiutil convert "${DMG_TMP}" -format UDZO -imagekey zlib-level=9 -o "${DMG_FINAL}" # clean up rm -rf "${DMG_TMP}" rm -rf "${STAGING_DIR}" rm -rf "${DMG_BACKGROUND_IMG}" echo 'Done.' exit lmms-1.1.3/data/themes/000077500000000000000000000000001247673406200146755ustar00rootroot00000000000000lmms-1.1.3/data/themes/CMakeLists.txt000066400000000000000000000001071247673406200174330ustar00rootroot00000000000000INCLUDE(InstallHelpers) INSTALL_DATA_SUBDIRS("themes" "*.png;*.css") lmms-1.1.3/data/themes/default/000077500000000000000000000000001247673406200163215ustar00rootroot00000000000000lmms-1.1.3/data/themes/default/add.png000066400000000000000000000016771247673406200175720ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs B(xtIME2']LIDAT8˝OhE?of~n۴-5 J/TIO"ɻD^Uԋ[hEJz([j&jkIdv~d[<}ͼ|0Pe2n#S_yqsTCx>kg_[ R<:L: x]ƻB/,nb=ݭ'c$ƈuâ (mr"pJ @&RP;~G$XQhRE1NVv{lY,DH#wI)f9jKW~9u}{/TB)UĔO"AtT4GZ'h Z3y~]?o>v|PD5jPP @ N?r -ETQ.qɓ,@ D$h]L&BJ)Ua_6í^k7o/4 ukyRD+TLh=< Ψ(CU2\ؼz,zHL8PܣbTmj6A%x.,O 8*)Th:@vZG~\n PR>ŰS %hTaūxnyw;C%n1þ(Y Oy~RƉo&p Xq{b\T /,GMEIz7-x`C[[2c"HZrt#0񥻻[zcs.1;ӊ앷jS6 X_T]i[DsKf*hAe@8<0FE[NK[O؆em]IENDB`lmms-1.1.3/data/themes/default/add_automation.png000066400000000000000000000014601247673406200220200ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8[HQ?翛n.U|)i.ujшzB]|H "z QPQsAvdBp2ISPns4r/~ZUUßX!EEE%z㠪[m-;L%+]xi6@jєyWüaA3-C{}icWWWl:1<<|_*^c פ8wy?/Xqqq}"hB @rII:#7Ya~t:=n̽ W+XmjP>eɚtOysy'0Ɔ?`R j̙koV+B-{oXV#is ;vװ`Q~gMɀmaڦcf6Iwj=nXlkixۉ^orW?0]yvH;==lLUjK(IԖ`h )?LRh4:3ÛMb[;/y^S~J^^>I5Fe v! {y H-LF;yŢ\.dY"Z{^YrUU9u^Q@/22;Zg͵VUHmܿ2L&Ezݠ ɲī*"`ZY>/ j921"ZPAq32DZf?= FGG;:s|^onb|kc%>+͵VG=effУqÁY& W޽vѨL&`0dnt:BP~*@Sy,p,--ݝ6VH5Ƕ` D2q(8!`0(G"5is Gn-";=E)8IENDB`lmms-1.1.3/data/themes/default/add_sample_track.png000066400000000000000000000015071247673406200223070ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8k\U޼13%8Z,Ei3bg@GQA.] %4.tg3.Q0h 3L2}ȴcs;wU0_ rߔp:swJ-ԟHED>{hr>"1xCbx`;E!76Aǁ0 ZXX1vx("B= ޥsMIGa7% WԈ L5WZFi<75*0&ont&bC?zoii鼪^;Me|y4{(لɲz.I)"H֜yr10zy)KI]෿nHn(&S"RTޮn"8 NL2LpcyyPz,jo6YkkV'"]`~e]>셍'PRT#=o|< 5_aOx*gj .~<ƴֳYNgk!^-* !ԓ^)eض=F\!lgAֶ͖'mצ͕!k qͳ=7͵i' PXX?/\,@0ЕmF?_Z/d!.o,ΒR]+_ PNeI+II_p*\TB?+%-%=G[IOUI@$}z罊SS~¯=P sMOr ʀ{36<0#bkmOkuV;f\[4J8sni&3)#~i_ޒ9 ID4GIENDB`lmms-1.1.3/data/themes/default/apply.png000066400000000000000000000014231247673406200201540ustar00rootroot00000000000000PNG  IHDRĴl;bKGDC pHYs  tIMEφiIDAT8]HSqwu-؇KYL?.HbMUvUtEERa !?nSMav3"/-O^w䔷"Z3\Rl59ꎸ )1eo-ҘEObJqP;-R: 7ZHW;^#F,!WoWgAo͡R|ɾto맔քj[$S6,\D "Aa&jZ-k_UU/s-J0&=faG=bnj=v yYLG|<p~sŽ# %$`ҩp,5A_ |?Ax1#9GՌ ! ^'?,l!!'&wTGW&履1,GL4f4Q"s ,t/؇gHf;Nhh|^ULrDD2% $0IS39{VCm4_ΉLͬ/y,+`U)dhϗOӱKNDЙ^5pT#{V0u]u)wTRָ;K<:dj0:xs7uw~qIENDB`lmms-1.1.3/data/themes/default/arp_down.png000066400000000000000000000010771247673406200206450ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME#\IDAT8ݑϋq_3ϳ33e[rYɖEAH599r!J$6Ji1<3|)?wo^b땓N}e5 %8F]HX6<̜E=s' n@}Ck-kYZ͏PX*;tr%La;e}{iXJ$IXdf SkقIǹhS@zxQLZH 'DO{z2@.ȅ ?fdj|ej>~ ӮrocyC,φ 0w.pmn-&ڊ^|xvcKeltX9`j\ml&VZɿ³SK7hFV]#ܘYqp.|Ƕ,ϵ~[j'BMIENDB`lmms-1.1.3/data/themes/default/arp_free.png000066400000000000000000000003641247673406200206150ustar00rootroot00000000000000PNG  IHDRabKGD" pHYs  tIME 0e}TIDAT8œ; g ҊZy'fP)܆2 /12t | 0B* $b%6c 2X& -@o@Qr7Yj7 [=װIENDB`lmms-1.1.3/data/themes/default/arp_random.png000066400000000000000000000007471247673406200211610ustar00rootroot00000000000000PNG  IHDR7bKGDU pHYs:tIME 4e xIDAT(M?Hq*=kx?||'?Z6<8LqDǿ?VXtLf-\^BgzT?lo5O%5f=pIͶfuoIw"Q 6ZqZӽ;OڝoԚHing,ZY9Cni2"*sRo9lJmD9uÑM̈ ϣ1=2l@O"g6>hƔDw ,ْ7_Cǵ0_qݛIY~l;iΔ4ntϐ(ڭFOT.mCCC&bژg$߿IENDB`lmms-1.1.3/data/themes/default/arp_sort.png000066400000000000000000000003321247673406200206560ustar00rootroot00000000000000PNG  IHDRabKGD" pHYs  tIME 09Co?gIDAT8͒1 E_ :yC!DU$L&`67[o_ET5D QHҋΏ. CtJ%E"3IENDB`lmms-1.1.3/data/themes/default/arp_sync.png000066400000000000000000000003731247673406200206500ustar00rootroot00000000000000PNG  IHDRabKGD" pHYs  tIME 0,.,IDAT8͓1@ RtA*^/IR, ֙X{w ؀XI,^ s,ffdڔ/AT! zo-ܯĈl!yOCxCYAyv",IENDB`lmms-1.1.3/data/themes/default/arp_up.png000066400000000000000000000011471247673406200203200ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs11(RtIME|>IDAT8͓MkQdI%Mkh+8REbW(Jt%"t HŅ\t!T(P#Y\DRB1$M옙E@ٞp8ql-5pe֮@ض頜b3SoӣX=o7P̹Hl0e>FC~@emWPgHjfrN+ƒRTd?n~g]AezN,QM(Pi5ڹnOk @̀k1V|X=0k75I-NcX4X*x  6b(/-g{'JsPWw2HŻv#GlYt@rEgg\er1'R^Iu LٲЄ5'k9NQB'ڕzU|\4Pe˃kᖉEBJ;H5}=Or/s046Ak0σR A ٨ՙd3+?߽.nIENDB`lmms-1.1.3/data/themes/default/arp_up_and_down.png000066400000000000000000000011121247673406200221610ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME yBIDAT8˵=hSaMzS+bJ:(E289APujA'!UPREz$i4A+ւ;p=7Gpf`wgY-lB>%670=:$ B; /րGCcۂ$)(~safDଜ|x#bs+ N ihov 3U>`J$ =[)_ 1=(7fWtkRK4N>~ 4oY~IM IENDB`lmms-1.1.3/data/themes/default/automation.png000066400000000000000000000011121247673406200212020ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8c?5*;U dddd(ycffN&&&VvEcRx88yL%Dcc K5S~>o濗oOS3Cg MLL>%o:O6 20pq 3-fԵMCCCi|FFF-&iy=P0#3Cdr[4;u===KlYX420002001100`SCZx% bddd"($YV%R#cR\v~A&˜-($$/a` D$KWIJd>x䅄z@lln6nA/q)K!!w۹kDBY1\H4`bc0bt b BvfFFJj݌0Y` UIENDB`lmms-1.1.3/data/themes/default/automation_track.png000066400000000000000000000010071247673406200223710ustar00rootroot00000000000000PNG  IHDRw= pHYs LtIME &#kIDATHc`vjÄEܼ@XX䍩i80#s%TDEܼvOXHHŋ(qҚ)?w7}7짩!b111DSd/0CNb6M];o400gU000haiy=P0#3Cdr[4;u]]]Kl[Z72000200apdlͿ_WW79QXZL,J+^ȃn1 #cR\EӲg*+?yr\ nvn`XDB!t%J惇O^HHffa@K\bH]v#PffVzI "T1YGGDfߡ&T_Jc3fWiA\~oG,Lfc40 7>@2 t: ǯ`۶`fRl3NMuݵXzIQ3"r~%T\X,&ؘǹcDde|c;V#/NZIENDB`lmms-1.1.3/data/themes/default/autoscroll_on.png000066400000000000000000000010411247673406200217060ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8ݔϋRq7_"+A(Q.jp?U\hmZ:i1)8( e!FYVH{4T[ͅ =AN!Gi Րabc@MR.+EcKumou/]<}X~ؽ].d]xu晐-҂~}K}Vܙ}R&iX)/['R&1怖a`0Ku5[^B|dfV'fFqX nFoaO+| `d_w۝Q#Y\($i#H@U:@Fr hÿe<쯕6&IENDB`lmms-1.1.3/data/themes/default/back_to_start.png000066400000000000000000000004501247673406200216450ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8퓱 E?-Iq2d/u!`4t4b% С̌=s/4hc̴V97RF!Dhu^{/s`Xz|&^@=^sܧJ3+Dz5uRosf^=Dh›/$_z)|qtcm$XIENDB`lmms-1.1.3/data/themes/default/back_to_zero.png000066400000000000000000000004761247673406200214770ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8!@E4.Q0 Tq"q,!UU%ݦioLv$B;Bk-A11ã=QY麮Ԯ.VU-RhG( +URi$4ya6U8>l|qgUmH${.$x%*{||)cjIENDB`lmms-1.1.3/data/themes/default/background_artwork.png000066400000000000000000000012611247673406200227170ustar00rootroot00000000000000PNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<.IDATx[n! E ӥe;bGeiywعR)`CtB?u(A~$,9m! !<1 9gYu; "Yw.Q-p]Sq[=)%1u;[Vr-E!Z֧w4nJɍCGWGzwSD>pAe' X,5#}$-w<j˲WgvF.^#oH2t5}`bqFqBR9K{CTUاN33Ѽ._y"Kx'* C B ;}]s19cmHw:&kO'FN&FO#zۓSWQmT@ @ @ @ @ @ y$'2;̱#R`;s,nʱ8:bV,9gʱkg˱%ʱ;bn _1"J Bk5@7GXQ97EX,wzX\ cq)'B bNl9}L9EɱαgA(A(A(A(l=dIENDB`lmms-1.1.3/data/themes/default/bb_track.png000066400000000000000000000010331247673406200205730ustar00rootroot00000000000000PNG  IHDRw=bKGD" pHYs LtIME 1ĨxIDATHJ@OkhłRHAۂŭڥKo#ApZuQ!ڀ&N3QvSQ7.Ļo.9?_޴mR0>_"l ~e{Л-GqsU(gƜٶzht]lf4 :5)edufVU3J`@7%$ 0WL&ǡу`CcE/n ý}[cFq~.Eb8}9΂W1bs]7T-a<⼟:jճť%b|Afꍖ9ȼ.ˈ8 s žCR{QdTu!@ ȼ.ȳCuD(,eQRC:%IENDB`lmms-1.1.3/data/themes/default/bb_track_btn.png000066400000000000000000000011051247673406200214360ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8ՔOKAoeYHK`j,Mzrފ'wCxXQHTy:4F( !w,@=ϒ7׺C>o!` At`e<7^Z)Ib&݉5caFQ$y^RJzoT+ƏEF~)Tqk׋Nѫ-4w_lnj0/K]#nQT3ggz=L8yhrhI<4fR* \_$fr9Pe5a=B'rNf##IENDB`lmms-1.1.3/data/themes/default/black_key.png000066400000000000000000000005231247673406200207530ustar00rootroot00000000000000PNG  IHDR %sRGBbKGD̿ pHYs  tIMEIDAT(ύѻJAoؤ/`e4>`BEds,f6x?7a! ްtS/%8c(aTm8q;5(dF]̷݂hL]3 {Iʥo&}?gv3׹e7=1g0Bw_׻V8#]VZsa ɍJ؃;~<eUh(IENDB`lmms-1.1.3/data/themes/default/black_key_pressed.png000066400000000000000000000005341247673406200225020ustar00rootroot00000000000000PNG  IHDR %sRGBbKGD̿ pHYs  tIMEIDAT(ύMJC1疋?BAԁ"3gN݀ p5ѱ Pт9njS{) {@°BBx1=p|ؤnNZÇG0/ ,m׆L!VsϮ͙J8*[jpaߕZ'mô[ f6SʰF t _݆K_k\o@IW>-t`HVIENDB`lmms-1.1.3/data/themes/default/cancel.png000066400000000000000000000023571247673406200202630ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYsvv}ՂtIME4$|IDAT8˽MlUvv[زv`F+m(hm"GIrTJA&Dq0- x0FL@?-e<x${̓g <f0sgxXugǀ0]@a]@`F#;y؍_XWWT΢75s]]6jƩ@su"yH?soW0Ia`$Ϭ]t=l@3j5<Ң̾v΂@U?2 l[zE=v;] 8@1ʬ0j1s\dZCYIENDB`lmms-1.1.3/data/themes/default/chord.png000066400000000000000000000016041247673406200201270ustar00rootroot00000000000000PNG  IHDR连bKGD" pHYs11(RtIME4+=R(IDAT8˵OhTWf2CZMmcҸUu(BlZM (+k"**ҝ+m*XZ]b# Le2V$̼gM{w9w%gV7$ph hz`'m\.@ÃkSy 5`K{:\p/<3UPo#V$rS_l١ZU%V( %f 4 hϠA&/,ꡡpAD@|m:1Iub̦;!y>)d?O~mcZ*$]7\p@2N4֢2p1u43wNo;-%#'DQ,ݿs?ǀb;:s ݌uSʥJ-'%w?Ǭ2 )ajEr@۫B7l茵>chXn5`L\pyT\I!ރ!oq>ξүv t|/S=,#l|d|0p|Ą GSׇWs[(;[z5I$$ѷy{ÙZ2>| Ocbhj2OLțrkЬuľ) %5MZLh2v=[5!R|K*㓧 t-&[+7^!mЦEsFEdVIENDB`lmms-1.1.3/data/themes/default/clock.png000066400000000000000000000025771247673406200201350ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8}[lUg{/{mA.mH`5 Q|C0ФQ㳗-H"m iRB-mv33>]dr2_seYH)u*9vѨFXiFFUb;AkfnݸZKYEr`SixːR2oHg1͹!.^d-8{䲕xʜ[K Qi |~?ysNC+@ZS(eQQl\Ç{+EHEE%oa1+}Pԁ%Z0狧o׬m~]./11C>qr8 hZ@X-~e-58peY`!XēR߸QQ屃ݴ޼>0yA/^woJl=Ht2y jYԜq˝n.a%;20=4-=51~xG %PMVcK)㺮9 āe._w-TDIENDB`lmms-1.1.3/data/themes/default/colorize.png000066400000000000000000000026451247673406200206640ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<"IDATxڍ{LW/_#n)Ee40#ё=9$3@]|$i NPl((-"BP,/,Z"Rݹnwn)Jw("Xg/I7Btƍic^J~-1KK[D"&{?6MZ[CC=H$!v;]nWRL“$-H*`1FSS!HxTUUőPdt#3W<L(VP(9!EkkE\<ƗFP$zFq"ږT*r###mmmna\$1wձ߽{EDFP2l9Pt"ҎPzվ1IEo >RW"h.pp "∣~"fO)Je0ktY ;IC.}$\.&N 122ł!C=0m@gP~5M|U 2V;Ppj eE>P X}ΊzKlbT9͕+4 Za<:0  1ލRՃ$]`ჷنs=3kz @[Cr["`&` ,3xR{:r#4<#.^ɟmj1; kod.<:Ļxݔ8iH`^uuXnVBb)0xä u^Ȏ[͌b"8vJ|Ş˗wj4PIO˱`VGUЗnF߃C05 WCYR26WPnxxLPoPt:)y50#TuwCW-/vvیsuLͅBoee 0qGg"T0|2w~u<ԜTz ^'I].U]:wmzF 䍉DIo}RjFZ3NgXettImlVЧII!6d޺GGF&QӫyHX?Y I*C(] J77ܥPێgt}X@HHᘘH 'Ndhڵ ??Uڶm17f|yc1CM3B'ؿ oVIENDB`lmms-1.1.3/data/themes/default/combobox_arrow.png000066400000000000000000000004371247673406200220550ustar00rootroot00000000000000PNG  IHDR 4IDATc`@`*9K1 I{y l0 |Ƿ^cPbe` .rbϏ X=s￵/mlĀ30Uڴt}_֢A$@w} NaFvMœ7wf+Qg@m!fԳ2褗Lc` u LB^[ԆAn/TI/QT&h!r?S]IENDB`lmms-1.1.3/data/themes/default/combobox_arrow_selected.png000066400000000000000000000003721247673406200237230ustar00rootroot00000000000000PNG  IHDR 4bKGD̿IDATc` `.̊U4!mDf)nk_zݪ+M˹s=? m3c``,ĞV@+:xBǷYz9σAb/Pb̵qN 1ڋ 8.cb`!=DA8CטE IENDB`lmms-1.1.3/data/themes/default/combobox_bg.png000066400000000000000000000005611247673406200213110ustar00rootroot00000000000000PNG  IHDR2eæbKGD#2 pHYs  tIME;2IDAT8˽U[@",j1ѺZtL0.bBLPJp&jX)0 gk! (HJx36ldw3D(]nBq'HP&*::>Fm ++/`H%皭)ƨ恠: &Mn1-)QwSj@=ѥDLXF%P)6ւR2*N1BLi 5áK0H1NRlR;3dT~u2u~7߼JL}ǩ}Mg%Y[O( Y_XʥL]#&DJJVálicsR3L ZtkN j`y-P+Bm5aĚ#B_0g3|X 7[ r\PFPؔX4Eܼz66Uk6S\3fv/2P$9q3,y^%=lf mz\;>Ѿ#j?X$HrPAގcx3_ b !zЌ8>Jz SUgy@z Ko0kq6;™OkZn NPIN;8?G8Ǐcwpx\X]8s~[WGagX~Knz_~=aPC=qf-ơHuJ^[T;cs+""~`#s7-OOW| #+w=􉓧?Ϝu_XWeϧr_o~:O?ޏ.? 슻sʑ[񮕕ct]Ǯ]BX߫{5^鏶sg66DDv߼':u}KKwݼɇ?xW#\\C| |WmRΩC>?K b|q}ωnmK{EDˏ\>ݻP:OJf픤!jl =~m.]||NϹNǁde9oGm:꺎 L72>oS#۹hO{ֿշծIENDB`lmms-1.1.3/data/themes/default/controller.png000066400000000000000000000024051247673406200212130ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8mku?}l;N7gh\f+2M@A ! w A",DII"5= 55y}_/&[}/$`IEqx4 e"ĉ( !i!pllMEQvt*mV<ԉ_Yv=oQ+\_.4Mso2rS.IҰi7+G~,E"òb@4 Cլ1s">ɊW,_|ǝ`HNUϿR!^~5q+3'0tLCQ? \K"NZ6j& Ke`Š4tV|z=}K8iF<˙GY1::QUݴH3r"xOޥ(ha^[ˁPm,K:q?EgW"( V2%S~`H߾vxM04 f]7 ) Qq5 C jٸ^,S}_=8#OP5@-oZTj:$>UӴ¦ ,2 L@4$Iu]|? B0Bu^~ln:4Ӣeיre!7fKZ.N˝/?>ݎm7q}o.J(""Dr83 Teg ja7tœO?3kaN%0$ zկj`JrEnlv-4]X(p6n~z>j&TN'OⵚܘNNNJXlܹrc&#WvǞH&ۍ= J +A+~qfpR޵ͺөURWwY"A9hsTJS^:w!!D0|rsWfLK$1kǮ׸9}շzҟfyXCI/:2r2ݮŬ$a6v]7Q*]?\( m  lL$ےTi}$"!jLkB\8N 8(8soM~HU` ,/]7g4IENDB`lmms-1.1.3/data/themes/default/controller_bg.png000066400000000000000000000121701247673406200216630ustar00rootroot00000000000000PNG  IHDR g&PbKGD pHYs  tIME +]kIDATx\Ky]kw+ГX 2]P!RqQ\rUf) = fOPCJW"\"H0He{\p&@޽XZnK?}N+Ǐjjw`ZaZl`1 Z"_A|pӇk]Z 8.7o ebOB`a`9q]f^$]۸tCYOg>?n~7ė~c$Wػ{tXoXXV߇=ZX  IՐC?)^/2tIj䌥|D,,)p"`81{/`|!`vwzg-]l^η-M:X.z%Ơmuq„rp+ł1jVG)3JHD⑗ Ic'>=Xr= 3~Xym#ulLRZtr,0mi!{.豣x{OK|YȑgH˗r 1XpkjӇGB<253܀`Ov+lbM *L&Vba얶7Jϖ,H!sӇIVoq˻ #Ôi Y0 iEKnEk`% 6Ϲ1S!@LAbT}u,CVs&l|]ɖ'u?X(#9Kp]7v@yV3ǭ3#9?gwN{~Ŧ3ٝ'iX+ቤâs/.aF֑i4hLnCw0MНm 4M A4,cG&NfMaš*ݘOe>I!HciP7Sa%Ü$(*B6u/7$[:Ne:ޜsp5|8|0N C-ظ6=䒂vbi#FЉi+W p'pQ|e#`?8@`Ţہ{4kya.ڝ8τTe` LejXu@'NJCmƊ$>ܠ2P9_ǩSp,K?ӏ1n''V {Q'j?ˉcG;SO=7xg#-aAt=͠f۴ bњ0P2x#N搾0EݰPbΞ='|^}U?ۿm[ D+mׂ`ҊXخs6#r \k(Vt!IgP(*2=S&SHXGO% w'El*ĦӨ@D MI r8dɓh.\w_ T)AX_ ;FBh5.f#Y쐂3.]I`o7ǏŹspy|v2a=<_8 Dk^oFa;.q. $510x S6`@^5+cQVD@ě G#~]QQ=ZjdRgv`ifsbB)%q֍[?˻<*2I!j,"1EGGŋo +16I;1\{YGyCGgFS0;hx6L(n25M #%Xt`pL2OsF}Yӟq~ d] ې:[-] b?T 4d$N|TsvyLzS1bLN0D$čvK>GqpǢ?O ʐ*=sƌPKFqp }rTQQDDk1}cŐRHJI$[|JBIKR#bLَ _MHKJڑ4Ni =Z KDVgՐ?LZ8:jA9uԱJ-@xINJPTnR;I)EѴ(W Nx24/pI-UiƟ9VȉuALHҔguɻ&Μъ "vձ!c熂%gfQ )Hۡpmbڈ$Êuvo!E`=K}ߡtYʸeB C&F,qRk2ҕ{[?8~ji{3[)"}Teb[IF$N1UZ]LH,b.jc>GE=]tiVZV#;1e6Q:AƘ2$6 ]ԡ~*3DeE 'IW^NJ)`?t Mq]Cޢ0uRmR4SM kig+ڷu/<#܎.,^[bPd:j 6G d~BEm'D>XE]Tp̍#僾|k{ |hmKDynPډzM5)v]8Q8F#ވHh~i8j(lC0zkw ШLg•-+c5REeSL޳8 a$K*& <~_ҦQG{""lBJ{q'DODy%ίKUzͺ=Cnړd {ԣDԾaLs&7J42pqws $t(l'?dHB{=|UU#7ca1lxmdL0;ch8Ks&If0_g35Hq|z_YpS#R+?ԷC8NT }kWm΢m(mԛ)YAt*"S0f>V6ƙbZ}#ek5=wJIzdFٮza e;ݪlGm\'}k-frݛqڮ iݻϯ^?|Y,h1/IhTc iflTP/r!Ha})=K!blGDGBFr)͔(Cz*B`JXʫȶXVY:+.%]&XĐ'*%ʦ^op-|tՍ;k\~!3itmg 0,qpt'nMDfj_ɧDM>cdV#959d뻯>ٗcW`='w~OZar~W%=00pE][3; O-?›\wuKqIHYN[fv {Gr<>Zbf7|&il3_f") 6!hfH>{FƓ̮=%$5P} NwȽ|jfFkMáv (qg3r/l- 3\KZM&jmVWϛ*ۑM8p'룬 =| Ū*ME1I)#ډ*EOeԈb'eE'El#hE>o6lv+t1; -yꛎmzPEzGf8 U]kMS}ߵ x5TZ/,IENDB`lmms-1.1.3/data/themes/default/cpuload_leds.png000066400000000000000000000016631247673406200214730ustar00rootroot00000000000000PNG  IHDRVLsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<0IDAT8nGEOU.kQP"$H>?pB"%{3]UyevuGS%//[~ȝ%V }R_]q]4o.NH֝q>yt04. ߟ0}<> 7y/~z:+.7/i@ė>&|&/F@XG.8+I#PkrJw6gHhkNj,*CnNzzrbyIENDB`lmms-1.1.3/data/themes/default/drum.png000066400000000000000000000011531247673406200177760ustar00rootroot00000000000000PNG  IHDR0 TsRGBgAMA a pHYs  tIME;,DՇtEXtSoftwarePaint.NET v3.5.11GB7IDATXGՖN@y7SBэOqm]Ј3i|ƅ+3 r; $_z{f9ǹ-R5FaҘ~mU~-aXl~-!fUPo*@|tVa޻h2gXC _ӾfS}Wyq&1l7Z]eLx|^h{sHuZ!" }҉&Z 5\[ %aܥKu8^ /%'4u^_)U(u6ֿ)" 0{z¼ƀkkʶ@;ٷIh ƹL" `I89i?4QD.M?N4tWMj~ ؟*|y͍jnWmwb΍h]2/[?ĩ8@4W,ٴIENDB`lmms-1.1.3/data/themes/default/edit_copy.png000066400000000000000000000011461247673406200210100ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8AmRBJAnmwHgl-DPs"pqgfw 8rΙYFD!$9ZkdY,ːz8%n9|sxw1Ps|qUv1ޔDa1ZUK@%9p]<fY"yئxh-*Jscs@;{kh۰E=ےaZߘV -h~8ZCk`-mAq f5bC4Ma#MSN?=CRB)!:zR\. >h[fvB!lEQHD_J@;{)|>cb0jA$INx(B"QUW)IENDB`lmms-1.1.3/data/themes/default/edit_cut.png000066400000000000000000000024071247673406200206320ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8_h[U{z=m״ڛR솠>PASXa>80Y;:AAdDg'ّZ1t(Z5_r&4/ۘ;=}9PJappqpމ s VswVnKs}}}cbUWv{iaGGGڿ[WW׌fc$Iz_u}3V޽JaJuu5LX0̋҇$}xE)RJ@ Pzfyy+˲P(\džG:;;_X,RBF%_9C8uoPhZu纻_9r۱޵lպ"q<~r=400po\Vձ BJ2 ?4M{? nx=zlCCHss@ 7==}cgYvcD0X[[[9@>y_,dVoͅ) . @.ϗE1J'6lX!ggg煺t:R VS9fNR&(vՃrݻuh4cZH$cX]]KfYAM)tttB0%eEIQU]7NK$/ٳu$d23P*!D0G)UUUóL{{ED"q~}}}A$*hll .cYouj5Ԝ4͟H$^E L*a(~Ͳl1aNgbHh4iTq\[Px ޥz`}Ʋ쁵UU]eYv*\6 !d2o}. ˲RXLeva-Z&9)b'E$ b[liiyK~1%!}f3RhiiECH4G4큷td2AҒ(?YJ)PJp|$rn_a OWrs,'jkk/n?O)Ec|*^aB\Y05ZCiIENDB`lmms-1.1.3/data/themes/default/edit_draw.png000066400000000000000000000010451247673406200207710ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8?kSQj^rAn"FIJ)(~A"tNN%%Ct: QBwxh $;?Ify8 .\pΡj Jz(t<n>xjz^DI(hVQ!sCrd,ːed0Wzg`У/U zFD> z޳bz9sU?=-`f)18ԢyX ht- z14z,У1D#=IENDB`lmms-1.1.3/data/themes/default/edit_erase.png000066400000000000000000000017521247673406200211400ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<gIDAT8oUB4>}̲ kvy\hKvhInnN>99'r1MS76\5$ Ñ$D؆gݕ;?y?)k4|R,B`YLӂiY(F9/Wɧ|@!3rv?v`ZLD\CMWJ2uk@R]ߡ=Ï2LTUph4joooLU;Dw@c "yN$ ---L݅߰, ccc|V ˲`Y9$I "j5ӄ`affڲFDbFFFo2 cI|s41>>^eYH$BKKKoG B[[[sv L><Ȳ @go?`C1ND Ny:6+rdF"|66>!ss؈SG}w/b`{(D"h4Q.R>`xa0 ) a oVrVJ <}| |<]kI_޽ H V c4Z*&;m85 J{o:t]\1' Zk aWf9If`ff$IHӔ4MeeeU)߶=Y* }noo/ȶR^/*ʪRu^~4RIƈ8{叁?T޴5fzN\T*Q,vqLE... trr4:Ayqspppii"ͮ<(Dq$I8l6篵ퟀD$pPuOGO6?7E$z7277W=5WUEW)vbgBIENDB`lmms-1.1.3/data/themes/default/edit_redo.png000066400000000000000000000023351247673406200207700ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<ZIDATxڵk\Uǿw&L&GټZhE+VBPх΍_Tp!pP(RRE6&ih$޹Ð6pq؉>񘒹R]~sfyx'Љx8܄0I\ҋwroI)9 z![Oaݡ"z"0.SuX.azX& '{w N ONT; v !lm XMhDkwǞD\;~D#8`@B TiKqվz]UV dPHA`|2 7aHP@jt4ّHD) lVAF97P/bhM ef ~T?;FU*WtTX$EETP_eM\b֕Rp;Q JFIxG.\.P2U8~] o+>S&"}`H~XȤحmSqip؃dp<Iԕ ZyAUg# yH6O~[;4"WZ_^򰪪>Ji[tu]{(5"oA)BC4uaΝ l*A[vT "(% k:/#PQ\zV`|Imh"ճeak({bÖ}7X ԬόR:CBK9Cq) kJ$ WVh#Qb!r وlahWCW;6IW Tp[Y0p"c<7n) d}:|8 #9G+qռR'x[e͎=EX'LFib2_/EJZI fM#sqp476fNc&BJA*'CG- Ȃ$qY [Z[JvWámK';"aUGp&DU*l| aUO r[ :EM7n'AA!ʵۋ~>p#2FZARyUxRX=9An~"@IئtuͼV*s[٤tdl0?.ԁOmGG yIENDB`lmms-1.1.3/data/themes/default/effect_plugin.png000066400000000000000000000344011247673406200216430ustar00rootroot00000000000000PNG  IHDR< pHYs  tIME%,dl IDATx}Ieu޷>5Ūb'Q$#ِ#SlZ6,1l d_ s2 271q؈$#٤*keW}e $z^w﹧{5ַWxttǤٻ۷pmܽs}G źA ",K~]!] "@ D  "(TaD fW(XP;*G@ 98>> 6/m=4^'" hs"BW?B}) H`S\O={F)]pΧZ0Sg+v_`MPBqOYP@ du(2Diь>#8;;ן oG{?ӿ^;ۻݾwoߺܻ;wX}l U %:#A(Pf`(+ @4 *h؍-4n<1e,:݌|:6X!bgyDlZ462T~0s?,"?K owţ'%?UDb}Hm&R+b4Xd ݼP=f2 MX7*y-͎=g3C<*3Q %tn"&*I??ó>Wƍs~iw^'? tkU䯖峭qyn߾~6IB ]AZ塙L㦉pw< Xs\| m9ބt(,2{Kdl )}zt\"/f^̟oCe͛O}dP:BFF؟{ᡇ\_C!B ңx 6CEܳCA-˜>v ?̾`ϥlHy%*`6i W|k_<7ÛW>7^y//z۸w~ hVE -*SĈA/{ nݲg MA&A8._,?u@$43y8@փFA& j䁛S2TKpp-Me|? 9}Qow_{ .}=ucm!5 tM ~/<^NNp;[e 0׶}hC4O~{i(FЧ'e(VWmpZf!!]&Е`)Qͺ25 hUJ[&ڂڮaZcܿa!{3 NQ:sɣ+D"z`@0 XJJXB;"?{l_B@c}fMlDŽU:9-Kg]ܻ?^U4@py;w f=֟{D;Puŋ/W #S>"1RՍ܀Ŧ 0ۦxeXT_O"3t`hL#'Ec5$32V >΃@+i 6e+Xn3g =C4C#9!.oi  D.Q98L7=F+8X6!THg-[Yg : ޡ?{tqmS}Ea@RP CSXŨCk\v*dpb 0lx2e^[~ya*D+F<!Ȁ łڌkfE ` f5bn Ux~c^9?h9>{# QUu}HXG5\-) ॗ#8S/hMyQLl Xb6[j+E(1 3 exK$7~%T2b[2F<"r3Hnay " hY͢6 O $ dgqv;mH \r1F&`m\y qf{`Ű)G mZ 53Qv; ҰߟwEEME eԼ!K/}}]իrҥpr|50bas`.*҈" hc^c k@Ӻ\ߟE " QH2[`x!,.dC|R a CQe`M2@yl8bx ܡvQ hvAz5Yk wV^@^ӸG]ut F::eyy-\`Uz(,TK9H+69 썒}Sa"_&ЃW@hD'8==Q&gV eY1O40;bCi(A+ @#dh!^D4vz 0ϱDZy@JcC \ѳ qQA s- K2YoFQ=Cܮ,,D)cj@5EExFmpΙCX(In"M̑bj1gH#Yq ED%V,JF/9mdı|] p%E-p]Ȯ"Ucm&@ʿqL.:T ZgeY m*̭D%P$mxt,@ȼdVyj)tPE=$G~<'3۸NCg<1(@/f--^LNkih Wm2 EK!#_h8T#B#RF>K-n<(xɾ,Itr(Dx_W=|Dm 'Gyquծ3X:XP{P[w@8S ,NȮFwuC>:˃Svi%ָl>42ρF(:YVniV`rH#NTQ='4-\7r ];MpsOF6?kWBUhhO>]j {Y"maf r}7>J msa2M oe@c^ڰ(l)RTH"kU.KXe^h@ 2bY+`],xf%ɮXl`ỸT|Ay&lގ-/:5 5XΥ&;A2&@kz Pwo  0+c136VIf 0Qw C>g.]ɖCo h$h(Ԥ)#/< QpvThZd 05V-.3x"_Dz5MK[vaݘfBc>[9m1tC% 8:@Ж1~D)l,=JX 2'`1VcG6o䔵UiYƜy3 V@>.ex u+G{BRj Q<<7d8{Oаc *O1gqn$ؔDd<8sC Z7dE- +wFX>S 5H|3-MJ ݚbK~y7$CZAN7bӺtB-Z*@mɤJ;)u4=,g7So 2BLfT qJ85U{VStau|bC2,|5BY&{N\ 6BRնȐ,,IDmKdẍ́_Y[x) X>w&b xMeIp'Cf/L,6hDdRD oc=s,)_H=W"hvA;\j(Rz PA?,9Y;<1)${ U!Bmn[EҐ9et^HEtӈywGDUk$4tAW,3$N4a)! p :/E\J*б,$ۓ,'o {/uZ.h5/ ҚC ]XTlƖ( Bo#hnr안Ŋ#M?k$>AT.RNP,]={(6᨞EDʠmeLis +ȹY{._ (H]apYDU>p{ڶ Ou;ᰇF~2~5-)a-qD6oѡ)S*_v)U ƻ31Ofp-jѻ3i@d) 6} ʼn%L&ʆJCS}06J(ᑛUâ(\B;-cTNT`S.CFɕ8~'LeC<$N lmZiMa\BlFj)1_hfWQV0:h%#v/jB|De0xfb5QZy݄X!SM+LDB(TM~)75.pk OO|1{ҭN DК(^/M&r3.(&KB̼Oֆ4@fQHJ'N" IM=wBOA,Q r"ҍ{WD'd*i\@a*z_PVrMwzpdEd4;˼Xs>5^>^q 1gY<ᖞX^ % f/YʛUNm݂c,˂s|Oc!ŏ9ꨛ eOլuEȗN6wˬ:sdhlm9)]FdT#*u4y(nImc66}xFI0g-'LRǷt bq\b̗ )j;dN|?gg&Ptnp )x߬A'Xw+룭ę*Y㑪PU NkUkmle(oSEQ!+w;\niX+OG8qVH2.4Ic;OzH"IU.oi>#Mќ :MAE0 G Ɣ7RWLUuʵiCX IQC]J63k!XTLA'CCTd$^+8`k @Kixv,#4- t{~ "g[=6eBXh-fBnCvBvVВV⹡\,-{]fw%/y~[xG^T^_r֦f{T3'uLڀ7:Nc>(7R>BFk {7 Nک캅̑..%hEhhqSPBA~l 4)в ؙeSm\j@Uk&0ںNP^7^7EM "=lLZR.ݰ+$jԙb1w4٭h\ݢ/} 'x#[ٍp1ϧi&ǹ-]sfsuWNO<ڼhRZLeTGETzb"F%xo]JBhdt4.FghF87:UHiȧ[d$HY)#5lh5=g&XdIDAT3hŦG KgyO=x3 E=9 chTS\g 5,?12# Vld tʆ} wRŻ 9VȜ0+9*^=cO΅4[)jgt2uŗ~XqkK4a(W0"yL/s^*5$4`cT-"2yZ>(ܺl(uGjA]Q8a{JU9KCU@Dπe9AEԯ"{y;7Be]*Cww)vG Ұ[F@M4l\ jSb&u%SJőP,BhֳgtNs5NFr$$;,8FIhzJ*B#,^F/>w;ohӳIBxI0h)St^--y{s􌽯_|IEQP'niv0>؊mٙYG>}k,QGiP`=-Ch|:$XZ F'>awJY! eB&CVJ#8r1lQSx@b1tpX~^å$2 5御H N7 ^ѠAY\7;+:*(T7¶a/V9U$Egm,MsT=Nc,|RA\X00-Ue8X1qWaŲî}>K,>Q4v*{Y 5^׀y]V2WR,NBCrUƫPQ |+@uTAjKUsLYۻ nvm1!eGezfB7+(cܻw jq>DDō⯆dW`Qaާ]TZC1MS$A*Wen"nS3v&C& ]4M{ KhMH}?ztoR[oHE15[;:B߯~%v{0L6͔Lau#2Ti3Sb?Nw`ۄ uf`XҚ@n__qŸZ=t`Ġ1" 9lR`cdkh' mRڷYj[iAY85TBkej)@BuFm D+ 0*5'lY9Rf!/8==wܺo_ͷůg!і>N;B14ɘ]z`#f-DQ(.?|O)PPYAb0ƃ3N8D:LTf1$Ҍx\puZȔDuj5a.DlX87bDU95)B9nF+ۿ`$Ĝ" }.VnǦ2r w8O#nШ|h{>!uzOvoߔ6 G''> "p9-J;PSS@F2|!~bW+yHR!p6D-A8ڋi4QFWJ=[\:k=t!:h"*)ڐ+el::W{xn"e]gghHr5_h֬-ʄ=.rh/]árAf/k3iD-ssu ~YGC&! }]t-_y\v o^īԃ/ޝ fZ\cT'lP c9Jx-@ fV"e@ޣ՘R>ˇU 7ԘW&r*yӡv7V]`0}?4Zplx %n=ܘ4& 7udd%tJ."eRF:ҡE'uŊC?FZ< S='pttQR8Pd5:peCMFJux{OD+4@nR[+TKw2Mlmٚ IJ w\xRGXQu5lf:3a!n.fn1 CPb~8[!"1Dh3yBυ*4@,9Zj [Qu oJ"\J+kjys1GdHsCnF7Vnvhm7B8rJӪ -v>,<̹e]\p-73jnò4+~\~^dE ޗyzWRũ[3ިMF1:ȧmLw{mϿI-t-WAgX(5h/BEq|rK&㡇3H fk.DuƴE@1]ܱyp5nzsQaQ营n#C4'6B>*ApMClBdxC JYۧv/_ŕ ra6p}r,NzFll1hٴ 5Iv:)? gB/jQhP\OyJ1y:O4*Qu jh%s0g[ oڶBžE|-=no(WТӾbZUx") qvuQ`g1s.Ue̯4ª9}^bZv-6x{C U_e;pan&SwZ\؈$?8&̅BS07O]cLh'/q?͟lՋ iLFz$K?t:&Z*v^pp}s1B%jrnei,m"j/z[H K0}O J5tCb=u%0E9p59m?\yp8*8贬?/|a!ѕ2fFVevYiU$un6mz}RzTQ˹FϊQzu"(͢$E&YL~P 8=G%ͳjO% HaPO1\mLIwʹc_/Y7Rhm&e[.$CGxZMD"7mELAm<&)z̞R˦B0 +R,h-E:Y.|K-`_LZ@hvCi5r_h[X]MbQcCP\v31RKq]1ŕKK +B!,ʎ44'PX%2pL_x1}ŵB_{ VPU\0WPʼZAo+&a&HDSDqe2r+Ei y:b-uNucQ 1Ti1fт2hsES79gA:'i#2gV7d)gK[aGlIBKi`4FÊK/D7 D-G{}45hz'c썤q-œwTv0e1X>R*]G҆+rSDR/i޽#ɈnF-BׯO=};Əģnm-(ֵ.<$#.H5f @/(l0 M¦0OTѹCG0+K=F&jà+x14_Ir8G mˢM\}Gb30ڔT)Im[rT(ucմQ~.C jhF U Vfͨb]xg:o7\<ꫯ裏~Ңoվzt-)`L,zX:P%Ŗ;AISj[fN:uLjhRǬ8S@R4Bo f|GcZ =Mlw۲6m:_M]^E5/ڈgS^!*-l^"x;yBxH*nݺ}1_:DE])6ҽ;w߸utcn}cXfc_#2C"`Dk% B N|_RE I&8Ivh3-q( TmLΔ =<v A_kWQ/UKfhbi:37ՆT$7)tɬ2k22£ {VcD;<#EAzJ{TTQ>ғGs}̋=mk]r5Кݪi`С슔Qj'QY4i:\a8ҋxC:TkKM;Oxh\|ԁX`4;т*ŵ\$=Z 6Szkt2i3ECE]kƢQ_.]dxmOa\*×%[9U2zP\)t>u#!гѡH:ggg?A{oU <mz.3g~Gn)0'[$V_W#0D0[k= ޖJj+^!*ǚ)Z9C]wHuyyt#SFGe0#,w C-Bu&+zkׯګ?8?;WOG|k;O(AOQ3Ӌ|.V X1K.0-7-}fLyliApq*CYѳ.h0O‡ E_ӞEzCVz&^{ܳ-TX1SUq~L^ۗoO @rn ??topeͺGzP4BӦ"N/٨V?KQ!]7%I3#rǯ z#*yp=_?.|I>j][~=_ʆ pIENDB`lmms-1.1.3/data/themes/default/envelope_graph.png000066400000000000000000000242421247673406200220310ustar00rootroot00000000000000PNG  IHDR 0 bKGD$ pHYs  tIME ͲϤ IDATx[mu&Z>Ɯs9$v.IlDZsq('ET(PT~O<BB%@D R R;s|Z{9{k<̵9J!j>|7ڥ͵4&/>L />A<_C@> *V|#Pm(ގAj@h (Pi|3"(yA)Bi@)!4 PoăWz˷ǿ5P }~TRKkfޜB7-=W?Ԃ7{A)ߪJ 7ț\j@h3̀R B##  2d# uٲ$u @#  %ddԃDT8:<;+,{aHA)7VM K .K?)֧ iHY>T0 Ѕ J!PIȒYO R^V,$Ƞ;v `AK B׽rGg<̅ %uJjBm`荍Hl:kX;XX  qX [5qKekގP+R1X+T̕-6vrc0wvseEnެX,Z߂l(!+8oC~j6j6~TDk2KaɰX;k3:}?X kc7Ro*w xp7VvN*^Ud.Y3%/LS[Y]K8iT ("I$B e#9ű1GZX'1E&1E3{ 'v¯!_B:ie{i 4e.>]9H4K< ve/2=uʳtϳrOtk(֐¯>[GBߦ4-`s bHA,| c(sr89: y] (z҈^N ːB>OASP>Ixae'|'1nyB48_9N)ǀ!8@Yk!u u`],95?mrS,)8v)(oZ f=N*ĶM6l%Oǒeѩ%:|K_&oMeٜflvIͶmNRP4dj f]&;ymXZJdZL0edk 'lL&3Y{Ҥ1It-TIFo-[gK쬉9%׽VS0V=L&LKSd.|2-Mڙr}~v4-Nv%6eL0my fm *'LN:]|^?Yot0b~#_QTTr$z(ɎCJhy)Xv.Q 9ZT.KR I%H6XblHXbб&$j8l]JITGH-7HE9uP $& Dҏj;'w´?3܎pҷGs;U)?Z׋z5/z||TG~|/F|tR/F>;.g}CIѝ~As'GuK)?dN\ݑhN\ٻvN@~}K'{K{ѝ~ѝy s9B:ٜ(N49|ug\#Ý>Q=7g?LJ#=>}?Ɇ +_k_$ү|?+l' ~WS/{2 /|w~οW-R@w~¬\wlO)^7{~y2TdՓ΢Θ&`꽛dV;SI!Ȥ&7A1DR"fu=F}59UD{E?BQ]>x'7}=`3{ ].xrf*\!̘Ub0aԇeT)w!Ȩf&vaIQC>c?U(&~w?O {}?}_rZ~7/+_r,=~ӯ%%zt8}/}O>?8|5Wm{_/}a'ݣWvm!g{$ 1+@裛WfM)5-HǑEY&"kܔ,dO vImR=˺F-4k(L-dUYU j)IuXmRhPK-*/ /U\kQuJ([M*o[IrmI5Jl$)XKRBj1e[4:t6p1SQ:PRL]V% ت)*fՔuBreݤTCmȼEX(*&xgwIJm;_N㍛ۺ׿{?_?o~?#{!H]=~g_g?WWo~=!W8_kp[r~7^2;t:^|w}_ӧ?1J%`n7Yaa7:Nx=J;yg$^lhBe1$N'bW$O8q ~gCI\>?x^~gmpӿ78GemK֚}aғߨǴQNwFwinW/>zv&[^ĶZmh/ɝ~>[G7X#/GGңǷ'-wtT==9}H՝ѼhۓwЯS|܌flxY/0_wO㦞3:?x'M޶7t~r#nI[:?q|\p|?~>/M;?bW~GO .;Zm??n/h/m?>ix;NOnv,/> l_Z\='9-o-܈^9Mٟ~gf {yXkx3 &ixhd-\>00Ssb-3&τ17Fk_}W[I ;蓇Ä,/&9v.KG5:Vy믿=鷧|ይ/n׻?]cs<7Oo>?>goܦןѧ>EpNA_ߘ҇Gۛ+oky/ Ex>`3eg-D` b;ӴUf' L,@1.X`:ۋXSwAtI0+mi À @1-vP54XeHDZDCR,ʙ^4$2 VvY{fk Ț09Ed38,mIHg< YVyaM&n&Vp:cl@3L{h@eY] Ol F D~V]u5v dr3VtW|/Y]3=ex!IsW3$I".ve:d 8^t;wzYCp]0^v紷S֋&rXSV[P FU7ePFZlYg덳9Dl7z簺 .8Oc {<^~g=vsNOvvS悵frYl.qr6N[іJg֔QF}ZkaњJ cFXh!Y -RJFjTc(DeUŐB0,A9DY;DRʺ#4ҢlBFi>}_ʗe]EF[PRh)R1^Fy봁~O>.Hݠc3UQųvTI֓*⦮M]eguUdr4Uκ7YFf>;\iÕY> ZXƢ6x6VY_7|6Y[eÎxiig.Zr Bӌų7X# :SpbYG؉1xt}lr'f[ `qO؈' FyiF"[?h„;\W[1/Oa[n'1{kd{|Ó3o&&bou_Dۡ‰}gJg:δ+-2-|e^h˼в+cul,2yg>Ot> |oim.cu|D!щ}+Ƕtۅϕ־΅ױ΍־ΕױeitgZ6ױQXy yL+\z+9ӅOelCDF #mX)4վq^6T6NB"mrW#vF\xm%:6JSɽ1% J}=q E-mM~4Rt; {?C_ꗌ8 p F,x;i@B(a SRoTFS&r>7%@LӖrRqJR.;H[ eH@h8 .B7Zd[!uK• s%Fud(k%ז-aLVc !OP K)^+T`@sl0 %6bP{+};37hTiF{=Ѹʃ;TScƍ ؀q %6`jP@)t(B;޸:;4jS ҠsFK)LܠJ%1.;XypFrL%*ZI5;wP45=;}c7a'v``pG+xkx =wؙő9.`gv{b3K{>pd `vcfp0[=_|me`;1o8\v\]gK7]kf瀘 e 1H @zs?q.}Y>q3Y=ЙV`lfs?l@p9`TYEbGfp16+V(Z#e)RRD}#IDATq>TdQBoSmSbG ulM7ڦFXNqP)R uDPJO|Sh#Qݗ7_zȔ\LՑisPe /z>Hqc8|پD!AHqJ]Ց9ʉ}"%_G+%Qמ8=qm}qd(Q׷7OQkO\|WJ]ɵ8:Fu_)AGN$)(q'*mmT1 ep.p'Δ\,lD5T|D7NT|;S\lW(_G䋟Q8넔>Lbg zf_e`,!8cZ ^q a$;;m0遭`g 8kjˀƋ1%-1yf0{efkYg\,z{왋+): g[p2g8Sv2e8=}idG9)b>r "'(qr2'wΜ߆ŝz=AǞ\\ٝ8qm$.x-B+%ND)gήٶvqb\Vʘb2U[W+?Lv3e.ζv.mBv(mB6(MJtTLME7\LJ4TMl\Fi\Fm\f Wۨp.;Jv.\M L tP/;5zUGnXuR*W?/|J[%vVqG"m h{%5Z*V"6O`c.o=1h~KJkPGȠAF`V `B6Z6՛}2+cAih Zk4J\4u$QR f4/پRF%)YiJ?P)`J^fGf$I̤af3k(ED`L_El[IIh,Gp{aeqƱgV;, Ey*Wc"{]\E{^La ?`oww>kվq#a6?o7;frtTU!#k-Gtݶ+nO$gQ*W#{+uqp=_F JH̝>SOK2{~y< ]]>^u`A}ZYRY/-*m06P]Y<5Vg{%t^Ǒtli+qglׅQ.,kJsr]pHK_s/ʹs*IhFYd,,L*o9q|ۅ1S0Tv崡^*FA}fgWںow\קcuk6)ǚhriދC_~h|J}zN**< 8'VsӚvV [htd5-`Rɟ~r>2_c]rde"ͦ E~saix/ZU>nú\O"CT B Oo C54&Mh$L̲펯Z;p }J@r_nk`Sw[հL |{?8).lS?gu夭>y@q2~'nUeQ#omG̯N"5zy 7Z>oa v?K z*~|]dȴfIR*INHt[T#@2LP-ר/C-R/gYx:0y2D5F)$1%*Eg(ORJxG+? }ul.%bZtƜ~UH5b^kڀ(ț$'QE WdЊr:*XA Wk]X9_IENDB`lmms-1.1.3/data/themes/default/exit.png000066400000000000000000000021561247673406200200040ustar00rootroot00000000000000PNG  IHDRĴl; pHYsϐtIME  ҡabKGDIDATxڵ_hUƿgfw6ِ MIMI`#DHE҆C4(J+bOyRԧXi(H$&6knSEnٝٹ3lZ"ss࿨ B W sv{קzT6˃w{ ܿ{|<%A-/M]]pDV?=! N=oU.ߔceiT_F&sg1t]@ϝ=9^X;hLm{$wc!N$0}IN\K /"n*WHP`EJK>]4nm*;KtקtW{*cUBe™3i kc[o/ e$zzyR(RC^ ։VASbQº:1 ٮnܔ\>BuVV079u9ľz0w}7wbaJ-%?ʭ<ϡlw$k#f!j$O=Ͽ 2@'2qzҳ֑=O\XQx}dbZ_ĥp.J)!bUć)<UwX)t 딤-'{V D IK^ 1H e} Bzu7P|8@#F߄Ik3l`368Sŷ $Mt#0'FАY$uᣨ} |?'fEgBR?B<Qk8}5h4 4~iIFxeNu{d:`lS4(=H$557߂Jb ~L#eWKpK6 (:@8e:>53owk/…$Y~0#8+cPbA gs(@/ bF "V [SXr}{ۣ/&"0 J I#,=@Iә2 j<Xf<) fy56؅'>Z?(!3*?lIENDB`lmms-1.1.3/data/themes/default/exp_wave_active.png000066400000000000000000000010651247673406200222020ustar00rootroot00000000000000PNG  IHDR*bKGDC pHYs  tIMEtEXtCommentCreated with The GIMPd%nIDAT(ύ=A^gf]<@068`As!EPL L.8L8ݝٙ2E*z-CEqc0suιi =333rwYCP71Z[LJQADah6c _(aL?26iej Ň~ze(r#^}_J듹 JWS5XDXuzOҫj^Ċr(_CyRMwR19u?8HkQuo>Ͳ,"i-V2}Ԥ-++˶phx9JT1l6[,KXPUq[(J~sr{<~\ ZZSm؉ȁi0Pc3qHv jPT)v\= `*G\$;^|!8ᯗ1(`Dt*Mu- hƂCr>,p$V\ 9".Z`ؕcuaa5Apx-a"FP }h{T(2&2ZX :{j2a1D<")G( ^0P/HNٞqF>Wca%hz01@8N9d` T &q7ɡIJp|?jSa'1ĭA6[-7H_5 zgEٰ!F^4oHo,ɍYHaِ5vSeA`r4e.P˸P|oiOF2L'"hPQ!Asq:E DHMcӌ\A,H`YacqnݒMq [,OLh-Ya|Hّ 3l.ЬPS\SWp% YfQrt~y5 Uv4V_e ANUHc+wi5̄2ύ/;ȧƷijmB;#!̘y0ĐgN[q6G;+O[Qq^:ל?s)n'g-Sh5-Gy.1u[L5 CYn[yB'yϥ\cn[DDrUbvkRH0Q ;EBDٴi>'0G-y[$eLdk XV\읕>`[8nyR+Ƅ^U0M}Ni)rmEZsN5w̰R\v"<Wn\8CWrZgmkjqL"1@ClsuO[;Oh\"Z<>4wKf'-žZF t-MqePn#D:n~*ӹ+rߊOCVB?+wKU 5uZC՟C[!qm;)7M]:mGV-ЧU",T>g_^h[?󊼲l%G-a wshY՝ŏLϞyz>*52IENDB`lmms-1.1.3/data/themes/default/fader_knob.png000066400000000000000000000014141247673406200211210ustar00rootroot00000000000000PNG  IHDR%h pHYs  tIME(s>&tEXtCommentCreated with GIMPWIDATHǝN0?Ǎ,/Ú! ,JD-&u< &V mR)7|r|rmŞq}}펏YwΑeZknooծwzu]30 wx||~9EQ@OZ(,KcJ)seI~Vl IP֤9[{xף3 pCD)ItdY@k!GGGhMσ A74MɲƘʇ!ȫfݢXUeYb9oj,ͫp58Y[ʲ춠Zk?n-d2=<D,˨z+uJR$IxyyI)E>-EQt~"ce<;稪<Ͻ%ͽQZ+ߜoމ4(խy sfRkgL&lufX,ݔvok9@$qfvOR_\\\x"\c t)X!"q{Z4eZ!"[os~OE{[%"b8]G=I?ΊYIENDB`lmms-1.1.3/data/themes/default/fader_leds.png000066400000000000000000000070661247673406200211300ustar00rootroot00000000000000PNG  IHDRtnJTbKGDC pHYs  tIME 3r IDAThkp\y9J{^dٺ.72L@Mq1ɔ)&t[KRhd\R 0d2JB4eI!He&J{8GD:ga258N+X39ρ?]R~xdv q㫮F!V,2Ns3(_|u>!UQHJfsfʊF36h@ ^\u@P4~L C^5 J D29LW7=7ex\ m90a];e\d~sKW^(]~7Z"tC3 }+W-א k!,4WBHJ 'sxeKst<zxqh*?۷2'Ƅbiڢ)C:# oǒO8Lkd*.~epeyKO9CP fƄAn3}ȪͰ:.qY垭HS'ږ'IҹNCXOtBcxޙ)4 (B>q"Z"{oYuWy&#P wlCւ7߷03  -*N_drd;v,w?N;ހ U|̘@o2D!erMlv*W!kk1( )|7꥽A}KN 42IazėwZO/=(x*Ok//Y܏ط@}JPd <  4ɯfu qlhe!,3s=F,L s2"~~*Km!}]F|\A! 1A,ްv; qzmh"̌%Ö/>% k\L,Z":PLtg-̍ ?] c2lq.azo{\[kViB><߼%g7ȪN'1t<sz5?SG] ׎a.^$1d ۟/.!.OkC TGY, d 6>s 󤆲<ú˽R6TkD&cP}|enyJ*?a֫]~CeUoo) .wR몣&@QJ"Hپ/]{LW+ȷWȷ?|WhB1>Of(3_.S1z^"7%vhW}$o@5emze o5nb9P4a>6Gf8s>a +&T bH6!qp7g&V ?$_>&.o:|ЄRlp>%ϺXH)DS$f͞g+/-fC~CI޽߻ڶ:uHYc!V ; k}^_ J95O>"7ELFϦ1mEQe: kTy&jTjyG,g[\T\F[M>4kʐX/nŷڶSGNqxϓ(rO.6<Fd&9iz߇kŻg~hלlky =/Dd!GgW-Kg*=߿K[߇APo0~}=_IENDB`lmms-1.1.3/data/themes/default/filter_2lp.png000066400000000000000000000005121247673406200210670ustar00rootroot00000000000000PNG  IHDRGbKGD̿IDAT(̽NPS-- (?11aѸ8.p ^}5,:rN@{'.  !la)b c&|66D“IENDB`lmms-1.1.3/data/themes/default/filter_bp.png000066400000000000000000000004711247673406200207770ustar00rootroot00000000000000PNG  IHDRGbKGD̿IDAT(1n0@DVq3Xb*S{/ڙZU8,M" ?{$vm3T 3HRgsVj6GgZˁאEKSyN4v=nM} Zߞ8=@D`_]}1"rw)'ٯԡ-l-YN|3(T.(7^AG[[x@jrEeMhB'wi6Wq13{,IENDB`lmms-1.1.3/data/themes/default/filter_hp.png000066400000000000000000000003741247673406200210070ustar00rootroot00000000000000PNG  IHDRGbKGD̿IDAT(S10;2P6n'Hkt{ÁDH[|?00ZC9DP@jEoFNcY y$1 tUeX%OW."Hj]Svtuegא^I+u>v-Pyo6xڢIENDB`lmms-1.1.3/data/themes/default/filter_lp.png000066400000000000000000000004011247673406200210020ustar00rootroot00000000000000PNG  IHDRGbKGD̿IDAT(10_= > gP鸝8zM9Zc Vm-  _>ASMu %*|υ)R2^ 7|#oax }\X1ڞlo6ƨGm6&="`MXK >6i"#IENDB`lmms-1.1.3/data/themes/default/filter_notch.png000066400000000000000000000004751247673406200215150ustar00rootroot00000000000000PNG  IHDRGbKGD̿IDAT(1n0ߔ(3$gbۨ N$\܃L}-g(ա7?Ji͙8>7a*[=p`d*(8U_}VTvh O uw y)T-چE06 -AV [gRH[ma [ppֳw?rx>Ѷn 88C _>`M,x8>sK/AbÙqwN8wpj ჏>@8{vߺ ж MjH)!!7wyk? kX,ޭl\ͭuLv4MCSuS40<`/>Hg|Mrѵ-RwQ38 a;"r@jmе-9g%;R";fFpKA1Db4iʹkZWRT1C\e $"BAB @.wJ"s/"㾬ZZQ3qVǬR\G}۝^jET "T EṴZ(%ҦcqL2Q`BZll&ir99y9[WUT(c 1&bڴ-m3e:Ɨg(zhHUU8pQI)B=mҶ-D䮪Z,Ks] #"s&_XD,KT=9gbcf,@!D1k-ι߈D\fP3{B찻Mt#!4MC4xY]]`kkun__a@UU80/ON}_^_aqd>1ofů?U׶#DE?H9yf-m[i-Pb`wh ]>XqXvmPk- ucYow='|q[ntZkbJX4NԺ^2suy>-ZVWHGkq^ ͓vߴp4lƼѶsV% R 9gR<;;u!Ss]רJB3{RXa$qnv5n{ ,aIif`<FWGJ)QJb‡,`1TfZC@;c5c \o3nF3R@UUW+9!03xc.CD-TBP .$-0RRxVJF^7Q\1vىIENDB`lmms-1.1.3/data/themes/default/freeze.png000066400000000000000000000055451247673406200203200ustar00rootroot00000000000000PNG  IHDR szzbKGDC IDATXýWgTSVzQPi*4Tjt JeDGuFZRH^чelO)睋y{k͌oZG=golWZ&7_&eC([' ~|#ow:?*s}D4\XD>#GT<VQ>mhϚR *<|] K*PGB9h{X.oE=sP͇J+0|WCo1Y|c{rNDHk?Vn;!1 1&LOx3 64^ע S|T~YEw3o8X۹nOٸ7iu|qձslrLVKߖ6%MY` [WQ h, 6^"S.e ᓺ%Қ01.Пz_}c k'=0v䀃 7z]p*]܏M@`}"c&pƴyU=wIL?ޱI}19ПV-kyxuجȌNzq}t6lT}-=&6I5Aq$n! /?Q4]aSW`hքe Ml~U]mIy\g`kV~F]X{ی p[6۸ @϶} .AZ@!i^ > -CAWP0`1&V G]o m`-IYZʷḶ5246|¯?wJUUG1Ї4{ů;qFF P4iy=ž$ZXkٴ gXq]b̭j+U} NYbbKT7!ՌNP10SNֽ2~ܴT`+{T$5 /ÜSУ=,/e5xΐ|m A!VUg2Ud`N $lnsmV!z@+=j6~XPX@BZS?E_bj.lZyFKHHS@;uG/ʮ>xS %y;~9bjՁeruzj'dU=٠~SHH8SDT,HUM3X}oWHz'! Z%(,% ]Y]DXD4_>()ZAfܢoĔG(<~K緆T`bSl}Kdeug)%^hTz諸ܡNBw4VV{ԓDn;VG'Hnj(<.2w/$# 4^#]cļyB_3!A3 \ʚ$ 7,B@+ o{qy|yo1sZ^H*'=:aCӁk\ЉKFN7=pEXdv.T-_ہEvE[̘@v;(BmILTs9_&>8/o)![-sʜ2l&Le9%IY4u 8Y ![5QO S_AZ< }gf %~!D0[}Ҋګ-cJvJtm8 !fcJw`ﶋ MAبl],`5?~Wo ,,% W_}t͝QV:J>]6~oxnӅX"O]-Lkշa\\KGjUCC/4Ch+W22m77GkѦ[(_^[JÂ}Bv}wzWFq>mڅnhk!§2Z㉎޷H|[(Ss7o͇e䧨D} ΄$ݛpekb"v[@B[x7WcdjorL>|BfmUeqiu;¼y1ΗW=r '!4uޭO<r(]5 MwFޤ[w:̭TjPaKWV{}oh_@y{4E!BKͧ\ذQ[)&ѿzB<6c%>R^5#R'IENDB`lmms-1.1.3/data/themes/default/frozen.png000066400000000000000000000005151247673406200203330ustar00rootroot00000000000000PNG  IHDR(-SQPLTEk3tRNS )3=GR\fpz*vbKGDug2IDATB  CGT@ zI {j <NZ'F=jkf!"e79>{tՃ:5Kk#kQ [ ?[|IENDB`lmms-1.1.3/data/themes/default/fx_mixer.png000066400000000000000000000006371247673406200206560ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT81N@1s*!<5G0$V,E_܉k6.IENDB`lmms-1.1.3/data/themes/default/hand.png000066400000000000000000000027061247673406200177460ustar00rootroot00000000000000PNG  IHDR$sRGBbKGD pHYs  tIME;RRFIDATHǭ_hTW?se&'N&Mghv1CXD(} -mA˾[Oⓘ}hLHD٘J ̿{هIUy=u|,5M$UU|+JmOB oΜ9s'GGGUgVwGf-kf۶|T*DOO\k<۰aƀښF P0x葰,Ktww/*r6 ~W6J^,..;::sN҆[~/~cǎFFFzΟ?$H|?UT$IR_So3HkppPEq yf111!B!R8t萈bfggghx\.b=vr)8uuu޽f]ƾ}ضm\1Ν;'Bt: 5m=$sMN:E4֭[x<n݊T*H$Ȳ_AN'iJ10 r2JvfDQسg>C$Qb&ظqG鮯GD"x<0mmmq^/e!2. ˲PU]ץ! H\nnn줡{p8$!IibYeae:۷onZR|F---<"۶,k<!.w-_MR ]]]ARԊjB@P@$^/N3 XSpիY#"ȲV 333!eH$$i}-8^r9źA+6urEQ$ YQ]K91dD?.]4n:Z[[r|>O\F$TUEӴei@i"h@f?loo ]>0(,---ZӧL&=&7gÇVbڗsEQp\ܸqí ~d~rr?P(Ԥ66Wxy-e{jjjL1.\m{ٳg΅?&ITU]ᢗwb&B 'ۤ$IM+Wr0MSض-*?}}}ӧp8_]xݱcΜ={VfN:.޾}{Ν;j:ܮ.ph4-[L&=22 fcux^^4a@{?zMwIENDB`lmms-1.1.3/data/themes/default/help.png000066400000000000000000000024071247673406200177620ustar00rootroot00000000000000PNG  IHDRĴl;bKGDC pHYsvv}ՂtIME `,IDAT8˅[oTU{˜v:ez{)h`ȓbWI|5!6 Ģ"҈ L:̴kϜsŇ^,0eu!^H |slB[\,ՊKtv<@4tnG"C'}S`RU@0X|2Yg/sq91~t9~Pĝ4(D3aEтf[X,)h#gsT 9`Bb1_qa6~F"B=ݵ$P]RJB%"62H N59Rc3&(H!]DG4V77}qZѦZ::5sFha$g?AGk\15=޽zsW>̶TC]5 Z1:+n>Hq#"rb* CB9O kׇ_K?aѴ(H)TU9@ʆC =1ݸ|e̖kO&f;VTf;2I`4SH tbp?Ͽ'#V7%)VZP@u\&P,SmլJhWR.=D'atm.t&3H3)zY\N֖sS lM~2 [c 8Gj!6 ԩZf+8ufguoQα91ϼjka; [m̑f!Gq&)'L@JTUBR"hsP&u s6Rp(\ ]]?Jv[aBJ!r)erٯTǒ&s(JU 1 ,ZYQ_?2n@;Mnw{R\8!T]2aYEV7Z\_}g7oS=!hH. ̬%ee[~IENDB`lmms-1.1.3/data/themes/default/hint.png000066400000000000000000000020461247673406200177730ustar00rootroot00000000000000PNG  IHDRw=bKGDIDAT݋Te$S@q/|&j` 1Άb68k1/Dc%*psH"lBBq@cdejDtt8qXTH"!Ӛ_ ]j!HXf5As/# ( ` J??^ "erzu>RާQ/uhPݠG-E4KJ\]hNJ+"O[*YJ_e؀lb2_:]$0 A<׶ևǛG]1_vb Qժ{gqJDei`'Sަ*3WevסD Ь,<y~>5bM.nPƙk[.+>.u6pvp 2~#hi^b:I@."{~3Oy=O<5]Jלݹ9Q|rR_ Z)RH%YBd! ??S]B1O\kNRH@dYn? !W"PJ9E'F+Y@!XݿZ Xw,ysg޻@2;nݺ* :E<'LHIVP[{sX0bCi eNԥOomZQ9VA(* ETH,CMX6JB"]A% eh/r( Z"5fBJ6BV\ٜZe^ $b#!FB3`Ъʳ书u@(hj`IΟ!* +_%D0PL.:q)pXJˊ@(]`E` L]f||Q.]̉O}d{'I1TAyr5Lj<nݼgaN>ɓlg?d̢M~Me,@tͷ|8s }}}=#G8xo?T#G RYy"Blv]v3LNN6gl|f}rr5ػwi+TqJuHI,޳vp=+ZR%p;:qn閸_ׇ@UqNZ+mSJƙew]bٺ1Ҕb SHqKXgNEfiuLih6MLLе!IJҔt:eMZsXgd `!# !پ1;7#eM[Cӿ]~h]7|S`Dc>,`k(m8ȵfphY<mؼl=g =` c-!$Hpc(sր}t|:tPtr<B8R*aIB餩5hQj"A/LIr]BBL%"fĘX!+[znxyz4Չ|xdws"X *[葙xqG|IENDB`lmms-1.1.3/data/themes/default/hq_mode.png000066400000000000000000000017101247673406200204420ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<EIDATxڵ_hEǿݹۻt/JiM_jH@Rjӗ>,"yyQ|X(ķQ\+HQ$WӚU%vfg~f@Baa33bf܎ԧ}A>\c۞ -Db͔;"*1M9lZr_ Q p :D.01~}YWk^ԡno2GXRsR&4}j%:8W66o{wG8F'1eK6lcg^8:H)<~w!̈́0R>~8б>wz=; PABRD |X]*9]'qQPq[@ QB,;}sG1{oz*Z+ :_crk3VS@3R@Ҭ-WJqXG dWK9XFv+ғq~@k c@@JN*P q6Xi.N&`V/~r?aքv0 ^'{yC-x{ķ#G1$IENDB`lmms-1.1.3/data/themes/default/icon.png000066400000000000000000002721561247673406200177740ustar00rootroot00000000000000PNG  IHDRxsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw[y}眃핽wrIuE"%R]l+7$cr{IrVkǖ,ɶ,b'*^圙sbry %;%! BP.`O@P( BP(% B(P( (D BP(F!J( B1 Q@P(Q BPBP( bBP(% B(P( (D BP(F!J( B1 Q@P(Q BPBP(F0DTFDIDoB:(P@MD_pcCDBD:9B1$ !`AP!Dt'0!Xu@/ bġB1B yY^rD< |I@bdB1!B?hxW-<1sb@ bxB1L!" _E@/wu3@@xO#8 1PB@(P CF?0;@>-/ƾwg|y\nW{;hLP H@ bAD3mƺCcQc!v&;eB{[\ޚśW<.xZ;pV[,@,5dR% 0r|_0ҍ Ƚ-rVσ? yB\MeﺩgtZE~i_Ԁ ŰC bCD 6c]:@]н.:}Tp 80a fL S`zُY%酀J (%! ] ,4ֻb\:ctM4n !Amx ]lpK0(m5@J(%!Mw4֘TG?w<4M~f0SgS(18' y6w* nӼ}++vFEZ_\a oxҍe~wrPn Mcu 8E~#a/swDA U+__w/_Z9>@&(P 2DD}cӎ5oZO]#^tMO M= S|M;%?C-Lo#]Ycs;4աa BD +2\5؂.y~MK5}={P^L-!wB@8lXMa_ڊ{p/x]O&.UB@P("{FJb?)о;~@cV n"i\ ,Щ>L8t67A._Y3KTbB1,E"ƫ 'مI;&@` }\ Ȉ\Oq}64eziܥtSeu#(C %>i;)@!pbݷo"%~_c?&~;o0H"vpڃk!BLot&*Fb1\B( E?CD6e?gbqbG#: ~ :s?0<0},o!I $jir:fD7J!m|l݂h"D( E?ADŐK7V/+@7 t;LeZ1?(Hc ?fi3D?uJ+Q'9`>ub6țFEGunP(%> s#UȽmtCs,1Fvy~g@3 x?]f$n)xdsJIŁIێ"FLO4؂KBџ(P!Dt 03@@wuMF;~|1ƀYٛ>D[aa 7v"@$p-WϰõP)ભB10(PD4 ܔikx% kȮDS!G{a7~$cm|bmc*-P9J(WA.K@O7V+Ek\5K5^Sck]bϒBm/H!4OA$D4s}s\Za] Ǫg3^rYfE5ؠB(P"o(J;m x{%\m$~sD^1b].cZ~B <ՍD(7bGP\k Myq#DsF0i_KNYܢ + E!x+plߛ1(KR$tG6 |> UOR`u w#\JUKB(} EF>we:o.y~O߾Ws u?x-N?^p8eQХpUBkl>oZ0 #O+} E(> n@"z~bwߍMo.?UXڮ z*btH V8e}sjڌS!FϹ _s/wA(} E76@kܲϝ7sޮ}`iSO|gL vf箁"E}S)l @#lI~QO49](W E h%MLcf!.ϳ zоנ=29~%[yQ:gKJ(aP@p@DJ͛+.cg>i #Xol D<߀г:p&d6>{ê>@% Dy_K7}Ƚw5r-yͯytEk+ ?!T81%9pUlbCD! ij Kw5p=fgj߫8[CH_йo@²p@ #i6ͤk]0@X(١bBD!_ig4<q}o̓!zGx]6PvYl J(F DW 'X %za{%{1 _p<B6g|뤱@%#"* L6%{zWO϶}ov6E4b"0}M[5 $h%RImO\mOVe W NŠю鐋7q!wr#C,mz}o_2@k+,X5T¤M(>YTVPhdnȿ \Emz}o_ [xCC v8E[v7v". jfN5sO e;(4;2u'mz';ۦwL>04@pu /|s̓!ڭy*nQÊфa @+tc޿kM|zj;p{*b rB^0_,w.e}@7B@pE Űd(M;e x Y J;(`aI[[@xD~=l:H~Zc6M(F2J(D ҦwqޕsQZJriߛM KpŽ@>5}w/`Z'C8\WW<@m{i;l+\ՈЯ?dm}{WTRÊ!  -z?n,#5Y[}oV6о/ wbX$#> LSOY4J(2J(,Dv!p2~r\(Чa B2ͦt9s+T}bbADK zo{LA<6{ɦwG_On0LMmSx de;B_L$s_*[WP gP  <)5b?{e;%#EĸRx*aATpg7:x6dǽPÊA> Ʋ9wF 2ށ"3#HȪpm 'ˍbƞ}˘W^vX(J(" v c y\ #כullzZ޾$3߰ Yv'm[pލȫہP$lо[pՔBO$VSj/T}b(bP ڌcOt5SJPX۫ {ށbD D[ᾱDVwA:, :/[n S䓨 b@!"ZEyn^ihkBPX@ 6lmz g*+7}i;QgKqA` &̓a>]QqLr7Ӛ'bb@mz./X;F ŠX9׌0H.3Q2.'e8KFq%&-gMaA)2yNE"N#-!w\Y%: Xؠb(! mzgeߚ(:A00sQi-w!0K-䄺`NrD\mCM02}<*nl Fx>@V J("5nVGrvM5qbO5ta]:1qbw5.h sc1py!m;Pv#h:B!!.А7ݧB47H#;#=^% 8b[#egRϰmz]mm xG%Xզ 8 t659W XvL]P<*hoR@p[U!To  s=Rd@V0LBt! -lBO-6UV J("Z پ"@{<<nmz!o:`}ZM\}C5Yc((0DQ Az[+ 7 !7A(tj RD+пVfs!/b Q@qE$LcicQzxgjXRp˥OLm(``鍓FHڛ#G@i7] J,u[ag!;pV-ԍpg~Cg$vzܷbV J(z<sߙ0~GM'¸Vi+5P^X<*0}B Gc;X}?LW݋^R0(DD}cҎ5tn]se1-al}8\^7=66U'c +??h&6R`J7͝% )o4B2:gB @dLjn DkG鷑}ά>@_("Z_iwl?t=ܥy^=hƇ9 OYڦ7B^?P\&.DmӐ[ҏeH/DHц#!@L'-hLO"o#8r3:bN\ /oGv s_.[_;e;C"zK:O"ވBn:%xy=TG1qIpy?@v\k_T7ʖ`R]o )Ŝ1`0`ԟ%&k2XkZ=_k4o yWw}ݏ{/g( yĤA/8pDZ)!H(<9'-g9>sr-LߍɑΦ!1~nY6մcqP7)4:#LDZDPfYq-QVOn{8O{pS4 ] MX*N1w6_j6-3o0"5jۣH  Y?)8]} w6)vrk}ھ7؇hǖWr;6x6_@1fjZ!`jKZK^Pԏq,1F;{9ZMw1z"'p @̎ N>!WA&,ǡOkZ`OB,rΣ1/<^8RD}(HB4ֳh^ϸh]şw5Jhk0l?c/ÁۧPWՊW~ScmO{aX0m?\8߇E>0W<2K _e & ŝd;mOX1 nca(5´߸effHo )TiEWPw +>yG^;֦W eO#KS8"NCuXpx,Z;+kf| m}'P2WNGW߲KVsb--$.#PڣkaY`9n3x8Wwe=_,$V`"GL;'܁T}"5JrȀ52O]ғ&gk;Щx5wܕccppGw^²`Qa;Ti=AՖ6;_GJ?\/E[bNrϐHp@ﳣ.L%@DAYp(#Bh~a#DmS5;3&ƜFh iۼxPF Q  7#@F_Kwv{{j;X_Ke~8}[^9Y IDAT!Y(38%q7F-TmiE܄%~yNŸ [)I9xKcD..@˧¨[y}v7CX/:U33ZĤH޿8P*0Q`BDƺMBTo:;v3Yֺ5in,afbSO˻Q=/E?4w?}]ɓɓ툁 GQ,$N]D(< ۗz/nP?[E>)b|cO(F QC_^+GC#|fMfOվ7רS'6stk&bƒrl|t vUǵXf*VOn>G GBC6 s|).w{3FdpE]?'y\sd Ui'Y^+%ϲ, mD"-F+JHPvDž;W!e0zvlz=h `H.\wḽM/C&xoŠ[bʂbp]Vt<+GC0ۅP?Ib< nQ,6ڗAt_ĸ#vcmXC>ŊD:6P`CDk!0k 5pwT̗}owCi*ĝTck'd_@ }:{Òh+ǥmh:!3dO'n Ď?(q.#f &®!!:+I3/!G@nnaϵ~zɚ iP %F(D4ܙik8?r#3jߛMo<*7δ4{;EFwb2,i nvŸ$7jv_% Kн=hzCe}_H0'u~" vD{r`<͔Ko5>[pd) Q# " 2RM+AkfnRt6=)膆%'cֲrl}N콌۫pr_ _?WF#aTokEͶ-mzJp=#Y<1d:1(c? ˗w/T`[6mȻ 5~ռ-yAFJc]D'V]lz&&v,fJ σyW - v+oswC쫺ƶ魶mz eȝڍV {{1 bfاs’mEqA-V GȎ fO#i;Tk[n3U}C UB.4[9$mzuD4yX)OU8qMǸ}Kz)oAvmh8`.h7+.w+ zJ&b3/E1? vj죅( {\K#vD Vw JRn ;Tр"4֘\G7w|f^͹gӾw6# "¬嘺@xcd$}8ԍP%P5rțF ?8]3E4E0 ^<d65`P݆;[.;cby2ϯJ?w1kiP^&CŝÏ< ~ZbAȴ}їB ?n+nrL7e;e3~yU)>`J|cd;br/mz}3s+b|4nkqH=O@| 95mވ|IngmM2ܟːm0DTSy~ #;]Pհs`8%,i f.-{,hČV g}jK+2)y~wtq/.YeplovI]Mb`ɽh\>މS?!4כ-[[SOyw XV:a .(0!O{ k`=hߛMӹoYR?n 9X-GSm>xᰬtMs[0Mh$ ^,Y8hVmz= K|ȟM-.j* ܟG[a;9`N "ABpH$8p]5 ׶Hw3҅|.3C%D4o ƺ+"u/^E0qm;SPzf\U?#;.8s'` Ѝ,8,ӂ[-+*E@$"WA 0&ӐhpyG̐m;ޅFS}𧿒HSal ,{EqaH ]-8>v=c.m/_xikF ':q@(0x@Aڱ>rZ[piКM Yr6| U;qxGV2&_ LK{Lш+J2,4 ,HYv1-I9w' *=Mɕ` ;28p?O'-  b9&AS<![ F֙l7߄9ͱ!iE A19i2u0]=iۇ6(J(sN콌@kc >|W1 se9~79Q X|YƸ2,8tV \~)ތe?E?kla +!C<3 @k.)&˦X0v!@8l\v|7J"i{{zxfnߛMo炿!ܾd#^/- fcg0@R,~\-E 4ׇ' <:TALcdnGϘu:dߒ;߂Y,C }8j19iFfW|% ' Ӓ~J1mwBc7~8ԉhe 7#0j׈ssi{RҀAD9 /5׊TM CH!}Հ .+bjEI_вȀ%wNK`%O,9E>\w,>X.%=R?Tp92 ev `-h 򦻑? ˺fx@ <_O$]F@=}Z$'4B.!@2@i(-!OضĂ@jSy}'{şh9zve+~  h"MyƺEޣ9K?ѷ?]ޑj;zsQ)sW58{ 5gQ<.) 0@4*. QpA%Q]v[Bt [rŎ j#I,+pQId &GIsv1! x>U)m8ͧ/3oEGvxpQ5}|H5ȹvcwܾ7;ޡӾ/pqߌEŞ;IQ`~g[s>A}u[Gƃӷ Ba?] yY˽cȝ;%j(v8Zc6Iw[a4`0EbED(Q) pP Țf.=|68b]E'݋Wi'>`eAU(y eiǺtnY;+]Yf۾wlz(,./]y[4u‰F--G^tJ1`̀PK> &B !JH {d݈h+Ǥs-F FGO*/cѷ㡉BePn8N1a6yi DKG]άqF?HJJ\!v,4ֻ|6\bm{{Ҿ7}_FF",;o</I Dc}" H"8;hoO:WhS|9 ϊᝧai4=4$目cktaRJd2]dCYZB7@$E -+^aӾ9=Ec_ &o ;o r_PѺpOR#5, vSR vxhqFD[8&ݚoIZϮ bi+90I8SZx f._1;p6}?w偰{;cWej&q4\jEkCP>)erBM^G4$Wy.?nuf@++3jhN"@8uG`9pMtyr(ӑA%6ܟzHwK[a $( ,W[LD<Wh@ذ|R)p/_F S䓨@zTGKQw>3 p[U'7E(ʦ7ohKk?݋A|ꯖ tzE<èLwM@{j~L/`jb?6*xo ŏuI dA/ t `hS]p+O=]S v$jS$ |DU6 [Ak㈴A F/z?tl8z)O@Og~޷5 -\>s9 !(Ĝ)}IL 9n=<&o-΢#|*){ lk7&e\,6͊}z+'#M@ ݘY0ȫNЄH/ g\"H !QW2b=-jH32N0B5ޖI,Ƽ*- %yG!i:7/C]WC.G0׃J\:;T9#LYPy+0FU?a(<~-dU z^O!$/"zLOëaL. ~\H¿N죅fB+  O_Z$bbGQ4oxd$c֋|<.{}mdN=w O*kD -kSSTB %J*eҾ"'ߋR5!-Puձ K{sGφHO,1*(@=6ᷛ!"fo>}Q?I ~4D0"jMm"Yv|UB& &r  ]u ;b"o W^ pp^0Q7hǐ;%wBAzDPPO Z:"+aͭ?^vwDw[)'}Ie{x|& {SMN\"/_=~53hiPX@'aCOlV7Ty~3z/ߏgށYۜ-h3ݿ4p\C\c0[C+x$z#|^.x? ޛ* Dn_ N b-ӊ~\ue6`$/N"Mwʄ @w3q?V7 9rDGoOn  ֙i;|B 1z>]^qܟt` HBy3țŁ @I:z1Dn7CMuq4q35?68WOvC<2ݹ FMoVQ2?#p{;:[/sMgXpx,~" ו;n@5@XGS^<>W1 s# %9`V<|.5Mo#Z-*m$ E1.sdAs, &1fF&1fL"م  k"=p62{rxo2:c-I \<:b`B,0T}oB9܄…nMwe܈8&@"8ɀh,: ‚`,Nfq,K\ߗ<VɌh@D~<ߢFMu̺b^nqx=HHso :P:!wHw2oo;UDG:c'c}uYq0Qlq F Ȅ Ď? .4X.;ц{Hhc {ZOHi-$ opS7S~;X՛!Q}a4 KrgPXARt x0ZF3Յ$!d?v&`Ĺ&<ۓhs;VKCӻ.ԣh |1&> \ÁPi Pnl~4fWVH>r{CW΁ &1Ap@@<4"ܕ3`,?B]@#naϵ ;[5~1 3|R$q _(mGDT @^]պMӷB([3^owܕcct ;:;Z>EnuwU[\ Pv=x[(ˇl^M;oF&2L΢`!(JEI̾'"aA Hh4aqMH'KeA7#mV{^Q>gYW]ˠ] ^H3i9,,¾m?LlS<f/:.B^zK4H:ν̬*Tv  \!j,J"E9z&b<1==rc즧{ƞivtMܶ6k$ pF @ *Ԛ=̏r,,8d&*_Uι ܜGSHd2aY 8t `B+Q(.'~ & R6BgnC|5(}w]jߎ߶k][6>Ëv-wS%8]݀S鵖@ XCgd|_oWOb|;–O_%zNkX;痬#cѿ9ܡ^^ C0U)vɇo1`pRYㄌ'$$Z)VH 9I~:dI~6vb#%y0NHYW@?  3uk! r9m;᾿ :6jQ?yz._g[4"F ӿ"-NɅ|-o®>pJ6OWDU3?݋=/Ͻ} a]kqu=3[Ug[,p%8,^D:mÐۀSCߦ#cRȘT#!GȇZ gWBjsF RcA>6B &1VX=yz(%p'&*wz@O vTQw50 H"I|2yL'3{a"T-,XzsE'ٱ~v%_.l~yU.Fk+;*_ޯQm"ۉMof3~<8ql?ױEѿlV s24~3pJloY' 8otN:abf)ί  2Ș"S2Rc"g,9p֒ {1&&^(!8!%H sbYQLzbDCaȁ%OQKO|VJ#hqQ(yODK[φjOSd7p v E@#?gi7^* 6e"¢_kMl'[@Feb_Њ%CBq@=D _ iZڋ 7ކ'!v,=> LAH^od Ð#MMcR"FrbE6,QQDDs9*,3T 1;bJHL$lcfXeB`{c +JBܲӥ_VL`^CWߏe~iv̆j j!zT+mp:+ÿ*ać^cɦ<;9|@&uE]}9ه$U~@6.ʝԐDv] p?x:1ju">>Ɵ^ymt0}ALUS#f=6-ܝf`v~n3sz>8Vśۇ}QKq+vmq:5pCF~ Ե1`ӻ=wMq0g9yOiHOp68E<[*8vQޓ$$L.PH E(VD#T cc"bV*q`[x%*E^A T}dl!S7:uOSխ>0l:/vTMeܿvР:)e`H 9V.C/&Ο_bQw Ip]'"a3e 660&u`xI, d L,=1b% KqoaGz|..C̪֝p/AS7#M9 E-QШV  qũe;]#lF1u$D’My^68B`Q/O0T0aZ@2>A@P uN{C'm_z2}p \?+h ocKaWFukk{mz6I6`'-{ |0ś9:+Xw]<+rb(J_矡WLPs%_p-_ 8- QG0:cS EKG9v1Ž?OvdW*95)$cB4b6'H P D"`2YTI4}DؐuH ƓP쓥j귥'~SR!MZt(={DCr'ӟAdl],Bوoj{Kc/1; au Lt'ceU@`M q)'my|0)LGd2F@bBA~~[HYŧ&}GrA6=KixΙpAG8]|=_uk/ۉMdܱ 7. ac80nxjlkyj; _/ ѿ}OEh6_&S1q~& $?8")pb[{QKH|$"SYÎ2h/A}qkO`hǵE8N.?ȸjM G!ۢem$LzI ث1a0y[7D떄do1?# wJ砪)@bEp:;v 0Z X)$GOw(!K,#+Tc+\ 8ST@YBU=:OV*?fߴ+;gȪce^R˯ "[8w a˧5¶_/ n^~_z_G#?#kv5c~~c[1R[)Ыf L3FߑTRHpFNqF%"o,y{γ5Q2Mh}90P`=!qZp){Fɝ$g ftĤ) sъNF5Fˆh$ $H,$*|z|\J?El>?{+ S6KUah;UQDֶ5?G8c]Y7;g?pΑ 䡀]` ?z z? 3mz ;CtmocwpWϟ@cg[ onXqټ?+icUƸg6h<}Y Itrdmz֦סj˛TMML  Bl>(OI4['s)b{Rx3I?'B6%>4\T4&D9tT$VʱO 5A`>;VkT4V; 3O|HfۗsV/8A<XWϊW;Gމy,>!0q̭oD|`3֤58#kRHTq~2SKހ\-\QDle]Rvgk /0C D.&F'F4D1ʅhw?)E)bRԓG#u@ZB M4gw?&7pCrųѴ8 uPhH\Be~Ba]o_Wݍܜ==CMug ;0e W֏_gvx+G?Ċ{`3g=0Q 1N?kM! 7N# k[&"p(H%ysOES~@ cGmTNm,% xPƆMK0e!S n :m+vbt}H[vTӯ-h`=<0cՇг v}:p~~_Umz^`lg{R]pU|m ' ;HFTnk+P&j*i/lkȔoU(~Ũ.yZ㾳8@‚/~ e=[@S?6p7.q)> (X tv|P Ylks+2˃x;;҅x3pr_w58zb C(FB`#oq6u8?lH'1PKșx䍒l#yȴr.\8GҢvɡJ/ _`x6&ؗ,F#ҘXcav<'Շn76u%O߯,[g2tw'M? M S( {|_\U>7ű]# ܒGn7BؔCUPX *ZCC=9@h4tT(Д> ^ڏ8Ki_"V[ER)| pϾqo~^mzt\@9awc@x{poǺkOvg/ `7Ö\Q?ɾAǧ֦Hl 9VqX_ModR |Wc>ƒ }ƒUkq~K,2?2)<PkE#4a"+Xn@`;y*kZGnDgn@Ih`y" {)#˷tguT̪AL1FXզw`s=8lq" ']̕)<&(4P W 6Ԍ D/π~mD\l|./y<-݆ Xx߇[)ߑ|IWvv|>'n~lX|nRIUO`%}͎Y{q7Hd cLhf[kmzq<E:ϏL'J5G62ڄ[4$ZapSH4h`M\wz|3Rr0kF.tݳ];iMFㄵp>3t~% ߶7RfrWdzCb߿^śX݋Z7ﳶ#?}|aW';=rr8? 8`7~1C)['9cp(_|<Eg K)ij@b:19NT%JW_VϷ[]]Ɇ~@,`gN XD:؜Cʸ2UPh eǷec,А+nKprɿYT*p5"`AgsixeȚZ;DW// "* `_x?|h#Ĵ魇:=I3#E<=zq nR\eLK8_Nub^b| )^Td_{p5Yt}w.۩Mo9*{:'p}ל{o[]W`͕ۻFַhe}U_`8G'&-x!7Qo 8 n?R26(aF8Gv&Q|} O6fÆ hV~шX Hr< 3'y:TgY$B&؂Q ܘ`1 ˢȃ0c"3.M9,==/^yG*b@'M?S,Z?%P;5P˅JYK$m?Aw%ֵeӵt\ѭ8m2_tOA<=X2uﻯUϽ~ɀoj1nإ^b糇pY7yE_&(ye D0֦7:M/o<1)Eaׯf>ܧΨ 8%oܬ8|+Na=MdZ5fH$)1)*eI,ioz|F,AK[۲!t\LaĮnpCP[Tv+EW]tmM@ݦw1PS s軲U液&69z?1gj@5P)AN*xhCwAE?CV!O7^,=^|x?o}x0ִeő'e7, I LRӟaBC{_1txoq XqB5G۲iU޴G ^"jkp~%( q~}4Mٔ=1~e~R,F, ?ws1,άR>A767a(O [hd. :F=A 0Q@3Vq%ry :_d^fL 3:uPQ}L rl w_~=DB;n|Tú`N8+ @S޳!{:\ mTwN֎c \vHW`Uac[)NQGGnEqסN Da-_m ֽ6 8?R P@&qFQ] o*>Pc;e F~iD\f2T XJ~GRס{ET0ua$Ԛݫ#]TCqO \`@]PX(V qBܷ/Q2=69= yBZ_;m*;6M/_}3/~SL8c8r` #X݇ūz 8g0]|2plzUך4lIg#r8$ *8ْ<`ȑ7^0m D%1PU,~l~eiKW;02eLzlϠwmk] e?{T8 +:]co|2U_oX6F&3ja{j'U0IU MV$*W<ӽrr|K~|FW1qa"_}?}^S{02}h,6awU8?8rj7酏l^nO6   im$pp:Z $ (*TC ,wjtd: p[~/5t"0[, ?'&58sUb== @Ϳkq~ j1N/O_Bm(h^' (vb8Ŧ7IkጵN`5csLF9LS^إ`4?Jb: @͗.&ρok `?~)e<}XL攻6I(D)+GPX'JĈH %m_NO|\J駡7](ہv|p3 % 0)ɐ ŀjgc á@;PY;j=­d D!J bP=:Q@ e-!u0_؂}ע 9۲T_ 1M MG?PË \xD߶8'M8= _v5! }pod vAg6޲MIM74"|l(>SL.T1($Fە7s17BfL)qZoWIE1a *pLEa&8ȀKP6zxؓb=XL{; - n;DnZݿf>0&H4ԭ ͹8G'=]PQ` P @_Q")  UʞI΃H$K1b$>g]BNbq|H}HŽq`o͗DBSʿQZ:Ns4+ҼZ 4s]Αa~_;<M M/YF댥T yD䬍q5&#<'dҤ"KXX'GuG`v/n@T ۆcT:v ME4e8J6%aC bKx/lc96x5ns$_Hzǧ,[Q`O+E?5|o02@5 H5\ h P f}l,_P:?*$uj@KQ Y's@a͗ ?}kL⌉w,JH%+O"C݀ ؁2.XI޶vg˦b|Եw8mQPwb{[D)TlzeFUް dí5rI qpSS(!q$좼-$SRT=_4.*ݓ j%@b{̀ʅ{hWڑNv/M)D.`K6]|#Rzj(V"qFܛ =>.}vؿ~cߑ(|V`Ayzc(@*1f Ą._b?8],-ph +(<@Ya BBD`Q_ v9r.70P\JQ.] \8BqpOMEoO65Y\Ӆ1N{y OT ?k6i _XZ߹)"Nɴt ;\@=*ޖShob?`zFŝ*ڜ1`#(A irlz%B`#ƋO$B>Y:bz|SOB9{M_tۯmuLDY?g?21PC@] rmğCY~yd '}bA>e';G " Zjќ%epuNSca M11J6/cqLOc?:UW.Ɗu KyyV[d{q%Gs;g8IvGkSwTn[q~0Kܝ)KXeI(@&{?SQ߱F~OEK#F`rlC%xk ze6b8 IF=&`D }K_RǷ\D8_nG;\ h5km3dSR cl%m:k~)i |5RX-O d~A f~D8$|G@~e ͳd=J 0yC.!䊣( (=Ҝ8gf"&RwX ot˰xyye{1G矱oWZc8G0X8?(A؝T1ަ,\*y`68 IDATn/#ɕ}c}-a~@&+.? )ƍ`#0X 8"b-) yV1b!jM^ů*˺VC1~Ku+zC_1oi4#a5U>vs28GD>ʎ#ItIDFrg;N`V abPF=yC'Q/H= < Ě'KQMO|FR1h*(=2ҭo#kZaZ@myr-[ +ЀJ&< ZnqU8z` >;}r\zy1N-T!ٷg7!Np~z Cg/Vp~눐L_,"³>lz)/$3.h4?x!ۢe-E,H#a" +# [$~7pX_]j[d9:5!b! !VD"0"%clQA.^ं+nZK[=?{G\}JKn}^Y8 י8lw-_M G6v֒Fc죘cE*H.^ ,Pa1XvXkm J d+FL,=6G ^z ws}pK&?yS(ꑩָjߢr\v@v8CN/|nɿEFy%~q"{EWG0u)^KVE-eJbdaժQH"cQlqG.U?݋WžWõ[V_4:M!]1isĿ*=0v 5Mq~kq&22]]56u85qwq̅`klDTh>"e_@SFROdX``AOD~k:2hJԣ>/ށ+; LT՟5T@ ?\\MΧ>.<:}U BQ"%ojmLI29IZ2̜ӳN$nk-k%D+$$}G{_xPUcPu}~b@~nUNL`#`H@@ f&"Ef@>g'x 8j;/lź^‚Bt>ytɓ~Iu~gOJW!m:0nLrZxDF!k5~W| \@p b/易>?: V$~ixo |FWAJ~dL H O(bK F;4*d8 j矟/,0-­~ywO.8VR0 )UW=ί3:_n̽(/2LJLKX:e~L*+]ON7&Fb)4. L-H3A;%beA( ! A _ x[.k#M0HlAO0% 8<(r8"oA:K`Uج4Fԟ3;*B~k(JlLK̙ +,,-87:wg)lۄ'߂b/qEdMV_+@iZ1}w0t~1楣3t~cu~0wIL J)D#IZ+h-ᰊ0> rYKc\[I565.-F7=$C(`3 50Uo@F=Ud((?LK ulsR3_VOCA+-'<`1Bnq?։kzpb:< p4 %ݓί"|u~A pn_D* [JJmQYaFr5C R12-PFt|fCmU'LJXE^+H|!P5bA7 juz ye?,g ]R%: )K2.VonCkpvܺ܏S^wp[UZh/j d i":n߁tVaβ|:v?M(Q ͮ%6Ċ5+IPF /P\[Y3.kO!}sH|ixlQA2cfUQԏ@dȺ_{։ qKPȶóp8ЮLM,"m%BOVlfx,Tx35<]fkuAאڻ~NK]XA}RDrAf&A4Y (aH^?hwR! 4sP. mcsXg?O߾[iƓ_߂잰E!s+t7_s/F?=1ۈ`u~H0v8hQR2*Z@+ NM%o)=䌚Vn`ًoW{Qa m\u/Jx+~Ł>>o|7[1[g7"^'#M0]0$3' Pb3R) m LW^~':" )D}{'jWp q ?'ۂ-sZ2uuls뷊^u~ !PG (NA`u~'y2>l4# ZRRIm +(Ap9IIkɜkMb?wΡwPTj`# 0 L: *apߎb k\YJb*_>gqgW02[O+}x _܆EYW:SZ~>߄moF: [ d|/EB0RF9aO+%\VP0*m04Mk1:~W> \];8Y^xkU D_pKQ޻SmzrPqfvYSr7iVb88 tu 8 *o ?OVˮOo[/0 tu~2F9Vw+g1:`kBa|X1 OYKŚ44)[0&:Sسc@7(2+@@0 Oytf׻V+z2v]4+<'"XNȆtF8 NOʙn<ō8tYttd-Ng[,=0X!]!֞f~H*2P؅ x0os|~`~SO?ro=v0=`gt`0M R$dpOƿ:mzX+Ѹ߁SP{ ,).CoT,1s {S`x2+ 8ٜ9O5?xƇ]W.5 <y} ~y ?ǿ bz~qVU} Z)EhړS現 L> S&A '*̸:Œf$8%#T|R@0Fʸ&b Fxb5 yN)+? '6-֨ob-HS++#/R“mDa(f~(:HEmz7B4s^ٟdH%|")\, ll6?Ԅ^_Dg_}OlB"{|IBȨ֗C7Zc7`Bt~9 c/_8P{- e?3@,kMA$Ie r%Xb#=hn}i&qN߁\ _Ap/^ܹ:_nCߝQ|Jġa4jί ֌=Bt~3gu~e3~Ks@JJ@@Kr1p1aꠁJ(>5 IDATbZƿJϹơqL_oOloF_d* %H;3)DMS7lDmz6Οx\|U tqv5[QT1'4OY:4m~ 6VXJɜ]d&S`8p8 ZSJ;Z+:SPX@&F(ZtJ_XwYչ֩uc '![ +ADOn2$&kl;La':qFmzw;:6yn犹/οE`v=[ĉ:p[~7/cS-xٍٝ#){RNF3@f3>ϦkT(ۅ61%'!bu~oBIY`O|*> w9W }F#iXx (I)4@ZTF $Đ"Wpk/T-y* >j:y =˩vQA@0BD4Y;@? ^TѦwSԦ7|tdKȼ/ ŋ;8V~b ֎p7qD~u3v\,gOV&L4 uE߽?/E[D/V2 |~e1'N:FaTVQ F!]gekZ ȇg &m\5?MgZL}˟9 Pؘҍ8ES6ã74(o u~ACr)y$l6Ukhn^W0=_Zv дz??-/|L5HGfa:3`~s: VXy Dit|@¶Ü@hG2)5eIFSTZJxa|X MBbFoeZgn^Q$.T`&zf'Fm!`B?j[mY6b ?Pj 4movtw{Iߵ? o*of>7&}3c8_@~GvBOu~ o, FcZ|@FA)$Y{14#>q$VXbJ1ʩN\u?S߇6M֩`H|d}δb! jɘɊ287uxq 5%v8:/4˾@lׄ_˟v^lǶGVa0;? 0 6@BSKO'R2K9)p"L͌v - f J0 ZxDF!k>ĩTW| ^:~C+ilFap;5n @$v^%|/ | O|}36[ow0.}rah^_;g 0 hH*?YpHS:r +[,K9iZJV R5IRhivvZ+0X 2< `6U暗M2x.qLTyĿwށM+ Fg6@0d0zB)թ O:tӏԟP +xqR.|tI~؉qO4_0~ ?}0_0݂t$d-NmSi ~ 4. L-H3A;ю`0mJBxФdBW{>xKL.+#:M0u;ւtl3&hQ0@15Os/0O?vzl~P jQTyc=c8Aujc-#ÿ H'uN(:/(3^VX sj;<#>@$k5FtVF;kMpXGiX T0uk*.ձ?ǞToC\T:?=  }PG5HT$H2vXY?, e}9ؼ_'l^0 u;P /sCCG]} >['O\gJ*o,30P$F4CF ibbeZ24RncR'猯^a/"c\;3 % Gr}/g[j_rf7&n 4Wcq /B>uLw-K(&> 7J5)@]WKbmkV2p b Qb+kb&_@?sIO|f?jg>y,/g?(ǃ6O!2>#QaͶw180{ Cs)^YoX9n\chW&h6&0͆Pt JO OGZoɵNVBL_UW}tfLSz}9wC0o?ݿ:ML#mUтaVQYa- r nM=S7{}Ӿ/39ԟJ@jBa?@ /,iw?д:\VXb):> 0 1 rZ|`(0>##Jx+7ݙ b<}ؖ/h΂ECy { Hitu cx0&IO`ČS t~%Lg$ZbƜY'9!$+AFF{YAKrLƝФ@ C$)g|7?)?uU+K(iF׵AtaW!1i'J@$I IiIB) =e"87#Bi!ICD~'ORD:?o߁VX,)*>WΌ cu0X;ej2>lN&jУ?d 3*  5x/gT&@ do@8/bZīH4R.I CBh"$EذG2 AaT#EI___:sO VHjWF;S$(α@^`wzMxS.؆AbgX `Nw/-h\[ R?a^K@ _ HIP*)"@H@uYbL2Rd ȸ4#ĜsFƁ z2znW^M+_~>h֣8~'|_VmÆM낦% H4B ?:$()R$OB,(ERBP $FLtoXA> N a7A&G3/izBA"u7G6δ}7  6 ȫmQj\DMJfD/ Q'B/|rd I!eL %_;nH {-K- Qm d|+p @.H*V:4Rk5wKToy6j X?|l@gچ1@êJ~qnh5VBK"Od (*#}!dw4+Hqv[,E#O|,'>1sq$;jH溺#=r_K]C8Jznj*pXq+KJGu{ 7L2$HC C`#X0X IVcM=`lu~ŲZV aw4>"Pe 7 T\71m9K}_VLᣟT7;xٍT ,`ExDJn,aiXeexWBo bY̐܉:ªo1qcUaWWm@A@{7pPa8͈W)O^&rJB0 p3r0h&b,f }~NTC^λUu{2N/#~.>}VoS؆U2L O2LZ0RI;,$&`?:bܗ5PFjw6΅NFBVԟI r9dW1bCMpA+dH +Y ɱxly2,}tdX8zKX?1F1ԟ6sW⌁e+WqǓx s  !]YlX,ˉOi%_=X  5teWnVοX,; @+§ow Hi폮oFe,1bX,˄fDXkC#@6zP "杇_з49 G_kp`<6\_+X,KY?i}u{UU`vP sR/GX:1y ʚ~}3?j!%[,e)|~X! eCi`P_%tOg,i 9/GQ[G'bX,ˋRL7v`H7N%JoMW~ßfIJ07!5j“oEu}|WgX,SF?3>%jP ]Fw]z P'ϵ oX}8Jkԋ۰ze,Ų(5֭V>͘ #q8a*! Dž "+_7pW7 ®'lBbZ,e9@vy5 0H̸hi_ eom{cPӐb6bX 2Ns_> Tm" %nu{ ͜sNߟG(06ǿ˟v1G=ݲZ,eQSƫg41~0x^@ Wn͌릹3 4@ &>}:q`~m *,bX,-?օ[X0|Y`] KzOjANe;񗟒^=ۃccd hP M-:bXJMo$] Z%oF aP`*b͛1|]W1<l}$X,@?B>q*5z !9B~{;0/ h&p\_?kZ,p +.?EY?b^#c7C%(#XSXQs3PqWOuC5 [QUgZ,,nZ_k1S'r#`5d!'Xˈ5Sc2 `r:`b(WVW6e[==[,,??ǜ Ѩ8 "uPbJB~ wO0%~b >܄xVX,K)YN{33q* )LܕnPh`fܽ>Q6~ l.hk[,g~ZܼFM[z0ApKg{snt bF l~h%p\[bX,T+p?w>$hN~!pOi7Y1O8hZ b 7bX,|_:FJ9@E[y.rZXPbqgX,E zΙȘAbA_$P097J0-bF99ߞH ANA?+wgtwX,%E;9."Xuys~~EdL2X*.$T`procC+ѴtwX,eK|ow5*0.H@D 00*)4oAa8-\_ݏOb/w0>a蒃.@7 JiD@êJ4B!FaևWb5%\bX, .崾o3$/K(?dXˀ$hE&9%ݍX`kOt^×_bAnY½ IDATR9$ wgn!|mz~+6m*Z-rRЉ{Z#quk{bfY&_I 77G~. Fxoa͖z~q+WbF-da較+.Ҍ{WԻ7pW7p~c5x+,a #bL3KWe$؄:F*_߾q%|yv\c?+qX'OŁg7bY~mbX,˔iF4 ݔ(S7Qp*9 pϤl=~x{Zy#8j;/lź庵bX=///0xA0~QG!?獖X@1TocI>~*{:< p= kX,RblѫmXVӨ٥!cq _bgHوUx۰yqtltYbXRf 1]a^5n[{/:}eP \}}s%q^mP h=҉؆bϙfpáΟ&kBwY<@nZw 8-|utO l{O|} *kc@b,wo0|IbzԦW[hyqI  d$l)sUINŵ^ uH1jviT-?rrY2-Wb88 ܹ:*f$^bXd~f8w 6Smz6kToS '%Jxx5,3@&+س8+h?y?gz7ࡧ[ X,%M<.vZ!1tQ6#ʠfSPi}^堲6/n=]n[a^bXR^w/j;V&c+οpX @V7[.ǿ WgѲ_؊^bXM`\:xئwNԦcШpmz ]oƫ !te;j;Mܺ܏OZ&labYfg Emz 6iToW,οA5t='Xc]s=8-_ބOm-eɓԟHߒ 'Wmz/>KнRӐ^t+m?´labYz@Ԧ*+_ހZn ڭ< '1Sظg=5^bX1~ Z+Tn\6Jjrk@&$ևqkh=҉^ܸ؏}i_7f[,Pg9FH9` 5;5{Os_K886~r-چqt ;r& jk4ݫ,?n((oC13HS_ƅ>yC=Տ.N~qZ{`#/%9 O*)m#bFloo[5Oe_a#+ X,‘~+`@NF|:η/poP}]7vwpL:.aklAb)' cK yKHhҐ}ٔ/O6@ +]|7w`ৗqcvl?kj{rZ``WcPC!h 5Y:؂ ?P4A*<wq8 ԮĦ+%ܹ'X,K`eTnTX!669-f O *o+aîF4EN\:хq|:VԢyS:Y,K`5Da`ě *jH#sao9bB́Vc:?vw0aT7T,-eIb F* 3/9g1N%#7MŞkѼm1:!ߝ@4hX,@0" + J/N+@=ĒIMc{ņݍp= sk}nZZ,˒Cy[X$nAbɈ/6"-0pf?C@@ê*l{ *A:,=S("Ngx7Ōe6(y/O#o5RqM5l]0yH&I~ { sfJbX:D~ megd/QT%q0y._\@(+Ѹ捩t9P_z(;p H_:t*h,˲*\ck*:-/HO3%;vR4i!bT*sM\REV ng0Հ0.t8q!SI ==@uX, K]Ńo{}0 0?KH 0ŸKAYP~$5Ղ琼toy-kjdMouM0L0X29NLqR.!Gy/Pp-YG@|IL$k4nMW]U\{@ I^ȧ?wMy_'CH] :(0L d[CJۑHо;I~*|OOvJ*GlHGryxNxa>?~ȯb٨tT q)Pٵ_BhhtXć%sָ`]6 [ht  3[x;I2nma5,'[@jH[`ˬS t,5)ҭ`I7C`Y )p7hkOlOW+'g-N:Wەm;P^}!a_/̯@6AT/1 pHPwfRB"c3y vY'1 )C/`gz|{p]8؈ۮston\ce$`kRؖD-_Py @'’ mm 4Ґm)doH|dݮYG=HZaR[Nƾ6[)Z`NNxbu1*ѩ;?^,X~K|elAHōk\ݐnQeck?+k5Y@ m'KHm-v` AC7@SCӪ2:6KΧw JǾiw6#**{B$ρU;1ٍ<θ;\oO[e\`ցjS[L3H= eٚFڂ˪bfQ(Co#6`}3Gӛ M MB\F& OfMTp3i-a_|c{HHsv2{l FIŸq\6>sEӮ '}J&NĆuwX6B.r @iYrS -4]e[[<(;$N2]iK>e;;v_Wƞol'ҲSRy<ܻBh/h6Cvc2 EQPhܴq0f̓qWu&N'Zm0"S˂矱1Gm-߼̇_J `˾xz9Y I FR`inv .h"p3l#Ӳ-Ra H4L|;$>Y-餭?eojc81H'jÙl}@mЫaB(ngn}Ȉ /|U/w w"|ɾ wDDϛ4F$ԝ!94kjOl!x%T,Ī22yǭm/YY:@.4,)u̸5- NF& ;_@ˎsFHM)N_yoݿ˖iPgßyc=xXB ZkeZ%[W2ȗ-n+<ןT|O?i&NH\Ӊ $҄zխ߂זrIVƮE9λ [P4I՘OfB2Aö_.$ex;95Rdף=~ЖfSt]IeKX[gIŃR˪ "O tl! [ȣ; FcN@?yɋ7~]auA tU]hO|j'KxH|ʿ /D=o djb+>{|m S!{~j )V|z zt5z9L?&΅#;"rk.3N@.`g %Al@Q &L=JuR)Eh]8CejaCw|Cj{05T<7gs@9_RߋyXk19ddNhCH Wy7W74]1z,㣮^[W# йqwVRH- %rŁ)YJ ?((UsP@vX*w"m?I%7*oJV,onX>aYC.@&tN͍f]jrr#| yOr/O芆m)i&NIԉ]0I\5lN*Wm}]qݛqzi˃@ӛزh MhR!u)" B!B=uΒ lLًo{CR/k ?!`,fd݁@N r f ;@6{/ÎV֕r&on˾?HJ_&ؐnq@@<ٿb^'Cg|2Oayu917 &N4lc4US޷39, @&msK|9gߓV eHvز 羖֞9}$T٬2?;>KO'vI۾>Y\p3x<BCm}/mf̟:l 2δ~4~n!3 k2/D;!.Mxs_9{_߮ê*:~ Wks GQLjC>@j2_f g 2;0r; C?4GIXySJmF^9-# ­(x0K!Q-{]S{A_y|{ f/] @{P6~WL#&M)BS4Y `9W1k\]m4iS@VVOb*# (';hBԉWIdߩ)G=zj' [ʲ^۠ {@چO8yϟ6:dz+KaL\I1y*@N4D$wVTi-yT/L ,a 6qCwPx/?ԅ.ӻP*;l۹1Δ&4 .';<+eoſط%q?Ц4ȝi{hJ5ÏN z`29GcellɁ6ϯLjCmt3f(;96вڗ&}R-֮2ֿg7~bAط3"';Ce!xZ^̟9h( j{O%K63{m _{ ~ҷun ؕ"<@*].#T]}|㯜#z׭:_# f}lLv 5˙찫:XAvxM_ʛRjHwi4~ӿKd=x!D3<+DGW5K1wꂅgMOJ39 y$~GI/A7YdNg]OEܺ:ɱ~qHѷ}1~BS+T^W9*찴@ۼ7~[dnMTܓrWҷd^{_6usǷ&{B!_!P)`b<3L}5CӮd&4&$lcefu߅\P Mw3LƞzhXaPaPs [NvLpqA%qKdt~>{m.Nگ,עC~V^:u=+w>Q90Kg8Yw7p~:zLjCXa;37a&(+;,;VySJף;F,e='J"w%)C^/ Ͽӗ"9N+`M%?8as#[/ʐ+l09tv.F1,}7?&D+mI(щH?mغL{+ B论п]6 ީV[RhA= &OB$laҩKPR }<wez5]n<ދa0Ն*îր;~|7[WGe*)~~/;v[qֵa<Ϻ%ӻڐ d~EáeG[S7;NleW+|\$HVޔRc7| c\?j˰mwV';aCnOSյ!ۆs2wR(CLbį70[Ma݌(x4B)|AGX2 ;/pnla*6ܳ_ $_d▔BݟJN=CR>2I)~۪.=|LL  MFM&CXqPmG';w+`[bl`#݄_Wv87VxNO#px#@eeV(!Djc~0ZWsQGHħt|[;Q+}Z_[_kKAFّA,5k1nv>EkGÿ<Ԅ=&;D'?˭ʛRlvo|FVxX!o *\"Z#?}}Ƃa= V?킥XD= ̶ A>w 2FX1x*RōOoQ#tnc#߫_mp.# 'PNvxCC #c7ԓc@We\UɲXaS?V]lO|b'§[U[̊K|pncIauRc&bdrRCoo jj-+:ʲy:AjXtarXB޿>b}+oaRd(w?l SD|RڶS(xNy"m_?OD]]w&{WL*܁en~R)hAP_%L_$ 75 "Sc e d-`PnK`ἣ lG !2O@SFHgL aq-Ll4O 4vn~ٽ/AV`|=-[vtu.:{h8[>җgpHDcW#Y{lT{`SPNvrӜd[? GwI!tiYL㗎}Q섔"7MJ8;F99I+~y.Â@D_><- dםW%_˟f!0Ba6g`MT3D kQ̦>_̫tcKeupWMY2-PVv\m,ԎQ tR ?^ I/cY^W[L/t=:x:PjUzc EH'l.---|^=΍[DX^K&]e%"#4e2" Ȥ8A8s* G {Y! 3`6T-jSi~o|ԁ{0_{*ҷL2 Apfoa}k=Lel{`*eq-1i- f)!-M I>I`4M9aΘar +*f0U^Uy|ﲓ]$_T835 m5&:Pѕ#—pcܼt::OoaPvXH,͙T2Vز`vgƸquD35׆1}ek\m&qfed5 %2S #F9Ig=e$#_aM$d؄l/ ,zxwYW"~ܬI%w2zHqS$UUs P:R8 Af a0ORi&fe (#м.eC2Vn5AltM"4DF '0Be:TG~;V-.)A; `%$g 6 ix2(-ݿ kYLFJ_ʢm-pБrqc8)LHȤ6­<UzPѰ&sW,;ĆuwځX%k]T߅539!sdh =2)UWp4{T(Ok#bc'=jd|,_'t p~;B gV7aM;~xHI:iLXҕ:PJ HVېض)lǑҊ%h;鱤HQyPaucVr56 NzL2C?n-Yh =_>酏$:&9@3%@BXXßC͆BŎQ4uI$.2to{8}On4n}|㯜#z7 MMj&?E*5d-lǑA[-[HrRIC3ʹ~}n`txB(^\ ] 4:Ehc0Z}r`G5N/bB(K= =ՆֱR65mU(Qp$\G@jJ ӷ0u=#嬜h+Nr!WD 49>6l'I%VJslǐNF MDZ5H iKGґi6H'm.&7O N\Qj]i2'M2Sai4+*ݿ H`ZfEp3SϾ@84 u z:L* =‘h{Xr$iy߿R XA(T)8#,lqrt]ϑNF>mg2EJ`>μ=  /L X1låV`u+_]^J͊DäoR0KriP ܱB<|ĕA܈|̆k8tVmpñ~+x" tp>BCPh؎.ck4%HkKJ#e O5?e&^L1;\5DT c_g2]0HjAPo p/E `a+HbgC$@=k4syt |E",zBIkΆ_p[ qC} D\q6˫&n& LsQ &äo|0g>ƁزQ%ĝ18!ג|xzv.F*K(G !DI(rQP#tG0:_C4=xb%zȡeԨd3VT2%)|矾v) +jӷLg"X1y^c6.Ϭwe@RTAˠBMsܯzȡi8[&aQxOOs+yn0H3 |v|(4]s|/-&?Di)Ajnf@̭Q``*y PP]ml8N䐉5){'âa[=P%Kkgc[.o56=3X|Ԧ(ur=1%_d? 0Kd0[o;(/Ρ/na.pgo_^WoC_'ҲB(A8Bh: D.{-f/z)ܶ:!ذANjT'!M?1C3 Pt!(&>̆[˃篆b@|KjD* ,E6W BIRĆ$8M.~v]tc"Keqmz,wnh]s[LM d{ eSR8Bel1g5Qy/4;R{2L򑺥=ojْ"B}CCIlvTb8i'Z-L1gK*(i߭>_U*Thf(G t'm'^{8L;"cV_>˥n&\}ZrS<*A}RGlZIЙ8ÎK'~ɠa{ ί^Y\Yox;&0֤k>C&GiXyok Z (ƍNh}wI="63Nu맭ۓ^h'^'?c;HMpߑ.xbpT 5aeb>RYN_ "v$z$31v -)4=o9'4g¤nmz@c?ԄXj< Q[#O9Z][>ߑlK v!ȍK||潝|`I(|:~OS[pw2ŌGQĔVZY͐ Mi3L_5H$o6oJ#r.F[uJ+["q)KXg IDATOcE@Ey @d7(:ʴڔ>It(DrϙsQ<·uܽkKCܺ=ȑto&6zPsFy@-_ sh?A7g~w4g}$DL{-f!uM䈟YW?vB 0l Pp7Dـ\zmZ}Ox$a2s?ǿ71y'Wq70:Ȏ#fe0?]2C[hi=#q`rЇ(@IöFcy}{'?{?3nwc@Y=\{ T~f˹jSYC_o}z/Ѧ]|DLN)9\?kWa>~srR:?hyMa9fI] Yb|Dϛhz+L+MdsnK=cNR=&y-+l|+5#QU>- z%X"KsfTP6 66 Aßv`-3`ՠ`sSostU?9_LIį$R79tYqvy~G$~1]@#}O /"@E @L;<p[rǠ9TA?+ALu7y Hת悛'x!n Oг}C=slWzcд+NGcT̸䠟eȖ$t7e.)xWHndezԴ!v"WPK>BDQ6`cU~Ɲ W_`~,ph?=[[gY%Mx9s:(0LrWDܑ~00mZDI\5c%w? b4lMGԺ%3ˆhK[:3w챿ɠ6:vE|(AAu_亰 H5ZfRA`6[CbOl(8ӽ#~ﵱٖÏpLڕݲOxm<N+*TϏ/=Xߑ&zGέ"SHCU$ݿxtVwĕ I#->҂4 r.G"_ v6@2@ GZ*OH;$111tG ',wt6hwbgXqwpO4.OBݿ gE$Xaz#P>-E 0> иgIt0D2 ?>{{#yNd,û9wB7$a'<"p+>TkKaX92AP+q0 ]dgb\<+?=&=={@ԠJs#M}ޯL 䮜^ Z3]q>ZV؊O]W/N2 Ȣ#3l ;l(4sb|F R BI}I`W3gYI\J5V4WCA@s}@Oڤ[q%OG>=·x/"cYGuE8xg<܋ϯT9WbFm_PD t< 5j'1#<'>5H^+lA;W$dez3v-ެR{5NT.rQyM >|h4lctЇ_b}Wvxe{3[/ qy6Ɂ7e_zQ޿95/Q|RAQRt&Ob'CćD0[ݷFjօILg"XQ7 w8Ns߽ V/ *諬.+YcaIz4fe;z_NX |*d]}|oee/@⪏8uJ{Z >+zLcw/pkR}e>4FZ3 =v< 7M/9K|ؖ׳ɍ)<(̸VQ@.6_:ҘmȌ~ͱpU;h'< _XC&'7kԴ.Uq_l^D d_רٵ!;Әi/~qoٲ-D <)&\o#>tumn~;<փe9ZBEhcѡ k>R7MB7$=fYKS2k75!zB~5e{N (YG [Ӣr9ud# [}X3a|~粲?ԅVp8^b$k>:@6OЃey1kS io@w0[0xOxs G~Uk~bgIYۼ)vkH{ uu */>`ae5 =a2ps:>¡lؾfj_9ُn`u{ 饲a@3>7PW8|01BZq  LEcZA牁Ymp~ErhJ [W9 =ȱ2[/q8f?ǦZ9L,T'fxz];)+4CN:<ƚpW7G#z&py퉚-Ls gے4zVk-sf#;ph=A[±m{Nī\^Scc=zM&TyQd!XƆJ}1Cˁ;$FΆ5tv5| :}Oѹa3A-De(U׬(6LTrXCJE/F ``o^=x0+TfCKՋo >#IBp'AVLCꂞϵh GY@E>bjo*Pp_A۠ɭ+yߒy_ʼo~?%?OȾw'j>Ћ?R 'F͘ucnQk87\{ٵN;8u_)7/MJCbFt]ԜX,=P偳2@Z>,i+s@)-h\`V9&{=xXM(J2N5@U^][& ],A'5aq\=~{ҽ:iB#;wdO!-P>`O8V4=c Dφ_"؛IKW頣^>ݛqӜ| G`Ʀr<,'KzoJ%Nt0LzmsC?F斏Mܡgw؍ߗY= 0Y2<;EQy lcK}ϸmPA|$z6q׻Z1ɩ[[N^(/g4{<T63Jבj__e\`>8 t'm!tEf̭jsw,5h>XHTqJ"c[D"ے7G` gEv8yKg+ꦲMö8fs&R 8>œh{A7V,m[WTK+H\ ;ɸז"9+\;51MnŸm}0ASk|qKB]r`H@)_H %4Z OJX1~R7]I@`Wz(2x+qd=^bNzq>vw EDY >,qc336@It0uz"%ٚC&[}e4:Wv6fsx5(干(0%7WUP^WP0?c)x)Z`rG좙І4$*{2?Ot8wsQ| _>+ 5E,]՟YޛٴE tWްf[!ƘĿcgg7y@^1 DTʁs+ta ~YgbIgyvm)TVub}mlm^k1<ؼOlG] B}1Cj|νQ?΍O2z*JZy(|JNelZBG>> =ے& å0+\4]^6?wss\d=e纽Ɂ<,=V6꟟t +j]Qp~ْ&%7Ka? t\xm]^t.0S_B i\וs HJ(J-5={c&fcaGێiZn[R% AA؉}Bw=㾗[eVf- @~@^2os}b"PD@K0YΐǾsC5a,)Lf>1prA=:w~ss [u7uh9A4_! h/< =†j3ؘBK~ίe-¹]8 r#!v4NlsEsGL6@*j@!(SfVx>Rpn|vV f_] .ѤkRD( $ }ɦF)#~M=\bKV& % ̤sWskq]KWph9v ?8M"o ⦩]YgHh9I y9gY0tyb==9oqQli=L/) t ֶ A5. t v{H~tm4XgE|o):zxx`z >v <[0&-W &u"u,JoH#$7}qѵw8c~3p]?=C4ha׺f?9W+ۀ:ЁܩHW5L `]迱G k9?;ew`# 7;VbjBm4qQ- eTI@\7V? s 3>AMDsy[ "uw.57/{/7Na;w9xd-MLM1f__utV?ihw%9tlHN)Ts n|nvMQ9/Ċ{z@ܔNc4-L秒+"_JϣL- LF>C VH @u6m/toQ5~2l{ ®7Nskq˚&.;?0H qm ~O8=?q㷗ap=<<{0vx/r+@JـBo$kTRGе  >v{A+>7MN/oxh E `:O tw+u_wF:*;mXBrE/ig]58}Bf0k۱Kuw\ x%7*dBPDQת( L+Q۶U.h_sqXO;g)l'>/t C4hbŷz~2ۑ=,h]U@HXvW܅#/ Qߗ#XqO>^ڰ`<P2!0{g%@X @™a=;h+Lm?R0prm1'I| =XZ 9v&r k>c*_6CBw-1^i-²{pp~o7pWU7vxqeTysʫB,ds! NYzn`t.lЋVҢ}_ـ6/ga|Q4z\i%a)h2,%\?8MGcz;1}ж0[pq>`뮞Uq$@ʯLNk Dbk=zys'.yx݂{/bl(-?}_ـū/!6u~Q׉`(}i.o`LƥK6'#u:~7vbww\#Dw5m0( ){ew%I#ѶwW0u/rJBC IDAT7,kx<1_klDFɯ?JbLvdNSm+3h& .uȍ0NĄbm]8N=&p~o A%\@〫%HED`?`mٳܝnB-Jt G?`>Wa%x7oqG>­Y[\9[&jaf!kF烙ٓHj/]sTգ~µ_Y][ᑃyw!4N5/Bת+kGUz/7 td8Z0'> e{eL?YF"0c9.m89l!Lv7?`K}M41Q>῰dR;?d<h[\NEXp];1#/aɭ]~t]WP $`hJnkLO4 ar% ow@ ܍|EX}B|vr ggc ztZ;&M49p:_]UoC|҆6uY_cz4"~Ko¡p11)tV};\?)iS XƒY! v$,5e*n+\9vX*2?D7t~AyZkX}vqs5`4qU%:̬}otH q] ^m N?č~ƎfqC8} ؏E7]iuPRoaqz@t>:1}Pmk.7p-7n+q!}6i= ,ԇD|u tlLeQlѹ{dL V_&cz X|K'oWqa~ŻэuGZ3TN Ueq?`Ў?Jـ8ZfV?8@MK~x(>|8NOvܰyZ]M2h",$ jJ緄̑6dA{fri4/7T)'}xٍC q>sN`C ^N `/&"sOP3[ Gvm nKcW|P@IlL_C':\2lA5[Oskq=ͱM\"Ė@*yJ?Ecz1ݗ+ n\'r8 N3c4EI@ȩh$niJWtV0A"f;@N'P*Ys(&.\Vt%܈SF8:7l;{_.!6Ŕ_87rs=ab_'ǮqEdžK/Ҙދ+ tnŝYC>Imhdž}QUpY9^z{[&"Ȟsk-ݏ8]JG#$YqPr +quGXvM~݁>4~vb pнjD&~kTUQјS1mk2h[4cz/wtcM8ysx?=Xm@ ,NDN8*PaI$rI+D6/[࣭'p87޷^DhDJkRyCt[ݘ^ٲ8ӛ^U¸~,uS8ug?Gb=nw<4N~XA.9y'ѵ.2ITQ(H[s/$y|=߼ o={LJǁ/õw.i+k_~c~03":5:{WG>7r:([7^Q*L ڑEЂZ@򵨐LV)db" e( "hp? c0z.Wn/vu>K\Cl٢F&[{^Uw7괇Ծ1hLK? kp矬wFq!;7t`ch]pSK>1To>cL4sMI\$`gV="jl;|b}xr]ؽ$} LwݼY) 4q٢A@5 Cmȝ,+h_76q@ ,܃ŷtpQ Iax_+Ś@]5$*݄iYߧV.P^ϥ)v iW/ 7ݿn[} ?<#{˰ŗhbPrRGiAX+$t'Hou&kelx|og463c#  Oopp2gB@B迭erdUw '%KhxHxq˰8uxywcʮK}M41VWqS0HohߐB pkD[ ~_ "3`/q}xZ|\ 6.*P1D# X0JX?R'[`D`vFd (1^+FѓCߺG !5/}v} Z&$0r-УbߢuEɥy[XM &yo5խ_Sq|RgrSX (` !3#9 €%nGQH%}~J W)~ZhmaтEko]0z>w_<]XMڤeea`$=A{Hr? \(k XX ؁581t(Y,uB,FO)7k'lH 3`46+)@,-K$@I"0-Y@ ̑? :aDB?%X=ЏY>2s'0t:Eѽ9dylf>q3Drqm]_0G'ψ5<)iC HՍum88CN,҉Do5% Z>" pѾGRVр!E&uտ#`\|춒WlP =lfʶWu]1 0F@̸Xw "5̑Q ɠoYw5)ؐ`F<ؼ E˂<D1q3DdR D6L.9. ]}(y-0x]a?œ;Hv{XtSǜ䎧XѲ@m XセDYH  .stX[@Jـme9BW"b?$@Kҟ I7-Si>2048{t ~{Lv|<ߡu`X IT I$B,,ApCLԣ ߚ(TtY }-Xr9!8m-GF'"/zp܊E> Ff)abgsq}Dzh[r2ShP? ?G9WV!0V֓Ībo!ƎK5D%&}y' 5Cr܊;E(@U8.&%׋'M,C\"pWVGT.׍D@pP D ]@$=>"7`km@B^s/o}DP%H1P趈OrYL?%5pӓ&\u meBol1c}{~RM48F' <{KAOlLNw;捸$I$ ,\=V*y*~ h%WZ#9?lG mLE~UH~`%Q{L ? Ic`0+?BJX0=Y=pZhS/\`LkCXw]́ DGAnI*}2?&.5>G<k= !? ]bK`Pp(1.2rCokm?(?6 Rdڏ_n97V@0U!\*{=BlLWZR0Y0V" F #C>V SCx]pMI.EO~Ob_' w"ܶ-ɇnW%.vW +TI`u#yж+e&ʊߔ:ژ?Z ̇ym٠!d:)16).ThTKV 7ϔMN-[;?  ?Ĥ3B.0oP,Hȑamtb#RRW8yY 8E6(V_rnGs7}i3Oab~C eSkrcg^h_oG%tKkR+j?w:~~x{ \5~Ag r]F~R:+s{_hL/eʍ~N7~r-r>i0>ы`4~gJ/"K/fexaSbnJKG `aW6Z::$skw&$;0ȊZϱ{O  =v;wKw̓ȝFվ2(b=b@eM.R}Eh+5B`{/Üw`'^QYJϑ$`` QT( TDdoc#%<}R/M6_!Rsy"-hݐ6QѢ, ,4&9@,# t@P\f/ L\FѾ@߀oױ`$?~/5@8@OE3[nZaeG IXȋ/[uC, ?u/2g&^N;?ڼZ>ZWwl?Kw{:WG?yI,AeU]e`0A=ʾ+RA:Epb{ÍqY=N>YM'eL&bF?[g`yg{6y8ڒ:x;6!\A߽-DM`,JQπ(xMX +; 6ii@-Y?`m/#)tIU~LkSW[<#?y6]OV0m'DؠW6ZQ[~R|?! nY451{H,(` Zs=YgQԪ3y蟼 x{ Kbi\XwD@ƞ)k+|9{}uu~  <&Md~0QeJϏ(gR2`l9ݲP- a=΁|mȯrG5߳  ?D>+Uq(! Ak`,sV8XVxcz{ޯݿw`/ <9T`ztWH 4!&K 1k"6P0DdI[@-XRV|K^(|'ujBc#'@)OHYa/ %{dgpc:rz~v7xqcƨ[P^='Tnj˶—9!ߔ0@&}v|ʝx LoΑdIÝ+51ibȈ,,t.딱[:N% k-YcZO{]H;b캚oA#cx^Kd 3jPR#0mg. _T-նF"mb! }d;aы )hHHـbMC (E!+h(DlG"I6v_z x V7q%ᩧ{;!d!lGkZW/ٲ珳'rZ/kwE~q[AI{݃1c`, Drha@Ŗ*&꣑;MLa{/Cl0>&0I{oؐcD5k0i(ɚĬI!%H$Tx ^MXVbu.oĀў6dY'hY'Ït[@0Z /Iz.PV8b%g5"*~ގJf^]y?RZX7qy[oφ-1R8d!1*$\H0&lB0!*Eu.G.>=0Ӵ&%&VPzPh ߲%l łCPFtܩo\8 NطC}Nxl@DFti0BKa`|:czY(&~*oo0NE:BqT#;W_8G*8 bw~d04g%r·LΗvO@V[Eh6*=Rz*|s6+vl>$6&:%LC*0쑆%m`CM._}=y9Ihs[z$̟?D~H^;brVX,XSV8I{ IDATӱBޘH}xC{n0`b2X &bM CfP␘Pgr@CQ׊aDAיId/i$*&&CDO[wK)1-{0d Ɛb(eEXzK.Iߢ3 VV}LJ_o_w m U(2HͱtV 4t=ү|_;w;`J@X酢H-/`I%g.#ů@ Hq(OQ*E!y/ ! Uaa)P9vX9Cea;aVx@[v όb/ Ǎ:9%4 b &Ln3hYʳyGxzk#Fy&ђiۖI(y/M\ݛĚEdBV6 T` hc`!!XL6x"~}0A=|3Gnr-Q8!(Ace~[޾?> }t#7D(ldzP(b IqHèH HyRcy!q ġXh'5 ݏ= Y+ЄZiN0ds5Aǻ~wۮ`hs&|R֏;cw w8`Dʱ&n+,KVazczKMѾ7H1o`mRY[!*'Ĕ38 TX̔<'8oYЂYC!"֚vsrf\0~ <}a?&@<[ h=.I6ۚYX),ľ!2!#aY Iw?/A-8?5PS:0~}~.;ס890ʧÅ%;y* ٮs95Ns_}H-ϖ]0؀ccCHP@1%X=2>Zx(.< IMbV$ aIe)x ɐbHX&Ya+ kmC"X+ SO@5zgK>Dgo!|m7w?w/&qPp@A'4&Rw±cÒ| q(+hB C@bZ(aZr/o6i=zÓ `m+<@ hdLŠ^ӫvd~6$_wLo`I UҬFq~E# IGyQ*`‣$S^hɆ>&C&J&D"O$m=LNʚar> U^z1 Ob}oDb$a$_$؄Xu*Fe-{kW O_5+*"*~. aR?) mݻCfnUㄸza@M fLAzI }yl0ETh]*5*+^ج&ڊ7aYy{R RMҾɷ۞݃OZx|زi ]G * a"t}Н' ktBsABM-#H6}s*;=I,E;\[+'$EAɄP~Eh+9ЇY5-0$tN[uot_-Cuv0I@~5ꉋ#&ņ(8\QC"gf أBh ,VI/Nn!d0d$BbbZ|$HX qbDbX&-V{m+IaoʢZwă7"Pݭ 57?8{E:]*+hkQYHgHQP!{Bx}Z$ۂe@`wdkYiI cbQ]6q$CFȀYh%2 a1K k}ݺ+8_J:5oPbpa;vx&cz1ݗ~|8|jϓBvV,@ RdS!T搈\Q <Jkz8ԚodZV_ OTI;Zm><A°GVX+:À`QBXh[b)چ.Ap>_-`.oGWF[~?Gc/D[ F6:о7q[17^um+T]F~x:#K #(@ "m==>id`UmA^Aٽp?S꿉Hݴw :-]pIACz"*Z k@a(#h5n1:Yӯ#'m?Zc!3a;wCݾ8vl4v? =_+5b:(=OjGDt祿8"2@}f B(B6dHȴ(c|?-PR v;+L)8s(ZhbOӡ()-1≱>Aֈ/$'~ Eo3`4!xI/Z)qs T490czzG*< T.,ip #4<ј7?|zp!xLoL*dE*KG{TS/DQW0#dVqȠPyGڳ0:ZI$`)+#njM ȝi`nBaZ|rG (Ì5q XIۄH# ]&t `:xow$f'%^ĉ@G`:hXo}oI;1W`ԝ"dg^/ss~ *)zYV>6Id(fΑ~N$` ;29 9Hr۰iUlBQ2zJaX&!b-{E>`F⡛D/TR% y8P co)~UwJ<9-9+ %LEX=SQYUȊˤ٣p<2ڃQZ(c<. ĂN)]ąB$P OP@I֜ 0&%Bql59ϑJ;?X_BIn ΧN:MNy xm^D&$@/G1c*^ފN~:-&C+>ew:ZH~&#`R/&YHT1ـrDp.Pcz6Fl&_r{BTVQ篠\w+/$piQ,Ą^R{ `26;ow)]k& %l(HXBJڦT(6Xs1 YOxƝ'}ڷ;fRV-eAD2Lb }H}a $21e{m_h+1z, 42w$bE+ Ş'5t~cF98R^kNhaKiX_uYΌiuscyEry(ʷy5,9E+ kbQ 7$4Qb;<, ( Q! =L&1[צ T߲Rr4eEq PY^(4R*+ EXѶt+}EB)bU@o߀r!&`f^8"plhI"+x!+ (h%K#EfX;0+~]9\yq QuƋ<2)(z-rmX <gI|2勼 h' Enp5@d&U\Ht?2$1Tq{PC!^% ]VEN6u~7ۤ⨨#$CZ tYqgN&M/rQ 8-'bj.rci(cE)- -r}+Hc8+>i SLuLyBnCw[If$*\Pi[&kW c ͫFш?T<͂\g t*QVRYJi*i<6GWfMZހjJC/|EԑNё;ݿHW- %{_'`*@-dak^/p/ؘޓ#+m8:GgfÍeDQI&hWϏm= YG^bzQpPx…Zj +bćDԗm>j֎ 'CחmY?`FczM) P}o`0{-zL}ou*Kc)K~r*Ky! 9W-i4&D-YF!:E[N3`,{H|6qIJ`9PP0ՍmhLoqK`_MH4TV8wTV3GY-SJTb4x,[e9hrNM:X%l{b35  jVph/R(}hVf Vk3!lӮS{LoiqT6Ԭ0|RqP@(ʒQ>鐭Ri޿@W;_:vؤs+±gkP[͢'`|7y5S+i_Ӎ|{"*k*F1`T0Dܬ*dŎM&pQSmH*NoӕS$w;eo+\؂(tV=71g^ۋ ; ő \%_0EqnΎ9Sޯ;۵Dl"| ~l <~5(6+OܰyYQاAо7qoܟ:;=[ْ1NB" ;cGJ*BTJC1$'cw{w޳sgwdΨ9o|/W6,l;wfW,2gC$񽥕eZ'%eN=7 hy~,_s0>5K(#L+ܻelepcq{bzE.4{;uH!75Gcf(bc4h+ϡ9"2r(&֊戩.%ʢl{e/?"kRq!^M]a|dvd)kSQ|1}qm`w>t >zfǘKkpӾZ.*b_YYcHT;O:zut6ѩt\tپzJps`1OL90;\]B量+c1.^h~4<=9j~JeSTi y2؆m2=L/rf;92 w54GVӳ:,<0Vvغ֭_=f=8+\ ;|hSݏ|맯 gIDATUW>ѽ5 BRe 9Yke!g\VU$ij.]?IISѩP$VN׷>'Uy.?}\q~w`|@qn w }0.M:`Qwe 6G\!;@ `"8;}wcwcy<֮}A#z—~F][w|TNM\oU0磕czǓ>.*IIj0I&NI1:]!j ea:1N>/WylwP*_Fdx|/r"SbzCsT Mma>6GWލ- {ĊwnlbuS[1}pFH lY8<9XƏp񟞅i_Y ^XYy29sa{+kӛrh fNѩdHduD*)<쳏o6{ڻcz[h|Y2 S##5Gړà`66Gl+czyE `J5aObkF"N|?8j2P+ڍot<'8z5q{/=Xo]5푕5 ;ZYC$*لEv5]::=Lov*= N#vx @4s֭nc)rϴ{nDϬtqcy'ZƉ/;ƿͯՙ~ g azGs0L#m`(lA4G3bz?^Nad;on/"ssO<{XpVߴv<8o|5G1^ʚțl9azKW4:]k~5;_NN~ClMiű/ǎm:]wצ}- halF1G9?-ԐcPalc>,YNuv5;[\vaR{aZ|7;_ֶO|0xZͱ.8yz7~^z{;X3֋Uhe+kVVA!bBKeʊ{#P5g˯Dji; i-䫛,S,a!؏ ߨízܶ0V3_zWFl K>tbzWhM+J l a; [0m8:W}Qp8u2ٞ;V ޞ5`zpxEneII[{`I3FaJDtD}%vXu5[tfF_}[eǿW5G3czCο 6` MgͤV\MNz;ί׫'1{:c37, >YZY)ف`z9?~c^pbS󅇳+{YYIIGQ{Pt6Ӟ%n  7.bd O ͯ>٘L?&W&{Ou1BZ9yUj˫ԗa !xk@kF.h?~:[;{=ż⯪|7A-"N*G)pʲ!+k_}+.wtetڏk[0{:~U>˱9#go@?P[bz#o!cԞYڸdeQK쵕e [Y%LoRaeNL`Lb1_tOm 믅V6km19"X&c1a6)#&j*9:P@.rWlL>w6kRhFw֞Dӏ9E9Lo8YY=LX5ZYf*y1~2vRQ՞GLd}66:Uദ";/jŔt .1t# #2hOjahG#g!ldLYb=L`k-r?VG@Zz u<ω ?,E7ZY=$L/V-ąrCfe%%% jWt;,>D*J/PswF)'?B25G0w&LnlP"nԸla'ՎURs]\jA&Oo'˟Li v?̆=VVRRx;<>:ͭ:zFtNVm>ONÙ69 B&6G1/=܇=с/J픭=0;;ڄ pf?D ޓ.9rT5a|/keyCnӛ-*++))i{ ;Y;-F~SwfIqCڷGHsaGLə5Gv=fY䕱"/⤬~XW7?+ >cge(x~,Օn'ZYJ T1ŌVV&%jitB4^2c[zIu0 o' er<7f 樻Gbz{6U/6V;M\)\3)c+1Eվm,=K\UUU%- 0so1cz¨7|ie\k*vx8:;mt}VSkCQH5PeUthdR"FmR6GW r~6G({|lckE@}Vz2T$`^6.%"tD&׮BLRalRke]-$+bgNaVE,"#AG8?6GM#M`z >Lo]L~PZq}ekZq"Z;;4hm/(bн"`i1a@(J8DŽA^ce azsUNgN}W+bՊP^ NwQ8"SjtLo]͘ґ(J c> dl.TMt>"GSvRRҐfNG=09iju,$0PP)`IB|=PNM(eY7k$WK6GG-.vo76d| [w>@gdj7d >\V8A b$g*RغV}V0*&hGѩoBjtZP_@3 gbsRIT*>92mcs,uttnx`œ; 3{ekCxX*R=BOF4bo3EX{:jG #*2հ_QC-Ha>DLoflPjON-S9;ۅEF+SR8ڻR>D8B3D++$/yuRRiS%HьU*VAWA~(Y3׈=;dӑ/fg%rf^lmF iEvXFUeOF!J i,)' frSbȨ5𬞌ti ()+3e+aƢMVVRR~kѩ-x2ި0#fu"̙cg"L~)h72!XΈQbVxVQsW20Yqpȯєӻ(݅tyTPdD+1+ (1)Aa=A3; \+X ak w @:PaXaɑyk d(xe%YYIIIWfNiw  #q['kHR\C"ge27Kz0TTTEB4MN 2T VQ@fRby\-єDtxTeptبB2p-KX=e_hfիu%sZ;sm2R0.l"ۂS'8`2TXzG֕6Wr1de%%%U=۴Qc̑Ad:;YeQSϴ)p+r);,v 6<-/xR.d5-٦rfi^EmMte%))ilХX{l;R,L#[ 5595j.f_9TBܷF~"I;?~-I;vA)`.*`;;#I^]]qooX,YTC]Y*H&IV*RQErkkiT*\.seesss,$FA$Lu]E$#YUU)1ɤ6$ūxwYm,CUUUU뾍$I4x<4'"#N:Dqȱ!H&d2>k]' eXl"+EkX@KIޫ+W%d \;V] M躮?gy#w~쁠'm\p, adH?0o LFRtfH$f7Ġizd"o )oȲ$qttEy?99$GhLaV3rz*6666*...`Y677NAe4Mضj ۶Q(p~~nu!pyy~BT*~l6 p{{kdY_3l61;;eY0 8Btqz=rHP>FqXFq0g<C!b>T$IySFQ]);3#Cpppg=}S[<, |Pts*~is]SIENDB`lmms-1.1.3/data/themes/default/keep_stop_position.png000066400000000000000000000004531247673406200227460ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8c?5UM5o366ĥFaT*CJEc4E676*Rh[W(z:6ѧ?y"' FQ|ܾ+W_}% 4[mAcp\~ (9oۘPu^k/ ş^YDtp}me|+Kj8nOʫlaH,k 1ZCk X uk$)>TQsޜn]YpVߣ/HBf ZEf8AQ8\e$B9kN) Vw}ZkEc ` m&P5RVbHAGs}+g,$"FHy 4V#sXka1H|nvf~`HF8yȭH+UJ-=/6xy?kw̩nk\ز匏gCt1>nj+_{/?C$Q1.z?j6[՜ΌVieR=//9!($$UHPȅ։*R*"Tt}UZ|IENDB`lmms-1.1.3/data/themes/default/knob02.png000066400000000000000000000035711247673406200201300ustar00rootroot00000000000000PNG  IHDRUsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< tEXtAuthorunfa (unfa@unfamusic.com)liIDATHVK\G=V~73`[N 1Q"!{$Vl`Beb`PNJP-/EBp!gHbaw=[ˢǃb,TWstνUuID8@ "x]7EG&"Z SE˲[c:J%Lj-UJ9jy^cbe "F۹HSUQ"\._y-}+IryY"KSb٘KdI,KyIrnkAl0t!Nw~ܝ^EwH hXg1GHy#M$ƣЁ[/vW:1tP[/}eY:|=Rz L@ L<= #Νt8ty/~f^SZcݠ96KcO3 "8IAH.x豫vgl,Vv߷׾:8J@pk*L^%qX "L7 2G`Z~7EZZhvƩ^o>nd\78nB嬱Z{Zws~uZH ZJs.5Ck3|;=#sY-IENDB`lmms-1.1.3/data/themes/default/knob03.png000066400000000000000000000021401247673406200201200ustar00rootroot00000000000000PNG  IHDRrP6sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< tEXtAuthorunfa (unfa@unfamusic.com)liIDAT8ukcUǿM훤M2u:mڎTqF\w;7"f6VVaRɤ$1ir~·ý8?^~e1>3:.o??^Y]:$3Z)1swOqv~څ="Zvh6TQ(U.T˕b֨?5G|~rv[?~Ryլ疮Wߚ.BL9/_z(4l[9jnU)S $F#IbRAuZ={;zV1f>[X#;ID0Z#cc@İ@)5BW묭n fpz:^*(5YkZ $RDKq#(L3g$'/ ZcTFIhDAXke>[0Oٷvlmー͘?ַ_u; K8n:cC GT,P$UVo^ruo"v(~VK'^Ϗqē0NLvⳋGBl'jo臩k<ns؁[Y$_`&R8q Q "ܝ"=Y7;Q kj߆]ДA+`.Co-ky#J؎HTfqW:]H酾_6T՚d-/ߡ*7]Xa[snc3ê4Rj\cCgIl.|C h=!//8&>~Kk)h셨ᠹW.nNDyBӉqrڳVQˬ.ч0Y||s2IENDB`lmms-1.1.3/data/themes/default/knob05.png000066400000000000000000000040141247673406200201240ustar00rootroot00000000000000PNG  IHDR szz pHYsnntIMEM]IDATXŗk\eٝ^Z[ U(!(HQ$4@U"_MDC`b`hE| V,RJ/ihkenۙ\9<~8nM&OΜ˼s^|#^ǽ/kW7}[b{U ?.?5ٙXV*Z)Uluiט-MO\wǏ78@ D?j5XՐ5#tg>M4IYr#3\r9#Cc u>w'F.x󵟯-NTSr\jTYv-;pkH,۝^Yϱ{ԟʶmG1&<5gޗ6U7X),kc)Nh/y$<b8_>|s=4gx'J@% =mt] l@Kcֵd;BTVM &VճUO )eiigu^N_1FUi@&]seqbŝk^j9}88$ ahq{ԥ2 V|-;N`|?@`_/$OFcc Պ89u6v8g΂(BZZڻTrޚU=R xƘ|RuW_N&I$~5@DqNVp.S.z' j@RbhHg~w}ۀvuâ5SxӭXq8uH{@ +1!eÆkI'CJc[@` ׹d8+EUd[No"X'T˳r4bzh9;w>J$tsE\{xiQ+kd QDj-*QᚍX| +:j[6m?9QF*g["T|vAّ`07aN\:yg$=\E.ZAQ\_j8YD,"v듈ؚ7.߱hl802D~ȇ*848,Tf~\bIWaC;Df|ag04^-B*Bq_~q9w2cx;T 'qp \ĢDmTZ-L}SS*Y,VC@,n-:v"$<_>ǹ/~8|el5EnBaS/ĝtSY2ޝy?煞Tn[?'煰/Ϯ5Y-eYMqgN~~{uq&wF%=TdM{tPH6JEV}m!܍&->GVRphkoބeOKJEf=kK}8aB IePTLlF7b"0w-#k"XINM;('hʋ2*aPbKh]ie[aL3 ؔcITl2I[&q`W۲)zE}5"!̴1C,L!!~ [Bv9gG[E*hʬDVF+!aIZw 􌙺Zs+їZGvɃEzP 4!z[-Z3Wp M#>)\+uB09T;ߢ@F3` ;>z#?T)=_X7F!Mwy=b [-ZDczRAmOSޘeKߜ $ՇQ۰@py\)lɦ;xPnߍC0#l";f' gL@]?ES5detGt{PDu#M=(=EV\ ݢlu< -~ZŶ f*zVn{a?!c P#ZJ=~d22M( t=7Q҈oE_k(Roa`Zeu;vD[' ί,t]q*AW, C8a6>@6M( g0zrٱ)Eo1Gs}hTPoaBCw3м4~ efj ;YOFlL W>Q%KnFBp..D4"XllCxcbS^_40~ ;.0=ۃ"l`Z(h!~vݡZYĔbK%XeFB}nM-(jBӁfj=:b [,eܺj OhQM5xQ`fʢ27 VĖL,~QGyi1Y-_oԃQW`KF{xUj ,P B>}[&geFPdT'G9ji :&~,cRY-,0f,7ZXtmknZ;=-#.b_D Ie$$ i0^e[e.{+N=#AeQV},sޱyy]kls`z%-.JmCݴuBcS"|gLk$褐O΃lZD>`3QcՄaYP`5Fcb[u˰aRlC3o<@ZcTfRoRX/&Ftڇs4jXJ79 ~_ĝl_i3rݣkFkx{=FqM+>#8w |RϜ*Ak-h-Bشzk?-&+Y34>YCd9pߍH`c v-1{UQIEĹam{Ճ"[Wd0HweyD 7V~:f+Q7֘tK3Jhe" BdÐ\Y0bK;_uQjoG gڄߛB6<Lݰ^/"e< w L~zE-<ҒўV Ñ~-d.fI>&hl\,uAlbފeW>>tWfU*߬R&I%P;֞4-n{ŸXX.w;<`Z$,ȖyB*I79D [h_IS5m"Z]&g&?8ʧ>nzlA~7*iȃE7a1yL3=zwr' Mcy!^f%jsXplӕ^GQ4AwF .o hF}vҍk PF~a~s$[qIENDB`lmms-1.1.3/data/themes/default/lcd_19red.png000066400000000000000000000155411247673406200206030ustar00rootroot00000000000000PNG  IHDR&r_(IDATh}Y s\qƏ @o/H *eQTrlR$<`K*[J<RvU~H*%_73-ɤjjkm랹~< u剬lt}+b%~Y-|< |~pP^Ƌv( ݶ@<ݹ7SV-U,n=/C~bO=(pٰ!d{|],|9A[y)`¡N?(d\e㭎1RXba?9d)$3/{}n7 ?:ã'Kjtٺlbl]jiM {uvx8€A$JDz†K/5qE< t,t}l8CN~O7tJ?s[x۞'>$ _ T*`R;QE59@Uy]Zg/(Z` Ov*ѤVo.Bxֺ\Df/^ *.GV\<6iuqo=TSpg0!:~Fz^S(uoT&&XqIJ#~X ?E%DK{.>Q. YP@_ Aɘi&Ąb6NyǛ[I+W BݯVMzE'Z{tl 5ۓj}bhpPN V@4WAKy<0ώ$Cp';2LhF01G3!(as:JP&A(Yݐ6Tv(WQzpR$Wd$?P$g[8`<> K0*Ҝ4{6P^j && `.+J}O'zC0ߖta B)^O7aM_k9sE@q^QT,]l頴6AԚZB0uL*B`CR2Pc*l0b9ӁIKؚo +uǘKOM k2X8w;ՋIYƝl*"jWT sp;Мxә1kDv9LҥYݞsu)JfE<,fMCli60@u>a-Q G`'Ã*0RZ,qL2ϸ:ۨ ĢOB^PH zPj,:Gg 8n۫3nf3ւP !=_jXovGI1iā-H|CN>T/V#!'sYK*>sXog6xN]S=8zZ7(k<͞,9]&&'HD`)\ /*`֭ZKt:\jҼ:'U*<6GWw!kmJȖPZLJ3(\A5UX~d2h61iU # ɞx|` >]tXI1HP΀1!Q~>>>SG ISn!e%u&h z0M[yvyZK5/\`2:O˝.',z Q샀NRYK='9vd?: fqg!Ry]Ҭ1Gu/|_:8@_Avr)LpwN o/LBS2.uN$^s0ϴ2(4ȒG5X(l_ӊM1B[k]';ƳLhn`HPa6I9Λ xݩ5%O ZXOIZДk9D7MfFil ^\rb҉ JZ pѾ>C4eΠN 635/3N'YME: ]A\*;X;I$ zYKc)×!.`XFcj{> 0ތlj-H@7pĚA ,Sk>c 5[Xo#lN>wneSOM"g]k͌5 K%KTrhb$| dSi"+P;Z$HU|aU_+)Dп*`Q{O!o&rđ tҋ%#VZM\|Mlv? yW&cyϺX? .eX&99&rTTW4u>7Ҥ!h*j<AA9],;1?vtT;YE 5;Aw7 <J4*UOtXHFwnC4F v忾ywtʶA9k+e {^TRH#S&Tg ,7y)f2y4ǃofoWV 7Ŏ;n:Eˇ{(AN_;QwBH&D$jReKOc>38A[:֭ gEσ{؁ԓ;wis[ \ nc^sx3BFE4Gpv.u]0j%/AjXFbraKA5foL3/teGrl-) ?dg-ƿl?}##;š.|>L5 U%m,]nOVM wC!}%X/Ƨ*+8#Ψ"+Arswe8^T8WƛJoFzOtJo ,*)hZ^j_{&?o 6B|fb// HhiPQ8Ԗ#FМ3^bB1Z 'd`1/;QQ, MA[} Udin40 2In dA0'zg]BM!8 C&5i#vZQ ?LwJؾR1Y%& 8'YKxnHM`"bOSH͋lNx`J͘*a*y.UZCKi"87.kk9ۨ Ģȡ)GP tcH PZ[ B'P*u21\p2>''<3@x@a@4eXC!J.WZNNZbN9'ǘ*sql%$sUadK Zkh%lo2yFkW(ӵR،2Շ-Љ\ zJ@=ֺULPưИJϫr'+b@>Etڨqds1Gn9 X̣Z8a@M1:61`4.IV* 3@?Ջc'"xM# #.%Lt $r+!(#l(:LnӴ-gBMk-pϕ k?yWwRYj<ֿ!/ga_5ު4~Npx1:6VF[@/z _2` б> .{`,RY1Aí[͛"E\(+nb;|=pw2 &"fY<7cA{ œ׶w)#BE0Zaܥph"m)R+[[C//W_+FȤ o%m7D~T~;F֚R%n$0UI0iG[u17L!5SkpZҺFծY7Z tD/>jFI&7IEQTa.,X!:k|?*q`v5-$=uTmi~CPk6>ƒ"SGҔ.Uq,$kEJ}%`aͥЋi O4H+JCgDK-j\E-  p(fvL 2d5G o5Lh^2(x r]P" .\\-"%)ox|m  G ltzd: N1-INRsE_v`**٭-b몥εqu"+[{רNsbdیfaA2H8nK#xS1+kVΑ4+ u 2N[dڲI0aZt3 hW ]Z-i)VD Wkg[8 '[KcZД"FqSwp R!@:xرfk}N m<8kYMc:0EٚkZEg. X6=CZڈhʏv;N,CuYR`ߑm]pAz4dlmT&T5,RLQakp2^ṕ M-ahbz@/owznɑAouQNlv Y&N^%w 8\ k(_Hp&f Ap۝.v`;uչ!.eAhB@_}f뚜26w-߷:h+(H!큻RyvNȆ!3.v0Jo]T.^.%nEitRGm B`\xw|Fo]i*)'Jܢ꼡Vs֠tflti0ܳC=ɐgdڶ2wn s\ǘc^s1CښҨVA\#f3?Sϙ֊_pDdIENDB`lmms-1.1.3/data/themes/default/lcd_21pink.png000066400000000000000000000054061247673406200207620ustar00rootroot00000000000000PNG  IHDR*ПbKGD pHYs  tIME c IDATxZ]U>{{fwٙ h(*a# ŃOoZJJQj6 R PJPD XZ`/j(HQltOt=>@m޳}{ܞᅮqrD>-4N3vӴCM+vMS R2:JU 5o+u<8ءyoN!Ɛa`*H[.% "bŀHa|;@I\'MTvC "$ ˘.GFkn(Sc5=)5Q,6a/B:CW='dh6cDH5̶҇W׽9# 3K~4%(<eLL% 39Cәd%'VS* +5sd"_Q(᝘V >~0*`:?}_%Cf@閼bƧ~mӄqQ "c9BV|_)b 0DhXzA)E-z[ov(jcoڡ-ƄNė^@̯lFX34nddg<)= .Pʕ[q8O~r巽x_?b~k@|SLEȕ bDǶC}}$%47/5#FRz~l{Ēm&ObG'(dmZ`1^ zF17;m@LJ:ͧ&9OLLR!*(! )EZggnЉ5í'"FD>[[\ݹ01J>(}gYGj `(`p7ݠX{}$~44CTP^-T A!~ۊ,SFē񳯝}ze^DZIaM !:{ȷ'oE]Z_"Vwz~Y]L]ʪh*&ɪh*&ɪh*&ɪh*&ɪh*&ɪh*&ɪh*&ɪh*&ɪh2 ̂IENDB`lmms-1.1.3/data/themes/default/led_green.png000066400000000000000000000012021247673406200207460ustar00rootroot00000000000000PNG  IHDR&/bKGD" pHYs B(xtIME9(u&IDAT(U=nAݱ=^,9D 8uH܈$ gg&X2KU0љ5kbe+*{`9SڲM.gN@aw/) zL7lS!W{-R+pLcM=Kr=p ɤ&bd1"aF#'_~|\aogJQ¸G^u-K $$I>}c>M\cye C0;ӈZ’( "(aaߓ&7Gni7쮖%}iJw' ~3O+b o))dA!e]S%pXc@!LΊ֑ny)Ҏ]12+"_ɏۧ"H] .23s&9Ps yYGVZm M=tcD? <IENDB`lmms-1.1.3/data/themes/default/led_off.png000066400000000000000000000005411247673406200204250ustar00rootroot00000000000000PNG  IHDR&/bKGD" pHYs B(xtIME84IDAT(Ւ=1 FTpaJn0'KA`b@?-IOyE9vR2w$v\rݢRLe_m4q>qw5nwJ)Қ_Z^LӄbfRƍVE{jXkZ+ʱ؀)!L1WEg/^miҾ2",T`,*v ڶK=~YF`n$ VX&ROD`L0^P>8s`{M3.A";>B#w=Tx3Ĺ80+0i cUc 16|@ f1CCL0s486\ #m<<=B9#։t [#ga?6aGIENDB`lmms-1.1.3/data/themes/default/led_yellow.png000066400000000000000000000010641247673406200211670ustar00rootroot00000000000000PNG  IHDR&/bKGD" pHYs B(xtIME8iX;v},}"n߷78L&.R%&7UT%=䜹dNfŰ~#EZPG-|ԿcSU,K^,8 iH $D@=]ЦC뎦jn;ÚWWSEYB!#CmFmT wwkfӌa(%_:r>MG=۝9#5F!Zi9BH$/i9np"_9,7UIENDB`lmms-1.1.3/data/themes/default/lfo_controller_artwork.png000066400000000000000000000370641247673406200236350ustar00rootroot00000000000000PNG  IHDRP'I| pHYs  tIME(rgtEXtCommentCreated with GIMPW IDATxi%uWKWWz_n/B,\EDR$m|#/#HQ2mR5hgak#%A. @Jt7Fc鵺2c#"3#eW "ˌqވ{o܅w0׮s( %r vfm4}EsMXFP.W@ ԁO!0ûW%]TU@p[7 2a8k'kW]Z.Ÿoj o~8!,.Ur =VKFḰ/̓O39;*ylZT9A0"ak* hf` {r@{F 0TO~+`u[˞(SPv<^.7Ρ ?3![>2s`x"a hUm9avX@D*|><AɵIfTfQKA>nj2uSWTh{G~(J]aGn q6ȡAR W]wff/}[_u֘[ /,=dL{c~%?̌pft1t"LNcD5~S>>7!TFGH`]G'F%oz!}R!JM4"7K]Q󄎚ߨqwîu5Banyq7H| ޠ$yQ}xokolYǏƎ|?oXG#ޏ'.6o/ ,'A^vI%WeR_2WHx&nEQ$ln%]pa? )#BL.E>YeOȭ]ݪ*C}@9ZRk2iAh.NNJWC2n%Ҁ02%y? @D>0!(055XN3N<5ybq!\pM7申߳B;/3p߆C^ıï`˶ʫ[hH4AC+c`3 !FQJ\!UpوVXBJS"BDSv.B B72T1 knBwղr._܆zۺŠq,qE *VD!xغܢUWo] 8D՗k!A> a <" 097PR{*uw\rI0rX$013$+1MnL 5,U0q`b0``q+A0hDeL W a~?8C&'&,\ :Q0ƚj.qhAE.1l޼$B:3rtBBL`zbA*ev"4U^1< FA8151z= AS R a'"Ǻp$^zYZ,?nn[w9g<1cW܅8q?rQ=p]y^<~6^p<{~&\{MX9k1pۛߌ spƷn}[ܑA1.#~ӹ檆36Zl#F#w"DD8BہG= =0++3aŸL?էDaЏyD70^~@Io<>|gwaԷO{<˯3kfp\qo{=~w?'} 7m.Yd+. `zz\Bl߾peo5 7ބ³}}{[,7㎏܁O"pl+bWԋs2?K.YrQyߍ(>{xزuÅ?vm7k\{MnI猹"h/uhmr(LG" زW~Fa <|}ba3+V #lٲ [wlVZ!0Ғ3 ?g?c ֘?~ OXE0$N? `E0B𦕂R6A.y/~'?~o0|&9eӆ Ar6 ցȤ pcS8u坿/ť3![n?gïb m;Q`$|&s`?qa'y5e^~hH4UU[%cm4R)>kPR(D$1~RI?rJv❁Leޯ1RL(rbRʾ @iUAR={T* >kKM/֭!e~3x sex+e|?{`.??ύwW]wHTw_e,/-* 7߀/xO'k˿K 7cg03;kWkm!JJYܟ^<;sw㞿s?'xnu`f휥 m>'yFuW J+Q\uj]tvep]ƨE (tT<eR*BzYZi41`Q+L .=sfy G&+hEp"@I2)L1Ri?z3338uT[3c;pOn: 1.ܵ _җ2M``w<HSYũig]3A󘚚©۶mާNT|S+ x[mE*|N1x~6nވPR?1I=rskA0k khRukhtڦF%KS7l j :  0f' RKJL Q Aݻ4%RhmD0H.L(g[I%3&p aR Wv(EW3*àAob Lց"H3C+"JxMĊ39L@X",^D#q1X RK@A&ml, |%BD(?c=gtJ;/΃DvJk,ȅL@*T<؛j0׸K=k[{6۪훳T$| ɉmb i+S R0Ӌ_.2Tj$͇A:Win lF/뾗AYYɀt}v%t&`$ș,(wU"0rL`/*+eUS4-19W_ٙux9n& /pnEIxB\Sv[c}"yv*sNMd0@)5 ~sAY>D˲uU((JI$R8Ɛx{ߛqC8~8g+@H@I.+Uq4.'v];p>heE= g*$cyOi5Zo~D\VaTzpW䒝䒝 g*ZGW^s-&&*†;*i\G pT >3# #!#y+ic D$XYY@B I.\ gSq"D*So3? ISkb U,"Lݼ-zamgF,B2)Bg3wF03D'm~WlPUwm%a`o^9pmíu _XqP͓8ɓ7IX+fR$U$`0*˒1 >'GtRZ+7 4HZRJ$΃)M,|5ka,D* !FXf0 UiN=1P 3&Hd)A-m;~*^]$K8rhy[F}m;B?0֬TÇq9hy3L1>w,d$b~,&QVY'wzA%?0 (@DeSfIJ(|Q2Ur3*eANe2*orˢ6ޑ A4bfc BQ*{v-/aaGş}sSoF);~D+v0Jt`k|z Ӝc@J[`Tsr8QgXn^-}GlFj0TC 8H2T!i"}Džزu;ny> )%L1RrF:ZoX, `.=Wo}(VGsa<0dШoDC1PZCHH)S X'xPBXȹpnEJC&ә M\4v9-`E){h4#[I]꣺4{K$ET Y'J!)b B+++ 8]׃K<N< ,H'T4 R\<2g`|E5%IBť+AFk7ԧT2dKgcmP)`h Gun߹ Pd*tͭP͹@PZypjR ;1PΙ! r^c?VJB^( XX8ڲ8‹/ĵ׿3'cڵy˨?8Al8c';6 tgΠG`&QNb햠}|\eiB\'6E!l0Gff%AЈ_ذLW#B.›A IWx}7  e;'ۼ[f'ֹ퓉-A`ؼ,QK/QKnOス9;~y N:߶x{]2@ze \~~.)Rt&kQBmOcհ T{Ӿs`dc+.Y7&O=yIC6!IҒӧw>lp];sw`zf+i ĩxŃغmpk%C$}Q̭_> XIRa}SXZ\#=ndu>ALY$:x`޽}n,,F(S hE`SSxǰy˶;>S8s ={pW ƷF18#?o`,~}SX)`&x=عb>w$DΆ]r)zhϭG03H,.X8+.G\T&gTM{~<2FuTcqqfs ?8?l`L Ck;2M=60JC %%&1;3ٵw` -%{^(0=7nĽ_tZI159 VVWbrr7n>CJ]}r e$zq =v;wE;wᡇ}{V C(aA?=/5R Ɗ {/8Fs Ν/;| iBK^,f΢H@H(ll vڅG~{yJJDcݺYQH,/.᯿e(fz=_nmmC\7߰a7_2N ֭f e$>|>l۾:zH#5P<8O4N!<_uQE󧈊3 qUQ*e ra\6 g\xǘ}|fQ*Ր|#3gp4ڝ?a@XYYFm߄WhNl۾kÇ^3E[oPMU}:~=. ή<޳Kgpu0;;ť%|3[]03=Tx橧`[nEoe9 $IplD6mނ+O<$| ]~f׮E ++ @ 0,F+{7}uXf-R董x駠oFk±6$y'O!MNkBzp}?K/ݍ6cjr xqo<38>< bύ%/*YdRZh%35HM㉼h8@TY _FqD-@p'yvFudϓO#U?Wv-o}лp^~RP`6/γDtN8aaaڵkqݘ.=/X8vލáCأk.u %LOOC*;o*v!x{Qd.ٽ~G#_\IDAT?|ȹB#qfi h)Y3'O"uj> huS&Ϊ EGHpShU bh*?*y$kSSQ~6W&ճ\ũ,\?9֑CT쇭coi|Z燣yPn~ޑQ;ul;VE0*<usWJ1{w=:FTlu!ZԱ=^Iڵ̣#/d|!10sZk($ >\b6E=kKL>v [J;gQ0(<5]fqWc^(@h3dffڲ߳{qlLNNcn6,Q oiZ% /j8&n#%~ZAak#aP ` D]5k5ZȄxaQ\~x|~@U4D@`xī0ީ1eA7-3 ռݴW/_3PgY Qba-Fޙ+PTG PmWF'} (jM3[R3W?H*a)rqKzy_~?<.: r ۝_A&?4.,ɫ> Ob$I}=cˆ y.mƅ1]uj摥%k$UW,aLr*,h,YE,.t0(_pϽtDuR#V,#HÅK<[-or.LrģgTtȩQ^^M~"#Q+Z&ƕƠכ_ z{."^0\q30(@܋  |njа&0\*Kܶ" 9VǶML!a E^38?@e RLj]!Ne˼XjB bw*kKT*P`:4"([_TXjVD(BDKfl( \n,!k0rqE !bTa%I Z:qG7:vA\ϫxvlL|pgzR#\{1{YFBmt쮵&2&b[X3ucoNƃ&J$͟t۷hh-kJ*\m6P%TKuhXIjT¦ka*VkreatKbc# B' d0Rx(O@fG%)kmBݮFm~o']L;1dqAF;m45Ļ:gR&ϲ(NXBAL.{i]+U9D%!T',YXVFkV.8+F.E^2g=WJ"MVl>hhq џN{(N%H!#Xw5DYuy/OPP eF01\4#Nv'3|إ*\;ڈ@\b+sZ"jv;ϛTB>^n7$dӻ*4 .&_ghsG\ I؉R)Q (D-uyT hxѩuGelmB6AB@& @+~F!)x[;~y@ֆg_nSu|]hZ贞&0JHWF"y7`nla橴)PRxk"#i)JA"PHF@il*ADCxGM״ƥxTi'#YuJ6LhS̮YR,[hR1%uތ|lh]`q jÏ07tHA^V.?;>*JygeGLVmHr8#5KA<góKZr@3܀.m0Kw֬~EVz:ޯ'p9ΕF(}g_+UہΌX C%KyC3tVB\;G]B-aX*D4|H(Cʪ&|aG|BKk>,j㝻1'tjnaѩ:W ,VSwe+"i_Lz}DҡVhZKw)Z9gL^̀ql-4w5sƲ#y5jذ2+%+Oq9n+U[}[ TVΊe mYAUEW^ⴺ6jEPz]?(Cy}":yҡ+Op߉L+]a0R0zgmՇXB1 8)DŽAd;wW׃TF)(G WFR&{Y=a 9d9lZZQa>P&|eI;o[ܻ(Ϯ툌pݳJ '9I9NA̼EF*5"ؚ>otnoL tł|Fe HZTΣݔVG 1BM]kW>ky\G *vTl-gxl,-FjA|WA)PCcd9'-qڗℱP7wXQQSK#q*t5tuuE.{u5WO5e( 0ѯaVOzǃ:а} OmSDVa<*BX 4shm*%]ɬ⻍J!Ňkv_V]lߥ8u,RP8]}Uo)ٸjjd(:}6xEZ+Hky#-;s`R ֕RЕusm()]X@}94bCm`ڎY-+uEQd]i JfY0c/@s(ihOUk3˻E \<Ʊ<]r4*Uh׈811a  =cKX[õ7a10v_"DQ* b[kh|:A)q{06nD¨@1dv)^݅@sZ`eDyF$HhO0"eQԳ6I fcm"e"9,OFb^~0## Ut԰9xբ72];gźkX8) Ȧ1qSZc(AaD]}xRm&mqx6 ~eTwW#>99A Zb E\7.P"Q u0hz=032~{y8D I/F(;p! "AbBFjt` (BYID;k׏5 D(9K0##Dq 0OwA!6X޽W>6*"#g^ ::ئ$r+tЬa+R07[׬?jWsZF.7[7J#.T`h(p8!U֌\4`S=^RLjJRS ,ʿz}=RkHm ҮPR"IֈMj]`[zd, +g`-lbE$-hM3U|TE"@(m@ @R̝˧$hcAdtqs^i MnQJ"`1j<7K=Aj1EהQ4拫fU!;.ܾWg_x)5^I tavW!=@t%ְ'vs%nCa NV' e*E@tĜB9.J^( Rƅl+P&F4uN`-,GQ6gi9] $aޠuw՛|= +a'}&=GN%u31BYA0JSJs`%u$%" $DQ=` >N~u"W㇊d]q2Ӝv63笶. cE>Ħs?{zFp4g|͝8g7P׬fT@roLamkz2>,9&tw5 jvslM݆6Gi3q1o݅wykd85Sm:ε{NiиչXJW "c$xE8t3-Pcrj X.7x="}sjG)d41RMDBUH$"dQNPOߕBM:MK 춵B#~[MEl^KS3bh.j3~l 񽇾S j.&b1B,bᮌ:nL(ꘒP:(z}o܉[7㳟} l\Rs1 f܅;F RR QWȯ[5_&!W҃FŢ=o+^o@%FXU+o#./߽^m_~ OE`h 3G'G嚉C&65f-9,%r4m=G-?$3z]<7!G wbajֵͮ#:՗H[؆LN`c)4 .e("{Y;W)elڿ]uD 쑆c A^$YR o? "qYkˆ$Ira" CA×}cL3#MS,,,`eeyHi ",ffffLMMazz8O{)V"7I#IB%.mPu~ZZ\]v-9Q{5CQ\7VW:.G;=SԉTae$U3 T1D|sHMX-^JYR0 1P&"0%ph~hc]2"Q~*b\)~!)6*=Bq!έɶZ jS%jyܔ˥/y/o7U]+2}1Bn\-yW٢P> D+|=36J2xT3le8}߹߾cFCMxRvtQ[~1-уTl5ƣ# #x+*QxV7T1YN+: U+mX1PMx]C琢g~]?X 7>T_T>jT iκ6d` : FC~|ZR-[p6*aYSf K5Է65׮׮cEX2*!6q'lMirM |q@~Ƹ?Nqu k.G87]Kkc/-.t17g!Am5cpSDE]N]'uGHhFhַFnIENDB`lmms-1.1.3/data/themes/default/lfo_d100_active.png000066400000000000000000000013041247673406200216640ustar00rootroot00000000000000PNG  IHDR\mbKGDC pHYs  tIME^!%tEXtCommentCreated with The GIMPd%n(IDAT8˵=oA߽\L#R$0&.R"AQAHPP  9|wvf(JK0ZiwLX__/iRR"""r"r]8q'IXk3;{HDC"$&"뺹爋׏{+oJnm\H?X`{sy7юrsDtgs݉N wŷfqrkkt~kafB[O|UT{dv5Iz˟=sU] z9[Ql)[CwA,GF eK3,2 w!6UչWo ̖ { FRfI ja.(acvתBvsL3k0YqdSCM:%˫[謫Cu%;Dd|D뤾)JZa#Q,|OQ2KJ JA $AicwkFsLfyánl; yAIENDB`lmms-1.1.3/data/themes/default/lfo_d100_inactive.png000066400000000000000000000013421247673406200222150ustar00rootroot00000000000000PNG  IHDR\m pHYs  tIME ( ĥtEXtCommentCreated with The GIMPd%nXIDAT8˵1OSQ﵅JhU($#%F @֝|d4h) }&kA1suh%q䗓)@. @Dy^Zu]0}"<0 P0hOy  s| BmSrnVT,責'D867kZ+tNN6]mzgn02kSSccHuxEod&x?۳,GGmެJJ)e?K./*eJnt'RVn{we @EXD[pfGFq<?==e$ &b6HXxaqݯ @,<eYW^VQ~uU5D4z4M&Z+/ FjEZ'1sqn;_nֻ33Ya!a!aj8'3_vKkے0JrYaZ0h&a򃃃ٯk<3Ckg;N&79ۍ;?oIENDB`lmms-1.1.3/data/themes/default/lfo_graph.png000066400000000000000000000202341247673406200207710ustar00rootroot00000000000000PNG  IHDR_/ c pHYs  tIME %hX& IDAThŻ5]vߵ־]s۶Nm+mI (&1`$$#AhHNq۱sk>9u{۲!8Z[JgW*?013a ';dD?&BDWDAjJ (wSF*(Qi}-2ŷ{Z"+iW?chcAG;@$dH _5eHBmC#,20rgB?(QFF,d8ˇ+:<2 R~ 5/^T ZKA)I>@+lHhA Jb'V`- V`u Kg6kv6k4X+[Z>XgO|t @@q (9:,c($GD#Đ(%aVQsF$s(XVE-AZG|zßǟ fSfDV8FK PN6?|WEDW˟7~/CET Vho,g^> *<<͈ H huxOLg{u]:ue*vI$I쒖 U YHEI"v1EI B`.Ao^7p8"wodU9 ޼1OxGkǶIvYhGU*ć+?lyjseS&/Cz787y󲩝򼩃|l/7ytyR!wNs&#_ztS4?o&QrT8M$M]~+1W7z8pNo|r:)' 6;G"(fF+LB*{qi'C\zx)Fz8wu&=7?+{/zJ^?M7:_/wqFۂ*..qV'>TJ-ˬYÌ W?AK<<1LA1g;*'Dd`"ITLEN{HbAZ'\mE-(ERw")8d2 $'1$3alX`>(r^Lb\MsYg;~Ed!+D&'QniJJ%v&XGXVDQ1ѓ():[B`Q,) CĞQ=EmWR{ܥE9 8^(!;)˳&)<[rF% xH]DX<#"6!c' 1l sxnm;tim>MWnz[gm3MSg0U-Y=l4EmImMC7w4ͼo]?LU8mUvȇ ~'J10/^v  \";a Xp ~0qV 8i$/a,.cfQfvY/SQ;A Qg} v8jq,88g.bv n.s8{NMgNtQxV.Mp]2q<@u 5xLY$ "s(ey y3G‰W?C 'p_|p.ލsm7L8bV8'Zą빎*\<yY_w~MSZi0]CL=`8{+9mq0t̔' )qqȉ[h|N@>!rB[$eRϐDϞy\A b+tn *QpGFt2p[ g/|<$92 đ`l ϧXd~'?u~nMY'xvdϣd;^ȯ'p?fO\ǃ^o^|Y|2AU6~qwzc|2wx3x9㇃ίg$>zNz37z3㇣ǃ^.Ig~W~H*']7~'xw7z_OO|7xߟj"Z??^u /,$7׸ Z^>/W<[?^øJ_?ZߏX?B^h{!~~~ӻzV~%/t뇱'^ /ono/?QZJ^>\v/4W񼗏c{)c6\n_q~ ?׏,S:~UIuE1U= E?V:@W&.Uv,.~,W7c]04d~,WrV(TŢg.0"M~qn_(gNNtgȼ#\ G92pu kX0CkXDp&q% ~fH'M֟_ (~ֳ׭pXD{8GXeC2,΃YVdg9$)e'ٲY4$"=0 \´΃M&L'Mf< hHD8+`?cC0 Iv ق $"nVlȚhZEF":"6rH1n/"sih Cr$q ~ O'Aȋ u.Aܑ'LC@^'O x1ivؗ ֓Bu3XNhDAa3vpv={'A.)l$Eٯy:a09"Ovًӄ)8#hI6`a > iBn֣xɗ!c}w:Ӎ{cS!g(#1W>h+\t.wڗԱq\?mĵmZasp>=|AqŹ6xZhs86v:Sꈔg?JGgߦwp41q2@J)ފ!'(Qer.Ly8o4c`G&gMiymFi:.4Y;cz15Yc:kܨ;jڎ֭SNц~TrƍN3*9cx$WQn}xF֙)uf۰<9w%Igfܼ׆RX.$2~ۿ+ZPvI"2U(ἕNPPŴ/Yq&VAyoؠQtV`lPb+T.c =r> 6(`;Q1V hXJj,ؠP X!sP(c: 3v,}1#?G+;8@`& :yYf&[dq~#Rx#w@;dd { rag#䑉'{iB&-GbG6rx0 Gb瑙Ŕ:쁝G7 "! 1I;-(~t7ù|Kn9B;ǥAy|p*CH1}WGN|4oFqNO:JZO܍DSh)FgOSs㈜FxgO *Zjՠ5wimm}&lO:3ƺԌu>uva WP!k-Up^j\7Vs䝡^䍥i-uR# 56Pd<գxc(=ƌJH.k̨lzT,52PgZC5t@fڷ~WBF) Q9;9y PF+tTJ [oPJhPRe*TCJ*ء5&\bNv\ cjC)UPA4ԞC%U_RaXr 5U hPB\1 BKRYcltB-gl50 #;1 H88Lވ:dbk1'~OƓ݄ll?7H%)řoV,M|đ6Cep Gr}o>HizT <*pB* R iFzΩƑ/#L'Sg!B w>!Nw:9MONSSh8i$9+=Ճ}WCgR(Q4PfB)RJgUjmV+njM[4ny΅>2ԇfnծXmj\u([13ZQZkꬔ)mZkj^kZfV9k]kQ>ֶ=Sk=iF3Zi(MTъ6_xlZkHkm^7A"C-wA-]~`ˉ&JdBk9 !a=kc a{޶JIE3%,%G,9m#FPk #'52aCC%Gӱc8A+ :fNJbz~3(RH%+1d1vhLy0 5z-Ffc??kJ` k FpjLG&ϙ̠ Rfcq08^X솵őX;w@ e@~5~~nZ/c"o#AwJX|SO} #Av3$7|]L(2A 2'q:evv*\l\*WsbPM ܡb1*VSb5U,f tɕ9R5*3r1'*vpbdz.TL՝T3!RH1vMI2Jb\-W-z+YrFք5Ń5 G>U&hJ-Z,ڃY*= ,מP{?@uTPGa gVzaͭV\{ŵT\{k+ڨdDT /IDATo3}=|.`wNDܶ*g)IENDB`lmms-1.1.3/data/themes/default/lfo_x100_active.png000066400000000000000000000014041247673406200217110ustar00rootroot00000000000000PNG  IHDR\mbKGDC pHYs  tIME'TtEXtCommentCreated with The GIMPd%nhIDAT8˵kSQƿmڛH(ET\c'H)Rq#R* r!.j[X4&qs_97tY?c;3`aam˲L4 iJ)~aNDa n~&)%^A=NDJAHDRJmiӢ"-OoT8Qqz0ܦ ðin;;^qc7ꃅ 0IU0$օ3(xհ:&pu;o}s/5M^]|Y֎`wuA@mdv5}pG Y3`m,ܱbIr;߸qNd˒Xҙ"J,)UŸ-ĸW XPk^91^`f$ T̬bv`Nk+ing/eb{&e6$=Ra7{DԸ1Q)~oRɋ٬Ƣ(fU if}[^:WNþH/8Ƃvz? z%5gUe]k.I&E̽;2˕_AF3˕A}r|annLc;Ob% IENDB`lmms-1.1.3/data/themes/default/lfo_x100_inactive.png000066400000000000000000000014411247673406200222410ustar00rootroot00000000000000PNG  IHDR\m pHYs  tIME (4 tEXtCommentCreated with The GIMPd%nIDAT8˵=LSQ?nKдBiRV " ڙ]b(:3NZ@\]L,ELZu]$`{:ܦJѓ7O<9sϪh2 ߉HUՃl6H$i"Zhke 5UUuKWJE6 ,˲,EQ>\P,^z{z{H&eVk4$P(p|>+%qʲ쎖!Œf ąvoq_[s8*tNwtR)GM@=KKOXLzr(&{<驩pE1)_tː޽}J}{{{_B$B<2 1BD$%I!ӭHU^b(*|,Xe@Ts]]Ęi*^"``pĈ"0Vҳ(`( zVtm|bܟ5L'&v8Dp:ީH=nmom=]^Y|>߉67#b >=B.zS?n97'Ņ&%}Ę[hl{{>;G\߱C__Q?C_ IENDB`lmms-1.1.3/data/themes/default/lfo_x1_active.png000066400000000000000000000012311247673406200215470ustar00rootroot00000000000000PNG  IHDR\mbKGDC pHYs  tIME7<tEXtCommentCreated with The GIMPd%nIDAT8˵kAǿ3;l6dIDDbQhNIAē<Oz)(DCAi\֚͏fwkr0{oޯl6=s]W)% 0cD84F0"@kMDD[q"2LC"ZP4_׊g>oN0]q{b]|[̧Rʉܙ9M8]Uͥay~G"܉9RVBMt…4<{v-@ŝVo&!~YSM}w+u8ǭ?Jn4'x19[pI3%wb4[$(p mh` r: G,\I{ڻTLAtnW)'aMܒ (IEtWlNX_.V8Y nI.WZ׽1iYL3nϓ0{_~FCo{OEIENDB`lmms-1.1.3/data/themes/default/lfo_x1_inactive.png000066400000000000000000000012411247673406200220770ustar00rootroot00000000000000PNG  IHDR\m pHYs  tIME ) DpOtEXtCommentCreated with The GIMPd%nIDAT8˵;hSqƿ{!Z2fт f6KAZ:A]TeVVkKREjc3 ǽpPpq΁O(RT0r3Q׫jXt0M PT$s=`da[p8q>][+ 1]PUne2FY:/W3_8=2ɬNLFqq|X VdAv|{νE?*lo[P?״Z`Ap(д @߿{[.'&Jk"f33gFG01 ,VEz ~)=_f;XX6wY{D|ev6<\Xx<גIVP__w ,,=>8H$>omXIs9]ׇ!a!a`t~1bsyiIU՛n= Kf00 wq(:Fsw)IENDB`lmms-1.1.3/data/themes/default/loop_point_b.png000066400000000000000000000007301247673406200215120ustar00rootroot00000000000000PNG  IHDR r|sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<UIDAT(RJA$9R$"X Q$|6V"W{C.6FS4 0H^3_su/_sb-lD (4*T=])4*$KQro}vNeK`$!d YysmfsޙT4i@1)sHXeڴHR:= z Lyn&rF sAH|MiZIENDB`lmms-1.1.3/data/themes/default/loop_point_e.png000066400000000000000000000007321247673406200215170ustar00rootroot00000000000000PNG  IHDR r|sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<WIDAT(OKQKd8!i%" A&w}>@[hY. (JAy޽Tul.Å1+۝J;V;si+5ӘBRNwS2!D&OJ@haPZߕ/vW Q Đ&F8>]Hldo 2 VpDJCH*+Νl)Q`fڶ*  'fz,}̊D D!޴ww!>XфzV,Od2b2ʚz@mЫ70) z`ǙyQm#i{tPnؼ8"h!KBOΒ[iIENDB`lmms-1.1.3/data/themes/default/loop_points_off.png000066400000000000000000000012711247673406200222270ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<6IDAT8KP/NdDKBE m-몋t}); ^*()=NW8jkdiڃJ҅kp'opcu>zfF- BAZ-? h4ZcYt!P(ujVT&7\>!\mJNeY~z _bQeK:E"uR@!"!ĽiAhhȲ-ϼ 4]TuM4pڗOQPRyX1z~~i,8&IE;;;4ݒ/FNĨh|RJ /..Zk677I5J)ZI9yp8DR/6q&ι!Gfffzj*^dYFR!˲2ge4qyy^v{suuUk68FAH<ޏͬ/_sXpbTT`cc}Vnm3;=={{7g̻ioJIENDB`lmms-1.1.3/data/themes/default/main_toolbar_bg.png000066400000000000000000000013141247673406200221440ustar00rootroot00000000000000PNG  IHDR @qsRGBbKGD8?L8O. pHYs  tIME #~tEXtCommentCreated with The GIMPd%n#IDAT8UQ#1C%κkyIIA@-@=0F R[K.ͬ"U Dd uq9P1yv[ &6Sn ~HT]qB[_nPá3a QY*^d rͷ kKK!yg|:CY\+ neXi.)| \5+[P( Ϫ=Yws䑽j6Ǧ)GFdWª{:]7^?xyNC[*om0֟fcϵ?`Hkxf^7IENDB`lmms-1.1.3/data/themes/default/master_pitch.png000066400000000000000000000010341247673406200215070ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8jP@Q X4BK;N*.n}_ n.>.vVH 4vh E!.!a^c3h1n?lv9?3fsr9)z\bV lx:wO1EQga&T*/+J9w< UU=m4' B\.EB˲"eE(6"`6JH,ˏ|~LZ6~,bj:iXV],~X,l]%O2ƌrrmdrv}+ KAD)9Ӟ6EQK$d%EQns~FqR(I[X|ݵ[J``Ʊ }>G0)t=+gzkKOe$'@/՟+yLIENDB`lmms-1.1.3/data/themes/default/master_volume.png000066400000000000000000000010131247673406200217040ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8k@ƿuR%CKҡtkSKJ E 8X!D51K{J}ݻ#,~"Њ"s]uE~۶@О Rtjl4a8.jj[`bŸ,Kt0yJY-:VT*udI}R(rv j /ma</ɲ|Dܝ] c*Ip)q>e9684Mp(zg8a^WWtdht jM@4΀e6vtlփ^V@0M;ڶvkZm]3p `:˺?c'D)-,SIENDB`lmms-1.1.3/data/themes/default/midi_file.png000066400000000000000000000023111247673406200207450ustar00rootroot00000000000000PNG  IHDR szzbKGD~IDATXWMLG~k&G6B`'!TS!= U☠@E\Bn .Hp@¥zFpCsʑ*UDKԔ w}oֳֳ^#5J};7ߪa%/oRtK(lxzNNN ,..BWWSB<XYYP(!, f?8>>4k-% ܞt\LHRtYK5 2 455L&Zwtt\9 2О'R[a+ZzZoM/nAD ˘XoB 0Bn47#74"\Z[[QQ$">4p35Dc7mFT- x P Tɢ=ξgiΝ$j! oޔjoG(/! O`4aXX٫G5k4A߷@T.sA1'0)\djGV9f zY&ZH" >JS(o;@ڰʯ?t ǃ?g@Eqi%304]?\,ˌQa.LUeư^.P(0SFC(`CL6!nVkgQOS1kEŨ>>R یeNN\w3 2Un7qoNgyGrne:7A*Y`rxxTj\>stt_~vvA ׍Rw' s'IENDB`lmms-1.1.3/data/themes/default/mixer_send_off.png000066400000000000000000000014611247673406200220200ustar00rootroot00000000000000PNG  IHDRq6bKGDC\ pHYs  tIME1@tEXtCommentCreated with GIMPWIDATHKQ  * Lbv 7B mwZh7u'ue(q0 0`dƘq2X~p`;{ϝxE(X,EQ mp]uur o6ضj1(ʛfIzTP4i*PHUUEUUEA4?öm0>> CCCLFfmmm155E"`ss˲X\\u], ;;;!Ĩ>L$'1Mz.eoo>###R)noo1 W;A8X,rzz br,D#aXE8frr'pGWWW$I<ϳPH&RࠏtmNNN,//K> i'T*%+Ȇ5^B.mN%< P(#qqqFTU;uF4 `Yypgs/auosr_kdmffg鞿 `/ XZ\{N"&?b~!H35*HR3ԃX2F!#(`s :(9iar }:=]+뚏:~¡ \C/>&F#MDC *B5GUAuoq(Р%1q-!zJ)l܆z(#^I#ԧ:;ˈjF6(cY|(qa9>#wTF8Xg!z.1=;~~pk71 ɖ͜ɇg0 c6#7 \TbتvUg_>O1r`[&s| h%=ď(:T2+20UUn`;9DU{9^'\YbG$ ;zO>*F-Y$+])#+ewU~^$wF2ƾ3l;)E^YZǧS+ cG G-ߞ,xu0bߤd8Q~iN/-.oMa{x¡1@{ЬךRA=ih "RiTz7B5m.^Z:1}7Yu-! /P^G 1l!he{p¢VQ׿,kH{ 1 *WoTM@eXT}EL*o¡ʢd iD#L5' J Ҧ@FM-a= 9E/ھi(M :[&>7?'k4qfav'9N^N_x F;Zkm}>IENDB`lmms-1.1.3/data/themes/default/moog_saw_wave_active.png000066400000000000000000000010531247673406200232160ustar00rootroot00000000000000PNG  IHDR*bKGDC pHYs  tIME!<ՐtEXtCommentCreated with The GIMPd%nIDAT(ύjTAE[Uvҏ$/t$NE$8;?OA;}~[iHp 7kot:{k:Z 2sim-R 333y:㝙9K),u0*k98OWZNVy~h"iryX. a྄|{0/,PU"ڨRX ݸw_FEa+6EX<űhu BBUfN?zqj~F;ϰ:dP8&U޵[,ˇ}VeƉY<_wY$҇pG'1C Hђ{{:]7t[sQUբ$ofk{pO "N슁IENDB`lmms-1.1.3/data/themes/default/moog_saw_wave_inactive.png000066400000000000000000000010461247673406200235470ustar00rootroot00000000000000PNG  IHDR(8PLTE ##"###&%&&&%(()()))))***,++,,+,,,.///..//.///1111212112122224444454555455545557888778879:9:9:?@?MMMNNNOOOQQQVVVVVWYYYZ[[[Z[[[[[\[]]]```bbbccdcddfffllllmlppoqrrxxxyzy{z{{{z|}||}}}}}~%pIDAT[UI 0] *?o Tp2gN(yCVD,|xn9 DM<[)/MVFg`qG]kT78f H[ \__%ýzvYVO=43mNU3h`~zan@BREc/)}_`4 IENDB`lmms-1.1.3/data/themes/default/muted.png000066400000000000000000000025011247673406200201430ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8]hSgƟӴ|h6)IXPt^ c ]lUAv1v8 煌ul7ub"UxaK"`6k&6f:ssrr]$q އͷ<עѡSt R?yb3ܺuqر9rirrWs LŢvdrX4ae25dX*n(W![ }ՅiY.U:E)MhϛihTau%4r>e~j4@ h dŸ2& /׀cZ +K+J@o!,RldX֒׭]8n#D%I ,'8BP@mҿ?t^(dY@9("EQqHz (XGz'zɓF<11a\zQT՝HENO't:Fdy ng2 Kͽ900.?x&煂x#K+;uJ)Hs\`hJ,eeL:2VPNjx @uoLT$rh3YNp mohyURJѤ nppgPq>︺+}` eDw~oG&X.+bts8W0@}9-.-1GY..y8*o)=!mk3}q-x?XI Yz38ʁgnLekI`88l@ P>Fb$ o}m0B>)K]YC QC2UV7rEN'^3yz[TVw EsE5 P a8v̅@hUP1\+W\Yٿ[Шn"0_8,Im$Kgo44S?)-tՂNͬxp|-~,9s1&V(ݑqn5,@ SES%ۃ5躩MRYn@|;dqgCeն ZX>pDj.MpM4< "O?yU̬,0<f?n6'(0SwhUl'3W1@Ewk_ZIENDB`lmms-1.1.3/data/themes/default/note_double_whole.png000066400000000000000000000023451247673406200225300ustar00rootroot00000000000000PNG  IHDRw=bKGDC pHYs11(RtIME!KrIDATHU]lU󳻳n_Zh-ĒH“!Ah A!j}0*T} Ą HI< @Ttlgv]36ࣉ'99s ׍7r~/`ex";@] QH_QqˆKzpnsͧgRG>J*` ~o~;p'Tf2!3 * I Kg|@N/(CwRV&?2ӹ&a,U+KWJM~ݿ/Aa/gI Bm^˭_BG0` ]O,hT}K{pN>|Q<2?Q\K'9y`TAg a{fcR-Y^HZ8>fgs @A)RšcuUA&۳歑s?Q2gi]zh1 BMt~͸ER镖Bj"`*e(C˜ OgXje!=@}RpڒWD(ܵy#~PaS`SSJ9_(S]nr+jv(:Z>k]%={BҰǏNۉO_=Lz sكoٝt]љ!JJՇ>5Q~"3 3yacS,rNL$oh#2 u9{p;0uL2Y@xv8@nU4 ;fyr$skǍIf):HXYKWZ0g)@Wִj֜9l~ؖ$(7ȌpTDh`w B]YT;Q ݽѤfA %*7 3_rNO_SD=-;XGC¨7MC%8q{7i9CӦ* >HT m>c7EBQEK1+W#ZȴX뙞;?!PfQKlQJJR\ERzbNQӼ9.5Ǎ4ZIENDB`lmms-1.1.3/data/themes/default/note_eighth.png000066400000000000000000000004021247673406200213200ustar00rootroot00000000000000PNG  IHDRabKGD pHYs11(RtIME]IDAT8͓10" J?$GTkJ#!KDv u;€ hŠa'Ą6w؁ H|(D $upb?m!*PxresTx<:BO{{~ \T:qo͌!H,#VR"X,ﺻ;H헉Y|`Nl 7 =JeձX5W}ݚS'$'p:5lBa)AlzE;Fr^DZaїvpf&ssY~w[E2_>  ;VLg|PYPC`\~S̤pTdj\8er*ͽ7aO96 dM?ݣԂ-?RJin <ĥvв{~ӆ:|%a).`Ftڱ  (0L=v7'pVhDIJY⨪ j%Eݮ ܳr.Gq"(AX 0v% M6ѡ%CJX,6oZ$T߲k?>L7X[KMM>(PRʔ^s^B S?g.*O6|Gۉ'Hg PM0Fb8R.q8\>;HtK$93=>i*ޥ&[V\(zjCU0_KÇ4 0>.{ >1l6Kcc#_igwѴr,ˢq|Hz.}65nLT?xGXpsG%v<ڦK1Đ0> d3?mN'E4~->R``0R؂DsgT|ti ]zt{z;B.q;e E8J<^9?2R+Yp  p:4M%YON]x8[Y6!dz[߸-~:P/qCf"1vh6[!|U)e,lB[?@-۷q˚BPKN%*1}8o]4+4Mw8Rʔa@)RjPMGIENDB`lmms-1.1.3/data/themes/default/note_quarter.png000066400000000000000000000003271247673406200215410ustar00rootroot00000000000000PNG  IHDRabKGD pHYs11(RtIMEdIDAT8cd 444g``r-NHld b F 5K& c$Es`p f yIWIENDB`lmms-1.1.3/data/themes/default/note_sixteenth.png000066400000000000000000000004211247673406200220640ustar00rootroot00000000000000PNG  IHDRabKGD pHYs11(RtIMERIDAT8˥;@ D"$LT{ntT!f-$GLь 8܁S>b}`:/`V59y+-Of#yZ!Ul \\%z:++a.,5B,5f0]YD)#ՒIENDB`lmms-1.1.3/data/themes/default/note_thirtysecond.png000066400000000000000000000004351247673406200225750ustar00rootroot00000000000000PNG  IHDRabKGD pHYs11(RtIME-V%IDAT8˝1! E_-ՎWFe+FکlLlgX&ơҰ/G`Sf /[Hzl'*pѪ S( mu)KAA B (\Tu籿<0w[mIENDB`lmms-1.1.3/data/themes/default/note_tripleteighth.png000066400000000000000000000004311247673406200227260ustar00rootroot00000000000000PNG  IHDRabKGD pHYs11(RtIME'IDAT8Œ10E_GN/-th'&h&@4RHD۶f% @ŜhuZ5X i(4AOp^|2y)A=D roM&6_( lue1Abeͷ ʭoqS\R#[B4IENDB`lmms-1.1.3/data/themes/default/note_triplethalf.png000066400000000000000000000004431247673406200223730ustar00rootroot00000000000000PNG  IHDRabKGD pHYs11(RtIME.*IDAT8Œ@EXlXZ%P;hv7Nͼ\M,kK7E?yN(A=|e03H4n@{d`Vq 3J/M*AR TwN+A>` <&>y׻x;+ IENDB`lmms-1.1.3/data/themes/default/output_graph.png000066400000000000000000000112661247673406200215560ustar00rootroot00000000000000PNG  IHDRp0fsRGBgAMA aPLTE     """!!!!""""$$! " " #!$ $!$"%#& &!&"&$ % & &!!&"!&#"("#)##)$$*$pOtRNSS% pHYsodtEXtSoftwarePaint.NET v3.5.11GB7 IDATXGXv6m4Z%Q&8.@vC0tN@ȉl{fdwFɑ-YserG\^z<=y>=>>}tO|x??>>~{|{w5wo5m!ۜ,9匱u#2ΙVB}0=X3=n}Ӷhux|2.L拄1OVS*EM9t}&7cܽ-RB:f$b[ *fYXłdH W)sA*sj,3n̻[ۮCCv0FɦhgYSYd9,gtB`~2dY֬%dWGM[ԨzӺ:cmRoDSQeU%jbx"m/W+QgSJgj+j|q?!]ZkWJuYs9KiHXo Ҍ<d(> ޕnVz4~E`vҶikK#T Д&ڜϲ gpӌ1;'pTa^0<*kQlq&xijVֵK9+TMˍgC̲"MjI.ZG JMyz3a_};4 4&iL#ʉt#9eN@ t /Β0epJzm H0?z'?neFuuU2 o 7'd $LPZgJ fJqb}c~}'w`:S5h S䄟UN9f4WeF)g;oJs` [d?{7Y,[)W@{ޔ)N|WAS"Ub+Uc6FJI; h oaiidE$Ac6y˚Gqg紀l%Hf ُ?ei@NL+4dUUTkz{Qi gE)Z@䫷\y~:0xӯb_F}TfM|FA%C!۔օ` wݮkk;?8}aq C?X@K\um1b RdsGJ n*%^洄6`qM睟qzS]+ԡF *(atE&[U0̙.ABIs&Qbik ahi8` =Nm٢dꄮ&/^tfIfH3/hsƉF Ǥd<:Ji'p}7ТF=UWSp2OgYthA X9ܾR S9D 'DwGmp!p1ӎ-B\;I: +Qqu+gZ),AZ{YsY8 Ox5hq<>܁O0dBr*V|yBc2'"W/VغB<}]N=88NwYn:d Yfe/(tN#zfs-Tqh($bW7>JuB'4d/d3(7R\B6I"ħYAҞ+$hu׵Gpn=tBBtbdbj$bTE9[-h!i0Ŷ,dY ٰ# QO_{ͣ^}sFcp34+QJHM R#-H!d@<5NWx[`=T`ꈡ6`A-"g $˞pAӌ^PV-@S8{D^TLq 1!ńϣhou)!*92CtzAsb] #T{/j>հtQoC4 b<уQAg;jӉJ 0A-(>MW3Gڜ%(2s^ ى-W~]Z VwB|;`oU PU381&ZFY9UE&9ˆ?k1K|jCLns 1OT8 L4%HQIU,K%W/)E 5D恧JdE֠-C`"8f˘i?$䜒6'9/U^*Rz"taqIEE8N;z5Lj׆--rNg 1?$K2?;(9E%-@C*b=C=@(3N2N7X;8g| /_t"Ţ.df֮֐x.C,٣QGLkƁXyCpu>閱Y^${}><~xztۧáyl_n~}swk+]֗׋Xq`XGjOIENDB`lmms-1.1.3/data/themes/default/pat_rec.png000066400000000000000000000017501247673406200204470ustar00rootroot00000000000000PNG  IHDR(WbKGDC pHYs.#.#x?vtIME7?tEXtCommentCreated with GIMPWPIDATH_hSw?^suZ[+Bmq(}蓥aM)L;:n+Tdbac ?un>a"5PA7S6JK/74{~9߹s.(t@Bh9@rԬz $?f%.Qʤ-J}QJQmpПS6'i[a\>nxּyJPt%`#0Q^0м!i;~ D])q㚺o?=w]KaXх r%gna}U$g۽#Ng]HB[$"]{A#/صnnލ Jx 9uʛXS 7nu/?a4"ĂvCM @B׭wwdLs5JnwFhts<tJYXtl: #S%\9Qa k5REy%P([wW/\ ٿv-65qUnN2t4[*p )Y~ jAJݣG;##CKZYV)v,R}CG뿜hiy ޚݶt˃Nr80@H @D"byKuH,bxV7S--Ui>\hiιjwH24SDIoΉ;X4-1)1MZhSh?d>Brb@.|`lpT2f٩(s+jB꺮!NDIömSm7ZiP׵a8ICc 1E$Q<̨Jq~(!3c]+Q),ضMd3q9ǡxl&i`f}qH6WۆM~.y~PDt/%>{c{=IENDB`lmms-1.1.3/data/themes/default/play.png000066400000000000000000000007331247673406200177770ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<XIDAT8ӿjPsK :8I2wj6G@B>I̝|>`'! ύ59]LIos%suQ7(Xޚ9p 4 QeYq2̒S6MSzFycTJꑈJv[tF^q>d2A)l t:`b.<V%l\.a6Rv?,EQJ) "v81LDd}X2Q/3`8; ρnT"4'6}*P.xه*P.xDo@(h l5IENDB`lmms-1.1.3/data/themes/default/playpos_marker.png000066400000000000000000000003201247673406200220520ustar00rootroot00000000000000PNG  IHDR  sRGBbKGDC pHYs11(RtIME  #'PIDAT(ϥI0Co.DEj:V,'23ٜi(Ḟm> P.E"8HhIENDB`lmms-1.1.3/data/themes/default/plugins.png000066400000000000000000000040761247673406200205170ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDATXۏW?xk&v&j Pq)R< k+x@(HE* J+Zj+Ғ6n\vWzmϹ0f/AH=h9̌pαܽ~9so ޶G';gm7F9Xp0s>Lpl,i]YxBHO1MZՖT*׃'ITެRe:gZc &{<|R?kSAmN3P 1H9rWgvk >O{B^yE0ԩSr9zNupjI;~w/]H)aK֭3`y:J2RJڝ&nT*`mu332==Me!SYu<ϣۋQ fۏ/5[%d(JZ-:QV(&hZ!Ho`PJ2N ^6}Z0>c?H'e* t:4 0^Sk ?s?K ׸ysfNNކ!-mk{^[)esNDeW? d|8՛xlnnYd"7$ak8VfيQEͨE4z8g,OSBGOaH<#e2{F'j(ףJ:$%ym{@mxܝQwJwZ(hvlkʭF2@ wn [6B_tڭ[+nk5}fƎ`viBxY )>`{*zIENDB`lmms-1.1.3/data/themes/default/ports.png000066400000000000000000000020451247673406200201770ustar00rootroot00000000000000PNG  IHDRj sBITOPLTEߎbbbkkkaaahhhddd&&&iiifff*ҧfffgggeeeΕUUUEEEfffccceeefffdddeeeQQQffffffAAAffffffcccfffggg[[[gggddd]]]tttdddVVVUUUjjjTTTFFFnnneeeIIIeeefff//eeefffAAAfffXXXaaaVVxxx\\\]]]fffjjjnnnFFFfffĽkkkVVV```ffffffAAAFFFGGGKKKLLLMMMNNNPPPQQQTTTWWWXXXYYY\\\^^^___aaabbbccceeefffggghhhjjjpppvvv{{{}}}~~~̅ItRNS ""'--4:>@ACDIIRTX[deeefgkknpppquuwx|~~,IDATc`DTD6& c5+\ C8gcf%0` _~ 8TYfEejjr X,N$?W@@/LYTaV6-cHK ̙9*)/\8i(S MuM^D,;gNw 5FP_NKebk4aG,kim+\#zIENDB`lmms-1.1.3/data/themes/default/pr_white_key_big_pressed.png000066400000000000000000000005611247673406200240700ustar00rootroot00000000000000PNG  IHDR@oߤsRGB pHYs  ~tIME n3tEXtCommentCreated with The GIMPd%nbKGD̿IDAT8ݔ 0 Ǔncn= U|w1[jcSBC+ISuSJq~ckMcOv}1-~p6q~1nVV0_[qn]ݳ ݵ>-u7`J|cSְ-8;42߬ 7pY@JzJ[OHt\{Z$*A:6J4jm98Ã{\Ec1R硇ɭ |Cq.0zp`mzz;(8""'&quIuLÕNG;(yެeRO2R-cc~>&*j8q]JsTa6Bʲ$WJ<%M3z>i64LҲZm6uk}5,m9Wgw,zҲo߿Z#C/}JJql,!98p6$s,#Q,1e0>>!D$(.LSWV+ӶKRgΆgn<ץn+q\WA*+%mc Jet{}[kȋWJtyyuenp:OuxF%X~#ISGOOD!eY4%eY]ht򜑡ApK+KgW>^1&MUj+zw HAJJ*W8c0sݍı\)֘<x+|iyqS8ogcL]j\xŅw0d^vll±mQԯxQ@<ŕ`6m8c5|»ʗ/p‹Ƙ@c>c[+K]?{}:|B%ea6RʍMjX@5B,##~w//{sx|r?wcbyq#SO:S-5J)<'s, ʲĘ-[(ʒ?scGVI@9!bSoLN6nOyܜDQ%e9JedY *ljsjnuÃ-22W%5Mw;Sb*Pi#7zl dYf$*E 86EZ7ׯ.&D~#"~JSl ZHA(,P E1²G>лdY}:J6|Ź&MSH"5QbN(u=0:)!5+(t{]4G~۶̓0i\! ׽u*~6^nGQa8t:&"nGjuȲ U pM@Az*͸rEkQ@ v^׻wq09BCx`8r. `̽~J 02f IENDB`lmms-1.1.3/data/themes/default/progression_cubic_hermite.png000066400000000000000000000011501247673406200242600ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT81LQwE85p!PL kMS] a(S+dbäqUSML FB,Q{[7/s/K? ":HND"qQ*YVjj/ GSIVrST׭x*_\fJ/x<>X,?{js[j_d~Iƍit|V 7 tn4Ushcm/g}fB'뺮M2M0`H@jf9=1)oU_9߯QJe "L/t_A,ә&nW ȏL:{520AѨ4Lf]`w;“xgYV)H𥛒`#9ЊVUsƓ!JM D'"? 6plP r(A>^<s"ZENE0hkyIENDB`lmms-1.1.3/data/themes/default/progression_discrete.png000066400000000000000000000004341247673406200232640ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8= A dn49\\++=S4,L$ %!4mY*NWCXTzvLjMsν=wgGjWi>6\ƴ~(]fo濗oOS3Cg MLL>%o:O6 20pq 3-fԵMCCCi|FFF-&iy=P0#3Cdr[4;u===KlYX420002001100`SCZx% bddd"($YV%R#cR\v~A&˜-($$/a` D$KWIJd>x䅄z@lln6nA/q)K!!w۹kDBY1\H4`bc0bt b BvfFFJj݌0Y` UIENDB`lmms-1.1.3/data/themes/default/project_export.png000066400000000000000000000010621247673406200220750ustar00rootroot00000000000000PNG  IHDR K7sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT(}S"Azn L4?_05{X0?{dwS##Q3#ݞ஛wj|>1 yZ)s13<sp΁C+…"j `11CG䜃@U y`$" Z\yk~H?s.4=Dy,ze_$"8Aq0NZp\Wh9(M&qDZ{l_*PT6 ~sTRP^tuMU7,"t:q\4 Z{KEtap8lVd6',l}OG/ZZ0Ƙh+MW 7d IA[IENDB`lmms-1.1.3/data/themes/default/project_file.png000066400000000000000000000041241247673406200214750ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDATXW[l]眙}m76`SAAH!ԯJZUM5U&iZ(JHA)* ~cƾq_sݏd DH;9{{`f<#!&zȼ7~}y?faw|~V `suuX,[}-m:Nv\h?!H^|we}/2SB۰QBa03y1!/8x|?:_QSض "KC- `|V"mYhںcפo[7=f!R R_fb" '֢Vut\)zqBzvib@)B@ ]RBɔm\8~9ր&L"@bɼpk3'B .r`?|9/ !@yִ{?!Z)wl!s`OXD-fJxvz5ɯɫ)>]Dp B? A& 0ͱ_x0#k əf{2Gu\I$sN8ڳ?FeD-ظٿHL|4:>}38C[8s v}^JoHa rqIðmt*9wd< Ɨ5>]O'wӉq}!fSR[qU eDtLv3n7 0 B`eiy¢gCP`Sfz3CxCϬfYyŗ{;?p$fݸk -+e 17;}af:~Gf~Y;y-$YjwjnfIENDB`lmms-1.1.3/data/themes/default/project_import.png000066400000000000000000000023341247673406200220710ustar00rootroot00000000000000PNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTETYYW\ZX]]Z^_[``\a`~~~agfbgg~~~xxO;tRNS !"$%&')+,-13569<>BDFIJR2IDATxmkAًˆ i ENQH%R ; oHacq 6BSSbP0Grs/wpwv;|w]x]I33gOX03ȭ<+= &!!qz[r~J ?ErD$6~|%"α7 %I\7'pm=^a6Y{v K_@,B&e4]#$/*&'(aT$ t! bO(NL3˹#G PWUx4QA[]?90/u{;|uҢ~p/ ;шkS߬~/q:*J{ qw%tz[ڒƊ1{\E܅aIENDB`lmms-1.1.3/data/themes/default/project_new_from_template.png000066400000000000000000000007661247673406200242750ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<sIDAT8=0=\3P {Z* N[RD  =2_FJ{#"U׵ĎB޿xLcNd#Rh1oy ɴ#7M#DԉAc`fb?N1N%D^'hpHcFw[MHr5;v"J#jtf!V/P.sC yLf3 !"X.pΥ]vrdBx겮ޣr^g9*zq^f#",y#4M{n{a.rxEQ zڑ$ 9ƘOEϿ<W"Ύ45IENDB`lmms-1.1.3/data/themes/default/project_notes.png000066400000000000000000000010351247673406200217040ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8jAk;6E llgmH"`DJaL粷 {7ǎbffec 1FBrt+iaAр1ZJWJA)4C5rHD2\F#ZD#D.e2L{,M9,֘f_weB@(AcfnK^0Xg"*\>M(*JY/B1DTќ*Uvk/>u&iw+LV ιbtR(@Z }[,&@=Sv9NbZ-z.sa.5`Ix c柛v&y6UG]P(f=$%IENDB`lmms-1.1.3/data/themes/default/project_open.png000066400000000000000000000011131247673406200215120ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8n1}  )S!ơWHW@-hNY Ů7^ FػԶ<ƈ9uKzK~1FRJ !, "f6I^򙠶(e8)43Twf N X-sθ;!q/.p#HD0>hz}u@Dav4!O 88*5x=P4@@R/l|q0=-wC:~M= ! sP@r~z4s%1H2|>2Uc|~y%Lgm~͸xZټ!>o$_Fy0|)Cɤ) Qik`dHOV[_{'$IENDB`lmms-1.1.3/data/themes/default/project_open_down.png000066400000000000000000000022511247673406200225450ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYsvv}ՂtIME +#bk8><1ULJS0ѣ.~@a糙[E51KQsMnZz$P\H)܋<>ݨ FM,O`s}ըTnn;W4J={G>;;;sK8~.z_? ɍ5]IENDB`lmms-1.1.3/data/themes/default/project_open_recent.png000066400000000000000000000013251247673406200230570ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<RIDAT8kA?3{IU FAVZ`#$&i6ilDD́ \eqQDJ ٙy9$1;;o?;ͬv[$IEs((vf0#B.`027R ,kM83û!%gA;#f5X$hQJqp4 3!Mo_<7!BxnqI>ʀ;({4b[۽q|h{߯B\IvIt(zoj)v$ɔzbc0%ےt.t*TYI4 Dy29 ޺8e!qu-RXC]cĆ-mG&NhOէڍkui}!R$9zBR׍1C *ZZRJ*nfV>cN!EA^h9?!MS4KKKOz5hG=Xwۑv}6/B777.,,zߣ`CwY)K#bx#"`#kdVIENDB`lmms-1.1.3/data/themes/default/project_save.png000066400000000000000000000015411247673406200215140ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8MHTQbm&Fb ]#ՠePZJ$m jh2A3  W&L7-1T܏{!)%[DtwV9ʖUu ۞/ T 𱵸*xX88PBk_4\UK\W;GߔҶ-xH$uBmܼðЅR|l%ğ>~Ix8;V^T(9lK*972Njd@zH܌Xζ6U>Կkľ##=017S$y7KD˲2HNgv+D$,B<v~0W?[L]R9?'(,\ؠgH䌦i4 @:… !`&ˑRJ0 )%ǁ{^(!D^yB S\WW9Wmۆm0Mi;HJsƘ[SS UX\\9Dq/,kCLDhoo vPL&aϣ m68HR4-bn(t]0`1W(9WU57NP?669c D+8yut뮹z(P]h nfkpUIENDB`lmms-1.1.3/data/themes/default/project_saveas.png000066400000000000000000000015411247673406200220400ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8MHTQbm&Fb ]#ՠePZJ$m jh2A3  W&L7-1T܏{!)%[DtwV9ʖUu ۞/ T 𱵸*xX88PBk_4\UK\W;GߔҶ-xH$uBmܼðЅR|l%ğ>~Ix8;V^T(9lK*972Njd@zH܌Xζ6U>Կkľ##=017S$y7KD˲2HNgv+D$,B<v~0W?[L]R9?'(,\ؠgH䌦i4 @:… !`&ˑRJ0 )%ǁ{^(!D^yB S\WW9Wmۆm0Mi;HJsƘ[SS UX\\9Dq/,kCLDhoo vPL&aϣ m68HR4-bn(t]0`1W(9WU57NP?669c D+8yut뮹z(P]h nfkpUIENDB`lmms-1.1.3/data/themes/default/quantize.png000066400000000000000000000012711247673406200206700ustar00rootroot00000000000000PNG  IHDRJ~sIDAT[HS9S Yb+V$e!t'1(S|А A*Cʇ"A(,KJJJ# "A33)PrjsN>?HH W&?LU $aBe!Sdƣ De>#y#?'g;%ŘM6ʤh<͑wU\{A"K0(*iOh\|-rċBlbsThڿqP0HhFSneo+ vA^fj8zlaj!. ƊADC I& +[ ^3_Et׾PAdB4wuX ]y/0I4Ԓ,hD)s!'} O( 9)2LSI 81]`/Ԉn {w FbM?Ϩ p|Ծk]HwF(>v`FF;?u׋O߸J=ـ?KƆ޷d ? eѫ=nhH%THK?]ɛӮ'Gly9䱖f1F,ٜ*nq*8UPq a`VG Yc@;#U0 ˆذ(P9$;YIENDB`lmms-1.1.3/data/themes/default/random_wave_active.png000066400000000000000000000011131247673406200226600ustar00rootroot00000000000000PNG  IHDRH-sRGBbKGD pHYs  tIME?tEXtCommentCreated with The GIMPd%nIDAT(ϝnA؎68\X XnhxJ@Bt-O T  p|9tng)l`fwDZhs 6h}e)1bhBgp8d<_/r?a8xzNLӔ8+Tw;\*aA`OwIbZȇ1[YɀG/l *1$x2['3v@ju^C Ѐ;?MǩK&],%zSy7^8ޣDQ ƫG. eAk/F{bUu靍%K[խUUE]G03O7,*jSfð8 8[pt)wp N&^'jIENDB`lmms-1.1.3/data/themes/default/random_wave_inactive.png000066400000000000000000000005621247673406200232160ustar00rootroot00000000000000PNG  IHDRAZsRGBbKGD̿ pHYs  tIME9)W ^tEXtCommentCreated with The GIMPd%nIDATuнJ`F'gOjvqtv+t*EWA%% I8;w=p=MԂZз%VHv/aTzXȗp s$v/TO{e\J\#!!EqxFJN{ (] ެcWhnnPAPw&JTH{t68YDģIENDB`lmms-1.1.3/data/themes/default/receive_bg_arrow.png000066400000000000000000000004411247673406200223320ustar00rootroot00000000000000PNG  IHDR8 pHYs  tIME81S)tEXtCommentCreated with GIMPWIDATX 0 a;- kKPu̅kb߷Hq~"/VUOt:_63=?5NQ`롖^6gV˾*;98zu$x/;%H=5IENDB`lmms-1.1.3/data/themes/default/record.png000066400000000000000000000011561247673406200203100ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8=k@]ȑ0ɒ)x+!|/!ߡdԥK h Y [۪,,b7+t~ Rb 5Q“t& LF?8vqƞZ(W+rEQa!h j]a jX?mpa>[LCӾgaᇛ?3U-{˅4 !;RJHSp|?( `#B.c(J pViy$$/ɱ7\!ht A'lRd9ł'ڜP!%ڜU8bR+鴒QOL1ܲWs\SU=рϹcFg^s\!YvGDسv$% `<_FAIENDB`lmms-1.1.3/data/themes/default/record_accompany.png000066400000000000000000000014731247673406200223440ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8kG<3ϳf'n%d$hb! 顐^{A',z@EH,uM̮OfϯMل"%w3c X5B'(bS{`n|Q>mYmi{ӹ۷Č-,//GQNL\{_LMU& ۱Oh_k6ҿo_@Zeee% 9^{ck/nպd{GC$ePVzݷ,϶ɑ8JgRBzNs>466 CX/=޾dYF[X*(ͱݗ/=ٶ,pZ>lnnלv]>}ܞJ*$I2I > fS×"Ҳ0Ɛf{ H5iJ'4}DN;3-!m oxg-!P)EJ8~Zb}<bz/zj=S(|65&l髵 XvSp(! \*Pw9cc̿*1!~8/hm|~nIENDB`lmms-1.1.3/data/themes/default/reload.png000066400000000000000000000017021247673406200202750ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<?IDAT8OU?vkK܆(B!KfŸ%.Fabb|0_ ?-fI6Fpa,LZZoʬ=pܛs{9(a+Ŵ4B)UtٮVVJY|bmufu5J4r=\W;]}<ގZI#JN~6e8/"CU5ާ|W-Z 27FcHaV[~͞}.w%Y6]\H:'Quz1+7FNCDuUT{;+1WmM͞>>%Gz_[@7`ɲS@Om]b˯KOlmGyǎgW.]J$F3"򽈤6/9 Ϧ _QJ9!+mv޺z0pGD&7˂H8IêAR])nZ닊5~(Tf@ɬ'n e}himlα/wt>dgaD)`.R*{`:v0Hj|_'@TJt[^)j,g zyZc4v<xfSt}]IܾHZc5y/˷0 Ac8ZeY8>?h<6^_,  c]H("T)t%\dK0 s"BQUsmhTQT9#elZUt:}y-(R(PHұn}(ݮVBB/>L1ks.2B=xp>_ft^Q[p[E0IENDB`lmms-1.1.3/data/themes/default/sample_file.png000066400000000000000000000023331247673406200213100ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<XIDATXŗkUǿ6ivKM h<Bl}`V$O*((4l6jm̙safic$~ ss!ZZsak 6uqw;~~o!$kL;dȤ3I널]h;DpGh]l\8#o-8B!8!gϣ.9 'CJp0ked(%Q F((gzBsn=Izw}#rCHyfijjJAAs3fvtt^BWdبHW{M*`tt]r:ϟ??\.)%)c BPyS* ޜew;ZiPtw]zR u 8!JkXk:O׽  Z _'zPD:?!8\G"M*ֈM*t!UQ5))#0A0,ly3fdpX mv6W({<"|q7הR, sg###xk޸HĊ5Y\̽ÌxeҀ_ ZVXumWSes=jҋRDIG +=^ EG8A! 0@6sssq$'F$NOPPJ 5j-TxrhCGB_v~vL'D ֕Bx9Qi{LiqBٙ5)P>08# 0XmO9`%f0˴j 0 C(gۭ3O."{Lc -XlaksP{}NKWd"Y46׽ꓭݝo?^yԾ>̞Toפ-&/iode}<޿#^/7fI㧩D3>s6~iYKꁆ"`f!`79IENDB`lmms-1.1.3/data/themes/default/saw_wave_active.png000066400000000000000000000010351247673406200221750ustar00rootroot00000000000000PNG  IHDR*bKGDC pHYs  tIME'$y5tEXtCommentCreated with The GIMPd%nIDAT(ύNQ9u"B4H!Y@tc<BBHHCDt^̤XQ2ӧ ! V#"Du]eYUgffnHDPT%3;笵A<|JrI8CXhc]siX?.]p,{GTGd+ fI,8Y Uv=|`,3c6B̲za%phF_N]?vZ|T-fχ=I0TD nG ~8O:w3CVl.w)t,}(&,4GNTEUU!* zvnZ[Zu }-{\ʹ9.F(ˡIENDB`lmms-1.1.3/data/themes/default/saw_wave_inactive.png000066400000000000000000000007731247673406200225340ustar00rootroot00000000000000PNG  IHDR(PLTE #""##"###&%&&&%&&&(()())++,,+,,,,./././///11121222122244545445555488899::9:<<=???OOOQQQVVVYYYZ[[]]]```ddcdddfgghhhiijijijijklllkklmlmnnnmmooorrqtttyyy{{{||||}|~~~~olIDATUP,,'OAF!T9wakkxh Titr+t%n:<II(|z*Q-92P8Kqec]%H7-X==AP|+FZS)IENDB`lmms-1.1.3/data/themes/default/sbarrow_down.png000066400000000000000000000003021247673406200215300ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  (-OIDAT5Ʊ@E=̜!.~L&Tb p]\3dbl^Ia7V?גd~Z',x^.IxrdIIENDB`lmms-1.1.3/data/themes/default/sbarrow_down_d.png000066400000000000000000000002751247673406200220440ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  .3m-JIDAT5;0T(H /ȢbpQ@)u1cin=K9'XK)$)׶<IENDB`lmms-1.1.3/data/themes/default/sbarrow_left.png000066400000000000000000000003021247673406200215130ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  (5/BOIDAT-̡ P cP% x +uvqE?ȁ&U{pn%<"'' +IENDB`lmms-1.1.3/data/themes/default/sbarrow_left_d.png000066400000000000000000000003011247673406200220150ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  .% NIDAT-̱ $`)7HA -KלN?̪*px@T;!eה ?o ؀IENDB`lmms-1.1.3/data/themes/default/sbarrow_right.png000066400000000000000000000003061247673406200217020ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  ($TSIDAT-ñ QSD3bE ؐ%l?R024q`6IUu 3XJیpO\q~?44IENDB`lmms-1.1.3/data/themes/default/sbarrow_right_d.png000066400000000000000000000003051247673406200222040ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  /M0RIDAT-ñ QV`kL(ʹ-W` r:0KsU9;dS{w_^x|)hIENDB`lmms-1.1.3/data/themes/default/sbarrow_up.png000066400000000000000000000003001247673406200212030ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  (2"MIDAT5˱ @ѷ 'f/ђH.Y'N ZZ$.Pb׌$9  ((IENDB`lmms-1.1.3/data/themes/default/sbarrow_up_d.png000066400000000000000000000002731247673406200215170ustar00rootroot00000000000000PNG  IHDRo&bKGD+L pHYs  tIME  /֡mHIDAT510ї eЁQgݹH"{Z[O/ 5=*z^t? q&IENDB`lmms-1.1.3/data/themes/default/scale.png000066400000000000000000000016501247673406200201200ustar00rootroot00000000000000PNG  IHDR连bKGD pHYs11(RtIME*W5IDAT8ˍOE_UtN\$F(ނ, {󒛧bDr-4I^L!b6dwgCt6dWU`iE1"oօogɀ};}f&$qXfpxzgC!d[Kk8~N4v|`!Gs! 0 sJa&{1`l->]{o@Aj1gעOaY4 $8sADGw~*pXp}WA#āկ8wUkj[،Ll/}xl&a#!"??E`Xˮ[#V58= pQ l~W_e?}`Q:@LK?),5Vٹ<ϫ;@[AӘ$[PtMU;}Pqřs#b"Sh 禿AW ˘ L+<lSXh]ʸ>>^kEg7?SKj94CabWD+| 8wa V*-UV '~0N˒WV[ ^5!pP'~A= z4?#VbÖwv% 1BFżX ݞv.,F}K Á&05\:+pMuKO-縒n7u4.;T8;o$P/IENDB`lmms-1.1.3/data/themes/default/send_bg_arrow.png000066400000000000000000000004741247673406200216470ustar00rootroot00000000000000PNG  IHDR8bKGD" pHYs  tIME'$6itEXtCommentCreated with GIMPWIDATX1 a;R1pΜ&Gz QҩJ R,,> 1M!& 1M-C{OAE<"ne ِrl@%@HR!;o7>q'D`ӦM|jMHDNdq!)>sx~ʕDz܈Bun:V"D`Sg6)o̞"([(~Xl+" 57QKZc-Z%3ѲD/۷;}l}G-H`Cg Z5)kl\}Jc ,@5H2.Ҷ1Y׸q^s|oz[gy |s V;Ρ\o'~.?0 S@FYk[Zm-m_Ub}RJ5 7RE೛k Q<Ύ~EtFKKTˢxe-|W?H)c"s]7+=7z}sFN𹈬tO̕:~6luc|[={|<9Rlֵk?cusl~Lw:E7y*j?TzyHP^4K~*XXNƹ޳{s]brp{{- 1U A4w?G=7D@4 6/%g5-XLCc}qMcBG1F s0bR8 &O,3?u/J>a7 Urw<'mji_\Q4g2 )!!!HD%3b`,"9EW88SxHJ !L򹉧lۺ@DK$Sza:Sku#)RBJ)"%/@9+*%$9;G}=(6|ױ//˻y\HO'ۗzjX   (`E !{`tl07htr~(*hkmH+!"p yh*:j? )%8C)e%\]CӧEX 0(\h4O,O71¹>TU\e4cq{xҶ-4Q*&[_m"~1Σh)P,`*e ֯laiGTUc # @vvUZ4Mi|O`CH%N¤#2=DCs DDbba $#Hf@9CWklh L67>zA(DDOΕ%$$DR+Jaէ\xsQL D = `Y:a< ӫsUUTEE& T-rWAB"rVF:eHFfQɲށt*,)}#}A c t?+WC4([EcddP.Y뺯wH)a~) `1>BadYp2<ׅ! σX8lCO&ambEۄѱLB]| eyQ{TCh_ H Bh[;rvށ\I`xcu8 lM7ޘv}=n-TimDMJ$ ci+LS@HJ% ,<ׁ:puӃT5\}&( @zz008A{3-zڄyQ{[`Ԡuu`AJ 122q{.sDTT5 ZZ!΄# &FFG16>=6:f,~@\ ݂n,N&?Ne2g5) &uZ4H&,ӂ"1 p 084.Vf~F9v>qp7:h䷴>,֧9?2bR#eHP]iY0M E3 3iA)7q,GuQ.#iQF9]n*CJ"=G=ןh̹kD%uk9+`6lۆiaM<R` ':b^y~P>'M`hݸf͙a0 444,p4&&&|>aTDj@D.ihhדּ ?@z}}. 7m^ |*tdڔѩrنeYH>_3C?)f`O2>rEQډH`q\&78 o;O iaa73.H>2߹-cԽIENDB`lmms-1.1.3/data/themes/default/setup_directories.png000066400000000000000000000045531247673406200225720ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThY{lSGNL'y@G $P tcV6N:MeӠehIFTѩϢEW2bB%rI{I?~9Kcx8 sNAh,7/{j49}}}\7ʗY`RP:(q 1cEK.^Kӥ`"~TK߱by3UԔMx}+,oDQ[GM5Y|./'k+mBZjkkH3jZG !(QJΙ3imѸb̢+W瑏[/?;19H}}MN7MV^/A ৔3>!+uxupNOܪTR{iii`}>AzߏP,]":y/ƐͱIII*JiPT{ITZ[e Ӧff6BN1ƺ#}.b(VT*!bw|(#uJ{ `uD S9{]((6V+va'U21L_*tF* yJB,gv;XRL6=WӜ5^vXn ZZZ9[P(Ps?da)CaΞㄐŌ1hBH$J14t(ɤ`R1*`wNϘzB-'xc,P(1iFB,M58ǐ!dZ52,dB2 l-MP$tEK^MoFˁwxZT)@xDNn~h4 }}}y?՚qkE$IT*"CBH~)BdPǾyE+W!1L/d^p"wCEl۾JIA娢:qXG'#v:88h̦Ŗo!Ր&n(? {s{v6`D93ƴ@`T'NooSt(!NRCr^YP0 'n| ђfa=ɝ^ݲ)(8j{ɓy~Ç?Bn~!!Vu;>tsvÑ8v??irnmE4RK\d§͛|1𽽽c3A۠d.S'Ӱݽ#ZuqJ|C1n!V>]||os;V ?PDۭt\@p햭͟ytb]|ccO%s\ %$:N瓸g*Nuu5Ν;T}SqCEǽ .1ƞ)AU!d޼y֯__^ZZ AUUUxA\.|sv{F_3|l jfPV@.!//sYEH<6mzY쨓Wpj,ܼ-:Nyzz:f.ܹsqs$$$F|sSfsN>n6J[ZdSfffRFBV2f'f Ul}B8D`0DLAV; 7&^.RwF:‘F!$%>^?11aٜnkE\\<J^Ym݈ 2BU!C\\~NWj6gD 1p̡p\ V.CaiBHVݟ4l6_F~0PSspP2$H{ !S%''2'sҶ=0LX,v QOQBRRRKL&SR(!6 a򡥥n8sqb\7%%d2%I$6nDzz:bbA}ttty<]<0NC3bccw̩ ÅPJ9 zzbRnEZq.`2PV1 222EMM6m~ZxT.'tCdjzV1@ F˗/YN\BT ATS*Ƃ m @]5QŞnp@T=ڱDBX4eʔ괴n|'.cRV`$!b4?(IENDB`lmms-1.1.3/data/themes/default/setup_general.png000066400000000000000000000071311247673406200216660ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAThZytUչs{;d"!( TWJ[M]u(ZS}}]O@R*1Jkp(ZXB7*xy B$1 шrŋ轾I40Ft b6V[#_f>H% !dT1  SxM*BL?\v{=JeF$`2I1m*C\A8`tm6d2qA(vy(21LK֮q N)%jU{Yy)&3RƮUl292g!7ZWW-,sfϯ\=V c Tӣ|tjH0jH(tdžsx/-.+?`w8cɒxceFF9̵m1 B =3xR9SMHtTVnvRe(wO%IrO-f9B3:g3p=8NgAtD!0-6‘#@:7}N [l[mNe(,8B}0]Kz[Wz<#,0|#ƘmoQ|j4 M*-OIlI_.fuw=xc\k#(K[zj]5| ֬ ; fT2iר)9RYEm<YTXRO%pp 9ώu'[s8GwrӖ%ѿP1Hw&cE₂b2uL- u;K.2'{yg]c5MZ({ I"B&Ģm|&$UPՎl-|(x_=Kʕo)lCO?p8 `6[SEB7k 1؋8h0Yv]ē !#Ubc ߁ TmC t;]:$ MŅώfD:w"a4|GBg4ͼkHyn8^:p`8.PMF PL[WҘl%-arM*C} 5Yswc K^ <^,@?=ғm&k(pR ӅvRx{>Je2I# # Cx̞=iіw?\cڿUUɒp[1[$A5 v &xT}w5551JrIb/OhjѝTO2  nEnwӗXtV[4oGiT{E`0h}};UEn0&Pd ]w yl3!8V5kpeӷfGlTXCm|3;棈EBR,_gci\v-mzK^>EŰF\Odʶ cL S|֬٭/(>`KtjX5C<S;{~f8x`vM~Z1i^V#6胣lxk !dT'01mg&%+!0LՆ / F?HWs.֧ َkW3%,z)(!#Z`ݺj yuDG,?ɠ7jF ^rfDBAYC14ecZ4I\KΜ/oC*&3f?|kF9ZoFΚ4;bOt9ՠ3qz ,4ݖH$RcM cj~#T 'aXPmscؽ SJEAee '9s1_<+?{kce1UV[[[0$Iխ؏&D#7I#x{w9+Veҿts\8I߿y*[9I!\EJ*+mߨ~ NsŋM&EtZۿ 8B8̹=^q¸>~xz/_֩c*IENDB`lmms-1.1.3/data/themes/default/setup_midi.png000066400000000000000000000035661247673406200212030ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh[l[Y}}8%qzM4E**.RBE H.w@<H} R%@2(Sh3i6quζyH7ihL%k{ym 3ZbC@!Pkl5^{B|q|$/Dw斶aŎ+VC5sËM*LN>VTJͮM[?1ֻm;s,.hm~YcSc7W3So !~zל=% uc?4Le @])eBv2 =^ `hBWQ{oR:̧ϊWJxHT}FfN!n\w{'–e[sU,宮R. ʊmy֬LH Bz|lnv"O2U%3MtؼrҡsSM1kۅ% :AjOӍ"ʹR*г4)JL33m}IO!  imk)e{6;vbOK[{VQ1z!s󞖖,7) E9"JqoRJ"8<}gh~1vɩS, qr ~|{b1.]ŋ~"ή}mU,y)$nDbyP*8td 77G[[ 9waL&r\pAr;._0B&tXSݻ41M7oߏicY]]]IXv ^Ws0PJin6K)41Ldǎ!4Mn7[{I{*oT27;ݻ nܸAGGHD bRJ,˪TΉi444^)rH$`0H<=w39 ˿pcSmضnݺW4M&&&㚗J%\.KKKULӬ`6|^sU5C*|ppQ{{{1 AgGgاπg FIO p -twwkxtCCCD*ޮѣG|>J'O$j~&''5onn& a׻P(r;|7u>L(}hmm\.kJ)k.zzztiܶm,--.dh4竫Y H$b޷^ŶxPp$m4J)Rr9\*q>|U+UI(t#|XٳgUmT"Nk^,fZ} @(5==(Rr~~si|> 1MS便%Rx^2q|z<~_fm/qv_f2R !MM߹spԦMLӥ)wv۶]iW7/<ՇK3w?U݉A KS+ү( x!Pkl56j ƿd<1ǥIENDB`lmms-1.1.3/data/themes/default/setup_performance.png000066400000000000000000000035451247673406200225570ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThXiPSWNPY\ + uk]*"V3QS;?lTJՎVc]U*uZEY+!1 Bދ\{ɼ}sϹcH3lC9t]^ Iȁ@ H$ IHy%cݷ=OdEuZfz+srķ9PGT+ruΝTWі"lߠ!~m]S#lX--JPnKKl{K$b,mύkrsVfRFoiY|w[C@'dʃ? ~}l϶`BDZwTVXi(ʅ>ҡ]utk,w+J:&@oل-,'s#cHFNvo>zr5[5qӺNũ eIa"2{Tc@k~)ob?`)xi]n(v@զ†R=[jǸskWjrc AǸ9; {:;uE`=ERISW"0(b̹.o̜;AT(tW,Q^AV2)fUۥҢl>ȡoX/źT)duj&v7!2&NfN u|Y_`mz >ʱprGnep1uV[b=",4[cz=85?3烠ȘIN&q>;)(lc Dü\wNC' O I 00%t )ګ` 1tD-9ȃ85E~LWUQ~e72"& wqu}@q]텝\( uN_N*̼ 5Ƙg{ȘC::xЎA#mVp@]ZzOcߝ^?NI%TfO&5?7қ.tRUY@˨۝v  7BE\U(yL1KJjsղA)S&{ԗ ضtqQInE >2˿Pdݎ.`3cF`-npqgB9xF=}%uOxfW1޷XH$GU'N*|πc\yQA<\] k!"G[um ^1y@ &(OIENDB`lmms-1.1.3/data/themes/default/sin_wave_active.png000066400000000000000000000011001247673406200221650ustar00rootroot00000000000000PNG  IHDR*bKGDC pHYs  tIME()7tEXtCommentCreated with The GIMPd%nIDAT(ύja7hIJt!Vt#ށB܋wʭ;7^nPm'239EЍx6gsx=FaڞkVTyDUUEQet'?|do;w9033;i]?_j4ZcL l}KDͽKۺ)H!$Iwyv+gYgHDzIMN+- ;d;$,Y( f^dGfI YzVX(Xdoaa`IDM B/ƺz4M Re٤kc[k~rX߭qij$u?y?^RLZ*%$agdI&ˬ~x̩@;w}W_y%5"~N0b.­![1 >~6M~JDe}Ξ|xvzT6h(N%iK2iGwۻ'/1\zzz@D2.L;F՗ߌٺ/#ko8o2fg×fylʏۓ1`Rꔈx"b3kܾu/ꕢoqG׫歿Qmo=[`uXgn}3IZ"=9בּC kR"YlnjFiy X?Q$W+ԟõi&I$$$-$fbZ,$пm3ExN:H*#(FkZA(!{z׸<7F,l ddv̳WJPҐIѐ>8YZ^޹usfn;P9I~u`k=]*3&'Ej [,%2ܾKr{NQx *nՖ;zSCT)(;-ݽVr8ݪ V9-(Pш@~\NsEԽ<,J!]g_4LyIENDB`lmms-1.1.3/data/themes/default/splash.png000066400000000000000000012125031247673406200203250ustar00rootroot00000000000000PNG  IHDR=v IDATxliv$Gv} fHWB!#0,Aʌv^gZ{_5Ƙsy]WtrǜsYkcZ{}cV}qw8G>8zTオʭZ[]<[kZkn?>>h^^^ޏǣ]ey~~~.Zֶ֪֚5{kMu1F)o}F5>1֪/=U30yC۪+ek秄D$^ץMu)펖۵$Oﻵg?iXIRZ=V\P * nJOu}5{,5YZLJV ԢiZc m%kb/!闶[z-Wx< ~~~ʓjSdǐs)^Wzyy]^^^J)l.Hʵ._m'RT_d`|^Uշ-G,RB9RcAT֫hG%2jZ)3}p>h%1n\rO꾬9FRcIׯ_Rl]DO)ỮKQeAj)k X'eM|[te]zJ<K-R5-^__CO.+}߲PhvS^Â8XF^׫@x엗]Vd_RhG$jG^D7H+u$NJ)estky_VCK']^u~g=D@ ^__6 ‚5;YNL7p'c8q _tYN* I#꺅 1.QZwTa{hՈeI8i]wuu, |1@[ '7t7m9F<Unt52=J]޴/`(T%< ^8UFC@[/K!O@z{{WHű^P޺Zk^ d_}cda y;nȦ!>4  4xq#)`ҳ- |Ai;0 \ロkJc&K_CJؖ ďWǻ(ڡ 1]G[ְĭ,-ӓ#X]HУ\I8%'E\;q $T4/ O3'$ޥ:z)" b^D*U즋,*D 2O`!vM ˼COc߿#[5XC|CE젞c 8⼏/= S9kv7'ɑvO0sab6ɝ8W>@^[37=fV710{^ #X[Q" .x< 0eiYȌ\:KKi0R3NgחDi<BdRRL( 7q8Ep PI8֊@H̷`S|@<C#Lk _Z64+zIT ؁6(N)xnKikY$ZzՒb@d-?>>~WЊ;bS@ "*\b.EN/&~9"]ZDa0?x+$w1{vKulִRL 9tߗjwG&!\N|%:xnSˍ!cE)jiiݸ  p~\Gz,v4 whFƫ|GR`mvl n*LFXB5hw[bEAJс 0`N7κU#}0EN g9wͤ O^V"8e*B oq` u} #.SVROh8;rX7D"?nD殚>տJu$_w{{SuF匥`>?t3]vW%6*+q ZRjg@KD(n-ג-v["YӜ\/d /8ԷaHfI???Ire-횞mb&-6@.-_%ot0؜KK%ױ- )C\n["]w?O ;Ua%AjE x'$Rg];Rz2.E4104?_Lq MsA3,JBR ב4$DcsWLkqH F$tMS`eiZn@Vk*>!&v(8N;d:v h;2J(&fD68],wP(IE^'w%hq]V'ǎjc !J]e.&4-Ž@+t3IIئ 9UB$S0(H/^ 6s1 մ2xQZ5S#ӹyD RLByG_3-ǚ_Abswkh;b-2hq7 yD}+/dnŹ ʰjVu-#xZ;ϟ&H!Is b8`YNϱ |ޗ[H1YsyfawB~Y-5QAC!Ezn M\庣v&rG_YX\6F-f0ncs1+ !LQN[5e8l$M>C;ZD`e$˩$;NmGu. sˊ,at0a; yl[O܌}l4˝s7vG\9`ܶ $ fi"5s_51գbDsHA@v&1^ !pd^Ki;jy'p O'6!T]`g05iԕ++uk} LMAK)p";{tyA*k8l~LF<ݽ"b# 4JB\k7w1^* D2O8)HBKH<7+UMȅaj3Q,"ӯuûcr2wQR¯W1뿘afJ~g%Rm=S///ZkDBQu3trB|._Fk$JxU J4& H G5}/-v7\z F /ː_͌Kr&SkUhn}yy!GggxJiab@T7v1Z3F|8\r̶ya0(?nU R7=ȱơDo x3˕D3sZ(䆿G.ŎU3rE%m{X(!`k lGF)VэrG-hgïwg,r ҅CI$EJNX GZϥ!5,D'/Dftf&>KJqXsk",x}I~&4R(Y&dhlε'џ"\83M`!8R4xAZZ,s -N"܎VMfWT* Qnesp(@~v -7%U2ܟjheLάanJ=֪VD' P֦`؇KV9|MS>ݪ-PĻ?~*(k n`][QDy=(@8.</bӋ> C{Ԩݵ2@ <0\@FtQQ8N&'1 Dl -#(9m",bbRF;e)Q]Vefpv + bEW׻„k+ps\'(++Ǩφx(Z3˜^ڒ = ^W_I"i#a!vEX#s ju )4g<PuF^y!9õD=:9On5Ƕ8ז#pD5]]g#Vùjn*Ul1Ȉ݉f. \[ uH!AU5vAXۥvBQmh`ֶ xeZ-IU #%ޝ'f W06J]qi&w̎O3y9C̣@ X%FXtzC K+ÀE Sb;&4 u9 h1 m5rP-o^~1k3CZ=?YfBrqD4gH+1@Fr޺Dr xwbfu5wB.pIDł;pT6~+QōeM:B @// {83xlk2GKlgꞃ"p,-2sfrK鿻U "BG#b1gDˆF ~&oW>??aUIBKF|VE% Äz;J{w \mJXكBlvA %L%H %\N!Au %`ר)Σ_.}{W"fk{Hlh s +N#(g @E#~-UH&>f'TzQIeJƠ1}dbLM|jf]XD8kX/VELsi-p;5Θ[3Ǻ Zyowc3(: E3Kc*KɆPn@^ Uɦ벬1 %/ՃlZV-8y^&Ba4eN!oUuIVRnT'ߌsj4.*-1_&07XMt:m*5l19k9ɕ#٨J; Q*}N#/]r<$8H :>b~bq 6hct:|xLI3 5D3PWx)ae+zO2+@W8 {*tݦЇ/@H.(HgtGt0-N_|rccT˼XXI/v$t,[z}=Aq1A}ߗG,aZZD'i=.zr2p#1b,{vO`)v5JЩ};%H',/z{@3uLcI\ x~Yޮlf)d5*Z p. VU>|ۊ+m4)ER Ukt¤,k CN8kĠ@\~*Q"ۣn<(oA1jF"yj5UPלSEˈ)3f$jAQz}>|zk峉sDŽEMǬ1-%Kڧc 9vLhZ\f%x+L1ol8oH h3`(d _*#^1=UH%q@{>@P? Fnƾ]ʲtAdэHuwDs\`s41d^ύZpEEu#窓#Z"<@לw#Ӄ"F(+ 'ȵY#It˵c7 v2&d>Q&ή.+uخ6]1*X"S6cb A=Jֆ++!oCōu`j(nQ AK .MdQ'˅áiD$TP._LrVR4i҉A官]c 0Lꦣ}+;&}&rýӣ'Ig*/p~x枂.f^hxĨn^$n8lN<>H!ŦZOVݎȭ;/ɄQͯlOP']L6g̉J[ںNN+; (Xp vHcT{qL"mG"G/[gTRLga{lƺ8P;!~yۊZ ǓQwTrͨ893|fOHɸ O#+b6WT"vh U 49wF# "cV^hEU2Zb Ny=Z<3AE.^d9ǔXvDK3 ;U #\HHj5JOrC gatgۑo#*3*$@s<c\u\1+jcߞ@ׁ(1\eE-/\vxD b0='B3@!r_pG|0Ot?Wpv$3)VH{]B"ИH<=N v[?Ye/M%H'`k& @`[GTl-w8Ntz 0WJ>`YslNb\FD8? :`_ܑΨ1ye9<¨8֑=-]pF tR;_zT~d BebFcdV/X֌bMjwޮzx\LlH(B#R;MU@xzw PfUgV5;p=-z5xU3;JOTW*t~ .=KKxbY}>nKv8Qꦃ v|t 1C`uϟ?kЀؑyǺנL=rB+s0\${?|p"\3C#$7\=4!|юf JVp!8S<'P L9GL^.="%'Gق9ɗe{շ $k ̅4vz6u*>p_~'bፚ;ʈP>L[6/o1G5 p>\JqF ww']82Jdy<zI~^~%vI T h/O>a.q W*Om{@qE* -Ǐǜ!3:05jq5x,EqU<[~@t,AF@ͣ((!SqY_{~g <.g38c@E'5mʬd:3LL0r\V\a)T٠UsL2x N[pGsG$]qF6"$8WДH@IVXFµ1s I i,p9Te6S/սjbXᬊ@nM*L,@YY)216@Z%%Bah;<$X*zpaP4"uK^uٵ8UR|)N[Ԝ't-n2Ԧ+ qgɚP|ps~^VkxCqȵ]r1pDVXzLN᫆RhN RŃ{at8w1ͮ,$USԄ_>E=3D5qvR")9o`d&~.LƽJBI Q3UF/׿1 n^ grn<(/dZPd0Z;| @`18odWL°7N`v}tWF錃 6YC% {L 'ΫB[D0颪Qx$[Y_Y!MeA9 i@1+8;rXKh[.+kJXUߞ"^:k9J0C(Fﲣ'܂$mĎ>F UwG󎊰ee8ebZȌ ydoFظ:r~kZb؊: b^tQU8K%|03+Xa;́L[ $<.-Q=CsZ=/~?Q)˅DGxyiiįœNW+q ւPbą#f爳WIxs#1e9<#VKԧ Q́(1ÃjD_|Ytv3XtH.ĦDrUJhh%vo;=GUtQ6$35a%}dq\E%&3Kv fV裍Ш^5Wt7(>k{X3r/NK8E_QTWVWA+Q~ȘʃAq;؂3'8ҦpSКM0wM4pQ0p#V`[NRQmp-"[מTn犐F&M.+2}G=4O&k$ /-ZX%#W(B/e  *8i.Ru%M<C;N1Oi}Q @c?k)ahJD0G;%a5%C˴Gե(ژ;7HaNHVn:]5nvBqGB\HFTbu]\J|du7]%G \\N"@L$MLxX"Yn"d C2w j~8! h3]A%D\aZm`@I3E=0tw,)HYQ)Z@EMԩ,rJ$pEcoigdyxqETx>S'MɊ/;`"#bGڻLy9f ?@pQ0F\[&ɱ餯(C^;':#߇!݉E9qe # f%ne7{;ģ8_ؠ/$yz`st pqhQSP`_sʨ%=Awq$SOP1<4V,Ng'Q#NeS?6P=䲿gUP"@0=so߾Sƥĩ3RX!qt2jA>bQRHԠ QSj~1yEcJZ!cӄ#@pRjLleqtýpX B1K*O8[ܜY]{ӟpW $DHOrN %`MHJ)zVU0 &Tڣ`D SHD*JKIM r xGkE+? >Ll6Wh(`9%Żck"qٍjIwypSIs3g-b.*pSƌFqq<MU5Ri|TVF7ղw #bwC\:ܺb64"a`s Z4XyJҐu`y]Ή@7J08w3M4ƩՑu:4Q4OA28DLv F *X.ԏ4G9W]&W0%lKWɸf}ǩJK{iN1=X<]>ϱKOTUjT'"+G>y=]`t ^&o; 7VEC؅u# ņ2.'<- dwrn:=l0&/q+|ɀP;&1-SUTRSKrD䌉HE>1rsiX5}||8.T A[sv5d1n=ȶӃ |oaklXiNve΂qP`_(`P|k NSu~^v1-dYrG<(9-hRvZw-0؍3"i"~r.hUMt$1*n{rUD+:wRw#! g\ƍw'|bŚcxĊR-J@5$2`Lݲ=oTTO9N3I;նC^R+yGo+FJRIxՂx;vit{;LSF L*n5Z[ [pJ?/7.q>).і0 IDAT-㔢ӝA\O>#aYR.yA+2#;t^nq⃘`fFu ѓ8"c ՈJf>/\k[| QWԾ<] ĺ+y#G!a>JL`]{;NzU' gT EyCpEpMevVN fj.-$K  +J`q=:*i+ݻq AwfW 6@vWq;vJGz"cx:!DFbu ‚$ckKNw~)]=|x[-橴(qQ-iIUGx YZ ;/DU.͗!%e,;H_Sq\G,􌨍 B}퐯5כS;b2*CӔu/>=v@sGQL׽Z_|֭nĹl5QaH#_Vx\.=N7v9J4A3]ͳ2TlAXe1Ah`P4TV;B+'Ac6H!K CA2d@$yaj1u :Cr -&@ xbD ^/| ר_TcCϣj^R?@l}^vEBN4IzūјTM>kBleLKH7ӇQ53np HZQ'_vMʎċeOu3Dbp."A%+Mġ5c{q}zW[~Xw^D t4vE?dO_hANj8KFDQ\Aăw c-tp*cGY'=#QJTחG&A.,OdYwi:8b0p>6yGA5=8 'G@W:؁% @"G$H`s2+ʔ`5Jn8 )쑹\wHůk+c_=vpHzGH K:DnэZ;2/< wyb_n7'/BsҎY#/w{ϓvt-.'7R0;}^dߩE@/Tr 'jU.hbǏe@R'F1K*5YLHܿ'.;f.͸\.})!VLM lgϱcL%lo4W$#2}Pι8}z|J86crw/,\Ӝ%Md܁<}(wbYq=%X$H,ˌDNY/ Q `8Uv;1z2=2Fpzt]3qZb9E{=ntT(?̨&%Ld໹5(,!kbڄ ,8fH+&w5 2v zM_D<3zpWQ1pOO.QY}GvH !H Fkf%Cs+3͸c<&e=Y/qXe=$Z+ROk-&&8NB($Dz5 ON i0ǷgpA]q6AuNp-BKF$#xt*Fl? EV=/2`H˖vy$@۷o ۿ;"n'9.HpOj}ΥQ2M`Zv,;$GjJ'9S9ܔ yۊ%p~?Z +8BL(%X鑠)1@?Wcx~cz&Z"cD|X7ȡ&1e>;Vk-mq0Qcàq;4Ž~ޮml8X1wi &-?Y\XJd%rU ƪ;m"eR`;"㛫k}0)m=3MڤHu0VbLO-tˣl(oZg3$雞L#m:;Y`P^6S&Z0dut7ΰ"Z)xq'wżYZGNHsw 8q(q `n?鴈?;zK%;׿XVB4{la }JM@:&s2<~|̻kWX 8`ҕ;!J1~ 8̊R3eGvL*ŀiGo!N<$PW'|xƍzb%X#,6%e*/cWs+fk6Qӟ3>;lKX̟KV`ʈ#Q0hyYO`ɰN(\r eeaIEk7ǗPrubx>;RGI'IU@=992t2}ȩL3m!' XL?<=Gz,83#ۃȚ)Tw=G7<|s*5dsJ? h)1$@6f1 Y:ÞtyI/dû1NYc 1r ,Tb]1b%NѿM} _֮ƭGlqǐ+ND-[t;@|(.`( !2(ɇkV"cT7!v0zm.>F ;L& rfg[o&WTY|<

& UMG+@X|Bǩ_.`ӌmݑNX +S'P!۹#t/1{`r<6d`nJ heu>H8zyfz/qZ+CPtľ?j=a6]}LSÕ.vᓝ{TT>ej|,ƌ!VW},>ɧ8=Ə1HyHY)ʈ(_fīɆb zHq(&.I ݁ ݌fԯRH>Sj N_.k|{{`3\)  /]GVv}\p/&;+nDE>v;9ä§Q!=aG"*ǚKvBp= _8{O[#(=b-Qr\Vx+#9=&D SJazb]2]_ y 2`l;&Ł}XIcF{q57UW^uLD cEQt9IP{5k '(.AbM1>wbH9,G/qntAS9mMOP`%@>EAҵT|1ƲCq!.'mEn6QPA0't{n7qPbN9,gk;/3Hku1UzRyb8 V ߿/&DX+%weDIQ\D8X>zxT7#8cb%-,/B-++鑪 g+\nFZ4|6!~ˆ -skG 9|)]|{{hW/smOtq7:%@1vav[&& oTx Awp*f)!Im8t /8|ڽ, |GQݞ@)N.(2}XJ;RQ0/(٣|IygW}qF8y`R3SJ` @]J <4{oC0zπ=I[w'UA*p: ܃y$[k#¹ 'N_ά"$M %B M߮ eUf&41\ ˧;ԘsW"cuPu2i{5J{YtGdrwUzmP}I_ș|uxd"3fӶ%%5#.ŏHmb,JJn>pDҎP*u\IW!CI:"'1OT'khAӊ@ i:e>Bn`EF4`s=Z2 MHޔk=c`>h^pB^wc9Cغ/3&Xx@\?_6֛ (?}E#Ь#3ힷbex4r5 =9+r*#b[po 'ʢ'c2dD!mE\w;!'Jz)ڲ&;<,>sϫ'L7M])c7=G"i$#BoF'f?|rH3Γ@Up%K`O"&8\V4]H3^}FDˑ8DVw ^xxw+d|u5hǺ zGm5ʉrdy)'H-j 6g+K= _*:%#J>=q='3EjەU"rҾ0b+6Tp\᱾5GR<8DtL ϊaSͬ>aru]xwوI>I0=j̋ϔ҂Kod'sGRiG1ffнklX͌{`mfxxJµ>D{EwTIH{ Pclb8\E |ދ8SzWv>.jz޶c91Nrb"k€?fj4> 囑7bq-p!>ڻOG}fdaյl CvԐKtO>'"ӷ. jwS W Ӊۣ{=f>;hgn9 xl3(KbmnŔ,~s>~h"61̔b:AFAڠ?gw)bC܏~Z9&>#(-13d[CmAU2i"eʹOMoooky5T&iyjKnM@jO1]F/ mrgt05 Qlأ0\ >cW ҷ9@ݎp:SqF;"U88Q0G4Z($&; P`eDYEx<ռFz8Iq3_]Bԋ} Z444BB.è񚀵DZi5y}ݎ=5!MFY7P#?MKe5 ,],isLsF&>7B#z?oq>M5VrAv utbJ&L8\?LW O=\.ј.G:\ QbҞⰻh3"x7xm֩Y;@ &2 hI°<*1`8<—gc4|=+q \;H֐8̽5rc=3SEu|3_^W@M^oWmX%/$@oB#Ѣrx +v;!}QҢp2NGwmgE1t3E uxD`7bsZxDEB!˃Kammӌu?PzRIS1IKբ )j=Lwq e+*418|G_hA H& ;"Np ?w<*]W`}b}RgP-\wp2\]1-?8Dh5cf㷰Uh'=_ 053_D[u-9<Q?<)]D >t|@!D{wƉnjݗGt-L7P\BmIv9ZJYQ~ ~ Prӣ,KKx;tݍ@(ۇ .1ʺ:#}?ڮ3gX#%z$v)cF+jFQN+gf>lǚxtU/P)|G#Ч*ckĀ^S[IE29ֽEmxR}. ˌc#W\cNA<ދi`(-voK@D, ;)G@6. gʵ `=Y @wR\c~'jUۡ NMe,d63iMj7X`SrjrH A[\ļ(u`K>}bŒѱVG̋oMwu1܆"t,_zDZu{nQTd{3G=PG1IY\N7%*$Ϧ5ț4-D+$RŪb_hm|v&)߫Q`pJ#4}Z IDATQĸPt2(93ԡDjPW{Fdw4@w&~uhՁ~iiyӨȪ~!9E ^HB<_*n!r5ӊb3=.dxa)zph-h ґ#\\E`)Ѿ*^ʹl%A<9Uޭ JNT& 9W1o16f6+'M󙸮aK%5pby]]éQ%՜df+cݐɾc 6(^J^n*^4 @펲DG}8tM?nhxj>N{[3h"Ej;sb 8_*#=#()8\bNI5:Ug:O7Ne8q @׹ RKA ]i.NTMPb M2vS 2ԇw>ZJ"-U>$tТW-wQTm{.+Q:BD>uf8kYqTG^VR @jԢA8V]3 HV}߾}q"$Qp-LKWgDf$ЬHY Jwb1b:\Yc6V@ L$ [%-&?v;0H;ՁL --NW&W6H<Ɏ8kE0'rb,yfx\E 8^|ZYhZ2JhEI@-N3FCWQ32"R< dh~hnWWH׵hbxfP/ޞ.~r6rtوx};wsq8e;i)y&.ȟѿ]#=MbR1?H|bDHᆋL8E.$'QbFQL(]87L }-<ҏVGvd8ϓ2upAfTslMeZ;jAXgAʺ>|vU͠[˄9\ILY]3yQ<+ `t1]\\XY[`jQ?cو|6$ļ "Aۈ `UuO\pK:] ABuiQJWgh7(Ir ؎O wu8ÅAEH$RJo9tTf(Kۓ'*B)/WѐoiǞNQb4= 8eF]Ӥ@/3FȞ'RKX_#T ImTW\=jf%*'WT Q[._ВB#Vɗ+'ܯ,t+N ·q2[3̧ V8?W*L zbV |pN}F閃ct4 gs;VLK.d2.l ᮰q†ױ4[1 wّhfy6$q0Sc Br^_:+svm%>Dщ}$DGᐭHDWJiR|Y/_٦$#ѣ.OHGKQQr`F ܎;\PC^.V|~]C~RmW/4FAN\˯7IjJ*W~J>5Kޕu]P/$SkX/Rӓ;9?!{#PP>t*s/kSZeqU}$g_'֙ġBђMYbFq IELZ"[ZF?3W ;֡M8>$ԅ>#j]W4nH|]JY}r=`qG ?k}1T&SŊ>j)hOd[)wL, LЈ"F ;bˌ!9YNdPERЦ:<\7_Ei%ز hC-"ٻ՛#:Cx :9R#4u=HKme!`TQz%ʘw!ld7'zc{JhwH5F4"#U1}j7ReWl[ J[$8Яa=F@ŃEmff X)3d֚^t+f,6qh66xnxtKvD{"3z"5_R& %Nׯ^ԛ.3 Iz>&p B~)v-c gaC@٢rS8Q댉Q4)!W4^1~F "\24 IJv@fzׁ>ثV@ѴVh$ukv$!h& &FAOr+d-O>Plq@6&/renwdvV<ۢAt5NJuAV`uC7]7:U[4t]g!UEuÒ !j{ᯘo0|IeA#Ja/r^ImڂV17|!OT Nm#3ipb _ҥ+U>=F_ܟT.zɧ\}e9#3dPq0~n֊޴ aYD#]k94xOz xuWTнi"[{=okOaLN=K¨) UxS2W,Eʕz ّٯH}1פEXyG`tM(\ݣ}۽͛[WiIdCT* {&V*̫'pgG,zhЦA#͜\V8u>\ew4;DH2惏JLfHэX|5,\Љ W4/7CPK̨OY+oN<;%s7o߾M(+&QHNyA {=t55ĄCƱT#oիkk?8;*!{LFx`qod;u226rykH<x*ccTzO4-]; *<}MIc@ }ʳZkjKZ\Q3s/k3v"^P(5C Vߛ+?JgQb S'uŤf퉦tinO\X SˌR;޿Œ_~eGIeQ*;hw[.O2@!X&6[G]6E[hB z߾}3'z'u wL 1w.V[úErbA$s%\hpZ5M]ޤrnfɋH3&Ӱh$V̢֭kh rj7ڣ'9MrZ0ozhfOuJ%;OGTT{jPL` qDEۍ|@۷+sȤ-v!cGo;Z'=4>@t߾?8Hh"ԱlPsqt-hal]I_S "SRy믿U{y 8v4z:yÐcT5ҢnUy7ϼQu$1`#uӖnG\UMlAخhݣ^7,O^( cWkW\EMc5_8exs|44Wth$Lzj';7٫Ф#L+81kua[. y6, 5(kP B*wW,tWљs"~f YcNV[Z=wAavF ]b`G\BxpPO1WP{tP>I=:NnFֻ< aj5:qu~_~y:r~O׈j{hfp 'f/LТcvdxlsXHͷ5u|'jIĦ4{:]&4o߾j6=oTTI#R=|G4ik${+y }I)&_g%M-0zfQh8c6{Ĺp$ã: E閻QiFgsm[P`~ ؽ4}ԓΤtϢ.uy(eV"7Y0vp[?F f#VK@sy"@n/O<17݄v4|ã{ 5OteP &3/GpG(`C_Oiѝ%#Hؐ\j fg4C!hDM'Z1WU5~˯ܑпVp7(f|U# X_12 u{Q~dеƔs"ܠz@'l::'zO+i[pt-禬Z^Q ǠO헞`$VVd,M5EFrSXۛf-z0?Զ?h,f*BѢ!>-*EmC}D!BZ`w ʈL^jmD:ƔOtY&z[`TBeV5߹njI㳋|K$: ]BRMG`k;6̨r[=՞1DepY<EXCp֗ zTc]HkV+Ծ{'4g]m\1JP@(+6o/`ҷVh9R;J ͟o%xI>ղ V@pҠQ7 <1Dw!4ØlZ Bj IDATN%[F.`řѯ^\^>ӗ,2'# cUDPV?'Ruwurp9Zd)"}jM ݛY ' PyJ8^FI@@#9i JKQZN|CߊMaXm^&ZF.&ۣ+M®6{9O]8u2لw =bNtnlHEݳg}6~^2SE"#F^J G1FpMw:5nvC|#Sᙛ0~-:;(޴P/*.6n~}iFk__b,h&K::S V6l=FL٠.u޽Cl;܌NʐP}$M|Ŝ#M#o͊D#&ia\-|mdfd? KqOYQ9r0`yswCۂވͼ}hvR_SqܼWOCǾ `Od1XZ օwiJ3T =7jU/' +=BE7\k _(:gLx3Ɔx( u.= qFT6.UQA3xzM}̈1__Mut%K[T >Q.Zh)2A7LcfBy7[|$Xs,pj~Χ?rۆRNU'ţFQZz^^W` ʼi/ZV'FjiC?9ABJ(ӿ]GGӾ51xZT?\ pW~VthHl:q.j O-<En'"22 5DltDv^bھjLx?) ?qt-Dm܋ZBxRF Zu?=5jIS1-JoWu'<+EjD*"爲{L^iP.e% u\Pۃ*G]'}s3TuU+|1I6T " :b y .A6C#1Ӻ>H93>r1k&=5ؔIJ,e?LQ*j)CߺY F8ϳt:222AԈat޸XlH FɾY͋ZωKV,͚+hnnUngS`_> 8M듌k.G 's&j~gv푡%<`N3G9i&)c b2|JAƤAj bMS//f̧QmtDrS?eSpp?٫3hCڴvO_%-fqndx91Hw1@A\m:H??Q!D`.CWyw9SlѠ`ۋ_ ?_fhUj"H1/k E@D 9㧃\{12h^1'+IMGnjrVe , fHjDJ4' pF&ޥ/>4̷8 JP+P#(] z^4Xvz=C zPWkڈb̎7 M]EڵAKj˿1A{-8ԶEixmdxAܑۜY/Rfdu=2XQ,n 3 !lŒ6#f.U}bE 3W.lRr9QNp,e:G 뤄|\q\'D3v`h$w~i^zB}rE'&%^Q?Cwu xIrE9{ρ 46Iku'6EpZS\뽾ipƘe33-i] 8̬HőiHuc>b ǭ߅8%j[4ՀOG~dVt,W|ȸOe-n5ag J63Z{_BQ4oruD:Dm~::Q%O]t-Ƽ Itu3 $ &yBT=Ib^Y|| Mtg,!^7 yV7I*x۝:6Zϧ~u=˴IߪnG8OGx3WG$Sތgc;Ot~:it7g$Hd^T $x-we:Oߠ%[VU~QpAf([=`-}(#񩖪'9l!$ꕍobhA]7w>̀I$RR˙h~\QTh2=2PRb7isuM岋0"^όqnxPfoGB6,7W_]"$:g JG[-_xThއ¥CF V8^q@GO#j ʥ{,O=b+8x믿=tzAWPpt&H)̫oiD3"-Yd2zhFhb?$A''#/*pش+; %& d{R4<X68:9hC1QQcӶr򄆮]eG-PקK ̖̼?RpvI<-~Z=m!/nB_ա@եs]'_VZTD.e j +)Tqv$)hG(Ĕ [Ogȍd1"U/9g'f мIXf4$ZǺJ;& G d4VOHd&Oܽ[b&= U}>I2J =23/ I R'-oFOLS?f&'^hԞ ty'J6|~Wu}hAU+["`k]=|EQ'ãSԢP3!Og:>Bw~XtC|²I>B iQ=R<\'{y3!05>EDBf(7M+v/A=AxNF3$W_M~{*J::[w[:*]\ snx6·t rQoGMX}ҊbP<;x H vn7hYvTXH]i,E4Hh23τh1DeF3ׅת6uⶍl[z0N=Q6љt6ݝF7Ӝ :QYFd2y ڨ׿)L% ?D`WxCX?"}\vɚ Z?[tq!Q5Ps|"lD]wK܈Y,M|#ɱ3VK:bSh7ˡ']F!<( iCZHɯvK5z/f38bW|ϧG-୾݈ze{Di/#^t2K4=py$&XrjG-^6ûWCdy^{w2<`PJu-P|Yunhkq@Jy0.Ai7lvA˥/Ƃ=C(ޙ%ޟDezfM5W]Ӡ-Ov&_x}J *S3- [;?1eGk:'v_<֬缮۷o-/݈;4=!Mȍs[\ԏ EojOFn,=oܭ_yG?2 ^FzX\ZKC>eCxʨS]6o!Z:8+sESS?z iTy A;SdCWt( 9> qg%.1#:R {_~s<()3ۻ#:Y"0ݡWu҄@޻wj^!'e5^ )yj3n򠶡x"hmTsIvB:1:!'m[L+7r Dr  ig6K;eP˨wYڅX><̱݀ᖍEP8E}bvӄ0oj ynZt I9H$ߩw|pFIW %s[UGG,,T ܴ)Wy^Z#NmE+aM6ezsAfUʀOMK$D`Kip AƺC>͆d#3P`\!PɆ9VJ{L5.쏐q<83k^Q>oAoMzMQעy$33VGcb`C/:=f`4=H'W&zwc]N#A9gMf{=!8%UIv}Ric]}DSO&XvxPOujSTGd—#ĀhxHhC$æ~~~ாQ.vk&K3C }6G~GU}z~cbř ~ӡc[5W$oTޟ3dO~ё#AtyDN Ls3ʬ6@1ciPϩajwQV<7&^L%\𴞻GsBojE~A{DK&O2FQuVc y1>V${&J3at_(M;@}P{_nn7ܓe> S/{IǻKh啎TL5WVNqM׻"P<%m}IOL >}+$J o/Z6-md<= }gufHfE[ .(3Flsu .;Z䴌 t`Y5I : iY^IAu : em !-'h=]Lc&ڷ4o!x\xWt6? lѵäN~\7ǂZ*؟XxFˎnej#oz-W]Gh}{pFچޖ/;ur":?Q[9j `m|E{ԉ0õʯ*N|lv';E8eeozT$fhdn+x $C$g'}:#{m?( nTPZ^Ϫq͈9)/+黕ӫuV:uI]/zkS1`DVAyGd =#/~.h|A^ 홆xЍiˤ|1Yp\? @ IDATNy̩_T3QO/yQ#IkA3_v $Ze/+vXA!܎|V(х?'ln*/V-joƻyR0u{c3(<1Ϋ>;x$44,0hp}vɀF5)qTr)ĶghyAίEbъ <-nPب5Xi^U C6e(bF_nTKzfǜQ_ovEՐ' CaP/)?3$A}ѥ/=HU .tUh PHki9orϵz]!ߟc;m77afJjwPX?kqG4!7}/z∪ 6j=i_SUe/chrPWTeZyo߾ ~?.bd^<Թ) ݩ{>$[mB5I&5փ?ծW>O$פ1K;C܉/k%,;i8?MH7HՓ5:PdHR'RxkD{"ZKj5:_x}H2 6ߔ@y@=H(p g[Xk^ٔ~$Z3(G|bix:cJTBlŀQQcmֆzH7dfEOxߌxѬ&I7Z#x3 =!&ǐYTrČJ{gQ%p2=ǟШiz w@kDdB=o[T[qWO.śJ'pAS"9jryNoNdmS9v+'%uI۠KA/r1ϘrRU"#ݴ1%䥫|Qg^!O|3;A/wt^>yö3g3$o,Q>svbŜeu DN+TfnFko/&; $?!zEHՀ}Qջ;f1mhd=C#|E3 ){?|'.c9]j<|i= ?*.g|`槮pb,c:v~AڈPE6CiQ]nƓEEtD&[Py"204PxL?EwiV=z)(hA0&P,J*Skzlrg JLmhfĨJ;"W5b&u2hƨ-t]a,Gge+vNAމ QXd!\."ڲTu+'Ѳo. E->}oWi]5^\Ul]f4QlФ47r1m+(ǀNq'!A6讱`vpQG"cHƟPJ-zI6`5^ZggcV"k bFa(Aw4n39iPtދ xJ[gREy:~^WOH(3T CpAށ0eC $g$<I6LoC҃tQ!)E-: וt;o[7MaI'}Z 8f?Ihݤ&6lzZO/R&i GH:Mr vL>A4Q&w3QbGo# \J9DTfgoSPPֆ(HYz ~̆* kZ/(ަ Y*ԙ{ ybxMP%%4&VyȒl!{GD9|4y9_4^Bӣi7~"\fbmOVS3J݇46%}BSACinBMM ~(8C2'd)=D.ZAOrEcӍ, ҏg>5}6<)ɫW3UtGphBB_Ag(teeB-N{ŢŌFíw;_LL?hR0RNViWLv!?̌c D 6]11dC,}ľ& 2͠ϲZjj}\̺#(7Y u>Pmzq2Wɍ6 pew@VuA_Q)"SiZESKԚhFyDMoxߊ'ȥ# m߿_m_mwdZrkhԚ͟ ]єfOl]`Gdc4G(7; 2D4?OO,l Qh;B~D/Rd |ЀNOWh@NjƓ6_m,z|d@";BpGPjC]YN.$#kx!l&ng#zJzA6P*up Vi1@.r5;Q$Nڬ@H3-#P g5ƦM1՚SIZ7>"hZIrmT;O )0w|ڐ7;wBҢxFWhq"AۃO$8FX0b2;s?;hwj ++_k؃ox\;Eԓ vymjk;k 03jQr7Eu[~W`co$݈g<92oEu%*Y4ږD6zA,Crr/i7jYh| }[B>2d!ȋbzE3QߔrnWǯSX،)*PE/ދbk܄k>]%xBC٢;ۛ>MƛXIJ!DZ65rT|WR|h7A6-MI5P ¸)AUiO처UI(zԛE_:WK3a2E͋$[zUv-““N6PZ&])Ɂ8nB#-DAzEVR4܉\uiR.NaF߫-quXYyzQ2゛A1å _9ð11Vk#^z.-zJv>G3Ȫnztڄ@ByZ΄d#qӝ3<4Q%XHOЁ ϐlD#j:"9Gs{7&9iVhfӐDŽ^=%#Ʋ[o-ævC| `,3#pe|%Ax& 9fEF~눔9}8}0W\c0tz:@[{KTzS/ɄB޻6LXnXTTs,8l4YշgضGQ^Yӊj{流QLCibMה:OPCro@d*=AXb +$@T^FHݔEQMTљLX&4]T'n2O4TCjvd0dm|9]540n!%qb~OG+:+E(&?Ƅ##wQGJG=df63D ɎD.[7 dBÛ#7Tb'h!my9WS,7ͭb Iַ~^??9YxV's;TuЧRңtEaR!j 'tb D-n;hsfOz鯐PQYLAF i ~:ʕlvGoMO˅MKv3zOfb` Ks`L7QJϫQ0>+^IN8+'_ 'Uay5m=;|b$ k !ӎ13wP4EA'z *(vO?t\"!}> l#~2TWcМVإhJA !h+ IDAT_n|VGo֭ cGw?Hcx.uӈү ;ƌNIz#XM#Da-7zZc!*-٩M$(MlІ n߾};)(l$P@+exFubFC'2ѢqQ2)={Z(/jozhQ,KN㣴7(}DTs1b.MO4"W`bu 437;y rMi [ y}5$ |o|gG=bG2K$ՋEF!tZ ey}dlFU훩-^j}H=̋DNҺNigu%E;jL˂ ;&sTn&$MANRޠS'郆ʲHأ4Fu!QI3,ޚ5g%b\-LϛD>䄜fpj'7s.sGw}hqG|ډڃ4{$C{k.?$]#:({YیB61)Ai'] R:Z ٌd|Ibh!9'kԒg4'z Z7%~[jZF;ԪJf ɿآPAo߾ ;}5ţV0i٢wG76O *}C(JQ`/Ԭ\Qҩ8B2롘۔H'@fJ#>^}xQݼQiZ*&!yq%u~ )-D[3%h[T^(k\uVKxr鍖A+Tu-J~ 'Vnt/Ҁ9z<%PPۓ!C,!<S5Ng>ipGWdUy.]f;ϘW&pMyF&Y%_*-<*bǣEZtL:ڣ3_ک kE? &sS ك05CD&ڦʍ^R8OT?ȕu@& #_ѨE,!44=T օE ^S YCw^pR7_ڎOܛ'&`TnX}7ϒvqg}M#=aSC# gyxvBn8+L8 c@E#LuDr_2"-]F#7-N'w ,oWB :~0mG-zKsyYALfDXL{\pUSՆ;ə\!4q/nœV^P+?hY繄geM0+GӜC]lGpT`#SxBGjޫnRo.EC2Q>{=]:!QF!:GQbPajE9 ]H! vr+Wߴu2fv7Z"Ma-=vT%Kc gC752&Deb2s) =C⋑`J"=Ј5h/&A EMvE?GbtlRԏnEI.Ǵ<֎gSA|3>g~X{T3)( Ў\Z=Yfj|RƚĤ"} f?@ jslݰO$޷M2-ы%)Xd3=9k,6By"]$?l2(lp‹Npa5:xTThءL_u2=}Ӣ~NJ7QM~FcjnZ@IPTꌱ PݑiMrNjqG{4 kh+^W;qi5_ѯ~Űiok3QE/3 L!BsYDNJ/t1U ]iȉ#Dy>MeSeXetྵE9ܑIn}w5O* [4nlR؍ Iځ mMߊd&Jߌu]1[r>Bl7yZw3FQ|z$V|S6#4%FMh9@,ZD?I EW!>q*j()&ʈ-eR螽QN](vVqoع4\CiWJË.pc $#7H ug(02))F䲢pq=O- {7DE'yצU؞sZ4u2ЈY|-8ha)g71RX<뢼eDeD'Zsd%bFۨlBUun皘ZUq:bQ'2w>y2;Ј]Wz,dY6> }{VQ _Y7k^5B 13nRYE$Gs(f[TYׂJc]~"|>3]':Њ\wp$.~݆vSe.Mg3б{(0'% Ow4$ΨCRUZ1`bG2 *_6ۭG9N)}?ѩb!)M qwD*=wHj5#5`}= 29δa+ٰD-:`dPl39E ƃF@Ab;(3!MܣQcj[P yESY5RnU C"*P՟<;ij/F/ .Lׯ<}ԺzFG/ ;lVa'i׃,IMB#2]8WMÚrB6'8!iCsA"/dDq ˶Q|[#~T¯oВA|Z)UQ) ؤ'f45k'bv1$$tw?kGw2#+!*B#o"~S%:JY筊jG`-v['쟻*3C(>Gdܻ*/@ @85-IU%IwѬb%#ZOh^ /Ps_gJuvԨs, }Ged[, < ++,GlÍAJPjyqU6͝Y1ϲHjKeaPc).L`斺iFaړE51u!tu0pE{z|;Hb#+ujH;Z8; ;^QFC5}r:|2|5v ˚tsq̺'<ʋ3,]AU,'Vp(086{$NwW-.&f8=!Xonͧs3fs #d~1~Gayu׊bfLm 7˻ jwb q"׋~{6<</a7 *z%PSHᧀv[+]̯5Th?J)%\{ϟNa7Wv0V!^ܐt :UXYaJPݭmf,y/kin6 YR$YwS)iEԸ iT%D W9y5-* gW;2w=9Vg@b!H3YȺ!,VNh> rWdb{Zۅ0DxdΉBs w/+>X/Mra &Hq;!id@csbmn5r`9C}[+a#6˾\፷\s~]„V:03 ?(*MR]h8?tՅKd8Ir 3%P 9+$~.6:5MF #BA~k f]X0:0L7N+h_|Of\==4t8;g +#2.. X tvc&[֗1,IYwO ˈ>zd0%Oa~5_D`Dh潮 %I%[pvM\`P3_tjZr+҃A!|ݙi"*< SqBA`Lp <o nek2]"U"s,Sѷ]^cyFSe{1-£pF `պatHFtNԮP\V7V.g\Ni㱆Ǽ,i B7B 6%sB|"ՂzSEbB悋eBfA,usC8BpqBy{R Շ`VHx۝Fk =`ev 2.BO)OO2\N{~@4!ܟtG=]%XC'&8 MqeHf&[E/lK/h>8rFWyxJr7l.on Vzb5[K(Tx@i<`qelN>|okWlI;#1%w?XSɠMB;´  ;[=`fsIuP f1583jR9> XA8}-Y6 \8~1\!z}E]W?an+DZG2(320^@nڰ-.N+8gqKkv% F^"IZfxU8BNb}- I6W,c Tդ\BXJP9cb!{uSb~$0н 2o"Չ+vYy:W]Q=P;;bawq(F¥]pRn]leԦUV -?pq\O &CumΦFӔ'I^:(jGoY"BV 0`% `L1QŎt'(bz̠E߬(<]z=%.ֿ}w=elO\+:kN .5㹇Jc*؞E-(/EP8G^bJfQVi IDAT*inH+d_⍘IV i \˗/ZlşGP`(O FƳr [3#51Ĺfq}n,8LB7EiU M0wxjn,]OeYp`h1R^L 秸nixγ!)Bxb{.@&j8?~N63aֈ2"~Fϻc2ݰ}m#jOh5(E?ob|Tw*O]ffH4-JWs% g1H,o^̔7h;yxalZsDpA;3CFGn#ߝILV!T,4(5}Ǩ!:J/g0a6ˈ nZ5 疣YR1MsZ̢ݑ kZQW=9Uϔ D\1GdpmẎǏ?ߥNGD J\^xG\CǨWd+իQ'[BENl`zX4?N0oڥHf1}u?s|9<ᶌzϨ6(oG 1m ^Fs}+ O,q\aM7< mQqTMS&-}VDw:p n:s ~M]u|-RpKXh.uX.ob"+:K 6B8W OsUBAO_$h0 恭pxrG5-~s> j Sb$GtDVRK2? jDbڻqƉ;QQ`A;9;-'Sg/G[PM / N ޢT%|p5 mg4!0 Tϐ"ҟϦoAr5 xFCm.DODMq͘rpXt8aVc (5z ^q8KYe=$U4kkΘ:\2&_B0C9-h6uu9a=Oͫu+X1DN-,i9RYAOL]"WzYkQx,QkLf 7@iROECZ4bVrhu[@ő@ rsN+73R~-t T 6{>҄VdXbt[`YFb^bG3D #$оH8{]!,[[[<XO=\J1Ԣc|G_|+&`qb[Kokq`== 3`I:qoGc@W`U[ {׃Qֿ?6ռ#(JĀV 8=8;fYev.\L&cZJ`rBCtI>VrEcn!HiofXB pχgz 1"%P. B0MyaNt0txa2+E_?>>UXkŢBpƷ`1u*j/5~}+8rlU H+c48ř/}a i`4+Co 3c؞MVw|=# ^z_a1 ~ nג&r(+ݦgErnD>Qח;1qXG(x]LJ2As#i^dpeh0e35})Y1uISŜ9CfMew χmy7+c .زZM=;-jl c#T%R AFhN(@h+S/Kj0HKj`aVq;zGyn}6FO n+hevpdזӢtv ԣaxK zqG}{GsZJ{)⒄N ,4Y]d;Q~uv4!L 5(pBz"&g""tq՘eΛ$]g/+,X) =BխpV%;Ps7V\V\ ?6"ˑ;oooZ ]28Iŧd`ZZ\#N4p[%æVoZJѦvuc,ovmlA_/60YTMPrDm%tԭ >ʷ;Rq2[t)nE̛haUnBG8KK~鈂E^"uX[BV۴e-A`)v4xCOӲ\Wt?CY+$3rSڶ[ .s{)~Fe+": U'9 r<^eFo$ TG"VSkNWIn0mN?8jۦwZZOW.kQ bsDKW O1Å9t[fw< ɇsէUlE(1ڢ3tQpܖh /ӤܷAs*_x\ːupΕ(ޒV `Z ;ӍGbe_$9Efsqк<æQM;2]pvAEIJ52oxǤktˢÖnW` ŗN z I' >AO{ rM C%]&-F4未_Ll?,О2IDc5"]Ui&J0 zm;.2N>p~kqp't.]VwsaK)_W3]ݱ-W$.(1Q1[C`HK!xUƏCF?#o?\v,Y-tbJ, aƋ 3ʗtVJ;4ub.Oϋxxii136SJ{ڈpN\p9\?lM'zu$ .*=O,26:bL"깷=1w4:-A-N .-뮥AE.W\2吒:/7-ۇMíG{6\Vl8uV/1xy*i" iT=WsD8)B|p\rnZM\0O!/ҁ>jsUHw5F\V)6Sg8 w$(oi2fTyYL{Ǥ"0hm4?y_'MTU^n&ѹOo%D.*^Z.A98<9>C Eu8D+:Qp~`2ݍl'q],9_rƚ;&UK"u@˺ί_꼢_p Ȏ^+G.x2\"JЅqoL5žx L]aŀ >#rnv Smnv*&,ƊQݲˣ2 Ms/ ہE yί `zu37*J6\v6h q?:O߿?,Wr>G[78u;l' 1 W魰gTs8q]Y *>;u8>3?8D7v>gpW=i1?F/$Niwg2l$<-e9?\\Rݗ7mn1SvǏ395mG]Mžl32wj #vVH@ k -M@8U%srV?+N՘{[U'.&+NA9#2JՕ2ٓ,޶tIYUL Nv g`dոa3yҧpl Cj/He=ө9lˢ<__ UM[*?՘Iƻ7%m\6>'rT/M'eN!iX4gߩ@q;OR-@Ӹ䰈]䰆 f+f ړa- d9-ԍd39z*yWtnW3=lo beۮ &EЁUF(KLD]AP,2Nݽ܅p 3! ߢ#Jp!1nu5 Uc+:0NX3o=bl_! ZnqSCrU3h\tAc%WWe8'}s/j9<"{qk=3ZS`6@@]gP07 am&T  lB[IL.=zk0^$[\ CznD1ђّDDVҭ-+m L#8!!̃ƞ`mzd@y4h DfDcU'@z8CS 3'$C54;6Z"M벘8=׿x۵jD?)1k碢LIqA͑+OJUGAuYͲ〻y!{!9;?3h=q N^m'ɐQNC?&Ћ19Q/V@v#HbN웛-Ye`A*3HO[c|||Q$3VrؒQrއRlK 9g]biZnT3bg8!~ S8{m/SJReUC[I(f f=`Úmr"1a6ǻPX;e Oc pڅB)8 ;Q$o'.toݝR@g!<Iը+\W7WƐ[(:b^լSθb/9fj r/?#pN:猠ghzviUͩ9Zfgk-etx.^AŻcp043dq|||D<=Y{GF5K+&p$ | b7}Mq{8]x~t^"֑!1X%ç̵]M^`D۲b-W09y=5}i6Wh@iJ&BSPî2)E'z^n"N` >.2eïH\4L`W׊IJ3F~H8(z#!1\E[x[,-IuY!|%"lELhj "$zD"bY}X`ei:.0#nwl P\iԞZq֙~5G $*6!p4F9ңb+:x)w`7߿\qwy&;zslF:!W-8-?qM&jZt]FZVy0:DPAWqszEkr^ J@o!)XEVSgAdje(I(Ae-`VЖwHeg β\q}$Y> DUܟRܿxKU+(A`[UPg`.krCGw蟊O>ˣ IDAT7?nAxVU끋XF=.I1cPzYc늖dA}yVefGkC3V;lpl^꒼N5|vQ2X=aV4@\)sbk1y&> dÎN}i#Tۃa[aeyt\ɸCVqgA(8\QydhY x`'?rNM9Hr$vP*yZN j0,1}vatBU`m=<16:"` g/7Ye @i΄hFKfHA6 <$ݾm˵k&ڶքXj[Ib9={M&e6%:9:2 әm[3W4U!qǘ"jEЗm2-؅b&mo X`<|µꮣ%_o߾A df"H13e"VN1cݡnZHA}ü'pz9%x')4Nf뽢U7a܅LnlKkR3LN>SKҮ{*`wq'ЕEi"?cbZy%:{o+i8Wfn V-!ϷHFܰbB̺t{cI+.!xbӝ YhF00XâQ劙8]v߭ o.s43|x}@ۊ|R%;PkU ĖhWk6-eo=DBё`ޑˆ bXK)rX 1Oux$3&%\LA6ʷ'g.z$5QNW )mƺ-o'UùCbÿBv:ET-k_ )'!i7<`Zcߴ<-*JV܃rQ̊?d*Q pZ?Ȫt:&e‚i9wa(/R9g_.#ӃqpC(naFO!-^՜˵ՍYHꗉFp},zPm,EL/%M:V3Wv@7'2;ל<]GTa/xSgl/3j~gds'T6wvNa&i90Bbo09ѳ[޽7X `êh Bm7bЊ!Zpx@8d83bƔzxXؼC]w_I( #j1`tRM)H ncFhGh;]n+!i aeYnz "M$*&b ;ҥa>Շ\#lEs01EaN'Wךc"@fACj#`6-OX6-'?"[\ԠW:腖QjjIUW@\ڶLﶎeakĴKne* 13 ̯3[|cs6 #hQ^kd;JZ1XˤQD~{rÍQtwh]Q]ݨ1F2),˄e~Dp8w9`!A`!z% v'b`У,'wJg FWQo Xȧɗh2Yg! dCJڎBw|˝v'\մkŴd7:\֏#sʵ˥n`yvDiLF^/(7Ζ-W nΰgNQ߂)A>ȶX@֢|ZAɦgol7x4Dža gHchn=7vlP/TETJܤOx0-mY֨:\إԧ?&Q}ȔV8wzg:ͱ2\p޶nx  }d82,K c}8IttEt ~&X6 q۷on/ҝ~@<ӰZKy,g;kn'8kTKu,D$bB0z])EN4n\=5s`o;/}e7M`ۢgJpb(Q^9 [#򆹪/ ܆9-NsH熋s;R\*}T{,&MWit fպi9xNM`5ehZLdj5փP 7Fc0aU\"rYZzd(kS `Ȫ;K)]^Ͱߩr3JC;\!.D^.g,PvoWr)pFӫkT7Bfen<>/O0@aЎ@~ӫ G f${;E ~zY8q;դ [dv'L jCNrئs:Hbmaխ¦zM>g.%hN&?y'kVGKϘLݿ})nSa0BLj4\gTKqLrE !a^Ѐ frytQq<$?‘M9_N`~hxB@G&`n'~V,fkf5wtk=O\(Qz[B̻k3*t~+p a5{™GS!51mjPq߆9LO' D降 û$FFQnoDm`8K7t3 +C(Z-4wZ]nNcMjeVtX1J01>e=^֨uu Ja.;|QBз8=g#:i^KBUUW'Lu:`1a9SC5t D{d‘&ɪK5ydb(w#Wqv@G3҈u5TJ%ipVP:دLuqȉctXP+JOX%EsRICGj"u^<\Zcȉ[.ˣ4 ]'.|0E谙}Ӓ A+|!q i-ʚ+D8m@ @؉ZNAWL3RrIѝvxfe ~p`\}j)Q\S\(5A®8JˣUKZۀ.f!%gLp@`O7Í1wCcr}K^yMYtÖQ\VBX"8xٌ6d~nJGhVxk98J.Pw:4CnJݣ͓mIю|V !+lY| "C^/@wղUq(Ė٣y'ޢEVHD$[ϐg+Β| }@f}!Hf[d|$nؖt`  s,.^{69_9)e;M(ft#+ĸXL,Z)`8~(Čj ѭ&tz)*e~_HfE@?y,k:UbVȈ|Dqw9>(Bׅ&JXo #D/7A 9B&5-!/$=c+2fvw{wY6`Lm1bT@H]#QpPkM˅ B<9Pնlyu3J9SF:~.pZ/_O6,M^B"Ez~Qs#4w;]_VY.ٌrӕB|J^%-Jn0Ҹ=p7wZqPYJɏZw8W_K* ףr%qI}:W nOkP( /0pP# sqH:!G<#-VY/sZS:tB;?n쿜I]1^Oftcdu o[qUan^rSLNWϜO4\دg[0^ ; iZ4@mW<`b71\b1tTYjnkٔt=[C-Óud;N>-0=o&N㰒E 2]((lNOՕeu#5m/wU1g22]$%1) Ft;980P ȀsГ5G"kp%DP/#GY|n=p񷷵>9[KO7\X>ֳ=mq#2NLkM vG?=>:5=# xXmsFGPn 5@@ݢD#<9{*Gm!N.'Sݞ/IC;Eqr !pakE}݅Ϙca1g@R|Gr; 꺉,:0b;f[.E$(:^JG\Fw;嚷#)sl6/rφxg` nsN;]©䷀VK{ŷE[19(&7Y&nNnlרhzt^r_lH񴺙х&f9yaՠ!ӮѺ)A'Șf3^ȕyk:W[ʿРːq3|vB͹:-fNkqr,K4UC@섢:Bv}G߱7IvZNĪ_g|y8)=B~ bt @ө)Jo t{(*jka6" 1v5i5 o`d n7m833U'n U@:P~h/wܖ-ػ곗5` 8f:iS; z1(0]ЕDe9nJFݽZ dY$SzmpDwDTݲ\nG65zO̝bA-҉V Z@D3c26B-/;fcG7n h L@y'`tYdx@uan>VB(DQw1eiMk`?>>[n4Wd y{ňjފT$Yqi4^,wm$+|+V5wۃep+f# !}z\mm2G- )@sr'P+W]2참FbEG? C\ݮb 9` aa YdmNTpZt 'tcP f黖.:&T'[ȪF6,T"ϊK MŸn^rԒ谼ns&~[ u6OW1ǶL=nėpk[>Z⪌Bp(\"Z`sʹnz63J>=vp?{ӳ>Yy6}zӥz2dǠȫ`zGR_AY-J{]ݳBNWHI`]Js3bXҍP's'*z;Ss[NN1W WLw}qcxDB >o>]=MMщ= |"$VE\r1;&8!m+LV| 33j!t8B5@/3ӄvB;GN[w ̑ *P5枦d:zSӕ?|["he#u*ii]Dձ 7\ĉ^]wGa0RPRS7 Qos] ,WO/O>\fM5s}e3Fp+S(^U UoCcPB6fu1ς' N ^Y跣tCQYl_ony37\(WnXːqcrI.:R#(&  ~||lqD)MƑ/牳cRB u[Lp_Aoj_Y-- gFt-Ɠ,f 1pjnDAČ#Řˈb/n=;-#%H֖c\Q*b31+GEQxX}lPD9fPί(U$6El<7Br\q;Un  *3ܦLV6&i ˳!2H 0TZy0zGWԬ%>&R]tUvŊ1#CO'J UtqӍVUGΘ9,^.1R;+ϡ")0.Y܏v֩5 /9Eh%Dܦ+f8UY ׂgSM8byJMܳ 5uXր.PwfMVvIu?cF$pz}uek-^n 04>\kbVUN U#Luu ܽV'5@ZTݘguvZ[-y9\Cߜ:ݴ.%2&8T;$Moz )%YT]Nv];l9ݧ 4Vsje+vO[3—G?YS uWeúb`+HiχbѦ%5f.FLO";,lx~oCixnrӯ&N&ֿLk_u%b:fpW6W ˢ4%j6 1A, yC-l߱͂-1̪kuez{͍x{ dnWn8Zp8YgP"qNqRTO7?!Jӑ=9]nާK9җ; FߺL+:@cpeŽPF3ѣW^1][H9)]=j>X 6MWLdb*0m8g`?9XAs>^s#ଆN}/LX#EBlLش䑻0;/7MlNbE3A 1"vv]$>=@-1쎎_a:Dp#d2TϺrEO4Qӌ 2 hWv>8߿Of՛8]jD]-Kul'q)L1VJFR4 ߿1b{DqDZ;{+QcqTJDU qB^p$D8VV3 3l6W7V 52sZ)E}L0kζғV!"EnvAE.֒y.b\ ^{-qdŽ|h |c%yf&> cDT൚$_}#24ܕn8< i-;,ӴW/ qCXq;`+aW#<8Γ>l媵\=O?i?&!zz H\bj)Ց ]Η-Q6d;dNvcbFIJ)M:-⥎+楛Ï3[ᄷéoSsN!u~;Éa8`cMTd;(A>ׯI͡[FKsg?OnbO|}Wƀ˲JaPTY;vX-N|pF&OL?^5wGy0,7ݣbF;#߾}K$m[4whxTlEgÍ)x>|9ȉlK԰/@`vR]\e v[ZlLQ/c&oooʲCWtW$Wp ե2(v3qq8%` MuLǏ!xQ/ۜE5b mю m: l60L@c6raM3Ȁ]1eyJ/Bn#:iϑ\@`Ys9+ X TB,汧*|ˣ;b[27w+BUۜ9- ;t\"p:ߖH/{˪EX@;L8#[ xxFFh1d*EB̎n:g@,/"\qZM&X\usyTgN{浹 I%tWHm1x5Eŵ]ϙ%YU]HŀGA>ɫ@ ܗtB3=tҊKv\E@i9z˒8D+~i = 842bYqlb0 az|Uޱ_bK3+z:]bnsH!FIT~X-? d 4u 9"1PtZ%f, e}eeD V{F ˋ< >K0j,v'n~ˋڑ*V c X,~%fe]J>=o?穏6fzJ2_1i2Id. 0sGV$íLS[Ճʮ U(8'h$ZB#XWkQ_are;(iKcq t\L I6,6\Vrf% ,qIbخ2DlwpIldZn;\ܼ p<4rUXk,0PP#i6f։kQʏhJO{G c#ܧ[̭OmZja0? Rp(V b ~z#29.uR\ =Di +Ft n"n{]8 ,̓!IWz0N8!Qx2a%Wz76))s[rHbijfQn6#Xw‚M(>PXE KT?svA:Y"̮ܧzU.ҎV_twΜ&6Cf[D*M{H33uX7LΣ=ʏ˅z4$@!!)aSbVzW 61ΉUb,mMHsJPc*47;\ 8_Q:U5i|Xe*kfpي/qNWSz;*\fTꀶqumSq\jDfM˧/FmYNYLN cӺ8mVb.2rnKzy7Ukp`#jX 4|2iu[_k;X/- bCg#.Ӗ[k@?>>G7GXxx&_qBz:ӣ)"2og%Zz5mxƀ]YE~m%Z$y)`^eqNCׯl =E@>\ۢ)t zt5Z˅ao5k[k*v re-cU <4='N յ ,1Ȉ|Њl c:e q gw  (0)phg^>L<.ПIhs_g8t~ܾ UtN|2T׿}vFwMRSMܮn@87gYSsF6F';\HzE}5WhLxR_G@ppqnf,w[oO`[n;joD.UWpb'Te9-?nh~0b}xҫۛ܌lFb<3宥%[2 e:5znnMZ<41]{Jr.r23yb26a\3փxΙqZv$ 3;"K"+-/ÍJhK+jo8m2` Kn+r87},EgNh^Bǥ`͚"6r#5AN5;x/;]X:\[ Sn#e߻+5%)ZrnN0gE #B/~NW{+V-sU(`(Յ}1y9ؓnY4e2LB]X:s\VD8<#>\`IRKUNwiaQjIC 6gM;>[Zlu1ӧOJSʕޣ1˶ \J̀!ХiC` 9LPB$̹‰nd#4FZf_fn^6Bqkny5Ε,0 p έd`л Tڧr8^@>mj(9H2c>¢ړȋmNꎖ R}$dr+-h7O].%Pй7\9;]Pg!h<߅uNdEmp@- ^!4jw2ݜ3ȕ/e|bæUٸilEDmG\VAh)F]ifL[OV]߉{X擢M9]ftӈb_`Ǒ'O V'Ә[ϘR i+X %V ҧV!E·ꭐL' 5cK.szkM$bK\l`1= Radx "Ôj̖D[vZ fXQDD2 0-ibv(H p;K'TKՒtdeDsxx/v%i#! O|)n>??cF4gUMda޼y8gݮQ0Ա-Wu~]sNDc\UkOx(xgs-7/翼{T'l5zڏ`w:t:F1JNDB|`Cb!-7󮸀Ӫe \,J qa2n_}U1[]Adg(Gn>TylA{FͯpV%C!Tn.ctw^vdZcn^t "fDߢhaU"N@q'[W5&CM ~-T#p]j$Xe= 6_u,fH͟j^wIeI)viegQ0k9X'V|#N'?Ǐ#$x}sJcL.,-t4gIhnG4B[̐`itHьa㰞&hf5[A~vʺ,Q3Lh{HK_ieqL;BԄEÚmJiwnm; d9928~p /-J>Ó 4ݤ٨O!)A;8=*y ;򬞞\. tOVGP렿'&Gb} uˬRҞ'+IZ,Vk;JBͥ-uصw t~蜽Ln kZ~;_!&(j%<*Pm`=N6Z_s֌yr=MFby#$(Vr+-3W-4jw 5 |ŸiE <ϷofF4mVpo.@Vȟm7%wQ ƶZNB=LŀP&ۣ‹)+$ɴ3ȤGtܞc43sVx @lւS OȊG\G#꟏2.x)l`{zF1A]Bӊ;fVG7r/KFF^QU~sA;uc5kR^=܆ h NЗY͵m@τo֟2 w &M_[K;kASf\wq2vom6ۜcE֗y+J̎'8Ln܆}W=a8eeтW\%k-a ,aGu`܏(.$~*̕ b(LNֵjOn"h'@sbH/]ܨGɀ3[h0MS%\Z Ku.f'h 8J|D QS 9b 6- '10Spn?F8ӞõT+Ktu#SF20o*3͋45BqÌ |*C%x$+<ߠ +XLm Hu]%)F YH6BtC..`jTX `\Nt SuCz rlOЈn>o QIEm jppiO͝0kZ }?*i&d_ ";CCS*C+Ѝn+)+h '~^[*1V4ޝED8b= .7O;,BݍO)}r/CC#)V[)-pxvfX{KQ 2:HqI3fż08J2GEuQ;fj+͂5k.v49pmi'>x+8eVRP1|&Tb): ]o7; hJ7oqdqgz)@B!"Í%(aA H}xv{8`2 /\b:Ovش> of2j 5+ Q+p2%(ΜMwH*Hd|Px*ĽY$+*ט·cP?,{sȯ_TF<=-8}sOO]1f?Y?[Ag*4x~$4pKSy(R>y$i'wh1į8#ZQ ļB]B^+bU28ͳ&hJBˆiTD6 vӣcȫgDk`h_},!usmzZ,gyneO8m9(#00|@,0_2 l}7<w|x7A.^>_& 8f4/d|2Fwr=>Ov1؎$iNlBW½\`vuxza"E\#/7A Q3A,.6t[C La$ 8'%5+`u7;/?0Z&OmLDJ g4ŀWOy-g89 CA)[p絢b !FpZ+P4jCcwTՐ-Ƅg/j8 \>g [롔]IJrd1UC< %(s*p9t#%ݵ0Ek8Q~8Eu7O[4k 7W3<ϻEC֠EZ7 gqw8Z=YBK8<[NɇեkbJ95{,8Y~"*f_Aw7RXQׯ3]FA\\M-b܎ L~>I\ugstnG8{(X1hSuĞnF*nn0 ۔5đmD\M³.<]~:-/䳌6E?aeF$>O4'׉:MOwTC%zp8-0|b!tX,ˍV 4XNKuyU.z6Fů܍Q 6\_|5+  C/"]YoKi1bn"KgiNSFWHQ$9iߦ(p1mV @0ZRK̇\ͦ5nƳgaWϝfT"LdE834c]{pZ9v! Ꞟ]pY܃l~ıSptNen&;fud+nSe!L•B.gDi 1 &jn0 +1~mN8!&j[}iS3djHeh50w╟"r3&9q0!6GWW_AYajxz /V]œnO'([ؘ O{oxMׯP8݇uT lKCvR#O εٮ7wߝ2X A4}W??>WLW@fPLJ)o!)1\i#bK3(꘧ْ%fVX6LRGB&~7)X(*eb$_WOSL04 ˠxs.Gd{U_F1.mܻGoAÔ~i\:e+UPdx+hUd!:xbx4PMD< -ay{q!"8;e.3n!Q7ŅE KM^1uYXb"TLkU]ж\ IDAT yEJN;d }>~Y<U4uFYC?L8$ qa[Я@tƣHю$3M0YwuXm dlY3y{P͞< cB+yy).E'1YDDEEW/hGp]&~aRh# ݴiQ^5%*8>n|$L+GUT_Z̦佦h~Ex1#G{40c0Dq XgttjX{txDG i\[Z%gdX3NZ],zGDZmܮ|%jejؼ㔀ΦтgÅn{^t3@0QW;ak&KH)W$ l&(]*X8"i.Qy̛B.l) aF/VsLWԮq*#FNĖb`VYy9] iaK1.r(/E$؈ih)Ʀ]VJǮP܂vxҢ ԧjHpĺ#k j(&#F~nV<<'], j@\'/ Pߜr?LSy ۘIr—.nBRwsT;-،ruPGdXt`VY#ju19==-;9ogͫq.6 T3qPcU 6AkfTc{[>rz|=v5)x_߉1Ŝ,IT#W-~=YHrT ӝ)(V #c= x+Ő6 ÚZ( mԇvzazD a-b 9mL)'j&ϼC] #v^FDhnQۣ DEnb6ܶ GCAqvvxvH^OӆG4Y]U&cr/(s;$P32vq ^ޙ9I-I&$8D6ML.oo*!+ CZp@5!ۃ6 yqd+d]nV;ܓ[:=Z +J~ne䪲ؽBvHQ]zm j*/D<ݗAJgRfǯ4ܭMѰ laj̵͜jbZ.6#ZR$;r[Qp#e1:b3fݳe[UX8uYpF+>bǀej註>~#rU-کu 89gtkF OpYeS_VYF=kLvͻi1 ]Iܙh͎>dl]gl#9=t eyYB(2b.9⊡xnX[cD^Cuo<kk3}F 4D[t[ye6Gfv$2a&77L_&zI)8`0b@* `yԭS+$l嗧EhF95d:7rs;0)1qq(£n8mG6\B@;{05a(2iT bX8oB  i宇e{--Nu>6(Ɗx1'{_~B.b q7kc\2n6RsemZYl'gXG+ `Zq77+iΞִa1p9TQ6J->g GVԴtQH-adNgr0#`-ңEF2\#X=Ns5eAZ sdE0V>6 ݖ:<@ mlt IG}wv@P8ֺA$bn'ԓ h-5QК`L3DdO3^ iۘ>NI2erdJ~tU^;iR;ALs]5if&æf0;5* ЗGHp;ah:a 5%ryf eԞ+j.%/.=??*1ј3CO kbU܍'‹Za83ngءzHw~ >jz[ya%po8%a4]nYYߔ%Hj ]0?k9LYё5:CaE1ܕɔEZͭ˝X@\b`1};HREp1RpD̴ZV0.{\.kan5kGlT ]nFbɍ+JW4嗐a!pw:N{vGzZ4+i؈_3D{pa~L3z\3<=H0o]=T;bŠh0>Ex+9Ij2C7 ]#2N՘U=s\ AsN|X=`6#$xqjXhacݯ]f}8`Dĸ\<\a{M&@B=v#p%; \9Xֈ^J.}pZ3#fR2]VvC'iI! DW0e-z90g!dV]uqU!.;8qF0coodd!D3(i-Ϩg|v+]uQc EO;PyZFLLPh`11l )$?CBYБ;-KID0M "> Sަmb\ӄsyZ N7p/ySID%=?aMٞ08Z@Z=`3Ml\Ғ"easXR {Jp_j4>zS'i?YʐE*&kP]YY VJh$(OR`o|0ZI6l`/$3;e.3yLg\ddHG 1%Ȱc%[GPS`nM_H]4E`@+T# soU^Dʌ_ԙw GHpdeoĎl޽ N>VC]53P"nEs+g`,Po!֖~&Cm#F~lj+GQ>_뱣IfSګW޼y~ y9q"'vsbO1ϪzK0'tHLC!CIK U `%)M:t]-0c02,#i5I,8;r1ez f'.i 'AOf˳0D8,ν M]Qۊ N^2Lѿm=m| +jgf( /ZZP00d!ENᡍ-c9ZՄ;8l~/n)\Qf9 ŽRݜ-7o7*RnG007@=dzN.-yIe]#Z7b[[2߂>R'Dlz 'd|>cLxe|5V㊁ͤ|{a^K>Rx^C*eJ(kLR9}~~nFMM>Y3dhW9'Tgn)rq?U smM-Oz&:5Na>LKH[$s'w7GS=&KO֞Hi2;TvQAm>ZRvmcq@n&Oi偡8;0мu;5}=y($:TuͲl ](B3woŰu Fg"0^H\$stF, WԘ\O vL2lNIX|n~F ǹ\m=Y>63H2s(Gxk~5'FhAgz@9zplsa^Xܚ.y6H_ f-dtXCvDLXduDVGv4L^ = v ]wŌM%>{wgIL1Y^F J`GI|0L5\|S݆.֝'g&)ԆNi+؍^iw3G)XP#4#9j,w 68!^]{/XPfIaXO]_'--ߦETdmlOc40 #i0% 3;d, ۗfEÕK/62N IK ߼ _bh=`!Ԉ.2nA{fm\BN2+\"GpWy6\S5OUJa~fTnn9-n0s7b?t^k;[zrG7鰌U3z =wZ003PX<46C}z6Q1 NN?b9 kI;KHfv^ztW7 %\A\_&Fy0%%D}ףIy7))A'?ӓ1Z aN?A7FլfT_ NA;ԶF_q/ę`2ILΡ ?,Z6Y'*9߅_1^s2H0ᰖHF?󲔙fUS;;h۴}%}\ӣv[4kCX4rOd>_yJ)FrO_vP<08*dB B5~c2&i#-Q,&Lg=# QjbowvW=dHwnE1LZweb+PЙNԻe.vkr+:ȱ䣧Uݗ Bd28ajkt((=ƕ^\{HYBfn{X sRPV @%Jf.\r~eL/uYDfq)p 0iQgq -pѬJSU5>?S͠;\neCX]nT&.}X!+U7YhLasu]*|RnVLJ@MAqc"}kLq<EwY|X-\R*a eyއ5i Ĺ-݅#U:<j}7_p(G:B`d({]sŅ"~iqp)[m׭$uOʕ^VcZ+X\djЌ !˃C*we0vѥ\Bi[~toSLh-zoۡyWl̐ le}.0q41=L|lF# ~>^ 8'W}S R<9 :}'E@b~Z2hnn^*1_ʃ\>6]3AŗHK%y*A'`v|@9".WTzHr;|zp(cODg7 IDAT8mÅ6_J^CXӱ"ctWAoơLK5\^$C 8rB1($R݌ t"=srl?j"r|nBjBǡh_  rv=*- F $߾޽# l1:lL==hF~ 13% o=af"=ꨟ#џ#ѹyrt5Id&GAE8&%%(L#GǮqi.)rumFat9%4n >Nk!\ &p[H.n3됁=jT1o5##AetɈ~ۣ3sgiW?>XGB EDfLU"!Pϼ9DpZ 8aL.= F=r8Lq!Ā+vtRj/`R{Wo!& "|UZk_~e\_2˳"8uJ{%Kql+s`N6%1n8i^[ޔk>̅18֚8f8dl);}F5?yl vqep=FzB*ȇ F;>t(F_=;W_}#@X e1 -iŠ\.Nq~2$N3G 2ǣh-zt"8Tu-%Ӕb.趄INn]? q95\ɼ9a=xdz;Y:ty\t*K%g|8q(V."t\2΋4#'#6Ǫ%{{ }g3oΧMރGGW}!V6&B&ьxw5[r,Kmk-岂 ˤ3 Wf׫.i?(ɷZamR#lGD p?$>59(x`q!=M<ȡo1lדu;|+Ҿ(TXvSδ5pGz}Yydo߾_g1zk$y 8cV"oNp@ m>aXe.|-Oap`HKԌǖGׇGE[?oьDF1k!֖x ww(ޗCc$ڋP)EI>A 7?ᱢ`_15jF\M1w =Je!ÒVÍּ&e2c+1zwEnTdnp, 0@1`|ׇS^"=t-"['ԳZOwE |+=1w 0~Aފsׯ_1e2Mϳ 7|C*pb|icqq3yD.0wx77KG :+?Ō;&; +2\bz0ŘIIz`Yf} ~PArklXh:oi3R[ -Pќb`8o$%0AԿ{]QLc,qDvtw߱#8 <Ɋ)?cD/0ͳôeepW28f ߉/QO \bivsW(xM5+,-z 2Wa<^COyfh:ΨQhQ~Vl ߶+!Ȫrq ܑi*"{F;tvff6pHJa9]1hƘbQ{ \aus/;,/lZ<3B2*L,T)rZHHQ5fpc9eTZ" 0Ugww߭SK@Ηvd;3:䧱nl3!'/W#urf$`)7 Ϊ]RE^VqH幨6wYq./itL~ߞtLCmP(Ayq-JqVe[Ӫfܐڢݥ_'X- ӌE}26Hp$/Ɛ_8:C/27v.!bqKEv~{5nOeyey8f<'g9I"Dj: a7X# կ~uuj̖cY5=]mz~~F硯&lʦ_1L E+#h5kD/\s3†Tg24_]]@"ʧUd8uyJnI &JQ鎰`ꌭ*=Fkgs{Va(N8_lBtPo؛L yZ! v=G][υYѴ]-߬)οADv1%S&i Bx4Oh`FFz)C3k$ Ai z%n_Yn']!•LGH޻U,}'[j;KSۢͥ?yGBVpGz^}VW.րK| ֈVco*Q 㥆eKd d5+8wȾU\p䚫'+0s.eOł2y2GPVRVsk@,qijWglS_P w!&Td,, gGq\Tk/d1pxxeG} *Iq[ͤu8/1we9V˲AkmYQؒ1\Y Lc5ӣD-Zl+NqAwP8iÕ|p>?ݓje@*0ea_G!`7ԋLwYs!D፸oK cD(an[Wýܨt8bJ DTQQsfUbXlyy &P#Hwik$4;;+l)6ܵ\P(.GI3JGo9Gø̱b ID0(!̋ФPvD=j753H(V9Qꏅ:Mf-s3o3lܠ] D]CljHe[d9bӓ-蓑qxj"ModДC|`(.10i.# ,65hAbZ a,3_1 8dכkbk0VQ K-{GfUl1C aZ-t<8N fsKy,,n[& #c@f:^acMP+2&.1f*7nVԹpEjA[F1\T ۺ':z˄;Ft_KɈ\C8$>@0;/"1z\K? "[yl{L٩urQ/"(Nv` %n`" .{DJz w %>DBEfjTm85gCr眿/<5Y{C>r`oYΤU nVb=k;6c=*)$<=ٝ?5zV+Yqb=/ybklo ZWG;O -s-G9!":'Erf`n7#g̕@?/Ru[=cE y9:u~y|fOLZ"sؚ ?y"T7k^B}wYV.A 8Y ,w]x1 uD$9@1w747opWb tίv{O뗖ѣ=tY9QkUbp_}~ Ņl&!UfW1Ȫ_bJD$Ng(YEk{!~?O`Z!E;X/Qh5Gg>Z"UN5zı/5(Mz\?)a J ǖtYFt5<[48kB2} j`%25>/z X|\xO#XI;[s?dVLe&,ʛ*d^6tKnCq tsɆrٍC< E_\qD1-2;;O;*28$Ehݗ n9\v_6ZuD%˜G:ZA!ʡ1 :I^@dq3IfKt4$lH?:0\j1BGwpM$&(GQB%c|iqcj:I4ЋXULkDrmm7OwXJȫqj0EhwD"J;[X{d18ʵsWUuo [Rhַ~PV<3FoJdui$sr!wMn5I-]eE0ℓD|>^ Ӝfc.舜1`Q[}Jj%M#/=OsAg(cP6Rq$^ٚsqT,>mG$MQdCE?ӌf9ig)۸7}ׯ?J$;һ/%B,~ 8ȀK/ ܎(qiR(x'11V.,,zkk^Ͷ]֜]Zk\죭z)Wi.\m%b}Zc8ޑǶrrgx;#9 ׼MV~_YhånX*Ų=j%6ivmPK{}9n%W1oc^´ePe3ZtZ+.yF-4}rbG4VÐU4Vay}L\ys 9)ub6̃Ma^4*,܄]j ,fcSwq٤sDb꺚**S.v)M)h.,uyC- i] .7o[4#Ub SW+᜺]GQ]kC>R3CTfFtFTIbIz(ЧyPIi6}g]j#%16]Yؖ9+l/EˋPxhJz6W.*Bt(wu'QIm;tctu{to^kQ{sV{+Y}]jkk^K-Zk-zZSE hUY'3H23@8,#a1_6eܚ2r-Q@Ľ?6aR߭iW5yn2Zwϛpʹ7QP2JlH񴑻uAl+Q̝^v2Q,Td8r ǸѝN B y p{y5$i0nx^r p2pq48 z2(.Q — #S튾-*wn@L2໵tn~QP _!&ŨtaZ}Ul )څ_: Lᩆ%K:lJ h3bT6g-X!=s.oXڣ3;o^ܮg pq*DGLҿj5qRJVFݫf׼neyuk5ꨭk^?a$lS5'bwnt^V> w?™Ge%^]Ӹk+R>!stB,ʣa/Kjd0Y;ԋs#wiC#0X@ѥk:q,h9Woc械a{J`9k-A4n1]f`6`(2 IDAT! ,ZOx3az~aRF #Xmf1mι[E‘s@ԥ-8ׯ_kˏl[ |Z .ӀugA>T:4F]Ƽة>K1M8 kCó*6R䡍e=; ~}3|7Ϻ]n h>cn? erAݼ~{D-Fsy+`v0lfQ\Bu.$1￟!W, @KTgvSKTZ4@c' ph!&l#{sNx?/aj(.=|Qe}]k͹ֹ[z}QʵR˞[W֟ ȻQH >u͸H(_y&ܴ6rך2۶ XFj~$ø<-; O-{ ~9WG58XGLт4q^V%y(m1}3cݛ0)r,,ga|߯^ͫv{mR~pjb1OvV4B@0%(a.K%42φ'9)!9 ^IRan(%o>c~< X,j`}}lr: NarɶpjS{zf4SdQEnnpMR ~w]n.7}{bI3`lb7M֬`/m_'l^|?.dAZ۷oKIٻW=_9b>ycPhn *,}.t-S7|ˏOm_#gZ5ѻ(TL^ bXcӲYQz˼lp_ Q=Iz#fg(*ӟ4s ;zp:gO.mSR#YTb fB'X=5Yj뇽zyW߾r(}kͧzsϽJmcX{W⋕iFGDW'b=58,ƚVBŁ5Ahx$B<Ξկ9'|zl>D4o~2n\:y}UW h5 1tJO) F>p4HN2MĹ޵ɮ;3}T h4эfIjD=xFC*1'$J;<0aEHƲHDiG?lޓv}Vo@ֽ܏^ X ݘ&1)Ӊzª!utUJдhn'EB8|M~ZV[H@hh54s5<q0ܹ% ln(b]\\D͇.}NXn!ZIQ;$h#dM*ܽ8 I-11g{<<* `-2naJ2EkG{)8E~,@, vkbs?#RUxSDV{o;'YQA_Y wUG h ' "諑pX3$ X: e/-4tT D AY;nApC#C>h`>?mk :WW7=J&*Et]5^ek]>jM<w|Qze[;>|k6f=%՞s4\,9B> #|4W{8=)euY!|4 \C>İ !vjjIx50CD x T++ڕi8k]Q1pq.CsE"E_iE /~ˇL_ }tJr/[%&d^޺u}ESJG=ߣ|> ёoȂVòki 1t[ HZt*t3\gE{6hZ,u* E7z8.P&m̚m=/zlM۳?g{[_[lbg؝-?(ݛ,)KtݻێN\ˤOJ2Yy"VEIi @6uğ0YQCC|QVzzt}F3Va#hLxIH $x̶DXr-,fp-4;zYسB} dz*P 7=2n8)T :rc@vM:??р04f*%q'SE1bB 4znik(Yg.r汚 Ȃ^L![֯0"..._{5bI xsE1<9| e]ʷ~!& % Rf:񸎄? m,daZ6ۈ dSJ1/ O4$^%ܨU#g;e7\5lz5&j<9"y ͌L'h 1c0TC Ӏf ;iں]o ?w4%$хğ >ڷ:3^5u+11,^[Ǿ=9>M7/n{wg3ٙ-vg?xY&)[ޜ`yTe^ӔbIMt,4Զ6"jv0S;m~XWcnj5N |9&+z994JdfL1NЊ/aN_.w~讟U2/( ָ}}Hy]-.AM\E}!LY|~ ^dD'א$Xkga+P.t%o5* 7 $$D[]Fi|m}l\APrÝbKӆ hVhUT3IѬZfpU 2Px&y:[ZKжst0`?R_yR1h6(1up Ps}e!w ;Fp5#O{$h#&T$Y4RVafBNw9H0kB ;*t 6:{(4 i~Xa؁6=*5'TaU8::0-H(K(6K`f&J!]@[ ODM7)2{9MFB[A Hh~&i"U.#=pxz,u+_,tgw؛_ߙ!ȇ?x_^HYYEST$'ˋ-{͞&Oȳ׹L4M5w*k,qB̺&3R4V5((hh( p(xL1i+ @  sAJ zdž~ ~L#CPۺ:O tŽ*<)<̚X/T: =EN": i ݑcJc>;\%66SoGiF p^;ZxGE!,5_ ÎT&Dk1WpOK tdh345D@9b666hez*f3"#񦁝Py?3tP것= {4+DSYvȂ<Y^/+O<0co?0<}TL_ԁNZKV[Q3$9, %c W јk2Р/()W@W3޹?փvryvwov7;lgo؛O/?U010O9P4޵oxzyzޖ2hJV,; ěS-S9WzK@fTAVѩKϠ>b!DŽy4V8;c%H23#&A$gP;tJD2mМ97S[Ř8A#*<_ 3"xTny"t0Ea7j0QF|x'Zq=<@48hds_ðL.0,P \ٜW_}uq2LG>CEJVfȻ{"O/$.}GLVA#N u 8"w޼'AKĐpcRbtE/'&œ0A^p&7f) M}p+ 9 , K$u`i`)p%h0u Vi[[[Ϟ=)X(jg FNM̤K.dH?ъ D_OF<uq;Wwnoxiw7o!U<2D `WW㋃q8Ր{&^]'@D9ifmBwFZeqT(P[O\`B+F2dw7oz` T ݑZEb荍 7 X_>\*}]=?whZXR\N_1B aT ; O u__ )ZW=T0Yi51WUwUܔ疖.ý@ f@3_ EdkkU޻{ee]v%J'/ $}FA8G[fXOw',PQ  ,'SaFRVQqs{7{Iir8?BaH?6D{1)dн=!#>&f\}BUly//}Q€14 Y.k?`/.tTOb?G~xx(d}Tx%x"nLAWB> ~G :=0h4s8.Bp/۠V^( T¨j՛O 7vbw~45*HZ',)kޜ۵G֣.1e- 4;J<$BzY_If 2RI0TsRURsxG@zggₜ's w18SvWу]D3 HB @5PDF*#G:u~< 5hd z-lm@k$lo1BORC;7/xeC4#NPLh'!)O=+ݫ9:z&nM|6c(pzt.F>\`H_<墩x@5y-|񑞎my r AƎi[tHUPӕJG HW7}= ,a iF s8Psg9R 7'JB5B/M`ʏzh7=GW;SЯψSG_hUu =B 94XH!-͚H㽗OY=GObZ7"/XSǰ & ^>ynkփo<7pK 3iK+] &szpv U̒"W_}'0 R' X򀋾]`#5$p2~OAbDgsЈ4/Te "?92%|ZhJa4Kj+?& 6C+AX_!#c)tt$x+z}+:4eMYrT4.O=9+'}iPz]$IVB5rUpeLBpo|O\4,1&3_+KR~wmD#13'@JxV3;==͡MdE ;d@C@_%gE[ACA.;"ɂ—+c|/lD\ >f/'P]ys r j 1Pe&SÈQᎌKP#Pԁ s+;jt x*f %-^|櫠ޢBdwtn/~>wLtW:6/ IDAT,7uǦ&Jrh ,6P GCE±0TL4+Ӡ t 0v&l$_J =:$9@e99Y!1\h1иď?{XnUKR &no Jl~+h"7Bi"H!0 O1\1TQɡo͂_Uh3H]q_RD |[ `;N$,:#smx#"H{ZP"M5`b@@BWU .'x{U@f$AA-}M=߿Ĥk(XP䭡-ܛ@>tSI.$YBPc*`F5|T<׷ a;q4+ m*Rg墑 bJ@ЈnIC:>@ÿjw}㧴BMI7ojY8FrZ1_+HV>]U +4`/_ Tj j?BϞ=` ,?PrF{͸ЄuiyB{@XH(@^didT۲TWUmh@Oڗ~iuWе?[Ͷor K3̓$4Yƨˣ'd5TTHʚEs)PO c^ ȥޔf_t9x4pEigiFs&$Mbf#0%.ȯ7` Z+K^zCܦ̠ݩAhF/șۤPDO `jژko!E0֫5 Z&ոS K5s0 -%zG£_WF2aD=| L/Zf*89PtGz f&A_YU;wZCxb_4LŬ?&)Yׁ0%K!hl& TjPM'G]ng~e@cK)j8i;ҷ?]:̟/t~xXclƹ)Ԥ Zs6c)Ǹ)"o<'+:y|x/`rMzAEx~^>.O&Y5M w#""YK˪8cJ\.{铧}}{_!׮ݾ{m7~*:l{˔dzF&={(fbUThb S[htPl|v9l'@)piyyR2?l"`nLk3R뼪[.B娡5Rf Bt'|a )%  &&&RqAw@ڡiiQfld6[]/J27s0bN)PDBbjhOKz.$jw0&`:??,p8,C(6a*hz4L7JL GI>/}@OΙOfy]зa:T[d0tp{SF2 ]h @fFG2:X54 I fa]"\ 3]ϯ~@G,KDZ>AF oӣIn40` qR]x]n|g7XPS "&m)Hx79԰$LKDbP5IKhAAYf |RL}{7뽙-ǥunvq䡝+7/O|/ݏtwϾ_Dz^.WfWݺL޾_??;yt59Qr)VdzeÃ% Ⱥ #)Y F2fxxS LaE–#z2ESLJnp6`~@ zu Uy4c4 Df,=&q%UADiR0a)2AgLhA8zJG>$deP& d%T+TFG LAu7H;b aBC"dQ)3jo9LdI30` B( 2qWѓE R30@G@ ]\bGvC>[z-~S}]rٰym狜烼y'Z8\i0vzI2iK1h^amX|@qsuP 7zgv:Wp3e s %7)p + W EcZe) 3+< n=2(=z0Tu 泣U9Yv8@i */\&LA2]u/ hnNZÌR>\ Qrݻ'8p[ݐ5P1H{_rG3jJ(5tr@shWXAc@ߋ1 Us/#G(ZoV:9YDX⏓A0& oޒЪЁ؋;2^ hCh㢋 ϚA|vL\8dA?W5&0 OgݲՍ2O=LYZ_| }O6?fmR Ec+/1RSOpo I@esu 0!Ax瓶^Ā#k;;;6J^%qAyxdxq=( ;??'o St(94e@BL dI7|-#dULN"Cn+O,ǹBC.V&8֐wi{LLlt %'f¾ 1rgAVNBZ̽ZvBr+=G7Rq >0.r "+(jha+TafyX0f_AeX9o,'w ,ȽUŎL>WOv(Bajo7o;ߝ/槇ôlݘū3{{?-nmN7O8?Y~ck("kY{[ڵC΢YrҔ5\vqt8k+KYGa4|U\X"-C |% 7ì4 i%@-@MdЀ:oXAχ?ggP٘y"H8.o*z _7)$ \}w2J8VitCxRVp3}5"Ҿۀ}+ M!cnFBPt^aPHE˾_R`b2MƠ4;v@r a1dXBY ?P߿Om r Ler7/)<11)2(؝<`cn\ z|)];bq_l;hN0\Yw5 S_Q>{ (T}C8.1oTÐRF :@+L<>_UT&.]zC^JnmYV{mgv|~j_޽ؙ-v盃?>%+o|/~O_k|n߻VÜkb !Dtc44L&O$$6o 0 73"/osC'wCCs 嫨$٤Y Eh.houؔ0}>Pk% R(40 K_o į d'2 @m"l>+|xZ%LFyBjz=H)N1Hi`n]rݩx_l@:6ߦܐB1*bDӅ_0 ="gLOЪTa~S鮠rA͐ u*^?Q9G0% bk%an?QZ$1ȗgO8Bꤡ?s:5"~U!4:_.G;€7i.CU*h [LyB*K 9&7CjmtYUrl'O7~T/v~7흽bjboc:νuc/O;w\@w\|}eN,-_؜ /-Oeg}|.Zb9k*vbN%4ZT %H8YW*s-taRof|UEB!rߩ߈@Hi )q3j}4DkR>Vgٓ'OLK# \^^m JאnFCRB5 *f*&cjf6Gq[_󩻳lgw؛olM~QEDz{;[g'ˏqݚXrg?Z|TSA5.z=ݲ~DT-S,)iΖY?8ܦ {jrQQdB/SS`Z ÕgB J̆ֆb hSE~͛7ONN?m@WzJ|77#a=~/.y~qvvƝD͚'채P\Kr@vD{f 6qY o |B<yu3'?9 KfY7pizneȡq|%Ypœ=FtT :CbGI~K;Яе@  ;SǜsJd-(ax_#qO0Ӳ0s ~0ҍUR_6{b?'9tDU>)`?;ؑ~R޾)%w> c E Ȋ0L $^oYAQB!È!tu98C׆a 7C|>?::\)VIza{Д $gHGLbYnFe[-j9?I{[{oJo7vcҼ?LknjgpxaaX=Ed#)Y1fC{*.ȣW>ŀ;V|AÿqWH,R#%FP'44pT*2T5+4|gxڑPI(U[A)R&:>_s Bu2҄SJ9>>.a򞄦<x<-̃gmF9@؀y#0'n3V'룈X@<=|+7n~b3[N{|yGgy}z|pyq6_~gyvIDie( K3q1,); y皽Yx(6tG1VZʜ3ʺ }H@h}>H.@1}84vwwOOOb' =  ;fYΝXfQ^dT34U.CLI{&0t@B,ѩ  n̋ Ь`N>-grM6/n A)/Ŀ 2|% cZmv]],ٵEy{;}{ss3ٝ-fDZ??<><:<>|7?̭GkњfYJ~mdALR,eIEv<;}zOZk"T^Yg^k(1; 49E "46>€ ^CGm3Ot~a ȣb'fFs&%Migx ܂y IQ`Oîb2sG2EN B7?,^)! lwn'Pt ) ]otL P*vT yqKDkqH!z29~eIYǘH ́xHزcL/[WAByZ :3F 'q$~ }#AW@6o6<>=#~$ܳN+X)"9pmD{7KhTUX9I4Dވ0ieqCz;A@'A);M#3T= 7/!BSDH!n~Z>WU{=N)_i*rJ]VbR*̆G1{;ϗ׏޷km}׾wރISw:zxy|pq|<:<_<| Vx;G4t=""g<B/{}扦,vpN֝vp||ydKLDִwr鵪Iؽwk}\h;FJ EXPu@(^Dn޼tW7d5 x~nՍ*bN 37~1؋QUg ;#= !r8@kRӊZPp8 WGtJ܌Ί 68$cCE8ϭIElwp8}Q;DN`e x_FUWON){M&2?PPKƐf~q H%22nM`c{V (#_ 3Ft=Vɀy NoS#Lq&9;<= S T>K)kN wFB1JS !VJ abA|X %8cX7Or&LIwAԃ?,nW9 C.)4 Xhi$Qsc&&%iL؛Ԯqx9gɳ뷾7W._f?z/"ϧ}py6>|r;-^ٰI)ej{?/vݴW飩H%~-m<?%^go.\aCGmꆽ}[ǏeK֤M C꒤uKITMT$u]K(KݗO%0I;QBT"2H9HP+7nuRg541Ix2|_'Hx˝fO$<4ə# T׈U( N1\D ,w"6gHEݮYd JCC~T2ha F/pV:tgwՖT̹C\dNiz1c/HQ23l]6 t2fa,`hy8j "rɸ XU3T$08Ǎм3_h+yY=N0{!;XBW>[{dlZFQGAɘ:sn+rKPQh3, .] K5+;izLȸhL"hh v=ǓK(XY*5Ĵ_rnfe<_|`tZ"۫0)y&݄@=Va0']}b3<达V} h@O3FakazADw2N(=jnպI[S[Y]&&xO/bg;]~ z[,~ޝk<óƧ`uώ.=?>X>|3@o^S tT5I1v˵r~o]鴏қf&^zޟ_}g?Z=xgrA!*nͩXJ;{`5=kc6f͢=X7My*}VsJ& koN#h%S1SB']] NDPonn"EM#g$*^ۍӭbbG$Ūksv<|D= %UO]ZF?;RtQޥ1`{bIb r쌊uSHjwdHDkhzr/ܸp;`8#b)&hgR̳~X :'hG)F8o?ܢZ@E߻wnrw}L;N#K.}ʪ =)w&ew sk`a(j1}t1rq:I(36ଲ.C;e@&$dƬGL1Fao'u?f=P &9L|!OW X7 9q|<9<xwL}!4CKA^k7ӣՑN/K%齥SהRD[ ,LUrWF!0 (@ 5ΙPO$F}ƍsbGcdur=uf:#ixI[t`~Jf-D/⚻%&y*stfZ yPBH twUo:>zh /=b甧LPqqF:H M}4=b՛YB'ы>1 %L^` CY2OڧS 0H/7=*pKɻCVG)Pj7 tZQ4ԆNϿÏo_w\ sD@Q\&wz/ԕba]{5b>@񴻞z?Υ~u6łƝb)&IM6.<9g%eښljFOT"*꿺0A &;1H)q巙_^vͩKͱI焙~ nشVݹ.JhE9 4llR̍5a@^hn6j[𳯨8g{BTzRy<Č zW tB069"s(U(@XEPT"L=NN`m+HiX Ð~ͦ4}{x BwP@UcD73L:Aن-M0vF u %v P6x|͠sӁrN 1En ?, L=`  }8\[oE}vxy|pytxytz>Zt#s^Tv{͔Z\%:&;iko.'ǿYlصkP%}s~orGmM緊2x_6U͚@76Y7.͒.ҫ5#PS28*c):Btł(ƜHunNO "QldEyS<X%0˛ZA7bEFm4'-Ǣg&&&ǘnrС(}q:j ~"8c002cY Hc_D< mpf Ep,4ue%fF ]]opUM1 @Ǡ39kLYEKv9QO< 500(wKP!xmA~'Px%إH'^L o33RQ:B1J3dFMlO1ϭHFUщ*Z "*tL)8c@iaNNd29<!HA7Sˋj}u1Οm=}+7nww7_%i"͍{/^8t2/w.g[z-d{䉶ޥe.%M\Jo-eK>!I2m[2;͗˿AɴW3oc}<~Y+?o,C$Nײ.G)rӳ0Soͭ&ٍ5b۠ɀhRj`O NVz@K!1vPrF!Ղ@G8p-pDz3dŨ[^@zl0RO2z=aVH!49۷#`a_Ds 2UtSs%6}u:T?Ԋr>Q ut0%y.f@Aڂ u4.q5MZk"`mы)d:B@ Rd9-B|-e':B؂ç`pUTL A(%D&LS\mzhq\n6 u5-nE]JHRPH2 &ؤ\|}9Ym_o}e{3\OG}N{n;8Џ~lvt<|t'ݴ ݞU+A ZޒXW\)dI)I}M&Vn!?5*m)Y߼Bi{N̒'Do"rQ۸S'ITS1R<ݾ;>9<χE'K{"tՔsGd6T>S!44:cD 2IyZ֏Y_@ iZ`67!~x}1%&#^2 úu+e+N:??D3H3y a !4_5tL!2!̾)f8O? @ p55ZD6%Osz܊X?ċ Tm`ܓ1Y &`&_K)wI2 "ͼ'R0.A ȴG<1Ojfo*;[@{tSe_^Ĺ%1N(2U$4g.:6aw \QcQAl; `je[s7͌}ƾ!!$m!AptJQln`#j.g1ϟ?xu`yr 9A9DGhAKެu闭㓜gW;;3N_[7fo|y_~t榙={ϗ~v>OǗ?p/m1 VX!5vҘ "Ln>";6J=e#J_^Uzd&ry_T )kJʖ,)Yoه㧇zbڇ1ôd[3FttEgلdASg^ʺQ IDAT@ shAib+QJ=uz`rߺ#NcdQaF+X(/\]`~[NUV+_ZhJ X BLN@ BHi s^Ux-1U( c!fP(1M)#*$ #$h2+2[t"_ue١?93 Cqh\ f*ؕdn10bR ~AYޤ!wG}W "P0YM@KޢGFZd(^#̡H1~{ jHF 0Ҁ&7h!t2˲<ɍAsAs *SHPH3JA]7є@-5!o>Z=8ׯI<LEDU^?CKɣ<-%nҭ[fMOKj TR"&%kuۗzQmf?>/O^uo~ '_ e^RT$\7۪=զӞ,%^ w|/>&mw`ID-0@% ThYC8hF2O3 t#6h;*XѤӡ>fy,/)#25ѽTaw1n\7WDC[Z9Bӵ F~xXAS tJ94+pY S=dgodu]3ryPHԊnwvqv)jْD% "̬D=gʵr, DUY/߻sk Zd*-/28%Y>r%CZAY!76Swx]x :G)l = GXF^'x@Н\JpL:VsX,=1 XR(TP<4iG8u# K'/@=">'U(ϡAFmSe|da@Mʀ=!=':?VHOD䌎?Od$ր:d⣑5|+{sͭ1_,q'?<~Xګvcjof)Yrs~QZm -nB^7l޻[2wKɆTnM[̎i>;;͵;~9KBuڟ67%+rNpvx0^˻5w͆zj.ZXK@ ݧD챘r`DAL&D[3%hN`W/dGY(h^Te*!@<y }tH!J;Q9ÂdN,.Q3mPG8F5` 2;j;hCΡ ,Q3Mgm`m؂yU34ȻbV5ah%%HʎƘMT>|(r\.P{.q(UaPkZYT^29Y (lNNg'SM 4*VF'*a%/T_%v08EG2B/~)OCJ\^`I'NXGX Bse/pA{$N;5gﳙqvac %y@*qN;VOV%Z/$e[#;.sDN1!,;pmBY٣xTӶ*M&K%]r[c_ H0RHhGGyrmaW-8)by+Zh{qJY̍GqnjSF'ǿ\..HahgM]xԙz-p,d4)k2xL>!pTWg6SR+}ۭpkgFd,AMQ>pSL0}\94MJ 3Q#) )^E^wo\~{͍aux5}Ѵ```?xN}6,arN)_6+ә`JHBg˭ϖSRJi |x~f֭gK J/,zP\,BMclH(Fvsk7;6cVygP)Jqbrz%t؅qPj! "Ǧ!NZ QtŒܲePS,iJ)A(0zL!nNLWgBfE)`)e9EycBWt ]+$UN+ǀ_1<4*/:+$ՖNaj}5%\yb(pO{/7ozgOnN_ 󯼾/ڳO>ه~W?7ӝ5O{K%=ܒ %OŠKFWur\Tp)sN)wKfrJgorq%m~֧_;q߸bg9coxr.+ҿGsm[[Z=ݶTTSwV<5.<׭Mv4JPG'nT@_ jZkׯ_0 "&jXe-(~O,+S*ew"č=-H1ΠΑg3,ӑZ@'5b9pJp7"ڊ v4%3xmԗSi,c zS@(DM(!>h5*UEͦX࠰.ܝ1vOl~0|m‹Ru+ɓj)ܖ=OX=PFV%SZ\k]Z 9v^ڳO5]/yٛݺ~+)MiSi!%c $F0_~O:Y>yRȾ#WZ:ka3[#hT/g2RN)J8=̢̡epN4RKptE4:T%G{6W'ʅU%bU8Ggalsc뿳(ΩDKl]&=(ͦn) g0Qfd UUKJH¹\#kWW κ/~Ys(wob a#JI9tmW4#@)Lc1I <:9̶dT0 aPc2 :[Tz7"10jb9Ar)rT0qȱ= 2UCSs!6eR+qBC6E(\X>}*ss;5Vi`ے,SIT! I}#gBAP"ڧ3q{gܹwnvg+x}~58Li7{t{-y3`1/ѣvJN̬M>=y& L~a&5aVc(TI b ${(ᚗ$|8q~5*uhvV$y#VsR]PV| ym~ܮIќsPOmFq"2>4cȖI3=)$VP& MQ߈L6SȊ 2|]X8 5);"4`f"gԀrfs ldUi*BmNQa_ ˄JDxy9t% {l0I{qzP|sw}{ޞ;,e{?W?ݗ.ٷVB™!y;&E A1ϖJMْ[Jh?=;}խOҼ|O֎{3oöq|Qiߵח>&A{<KFY)JWo"e6l_Q5F(P(ȭ^>Q\+wosVӰWK)jQ:(S#,A2 a.P1($3)(cP"?l3A6%׳**s(,SL#(Nʼn楔cC؉.3ZS9&Q1oZ}9aʴ ;_k}s|7Yl,^3Oot!VRC J9#1 Rɽ(p= zGt-)RΓT.rzzWR77T%big;|^.En+Y 1'b$P].jIpn>V ۷oat򙖜3t ѹ, L6uK QCd^ܒBΖΉ4m5%`D2heru!"͊dF6Y*oN#":R%s,W& ^33X^э<|+cd$/Ra:Zt3CSx TEu$eT[ok gf:t/ A J9pj&.9PD9( 'ŒHk'( \p0Ҭ։J pHJiD UqŘ v`AY90V AZ帲~x߸=,.w>zW0`tӓO?qTp1a=R{b=,Ƽ_НBC&F)']tU^Rr͹'O9\jهZ=yӷ2ٵSS=%;ڳKu9W4x}O6ߘ6edQк%h|q;sz'aR"h&\,3e Kկm+U"C"4t hurrD-KtjLe f?55Oft`skfcOK2W!CJ =P!)%Sp NNN/jʪ% 2LyFlcAQpBUg, h=wu`kgp΍ap<%KJ`Ėewஆ gFY ){@D6ZP̉"I '66VC&ZPf8#v(P}\_aND/lLFnpbV'-p61v ''r 0+$h¡3GBZ3'W "LOxSHٝ ΕwvWF+8 bGg}JlH)=ϿY+;7l釟|yz<>]Y;;?/[שּׂ|ޜJ.J_deYJs44OfSJVL6TTODy)D֙r1gsZfnXk%5K1Yvö>HwߟU6l{wN9t^nyR7.J>צ ʶ#sj鈙n\4Ж!oԃwʹr;;;x NXs'Entz)DyG@ =h (D ҫa:̩Z&WaЭb7V:ˁ0Aޘfp`A0RCI f-zD''/RftDy@&Jю=3ROhԠ3R1AW(L1oI IDAT-9MYNuں<]<[qaBu&x`t1AƉGT(xIJs32m}b)pLƣW~kX1ݵýaѯ<4j^7 OSR)Y.C+_A"3\vD"-LJM^jjn'=Uw+墢rsZ߮l~}{kCwf?#aKy_'=hrC7"]-GXBΪnaÅgp]sАЃY=L~+4JD's*.ރ^},;e O#Ckӿhœfn)#/̝B0J#U/_;Q(@=rNzjy̴2N4E)h r:^;nA6y5z r*"QQ&K޶Iz J99rQEmkʉzv&K?P0w4ȗh gKY@ #R4UK`W3PWAA4KSqu0`;BQT-!D))X]sq:`ʞ!TV5"NNl(9W{|̡)繐Y 4x`ˆLjbӧOYNWlN@RR]1 Ìk~6,?=ݎN~{o?:v+s(LL4 n9W[97ֺgO}їui(\BbR 1>\Yjw)a}^Zy%[Zf0C[ˍӷggmZ,y/gW* 1QW\bso,W#aBS3ol٩ʮSQx9g Z z0ȰQ23";ct.@cQcq*8?"-T%`#DC,Be/Dځg$EtGTd,qB٬vz✂D %W]R6YsJ"d2UJ)(]\\mAR4#7?>DMFrFPd(/$ <0/G!v+%dV*A?Dd]&^#=̂T '2W kO#$: )9 ΐ C谳h{{{ooXȡ;`&5R(ʾ\Xf)ҥ*5'rqe1lu_{,?YӫẆ-%@KɈv>鼨B$UMvS$OCKq\Q9VftUhrW|qǷOǏwnyƭT//Owcڌ1P =$rqrМP|grxl5bwyn!:G#5<  FaF#* \5 P HT֒? K(+ubzc`ٓFHuTN5;M)[r.^(dޜbTJPO+)Ңى_L y".Jh$xgY\3}0MPj,2Kpp|KbeL½pq1Z偄8xF*g" %*%J|-^d,9m m1>`n"zQIWY4LU2`ቈ7q\k)@H\D@gggZ% ~XZJ36Pqֹ\/>CNVx<ܻse;~>Ny?1LkJW?ABC@U%ՊQeO֡MKMNnU$G8L{|nio7;ÚkG/C[?!A}W_%iib[:naQc\ } *\|G7EU)G P#|TjӉ`pMe3G֪+W*g0FPݘôf 66gNy<~sK8P0^_)/n:d W5[E#-nVQ{A2&8Y' Ov>sU#Ǽf5)(@w*5‹/)DXLVmrJ)L zSV7&8<}CJx'mDyxb8::23FuO  wbTD?yY<"XڗxGkv m^p/lEr ȜųFD"D=i%F$Ll(GGG:Ȑfq8::N(If78Eၪ'q Ͽ˻?zk̆ɴW&ZsG|+Jf҈ SY= sEx 5J9#-ڵ3 3'(h/ℵEPD*Yپԝ/9~w \:cP%Pb UB94ρ[ "C DR|ses1{*b&PJY__Oůp9QL3;tZUSE0كH0^#瑹e=}|!M̖ 90L|0.`kkK[qP(SÑ-ʒkД{jr>3 c:KaX,ȝ B(X:28bhuQ^b[9!bi/\)s"qpzog8r\a%iT}2stj2"-n`s+~6bU 'PatHiUKnϑ]8| &GFSfw'-S+G[K޻}V?޽z{sƳwϏ>$a/G;mYHjݘٽ&=kXBTx ~:GB2+B;tیs `%&؉:J[:EϮ3w;۲p%}Y/aܡjg3VJ @V́٧?ʚiUIZX]xD$ ިΫs*2\1!_/93X׶TS\ +B$rE%`p|766f&NdԗabK!sB9-YU1q/9UJ3aEu@SڒH~`RWo։m\ʷj]a+؄ NƮu}sXu4^{ (6Œ՝P.TSQV06uaK/.@龶ѹFC: KV(H sFJ8$_gaV&80-ZU:(.1q`A`fc!{PϮQ:8ʛ3[-J)пvz<~ N̽;mA :#\34B;5"I,"nyccC!MHTVW]6IkѪ4*V8w?;uȿ/_jݞ6x~m1vnvJDr T㞈-he:B=yLE?❥ ] ÔZD&btV7w~u#/cii^wnD'b!\Wc]3s.-M$k9~g /ڵk% ,dIN%.)puzs*a3+;SB|f~i 9+Hq R@)%!وX(XlTu@q: 8-_G.TݩJK! 9㙺OJ*1sI)FH# JG Z* grt˙z9-蔹)}BjYo~\ h#jg-97dQJy#9}A |4Mxrx*F歐FN܈5i"ikk {ndXG+WTX)+l7cUG}ccCj!Ԅ ')ش |BE TnA?Oh蓓|/B6nV`pQD xZaC]˛(W8cL2,$.r%:910oAnkZ~?ܻ{a\)>x;3gJ)h_ebyv`mݎMC&'C&P 5 }ıL[pE9w)e8&\ӵ?{?}yO~#V?6\C':+SŒc5;(B5 caM7ֳ_Cjl~S*c13 y~$v2qSa?q|f޵@yQi!u;hQv8t56$j䌫|VM-(+Q'EH3:2<NPmU%fw5D'û^FE/R~r -xyS [ɘQ V<)"PEe%ʝ;wUbufʰfDhaj*mllȊ sj)e=oЃ!Bc]Za,EAʤkA #8&(Wə,L*ҏ!J$ 3g+Jʙ֕U4 v5Á %@vqu 26bB={̙bU6zZɟ~N 0[Ei_;=~/>߾{ZKwU>SnjZU"R# O>IH[RW"_l(W(ϗ  k3 9pO=sWZoߩw ^׬ ]Osw0"p'ށ?޻@SB=N R`Hίah\rq3ۖJ̞;ǠhVXO\P )+eO8MCDN !FۙmPx0cP7E(#~sX"oVC[l6e sXaNj2BF^deN !dR?"q}bmBm{:!@5(I-Pnal _[[T$ 7>X . y՝0;b1,~׊k4dI) N0P"cEi*>U>].WAn_)z\"cvNH{G?ץQ3$h(RЦ ݣFNWa_'ƃlF|~D$zmx4M''')R.{F]E=B_bܒ~j8Z iɩ5mw3w/W;bZ]DLN#L:RlGms X4 ; 1Z YBsd/8rJ J)(~ՁiUPWU9WF!4=E>?::/| Ɍ&;i`TאE>#8KTU t0[sss0ܐR9HQUimm;Mz度!Б3mP+ W_<yc/z qH{p=:is$YQ, ſWiLlصٌ*Cv)ſ; pB5cl8.VDp58QHC!V -p2 TN8k˃rNt+I[H >.\eaܞBrz 6㫥<5yJ932 9HX (oa] }5ɂo^rb1HY{ $EstRvh5AJQi83u&2 eEN(dtȮ@ŽDA+W3K8B-q%jWF׿A8jFAy~EMO j PBۂr\ÑS,2K3I^z~G퟾OW_>JǯQH"vL"ߦBDW6TрBԻY(+065PZ`Uj1"ꬲ6OO_]ʔ`L촑YjôBV%{@֦")VY۳RpAׯ<[fm#`aW'MAfZ|k=/m3kזk77["b-KyvH"Vq"FA-,<46%$p'*)4nƉ&uroT_!li&(2N,M씆_R֦e4&pmxNU]. 6CJ{+uTFvz4ΫCd:9F( 2bDYX/>@[pz6Ze1$_ *'J;IT-vS)Rxz`s Yz:4EM)-8>㮅1Vro0ɏʦ[y+8@OTM$4K4VC/6إ0@0fht)p,̤8zr}U^RE6Xx7ƃ_Mw߸vg˽{y1]^<0BE1Iti Kڒ񒓎T{/Sk[а_SJ۰ex~('fV7lv?4?i-Ϳzn+ A,dUuc3[ G4Q:Wef7ofBG@gHْ`֫ @h,(%M, A79mz06q T"J7 rG)S)E *,ĝK4x) Tjn$'/%BR4ʆEcGv楮@HO6^G=ٻvt?^YB%NbLD<J.-p#7lmmzp=ÆTSV*jHǝd fΖ-w+ExD[cbW;_es+NBM /l;[Gs*䠆E]lm0pz Zzc8΃*ƈ6SYex 4=mbԒ?,z0Tռ Y$(딛Ofh$F:xpvF!8vE }xE<ѝky @\~]~TK,:2P]^|a2s,wrN<La2㬝BR=XL<",%ӈ"3%l½W%V,;ZU)_C Tmv't9iJ~H,7a^,feS[VJUQ%ࡱw$Bcoꫯ66?cGV,z0+JuB4NOOPe .azXBi[%@blzPÕwstt4r/P$&9被0\qB?(S9 sFUDL(o'Ir-H=G=\|,ξJB+mDdA}` ` VcI1d$Ϟ=SZ ,B1I!O$Țk5ftw"g+'^_+!}R҉1G 0FzuЊ\Yfg 6O `i )+GѹΤՆIIyn'ߩEk=>|uMҳ4&?# Gq)*JA)5c=<<}hJi,]g{9PVHRl1JRs_M^)S=QfGiq'WH2sͲZ969P_19i9~#1(.I&7" P~0ͦ('l,șŧa{HU\q ' LϴEW ./RYĀlxv`0y9Cc,9w'+mF\΂qT*׹Ma򛳐C%N9W51P4rS:Fl$y `>]t*au1Sad'5!d3 wXL"D*CJI4`іP'c]pf R a픐To)Atv?^aEYlB(;_z}`p%=h˳uJqfZxQxd+Wv `]R^ur`530~/վ"wtfn\}p1hR-$d,el12(,+6`q666{rڨ=T6UR,09 L;Vq@4;%zc$8̩R'V_ Y\%; *" άOl9uҟ J*?-9e\BO+,lmm%NREt B:2֧ΑKC\i,G8[s&ɣ wYq TO +҉-*%²xpd FT=~E3[TM$:I5e 9#HL&qh-+p'7U~TK#(P2[@/D")m|HPqyEK4(Ԋ-$ڠ':Aq"`F>;.x;am8f]ɗ+H㜭?'Yh-D݅֓'O2 jх<(҉He'aKv w78=w:A~ovN>0on>vom݅[@\Z((Xϫ cSFƂr۷oc85Bsg{"8[Sސuu "H&ʣ8@_PHқDh8>9~1Ԣ'3V w+,Đ>>,('3:{ ٮd5Qf!oTE[R^ PrCR P[lARM]O½7dk䠋"<(TWfi쭇GZMvf5BUH{&vj۱jxhÀbalx<:._(&MJ$gdy3g=QrÄ>N#H~k,K H$A &I(lubQbG E8rD/\%8LLZ`9|B&3P_I(Ʈ@D, |*IL/’@xvCU@nZ~kds -bp%hQۉlgSr4M(we&2ddYŊP3C_:CиD,+EXR@O7Ed2`h@ lTbkנ?eAUq\:o |5aQd^r:V)@vR z(P8f- @a7}݋nPap"@b9Tv\**+MѲ%ߏ5o_Ownᅴ|AkaJDx xL'o v+5bS쭍WN+F~^&+L,<dL.li WV8K$9&<§ ozբ)ˡ YӲRu{FP{ixz +k A{ m~qF+2+4r;MpE}S%j0jcm6 JQ8(1>9)\qR 'THu5j;vKN],AzK aP![sؙ ÀB;2s ƺ>$ёj :zAg?FЉ \dLp93'WIϴjzv;;g+vD ϟҕ}z4_N%F@TQG.^(N#)҅s8YmlcNf gvpi =LBRHÔ2%2-|>s$s.@~w,pqv ĺ=LQ Y-/ɰƠT#] ͜xfL 3K߂i(. 8A9DhE,? W(IƒS8;;O[r+f$ d%^x(bzC0uwL5z OPzs(.8!Q84H&5tTM[0h WؿdfHjkkkϟ?eYń*q<ÁT^,PH:>nQb`3E\-t9_ cBRh QPT`#&VNlRY'_\p"b#?(^86Gm czй/|r_~^NH_d>| ʌ%t(&P${X 2"r9 =p%Bj \X9KR?4u~9^Wb/0DV ;9mo {(`u2tjq9jxUԳJ1FYB 14(2L}jha7/ 7Y@]KK%_` |)N)R5Յ4(T X9Q#(S/= fQ߂a s2gB,iu s {@qjIɘ`O^Ī%9]ZLa뮢fcSix5ҔJ٘I#r6'hԠp~cjp80;0Sxf-)g!x8`5g$*arDFoiNboI'ATUFEpXOf)K(z l FOʈ׆294.{`4B(bጱ' I2Lx5 lJARYBwV,T)I%ڎNeº1u^X{?oG/^b>-' VT!׮HeSHaAWbݮhJ,hm'Rj-gTQt\ c;۲|v8>D1b%v2J0gGn!Y6-]$@{( r9grBHoP1áC.d}%C+5x/6@f`r(Xηn PtQ'vԁ{G ! IDAT!K8JAQh^y?(*mt_T0MED*&i8"q$-dre3ٸ)oA8Nr.`Jy(E/ jʢ, ) (vj7GG%/k$;;*4UwRH*+ȒSB<#3Ac)Q"ce:S-hJ&4$04r!+gP.GVI`v-0, '*TgoXPXj0|؈ ~ySa#m jꍍ'O8ϥs?0gA,}u}bKv~w^|?)kG̏>;5+H)>Jo)RhXr7SȞϽ&ݶPmƀޙB >F\YYͳn,[j_[oۼ2惶^/]?ۜ2?:N¥<27IFO)$R0H®3"C[[[Qf3s jT@I>|m(,.HPrHb@MY?yg@D<&*tf:l gbC㠲pLJ2+dH%w} "`NLKW`̅6%`E2ysPK,ScZL@`]t|RZ4"W"|[Z_x%:@b?DM]G xVCp)ƍb+bT'eƨͯZfMbbizvPGbo?8ȊTk(@EIz .\> *'o)L$96{+ɔSIDmaN=-QwXY)QEwЦB*,_)>U<#9n yEjRC(~x޽{gBhE*q3 ceިc*5+#gģ/FAm!NFi@sG3+8p*ٍ-FBkHИ~b N`2Q<Ŏ,Lmh$k%*++_Wؓ&{E-A;"Dž^#pt2J1H>zGh5?@2CZspksoJiooϻɔv4^j=$/P@='8`׾7aU`g)/Uj֪V[5 9Te(P!O\),,DGgQ4CmqڱcZZjuc 5VJ-bB hg>N[w>%OjbKA23:q}R\a(qs2GvQw&H, d"Ѯ.\=^䄢\ ҹ!JmCUf$frrU]샆FVBpBV"n)\]-#s˜'fS}S''*o D.3U;6e7TZ3G9L~`Z35׼<c:r~ykIA $ScRxuv]HzjJ*!qk;a Pɧdg[إZ/%cRAq?XHέ5RY.eJ:Gj $  )Sk9NT4 2pWdȠHɾ{;z > ( 4&FZ>h$h=Af;;;; Tq$IG7@20U+695@o|W/^}nw>i6N-BPC+eL!5gh#Sb`, ik{oy(?$06l5 ZȵV C픊b*|jOh__=oV|M}2^?c2,lPҜʎbmi-i$:(\BCbrb&N5v$ : ppiB%A$W#ɹsd=[U6ΜMv/#T'^8LT$ ](V@agcMIF 47HaRƦ\}EO؆-(Ҩ%Re9X 1!>>bBBg8UEyajɒ*xϊ0 -d۷o'7RMFz t UD T'Y\Ym <[uHb~\9\e:%vHi9R$Gz&sU@rwEfSE͑eY Sd2.֕S)ˊsVnZA%O$jvs|zAaTazB`ؾ>}.9dN5^4c\]@`JamO>'yizYyrx⽻iwm;~r)ɚRjifڥ=u&ۊSݙUHYP9A6s"aZKkkBzyw4Ef͉ʰ6&0ϛx/'SY b|ҵYZ%+SxDtlAc[qF&;]yB֪XH!r*kȵ"$4=ʎ-NklHd)ul5*eY H6o).1J˳tQu-(=P. Di!a]\F^Cʦ{a{f"e?$l Rg3ݴ͓PsEdcK8dqctidC4> 6sM'u*T9OD=dsK)(4&ͱ|P|21 k-VCFkγW_G{9)wv9p'ۇa5>Od!X,<YsUqG H~Qa\GJ%{T(9cJq~|v˹yoY7~xu۬ke$~;y}4:L@G'&m=;Hxq(&:Jd1dгnT }Ju:q`c旎)m #Bz܍ICH-x;|QTD$/뉔09nflH' b\ru5F6K(vB`pa>EUN y9arC7r𗑴 (jA W4)\^kg+,ŧ+7N^X62B#{`JTrՃ io)!@*:Vث݆$}laƯD5&5ϗn_DuH\Z9b@ "'ULrD?RC4ʼn9g8~u}[dL}=åEs-#QA#CZVf'W2[lx2F%> Nk{e}_έ[o]ƷMy6>;o_꺐7'm:} _ZZ[jv7WD!#$(zRjzC#(WLZ X \ZOeg[z5c?y-a~cBR=x/SZxIoueOv.->6JN@﮴NP蝺BIsܶ^DJnnnz S ,$ܤڎ䑁\Tqx<+Ϧ"9LLLUƞ@TPcn9L VU}M GWT TSc$5Y2{!#=UBYV aWGl^уk1̦CPȎN6 Q;9Bo GO03]~.-)߆'aVY% 0)QfSQ]&9([otzjj9`񰙝$gbi-U8қ h9$!ˊT4RJ}f~bOHaUeĵ~_&h9_F*'T}#abg.OgqK^p)m6"΅.K~?ɯ^{dO1?{7u]s›q Y\i0 1`^Z;)4 tXs Zze*OgsX,F)!1e;#w;~st|WCh+%NOVB&㏝c(?ݹZ6cX_]Lp(A][KGG{okkkRvY5gU@&%ӯsZPDB.ek&) DueKxItxER>eKVA`~Xx;RMb#vR&e\BޜdC2㉓eUU'%qtG?ঠ!AG&&+kD9'PoQ'(0h31"u©3jଗL=&e!d 0M04VN;J|J%SJ35G &9 rQ!X&

u?ig^MwogO4K)f,j-BL:bD$ϥwozsI#!@˨iN+ZPNN(>0~> {ʅO{FK?/l(M'ݕcߦWr~ѧiK꽾OL TzxktN\AW\B 2"c?nh!Їȑ%rgn =}D>H9tFP-/#i }ؑ.Z@ȕA %TǫN$SMև*T1q JZBC`-,XV"sPX Nu[?ZgJʎt Us3x+quQqz.UMIV.Cc$ɗZW*#[ SP-Xɉ:҅4 5+ns2:W:9. xuT@EAi gNe-\"u^5G~uc%ⴟ;w3|UYuas*+vܧVz5]}.<.7~>OsI/]rb޸/_^=|d9a.`BhfZ)Y1̻ds`»y2͑c)0k<6P?qyQ'[|6@2CWyxg\: cvuجQlw"ƪKɃŲzXrMkTf^9&@R@ 1 uK)b5Qv'٨4#7@GNeȺ)AOnJ\"Y(х .ՠ) _a!K[&5A&s{q*ʡX=JX(سC^OqGʺ&L"xlIV"Z;cٸ8L=1:{ɂ4P` K'8J$˚9Q'ٯu&]v8 Ϙそ 6r(t_"f'D8P4c?Sb* HGVRJ`4qc2Tv!ns br| j`M(Ғ󉂼 ",SGfCm$>̿>DKd* +GdJ\0bo/?o߼`|&9S܏@ȶ̂c*85T4ՂI% =<#YT,קc(n.N$P5P,k\ΙHgI:Wڊu×t,L 6[#+EPW&OPQp?,Ɔg=880Raz#fSTzJ6)g be w>]wʺAcV0P8}^>=gG}t7q#o+nX1zɵ( !@H8.(u ^ R}VAL^[o/5f,]alJ1dCiN7J6p@@dE:|W`#N {j; aw2P[Bd{{[ SG#s-y)jTFG֯4NnEA_3?>?_{޿klY/J)]?M]..}׮7GO~2&W-#G@Snfǟpr"S3PwwOway5~;Wyc?+ݼv"礑 Q)lǘQmt.i]:mom;_+QKKξz]mZǟ(x;66{^83}?^]ϡ˱vV}=~|t׎f֧z꧕d`bN:"!PFn }d:'*/vTaf7֟ u-Ƙ_?ǏbZ:*iU |ղsb-mdN f;4F1ӟ)[[[=ɯ IDATZC䥄g1p xp1*_t"(֭k ^U56˞sNETЪ]mpjeW1aqfzf']XtYUW&t(v(I@r9 %vZYHvvtͥA"i KZSV[ qGğU4^{>=^Jl Y:W܊xypيJ˥lPmȶK9G&c)qnWfUˉ"*V(nLq 'vcͩRL: kȚ„#G_S3RND,R,֩mpF0Qs@B恱Q7RU3ť̀6g'ؗ]fBWH$KtiKh:)3;V]+Arϖ]o֤lc7irv"<{Z(-o$Lmp>ݹ'!d2lUhF*)<̫E&ܹs~({bɼjc 0w73?kAڅO© )G RXP(Lz"=:SZX{s#n[QZLO*nh8!lr%n Qs051Q+(#G#}dkǾ́Kպq8Bt$Gs0Y ERgxV9JcNMwmMWx+P$W Ӆ#{&O 6Bc*ITrO[Y*a3'xiixywF׻/N@"G`Ȝҫg L̆ FX~60VXU!HꡜƵ  ZB4(Sզ(-DNp混彴z1'ѓ)Qw_Jj۳zAXoͮ?fcts ċov?ICKD7R]cU1@i+*_ON΅~6vӱ~^_^_? Ch/<پ2u>>T}&IYQe*Y`/_FV'*&J A "J=&A ,~+Sˍy@SuRbhbZp?Z|>€߽ qV> J鄒:UW7vX4G#zvlF\]X6@aXrlV) d \,_!\C݈g B*Fʨ۷}FUH^3+a5ɬx'Q=-9jdF*D]lJq_-%+$׷`<(|pe>Db|ZTEKEd"GEN_ g~/jBh:W1%7't\z|I]]^a,g f ;(U2Zkb{{;SCT;PčȲerDFC[.:N9?.]ye }?^)'RׅnݛVE[FBZG .nD*A247 fCmY ^Cotr> _ky8*_hrz` [- Rb?Nue+p/3ʖW^j$ k;OU{ *Ef`}oLLJl^HBs*%zFQHK0Yug7)S#R9q3e[+ܨ*]L[b@WcGItyrIqM.0ەBGGG'&똿Y" >;'gn>T{G>TkS͎0 cmE8PXJW(r@Wל`X8(ittMDP[Cѽ 1|߯ /7' X8! lCPQXZD2v*i ud]6s$m$Y^HD ˅밉+-0@(.#LZ)ZOcAD!9gϞ(\WRjH K}a ޣdUh3;nW/{s__Y6~W?zz1ӛґ]3ܒNȞpUQ#3:1ǑqMB v$F]XJoqD-Qsq̾O9F7z@G=rzn> Epq䓛%D(9^l> \bH$_)܄H;(2bA#= Qr>)溗S5b) _\ %ӭ[z7g GalaR"Bpً.B̅Sm_˧]1x"MA"e4BF<~}FEagTL.N MMLRݼ@ev{Nx&VI,g(P0QE 싕kng~oTd Q8xM'`OisðmfB4+h5"yȑF4È`OC2qv)z>µOzꝭuU}Ͽ]so-uvdȂ+#Go-"Bn<:ZxnkCԽv!h)/w+ ~[Yҭ7<{G=EB8l VXEcP,M^zs 쫍 d K֑oJ>}eu%X0Ba& n `*.Q-(%B麐1lXCaT+V9i~"E:DncNu'QA^٫6#er]9u|TKߕJ ָ:D7އ>"eJJ za ^؅x+~,R;` +:xl>p67FCFs?OyO7V(It `!g(E6be>gRq:C=ѵ?ȔÔuh,M6b~EH{ QKSuLLdHK>@;}etDu\qhJ4JT#'ʑfruz1ݨD[YHX˜`[ڞd̳fl}׿X/v?UamG9t`, PԹLنH?ptܛs'w%OɅ2VV;>/J/%-wYҾ5kպG8޸wv./W wZjIx@ؕQ-KTO,')~ߟb\ZkىnAOt^{g8+e+(0@aW6-ubqC# iTg7*ώ$}#/h`3Im2}A,KA)Jy`qgtNDVŭ1 [؃yUr J79ح!:ߊ+dJ:O f!X !`ч{?r;o>G˿XO?<_~NKWf#@3XϮS$˗p v篎Wƃ_lUk=~/߳/JYW;/RO `L+^v1>M.7j<>pg2 8<+2e3Ce7 I9dN Vtl3Gn_. ' C)>BF4PMi 2 !P[jZ9u24|$K#9]8#Ba*/xH$aSam4s\XFAȘX\:Qm7G!!܈m$,Ozce7aI`HB.{#d)'kĺsLco\Vnxʘ+zY+]\b[ַܺqS|¼o+o}zvmy)O1gQT%F-3iib㋪~w~̓jfZ6\DZ;? >hǏy ao]|y}za- y ο#1@;vdWHr޲>8Tpŕ#?#J$Gr2(67QԮ: 18~qevL70יL j#BUJ%/3Q3D X%~݇+xؠ!9#P3R9 ~'uS_tn@ږZ[G0 ;M "BwNN/Ȃ%SǤ6I{nv=@Ya//bl? rT+B~_bSlov2Wa[wG D @z`$bn:V!XpPy2ݫTj$ȍ)G6GU!BHQم5U?F8JGo]J J5&% -mnV6Q|(YeԶ3XP-.'<ֺ3=n\n^}g9oÅÏvݭ3{_\73}dyur}bNAHJMtYl{o+ģ%Mnumzuc4f{L˽`͛oo^TLv%%C-Z.otQApEHQ/ XRU8i\a]KP99 jX(,w ;B{pdu} P3/y/}25ɮ HrX=ޣP# eE : x`7l*L`ab#7 +`trUzj_IԚԀv :88% bd#M.9@#< i7k5 NjL] yC~uxx਒<8}!N I)QudS  GGʑڱ8- r*ɬї `l\(u`ZpI\bhpPtrF^Z>%# 琕QE.I$ G.Oɖunndr%!rLtZ5kb(Wϖ앻wIKgJKsk5 kwG^lr|Kh/KCq8?xx8ڗˏ.W.qU\؂k-.$FVix [ezH)*Pa w>:yX ez*j5~6 ,8`q\/=ɩMtpMŎFeU2E+^} \0 2(o4`kL8aFc l&K BZGOi"[>\21@`$UU?VpauXed]%6d⺪&) x\Lbjh,U ZH:q`w޽W?i~g=zݝ;Kٹ0}1[#km}dǑc5 ]Z!rR=zRIw{yŗ_ yH^i493 E{ul ok*0岰?^?cJsUNX@ H\,Hz'+HRZ,[O`oqXi78'!XŖ#VDB|^u<J FWrج/걌y "כz-$dQ kGXT*2Ja}d auvU]d8%0 g{nGY ʲW3Xr0HI]܌HAuBՂ\[5$9O}@s$Z"vhk*NTÃGs8/!. ="FL~щʚdcTDHiҟ$tP\ºpS#3xzjn^xu!%$rz(x|ϟ? s*T)j#(#-w6EK6ϋ^ر[@>nVvF4%Rze1|S# +d*k%%g-B`@#iK)iF|!+# X|ܶ"K#6pak32|:Z !*=CQoQ@G0Q`,b۷oks# j~URa,Np WuKtۅB**wW!b#C_vFUc@cBqq;t;F=Ju5*hҙҒBiagHJbk?jn9-R(9F<~-PsrKK:Ms8TGWJNLlǑSDG:1*F!8rCϞ= u[WP>.n0RpS)#֥nZbbo?]P/?}p[ۣw~~ֹ/_ Z['Ƅ G_;9ػ&Iz37/'!u;c׳{Qϋ2Z-M?1,Rw׿}!v_׋yr\EbquaXoU~'9zeUˎayUi_ \@.\8{qѼNFPk: ˠy+.@ 8CB ̕V+G)lAm_p9*ĨV,9guitcު+(!"+l&rBcŽr(6nQ̝{Xw G‡LV9QOw=V,E6%;V#~b euBWp'jK5 h`"(]J< -! ޾*C|k~#l,yp{ 0Bڑƀoyu$Y8iJWf+[r6P7*1Fg4 Qid21p, o:"ƶQQ_-drp&R20J^ *!WLY'I1BBcB ? Cifӟ.~^+8~"/B&R@[ +gAQf?ah>hi*ݷ_ӏTwf'[鴆;_Y/Y'dQͻ$"Wժ몕lUzuK!6ga2LSi'f&cu_p*h+hKea8>>WB'0K0)eP`)K43ȗh0,~Snl/qIe)#~`@+6u^}c/UFlDG uT&8GxlKayȏF)N÷(#F(FFUd3cUrL0޽{ƪn Ae;\R+!?QT+9lĄ}} g#-'B:-"ED+hW4MʚdƮ W(ȞJH%9#Kg3'YHA]1BWfH KۘR+1RQ` K984E;mDsMaqssSzW{CLM1}9HY@nyz69W[uf:`|q W6~g/l?K祯~u觹}$ ͘I}3FENЪ9nιn~}ɓSre<,\<oߟXk*_Kyrl(GMU [^r]uXU;)Ⱥi jcK Ͱ Ɣ dx<8}KdkϤ((b΄PȒR:88M}}lEbe>$'_Tm9q eD+HZ*6Һ2a'6И=H!T]ȱp X09r캑헅MQ,LK.xEMnM p$P

> +II͛#=NM/_Y>٤PjFHv 8'Xr yP;UTOxDSeGY/#\<.prщ~&@ 2#u`V+1FLiaGF v;Hf{=>h~mԳdr"7V@`:(G1:m #@F&$V:1q< >tB#wQ_.oEqD-W:28L ru\Jbex8xج1Fp5eP*Sh=t||D'xlrzqx7 (.IN& (SJ'*8@exsKt5^#{j0I#A 4[2Jy,eB 9'՘_id ,F6@L6q::} +všX$H G$VO_wJ8)z?TKkK<$ )9xTCG2EcNy}Q[[~}ڳy4|xHvQG"(}T?%*ld#ȶ2 +29}Rp3e%7gDq`q%kIt\Hne?ATZpߜ3FȅWu!0'=ۭT yl's+*DV&6cWΣ #*:8PJF8֚|A()Zß5Q零F@˗]a; 8:?9!Y˩/F28tZ*I6Q.>][ xuMFg f#>i,G ! !:,W\CmI%*N .<$b6uGzp$MO19M _z,fsc#_X5  o3=ׯ/CgB=VwcWg|?w͟~[6_|eh S mXgh#O㏹hB j!tt<᭛_?kՎLK a{~/鉀?G/OD'(`!|G|S"$򕯋/"> , 0įF6g d_ئ8N38/KĄ{=$N7sTR!rZe͉fd*rʰG #p t\c<<<,r1)2+ k]Y1ĂHW+fZ ב=7W,[g6KL6T C#sgeVjhK!ɲݕ4:y5ňd8!?TVFVK3 j.@B)!R35csEBX f3D%pg kH5 }dJUêe 1; }egcE\|zv2.ŌC8p! JFң]O$DVr`לV;:,=Ut!`لadwVsƮ_(?#ӨP{G Yn:ݿ˪]|7Ih\z5Xk/z9g?o?:g7]x[^i"9=զesېFvZ7W ķt`w V N_Ok;ӿ̖O'٭ٝϹe%W}n6:;r+ݱնzScD]Q\48T 9Uv>Άg888)ճ7DEكplb2! 8)% E=n )l[ƙj2Dȩ -boo/r*H3n! Q+Nś{k= fs i*d,9TqO< UN֣OP6M=ezTdJ૑A%4SʎnCD!,r[zz8 pIuᨘ beuP*AK1:r(74}؈DCi@x*/pcƞ@LPJy-|zN&:WĸPac)hBPa?Qx>{oօ_㏾Ye#u#}=/ץG5Nc\K19zpp`nH@t>k[*FYo~ (@PAp~HW^ O33\1^Mp2Ɯuq62v,Kf`5PuTP˻#kmX c&;73QX(~sFKTue}1`q櫣<'ꫯfQ*%F׷qTZ!myd`YʼnE Ğ#t# F .`W66:F(o 2UWݖ>4 ozuGN,#Q91mvVD Le\ӴWXX+"NF@M~!f&,)շ~hZ h7Q\[,l&繰Wuoo\F "쳊ę-M Ac6\\)8Z/8ܸ߹ͬj>U>]|GV^J8Uؙ5Ε_W^MO&B9?Fq_D(3+Ec`<܍r_`-A^Ώ_BmnQV?zivzYO:E }6d :1GYzګ*5YJcㆃq$v̏F+Q*xD^*B-9>>]vtôJO!e4ju(Fʎ$~u۸z X.Ǎ <@+!Dp7Q^ 4,4a`R~b>%GIˎ^)X.ڽF bb$&҇ k׶:)[-̦_ pĿ<7c[t86¤BlWd:$ )x@ųKHOS*OT(8p99ܵ*{bj`N99nKTGQT1AǙ̦@ޜV촃Ⱦ5JUNTQzƧBG{2gt؝ bv(N}kK{< ,SZN,̂fKxWLshW`ѽ~gRjb/,Q|tPX)T79}8a}9`|~\MM`('X8rNqb)IjpVP,;<\EG# )}Yt?׀/UGUTvvUQ#P 6؈q7U@GP8> B 8p 9)ҭΩa&2);8}aIVWc +R 8J$j(WU7X1tpJ0q`\HYUs3#$'?.;ݼՅHNPpgz׾33O޺Ԫ<kw~ɲ]h'C7hҖXJky U76G_OgZk47oRV݅q~0w+>]_zݜ9{z\>ˏ_f-ik1R!(5ª#{@tȳuFXHk׮ɆtD72QQ\WJ8u-ˮ%THY e>"%PGh=t}΅0bx-,HLeO]R))6ZoF)>KT!8XpCwVny%r`\ TC gZ '+!t(䫑K8Rk ,a:DbGgbkw$]wٞPkM7o w h>D@e)ZzB2#: T_#T0'XL%x^]d#kf@1j[D*+hڧ\F]#)%}Fmwϵ-o[:jCeXɊzj cxUT8 kX,2WT*- 4h<~hӒ |tv0ufR'nfgJ!gǡn飣'?dΕ Ruu8z_7m-NZW~kr-PQ~>U|5;~>ѭVۃ;s>bb"(CjnQk$#$WA:E[nsssGRc6K _쑥O۹W&@ V',Km@ JtUWB.9i^ٗ_|Uab-?8q^);L:D* 482'z}t.czd*3;#v{J1FhRQ& WGJӵkPN*Yuɑ}ܘW'޴˲s}9TԍkyY%DR"i2m) &HLM2޻DCZzUWe 1رc8)F^XݶaxBZEprWt:%M 9ݘ@AF@4+࿁>C|B19 )ʘ"<*+[ᥴ*֖ܒ@=!6{^0mE}S,KWKF\, 'zsU}tQĻ1 0iA|rr+- =C%Z kH'XNQu3 ֘dR޼_FSDtk0>**?ǻׇWׯ/WC{槧sE`@Ǧ y Lۑo1fN!u9ϿS\\cj?.hoN?o87_m7r\]bD|S!i HaDjAAOo$6/%`!sfggg)FO줡d@Pݷ&So4;%H7x A3Hk1iwO5̔jLGbz&EeIP/b^- nW5㡬*Fci+_i/hb"ߝkf& u034IO rh.{?/W!c%A4`:s &Wa6KU =AR{\Ύc1 7bnwss*>k=QOMO#:J^hDi!2b@y4~RaAӊBNV6R$>2y2#"Ly7 hyea"Fhy9n9mM 먀ҥ3;>F+fnYnoxB[L)b֙?&QmyvѶVJNi3# 8B{f5At+Jk<*LУT,cY2#09i)mOЈ p`vL( ooB 1iWO̟NܔEU\\٬'Mo z6 VDSJ()߳A BH֐BD-(*7:OSp$Go:Y"Ҽ V R s0w H>Ј "y3`Zazg.#ļ9\|G51P}gl7e`Øj~[ cC%Tt'_ \kY?J<`̗S=ޟY U7xaOs%1O4~3ߟ_#|JZSG__ ?^WWחW?;l߸}Ū]UbF*Q1ݕ^f)a @"hSuf{?z?̯hKJb!^'>j\W^O>r:On1=4"Ʋ̳Y}Ϟ=1Pvjb5L"LTA@"3b5"ɿ1H@B"@)}a&3fꙖ3IQ/nӄ)d70i#  usU $M e|,,N@1Fo0H7aʴuG+0a-l1 r3=9~wl6U N1m!ДCH ( /~1Z0ѕ VEglC,sh'5@gfi`w/N_.ӄEeo˭ǓJ!ռ\p$$;֥Ё .r;%u P(SkEr} NEn]liV,0G ۦͤ315 {[|;. "L06(Mt(pYpQeYw])T&Cs wNKPFw|vli*-sŸ^ `DMW߾_j}:|׿?ۏ_|yrOBǺ< qѵYCa7%1+7n錮 Kn>\6n1%<~w_z1[x*!7o|}fv޼7弹o~z}/t~??xqr;1Ѿۉ60ե-}Yy 1|;Ao^/ɐV(hr0 b6ݑJ ;4s8:ywPCШ&EgMLkKBlqC(Ekș~M3z tT[PcbՑxr|@#?-3+z@k;) Q2Welw 40cw5r % e#E7L#g'L{:o\j:b݀TYYZRPs3$݃݌rn1e 'ٕѨaF &`%dfRz~d<[R 8zй ?;sM#Q` JL1B ͳP;\ ;^0ZJ' 9Vtdy l āy ^bW^P<ފ-kvqqիvX,%yKgU| ק9STC 8&"9@]4zt'ϟeEA<|(___/\ޟ잽>;mnZ7S Ki?1`fG˼ѥ)DZ-?;C>`3 *bfN2llP:vj{HG~_?v櫙Y3*f.5ӾQK ,8S>Ó=Qz^H HD<{D-ƚy L Pk":@jQO$*4Hl&&z CM_~5hGǒݔ 4By2f_=KzR t d3Ȑ+7(̀q 5lX5ih P8`ڙkmh1?:QD'3 :|I &O>I?AL"& 4Ih +M,+8d@֢`.~@)Lrk STO93wr@>o9+|f*OeEN=NG:8hxI{g2瞦K|&Ak?ofZ#C!H-)K5ꪁ,a2љͣHŽ$4 O }^9 f.|m'KΞm2?g4/}oӧy~u}yuyuy?տ_Ѷ>tj}9iq&}Ջ^'W,i!?cX YcEE1ɷDȼRKaxX|'W_ɏg/"h {a3UaGÎô%e̯.e:'O)vCQ fIAUY̽QeCYli0Pa \"-Hˢ%bkebJ砲%q;+ =3BQQ~L x*+Ўkpw1OeLD&oa+-Lz ߠۋ6izj7 R@dr:h:Gڱxu^!8bAC^XBI ,Lf ɐJj?`R]}Co|0 E 4Fp2%ċpq_BH8LOZrY;棦5cOQi(qIoI1~B9+ 1UeDJ% dg yj&"Q*^@5P֢M7L;e71G؁t LJ6z,&=3ܤ IDATɍU_|1~O]z~rwo?oo&}Y[qfÝcdۋL}#50jfYH !ޗzf>hi%ړ7dgW?;/E_OΟ~滳٭ff6!oj [z;z6-"_2blК} 3K@|"ZK ϬeB7@Ua93=m@3 d~ڢC[̧:??O+4Ke r` IHF$ѥ *Σ4CE^JΠY\Mˋӧe[w;mab4*@"w8@'ȌU+Q`UGMgA$`Vixܑ~xh{hx Wf}=TnWSO?:ξ6˲Қ1E}ط2MJ(w38CB/Lg5D)BK8lbL{E}QIKے4KE | Q\~ S`[A~LOASEM [P8L"۝|\ jwNt! #l4Qiy=Wy93Pc~' ;7Wb zL2$2"2dH8n@k׹}'L:2pB57,]Cl~}Cf5JGl;I? }&Suԍh_ ð3)B] 4jٿZ?a0`y]>]-v?Ч[]x$Q(BzPpCQ3WA{!,{Tp8 ch0V rUiٽ@DZ򤫏ۘEO޵%l?|u{miEZyD3 qnTR9Npf@.[PC)8??A]c/줚 9=Ę޴f#fkmzy_ٺz;?t"~ßUtw.Xo;ja%YdЇϓ @ @ɏzD0X >J]LM1);ێi 7Z{c֤22-!>C ' 2VgXMVvr '#P^LW = I`dI: 2Q BIjh:o^?]~./-^ۑlj^&ebGl Ge暑wGu]g1 J;re3~Y@QP 7rt&h۴߱`P @jj(@"L8Mz=s26z$h2"%2юwj., lFFo9=5P6KOi-1ys)! ܸ19~Ri&@o&U=fGՎ" l1z\5%TKP[#\BLDb˓ek[N/n،I.'ٖ.15uwk7=gyT^1 h!`AC T;.05٭kӈ)DgdmAT%\v-ۋǷO4 U[$b-T.!)*P9L/wrX>ƎU Y0*8aV}K1#m56eҾa y[Vhjnoosc.0Fl@эcE{ CTïYPsNTjbQCU i$A̞ ng_ןx/Q6hj'ÚaȞ?>sټ}v@<(iܙq;h/^&<ҵ+Zin *HMK+ʵ|dzjP"it; (;p6f%f L; 8-(B24  \J:*I~}hH@+* #wZMjByqƹ1QAPY 5ruzo޼a ƫ: Vy?R"I `V {њFHx꘳كlf>׾wv=Ԗel=|Ub!TyU:W3em/w P34dA6sB_LJnfݧow{&}yr:,,2֗UBȇ nR"cEQfd*W z&BżO @s"NTL&%VPӰ(a$qqзNzW6X1]0\Q&8&1(lxϐX,0 Fez.a,kr}If5/K y)֢7Z-?w>]WV ʣm%' oq1O'̲ Cpۣ@XK!c@Eʠߔ_L, #Yj<1pbgPtbxvPV( ]2:Q|Fl"QJ\k& \8Lbych>2䴾oàt] ݃ _Z@@]0ǖPEiFUb(D8l!- Tu F<TUZVP\ )Q/y IwDzǽk2]Q)J>y(84+թpw*I$#8ҡ)`2|CIa\:/;{9ۺmE#{-89 Je>)'7Hwe'W Qqyh%K&cg/7lV!pgTwҀXWr)^|IVTv(j$2b}*wwPga\Xrfzp ꁾYގS =橼|~)]|iRH2`>@7O$swy'g +-(%0  f!Hn&B; ^ꥒipC BWymWLH0l4^,+FsѲ1!Gwj?N3;wg6V`3&3]tQIm[KKRh1j e)KGK4} jw90&t3~zY'<iV_tԌd`؆`C/'m7SÄrljfi1vy-MNeCn՛2}A tdu\$//8o7]O2 n>6לt^RF |1RqlW_9&z  I* "-rEt'yjOjJ%Y ."I{d[%EWw[ {An,oWZ+E䆱^H'eKw8 K'AĬc@1z̬vh F3 .2[۞(, 0_;Gd220$77K&$bV&k쉠YduMijSR!w-z[RP> +x?gRO]+(W~9^bVnhvue~`P€:z4^l+]p5)켛Q0V:xߙ2Q|1lE{A%v)F 5]gYRF¥jq= :jISG}-y 0AZЃGm%EzVYP0@ LZVҶushueW–M3{"YCȊބB{ q0̦(Bc4!{ޗ0C4p|:؅HZDx1(!Йl/`2ž6^mE뉡0?ޕaTFEa ?*oa$qy^JDu\;q*Z BHz'a"l+ <,'8}߼P s3p$gyeyxR}|Γ4M4. ~) T8hfjӀ*4%9yh\ Y /պUDD =Q ^H~z.)Q $[L`L@|wf8p@K 2%Έ6o1)APZ1H#J#E녷(+|B| ج IxIQ&C˜ ֘qzqq^0\K@9ut]~)4cd¦3lj*} RpS=p2gBTh!`? C!8S2G5E^˘恒|_6(&ҭӘ MyVL/戹:Wc|z8X=/i޸Z^Mg?q|Z."|GVJ`Iտ]0l=M+u@ƈJ3QYRty5uR^i1'0mxr4 PHz&RXn ( &ٯ%NI $)lpYcz4Uȉwr22 H|;2]N`SXAY tlh|-o/ A}zYPudDpFΌkH!? 5>ގ}OEQZGdjB0*JN7z2&fx\ Sghi_4.rxҸV?,4:WZU+Hcnc_TCR$"V6C'ORvWu:̠H9dH%E &lՖ@(҇9Pغ<11ϊ' ZI,hޫA0j((DmY ! OkUf (vW:#\w0ԝ%]0.Wo).5`EhM+j 01lO+\S:Fq<,htLs$ߙ4gVo&#>z\tÂ^@SgR/-m-~?s2) d{9ƊYnm W`J&_qxӦlàD"菉7ttU .0nl}7O!ݟ {WW^i޼ye,8k&ZRY ,WҚ (6j]Ͼ&IT5BtCM$:Pa0ijj"b1vWyejMӶd7MLeAX2( "9R;Rɠ#I"ԯ hŤ(|5AΕd.Bs^瀶:݄QIg8FtC|mۭTdҋ,gS1!-I(I$QIBT-R&ƠwTq+4a谹O<f|LLOhT)$6yLȮ X[IR@e*@&C+ZrY ȘN-|':zTq C5ʜFq RyD2a81rlP86$y$6#\ҫ5HG80`"-3M.ɛO5`'̨P6"YQg }٤ƜcjWl\8CʸO>Z&Oxޡ"f=ܤު%}0F-e`HWfխ5?H45xY~=*1i1Td]N$mܙ5&xj:6EEݤ3Q PXlb`'QMA@M)`L)%Po|ygyz@luk3gOeE9;K aS!ŝt%jZ^^&J"B,Qho9 2?qNdN&nJZ("`R$ʜV@ήz*@o{) QBCqEmE9F/-!i$M yv'mϏk}1./(_O&1b<<4ZH y2H%deQ-KYc(# N̺֭ț=YbHn F^KQ+BL7PtL礵e}~7͜ IDATs` q3 A@l_27D/ys-:0ч ȝBU$K{f;~qqk@-]V3"\țMW(J!|8Yڪc.#DqCN&PdJr_kpLx}gh;kazlYI.h0Aj$rb3 'Giʹ+`\kuG2Q<}|-O~t'y]dB +Y*kD u,aEک:u5/ ^=gۘ 2I'0/'J,E6^!#O<3kU#zA+0*,юE܎D봘YxMcY$fPo P4b6SC<} WCMTUG}̑#pTEoexDy:zV"[X(H{iEt\1Pt.s>|9) Bh\ϨqC+3V Q Hm`,<ʚ86VBـ;m.h;\ШZ}F.Ks,D)CܔZڋAf`!YvKץ!{c=CO'E>OwVqֵeba‘@j d{on>o2:>QCCT/Ͳ4`fclgY᱙XКLK&%4e!/fRj7LQiN5k'{V1T^GQ.O&*!#9(q}eqFk-Gqx=,3r _F*MVW铗Lm#i~iVȿhg8nI. p 'ZP1BM4oAp.;d08 .-7_!S|ݐl(+$Ɛ0@1YgZ&^|ܩ_`@sCYꊒw$3Ϸk ES,Bsm-bTMM24Q8rg pVFth=$|0K] |3^Z@yxjˍp:zAywXD23f@Fq02}&FfC=4!P~/ H3M:5fQ )tܸZ^څ t 4>Ǹ8d1spتj2F@s~~zwz8ܘW}g F(Azk}UD//sW0nPHw7oy2FS|2d|`v>#'͗EdCCԬOqm~D[5dX٬cºmK1tA 9eS3{iNWQv!cOJ52EJ5dHC /qv/=V3:4i;3 UM[Вih$jpct0l b1VTNF{\{UJcE,u`(Vd PyUU W?0sD6»'Hå~>3JhwY[HŶcmZ'>CӶcgσ!Ejԣf1fa>Hl͚wUpQ^>D @oEi6Pj(:j^ϟ?]Dűyaŷ,=>cMFƫ7Sc4i} ic.֖tΡ.Shm7bʜ/֖D$dSPCei].\2ѤYkcIT,=]<|C3 ؆<1ti,TC޶d3pp#>7cAjp; /_H.gnP^L[RM a w3d2Ơ<=GZԌDg擵GۋBZfKQr tiS`io NV9gȠMÍ% dZA/-`F(%W@Gtr5;+D-"Lʑ_UIҀC޹}' ƌRLva0HzXun"PTnؾ7TLJ>UV)6JEV~)s~' =_B1inez 0<7T@(kzeFHA(B0AZ U~c ~f^v䎋ȶm ?`@<&O%W!wsRt3>Q(Qy+<KkJ!17f4v2}/%LY>ڲx,۶64>{}-b͚U4x[-Lʜ!!2$kҚOG>!V Sk}3)Rh+]W#BIH]yh[,|4Z:}}ss0+m`wFaŠ3aP^ptb 7yQⓓp{F]7N5Jc-;$RpEnn_,ix@LZ8shVhU20w0 $o7WPV`,}fiH_!Ӿ &ɐb`  L gZbE0r]]GŮ TfڱwC? ?jdWnZ+@ 2) "+44q 7gL}zz=@ -Vy&ږ:L\͘:?  ' {I)#{m-u^@A˓w=۷`x,A 养ǓZoI'RhޭLԧrx24k&:="cMz E,Z&"a/{>P516qqm)>}ڲ9BBs[Z}lhS2#{6.hO^@wW >m[ڢfsfBL]p- ާClR3k>huqk8[(FLzQȏc?<777c8y3[ьF0da/&E<ƔH  *fC|#&q&L2|qhy@-o1(BlE[2kwzQd]J؎\i`ė$t{+/38cb'ݏۣ 7 F! 5%pP/)*?a\,&`ޚN4ߙw ]p01ʿI⫣$ #(j#8ғ_1g!0*=KȤnЄh'о6@!I6 yLP %n,^VQω:})FsLQd5tFyy`{ ygV$ꒇ!ʓʂKЀX0]K$2"׭RJAŁaaQDH׆KeL`DEK1IU8o(=Nwir6țȻw`/m1rpB$=Z%s%(1Jha˷q%7b"ܺ4mMtm "cښ}9g1]*"}sLӧȂ.tQ!)+OKӚy YLAӣ oHy;2Jz၊14,K"",YX `+pA,# 1 @b, v؂q!~(-6, Y"ZHJ$M}_תq847Vs1Oq=r^)2I!+EXnϊV.f 7*+FQ8STBW8ZXOxa4/o3(h5rs==UI IDAT L#P炢O˦}/-izWO-^ukIʎD1n?9[춟k/6w>\a1ʨ%ƥy=;}aQ#ۓhŭιƸEt/ ӊg^_]߭fzzl= 3ۼT㵿#ᓫ-OZiF?XGgYؼ]c|I  㔕y*ٜl"3PfIKcuX^!ggg5v()OW(] waW88*ktb2uu%m9H,(r#2XK;pHKOY =,/_r `^NNNuܠh&=;Np%e?&Ó}*}0%mYW #)Y)Y` S)ks,# OvŅܢ>9,0^0}W_ݨ(&(o7(-!KRt! KP$WXI5ʁU ${v0t bU3PQ"W\PiemkQNPJO'u,qh 4/RZ08oTCEg!s $o%@oiXHWu;isR"(/'7xdΠ|~[H4j6>ǟ.o>9y}%V ^+j9G_VJϼAk._O_{\{vϟf^m9k]._˟iEy'o}qshˎwv3OOS5?WY,a>\u1km>m{o~Q>aOȿ+CS&&ՠ11 s(ؓ9]0{|Oד<]֨_XԂ_X3.fIga孱{$[I܉c|Iݻw~~. RU{Y$*Ie?,؜+$ɢ_5Y;sf7ȗQ%:-BdF``)<¦RdJ){J'e>y&*ed?UIkM;S ϫeTN^2Wsz7D{aT_tevf _5nai@hepʼneI n*iz쁣veyD(JIh3j9XʼnGGGpZhDQ9`2 %) ({bQW P@Ƽ"N/*4$bbО1ҩw/Fb`5}/N8 -HR$V gTp;2D*h0[DX<^[&ECIWdK;I$yfff3If_Gk])y].>:&|bٓRY$R^3ff6c>uc7͋^cϏ]+y.DŽ0M^q-ZʜڼӯbQJ>vee/?/W[zmzݞGi-id%uqCK L&dA; Űu H'AA LQTvsbaR+HgGJLH;.qc`j`؅"\۬\D0]9 j{հ#рj*k!4*)ƺl|P+[HU#*(p jr|et|pw>2efVcX4Lf'???߶Jtk ߭p[K\ $"`#B^6OMLD s)ª^3 :>AӴYm܅rN෵vvv'zzz*nX8+qj{~E?pG=QҔDQ$tA)% [)[)QE aD'D .umhbCkvt!k۶]\\P3xzwcm|O=z2{ZjGXҭG~6MU(Sʽlt< ϛXOՖTd+ lKN-j1B틋 D0#x3(v*:::=3Wνq ky7:q3~.hŦWk , HiѰa `={ ]Rtg ϝ;wpH0,zBfjЎj ߁cbi&,?V)XZ5NE8Ņ ,{XΝ; *e4! ;tr/M [)|MJ813 "Tӂo;{+qіzw HG|/KGP!GQg! +o&]#Nc 1lG88I뻱M),Des8iGB @aڑAcK 9E{1?8>>[z70*u~?'z{o@9>X쩳֒d+Nr5WfM{/"-rz޸)E1V3u÷ʱG?~nӊۏ`F|PI FҪYlE֞/>+u?i7;53,95B3X#b{?cm//9~ste_<'lX^8oZ0 ak'tGI1LU-fh7dppJ:`w3 5ԏ #H;::B@Ka!'{9' `5Jc` Sf'{. C(*K0uB F俜fqѱ?hLM\1?4k''#>I~<97p=_¹'X)'q: U22BB,C ̩jpv7jXIEXsz(nvn 8 %nv;JOpnpy[qjB49x!=6*?/WHHEg`BN$l5%4Iؾ0[8Җe9??GLӨgWҴ< |l7///pV+f>ʑ ^oh#c)d˗W2<'Ax% p_k \ʦVK՞*2fcgĉ2 2xv+Yغ~"jzx77~^Y3qLǯ1Z'Nw}}=v00;xnz[׵R{i=L +6(fSOJ:eՆ'ON5og÷ẓoѿo2_=gkˮKydIPd8*ODI_byk@D>K sܕda8eN`Nr"P%OZf-p$;wyid" ƽ5"16 N %(rO ( F> /A\No4ȷ@ڣIsK&u#5iO$ |æ\eaH-5:? <\ ;EV(Ь?vrl,qE|:B_kprknCG",.8g儘[9V&Gkz:iYhc)(4@RS_bvdÊYxLZr(>D/D)#؝@r*v5/s͸췧 0Ӆ 'j!dI,{a0C6bsxc\\\x)&aHgO~q焱zu =KQ(̢]Z%~,JYV3afX-8fwg8/u GQ7M[ٍM'`]׈qEulW4vcӱzalҭ1 h_?ܨ^[٣lbn1Gki1go?zVa Jd+ lKFFLA'uFp{=u`'҈jհ-Č vS8 n8YQ )dd;;u6uX\(N7;\  9E|8r0zGGG0 K+Dl\vY ]8x]TaP{By IȚ`Բ|kv(O4J 9Ȫg!oT/ ǧ\r$_#(+9M ܸMUI=.$|T5 hQ|$4c֠Ptyqq$ђ<\򅃵g+% _[pj9 1$TeeJm?>>z iAF<80!VɉAX=( -4M3FMNR'Z P <ؖrXk:YU"r^S voJjryw,lF>Åm-BهW6Źmf2mǯ=cXkwa}aY5|Ibyjf+nʑNí]OGfj3bVW/eۇX.|܉6ߛ??x4F-m/]~BIuw.mŮΒɧx$1Dm'=72- CUd`s_\\*⢲bHuٲ &Ɋ]d6M B>I-p!hTSn AHAT>!^]Ԥ|ffȋ...YKBBt8+ kֈN.J xXhB8 PV/mIP׏1D]2` *&X)B9# N~V$>vqU2&i(Z~-US닪/9!SY;,s,>$TۅU =::ŽSN}?a _t~~.Q<ι A!N-*#B . "I- TZrwGp||S {!p [Ya~F$dT,i`ܦ9 @INGPj,;:~BAhK"wZۍĥMpIWZ2wXu 7`ymʲJje <356xF?V_=>pe&Ľ˷)jmզyv1մpuW>s'm]Jz}9GԺ (j\{_mu;Rկ?˿ɫO{<{f#b׊ mL:[¨d` ;*9,3;AA\vF⑬r% QtgyrثBRETV *p 1ֹΐm#i#)YW^pe QfG4x?m򠪶lԅ3&8ZH,ap XXaeN\x'U(=)(EK"$A$wnO)jJ A!; #WW\}R A[kZ !jbX2Xbcg 1Rz4%Ҁ˙K"Xɧ7st+υH2n{?v R:N18+:Av)xG B`P,Hjk#H#3[+,C|唎A&47Dcl/QgFM_|ΒW-UGHH!y-ƮHU`(P 47 ~."81 ڨk8;ᆗ$ zҞ8fܒy`#{+Bl@O5=G*)Vv:9J+y* g22FnixsIjX׶m m|_]o}9c{g};N;j1a}fI@߲,RJ~gOOx{=Z/K[R~腷?7?g_{ύ(}`J8ҩǪ 3]O:KH>udjguC^YAx؞ڔϕ:< gaoԂU#VI:p܍\NP;]5,5lPdVJ}1"e7خg^K=,`/ d=@H Ie<k$%JQTo KN +g|uw cQj[b EWZb8NKzPQꍒE69ֳUBgȟʻ\[MAea ↍$8wDZ*L Z,у٠:ddG[-8*e$UX9sod~NqTPgBئ@FJ8p9Ű p,40mRBNTF,"x;mN%)ᵑޡ7];Q}Om8moW] grht8r>E/s׾h_Yz{;>^|_(jY/Gԛ݋U$VY+汫罬͝mβ{l?xcՇp+=0ߦi8v{ZJxV/_ׯ}w^YhZ.vw~_:#u- Pd0H+$ 4_9PKq.5!X؏|^D&*욆̩\;*`1KAD>Fεr'{ Bh~N=k_'j0>Bv'{PmThidT0A|䁩/B IDATҹ/cb)AVJ]HSl,"YU{XQs̨:c $v$ˊ+( /ca֢F &7ܓ' $څړ 1HyEWԍLj!!ց/$bjc]urrRϩSn.Tx ΕǶ)S'ߨg M͍.G0(iH)hxm\q^ᚳ?:(0Z. ri%8upYIJ=ҾPifD6@ꯇ8Pب] `)TSafVzf ·r5OzNz9K/<%~(:(Rf 6RF9f+m^ ?~h˳R{lcne/|Y5_XiM #Fӊ-ըQkٵoG~_}|gV\o݋zq9kM]\3o`ƞ4=i%5vpΗN6,Y$+ %~7N71 uFRʹm'̺ڻw~Q??u?`vQmo|ܿ8ۨGwZ,F5ߖ2SPa"'9Nl&IZިp2 v{*h!,@Sn[Fqmco"E;KMP,MxQe'sI#۸RJ!;6RpʶX꦳1جL/c1R֊6!Q?8Zݻz(0ڝau HAޱҁ,3i  4Rr"щ:Yj"@L-QYW(D-@n]-Mj9]ᦑ6qΞNOOxL ZI&sEe6l VO7e\Yr cVx~DZFfa"'''xR(T'h֛ZmKIA:BykS/-&v$O5'`g[Y`yΝF+ *@.",KCGXE3:dA %rw;ڸ^cl.F: cRfͱr^nqc'=c㠝NINqL;ri ˌ8ا-[ns?==UZCeUqs'!WVnsG/AAH\.f\̲+ff31VMHzZȘR7w/Մ6C~{ǽn{{:,#wog7u̲NuaV!1V>|<./}bԈm}[8?4p>0Y|@5~R[fV{,_jG_/ѯU(n1Fǿh,9vTKɞT,Q(ۂo˓ 4#DEb2hS?lT"QF<c,MeUΪ>#0`; o$<`?+e- }}|H5A,v\89ݹAWzC(O($*\V/ԕ=ąq>`4h*fxΝGn  iVAr<@Kg ֲqTQ@t$Y,Q5xj1֦D\\pIjP!-Wڱ?),ŗbQ9VR1\3|`qitaR*Y?:x/x듓 mqAV?CeRVgiRBxLtHLtLj2MXHZ8gGo Dbvi0m_+31ÃQllIb4Oe'Q$/A=QYpy Dk VS("l6bT6E*ߒPd,-,nw.ϯm}yGjvp}Üuc#ëjf>Z):.1F]ʮ1FL(JJb/<mW}㙿?wc,Ju}7a:j6ٷ+\ 5X(؉T)sWSLkI$A8`J'r49SsY!-|dD,rrrF>9!tE5,|ANJjA\4]d4%v{1н{2zV?sgh~~co^oNK~}sosƨv4+ <ҠW Y|ϛ+ ̍1Ndrʒ[z VTmTPRS[R(LU'*ӾvTUA.TE;N:]ث5x . `c$Z%PUW*`+*/My$)WFgluYE9SvgGP ,;w`v,+gH:QB(?- UlAUq` T$9U]*nc%fUSz`DW+4@at [(?2H#kn$ϐi/x*5uU...ܹ#&$oœ(IPYC0[]YփUԮj쟁Q'`1dSA]} &.OG8*0( Ԃ.`T:TqذU֤*i5иw_fTpU.챳}k *dld~Y[131jgɟ{yr|~BJXas)y5JӽlgT{ھp69[;m击ݮc4l>(uY↶6Sdؕg-3~9һsurbFpyJbЍU :8{<I`+F|+!wRY'7 k8ZG(]-n6$4xgggG$Q7x(\Fh LB؉%VdfVf5 2!PmM idjT|Du^81GL0',p]k52WvԄmfIN<p"btp-}!=X4{ʿۅU CdmhE%E!8ApަY1e3#G4ȓdҩ/Ak i,lAY(y deAPR ɃJ[$g KHqTH '_dRd$TXQDe9&%'I]Ε+S{kt[WaQ-Ty||E>|[)-|,n %} >,4«w>FӢY`.2,ͬ۰^moGw,?yi}_ݙ#VRJx>X8S:ǴAsCF:JX1ux4+}-o3 F^HL.P`|0 % jjgQOb) (ߥwgqvIΠVb-* h!%8` qе9YȮAd+48CuHڅj(-.xcRcBu:k{BQC6~:,yRVoM9CUs)3Y󹰻|OM~3MPPP)H]8 -F&JX[ 38񋶗RQNܘX, kb;‹V001-30ƀִX0x `hٛT:iJ@eYRB$y޶|g4 C[%D V]K4q#{F9t5Ljnd:V垯(Q ])Fa9< U#b,T&%)5MJl6rİϋyiۈ9-s}/;ˍC)%fߺeZŘ1iO}߽8:i6-v8abfR[mt:^fLi1\F^e]w=,Άof3"pkKb3͋RJ[f+/~+>)flu̎׋O͏72JuGO/d昬0?R{ER Fvqs7lFM^m2j9Kx!r Adt;)́ͮsΜN"elO WN:t4R|g&; ن'+\B&ٻZ|.m4[=_aX-cyPbaՍ NlK~gGj5V@zq69W[W`dl ;Ƽp<FIla,nx_w+20'G76vC*oJRl%]39ha/,ذ8r+O ?%.x@8ΉPJ@靰bNyY;˿tGm_zT%r+1/#<<86IyەvJ~|'_?:1or8^Y'Q۬ך˸)U4YH !& Z<8P) m,*3Ekt{S[F1  DP {Bc__ɀwRY# T5yp6N|[BDQ d(dpa0A\ӨSTXTfK*̉^X* 2 F0BAH#K[@2JUl?t*I,=u(-U53Y,gH3͘_+P; 22rQU1XˣW>j)$#IP"@S3_萐 c:'2CKpP,PP'/5!Q d/eKFVX/(1xhK_ FٚxDJtԌR JLU+5T9RJwo!|UZ h&ߥ=e@0H+HX8zY(zeČΨF79Gu ᶔRKd|״hֹ.^}}ڪϨVZ0mRhK7XQeoʋ]Km1 JS^Kܢst]O9{#+Օ=r}k(qN@"acGwm,FWΏDKE ,F>52 1#!=eʌI5M뭷pUbY== pxc @wᜬza?H@.^:**4NCP45l {ezeqF x\\X!3\#(A$/C}OlǿLS5yZ9j ?8/XugNR/[;M%_ZiQͼص9KRڌ,sNd5xKm=,VkiYhG{Z[ìւ-'^^>} IDATnmWY]){-4ډNb`kwR|r=(k5ޱۈ9HWZ5]jB@a w|`Qߑo՘NEl7 3R!`&FRSr^ EN *S'wDXd=Gj/ls+Xj>#T?!JlRRDu~Is]y!auҴWNWʨ3H@p75ʙ-/ +Ԁ;a5ȷZblv2Pb#ELCX|PZ]eI;JF#nR\ bMg`YtR F֭)Ė(L#Ν;=R}a㌸JJ~Enޫ{aNadMWO_T@81ҶgmcQU2E3fh+^ݬ2FLX5be31RL7s֖2hQ1ܛDA]N;Ԝmz[ͫYZ}X^̎NYjc.^|qZKs9{:)rDVTVJ^-,f^-e?"ܫ+EL7s4iIAgGOvV?as07=kG%bzszN< p->#jms0a0fxJk HN0A!(>LGAĖyLܑA:ZClD߿G/I Ia?rͅmZpw*/ml[OMN*jjɓ"Zz^zB.?."Ŏnu̳i 6Xatr:A/w$1uTlE[8ImI'iPR& U=tc%-M1VU@%H}2ʩ3MI_YHzp!c!0=+#~8P$2)> #?.0R5xNe}a/f;^r ygz*T}%v(F0V kA5Ð˻c%T76֞+F.I"Ca #2hq&'f,% 5coa޶mȶW7ШRW:x<>%2:{JI%rFi`1ܭljf+l,:h*P48*p,P +i.itgT`CBe\gOBbeo.//ud`A?ee^ R']|6楔w-TIj,*x¨{09SSˎ6(;bmuqICm9ZPL_f f*o8԰ r2* +rN =EkrJ vb!?5M)ĽD:盛Vms~Xz.`7qŸꦆM"c3X͗5Ї)rEvfsTt Zua>(66Hd#tm$-,ݡC4lCufF/CtN+,w)i}676Vvlz]m -,n &< ˲;5Adͳs Bfeîٳ[cvB[hf*XBJU.Z@'`9쓚k94lH6VdJJX@pbMhuP4 T<8qHX%OEh8>^"xCesvNK5r_On|N޽{@wihI*a ɪ{-!^Ͻ5Ҕa*w*b q"$-uh"gJI?jlP|a5jš@_1pM5na|,au )Z3xaT0(~WV O*JpJY'cW>YXL%Ixv j)T6SYHlT)(V_~F|%L~^nq9)D@p5 C#FV邈Z@apʦ} k+FR $ (<l_O( Vd*8 ƾ go.>jZut%}]׻w>yD>F!}fg󅢴1nu};BJ5NޫBu-o;n( XIgs" wQ9\`*cF(V\Ȇ)?@EkCǏ ~W-X5-I"o3 }/[KB#aM@n{K3-u }49Z2`R%}ߨ馐mIo=>>erΗpOPPaЯÊ*y!t(` w!oK V-$+GQi2B[T ՜uc^xACf4)\# lN~P%ުlWMQFGG2uⷳ ï7lT.^'gcP4PN?9ea첶yV-m V-íe>;D~mu>3UTKsJq'UIƬ쿘T.x(JŜ¿0u2NvjALHse)~XjڧNH<< IM0*2+SpE2#i+@AՈ)8KE׀c _@E[EŗjAhsPLlW+I 3.ex[Da%;ʅ)Q,.4@ll#~j-UWsR.gSQHT#zFA%Hug{jk.`/lyˑz*ԵJjR)!q v:x0b;e^pp'RN@P`XQ9VGSΠdOT뵰! [ \ Gg 8;،ެ݉2"JH-n=<Ѥ!GӈJ.Z4XK| +h`Aݘஜ d'|aC;v ̈j>eCMD]1ƸÇ s5ğpɫ#% SN%I5Ad>v1~&t:O,KORheXl9 pڇ }{vH3dr"e&Ҍu6X ͒PN%DjF*E´82bGBzU_'ӶbR|*9y:Tqsn25h'*CKpdV20b1 @w$`V!X<˗#$|nc#7 -b}nG^3Uc~ :>:oooUzT%>lY`)<KSjmzQ_fܬ IDGXpaaFӓoxhZ[k/-{X4LG3sjfHy}k@nBQh*XhU#.{|z(v1]__0uҽ˝7l5ynzxt2`3ZkÆƐb1GmiȊA#ngMK l98Ӵ.&gX]֙={D#wer֧g,9Lc$%Ǐsv(NΨb+]LwsxQ+QBy5Wymf$D2уEQLWzw%5ŗoN| ԝ;MҀ7-0;Vb^bHwq]EэdŘ\˨ ~c':4,D+xp+? zGr\d,[nYf\:;X-imw=O^C8,:rYH#@.|Z7zL.iq+,VK@@E^.Xuσ2}+Eq.Vfu[G{,qgưgHhf~dgu*_|K&cVi!p5{K˗DMejm*r "|#;x1DÊ]ѹP=2RZ7- vY'e5'X%O,N9}< ej~1у0L]Q"b=Psô)`IKefKFsҩs6Z3d8Et 7﫺_A1]oJϲCSCPcŠ1VjG;Q "!.[FFbZ㯋 :p Gp݌ZCF+QkMS0B~' в#ugv|4K=HZ,1\:LFYU &+qqia$ز.vĜ ᾋj]VkMlE߂M Ox)@,W^L<@4gf;,<;,MHC,Ce Ji/άX AA6iH0vxzs3*_M)@bXi^ՎwGVRsEwQ;~Zh ̀6|EFh(zvFfM %- :<]@PC7^ ,޶s"#ϚsH~h;ڈxtxPYFN՘)*w:;彐 u.9AVΫK2}ǣ38)3X:%ZBmx| ȕD<Ǐp!˜Tx lG6@F^^X0egG=w8(F9\D3\ybwLDB=R !G>sKG#~aeXOΏ(LAcU+M7)h0Tk:V'?~]|ǫ}+kXc[+`glCL8?%Q{2ŘAjLW <(:VlK:]+ʶŭ%O'ߐYSRvz zA \{/Wt4-1bb3\ɚn|<t%80NS?0MS9`+ᾲxe|c'3!ǖa"Wnw!"!Α6~B3^2n=3 vѿsy5\td. īF6%>nF_bߔgzz֊$4݀=\nQZ*pI\c^JY-?5R#J+nD&k1ѱǩ:DOO! Z +Sc̟$M 0\~ߙ6M4G H 3_ !iaPG(dՒwaʬ߸~py\v iClư\ c`3jsO>i\WqvwpEǪȲXn[ vRnhU&4O+7DI\e"g3XyvŭN˳liV k4X0osQe9-KG%eZE9GzGz#48՘Q͐  /w+1!䋾Fw;Hsh.s5=_Z%`&pA(/!NZRb/u399okpUϘ&oә$8g0y8;N&9ۖD O FKn^be:j;] 5{]1s@-cxu@ ׃l*``">\ XHG: Jl[1[>$K[Ԇ2j$n󵨭I?} -Ď=2z 8wiz>>ye\>/ Pt]rGP0G ap2 ÀY:U*PP$kׄ"Ç;/TDϘdVyPJXlݼ#pmk >><ϯ_4,gxwO5izx A6۟in2̃r;C ƨT ػ9`&Ap>Eܸ(N04ru#mYtN2^!gS;2!*=yβK=&#jk t:{o Ob-լ>(ƃJBwG)ǛTC0Ȇ!jFe +9]z8)fk(=J'jpguRjҁ -Z)W8):iB؆I6*o0(K8U aD*sIH2}k|/E 콷ti8mwGZL@\M.T=XƓ#gG iNwQS&Rzl{`^%Ӣ5$d~E^-9!lӃU ?ݖ6҂ɟ/܃"Mc $M9tq Һy(`;T} ZxgsTVs?N_jQ*onLmrjT`4^Wye5jz)z;JV4Rcp:38Cq8#s OHXB qżmeƼcWUԖH2kdW`$ǯKؾCjsv/(ϑb Cz}u aGZ"jl4hG#~ +IblxbZAt,Bp-c~]˄g$σJ MW {o.*3 ynrbJ6[LMP#:ψ6+}@ ߬\Yvf +5kޖRh*hD}ᾄt]|9.j$1pTAƄl֚*8x)?0a>/_dA9 >|*#8DY+^4B`;ƞN.L  b@TL%dRqjAIý3 m t<6i[Аx]O74` } ξZbtElrkH v\QhfY!Rԣu[K$xE:!^mVnVesB0RlnМΨ>`jyW qP\`we<{GbCk]pEpQ-4qYCi:Q2=͇9M]ڊfaIqtp%rDZk}oV_~o c&=rpDŐ<Â3eQN kМ{xL{DCDyzǎ!PY%)ϰvlX\4wfp-ۜi-U<uGt*X ԜvJN\%m*0Z[=@5л.ka-/}>뿔kߜ;lAWB[J/,S b(?[JGvMm1RlapDwĴYdXsB!n e}N3?l-{W`NaT3zL Ymk%f9-g[kh[5ITs4oX]J#Jkr9ت뷈߫ bB KnmfJ(r zu^D7}g_.bяK,r~X8yK& !(İE ZT4K5% ]oy,T.#2hnm u; yϧ^ }e%7do(}6k{4|11ƯC|:ӳ=op9Eg[Su9 H%ۥShh -u(fa·M7 $x[?ZcƱrbΩ=."3peEq01woi/#eDV45jU^ bxOsv4Y#- \уNLֲ(rMy玪 ^3J$zvrM E.O/zqyv<\:|Dy}"ccykPr*6Hr~j픱x~ks3ԊRw{[xxh2 GBor6Hd-&4"@:@}#`to=e]\6{<d%WP,TY$9j4Rnw|C8&s`xVNdК~-9h7GkW2e.no0V$m@; T;)vgx(ǏP]J!Ǐ}‡~t2wn%Z=B 5(ޫlI|KfY3n++AQ*Q^,'yxG6<3_ GX}w2m7ږ Q@k oDWYk^+5p*qƊej^sDXw0yi.e=9 }`BSLVr4_ʶ ,#Їg̬ҏ+0Uz{ힽZQK }xfLN"T46ZvE/;3].^UҺ=v/w e*)a(۷oDl-*zZ;rP^iJok12[mVk: g"J7Ձq{+ˤ[9  { i~zԐ\hECX6.n`Oj!!~ERJ:g*.Ȍ?3:`;ʄn핣<;Wײ=~ut}pD[Ζ&Q_Dd~r+5O~kO3.7I딠4t%ta|\>ʼng KD<2y=r%ɮA+ñgB*TL)M5ү@Nϟ? >=[Yؐ~{3ˋ&ɝX B1'IswF .,XYȇǷM1u&|z^Ib\`iD5-?]?ٚRfea Ѹ?ݝ_hVlc/zr^?plBf))jyG1uXIDw0Xk=EJ:Kff6e+tSxLszF`ƶj3{oj cn^V`Q2O> TJ5N~<9meݸ~M-TzCzmU~3_MMm1?ϟ??GVfcPwacDBL5j^P3nϬan} ϋ5{p$Q .m x`F D\Pi !7M 8x<4Gӧ_%K`Z1\)ٯDb)ݼ.1Qr.Y[a6iuO 2Bm%Od+UsA/6NVׯbufUCOWBk}I0:SB[\0>`@Z 6Wmt@4g{S,s\oBAt2,`[Z08`Ed O.|rp;O7+^o& hݹvariN0R $'36e^3_A[V \9a $F)[k3juQCuuƺYL_3\ uYou۴2܃KVysߡ6ձYN DTlvQf ̼jd׶pD@ Ќ2 V7*3,}^}sNk+A[ 'PB7QakXJ[=zbSM!<`*pGi-nw1ӭНʟ1DD_@31?mqtCnmRm*Jrc2ۄ,Z3ĵZccl T 1 0qĵZd0pe10Wian}L1ׯ_ۀ_5p3HIkM7ܢTA sr,!BBIm I9OX$5 tg#ac-'5KUC""iј'WBOX|s=PC1:z"[`6'HO7R<ܻS<,_Ehq`QC3: ts?S݄MşbH|@&VcTUD\FIaXO'ۺoQܺRD 3mSE'Ҥ{—cf0Jdv+ k.?uFYVڡaɲU~#IZ3L!믿2 31J[%7 (bn_l(&[aGVMK"H\OPXYڱ(Nc)ṂXTİ}ýZj,2vj0YSYтKteY~z%(]ۺzL9 N=$3nV-&lM뷛@X.ʮ]is0P^x{.k(Y IDAT@2<@0-:BJFҿA[Ĭz|Z |m>)8I%X-. YW$Z5Nir8}D<-PsZf+ &귘!%åV6rPԗ.~{ƿo/w1f~CF价 .5wGBA=M8]\AdavM آ ?±stbc8e `{qte[hx3ruR Q5DѨ>)sKԕ1 ޚbI)Ww+ *1 T[Qe"4mkWZ[fc/Md40j3!<<6pvv\!EY.+ZCEd4J{4lFayn9P"aM~ m3B.amy"}Oq콅o&tsʹ)rHdi x0ec=_5!O%3{l]uc YFO eWپ g]h<-L(5YN ;_=irdpw"=}b'EY7<3zS'^ ;t P n6w WKqFZaX3m%l3 QI[k3'oc WVPIjJnOSS ngO6 DD[Ӄ/kL gC J=L+>_*Af`ǚ@ B9G jm5 $@BRRiêA-i(MKY;'i,Hnlm'be/ϼ[k1J|S&|jY\Mh'SP<f(YZyyDN3k)Q5$Z]D$ZHQVČh{״⩎tp 9,nAԲ-}JRSjemhTQ#29i!U=FfrĸmĎ:7>>}. dYZX2ߢn<<46a (IjBx̯*.|1ŀ ]D` t /aZg@_PqVY7@fh .mJvjt9@Q?_y%Oq`@cBpW+?J{(W5z٧ݬގv WJ$?<߾}[1dGEQ^1vd5e!2jdXW?%M"aݔƝAd1i@ΈHZ CJ{ 5R~5H{WYaE4ƨӧ+z\r!J y4MD>w?l]uc|ή+)cQjMHZ[HTzzx~E{LM->WxU3}>iv3J:A{oeO4δ;dݦQf /kcO !:sBc@ԏ9wt CsNԵlXbS-xeU E6 WG"WřmP;-QN)CԆEIWݺY2Ifb 9K~*}]p9AyJI,yĚodQZmի-dTaz鈾G:C?zÃ$V9lHȫZ0wJnF> Aj*ǃr֦91DPbw·3-;CjI/Q|ݦJ4I4دËp9>SAg WI 11MF"PbL2Ŀ ӌAD%v`S.\`_r]Ҿå)\2j>VX"hf4K,&$qoɽΰ2 `~FZQ{OOn@,}vR\8Ϙǘ7Uշ 9M!=C~MXMIc)^bb!_=D[4g|xUknCϓj(>Uw#h~^nvWrN7C%:2Yapm!0v{D*1\*SZB{P 192MYvrkM) X(oՅǪ17"mHxEkxF}Y'Ƕ!I-t1.Hq6yA$`#S,u4k݌9ܴ\R3|UM=,݃sad(nn08==/8]r8Y' Fa`eXëŤf>F-k0Š}oQNP ".𦸇]-5 3AN˅U7b?pݕ73Tx{LŨ>C`kzF=/n=qCq3;0YS/yw*WO s /h.cFմ;GP,fP)޻%ii/(×e?f{N]Ukd8HH6 _w3$Bڇ{5]#++Fz(vnPV'@}떮;Bm!ф!J)2Uw vɿCjT~ ;XVDGt}=>? n(jWK[p{12? 6Hhr]?<Vk" r*͸Tt̰{kqo+'eTAhzdN}ۊ)tDP<5?j~"skm IDATv#6J1T':-CDI֣aZwNd!!uH'f!}:/7(o[8K2aQ3%T- =(jN&!L:gfNrgŔR}&A$ WSI. m:YKZ-nP0:1KW,78VϤxb`OY SPVQ FKp[ҩ<,Mz GkNWed@X]Ԝ8h&$ `?F` S1{UwQ 7>=|2!L֮O;fNN2(>II~ogcW~a5">~Gg$lpBC-m+nn.INSc]1u@"i#*lո,0{BBN3WdX\~{g?c#oN06Xۘ9-^+b1$t NQ>F}Iδ~1`z BֵsEh!2\/Qz~xpR|`_.nl,2͉gͅTr-) D %GJ̸{>Lɺ6xDu, $Qg8exVT=jgB[< 5MF:Ck%iun):5"az^fbDY+щ2v;L^]V[j1t_A9Z#ZĄHه[V K>rX6Xk8چD6tR e{ߌ(Vըdt<=w܎IKW1 \̚yw "z{{NIkZ\qN59VPMWae>}jƱ!VU\0w(l/#2:<{VTWJ6ս#ƙsbT±gteiJCڣrF0tta2lZLFv4:jWTTWXWQܯ5,-L-vKwaXBo#`З3,ѣ%ȧZQXK$v;i(0JL.j`:TjsZI~a||!?ʡwHWjʰ0GS19bxwOjhA ΑFR nt&DE|>/_Θ]toaNWIp!G`5"/]n ?5Kz`Zal&h)d2UVZ.*ypuicYn%=SԤ"k3jsJgOn GѦ˔ l_t5]%ӫ' U&ֽY*$4ϘY7WgeVk:EsFz; *ff+* REo .sb;hKDpiKLe|2S\~pҚ,a( х)FȺq<O=/Fe.B1緘&a =[L¹HWǡ&en=aBd}K3R=\-(pwu3.ZQo- 㕓A0FiKmt/6LwX z8劇 d.E2aCbf+HJeT>VuE 8.q'=Byx|0šYbS<\,= gg]YįcwLn!*`Д荪Qv 'OƧupnpԮž7r.fCgBy[T;UeWec@}1ŦPCɬl),0,\q]<Zeظ=:-|ae r'=B孵8q&xM"Y$#!hNdy59H2s_v3J8p5dG1p~|2mcS˷;5 NN{83~tsM) juÔRm mm0djt=HE,HkJrB]գ5y U|L6Um8'VLg-Rԣї( {F=)BU˃3/1Guń¢”ۍzݵvRFY B|GvudaKR2BúK ;Fs^ki 6掠YDU]N(jZ;?xxJ<-pDt?{RpˀQ!8Cҟ5=;dIw Vb^m`dFR3N›C4Qe3]v%!122(771!ӛ}cX>Θ׾D9Jbk'.=f /:,yQ_b۬Q\rV7qQBednVxQŪ%z-<ъISq%}ifי 䠠ݣ Gi c 3Jp1x$L1!NpH-,$2"^2֚mjOX_t!u ń1*CN̘dǼ r3LO'ԄLZoJqy4.~z p'&/sf<ayF.d"Xg="Kڽhvi(v(Br#:vO7#6ٻ wV@c4X{卋E<+.Sj{E([Ԛvd/ӆu0lYiZLKyR?-\ia*(f~젗^rj6f4_|Q?,'6wW8i|rP٪=x0êvaj,ym0np pY\ ]mR۔A?S=-.ki+4} ͸ z ]:.4->@RM>Ϊ->[oG6x8ttYiA:` *0šej: ]jz$ |IҶ'V{Q6:\kleEOkH(L.Cкˬf5C:Q%+Wpc9UUupZzVٲ復mTB ^VC%,l`!*.S*g9R=;(peYz͠/Q}i ZCVt4w{(ofTӌ8O,.Pߴ v_XCuUlKw!7p ̾Jxz]`$?ռNmnF, (`d7gSi]3eV%֗~b2*Y?9\g/_yUg|rbfPþAz<ataB4;bR4nv1eu-6?1es8 frAIoE+^y%/JȻyS-X_bXw }no1FJ݌pІl2xVF6\O~[hheAE{iYǤM<?+;*(FEnrzBm*y7 v7IS)sQWȦ1fE_t ] F2\HO5,m/_pպ"1=9}7qjVqXԏ#3]6T;cߖ̓ HJgFR͋ח4WqVtޖ"ZGR\&!uYQ7Yz>oooLI9 .Ypc =KE$L24 Xӥn~WNV~KbN5#j'p#uL# QDaJp IgEwT܃1~~{-DN0y.a#mlgąOon>bǿ{>p(DGXY@=_ru_뫔VpGC Sv$] #"%ԇV% e槫EQW͚I$=vӥxwA .S ƺvZFBwش7hf' `W _?ݫv6/( vVks*?by]nsDJ?O|sI.bN: i%<ŕ{h>,TB@sN 39djZxbz6r+!e!3VYXVDP{ga|1B Oߚ/[L%N9,wy6s-Z6F4:5> t""4yq#$ՆO5T.:"tyt`'&bf6O&;M{lqrDxDE1c)ø %:P-c];i:麲Zh6u?|nn'8`uXftVG:f/鞗hGV͔jˁD:d< `lږV(-5yA/Viˀt)U{I^i~28jt`"m˴v,B:znG=~4+IV ` beY;hMs\G"}\Sdĩ˸k7TnJ u+\ P?B Ӣ ߢ!jn5e64Ecs־C [C5mGhc8.O-B>S_~E#k1s4ietT#!mHoFekQ=rOfqa7g:D2h yA0bn֐sHL(Î|Ubw3fTic*IeeH5e&͠n<];^]ՠa&.e2ƚgFߖapo[_9SY}e{NHbXp\`}Ḣqy_k=:wlMlHŚB+M+kCzx:9}}l4rlx s ȴ=W^k[}FH}GCܮ{ƢR}LpnەmÉ#P<c~p=D5-#`v ZR ՞!TBz> br42>BH0Cߛg’AC:@c qԼ[e)bf$9/S&-ϚF.+Uw Q&Ԅ>n {`xzيըJx!+ȊfaV"OKjzwQ&-7n`w7R` =wq 2eoۮ\9W304@øaQ<=9ܼ+)8 eHwwؓUY\Λh ıam"mu")q2P|[iD};H6y=[MxzVn{ADng]+GXB&D[SIeV1˹\SSJ3W{@͈H IDAT,MjLmH\~S z_=v龌+4G/W,Z-Z-މ .M 1 kn7;M: )otK2J4xXQFB{3u|1|"?YYJq7 {Xsugn$d#{0u5cl$֧Wo4;5l `6;:xeh<C4wh+Z𑇥@%qG0WK WÜzsdٖ$Ǒdmq(zI95 AqoKVeEۢFMuAcvT]BXPϲſbz~1^t/z1]n:T7ьJӪ7 ;<{%l'+/Uy5`EqAQ-$`x >:uyO4=?ϛN?/ھ#(]yPކHh`{шj Zhkj$p ZE;5# Hh20u6.79PȰTf6<2\{ӶNڽ. 9_吞3C{uqr|Ca|ޟbo- d /H>.VL&5wS-fgp'LW谆2hSh1Ct^'GlgPR LwfG5 m_xEZtcUkvxI*/(| н3B*7Yɀc,'O ?{Vto r_86? j7b*1 y5>|cz+Feu(l {K_AQ ]IbT|.B 6]0j#h9nqBHIF75@ FKm?~(SϺm%UR YA$uL!\׍^.=0ōju Ӓd2y/:7=eZ®ro0S*ɔ(k_gzLxDZ;%)PFZ\S"]1:ڷ=cl!R/&ȢS|cZ2d>if3(| ef'$ ~a|n@v7U(\PU>|_A'3c `HcX/ӕ_4t(ݡc 37͇͐pEǛ~=W->TvL~gU݅6m@j/EgnyxK[4J 4"~e$9P//z3 yJeExI=T }hC,/*z ꪿\F_~zywF6V;RYi_L Ո_13c)S抖z ' DHp_J_O ;nbHZE$;z.2Jk>ÁI:9wv&#3," 2h{(ᵡ6pZՓ_3]=ʵ.f;')whH{kr߯GTVHhw`M;7$*jT0(wh-Y?c}=Uxc\Yoj+lveBufR#,5O,_~Pj'} F ﬗg(-THD:+:*22&z ܔf[(թ7c@fx5@O]n͙[*m K:b'n ]tu-c&-&⍄wt2&LִfbJ$0/#j~kAP.p x%;Z t}1r[T'FwQ1"M_({1?hRa;QeӸWm[Ͷ~hH{zB|vY YsruEo7~+u= $m+oлZmNnKBEx\w2܃g=$\bҖCPnX fȷord#dGH7REDuF\Fٟw^1(Ȩv>o'FalQӕ4hAP5tQɛ^6fQ'֭?Ai jҵ5i:v/ FlF`vgQ`̿ofI^ ܝF9PV+6X$FyFW|Շf:GUc}ނ\7QWLjKu"_5{:m΂NNVh~QrNc[ qJ[<=br /_ixꍨOgfo2T}Դ1Բ%ӫaitnT?q3huMf'4sOPzS%4S!_&/r;4S`xQ!JaU٢TT * GȔD7&5\(J鄀̀j/@!cy20ws2WSlCMƻo5bȻK\=5=`Eԓ+poj7b-O<;$2FMdV^`&i7-0rlw]ͳaB0;;e6?,?3D&=e4kwgy!UBq$刡[>J# 1ڃڼ:5K5.AK!7AL1gΛyx_ LΈ:HVb.|2(b@T9X`d]D΄ʞ]kFQF@nds4^[i6lA\3Z.^˪͂<_ƌmƐ.Aly/.#5V@og4< A#z˲Tu7]o߾pO(7:7+87݀=_FT.E,qK|*`j34K- C:Yh$Aڨ4(_GTTh ıjN~$?T]"Ӹ_&%E; "=h>/1=*5w8@ug uH7%־#j%]ퟪn@,a|0br9#Zug gA"VڢSrc)WA[KœaZjZ1^sn__-fvLq"'z?1D'hRZvW"aug}XS4B:=ưmTژ9ROzMúOԫDeʽfOf ?͠NG蝯#G臲8zA uHizu*2(iC:-xagՅ<8Bpi1D4~17BhL{{JTJ=z2Surgs4^8r M1MfpW hG޸ E#Chݛˋ^2>7,F`u ؋|DoFSBF@ame'GWߠ}]Du>[yF<<@.60;j:MilmwECEKӃg|E12 l<5$F[gڅ ͉MǫF$]>}2թW+o : 6BbFۂ#|-y_~zۓκ5]w枹m&pފb鉂~@-Lz%L䭫;>]Ѩs AsHdovf.Erm 4DK}ofcG.~i6|EƞJ3wIaB^V|yQZaW÷~#[ORVS}U2JcXўp_/.w7FSNr  雩ә_ t3f,A* uCĀ7F-f v&̠O5φI5w(c}! 胝#y&Bb7WsPZu̼b~ǬڤA}z'W_55kQ6W>?$:- Y"q- \ eZHG[6n:uNNY(rxs>t:X_1JQ⪸Qh\h+N^Hy_4 eor~HQ0ȱf:Dƿz1Gs{a !}79G^ D*kz<XCA 뺊ifD]Zf!􆖯/OP< PqDazQ5,f)=!׍3Wؗ F ";4u#Z 55՞x*!MZj+<7TYZ NwJfsUH~7p2=-Kkۙa\qd2鬮;厗w$z ߈owԀ<[܃-3!E YT]O{_l難c?4BK'ѩklMz'n!zlw3S<@8Y7472:n{]~lMZ SOrΡaϧU7J@Ceid+bTc:TRJ90= nWB)h?aq c˰Pvzb GnF?Æ#-J7V1n?ad=ꍒasEC6)A[3GԥjdǔUKtGRأzЙf~?(xΚ&nDkgdD׳7?7кߡ_FaX͠V@`Odxh}3tZkwm5.4cHi!M߈>mܝ.>o1AFogq޵#nTb4[ )wMqmYH1VaA/T`* cZ`*Mxٺ9ۓPvT`EGQ )^_fr FMA]{װL(n@.3yGzivBrqQڛy{%p1h2|ey<_6Շ+wz^1VR~KKAaz{Zu۴d0/˃rE1< Y5FӰȶ/x+P tk5кS 9\& '7̀Z=(, L(e9Aހ@Qy("/k~aS0,17-mTf'Eݩ?̌Rtg4rar=HˇV,7be GF|3EJ=?nFiOZ(E{k)s~ƌMMUjWN3MsQ0pԡ3Q\\^zΝ5~FL4P{8fsYυWElgZ>~ y nX>l v?4329e"@h^ ? *49vC ̇;T- d E.njZ+^5zxy4k Q@ Za0ȯAoP'\07 !`IX p嶘k_l"￟7FQ|ę]}C枡BO|at&7 w;fM59Fu 64ԡ:EV2e\FGǦExP{.Z vZhbҳWOeӊA6QKWT=$yM&"okHOf \M1It?#CG b t]I3=U'Z/[74]~kpB s*3vX1|MYjRQKd.- 1>Z-&ЄXp-H<`ko@sȒm۪Ш =ږ-&EW锵oP#? 7C %= YtRBe}NR1}bco'OęVxhEy F!{RWο-vFܯpA&C5Uⴵ_*gfRFN\fܬyߣrN9o"`}!) B.haP;41ϯtL|BDmZ{gzi 9wE5wiڛ^t21ŋtzr 6Фk"h1S7nȒ#|˶O~@o1NT]ƛJEf~;? h}f၉\t>~EE~$1z IDATF]/=]ި&/ T,bтPVi L"*u"CGAbtI\Wae3T!lbYidө ABn􃜰j*LyBb,}uz7=?袝Xi"W(e16М45_ (9롽G Midx};JE}FI3I@w6ЋW_CjbaNzBSb(k}-7w(T`*{F㕥jsW4,igW(qY\[UE^ndm{ɿd kż~}_e'+@8 |K /2%Bn:"a-!=р T ';jGZpM~dM.UnCAȞ*5@Ӿs~{Sc\LPؑlёcC-xQh&3ֽ\֭b^m>EDC!= F5cA}"6R 5CbH0_Ood4gW`gcJobi) zWTMMV4/Нn~Lyи}PwZ-Ct d];kǚFM]EOKSsPPJ lїVf\.a"f)CkƬʕ =x v/еY0ߐVuPٞ e=7B̓lXٹӱQeBIzG.!R{&: zPӠ?36!֑8iv(=^y6_soLL-EI*S0c8?&qLh~B|D$`_`e~C~UM~L#k11}?7h~$<чPʭ0gR#/g>{&4ZFݒEC/NX{p J%:N=~tѭ47>+?yAR<,+n'5D JWbgȍ. ҀHЂөn[`S^7}~2{yOة)QVP.X#믌f/5iAsL+!kȉӣYE=1NP3TkXs#O{^ŔˇۄT 0]@Uw&8{kgbT;"] `Dm(` hxSt?~(H۷o?~L,L esP . (^& =M{@ހvLDOBqJuU]c]gF6 23M…Oty]Pcۯ^~OSPٳkL@n4ڕ.FgbO42rL T6/ጆk(5$K(\|d]GwlXtX^wh\YeXyA ܛeFk)!3cөg݌hFިR_0ϲ;'՞T5}Pb9ArephpD'=AS2Ξp_kVL6]14SQtPӒv6 PS%Y}M餳7s6(oh̰1޲FouY6夡@ *3Q# >izzP 5`Syw:&^ֿYq^H AқACQ%K=!<=Lk[K6zI(2 4 PMj& <ۍAf&/'vI bIwE@61({UZu{?xCR\GAÍY!3ۣ)PקZk"-uf?گʇ;z[FŴ$ HNm8(lDXÅߍ\TL;^4LdXx< 2R_D*$:pnӟ)O 2C1S=τ֌F 1yj(TF!#30?wn }"YT1QBыn{heGD,>U6'2?L#(DĜ$]:" 2vhu;jOӠе/2p=f; _}|¥C2}ZG.B?"E/Sjz@N~,%YF4j~NƉu'QlQeSo>~!ĭ8P$Zi=:beqN0i^̰wZuBl/=`fQce,#!b@ՙlān(N߹[_Մy1%Ӳ2}nچ<<&Ff0eMУL`hd* Yxs q~_H֒ )ө?H??^1Zw@ x1R뿅q4 ؅XN7Zf|QJ!oH\p $͝he>Tu+ȐQp )o4s ^iԆz5y$߸Z}O@28SߨlthZu2}osNh >̫bUR~O|14,񤛷nHoG[o29 7.Z9?C :>-MdRt=}O:]HFAAݒm=7 μho@b[Mg Ӫ\a$pO6Ycq^b7΋F&nR?=IdWEl;"n`W` ;%ݘnD;W4!.NP޴ľI^₟1@֨ŘV"mؑ[hx#ZJ֑%x19͖ivq)Hll= |<1 NοodI (䠧v&pݡ T ̄5YhlzPx|,{ݵ @ah\IU o#J:|ڤ }<ܯ"Σ EF'd0x68\kة> ZwZg'CW  &P܃HcFI/݃S'aȲ~cǤ?RwZi/:^8Խ(o1jn??z;$̘uu{qxI?Ҙp YSYfuŰaB8֠gYvWo\;@\w6 *f8Pikx;3Uc Y~fzB ="u ѩ42fƹ~ÂLz$g:"gԧӨUa0i2.Pz)c8`3ƒ38"\n]% 褪;#ƻvi]1z{gިh% B(Ix"kz`R3!@?bt^CАLR;*t~;V+xdeSGE JTԄzbDGgM'Oh`̀Vm а1Lm.ziuԻ513}b tx?>] @DM۽5y.ՠ譳tT|~ (O賈4EX_~VA},N0 Hu2J kcrz]u3orW c(_UEJC׹ zhpt؂WBEB葍_>y#h3MY;IR3Fn@RƆ&Oȭ!N=j8Ab1 h])䈙=;³#}vu.ZU \fenj# }=}=i'Z+a#FnUwOA zFL?(ipt;}_(]^q4OnL;+3Ayhchz1ֺy`2EyK`sji򷡍mVG[63Bab\ ºn.  yǪ4hlAx7|x 7?&H2C }Lv%%ܨrD2%w(#&!Q\B}UYhCc㉡-w&W'FQSS}=v0(Jkl'tCf;:'>#]Yod˙4>qP*~@A gM 1n< DCji >֓mc1{yo(nFQ@喔R9pvTuJj_k4\/oe9;d1t/F}x=[PE 2|M'@Q.(B7'&u^q6x`x>vԯQs1[jTѾBx<4T!X?-1Jo.lX6ZhjZWAev/mPC|*uJpK+urR4f4_S&:@mK]qAuCC/+|X4ofbiht6: j;0q`?>#:0=UFr5`(Z(`DR.q*!xW.Lm_%Y 4wPfwpiFͥY,#Hya8CWTZ32ӝm8e3X3Q 0 *mZYxm#1T0v]xyk9vhzika(V)w{%Б`{ozڰN,'8B޵3k\32pٚf̏cBח̤7дOb՝Imx7 AQlo2r4`Ϻ<6/WF^?fRP2(FSNn@֊! P蟢cڔʓv_W 1 ;ܩ>b:dDNEIpf{]oFx ZE6]vmg) 4" >mEo!Րԍ1[T4o!qDZPW@E #ȏP0Kuq .Yl?{2 \j h`bYC^1UփT[VoZNwLQX6^ϊcezHG蘯sUiIFm'{Skؔﻲ-O=|=Hڴ:]Wtc6h}'j;mU^&ċE)y@  EMCY՞([?\`\ƣS5b!(c4>VhQ 1`B3t 30=I3+mW %s8jb( WbT& eP f7# )]0 fx~"d$ۃ3TnhTpgQ'vw=VT4@,PimZn0Ifu.}CpB.k43Xc@7z>1"Ӂ&jC\H~꣎P'-dB0Cc5_>ߣpp^Z{¨^(@C2Hr':6;#k~|# vA#` #n_u's{aqæܨ֏}S,$CrSc[/ol"%_!Y !Ca@GLZd3 QPa0qTo W1*FoS0CH -38!6]!s)ia ŵsBh\Fh=*=pPqMUV܎Z)u):.:z/T{PM"פSPFE@{ߓZ݉1Z&w\,FSZɜ BpE; > 8hZԿEm† ŇN<.ΠB|qEňgz0;T6h#6ת}2Y51`NX5wtxWO0&j [+"ώBxְ" Gd,mwA"5X_fQ1!'{K:*1zUQ]T+63TtNnnJ(a1fAN]Pt$lsv|NPE(IhNvt]Mh#!Ƹ#oy1V3b.BhZh(sAvX)'Ԗ j8`믿iTZsBb{my( fW$<4%1,ypF-&7K V7fghuBkpSbҿ_B鼀GhhO@zUfP8h7P(#AupZ7/ k玡>k=䊍M:j\iS.s0(mYZҽ-zk`.' -IB0\.4ߓ#L ա-Nn?F̝jkS7!l'E^p<7Exi5+xQk@"3$o$+rG  UpʴʴLzZbA^z| K*CHˆ/ii2w6!6Vz썯(وENV΄@>f,Yo^KZRZ9bE MV. 1`[&RWe^@^~"}2~.}rV{Ca~gQ~:i0svv&jO?dTwسJU.2P썪`]gZ kZڴA9(E C$ÕУSDQeN@25/ݟ*SުT@S[u`Yc iEic'FZCڠ*<7s2&7]RL=<i+6 *it߷Ba#POmT%iH)Wu'}8Zx8Bn>'d֢CWdi`0UFN(_7۷o,6edSg7S`Dm_*]ŨÏQ‘ FK}vpP(Ay@{\\9hlɃ^***rӈܩMv xвq QzCP2{s0lS>ah'<u?nh#/^ Mbc]7 ׏0 |t*m# 70{񠦷A2|b `˜ Bсb$Zg͔ vw~ ٫@Ӣ{PVm [Mq-ٳ޺ M&: >ewTmcIh|"Aͨk&/z7p9EjLӦl@?B9'Zf ;ꡳ$;1N5b `VLG(}}y1 Rl--a@`$Zg,UM_UFW I z=P ?g0Z:f8_ ذ;JLF.Ʋhn(2]M+61Q3 ϱ@p>AuOЀE[@7ZV e@84Zy҄P M& F iAlA.yӏ_??+oGM6x2b:Ԟk.MSJ)`v@, "h|xݹA(ch'hO 1HO^hlmPB*/Qá}4 W!Ķ;x1w]P;8Ǐ~A_Ij GhJmŬ3-7\nbP~s#4g~J܂|teo4v 6Lmڔ/摬ja7@ S( :,0]9N6<puȪw}0[ALnFj~NgFS4ߊ50"IXjpbc3CUKSۡi;)<Qg#LQ*YT\giq{i:oނַhY\WH7E!~qA1'~܂ 2O!UZlmܷwF*BѤœSȎl}V_rR76tv?q7X =tfz_@s;< i ^H?Q2܀Ж=w:SZkFyDF 4]+iejӣ0vZAy¨)05P:Ьxh.;w0HN|Rz-8Q{utP4n< Y&33\ZfN9 ZPD_v=dyÐjBywxϠQoJdЀ[DWo6s3h],0U;FpC%kGǣp٘}L#Fzehhp@.Nj&7ӝ:mǯQdc(&^P5XnO+R/"XWø]p ˚3U`1A:.ӭ363]=]Z텞9gh]1n'wH/l<m- DPlpY3PQX.=Q>˂xS>` ,XƜň%:ZN)~~֑Uq<ǯUo{JQ?C?ZjtGt9P/rb4 n| ]>4<4h۴57)1u) e בet=4 i@&O6ʯ{bV处qN'qݤNKdQh rTq5 GhiR*^d˱#fݡ顎Ť K_ sӗ3:7 k}fm[[ BZ1]h 0ـ. (x;|h'f{,RI)6xOTg< Nۊ%=܂frj,LcQjCu# {~2r,9)PkR2'F:bu}udDM}%a~x=M_4Ў@y=׿`{ 5"NORX :]vn 57TF.MS mO/9=ZWŜsg@~wB M[9.i.4tZFEoFv BTw&T1}A0'P^tm ˅LoQmDڢ^<Wh?bEMOǐInm際 ՝,3?6Ftp7Fok)/I=+x~ Iˇpjk5vAG`7浸PFc:oo ^^X>DYa:fY;R>O!^Z1ycfm#*Ю OY-֕NڲODʺj14m?CqxÆy!_Ji]dWH}Ʌ=lT(, VD[wOqx *`jR5cKo8Xku^ \i]7X (76+ċj*a؂YoT;cpC!O".+@\'54&}2c_.nĥuMu~bʈSA`z5qW^7#o8/Yoӟ )GYwjФw|uA8Q5cn̪`^i/a ܾ^wï}V s1F9N8 oc;,3z%id1]z:M&e}n%2ztk3`(h55>I(f 5R2w0U; hW+fC|9:ÖK4&P1z7ZZ<= mڋjˁ V÷QݡUhf0I:;孇Mu7J /Ckbr\E l,~:hyq=Y~=$'֍SհX-;R riE=*u+#9jwL6,Ջg٨^ɼ]|!\+ -!G;0nk՟p'm @X&Z+5>ab`hDW*$̿igVF ͸Dj@ ~Mm!`= jv*Jčw:뿯ϩj2x! TI-z.c-,jdS+ di)9wәZ@BJo&ݔ]=;h] VYUOGEAj ȤmmA0z&*l VIסG1{]"+Q4^ Qn@{䇂ŁA9lM5`@7Qn|иl4U&oC@zRaUY,jO[(cț7ÅJ`EY >פSG`;vD/M3u1Z* di˜8 L !>4ɱxPe(*,R+^r3KPe][ izd˶Px>XgjƒdӀ "\i0JZ\Eq$׺Z#Xk?ftxeP*ҿBb4/vяA;z"/hD{(MJGZj/ߴB-TլGxynO[U,SV4ucSqLgHF=^gG6C{&с?r67x a̹C+;co6,QOF-#EWNΔJyO-ڈ7-~48v?8Nt2aڇ~*qtu^+}>-{W9K]e2Cg譶ָ %*:8~c:Ɣ0ӠCbB WŨ~" %AF_!_xbPE;Rk=4w.-twJXпwn1J4B`QT8C1-}M4 ^B܂™-Qi#榜̌x}jdxבRG|x,tiP`@k:94`{}}3ƨEEridt^qy(/U68h` 3j4/(9!-h/4h14%؃澆BwLgZNh1m(l47Q5ja''\ɟdiGY'w/dU\LPu 7[@WLIӠͳm"ۛiX=$&dѳُKzc] `;H0z7GH5萓ٞkuF[P]O^΍֜HW=v/T9u -hRDpPN?Q&Tنb|~3@ mm~",x]y=O?yT`<>j FFnF|c0lDP(uz.Wl3E=?-m)~vtg;S[1|41?qS`Qym7,v:(Zu`\wh= !>+:ct頴|Q0SN[}Q Se@ϸ)4<1=3mI2ױ# qq99k'E zs_DPOnwn 99?SFI:VFų.ua-ms{ؠv&7< .j"of I4y!7hFC?1}"r6HݓYگ]_X8]줌O3UWGFN l26mbRߐ" ѻD, 5E!ĊsWqv\EI%ݩ(¹#(>Wy(0xZLmi$$/EDa,Ў?޴c譟sXAꌌ24۔A`䯎eI+B dѠ+L#"RjNjum`W4׿ OhZw, lC3/OxAؕ ) 74d`zںT =XPS,$篿M1t+NԵ{UO&Z4&"Hh (̛Eԝ1C;FUVRO?оhZhG}AC7Q'/$ 6N[AvѰBrQ2~Ϡ>L (ve:Zo!{h@,ӗAhdY 4= UyZzWTlT.xhtqA>*'$w4=d-L( 7,zgi1=/{OYB݊$:|z+tqŴCwoeɘM>`T*ieC (h:h}rO„S!2)ԷhX{Iz^XkaFQ,CmBj=Fl翐v(lM{h?;UW@Th37V70C-F{;p^? $lwnDŽs٠_go0g ˨nh{ =t[#mщ܄ d "*C>kYDOF o߾pسQL:Uu=i27,Fw R3ځE/F+SNE܀'m0= H -F5I0r=-@7dִ2ڞ<%kl4Ar<yN'sJ:esm{MF4's:pJPE CFLryz &s=s3Vk IDATnpol]1͐c(wu||UjT-B4t֢֓- wY~aÞ%0D,37ԃRyTĥ9^\Ǽh+}Ri=f=`Ztɝ dPoN7nxu&DOE<ިou>6UIlmoA+n>L|CaWqsnà/ڔ*?:w(g(zG4UP"6vYہmi7fWHkB &3;C)G4_yOuZ(hA6XͅⴊZz=zg^AB}jn`c02Wh|'(.=AٶH;x;lt<,%o6N\uFm-b.CBD=Fĩ `ot*)0=])+ʉ]w0<.'?aFwh)KmF=`Le u[~rc3dx7JQ=+s_H=qhљkސo[ԼzrL7ls7=u]?ި o梹ѫ}i&:cB6tքF5썊/]OƯiLY:Oћ(5#t[;E]i qm4ٙKmԪ _úw)g5兀҈ʅgo>`O!W9,~V7({2{H̘~^|[H]Kt/׳#13yt/ T,mfg}==ʵit3R:N ] Lk= G: wq Uv\9#btS$:OTRzJj 4 -z9>;O~:ݰF˩zCjӞ.uU" JE9ƘuLjw  93ͫ`WYq,YAkq<30=r U8W֑BpP23gFTCqGg11߿WeǫZP;!QBչ;w(nN:&1=aPs=EO;Fc 9o؂y7R:IޢZτ.K7eE_8 0oCѤ^( bm?~Ь})AϏs ܂W[S7zE[􃺢w8iWT.H%WuҤ3blmu'v.b]dKWcR 9Pm'odH?J4f@⠇D];bI˶ rBQBݴ/h(?d&0Ԧ@y\(@Bމ~G̀_=`W4$ںŋqdS jZڣQ.;}Y$Y4vOPqIU e m+xeh(7k13\{z5ّ[(F7Qי4V,^4 ;VW#ůO:F遨Q1guy)iI׍ x` JǛ.Cx CJi ~]fa{!B- X~N5s6c!PҀv<ݵA =y"Z*S/zZ:'JJӧ; ):9N7b&ڢorV4;nBQ._1|EX&랪Оk5dѥx/`HGQ}K1NRD2SB%O4K #?;u zstx;]xǐ?VvE11T߱䈖'x%~GAd @|}v̺ڝ:F6ms+p &1kbm{FӵDT @!Lj0,Ñ;DdAfk`ю1XtS;T9dΌFdYI9ֆq}`8wmk?, Wcט,! [ /6Dv3<3c7}J ,L/>kfGȓ RF:0q8fjr舘o\ԡqM͘s/W6NRuڧTQB^sbpq׻ ٬?n҅P D#RLg@Jc2UzbV^5-pPסgd7%MEQG${x$JsBEVe1`nn^B UmR^ȍ: [|;j[ГdAi܉:P9 ,>9A}w3Hz6c#{fRAOA dRzԇCѺWG0oFmAӕ[,LW#-31ҽ-[9\@!LVni_ָ0cgF)<1*ِc\+`V 1AA[Sa>-GL⻘)6u ?&~~%$hk_ K5]ȝjG gC$,> NL*K1PL2m/2shܞhx.!'<ڝ+q, 1'y3Z=Nd믪=2פ[i@e>>>czãr3loIZ@iY|5άtz"F"n 1!mMMGI=)?o&?/^d#Z+8'8b齠-N$< ̓36)nxN(~PW2 G l oxZ #Щ;HsP~[Ge&Y8`x0u=='DCN-|SA? zܢ°c|A3B24Eˀԇxjŋte/j]FO4=^w22e'z;{%<@'$ê)<{]-}'_r%w0tNmcL6Ј~@ȡ$8'>dWC=j|Ee+6ީ%hoAzCD's }<]uoXK?'YqioZ`S*ϛVk/RAb$d,{1?Úi޸'*چ_FBZC3ǴO?-f4DEe?:dIG.ԂDHNJ]Qӎg+q~.e6FC.4=Eo~moKs RNt~5OJF,_1אBxSG пo+-zěM}kaIw3'm\UD h_t`j{"ݤ@-=32j1Ю9U-+ M;sr?es2_qm@}~mI1Xado t?Фk@S'u>S ܣXh)ʝhy֩IFkE4 J6b̊㍌VbB <и \S- Zg߿@ٟ+ԈK.+z YVO\T,ѻǦ|# 7THL> na sspQ8irz$8ԧJs2P:j=+ش\jO&[RSx|e0w?HP/X? lhUNHP:@=“ӟLc|2Im!Or3~Sf wҌaJd7j_~e#}!<,Pɾ$b0Qa4 +yTxGxAgz3r4+\4@op C=B/:]Fhӧ.ʫV7BLnnڜ4FWp6,n7,kySL5y/fPw5ƷaU1 ?T h}~~~\5XUmc\ڔz~܃"Aa;Z (RTdAyù.<àp&NVo+0T6zsZX)3rў`CG(`5[q7qd|/"s%n y<ƏCl3a;ԧ[GP::e j̕Aώ ,eC7B A,̬qO:[V.  ]I- 6`.xŒLA2f1~ECm]xZ@t';7qW8eb,[1 Qrz!fd("fևV6Jr~F,?gh>m-BFYLFk7[G7(w J/?܋ x0Z(`~"2bG m! "Bhu8[1`R:!]Iܐ 7BLC,oH{ Q_C^Qm5F\PcEP X LDKI;fTɤ hanPJ8l:yYo v |[t?2$շ^lڋ .GWOvhԞF̾~JF~ABt!w@Q U'bˆ^{3d*t(uvV a _l[Tpp:5'\ҋ*NP+_c 3%h)e0ZڈvSЄ<h6 gphVK3ヒ@ofTFA"CA[+r? -/. +Q6# 6U}wL"6*3ـg,rYLK)(R6zxQܴ@ 1iNA؅~·0Ok@bp}Lu=i:Jvb"%ቝHX \NMf]\(k (o&v0؅NeN B{Հ=S՛:  | y+ C?qxi-oey㬽+wUxXa*u5 t՜XETc#7+xuD`Fgf{?;3`+"B~?SCTa$ . i5Vjt'>q^(Q74)LakĜf33k>zȵ 'zh$3\hx(NmB02k"_Df礓Q!潐x`۴lکgTϣU(_SW!-h}zި!uNJ6Jhz5¡ ^Ge;@2 {OHj)?9o \uZ6BMS AoOܚ=A2M݂'E=oAm=Ût`=0Ch{Po媘8@DyOtfNW}#lP|%JLBx3; zqU hy1m ε8G n?ީ' :A7決\ؿӨץ0RKt3Ƅ0oҴuX kѵSǛQ@%(Ϩ[UCd[M*-^d" [l/6#BK)pus!`J⎒itg2sRA*~#׿U`n<_o:+zECQ 1rOùs=o:_ uq_~94pA1û+YNĨ=W_u-|}=D.Fz\|4ϓ2Վغ3Oit8.M5tk½MEWI]z<w[~5{9hm#%-Z2iT^BL.eǫlA4=58N[S!{@h< jҖR&#XVIh ˟Z_yo߾*̿nlri`d`P2"7&+[~*(*4X1I F~E'&ǭٔʬu켕5 8Vb3'c>x3wf@Fg_I\Pvwt6MYaz7Ai>*FFMvi/geLmi6TRZfhoyQ5ğ!&G;#Opi\OX?>>чs\eԅhT? i[a$~V@X| KEo#tvGh EUkk^W\iCQ S5+I/ޥJh"- :u+>lڬܔz|2⬓{Ni Mbዩ=&pvP*k:h."` }"VMDkciuxY *bPAMKbrxY!eqP0Cvsꚯ6u11Պu#OuM7k=`e'PŻQEjvz =jA/vǼ ɧkNZM*wq_}oXWM#"Lj&Oe2)}"jõV7Ws"*"ʠaR7*c1(#y>7SytQuO;p]oR @ ;>nR& ڎ, bR-o?ж15=f< µ &R@F{A>h^|Cʮ v0CV[G(_/d6Ζk.+4E4h Ne-AݡS7ESC|DY3ߨq;kuuOJ *7y_U ^Itӏ~'* ?\zW7x.I^oW~SF~wЍ+66:H9wQR6ŰcOG6|?1w}^:32 5:U\I's 7iE$'6l9a׺TtkTpy3]hV[jBug`Tj<׽f)xu&\4)U| q\G6EJM שO`naν(tyAK17\x -Z-Pȫu1ӺJ֪o-foJtͬAߋYj}Sn_A}@;OeBЧ[ P.Ti rx:t{^5 ^7s&ċ }iWJto:;B.ZjI 1' f.7eB(B)Ô \8O~PDSbkp _, '<'@NqkqΛNTf'A2QC~f ѕqOmllR֖d,AL<@xk|,KBneU ZH;y#f1c$qt]cFmShbPY NlU˦#E<4LI yeO4OkŽ%:$f f`4c&0cPh4 yO&{%Wutd6}*iIMad.^W~%{n_-1kOW\z_t ]Ę0",B$h`vep訞 J UN;NgCQ{aF:/#r(-${; .?=  IЋF!܆X][Y2QǛɁ`xCYEQs=B7|)Z~%wH&UxJC"HnmoeVe? Tr~`EF?1vRWvӠ?HJqU}2'0E sGnV'7SAd4Tb6&c gY?6Q0s&T[R~Z^jg!4GBf6+mz3M:g̱bpmYH6牶n7u~Qdhe6h=A}_P*k|sywM'MρTC-B}s47<;8uj+DC 3!D3/z~X(tyym'ndzGs"ʂO/ke *\1} kqKPf5 !Bs LZ<]r'= (|e(uSdƂY>/Y ߌoT4]%/b5vs6iPFCMg\Q[U[Lpw%/Zs;Qvx.{<0M'?W):C኿ Kf sU] :d"lY+\\yg7?Mndtb](7)7fAH xafC~~D?(̸̾mjX\W3zbk( %LЗ3.|4a̿Q7=@mZE>c6Q? }2rޫNv{CRӨיk77:2HI/N+¸y =i{G6ܡ-^7Z )}"T칩8clFMfj /f:7&C<߿Zja}Ή:Mez5F,_+P=xw4BѤ*9':MaO;(Puj'ڝ u*h1XG|+z1;mC3i^u_/f+=#f(9NpE &txGjy06݄cH7kNz֦ڣ%X%*p/)cVWն\4a kuÃFv͈NR"Fq:uY09}3J` {F~Fru7j#Mo LJZfIŗnjQ6[ zAOJzN׃)=h\|n WɁ(7ѓ9 ,U Rvٷc@kLo 5L(5nx@6;UzDqa͇W݈ IMzNEuҊS5.M@Kؑfy3 5ǽMh՛~ }D{D?d l tϋwblh`%ӢVr3^ 8C 3Jh0T, rVpaȚhWat y;0ܰQ/ҢGsF)T35(n).m?4>\ Գ1Q/ ~쮼5ztlMStfaZs r"ј9z2!vT4XQ(XA ~ՙB!<ZG;pɄ!IWjrgD3p_Av\!\_TfKkc&y9tՄ,C Ǽ^<_ 5y&4 3@L\x]qM1a-Bz;r[Aeg| 3Vcle=AۂAUPhnߴԉ*^jɛ #ODtBE[f7{ O IiU> m)P}{>2]NE?C5E17xA^pkj_2v|; Hc3aiݬRkq<}>1Y8"zڌb֋lٖjAL/BQ,[X>ҩ6P6ȜvlCb pѐ# ^̃"ȿ@DpC͊Qa S# LDٌQݩzZuW !5zkozEϺ9s[bk>WScDf|.1plx/*ТMfyЮyKD]A5Us^y˹?FRk%Ѝbmd.z&c{uQ2Iޢx$GkyIvP-܈zEIi[PC /,2a=eXv#˓6T;sE' I'ڦ&FiD˅(':ڃBwqS10khO0ðCT4}"%*/kK]gX#S3{ECtEQ& ceꩻb0WNmՇA5=Qqĝkىl>*Rä)94 sN% e@a~3P@޴l-xIkxWb*g=*gzbsk[L-kMF{Qj!ԌehHgDK*aaS;+SO;(Z >Ƚ@,krS]h*w7e, rnGTt;e9]_JlEՎy3Q7 U!f}C~i,PV8fr:6=ui"EE=nnV'(JׂdP؀*|j[+\ArBYS{!rB_)æ.'3 /h Iacx{4h/#;V>L ~'`C g62+{&2@.!wwhx7|7c7ۍ^aEW΀ߜ̓]ehA9(i zK#{MƊZCoP̞i3;5oFz<ŎPoukfF0w0Oq3tEVM}eB°0= !im =-"T; 9g3`Z5$E3F4Z@e q E=P ɹȊ5üF ":˦Q}acGKz0VC_Ѯ_M#ߪ =hj_cx<0c^l[Oh!h w֫}~Ps93u{1ԱU y^8xXׯ +3ZrXnrk\ w]쯩_6#z娪=]#S~}>ЊRsLpNr^DGxa9Zg|莒y: ? dlg/N ðj\{]KZ_ԃx \L(7$%:9~݂.'ie+Q7(7,0mTjlrfGh8x4ڑ7m]Z酔H]po1smW\蕯zh;JOxߡʲ54p.f cZs匁_9U"704Q8=CˊM^ ]'DMU+-Ck;)‚ l IDATPߝ}!l xSr~3b~|Oh{Y7)AEOkCq9D֧L4ULS2 H:HN_'0è;`5j>>䩌6)}oOT<6_OB3&4:݉>)م'? #{ٯDZ(;N;ֵ*\Av) R/__h|L8-َOy?]U '%*がGWZIUE¥jE#Iͨ}'.Xƻ-e+,K8z7`\u F: ˇvc: Vӣ}IafBxW=8UZ&" rAy'#v Z'Cr}jq QՅ( Nd+^~ $f|¢ 4-~m mD'P+fz2lwZ0{ȳtZ}>h7K InkDjTՑ>Ő1 eh,`X1m!Zm"a,@4 > ͢E7Qqa f/&a|CnB>ۼ`D"(CpDŽ0"E0x^H?zP;u.{-ɉ0C~,LOƪq`c- bzK4Q_X_]n;2Y=˵kN`ҴbV#ӲQuJ=E'4XX7L7v=NP^'L}o1`AEKm=@ףC9Q =o#콮kdXu<5}exeod\< {=e-Θԏ!Ig8ɍ&@NFfCQ}ۛ)p+:&zVZӆx eQv*k;x i^ߔ[kViUyE*ƪ/-r'G>Ԇf (>\(<_iz&?::cu< @sF<CcMTII]2:gt|pP)7^C2So3sՁ~tuf(n Q'OU9ZkS9 !CǠ̋!3EUavQBd zDy,M6k z'TҾ*<'4#ɴ$O{=0(ȷgje'i zއQ1+_0 @%<2 %aS4O< m4=N8cF.dD|zog\m&34kp-$hD1Pk.{;C.rgǹ6kV+s S%j`3ѹCc׸``ՍzIuqAIF'ו=Lר/-\Iy1ԛi·>F<+`؁fIC  ڙ,`RV+is'}#~ҢXO\+ϐshOw3e@b?M& &y|@uR{Ew(TG) 8aږ1Ʈ,'ш$NB!B”xy%U EL'Z q S0-qhO쿌Ow=QӚBe^PtlM^%0p1JθֹzN}m%Z xw5<#PzZMY! 3ΰ64ԃ ߀m >wcPT]AWT,YQ@bENRA'3yOj+J]NCI6rPa6mE)u9Of(}2Pk@)nȀ"0eѦTX˙`ދ+N4;6؇I-d+Oj>GTy$hi;L7N0~C vz7UKFW`%S_{3 kأ-עࢳTL.Ft"շ|9gfg9g'(ƚ#30p<%nݑ`{/=(W%U#xF_/cN>U W27しq@5,}М5zJp/Zj(]fV/Zui&Hy^XT{I}V{T 0î[eP8mT]jO,UN[5)L5NWNM{}QBL:mzP!~tR%FOu` g{LJPηx->Qm{*-p\ W3)x>xTdϊ&]\Z=>|G-uJ &PmE_1_]_r~cZ[-?@"%s0a QZ7ۭ<.[9!4*\C{p^< U C=DQ8Bl\q꽙pkRGiź_52grZBī1/x)XwNkK[(evil>%}hw\A \vS}WHPٿ2b!Rf2_8毿z?G[;P~b:,29iT}`d h8l;`:#oMoԏx%&mYg3nHr8Pw % A>+긢kKs㜡ء1u&Ae%|Ѧ,uN3|դKy" Ye2ڣJIGb(ʁ+oq]Ij1~ n4@ŏO8\Z!V .ɜ4V__kL4;Ʈ<`X#f'Z:cЋR@۞iK|޴nt5hCbR  ׆dKAi|Ou5d㻯h: x쐭5֋o2Zr#D ̦ NĴo=z䤯m3hݼCKG]̕8ky2@;C7yPxc\6_1&x޴/3+(A#({zbTQ+Hh5iQDh$9 ;6y XX5@)l|H.OT}!#@4R>#S@41#: {6󍮯 nT5iOoLMX[>Txf4?EeYAg?Q=h{YA?.#ۣ1S:S^G7u탒1qOhh A_.Z~׿U@E?)lOuf.e,A6S<ﯝ׺ڦEŰiCf&u푴:2@W8NcQ<`5mbzIAå]y}z浺v秸f`^E;2֏ymCmџUrPnG.HTІs y@^_1J6pZ-O:!=x^'$*NڦBXSyGQ-dw(N9;`?MtoCǛԜP/^p<]_ś)l~&>(lVGaŦM6V{Тز[rц`$cR܄?b̥ s: ]nCfhIv= Z"GGhAQ5RO(l&=0- M5}CrhS?JmQm(?d;Qv2j  Qt4HsP[g{NvHƂy߁ˍf^d޻b@h} bj8cwiSȡ/TU`\V'4( +kMkBɂ}fԘsJ| +zZU>Л@%[`dx#aa [q xQXX$7C63K{hiYA0xkʓJh'LM#þ3Fjm %r~lAbiw^p `%3OKh v$i*c:czЀ ` }9UP+h= D<0#a|1 XL<.:Q&eMO>|8B 荐t:ћΌqzbP/%oR'7TN#VN\gr¦^ZQ 'ïS>kY- 3ܲ"lcç5Ym455`M:X^r{j4Le0ԊDkQ$Z:؞tWZ)SJC7@B9C:9bV BY c c rCfY:6F׻T=$hԲne:s^%;>N:+㼠 Hd'J@ fz h.Dov602.6*trbYd~G,״o h}!b[1\_u5b[VZӊ1Ƕ* U.w{n:DO*>IB1ò#D;:-O4(wj:RI3uFt6UA 7 #=;[=傰ɱU<tIG;H g]ARcUT&ղ bA\]:.&|W `SzZ^1 y }_u4lDcA|A輟! ~yOZ1@ }r!}JS\(#?Pp[Zp=BrWQ'^- =dޕ1Nʪ~WyxL6n=d%Z^ɬƀ޻75[`!-qQ^Ad&1I(GfVN#ZoZ'ꤱb$۷b][ 3.x $ֆO(4x#2)Q)ƫWeĢbW5]kwt7U{M+%^:mHW [\ދZѤjDG%S^qcشiϹgHy+^MyL<g7k doCvOQ;G `믮wҏm'ϘT`;q:3y#klx1l4"AzC&F6J CI{ۭȉ{j"h 7*F?-k?PI@7m'": *`!R0C2.  # r]rKV:w46H:3Sype +ۄFЧsM';>B8E1HxuwBۡ1y ^UܣPRe2E嚐{=)'o øITItՁ*C o7CGٰ1RHVy(zṃQуF+FKWv5"M?0Fg j' _Yo{1"}V(K@dp<=jqN@uV\o@ι`J٢  |n<)G ja _)&^%Zl1ޔVx:5\BcI͊Gvj0m1\ Q7C 4w5Yti.ϨG>PP?Zw0P%ĐzP#Nz痾hr8i nPwwDip*ro3G̓h~ X+ y0 p<::Oj1H ^Q߼h~(iE_h'A> h덎ӂe4H^)DKӶ7c4߅^rwXe\N.R N[ 8npG0>n.h[ 'M37 V/rZc|x6PW%º=7/Z@ IDATt7I qlFkHEo8esoE}A{1{х5bkCMv1f:5zJo-?ڨ5`>=t.@&1z3 3bz1O oȣtYe(i)'F&(nF3P -q+D} >}2aePQ5a1+|B 衷(C7QJ1b0>|{QR[SI+OڔBb!B_||2-öąVoB=Aga opuLu _1 3ĆG0FC/*PhN'E~mb! .DsG |te z1It_yuɦ|:42ۓyfbkpQ8[ӽj=x#fU9}B7{Ϲ2i1rm+_~mשPL C:F[I솫2@~O( >ѥf|g=_ .MsAթU6]u~=h( =Zu |C4?'7z/o !'\oEuS*@Wʫ51Ph@&BUz+|(<_kU'nE9UA:H.XK\dlM"Ot${~U+;$ g7뗝)׻Ci_yjFZ߮nʄ+Z^EMA߶fevCeZ1FE8HD t^5Bd}ԢOAނ"fx[Oj7_7zӳ&=y=;;UqTu9-ȟWtA\4{snf`4 H' ^cO?P18pr3ƃqveJL vHVC˾a XWfXkތ 2yrX6YGOtyAo.5|#P< e~nE\>WT'.Ryы'7eD5.w-*L4uZ TImk|[_kuj M- IDY2uE?ཀྵx<Xk٢R_V;ўaq{M;5IUȍ1˱ֿ6ʒuVVWWM=% ivL Gky~> j 詛hgW>CDotQg1t t&ܗ7yw x(`umD_ɬrMpWah}ВOOF6-6"tI%0?獪Ն40v}7RW׽0&8bIi}mFI}A5)#cS6-FCmޢu@ćYzmfp3A~>Ph$XZN-Sqӫӂ.mYj/]g '^t h_{Sg(zm:voz'w >E[)Z&5 qWp BA [4>@ks# ׿n8 / d֌kkuatBs,Q-C.r̙ O|F;Xт7ݰ7/VX掮H WafiDKnvaO馮[d\pj<'!75Wh]1෢,ciiReWPM¿ كa {uؖ:i { uT5yFz J?7 .шʴ3ҙ͸n`C31=Czs?T͆T)b'J&7T;@"p (|QmQLy~X ^[Cdo9BAg# tp\u]gfQƋQ4&2xN֑+FSѹ򦢼1jw64~l c*o>mw2=DKI[ 0E1@rhozujfewL)@ɶ7?.p_Ðŀ>'u=`{u}G)*Ũj<)X܁'yF0Fe &iT܂&y\PhpAt=ʄae~'{tNVڀ$qU)zzMzj5Z3b^ VO[U85ӆ/o/-:F; H sNRwF#~fnb)u0KDB]ʸ覵a(tt0:=:4HOf#]4֓ %e{:{=uؐ1Li!4$cxe@TՑ?7*/)oJ ֐u[uFˆry'GV=_5crp#!OD"Z mfx$WU?b.M`n,h|yS9\9 g~TwzQRA2$/|c  ]F,&$V빢@[>oQ>_9Ս*@40m@e#*qE^htznb~;mX:BީW xEws.J]͸jZ(y/i`<͛#Ջ`ohoUE”s~?C— >^8%9(C08x9F9hn'z:l;j݀2IȤ&Wp>jg%uP>CvDS$ ):[Cdׂ瘌7*%Om}yzL:^S>c~}|4]Av_ Ǻ3<_SX|-3co yГ9C,-rs[uh T#F6n4OSҬC`}A-P찎yv}pc3EDLWԒ3`\å?K4͜ҟ9ii⪇.__Po }ݬEASHSқٓhO?i4+ vW[Ll1me[ި::”~ {5zʼ$O|_7j;&v بk[wT :*;C%mNEaY{ tO ͌yܻb;:'ߦ.}T@/01\` ٵ"dhЗ@)|aɻ.7.k]ߣaP͇. }/&]bOasӚ9hN=5qrfT;)]6HQ\ݝ3d,uP[Z-n*fuKwցBbq UY_֐qG07}Bnf^V,$ "~0p:-H8d rtLЊ!nuH;M&FфC^{yj͐}URe{v! mDҨL-⒎}Nh.7UvKp'j5/xĉ| WLnAHnk'@8Ln, Tmt!$8q;^!2cheӂCDaozyR@Z6o[8` l$ztj4g 1;ԯicMb@L_$eA؋F)Azp 4Y:Ց;VߴLʱ3:BTdz *`_1vu<'4X z;4duQ8v]a7ZJSy\ZFȷ?/zBDZ4lF\kR2fښzC si5u<,h^eKF( s0򄥱@l :hjY -V@릲BnӆC9OJ'>̂uc_(%jD :NvM?:7 bd I˨yp'AS?Qa?pD^Mhu# BEbS.P&W\zS=%bڗYi@TH!.ڂ(MZms2,LN"K=ޤG= vIB 3y5vLa6fhj0 h 1?$03Ks:>:WpX< .fR{n #366Ӏ|( ;VOQy_wE\szMM4>l_ H93\{7 ^+͔5qc+HRA @ztg;w0?L+3|>#d_clWt82qZTo;D뙅%Q`^M;C=#0 ܫ3A>ByCEc*<:ܻ C~>4q%L0")=c~#v;!KfϞ729^W!Fꝡ-&7*3ẻwIaB&STw!XQ[ j"LS\zIgT&u05Däf fgknAcbRW-E;ϐ˼V"I3iPЁnWRPNj u /Ȕ7^hߺ\*&rLL_ ˘sVe #`F۶C|`B!yx#=ff3@Y(p\!zuMBO$_ Mq}ei;evo_x3]1=‡m3h/^(<+,ZlY.u{ElRnj(Y2DzYQkM8Ax_[ocLA!E ! ~71!~4'~ | 7@SP)ϟ? PMb*ǔP1=|Ш]k@V iD2ƵW#Zr~sBb^OYMiE}'N({!jQ{W8P3 mŤ*b -ϭ*UzvƆu ؤl8@k7?g1l3M2RƑ#t__DIueT4PtrThvUD1D|ﵳ0PRE8-.0s{~#Dd_pB?e #8564uC^gh5FkFy:F|xP>Q*^fen Rbclg*flZZy8nmFg4O/*?mx(T LS1ӼPPLF8*] ujф IDATU/40cȼn&]k{i90 1^<JdI );"z7ryBiRw\לHge9>ϋn8%T7 __'o^M3E#fQL{x"wG>9Kb#Ö́(ģ:ȪQC= FL㠼==S ,Ue(F*ϴ_=hŔPpMOg b]gf"Kbn]M0OHFsڣ\$ nĎ # "9b1W0%6FcՙlLh؅@ L=:Ihwkͷưϟ?oe:Gtf~1ITv5}wFw7l@ݨ4m;иMH'"zUodĠ;,M/V|ea\5>3i=u2N֮1lP!nvl{(n(:GML:-cR-Lt'L3犯!ncszqfhg>!g{Dy~3pKƚ0VC):59hDބI`ǫIx^ A$c-ɺ']o]e mG]M79Qn޹P3(2;ƨgu#eܳr1'֍]!|@i[P:ctQFҸ#ľP;bw gC<~WMɬNum R XⳓvbWr1{bnSssGD5VRZN >)w>̓Bm~c/[O=$Xk m`ۋJ-EֽߌKdC? uc@~ ?d£.%il" h5̨ S 7F) [9!j5GH4 4%gU^m i&rDM 2Z4=(u ue)t}3:jna@;G:Z+dch)ڌq~AoQt(oAMS<dz >&8)@Aԝ덪jn US9bQ #$vS20tJuo/}V ZZ|o{3+Ǜׁr-jgImǢŠjj3'4^z~]N}bAB _ !⦷UjtFƯn.nZM rКp:ÏdR˾@/dJD ܱ) R/<3f k_.N8bj!p~ m Ad_j9 8 +&&;W^r$dIǛB0Ǜ1.c'bpv#MT>9NL&uJsO w͎ư'FVhoL+nY&1jzYYL>Quh_'\Utf{OnԍNRS>J4pa6|(z1=+axQt(݂cxGy:zL/]IӺJ&z5iDu"\d/chs렿:P-/h:`w&:`7M:PS׿ 7xŀi;>5v=C Xof9zD`|AT< a _O,B&VCv25ED7@ 닌 _}jc0]Άs0DDwhn@$! 3'=E%H(j\FXp-ӛ6%6%zHu jfDvPIo]BIR}*]!.E Qu'M;Ƃ]ebj'”/'\mOL괄M:MSk[W)/w]svvwj (&U_%y:\ ~!Ur7~`-{TFrV&Д>$~ЂW6z-ruĉBw{_W-r&Di oE|2zoMxx$VBǏQ9Sd0*cXvEPm*쮳g-jfﰸ.̂"'n |Q5\.2rgx0_7b;퟈ ibX.M=fe-z<׿UI4 \3(!<:~YjK6:_r7PO[fSu1 ͇2j'#+3ObzI k /}o,mSXCuFL٠F>-^2/GZBPb_ E+y3a>zybeoP'"9Ңh{%/^ OHփAndb-"7G7a`| h v={":4P(-JA_!~5_&/E3k2a~4nˤIK^_,6)c=* #gsGEb!ɠ\@S'fox/•GKi4g2ڕѣFn aPB%oyӨMVkwlN՜3CH(.qw~u"dvá{(O}S: ehw]CPRn $UVŴ{opU}BWQԌj_ 7,H P;m; u/H ^Xڌq1LhY=WMFX!=-|Py6-SCpo^cѶglBghjNٙ*nj&)3ctg'kB~TɆTpեO>%5MF;iA\5N21,;BO h2S"\!hةA 72u.:z.oh=LOk>XkKt vw8eEAjI}DPw뗙0 RP _ApP/iN猎eFg.ϐP jEa=$j-t+HFz>G~0F!Zh_XtB+ ‹VUaenPOzB .uPnlЦ붍I΃h׹^h6H= L h8Or]G/O4)u%G \pzUW[8PMC) 5"܁4 \&\[s2 ҿ[G[b z>q"Nm|1=o<|O-V4>½~hLژq\oJ~Vlr0G2+g3;йEkjADgf;Frީ2hͦ&ڛNt7zK/;sփ݂rѢya!=rq5nT|\\;J-KQhztSqk7n|sֿ[9]4#`:͊E%EYҰԓTծ?Q03S=(uG}ô-dՍ/ tzs/|k@sLI^KVe:=0 [}8afZ{#(wS}@oCV^|RIbXPkyo/t|zRM*ըC9 1Ӽ)brV>s+[A^}4. H<ZB,T3E04n|I;_f D/yI蓒V#*r5('/^m6qzAyÉ3C*4%CƜ{5O&|rңvL9:a4CkXz̧ڲ A{cMЃ(q|xAPoN-ju\efԚ:6XT?{G/@FuP᎑z+Gm_jg|uB+9Pgc uL_ZfSoz2'h^zA<ϳsZyTID“m.&UOBʨC`OwoyuuύcӾQ'Ä׺I /D~zYR1 t:.څe`Ah|t_b,/}7M)Ki#mX~ap[/108?gX<3wNO}4hy"K otgyDgqt&G4eָ!~EeP*~ݟ3d[ ^+TD@`:s% ~@"qN\Z ;x#']ǏU QG8SWa~\WB/y&q* 庭z랞t5Q}sy}!l+_nC7 L<ϟ?5:=)\>t0H`o#˗rOq\+H T߫]HP167C衣2@a|6LoE(#cNkpw6W?ku*2x l O 8/ustk݄ɓZ ۥi}w2*S>;܂+$ ^1b&×yP4{ idc(zMH3"#blBe>sMi(ٻ,%3WzA٢efY/6Ύ3+A :E.ԟF l5/r55VI agз=>bD=Ë)Em5p} =YSWA~H2'Bҫ> f}U ݟ(iڮpX\QWqwq?@+&{t2ӾCe-si6P&ɄHv1 'TAwPWH/1z dQh}IGuze @zI0a&OW.:-өZl?y1BT[)b xR#o};Jpȋa9~/b쥩z9sPfZ zwzQy"GBó} IDATk}*G&F ~h@Z*-C9Wm$Miyi"TP1|SgZ M|_F?六QqǾSj9=_H[}t C۝%c\_2A;fy^'DDB?SH+{Tʄn(+u3:m[S`~@T'M-B$QV,-LA_Ѽ.SّH/_@FD k FDVxq0L$iQ{Ͽ+ٝXlY4_Lxs#$I&GGAMiF !MCڦ槅Y/V9ZoO@J~-Ͳmٚi=A4Fel:8`0ob3T ksHZx=iz3hGb5ϓ#h62m1c}x Уӛ+զ 8o!]śtp͛Q-F CƱ0z.H^_]ϧȴ[G}:~Kia,V1wƸ9bH`@gz14,Ϟ^}o7'dT]O\FԎ!sÇ_L-I7T3C##^';<!@Fxbɐhѝ1t>Gp/ rn̈y#;x-3p('x{~Swi4F%@}(8 ө4%9 -V$Ղ7Gs?gkU;m tca#Z&7} NDDߝdZ#AzF}P>lNjTD$4R̎`M}^W 0蟵+VgjAFҸ/cxW=4t93>keen`p˨OgdۢGhTI? M5qԌn42vEǯ[Pzj%)FJ~JBȊ?Ax!~F8L'Ӗ=Ьl D\ NNzd޶ZLz#d=tf3HRWG)at30?{=ѪcoHz|O+kM&lilDr#/[#(ObX_!Ȏ 'euL0NlBR󍈜Yb)yº}޻bT,=!Wy#al}첩yn)^gߍk\kY wB;01Zn]x&N]{r:P?ie_V? 0s<]rf=[= Du;#$Szϊw~CV#bt= Czb8p 6DhlʀT+S*~-3 `:w25*83̋rq`Ɛ²\QZp}s0 !<-^/bepG4œщP* 7jqP81{ qׯ1Lc' \1U7KA շ> I EޘbAS^!bGotAݩTXgїq4m3liCx@3#GH=P䃼i`"1hh&J0:*Yqr'>̃nc347$AQA/xn|B=x&6H,YB_T."0)%ԇYN06ER=i~k 3{!ޢ]V4x~QxDZ48ݐ;QRl]@I>!X-3A.$  7c_1ʲӦUnUr/$ba/"?^|v_G%jP8@Gd*Ȉ VU`;H:Ԥ__ +x> M<]-:[R*v CIlZ:^C;zS%c  @ -zbᚤZ~A_`V?DKCAO$'$eLo)u_u:j!Vn4G~|^-CxjILrZp4"+m1alfzɌ4PϜPLOnclb-fiN/TN:|sTST(pȱ5U_:T(5=k^HSḛR -}] DD@`6O-5xv2iiqMG)}ǀf[H3}_pwS_#쑿jUynV>b3&EN`X|F{kz#7.Ym^x2@멅r/ V`+zLyU;ԯ 䤙0ۜ-+TUkhՌ<<&+(>$¿BlNZ+74:?|"E051Xc֢Dӟt!9R8h<т'B#94>F确5^AS7G703HļhZ3(_ X ZJZ* 4fEnGys {dv{R0'1Nh7Ǝ";e_XidԈu_|3|aTGőUvyt\UJ\fn+2;4I =kuL_7*jFx[Ct~7:jo+ }Ѥ:QQS\35hgi4#/ 4y3" yvmMNdD.f pĪ7W̥WfhBA(Dp@R`qgtUA(qFti Lph*P2Z *y@Z>~Cϖy"i'+Uv\kJIT[*z\N!Z)`cmjҘ4.ʢxBuNYoz2t8o`-`u:_@9+3'b+ rxАwP2" k`kmXG51j q^Lʩ8l/TR/u9SvSdkGοW?#yF:UC@#a9?/T']?E`meqww_oj 둼,T:zr*ckA]n/dɄ'NLTϓzZ,j5*jtb^57<$u7\7C(^68)0Kn~ _(OAIw@z&39g %j`;Mz݈PV,AfzPY%]z"Q] R\ *`P_Vg`.% Fe?X{6bb&rŌNf._m ISEyhϟ_He+n 8`{n|SMK</7?sgU+PT+=33M/7 bs0IfmB{;Y4ݨ4 `B-pL?>Fw#>{" cmye3P[ڴ7^ܤmixDJ݋*4 z?ZF}GQ|^g@Ooa~!u3*-`'VVt2]OwHcdԕIeZ+.]t̆[~!]LB]1RIU~@"%a9 ۾7K45\0!(ū|tC2o&_p3 ]OvaEr{)'} 5mSi:dEF}bs2|6<Mղ:'oA|zV|Nï#d :u~52Jɮ H/M==- ?$/좟sPT߇{z7Q8(L Z9w|S1S #h`&H9mzrv`tO[kb11: BM`gߡ?Mޡ[՛F#Hw2}pl9"/6tuMn& w~*3$OV;Nq??`m3\}.&]!xQ>7kAbT]Ay:0AAcE5.Mɢ pogUSET5n4U4g%~M9`- tg+1EK 28NFtƼ* 8z}Xi48}QbX= o xf}GFCkknWbԻ?eۿPK,RBL H.Q' ʷxKa`Bm@P.![XGNu-o&fifs2\1=&!Ta (y;`XT*R_6MrqDSbao'zf"͙7t}1+F<4]t":)k(Uhҙo\^LKPW)禃>~!&=_0! [w^Za4 \15\0˚/PEm>m-4`AyG1Ƴ^?pjCo~f8T4iw;GV'2hmQц}ph[ ݪEEÊHwnĀABܢ4;dOz & u#~u-8&J]dlQv0{ 4E4qR|!}ҾbVT2cN|3({+ތE=1Fb¨j!QRKaz-XVw; ng,f9tx?xPP/bru+7)9Ψ,oFwM`^Ih %05s 3G4ØHu:7 PnB9hmLPk:zUpѤH0Ԇ$UqU͔}cI:s\R8D&=/7{;zw/F4FV˜ &idzȰ68юr*:?=whoUoJ$fUm-v4m›9nHU OM1ĉ.Sm ى cbPr2 ͱɸ<rqp;Iu@[aސ1ЍFv4U6֚_Èm `?F :S?ـ2|]9|C֡vrM NM/~H~NZ+qoOkMjte"riƽ}1lI|bRP ,Ζ1F#DEe?*tr:ZyM.̵"; k`eWy&mPb2КۀO7UgYL( MՊz^=7BBצ |U 2HthUv0.H_r`Q^O= 1(>"$Ց4fwPij}~Vt녀OLh@m]p/Ѥ:6 *W|NibRchdv'O;ԯPsC4Aݛrgƒ7t] '}`| Vٗah.+RzM&V签Է(V%o#3`+Tf&3E}P.Nvٔfu]ߥ}1l,C-$\dDM3hsX\,h^6 bY{x17 Q$;Fǹ]DuV6)ta8RR`I1Ef?n j'մI6tB+=O~.B=n| *;#cr-晹;#:b0d~4N!mM7Es@1BB=!Lu=-f$O -"5kFd {&wRbqB^/ѩ  5qk{#Ŕ *IDAT!;,3iyS1FpޙD IOԢ,Ԓv\eazj"sP/OkbGU_h}DQ@w-<șY%7MϟPYT/ȬBo{#tѢn)s9 ,lW$aXZY;8)69)R`l77i4_Yc!>IgHy4<LLŒ2jע>%B؅w*EE[CSׂ`ɘZ̿/94~&m/׌~xjD`n[Ckϗ{F$dt\VI+: +~*j-{/7p!s cZ }+ۤPRe-FM0m?òM 8|zj#6.MNT]FÏ ltbBV `+p$X`I3[^3#v̥bߺ7jnj[uhGw0yPvLڃG1h=?c8b,&>{oTu]HՒ!Q^Op?8z( Imd0'SڴR vR8U7wVݛҦw긙bu Td '&tg#VgmW\3*dZmĐqQ3}=i#L[tCRNstV3ڝ腞?aJCpihP 7փO PRMsQEPvuѓqso[2-R# FՑN]1%zASB^`S :|"PjlB{d-y0Ťvmه=5GL,#2>p\ 3dr˂{6 ^ uI4 |huj"g] yoDjM~>𢹱J_ MP:LEVPr3H'yS\==*zxS@bs ObR?3fQyNUF^& ]*NKFL$S8[3L:Q;fkB0}]jk[SܢK-i^:̒E1cgTתVΧS[S׾Y{B wTU!e9aZFDi Q}Mӆ ]R^QL y fu7{S]v[7I۱Q 3IzN k5#t#槜LfzP:G<#o=e;$|+)JdžTQs"'~qw8EM7%z0V4M= 1^v="Bo^QFrL_FXB;tEEEӅ@37K "齗9/ՋV~tB=R cQ^?tUE|I# hkX PX+qĽ'XiԀfzM2,w7 i"-`Ǐm~Azb.8ObV*Y]ӵnuh ېa~2\yAtoG#D uP BrG+fu ?Ї`FLZĖ5;hL8ҶO`jZ:NF;V\ bQF* H,ƿ@ g+z8:'u5ITWKuS#¥wiVaڲZc8t) 4Cx#͓Q|}up:Z >aa21U4nSuTF̉7h֕ {T˻~IIf8Zf % t^z 95XZubh{o W[`ql?h  Re~[pH#E%K@Tz.-\Mʈ3L<6z#Ub\rbsv=hvX1mҁ2iP ֆtJS oEm\L,l /]k깲P3P28)~OtpZA^ pe]Ɔ[_ٝ1bPhǨP4rW gQ|޵O0?nL~1DkM(>цX22s"o|ӦM-Z1AZ O 됫O ,1([k,Wa(3k=hSiX\_RV:esf8֙Q6+7c0[7X'#Q"T^w+@./!r;unjaFY@1! pR2J_.)Yo!R쇱E옔Qxƨ+m 5y-rj 숑e=\B xG RM~dF}OؐCzqGBl0k7=Wex=6DZ1f}@dJ? e|Ƅk}bRnS$(x<ߌ?=8_ubk&1I'CӋ 3ܹv- mn56|#6ڧ yn~E{!]_K3 { 4iaߑ`(EgXgyd}"5h,*ZV2 `Cr*:CX~4ITFbo4mɬQ7P_^AM3s%:bA j߻b~ soF,ʓ+$W{(k?>CJ„x G+eLnƔy.*i`TP,>F}A*uXw/KҢ(h[SSnֲ񦫧#4:U^I< c'̘÷?wuz݈M&hn?7NyȎ~0󤍨Ǐ{yOܨVNנ|0ZSC˵k Z4F83xoS`V6Xl{流:_ DU1cB]dCZ5FgNC/Ux醸6;ϳx3FW^c= " xRCswKHLbNe:XFT՛lʩJV54~$>`p=޻3XbF :Qj }}'X_FOb٦u@a sczw;b@՚jڟЇW:5`4󣟀 -GĜ.wH L,! 9_h{_RJhgNC49d~vH55V\֩@wG}cӬ653t:̦<BёFONg3u4d/>$ P|lQX OZFج[e[0=fB 5!"Tr᠓)EDd1(dG{g{Hnr&NI 5o01qhǀ΅rh |>CrHQ̯6&%Q32`N{OU֗1uw;MQS0A52]|[}9U%c{ʤ'A"mPȥ07#Wp;b-g'lržZ ;L Tr |e \J9'I34MD8βlԢ0"^ǣ_(*pX?=Az],!%Irw:*Tߗg۝,__l6N{~]H3 $HF̈Zf=IIF(I$ =*>t4UAz=30fD Px<F0ynf `+a~FaoCp^ʍTڥl>zg}g )mm@~>.`췷H@1`f$ d~ ҧ\k.Y.~IENDB`lmms-1.1.3/data/themes/default/step_btn_off.png000066400000000000000000000002751247673406200215030ustar00rootroot00000000000000PNG  IHDRw=sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<:IDATHֱ b?CV,Qk]!̰"OE\/ NIENDB`lmms-1.1.3/data/themes/default/step_btn_off_light.png000066400000000000000000000003171247673406200226670ustar00rootroot00000000000000PNG  IHDRw=sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<LIDATHֱ DoŨVcx9t3,wd " Bi5ԑ V,0^`?@oqZ~ W9ZwXq賴1 tȄ8@&)*jBRwC&w-MnC>ҟ$,Ƈn2D7$|$B3djbHE5@|>󀘱)Nq7_N-׸8D}+ٞM@uezT;g+).D4)H`=ߔ3Tds2Y̤- )[P1OkKws.;J]2+|1z7r)0 Y)xpTbIENDB`lmms-1.1.3/data/themes/default/step_btn_remove.png000066400000000000000000000005501247673406200222220ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8ݓAj0Dgq6^Bo9";c/b%M%$D $P:;1?4Z두s cm[uW !1cɀ1&=$e%CX5i!~'| 0g)c,UU%4y2sj<#kܐ!;%F@ݮu [h[ 38#O6޼sgHR $Wė/)"IENDB`lmms-1.1.3/data/themes/default/stepper-down-press.png000066400000000000000000000007761247673406200226220ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  tIME ~IDAT8ˍ`m,K,YSREQ7xXG8H@s;­ڧG?{g@V%IBiJ.%@L 4 ;8@+ȅD0 N*i+.ofт8`.FIj,K 3#@Y,K%wi6 y# w's5".#9AW1BudYF۶uM]״mKet]wOTQů*v ~t:],Ek&Q~BUUlۋ @w` !\ULafwp+.q0ϒ^lr>k#9)$2ެ E|㠷7p kS-(IENDB`lmms-1.1.3/data/themes/default/stepper-down.png000066400000000000000000000010041247673406200214510ustar00rootroot00000000000000PNG  IHDRasBIT|dIDAT81oPZ-H?Z¯ֹR?C$PT*:!!Tݞ}ν煏>,)KvG9UizYdYFQ2?`u0N>:SJH"m/LD\p '!l#HTv$ z_V#f #df2P!B(dM=z/a`41q$stV?N x t)p lnIӹ|Fd׾nD IENDB`lmms-1.1.3/data/themes/default/stepper-left-press.png000066400000000000000000000010021247673406200225640ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  #utIME =IDAT8ˍA@E߯6H ѬHh p,-r^!MHl`+AdfJnUꗊWvcIENDB`lmms-1.1.3/data/themes/default/stepper-left.png000066400000000000000000000010441247673406200214400ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  #utIME27j\IDAT8˝=AWxȰ8 'θg醻lH9#"R @`fE\RGSェRSe3VxI a|K݉1!ET!KAJo'I5IDJ"?PE0Y-a&J37R!)P%@uH-L> m EN ODENh~gXT#75 %mr<9LSvj8vlW[!nΛϿՊnKe,K%w~7;H)!fd2^3hZwG85ٌFA/f;f{ ʲ,3\L *_\(À_\E0ƠDFt:OshIU/Da~( O; IYߩEw08XVTUn|>sT0YRq,˨<󜺮YSw39!2ĈeUUq\8l[ `@h*iڶm[R2 $X C xi]ױ)2͐ d>Hb"K,Bz,#4#7bs[8 Iɏ@. ɰtxQZ`uネP1-GxIENDB`lmms-1.1.3/data/themes/default/stepper-up.png000066400000000000000000000010201247673406200211240ustar00rootroot00000000000000PNG  IHDRasBIT|dIDAT8nQ3.rCC L!A.?p"e^E$x"QD4ar'.ج)S=s;3#wg0\k~__Z~xʁ73I( 3(fwt$?ԛމfFp$B{beG̔vp8`:ZN"Ȳ<>I Ϲjv, 6 b@}ދ"snl6₳3& 3#f1fIHVшvx QPushButton { max-height: 26px; max-width: 26px; min-height: 26px; min-width: 26px; background: none; border:none; } trackOperationsWidget > QPushButton::menu-indicator { image: url(resources:trackop.png); subcontrol-origin: padding; subcontrol-position: center; position: relative; top: 2px; } trackOperationsWidget > QPushButton::menu-indicator:hover { image: url(resources:trackop_h.png); } trackOperationsWidget > QPushButton::menu-indicator:pressed, trackOperationsWidget > QPushButton::menu-indicator:checked { image: url(resources:trackop_c.png); position: relative; top: 3px; } /* actually has no effect yet so disabled */ /*trackWidget { /* border-bottom: 1px solid rgb(0, 0, 0);*//* background-color: rgb(0, 0, 0); }*/ /* font sizes */ nameLabel, effectLabel, sf2InstrumentView > QLabel { font-size:10px; } /* main toolbar sliders (master vol, master pitch) */ automatableSlider::groove:vertical { background: rgba(0,0,0, 128); border: 1px inset rgba(100,100,100, 64); border-radius: 2px; width: 2px; margin: 2px 2px; } automatableSlider::handle:vertical { background: none; border-image: url(resources:main_slider.png); width: 26px; height: 10px; border-radius: 2px; margin: -4px -12px -2px; } /* window that shows up when you add effects */ EffectSelectDialog QScrollArea { background: #5b6571; } /* the inner boxes in LADSPA effect windows */ EffectControlDialog QGroupBox { background: #49515b; margin-top: 1ex; padding: 10px 2px 1px; border-radius: 4px; border: 1px solid rgba(0,0,0, 64); } /* the inner box titles when present (channel 1, channel 2...) */ EffectControlDialog QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; background: #7b838d; color: white; border-radius: 2px; border: 1px solid rgba(0,0,0, 64); padding: 2px 1px; } /* main toolbar */ QWidget#mainToolbar { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #98a2a7, stop:1 #5b646f); } /* smaller toolbars */ QToolBar { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #98a2a7, stop:1 #5b646f); } QToolButton, toolButton { padding: 1px 1px 1px 1px; border-radius: 2px; border: 1px solid rgba(0,0,0,32); background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #c9c9c9, stop:1 #969696 ); font-size:10px; color: black; } /* separate corner rounding for play and stop buttons! */ toolButton#playButton { border-top-left-radius: 5px 15px; border-bottom-left-radius: 5px 15px; } toolButton#stopButton { border-top-right-radius: 5px 15px; border-bottom-right-radius: 5px 15px; } /* record and record-accompany can be styled with #recordButton and #recordAccompanyButton respectively */ /* all tool buttons */ QToolButton:hover, toolButton:hover { background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #e0e0e0, stop:0.5 #c9c9c9, stop:1 #969696 ); border: 1px solid rgba(0,0,0,128); color: white; } QToolButton:pressed, toolButton:pressed { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #969696 ); padding: 2px 1px 0px 1px; border: 1px solid rgba(0,0,0,128); color: white; } QToolButton:checked, toolButton:checked { background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #e0e0e0, stop:0.8 #c9c9c9, stop:1 #c0c0c0 ); border-radius: 3px; padding: 2px 1px 0px 1px; border: 1px solid rgba(0,0,0,255); color: black; } /* track label buttons - the part that contains the icon and track title */ trackLabelButton { background-color: #5b6571; color: #c9c9c9; font-size: 11px; font-weight: normal; border-radius: 1px; border: none; padding: 2px 1px; } trackLabelButton:hover { background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:0.5, stop:0 #5b6571, stop:0.75 #7b838d, stop:1 #7b838d ); color: white; border: 1px solid rgba(0,0,0,64); padding: 1px 0px; margin: 0px; } trackLabelButton:pressed { background: qlineargradient(spread:reflect, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #49515b, stop:0.3 #5b6571, stop:1 #6b7581 ); color: white; border: 1px solid rgba(0,0,0,64); padding: 2px 0px 0px; font-weight: bold; } trackLabelButton:checked { background: qlineargradient(spread:reflect, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #49515b, stop:0.3 #5b6571, stop:1 #6b7581 ); color: white; border: 1px solid rgba(0,0,0,128); padding: 2px 0px 0px; font-weight: bold; } trackLabelButton:checked:hover { background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:0.5, stop:0 #5b6571, stop:0.75 #7b838d, stop:1 #7b838d ); } trackLabelButton:checked:pressed { background: qlineargradient(spread:reflect, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #49515b, stop:0.3 #5b6571, stop:1 #6b7581 ); } /* sidebar, sidebar buttons */ SideBar { background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 #98a2a7, stop: 1.0 #5b646f); } SideBar QToolButton { font-size: 12px; } /* font sizes for text buttons */ FxMixerView QPushButton, EffectRackView QPushButton, ControllerRackView QPushButton { font-size: 10px; } FxLine { background: #5b6571; color: #e0e0e0; qproperty-backgroundActive: qlineargradient(spread:reflect, x1:0, y1:0, x2:1, y2:0, stop:0 #7b838d, stop:1 #6b7581 ); } /* persistent peak markers for fx peak meters */ fader { qproperty-peakGreen: rgb( 74, 253, 133); qproperty-peakRed: rgb( 255, 100, 100); } timeLine { font-size: 8px; } QTreeView { alternate-background-color: #747474; } TrackContainerView QLabel { background: none; } /* Patterns */ /* instrument pattern */ PatternView { color: rgb( 119, 199, 216 ); qproperty-fgColor: rgb( 187, 227, 236 ); qproperty-textColor: rgb( 255, 255, 255 ); } /* sample track pattern */ SampleTCOView { color: rgb( 74, 253, 133 ); qproperty-fgColor: rgb( 187, 227, 236 ); qproperty-textColor: rgb( 255, 60, 60 ); } /* automation pattern */ AutomationPatternView { color: #99afff; qproperty-fgColor: rgb( 204, 215, 255 ); qproperty-textColor: rgb( 255, 255, 255 ); } /* bb-pattern */ bbTCOView { color: rgb( 128, 182, 175 ); /* default colour for bb-tracks, used when the colour hasn't been defined by the user */ qproperty-textColor: rgb( 255, 255, 255 ); } /* Plugins */ TripleOscillatorView knob { color: rgb(1, 32, 64); qproperty-outerColor: rgb(0, 0, 0); qproperty-innerRadius: 2; qproperty-outerRadius: 7; qproperty-centerPointX: 13.0; qproperty-centerPointY: 14.0; qproperty-lineWidth: 2; } kickerInstrumentView knob#smallKnob { color: #595959; qproperty-outerColor: black; qproperty-innerRadius: 3; qproperty-outerRadius: 11.0; qproperty-centerPointX: 14.5; qproperty-centerPointY: 14.5; qproperty-lineWidth: 2; } kickerInstrumentView knob#largeKnob { color: #0c3b89; qproperty-outerColor: #519fff; qproperty-innerRadius: 12.0; qproperty-outerRadius: 14.5; qproperty-centerPointX: 17.0; qproperty-centerPointY: 17.0; qproperty-lineWidth: 3; } AudioFileProcessorView knob { color: rgb(240, 147, 14); qproperty-outerColor: rgb(30, 35, 37); qproperty-innerRadius: 4; qproperty-outerRadius: 11.2; qproperty-centerPointX: 18.5; qproperty-centerPointY: 16.5; qproperty-lineWidth: 3; } organicInstrumentView knob { color: rgb(124, 207, 98); qproperty-outerColor: rgb(13, 42, 4); qproperty-innerRadius: 2; qproperty-outerRadius: 7.5; qproperty-centerPointX: 10.5; qproperty-centerPointY: 10.5; qproperty-lineWidth: 1.5; } organicInstrumentView knob#harmKnob { color: rgb(205, 98, 216); qproperty-outerColor: rgb(18, 4, 18); } organicInstrumentView knob#fx1Knob, organicInstrumentView knob#volKnob { color: rgb(157, 157, 157); qproperty-outerColor: rgb(37, 37, 37); qproperty-innerRadius: 4; qproperty-outerRadius: 10.0; qproperty-centerPointX: 18.5; qproperty-centerPointY: 13.8; qproperty-lineWidth: 2; } sf2InstrumentView knob { color: #ff00ea; qproperty-outerColor: rgb(20, 5, 18); qproperty-innerRadius: 2; qproperty-outerRadius: 9.2; qproperty-centerPointX: 15.5; qproperty-centerPointY: 15.42; qproperty-lineWidth: 2; } sfxrInstrumentView knob { color: #000; qproperty-outerColor: rgb(194, 177, 145); qproperty-innerRadius: 2; qproperty-outerRadius: 9; qproperty-lineWidth: 2; } sfxrInstrumentView knob#envKnob { color: #263352; qproperty-outerColor: #4b66a4; } sfxrInstrumentView knob#freqKnob { color: #1e4a22; qproperty-outerColor: #3c9544; } sfxrInstrumentView knob#changeKnob { color: #591c1c; qproperty-outerColor: #b23737; } sfxrInstrumentView knob#sqrKnob { color: #3b2714; qproperty-outerColor: #724c27; } sfxrInstrumentView knob#repeatKnob { color: #292929; qproperty-outerColor: #515151; } sfxrInstrumentView knob#phaserKnob { color: #144c4d; qproperty-outerColor: #299899; } sfxrInstrumentView knob#filterKnob { color: #47224c; qproperty-outerColor: #8e4397; } opl2instrumentView knob { color: rgb(128,128,128); qproperty-outerColor: rgb(255,255,255); qproperty-innerRadius: 2; qproperty-outerRadius: 9; qproperty-lineWidth: 2; } sidInstrumentView knob { color: rgb(113,95,80); qproperty-outerColor: rgb( 255,255,255 ); qproperty-innerRadius: 2; qproperty-outerRadius: 7; qproperty-lineWidth: 2; } WatsynView knob { qproperty-innerRadius: 1; qproperty-outerRadius: 7; qproperty-centerPointX: 9.5; qproperty-centerPointY: 9.5; qproperty-lineWidth: 2; } WatsynView knob#aKnob { color: #43b2ff; qproperty-outerColor: #43b2ff; } WatsynView knob#bKnob { color: #fc5431; qproperty-outerColor: #fc5431; } WatsynView knob#mixKnob { color: #43ff82; qproperty-outerColor: #43ff82; qproperty-outerRadius: 13; qproperty-centerPointX: 15.5; qproperty-centerPointY: 15.5; } WatsynView knob#mixenvKnob { color: #43ff82; qproperty-outerColor: #43ff82; } WatsynView knob#xtalkKnob { color: #fb50fb; qproperty-outerColor: #fb50fb; } MonstroView knob { color: #ffffff; qproperty-outerColor: #aaaaaa; qproperty-outerRadius: 9; qproperty-innerRadius: 6; qproperty-centerPointX: 10; qproperty-centerPointY: 10; qproperty-lineWidth: 2.5; } NesInstrumentView knob { color: #e7231b; qproperty-outerColor: #fff; qproperty-outerRadius: 11.0; qproperty-innerRadius: 8.0; qproperty-centerPointX: 14.5; qproperty-centerPointY: 14.5; qproperty-lineWidth: 2; } /* palette information */ LmmsPalette { qproperty-background: #5b6571; qproperty-windowText: #f0f0f0; qproperty-base: #808080; qproperty-text: #e0e0e0; qproperty-button: #c9c9c9; qproperty-shadow: #000; qproperty-buttonText: #000; qproperty-brightText: #4afd85; qproperty-highlight: #202020; qproperty-highlightedText: #ffffff; /* the next two are used for whatsthis dialogs */ qproperty-toolTipText: #000; qproperty-toolTipBase: #c9c9c9; } lmms-1.1.3/data/themes/default/tempo_sync.png000066400000000000000000000025771247673406200212220ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDAT8}[lUg{/{mA.mH`5 Q|C0ФQ㳗-H"m iRB-mv33>]dr2_seYH)u*9vѨFXiFFUb;AkfnݸZKYEr`SixːR2oHg1͹!.^d-8{䲕xʜ[K Qi |~?ysNC+@ZS(eQQl\Ç{+EHEE%oa1+}Pԁ%Z0狧o׬m~]./11C>qr8 hZ@X-~e-58peY`!XēR߸QQ屃ݴ޼>0yA/^woJl=Ht2y jYԜq˝n.a%;20=4-=51~xG %PMVcK)㺮9 āe._w-TDIENDB`lmms-1.1.3/data/themes/default/text_block.png000066400000000000000000000011711247673406200211650ustar00rootroot00000000000000PNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE555DDDFFFUUU[[[bbbFFEZZYnnnqqq.46CCBHHGMMLQRQRRQUUTVWUYYX[\Z]^]`a_ab`efdfgehhhijhjkjlllnplopnqqqsuqttrxzvyyy}{`#vtRNS"p;IDATxڕλ @᳛M{[,,};h6:Yƿc)4Hif=z Μ:D2CeWU*|p`ZLӀa0 &[BlYAX4ǃVBaS17 -ku[ E4B)b+CčszĹX}1܇鷆pr9]AKii:yP}c𼿎T?uZW/xšܚe 8Bn7,G1͂IUD u&S_("ܳc@`8ɱx4nyA&0 `^O߁r8 g#!x0L? n+EK/3<ܗa θ끬(k|iY#sͻeNw`urJ -}8\)Ba TǻRNC0 2){fsRm.[Vڼ:ӈZm˲,}*EJ B]Pܦy)'SqX0isY>7g~IENDB`lmms-1.1.3/data/themes/default/text_under.png000066400000000000000000000013001247673406200212020ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<=IDATxڵUjQ]3gҙ$H Te""?X(xB!Bk9F&d{u3#c(Ϝ} X() Y0؎۶`6l˂MW"o?zzx1Tf\7 AGiT?V_i72Z?/ r%T qtxDk8d7nn]1 n'<4R\nБ"$!KG-5@40 }z=tݠ~yCys牘~L ,DO!IENDB`lmms-1.1.3/data/themes/default/timeline.png000066400000000000000000000003241247673406200206340ustar00rootroot00000000000000PNG  IHDR bKGDG5IDAT}IEuI_#KknдXkn>a1Y!Vo,0>4չ^LXkfjjidhUrX!ֳ!\uq'Ze-,=:CrX;aT^4IENDB`lmms-1.1.3/data/themes/default/toolbar_bg.png000066400000000000000000000002401247673406200211350ustar00rootroot00000000000000PNG  IHDR \M pHYs  tIME0?IDATM1 @BL I!|]DWjBS21i4b߹dNW6ѷ//k]qyXPIENDB`lmms-1.1.3/data/themes/default/track_op_grip.png000066400000000000000000000001551247673406200216530ustar00rootroot00000000000000PNG  IHDRbKGD#2&IDATWc`B$G…Į . 4j8` /R]jIENDB`lmms-1.1.3/data/themes/default/track_op_menu.png000066400000000000000000000015111247673406200216530ustar00rootroot00000000000000PNG  IHDRJLsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDATHMh$Ez[B{2"WQ<e`,d4B.9‚(Yq%fLOw8n!,C~Ua{(ǠǠa$I^"||"5wU= Iv)(IOE* "1<[ Ykva98zgYDD C2QyއZE NO 'I "yxZ]]]VOcp5??_GcN^9dnꝢF?w Kݾ4==1cxii299IexGn+C STU{J1JaEEJn},3нT*].#5111׌9;;{Zi=WZ;2uy9ZfffuHP}sx}\W0yN\~x$lb~1iN-9-LMMUβښy7zsN,둦)nݽv~YmwxVYծTg~oTqȥO^NV%:E9 0 Uq!z8z3}>&w$Aѻ=?vtRIENDB`lmms-1.1.3/data/themes/default/track_op_menu_active.png000066400000000000000000000014701247673406200232120ustar00rootroot00000000000000PNG  IHDRJLsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDATHAkA3ɺC $sЊT[W=x ^=+~VbPƐCu!fffT{(}0ٷ7of( tTիZ+Duݕqy]IkjzzCgQy@c0 p9Ϗ4kZJ)(IV]]@ Y1LӄB$IhRj1B={K].Ў 鳦i0 E!hZ՘LDyl6{4Mض}z{{ Àa[(@DRJ c J `9"($ A#rnYmmCD"˲zqα>h 5KןdxxĤJ^㩋cccإ}Amt: "AQ48))%ǹ i_Pw{/Fc&vww?{qHټfSJ)q^2u8r7J&)%0D}=0Jzd!:T>̔m7T&Ʉa":("HPx677:"icLHԉ H2I| 1Fm_w?/vTIENDB`lmms-1.1.3/data/themes/default/trackop.png000066400000000000000000000016671247673406200205040ustar00rootroot00000000000000PNG  IHDR;mGsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<4IDAT8eTAL\U=ϟ7V$HH nEV!&$1%X; ,\0[f@"\lhƴi8HΟ;.w='@;ɜ=[<[1?|pPUJݝxRbfWVVRwj@) xSSJDDRGJz'2f+8!l6,H""$&=dZ뿻CCCttt|f_pZMDHƫVAP* 166f֦D$VaZ$-I㺮ha >乹H$r 1\.7H$`_mkkF5Z8001y.J}~p$A`}߿{W%Ik-/R ,|P.ϋ2<{||d:,bxdMMM=XkL&smmm:LMM@r;(8::?22aX|!z$.4$+"y)AZk N;Hc b)_t}߿yoooﰧgRDThiֺy޵ 2̅T*L٩[ZZ~jc̉81qÑBvcc㛾DP( B)Lﴶ^<&I)6\E;O x{kkk3ո OKxL`ٲIENDB`lmms-1.1.3/data/themes/default/trackop_c.png000066400000000000000000000017341247673406200210010ustar00rootroot00000000000000PNG  IHDR;mGsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<YIDAT8e[lTEƿۋńĄ(F!cЪD RLj &ZmT틁 4le){[d2|O$1S˲ѦѦ<$,r?I(huO>^w*@*t, `Α{Lk̔͆Tqۆ^^Um?c%cJRwfWq;?X?H~9LK2Juܴa:a)fwɚglw4DZƺם'`*pcQ,R| A`Ef4=WDéw Pi 0"4I6A 9<~}rIlkMr0#=o|@v-;SH?`dV6gvQ ?A⮡ۯ0Acg8  r ?Wͬ5YZhEs0D8,KT/mVz^=ӾEF}]#u\S$p5SOz Bvo8N7IBi((w+! HTxċYE#@Z8E#GM غ.1O˨KHrIO>m-]:Z^qJ9B,,Ϯ%bh7HXh*Rh#&47&_v:sn\\zZ[= H`@$hVyԢ~)AirK];o:Q?`ᬻ^7CYIwox-worb%5ƗZIENDB`lmms-1.1.3/data/themes/default/trackop_h.png000066400000000000000000000017061247673406200210050ustar00rootroot00000000000000PNG  IHDR;mGsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<CIDAT8]TMHg~#!D7"t]PVAKYRn)`EYJJC"H Qbm=X%;000<3 y>rOX̌k334Y.^P(d۶` ϿZQ=2iAtww'~m[kllH$CCCRoq8::BJyp8Tu""0RJ966;@555WJA! 0e !*otfﵴܩ.?3"Rbkk+1::# ¿@ J)? |4M(P,K}}}7d1z4jB=03g2߲, U)߮^7WH<J)8)eF̖Rj<X7,˪-3H|6;; 7p0 03JRuddYǨCC]׍@\ "iPJ ]qx<BKN[!nY+pib Bw?kgMlp?Evjͮ'ťqY7L礿NS1:_yiZdT'9M"^7L_yu={2T:~֦\_;aH`B/5{7&z1*aa"]`$Iy+dLɠj=_l=_+QifIENDB`lmms-1.1.3/data/themes/default/triangle_wave_inactive.png000066400000000000000000000007571247673406200235510ustar00rootroot00000000000000PNG  IHDR(PLTE #""#"###"###&%&&&%&&&(()()))))++,,++,,+,,,.///..///11121222244444545555455587788899:::9<=<=<<==<===?@?@@?OOOVVVVVWYYYZ[[[[Z[[[[\[baababcdcddchhhllllml|}|}}}yIDATUNP@KcI7nݹĸMo(Ό.^yU$ϏTHW,qH9S~l]uqS`Yw_IrMjdLOYX(Ko80sX#pƗ䜙nPL8^y VIENDB`lmms-1.1.3/data/themes/default/uhoh.png000066400000000000000000000046421247673406200200000ustar00rootroot00000000000000PNG  IHDR00WbKGD" pHYs B(xtIME AF /IDAThZ{pTݻd7y@^%DAa "Zj-muj(AVpRXc;V[""@^yn}9`}ޙov;}9;0RDNvcMUdv ft%6Jj[$cf3dQ<_ {Qgn1'[`639yPjʫr1yjntG{w/t] OMsK ]1UCB,෿^5L.Łe%5*[Jýk,: BJ\:Pj@{4 /y <: +1P>I#0q&,w)ܙdk{\19獁ʷybdNXZQVRh>oX?CWI2**O]gcCs_ݘjfA4e,/3껤z ^ٸ)ɰf"=&Dk.pY InϒRqL3ӛDk ˼fg]IA,כNYuA\6*%|J&="1ܹÈgx 9ӆxGQ9dKYk]U~5q}(~$ڱRd睊-j]@w䃷e9=<0z8eAW%YW߈(Bl!\cZF, @`X;kp1iS=q@=?k㩮!4c& !յiEgCǼb7n\?}?@C<{ iȭdEDX 0u zK+@3yNX @~?baK- 55N`UHjLPSC*Q+s1Y~%>KvQČr{KH SR*vJfWJO|cL?.>9ll rmF,*_w{?oʥ -]4Y'e#?#tO0 ۫j] B}H[=Y9d|,+&B[-EwJ a|̉Pcm1 IZ*:]Z}Rdé"ҡzwd#dXer̖}L}{0~=+f)E7!p`{*b)2/Jk#Z42)ۓ+9}S\ěeYQ '͹l{̣ []۾onB9V~z}eM,AHR_RWt mt$vyU\yu* |.{c)1Cv%_}=!]ц؛ϯ?vwVO@]I1,B(Y,Xto,$l=]ƔmZr'L<Ͷ^[{? 'FU^uΕ/mH7_~.|[3ּk(f1MiD}HհJw8rJ!Nh몗65rw,Ӄ/Ufpw߸O,rX&bI|Œ#1)6ρ+}Y pn4GzK}0;'-'r /ڎeNW^93! ؝ΥUsGNޱC0(8p^>sarۈשy,9v딹UsgX 'àbJ3"nhniq 0T*FFȐaܞa46r2MM&;(~ tNF%C؞2?Ӕ[ BȰmG:1tY>}Ցb8J5T尬 &j4MZ^X؉C7I (//J |&Ym# iaw@ӐV(":>oχ(9GɩnεM4f %JE@q4? G@w/[X\vUp PNj4P14436W[ ހIENф4ǻwG8,vjnZe9<5MVI\L%x:jnKZ7dj !pS0H2d91~q A# Uj6:v<'@Q1Ә}eF$,lnLUef f a2zjJ8 GTj͆|G zCVq(+-ZŁ$M $E"D>eB:O9eQPT27tj "2Nd8*YVALYF;2LRBQ !G慱YL6 E”A4~RZg!'Xc14VdYFD}=)/ryH8(EQ(2;";a 'g\ h:& m}IYKN#QQDݖ=~o4E#,F Ǎ6/~jBf'OqIçIAaA,%e;nu +]^9)Y ZBUA(P4 BѠi a1^}OqLkנȉSU0 IۧObPE3` 84Z-45)z]D"9vyI1eA2 !xpO*ҟMG`EӠA3,h˲`XX(`ʥRv57 I /q#"5d 6 Gϟ3x2ec?ZVސ!LjujPJ%TM'= $z\;_.DccpB:zzu8gC | h4Pi4 PkuP5Pr*( 4'cBYi%I@/5hk9 7EA7=|l|>z;z}"$  Y$bQDb$>-eQZӀ},)٩}{;o}Y\ly'WÖSfB|x IBBN  ,apJ=q5WSSPL_S}㑽đy tZGYGVf&D1 Ax!ABD.@  A8x 8F`ί+u4} ;@zRϔWXK}ISe5i(#L/HSOlݪ7@JA) K.5X I^@<.h0J$! ]]#× x 4J-BkW,0UBȗ;6ZWW"^X~O74ZuR V N F a^h <Rj:@Q0•7-^yMֶޮ-)V3ZeiꬪR]2ZE:&xa?Red3a@,,Jx{ɲvC<\g~qדs:NɑP_P6͘>p8p8 ^$9E J)j* JWLUOL0L.덧v68 RU !T5o?ެ_Ɣe<#M:}D,^7Woj{`ଫ#͹&_zK[kM~CD#`@AP O4*B!"Z&߲k;}͟|wN[LZ6L-Vg^(ϱeYF׃h?^OdYThA"TtiӚ\tV=c+lEӫ[m]Tw䑤͇TD;.%eeݖp⊙o-M_Mpy@P,6Gʙ9UsgFO{{\-Mz=o&/hsa;IE83,slSENȩɱ積i_5H^WG$Oz$Or\$I 4M[3L梡G$ȷ}-4+&ks m!vKFC&WiIENDB`lmms-1.1.3/data/themes/default/unfreeze.png000066400000000000000000000024331247673406200206540ustar00rootroot00000000000000PNG  IHDRw=bKGDC pHYs  tIME fFIDATHǥ[lUs^mK6PZT\$(O /&6h7}0/1@C/V,!`A 7hnwwfvg><%buΙ? 9t{θ+**ƃLnhhh?AkkkѶm۶ejjjvwwwO۶}ļGԙ+mit'J,]7Wy ȿ&x۫s:d2վŋFRR c_sSEsss~%礯z00L݂֕V%am'.F84P̖e^ș i>Y'I79| jqp꨼Oj&R8h6Pظ#dzlk~q 08$Q yvҢc7[#T1*2'fO`S f(y״=z HkXX('{p; օ ¶xqaԯ>؉$Fe-{ye4#Eg:}j'> &Y׃8 .rxӽt#>VERj \YUE|6I:g+%o'?QTC`Za}mHȸ̉HFD\捶$D$&wMNDDDay @`VqBFgҀxfbL]_x45.3`"@W"0L-v:#Xbz}FسE @@˛ 6ڽR&W<y>(muXGw]Ǵ,0tow;v&6w߁N0 &iT@R"i|Iߜ.(fuL"JUp_ʩ6SnH uw>zj g&S,lD,Yj4恤g=잻t෺ۼ"7*R$\RF g]l; sS7++>pD~^YKCZUIH bZ&Aװ]^ݸ-Y_&^@:о"YX b))^{F@,Z-(Vs#X< y=oA׋IENDB`lmms-1.1.3/data/themes/default/unknown_file.png000066400000000000000000000004041247673406200215230ustar00rootroot00000000000000PNG  IHDR7IDAT(Sm=AAyx**%jN"q wK4D$x3}o'?;I-ݖ3R[q EYO a0Ӵ6D{)pk9u5Ni~B=]/⨮IENDB`lmms-1.1.3/data/themes/default/usr_wave_active.png000066400000000000000000000007321247673406200222170ustar00rootroot00000000000000PNG  IHDR*bKGDC pHYs  tIME)*I*gIDAT(ύJac"hxAQL-6XeJ,,dsM6gBSM1|p0t@PH&W;jf:WMlON80`eZI7 Q0;  N2ҵr=/{Q5Oo%t] z׺HxfZOe@Ϙ4c)De%Ԧ`5 ׯP(VX $e{icɱDBB(3PXI "z+JD¢?*v6aJJB֨ N3TA-m ڿIENDB`lmms-1.1.3/data/themes/default/usr_wave_inactive.png000066400000000000000000000007521247673406200225500ustar00rootroot00000000000000PNG  IHDR(PLTE #""#"###"###&%&&&%&&&(()()(()))())))+++++,+,++,,,++,+,,,+,,,--..././..///.././//.///111211212221222444445454455554566666@@@BBAMMMOOOPPPSSRVVVVVWYYYZ[[]]]lklllllmloon|}|}}}LIDATU1 @@?IH=`o %bl63{G8,Z!2WQs.(6XPxhZ^R)IRrfU)SɗklPЫECy %mx] (^<.A+{~|EEXIENDB`lmms-1.1.3/data/themes/default/vst_plugin_file.png000066400000000000000000000033411247673406200222210ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs LtEXtSoftwarewww.inkscape.org<^IDATXo\W}n3$n۹Թ8JTQ)*ѨUy xHI)jD@EDTHsw.ocό~.{7g&qA,hg3kn\ U!D`1cryo}^Z+R(Jiv2ўJxk7v᥏>r3##{<uBpֿgB<Ⱦk"biuB[kcFkz!s|. Q癜BTn*~n}h ˑ(sώ]Cn;n\w=Cl8 }F.N-\G|>@#G&䉓g湁8;4ZKj RZ iun'd yNN'-Cx{>8/咕* DK@Iť0} ;v?t7{FG{^vuR*&a9 楼ZVISfxdD QH.v#'g\snttE?i5@hmtƦQ~v8{(I)S'<{-XkXUwܿN->7lRY%b8 8(vT#{1`~AE& RIS_'ZG3D8&N G\>OJ8 g(nT-{wEQTRBkN ¤c(-/%40Kg(|!#ZKjRJJ!~uRfKžmn]LǒD&ȎRi Z2fɿ-vaOtC(P;iVVtZf{o>y(^BB$$IY-WqER(za8NHIt iHF}.ĚRD4/WWc6q7eBf|fיvv4Y8Ih5nZUTPmVEߏGFn<6{9033#q[pY|L$z"Itt*lj+Nm SÿF@K>#ޞ:5E%`\^.Wkwls=2R&<$Y~ͷ>>{dLRHTܓZg6~;\Y!h󧭼ޥNѿl%x֎N+Dϟ~280LGqKE+ɹ$kV}}oBJAd4c?i옳ụn2eR=G~ |,/^Ls"p"D/Р2߸7>o@k4zy?ƻ𺎤cooVeK,քͺHwKB8qmI̢()!n45.Ti#c6FDꖶNm떮6f'ʶ^.*h(I1}7^y>]-ќڨD </dq0@qLd+k#(GA/+Tmd!lk7nO?cif@i)響_ L.\8y߿|Æ w/sۚR:*^,"+B:*.%R3`Rb/ <ҍa-Xэ:VݭgjOc7Dgˣv ̭nɪUNYnod,v"ۋF"cvz`mT'?}RIENDB`lmms-1.1.3/data/themes/default/white_key.png000066400000000000000000000002211247673406200210120ustar00rootroot00000000000000PNG  IHDR 98JPLTEoY.IDATxƱ @Dt [jK\HFP,9,.FIENDB`lmms-1.1.3/data/themes/default/white_key_pressed.png000066400000000000000000000004611247673406200225450ustar00rootroot00000000000000PNG  IHDR 9*bsRGB pHYs  tIME"(}bKGD̿IDAT(SK@D3mb-^. tc*Uvej@hby x{7eufQ#DR4o%}kVi 䛙 3v%RRl K\2yd:}bDHϧ`79lGa,{kCYI^kބp?V5IENDB`lmms-1.1.3/data/themes/default/white_noise_wave_active.png000066400000000000000000000010251247673406200237170ustar00rootroot00000000000000PNG  IHDR*bKGDC pHYs  tIME) (IDAT(ύϊAf%$KDI 0\ e)CYJ S5h|14Oć>CR_MS% (PCFg2\9gglf e^Vwڛ0ư׬VtoaQ#lbIMgnwG4^Wppc 7$k$ j4"*RzK5_~KB+}J(AIv0ٙ9J3q9\A8ժ?yjn~A}\x"JlH*H$H|ҷc1تtSKSB&- ˒cqDRK@KI ""Y!;RBQoSJ/Ѥ怂Tw1JeyrS)q@$A^v1FSP@T 4%Ij vjɘ1$|Р 11"@;- T̤霙s9ۇN?Y[Z߄seX 啛[rRbȲ?4?7|E4655TV5: sP8P1t9lGxںԻ>9^V J)2Fg@VvvE;n;s_>e@]cSË{^mMJyUUOVRs.T148?]GAaikw].B b1lXv0#+;ut&v"̄%HBaJ1+IȵZѰ{&Ƈc|zJ[ね 8r[!PHwGsXJq-!ڄ b z~GXQ(EDVpb~s"=?aYc1I/`'w`2) 3Bp t;E!juj; ) (RdsZ&5 K)Ep>@ Bs!B P h?y1PFaJNJ^#^JQO Ca  e01X  EP(t)@ QFEjjPY ΢zNX**tu:{,Zw@5LM'LFdY#{*$J@Uȯ=6 `:M yyy {/Ca}=("(. 119ߍZUN+NpQw{~odMJFڝ!Kg IDɌ]oUU&J_QEsZ14?Y =ATɘBr +nhl(/X)7sL xF:RLJSǏ}*>D/Ԕd.JJy,]7%:'͇CAkXx-VK7=η,fY!mUXPd, i8l+?7&%۹ge1 !d?\]C-4VWUÎ Fm0`y yGVӅ-πEJOqTln5:mf#~_AE^7 HP`oɎ='IENDB`lmms-1.1.3/data/themes/default/zoom_y.png000066400000000000000000000025271247673406200203510ustar00rootroot00000000000000PNG  IHDRw=sBIT|d pHYs LtEXtSoftwarewww.inkscape.org<IDATH[LTW= Fb[t7<6}j1K+KcTش (љatwΜs9g>VCOֿֿiy<Kq쬂Tgܲ$Ŧgb}n?xA5D|i*._w Զ9iG"fE(QLddfP]h;/l P[_SZŕϊhW gϞ۷"w{HȴD!<ȿ/=#3.؆oδPAPECq9^lۊ^gdY_yu^ٜ(`eaqsyźHU9Gk8~'PU䱣8r(Wa,5k+s _BIiE0+eS\_>v1&lߵ<frr0+ P%<ZeYl>J)A)Kq La))9L:Pp.$NwSJYJ9h *cP5R0>WΡBaR"J?4AѴ9w . lLO%LONPnH d EU1|L "4ƐEtq D;D@ LLM:䱉x$I1`0DljcD* J"~B}}CxzeQI]7{V;]w0Hn3jhC 7PTSD;= \0őbĒT'.cdpYe(٥1:<900twv0:'b7Nuzf X̀PL`RlV;&ǴxdPEoBݜd!$kYG++[<+s7s vG)U^__Z> 4b۟Np+@޶H ߅[Anz~؝`֟ ɂ`P@8D!œ@,@߹w?4?\?g@??j?à ?#`?;`?Ϊ?y ?8,?U ??/?r? ?@?k@?ɵ ?޻?XF?B@?̊ ?3?A?㜱?#??2@?g`?)?Ĺ?7??Ϗ?K?7@?@?@?N??DL?-??;7a@p?x0)VAɀ\@%P O@'@Դ8 Ə^H-@ʤ ;@͐36 }н@@Frp:`+ԙO t_י ؾ`>@@g 5ې`.@ܹXT @z` ;`ߤn`Ʀ@Tଠx`כ]Խ<[E@K}3@ ]oa?i?`?g?#?|?@?!%?Ń?厀?3`?{6?}?Ч?hg?Ғ ?Oo ?}$?6O?g@?@?R@??>-?@?)?ϸ?y@?޵V??MC?(????1??#5?7@?D?J??2??F?? ?ƀ?{?D?G??)?o??*Y?;m ?x??\???S???U???S0?6e?an=`SeGD'E@JHl0Mʀ *!UB2`r@ķ4'Ҿv`ӂ ɾEԏz fU-֐ zT`צs k@F1<@٠ cڼL'ہ@ GHܯ `s"7 ޗc `[؀e09CC`R;Y@jho؂s@׆^֚s`՜Բpӳ.mɗl@Ͽ$@TF8… rj\@?ʽ6@Vx|/pQ?q5?t?d݀? @?QO ?3??T`?e@??ÖF@?K`?e2@?ɦ?0 ?? {?v?rn?P@?ߒ?ҿT@?L?.w ?Թ?՝@?&? ?ד~ ?|O?E@?@?l@?[V?ف?@?E?:@?޲5?ߪ?&???E?z??0?ⶓ?@?oD?e?(0`?Pn`?f?$ ??p@?U`?m3`?? ??/@?P@???F6?1?4?À?̐?$???x?7????y 0?h?׍?"?n??f?I_?$??Z?s?v?,\?V ?P|\Z ( fT!~:M6u+@@$];z7@@Ϩ@q$| e P, 9 *%bNƌ1sǵN@ȘNɽ30`9X-́^@R@Ω@xytO}t@tѥ} 9@Қ\@-@b: )@RSԊgwxղ F@֞@ڔ1nW ؖ*`~ پ @Rڤ 7$zt 4`g ]EܢX Y6F݃p0^ީ@׀=߅ҷ`d`ޫI`>_܅`cD@٧9dׇ@S\R`Ԭ@??_cDR-@g8@@Ɋ5Ƭ Zi`0G`*pFJ5ݓ' ?^e??,?f?"?Ӏ??C?d ????m? ?K.@?z?(?Ur??, ?N{??6`?s?y`?p @??cX?@?V??I? ?=&?U?0a?Ȑ?#?ּ@??ױ? ?إe?@?ٙ?*?ڎ ?;?ۂ~?C?v?B?kg?ݼ5 ?_@?ޯ@?T?ߡ?$?J``??ý?H?=?ᓳ@?[@?(?/`?∪@?@?:?!@?}ـ?`?`??sR@??1??i-?~[@?K??_?o?`??e?V?_I@?Ҹ ?`?O?N@?@?ġ ?IR ?:?Ǖ?w?G?#?#?p?K???j?d ?LJ?@?Ӡ?g? ?޽?p?D?f??h?E?eS???z??z?&p?6??e?vp?q?<??Vl?h?c%0?{k?5x6xl.2&Zг{aO2QU72ٿy^=Sg@h4nQ@`s@4/B@n-E@\π 2"ʀ̋`®Skt\:ڂ@ŞyaǀƋ@%yP47Ȭ@ۻ`p ɡ7 4@fq,`˼R`̀9`̶ D&|=@A`@ϐ `3@*HЌ@Ы`@ PpѲ ;$5v0@Ҙp`=:K@] Ӝ[4l"Ȁ`~ԅ[‘@`$J~ Ն խ рJr*֭Է7Cq3יπNZ5i^@ؗm#[`ن~ٽ@@Kڂڮ 9 `FXs ۨxե` 8*@lܚ 20_ݓ 8D`$Wiއ8޹@L~߮`ߙ `ޣr* `ݯQ6ܻWC" fO y\ߍ h`u ׁ ֍՚r@Ԧ( ӳc4`ҿ܀@1@ULEϠXX@ʓ`~u@A.m)cGfA@`a`Y@y]qZVC`t L@= 9i| kpbP?q0???+?i?̀?@?U?P?z?`?J ?? ?N ?' ??ݥ?N@?ż`?Ñ?ĭ?w?ƕ@?^?~ ?Eb@?fI?*( ?`?̗ ?qy???`?p?&@?nۀ?j?%I?єR?۵?K<`?Ғ ?(?H?ӹ??p@?ԵS@?& ?k`?`?"?֔?r ?K`?׎̀?׀?E$@?عր?x?p?ٱ?'@?h?@?a?ە`?ԧ?M@?܊??A'@?ݻ4?_?rT?ޭ?)x?c?? ?K?h?৅??%@??^?y`?p???/?qπ??͇@??)E??? ?ʀ???<?Ps?䘍 ?9?w??Pn@?`?s?>???d`?pE?@?ʨ?>?$@?y`??B?@?2 ?2??茚?@??J@???O?闬?@?Ȁ?ex@?G. ?/?ꝙ?&??눣?E??( ?W^???,?K?????@?h???k/?O?y?3"?i?H?l??cA?-? ?S?C?^l???N??8?b?Ez?q ??L?@?c?|??f0?xQHY`?Tx4pk `Լ<Vz 0 Ɂ4SJ 7l߁&_E6׀ZD~@n~@F€_&@5=CYfE@~/.@ lq2@b -G@`A UԎgV~@$@/ÌæK` :aIJs Eb{kgƊW@ǑL`Dz $DFȷ@`t@J?neAT@pG ʖ?O`*(@˖Z@˾@)hQ̼xO@y uΡhΠ5@ϛ`@.ua`x_`ЪH3 /=@VчWџ3ǀd}ҭǏ@>r@@@[Tӊl ӥ68g4@Ԃ԰@̹f@D`w@Ս ժU54 >jlև@ִ`` GA@eאׯa{@=$Cm،@طT@ J@jٔ/ٴ^9'n Hq ڑںL%@Mox`ۗ۹Q@-**̀Mtn ܖ@ܾೀ*QPtcݚ@ݾ;@.5Q`w؀ޛ|@哠 "/cT@y&ߞ}߲Uޟ C=ݍ"2W|)@ŜhڲX :١Dtb؍4 ~E ǶiZ`(@ղZ`Ԥ @E|ӎ?6xҀ` iEг#@\@LS΋'9@r@˰`Bvɗ@`*gSƽPČ.vv `Cr8 ^mЎ`F ` @1?ǝ7p51ZH56ql?Ch`?{|?,?k!?k?-?j?@?,?Y1?A?@?C)@?1 ?.??0?@?/?u,@?+ ?P?#?`?/?@?œ`?qV ? z? ?vn?L?`?Ǻ{ ?PP?(7?ɽ=?ʕ ?(9 ?˹?k`?̬@??͠A?̀?Γ?@?χl?+?=?m?зM?C`?1 ?``?Ѫ ?n?$?T?Ҟ?͘?Q@?G+?Ӓ `?? ?:Q?ԅ?Գ`??-t?yc`?է ?5? ?m ?֚$? ?@?`?׍??ڇ?@?T^?؀X?5`??H ?sl???;@?f}@?ڵ??/y ?Y?۩V? ?#5?L?ܝ????@?ݐ`?ݹ@? ?2?ބ?ެ ?@?%?xu?ߞ@?`? :?6&?H?s@? ??f@??`?* `?;@?g`?x??; ????. ?[?kK? @???䣠??!L?O@?]?*?㚘@?8?:?I ??C\@?Pv?r@??佋`?ɧ??9?7Ȁ?B?t?S???C@?[?,v?4֠?i?qL ??死?3?"?!?&?^@?b?8?#?٣?c?@??T?S?5?@?݀?? ??Kn?C?``?5@?s??@??D?1G?@?l.@??€???@?`?+?S}?b?o???H?u?쏃?' ?ډ?R?-?r?`?v-?)m@?֠?n?`@? Q??<9?????S?m?3?*?G? ?2>?;?u?E??}?m??? ?8?_?I?5?~??z?D?f?? B?p~??<?N? b?b??p?gX?xH?P?j?u?0?aeLÀvp#l| Lհj 0J,{ _X' B z8[y!'tM-UI`MR7#hmiv1_/*~w|@?Em *"Ь@'N@[j@!9p@]q/@!@6؀T@`7@`%٠z@yܸ@>M@ °N @d€u~@ɀ(:Ċĝ:NbZ@ű@@'uu#@Ɗ5` 9HO@Ǜ]DZr`#_v.# ;ɅҠɞ5J@c9@ʬ$ŹA(9@p_@ˊ@}6`4@O̖`̲0` `Zw'ͽ!٢D<`΁gΞE`cϧՠ@:6Evg$ vИ7ЧK&`_ `+t ;\lԠэў@ѾG 1Qb҃Ҕ+`Ҵc4@K'@GaY @xx@ӊDөӻ{ڦ @<ԀO!mԀXԟԱ@`32KE3ccviՔ{@է œ` `'Ġ;B@X@lx ։ֻ֝@'A1N`NZ bsדװ #@'X@C@Xt؉ئ غ&+@@_9Z`Njtٰٛ`̨1e.@D@_u`ڑڧ,`6G j$a:U|k`ۆ۝@۷`: n0Ka`|ܓܭ7<R`p m&@`W@q݉ ݢݺ> q6`Mg+ ޘG@ް=bp@+ CӀ\uߍ ߦ'߿̴ߎR!BHޛ^" ݨik`. Cܵ w;| ۄ `H2@ L΍@ڐT@@C@ٝa #V ةnT/׶@{ @<_e ¡և@H @&ՔvUhѠ۪ԡ,a'/ӭ nq@4>@Һz@@@7 Pчy M ГZc >}A5MZ@f [s  Ɍ@Ș'<`ǥ3Ʊ@@ž Mf@ʝZf؀ s!K@@ #3}+H@L DI`ff]J vJ QI@I>GFY憀1Id:J{,|r \)`INz"8i_?Q8?ql?_X?J?K?,??<0??k?!?8?^8?@?,P??j@?O`?dB?6?KQ?~ ?2a??q`?r?? ??b?Ψ?`??N?Ni@??A??5`?›T?) ?Î@??ā@?'`?t`??h3?D?[i?@?N ?d?A??5?Ň?'B?˓?ݡ?Jq?̓ ??J\?ͷ ?`?n2@?η`?$?mt?_? ?H`?m ?ФG@?D?`?#q?Zߠ?~?Ѷ, ??x?4?l?Ґ%`??Q?#`@?F~?~?ӡ??Հ?5J?X?Ԑ?Գ,? ?V?G6 ?i@?բ?ī? ?`?Y%?z@?ִu@?(`??1Q@?k?׌z?h?@?!?B?} ?؝?^ ??3?T?@?ُ?ٯe?W? @?E?e?ڡ@??U@?@?W?w ?۳?A?W@?-d?i@?܈??? ]?>?{?ݙ?? ?2j?P*?ލ?ޫH? ?f?D|@?a?ߟ?߼@?6? ?+J?9k`?X ?f? ??Z? ? ?? ?'?=o ?J?k!?x<???ƈ?N?<??!?.^?O@?[?}]?k?? ?̀?u???4>??|?a?l?㏴@??p?`?.?~`??"?F@?Px?tm@?}?/?m? ?@?@?] ?+?3`?YG@?aF??厷??'`???|@?@?>O?Di ?l$@?q`?@?2? ?̓@?@?@?#?'I?Q{?T?e ??R?=?E@?܅? =? ?7:`?7 ?e>@?d9?I ?g?[?辍?w@?몀?@??K@?E?z?r?R?韨?֬?̂?@?I ?3?%?b4 ?R`?@??@?V? ?{??k?M`?/@?}?Zt?(?f?ݳ?Ѐ??ل?@Հ?>?s?) ?π?N?A?p? ?@?_?s`??쑹?=" ?H??X?W???h?F?g$?B??Ӏ?^???h?!u??R?7?q?b?i?y?<???k?)?%?|??n^?y?]?i?JF?0]?4??;L?? ?X???h?R?g?X?,??^?0H?h?>?h??m?3?ڸ?}4?v0?}?k?t,?S?e@Q%?6j_ΠvjqOP~zJ4bdV>TZ ͚ztP"]w8$N9w T.RwDmz: 1BV8=0КĀcOX ȀF@g@WA%=@Ѯfe@Ȁ@@k!RҀE<@I@)@k@q@ @@#-yIUaFo}*@ @ @@)8$̟@' 0;q"@z&6 MWMڀ밠*h5`s@{@½_C`P]&Ú9`ç`ˀ-^:`vĄ Ί i@S@bGŝF`Ŭ%0t?߀z Ɖãӗ@ < rV`gM@ǠnDZ'`3`D}> Ȏـ،@u@"d`Z`l< ɣɶJ6 Iʀʓ@#m @'B]`q˦˺ `:>Ñ̘i~= ,``uͪaͿ =S[`·F`Ν-@@0Рd-zϭЀss" , @E]`P`j/@uڀЏ К€г@п`إ w y"J@.a`GSHk@x0@ѐѝѵg: $ 0HUmzҒ@ҟh@ҷZO.5%3JWo|`| ӔP ӡ@ӹ$ƛ끀g'5MLtZ3qH@@Ԗ`ԣ Ժʀ@ )m7NB@\{@sՁ`՗`զF ռ+i +>@9@P^tփ֙֨־ofT;9-<Qav@ׅ`כ`ת`eϲ@:  {.>`@ScEx`؈)؝eح; @ 0@ U@ezgيiٟ<ٯM@ 1 `2@BހWig|>ڌ ڡڱ`o@S@ 84l EYBj ~ێ ۢ۳@ج`o"t6EGX`[l<ܑ ܤܶɞ@t @J $ 8 @I \nx ݁̀ݓ[ݦݸ?y#O@`%`&@9K^pރ ޕި~޺z T]+`A )$@; N@`r ߅`ߗ ߪe߼ PU`ِ@߫@}@O"T ޙk>k~6ݵ:݈ Y@,ˀ@ѕܣnv_H** ۿۑ d 6_` ڮR@S@$ P`ٜn AzDط@؋\A/ԢץylJv 62@֓g 8 @fձ_Ղ# V)& ˛@ԟpWD RӹϠӎ^2Gױ Ҩ|{L!E{і7j`:߯дo@ЄkY9)'`ϛƀE >@Ώ2.x-"\ k  ˵Tʞ H @ɒF0 zp%qo ^ƸVՠ2ŠLKȀ@ĕ^3: |(@'@r @Y@LN 0j  WM z`#}@ՠIt 72o_`@I]4(v.7TzU ^Ƕfa,(u~St<^`?D?n?y\???yJ?? ?p?r?$ ?,?k?"?E5@?W@???c??@?o???B`?6?\?S@?%?p??Y@??Ƭ ?b?3ʠ?I??<?? ?{( ? ?H?e`?*?w?D?-??[?Nf?š ??Q@?û??r@?Ľ`?(@?tC???*?ƕ?@?Le?Ǘe??M?ȹ?%?p ?ɺ?&@?p ?G?&L@?n?˟?P@?k ?a?̒?۠ ? ?UH?͆?@??H?y6?@?`?;@?lT?ϵ??`?/?Tq?l?БF@?ЩF?? ? @?"?G?_?ф?ќb?m`?)`?B@??;@?R?w@?ҏ}@?Ҵ@?C?`? ?.k?EЀ?k@?ӂ?Ө@?ӿ]??# ?! ?8 ?^?u ?ԛl`?Բu?B ?:??,?Q?h ?Վ?ե?˙?Q ?p ??EF?[?ւ?֘?־@?f??*?8?N?uw@?׋?ײN@?y@?% ?=?+@?B@?hӀ?~Ơ?إ?ػ?@?N?Y?5?\1?q?ٙ @?ٮ? ?^?@?(!?O@?d?ڌi?ڡ?B@?k ??.?B?W?̀?۔?ۼ?u?~?8@?6X?J`?s1?܇?ܰ @?~ ????)@?>@?f`?z€?ݣs?ݷ?N@?D?)?1`?Z?m?ޖ@?ު@?Ӻ?F`??$@?Mr?`?ߊN?ߝ`?* ?D?@? ? q?)@?> ?H@?]N?f?{??,`?]?ป`? ? ??y?y@?@?׀?2X?;5?PȠ?Y?o8?w@?፨?O??ᴬ`?ʉ@? ??f?j?à?%?. @?DL?L|?b@?j ?/?5@?⟡?⧑???܆?H??@?k? ?7ހ??X?VQ?]?t`?| ?9@?f?㱭?@?"?@??r@? ??+?2"?I@?Pz?hm?n?@?(?[@???Հ?J?+@???;?$@?=?C)?\.?a} ?z ?@?$?"?巟?u??@????g?1?5`?P?T?n?rR??搟?櫔@???6???? ?%?(?D)?FX?b?d?9???%?O@?g?@?ݧ?j???"?8?8]`?W!?V@?u?t?O@?`??3`?ц?b?&?@?@? ?-o@?)?L?H?jŠ?f ?v?; ?,?Q ?@?b@??m?k ?s?#6?q?B ?8i?`?VX@? ?t>?Ꞵ??꽫??ܯ?ͬ??a??  ?:?&?Y`?D ?x?ak???~@?ߠ?@?ק?븴??n?? ?8Q? ?Y+?)ŀ?z}?D?l?_v?.?x?? ?@?$?0? ?]}@?@??(@??A?P?'?`?P ??8? ???͞?W?k?&?i?Y?a?C)???D?%C?%d??E?'ƀ?U?`B?e?w????~?o}?c?? ??(?\?R??o?Y?c?9?ܐ?? ??=? ?o?Ps??:??e? ??>T?V?s7?;?Q?Z?p?@:?(?v?8?B?|?,?pJ?A?ސ??MJ???p?{?+?w?7?r??m0? ?g$?ژ?`??z?>?t?y?m' ?r˸?aP?i'?C?YpM @?ci`XBohurz{x~(8%T1|4+N7$3DJK@Qغb_s9<6q3KS`D~މ!iSy/,vbgD&/ FϩqZ_5|Z=R@7p{fs_mO*h$ec@PcLdNgvjtvp @:w9~*@`aGœ$&_sJM qu5.:@CY[p@b@ğ@'@EN #@l?@v]؉0{;}+k17\{bs@ % '`@QРX``@I G+Nx>@©R±.e@f x<D@mv`ÞçG@ɀ~ @1:cl$Ĕ ĝ[`2Β H Ȁ']0Xsb5 ʼnœk@ź@ġ부@' @MXA~Ɖvưƺ)@@CWNJ to`~ǥǰ֟ @8DO@i`uȚȦ@@1 .I:Q _bk`ɐ{ɜ`#`0PTaʅ`ʒ`ʷ- G&L`JaW~{{ˈˬ˹ݰ ʀF@?Mxp`~̢̯4 O=5j@Co@f@t`͗`ͥ`Ȼ3`*9d@\ `j΍(ΛŠξD``_& {/W@Q@`ςϑϳ@ ``#`+<`<C`T\l@m;u@ЅЍ@ОX Ц4ж`оtc `!+19J<@RZ`bj{Y уѓќ!@Ѭv@ѴP`ݓ@!`'?/`?HEX\`` pyt҉yҒ ҢҪ@Һ@:& iC @%5a>.MVf@o]@Ӈ@ӗ@Ӡ@Ӱ,@ӹ"Ȼ@ѹJ@P@h@~*4CL\eCt}ڀԍ3Ԗqԥԯ`ԾR ǟ@@6 pc )9@BQ[(`j<s@Ղ@ՌU՛[դճսz  G(@@.8uGG Q _րi@xfւ8֐`֚Ϡֳ֩f `ڣ@3@* $R`.W<FUq`_ nx׆א ן שG׷ ?@t ^ @$82}<`K Uec m@|,؆ؔ؟( حL@طTk@` (2`@KDY:`cq|q@يYٕ٢٭ٻy`4@ @ʀ`( (6H`A#N@YghrP ڊ`ژڣ|ڱڼɧ`ԩ7@?` ՀWk+7DvO@]h.`uۀĠێ&ۙZۦ`۱ۿF@ʇ@@f `I!,:EuR^ k5v ܃܏8 ܜUܧ΀ܴdu &%" /`;S@HES@`Հl@ye݅`ݑ`ݝݪ`ݶAנۥm5 `%U10=I Vub\ oz އޓ ޠ%ެ@޸Ĵ@EJ@@fv@' @3@?LX7dp͠}7@߉bߕ ߡ߮Zߺ@@ߋ f [ߩ* ߊlKM/v$@[ ޵ޗy`ZƠ<0_ 1@Ž ݤf݅ g H`*` `Jܱ;ܒytq@U7۾۟6@ہF`beD{%ګڎ@o" QP2Q`@׻ ٸٚ@{ޠ^%? !Z< lاŀ؈ jK`.0e@(״וWwX; :` o֢@քeC@G@(r` 례DծРՑz qT5.] ԻԞO~aA $ @I@ӫ$Ӌx@nZ@N`1@`ҷ@Ҙ4{/[c`>eѤш@hK:+Np }ѥб`Дt`X8 `Frϼ|ЀCa.̀Ή@P7@֢`͖H@] x`̣i)aN`˯`v6@$ʼ{ʃB؀ 6@ɐfO@ȝ<@\O@#Ǫi 0~hƶuŀ=T#@ÿłJ+@Ж`ď;W m Ûc`"TD¨@p@/l }@;ɀ&]@H`.i};@6H`TЫa@f n `{t@L@$N``Ӏ) @6|ȃ@C5[@O3\@ ic8w+'D׀8^Rx9kuYMo{_^$AX';# }A{PsO$i-Pj?D?f3?q?zNT?*?h?\?[?????ry?7???bX? ??l ?~M?Rk?d?8?Kp?@?2@?L??뗀?&??@?,@?J?O; ?o ?B` ?̸`?5??(?K?΀???߀?@?)?;?s?_?s?ۃ?g`?Χ@?ZR? ?M??@`?`?43@?5?'~@?Y@?ɠ?| ? @?:O?? ?U?-r`?s??? ?gG?š&?? ?Z?ÍH ?: ??M@?Āi?dž??A-@?s@?ź??4z`?f?Ʈ!?<?'?Y ?ǡn?]`??L?Ȕ?}?c?@ ?Ɉ ?ɹ??3-`?{Z?ʬ ?`?%`?\?ˀ ?˷J@?$??7N?m@?̒x@???$(?Hˀ?`?ͣ ?ڗ??5π?ZH ?Α@?εq?? ??Gw?k@?Ϣ??? `?,?>?Z+?l4?ЇǠ?Й ?еc?]????"?>8 ?P?k@?}`?љp?ѫC? ? ??l?"E`?4?O?a?}~?ҏ)@?ҫ`?Ҽ?ض?Q?S@??3?Ey?a@?s?ӏ(?Ӡ ?Ӽ`?6?b ? ??)^?E`?V?s8?Ԅ?Ԡ?Բ?q?߭?? A@?)@?:?WH@?hh?Մ@?Օ`?ղ ?Ð? ?#? @? ?;Y@?LJ?h`?y ?֖?֧q?0???`?k ?0+?M?]?z?׋R?רC`?׸@??x`?~`? ?1?A?^?o1?،W ?؜Ā?ع?W@?璠?@?0?%}?B@?S?pl ?ـ?ٞ ?ٮ5?˨ ??F@? Z ?&@?6?T?d?ڂ ?ڒ?گ?ڿ?]@?5? ??8@?HZ ?f8?u@?ۓ`?ۣ~@?v ?@????,3?JR?YŠ?w`?܇W@?ܥ@?ܴ?/`?z`?Π? ?.m?= ?\ ?k.@?݉?ݘ?ݷK?P?`???!r?@*?O?mʀ?|?ޛj@?ު%@? @?׵?@?F?$J`?2?Q?`g@??ߍ?߭+ ?߻???6@? S??"?1?8?H`?O?_w?fs@?vH?};? ???@?຺??ы@?Y@?\ ? ?-???@?, ?3v?C ?J=?Zq`?a?qB?w??᎒?@?Y?ᵶ? ?̈@?@?Y??+?t??;?'`?.@?>@?DǠ?Us@?[?lE?rT?????ⰼ@?ⶥ?ǎ?k?a?1@?4@?? ?@?"?(?9??F?P?V ?gS@?l?~&?フ?@?Z??@?¡??u?ި?I?l ?? 0@??" ?4ƀ?9?K?P{?bo?g??yD?~@??`?@?䫈@??K?Ԛ@? ?p ??F ?@?`?T ?/?4?Fɀ?J׀?]@?a?tw?xZ?N??&`?ۀ?@?弛?@?[?殠??@?@?`?`?+9?.Y`?B?E?X?[@?o?r@?憡?Q?|`??W??3@?͈?@?D`????@?&?(v?=??0 ?Tb@?U?kA ?l@? `?[?`???@??ǂ ?ݣ?8`?@?? i? ?"M`?"V?92?9 ?P?O@?f?fm?}?}?`??諶?|? ?*?ٌ@?ր?x??f?+?U??5F ?2{?L8 ?I ?c+?_Ā?z!?vf????飥@? ?A? @?@??r? ????2?+(?I"`?A?`0?X<?wB?n?X?A@?s@?꛼?꼒?3?ӷ?Ȥ?@???s@?I? ?0 ?"$?G@?8p ?_#@?N@?v?d??{@?`?)??1??&?-?????o ?3۠??L?)C?de?>b?|?S?@? ?gɀ? `?{??쏄?* ?g`?Q`?Q@?@??8 ?F?Y>?c?~1`?@?& ?݀`???Z?-?@?H?E??AO??-~??܀?O?&H???Q??%?v?L?ʀ?-?̀?-?9{??_?n??~?a?%r?h??p ???I?r????l?]i???`??)?~H?Pd???C?@d%*ՠ7`=FIO\W b(n€t@Ё.Ї @Г`Й{ ЦЫиp@о\G@>`` @&`-9a?rK̀Q`^8dTpvу@щ5ѕzћ`ѧѮѺR̽)`i J`l` ( /+;CA`MT `@f}rx@҄ҋ^җ^ҝ`ҩ@Ұ@Ҽ6°Ρ! 瑀y` @ rP *1S=(C OV4b@htl@{ӆӍәDӟӫӲfӾ@ЇG@_(@7@! `,@3y?@E@Q{ XZcjvS};@Ԉԏԛ+ԢԭԴ`om`GM  #.@.@5@ HSc Z e@l@x;`_Պ`Ց՝դ@@կն Wۑ 0q` @%Q0t@7BJ2@UL\`goz$ց֌֓֞ ֦cֱi`ָ@ՀCAݳ# @`'t@2^9`DLTW7^Ġi q4|׃׎{זנר ׳T׺@e@,ՀEq@%!݀)4I<FNuY"``ksV}؅ؐg ؘ6 آ`ت ص?ؽ@Ǭφ@@@선f@`] F`#ɀ+65>&`H P`[`c`mzuv` ه`ْSٚV٤٬ƀٷ,ٿ6ɘ`Ѧq`If% -`8"@F@JR`\@e&`ogw`ځڊ@ڔ@@ڜv@ڦڮ ڹV ˅6^@ʠ 7'@/:BeL| T^gEqUyۃ`ی%ۖ-۞`ۨ@۱`ۻu@s@`U K@ 5$)2;DNjV`@idsB{`܅ ܎D`ܘܠ@ܪܳ$ ܼ`Ŕ`@s9@S!À+@43=`F`PWY@b`ku0}݇@ݐbݚ ݢݬv@ݵBݾDzO@"`@'@`r#-m`6Q?HRF@[1dm`w`ހ@މޒ ޛ@ޤޮd޷`@=@@ %/\ 8oAȠJ߀T5 ]O`foy߂.ߋ{ ߔ ߝ ߧ ߰U@߹|`2U@fՅ߾ߨ ߑ@@zuc L 6Km @ޭ8ޖ`h@R`;[$j .6ݲݛ݅`nWj@h) =3Χܷܡ܉sz\eE`.L1 ӗ۽ۥۏxca`Jɀ4[/ .ګڔa~`fǀPj9-" =`Ǧٰ_`ٚق`lyU+@>@'L`]@ض؞@؈q)@Z@C -[ [.׺פ׍'@w_Ij1@X=־ ֩$֓{ezM7` V Lܶ@"կ՗Ձ iS@σӹӡӌ tO^zF0M`շ ҽ@Ҩ ҐM zb L`5\`0ѬJі~iQ;l#|@ @?H вКЅ`mW|?y)߀ȊϝqmVBD"@ζ ΋@[0`ՐͥQ@zcJ6` ̓h8 K˲˂WV&)@ˮʠ@pzEπEɺ@ɏv^4I@@Ȩs}@M?"€ @Ǖǖli;@<`mƶƅ9@Z*@Ť@sI\g`/Ľ2ēa@7@ܩë@Á}P`&P@,@#™o>`@Y^q-% DvL@`}@@-$;v@@r]i@ S@f:- À0Zz\` ` `WQ@ =J@4F`v} ǔc<@9Z@@f@2@7ـ%:QP})`P=-vY +@zӱ0f܀ip@g"nIMo8-z\M4y4pt)ka`C9@?E @?a?l ?tf,?ylD??h???M?^?6??Y??3?sK? 8?L??&??f??la?9@???E@??m?v?@?M?@?Z#@?y??e'?3Ѐ??@?>? ~@?2?=* ???BG??@?`m ??؀?eK?D@?`? ? ?:?O??>`?`??]_?S`?ˀ?a?7`???V?7?`?{?;??Y?ZT ???^?-?[?}`?ʱ?4??r??Po?v???@?-/?b?Z`?I???>?s?™ڀ??@?*#@?P0?ÅY?ëZ?@? ?;?a?Ė?ļ`?4`??Mk?s/@?Ũ?Y??) ?_?Ƅ`?ƺF`??}@?;?p@?ǖ-`?@?W?'"@?L?ȂY@?ȧ?ݐ??8Ǡ?^ ?ɓ?ɹ* ?6?T?Jm@?o~?ʥ?ʧ??%V?I?b?ˆK@?˞ ??ۦ??k?<`?U1 ?yx?̑`?̶D@?λ?? ?/ ?HF ?l?ͅ `?ͩr@?Ѐ?=??# @?;Z?_?x ?Μ@?δ@?l?`?7?.o?S?k4?ϏΠ?ϧ?̚@????#?/$?A~?M?_?k?~J`?ЊL?М@?Ш?л ??|?s???G?"8`?4?@?S?^@?qy?}_?я`?ћ@?ѮE@?Ѻ$?̫@?؇ ? ?? w ?K?' ?3@?FC?R?d?ps?҃?Ҏ`?ҡu?ҭ7?ҿ?˚ ?A?? ?^? ?& ?9s ?E#?W ?c?v?@?Ӂ?Ӕ@?ӠJ@?ӳ `?Ӿ?q??׀?q ?=?`?,?85?K ?V?ip?t?ԇ ?ԓ\@?Ԧ<`?Ա?Ģ? ???o? ??+G?>;@?I@?\?h @?{?Նm?ՙn?դπ?շ@?1?:????@?X?1m?<?O?[?n:?y~?֌`?֗ ?֫?ֶB?m ?Ԥ?Ӏ??9?h?$`?/?C?N+?am ?l?Ӏ?׊?מ:?שQ?׼?dz??`?m`?w@??"?6:?A;?T?_?s?}?ؑn ?؜`?د?غ@?;@?#??? ?`?)o@?4I?G?R?f<?q ?ل@?ُn ?٣ ?٭?p?1`?`??> ???'V@?; ?E?Yr?d`?w@?ڂ{?ږ@?ڠ@?ڴ?ڿ>? ?ݟ`?t??ۀ?b@?.B?8?L@?W% ?k@?u?ۉw@?ۓ?ۧ@?۲I@?E@?Ъ?@? ?@? m@?!z?+΀???J/?^H?h?|?܆@?ܛ?ܥS`?ܹ~?ô?@??L?w???3?=9 ?Q@?[@?o?y@?ݎQ?ݘ\@?ݬ@?ݶ ??@?????&U?0@?D`?N?c$?m?ށ?ދc?ޟ?ީ`?޾[?% ???*??`?#G@?7?A?Va?`?tɀ?~i ?ߓ1@?ߜɠ?߱?߻*@??ي?h?`?h@? %?@?V ?$@?)`?4@?8?C8 ?G?Rl ?W?a@?fG?p`?uw ?`?@?<?@?p?`?୤?7`??g? ?З?A ?ǀ?u@???'`?? W`??@?'F@?+@?6z?:?E?J?T@?YF?d?hv?sK?w`?ႀ@?@?ᑴ?? ?5??e?R?Õ ?Ά??ݻ???$?$@?S? X?@?`??)?-`?8?=?H+@?LA@?W`?[p?f?j@?uɀ?yπ?@??3@?.@?h?]?ⲝ?ⶍ??ż ??`?;??p?I??x? ??? ?,E?0?;z@??5?J?Nd?Y?]?i?l?xO@?{?㇄??㖺?N@?`?}?$?㸫?Z@?ڀ?ӏ? ?`?7??f@?0??f`?@??"?.?2 ?>?AN@?M=?P|?\s?_?k?n?z߀?~ ??5@?K?c@?䨂?䫑@?䷸ ?亿@?`??$??[ ?H??v@????р?"5@?$ ?1l?4,?@?CZ?Oـ?R@?_@?a?nG@?p?}~@??匵?;??h?#?孕?[ ? ?ɒ?`????H?9@?u?p????$?&?4?6&@?CP?ER@?R?T~@?a ?c?p?r?2??j?-?枣@?X??毃??澯?N??ۇ@???/??Z? 3`? @?m??'?(?6?8?F?G.?UU ?VX?d?e?s ?t@??Ԁ????z?&?簶?O??x@?-?Ϡ?h? ??@??? `? @?Z ?h ?*?*`?9?9`?I`?H?XO?X?g?g)?v?vO? ?u@?H ?蔚?複?裿?ƀ?@???F?,?@?P??s???I`? @? ?`?-̀?+?= ?;@?LS@?J?@?[?Y_?j?h@?z?w?d?醽`?阪?ۀ???7??@?2`?ǀ?N?`?h?Z???@???";?`?1?, ?@?;?P%?K ?_v?Z! ?n?i3?~`?xD?l?T??c`? ?p?o?|@?@?Æ@?$@?Ҏ????`?@????'?@?6p?,@?E`?;?UH?J?d?Ys?t-?ha?냥`?wL ?!@?2`?뢡`??&???ǀ?@??@?c?t?&????@?`? 9?/A?@???(c?N`?6?^?ER?nؠ?S?~@?a?@?p@?`?~(?@?@?]?? ?N??촑?g`?@? @? ?(@? @?)?S?=m?@?R#??h?f`?큊???@?:?֠??ŀ?d|?4'??@?Ĥ?F?u?I?z\?3?a\??f?Z??w]?Ѐ??>|?z?I?lx??W?K'?=?? !?}?X?ހ??BP?p?n?$U??Ռ???V0?1???ˌ?L?] ?1?????j?(A?s?Q?B?s?_??o!??Y?a ???6??b?J?g?U???@?1?2?Ӌ?i?u)?fN??c???X?5??Ϫ??jb?;0?<?ۯ?7?|?;O?T?փ?}?q?\? 6???h?DG?<4???{?{?u?'?U??OD?Z?D??Q?1?#l?p>?*?????+T?(?i?ad??*???#? ?an?D?>?~??$??R?X<?)??b?F?D??ծ?N?(?l?H?Ȳ?@???D? ??^t?z???E?n?$??,?b??ܬ??Vt?l?(?`?~?pp?{?}?xy?zh?ul?w?r_?th?n?qk?h?l?bn?fy`?X`?`K ?H@?T:>??|G1X5Pb6]1`hS dnojrFpuT`sxbv@{q@yh~|4N@0]X +l8@{<˄VL\ k{>@TrL8&Uc'djs0&7xbh^TEGJ : DjB@YW@ oTѨ03|RYApiˡC.+=jU#L.2A}YRTdBbuhziܮl>.neVm)3hL}ddO}B[ujS:/F<7`YVx(K CZ? tipFy֊Ҽ851ifl@߀@-@+R_@\"Ā4G@6#Y@!nTl@R~@@N@@I@Hzy+@c@ ?.>@pCpW=l@s@44@ef@JȀ@**@[\ ,U@B@Xo PR'\ɀ@EH+wy`%@=@ T @;k>.loa@@γ04,a@e_+@E&]*)Wv[[@ـ #@LQU~ %@@>@X@BqGMsx~@տ@؀ 7@=Bi nr&@[/G23 G J@`b`ccx{} +—%`[ @@$(#=[@`U YS nvq@ ЭJ;`y W@2@6Ks@O@dg@|€n•™­@±9@5@@U@c(q,@AE)Y@]rvWÊÎ ã9ç û`@UشKr "y6@;OSg`l>Ā:Ą`Ęɀĝl@ıWĶ@Κu1`^,!0`DI@]>b"u@zŎ\œP@Ŧūſy}`@@ &@A! &:D?nRX kapƃƉ2 ƜơȀƵƺ_͝,"`J/5OHiM``@f{y`ǒǗ@Ǫǰ>4k@S@` %q+->CV@\Z@ot`ȇȍȠ>@Ȧȸ̀Ⱦ] H{t @! 39L*R7dj}IɃcɕ`ɛɮh ɴ$߇P )5/|A@HZT`@ry>@ʋtʑʤʪiʼ`#ە`+@B`  %V7a=OV@h oˁ ˇ˙ˠC`˲0˸`nP  o/,3@E`L[^`dv }̏>̧̖̮@^G`~q ");.`B2S`ZlN`s]̈́@͋͝n`ͤ͵@ͽΎ@ճ`H`@>s0`8 I^Pai3z~΁@ΓΚ^Ϋβ.ˉܿO `I&o`-ޠ>Ft W_ `pwψ ϐ4ϡ@@Ϩ ϹЀ^` P$`&*o2 6?) C Kq@ONW`[@dgpIt.|Ѐy ЈЌЕ"@Й@Сj@ХXЭб`йнB8ҋփ ͠`@cb@< B`(`,4̀8`AE!M]QlY@]e`jr5vL~}тъ юї`ћ+ѣVѧvѯѳѻ /@Uwؠ`4P`` `) "^*q`.@6:CG> OJ@S[_glt#xhҀk@҄`ҌҐҘҝG@ҥD@ҩұҵ ҽ& qeڻP@>` / `$y,_0@8=D@IYQ8U]ai`n8@vzӂZӆӎ`ӓӚӟaӧ3 ӫ ӳ{ӷӿA @Ћ@Tՠ @j- v `I"&.O@2@:?(FKrS(@W@_pdkpQx|@ԄIԈԐ@ԕ1Ԝڠԡ{@ԩ#ԭŠԵkԺZ@@ҤD9@Հ f@@b#@(0?4<AAHЀMUYaa@f @mrjy ~Ն:Պ@Ւ՗I՞ˀգիկ շ\`ռ(`är@Լ5@~ Qƀ W0z%*207@>y@CYJOW @[cRh8@o@t{րֈ, ֍֔t֙a@֠ ֱֹ֥֭N־@ Ŗʊ`Ԡ'pi@I`G 'ڀ,@4#9&@k`EpLQX`^@eEjOqv}ׂ׊`׏. זfכxעק ׮״ ׻@Wlj̡`р5b  <^").6;=@B^ GNSZ@`g7lf s@x`؄،@ؑDؘY؝ؤ@ة ذض#`ؽ3`m{η` L@U`` */ tw$+ 1 @8=SDQ@IPU\`b2i*n|@usz`فهَٓZٚM ٟ٦٫ ٲ ٸ9@ٿ&ă`o`͠׷`bI ` @"!k@&-39?i@FEK`RW^dGkpwg | ڃډ&@ڏ`ڕp`ڜ@ڡڨڮڴںOƙ c@@٫-``w< V #_@(`/54;`A~H9MTZ` f] mr@y[@~`ۅۋ;ۑۗ۞5 ۣ۪}۰۶@ۼd Ȯ@W``۟B팠1y @k  @%S`*`17I=CJ-@OVu\(b`hr ot@{O܁܇ ܍Pܓܙܠ)ܥܬrܲ.ܸܾy  K `ݔW%n 5 @'H-@39^? EL!QXj@^=djpv }D ݃ ݉ݏe`ݕ@ݛݢݧݮfݴCݺ @`"@߉l@@b J` ")</) 5@;s AG@NT`Z_ `Qflr@x9ޅ/ދޑzޗ ޝ ޤު@ް[`޶X`޼¢5 6}`W _  @$+11=7z=CIѠP V\Tbehn t`z ߁. ߇D ߍvߓ`ߙ@ߟ`ߦ ߬"`߲P߸l ߾ĵ,`H`v`D5`ԛ[߶/ߦߗ߈ybj7@ZK <`-p3` @ i@F@޳`ޤ@ޕކ:@wgՀX@Ip:U+ ` `A+܀ ݱwݢdݓ݄@teVHG:7(~ s@ܾܵͬP@ܯI`ܟ ܐ܁ rc!`T D@5&W@X@`ڑ(ۼ.۬à۝ʠێ^g oaQB`30$<ـfvڹ ڪ@ڛ7@ڌK|@m^m@O@`1!!` >Z٠`tٷ٨ٙ0ىzkE\iL>@.{?` M xش ئ`ؖ ؇x@iN@Y@J;T`,`$@`%]@ײף[הׄv3@fWH,9l@) b`BΘֿޠְ4֡{@֑ փsjd`U FQ6 ';@ @&q@`ս @ծ`՞`ՏՀB`q a݀S5Cx`4`%o I٨ ԻDԫԜ`ԍ~~n`PPA 1#S`!ּ)ӸWө@әӋb{l]) N> 08 _@@ r 0@Ҷ@Ҧ@ҘG҈f@y`j`[K`=-7 `Vm`Ð ѳѥ,ѕ>ц@vـheXtJ:+@ ;E`u{вТГ`ЃuJeLVF8@( {q@ϺϚ@}`]݀A&!@`I@Ǚ`Χ@ΊҀj@N -@E !@~ʹW@͗w@Z:@*@@c/@̤̄e gG@+@ @H@˱ˑ=@tTs7. ʾgʞʁaKD$`LɪɎn"Q1X2ȷĀțk@z^>0!f@ĜǨPLJҀkK@.`> tƵ6Ɣ xo`W;@L`šŅTdH@' Ǡ#ĮYĒ:@qUs4` @û1@ß~gbY@A%¬@‹>o>Nt2x@|$[K?]`ᷠ` h#`LC+Y@}mc+ Rp`8ŀ̠8}8`E R{  _w R @l]** yB7l(C@ CP]@&gj]3N w4@3Ʀ M wӍ@ZNs@f@$%Y@s̀0ne{K|2S(*4ANȯ[Նh\u~3e K2"/d<;#e1}* :f,2T4EnnC8%vY"p{wt#Lo̸i`S&x?E8?[0?d?l?qؤ?v,?yql?}x??d?Q?r ??>?H? Z????U?????t?Q?ZN?k?@?Q?&?8L? ?P?y?z?l?@?_??R??E@?#?9?M?,?w?6??P?̀?h???!??uK?ޱ?hv?ʀ?[??Nʀ??A???O?%?ȡ? @?B. ?O? ??5F@?zz`?`??(^?m??:`?v?`??e@??S??͐ ??G%?{2???:P`?nJ???-{@?ab`??? `?Tz`?<??Ѡ?G ?g ???:?`?5@?(@?-`?s?M?S ? ?f?d?~?`?Z`?|?Ӫ@??M???Հ?? 5?9`?]?v@?`?a?֖?&?a@?,?P,@?i?@?x ? ?>?? ?CX?\`?€#?™@?¼?T???6 ?O`?sO?Ì?ð?k? ?1`?) ?B?f{ ??ģF@?ļ`?@?H?`?6 ?Y?r@?Ŗr?ů?=?^`??)$ ?L?e?Ɖ?Ƣ@?j@?t?5?:`?@?X?|?Ǖ`?ǹ?Ҋ?b ?P?3-`?L?o?Ȉ`?Ȭ?Š? ?f?&Z`??+?c%?{@?ɟ?ɸ?ܼ`?|??2A?VR?o?ʓ@?ʫ`??葠? ?%@?@7@?R?m@?ˀ@@?˛e ?˭? ?g`???$*?6@?Q?d!?X ?̑?̬?̿I?چ?`??o?5?H`?cJ?u?͐?ͣ*`?;y?н??Q@??+?G> ?Yx@?t ?· ?΢l@?δ ?@?2?`??+1`?=Y`?XȀ?j?φ_?Ϙ@?ϳ??? ?`?@?^?'g?5)?>0?K ?T`?b?k?y@?Ђ?АW?ЙW`?Ч#`?а!?н??Ժ?ݴ`? ?~?Q? G?@?"`?/?8?F?O?]?fn`?tK?}8?ы@?є?ѡ?Ѫ@?Ѹ??z?^?E?(@?`???`?*?3?At@?JN?X??a@?o ?w?҅ ?Ҏ?Ҝ?ҥu ?ҳn`?Ҽ>?: ?`???`?? ?e?%h?..?<4`?D@?S ?[?i?r`?Ӏ?ӉT?ӗc ?Ӡ?Ӯ.?Ӷ??ͱ?@?{ ??D? ]? ? )`?(?6 ??@?M?Vj?d?m4`?{X@?ԃ?Ԓ$?Ԛ`?Ԩ?Ա?Կ?Z`?և@?#?S?`?? ??#@?1`?:I?H?Q@?_M?g?v?~@?Ռ?Օo?գ@?լ9 ?պ}??H?????_?@?(`?,x?4?CC?K@?Z?b?pۀ?yN?և`?֐`?֞s@?֦?ֵ??ֽ@? ?s??=??`?n??':?/ ?>@?Fb?T@?]+?k?s@?ׂj?׊?י5?ס?װ?׸Q@?͠??ݙ??e? ? 1`?v?!`?*??8`?A @?O@?W`?fa@?n?}-@?؅e?ؓ ?؜.`?ت?ز? ??]? ?) ?S`??? ?$?3@?;?JY ?Rx@?a% ?iA?w@?ـ ?َ@?ٖ?٥`?٭@?ټU@?f`?!@?/?`????? ?.Q?6T@?E?M`?[?c?r?z?ډ?ڑx?ڠN@?ڨB?ڷ@?ڿ ?? ?䲀?@?~?f?J?/?)?0??@?G?V`?^?m{?uS?ۄG?ی?ۛ?ۢ?۱@?۹?Ȭ?x?x?A?D? ? ??#`?+?:?Bd?Qv?Y.?hB@?o??܆?ܕ?ܝ?ܬ?ܴQ?s`????? @?`?`?u@??&>@?5q@?= ?L=?S?c ?j?y`?݁a?ݐ?ݘ*?ݧo ?ݮ?ݾ;?ż@??܅?Ԁ?M?? ?m@? `?09?7@?G@?Nq?]?e9?t@?|?ދk?ޒ@?ޢ8@?ީ?޹?\?@?%@???j??7??+?2H?A@?I?X?_`?oi?v?߆6 ?ߍj?ߝ?ߤ3@?߳π?ߺ?ʜ?@?h??5`?U? ? ??s@?M?!׀?)@?-;?5?8?@?D@?K`?Oh`?WM?Z̠?b ?f0?n?q ?y?|@??]?M??@?%??ઊ?ಁ@? ??R@?N ?̶?Դ?? ?~?끠?? ?G?N? ? ?@??s@?$ ?'`?/?3;`?;O@?>?F?J?R?Ug?]?`ˠ?h?l/?tP@?w???`?[?ᖄ?ᙿ??#?Q@?ᰇ?Ḹ???O?υ@?ҳ???R?{?@?`? ?C@?? @?? ?T@?"o?*?-?6!?96?A?D?L@?O`?XV ?[b@?c?f?o#?r)?z?}?`??X@?U@?✿?⟹?&??ⳍ?ⶀ???Z?G??ث?(?@?쏀?s??ր?]?:@?Ā??+??%?(e?0?3Ȁ?<`??, ?Gǀ?J?S.?U@?^?aV?i?l@?ud?x? ?チ@?2@??㗙?H@??㥫?g???r?6@??Н?9@??ޜ?l??`?c@?:?Ơ? ? )? @? ? p?"@?+?.S?7??9?B?E?N`?P} ?Yu?[@?d`?gC`?pD?r?{@?~ ??l?{?? ?2?J?䫕?䴲`???[?ˁ?;?`?!?Q?`??@? ?J???@??X@?r?& ?( ?2(?47?=???H?J ?T_?V_?_?a@?k/?m%?v?x???h@?L?@?嚮?8?@?寠?s? ??q`?8@??Ӛ?B??`?_??@?{`?#? ? ?L??!?#I?-?.?8@?: ?C?Eo`?OW?P@?Z?\3 ?f)@?g?q?r?|?~X`?d?扺???6?}@?檟??@?@@?q`?¡???D?d@?@?ŀ??&?????S@?J???(&?) ?3@?4l?>??̀?Jc?K.@?U?V?a7?a?l?mP ?x ?x?v??`?q`?J?р?祵?1??籒?缊???Q?_?ӱ?@??5@?q@? ?? @?0`? v@? ?? ?#M?#N@?.`?.?:$?: ?E?Ek?P@?P@?\g ?\)?g ?g?s?@?r?~?~D`??艢?蕄 ???^?]?諼?@?`?7@?w?Τ`?`??2?????Z@?I?@?@?6@???_?*?(@?5`?4@?@@??s?L_@?J΀?W@?V)?c=?a?n@?l?z@?x:?配 ?郕??@?n?I@??饣?O???U?2?Ǯ?դ`?@??_??鷀??@?o?f?? ?V@??%ʀ?"j@?1? ?- ?< ?9?H)?Dj?S`?O ?_?[@?j?ff?v?q?{?} ??^?l?ꓰ?@??`@?Q ??굠?V@??`?=?O@?׋@???K@?#?ʠ?n`? J?@??`?"N?I@?-@?&@?9U?1?D?=?Pa?H]?[?S?gs@?^@?r ?j?~?u\@??뀗?땨?Ѡ?:? @?Π???d?r@?@?븣 ?Ϙ@?р?6???%@?z?J`?!?k? ??{??!/ ??,@??8?'@?Dh?2֠?P1?=@?\ ?Hʀ?gڀ?S?s?^`?`?ix?시?tG?엝? ?죭?쉼?@?^@?@??F?e?ԥ@??!??`??? @?z@???8?"'?[?/??>N?I?M9??\? J?m?j@?z?t?핯@?,?9?@??@??ϥ?if?7C?@?8ŀ?R???^]????S?r?[?a'??u?ݸ?m??V??i?A??̳??k?b?>?.?À?L?xo?˴?^?~?Cz?nn?'R?AU? E???~???]???j%??@?8?e?\? ???T?;6?Q??Q?:??K???B??@l?_?N?`??l?pW?u?*?(+???T??W?@?r???#??Z?= ?????u?g?)s? 2?m?ؽ??0?E?I???2??b?r6??*K?ˉ?Q??F?4?R-?k? ?)??R?y??1K???q??&?X&?ی???3?E?~??6???e??N?\7?ω????:??g?9Q???Z?On?|???,??R?_??z?v?5t??v?R? ??v?/???L? ??x?#<??z?T??‚?e ?0V?\? ?;? ??y?x?^?}?U?P?¾?T?0d?B??+? ?D?y>??͠?n`?????^?bT?9?9????<?ʰ????h?nd?[<?E?6?L????\?p??}A?~?z ?|(?x`?zUh?va?x?t?u?q?sc?o?q?jl?m?e?h?a??dC?YS?_D?P'?V?;?I!?,F7T`N]XAcs`0h Pea`l jpnrqu3sw~v@y x|z~aX}0XV|0|X07_x9P_ &|NtvLlCh4ǴZbF:m9_)l@Q$x?2 DNeX4j[|FD j>^*f$$Hb%AnZ_uVK85ޢ(4q_YiN}=F!+9tdciQBD".Owi| \TG4D 1u${ nĦi?>WLr 4)~Bsk@w[PK7.fx9  ^XUX;03*|k aZrGCBD@he€Q{!b JEC2jha2@@@"@ GuElF@jlT@;ڹ!$["I-Gml@soEU@&@%;JJ!oo@^0ݹ@@'@'LLiqyqOL@5@@@)@)ʀNiNs=sy^C@(+[, P.@P@uu@{O i-".NQS1vɀx@@qDÀ  .@0SUoxzTh7<@ @ 02@UWz`|5r U@9 @25@W[@Y|/~@Ȏ@qT@4W@77Y,\~ՀǪT6)9lZ^O@2@~@Sڀ(@7@;@\`e}G@S*( 9=^b~@Tx*[@= j ՠ 0@2qBD@U@WT g`iy|6 W`@@ - @Ø  jn `M D`".24DG`VY`i\k@{ ~c 2@Ӡ`D s&ڗJ`x` !$Y3@6ʀFbI;@X[k9 n`}€@’¢{@¥n´·ROٽ` (0`#j&5ր8HAKcZ@]mpD@ÂÑÕ%ä[ çöú2w۝` `Wu `8%L(7;J#@M\_@nrjāfĄēėK@Ħ=ĩĸļ,Μ@݀ @|WÀ]@'/ *̀9=>LO ^r`b@p tŃIņŕřoŨ!@ū@ź@žO`пd/< @@),`;?`MQР`Wd@rÀvƅ/`Ɖ!Ɨ@ƛ ƪ Ʈ Ƽsq@@JQ" 1*/=f`AO`Sb>@fat@xѠLJ`NjAǙ`ǝǫ@ǰ!ǾZ`‘`2@q` ` Qv,11@?NC@QV d&hvzȈȍ`țjȟȭȲ@Cİү `@@` `p_ .3OA7ES X/`fj@x|@}Ɋ`ɏ~ɝTɡɯɴ^,@ԙ > `q I"@0 5mC"`GUZLgl@zg ,ʌӀʑʟ?ʤ `ʱʶ{ ք`Z`\: @ 5`%`27EIWz`\h@in|SˁGˎ`˓`ˡ+˦'˳˸@`pvI@U@""'44`9 FLYg ^`kӀp~?̃b̐@̕ ̨̣A̵ ̺``!]ߐ@6o@$`)N6{;`H@N-[T``m s ̀-ͅ|͒ ͗ ͥͪ[ͷsͼ߀:L `$@`%+h 8j@=נJPG@]C@bou& ΂@·ΔΚ Φ@άtιaξ@S:`2`@'-:Y?@LR__2d q w>τ ωϖx@Ϝ@ϨϮϻQ@@ͽk*J@\ @$!'[*;0@3s`9Ǡ<BEL4@OUjXR^ag jq `s zC}0ЃzІhЌ@Џ ЕИПТШS@ЫG@бд~кн@@,%c]ߙ@@Ϡ<@<@rs @ #)L,R`2@5 ;>DG`N%`Q1W[Zh` c@i`lrv|5G@хkш~юёї њ ѡѤ%ѪDѭ]`ѳ{@ѶѼѿ̠@`<Ts `.@Rd @`"%0`+>.h4t7=@@F@JPSFYN\~bekn@t x$~'ҁ\҇^ҊҐ@ғҙҝ@ң Ҧ:Ҭ7үrҵnҸҾ@@ PG݈~@/ !@fW `` #'E-1@0|6g9@?BHԀL#`R UZ[A@^dwgmqvz9@ӀӃpӉQ`ӌ`Ӓӕӛ@ӟӤӨOӮ+ ӱӷaӺ `-@d;@ߜq ހCz K` @ !@%)X/%@28[;ADJȀN7SWn]5`` fkio@s@x|LԂ@ԅ@ԋEԎԔ|ԗ`ԝԡ+ԦԪb԰`ԳԹUԼрŒ@ @@x /f @V@  @`v"4'`+l14:P`=CGL PJUY_* bh`kq u( z͠~_Մ Շ@Ս:ՐՖq՚@՟գ=ըլu@ղ`յջJվ@ā`ͷS@`ڊ$@[`1`@h`5@k@ @$F)-~`3@6;A GrK6PTnY]cflLpuyL ~ ׇׂ׋ ב& הך\מ*ף קa׬ɠװ׶@׹Ѐ׿6m@?`ѣv@ޮ`G@@}T@@ !@@W2$@(j -16: @1DIhMHRV[Հ_e hnBr%wy{]@؀؄؉ ؍@ؓؗ؜S@ؠ;@إةrخ ز طػ- cPӚ`׈``=.@te@  @N!C& *{@/38 <B(F!K_@OYTX]@agj`p9@t6yo}n@قنًُ@ٕٙٞJ٢L٧٫ٰ ٴٹٽ`$ )Za@Ց@٘@`4? kv ``E#T@(| ,15@:@>DH2@MV@QiVZ _`c؀hmr0vG`{g~ڄڈ@ڍڑڗ ڛ% ڠA@ڤ\کwڭ ڲ`ڶˠڻ`:`Rq׈۩@  ,@Ob@ @-`!<%d*s`. 37Ӡ<A F JBOMSzX@\`aej@o @t'xW}^ہ ۆۊƀۏˀۓۙ ۝5`ۢ8ۦl۫o@ۯ@۴۸۽@ JI`Ԃ ݹⶀ(@#_Z@@ Π` =#4`'u,k0`59> C@HLRQE@U Z{^c`glq0`v`zgV܃`܈܌ܑ@ܖ@ܚܟEܤ0 ܨ}ܭfܱ`ܶ@ܺܿ#` `ZA֒@wɀ 8`@oR@ ޠ   M%,@).b2`7`;@E+@JNbS= W \s`рej ns@x@|w݁M݅`݊`ݎݓݘݜݡU`ݦ(ݪݯ^ݳ@ݸ ݼ3 j9آoـ H`@I @&`"]'$+0Z4`9 >BǠG;@K@PrU4Y^kb@glpؠuP z@~ރEއތ|`ސޕޚ-ޞޣe`ި ެޱV޵ ޺@޿ C z0ڱg`` ԀX@ `A x@@5`$m )-2R6; @DIJM`R@W,[`cd i n(rРw_|@߀@߅=߉ߎt`ߓߗߜ=ߠߥtߪ߮ ߳N߷߼ż R@Ӊ`)@a@+V3huȥ߽>߱ߦtߛ `ߏ ߄Bx mvb VKM?`4)`J $`Z޷ޫޠRޔމ~1rgg@[P E&9.[# >``t @ު/@ݼd ݱݥ ݚKݎ ݃`x l a8UJm ?"3 (X@ @u/ܶeܪߠܟ@ܔ܈}Irf~[<ODr`8`-@"` R@@Iݼ  ۻ`۰&ۤ ۙZێ ۂwVk`TI`>.2 'c.c@7ڵlڪ:ڞړpڇ`|q `e@Z@@O Cu@8H , !} `H }Uٺٯ٣ٍ٘ف`vQk,@_TbH=1&͠%`Z9@폀n`ˤؿ`شڀة.@؞`ؒc@؇F { p| dYNB76, kS` ?׺*׮tף`@ח׌׀ޠuj_SH`H7<}`1m@%@ @ Q Dʆֿz`ֳ֨@֑֜ֆ${oYdQXM`Aà6@*- )b^`۔``չ@ծ բ6@՗6Ջk@Հkt i] R`G < 0?%C sx`ԾGԳP ԧ|ԜԐԅync@X'`LP@A] 5 * $4Yj@ÍӸ ӬӡӕӋ ,tAha]w@QF@:ˀ/$@ 5Nj@`ߟ Ժ@ ҽҲ ҧ&қ>Ґ[҄rymb`VK@@53 )Fh{Ԁ` @@@ ѷO@ѬvѠ ѕщ~rh\"QM`EW: .# $+Z``Ȑ@м`бХ@КЎ@Є1x4@mgai VJ?@3) ?<@U@ϱM ϛσn,V @(o^`η@Ο ΊGr2\D/o@ͻ@ͦa@͎C@x`K83 @{̪T@̔@|gSO'9! *ޖe@˱˘˃m@k9U=(E v@ ʴʟʇIqYD_@,`6 ɻ@ɣ[Ɏu`yH.2@Q@@׼ȿl Ȫ(ȑ|@d?N6`!k @@}CǭǘǀPkR@=@%$]ƴ@ƜaƇ5 n@YA5 , @x@Ÿr@ţOŊ@u ]F H'/ԃ@Ŀj@Ħ đyVdAK6`*@ @ۄíÕgÀ\@gрR :;@%4  @±x`œw ƒ@nVKAN(@&͉``r\]i`Dƀ/0@@Ԭ@my``K3A[Ꭰ)eT+=```tCvĀJ cs@1J"`{Q k`>j`@X`@/X/``3xG ڠeg=5` T (U#@s mDJu"I@ \2Ѡש@@|J!X@j@/=@k9@@Y'f@^>q1H@؀_6@RKJG/ݥy@'Uq V3cڀN3'q|+!utπY.hQހ6=\.xL]O MV:>ter!.m1USFM{٭m Dtk'NRDut|XyҜvTt pl(fpav V3HD`??EO?Wb?`?g?l?q>L?s?v?ys?|?&?+\?l??E?*???D??ц?j^?Uc?!???.?I?E?g??Ա?t?Ae?%??M??g??'?3??`?#?f?s?'?lÀ?Ӏ?#??d@?@4??@?F?@?T?cB???h??C?P?Ք?<??@?B4?^??_?@??e#?m?t@???9 ??{@?>d?@??\/?@? D?0?dq?Ѡ????B!?u?I`?& ?q@?,S@?S`?@? ?@? ?=@?e?`?8?4?`?Oa?v??Ѱ`?@?, ?` ? ?`?'?C`?>O?rp?w?͝??(?O@??`?%@??:R?a>??f`??@?K@?r???4`?)?]a?-??U? ?:}?n???@?%D ?K?q`??۞?C`?6?]k@?`??&??HT?n@?@? ??%1?Y?Y? @?ہ?`?T@?5?H@?cH?v|?@??v?ѣ? ?7?@?,@?G:?Z_?tР??g`?? ???@?++?>B?X@?k?†Y?™i?³?@?ᆀ??@?"%?<?O?jJ?}L@?×?ê?x@?s??? ?3@?N<`?a/?{ ?Ď?ĩj?ļV`??@??~?2.@?E?_ ?r`?ō[?Š9?ź??艀?`? @?( ?C?V?qN ?Ƅ?ƞ?Ʊ ?{?B?`? ֠?'@?:j@?U@ ?g?ǂ?Ǖ?ǰm?% ??? ?L?92`?K ?f@?ys?Ȕ` ?ȧ`??ԛ??.?$?/@?J?]U?xR?Ɋ?ɥ`?ɸ} ?Ӏ@?? ?@?. ?A7?\E?n@?ʉ?ʜ^?ʷr?? ???$?6`?C=?UR?a?s?ˀ?˒ ?˞d ?˰}?˼ ?@?( ?D?`? `?@?* ?6N?Ho?T`?f ?s`?̅6?̑t?̣`?̯ր??8?a?욠? ? ?(?)^?;`?G?Y?f"?xS?̈́?͖ ?͢?͵?I?~`?߫?? ?E?o?.@?:?M ?Y3@?kp`?w ?Ή ?Ε?Ψ7?δY@?ƛ`?һ ?? ?b?@?! ?-@?@)?LC ?^?j ?|?ω@?ϛT?ϧi@?Ϲ`?@??- ??G? q?x?`??(@?.ڠ?8 ?> ?G9?M<?Vj?\m?e?k?t`?zπ?Є@?Њ?Г2 ?Й1?Тd?Шb?б?з?Ǡ?Ā?`??+@?&?]?W??? ???!?+$?1`?:V@?@L`?I ?O}@?X?^`?g?m@?w?}@?цO?ьA@?ѕ`?ћr@?Ѥ@?Ѫ ?ѳ?ѹ ?? ?H?6 ?z?g???`?? ??B?$+?-s?3[?<?B?Kנ?Q?[ ?`?j;@?p?ym ?P?҈?Ҏ?җ?ҝ?ҧ?Ҭ?Ҷ4?Ҽ?f?E?Ԙ`?v`?@?`? ?`?.? @?_?:@? ?&k ?/à?5?>?D?N'`?S?]Y@?c.?l ?r_?{?Ӂ?ӊ?Ӑ?Ӛ ?ӟ?өR?ӯ#?Ӹ?ӾT?Ƕ?ͅ?`?ܶ`?@?`?L?@?~? I@??z ?"?(?2?7?AE?G ?Pw?V=?_`?en?n@?t?~ @?ԃЀ?ԍ? ?ԓ?Ԝq?Ԣ2`?ԫ?Աc@?Ժ?@?? ?8??j?&?`?W?`? ?@??%2@?*?4d?:?C?IL`?R?X}@?a?g ?q+?v?Հ]?Ն?Տ?Օ@?՞?դq?խ?ճ?ս%?Ӏ?W`?`?ۉ@?5@?@?f?@? ?  ??Q??'?-)?6?@?? p@??@? 7?) ?/h`?9@?>@?H8@?M?Wj ?\?f ?l+?u ?{\?ׅ?׊?ה2?י`?ףd ?ר ?ײ?׸ ??P??ց?,?岀?^?`??@? ?E??"u?,%?1?;W?@׀?J?P@?Y?_9?h?ni?x ?}?؇R?،ˀ?ؖ?؛?إ?ث-@?ش?غ^??Ɏ?L?ؿ?~?@? ?!@? ?R? ??F?$?.x ?3@?=?C ?L@?RE?\@?av?k@@?p?zr@?`?ى`?ُ ?٘`?ٞ9?٨`?٭j?ٷ:`?ټ?l?@?՞??Р?-??^`?4?@?f??!?&?0?6!???ER@?O/?T?^a?c?m?r?|@?ڂ@?ڋ@?ڑF ?ڛ)?ڠv?ڪ[@?گ?ڹ?ھ@?ȿ? ??9?#?j?U?@?? ???#@?)-?3@?8^ ?BP@?G?Q`?V?`?e@?o?u!??ۄQ?ێJ?ۓ`?۝}?ۢ?۬?۱?ۻ@??@?E@?E?v?w???`?? ? ?8?&@?+i@?5r@?:?D?I?Sր?X`?c?h,?r:?w\?܁l?܆?ܐ?ܕ ?ܟ@?ܤ?ܯ`?ܴ?ܾ5?P?g?Ҁ?ܚ?`???@?? 0`?C@?b?t?(?-?7?<@?F ?L?V+`?[6@?e]?jg?t?y?݃?݈@?ݒ ?ݗ?ݢ&@?ݧ)?ݱX?ݶZ@??Ŋ?Ͻ?Ի?@??!??S?M@? ?}?? ?*@?/?:???IN?N@?X?]p?g@?l@?v?{?ކ?ދ?ޕJ?ޚ3?ޤ|@?ީc?޳?޸ ????@?E@?%?w?V@????`??"?-@?2??0@ ?0Ԡ?7?8k@??u?@?G@?G?N?O/`?VE?V?]?^\?e{`?e@?m@?m?t?u `?|K?|??M`?狁???z?皷??R?碧@??=?籈? ?#?j???Y?ȗ ??-`?א??+?Y?@? ?a?@??`???3@?H? Π? ?i?t?@? ?#?#?+<?+6?2נ?2?:s?:b?B?A?I ?I?QE?Q$@?X`?X?`}?`O?h?g?o`?o{ ?wP?w?~?~`?膇?<?#?р?蕿?g?[`??`?褑?謓`?'@?/?購?ˀ?Q?g?@??|`?Ҡ??<@?٦?؀?;?u??@?e???J@???$??@? ?N???&Y?%w?-@?- ?5 ?4?=0?<5?D?C`?Lj?K]?T?R?[@?Z@?cA`?b?j?i?r|?qB?z?xր?遶?j`?T?`? ?鏒?阏?%?-?鞹`?`?M?i@?`?@?s?龥@??C?Ě@??-`?Հ???S`??@?[?y ?@? ??@?7?0? ??v?U`?@?`?!?y?)T?' ?0?. ?8@?6/?@3?=`?G?EQ?Os?L ?W?Tt@?^?\`?fS?c@?m?k'?u@?r?}6@?zG?@?@?x?h@?? ?꛻?ꘇ?]@??@?ꧦ?겡@?6?C? ?@?S?Ɉ??+?p???r`?܌?????^?5 ?@???N?L? ??g???%<? ~@?,?( @?4?/??K~?F2 ?S&?M?Z?UD@?bw?\?j ?dT?qʠ?k@?yt?sc@?@?z?`?p?v?@?"@?z ? ??|?렂@?*? ?@?믇?뾈? ?9?뾉?? ?՛?͉@?N`???܄?`?`?k?|?"`???p@? ?@?M? _?@?@?"?H@?*`??2C@?'+@?:?.@?A@?6`?I`?=r?QT?Dۀ?Y@?LB@?`?S?h`?[@?p`?bg@?x]?i?4?q?@?xp?????쟶?W ?짢 ?앚?쯒?@?췉`??쿆@?A ?NJ@?j?ϕ?칌@?ת@??Ȁ?Dz??ε?&?ժ?i?ܑ??f? "?(?@?`?.?e?"??+?%@?4? F?=?2`?G5? ?P@?3?Z`? "@?eq?$?p?(9@?|?*?퉟?,D?k ?+@?Ҁ?'m@? ??L?+@? t?օ?nP@?:^@??0??,??o?6?%?׀?#?"~?䭀???Q?;?\?O?ƿ?YY??\?\?[?.?V?I?N΀???D?E?8??+?o ?/?ME? N?,v?? {??3??Έ??d?Հ??'?us??X?u?;?`??L??6??!V?5? ?????zx??_?f?D?:,?* ? %?t???x?6???W ?L5?)??????j?{?o?H3?AW???????z7??F?V??'????J?z??G?j??;?? ?S??|?U?I?|?i?L??)?\?Z???M|???]??-?o??)?Ͷ?Q???m??=t?V? Q?4?&?W??%?|??L??;???\??*?R??Z??*??;?c6??1S?j?v?h?͜?8???i?י?8&??]?v?Ԕ?F???q???R?q? ???SK?-?"?x{??F?? ??v?`>??/?+??N?I???J?l??<@?? ?V}??$?%?S?yn??H?2??^?x?-?l?? x???0?Hp???j?V??#??4?A?`???{?f??;??&?S?x???,?2?*B?S?X??dt?*??.z???;?k?? X?v??<?E?d?"?M?b?? ???%?]?J?P?_|???7???7"?t"?^?P?q???N???IV???).???! ??|?@?\?C???,? ?g?H??4?L?p???Q?,?,?%\??a?|??<(??v??|?R8?,?d?&?ʄ?a??H?B??~??}u?~?{(?}x?zfX?{?xސ?yx?wV?xo?u?v?tF?uZ?r?sϨ?q70?rE8?o^?p?lN?n`?i>?kL?f.?h7P?c?e"?`?b?Y@?]?S`?W@?K|?Q ?>x?F??562 hE<PJZWSV`]#@Ya_ dbg@ejҀiPml%pyo:rq'0srXut;v(uŨx"`wOyx{2zd|{~C0}x8hPF,m 82@8HXZL~PB\Xn\3`S<\h`ېXG\c T(T@Pp[Lt @8<0`7°$_~K#4tRqnKbӊ5TrB\72 8V_xF$| lKd18LXrz2W7~^$nBJ#lRhK2,"rFSj7^ <</Vn`(<12O%iccVwŊ A'xXL}NN.BCsX$mXC8ti-b9.j_04Fg].r$_V7k#TL}8'l@ߞVJnB{s8kݴ՝?8pi5h*˚B5Z-fr_1bȢ*#[U+]5 NQgK#|U޸FAwrK{/ԭ J?@W#Xo@q$AЀP@`@|~@ =4,5ӀL@NjeJ@f}ـi+@LJ@W@5)@+BT@DCZ\ـssuo@!@0հ@@[@_@!7:P~@Ri kH@@-@s@ @L͞ۀ4k@_-@/FH@^a w9@yK@X@uw @ @ 6@#'%;>a@TFVlo@e!@L@w@@ b @$ &f`192=>`IKF VWbY`c۠np& z|p1y` P ` Q@ę@0 z) `p @Z @I  :`&( 3!4?i A@K MdW Y`d@ep@rD| ~ ٠a $ @n@9`Ɓ`N `Ԙ@Y-x1 @yW(*@5 6AR@C7@M@OY@[f*@hrrta@~€‹Œ—J™@£¥¯±Հ¼#@¾ k@j@Գ@ִCIހ(d s`*`,69@C<EROQ[ ]`h j2t]v|@ÀÂƀÌÏÙ5Û[`å~@çñ@óþ:V̅֞@/@dw` C@ P@",@.8;" E(GlQqS]@`jlKvIxĂĄ@Ď@đ*ě"ĝuħjĩ@ijĶ Ŀ SCΞ ؋2 } d` \ "=@$@.0:=:G I@S^Uπ_bknd x7@zńņŐœCŝş@ũXū`ŵŸ!@l1@ж@yJ @R@ )`s$+&0t3@<@?RIKUMWa`d1@mݠp{`z&|Ɔn`ƉƒƕZƞơ`ƫG`ƭƷƺ8 ƃ @h` aA @@@Ҡ`&(Ԡ2c5>AiJ@M@W<Y@cfGo`r|~Lj^@Nj& ǔǗp@Ǡǣ`ǭ7`ǰǹǼN ȘY-@`w2  zV ( `*@4T74@@@C~LOY-@\euh]q t ~Ȁ`ȊNȍ;`Ȗ`șȢȥϠȯ(@ȲȻpȾdǹ@ʮ JB@쒀@ր#` kj` ),6E@9IBE@N Q`[^'ggjqsv ɃɌ@`ɏOɘɛɤрɧɱɴ.@ɽb`x ɫ@` ;V`` 4]~@"+/87`;\DG P`S ]`;@iY@l@ux`ʁ`ʅ`ʎ2ʑcʚ{`ʝʦʩʳ ʶAʿT‹˝`.iw  HP! $-1& :* =p FrI@R`V _bN@kL`n`wz`˃݀ˇ,`ː&˓v@˜n˟`˨ ˬ ˴˸TH@Ğ͐`2!|jƀ `ZD #&/@38<?Hf@K̠TX`d`m@py|̅@̉>̞̒̕b@̡Ҡ̶̪̮̺f< ưτ@D^ؠ" l8@%)1`5J>AJZ`MހV Z(bfr`o4`r{|͇ŀ͋P`͔ ͗`͠Vͣ@ͬͰ.`͸ͼx@0@y@ V `@S4  ~,'u+37\@CLO@OX\9dhq)@t}q΁Ή΍aΖ Ι΢KΥή`β?`κξ@%@n@ ߶g H Eـ" )j-"59lAENDR`Z@^Jfj@sv`g σ( ϋϏr@ϗϛϤA ϨϰϴPϼ`@c-ᬀw = C@* g Ot@Ԁ!#(@*`.A0-`4e6R@:@@І2ЊbЌWАВ|Ж@ИМϠОƀТФ`Щ@Ы@Я<б5@еaзZ@л`н ä `; 7_\ ̀ˀ@9:` ] _@@@@@#@% *,082=6\`8b<>BDH`JNPU W[6]?aZcd`g@i@mo@su@y@{ ртц5шBьY`юgђ}єј њўƀѠѤѦѫ ѭѱ3ѳDѷWѹi`ѽ|@ѿ@àų@@` "2FVkz Àڀ @$0 I` Un@y`   !%(, .&2/@4K8S:p>x@D`FJL߀PS`W Y)`]-_N@cR@es ivkoqu`w{~҂҄+҈,ҊPҎPҐuҔu@Җ`ҚҜ@ҠҢ@Ҧ`ҩ ҭү.ҳ+ҵSҹOһwҿsŘ@˼ @0@)U@N@z@r @ 2 ( WL|q@`!#@'@* .054' 6Z:K<~@oBF@HLNRUY[7@_%a\@eJ@g@knm qsw@y}Ӏӄ@ӆ9ӊ$ӌ^ӐHӒ`Ӗm@Ә`ӜӞ@Ӣ Ӥ@ӨڀӫӮӱ<ӵ#@ӷ`ӻGӽlêǐπʹ@@>@"cF`j@@ e@E @i #`%),/ 2B68gBh`D@HJ@N P TՀW Z]Ea`cigBimg@osu؀y{@`Ԃ"@ԅԈG Ԍ@ԎlԒAԔԘfԚԞ`ԠڠԤԦԪ ԭ$԰ԳI@ԷԹn@Խ@`ԿdŸɉ@ϭ&Kp`?@@c (@ M r> b@! %@(+.+1 4O8:t><@Da@F`JL`P S@V΀Y- \_Qc`evi;ko`@quw{~ @Ձ̀Մ/@ՇՊT Վ@ՐyՔ:Ֆ՚_ ՜ՠբզթ լ@կ1@ղյV@չ ջ{ տ9]˂`Ѧ@3X@}@8\@ 5 Z`7`@[!@#'*-0736\:<`@6@B@FZH LNRUX[9^`a^eg`k5@m@qYs@w~ y}րփֆ;։@֌`֐֖֒4@֘`֜X֞@֢}֤ ֨`ֱ֮֫>ִ@ַbֻֽ3 ìW@|@Ӡ@?@d 艠2 V``z@@@A @ f 1UՀ#y%@)`, / 2D5 8h< >B0DHTJ׀NxP@T@W! Z]F`cjg im/osS`uـyx{`@ׂ#@ׅ׈H׋ ׎lג הט.ךמRנۀפvק@ת@׭% װ׳J ׶@׹o׽׿-ŸQ`݀u`՚@'@۾L p,P߀t`@)@ N @s+O!%s(@+`.+@14P7 :t>@D*FJNLPsS@V@Y- \_R b eviko) quMw`{r~ `؁@؄/ ؇؊T؍@ؐyؚؔؖ(@؜ ؠLآئqة @جد1@زصUظ`ػzؿ'@ĀKp@ה3 ݸX`|졠&@ƀJ`o @5 Y`~%@Ȁ!I#@'n@* -0736[9ۀ<?BF$`H`LHN@Rm@UX[9^a]dڠgjmq#s@wGy@}l@ـكن:ى@ٌ_ُ٠ْٕٜ٘"ٞ@٢G٤ ٨k`٫ٮٱ<ٴ@ٷaٺٽ ë@! Fjُ>߳`c`@@ E i@ ` e@`  #D@%)h,/2B58g`;>@A`D HJNC@PTgWZ@]D`ci@f i losuyB`{fڂ!څ`ڈF`ڋڎk@ڑ@ڔڗښڞڠڤAڦڪfڭ#ڰ`ڳH ڶڹm ڼ@ڿŶ@@`e%@ۉJ@oҀ@݀?d@'  L pр!`%>(@+c@.) 14M7@:r=Р@C FJL@P>S VbY+\_Ob`ethkn q@uw@{= ~ہaۄ,ۇ ۊQۍ`ېvۓۖ`ۙ`ۜ@۠ۢۦ<`۩ ۬`ۯ.۲ ۵S۸ۻx`۾@;` `0݄@U`z@ @: _2` W@| `!@#'9*-^ 04@36Y 9<~?ˀBEHǠL`NR8U@X]`[6@^aZd@gjʠmp sɀwy`}8܀ ܃\܆8 ܉܌\܏`ܒܕܘܛ ܞ`ܢܤ@ܨ7 ܫܮ[ܱ:ܴ@ܷ^ܺܽè@6`Z;@``@ 5`Z= ~` b @@#@%)4,/Y@2?`5}8d@;> A`DGJN`PT3WZX@]A@`|cff ilor uԀy`{2݂@݅W`݈C ݋{ݎgݑ@ݔݗݚݝ@ݠ`ݤ ݦ`ݪ2@ݭ ݰVݳDݶ{ ݹiݼ`ݿų``@ 1`"UFz kꐀ @@ 0#T H y@m@@ !% @(+/.%1T 4J7x:o@= @CFILP SV.Y'`\S@_L`bweq h@knqtw{ ~`ށ.ބ) އRފN ލwސrޓޖޙޜޟ`ޢަީ@ެ- ޯ+@޲Q޵P޸v ޻t޾ĿǾ@,@-QQu`v陠움`@  +.P Stx`` #'@* -*003O 6U`9s7 /`@' .` w``F@ h 6̲ܽ`ܵ@ܮPܦܟܗp ܏܈>܀y q@i`bZZS(Kx CՇaՀ x/p`h`a@YRyJ CG;i4,7$@@@  Qq ?@@ɾ ԺԲ ԫ[ԣy`Ԝ*ԔGԌ ԅ@} unf _eW`P4`HOA 9@1)" o `>`W &@֪yӿ`ӸH@Ӱ_өӡ.@әӑӊӂ{s`lR@dg]!U6 MF>6/`'@ \o* >  `Ȁ`۩@fw4ҽF ҶҮ`ҦҀҞҗ@ҏ@҈pҀy>qNj b`Z܀RK@C@.B L@{%@ R `wi`Y`K ;(@-9@`%5g`Fo* ֠@tM`SU7@:`;@Du#u @@'`m! Qc0Z @ـ̀z^O=@!`y`ók=J%.x _ИҀx*`W ;eE ~  cHR'+ d@ p`U?4zJ ۶``}b-@`%h 0`i`oM@2U`O@|@Z?B@~4Ź@n@gL/*kҦ@St@Y7ƀXߓ9sf @D@)E@Xr@Q62܀ yS6|ɀ@Ca -PGֺ],&㟀j3v@lj݀MY PЀZG5ཀg4$t!1s=YJ̀s>W!`$׀d.M q|;;~aH(Ԁ>-#s0Y=?J$W cp}+sj8aOEM4R;_)l `%*?0YtJsLd*~T }c{pyhw,utqpPldXidˀapZe`SFg 1?/?Ef?S/?Y?a0?d?hɀ?l#h?p1,?q?s?uH?w?yv?{p?}B?b???m?}?S?d?:?JD? &?0x?H??p??Ғ???d?n?W??J??=??1??$-??H?? c?t??g??[??N&??A7??4J??'[??n?;? ?U?I?D?y?F?[?7?l?`@?n?*?_?{??@?S@??̒@?$?F???>?9,?}??Y@?,??p?Ȁ?t?Q@?d@?@?ݏ?c?W??Ъ?v?J8@?~???=S?r???0n@?e"?@?ޫ?#?X5??Ѿ??KG@?1?@? @?>Y?M??ڀ?1k?vg?@??>`?4?O?q?@?O ?Ȍ ??P`?'ܠ?B?d?~ـ?j? ?1 ?b??5' ?W?q???L ?t? ?(9?J?d???g@?ކ@?. ?J?=@?X ?z???ј?I?\?1 ?K!?m@?? ?Ī?d?n?$+?>3?`?z?@??ڀ ?@?G?1D?T ?n @?Ԁ?͠?͛?@? b ?$V?G)?a ??`??ڣ?}?h`?:D`?T,?w `?@? ?͵?? y?-_?G>?j&???ǀ?`?? {?:P@?]B ?w? ?@??`??-a?P]?j&@?$?`?@?? ? s`?Cy?]7?@??????6?PI?s[? ?"? ???) ?C[?fv?@?>???@?e?6 ?,@?9`?K,?W?i@?v\???W ?! ?ĺ?у@? ???G??,?>H?K ?\ ?in@?{?`?r?2?`?Ĕ?9??`?Y??@?1d@?>`?OǠ?\?n+@?z?Œ?™C?ª ?·?U? ? ?j??̀?$ ?1.?B?O?aG ?m??ÌU@?Þ?ê@?üq???{?8???$??5?B ?Tb?a@?rƀ?f@?đ*?ĝȀ?į?ļ*??ڌ?T`?? ?Q?)`?5@?G?T`?e?rw?ńE?Őـ?Ţ?ů;? ?͝?p??? b ?7?(@?: ?G&`?X?e`?wb ?ƃ?ƕŀ?ƢL?ƴ) ??Ҍ???s ?S?@?- ?:7@?L?X?j~@?v?Lj?Ǖ]?ǧE`?dz?Ũ?!? `??o?? Ӏ?-H@??6?K@?]`?j `?{ ?Ȉn?Ța?ȦР?ȸ ?2?(??@??? X?2S@?>?P?] ?o`?{ ?ɍ~?ə`?ɫ`?ɸC`?E?֥?訠?? ?i?%o?1?C@?P-?b6?n?ʀ`?ʌ?ʞ?ʫT?ʽa?ɶ ?? ?(?z@?@lmms-1.1.3/data/wavetables/saw.bin000066400000000000000000004777301247673406200170530ustar00rootroot00000000000000? ?;y?UU >r@?UU ?ݒjӤ_`;S}`?Ӥ`?ݒj?b0g`BK@{;`?|?BK@?g?b0?N `mr,;?,?r?m@? `?N@??\ º*n ۲]ٌ\ҙ΄h©N9`; ?N; ?©?΄i?ҙ?ٌ] ?۲]?@?*n?» ?\ ?X $&`SD`ۊ`Կ҈D˼.3ŭ V;j?Z?ŭ ?3?˼.?҈E?Կ??ۊ`?ˀ?D?S?&`?$?X ?jv`_66@O= %Vesሠ՛@Tˆ\`^ 'L;?'O?^ ?@?\`??ˆ?`?T?՛?ሠ?s@?e?V@??%@?= ?O?66@?_??vĠ?j?q S`k S掣`?䠘@6%@޲ =CT`ڥ@XԋӀ! ) lԀēq@>'r@R$;A|`?R+@?r@?>)?q@??ē?`?l?)?! ?Ӏ@?ԋ?X?@?ڥ?T`?=D ?޲ ?%`???6?䠘`???掣?S?k@??S?q ?̯@ZBCbXT V2&HFc3@V@ # .•߈L݄^,D z־#O z5wD FDJT ɚ* C9J!W.D@:z: @;>@??: ??:z?D?W.?J"@?9?D?* ?ɚ`?T ?DK?F?wD?5? ?z?#O?־?z? ?@?D?,?݄^?߈L`?•?.? ?# ? ?V?3@?c?HF?&?V2? ?XT?b?C? ?B?Z?̯@?& js@uH b/ ?@EJUq@j4 L@b{f ߀ֈҠ@% ޜgP`Πܧ;``يZ*-`; lL%ծr ҿ\4@ Ȁxi ίx)`G ߖ Ƈ۠v!1 J9 BPwSJàɠJ<@??J??Jà?SƠ?w?BR@?J9 ?1?!?@?v?Ƈ`?ߖ ??G?x*?ί?xi? Ȁ?4?ҿ\??r?ծ ?%?lM ?; ?*-?يZ??;`?ܧ?Π?gP?ޜ??% ??Ҡ?ֈ?߀????{f ?b?L@?j4@?@?Uq@?J?E???@?b/ ?H??u ?js@? ?& ?'a@V@ ,|`j7@m@辮n|w{WV`d??i{`#` Q ve@{`6I1u]]1ኖ @ka ߶AߛY ޖ sw`uK`T$3`]gu`د`׈@֮Z`brՌ@< j`H&ǀf`УX̮̀;c;`c`Ʋv`mÀD(4yɀ=p<`Rf`)# =`)> `)DY<ר?Y`?)D??)> ??=`?π?)# ?h?R?<?=p??y?4Π?(?ÀE`?m??Ʋv`?d@?;`?c`?;?̮?̀???УX@?`?g?&ǀ?@?H?@?j`?< ?Ռ@?bs?֮Z`?׈?`?د?u`?h`??]?3`?$`?T?K?u?sw?ޖ ?ߛY?߶A?a`?k?`? ?ኖ`?1?]?]?v?1?I?6??{?ve?Q ? ?#`?Ԁ?i{??@?d?V?{W?w?|??n?辯 ??m?j7@?,|? ?@??V?'a@?=} S Z~ bp`펀o@裓@yM\@|n@@@-獴r,`a`ߠ@3V (@P`M: Tp`~ ~@ !`a` <B P``e`e @r@!^k' Uޒy0@ݺ9ݜᕀ 㼀0 pW+9~`O@إsזֻw`@. @f`'nӍz KҴ`o`ڟє/@&`и'Ϲ@Μ;kK35ʔɂ@ό@% Hnh÷µ @QI`%l7LIisР7a`g i`$ 7r` 7v{n<"p ?{n*`?7v??7r`?$`?i`?j@?7a`???`?is?I@?L?@?7?%m?`?I?Q??µ ?÷`?h?n`?H?%?ό@??ɂ@?ʔ?5?K4??l@?Μ;?Ϲ?'?и@?&`?є/?ڟ?o?Ҵ`?K@?Ӎz ?'n?f`?A@?@. ??w?ֻ??ז??s ?إ?O?~`?+:@?W?q`?0 ?? ??ᕀ?ݜ?ݺ9?y0?ޒ?U@?k' ?_ ?!?@?@?s ??e `?e`??P`?B@?<?߀?a`?!? ?~?~ ???p?T?:`?M?PѠ?(@?@?V ?3?@??a`?,?r?獴?-?`?@?|n??\`?M?y?裓@?o`?펀?p? b?Z~ ?S ?}@?=?Ta@T ~ pt꘏J3e܀@+@f a&0 芉`;砯@>\KҀTҍ @| F rE~'S ܙs& @,2@G@x ^Vi`` `z~`ժ݀`8*BC@g⨔@`e@$`ҀҹѠX@Ǡ@ @ఛ@fhz d$ R߰Iߣe@ޏr`~^@ntZ MU`5ۼۣv, Mڛq +@ ÀzZW`X6פ 7 ʀ֦Fրx Մ\@b8Ӧ A< Ұ[@҃#w <ю_V`s l;Ϸ SeΕ/`s@ QA0Đ%ɠ`7`}8F YƨR`5ņ\ H@dc`Bi  lkn`@m@t٠y<0Ӡ2`d\ p %1`U@@ 1 , Ud `r8<4 ?r8 ? `?Uq@? ?2?1 ?`? ?`?@?Y?1`??%?q? ?\?d?`?? ??2?0Ӡ?y>?t٠?n???n`?l@? l? @?Bi ?@?dc?I ?ņ\ ?5@?ƨR`?Y?F ?}9?7`?ɠ ?%?đ?0?A?Q? `?s@?/ ?Ε?Sf?Ϸ ?;?l?s??_V?ю?<@?w ?҃$ ?Ұ[@??A<?Ӧ??8`?b?@?@?\@?Մ?̀?x?ր`?֦F??7 ?פϠ??6`?X??W?Z?z?? À?+?ڛq ?N?, ?ۣv`?ۼ?5?MU`?۠??Z?nt?^??~?ޏr`?`?@?ߣe?߰I?? R?d$?hz ?g?ఛ@??@?@`?@Ǡ?X?Ѡ?ҹ?Ҁ?$?@?e?`??⨔??g?BC`?8*??݀?ի?~`?z? `?i`?V?^? ?y ?@?G?,2@??s& ?ܚ??'S@?~?rF?F ?|@?? ?ҍ?T?Ҁ?K?\?? ?砯@?;??芉?&0 ?a@?f ?+`?@??܀?@??3f?J?꘏ ?pt? ?~??T ??Ta?_)`q˘ @E鱼 [@ZE`Yր/`H1 ԙB{@褕`#sʺA  UL| t @qi *8@ט ȕm搟8 X!`΃m+ czi.A C `@b i%We!@.@"M `o ㉑`J@R`@ި⨯`⭦ r v <?`Дᚂ8dldb.S-5 +URe ``f\B2ލ@ށS!e@ݴ ݦtH 9 ˣo^@@$ۖۃ *( ' ڽڨQ!;y 䙀%x`Ԁ `؞ ؆8`2f @׫`Y@`>\`րcӀ{ զՉP :DͧԮҀa @Ai`Z`Ӈ@g & ҮҌA x8ѲB h E ЏB@j"k ΒF#͹0k׀̑e}@˷-!ܭ SĠRzf`'ȡMǦsJDƘ @ž`;~Lb È/¯N`UV`@{@#`[1# -nzb`  . Q2bU@ {``3q@-` +k@bcE`@`-@bg -v {-`kI]`?Y@`?׫?@??2f ?؆8?؞ ?? ?`?x?&?䙀?;y`?Q!?ڨ`?ڽ?'?*( ?ۃ?ۖ?@?$?^@?o?ˤ ??9 ?H ?ݦu?ݴ ??!e?ށT ?ލ@?`?2?\B?f?????Re`?U?+? ????5?- ?.S?db?dl?8?ᚂ??Д??`??@?<?v@?r ?⭦?⨯`??ި?`?`?R?J@?㉑?o ??M ??"?.`?!@?e?W?%?i?b@?@? ? ?C?.A ?zi?c?@?+?n?΃?!??X?8 ?搠?m?ȕ? ?@?ט?8? *?qi?@?@?t ? @?|?M??U ? ? `?A?ʻ?s?#?褕`?B{?ԙ? ?1?H?/`??Y?EȠ?Z??[?@?鱼 ?E? @?˘?q?)?_?j`?`鎦` }@,E UL@ꁞ鹜RK@"%I邵 `d`E馡&5~* VG.@Ý` 躟`]Рa;jnUנHr@"A`@Gג3(`j Fg@#vBc Cܢ1$ ,教 3`r D`Nc@d_* ?`O 忎ǠZw几T'b0O>< r` īH@䫪@|`Xbw4=@Q 7 㫭&\b8>``Сʠ&`℻@⇬` c4@<>`H n`Wa@?&`d `d ? ?4`Ȁә]@yY`g8e C@@Q߭Yߧ e`^Aŀyy`̱ތ, ރC݀;&bݳ=ݩj``"D ^ ܑ ܆`I`=B$۸۬hpc(9  9`ڗ@ډO(@``پo`ٯZ vf-T9؜،TC 4Ҁײl`{pi`3`!ꫀW֢H ֏Y@F`HյՀl@8P@$< ێ@ԧԒ_J3` MӸӅp/=}'@ ҬҖ-@dB`M@nѼ.@ыsB* / 2б Й iXP 8@ϱ @ *@`ΏQ\ x2`m9̨K`H`˻˅@*4@ʙXcb | w`@ʀÀȯ U4 @nj4+`@ƣM`jU o `ŁGĶx_Ҁ%/Ó@>@­3qVS@sN@i,8@5@ޠTn LX:* @@ @fHD !}@ _g>4 nQt `yn8_e*R@>@+`Ku`` *€m w *`w{<ɀrwb(u`4?h?_?? ?!~? ?D `?H?f@? @?"?@??* ?;?LX??n?V ?ޠ?5??,9?i?`?@?N?s??S@?qW?­3??>@?Ó ??%0?_Ҁ?Ķy??G?Ł? ?o ?jU?ƣM`??4+`?nj`? @?5?U?ȯ?À?@@?w`??|?cc?ʙX?@?*4@?˅ ?˻?I@?K`?̨??9?m?3 ?x?\?ΏQ? ? *@?!?ϱ?8? ?P?iX?Й?б ?2?/ ?*۠?B?s?ы?Ѽ.?n?ؠ??M?dB`?Җ-?Ҭ?؀??'?=}?p/@?Ӆ?Ӹ@?M??`?J4 ?_?Ԓ ?ԧ?ێ? ?$<?8P@?l?Հ?յ@??H`??F?Y@?֏?֢H ?X@?ꫀ?! @?3`?i?{p?ײl?Ҁ?`? 4?C`?T?،?؜?:@?T??-?f`?v?ٯZ?پo`?`?`?@Ƞ?O(?ډ?ڗ@?9? ?`?(9 ?c?p?۬i?۸?%?B?=?I`?܆?ܑ ?^?D ? ?"?`?j?ݩ`?ݳ=?c@??;'?C݀?ރ?ތ, ?̲ ?y`?y`?ŀ?^B ?e`?ߧ ?߭Y?@??R?@?@ ?C?e!?g8??Y? ?y?]?ә??`?5??? ?? ?d@?d `??&????a?W?@?n`?H@??>?<?c4?` ?⇬?℻@?&?ʠ?Т?`? ?`???>?8?b?\?&??㫭??7`??@??R??=?4?bw?X??|?䫪`?@?H?ī?@?`?? r?><?0O?b@?T'?几?w?Z?Ǡ??忎??O ?????* ?d_ ?Nc@?D?r ?3?教 ?-?$ ?2 ?ܢ?D? ?Bc?#v?g`?F?@?j?(?3?ג?G??A`?" ??Hr`?נ?nU ?;j?b?]Р?躟??@??Р?Ý?.ۀ??VG? ?~*?&5?馡@?E?р?d??邵 ?%I?"?RK?鹜?ꁟ ?L@?U? ?F ??,?@?}??`?鎦`???j`?peŀ#@e`sQڀD`Vz  @hꛧ w٥U|@ 4t`\ ] `1i<ܠP8h|E^`jA$`ӗW'A d@l@@@R(@y7]Am%@ Σ, ѽ@癩@d~Q`I`b/B@F +. '@gE橣漬`@t 慉 Y8i>b@Nv@# 2`q@y@`婍 )@g:rLIW<1W;b gk rw4{@}`pt~|Y}@`>{EU#w)rlF e]㼖T`@J f>jK2OD`0%3` O`ư`b rtWYz<>.!y"@dO`N`9`"ᵻ s~*cܠc@H H -`-U@ x`^@ۃC>`) o nq T@S-`97@`d @C`ߚ`ߕdO_;`.( 5޻`ދ[ޅ1U`Nޠ0 @ݲ_ݫ0@|`tE>2 \ 5ܣ@ܚ@ld;6`-@R`Aۓ ۊJ ]S'BSںڰ^ڄs yN-`Cj` `x@٫Z@ٟ`u@i> 3=؛؏ eY//d@"BҀ׵ˀ׌`UV?H@i `@ֳb`֥}} oF88 ˩գ Օ5@m^7V(L ʿ Իe Ԕs@Ԅ`^'@N}' @ӻAӫ$`ӄ@tN`>>[` @YҫҚ`usdu@?&.@`@Ҋќ<ъeT<@/`RYа`Ќ zw@VfD@  ӑϮI`fAh Uԇ΍g! @ʹz`͍Gۀ!`<̴$ n@GD@d`˕^`m( ʼʓO~&ހɺv> M( IȜsk`0\@û`ǙW@,`y ƿ`}S`6`6ŤyX7 {@Q@ğ^`2 `@Åk@Y@) ¬&L ?@o`f?8@`^ VA@gg@ ! 0@W۔}_M)@O@8@vy`2@<@cZ\@8^5 "=@H`@o@[@ ewI9۩p@)@]v``+`e@B ^ S@B`({?)H@q^``) ^@+{)thk)[6@ ?ɺ`?ހ?&`?O~?ʓƠ?ʼ??(?m?˕^`?e ??GD?n@?̴%?<?! ?Gۀ?͍?ʹz`? ?! ?g?΍?ԇ?U?Ah?f?ϮJ ?ӑ? ? ?D?Vf?zw?Ќ ?а??Z?R?@?/`?T<?e?ъ@?ќ<??Ҋ??`?.??&?du?us?Қ?ҫ?Z ?@?̀?[`?>?@?N`?t?ӄ@?ӫ$?ӻA??? ?'?N~@?^'@?Ԅ?Ԕs@?Իe`?ʿ ?@? ?(M@?7V?^`?m?Օ5?գ ?˪@?8 ???8?F?o ?} ?֥~@?ֳb`??`?i?@?H`?V??U`?׌`?׵?Ҁ?B??" ?/d@?Y0@?e?؏?؛? ?=???3?> ?i@?u@?ٟ?٫Z@?x?? ?`?Ck@?N-`?y ?ڄs ?ڰ_?ں?`??T ?'B?S ?]?ۊJ?ۓ ?@??B@?R`?-?6`?d;?l?ܚ?ܣ@?6 ?\ ? ??>2?E?t`?|`?ݫ0?ݲ_?@?@?0?ޠ?N ?U`?ޅ2@?ދ[?޻??6??(?.?_;?dO?ߕ`?ߚ`?C?@?d`?`? ?@?7 ?9?S-?T@?nq@?o ?`? ??)?>?C?ۃ?^@?@?x`? ? ?-U?-`?H@?H ?c`?cܠ?+ ?~?s@? ?ᵻ?"??9`?N?O`??d?"?!y?>.?<?Yz?W?t ?r?`??b ?`?ư?`???O? ???3 ?0%?OD?K2?j?f>??J ?A?T`?㼗?]? ?e?F`?l??r?) ?#w?EU?>{?`?Y}@?| ?t~?p?}`? ?{@?4?w?@?r?@?k? g ?b?;?1W?W<?LI?r?g:??)@?婍?`?`??z ????q??2?# ?Nv`?>b@?i?Y8?慉@?t ??@?漬?橣?E@?g??'@?? ?+.? ?F?/B@?b?I`?~Q?d? ???癩?ѽ?, ??Σ? ?@?%?m?A??]@?7?y ?R(@?`?l@@?d`?A ? ?'?W???ӗ?$ʠ??A ?j?^??|F?8h? ?P??i<?1?`?`?]?\`?`?4u? ?U|?٥?w??ꛧ@?h??  ?`?z?W?D`?Qڠ?s?e?@? ?#??pe?uH髞@ 43@vD@HWJ"HC% :0$̠` lk.U m@@+ κA ހ`鞜-J }鳶lC\ `Ky:f`(`Sm`ʠ@h-s?~@ 译`e 輴` `zh@iNWr7F _4TM" :@(@+j'@ۥ@@C@@m@m炘產pA^o M`];'K,)F8b &|`+`@`9``渠 U vdo~@R*@]8@4`J`.=`8@E`&o L@-R@W@@[o^2a@@c妹@c}zd C`hcp `Vb`] D`K2^ 9_ ['(@W@`S  N@IP@C@=6 䧳.䕀`~' Mlq Z`^ H L6 :`#`(U@% @ߕ`f㷸8㥬 `㓠@こ@ㄭ`o`r]y`R`KkN%`9];'O)A@2s#G  ŀ⪚րoƀE@r t`aNO< =*s +s`aIP ?-@Π`Х `} T,@`uuccQ Q@??d-s-= ` M@`9@&@@y@`R`+@ ޠxw`f@eTSkBp AE0[`/F 1 9@\ ߫ߨƀ߇ ߄{c`1?d;9 `Rޮ`ުފކt@f`b*B4= ۠Nկ@ݱݬݍV݈si)@d+ D@? @@ Rt ܴG`ܮܐ܊zk f2@G`A#b[4@ ۷ ۰ےیn`h>JzC&L@j`#ڹڲ ڕڎqajP`M2F ) !}`7ټtٴ٘E@ِtlf@OH +#UP ؿ%ط ؚؒŀv`n RJ;.d% 4 l׹'@ם@ה`yqpU@LY 1( ߋ`|ֻG ֠K֗|rW@Nz@3*6U #սiբ ՙ&~tZP@6] ,Z+Կ`ԥԛKԁdw@]2R8.@ =i@Ө7`ӝtӄy0_T;`0m g;$` `Ҫ֠ҟ`҆{[bq`W>>2 `P Ѧ ѭsѡщ@}@eYE@ 5@`u@}B@;`а@УЋ g[t Cu71B`Z`ϭϔeR LQ@ԄλHΌ r@C`*@ PͲ͙7jP"/ٴ̿̑Mw'H. ` @˸ ˝oU'I ʖz{N@3 ɽD@ɢt܀Y@,u yț@S=7s nǦlz ]1 f6 Ơ@Ƅ`Xf ;ZǖŪ-bU 6ŀ`]@OĥĈ]@J $`ǀ̼ïDÄSf@;@?ս@«@:bD@I 5`xk0A`",@> g`I'l`pF@6@AdN=9 j@,4`0I ,`Ky(@'y$ W u52S` @1@`@E=r@]` ;@)@hWFg߀$܀'t j I*`'@}:[ •`9`{Ju@] n;hZ@am[j`R'  <ʂ@u]`Bh[ \t`'dk[@{'vqr[`k0~`b[`R 2 ?-??"`?A`?k1?x? ??6?I ?D?b?;?«@?ս??@?;@?f ?ÄS?ïE?̼?`?$`?@K?]?Ĉ͠?ĥ?P`?]@?@?6ŀ?bU?-?Ū?ǖ?[??;ޠ?Xf ?Ƅa`?Ơ@?`?6 ?g`?1 ?]?z ?Ǧm?n?? ?7s?S=? ?ț?z`? ??,u?Y?t܀?ɢ`?ɽD@???3 @?N@?{?ʖz?`? ? ?'I?U?o?˝@?˸ ?!?`?.?H?w(?̑M?̿?ٴ?0?"?P?j?͙8?Ͳ??P?*@?C`?r ?Ό ?λI?Ԅ???LR ?eR ?ϔ֠?ϭ?[ ???B?72@?Cu?[t?g??Ћ ?У@?а@?;?B@?~@?u@??@?5`?@ ?YE?e?}?щ@?ѡ ?ѭs? ?Ѧ?P?`?`? ?2 ?>>?W?bq`?{\?҆?ҟ?Ҫ֠?? ?$?;? g?m?0?;`?T ?_?y1@?ӄ?ӝt?Ө7`??i??? >`??.?8?R ?]2?w?ԁd?ԛL ?ԥ?Կ??`?? ?+?,Z?6] ?P?Z?t`?~?ՙ&`?բ ?սj@?#?@?U ?@??*6?3?Nz?W@?r?|?֗ ?֠K?ֻG?|?ߋ??@? ?(?1?LY?U@?p ?yq?ה?ם@?׹'??l`??`? 4 ?%`?.d?J;?R?n?v`?ؒ?ؚ?ط ?ؿ%?P`?U???#`?+?H!?O?lf?t?ِ`?٘E@?ٴ@?ټt?8 ?`?~ ??!@?) ?F `?M2?jP?qa?ڎ?ڕ?ڲ݀?ڹ?$??j??`?&L@?C@?Jz?h? ?n`?ی ?ے?۰`?۷ ??4@?\?b?`?#?A?G`?f2?k ?܊z`?ܐ?ܮ`?ܴG`? `?t?R? ?? @?? ?D@?d+?i)@?݈t@?ݍV?ݬ?ݱ??կ@?O?۠?@??=?B4?b+?f`?ކt?ފ?ު`?ޮ`?@??R@?`??9?;??d?`1`?c?߄| ?߇ ?ߨ?߫?? ?]@?9@? @? 1? ?F?/ ?0[`?AF?Bp ?Sl?T?e@?f@?w?x???`?@?+?`?R?`?y?@?`?&?`?9?? M@??`?-=@?-s??d???Q?Q ?c ?c?u ?u?@?`?,`??T? ?}@? `?Х?`??-@???? ?P?J?a?+s?*s ?=@?< ?O?N?a?`?t ?r ?E?ƀ?p?ր?⪚??? ???`??H?#?s?2??A@?)@?'O?;?9]?N%?Kk?`R?]y?r?o`?ㄭ?こ@?`?㓠? ?㥬?8 ?㷸?f?`?ߖ??`?? ??%@?@?(U?#`?:?6 ?L?H ?^`?Z`?q`?l?M?~' ?䕀?.?䧳?6 ??=??C@?P?I??N@?`?S ??W@?'(`? [?9_?2^ ?K?D`?]`?Vb`?p ?hc?C?zd ?~ ?c?妹`?c??a@?2`?^?o?[?ﮀ?W@??R@?.? L@?&o@?E`?8`?.=`?J?@4`?]8?R*@?o~`?d??v? ??U??渠`?`?@??9?`?`?`???+ ?|`?&@?b ?8 ?)F?K- ?;'?]?M`?o`?^?B?p?産 ?炘??m?m`?@@???C?@??ۥ@?'`?j??+?(??:?" ?M@?4T?_?F ?r8?W??iN?h`?z? ?`?輴@? ?f?译`? `? ??~? ??@???-t ??@i ?ʠ?Sm?(`?f?:?y?K??\ `?C?l?鳷@?}?J`?-??鞜??ހ???A`?κ?+@?@?@?m?U`?.?k? l?`???$̠?`?0??:?@?C%? ?H?"@?J?HX ?D@?v ?3@?4? ?`?髞?H?u?x ЀD74Y@_Rcd>f"e~ `a7 [`ޓT*`L{긯@Cj9 ꕿ@/z $Ԡt d T `E_ P@6i &נZ@*u]ܽb@/锼@鿴@H{@nn 锘aRTx`Gi:[-M ?`1ps#cR], \``Ϡi`Ěva χ#賵菞 V`u  g|8@Zm n_M `?ĠR2mD@%7 )H Y} `4&@Ϡai@֞笘`-] 矟U` v`'ix vm \hNZ@A$MC3? &=`1׀Ƞ$" Rn``e@ Wtߥ@@溁@E`涖@柋`9愓 捌 w@ ir2\dN@VۀA`I03;&- 2@  @7☀@ Ǔ@嬍` L呅嗦` v||[hn[raM`Sm @gE28$%[`*݀ N :@@@@`ḠQ0د`Ʃ !k@䫘` '䐇䔆`@uuyD@gk`Zc^L٠Pb@?OB15!$;' '@ B@ @@d`q@%㺇Z@ IC㑫@ぷ t,vnf h`Y[2`KM=?0o 2Y "$V @ <``쯠F@" ѕ` @o`z`5` ✙ ҀD` r se)@f'WX@J `J <`=S.@/ !c "@`F G)@ݛ u }>` ᧣ @B`l~`~рq$`q6c@cV VHvHe::-X@-0@9`` `ŀ+ ېk[K`ॼ' , @} @|Xo|@n`a@a$`T\ S`FE`9;8V`+*@" Ԁ誠ϳw ߴ߲Dߙqߗ~P{`c/``H`Ew@, *D@``ހۈثg`޽y ޥEޢFފ$އo@k`SP85|J@zX6ȳݱ`ݭݕ@ݒOzw_[D@@)h%F@ V#$@@ܼޠܸܡܝ`܆@܂]kv`g,PSK500 @g5ȤۭۨӀے^`ۍ@w;@rq@\W@@@<@%` ` |g KڹCڴڞ ژ`ڂ}gbL@GX`1,'m@J&@ږ@`ٿe٩ޠ٤5َى smXrR=N7t@"*Dо`ʳص@د`ؚvؔS`Qy#`d-]@I @B@-'@ c 3wS@׺צ.ן ׋ @ׄt@oiDT N92@x S.V` &ֱ@֪@֖֏Ǡ{t `wYhER >9@*-`# `ؾ{սնL`բt՛ՇOl*dQI 5.`0q`L@@Ԯ' Ԧt@ԓԋE wp\TA`9&m  GZ"* ӹӱӞӖ Ӄ {o@hg`@`MB@E2)``V@Ňҽ'`Ҫa`ҡҏ;҆t`k@XPl= 5=" Z`4ȃ@ѶѭTњ`ђ&àv`d[Ix@@`.R%k, =@@@`иЦН`ЋoЂTpJg&U$ K9@0ɠ`@ Ͼ|Ϛ@ψ d`QÀ.5f @ή΋QxQUA` m;`Ͳ!͞{ՠh`E2&=@ɀ@m ̢̏lXX`6 "X`t ˵`˓'C \ۀH&@B.`ʹʥ@ʃ ovM]9`aɪxɖ`t,_`=߀)M``F`ȼ ȚȆ9@d@O@.`@@%`ǠǬ`Nj{vmU.`@ YƲH@Ɯ{fE0F@b ``ÎŢȀō2l{V6. {@ ɕ@ijēH}h \G `&aUúã`ÃmM{ 7B . @ʊª@”/@tG`]Ӡ=@'x @`@ @ed@N .y `, StUD>@ U@@d6\` ɥ\@7Q E@ l=\`Ц Nc`&8 M~`tID^  קj.z:`߀UD$`@|K`@uީ`q@6?<ɥ @] `+o`Rc:@嬀x > ?j `d@24Yf`` d@`&] M '`sA& `M`gtP `4 ["`@yI6C]p  @Bl`i+@6l *`& TtR`Bi@z;]@7 #\&z] H@7@~. {&wˠt] pi@k&db [&K-$<4?K-?[&?db@?k&?p?t] ?w?{&?~G`?7@?U?] ? ??z?&?h??# ?7 ??? ?]?;?z?o??H@?tR`?T!?& ??*?`??l ???6?i.`?l`?B?@?@? ?s?]? ?6C?L?y??@?[%? ?4?? ?tP?k?M`?נ?& ?D@??s?'`?M`?] ?&???d@?c@??Yh??`?4?2Ԡ?d@??j ? A`?>?x?? ?:@?Rd???o?+р?] `??ɥ ?>@?6??q?`?ޫ@?u?Ka?|?@?@?$?UD?`?߀?;?.z?j??ש? ?D_?tI?@???M~?? ?:@?&?c?N?Ч?`?=^`?l? ? ??E??Q?9?@?\@??ɧ? ?6^?d??U@???>A`?UD?t??@??S?, ?@?.y ?N ?d@?f@?@??`@?`?@?'y?=@?]Ԁ?tG`?”0 ?ª@?ʋ?@?`?. ?7C?M{ ?m?Ã?ã ?ú?U?a??&?G ?\?}h?ēH?ijĠ?ɕ@? @? ? |?6.?V?l{?ō3?ŢȀ?Ï`?`?@?b ?0G?E?f?{?Ɯ?ƲH@?Z?? `??@`?U.`?vn@?Nj{?Ǭ ?Ǡ?&?@? ?.`?O ?d@?Ȇ:?Ț?ȼ?F`???)N ?=߀?_@?t,?ɖ@?ɪx?b`???`?9?M]?ov?ʃ ?ʥ?ʹ?/ ?B?`?&@?H?\ۀ?C?˓'?˵@?t ??`?"X?6 ?X ?lX?̏?̢?n?@?@?=@?2&?E?h@?{ՠ?͞ߠ?Ͳ!?<@?m? ??A@?U?xQ?΋Q?ή`?? ??g?.5?Q@?d`?ψ!?Ϛ@?Ͼ}? ?ڀ???`?0?9@?K?U$ ?g&?pJ?ЂU@?Ћo?Н?Ц?и ?`??@? ?? =?,?%l ?.R?@?Ix@?[`?d?v?à?ђ&?њ`?ѭU ?Ѷ?ȃ?4?`?Z`????"?5>@?= ?Pl?X?k?t`?҆@?ҏ;?ҡ?Ҫa`?ҽ'?Ň?V?`???@?`?) ?2?E?MB@?`@?hg?{o?Ӄ ?Ӗ?Ӟ?ӱ`?ӹ?`? ?+`?"?Z`? G?`?&m ?9`?A`?T`?\?p?w?ԋE?ԓ?Ԧt?Ԯ' ??L@??q???1 ??.``?5?I?Q?d?l*??ՇO?՛`?բt?նL?ս?| ?ؾ?`????# @?*-`?>9?ER ?Yi ?`w?t?{?֏ ?֖?֪?ֱ@?' ? ?V?.?`?S??x ?2?9?N@?T ?iE?o?ׄt?׋ @?ן?צ.?׺@?S@? ?w?4? ? c??'?-?Bà?I @?]?d-?y#?Q?ؔS?ؚv?د?ص@?ʴ?о`??? ??D`?"*?7t?=N?R?Xr?m ?s?ى?َ?٤5?٩ޠ?ٿf@?`?ږ?&@? ?J??m?,( ?1?GX?L@?b@?g?}?ڂ?ژ?ڞ ?ڴ`?ڹC?L ?g ?}??? ? ?%`?<?@?W@?\?rq?w;@?ۍ?ے^`?ۨ?ۭ??Ȥ?6 ??g??? ?0?50?K`?PS?g,?kv`?܂^`?܆@?ܝ?ܡ?ܸ`?ܼޠ??@?$?#? V`?F@?% ?)h?@?D@?[?_?w?z?ݒO?ݕ@?ݭ?ݱ`?ȴ?6? ?X?@?z?J??5|?8?P`?S?k?o@?އ@?ފ$?ޢF?ޥE?޽y?g`?ج ?ۈ??`???*D?, ?Ew?H`?`?c/?{?~P?ߗ?ߙq?߲D@?ߴ?w?ϳ? ?Ԁ?@????"?@?*?+?8V?9;?E?F?S?T\ ?a$?a@?n?o|@?|X?} @??@??, ?'@?ॼ??K?[??@?k?ې? ?+ ??Š?`?`@???9`???-0@?-X@?:?:?He?Hv?V?V ?c?c@?q6?q$`?~?~`?l?B`? ?@?᧣@?` ?>???}?u? ??ݛ?`?)?H ? ??F???"`?!c ?/`?.@?=S`?<`?J@?J `?X?W?f'?e)@?s?r ?``?D??Ҁ?✙`?` ?5???z?o?@? `?ѕ`?`?"?F?쯠??<`? ?@?@?V?$?"?2Y@?0o ???=?M?K?[2?Y?h?f ?vn?t,? ?ぷ?㑫`?C?I? ??Z?㺇@??&?q@??`?d@?@?`? ??? B`? '@? ??'?$;?5!?1?B ??O?Pb?L٠?^?Zc?k?g?yD?uu???䔆?䐇?(? ?ɠ?䫘?k`?!? `?Ʃ?د?0?Q?Ḡ??@?`?@?:? N ???*@?%[`?8% ?2?E?@g?Sm`?M`?a?[r?n?h?|[?v|?@?`?嗦?呅?M? ?@?嬍`???A?Ǔ?@?@??☀?8??`??@?  ? 2??- ?&?; ?3?I0?A`?V۠?N@?d ?\?r3?i?߀?w@?捌@?愓 ?9???柋`?涖`??E?溁@??@?ߥ?t?W ? ??e@??`?n? R?$"?Ƞ?1נ?&=`??`?3?MD?A$?Z`?N?h?\?vm`?ix ?'?v`?@?U`?矠? ?]?-??笘`?@??֞?i@?a?Ϡ?&?4??? `? ?}? Y?)I??7`?%?D`?2m?R??Ġ?`@?M ?n`?Zm ?|8`?g?`?u ?@?V`??菞 ?賵?? ?#?ψ?a ?v?Ě?i?Ϡ?`?`?\?, ?]?R?#d?s?1p@?`??? ?M@?-?[?:?i?G?x?T?S?a?锘?nn ??{@?H ??鿴`?锼@?0?b@?ܽ ??]?u????*?̀?Z?&?i ?6?P@?E_`? `?T??d@??t`?$Ԡ??/z ?ꕿ`?9 ??Cj?긯`?L{?*?T?ޔ ?[`?7`?a? ?e~?"?f?> ?cd?_R?Y@?4 ?D7??Ѐ?@? ? ?x?{`)*@# Tu뛠n]vI|Y@U`B'.@ꈉQL 7 ꄤU@c |b)w2ՃqTka`꽅d^*͠W,@OHUA{Ҡ9jqp 1g)@)\ !RH݀> p53+/!f`@- ``KK͠G瀠齻'q鬎`zJ@钡鮗 ,Axco g^SvO Ul Lɀc@D@ZU;4Q 2f`G) >s@ À5, + "?b e"`@ @l2 'ÀC`ύ]Y w %褏@ 蛦`蒼衑@Ѡa3 w@`o |ؠf`s`].`j@T>`aVKMX,B\`O9j`E 0w<@'3 *e!?` `@Р̀ f@C@!@ 缽糝} ]@>`}t@|ksĀb jY#`a`P%Xl G(OO`>)F25+=,,3`#.*ޠ.!@/`//q/W@/=/".@-`, `*Ƽ)@潢'洉%q#X`!? '`@x}`ot߀fkǠ]b@T `YK PB@Gj`9>S`/5<&,%#@  `@ t`^Iƀ3  屻 娶 埰@ޠ喪卤呴儞删{`rvvi@mb `dMW[9`NyR%ErI\T3S@K(@JB A98y0/i&`&Z` J;` ـ + `oX@߽A߻߫*ߩߙ ߗ ߆`߅``tsAba"PO>< ,@*ƀt@]`Fj`/K`-޾`ޭޫޛ`ޙ@މ`އw@u e cuSw QW A`?8/H- 1 @@ 䠀҂ ½cݰ`ݮE@ݞݜ'݌w݊z``w`hIe V1SD@A2/q@S @ 4@׍ڀv`¼@ܳ^ܰ ܡG`ܞ܏/܌a}@zCkh%X VFѠC41ˠ"` s q[SC5,@۶۲ۣ۠ۑ ێ`| mj@[Xd`I FF7n@4(%V" >'  뱀@ٓ`uڸǀڵX ڦڣ:`ڔڑڂ~phl@^PZÀL8 H: @6 ( $j`@L@/ `ߨ@͐@@ٻx@ٷ٩`@٥ ٗH ٓ}م0 ف`s oB`a]$NK@<8*&@@osW@V@? 8ؾ&غ@جاؙؕ`؇`؃u@qc _ QMj?};M@-e@)/M  4 ``Ν ׼׮תbל טE ׊׆'xrt `fZ@a TAOB)=0 +`x `Z =篠 @՗` ־ֱf֬Ƞ֟N@֚֍5ֈ`{`vqidSV`R6D@2-`   r YA j(Mմ կ0ա՝@ՏՊ }Ơx kfYTG|B5d0d#KG3@ *  ӀöԶ@ԱԤԟ|`Ԓ ԍ_`Ԁn{B`nUi%\=@W`J$D`8 2΀%@ `w`Zݐ=x ӹ_@ӴӧFӡӕ.ӏӃ@}pk^YsL GV :59@(#`h@OŠ6ڨ ȋҼ@Ҷo ҩҤR@җҒ5`҅Ҁ`s@ma`[OpI=W7 +?%`&@k N1@Ѿ@Ѹ`Ѭ`Ѧњxєш_т vFph`d.^K`R L.?@:-`' ʠ` ߂ g e`N лHЯ5`Щ+Н`З ЋЄxrf`TN`B<0*bn F U )x`F Ϭϟχ{m`cW4?2M `@@Nή`΢`Ί} fSYB!5i0 ՋȽͱYͤ@͍'̀Kh\D7؀ @_f-,̳̦̏̂@k^ Ge:G#3Հπ͜@˶`˩c ˒k`˅)n9@`J <%~`E@p ʹ>ʫʕ ʇpڠc`L?'(v@`D @| ɻɮC ɗɊ s{eOI`A+@^ %ȾȰȚNȌzv@hA`Q@D`-@ @S]@!@dz$@ǜǎ@xj TFy 0X`"@ &  Ƶ Ɵ@Ƒ\@{] m#@W*H@2$@@x@?@aŸ@Ţ/`œ`} o`YK[5'"f@3ްĺwĤ@Ė>Ār\jM88@)[Ӡ" ˡ@ü@çoØ`Ã<tw_ @P>:,s @¿[ª`›" …v@aR=w .wD > {@y[@dHU"`@`0 w ? L@`{`fWB3[# @< bc@D r k`BC#*ڹ@yGiI d`K p@G (@ߞ@@,nR@N %@I݈@ #`ufL`,Y`䃠`s`S+*` /`½`@zLQ@1ڠ @i@1@x@X@0g  ǣ` 1W86`Om݀~]l 5>̉@ـ\t;``5˪@ÀE@bR : {o`a@K@`g8`@@@UR @fErE`i @{ =GZx i %`QG@r@% (Q(^`E@s/bɠQ@ @5|0j`Z ~ 9/A@M@\vjˬ`: `d M` B`f !8@G @i G@[%``_w V 64F ~ @`\w :1MliHi`L:%@&@\w>@MH`}m`{%xv`t_ rMovk%fMbM[*HRMB?\w?`?@?2???%?LG@?i`?р?H?i??s ?M?8@?:??\w? ?~ @?? ?4M ?6?V@??w׀?_??%`?a?G@?' ?i?@?? ?G?!;`?f ???C??@?M`?d???: ? ?ˬ`?m?\v?P`?A@?93 ?~ ???Z`?`??0j?|?5? @?Q@??ɠ?/e?s?H`?^`?Q+?(? ?%?r?@? ?G??Q?%?i ?{@??G^??@?{ ?i#`?E`? ??Et?f??R ?W@?@?Ƞ?@@?g:?`?`???K?@ ?a???q?{?@?: ?bS?E@? ?˪@?6?`?;?\t?`?ـ?̊?>?@?5?]m?~? ?m?P??6?W8?3`? ?Ǥ? ?`?0g ?X?x@?@?1@?j? @?1@?Q@?zM?`@?¿@?`? 0?+*`?S@?s`??`?@?Y`?,?L`?uh@?#`?٠?݈@?K@?%@?N?nR@?.`?@?ߟ?@?(`?G ?p? ??K ?f? ?Iנ?i?I ?y?ں??#,@?BC?k??? ? ?r?D?c@?d`?< ?? ?#??3\?B?W`?f?{@?`? ?L??? ?x?? ??0`?@`?U# ?dH?y\?{@???? ??? ?`?D?.x@?=w ?R@?a?v ?…?›#?ª`?¿[?@?㔠?s ?͠??,?:?P?`?_ @?tx ?Ã<?Ø ?ço?ü?ˡ@?#?Ӡ?[??)?88@?M͠?\j?r?Ā?Ė??Ĥ@?ĺx??ޱ`?3?`?f@?'#@?5?K\ ?Y?o ?} ?œ ?Ţ/`?Ÿ ?a?@ ??y ?@?$?2?H?W*?m#?{] ?Ƒ\?Ɵ@?Ƶ????? & ?"A?0X`?Fy?T?j?x?ǎ?ǜ?dz%?!@?^?S? ? ? ?-?D ?Q@?hB@?v@?Ȍ{`?ȚN?Ȱ@?Ⱦ?`??&`? ?_?+@?A?OI`?e?s{?Ɋ ?ɗ?ɮC?ɻ?}?? ?D ?@?(v@??(`?L?ca?pڠ?ʇ?ʕ ?ʫ?ʹ>? ?p?F ??@?%?<`?J ?`?n9@?˅*?˒k`?˩c?˶`?͝ ?π?`???#3?:H?Ge?^?k?̂ ?̏?̦`?̳?-?-?f?_? ? ?7`?D?\?h?̀K?͍'?ͤ ?ͱY?Ⱦ`?Ջ???0??5j@?B!?Y?fS?}?Ί?΢ ?ή`?O?@??@? ?M ?2`???W4?c?{n@?χ?ϟ?Ϭ??F?`?x`?)? U ?F?n ?*c@?0?<?B?N?T?``?f?r ?x?Є?Ћ?З?Н`?Щ,`?Я5`?лI?N ?e?g ?߂??`??? ??ʠ?'?-`?:@??@?L/?R ?^K?d.?ph?vF?т?ш_?є@?њx?Ѧ?Ѭ`?Ѹ?Ѿ@???`??2@??O ? ?k?&@?%?+??7?=W?I`?Op?[ ?a`?m ?s@?Ҁ?҅?Ғ5?җ?ҤR?ҩ?Ҷo?Ҽ@?Ȍ@? ?ک ?6? ?O??h@???#?(?59?:?GV?L ?Ys?^?k`?p?}@?Ӄ@?ӏ@?ӕ.?ӡ ?ӧF?Ӵ ?ӹ_@?! ?x?>?ݐ?Z?`?x???? ?%@?2?8 ?D?J$?W?\=@?i%?nU?{B?Ԁn?ԍ_?Ԓ ?ԟ|?Ԥ?Ա?Զ@?ö????? ??? +?3@?H?#K?0e@?5d?B@?G|?T@?Y?f?k?xـ?}Ơ?Պ?Տ?՝?ա?կ0?մ ?M?(?k?A ?@?Y?@?r ? `??ߠ? ?-?2?@?D?R7 ?V`?dT@?i?vq`?{`?ֈ?֍5?֚?֟N@?֬?ֱf?־@???՗`? ?篠?>? ?[@? `?x??+?0 ?= ?B)?O@?TA?a?fZ@?t ?xr?׆( ?׊?טE?ל ?תb?׮?׼ ??Ν???`?@??? 4??M ?)0@?-e@?;M??}?Mk ?Q?_?c ?q?u@?؃`?؇`?ؕ?ؙ?ا@?ج?غ?ؾ&?9@?? ?V?W@?t ?o??? ??&̠?*?8 ?<?K?N?]%@?a?oB?s ?ف`@?م0 ?ٓ}?ٗH ?٥?٩`@?ٷ ?ٻx@?֠?͐@?@?ߨ@??`?/?@?M@?@?$j?( ?6?: @?H@?L8 ?Z?^P?l?ph?~`?ڂ?ڑ?ڔ?ڣ:?ڦ?ڵX?ڸǀ?v`?`?ٔ?@?? ?Ϡ?'?`?>?" @?%V?4) ?7n@?FG?I ?Xd?[?j?m?|?`?ێ?ۑ ?۠@?ۣ?۲@?۶? ?,@?6 ?C?T ?[?r?s ? ???"`?1?4?C ?FѠ?V ?X ?h& ?k?zD ?}@?܌b@?܏/?ܞ`?ܡG`?ܰ?ܳ^?¼?v`??׍??@? ?? 5`? @?S??/q?2?A?D@?S@?V1?è?hI?w?z``?݊ ?݌w?ݜ'?ݞ?ݮE?ݰ`?d ?½?҂??? ?@?@?ݠ? ? ?1?-?/H??9?A`?QW?Sw ?cv ?e ?u?w@?އ ?މ`?ޙѠ?ޛ`?ޫ@?ޭ?޾??-?`?L ?/?j?F?`?]`? ?t@?*?,@?<?>?O@?P?a# ?b?sA?t?߅`?߆`?ߗ?ߙ ?ߩ`?߫*?߻@?߽A?@?X@? ?o???? ? ,? ـ?;??K ? ?&Z?&`?/j ?0?8y?9?A@?B ?J?K(@?S?T3?\?]>?eǠ?fI?n`?oU ?w?x`@??k`?@?v???%??5`?ॗ?E?ண?T?෮?d? ?t@? ?҄ ?@?ۓ?@??@?? ?`? ?@? ? ? ????&?$?$1?-"?-<?62?6G??B??R`?HR?H] ?Qb?Qh?Zr?Zr?c?c}?l?l`?u?u?~?~??ᇨ??ᐳ ? ?ᙽ?@?Ȁ?`? ???#?`?4??D@??T? ?d??u ??`?'??2 ? ?<??F??Q@?!@?![?*?*f ?3@?3p`?=?S?9?Gj?B@?P?K ?Y?T `?b`?]?k?f?tߠ?o?}?x???'? ?@?!?X?#?q ?%?洊?'?潣?)@?Ƽ@?*?ՠ?, ? ?-`? ?.@?"?/?= ?/?W?/?r ?/??/??/`?!`?.?*?#.?3?,,?=?5+?F3?>)?OO?G(?Xl`?P%?a?Y#`?j?b ?sĠ?k?|?t@??}???>?@?^? ?}??糝??缾 ? ???@?@?!?@?C??f???̀????@?@?`? ? ?!???*e??3`?'?<?0w?E`?9j`?O?B\`?X,?KM?aV?T>`?j`?].`?s?f`?|?o ??w@?3`??a?Ѡ?衑?蒼??蛦`?@?褏@?%?w ?Y@?]?ύ?C`??'?? ?3@??l?@?? ???"?e?b`???"? ?+ ??5,`? À?>s?) ?G?2f`?Q@?;4?ZV ?D@?c`?Lɀ?l`?U?vO@?^S??g??o ?c@?x? ?A?,? ?鮗?钡??J@?z???鬎?r?'?@?齻??G?@?͠??K?K?`? ?-??@?!f??+/?3?5? p?> ??H??R?!?\@?)?g)?1?qp@?9j?{?A?U@?H??O?̀?W,??^*? ?d?꽆?ka`?T`?q?Ճ?w2?*?|b?c@?@?V?ꄤ? 7@?L?Q?ꈉ?.??B(@?U`?Y`?|?vI?n]?뛡 ?Tu??# ?)*`??Ȁ?{?|'齳-)g\ xàOg[;R*@[ 0``#ꜗh`"@ @av ꎤqرϺ:@@|Jp`w.` ql`ꥰ g@ꝭ ae [U,P ~|J v@D&`oJ>g@8 `J@1X+ Qt%JUB€;t 4. z ,$%@}g@M"(ߵ? Ho]EN A77髭 0 *鞑'%l&נ(@A,@}1w9psAi |Kc7uV\ ncU@gq`OU ``HYB R;h K@4D`.@='r6 0)s"5@ @Mfn  ``c @` R)Р@G@f;υ輈`ȥ l衷)KKn荕@蘐ޠ葴 '`ypr@} lvDeGoi^h`WՠaQ ZJb@T@C M'<FN63@?u/x@8@( 1"*F$ = fU ` 4``^ޢ戠߳&`h ê 3 ^,罉@m綴種 0@7pc獱甏 獼 1yp@ryAk@rne/k^odW@]P`W#`J,`PPCk I~`<B 5;/'5(e`.5!'d   ^ ٠L@`zU`ؠ 6J`eЇՕ ĀĠ>#`{`S殸 泂欲`1`@m擪`Br#抢 _@`x}`qv2koc dOh]aVǀZP@T%@I?MUBzF;@?@48 .-`2'h+J @$zߠ V @@ ?`̀pB`}㸠6 g.@ٙ i@Ȥ`ޠ.`_T巑孎` ' > Xx啊勲厼@~' wazSp@s i`l`ce\J_UXN NQGJA2C :l=36J ,/|&(T!@  F  y`; u `D@" v[ە@ܠ`B`Au@{ ¨ 乴@ 'A `t 䞚 䠧@Ӏ@ `E@ s|`~uw o*q @hcj@acsZ \T U`MH O F HA ? At`8 :2, 3@+e-$ &B@u Hܠ  `C@w@,dހ着 @Ey`Gԭ̀Ź`H *`{c㲯㪛`  KE`~}㐲㈶`{'`|N@t_u@m`n fg` @aYAZQRz SKLDE>#@?!7[8U01)@*##<&u Z @``V@*^Ơ7 `o@/ѧ`cߠ˗ O`ⶇ4 i@⩝@0@рh`┠`: ؀n`⇢H yz `rs?klt e(e^`^WX@PЀQEJJz C@Cg;0ՠ.!#C `b 7i`ܢ`@ E@xٶ@ٳ٩! ٦Mٛ ٘`ًٍ#@ـj}roeFbcWT΀J"G9`<`9@.`, !l@y H O#%`ݑڐ@ mؿfش@راI ؤ;ؙؖ،$؉~{|`qm`cn``R@U@R HJE(:7-%)h@o >J۸&@` ׽U`׳ׯ@ץoע+@ח`ה`׊K@ׇ@|yl@o&k@a^B T`P FpC 85 +K' `Y' /p@pK־`ֻF ֱ' ֭ ֣֠ ֖֒ ֈp`ք@z w]@mKi@_\3@R' N@DA `73t)p@%߀JK ` '唠`ap ռݠչ8կK`ի ա ՞ Ք&Րy@Ն`Ղ@yuO`kog`]`Z%PKLB>5&@1f'#= o  @J`~ %Tȓ@ĿԻԷ*ԭnԩԟ Ԝ ԒIԎl`Ԅ`Ԁ׀w%sBie\ XNmJ@@<3I/Z@%!ŀ$ 0 @lrڀ@HH`Ƶ³ӹ# ӵӫӧӝ`ә Ӑkӌ`@ӂ`~ˀuFq6gcZ" V LHx@>@:`1j-N#@E$`@ ``fi`=@ҷDҳҩҥ~ҜҗҎҊUҀ|`sh@o+eՠaXC@TJFm =@8؀/+C!@f @A [ Њ 2`Ѿѵe ѱѧҠѣt њ@ѕ`ьшJ zqm!@c _`VcQHDc;>6@-)9 ` `{`a@Q<׽@Ϊ (мг ЮХСj`И`ГՠЊ`ІA}:x@o@kb]T O FBY`9^ 4+ˀ'09`` Ạ`Ƒ ϴ ϫgϙϐ>`~mu cHYH#>`,# `o F`ۏiζΥDΛ@Ί`΀n@ewSJN@8/$e`@@ݩ ͰͧV`͕Р͌- zq_@UڀDa: );^`5@ ̡̼̲̗`̆\`|k7@afPF=4+@ǀ@}٘W˾o@˭2ˣE˒ ˈvl`[ Q@@`6%xw RN-% @ʸʮҠʝʓʂ`x@gs ]WLMB-1('@ ` ߸Ոē`ɺ_ɩn ɟ6ɎHɄ @s#h W@M<2!h ?@hCȵ@Ȫàșȏ~Ӡtq@c@YH H>-c">@̀`z ǶQǥǛ'NJo^ dՀT8I@9.  Z0`~ޠƱXƦ`Ɩ3`Ƌ@{ pc _U9D :)x`S`-l@Ž`ŲCšŗņ{k `ǠPrE5M`*u(L@# ȷĽĭ`ĢĒmć~wGlU\" Q,@6`%`@  g ^ùAî5Þ`Ó Âwg`\LA1&h`a ?@; ` ¹©`žŽƒqshHX[ M=51"````{`ПR`z) U /s d @XH=-@"[2t` N)`ހeod<`TI`9n -`H@#@0```@ceL:@-ϠߕC9rS<MX zcWDx-`-@ a@ kL S 5 k k @zt[ D"%@ ?@~ ,@jڠL^@4@6@}@s2@[@`<@$@`Q J`@`c@K`-p T@% ` @ r^`TD < @  h@c {b@D,r  @6 |@kS* 5U@ @ȿ4@ty@\)C@%ހ >@`H@@jH`L@3@g ` R` sZ`=;$\ ФYfdK-à xp-`qT`;zL@(`cl@1 e?W ~z D}`@@2`kQ8`$_F%`Lb [s5@ o@ `fˀ-s 'TF 簠<{`G  @nP`5W\+`(d Ohy `u@=<@ 1`Цd/yE`VM `cmA`!mH%`nݠ%N@Lc s6 0w@W/@} 5X@X\+@@?Ц`f9y M`gTAŠ6`%Os6`7\+i`y K ~A|w{%yvYwv:@t\+rpyn k%güd\+`[%T^K%;(*<0?;)?K%?T^`?[%?``?d\+?g?k%?n,?py?r5?t\+?vS?w?yvr`?{%?|ې?~A? W?y???v`?\+?8????$`?s6?O?%?B??@?A?ga?M`??y?f@@?Ц`????π?@? ?\+?^?5X@???}@?@?W5??0}? ? ?s6? ?Lc ?T?%?@??n??H+??!s@?A`??cm??M ?V@?`?I?y?/?d??Ц? 4?=<@?u؀?`?|`?h?O ??? ?(g?\+`? ???5W?nS??`? ?G@?{`?? ?簠? ?TF???*?-s ?fΠ? `?r??@`?s5?@??^ ?Lb ??`??%?_I?$???8?kQ?5?@?`?D}`?~}`??!@??W ???i ? ?1 ?cl@??`?*`?L@?;|`?T`?q@?`? @?-?r@?x?@?-à?K@?d?h ?Y? ?Ф? ??$^ ?=;?Z?s?? ?T? ??g ?3?L@?jJ?@??H??? ??%ހ?C?\)?y?t?5?ȿ?? ??5U?S+?k?}???6?!??,s?D?b?{??c?i??? ?< ?TD ?r_? ?? ??% ?U?-p ?K?c@??@?L?Q ??@?$?<@?[B?s2@? ?}@? ?@?8 ?@?4 ?L^@?j@?@?.@? ?׀@??@? @?%@?D$`?[ ?zv? @?Ȁ?k ?? ?l?5 ?S?kL ???b? ??-?-?Dx?cX?z?? ?@?X?O@??<`?S?r`?9?E??ߗ?Ϡ??-?L;?ce????`?2?#@??H?- ?9n ?I ?T?d=@?o?f@?ހ?`??`?)`?`?N? ?t`?3??"\?-@?=?H?X?d @?s?/??U?*?z?S?П?| ?`?@??@?"`?1`?=5?M ?X[ ?hI?s?ƒr?Ž?ž?©`?¹???`??;? @ ?a ?&i ?1?A@?L?\`?g`?w?Â?Ó ?Þ`?î6?ùA?_?g ???? ? ?%`?6 ?@?Q-`?\" ?lV`?wG?ć?Ēm?Ģ?ĭ`?Ľ?ȷ?? ?#??M ?(?*v@?5M`?E@?Pr?`Ȁ?k ?{?ņ?ŗ?š?ŲC?Ž`?m?-? ?S?`?x`?`?)?:?D ?U:?_?pc?{ ?Ƌ ?Ɩ3`?Ʀ@?ƱX?@?~??`?1??Z? ?.?9?I ?T8?d@?o^ ??NJ?Ǜ(?ǥ?ǶQ? ?{?? ??@?>@?"?-c?>?H?YH?c@?tr ?~Ӡ?ȏ@?ș?ȪĀ?ȵ@??C??h?@? ?i@?!?2?<?M?W@?h?s#?Ʉ ?ɎH?ɟ7@?ɩn ?ɺ``?ē`?Չ?߸??? ?@?'`?1(?B.?LM?]W?gs ?x?ʂ`?ʓ`?ʝ?ʮӀ?ʸ??@?&?-?O@? R?x?%x?6?@`?Q?[ ?l@?v?ˈ?˒ ?ˣF?˭2?˾p?W?ٙ@?}?€?@??ǀ?+ ?4?F>`?P?ag?k7@?|?̆\`?̗ ?̡?̲?̼? ? ?6 ?`?_`???);?:?Da?U ?_@?q?z?͌-?͕Р?ͧW@?Ͱ?€? ?ݩ?@@? ?e?`??/%?8?JO?S?ex`?n@?΀?Ί`?Λ ?ΥD?ζ`?i??ۏ?G ? ?p?`?#?,?> ?H#?Y?cH?u?~m?ϐ?@?ϙ?ϫh?ϴ ?ƒ?`?@????  ?`??9?'0?+ˀ?4 ?9^ ?BY?F?O?T ?]@?b?k?o@?x?}:?ІA`?Њ`?Г?И`?Сj?Х?Ю?г ?м ??(?Ϊ ?׽?<?R`?@??a?{?`???@? `?)9?-?6Π?;>?Dc`?H?Q ?Vc?_?c ?m!?q?z`? ?шK ?ь?ѕ?њ@?ѣt?ѧҠ?ѱ @?ѵe ?Ѿ??2?Њ ?ǀ??\@? ??A??@??f?@?!@?+D ?/?8?=@?Fm?J?T?XC@?a ?eՠ?o+?sh@?|?Ҁ?ҊU?Ҏ?җ@?Ҝ?ҥ?ҩ?ҳ?ҷD???=?i`? ??g?`?? ??`?%`?E? ?#@?-O?1j?:?>@?Hx?L?V `?Z" ?c@?g?q7?uF?~?ӂ`?ӌ`?Ӑk?ә?ӝ`?ӧ`?ӫ?ӵ ?ӹ# ?³?Ƶ?H?H?ݠ?ڀ?r?l?`?@? ? ?1?$ ?!?%?/Z?3I?<?@@?J`?Nm?X ?\ ?e?i?sB?w%?Ԁ?Ԅ`?Ԏl?ԒI?Ԝ?ԟ ?ԩ`?ԭn?Է+@?Ի? ?ȓ@?U?%?? ?~?J`???? o ?=`??#`?'?1g@?5&@?> ?B?L ?PK?Z&?]`?g?ko?uO?y?Ղ?Ն`?Րy?Ք&?՞?ա ?ի?կK`?չ8`?ռݠ?`?p ?b@?`? ?唠??'?!?`? ?K?J??%?)p@?3t?7?A ?D?N?R' ?\3?_?iȠ?mK?w]?z ?ք?ֈp`?֒?֖?֠?֣?֭?ֱ' ?ֻF?־`?ۀ?K?p???p@?`??/`?? `?'?Y`?`?'?+K?5?8?C?Fp?P?T`?^B?a?kנ?o&?yl?|?ׇ?׊K@?ה?ח`?ע+?ץo?ׯ?׳?׽U? ??&@?؀?۸??J?????o ? ?@?i ??)@?-%?7`?:?E(`?HJ?R?U@?`R?cn`?m?q?{|?~?؉?،$?ؖ?ؙ?ؤ< ?اI ?ر@?ش@?ؿf`?m???ڐ?ݑ?%?#???P?H ? ? ?z@?!l@?,`?.`?9?<`?G9?J"?T?W?bd?eF?o@?r?}`?ـj?ً#?ٍ?٘?ٛ ?٦N?٩! ?ٳ ?ٶ@?x?E@? ?@?ܢ?i`?8??@??b???? ?#C?." ?0ՠ?;`?>g?IL?K?V?Y?dw ?g?r `?t??ڂA?ڍ6?ڏӠ?ښ@?ڝe?ڨa?ڪ?ڵ?ڸ?Ì??!@?ӭ?޶??`?K?`? ?c@?v? `? ?@?"@?%@?06?2 ?=?@=?Ka ?M?X?[`?f?h?t! ?v?ہ?ۄ?ۏL?ۑ?ۜ@?۟:`?۪v?۬@?۸ ?ۺ^ ?š`??6?Ձ?@??a???7`? `? @?!?[ ?$@?&?2L?4~?? ?B?Mw?O`?[ ?]4 ?h?j?v8?xW?܃̀?܅?ܑb?ܓ{`?ܞ`?ܡ ?ܬ?ܮ?ܺ#`?ܼ0?Ǹ?`?N`?T ???y?w?? `? ? ?:?,?&Ϡ?(?4e ?6P@?A?C?O ?Qs?]%?_`?j`?l?xP?z(?݅?݇`?ݓ| ?ݕL?ݡ?ݢ?ݮ@?ݰo`?ݼ<?ݾ?Ҡ?˒?h@?$ ????G`?) ?? ?j?T?@?( ?*?6?8`?D?E?Q@?SB`?_@?`?l?ne?zl`?{ ?ވ?މ?ޕ?ޗ ?ޣ-?ޤ?ް`?޲= ?޾Y ?޿Π??` ?ل??? ? ??F???7`?q??+?,Z@?8`?9?F3@?G}?S?U?a^?b?n?p1`?|?}?ߊ ?ߋT?ߗ?ߘ`?ߥL`?ߦv?߲`?ߴ ?x ?`? ?*?ۤ ?ܼ ?: ?M@??ޠ?3??? ??I@???_?ڀ?$*?$ ?*?+k?1?24@?8?8??V ??ŀ?F! ?F ?L ?MV?S@?T@?Z@?Z?aM`?a`?h`?hy?n?oA?u?v ?|y?|Ҡ?D?@??c??,@???q?@?< ?ॅ?@?N@?`??๝?@?h??3?p@??8? ?@?ە@??``? ?+?Z??# ??? ??X`?|`? #? D?? @??ՠ?@? ?&P?&f?-?-.?3?3@?: ?:?A}`?A?HH?HP`?O?O?U ?U ?\?\`?cu?cq?jA ?j: ?q `?q`?w?w?~?~?n`?[@?9?#? ??`?ᙴ ?᠛?|?g ?D?2`? ??@? ?ờ`?”?e?`?-?+? ??־`?@?݆?䍠?N?Y ??$?? ?@??o`??7? R? ?????!?!X?(?( ?/L?. ?6?5`?<@?#@?E?D?L?K?S?Rz ?ZR?YA?a ?` @?g ?f?n@?m`?u`?t_?|N?{'`????㈶`?㐲?}??E`?K ? ?`? ??㪛?㲯?c?|?*`?H@???Ź??̀?ԭ ?G?y??F?@?`?着??d? ?,?w?@?C?`? `? ??H?@??u??&B`?$ ?-?+e?3ۀ?2, ?:?8 ?At?? ?HA`?F ?O?MH ?Uڠ?T ?\`?Z ?ct?a?j@?hc?q ?o*?w`?u?~ ?|`?s? ?@?E? ? ?ڠ?Ӏ?䠧`?䞚 ?t`?`?A`?'?@??`?乴?¨`?{ ?u?A?B?`????ە@??[?w ?" ?D`?????u ?@?;? y? ?F? ?`?@?!?T?(@?&?/|?,?6J@?3?=?:l?C`?A2?J?G?Q?N?XN`?U?_ ?\J?e?c?l?i`?s?p@?zS@?wa?! ?~'??@?厽?勲?啋 ?x?Y ?> ?'@??`? ?À?孎?巑?T?_?`?.`?ޠ??Ȥ??i@?ٙ`?.@?g??6`?㸠??}?Ӏ?B? ??p?̀? ??@?? V ?@??@?ߠ?${@? @?+J ?'h?2@?.-`?8`?4???;@?F?Bz?MV?I??T%`?P@?Z?Vǀ?a ?]?h?dO?oc@?k?v2?q?}?x?Ҁ?_@?抢`?#?r@??B ?擪`?`?m?`?1`?欲??泂?殸 ?S@?{`?#?>? ???Ā?Օ`?Ї?f ?J`?7? ????`??U?{ ?`?L`?٠? ??@? ^?? ? ??'d@?!?.6?(e`?5 ?/'?; ?5?B`?<?I~?Ck ?PQ?J,`?W#?P`?]@?W@?d?^o?k?e/?rn?k@?yB ?r?`?yp??1?獼@? ?甐 ?獱?c?p?7?0@? ??@?種?綴?m?罉`?,?^@??3@?ê ?`?h?ݠ?&?߳ ???ޢ?^?``?4?? ??? ? ?U? ??f@? ?=? ?$@?F?*?"?1?( ?8?/x@??v?63@?FO?<?M(?C ?T?Jb@?Z ?Q ?a ?Wՠ?h?^?oj ?eG?vE?l?} `?r@??yp??'`?葴@?ޠ?蘑?荕@?n ?K?K??)?衷??l?? ???ȥ?輈`?φ?;?f?@?H?Р@?)?R? ???`?Ҁ?c ??`?`?? ?n?g??M? @?"5`?s?)??0? ?6?'r?=?.@?DǠ?4?K`?;h ?R ?B ?Y?H?`?OU ?gq?U@?nc?\ ?uW ?c7?|K?i ?A?ps?9 ?w?1?}?,`?A?(`?נ?&@?l?%??' ?鞑?*? ?0@?髭 ?7?7?B ? ?N?E?^??p ?H? ??????ߵ? ?(? ??"@??M?g@?}?@?% ?$?,? z ?4.`? ?;u ??B?U?J?%?Qu?+ ?X?1?`J?8 ?gĠ?>?oJ ?D&`?v܀?J ?~|?P ?,?U? ?[??ae?ꝭ@?g@?ꥰ@?l`?@?q? ?w.`?p?|J??:@?ϻ ??ر?q??ꎤ?v@??a?? ?@? ?"@?h?ꜗ?#?`?0ܠ? ?@[@??R*?;?g[?O??x?@?\??)g?-?齳?'?|?~^P 2|/D d < u b+%R@a@Ee`겪9`괉/xV& S[괪`= } @N@`WꭼE*ꨙ``@ ꢿ ꟝^,`΅ꕓ@ vu @긭@ ^Q`{@꣹wꞗs}oـl`kڀb g`^ca_j[{yW~v@S\`q`O5`lK g`FcB^->qYY:7T5 O1J -y F$)4 A]`$< @7W`3  .Y ) h@$  *`si  @@ W\``H@C߂C@ ֽYGޠ@Ɏ( TЯ@X` `g鳅 #@骯鹂D`׀A`j髢 锎d 鋰*@锍@`~_U@y`醺u| q }lxh%tQ co_=kZfVU@aQ]VMk@X@HT( DO@@ J;Fd7A2=9 ..8)4%?/y *`N&Q !]`)@ k  nw I  $@` 晀n@ݣ@K@'Ԭ@(0ؗ˴ 8v`¼`?UÀ`F5` 踥M  识Rՠg X ڠH\蘹*a@菜 @e~z`vh@}bqxӠmk`tEhodmk)_f[pbV]@RqXMTe@Is`ODKJ@t`F@;B0 7u =29.u4@)/@%u+o &u"V@`u =@ t`$ @s r@gpPn@8`l⬠!jٕ` h ~`eg @bQ@Š_: 簯`\`$@秙 Y 瞃@U``ӀmQπWM ~ˀBzI~u@z-@qE ulq h@lc`h _<cxZ^`V7@ZdQU٠M2`QOHL D-@H:?C;( ?&6:2"6-1`)@,`$(t #`֠@L @ @ 9@``@%@} @ v u`pb`j O@c@<@]Ͳ٠)V`Ġ O滍`  HzAh`桾 :V昶3@C揯撺`,1@憨`扨@$ }怖 y@| twprknr g i b`e`@^``Y\NTWŀPzS<KNGs J+B E >k@A`9@<5c@80@3 ,[.`'*m#S%!\@JӠJB@ 9:`  (2`)@@! }@lߔ``[֋``K̓€:z`Ʊ)@q彠 h崐 @_ۀ@VoҀN^`ɠ EMŠ<=`倷`債 |2~-w`ys)un p`j l @ega`b\^sXYSUcOPۀJ LS`E`G@AvCC@<> 8m@:3 35/c1#* ,&Z`(!ՠ#P {G`€k = [ 4  @K@*`;` + 裠  ߔو` `ք ~`t`tdjU a`EW䭽6M䤮@ &C䛞䕾9 䒏 䌴.䃪$p@z{vw`qr mnQ`hideB_``Z`\2Vw`WQ S#`MmNHJ DbE?ݠA;X<} 6`72N@3m-.`)D*^$% 9!O/@@`$1@ " @ `@|` um`k`^` `O`ۀV@@@ ƸK1`ƀ㽩A "`㳻㴛6㪱@㫌+㡦} !`㘜n@㏑@_` ㆆP@ }{~Axy@tq u2opkfl$ f gb[c@]@^YPZTˀU@PF PKLpG;`G BCa>0>`9:S5%50@1D`,,'`(5##`'`@ t @i @s^@e`T ΀VIπÀH@=ڸ`92ֲ`ѭ`+ 'ͣȢ`ĕ`⿗` ⻆ⶌ`x`⭁@ jv@[k @M ``>U≷``0 I
{@|!w>wr sn3n@ije(`e}``\ \oWW@SSa N`NJJRE Eˠ@ADCC`?8 ?0`:`:`6,6"`11`-! -@(@(`$$@@ @`q@@ x c@@m@U@@aG@@V 9@`@J+@@? `۹`ۖ`3`ҭ҈`'`ɢ z```l෋^ נ`PɠsB࠻h 4`\&P E@ || x9w ssv@o.n@j@jh`f"`e`aaZ]\ӀXXLT SŠO O>J`JFyF0AA=m=#88 4b 4 /@/@+V+`&Р&`"J!r?@d3@ V'I 7, v `h[M@ ?`1߼߼#߳߳ ߪ ߪ@ߡ€ߠߘߗߏߎ߆ ߅@}`|`tsk{jbp a Yd`X@PXO~GLFp>A=c55@4U`,)`+G#"9, `@ `ڿ@ѳо@ȧǰ޿޾޶޵ ޭ@ެ`ޤx`ޣyޛlޚlޒ`ޑ^@މTވPހIBw=@v5 n1m'e%d\[ S Q`JH@ ?7`6@.`-Ǡ%Ҡ$@ @@`u`gZ@sLg?\1`P #ݹD ݸݰ8`ݯ@ݧ,ݥݞ ݜ ݕݓ`݌݂݊݁ yx`p og@f@^@]U`TL`Kr@CBd:9W 10I`(';z.@n  b V@`J@>` 2ܠ&`̳æ ܻܱܺܲܩܨ}`ܠܟoܗܖb@܎܍T܅ ܄G|@{9s@r+j@i@a@`Xs`WOgMF[`D=O;`4C2+7)@"+  {`m`@RE@п7dz* ۾۽۵۴۬۫`ۣۡۚwۘ`ۑlۏۈ_ۆ@S}vHt m;kd0b [#YRPz I Gl?>_ 65Q-,D$#6(` ``{`oѼcȯ`WڿڸKڶ`گ?ڭڦ3ڤy`ڝ'ڛkڔڒ^`ڋ`ډPڂڀC@x`w5o`n(`f`e]@\ `T@RK IB @97`0.'%~r f ZNy Bk6^@*PC@`5@(`ٺ ٹٱ ٰ `٨ ٦ًٍٟٖٝٔ׀لق {yrp ig`^@Wu`UNi@LyE]@Ck@<5 3 ,*#!@`@@{ m``xSlE`8 T`׾*׷H`׵׮< ׬ ץ0ףל#י@דא׊ ׇڀ׀~ w@un l@ec\ZS Q@JH|A`?o`8@6b/@-T&$G y9m, a  U`I@@=0$@ ``@ ְַֹ֮`֧֥ ֞Ϡ֜~֕`֓q@֌@֊cփցVzxI@qo;hf._z`]! Vn@TMbKDUA;I82=/`)1@& % à@ @@ sf XηKū`> ռ պ0ճձ#`ժը աz՟՘n@ՕՏb ՌՆUՃ}Iz`t=q k1`hb% _YVP MGD`=`;v 4@2h+)[`" NÀ@`3 &  `솠 z@na@UԿIԼԶ=@Գ ԭ1ԪԤ$ԡԛԘ@Ԓ `ԏxԉ@Ԇk}^@vtQmۀkCd`b6`[Y)RPIG`@> 7 4.+%y" ma@ U @H<0`@$ |n aT@ ӿFӸӶ9ӯӭ,@Ӧ΀Ӥӝ@ӛӔ Ӓ`Ӌӈ ӂy`v܀pm gxd^l[U``R`LT I CG@:;7`1/`.r (# %dW J` = /"`٠ ` ִ@ͨĜ`һ@ҸŀҲү@ҩwҦҠk`ҝҗ_@Ҕ@ҎRҋ҅F҂u|:`yhs. p[@j!gNa^@X `U3`NL& EC<: 3`0`*' !ր@ @v @j߆]yQl`E _ Ѿ8ѻQѵ,ѲDѬ @ѩ7`ѣ Ѡ*њїѐюч@х@~{u֠rlʀiڀc ``ZWQNH@E?<@63-t*}$h@!p[c@OV C`H7 ;`*.@!@`@` нзд`ЮȀЫ@Х@ТМЙГАЊ`Ї@Ё~x~utorlgff@cZ@]YZMTMQ?KA`H2B5 ?%@9(6 0- ' #` @@`v\@t@AϽ[Ϸ'`ϫCϥ ϙ*`ϒ`χπt@nb\P J>8n ,&S~@9 eM@4@@ιέΧ`ΛΕΉ`΃e`wqKe _0SoM AW:/>@( % `w`@\ªͼBͰͪ( ͞y`͘ ͌`ͅ zH sh/a`VOC`=`1+oT `:  @jQ̾`̳9@̡̬ ̏̈̚|`vfjdL XR1F`@`4-"t [ B* @x^@˵`˯Cˣ˝)ˑ ˋ xm}f@[e TILB`730% p` V ; !`ܸʟʸ@ʱʦnʟʔUʍ@ʂ=@{p$ih`^ WNK`E39ڠ3@' @`xꯠ_`ؕ@Fzɻ.ɴ``ɩ`ɢFɖɐ+Ʉ~@r@k`Y`NG<`5*h#@Pr7@X`>#` ȽȶȫȤ`ș@ȒȇȀurn@cY@\jQ@JP?'86 -@&@@̀䬠ݲ ғ˗{ ǹ}`ǮbǧcǜIǕHNJ1 ǃ.@x`qe^`S L A`:/(` @uk[ S@:@&!Ƽ ƱƩƞ Ɨ@ƌ׀ƅzsha@V`OmDt=S`2\+9 C`*`@Ϡе@žų@Ŭš`Śf@ŏ}ňK}ev1`kL`dY3QG?`5@-" @ x`^چD@n)ĶU`į`Ĥ<Ĝ Ē#ĊĀ x`mf [TI Bq@7@0W%<v "@^@E`, øø`ñæßÔÍi {O`pi5 ^WLg E`:N@2(5 ˠ@@|b`ͺG»`´-©¢@—o…W }ޠs>`k a%YO G<@5u@*ۀ#Z@ & ` x_ G . mu@nScˀ\9 QJ?8-`% h O7 `݀fL @1 xpfq@^ȀTXL B?:0' (y`_ DTψ` @V%`wbS`>`/M _``.¯{zF`eVAh1 6  sӀ? p|h? X D 4l 8@y ΠG e`j[0F 6 "`P@^@@)m@]@IX9%'@W"`@ a@p/`OK@< '@i}@8 H r b`N>*r v@@A@ ݠ`@uzeoQI@A:- 䴠Ԝ gQ3@x gSC /` `Z,@(zŀj`VFY2b"% 0`ٻ@`R}jm Y9`H5$@@Ks@A o[Ky@7 'D{J `r@r=^N :R)` `k ͽ6`Zt`a)@P<,d@@/c `1 w] cΠS(?.k `:`V !`yfsU`BB@1 O@5@[`b@Ab@2 `h'@AlThBFߠ`| mGF`$S@t `m@K@%* 9 drfL)@:+@rנP*tX`@w`QK@/` Kx!U/ x[|@V4= 2``j}l@[5 /@B [9]|`!:S`@@O `a*@>| deA`? :o׀ftC`g\e@` C hC"K}y@F@oԀ%*@dN/`]r ,`QK z`/@BXo2ǝ}l6 즀[@&T :Sb@@ A :8ftf`\( `hCF`:`%+t SL1 @}l^[@̺ :S`p:g`\~O}hC|I@{%+z xwsv u*t[@s;r`p@o\mj k%+h f d]y`b`_[%+V@R`K'B`2~?k%+?mj?o\?p?r`?s;?t[@?uD?v ?w ?x?z`?{%+?|I?}hC?~h?\?g?:?}?`?" ?:S??[@?k`?}l?? ?1??SY ??t??`?%+?G?F`??hC?@?`?4?\?l?ft???:?A@? ??@?b??@?:S?Z??,?[@? ?즀?6`?}l?ǣ?2?Xv ??H`?/@?z?? ?QK?@??,?r ?d?`?N6@?d??%*?o?? ?F@??}?"Q?hC?$ ? ?C? ??@?e ?\?m`?`?C?ft? ?׀?r ?:?`???eD???d?? ?>?a*@? ?`?R`?@?`?:S`?`$?????|?9` ?[?@?B?2???5 ?[?}l@?n?`? ?2`?4@`?V?|`???[? {?/?U?x!?N ??@? ?/ ?QK@?w?@??`?[?*t?P ?rנ?.`?:?ᗀ??*?L?ri?d???<@?%* ?K`?m@?? ?w?S@?$?F`?mJ@??@?|??ߠ?F?hB???X??@?Al?h*???2 ??@?Ae?b@? ?[`?8`?? P??1`?BB@?U?fs?y?`?# ??W?`?`?:? ?k?.???S* ?cΠ?w^? ?@?1??c ???1 ?@?,e?<?P`?a)@?t?Z??`?8 ?ͽ?l?`?@? ?)?:R?N ?^?r? ??s??`???J ??{?'F@?7 ?Kz?[?o`? ??A??s@?M@???@?$?5?H?Y9`?m?}j?T@?`???ٽ?`? ?0?"&?2b?F[@?V?j?zŀ?Ġ?? ?(?-?Z?b? ??/?Cˠ?S?h@?x ?4?Q?i? ?Ԟ ?䴠?? ?`?-?A<?QI@?ep?uz?@?@??ݠ??@?C ?@?w?*r ?>`?N?b?r ???J@?8 ?~?i??@? ?'?<?K@?`Q`?p/? ?a@???@?@?$??X?%'@?9 ?IX?]?m@???+ ?@?_??`?P@??"?6?F ?[2@?j?f? ??G?@?y ???9? ?4n ?D ?X?h? ?|`?p? ? ?@?Ӏ?u`? ? ?6?1ޠ?Ah?V@?e?zH??|??±@?.??_`? ??/O ?>`?S?b?w?%`? ?V?!?ψ`?V??E? ?_?`?(z@?0' ?:?B??L?TX?^@?fq@?p?x???@??2?@?L??g@??݁?`??7 ?@? O?Р?h?%?-`?8@???J?Q?\9?cˀ?nT@?u@?n????@?.??G ??_?`?x? ?`?'? ?A@??#[?*ۀ?5u?<@?G`?O ?Y?a%?k?s>`?}`?…W ??—o?¢ ?©?´.`?»`?H?ͺ?c ??}`???@? ?? ̀?(5?2?:N@?E ?Lg ?W?^?i5?p?{P@? ?Íj?Ô?ß?æ?ñ@?ø`?ù???,?`?E`??^@? #?v?=`?%?0W?7@?Br ?I ?T?[?f?m?x ?Ā ?Ċۀ?Ē#?Ĝ?Ĥ<?į@?ĶU`?*?n?E?چ?_@?`?y? ? ??`?"?-?5@?? ?G?Q?Y3?d?kL`?v2@?}e?ňL?ŏ}?Śf?š`?Ŭ@?ų@?ž??ж ??`?@??? ?*?? C`?+:?2\?=T@?Dt?On?V`?a?h?s`?z?ƅ?ƌ׀?Ɨ ?ƞ ?Ʃ?Ʊ?Ƽ ?!?'@?:@?A?S?\?k?v`? @???( ?/?:Š?A`?L?S ?^@?e?q?x`?ǃ/?NJ1 ?ǕI?ǜI?ǧc?Ǯb?ǹ~@?{ ?˘?ғ?ݲ?䬠?`?@??? ??&?-@?86??'?JQ`?Q@?\k?cY@?n?ur?Ȁ`?ȇ?Ȓ?ș@?Ȥ@?ȫ?ȶ?Ƚ? ?`?$`??>??Y@?7@?s?P?#?*h?5`?<`?G?N?Y@?`?k?r@?~?Ʉ?ɐ,`?ɖ?ɢF?ɩ`?ɴa@?ɻ.?{?F?ؖ?_`?`?x???@?@? ?'?3?9ڠ?E4`?K`?WN?^ ?ii@?p$?{?ʂ=@?ʍ?ʔU?ʟ`?ʦn?ʱ?ʸ@?@?ʟ??ܸ?" ? ?<?? W?`?q`?% ?0?73?B ?IL?T?[e ?f?m}?x??ˋ?ˑ ?˝*@?ˣ?˯D?˵`?_ ??y???* ??B? ?[?@?"t ?-?4?@?F`?R2?X?dM?j?vg`?|`?̈?̏?̚`?̡ ?̬?̳9@?̾ ?Q??j?? ? ??:? `?U@??+o?1?=@?C`?O?V?a?h/?sـ?zH ?ͅ?͌`?͘`?͞y`?ͪ(?Ͱ?ͼC@?ª?]?@?x@????? ?Ǡ?%?(?/>@?:`?AW?M?So?_1@?e ?qK?w?΃f@?Ή`?Ε?Λ?Χ ?έ?ι?@? ???4??M??e?9?~@?&T`?,?8n?>?J`?P ?\?b?n@?t@?πؠ?χ?ϒ@?ϙ*`?ϥ ?ϫC?Ϸ( ?Ͻ[?B?t@?] ??w?`???@? @?????#?' ?- @?0?6`?9(??%?B5 ?H3?KA`?Q@ ?TM?ZM`?]Y?cZ?ff@?lg?or?uu ?x~?~`?Ё?Ї?Њ`?А?Г?Й ?М?Т`?Х@?ЫĠ?ЮȀ?д?з?н ? ?`?`????? ?@?!`??.?*?;?7 ?I ? C`?V`?O?c?[?!p?$h@?*~ ?-t?3`?6?<???E?H@?N ?Q?W?Z?`͠?c ?i?lʀ?r ?u֠?{`?~?х?ч@?ю?ѐ?ї@?њ?Ѡ*?ѣ ?ѩ7?Ѭ @?ѲE?ѵ,?ѻR@?Ѿ8?_?E ?l?Q?z ?]?߇`?j?蔠?v ??? ??`?? ɠ?@???@?!?'?*?0?3`?: ?<?C@?E?L&?N?U3?X `?^A ?a?gN`?j!?p[?s. ?yh?|:`?҂v ?҅F?ҋ`?ҎR?Ҕ?җ_@?ҝ?Ҡk`?Ҧ@?ҩw?ү?Ҳ?Ҹ?һ@? ?Ĝ`??ͨ??ִ?? ?@?`??٠?"??0? ? =? ?J? ?X??%e@?(# ?.r?1/`?7?:;?@ ?CG?I?LT ?R?U``?[?^l?d@?gx?mπ?p?v?y`?@?ӂ?ӈ?Ӌ?Ӓ?Ӕ ?ӛ?ӝ@?Ӥ`?Ӧ΀?ӭ,?ӯ?Ӷ:?Ӹ?ӿG@? ?T??a? ?o ??|`?$ ??0`? ?<?`?H?? U ??a@?@?m?"٠?%y?+?.?4@?7 ?>?@?G?I?P@?R?Y)?[?b6?d`?kD ?mۀ?tQ`?v?}^??Ԇl ?ԉ@?ԏy`?Ԓ `?Ԙ?ԛ?ԡ?Ԥ$?Ԫ@?ԭ1?Գ?Զ=@?Լ?ԿI?@?U?֠?a??n? ?z@??솠? ??@??&? ?3?`?A ?À? N`?"?)[?+?2i ?4@?;v?=`?D?G?M ?P ?V?Y?_?b% ?h ?k1`?qƀ?t=?z?}I?Ճ@?ՆU?Ռ?Տb ?Օ?՘n@?՟ ?աz?ը?ժ?ձ#?ճ?պ1@?ռ ?>?ū`?K?η?Y@??f??t? ?@?@????? @? ???? % ?&`?)1@?/?2=?8?;I?A?DU?K?Mb?T ?Vn@?]!?_z`?f.?h?o<@?q?xI?z?ցW?փ?֊d@?֌@?֓q?֕`?֜ ?֞Ϡ?֥`?֧?֮?ְ?ַ ?ֹ??@?? `?@??ܠ?$??0?@?=??I@? ?U`? ? a?,?m?: ?y?$G?&?-U?/@?6b`?8@??o?A`?H}@?J?Q?S ?Z?\?c@?e?l?n ?u ?w@?~̀?׀?ׇ?׊ ?א@?ד?י?ל#?ף ?ץ0?׬?׮< ?׵?׷H`?׾+ ?T`?8?`?F?l?S`?x?`??n ??{?@??@?`????@??!?#?*?,?3ـ?5 ?<?>@?E`?H `?O?Q?X ?Z"?a?c.?j*?l:?s7`?uF?|D?~S?؅R ?؇_ ?؎_?ؐk@?ؗm ?ؙw`?ؠz?آ?ة?ث?ز`?ش?ػ?ؽ?İ@?ƴ?ͽ?? ??؀?@??@?`?`???@?? ??) ? ?6?!,?(D?*8?1Q?3E?:^?_???Gm?I ?Pz?R?Y?[#?b?d0?k?m;?t?vH?} ?S?ۆˠ?ۈ_?ۏ ?ۑl?ۘ?ۚw?ۡ@?ۣ?۫?۬?۴`?۵?۽?۾?*?dz?8 ?п?E??S ??`??n@??{??@?????? ?"+?)?+7?2 ?4C?;?=O?D`?F[`?M?Og?W`?Xs`?` ?a@?i?j@?r, ?s@?{9?|@?܄G`?܅ ?܍T?܎?ܖb?ܗ?ܟp ?ܠ?ܨ}?ܩ?ܱ`?ܲ?ܺ?ܻ?æ??̴ ????@?&??2??>`?@?J@??V@? `? b ?!?n ?.?z?'< ?(?0I?1?9W?:?Be?C?Kr?L`?T`?U`?]?^@?f?g@?o@?p ?x?y?݁Ā?݂?݊ ?݌?ݓ?ݕ?ݜ`?ݞ ?ݥ?ݧ,?ݯ?ݰ8`?ݸ`?ݹD ?$?P ?1?\??`?g?M?s?Z??h@?`?v?`??@? @? ?????$`?%Ҡ?-?.`?6ՠ?7`??`?@ ?H?J?Q?S ?[ ?\?d ?e%?m'?n1?v5?w=@?C@?ހI?ވP?މT?ޑ^?ޒ`?ޚl`?ޛl?ޣz?ޤx`?ެ?ޭ@?޵?޶?޾ ?޿?ǰ?ȧ?о?ѳ?`?ڿ@? ??????@???@?? ?,??":@?#?+G?,)`?4U?55@?=c`?>A?Fq@?GL?O?PX?X?Yd`?a?bp ?j ?k{?s?t?|?}`?߅Ѡ?߆ ?ߎ@?ߏ?ߗ ?ߘ?ߠ?ߡ€?ߪ?ߪ ?߳`?߳?߼$ ?߼?2???? ?M??[`??i@? `?w?, ??7?I`??@?'? W ? ??3@?e?@????r??!?"J?&?&Р?+?+V?/`?/@?4`?4b ?8@?8?=#@?=m?A ?A?F1?Fy?J?J`?O>?O ?S?T ?XL?X?\Ӡ?]?aZ?a?e?f"`?jh?j@?n`?o.?sv`?s?w`?x9?|@?|? @?E@?@? ? ?P? ??' ?\??`?5?h ?࠻??B?s???P?`?? ?^?෋???l???`?z?ɢ ??'?҈?ҭ??3?ۖ?۹`??? ?䤀??+?J??`?9?V ???G?a?΀??U`?m@?܀?? c`? x???q?`?? ???$?$?(?(@?-?-! ?1?1?6"?6,?:?:`??0??8 ?C?C?H>?HC?LŠ?L@?QL?QO?U?U?ZZ?ZZ`?^?^ ?ch?cf?g?g?lw?lq`?p?p ?u ?u|?z ?z?~ ?~@?@??ᇡ@?ᇓ?(`?`?ᐯ`?ᐟ ?6`?$?ᙽ?ᙪ?D?0@?ˠ?ᢵ?R?;??@?`?G??̠?o?R`? ??}@?]?@?`?ˋ`?i???ԙ?t`? ??ݧ??.?`???=??@?`?K`??Ҁ??Y?'@???g?2? ? @?v?=? ?À?`?I ? ??!?!T`?&?%?*?*_?/(?.@?3 ?3j?86`?7`?<??|!?{@?
 ?I?0`?`?≷?U?>?`??`?M@??Ԁ?k ?[???v@?j ??`?⭁@?x???ⶌ`?⻇??@?⿗`?ĕ???Ȣ`?ͤ ?'?+`?ѭ`?ֲ?2?9?ڸ`? ?=?H`?À??I?W?΀?@?T?e?@??^?t ?@??i??@? ? t?@?@?????'@??#?#?(5?'`?,@?,?1D?0@?5?5%?:S@?9?>ڠ?>0?Ca?B?G@?G;`?Lp?K?P?PF ?U`?Tˀ?Z?YP?^ ?]@?c?b[?g?f ?l$@?kf?p?o?u3?tq ?y?x?~B?}{?`?@?P?ㆆ?@? ?_?㏑@???n?㘜??!`?}`?㡦??+?㫌@?㪱@??6?㴛 ?㳻?"?A ?㽪?ƀ?1?K?ƹ? ?@?V@??ۀ?O?`?? ?^?k`???m?u?? ?|?@? ????@? ??@?"`?? ? ?1`?$???@?/@? ??!O? 9?%`?$?*^?)D?.?-?3n ?2N@?7?6`?<}@?;X?A??ݠ?E?Db?J@?H?N?Mm?S#?Q ?W ?Vw`?\2?Z`?`?_?eB@?d?i?h?nQ?m?r`?q?wa?v?{?z?p`?$?@?䃪??.??䌴?䒏`?9 ??䕾?䛞?C?&? ?䤮`?M?6 ??䭾?W?E??̀?a?U??@?j?e???t?t???~?ք`?`? `?و`?ߔ ? ?? ?? ?+??? ?;??À?*?K`?@?`?4 ?[`?? @? =?k ?€?@?G`?{ ? ?@?P?# ?!ՠ?( ?&Z`?,@?* ?1#@?/c?5@?3?:3@?8m@?>@?<?CC?Av?Gˀ?E`?LS?J ?P۠?O?Uc?S?Y?X?^t ?\?b ?a`?g@?e?l ?j ?p?n ?u?s)?y?w`?~- ?|2?債`?倷`?=?<???N ?E?@?ɠ?^?N??Ҁ?o ?V??ۀ??_? ?@?崐`?h?? ?彡 ?q?)??Ʊ?z`?:@?? ?̓?K ?`?Ӏ?֋?\???ߔ`?l??`??~?! ?`?@??)????2?(? ? @?:`?9? ?`?B?K ???J?!\??% ?#S?*m?'?.?,[?3@?0@?8?5c@?<?9@?A?>k@?E`?B ?J+ ?Gs ?N?K?S<?Pz?W?T?\N?Y?`׀?^?e`?b`?i`?g ?nr`?k?r`?p?w`?t?| @?y@?怖@?}??$?扨`?憨`?1?,?撺?揯?C?3@??昶?V ?:?`?桾?h?A???{?H?@? ?滍?O???Ġ`?V`?)?٠?ͳ ?]?<?@??c?O???j ?b???p?u??@?v?? ??} ?@?@?%?@??`? 9`? @? ? @?M?@???`??#? ?(t?$?,?)@?1?-?6?2"?:?6??&?;( ?C???H; ?D-@?L`?H?QO?M2`?U?Q?Zd ?V7@?^?Z?cy?_<?h`?c`?l?h@?q@?l?u?qE ?z-`?u@?~?zI?B?~ˀ?`?M?X ?π??Q?m?Ӏ??U`?瞃`? ?`?Y?秙??$?\`?簯? ?:?_??@?Q ?b?`? ?g?e? ??~?h ? ??ٕ?j?!@???l?8??`?n?P ?? ?p?h?? ?r@? ?? @?s? ??$? t`???=?u ??`?"V?u?&? ?+o?%u?/?)?4`?.u?9@?2?=@?7u ?B0`?;?F`?@t`?KJ?D?O?Is`?Te`?M?X?Rq?]?V?b ?[p?f?_?k)?dm?o?h?tE?mk`?x?q?}b@?vh@??z??e? ? ?菜@?a@?+??蘺?\?H?ڠ? ?X ?g`?ՠ??R?识@? ??M ?踥? ?5?F?Š?À?U??? ?¼`?v?8?@?˴?ؘ?0?)?Ԭ@? ?'?K`?ݣ@???n?晀?@?`?`??$? ???I`?? ?w?o ??@? k ??@?)@?]`?! ? ?&Q ?N?*? ?/z ?%??4?)?8?..?=9@?2?A?7?Fd?;?J?@ ?O?D?T(@?H?X?Mk@?]V?Q?a?VU@?f?Z?k@?_=?o ?c?tQ@?h%?x?l?}?q ?`?u|?醺 ?y`?U?~_?@?`?锍`?@?* ?鋰?`??e?锎?`??髢 ?j?A?׀??D?鹂 ?骯?#`??`?鳅?g?`? @?X`?Я`??T@?( ??Ɏ?ޠ`??G?Y? ?ֽ?@? ?C?߂????C?H`?`? ???\`? X?@? `??`?i?s?? *? ?$ ?h@?)`??.Y`? ?3`?W`?7@? @?<@?$?A]?)4 ?F$@?-y ?J`?1?O ?5 ?T?:7?YY ?>q?^-?B?c?F?g?K ?l?O5`?q?S\`?v?W~?{y@?[?j?_?b?c?_?g`?b`?kڀ?l?oـ?~?s?ꞗ?w?꣺ ?{@? ???Q?^? ?긭`?@? @?u?v? ??ꕓ?΅??,?^??꟝?@?ꢿ?`?@??ꨙ`?*?E??ꭼ?W?`?N`?@? `?}?=`?괪`?\?S?& ?V?/y ?괉?9Ҁ?겪?Ee?a@?R`?%?b,? ?u ? ?<?? ?d?@?/D?2} ?P ? ?~^ ?lmms-1.1.3/data/wavetables/sqr.bin000066400000000000000000004777301247673406200170660ustar00rootroot00000000000000??@?????N`??P?x?PϠ?:2PxPπ??d?@?`?`?d?i`d@`d@??7s?@?Z|`?꒜?r ?꒜?Z| ?`?7s? ``7s Z|꒜r ꒜Z|7s`??@?<?`Ǡ? `?,?c?k?c?,ݠ? `?`ǀ?<? ?G``<` @,ckd,݀ ``<@??`? ?݀?@??, ????~?1??1?~??? ??,??`?@?@?` ?,@~11~`@?+@΀ ??À?@?9@???g ?3n`??q?`?Y?8`?O?f?.@?f?O?8`?Y?褀?q`??3n@?g@???9 ?`?À?Á 9`g3n`q@Z8@Of.@fO8`Y褠q@3ng`9ހÀ?? ? ? ?T??j??n?P?B?+@? ;`?HǠ??_`?;`?p@??|?H?à?Ֆ??Ֆ?à?H?|??p@?;`?_@? ?Hǀ? ;?+ ?B?P?n??j ??T??@??i`@@T`inрPB+ ;@H_;@p`|GàՖՖàH|` p ;_@ Hǀ ;+BP`n j`TЀ??? ?Ā?"@?d`?.?~?됸?T@?i? ?Li@? `?5?("`?!`?9n@?<@?G?X?SK@??\? ?c? ?h??k? ?l ? ?k??h? ?c? ?\??SK@?X?G?<`?9n ?!?("@?5? @?Li`??i ?T ?됸?~?.?d@?"?@?@??'`Ġ" d.`됸`T`i`Li  5("!@9n`< G X`SK`\c h轠k l @kh@c@\SK XG<9n!(" 5  Lii`S됹~.d" ㄀@??舷`?`?դ?0@?M?'@??몝 ?@?3?T`?p??]b?3 ?M`?x@?@? ?5q?@?+?& ?#>?.??4?;?;"@?|?@ ? }?E$?0?I??Ll ?@?O?+@?Q0?d?R?6`?S@??Sؠ??S@?6`?R?d?Q0?+`?O?@?Ll??I?0?E#? }?@ ?}?;" ?; ?4??.?#> ?& ?+? ?5q??@?x ?M?3?]b?@?p?T ?3??몝`?Ā?'`?M?0?դ`?ꍠ?舷@?i`舷@դ0 M '몝`3`Tp`]b3@M x`@ @5q+& @#=.Ƞ4;;"@|@@ }E$0I`Ll O+@Q0dR6`S@SؠS@6`RdQ0+`O@LlI0E# }@};";@4 .#>@& + 5r@wM2]c pS3몝`'M0դ@舷??l@? `?@?5y?Ew?S?q`??a?Ơ?°?~;?L?l@? ?_ `?8?S??I??A? ?:3@??3@? ?-@? K ?(?%Q@?#?)?c@?.?s@?1 ??5'??8:??:@?`?=v? Ȁ??`? ?A@?`?C5?p?D`?.?E ?.?F?o?G8??G ??G??G ??G8?o?F?.?E ?.?D`?p?C5??A ? ??@? Ȁ?=v`?`?: ??8:@??5'??1 ?s`?.?c?)ޠ?#?%Q?(? K?-`??3`?`?:3`? ?A??I??S?8@?_ ??l`?L?~;?°??a??q ?S?Ev?5y?? ?l?پ`l` @`5yEw Sqb `±~;@Ll @_ @8SIA @:3 3`- K@(%Q`#)c .s 1@5'8::@@=v `? A@`C5pD`.E .FoG8G GG G8oF.E /D@pC5A ?@ Ƞ=v`: 8:@5'`1s.c)ހ#%P( J-ʀ3@:3 A `I@S8 _ lL@~<°`aqTEv5z@ k??@? ??8`??`??z`??D ?@@?@?K??x?ߠ?l:??b7? ?Y`??R?Q`?L`??G<?( ?Bn? ?>? π?:4 ??6??3Z??0S??-??*? ?@?({`?"?&5?$?$?&?"?(? 8@?*@?w?,J?@?-?I@?/^??0??2@?@?3D??4c`??5l??6`??7??E?8 ?`?8 ?נ?9c?>?9?`?:n?G@?:@?`?;,??;n?c?;?> ?;`?+ ?;?+ ?;`?> ?;?c?;n??;,??:@?G@?:n?`?9?>?9c?נ?8 ?`?8 ?E?7???6`??5l? ?4c`??3D`?@ ?2 ??0??/^?I?-?`?,J`?w?* ? 8`?(?"?&?$ ?$?&5?"?({? ? ?* ??-?`?0T??3Z??6 ??:4`? `?>? `?Bo?(?G<??L?Q?R??Y? `?b8??l:@?߀?x??K? ?@?C? ?z ?@?? ?8??`??5`` 8 ?zD@@ K xl9 b7 Y@ RȠQL@G<(@Bn > :46@3Z`@0S-* ?`({@" &5`$$&"( 8 *`w,J -I /^02`?3D4c5l@6`7?D8 `8@נ9c>9 `:nG@:``;,;nc;> ;`+ ;+ ;`> ;c;n;,:@G@:n`9>9c88 `E 7?6`5l` 4c@ 3D@@ 20/^`I-Ӏ,J`w* 8("&ڠ$`$ˠ&5"({ >*``-@0T 3Z6``:4 @> @Bo 'G=`LPR Y @b8 l:`@x L@@C@z`?8րԀ??:?t?f ?:6 ?=?X?xU@?M@? ?B?'??ş?|`?@?p ?n?g??_ ? ?Y#?1?S?o@?N??JL??Fs?@?B?@??`? @?<? ?:^?H?7?@?5? ?3?@?1??/ ??. ?5?,f?`?*@?O`?)a? `?'?"?&`?#c?%h`?$ ?$5?%@?#?&?!?'? ?(@?`?)??*؀? ?+?F?,?w ?-V??.? ?. ?E?/y??0??0?j@?1G`??1@?Z?2N`??2?m?32??3??3?J?4I?`?4@??4ڀ?p?5?8?5J??5v??5??5??5ʀ??5ր??5ڀ??5ր??5ʀ??5??5??5v??5J?8?5?p?4ڀ??4@?`?4I?J?3??3? ?32?m?2??2N ?Z?1 ??1G`?j`?0??0??/y?E?. ? ?.?@?-V?w@?,?F?+? ?*`??)??( ? ?'`?!?&?#?% ?$5?$?%h?#b?&?"?' ? @?)a?O@?*`?@?,f ?5`?. ??/`??1? ?3??5? ?7 ?H`?:^? ?<?  ??܀??B? ?Ft??JL ?@?N?o ?S?1`?Y#? ?_@??g?n ?p@??|?Ş? ?'?C ? ?M`?xU ?Y?=?:6@?e?u@?:?`;tf@:5=XxUM @B(ş@|@`png`_ Y#@1S`oNJK@FsB`?@ < :^H7`5@3`1`/. `5,è* O)a '"&@#c %h@$`$5%`#&@!' (`@)*ؠ + F,w-W. .@E/y0`0j 1G1@Z`2N`ߠ2m3233I4I@4@4ڀp585J5v555ʀ5ր5ڀ5ր5ʀ555v5J85p4`4`4IJ 33 32m2Ġ2N Z1 1G@j`00 /yF.@.`-Vw`,F+!*@)( '@! &# %$6$%h#b&"`'` )aO * ,f`5@. `/ƀ`13 5 7@H :_ = ?B Ft JL` N@oS1@Y# @_`gnp|Ş`'C` MxTY =`:6eu`:`??聢? ?]?; ?<) ??vq ? ?ꙸ?m@?j?y`?u`?@?V?t``?o?kU??c?P?]@?@?X?`?T ??P ??L? ?I??F@??DP??B `? ??? ?>? ? ? `????B ??DP@??FЀ??I??L??P @??T ?@?X??]ɠ?P?c??kU?o?t`?V`??u@?y?i?m`?ꙸ? ?vp?@?<)?;`?]??聢?j`聣^ ;<)`vq@ ꙸm j y@u Vt`@pkU`@cQ] `X`ӠT `PL@@I@F DO B @? > @?@B DP` FIL@P @T X]PcᕀkUot`V@uyimꙸ` @vp`<(;]聢@??m@??@?;g?;??u ?뿧`?@?0 ?s@?b?X?ˠ??u??l?`?es??_o?!?ZZ??U? ?R5@?m`?N ??K`?S`?IR ?`?F`?`?D?`?B@? ?A???r? ??=? ?<? ?;7?T?9??8??7à??6 ??5 ?`?4 ?|`?4?T ?30@?!?2g??1??0?T@?0A@? ?/??.`?C?.[? ?-?o ?-5??,`??,#? ?+? ?+#??*?}?*3?@?)?c@?)Q??(? ;@?(|? ?(?!`?'?!i@?'S ?!Ƞ?&?"%?&?"?&@@?"?%`?#-?%?#`?%A?#?$`?$"?$?$p ?$V ?$?$ @?%?# ?%M?#z?%`?#5`?% ?"`?&`?" ?&]?"n`?&?"/ ?& ?!?' ?!@?'T?!z?'?!A ?'`?! @?'? Ҡ?(4`? `?(i? i?(@? 7?(@? ?(?Հ?).`??)\?y ?)?L?)@?!?)??* `??*1? ?*X??*~?[@?*`?6?*??*??+ ??++`? ?+J??+h?t?+?X ?+?<?+?"`?+??+??,?@?,`??,4??,H??,\@??,n?t?,?c@?,@?S@?,?D@?,`?6@?,?) ?,`? ?,??,`??,? ?,`??,? ?,`? ?-? ?- `? ?- ?@?-@? ?-? ?-`? ?-? ?-@?@?- ? ?- `? ?-? ?,`? ?,? ?,`? ?,? ?,`? ?,? ?,@?) ?,?6@?,@?D@?,?S@?, ?c@?,?t?,n??,\@??,H??,4? ?,@?@?,`??+??+?"`?+?<?+?X`?+?t?+h??+J?@?++`??+ ??*??*?7?*@?[`?*~`??*X?@?*1??* @??)?!?)@?L?)`?y ?)\??).@?ՠ?(? ?( ? 7?(@? i?(h? ?(4@? ?'`?! `?'@?!A@?'?!z?'T?!`?'?!?&?"/@?&?"n?&]?"@?&@?"?%?#5?%@?#{?%M?#@?%?$ `?$?$V@?$p?$?$"`?$?#?%B?#@?%?#-?%?"נ?&@`?"?&?"% ?& ?!`?'S@?!i ?'?!@?(? ?(}? ; ?(??)R?c ?)@? ?*3?}?*??+#??+? ?,$??,??-5?o?-@??.\?C`?.??/ ??0A?T ?0??1@??2g?!?30`?T?4?| ?4@??5`??6??7??8??9?T?;7@? `?<? ?=? ? ??r??A??B`?@?D ? ?F? ?IR@?S ?K?`?N`?m@?R5??U@?Ԁ?ZZ@?!`?_o?最?es??l??u?`??X@?b?s ?0`? ?뿧?u? ?;?;g? ??m ?qam`;g`;u@뿧@0sb`X`ules _o`!ZYU`R5mNK SIQЀF@DѠB `A ?r ?=` @< ;6T9`8נ7À654|4T`30!2g`1 0T`0A @/ .C.[`-o`-5 ,@,# @+@+# *~@*3)c`)Q( ;(| (!'!i'R!&"%&`"&@ "% #-%`#%A#$@$"$$p@$V$$ %#%N #z%#5@%@"@&"&^"n@&"/&@!`' ! 'T!z`'!A'`! ' Ҡ(4 @(i i(` 6(@ `(`).`)\y)L)`!`) `* `Π*1*X*~[ *`6**+ ++ +J`+ht+ X +<+" ++,@,`,4 ,H,\,o t@,c@,@S@,D ,`6 ,) ,` ,,`, ,`, ,` - - ` - -@ - -` - -@@-  - ` - ,` , ,` , ,@ , ,@) ,6@,@D@,S`, c`,t,n,\@,H,4 ,@`,`+ +"+<+X`+t+h+J@++@ +  * *7@* [`*~`*X@*1`* )ߠ!) L)`y@)\`). ( ( 7 ( i(h (4@ '@! `'!A'`!z'T`!'!&"/`&"n&]"@& "%#5% #{ %M#€%$ $$V`$o$$"@$#Ҡ%B@#%#-`%"׀&@"&"%&@!@'S`!i'! ( (} ;(@Ѐ)R@b)`*4}* +$+ ,$ ,-6n-`.\ C@./`0AS0 1``2g!@30S4 |4`5ɀ67`8 9T ;7` @< = ??s A BߠD`FIRSK@NmR5U`ZZ!@_p`esl u  X cr0뿧u`;`;gm??G@?-?ȿ?;`?;G?s`?uM`?`?S ?룻? ? ?`?끎?, ?vs??m? ?f?c@?` ? ?[?e@?Wc?X?S?@?P~?̀?M@?x?K"? ?H??F@??D?@?CP@?M?A@?Ǡ?@[? #?? @? e?=@? `?< ? ?;`? `?: ??9`??8?Y ?8?$ ?7O??6 ??5?F ?5;? ?4?`?4 ??3q??2 ?2 ?2`??1?2 ?1f@?`?0 ??0~??0@??/?`?/B?Ġ?.ߠ?%`?.`??.$`?݀?-@?5@?-t?`?- ??,`?-`?,@?{`?,3?@?+? ?+?X?+X??+? ?*@?%?*?f?*N@? ?*??)Ҁ? ?)?[?)\@??)#? ?(? ?(@? ;?(~? p?(J? ?(? נ?' ?! ?'?!:?'@?!j?'R?!?'$?!?&@?!@?&`?"!?& ?"M?&q?"x?&G`?"?&?" ?%`?"?% ?#?%`?#D ?%}?#j?%W ?#?%1?#?% `?#?$?#?$ ?$"`?$?$E`?$~@?$g?$\@?$?$:?$?$?$ˠ?# ?$?# ?% ?#?%*?#?%I`?#|`?%g?#^`?%`?#@?%?#$?%`?#`?%?"@?%?"Ϡ?&?"?&.?"?&H?"@?&b?"e`?&|`?"L?&?"2?&?" ?&?"?&?! ?&?!Ҡ?' ?!?'$?!?';`?!?'Q?!x?'g@?!c?'|?!M?'?!9?' ?!$?'?!?'`? ?'? `?' ? @?(? à?(? `?(,? `?(>? ?(O? |`?(a? k?(q? Z?(@? J?(`? :?( ? +?(? ?(? ?(`? ?(??(??(?@?)??)??)!?@?).??):@??)F ??)Q?}?)]?r`?)h?g?)r?]?)}?R?)?I?)???)@?6 ?)`?-@?) ?$?)? ?)? ?)? @?)`??)??)??)`?`?)? ?)? ?)?ހ?) ? ?)`? ?*@?`?*??* ??* ??*?`?*@? ?*@? ?* ??*? ?*!? ?*#?@?*%??*&??*'??*(? ?*)??*) ??*)? ?*(??*'??*&??*%`?`?*#? ?*!? ?*??* ? ?*@? ?*@?`?*??*??* ??*?`?*@? ?)`?@?) ?ހ?)? ?)? ?)?`?)`??)ڠ??)??)@? `?)? ?)?@?)?$?) ?-@?)@?6 ?)@???)?I?)?R?)|?] ?)r?g?)h?r?)\?}?)Q??)F ??):@??)-?@?)!`??)??)`?`?(??(??(? ?(`? ?(? ?(? + ?( ? :?(@? J?(@? Z?(q? k?(`? |?(O? ?(>@? ?(,? ?(`? à?(? ր?'? ?'? ?'@?!?'`?!$?' ?!9 ?'?!M?'|?!c ?'g ?!x?'Q`?!?';@?!?'$?!?' ?!Ҡ?&?! ?&?"?&?"@?&`?"3?&?"L?&|@?"e?&b?"`?&H`?"?&-?"?&?"?%`?"`?%۠?#?%@?#$ ?%?#A?%@?#^?%g?#|?%I@?#?%*?#?% `?#@?$?#@?$ˀ?$?$?$:?$`?$\`?$g?$~`?$E@?$?$"@?$@?#?$ ?#ڠ?% ?#?%1?#?%W@?#j?%}?#D?%?#?%@?"?%?"?&?"?&G?"x@?&r?"M`?&@?"!?&ɀ?! ?&`?!?'$ ?!?'R?!j`?'`?!:?'?! ?'@? ׀?(? ?(J@? p?(~? ;?(`? `?(@??)# ?@?)\`?[?)? `?)Ҡ??*??*N?f?*?%?*`??+??+Y?X?+??+??,3?{ ?,?-@?,Ϡ??-!?@?-t?5 ?-`?`?.$??.?% ?.?Ā?/B ?`@?/??0`?@?0~??0`?@?1f`?1?1 ??2a?2?2`??3q?@?4`?@?4??5<?E?5@?`?6@??7O?#?8 ?X?8??9À??:@? ?;? `?<`? ?=`? e`?? ? #?@\?ǀ?A`?M?CP??D?`?F`??H??K"?x`?M?`?P~??S?X?Wc?e ?[??`@?c ?f??m??vs?+?끎@? ? ?`?룻?S??uM@?s?;G?;?Ⱦ?-?G ?G-@ȿ ; ;Hs@uM S`룻 `끍,@vs` mfc`@[eWcXS`P~@M xK"`H F DCP N A @[ #? e= < ; :9@@8Y@8$@7O65F@5;@443q`22`2`12@1f0`0~`0  /`/A.߀%.@.$@ݠ-5-t- `,@-, {,3 `+`@+Y+X +`* &*`f*N `* )` )[)\)"@( ( ;(~` p(I ( '! '!:' !j'R!'#! &!& ""&"M&q"x&G "&`"@%@"%#%@#D@%}@#j%W#%1`# % @#$# $$"$$E$~ $h$\ $$:$$$#$#% #%*#%I#|@%g#^@%#@%##%#@%" %"π& "`&. "&H" &b"e`&|"K&"2&"&"&@!&!Ҁ'!`'%!';`!'Q!x'g@!b'|!M'!8'@!$'!`'΀ ' @'@ ( À( @(, @(> (P |`(a k`(q Z(` J(` :(@ +( ( (Ϡ(( (@)))!).):`)F@)Q}`)]r`)h g)r])}R) H)?@)`6 )`- ) $) )) @)`)))`) ) )ހ)@ )` *@`** * *`*@ *@ * `* *! *#@*%*&*'*( *)*) *) *(*'*&*%``*# *! **  *@ *@*** *`*@ )@@) ހ) ) ))`)ڠ)Ӡ)@ `) )@)$)-@)@6@)?)I)S)|] )rg)gr)\})Q )F): )-`)!`)`)``(((`(@ ( ( + ( :( J( [(q k(` |(O (>@ (, (@ ( ր' ' '@!'@!$'!9 '`!N'|`!c@'g!x'Q@!'; !'$!' !&`!@&" &"`& "3 &`"L &| "e&b`"&H@"&-"&"%@"%ۀ#% #$ %`#A % #^%g`#|%I #%*#% @#`$#`$@$$$:$@$\$g$~$E $@$" $`#$`#ڀ% #%1#%W`#j`%}#C%#%`"%"&"`&G"x &r "M@&"!&ɠ!&!Ǡ'$@!`'S!j@'!:@'! `' `( `(J p`( ;`(  (`)#@ )\[`) @)**Nf`*%`*Ѐ++Y X++,3{,-,-!  -u 5-ˀ .$.%. /B@` /@0 001f11``2a 123q 44@5< E5`@6`7P#8@X8 9 : ; < =נ e@? #@@\ @AƠMCPD  Fנ`HK#x@M P~S X@Wde[`cf m@vt+끎 @룼 RuMs;G`;Ⱦ-F??9?7?ȧ?; ?;&??u"?>???ꯄ?D ?D?@??v`?֩ ?n`?ބ?f?@?a ?U?\? ?W`??T= ?3?Q`?.?NB?@?Kƀ?*`?I?E`?G?+?E? ?D?w`?B ??A8 ?:??? s?>@? ?=`? ?<? ?;? ?:@?a?:?/`?9;?@?8~??7 ?T?7%@?@?6?`?5?&?5_ ??4@?8?4S? ?3?2?3_??2?`?2@??2@??1?K`?1Q`??0?@?0?^?0C??/ ??/ ?V ?/O?@?/??.?6 ?.s@?|@?..@?@?-@?`?- ?B?-j??--@??,??, ?2 ?,~`?j@?,G ??, ?@?+܀? ?+?<?+w?n?+F??+?`?* ??*@?*?*?V@?*`??*5?@?* ??)`??)?&?) ?N ?)k@?t?)E@?`?)??(??(? ?(? *?(? M`?(n`? o@?(L? ?(+? `?( ? Ѡ?' ? ?'ˠ?!?'?!/?' ?!M?'p ?!k?'R?!?'5`?!?'?! ?&?! ?&?!?&`?"?&`?"/?&?"J ?&u?"d`?&[?"~?&B?"`?&(?"`?&?"?%?"@?%߀?"@?%Ǡ?#?% ?#(`?%?#?`?%?#V ?%k`?#l?%U ?#?%? ?#?%)@?#@?%?#à?$?#ؠ?$?#?$?$?$?$@?$?$*@?$?$> ?$?$Q?$q?$e?$^`?$x?$K@?$?$8?$`?$& ?$?$?$?$?$?#?$?#`?$ ?#?%`?#?%?#?%*`?#?%;?#?%K?#y?%[?#h?%k?#X?%{?#I?%?#9`?%?#*?%`?#?%?# ?%Ȁ?"?%`?"?%?"ߠ?%`?"@?&?" ?&?" ?&?"`?&,@?"?&9?"@?&G@?"~?&T?"q?&a?"d?&n?"W?&{@?"K@?&?">?&@?"2`?&?"& ?&?" ?&?"@?&@?"?&?!?&ۀ?!?&?!`?&?!@?&?!`?'?!?'?!?' ?!`?''?!?'1?!?'<?!?'F?!?'O?!x?'Y?!n`?'c ?!e?'l?![?'u?!R`?'?!I@?'?!@`?'?!7?'`?!/?' ?!&?'?! ?'?!?'?! ?'?!?'? ?'Ҡ? @?'@? ?'? @?' ? ?'@? ?'`? ?'@? ?( ? `?( ? ?(`? @?(? ?( ? ?(% ? ?(+@? ?(1 ? ?(6? ?(<? ?(B? ?(G? ?(L? }?(Q? x?(V? s?([? n?(`@? j ?(d? e?(i`? a@?(m? \?(r? X?(v? T?(y? P?(}? M ?(? I?(? F?(? B?(? ?`?(? <@?( ? 9 ?( ? 6@?(? 3?(? 0?( ? .?(? ,?(? )?(? '?( ? %?( ? #?(? "?(? `?( ? ?(? ?(? @?(?  ?( ? @?(? @?(? ?(? ?(? `?(? ?(? ?(? ?( ? ?(? ?(?  ?(? `?(? ?(? ?(? @?(? @?( ?  ?(? @?(? ?(? ?( ? `?(? "?(? #?(? %?( ? '?(? )?(? ,?(? .?(? 0?(? 3?(? 6@?( ? 9 ?( ? <@?(? ?`?(? B?(? F?(? I?(? M ?(}? P?(y? T?(u? X?(q? ]?(m? a@?(i`? e?(d? j ?(`@? n?([? s?(V? x?(Q? }?(L? ?(G@? ?(A? ?(<? ?(6? ?(1? ?(+@? ?(% ? ?(? ?(? @?(@? ?( ? `?(? ?'@? ?'@? ?'@? ?' ? `?'? ?'@? `?'Ҁ? ?'?!?'?! ?'?!?'?! ?'?!&?'?!/?'`?!7?'?!@?'?!I`?'~?!R?'u?![?'l?!e?'c?!n?'Y?!x ?'O?!?'E?!?';?!?'1?! ?''?!?' ?!?'?!?'?!ʀ?&?!`?&?!?&?!?&`?! ?&?"?&@?"`?&`?"@?&?"&@?&`?"2`?& ?">?&?"K@?&{ ?"X?&n`?"d?&a?"q?&T`?"?&G ?"@?&9?"?&,@?"`?&?"@?&?"@?&`?"@?%@?"?%?"@?%@?"?%`?# ?%`?#?%@?#* ?%?#9?%`?#I ?%{?#Y?%k?#h?%[?#y ?%K`?#?%:?# ?%*@?#?%`?#?%@?# ?$?#ހ?$?# ?$?$?$?$?$?$&@?$@?$8?$?$K`?$w?$^?$d?$q?$Q?$ ?$=?$?$* ?$?$ ?$?$?$ ?#`?$?#`?$?#`?%?#?%)?#`?%?@?#?%U@?#l`?%k?#V?%?#?@?%?#( ?%@?#?%?" ?%ߠ?" ?%?"?&@?"@?&)?" ?&B ?"}?&[?"d ?&u?"J?&?"/?&?"?&ŀ?!?&?!?&?!?'?!?'5?!?'R?!k@?'p@?!M?'@?!/@?'?!?'? @?'@? р?( @? @?(+? ?(L? o ?(n? M@?(? *?(? ?( ??( ?`?) ?@?)E`?t?)k?M?)?&?)??)??* ? ?*5??*`?V ?*?)?*??*@?@?+ ??+F ?n`?+w ?<?+@? ?+ܠ??,@??,G@?j ?,~?2?,@?`?,?`?--??-k?B@?-@? ?-`??..`?|?.s?5?.??/ ??/P?V?/@?@?/`??0C@?^?0? ?0 ?`?1Q?K ?1?@?2`?`?2? ?2?`?3`?1?3@??4S?8`?4`??5_@?&?5?@?6? ?7%`?T?7`??8??9;@?/@?:?a`?:`? ?;? ?< ? @?=? @?>`? r???:`?A8@??B`?w@?D ??E ?+?G@?E@?I?* ?K? ?NC?.?Q?3?T=@?͠?W??\?U@?a ? ?f?ބ?n?֨?v??`?D?D`?ꯄ`???>?u"? ?;&?;`?ȧ?7?9? d`:7Ȩ;;'u# >ꯄDD v@֩`nޅfa U\@W@ T<4 Q /NBрK@*IEG, E`DwB A8:? s@> = < ; `:a:/9:8~@7T7$65&5^ 484S`32 3_2221 K1Q 00_0B@//V@/O`/.@6`.s |`..- -B-j -- ,@,2`,~ j`,F,`+` @+= +vn+E +΀** * *`V*`*5`* ` ) )')N@)k t)E)( (֠ (@ +( M(n o`(L (+ ( ' '`!'!/'!M'p!k'R`!'5@!'!@&`!`&!&@" & "0&"J&u@"d&[`"~ &A"&("&"@%`"%@"`%`# %#(%#?%#V@%k@#l%U#%>#%) #`%#$`#$#$$ $$`$`$*`$`$>@$$Q$q`$e $^@$x $K $$8$$&$$$ $$#$#@$@#%#%#%*#%; #@%K#x%\#h%l#X%|#H%#9@% #)%#%# %Ƞ"%׀"% "߀%" &"&"&"@&,`"&:"&G`"~&T"q&a"d&n"W&{`"K &">&`"2@&"& &" &"@&`"&!&ۀ!&!@&! & !@'!`'!'@!@''!'1!'< !'F !'P!x'Y!n@'c !d'l!['u!R`'!I@'!@@'!7'!.'@!&`'!'!'! '!' 'Ҡ @'` ' @'@ '` '` '` ( ( (` ( ( (%@ (+@ (1 (7 (< `(B (G (L }(Q x(V s([ n(`@ j (d e(i` a@(m \(r X(v T(y P(} M ( I( F( B( ?`( < ( 9 ( 6@( 3( 0( .`( ,( )( '( %( #( "( `( ( ( @(  ( @( @( ( ( `( ( ( ( ( (  ( `( ( ( @( @(  ( @( ( ( `( "( #( %( '( )( ,( .( 0( 3( 6@( 9@( <@( ?`( B(` F( I(` M (} P(y T(u X(q ](m a`(i` e(d j@(` n([` s(V x(Q }(L (G@ (A (<` (6 (1 (+ (% ( ( `(@ ( Ā( @' '@ ' ' `' ' `'Ҁ '!'! '!'!@'@!&'!/ '@!7'!@'!I`'~!R'u!['l`!e 'b!n'Y`!x@'O!'E!';!'1!@''`!'!'!'!ʀ&!`&!&!&@! &"& "&`"`&`"&`&@"2& "?&"K`&{"X &n@"d&a`"q&T`" &G"`&9"&, "&`"`&"@&`"р% "%"`% "%@# %@#% #*@%#9%`#I`%{#Y %k#i%[#y@%K@#%:#`%* #%@# % #@$#ޠ$`#@$Ӡ$ $$ $$&$ $8$$K$w$^$d$q$Q`$@$=$$*$$$$$`# $#@$#@% #%)#@%?`#`%U`#l@%k#U%`#?% #(%`#%"%"%"Ƞ&`"&) "&B`"}&["d&u"I&"/&"&Š!&!&!'!`'5!'R!k 'p`!M`'!/ '!`' '` `( ` (+ `(M o(n M( *`( `(@(@ ) )Et )kM)&`)@)Հ* *6`*aV*)*@*+@+F@n@+w@<+` +,,G`i,~1,@,@---k@B --..{.s5./@/P U//0C`^@0@0@ 1QK12@22@3` 13`4T8@4֠5_`&`5 6@7%T`7̀8@9;`/ : a :נ ; <@ = >Ơ r?`: A8`BwD@E+G`EI *KNC .@Q3T=̀W\`U a f@ބ`n֨v`ҠD`Dꯄ@?u"``;&;ȧ89??0`?>?ȗ ?;`?;`? ?u`?Z???X`?n???̠?v?h@?n??<?g.@?䦠?aV??\l ??X;`?j?T?ɠ?Qw??N@?Y?L;??J ??H??FH?R?D?`?C0?G ?Aր??@???r? ߀?>b? ?=e@? `?? @?(+@? ?(? ?(? @?'? ?'? ?'`? ?' ?!@?' ?! @?'@?!1?'?!A?'} ?!R?'l?!b?'\?!r?'M?!?'=@?!@?'-?!?'?!?'`?!?'`?!?&?!ܠ?& ?!?&Ԁ?!?&`?"?& ?"?& ?"#?&@?"1?&?"? ?& ?"L?&s?"Y?&f`?"g ?&Y@?"t@?&L ?" ?&?`?"?&2?"?&&?" ?&?"?& ?"?&?" ?%?" ?%?" ?%?"?% ?"?%ŀ?#@?%?#?%`?# ?%?#)?%?#4?%?#??%?#J?%v?#U?%l?#``?%a ?#k ?%V?#u?%L?# ?%A?#?%7 ?#?%,?# ?%"?#@?%?#`?%?#@?%?# ?$?#?$ ?#ڠ?$?#@?$?#?$`?#@?$?$?$?$ ?$`?$ ?$@?$`?$?$%`?$?$.`?$ ?$7@?$@?$@ ?$`?$H?$y?$Q?$q?$Z@?$h`?$b?$_?$k`?$W`?$s?$O?$| ?$F?$@?$>`?$?$6@?$?$.?$?$& ?$?$ ?$?$ ?$?$`?$?$?$@?#?$?# ?$Ӡ?#`?$@?#?$?#`?$@?#?$?#Ѡ?$?#@?%@?#?%?#?%?#?%?#?%?#?%#?#?%*?#?%1?#?%8?# ?%?@?#`?%F?#}?%L?#w?%S@?#p`?%Y?#i?%``?#c`?%f?#]?%m ?#V?%s?#P@?%y?#I?% ?#C?%@?#=?%`?#7`?%`?#1`?%?#+`?%?#%?%?#?%`?#?%@?#?% ?#?%?#@?%`?#?% ?"?%?"`?%@?"?%?"`?%@?"?%?"?%?" ?%@?"?%?"Ѡ?%?"̀?% ?"`?&@?"@?&@?" ?& `?" ?&`?" ?&`?" ?& ?"@?& ?"`?&$?"?&)?"?&.`?"@?&3 ?"?&7?"?&<`?"`?&@?"?&E`?"@?&I?"z?&N`?"v`?&R?"r?&W?"m?&[@?"i`?&_?"e@?&c?"a?&h?"\?&l ?"X?&p@?"T?&t@?"P?&x`?"L?&|@?"H?& ?"D?& ?"@?&?"= ?&?"9`?&`?"5?&@?"1?&?".@?&?"*?& ?"'?&?"#?& ?" ?&?"?&?" ?&?"?&?"?& ?" ?&`?" ?&?"?&?"?&?"@?& ?! ?& ?!@?&@?! ?&@?! ?&@?!@?& ?!`?&?!?&?!?&?!?&`?! ?& ?!`?&?!?&?! ?& ?!ڠ?&?!?&@?!Հ?&?!?&@?!Р?&?! ?&?!?&@?!ɀ?&?! ?'?!?' ?!?'@?!?'`?!?' ?!`?' ?!`?' ?!@?'?!@?'?!`?'`?!?'`?!?'@?!?'?!?'?!@?'?!?'@?!?'?!@?'!?!?'# ?! ?'$?!?'& ?! ?''?!?')?! ?'*`?!?'+?!?'- ?!@?'.@?!?'/?!?'0?!?'2?!`?'3?!@?'4@?!@?'5 ?! ?'6@?!@?'7@?!@?'8 ?!`?'9 ?!`?'9?!?':?!?';?!?'<`?! ?'=?!?'=?!?'>`?!@?'??!?'??!?'@ ?!?'@?! ?'A?!?'A?! ?'A?!?'B@?!?'B?!@?'B?!?'C ?!?'C@?!?'C?!`?'C?!@?'C?!@?'C?! ?'C?! ?'C?!@?'C?!@?'C?!`?'C?!?'C@?!?'C ?!?'B?!@?'B?!?'B@?!?'A?!@?'A?!?'A?! ?'@?!?'@ ?!?'??!?'??!@?'>`?!?'=?!?'=?!@?'<`?!?';?!?':?!?'9?!`?'9 ?!`?'8 ?!@?'7@?!@?'6@?! ?'5 ?!@?'4 ?!@?'3?!`?'2?!?'0?!?'/?!?'.@?!@?'- ?!?'+?!?'*`?!@?'(?!?''?! ?'& ?!?'$?! ?'#?!?'!?!`?'?!?' ?!?'?!`?'?! ?'?!?'@?!?'`?!?'`?!`?'?!`?'?!@?' ?!`?' ?!?' ?!?'@?!?' ?!?'?!?'?!@?&?!ɠ?&@?!?&?! ?&?!Р?&?!?&?!ՠ?& ?!?&?!ڠ?& ?! ?&`?!?&?!`?& ?! ?&`?!?&ݠ?!?&?!?&?!?& ?!@?& ?!@?& ?!@?& ?!@?& ?!@?& ?"`?&?"?&?"?&?" ?&`?"@?&?"?&?"?&`?"@?&?"?&?" ?& ?"#?&?"' ?&?"*?&?".@?&?"1?&?"5?&`?"9`?&?"= ?&?"A?&?"D?& ?"H?&| ?"L?&x@?"P?&t ?"T?&p ?"X?&l?"\?&g?"a?&c?"e@?&_?"i?&[@?"m?&W?"r ?&R?"v?&N@?"{?&I?"`?&E@?"?&@?"`?&<@?"?&7?"?&3?"@?&.`?"?&)?"?&$?"?&?"`?&?"@?& ?"@?&@?"@?& @?"@?&@?"@?& ?"`?%?"̠?%?"?%?"?%@?"@?%?"?%?" ?% ?"?%נ?"?% ?"?%̠?" ?%?#?%`?#`?%?# ?%?#?% ?#?%@?#?%`?#%?%?#+?%`?#1?%`?#7?%@?#=?% ?#C?%?#J?%y?#P`?%s`?#V?%m?#] ?%f?#c`?%`@?#i?%Y?#p?%S ?#w ?%L?#}?%E?#`?%? ?# ?%8`?#?%1?#?%*?#?%#?#?%?#?%?#?%?#?%`?# ?% ?#`?$?#?$?# ?$ ?#?$?#?$ ?#?$Ӏ?#@?$?#?$ ?$?$?$?$?$@?$?$@?$?$&@?$?$. ?$?$6`?$`?$>?$ ?$F?$|?$O ?$s?$W?$k@?$`?$b?$h?$Z?$q ?$Q`?$y?$H?$?$@?$`?$7 ?$@?$. ?$ ?$%@?$@?$ ?$`?$?$?$ ?$?$`?$ ?# ?$Ԁ?#?$ ?# ?$?#ڀ?$@?#?$?#?%?#?%?#@?%?# ?%"?#?%-?#?%7@?#`?%A?#?%L ?#u?%V?#k?%a@?#` ?%l ?#U`?%v?#J?%?#??%?#4?%?#)@?%@?#?%?#?%?# ?%Š?"?%@?"?% ?"?%?"?%?"?& ?"?& @?"`?&?"?&& ?"`?&2?"?&??"?&L?"t ?&Y`?"g?&f?"Y?&s?"L`?&@?">?&?"1@?&?"#?&@?"?&`?"?&ƀ?!`?&?!?&@?!`?&?!͠?'?!?'?!?'?!?'.?! ?'=?!?'M@?!q?']?!a?'m ?!Q?'}@?!A`?'?!0?'`?! ?'@?! ?'`? ?'Ѡ? ?'? ?'? ?(? ?(? ?(+? ?(> ? @?(Q@? l ?(d`? X?(x? E@?(? 1@?(? ?( ? ?(??(?ހ?( ? ?)?@?)? ?)5??)K?o?)b?X?)z?A ?)?)?)??)€??)۠?ޠ?)??*??*)@?@?*D ?u ?*_?Y?*{`?=`?*? ?*??* ??*@?`?+?@?+.`??+N`?h`?+n?G`?+@?%?+`?@?+@??+??, ?@?,B?q`?,h?J?,?#@?,??,?`?- ??-6?{?-b@?N@?-? ?-@??-@?@?.? ?.R@?Z?.?%?.@? ?.??/,?|?/g?A ?/?@?/`?`?0$@?@?0g?=?0?@?0 ??1??`?1@??1ݠ??21`?j?2@??2?@?3A`?T?3? ?4 ??4v`??4??5] ?,?5??6[@?(?6? ?7u??8 ?i?8??9Y??:?X?:`? @?;@? ?b ? @??r`?Ā?@@??A֠?F?C0?@?D?Q?FI ?`?H`??J @??L< ?Y@?N??Qw`?ɀ?T ?j`?X;??\l@??aV@?`?g.`?<?n@?h?v@?̠?@??n@?X@??`?Z?u ?@?; ?; ?ȗ???0 ?O`0>ȗ;@;uZ`Xm̡vhn?= g. aU \kX;@jTQvN YL;J HFHR DC0G@A@ @?q ߠ>a =e @$$6 $$-$$&$$$$$$@$$`$`#$ #$#@$`#$#@$`#$#р$ # %`#%#%#%#%#%##%*#%1#%8#%?`#@%F#}%L#v%S`#p@%Y#i%`#c@%f#\%m@#V%s#P %z#I%@#C%`#=%#7@%#1`%#+@%#%`%#`%#%@#% #%# %#%@"%"@%`"%"`%`"%"`% " %`"%"Ѡ%"`% "@&@" &`"& "&"&`" &`" & "`&$"&)"&." &3@"`&7"&<`"@&A"&E`" &J"z&N`"v`&R"q&W "m&[`"i`&_"e &d"`&h "\&l "X&p`"T&t`"P&x`"L&|`"H&@"D& "@&"=&"9@&"5&`"1&". &"*& "'&"#&@" &"& " &"&"`&@" &" &"&"`& "@&@! &`! &@! &@! &@! &@!`&!`&!&!&! &@!`&!&!&@!ڀ&!&@!Հ&!&@!Ѐ&! &!&`!ɀ&! '!' !'@!'`!`' !`' !`' !@'!@'!`'!'!'@!' !'!@'!'@!'!@'!!'# ! '$!'& !''!')! '*`!'+!'- ! '.`!'/!'0!'2!`'3 !@'4@!@'5`! '6@! '7@! '8 !`'9 !`':!':!';!'<`! '= !'=!'>`!@'?!'?!'@ !'@! 'A!'A! 'A!'B@!'B!@'B!'C !'C@!'C!`'C!@'C!@'C! 'C! 'C!@'C!@'C!`'C!'C@!'C !'B!@'B!'B@!'A!@'A!'A! '@!'@ !'?!'?!@'>`!'=!'=!@'<`!';!':!'9!`'9 !`'8 !@'7@!@'6@! '5 !@'4 !@'3!`'2!'0!'/!'.@!@'-!'+!'*`!@'(!''! '& !'$! '#!'!`!`'!' !'!`'! '!' !'`!'`!'`!`'!`' !' !' !'@!' !'! '!@&!ɠ&@!&!@&!&! &!ՠ& ! &!ڠ&!@&`!&!&!@&@!&ݠ!&!&!& !`& !@& !@& !`&!@&"`&"&"&" &@"@&"&"&`"@&"&" &"#&"' &"*&`".`&"2 &"5&@"9&"=@&"A&"E&"H&| "L&x"P&t "T&p "Y&k"]&g"a &c"e`&_"i&[ "m&V"r &R"v&N "{&I"`&E "&@"&< "&7"&3"`&.@" &)"&$"&"&"`&"@&"@& "`& "`&"ǀ%"̠%"%`" % "`%"%"@% "%׀"%"%̀"@%#%@#%#@%#%#%@#%@#%%@#+%`#1%@#7%@#=%#D%#J %y#P%s@#V%l#]@%f#c%` #j%Y#p%S#w@%L`#}%E#%?#@%8@# %1`#%*#%##%#%#%`# %@#@%#ʀ$#$`#@$#$# $#$`#`$# $$$`$$$`$$`$$&`$$.$$6$@$>$$F${$O@$s`$W$k $` $b$h$Y$q@$Q@$y$H$$?$$7$`$.$@$% $`$$$$$ $$@$`#$Ԡ#$@#$#`$`#Р$@#%#%#%#%##%- #%7#@%A#%L@#u`%V#j%a`#`%l@#U@%w#J%#?`%#4@% #) %#%#`%@#%"`%р"%@"% "% "&@"& `"@&"&&`"@&3"&?"&L"s&Y"f&f"Y&t"L@&`">&"1 &"#`&"&"`&Ơ! &!&`!@&!̀'!'!'!`'. !'=!`'M`!q'] !a'm@!Q'}!A@'!0'!'!' ' '` ' ( ( (+ (>  (Q` l(d X(x D( 1 ( (@ `((`(@) ))5 )Ko)bX`)z@@)() ))ހ) * *) *D`u*_Y@*{=@* *@*`* +  +.+Nh +o G@+%+ +`+,`,Bq@,hJ,# ,,- -6 z-b`N--`-..RZ.%../-|/g@// 0$ 0g<0@0@1?`1`121j@22 3AT3 4 4v4@@5]`,`5@`6['67u 8 i8 À9Z@:X`:Р ;` b@ ?r`@AFC1DQFI` HJ `@L<`YN`Qw@T`j@X;@\laV`@g.<n@@gv̠` n`X[ u즀;;Ȗ?@0??-?A`?ȑ?;`?; ?쭀?t?d???I?|?? ?̌`?w ?Q?nU?#?gF??ap??\ ?g@?X[ ?G?T??Q`??N?/`?Le ?@?J5? ?H? ?n@?Fy@?@?D`?`?Ce??B?X ?@???? ?>? ?=? ?<? v ?;? H@?;? ?:Y??9?s?8 ?@?8_ ??7?C?7:?@?6?Q?64@?@?5?D?5F??4ؠ?!?4o@??4 ??3?H?3N??2@?`?2?L`?2P`??2@??1?2`?1n?y`?1)??0??0???0f@?} ?0)??/ ?`?/?*?/?`?/J?@?/ ??. ? ?.?'?.?V ?.X?@?.+??.`?٠?-`? ?-?+?-?R?-^?y?-9 ?`?-@? ?,`? ?,@??, ?*?,?K?,i?l?,I ?`?,)? ?, ?`?+??+Ѐ??+ ??+ ?:?+|?U?+b?p ?+G? ?+.??+??* ??*? ?*??*??*?2?* ?H?*q?^?*[@?t@?*F?`?*1?@?*`??* ??)@?`?)??)`??)`??)?&@?)`?8?)@?J?)q?\ ?)_?m?)N?~?)=??),? ?)??) ??( ?Р?(@?`?(??(`?@?(@? @?(@?  ?(`? +?(? :@?(? H?(u`? V?(g@? d?(Y`? r`?(K? ?(>@? `?(0? ?(#? ?(? ?( ? `?' ? ?'? `?'`? ?'? ?'? ?'?! ?' ?!?'`?!"@?'?!-?'@?!9@?'?!D`?'z?!O?'o?!Z?'d?!e?'Z?!p`?'O ?!{ ?'D?!?':?! ?'/?!?'%`?!?'?!?'?!?'?!?& ?!?&@?!֠?&?!@?&?!?&`?!`?&?!?&À?"?&@?"@?& ?"?&?"!?&?"*`?&?"3`?&?"<@?&@?"D?&{?"M?&s?"V ?&j`?"^?&a?"g ?&Y?"o?&Q ?"w?&H?" ?&@?"@?&8?"`?&0?"?&(?"`?& ?"@?&?" ?&?"?& ?"?&?"@?%?"?%@?"`?%?"?%@?"@?%?"?%Ԁ?"?%@?"@?%?#`?%?# ?%?#?%?#?%?#?%?#%?%?#,`?%?#3@?% ?#:?%`?#@?%?#G?%z?#N ?%s?#T?%l?#[@?%f`?#a?%_?#h@?%Y?#n?%S?#t?%L?#{@?%F?#?%@@?#?%: ?#?%3?# ?%-?# ?%'?#@?%!?#@?%?#@?%?# ?%?# ?% ?#?% ?#?$@?#ɀ?$?#`?$?#?$?#ڠ?$`?#`?$?#?$ ?#`?$֠?#?$ ?#?$ˠ?#?$@?$@?$?$?$?$ ?$ ?$`?$?$?$?$?$`?$! ?$ ?$&@?$?$+?$?$0?$?$5?$?$:?$?$??$?$D?$}?$I?$x?$N?$s?$S?$n?$X?$j?$]@?$e@?$b ?$``?$f?$[?$k?$V?$p`?$R ?$u?$M`?$y?$H?$~@?$D@?$?$??$?$; ?$ ?$6?$?$2?$ ?$-?$?$) ?$?$$?$?$ @?$?$?$@?$`?$?$ ?$?$?$@?$ ?$`?$@?$?$ ?$?#?$ ?#?$@?#?$`?#?$Հ?#`?$ـ?#@?$ݠ?#@?$?# ?$?#@?$?#@?$?#@?$?#`?$?#̀?$`?#ɀ?$@?#?% ?#?%?# ?%?#@?% ?#?%@?#?%?# ?%?#@?%@?#?% ?#?%"?#`?%&@?#?%)?#@?%-`?#?%1?#?%4?#?%8?#?%;?#?%? ?# ?%B?#?%E?#}@?%I`?#y?%L?#v?%P ?#s ?%S`?#o?%V?#l?%Y?#i@?%]@?#f?%`?#b?%c?#_?%g?#\`?%j ?#Y ?%m`?#V?%p?#R?%s?#O?%v?#L?%y?#I`?%|?#F?%?#C`?%?#@`?% ?#=`?%?#:@?%?#7`?%?#4?%?#1?%?#.?%?#+?%?#(?%`?#& ?%@?##@?% ?# `?%?#?%?#?%?#?% ?#`?%?#?%?#?%`?# @?%?# ?%?#?%`?#@?%?#?%À?#?%?"`?%Ƞ?"?%@?"`?%?"?%`?"?%?"?% ?"?%נ?"?%?"?%܀?" ?%?"?%`?"`?%?"?%?"?%`?"`?%?" ?%?"?%@?"Ԁ?%?"@?%?" ?%?"?% ?"ˠ?%@?"ɀ?%?"@?%?" ?&?"?&?"?&?"?& ?"?& ?"?& ?"?& @?"?&@?"?&@?"?&@?"?& ?"?&@?"?& ?"?&?"?&?"?&?" ?& ?"@?&"?"?&$@?"?&& ?"?&'?" ?&)?"`?&+?"?&-@?"?&/?" ?&0?"`?&2`?"?&4 ?" ?&5?"`?&7`?"?&9?" ?&:?"?&< ?"?&=?"`?&?@?"?&@?"@?&B`?"?&C?"@?&E`?"~?&F?"}`?&H`?"{?&I?"z`?&K ?"y?&L?"w?&N?"v ?&O`?"t?&P?"s?&R ?"r ?&S?"p?&T?"o`?&V ?"n@?&W`?"l?&X?"k?&Y?"j`?&[ ?"i ?&\@?"g?&]?"f?&^?"e?&`?"d`?&a?"c@?&b@?"b?&c`?"a?&d`?"_?&e?"^?&f?"]?&g?"\?&h?"[?&i?"Z?&j?"Y?&k?"X?&l?"W?&m?"V?&n?"U?&o?"T?&p?"S?&q`?"S ?&r`?"R ?&s ?"Q`?&t ?"P`?&t?"O?&u?"N?&v?"N?&w@?"M ?&x ?"L?&x?"K?&y?"K?&z@?"J ?&{?"I?&{?"H?&|?"H ?&} ?"G?&}?"F?&~`?"F@?&?"E?&?"E?& ?"D?&?"C?&@?"C@?&?"B?&`?"B`?&?"A?&`?"A@?&?"@?&@?"@?&?"??&@?"??&?"? ?&?">?&@?">`?&?">?& ?"=?&`?"=`?&?"= ?&?"<?&`?"<`?&?"< ?&?";?& ?";?&@?";?&?";@?&?";?&?":?& ?":?&@?":?&`?":?&?":`?&?":@?&?":@?&?": ?&?": ?&?": ?&?": ?&?": ?&?": ?&?": ?&?": ?&?":@?&?":@?&?":`?&?":?&`?":?&@?":?& ?":?&?";?&?";@?&?";?&@?";?& ?"<?&?"< ?&?"<`?&`?"<?&?"= ?&?"=`?&`?"=?& ?">?&?">`?&@?">?&?"? ?&?"??& ?"??&?"@?&@?"@?&?"A`?&`?"A?&?"B`?&`?"B?&?"C`?&@?"D?&?"D?& ?"E?&?"E?&?"F@?&~`?"F?&}?"G?&}?"H ?&|@?"H?&{?"I?&{?"J@?&z@?"K?&y?"K?&x?"L?&x?"M@?&w@?"N?&v?"N?&u?"O?&t?"P?&t ?"Q`?&s ?"R ?&r`?"S ?&q`?"S?&p`?"T?&o?"U?&n?"V?&m?"W?&l?"X?&k?"Y?&j?"Z?&i?"[?&h?"\?&g?"]?&f?"^?&e?"_?&d`?"a?&c`?"b ?&b ?"c@?&a?"d`?&_?"e?&^?"f?&]?"h?&\@?"i@?&[ ?"j`?&Y?"k?&X?"l?&W`?"n@?&V ?"o?&T?"p?&S`?"r ?&R?"s?&P?"t?&O`?"v ?&N?"w?&L?"y?&K ?"z?&I?"{?&H`?"}`?&F?"~?&E`?"@?&C?"?&B`?"@?&@?"?&?@?"`?&=?"?&<?"?&:?"@?&9?"?&7`?"?&5?" ?&4?"?&2`?"?&0?"@?&.?"?&-@?"?&+?"`?&)?" ?&'?"?&&?"?&$@?"?&"`?"`?& ?"@?&?" ?&?"?&?"?&?"?&?"?& ?"?& ?"?&@?"?&@?"?& @?"?& ?"?& ?"?&?"?&?"?&?" ?&?"@?%?"`?%?"ɠ?%@?"?%?"?%?" ?%?"`?%`?"Ԡ?% ?"?%?" ?%?"`?%@?"?%?" ?%?"`?%@?"?%?"@?%܀?"?%?"?%נ?"?% ?"?%Ҡ?"?% ?"?%͠?"`?%@?"?%Ƞ?"?%?# ?%À?#?%?#`?%@?#?%?# ?%?# @?%@?#?%?#?%?#`?% ?# ?%`?#?%?#?%?# `?%?##@?%@?#& ?%@?#(?%?#+?%?#.?%?#1?%?#4?%?#7?%?#:?%?#=`?%?#@?%?#C?%?#F?%|?#I?%y?#L?%v?#O?%s?#R?%p`?#V ?%m@?#Y@?%j?#\?%f?#_?%c?#b?%``?#f?%] ?#i`?%Y?#l?%V?#o?%S ?#s@?%P?#v?%L?#z?%I@?#}`?%E?#?%B@?#@?%>?#?%;`?# ?%7?#?%4`?#@?%0?#?%-`?#`?%)?#?%& ?#?%"?# ?%?#?%@?#`?%?#@?%?#?% ?#?% @?#`?%?#@?%?#?%?#?$?#ɠ?$@?#͠?$`?#р?$?#`?$?#`?$?#`?$?#@?$?#`?$݀?#`?$`?#?$`?#?$ ?#?$ ?#?$?#?$?$@?$?$`?$@?$ ?$ ?$?$?$@?$`?$?$ ?$?$?$ `?$`?$$?$?$)@?$`?$-?$?$2 ?$?$6?$?$;@?$`?$??$?$D`?$~ ?$I?$y?$M?$t?$R@?$p@?$W?$k?$[?$f?$`?$b?$e`?$] ?$j ?$X`?$o?$S`?$s?$N?$x?$I?$}?$D?$?$??$?$:?$?$5?$?$0`?$?$+`?$ ?$& ?$@?$!?$?$?$?$?$?$@?$`?$ ?$?$?$?$ ?$`?#?$?#`?$`?#?$?#@?$`?#?$?#@?$?#ڀ?$ ?#?$?#@?$?#`?$`?#à?%@?#?% ?#?%?#?%?# ?%?# ?%!?# ?%'?#?%-?#?%4?#?%:@?#?%@`?#`?%F?#{ ?%M?#t?%S`?#n`?%Y?#h ?%`?#a?%f?#[ ?%m ?#T?%s?#N?%z@?#G@?%?#@?%?#9?%@?#3 ?%@?#,@?%?#%`?%?#?%?#?%?#?%?# ?%?#@?%@?"?%̀?"?%?"?% ?" ?%?"?%?"@?%`?"?%?" ?&?"?& @?"?&?"?&?" ?& ?"@?&(?" ?&0?"@?&8?" ?&@?"?&I?"w?&Q`?"o`?&Y?"g?&b ?"^?&j?"V?&s ?"M`?&{?"D?&`?"<?&`?"3@?& ?"*@?& ?"!@?&?"@?&@?"?&`?"?&?!?&?! ?&ր?!?& ?!?&?!`?&`?!̠?&@?!?' ?!?' ?!?'@?!?'%?!@?'/?!?':@?!?'D?!z?'O@?!p ?'Z ?!e`?'d?!Z`?'p?!O?'{?!D@?'@?!9 ?'?!-?'?!" ?'?!?'@?! ?' ? ?' ? ?' ? ?'? ?'? ?'? @?( ? `?(? `?(#? `?(1 ? ?(>? ?(K? r ?(Y? d?(g`? V`?(u? H`?(? :?( ? +?(? ?(`? ?(`??(̀??(? ?(?Ѐ?(@??) `?`?)??)- ?`?)=?~?)N?m`?)`@?\?)q?J`?)?8`?)?& ?)??)??)̀??)?@?)`?ƀ?*`??*??*1 ?@?*F@?t ?*[?^?*q@?H?*@?2`?*??*??* ??*??*@?`?+?`?+. ??+H?p?+b ?U`?+}?:`?+@??+@??+Р??+? ?, ??,*@?@?,I`?k?,i@?K`?,?*?,@??,̀??,?€?-`? ?-9@?x?-_?R?-?+@?-??-ր?ـ?.??.+? ?.X ?V?.?'?.??.`??/@??/J?_?/?)?/? ?/@??0)?}?0f`???0??0??1) ?y ?1n?2 ?1 ??2`??2P?L ?2?@?2`??3N?H?3??4 ? ?4o?!@?4??5G?D?5? ?64`?Q`?6@? ?7;?C?7 ??8_`? ?8?s`?9?Š?:Z@? ?;? H?; ? u?<? ?=? `?>? ???@?@ ?W?B`??Cf ?@?D? ?Fy?n?H?@??J5??Le@?/@?N`??Q?`?T ?G?X[@?g?\??aq??gF?#?nU?Q`?w ?̌@?`?`?|?H?? ?d?t??;?;ǀ?ȑ@?A?,?^M`-@A ȑ;@;@`td@I |̌w `QnU$gF` ap \g`XZHTQ@@N/Le`J5@H>n`Fy D@CeB X@@?@ > = < v@; H`;` `:Y9s88_7D 7:΀6Q63΀5`E5F4`!4o 4 3`I 3N@ 22`L2P  2121ny1(0 0?0f}`0)//@*@/`@/J`/ .`.(.V.W.+@@.@- @-@+-R-^y@-8- , `,  ,*,K,hl ,I,), @Ȁ++`+ +:+|U+ap`+G@+-+*@*@**`*2*I*p^*[ t*E*0`*@*)ڠ) )  )@)&)@8) J)q`\`)_m)N~)=),)@) (( (ܠ (@`( ( @(@ ,( :(@ H(u V(g d(Y@ r(K (> (0 (# ( ( ' ' ڠ' ' ' '! '!'@!"'!.' !9`'!D'z!O'o!Z'd!e'Y!p'O!{@'D`!'9!@'/!'%!'!'! '!&!&!&@!&ߠ!& !&̠!&@"@&"`&"&"!&"*&"3&"<`& "E &{`"M&r"V&j@"_&a"g`&Y`"o&Q"x&H"@&@"`&8`"&0@"&(`"& `"&"`&"&"&@"`%"% "ր%" % "`%۠"%`" % "`%#%# %#%#%#%#%%#,%#3`%#: %@#@%#G%y#N@%s@#T%l#[`%f@#a%_#h`%Y@#n%R#u %L#{`%F`#%@#%9# %3#@%-#@%'#`%!#%`#`%#`%#@% # %#$#ɠ$`#π$# $#$@#$#$#$ր# $#$ˀ#$ $$$$`$ @$$$$$`$$ $!@$$&$$+$$0$$5$$:$$?$$D$}$I$x$N$s$S$n$X$i$]`$e$b@$`@$g $[$k$V$p$R$u@$M@$y$H$~`$D $ $?$$:$@$6`$$1$@$-`$$)$ $$$$ $$$`$@$$$$$`$ $$ $$$#$@#$`#`$р#`$ՠ# $# $# $# $# $# $# $#@$#`$#`$`#Š%@#%#%# % #`%`#% #%#@%`#% #%"#@%&`#%*# %-#%1 #%4#`%8 #%;#%? #%B#%F#} %I`#y%L#v`%P #s%S#o%V#l`%Z #i %]@#e%`#b%c#_`%g#\@%j@#Y%m#U%p#R%s#O%v#L%y#I`%}#F`% #C@% #@@% #=@% #:@% #7`% #4`%#1`%#.%#+%#(%#%%`## %@# @% #`%#%#%@#@%#%#%`# % # `%#%`# % #%à#%@"`%"%`"@%"%`"@%"%`"@%"% "%ܠ"%"%`"@%"%"ݠ%"@%"% "֠%`"`%"@%"%"%@"ˠ%"`%" %"&"&"& "& "& @"& `"& `"&`"&`"&@"&@"&@"&@"& "&"&" & "@&""`&$`"&& "&'"&)"@&+"&-`"&/" &0"`&2"&4 "&5"`&7`"&9 " &:"&< "&="@&?`"&@"@&B`"&D" &E"~&G"} &H`"{&I"z`&K@"x&L"w&N "v&O"t&P"s`&R "r&S"p&T"o`&V "n &W"l&X"k&Y"j@&[@"i &\"g&]"f&^"e`&`"d`&a "c &b@"b&c`"a&d"_&e"^&f"]&g"\&h"[&i"Z&j"Y&k"X&l"W&m"V&n"U&o"T&p"S&q"R&r`"R &s@"Q &t "P`&t"O&u"N&v"N&w@"M &x "L&x"K&y"K&z@"J &{ "I&{"H&|"H &} "G&}"F&~`"F@&"E&"E&@"D`&"C&@"C@&"B&`"B`&"A&`"A@&"@&@"@@&"?&@"?&"? &">&@">@&">& "=&`"=`&"<&"<&`"<`&"< &";& ";&@";&";@&";&":& ":&@":&`":&":`&":@&":@&": &": &": &": &": &": &": &": &":@&":@&":`&":&`":&@":& ":&";&";@&";&@";& "<&"< &"<`&`"<&"= &"=`&`"=&">&">`&@">&"? &"?& "@&"@&@"@&"A`&`"A&"B`&@"B&"C`&@"D&"D& "E&"E&~"F@&~`"F&}"G&}"H &|@"H&{"I&{"J@&z@"K&y"K&x"L&x"M@&w "N &v"N&u"O&t"P&s"Q`&s "R@&r "S &q`"T&p`"T&o"U&n"V&m"W&l"X&k"Y&j"Z&i"[&h"\&g"]&f"^&e"_&d`"a &c`"b &b "c@&a"d&_"e&^"f&]"h&\@"i@&[ "j`&Y"k&X"m&W`"n@&V"o&T"p&S`"r &R"s&P"t&O`"v@&M"w&L"y&K "z&I"|&H@"}`&F"~&E@"@&C"&B@"`&@"&? "&="&<"&:`"@&8"&7 "&5" &4"&2@"&0"@&."&- "&+@"&)"@&'"&&"&$ "&"`"`& "@&" &"&"&"&"&"& "& "& "& "& "& "&"&" &" &"@%"`%`"ɠ% "%"%"@%"Ҁ%@"Ԡ% "%"@%"ۀ%@"%" %"%@"%"@%`"%" %׀"%"%Ҡ"%"%͠"%" %Ȁ"%#@%`#%#`% # %# %# `% #%`#%#%# %`#%#%# %##`% #&@%@#)%#+%#.%#1%#4%#7%#:%#=%#@%#C%#F%|#I%y#L%v#O%s#S%p`#V %m #Y`%j#\%f#_%c#c%`@#f %]#i`%Y#l%V`#p%S #s`%O#v%L`#z %I#}%E#%B #`%>#%;@#@%7#%4@#`%0#%-@#%)#%& #%"#@%#% #%`#`%#%#% #%`#`%# %#$#$ #$@#Ѡ$@#Հ$`#ـ$`#݀$`#`$`#$`#$@#$@#$#$#$#@$Ġ$`$$$ $ $$$$`$@$$$ $$ $@$$$$)`$@$-$$2@$`$6$$;`$@$?$$D$~$I $y$M$t$R`$p $W $k`$[$f$`$a$e$]$j`$X $o $S@$t$N`$x$I$}$D$$?$$:$$5`$$0@$ $+ $@$&$`$ $$$$`$$ $$ $$`$ $$ƀ#$#@$р#$# $܀#$#$#`$`#$ #$#@$#À%`#% #% #%#%#%!#%(#%.#%4 #%:`#`%@# %F#{%M #t%S#n@%Y#g%`@#a%f#[%m@#T`%s#M%z`#G % #@%#9%#3%`#, %@#%@% #`%#`%#`% # % #%`"%͠"%"@%@"%"ݠ%"%"Π% "&"`& `"& "&"& "&("&0" &8"&A"&I@"w&Q"o@&Y"f&b@"^`&j"U&s@"M@&{"D&";&"3 &`"* &@"! &@" &`"&"&!`& !&֠!&@!&!@&!̀&`! '`!'`!'!`'%! '0!':`!`'D!z'O!p'Z@!e@'e !Z@'p !O@'{ !D '`!8'!-'@!"'!@'`! '@ '@ '؀ `' ' ͠' ( @ @( @($ (1@ (> (L r(Y d (g V@(u H@( 9(@ +`( ( ((( (`(`) @))-` )>~@)Om )``[)qJ )8@)&) ))) )@*@**1*F`t*[^`*q`H*2@*`*@*@* Ԡ*`@+ @+.@+H o+b@U@+} :@++``++ , ,*`,Ik,i`K@,*@,`,͠,@--9x-_`R`- + --@..,.X`U.'. .ƀ/`/K_/)//@0*|0f?@0@01)@y1o21``22PL223OH`3@4 4o! 45G@D564Q@67; C7ɀ`8_8s@9@ŀ:Z` ; G;` u< = > `? @ҀWB Cf@DFymH?J6~Le/N؀Q T`G`X[f\aq 䊠gG#`nV Qw ̌@} H@et`;;ȑ A,??*?C@?ȍ@?;?;@??t ?k? ?$?=?됇@?? @?~?w?A@?ne`??gX?w`?a?̀?\?P?Xq?.?T@??Q?y?N?`?L?_?JT?o?H`?K?F?`?E??C?@?B5?.?@?[??? r@?>? t`?= ? d?<? C`?<? ?;L? ?:??9 ?: ?97@? ?8?t?8`?@?7y??6?`?6u?`?5?@?5?n?5 ?ؠ?4?=?4T?`?3@??3?S@?3E`??2?@?2?G@?2V`? ?2 ?@?1@??1 ?b`?1@??1??0Ā??0?V`?0P?@?0?`?/??/@?+@?/?\@?/O@??/ `??.??.??.`?< ?.r?e?.J??.#@?`?- ? ?-??-?!`?-?D?-n`?e?-L??-,`??- ?`?,??,`??,? ?, ?<?,y?X`?,]?s?,B?@?,(@?@?,??+@?ڀ?+ܠ??+Ā? ?+?" ?+?9?+@?O`?+i?e`?+S@?{?+=??+)??+? ?+`??*??*`??*@??*??*`?+@?*@?= ?*}?N?*l ?_?*[ ?p?*J@?`?*9??*)??*??* ?`?)?Р?)@??)@??)̀?@?) ? ?)??)?'?)?5?) ?C?)y?P`?)l?]?)_?j`?)R?w@?)E??)9`?@?)-??) ??)??) ?@?(??(?@?(??(`??(@??(`? ?(? @?(? ?(? #@?( ? -?(? 7?(? A?(|? K?(r? U?(i? _@?(_`? h?(U? r`?(L`? {?(C ? ?(9? ?(0? ?('? @?(? ?(? ?( `? `?(? ?'@? ˀ?'? ?'? ?'@? `?'? ?'? ?'? `?' ?!`?'@?! ?'`?!?'?!?' ?!#?'?!*?'@?!1?'?!9@?'?!@?'`?!G?'x ?!N?'q?!U?'j?!]?'c?!c?'\ ?!j?'U`?!q?'N?!x`?'G?!?'A@?!?':?!@?'4?!?'-?! ?'' ?!?' ?!?'?! ?'@?!`?' ?!?'?!?'?!?&?!?&?!?&?!?&?!܀?& ?!`?&@?! ?&؀?!?&?!?& ?! ?&ǀ?!?&?"`?&`?" ?&?"@?&?"?&?" ?&?"?&`?"$?&?"*?&?"/@?&?"4`?&?"9?&`?">?&@?"C?&}@?"H?&x ?"M?&s@?"R?&n@?"W?&i`?"\?&d`?"a?&_?"f`?&Z?"k ?&V ?"o?&Q@?"t?&L?"y@?&G?"~?&C ?"?&>?" ?&:?"?&5?" ?&1?"?&,?"@?&(?"?&#?" ?& ?"?&?"?&?"@?& ?"?& ?"?& ?"?&`?"@?&?"`?%?"Ƞ?%?"?%?"?%?"?%`?" ?%`?" ?%@?" ?%`?" ?%@?" ?%`?" ?%Ԁ?"?%`?"?%̠?"?%?"?%?#?%?#@?%@?#?%?# ?%?#?%?#`?%@?#?%?#?%?#?%@?#" ?%?#%?%?#)@?%`?#,?%?#0`?%@?#4 ?%?#7?%@?#; ?%?#>?%@?#B?%?#E?%|`?#H?%x?#L`?%u?#O?%r ?#S ?%n?#V?%k`?#Y?%h ?#] ?%d?#`?%a`?#c?%^ ?#g?%Z?#j@?%W?#m?%T`?#p?%Q ?#s?%M?#w ?%J?#z@?%G?#}?%D`?#?%A`?#?%>@?#?%; ?#?%8?#?%4?# ?%1?# ?%.?#@?%+?# ?%(?#@?%%?#@?%"?#@?%?#@?%?# ?%?#?%?#?%?#?% ?#?% ?#?% `?#?%?#`?%?#@?%?# ?%?#?$ ?#?$`?#ʀ?$?#@?$?#?$ ?#?$@?#Հ?$?#@?$?#?$ ?#ݠ?$?#`?$?#?$?#?$܀?#`?$?#?$ ?#?$Ԁ?#@?$?#?$@?#?$?# ?$ ?#?$Ǡ?#@?$?#?$`?$@?$?$?$?$`?$?$ ?$?$ `?$?$?$?$`?$?$?$?$ ?$?$?$?$?$ ?$?$?$?$@?$"`?$?$$?$?$'?$ ?$)?$?$+?$`?$.@?$ ?$0?$?$2?$`?$5 ?$ ?$7`?$?$9?$?$< ?$@?$>@?$?$@?$?$B?$?$E ?$} ?$G`?${?$I?$x?$K?$v?$N ?$t@?$P@?$r ?$R`?$p?$T?$m?$V?$k?$Y?$i`?$[ ?$g ?$]`?$e?$_?$c?$a?$`?$c?$^?$e?$\?$h?$Z?$j?$X`?$l ?$V@?$n@?$T ?$p`?$R ?$r`?$P ?$t`?$M?$v`?$K?$x?$I?$z?$G?$|?$E?$~?$C?$?$A?$?$??$?$=?$?$;?$?$:?$?$7?$?$5?$?$4?$`?$2 ?$`?$0 ?$@?$.@?$ ?$,`?$ ?$*`?$ ?$(?$?$&?$?$$?$?$"?$?$!?$`?$ ?$@?$@?$ ?$`?$?$?$?$?$?$?$?$?$`?$@?$ ?$`?$?$?$?$ ?$?$ ?$@?$ @?$ ?$?$?$?$?$?$`?$@?$ ?$?$?#?$ŀ?# ?$@?#`?$?#?$?#?$`?#@?$ ?#`?$?#?$р?#?$ ?#?$?#?$ր?# ?$ ?#?$?#?$`?#@?$ ?#?$?#?$`?#`?$?#?$?# ?$@?#݀?$?#?$`?#@?$?#?$?# ?$ ?#Հ?$?#?$@?#`?$?#?$@?#@?$?#?$`?#`?$?#?$?#@?$?#?$?#@?$?#?$?#@?%?#?%`?#`?%?#?%`?#`?%?#?%`?#`?% ?#?% @?#?% ?# ?%?#?%?#@?%?#?%`?#`?%?#?%@?#?%?#@?%?#?%`?#`?%?#?% ?#?%`?#`?%?#?% @?#?%!?#@?%#?#?%$ ?#?%%?#@?%&?#?%(@?#?%)?#`?%*?#?%, ?#?%-?#`?%.?#?%0?#?%1@?#?%2?#@?%3?#?%5 ?#?%6`?#?%7?# ?%8?#?%: ?#?%;`?#?%<?#@?%=?# ?%??#?%@@?#?%A?#`?%B?#@?%C?#?%E ?#}?%F@?#|?%G`?#{?%H?#z@?%I?#y?%J?#x?%L ?#v?%M@?#u?%N`?#t?%O?#s`?%P?#r ?%Q?#q ?%R?#p?%T ?#n?%U ?#m?%V@?#l?%W`?#k?%X?#j?%Y?#i`?%Z?#h@?%[?#g@?%\?#f ?%^?#e ?%_?#d?%`?#b?%a?#a?%b ?#`?%c@?#_?%d@?#^?%e@?#]?%f`?#\?%g@?#[?%h`?#Z?%i`?#Y?%j`?#X?%k`?#W?%l`?#V?%m`?#U?%n`?#T?%o`?#S?%p@?#R?%q@?#Q?%r`?#P?%s@?#O?%t@?#N?%u ?#M?%v ?#L?%w?#L?%x?#K?%y?#J ?%y?#I ?%z?#H ?%{?#G`?%|?#F`?%}?#E?%~`?#D?%@?#C?%@?#B?%?#B?%?#A?%?#@@?%?#?@?%?#>?%`?#=?%@?#<?% ?#;?%?#; ?%?#:@?%?#9`?%?#8?%@?#7?% ?#6?%?#6 ?%?#5@?%?#4?%`?#3?% ?#2?%?#2?%?#1`?%?#0?%@?#/?% ?#/?%?#.@?%?#-?%`?#,?% ?#,?%?#+ ?%?#*?%`?#)?%?#)?%?#(`?%?#'?% ?#&?%?#& ?%?#%?%`?#$?%?#$?%?##`?%?#"?% ?#"?%?#!@?%?# ?%@?# ?%?#@?%`?#?% ?# ?%?#`?%?#?% ?#?%?#?%`?#?%?# ?%?#?%@?#?%?#`?%`?#?%?# ?%?#?%@?#?%?#`?%`?#?%?#@?%?#?% ?# ?%?#?%@?#?%?#`?%`?#?%?#@?%`?#?%?#@?%?#?%?#@?%?# ?%?# @?%?# ?%?# ?%?# ?%?# ?%?# ?% ?# @?%?# ?%?# @?%`?#?%?#`?%`?#?%?#`?%@?#?%?#?%@?#?%?#?% ?#@?%?#?%?#@?%@?#?%?#?%@?# ?%?#?%?#@?%?#?%?#?% ?# ?%€?#?%?#`?%`?#?%à?"?%?"@?%`?"?%Ġ?"?% ?"@?%ŀ?"?%?"?% ?" ?%`?"?%?"?% ?" ?%`?"?%?"?%?"@?%`?"?%Ƞ?"?%?"`?%@?" ?%ɀ?"?%?"?% ?"@?%`?"?%ʠ?"?%?"`?% ?"@?%`?"?%ˠ?"?%?"?% ?" ?%`?"?%̀?"?%?"?%?"`?% ?" ?%̀?"?%͠?"?%?"?%?"@?%@?" ?%`?"?%Π?"?%?"?%?"?% ?"@?%`?" ?%π?"?%Ϡ?"?%?"?%?"?%?"`?% ?"@?%@?" ?%`?"?%Ѐ?"?%?"?%?"?%?"?%?"?% ?"`?%@?"@?%@?"@?%`?"?%р?"?%р?"?%Ѡ?"?%Ѡ?"?%?"?%?"?%?"?%?"?%?"?%?"?%?"`?%?"`?%?"`?%?"`?%?"`?%?"`?% ?"`?% ?"`?% ?"`?%?"`?%?"`?%?"`?%?"`?%?"`?%?"?%?"?%?"?%?"?%?"?%?"?%?"?%Ѡ?"?%Ѡ?"?%р?"?%р?"?%`?"@?%@?"@?%@?"`?% ?"?%?"?%?"?%?"?%?"?%Ѐ?"?%`?" ?%@?"@?% ?"`?%?"?%?"?%?"?%Ϡ?"?%π?" ?%@?"@?% ?"?%?"?%?"?%΀?"?%`?" ?%@?"@?%?"?%?"?%͠?"?%̀?" ?% ?"`?%?"?%?"?%̀?"?%`?"`?% ?"?%?"?%ˠ?"?%@?"@?% ?"?%?"?%ʠ?" ?%`?"`?% ?"?%?"?%ɀ?" ?% ?"`?%?"?%Ƞ?"?%`?"@?%?"?%Ǡ?"?%`?" ?% ?"?%?"?%`?"@?%?"?%?"?%`?"@?% ?"?%Ġ?"?%`?"@?%?"?%à?#?%`?#`?%?#?%€?# ?% ?#?%?#?%@?#@?%?#?%?# ?% ?#?%?#?%@?#`?%?#?%?#@?% ?#?%?#?% ?#?%?#?%@?#`?%?#?%`?#`?%?#?%`?# @?%?# ?%?# @?%?# ?%?# ?%?# ?%?# @?%?# ?%?# @?%?# ?%`?#@?%?#?%?#`?%?#?%`?#`?%?#?%`?#?%?#?% ?#?%?# ?%?#?%?#@?%?#?%@?#`?%?#?%@?#?%?# ?%?#?%@?#`?%?# ?% ?#?%?#@?%?#?%`?#?%?# ?%?#?%?#`?%?# ?% ?#?%`?#`?%?# ?% ?# ?%`?#!@?%?#"?%?#"?%`?##?%?#$ ?%?#$?%`?#%?%?#& ?%?#'?% ?#'?%?#(`?%?#) ?%?#)?%`?#*?%?#+@?%?#,?%?#,?%@?#-?%?#.@?%?#/ ?% ?#/?%@?#0?%?#1`?%?#2 ?%?#3?% ?#3?%`?#4?%?#5`?%?#6@?%?#7?% ?#7?%@?#8?%`?#9?%?#:@?%?#; ?%?#<?% ?#<?% ?#=?%`?#>?%?#?`?%?#@@?%?#A ?%?#B?%?#B?% ?#C?% ?#D?%~`?#E?%}`?#F?%|?#G`?%{?#H`?%z?#I@?%y?#J@?%x?#K ?%w?#L ?%v?#M?%v?#N?%u?#N?%t ?#O?%s ?#P?%r@?#Q?%q@?#R?%p@?#S?%o@?#T?%n@?#U?%m`?#V?%l@?#W?%k`?#X?%j@?#Y?%i@?#Z?%h@?#[?%g@?#\?%f ?#]?%e@?#^?%d ?#_?%c ?#`?%b?#b?%a?#c?%`?#d?%^?#e ?%]?#f ?%\?#g@?%[?#h@?%Z?#i`?%Y?#j?%X`?#k?%W`?#l?%V@?#m?%U?#n?%T?#p?%R?#q@?%Q?#r@?%P?#s`?%O?#t?%N@?#u?%M@?#v?%L?#x ?%J?#y ?%I?#z`?%H?#{?%G@?#|?%F@?#}?%E?# ?%C?#`?%B?#?%A`?#?%@ ?#?%>?# ?%=?#`?%<?#?%;@?#?%:?#?%8?#@?%7?#?%6@?#?%5?#?%3?#`?%2?#?%1@?#?%/?# ?%.?#?%-`?#?%,?# ?%*?#`?%)`?#?%( ?#?%&?#`?%%?#?%$ ?# ?%"?#@?%!?#?% ?#?%?#?%`?#?% ?# ?%?#?%@?#?%?#`?%?#?%?#?%?#?%@?#?%?#`?%`?#?%?#@?% ?#?% ?#?% ?#?%@?#?%?#?%@?#?%?#`?%@?#?%?#@?$`?#?$?#`?$`?#?$?#`?$`?#?$?#`?$@?#?$?#π?$ ?# ?$?#Ҁ?$ ?# ?$?#ՠ?$?#@?$?#?$?#`?$@?#?$?#ݠ?$ ?#@?$?#?$?#`?$@?#?$ޠ?#?$?#`?$`?#?$٠?#?$?#@?$`?#?$?#?$?#@?$`?#?$Ϡ?#?$?#`?$@?#?$ʠ?#?$?#?$ ?# ?$`?#?$?$?$?$`?$@?$ ?$?$?$?$?$?$ `?$ ?$ ?$`?$ ?$?$?$?$?$?$`?$@?$ ?$`?$?$?$?$?$?$?$?$?$`?$ ?$@?$`?$! ?$?$#?$?$$?$?$&?$?$(?$?$*?$?$,?$?$.`?$ ?$0@?$@?$2@?$@?$4 ?$`?$6?$?$8 ?$`?$: ?$`?$<?$?$>?$?$@?$?$A?$`?$D?$~?$F?$|?$H?$z?$J?$x?$L?$v@?$N ?$t@?$P@?$r@?$R@?$p@?$T@?$n ?$V?$l?$X?$i?$Z?$g?$\?$e?$^?$c?$a?$a?$c ?$_`?$e ?$]@?$g`?$[?$i?$X?$k?$V?$m?$T?$p ?$R@?$r@?$P ?$t`?$M?$v?$K?$x?$I?${ ?$G ?$}`?$E?$?$B?$?$@`?$ ?$> ?$`?$;?$?$9?$?$7@?$@?$5?$?$2?$?$0`?$@?$.?$?$+?$?$)`?$@?$&?$?$$?$ ?$"@?$?$?$?$`?$@?$?$?$?$ ?$?$?$?$ ?$@?$?$?$?$ @?$?$ ?$?$@?$?$?$ ?$ ?$ ?#?$ ?# ?$?#?$@?#?$?#@?$`?#?$ ?# ?$Ԡ?#`?$`?#?$?# ?$ܠ?#?$@?#?$?# ?$?#݀?$@?#?$?# ?$?#`?$?#Ҡ?$@?#?$?# ?$?#`?$?#ǀ?$@?#?% ?#?%?# ?%?#@?%?#?% ?#?%?#?%@?#?% ?#?% ?#?%?#?%?#?% ?# ?%#?# ?%%?#?%(?#?%+?# ?%/?#?%2?#?%5?#?%8 ?#?%;@?#?%>`?#?%A?#?%D?#}@?%G?#z ?%J?#w?%N ?#s?%Q@?#p?%T?#m@?%W?#j ?%[?#f?%^@?#c?%a?#`@?%d?#]?%h@?#Y?%k?#V@?%n?#R?%r@?#O?%u?#L ?%y ?#H?%|?#E`?%?#A?%`?#>`?%?#:?%`?#7@?%?#3?%`?#0@?%?#,?%?#) ?% ?#%?%?#!?%`?#@?%?#?%?#?%`?# ?% ?#?%?# ?%?#?%`?# ?% ?#`?% ?"?%?"?%?"?%?"?%Ԡ?"?%؀?"?%܀?"?%?"?%?"?%?"?%?"?%?"?%?"̠?%?"Ȁ?% ?"@?&@?" ?&?"?& ?"?&?"@?&@?"?&?"?&?"`?&`?"?&#?"?&( ?" ?&,?"?&1 ?"?&5?"?&:@?"?&>?"`?&C?"}?&H?"y ?&L?"t`?&Q?"o?&V@?"j?&Z?"f ?&_?"a`?&d?"\?&i?"W?&n`?"R?&s`?"M?&x`?"H?&}`?"C?&`?">?&?"9`?&?"4@?&?"/ ?&?")?&@?"$?&?"`?&?"?&@?"?&?" ?&?" ?&?"@?& ?!?&Ǡ?!?&@?!`?&?!?&ؠ?!?&`?! ?&@?!`?&?!`?&?!Ѐ?&?!ʀ?&?!Ġ?'?!?'?!`?'@?! ?'`?!?'?!?'!?!`?''@?!?'-?!?'4@?!?':?!?'A`?!~?'H?!x ?'N?!q`?'U?!j?'\`?!c?'c@?!\?'j ?!U?'q@?!N?'x@?!G?'?!@`?'?!9?'?!1?'?!*`?'?!"?'`?!`?'?!?'?! ?'`?! ?'@? @?'@? `?' ? `?'@? ?'`? ?'? Ӡ?'? @?'`? ?(? @?( ? ?(@? ?(? ?('? ?(1? ?(:? ?(C@? {?(L? r ?(V? h?(_? _ ?(i ? U`?(s? K?(|? A?(? 7?(? -`?(@? # ?(? ?( ? ?(? `?(Š?`?(`??(ۀ?@?(? ?( ?ˠ?(??) @?@?) ?`?)! ?`?)-@? ?)9??)F ?w ?)R?j@?)_?]`?)l?P@?)z?B?)`?5`?)?'?)??)? `?)@? ?)͠?`?)܀?߀?)`?Ѐ?)? ?* ??*??*)??*9?@?*J?p?*[@?_?*l`?N`?*}?<?*?+?*??*?`?*ƀ??*ـ?`?*??+??+??+)@??+> ?z?+S`?e@?+i@?O@?+`?8?+ ?!?+ ? ?+??+?`?+??,??,(`??,B?s`?,]?X@?,y ?<`?,`??, ??,Ϡ??,? ?- ??-,??-M@?e?-n?C?-?! ?- ?`?-@??-`? ?.#`??.J?d?.s ?;?.??.`?`?.`??/ ??/O`?\?/?+?/?`?/? ?0 ? ?0Q ?V@?0?`?0??1??1@?b ?1?`?1ƀ??2 ??2V?G ?2 ? ?2??3E?S?3 ??3?@?4U?=?4?؀?5`?n`?5? ?5?@?6u?@?6 ??7y ? ?8?t?8 ??97`?9?9@??:? ?;L? ?<@? C ?<? c?=@? t ?>? r???[?@?-?B6 ??C ??E?@?F@?J?H``?o?JU?_@?L? ?N ?y?Q??T؀?.?Xq?O?\`?`?a ?w ?gX@??ne?A ?w?}? ??됇`?=?$??k?t? ?;?; ?ȍ ?C`?*`?##`*Cȍ;;`t`k`@$>됇 ~ w`Ane@gWwa\P`Xq/ T Q@yNL`_JToH_K@FECB5.@@@\?٠ r`>̀ t= d@< C<  ;L@ @:`@9:@97@8u8@7x 66u55n54>4T3 3S`3E@@2 2G2V `2 `1 1b1@1@0`0V0P0Ā// +`/`\`/O / @ .. . <@.re .J`.#-@--!-`D@-n f-L -,@@- `ƀ,@,@, ,<,xX,] s,B``,(`,@+ +܀+` +"@+9@+O+he+S { += +(+`@+@@** **`@*+`* =@*}`N*l` *Zq*J *9*)` *`* )@) ) )`) ))()5)C@)yP)l`])_@j)R`w)E)9 ),) )) `(@(׀(`(@( (@ (` `( (@ #( -( 8(` B(| L(r U(h _(_ i (U r(L@ {(B @(9 `(0 (' `( @( ( @ ( ' ' ' @' ' ' ' '!'! `'@!'!'!# '!*'!2 '!9'`!@'!G'w!O'p!V@'i!] 'b!d '\!k'U !q'N`!x'G!@'A!':`!`'3!'-`!@'&!' !'@!`'!' !'!'!&!&!&!&!ܠ&!&!@&`!&Ҁ!&!`&`!&"& " &"&@"&"`&"& "%&"*@&"/`&"4&@"9& ">& "C&}"I&x"N&s"R&n "W&i "\&d@"a&_`"f&Z"k@&U"p&Q "t&L`"y`&G"~ &C"&>"@&9"&5@"&0"&,@"`&'"&#"@&"&"&@"`&"& "& `"@& "`&"%"%"%" %@" %@"@% "@% "`% "`% "@% "@%@"@%@"%`"%Ƞ"%Ġ#%#% #`%`# %#%#% # %`#%#% #"@%`#%%#)% #-%#0% #4@%#7%#;@%#>% #B %#E%|@#I%x#L%u@#O%q#S@%n#V%k #Z%g#]@%d#`%a@#c%^#g %Z#j%W#m%T@#q%Q#t%M#w@%J#z`%G`#}%D@#%A#%>#%:#%7# %4#@%1#`%.#`%+#%(#`%%#`%"#`%#`%#@%#@%# %# %#%#% @#%`#%#`%#@$#$#$@#ʠ$#`$# $#$ #ՠ$`#`$#$#$`#$# $#$@#$٠# $#$`#`$#$ #$̀#@$#$`#`$#$@$$$$@$$$ $ $ $$$`$$$$`$`$$$$ $$$$ $ $"$$$$$'@$$)$$+$@$.`$$0$$3$@$5@$$7$$:$`$<@$ $>`$$@$$C$`$E@$}$G$z$I$x$K$v`$N@$t $P`$r$R$o$T$m$W$k`$Y $i@$[@$g$]$d$_$b$a$`$c$^$f$\`$h $Z`$j $X@$l@$V $n`$T$p$R$r$P$t$M$v$K$x$I$z$G$|$E$~$C$$A$$?$$=$$;$$9$$7$$5$$3$$2$$0$`$. $@$,@$`$*@$@$(`$ $&$$$$$"$$ $$$`$ $@$ $@$`$$$$$$$$ $@$@$ $$$ $$ $`$ $ $`$$$$$$ $@$`$#$Š#$`# $ #`$#$̀#$`#@$#$#$@#@$#$֠#$@#@$#$ۀ# $@#$#$#@$ #$#$@#`$#$# $ #ؠ$#$@#`$#$`#@$#$# $#$#@$#ʠ$# $ #Ǡ$# $ #Ġ$# % #%#@%#%#@%#%#@% #% `#`% #% #%# %#%#@%#%`#`%# %#%#@%#%@#%#@%#% @#%!# %##%$@#%%# %'#%(`#%)# %*#%,@#%-#@%.#%0 #%1`#`%2# %4#%5 #%6#`%7# %9#%: #%;#`%<# %>#%? #%@`#%A#@%B# %C#~%E #}%F`#|%G#{`%H#z %I#y%K#w%L #v%M`#u%N`#t%O#s@%P#r %Q#q%S#o%T #n%U@#m%V`#l%W#k`%X#j`%Y#i@%Z#h %[#g %\#f%^#d%_#c%` #b%a@#a%b@#`%c@#_%d@#^%e`#]%f`#\%g`#[%h#Z%i`#Y%j#X%k#W%l`#V%m#U%n`#T%o`#S%p#R%q`#Q%r`#P%s@#O%t@#N%u #M%v #L%w#K%x#J%y#J %y#I %z#H %{#G@%|#F@%}#E%~#D%`#C%@#B% #A%#A%#@ %#?@%#>`%#=%@#<%@#;% #;%#: %#9`%#8%#7%@#6%#6 %#5@%#4%#3%@#2%#2%#1@%#0`%`#/% #/%#. %#-%`#,% #,%#+ %#*%`#)% #)%#(@%#'%`#&%#&%#%`%#$% #$%##`%#"% #"%#!@%# %@# %#@%#%@#%#@%#% #%#`%`#%# %#%@#%#@%`#% #%#%`#%#@%`#%#@%#% #%#%@#%#`%`#%#@%`#%#@%#%# %# % # @%# %# %# % # %# % # @%# %# %#%#`%`#%#`%@#%#%@#%#% # %#%#@%`#%#%@# %#%#@%#%#%@#%€#%#`%`#%"%"@%`"%"% "@%ŀ"%"% " %`"%"% " %`"%"%"@%`"%"%"@%@"%ɀ"%"% "@%`"%ʠ"%"`% " %`"%"%"% " %`"%̠"%"%"`% " %̀"%"%"%"@%@" %`"%Π"%"%"`% "@%`" %π"%Ϡ"%"%"%"`% "@%@" %`"%Ѐ"%"%"%"%"% "`%@"@%@"@%`"%р"%р"%Ѡ"%Ѡ"%"%"%"%"%"%"%"`%"`%"`%"`%"`%"`% "`% "`% "`%"`%"`%"`%"`%"`%"%"%"%"%"%"%"%Ѡ"%Ѡ"%р"%`"%`"@%@"@%@"`% "%"%"%"%"%Ѐ"%`" %@"@% "`%"%"%"%Ϡ"%π" %@"`% "%"%"%΀"%`" %@"@%"%"%͠"%̀" % "`%"%"%̀"%@"`% "%"%ˠ"%@"@%"%"%ʠ" %`"`% "%ɠ"%`" % "`%"%Ƞ"%`"`%"%Ǡ"%`"`% "%"%`"@%"%"%`"@% "%Ġ"%@"@%"%à# %@#`%#%€# % #%#%@#`%#%#@% #%#%@#`%#%#@%#%# % #%#% #%#%`#`%#%`# @%# %# @%# %`# @%# %# @%# %# `%# %`#@%#%`#`%#%@#`%#% #%#% #%# %#%#`%#%@#`%# %#%# %#%@#`%# % #%#@%#%@#%# %#%@#%# % #%`#`%# % # %`#!%#" %#"%`##%#$ %#$%@#%%#&@%#'% #'%`#(%#) %#)%@#*%#+@%#, %#,%@#-%`#.`%#/ %#/% #0%#1%#2 %#3%#3%@#4%`#5`%#6@%#7%#7% #8%`#9%#:`%#;@%#<%#<% #=%@#>%`#?`%#@`%#A %#B %#B%#C% #D%~@#E%}`#F%|#G%{#H%z#I@%y#J@%x#K %w#L %v#M%v#N%u#N%t #O%s#P%r #Q%q #R%p #S%o@#T%n #U%m@#V%l@#W%k #X%j@#Y%i #Z%h@#[%g #\%f #]%e #^%d#`%c #a%b#b%`#c%_#d %^#e@%]#f@%\#g`%[#h%Z#i%Y`#j%X@#k%W@#l%V #n%U#o%S#p %R#q@%Q#r`%P#s%O`#t%N #u%M #w%K#x %J#y`%I#z`%H`#{%G@#|%F#~%D#@%C#`%B`#%A`#%@ #%>#@%=#`%<`#%; #%9#@%8#`%7#%6 #%4#@%3#`%2`#%1 #%/#`%.#%-@#%,#@%*#%)@#%(# %&#%%`#%$# %"#`%!`#% # %#%@#%#@%#% #%#`%`#%# %#% #%#%@#% #`% `#% # % #% # %#% #%#%@#%#`$`#$#`$@#$#ɀ$@#$#̀$ # $#Ϡ$ # $#Ҡ$ # $#$#`$`#$#ڀ$ # $#$#@$`#$#$ # $ހ#$#`$@# $٠#$#`$@#$Ԡ#$#`$@# $π#$#$ # $ʀ#$#$#@$@#$à$$$$ $@$`$$$$$ $ $ @$@$ $$$$$$$ $@$`$ $`$$$$$$$$$`$@$!@$`$# $$$$$&$$($$*$$,$$.$$0`$ $2`$ $4@$@$6 $@$8@$@$:@$@$< $`$> $`$@ $`$B$@$D $~`$F $|`$H $z`$J $x`$L $v $N@$t $P`$r $R`$p $T`$m$V$k$X$i$Z$g$\$e$_$c`$a $a`$c@$_@$e@$]$g$Z$i$X$k$V$n $T`$p@$R $r`$P$t$M$v$K$y$I`${@$G$}$D$$B$$@@$`$>$$;$$9`$ $7 $`$4$$2$ $0@$`$-$$+$ $) $$&$$$`$@$" $$$$@$$$$`$@$$$$@$$$$ $ $$ $ $ $$$@$$#`$@#$#`$`#$# $Ϡ#$@#$#@$׀#$#$#$߀#$#$#`$`#ڠ$ #$#@$#`$`#$#$# $#`$`#Ġ%@#% #%# %# % #`%#%`#%`#%@#% #% #% #%# #%&#%)#%, #%/ #%2@#%5 #%8@#%;`#%>#%A#`%D#} %H#z%K#v%N@#s%Q`#p`%T#m %W#i%[ #f%^#c%a#` %e#\%h`#Y%k#V %o #R%r#O`%u#L%y@#H%|#E % #A%#>@%#:%#7 %#3%#0 % #,%#)%`#%`%#!%# %@#`%#%#%`#`% # %#%#%# %@"`%"`%"%"%"%ؠ"%"%"%"%"ؠ%"Ԡ%"Р%"`%"`%@" &`"&"& "& " &`"&"& "@&"&#"@&(@"&,"`&1`"&5"`&:`"&?" &C"}&H "x&L"t@&Q"o&V`"j&[@"e&_"a &d"\@&i"W`&n"R`&s"M&x"H&}"C`&">`&"9@&"4 &".& ")&`"$&"& "&`"`&"&@" &"&@!`&!&`!@& !&!&ހ!&`! &@!@& !`&!`& !`' !@'@!@'`!'!'!`'! ! ''!'-!@'4`!':! 'A!~'H@!x'N!q@'U!j'\!c'c`!\'j`!U'q`!N'x!G`'!@@'!8' !1'!* '!"'! ' !'! '!'` '` '@ '` ' ' Ӏ' '  ( ( `(` ( (( (1 (:@ (C {`(L r(V@ h(_ ^(i` U (s K(} A( 7`(@ -@(` "( `(@ (  (@(Р`( ((@ˀ()  )@@)!@ )-`)9)F@v)Sj )_] )lP)z B)5 )@'`)`)  @)`)@)ܠ`)@)* @`****: *Jp`*[_*lN@*~<**** *`*٠ *̠++@+)`+>`z+Se+i`O+8+@!+@ `++ @+@,,(,Bs@,]W,y@< ,,`,,- -,`-M`e-nC-  -@@-`-.#@.Jd.s@;..ǀ .`/ `/O[/*/@/ 0@0Q@V0 @0@1@1A a1@1Ơ2 `2VF2@23ER3@34U@=4@5n@5@5  6v 6@7y`8t8@۠9799ހ: ֠;L <` C< c=Հ t> q? [@@-B6@C`E@F`JH`o JU _ L N@y`QTؠ.XrO\ a@vgX``ne@w} 됇=%kt@;;`ȌC*@lmms-1.1.3/data/wavetables/tri.bin000066400000000000000000004777301247673406200170570ustar00rootroot00000000000000H@?B@?gwH@??nЀ`B@???n|ƠE??9??9?g99` DD?ul?ڠ???`?`?ul`kul@@ul E??{?b8?`?oY??oX?@?b8`?{@?jO`{b8oYoX@b8@{Fs?M3?n@?u?l?f<?蚲?e??d?蚲?f<`?l?uǀ?n ?M3`jM4 nѠulf<蚲e d蚲f<@l`u@nM2G ? ?Ŷi?8?յ? } ?G? ?峊`?Z?x`?@?? ?x`?Z?峊@??G? |?յ?8?Ŷh?iW4 Ŷi8յ@ }@G 峊Zxπ x@Z峊 Gʠ |յ8@Ŷh GMN?,?6 ?C0?5?8-@?P?O @?5z?30@?BX??B`?N?Ls ?X=?b??b?X=?Lr?N??B ?BX?30?5z?O ?P`?8- ?5?C0?6 ?,h@,6 `C1`5 8-PO 5z30@BX?BNLs@X=bb`X=LrN?BBX`3/5zO P@8,5`C0 6 ,GI???W@?ń??#@?P?Մ@?/3@?幀?ݏ'?#Z?w??'`?*?ـ?4h?6?S?9:?풝?*??)?풜?9:`?R?6?4h`?`?*`?' ??w?#Z?ݏ' ?@?/3 ?Մ ?O?#?@?ńƀ?V? ?hWń@#P Մ/3ݏ'#Zw '*٠4h6S 9:풝*)풜9:`R64h@@*@' w#Zݏ' /2ՄO#ńV G@?@?`?$!???' ?*1`?~`?$?!?!4?'?'I?.<?-b?c`???ր? ??$?#`?'C?&B?*[?)?-8?-Y?.@?5??5?.?-Y`?-8?)?*Z?&A?'B?#@?$?`? ?`???c@?-b?.<?'H?'?!4@?!`?$?~?*1?'???$!@??hk` `$"`'à*1~%!!4''I .=-c@cր $@#'C@&B *[)-9-Y.@55@.-Y`-8)*Z&A'B# $@ @@c -b.<`'H`'`!4! $@}*0`'`@$ @ G?kF?l?u?l`??@?½?l?@?`?s?`?g.?ҿ!?@?l??J?os???uo?Q@???hG???iT?Ԡ??l??]@?m`? ?H ?p? ?Ǘ?q?F?ȵ?t@??ʎ ?y ??y?ʎ??t ?ȵ?E?q?Ǘ? ?p?H ??m@?] ??l??Ԁ?iS?`??hG`???Q ?un???os?I?@?l??ҿ ?g.?@?s@???l`?½`??@?l?t?l`?kD@h:\kJ@lv`l@½@l@s@g.ҿ!``l@J@ot`@uo@Q@hG@iT l]`m H`p  ǘqFȶt@ʎ`y@yʎ@tȵEq֠Ǘ pHm ]ʠl``iS@hG`Punܠos`I lҿ g.@s``l½@lslk@`G? ~? ?? ?`??`? `??e?0??Q ??r@? ? I???b?l? ??`? ?I`?! ???@?F`? ?? ?፶??⎀??J?V?@?%@? ? ?摫`?€?w ?`?C?]??)?`??땰??얆?x?k???'`?@???'`???k?x?얆?`?땰`?? ?)??]`?C`?@?w?`?摫`???%? ?U?J?`?⎀`??፶`? ?? `?E??@?? ?I?? ? ??k?b`?ڠ?? I? ?q??P?@?0?e`??  ??`??  ?? ? |@h! `  @` `f 1@Qr  J  bl@``I!` F  ፶⎀JV %``@摫 w`C])`땰얇xk'@'@`kx`얆`땰  )@`]@C@ v@摫 % UJ@⎀@፶@ ` @E@ Hkb ` I` qP`/d @ @  xHa?` ?`@?o ?`????`? @?0`?d̀??^y?´? ?`@?ƶ? ?b`?ʹ/?@?eM?κ@??гu ?^? ~?Ҵ?_`? ?Ե?`? ?ַ?a? @?ط@?c? ?ڹ,?c?; ?ܹ ?eI?@?޻X?e@?@?]?೺@??^`? ? Ȁ?_@?π? ?_`?? @?`@?@? ?`? ? ?a%?`? +`?a?1 ? ?b7? ? <?c ?C?@?cI@? ?P?d#`?W?( ?d_?+?h`?e-`?u@?)@?e? ??e`?{??{`?e`?? ?e?)@?u ?e-@?h@?+?d^?( ?V?d#@?O??cI@? ?B?c? <? ?b6? `?1?a? +@?@?a%? ? ?`? ? ?` ? @??_`? `?`?_ ? `??^@??೺ ?]??e?޻W??eI@?ܹ?:?c?ڹ,@? ?c?ط? ?a ?ַ@? ?``?Ե? ?_?Ҵ? ~`?^?гt??κ?eM??ʹ/`?b?  ?ƶ ?`? `?´Ԡ?^x?@?d?/? ?`?`??`?`@?n?`?`h``q```` 1`d͠^y´` `ƶ bʹ0 ĠeN`κנ гu`^ Ҵ _ Ե@` ַa `طc @ڹ,c`;@ܹ@eI`޻X@e@]೺`^@ Ȁ_Ϡ _ր ݀`@ ` ` a& +a 1@ b7 =c@C @cI Pd#W@(`d_, he-u)`e`e{{ e@Ȁe)u e-@h@+d^(Vd#@OcIBc < b6 @0a +@ a% ` ` _@ `@_ @^ ೺ ]e޻W`֠eÌܹ:c ڹ, c`ط aַ @` Ե @_Ҵ` ~@^Āгtκ@eLÀʹ.b ƶ`` ´ ^x d. `` @``l`` H`?\ ?@? ??? Ƞ? #??)@?'@?? ? X ? j ? ??à?V?`?' ?[ ?? &? `? ? ? ? i? ? :@? V`?`?І ??ц ?V?҇] ? ?Ӈ?&?Ԉ) ??Ո??ֈ ? _?׉[ ? @?؉@? /@?ي'`? ?ڊ`? ?ۊ? g?܋Y? ?݋? 7?ތ&? ?ߌ@??Fy@??Ƭ`??F߀???S?GE?⇇?y??G@??߀?#`?H?W@?F? ?Hy ?刿?Ȭ??H?&? ? Z`?IF?牎 ?y? ?I@??? )@?J ?\?G? `?J{ ??ʮ? ?J?*?`? ]?KJ?싐?~? ?K??@? $?L#?P?b? n?L`?A?4`??4 ?A?L`? n?b?P?L"? $???K? ?~?싐?KJ? ]?@?*?J`? @?ʮ??J{ ? `?G?\?J? ) ???I ? ?y?牎?IF@? Z@??&`?Hߠ??Ȭ@?刾?Hy ??E?W ?H?#@?@?`?G ??x?⇇?GE?S???F߀??Ƭ@??Fy ??ߌ ? ?ތ%? 7`?݋? π?܋Y? g?ۊ@? `?ڊ@? @?ي'? / ?؉? ?׉[? ^?ֈ??Ո?`?Ԉ(?& ?Ӈ??҇\?U?ц??І?@? U? 9? ? i@? @? ? @? ? &??Z?&??V ? ?`? ? i? W? ??&?(? ? "@? `??`? `??Wgc  ʀ %* (@ ɠ Y k @ V'[@ '` @ j : VІ`ц`V@҇]@`Ӈ`&Ԉ)@Ո`ֈ` _@׉[ `؉ /ي' ڊ ۊ g܋Y ݋@ 8ތ&@ ߌFy`ƬFߠSGF⇇y@G`ߠ#HW`F@Hy`刿 ȬH&@ ZIF牎@z I` )@J@]G J{`ʯ J* ]KJ싐 K @ $L#Pb oLA44 AL@ nbP@L" $K ~싐KJ@ ]@*J` ʮàJz G`\J )`@I y牍IF@ Z &`H߀Ȭ@刾HyEWH`# @G`x⇇`GESF`Ƭ Fyߌ @ތ% 7@݋` ܋Y` gۊ ڊ ي& .؉ ׉Z ^ֈ`Ո Ԉ(&Ӈ ҇\Uц@І U` 9 h @ Ǡ & Z@&@U h V  %'@ ` ŀ  P H+?u[?[`?D?[ ??V??[?g? ?])@?W?Y??V@?[?@??\ ?`?y?]J@??W?`?Z ??¯?Z~@?l?İ.?[? ?ưЀ?[??ȱ@ ?\4`??ʱ`?\ ?@?̲Q?]J ??β?]?V?Y?Я/??Z?ѯb??Z:@?ү??Z?ӯ?l?Z?԰E`?@?[@?հs?@?[K?ְ ?$ ?[ ?װ`??[Ԡ?رZ??\3?ٱ@? ?\]?ڱ?5?\`?۲@?@?\`?ܲp@??]I ?ݲ?!?]o@?޲?G?]Ӡ?߳?V@?. ?Y ?h@?/?Ԁ??/@?Z?ᄬ?t@???/ ?ZM ?`?⯹?]?&?/?Z`?5??ڢ ?k@?0`?Z׀?z?C??`?0S?[?兿 ?尉 ?+`??0?[a??@?p?:?0@?[?H?@?۴??1 ?[?膍@?X@?`??1e?\1??鱝`?>@? ?1?\u??@?܃ ?N?1`?\?[?' ? ?`?24?\`?쇡?k? `?נ?2z?]C??`?S??2?]?.??ݞ?V?3`?]???`??`???]?3 ?V?ݞ??.?]?2??S?@??]C`?2y?נ? @?k`?쇠?\`?24`? ??&?[?\?1`?N@?܂? ??\u?1@? ?>?鱝 ??\0?1e?Ā?`?X@?膍?[?1 ??۴? ?H`?[?0?:`?o? ??[a?0`?@?+@?尉?兿?[?0R? ??C?z`?Z`?0@?k?ڢ??5?Z@?/ɠ?%?]`?⯹`?@?ZM?/???t ?ᄬ?Z?/@?`?`?.?h@?Y€?.?V ?߳?]`?G@?޲?]o ?!?ݲ?]H?`?ܲo?\@??۲ ?\ ?5?ڱ`?\]`? @?ٱ?\3??رZ?[`??װ ?[?#?ְ?[K??հs`?[ ??԰E ?Z?l@?ӯ?Z@?@?ү?Z:??ѯa?Z??Я/?Y@?V?] ?β??]I?̲Q@??\?ʱ? ?\4?ȱ?? ?[@?ư ??[@?İ.`?l`?Z}?¯?`?Z??V? ?]I?x`??\`???[?U? ?Y?V@?]'??f@?[@?`?U?ŀ?[?B ?[?uZgLu[[$H@[!ˠX[ `i@ ]+WY`W`[ `\`z]K WZ ``¯`Z~m@İ/@[@ߠư[ ȱ@\4 ʱ\̲R]Jβ`]W YЯ0Z ѯb@Z:үZӯlZ@԰E[հs`[L ְ`$`[@װ@[ر[@\4ٱ` \]ڱ6\۲``\ܲp]I@ݲ@" ]o޲G]߳ V@.@Yh/@Ԡ/@Z ᄬt /`ZM`⯹]&/Z6 ڢ@k@0`ZzD0S [兿@尉 +0[b`p :0`[H۴1! [ 膍@X`1e\1 鱝>` 1\v @܃@N1\[' `24\쇡k 2z]C`S2 ]/ ݞV3`]  ݀ ]3Vݞ`.]2S@@`]C`2y` @k`쇠\ 24 &[\1 N@܂\u1@ >鱝Ѡ\01e``@X 膌[1 `۴H [0:`o[a0@ + 專兾[0RCz@Z@0jڡ5Z/ɀ%]@⯹` ZL/t ᄬZ/@`@@.h Y`.V߳] G ޲`]n!@ݲ]H@ܲo\۲ \5`ڱ\]  ٱ\3@رZ`[ `װ[#ְϠ[K`հs[԰EZ€lӯ@Z  ү Z9@ѯaZ@@Я/`Y V`]β]I ̲P@\ ʱ`\3ȱ?@[ư`[İ-kZ}¯Z V@@]Hw`\[T@YU`]& d@[S[ >`[@uZH`?p3`?? ?@???`? ??@ ??@?j??8???@`?i??Ѐ??7@?x? ???H?k??Ҁ??9`?@?P ?t???ƒ?܀?Ã@??Ą?D?ńQ ?x?Ƅ??DŽ??Ȅ`??Ʌ?H?ʅR@?|?˅??̅ ??ͅ`??Ά?L?φS`?@`?CC`?ЃZ`?] ?t?Cv?у`?Ð??C@?҃`??`?C?Ӄ?`?`?D ?Ԅ*?*?D`?DD?Մ^`?^@?x`?Dx?ք`?đ??D`?ׄ`? ?`?D?؄`??`?E`?م.`?, ?H@?EE?څb`?_?|`?Ey@?ۅ@?œ?@?E?܅ ?ƀ?`?E@?݅@??@?F?ކ2 ?-?L ?FG@?߆f?`?@ ?#=`?CM?cJ@?Z?W ?g?d?t?#p?C?c}?Ⴭ?ᣊ?Ú?㗀??#`?C?c@??⣾ ????#?C?c??????$ `?D?d@?)?%@?6?2 ?C?$??DP?dK?]?X?j?e?w?$r?D`?d?愑`?椌`?Ğ`?@?`?$ ?D@?d ? ?? ?? ?$?D ?d??????% `?E?e`?,?'@?9?4@?F?%A ?ES?eN?`?Z?m?g?z?%t?E@?e?녔@?륎?š@?囀??%?E?e??€??`??%`?E?e?@?????& ?F! ?f?-?,?9`?:`?D?&J?FM?f] ?O?~?,?+??+?,`?~`?O?f\?FM?&I?D`?:@?9@?,?-?f@?F! ?&??????e`?E@?%`??`??@??e@?E?%`??囀?š?륎?녔 ?e?E@?%t?z`?g?m`?Z?``?eN?ES`?%A?F?4?9?' ?,?e ?E?% @??`????d?D?$٠????礿? ?d?D ?$? ? ?Ğ ?椌@?愑 ?d`?D@?$r?w@?e?j`?X?]`?dK?DP?$>?C?1?6?% ?)?d@?D?$ `??????c?C?#?۠??Π?⣾??c ?C?#@??`?Ú?ᣊ?Ⴭ?c}?C?#p?s?c?f?W?Y?cJ ?CL?#=@???`?߆e?FG?K?-@?ކ1?F???݅?E??`?܅?E??Œ?ۅ ?Ey ?|?_`?څb?EE?H ?+?م. ?E ? ?`?؄ ?D? ??ׄ ?D@? ?đ?ք@?Dw?x ?^?Մ^@?DD`?D ?*?Ԅ* ?D?@? ?Ӄ ?C`?@??҃ ?C?@?Ð`?у@?Cv?t ?\?ЃZ@?CC@?@ ?φS?L@?Ά?`?ͅ?`?̅?@?˅@?|`?ʅQ?H@?Ʌ`?@?Ȅ?@?DŽ?@?Ƅ@?x@?ńP?D ?Ą`?@?Ã? ?ƒ? ? ?t ?O?@ ?8?@???k ?H ?@??`?x?6????i????`?6?@?i@? ???? ???=?ˠ?:?p*g`pB`FנC @B @l``9A@j```8@yIlӀ:@@Puƒ`ÃĄ E ńQy Ƅ DŽ Ȅ Ʌ@I ʅR} ˅ @̅`ͅ@Ά @M@φS@CCЃZ]`tCw уÐC҃ @ܠCӃD`Ԅ*+DDDՄ^^xDx@քĒDׄƠŀD@؄Eم.,@HEFڅb_|Eyۅœ@E܅ʠE݅@`Fކ2`-L@FG`߆f`a @ #=`CM cJ`Z W@g d t#qCc}჎ ᣊÛ 㗠#Cc`⣾@@#Cc$ Dd)%`62@C$? DPdL ]Yjew$rDd愑椌Ğ``$@D`d@` @@$D d   % E e,'`94@F%A ESeN `[ mgz%tEe녔륎š@@%E e Ϡ%ܠEe` & F!`f-,@9:`D&JFMf] O~,, +,`~`Of\FM@&ID`:@9@+-@f@F &``e`E@%@@@Ԁ@ǀe@E%``š륎`녔 e`E %tz gm Z``eMES`%@F39&,e E% @@`d`D$ـ̠礿dD$Ğ椌 愑 d@D $r`w e`j X]@dKDP@$>C@16@%)`d D`$ @````cC#נۀ΀⣽cC# @Úᣊ`Ⴭc}C#pscfVYcJCL#= ?`߆eFFK-ކ1F`݅E ܅E`ŒۅEx{_ څaEE`G+م-E ؄DހׄDđ@քDwx]Մ]DD D*`Ԅ)DӃC@À҃CÐ уCv`t\ЃYCB@φRKΆ ̅ͅ ˅{ʅQ`GɅȄDŽ ƄwńP`CĄÃƒ sO@?7 @j G @w5h >`5`g` @= @9 3pH#?eX,?uX5?$?X7@?>?)?+?X7?8@?F?YE?*@?W?1@? ?X8`???`?X?F?@?YM?Ȁ?*@??W?j?1?W??q?X8? ? ?Xw@???`?X ?}?F?Y?@??YM? ?`?Y`?*`?W?@?H@?W? ?o?Wˀ?­1??W@?íN??X@?ĭv??X8?ŭ`?`?XU?ƭ ??X}?ǭ ???X?Ȯ`?[`?X ?ɮ??Xޠ?ʮF? ?Y`?ˮa?@?Y#`?̮??YM?ͮ??Yh ?ή`?)?Y ?Ϯ`?*`?,`?W@?Ђ7 ?Ь@?ט?M ?,?W?тY?ѭ?׺`?o?- ?WР?҂|?ҭ1??`?-=?W@?ӂ`?ӭT ? ??-`?X?Ԃ?ԭv?!?נ?-`?X8?Ղ ?խ`?D?@?-?X[ ?փ?֭ ?f`??- ?X}?׃(?׭ޠ?؈???-?X?؃J`?خ`?ث@?b ?. ?X?كl?ٮ#?͠??..`?X?ڃ@?ڮF??`?.P?Y`?ۃ?ۮi ?`? ?.s ?Y*?܃?ܮ?4??.?YM?݃`?ݮ?W ?@?.?Yp@?ބ?ޮ?y?1?.`?Y?߄; ?߮?ٜ ?*@?~`?,ڠ?B.?W ?l@?;???@?ל?`?L??,`?BQ@?W?m?^@?ᗲ??b`?׿ ??o?@?-?Bs?W@?m$?₀?Ԁ?1@?„??5@? ??-B?B ?W?mF?ィ`??S?§@?@?W?? ?-e ?B?X?mi??`?v`??&?z ?@?*?-?B?X8 ?m`??;?孙?@?I?휠??M?-`?B?XZ?m? ?^@?死??l??`?o?-?C?X}@?m@?-?瘀? ?1 ?؎?????-`?CB`?X?m?P@?蘣 ??S?ر ??a?`?.?Cd?X`?n@?r?Š?#@?v ?Ӡ?&? ??.4?C`?X?n7?ꃕ@? ?E?Ø?@?I??`?.W?C?Y`?nZ ?냸? ?h`?û ??k? ??.y?C@?Y*?n|?`?-@?쮊?ݠ?; ???>`?.?C?YL`?n`??O?@?@?]?? ?a@?.@?D?Yn?n@??r? ?#`?`? ?/@? ?.?D6?Y@?n?<? ??[`?u?v??v?u?[ ?@??<?n?Y?D6`?.??/ ? ? ?#`??r??n?Yn`?D?.@?a? ??]? ? ?O??n ?YL`?C?.?>`???;?`?쮊?-?@?n|?Y)?C@?.y?? ?k`??û?h ? ?냷?nZ?Y`?C?.W?@?`?H??Ø?E??ꃕ@?n7?X?C ?.4`???&`?Ӏ?u?# ?ŀ?r?n?X@?Cd?.?@?a`??ر?S`??蘣?P ?m?X?CB@?-@??>?`?؎`?1??瘀?-?m ?X} ?C?-?o`?`??k??死?^ ? ?m?XZ?B@?- ?L??휀?I@??存?;?`?m@?X8?B?-?*`? ?z?&?ɠ?v@? ??mh?X`?B`?-e???W? ?§ ?S??ィ@?mF`?W?B?-B`???5 ??„?1 ?@?₀?m#?W@?Bs?-? ?o`??׾?b`??ᗲ?^?m?W?BQ ?, ??L?`?ל@?????;`?l ?W?B.?,ڠ?~@?* ?ٛ?߮?߄;?Y?.@?1?y`?ޮ?ބ?Yp?.??W?ݮ ?݃@?YM`?.@?`?4?ܮ?܃?Y*?.s???ۮi?ۃ@?Y?.P?@??ڮF@?ڃ?X?..??@?ٮ#?كl?X?. ?b?ت?خ?؃J ?X ?-@??@?؈?׭ހ?׃'?X}?-??f ?֭?փ@?XZ?-??C?խ@?Ղ?X8@?- ?`?!`?ԭv?Ԃ?X?-_???ӭS?ӂ@?W?-=`? ?ܠ?ҭ1@?҂{?W`?-?o?׺@?ѭ?тY`?W?,?L?ח?Ь?Ђ7?W?,@?*@?Ϯ?Y?)@?ή?Yg??ͮ?YM`??̮?Y#??ˮa@?Y??ʮF@?X@??ɮ?X?[?Ȯ?X`??@?ǭ?X}?@?ƭ?XT??ŭ?X8@?р?ĭv`?X??íN@?W??­1 ?W ?o`? ?W?G??W`?* ?Y?Ѐ?`?YM ?@?ɀ?Y ?F?|?X`??>?Xv?`??X7?p@?@?W ?0?j?W@??)?@?YL`??E@?X?> ?@?X7 ??0?W?)?YB?C?5?X5?)@?'?9@?X2? ?uX,?eXgeXJuXD,X>E@-/`X;<IYH,W3 X: @A`XH@YO@+``Wk2`WqX9Xx@@`X~GY YN Y *W@HW `p W­2WíO Xĭw@@X9ŭXU`ƭX~`ǭؠ@ X@Ȯ[Xàɮ``XʮG@Y ˮb@Y#̮`@YN`ͮYhή*@YϮ*,֠WЂ7Ь`ט@M@,W тYѭ ׺p-W҂|@ҭ1-=WӂӭT`@-`@XԂԭw!-X8ՂխD@-X[`փ֭@f -`X~׃( ׭؉?-X؃Jخث`b`. X@كmٮ$@..Xڃ`ڮF .PYۃۮi`@.s`Y+@܃ ܮ5 .YM݃ݮW`.`Yp`ބ ޮ`y2 .ڠY ߄;`ٜ߮`*`~,B.W@l@; @ לM,BQ`Wm^`ᗲ b׿ o`- BsWЀm$ ₀Ԡ1`…5`@-BB@W mFィT§`W@-e@BXmi v'z``*-B X8@m;孙 @IM -`BXZm @^`死l o-C X}`m`-瘀@1@؎? -CBXmP`蘣@Sر@ a.CeX€n`r#`v@& .4C`X n7ꃕ@EØ@I`.W@CYnZ`냸 h`û k@ .yC̀Y*n|`-@쮋;`@>. CYLnO@@]a@.`DYnn`s #``/ .D6Y`n<  [`uvv`u`Z@;n`YD6 ./  # rnYn`D`.a ]@ On YL C.> `;`쮊,@n|Y)C .y@k`úh `냷nZY C.V`HØ@Eꃕ n7XC .4`ր& Ӏu#`rnX Cd. a@ذS``蘣PmXCB - >@؎@0瘀-mX}C-̠o@ k`死@^ mXZ`B -L`I 存;@m X7Bڠ-*@y&ɀv mhX@B@-d`W§Sィ mF@WB-B@5 „1@₀m#W Bs-o@׾b@`ᗱ]m`WBQ,L@ל@?`;`lWB.,ڀ~ *ٛ߮@߄:Y@.1yޮЀބ@Yo.Vݮ݃YM . 4@ܮ`܃ӀY*.rɀۮhۃY.P@ڮFڃX .-` ٮ#كl`X€. aتخ؃IX- ? ؈`׭ ׃'X}@-`e֭փ XZ-@CխՂX8- ! ԭv@Ԃ`X-_ӭSӂW-= `ҭ1҂{W -o@׹ѭ`тY W,`LחЬЂ6W,*Ϯ`Y@(ή`Yg ͮYL̮@Y"`@ˮ`Y`ʮEXݠ ɮ X`ZȮX>ǭ`X}ƭ@XT ŭX7ĭuX`@íMW`@­0Wʠn W G@W)YπYL @ȀXE|X>XuX6o``W@/iW`(`YJC`X<@`X5@ . W'Y>@2@X1%#1X+ uXeWH%?` ?p?xh?@??n?Ѡ????7`?n??֠??`??@?@?@??;@?Q?o@?@? ?? ?? ? ?????Ӏ?݀?`?`?? ?!?+?;`?D?U`?^?o`?x?`?@?`? ?`??@??`?? ?`?%@?-@??A????A`?ƀ?`?Ӡ?A ?? ??A?Á???B ?Ă??!?B$?ł.?1?;?B>?ƂH?K`?U?BX`?ǂb?e@?o`?Br ?Ȃ|??`?B?ɂ`?˜?`?B?ʂ`?²?`?B?˂ʀ?̀?@?Bـ?̂@?`?`?B ?͂`?@? `?C ?΃@? ?%@?C&?σ2@?3??!`?A ?a?Ё?С@? ???!@?A ?a?сƀ?ѡ ??͠?Ӡ?!?A ?aڀ?ҁ?ҡ??`??!?A?a`?Ӂ?ӡ? ?@??"?B?b ?Ԃ?Ԣ???!?"!?B(?b(?Ղ.?բ.?5?4?;?";`?BA?bA?ւH?֢H@?O?N?U?"U ?B[?b[?ׂb`?עb ?h?h?o`?"o?Bu?bu?؂|`?آ|?‚?`?`?"?B?b@?ق`?٢?œ?@?`?"?B?b@?ڂ`?ڢ?¶? ?@?"?B?b?ۂ@?ۢɀ???@?"ր?B?b?܂@?ܢ@??? ?"`?B?b?݂ ?ݢ ??? ?# ?C?c?ރ@?ޣ???%?##?C+?c*`?߃2 ?ߣ0?8?7`???!?1 ?A ?Q`?a`?q???࡯?౯??Ѳ@?@????!?1?A?Q@?a@?q`?ƀ?Š???? ?@?@?Ӏ?Ҡ?!?1?A?Q ?a ?q@?`?߀????? ? ?`?`?!?1?A?Q?a ?q ?`?`????? ??`?@?" ?2 ?B ?R ?b?r?`?@????? ??!@? ?"$?2#`?B'?R&?b+?r)?.@?- ?1?0`?4?3?8?6?;@?:?">?2=@?BA?R@?bE?rC?H@?F?K`?J ?N?M?Q?P?U ?S?"X`?2W ?B[?RZ`?b_?r]?b ?`?e`?d?h?g@?k?j?o ?m?"r`?2q?Bu?Rt@?bx?rw?|?z?@?}?‚?ҁ ??`???"@?2?B?R ?b?r`?邖?钔?颙 ?鲗?œ`?қ?⟠?@???"@?2?B?R?b?r ?ꂰ?꒮`?ꢳ@?겱?¶@?Ҵ?⹀? ??`?"?2?B`?R?bƠ?r ??`? ?ˀ?`??Ӡ??֠?@?"?2؀?B ?R?b`?r??@???@????? ?"?2`?B?R?b@?r?? ??`???`?? `? ?# ?3 `?C?S?c ?s?@?@????? ? ?#?#?#&?3' ?C)?S*?c,?s.?.?3@?0@?9?.?G? ???`? ?G?.?9`?0?3 ?.?s.?c,`?S*?C)?3' ?#&?#`?#? ? ????@?@?@?s?c?S?C?3 @?# `? ? `?? ???@?? ?`?r?b@?R?B?2`?"? ???@???`?? ??r?b@?Rۀ?B ?2@?"??֠??`?? ?ˀ??@?ɠ?r?b`?R?B ?2?"? ???⹀?Ҵ?¶@?겱?ꢳ?꒮`?ꂯ?r ?b?R?B@?2?"?`?? ?⟠?Қ?œ`?鲗?颙 ?钔`?邕?r ?b?R?B`?2?" ???@?Ⅰ?ҁ?‚`?}? ?z?|?rw@?bx?Rt?Bu`?2p?"r ?m?n?j`?k?g ?h?d?e@?`?b?r]`?b^?RZ ?B[?2V?"X@?S?U ?P?Q?M@?N?J?K@?F?H?rC?bD?R@@?BA?2=?">`?9?; ?6?7?3`?4?0 ?1`?-?. ?r)?b*?R&?B'?2#@?"$`? ?! ?????@?`? ?@?r?b?R ?B ?2 `?" ? ? ?????`??@?@?q?a?Q?A?1?!?`?@? ??????`?@?q ?a?Q?A?1ՠ?!ր?Ҁ?@?@? ????ɠ?ŀ?`?q@?a ?Q?A?1?!??`?`? ?Ѳ ??౮?࡯??`?q`?a ?Q ?A?1?!???7?8`?ߣ0?߃1?c* ?C+`?##?$? ?`?ޣ?ރ?c@?C?# ? ?@??ݢ?݂?b`?B`?"??`?`?ܢ ?܂?bܠ?Bݠ?" ? ??Ѐ?ۢ@?ۂ?b?BÀ?"@???¶?ڢ`?ڂ?b?B?"? ??œ?٢?ق ?b ?B?"? ? ?‚?آ{?؂| ?bu@?Bu?"n?o ?h`?h?עa?ׂb@?b[`?B[?"U?U ?N?N?֢H?ւH@?bA?BA?"; ?;@?4?4?բ.@?Ղ.@?b'?B'?"!@?!@???Ԣ`?Ԃ`?b ?B ?"?@???ӡ?Ӂ@?a?A?!?`? ??ҡ?ҁ@?a@?A?!?`?`??ѡ?с`?a?A?!?`?᳀??С ?Ё`?a?A?! ??3`?σ1?C&?$??΃?C ? ??͂?B???̂?B ?? ?˂?B@??²@?ʂ?B`??˜?ɂ?B??~?Ȃ|?Bq?o?d?ǂb ?BW?U ?K?ƂH?B> ?; ?1 ?ł. ?B$`?! ?`?Ă ?B ? ??Á ?A? ??@?A? ??@?A?@??@?A ?@?,?$`?? ????֠? ??????w?n?^?T?D ?:?*`? ??????? ??@??? ?@?????m?P@?:?? ? ??? ??`?@?l?5?????i?`??x_?p?`@gv`pxw `u  ; r`ڀ  @  = Sq@ "`Ġ`ހ`` "`,<`EV@_p`y`@@` @@  @`&@.@A A AנAÁB @Ă@"B% ł/2;B?ƂIKVBXǂbeoBrȂ|Bɂ™`B@ʂ³@B ˂B̂B͂ C ΃%C'@σ24`!A`a ЁС@!`A`aсѡ``!@A@aҁҡ@`!A@aӁӡ@"B@b`ԂԢ@`!"!B( b( Ղ.բ.5@5 ;";BB@bBւH֢HO OU"UB\ b[ׂbעb@i ho"o@Bv bu؂|آ| ƒ ₠" B bق٢✀"B bڂڢ· @"Bb`ۂʀۢɠ ׀"֠Bb܂ܢ"Bb݂`ݢ` `# `Ccރ`ޣ@%#$@C+c*߃2@ߣ1 87!1@A Qa`q࡯౯ Ѳ``!1 A Q`a`q Ơ@`πӠҠ!1A Q a`q`ߠ @@!1AQa@q@@ `" 2 B R b r`@@! @"$2#B'R&b+ r).`- 10`438 6;@: ">2=`BAR@bE rCH`GKJ@NMRPU@T"X2W@B[RZb_r]b@`ed hg`ljo@m"r2q BuRt`bxrw| z`~‚ҁ@ "`2BR br邖 钔颙`鲗œқ ` "@2BRbr@ꂰ꒮ꢳ@겱¶ҵ `"@2BÀRbr ` ˠ`Ӡ@Հ" 2B`Rbr@@@"2B@Rbr ``   `# 3 CSc s ``! `$##' 3'@C)S+c,s./3@0@9.@G@``F-9@/2.s.`c,`S*C)3&#&#`# @@@scSC3 @# `  @`rb R`B2 "`` rb@RۀB2@"ր@΀@̠ɠrb`RB 2" `Ҵ¶ 겱`ꢲ꒮ ꂯrb@RB@2`"`⟀Қœ@鲗颙钔@邕rbRB@2"` ⅀Ҁ‚@}z{rw bxRsBu`2p"r mnj@kgh@ce `ar]`b^RZ B[`2V"X STP`QM NIK@FGrCbDR@@BA`2="> 9;673@401@,.r)b*R&`B'2# "$@!` @rbR B 2 @" ` @@ qaQA1`!`  @@qaQA٠1Հ!`` Ƞɀ`@q aQA1!@@Ѳ౮࡯@q`aQA1!@68 ߣ0@߃1c*C+ ##`$ ޣ`ރc C #  @ݢ݂b@B@"@@ܢ܂b`B "``ۢۂb€B`"¶@ڢ ڂbB@" œ`٢`قbB`"`‚`آ{؂{buBu`"nnh h`עaׂab[@B["TUN@N֢GւGbA`BA":;4`4բ.Ղ.b'B'"!!Ԣ Ԃb B "@ ӡ@ӁaA! ҡҁ aA٠!Ӡ ̠ѡƠс a@A! `СЁ a`A! 2σ1@C& $`΃`C @ `@͂`B`̂B؀րˠ˂`B`±ʂB˜ɂB ~@Ȃ{Bq@nd`ǂaBW`TJƂGB=:0ł-B# ĂB  ÁA@@A``AA+# @ՠ`vm]SC@9)` ``  l N8   @@Рh1@`b xPp`g`H(H ?UV ?eV?p?uV?zs???V@?@?v?WM?@?V? ?X ?V?0??W ?w? ?WP`???ɠ?V ?6??V`?Y??V`?{?2?V@? ?S?W ??w?W,`?`??WP??@?Wq@??Vn? ?%?V@? ?7`?V@??G?V??Z ?V?`?i?Vƀ? ?|?V@?2?`?V ?B?`?V?U??W ?e ??W@?x ?`?W.`???W=???WQ??@?W`@??@?Ws?̀??+`?Vp ?? ?w?&@?+Ҡ?V@?-?`?ֈ?7?+?V?>?«?֚?H?+?V?ÁP ?ë ?֫@?Z@?,@?V`?āa`?Ĭ`?ּ?k?,?Vƀ?Łr?Ŭ!??|?,(?V?Ɓ?Ƭ3?? ?,: ?V@?ǁ ?ǬD`?@??,K`?V?ȁ`?ȬU???,\?W ?Ɂ?ɬf?? ?,m?W ?ʁ?ʬx`?$?`?,?W.?ˁ?ˬ?5@??,@?W??́@?̬?F??,?WQ?́?ͬ@?W?@?,?Wb?΂?ά?i??,?Ws?ς ?Ϭ?z@??j?+€?A@?Vp ?k?Ё?Жs@?Ы@? ?x?`?&@?{?+?A)?V`?k?с.?і?ѫ܀?2?֊?ߠ?7? ?+ ?A:?V?k ?ҁ@@?Җ?ҫ?C@?֛`??H?`?+?AK?V?k`?ӁQ?Ӗ?ӫ ?T?֬??Z@??,?A] ?V`?l ?ԁb?Ԗ@?Ԭ`?e?ֽ?`?k??,?An`?VƠ?l?Ձt ?Ֆɀ?լ!?w?@?$?|? ?,*`?A?V?l-@?ց?֖?֬3?@??5? ?`?,;?A?V@?l>?ׁ?ז?׬D`???G ???,M?A ?V?lO?؁ ?ؖ@?جU?? ?X@???,^@?A`?W ?l`?ف`?ٗ`?٬f???i? ? ?,o?AĠ?W ?lr ?ځʠ?ڗ?ڬx`? ?%?z?`?(`?,?A?W.`?l`?ہ ?ۗ0?۬?ޠ?7 ? ??9?,@?A ?W??l?܁@?ܗB ?ܬ??H`?`??J?,?A`?WQ?l?݁?ݗS?ݬ@? ?Y?쮠?@?\ ?,?B ?Wb@?l ?ނ?ޗd?ެ?@?k???m`?,@?B?Ws?lȀ?߂!@?ߗv?߬?#?|@??? @?k?!?+€?6l?A@?Kà?Vp ?a`?k?vq ???t`?? ?u?"?@?x?#?π?y?&@? Ѐ?}?!'`?+?6~ ?A*?K?V@?a+?k ?v`?.?@?ᖅ?0?`?ᶆ?3 ?݀?֊?4@???7? ?@?!8?+?6`?A;?K ?V?a<?k`?v?@ ??▗?A@??⶘?D??֛@?E??`?H? ??!I?+`?6?AM ?K`?V?aN@?k?v?Q??㖨@?R??㶩@?U??֬?V?`??Z ? `??![ ?,?6?A^?L?V@?a_`?l ?v ?b? ?䖹?c?`?䶺?g ?@?ֽ?h???k? ?@?!l`?,?6 ?Ao?L?Vƀ?ap?l@?v`?t? ??u?!??x`?"? ?y@?%??|? &?Ӏ?!}?,*@?6`?A?L+ ?V?a?l.?v?恅`?/? ?框@?2???3??ኀ?7@?`?? 8 ??!?,;?6?A`?L<`?V ?a@?l??v?灖?@??硗?D@?@??E ???H??`? I`? ?! ?,L?6?A?LM?V`?a?lQ@?v@?聨?R??表?U??@?V`? ? ?Y??? Z?`?!?,^ ?7@?A?L_?W ?a?lb?w ?遹@?c@??顺?f???g?@?`?k? ?? k??! ?,o`?7?A@?Lp ?W?a?ls?w?`?t?!@?`?x ?"??x?%?π?|@?&`? ? }@?*?!?,?7*?A׀?L`?W. ?a@?l?w/ ??댅?2?ܠ?묉`?3@??̊ ?6???7?`? ?;@?! ?,?7<?A?L?W??a?l@?w@`? ?쌗?C??쬚?D??̛`?H ?@??H?? ?L?!?,`?7M@?A?L ?WP?a?l?wQ?`?패?U@? ??V??̬?Y`??@?Z@?? ?]?"?,?7^?B @?L`?Wb ?b ?l?wb???f@?? ?g ??̾?j??`?k? ? `?n?"@?,Š?7p ?B@?L?Wr?b?lɀ?wt? @??v?#??z?" ?Ӏ?u?1 ? ???@??1 ?u`?`?" ?z??"?v?? ?wt?lɀ?b?Wr?L?B?7o?,`?"?n? `??k?@??j`?̽??g ??`?f@??`?wb?l?b ?Wa?L ?B @?7^?,`?"?]? ??Z ??@?Y`?̬??U???U?패@? ?wQ`?l?a?WP?L?A?7M?, ?!`?L@? ??H???H ?̛ ?@?D?쬚`??C?쌗??w@ ?l@?a@?W?`?L?A?7;?,?! ?;? @?`?7`?썀??6?̉??3@?묉 ?`?2?댅?۠?w.?l?a ?W. ?L`?A@?7*?,?!?)? }??&@?|@?π?%?x??!?w?@?! ?t`?`?w?ls?a?W?Lp?A ?7`?,o@?!€?? k???k?@?@?g???f?项??c ?遹 ?w `?lb`?a?W ?L^?A?7?,^?!@?@? Z???Y???V ? ?`?U`?表??Q?聧?v ?lQ?a@?V@?LM?A?6?,L?!?? I@? ?`?H`?ᛠ??D?? ?D?硗`?@?@?灖?v?l??a?V?L<@?A ?6?,;`?!?? 7?? ?7?`?@?3???2?框??/@?恅@?v؀?l.`?a?Vנ?L+?A?6@?,* ?!}`?`? &?|??%?y ? ?"`?x@?ˠ?!?t?? ?t?v`?l@?ap?V`?L?Ao?6?,?!l@? ? ?k@???h?ֽ? ?g?䶺`?@?c?䖹`? ?b?v ?l ?a_@?V ?L?A^@?6?,?![?? @?Z?`?@?V?֬`??U?㶩 ??R`?㖨 ??Q`?v?k?aN?V?K@?AM?6?+@?!I?`? ?H? ??E`?֛ ??D`?⶗??A ?▖?@?@?v?k@?a<?V?K?A;?6@?+?!8`? ? ?7`???4 ?։?`?3 ?ᶆ?`?/?ᖅ??.?v@?k?a+?V@?K?A*?6}?+Ӡ?!' ?|? `?& ?y?`?"?x? ?!?u@???t@???vq?kƠ?a@?Vo?K`?A ?6l?+`?!?k? ???|?#`?߬΀?ߗu?߂!?l ?Ws@?B?,?m ?@?쿠?j??ެ@?ޗd`?ނ?l?Wb ?B `?,?[??`?Y`??ݬ?ݗS ?݁`?l?WP?A ?,`?J?? ?H ?`?ܬ?ܗA?܁ ?l`?W?`?A?,?9`?`??6?@?۬`?ۗ0?ہ۠?l@?W. ?Aՠ?,?( ? ?z?%??ڬw?ڗ?ځ`?lr?W?AĀ?,o`???i`?@??٬f?ٗ@?ف ?l`?W ?A ?,^ ???X ???جU`?ؖ?؁?lO`?V@?A?,L?`? ?F??@?׬D?ז?ׁ?l> ?V?A?,;`? ??5?@??֬2?֖ڀ?ց@?l,?Vנ?A`?,* ??|?$@? ?v?լ!?Ֆ@?Ձt?l?V`?An ?,??k@? ?ֽ?e?Ԭ ?Ԗ?ԁb?l ?V ?A]?,?`?Z??֬`?T`?ӫ?Ӗ?ӁQ@?k@?V?AK?+ ? ?H??֛?C ?ҫ?Җ?ҁ@?k?V?A:?+??7`?`?։?1?ѫ@?і@?с.?k?V ?A)@?+Ӡ?{?& ? ?x? ?Ы?Жs?Ё`?kŀ?Vo?A?+@?j`??y?Ϭ@?ς?Ws@?,à? ?h?ά ?΂ `?Wb ?,`??W`?ͬ?́ ?WP?, ??F ?̬`?́?W?`?,? ?4?ˬ ?ˁ٠?W.?,~??#?ʬw?ʁ`?W?,m`??@?ɬf?Ɂ ?W `?,\ ?`??ȬU@?ȁ?V ?,J???ǬC?ǁ?V?,9??ޠ?Ƭ2?Ɓ?V׀?,(?|`?`?Ŭ!@?Łr@?V@?,@?k ?ּ ?Ĭ?āa?V?,?Y?֪?ë?ÁO?V?+?H?֙?«`?>?V@?+`?7 ?ֈ`? ?-@?V?+ ?%?w ???Vo?+???Wr???W_`??`?WP@? ??W=???W-??w?W?@?d`?W ?@?T?V??A?V`??2@?VՀ?| ?`?V?i@??V ?Y`??V ?F??V?6?ڀ?V?$@?`?Vn ? ?Wp? ??WO?`? ?W*?v??W `?R`??V ?1?y?V ? `?X?V ?@?4?V?Ȁ??`?WN??u@?W?`?.?Và?U??V} ??WH?r@??V???zj`?uV?p?eV?UV`gIUVeVޠpuVҠzV̠~`WU V@[V4W {`WT@ˠV7`V [V |4V  UW `zW. @`WR Ws Vo%V@8V@H`V[V@jVǀ!}V 3@VC@VVW fW y `W/`W>WR Wa@@Wt̀`+Vpˠx&+ V. ։@8+`V ?`«@֚I`+V`ÁPë֫Z,VāaĬּl,VŁs Ŭ" }@,)@V`Ɓ`Ƭ3`,:VǁǬD,KVȁȬV @,]W @Ɂ ɬg`@€,n@Wʁ`ʬx$`,W/ˁڠˬ5@,W@@̬́`F`,WQ́ ͬX , Wb΂`άi` ,ĠWt ςϬ`z j+A`Vp@kЁЖsЫ`!y΀&| +A)Vk с/ іѫ2@֊@7`+`A:Vkҁ@ҖҫC֛ I +AL V kӁQӖ@ӫ@T֬`Z`,A]`Vl ԁc ԖԬf־@k ,@AnVl@Ձt`Ֆլ"w@π$} @,*AV@l-`ց֖֬3@6`,;A V`l>ׁז ׬D G@,M@A`VlO؁`ؖجU`X ,^AW la فٗ٬g@@i``,oAW`lr`ځڗڬx͠&{ Ӏ(,A W.lہ@ۗ1@۬7@`9,A`W@l܁ܗBܬH은@K,AWQ@l@݁ݗSݬ@Z\@,B Wblނ ޗeެk@m,`B@Wsl߂!`ߗv@߬#|@ `k!@+ 6mA`KVp akvq@ t`@u"`x# πy&` } !'+6~@A*KV`a+k@v/`ᖅ0 ܀ᶆ3`ݠ֊ 4`@7 `!8+@6A<K@Va=kv@@▗ A`⶘ D֛`E@`I !I+6AM@KV aN@kvQ㖨`R@㶩@V ֬VZ@ `![ ,6A^LV`a_l v@b 䖹c`䶺g `־h k @!l,6@AoLVƠapl`vǀt `u !x"@y`&@| 'Ӡ!},*`6ԀA L+@Val.v恅/@框`3 37` 8@!,;6AL<V@a`l@v 灖@硗D`` E@H I@!@,M6ALMValQ@v`聨 R 表U`V` Y Z`!,^@7@AL_W albw 遹`c` 顺 fg``k@  l!,o7A@Lp`W alswʠt!`x "@x%|&` }@*! ,7*A׀LW.`a@l@w/ 댆2ܠ묉`3@̊ 7 7 ;@!`, 7<ALW?alw@` 쌗@D쬚D̛H`@I  L!,`7M`A L WPalwQ패U@@V̬Y`Z@ ]",7^B `LWb b lwcf`@g`̾@j`k@  o",Š7p BLWs blwt @v#@z"`Ӏu1@ 0u `!z̀"vˀ wtl`bWrLB7o,`"n @k`j`̽g f`wblb WaL B 7^@, "] Y@Y ̬`UT패 wQ`l@aWPLA7M,! L@ `HG̛ D@쬚`C쌖w@la@W?@LA7;,!;  7``6̉3 묉 @2`댅ۀw.la W.L@A@7*`,!) |&@| `%xΠ!w! t`@wlsaƠWLpA7 ,o@!€` kj  g`@f项c遹w @lb@aW `L^A7,]!  Z`@YV@U@表`Q聧vlPa V LM`A`6,L! I@H@ᛀDC硗@ @`灖`vl?aVL< A 6`,;`! 7 7@@32框/@恅 v؀l.`aVנL+A6 ,*!}`@ &|%y "@x ˀ!`tʠsv@lap`V@LAo6,!l  `k `gֽf䶺@c䖹@ bvl a_ VL`A^ 6,`!Z Y@V֬@U㶩R@㖨`Q vk`aMVK AL6`+ !I` HE@֛D@⶗@▖ @v`k@a<V`KA;6+!8@ 7@4։@3ᶆ`@/ᖅ`.v ka+`V KԠA*`6}+Ӏ!'| @&y@"x`!u@t `vqkƀa VoK`A6l+@!k` Р{"߬@ߗu`߂ lWs B`,Šl `jެޗd@ނ`lWaB ,`[Y ݬݗS݁ lWPA,J`G@ܬ`ܗA܁l@W?@A,9 싀6۬ۗ0ہۀlW.AՀ,'z@%@ڬwڗ@ځ@lqWA@,oi٬fٗفl``W `A,]`@W@جU ؖ؁lO VA,L F`׬Cזׁ`l>VA,;@5` ֬2֖@ցl,V׀A@,)Ѡ|`$ vլ!@ՖՁslV An,`kֽe`ԬԖԁb`l @VA\,@ Y֬@TӫӖӁQ kVAK`+H`֚Bҫ`Җ@ҁ?kV@A: +7 ։1ѫіс.kրVA(+`{`%x@ `ЫʠЖrЁ k@VoA+ j@y Ϭς Wr, hά΂ Wa,Vͬ@́WP@,É̬W?,4@ˬˁ@W-,~@Ҁ#ʬw`ʁW`,m ɬf ɁW ,[ȬTȁV,J`@ǬC`ǁ@V@,9 @ Ƭ2@ƁV ,(|Ŭ ŁqV,jֻĬā`V`,Y@֪`ë ÁO`V +@H֙ «>V+6և۠,V+%`v@Vo +Wr W^`WO` @W< W,vW@cW @TV AV1@VԠ{ Vh@V XV@EV5ـV#`ɀVm@@WnWM`W) tWPV /wV@ VV@`3V~ƠWJ`qW@*VR Vy` WAj@V z[uVpeVUVYH)u`?P?`?h0?p̠?t?x4?|g?@?`? ?@?6?O ?i???`?? ?? ??(?6?B?P?\?j?v???`? ?`? ?`? ?@??@? ?`??@?"?*@?/?7@?<?D@?I?Q ?V?^@?c?k ?p?x ?}`?@?`? ?@?π?@@? ?ؠ?܀?@ ????@????@??`??A? ? `?`?A??`?`?A?#?&@?*?A,?0?3 ?7`?A9?=?@@?D`?AF?J?M ?Q`?AS?W?Z ?^`?A`?d?g?k`?Am`?q?t?x@?Az`?~??`?A???`?A`???Ϡ? Р?@?`? ? ?`?@?ܠ? ݠ?@?`? ??`?@?? ?@?`?€ ? ?@?@?? `?@?`?À?à?`? ??!`?A?a?ā ?ġ ? `? ??!`?A?a?Ł ?š?@? ??!@?A ?a!?Ɓ$?ơ$?'@?(?*?!+ ?A-?a.?ǁ1?ǡ1?4@?4?7?!8@?A:?a;`?ȁ>?ȡ>?A@?A?D?!E ?AG?aH`?ɁK?ɡK?N@?N?Q?!R ?AT?aU@?ʁW?ʡX?[ ?[?^`?!_ ?Aa?ab`?ˁe?ˡe`?h@?h?k`?!l?An?ao@?́q?̡r`?u@?u?x?!x?A{?a| ?́~?͡? ?ႀ?`?!?A?a ?΁?Ρ`??Ꮐ?`?!?A?a?ρ?ϡ@? ?ᜠ??? @?0р?@?P ?`Ԁ?p?Ѐ ?А@?Р?а?ـ?٠??@?ܠ?? @?0`?@?P?`?p?р ?ѐ@?Ѡ?Ѱ?`??? ??? @?0`?@?P?`?p?Ҁ ?Ґ@?Ҡ?Ұ?`?????? @?0`?@?P?`?p?Ӏ ?Ӑ ?Ӡ?Ӱ?`?`?? ???!@?1@?A?Q?a`?q?ԁ ?ԑ ?ԡ ?Ա ? `? `?????! ?1 ?A?Q?a?q?Ձ ?Ց ?ա?ձ?`?@?????! ?1 ?A ?Q ?a"?q"`?ց$ ?֑$?֡%?ֱ%?'@?'@?(?(?*?*?!,@?1, ?A-?Q-?a/`?q/`?ׁ1?ב0?ס2?ױ2?4@?4@?6?5?7?7`?!9 ?19?A:?Q:?a<`?q<@?؁>?ؑ>?ء??ر??A@?A ?B?B?D?D`?!F ?1F?AG?QG?aI`?qI@?فK?ّJ?١L?ٱL?N@?N?O?O?Q?Q`?!S ?1S?AT?QT?aV?qV@?ځW?ڑW?ڡY?ڱY`?[ ?[?\?\?^`?^@?!` ?1_?Aa?Qa?ac`?qc ?ہe?ۑd?ۡf?۱f?h@?g?i?i?k`?k ?!m?1l?An?Qn?ap@?qp ?܁q?ܑq?ܡs?ܱs`?u@?u?v?v?x?x ?!z ?1y?A{?Q{`?a}@?q}?݁~?ݑ~?ݡ?ݱ@? ?с???`?@?!?1?A?Q@?a`?q?ށ?ޑ?ޡ?ޱ@??ю?ᐠ??`? ?!?1?A?Q@?a@?q?߁?ߑ?ߡ?߱ ? ?ћ??`??π?Ѐ?`? @?( ?0 ?8?@?H?P?XӀ?`Ԁ?h`?p`?x ? ?????נ?ؠ?؀?`?@? ?????۠?ܠ?܀?݀?@? @?( ?0 ?8?@?H?P?X?`?h@?p@?x ? ???????`?`? ?@???????`?? ? @?(?0?8?@?H?P?X?`?h@?p@?x ? ???????@?`? ? ???????`?`?@? @?(?0?8?@?H?P?X`?`?h@?p`?x????????@?`?? ??????? @?`? ?!@?)?1?9?A?I?Q?Y@?a`?i ?q @?y ? ? ? ? ? ? `? ? @? `? ?? ????`?? @?`??! ?)?1?9?A?I?Q?Y`?a?i ?q@?y??????`?`? ?@?? ?????`?? @?`??! ?)?1?9?A ?I `?Q!?Y!@?a"`?i"?q# ?y"?$?#?$?$?%?%`?&?&?'@?&?( ?'?(?(?)?)`?*? * ?+@?+?!, ?)+?1,?9,?A-?I-?Q.?Y. ?a/`?i/?q0@?y/?0?0?1?1`?2?2@?3`?3 ?4@?3?5?4?5?5?6?6@?7? 7 ?8@?7?!9 ?)8?19?99?A:?I:`?Q;?Y; ?a<@?i<?q= ?y<?=?=?>?>`???? ?@`?@?A@?@?A?A?B?B?C?C@?D`? D ?E@?D?!F?)E?1F?9F?AG?IG@?QH?YH ?aI`?iH?qJ ?yI?J?J?K?K`?L?L@?M`?M?N ?M?O?N?O?O`?P?P@?Q`? Q?R ?Q?!S?)R?1S?9S?AT?IT@?QU`?YU ?aV@?iU?qW?yV?W?W?X?X`?Y?Y?Z`?Y?[ ?Z?\?[?\?\@?]?] ?^`? ]?_@?^?!_?)_?1`?9``?Aa?Ia@?Qb`?Yb?ac ?ib?qd?yc?d?d?e?e`?f`?f ?g@?g?h ?g?h?h?i?i@?j?j?k`? j?l ?k?!m?)l?1m?9m`?An?In ?Qo?Yo?ap ?io?qp?yp?q?q`?r?r@?s`?s?t ?s?u?t?u?u?v?v`?w?w ?x@? x?y ?x?!y?)y`?1z?9z@?A{?I{?Q|`?Y{?a}@?i|?q~?y}?~?~`?? ?@?? ???Ɂ?т?ق`?Ⴠ?@?`? ?@? ???!?)?1?9`?A?I ?Q@?Y?a ?i?q?y??@?? ?@?????Ɏ?я?ُ`?᐀? ?@?? ? ???!?)?1?9@?A@?I ?Q?Y ?a?i?q?y?@?? ???署?ﱚ`?﹛??ɝ@?њ?ٟ?ᘀ?`?`?`??`? ?`?ᘀ?ٟ`?њ`?ɝ ??﹛?ﱚ ?署`??`???@?y?q?i?a?Y?Q?I ?A@?9@?1`?)?!??? ??? ? ?᐀?ُ`?я?Ɏ?????@? ?`?@??y`?q?i?a?Y?Q ?I?A@?9 ?1?)`?!??? ???`??Ⴠ?ق@?т?Ɂ`??? ??@???~`?~?y}?q}?i|?a}?Y{?Q| ?I{?A{`?9z@?1z?)y`?!y?x?x? w?x ?w?w@?v ?v`?u`?u?t?t?s?t ?r?s`?r?r?q@?q?yp`?qp?io?ap ?Yn?Qo@?Im?An`?9m`?1m?)l?!l?k?l? j?k ?j?j`?i@?i?h`?h?g?g?f?g?e?f@?e ?e`?d@?d?yc?qd?ib?ac ?Ya?Qb`?Ia?Aa?9`@?1`?)_`?!_?^?_? ]?^@?] ?]`?\@?\?[?[?Z?[?Y?Z ?Y?Y`?X@?X?W`?W?yV?qV?iU?aV?YT?QU@?IT ?AT`?9S@?1S?)R?!S?Q?R ? P?Q`?P?P`?O@?O?N?N?M?N?L?M@?L?L`?K ?K?J`?J?yI?qI?iH?aI ?YH?QH@?IG ?AG?9F`?1F?)E?!E?D?E ? C?D@?C ?C?B@?B?A?A?@?A???@@?? ??`?>@?>?=`?=?y<?q=?i;?a<@?Y;?Q;`?I: ?A:?99`?19?)8?!8?7?8 ? 7?7@?6 ?6?5`?5?4?4?3?4 ?2?3@?2?2?1`?1?0?0?y/?q0?i.?a/ ?Y.?Q.`?I-@?A-?9,`?1,?)+?!,?*?+ ? *?*`?)@?)?(`?(?'?'?&?' ?&?&@?% ?%`?$`?$?#?#?y"?q# ?i"?a"@?Y! ?Q!`?I `?A ?9?1?)?!?? ? ?`?@??`????? ??`?@??`????y?q?i?a@?Y ?Q`?I@?A?9?1?)?!??@?  ?`?@???? ?? ? ? ? `? @? ? ? ? ? ?y?q ?i?a`?Y@?Q?I`?A?9?1?)?!??@? @?`?`???????@? ?`?@??????x?p ?h ?`@?X@?P?H?@?8?0?(? ??@? ??`???????@? ?`?`??????x?p@?h ?``?X@?P?H?@?8?0?(? ? ?@?@??????? ??@?@????????x?p ?h ?``?X`?P?H߀?@?8?0?(? ? ?`?`?܀?ۀ????? ??@?@?`?`?נ?֠????x?p@?h@?``?X`?PӠ?HҠ?@?8?0?(? ? ?`?`?π?@?`?ћ??߱?ߡ ?ߑ@?߁?q?a?Q?A`?1`?!?? ? ?᐀?ю??ޱ?ޡ@?ޑ`?ށ?q?a?Q ?A@?1?!??@? ?Ⴠ?с??ݱ ?ݡ@?ݑ~?݁~?q|?a}?Q{ ?A{`?1y?!y?w?x ?v@?v`?t?u?ܱs?ܡs`?ܑq?܁q?qo?ap ?Qn@?An`?1l?!l?k?k ?i`?i?g?g?۱f?ۡf@?ۑd`?ہd?qc?ac ?Qa`?Aa?1_?!_?^?^@?\`?\?Z?[?ڱY ?ڡY`?ڑW?ځW?qU?aV?QT@?AT`?1R?!R?Q ?Q`?O?O?M?M?ٱL@?١L`?ّJ?فJ?qI?aI ?QG`?AG?1E?!E?D ?D@?B?B?@?A?ر?@?ء?`?ؑ=?؁=?q<?a< ?Q:?A:?18?!8?7 ?7@?5?5?3?4?ױ2`?ס2`?ב0?ׁ0?q/ ?a/ ?Q-?A-?1+?!+?*@?*@?(?(?'?' ?ֱ%`?֡%`?֑#?ց#?q" ?a" ?Q ?A ?1?!?@?`??? ??ձ`?ա`?Ց?Ձ?q@?a@?Q?A?1?!?`?`??? ? ?Ա ?ԡ ?ԑ ?ԁ ?q@?a@?Q?A?1?!?`?`??? ? ?Ӱ?Ӡ?Ӑ?Ӏ?p@?`@?P?@?0 ? ??`???@? ?Ұ?Ҡ?Ґ?Ҁ?p`?`@?P?@?0 ? ?????@? ?Ѱ?Ѡ?ѐ ?р?p?`@?P?@?0 ? ?܀?`???`? ?а?Рנ?А ?Ѐ?pԀ?``?P?@?0@? ?Ϡ?`???ϡ?ρ?a?A@?!`????Ρ?΁`?a?A@?!`?? ??͡~?́~`?a{?A{ ?!x?x ?u@?t?̡q?́q?an?An@?!k?k?h@?g?ˡe?ˁd?aa?Aa@?!^?^?[`?Z?ʡX ?ʁW?aT?AT`?!Q?Q ?N?M?ɡK ?ɁJ?aG?AG@?!D?D ?A?@?ȡ>@?ȁ=?a;?A:`?!7?7 ?4?3?ǡ1`?ǁ0?a.?A-`?!*?* ?'?&?ơ$`?Ɓ#?a! ?A `?!? ???š`?Ł?a@?A`?!?@? ? ?ġ ?ā ?a@?A?!?@???à?À?`@?@? ? ??? ?€?``?@`? ?@?????`?@߀? ?@?????`Ӏ?@Ҁ? @?`? ? ?A??@? ?A?? ?~?Ay?w?s ?q ?Al?j?f@?d ?A_?]?Y`?W@?AS?P?L`?J ?AF?C???=@?A9?6?2?0@?A, ?)?%?#@?A ???@?A ?? ? `?A@???`?@`???@?@`???`?@`???`?@р???? ??|@?v?o@?i?b`?\?U?O?H`?C?;?6?.?)?!????? ???? ?? ??@??`?t@?h`?Z`?N?@?4?&?? ?????̠?~ ?e?J`?1????ɠ?|^`?x+?t?p?h?`?P`gڲP`hNp۠txC|v@ "=Vq`@  ,:FT`nz@` @ @ @   $, 19 >F KS X`e`mr`z @`@Ѐ@ ـ݀@@``@``A ``A@`A $' +`A-14@8`A:>A E@AGKNR`ATX[_@Aaegl`An`rty@A{`@A@ A@ @@``֠׀ @``@ @`` €  @@`@Àà`!A@a ā ġ @ !A@aŁš`!A!@a"Ɓ$ơ%@'(+!+A.@a/ǁ1ǡ2 45`8!8A; a;ȁ>ȡ? AB`D!EAH aHɁKɡL NO@Q!RAU@aUʁXʡX[\@^!_Ab abˁe`ˡfhi l!l`Aoaór`̡suv@x!y@A| a|́͡ !@A a΁`Ρ !`Aa`ρ@ϡ р0Ѡ@@P``pЀ`А֠Ра@٠@` ހ0@ P@`pр`ѐѠѰ @` 0@ P@`pҀ`Ґ`ҠҰ @` 0@P `pӀ`ӐӠӰ @!1A Q aqԁ `ԑ `ԡ Ա  @!1A Q aqՁ@Ց@աձ@ !`1`A!Q!a"q"ց$@֑$@֡&ֱ%'') ) **!,`1,@A.Q.a/q/ׁ1@ב1@ס2ױ244`6 677!9`19`A;Q:a<q<؁>@ؑ> ء?ر?AA`CCDD!F`1F@AHQGaIqI`فK@ّK ١LٱLNN`P OQQ!S`1S AUQTaVqVځX@ڑX ڡYڱY[`[ ]\^^!`@1` AaQaacqc`ہe@ۑeۡf۱fhh@j ikk`!m@1mAnQnapqp@܁r ܑqܡsܱsu`u@wvxx!z`1yA|Q{a}q}@݁ݑ~ݡݱ`т `!@1AQaq ށ ޑޡޱ`я`! 1AQaq@߁ ߑߡ߱``ќϠРЀ `(@0 8 @HPXӠ`ԠhԀpՀx@@ ؀ـ`@ ܀݀` `( 0@8@HPX`hpx@@@@ @ `( 0@8@HPX`h`p`x@@`@`@ `( 0 8@HPX`h@p`x @``@@ `@!`)1 9AIQYai`q `y ` @  ` !@)1 9AIQY`ai@q`y `@`  ` !@)1 9A I Q!Y!`a"i" q#@y#$ #$$%%&&@'`' (@')())* *@+`+ !,@)+1-9,A-I-Q.Y.`a/i/ q0@y/1 02122`33 4@45 465667 7 8`8!9@)81:99A:I:Q;Y;@a<`i< q=@y<>=>>??@@@ A`@B ACBCC`D D@E`E!F )E1G9FAGIG`QHYH@aI`iIqJ@yIKJKKLL@M`M N@NONOOPP`Q Q@R`R!S )R1T9SATIT@QUYU aViUqW@yVX WXX`YY@Z`Z[ Z\[\\]]`^` ^ _@_!` )_1`9`AaIa`QbYb@ac`ibqd ycedee`ff ggh@ghhii`jj@k` kl k!m)l1m9mAnIn`QoYo ap@ipqq ypqqrr@sst`su@tvuvv`ww x xy x!y)y1z9z`A{I{@Q|`Y| a}@i|q~y}~~` @ Ɂтق@ ` @!)19`AI Q@Ya iqy@` @Ɏяُᐠ`@` !)19A`I@Q@Y aiqy 署ﱚ`﹛ɝ@њٟ饠`΀ @`ٟ`њ ɜ`﹛ﱚ 署``` yqiaYQIA9 1 )@!`  @ُ яɎ` `y@qi`aYQ IA@91) !  `ق@тɁ` @~ ~`y}@q}i|a|Y{Q|IzA{ 9z1z)y@!yx`x wx vw@uv`u uttstrs rr`q@qyp`qpioaoYnQoImAn@9m 1m`)l@!lkk jkij`iih@hg`gfgef@de`d dycqcibacYaQb IaAa@9`@1`)_`!_^^ ]^\]@\ \`[@[ZZYZ XY`XXW WyV`qViUaVYTQU@IT AT`9S@1S)R!RQQ PQ PP@O ON`NMMLM KL@K KJ@JyI`qIiHaIYGQH@IG AG`9F@1F)E`!EDD CD@CC`B BA`A@@?@ ??@> >=`=y<q<i;a< Y:Q;@I:A:99@19)8`!878 67 66`5@54`43323 22`1 10`0y/q/i.a/ Y.Q.@I- A-`9,`1,)+!+*+ )*@))`(`(''&'%& %%`$@$#`#y"q"i!a" Y!Q!`I @A 9`1)! @ `@@ `@yqia YQ`I@A9`1)! `@` @ ` @ yqia@Y Q`I@A91)! @@@ `xph`@X P`H`@80( @ `@` @@`xph`@X PH`@80(   `` `@xp h`@X@P`H`@ߠ8ޠ0(  @``۠ڠ ``׀րՠxph `@X`PӀHҀ@8Ѡ0( @@`@ћ`߱ߡߑ ߁@q`aQA@1 !@ю@ޱޡޑ ށ`qaQA 1@!``с`ݱݡ ݑ~݁~`q|a|Q{A{ 1y`!ywwvv@t`tܱrܡsܑq ܁qqoaoQnAn@1l`!ljki i@gg۱eۡfۑd@ہd`qbabQ`Aa 1_!_]^\@\`ZZڱXڡY ڑW@ځWqUaUQTAT@1R`!RPPO O`MMٱL١L ّJ`فJqHaHQG AG@1E!ECDB@B`@@ر? ء? ؑ=؁=q;a;Q: A:@18!877 5`5`33ױ2ס2 ב0ׁ0q.a/Q-@A-`1+!+**(`(`&&ֱ% ֡%@֑#ց#q"a"Q `A @1! `ձ@ա@ՑՁqaQ`A`1!   Ա @ԡ @ԑ ԁ qaQ`A`1!@ Ӱ@Ӡ@ӐӀp `P@`0 @ Ұ`Ҡ@ҐҀp ` P@`0 @ ѰѠ`ѐрp `Pߠ@`0 `@ڠ а׀Р@АЀՠp@` PҠ@Ҁ0 `@ᛠ ϡ@ρa@A!Ꭰ@Ρ`΁a A!@͡~́~a{ Az!x wtt ̡q́q an@Am!kjgg@ˡdˁdaa`A`!^][Z`ʡWʁW aT`AS!Q PNM`ɡJɁJaGAF!D@CA@`ȡ=ȁ= a:A9!7@64 3`ǡ0ǁ0 a-A,!*`)' &`ơ#Ɓ# a A! šŁ aA! @ `ġ ā @aA!`àÀ@`@ `  €@`@ `@@`@ ـ؀@@`@ A@ A@}@Axvr`p Akiec A^\XV@AROKI@AEB><`A8 51/@A+ ($"@A `A@ `A``@``@`@݀Ԁ@Р@@z`umh `[S`N FA94 ,' @  @@@ @`~pdVJ<0" @v^B*@ ۀ@|O`xtph`PcH*?EU?UV?` ?eV?j?p?rH?uV ?x@?z?}VO??U?J?@?V ?l?@?V.??@?VQ? ??9?U??K?U?`?\`?V ?@?n ?V ???V/???V@???VR`??`?Vc@? ?U ?:?`?U?B??U@?K??U@?T@??V?] ??V ?e`??V?n?@?V?v?`?V' ??׀?V0@???V8`? ??VA?`??VI?`??VR??@?V[?? ?Vd@??`?+6 ?U?`?:???+>?U ??C`? ??+G`?U??L??@?+P?U?@?T???+X?V ??]`? ??+a@?V ??f??@?+i?V? ?n?`??+r?V ??w`?#?π?+{@?V'?Ӏ??+? ?+?V0`???4@??+?V9??`?=??+ ?VA?@??E??+?VJ`???N@??+`?VS??`?V??+ ?V[?@??_`? ?+?Vd`???h@?`? ?+6?@@?U?k8`???:???<???+? ?@?U@?kA?`? ?C?@??E@???+G?@?U?kI?€?•?«L ??@?N?`? ?+P`?@ ?U?kR@?À?Õ`?ëT???V???+Y ?@?V ?kZ?Ā`?Ė?ī]`? ? ?_@?? `?+a?@?V ?kc?ŀ?Ŗ?ūf ?? ?g?`??+j`?@?V?kl@?ƀ ?Ɩ@?ƫn?Ā??p???+s ?@?V ?kt?ǀ@?ǖ!?ǫw`??#?y ?Ϡ?%@?+{?@`?V'?k}`?Ȁ?Ȗ)?ȫ?ՠ?,@??@?-?+`?@?V0?k ?ɀ܀?ɖ2 ?ɫ?`?4?`??6?+ ?@?V9@?k?ʀ@?ʖ:?ʫ`??=`? ???@?+?@@?VA?k`?ˀ?˖C`?˫??F@??@?G?+`?@?VJ`?k?̀?̖L@?̫?@?N?`??P`?+?@?VS@?k?̀@?͖T?ͫ`??W`???Y?+?A@?V[?k`?΁?Ζ]`?Ϋ? ?`?뵀? @?a?+`?A ?Vd`?k?ρ?ϖf?ϫ? ?h?`?`? 5@?? @?+6?5@?@?K7@?U?``?k8?u?Ѐ?Ћ9?Е?Р?Ы:?е??;???=??? =? ? ?+?@?5?@@?K@?U@?`?kA@?u ?р?ыB ?ѕ?Ѡ ?ѫC?ѵ@??D@??`?E?`?? F`?? ?+G?5?@?KH?U?`?kJ?u?Ҁ?ҋJ?ҕ ?Ҡ?ҫL@?ҵ?@?L?@??N@? ?`? O ?? ?+P?5 ?@?KQ@?U?``?kR?u`?Ӏ?ӋS`?ӕ?Ӡ?ӫT?ӵ??U??ૠ?W??? W? ? ?+Y ?6?@@?KY?V@?`?k[`?v?Ԁ`?ԋ\?Ԗ`?Ԡ ?ԫ]?Զ ??^@? ?@?_? @?? ``? ? ?+a?6 ?@?Kb?V ?`?kc?v?Հ?Ջd?Ֆ ?ՠ?իf ?ն? ?f?@??h`??`? i?`? ?+j`?6 ?@?Kk ?V?`@?kl?v@?ր ?֋m`?֖?֠`?֫n?ֶ`??o??ŀ?p??? q? ? Ǡ?+s ?6?@ ?Ks?V ?`?ku@?v?׀`?׋u?ז!`?נ?׫w`?׶" ?̀?x ?#? ?y?$ ?Ϡ? z`?%? `?+{?6&`?@?K|`?V'?`Ҁ?k}?v(?؀?؋~?ؖ*?ؠԠ?ث ?ض*? ?ˀ?,@??@?,?@? ?.`? ?+`?6/?@ڀ?K ?V0?` ?k?v1 ?ـܠ?ً@?ٖ2?٠@?٫?ٶ3`??ˉ`?4?߀??5?? ?7? ?+ ?67?@?K?V9@?`?k ?v9?ڀ@?ڋ?ږ;`?ڠ?ګ`?ڶ;??˒?=? ?듀?> ?? @??? ?+?6@@?@?K`?VA?``?k?vB?ۀ?ۋ`?ۖD?۠?۫ ?۶D? ?˚?F@?? ?F?@? ?H`? ?+`?6H?@?K?VJ`?`?k?vK ?܀?܋@?ܖL?ܠ ?ܫ?ܶM@??ˣ@?N?`??O?? `?Q? ?+?6Q?@ ?K?VS@?`?k ?vS?݀@?݋?ݖU@?ݠ?ݫ`?ݶU??ˬ?W`??뭀?X ?? ?Y?! ?+?6Z@?A?K@?V[?a`?k?v\@?ށ?ދ`?ޖ^?ޡ?ޫ?޶^? ?˴?`? ? ?`? @? ?b@?! ?+`?6b?A?K?Vd`?a?k?ve ?߁?ߋ?ߖf?ߡ ?߫?߶g ??˽@?h?`??i@?`?? 5???5? ?%?+6?0?5?;6?@?E?K7?P?U?[8?`?e?k8?p?u?{9???9? ??:?ࠏ? ?:?ఐ ??; ??@?;?Б ??<@??@?=?@? ?=`??`? > ?`? ?>`? ?%`?+?@?0`?5 ?;??@@?E?K@@?P?U@?[@?``?e?kA@?p?u`?{A?ဗ??B`?ᐗ??B?᠘??C?ᰘ??C???D?Й??D???E???F??? F???G? ?%?+G?0 ?5?;H?@?E ?KH?P@?U?[I ?`?e@?kJ?p@?u ?{J@?†?`?K ?␠@? ?K`?⠡ ?`?L@?Ⱑ`? ?L?@?`?M@?Т?@?M?`??N@??`?N?`?? O`???O? ?%?+P?0?5?;P?@?E?KQ?P?U?[Q?`?e?kR?p?u?{R?〨??S?㐩??T?㠩??T?㰪??U?? ?U?Ы ??V ?? ?W?@??W@??@? X?@? ?X@? ?&`?+Y ?0`?6 ?;Y`?@ ?F`?KZ@?P`?V@?[Z?`@?f?k[`?p?v@?{[?䀱`??\`?䐱?`?\?䠲??]`?䰲??]???^?г? ?^?ഠ? ?_?? ?_?? ? `?? ?a? ?& ?+a?0?6 ?;b?@?F ?Kb?P ?V ?[c?`?f ?kc?p@?v?{d ?债?@?e?吺@? ?e@?堻?`?f ?尻@? ?f`? ?`?g@?м`? ?g?@?`?h`??@?h?`?? i`??`?i? ?&?+j`?0?6?;j?@?F?Kk?P?V?[k?`?f?kl?p?v?{l? ??m???m???n???o???o???p ?? ?p? ??q ?? ? r?@??r@? ?&@?+s ?0@?6 ?;s@?@ ?F`?Kt ?P`?V ?[t`?`@?f`?ku@?p`?v @?{u?@? ?v`?ˀ?!`?v?`?!?w`?̠?"`?w?̀?"?x??#?x?΀?#?y??$?y?Ϡ?$? z??%?z? Р?&%?+{?0?6&?;|?@?F&?K|?P?V'?[}?`?f(?k}?p ?v(?{~ ??) ?? ?*? ??*@?諀?@?+ ?軀@? ?+@?ˁ ?@?,@?ہ`? ?,`?@?`?-@?`?@?-`? `?؀?.@?? `?&.?+`?0ـ?6/`?;?@ڀ?F/?K`?Pڠ?V0?[?`ۀ?f0?k?p?v1?{?܀?1?鋇??2?雇?ݠ?2?髈??3?黈??4?ˉ??4?ۊ??5???5? ??6? ?@?7? ? ?&7 ?+?0 ?68 ?;@?@?F8@?K?P@?V9@?[`?` ?f9`?k ?p@?v:@?{?@?:?ꋐ@?`?;@?ꛐ`?`?;?꫑`??<@?껑??<?˒`??=`?ے??=?듀??>???>? ????? ?&??+?0?6@?;?@?F@?K?P?VA?[?`?fB?k?p?vB?{ ??C?님??D?뛙 ??D ?뫙? ?E ?뻚@? ?E@?˛?@?F?ۛ ? ?F`? ?@?G ?@?@?G? @?`?H@?`? `?&H?+`?0?6I@?;?@@?FI?K`?P?VJ`?[?``?fJ?k?p?vK?{??K?싡??L?웡??L?쫢??M?컢??M?ˣ??N?ۤ??O???O? ??P? ??P?? ?&Q ?+?0 ?6Q?; ?@ ?FR@?K?P@?VS?[ ?` ?fS`?k ?p`?vT ?{@? ?T@?틪@?`?U@?훪`? ?U`?`??V@??@?V?ˬ`??W`?۬?`?W?`??X???X? `??Y??!?&Y?+?1?6Z?;?A?FZ?K?Q?V[?[?a?f\?k?q?v\?{??]???]?? ?^ ?? ?^? ? ?_?˵? @?`?۵ ? ?` ? ? `?a ?@? ?a@? ? `?b@?`?! ?&b`?+ ?1 ?6c@?;?A@?Fc?K@?Q?Vd@?[?a`?fd?k`?q?ve@?{?@?e???f`??`?g?﫼`??g@?﻽ ?@?h@?˽?`?g?ۿ? ?k?뻀?`?^`?@?? ?^`?`?@?j? ?۾?g?`?˽?h? ?ﻼ?g ??﫼 ?f? ??f@??@?e?@?{?ve@?q?k ?fd?a ?[`?Vd@?Q`?K@?Fc?A ?;@?6c ?1 `?+ ?&b`?! ? ?b? @? ?a@? ? ?`? ??` ? ?۵?_? ?˴?_? ? ?^???^???]???\??{?v\?q?k?f[?a?[?V[?Q?K?FZ?A?;?6Z?1?+?&Y?!`??Y`?? `?X?@??X@??`?W`?`?۬`?W@?`?ˬ@?V?@?@?V ?@? ?U`? ?훪 ?U?@?틪?T@? ?{ ?vT ?p ?k?fS ?`?[ ?VS?P?K?FR?@?; ?6Q?0?+?&Q? ??P?? ?O???O???N??ۣ?N??ˣ?M??컢?M??쫢?L??웡?L`??싡`?K??{?vK@?p?k`?fJ?``?[`?VJ@?P`?K@?FI?@@?;@?6I ?0@?+ ?&H`? ?`?H@?@? ?G@??@?G ? ??F ??ۛ ?F??˚?E??뻚 ?D? ?뫙?D??뛙?C??님?B??{?vB?p?k?fA?`?[?VA?P?K?F@?@?;?6@?0?+?&?? ???`?? `?>???>@??`?=?`?ے?=`?`?˒@?<?@?껑?<@?@?꫑ ?;`? ?ꛐ`?;@?@?ꋐ?:@??{@?v: ?p@?k ?f9 ?`?[ ?V9?P@?K?F8?@?; ?67?0 ?+?&6? ??6?? ?6???5???4?ߠ?ۉ?4??ˉ?3?ހ?黈?3??髈?2?݀?雇?2?ܠ?鋇`?1?܀?{?v1`?p۠?k`?f0?``?[?V0@?Pڀ?K`?F/`?@@?;?6/@?0`?+@?&.`? ?`?.@?@? ?-`? ?@?- ?@??,@??ہ ?,?@?ˁ?+ ??軀 ?*? ??*?? ?)??~?(??{~?v(?p?k}?f'?`?[|?V'?P?K|?F&?@Ѡ?;{?6&?0?+{?&%? Ѐ?z?%?? z?$?π?y?$?Π?y`?#?`?x?#`?̀?x`?"?`?w?"@?`?w@?!`?@?v`?! ?`?v@? `? ?{u@?v ?p@?ku ?f@?`?[t@?V ?P@?Kt?F ?@?;s ?6?0 ?+r?& ? ?r ??? q???q???p???o???o??Ġ?n???n??À?m???m??€?{l?v?p?kl`?f?`?[k?V`?P?Kk`?F?@`?;j?6@?0?+j`?&`? @?i?@?`? i@?`? ?h`? ?@?h ?`? ?g@? ?м@?g?@??f ??尻@?f? ?堻?e ??吺 ?d??倹?{d?v?p?kc?f?`?[c?V ?P?Kb?F ?@?;a?6 ?0?+a?& ? ?`? ?? `? ??_? ??_? ?ഀ?^? `?г?^`??`?]?`?䰲?]`??䠲@?\?@?䐱?\@?`?䀱@?{[`?v ?p`?k[ ?f`?` ?[Z`?V ?P@?KZ ?F@?@?;Y@?6?0@?+Y?&@? ?X ?? ? W? ??W?? ?V???V??Ы?U???U??㰩?T??㠩?S??㐨?S??〨?{R?u?p?kR?e?`?[Q?U?P?KQ`?E?@?;P?5`?0?+P@?%? `?O?@?? O@?`?@?N? ?`?N@?`? ?M`? ?Т@?M ?`??L@? ?Ⱑ@?L?@?⠡?K ??␠@?J? ?†?{J ?u?p ?kI?e?`?[I?U?P?KH?E?@?;H?5?0?+G?%? ?F??? F???E???E???D??Й?D???C?`?ᰘ?C`??᠘`?B?@?ᐗ?B@??ဗ@?{A?u@?p?kA@?e`?` ?[@?U ?P`?K@ ?E`?@ ?;?`?5 ?0@?+??%`? ?>@?? ? >?@??= ?? ?<? ??<??Б ?;???;??ఐ?:??ࠏ?:???9???{8?u?p?k8?e?`?[7?U?P?K7?E?@`?;6?5?0?+6`?%? `?5?`?? 5@?߀?`?i ?뾀??h`?˽??߶f?߫`?ߡ?ߖf`?ߋ?߁@?vd?k ?a?Vd@?K?A ?6b?+ ?! ?b? `? ?`?? `?_?˴@? ?޶^@?ޫ?ޡ ?ޖ]?ދ@?ށ?v\ ?k?a?V[?K?A?6Y?+`?!?Y`? ?@?W?`??W@?˫? ?ݶU?ݫ ?ݠ?ݖU?݋`?݀ ?vS?k?``?VR?K`?@?6Q@?+? ?P? @??O ?뤀? ?N?ˣ??ܶL?ܫ`?ܠ?ܖL`?܋?܀@?vJ?k`?`?VJ@?K?@?6H?+ ? ?H? ??F???E?˚`??۶D@?۫?۠`?ۖC?ۋ@?ۀ?vB@?k?` ?VA?K?@?6@ ?+? ??`? ?@?=?`??=@?ˑ?@?ڶ;?ګ ?ڠ?ږ;?ڋ?ڀ?v9?k?`?V9?K`?@?67?+? `?6? @??5@?늠? ?4?ˉ ?ހ?ٶ3 ?٫?٠?ٖ2`?ً?ـ`?v0?k`?`?V0@?K?@@?6.?+ ? ?. ? ??,??ր?,?ˀ??ض*?ث?ؠ`?ؖ)?؋~`?؀?v(@?k}?`@?V'?K|@?@р?6& ?+{? ?%? z?`?$?y`??#@?w?@?׶!?׫w@?נ?ז! ?׋u?׀?v?ku?`ɠ?V?Ks?@?6?+r? ǀ?? q`??`?p?@??o@?Ā?ֶ ?֫n?֠ ?֖?֋m ?ր€?v?kl`?`?V@?Kj?@@?6?+j@? ? ? h? ??h?༠??f??ն?իe?ՠ?Ֆ?Ջd`?Հ?v`?kc?``?V ?Kb@?@?6 @?+a? ? ? ` ?? ?_`?? `?^?@?Զ?ԫ]@?Ԡ?Ԗ ?ԋ[?Ԁ ?v?k[ ?`?V?KY?@?6?+X? ?? W???V?`??U@??ӵ@?ӫT?Ӡ@?ӕ?ӋS@?Ӏ?u ?kR`?`?U`?KQ?@`?5?+P@? ? ? N? ??N ?? ?L??ҵ?ҫK?Ҡ?ҕ?ҋJ?Ҁ?u?kI?``?U?KH`?@?5`?+G? @?? F@?? ?E`? ?`?D ?`?ѵ?ѫC@?Ѡ?ѕ@?ыA?р ?u?kA ?`?U ?K??@?5?+?? ?? =???<???;`??е`?Ы:?Р`?Е?Ћ9@?Ѐ?u@?k8?` ?U?K7 ?@`?5 ?+6@? ?@? 5?@??h`??ϫ ?ϖe?ρ ?k?Vd?A ?+?a@? ? ?_? ?Ϋ?Ζ]?΁?k?V[`?A?+ ?X? ?묀?W??ͫ?͖T`?̀?k`?VR?@?+?P???N`??̫`?̖K?̀?k?VJ?@?+?G`??`?E?@?˫?˖C?ˀ?k?VA`?@?+`?>?@??=??ʫ?ʖ:`?ʀ?k`?V8?@@?+?6 ???4`??ɫ`?ɖ1?ɀ ?k?V0 ?@ـ?+?-??`?+?@?ȫ?Ȗ) ?ȀӀ?k}?V'`?@?+{`?$?@?x?# ?̠?ǫw?ǖ ?ǀ?kt`?V?@`?+r? ?ƀ?p ???ƫn`?Ɩ?ƀ@?kk?V ?@?+j???g??`?ūe?Ŗ@?ŀ?kc@?V ?@?+a`? ?@?^? ??ī]?Ė?Ā?kZ?V?@`?+X?`??V@?? ?ëT`?Õ?À`?kQ?U ?@?+P ???M??`?«K?•`?€?kI@?U?@ ?+G`? ?`?E? ??C ???k@?U?@?+>???<@??@?:??`?k8?U@?@?+6 ???g`??@?Vc?+? ?^? ??V[?+`??V ???VR`?+??M`??@?VI?+ ??D?`??VA?+??< ???V8`?+??3??`?V/?+ ?׀?+?`??V' ?+z??"@?v? ?V`?+q?@??n?`?V?+i@?? ?e@??V ?+`???\?@?V?+X?@??T??U?+O`?? ?K`??U ?+F???B?`?U?+> ?`??: ??U?+5???Vb? ??VY??@?VQ?? ?VH`???V@ ???V7 ?߀??V/?`?~?V%? ?u?V??m@?V??d@?V `??[?V`??R?U??J?U?@?A?U?@?9@?U??V`???VP ? ?@?V>`?@?`?V-?|?̠?V?k??V ?Z ??U@?I ?`?U@?7?`??VM ???V*?ɠ?h`?V??F ?U??}VF?z`?x@?uV?r??p~?jy?eU?`r`?UU ?EU gEVlUV=`eV%jp`rWuVx@z}V^`UR@Vt`ՠV6 `VY `=U`O@U` ` VqV!V3`VD`@ VV@ VgU<``UD@U@MU@VV_Vg`Vp` V x V)ـV2 V:@VC` VK`VT` V\ @Vf@+7U@;+?U D` +H`UM +PU` U`+YV ^` +b@Vf +jV`o@+sV x@#Ѐ+| V(`, +V1@5@+`V: =+ VB@F` +VK@O@+`VT W+V\@`` +Ve@i+6@U k8 ;@`= @+?@`UkAC E +H`@U`kJ €• «L`N`+P@UkRÀ ÕëU@`W  +Y@@Vk[`ĀĖī] _  +b@@V`kdŀŖ ūf@h`+j@VklƀƖƫo@@qǀ +s@ Vku`ǀǖ!`ǫẁ$y%+|@@V(@k}ȀԀȖ*ȫ ,@.`+@ڀV1kɀ ɖ2ɫ 5@7+@V9k ʀʖ;`ʫ>듀 ?+ @VB@kˀ˖D˫ F H@+@VKk̀ ̖L̫ O@@Q+@ VSk ͖̀U@ͫ@W뭀 Y+ AV\@k΁@Ζ]Ϋ `  b@+A@Vdk`ρ ϖf`ϫ i@ 5` `+65@K7U`k8uЀЋ9Е РЫ; е ; =@` >` +?`5 @K@@U`@kAu@рыB`ѕѠѫCѵDE F +H 5@ KHU `kJ@uҀ@ҋKҕ`ҠҫL`ҵ M@@N@ O@ `+P5@KQU`kRuӀӋSӕӠӫUӵ U W@@ W@ +Y`6 @KZ V` k[v Ԁԋ\`ԖԠ`ԫ]Զ`^` ഀ_ ` +b6 @KbV `kd@vՀ@ՋdՖ@ՠիf`նg  h i@ @+j6`@Kk`V`klvր֋m֖֠à֫oֶo q@@ q@ +s`6@`KtV`kuv ׀ˀ׋v@ז!נ@׫w׶"@x`#΀y$ z% Ѐ+|6&@K|V( `k~ v(؀ ؋~ؖ*@ؠث`ض*`ˁ,`낀- ؀ . +6/@@ڠK`V0``kv1`ـً`ٖ2٠݀٫ٶ3 ˉ5 ߠ 5@ 7@ +`67@@KV9``kv: ڀڋږ;ڠ ګڶ<@˒@=`>@ `? +6@@ KVB`k vBۀ ۋۖD@۠۫`۶D@˚F`뜀G H +6I @K@VJ``kvK@܀܋`ܖLܠ`ܫܶM ˣO O Q@ +`6Q@@KVS``k`vS݀݋ݖUݡ ݫݶV ˬ@W X@ `Y!`+6ZAK`V\ak v\ށ ދޖ^@ޡޫ ޶^ @˴`` `` b`! +6c AK@Vda kve@߁ߋ@ߖfߡ`߫߶g@˽`ii 55 %+605;7@EK7PU[8`ek8p u{9 9 : ࠐ@;ఐ ;@`< Б@ <` `= ` =@` >@@> @%+?@05`;?@`EK@`PU`[@`ekApu{AဗBᐗB᠘CᰘCDКEEF F G % +G0@5;H@@E@KIP@U [I@`e`kJ p`u {J`† `K@␠`@K⠡@L@Ⱑ@L`M`Т`MࣀN`N OO %+P05;P@EKQPU[R`ekRpu{S〨S㐩 T㠪 T㰪@U @VЫ@ V@`W @ W` ` X@` X @&`+Y@06@;Y@`FKZ`PV`[Z``fk[`pv{[䀱\䐱\䠲]䰲]^г ^ _ ` ` a & +a0 6 ;b @F KcP@V[c@`f@kdp@v {d@债 `e 吺` e`堻@`f@尻`@f@g`м`g`h``h ii &+j06;j@FKkPV[k`fklpv{mmnn o  o p @q@ q@@ r @@r` &`+s@0`6@;s`@@F`Kt`PɀV@[t``fku`pʀv `{uˀ v`ˠ!v̀!w"ẁ"x#xΠ#y$y$ z%{ &&+{06&;| @F'K|P V([} `f( k~p@v){~ )@ @* @ *`諀 @+@軀`@+ˁ@`,@ہ@,``׀-``- `ؠ.` ـ&.+06/;@ڀF/KPV0[`۠f0kpv1{ܠ1鋇2雈3髈3黉4ˉ 4ۊ 5 6 @6@ @7 &7`+ 0@68 ;@@@F8K@P`V9@[```f9k`pv:@{@:ꋐ`;`ꛐ`;꫑<껑<˒=ے=듀>> ? &@+06@;@FAKPVA[`fB kp vB{ C@닙@D뛙 D 뫚 @E 뻚@ E@˛@`F@ۛ` F``G@@G ``H` `&H+`06I;@FIK`PVJ[`fJkpvK{K싡L웡M쫢M컢NˣNۤO O P @Q &Q + 0`6R ;@@ FR@K@P@VS@[`` fS`k p`vT@{@T틪@`U`훪`U`VVˬ`W`۬W뭀XX Y!&Z+16Z;AFZKQV[[af\kq v\{ ]@^ ^  _ @ _@˵ @`@۵` `` `a  @a @ `b@! `&b+`1 6c@;A@FcKQVd`[a`fdkqve{ef`g﫼 g﻽ @h@˽@hۿ`k 뻀^@^ @@j۾g@˼h ﻼg 﫼 f f@e {ve q`k fd`a [`VdQ@KFc@A ;@6b1 +&b !  b a ` ` ۵_ ˴^ ^]]\{v\qkf[a[V[`QK`FZA;6Z@1+`&Y!``Y@` @X@@X@@ W` ۬`W@@ˬV@ @V U 훪 U틪T{ vSp kfS`[VRPKFQ@;6Q0+&P P OO뤀NۣN`ˣ`M컢M쫢`L`웡L``싡@K@{vK@p@k fJ`` [`VJ@P@K@FI@@;@6I 0@+ &H  H@ G F FۛE˚E뻙D뫙D뛘C님B{vBpkfA`[VAPK`F@@;6@0+`&? `?`` `>`@>@`=` ے`=@`˒@<@껑@< @꫑ ; ꛐ ;@ꋐ:@{ v9p kf9 `[V8PKF8@;670+&6 6 55늠4߀ۉ4ˉ3ހ黈3ݠ髈`2݀雇2`܀鋇`1`{v1@p`k`f0``@[`V0@P`K@F/`@ ;@6/@0@+ &.@ @. @ - - , ہ +ˀ+軀*)~)~(Ӡ{}v(pk}f'`Ҁ[|V'PK|F&@р;{6&0Р+{`&% Ѐz%`Ϡ z`$`y$@΀y`#`@x#@`x@"` w`" @w !` v@! @v @{u v p@kuf `[t VP KsF@;s 60+r& r qppŠooĀnnÀm m``{lv`pkl`f``[kV@PKk@F`@@;j`6 0`+j@&` i` @ i @h@ @h@g м f f尻 e堺e吺d倹{dvpkcf `[bV PKbF @;a6 0+a& `  `` _ `_` `^ @г^@`@]@䰲`]@`䠲 \` 䐱@\ `䀱 {[@v p@k[f@`[Z VP@KYF @;Y 60 +X& X WWVૠUЪUT㰩T㠩S㐨S〨{Ru`pkR`e``[QU`PKQ@E@@;P5@0+P@%` @O` ` O ` N` @N @M@Т M@L Ⱑ K ⠠K␠ J‟{JupkIe`[IUPKHE@;G50+G% F FEE`D`ЙD@`C@ᰘC@᠘@B ᐗ`B@`ဗ {A`u p`kA e``[@@U P@K@E@@;?@50 +>% >  = =<<Б;:ఏ:ࠏ99{8upk8`e``[7U`PK7`E@`;65@0+6@% @5@ 5@` h`h@˼@߶f߫ ߡߖfߋ߁ vdka`VdK`A 6b@+! `a @ ` _˴ ޶^ ޫޡޖ]`ދށv[k`aV[@KA@6Y+ !Y@  WW˫`ݶUݫݠ`ݖT݋@݀vS@k` VRK@@6Q + P` N`N`ˢ@ܶLܫ ܠܖL@܋܀vJk `VJK`@6H+ `G `F@ E˚@۶D ۫۠ ۖCۋۀvAk``VA`K@@6?+ ?@ = =ˑڶ;ګڠ`ږ:ڋ`ڀv9@k``V8K@@67 + 6 5 `4`ˈ@ٶ2٫@٠ٖ2 ًـ v0k `ڠV0K@6.+ ؀- `,``+ˀ`ՠض* ثؠ ؖ)؋~ ؀Ӏv( k}``V'`K{@`6%+{` % y #y ͠# w׶!׫vנˀז ׋u׀v`kt``VKs@@Ƞ6@+r @ q@ƀ p``o`ֶ֫n`֖֠@֋lր vkl `V Kj@6+j  hgༀf`ն@իeՠ@ՖՋd@Հv kc` V Kb@`6 +a@  @ _@ _@ ]Զԫ]ԠԖԋ[ԀvkZ``VKY`@6`+X ` W@ V U ӵ ӫT@Ӡӕ@ӋRӀ@ukR@`U KP@5+P  NMࢀLҵ`ҫKҠ`ҕҋJ@Ҁu@kI`@UKH @`5 +G` ` F@E@ C ѵѫC ѠѕыAрuk@`UK?@5+> ` =`@<@;@`е Ы:`Р Е`Ћ9Ѐ`uk8@`U K6@ 5+6  4`g@ϫϖe@ρk VcA +`` @_@Ϋ Ζ\΁k`VZA@+X  V͖ͫS̀@kVR@@+ O룀N@̫̖K ̀k VI@+G@E ˫ ˖BˀkVA@+>` <ʫʖ:ʀkV8 @+ 5뉀4݀ɫɖ1`ɀk@V/@ +-׀+@ȫ@Ȗ(Ȁk|V'@Ѐ+z$`x@" ǫvǖ ǀʀktV@@+r@ oÀƫmƖƀkk@V@@+i g`ūe@Ŗŀ kbV @+` ^`@ī\Ė Ā`kZ V`@+X@ U ëSÕÀkQ`U@`+O@M `«K@•€ kHU @+GD`B@k@@U@+>@@;:k7U@`+5`f`@Vb+  ]`VZ+@U VQ`+@L@VH+ D@V@+;`V7`+@2`V.+@ր* ~@V& +y!`u V+q@mV+h@ d`V +_[`V+W `S U+N`@JU@+EA`U+= `9 U+4Va@VW@VO@VF V>`V5`ݠV-`|V$@sV@k`Vb`V Z VQ U@HU@@?U`7UV] @ VL@`V:V)xVh V V`@UE`U3VE@V" `V` >U݀}}V7zv`x@uUr1poj[@eU `T`UU`EU6lmms-1.1.3/doc/000077500000000000000000000000001247673406200132445ustar00rootroot00000000000000lmms-1.1.3/doc/CMakeLists.txt000066400000000000000000000011611247673406200160030ustar00rootroot00000000000000FIND_PACKAGE(Doxygen) if(DOXYGEN_FOUND) set(INPUTDIRS "\"${CMAKE_CURRENT_SOURCE_DIR}../src/core\" \"${CMAKE_CURRENT_SOURCE_DIR}../src/gui\" \"${CMAKE_CURRENT_SOURCE_DIR}../src/tracks\" \"${CMAKE_CURRENT_SOURCE_DIR}../include\" \"${CMAKE_CURRENT_SOURCE_DIR}../plugins\"") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMENT "Generating API documentation with Doxygen" SOURCES Doxyfile.in) endif(DOXYGEN_FOUND) lmms-1.1.3/doc/Doxyfile.in000066400000000000000000003044171247673406200153700ustar00rootroot00000000000000# Doxyfile 1.8.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = LMMS # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = doc/ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be # part of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. # # Note For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = YES # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined # locally in source files will be included in the documentation. If set to NO # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO these classes will be included in the various overviews. This option has # no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = YES # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the # todo list. This list is created by putting \todo commands in the # documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the # test list. This list is created by putting \test commands in the # documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES the list # will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. Do not use file names with spaces, bibtex cannot handle them. See # also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO doxygen will only warn about wrong or incomplete parameter # documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. # Note: If this tag is empty the current directory is searched. INPUT = "@CMAKE_CURRENT_SOURCE_DIR@/../src/core" \ "@CMAKE_CURRENT_SOURCE_DIR@/../src/gui" \ "@CMAKE_CURRENT_SOURCE_DIR@/../src/tracks" \ "@CMAKE_CURRENT_SOURCE_DIR@/../include" \ "@CMAKE_CURRENT_SOURCE_DIR@/../plugins" \ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank the # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. FILE_PATTERNS = *.cpp \ *.c \ *.h # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = plugins/zynaddsubfx/src/ \ plugins/zynaddsubfx/fltk/ \ plugins/ladspa_effect # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- # defined cascading style sheet that is included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefor more robust against future updates. # Doxygen will copy the style sheet file to the output directory. For an example # see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to NO can help when comparing the output of multiple runs. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler ( hhc.exe). If non-empty # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( # YES) or a normal table of contents ( NO) in the .chm file. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using prerendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /

* * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DATA_FILE_H #define DATA_FILE_H #include #include #include "export.h" #include "lmms_basics.h" class EXPORT DataFile : public QDomDocument { public: enum Types { UnknownType, SongProject, SongProjectTemplate, InstrumentTrackSettings, DragNDropData, ClipboardData, JournalData, EffectSettings, TypeCount } ; typedef Types Type; DataFile( const QString& fileName ); DataFile( const QByteArray& data ); DataFile( Type type ); virtual ~DataFile(); QString nameWithExtension( const QString& fn ) const; void write( QTextStream& strm ); bool writeFile( const QString& fn ); QDomElement& content() { return m_content; } QDomElement& head() { return m_head; } Type type() const { return m_type; } // small helper class for adjusting application's locale settings // when loading or saving floating point values rendered to strings class LocaleHelper { public: enum Modes { ModeLoad, ModeSave, ModeCount }; typedef Modes Mode; LocaleHelper( Mode mode ); ~LocaleHelper(); }; private: static Type type( const QString& typeName ); static QString typeName( Type type ); void cleanMetaNodes( QDomElement de ); void upgrade(); void loadData( const QByteArray & _data, const QString & _sourceFile ); struct EXPORT typeDescStruct { Type m_type; QString m_name; } ; static typeDescStruct s_types[TypeCount]; QDomElement m_content; QDomElement m_head; Type m_type; } ; const int LDF_MAJOR_VERSION = 1; const int LDF_MINOR_VERSION = 0; const QString LDF_VERSION_STRING = QString::number( LDF_MAJOR_VERSION ) + "." + QString::number( LDF_MINOR_VERSION ); #endif lmms-1.1.3/include/DetuningHelper.h000066400000000000000000000026431247673406200172150ustar00rootroot00000000000000/* * detuning_helper.h - detuning automation helper * * Copyright (c) 2007 Javier Serrano Polo * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _DETUNING_HELPER_H #define _DETUNING_HELPER_H #include "InlineAutomation.h" class DetuningHelper : public InlineAutomation { public: DetuningHelper() : InlineAutomation() { } virtual ~DetuningHelper() { } virtual float defaultValue() const { return 0; } virtual QString displayName() const { return tr( "Note detuning" ); } inline virtual QString nodeName() const { return "detuning"; } } ; #endif lmms-1.1.3/include/DspEffectLibrary.h000066400000000000000000000152241247673406200174670ustar00rootroot00000000000000/* * DspEffectLibrary.h - library with template-based inline-effects * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DSP_EFFECT_LIBRARY_H #define DSP_EFFECT_LIBRARY_H #include "lmms_math.h" #include "templates.h" #include "lmms_constants.h" #include "lmms_basics.h" namespace DspEffectLibrary { template class MonoBase { public: typedef class MonoBypass bypassType; static void process( sample_t * * _buf, const f_cnt_t _frames ) { for( f_cnt_t f = 0; f < _frames; ++f ) { _buf[f][0] = T::nextSample( _buf[f][0] ); } } } ; template class StereoBase { public: typedef class StereoBypass bypassType; static void process( sample_t * * _buf, const f_cnt_t _frames ) { for( f_cnt_t f = 0; f < _frames; ++f ) { T::nextSample( _buf[f][0], _buf[f][1] ); } } } ; template class MonoToStereoAdaptor : public StereoBase > { public: MonoToStereoAdaptor( const FXL& monoFX ) : m_leftFX( monoFX ), m_rightFX( monoFX ) { } MonoToStereoAdaptor( const FXL& leftFX, const FXR& rightFX ) : m_leftFX( leftFX ), m_rightFX( rightFX ) { } void nextSample( sample_t& inLeft, sample_t& inRight ) { inLeft = m_leftFX.nextSample( inLeft ); inRight = m_rightFX.nextSample( inRight ); } FXL& leftFX() { return( m_leftFX ); } FXR& rightFX() { return( m_rightFX ); } private: FXL m_leftFX; FXR m_rightFX; } ; template class StereoToMonoAdaptor : public MonoBase > { public: StereoToMonoAdaptor( const FX& fx ) : m_FX( fx ) { } sample_t nextSample( sample_t in ) { sample_t s[2] = { in, in }; m_FX.nextSample( s[0], s[1] ); return ( s[0] + s[1] ) / 2.0f; } private: FX m_FX; } ; class MonoBypass : public MonoBase { public: sample_t nextSample( sample_t in ) { return in; } } ; class StereoBypass : public StereoBase { public: void nextSample( sample_t&, sample_t& ) { } } ; /* convenient class to build up static FX chains, for example using namespace DspEffectLib; chain >, chain, MonoToStereoAdaptor > > > fxchain( bassBoost<>( 60.0, 1.0, 4.0f ), chain, MonoToStereoAdaptor > >( StereoEnhancer<>( 1.0 ), FoldbackDistortion<>( 1.0f, 1.0f ) ) ); // now you can do simple calls such as which will process a bass-boost-, // stereo enhancer- and foldback distortion effect on your buffer fx_chain.process( (sample_t * *) buf, frames ); */ template class Chain : public FX0::bypassType { public: typedef typename FX0::sample_t sample_t; Chain( const FX0& fx0, const FX1& fx1 = FX1() ) : m_FX0( fx0 ), m_FX1( fx1 ) { } void process( sample_t** buf, const f_cnt_t frames ) { m_FX0.process( buf, frames ); m_FX1.process( buf, frames ); } private: FX0 m_FX0; FX1 m_FX1; } ; template inline sample_t saturate( sample_t x ) { return qMin( qMax( -1.0f, x ), 1.0f ); } class FastBassBoost : public MonoBase { public: FastBassBoost( const sample_t _frequency, const sample_t _gain, const sample_t _ratio, const FastBassBoost & _orig = FastBassBoost() ) : m_frequency( qMax( _frequency, 10.0 ) ), m_gain1( 1.0 / ( m_frequency + 1.0 ) ), m_gain2( _gain ), m_ratio( _ratio ), m_cap( _orig.m_cap ) { } inline sample_t nextSample( sample_t _in ) { // TODO: somehow remove these horrible aliases... m_cap = ( _in + m_cap*m_frequency ) * m_gain1; return( ( _in + m_cap*m_ratio ) * m_gain2 ); } void setFrequency( const sample_t _frequency ) { m_frequency = _frequency; m_gain1 = 1.0 / ( m_frequency + 1.0 ); } void setGain( const sample_t _gain ) { m_gain2 = _gain; } void setRatio( const sample_t _ratio ) { m_ratio = _ratio; } private: FastBassBoost() : m_cap( 0.0 ) { } sample_t m_frequency; sample_t m_gain1; sample_t m_gain2; sample_t m_ratio; sample_t m_cap; } ; class FoldbackDistortion : public MonoBase { public: FoldbackDistortion( float threshold, float gain ) : m_threshold( threshold ), m_gain( gain ) { } sample_t nextSample( sample_t in ) { if( in >= m_threshold || in < -m_threshold ) { return ( fabsf( fabsf( fmodf( in - m_threshold, m_threshold*4 ) ) - m_threshold*2 ) - m_threshold ) * m_gain; } return in * m_gain; } void setThreshold( float threshold ) { m_threshold = threshold; } void setGain( float gain ) { m_gain = gain; } private: float m_threshold; float m_gain; } ; class Distortion : public MonoBase { public: Distortion( float threshold, float gain ) : m_threshold( threshold ), m_gain( gain ) { } sample_t nextSample( sample_t in ) { return m_gain * ( in * ( fabsf( in )+m_threshold ) / ( in*in +( m_threshold-1 )* fabsf( in ) + 1 ) ); } void setThreshold( float threshold ) { m_threshold = threshold; } void setGain( float gain ) { m_gain = gain; } private: float m_threshold; float m_gain; } ; class StereoEnhancer : public StereoBase { public: StereoEnhancer( float wideCoeff ) : m_wideCoeff( wideCoeff ) { } void setWideCoeff( float wideCoeff ) { m_wideCoeff = wideCoeff; } float wideCoeff() { return m_wideCoeff; } void nextSample( sample_t& inLeft, sample_t& inRight ) { const float toRad = F_PI / 180; const sample_t tmp = inLeft; inLeft += inRight * sinf( m_wideCoeff * ( .5 * toRad ) ); inRight -= tmp * sinf( m_wideCoeff * ( .5 * toRad ) ); } private: float m_wideCoeff; } ; } ; #endif lmms-1.1.3/include/DummyEffect.h000066400000000000000000000056301247673406200165070ustar00rootroot00000000000000/* * DummyEffect.h - effect used as fallback if an effect couldn't be loaded * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DUMMY_EFFECT_H #define DUMMY_EFFECT_H #include "Effect.h" #include "EffectControls.h" #include "EffectControlDialog.h" class DummyEffectControlDialog : public EffectControlDialog { public: DummyEffectControlDialog( EffectControls * _controls ) : EffectControlDialog( _controls ) { } } ; class DummyEffectControls : public EffectControls { public: DummyEffectControls( Effect * _eff ) : EffectControls( _eff ) { } virtual ~DummyEffectControls() { } virtual int controlCount() { return 0; } virtual void saveSettings( QDomDocument &, QDomElement & ) { } virtual void loadSettings( const QDomElement & ) { } virtual QString nodeName() const { return "DummyControls"; } virtual EffectControlDialog * createView() { return new DummyEffectControlDialog( this ); } } ; class DummyEffect : public Effect { public: DummyEffect( Model * _parent, const QDomElement& originalPluginData ) : Effect( NULL, _parent, NULL ), m_controls( this ), m_originalPluginData( originalPluginData ) { setName(); } virtual ~DummyEffect() { } virtual EffectControls * controls() { return &m_controls; } bool processAudioBuffer( sampleFrame *, const fpp_t ) { return false; } const QDomElement& originalPluginData() const { return m_originalPluginData; } private: DummyEffectControls m_controls; const QDomElement m_originalPluginData; // Parse the display name from the dom virtual void setName() { QDomNodeList keys = originalPluginData().elementsByTagName( "key" ); for( int i = 0; !keys.item( i ).isNull(); ++i ) { QDomNodeList attributes = keys.item( i ).toElement().elementsByTagName( "attribute" ); for( int j = 0; !attributes.item( j ).isNull(); ++j ) { QDomElement attribute = attributes.item( j ).toElement(); if( attribute.hasAttribute( "value" ) ) { QString name = tr("NOT FOUND") + " (" + attribute.attribute( "value" ) + ")"; setDisplayName(name); return; } } } } } ; #endif lmms-1.1.3/include/DummyInstrument.h000066400000000000000000000032121247673406200174550ustar00rootroot00000000000000/* * DummyInstrument.h - instrument used as fallback if an instrument couldn't * be loaded * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _DUMMY_INSTRUMENT_H #define _DUMMY_INSTRUMENT_H #include "Instrument.h" #include "InstrumentView.h" class DummyInstrument : public Instrument { public: DummyInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, NULL ) { } virtual ~DummyInstrument() { } virtual void playNote( NotePlayHandle *, sampleFrame * ) { } virtual void saveSettings( QDomDocument &, QDomElement & ) { } virtual void loadSettings( const QDomElement & ) { } virtual QString nodeName() const { return "dummyinstrument"; } virtual PluginView * instantiateView( QWidget * _parent ) { return new InstrumentView( this, _parent ); } } ; #endif lmms-1.1.3/include/DummyPlugin.h000066400000000000000000000027641247673406200165560ustar00rootroot00000000000000/* * DummyPlugin.h - empty plugin which is used as fallback if a plugin couldn't * be found * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _DUMMY_PLUGIN_H #define _DUMMY_PLUGIN_H #include "Plugin.h" #include "PluginView.h" class DummyPlugin : public Plugin { public: DummyPlugin() : Plugin( NULL, NULL ) { } virtual ~DummyPlugin() { } virtual void saveSettings( QDomDocument &, QDomElement & ) { } virtual void loadSettings( const QDomElement & ) { } virtual QString nodeName() const { return "DummyPlugin"; } protected: virtual PluginView * instantiateView( QWidget * _parent ) { return new PluginView( this, _parent ); } } ; #endif lmms-1.1.3/include/Effect.h000066400000000000000000000114041247673406200154670ustar00rootroot00000000000000/* * Effect.h - base class for effects * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef EFFECT_H #define EFFECT_H #include "Plugin.h" #include "engine.h" #include "Mixer.h" #include "AutomatableModel.h" #include "TempoSyncKnobModel.h" class EffectChain; class EffectControls; class EXPORT Effect : public Plugin { Q_OBJECT public: Effect( const Plugin::Descriptor * _desc, Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~Effect(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "effect"; } virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) = 0; inline ch_cnt_t processorCount() const { return m_processors; } inline void setProcessorCount( ch_cnt_t _processors ) { m_processors = _processors; } inline bool isOkay() const { return m_okay; } inline void setOkay( bool _state ) { m_okay = _state; } inline bool isRunning() const { return m_running; } inline void startRunning() { m_bufferCount = 0; m_running = true; } inline void stopRunning() { m_running = false; } inline bool isEnabled() const { return m_enabledModel.value(); } inline f_cnt_t timeout() const { const float samples = engine::mixer()->processingSampleRate() * m_autoQuitModel.value() / 1000.0f; return 1 + ( static_cast( samples ) / engine::mixer()->framesPerPeriod() ); } inline float wetLevel() const { return m_wetDryModel.value(); } inline float dryLevel() const { return 1.0f - m_wetDryModel.value(); } inline float gate() const { const float level = m_gateModel.value(); return level*level * m_processors; } inline f_cnt_t bufferCount() const { return m_bufferCount; } inline void resetBufferCount() { m_bufferCount = 0; } inline void incrementBufferCount() { ++m_bufferCount; } inline bool dontRun() const { return m_noRun; } inline void setDontRun( bool _state ) { m_noRun = _state; } inline const Descriptor::SubPluginFeatures::Key & key() const { return m_key; } EffectChain * effectChain() const { return m_parent; } virtual EffectControls * controls() = 0; static Effect * instantiate( const QString & _plugin_name, Model * _parent, Descriptor::SubPluginFeatures::Key * _key ); protected: void checkGate( double _out_sum ); virtual PluginView * instantiateView( QWidget * ); // some effects might not be capable of higher sample-rates so they can // sample it down before processing and back after processing inline void sampleDown( const sampleFrame * _src_buf, sampleFrame * _dst_buf, sample_rate_t _dst_sr ) { resample( 0, _src_buf, engine::mixer()->processingSampleRate(), _dst_buf, _dst_sr, engine::mixer()->framesPerPeriod() ); } inline void sampleBack( const sampleFrame * _src_buf, sampleFrame * _dst_buf, sample_rate_t _src_sr ) { resample( 1, _src_buf, _src_sr, _dst_buf, engine::mixer()->processingSampleRate(), engine::mixer()->framesPerPeriod() * _src_sr / engine::mixer()->processingSampleRate() ); } void reinitSRC(); private: EffectChain * m_parent; void resample( int _i, const sampleFrame * _src_buf, sample_rate_t _src_sr, sampleFrame * _dst_buf, sample_rate_t _dst_sr, const f_cnt_t _frames ); Descriptor::SubPluginFeatures::Key m_key; ch_cnt_t m_processors; bool m_okay; bool m_noRun; bool m_running; f_cnt_t m_bufferCount; BoolModel m_enabledModel; FloatModel m_wetDryModel; FloatModel m_gateModel; TempoSyncKnobModel m_autoQuitModel; SRC_DATA m_srcData[2]; SRC_STATE * m_srcState[2]; friend class EffectView; friend class EffectChain; } ; typedef Effect::Descriptor::SubPluginFeatures::Key EffectKey; typedef Effect::Descriptor::SubPluginFeatures::KeyList EffectKeyList; #endif lmms-1.1.3/include/EffectChain.h000066400000000000000000000040001247673406200164240ustar00rootroot00000000000000/* * EffectChain.h - class for processing and effects chain * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EFFECT_CHAIN_H #define _EFFECT_CHAIN_H #include "Model.h" #include "SerializingObject.h" #include "Mixer.h" #include "AutomatableModel.h" class Effect; class EXPORT EffectChain : public Model, public SerializingObject { Q_OBJECT public: EffectChain( Model * _parent ); virtual ~EffectChain(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "fxchain"; } void appendEffect( Effect * _effect ); void removeEffect( Effect * _effect ); void moveDown( Effect * _effect ); void moveUp( Effect * _effect ); bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames, bool hasInputNoise ); void startRunning(); void clear(); void setEnabled( bool _on ) { m_enabledModel.setValue( _on ); } private: typedef QVector EffectList; EffectList m_effects; BoolModel m_enabledModel; friend class EffectRackView; signals: void aboutToClear(); } ; #endif lmms-1.1.3/include/EffectControlDialog.h000066400000000000000000000026641247673406200201600ustar00rootroot00000000000000/* * EffectControlDialog.h - base-class for effect-dialogs for displaying and * editing control port values * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EFFECT_CONTROL_DIALOG_H #define _EFFECT_CONTROL_DIALOG_H #include #include "ModelView.h" class EffectControls; class EXPORT EffectControlDialog : public QWidget, public ModelView { Q_OBJECT public: EffectControlDialog( EffectControls * _controls ); virtual ~EffectControlDialog(); signals: void closed(); protected: virtual void closeEvent( QCloseEvent * _ce ); EffectControls * m_effectControls; } ; #endif lmms-1.1.3/include/EffectControls.h000066400000000000000000000031471247673406200172200ustar00rootroot00000000000000/* * EffectControls.h - model for effect-controls * * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EFFECT_CONTROLS_H #define _EFFECT_CONTROLS_H #include "Model.h" #include "JournallingObject.h" #include "Effect.h" class EffectControlDialog; class EffectControls : public JournallingObject, public Model { public: EffectControls( Effect * _eff ) : JournallingObject(), Model( _eff ), m_effect( _eff ), m_viewVisible( false ) { } virtual ~EffectControls() { } virtual int controlCount() = 0; virtual EffectControlDialog * createView() = 0; void setViewVisible( bool _visible ) { m_viewVisible = _visible; } bool isViewVisible() const { return m_viewVisible; } Effect * effect() { return m_effect; } private: Effect * m_effect; bool m_viewVisible; } ; #endif lmms-1.1.3/include/EffectRackView.h000066400000000000000000000036031247673406200171250ustar00rootroot00000000000000/* * effect_rack_view.h - view for effectChain-model * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EFFECT_RACK_VIEW_H #define _EFFECT_RACK_VIEW_H #include #include "EffectChain.h" #include "ModelView.h" #include "lmms_basics.h" class QScrollArea; class QVBoxLayout; class EffectView; class groupBox; class EffectRackView : public QWidget, public ModelView { Q_OBJECT public: EffectRackView( EffectChain* model, QWidget* parent = NULL ); virtual ~EffectRackView(); public slots: void clearViews(); void moveUp( EffectView* view ); void moveDown( EffectView* view ); void deletePlugin( EffectView* view ); private slots: virtual void update(); void addEffect(); private: virtual void modelChanged(); inline EffectChain* fxChain() { return castModel(); } inline const EffectChain* fxChain() const { return castModel(); } QVector m_effectViews; groupBox* m_effectsGroupBox; QScrollArea* m_scrollArea; int m_lastY; } ; #endif lmms-1.1.3/include/EffectSelectDialog.h000066400000000000000000000033711247673406200177530ustar00rootroot00000000000000/* * EffectSelectDialog.h - dialog to choose effect plugin * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EFFECT_SELECT_DIALOG_H #define _EFFECT_SELECT_DIALOG_H #include #include #include #include "EffectChain.h" #include "Effect.h" namespace Ui { class EffectSelectDialog; } class EffectSelectDialog : public QDialog { Q_OBJECT public: EffectSelectDialog( QWidget * _parent ); virtual ~EffectSelectDialog(); Effect * instantiateSelectedPlugin( EffectChain * _parent ); protected slots: void acceptSelection(); void rowChanged( const QModelIndex &, const QModelIndex & ); void updateSelection(); private: Ui::EffectSelectDialog * ui; Plugin::DescriptorList m_pluginDescriptors; EffectKeyList m_effectKeys; EffectKey m_currentSelection; QStandardItemModel m_sourceModel; QSortFilterProxyModel m_model; QWidget * m_descriptionWidget; } ; #endif lmms-1.1.3/include/EffectView.h000066400000000000000000000041601247673406200163230ustar00rootroot00000000000000/* * EffectView.h - view-component for an effect * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2007-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EFFECT_VIEW_H #define _EFFECT_VIEW_H #include "AutomatableModel.h" #include "PluginView.h" #include "Effect.h" class QGroupBox; class QLabel; class QPushButton; class QMdiSubWindow; class EffectControlDialog; class knob; class ledCheckBox; class TempoSyncKnob; class EffectView : public PluginView { Q_OBJECT public: EffectView( Effect * _model, QWidget * _parent ); virtual ~EffectView(); inline Effect * effect() { return castModel(); } inline const Effect * effect() const { return castModel(); } public slots: void editControls(); void moveUp(); void moveDown(); void deletePlugin(); void displayHelp(); void closeEffects(); signals: void moveUp( EffectView * _plugin ); void moveDown( EffectView * _plugin ); void deletePlugin( EffectView * _plugin ); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void modelChanged(); private: QPixmap m_bg; ledCheckBox * m_bypass; knob * m_wetDry; TempoSyncKnob * m_autoQuit; knob * m_gate; QMdiSubWindow * m_subWindow; EffectControlDialog * m_controlView; } ; #endif lmms-1.1.3/include/EnvelopeAndLfoParameters.h000066400000000000000000000073011247673406200211610ustar00rootroot00000000000000/* * EnvelopeAndLfoParameters.h - class EnvelopeAndLfoParameters * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _ENVELOPE_AND_LFO_PARAMETERS_H #define _ENVELOPE_AND_LFO_PARAMETERS_H #include #include "JournallingObject.h" #include "AutomatableModel.h" #include "SampleBuffer.h" #include "TempoSyncKnobModel.h" #include "lmms_basics.h" class EXPORT EnvelopeAndLfoParameters : public Model, public JournallingObject { Q_OBJECT public: class LfoInstances { public: LfoInstances() { } ~LfoInstances() { } inline bool isEmpty() const { return m_lfos.isEmpty(); } void trigger(); void reset(); void add( EnvelopeAndLfoParameters * lfo ); void remove( EnvelopeAndLfoParameters * lfo ); private: QMutex m_lfoListMutex; typedef QList LfoList; LfoList m_lfos; } ; EnvelopeAndLfoParameters( float _value_for_zero_amount, Model * _parent ); virtual ~EnvelopeAndLfoParameters(); static inline float expKnobVal( float _val ) { return ( ( _val < 0 ) ? -_val : _val ) * _val; } static LfoInstances * instances() { return s_lfoInstances; } void fillLevel( float * _buf, f_cnt_t _frame, const f_cnt_t _release_begin, const fpp_t _frames ); inline bool isUsed() const { return m_used; } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const { return "el"; } inline f_cnt_t PAHD_Frames() const { return m_pahdFrames; } inline f_cnt_t releaseFrames() const { return m_rFrames; } public slots: void updateSampleVars(); protected: void fillLfoLevel( float * _buf, f_cnt_t _frame, const fpp_t _frames ); private: static LfoInstances * s_lfoInstances; bool m_used; FloatModel m_predelayModel; FloatModel m_attackModel; FloatModel m_holdModel; FloatModel m_decayModel; FloatModel m_sustainModel; FloatModel m_releaseModel; FloatModel m_amountModel; float m_sustainLevel; float m_amount; float m_valueForZeroAmount; float m_amountAdd; f_cnt_t m_pahdFrames; f_cnt_t m_rFrames; sample_t * m_pahdEnv; sample_t * m_rEnv; FloatModel m_lfoPredelayModel; FloatModel m_lfoAttackModel; TempoSyncKnobModel m_lfoSpeedModel; FloatModel m_lfoAmountModel; IntModel m_lfoWaveModel; BoolModel m_x100Model; BoolModel m_controlEnvAmountModel; f_cnt_t m_lfoPredelayFrames; f_cnt_t m_lfoAttackFrames; f_cnt_t m_lfoOscillationFrames; f_cnt_t m_lfoFrame; float m_lfoAmount; bool m_lfoAmountIsZero; sample_t * m_lfoShapeData; sample_t m_random; bool m_bad_lfoShapeData; SampleBuffer m_userWave; enum LfoShapes { SineWave, TriangleWave, SawWave, SquareWave, UserDefinedWave, RandomWave, NumLfoShapes } ; sample_t lfoShapeSample( fpp_t _frame_offset ); void updateLfoShapeData(); friend class EnvelopeAndLfoView; friend class FlpImport; } ; #endif lmms-1.1.3/include/EnvelopeAndLfoView.h000066400000000000000000000044531247673406200177750ustar00rootroot00000000000000/* * EnvelopeAndLfoView.h - declaration of class EnvelopeAndLfoView which * is used by envelope/lfo/filter-tab of instrument track * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef ENVELOPE_AND_LFO_VIEW_H #define ENVELOPE_AND_LFO_VIEW_H #include #include "ModelView.h" class QPaintEvent; class QPixmap; class EnvelopeAndLfoParameters; class automatableButtonGroup; class knob; class ledCheckBox; class pixmapButton; class TempoSyncKnob; class EnvelopeAndLfoView : public QWidget, public ModelView { Q_OBJECT public: EnvelopeAndLfoView( QWidget * _parent ); virtual ~EnvelopeAndLfoView(); protected: virtual void modelChanged(); virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); protected slots: void lfoUserWaveChanged(); private: static QPixmap * s_envGraph; static QPixmap * s_lfoGraph; EnvelopeAndLfoParameters * m_params; // envelope stuff knob * m_predelayKnob; knob * m_attackKnob; knob * m_holdKnob; knob * m_decayKnob; knob * m_sustainKnob; knob * m_releaseKnob; knob * m_amountKnob; // LFO stuff knob * m_lfoPredelayKnob; knob * m_lfoAttackKnob; TempoSyncKnob * m_lfoSpeedKnob; knob * m_lfoAmountKnob; pixmapButton * m_userLfoBtn; automatableButtonGroup * m_lfoWaveBtnGrp; ledCheckBox * m_x100Cb; ledCheckBox * m_controlEnvAmountCb; float m_randomGraph; } ; #endif lmms-1.1.3/include/FileBrowser.h000066400000000000000000000112741247673406200165230ustar00rootroot00000000000000/* * FileBrowser.h - include file for FileBrowser * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef FILE_BROWSER_H #define FILE_BROWSER_H #include #include #include #include "SideBarWidget.h" class QLineEdit; class FileItem; class InstrumentTrack; class FileBrowserTreeWidget; class PlayHandle; class TrackContainer; class FileBrowser : public SideBarWidget { Q_OBJECT public: FileBrowser( const QString & directories, const QString & filter, const QString & title, const QPixmap & pm, QWidget * parent, bool dirs_as_items = false ); virtual ~FileBrowser(); public slots: void filterItems( const QString & filter ); void reloadTree( void ); private: bool filterItems( QTreeWidgetItem * item, const QString & filter ); virtual void keyPressEvent( QKeyEvent * ke ); void addItems( const QString & path ); FileBrowserTreeWidget * m_l; QLineEdit * m_filterEdit; QString m_directories; QString m_filter; bool m_dirsAsItems; } ; class FileBrowserTreeWidget : public QTreeWidget { Q_OBJECT public: FileBrowserTreeWidget( QWidget * parent ); virtual ~FileBrowserTreeWidget(); protected: virtual void contextMenuEvent( QContextMenuEvent * e ); virtual void mousePressEvent( QMouseEvent * me ); virtual void mouseMoveEvent( QMouseEvent * me ); virtual void mouseReleaseEvent( QMouseEvent * me ); private: void handleFile( FileItem * fi, InstrumentTrack * it ); void openInNewInstrumentTrack( TrackContainer* tc ); bool m_mousePressed; QPoint m_pressPos; PlayHandle* m_previewPlayHandle; QMutex m_pphMutex; FileItem * m_contextMenuItem; private slots: void activateListItem( QTreeWidgetItem * item, int column ); void openInNewInstrumentTrackBBE( void ); void openInNewInstrumentTrackSE( void ); void sendToActiveInstrumentTrack( void ); void updateDirectory( QTreeWidgetItem * item ); } ; class Directory : public QTreeWidgetItem { public: Directory( const QString & filename, const QString & path, const QString & filter ); void update( void ); inline QString fullName( QString path = QString::null ) { if( path == QString::null ) { path = m_directories[0]; } if( path != QString::null ) { path += QDir::separator(); } return( QDir::cleanPath( path + text( 0 ) ) + QDir::separator() ); } inline void addDirectory( const QString & dir ) { m_directories.push_back( dir ); } private: void initPixmaps( void ); bool addItems( const QString & path ); static QPixmap * s_folderPixmap; static QPixmap * s_folderOpenedPixmap; static QPixmap * s_folderLockedPixmap; QStringList m_directories; QString m_filter; } ; class FileItem : public QTreeWidgetItem { public: enum FileTypes { ProjectFile, PresetFile, SampleFile, SoundFontFile, PatchFile, MidiFile, FlpFile, VstPluginFile, UnknownFile, NumFileTypes } ; enum FileHandling { NotSupported, LoadAsProject, LoadAsPreset, LoadByPlugin, ImportAsProject } ; FileItem( QTreeWidget * parent, const QString & name, const QString & path ); FileItem( const QString & name, const QString & path ); inline QString fullName( void ) const { return( QDir::cleanPath( m_path ) + QDir::separator() + text( 0 ) ); } inline FileTypes type( void ) const { return( m_type ); } inline FileHandling handling( void ) const { return( m_handling ); } QString extension( void ); static QString extension( const QString & file ); private: void initPixmaps( void ); void determineFileType( void ); static QPixmap * s_projectFilePixmap; static QPixmap * s_presetFilePixmap; static QPixmap * s_sampleFilePixmap; static QPixmap * s_soundfontFilePixmap; static QPixmap * s_vstPluginFilePixmap; static QPixmap * s_midiFilePixmap; static QPixmap * s_flpFilePixmap; static QPixmap * s_unknownFilePixmap; QString m_path; FileTypes m_type; FileHandling m_handling; } ; #endif lmms-1.1.3/include/FileDialog.h000066400000000000000000000024041247673406200162720ustar00rootroot00000000000000/* * FileDialog.h - declaration of class FileDialog * * Copyright (c) 2014 Lukas W * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef FILEDIALOG_H #define FILEDIALOG_H #include #include "export.h" class EXPORT FileDialog : public QFileDialog { Q_OBJECT public: explicit FileDialog( QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString() ); void clearSelection(); }; #endif // FILEDIALOG_HPP lmms-1.1.3/include/FxLine.h000066400000000000000000000044021247673406200154600ustar00rootroot00000000000000/* * FxLine.h - FX line widget * * Copyright (c) 2009 Andrew Kelley * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef FX_LINE_H #define FX_LINE_H #include #include #include "knob.h" #include "LcdWidget.h" #include "SendButtonIndicator.h" class FxMixerView; class SendButtonIndicator; class FxLine : public QWidget { Q_OBJECT public: Q_PROPERTY( QBrush backgroundActive READ backgroundActive WRITE setBackgroundActive ) FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex); ~FxLine(); virtual void paintEvent( QPaintEvent * ); virtual void mousePressEvent( QMouseEvent * ); virtual void mouseDoubleClickEvent( QMouseEvent * ); virtual void contextMenuEvent( QContextMenuEvent * ); inline int channelIndex() { return m_channelIndex; } void setChannelIndex(int index); knob * m_sendKnob; SendButtonIndicator * m_sendBtn; QBrush backgroundActive() const; void setBackgroundActive( const QBrush & c ); static const int FxLineHeight; private: static void drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis, bool receiveFromThis ); FxMixerView * m_mv; LcdWidget* m_lcd; int m_channelIndex; QBrush m_backgroundActive; static QPixmap * s_sendBgArrow; static QPixmap * s_receiveBgArrow; private slots: void renameChannel(); void removeChannel(); void moveChannelLeft(); void moveChannelRight(); void displayHelp(); }; #endif // FXLINE_H lmms-1.1.3/include/FxMixer.h000066400000000000000000000117701247673406200156630ustar00rootroot00000000000000/* * FxMixer.h - effect-mixer for LMMS * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef FX_MIXER_H #define FX_MIXER_H #include "Model.h" #include "Mixer.h" #include "EffectChain.h" #include "JournallingObject.h" #include "ThreadableJob.h" class FxRoute; typedef QVector FxRouteVector; class FxChannel : public ThreadableJob { public: FxChannel( int idx, Model * _parent ); virtual ~FxChannel(); EffectChain m_fxChain; // set to true when input fed from mixToChannel or child channel bool m_hasInput; // set to true if any effect in the channel is enabled and running bool m_stillRunning; float m_peakLeft; float m_peakRight; sampleFrame * m_buffer; BoolModel m_muteModel; FloatModel m_volumeModel; QString m_name; QMutex m_lock; int m_channelIndex; // what channel index are we bool m_queued; // are we queued up for rendering yet? bool m_muted; // are we muted? updated per period so we don't have to call m_muteModel.value() twice // pointers to other channels that this one sends to FxRouteVector m_sends; // pointers to other channels that send to this one FxRouteVector m_receives; virtual bool requiresProcessing() const { return true; } QAtomicInt m_dependenciesMet; void incrementDeps(); void processed(); private: virtual void doProcessing( sampleFrame * _working_buffer ); }; class FxRoute : public QObject { Q_OBJECT public: FxRoute( FxChannel * from, FxChannel * to, float amount ); virtual ~FxRoute(); fx_ch_t senderIndex() const { return m_from->m_channelIndex; } fx_ch_t receiverIndex() const { return m_to->m_channelIndex; } FloatModel * amount() { return &m_amount; } FxChannel * sender() const { return m_from; } FxChannel * receiver() const { return m_to; } void updateName(); private: FxChannel * m_from; FxChannel * m_to; FloatModel m_amount; }; class EXPORT FxMixer : public Model, public JournallingObject { Q_OBJECT public: FxMixer(); virtual ~FxMixer(); void mixToChannel( const sampleFrame * _buf, fx_ch_t _ch ); void prepareMasterMix(); void masterMix( sampleFrame * _buf ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const { return "fxmixer"; } FxChannel * effectChannel( int _ch ) { return m_fxChannels[_ch]; } // make the output of channel fromChannel go to the input of channel toChannel // it is safe to call even if the send already exists FxRoute * createChannelSend(fx_ch_t fromChannel, fx_ch_t toChannel, float amount = 1.0f); FxRoute * createRoute( FxChannel * from, FxChannel * to, float amount ); // delete the connection made by createChannelSend void deleteChannelSend(fx_ch_t fromChannel, fx_ch_t toChannel); void deleteChannelSend( FxRoute * route ); // determine if adding a send from sendFrom to // sendTo would result in an infinite mixer loop. bool isInfiniteLoop(fx_ch_t fromChannel, fx_ch_t toChannel); bool checkInfiniteLoop( FxChannel * from, FxChannel * to ); // return the FloatModel of fromChannel sending its output to the input of // toChannel. NULL if there is no send. FloatModel * channelSendModel(fx_ch_t fromChannel, fx_ch_t toChannel); // add a new channel to the Fx Mixer. // returns the index of the channel that was just added int createChannel(); // delete a channel from the FX mixer. void deleteChannel(int index); // delete all the mixer channels except master and remove all effects void clear(); // re-arrange channels void moveChannelLeft(int index); void moveChannelRight(int index); // reset a channel's name, fx, sends, etc void clearChannel(fx_ch_t channelIndex); // rename channels when moving etc. if they still have their original name void validateChannelName( int index, int oldIndex ); inline fx_ch_t numChannels() const { return m_fxChannels.size(); } FxRouteVector m_fxRoutes; private: // the fx channels in the mixer. index 0 is always master. QVector m_fxChannels; // make sure we have at least num channels void allocateChannelsTo(int num); QMutex m_sendsMutex; friend class MixerWorkerThread; friend class FxMixerView; } ; #endif lmms-1.1.3/include/FxMixerView.h000066400000000000000000000054651247673406200165220ustar00rootroot00000000000000/* * FxMixerView.h - effect-mixer-view for LMMS * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef FX_MIXER_VIEW_H #define FX_MIXER_VIEW_H #include #include #include #include #include "FxLine.h" #include "FxMixer.h" #include "ModelView.h" #include "engine.h" #include "fader.h" #include "pixmap_button.h" #include "tooltip.h" #include "embed.h" #include "EffectRackView.h" class QButtonGroup; class FxLine; class EXPORT FxMixerView : public QWidget, public ModelView, public SerializingObjectHook { Q_OBJECT public: class FxChannelView { public: FxChannelView(QWidget * _parent, FxMixerView * _mv, int _chIndex ); FxLine * m_fxLine; pixmapButton * m_muteBtn; fader * m_fader; EffectRackView * m_rackView; }; FxMixerView(); virtual ~FxMixerView(); virtual void keyPressEvent(QKeyEvent * e); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); inline FxLine * currentFxLine() { return m_currentFxLine; } inline FxChannelView * channelView(int index) { return m_fxChannelViews[index]; } void setCurrentFxLine( FxLine * _line ); void setCurrentFxLine( int _line ); void clear(); // display the send button and knob correctly void updateFxLine(int index); // notify the view that an fx channel was deleted void deleteChannel(int index); // move the channel to the left or right void moveChannelLeft(int index); void moveChannelRight(int index); // make sure the display syncs up with the fx mixer. // useful for loading projects void refreshDisplay(); private slots: void updateFaders(); void addNewChannel(); private: QVector m_fxChannelViews; FxLine * m_currentFxLine; QScrollArea * channelArea; QHBoxLayout * chLayout; QWidget * m_channelAreaWidget; QStackedLayout * m_racksLayout; QWidget * m_racksWidget; void updateMaxChannelSelector(); friend class FxChannelView; } ; #endif lmms-1.1.3/include/ImportFilter.h000066400000000000000000000042341247673406200167160ustar00rootroot00000000000000/* * ImportFilter.h - declaration of class ImportFilter, the base-class for all * file import filters * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _IMPORT_FILTER_H #define _IMPORT_FILTER_H #include #include "Plugin.h" class TrackContainer; class EXPORT ImportFilter : public Plugin { public: ImportFilter( const QString & _file_name, const Descriptor * _descriptor ); virtual ~ImportFilter(); // tries to import given file to given track-container by having all // available import-filters to try to import the file static void import( const QString & _file_to_import, TrackContainer* tc ); protected: virtual bool tryImport( TrackContainer* tc ) = 0; const QFile & file() const { return m_file; } bool openFile(); inline void closeFile() { m_file.close(); } inline int readByte() { unsigned char c; if( m_file.getChar( (char*) &c ) ) { return static_cast( c ); } return -1; } inline int readBlock( char * _data, int _len ) { return m_file.read( _data, _len ); } inline void ungetChar( char _ch ) { m_file.ungetChar( _ch ); } virtual void saveSettings( QDomDocument &, QDomElement & ) { } virtual void loadSettings( const QDomElement & ) { } virtual QString nodeName() const { return "import_filter"; } private: QFile m_file; } ; #endif lmms-1.1.3/include/InlineAutomation.h000066400000000000000000000043151247673406200175550ustar00rootroot00000000000000/* * InlineAutomation.h - class for automating something "inline" * * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _INLINE_AUTOMATION_H #define _INLINE_AUTOMATION_H #include "AutomationPattern.h" #include "shared_object.h" class InlineAutomation : public FloatModel, public sharedObject { public: InlineAutomation() : FloatModel(), sharedObject(), m_autoPattern( NULL ) { } virtual ~InlineAutomation() { if( m_autoPattern ) { delete m_autoPattern; } } virtual float defaultValue() const = 0; bool hasAutomation() const { if( m_autoPattern != NULL && m_autoPattern->getTimeMap().isEmpty() == false ) { // prevent saving inline automation if there's just one value which equals value // of model which is going to be saved anyways if( isAtInitValue() && m_autoPattern->getTimeMap().size() == 1 && m_autoPattern->getTimeMap().keys().first() == 0 && m_autoPattern->getTimeMap().values().first() == value() ) { return false; } return true; } return false; } AutomationPattern * automationPattern() { if( m_autoPattern == NULL ) { m_autoPattern = new AutomationPattern( NULL ); m_autoPattern->addObject( this ); } return m_autoPattern; } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); private: AutomationPattern * m_autoPattern; } ; #endif lmms-1.1.3/include/Instrument.h000066400000000000000000000103551247673406200164470ustar00rootroot00000000000000/* * Instrument.h - declaration of class Instrument, which provides a * standard interface for all instrument plugins * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef INSTRUMENT_H #define INSTRUMENT_H #include #include "Plugin.h" #include "Mixer.h" // forward-declarations class InstrumentTrack; class InstrumentView; class MidiEvent; class MidiTime; class NotePlayHandle; class track; class EXPORT Instrument : public Plugin { public: enum Flag { NoFlags = 0x00, IsSingleStreamed = 0x01, /*! Instrument provides a single audio stream for all notes */ IsMidiBased = 0x02, /*! Instrument is controlled by MIDI events rather than NotePlayHandles */ IsNotBendable = 0x04, /*! Instrument can't react to pitch bend changes */ }; Q_DECLARE_FLAGS(Flags, Flag); Instrument( InstrumentTrack * _instrument_track, const Descriptor * _descriptor ); virtual ~Instrument(); // -------------------------------------------------------------------- // functions that can/should be re-implemented: // -------------------------------------------------------------------- // if the plugin doesn't play each note, it can create an instrument- // play-handle and re-implement this method, so that it mixes its // output buffer only once per mixer-period virtual void play( sampleFrame * _working_buffer ); // to be implemented by actual plugin virtual void playNote( NotePlayHandle * /* _note_to_play */, sampleFrame * /* _working_buf */ ) { } // needed for deleting plugin-specific-data of a note - plugin has to // cast void-ptr so that the plugin-data is deleted properly // (call of dtor if it's a class etc.) virtual void deleteNotePluginData( NotePlayHandle * _note_to_play ); // Get number of sample-frames that should be used when playing beat // (note with unspecified length) // Per default this function returns 0. In this case, channel is using // the length of the longest envelope (if one active). virtual f_cnt_t beatLen( NotePlayHandle * _n ) const; // some instruments need a certain number of release-frames even // if no envelope is active - such instruments can re-implement this // method for returning how many frames they at least like to have for // release virtual f_cnt_t desiredReleaseFrames() const { return 0; } virtual Flags flags() const { return NoFlags; } // sub-classes can re-implement this for receiving all incoming // MIDI-events inline virtual bool handleMidiEvent( const MidiEvent&, const MidiTime& = MidiTime(), f_cnt_t offset = 0 ) { return true; } virtual QString fullDisplayName() const; // -------------------------------------------------------------------- // provided functions: // -------------------------------------------------------------------- // instantiate instrument-plugin with given name or return NULL // on failure static Instrument * instantiate( const QString & _plugin_name, InstrumentTrack * _instrument_track ); virtual bool isFromTrack( const track * _track ) const; inline InstrumentTrack * instrumentTrack() const { return m_instrumentTrack; } protected: // instruments may use this to apply a soft fade out at the end of // notes - method does this only if really less or equal // desiredReleaseFrames() frames are left void applyRelease( sampleFrame * buf, const NotePlayHandle * _n ); private: InstrumentTrack * m_instrumentTrack; } ; Q_DECLARE_OPERATORS_FOR_FLAGS(Instrument::Flags) #endif lmms-1.1.3/include/InstrumentFunctionViews.h000066400000000000000000000041661247673406200211760ustar00rootroot00000000000000/* * InstrumentFunctionViews.h - views for instrument-functions-tab * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _INSTRUMENT_FUNCTION_VIEWS_H #define _INSTRUMENT_FUNCTION_VIEWS_H #include "ModelView.h" #include class QLabel; class comboBox; class groupBox; class knob; class TempoSyncKnob; class InstrumentFunctionArpeggio; class InstrumentFunctionNoteStacking; class InstrumentFunctionNoteStackingView : public QWidget, public ModelView { Q_OBJECT public: InstrumentFunctionNoteStackingView( InstrumentFunctionNoteStacking* cc, QWidget* parent = NULL ); virtual ~InstrumentFunctionNoteStackingView(); private: virtual void modelChanged(); InstrumentFunctionNoteStacking * m_cc; groupBox * m_chordsGroupBox; comboBox * m_chordsComboBox; knob * m_chordRangeKnob; } ; class InstrumentFunctionArpeggioView : public QWidget, public ModelView { Q_OBJECT public: InstrumentFunctionArpeggioView( InstrumentFunctionArpeggio* arp, QWidget* parent = NULL ); virtual ~InstrumentFunctionArpeggioView(); private: virtual void modelChanged(); InstrumentFunctionArpeggio * m_a; groupBox * m_arpGroupBox; comboBox * m_arpComboBox; knob * m_arpRangeKnob; TempoSyncKnob * m_arpTimeKnob; knob * m_arpGateKnob; comboBox * m_arpDirectionComboBox; comboBox * m_arpModeComboBox; } ; #endif lmms-1.1.3/include/InstrumentFunctions.h000066400000000000000000000077401247673406200203440ustar00rootroot00000000000000/* * InstrumentFunctions.h - models for instrument-functions-tab * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _INSTRUMENT_FUNCTIONS_H #define _INSTRUMENT_FUNCTIONS_H #include "JournallingObject.h" #include "lmms_basics.h" #include "AutomatableModel.h" #include "TempoSyncKnobModel.h" #include "ComboBoxModel.h" class InstrumentTrack; class NotePlayHandle; class InstrumentFunctionNoteStacking : public Model, public JournallingObject { Q_OBJECT public: static const int MAX_CHORD_POLYPHONY = 13; private: typedef int8_t ChordSemiTones [MAX_CHORD_POLYPHONY]; public: InstrumentFunctionNoteStacking( Model * _parent ); virtual ~InstrumentFunctionNoteStacking(); void processNote( NotePlayHandle* n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "chordcreator"; } struct Chord { private: QString m_name; ChordSemiTones m_semiTones; int m_size; public: Chord() : m_size( 0 ) {} Chord( const char * n, const ChordSemiTones & semi_tones ); int size() const { return m_size; } bool isScale() const { return size() > 6; } bool isEmpty() const { return size() == 0; } bool hasSemiTone( int8_t semiTone ) const; int8_t last() const { return m_semiTones[size() - 1]; } const QString & getName() const { return m_name; } int8_t operator [] ( int n ) const { return m_semiTones[n]; } }; struct ChordTable : public QVector { private: ChordTable(); struct Init { const char * m_name; ChordSemiTones m_semiTones; }; static Init s_initTable[]; public: static const ChordTable & getInstance() { static ChordTable inst; return inst; } const Chord & getByName( const QString & name, bool is_scale = false ) const; const Chord & getScaleByName( const QString & name ) const { return getByName( name, true ); } const Chord & getChordByName( const QString & name ) const { return getByName( name, false ); } }; private: BoolModel m_chordsEnabledModel; ComboBoxModel m_chordsModel; FloatModel m_chordRangeModel; friend class InstrumentFunctionNoteStackingView; } ; class InstrumentFunctionArpeggio : public Model, public JournallingObject { Q_OBJECT public: enum ArpDirections { ArpDirUp, ArpDirDown, ArpDirUpAndDown, ArpDirRandom, ArpDirDownAndUp, NumArpDirections } ; InstrumentFunctionArpeggio( Model * _parent ); virtual ~InstrumentFunctionArpeggio(); void processNote( NotePlayHandle* n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "arpeggiator"; } private: enum ArpModes { FreeMode, SortMode, SyncMode } ; BoolModel m_arpEnabledModel; ComboBoxModel m_arpModel; FloatModel m_arpRangeModel; TempoSyncKnobModel m_arpTimeModel; FloatModel m_arpGateModel; ComboBoxModel m_arpDirectionModel; ComboBoxModel m_arpModeModel; friend class FlpImport; friend class InstrumentTrack; friend class InstrumentFunctionArpeggioView; } ; #endif lmms-1.1.3/include/InstrumentMidiIOView.h000066400000000000000000000033671247673406200203420ustar00rootroot00000000000000/* * InstrumentMidiIOView.h - widget in instrument-track-window for setting * up MIDI-related stuff * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef INSTRUMENT_MIDI_IO_VIEW_H #define INSTRUMENT_MIDI_IO_VIEW_H #include #include "ModelView.h" class groupBox; class LcdSpinBox; class QToolButton; class InstrumentMidiIOView : public QWidget, public ModelView { Q_OBJECT public: InstrumentMidiIOView( QWidget* parent ); virtual ~InstrumentMidiIOView(); private: virtual void modelChanged(); groupBox * m_midiInputGroupBox; LcdSpinBox * m_inputChannelSpinBox; LcdSpinBox * m_fixedInputVelocitySpinBox; QToolButton * m_rpBtn; groupBox * m_midiOutputGroupBox; LcdSpinBox * m_outputChannelSpinBox; LcdSpinBox * m_fixedOutputVelocitySpinBox; LcdSpinBox * m_outputProgramSpinBox; LcdSpinBox * m_fixedOutputNoteSpinBox; QToolButton * m_wpBtn; LcdSpinBox* m_baseVelocitySpinBox; } ; #endif lmms-1.1.3/include/InstrumentPlayHandle.h000066400000000000000000000044351247673406200204130ustar00rootroot00000000000000/* * InstrumentPlayHandle.h - play-handle for driving an instrument * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef INSTRUMENT_PLAY_HANDLE_H #define INSTRUMENT_PLAY_HANDLE_H #include "PlayHandle.h" #include "Instrument.h" #include "NotePlayHandle.h" class InstrumentPlayHandle : public PlayHandle { public: InstrumentPlayHandle( Instrument* instrument ) : PlayHandle( TypeInstrumentPlayHandle ), m_instrument( instrument ) { } virtual ~InstrumentPlayHandle() { } virtual void play( sampleFrame * _working_buffer ) { // if the instrument is midi-based, we can safely render right away if( m_instrument->flags() & Instrument::IsMidiBased ) { m_instrument->play( _working_buffer ); return; } // if not, we need to ensure that all our nph's have been processed first ConstNotePlayHandleList nphv = NotePlayHandle::nphsOfInstrumentTrack( m_instrument->instrumentTrack(), true ); bool nphsLeft; do { nphsLeft = false; foreach( const NotePlayHandle * cnph, nphv ) { NotePlayHandle * nph = const_cast( cnph ); if( nph->state() != ThreadableJob::Done && ! nph->isFinished() ) { nphsLeft = true; nph->process(); } } } while( nphsLeft ); m_instrument->play( _working_buffer ); } virtual bool isFinished() const { return false; } virtual bool isFromTrack( const track* _track ) const { return m_instrument->isFromTrack( _track ); } private: Instrument* m_instrument; } ; #endif lmms-1.1.3/include/InstrumentSoundShaping.h000066400000000000000000000043161247673406200207720ustar00rootroot00000000000000/* * InstrumentSoundShaping.h - declaration of class InstrumentSoundShaping * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _INSTRUMENT_SOUND_SHAPING_H #define _INSTRUMENT_SOUND_SHAPING_H #include "Mixer.h" #include "ComboBoxModel.h" class InstrumentTrack; class EnvelopeAndLfoParameters; class NotePlayHandle; class InstrumentSoundShaping : public Model, public JournallingObject { Q_OBJECT public: InstrumentSoundShaping( InstrumentTrack * _instrument_track ); virtual ~InstrumentSoundShaping(); void processAudioBuffer( sampleFrame * _ab, const fpp_t _frames, NotePlayHandle * _n ); enum Targets { Volume, Cut, Resonance, NumTargets } ; f_cnt_t envFrames( const bool _only_vol = false ) const; f_cnt_t releaseFrames() const; float volumeLevel( NotePlayHandle * _n, const f_cnt_t _frame ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "eldata"; } private: EnvelopeAndLfoParameters * m_envLfoParameters[NumTargets]; InstrumentTrack * m_instrumentTrack; BoolModel m_filterEnabledModel; ComboBoxModel m_filterModel; FloatModel m_filterCutModel; FloatModel m_filterResModel; friend class InstrumentSoundShapingView; friend class FlpImport; } ; extern const QString __targetNames[InstrumentSoundShaping::NumTargets][3]; #endif lmms-1.1.3/include/InstrumentSoundShapingView.h000066400000000000000000000034101247673406200216170ustar00rootroot00000000000000/* * InstrumentSoundShapingView.h - view for InstrumentSoundShaping class * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _INSTRUMENT_SOUND_SHAPING_VIEW_H #define _INSTRUMENT_SOUND_SHAPING_VIEW_H #include #include "InstrumentSoundShaping.h" #include "ModelView.h" class QLabel; class EnvelopeAndLfoView; class comboBox; class groupBox; class knob; class tabWidget; class InstrumentSoundShapingView : public QWidget, public ModelView { Q_OBJECT public: InstrumentSoundShapingView( QWidget * _parent ); virtual ~InstrumentSoundShapingView(); void setFunctionsHidden( bool hidden ); private: virtual void modelChanged(); InstrumentSoundShaping * m_ss; tabWidget * m_targetsTabWidget; EnvelopeAndLfoView * m_envLfoViews[InstrumentSoundShaping::NumTargets]; // filter-stuff groupBox * m_filterGroupBox; comboBox * m_filterComboBox; knob * m_filterCutKnob; knob * m_filterResKnob; QLabel* m_singleStreamInfoLabel; } ; #endif lmms-1.1.3/include/InstrumentTrack.h000066400000000000000000000222701247673406200174330ustar00rootroot00000000000000/* * InstrumentTrack.h - declaration of class InstrumentTrack, a track + window * which holds an instrument-plugin * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef INSTRUMENT_TRACK_H #define INSTRUMENT_TRACK_H #include "AudioPort.h" #include "InstrumentFunctions.h" #include "InstrumentSoundShaping.h" #include "MidiEventProcessor.h" #include "MidiPort.h" #include "NotePlayHandle.h" #include "Piano.h" #include "PianoView.h" #include "Pitch.h" #include "track.h" class QLineEdit; template class QQueue; class InstrumentFunctionArpeggioView; class InstrumentFunctionNoteStackingView; class EffectRackView; class InstrumentSoundShapingView; class fadeButton; class Instrument; class InstrumentTrackWindow; class InstrumentMidiIOView; class knob; class LcdSpinBox; class midiPortMenu; class DataFile; class PluginView; class tabWidget; class trackLabelButton; class EXPORT InstrumentTrack : public track, public MidiEventProcessor { Q_OBJECT mapPropertyFromModel(int,getVolume,setVolume,m_volumeModel); public: InstrumentTrack( TrackContainer* tc ); virtual ~InstrumentTrack(); // used by instrument void processAudioBuffer( sampleFrame * _buf, const fpp_t _frames, NotePlayHandle * _n ); MidiEvent applyMasterKey( const MidiEvent& event ); virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ); virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ); // silence all running notes played by this track void silenceAllNotes( bool removeIPH = false ); bool isSustainPedalPressed() const { return m_sustainPedalPressed; } f_cnt_t beatLen( NotePlayHandle * _n ) const; // for capturing note-play-events -> need that for arpeggio, // filter and so on void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); QString instrumentName() const; const Instrument *instrument() const { return m_instrument; } Instrument *instrument() { return m_instrument; } void deleteNotePluginData( NotePlayHandle * _n ); // name-stuff virtual void setName( const QString & _new_name ); // translate given key of a note-event to absolute key (i.e. // add global master-pitch and base-note of this instrument track) int masterKey( int _midi_key ) const; // translate pitch to midi-pitch [0,16383] int midiPitch() const { return static_cast( ( ( m_pitchModel.value() + m_pitchModel.range()/2 ) * MidiMaxPitchBend ) / m_pitchModel.range() ); } /*! \brief Returns current range for pitch bend in semitones */ int midiPitchRange() const { return m_pitchRangeModel.value(); } // play everything in given frame-range - creates note-play-handles virtual bool play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _frame_base, int _tco_num = -1 ); // create new view for me virtual trackView * createView( TrackContainerView* tcv ); // create new track-content-object = pattern virtual trackContentObject * createTCO( const MidiTime & _pos ); // called by track virtual void saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadTrackSpecificSettings( const QDomElement & _this ); using track::setJournalling; // load instrument whose name matches given one Instrument * loadInstrument( const QString & _instrument_name ); AudioPort * audioPort() { return &m_audioPort; } MidiPort * midiPort() { return &m_midiPort; } const IntModel *baseNoteModel() const { return &m_baseNoteModel; } IntModel *baseNoteModel() { return &m_baseNoteModel; } int baseNote() const; Piano *pianoModel() { return &m_piano; } bool isArpeggioEnabled() const { return m_arpeggio.m_arpEnabledModel.value(); } // simple helper for removing midiport-XML-node when loading presets static void removeMidiPortNode( DataFile& dataFile ); FloatModel * pitchModel() { return &m_pitchModel; } FloatModel * volumeModel() { return &m_volumeModel; } FloatModel * panningModel() { return &m_panningModel; } IntModel* pitchRangeModel() { return &m_pitchRangeModel; } IntModel * effectChannelModel() { return &m_effectChannelModel; } signals: void instrumentChanged(); void newNote(); void midiNoteOn( const note& ); void midiNoteOff( const note& ); void nameChanged(); protected: virtual QString nodeName() const { return "instrumenttrack"; } protected slots: void updateBaseNote(); void updatePitch(); void updatePitchRange(); private: AudioPort m_audioPort; MidiPort m_midiPort; NotePlayHandle* m_notes[NumKeys]; int m_runningMidiNotes[NumKeys]; bool m_sustainPedalPressed; bool m_silentBuffersProcessed; IntModel m_baseNoteModel; NotePlayHandleList m_processHandles; FloatModel m_volumeModel; FloatModel m_panningModel; FloatModel m_pitchModel; IntModel m_pitchRangeModel; IntModel m_effectChannelModel; Instrument * m_instrument; InstrumentSoundShaping m_soundShaping; InstrumentFunctionArpeggio m_arpeggio; InstrumentFunctionNoteStacking m_noteStacking; Piano m_piano; friend class InstrumentTrackView; friend class InstrumentTrackWindow; friend class NotePlayHandle; friend class FlpImport; } ; class InstrumentTrackView : public trackView { Q_OBJECT public: InstrumentTrackView( InstrumentTrack * _it, TrackContainerView* tc ); virtual ~InstrumentTrackView(); InstrumentTrackWindow * getInstrumentTrackWindow(); InstrumentTrack * model() { return castModel(); } const InstrumentTrack * model() const { return castModel(); } static InstrumentTrackWindow * topLevelInstrumentTrackWindow(); QMenu * midiMenu() { return m_midiMenu; } void freeInstrumentTrackWindow(); static void cleanupWindowCache(); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); private slots: void toggleInstrumentWindow( bool _on ); void activityIndicatorPressed(); void activityIndicatorReleased(); void midiInSelected(); void midiOutSelected(); void midiConfigChanged(); private: InstrumentTrackWindow * m_window; static QQueue s_windowCache; // widgets in track-settings-widget trackLabelButton * m_tlb; knob * m_volumeKnob; knob * m_panningKnob; fadeButton * m_activityIndicator; QMenu * m_midiMenu; QAction * m_midiInputAction; QAction * m_midiOutputAction; QPoint m_lastPos; friend class InstrumentTrackWindow; } ; class InstrumentTrackWindow : public QWidget, public ModelView, public SerializingObjectHook { Q_OBJECT public: InstrumentTrackWindow( InstrumentTrackView * _tv ); virtual ~InstrumentTrackWindow(); // parent for all internal tab-widgets tabWidget * tabWidgetParent() { return m_tabWidget; } InstrumentTrack * model() { return castModel(); } const InstrumentTrack * model() const { return castModel(); } void setInstrumentTrackView( InstrumentTrackView * _tv ); PianoView * pianoView() { return m_pianoView; } static void dragEnterEventGeneric( QDragEnterEvent * _dee ); virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); public slots: void textChanged( const QString & _new_name ); void toggleVisibility( bool _on ); void updateName(); void updateInstrumentView(); protected: // capture close-events for toggling instrument-track-button virtual void closeEvent( QCloseEvent * _ce ); virtual void focusInEvent( QFocusEvent * _fe ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); protected slots: void saveSettingsBtnClicked(); private: virtual void modelChanged(); InstrumentTrack * m_track; InstrumentTrackView * m_itv; // widgets on the top of an instrument-track-window QLineEdit * m_nameLineEdit; knob * m_volumeKnob; knob * m_panningKnob; knob * m_pitchKnob; LcdSpinBox* m_pitchRangeSpinBox; LcdSpinBox * m_effectChannelNumber; // tab-widget with all children tabWidget * m_tabWidget; PluginView * m_instrumentView; InstrumentSoundShapingView * m_ssView; InstrumentFunctionNoteStackingView* m_noteStackingView; InstrumentFunctionArpeggioView* m_arpeggioView; InstrumentMidiIOView * m_midiView; EffectRackView * m_effectView; // test-piano at the bottom of every instrument-settings-window PianoView * m_pianoView; friend class InstrumentView; } ; #endif lmms-1.1.3/include/InstrumentView.h000066400000000000000000000027141247673406200173020ustar00rootroot00000000000000/* * instrument_view.h - definition of instrumentView-class * * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _INSTRUMENT_VIEW_H #define _INSTRUMENT_VIEW_H #include "Instrument.h" #include "PluginView.h" class InstrumentTrackWindow; class EXPORT InstrumentView : public PluginView { public: InstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~InstrumentView(); Instrument * model() { return( castModel() ); } const Instrument * model() const { return( castModel() ); } virtual void setModel( Model * _model, bool = FALSE ); InstrumentTrackWindow * instrumentTrackWindow(); } ; #endif lmms-1.1.3/include/JournallingObject.h000066400000000000000000000043121247673406200177060ustar00rootroot00000000000000/* * JournallingObject.h - declaration of class JournallingObject * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _JOURNALLING_OBJECT_H #define _JOURNALLING_OBJECT_H #include #include "lmms_basics.h" #include "SerializingObject.h" class EXPORT JournallingObject : public SerializingObject { public: JournallingObject(); virtual ~JournallingObject(); inline jo_id_t id() const { return m_id; } void saveJournallingState( const bool newState ) { m_journallingStateStack.push( m_journalling ); m_journalling = newState; } void restoreJournallingState() { if( !isJournallingStateStackEmpty()) { m_journalling = m_journallingStateStack.pop(); } } void addJournalCheckPoint(); virtual QDomElement saveState( QDomDocument & _doc, QDomElement & _parent ); virtual void restoreState( const QDomElement & _this ); inline bool isJournalling() const { return m_journalling; } inline void setJournalling( const bool _sr ) { m_journalling = _sr; } inline bool testAndSetJournalling( const bool newState ) { const bool oldJournalling = m_journalling; m_journalling = newState; return oldJournalling; } bool isJournallingStateStackEmpty() const { return m_journallingStateStack.isEmpty(); } protected: void changeID( jo_id_t _id ); private: jo_id_t m_id; bool m_journalling; QStack m_journallingStateStack; } ; #endif lmms-1.1.3/include/LadspaBase.h000066400000000000000000000045221247673406200162750ustar00rootroot00000000000000/* * LadspaBase.h - basic declarations concerning LADSPA * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_BASE_H #define _LADSPA_BASE_H #include "ladspa_manager.h" #include "Plugin.h" class LadspaControl; typedef enum BufferRates { CHANNEL_IN, CHANNEL_OUT, AUDIO_RATE_INPUT, AUDIO_RATE_OUTPUT, CONTROL_RATE_INPUT, CONTROL_RATE_OUTPUT } buffer_rate_t; typedef enum BufferData { TOGGLED, INTEGER, FLOATING, TIME, NONE } buffer_data_t; //! This struct is used to hold port descriptions internally //! which where received from the ladspa plugin typedef struct PortDescription { QString name; ch_cnt_t proc; uint16_t port_id; uint16_t control_id; buffer_rate_t rate; buffer_data_t data_type; float scale; LADSPA_Data max; LADSPA_Data min; LADSPA_Data def; LADSPA_Data value; //! This is true iff ladspa suggests logscale //! Note however that the model can still decide to use a linear scale bool suggests_logscale; LADSPA_Data * buffer; LadspaControl * control; } port_desc_t; inline Plugin::Descriptor::SubPluginFeatures::Key ladspaKeyToSubPluginKey( const Plugin::Descriptor * _desc, const QString & _name, const ladspa_key_t & _key ) { Plugin::Descriptor::SubPluginFeatures::Key::AttributeMap m; QString file = _key.first; m["file"] = file.remove( QRegExp( "\\.so$" ) ).remove( QRegExp( "\\.dll$" ) ); m["plugin"] = _key.second; return Plugin::Descriptor::SubPluginFeatures::Key( _desc, _name, m ); } #endif lmms-1.1.3/include/LadspaControl.h000066400000000000000000000052561247673406200170500ustar00rootroot00000000000000/* * LadspaControl.h - model for controlling a LADSPA port * * Copyright (c) 2008-2014 Tobias Doerffel * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LADSPA_CONTROL_H #define LADSPA_CONTROL_H #include #include "AutomatableModel.h" #include "TempoSyncKnobModel.h" typedef struct PortDescription port_desc_t; class EXPORT LadspaControl : public Model, public JournallingObject { Q_OBJECT public: LadspaControl( Model * _parent, port_desc_t * _port, bool _link = false ); ~LadspaControl(); LADSPA_Data value(); void setValue( LADSPA_Data _value ); void setLink( bool _state ); void linkControls( LadspaControl * _control ); void unlinkControls( LadspaControl * _control ); inline BoolModel * toggledModel() { return &m_toggledModel; } inline FloatModel * knobModel() { return &m_knobModel; } inline TempoSyncKnobModel * tempoSyncKnobModel() { return &m_tempoSyncKnobModel; } inline port_desc_t * port() { return m_port; } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent, const QString & _name ); virtual void loadSettings( const QDomElement & _this, const QString & _name ); inline virtual QString nodeName() const { return "port"; } signals: void changed( int _port, LADSPA_Data _value ); void linkChanged( int _port, bool _state ); protected slots: void ledChanged(); void knobChanged(); void tempoKnobChanged(); void linkStateChanged(); protected: virtual void saveSettings( QDomDocument& doc, QDomElement& element ) { Q_UNUSED(doc) Q_UNUSED(element) } virtual void loadSettings( const QDomElement& element ) { Q_UNUSED(element) } private: bool m_link; port_desc_t * m_port; BoolModel m_linkEnabledModel; BoolModel m_toggledModel; FloatModel m_knobModel; TempoSyncKnobModel m_tempoSyncKnobModel; friend class LadspaControlView; } ; #endif lmms-1.1.3/include/LadspaControlView.h000066400000000000000000000025371247673406200177020ustar00rootroot00000000000000/* * LadspaControlView.h - widget for controlling a LADSPA port * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_CONTROL_VIEW_H #define _LADSPA_CONTROL_VIEW_H #include #include "ModelView.h" class LadspaControl; class EXPORT LadspaControlView : public QWidget, public ModelView { Q_OBJECT public: LadspaControlView( QWidget * _parent, LadspaControl * _ctl ); virtual ~LadspaControlView(); private: LadspaControl * m_ctl; } ; #endif lmms-1.1.3/include/LcdSpinBox.h000066400000000000000000000044051247673406200163030ustar00rootroot00000000000000/* * LcdSpinBox.h - class LcdSpinBox, an improved QLCDNumber * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LCD_SPINBOX_H #define LCD_SPINBOX_H #include "LcdWidget.h" #include "AutomatableModelView.h" class EXPORT LcdSpinBox : public LcdWidget, public IntModelView { Q_OBJECT public: LcdSpinBox( int numDigits, QWidget* parent, const QString& name = QString::null ); LcdSpinBox( int numDigits, const QString& style, QWidget* parent, const QString& name = QString::null ); virtual ~LcdSpinBox(); virtual void modelChanged() { ModelView::modelChanged(); update(); } /*! Sets an offset which is always added to value of model so we can display values in a user-friendly way if they internally start at 0 */ void setDisplayOffset( int offset ) { m_displayOffset = offset; } /*! \brief Returns internal offset for displaying values */ int displayOffset() const { return m_displayOffset; } public slots: virtual void update(); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void wheelEvent( QWheelEvent * _we ); virtual void mouseDoubleClickEvent( QMouseEvent * _me ); private: bool m_mouseMoving; QPoint m_origMousePos; int m_displayOffset; void enterValue(); signals: void manualChange(); } ; typedef IntModel LcdSpinBoxModel; #endif lmms-1.1.3/include/LcdWidget.h000066400000000000000000000044051247673406200161440ustar00rootroot00000000000000/* * LcdWidget.h - a widget for displaying numbers in LCD style * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LCD_WIDGET_H #define _LCD_WIDGET_H #include #include #include "export.h" class EXPORT LcdWidget : public QWidget { Q_OBJECT public: LcdWidget( QWidget* parent, const QString& name = QString::null ); LcdWidget( int numDigits, QWidget* parent, const QString& name = QString::null ); LcdWidget( int numDigits, const QString& style, QWidget* parent, const QString& name = QString::null ); virtual ~LcdWidget(); void setValue( int value ); void setLabel( const QString& label ); void addTextForValue( int value, const QString& text ) { m_textForValue[value] = text; update(); } Q_PROPERTY( int numDigits READ numDigits WRITE setNumDigits ) inline int numDigits() const { return m_numDigits; } inline void setNumDigits( int n ) { m_numDigits = n; updateSize(); } public slots: virtual void setMarginWidth( int _width ); protected: virtual void paintEvent( QPaintEvent * _me ); virtual void updateSize(); int cellHeight() const { return m_cellHeight; } private: static const int charsPerPixmap = 12; QMap m_textForValue; QString m_display; QString m_label; QPixmap* m_lcdPixmap; int m_cellWidth; int m_cellHeight; int m_numDigits; int m_marginWidth; void initUi( const QString& name, const QString &style = QString("19green") ); //!< to be called by ctors } ; #endif lmms-1.1.3/include/LfoController.h000066400000000000000000000052741247673406200170670ustar00rootroot00000000000000/* * LfoController.h - A LFO-based controller and dialog * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LFO_CONTROLLER_H #define _LFO_CONTROLLER_H #include #include "Model.h" #include "AutomatableModel.h" #include "Controller.h" #include "ControllerDialog.h" #include "TempoSyncKnobModel.h" #include "Oscillator.h" class automatableButtonGroup; class knob; class ledCheckBox; class TempoSyncKnob; class pixmapButton; class LfoController : public Controller { Q_OBJECT public: LfoController( Model * _parent ); virtual ~LfoController(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; public slots: virtual ControllerDialog * createDialog( QWidget * _parent ); protected: // The internal per-controller get-value function virtual float value( int _offset ); FloatModel m_baseModel; TempoSyncKnobModel m_speedModel; FloatModel m_amountModel; FloatModel m_phaseModel; IntModel m_waveModel; IntModel m_multiplierModel; int m_duration; int m_phaseCorrection; int m_phaseOffset; sample_t (*m_sampleFunction)( const float ); private: SampleBuffer * m_userDefSampleBuffer; protected slots: void updateSampleFunction(); friend class LfoControllerDialog; } ; class LfoControllerDialog : public ControllerDialog { Q_OBJECT public: LfoControllerDialog( Controller * _controller, QWidget * _parent ); virtual ~LfoControllerDialog(); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void modelChanged(); LfoController * m_lfo; knob * m_baseKnob; TempoSyncKnob * m_speedKnob; knob * m_amountKnob; knob * m_phaseKnob; pixmapButton * m_userLfoBtn; automatableButtonGroup * m_waveBtnGrp; automatableButtonGroup * m_multiplierBtnGrp; private: pixmapButton * m_userWaveBtn; private slots: void askUserDefWave(); } ; #endif lmms-1.1.3/include/LmmsPalette.h000066400000000000000000000054541247673406200165320ustar00rootroot00000000000000/* * LmmsPalette.h - dummy class for fetching palette qproperties from CSS * * * Copyright (c) 2007-2014 Vesa Kivimäki * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "export.h" #ifndef LMMSPALETTE_H #define LMMSPALETTE_H class EXPORT LmmsPalette : public QWidget { Q_OBJECT Q_PROPERTY( QColor background READ background WRITE setBackground ) Q_PROPERTY( QColor windowText READ windowText WRITE setWindowText ) Q_PROPERTY( QColor base READ base WRITE setBase ) Q_PROPERTY( QColor text READ text WRITE setText ) Q_PROPERTY( QColor button READ button WRITE setButton ) Q_PROPERTY( QColor shadow READ shadow WRITE setShadow ) Q_PROPERTY( QColor buttonText READ buttonText WRITE setButtonText ) Q_PROPERTY( QColor brightText READ brightText WRITE setBrightText ) Q_PROPERTY( QColor highlight READ highlight WRITE setHighlight ) Q_PROPERTY( QColor highlightedText READ highlightedText WRITE setHighlightedText ) Q_PROPERTY( QColor toolTipText READ toolTipText WRITE setToolTipText ) Q_PROPERTY( QColor toolTipBase READ toolTipBase WRITE setToolTipBase ) public: LmmsPalette( QWidget * parent, QStyle * stylearg ); virtual ~LmmsPalette(); #define ACCESSMET( read, write ) \ QColor read () const; \ void write ( const QColor & c ); \ ACCESSMET( background, setBackground ) ACCESSMET( windowText, setWindowText ) ACCESSMET( base, setBase ) ACCESSMET( text, setText ) ACCESSMET( button, setButton ) ACCESSMET( shadow, setShadow ) ACCESSMET( buttonText, setButtonText ) ACCESSMET( brightText, setBrightText ) ACCESSMET( highlight, setHighlight ) ACCESSMET( highlightedText, setHighlightedText ) ACCESSMET( toolTipText, setToolTipText ) ACCESSMET( toolTipBase, setToolTipBase ) #undef ACCESSMET QPalette palette() const; private: QColor m_background; QColor m_windowText; QColor m_base; QColor m_text; QColor m_button; QColor m_shadow; QColor m_buttonText; QColor m_brightText; QColor m_highlight; QColor m_highlightedText; QColor m_toolTipText; QColor m_toolTipBase; }; #endif lmms-1.1.3/include/LmmsStyle.h000066400000000000000000000055131247673406200162300ustar00rootroot00000000000000/* * LmmsStyle.h - the graphical style used by LMMS to create a consistent * interface * * Copyright (c) 2007-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LMMS_STYLE_H #define LMMS_STYLE_H #include class LmmsStyle : public QPlastiqueStyle { public: enum ColorRole { AutomationBarFill, AutomationBarValue, AutomationSelectedBarFill, AutomationCrosshair, PianoRollStepNote, PianoRollSelectedNote, PianoRollDefaultNote, PianoRollFrozenNote, PianoRollMutedNote, PianoRollEditHandle, PianoRollVolumeLevel, PianoRollPanningLevel, PianoRollSelectedLevel, TimelineForecolor, StandardGraphLine, StandardGraphHandle, StandardGraphHandleBorder, StandardGraphCrosshair, TextFloatForecolor, TextFloatFill, VisualizationLevelLow, VisualizationLevelMid, VisualizationLevelPeak, NumColorRoles }; LmmsStyle(); virtual ~LmmsStyle() { } virtual QPalette standardPalette( void ) const; // virtual void drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; virtual void drawComplexControl( ComplexControl control, const QStyleOptionComplex * option, QPainter *painter, const QWidget *widget ) const; virtual void drawPrimitive( PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0 ) const; virtual int pixelMetric( PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const; // QSize sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const; // QRect subControlRect( ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget ) const; static QPalette * s_palette; private: QImage colorizeXpm( const char * const * xpm, const QBrush& fill ) const; void hoverColors( bool sunken, bool hover, bool active, QColor& color, QColor& blend ) const; QColor m_colors[ LmmsStyle::NumColorRoles ]; }; #endif lmms-1.1.3/include/MainWindow.h000066400000000000000000000102011247673406200163410ustar00rootroot00000000000000/* * MainWindow.h - declaration of class MainWindow, the main window of LMMS * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MAIN_WINDOW_H #define MAIN_WINDOW_H #include #include #include #include class QAction; class QDomElement; class QGridLayout; class QMdiArea; class configManager; class PluginView; class toolButton; class MainWindow : public QMainWindow { Q_OBJECT public: QMdiArea* workspace() { return m_workspace; } QWidget* toolBar() { return m_toolBar; } int addWidgetToToolBar( QWidget * _w, int _row = -1, int _col = -1 ); void addSpacingToToolBar( int _size ); /// /// \brief Asks whether changes made to the project are to be saved. /// /// Opens a dialog giving the user the choice to (a) confirm his choice /// (such as opening a new file), (b) save the current project before /// proceeding or (c) cancel the process. /// /// Every function that replaces the current file (e.g. creates new file, /// opens another file...) must call this before and may only proceed if /// this function returns true. /// /// \return true if the user allows the software to proceed, false if they /// cancel the action. /// bool mayChangeProject(); void clearKeyModifiers(); bool isCtrlPressed() { return m_keyMods.m_ctrl; } bool isShiftPressed() { return m_keyMods.m_shift; } bool isAltPressed() { return m_keyMods.m_alt; } static void saveWidgetState( QWidget * _w, QDomElement & _de ); static void restoreWidgetState( QWidget * _w, const QDomElement & _de ); public slots: void resetWindowTitle(); void emptySlot(); void enterWhatsThisMode(); void createNewProject(); void createNewProjectFromTemplate( QAction * _idx ); void openProject(); bool saveProject(); bool saveProjectAs(); bool saveProjectAsNewVersion(); void showSettingsDialog(); void aboutLMMS(); void help(); void toggleAutomationEditorWin(); void toggleBBEditorWin( bool forceShow = false ); void toggleSongEditorWin(); void toggleProjectNotesWin(); void toggleFxMixerWin(); void togglePianoRollWin(); void toggleControllerRack(); void updatePlayPauseIcons(); void undo(); void redo(); protected: virtual void closeEvent( QCloseEvent * _ce ); virtual void focusOutEvent( QFocusEvent * _fe ); virtual void keyPressEvent( QKeyEvent * _ke ); virtual void keyReleaseEvent( QKeyEvent * _ke ); virtual void timerEvent( QTimerEvent * _ev ); private: MainWindow(); MainWindow( const MainWindow & ); virtual ~MainWindow(); void finalize(); void toggleWindow( QWidget *window, bool forceShow = false ); QMdiArea * m_workspace; QWidget * m_toolBar; QGridLayout * m_toolBarLayout; QMenu * m_templatesMenu; QMenu * m_recentlyOpenedProjectsMenu; int m_custom_templates_count; struct keyModifiers { keyModifiers() : m_ctrl( false ), m_shift( false ), m_alt( false ) { } bool m_ctrl; bool m_shift; bool m_alt; } m_keyMods; QMenu * m_toolsMenu; QList m_tools; QBasicTimer m_updateTimer; QTimer m_autoSaveTimer; friend class engine; private slots: void browseHelp(); void fillTemplatesMenu(); void openRecentlyOpenedProject( QAction * _action ); void showTool( QAction * _idx ); void updateRecentlyOpenedProjectsMenu(); void autoSave(); signals: void periodicUpdate(); } ; #endif lmms-1.1.3/include/MemoryHelper.h000066400000000000000000000022361247673406200167060ustar00rootroot00000000000000/* * Copyright (c) 2014 Simon Symeonidis * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MEMORY_HELPER_H #define MEMORY_HELPER_H /** * Helper class to alocate aligned memory and free it. */ class MemoryHelper { public: static void* alignedMalloc( int ); static void alignedFree( void* ); private: }; #endif lmms-1.1.3/include/MeterDialog.h000066400000000000000000000025371247673406200164760ustar00rootroot00000000000000/* * MeterDialog.h - dialog for entering meter settings * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _METER_DIALOG_H #define _METER_DIALOG_H #include #include "ModelView.h" class LcdSpinBox; class MeterDialog : public QWidget, public ModelView { Q_OBJECT public: MeterDialog( QWidget * _parent, bool _simple = false ); virtual ~MeterDialog(); virtual void modelChanged(); private: LcdSpinBox * m_numerator; LcdSpinBox * m_denominator; } ; #endif lmms-1.1.3/include/MeterModel.h000066400000000000000000000033201247673406200163260ustar00rootroot00000000000000/* * MeterModel.h - model for meter specification * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _METER_MODEL_H #define _METER_MODEL_H #include "AutomatableModel.h" class MeterModel : public Model { Q_OBJECT mapPropertyFromModel(int,getNumerator,setNumerator,m_numeratorModel); mapPropertyFromModel(int,getDenominator,setDenominator,m_denominatorModel); public: MeterModel( Model * _parent ); ~MeterModel(); void saveSettings( QDomDocument & _doc, QDomElement & _this, const QString & _name ); void loadSettings( const QDomElement & _this, const QString & _name ); void reset(); // Must have the sub-models exposed to programatically connect // to automation or controllers IntModel & numeratorModel() { return m_numeratorModel; } IntModel & denominatorModel() { return m_denominatorModel; } private: IntModel m_numeratorModel; IntModel m_denominatorModel; } ; #endif lmms-1.1.3/include/MicroTimer.h000066400000000000000000000027061247673406200163520ustar00rootroot00000000000000/* * MicroTimer.h - simple high-precision timer * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MICRO_TIMER #define _MICRO_TIMER #include "lmmsconfig.h" #ifdef LMMS_HAVE_SYS_TIME_H #include #endif #include #include "lmms_basics.h" class MicroTimer { public: inline MicroTimer() { reset(); } inline ~MicroTimer() { } inline void reset() { gettimeofday( &begin, NULL ); } inline int elapsed() const { struct timeval now; gettimeofday( &now, NULL ); return ( now.tv_sec - begin.tv_sec ) * 1000 * 1000 + ( now.tv_usec - begin.tv_usec ); } private: struct timeval begin; } ; #endif lmms-1.1.3/include/Midi.h000066400000000000000000000072701247673406200151630ustar00rootroot00000000000000/* * Midi.h - constants, structs etc. concerning MIDI * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_H #define _MIDI_H #include "lmms_basics.h" enum MidiEventTypes { // messages MidiNoteOff = 0x80, MidiNoteOn = 0x90, MidiKeyPressure = 0xA0, MidiControlChange = 0xB0, MidiProgramChange = 0xC0, MidiChannelPressure = 0xD0, MidiPitchBend = 0xE0, // system exclusive MidiSysEx= 0xF0, // system common - never in midi files MidiTimeCode= 0xF1, MidiSongPosition = 0xF2, MidiSongSelect = 0xF3, MidiTuneRequest = 0xF6, MidiEOX= 0xF7, // system real-time - never in midi files MidiSync = 0xF8, MidiTick = 0xF9, MidiStart = 0xFA, MidiContinue = 0xFB, MidiStop = 0xFC, MidiActiveSensing = 0xFE, MidiSystemReset = 0xFF, // meta event - for midi files only MidiMetaEvent = 0xFF } ; enum MidiMetaEventTypes { MidiMetaInvalid = 0x00, MidiCopyright = 0x02, MidiTrackName = 0x03, MidiInstName = 0x04, MidiLyric = 0x05, MidiMarker = 0x06, MidiCuePoint = 0x07, MidiPortNumber = 0x21, MidiEOT = 0x2f, MidiSetTempo = 0x51, MidiSMPTEOffset = 0x54, MidiTimeSignature = 0x58, MidiKeySignature = 0x59, MidiSequencerEvent = 0x7f, MidiMetaCustom = 0x80, MidiNotePanning } ; typedef MidiMetaEventTypes MidiMetaEventType; enum MidiStandardControllers { MidiControllerBankSelect = 0, MidiControllerModulationWheel = 1, MidiControllerBreathController = 2, MidiControllerFootController = 4, MidiControllerPortamentoTime = 5, MidiControllerDataEntry = 6, MidiControllerMainVolume = 7, MidiControllerBalance = 8, MidiControllerPan = 10, MidiControllerEffectControl1 = 12, MidiControllerEffectControl2 = 13, MidiControllerSustain = 64, MidiControllerPortamento = 65, MidiControllerSostenuto = 66, MidiControllerSoftPedal = 67, MidiControllerLegatoFootswitch = 68, MidiControllerRegisteredParameterNumberLSB = 100, MidiControllerRegisteredParameterNumberMSB = 101, // Channel Mode Messages are controllers too... MidiControllerAllSoundOff = 120, MidiControllerResetAllControllers = 121, MidiControllerLocalControl = 122, MidiControllerAllNotesOff = 123, MidiControllerOmniOn = 124, MidiControllerOmniOff = 125, MidiControllerMonoOn = 126, MidiControllerPolyOn = 127, }; enum MidiControllerRegisteredParameterNumbers { MidiPitchBendSensitivityRPN = 0x0000, MidiChannelFineTuningRPN = 0x0001, MidiChannelCoarseTuningRPN = 0x0002, MidiTuningProgramChangeRPN = 0x0003, MidiTuningBankSelectRPN = 0x0004, MidiModulationDepthRangeRPN = 0x0005, MidiNullFunctionNumberRPN = 0x7F7F }; const int MidiChannelCount = 16; const int MidiControllerCount = 128; const int MidiProgramCount = 128; const int MidiMaxVelocity = 127; const int MidiDefaultVelocity = MidiMaxVelocity / 2; const int MidiMaxControllerValue = 127; const int MidiMaxKey = 127; const int MidiMaxPanning = 127; const int MidiMinPanning = -128; const int MidiMinPitchBend = 0; const int MidiMaxPitchBend = 16383; #endif lmms-1.1.3/include/MidiAlsaRaw.h000066400000000000000000000035321247673406200164330ustar00rootroot00000000000000/* * MidiAlsaRaw.h - MIDI client for RawMIDI via ALSA * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_ALSA_RAW_H #define _MIDI_ALSA_RAW_H #include "lmmsconfig.h" #ifdef LMMS_HAVE_ALSA #include #include #include "MidiClient.h" struct pollfd; class QLineEdit; class MidiAlsaRaw : public MidiClientRaw , public QThread { public: MidiAlsaRaw(); virtual ~MidiAlsaRaw(); static QString probeDevice(); inline static QString name() { return QT_TRANSLATE_NOOP( "setupWidget", "ALSA Raw-MIDI (Advanced Linux Sound Architecture)" ); } class setupWidget : public MidiClientRaw::setupWidget { public: setupWidget( QWidget * _parent ); virtual ~setupWidget(); virtual void saveSettings(); private: QLineEdit * m_device; } ; protected: virtual void sendByte( const unsigned char c ); virtual void run(); private: snd_rawmidi_t * m_input, * * m_inputp; snd_rawmidi_t * m_output, * * m_outputp; int m_npfds; pollfd * m_pfds; volatile bool m_quit; } ; #endif #endif lmms-1.1.3/include/MidiAlsaSeq.h000066400000000000000000000066301247673406200164340ustar00rootroot00000000000000/* * MidiAlsaSeq.h - ALSA-sequencer-client * * Copyright (c) 2005-2013 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_ALSA_SEQ_H #define _MIDI_ALSA_SEQ_H #include "lmmsconfig.h" #ifdef LMMS_HAVE_ALSA #include #endif #include #include #include #include "MidiClient.h" struct pollfd; class QLineEdit; class MidiAlsaSeq : public QThread, public MidiClient { Q_OBJECT public: MidiAlsaSeq(); virtual ~MidiAlsaSeq(); static QString probeDevice(); inline static QString name() { return QT_TRANSLATE_NOOP( "setupWidget", "ALSA-Sequencer (Advanced Linux Sound " "Architecture)" ); } virtual void processOutEvent( const MidiEvent & _me, const MidiTime & _time, const MidiPort * _port ); virtual void applyPortMode( MidiPort * _port ); virtual void applyPortName( MidiPort * _port ); virtual void removePort( MidiPort * _port ); // list seq-ports from ALSA virtual QStringList readablePorts() const { return m_readablePorts; } virtual QStringList writablePorts() const { return m_writablePorts; } // return name of port which specified MIDI event came from virtual QString sourcePortName( const MidiEvent & ) const; // (un)subscribe given MidiPort to/from destination-port virtual void subscribeReadablePort( MidiPort * _port, const QString & _dest, bool _subscribe = true ); virtual void subscribeWritablePort( MidiPort * _port, const QString & _dest, bool _subscribe = true ); virtual void connectRPChanged( QObject * _receiver, const char * _member ) { connect( this, SIGNAL( readablePortsChanged() ), _receiver, _member ); } virtual void connectWPChanged( QObject * _receiver, const char * _member ) { connect( this, SIGNAL( writablePortsChanged() ), _receiver, _member ); } class setupWidget : public MidiClient::setupWidget { public: setupWidget( QWidget * _parent ); virtual ~setupWidget(); virtual void saveSettings(); private: QLineEdit * m_device; } ; private slots: void changeQueueTempo( bpm_t _bpm ); void updatePortList(); private: virtual void run(); #ifdef LMMS_HAVE_ALSA QMutex m_seqMutex; snd_seq_t * m_seqHandle; struct Ports { Ports() { p[0] = -1; p[1] = -1; } int & operator[]( const int _i ) { return p[_i]; } private: int p[2]; } ; QMap m_portIDs; #endif int m_queueID; volatile bool m_quit; QTimer m_portListUpdateTimer; QStringList m_readablePorts; QStringList m_writablePorts; int m_pipe[2]; signals: void readablePortsChanged(); void writablePortsChanged(); } ; #endif lmms-1.1.3/include/MidiClient.h000066400000000000000000000113651247673406200163220ustar00rootroot00000000000000/* * MidiClient.h - base-class for MIDI clients like ALSA-sequencer-client * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_CLIENT_H #define _MIDI_CLIENT_H #include #include #include "MidiEvent.h" #include "MidiEventProcessor.h" #include "tab_widget.h" class MidiPort; // base-class for all MIDI-clients class MidiClient { public: MidiClient(); virtual ~MidiClient(); // to be implemented by sub-classes virtual void processOutEvent( const MidiEvent & _me, const MidiTime & _time, const MidiPort * _port ) = 0; // inheriting classes can re-implement this for being able to update // their internal port-structures etc. virtual void applyPortMode( MidiPort * _port ); virtual void applyPortName( MidiPort * _port ); virtual void addPort( MidiPort * _port ); // re-implemented methods HAVE to call removePort() of base-class!! virtual void removePort( MidiPort * _port ); // returns whether client works with raw-MIDI, only needs to be // re-implemented by MidiClientRaw for returning true virtual bool isRaw() const { return false; } // if not raw-client, return all readable/writable ports virtual QStringList readablePorts() const { return QStringList(); } virtual QStringList writablePorts() const { return QStringList(); } // return name of port which specified MIDI event came from virtual QString sourcePortName( const MidiEvent & ) const { return QString(); } // (un)subscribe given MidiPort to/from destination-port virtual void subscribeReadablePort( MidiPort * _port, const QString & _dest, bool _subscribe = true ); virtual void subscribeWritablePort( MidiPort * _port, const QString & _dest, bool _subscribe = true ); // qobject-derived classes can use this for make a slot being // connected to signal of non-raw-MIDI-client if port-lists change virtual void connectRPChanged( QObject *, const char * ) { } virtual void connectWPChanged( QObject *, const char * ) { } // tries to open either MIDI-driver from config-file or (if it fails) // any other working static MidiClient * openMidiClient(); class setupWidget : public tabWidget { public: setupWidget( const QString & _caption, QWidget * _parent ) : tabWidget( tabWidget::tr( "Settings for %1" ).arg( tr( _caption.toAscii() ) ).toUpper(), _parent ) { } virtual ~setupWidget() { } virtual void saveSettings() = 0; virtual void show() { parentWidget()->show(); QWidget::show(); } } ; protected: QVector m_midiPorts; } ; const uint32_t RAW_MIDI_PARSE_BUF_SIZE = 16; class MidiClientRaw : public MidiClient { public: MidiClientRaw(); virtual ~MidiClientRaw(); // we are raw-clients for sure! virtual bool isRaw() const { return true; } protected: // generic raw-MIDI-parser which generates appropriate MIDI-events void parseData( const unsigned char c ); // to be implemented by actual client-implementation virtual void sendByte( const unsigned char c ) = 0; private: // this does MIDI-event-process void processParsedEvent(); virtual void processOutEvent( const MidiEvent& event, const MidiTime& time, const MidiPort* port ); // small helper function returning length of a certain event - this // is necessary for parsing raw-MIDI-data static int eventLength( const unsigned char event ); // data being used for parsing struct midiParserData { uint8_t m_status; // identifies the type of event, that // is currently received ('Noteon', // 'Pitch Bend' etc). uint8_t m_channel; // The channel of the event that is // received (in case of a channel event) uint32_t m_bytes; // How many bytes have been read for // the current event? uint32_t m_bytesTotal; // How many bytes does the current // event type include? uint32_t m_buffer[RAW_MIDI_PARSE_BUF_SIZE]; // buffer for incoming data MidiEvent m_midiEvent; // midi-event } m_midiParseData; } ; #endif lmms-1.1.3/include/MidiController.h000066400000000000000000000041271247673406200172250ustar00rootroot00000000000000/* * MidiController.h - A controller to receive MIDI control-changes * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MIDI_CONTROLLER_H #define MIDI_CONTROLLER_H #include #include "AutomatableModel.h" #include "Controller.h" #include "MidiEventProcessor.h" #include "MidiPort.h" class MidiPort; class MidiController : public Controller, public MidiEventProcessor { Q_OBJECT public: MidiController( Model * _parent ); virtual ~MidiController(); virtual void processInEvent( const MidiEvent & _me, const MidiTime & _time, f_cnt_t offset = 0 ); virtual void processOutEvent( const MidiEvent& _me, const MidiTime & _time, f_cnt_t offset = 0 ) { // No output yet } virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; // Used by controllerConnectionDialog to copy void subscribeReadablePorts( const MidiPort::Map & _map ); public slots: virtual ControllerDialog * createDialog( QWidget * _parent ); void updateName(); protected: // The internal per-controller get-value function virtual float value( int _offset ); MidiPort m_midiPort; float m_lastValue; friend class ControllerConnectionDialog; friend class AutoDetectMidiController; } ; #endif lmms-1.1.3/include/MidiDummy.h000066400000000000000000000031021247673406200161650ustar00rootroot00000000000000/* * MidiDummy.h - dummy MIDI-driver * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_DUMMY_H #define _MIDI_DUMMY_H #include "MidiClient.h" class MidiDummy : public MidiClientRaw { public: MidiDummy() { } virtual ~MidiDummy() { } inline static QString name() { return( QT_TRANSLATE_NOOP( "setupWidget", "Dummy (no MIDI support)" ) ); } class setupWidget : public MidiClient::setupWidget { public: setupWidget( QWidget * _parent ) : MidiClientRaw::setupWidget( MidiDummy::name(), _parent ) { } virtual ~setupWidget() { } virtual void saveSettings() { } virtual void show() { parentWidget()->hide(); QWidget::show(); } } ; protected: virtual void sendByte( const unsigned char ) { } } ; #endif lmms-1.1.3/include/MidiEvent.h000066400000000000000000000077311247673406200161670ustar00rootroot00000000000000/* * MidiEvent.h - MidiEvent class * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_EVENT_H #define _MIDI_EVENT_H #include #include "Midi.h" #include "panning_constants.h" #include "volume.h" class MidiEvent { public: MidiEvent( MidiEventTypes type = MidiActiveSensing, int8_t channel = 0, int16_t param1 = 0, int16_t param2 = 0, const void* sourcePort = NULL ) : m_type( type ), m_metaEvent( MidiMetaInvalid ), m_channel( channel ), m_sysExData( NULL ), m_sourcePort( sourcePort ) { m_data.m_param[0] = param1; m_data.m_param[1] = param2; } MidiEvent( MidiEventTypes type, const char* sysExData, int dataLen ) : m_type( type ), m_metaEvent( MidiMetaInvalid ), m_channel( 0 ), m_sysExData( sysExData ), m_sourcePort( NULL ) { m_data.m_sysExDataLen = dataLen; } MidiEvent( const MidiEvent& other ) : m_type( other.m_type ), m_metaEvent( other.m_metaEvent ), m_channel( other.m_channel ), m_data( other.m_data ), m_sysExData( other.m_sysExData ), m_sourcePort( other.m_sourcePort ) { } MidiEventTypes type() const { return m_type; } void setType( MidiEventTypes type ) { m_type = type; } void setMetaEvent( MidiMetaEventType metaEvent ) { m_metaEvent = metaEvent; } MidiMetaEventType metaEvent() const { return m_metaEvent; } int8_t channel() const { return m_channel; } void setChannel( int8_t channel ) { m_channel = channel; } int16_t param( int i ) const { return m_data.m_param[i]; } void setParam( int i, uint16_t value ) { m_data.m_param[i] = value; } int16_t key() const { return param( 0 ); } void setKey( int16_t key ) { m_data.m_param[0] = key; } uint8_t velocity() const { return m_data.m_param[1] & 0x7F; } void setVelocity( int16_t velocity ) { m_data.m_param[1] = velocity; } panning_t panning() const { return (panning_t) ( PanningLeft + ( (float)( midiPanning() - MidiMinPanning ) ) / ( (float)( MidiMaxPanning - MidiMinPanning ) ) * ( (float)( PanningRight - PanningLeft ) ) ); } int16_t midiPanning() const { return m_data.m_param[1]; } volume_t volume( int midiBaseVelocity ) const { return (volume_t)( velocity() * DefaultVolume / midiBaseVelocity ); } const void* sourcePort() const { return m_sourcePort; } uint8_t controllerNumber() const { return param( 0 ) & 0x7F; } void setControllerNumber( uint8_t num ) { setParam( 0, num ); } uint8_t controllerValue() const { return param( 1 ); } void setControllerValue( uint8_t value ) { setParam( 1, value ); } uint8_t program() const { return param( 0 ); } uint8_t channelPressure() const { return param( 0 ); } int16_t pitchBend() const { return param( 0 ); } void setPitchBend( uint16_t pitchBend ) { setParam( 0, pitchBend ); } private: MidiEventTypes m_type; // MIDI event type MidiMetaEventType m_metaEvent; // Meta event (mostly unused) int8_t m_channel; // MIDI channel union { int16_t m_param[2]; // first/second parameter (key/velocity) uint8_t m_bytes[4]; // raw bytes int32_t m_sysExDataLen; // len of m_sysExData } m_data; const char* m_sysExData; const void* m_sourcePort; } ; #endif lmms-1.1.3/include/MidiEventProcessor.h000066400000000000000000000027551247673406200200700ustar00rootroot00000000000000/* * MidiEventProcessor.h - base-class for midi-processing classes * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MIDI_EVENT_PROCESSOR_H #define MIDI_EVENT_PROCESSOR_H #include "MidiEvent.h" #include "MidiTime.h" // all classes being able to process MIDI-events should inherit from this class MidiEventProcessor { public: MidiEventProcessor() { } virtual ~MidiEventProcessor() { } // to be implemented by inheriting classes virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ) = 0; virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ) = 0; } ; #endif lmms-1.1.3/include/MidiOss.h000066400000000000000000000032601247673406200156430ustar00rootroot00000000000000/* * MidiOss.h - OSS raw MIDI client * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_OSS_H #define _MIDI_OSS_H #include "lmmsconfig.h" #ifdef LMMS_HAVE_OSS #include #include #include "MidiClient.h" class QLineEdit; class MidiOss : public MidiClientRaw, public QThread { public: MidiOss(); virtual ~MidiOss(); static QString probeDevice(); inline static QString name() { return( QT_TRANSLATE_NOOP( "setupWidget", "OSS Raw-MIDI (Open Sound System)" ) ); } class setupWidget : public MidiClientRaw::setupWidget { public: setupWidget( QWidget * _parent ); virtual ~setupWidget(); virtual void saveSettings(); private: QLineEdit * m_device; } ; protected: virtual void sendByte( const unsigned char c ); virtual void run(); private: QFile m_midiDev; volatile bool m_quit; } ; #endif #endif lmms-1.1.3/include/MidiPort.h000066400000000000000000000110631247673406200160230ustar00rootroot00000000000000/* * MidiPort.h - abstraction of MIDI ports which are part of LMMS' MIDI * sequencing system * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_PORT_H #define _MIDI_PORT_H #include #include #include #include "Midi.h" #include "MidiTime.h" #include "AutomatableModel.h" class MidiClient; class MidiEvent; class MidiEventProcessor; class MidiPortMenu; // class for abstraction of MIDI-port class MidiPort : public Model, public SerializingObject { Q_OBJECT mapPropertyFromModel(int,inputChannel,setInputChannel,m_inputChannelModel); mapPropertyFromModel(int,outputChannel,setOutputChannel,m_outputChannelModel); mapPropertyFromModel(int,inputController,setInputController,m_inputControllerModel); mapPropertyFromModel(int,outputController,setOutputController,m_outputControllerModel); mapPropertyFromModel(int,fixedInputVelocity,setFixedInputVelocity,m_fixedInputVelocityModel); mapPropertyFromModel(int,fixedOutputVelocity,setFixedOutputVelocity,m_fixedOutputVelocityModel); mapPropertyFromModel(int,fixedOutputNote,setFixedOutputNote,m_fixedOutputNoteModel); mapPropertyFromModel(int,outputProgram,setOutputProgram,m_outputProgramModel); mapPropertyFromModel(int,baseVelocity,setBaseVelocity,m_baseVelocityModel); mapPropertyFromModel(bool,isReadable,setReadable,m_readableModel); mapPropertyFromModel(bool,isWritable,setWritable,m_writableModel); public: typedef QMap Map; enum Modes { Disabled, // don't route any MIDI-events (default) Input, // from MIDI-client to MIDI-event-processor Output, // from MIDI-event-processor to MIDI-client Duplex // both directions } ; typedef Modes Mode; MidiPort( const QString& name, MidiClient* client, MidiEventProcessor* eventProcessor, Model* parent = NULL, Mode mode = Disabled ); virtual ~MidiPort(); void setName( const QString& name ); Mode mode() const { return m_mode; } void setMode( Mode mode ); bool isInputEnabled() const { return mode() == Input || mode() == Duplex; } bool isOutputEnabled() const { return mode() == Output || mode() == Duplex; } int realOutputChannel() const { return outputChannel() - 1; } void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime() ); void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime() ); virtual void saveSettings( QDomDocument& doc, QDomElement& thisElement ); virtual void loadSettings( const QDomElement& thisElement ); virtual QString nodeName() const { return "midiport"; } void subscribeReadablePort( const QString& port, bool subscribe = true ); void subscribeWritablePort( const QString& port, bool subscribe = true ); const Map& readablePorts() const { return m_readablePorts; } const Map& writablePorts() const { return m_writablePorts; } MidiPortMenu* m_readablePortsMenu; MidiPortMenu* m_writablePortsMenu; public slots: void updateMidiPortMode(); private slots: void updateReadablePorts(); void updateWritablePorts(); void updateOutputProgram(); private: MidiClient* m_midiClient; MidiEventProcessor* m_midiEventProcessor; Mode m_mode; IntModel m_inputChannelModel; IntModel m_outputChannelModel; IntModel m_inputControllerModel; IntModel m_outputControllerModel; IntModel m_fixedInputVelocityModel; IntModel m_fixedOutputVelocityModel; IntModel m_fixedOutputNoteModel; IntModel m_outputProgramModel; IntModel m_baseVelocityModel; BoolModel m_readableModel; BoolModel m_writableModel; Map m_readablePorts; Map m_writablePorts; friend class ControllerConnectionDialog; friend class InstrumentMidiIOView; signals: void readablePortsChanged(); void writablePortsChanged(); void modeChanged(); } ; typedef QList MidiPortList; #endif lmms-1.1.3/include/MidiPortMenu.h000066400000000000000000000026351247673406200166550ustar00rootroot00000000000000/* * MidiPortMenu.h - a menu for subscribing a MidiPort to several external * MIDI ports * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_PORT_MENU_H #define _MIDI_PORT_MENU_H #include #include "ModelView.h" #include "MidiPort.h" class QAction; class MidiPortMenu : public QMenu, public ModelView { Q_OBJECT public: MidiPortMenu( MidiPort::Modes _mode ); virtual ~MidiPortMenu(); public slots: void updateMenu(); protected slots: void activatedPort( QAction * _item ); private: virtual void modelChanged(); MidiPort::Modes m_mode; } ; #endif lmms-1.1.3/include/MidiTime.h000066400000000000000000000060361247673406200160010ustar00rootroot00000000000000/* * MidiTime.h - declaration of class MidiTime which provides data type for * position- and length-variables * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_TIME_H #define _MIDI_TIME_H #include "lmms_basics.h" #include "export.h" const int DefaultTicksPerTact = 192; const int DefaultStepsPerTact = 16; const int DefaultBeatsPerTact = DefaultTicksPerTact / DefaultStepsPerTact; class EXPORT MidiTime { public: MidiTime( const tact_t tact, const tick_t ticks ) : m_ticks( tact * s_ticksPerTact + ticks ) { } MidiTime( const tick_t ticks = 0 ) : m_ticks( ticks ) { } MidiTime( const MidiTime& time ) : m_ticks( time.m_ticks ) { } MidiTime toNearestTact() const { if( m_ticks % s_ticksPerTact >= s_ticksPerTact/2 ) { return ( getTact() + 1 ) * s_ticksPerTact; } return getTact() * s_ticksPerTact; } MidiTime toAbsoluteTact() const { return getTact() * s_ticksPerTact; } MidiTime& operator=( const MidiTime& time ) { m_ticks = time.m_ticks; return *this; } MidiTime& operator+=( const MidiTime& time ) { m_ticks += time.m_ticks; return *this; } MidiTime& operator-=( const MidiTime& time ) { m_ticks -= time.m_ticks; return *this; } tact_t getTact() const { return m_ticks / s_ticksPerTact; } tact_t nextFullTact() const { if( m_ticks % s_ticksPerTact == 0 ) { return m_ticks / s_ticksPerTact; } return m_ticks / s_ticksPerTact + 1; } void setTicks( tick_t ticks ) { m_ticks = ticks; } tick_t getTicks() const { return m_ticks; } operator int() const { return m_ticks; } // calculate number of frame that are needed this time f_cnt_t frames( const float framesPerTick ) const { if( m_ticks >= 0 ) { return static_cast( m_ticks * framesPerTick ); } return 0; } static MidiTime fromFrames( const f_cnt_t frames, const float framesPerTick ) { return MidiTime( static_cast( frames / framesPerTick ) ); } static tick_t ticksPerTact() { return s_ticksPerTact; } static int stepsPerTact() { return qMax( 1, ticksPerTact() / DefaultBeatsPerTact ); } static void setTicksPerTact( tick_t _tpt ) { s_ticksPerTact = _tpt; } private: tick_t m_ticks; static tick_t s_ticksPerTact; } ; #endif lmms-1.1.3/include/MidiWinMM.h000066400000000000000000000064671247673406200161020ustar00rootroot00000000000000/* * MidiWinMM.h - WinMM MIDI client * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_WINMM_H #define _MIDI_WINMM_H #include "lmmsconfig.h" #ifdef LMMS_BUILD_WIN32 #include #include #endif #include "MidiClient.h" #include "MidiPort.h" class QLineEdit; class MidiWinMM : public QObject, public MidiClient { Q_OBJECT public: MidiWinMM(); virtual ~MidiWinMM(); static QString probeDevice(); inline static QString name() { return QT_TRANSLATE_NOOP( "setupWidget", "WinMM MIDI" ); } virtual void processOutEvent( const MidiEvent & _me, const MidiTime & _time, const MidiPort * _port ); virtual void applyPortMode( MidiPort * _port ); virtual void removePort( MidiPort * _port ); #ifdef LMMS_BUILD_WIN32 // list devices as ports virtual QStringList readablePorts() const { return m_inputDevices.values(); } virtual QStringList writablePorts() const { return m_outputDevices.values(); } #endif // return name of port which specified MIDI event came from virtual QString sourcePortName( const MidiEvent & ) const; // (un)subscribe given MidiPort to/from destination-port virtual void subscribeReadablePort( MidiPort * _port, const QString & _dest, bool _subscribe = true ); virtual void subscribeWritablePort( MidiPort * _port, const QString & _dest, bool _subscribe = true ); virtual void connectRPChanged( QObject * _receiver, const char * _member ) { connect( this, SIGNAL( readablePortsChanged() ), _receiver, _member ); } virtual void connectWPChanged( QObject * _receiver, const char * _member ) { connect( this, SIGNAL( writablePortsChanged() ), _receiver, _member ); } virtual bool isRaw() const { return false; } class setupWidget : public MidiClient::setupWidget { public: setupWidget( QWidget * _parent ); virtual ~setupWidget(); virtual void saveSettings() { } } ; private:// slots: void updateDeviceList(); private: void openDevices(); void closeDevices(); #ifdef LMMS_BUILD_WIN32 static void WINAPI CALLBACK inputCallback( HMIDIIN _hm, UINT _msg, DWORD_PTR _inst, DWORD_PTR _param1, DWORD_PTR _param2 ); void handleInputEvent( HMIDIIN _hm, DWORD _ev ); QMap m_inputDevices; QMap m_outputDevices; #endif // subscriptions typedef QMap SubMap; SubMap m_inputSubs; SubMap m_outputSubs; signals: void readablePortsChanged(); void writablePortsChanged(); } ; #endif lmms-1.1.3/include/MixHelpers.h000066400000000000000000000042351247673406200163570ustar00rootroot00000000000000/* * MixHelpers.h - helper functions for mixing buffers * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIX_HELPERS_H #define _MIX_HELPERS_H #include "lmms_basics.h" namespace MixHelpers { bool isSilent( const sampleFrame* src, int frames ); /*! \brief Add samples from src to dst */ void add( sampleFrame* dst, const sampleFrame* src, int frames ); /*! \brief Add samples from src multiplied by coeffSrc to dst */ void addMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames ); /*! \brief Same as addMultiplied, but sanitize output (strip out infs/nans) */ void addSanitizedMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames ); /*! \brief Add samples from src multiplied by coeffSrcLeft/coeffSrcRight to dst */ void addMultipliedStereo( sampleFrame* dst, const sampleFrame* src, float coeffSrcLeft, float coeffSrcRight, int frames ); /*! \brief Multiply dst by coeffDst and add samples from src multiplied by coeffSrc */ void multiplyAndAddMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffDst, float coeffSrc, int frames ); /*! \brief Multiply dst by coeffDst and add samples from srcLeft/srcRight multiplied by coeffSrc */ void multiplyAndAddMultipliedJoined( sampleFrame* dst, const sample_t* srcLeft, const sample_t* srcRight, float coeffDst, float coeffSrc, int frames ); } #endif lmms-1.1.3/include/Mixer.h000066400000000000000000000213531247673406200153630ustar00rootroot00000000000000/* * Mixer.h - audio-device-independent mixer for LMMS * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIXER_H #define _MIXER_H // denormals stripping #ifdef __SSE__ #include #endif #ifdef __SSE3__ #include #endif #include "lmmsconfig.h" #ifndef LMMS_USE_3RDPARTY_LIBSRC #include #else #ifndef OUT_OF_TREE_BUILD #include "src/3rdparty/samplerate/samplerate.h" #else #include #endif #endif #include #include #include #include #include "lmms_basics.h" #include "note.h" #include "fifo_buffer.h" #include "MixerProfiler.h" class AudioDevice; class MidiClient; class AudioPort; const fpp_t DEFAULT_BUFFER_SIZE = 256; const int BYTES_PER_SAMPLE = sizeof( sample_t ); const int BYTES_PER_INT_SAMPLE = sizeof( int_sample_t ); const int BYTES_PER_FRAME = sizeof( sampleFrame ); const int BYTES_PER_SURROUND_FRAME = sizeof( surroundSampleFrame ); const float OUTPUT_SAMPLE_MULTIPLIER = 32767.0f; const float BaseFreq = 440.0f; const Keys BaseKey = Key_A; const Octaves BaseOctave = DefaultOctave; #include "PlayHandle.h" class MixerWorkerThread; class EXPORT Mixer : public QObject { Q_OBJECT public: struct qualitySettings { enum Mode { Mode_Draft, Mode_HighQuality, Mode_FinalMix } ; enum Interpolation { Interpolation_Linear, Interpolation_SincFastest, Interpolation_SincMedium, Interpolation_SincBest } ; enum Oversampling { Oversampling_None, Oversampling_2x, Oversampling_4x, Oversampling_8x } ; Interpolation interpolation; Oversampling oversampling; qualitySettings( Mode _m ) { switch( _m ) { case Mode_Draft: interpolation = Interpolation_Linear; oversampling = Oversampling_None; break; case Mode_HighQuality: interpolation = Interpolation_SincFastest; oversampling = Oversampling_2x; break; case Mode_FinalMix: interpolation = Interpolation_SincBest; oversampling = Oversampling_8x; break; } } qualitySettings( Interpolation _i, Oversampling _o ) : interpolation( _i ), oversampling( _o ) { } int sampleRateMultiplier() const { switch( oversampling ) { case Oversampling_None: return 1; case Oversampling_2x: return 2; case Oversampling_4x: return 4; case Oversampling_8x: return 8; } return 1; } int libsrcInterpolation() const { switch( interpolation ) { case Interpolation_Linear: return SRC_ZERO_ORDER_HOLD; case Interpolation_SincFastest: return SRC_SINC_FASTEST; case Interpolation_SincMedium: return SRC_SINC_MEDIUM_QUALITY; case Interpolation_SincBest: return SRC_SINC_BEST_QUALITY; } return SRC_LINEAR; } } ; void initDevices(); void clear(); // audio-device-stuff inline const QString & audioDevName() const { return m_audioDevName; } void setAudioDevice( AudioDevice * _dev ); void setAudioDevice( AudioDevice * _dev, const struct qualitySettings & _qs, bool _needs_fifo ); void restoreAudioDevice(); inline AudioDevice * audioDev() { return m_audioDev; } // audio-port-stuff inline void addAudioPort( AudioPort * _port ) { lock(); m_audioPorts.push_back( _port ); unlock(); } void removeAudioPort( AudioPort * _port ); // MIDI-client-stuff inline const QString & midiClientName() const { return m_midiClientName; } inline MidiClient * midiClient() { return m_midiClient; } // play-handle stuff bool addPlayHandle( PlayHandle* handle ) { if( criticalXRuns() == false ) { lock(); m_playHandles.push_back( handle ); unlock(); return true; } delete handle; return false; } void removePlayHandle( PlayHandle* handle ); inline PlayHandleList& playHandles() { return m_playHandles; } void removePlayHandles( track * _track, bool removeIPHs = true ); bool hasNotePlayHandles(); // methods providing information for other classes inline fpp_t framesPerPeriod() const { return m_framesPerPeriod; } inline const surroundSampleFrame * currentReadBuffer() const { return m_readBuf; } MixerProfiler& profiler() { return m_profiler; } int cpuLoad() const { return m_profiler.cpuLoad(); } const qualitySettings & currentQualitySettings() const { return m_qualitySettings; } sample_rate_t baseSampleRate() const; sample_rate_t outputSampleRate() const; sample_rate_t inputSampleRate() const; sample_rate_t processingSampleRate() const; inline float masterGain() const { return m_masterGain; } inline void setMasterGain( const float _mo ) { m_masterGain = _mo; } static inline sample_t clip( const sample_t _s ) { if( _s > 1.0f ) { return 1.0f; } else if( _s < -1.0f ) { return -1.0f; } return _s; } // methods needed by other threads to alter knob values, waveforms, etc void lock() { m_globalMutex.lock(); } void unlock() { m_globalMutex.unlock(); } void lockInputFrames() { m_inputFramesMutex.lock(); } void unlockInputFrames() { m_inputFramesMutex.unlock(); } // audio-buffer-mgm void bufferToPort( const sampleFrame * _buf, const fpp_t _frames, const f_cnt_t _offset, stereoVolumeVector _volume_vector, AudioPort * _port ); static void clearAudioBuffer( sampleFrame * _ab, const f_cnt_t _frames, const f_cnt_t _offset = 0 ); #ifndef LMMS_DISABLE_SURROUND static void clearAudioBuffer( surroundSampleFrame * _ab, const f_cnt_t _frames, const f_cnt_t _offset = 0 ); #endif static float peakValueLeft( sampleFrame * _ab, const f_cnt_t _frames ); static float peakValueRight( sampleFrame * _ab, const f_cnt_t _frames ); bool criticalXRuns() const; inline bool hasFifoWriter() const { return m_fifoWriter != NULL; } void pushInputFrames( sampleFrame * _ab, const f_cnt_t _frames ); inline const sampleFrame * inputBuffer() { return m_inputBuffer[ m_inputBufferRead ]; } inline f_cnt_t inputBufferFrames() const { return m_inputBufferFrames[ m_inputBufferRead ]; } inline const surroundSampleFrame * nextBuffer() { return hasFifoWriter() ? m_fifo->read() : renderNextBuffer(); } void changeQuality( const struct qualitySettings & _qs ); signals: void qualitySettingsChanged(); void sampleRateChanged(); void nextAudioBuffer(); private: typedef fifoBuffer fifo; class fifoWriter : public QThread { public: fifoWriter( Mixer * _mixer, fifo * _fifo ); void finish(); private: Mixer * m_mixer; fifo * m_fifo; volatile bool m_writing; virtual void run(); } ; Mixer(); virtual ~Mixer(); void startProcessing( bool _needs_fifo = true ); void stopProcessing(); AudioDevice * tryAudioDevices(); MidiClient * tryMidiClients(); const surroundSampleFrame * renderNextBuffer(); QVector m_audioPorts; fpp_t m_framesPerPeriod; sampleFrame * m_workingBuf; sampleFrame * m_inputBuffer[2]; f_cnt_t m_inputBufferFrames[2]; f_cnt_t m_inputBufferSize[2]; int m_inputBufferRead; int m_inputBufferWrite; surroundSampleFrame * m_readBuf; surroundSampleFrame * m_writeBuf; QVector m_bufferPool; int m_readBuffer; int m_writeBuffer; int m_poolDepth; surroundSampleFrame m_maxClip; surroundSampleFrame m_previousSample; fpp_t m_halfStart[SURROUND_CHANNELS]; bool m_oldBuffer[SURROUND_CHANNELS]; bool m_newBuffer[SURROUND_CHANNELS]; QVector m_workers; int m_numWorkers; QWaitCondition m_queueReadyWaitCond; PlayHandleList m_playHandles; ConstPlayHandleList m_playHandlesToRemove; struct qualitySettings m_qualitySettings; float m_masterGain; AudioDevice * m_audioDev; AudioDevice * m_oldAudioDev; QString m_audioDevName; MidiClient * m_midiClient; QString m_midiClientName; QMutex m_globalMutex; QMutex m_inputFramesMutex; fifo * m_fifo; fifoWriter * m_fifoWriter; MixerProfiler m_profiler; friend class engine; friend class MixerWorkerThread; } ; #endif lmms-1.1.3/include/MixerProfiler.h000066400000000000000000000025761247673406200170740ustar00rootroot00000000000000/* * MixerProfiler.h - class for profiling performance of Mixer * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MIXER_PROFILER_H #define MIXER_PROFILER_H #include #include "MicroTimer.h" class MixerProfiler { public: MixerProfiler(); ~MixerProfiler(); void startPeriod() { m_periodTimer.reset(); } void finishPeriod( sample_rate_t sampleRate, fpp_t framesPerPeriod ); int cpuLoad() const { return m_cpuLoad; } void setOutputFile( const QString& outputFile ); private: MicroTimer m_periodTimer; int m_cpuLoad; QFile m_outputFile; }; #endif lmms-1.1.3/include/MixerWorkerThread.h000066400000000000000000000054471247673406200177130ustar00rootroot00000000000000/* * MixerWorkerThread.h - declaration of class MixerWorkerThread * * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MIXER_WORKER_THREAD_H #define MIXER_WORKER_THREAD_H #include #include #include "ThreadableJob.h" #include "Mixer.h" #ifdef __SSE__ #include #endif #ifdef __SSE3__ #include #endif class MixerWorkerThread : public QThread { public: // internal representation of the job queue - all functions are thread-safe class JobQueue { public: enum OperationMode { Static, // no jobs added while processing queue Dynamic // jobs can be added while processing queue } ; JobQueue() : m_items(), m_queueSize( 0 ), m_itemsDone( 0 ), m_opMode( Static ) { } void reset( OperationMode _opMode ); void addJob( ThreadableJob * _job ); void run( sampleFrame * _buffer ); void wait(); private: #define JOB_QUEUE_SIZE 1024 QAtomicPointer m_items[JOB_QUEUE_SIZE]; QAtomicInt m_queueSize; QAtomicInt m_itemsDone; OperationMode m_opMode; } ; MixerWorkerThread( Mixer* mixer ); virtual ~MixerWorkerThread(); virtual void quit(); static void resetJobQueue( JobQueue::OperationMode _opMode = JobQueue::Static ) { globalJobQueue.reset( _opMode ); } static void addJob( ThreadableJob * _job ) { globalJobQueue.addJob( _job ); } // a convenient helper function allowing to pass a container with pointers // to ThreadableJob objects template static void fillJobQueue( const T & _vec, JobQueue::OperationMode _opMode = JobQueue::Static ) { resetJobQueue( _opMode ); for( typename T::ConstIterator it = _vec.begin(); it != _vec.end(); ++it ) { addJob( *it ); } } static void startAndWaitForJobs(); private: virtual void run(); static JobQueue globalJobQueue; static QWaitCondition * queueReadyWaitCond; static QList workerThreads; sampleFrame * m_workingBuf; volatile bool m_quit; } ; #endif lmms-1.1.3/include/Model.h000066400000000000000000000040011247673406200153260ustar00rootroot00000000000000/* * Model.h - declaration of Model base class * * Copyright (c) 2007-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MODEL_H #define MODEL_H #include #include #include "export.h" class EXPORT Model : public QObject { Q_OBJECT public: Model( Model * _parent, QString _display_name = QString::null, bool _default_constructed = false ) : QObject( _parent ), m_displayName( _display_name ), m_defaultConstructed( _default_constructed ) { } virtual ~Model() { } bool isDefaultConstructed() { return m_defaultConstructed; } Model* parentModel() const { return static_cast( parent() ); } virtual QString displayName() const { return m_displayName; } virtual void setDisplayName( const QString& displayName ) { m_displayName = displayName; } virtual QString fullDisplayName() const; private: QString m_displayName; bool m_defaultConstructed; signals: // emitted if actual data of the model (e.g. values) have changed void dataChanged(); // emitted in case new data was not set as it's been equal to old data void dataUnchanged(); // emitted if properties of the model (e.g. ranges) have changed void propertiesChanged(); } ; #endif lmms-1.1.3/include/ModelView.h000066400000000000000000000032401247673406200161650ustar00rootroot00000000000000/* * ModelView.h - declaration of ModelView base class * * Copyright (c) 2007-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MODEL_VIEW_H #define MODEL_VIEW_H #include "Model.h" class EXPORT ModelView { public: ModelView( Model* model, QWidget* widget ); virtual ~ModelView(); virtual void setModel( Model* model, bool isOldModelValid = true ); Model* model() { return m_model; } const Model* model() const { return m_model; } template T* castModel() { return dynamic_cast( model() ); } template const T* castModel() const { return dynamic_cast( model() ); } protected: // sub-classes can re-implement this to track model-changes virtual void modelChanged() { } QWidget* widget() { return m_widget; } virtual void doConnections(); private: QWidget* m_widget; QPointer m_model; } ; #endif lmms-1.1.3/include/NotePlayHandle.h000066400000000000000000000172531247673406200171520ustar00rootroot00000000000000/* * NotePlayHandle.h - declaration of class NotePlayHandle which manages * playback of a single note by an instrument * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef NOTE_PLAY_HANDLE_H #define NOTE_PLAY_HANDLE_H #include "lmmsconfig.h" #include "note.h" #include "PlayHandle.h" #include "track.h" class InstrumentTrack; class NotePlayHandle; template class basicFilters; typedef QList NotePlayHandleList; typedef QList ConstNotePlayHandleList; class EXPORT NotePlayHandle : public PlayHandle, public note { public: void * m_pluginData; basicFilters<> * m_filter; // specifies origin of NotePlayHandle enum Origins { OriginPattern, /*! playback of a note from a pattern */ OriginMidiInput, /*! playback of a MIDI note input event */ OriginNoteStacking, /*! created by note stacking instrument function */ OriginArpeggio, /*! created by arpeggio instrument function */ OriginCount }; typedef Origins Origin; NotePlayHandle( InstrumentTrack* instrumentTrack, const f_cnt_t offset, const f_cnt_t frames, const note& noteToPlay, NotePlayHandle* parent = NULL, int midiEventChannel = -1, Origin origin = OriginPattern ); virtual ~NotePlayHandle(); virtual void setVolume( volume_t volume ); virtual void setPanning( panning_t panning ); int midiKey() const; int midiChannel() const { return m_midiChannel; } const float& frequency() const { return m_frequency; } void updateFrequency(); /*! Returns frequency without pitch wheel influence */ float unpitchedFrequency() const { return m_unpitchedFrequency; } /*! Renders one chunk using the attached instrument into the buffer */ virtual void play( sampleFrame* buffer ); /*! Returns whether playback of note is finished and thus handle can be deleted */ virtual bool isFinished() const { return m_released && framesLeft() <= 0 && m_scheduledNoteOff < 0; } /*! Returns number of frames left for playback */ f_cnt_t framesLeft() const; /*! Returns how many frames have to be rendered in current period */ fpp_t framesLeftForCurrentPeriod() const; /*! Returns whether the play handle plays on a certain track */ virtual bool isFromTrack( const track* _track ) const; /*! Releases the note (and plays release frames */ void noteOff( const f_cnt_t offset = 0 ); /*! Returns number of frames to be played until the note is going to be released */ f_cnt_t framesBeforeRelease() const { return m_framesBeforeRelease; } /*! Returns how many frames were played since release */ f_cnt_t releaseFramesDone() const { return m_releaseFramesDone; } /*! Returns the number of frames to be played after release according to the release times in the envelopes */ f_cnt_t actualReleaseFramesToDo() const; /*! Returns total numbers of frames to play (including release frames) */ f_cnt_t frames() const { return m_frames; } /*! Sets the total number of frames to play (including release frames) */ void setFrames( const f_cnt_t _frames ); /*! Returns whether note was released */ bool isReleased() const { return m_released; } /*! Returns total numbers of frames played so far */ f_cnt_t totalFramesPlayed() const { return m_totalFramesPlayed; } /*! Returns volume level at given frame (envelope/LFO) */ float volumeLevel( const f_cnt_t frame ); /*! Returns instrument track which is being played by this handle (const version) */ const InstrumentTrack* instrumentTrack() const { return m_instrumentTrack; } /*! Returns instrument track which is being played by this handle */ InstrumentTrack* instrumentTrack() { return m_instrumentTrack; } /*! Returns whether note has a parent, e.g. is not part of an arpeggio or a chord */ bool hasParent() const { return m_hasParent; } /*! Returns origin of note */ Origin origin() const { return m_origin; } /*! Returns whether note has children */ bool isMasterNote() const { return m_subNotes.size() > 0 || m_hadChildren; } /*! Returns whether note is muted */ bool isMuted() const { return m_muted; } /*! Mutes playback of note */ void mute(); /*! Returns index of NotePlayHandle in vector of note-play-handles belonging to this instrument track - used by arpeggiator */ int index() const; /*! returns list of note-play-handles belonging to given instrument track, if allPlayHandles = true, also released note-play-handles are returned */ static ConstNotePlayHandleList nphsOfInstrumentTrack( const InstrumentTrack* track, bool allPlayHandles = false ); /*! Returns whether given NotePlayHandle instance is equal to *this */ bool operator==( const NotePlayHandle & _nph ) const; /*! Returns whether NotePlayHandle belongs to BB track and BB track is muted */ bool isBbTrackMuted() { return m_bbTrack && m_bbTrack->isMuted(); } /*! Sets attached BB track */ void setBBTrack( track* t ) { m_bbTrack = t; } /*! Process note detuning automation */ void processMidiTime( const MidiTime& time ); /*! Updates total length (m_frames) depending on a new tempo */ void resize( const bpm_t newTempo ); /*! Set song-global offset (relative to containing pattern) in order to properly perform the note detuning */ void setSongGlobalParentOffset( const MidiTime& offset ) { m_songGlobalParentOffset = offset; } /*! Returns song-global offset */ const MidiTime& songGlobalParentOffset() const { return m_songGlobalParentOffset; } private: class BaseDetuning { public: BaseDetuning( DetuningHelper* detuning ); void setValue( float val ) { m_value = val; } float value() const { return m_value; } private: float m_value; } ; InstrumentTrack* m_instrumentTrack; // needed for calling // InstrumentTrack::playNote f_cnt_t m_frames; // total frames to play f_cnt_t m_totalFramesPlayed; // total frame-counter - used for // figuring out whether a whole note // has been played f_cnt_t m_framesBeforeRelease; // number of frames after which note // is released f_cnt_t m_releaseFramesToDo; // total numbers of frames to be // played after release f_cnt_t m_releaseFramesDone; // number of frames done after // release of note f_cnt_t m_scheduledNoteOff; // variable for scheduling noteoff at next period NotePlayHandleList m_subNotes; // used for chords and arpeggios volatile bool m_released; // indicates whether note is released bool m_hasParent; bool m_hadChildren; bool m_muted; // indicates whether note is muted track* m_bbTrack; // related BB track // tempo reaction bpm_t m_origTempo; // original tempo f_cnt_t m_origFrames; // original m_frames const int m_origBaseNote; float m_frequency; float m_unpitchedFrequency; BaseDetuning* m_baseDetuning; MidiTime m_songGlobalParentOffset; const int m_midiChannel; const Origin m_origin; } ; #endif lmms-1.1.3/include/Oscillator.h000066400000000000000000000116351247673406200164140ustar00rootroot00000000000000/* * Oscillator.h - declaration of class Oscillator * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _OSCILLATOR_H #define _OSCILLATOR_H #include "lmmsconfig.h" #include #ifdef LMMS_HAVE_STDLIB_H #include #endif #include "SampleBuffer.h" #include "lmms_constants.h" class SampleBuffer; class IntModel; class EXPORT Oscillator { public: enum WaveShapes { SineWave, TriangleWave, SawWave, SquareWave, MoogSawWave, ExponentialWave, WhiteNoise, UserDefinedWave, NumWaveShapes } ; enum ModulationAlgos { PhaseModulation, AmplitudeModulation, SignalMix, SynchronizedBySubOsc, FrequencyModulation, NumModulationAlgos } ; Oscillator( const IntModel * _wave_shape_model, const IntModel * _mod_algo_model, const float & _freq, const float & _detuning, const float & _phase_offset, const float & _volume, Oscillator * _m_subOsc = NULL ); virtual ~Oscillator() { delete m_subOsc; } inline void setUserWave( const SampleBuffer * _wave ) { m_userWave = _wave; } void update( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); // now follow the wave-shape-routines... static inline sample_t sinSample( const float _sample ) { return sinf( _sample * F_2PI ); } static inline sample_t triangleSample( const float _sample ) { const float ph = fraction( _sample ); if( ph <= 0.25f ) { return ph * 4.0f; } else if( ph <= 0.75f ) { return 2.0f - ph * 4.0f; } return ph * 4.0f - 4.0f; } static inline sample_t sawSample( const float _sample ) { return -1.0f + fraction( _sample ) * 2.0f; } static inline sample_t squareSample( const float _sample ) { return ( fraction( _sample ) > 0.5f ) ? -1.0f : 1.0f; } static inline sample_t moogSawSample( const float _sample ) { const float ph = fraction( _sample ); if( ph < 0.5f ) { return -1.0f + ph * 4.0f; } return 1.0f - 2.0f * ph; } static inline sample_t expSample( const float _sample ) { float ph = fraction( _sample ); if( ph > 0.5f ) { ph = 1.0f - ph; } return -1.0f + 8.0f * ph * ph; } static inline sample_t noiseSample( const float ) { // Precise implementation // return 1.0f - rand() * 2.0f / RAND_MAX; // Fast implementation return 1.0f - fast_rand() * 2.0f / FAST_RAND_MAX; } inline sample_t userWaveSample( const float _sample ) const { return m_userWave->userWaveSample( _sample ); } private: const IntModel * m_waveShapeModel; const IntModel * m_modulationAlgoModel; const float & m_freq; const float & m_detuning; const float & m_volume; const float & m_ext_phaseOffset; Oscillator * m_subOsc; float m_phaseOffset; float m_phase; const SampleBuffer * m_userWave; void updateNoSub( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); void updatePM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); void updateAM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); void updateMix( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); void updateSync( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); void updateFM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); float syncInit( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); inline bool syncOk( float _osc_coeff ); template void updateNoSub( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); template void updatePM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); template void updateAM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); template void updateMix( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); template void updateSync( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); template void updateFM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ); template inline sample_t getSample( const float _sample ); inline void recalcPhase(); } ; #endif lmms-1.1.3/include/Pattern.h000066400000000000000000000077121247673406200157170ustar00rootroot00000000000000/* * Pattern.h - declaration of class Pattern, which contains all information * about a pattern * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef PATTERN_H #define PATTERN_H #include #include #include #include #include #include "note.h" #include "track.h" class QAction; class QProgressBar; class QPushButton; class InstrumentTrack; class SampleBuffer; class EXPORT Pattern : public trackContentObject { Q_OBJECT public: enum PatternTypes { BeatPattern, MelodyPattern } ; Pattern( InstrumentTrack* instrumentTrack ); Pattern( const Pattern& other ); virtual ~Pattern(); void init(); virtual MidiTime length() const; MidiTime beatPatternLength() const; // note management note * addNote( const note & _new_note, const bool _quant_pos = true ); void removeNote( const note * _note_to_del ); note * noteAtStep( int _step ); note * rearrangeNote( const note * _note_to_proc, const bool _quant_pos = true ); void rearrangeAllNotes(); void clearNotes(); inline const NoteVector & notes() const { return m_notes; } void setStep( int _step, bool _enabled ); // pattern-type stuff inline PatternTypes type() const { return m_patternType; } void setType( PatternTypes _new_pattern_type ); void checkType(); // settings-management virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "pattern"; } inline InstrumentTrack * instrumentTrack() const { return m_instrumentTrack; } bool empty(); virtual trackContentObjectView * createView( trackView * _tv ); using Model::dataChanged; protected: void ensureBeatNotes(); void updateBBTrack(); protected slots: void addSteps(); void removeSteps(); void clear(); void changeTimeSignature(); private: InstrumentTrack * m_instrumentTrack; PatternTypes m_patternType; // data-stuff NoteVector m_notes; int m_steps; friend class PatternView; friend class bbEditor; signals: void destroyedPattern( Pattern* ); } ; class PatternView : public trackContentObjectView { Q_OBJECT // theming qproperties Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) public: PatternView( Pattern* pattern, trackView* parent ); virtual ~PatternView(); public slots: virtual void update(); protected slots: void openInPianoRoll(); void resetName(); void changeName(); protected: virtual void constructContextMenu( QMenu * ); virtual void mouseDoubleClickEvent( QMouseEvent * _me ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ) { m_needsUpdate = true; trackContentObjectView::resizeEvent( _re ); } virtual void wheelEvent( QWheelEvent * _we ); private: static QPixmap * s_stepBtnOn; static QPixmap * s_stepBtnOverlay; static QPixmap * s_stepBtnOff; static QPixmap * s_stepBtnOffLight; Pattern* m_pat; QPixmap m_paintPixmap; bool m_needsUpdate; } ; #endif lmms-1.1.3/include/PeakController.h000066400000000000000000000047571247673406200172340ustar00rootroot00000000000000/* * PeakController.h - peak-controller class * * Copyright (c) 2008-2009 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PEAK_CONTROLLER_H #define _PEAK_CONTROLLER_H #include #include "Model.h" #include "AutomatableModel.h" #include "Controller.h" #include "ControllerDialog.h" class automatableButtonGroup; class knob; class PeakControllerEffect; typedef QVector PeakControllerEffectVector; class EXPORT PeakController : public Controller { Q_OBJECT public: PeakController( Model * _parent, PeakControllerEffect *_peak_effect = NULL ); virtual ~PeakController(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; static void initGetControllerBySetting(); static PeakController * getControllerBySetting( const QDomElement & _this ); static PeakControllerEffectVector s_effects; public slots: virtual ControllerDialog * createDialog( QWidget * _parent ); void handleDestroyedEffect( ); protected: // The internal per-controller get-value function virtual float value( int _offset ); PeakControllerEffect * m_peakEffect; friend class PeakControllerDialog; private: //backward compatibility for <= 0.4.15 static int m_getCount; static int m_loadCount; static bool m_buggedFile; } ; class PeakControllerDialog : public ControllerDialog { Q_OBJECT public: PeakControllerDialog( Controller * _controller, QWidget * _parent ); virtual ~PeakControllerDialog(); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void modelChanged(); PeakController * m_peakController; } ; #endif lmms-1.1.3/include/Piano.h000066400000000000000000000033171247673406200153450ustar00rootroot00000000000000/* * Piano.h - declaration of class Piano * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef PIANO_H #define PIANO_H #include "note.h" #include "Model.h" class InstrumentTrack; class MidiEventProcessor; class Piano : public Model { public: enum KeyTypes { WhiteKey, BlackKey } ; Piano( InstrumentTrack* track ); virtual ~Piano(); void setKeyState( int key, bool state ); bool isKeyPressed( int key ) const { return m_pressedKeys[key]; } void handleKeyPress( int key, int midiVelocity = -1 ); void handleKeyRelease( int key ); InstrumentTrack* instrumentTrack() const { return m_instrumentTrack; } MidiEventProcessor* midiEventProcessor() const { return m_midiEvProc; } private: static bool isValidKey( int key ) { return key >= 0 && key < NumKeys; } InstrumentTrack* m_instrumentTrack; MidiEventProcessor* m_midiEvProc; bool m_pressedKeys[NumKeys]; } ; #endif lmms-1.1.3/include/PianoRoll.h000066400000000000000000000221211247673406200161700ustar00rootroot00000000000000/* * PianoRoll.h - declaration of class PianoRoll which is a window where you * can set and edit notes in an easy way * * Copyright (c) 2004-2014 Tobias Doerffel * Copyright (c) 2008 Andrew Kelley * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef PIANO_ROLL_H #define PIANO_ROLL_H #include #include #include "ComboBoxModel.h" #include "SerializingObject.h" #include "note.h" #include "lmms_basics.h" #include "song.h" #include "tooltip.h" class QPainter; class QPixmap; class QScrollBar; class QString; class QMenu; class QSignalMapper; class comboBox; class NotePlayHandle; class Pattern; class timeLine; class toolButton; class PianoRoll : public QWidget, public SerializingObject { Q_OBJECT Q_PROPERTY( QColor gridColor READ gridColor WRITE setGridColor ) Q_PROPERTY( QColor noteModeColor READ noteModeColor WRITE setNoteModeColor ) Q_PROPERTY( QColor noteColor READ noteColor WRITE setNoteColor ) Q_PROPERTY( QColor barColor READ barColor WRITE setBarColor ) public: /*! \brief Resets settings to default when e.g. creating a new project */ void reset(); void setCurrentPattern( Pattern* newPattern ); inline void stopRecording() { m_recording = false; } inline bool isRecording() const { return m_recording; } const Pattern* currentPattern() const { return m_pattern; } bool hasValidPattern() const { return m_pattern != NULL; } song::PlayModes desiredPlayModeForAccompany() const; int quantization() const; virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "pianoroll"; } void setPauseIcon( bool pause ); // qproperty acces functions QColor gridColor() const; void setGridColor( const QColor & _c ); QColor noteModeColor() const; void setNoteModeColor( const QColor & _c ); QColor noteColor() const; void setNoteColor( const QColor & _c ); QColor barColor() const; void setBarColor( const QColor & _c ); protected: virtual void closeEvent( QCloseEvent * _ce ); virtual void keyPressEvent( QKeyEvent * _ke ); virtual void keyReleaseEvent( QKeyEvent * _ke ); virtual void leaveEvent( QEvent * _e ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseDoubleClickEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ); virtual void wheelEvent( QWheelEvent * _we ); int getKey( int _y ) const; static inline void drawNoteRect( QPainter & _p, int _x, int _y, int _width, note * _n, const QColor & noteCol ); void removeSelection(); void selectAll(); void getSelectedNotes( NoteVector & _selected_notes ); // for entering values with dblclick in the vol/pan bars void enterValue( NoteVector* nv ); protected slots: void play(); void record(); void recordAccompany(); void stop(); void startRecordNote( const note & _n ); void finishRecordNote( const note & _n ); void horScrolled( int _new_pos ); void verScrolled( int _new_pos ); void drawButtonToggled(); void eraseButtonToggled(); void selectButtonToggled(); void detuneButtonToggled(); void copySelectedNotes(); void cutSelectedNotes(); void pasteNotes(); void deleteSelectedNotes(); void updatePosition( const MidiTime & _t ); void updatePositionAccompany( const MidiTime & _t ); void zoomingChanged(); void quantizeChanged(); void updateSemiToneMarkerMenu(); void changeNoteEditMode( int i ); void markSemiTone( int i ); void hidePattern( Pattern* pattern ); signals: void currentPatternChanged(); void semiToneMarkerMenuScaleSetEnabled(bool); void semiToneMarkerMenuChordSetEnabled(bool); private: enum editModes { ModeDraw, ModeErase, ModeSelect, ModeEditDetuning, }; enum actions { ActionNone, ActionMoveNote, ActionResizeNote, ActionSelectNotes, ActionChangeNoteProperty, ActionResizeNoteEditArea }; enum noteEditMode { NoteEditVolume, NoteEditPanning, NoteEditCount // make sure this one is always last }; enum semiToneMarkerAction { stmaUnmarkAll, stmaMarkCurrentSemiTone, stmaMarkCurrentScale, stmaMarkCurrentChord, }; enum PianoRollKeyTypes { PR_WHITE_KEY_SMALL, PR_WHITE_KEY_BIG, PR_BLACK_KEY }; QVector m_nemStr; // gui names of each edit mode QMenu * m_noteEditMenu; // when you right click below the key area QList m_markedSemiTones; QMenu * m_semiToneMarkerMenu; // when you right click on the key area PianoRoll(); PianoRoll( const PianoRoll & ); virtual ~PianoRoll(); void autoScroll( const MidiTime & _t ); MidiTime newNoteLen() const; void shiftPos(int amount); void shiftSemiTone(int amount); bool isSelection() const; int selectionCount() const; void testPlayNote( note * n ); void testPlayKey( int _key, int _vol, int _pan ); void pauseTestNotes( bool _pause = true ); inline int noteEditTop() const; inline int keyAreaBottom() const; inline int noteEditBottom() const; inline int keyAreaTop() const; inline int noteEditRight() const; inline int noteEditLeft() const; void dragNotes( int x, int y, bool alt, bool shift ); static const int cm_scrollAmtHoriz = 10; static const int cm_scrollAmtVert = 1; static QPixmap * s_whiteKeyBigPm; static QPixmap * s_whiteKeyBigPressedPm; static QPixmap * s_whiteKeySmallPm; static QPixmap * s_whiteKeySmallPressedPm; static QPixmap * s_blackKeyPm; static QPixmap * s_blackKeyPressedPm; static QPixmap * s_toolDraw; static QPixmap * s_toolErase; static QPixmap * s_toolSelect; static QPixmap * s_toolMove; static QPixmap * s_toolOpen; static PianoRollKeyTypes prKeyOrder[]; static textFloat * s_textFloat; QWidget * m_toolBar; toolButton * m_playButton; toolButton * m_recordButton; toolButton * m_recordAccompanyButton; toolButton * m_stopButton; toolButton * m_drawButton; toolButton * m_eraseButton; toolButton * m_selectButton; toolButton * m_detuneButton; toolButton * m_cutButton; toolButton * m_copyButton; toolButton * m_pasteButton; comboBox * m_zoomingComboBox; comboBox * m_quantizeComboBox; comboBox * m_noteLenComboBox; comboBox * m_scaleComboBox; comboBox * m_chordComboBox; ComboBoxModel m_zoomingModel; ComboBoxModel m_quantizeModel; ComboBoxModel m_noteLenModel; ComboBoxModel m_scaleModel; ComboBoxModel m_chordModel; Pattern* m_pattern; QScrollBar * m_leftRightScroll; QScrollBar * m_topBottomScroll; MidiTime m_currentPosition; bool m_recording; QList m_recordingNotes; note * m_currentNote; actions m_action; noteEditMode m_noteEditMode; int m_selectStartTick; int m_selectedTick; int m_selectStartKey; int m_selectedKeys; // boundary box around all selected notes when dragging int m_moveBoundaryLeft; int m_moveBoundaryTop; int m_moveBoundaryRight; int m_moveBoundaryBottom; // remember where the scrolling started when dragging so that // we can handle dragging while scrolling with arrow keys int m_mouseDownKey; int m_mouseDownTick; // remember the last x and y of a mouse movement int m_lastMouseX; int m_lastMouseY; // x,y of when the user starts a drag int m_moveStartX; int m_moveStartY; int m_oldNotesEditHeight; int m_notesEditHeight; int m_ppt; int m_totalKeysToScroll; // remember these values to use them // for the next note that is set MidiTime m_lenOfNewNotes; volume_t m_lastNoteVolume; panning_t m_lastNotePanning; int m_startKey; // first key when drawing int m_lastKey; editModes m_editMode; editModes m_ctrlMode; // mode they were in before they hit ctrl bool m_mouseDownLeft; //true if left click is being held down bool m_mouseDownRight; //true if right click is being held down timeLine * m_timeLine; bool m_scrollBack; void copy_to_clipboard( const NoteVector & _notes ) const; void drawDetuningInfo( QPainter & _p, note * _n, int _x, int _y ); bool mouseOverNote(); note * noteUnderMouse(); // turn a selection rectangle into selected notes void computeSelectedNotes( bool shift ); void clearSelectedNotes(); // did we start a mouseclick with shift pressed bool m_startedWithShift; friend class engine; // qproperty fields QColor m_gridColor; QColor m_noteModeColor; QColor m_noteColor; QColor m_barColor; signals: void positionChanged( const MidiTime & ); } ; #endif lmms-1.1.3/include/PianoView.h000066400000000000000000000043241247673406200161770ustar00rootroot00000000000000/* * PianoView.h - declaration of PianoView, an interactive piano/keyboard-widget * * Copyright (c) 2004-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PIANO_VIEW_H #define _PIANO_VIEW_H #include #include #include "ModelView.h" class Piano; class PianoView : public QWidget, public ModelView { Q_OBJECT public: PianoView( QWidget * _parent ); virtual ~PianoView(); static int getKeyFromKeyEvent( QKeyEvent * _ke ); public: virtual void keyPressEvent( QKeyEvent * ke ); virtual void keyReleaseEvent( QKeyEvent * ke ); protected: virtual void modelChanged(); virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void paintEvent( QPaintEvent * ); virtual void mousePressEvent( QMouseEvent * me ); virtual void mouseReleaseEvent( QMouseEvent * me ); virtual void mouseMoveEvent( QMouseEvent * me ); virtual void focusOutEvent( QFocusEvent * _fe ); virtual void resizeEvent( QResizeEvent * _event ); private: int getKeyFromMouse( const QPoint & _p ) const; int getKeyX( int _key_num ) const; static QPixmap * s_whiteKeyPm; static QPixmap * s_blackKeyPm; static QPixmap * s_whiteKeyPressedPm; static QPixmap * s_blackKeyPressedPm; Piano * m_piano; QScrollBar * m_pianoScroll; int m_startKey; // first key when drawing int m_lastKey; private slots: void pianoScrolled( int _new_pos ); signals: void keyPressed( int ); void baseNoteChanged(); } ; #endif lmms-1.1.3/include/Pitch.h000066400000000000000000000023261247673406200153450ustar00rootroot00000000000000/* * Pitch.h - declaration of some constants and types concerning instrument pitch * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PITCH_H #define _PITCH_H #include "lmms_basics.h" #include "Midi.h" typedef int16_t pitch_t; const pitch_t CentsPerSemitone = 100; const pitch_t MinPitchDefault = -CentsPerSemitone; const pitch_t MaxPitchDefault = CentsPerSemitone; const pitch_t DefaultPitch = 0; #endif lmms-1.1.3/include/PlayHandle.h000066400000000000000000000045571247673406200163270ustar00rootroot00000000000000/* * PlayHandle.h - base class PlayHandle - core of rendering engine * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef PLAY_HANDLE_H #define PLAY_HANDLE_H #include #include #include "ThreadableJob.h" #include "lmms_basics.h" class track; class PlayHandle : public ThreadableJob { public: enum Types { TypeNotePlayHandle, TypeInstrumentPlayHandle, TypeSamplePlayHandle, TypePresetPreviewHandle, TypeCount } ; typedef Types Type; PlayHandle( const Type type, f_cnt_t offset = 0 ) : m_type( type ), m_offset( offset ), m_affinity( QThread::currentThread() ) { } virtual ~PlayHandle() { } virtual bool affinityMatters() const { return false; } const QThread* affinity() const { return m_affinity; } Type type() const { return m_type; } // required for ThreadableJob virtual void doProcessing( sampleFrame* buffer ) { play( buffer ); } virtual bool requiresProcessing() const { return !isFinished(); } virtual void play( sampleFrame* buffer ) = 0; virtual bool isFinished( void ) const = 0; // returns how many frames this play-handle is aligned ahead, i.e. // at which position it is inserted in the according buffer f_cnt_t offset() const { return m_offset; } void setOffset( f_cnt_t _offset ) { m_offset = _offset; } virtual bool isFromTrack( const track * _track ) const = 0; private: Type m_type; f_cnt_t m_offset; const QThread* m_affinity; } ; typedef QList PlayHandleList; typedef QList ConstPlayHandleList; #endif lmms-1.1.3/include/Plugin.h000066400000000000000000000117141247673406200155350ustar00rootroot00000000000000/* * Plugin.h - class plugin, the base-class and generic interface for all plugins * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef PLUGIN_H #define PLUGIN_H #include #include #include #include "JournallingObject.h" #include "Model.h" class QWidget; class PixmapLoader; class PluginView; class AutomatableModel; class EXPORT Plugin : public Model, public JournallingObject { Q_OBJECT public: enum PluginTypes { Instrument, // instrument being used in channel-track Effect, // effect-plugin for effect-board ImportFilter, // filter for importing a file ExportFilter, // filter for exporting a file Tool, // additional tool (level-meter etc) Library, // simple library holding a code-base for // several other plugins (e.g. VST-support) Other, Undefined = 255 } ; // descriptor holds information about a plugin - every external plugin // has to instantiate such a descriptor in an extern "C"-section so that // the plugin-loader is able to access information about the plugin struct Descriptor { const char * name; const char * displayName; const char * description; const char * author; int version; PluginTypes type; const PixmapLoader * logo; const char * supportedFileTypes; inline bool supportsFileType( const QString& extension ) const { return QString( supportedFileTypes ).split( QChar( ',' ) ).contains( extension ); } class EXPORT SubPluginFeatures { public: struct Key { typedef QMap AttributeMap; inline Key( const Plugin::Descriptor * _desc = NULL, const QString & _name = QString(), const AttributeMap & _am = AttributeMap() ) : desc( _desc ), name( _name ), attributes( _am ) { } Key( const QDomElement & _key ); QDomElement saveXML( QDomDocument & _doc ) const; inline bool isValid() const { return desc != NULL && name.isNull() == false; } const Plugin::Descriptor* desc; QString name; AttributeMap attributes; } ; typedef QList KeyList; SubPluginFeatures( Plugin::PluginTypes type ) : m_type( type ) { } virtual ~SubPluginFeatures() { } virtual void fillDescriptionWidget( QWidget *, const Key * ) const { } virtual void listSubPluginKeys( const Plugin::Descriptor *, KeyList & ) const { } protected: const Plugin::PluginTypes m_type; } ; SubPluginFeatures * subPluginFeatures; } ; // typedef a list so we can easily work with list of plugin descriptors typedef QList DescriptorList; // contructor of a plugin Plugin( const Descriptor* descriptor, Model* parent ); virtual ~Plugin(); // returns display-name out of descriptor virtual QString displayName() const { return Model::displayName().isEmpty() ? m_descriptor->displayName : Model::displayName(); } // return plugin-type inline PluginTypes type( void ) const { return m_descriptor->type; } // return plugin-descriptor for further information inline const Descriptor* descriptor() const { return m_descriptor; } // can be called if a file matching supportedFileTypes should be // loaded/processed with the help of this plugin virtual void loadFile( const QString& file ); // Called if external source needs to change something but we cannot // reference the class header. Should return null if not key not found. virtual AutomatableModel* childModel( const QString& modelName ); // returns an instance of a plugin whose name matches to given one // if specified plugin couldn't be loaded, it creates a dummy-plugin static Plugin * instantiate( const QString& pluginName, Model * parent, void * data ); // fills given list with descriptors of all available plugins static void getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors ); // create a view for the model PluginView * createView( QWidget* parent ); protected: // create a view for the model virtual PluginView* instantiateView( QWidget* ) = 0; private: const Descriptor* m_descriptor; // pointer to instantiation-function in plugin typedef Plugin * ( * InstantiationHook )( Model*, void* ); } ; #endif lmms-1.1.3/include/PluginView.h000066400000000000000000000023301247673406200163620ustar00rootroot00000000000000/* * PluginView.h - declaration of class PluginView * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PLUGIN_VIEW_H #define _PLUGIN_VIEW_H #include #include "Plugin.h" #include "ModelView.h" class EXPORT PluginView : public QWidget, public ModelView { public: PluginView( Plugin * _plugin, QWidget * _parent ) : QWidget( _parent ), ModelView( _plugin, this ) { } } ; #endif lmms-1.1.3/include/PresetPreviewPlayHandle.h000066400000000000000000000034111247673406200210400ustar00rootroot00000000000000/* * PresetPreviewPlayHandle.h - a PlayHandle specialization for playback of a short * preview of a preset or a file processed by a plugin * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PRESET_PREVIEW_PLAY_HANDLE_H #define _PRESET_PREVIEW_PLAY_HANDLE_H #include "NotePlayHandle.h" class InstrumentTrack; class PreviewTrackContainer; class EXPORT PresetPreviewPlayHandle : public PlayHandle { public: PresetPreviewPlayHandle( const QString& presetFile, bool loadByPlugin = false ); virtual ~PresetPreviewPlayHandle(); virtual void play( sampleFrame* buffer ); virtual bool isFinished() const; virtual bool isFromTrack( const track * _track ) const; static void init(); static void cleanup(); static ConstNotePlayHandleList nphsOfInstrumentTrack( const InstrumentTrack* instrumentTrack ); static bool isPreviewing(); private: static PreviewTrackContainer* s_previewTC; NotePlayHandle* m_previewNote; } ; #endif lmms-1.1.3/include/ProjectJournal.h000066400000000000000000000051331247673406200172360ustar00rootroot00000000000000/* * ProjectJournal.h - declaration of class ProjectJournal * * Copyright (c) 2006-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef PROJECT_JOURNAL_H #define PROJECT_JOURNAL_H #include #include #include "lmms_basics.h" #include "DataFile.h" class JournallingObject; class ProjectJournal { public: static const int MAX_UNDO_STATES; ProjectJournal(); virtual ~ProjectJournal(); void undo(); void redo(); void addJournalCheckPoint( JournallingObject *jo ); bool isJournalling() const { return m_journalling; } void setJournalling( const bool _on ) { m_journalling = _on; } // alloc new ID and register object _obj to it jo_id_t allocID( JournallingObject * _obj ); // if there's already something known about ID _id, but it is currently // unused (e.g. after jouralling object was deleted), register object // _obj to this id void reallocID( const jo_id_t _id, JournallingObject * _obj ); // make ID _id unused, but keep all global journalling information // (order of journalling entries etc.) referring to _id - needed for // restoring a journalling object later void freeID( const jo_id_t _id ) { reallocID( _id, NULL ); } void clearJournal(); void stopAllJournalling(); JournallingObject * journallingObject( const jo_id_t _id ) { if( m_joIDs.contains( _id ) ) { return m_joIDs[_id]; } return NULL; } private: typedef QHash JoIdMap; struct CheckPoint { CheckPoint( jo_id_t initID = 0, const DataFile& initData = DataFile( DataFile::JournalData ) ) : joID( initID ), data( initData ) { } jo_id_t joID; DataFile data; } ; typedef QStack CheckPointStack; JoIdMap m_joIDs; CheckPointStack m_undoCheckPoints; CheckPointStack m_redoCheckPoints; bool m_journalling; } ; #endif lmms-1.1.3/include/ProjectRenderer.h000066400000000000000000000046171247673406200174000ustar00rootroot00000000000000/* * ProjectRenderer.h - ProjectRenderer class for easily rendering projects * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PROJECT_RENDERER_H #define _PROJECT_RENDERER_H #include "AudioFileDevice.h" #include "lmmsconfig.h" class ProjectRenderer : public QThread { Q_OBJECT public: enum ExportFileFormats { WaveFile, OggFile, NumFileFormats } ; enum Depths { Depth_16Bit, Depth_32Bit, NumDepths } ; struct OutputSettings { sample_rate_t samplerate; bool vbr; int bitrate; Depths depth; OutputSettings( sample_rate_t _sr, bool _vbr, int _bitrate, Depths _d ) : samplerate( _sr ), vbr( _vbr ), bitrate( _bitrate ), depth( _d ) { } } ; ProjectRenderer( const Mixer::qualitySettings & _qs, const OutputSettings & _os, ExportFileFormats _file_format, const QString & _out_file ); virtual ~ProjectRenderer(); bool isReady() const { return m_fileDev != NULL; } static ExportFileFormats getFileFormatFromExtension( const QString & _ext ); public slots: void startProcessing(); void abortProcessing(); void updateConsoleProgress(); signals: void progressChanged( int ); private: virtual void run(); AudioFileDevice * m_fileDev; Mixer::qualitySettings m_qualitySettings; Mixer::qualitySettings m_oldQualitySettings; volatile int m_progress; volatile bool m_abort; } ; struct FileEncodeDevice { ProjectRenderer::ExportFileFormats m_fileFormat; const char * m_description; const char * m_extension; AudioFileDeviceInstantiaton m_getDevInst; } ; extern FileEncodeDevice __fileEncodeDevices[]; #endif lmms-1.1.3/include/RemotePlugin.h000066400000000000000000000510241247673406200167070ustar00rootroot00000000000000/* * RemotePlugin.h - base class providing RPC like mechanisms * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _REMOTE_PLUGIN_H #define _REMOTE_PLUGIN_H #include "export.h" #include "MidiEvent.h" #include "VstSyncData.h" #include #include #include #include #include #include #ifdef LMMS_BUILD_WIN32 #define USE_QT_SEMAPHORES #define USE_QT_SHMEM #endif #ifdef LMMS_BUILD_APPLE #define USE_QT_SEMAPHORES #endif #ifdef USE_QT_SEMAPHORES #ifdef LMMS_HAVE_PROCESS_H #include #endif #include #if QT_VERSION >= 0x040400 #include #else #error building LMMS on this platform requires at least Qt 4.4.0 #endif #else /* USE_QT_SEMAPHORES */ #ifdef LMMS_HAVE_SYS_IPC_H #include #endif #ifdef LMMS_HAVE_SEMAPHORE_H #include #endif #endif #ifdef USE_QT_SHMEM #include #if QT_VERSION >= 0x040400 #include #else #error building LMMS on this platform requires at least Qt 4.4.0 #endif typedef int32_t key_t; #else /* USE_QT_SHMEM */ #ifdef LMMS_HAVE_SYS_SHM_H #include #endif #ifdef LMMS_HAVE_UNISTD_H #include #endif #endif #ifdef LMMS_HAVE_LOCALE_H #include #endif #ifdef BUILD_REMOTE_PLUGIN_CLIENT #undef EXPORT #define EXPORT #define COMPILE_REMOTE_PLUGIN_BASE #else #include #include #include #endif // sometimes we need to exchange bigger messages (e.g. for VST parameter dumps) // so set a usable value here const int SHM_FIFO_SIZE = 512*1024; // implements a FIFO inside a shared memory segment class shmFifo { // need this union to handle different sizes of sem_t on 32 bit // and 64 bit platforms union sem32_t { #ifndef USE_QT_SEMAPHORES sem_t sem; #endif int semKey; char fill[32]; } ; struct shmData { sem32_t dataSem; // semaphore for locking this // FIFO management data sem32_t messageSem; // semaphore for incoming messages volatile int32_t startPtr; // current start of FIFO in memory volatile int32_t endPtr; // current end of FIFO in memory char data[SHM_FIFO_SIZE]; // actual data } ; public: // constructor for master-side shmFifo() : m_invalid( false ), m_master( true ), m_shmKey( 0 ), #ifdef USE_QT_SHMEM m_shmObj(), #else m_shmID( -1 ), #endif m_data( NULL ), #ifdef USE_QT_SEMAPHORES m_dataSem( QString::null ), m_messageSem( QString::null ), #else m_dataSem( NULL ), m_messageSem( NULL ), #endif m_lockDepth( 0 ) { #ifdef USE_QT_SHMEM do { m_shmObj.setKey( QString( "%1" ).arg( ++m_shmKey ) ); m_shmObj.create( sizeof( shmData ) ); } while( m_shmObj.error() != QSharedMemory::NoError ); m_data = (shmData *) m_shmObj.data(); #else while( ( m_shmID = shmget( ++m_shmKey, sizeof( shmData ), IPC_CREAT | IPC_EXCL | 0600 ) ) == -1 ) { } m_data = (shmData *) shmat( m_shmID, 0, 0 ); #endif assert( m_data != NULL ); m_data->startPtr = m_data->endPtr = 0; #ifdef USE_QT_SEMAPHORES static int k = 0; m_data->dataSem.semKey = ( getpid()<<10 ) + ++k; m_data->messageSem.semKey = ( getpid()<<10 ) + ++k; m_dataSem.setKey( QString::number( m_data->dataSem.semKey ), 1, QSystemSemaphore::Create ); m_messageSem.setKey( QString::number( m_data->messageSem.semKey ), 0, QSystemSemaphore::Create ); #else m_dataSem = &m_data->dataSem.sem; m_messageSem = &m_data->messageSem.sem; if( sem_init( m_dataSem, 1, 1 ) ) { fprintf( stderr, "could not initialize m_dataSem\n" ); } if( sem_init( m_messageSem, 1, 0 ) ) { fprintf( stderr, "could not initialize " "m_messageSem\n" ); } #endif } // constructor for remote-/client-side - use _shm_key for making up // the connection to master shmFifo( key_t _shm_key ) : m_invalid( false ), m_master( false ), m_shmKey( 0 ), #ifdef USE_QT_SHMEM m_shmObj( QString::number( _shm_key ) ), #else m_shmID( shmget( _shm_key, 0, 0 ) ), #endif m_data( NULL ), #ifdef USE_QT_SEMAPHORES m_dataSem( QString::null ), m_messageSem( QString::null ), #else m_dataSem( NULL ), m_messageSem( NULL ), #endif m_lockDepth( 0 ) { #ifdef USE_QT_SHMEM if( m_shmObj.attach() ) { m_data = (shmData *) m_shmObj.data(); } #else if( m_shmID != -1 ) { m_data = (shmData *) shmat( m_shmID, 0, 0 ); } #endif assert( m_data != NULL ); #ifdef USE_QT_SEMAPHORES m_dataSem.setKey( QString::number( m_data->dataSem.semKey ) ); m_messageSem.setKey( QString::number( m_data->messageSem.semKey ) ); #else m_dataSem = &m_data->dataSem.sem; m_messageSem = &m_data->messageSem.sem; #endif } ~shmFifo() { #ifndef USE_QT_SHMEM shmdt( m_data ); #endif // master? if( m_master ) { #ifndef USE_QT_SHMEM shmctl( m_shmID, IPC_RMID, NULL ); #endif #ifndef USE_QT_SEMAPHORES sem_destroy( m_dataSem ); sem_destroy( m_messageSem ); #endif } } inline bool isInvalid() const { return m_invalid; } void invalidate() { m_invalid = true; } // do we act as master (i.e. not as remote-process?) inline bool isMaster() const { return m_master; } // recursive lock inline void lock() { if( !isInvalid() && __sync_add_and_fetch( &m_lockDepth, 1 ) == 1 ) { #ifdef USE_QT_SEMAPHORES m_dataSem.acquire(); #else sem_wait( m_dataSem ); #endif } } // recursive unlock inline void unlock() { if( __sync_sub_and_fetch( &m_lockDepth, 1) <= 0 ) { #ifdef USE_QT_SEMAPHORES m_dataSem.release(); #else sem_post( m_dataSem ); #endif } } // wait until message-semaphore is available inline void waitForMessage() { if( !isInvalid() ) { #ifdef USE_QT_SEMAPHORES m_messageSem.acquire(); #else sem_wait( m_messageSem ); #endif } } // increase message-semaphore inline void messageSent() { #ifdef USE_QT_SEMAPHORES m_messageSem.release(); #else sem_post( m_messageSem ); #endif } inline int32_t readInt() { int32_t i; read( &i, sizeof( i ) ); return i; } inline void writeInt( const int32_t & _i ) { write( &_i, sizeof( _i ) ); } inline std::string readString() { const int len = readInt(); if( len ) { char * sc = new char[len + 1]; read( sc, len ); sc[len] = 0; std::string s( sc ); delete[] sc; return s; } return std::string(); } inline void writeString( const std::string & _s ) { const int len = _s.size(); writeInt( len ); write( _s.c_str(), len ); } inline bool messagesLeft() { if( isInvalid() ) { return false; } #ifdef USE_QT_SEMAPHORES lock(); const bool empty = ( m_data->startPtr == m_data->endPtr ); unlock(); return !empty; #else int v; sem_getvalue( m_messageSem, &v ); return v > 0; #endif } inline int shmKey() const { return m_shmKey; } private: static inline void fastMemCpy( void * _dest, const void * _src, const int _len ) { // calling memcpy() for just an integer is obsolete overhead if( _len == 4 ) { *( (int32_t *) _dest ) = *( (int32_t *) _src ); } else { memcpy( _dest, _src, _len ); } } void read( void * _buf, int _len ) { if( isInvalid() ) { memset( _buf, 0, _len ); return; } lock(); while( isInvalid() == false && _len > m_data->endPtr - m_data->startPtr ) { unlock(); #ifndef LMMS_BUILD_WIN32 usleep( 5 ); #endif lock(); } fastMemCpy( _buf, m_data->data + m_data->startPtr, _len ); m_data->startPtr += _len; // nothing left? if( m_data->startPtr == m_data->endPtr ) { // then reset to 0 m_data->startPtr = m_data->endPtr = 0; } unlock(); } void write( const void * _buf, int _len ) { if( isInvalid() || _len > SHM_FIFO_SIZE ) { return; } lock(); while( _len > SHM_FIFO_SIZE - m_data->endPtr ) { // if no space is left, try to move data to front if( m_data->startPtr > 0 ) { memmove( m_data->data, m_data->data + m_data->startPtr, m_data->endPtr - m_data->startPtr ); m_data->endPtr = m_data->endPtr - m_data->startPtr; m_data->startPtr = 0; } unlock(); #ifndef LMMS_BUILD_WIN32 usleep( 5 ); #endif lock(); } fastMemCpy( m_data->data + m_data->endPtr, _buf, _len ); m_data->endPtr += _len; unlock(); } volatile bool m_invalid; bool m_master; key_t m_shmKey; #ifdef USE_QT_SHMEM QSharedMemory m_shmObj; #else int m_shmID; #endif shmData * m_data; #ifdef USE_QT_SEMAPHORES QSystemSemaphore m_dataSem; QSystemSemaphore m_messageSem; #else sem_t * m_dataSem; sem_t * m_messageSem; #endif volatile int m_lockDepth; } ; enum RemoteMessageIDs { IdUndefined, IdInitDone, IdQuit, IdSampleRateInformation, IdBufferSizeInformation, IdMidiEvent, IdStartProcessing, IdProcessingDone, IdChangeSharedMemoryKey, IdChangeInputCount, IdChangeOutputCount, IdShowUI, IdHideUI, IdSaveSettingsToString, IdSaveSettingsToFile, IdLoadSettingsFromString, IdLoadSettingsFromFile, IdSavePresetFile, IdLoadPresetFile, IdDebugMessage, IdUserBase = 64 } ; class EXPORT RemotePluginBase { public: struct message { message() : id( IdUndefined ), data() { } message( const message & _m ) : id( _m.id ), data( _m.data ) { } message( int _id ) : id( _id ), data() { } inline message & addString( const std::string & _s ) { data.push_back( _s ); return *this; } message & addInt( int _i ) { char buf[32]; sprintf( buf, "%d", _i ); data.push_back( std::string( buf ) ); return *this; } message & addFloat( float _f ) { char buf[32]; sprintf( buf, "%f", _f ); data.push_back( std::string( buf ) ); return *this; } inline std::string getString( int _p = 0 ) const { return data[_p]; } #ifndef BUILD_REMOTE_PLUGIN_CLIENT inline QString getQString( int _p = 0 ) const { return QString::fromStdString( getString( _p ) ); } #endif inline int getInt( int _p = 0 ) const { return atoi( data[_p].c_str() ); } inline float getFloat( int _p ) const { return (float) atof( data[_p].c_str() ); } inline bool operator==( const message & _m ) const { return( id == _m.id ); } int id; private: std::vector data; friend class RemotePluginBase; } ; RemotePluginBase( shmFifo * _in, shmFifo * _out ); virtual ~RemotePluginBase(); void reset( shmFifo *in, shmFifo *out ) { delete m_in; delete m_out; m_in = in; m_out = out; } int sendMessage( const message & _m ); message receiveMessage(); inline bool isInvalid() const { return m_in->isInvalid() || m_out->isInvalid(); } inline bool messagesLeft() { return m_in->messagesLeft(); } message waitForMessage( const message & _m, bool _busy_waiting = false ); inline message fetchAndProcessNextMessage() { message m = receiveMessage(); processMessage( m ); return m; } inline void fetchAndProcessAllMessages() { while( messagesLeft() ) { fetchAndProcessNextMessage(); } } virtual bool processMessage( const message & _m ) = 0; protected: inline const shmFifo * in() const { return m_in; } inline const shmFifo * out() const { return m_out; } inline void invalidate() { m_in->invalidate(); m_out->invalidate(); m_in->messageSent(); } private: shmFifo * m_in; shmFifo * m_out; } ; #ifndef BUILD_REMOTE_PLUGIN_CLIENT class RemotePlugin; class ProcessWatcher : public QThread { public: ProcessWatcher( RemotePlugin * ); virtual ~ProcessWatcher() { } void quit() { m_quit = true; } private: virtual void run(); RemotePlugin * m_plugin; volatile bool m_quit; } ; class EXPORT RemotePlugin : public RemotePluginBase { public: RemotePlugin(); virtual ~RemotePlugin(); inline bool isRunning() { #ifdef DEBUG_REMOTE_PLUGIN return true; #else return m_process.state() != QProcess::NotRunning; #endif } bool init( const QString &pluginExecutable, bool waitForInitDoneMsg ); inline void waitForInitDone( bool _busyWaiting = true ) { m_failed = waitForMessage( IdInitDone, _busyWaiting ).id != IdInitDone; } virtual bool processMessage( const message & _m ); bool process( const sampleFrame * _in_buf, sampleFrame * _out_buf ); void processMidiEvent( const MidiEvent&, const f_cnt_t _offset ); void updateSampleRate( sample_rate_t _sr ) { lock(); sendMessage( message( IdSampleRateInformation ).addInt( _sr ) ); unlock(); } void showUI() { lock(); sendMessage( IdShowUI ); unlock(); } void hideUI() { lock(); sendMessage( IdHideUI ); unlock(); } inline bool failed() const { return m_failed; } inline void lock() { if( !isInvalid() ) { m_commMutex.lock(); } } inline void unlock() { if( !isInvalid() ) { m_commMutex.unlock(); } } protected: inline void setSplittedChannels( bool _on ) { m_splitChannels = _on; } private: void resizeSharedProcessingMemory(); bool m_failed; QProcess m_process; ProcessWatcher m_watcher; QMutex m_commMutex; bool m_splitChannels; #ifdef USE_QT_SHMEM QSharedMemory m_shmObj; #else int m_shmID; #endif size_t m_shmSize; float * m_shm; int m_inputCount; int m_outputCount; friend class ProcessWatcher; } ; #endif #ifdef BUILD_REMOTE_PLUGIN_CLIENT class RemotePluginClient : public RemotePluginBase { public: RemotePluginClient( key_t _shm_in, key_t _shm_out ); virtual ~RemotePluginClient(); #ifdef USE_QT_SHMEM VstSyncData * getQtVSTshm(); #endif virtual bool processMessage( const message & _m ); virtual void process( const sampleFrame * _in_buf, sampleFrame * _out_buf ) = 0; virtual void processMidiEvent( const MidiEvent&, const f_cnt_t /* _offset */ ) { } inline float * sharedMemory() { return m_shm; } virtual void updateSampleRate() { } virtual void updateBufferSize() { } inline sample_rate_t sampleRate() const { return m_sampleRate; } inline fpp_t bufferSize() const { return m_bufferSize; } void setInputCount( int _i ) { m_inputCount = _i; sendMessage( message( IdChangeInputCount ).addInt( _i ) ); } void setOutputCount( int _i ) { m_outputCount = _i; sendMessage( message( IdChangeOutputCount ).addInt( _i ) ); } virtual int inputCount() const { return m_inputCount; } virtual int outputCount() const { return m_outputCount; } void debugMessage( const std::string & _s ) { sendMessage( message( IdDebugMessage ).addString( _s ) ); } private: void setShmKey( key_t _key, int _size ); void doProcessing(); #ifdef USE_QT_SHMEM QSharedMemory m_shmObj; QSharedMemory m_shmQtID; #endif VstSyncData * m_vstSyncData; float * m_shm; int m_inputCount; int m_outputCount; sample_rate_t m_sampleRate; fpp_t m_bufferSize; } ; #endif #ifdef COMPILE_REMOTE_PLUGIN_BASE #ifndef BUILD_REMOTE_PLUGIN_CLIENT #include #endif RemotePluginBase::RemotePluginBase( shmFifo * _in, shmFifo * _out ) : m_in( _in ), m_out( _out ) { #ifdef LMMS_HAVE_LOCALE_H // make sure, we're using common ways to print/scan // floats to/from strings (',' vs. '.' for decimal point etc.) setlocale( LC_NUMERIC, "C" ); #endif } RemotePluginBase::~RemotePluginBase() { delete m_in; delete m_out; } int RemotePluginBase::sendMessage( const message & _m ) { m_out->lock(); m_out->writeInt( _m.id ); m_out->writeInt( _m.data.size() ); int j = 8; for( unsigned int i = 0; i < _m.data.size(); ++i ) { m_out->writeString( _m.data[i] ); j += 4 + _m.data[i].size(); } m_out->unlock(); m_out->messageSent(); return j; } RemotePluginBase::message RemotePluginBase::receiveMessage() { m_in->waitForMessage(); m_in->lock(); message m; m.id = m_in->readInt(); const int s = m_in->readInt(); for( int i = 0; i < s; ++i ) { m.data.push_back( m_in->readString() ); } m_in->unlock(); return m; } RemotePluginBase::message RemotePluginBase::waitForMessage( const message & _wm, bool _busy_waiting ) { while( !isInvalid() ) { #ifndef BUILD_REMOTE_PLUGIN_CLIENT if( _busy_waiting && !messagesLeft() ) { QCoreApplication::processEvents( QEventLoop::ExcludeUserInputEvents, 50 ); continue; } #endif message m = receiveMessage(); processMessage( m ); if( m.id == _wm.id ) { return m; } else if( m.id == IdUndefined ) { return m; } } return message(); } #endif #ifdef BUILD_REMOTE_PLUGIN_CLIENT RemotePluginClient::RemotePluginClient( key_t _shm_in, key_t _shm_out ) : RemotePluginBase( new shmFifo( _shm_in ), new shmFifo( _shm_out ) ), #ifdef USE_QT_SHMEM m_shmObj(), m_shmQtID( "/usr/bin/lmms" ), #endif m_vstSyncData( NULL ), m_shm( NULL ), m_inputCount( 0 ), m_outputCount( 0 ), m_sampleRate( 44100 ), m_bufferSize( 0 ) { #ifdef USE_QT_SHMEM if( m_shmQtID.attach( QSharedMemory::ReadOnly ) ) { m_vstSyncData = (VstSyncData *) m_shmQtID.data(); m_bufferSize = m_vstSyncData->m_bufferSize; m_sampleRate = m_vstSyncData->m_sampleRate; return; } #else key_t key; int m_shmID; if( ( key = ftok( VST_SNC_SHM_KEY_FILE, 'R' ) ) == -1 ) { perror( "RemotePluginClient::ftok" ); } else { // connect to shared memory segment if( ( m_shmID = shmget( key, 0, 0 ) ) == -1 ) { perror( "RemotePluginClient::shmget" ); } else { // attach segment m_vstSyncData = (VstSyncData *)shmat(m_shmID, 0, 0); if( m_vstSyncData == (VstSyncData *)( -1 ) ) { perror( "RemotePluginClient::shmat" ); } else { m_bufferSize = m_vstSyncData->m_bufferSize; m_sampleRate = m_vstSyncData->m_sampleRate; // detach segment if( shmdt(m_vstSyncData) == -1 ) { perror("RemotePluginClient::shmdt"); } return; } } } #endif // if attaching shared memory fails sendMessage( IdSampleRateInformation ); sendMessage( IdBufferSizeInformation ); } RemotePluginClient::~RemotePluginClient() { #ifdef USE_QT_SHMEM m_shmQtID.detach(); #endif sendMessage( IdQuit ); #ifndef USE_QT_SHMEM shmdt( m_shm ); #endif } #ifdef USE_QT_SHMEM VstSyncData * RemotePluginClient::getQtVSTshm() { return m_vstSyncData; } #endif bool RemotePluginClient::processMessage( const message & _m ) { message reply_message( _m.id ); bool reply = false; switch( _m.id ) { case IdUndefined: return false; case IdSampleRateInformation: m_sampleRate = _m.getInt(); updateSampleRate(); break; case IdBufferSizeInformation: m_bufferSize = _m.getInt(); updateBufferSize(); break; case IdQuit: return false; case IdMidiEvent: processMidiEvent( MidiEvent( static_cast( _m.getInt( 0 ) ), _m.getInt( 1 ), _m.getInt( 2 ), _m.getInt( 3 ) ), _m.getInt( 4 ) ); break; case IdStartProcessing: doProcessing(); reply_message.id = IdProcessingDone; reply = true; break; case IdChangeSharedMemoryKey: setShmKey( _m.getInt( 0 ), _m.getInt( 1 ) ); break; case IdInitDone: break; default: { char buf[64]; sprintf( buf, "undefined message: %d\n", (int) _m.id ); debugMessage( buf ); break; } } if( reply ) { sendMessage( reply_message ); } return true; } void RemotePluginClient::setShmKey( key_t _key, int _size ) { #ifdef USE_QT_SHMEM m_shmObj.setKey( QString::number( _key ) ); if( m_shmObj.attach() || m_shmObj.error() == QSharedMemory::NoError ) { m_shm = (float *) m_shmObj.data(); } else { char buf[64]; sprintf( buf, "failed getting shared memory: %d\n", m_shmObj.error() ); debugMessage( buf ); } #else if( m_shm != NULL ) { shmdt( m_shm ); m_shm = NULL; } // only called for detaching SHM? if( _key == 0 ) { return; } int shm_id = shmget( _key, _size, 0 ); if( shm_id == -1 ) { debugMessage( "failed getting shared memory\n" ); } else { m_shm = (float *) shmat( shm_id, 0, 0 ); } #endif } void RemotePluginClient::doProcessing() { if( m_shm != NULL ) { process( (sampleFrame *)( m_inputCount > 0 ? m_shm : NULL ), (sampleFrame *)( m_shm + ( m_inputCount*m_bufferSize ) ) ); } else { debugMessage( "doProcessing(): have no shared memory!\n" ); } } #endif #define QSTR_TO_STDSTR(s) std::string( s.toUtf8().constData() ) #endif lmms-1.1.3/include/RmsHelper.h000066400000000000000000000036531247673406200162030ustar00rootroot00000000000000/* * RmsHelper.h - helper class for calculating RMS * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef RMS_HELPER_H #define RMS_HELPER_H #include "lmms_math.h" class RmsHelper { public: RmsHelper( int size ) : m_buffer( NULL ) { setSize( size ); } virtual ~RmsHelper() { if( m_buffer ) delete[] m_buffer; } inline void setSize( int size ) { if( m_buffer ) { if( m_size < size ) { delete m_buffer; m_buffer = new float[ size ]; m_size = size; reset(); } else { m_size = size; reset(); } } else { m_buffer = new float[ size ]; m_size = size; reset(); } } inline void reset() { m_sizef = 1.0f / (float) m_size; m_pos = 0; m_sum = 0.0f; memset( m_buffer, 0, m_size * sizeof( float ) ); } inline float update( const float in ) { m_sum -= m_buffer[ m_pos ]; m_sum += m_buffer[ m_pos ] = in * in; ++m_pos %= m_size; return sqrtf( m_sum * m_sizef ); } private: float * m_buffer; float m_sum; unsigned int m_pos; unsigned int m_size; float m_sizef; }; #endif lmms-1.1.3/include/SampleBuffer.h000066400000000000000000000164611247673406200166560ustar00rootroot00000000000000/* * SampleBuffer.h - container-class SampleBuffer * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef SAMPLE_BUFFER_H #define SAMPLE_BUFFER_H #include #include #include #include #include "export.h" #include "interpolation.h" #include "lmms_basics.h" #include "lmms_math.h" #include "shared_object.h" #include "Mixer.h" class QPainter; // values for buffer margins, used for various libsamplerate interpolation modes // the array positions correspond to the converter_type parameter values in libsamplerate // if there appears problems with playback on some interpolation mode, then the value for that mode // may need to be higher - conversely, to optimize, some may work with lower values const f_cnt_t MARGIN[] = { 64, 64, 64, 4, 4 }; class EXPORT SampleBuffer : public QObject, public sharedObject { Q_OBJECT public: enum LoopMode { LoopOff = 0, LoopOn, LoopPingPong }; class EXPORT handleState { public: handleState( bool _varying_pitch = false, int interpolation_mode = SRC_LINEAR ); virtual ~handleState(); const f_cnt_t frameIndex() const { return m_frameIndex; } void setFrameIndex( f_cnt_t _index ) { m_frameIndex = _index; } bool isBackwards() const { return m_isBackwards; } void setBackwards( bool _backwards ) { m_isBackwards = _backwards; } int interpolationMode() const { return m_interpolationMode; } private: f_cnt_t m_frameIndex; const bool m_varyingPitch; bool m_isBackwards; SRC_STATE * m_resamplingData; int m_interpolationMode; friend class SampleBuffer; } ; // constructor which either loads sample _audio_file or decodes // base64-data out of string SampleBuffer( const QString & _audio_file = QString(), bool _is_base64_data = false ); SampleBuffer( const sampleFrame * _data, const f_cnt_t _frames ); SampleBuffer( const f_cnt_t _frames ); virtual ~SampleBuffer(); bool play( sampleFrame * _ab, handleState * _state, const fpp_t _frames, const float _freq, const LoopMode _loopmode = LoopOff ); void visualize( QPainter & _p, const QRect & _dr, const QRect & _clip, f_cnt_t _from_frame = 0, f_cnt_t _to_frame = 0 ); inline void visualize( QPainter & _p, const QRect & _dr, f_cnt_t _from_frame = 0, f_cnt_t _to_frame = 0 ) { visualize( _p, _dr, _dr, _from_frame, _to_frame ); } inline const QString & audioFile() const { return m_audioFile; } inline f_cnt_t startFrame() const { return m_startFrame; } inline f_cnt_t endFrame() const { return m_endFrame; } inline f_cnt_t loopStartFrame() const { return m_loopStartFrame; } inline f_cnt_t loopEndFrame() const { return m_loopEndFrame; } void setLoopStartFrame( f_cnt_t _start ) { m_varLock.lock(); m_loopStartFrame = _start; m_varLock.unlock(); } void setLoopEndFrame( f_cnt_t _end ) { m_varLock.lock(); m_loopEndFrame = _end; m_varLock.unlock(); } void setAllPointFrames( f_cnt_t _start, f_cnt_t _end, f_cnt_t _loopstart, f_cnt_t _loopend ) { m_varLock.lock(); m_startFrame = _start; m_endFrame = _end; m_loopStartFrame = _loopstart; m_loopEndFrame = _loopend; m_varLock.unlock(); } inline f_cnt_t frames() const { return m_frames; } inline float amplification() const { return m_amplification; } inline bool reversed() const { return m_reversed; } inline float frequency() const { return m_frequency; } sample_rate_t sampleRate() const { return m_sampleRate; } int sampleLength() const { return double( m_endFrame - m_startFrame ) / m_sampleRate * 1000; } inline void setFrequency( float _freq ) { m_varLock.lock(); m_frequency = _freq; m_varLock.unlock(); } inline void setSampleRate( sample_rate_t _rate ) { m_varLock.lock(); m_sampleRate = _rate; m_varLock.unlock(); } inline const sampleFrame * data() const { return m_data; } QString openAudioFile() const; QString openAndSetAudioFile(); QString openAndSetWaveformFile(); QString & toBase64( QString & _dst ) const; static SampleBuffer * resample( sampleFrame * _data, const f_cnt_t _frames, const sample_rate_t _src_sr, const sample_rate_t _dst_sr ); static inline SampleBuffer * resample( SampleBuffer * _buf, const sample_rate_t _src_sr, const sample_rate_t _dst_sr ) { return resample( _buf->m_data, _buf->m_frames, _src_sr, _dst_sr ); } void normalizeSampleRate( const sample_rate_t _src_sr, bool _keep_settings = false ); inline sample_t userWaveSample( const float _sample ) const { const float frame = _sample * m_frames; f_cnt_t f1 = static_cast( frame ) % m_frames; if( f1 < 0 ) { f1 += m_frames; } return linearInterpolate( m_data[f1][0], m_data[ (f1 + 1) % m_frames ][0], fraction( frame ) ); } static QString tryToMakeRelative( const QString & _file ); static QString tryToMakeAbsolute( const QString & _file ); public slots: void setAudioFile( const QString & _audio_file ); void loadFromBase64( const QString & _data ); void setStartFrame( const f_cnt_t _s ); void setEndFrame( const f_cnt_t _e ); void setAmplification( float _a ); void setReversed( bool _on ); private: void update( bool _keep_settings = false ); void convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames, int _channels); void directFloatWrite ( sample_t * & _fbuf, f_cnt_t _frames, int _channels); f_cnt_t decodeSampleSF( const char * _f, sample_t * & _buf, ch_cnt_t & _channels, sample_rate_t & _sample_rate ); #ifdef LMMS_HAVE_OGGVORBIS f_cnt_t decodeSampleOGGVorbis( const char * _f, int_sample_t * & _buf, ch_cnt_t & _channels, sample_rate_t & _sample_rate ); #endif f_cnt_t decodeSampleDS( const char * _f, int_sample_t * & _buf, ch_cnt_t & _channels, sample_rate_t & _sample_rate ); QString m_audioFile; sampleFrame * m_origData; f_cnt_t m_origFrames; sampleFrame * m_data; QMutex m_varLock; f_cnt_t m_frames; f_cnt_t m_startFrame; f_cnt_t m_endFrame; f_cnt_t m_loopStartFrame; f_cnt_t m_loopEndFrame; float m_amplification; bool m_reversed; float m_frequency; sample_rate_t m_sampleRate; sampleFrame * getSampleFragment( f_cnt_t _index, f_cnt_t _frames, LoopMode _loopmode, sampleFrame * * _tmp, bool * _backwards, f_cnt_t _loopstart, f_cnt_t _loopend, f_cnt_t _end ) const; f_cnt_t getLoopedIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const; f_cnt_t getPingPongIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const; signals: void sampleUpdated(); } ; #endif lmms-1.1.3/include/SamplePlayHandle.h000066400000000000000000000042171247673406200174620ustar00rootroot00000000000000/* * SamplePlayHandle.h - play-handle for playing a sample * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SAMPLE_PLAY_HANDLE_H #define _SAMPLE_PLAY_HANDLE_H #include "Mixer.h" #include "SampleBuffer.h" #include "AutomatableModel.h" class bbTrack; class SampleTCO; class track; class AudioPort; class SamplePlayHandle : public PlayHandle { public: SamplePlayHandle( const QString& sampleFile ); SamplePlayHandle( SampleBuffer* sampleBuffer ); SamplePlayHandle( SampleTCO* tco ); virtual ~SamplePlayHandle(); virtual inline bool affinityMatters() const { return true; } virtual void play( sampleFrame * _working_buffer ); virtual bool isFinished() const; virtual bool isFromTrack( const track * _track ) const; f_cnt_t totalFrames() const; inline f_cnt_t framesDone() const { return( m_frame ); } void setDoneMayReturnTrue( bool _enable ) { m_doneMayReturnTrue = _enable; } void setBBTrack( bbTrack * _bb_track ) { m_bbTrack = _bb_track; } void setVolumeModel( FloatModel * _model ) { m_volumeModel = _model; } private: SampleBuffer * m_sampleBuffer; bool m_doneMayReturnTrue; f_cnt_t m_frame; SampleBuffer::handleState m_state; AudioPort * m_audioPort; const bool m_ownAudioPort; FloatModel m_defaultVolumeModel; FloatModel * m_volumeModel; track * m_track; bbTrack * m_bbTrack; } ; #endif lmms-1.1.3/include/SampleRecordHandle.h000066400000000000000000000034071247673406200177730ustar00rootroot00000000000000/* * SampleRecordHandle.h - play-handle for recording a sample * * Copyright (c) 2008 Csaba Hruska * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SAMPLE_RECORD_HANDLE_H #define _SAMPLE_RECORD_HANDLE_H #include #include #include "Mixer.h" #include "SampleBuffer.h" class bbTrack; class SampleTCO; class track; class SampleRecordHandle : public PlayHandle { public: SampleRecordHandle( SampleTCO* tco ); virtual ~SampleRecordHandle(); virtual void play( sampleFrame * _working_buffer ); virtual bool isFinished() const; virtual bool isFromTrack( const track * _track ) const; f_cnt_t framesRecorded() const; void createSampleBuffer( SampleBuffer * * _sample_buf ); private: virtual void writeBuffer( const sampleFrame * _ab, const f_cnt_t _frames ); typedef QList > bufferList; bufferList m_buffers; f_cnt_t m_framesRecorded; MidiTime m_minLength; track * m_track; bbTrack * m_bbTrack; SampleTCO * m_tco; } ; #endif lmms-1.1.3/include/SampleTrack.h000066400000000000000000000075271247673406200165140ustar00rootroot00000000000000/* * SampleTrack.h - class SampleTrack, a track which provides arrangement of samples * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef SAMPLE_TRACK_H #define SAMPLE_TRACK_H #include #include "AudioPort.h" #include "track.h" class EffectRackView; class knob; class SampleBuffer; class SampleTCO : public trackContentObject { Q_OBJECT mapPropertyFromModel(bool,isRecord,setRecord,m_recordModel); public: SampleTCO( track * _track ); virtual ~SampleTCO(); virtual void changeLength( const MidiTime & _length ); const QString & sampleFile() const; virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "sampletco"; } SampleBuffer* sampleBuffer() { return m_sampleBuffer; } MidiTime sampleLength() const; virtual trackContentObjectView * createView( trackView * _tv ); public slots: void setSampleBuffer( SampleBuffer* sb ); void setSampleFile( const QString & _sf ); void updateLength( bpm_t = 0 ); void toggleRecord(); private: SampleBuffer* m_sampleBuffer; BoolModel m_recordModel; friend class SampleTCOView; signals: void sampleChanged(); } ; class SampleTCOView : public trackContentObjectView { Q_OBJECT // theming qproperties Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) public: SampleTCOView( SampleTCO * _tco, trackView * _tv ); virtual ~SampleTCOView(); public slots: void updateSample(); protected: virtual void contextMenuEvent( QContextMenuEvent * _cme ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void mouseDoubleClickEvent( QMouseEvent * ); virtual void paintEvent( QPaintEvent * ); private: SampleTCO * m_tco; } ; class SampleTrack : public track { Q_OBJECT public: SampleTrack( TrackContainer* tc ); virtual ~SampleTrack(); virtual bool play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _frame_base, int _tco_num = -1 ); virtual trackView * createView( TrackContainerView* tcv ); virtual trackContentObject * createTCO( const MidiTime & _pos ); virtual void saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadTrackSpecificSettings( const QDomElement & _this ); inline AudioPort * audioPort() { return &m_audioPort; } virtual QString nodeName() const { return "sampletrack"; } private: AudioPort m_audioPort; FloatModel m_volumeModel; friend class SampleTrackView; } ; class SampleTrackView : public trackView { Q_OBJECT public: SampleTrackView( SampleTrack* track, TrackContainerView* tcv ); virtual ~SampleTrackView(); public slots: void showEffects(); protected: void modelChanged(); virtual QString nodeName() const { return "SampleTrackView"; } private: EffectRackView * m_effectRack; QWidget * m_effWindow; knob * m_volumeKnob; } ; #endif lmms-1.1.3/include/SendButtonIndicator.h000066400000000000000000000011271247673406200202160ustar00rootroot00000000000000#ifndef SENDBUTTONINDICATOR_H #define SENDBUTTONINDICATOR_H #include #include #include #include "FxLine.h" #include "FxMixerView.h" class FxLine; class FxMixerView; class SendButtonIndicator : public QLabel { public: SendButtonIndicator( QWidget * _parent, FxLine * _owner, FxMixerView * _mv); virtual void mousePressEvent( QMouseEvent * e ); void updateLightStatus(); private: FxLine * m_parent; FxMixerView * m_mv; static QPixmap * s_qpmOn; static QPixmap * s_qpmOff; FloatModel * getSendModel(); }; #endif // SENDBUTTONINDICATOR_H lmms-1.1.3/include/SerializingObject.h000066400000000000000000000042351247673406200177060ustar00rootroot00000000000000/* * SerializingObject.h - declaration of class SerializingObject * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SERIALIZING_OBJECT_H #define _SERIALIZING_OBJECT_H #include #include "export.h" class QDomDocument; class QDomElement; class SerializingObjectHook; class EXPORT SerializingObject { public: SerializingObject(); virtual ~SerializingObject(); virtual QDomElement saveState( QDomDocument & _doc, QDomElement & _parent ); virtual void restoreState( const QDomElement & _this ); // to be implemented by actual object virtual QString nodeName() const = 0; void setHook( SerializingObjectHook * _hook ); SerializingObjectHook* hook() { return m_hook; } protected: // to be implemented by sub-objects virtual void saveSettings( QDomDocument& doc, QDomElement& element ) = 0; virtual void loadSettings( const QDomElement& element ) = 0; private: SerializingObjectHook * m_hook; } ; class SerializingObjectHook { public: SerializingObjectHook() : m_hookedIn( NULL ) { } virtual ~SerializingObjectHook() { if( m_hookedIn != NULL ) { m_hookedIn->setHook( NULL ); } } virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ) = 0; virtual void loadSettings( const QDomElement & _this ) = 0; private: SerializingObject * m_hookedIn; friend class SerializingObject; } ; #endif lmms-1.1.3/include/SideBar.h000066400000000000000000000026471247673406200156150ustar00rootroot00000000000000/* * SideBar.h - side-bar in LMMS' MainWindow * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SIDE_BAR_H #define _SIDE_BAR_H #include #include #include class QToolButton; class SideBarWidget; class SideBar : public QToolBar { Q_OBJECT public: SideBar( Qt::Orientation _orientation, QWidget * _parent ); virtual ~SideBar(); void appendTab( SideBarWidget * _sbw ); private slots: void toggleButton( QAbstractButton * _btn ); private: QButtonGroup m_btnGroup; typedef QMap ButtonMap; ButtonMap m_widgets; } ; #endif lmms-1.1.3/include/SideBarWidget.h000066400000000000000000000034721247673406200167560ustar00rootroot00000000000000/* * SideBarWidget.h - base-class for all side-bar-widgets * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SIDE_BAR_WIDGET_H #define _SIDE_BAR_WIDGET_H #include #include #include class SideBarWidget : public QWidget { Q_OBJECT public: SideBarWidget( const QString & _title, const QPixmap & _icon, QWidget * _parent ); virtual ~SideBarWidget(); inline const QPixmap & icon() const { return m_icon; } inline const QString & title() const { return m_title; } protected: virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ); virtual void contextMenuEvent( QContextMenuEvent * ) { } QWidget * contentParent() { return m_contents; } void addContentWidget( QWidget * _w ) { m_layout->addWidget( _w ); } void addContentLayout( QLayout * _l ) { m_layout->addLayout( _l ); } private: QWidget * m_contents; QVBoxLayout * m_layout; QString m_title; QPixmap m_icon; } ; #endif lmms-1.1.3/include/SongEditor.h000066400000000000000000000056721247673406200163620ustar00rootroot00000000000000/* * SongEditor.h - declaration of class SongEditor, a window where you can * setup your songs * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SONG_EDITOR_H #define _SONG_EDITOR_H #include "TrackContainerView.h" class QLabel; class QScrollBar; class automatableSlider; class comboBox; class LcdSpinBox; class MeterDialog; class song; class textFloat; class timeLine; class toolButton; class positionLine : public QWidget { public: positionLine( QWidget * _parent ); private: virtual void paintEvent( QPaintEvent * _pe ); } ; class SongEditor : public TrackContainerView { Q_OBJECT public: SongEditor( song * _song ); virtual ~SongEditor(); void setPauseIcon( bool pause ); public slots: void scrolled( int _new_pos ); private slots: void setHighQuality( bool ); void play(); void record(); void recordAccompany(); void stop(); void masterVolumeChanged( int _new_val ); void masterVolumePressed(); void masterVolumeMoved( int _new_val ); void masterVolumeReleased(); void masterPitchChanged( int _new_val ); void masterPitchPressed(); void masterPitchMoved( int _new_val ); void masterPitchReleased(); void updateScrollBar( int ); void updatePosition( const MidiTime & _t ); void zoomingChanged(); void adjustUiAfterProjectLoad(); private: virtual void keyPressEvent( QKeyEvent * _ke ); virtual void wheelEvent( QWheelEvent * _we ); virtual bool allowRubberband() const; song * m_s; QScrollBar * m_leftRightScroll; QWidget * m_toolBar; toolButton * m_playButton; toolButton * m_recordButton; toolButton * m_recordAccompanyButton; toolButton * m_stopButton; LcdSpinBox * m_tempoSpinBox; timeLine * m_timeLine; MeterDialog * m_timeSigDisplay; automatableSlider * m_masterVolumeSlider; automatableSlider * m_masterPitchSlider; textFloat * m_mvsStatus; textFloat * m_mpsStatus; toolButton * m_addBBTrackButton; toolButton * m_addSampleTrackButton; toolButton * m_addAutomationTrackButton; toolButton * m_drawModeButton; toolButton * m_editModeButton; comboBox * m_zoomingComboBox; positionLine * m_positionLine; bool m_scrollBack; bool m_smoothScroll; } ; #endif lmms-1.1.3/include/SweepOscillator.h000066400000000000000000000034111247673406200174110ustar00rootroot00000000000000/* * SweepOscillator.h - sweeping oscillator * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SWEEP_OSCILLATOR_H #define _SWEEP_OSCILLATOR_H #include "Oscillator.h" #include "DspEffectLibrary.h" template class SweepOscillator { public: SweepOscillator( const FX & _fx = FX() ) : m_phase( 0.0f ), m_FX( _fx ) { } virtual ~SweepOscillator() { } void update( sampleFrame* buf, const fpp_t frames, const float freq1, const float freq2, const float sampleRate ) { const float df = freq2 - freq1; for( fpp_t frame = 0; frame < frames; ++frame ) { const sample_t s = Oscillator::sinSample( m_phase ); buf[frame][0] = s; buf[frame][1] = s; m_FX.nextSample( buf[frame][0], buf[frame][1] ); m_phase += ( freq1 + ( frame * df / frames ) ) / sampleRate; } } private: float m_phase; FX m_FX; // inline sample_t getSample( const float _sample ); // inline void recalcPhase(); } ; #endif lmms-1.1.3/include/TempoSyncKnob.h000066400000000000000000000037311247673406200170320ustar00rootroot00000000000000/* * TempoSyncKnob.h - adds bpm to ms conversion for knob class * * Copyright (c) 2005-2008 Danny McRae * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TEMPO_SYNC_KNOB_H #define _TEMPO_SYNC_KNOB_H #include #include #include "knob.h" #include "TempoSyncKnobModel.h" class MeterDialog; class EXPORT TempoSyncKnob : public knob { Q_OBJECT public: TempoSyncKnob( knobTypes knobNum, QWidget* parent = NULL, const QString& name = QString() ); virtual ~TempoSyncKnob(); const QString & syncDescription(); void setSyncDescription( const QString & _new_description ); const QPixmap & syncIcon(); void setSyncIcon( const QPixmap & _new_pix ); TempoSyncKnobModel * model() { return castModel(); } virtual void modelChanged(); signals: void syncDescriptionChanged( const QString & _new_description ); void syncIconChanged(); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); protected slots: void updateDescAndIcon(); void showCustom(); private: QPixmap m_tempoSyncIcon; QString m_tempoSyncDescription; QPointer m_custom; } ; #endif lmms-1.1.3/include/TempoSyncKnobModel.h000066400000000000000000000046171247673406200200170ustar00rootroot00000000000000/* * TempoSyncKnobModel.h - adds bpm to ms conversion for knob class * * Copyright (c) 2005-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TEMPO_SYNC_KNOB_MODEL_H #define _TEMPO_SYNC_KNOB_MODEL_H #include "MeterModel.h" class QAction; class EXPORT TempoSyncKnobModel : public FloatModel { Q_OBJECT public: enum TempoSyncMode { SyncNone, SyncDoubleWholeNote, SyncWholeNote, SyncHalfNote, SyncQuarterNote, SyncEighthNote, SyncSixteenthNote, SyncThirtysecondNote, SyncCustom } ; TempoSyncKnobModel( const float _val, const float _min, const float _max, const float _step, const float _scale, Model * _parent, const QString & _display_name = QString() ); virtual ~TempoSyncKnobModel(); void saveSettings( QDomDocument & _doc, QDomElement & _this, const QString& name ); void loadSettings( const QDomElement & _this, const QString& name ); TempoSyncMode syncMode() const { return m_tempoSyncMode; } void setSyncMode( TempoSyncMode _new_mode ); float scale() const { return m_scale; } void setScale( float _new_scale ); signals: void syncModeChanged( TempoSyncMode _new_mode ); void scaleChanged( float _new_scale ); public slots: inline void disableSync() { setTempoSync( SyncNone ); } void setTempoSync( int _note_type ); void setTempoSync( QAction * _item ); protected slots: void calculateTempoSyncTime( bpm_t _bpm ); void updateCustom(); private: TempoSyncMode m_tempoSyncMode; TempoSyncMode m_tempoLastSyncMode; float m_scale; MeterModel m_custom; friend class TempoSyncKnob; } ; #endif lmms-1.1.3/include/ThreadableJob.h000066400000000000000000000033751247673406200167710ustar00rootroot00000000000000/* * ThreadableJob.h - declaration of class ThreadableJob * * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _THREADABLE_JOB_H #define _THREADABLE_JOB_H #include #include "lmms_basics.h" class ThreadableJob { public: enum ProcessingState { Unstarted, Queued, InProgress, Done }; ThreadableJob() : m_state( ThreadableJob::Unstarted ) { } inline ProcessingState state() const { return static_cast( (int) m_state ); } inline void reset() { m_state = Unstarted; } inline void queue() { m_state = Queued; } inline void done() { m_state = Done; } void process( sampleFrame* workingBuffer = NULL ) { if( m_state.testAndSetOrdered( Queued, InProgress ) ) { doProcessing( workingBuffer ); m_state = Done; } } virtual bool requiresProcessing() const = 0; protected: virtual void doProcessing( sampleFrame* workingBuffer) = 0; QAtomicInt m_state; } ; #endif lmms-1.1.3/include/TimeDisplayWidget.h000066400000000000000000000031741247673406200176700ustar00rootroot00000000000000/* * TimeDisplayWidget.h - widget for displaying current playback time * * Copyright (c) 2014 Ruben Ibarra * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TIME_DISPLAY_WIDGET #define _TIME_DISPLAY_WIDGET #include #include #include "LcdWidget.h" class TimeDisplayWidget : public QWidget { Q_OBJECT public: TimeDisplayWidget(); virtual ~TimeDisplayWidget(); protected: virtual void mousePressEvent( QMouseEvent* mouseEvent ); private slots: void updateTime(); private: enum DisplayModes { MinutesSeconds, BarsTicks, DisplayModeCount }; typedef DisplayModes DisplayMode; void setDisplayMode( DisplayMode displayMode ); DisplayMode m_displayMode; QHBoxLayout m_spinBoxesLayout; LcdWidget m_majorLCD; LcdWidget m_minorLCD; LcdWidget m_milliSecondsLCD; } ; #endif lmms-1.1.3/include/ToolPlugin.h000066400000000000000000000026611247673406200163740ustar00rootroot00000000000000/* * ToolPlugin.h - declaration of class ToolPlugin, a standard interface for all * tool plugins * * Copyright (c) 2006-2007 Javier Serrano Polo * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TOOL_PLUGIN_H #define _TOOL_PLUGIN_H #include "Plugin.h" class EXPORT ToolPlugin : public Plugin { public: ToolPlugin( const Descriptor * _descriptor, Model * _parent ); virtual ~ToolPlugin(); // instantiate tool-plugin with given name or return NULL // on failure static ToolPlugin * instantiate( const QString & _plugin_name, Model * _parent ); } ; #endif lmms-1.1.3/include/ToolPluginView.h000066400000000000000000000023231247673406200172220ustar00rootroot00000000000000/* * ToolPluginView.h - declaration of class ToolPluginView * * Copyright (c) 2006-2007 Javier Serrano Polo * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TOOL_PLUGIN_VIEW_H #define _TOOL_PLUGIN_VIEW_H #include "PluginView.h" class ToolPlugin; class EXPORT ToolPluginView : public PluginView { public: ToolPluginView( ToolPlugin * _toolPlugin ); } ; #endif lmms-1.1.3/include/TrackContainer.h000066400000000000000000000046761247673406200172170ustar00rootroot00000000000000/* * TrackContainer.h - base-class for all track-containers like Song-Editor, * BB-Editor... * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TRACK_CONTAINER_H #define _TRACK_CONTAINER_H #include #include "track.h" #include "JournallingObject.h" class AutomationPattern; class InstrumentTrack; class TrackContainerView; class EXPORT TrackContainer : public Model, public JournallingObject { Q_OBJECT public: typedef QVector TrackList; TrackContainer(); virtual ~TrackContainer(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual AutomationPattern * tempoAutomationPattern() { return NULL; } int countTracks( track::TrackTypes _tt = track::NumTrackTypes ) const; void addTrack( track * _track ); void removeTrack( track * _track ); virtual void updateAfterTrackAdd(); void clearAllTracks(); const TrackList & tracks() const { return m_tracks; } bool isEmpty() const; static const QString classNodeName() { return "trackcontainer"; } signals: void trackAdded( track * _track ); protected: mutable QReadWriteLock m_tracksMutex; private: TrackList m_tracks; friend class TrackContainerView; friend class track; } ; class DummyTrackContainer : public TrackContainer { public: DummyTrackContainer(); virtual ~DummyTrackContainer() { } virtual QString nodeName() const { return "DummyTrackContainer"; } InstrumentTrack * dummyInstrumentTrack() { return m_dummyInstrumentTrack; } private: InstrumentTrack * m_dummyInstrumentTrack; } ; #endif lmms-1.1.3/include/TrackContainerView.h000066400000000000000000000074611247673406200200450ustar00rootroot00000000000000/* * TrackContainerView.h - view-component for TrackContainer * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef TRACK_CONTAINER_VIEW_H #define TRACK_CONTAINER_VIEW_H #include #include #include #include "track.h" #include "JournallingObject.h" class QVBoxLayout; class TrackContainer; class TrackContainerView : public QWidget, public ModelView, public JournallingObject, public SerializingObjectHook { Q_OBJECT public: TrackContainerView( TrackContainer* tc ); virtual ~TrackContainerView(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); QWidget * contentWidget() { return( m_scrollArea ); } inline const MidiTime & currentPosition() const { return( m_currentPosition ); } virtual bool fixedTCOs() const { return( false ); } inline float pixelsPerTact() const { return( m_ppt ); } void setPixelsPerTact( int _ppt ); const trackView * trackViewAt( const int _y ) const; virtual bool allowRubberband() const; inline bool rubberBandActive() const { return( m_rubberBand->isVisible() ); } inline QVector selectedObjects() { if( allowRubberband() == true ) { return( m_rubberBand->selectedObjects() ); } return( QVector() ); } TrackContainer* model() { return m_tc; } const TrackContainer* model() const { return m_tc; } void moveTrackViewUp( trackView * _tv ); void moveTrackViewDown( trackView * _tv ); // -- for usage by trackView only --------------- trackView * addTrackView( trackView * _tv ); void removeTrackView( trackView * _tv ); // ------------------------------------------------------- void clearAllTracks(); virtual QString nodeName() const { return( "trackcontainerview" ); } public slots: void realignTracks(); void createTrackView( track * _t ); void deleteTrackView( trackView * _tv ); protected: static const int DEFAULT_PIXELS_PER_TACT = 16; const QList & trackViews() const { return( m_trackViews ); } virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void resizeEvent( QResizeEvent * ); MidiTime m_currentPosition; private: enum Actions { AddTrack, RemoveTrack } ; class scrollArea : public QScrollArea { public: scrollArea( TrackContainerView* parent ); virtual ~scrollArea(); protected: virtual void wheelEvent( QWheelEvent * _we ); private: TrackContainerView* m_trackContainerView; } ; TrackContainer* m_tc; typedef QList trackViewList; trackViewList m_trackViews; scrollArea * m_scrollArea; QVBoxLayout * m_scrollLayout; float m_ppt; rubberBand * m_rubberBand; QPoint m_origin; signals: void positionChanged( const MidiTime & _pos ); } ; #endif lmms-1.1.3/include/VersionedSaveDialog.h000066400000000000000000000032211247673406200201660ustar00rootroot00000000000000/* * VersionedSaveDialog.h - declaration of class VersionedSaveDialog, a file save * dialog that provides buttons to increment or decrement a version which is * appended to the file name. (e.g. "MyProject-01.mmpz") * * Copyright (c) 2014 Lukas W * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef VERSIONEDSAVEDIALOG_H #define VERSIONEDSAVEDIALOG_H #include "FileDialog.h" class QLineEdit; class VersionedSaveDialog : public FileDialog { Q_OBJECT public: explicit VersionedSaveDialog( QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString() ); // Returns true if file name was changed, returns false if it wasn't static bool changeFileNameVersion( QString &fileName, bool increment ); public slots: void incrementVersion(); void decrementVersion(); }; #endif // VERSIONEDSAVEDIALOG_H lmms-1.1.3/include/VstSyncController.h000066400000000000000000000040251247673406200177510ustar00rootroot00000000000000/* * VstSyncController.h - type declarations needed for VST to lmms host sync * * Copyright (c) 2014 Tobias Doerffel * Copyright (c) 2013 Mike Choi * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef VST_SYNC_CONTROLLER_H #define VST_SYNC_CONTROLLER_H #include #include #include "VstSyncData.h" class VstSyncController : public QObject { Q_OBJECT public: VstSyncController(); ~VstSyncController(); void setAbsolutePosition( int ticks ); void setPlaybackState( bool enabled ) { m_syncData->isPlaying = enabled; } void setTempo( int newTempo ); void setTimeSignature( int num, int denom ) { m_syncData->timeSigNumer = num; m_syncData->timeSigDenom = denom; } void startCycle( int startTick, int endTick ); void stopCycle() { m_syncData->isCycle = false; } void update(); private slots: void updateSampleRate(); private: struct VstSyncData { bool isPlaying; float ppqPos; int timeSigNumer; int timeSigDenom; bool isCycle; bool hasSHM; float cycleStart; float cycleEnd; int m_bufferSize; int m_sampleRate; int m_bpm; #ifdef VST_SNC_LATENCY float m_latency; #endif } ; VstSyncData* m_syncData; int m_shmID; QSharedMemory m_shm; }; #endif lmms-1.1.3/include/VstSyncData.h000066400000000000000000000032521247673406200165000ustar00rootroot00000000000000/* * VstSyncData.h - type declarations needed for VST to lmms host sync * * Copyright (c) 2014 Tobias Doerffel * Copyright (c) 2013 Mike Choi * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef VST_SYNC_DATA_H #define VST_SYNC_DATA_H // VST sync frequency (in ms), how often will be VST plugin synced // keep it power of two if possible (not used by now) //#define VST_SNC_TIMER 1 // When defined, latency should be subtracted from song PPQ position //#define VST_SNC_LATENCY // define file for ftok as shared memory shmget key #define VST_SNC_SHM_KEY_FILE "/dev/null" //#define VST_SNC_SHM_RND_KEY 3561653564469 struct VstSyncData { bool isPlaying; float ppqPos; int timeSigNumer; int timeSigDenom; bool isCycle; bool hasSHM; float cycleStart; float cycleEnd; int m_bufferSize; int m_sampleRate; int m_bpm; #ifdef VST_SNC_LATENCY float m_latency; #endif } ; #endif lmms-1.1.3/include/about_dialog.h000066400000000000000000000021711247673406200167250ustar00rootroot00000000000000/* * about_dialog.h - declaration of class aboutDialog * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _ABOUT_DIALOG_H #define _ABOUT_DIALOG_H #include #include "ui_about_dialog.h" class aboutDialog : public QDialog, public Ui::AboutDialog { public: aboutDialog( void ); } ; #endif lmms-1.1.3/include/aeffectx.h000066400000000000000000000220041247673406200160560ustar00rootroot00000000000000/* * aeffectx.h - simple header to allow VeSTige compilation and eventually work * * Copyright (c) 2006 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _AEFFECTX_H #define _AEFFECTX_H #define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \ ( ( (int) b ) << 16 ) | \ ( ( (int) c ) << 8 ) | \ ( ( (int) d ) << 0 ) ) const int audioMasterAutomate = 0; const int audioMasterVersion = 1; const int audioMasterCurrentId = 2; const int audioMasterIdle = 3; const int audioMasterPinConnected = 4; // unsupported? 5 const int audioMasterWantMidi = 6; const int audioMasterGetTime = 7; const int audioMasterProcessEvents = 8; const int audioMasterSetTime = 9; const int audioMasterTempoAt = 10; const int audioMasterGetNumAutomatableParameters = 11; const int audioMasterGetParameterQuantization = 12; const int audioMasterIOChanged = 13; const int audioMasterNeedIdle = 14; const int audioMasterSizeWindow = 15; const int audioMasterGetSampleRate = 16; const int audioMasterGetBlockSize = 17; const int audioMasterGetInputLatency = 18; const int audioMasterGetOutputLatency = 19; const int audioMasterGetPreviousPlug = 20; const int audioMasterGetNextPlug = 21; const int audioMasterWillReplaceOrAccumulate = 22; const int audioMasterGetCurrentProcessLevel = 23; const int audioMasterGetAutomationState = 24; const int audioMasterOfflineStart = 25; const int audioMasterOfflineRead = 26; const int audioMasterOfflineWrite = 27; const int audioMasterOfflineGetCurrentPass = 28; const int audioMasterOfflineGetCurrentMetaPass = 29; const int audioMasterSetOutputSampleRate = 30; // unsupported? 31 const int audioMasterGetSpeakerArrangement = 31; // deprecated in 2.4? const int audioMasterGetVendorString = 32; const int audioMasterGetProductString = 33; const int audioMasterGetVendorVersion = 34; const int audioMasterVendorSpecific = 35; const int audioMasterSetIcon = 36; const int audioMasterCanDo = 37; const int audioMasterGetLanguage = 38; const int audioMasterOpenWindow = 39; const int audioMasterCloseWindow = 40; const int audioMasterGetDirectory = 41; const int audioMasterUpdateDisplay = 42; const int audioMasterBeginEdit = 43; const int audioMasterEndEdit = 44; const int audioMasterOpenFileSelector = 45; const int audioMasterCloseFileSelector = 46; // currently unused const int audioMasterEditFile = 47; // currently unused const int audioMasterGetChunkFile = 48; // currently unused const int audioMasterGetInputSpeakerArrangement = 49; // currently unused const int effFlagsHasEditor = 1; const int effFlagsCanReplacing = 1 << 4; // very likely const int effFlagsIsSynth = 1 << 8; // currently unused const int effOpen = 0; const int effClose = 1; // currently unused const int effSetProgram = 2; // currently unused const int effGetProgram = 3; // currently unused const int effGetProgramName = 5; // currently unused const int effGetParamName = 8; // currently unused const int effSetSampleRate = 10; const int effSetBlockSize = 11; const int effMainsChanged = 12; const int effEditGetRect = 13; const int effEditOpen = 14; const int effEditClose = 15; const int effEditIdle = 19; const int effEditTop = 20; const int effProcessEvents = 25; const int effGetEffectName = 45; const int effGetParameterProperties = 47; // missing const int effGetVendorString = 47; const int effGetProductString = 48; const int effGetVendorVersion = 49; const int effCanDo = 51; // currently unused const int effGetVstVersion = 58; // currently unused const int kEffectMagic = CCONST( 'V', 's', 't', 'P' ); const int kVstLangEnglish = 1; const int kVstMidiType = 1; const int kVstTransportPlaying = 1 << 1; const int kVstTransportCycleActive = 1 << 2; const int kVstTransportChanged = 1; /* validity flags for a VstTimeInfo structure, this info comes from the web */ const int kVstNanosValid (1 << 8); const int kVstPpqPosValid (1 << 9); const int kVstTempoValid (1 << 10); const int kVstBarsValid (1 << 11); const int kVstCyclePosValid (1 << 12); const int kVstTimeSigValid (1 << 13); const int kVstSmpteValid (1 << 14); const int kVstClockValid (1 << 15); class RemoteVstPlugin; class VstMidiEvent { public: // 00 int type; // 04 int byteSize; // 08 int deltaFrames; // 0c? int flags; // 10? int noteLength; // 14? int noteOffset; // 18 char midiData[4]; // 1c? char detune; // 1d? char noteOffVelocity; // 1e? char reserved1; // 1f? char reserved2; } ; class VstEvent { char dump[sizeof( VstMidiEvent )]; } ; class VstEvents { public: // 00 int numEvents; // 04 void *reserved; // 08 VstEvent* events[1]; } ; /* constants from http://www.rawmaterialsoftware.com/juceforum/viewtopic.php?t=3740&sid=183f74631fee71a493316735e2b9f28b */ enum Vestige2StringConstants { VestigeMaxNameLen = 64, VestigeMaxLabelLen = 64, VestigeMaxShortLabelLen = 8, VestigeMaxCategLabelLen = 24, VestigeMaxFileNameLen = 100 }; /* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ struct VstParameterProperties { float stepFloat; /* float step */ float smallStepFloat; /* small float step */ float largeStepFloat; /* large float step */ char label[VestigeMaxLabelLen]; /* parameter label */ int32_t flags; /* @see VstParameterFlags */ int32_t minInteger; /* integer minimum */ int32_t maxInteger; /* integer maximum */ int32_t stepInteger; /* integer step */ int32_t largeStepInteger; /* large integer step */ char shortLabel[VestigeMaxShortLabelLen]; /* short label, recommended: 6 + delimiter */ int16_t displayIndex; /* index where this parameter should be displayed (starting with 0) */ int16_t category; /* 0: no category, else group index + 1 */ int16_t numParametersInCategory; /* number of parameters in category */ int16_t reserved; /* zero */ char categoryLabel[VestigeMaxCategLabelLen]; /* category label, e.g. "Osc 1" */ char future[16]; /* reserved for future use */ }; /* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ enum VstParameterFlags { kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */ kVstParameterUsesIntegerMinMax = 1 << 1, /* minInteger, maxInteger valid */ kVstParameterUsesFloatStep = 1 << 2, /* stepFloat, smallStepFloat, largeStepFloat valid */ kVstParameterUsesIntStep = 1 << 3, /* stepInteger, largeStepInteger valid */ kVstParameterSupportsDisplayIndex = 1 << 4, /* displayIndex valid */ kVstParameterSupportsDisplayCategory = 1 << 5, /* category, etc. valid */ kVstParameterCanRamp = 1 << 6 /* set if parameter value can ramp up/down */ }; class AEffect { public: // Never use virtual functions!!! // 00-03 int magic; // dispatcher 04-07 intptr_t (* dispatcher)( AEffect * , int , int , intptr_t, void * , float ); // process, quite sure 08-0b void (* process)( AEffect * , float * * , float * * , int ); // setParameter 0c-0f void (* setParameter)( AEffect * , int , float ); // getParameter 10-13 float (* getParameter)( AEffect * , int ); // programs 14-17 int numPrograms; // Params 18-1b int numParams; // Input 1c-1f int numInputs; // Output 20-23 int numOutputs; // flags 24-27 int flags; // Fill somewhere 28-2b void *ptr1; void *ptr2; // Zeroes 2c-2f 30-33 34-37 38-3b char empty3[4 + 4 + 4]; // 1.0f 3c-3f float unkown_float; // An object? pointer 40-43 void *ptr3; // Zeroes 44-47 void *user; // Id 48-4b int32_t uniqueID; // Don't know 4c-4f char unknown1[4]; // processReplacing 50-53 void (* processReplacing)( AEffect * , float * * , float * * , int ); } ; class VstTimeInfo { public: // 00 double samplePos; // 08 double sampleRate; // unconfirmed 10 double nanoSeconds; // 18 double ppqPos; // 20? double tempo; // 28 double barStartPos; // 30? double cycleStartPos; // 38? double cycleEndPos; // 40? int32_t timeSigNumerator; // 44? int32_t timeSigDenominator; int32_t smpteOffset; int32_t smpteFrameRate; int32_t samplesToNextClock; // 54 int32_t flags; } ; typedef intptr_t (* audioMasterCallback)( AEffect * , int32_t, int32_t, intptr_t, void * , float ); #endif lmms-1.1.3/include/atomic_int.h000066400000000000000000000037611247673406200164300ustar00rootroot00000000000000/* * atomic_int.h - fallback AtomicInt class when Qt is too old * * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _ATOMIC_INT_H #define _ATOMIC_INT_H #include #if QT_VERSION >= 0x040400 typedef QAtomicInt AtomicInt; #else // implement our own (slow) QAtomicInt class when on old Qt class AtomicInt { public: inline AtomicInt( int _value = 0 ) : m_value( _value ), m_lock() { } inline AtomicInt( const AtomicInt & _copy ) : m_value( _copy.m_value ), m_lock() { } inline int fetchAndStoreOrdered( int _newVal ) { m_lock.lock(); const int oldVal = m_value; m_value = _newVal; m_lock.unlock(); return oldVal; } inline int fetchAndAddOrdered( int _add ) { m_lock.lock(); const int oldVal = m_value; m_value += _add; m_lock.unlock(); return oldVal; } inline AtomicInt & operator=( const AtomicInt & _copy ) { m_lock.lock(); m_value = _copy.m_value; m_lock.unlock(); return *this; } inline AtomicInt & operator=( int _value ) { m_lock.lock(); m_value = _value; m_lock.unlock(); return *this; } inline operator int() const { return m_value; } private: volatile int m_value; QMutex m_lock; } ; #endif #endif lmms-1.1.3/include/automatable_button.h000066400000000000000000000046751247673406200202000ustar00rootroot00000000000000/* * automatable_button.h - class automatableButton, the base for all buttons * * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _AUTOMATABLE_BUTTON_H #define _AUTOMATABLE_BUTTON_H #include #include "AutomatableModelView.h" class automatableButtonGroup; class EXPORT automatableButton : public QPushButton, public BoolModelView { Q_OBJECT public: automatableButton( QWidget * _parent, const QString & _name = QString::null ); virtual ~automatableButton(); inline void setCheckable( bool _on ) { QPushButton::setCheckable( _on ); model()->setJournalling( _on ); } virtual void modelChanged(); public slots: virtual void update(); virtual void toggle(); virtual void setChecked( bool _on ) { // QPushButton::setChecked is called in update-slot model()->setValue( _on ); } protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); private: automatableButtonGroup * m_group; friend class automatableButtonGroup; using QPushButton::setChecked; using QPushButton::isChecked; } ; class EXPORT automatableButtonGroup : public QWidget, public IntModelView { Q_OBJECT public: automatableButtonGroup( QWidget * _parent, const QString & _name = QString::null ); virtual ~automatableButtonGroup(); void addButton( automatableButton * _btn ); void removeButton( automatableButton * _btn ); void activateButton( automatableButton * _btn ); virtual void modelChanged(); private slots: void updateButtons(); private: QList m_buttons; } ; #endif lmms-1.1.3/include/automatable_slider.h000066400000000000000000000034761247673406200201450ustar00rootroot00000000000000/* * automatable_slider.h - class automatableSlider, a QSlider with automation * * Copyright (c) 2006-2008 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _AUTOMATABLE_SLIDER_H #define _AUTOMATABLE_SLIDER_H #include #include "AutomatableModelView.h" class automatableSlider : public QSlider, public IntModelView { Q_OBJECT public: automatableSlider( QWidget * _parent, const QString & _name = QString::null ); virtual ~automatableSlider(); bool showStatus() { return( m_showStatus ); } signals: void logicValueChanged( int _value ); void logicSliderMoved( int _value ); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void wheelEvent( QWheelEvent * _me ); virtual void modelChanged(); private: bool m_showStatus; private slots: void changeValue( int _value ); void moveSlider( int _value ); void updateSlider(); } ; typedef IntModel sliderModel; #endif lmms-1.1.3/include/base64.h000066400000000000000000000032731247673406200153640ustar00rootroot00000000000000/* * base64.h - namespace base64 with methods for encoding/decoding binary data * to/from base64 * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _BASE64_H #define _BASE64_H #include #include #include namespace base64 { inline void encode( const char * _data, const int _size, QString & _dst ) { _dst = QByteArray( _data, _size ).toBase64(); } template inline void decode( const QString & _b64, T * * _data, int * _size ) { QByteArray data = QByteArray::fromBase64( _b64.toUtf8() ); *_size = data.size(); *_data = new T[*_size / sizeof(T)]; memcpy( *_data, data.constData(), *_size ); } // deprecated!! QString encode( const QVariant & _data ); // for compatibility-code only QVariant decode( const QString & _b64, QVariant::Type _force_type = QVariant::Invalid ); } #endif lmms-1.1.3/include/basic_filters.h000066400000000000000000000375361247673406200171220ustar00rootroot00000000000000/* * basic_filters.h - simple but powerful filter-class with most used filters * * original file by ??? * modified and enhanced by Tobias Doerffel * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef BASIC_FILTERS_H #define BASIC_FILTERS_H #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include #include "lmms_basics.h" #include "Mixer.h" #include "templates.h" #include "lmms_constants.h" #include "interpolation.h" //#include //#include template class basicFilters { public: enum FilterTypes { LowPass, HiPass, BandPass_CSG, BandPass_CZPG, Notch, AllPass, Moog, DoubleLowPass, Lowpass_RC12, Bandpass_RC12, Highpass_RC12, Lowpass_RC24, Bandpass_RC24, Highpass_RC24, Formantfilter, NumFilters } ; static inline float minFreq() { return( 3.0f ); } static inline float minQ() { return( 0.01f ); } inline void setFilterType( const int _idx ) { m_doubleFilter = _idx == DoubleLowPass; if( !m_doubleFilter ) { m_type = static_cast( _idx ); return; } // Double lowpass mode, backwards-compat for the goofy // Add-NumFilters to signify doubleFilter stuff m_type = static_cast( LowPass ); if( m_subFilter == NULL ) { m_subFilter = new basicFilters( static_cast( m_sampleRate ) ); } m_subFilter->m_type = m_type; } inline basicFilters( const sample_rate_t _sample_rate ) : m_b0a0( 0.0f ), m_b1a0( 0.0f ), m_b2a0( 0.0f ), m_a1a0( 0.0f ), m_a2a0( 0.0f ), m_rca( 0.0f ), m_rcb( 1.0f ), m_rcc( 0.0f ), m_doubleFilter( false ), m_sampleRate( (float) _sample_rate ), m_subFilter( NULL ) { clearHistory(); } inline ~basicFilters() { delete m_subFilter; } inline void clearHistory() { // reset in/out history for( ch_cnt_t _chnl = 0; _chnl < CHANNELS; ++_chnl ) { // reset in/out history for simple filters m_ou1[_chnl] = m_ou2[_chnl] = m_in1[_chnl] = m_in2[_chnl] = 0.0f; // reset in/out history for moog-filter m_y1[_chnl] = m_y2[_chnl] = m_y3[_chnl] = m_y4[_chnl] = m_oldx[_chnl] = m_oldy1[_chnl] = m_oldy2[_chnl] = m_oldy3[_chnl] = 0.0f; // reset in/out history for RC-filters m_rclp0[_chnl] = m_rcbp0[_chnl] = m_rchp0[_chnl] = m_rclast0[_chnl] = 0.0f; m_rclp1[_chnl] = m_rcbp1[_chnl] = m_rchp1[_chnl] = m_rclast1[_chnl] = 0.0f; for(int i=0; i<6; i++) m_vflp[i][_chnl] = m_vfbp[i][_chnl] = m_vfhp[i][_chnl] = m_vflast[i][_chnl] = 0.0f; } } inline sample_t update( sample_t _in0, ch_cnt_t _chnl ) { sample_t out; switch( m_type ) { case Moog: { sample_t x = _in0 - m_r*m_y4[_chnl]; // four cascaded onepole filters // (bilinear transform) m_y1[_chnl] = tLimit( ( x + m_oldx[_chnl] ) * m_p - m_k * m_y1[_chnl], -10.0f, 10.0f ); m_y2[_chnl] = tLimit( ( m_y1[_chnl] + m_oldy1[_chnl] ) * m_p - m_k * m_y2[_chnl], -10.0f, 10.0f ); m_y3[_chnl] = tLimit( ( m_y2[_chnl] + m_oldy2[_chnl] ) * m_p - m_k * m_y3[_chnl], -10.0f, 10.0f ); m_y4[_chnl] = tLimit( ( m_y3[_chnl] + m_oldy3[_chnl] ) * m_p - m_k * m_y4[_chnl], -10.0f, 10.0f ); m_oldx[_chnl] = x; m_oldy1[_chnl] = m_y1[_chnl]; m_oldy2[_chnl] = m_y2[_chnl]; m_oldy3[_chnl] = m_y3[_chnl]; out = m_y4[_chnl] - m_y4[_chnl] * m_y4[_chnl] * m_y4[_chnl] * ( 1.0f / 6.0f ); break; } // 4-times oversampled simulation of an active RC-Bandpass,-Lowpass,-Highpass- // Filter-Network as it was used in nearly all modern analog synthesizers. This // can be driven up to self-oscillation (BTW: do not remove the limits!!!). // (C) 1998 ... 2009 S.Fendt. Released under the GPL v2.0 or any later version. case Lowpass_RC12: { sample_t lp, bp, hp, in; for( int n = 4; n != 0; --n ) { in = _in0 + m_rcbp0[_chnl] * m_rcq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_rcb + m_rclp0[_chnl] * m_rca; lp = qBound( -1.0f, lp, 1.0f ); hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca; bp = qBound( -1.0f, bp, 1.0f ); m_rclast0[_chnl] = in; m_rclp0[_chnl] = lp; m_rchp0[_chnl] = hp; m_rcbp0[_chnl] = bp; } return lp; break; } case Highpass_RC12: case Bandpass_RC12: { sample_t hp, bp, in; for( int n = 4; n != 0; --n ) { in = _in0 + m_rcbp0[_chnl] * m_rcq; in = qBound( -1.0f, in, 1.0f ); hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca; bp = qBound( -1.0f, bp, 1.0f ); m_rclast0[_chnl] = in; m_rchp0[_chnl] = hp; m_rcbp0[_chnl] = bp; } return m_type == Highpass_RC12 ? hp : bp; break; } case Lowpass_RC24: { sample_t lp, bp, hp, in; for( int n = 4; n != 0; --n ) { // first stage is as for the 12dB case... in = _in0 + m_rcbp0[_chnl] * m_rcq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_rcb + m_rclp0[_chnl] * m_rca; lp = qBound( -1.0f, lp, 1.0f ); hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca; bp = qBound( -1.0f, bp, 1.0f ); m_rclast0[_chnl] = in; m_rclp0[_chnl] = lp; m_rcbp0[_chnl] = bp; m_rchp0[_chnl] = hp; // second stage gets the output of the first stage as input... in = lp + m_rcbp1[_chnl] * m_rcq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_rcb + m_rclp1[_chnl] * m_rca; lp = qBound( -1.0f, lp, 1.0f ); hp = m_rcc * ( m_rchp1[_chnl] + in - m_rclast1[_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_rcb + m_rcbp1[_chnl] * m_rca; bp = qBound( -1.0f, bp, 1.0f ); m_rclast1[_chnl] = in; m_rclp1[_chnl] = lp; m_rcbp1[_chnl] = bp; m_rchp1[_chnl] = hp; } return lp; break; } case Highpass_RC24: case Bandpass_RC24: { sample_t hp, bp, in; for( int n = 4; n != 0; --n ) { // first stage is as for the 12dB case... in = _in0 + m_rcbp0[_chnl] * m_rcq; in = qBound( -1.0f, in, 1.0f ); hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca; bp = qBound( -1.0f, bp, 1.0f ); m_rclast0[_chnl] = in; m_rchp0[_chnl] = hp; m_rcbp0[_chnl] = bp; // second stage gets the output of the first stage as input... in = m_type == Highpass_RC24 ? hp + m_rcbp1[_chnl] * m_rcq : bp + m_rcbp1[_chnl] * m_rcq; in = qBound( -1.0f, in, 1.0f ); hp = m_rcc * ( m_rchp1[_chnl] + in - m_rclast1[_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_rcb + m_rcbp1[_chnl] * m_rca; bp = qBound( -1.0f, bp, 1.0f ); m_rclast1[_chnl] = in; m_rchp1[_chnl] = hp; m_rcbp1[_chnl] = bp; } return m_type == Highpass_RC24 ? hp : bp; break; } case Formantfilter: { sample_t lp, hp, bp, in; out = 0; for(int o=0; o<4; o++) { // first formant in = _in0 + m_vfbp[0][_chnl] * m_vfq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_vfb[0] + m_vflp[0][_chnl] * m_vfa[0]; lp = qBound( -1.0f, lp, 1.0f ); hp = m_vfc[0] * ( m_vfhp[0][_chnl] + in - m_vflast[0][_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_vfb[0] + m_vfbp[0][_chnl] * m_vfa[0]; bp = qBound( -1.0f, bp, 1.0f ); m_vflast[0][_chnl] = in; m_vflp[0][_chnl] = lp; m_vfhp[0][_chnl] = hp; m_vfbp[0][_chnl] = bp; in = bp + m_vfbp[2][_chnl] * m_vfq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_vfb[0] + m_vflp[2][_chnl] * m_vfa[0]; lp = qBound( -1.0f, lp, 1.0f ); hp = m_vfc[0] * ( m_vfhp[2][_chnl] + in - m_vflast[2][_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_vfb[0] + m_vfbp[2][_chnl] * m_vfa[0]; bp = qBound( -1.0f, bp, 1.0f ); m_vflast[2][_chnl] = in; m_vflp[2][_chnl] = lp; m_vfhp[2][_chnl] = hp; m_vfbp[2][_chnl] = bp; in = bp + m_vfbp[4][_chnl] * m_vfq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_vfb[0] + m_vflp[4][_chnl] * m_vfa[0]; lp = qBound( -1.0f, lp, 1.0f ); hp = m_vfc[0] * ( m_vfhp[4][_chnl] + in - m_vflast[4][_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_vfb[0] + m_vfbp[4][_chnl] * m_vfa[0]; bp = qBound( -1.0f, bp, 1.0f ); m_vflast[4][_chnl] = in; m_vflp[4][_chnl] = lp; m_vfhp[4][_chnl] = hp; m_vfbp[4][_chnl] = bp; out += bp; // second formant in = _in0 + m_vfbp[0][_chnl] * m_vfq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_vfb[1] + m_vflp[1][_chnl] * m_vfa[1]; lp = qBound( -1.0f, lp, 1.0f ); hp = m_vfc[1] * ( m_vfhp[1][_chnl] + in - m_vflast[1][_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_vfb[1] + m_vfbp[1][_chnl] * m_vfa[1]; bp = qBound( -1.0f, bp, 1.0f ); m_vflast[1][_chnl] = in; m_vflp[1][_chnl] = lp; m_vfhp[1][_chnl] = hp; m_vfbp[1][_chnl] = bp; in = bp + m_vfbp[3][_chnl] * m_vfq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_vfb[1] + m_vflp[3][_chnl] * m_vfa[1]; lp = qBound( -1.0f, lp, 1.0f ); hp = m_vfc[1] * ( m_vfhp[3][_chnl] + in - m_vflast[3][_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_vfb[1] + m_vfbp[3][_chnl] * m_vfa[1]; bp = qBound( -1.0f, bp, 1.0f ); m_vflast[3][_chnl] = in; m_vflp[3][_chnl] = lp; m_vfhp[3][_chnl] = hp; m_vfbp[3][_chnl] = bp; in = bp + m_vfbp[5][_chnl] * m_vfq; in = qBound( -1.0f, in, 1.0f ); lp = in * m_vfb[1] + m_vflp[5][_chnl] * m_vfa[1]; lp = qBound( -1.0f, lp, 1.0f ); hp = m_vfc[1] * ( m_vfhp[5][_chnl] + in - m_vflast[5][_chnl] ); hp = qBound( -1.0f, hp, 1.0f ); bp = hp * m_vfb[1] + m_vfbp[5][_chnl] * m_vfa[1]; bp = qBound( -1.0f, bp, 1.0f ); m_vflast[5][_chnl] = in; m_vflp[5][_chnl] = lp; m_vfhp[5][_chnl] = hp; m_vfbp[5][_chnl] = bp; out += bp; } return( out/2.0f ); break; } default: // filter out = m_b0a0*_in0 + m_b1a0*m_in1[_chnl] + m_b2a0*m_in2[_chnl] - m_a1a0*m_ou1[_chnl] - m_a2a0*m_ou2[_chnl]; // push in/out buffers m_in2[_chnl] = m_in1[_chnl]; m_in1[_chnl] = _in0; m_ou2[_chnl] = m_ou1[_chnl]; m_ou1[_chnl] = out; break; } if( m_doubleFilter ) { return m_subFilter->update( out, _chnl ); } // Clipper band limited sigmoid return out; } inline void calcFilterCoeffs( float _freq, float _q /*, const bool _q_is_bandwidth = false*/ ) { // temp coef vars _q = qMax( _q, minQ() ); if( m_type == Lowpass_RC12 || m_type == Bandpass_RC12 || m_type == Highpass_RC12 || m_type == Lowpass_RC24 || m_type == Bandpass_RC24 || m_type == Highpass_RC24 ) { _freq = qBound( 50.0f, _freq, 20000.0f ); m_rca = 1.0f - (1.0f/(m_sampleRate*4)) / ( (1.0f/(_freq*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) ); m_rcb = 1.0f - m_rca; m_rcc = (1.0f/(_freq*2.0f*M_PI)) / ( (1.0f/(_freq*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) ); // Stretch Q/resonance, as self-oscillation reliably starts at a q of ~2.5 - ~2.6 m_rcq = _q * 0.25f; return; } if( m_type == Formantfilter ) { _freq = qBound( minFreq(), _freq, 20000.0f ); // limit freq and q for not getting bad noise out of the filter... // formats for a, e, i, o, u, a static const float _f[5][2] = { { 1000, 1400 }, { 500, 2300 }, { 320, 3200 }, { 500, 1000 }, { 320, 800 } }; static const float freqRatio = 4.0f / 14000.0f; // Stretch Q/resonance m_vfq = _q * 0.25f; // frequency in lmms ranges from 1Hz to 14000Hz const float vowelf = _freq * freqRatio; const int vowel = static_cast( vowelf ); const float fract = vowelf - vowel; // interpolate between formant frequencies const float f0 = linearInterpolate( _f[vowel+0][0], _f[vowel+1][0], fract ); const float f1 = linearInterpolate( _f[vowel+0][1], _f[vowel+1][1], fract ); m_vfa[0] = 1.0f - (1.0f/(m_sampleRate*4)) / ( (1.0f/(f0*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) ); m_vfb[0] = 1.0f - m_vfa[0]; m_vfc[0] = (1.0f/(f0*2.0f*M_PI)) / ( (1.0f/(f0*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) ); m_vfa[1] = 1.0f - (1.0f/(m_sampleRate*4)) / ( (1.0f/(f1*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) ); m_vfb[1] = 1.0f - m_vfa[1]; m_vfc[1] = (1.0f/(f1*2.0f*M_PI)) / ( (1.0f/(f1*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) ); return; } if( m_type == Moog ) { _freq = qBound( minFreq(), _freq, 20000.0f ); // [ 0 - 0.5 ] const float f = _freq / m_sampleRate; // (Empirical tunning) m_p = ( 3.6f - 3.2f * f ) * f; m_k = 2.0f * m_p - 1; m_r = _q * powf( M_E, ( 1 - m_p ) * 1.386249f ); if( m_doubleFilter ) { m_subFilter->m_r = m_r; m_subFilter->m_p = m_p; m_subFilter->m_k = m_k; } return; } // other filters _freq = qBound( minFreq(), _freq, 20000.0f ); const float omega = F_2PI * _freq / m_sampleRate; const float tsin = sinf( omega ); const float tcos = cosf( omega ); //float alpha; //if (q_is_bandwidth) //alpha = tsin*sinhf(logf(2.0f)/2.0f*q*omega/ // tsin); //else const float alpha = 0.5f * tsin / _q; const float a0 = 1.0f / ( 1.0f + alpha ); m_a1a0 = -2.0f * tcos * a0; m_a2a0 = ( 1.0f - alpha ) * a0; switch( m_type ) { case LowPass: m_b1a0 = ( 1.0f - tcos ) * a0; m_b0a0 = m_b1a0 * 0.5f; m_b2a0 = m_b0a0;//((1.0f-tcos)/2.0f)*a0; break; case HiPass: m_b1a0 = ( -1.0f - tcos ) * a0; m_b0a0 = m_b1a0 * -0.5f; m_b2a0 = m_b0a0;//((1.0f+tcos)/2.0f)*a0; break; case BandPass_CSG: m_b1a0 = 0.0f; m_b0a0 = tsin * 0.5f * a0; m_b2a0 = -m_b0a0; break; case BandPass_CZPG: m_b1a0 = 0.0f; m_b0a0 = alpha * a0; m_b2a0 = -m_b0a0; break; case Notch: m_b1a0 = m_a1a0; m_b0a0 = a0; m_b2a0 = a0; break; case AllPass: m_b1a0 = m_a1a0; m_b0a0 = m_a2a0; m_b2a0 = 1.0f;//(1.0f+alpha)*a0; break; default: break; } if( m_doubleFilter ) { m_subFilter->m_b0a0 = m_b0a0; m_subFilter->m_b1a0 = m_b1a0; m_subFilter->m_b2a0 = m_b2a0; m_subFilter->m_a1a0 = m_a1a0; m_subFilter->m_a2a0 = m_a2a0; } } private: // filter coeffs float m_b0a0, m_b1a0, m_b2a0, m_a1a0, m_a2a0; // coeffs for moog-filter float m_r, m_p, m_k; // coeffs for RC-type-filters float m_rca, m_rcb, m_rcc, m_rcq; // coeffs for formant-filters float m_vfa[4], m_vfb[4], m_vfc[4], m_vfq; typedef sample_t frame[CHANNELS]; // in/out history frame m_ou1, m_ou2, m_in1, m_in2; // in/out history for moog-filter frame m_y1, m_y2, m_y3, m_y4, m_oldx, m_oldy1, m_oldy2, m_oldy3; // in/out history for RC-type-filters frame m_rcbp0, m_rclp0, m_rchp0, m_rclast0; frame m_rcbp1, m_rclp1, m_rchp1, m_rclast1; // in/out history for Formant-filters frame m_vfbp[6], m_vflp[6], m_vfhp[6], m_vflast[6]; FilterTypes m_type; bool m_doubleFilter; float m_sampleRate; basicFilters * m_subFilter; } ; #endif lmms-1.1.3/include/bb_editor.h000066400000000000000000000032461247673406200162310ustar00rootroot00000000000000/* * bb_editor.h - view-component of BB-Editor * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef BB_EDITOR_H #define BB_EDITOR_H #include "TrackContainerView.h" class bbTrackContainer; class comboBox; class toolButton; class bbEditor : public TrackContainerView { Q_OBJECT public: bbEditor( bbTrackContainer * _tc ); virtual ~bbEditor(); virtual inline bool fixedTCOs() const { return( true ); } virtual void dropEvent( QDropEvent * _de ); void removeBBView( int _bb ); void setPauseIcon( bool pause ); public slots: void play(); void stop(); void updatePosition(); void addAutomationTrack(); void addSteps(); void removeSteps(); private: virtual void keyPressEvent( QKeyEvent * _ke ); bbTrackContainer * m_bbtc; QWidget * m_toolBar; toolButton * m_playButton; toolButton * m_stopButton; comboBox * m_bbComboBox; } ; #endif lmms-1.1.3/include/bb_track.h000066400000000000000000000102621247673406200160430ustar00rootroot00000000000000/* * bb_track.h - class bbTrack, a wrapper for using bbEditor * (which is a singleton-class) as track * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef BB_TRACK_H #define BB_TRACK_H #include #include #include "track.h" class trackLabelButton; class TrackContainer; class bbTCO : public trackContentObject { public: bbTCO( track * _track ); virtual ~bbTCO(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return( "bbtco" ); } unsigned int color() const { return( m_color.rgb() ); } QColor colorObj() const { return m_color; } void setColor( const QColor & c ) { m_color = QColor( c ); } void setUseStyleColor( bool b ) { m_useStyleColor = b; } int bbTrackIndex(); virtual trackContentObjectView * createView( trackView * _tv ); private: QColor m_color; bool m_useStyleColor; friend class bbTCOView; } ; class bbTCOView : public trackContentObjectView { Q_OBJECT public: bbTCOView( trackContentObject * _tco, trackView * _tv ); virtual ~bbTCOView(); QColor color() const { return( m_bbTCO->m_color ); } void setColor( QColor _new_color ); protected slots: void openInBBEditor(); void resetName(); void changeName(); void changeColor(); void resetColor(); protected: void paintEvent( QPaintEvent * ); void mouseDoubleClickEvent( QMouseEvent * _me ); virtual void constructContextMenu( QMenu * ); private: bbTCO * m_bbTCO; } ; class EXPORT bbTrack : public track { Q_OBJECT public: bbTrack( TrackContainer* tc ); virtual ~bbTrack(); virtual bool play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _frame_base, int _tco_num = -1 ); virtual trackView * createView( TrackContainerView* tcv ); virtual trackContentObject * createTCO( const MidiTime & _pos ); virtual void saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadTrackSpecificSettings( const QDomElement & _this ); static bbTrack * findBBTrack( int _bb_num ); static void swapBBTracks( track * _track1, track * _track2 ); int index() { return s_infoMap[this]; } bool automationDisabled( track * _track ) { return( m_disabledTracks.contains( _track ) ); } void disableAutomation( track * _track ) { m_disabledTracks.append( _track ); } void enableAutomation( track * _track ) { m_disabledTracks.removeAll( _track ); } static void setLastTCOColor( const QColor & c ) { if( ! s_lastTCOColor ) { s_lastTCOColor = new QColor( c ); } else { *s_lastTCOColor = QColor( c ); } } static void clearLastTCOColor() { if( s_lastTCOColor ) { delete s_lastTCOColor; } s_lastTCOColor = NULL; } protected: inline virtual QString nodeName() const { return( "bbtrack" ); } private: QList m_disabledTracks; typedef QMap infoMap; static infoMap s_infoMap; static QColor * s_lastTCOColor; friend class bbTrackView; } ; class bbTrackView : public trackView { Q_OBJECT public: bbTrackView( bbTrack* bbt, TrackContainerView* tcv ); virtual ~bbTrackView(); virtual bool close(); const bbTrack * getBBTrack() const { return( m_bbTrack ); } public slots: void clickedTrackLabel(); private: bbTrack * m_bbTrack; trackLabelButton * m_trackLabel; } ; #endif lmms-1.1.3/include/bb_track_container.h000066400000000000000000000036511247673406200201110ustar00rootroot00000000000000/* * bb_track_container.h - model-component of BB-Editor * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _BB_TRACK_CONTAINER_H #define _BB_TRACK_CONTAINER_H #include "TrackContainer.h" #include "combobox.h" class EXPORT bbTrackContainer : public TrackContainer { Q_OBJECT mapPropertyFromModel(int,currentBB,setCurrentBB,m_bbComboBoxModel); public: bbTrackContainer(); virtual ~bbTrackContainer(); virtual bool play( MidiTime _start, const fpp_t _frames, const f_cnt_t _frame_base, int _tco_num = -1 ); virtual void updateAfterTrackAdd(); inline virtual QString nodeName() const { return "bbtrackcontainer"; } tact_t lengthOfBB( int _bb ); inline tact_t lengthOfCurrentBB() { return lengthOfBB( currentBB() ); } int numOfBBs() const; void removeBB( int _bb ); void swapBB( int _bb1, int _bb2 ); void updateBBTrack( trackContentObject * _tco ); void fixIncorrectPositions(); void createTCOsForBB( int _bb ); public slots: void play(); void stop(); void updateComboBox(); void currentBBChanged(); private: ComboBoxModel m_bbComboBoxModel; friend class bbEditor; } ; #endif lmms-1.1.3/include/caption_menu.h000066400000000000000000000024561247673406200167630ustar00rootroot00000000000000/* * caption_menu.h - context menu with a caption * * Copyright (c) 2007-2008 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _CAPTION_MENU_H #define _CAPTION_MENU_H #include #include "export.h" class EXPORT captionMenu : public QMenu { Q_OBJECT public: captionMenu( const QString & _title, QWidget * _parent = 0 ); virtual ~captionMenu(); /// /// \brief Adds a "Help" action displaying the Menu's parent's WhatsThis /// text when selected. /// void addHelpAction(); } ; #endif lmms-1.1.3/include/combobox.h000066400000000000000000000035141247673406200161060ustar00rootroot00000000000000/* * combobox.h - class ComboBox, a combo box view for models * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _COMBOBOX_H #define _COMBOBOX_H #include #include #include "ComboBoxModel.h" #include "AutomatableModelView.h" class EXPORT comboBox : public QWidget, public IntModelView { Q_OBJECT public: comboBox( QWidget* parent = NULL, const QString& name = QString() ); virtual ~comboBox(); ComboBoxModel* model() { return castModel(); } const ComboBoxModel* model() const { return castModel(); } virtual QSize sizeHint() const; protected: virtual void contextMenuEvent( QContextMenuEvent* event ); virtual void mousePressEvent( QMouseEvent* event ); virtual void paintEvent( QPaintEvent* event ); virtual void wheelEvent( QWheelEvent* event ); private: static QPixmap* s_background; static QPixmap* s_arrow; static QPixmap* s_arrowSelected; QMenu m_menu; bool m_pressed; private slots: void setItem( QAction* item ); } ; #endif lmms-1.1.3/include/config_mgr.h000066400000000000000000000106251247673406200164110ustar00rootroot00000000000000/* * config_mgr.h - class configManager, a class for managing LMMS-configuration * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _CONFIG_MGR_H #define _CONFIG_MGR_H #include "lmmsconfig.h" #include #include #include #include #include "export.h" class engine; const QString PROJECTS_PATH = "projects/"; const QString PRESETS_PATH = "presets/"; const QString SAMPLES_PATH = "samples/"; const QString DEFAULT_THEME_PATH = "themes/default/"; const QString TRACK_ICON_PATH = "track_icons/"; const QString LOCALE_PATH = "locale/"; class EXPORT configManager { public: static inline configManager * inst() { if( s_instanceOfMe == NULL ) { s_instanceOfMe = new configManager(); } return( s_instanceOfMe ); } const QString & dataDir() const { return( m_dataDir ); } const QString & workingDir() const { return( m_workingDir ); } QString userProjectsDir() const { return( workingDir() + PROJECTS_PATH ); } QString userPresetsDir() const { return( workingDir() + PRESETS_PATH ); } QString userSamplesDir() const { return( workingDir() + SAMPLES_PATH ); } QString factoryProjectsDir() const { return( dataDir() + PROJECTS_PATH ); } QString factoryPresetsDir() const { return( dataDir() + PRESETS_PATH ); } QString factorySamplesDir() const { return( dataDir() + SAMPLES_PATH ); } QString defaultArtworkDir() const { return( m_dataDir + DEFAULT_THEME_PATH ); } QString artworkDir() const { return( m_artworkDir ); } QString trackIconsDir() const { return( m_dataDir + TRACK_ICON_PATH ); } QString localeDir() const { return( m_dataDir + LOCALE_PATH ); } const QString & pluginDir() const { return( m_pluginDir ); } const QString & vstDir() const { return( m_vstDir ); } const QString & flDir() const { return( m_flDir ); } const QString & ladspaDir() const { return( m_ladDir ); } #ifdef LMMS_HAVE_STK const QString & stkDir() const { return( m_stkDir ); } #endif #ifdef LMMS_HAVE_FLUIDSYNTH const QString & defaultSoundfont() const { return( m_defaultSoundfont ); } #endif const QString & backgroundArtwork() const { return( m_backgroundArtwork ); } inline const QStringList & recentlyOpenedProjects() const { return( m_recentlyOpenedProjects ); } void addRecentlyOpenedProject( const QString & _file ); const QString & value( const QString & _class, const QString & _attribute ) const; void setValue( const QString & _class, const QString & _attribute, const QString & _value ); void loadConfigFile(); void saveConfigFile(); void setWorkingDir( const QString & _wd ); void setVSTDir( const QString & _vd ); void setArtworkDir( const QString & _ad ); void setFLDir( const QString & _fd ); void setLADSPADir( const QString & _fd ); void setSTKDir( const QString & _fd ); void setDefaultSoundfont( const QString & _sf ); void setBackgroundArtwork( const QString & _ba ); private: static configManager * s_instanceOfMe; configManager(); configManager( const configManager & _c ); ~configManager(); const QString m_lmmsRcFile; QString m_workingDir; QString m_dataDir; QString m_artworkDir; QString m_pluginDir; QString m_vstDir; QString m_flDir; QString m_ladDir; #ifdef LMMS_HAVE_STK QString m_stkDir; #endif #ifdef LMMS_HAVE_FLUIDSYNTH QString m_defaultSoundfont; #endif QString m_backgroundArtwork; QStringList m_recentlyOpenedProjects; typedef QVector > stringPairVector; typedef QMap settingsMap; settingsMap m_settings; friend class engine; } ; #endif lmms-1.1.3/include/cpuload_widget.h000066400000000000000000000027641247673406200172760ustar00rootroot00000000000000/* * cpuload_widget.h - widget for displaying CPU-load (partly based on * Hydrogen's CPU-load-widget) * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _CPULOAD_WIDGET_H #define _CPULOAD_WIDGET_H #include #include #include #include "lmms_basics.h" class cpuloadWidget : public QWidget { Q_OBJECT public: cpuloadWidget( QWidget * _parent ); virtual ~cpuloadWidget(); protected: virtual void paintEvent( QPaintEvent * _ev ); protected slots: void updateCpuLoad(); private: int m_currentLoad; QPixmap m_temp; QPixmap m_background; QPixmap m_leds; bool m_changed; QTimer m_updateTimer; } ; #endif lmms-1.1.3/include/custom_events.h000066400000000000000000000021011247673406200171630ustar00rootroot00000000000000/* * custom_events.h - custom event types list * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _CUSTOM_EVENTS_H #define _CUSTOM_EVENTS_H #include namespace customEvents { enum Type { GUI_UPDATE = QEvent::User } ; } #endif lmms-1.1.3/include/debug.h000066400000000000000000000023301247673406200153570ustar00rootroot00000000000000/* * debug.h - header file to be included for debugging purposes * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _DEBUG_H #define _DEBUG_H #include "lmmsconfig.h" // set whether debug-stuff (like messages on the console, asserts and other // additional range-checkings) should be compiled #ifdef LMMS_DEBUG #include #else #define assert(x) ((void)(x)) #endif #include #endif lmms-1.1.3/include/drumsynth.h000066400000000000000000000034041247673406200163310ustar00rootroot00000000000000/* * drumsynth.h - DrumSynth DS file renderer * * Copyright (c) 1998-2000 Paul Kellett (mda-vst.com) * Copyright (c) 2007 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _DRUMSYNTH_H__ #define _DRUMSYNTH_H__ #include #include "lmms_basics.h" class DrumSynth { public: DrumSynth() {}; int GetDSFileSamples(const char *dsfile, int16_t *&wave, int channels, sample_rate_t Fs); private: float LoudestEnv(void); int LongestEnv(void); void UpdateEnv(int e, long t); void GetEnv(int env, const char *sec, const char *key, const char *ini); float waveform(float ph, int form); int GetPrivateProfileString(const char *sec, const char *key, const char *def, char *buffer, int size, const char *file); int GetPrivateProfileInt(const char *sec, const char *key, int def, const char *file); float GetPrivateProfileFloat(const char *sec, const char *key, float def, const char *file); }; #endif lmms-1.1.3/include/embed.h000066400000000000000000000046561247673406200153620ustar00rootroot00000000000000/* * embed.h - misc. stuff for using embedded data (resources linked into binary) * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EMBED_H #define _EMBED_H #include #include #include "export.h" #include "lmms_basics.h" namespace embed { struct descriptor { int size; const unsigned char * data; const char * name; } ; QPixmap EXPORT getIconPixmap( const char * _name, int _w = -1, int _h = -1 ); QString EXPORT getText( const char * _name ); } #ifdef PLUGIN_NAME namespace PLUGIN_NAME { QPixmap getIconPixmap( const char * _name, int _w = -1, int _h = -1 ); //QString getText( const char * _name ); } #endif class PixmapLoader { public: PixmapLoader( const PixmapLoader * _ref ) : m_name( _ref != NULL ? _ref->m_name : QString::null ) { } PixmapLoader( const QString & _name = QString::null ) : m_name( _name ) { } virtual QPixmap pixmap() const { if( !m_name.isEmpty() ) { return( embed::getIconPixmap( m_name.toAscii().constData() ) ); } return( QPixmap() ); } virtual ~PixmapLoader() { } virtual QString pixmapName() const { return m_name; } protected: QString m_name; } ; #ifdef PLUGIN_NAME class PluginPixmapLoader : public PixmapLoader { public: PluginPixmapLoader( const QString & _name = QString::null ) : PixmapLoader( _name ) { } virtual QPixmap pixmap() const { if( !m_name.isEmpty() ) { return( PLUGIN_NAME::getIconPixmap( m_name.toAscii().constData() ) ); } return( QPixmap() ); } virtual QString pixmapName() const { return QString( STRINGIFY(PLUGIN_NAME) ) + "::" + m_name; } } ; #endif #endif lmms-1.1.3/include/endian_handling.h000066400000000000000000000026751247673406200174070ustar00rootroot00000000000000/* * endian_handling.h - handle endianess * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _ENDIAN_HANDLING_H #define _ENDIAN_HANDLING_H #include #include "lmms_basics.h" inline bool isLittleEndian() { return( QSysInfo::ByteOrder == QSysInfo::LittleEndian ); } inline int16_t swap16IfBE( int16_t i ) { return( isLittleEndian() ? i : ( ( i & 0xFF ) << 8) | ( ( i >> 8 ) & 0xFF ) ); } inline int32_t swap32IfBE( int32_t i ) { return( isLittleEndian() ? i : ( ( i & 0xff000000 ) >> 24 ) | ( ( i & 0x00ff0000 ) >> 8 ) | ( ( i & 0x0000ff00 ) << 8 ) | ( ( i & 0x000000ff ) << 24 ) ); } #endif lmms-1.1.3/include/engine.h000066400000000000000000000074431247673406200155500ustar00rootroot00000000000000/* * engine.h - engine-system of LMMS * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _ENGINE_H #define _ENGINE_H #include "lmmsconfig.h" #include #include "export.h" class AutomationEditor; class bbEditor; class bbTrackContainer; class DummyTrackContainer; class FxMixer; class FxMixerView; class ProjectJournal; class MainWindow; class Mixer; class PianoRoll; class projectNotes; class song; class SongEditor; class ladspa2LMMS; class ControllerRackView; class EXPORT engine { public: static void init( const bool _has_gui = true ); static void destroy(); static bool hasGUI() { return s_hasGUI; } static void setSuppressMessages( bool _on ) { s_suppressMessages = _on; } static bool suppressMessages() { return !s_hasGUI || s_suppressMessages; } // core static Mixer *mixer() { return s_mixer; } static FxMixer * fxMixer() { return s_fxMixer; } static song * getSong() { return s_song; } static bbTrackContainer * getBBTrackContainer() { return s_bbTrackContainer; } static ProjectJournal * projectJournal() { return s_projectJournal; } // GUI static MainWindow * mainWindow() { return s_mainWindow; } static FxMixerView * fxMixerView() { return s_fxMixerView; } static SongEditor* songEditor() { return s_songEditor; } static bbEditor * getBBEditor() { return s_bbEditor; } static PianoRoll* pianoRoll() { return s_pianoRoll; } static projectNotes * getProjectNotes() { return s_projectNotes; } static AutomationEditor * automationEditor() { return s_automationEditor; } static ladspa2LMMS * getLADSPAManager() { return s_ladspaManager; } static DummyTrackContainer * dummyTrackContainer() { return s_dummyTC; } static ControllerRackView * getControllerRackView() { return s_controllerRackView; } static float framesPerTick() { return s_framesPerTick; } static void updateFramesPerTick(); static const QMap & pluginFileHandling() { return s_pluginFileHandling; } private: // small helper function which sets the pointer to NULL before actually deleting // the object it refers to template static inline void deleteHelper( T * * ptr ) { T * tmp = *ptr; *ptr = NULL; delete tmp; } static bool s_hasGUI; static bool s_suppressMessages; static float s_framesPerTick; // core static Mixer *s_mixer; static FxMixer * s_fxMixer; static song * s_song; static bbTrackContainer * s_bbTrackContainer; static ProjectJournal * s_projectJournal; static DummyTrackContainer * s_dummyTC; static ControllerRackView * s_controllerRackView; // GUI static MainWindow * s_mainWindow; static FxMixerView * s_fxMixerView; static SongEditor* s_songEditor; static AutomationEditor * s_automationEditor; static bbEditor * s_bbEditor; static PianoRoll* s_pianoRoll; static projectNotes * s_projectNotes; static ladspa2LMMS * s_ladspaManager; static QMap s_pluginFileHandling; static void initPluginFileHandling(); } ; #endif lmms-1.1.3/include/export.h000066400000000000000000000023021247673406200156110ustar00rootroot00000000000000/* * export.h - macros for export-declarations * * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EXPORT_H #define _EXPORT_H #include "lmmsconfig.h" #ifdef LMMS_BUILD_WIN32 #ifdef PLUGIN_NAME #define EXPORT __declspec(dllimport) #define PLUGIN_EXPORT __declspec(dllexport) #else #define EXPORT __declspec(dllexport) #endif #else #define EXPORT #define PLUGIN_EXPORT #endif #endif lmms-1.1.3/include/export_project_dialog.h000066400000000000000000000040551247673406200206650ustar00rootroot00000000000000/* * export_project_dialog.h - declaration of class exportProjectDialog which is * responsible for exporting project * * Copyright (c) 2004-2012 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _EXPORT_PROJECT_DIALOG_H #define _EXPORT_PROJECT_DIALOG_H #include #include #include "ui_export_project.h" #include "ProjectRenderer.h" class exportProjectDialog : public QDialog, public Ui::ExportProjectDialog { Q_OBJECT public: exportProjectDialog( const QString & _file_name, QWidget * _parent, bool multi_export ); virtual ~exportProjectDialog(); protected: virtual void reject( void ); virtual void closeEvent( QCloseEvent * _ce ); private slots: void startBtnClicked( void ); void updateTitleBar( int ); void render(ProjectRenderer* renderer); void multiRender(); ProjectRenderer* prepRender(); void popRender(); void accept(); private: QString m_fileName; QString m_dirName; QString m_fileExtension; typedef QVector RenderVector; RenderVector m_renderers; bool m_multiExport; typedef QVector TrackVector; TrackVector m_unmuted; TrackVector m_unmutedBB; ProjectRenderer::ExportFileFormats m_ft; TrackVector m_tracksToRender; ProjectRenderer* m_activeRenderer; } ; #endif lmms-1.1.3/include/fade_button.h000066400000000000000000000027401247673406200165700ustar00rootroot00000000000000/* * fade_button.h - declaration of class fadeButton * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _FADE_BUTTON_H #define _FADE_BUTTON_H #include #include #include class fadeButton : public QAbstractButton { Q_OBJECT public: fadeButton( const QColor & _normal_color, const QColor & _activated_color, QWidget * _parent ); virtual ~fadeButton(); public slots: void activate(); protected: virtual void customEvent( QEvent * ); virtual void paintEvent( QPaintEvent * _pe ); private: QTime m_stateTimer; QColor m_normalColor; QColor m_activatedColor; void signalUpdate(); } ; #endif lmms-1.1.3/include/fader.h000066400000000000000000000072511247673406200153610ustar00rootroot00000000000000/* * fader.h - fader-widget used in FX-mixer - partly taken from Hydrogen * * Copyright (c) 2008-2012 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef FADER_H #define FADER_H #include #include #include #include "AutomatableModelView.h" class textFloat; class fader : public QWidget, public FloatModelView { Q_OBJECT public: Q_PROPERTY( QColor peakGreen READ peakGreen WRITE setPeakGreen ) Q_PROPERTY( QColor peakRed READ peakRed WRITE setPeakRed ) fader( FloatModel * _model, const QString & _name, QWidget * _parent ); virtual ~fader(); void setPeak_L( float fPeak ); float getPeak_L() { return m_fPeakValue_L; } void setPeak_R( float fPeak ); float getPeak_R() { return m_fPeakValue_R; } QColor peakGreen() const; QColor peakRed() const; void setPeakGreen( const QColor & c ); void setPeakRed( const QColor & c ); private: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void mousePressEvent( QMouseEvent *ev ); virtual void mouseDoubleClickEvent( QMouseEvent* mouseEvent ); virtual void mouseMoveEvent( QMouseEvent *ev ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void wheelEvent( QWheelEvent *ev ); virtual void paintEvent( QPaintEvent *ev ); int knobPosY() const { float fRange = m_model->maxValue() - m_model->minValue(); float realVal = m_model->value() - m_model->minValue(); return height() - ( ( height() - ( *s_knob ).height() ) * ( realVal / fRange ) ); } FloatModel * m_model; void setPeak( float fPeak, float &targetPeak, float &persistentPeak, QTime &lastPeakTime ); int calculateDisplayPeak( float fPeak ); float m_fPeakValue_L; float m_fPeakValue_R; float m_persistentPeak_L; float m_persistentPeak_R; const float m_fMinPeak; const float m_fMaxPeak; QTime m_lastPeakTime_L; QTime m_lastPeakTime_R; static QPixmap * s_back; static QPixmap * s_leds; static QPixmap * s_knob; int m_moveStartPoint; float m_startValue; static textFloat * s_textFloat; void updateTextFloat(); QColor m_peakGreen; QColor m_peakRed; } ; #endif lmms-1.1.3/include/fft_helpers.h000066400000000000000000000047161247673406200166040ustar00rootroot00000000000000/* * fft_helpers.h - some functions around FFT analysis * * Copyright (c) 2008-2012 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _FFT_HELPERS_H #define _FFT_HELPERS_H #include "lmmsconfig.h" #include "export.h" #include const int FFT_BUFFER_SIZE = 2048; enum WINDOWS { KAISER=1, RECTANGLE, HANNING, HAMMING }; /* returns biggest value from abs_spectrum[spec_size] array * * returns -1 on error */ float EXPORT maximum( float * _abs_spectrum, unsigned int _spec_size ); /* apply hanning or hamming window to channel * * returns -1 on error */ int EXPORT hanming( float * _timebuffer, int _length, WINDOWS _type ); /* compute absolute values of complex_buffer, save to absspec_buffer * take care that - compl_len is not bigger than complex_buffer! * - absspec buffer is big enough! * * returns 0 on success, else -1 */ int EXPORT absspec( fftwf_complex * _complex_buffer, float * _absspec_buffer, int _compl_length ); /* build fewer subbands from many absolute spectrum values * take care that - compressedbands[] array num_new elements long * - num_old > num_new * * returns 0 on success, else -1 */ int EXPORT compressbands( float * _absspec_buffer, float * _compressedband, int _num_old, int _num_new, int _bottom, int _top ); int EXPORT calc13octaveband31( float * _absspec_buffer, float * _subbands, int _num_spec, float _max_frequency ); /* compute power of finite time sequence * take care num_values is length of timesignal[] * * returns power on success, else -1 */ float EXPORT signalpower(float *timesignal, int num_values); #endif lmms-1.1.3/include/fifo_buffer.h000066400000000000000000000034771247673406200165620ustar00rootroot00000000000000/* * fifo_buffer.h - FIFO fixed-size buffer * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _FIFO_BUFFER_H #define _FIFO_BUFFER_H #include template class fifoBuffer { public: fifoBuffer( int _size ) : m_reader_sem( _size ), m_writer_sem( _size ), m_reader_index( 0 ), m_writer_index( 0 ), m_size( _size ) { m_buffer = new T[_size]; m_reader_sem.acquire( _size ); } ~fifoBuffer() { delete[] m_buffer; m_reader_sem.release( m_size ); } void write( T _element ) { m_writer_sem.acquire(); m_buffer[m_writer_index++] = _element; m_writer_index %= m_size; m_reader_sem.release(); } T read() { m_reader_sem.acquire(); T element = m_buffer[m_reader_index++]; m_reader_index %= m_size; m_writer_sem.release(); return( element ); } bool available() { return( m_reader_sem.available() ); } private: QSemaphore m_reader_sem; QSemaphore m_writer_sem; int m_reader_index; int m_writer_index; int m_size; T * m_buffer; } ; #endif lmms-1.1.3/include/graph.h000066400000000000000000000071641247673406200154040ustar00rootroot00000000000000/* * graph.h - a QT widget for displaying and manipulating waveforms * * Copyright (c) 2006-2007 Andreas Brandmaier * 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef GRAPH_H #define GRAPH_H #include #include #include #include "Model.h" #include "ModelView.h" #include "lmms_basics.h" class graphModel; class EXPORT graph : public QWidget, public ModelView { Q_OBJECT public: enum graphStyle { NearestStyle, LinearStyle, LinearNonCyclicStyle, BarStyle, NumGraphStyles }; graph( QWidget * _parent, graphStyle _style = graph::LinearStyle, int _width = 132, int _height = 104 ); virtual ~graph(); void setForeground( const QPixmap & _pixmap ); void setGraphColor( const QColor ); inline graphModel * model() { return castModel(); } inline graphStyle getGraphStyle() { return m_graphStyle; } inline void setGraphStyle( graphStyle _s ) { m_graphStyle = _s; update(); } protected: virtual void paintEvent( QPaintEvent * _pe ); virtual void dropEvent( QDropEvent * _de ); virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); protected slots: void updateGraph( int _startPos, int _endPos ); void updateGraph(); private: virtual void modelChanged(); void changeSampleAt( int _x, int _y ); void drawLineAt( int _x, int _y, int _lastx ); QPixmap m_foreground; QColor m_graphColor; graphStyle m_graphStyle; bool m_mouseDown; int m_lastCursorX; } ; class EXPORT graphModel : public Model { Q_OBJECT public: graphModel( float _min, float _max, int _size, :: Model * _parent, bool _default_constructed = false, float _step = 0.0 ); virtual ~graphModel(); // TODO: saveSettings, loadSettings? inline float minValue() const { return( m_minValue ); } inline float maxValue() const { return( m_maxValue ); } inline int length() const { return( m_samples.count() ); } inline const float * samples() const { return( m_samples.data() ); } public slots: void setRange( float _min, float _max ); void setLength( int _size ); void setSampleAt( int x, float val ); void setSamples( const float * _value ); void setWaveToSine(); void setWaveToTriangle(); void setWaveToSaw(); void setWaveToSquare(); void setWaveToNoise(); QString setWaveToUser( ); void smooth(); void smoothNonCyclic(); void normalize(); void invert(); void shiftPhase( int _deg ); signals: void lengthChanged(); void samplesChanged( int startPos, int endPos ); void rangeChanged(); private: void drawSampleAt( int x, float val ); QVector m_samples; float m_minValue; float m_maxValue; float m_step; friend class graph; }; #endif lmms-1.1.3/include/group_box.h000066400000000000000000000031421247673406200162770ustar00rootroot00000000000000/* * group_box.h - LMMS-groupbox * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _GROUP_BOX_H #define _GROUP_BOX_H #include #include "AutomatableModelView.h" #include "pixmap_button.h" class QPixmap; class groupBox : public QWidget, public BoolModelView { Q_OBJECT public: groupBox( const QString & _caption, QWidget * _parent = NULL ); virtual ~groupBox(); virtual void modelChanged(); pixmapButton * ledButton() { return m_led; } int titleBarHeight() const { return m_titleBarHeight; } protected: virtual void mousePressEvent( QMouseEvent * _me ); virtual void resizeEvent( QResizeEvent * _re ); private: void updatePixmap(); pixmapButton * m_led; QString m_caption; const int m_titleBarHeight; } ; typedef BoolModel groupBoxModel; #endif lmms-1.1.3/include/gui_templates.h000066400000000000000000000034301247673406200171350ustar00rootroot00000000000000/* * gui_templates.h - GUI-specific templates * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _GUI_TEMPLATES_H #define _GUI_TEMPLATES_H #include "lmmsconfig.h" #include #include #include // return DPI-independent font-size - font with returned font-size has always // the same size in pixels template inline QFont pointSize( QFont _f ) { static const float DPI = 96; #ifdef LMMS_BUILD_WIN32 _f.setPointSizeF( ((float) SIZE+0.5f) * DPI / QApplication::desktop()->logicalDpiY() ); #else _f.setPointSizeF( (float) SIZE * DPI / QApplication::desktop()->logicalDpiY() ); #endif return( _f ); } inline QFont pointSizeF( QFont _f, float SIZE ) { static const float DPI = 96; #ifdef LMMS_BUILD_WIN32 _f.setPointSizeF( (SIZE+0.5f) * DPI / QApplication::desktop()->logicalDpiY() ); #else _f.setPointSizeF( SIZE * DPI / QApplication::desktop()->logicalDpiY() ); #endif return( _f ); } #endif lmms-1.1.3/include/interpolation.h000066400000000000000000000072131247673406200171650ustar00rootroot00000000000000/* * interpolation.h - fast implementations of several interpolation-algorithms * * Copyright (c) 2004-2005 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef INTERPOLATION_H #define INTERPOLATION_H #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include #include "lmms_constants.h" #include "lmms_math.h" inline float hermiteInterpolate( float x0, float x1, float x2, float x3, float frac_pos ) { const float frsq = frac_pos*frac_pos; const float frsq2 = 2*frsq; return( ( (x2-x0) *0.5f ) * ( frac_pos * (frsq+1) -frsq2 ) + ( frsq2*frac_pos - 3*frsq ) * ( x1-x2 ) + frsq2 * (frac_pos-1) * ( ( x3-x1 ) * 0.25f ) + x1 ); /* const float frsq = frac_pos*frac_pos; //const float frsq2 = 2*frsq; frac_pos *= 0.5; const float frcu = frsq*frac_pos; return ( (frcu - frsq + frac_pos) * ((x2 - x0)) + (4*frcu - 3*frsq) * (x1 - x2) //frsq*(2*frac_pos-3) * (x1 - x2) + (frcu - 0.5*frsq)*((x3 - x1)) + x1 ); */ } inline float cubicInterpolate( float v0, float v1, float v2, float v3, float x ) { float frsq = x*x; float frcu = frsq*v0; float t1 = v3 + 3*v1; return( v1 + 0.5f * frcu + x * ( v2 - frcu * ( 1.0f/6.0f ) - t1 * ( 1.0f/6.0f ) - v0 / 3.0f ) + frsq * x * ( t1 * ( 1.0f/6.0f ) - 0.5f * v2 ) + frsq * ( 0.5f * v2 - v1 ) ); } inline float cosinusInterpolate( float v0, float v1, float x ) { const float f = ( 1.0f - cosf( x * F_PI ) ) * 0.5f; return fastFmaf( f, v1-v0, v0 ); } inline float linearInterpolate( float v0, float v1, float x ) { return fastFmaf( x, v1-v0, v0 ); } inline float optimalInterpolate( float v0, float v1, float x ) { const float z = x - 0.5f; const float even = v1 + v0; const float odd = v1 - v0; const float c0 = even * 0.50037842517188658; const float c1 = odd * 1.00621089801788210; const float c2 = even * -0.004541102062639801; const float c3 = odd * -1.57015627178718420; return ( ( c3*z + c2 ) * z + c1 ) * z + c0; } inline float optimal4pInterpolate( float v0, float v1, float v2, float v3, float x ) { const float z = x - 0.5f; const float even1 = v2 + v1; const float odd1 = v2 - v1; const float even2 = v3 + v0; const float odd2 = v3 - v0; const float c0 = even1 * 0.45868970870461956 + even2 * 0.04131401926395584; const float c1 = odd1 * 0.48068024766578432 + odd2 * 0.17577925564495955; const float c2 = even1 * -0.246185007019907091 + even2 * 0.24614027139700284; const float c3 = odd1 * -0.36030925263849456 + odd2 * 0.10174985775982505; return ( ( c3*z + c2 ) * z + c1 ) * z + c0; } inline float lagrangeInterpolate( float v0, float v1, float v2, float v3, float x ) { const float c0 = v1; const float c1 = v2 - v0 * ( 1.0f / 3.0f ) - v1 * 0.5f - v3 * ( 1.0f / 6.0f ); const float c2 = 0.5f * (v0 + v2) - v1; const float c3 = ( 1.0f/6.0f ) * ( v3 - v0 ) + 0.5f * ( v1 - v2 ); return ( ( c3*x + c2 ) * x + c1 ) * x + c0; } #endif lmms-1.1.3/include/knob.h000066400000000000000000000122331247673406200152250ustar00rootroot00000000000000/* * knob.h - powerful knob-widget * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef KNOB_H #define KNOB_H #include #include #include "AutomatableModelView.h" #include "templates.h" class QPixmap; class textFloat; enum knobTypes { knobDark_28, knobBright_26, knobSmall_17, knobGreen_17, knobVintage_32, knobStyled } ; class EXPORT knob : public QWidget, public FloatModelView { Q_OBJECT Q_ENUMS( knobTypes ) Q_PROPERTY(float innerRadius READ innerRadius WRITE setInnerRadius) Q_PROPERTY(float outerRadius READ outerRadius WRITE setOuterRadius) Q_PROPERTY(float centerPointX READ centerPointX WRITE setCenterPointX) Q_PROPERTY(float centerPointY READ centerPointY WRITE setCenterPointY) Q_PROPERTY(float lineWidth READ lineWidth WRITE setLineWidth) // Unfortunately, the gradient syntax doesn't create our gradient // correctly so we need to do this: Q_PROPERTY(QColor outerColor READ outerColor WRITE setOuterColor) Q_PROPERTY(QColor lineColor READ lineColor WRITE setlineColor) Q_PROPERTY(QColor arcColor READ arcColor WRITE setarcColor) mapPropertyFromModel(bool,isVolumeKnob,setVolumeKnob,m_volumeKnob); mapPropertyFromModel(float,volumeRatio,setVolumeRatio,m_volumeRatio); Q_PROPERTY(knobTypes knobNum READ knobNum WRITE setknobNum) void initUi( const QString & _name ); //!< to be called by ctors void onKnobNumUpdated(); //!< to be called when you updated @a m_knobNum public: knob( knobTypes _knob_num, QWidget * _parent = NULL, const QString & _name = QString() ); knob( QWidget * _parent = NULL, const QString & _name = QString() ); //!< default ctor virtual ~knob(); // TODO: remove inline void setHintText( const QString & _txt_before, const QString & _txt_after ) { setDescription( _txt_before ); setUnit( _txt_after ); } void setLabel( const QString & _txt ); void setTotalAngle( float _angle ); // Begin styled knob accessors float innerRadius() const; void setInnerRadius( float _r ); float outerRadius() const; void setOuterRadius( float _r ); knobTypes knobNum() const; void setknobNum( knobTypes _k ); QPointF centerPoint() const; float centerPointX() const; void setCenterPointX( float _c ); float centerPointY() const; void setCenterPointY( float _c ); float lineWidth() const; void setLineWidth( float _w ); QColor outerColor() const; void setOuterColor( const QColor & _c ); QColor lineColor() const; void setlineColor( const QColor & _c ); QColor arcColor() const; void setarcColor( const QColor & _c ); signals: void sliderPressed(); void sliderReleased(); void sliderMoved( float value ); protected: virtual void contextMenuEvent( QContextMenuEvent * _me ); virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void focusOutEvent( QFocusEvent * _fe ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseDoubleClickEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _me ); virtual void wheelEvent( QWheelEvent * _me ); virtual float getValue( const QPoint & _p ); private slots: virtual void enterValue(); void displayHelp(); void friendlyUpdate(); void toggleScale(); private: QString displayValue() const; virtual void doConnections(); QLineF calculateLine( const QPointF & _mid, float _radius, float _innerRadius = 1) const; void drawKnob( QPainter * _p ); void setPosition( const QPoint & _p ); bool updateAngle(); int angleFromValue( float value, float minValue, float maxValue, float totalAngle ) const { return static_cast( ( value - 0.5 * ( minValue + maxValue ) ) / ( maxValue - minValue ) * m_totalAngle ) % 360; } inline float pageSize() const { return ( model()->maxValue() - model()->minValue() ) / 100.0f; } static textFloat * s_textFloat; QString m_label; QPixmap * m_knobPixmap; BoolModel m_volumeKnob; FloatModel m_volumeRatio; QPoint m_mouseOffset; QPoint m_origMousePos; float m_leftOver; bool m_buttonPressed; float m_totalAngle; int m_angle; QImage m_cache; // Styled knob stuff, could break out QPointF m_centerPoint; float m_innerRadius; float m_outerRadius; float m_lineWidth; QColor m_outerColor; QColor m_lineColor; //!< unused yet QColor m_arcColor; //!< unused yet knobTypes m_knobNum; } ; #endif lmms-1.1.3/include/ladspa.h000066400000000000000000000657111247673406200155510ustar00rootroot00000000000000/* ladspa.h Linux Audio Developer's Simple Plugin API Version 1.1[LGPL]. Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef LADSPA_INCLUDED #define LADSPA_INCLUDED #define LADSPA_VERSION "1.1" #define LADSPA_VERSION_MAJOR 1 #define LADSPA_VERSION_MINOR 1 #ifdef __cplusplus extern "C" { #endif /*****************************************************************************/ /* Overview: There is a large number of synthesis packages in use or development on the Linux platform at this time. This API (`The Linux Audio Developer's Simple Plugin API') attempts to give programmers the ability to write simple `plugin' audio processors in C/C++ and link them dynamically (`plug') into a range of these packages (`hosts'). It should be possible for any host and any plugin to communicate completely through this interface. This API is deliberately short and simple. To achieve compatibility with a range of promising Linux sound synthesis packages it attempts to find the `greatest common divisor' in their logical behaviour. Having said this, certain limiting decisions are implicit, notably the use of a fixed type (LADSPA_Data) for all data transfer and absence of a parameterised `initialisation' phase. See below for the LADSPA_Data typedef. Plugins are expected to distinguish between control and audio data. Plugins have `ports' that are inputs or outputs for audio or control data and each plugin is `run' for a `block' corresponding to a short time interval measured in samples. Audio data is communicated using arrays of LADSPA_Data, allowing a block of audio to be processed by the plugin in a single pass. Control data is communicated using single LADSPA_Data values. Control data has a single value at the start of a call to the `run()' or `run_adding()' function, and may be considered to remain this value for its duration. The plugin may assume that all its input and output ports have been connected to the relevant data location (see the `connect_port()' function below) before it is asked to run. Plugins will reside in shared object files suitable for dynamic linking by dlopen() and family. The file will provide a number of `plugin types' that can be used to instantiate actual plugins (sometimes known as `plugin instances') that can be connected together to perform tasks. This API contains very limited error-handling. */ /*****************************************************************************/ /* Fundamental data type passed in and out of plugin. This data type is used to communicate audio samples and control values. It is assumed that the plugin will work sensibly given any numeric input value although it may have a preferred range (see hints below). For audio it is generally assumed that 1.0f is the `0dB' reference amplitude and is a `normal' signal level. */ typedef float LADSPA_Data; /*****************************************************************************/ /* Special Plugin Properties: Optional features of the plugin type are encapsulated in the LADSPA_Properties type. This is assembled by ORing individual properties together. */ typedef int LADSPA_Properties; /* Property LADSPA_PROPERTY_REALTIME indicates that the plugin has a real-time dependency (e.g. listens to a MIDI device) and so its output must not be cached or subject to significant latency. */ #define LADSPA_PROPERTY_REALTIME 0x1 /* Property LADSPA_PROPERTY_INPLACE_BROKEN indicates that the plugin may cease to work correctly if the host elects to use the same data location for both input and output (see connect_port()). This should be avoided as enabling this flag makes it impossible for hosts to use the plugin to process audio `in-place.' */ #define LADSPA_PROPERTY_INPLACE_BROKEN 0x2 /* Property LADSPA_PROPERTY_HARD_RT_CAPABLE indicates that the plugin is capable of running not only in a conventional host but also in a `hard real-time' environment. To qualify for this the plugin must satisfy all of the following: (1) The plugin must not use malloc(), free() or other heap memory management within its run() or run_adding() functions. All new memory used in run() must be managed via the stack. These restrictions only apply to the run() function. (2) The plugin will not attempt to make use of any library functions with the exceptions of functions in the ANSI standard C and C maths libraries, which the host is expected to provide. (3) The plugin will not access files, devices, pipes, sockets, IPC or any other mechanism that might result in process or thread blocking. (4) The plugin will take an amount of time to execute a run() or run_adding() call approximately of form (A+B*SampleCount) where A and B depend on the machine and host in use. This amount of time may not depend on input signals or plugin state. The host is left the responsibility to perform timings to estimate upper bounds for A and B. */ #define LADSPA_PROPERTY_HARD_RT_CAPABLE 0x4 #define LADSPA_IS_REALTIME(x) ((x) & LADSPA_PROPERTY_REALTIME) #define LADSPA_IS_INPLACE_BROKEN(x) ((x) & LADSPA_PROPERTY_INPLACE_BROKEN) #define LADSPA_IS_HARD_RT_CAPABLE(x) ((x) & LADSPA_PROPERTY_HARD_RT_CAPABLE) /*****************************************************************************/ /* Plugin Ports: Plugins have `ports' that are inputs or outputs for audio or data. Ports can communicate arrays of LADSPA_Data (for audio inputs/outputs) or single LADSPA_Data values (for control input/outputs). This information is encapsulated in the LADSPA_PortDescriptor type which is assembled by ORing individual properties together. Note that a port must be an input or an output port but not both and that a port must be a control or audio port but not both. */ typedef int LADSPA_PortDescriptor; /* Property LADSPA_PORT_INPUT indicates that the port is an input. */ #define LADSPA_PORT_INPUT 0x1 /* Property LADSPA_PORT_OUTPUT indicates that the port is an output. */ #define LADSPA_PORT_OUTPUT 0x2 /* Property LADSPA_PORT_CONTROL indicates that the port is a control port. */ #define LADSPA_PORT_CONTROL 0x4 /* Property LADSPA_PORT_AUDIO indicates that the port is a audio port. */ #define LADSPA_PORT_AUDIO 0x8 #define LADSPA_IS_PORT_INPUT(x) ((x) & LADSPA_PORT_INPUT) #define LADSPA_IS_PORT_OUTPUT(x) ((x) & LADSPA_PORT_OUTPUT) #define LADSPA_IS_PORT_CONTROL(x) ((x) & LADSPA_PORT_CONTROL) #define LADSPA_IS_PORT_AUDIO(x) ((x) & LADSPA_PORT_AUDIO) /*****************************************************************************/ /* Plugin Port Range Hints: The host may wish to provide a representation of data entering or leaving a plugin (e.g. to generate a GUI automatically). To make this more meaningful, the plugin should provide `hints' to the host describing the usual values taken by the data. Note that these are only hints. The host may ignore them and the plugin must not assume that data supplied to it is meaningful. If the plugin receives invalid input data it is expected to continue to run without failure and, where possible, produce a sensible output (e.g. a high-pass filter given a negative cutoff frequency might switch to an all-pass mode). Hints are meaningful for all input and output ports but hints for input control ports are expected to be particularly useful. More hint information is encapsulated in the LADSPA_PortRangeHintDescriptor type which is assembled by ORing individual hint types together. Hints may require further LowerBound and UpperBound information. All the hint information for a particular port is aggregated in the LADSPA_PortRangeHint structure. */ typedef int LADSPA_PortRangeHintDescriptor; /* Hint LADSPA_HINT_BOUNDED_BELOW indicates that the LowerBound field of the LADSPA_PortRangeHint should be considered meaningful. The value in this field should be considered the (inclusive) lower bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also specified then the value of LowerBound should be multiplied by the sample rate. */ #define LADSPA_HINT_BOUNDED_BELOW 0x1 /* Hint LADSPA_HINT_BOUNDED_ABOVE indicates that the UpperBound field of the LADSPA_PortRangeHint should be considered meaningful. The value in this field should be considered the (inclusive) upper bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also specified then the value of UpperBound should be multiplied by the sample rate. */ #define LADSPA_HINT_BOUNDED_ABOVE 0x2 /* Hint LADSPA_HINT_TOGGLED indicates that the data item should be considered a Boolean toggle. Data less than or equal to zero should be considered `off' or `false,' and data above zero should be considered `on' or `true.' LADSPA_HINT_TOGGLED may not be used in conjunction with any other hint except LADSPA_HINT_DEFAULT_0 or LADSPA_HINT_DEFAULT_1. */ #define LADSPA_HINT_TOGGLED 0x4 /* Hint LADSPA_HINT_SAMPLE_RATE indicates that any bounds specified should be interpreted as multiples of the sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency (half the sample rate) could be requested by this hint in conjunction with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds at all must support this hint to retain meaning. */ #define LADSPA_HINT_SAMPLE_RATE 0x8 /* Hint LADSPA_HINT_LOGARITHMIC indicates that it is likely that the user will find it more intuitive to view values using a logarithmic scale. This is particularly useful for frequencies and gains. */ #define LADSPA_HINT_LOGARITHMIC 0x10 /* Hint LADSPA_HINT_INTEGER indicates that a user interface would probably wish to provide a stepped control taking only integer values. Any bounds set should be slightly wider than the actual integer range required to avoid floating point rounding errors. For instance, the integer set {0,1,2,3} might be described as [-0.1, 3.1]. */ #define LADSPA_HINT_INTEGER 0x20 /* The various LADSPA_HINT_HAS_DEFAULT_* hints indicate a `normal' value for the port that is sensible as a default. For instance, this value is suitable for use as an initial value in a user interface or as a value the host might assign to a control port when the user has not provided one. Defaults are encoded using a mask so only one default may be specified for a port. Some of the hints make use of lower and upper bounds, in which case the relevant bound or bounds must be available and LADSPA_HINT_SAMPLE_RATE must be applied as usual. The resulting default must be rounded if LADSPA_HINT_INTEGER is present. Default values were introduced in LADSPA v1.1. */ #define LADSPA_HINT_DEFAULT_MASK 0x3C0 /* This default values indicates that no default is provided. */ #define LADSPA_HINT_DEFAULT_NONE 0x0 /* This default hint indicates that the suggested lower bound for the port should be used. */ #define LADSPA_HINT_DEFAULT_MINIMUM 0x40 /* This default hint indicates that a low value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.75 + log(upper) * 0.25). Otherwise, this should be (lower * 0.75 + upper * 0.25). */ #define LADSPA_HINT_DEFAULT_LOW 0x80 /* This default hint indicates that a middle value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.5 + log(upper) * 0.5). Otherwise, this should be (lower * 0.5 + upper * 0.5). */ #define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 /* This default hint indicates that a high value between the suggested lower and upper bounds should be chosen. For ports with LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.25 + log(upper) * 0.75). Otherwise, this should be (lower * 0.25 + upper * 0.75). */ #define LADSPA_HINT_DEFAULT_HIGH 0x100 /* This default hint indicates that the suggested upper bound for the port should be used. */ #define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 /* This default hint indicates that the number 0 should be used. Note that this default may be used in conjunction with LADSPA_HINT_TOGGLED. */ #define LADSPA_HINT_DEFAULT_0 0x200 /* This default hint indicates that the number 1 should be used. Note that this default may be used in conjunction with LADSPA_HINT_TOGGLED. */ #define LADSPA_HINT_DEFAULT_1 0x240 /* This default hint indicates that the number 100 should be used. */ #define LADSPA_HINT_DEFAULT_100 0x280 /* This default hint indicates that the Hz frequency of `concert A' should be used. This will be 440 unless the host uses an unusual tuning convention, in which case it may be within a few Hz. */ #define LADSPA_HINT_DEFAULT_440 0x2C0 #define LADSPA_IS_HINT_BOUNDED_BELOW(x) ((x) & LADSPA_HINT_BOUNDED_BELOW) #define LADSPA_IS_HINT_BOUNDED_ABOVE(x) ((x) & LADSPA_HINT_BOUNDED_ABOVE) #define LADSPA_IS_HINT_TOGGLED(x) ((x) & LADSPA_HINT_TOGGLED) #define LADSPA_IS_HINT_SAMPLE_RATE(x) ((x) & LADSPA_HINT_SAMPLE_RATE) #define LADSPA_IS_HINT_LOGARITHMIC(x) ((x) & LADSPA_HINT_LOGARITHMIC) #define LADSPA_IS_HINT_INTEGER(x) ((x) & LADSPA_HINT_INTEGER) #define LADSPA_IS_HINT_HAS_DEFAULT(x) ((x) & LADSPA_HINT_DEFAULT_MASK) #define LADSPA_IS_HINT_DEFAULT_MINIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MINIMUM) #define LADSPA_IS_HINT_DEFAULT_LOW(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_LOW) #define LADSPA_IS_HINT_DEFAULT_MIDDLE(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MIDDLE) #define LADSPA_IS_HINT_DEFAULT_HIGH(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_HIGH) #define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_MAXIMUM) #define LADSPA_IS_HINT_DEFAULT_0(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_0) #define LADSPA_IS_HINT_DEFAULT_1(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_1) #define LADSPA_IS_HINT_DEFAULT_100(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_100) #define LADSPA_IS_HINT_DEFAULT_440(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ == LADSPA_HINT_DEFAULT_440) typedef struct _LADSPA_PortRangeHint { /* Hints about the port. */ LADSPA_PortRangeHintDescriptor HintDescriptor; /* Meaningful when hint LADSPA_HINT_BOUNDED_BELOW is active. When LADSPA_HINT_SAMPLE_RATE is also active then this value should be multiplied by the relevant sample rate. */ LADSPA_Data LowerBound; /* Meaningful when hint LADSPA_HINT_BOUNDED_ABOVE is active. When LADSPA_HINT_SAMPLE_RATE is also active then this value should be multiplied by the relevant sample rate. */ LADSPA_Data UpperBound; } LADSPA_PortRangeHint; /*****************************************************************************/ /* Plugin Handles: This plugin handle indicates a particular instance of the plugin concerned. It is valid to compare this to NULL (0 for C++) but otherwise the host should not attempt to interpret it. The plugin may use it to reference internal instance data. */ typedef void * LADSPA_Handle; /*****************************************************************************/ /* Descriptor for a Type of Plugin: This structure is used to describe a plugin type. It provides a number of functions to examine the type, instantiate it, link it to buffers and workspaces and to run it. */ typedef struct _LADSPA_Descriptor { /* This numeric identifier indicates the plugin type uniquely. Plugin programmers may reserve ranges of IDs from a central body to avoid clashes. Hosts may assume that IDs are below 0x1000000. */ unsigned long UniqueID; /* This identifier can be used as a unique, case-sensitive identifier for the plugin type within the plugin file. Plugin types should be identified by file and label rather than by index or plugin name, which may be changed in new plugin versions. Labels must not contain white-space characters. */ const char * Label; /* This indicates a number of properties of the plugin. */ LADSPA_Properties Properties; /* This member points to the null-terminated name of the plugin (e.g. "Sine Oscillator"). */ const char * Name; /* This member points to the null-terminated string indicating the maker of the plugin. This can be an empty string but not NULL. */ const char * Maker; /* This member points to the null-terminated string indicating any copyright applying to the plugin. If no Copyright applies the string "None" should be used. */ const char * Copyright; /* This indicates the number of ports (input AND output) present on the plugin. */ unsigned long PortCount; /* This member indicates an array of port descriptors. Valid indices vary from 0 to PortCount-1. */ const LADSPA_PortDescriptor * PortDescriptors; /* This member indicates an array of null-terminated strings describing ports (e.g. "Frequency (Hz)"). Valid indices vary from 0 to PortCount-1. */ const char * const * PortNames; /* This member indicates an array of range hints for each port (see above). Valid indices vary from 0 to PortCount-1. */ const LADSPA_PortRangeHint * PortRangeHints; /* This may be used by the plugin developer to pass any custom implementation data into an instantiate call. It must not be used or interpreted by the host. It is expected that most plugin writers will not use this facility as LADSPA_Handle should be used to hold instance data. */ void * ImplementationData; /* This member is a function pointer that instantiates a plugin. A handle is returned indicating the new plugin instance. The instantiation function accepts a sample rate as a parameter. The plugin descriptor from which this instantiate function was found must also be passed. This function must return NULL if instantiation fails. Note that instance initialisation should generally occur in activate() rather than here. */ LADSPA_Handle (*instantiate)(const struct _LADSPA_Descriptor * Descriptor, unsigned long SampleRate); /* This member is a function pointer that connects a port on an instantiated plugin to a memory location at which a block of data for the port will be read/written. The data location is expected to be an array of LADSPA_Data for audio ports or a single LADSPA_Data value for control ports. Memory issues will be managed by the host. The plugin must read/write the data at these locations every time run() or run_adding() is called and the data present at the time of this connection call should not be considered meaningful. connect_port() may be called more than once for a plugin instance to allow the host to change the buffers that the plugin is reading or writing. These calls may be made before or after activate() or deactivate() calls. connect_port() must be called at least once for each port before run() or run_adding() is called. When working with blocks of LADSPA_Data the plugin should pay careful attention to the block size passed to the run function as the block allocated may only just be large enough to contain the block of samples. Plugin writers should be aware that the host may elect to use the same buffer for more than one port and even use the same buffer for both input and output (see LADSPA_PROPERTY_INPLACE_BROKEN). However, overlapped buffers or use of a single buffer for both audio and control data may result in unexpected behaviour. */ void (*connect_port)(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation); /* This member is a function pointer that initialises a plugin instance and activates it for use. This is separated from instantiate() to aid real-time support and so that hosts can reinitialise a plugin instance by calling deactivate() and then activate(). In this case the plugin instance must reset all state information dependent on the history of the plugin instance except for any data locations provided by connect_port() and any gain set by set_run_adding_gain(). If there is nothing for activate() to do then the plugin writer may provide a NULL rather than an empty function. When present, hosts must call this function once before run() (or run_adding()) is called for the first time. This call should be made as close to the run() call as possible and indicates to real-time plugins that they are now live. Plugins should not rely on a prompt call to run() after activate(). activate() may not be called again unless deactivate() is called first. Note that connect_port() may be called before or after a call to activate(). */ void (*activate)(LADSPA_Handle Instance); /* This method is a function pointer that runs an instance of a plugin for a block. Two parameters are required: the first is a handle to the particular instance to be run and the second indicates the block size (in samples) for which the plugin instance may run. Note that if an activate() function exists then it must be called before run() or run_adding(). If deactivate() is called for a plugin instance then the plugin instance may not be reused until activate() has been called again. If the plugin has the property LADSPA_PROPERTY_HARD_RT_CAPABLE then there are various things that the plugin should not do within the run() or run_adding() functions (see above). */ void (*run)(LADSPA_Handle Instance, unsigned long SampleCount); /* This method is a function pointer that runs an instance of a plugin for a block. This has identical behaviour to run() except in the way data is output from the plugin. When run() is used, values are written directly to the memory areas associated with the output ports. However when run_adding() is called, values must be added to the values already present in the memory areas. Furthermore, output values written must be scaled by the current gain set by set_run_adding_gain() (see below) before addition. run_adding() is optional. When it is not provided by a plugin, this function pointer must be set to NULL. When it is provided, the function set_run_adding_gain() must be provided also. */ void (*run_adding)(LADSPA_Handle Instance, unsigned long SampleCount); /* This method is a function pointer that sets the output gain for use when run_adding() is called (see above). If this function is never called the gain is assumed to default to 1. Gain information should be retained when activate() or deactivate() are called. This function should be provided by the plugin if and only if the run_adding() function is provided. When it is absent this function pointer must be set to NULL. */ void (*set_run_adding_gain)(LADSPA_Handle Instance, LADSPA_Data Gain); /* This is the counterpart to activate() (see above). If there is nothing for deactivate() to do then the plugin writer may provide a NULL rather than an empty function. Hosts must deactivate all activated units after they have been run() (or run_adding()) for the last time. This call should be made as close to the last run() call as possible and indicates to real-time plugins that they are no longer live. Plugins should not rely on prompt deactivation. Note that connect_port() may be called before or after a call to deactivate(). Deactivation is not similar to pausing as the plugin instance will be reinitialised when activate() is called to reuse it. */ void (*deactivate)(LADSPA_Handle Instance); /* Once an instance of a plugin has been finished with it can be deleted using the following function. The instance handle passed ceases to be valid after this call. If activate() was called for a plugin instance then a corresponding call to deactivate() must be made before cleanup() is called. */ void (*cleanup)(LADSPA_Handle Instance); } LADSPA_Descriptor; /**********************************************************************/ /* Accessing a Plugin: */ /* The exact mechanism by which plugins are loaded is host-dependent, however all most hosts will need to know is the name of shared object file containing the plugin types. To allow multiple hosts to share plugin types, hosts may wish to check for environment variable LADSPA_PATH. If present, this should contain a colon-separated path indicating directories that should be searched (in order) when loading plugin types. A plugin programmer must include a function called "ladspa_descriptor" with the following function prototype within the shared object file. This function will have C-style linkage (if you are using C++ this is taken care of by the `extern "C"' clause at the top of the file). A host will find the plugin shared object file by one means or another, find the ladspa_descriptor() function, call it, and proceed from there. Plugin types are accessed by index (not ID) using values from 0 upwards. Out of range indexes must result in this function returning NULL, so the plugin count can be determined by checking for the least index that results in NULL being returned. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index); /* Datatype corresponding to the ladspa_descriptor() function. */ typedef const LADSPA_Descriptor * (*LADSPA_Descriptor_Function)(unsigned long Index); /**********************************************************************/ #ifdef __cplusplus } #endif #endif /* LADSPA_INCLUDED */ /* EOF */ lmms-1.1.3/include/ladspa_2_lmms.h000066400000000000000000000035001247673406200170060ustar00rootroot00000000000000/* * ladspa_2_lmms.h - class that identifies and instantiates LADSPA effects * for use with LMMS * * Copyright (c) 2005-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_2_LMMS_H #define _LADSPA_2_LMMS_H #include "ladspa_manager.h" class EXPORT ladspa2LMMS : public ladspaManager { public: inline l_sortable_plugin_t getInstruments() { return( m_instruments ); } inline l_sortable_plugin_t getValidEffects() { return( m_validEffects ); } inline l_sortable_plugin_t getInvalidEffects() { return( m_invalidEffects ); } inline l_sortable_plugin_t getAnalysisTools() { return( m_analysisTools ); } inline l_sortable_plugin_t getOthers() { return( m_otherPlugins ); } QString getShortName( const ladspa_key_t & _key ); private: ladspa2LMMS(); virtual ~ladspa2LMMS(); l_sortable_plugin_t m_instruments; l_sortable_plugin_t m_validEffects; l_sortable_plugin_t m_invalidEffects; l_sortable_plugin_t m_analysisTools; l_sortable_plugin_t m_otherPlugins; friend class engine; } ; #endif lmms-1.1.3/include/ladspa_manager.h000066400000000000000000000316271247673406200172420ustar00rootroot00000000000000/* * ladspa_manager.h - declaration of class ladspaManager * a class to manage loading and instantiation * of ladspa plugins * * Copyright (c) 2005-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_MANAGER_H #define _LADSPA_MANAGER_H #include #include #include #include #include #include "export.h" #include "lmms_basics.h" const float NOHINT = -99342.2243f; typedef QPair ladspa_key_t; typedef QPair sortable_plugin_t; typedef QList l_sortable_plugin_t; typedef QList l_ladspa_key_t; /* ladspaManager provides a database of LADSPA plug-ins. Upon instantiation, it loads all of the plug-ins found in the LADSPA_PATH environmental variable and stores their access descriptors according in a dictionary keyed on the filename the plug-in was loaded from and the label of the plug-in. The can be retrieved by using ladspa_key_t. For example, to get the "Phase Modulated Voice" plug-in from the cmt library, you would perform the calls using: ladspa_key_t key( "cmt.so", "phasemod" ) as the plug-in key. */ enum ladspaPluginType { SOURCE, TRANSFER, VALID, INVALID, SINK, OTHER }; typedef struct ladspaManagerStorage { LADSPA_Descriptor_Function descriptorFunction; uint32_t index; ladspaPluginType type; uint16_t inputChannels; uint16_t outputChannels; } ladspaManagerDescription; class EXPORT ladspaManager { public: ladspaManager(); virtual ~ladspaManager(); l_sortable_plugin_t getSortedPlugins(); ladspaManagerDescription * getDescription( const ladspa_key_t & _plugin ); /* This identifier can be used as a unique, case-sensitive identifier for the plugin type within the plugin file. Plugin types should be identified by file and label rather than by index or plugin name, which may be changed in new plugin versions. Labels must not contain white-space characters. */ QString getLabel( const ladspa_key_t & _plugin ); /* Indicates that the plugin has a real-time dependency (e.g. listens to a MIDI device) and so its output must not be cached or subject to significant latency. */ bool hasRealTimeDependency( const ladspa_key_t & _plugin ); /* Indicates that the plugin may cease to work correctly if the host elects to use the same data location for both input and output (see connectPort). */ bool isInplaceBroken( const ladspa_key_t & _plugin ); /* Indicates that the plugin is capable of running not only in a conventional host but also in a 'hard real-time' environment. */ bool isRealTimeCapable( const ladspa_key_t & _plugin ); /* Returns the name of the plug-in */ QString getName( const ladspa_key_t & _plugin ); /* Returns the the plug-in's author */ QString getMaker( const ladspa_key_t & _plugin ); /* Returns the copyright for the plug-in */ QString getCopyright( const ladspa_key_t & _plugin ); /* This indicates the number of ports (input AND output) present on the plugin. */ uint32_t getPortCount( const ladspa_key_t & _plugin ); /* Indicates that the port is an input. */ bool isPortInput( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates that the port is an output. */ bool isPortOutput( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates that the port is an audio. */ bool isPortAudio( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates that the port is an control. */ bool isPortControl( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates that any bounds specified should be interpreted as multiples of the sample rate. For instance, a frequency range from 0Hz to the Nyquist frequency (half the sample rate) could be requested by this hint in conjunction with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds at all must support this hint to retain meaning. */ bool areHintsSampleRateDependent( const ladspa_key_t & _plugin, uint32_t _port ); /* Returns the lower boundary value for the given port. If no lower bound is provided by the plug-in, returns -999e-99. When areHintsSampleRateDependent() is also true then this value should be multiplied by the relevant sample rate. */ float getLowerBound( const ladspa_key_t & _plugin, uint32_t _port ); /* Returns the upper boundary value for the given port. If no upper bound is provided by the plug-in, returns -999e-99. When areHintsSampleRateDependent() is also true then this value should be multiplied by the relevant sample rate. */ float getUpperBound( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates whether the given port should be considered 0 or 1 boolean switch. */ bool isPortToggled( const ladspa_key_t & _plugin, uint32_t _port ); /* Retrieves any default setting hints offered by the plug-in for the given port. */ float getDefaultSetting( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates that it is likely that the user will find it more intuitive to view values using a logarithmic scale. This is particularly useful for frequencies and gains. */ bool isLogarithmic( const ladspa_key_t & _plugin, uint32_t _port ); /* Indicates that a user interface would probably wish to provide a stepped control taking only integer values. Any bounds set should be slightly wider than the actual integer range required to avoid floating point rounding errors. For instance, the integer set {0,1,2,3} might be described as [-0.1, 3.1]. */ bool isInteger( const ladspa_key_t & _plugin, uint32_t _port ); /* Returns the name of the port. */ QString getPortName( const ladspa_key_t & _plugin, uint32_t _port ); /* This may be used by the plugin developer to pass any custom implementation data into an instantiate call. It must not be used or interpreted by the host. It is expected that most plugin writers will not use this facility as LADSPA_Handle should be used to hold instance data. */ const void * getImplementationData( const ladspa_key_t & _plugin ); /* Returns a pointer to the plug-in's descriptor from which control of the plug-in is accessible */ const LADSPA_Descriptor * getDescriptor( const ladspa_key_t & _plugin ); /* The following methods are convenience functions for use during development. A real instrument should use the getDescriptor() method and implement the plug-in manipulations internally to avoid the overhead associated with QMap lookups. */ /* Returns a handle to an instantiation of the given plug-in. */ LADSPA_Handle instantiate( const ladspa_key_t & _plugin, uint32_t _sample_rate ); /* This method calls a function pointer that connects a port on an instantiated plugin to a memory location at which a block of data for the port will be read/written. The data location is expected to be an array of LADSPA_Data for audio ports or a single LADSPA_Data value for control ports. Memory issues will be managed by the host. The plugin must read/write the data at these locations every time run() or runAdding() is called and the data present at the time of this connection call should not be considered meaningful. connectPort() may be called more than once for a plugin instance to allow the host to change the buffers that the plugin is reading or writing. These calls may be made before or after activate() or deactivate() calls. connectPort() must be called at least once for each port before run() or runAdding() is called. */ bool connectPort( const ladspa_key_t & _plugin, LADSPA_Handle _instance, uint32_t _port, LADSPA_Data * _data_location ); /* This method calls a function pointer that initialises a plugin instance and activates it for use. This is separated from instantiate() to aid real-time support and so that hosts can reinitialise a plugin instance by calling deactivate() and then activate(). In this case the plugin instance must reset all state information dependent on the history of the plugin instance except for any data locations provided by connectPort() and any gain set by setRunAddingGain(). If there is nothing for activate() to do then the plugin writer may provide a NULL rather than an empty function. When present, hosts must call this function once before run() (or runAdding()) is called for the first time. This call should be made as close to the run() call as possible and indicates to real-time plugins that they are now live. Plugins should not rely on a prompt call to run() after activate(). activate() may not be called again unless deactivate() is called first. Note that connectPort() may be called before or after a call to activate(). */ bool activate( const ladspa_key_t & _plugin, LADSPA_Handle _instance ); /* This method calls a function pointer that runs an instance of a plugin for a block. Two parameters are required: the first is a handle to the particular instance to be run and the second indicates the block size (in samples) for which the plugin instance may run. Note that if an activate() function exists then it must be called before run() or run_adding(). If deactivate() is called for a plugin instance then the plugin instance may not be reused until activate() has been called again. */ bool run( const ladspa_key_t & _plugin, LADSPA_Handle _instance, uint32_t _sample_count ); /* This method calls a function pointer that runs an instance of a plugin for a block. This has identical behaviour to run() except in the way data is output from the plugin. When run() is used, values are written directly to the memory areas associated with the output ports. However when runAdding() is called, values must be added to the values already present in the memory areas. Furthermore, output values written must be scaled by the current gain set by setRunAddingGain() (see below) before addition. runAdding() is optional. When it is not provided by a plugin, this function pointer must be set to NULL. When it is provided, the function setRunAddingGain() must be provided also. */ bool runAdding( const ladspa_key_t & _plugin, LADSPA_Handle _instance, uint32_t _sample_count ); /* This method calls a function pointer that sets the output gain for use when runAdding() is called (see above). If this function is never called the gain is assumed to default to 1. Gain information should be retained when activate() or deactivate() are called. This function should be provided by the plugin if and only if the runAdding() function is provided. When it is absent this function pointer must be set to NULL. */ bool setRunAddingGain( const ladspa_key_t & _plugin, LADSPA_Handle _instance, LADSPA_Data _gain ); /* This is the counterpart to activate() (see above). If there is nothing for deactivate() to do then the plugin writer may provide a NULL rather than an empty function. Hosts must deactivate all activated units after they have been run() (or run_adding()) for the last time. This call should be made as close to the last run() call as possible and indicates to real-time plugins that they are no longer live. Plugins should not rely on prompt deactivation. Note that connect_port() may be called before or after a call to deactivate(). Deactivation is not similar to pausing as the plugin instance will be reinitialised when activate() is called to reuse it. */ bool deactivate( const ladspa_key_t & _plugin, LADSPA_Handle _instance ); /* Once an instance of a plugin has been finished with it can be deleted using the following function. The instance handle passed ceases to be valid after this call. If activate() was called for a plugin instance then a corresponding call to deactivate() must be made before cleanup() is called. */ bool cleanup( const ladspa_key_t & _plugin, LADSPA_Handle _instance ); private: void addPlugins( LADSPA_Descriptor_Function _descriptor_func, const QString & _file ); uint16_t getPluginInputs( const LADSPA_Descriptor * _descriptor ); uint16_t getPluginOutputs( const LADSPA_Descriptor * _descriptor ); typedef QMap ladspaManagerMapType; ladspaManagerMapType m_ladspaManagerMap; l_sortable_plugin_t m_sortedPlugins; } ; #endif lmms-1.1.3/include/led_checkbox.h000066400000000000000000000035271247673406200167140ustar00rootroot00000000000000/* * led_checkbox.h - class ledCheckBox, an improved QCheckBox * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LED_CHECKBOX_H #define _LED_CHECKBOX_H #include "automatable_button.h" class QPixmap; class EXPORT ledCheckBox : public automatableButton { Q_OBJECT public: enum LedColors { Yellow, Green, Red, NumColors } ; ledCheckBox( const QString & _txt, QWidget * _parent, const QString & _name = QString::null, LedColors _color = Yellow ); ledCheckBox( QWidget * _parent, const QString & _name = QString::null, LedColors _color = Yellow ); virtual ~ledCheckBox(); inline const QString & text() { return( m_text ); } void setText( const QString& s ); Q_PROPERTY( QString text READ text WRITE setText ) protected: virtual void paintEvent( QPaintEvent * _pe ); private: QPixmap * m_ledOnPixmap; QPixmap * m_ledOffPixmap; QString m_text; void initUi( LedColors _color ); //!< to be called by ctors void onTextUpdated(); //!< to be called when you updated @a m_text } ; #endif lmms-1.1.3/include/lmms_basics.h000066400000000000000000000057411247673406200165760ustar00rootroot00000000000000/* * types.h - typedefs for common types that are used in the whole app * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TYPES_H #define _TYPES_H #include #include "lmmsconfig.h" #ifdef LMMS_HAVE_STDINT_H #include #endif typedef int32_t tact_t; typedef int32_t tick_t; typedef uint8_t volume_t; typedef int8_t panning_t; typedef float sample_t; // standard sample-type typedef int16_t int_sample_t; // 16-bit-int-sample typedef uint32_t sample_rate_t; // sample-rate typedef int16_t fpp_t; // frames per period (0-16384) typedef int32_t f_cnt_t; // standard frame-count typedef uint8_t ch_cnt_t; // channel-count (0-SURROUND_CHANNELS) typedef uint16_t bpm_t; // tempo (MIN_BPM to MAX_BPM) typedef uint16_t bitrate_t; // bitrate in kbps typedef uint16_t fx_ch_t; // FX-channel (0 to MAX_EFFECT_CHANNEL) typedef uint32_t jo_id_t; // (unique) ID of a journalling object // use for improved branch prediction #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) template struct typeInfo { static inline T min() { return std::numeric_limits::min(); } static inline T max() { return std::numeric_limits::max(); } static inline T minEps() { return 1; } static inline bool isEqual( T _x, T _y ) { return _x == _y; } static inline T absVal( T t ) { return t >= 0 ? t : -t; } } ; template<> inline float typeInfo::minEps() { return 1.0e-10; } template<> inline bool typeInfo::isEqual( float _x, float _y ) { if( likely( _x == _y ) ) { return true; } return absVal( _x - _y ) < minEps(); } const ch_cnt_t DEFAULT_CHANNELS = 2; const ch_cnt_t SURROUND_CHANNELS = #define LMMS_DISABLE_SURROUND #ifndef LMMS_DISABLE_SURROUND 4; #else 2; #endif #ifdef LMMS_BUILD_WIN32 #define LADSPA_PATH_SEPERATOR ';' #else #define LADSPA_PATH_SEPERATOR ':' #endif typedef sample_t sampleFrame[DEFAULT_CHANNELS]; typedef sample_t surroundSampleFrame[SURROUND_CHANNELS]; #define ALIGN_SIZE 16 #if __GNUC__ typedef sample_t sampleFrameA[DEFAULT_CHANNELS] __attribute__((__aligned__(ALIGN_SIZE))); #endif #define STRINGIFY(s) STR(s) #define STR(PN) #PN #endif lmms-1.1.3/include/lmms_constants.h000066400000000000000000000023661247673406200173460ustar00rootroot00000000000000/* * lmms_constants.h - defines system constants * * Copyright (c) 2006 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LMMS_CONSTANTS_H #define LMMS_CONSTANTS_H const double D_PI = 3.14159265358979323846; const double D_2PI = D_PI * 2.0; const double D_PI_2 = D_PI * 0.5; const double D_E = 2.71828182845904523536; const float F_PI = (float) D_PI; const float F_2PI = (float) D_2PI; const float F_PI_2 = (float) D_PI_2; const float F_E = (float) D_E; #endif lmms-1.1.3/include/lmms_math.h000066400000000000000000000125151247673406200162600ustar00rootroot00000000000000/* * lmms_math.h - defines math functions * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LMMS_MATH_H #define LMMS_MATH_H #include #include "lmms_constants.h" #include "lmmsconfig.h" #include #include using namespace std; #if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE) #ifndef isnanf #define isnanf(x) isnan(x) #endif #ifndef isinff #define isinff(x) isinf(x) #endif #ifndef _isnanf #define _isnanf(x) isnan(x) #endif #ifndef _isinff #define _isinff(x) isinf(x) #endif #ifndef exp10 #define exp10(x) pow( 10, x ) #endif #ifndef exp10f #define exp10f(x) powf( 10, x ) #endif #endif #ifdef __INTEL_COMPILER static inline float absFraction( const float _x ) { return( _x - ( _x >= 0.0f ? floorf( _x ) : floorf( _x ) - 1 ) ); } static inline float fraction( const float _x ) { return( _x - floorf( _x ) ); } #else static inline float absFraction( const float _x ) { return( _x - ( _x >= 0.0f ? static_cast( _x ) : static_cast( _x ) - 1 ) ); } static inline float fraction( const float _x ) { return( _x - static_cast( _x ) ); } #if 0 // SSE3-version static inline float absFraction( float _x ) { unsigned int tmp; asm( "fld %%st\n\t" "fisttp %1\n\t" "fild %1\n\t" "ftst\n\t" "sahf\n\t" "jae 1f\n\t" "fld1\n\t" "fsubrp %%st, %%st(1)\n\t" "1:\n\t" "fsubrp %%st, %%st(1)" : "+t"( _x ), "=m"( tmp ) : : "st(1)", "cc" ); return( _x ); } static inline float absFraction( float _x ) { unsigned int tmp; asm( "fld %%st\n\t" "fisttp %1\n\t" "fild %1\n\t" "fsubrp %%st, %%st(1)" : "+t"( _x ), "=m"( tmp ) : : "st(1)" ); return( _x ); } #endif #endif #define FAST_RAND_MAX 32767 static inline int fast_rand() { static unsigned long next = 1; next = next * 1103515245 + 12345; return( (unsigned)( next / 65536 ) % 32768 ); } //! @brief Takes advantage of fmal() function if present in hardware static inline long double fastFmal( long double a, long double b, long double c ) { #ifdef FP_FAST_FMAL #ifdef __clang__ return fma( a, b, c ); #else return fmal( a, b, c ); #endif #else return a * b + c; #endif } //! @brief Takes advantage of fmaf() function if present in hardware static inline float fastFmaf( float a, float b, float c ) { #ifdef FP_FAST_FMAF #ifdef __clang__ return fma( a, b, c ); #else return fmaf( a, b, c ); #endif #else return a * b + c; #endif } //! @brief Takes advantage of fma() function if present in hardware static inline double fastFma( double a, double b, double c ) { #ifdef FP_FAST_FMA return fma( a, b, c ); #else return a * b + c; #endif } // source: http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/ static inline double fastPow( double a, double b ) { union { double d; int32_t x[2]; } u = { a }; u.x[1] = static_cast( b * ( u.x[1] - 1072632447 ) + 1072632447 ); u.x[0] = 0; return u.d; } // sinc function static inline double sinc( double _x ) { return _x == 0.0 ? 1.0 : sin( F_PI * _x ) / ( F_PI * _x ); } //! @brief Exponential function that deals with negative bases static inline float signedPowf( float v, float e ) { return v < 0 ? powf( -v, e ) * -1.0f : powf( v, e ); } //! @brief Scales @value from linear to logarithmic. //! Value should be within [0,1] static inline float logToLinearScale( float min, float max, float value ) { if( min < 0 ) { const float mmax = qMax( qAbs( min ), qAbs( max ) ); const float val = value * ( max - min ) + min; return signedPowf( val / mmax, F_E ) * mmax; } return powf( value, F_E ) * ( max - min ) + min; } //! @brief Scales value from logarithmic to linear. Value should be in min-max range. static inline float linearToLogScale( float min, float max, float value ) { static const float EXP = 1.0f / F_E; const float val = ( value - min ) / ( max - min ); if( min < 0 ) { const float mmax = qMax( qAbs( min ), qAbs( max ) ); return signedPowf( value / mmax, EXP ) * mmax; } return powf( val, EXP ) * ( max - min ) + min; } //! @brief Converts linear amplitude (0-1.0) to dBV scale. //! @param amp Linear amplitude, where 1.0 = 0dBV. //! @return Amplitude in dBV. -inf for 0 amplitude. static inline float ampToDbv( float amp ) { return amp == 0.0f ? -INFINITY : log10f( amp ) * 20.0f; } //! @brief Converts dBV-scale to linear amplitude with 0dBV = 1.0 //! @param dbv The dBV value to convert: all infinites are treated as -inf and result in 0 //! @return Linear amplitude static inline float dbvToAmp( float dbv ) { return isinff( dbv ) ? 0.0f : exp10f( dbv * 0.05f ); } #endif lmms-1.1.3/include/note.h000066400000000000000000000114001247673406200152340ustar00rootroot00000000000000/* * note.h - declaration of class note which contains all informations about a * note + definitions of several constants and enums * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _NOTE_H #define _NOTE_H #include #include "volume.h" #include "panning.h" #include "MidiTime.h" #include "SerializingObject.h" class DetuningHelper; enum Keys { Key_C = 0, Key_CIS = 1, Key_DES = 1, Key_D = 2, Key_DIS = 3, Key_ES = 3, Key_E = 4, Key_FES = 4, Key_F = 5, Key_FIS = 6, Key_GES = 6, Key_G = 7, Key_GIS = 8, Key_AS = 8, Key_A = 9, Key_AIS = 10, Key_B = 10, Key_H = 11 } ; enum Octaves { Octave_0, Octave_1, Octave_2, Octave_3, Octave_4, DefaultOctave = Octave_4, Octave_5, Octave_6, Octave_7, Octave_8, NumOctaves } ; const int WhiteKeysPerOctave = 7; const int BlackKeysPerOctave = 5; const int KeysPerOctave = WhiteKeysPerOctave + BlackKeysPerOctave; const int NumKeys = NumOctaves * KeysPerOctave; const int DefaultKey = DefaultOctave*KeysPerOctave + Key_A; const float MaxDetuning = 4 * 12.0f; class EXPORT note : public SerializingObject { public: note( const MidiTime & _length = MidiTime( 0 ), const MidiTime & _pos = MidiTime( 0 ), int key = DefaultKey, volume_t _volume = DefaultVolume, panning_t _panning = DefaultPanning, DetuningHelper * _detuning = NULL ); note( const note & _note ); virtual ~note(); // used by GUI inline void setSelected( const bool _selected ){ m_selected = _selected; } inline void setOldKey( const int _oldKey ){ m_oldKey = _oldKey; } inline void setOldPos( const MidiTime & _oldPos ){ m_oldPos = _oldPos; } inline void setOldLength( const MidiTime & _oldLength ) { m_oldLength = _oldLength; } inline void setIsPlaying( const bool _isPlaying ) { m_isPlaying = _isPlaying; } void setLength( const MidiTime & _length ); void setPos( const MidiTime & _pos ); void setKey( const int _key ); virtual void setVolume( volume_t volume ); virtual void setPanning( panning_t panning ); void quantizeLength( const int _q_grid ); void quantizePos( const int _q_grid ); static inline bool lessThan( note * &lhs, note * &rhs ) { // function to compare two notes - must be called explictly when // using qSort return (bool) ((int) ( *lhs ).pos() < (int) ( *rhs ).pos()); } inline bool selected() const { return m_selected; } inline int oldKey() const { return m_oldKey; } inline MidiTime oldPos() const { return m_oldPos; } inline MidiTime oldLength() const { return m_oldLength; } inline bool isPlaying() const { return m_isPlaying; } inline MidiTime endPos() const { const int l = length(); return pos() + l; } inline const MidiTime & length() const { return m_length; } inline const MidiTime & pos() const { return m_pos; } inline MidiTime pos( MidiTime _base_pos ) const { const int bp = _base_pos; return m_pos - bp; } inline int key() const { return m_key; } inline volume_t getVolume() const { return m_volume; } int midiVelocity( int midiBaseVelocity ) const { return qMin( MidiMaxVelocity, getVolume() * midiBaseVelocity / DefaultVolume ); } inline panning_t getPanning() const { return m_panning; } static QString classNodeName() { return "note"; } inline virtual QString nodeName() const { return classNodeName(); } static MidiTime quantized( const MidiTime & _m, const int _q_grid ); DetuningHelper * detuning() const { return m_detuning; } void editDetuningPattern(); bool hasDetuningInfo() const; protected: virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); private: // for piano roll editing bool m_selected; int m_oldKey; MidiTime m_oldPos; MidiTime m_oldLength; bool m_isPlaying; int m_key; volume_t m_volume; panning_t m_panning; MidiTime m_length; MidiTime m_pos; DetuningHelper * m_detuning; void createDetuning(); } ; typedef QVector NoteVector; #endif lmms-1.1.3/include/nstate_button.h000066400000000000000000000032421247673406200171650ustar00rootroot00000000000000/* * nstate_button.h - declaration of class nStateButton * * Copyright (c) 2005 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _NSTATE_BUTTON_H #define _NSTATE_BUTTON_H #include #include #include #include "tool_button.h" class nStateButton : public toolButton { Q_OBJECT public: nStateButton( QWidget * _parent ); virtual ~nStateButton(); void addState( const QPixmap & _pixmap, const QString & _tooltip = "" ); inline void setGeneralToolTip( const QString & _tooltip ) { m_generalToolTip = _tooltip; } inline int state() const { return( m_curState ); } public slots: void changeState( int _n ); signals: void changedState( int _n ); protected: virtual void mousePressEvent( QMouseEvent * _me ); private: QVector > m_states; QString m_generalToolTip; int m_curState; } ; #endif lmms-1.1.3/include/panning.h000066400000000000000000000031101247673406200157200ustar00rootroot00000000000000/* * panning.h - declaration of some types, concerning the * panning of a note * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PANNING_H #define _PANNING_H #include "lmms_basics.h" #include "volume.h" #include "templates.h" #include "panning_constants.h" #include "Midi.h" inline stereoVolumeVector panningToVolumeVector( panning_t _p, float _scale = 1.0f ) { stereoVolumeVector v = { { _scale, _scale } }; const float pf = _p / 100.0f; v.vol[_p >= PanningCenter ? 0 : 1] *= 1.0f - qAbs( pf ); return v; } inline int panningToMidi( panning_t _p ) { return MidiMinPanning + (int) ( ( (float)( _p - PanningLeft ) ) / ( (float)( PanningRight - PanningLeft ) ) * ( (float)( MidiMaxPanning - MidiMinPanning ) ) ); } #endif lmms-1.1.3/include/panning_constants.h000066400000000000000000000023071247673406200200230ustar00rootroot00000000000000/* * panning_constants.h - declaration of some constants, concerning the * panning of a note * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PANNING_CONSTANTS_H #define _PANNING_CONSTANTS_H const panning_t PanningRight = ( 0 + 100 ); const panning_t PanningLeft = - PanningRight; const panning_t PanningCenter = 0; const panning_t DefaultPanning = PanningCenter; #endif lmms-1.1.3/include/pixmap_button.h000066400000000000000000000032361247673406200171700ustar00rootroot00000000000000/* * pixmap_button.h - declaration of class pixmapButton * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PIXMAP_BUTTON_H #define _PIXMAP_BUTTON_H #include #include "automatable_button.h" class EXPORT pixmapButton : public automatableButton { Q_OBJECT public: pixmapButton( QWidget * _parent, const QString & _name = QString::null ); virtual ~pixmapButton(); void setActiveGraphic( const QPixmap & _pm ); void setInactiveGraphic( const QPixmap & _pm, bool _update = true ); signals: void doubleClicked(); protected: virtual void paintEvent( QPaintEvent * _pe ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void mouseDoubleClickEvent( QMouseEvent * _me ); private: QPixmap m_activePixmap; QPixmap m_inactivePixmap; bool m_pressed; } ; #endif lmms-1.1.3/include/plugin_browser.h000066400000000000000000000036671247673406200173500ustar00rootroot00000000000000/* * plugin_browser.h - include file for pluginBrowser * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PLUGIN_BROWSER_H #define _PLUGIN_BROWSER_H #include #include #include "SideBarWidget.h" #include "Plugin.h" class trackContainer; class PluginBrowser : public SideBarWidget { Q_OBJECT public: PluginBrowser( QWidget * _parent ); virtual ~PluginBrowser(); private: QWidget * m_view; }; class PluginDescList : public QWidget { Q_OBJECT public: PluginDescList(QWidget* parent); private: Plugin::DescriptorList m_pluginDescriptors; }; class PluginDescWidget : public QWidget { Q_OBJECT public: PluginDescWidget( const Plugin::Descriptor & _pd, QWidget * _parent ); virtual ~PluginDescWidget(); protected: virtual void enterEvent( QEvent * _e ); virtual void leaveEvent( QEvent * _e ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); private slots: void updateHeight(); private: QTimer m_updateTimer; const Plugin::Descriptor & m_pluginDescriptor; QPixmap m_logo; bool m_mouseOver; int m_targetHeight; }; #endif lmms-1.1.3/include/project_notes.h000066400000000000000000000041411247673406200171510ustar00rootroot00000000000000/* * project_notes.h - header for project-notes-editor * * Copyright (c) 2005-2007 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PROJECT_NOTES_H #define _PROJECT_NOTES_H #include #include "JournallingObject.h" class QAction; class QComboBox; class QTextCharFormat; class QTextEdit; class EXPORT projectNotes : public QMainWindow, public SerializingObject { Q_OBJECT public: projectNotes(); virtual ~projectNotes(); void clear(); void setText( const QString & _text ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "projectnotes"; } protected: void setupActions(); private slots: void textBold(); void textUnderline(); void textItalic(); void textFamily( const QString & _f ); void textSize( const QString & _p ); void textColor(); void textAlign( QAction * _a ); void formatChanged( const QTextCharFormat & _f ); void alignmentChanged( int _a ); private: QTextEdit * m_edit; QAction * m_actionTextBold, * m_actionTextUnderline, * m_actionTextItalic, * m_actionTextColor, * m_actionAlignLeft, * m_actionAlignCenter, * m_actionAlignRight, * m_actionAlignJustify; QComboBox * m_comboFont; QComboBox * m_comboSize; } ; #endif lmms-1.1.3/include/project_version.h000066400000000000000000000025431247673406200175120ustar00rootroot00000000000000/* * project_version.h - version compared in import upgrades * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PROJECT_VERSION_H #define _PROJECT_VERSION_H #include class projectVersion : public QString { public: projectVersion( const QString & _s ) : QString( _s ) { } static int compare( const projectVersion & _v1, const projectVersion & _v2 ); } ; inline bool operator<( const projectVersion & _v1, const char * _str ) { return projectVersion::compare( _v1, projectVersion( _str ) ) < 0; } #endif lmms-1.1.3/include/rename_dialog.h000066400000000000000000000026441247673406200170670ustar00rootroot00000000000000/* * rename_dialog.h - declaration of class renameDialog, a simple dialog for * changing the content of a string * * Copyright (c) 2004-2005 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _RENAME_DIALOG_H #define _RENAME_DIALOG_H #include class QLineEdit; class renameDialog : public QDialog { Q_OBJECT public: renameDialog( QString & _string ); ~renameDialog(); protected: void keyPressEvent( QKeyEvent * _ke ); protected slots: void textChanged( const QString & _new_string ); private: QString & m_stringToEdit; QString m_originalString; QLineEdit * m_stringLE; } ; #endif lmms-1.1.3/include/rubberband.h000066400000000000000000000034551247673406200164100ustar00rootroot00000000000000/* * rubberband.h - rubberband - either own implementation for Qt3 or wrapper for * Qt4 * * Copyright (c) 2006 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _RUBBERBAND_H #define _RUBBERBAND_H #include #include class selectableObject : public QWidget { Q_OBJECT public: selectableObject( QWidget * _parent ) : QWidget( _parent ), m_selected( false ) { } virtual ~selectableObject() { } inline void setSelected( bool _selected ) { m_selected = _selected; update(); } inline bool isSelected() const { return( m_selected ); } public slots: virtual void update() { QWidget::update(); } private: bool m_selected; } ; class rubberBand : public QRubberBand { public: rubberBand( QWidget * _parent ); virtual ~rubberBand(); QVector selectedObjects() const; protected: virtual void resizeEvent( QResizeEvent * _re ); private: QVector selectableObjects() const; }; #endif lmms-1.1.3/include/setup_dialog.h000066400000000000000000000102051247673406200167500ustar00rootroot00000000000000/* * setup_dialog.h - dialog for setting up LMMS * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SETUP_DIALOG_H #define _SETUP_DIALOG_H #include #include #include "lmmsconfig.h" #include "AudioDevice.h" #include "MidiClient.h" class QComboBox; class QLabel; class QLineEdit; class QSlider; class tabBar; class setupDialog : public QDialog { Q_OBJECT public: enum ConfigTabs { GeneralSettings, PathSettings, PerformanceSettings, AudioSettings, MidiSettings } ; setupDialog( ConfigTabs _tab_to_open = GeneralSettings ); virtual ~setupDialog(); protected slots: virtual void accept(); private slots: // general settings widget void setBufferSize( int _value ); void resetBufSize(); void displayBufSizeHelp(); // path settings widget void setWorkingDir( const QString & _wd ); void setVSTDir( const QString & _vd ); void setArtworkDir( const QString & _ad ); void setFLDir( const QString & _fd ); void setLADSPADir( const QString & _ld ); void setSTKDir( const QString & _sd ); void setDefaultSoundfont( const QString & _sf ); void setBackgroundArtwork( const QString & _ba ); // audio settings widget void audioInterfaceChanged( const QString & _driver ); void displayAudioHelp(); // MIDI settings widget void midiInterfaceChanged( const QString & _driver ); void displayMIDIHelp(); void toggleToolTips( bool _enabled ); void toggleWarnAfterSetup( bool _enabled ); void toggleDisplaydBV( bool _enabled ); void toggleMMPZ( bool _enabled ); void toggleHQAudioDev( bool _enabled ); void openWorkingDir(); void openVSTDir(); void openArtworkDir(); void openFLDir(); void openLADSPADir(); void openSTKDir(); void openDefaultSoundfont(); void openBackgroundArtwork(); void toggleSmoothScroll( bool _enabled ); void toggleAutoSave( bool _enabled ); void toggleOneInstrumentTrackWindow( bool _enabled ); void toggleCompactTrackButtons( bool _enabled ); void toggleSyncVSTPlugins( bool _enabled ); void toggleAnimateAFP( bool _enabled ); void toggleNoteLabels( bool en ); void toggleDisplayWaveform( bool en ); private: tabBar * m_tabBar; QSlider * m_bufSizeSlider; QLabel * m_bufSizeLbl; int m_bufferSize; bool m_toolTips; bool m_warnAfterSetup; bool m_displaydBV; bool m_MMPZ; bool m_hqAudioDev; QLineEdit * m_wdLineEdit; QLineEdit * m_vdLineEdit; QLineEdit * m_adLineEdit; QLineEdit * m_fdLineEdit; QLineEdit * m_ladLineEdit; #ifdef LMMS_HAVE_FLUIDSYNTH QLineEdit * m_sfLineEdit; #endif #ifdef LMMS_HAVE_STK QLineEdit * m_stkLineEdit; #endif QLineEdit * m_baLineEdit; QString m_workingDir; QString m_vstDir; QString m_artworkDir; QString m_flDir; QString m_ladDir; #ifdef LMMS_HAVE_FLUIDSYNTH QString m_defaultSoundfont; #endif #ifdef LMMS_HAVE_STK QString m_stkDir; #endif QString m_backgroundArtwork; bool m_smoothScroll; bool m_enableAutoSave; bool m_oneInstrumentTrackWindow; bool m_compactTrackButtons; bool m_syncVSTPlugins; bool m_animateAFP; bool m_printNoteLabels; bool m_displayWaveform; typedef QMap AswMap; typedef QMap MswMap; typedef QMap trMap; QComboBox * m_audioInterfaces; AswMap m_audioIfaceSetupWidgets; trMap m_audioIfaceNames; QComboBox * m_midiInterfaces; MswMap m_midiIfaceSetupWidgets; trMap m_midiIfaceNames; } ; #endif lmms-1.1.3/include/shared_object.h000066400000000000000000000034001247673406200170640ustar00rootroot00000000000000/* * shared_object.h - class sharedObject for use among other objects * * Copyright (c) 2006-2007 Javier Serrano Polo * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef SHARED_OBJECT_H #define SHARED_OBJECT_H #include class sharedObject { public: sharedObject() : m_referenceCount( 1 ), m_lock() { } virtual ~sharedObject() { } template static T* ref( T* object ) { object->m_lock.lock(); // TODO: Use QShared ++object->m_referenceCount; object->m_lock.unlock(); return object; } template static void unref( T* object ) { object->m_lock.lock(); bool deleteObject = --object->m_referenceCount <= 0; object->m_lock.unlock(); if ( deleteObject ) { delete object; } } // keep clang happy which complaines about unused member variable void dummy() { m_referenceCount = 0; } private: int m_referenceCount; QMutex m_lock; } ; #endif lmms-1.1.3/include/song.h000066400000000000000000000161211247673406200152420ustar00rootroot00000000000000/* * song.h - class song - the root of the model-tree * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SONG_H #define _SONG_H #include #include #include "TrackContainer.h" #include "AutomatableModel.h" #include "Controller.h" #include "MeterModel.h" #include "VstSyncController.h" class AutomationTrack; class Pattern; class timeLine; const bpm_t MinTempo = 10; const bpm_t DefaultTempo = 140; const bpm_t MaxTempo = 999; const tick_t MaxSongLength = 9999 * DefaultTicksPerTact; class EXPORT song : public TrackContainer { Q_OBJECT mapPropertyFromModel(int,getTempo,setTempo,m_tempoModel); mapPropertyFromModel(int,masterPitch,setMasterPitch,m_masterPitchModel); mapPropertyFromModel(int,masterVolume,setMasterVolume, m_masterVolumeModel); public: enum PlayModes { Mode_None, Mode_PlaySong, Mode_PlayTrack, Mode_PlayBB, Mode_PlayPattern, Mode_PlayAutomationPattern, Mode_Count } ; class playPos : public MidiTime { public: playPos( const int _abs = 0 ) : MidiTime( _abs ), m_timeLine( NULL ), m_timeLineUpdate( true ), m_currentFrame( 0.0f ) { } inline void setCurrentFrame( const float _f ) { m_currentFrame = _f; } inline float currentFrame() const { return m_currentFrame; } timeLine * m_timeLine; bool m_timeLineUpdate; private: float m_currentFrame; } ; void processNextBuffer(); inline int getMilliseconds() const { return m_elapsedMilliSeconds; } inline void setMilliSeconds( float _ellapsedMilliSeconds ) { m_elapsedMilliSeconds = (_ellapsedMilliSeconds); } inline int getTacts() const { return currentTact(); } inline int ticksPerTact() const { return DefaultTicksPerTact * m_timeSigModel.getNumerator() / m_timeSigModel.getDenominator(); } // Returns the beat position inside the bar, 0-based inline int getBeat() const { return (currentTick() - currentTact()*ticksPerTact()) / (ticksPerTact() / m_timeSigModel.getNumerator() ); } // the remainder after bar and beat are removed inline int getBeatTicks() const { return (currentTick() - currentTact()*ticksPerTact()) % (ticksPerTact() / m_timeSigModel.getNumerator() ); } inline int getTicks() const { return currentTick(); } inline bool isTempoAutomated() { return m_tempoModel.isAutomated(); } inline bool isPaused() const { return m_paused; } inline bool isPlaying() const { return m_playing && m_exporting == false; } inline bool isStopped() const { return m_playing == false && m_paused == false; } inline bool isExporting() const { return m_exporting; } inline void setExportLoop( bool exportLoop ) { m_exportLoop = exportLoop; } inline bool isRecording() const { return m_recording; } inline bool isExportDone() const { if ( m_exportLoop ) { return m_exporting == true && m_playPos[Mode_PlaySong].getTicks() >= length() * ticksPerTact(); } else { return m_exporting == true && m_playPos[Mode_PlaySong].getTicks() >= ( length() + 1 ) * ticksPerTact(); } } inline PlayModes playMode() const { return m_playMode; } inline playPos & getPlayPos( PlayModes _pm ) { return m_playPos[_pm]; } void updateLength(); tact_t length() const { return m_length; } bpm_t getTempo(); virtual AutomationPattern * tempoAutomationPattern(); AutomationTrack * globalAutomationTrack() { return m_globalAutomationTrack; } // file management void createNewProject(); void createNewProjectFromTemplate( const QString & _template ); void loadProject( const QString & _filename ); bool guiSaveProject(); bool guiSaveProjectAs( const QString & _filename ); bool saveProjectFile( const QString & _filename ); const QString & projectFileName() const { return m_fileName; } bool isLoadingProject() const { return m_loadingProject; } bool isModified() const { return m_modified; } virtual QString nodeName() const { return "song"; } virtual bool fixedTCOs() const { return false; } void addController( Controller * _c ); void removeController( Controller * _c ); const ControllerVector & controllers() const { return m_controllers; } MeterModel & getTimeSigModel() { return m_timeSigModel; } public slots: void playSong(); void record(); void playAndRecord(); void playTrack( track * _trackToPlay ); void playBB(); void playPattern( Pattern* patternToPlay, bool _loop = true ); void togglePause(); void stop(); void importProject(); void exportProject(bool multiExport=false); void exportProjectTracks(); void startExport(); void stopExport(); void setModified(); void clearProject(); void addBBTrack(); private slots: void insertBar(); void removeBar(); void addSampleTrack(); void addAutomationTrack(); void setTempo(); void setTimeSignature(); void masterVolumeChanged(); void savePos(); void updateFramesPerTick(); private: song(); song( const song & ); virtual ~song(); inline tact_t currentTact() const { return m_playPos[m_playMode].getTact(); } inline tick_t currentTick() const { return m_playPos[m_playMode].getTicks(); } void setPlayPos( tick_t _ticks, PlayModes _play_mode ); void saveControllerStates( QDomDocument & _doc, QDomElement & _this ); void restoreControllerStates( const QDomElement & _this ); AutomationTrack * m_globalAutomationTrack; IntModel m_tempoModel; MeterModel m_timeSigModel; int m_oldTicksPerTact; IntModel m_masterVolumeModel; IntModel m_masterPitchModel; ControllerVector m_controllers; QString m_fileName; QString m_oldFileName; bool m_modified; volatile bool m_recording; volatile bool m_exporting; volatile bool m_exportLoop; volatile bool m_playing; volatile bool m_paused; bool m_loadingProject; PlayModes m_playMode; playPos m_playPos[Mode_Count]; tact_t m_length; track * m_trackToPlay; Pattern* m_patternToPlay; bool m_loopPattern; double m_elapsedMilliSeconds; tick_t m_elapsedTicks; tact_t m_elapsedTacts; VstSyncController m_vstSyncController; friend class engine; friend class SongEditor; friend class mainWindow; friend class ControllerRackView; signals: void projectLoaded(); void playbackStateChanged(); void lengthChanged( int _tacts ); void tempoChanged( bpm_t _new_bpm ); void timeSignatureChanged( int _old_ticks_per_tact, int _ticks_per_tact ); } ; #endif lmms-1.1.3/include/string_pair_drag.h000066400000000000000000000032011247673406200176050ustar00rootroot00000000000000/* * string_pair_drag.h - class stringPairDrag which provides general support * for drag'n'drop of string-pairs * * Copyright (c) 2005-2007 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STRING_PAIR_DRAG_H #define _STRING_PAIR_DRAG_H #include #include #include #include "export.h" class QPixmap; class EXPORT stringPairDrag : public QDrag { public: stringPairDrag( const QString & _key, const QString & _value, const QPixmap & _icon, QWidget * _w ); ~stringPairDrag(); static bool processDragEnterEvent( QDragEnterEvent * _dee, const QString & _allowed_keys ); static QString decodeKey( QDropEvent * _de ); static QString decodeValue( QDropEvent * _de ); static const char * mimeType() { return( "application/x-lmms-stringpair" ); } } ; #endif lmms-1.1.3/include/tab_bar.h000066400000000000000000000035431247673406200156720ustar00rootroot00000000000000/* * tab_bar.h - class tabBar * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TAB_BAR_H #define _TAB_BAR_H #include #include #include #include "export.h" class tabButton; class EXPORT tabBar : public QWidget { Q_OBJECT public: tabBar( QWidget * _parent, QBoxLayout::Direction _dir = QBoxLayout::LeftToRight ); virtual ~tabBar(); tabButton * addTab( QWidget * _w, const QString & _text, int _id, bool _add_stretch = false, bool _text_is_tooltip = false ); void removeTab( int _id ); inline void setExclusive( bool _on ) { m_exclusive = _on; } int activeTab(); public slots: void setActiveTab( int _id ); protected: bool tabState( int _id ); void setTabState( int _id, bool _checked ); bool allHidden(); protected slots: void hideAll( int _exception = -1 ); void tabClicked( int _id ); private: QMap > m_tabs; QBoxLayout * m_layout; bool m_exclusive; signals: void allWidgetsHidden(); void widgetShown(); } ; #endif lmms-1.1.3/include/tab_button.h000066400000000000000000000026361247673406200164430ustar00rootroot00000000000000/* * tab_button.h - declaration of class tabButton * * Copyright (c) 2005-2007 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TAB_BUTTON_H #define _TAB_BUTTON_H #include class tabButton : public QPushButton { Q_OBJECT public: tabButton( const QString & _text, int _id, QWidget * _parent ) : QPushButton( _text, _parent ), m_id( _id ) { setCheckable( true ); connect( this, SIGNAL( clicked() ), this, SLOT( slotClicked() ) ); } ~tabButton() { } signals: void clicked( int ); protected slots: void slotClicked() { emit clicked( m_id ); } private: int m_id; } ; #endif lmms-1.1.3/include/tab_widget.h000066400000000000000000000034151247673406200164070ustar00rootroot00000000000000/* * tab_widget.h - LMMS-tabwidget * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TAB_WIDGET_H #define _TAB_WIDGET_H #include #include class tabWidget : public QWidget { Q_OBJECT public: tabWidget( const QString & _caption, QWidget * _parent ); virtual ~tabWidget(); void addTab( QWidget * _w, const QString & _name, int _idx = -1 ); void setActiveTab( int _idx ); inline int activeTab() const { return( m_activeTab ); } protected: virtual void mousePressEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ); virtual void wheelEvent( QWheelEvent * _we ); private: struct widgetDesc { QWidget * w; // ptr to widget QString name; // name for widget int nwidth; // width of name when painting } ; typedef QMap widgetStack; widgetStack m_widgets; int m_activeTab; QString m_caption; quint8 m_tabheight; } ; #endif lmms-1.1.3/include/templates.h000066400000000000000000000021441247673406200162720ustar00rootroot00000000000000/* * templates.h - miscellanous templates and algorithms * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TEMPLATES_H #define _TEMPLATES_H #include template inline T tLimit( const T x, const T x1, const T x2 ) { return qBound( x1, x, x2 ); } #endif lmms-1.1.3/include/text_float.h000066400000000000000000000037221247673406200164500ustar00rootroot00000000000000/* * text_float.h - class textFloat, a floating text-label * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef TEXT_FLOAT_H #define TEXT_FLOAT_H #include #include #include "export.h" class EXPORT textFloat : public QWidget { Q_OBJECT public: textFloat(); virtual ~textFloat() { } void setTitle( const QString & _title ); void setText( const QString & _text ); void setPixmap( const QPixmap & _pixmap ); void setVisibilityTimeOut( int _msecs ); static textFloat * displayMessage( const QString & _msg, int _timeout = 2000, QWidget * _parent = NULL, int _add_y_margin = 0 ); static textFloat * displayMessage( const QString & _title, const QString & _msg, const QPixmap & _pixmap = QPixmap(), int _timeout = 2000, QWidget * _parent = NULL ); void moveGlobal( QWidget * _w, const QPoint & _offset ) { move( _w->mapToGlobal( QPoint( 0, 0 ) )+_offset ); } protected: virtual void paintEvent( QPaintEvent * _me ); virtual void mousePressEvent( QMouseEvent * _me ); private: void updateSize(); QString m_title; QString m_text; QPixmap m_pixmap; }; #endif lmms-1.1.3/include/timeline.h000066400000000000000000000074701247673406200161110ustar00rootroot00000000000000/* * timeline.h - class timeLine, representing a time-line with position marker * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TIMELINE_H #define _TIMELINE_H #include #include "song.h" class QPixmap; class nStateButton; class textFloat; class timeLine : public QWidget, public JournallingObject { Q_OBJECT public: enum AutoScrollStates { AutoScrollEnabled, AutoScrollDisabled } ; enum LoopPointStates { LoopPointsDisabled, LoopPointsEnabled } ; enum BehaviourAtStopStates { BackToZero, BackToStart, KeepStopPosition } ; timeLine( int _xoff, int _yoff, float _ppt, song::playPos & _pos, const MidiTime & _begin, QWidget * _parent ); virtual ~timeLine(); inline song::playPos & pos() { return( m_pos ); } AutoScrollStates autoScroll() const { return m_autoScroll; } BehaviourAtStopStates behaviourAtStop() const { return m_behaviourAtStop; } bool loopPointsEnabled() const { return m_loopPoints == LoopPointsEnabled; } inline const MidiTime & loopBegin() const { return ( m_loopPos[0] < m_loopPos[1] ) ? m_loopPos[0] : m_loopPos[1]; } inline const MidiTime & loopEnd() const { return ( m_loopPos[0] > m_loopPos[1] ) ? m_loopPos[0] : m_loopPos[1]; } inline void savePos( const MidiTime & _pos ) { m_savedPos = _pos; } inline const MidiTime & savedPos() const { return m_savedPos; } inline void setPixelsPerTact( float _ppt ) { m_ppt = _ppt; update(); } void addToolButtons( QWidget * _tool_bar ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "timeline"; } inline int markerX( const MidiTime & _t ) const { return m_xOffset + static_cast( ( _t - m_begin ) * m_ppt / MidiTime::ticksPerTact() ); } public slots: void updatePosition( const MidiTime & ); void updatePosition() { updatePosition( MidiTime() ); } void toggleAutoScroll( int _n ); void toggleLoopPoints( int _n ); void toggleBehaviourAtStop( int _n ); protected: virtual void paintEvent( QPaintEvent * _pe ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); private: static QPixmap * s_timeLinePixmap; static QPixmap * s_posMarkerPixmap; static QPixmap * s_loopPointBeginPixmap; static QPixmap * s_loopPointEndPixmap; static QPixmap * s_loopPointDisabledPixmap; AutoScrollStates m_autoScroll; LoopPointStates m_loopPoints; BehaviourAtStopStates m_behaviourAtStop; bool m_changedPosition; int m_xOffset; int m_posMarkerX; float m_ppt; song::playPos & m_pos; const MidiTime & m_begin; MidiTime m_loopPos[2]; MidiTime m_savedPos; textFloat * m_hint; enum actions { NoAction, MovePositionMarker, MoveLoopBegin, MoveLoopEnd } m_action; int m_moveXOff; signals: void positionChanged( const MidiTime & _t ); void loopPointStateLoaded( int _n ); } ; #endif lmms-1.1.3/include/tool_button.h000066400000000000000000000035631247673406200166520ustar00rootroot00000000000000/* * tool_button.h - declaration of class toolButton * * Copyright (c) 2005-2006 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TOOL_BUTTON_H #define _TOOL_BUTTON_H #include #include class toolButton : public QToolButton { Q_OBJECT public: toolButton( const QPixmap & _pixmap, const QString & _tooltip, QObject * _receiver, const char * _slot, QWidget * _parent ); inline toolButton( QWidget * _parent ) : QToolButton( _parent ), m_colorStandard( s_stdColor ), m_colorHighlighted( s_hlColor ) { // setup colors leaveEvent( NULL ); } virtual ~toolButton(); inline void setStandardColor( const QColor & _color ) { m_colorStandard = _color; } inline void setHighlightedColor( const QColor & _color ) { m_colorHighlighted = _color; } protected: virtual void enterEvent( QEvent * _ev ); virtual void leaveEvent( QEvent * _ev ); private slots: void toggledBool( bool _on ); private: static const QColor s_stdColor; static const QColor s_hlColor; QColor m_colorStandard; QColor m_colorHighlighted; } ; #endif lmms-1.1.3/include/tooltip.h000066400000000000000000000021551247673406200157700ustar00rootroot00000000000000/* * tooltip.h - namespace toolTip, a tooltip-wrapper for LMMS * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TOOLTIP_H #define _TOOLTIP_H #include #include "export.h" class QWidget; struct toolTip { static void EXPORT add( QWidget * _w, const QString & _txt ); } ; #endif lmms-1.1.3/include/track.h000066400000000000000000000303771247673406200154110ustar00rootroot00000000000000/* * track.h - declaration of classes concerning tracks -> necessary for all * track-like objects (beat/bassline, sample-track...) * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef TRACK_H #define TRACK_H #include #include #include #include #include "lmms_basics.h" #include "MidiTime.h" #include "rubberband.h" #include "JournallingObject.h" #include "AutomatableModel.h" #include "ModelView.h" class QMenu; class QPushButton; class pixmapButton; class textFloat; class track; class trackContentObjectView; class TrackContainer; class TrackContainerView; class trackContentWidget; class trackView; typedef QWidget trackSettingsWidget; const int DEFAULT_SETTINGS_WIDGET_WIDTH = 224; const int TRACK_OP_WIDTH = 78; // This shaves 150-ish pixels off track buttons, // ruled from config: ui.compacttrackbuttons const int DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT = 96; const int TRACK_OP_WIDTH_COMPACT = 60; /*! The minimum track height in pixels * * Tracks can be resized by shift-dragging anywhere inside the track * display. This sets the minimum size in pixels for a track. */ const int MINIMAL_TRACK_HEIGHT = 8; const int DEFAULT_TRACK_HEIGHT = 32; const int TCO_BORDER_WIDTH = 2; class trackContentObject : public Model, public JournallingObject { Q_OBJECT mapPropertyFromModel(bool,isMuted,setMuted,m_mutedModel); mapPropertyFromModel(bool,isSolo,setSolo,m_soloModel); public: trackContentObject( track * _track ); virtual ~trackContentObject(); inline track * getTrack() const { return m_track; } inline const QString & name() const { return m_name; } inline void setName( const QString & _name ) { m_name = _name; emit dataChanged(); } virtual QString displayName() const { return name(); } inline const MidiTime & startPosition() const { return m_startPosition; } inline MidiTime endPosition() const { const int sp = m_startPosition; return sp + m_length; } inline const MidiTime & length() const { return m_length; } virtual void movePosition( const MidiTime & _pos ); virtual void changeLength( const MidiTime & _length ); virtual trackContentObjectView * createView( trackView * _tv ) = 0; public slots: void copy(); void paste(); void toggleMute(); signals: void lengthChanged(); void positionChanged(); void destroyedTCO(); private: enum Actions { NoAction, Move, Resize } ; track * m_track; QString m_name; MidiTime m_startPosition; MidiTime m_length; BoolModel m_mutedModel; BoolModel m_soloModel; friend class trackContentObjectView; } ; class trackContentObjectView : public selectableObject, public ModelView { Q_OBJECT // theming qproperties Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) public: trackContentObjectView( trackContentObject * _tco, trackView * _tv ); virtual ~trackContentObjectView(); bool fixedTCOs(); inline trackContentObject * getTrackContentObject() { return m_tco; } // qproperty access func QColor fgColor() const; QColor textColor() const; void setFgColor( const QColor & _c ); void setTextColor( const QColor & _c ); public slots: virtual bool close(); void cut(); void remove(); protected: virtual void constructContextMenu( QMenu * ) { } virtual void contextMenuEvent( QContextMenuEvent * _cme ); virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void leaveEvent( QEvent * _e ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); void setAutoResizeEnabled( bool _e = false ); float pixelsPerTact(); inline trackView * getTrackView() { return m_trackView; } protected slots: void updateLength(); void updatePosition(); private: enum Actions { NoAction, Move, MoveSelection, Resize } ; static textFloat * s_textFloat; trackContentObject * m_tco; trackView * m_trackView; Actions m_action; bool m_autoResize; int m_initialMouseX; textFloat * m_hint; MidiTime m_oldTime;// used for undo/redo while mouse-button is pressed // qproperty fields QColor m_fgColor; QColor m_textColor; } ; class trackContentWidget : public QWidget, public JournallingObject { Q_OBJECT // qproperties for track background gradients Q_PROPERTY( QBrush darkerColor READ darkerColor WRITE setDarkerColor ) Q_PROPERTY( QBrush lighterColor READ lighterColor WRITE setLighterColor ) public: trackContentWidget( trackView * _parent ); virtual ~trackContentWidget(); /*! \brief Updates the background tile pixmap. */ void updateBackground(); void addTCOView( trackContentObjectView * _tcov ); void removeTCOView( trackContentObjectView * _tcov ); void removeTCOView( int _tco_num ) { if( _tco_num >= 0 && _tco_num < m_tcoViews.size() ) { removeTCOView( m_tcoViews[_tco_num] ); } } MidiTime endPosition( const MidiTime & _pos_start ); // qproperty access methods QBrush darkerColor() const; QBrush lighterColor() const; void setDarkerColor( const QBrush & _c ); void setLighterColor( const QBrush & _c ); public slots: void update(); void changePosition( const MidiTime & _new_pos = MidiTime( -1 ) ); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ); virtual QString nodeName() const { return "trackcontentwidget"; } virtual void saveSettings( QDomDocument& doc, QDomElement& element ) { Q_UNUSED(doc) Q_UNUSED(element) } virtual void loadSettings( const QDomElement& element ) { Q_UNUSED(element) } private: track * getTrack(); MidiTime getPosition( int _mouse_x ); trackView * m_trackView; typedef QVector tcoViewVector; tcoViewVector m_tcoViews; QPixmap m_background; // qproperty fields QBrush m_darkerColor; QBrush m_lighterColor; } ; class trackOperationsWidget : public QWidget { Q_OBJECT public: trackOperationsWidget( trackView * _parent ); ~trackOperationsWidget(); protected: virtual void mousePressEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); private slots: void cloneTrack(); void removeTrack(); void updateMenu(); void recordingOn(); void recordingOff(); void clearTrack(); private: static QPixmap * s_grip; trackView * m_trackView; QPushButton * m_trackOps; pixmapButton * m_muteBtn; pixmapButton * m_soloBtn; friend class trackView; signals: void trackRemovalScheduled( trackView * _t ); } ; // base-class for all tracks class EXPORT track : public Model, public JournallingObject { Q_OBJECT mapPropertyFromModel(bool,isMuted,setMuted,m_mutedModel); mapPropertyFromModel(bool,isSolo,setSolo,m_soloModel); public: typedef QVector tcoVector; enum TrackTypes { InstrumentTrack, BBTrack, SampleTrack, EventTrack, VideoTrack, AutomationTrack, HiddenAutomationTrack, NumTrackTypes } ; track( TrackTypes _type, TrackContainer * _tc ); virtual ~track(); static track * create( TrackTypes _tt, TrackContainer * _tc ); static track * create( const QDomElement & _this, TrackContainer * _tc ); void clone(); // pure virtual functions TrackTypes type() const { return m_type; } virtual bool play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _frame_base, int _tco_num = -1 ) = 0; virtual trackView * createView( TrackContainerView * _view ) = 0; virtual trackContentObject * createTCO( const MidiTime & _pos ) = 0; virtual void saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _parent ) = 0; virtual void loadTrackSpecificSettings( const QDomElement & _this ) = 0; virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); void setSimpleSerializing() { m_simpleSerializingMode = true; } // -- for usage by trackContentObject only --------------- trackContentObject * addTCO( trackContentObject * _tco ); void removeTCO( trackContentObject * _tco ); // ------------------------------------------------------- void deleteTCOs(); int numOfTCOs(); trackContentObject * getTCO( int _tco_num ); int getTCONum( trackContentObject * _tco ); const tcoVector & getTCOs() const { return( m_trackContentObjects ); } void getTCOsInRange( tcoVector & _tco_v, const MidiTime & _start, const MidiTime & _end ); void swapPositionOfTCOs( int _tco_num1, int _tco_num2 ); void insertTact( const MidiTime & _pos ); void removeTact( const MidiTime & _pos ); tact_t length() const; inline TrackContainer* trackContainer() const { return m_trackContainer; } // name-stuff virtual const QString & name() const { return( m_name ); } virtual QString displayName() const { return( name() ); } using Model::dataChanged; inline int getHeight() { return ( m_height >= MINIMAL_TRACK_HEIGHT ? m_height : DEFAULT_TRACK_HEIGHT ); } inline void setHeight( int _height ) { m_height = _height; } public slots: virtual void setName( const QString & _new_name ) { m_name = _new_name; emit nameChanged(); } void toggleSolo(); private: TrackContainer* m_trackContainer; TrackTypes m_type; QString m_name; int m_height; BoolModel m_mutedModel; BoolModel m_soloModel; bool m_mutedBeforeSolo; bool m_simpleSerializingMode; tcoVector m_trackContentObjects; friend class trackView; signals: void destroyedTrack(); void nameChanged(); void trackContentObjectAdded( trackContentObject * ); } ; class trackView : public QWidget, public ModelView, public JournallingObject { Q_OBJECT public: trackView( track * _track, TrackContainerView* tcv ); virtual ~trackView(); inline const track * getTrack() const { return( m_track ); } inline track * getTrack() { return( m_track ); } inline TrackContainerView* trackContainerView() { return m_trackContainerView; } inline trackOperationsWidget * getTrackOperationsWidget() { return( &m_trackOperationsWidget ); } inline trackSettingsWidget * getTrackSettingsWidget() { return( &m_trackSettingsWidget ); } inline trackContentWidget * getTrackContentWidget() { return( &m_trackContentWidget ); } bool isMovingTrack() const { return( m_action == MoveTrack ); } virtual void update(); public slots: virtual bool close(); protected: virtual void modelChanged(); virtual void saveSettings( QDomDocument& doc, QDomElement& element ) { Q_UNUSED(doc) Q_UNUSED(element) } virtual void loadSettings( const QDomElement& element ) { Q_UNUSED(element) } virtual QString nodeName() const { return "trackview"; } virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ); private: enum Actions { NoAction, MoveTrack, ResizeTrack } ; track * m_track; TrackContainerView * m_trackContainerView; trackOperationsWidget m_trackOperationsWidget; trackSettingsWidget m_trackSettingsWidget; trackContentWidget m_trackContentWidget; Actions m_action; friend class trackLabelButton; private slots: void createTCOView( trackContentObject * _tco ); } ; #endif lmms-1.1.3/include/track_label_button.h000066400000000000000000000030351247673406200201320ustar00rootroot00000000000000/* * track_label_button.h - class trackLabelButton * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TRACK_LABEL_BUTTON_H #define _TRACK_LABEL_BUTTON_H #include class trackView; class trackLabelButton : public QToolButton { Q_OBJECT public: trackLabelButton( trackView * _tv, QWidget * _parent ); virtual ~trackLabelButton(); public slots: void rename(); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseDoubleClickEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); private: trackView * m_trackView; QString m_iconName; } ; #endif lmms-1.1.3/include/transformable_auto_model.h000066400000000000000000000042251247673406200213450ustar00rootroot00000000000000/* * transformable_auto_model.h - template transformableAutoModel * * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TRANSFORMABLE_AUTO_MODEL_H #define _TRANSFORMABLE_AUTO_MODEL_H #include "AutomatableModel.h" //#include "automatable_model_templates.h" template struct AutoModelTransformer { inline virtual T transform( const T & _val ) const { return( _val ); } } ; template class transformableAutoModel : public AutomatableModel { public: transformableAutoModel( const AutoModelTransformer * _transformer, const T _val = 0, const T _min = 0, const T _max = 0, const T _step = defaultRelStep(), Model * _parent = NULL, bool _default_constructed = false ) : AutomatableModel( _val, _min, _max, _step, _parent, _default_constructed ), m_transformer( _transformer ) { } inline virtual ~transformableAutoModel() { } inline virtual void setValue( const T _value ) { autoModel::setValue( _value ); if( m_transformer != NULL ) { m_transformedValue = m_transformer->transform( autoModel::value() ); } else { m_transformedValue = autoModel::value(); } } inline virtual T value() const { return( m_transformedValue ); } private: T m_transformedValue; const AutoModelTransformer * m_transformer; } ; #endif lmms-1.1.3/include/update_event.h000066400000000000000000000021501247673406200167540ustar00rootroot00000000000000/* * update_event.h - signal GUI updates * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _UPDATE_EVENT_H #define _UPDATE_EVENT_H #include "custom_events.h" class updateEvent : public QEvent { public: updateEvent() : QEvent( (QEvent::Type)customEvents::GUI_UPDATE ) { } } ; #endif lmms-1.1.3/include/versioninfo.h000066400000000000000000000006751247673406200166440ustar00rootroot00000000000000#ifdef __GNUC__ #define GCC_VERSION "GCC "__VERSION__ #else #define GCC_VERSION "unknown compiler" #endif #ifdef LMMS_HOST_X86 #define MACHINE "i386" #endif #ifdef LMMS_HOST_X86_64 #define MACHINE "x86_64" #endif #ifndef MACHINE #define MACHINE "unknown processor" #endif #ifdef LMMS_BUILD_LINUX #define PLATFORM "Linux" #endif #ifdef LMMS_BUILD_APPLE #define PLATFORM "OS X" #endif #ifdef LMMS_BUILD_WIN32 #define PLATFORM "win32" #endif lmms-1.1.3/include/visualization_widget.h000066400000000000000000000031541247673406200205420ustar00rootroot00000000000000/* * visualization_widget.h - widget for visualization of sound-data * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of"the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VISUALIZATION_WIDGET #define _VISUALIZATION_WIDGET #include #include #include "Mixer.h" class visualizationWidget : public QWidget { Q_OBJECT public: enum visualizationTypes { Simple // add more here } ; visualizationWidget( const QPixmap & _bg, QWidget * _parent, visualizationTypes _vtype = Simple ); virtual ~visualizationWidget(); void setActive( bool _active ); protected: virtual void paintEvent( QPaintEvent * _pe ); virtual void mousePressEvent( QMouseEvent * _me ); protected slots: void updateAudioBuffer(); private: QPixmap s_background; QPointF * m_points; sampleFrame * m_buffer; bool m_active; } ; #endif lmms-1.1.3/include/volume.h000066400000000000000000000023371247673406200156070ustar00rootroot00000000000000/* * volume.h - declaration of some constants and types, concerning the volume * of a note * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VOLUME_H #define _VOLUME_H #include "lmmsconfig.h" #include "lmms_basics.h" #include "Midi.h" const volume_t MinVolume = 0; const volume_t MaxVolume = 200; const volume_t DefaultVolume = 100; typedef struct { float vol[2]; } stereoVolumeVector; #endif lmms-1.1.3/lmms.1000066400000000000000000000055341247673406200135400ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH LMMS 1 "September 28, 2006" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME lmms \- software for easy music production .SH SYNOPSIS .B lmms .RB "[ \--\fBrender\fP \fIfile\fP ] [options]" .br .B lmms .RB "[ \--\fBupgrade\fP \fIin\fP \fIout\fP ]" .br .B lmms .RB "[ \--\fBdump\fP \fIin\fP ]" .br .B lmms .RI "[ file ]" .SH DESCRIPTION .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. .B LMMS LMMS is a free cross-platform alternative to commercial programs like FL Studio®, which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface. LMMS features components such as a Song Editor, a Beat+Bassline Editor, a Piano Roll, an FX Mixer as well as many powerful instruments and effects. .SH OPTIONS .IP "\fB\-r, --render\fP \fIproject-file\fP Render given file to either a wav\- or ogg\-file. See \fB\-f\fP for details .IP "\fB\-o, --output\fP \fIfile\fP render into \fIfile\fP .IP "\fB\-f, --output-format\fP \fIformat\fP Specify format of render-output where \fIformat\fP is either 'wav' or 'ogg' .IP "\fB\-s, --samplerate\fP \fIsamplerate\fP Specify output samplerate in Hz - range is 44100 (default) to 192000 .IP "\fB\-b, --bitrate\fP \fIbitrate\fP Specify output bitrate in kHz (for OGG encoding only), default is 160 .IP "\fB\-i, --interpolation\fP \fImethod\fP Specify interpolation method - possible values are \fIlinear\fP, \fIsincfastest\fP (default), \fIsincmedium\fP, \fIsincbest\fP .IP "\fB\-x, --oversampling\fP \fIvalue\fP Specify oversampling, possible values: 1, 2 (default), 4, 8 .IP "\fB\-u, --upgrade\fP \fIin\fP \fIout\fP Upgrade file \fIin\fP and save as \fIout\fP .IP "\fB\-d, --dump\fP \fIin\fP Dump XML of compressed file \fIin\fP (i.e. MMPZ-file) .IP "\fB\-v, --version Show version information and exit. .IP "\fB\-h, --help Show usage information and exit. .SH SEE ALSO .BR http://lmms.sf.net/ .BR http://lmms.sf.net/wiki/ .SH AUTHORS .BR Tobias Doerffel , Paul Giblock and others. See AUTHORS for details. lmms-1.1.3/lmms.rc.in000066400000000000000000000013431247673406200144030ustar00rootroot00000000000000lmmsicon ICON data/lmms.ico #include VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,93,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" //language ID = U.S. English, charset = Windows, Multilingual BEGIN VALUE "Comments", "http://lmms.sf.net\0" VALUE "CompanyName", "LMMS Developers\0" VALUE "FileDescription", "LMMS\0" VALUE "FileVersion", "@VERSION@\0" VALUE "LegalCopyright", "Copyright (c) 2004-2014 LMMS Developers\0" VALUE "OriginalFilename", "lmms.exe\0" VALUE "ProductName", "LMMS\0" VALUE "ProductVersion", "@VERSION@\0" END END END lmms-1.1.3/lmms.spec.in000066400000000000000000000133771247673406200147430ustar00rootroot00000000000000# Configuration variables %define name lmms %define version 0.3.0 %define rel 1 %define release %{rel}%{?disttag}%{?repotag} # Define what you can/want to build: %define with_sdl 0%{nil} %define with_jack 1%{nil} %define with_vorbis 1%{nil} %define with_flac 1%{nil} %define with_sr 1%{nil} %define with_sf 1%{nil} # Build by setting these defines on the command line, for example: # rpmbuild --define 'disttag .EL' --define 'repotag .fc6' %{!?desktop_vendor: %{expand: %%define desktop_vendor rpmfarm}} # This can be changed at build time: # rpmbuild --define 'desktop_vendor RPMfarm' #-------------------------------------------------------------------- Name: %{name} Version: %{version} Release: %{release} Summary: powerful sequencer-, synthesizer- and sample-studio for Linux Summary(de): Leistungsfaehiges Sequenzer-, Synthesizer- und Sample-Studio fuer Linux License: GPL URL: http://lmms.io/ Group: Applications/Multimedia Provides: lmms = %{version}-%{release} BuildRequires: gcc gcc-c++ libstdc++-devel autoconf automake libtool make BuildRequires: alsa-lib-devel BuildRequires: qt-devel > 3.0 # ------------- BuildRequires: %if %{with_vorbis} BuildRequires: libvorbis libvorbis-devel %endif %if %{with_sdl} BuildRequires: SDL SDL-devel SDL_sound %endif %if %{with_sr} BuildRequires: libsamplerate libsamplerate-devel %endif %if %{with_sf} BuildRequires: libsndfile libsndfile-devel %endif %if %{with_jack} BuildRequires: jack-audio-connection-kit-devel %endif %if %{with_flac} BuildRequires: flac-devel %endif # ------------- Requires: Requires: qt >= 3.0 alsa-lib %if %{with_sr} Requires: libsamplerate %endif %if %{with_sf} Requires: libsndfile %endif %if %{with_jack} Requires: jack-audio-connection-kit %endif %if %{with_vorbis} Requires: libvorbis %endif %if %{with_flac} Requires: flac %endif %if %{with_sdl} Requires: SDL_sound %endif Requires: lmms-data Source: %{name}-%{version}.tar.bz2 Patch1: %{name}-%{version}-patch BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot Prefix: %{_prefix} %description LMMS aims to be a free alternative to popular (but commercial and closed- source) programs like FruityLoops, Cubase and Logic giving you the ability of producing music with your computer by creating/synthesizing sounds, arranging samples, playing live with keyboard and much more... LMMS combines the features of a tracker-/sequencer-program (pattern-/channel-/ sample-/song-/effect-management) and those of powerful synthesizers and samplers in a modern, user-friendly and easy to use graphical user-interface. LMMS is still in heavy development, so with this version please don't expect a complete, ready and bugfree program!! %description -l de LMMS ist eine freie Alternative zu bekannten (aber kommerziellen und Closed-Source-) Programmen wie FruityLoops, Cubase und Logic, die Ihnen die Moeglichkeit geben, mit Ihrem Computer Musik zu produzieren, indem Sie Klaenge kreieren/synthetisieren, Samples anordnen, mit dem Keyboard live spielen usw.... LMMS kombiniert die Funktionen eines Tracker-/Sequenzer-Programms (Pattern-/ Kanal-/Sample-/Song-/Effekt-Management) und die von leistungsfaehigen Synthesizern und Samplern in einer modernen, benutzerfreundlichen und einfach zu benutzenden grafischen Oberflaeche. Derzeit befindet sich LMMS komplett in Entwicklung. Also erwarten Sie bitte mit dieser Version nicht ein vollstaendiges, fertiges und fehlerfreies Programm!! %package data Summary: samples, presets, demo-projects and localization-files for LMMS Summary(de): Samples, Presets, Demo-Projekte und Lokalisierungsdateien fuer LMMS Group: Applications/Multimedia Provides: lmms-data = %{version}-%{release} %description data This package contains platform-independent data and resources for LMMS, e.g. samples, presets and demo-projects. %description data -l de Dieses Paket beinhaltet plattform-unabhaengige Daten und Resourcen fuer LMMS, wie z.B. Samples, Presets und Demo-Projekte. %prep %setup -n %{name}-%{version} %patch1 -p1 -b .EL %build %configure \ %if !%{with_jack} --without-jack \ %endif %if !%{with_sdl} --without-sdl \ --without-sdlsound \ %endif %if !%{with_vorbis} --without-vorbis \ %endif %if !%{with_flac} --without-flac \ %endif %if !%{with_sr} --without-libsrc \ %endif %if !%{with_sf} --without-libsf \ %endif %{__make} %{?_smp_mflags} # Create a desktop menu entry %{__cat} > %{name}.desktop << EOF [Desktop Entry] Name=LMMS Comment=Powerful sequencer-, synthesizer- and sample-studio for Linux Exec=lmms Icon=%{_datadir}/%{name}/themes/default/icon.png Terminal=false Type=Application Categories=Application;AudioVideo;X-Fedora;X-RPMfarm; Encoding=UTF-8 EOF %install %{__rm} -rf %{buildroot} make DESTDIR=$RPM_BUILD_ROOT install # Install menu entry %{__mkdir_p} %{buildroot}%{_datadir}/applications desktop-file-install \ --vendor %{desktop_vendor} \ --dir %{buildroot}%{_datadir}/applications \ %{name}.desktop || : %clean %{__rm} -rf %{buildroot} %files %defattr(-, root, root, 0755) %doc AUTHORS ChangeLog COPYING README TODO %{_bindir}/lmms %dir %{_libdir}/lmms %{_libdir}/lmms/* %{_mandir}/man*/lmms.* %{_datadir}/applications/%{desktop_vendor}-%{name}.desktop %files data %defattr(-,root,root) %dir %{_datadir}/lmms %{_datadir}/lmms/* %changelog * Fri Apr 13 2007 Eric Lassauge - 0.2.1-1 - build for FC6 - added dependencies and build configuration - added .desktop file * Tue Sep 20 2005 Tobias Doerffel - added JACK-dependencies * Fri Jul 22 2005 Tobias Doerffel - added more dependencies for builds under SuSE * Sat Jun 25 2005 Tobias Doerffel - splitted package into lmms and lmms-data - additional requirements - updated project-homepage and email-address of packager * Thu May 12 2005 Tobias Doerffel - created lmms.spec.in lmms-1.1.3/lmmsconfig.h.in000066400000000000000000000032731247673406200154200ustar00rootroot00000000000000#cmakedefine LMMS_BUILD_LINUX #cmakedefine LMMS_BUILD_WIN32 #cmakedefine LMMS_BUILD_WIN64 #cmakedefine LMMS_BUILD_APPLE #cmakedefine LMMS_HOST_X86 #cmakedefine LMMS_HOST_X86_64 #cmakedefine LMMS_HAVE_ALSA #cmakedefine LMMS_HAVE_FLUIDSYNTH #cmakedefine LMMS_HAVE_JACK #cmakedefine LMMS_HAVE_OGGVORBIS #cmakedefine LMMS_HAVE_OSS #cmakedefine LMMS_HAVE_PORTAUDIO #cmakedefine LMMS_HAVE_PULSEAUDIO #cmakedefine LMMS_HAVE_SDL #cmakedefine LMMS_HAVE_STK #cmakedefine LMMS_HAVE_VST #cmakedefine LMMS_HAVE_STDINT_H #cmakedefine LMMS_HAVE_STDLIB_H #cmakedefine LMMS_HAVE_PTHREAD_H #cmakedefine LMMS_HAVE_UNISTD_H #cmakedefine LMMS_HAVE_SYS_TYPES_H #cmakedefine LMMS_HAVE_SYS_IPC_H #cmakedefine LMMS_HAVE_SEMAPHORE_H #cmakedefine LMMS_HAVE_SYS_SHM_H #cmakedefine LMMS_HAVE_SYS_TIME_H #cmakedefine LMMS_HAVE_SYS_WAIT_H #cmakedefine LMMS_HAVE_SYS_SELECT_H #cmakedefine LMMS_HAVE_STDARG_H #cmakedefine LMMS_HAVE_SIGNAL_H #cmakedefine LMMS_HAVE_SCHED_H #cmakedefine LMMS_HAVE_SYS_SOUNDCARD_H #cmakedefine LMMS_HAVE_SOUNDCARD_H #cmakedefine LMMS_HAVE_FCNTL_H #cmakedefine LMMS_HAVE_SYS_IOCTL_H #cmakedefine LMMS_HAVE_CTYPE_H #cmakedefine LMMS_HAVE_STRING_H #cmakedefine LMMS_HAVE_PROCESS_H #cmakedefine LMMS_HAVE_LOCALE_H /* defines for libsamplerate */ /* Target processor clips on negative float to int conversion. */ #cmakedefine CPU_CLIPS_NEGATIVE 1 #ifndef CPU_CLIPS_NEGATIVE #define CPU_CLIPS_NEGATIVE 0 #endif /* Target processor clips on positive float to int conversion. */ #cmakedefine CPU_CLIPS_POSITIVE 1 #ifndef CPU_CLIPS_POSITIVE #define CPU_CLIPS_POSITIVE 0 #endif /* Define if you have C99's lrint function. */ #cmakedefine HAVE_LRINT 1 /* Define if you have C99's lrintf function. */ #cmakedefine HAVE_LRINTF 1 lmms-1.1.3/lmmsversion.h.in000066400000000000000000000003221247673406200156300ustar00rootroot00000000000000#define LMMS_VERSION_MAJOR @VERSION_MAJOR@ #define LMMS_VERSION_MINOR @VERSION_MINOR@ #define LMMS_VERSION_PATCH @VERSION_PATCH@ #define LMMS_VERSION_SUFFIX "@VERSION_SUFFIX@" #define LMMS_VERSION "@VERSION@" lmms-1.1.3/plugins/000077500000000000000000000000001247673406200141605ustar00rootroot00000000000000lmms-1.1.3/plugins/Amplifier/000077500000000000000000000000001247673406200160705ustar00rootroot00000000000000lmms-1.1.3/plugins/Amplifier/Amplifier.cpp000066400000000000000000000060431247673406200205070ustar00rootroot00000000000000/* * Amplifier.cpp - A native amplifier effect plugin with sample-exact amplification * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Amplifier.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT amplifier_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Amplifier", QT_TRANSLATE_NOOP( "pluginBrowser", "A native amplifier plugin" ), "Vesa Kivimäki ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } AmplifierEffect::AmplifierEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) : Effect( &lifier_plugin_descriptor, parent, key ), m_ampControls( this ) { } AmplifierEffect::~AmplifierEffect() { } bool AmplifierEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) { if( !isEnabled() || !isRunning () ) { return( false ); } double outSum = 0.0; const float d = dryLevel(); const float w = wetLevel(); for( fpp_t f = 0; f < frames; ++f ) { // qDebug( "offset %d, value %f", f, m_ampControls.m_volumeModel.value( f ) ); outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; sample_t s[2] = { buf[f][0], buf[f][1] }; // convert vol/pan values to left/right values const float left1 = m_ampControls.m_volumeModel.value() * ( m_ampControls.m_panModel.value() <= 0 ? 1.0 : 1.0 - m_ampControls.m_panModel.value( f ) / 100.0 ); const float right1 = m_ampControls.m_volumeModel.value() * ( m_ampControls.m_panModel.value() >= 0 ? 1.0 : 1.0 + m_ampControls.m_panModel.value() / 100.0 ); // first stage amplification s[0] *= ( left1 / 100.0 ); s[1] *= ( right1 / 100.0 ); // second stage amplification s[0] *= ( m_ampControls.m_leftModel.value() / 100.0 ); s[1] *= ( m_ampControls.m_rightModel.value() / 100.0 ); buf[f][0] = d * buf[f][0] + w * s[0]; buf[f][1] = d * buf[f][1] + w * s[1]; } checkGate( outSum / frames ); return isRunning(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) { return new AmplifierEffect( parent, static_cast( data ) ); } } lmms-1.1.3/plugins/Amplifier/Amplifier.h000066400000000000000000000027061247673406200201560ustar00rootroot00000000000000/* * Amplifier.h - amplifier-effect-plugin * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef AMPLIFIER_H #define AMPLIFIER_H #include "Effect.h" #include "AmplifierControls.h" class AmplifierEffect : public Effect { public: AmplifierEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ); virtual ~AmplifierEffect(); virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames ); virtual EffectControls* controls() { return &m_ampControls; } private: AmplifierControls m_ampControls; friend class AmplifierControls; } ; #endif lmms-1.1.3/plugins/Amplifier/AmplifierControlDialog.cpp000066400000000000000000000046431247673406200231740ustar00rootroot00000000000000/* * AmplifierControlDialog.cpp - control dialog for amplifier effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "AmplifierControlDialog.h" #include "AmplifierControls.h" #include "embed.h" AmplifierControlDialog::AmplifierControlDialog( AmplifierControls* controls ) : EffectControlDialog( controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); setFixedSize( 100, 125 ); knob * volumeKnob = new knob( knobBright_26, this); volumeKnob -> move( 20, 30 ); volumeKnob -> setVolumeKnob( true ); volumeKnob->setModel( &controls->m_volumeModel ); volumeKnob->setLabel( tr( "VOL" ) ); volumeKnob->setHintText( tr( "Volume:" ) + " ", "%" ); knob * panKnob = new knob( knobBright_26, this); panKnob -> move( 60, 30 ); panKnob->setModel( &controls->m_panModel ); panKnob->setLabel( tr( "PAN" ) ); panKnob->setHintText( tr( "Panning:" ) + " ", "" ); knob * leftKnob = new knob( knobBright_26, this); leftKnob -> move( 20, 80 ); leftKnob -> setVolumeKnob( true ); leftKnob->setModel( &controls->m_leftModel ); leftKnob->setLabel( tr( "LEFT" ) ); leftKnob->setHintText( tr( "Left gain:" ) + " ", "%" ); knob * rightKnob = new knob( knobBright_26, this); rightKnob -> move( 60, 80 ); rightKnob -> setVolumeKnob( true ); rightKnob->setModel( &controls->m_rightModel ); rightKnob->setLabel( tr( "RIGHT" ) ); rightKnob->setHintText( tr( "Right gain:" ) + " ", "%" ); } #include "moc_AmplifierControlDialog.cxx" lmms-1.1.3/plugins/Amplifier/AmplifierControlDialog.h000066400000000000000000000024701247673406200226350ustar00rootroot00000000000000/* * AmplifierControlDialog.h - control dialog for amplifier effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef AMPLIFIER_CONTROL_DIALOG_H #define AMPLIFIER_CONTROL_DIALOG_H #include "EffectControlDialog.h" class AmplifierControls; class AmplifierControlDialog : public EffectControlDialog { Q_OBJECT public: AmplifierControlDialog( AmplifierControls* controls ); virtual ~AmplifierControlDialog() { } } ; #endif lmms-1.1.3/plugins/Amplifier/AmplifierControls.cpp000066400000000000000000000047331247673406200222370ustar00rootroot00000000000000/* * AmplifierControls.cpp - controls for amplifier effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "AmplifierControls.h" #include "Amplifier.h" #include "engine.h" #include "song.h" AmplifierControls::AmplifierControls( AmplifierEffect* effect ) : EffectControls( effect ), m_effect( effect ), m_volumeModel( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume" ) ), m_panModel( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning" ) ), m_leftModel( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Left gain" ) ), m_rightModel( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Right gain" ) ) { /* connect( &m_volumeModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); connect( &m_panModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); connect( &m_leftModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); connect( &m_rightModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );*/ } void AmplifierControls::changeControl() { // engine::getSong()->setModified(); } void AmplifierControls::loadSettings( const QDomElement& _this ) { m_volumeModel.loadSettings( _this, "volume" ); m_panModel.loadSettings( _this, "pan" ); m_leftModel.loadSettings( _this, "left" ); m_rightModel.loadSettings( _this, "right" ); } void AmplifierControls::saveSettings( QDomDocument& doc, QDomElement& _this ) { m_volumeModel.saveSettings( doc, _this, "volume" ); m_panModel.saveSettings( doc, _this, "pan" ); m_leftModel.saveSettings( doc, _this, "left" ); m_rightModel.saveSettings( doc, _this, "right" ); } #include "moc_AmplifierControls.cxx" lmms-1.1.3/plugins/Amplifier/AmplifierControls.h000066400000000000000000000036251247673406200217030ustar00rootroot00000000000000/* * AmplifierControls.h - controls for bassboosterx -effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef AMPLIFIER_CONTROLS_H #define AMPLIFIER_CONTROLS_H #include "EffectControls.h" #include "AmplifierControlDialog.h" #include "knob.h" class AmplifierEffect; class AmplifierControls : public EffectControls { Q_OBJECT public: AmplifierControls( AmplifierEffect* effect ); virtual ~AmplifierControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "AmplifierControls"; } virtual int controlCount() { return 4; } virtual EffectControlDialog* createView() { return new AmplifierControlDialog( this ); } private slots: void changeControl(); private: AmplifierEffect* m_effect; FloatModel m_volumeModel; FloatModel m_panModel; FloatModel m_leftModel; FloatModel m_rightModel; friend class AmplifierControlDialog; friend class AmplifierEffect; } ; #endif lmms-1.1.3/plugins/Amplifier/CMakeLists.txt000066400000000000000000000003321247673406200206260ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(amplifier Amplifier.cpp AmplifierControls.cpp AmplifierControlDialog.cpp MOCFILES AmplifierControls.h AmplifierControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/Amplifier/artwork.png000066400000000000000000000366131247673406200203000ustar00rootroot00000000000000PNG  IHDRd}YQP pHYs  tIME;Q8tEXtCommentCreated with GIMPW IDATx[U6\>-tk! RKTh!dqI,ac`Kĕ_R1qEcd#ĮKUI8 -n%u>{ߚsa&&cTe1^Y$@ $#AP?7a'AYO9 `.z ½y+_[#iff֌9p1@3F@<q=NI c+171"w I6Zo K(?fYoZCE(I0( IL<|]b.{NoOƶXGGWnG?~ y7ug$|gzc 0r6}{?Ň۾OON Zȯmƌo~W]w1vOO$_+^\-''??ew͛7£o6w޽s?q}3Y'6hoȏ+ ݾsHzk~ћ7W7o|[W, ifGo}qy/߿"冇@3niMXկykW-r|t|yqs_w?m6xo?{ˋe ~_z˛e//}ggg}=%hћ[~[=,gf׿h{r|$moѧ>/~=Gn^z?p[.wק?JGk̎y7?;;NNN?nfݻrzH$Bj[F^; jٞ?[o1}O~ⓡ{z_1ڵcvo}|ه?򡧿]\\n<cff}{:nuOO"dƓWo}[ZۜlK?pyy_1k~g~oͿ/]{k.HM뭷__{}{?A,l@ !Ir5vu?}?W"$H>Gn}k~j1C )ppЇ>z;o~"Io{ɿxݲv;El7f''fhfo;z_ _1m_oo~vϟ߿]Jm?>:5ʯ۷m_k../D;1u.lCj*&prro.vw#BnI(1B ;/eYƕh$U_Oߍŗ%Dkc v߿{HˌJlo|#g^ռnwP9bt_׮\zz "U;/S5C0 4kBW~>{pʵo޼qNMܽ5s~֌n{現Q>OݽsOPLlf {k]?;{/g\ pt\vRno{^uGGGGGG?|W[ڵkǍZ*MkͶP3# "B`RD4,O _zK<@o[۷on,˭[w R>zkg|nY6}s|!w{zz].Dzqvzg2<#B./dޭLjz͇o-3fӟ|}.1| 3{,VLo}k;~z_<ȣ_{eaC[L23!}] xٻnY0k{v1M| _x7^rnŏ/hӻ$ vˋG{ڵkf rzz~Gqf7;}brfZt3[v ᣵ@'+WُIq||XFի=XH??Gg?ٗe~Ԭe{k7\/IJn;?ilm7I#4ɕ+o{t۷h3+ߓlZ?[o~v,c-c\~_7]j}=>:jݒ<99雍ݽ{7 IXƮ}ܾsm:|%_8:^^NOO{~W~g>|mo۫^ʿ#kԛ䷼M>AA3IBcomO|xw|wP@[3?ȓO>w/!=} zP,czڽ~Fi''S衳^xwg~[n[k[;>9~?o| טp}Cggg+ЇzkXHx+W"HI r("B{{o|'eh_G..v#<@_7}ӧ?l$Oя}}7ֶ2~vv8;{oF}{lZktx<쳭ݲsᮐGD&a'~'뻾۾NNݽw5s綻vK^zm|衇.//]kׇX 'W\=w#|wM;w"1bTt̺pٍl ge'W5ۣn{7e t|rc\^?:>n7n݁tz4B޻s=lBq<99;899, RYXvc{}5ow%]֋ m7nYF^dk}ٜߓp1F(o !c!-CQMCS 3_CuoxΥ'iY4$,SDP$XAGV| fB+3V+A{g j)$gYP, ˛h?MLK OciO#?'{xqSO}ⓟ<:>>qqv5ӭg|_qE? c^[ncw''T+^,@F@("|(n+< e4bJK2bPH)Ґ$ RLp= \l)Ѓ 4uqqo|vﺏ@/eVVe$3JB;ȼ =G\FUiB!5ʚ\ya 0\fQü8>8pB Cf]~>`W]@V5 q]jZgu*]$h]$36È0!.0C=P Q[\JJyք_t| uQH@:G֎ 3f.B͔k\ʫb- 5"0/5YlCFv wՇdl~0UQu3~bܭucN5ã7pP3 4 ťݙ ל5bя~/})XP ddxZ+n'W~>ȭC 5L[Z'-_]F@[9n{߹1jQ̇N\ Y{ꣿGG''-+UWPSsDe˱a|fAq^paVL^d2PdP 2A@337o>e^+&;T/fF>яݺuǬWb  HJtP1WE"7ZoޤW( j'3bTZ1szYիW ѳdxViD>VSO}[$OOOA概D"d3=416&FfA2 WWt ȇKI =iH5"f,g CK ˠiCǘ}"YzZo{-c{㯸r9x!Nf #B1Y՞&D`K r6 YX`K;hf!T)$bRYfd^OjOV ^j&sbBح۷;U?~rz\Tsѹ!&流5h$ '믭=ɠJd4* U@B|{5 @CB4@[vsϛYV6c"L?)hpAMUfk6sieyUJf-XyqFy* xnݾh|#TLE2rG4X!)e(G?WS9+&*d##Db !f%l0ɲxgʼnHbr@hָȼ&J,-{Vtڬ fsm92 H!#£0. m}玏^lNƢ ENbsDZ L !0k4AFV%%1'''Ikm1ov-m*Ī'=4&.4;"}DB#@?W|NB˞k~><Վ6oS 0RbFF Ad)P0F U\Q*⵷WDy6 DDcRS*};P,f* f> ' .Fa dlM`fHDT:H~:& :2B"gN.gs=KOkmz9PKRQbCy *lW ^QAbxX Y#2LpY&iD@05O {aš F֜ABg -{Xeۃ IoEn{H"a{K@3z8P00BE}XPcI8 MpfS&gdmy91HcAP#R9̲9GZO!BfQ z^zBI#"<$Wk9E):90p~Y/IP12e+!,L #$#v*wGx)` ـ*8LKFC鋲Y"j;Mcq%bP2u Id =RcV.cGCU7uE:jGX3WjX;gҐšbd]+&D8gcAe3HAV6^vhM( }嬄2Jѭ27D #}p: U,B hg#WZLő D7dpL$Ȣ "|6t%1INxsC Œ%#m1dȦ[6F%hE,7` Xl "8n=E+ &Aew@ b]48a2k>84Xjn3#eQP*ʢx[3̠ŝ dGDʫ+#ȷ1NAT^K#1V% z}e^VBC iDQ ؁ } |6`@l9o(He<zSe>G4*)|\2).Y-+Q"f}omĄ ]^Hn8+LYy*APG:h4xȀCy1XK)[ $8o:!P( V1Qub pwW:43"Z[Ʋb)h9yAHU?Th1AAa2M EġFjvM9y$9͆2p!b,&! 4Zv1"mь+ z yimI L:>>?**9{CZ٧bDtC `% >\KHּ u_'f9 GA77?cx=X)DWc8Khf[Ĝ4%2}KTO!5 Ty"{+F+NJfrx$fҌ&SM&32JhADuԫbʵ&c\ IXҐ?&I+gD 2Lo=r\+kH)D^!eF̡ Ԉl'\ Z2͡p+/fd̑b5 wX<|-a1Y{\<3X_ P$ۘ \EȌ\@X=ϙR9c,Yll!7y䱈F6#U|IDATYc.4 p/7HZ+x̤.Ԉ@^v.0~(VyQKńE U +f6b4+$of2Yu|ja#"S@fVXY,F?c1֭XbRD:Uݷ@t )=c#6R"&Μ;1d 'ؒ5VB(9CfMrw"aT:ֱ`04:`bqɌl%C˳[4IR0)-f>U甼 O3;Fpfq FK'7ۍ7yQWܺu[d[!rZ5Pci#4+9sYqօdG"SRy,9#Z"W#-D  AM>ja9"FddGlgݸq؍;w_\fP\T|)5%=:~:\E>cΩ{<"rUPRi&W6@`0»uh=wvmd!8Ʀk@i5BcNFVnM5C-ܹ}G- 㜙'ELztDB6+*y ;5e'˽~}x1jr2CytFɛO*V#0&!` 6I( lWJ?٦Kc4k˂1}dM447%#jn[> ^)x u!C_%/sӌJ LNRLdbȾxI\Yౘi3 NeJXsVڅ=mlj,ᡈ!w){(e^ VUDYQ؃{af)ͺD\#53׫SRQqĀy·jXl;HD۩+g#;Ld@XܔTTw)"*ʤIBY"hJW a5R ^2lMTֺ).Myi=u2hQHh4>l:I>~TS!Xb+h]f m'dgfL &ӯ6:{$RKTq.Db(m}^Fc<=-z%}8Ku֭9K$`!I#aR ^~a!W#֦ژ$*{+bx%5BSY8ǔzO~k_}TSC)%q ` `%D@m~^=4PBRqn,P.7{%_ ԀtҨ!{n1TA*)&^s"Ze$X& ZUDʰZEQL K@3{25?P ϊbk?{wc/}dKj`1qnPƖ"Dw0WYƚDR6U}ӄO+UL}FU9^,Yl#Hvrz%^Sc{&*Ih/a ;yG_JxY0MQ90ڄ j_S&*i WhSX^kSeDP c6/Q,S3V5Zh9 \eDqUm:=[k߻kG^8MCeZQ1f! o_HrHW R+i7Fp4`yQ_rD*gJ\KYzUjn$[3CNǩm|wilWTՓ1xhs(Z7#[k EH L$`rY%鑗WmhBR; l5%/:+6D8B@6U t5mӊt>}ӟ8nW^TN2GvI!J0 @f< 4>a%[y47;F͛2:ldX*"0N.M K"v:1 KĆfw>{w푗|$ =.z5È\pnW\%!\CB6Rdd_I%12Xz(G)[.P9p)zE]/ |c4^z:+ Hu̔8, 3|xJDT/Oby-eP5evvXbk˘1GŹb#њIKR09@+'ɛc~w5ѯ(!eFju)&k^- Ou57Vli{k_gF*@5iν[FJ%]+hҊ!$K0WFa0“!u-%%h_W^ݞd蚂z ʵLI?abry%'r(A'mo:5DNc2 gP"$F8*4XfӬ$-M friA1 =Skkիko:'GjqU"V"y40"!, E< $d6w/b~bu @< tG(zG(J}myF ;,r0a`lk!ѐ1)d@A3U"uPj[C Hh$%3TpeU:ݱE4(F8@+NȐ:!bIO+^֞%{ByǼăV)uBАv`fx(M+eePqe7kY ] FSDc2.:=ʻ9F%Pl&}XɢAެ.i$R4"/;tJ1&5A`4OY9) J<" ("6'2%y} 0Ķ}>Eβb#U2M!a g3,sZQ$^Rk>20abMpIt 4Mr)9byEa6Ѽ,|&1'͈b&kRC4frgڄnZZZVcfƞ)թNt_ҴZI@J~YE@h9h&͒;MŐ*"2ƄZpvaB<:t4ҾɈ0KetNDꬵp'#b`cА9x3r 8we;)4h0, !`ft8'7YUYv4 U8ػdJԵy RY$a|"\sTke[t`@[j!LqY`MsCiLM6\ l#S$^ֽTTUʝӍh^ |R ./!+䛔!?K c2dB *#l'$ -!IYTsh_J`ݽQU;_ B([W\s-Y$<6,@k K?:cK6c$ᡲIQ4Zm“e+a|=2r$#I=Q8HZmwWOPIY'jAE̲c/\d1'ZUbL9B'6&y"gʔfM*j$fRcfR'\4Ut"MB[WLrY ` So&!f7kqO!ܒ;pD3D`0Z!U8,NR36NK.)2W:t!GhLz( Ok\#4'V]R*ƇQ(Hn!^.hH<#׼5(HXM5 Ȫ2{s1"JT> d% Pz"#y]RI;&(,dbFrEA+Ι C3#Y5lfZ~*է:%q9' D! b*h5k` 5"Zz M絳]|Jl^X)B]y5&LZr^uC\>ٻUskiXCQ[Kp}"jMotSHkVhMpf+J?L7zZ> TlnUl~&l#:ehwer~FrQoFS^CȐ.UTS  0+=PV7f#T%+8lMMϮ߸yш{~GҸ"ҙ +R9 uxmmAގ,jRf&Ex`x!.WPdˈ<)uFW>nrCa֯]~森8{nCaFA_Ȁżtb<ج@F- [H1[k%vXWR9Fzzv[8gYv`2Z+j^4ݼ. Vךgc6r3Θ cdnv~5LSVi܄=*z2CeShgF#*NΑ0>fazY;͇o׽s1a QYlz;!f:# PqA&)]>Nɟ%f߰Nu V#}cJjGvFb&<-Eivp7PN.Jkg׮߸ĸwN0EE_}gimOON'%N24 hf=tb>&׸^̑B bO/\ګ|T2kfWrm_;qv;< j8ž-+eRHi]zcuT,g˽pEg#r&~[SAUTS[p{R{L-Z׮]?~#\55jy]rꍇ};]=ǘޣY+|/)1jeVtԤtbi-MyӧV:]Wk˨azX HSUNgDx9,/N끉{+O՚oݲZZq=Dg=5iFp;Hb`n!Xi6fFb[AT@G#j"h֡3%\jr̂X雴r+.<:@9crSyp%,$dj7lc5&WµJA`\ - 2^ωC9ջ彔Մ@\ٮДc_Ѳв,Ef<<% kEg-MW>4 'uTxf96:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/BassBooster/000077500000000000000000000000001247673406200164065ustar00rootroot00000000000000lmms-1.1.3/plugins/BassBooster/BassBooster.cpp000066400000000000000000000065641247673406200213530ustar00rootroot00000000000000/* * BassBooster.cpp - bass booster effect plugin * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "BassBooster.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT bassbooster_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "BassBooster", QT_TRANSLATE_NOOP( "pluginBrowser", "Boost your bass the fast and simple way" ), "Tobias Doerffel ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } BassBoosterEffect::BassBoosterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) : Effect( &bassbooster_plugin_descriptor, parent, key ), m_frequencyChangeNeeded( false ), m_bbFX( DspEffectLibrary::FastBassBoost( 70.0f, 1.0f, 2.8f ) ), m_bbControls( this ) { changeFrequency(); changeGain(); changeRatio(); } BassBoosterEffect::~BassBoosterEffect() { } bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) { if( !isEnabled() || !isRunning () ) { return( false ); } // check out changed controls if( m_frequencyChangeNeeded || m_bbControls.m_freqModel.isValueChanged() ) { changeFrequency(); m_frequencyChangeNeeded = false; } if( m_bbControls.m_gainModel.isValueChanged() ) { changeGain(); } if( m_bbControls.m_ratioModel.isValueChanged() ) { changeRatio(); } double outSum = 0.0; const float d = dryLevel(); const float w = wetLevel(); for( fpp_t f = 0; f < frames; ++f ) { outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; sample_t s[2] = { buf[f][0], buf[f][1] }; m_bbFX.nextSample( s[0], s[1] ); buf[f][0] = d * buf[f][0] + w * s[0]; buf[f][1] = d * buf[f][1] + w * s[1]; } checkGate( outSum / frames ); return isRunning(); } inline void BassBoosterEffect::changeFrequency() { const sample_t fac = engine::mixer()->processingSampleRate() / 44100.0f; m_bbFX.leftFX().setFrequency( m_bbControls.m_freqModel.value() * fac ); m_bbFX.rightFX().setFrequency( m_bbControls.m_freqModel.value() * fac ); } inline void BassBoosterEffect::changeGain() { m_bbFX.leftFX().setGain( m_bbControls.m_gainModel.value() ); m_bbFX.rightFX().setGain( m_bbControls.m_gainModel.value() ); } inline void BassBoosterEffect::changeRatio() { m_bbFX.leftFX().setRatio( m_bbControls.m_ratioModel.value() ); m_bbFX.rightFX().setRatio( m_bbControls.m_ratioModel.value() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) { return new BassBoosterEffect( parent, static_cast( data ) ); } } lmms-1.1.3/plugins/BassBooster/BassBooster.h000066400000000000000000000031611247673406200210060ustar00rootroot00000000000000/* * BassBooster.h - bass-booster-effect-plugin * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef BASS_BOOSTER_H #define BASS_BOOSTER_H #include "Effect.h" #include "DspEffectLibrary.h" #include "BassBoosterControls.h" class BassBoosterEffect : public Effect { public: BassBoosterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ); virtual ~BassBoosterEffect(); virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames ); virtual EffectControls* controls() { return &m_bbControls; } protected: void changeFrequency(); void changeGain(); void changeRatio(); bool m_frequencyChangeNeeded; private: DspEffectLibrary::MonoToStereoAdaptor m_bbFX; BassBoosterControls m_bbControls; friend class BassBoosterControls; } ; #endif lmms-1.1.3/plugins/BassBooster/BassBoosterControlDialog.cpp000066400000000000000000000042451247673406200240260ustar00rootroot00000000000000/* * BassBoosterControlDialog.cpp - control dialog for bassbooster effect * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "BassBoosterControlDialog.h" #include "BassBoosterControls.h" #include "embed.h" BassBoosterControlDialog::BassBoosterControlDialog( BassBoosterControls* controls ) : EffectControlDialog( controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); setFixedSize( 120, 104 ); QVBoxLayout * tl = new QVBoxLayout( this ); tl->addSpacing( 30 ); QHBoxLayout * l = new QHBoxLayout; knob * freqKnob = new knob( knobBright_26, this); freqKnob->setModel( &controls->m_freqModel ); freqKnob->setLabel( tr( "FREQ" ) ); freqKnob->setHintText( tr( "Frequency:" ) + " ", "Hz" ); knob * gainKnob = new knob( knobBright_26, this ); gainKnob->setModel( &controls->m_gainModel ); gainKnob->setLabel( tr( "GAIN" ) ); gainKnob->setHintText( tr( "Gain:" ) + " ", "" ); knob * ratioKnob = new knob( knobBright_26, this ); ratioKnob->setModel( &controls->m_ratioModel ); ratioKnob->setLabel( tr( "RATIO" ) ); ratioKnob->setHintText( tr( "Ratio:" ) + " ", "" ); l->addWidget( freqKnob ); l->addWidget( gainKnob ); l->addWidget( ratioKnob ); tl->addLayout( l ); setLayout( tl ); } #include "moc_BassBoosterControlDialog.cxx" lmms-1.1.3/plugins/BassBooster/BassBoosterControlDialog.h000066400000000000000000000024051247673406200234670ustar00rootroot00000000000000/* * BassBoosterControlDialog.h - control dialog for bassbooster effect * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _BASSBOOSTER_CONTROL_DIALOG_H #define _BASSBOOSTER_CONTROL_DIALOG_H #include "EffectControlDialog.h" class BassBoosterControls; class BassBoosterControlDialog : public EffectControlDialog { Q_OBJECT public: BassBoosterControlDialog( BassBoosterControls* controls ); virtual ~BassBoosterControlDialog() { } } ; #endif lmms-1.1.3/plugins/BassBooster/BassBoosterControls.cpp000066400000000000000000000037441247673406200230740ustar00rootroot00000000000000/* * BassBoosterControls.cpp - controls for bassbooster effect * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "BassBoosterControls.h" #include "BassBooster.h" BassBoosterControls::BassBoosterControls( BassBoosterEffect* effect ) : EffectControls( effect ), m_effect( effect ), m_freqModel( 100.0f, 50.0f, 200.0f, 1.0f, this, tr( "Frequency" ) ), m_gainModel( 1.0f, 0.1f, 5.0f, 0.05f, this, tr( "Gain" ) ), m_ratioModel( 2.0f, 0.1f, 10.0f, 0.1f, this, tr( "Ratio" ) ) { connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeFrequency() ) ); } void BassBoosterControls::changeFrequency() { m_effect->m_frequencyChangeNeeded = true; } void BassBoosterControls::loadSettings( const QDomElement& _this ) { m_freqModel.loadSettings( _this, "freq" ); m_gainModel.loadSettings( _this, "gain" ); m_ratioModel.loadSettings( _this, "ratio"); } void BassBoosterControls::saveSettings( QDomDocument& doc, QDomElement& _this ) { m_freqModel.saveSettings( doc, _this, "freq" ); m_gainModel.saveSettings( doc, _this, "gain" ); m_ratioModel.saveSettings( doc, _this, "ratio"); } #include "moc_BassBoosterControls.cxx" lmms-1.1.3/plugins/BassBooster/BassBoosterControls.h000066400000000000000000000035211247673406200225320ustar00rootroot00000000000000/* * BassBoosterControls.h - controls for bassboosterx -effect * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef BASSBOOSTER_CONTROLS_H #define BASSBOOSTER_CONTROLS_H #include "EffectControls.h" #include "BassBoosterControlDialog.h" #include "knob.h" class BassBoosterEffect; class BassBoosterControls : public EffectControls { Q_OBJECT public: BassBoosterControls( BassBoosterEffect* effect ); virtual ~BassBoosterControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "bassboostercontrols"; } virtual int controlCount() { return 3; } virtual EffectControlDialog* createView() { return new BassBoosterControlDialog( this ); } private slots: void changeFrequency(); private: BassBoosterEffect* m_effect; FloatModel m_freqModel; FloatModel m_gainModel; FloatModel m_ratioModel; friend class BassBoosterControlDialog; friend class BassBoosterEffect; } ; #endif lmms-1.1.3/plugins/BassBooster/CMakeLists.txt000066400000000000000000000003461247673406200211510ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(bassbooster BassBooster.cpp BassBoosterControls.cpp BassBoosterControlDialog.cpp MOCFILES BassBoosterControls.h BassBoosterControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/BassBooster/artwork.png000066400000000000000000000362571247673406200206220ustar00rootroot00000000000000PNG  IHDRxhУ pHYs  tIME AktEXtCommentCreated with GIMPW IDATxWu%>yW%Ѐ#1d qLW݉ۍ|r?!*vSETnCH0v1H`I6A\͂֝W>}w]ɷ*z wZ{T| {/yS?t$W Ư|?)Ed cP !0oW^]kO_BD@0 0GIn~ٿ69ω| @H"`7y1o}?|⎵X~68o"gboSDd~ P@D͗O$%aZ/G!l~į0~HUl>B?J7BD@j_Y?-;!_bj%MxქsRE-BDKj-Z뵙;ri-R>EK#Aަ;5J.СmwoSsjk)z53JZ%M֚֩H)ֺu=M$KRh- ]jl9yhz}#R>>t(ޢnԴ(=6W[+kQD\(r^OfB[.g},>3Zox+C]~{/G|w'O* նUN}_+r`kk$Gqw7]ַuXZ._|/Q+j/nȑ#fG?^O"\.׼f3y+_%"?7tjkjK.9N?'~_v&. 3igo7o. wn馗eӺmmH>GG?owsǎ֓Y{ꩧ=mf55rjkK^|;ˇ?0k.r[׿nowZ.O?>x_Z-\rگ9s橧jMt!Lt̙r׼DƩordk{kowڗ\]yO?ţw̃_y@wߥE+!ۋz׻~W~=y4+~Mw;SB.׼榢e/yk}Ν=kf9qlzՍpdDwycBR}{{KKwy{k_|ƏGZk+ww?(sΝ=,m?x7C:k^??F!$iuju7o?RYj+oyݭZGc_WhP-mZ~m<@6(\jURgg;~^[߾S2kwϟݛt9{37↣G;y/.ZYh}g?c}cG]z.4`=s;;{zowwgg``wguSݝݽ=C'#RAئR "Rlm-nx ?rZWvo>zݽ'Zt`=M^`}׿ ~ۭu\-z}o~<_~Wx TˢZ}o+7JZ.?='O<߿+ewgnE;u 'NRENO׾^ ~c_/\UJc].V}{W'{; fnW\}sR˯~V+@='% Ir=W'nx+ԝ[U"ZrQ5 8@:1{z2wK/=)@k)'Oַ|#y'oK_zV-ܬk_ڟzOCVVuoO$ qXQdgg*TjQY-rEPdz7??o\җnmmRZ7~nS3sD RNN(̙ۇѝݽ/QNsywE=w|RkWv_UkfntV/w,KBY..Hx{< S= Yk-Z:ZzQqooo_}ŸjY,7__|/ۿҽ~arQJկ{ዾկ]xQZEoR꣏f u/.9e/~{?ɇ.CEE-j{{[nk>O=w֬ zUW^}5wuE5:Kѧz[_wu>s:\]do}ۧO?wsg>ēw~wmG½_lmZO볧OWU]-O,ˢÇ};s~~'?P~wws;{˿RҦY[mm/['> q_Uk-j^{^~~k)PC~Mۿ[?8׫cGw ɿoK{Iɓ}z]u)ŽV[{OzjEqrZ//gUKrD~_ԚG>׿Ao7/{ W_s+oxr8XOgNK_zZnm4Vk;;o|ӛկ-W]u7jYK]<z޾BrQZwrK_Y.O/7k ].4p+=rp0=/5ijVj뮻⋿C<4$ͷR(X,j){{{;#NmZy-eZ]s5/ş`nEZ,Zk}wرrG!Tן~كڬEj/>Ϭ&^ꛮe)]l9OPURQ ;Z褈0f)D7'Q *V$,G4M֬53*Rj)f{-ZJ)Z*%0̧i2nE괞IhE֚nFPU-EUK|~oֽ[3$$؜("/Id&'(:pןB`ap ݟjrN" XJ 2͸L.뛨ï ((yĐM{{㟾7oom;(sQC|q4ey䜪p:fM 4ˤID'7* bckj4sacIVP'"δ*s~Eq? Ec;PDw@kT zr:X"pX]κ8hUZLuI86;9\E=Lݒ6Ce*w.?p"""ZzЋx ( U!"h-pB.SE٠wj>:[$0!KQH=ũ0dogFTKf'lNoyX U)=dd`Dv88?L`4DD"# (&,ϛ%CRK/3s0,%GG8;K!@Μ9.<5$NCHEU+I^@7zSݏ6} Jt =QƎ;"D : F:2Yψ"Y/'IKtfFaA&7{QTǬ rPd| (#0@.ɑZۻ`p "P¾|w-Wl8jW$t-9W'Nf@:>b_Ds_Ga1dRy,vd!N<@R/\轆ҦG4D,9Q@܎m"p,<`@ɞE5^I!-*6G$8{B`k|\;A( ^`;H x7$t3)ƹ@Tz~OYd 0AM3!<ȼJ`dFQu+2N!Ԯ\</\V!?BFAc:B. Ɂ=#1WZZWG"R bjQ; ?D9cC% jTݢ".^cMd vA]d-Wq0,0Uϝ; Ft'0?\zޱlqg3QfPa Oa!朮2 `Gug oerr(XCHX(waugDzD6Ȭ&;h> 1Q1J $ v,39 Kl /&0Q%2*":<>o!xk( O|=G^@ bX'Y?R Auh̨ ({U~=od @Ƅ! MÔPEǐ@u(:@`&juk}`o1l0wj|yZ$"CWj'e;{LnDF.:3~5W ,@Hϝ9ͧ;繨s>ZB!a(v&ePY渌bѨY=HD*2__$ff3h$ѳ+<YChk1=x?gfӃ5r-&yV,{(FJy!Uan{xC;+cIRf <Tje!"vP"5hN&m`C'p*@`C |]0_CޥGYOldoyzMС٪Sd"8;=_gww|AS.&|Y@A1 Q2)1ȱ9|HĞ;)DuHW@Ď̹0,At"J0Fu@MSvn͆TЩ)oIr1YhdԨ3;Yl%`jZKIZ4HRn oWE;ԒU@}os %{{/;,NRĥ&|N]psi $3$E}TJwk"3$ MdL EO>T 88^ٍP:zߐ@| A=~~TNZ=eYHϐz`x 4ND0D!GR*@IRTеD(wRlla.O`DnmSk~(B0}sA닮z{Ms"ni IDATpȬCi)EhzN]C$VD]5ڏô))v/1BdR܍-ζ̅^fޥ<[RbA-)l9 R$=Ӱ hUU+-.Y @|j0q/|"嚫^bkig w R︲iuv&]( ewzm Hxfn]cj2 gT))uPiQ܉W1Sc_k)D}yh*SlPdu6tJ-|}[KWۇ:9kTU:se'9FnZh4ZTuQw5P,T!)0m+y+c<*u\ך%#616PM!3ФT5CI-9<0P \|uIQ{O> W]}0:.q[9F8NppS[Qe lD0E Sm:r ##cj*2cC Z(,,}$ M}()DWE $!DUyB;zf]>ՋVӴiI0:]P%=-%nGJ ţJQ1!qz\RZR$܄HqP5Y܈ #H0`Ø)O傓(&8!*I,4[~~@.(4!ږ.:H7b2Q7#Fxj3r EndZԚiQZp)P˄!JKHt<4QEt4mL5 aFwԛKwNp%}^A $ʻ|3FK)Q?'WsOq~ cq  t7UR*n"*4M ؚ)DT Y|<"'"ϩ#HXr4 ]CÊaoEEI(4>hE-0JAV p|E7Q4aɇ  T&" $I Ch]l-:}z"Bʆ((B7*)p2S % y.xɁ)Ui珸K-\mΕH1J9-IN WlLso*Y!p::&sS]7=HK(t7JUB|Q (a!St8?R3,JiԷwD1 ўwҶuBaS.m5(~t)k<]l"ߐ P^O mE1D@VֺbOTf%ʔnCfoM(RT+ -ꍪ:кB[*@4}nQH6aR3xŻl[k681@zJrzX4GtU]$+R%[AqU6IP **nA-`h2LSWQsIEIdaj`T|2%Mo5Fm&1#hQ!BEE9TQQۉ{SLݬ"1mmQABfӀ[ PKVX:CipL_v*.MecꥈOMy)IF*馨B)"n)- :ݸcUD<]9rȅ7StVc1ܮq(|j:Ѳj.Ż*"'8u#dkn^2J2b2 G!2w[AeN4.C螿)o3TETK1!ˡ" >18P96uH zOOY,JFhHÍKR P:Y0fwPTE֐6c0뼬P=:(J{A>u -%c7(  RjYOm(ñX,T* oz(g%]X8Q |@킁EXH",ޭF5RPI-jڜ"nTjq UU(X3'`:{Qx3G5b.~bH5Rw,S!@. *%E*RRhBFc@LZځbbjPD!}!|g+ZU2Qy.Xs AJshmܬF|EHN.Z6" O$6] ;VRZB*j!$z@\.!t@:9$G8P@Hsfj" mBs4k5]%mGq婵6r]:%Fcnhi/ T%EȜ N-{90p:gShd֌lf&ETaeAJ3vgALM]٧]E`Q @Ԑ8ܜVLF39P9HK> 9sYlE!>c6PT+B4%] 3UMdTc.uw"uqU$N4je#uYJ$bCf'Q5D(&Y9.b22:U ,<̡ōBw&01.X*$t<@Ҙ~W[+XLƘ #I!bnFTgZƀC 4zb@N:>&uh-tihVT3;yf?{'^{JbuM8(kZ**)[0)Ly9fCO@8Uj8[ 2ҫx`w6exsvhypj(Jlv)u 3GZ2.ߣѭF&-l浨SAz(+ȸ@EL4y`QѣǏ;MhҏT%" ALmC;}Кt XQ 4áXXh]uQI$adˈ>סieG}#FM%,"50vw2c얂 30 cIak7bf;e Ս*[{Cx2)̹m])c>G4׬ӡ(,u8sÔ;}jo.\*"EҾ.(OYcz"["Yk8*0Q7kWͅBV.(Ig bOpIULbΥx耘D{ t(fXIcaC9Aˆti)@$l9wAnx.7?d$"%UAf=7w^.a cO~Ti&~ c QR0OѧAZ~FUұaL[ظt.7tK 4Șa'P_M{/E@).U2&Q> !bV_!9 t{=ADţ$K$a99ŗ9EXǭKRM"Gظc`p]3ڇIԯ anOLR Zwcxvy~2d\?N!B,mܸ'^,@RE1~߾L'A11eRX7X}T~H ymV!)ᦚVL`3kA|v#qd%c8- od"IUUсaԭ) alqGATa%SEiօ thUAٞ:Һ]I  J sR;<׍yxZM\bH?C3=,x3E[s.Z15K!G{i'P9teq fqэc:ڇ)nݼ \f'!:p,.Ap ::&MќSGkF-1D. Eez&ňp0|LltݨDo<Ѫm%KӢz_n8£5EŢUC('jMKLxP2>1^k1DZG 2E8c>D UnJz nx CfWx~D9#;̨z_cn2Rf?g;ps8KȰ橜c[/[Vd9n~ݘӖRڃxX89_;G,w'*#)NŽ8"hz7OgϺ>n>Ԯ931haK5يٍx2 |e̾FmLgC~]E*Ӆ5߅0nڟjwkw )uFappq˄0ۚt ԹKS2i2e_P 5A,yhb^M(la~\;> EB<?Ɲ&CJ}С lXs.Jz+{pôq]>^ao`\-z>{s^o@DMX<5H#yaʸP]t/Y‘o!0mx֐]v![8+q{O oln}gu眧UҌE$bCkaPػektͫayM..z}r2aYJtA^|; m-? D*+ǖdNf\c1+ ҼaXR7 %UMf?j ߢ ,#}O20tafQGϗFb5UG_cZkč0-nش/ZÞ ˴04G / Cȧf5Ij=#BK^} J{o>;yo۳;8 +1͠{la”Wl5NhJkS@ǬjIENDB`lmms-1.1.3/plugins/BassBooster/logo.png000066400000000000000000000062311247673406200200560ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/CMakeLists.txt000066400000000000000000000022321247673406200167170ustar00rootroot00000000000000ADD_SUBDIRECTORY(Amplifier) ADD_SUBDIRECTORY(audio_file_processor) ADD_SUBDIRECTORY(BassBooster) ADD_SUBDIRECTORY(bit_invader) ADD_SUBDIRECTORY(carlabase) ADD_SUBDIRECTORY(carlapatchbay) ADD_SUBDIRECTORY(carlarack) ADD_SUBDIRECTORY(delay) ADD_SUBDIRECTORY(DualFilter) ADD_SUBDIRECTORY(dynamics_processor) ADD_SUBDIRECTORY(flp_import) ADD_SUBDIRECTORY(HydrogenImport) ADD_SUBDIRECTORY(kicker) ADD_SUBDIRECTORY(ladspa_browser) ADD_SUBDIRECTORY(LadspaEffect) ADD_SUBDIRECTORY(lb302) #ADD_SUBDIRECTORY(lb303) ADD_SUBDIRECTORY(MidiImport) ADD_SUBDIRECTORY(monstro) ADD_SUBDIRECTORY(nes) ADD_SUBDIRECTORY(opl2) ADD_SUBDIRECTORY(organic) ADD_SUBDIRECTORY(papu) ADD_SUBDIRECTORY(patman) ADD_SUBDIRECTORY(peak_controller_effect) IF(NOT LMMS_BUILD_APPLE) ADD_SUBDIRECTORY(sf2_player) ENDIF() ADD_SUBDIRECTORY(sfxr) ADD_SUBDIRECTORY(sid) ADD_SUBDIRECTORY(SpectrumAnalyzer) ADD_SUBDIRECTORY(stereo_enhancer) ADD_SUBDIRECTORY(stereo_matrix) ADD_SUBDIRECTORY(stk) ADD_SUBDIRECTORY(triple_oscillator) ADD_SUBDIRECTORY(vestige) ADD_SUBDIRECTORY(vst_base) ADD_SUBDIRECTORY(VstEffect) ADD_SUBDIRECTORY(watsyn) ADD_SUBDIRECTORY(waveshaper) ADD_SUBDIRECTORY(vibed) ADD_SUBDIRECTORY(zynaddsubfx) lmms-1.1.3/plugins/DualFilter/000077500000000000000000000000001247673406200162135ustar00rootroot00000000000000lmms-1.1.3/plugins/DualFilter/CMakeLists.txt000066400000000000000000000003401247673406200207500ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(dualfilter DualFilter.cpp DualFilterControls.cpp DualFilterControlDialog.cpp MOCFILES DualFilterControls.h DualFilterControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/DualFilter/DualFilter.cpp000066400000000000000000000113521247673406200207540ustar00rootroot00000000000000/* * DualFilter.cpp - A native dual filter effect plugin with two parallel filters * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "DualFilter.h" #include "embed.cpp" #include "basic_filters.h" extern "C" { Plugin::Descriptor PLUGIN_EXPORT dualfilter_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Dual Filter", QT_TRANSLATE_NOOP( "pluginBrowser", "A native amplifier plugin" ), "Vesa Kivimäki ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } DualFilterEffect::DualFilterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) : Effect( &dualfilter_plugin_descriptor, parent, key ), m_dfControls( this ) { m_filter1 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); m_filter2 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); // ensure filters get updated m_filter1changed = true; m_filter2changed = true; } DualFilterEffect::~DualFilterEffect() { delete m_filter1; delete m_filter2; } bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) { if( !isEnabled() || !isRunning () ) { return( false ); } double outSum = 0.0; const float d = dryLevel(); const float w = wetLevel(); if( m_dfControls.m_filter1Model.isValueChanged() || m_filter1changed ) { m_filter1->setFilterType( m_dfControls.m_filter1Model.value() ); m_filter1changed = true; } if( m_dfControls.m_filter2Model.isValueChanged() || m_filter2changed ) { m_filter2->setFilterType( m_dfControls.m_filter2Model.value() ); m_filter2changed = true; } const bool enabled1 = m_dfControls.m_enabled1Model.value(); const bool enabled2 = m_dfControls.m_enabled2Model.value(); // recalculate only when necessary: either cut/res is changed, or the changed-flag is set (filter type or samplerate changed) if( ( enabled1 && ( m_dfControls.m_cut1Model.isValueChanged() || m_dfControls.m_res1Model.isValueChanged() ) ) || m_filter1changed ) { m_filter1->calcFilterCoeffs( m_dfControls.m_cut1Model.value(), m_dfControls.m_res1Model.value() ); m_filter1changed = false; } if( ( enabled2 && ( m_dfControls.m_cut2Model.isValueChanged() || m_dfControls.m_res2Model.isValueChanged() ) ) || m_filter2changed ) { m_filter2->calcFilterCoeffs( m_dfControls.m_cut2Model.value(), m_dfControls.m_res2Model.value() ); m_filter2changed = false; } // get mix amounts for wet signals of both filters const float mix2 = ( ( m_dfControls.m_mixModel.value() + 1.0f ) * 0.5f ); const float mix1 = 1.0f - mix2; const float gain1 = m_dfControls.m_gain1Model.value() * 0.01f; const float gain2 = m_dfControls.m_gain2Model.value() * 0.01f; // buffer processing loop for( fpp_t f = 0; f < frames; ++f ) { sample_t s[2] = { 0.0f, 0.0f }; // mix sample_t s1[2] = { buf[f][0], buf[f][1] }; // filter 1 sample_t s2[2] = { buf[f][0], buf[f][1] }; // filter 2 // update filter 1 if( enabled1 ) { s1[0] = m_filter1->update( s1[0], 0 ); s1[1] = m_filter1->update( s1[1], 1 ); // apply gain s1[0] *= gain1; s1[1] *= gain1; // apply mix s[0] += ( s1[0] * mix1 ); s[1] += ( s1[1] * mix1 ); } // update filter 2 if( enabled2 ) { s2[0] = m_filter2->update( s2[0], 0 ); s2[1] = m_filter2->update( s2[1], 1 ); //apply gain s2[0] *= gain2; s2[1] *= gain2; // apply mix s[0] += ( s2[0] * mix2 ); s[1] += ( s2[1] * mix2 ); } outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; // do another mix with dry signal buf[f][0] = d * buf[f][0] + w * s[0]; buf[f][1] = d * buf[f][1] + w * s[1]; } checkGate( outSum / frames ); return isRunning(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) { return new DualFilterEffect( parent, static_cast( data ) ); } } lmms-1.1.3/plugins/DualFilter/DualFilter.h000066400000000000000000000031301247673406200204140ustar00rootroot00000000000000/* * DualFilter.h - dual filter effect-plugin * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DUALFILTER_H #define DUALFILTER_H #include "Effect.h" #include "DualFilterControls.h" #include "basic_filters.h" class DualFilterEffect : public Effect { public: DualFilterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ); virtual ~DualFilterEffect(); virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames ); virtual EffectControls* controls() { return &m_dfControls; } private: DualFilterControls m_dfControls; basicFilters<2> * m_filter1; basicFilters<2> * m_filter2; bool m_filter1changed; bool m_filter2changed; friend class DualFilterControls; } ; #endif lmms-1.1.3/plugins/DualFilter/DualFilterControlDialog.cpp000066400000000000000000000065731247673406200234460ustar00rootroot00000000000000/* * DualFilterControlDialog.cpp - control dialog for dual filter effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "DualFilterControlDialog.h" #include "DualFilterControls.h" #include "embed.h" #include "led_checkbox.h" #include "combobox.h" #include "tooltip.h" #include "gui_templates.h" #define makeknob( name, x, y, model, label, hint, unit ) \ knob * name = new knob( knobBright_26, this); \ name -> move( x, y ); \ name ->setModel( &controls-> model ); \ name ->setLabel( tr( label ) ); \ name ->setHintText( tr( hint ) + " ", unit ); DualFilterControlDialog::DualFilterControlDialog( DualFilterControls* controls ) : EffectControlDialog( controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); setFixedSize( 150, 220 ); makeknob( cut1Knob, 33, 30, m_cut1Model, "FREQ", "Cutoff frequency", "Hz" ) makeknob( res1Knob, 75, 30, m_res1Model, "RESO", "Resonance", "" ) makeknob( gain1Knob, 117, 30, m_gain1Model, "GAIN", "Gain", "%" ) makeknob( mixKnob, 62, 100, m_mixModel, "MIX", "Mix", "" ) makeknob( cut2Knob, 33, 145, m_cut2Model, "FREQ", "Cutoff frequency", "Hz" ) makeknob( res2Knob, 75, 145, m_res2Model, "RESO", "Resonance", "" ) makeknob( gain2Knob, 117, 145, m_gain2Model, "GAIN", "Gain", "%" ) gain1Knob-> setVolumeKnob( true ); gain2Knob-> setVolumeKnob( true ); ledCheckBox * enabled1Toggle = new ledCheckBox( "", this, tr( "Filter 1 enabled" ), ledCheckBox::Green ); ledCheckBox * enabled2Toggle = new ledCheckBox( "", this, tr( "Filter 2 enabled" ), ledCheckBox::Green ); enabled1Toggle -> move( 5, 30 ); enabled1Toggle -> setModel( &controls -> m_enabled1Model ); toolTip::add( enabled1Toggle, tr( "Click to enable/disable Filter 1" ) ); enabled2Toggle -> move( 5, 145 ); enabled2Toggle -> setModel( &controls -> m_enabled2Model ); toolTip::add( enabled2Toggle, tr( "Click to enable/disable Filter 2" ) ); comboBox * m_filter1ComboBox = new comboBox( this ); m_filter1ComboBox->setGeometry( 5, 70, 140, 22 ); m_filter1ComboBox->setFont( pointSize<8>( m_filter1ComboBox->font() ) ); m_filter1ComboBox->setModel( &controls->m_filter1Model ); comboBox * m_filter2ComboBox = new comboBox( this ); m_filter2ComboBox->setGeometry( 5, 185, 140, 22 ); m_filter2ComboBox->setFont( pointSize<8>( m_filter2ComboBox->font() ) ); m_filter2ComboBox->setModel( &controls->m_filter2Model ); } #include "moc_DualFilterControlDialog.cxx" lmms-1.1.3/plugins/DualFilter/DualFilterControlDialog.h000066400000000000000000000025021247673406200230770ustar00rootroot00000000000000/* * DualFilterControlDialog.h - control dialog for dual filter effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DUALFILTER_CONTROL_DIALOG_H #define DUALFILTER_CONTROL_DIALOG_H #include "EffectControlDialog.h" class DualFilterControls; class DualFilterControlDialog : public EffectControlDialog { Q_OBJECT public: DualFilterControlDialog( DualFilterControls* controls ); virtual ~DualFilterControlDialog() { } } ; #endif lmms-1.1.3/plugins/DualFilter/DualFilterControls.cpp000066400000000000000000000142751247673406200225070ustar00rootroot00000000000000/* * DualFilterControls.cpp - controls for dual filter effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "DualFilterControls.h" #include "DualFilter.h" #include "engine.h" #include "song.h" #include "basic_filters.h" #include "embed.h" DualFilterControls::DualFilterControls( DualFilterEffect* effect ) : EffectControls( effect ), m_effect( effect ), m_enabled1Model( true, this, tr( "Filter 1 enabled" ) ), m_filter1Model( this, tr( "Filter 1 type" ) ), m_cut1Model( 7000.0f, 1.0f, 20000.0f, 1.0f, this, tr( "Cutoff 1 frequency" ) ), m_res1Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 1" ) ), m_gain1Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 1" ) ), m_mixModel( 0.0f, -1.0f, 1.0f, 0.01f, this, tr( "Mix" ) ), m_enabled2Model( true, this, tr( "Filter 2 enabled" ) ), m_filter2Model( this, tr( "Filter 2 type" ) ), m_cut2Model( 7000.0f, 1.0f, 20000.0f, 1.0f, this, tr( "Cutoff 2 frequency" ) ), m_res2Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 2" ) ), m_gain2Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 2" ) ) { m_filter1Model.addItem( tr( "LowPass" ), new PixmapLoader( "filter_lp" ) ); m_filter1Model.addItem( tr( "HiPass" ), new PixmapLoader( "filter_hp" ) ); m_filter1Model.addItem( tr( "BandPass csg" ), new PixmapLoader( "filter_bp" ) ); m_filter1Model.addItem( tr( "BandPass czpg" ), new PixmapLoader( "filter_bp" ) ); m_filter1Model.addItem( tr( "Notch" ), new PixmapLoader( "filter_notch" ) ); m_filter1Model.addItem( tr( "Allpass" ), new PixmapLoader( "filter_ap" ) ); m_filter1Model.addItem( tr( "Moog" ), new PixmapLoader( "filter_lp" ) ); m_filter1Model.addItem( tr( "2x LowPass" ), new PixmapLoader( "filter_2lp" ) ); m_filter1Model.addItem( tr( "RC LowPass 12dB" ), new PixmapLoader( "filter_lp" ) ); m_filter1Model.addItem( tr( "RC BandPass 12dB" ), new PixmapLoader( "filter_bp" ) ); m_filter1Model.addItem( tr( "RC HighPass 12dB" ), new PixmapLoader( "filter_hp" ) ); m_filter1Model.addItem( tr( "RC LowPass 24dB" ), new PixmapLoader( "filter_lp" ) ); m_filter1Model.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) ); m_filter1Model.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) ); m_filter1Model.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) ); m_filter2Model.addItem( tr( "LowPass" ), new PixmapLoader( "filter_lp" ) ); m_filter2Model.addItem( tr( "HiPass" ), new PixmapLoader( "filter_hp" ) ); m_filter2Model.addItem( tr( "BandPass csg" ), new PixmapLoader( "filter_bp" ) ); m_filter2Model.addItem( tr( "BandPass czpg" ), new PixmapLoader( "filter_bp" ) ); m_filter2Model.addItem( tr( "Notch" ), new PixmapLoader( "filter_notch" ) ); m_filter2Model.addItem( tr( "Allpass" ), new PixmapLoader( "filter_ap" ) ); m_filter2Model.addItem( tr( "Moog" ), new PixmapLoader( "filter_lp" ) ); m_filter2Model.addItem( tr( "2x LowPass" ), new PixmapLoader( "filter_2lp" ) ); m_filter2Model.addItem( tr( "RC LowPass 12dB" ), new PixmapLoader( "filter_lp" ) ); m_filter2Model.addItem( tr( "RC BandPass 12dB" ), new PixmapLoader( "filter_bp" ) ); m_filter2Model.addItem( tr( "RC HighPass 12dB" ), new PixmapLoader( "filter_hp" ) ); m_filter2Model.addItem( tr( "RC LowPass 24dB" ), new PixmapLoader( "filter_lp" ) ); m_filter2Model.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) ); m_filter2Model.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) ); m_filter2Model.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateFilters() ) ); } void DualFilterControls::updateFilters() { // swap filters to new ones delete m_effect->m_filter1; delete m_effect->m_filter2; m_effect->m_filter1 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); m_effect->m_filter2 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); // flag filters as needing recalculation m_effect->m_filter1changed = true; m_effect->m_filter2changed = true; } void DualFilterControls::loadSettings( const QDomElement& _this ) { m_enabled1Model.loadSettings( _this, "enabled1" ); m_filter1Model.loadSettings( _this, "filter1" ); m_cut1Model.loadSettings( _this, "cut1" ); m_res1Model.loadSettings( _this, "res1" ); m_gain1Model.loadSettings( _this, "gain1" ); m_mixModel.loadSettings( _this, "mix" ); m_enabled2Model.loadSettings( _this, "enabled2" ); m_filter2Model.loadSettings( _this, "filter2" ); m_cut2Model.loadSettings( _this, "cut2" ); m_res2Model.loadSettings( _this, "res2" ); m_gain2Model.loadSettings( _this, "gain2" ); } void DualFilterControls::saveSettings( QDomDocument& _doc, QDomElement& _this ) { m_enabled1Model.saveSettings( _doc, _this, "enabled1" ); m_filter1Model.saveSettings( _doc, _this, "filter1" ); m_cut1Model.saveSettings( _doc, _this, "cut1" ); m_res1Model.saveSettings( _doc, _this, "res1" ); m_gain1Model.saveSettings( _doc, _this, "gain1" ); m_mixModel.saveSettings( _doc, _this, "mix" ); m_enabled2Model.saveSettings( _doc, _this, "enabled2" ); m_filter2Model.saveSettings( _doc, _this, "filter2" ); m_cut2Model.saveSettings( _doc, _this, "cut2" ); m_res2Model.saveSettings( _doc, _this, "res2" ); m_gain2Model.saveSettings( _doc, _this, "gain2" ); } #include "moc_DualFilterControls.cxx" lmms-1.1.3/plugins/DualFilter/DualFilterControls.h000066400000000000000000000042011247673406200221400ustar00rootroot00000000000000/* * DualFilterControls.h - controls for dual filter -effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DUALFILTER_CONTROLS_H #define DUALFILTER_CONTROLS_H #include "EffectControls.h" #include "DualFilterControlDialog.h" #include "knob.h" #include "ComboBoxModel.h" class DualFilterEffect; class DualFilterControls : public EffectControls { Q_OBJECT public: DualFilterControls( DualFilterEffect* effect ); virtual ~DualFilterControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "DualFilterControls"; } virtual int controlCount() { return 11; } virtual EffectControlDialog* createView() { return new DualFilterControlDialog( this ); } private slots: void updateFilters(); private: DualFilterEffect* m_effect; BoolModel m_enabled1Model; ComboBoxModel m_filter1Model; FloatModel m_cut1Model; FloatModel m_res1Model; FloatModel m_gain1Model; FloatModel m_mixModel; BoolModel m_enabled2Model; ComboBoxModel m_filter2Model; FloatModel m_cut2Model; FloatModel m_res2Model; FloatModel m_gain2Model; friend class DualFilterControlDialog; friend class DualFilterEffect; } ; #endif lmms-1.1.3/plugins/DualFilter/artwork.png000066400000000000000000001162371247673406200204240ustar00rootroot00000000000000PNG  IHDRϿ pHYs  tIME xANtEXtCommentCreated with GIMPW IDATxknU6ƜZン[봤zN ]P Ӳ`@Q&|pQ BJ$DZBn0 ZR$(]AjE>\9G>g{$N*~{Yg1Ɯ/_$ $XG wO륷H|է>[^Sy>pqĭ/~Qq'gũ&lnvmn&IZXs#Is33$HLc$)K;UO;Wr7B@Mi@+IR FHJL"Hz]" 3 cM7><4֥9@ 6-^5Fc@*,hA` TFƳ<@y3>irZk&)2&it TK׮ ) 5v9^~2.Ƨ.o_zg3Gdd(qAmݼ54Nk׮eыWF{ffD # ͬFƆfsAFl)T+!"Μ9Id&2/y#2 HRI44(MF'lSfoC02}{}o}ӟyϐTڵ~ ~ɟzC FwUC.]~3f4ᙣO|kwfY{ރ,}YD33j(ݧMmj4meY.]7|;i߸Fڗ_?s{,޽HI wԒo~;_y[s7Iׯ_kmrlg_Zv뮻eٚ̎oxhf/]vhO=SO?+W6ۥG@RI$M^ۍ73k$P53((E[e v.C{ۀȳgsfr_4ҷΝ=|x{W^|:<<ҵk^jMӴn˶MS]*[@#7Zyힻii&ѳ~/]{i{ynܼ,KELQ~Zkwq=!m6Nqz%I7_>M|ۛڵo4mǽv;TlOm3Ϟ={_|<qhR$L`ݱDh#¸C2sLD |챏ɧ6Mx˫9U|34Mjm6{{4NS}+_[}ST"S)fZP1M{{O/<~k_ʒAfn#3GLI))T=??{_\t Zi~'>Ipoo?|$ FL3f(l/OZHҀdV)c$+̽ѣoo.7on '}7O>ݟoy7ͼm6Y] p n6M{͙3g?xtx7}gfi7s9f,h&$Cb 4>KLs{Lsdļo}ozӛ>G7|$ɁGr7v{_}<c=nOHe$ԚoK]>9ʚ>fW\|`fzիwG47_i`̮_aFo D[39p)$lq.) #m9"}Y;Z4Fn{1a(a7Ү_3S#nH#VhpΝ?ƍz6<=ܳnܸF~+.B pcw4 I{{{+hK/UD3Ј?!V)qǫ?1M-o\_ۃgcY~ŕ+/ 8S"+sk^]P <ۚ՘[ #ϧ{SԚ7}'K_{~[Пf |Sn}y/_mjPa6yx[._g Ȍfֽ+[kcoǙH2}涃BHly'K=3һGD>$̬d lغ+?g;[={~ XJs?G]Vh൯}޳l˲<_*EzJJqkUӤVrGrf%a<mS3swrK{ O|f㏿~'~}l%nnG=SO=uڵ׿_o| Ibvtp ijO|=z?I""+rn3;<zm~?HL3*rZ~pooEŘ>zxiSQB K3|o}kǢ}r؏]|_(DFR(@JUw$ @;Y3G335omyyzW\|]wWzի^yם};?.7qxt7'gϝҗ;f6ϛ?|냇`]x /LmK7|+_ʲ,/<.\w]w5ҳ|+:̙3ʕ=zDkAGfxꋏq)<oW\]5ws]o=;UR@]z ?iCJ~]wۻ/pw?ӯgvۗeleY-/gϞ{=s˶ &3kǽ+R^:.b/'6A4Wܽtfx'痮]7oЕ,=o[kW\~]z}]KGepplq!O3w'|~왳!h>OkR efqHgl[Q)dS̒|[Ef=@2ܴRX W^|X'@$~k/x`߼yy[{=cnXև.^|YM/PoKxBJP_o2ܛIsskͭo|,{K׿',,SsQ1v{7W\FMkƍ]զ7c{='xOh7n޸vA7v!"2… wu痾_x>zD$ \|ۿя~t67o^|^ׯ9:Dn_j4=]o9?G>B3(d:Wz7GGF;K:^{'Gi0 d'PZ 0b RBޟ~ u勯z{{aFn^ʄͭ(:]QEacQO1;q>8ӽFrq̄)UAFFf1;u+df4ZQEsH'*&|Ue4Te[$wJ to:9It.Xۑ6PMԓ_o%),#A%- @ol_&q"x]+X温]fZ OTʆ[UYJ! zxwO`;Td*0([ cCIhkSM)F\%Ѯ߸Kۄv'cp|ķnK??1ŷ eџyM7n'?y͛?Y/\8off'o=lGyWgވWr _/\^޺[Cx4N)٢BER6,u}B۩ w Yg%`*x0jɈP#(nŬ2xzzTo52Q@씣݁Rvp;Ypƍj2B|no'{_cV:_P fn"m%е ([u28kVꗧWVG[V@f"+X?k8~<v #H. C 8c:\?g3I*DYhbP˕] %e$x$iL'zzūH NbI#5566I5H%*Kv(KC=;th܃]z"+~~/'ȝg*w+%w٤6dFav:+cdO$ü{Nr [Ձ48WGɎj֡&lך1@YlFHwu5 &aUsUܞ eEN]sʗ!x !Iؘ*\P')$`\-(r:I?+T>I^׈QG@BMYCmG-ףHJ ѷ}MD6`Œd"-)47pLӼ8 N~`ޱI.OScvg)Wc/NNii ''rS= t2:v ?P)nMCZC_=~xn6ST o)smLUw`"w $˧|#uWNo%2&uЌ'6דi9S~9{]vW^ rL; S'_EЌ m* %<= A53;/if4Y3yID@e$itL4P$)z]P(q__əgy`gc ID v5-OV] g@k|{3*y ])~,>0@*XxJR2yjE)uK?Ο|iNys4 "C HCPfflLnX[k;;3Gg6.R0se bvDy^oR y 3*i6 !@цn4#,i`Kh/d'Yb!e$P46Q0U`!6v,+(p+jތ!zASlь1B SeRMQ2 WK/Y5bĺc V-,!f:]?Sgϟpwy49hKPw|BDW޾E߲RݺS:Dˢ>`YfP~H3+34: 33#{d@:TfY(U yFF=Ĵߵp+P RLms24c&ULBL0=h .F2M$I1%~_rWHzsT)bR|3uBn7{LX̧* &%tseFD,@60yfJԦB DrM@mw6Wj!3wK!!WdBJ/"HbmdM{ CBZaiHLœ@Z"MFˬc?Hbr5wARI/˚(6p7 吺LD":xR,K֗E-۴M733"=!֦M_,j\ ffB4FjߜUG23;R˧*j"+ =bjMt)c[G402a2Y *lL0soG(Ni $}h1UdkHA TAZ)Zae1 ֪ըQ ]؊W E~z 5I\H,{֎A]uḧCMRE„Pl(nR2)3 PL$36kI&3t*[hPQ kpzD/B<"V9i=-KI sVb4,]}6͛{;!k 4"D I*G|+nSkFn2dscidF2DVqҨ!r{UmRe(gTX>8s3L h-J(JSPMV4D͓ }nSD,:Ҋ2*F#mw} :Pˎݯ"# 0FnI o|Sl%s<{*i4Vyśgmʨj_5 [-!2(LW)Y H/3!E"D.\7o!-4ഴ2%o.Iz!m5-Z=)-TaaF@2#%3P@(P*={UIѕ!9O+s/UN-Z9-f"FYQR,lup*0M0+zr_Qf\4JɣHU۞fnd n&qsq|W$4i2 01Sk#z&-DWOfCNئ@_9rMXLUekFu"Z Ӑ[)ZzBoYע65Dx0[*B `ڿ_ߩtB+(21dFhzv[!6OMVn@ZȚLX*WMKt7kdfiV~;:65ò1F$XuG s.D,c"\ f @VӈekS=Dvgf]_-PϹG2t16$z1򣇃`VH;65}'Tr$ܚqt7>d, f 2V+<uɽF]m"H;#zǎQDF'"(FlGDd*(`{L7eex4a;*нQ9GpzP IDAT%3Kg *') Hٌ*'N骚PUao]rI(#\͘R(IbdAXy*NnaAxweR z Xǰwwz"9!7{(ENȰgA!X D\%%o.we9jʺA'S4*}pDTm1+E՗Q(K)J,yH)tzڦA j-{S )rѕ0Yf&Jm 6ĉ\7KJ ^PN5%vv{4m^sk ͑d@T3Stk-M KCS+0"!I0_(<",{R4Y֢kctk%RM:>H2!˙H/ " ?IOL<2k `^^Ly=W}?-FI7>&裘(ѪnkDSē5m[Ur!9N\y8:~3Mƛgj Ŧ$k 7dDsI Q$3¨iF\YS).WEHQKnWP'>=+z ԣ^LzBQO##U]_flHd1EpYE*5}'k_H5tLVd[9ܝqՆNSO{3+<36mD_r7NhQ'EPMfBNfm"2e2+0Ytׂ:t\,fYfBXJ.23:5pgG:}BffX-o ʠ,ĚLY[cT![E#SBLtGgNtAĸRT 7(Hbu];[[sedҢw$"˚eYTxD7wȖֶ=Vg@X4[: '%{PL"!H=`)##T]0=S-ˢAYkÄc 8,[UMsC˭hal\m(*kJ4ŽfdcU+mNJWчϜڽ. Ngr4h`l H IiQRɫSɉq.۲Y/TGF8ַa!APZ"̚z1f$(J ę&lFJbjMcEu%,V>c#mjYi>ЌLNػ<_'T^r呇>{ҥϜ9ڹaL]4JtcLH;½e.E#28{)#JAi"¶񤕊6[cUdD̜PPpկɊ 1#IA}bc5Yr\C@C)#K!Y^\#)T@TfV~4>Y鄲b"ܛ7e(1C)s+#D*3Ɩ{9>7Kpkez%AX 4kV7w~rA6H?z셶7]3gVlo9c(hG;Y뽻OHb,4Y-Zam60,|sO^!wNxp*DM>CȚӽu.(C; Y=X)ҍ> 26IHKeV 6YT&k>MSsܜ͚Mنqz?#.\ht==#g6M˗V=T@U*٬+NeDWonei*Vv٪sf䒠Y<<,U ٓod7Ͼ59d"jccʌJfH<3Xo#&T߱KKbz$|nfF0˚0,0j7,eE[PUI)`tYḒ \k`m]9MP[)qF4#hQw"VuT۪$DdMQW^}чϝLwjZ%Z斫geHZT9:jn j&(d=|rm?ߜHѲX(w.37ecݪqPtFgAr}f)ҽ` j=m{@Q•is5!3 #2cdy +Q3mx5[Y/% C|5K>νbK?<ܯ":,9oZI%˕k2>JF&)Os/xld#ri%LNSF;G'DeLHbUyn2eSQgܔYG/KuCEQ)M=.3ǹPz1%m޷f.4qe,UGOֆmuk)2+a|33Dn&?*7ZKyW560h8uRv)Ht$r(35+SE׽ $YE%qg3(W&lս!{=3i{Ϝ=2D14ڮ|f\J5fDwsY*LS%9dԬ2IFaH#i3hbV!kH% ɍّ)s|$4_2'Zd*F"k "i꣯^OAY5!!oޗŧ"RNKG0y͑LUCh>S+'F P?pۧA+C,HZb}RYyFP"mh@'b]ir6 eF m{c)waV4Xa頤a{fgJHNfamr)'#ٺ@+Xy%Ce/+y(ۨHbIj:iZrR2ͩVfȘ۔=>Ш=2F=@2XudHP }(u疙yaLN6Y"ÜP UoD6نZnܹsf~y̪Ua^߳j=K7ZTgG mAE9mȰ쒒\Lf>y,0SU v/ ֔h=o$ KҲ+-@5Ffz9*(fޕr.)Nj ksj&'КGW)ȫ{D5PDBvgVC9ؙa1Uo\4OJjPT仯TfHδ0mrs.]0Nkef"#4Yq@*YF%mj{)#""Y*'8s@*K#sؚGfĐidQ²M Z~U\Qzf^4NRQf]&`uY*WMfOs\e5&:3àv 6jQU`32i;e ̔z蘍lÔe4/%or0MH{eaRh}hU߀@F$K}8ɫh4̢Gw;V夅%@8(5,V/_ uۆ)G/ދ7nf9XTHyo h, Ʀ uws24AfܴinmwެWmUlLK)! ~ 9C̨q)RTlꞽysS$B6|g9h"#=cHzdBM†AgYq#JAxrHrnUy@j5; + ܽ|dsBz"fdrۉQ_62ׄH+ś4G1͟ 7Ϊ퐮*,2Ṯ4x(81HUF1@31.Vѡna Ի\SZbe:܇PHɚMi~.=’nidVUt )3h {겕E X`:YjL3vSYd(doFyuhCpU#H,k4 Fb 80KPx_5R538faJ&<|V猡b"y<-JPF̢,g c4&BUU  b5sڹ{< -ϗ W0͙>:CH4 ;`L)?FX*>8R rb_.f0*"੄T8k.]'JU4HM2Ή*wOE(9d>'4LVbNœ+14|Bq8`eZh 0Z}<hoڸ9d4&? d?HfF *˫KUʹ:95ACuqSPq4C3<9= `Km^AYJ7&s ݇2 tɨentS@IvIj˧F xjCQҿ<"wi-gLҰ|9id*6[0wqipbmp,@$뤏4FL#BŮ;L.ـY$A= V%f8';OG~n8 "N=G_ȃD-F؄9Wf35I\ڱN9SHU=}%61VHxr%9/t,pI9zC[M<Rw81UC`\V4ecIyy;pKhqmb #":Xw#U8옘9/4+Rt2@1䜓IIKG](6VDv 1Z Ysӣ ~J%u5)S|/O/\R3VX& բ!Ef[hQu1U< dZy2#%i2Yig4f9gfV!|998 "epbft5AN&-Up0do 5L!4 eY'R͓Y]giI 6@CFth[`\ -!C@-hQR#e*VlYl9כ~ɒ;b{Ѯ:us4XHTDt$Stey'qEv,s=(އ{12?'YAʣatDUaY29VvY|<+_YS)M[$42KARih_x5uOn*Fd,eېALw"Z a' IDATAPIrt5a@aZq2}`N–U047YI0*t:Iγy FVXYjWʓ6.c,VU04Ü[&M*=<n1f^r8Y#MfdLC:(LQ MCϩ1F]LMw)PȈt'F AYe"AcYQxy"Pd1j- bkQb#{XWtH*}/CVkV4_E7h3c 59 f%TPF+c~#yѳ9Lٔ錅Icҋk(?ͥJ_@L N7<(q~u'{SX^A} ҕedXb/z8A+1#O`¦!5K3kZjQ#zJ&_0Q':)mbD. gLʈ_YsˠBٮ GR:AmB23%[VeFgY }u_ڮ n(ȪtU8 DA@(4+ML w˜S2;FĜQ$sAc$0kƌ1gKXENҧN"1,&m!hU4x|Vsnđ;ni@c־T <͎RC Vdf/x〇v:.!ͼI?+)sJj;  !^ ϒ<=(EGxN‹fp1e.R$t㧗1L"^>}"eՇꈬ!sgf9;TrJ",`"[q7?F%ߐkeO0nJ%qCIŪB 78[BAc .RDRb9VfͰ% (QѯO70$d&z|lO3 c.L7 D #c`ʇxs8L3-oNu7gA #]lKE1|[hȖ.T2PklnQ/+1-?RYdKyCE8̵wb52trfcrFuDӹym&)*e`v%/Q)qNr 7tO.#OTVn⡿P~nIX39#,|rvVySOS[vy.e1h1$[,I ;5{BS$cYDXǪf*)=.8Fޤ<2}X7Un6l>ÜCtWNJti5Yq#Y/0sq|Ύl͌%.T3< a޴UaEF!e}Eƈ<.q'l<»-YgeRNKz|i^guSUE0rDY0<G`GK ZY9f9t -u\+P0]2]" 3B1&0 ' 9Jû͛G eP8q "}gyIU$Jxpv2~rH_}bS) 1ѸM_Η~ON :kfW%=i"-3wӎZNbnVs@G1%032rwȲ<֕W JU~nTIQNP*]K= wd]^[SFQ*wfv}o@&܊54,׋#|ow"+pJX6v V94K#-h[J8vØ)ǘ>\yM'e.x+^ye~ڼ,$MnmXZqqX6|ؕ |4,2_~OLc ʯ6R3 U\B镓/IwN-N\nfת`7[hQ;1w=Ѷ"6]{Ӗj\y +wMNk+WS7ЯI-XmCGj.W$"j\4M_Y [mNLZar_:U5ak3[r%b~2=tbkJ1*^zm_)+Dv׬C{魽|eޞz ~^:VJlJ5ܢб4dAuvP:84WI*,o['Q۹$n׬a%o'ەQ`:c  VkU>"˥')ۺOA+^xaܛiq_XF"NϦP++YvȼJeqq'٩u 5~{vݸ l: o.;k [8_2"Jj__IEN[FH:O!;nk8I ˊW8Ԓ=EeL}CPMUŷk/^ˉVy5«3MNyW4:^>9*z=z"뗭u/<\v#ˣ(]صz,]COANx62: (e/]@Ǎ]DUqkACt?.pD['mf{O֑o*P]Vo}n+$|[ o:daMO竩孜Xagn._ !a#r-n>}oB}GxvU2 mS+<\>V)%[[7ŸYSHIDX ZgmQsrW\+XG;zX3)o9s\Ƞ)Ҹ{=>/wnneb7p$U~^زv_l.}^gRHQ~'_Un+Zi\UZlU ?2ZzBH9nW[WjH|{ }eDcS+v<Ϻؖq*hiD\VU7U*DͥaS嶞hȭGzD5gxt`ת^]as,~!x!42hF/wupř[e;Cwc+Htd]5dŘt^=qۂafeۏ Z}U˳"V6ZUf:^Vm;/](\aU!x/A:N4a BJCE\,+ GXi KVkuյv[va[zO[j̾ν^̈́';Ok~/:˰m]OAmk^ Uctyu싣f^sCCfdhD 剎a>tlQar EqG cca<0溮CWuٙX1kNrа'e!LBV1cnT1 w!on{Rs}\Q:ۊΈmyuoqtUe-ZSl1f vz_ZZxs9vA?>i݇/{>-VSث7JMuj`Q[Q2'TrJ0U5vjosv-0U h\wXwbJU9T⢬ @_vj!ob͋%}N¸&57*W][k)^E\UE{v}pN 9|_ \[aħVRvlzۭseStHf>}~~;N{Wm[ZcTū'ǫ wP#bp5أkksŸbhG=^FHu}-iaO Y4;C`RQu}$|-{_#?_KW]U(㩒UF_@ UyRzط+˯V2 ְuX4"ոm<5jI{~x;z$qjԯdz sxrozW3 cz1_U?aڀ#7{o?ǻ]koLǯoHG{C=_ "aH1Ͽ]w_A^nr}O?eͨ^}Su50]ᷡל?p+Zo͟sX gA9w>֟ɟrnmͨWw*ïs_+vAiyGVc#)B),RB{?~{ߟ$_ _.Mp}9h'x_ŏ}qjp15Ԕ5ʫzoe"m2ݘnX܂Ž&' itx<~|e$Ò>~x9>wwݣ]Jun= $Ѕx-?lSU2R3jZ0]j7XJÇ8~_TՍ`iwc\+ǹG]޿}ۈ5>l.٣FBtzme*y\HՒ ~a_ w*1H_}goV]vc!k2"9vw]I?,Ps_g;i#bs~wsV͌ vE,RcF˯o~˯hPzMՒ ]e9An Gv">}կէ?|{x٧Fy*2>yN]T|]սʐi&mċRwW]7`?-Yxs wVw{?&+ `F]C׼6nM !jMaMV l@_w޿Ͼժz4<&5+z6JBqo;u=h}Fa7BMiSWϼjhJaVXTW@/Tݡ6Թ?n8y+5]J-ʱw`F.O}{&k47(G(B;~KxlcMS~ޞq{2ޗrbh0?"Z`&-pQ}< 0oxW4^kgrk{%{#\C hA9=3& 8m؜\еGB,փ;ڱ7\`pa%}H:lzhʺ ,j> SqZ̚;uZ]e "m\}n5#=M{{^ a(S_|@׿0H@^_j6Ӆn;w!#.ѿf]݇)y=;FZMf1f#^j@ ]IYDn\kQш;u'ܱyb44y$&,UlH kvkܧ /vuDz3-q78_ k4qA}'CuEִՖ П[cWy\}r_XXh_wTƷ٥}.t; WBUx# "5"l7Nu;LC5{T"-M#2Kw ΈyB1]]+[?[}z;f~n,5"2Rnw dUSw)[|sR۫|]?-U>WڽvŽI*ĺb(a@:j=D_uyMG.JvӥfZS{Mhbt3zޥ4͊ܦI%Q\O9p |.:3l ((}UEn7^"7v,7n'Z{K؁dEf<zWDsVE3׀s|^cFXL}.FXVA]DKH܎Рs#{)޹{r]?_&,m3p5*ٱƷy0ݎK.xɋk;^$nxޅH}÷j\v_=ڿw#/2tSv{re"{{HxwlOy9oć%34f7#칫4ދaw$a>kGJq֦^iZ0r^6.g%zrOڍw{tF +Ϟ GSI.f~smMӖ7W6 oRA)śK}0\2W*u@qm#n16_li O61[jNԵO IDATh_,Ь.7_LMbIeRh<Nq%\z=׵ c5jmW{y2ayD[H<ޗxC7^Xim8Obܟ `dlpO/kH \Ż,~#X|t:<[JAɽ' 0j_",]{\l[&_OX+k =Yr*J}av m]ށ*\Mj=YБ~Me]Xʞmudt~6 oU1.@-HX5 : "qY707-uQcEv߹].ۖ:ݞFQV(`JG Awm 9yM|nZ堿|\r*syTt(}P׷J *W.ݪW.uhE^wovgޤs3iXЀCPl2:/Ϫ[/׍OC'nd5u}M'HENo .F=&7BŰQ{V5^nݲژ֬'H_OTI"OYW\s~qaIK*ssJ lXD{#L=46/bgC4cɊ/%? l%Js=}{C<֩m߯sM~_1y`QׂmAwz S ^0`m$su).u,ұ`k#ԓ5mYƐT'H(9 UㅵgP]˧|U/\ӁY zY蠿pܵWj[qf7@̼ Ú?lX EL*Zx{8_0[vFu&e-y3oH!#zZtt(dɏܭ(79ξ@aG>) #VGF@u3g@xk C\)KF*J\A[(;IA=HV(n޾{gqTr|n)O(Ͼ;ۿ2s}N⌁TUbv#8h,# Jjte._/(pZH裠ĂtVѕwNv8+FDͱ0+RVp8Ƒ{uS^h9XC X)Dd{407!}2y/womrǶ|2r4>a'B'2^T9Dzb~ s&d{Ggp!2Ư%/]$ʖLtfe9̓=稃uE(H:V7B G3W!PHW6$͞rҀ)DzEKD*֏AT5YaG&~o?ehٰs9 FF\^{Xf3"C"=2gw92[HؘnQ3QF"@6B%ʅˍe#*TK 5Kq"B#Gj\³2O(Jv,B[`fNHT,(=Qgq\eaa(Ȃ$ dpx&K8*YV)Sg$"\wwYmpS$K8cp4xX`yGUh6OPa*2pS[6)*[ ݅M08ϭU5eȘCm!"ʈhc%>;H'1ڈ])962ï&(] Y<hƼ+AM-2 D32"p7,l9C{(G޻"UN"wG6;ʙџ߼$[Nx-xň!1i` kfie6"҃S32wcggŶ<ӌT)vd N SDe=N';1|38zyp'FCٗ$1lⵧ^5;:'iJK0I-.K3wÍ;M0د~{qnBgN6cfDv'AHMIуfau2󀕻>yEZFae9EJ1]Et y $ejfPc/OjS@FIՄ2aTfF8oeVλ)wB;k$ s}r8*s[_~߿qo~G%;F/?geh1b Zf0?ҰL.Ffdbcewg8Q@/^u _\IgúGUܺ=}AeD<&#c:-@YzhNϚfܞU<=rVEzÜz w>3֜&Il-](o'Ǐћo-<.dtF$cĜbm Dmz-doKqtgZYejfU$AGl^.RC7 sIi=,p*h'_膉'ɉYq<狘sd>̍>,¬;Z90n3 jKػXBw?/~޼AcM."3I eoYƸ8"D)=-f=TNl®z `)ɦhmyQi6Urn%%YMWM$q(S#cDM61-+RB9Wn;Vq~2O }S)nH\=`Ìs`VLJ3H/o~o?|Б#f/XV2PSwٵvE4gWfQ2d#3ˡ0m7l \hL@ck!-|Ĭ@EFGԬŇIyRjT/m d*#(䉈*2v;2lPPq*p?ÚrC,[/_G#wQaz Vu#}G$&B37ME*IޗZĄt<=y)4[-,-cf:Sla1`#$B;;0)&BÖ/UZR(-HMaPE=ޞ"{?(g:'ج_Wo>|?ᇏQѣрU,^_R !%t* wM+ =UIfGdF;0B8s8HLo\uK?.ݺr1D_2c hc2a„ DK20c0EnZ2xtjrN]{+WfdA.w1X 6{!G{6e zK(t]-* ix|V Yё Q:p,Zu&S!'?goWON*nwbFƌ# {W^[-]̤<݀*-N $~E"Rx%wʇ}V}?u|$ {,SɱɣQ3+Wj =u=$е"(_BH% _H}GvCIE?SV+_ X`R?^'_}q-\ 5jD2$]L3`fr'"\mk)Ċ$ŮnU̴"j3UgyZXr/ʕ]/:U=sz2" @\ņxgg!;="=l3+<yI$UA'Wӯk}7ʍ$uyn|GHfx%w&A֕>̘3ŘX.w+n,lqOoyp\Pnup &4o\_s]*`=<µ,@3{fLu>$ P ^ź2Ⱥ6RnHETH.,ʮV19" Εa;7\rd@xqb"H!34wi8aA/7|zw>hu'BNbq̓ #Tĕ/"v-g@ Eqz<ڸpc͍\ lkeUYiKPD&{WK^o\ޣtbjLzXU_h9ZLJoݪv1y>fHiO $A&+̺&Y_O?o'J?Edfv7I͖t\*"vWTy}P)WJo8tA+ѓ 桚ǹw52TCn_HE`-DT7Z.wwݶ}0{g#]vCF4@-y%B[o zN+=F; EGk-\B+|rYa߈+2wukT6o)J@m pҶ IooI"c@_PW[/IKAk'%T=1%(BUog.q &URQgwL06,&;l0_;c D2wq!L* dz}|ru5<ŀ7?Ws}BS!`vLi VW]QO2i{E7Zn'UܝܲN;3l4Ukڶ6b]5ف} h#V]&m#I ;zuuvYQAj3fs{8UsBu}dn#x-^ y1k]LTG q&B1,we]r+7-"~XݍJ{uHUTb RM@2zTw(Zo=1`xCL 7H!s]=C\jW!:IDAT@֛ѭo 4;+Ftњ#`}Z{WZxD pFⲐ@p-4殮A,-b H8kȕե@zθg<{4Mw'0~zSp`ۑ֗f9TC* ]h1KŒcZpc)rBN1k_6[#,{D)%nEye̜Kk<́s-X/vCnH\bl}ZkZk-rF|#PA^kUXdtELbW?̞``y 2:Hpuy utH:2}-KŽ9lHXIyDI+WTCFʪB\I WE:~q,PdN܅xBc-E`022ծh2{k! Zw]=F簄eUY|޻-ibcJᜨݾ|boDn@jj'u]ޮwkkfG4M[[{4"Iv7uh2*]?dw+vl#h9R$#+|<%m]U S#D\ 0PvFm;!yrBBYuC4|*B*ELm+\w3bVTԮ:o eXf?C8VKFu:@Rʘֶǁ{R4r]z5x{!: Mf`u1#2wQն]W^f]LМ\GުZy|] EXn%[{jAR-x@Lc_+g\"4X6R{4]ӹ>Xe kqL!cN7xgf5xǁMԺ Ā$41@ទD"I-`pME,f؍յAF5tcqɭxO;i)uuYkrmN bPke[Vezz =B^]j)WK <{NI7ǛB;JZf9OyDZ}粊v:GGⵒ+shqH$s,wu@\Gȏ\jEdG\AYD uuVP².+"ݮɻ`5?Rbtv+Qj;p<Jv[g -1i+ÀZ@_W0 i]Pdft3s|P+wt(8{E\k5 ]Mh!Sy'Ic4]ā]x KuyhҪy]Z+C2Țv?ڻ{H++DDQS^km"U{syJa(LD=2Y.^$uȡv)wZ' Kjv %nK; v>{D4|y{ߟU<*łQ\˖du>,P}?QhwuJ%kzC3]^Nca13];=@f^'I: Ldr'TvwmFE`Ɗ΀n:RW2beF@u#ڦ,wF`t3S]ko v- gLZ?j=՘~|_>u 4N@Q]P +c&UdW[wU]"MDž\F!ȸtL:+ ŴBzĮa +c$ݪ*..]ƹ<{‰j$TSVFPUHP嫞$ZW AcNVt"X}S{l]+"VH"GSX6;u:dz{Orrs&\i}P5h(mYz06sk%:Wa%+G SӦP jw9s#">"bJHm]۷+SDa,RD䵢& :n!LnҞX<:ÛX{ͫ $kЎf}Pwp;JdiX^{yF6A0!dsu=ɴ-ϦauUI6 /ʤA]\BE$l@^0u]ݙK,P9Jf]O|8 c;B [#1veCE橆=Oݦd4N֚CD=C'dʚA[;&bELmdWpaa_!pInу,DV'Lj]3,nNHGXU]Vv  U s0I#w'[WRq;VF yv\FZk,XV 6:IWJbB<@{MT9J:Gyb1G?~\tMvxIN[*k_&JڥOμ:&b4su\݀Ɵ8(rf:+0~Խ5mm1lk)<>a2#6W>0- 89]ݥ$Bm]:]F0"#B 2/]Ї<+ uQJʼnG}Ū^4x-kWIZe(&G$®1s"d: _mݴ7 'KM\Hbو'!ܶM&mǍ̜@'A7F}g w*ZOEȰB0vÚ1IBZTޅ293(6SY˛{߈zuB}T%=@{|bq,ppBQf4'sq&NM;#7x~l)ޏv &ޛjs]t/\F"uØOpD5ϓ@Zゎ)]U,z,$B+?6ކ+X}gD](k#] 4mVoƫ&G囜RbnOd L*Df.&vY:$ 7ʶtnglFe 8dD8rZd mP8ˈ]+YG;\7 n,$__/t\ ( d^=@(/3i \a..QwY_]Ľz ` cm+W{oK*mE}t ǿT7{==x{"L0{7W  ,֬Ƕ:1`A(nf d:HmQvA1"p&DU{"MPLsl8 pkZ!(lzO1`Kl.uE(syW_\7ܖ?;9Y'x[Yk;R#)NUչϕ}`U!\+$;LL\<BxŮZIG2/*ӀI$iKVVLuJG\b;4dT94 Hr]wӧϴtx'7GR`[ k]U]3Ek]{ok6HXwUpO +Cbo^^#߽?~{}Ђ;_pj ]ztR}Ĉ*?pA..S@e9L^k- D-c?Kuˢ\Q3]o>I6>dTLW^yUZzUmWV:<^LM1AZx-PǛMZ_W5R~o]mrhFD}VQ- ~O'L~DN BiB#qe4O6WX69-]uEa/g#O/WB^qѓ𤟮|gr_ 2|i@tZ˪O=ɫ(3q/w]O\le쫿U$wG^XOG kHQ~qz˟;p޳VOwdV2_?[!"-4)C?#w >x')FǑuczO=O A>'#׀xCPpLGzxp'ޭDHOa o͚idh D3Dg}yΫwwTԇP!wz-tGna79V{c n=% }t6v'Fh1 {@/ybǓ#F]u ߿C}慞z?hGc3͏3u,_NܵϺYvME΢~P'lgÕs>g| /[B87! 2I#b6P[Uߣ!gy8lBZLO wx QmjޤlEkĹܮz&|Yi$zxs(qvOg4@Y7׶㌌>χ^,ޓ;wfjr&W2ssyHOջ~/ |6s!&\y-$w3<gu$woMcpBZ}31Yde焜U"L=]~ֹ'=͊xG3̦g!jD]OzeZځFﻍtXY$}Sqv8K>gMϻ[P5L 0I"d'G`25R?w+Ĺ>'ȟoooCyLq4y \yK.ez_x_c {SZmSϞg=֡?qqF׮4?a$Ώu }ctHw ո ok0_ }z{{_ 9dS@,W</xX}ŀ899*=Rt.ßXQr|57Vo~eyj}E? ̟oZ+}_IENDB`lmms-1.1.3/plugins/HydrogenImport/000077500000000000000000000000001247673406200171325ustar00rootroot00000000000000lmms-1.1.3/plugins/HydrogenImport/CMakeLists.txt000066400000000000000000000001721247673406200216720ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(hydrogenimport HydrogenImport.cpp HydrogenImport.h local_file_mgr.cpp LocalFileMng.h) lmms-1.1.3/plugins/HydrogenImport/HydrogenImport.cpp000066400000000000000000000215331247673406200226140ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "LocalFileMng.h" #include "HydrogenImport.h" #include "song.h" #include "engine.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "note.h" #include "Pattern.h" #include "track.h" #include "bb_track.h" #include "bb_track_container.h" #include "Instrument.h" #define MAX_LAYERS 4 extern "C" { Plugin::Descriptor PLUGIN_EXPORT hydrogenimport_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Hydrogen Import", QT_TRANSLATE_NOOP( "pluginBrowser", "Filter for importing Hydrogen files into LMMS" ), "frank mather", 0x0100, Plugin::ImportFilter, NULL, NULL, NULL } ; } QString filename; class NoteKey { public: enum Key { C = 0, Cs, D, Ef, E, F, Fs, G, Af, A, Bf, B, }; static int stringToNoteKey( const QString& str ) { int m_key = NoteKey::C; QString sKey = str.left( str.length() - 1 ); QString sOct = str.mid( str.length() - 1, str.length() ); if ( sKey.endsWith( "-" ) ) { sKey.replace( "-", "" ); sOct.insert( 0, "-" ); } int nOctave = sOct.toInt(); if ( sKey == "C" ) { m_key = NoteKey::C; } else if ( sKey == "Cs" ) { m_key = NoteKey::Cs; } else if ( sKey == "D" ) { m_key = NoteKey::D; } else if ( sKey == "Ef" ) { m_key = NoteKey::Ef; } else if ( sKey == "E" ) { m_key = NoteKey::E; } else if ( sKey == "F" ) { m_key = NoteKey::F; } else if ( sKey == "Fs" ) { m_key = NoteKey::Fs; } else if ( sKey == "G" ) { m_key = NoteKey::G; } else if ( sKey == "Af" ) { m_key = NoteKey::Af; } else if ( sKey == "A" ) { m_key = NoteKey::A; } else if ( sKey == "Bf" ) { m_key = NoteKey::Bf; } else if ( sKey == "B" ) { m_key = NoteKey::B; } return m_key + (nOctave*12)+57; } }; HydrogenImport::HydrogenImport( const QString & _file ) : ImportFilter( _file, &hydrogenimport_plugin_descriptor ) { filename = _file; } HydrogenImport::~HydrogenImport() { } Instrument * ins; bool HydrogenImport::readSong() { QHash drum_track; QHash pattern_length; QHash pattern_id; song *s = engine::getSong(); int song_num_tracks = s->tracks().size(); if ( QFile( filename ).exists() == false ) { printf( "Song file not found \n" ); return false; } QDomDocument doc = LocalFileMng::openXmlDocument( filename ); QDomNodeList nodeList = doc.elementsByTagName( "song" ); if( nodeList.isEmpty() ) { printf( "Error reading song: song node not found\n" ); return false; } QDomNode songNode = nodeList.at( 0 ); QString m_sSongVersion = LocalFileMng::readXmlString( songNode , "version", "Unknown version" ); QString sName( LocalFileMng::readXmlString( songNode, "name", "Untitled Song" ) ); QString sAuthor( LocalFileMng::readXmlString( songNode, "author", "Unknown Author" ) ); QString sNotes( LocalFileMng::readXmlString( songNode, "notes", "..." ) ); QString sLicense( LocalFileMng::readXmlString( songNode, "license", "Unknown license" ) ); QString sMode = LocalFileMng::readXmlString( songNode, "mode", "pattern" ); QDomNode instrumentListNode = songNode.firstChildElement( "instrumentList" ); if ( ( ! instrumentListNode.isNull() ) ) { int instrumentList_count = 0; QDomNode instrumentNode; instrumentNode = instrumentListNode.firstChildElement( "instrument" ); while ( ! instrumentNode.isNull() ) { instrumentList_count++; QString sId = LocalFileMng::readXmlString( instrumentNode, "id", "" ); // instrument id QString sDrumkit = LocalFileMng::readXmlString( instrumentNode, "drumkit", "" ); // drumkit QString sName = LocalFileMng::readXmlString( instrumentNode, "name", "" ); // name float fVolume = LocalFileMng::readXmlFloat( instrumentNode, "volume", 1.0 ); // volume float fPan_L = LocalFileMng::readXmlFloat( instrumentNode, "pan_L", 0.5 ); // pan L float fPan_R = LocalFileMng::readXmlFloat( instrumentNode, "pan_R", 0.5 ); // pan R if ( sId.isEmpty() ) { printf( "Empty ID for instrument. skipping \n" ); instrumentNode = (QDomNode) instrumentNode.nextSiblingElement( "instrument" ); continue; } QDomNode filenameNode = instrumentNode.firstChildElement( "filename" ); if ( ! filenameNode.isNull() ) { return false; } else { unsigned nLayer = 0; QDomNode layerNode = instrumentNode.firstChildElement( "layer" ); while ( ! layerNode.isNull() ) { if ( nLayer >= MAX_LAYERS ) { printf( "nLayer >= MAX_LAYERS" ); continue; } QString sFilename = LocalFileMng::readXmlString( layerNode, "filename", "" ); QString sMode = LocalFileMng::readXmlString( layerNode, "smode", "forward" ); if ( nLayer == 0 ) { drum_track[sId] = ( InstrumentTrack * ) track::create( track::InstrumentTrack,engine::getBBTrackContainer() ); drum_track[sId]->volumeModel()->setValue( fVolume * 100 ); drum_track[sId]->panningModel()->setValue( ( fPan_R - fPan_L ) * 100 ); ins = drum_track[sId]->loadInstrument( "audiofileprocessor" ); ins->loadFile( sFilename ); } nLayer++; layerNode = ( QDomNode ) layerNode.nextSiblingElement( "layer" ); } } instrumentNode = (QDomNode) instrumentNode.nextSiblingElement( "instrument" ); } if ( instrumentList_count == 0 ) { return false; } } else { return false; } QDomNode patterns = songNode.firstChildElement( "patternList" ); int pattern_count = 0; int nbb = engine::getBBTrackContainer()->numOfBBs(); QDomNode patternNode = patterns.firstChildElement( "pattern" ); int pn = 1; while ( !patternNode.isNull() ) { if ( pn > 0 ) { pattern_count++; s->addBBTrack(); pn = 0; } QString sName; // name sName = LocalFileMng::readXmlString( patternNode, "name", sName ); QString sCategory = ""; // category sCategory = LocalFileMng::readXmlString( patternNode, "category", sCategory ,false ,false ); int nSize = -1; nSize = LocalFileMng::readXmlInt( patternNode, "size", nSize, false, false ); pattern_length[sName] = nSize; QDomNode pNoteListNode = patternNode.firstChildElement( "noteList" ); if ( ! pNoteListNode.isNull() ) { QDomNode noteNode = pNoteListNode.firstChildElement( "note" ); while ( ! noteNode.isNull() ) { int nPosition = LocalFileMng::readXmlInt( noteNode, "position", 0 ); float fVelocity = LocalFileMng::readXmlFloat( noteNode, "velocity", 0.8f ); float fPan_L = LocalFileMng::readXmlFloat( noteNode, "pan_L", 0.5 ); float fPan_R = LocalFileMng::readXmlFloat( noteNode, "pan_R", 0.5 ); QString sKey = LocalFileMng::readXmlString( noteNode, "key", "C0", false, false ); QString nNoteOff = LocalFileMng::readXmlString( noteNode, "note_off", "false", false, false ); QString instrId = LocalFileMng::readXmlString( noteNode, "instrument", 0,false, false ); int i = pattern_count - 1 + nbb; pattern_id[sName] = pattern_count - 1; Pattern*p = dynamic_cast( drum_track[instrId]->getTCO( i ) ); note n; n.setPos( nPosition ); if ( (nPosition + 48) <= nSize ) { n.setLength( 48 ); } else { n.setLength( nSize - nPosition ); } n.setVolume( fVelocity * 100 ); n.setPanning( ( fPan_R - fPan_L ) * 100 ); n.setKey( NoteKey::stringToNoteKey( sKey ) ); p->addNote( n,false ); pn = pn + 1; noteNode = ( QDomNode ) noteNode.nextSiblingElement( "note" ); } } patternNode = ( QDomNode ) patternNode.nextSiblingElement( "pattern" ); } // Pattern sequence QDomNode patternSequenceNode = songNode.firstChildElement( "patternSequence" ); QDomNode groupNode = patternSequenceNode.firstChildElement( "group" ); int pos = 0; while ( !groupNode.isNull() ) { int best_length = 0; QDomNode patternId = groupNode.firstChildElement( "patternID" ); while ( !patternId.isNull() ) { QString patId = patternId.firstChild().nodeValue(); patternId = ( QDomNode ) patternId.nextSiblingElement( "patternID" ); int i = pattern_id[patId]+song_num_tracks; track *t = ( bbTrack * ) s->tracks().at( i ); trackContentObject *tco = t->createTCO( pos ); tco->movePosition( pos ); if ( pattern_length[patId] > best_length ) { best_length = pattern_length[patId]; } } pos = pos + best_length; groupNode = groupNode.nextSiblingElement( "group" ); } if ( pattern_count == 0 ) { return false; } return true; } bool HydrogenImport::tryImport( TrackContainer* tc ) { if( openFile() == false ) { return false; } return readSong(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new HydrogenImport( QString::fromUtf8( static_cast( _data ) ) ); } } lmms-1.1.3/plugins/HydrogenImport/HydrogenImport.h000066400000000000000000000007041247673406200222560ustar00rootroot00000000000000#ifndef _HYDROGEN_IMPORT_H #define _HYDROGEN_IMPORT_H #include #include #include #include "ImportFilter.h" class HydrogenImport : public ImportFilter { public: HydrogenImport( const QString & _file ); bool readSong(); virtual ~HydrogenImport(); virtual PluginView * instantiateView( QWidget * ) { return( NULL ); } private: virtual bool tryImport( TrackContainer* tc ); }; #endif lmms-1.1.3/plugins/HydrogenImport/LocalFileMng.h000066400000000000000000000022461247673406200216030ustar00rootroot00000000000000#ifndef LFILEMNG_H #define LFILEMNG_H #include #include #include #include #include class LocalFileMng { public: LocalFileMng(); ~LocalFileMng(); std::vector getallPatternList(){ return m_allPatternList; } static QString readXmlString( QDomNode , const QString& nodeName, const QString& defaultValue, bool bCanBeEmpty = false, bool bShouldExists = true , bool tinyXmlCompatMode = false); static float readXmlFloat( QDomNode , const QString& nodeName, float defaultValue, bool bCanBeEmpty = false, bool bShouldExists = true , bool tinyXmlCompatMode = false); static int readXmlInt( QDomNode , const QString& nodeName, int defaultValue, bool bCanBeEmpty = false, bool bShouldExists = true , bool tinyXmlCompatMode = false); static bool readXmlBool( QDomNode , const QString& nodeName, bool defaultValue, bool bShouldExists = true , bool tinyXmlCompatMode = false ); static void convertFromTinyXMLString( QByteArray* str ); static bool checkTinyXMLCompatMode( const QString& filename ); static QDomDocument openXmlDocument( const QString& filename ); std::vector m_allPatternList; }; #endif //LFILEMNG_H lmms-1.1.3/plugins/HydrogenImport/local_file_mgr.cpp000066400000000000000000000136321247673406200226010ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include #include #include "LocalFileMng.h" /* New QtXml based methods */ QString LocalFileMng::readXmlString( QDomNode node , const QString& nodeName, const QString& defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) { QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ return element.text(); } else { if ( !bCanBeEmpty ) { //_WARNINGLOG( "Using default value in " + nodeName ); } return defaultValue; } } else { if( bShouldExists ){ //_WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } float LocalFileMng::readXmlFloat( QDomNode node , const QString& nodeName, float defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) { QLocale c_locale = QLocale::c(); QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ return c_locale.toFloat(element.text()); } else { if ( !bCanBeEmpty ) { //_WARNINGLOG( "Using default value in " + nodeName ); } return defaultValue; } } else { if( bShouldExists ){ //_WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } int LocalFileMng::readXmlInt( QDomNode node , const QString& nodeName, int defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) { QLocale c_locale = QLocale::c(); QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ return c_locale.toInt( element.text() ); } else { if ( !bCanBeEmpty ) { //_WARNINGLOG( "Using default value in " + nodeName ); } return defaultValue; } } else { if( bShouldExists ){ //_WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } bool LocalFileMng::readXmlBool( QDomNode node , const QString& nodeName, bool defaultValue, bool bShouldExists, bool tinyXmlCompatMode) { QDomElement element = node.firstChildElement( nodeName ); if( !node.isNull() && !element.isNull() ){ if( !element.text().isEmpty() ){ if( element.text() == "true"){ return true; } else { return false; } } else { //_WARNINGLOG( "Using default value in " + nodeName ); return defaultValue; } } else { if( bShouldExists ){ //_WARNINGLOG( "'" + nodeName + "' node not found" ); } return defaultValue; } } /* Convert (in-place) an XML escape sequence into a literal byte, * rather than the character it actually refers to. */ void LocalFileMng::convertFromTinyXMLString( QByteArray* str ) { /* When TinyXML encountered a non-ASCII character, it would * simply write the character as "&#xx;" -- where "xx" is * the hex character code. However, this doesn't respect * any encodings (e.g. UTF-8, UTF-16). In XML, &#xx; literally * means "the Unicode character # xx." However, in a UTF-8 * sequence, this could be an escape character that tells * whether we have a 2, 3, or 4-byte UTF-8 sequence. * * For example, the UTF-8 sequence 0xD184 was being written * by TinyXML as "Ñ„". However, this is the UTF-8 * sequence for the cyrillic small letter EF (which looks * kind of like a thorn or a greek phi). This letter, in * XML, should be saved as ф, or even literally * (no escaping). As a consequence, when Ñ is read * by an XML parser, it will be interpreted as capital N * with a tilde (~). Then „ will be interpreted as * an unknown or control character. * * So, when we know that TinyXML wrote the file, we can * simply exchange these hex sequences to literal bytes. */ int pos = 0; pos = str->indexOf("&#x"); while( pos != -1 ) { if( isxdigit(str->at(pos+3)) && isxdigit(str->at(pos+4)) && (str->at(pos+5) == ';') ) { char w1 = str->at(pos+3); char w2 = str->at(pos+4); w1 = tolower(w1) - 0x30; // '0' = 0x30 if( w1 > 9 ) w1 -= 0x27; // '9' = 0x39, 'a' = 0x61 w1 = (w1 & 0xF); w2 = tolower(w2) - 0x30; // '0' = 0x30 if( w2 > 9 ) w2 -= 0x27; // '9' = 0x39, 'a' = 0x61 w2 = (w2 & 0xF); char ch = (w1 << 4) | w2; (*str)[pos] = ch; ++pos; str->remove(pos, 5); } pos = str->indexOf("&#x"); } } bool LocalFileMng::checkTinyXMLCompatMode( const QString& filename ) { /* Check if filename was created with TinyXml or QtXml TinyXML: return true QtXml: return false */ QFile file( filename ); if ( !file.open(QIODevice::ReadOnly) ) return false; QString line = file.readLine(); file.close(); if ( line.startsWith( "name(); if( enc == QString("System") ) { enc = "UTF-8"; } QByteArray line; QByteArray buf = QString("\n") .arg( enc ) .toLocal8Bit(); //_INFOLOG( QString("Using '%1' encoding for TinyXML file").arg(enc) ); while( !file.atEnd() ) { line = file.readLine(); LocalFileMng::convertFromTinyXMLString( &line ); buf += line; } if( ! doc.setContent( buf ) ) { file.close(); return QDomDocument(); } } else { if( ! doc.setContent( &file ) ) { file.close(); return QDomDocument(); } } file.close(); return doc; } lmms-1.1.3/plugins/LadspaEffect/000077500000000000000000000000001247673406200165015ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/CMakeLists.txt000066400000000000000000000011341247673406200212400ustar00rootroot00000000000000IF(WANT_CAPS) ADD_SUBDIRECTORY(caps) ENDIF(WANT_CAPS) IF(WANT_TAP) ADD_SUBDIRECTORY(tap) ENDIF(WANT_TAP) IF(WANT_SWH) ADD_SUBDIRECTORY(swh) ENDIF(WANT_SWH) IF(WANT_CMT) ADD_SUBDIRECTORY(cmt) ENDIF(WANT_CMT) IF(WANT_CALF) ADD_SUBDIRECTORY(calf) ENDIF(WANT_CALF) INCLUDE(BuildPlugin) BUILD_PLUGIN(ladspaeffect LadspaEffect.cpp LadspaControls.cpp LadspaControlDialog.cpp LadspaSubPluginFeatures.cpp LadspaEffect.h LadspaControls.h LadspaControlDialog.h LadspaSubPluginFeatures.h MOCFILES LadspaEffect.h LadspaControls.h LadspaControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/LadspaEffect/LadspaControlDialog.cpp000066400000000000000000000071351247673406200231000ustar00rootroot00000000000000/* * LadspaControlDialog.cpp - dialog for displaying and editing control port * values for LADSPA plugins * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "LadspaEffect.h" #include "LadspaControlDialog.h" #include "LadspaControlView.h" #include "led_checkbox.h" LadspaControlDialog::LadspaControlDialog( LadspaControls * _ctl ) : EffectControlDialog( _ctl ), m_effectLayout( NULL ), m_stereoLink( NULL ) { QVBoxLayout * mainLay = new QVBoxLayout( this ); m_effectLayout = new QHBoxLayout(); mainLay->addLayout( m_effectLayout ); updateEffectView( _ctl ); if( _ctl->m_processors > 1 ) { mainLay->addSpacing( 3 ); QHBoxLayout * center = new QHBoxLayout(); mainLay->addLayout( center ); m_stereoLink = new ledCheckBox( tr( "Link Channels" ), this ); m_stereoLink->setModel( &_ctl->m_stereoLinkModel ); center->addWidget( m_stereoLink ); } } LadspaControlDialog::~LadspaControlDialog() { } void LadspaControlDialog::updateEffectView( LadspaControls * _ctl ) { QList list = findChildren(); for( QList::iterator it = list.begin(); it != list.end(); ++it ) { delete *it; } m_effectControls = _ctl; const int cols = static_cast( sqrt( static_cast( _ctl->m_controlCount / _ctl->m_processors ) ) ); for( ch_cnt_t proc = 0; proc < _ctl->m_processors; proc++ ) { control_list_t & controls = _ctl->m_controls[proc]; int row = 0; int col = 0; buffer_data_t last_port = NONE; QGroupBox * grouper; if( _ctl->m_processors > 1 ) { grouper = new QGroupBox( tr( "Channel " ) + QString::number( proc + 1 ), this ); } else { grouper = new QGroupBox( this ); } QGridLayout * gl = new QGridLayout( grouper ); grouper->setLayout( gl ); grouper->setAlignment( Qt::Vertical ); for( control_list_t::iterator it = controls.begin(); it != controls.end(); it++ ) { if( (*it)->port()->proc == proc ) { if( last_port != NONE && (*it)->port()->data_type == TOGGLED && !( (*it)->port()->data_type == TOGGLED && last_port == TOGGLED ) ) { ++row; col = 0; } gl->addWidget( new LadspaControlView( grouper, *it ), row, col ); if( ++col == cols ) { ++row; col = 0; } last_port = (*it)->port()->data_type; } } m_effectLayout->addWidget( grouper ); } if( _ctl->m_processors > 1 && m_stereoLink != NULL ) { m_stereoLink->setModel( &_ctl->m_stereoLinkModel ); } connect( _ctl, SIGNAL( effectModelChanged( LadspaControls * ) ), this, SLOT( updateEffectView( LadspaControls * ) ), Qt::DirectConnection ); } #include "moc_LadspaControlDialog.cxx" lmms-1.1.3/plugins/LadspaEffect/LadspaControlDialog.h000066400000000000000000000027771247673406200225540ustar00rootroot00000000000000/* * LadspaControlDialog.h - dialog for displaying and editing control port * values for LADSPA plugins * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LADSPA_CONTROL_DIALOG_H #define LADSPA_CONTROL_DIALOG_H #include "EffectControlDialog.h" class QHBoxLayout; class LadspaControls; class ledCheckBox; class LadspaControlDialog : public EffectControlDialog { Q_OBJECT public: LadspaControlDialog( LadspaControls * _ctl ); ~LadspaControlDialog(); private slots: void updateEffectView( LadspaControls * _ctl ); private: QHBoxLayout * m_effectLayout; ledCheckBox * m_stereoLink; } ; #endif lmms-1.1.3/plugins/LadspaEffect/LadspaControls.cpp000066400000000000000000000102661247673406200221420ustar00rootroot00000000000000/* * LadspaControls.cpp - model for LADSPA plugin controls * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "LadspaEffect.h" LadspaControls::LadspaControls( LadspaEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_processors( _eff->processorCount() ), m_noLink( false ), m_stereoLinkModel( true, this ) { connect( &m_stereoLinkModel, SIGNAL( dataChanged() ), this, SLOT( updateLinkStatesFromGlobal() ) ); multi_proc_t controls = m_effect->getPortControls(); m_controlCount = controls.count(); for( ch_cnt_t proc = 0; proc < m_processors; proc++ ) { control_list_t p; const bool linked_control = ( m_processors > 1 && proc == 0 ); for( multi_proc_t::Iterator it = controls.begin(); it != controls.end(); it++ ) { if( (*it)->proc == proc ) { (*it)->control = new LadspaControl( this, *it, linked_control ); p.append( (*it)->control ); if( linked_control ) { connect( (*it)->control, SIGNAL( linkChanged( int, bool ) ), this, SLOT( linkPort( int, bool ) ) ); } } } m_controls.append( p ); } // now link all controls if( m_processors > 1 ) { for( multi_proc_t::Iterator it = controls.begin(); it != controls.end(); it++ ) { if( (*it)->proc == 0 ) { linkPort( ( *it )->control_id, true ); } } } } LadspaControls::~LadspaControls() { for( ch_cnt_t proc = 0; proc < m_processors; proc++ ) { m_controls[proc].clear(); } m_controls.clear(); } void LadspaControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( m_processors > 1 ) { _this.setAttribute( "link", m_stereoLinkModel.value() ); } multi_proc_t controls = m_effect->getPortControls(); _this.setAttribute( "ports", controls.count() ); for( multi_proc_t::Iterator it = controls.begin(); it != controls.end(); it++ ) { QString n = "port" + QString::number( (*it)->proc ) + QString::number( (*it)->port_id ); (*it)->control->saveSettings( _doc, _this, n ); } } void LadspaControls::loadSettings( const QDomElement & _this ) { if( m_processors > 1 ) { m_stereoLinkModel.setValue( _this.attribute( "link" ).toInt() ); } multi_proc_t controls = m_effect->getPortControls(); for( multi_proc_t::Iterator it = controls.begin(); it != controls.end(); it++ ) { QString n = "port" + QString::number( (*it)->proc ) + QString::number( (*it)->port_id ); (*it)->control->loadSettings( _this, n ); } } void LadspaControls::linkPort( int _port, bool _state ) { LadspaControl * first = m_controls[0][_port]; if( _state ) { for( ch_cnt_t proc = 1; proc < m_processors; proc++ ) { first->linkControls( m_controls[proc][_port] ); } } else { for( ch_cnt_t proc = 1; proc < m_processors; proc++ ) { first->unlinkControls( m_controls[proc][_port] ); } m_noLink = true; m_stereoLinkModel.setValue( false ); } } void LadspaControls::updateLinkStatesFromGlobal() { if( m_stereoLinkModel.value() ) { for( int port = 0; port < m_controlCount / m_processors; port++ ) { m_controls[0][port]->setLink( true ); } } else if( !m_noLink ) { for( int port = 0; port < m_controlCount / m_processors; port++ ) { m_controls[0][port]->setLink( false ); } } // if global channel link state has changed, always ignore link // status of individual ports in the future m_noLink = false; } #include "moc_LadspaControls.cxx" lmms-1.1.3/plugins/LadspaEffect/LadspaControls.h000066400000000000000000000037711247673406200216120ustar00rootroot00000000000000/* * LadspaControls.h - model for LADSPA plugin controls * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LADSPA_CONTROLS_H #define LADSPA_CONTROLS_H #include "EffectControls.h" #include "LadspaControl.h" #include "LadspaControlDialog.h" typedef QVector control_list_t; class LadspaEffect; class LadspaControls : public EffectControls { Q_OBJECT public: LadspaControls( LadspaEffect * _eff ); virtual ~LadspaControls(); inline int controlCount() { return m_controlCount; } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "ladspacontrols"; } virtual EffectControlDialog * createView() { return new LadspaControlDialog( this ); } protected slots: void updateLinkStatesFromGlobal(); void linkPort( int _port, bool _state ); private: LadspaEffect * m_effect; ch_cnt_t m_processors; ch_cnt_t m_controlCount; bool m_noLink; BoolModel m_stereoLinkModel; QVector m_controls; friend class LadspaControlDialog; friend class LadspaEffect; signals: void effectModelChanged( LadspaControls * ); } ; #endif lmms-1.1.3/plugins/LadspaEffect/LadspaEffect.cpp000066400000000000000000000321421247673406200215300ustar00rootroot00000000000000/* * LadspaEffect.cpp - class for processing LADSPA effects * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "LadspaEffect.h" #include "DataFile.h" #include "AudioDevice.h" #include "config_mgr.h" #include "ladspa_2_lmms.h" #include "LadspaControl.h" #include "LadspaSubPluginFeatures.h" #include "Mixer.h" #include "EffectChain.h" #include "AutomationPattern.h" #include "ControllerConnection.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT ladspaeffect_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "LADSPA", QT_TRANSLATE_NOOP( "pluginBrowser", "plugin for using arbitrary LADSPA-effects " "inside LMMS." ), "Danny McRae ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, new LadspaSubPluginFeatures( Plugin::Effect ) } ; } LadspaEffect::LadspaEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &ladspaeffect_plugin_descriptor, _parent, _key ), m_controls( NULL ), m_maxSampleRate( 0 ), m_key( LadspaSubPluginFeatures::subPluginKeyToLadspaKey( _key ) ) { ladspa2LMMS * manager = engine::getLADSPAManager(); if( manager->getDescription( m_key ) == NULL ) { if( !engine::suppressMessages() ) { QMessageBox::warning( 0, tr( "Effect" ), tr( "Unknown LADSPA plugin %1 requested." ). arg( m_key.second ), QMessageBox::Ok, QMessageBox::NoButton ); } setOkay( FALSE ); return; } setDisplayName( manager->getShortName( m_key ) ); pluginInstantiation(); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeSampleRate() ) ); } LadspaEffect::~LadspaEffect() { pluginDestruction(); } void LadspaEffect::changeSampleRate() { DataFile dataFile( DataFile::EffectSettings ); m_controls->saveState( dataFile, dataFile.content() ); LadspaControls * controls = m_controls; m_controls = NULL; m_pluginMutex.lock(); pluginDestruction(); pluginInstantiation(); m_pluginMutex.unlock(); controls->effectModelChanged( m_controls ); delete controls; m_controls->restoreState( dataFile.content().firstChild().toElement() ); // the IDs of re-created controls have been saved and now need to be // resolved again AutomationPattern::resolveAllIDs(); // make sure, connections are ok ControllerConnection::finalizeConnections(); } bool LadspaEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { m_pluginMutex.lock(); if( !isOkay() || dontRun() || !isRunning() || !isEnabled() ) { m_pluginMutex.unlock(); return( FALSE ); } int frames = _frames; sampleFrame * o_buf = NULL; if( m_maxSampleRate < engine::mixer()->processingSampleRate() ) { o_buf = _buf; _buf = new sampleFrame[_frames]; sampleDown( o_buf, _buf, m_maxSampleRate ); frames = _frames * m_maxSampleRate / engine::mixer()->processingSampleRate(); } // Copy the LMMS audio buffer to the LADSPA input buffer and initialize // the control ports. Need to change this to handle non-in-place-broken // plugins--would speed things up to use the same buffer for both // LMMS and LADSPA. ch_cnt_t channel = 0; for( ch_cnt_t proc = 0; proc < processorCount(); ++proc ) { for( int port = 0; port < m_portCount; ++port ) { port_desc_t * pp = m_ports.at( proc ).at( port ); switch( pp->rate ) { case CHANNEL_IN: for( fpp_t frame = 0; frame < frames; ++frame ) { pp->buffer[frame] = _buf[frame][channel]; } ++channel; break; case AUDIO_RATE_INPUT: pp->value = static_cast( pp->control->value() / pp->scale ); // This only supports control rate ports, so the audio rates are // treated as though they were control rate by setting the // port buffer to all the same value. for( fpp_t frame = 0; frame < frames; ++frame ) { pp->buffer[frame] = pp->value; } break; case CONTROL_RATE_INPUT: if( pp->control == NULL ) { break; } pp->value = static_cast( pp->control->value() / pp->scale ); pp->buffer[0] = pp->value; break; case CHANNEL_OUT: case AUDIO_RATE_OUTPUT: case CONTROL_RATE_OUTPUT: break; default: break; } } } // Process the buffers. for( ch_cnt_t proc = 0; proc < processorCount(); ++proc ) { (m_descriptor->run)( m_handles[proc], frames ); } // Copy the LADSPA output buffers to the LMMS buffer. double out_sum = 0.0; channel = 0; const float d = dryLevel(); const float w = wetLevel(); for( ch_cnt_t proc = 0; proc < processorCount(); ++proc ) { for( int port = 0; port < m_portCount; ++port ) { port_desc_t * pp = m_ports.at( proc ).at( port ); switch( pp->rate ) { case CHANNEL_IN: case AUDIO_RATE_INPUT: case CONTROL_RATE_INPUT: break; case CHANNEL_OUT: for( fpp_t frame = 0; frame < frames; ++frame ) { _buf[frame][channel] = d * _buf[frame][channel] + w * pp->buffer[frame]; out_sum += _buf[frame][channel] * _buf[frame][channel]; } ++channel; break; case AUDIO_RATE_OUTPUT: case CONTROL_RATE_OUTPUT: break; default: break; } } } if( o_buf != NULL ) { sampleBack( _buf, o_buf, m_maxSampleRate ); delete[] _buf; } checkGate( out_sum / frames ); bool is_running = isRunning(); m_pluginMutex.unlock(); return( is_running ); } void LadspaEffect::setControl( int _control, LADSPA_Data _value ) { if( !isOkay() ) { return; } m_portControls[_control]->value = _value; } void LadspaEffect::pluginInstantiation() { m_maxSampleRate = maxSamplerate( displayName() ); ladspa2LMMS * manager = engine::getLADSPAManager(); // Calculate how many processing units are needed. const ch_cnt_t lmms_chnls = engine::mixer()->audioDev()->channels(); int effect_channels = manager->getDescription( m_key )->inputChannels; setProcessorCount( lmms_chnls / effect_channels ); // Categorize the ports, and create the buffers. m_portCount = manager->getPortCount( m_key ); for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) { multi_proc_t ports; for( int port = 0; port < m_portCount; port++ ) { port_desc_t * p = new PortDescription; p->name = manager->getPortName( m_key, port ); p->proc = proc; p->port_id = port; p->control = NULL; // Determine the port's category. if( manager->isPortAudio( m_key, port ) ) { // Nasty manual memory management--was having difficulty // with some prepackaged plugins that were segfaulting // during cleanup. It was easier to troubleshoot with the // memory management all taking place in one file. p->buffer = new LADSPA_Data[engine::mixer()->framesPerPeriod()]; if( p->name.toUpper().contains( "IN" ) && manager->isPortInput( m_key, port ) ) { p->rate = CHANNEL_IN; } else if( p->name.toUpper().contains( "OUT" ) && manager->isPortOutput( m_key, port ) ) { p->rate = CHANNEL_OUT; } else if( manager->isPortInput( m_key, port ) ) { p->rate = AUDIO_RATE_INPUT; } else { p->rate = AUDIO_RATE_OUTPUT; } } else { p->buffer = new LADSPA_Data[1]; if( manager->isPortInput( m_key, port ) ) { p->rate = CONTROL_RATE_INPUT; } else { p->rate = CONTROL_RATE_OUTPUT; } } p->scale = 1.0f; if( manager->isPortToggled( m_key, port ) ) { p->data_type = TOGGLED; } else if( manager->isInteger( m_key, port ) ) { p->data_type = INTEGER; } else if( p->name.toUpper().contains( "(SECONDS)" ) ) { p->data_type = TIME; p->scale = 1000.0f; int loc = p->name.toUpper().indexOf( "(SECONDS)" ); p->name.replace( loc, 9, "(ms)" ); } else if( p->name.toUpper().contains( "(S)" ) ) { p->data_type = TIME; p->scale = 1000.0f; int loc = p->name.toUpper().indexOf( "(S)" ); p->name.replace( loc, 3, "(ms)" ); } else if( p->name.toUpper().contains( "(MS)" ) ) { p->data_type = TIME; int loc = p->name.toUpper().indexOf( "(MS)" ); p->name.replace( loc, 4, "(ms)" ); } else { p->data_type = FLOATING; } // Get the range and default values. p->max = manager->getUpperBound( m_key, port ); if( p->max == NOHINT ) { p->max = p->name.toUpper() == "GAIN" ? 10.0f : 1.0f; } if( manager->areHintsSampleRateDependent( m_key, port ) ) { p->max *= m_maxSampleRate; } p->min = manager->getLowerBound( m_key, port ); if( p->min == NOHINT ) { p->min = 0.0f; } if( manager->areHintsSampleRateDependent( m_key, port ) ) { p->min *= m_maxSampleRate; } p->def = manager->getDefaultSetting( m_key, port ); if( p->def == NOHINT ) { if( p->data_type != TOGGLED ) { p->def = ( p->min + p->max ) / 2.0f; } else { p->def = 1.0f; } } else if( manager->areHintsSampleRateDependent( m_key, port ) ) { p->def *= m_maxSampleRate; } p->max *= p->scale; p->min *= p->scale; p->def *= p->scale; p->value = p->def; p->suggests_logscale = manager->isLogarithmic( m_key, port ); ports.append( p ); // For convenience, keep a separate list of the ports that are used // to control the processors. if( p->rate == AUDIO_RATE_INPUT || p->rate == CONTROL_RATE_INPUT ) { p->control_id = m_portControls.count(); m_portControls.append( p ); } } m_ports.append( ports ); } // Instantiate the processing units. m_descriptor = manager->getDescriptor( m_key ); if( m_descriptor == NULL ) { QMessageBox::warning( 0, "Effect", "Can't get LADSPA descriptor function: " + m_key.second, QMessageBox::Ok, QMessageBox::NoButton ); setOkay( FALSE ); return; } if( m_descriptor->run == NULL ) { QMessageBox::warning( 0, "Effect", "Plugin has no processor: " + m_key.second, QMessageBox::Ok, QMessageBox::NoButton ); setDontRun( TRUE ); } for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) { LADSPA_Handle effect = manager->instantiate( m_key, m_maxSampleRate ); if( effect == NULL ) { QMessageBox::warning( 0, "Effect", "Can't get LADSPA instance: " + m_key.second, QMessageBox::Ok, QMessageBox::NoButton ); setOkay( FALSE ); return; } m_handles.append( effect ); } // Connect the ports. for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) { for( int port = 0; port < m_portCount; port++ ) { port_desc_t * pp = m_ports.at( proc ).at( port ); if( !manager->connectPort( m_key, m_handles[proc], port, pp->buffer ) ) { QMessageBox::warning( 0, "Effect", "Failed to connect port: " + m_key.second, QMessageBox::Ok, QMessageBox::NoButton ); setDontRun( TRUE ); return; } } } // Activate the processing units. for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) { manager->activate( m_key, m_handles[proc] ); } m_controls = new LadspaControls( this ); } void LadspaEffect::pluginDestruction() { if( !isOkay() ) { return; } delete m_controls; for( ch_cnt_t proc = 0; proc < processorCount(); proc++ ) { ladspa2LMMS * manager = engine::getLADSPAManager(); manager->deactivate( m_key, m_handles[proc] ); manager->cleanup( m_key, m_handles[proc] ); for( int port = 0; port < m_portCount; port++ ) { port_desc_t * pp = m_ports.at( proc ).at( port ); delete[] pp->buffer; delete pp; } m_ports[proc].clear(); } m_ports.clear(); m_handles.clear(); m_portControls.clear(); } static QMap __buggy_plugins; sample_rate_t LadspaEffect::maxSamplerate( const QString & _name ) { if( __buggy_plugins.isEmpty() ) { __buggy_plugins["C* AmpVTS"] = 88200; __buggy_plugins["Chorus2"] = 44100; __buggy_plugins["Notch Filter"] = 96000; __buggy_plugins["Freeverb"] = 44100; __buggy_plugins["TAP Reflector"] = 192000; } if( __buggy_plugins.contains( _name ) ) { return( __buggy_plugins[_name] ); } return( engine::mixer()->processingSampleRate() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return new LadspaEffect( _parent, static_cast( _data ) ); } } #include "moc_LadspaEffect.cxx" lmms-1.1.3/plugins/LadspaEffect/LadspaEffect.h000066400000000000000000000040761247673406200212020ustar00rootroot00000000000000/* * LadspaEffect.h - class for handling LADSPA effect plugins * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_EFFECT_H #define _LADSPA_EFFECT_H #include #include "Effect.h" #include "LadspaBase.h" #include "LadspaControls.h" typedef QVector multi_proc_t; class LadspaEffect : public Effect { Q_OBJECT public: LadspaEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~LadspaEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); void setControl( int _control, LADSPA_Data _data ); virtual EffectControls * controls() { return m_controls; } inline const multi_proc_t & getPortControls() { return m_portControls; } private slots: void changeSampleRate(); private: void pluginInstantiation(); void pluginDestruction(); static sample_rate_t maxSamplerate( const QString & _name ); QMutex m_pluginMutex; LadspaControls * m_controls; sample_rate_t m_maxSampleRate; ladspa_key_t m_key; int m_portCount; const LADSPA_Descriptor * m_descriptor; QVector m_handles; QVector m_ports; multi_proc_t m_portControls; } ; #endif lmms-1.1.3/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp000066400000000000000000000120201247673406200237340ustar00rootroot00000000000000/* * LadspaSubPluginFeatures.cpp - derivation from * Plugin::Descriptor::SubPluginFeatures for * hosting LADSPA-plugins * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "LadspaSubPluginFeatures.h" #include "AudioDevice.h" #include "engine.h" #include "ladspa_2_lmms.h" #include "LadspaBase.h" #include "Mixer.h" LadspaSubPluginFeatures::LadspaSubPluginFeatures( Plugin::PluginTypes _type ) : SubPluginFeatures( _type ) { } void LadspaSubPluginFeatures::fillDescriptionWidget( QWidget * _parent, const Key * _key ) const { const ladspa_key_t & lkey = subPluginKeyToLadspaKey( _key ); ladspa2LMMS * lm = engine::getLADSPAManager(); QLabel * label = new QLabel( _parent ); label->setText( QWidget::tr( "Name: " ) + lm->getName( lkey ) ); QLabel* fileInfo = new QLabel( _parent ); fileInfo->setText( QWidget::tr( "File: %1" ).arg( lkey.first ) ); QWidget * maker = new QWidget( _parent ); QHBoxLayout * l = new QHBoxLayout( maker ); l->setMargin( 0 ); l->setSpacing( 0 ); QLabel * maker_label = new QLabel( maker ); maker_label->setText( QWidget::tr( "Maker: " ) ); maker_label->setAlignment( Qt::AlignTop ); QLabel * maker_content = new QLabel( maker ); maker_content->setText( lm->getMaker( lkey ) ); maker_content->setWordWrap( true ); l->addWidget( maker_label ); l->addWidget( maker_content, 1 ); QWidget * copyright = new QWidget( _parent ); l = new QHBoxLayout( copyright ); l->setMargin( 0 ); l->setSpacing( 0 ); copyright->setMinimumWidth( _parent->minimumWidth() ); QLabel * copyright_label = new QLabel( copyright ); copyright_label->setText( QWidget::tr( "Copyright: " ) ); copyright_label->setAlignment( Qt::AlignTop ); QLabel * copyright_content = new QLabel( copyright ); copyright_content->setText( lm->getCopyright( lkey ) ); copyright_content->setWordWrap( true ); l->addWidget( copyright_label ); l->addWidget( copyright_content, 1 ); QLabel * requiresRealTime = new QLabel( _parent ); requiresRealTime->setText( QWidget::tr( "Requires Real Time: " ) + ( lm->hasRealTimeDependency( lkey ) ? QWidget::tr( "Yes" ) : QWidget::tr( "No" ) ) ); QLabel * realTimeCapable = new QLabel( _parent ); realTimeCapable->setText( QWidget::tr( "Real Time Capable: " ) + ( lm->isRealTimeCapable( lkey ) ? QWidget::tr( "Yes" ) : QWidget::tr( "No" ) ) ); QLabel * inplaceBroken = new QLabel( _parent ); inplaceBroken->setText( QWidget::tr( "In Place Broken: " ) + ( lm->isInplaceBroken( lkey ) ? QWidget::tr( "Yes" ) : QWidget::tr( "No" ) ) ); QLabel * channelsIn = new QLabel( _parent ); channelsIn->setText( QWidget::tr( "Channels In: " ) + QString::number( lm->getDescription( lkey )->inputChannels ) ); QLabel * channelsOut = new QLabel( _parent ); channelsOut->setText( QWidget::tr( "Channels Out: " ) + QString::number( lm->getDescription( lkey )->outputChannels ) ); } void LadspaSubPluginFeatures::listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const { ladspa2LMMS * lm = engine::getLADSPAManager(); l_sortable_plugin_t plugins; switch( m_type ) { case Plugin::Instrument: plugins = lm->getInstruments(); break; case Plugin::Effect: plugins = lm->getValidEffects(); //plugins += lm->getInvalidEffects(); break; case Plugin::Tool: plugins = lm->getAnalysisTools(); break; case Plugin::Other: plugins = lm->getOthers(); break; default: break; } for( l_sortable_plugin_t::const_iterator it = plugins.begin(); it != plugins.end(); ++it ) { if( lm->getDescription( ( *it ).second )->inputChannels <= engine::mixer()->audioDev()->channels() ) { _kl.push_back( ladspaKeyToSubPluginKey( _desc, ( *it ).first, ( *it ).second ) ); } } } ladspa_key_t LadspaSubPluginFeatures::subPluginKeyToLadspaKey( const Key * _key ) { QString file = _key->attributes["file"]; return( ladspa_key_t( file.remove( QRegExp( "\\.so$" ) ). remove( QRegExp( "\\.dll$" ) ) + #ifdef LMMS_BUILD_WIN32 ".dll" #else ".so" #endif , _key->attributes["plugin"] ) ); } lmms-1.1.3/plugins/LadspaEffect/LadspaSubPluginFeatures.h000066400000000000000000000032101247673406200234020ustar00rootroot00000000000000/* * LadspaSubPluginFeatures.h - derivation from * Plugin::Descriptor::SubPluginFeatures for * hosting LADSPA-plugins * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_SUBPLUGIN_FEATURES_H #define _LADSPA_SUBPLUGIN_FEATURES_H #include "ladspa_manager.h" #include "Plugin.h" class LadspaSubPluginFeatures : public Plugin::Descriptor::SubPluginFeatures { public: LadspaSubPluginFeatures( Plugin::PluginTypes _type ); virtual void fillDescriptionWidget( QWidget * _parent, const Key * _key ) const; virtual void listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const; static ladspa_key_t subPluginKeyToLadspaKey( const Key * _key ); } ; #endif lmms-1.1.3/plugins/LadspaEffect/calf/000077500000000000000000000000001247673406200174065ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/calf/AUTHORS000066400000000000000000000010241247673406200204530ustar00rootroot00000000000000Krzysztof Foltman Hermann Meyer Thor Harald Johansen Thorsten Wilms Hans Baier Torben Hohn Markus Schmidt Tom Szilagyi Damien Zammit Christian Holschuh Additional bugfixes/enhancement patches: David Täht Dave Robillard Alexandre Prokoudine Carl Hetherington lmms-1.1.3/plugins/LadspaEffect/calf/CMakeLists.txt000066400000000000000000000016571247673406200221570ustar00rootroot00000000000000FILE(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") ADD_LIBRARY(calf MODULE ${SOURCES}) INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include" "${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/src") INSTALL(TARGETS calf LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") SET_TARGET_PROPERTIES(calf PROPERTIES PREFIX "") SET(INLINE_FLAGS "") IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") SET(INLINE_FLAGS "-finline-functions-called-once -finline-limit=80") ENDIF() SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 -finline-functions ${INLINE_FLAGS}") IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET calf POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/calf.dll\"") ENDIF(LMMS_BUILD_WIN32) IF(NOT LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES(calf PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") ENDIF(NOT LMMS_BUILD_APPLE) lmms-1.1.3/plugins/LadspaEffect/calf/COPYING000066400000000000000000000634741247673406200204570ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! lmms-1.1.3/plugins/LadspaEffect/calf/COPYING.GPL000066400000000000000000000431101247673406200210610ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. lmms-1.1.3/plugins/LadspaEffect/calf/ChangeLog000066400000000000000000000225511247673406200211650ustar00rootroot00000000000000Version 0.0.60.0 (unreleased) + Awesome new bitmap-based GUI by Markus Schmidt + New plugins by Markus Schmidt: * several EQs (5, 8, 12 bands) * new compressors (sidechain, multiband, deesser) * new distortion plugins (based on code by Tom Szilagyi) * amplitude modulator plugin (pulsator) + New experimental plugin - a simple wrapper for Fluidsynth + JACK host: save/load of sessions + Vintage Delay: fix another reinitialisation bug that caused, noise bursts on enable/disable, add Width and LR/RL modes + many improvements to Monosynth: * modulation matrix (not compatible with all plugin standards yet) * PWM in both oscillators * stretch (pseudo-hard-sync) for oscillator 1 * detune scaling (depending on pitch) * second envelope + envelopes now have an extra stage called 'Fade': when enabled, it replaces Sustain with either ramp down to 0% or ramp up to 100% + more options in the build system (LASH use can now be disabled) + support for LADISH level 1 in calfjackhost (SIGUSR1-triggered Save) + uses more recent LV2 extensions (external UI, persist and others) + many bugfixes - removed small plugins - if anyone's interested, please use the old code in some new project Version 0.0.18.6 + LADSPA: do not delete singletons after .so is unloaded + Rotary speaker: fix spelling of plugin class Version 0.0.18.5 + Vintage Delay: clear buffer on startup and reactivation + GUI: fix dodgy icons + JACK host: fix a problem with numeric variant of -M option and the new versions of JACK Version 0.0.18.4 + Framework: gcc-4.4 compilation fix (Orcan Ogetbil) Version 0.0.18.3 + Framework: do not use x86 assembler code on non-x86 platforms + Monosynth, Organ: fix serious audio quality issues + Monosynth: implement inertia for cutoff knob and pitch bend, make pitch bend range adjustable + Organ: fix polyphony limit bug Version 0.0.18.2 + Organ: fix voice stealing of released notes, sort out GUI, add quadratic mode for amplitude envelope (enabled by default) - sounds more natural + Monosynth: fix the bug that caused JACK to kick the client out due to precalculating waves in a completely wrong place, fix portamento for off-stack notes + Presets: 3 new presets for Organ, 4 for Monosynth, 2 for Reverb Version 0.0.18.1 + Filter: fixed subtle redraw bugs + Icons: fixed packaging-incompatible paths Version 0.0.18 + Filterclavier: new plugin (a MIDI controlled filter) by Hans Baier + DSSI: added a basic implementation of live graphs. The graphs have a limited resolution (128 data points), and are rather inefficient (as the graph data need to be transmitted via OSC to a different process), but it's better than nothing + GUI: Torben Hohn's drawing optimizations (critical for Intel graphics cards, but should also reduce CPU usage on other hardware) + Phaser: added frequency response graph + JACK host: discontinue the broken option -p; allow giving preset names after a colon sign (reverb:DiscoVerb instead of -p DiscoVerb reverb) + Reverb: less modulation; tone controls; 2 more room types + MultiChorus: add double bandpass filter on input + GUI: added frequency grid + Organ: added progress reporting on load (works with JACK host and LV2) + JACK host: use sensible port names (possibly breaking new LASH sessions) + Organ: added polyphony limit + Small plugins: added support for polymorphic port extension to allow the same plugins to be used for control and audio signals + DSSI: renamed all the plugins from "plugin LADSPA" to "plugin DSSI" + LADSPA: more reasonable default value hints, fixed locale issue in LRDF + JACK host: added icons by Thorsten Wilms (thanks!) + Organ, Monosynth: better memory usage + LV2: attempt at supporting configure-like parameters (key mapping curve in Organ) by the new String Port extension + AutoHell: header files are not installed anymore (they are of little use anyway) + AutoHell: configure script prints if --enable-experimental was specified Version 0.0.17 + Compressor: new plugin by Thor Harald Johansen + GUI: control improvements (new LED control, improved VU meter, XML improvements, line graph with dots and grid lines - no legend yet), move autolayout code from the plugin libraries to makerdf executable, + Most plugins: use custom GUI layouts instead of autogenerated ones + Most plugins: add dry amount (for aux bus type uses) + Flanger, Filter, MultiChorus: added live graphs displaying frequency response and (in case of MultiChorus) LFO positions + LV2 GUI: added a way to display live graphs in Ardour and Zynjacku/LV2Rack (only works when the plugin and the GUI are in the same process) + Framework: general improvements/cleanups to reduce the chance of the kind of errors that were introduced in 0.0.16 and reduce dependencies + Monosynth: removed soft clipper on output Version 0.0.16.3 + Fixed compilation without LV2 core installed Version 0.0.16.2 + Fixed DSSI GUI for MultiChorus + Fixed LV2 GUI for MultiChorus + Make knob control mouse wheel handling work better in Ingen Version 0.0.16 + New MultiChorus plugin (stereo multitap chorus with maximum of 8 voices) + Experimental set of plugins for modular synthesizers like Ingen by Dave Robillard (enabled using --enable-experimental option in configure script) + Minor improvements to other plugins (like Rotary Speaker) + More work on API documentation Version 0.0.15 + Organ: new percussive section, using 2-operator FM synthesis for monophonic or polyphonic percussive attack; added global transpose and detune; rearrangement of controls between sections + Rotary Speaker: another attempt at making it useful (thanks FishB8) + JACK host: eliminate deadlock on exit + GUI: bipolar knobs now have a "dead zone" (magnet) in the middle point + GUI: dragging a knob with SHIFT held allows for fine adjustments + GUI: new controls - curve editor and keyboard + LV2: improved extension support (supports my "extended port properties" extension now) + Added some API documentation Version 0.0.14 + OSC: totally new OSC wrapper, to allow for realtime-safe parsing (doesn't matter as far as functionality goes, will probably be rewritten again anyway) + Everything: memory management fixes (should improve stability and compatibility) + Organ: improved memory usage + GUI: improved bipolar knobs, added endless knobs + Presets: separate 'built-in' and 'user' presets (so that built-in presets can be upgraded without affecting user's own presets) + Monosynth: new presets Version 0.0.13 + Fixed several problems related to 64-bit environments and OpenSUSE (thanks oc2pus!) + Added NOCONFIGURE environment variable support to autogen.sh Version 0.0.12 + RotarySpeaker: work in progress; enabled by default just in case it's useful for anyone + Organ: reworked to add a complete subtractive synth section, a selection of waveform (settable on a per-drawbar basis), individual settings of phase, detune, panning, routing for each drawbar, as well as improved(?) percussive section and vibrato/phaser section. It is usable (and sounds good!), but some parameters, waveform set etc. may change in future. May take up to 100 MB of RAM due to pre-calculated bandlimited waveforms. + Added half-complete implementation of LV2 (including GUI and events). + Lots of small "polishing" kind of fixes in many places (like proper rounding of values in the GUIs, another set of hold/sostenuto fixes etc) Version 0.0.11 + Fixed x86-64 bugs + JackHost: implemented LASH support + RotarySpeaker: fixed panning bug, implemented acceleration/decceleration for "off" state Version 0.0.10 + First attempt at DSSI GUI, does not support some features from JACK host, but that's inevitable because of API limitations + Reverb: improvements (more parameters, fixed denormals) + Knob: added custom support for scroll wheel (instead of one inherited from GtkRange) Version 0.0.9 + started creating an XML-based GUI + LineGraph: new GTK+ control for displaying waveforms and filter response graphs in Monosynth (and maybe others in future) + Monosynth: notch filter changes (made notch bandwidth proportional to Q, just for fun, might be a bad idea) + Monosynth: more waveforms (these might be final?) + Monosynth: capped Sustain level to 0.999 so that decay time actually means something with Sustain = 100% (not a great way to do it, but acceptable in this case) + Monosynth: GUI refreshes less often (which means less CPU use) + Monosynth: less clicks on sounds using LP filter with very low cutoff (using ramp of 256 samples instead of 64 samples as before) + Knob: new GTK+ control based on GtkRange, with my primitive bitmap set (generated with Python and Cairo) + Organ: added a GUI too, very provisional + Organ: fixed Hold pedal (doesn't release the notes which are still depressed) + RotarySpeaker: new effect (split off Organ) + all: denormal fixes (still some denormals present in reverb) + Reverb: better time setting (decay time somewhat corresponds to -60dB attenuation time) + JackHost: -M switch allows for automatic connection to JACK MIDI event source (use -M system:midi_capture_2 or -M 2 for autoconnection to system:midi_capture_2; of course, the short numeric form only work for system:midi_capture_ ports) + JackHost: -p switch selects a preset automatically + JackHost: better size setting algorithm + JackHost: duplicate client name (causing JACK to rename the client) doesn't break autoconnecting functionality + autotools configuration update (detect Cairo and require newer GTK+) + more presets lmms-1.1.3/plugins/LadspaEffect/calf/INSTALL000066400000000000000000000233061247673406200204430ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. Copyright (C) 2007-2008 Krzysztof Foltman This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Prerequisites ============= To compile and install Calf, you need: - POSIX-compliant operating system - G++ version 4.0 or higher (tested with 4.1.3) - GTK+2 headers and libraries (glib 2.10, gtk+ 2.12) - Cairo headers and libraries - Glade 2 headers and libraries Optional but recommended: - JACK header and libraries (tested with 0.109.0) - LADSPA header - DSSI header - LV2 core Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. lmms-1.1.3/plugins/LadspaEffect/calf/NEWS000066400000000000000000000000001247673406200200730ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/calf/README000066400000000000000000000033631247673406200202730ustar00rootroot00000000000000Calf is a pack of audio plugins - effects and instruments, currently in development. The goal is to create a set of plugins using decent algorithms and parameter settings, available in a form which is compatible with as many open source applications as possible. How to use Calf plugins: * LADSPA plugins Calf is installed as calf.so library in your LADSPA directory (typically /usr/lib/ladspa). It means that typical LADSPA host should be able to find Calf's plugins. * DSSI plugins Calf .so module is also installed in your DSSI plugin directory, which means your DSSI host (like jack-dssi-host or rosegarden) should find it and include its plugins in the plugin list. * JACK client application You can also use Calf plugins as separate applications, connecting to other applications using JACK Audio Connection Kit (version 0.103 or newer is required). To run the client, type: calfjackhost monosynth ! (! means "connect", last "!" means "connect to output") Other examples: calfjackhost monosynth ! vintagedelay ! flanger ! (runs monosynth into vintagedelay and vintagedelay into flanger, then to output) calfjackhost ! reverb ! (takes signal from system:capture_1 and _2, puts it through reverb, and then sends to system:playback_1 and _2) You can also change client name or input/output port names with command-line options (type calfjackhost --help). Use qjackctl, patchage or jack_connect to connect the Calf JACK client to your sound card or other applications, if "!" is inadequate for any reason (if I didn't explain it properly, or if it doesn't provide the connectivity options needed). Keep in mind this project is in the early development phase. It is usable for certain purposes, but drop me a note if you need something. lmms-1.1.3/plugins/LadspaEffect/calf/TODO000066400000000000000000000017461247673406200201060ustar00rootroot000000000000001. More effects - auto-wah (might be integrated into filter) - envelope follower - better reverb (more features, use nested allpasses, use 1-pole 1-zero allpass instead of fractional delays) - dynamics processing (Thor already did the compressor) - distortion? - windy rotary speakery stuff - filter: more types 2. Some instruments - some virtual analogue thing (something larger than Monosynth) - FM (by reusing my MMX code, or something) 3. DSP library - profiling framework - optimized code (the one I have now only pretends to be optimized :) ) - underflow handling 4. Wrappers - LADSPA: proper rdf (get clearance from drobilla ;) ) - better jack host (controls etc) - BSE - buzztard - Linux VST - LV2 Message Context (for Organ) EPP (the rest of them) Mixing Controls 5. Organization stuff (autotools etc) - correct compilation and installation of LADSPA plugins (current version is a hack!) - switch to -O3 - get to work on 64-bit architectures - i18n (gettext or whatever) lmms-1.1.3/plugins/LadspaEffect/calf/src/000077500000000000000000000000001247673406200201755ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/calf/src/audio_fx.cpp000066400000000000000000000606571247673406200225150ustar00rootroot00000000000000/* Calf DSP Library * Reusable audio effect classes - implementation. * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include #include using namespace calf_plugins; using namespace dsp; simple_phaser::simple_phaser(int _max_stages, float *x1vals, float *y1vals) { max_stages = _max_stages; x1 = x1vals; y1 = y1vals; set_base_frq(1000); set_mod_depth(1000); set_fb(0); state = 0; cnt = 0; stages = 0; set_stages(_max_stages); } void simple_phaser::set_stages(int _stages) { if (_stages > stages) { assert(_stages <= max_stages); if (_stages > max_stages) _stages = max_stages; for (int i = stages; i < _stages; i++) { x1[i] = x1[stages-1]; y1[i] = y1[stages-1]; } } stages = _stages; } void simple_phaser::reset() { cnt = 0; state = 0; phase.set(0); for (int i = 0; i < max_stages; i++) x1[i] = y1[i] = 0; control_step(); } void simple_phaser::control_step() { cnt = 0; int v = phase.get() + 0x40000000; int sign = v >> 31; v ^= sign; // triangle wave, range from 0 to INT_MAX double vf = (double)((v >> 16) * (1.0 / 16384.0) - 1); float freq = base_frq * pow(2.0, vf * mod_depth / 1200.0); freq = dsp::clip(freq, 10.0, 0.49 * sample_rate); stage1.set_ap_w(freq * (M_PI / 2.0) * odsr); phase += dphase * 32; for (int i = 0; i < stages; i++) { dsp::sanitize(x1[i]); dsp::sanitize(y1[i]); } dsp::sanitize(state); } void simple_phaser::process(float *buf_out, float *buf_in, int nsamples) { for (int i=0; i cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); // z^-1 cfloat p = cfloat(1.0); cfloat stg = stage1.h_z(z); for (int i = 0; i < stages; i++) p = p * stg; p = p / (cfloat(1.0) - cfloat(fb) * p); return std::abs(cfloat(gs_dry.get_last()) + cfloat(gs_wet.get_last()) * p); } /////////////////////////////////////////////////////////////////////////////////// void biquad_filter_module::calculate_filter(float freq, float q, int mode, float gain) { if (mode <= mode_36db_lp) { order = mode + 1; left[0].set_lp_rbj(freq, pow(q, 1.0 / order), srate, gain); } else if ( mode_12db_hp <= mode && mode <= mode_36db_hp ) { order = mode - mode_12db_hp + 1; left[0].set_hp_rbj(freq, pow(q, 1.0 / order), srate, gain); } else if ( mode_6db_bp <= mode && mode <= mode_18db_bp ) { order = mode - mode_6db_bp + 1; left[0].set_bp_rbj(freq, pow(q, 1.0 / order), srate, gain); } else { // mode_6db_br <= mode <= mode_18db_br order = mode - mode_6db_br + 1; left[0].set_br_rbj(freq, order * 0.1 * q, srate, gain); } right[0].copy_coeffs(left[0]); for (int i = 1; i < order; i++) { left[i].copy_coeffs(left[0]); right[i].copy_coeffs(left[0]); } } void biquad_filter_module::filter_activate() { for (int i=0; i < order; i++) { left[i].reset(); right[i].reset(); } } void biquad_filter_module::sanitize() { for (int i=0; i < order; i++) { left[i].sanitize(); right[i].sanitize(); } } int biquad_filter_module::process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask) { dsp::biquad_d1 *filter; switch (channel_no) { case 0: filter = left; break; case 1: filter = right; break; default: assert(false); return 0; } if (inmask) { switch(order) { case 1: for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[0].process(in[i]); break; case 2: for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[1].process(filter[0].process(in[i])); break; case 3: for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[2].process(filter[1].process(filter[0].process(in[i]))); break; } } else { if (filter[order - 1].empty()) return 0; switch(order) { case 1: for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[0].process_zeroin(); break; case 2: if (filter[0].empty()) for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[1].process_zeroin(); else for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[1].process(filter[0].process_zeroin()); break; case 3: if (filter[1].empty()) for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[2].process_zeroin(); else for (uint32_t i = 0; i < numsamples; i++) out[i] = filter[2].process(filter[1].process(filter[0].process_zeroin())); break; } } for (int i = 0; i < order; i++) filter[i].sanitize(); return filter[order - 1].empty() ? 0 : inmask; } float biquad_filter_module::freq_gain(int subindex, float freq, float srate) const { float level = 1.0; for (int j = 0; j < order; j++) level *= left[j].freq_gain(freq, srate); return level; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// void reverb::update_times() { switch(type) { case 0: tl[0] = 397 << 16, tr[0] = 383 << 16; tl[1] = 457 << 16, tr[1] = 429 << 16; tl[2] = 549 << 16, tr[2] = 631 << 16; tl[3] = 649 << 16, tr[3] = 756 << 16; tl[4] = 773 << 16, tr[4] = 803 << 16; tl[5] = 877 << 16, tr[5] = 901 << 16; break; case 1: tl[0] = 697 << 16, tr[0] = 783 << 16; tl[1] = 957 << 16, tr[1] = 929 << 16; tl[2] = 649 << 16, tr[2] = 531 << 16; tl[3] = 1049 << 16, tr[3] = 1177 << 16; tl[4] = 473 << 16, tr[4] = 501 << 16; tl[5] = 587 << 16, tr[5] = 681 << 16; break; case 2: default: tl[0] = 697 << 16, tr[0] = 783 << 16; tl[1] = 957 << 16, tr[1] = 929 << 16; tl[2] = 649 << 16, tr[2] = 531 << 16; tl[3] = 1249 << 16, tr[3] = 1377 << 16; tl[4] = 1573 << 16, tr[4] = 1671 << 16; tl[5] = 1877 << 16, tr[5] = 1781 << 16; break; case 3: tl[0] = 1097 << 16, tr[0] = 1087 << 16; tl[1] = 1057 << 16, tr[1] = 1031 << 16; tl[2] = 1049 << 16, tr[2] = 1039 << 16; tl[3] = 1083 << 16, tr[3] = 1055 << 16; tl[4] = 1075 << 16, tr[4] = 1099 << 16; tl[5] = 1003 << 16, tr[5] = 1073 << 16; break; case 4: tl[0] = 197 << 16, tr[0] = 133 << 16; tl[1] = 357 << 16, tr[1] = 229 << 16; tl[2] = 549 << 16, tr[2] = 431 << 16; tl[3] = 949 << 16, tr[3] = 1277 << 16; tl[4] = 1173 << 16, tr[4] = 1671 << 16; tl[5] = 1477 << 16, tr[5] = 1881 << 16; break; case 5: tl[0] = 197 << 16, tr[0] = 133 << 16; tl[1] = 257 << 16, tr[1] = 179 << 16; tl[2] = 549 << 16, tr[2] = 431 << 16; tl[3] = 619 << 16, tr[3] = 497 << 16; tl[4] = 1173 << 16, tr[4] = 1371 << 16; tl[5] = 1577 << 16, tr[5] = 1881 << 16; break; } float fDec=1000 + 2400.f * diffusion; for (int i = 0 ; i < 6; i++) { ldec[i]=exp(-float(tl[i] >> 16) / fDec), rdec[i]=exp(-float(tr[i] >> 16) / fDec); } } void reverb::reset() { apL1.reset();apR1.reset(); apL2.reset();apR2.reset(); apL3.reset();apR3.reset(); apL4.reset();apR4.reset(); apL5.reset();apR5.reset(); apL6.reset();apR6.reset(); lp_left.reset();lp_right.reset(); old_left = 0; old_right = 0; } void reverb::process(float &left, float &right) { unsigned int ipart = phase.ipart(); // the interpolated LFO might be an overkill here int lfo = phase.lerp_by_fract_int(sine.data[ipart], sine.data[ipart+1]) >> 2; phase += dphase; left += old_right; left = apL1.process_allpass_comb_lerp16(left, tl[0] - 45*lfo, ldec[0]); left = apL2.process_allpass_comb_lerp16(left, tl[1] + 47*lfo, ldec[1]); float out_left = left; left = apL3.process_allpass_comb_lerp16(left, tl[2] + 54*lfo, ldec[2]); left = apL4.process_allpass_comb_lerp16(left, tl[3] - 69*lfo, ldec[3]); left = apL5.process_allpass_comb_lerp16(left, tl[4] + 69*lfo, ldec[4]); left = apL6.process_allpass_comb_lerp16(left, tl[5] - 46*lfo, ldec[5]); old_left = lp_left.process(left * fb); sanitize(old_left); right += old_left; right = apR1.process_allpass_comb_lerp16(right, tr[0] - 45*lfo, rdec[0]); right = apR2.process_allpass_comb_lerp16(right, tr[1] + 47*lfo, rdec[1]); float out_right = right; right = apR3.process_allpass_comb_lerp16(right, tr[2] + 54*lfo, rdec[2]); right = apR4.process_allpass_comb_lerp16(right, tr[3] - 69*lfo, rdec[3]); right = apR5.process_allpass_comb_lerp16(right, tr[4] + 69*lfo, rdec[4]); right = apR6.process_allpass_comb_lerp16(right, tr[5] - 46*lfo, rdec[5]); old_right = lp_right.process(right * fb); sanitize(old_right); left = out_left, right = out_right; } /// Distortion Module by Tom Szilagyi /// /// This module provides a blendable saturation stage /////////////////////////////////////////////////////////////////////////////////////////////// tap_distortion::tap_distortion() { is_active = false; srate = 0; meter = 0.f; prev_med = prev_out = 0.f; drive_old = blend_old = -1.f; } void tap_distortion::activate() { is_active = true; set_params(0.f, 0.f); } void tap_distortion::deactivate() { is_active = false; } void tap_distortion::set_params(float blend, float drive) { // set distortion coeffs if ((drive_old != drive) || (blend_old != blend)) { rdrive = 12.0f / drive; rbdr = rdrive / (10.5f - blend) * 780.0f / 33.0f; kpa = D(2.0f * (rdrive*rdrive) - 1.0f) + 1.0f; kpb = (2.0f - kpa) / 2.0f; ap = ((rdrive*rdrive) - kpa + 1.0f) / 2.0f; kc = kpa / D(2.0f * D(2.0f * (rdrive*rdrive) - 1.0f) - 2.0f * rdrive*rdrive); srct = (0.1f * srate) / (0.1f * srate + 1.0f); sq = kc*kc + 1.0f; knb = -1.0f * rbdr / D(sq); kna = 2.0f * kc * rbdr / D(sq); an = rbdr*rbdr / sq; imr = 2.0f * knb + D(2.0f * kna + 4.0f * an - 1.0f); pwrq = 2.0f / (imr + 1.0f); drive_old = drive; blend_old = blend; } } void tap_distortion::set_sample_rate(uint32_t sr) { srate = sr; } float tap_distortion::process(float in) { meter = 0.f; float out = 0.f; float proc = in; float med; if (proc >= 0.0f) { med = (D(ap + proc * (kpa - proc)) + kpb) * pwrq; } else { med = (D(an - proc * (kna + proc)) + knb) * pwrq * -1.0f; } proc = srct * (med - prev_med + prev_out); prev_med = M(med); prev_out = M(proc); out = proc; meter = proc; return out; } float tap_distortion::get_distortion_level() { return meter; } //////////////////////////////////////////////////////////////////////////////// simple_lfo::simple_lfo() { is_active = false; phase = 0.f; } void simple_lfo::activate() { is_active = true; phase = 0.f; } void simple_lfo::deactivate() { is_active = false; } float simple_lfo::get_value() { return get_value_from_phase(phase, offset) * amount; } float simple_lfo::get_value_from_phase(float ph, float off) const { float val = 0.f; float phs = ph + off; if (phs >= 1.0) phs = fmod(phs, 1.f); switch (mode) { default: case 0: // sine val = sin((phs * 360.f) * M_PI / 180); break; case 1: // triangle if(phs > 0.75) val = (phs - 0.75) * 4 - 1; else if(phs > 0.5) val = (phs - 0.5) * 4 * -1; else if(phs > 0.25) val = 1 - (phs - 0.25) * 4; else val = phs * 4; break; case 2: // square val = (phs < 0.5) ? -1 : +1; break; case 3: // saw up val = phs * 2.f - 1; break; case 4: // saw down val = 1 - phs * 2.f; break; } return val; } void simple_lfo::advance(uint32_t count) { //this function walks from 0.f to 1.f and starts all over again phase += count * freq * (1.0 / srate); if (phase >= 1.0) phase = fmod(phase, 1.f); } void simple_lfo::set_phase(float ph) { //set the phase from outsinde phase = fabs(ph); if (phase >= 1.0) phase = fmod(phase, 1.f); } void simple_lfo::set_params(float f, int m, float o, uint32_t sr, float a) { // freq: a value in Hz // mode: sine=0, triangle=1, square=2, saw_up=3, saw_down=4 // offset: value between 0.f and 1.f to offset the lfo in time freq = f; mode = m; offset = o; srate = sr; amount = a; } bool simple_lfo::get_graph(float *data, int points, cairo_iface *context) const { if (!is_active) return false; for (int i = 0; i < points; i++) { float ph = (float)i / (float)points; data[i] = get_value_from_phase(ph, offset) * amount; } return true; } bool simple_lfo::get_dot(float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; float phs = phase + offset; if (phs >= 1.0) phs = fmod(phs, 1.f); x = phase; y = get_value_from_phase(phase, offset) * amount; return true; } /// Lookahead Limiter by Christian Holschuh and Markus Schmidt lookahead_limiter::lookahead_limiter() { is_active = false; channels = 2; id = 0; buffer_size = 0; overall_buffer_size = 0; att = 1.f; att_max = 1.0; pos = 0; delta = 0.f; _delta = 0.f; peak = 0.f; over_s = 0; over_c = 1.f; attack = 0.005; use_multi = false; weight = 1.f; _sanitize = false; auto_release = false; asc_active = false; nextiter = 0; nextlen = 0; asc = 0.f; asc_c = 0; asc_pos = -1; asc_changed = false; asc_coeff = 1.f; } lookahead_limiter::~lookahead_limiter() { if( buffer != NULL) { free(buffer); } if( nextpos != NULL) { free(nextpos); } if( nextdelta != NULL) { free(nextdelta); } } void lookahead_limiter::activate() { is_active = true; pos = 0; } void lookahead_limiter::set_multi(bool set) { use_multi = set; } void lookahead_limiter::deactivate() { is_active = false; } float lookahead_limiter::get_attenuation() { float a = att_max; att_max = 1.0; return a; } void lookahead_limiter::set_sample_rate(uint32_t sr) { srate = sr; // rebuild buffer overall_buffer_size = (int)(srate * (100.f / 1000.f) * channels) + channels; // buffer size attack rate multiplied by 2 channels buffer = (float*) calloc(overall_buffer_size, sizeof(float)); memset(buffer, 0, overall_buffer_size * sizeof(float)); // reset buffer to zero pos = 0; nextpos = (int*) calloc(overall_buffer_size, sizeof(int)); nextdelta = (float*) calloc(overall_buffer_size, sizeof(float)); memset(nextpos, -1, overall_buffer_size * sizeof(int)); } void lookahead_limiter::set_params(float l, float a, float r, float w, bool ar, float arc, bool d) { limit = l; attack = a / 1000.f; release = r / 1000.f; auto_release = ar; asc_coeff = arc; debug = d; weight = w; } void lookahead_limiter::reset() { int bs = (int)(srate * attack * channels); buffer_size = bs - bs % channels; // buffer size attack rate _sanitize = true; pos = 0; nextpos[0] = -1; nextlen = 0; nextiter = 0; delta = 0.f; att = 1.f; reset_asc(); } void lookahead_limiter::reset_asc() { asc = 0.f; asc_c = 0; asc_pos = pos; asc_changed = true; } void lookahead_limiter::process(float &left, float &right, float * multi_buffer) { // PROTIP: harming paying customers enough to make them develop a competing // product may be considered an example of a less than sound business practice. // fill lookahead buffer if(_sanitize) { // if we're sanitizing (zeroing) the buffer on attack time change, // don't write the samples to the buffer buffer[pos] = 0.f; buffer[pos + 1] = 0.f; } else { buffer[pos] = left; buffer[pos + 1] = right; } // are we using multiband? get the multiband coefficient or use 1.f float multi_coeff = (use_multi) ? multi_buffer[pos] : 1.f; // input peak - impact higher in left or right channel? peak = fabs(left) > fabs(right) ? fabs(left) : fabs(right); // calc the real limit including weight and multi coeff float _limit = limit * multi_coeff * weight; // add an eventually appearing peak to the asc fake buffer if asc active if(auto_release and peak > _limit) { asc += peak; asc_c ++; } if(peak > _limit or multi_coeff < 1.0) { float _multi_coeff = 1.f; float _peak; // calc the attenuation needed to reduce incoming peak float _att = std::min(_limit / peak, 1.f); // calc a release delta from this attenuation float _rdelta = (1.0 - _att) / (srate * release); if(auto_release and asc_c > 0) { // check if releasing to average level of peaks is steeper than // releasing to 1.f float _delta = std::max((limit * weight) / (asc_coeff * asc) * (float)asc_c - _att, 0.000001f) / (srate * release); if(_delta < _rdelta) { asc_active = true; _rdelta = _delta; } } // calc the delta for walking to incoming peak attenuation float _delta = (_limit / peak - att) / buffer_size * channels; if(_delta < delta) { // is the delta more important than the actual one? // if so, we can forget about all stored deltas (because they can't // be more important - we already checked that earlier) and use this // delta now. and we have to create a release delta in nextpos buffer nextpos[0] = pos; nextpos[1] = -1; nextdelta[0] = _rdelta; nextlen = 1; nextiter = 0; delta = _delta; } else { // we have a peak on input its delta is less important than the // actual delta. But what about the stored deltas we're following? bool _found = false; int i = 0; for(i = nextiter; i < nextiter + nextlen; i++) { // walk through our nextpos buffer int j = i % buffer_size; // calculate a delta for the next stored peak // are we using multiband? then get the multi_coeff for the // stored position _multi_coeff = (use_multi) ? multi_buffer[nextpos[j]] : 1.f; // is the left or the right channel on this position more // important? _peak = fabs(buffer[nextpos[j]]) > fabs(buffer[nextpos[j] + 1]) ? fabs(buffer[nextpos[j]]) : fabs(buffer[nextpos[j] + 1]); // calc a delta to use to reach our incoming peak from the // stored position _delta = (_limit / peak - (limit * _multi_coeff * weight) / _peak) / (((buffer_size - nextpos[j] + pos) % buffer_size) / channels); if(_delta < nextdelta[j]) { // if the buffered delta is more important than the delta // used to reach our peak from the stored position, store // the new delta at that position and stop the loop nextdelta[j] = _delta; _found = true; break; } } if(_found) { // there was something more important in the next-buffer. // throw away any position and delta after the important // position and add a new release delta nextlen = i - nextiter + 1; nextpos[(nextiter + nextlen) % buffer_size] = pos; nextdelta[(nextiter + nextlen) % buffer_size] = _rdelta; // set the next following position value to -1 (cleaning up the // nextpos buffer) nextpos[(nextiter + nextlen + 1) % buffer_size] = -1; // and raise the length of our nextpos buffer for keeping the // release value nextlen ++; } } } // switch left and right pointers in buffer to output position left = buffer[(pos + channels) % buffer_size]; right = buffer[(pos + channels + 1) % buffer_size]; // if a peak leaves the buffer, remove it from asc fake buffer // but only if we're not sanitizing asc buffer float _peak = fabs(left) > fabs(right) ? fabs(left) : fabs(right); float _multi_coeff = (use_multi) ? multi_buffer[(pos + channels) % buffer_size] : 1.f; if(pos == asc_pos and !asc_changed) { asc_pos = -1; } if(auto_release and asc_pos == -1 and _peak > (limit * weight * _multi_coeff)) { asc -= _peak; asc_c --; } // change the attenuation level att += delta; // ...and calculate outpout from it left *= att; right *= att; if((pos + channels) % buffer_size == nextpos[nextiter]) { // if we reach a buffered position, change the actual delta and erase // this (the first) element from nextpos and nextdelta buffer delta = nextdelta[nextiter]; nextlen = (nextlen - 1) % buffer_size; nextpos[nextiter] = -1; nextiter = (nextiter + 1) % buffer_size; } if (att > 1.0f) { // release time seems over, reset attenuation and delta att = 1.0f; delta = 0.0f; } // main limiting party is over, let's cleanup the puke if(_sanitize) { // we're sanitizing? then send 0.f as output left = 0.f; right = 0.f; } // security personnel pawing your values if(att <= 0.f) { // if this happens we're doomed!! // may happen on manually lowering attack att = 0.0000000000001; delta = (1.0f - att) / (srate * release); } if(att != 1.f and 1 - att < 0.0000000000001) { // denormalize att att = 1.f; } if(delta != 0.f and fabs(delta) < 0.00000000000001) { // denormalize delta delta = 0.f; } // post treatment (denormal, limit) denormal(&left); denormal(&right); // store max attenuation for meter output att_max = (att < att_max) ? att : att_max; // step forward in our sample ring buffer pos = (pos + channels) % buffer_size; // sanitizing is always done after a full cycle through the lookahead buffer if(_sanitize and pos == 0) _sanitize = false; asc_changed = false; } bool lookahead_limiter::get_asc() { if(!asc_active) return false; asc_active = false; return true; } lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/000077500000000000000000000000001247673406200211025ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/audio_fx.h000066400000000000000000000431031247673406200230520ustar00rootroot00000000000000/* Calf DSP Library * Reusable audio effect classes. * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #ifndef CALF_AUDIOFX_H #define CALF_AUDIOFX_H #include "biquad.h" #include "delay.h" #include "fixed_point.h" #include "inertia.h" #include "onepole.h" #include namespace calf_plugins { struct cairo_iface; }; namespace dsp { #if 0 }; to keep editor happy #endif /** * Audio effect base class. Not really useful until it gets more developed. */ class audio_effect { public: virtual void setup(int sample_rate)=0; virtual ~audio_effect() {} }; class modulation_effect: public audio_effect { protected: int sample_rate; float rate, wet, dry, odsr; gain_smoothing gs_wet, gs_dry; public: fixed_point phase, dphase; float get_rate() const { return rate; } void set_rate(float rate) { this->rate = rate; dphase = rate/sample_rate*4096; } float get_wet() const { return wet; } void set_wet(float wet) { this->wet = wet; gs_wet.set_inertia(wet); } float get_dry() const { return dry; } void set_dry(float dry) { this->dry = dry; gs_dry.set_inertia(dry); } void reset_phase(float req_phase) { phase = req_phase * 4096.0; } void inc_phase(float req_phase) { phase += fixed_point(req_phase * 4096.0); } void setup(int sample_rate) { this->sample_rate = sample_rate; this->odsr = 1.0 / sample_rate; phase = 0; set_rate(get_rate()); } }; /** * A monophonic phaser. If you want stereo, combine two :) * Also, gave up on using template args for signal type. */ class simple_phaser: public modulation_effect { protected: float base_frq, mod_depth, fb; float state; int cnt, stages, max_stages; dsp::onepole stage1; float *x1, *y1; public: simple_phaser(int _max_stages, float *x1vals, float *y1vals); float get_base_frq() const { return base_frq; } void set_base_frq(float _base_frq) { base_frq = _base_frq; } int get_stages() const { return stages; } void set_stages(int _stages); float get_mod_depth() const { return mod_depth; } void set_mod_depth(float _mod_depth) { mod_depth = _mod_depth; } float get_fb() const { return fb; } void set_fb(float fb) { this->fb = fb; } virtual void setup(int sample_rate) { modulation_effect::setup(sample_rate); reset(); } void reset(); void control_step(); void process(float *buf_out, float *buf_in, int nsamples); float freq_gain(float freq, float sr) const; }; /** * Base class for chorus and flanger. Wouldn't be needed if it wasn't * for odd behaviour of GCC when deriving templates from template * base classes (not seeing fields from base classes!). */ class chorus_base: public modulation_effect { protected: int min_delay_samples, mod_depth_samples; float min_delay, mod_depth; sine_table sine; public: float get_min_delay() const { return min_delay; } void set_min_delay(float min_delay) { this->min_delay = min_delay; this->min_delay_samples = (int)(min_delay * 65536.0 * sample_rate); } float get_mod_depth() const { return mod_depth; } void set_mod_depth(float mod_depth) { this->mod_depth = mod_depth; // 128 because it's then multiplied by (hopefully) a value of 32768..-32767 this->mod_depth_samples = (int)(mod_depth * 32.0 * sample_rate); } }; /** * Single-tap chorus without feedback. * Perhaps MaxDelay should be a bit longer! */ template class simple_chorus: public chorus_base { protected: simple_delay delay; public: simple_chorus() { rate = 0.63f; dry = 0.5f; wet = 0.5f; min_delay = 0.005f; mod_depth = 0.0025f; setup(44100); } void reset() { delay.reset(); } virtual void setup(int sample_rate) { modulation_effect::setup(sample_rate); delay.reset(); set_min_delay(get_min_delay()); set_mod_depth(get_mod_depth()); } template void process(OutIter buf_out, InIter buf_in, int nsamples) { int mds = min_delay_samples + mod_depth_samples * 1024 + 2*65536; int mdepth = mod_depth_samples; for (int i=0; i(sine.data[ipart], sine.data[ipart+1]); int v = mds + (mdepth * lfo >> 6); // if (!(i & 7)) printf("%d\n", v); int ifv = v >> 16; delay.put(in); T fd; // signal from delay's output delay.get_interp(fd, ifv, (v & 0xFFFF)*(1.0/65536.0)); T sdry = in * gs_dry.get(); T swet = fd * gs_wet.get(); *buf_out++ = sdry + swet; } } }; /** * Single-tap flanger (chorus plus feedback). */ template class simple_flanger: public chorus_base { protected: simple_delay delay; float fb; int last_delay_pos, last_actual_delay_pos; int ramp_pos, ramp_delay_pos; public: simple_flanger() : fb(0) {} void reset() { delay.reset(); last_delay_pos = last_actual_delay_pos = ramp_delay_pos = 0; ramp_pos = 1024; } virtual void setup(int sample_rate) { this->sample_rate = sample_rate; this->odsr = 1.0 / sample_rate; delay.reset(); phase = 0; set_rate(get_rate()); set_min_delay(get_min_delay()); } float get_fb() const { return fb; } void set_fb(float fb) { this->fb = fb; } template void process(OutIter buf_out, InIter buf_in, int nsamples) { if (!nsamples) return; int mds = this->min_delay_samples + this->mod_depth_samples * 1024 + 2 * 65536; int mdepth = this->mod_depth_samples; int delay_pos; unsigned int ipart = this->phase.ipart(); int lfo = phase.lerp_by_fract_int(this->sine.data[ipart], this->sine.data[ipart+1]); delay_pos = mds + (mdepth * lfo >> 6); if (delay_pos != last_delay_pos || ramp_pos < 1024) { if (delay_pos != last_delay_pos) { // we need to ramp from what the delay tap length actually was, // not from old (ramp_delay_pos) or desired (delay_pos) tap length ramp_delay_pos = last_actual_delay_pos; ramp_pos = 0; } int64_t dp = 0; for (int i=0; i> 10; ramp_pos++; if (ramp_pos > 1024) ramp_pos = 1024; this->delay.get_interp(fd, dp >> 16, (dp & 0xFFFF)*(1.0/65536.0)); sanitize(fd); T sdry = in * this->dry; T swet = fd * this->wet; *buf_out++ = sdry + swet; this->delay.put(in+fb*fd); this->phase += this->dphase; ipart = this->phase.ipart(); lfo = phase.lerp_by_fract_int(this->sine.data[ipart], this->sine.data[ipart+1]); delay_pos = mds + (mdepth * lfo >> 6); } last_actual_delay_pos = dp; } else { for (int i=0; idelay.get_interp(fd, delay_pos >> 16, (delay_pos & 0xFFFF)*(1.0/65536.0)); sanitize(fd); T sdry = in * this->gs_dry.get(); T swet = fd * this->gs_wet.get(); *buf_out++ = sdry + swet; this->delay.put(in+fb*fd); this->phase += this->dphase; ipart = this->phase.ipart(); lfo = phase.lerp_by_fract_int(this->sine.data[ipart], this->sine.data[ipart+1]); delay_pos = mds + (mdepth * lfo >> 6); } last_actual_delay_pos = delay_pos; } last_delay_pos = delay_pos; } float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); // z^-1 float ldp = last_delay_pos / 65536.0; float fldp = floor(ldp); cfloat zn = std::pow(z, fldp); // z^-N cfloat zn1 = zn * z; // z^-(N+1) // simulate a lerped comb filter - H(z) = 1 / (1 + fb * (lerp(z^-N, z^-(N+1), fracpos))), N = int(pos), fracpos = pos - int(pos) cfloat delayed = zn + (zn1 - zn) * cfloat(ldp - fldp); cfloat h = cfloat(delayed) / (cfloat(1.0) - cfloat(fb) * delayed); // mix with dry signal float v = std::abs(cfloat(gs_dry.get_last()) + cfloat(gs_wet.get_last()) * h); return v; } }; /** * A classic allpass loop reverb with modulated allpass filter. * Just started implementing it, so there is no control over many * parameters. */ class reverb: public audio_effect { simple_delay<2048, float> apL1, apL2, apL3, apL4, apL5, apL6; simple_delay<2048, float> apR1, apR2, apR3, apR4, apR5, apR6; fixed_point phase, dphase; sine_table sine; onepole lp_left, lp_right; float old_left, old_right; int type; float time, fb, cutoff, diffusion; int tl[6], tr[6]; float ldec[6], rdec[6]; int sr; public: reverb() { phase = 0.0; time = 1.0; cutoff = 9000; type = 2; diffusion = 1.f; setup(44100); } virtual void setup(int sample_rate) { sr = sample_rate; set_time(time); set_cutoff(cutoff); phase = 0.0; dphase = 0.5*128/sr; update_times(); } void update_times(); float get_time() const { return time; } void set_time(float time) { this->time = time; // fb = pow(1.0f/4096.0f, (float)(1700/(time*sr))); fb = 1.0 - 0.3 / (time * sr / 44100.0); } float get_type() const { return type; } void set_type(int type) { this->type = type; update_times(); } float get_diffusion() const { return diffusion; } void set_diffusion(float diffusion) { this->diffusion = diffusion; update_times(); } void set_type_and_diffusion(int type, float diffusion) { this->type = type; this->diffusion = diffusion; update_times(); } float get_fb() const { return this->fb; } void set_fb(float fb) { this->fb = fb; } float get_cutoff() const { return cutoff; } void set_cutoff(float cutoff) { this->cutoff = cutoff; lp_left.set_lp(cutoff,sr); lp_right.set_lp(cutoff,sr); } void reset(); void process(float &left, float &right); void extra_sanitize() { lp_left.sanitize(); lp_right.sanitize(); } }; class filter_module_iface { public: virtual void calculate_filter(float freq, float q, int mode, float gain = 1.0) = 0; virtual void filter_activate() = 0; virtual void sanitize() = 0; virtual int process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask) = 0; virtual float freq_gain(int subindex, float freq, float srate) const = 0; virtual ~filter_module_iface() {} }; class biquad_filter_module: public filter_module_iface { private: dsp::biquad_d1 left[3], right[3]; int order; public: uint32_t srate; enum { mode_12db_lp = 0, mode_24db_lp = 1, mode_36db_lp = 2, mode_12db_hp = 3, mode_24db_hp = 4, mode_36db_hp = 5, mode_6db_bp = 6, mode_12db_bp = 7, mode_18db_bp = 8, mode_6db_br = 9, mode_12db_br = 10, mode_18db_br = 11, mode_count }; public: biquad_filter_module() : order(0) {} /// Calculate filter coefficients based on parameters - cutoff/center frequency, q, filter type, output gain void calculate_filter(float freq, float q, int mode, float gain = 1.0); /// Reset filter state void filter_activate(); /// Remove denormals void sanitize(); /// Process a single channel (float buffer) of data int process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask); /// Determine gain (|H(z)|) for a given frequency float freq_gain(int subindex, float freq, float srate) const; }; class two_band_eq { private: dsp::onepole lowcut, highcut; float low_gain, high_gain; public: void reset() { lowcut.reset(); highcut.reset(); } inline float process(float v) { v = dsp::lerp(lowcut.process_hp(v), v, low_gain); v = dsp::lerp(highcut.process_lp(v), v, high_gain); return v; } inline void copy_coeffs(const two_band_eq &src) { lowcut.copy_coeffs(src.lowcut); highcut.copy_coeffs(src.highcut); low_gain = src.low_gain; high_gain = src.high_gain; } void sanitize() { lowcut.sanitize(); highcut.sanitize(); } void set(float _low_freq, float _low_gain, float _high_freq, float _high_gain, float sr) { lowcut.set_hp(_low_freq, sr); highcut.set_lp(_high_freq, sr); low_gain = _low_gain; high_gain = _high_gain; } }; /// Tom Szilagyi's distortion code, used with permission /// KF: I'm not 100% sure how this is supposed to work, but it does. /// I'm planning to rewrite it using more modular approach when I have more time. class tap_distortion { private: float blend_old, drive_old; float meter; float rdrive, rbdr, kpa, kpb, kna, knb, ap, an, imr, kc, srct, sq, pwrq; float prev_med, prev_out; public: uint32_t srate; bool is_active; tap_distortion(); void activate(); void deactivate(); void set_params(float blend, float drive); void set_sample_rate(uint32_t sr); float process(float in); float get_distortion_level(); static inline float M(float x) { return (fabs(x) > 0.000000001f) ? x : 0.0f; } static inline float D(float x) { x = fabs(x); return (x > 0.000000001f) ? sqrtf(x) : 0.0f; } }; /// LFO module by Markus /// This module provides simple LFO's (sine=0, triangle=1, square=2, saw_up=3, saw_down=4) /// get_value() returns a value between -1 and 1 class simple_lfo { private: float phase, freq, offset, amount; int mode; uint32_t srate; bool is_active; public: simple_lfo(); void set_params(float f, int m, float o, uint32_t sr, float amount = 1.f); float get_value(); void advance(uint32_t count); void set_phase(float ph); void activate(); void deactivate(); float get_value_from_phase(float ph, float off) const; bool get_graph(float *data, int points, calf_plugins::cairo_iface *context) const; bool get_dot(float &x, float &y, int &size, calf_plugins::cairo_iface *context) const; }; /// Lookahead Limiter by Markus Schmidt and Christian Holschuh class lookahead_limiter { private: public: float limit, attack, release, weight; uint32_t srate; float att; // a coefficient the output is multiplied with float att_max; // a memory for the highest attenuation - used for display int pos; // where we are actually in our sample buffer int buffer_size; int overall_buffer_size; bool is_active; bool debug; bool auto_release; bool asc_active; float *buffer; int channels; float delta; float _delta; float peak; unsigned int over_s; float over_c; bool use_multi; unsigned int id; bool _sanitize; int nextiter; int nextlen; int * nextpos; float * nextdelta; int asc_c; float asc; int asc_pos; bool asc_changed; float asc_coeff; static inline void denormal(volatile float *f) { *f += 1e-18; *f -= 1e-18; } void reset(); void reset_asc(); bool get_asc(); lookahead_limiter(); ~lookahead_limiter(); void set_multi(bool set); void process(float &left, float &right, float *multi_buffer); void set_sample_rate(uint32_t sr); void set_params(float l, float a, float r, float weight = 1.f, bool ar = false, float arc = 1.f, bool d = false); float get_attenuation(); void activate(); void deactivate(); }; #if 0 { to keep editor happy #endif } #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/biquad.h000066400000000000000000000456151247673406200225330ustar00rootroot00000000000000/* Calf DSP Library * Biquad filters * Copyright (C) 2001-2007 Krzysztof Foltman * * Most of code in this file is based on freely * available other work of other people (filter equations). * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #ifndef __CALF_BIQUAD_H #define __CALF_BIQUAD_H #include #include "primitives.h" namespace dsp { /** * Coefficients for two-pole two-zero filter, for floating point values, * plus a bunch of functions to set them to typical values. * * Coefficient calculation is based on famous Robert Bristow-Johnson's equations, * except where it's not. * The coefficient calculation is NOT mine, the only exception is the lossy * optimization in Zoelzer and rbj HP filter code. * * See http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt for reference. * * don't use this for integers because it won't work */ template class biquad_coeffs { public: // filter coefficients Coeff a0, a1, a2, b1, b2; typedef std::complex cfloat; biquad_coeffs() { set_null(); } inline void set_null() { a0 = 1.0; b1 = b2 = a1 = a2 = 0.f; } /** Lowpass filter based on Robert Bristow-Johnson's equations * Perhaps every synth code that doesn't use SVF uses these * equations :) * @param fc resonant frequency * @param q resonance (gain at fc) * @param sr sample rate * @param gain amplification (gain at 0Hz) */ inline void set_lp_rbj(float fc, float q, float sr, float gain = 1.0) { float omega=(float)(2*M_PI*fc/sr); float sn=sin(omega); float cs=cos(omega); float alpha=(float)(sn/(2*q)); float inv=(float)(1.0/(1.0+alpha)); a2 = a0 = (float)(gain*inv*(1 - cs)*0.5f); a1 = a0 + a0; b1 = (float)(-2*cs*inv); b2 = (float)((1 - alpha)*inv); } // different lowpass filter, based on Zoelzer's equations, modified by // me (kfoltman) to use polynomials to approximate tangent function // not very accurate, but perhaps good enough for synth work :) // odsr is "one divided by samplerate" // from how it looks, it perhaps uses bilinear transform - but who knows :) inline void set_lp_zoelzer(float fc, float q, float odsr, float gain=1.0) { Coeff omega=(Coeff)(M_PI*fc*odsr); Coeff omega2=omega*omega; Coeff K=omega*(1+omega2*omega2*Coeff(1.0/1.45)); Coeff KK=K*K; Coeff QK=q*(KK+1.f); Coeff iQK=1.0f/(QK+K); Coeff inv=q*iQK; b2 = (Coeff)(iQK*(QK-K)); b1 = (Coeff)(2.f*(KK-1.f)*inv); a2 = a0 = (Coeff)(inv*gain*KK); a1 = a0 + a0; } /** Highpass filter based on Robert Bristow-Johnson's equations * @param fc resonant frequency * @param q resonance (gain at fc) * @param sr sample rate * @param gain amplification (gain at sr/2) */ inline void set_hp_rbj(float fc, float q, float esr, float gain=1.0) { Coeff omega=(float)(2*M_PI*fc/esr); Coeff sn=sin(omega); Coeff cs=cos(omega); Coeff alpha=(float)(sn/(2*q)); float inv=(float)(1.0/(1.0+alpha)); a0 = (Coeff)(gain*inv*(1 + cs)/2); a1 = -2.f * a0; a2 = a0; b1 = (Coeff)(-2*cs*inv); b2 = (Coeff)((1 - alpha)*inv); } // this replaces sin/cos with polynomial approximation inline void set_hp_rbj_optimized(float fc, float q, float esr, float gain=1.0) { Coeff omega=(float)(2*M_PI*fc/esr); Coeff sn=omega+omega*omega*omega*(1.0/6.0)+omega*omega*omega*omega*omega*(1.0/120); Coeff cs=1-omega*omega*(1.0/2.0)+omega*omega*omega*omega*(1.0/24); Coeff alpha=(float)(sn/(2*q)); float inv=(float)(1.0/(1.0+alpha)); a0 = (Coeff)(gain*inv*(1 + cs)*(1.0/2.0)); a1 = -2.f * a0; a2 = a0; b1 = (Coeff)(-2*cs*inv); b2 = (Coeff)((1 - alpha)*inv); } /** Bandpass filter based on Robert Bristow-Johnson's equations (normalized to 1.0 at center frequency) * @param fc center frequency (gain at fc = 1.0) * @param q =~ fc/bandwidth (not quite, but close) - 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) * @param sr sample rate * @param gain amplification (gain at sr/2) */ inline void set_bp_rbj(double fc, double q, double esr, double gain=1.0) { float omega=(float)(2*M_PI*fc/esr); float sn=sin(omega); float cs=cos(omega); float alpha=(float)(sn/(2*q)); float inv=(float)(1.0/(1.0+alpha)); a0 = (float)(gain*inv*alpha); a1 = 0.f; a2 = (float)(-gain*inv*alpha); b1 = (float)(-2*cs*inv); b2 = (float)((1 - alpha)*inv); } // rbj's bandreject inline void set_br_rbj(double fc, double q, double esr, double gain=1.0) { float omega=(float)(2*M_PI*fc/esr); float sn=sin(omega); float cs=cos(omega); float alpha=(float)(sn/(2*q)); float inv=(float)(1.0/(1.0+alpha)); a0 = (Coeff)(gain*inv); a1 = (Coeff)(-gain*inv*2*cs); a2 = (Coeff)(gain*inv); b1 = (Coeff)(-2*cs*inv); b2 = (Coeff)((1 - alpha)*inv); } // this is mine (and, I guess, it sucks/doesn't work) void set_allpass(float freq, float pole_r, float sr) { float a=prewarp(freq, sr); float q=pole_r; set_bilinear(a*a+q*q, -2.0f*a, 1, a*a+q*q, 2.0f*a, 1); } /// prewarping for bilinear transform, maps given digital frequency to analog counterpart for analog filter design static inline float prewarp(float freq, float sr) { if (freq>sr*0.49) freq=(float)(sr*0.49); return (float)(tan(M_PI*freq/sr)); } /// convert analog angular frequency value to digital static inline float unwarp(float omega, float sr) { float T = 1.0 / sr; return (2 / T) * atan(omega * T / 2); } /// convert analog filter time constant to digital counterpart static inline float unwarpf(float t, float sr) { // this is most likely broken and works by pure accident! float omega = 1.0 / t; omega = unwarp(omega, sr); // I really don't know why does it have to be M_PI and not 2 * M_PI! float f = M_PI / omega; return f / sr; } /// set digital filter parameters based on given analog filter parameters void set_bilinear(float aa0, float aa1, float aa2, float ab0, float ab1, float ab2) { float q=(float)(1.0/(ab0+ab1+ab2)); a0 = (aa0+aa1+aa2)*q; a1 = 2*(aa0-aa2)*q; a2 = (aa0-aa1+aa2)*q; b1 = 2*(ab0-ab2)*q; b2 = (ab0-ab1+ab2)*q; } /// RBJ peaking EQ /// @param freq peak frequency /// @param q q (correlated to freq/bandwidth, @see set_bp_rbj) /// @param peak peak gain (1.0 means no peak, >1.0 means a peak, less than 1.0 is a dip) inline void set_peakeq_rbj(float freq, float q, float peak, float sr) { float A = sqrt(peak); float w0 = freq * 2 * M_PI * (1.0 / sr); float alpha = sin(w0) / (2 * q); float ib0 = 1.0 / (1 + alpha/A); a1 = b1 = -2*cos(w0) * ib0; a0 = ib0 * (1 + alpha*A); a2 = ib0 * (1 - alpha*A); b2 = ib0 * (1 - alpha/A); } /// RBJ low shelf EQ - amplitication of 'peak' at 0 Hz and of 1.0 (0dB) at sr/2 Hz /// @param freq corner frequency (gain at freq is sqrt(peak)) /// @param q q (relates bandwidth and peak frequency), the higher q, the louder the resonant peak (situated below fc) is /// @param peak shelf gain (1.0 means no peak, >1.0 means a peak, less than 1.0 is a dip) inline void set_lowshelf_rbj(float freq, float q, float peak, float sr) { float A = sqrt(peak); float w0 = freq * 2 * M_PI * (1.0 / sr); float alpha = sin(w0) / (2 * q); float cw0 = cos(w0); float tmp = 2 * sqrt(A) * alpha; float b0 = 0.f, ib0 = 0.f; a0 = A*( (A+1) - (A-1)*cw0 + tmp); a1 = 2*A*( (A-1) - (A+1)*cw0); a2 = A*( (A+1) - (A-1)*cw0 - tmp); b0 = (A+1) + (A-1)*cw0 + tmp; b1 = -2*( (A-1) + (A+1)*cw0); b2 = (A+1) + (A-1)*cw0 - tmp; ib0 = 1.0 / b0; b1 *= ib0; b2 *= ib0; a0 *= ib0; a1 *= ib0; a2 *= ib0; } /// RBJ high shelf EQ - amplitication of 0dB at 0 Hz and of peak at sr/2 Hz /// @param freq corner frequency (gain at freq is sqrt(peak)) /// @param q q (relates bandwidth and peak frequency), the higher q, the louder the resonant peak (situated above fc) is /// @param peak shelf gain (1.0 means no peak, >1.0 means a peak, less than 1.0 is a dip) inline void set_highshelf_rbj(float freq, float q, float peak, float sr) { float A = sqrt(peak); float w0 = freq * 2 * M_PI * (1.0 / sr); float alpha = sin(w0) / (2 * q); float cw0 = cos(w0); float tmp = 2 * sqrt(A) * alpha; float b0 = 0.f, ib0 = 0.f; a0 = A*( (A+1) + (A-1)*cw0 + tmp); a1 = -2*A*( (A-1) + (A+1)*cw0); a2 = A*( (A+1) + (A-1)*cw0 - tmp); b0 = (A+1) - (A-1)*cw0 + tmp; b1 = 2*( (A-1) - (A+1)*cw0); b2 = (A+1) - (A-1)*cw0 - tmp; ib0 = 1.0 / b0; b1 *= ib0; b2 *= ib0; a0 *= ib0; a1 *= ib0; a2 *= ib0; } /// copy coefficients from another biquad template inline void copy_coeffs(const biquad_coeffs &src) { a0 = src.a0; a1 = src.a1; a2 = src.a2; b1 = src.b1; b2 = src.b2; } /// Return the filter's gain at frequency freq /// @param freq Frequency to look up /// @param sr Filter sample rate (used to convert frequency to angular frequency) float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); return std::abs(h_z(z)); } /// Return H(z) the filter's gain at frequency freq /// @param z Z variable (e^jw) cfloat h_z(const cfloat &z) const { return (cfloat(a0) + double(a1) * z + double(a2) * z*z) / (cfloat(1.0) + double(b1) * z + double(b2) * z*z); } }; /** * Two-pole two-zero filter, for floating point values. * Uses "traditional" Direct I form (separate FIR and IIR halves). * don't use this for integers because it won't work */ template struct biquad_d1: public biquad_coeffs { using biquad_coeffs::a0; using biquad_coeffs::a1; using biquad_coeffs::a2; using biquad_coeffs::b1; using biquad_coeffs::b2; /// input[n-1] T x1; /// input[n-2] T x2; /// output[n-1] T y1; /// output[n-2] T y2; /// Constructor (initializes state to all zeros) biquad_d1() { reset(); } /// direct I form with four state variables inline T process(T in) { T out = in * a0 + x1 * a1 + x2 * a2 - y1 * b1 - y2 * b2; x2 = x1; y2 = y1; x1 = in; y1 = out; return out; } /// direct I form with zero input inline T process_zeroin() { T out = - y1 * b1 - y2 * b2; y2 = y1; y1 = out; return out; } /// simplified version for lowpass case with two zeros at -1 inline T process_lp(T in) { T out = a0*(in + x1 + x1 + x2) - y1 * b1 - y2 * b2; x2 = x1; y2 = y1; x1 = in; y1 = out; return out; } /// Sanitize (set to 0 if potentially denormal) filter state inline void sanitize() { dsp::sanitize(x1); dsp::sanitize(y1); dsp::sanitize(x2); dsp::sanitize(y2); } /// Reset state variables inline void reset() { dsp::zero(x1); dsp::zero(y1); dsp::zero(x2); dsp::zero(y2); } inline bool empty() const { return (y1 == 0.f && y2 == 0.f); } }; /** * Two-pole two-zero filter, for floating point values. * Uses slightly faster Direct II form (combined FIR and IIR halves). * However, when used with wildly varying coefficients, it may * make more zipper noise than Direct I form, so it's better to * use it when filter coefficients are not changed mid-stream. */ template struct biquad_d2: public biquad_coeffs { using biquad_coeffs::a0; using biquad_coeffs::a1; using biquad_coeffs::a2; using biquad_coeffs::b1; using biquad_coeffs::b2; /// state[n-1] float w1; /// state[n-2] float w2; /// Constructor (initializes state to all zeros) biquad_d2() { reset(); } /// direct II form with two state variables inline T process(T in) { dsp::sanitize_denormal(in); dsp::sanitize(in); dsp::sanitize(w1); dsp::sanitize(w2); T tmp = in - w1 * b1 - w2 * b2; T out = tmp * a0 + w1 * a1 + w2 * a2; w2 = w1; w1 = tmp; return out; } // direct II form with two state variables, lowpass version // interesting fact: this is actually slower than the general version! inline T process_lp(T in) { T tmp = in - w1 * b1 - w2 * b2; T out = (tmp + w2 + w1* 2) * a0; w2 = w1; w1 = tmp; return out; } /// Is the filter state completely silent? (i.e. set to 0 by sanitize function) inline bool empty() const { return (w1 == 0.f && w2 == 0.f); } /// Sanitize (set to 0 if potentially denormal) filter state inline void sanitize() { dsp::sanitize(w1); dsp::sanitize(w2); } /// Reset state variables inline void reset() { dsp::zero(w1); dsp::zero(w2); } }; /** * Two-pole two-zero filter, for floating point values. * Uses "traditional" Direct I form (separate FIR and IIR halves). * don't use this for integers because it won't work */ template struct biquad_d1_lerp: public biquad_coeffs { using biquad_coeffs::a0; using biquad_coeffs::a1; using biquad_coeffs::a2; using biquad_coeffs::b1; using biquad_coeffs::b2; Coeff a0cur, a1cur, a2cur, b1cur, b2cur; Coeff a0delta, a1delta, a2delta, b1delta, b2delta; /// input[n-1] T x1; /// input[n-2] T x2; /// output[n-1] T y1; /// output[n-2] T y2; /// Constructor (initializes state to all zeros) biquad_d1_lerp() { reset(); } #define _DO_COEFF(coeff) coeff##delta = (coeff - coeff##cur) * (frac) void big_step(Coeff frac) { _DO_COEFF(a0); _DO_COEFF(a1); _DO_COEFF(a2); _DO_COEFF(b1); _DO_COEFF(b2); } #undef _DO_COEFF /// direct I form with four state variables inline T process(T in) { T out = in * a0cur + x1 * a1cur + x2 * a2cur - y1 * b1cur - y2 * b2cur; x2 = x1; y2 = y1; x1 = in; y1 = out; a0cur += a0delta; a1cur += a1delta; a2cur += a2delta; b1cur += b1delta; b2cur += b2delta; return out; } /// direct I form with zero input inline T process_zeroin() { T out = - y1 * b1 - y2 * b2; y2 = y1; y1 = out; b1cur += b1delta; b2cur += b2delta; return out; } /// simplified version for lowpass case with two zeros at -1 inline T process_lp(T in) { T out = a0*(in + x1 + x1 + x2) - y1 * b1 - y2 * b2; x2 = x1; y2 = y1; x1 = in; y1 = out; return out; } /// Sanitize (set to 0 if potentially denormal) filter state inline void sanitize() { dsp::sanitize(x1); dsp::sanitize(y1); dsp::sanitize(x2); dsp::sanitize(y2); dsp::sanitize(a0cur); dsp::sanitize(a1cur); dsp::sanitize(a2cur); dsp::sanitize(b1cur); dsp::sanitize(b2cur); } /// Reset state variables inline void reset() { dsp::zero(x1); dsp::zero(y1); dsp::zero(x2); dsp::zero(y2); dsp::zero(a0cur); dsp::zero(a1cur); dsp::zero(a2cur); dsp::zero(b1cur); dsp::zero(b2cur); } inline bool empty() { return (y1 == 0.f && y2 == 0.f); } }; /// Compose two filters in series template class filter_compose { public: typedef std::complex cfloat; F1 f1; F2 f2; public: float process(float value) { return f2.process(f1.process(value)); } inline cfloat h_z(const cfloat &z) const { return f1.h_z(z) * f2.h_z(z); } /// Return the filter's gain at frequency freq /// @param freq Frequency to look up /// @param sr Filter sample rate (used to convert frequency to angular frequency) float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); return std::abs(h_z(z)); } void sanitize() { f1.sanitize(); f2.sanitize(); } }; /// Compose two filters in parallel template class filter_sum { public: typedef std::complex cfloat; F1 f1; F2 f2; public: float process(float value) { return f2.process(value) + f1.process(value); } inline cfloat h_z(const cfloat &z) const { return f1.h_z(z) + f2.h_z(z); } /// Return the filter's gain at frequency freq /// @param freq Frequency to look up /// @param sr Filter sample rate (used to convert frequency to angular frequency) float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); return std::abs(h_z(z)); } void sanitize() { f1.sanitize(); f2.sanitize(); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/buffer.h000066400000000000000000000151351247673406200225310ustar00rootroot00000000000000/* Calf DSP Library * Buffer abstractions. * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #ifndef __BUFFER_H #define __BUFFER_H namespace dsp { /// decrease by N if >= N (useful for circular buffers) template inline int wrap_around(int a) { return (a >= N) ? a - N : a; } // provide fast specializations for powers of 2 template<> inline int wrap_around<2>(int a) { return a & 1; } template<> inline int wrap_around<4>(int a) { return a & 3; } template<> inline int wrap_around<8>(int a) { return a & 7; } template<> inline int wrap_around<16>(int a) { return a & 15; } template<> inline int wrap_around<32>(int a) { return a & 31; } template<> inline int wrap_around<64>(int a) { return a & 63; } template<> inline int wrap_around<128>(int a) { return a & 127; } template<> inline int wrap_around<256>(int a) { return a & 255; } template<> inline int wrap_around<512>(int a) { return a & 511; } template<> inline int wrap_around<1024>(int a) { return a & 1023; } template<> inline int wrap_around<2048>(int a) { return a & 2047; } template<> inline int wrap_around<4096>(int a) { return a & 4095; } template<> inline int wrap_around<8192>(int a) { return a & 8191; } template<> inline int wrap_around<16384>(int a) { return a & 16383; } template<> inline int wrap_around<32768>(int a) { return a & 32767; } template<> inline int wrap_around<65536>(int a) { return a & 65535; } template void fill(Buf &buf, T value) { T* data = buf.data(); int size = buf.size(); for (int i=0; i void fill(T *data, int size, T value) { for (int i=0; i void copy(T *dest, U *src, int size, T scale = 1, T add = 0) { for (int i=0; i struct sample_traits { enum { channels = 1, bps = sizeof(T)*8 }; }; template struct sample_traits > { enum { channels = 2, bps = sizeof(T)*8 }; }; template class fixed_size_buffer { public: typedef T data_type; enum { buffer_size = N }; inline int size() { return N; } }; template class mem_fixed_size_buffer: public fixed_size_buffer { T *buf; public: mem_fixed_size_buffer(T ubuf[N]) { buf = ubuf; } void set_data(T buf[N]) { this->buf = buf; } inline T* data() { return buf; } inline const T* data() const { return buf; } inline T& operator[](int pos) { return buf[pos]; } inline const T& operator[](int pos) const { return buf[pos]; } }; template class auto_buffer: public fixed_size_buffer { T buf[N]; public: T* data() const { return buf; } inline T& operator[](int pos) { return buf[pos]; } inline const T& operator[](int pos) const { return buf[pos]; } }; template class dynamic_buffer { T *buf; int buf_size; bool owns; public: dynamic_buffer() { owns = false; } dynamic_buffer(T *_buf, int _buf_size, bool _own) : buf(_buf), buf_size(_buf_size), owns(_own) { } dynamic_buffer(int _size) { buf = new T[_size]; buf_size = _size; owns = true; } inline T* data() { return buf; } inline const T* data() const { return buf; } inline int size() { return buf_size; } void resize(int new_size, bool fill_with_zeros = false) { T *new_buf = new T[new_size]; memcpy(new_buf, buf, std::min(buf_size, new_size)); if (fill_with_zeros && buf_size < new_size) dsp::zero(new_buf + buf_size, new_size - buf_size); if (owns) delete []buf; buf = new_buf; buf_size = new_size; owns = true; } inline T& operator[](int pos) { return buf[pos]; } inline const T& operator[](int pos) const { return buf[pos]; } ~dynamic_buffer() { if (owns) delete []buf; } }; template void copy_buf(T &dest_buf, const U &src_buf, T scale = 1, T add = 0) { typedef typename T::data_type data_type; data_type *dest = dest_buf.data(); const data_type *src = src_buf.data(); int size = src_buf.size(); for (int i=0; i struct buffer_traits { }; /// this class template defines some basic position operations for fixed_size_buffers template struct buffer_traits > { int inc_wrap(int pos) const { return wrap_around(pos+1); } int pos_diff(int pos1, int pos2) const { int pos = pos1 - pos2; if (pos < 0) pos += T::size; return pos; } }; /// this is useless for now (and untested too) template class circular_buffer: public B { typedef typename B::data_type data_type; typedef class buffer_traits traits; B buffer; int rpos, wpos; circular_buffer() { clear(); } void clear() { rpos = 0; wpos = 0; } inline void put(data_type data) { buffer[wpos] = data; wpos = traits::inc_wrap(wpos); } inline bool empty() { return rpos == wpos; } inline bool full() { return rpos == traits::inc_wrap(wpos); } inline const data_type& get() { int oldrpos = rpos; rpos = traits::inc_wrap(rpos); return buffer[oldrpos]; } inline int get_rbytes() { return traits::pos_diff(wpos, rpos); } inline int get_wbytes() { if (full()) return 0; return traits::pos_diff(rpos, wpos); } }; /// this is useless for now template class mono_auto_buffer: public auto_buffer { }; /// this is useless for now template class stereo_auto_buffer: public auto_buffer > { }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/delay.h000066400000000000000000000137441247673406200223620ustar00rootroot00000000000000/* Calf DSP Library * Reusable audio effect classes. * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #ifndef __CALF_DELAY_H #define __CALF_DELAY_H #include "primitives.h" #include "buffer.h" #include "onepole.h" namespace dsp { /** * Delay primitive. Can be used for most delay stuff, including * variable (modulated) delays like chorus/flanger. Note that * for modulated delay effects use of GetInterp is preferred, * because it handles fractional positions and uses linear * interpolation, which sounds better most of the time. * * @param N maximum length * @param C number of channels read/written for each sample (1 mono, 2 stereo etc) */ template struct simple_delay { auto_buffer data; int pos; simple_delay() { reset(); } void reset() { pos = 0; for (int i=0; i(pos+1); } /** * Read one C-channel sample into odata[0], odata[1] etc into buffer. * Don't use for modulated delays (chorus/flanger etc) unless you * want them to crackle and generally sound ugly * @param odata pointer to write into * @param delay delay relative to current writing pos */ template inline void get(U &odata, int delay) { assert(delay >= 0 && delay < N); int ppos = wrap_around(pos + N - delay); odata = data[ppos]; } /** * Read and write during the same function call */ inline T process(T idata, int delay) { assert(delay >= 0 && delay < N); int ppos = wrap_around(pos + N - delay); T odata = data[ppos]; data[pos] = idata; pos = wrap_around(pos+1); return odata; } /** Read one C-channel sample at fractional position. * This version can be used for modulated delays, because * it uses linear interpolation. * @param odata value to write into * @param delay delay relative to current writing pos * @param udelay fractional delay (0..1) */ template inline void get_interp(U &odata, int delay, float udelay) { // assert(delay >= 0 && delay <= N-1); int ppos = wrap_around(pos + N - delay); int pppos = wrap_around(ppos + N - 1); odata = lerp(data[ppos], data[pppos], udelay); } /** Read one C-channel sample at fractional position. * This version can be used for modulated delays, because * it uses linear interpolation. * @param odata value to write into * @param delay delay relative to current writing pos * @param udelay fractional delay (0..1) */ inline T get_interp_1616(unsigned int delay) { float udelay = (float)((delay & 0xFFFF) * (1.0 / 65536.0)); delay = delay >> 16; // assert(delay >= 0 && delay < N-1); int ppos = wrap_around(pos + N - delay); int pppos = wrap_around(ppos + N - 1); return lerp(data[ppos], data[pppos], udelay); } /** * Comb filter. Feedback delay line with given delay and feedback values * @param in input signal * @param delay delay length (must be >16, dsp::fract16(delay)); cur = in + fb*old; sanitize(cur); put(cur); return old; } /** * Comb allpass filter. The comb filter with additional direct path, which is supposed to cancel the coloration. * @param in input signal * @param delay delay length (must be >16, dsp::fract16(delay)); cur = in + fb*old; sanitize(cur); put(cur); return old - fb * cur; } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/envelope.h000066400000000000000000000210061247673406200230670ustar00rootroot00000000000000/* Calf DSP Library * ADSR envelope class (and other envelopes in future) * * Copyright (C) 2007-2008 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #ifndef __CALF_ENVELOPE_H #define __CALF_ENVELOPE_H #include "primitives.h" namespace dsp { /// Rate-based ADSFR envelope class. Note that if release rate is slower than decay /// rate, this envelope won't use release rate until output level falls below sustain level /// it's different to what certain hardware synth companies did, but it prevents the very /// un-musical (IMHO) behaviour known from (for example) SoundFont 2. class adsr { public: enum env_state { STOP, ///< envelope is stopped ATTACK, ///< attack - rise from 0 to 1 DECAY, ///< decay - fall from 1 to sustain level SUSTAIN, ///< sustain - remain at sustain level (unless sustain is 0 - then it gets stopped); with fade != 0 it goes towards 0% (positive fade) or 100% (negative fade) RELEASE, ///< release - fall from sustain (or pre-sustain) level to 0 LOCKDECAY, ///< locked decay }; /// Current envelope stage env_state state; /// @note these are *rates*, not times double attack, decay, sustain, release, fade; /// Requested release time (not the rate!) in frames, used for recalculating the rate if sustain is changed double release_time; /// Current envelope (output) level double value; /// Release rate used for the current note (calculated from this note's sustain level, and not the current sustain level, /// which may have changed after note has been released) double thisrelease; /// Sustain level used for the current note (used to calculate release rate if sustain changed during release stage /// of the current note) double thiss; /// Value from the time before advance() was called last time double old_value; adsr() { attack = decay = sustain = release = thisrelease = thiss = 0.f; reset(); } /// Stop (reset) the envelope inline void reset() { old_value = value = 0.0; thiss = 0.0; state = STOP; } /// Set the envelope parameters (updates rate member variables based on values passed) /// @param a attack time /// @param d decay time /// @param s sustain level /// @param r release time /// @param er Envelope (update) rate /// @param f fade time (if applicable) inline void set(float a, float d, float s, float r, float er, float f = 0.f) { attack = 1.0 / (a * er); decay = (1 - s) / (d * er); sustain = s; release_time = r * er; release = s / release_time; if (fabs(f) > small_value()) fade = 1.0 / (f * er); else fade = 0.0; // in release: // lock thiss setting (start of release for current note) and unlock thisrelease setting (current note's release rate) if (state != RELEASE) thiss = s; else thisrelease = thiss / release_time; } /// @retval true if envelope is in released state (forced decay, release or stopped) inline bool released() const { return state == LOCKDECAY || state == RELEASE || state == STOP; } /// @retval true if envelope is stopped (has not been started or has run till its end) inline bool stopped() const { return state == STOP; } /// Start the envelope inline void note_on() { state = ATTACK; thiss = sustain; } /// Release the envelope inline void note_off() { // Do nothing if envelope is already stopped if (state == STOP) return; // XXXKF what if envelope is already released? (doesn't happen in any current synth, but who knows?) // Raise sustain value if it has been changed... I'm not sure if it's needed thiss = std::max(sustain, value); // Calculate release rate from sustain level thisrelease = thiss / release_time; // we're in attack or decay, and if decay is faster than release if (value > sustain && decay > thisrelease) { // use standard release time later (because we'll be switching at sustain point) thisrelease = release; state = LOCKDECAY; } else { // in attack/decay, but use fixed release time // in case value fell below sustain, assume it didn't (for the purpose of calculating release rate only) state = RELEASE; } } /// Calculate next envelope value inline void advance() { old_value = value; // XXXKF This may use a state array instead of a switch some day (at least for phases other than attack and possibly sustain) switch(state) { case ATTACK: value += attack; if (value >= 1.0) { value = 1.0; state = DECAY; } break; case DECAY: value -= decay; if (value < sustain) { value = sustain; state = SUSTAIN; } break; case LOCKDECAY: value -= decay; if (value < sustain) { if (value < 0.f) value = 0.f; state = RELEASE; thisrelease = release; } break; case SUSTAIN: if (fade != 0.f) { value -= fade; if (value > 1.f) value = 1.f; } else value = sustain; if (value < 0.00001f) { value = 0; state = STOP; } break; case RELEASE: value -= thisrelease; if (value <= 0.f) { value = 0.f; state = STOP; } break; case STOP: value = 0.f; break; } } /// Return a value between old_value (previous step) and value (current step) /// @param pos between 0 and 1 inline double interpolate(double pos) { return old_value + (value - old_value) * pos; } inline float get_amp_value() { if (state == RELEASE && sustain > 0 && value < sustain) { return value * value * value / (sustain * sustain); } return value; } }; /// Simple linear fade out for note tails struct fadeout { float value; float step, step_orig; bool done, undoing; fadeout(int steps = 256) { step_orig = (float)(1.f / steps); value = 1.f; reset(); } /// Prepare fade out void reset() { value = 1.f; step = -step_orig; done = false; undoing = false; } /// Fade back in with double speed (to prevent click on note restart) void undo() { step = step_orig; done = false; undoing = true; } /// Reset if fully faded out; fade back in if in the middle of fading out void reset_soft() { if (value <= 0.f || value >= 1.f) reset(); else undo(); } void process(float *buffer, int len) { int i = 0; if (!done) { for (; value > 0 && value <= 1.0 && i < len; i++) { buffer[i] *= value; value += step; } if (value <= 0 || value > 1) done = true; } if (done && value <= 0) { while (i < len) buffer[i++] = 0.f; } if (done && undoing && value >= 1) { undoing = false; done = false; // prepare for the next fade-out value = 1.f; } } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/fft.h000066400000000000000000000060511247673406200220340ustar00rootroot00000000000000/* Calf DSP Library * FFT class * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_FFT_H #define __CALF_FFT_H #include namespace dsp { /// FFT routine copied from my old OneSignal library, modified to /// match Calf's style. It's not fast at all, just a straightforward /// implementation. template class fft { typedef typename std::complex complex; int scramble[1<= 4); for (int i=0; i>(j+1)); scramble[i]=v; } int N90 = N >> 2; T divN = 2 * M_PI / N; // use symmetry for (int i=0; i>bits; }; inline int32_t shr(int32_t v, int bits = 1) { return v>>bits; }; inline uint64_t shr(uint64_t v, int bits = 1) { return v>>bits; }; inline int64_t shr(int64_t v, int bits = 1) { return v>>bits; }; inline float shr(float v, int bits = 1) { return v*(1.0/(1< inline T shr(T v, int bits = 1) { v.set(v >> bits); return v; } template class fixed_point { T value; enum { IntBits = (sizeof(T)/8) - FracBits }; public: /// default constructor, does not initialize the value, just like - say - float doesn't inline fixed_point() { } /// copy constructor from any other fixed_point value template inline fixed_point(const fixed_point &v) { if (FracBits == FracBits2) value = v.get(); else if (FracBits > FracBits2) value = v.get() << abs(FracBits - FracBits2); else value = v.get() >> abs(FracBits - FracBits2); } /* this would be way too confusing, it wouldn't be obvious if it expects a whole fixed point or an integer part explicit inline fixed_point(T v) { this->value = v; } */ explicit inline fixed_point(double v) { value = (T)(v*one()); } /// Makes an instance from a representation value (ie. same type of value as is used for internal storage and get/set) static inline fixed_point from_base(const T &v) { fixed_point result; result.value = v; return result; } inline static T one() { return (T)(1) << FracBits; } inline void set(T value) { this->value = value; } inline T get() const { return value; } inline operator double() const { return value * (1.0/one()); } inline fixed_point &operator=(double v) { value = (T)(v*one()); return *this; } template static inline T rebase(const fixed_point &v) { if (FracBits == FracBits2) return v.get(); if (FracBits > FracBits2) return v.get() << abs(FracBits - FracBits2); return v.get() >> abs(FracBits2 - FracBits); } template inline fixed_point &operator=(const fixed_point &v) { value = rebase(v); return *this; } template inline fixed_point &operator+=(const fixed_point &v) { value += rebase(v); return *this; } template inline fixed_point &operator-=(const fixed_point &v) { value -= rebase(v); return *this; } template inline fixed_point operator+(const fixed_point &v) const { fixed_point fpv; fpv.set(value + rebase(v)); return fpv; } template inline fixed_point operator-(const fixed_point &v) const { fixed_point fpv; fpv.set(value - rebase(v)); return fpv; } /// multiply two fixed point values, using long long int to store the temporary multiplication result template inline fixed_point operator*(const fixed_point &v) const { fixed_point tmp; tmp.set(((int64_t)value) * v.get() >> FracBits2); return tmp; } /// multiply two fixed point values, using BigType (usually 64-bit int) to store the temporary multiplication result template inline fixed_point& operator*=(const fixed_point &v) { value = (T)(((BigType)value) * v.get() >> FracBits2); return *this; } inline fixed_point operator+(int v) const { fixed_point tmp; tmp.set(value + (v << FracBits)); return tmp; } inline fixed_point operator-(int v) const { fixed_point tmp; tmp.set(value - (v << FracBits)); return tmp; } inline fixed_point operator*(int v) const { fixed_point tmp; tmp.value = value*v; return tmp; } inline fixed_point& operator+=(int v) { value += (v << FracBits); return *this; } inline fixed_point& operator-=(int v) { value -= (v << FracBits); return *this; } inline fixed_point& operator*=(int v) { value *= v; return *this; } /// return integer part inline T ipart() const { return value >> FracBits; } /// return integer part as unsigned int inline unsigned int uipart() const { return ((unsigned)value) >> FracBits; } /// return integer part as unsigned int inline unsigned int ui64part() const { return ((uint64_t)value) >> FracBits; } /// return fractional part as 0..(2^FracBits-1) inline T fpart() const { return value & ((1 << FracBits)-1); } /// return fractional part as 0..(2^Bits-1) template inline T fpart() const { int fbits = value & ((1 << FracBits)-1); if (Bits == FracBits) return fbits; int shift = abs(Bits-FracBits); return (Bits < FracBits) ? (fbits >> shift) : (fbits << shift); } /// return fractional part as 0..1 inline double fpart_as_double() const { return (value & ((1 << FracBits)-1)) * (1.0 / (1 << FracBits)); } /// use fractional part (either whole or given number of most significant bits) for interpolating between two values /// note that it uses integer arithmetic only, and isn't suitable for floating point or fixed point U! /// @param UseBits can be used when there's a risk of exceeding range of U because max(fpart)*max(v1 or v2) > range of U template inline U lerp_by_fract_int(U v1, U v2) const { int fp = fpart(); assert ( fp >=0 && fp <= (1< inline U lerp_table_lookup_int(U data[(unsigned int)(1<(data[pos], data[pos+1]); } /// Untested... I've started it to get a sin/cos readout for rotaryorgan, but decided to use table-less solution instead /// Do not assume it works, because it most probably doesn't template inline U lerp_table_lookup_int_shift(U data[(unsigned int)(1<(data[pos], data[pos+1]); } template inline U lerp_table_lookup_float(U data[(unsigned int)(1< inline U lerp_table_lookup_float_mask(U data[(unsigned int)(1< inline U lerp_ptr_lookup_int(U *data) const { unsigned int pos = ui64part(); return lerp_by_fract_int(data[pos], data[pos+1]); } template inline U lerp_ptr_lookup_float(U *data) const { unsigned int pos = ui64part(); return data[pos] + (data[pos+1]-data[pos]) * fpart_as_double(); } }; template inline fixed_point operator*(int v, fixed_point v2) { v2 *= v; return v2; } /// wave position (unsigned 64-bit int including 24-bit fractional part) typedef fixed_point wpos; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/giface.h000066400000000000000000000766031247673406200225050ustar00rootroot00000000000000/* Calf DSP Library * Common plugin interface definitions (shared between LADSPA/LV2/DSSI/standalone). * * Copyright (C) 2007-2010 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_GIFACE_H #define CALF_GIFACE_H #include #include "primitives.h" #include #include #include #include namespace osctl { struct osc_client; } namespace calf_plugins { enum { MAX_SAMPLE_RUN = 256 }; /// Values ORed together for flags field in parameter_properties enum parameter_flags { PF_TYPEMASK = 0x000F, ///< bit mask for type PF_FLOAT = 0x0000, ///< any float value PF_INT = 0x0001, ///< integer value (still represented as float) PF_BOOL = 0x0002, ///< bool value (usually >=0.5f is treated as TRUE, which is inconsistent with LV2 etc. which treats anything >0 as TRUE) PF_ENUM = 0x0003, ///< enum value (min, min+1, ..., max, only guaranteed to work when min = 0) PF_ENUM_MULTI = 0x0004, ///< SET / multiple-choice PF_SCALEMASK = 0xF0, ///< bit mask for scale PF_SCALE_DEFAULT = 0x00, ///< no scale given PF_SCALE_LINEAR = 0x10, ///< linear scale PF_SCALE_LOG = 0x20, ///< log scale PF_SCALE_GAIN = 0x30, ///< gain = -96dB..0 or -inf dB PF_SCALE_PERC = 0x40, ///< percent PF_SCALE_QUAD = 0x50, ///< quadratic scale (decent for some gain/amplitude values) PF_SCALE_LOG_INF = 0x60, ///< log scale + +inf (FAKE_INFINITY) PF_CTLMASK = 0x0F00, ///< bit mask for control type PF_CTL_DEFAULT = 0x0000, ///< try to figure out automatically PF_CTL_KNOB = 0x0100, ///< knob PF_CTL_FADER = 0x0200, ///< fader (slider) PF_CTL_TOGGLE = 0x0300, ///< toggle button PF_CTL_COMBO = 0x0400, ///< combo box PF_CTL_RADIO = 0x0500, ///< radio button PF_CTL_BUTTON = 0x0600, ///< push button PF_CTL_METER = 0x0700, ///< volume meter PF_CTL_LED = 0x0800, ///< light emitting diode PF_CTL_LABEL = 0x0900, ///< label PF_CTLOPTIONS = 0x00F000, ///< bit mask for control (widget) options PF_CTLO_HORIZ = 0x001000, ///< horizontal version of the control (unused) PF_CTLO_VERT = 0x002000, ///< vertical version of the control (unused) PF_CTLO_LABEL = 0x004000, ///< add a text display to the control (meters only) PF_CTLO_REVERSE = 0x008000, ///< use VU_MONOCHROME_REVERSE mode (meters only) PF_PROP_NOBOUNDS = 0x010000, ///< no epp:hasStrictBounds PF_PROP_EXPENSIVE = 0x020000, ///< epp:expensive, may trigger expensive calculation PF_PROP_OUTPUT_GAIN=0x050000, ///< epp:outputGain + skip epp:hasStrictBounds PF_PROP_OUTPUT = 0x080000, ///< output port PF_PROP_OPTIONAL = 0x100000, ///< connection optional PF_PROP_GRAPH = 0x200000, ///< add graph PF_UNITMASK = 0xFF000000, ///< bit mask for units \todo reduce to use only 5 bits PF_UNIT_DB = 0x01000000, ///< decibels PF_UNIT_COEF = 0x02000000, ///< multiply-by factor PF_UNIT_HZ = 0x03000000, ///< Hertz PF_UNIT_SEC = 0x04000000, ///< second PF_UNIT_MSEC = 0x05000000, ///< millisecond PF_UNIT_CENTS = 0x06000000, ///< cents (1/100 of a semitone, 1/1200 of an octave) PF_UNIT_SEMITONES = 0x07000000,///< semitones PF_UNIT_BPM = 0x08000000, ///< beats per minute PF_UNIT_DEG = 0x09000000, ///< degrees PF_UNIT_NOTE = 0x0A000000, ///< MIDI note number PF_UNIT_RPM = 0x0B000000, ///< revolutions per minute }; /// A fake infinity value (because real infinity may break some hosts) #define FAKE_INFINITY (65536.0 * 65536.0) /// Check for infinity (with appropriate-ish tolerance) #define IS_FAKE_INFINITY(value) (fabs(value-FAKE_INFINITY) < 1.0) /// Information record about plugin's menu command struct plugin_command_info { const char *label; ///< short command name / label const char *name; ///< human-readable command name const char *description; ///< description (for status line etc.) }; /// Range, default value, flags and names for a parameter struct parameter_properties { /// default value float def_value; /// minimum value float min; /// maximum value float max; /// number of steps (for an integer value from 0 to 100 this will be 101; for 0/90/180/270/360 this will be 5), or 0 for continuous float step; /// logical OR of parameter_flags uint32_t flags; /// for PF_ENUM: array of text values (from min to max step 1), otherwise NULL const char **choices; /// parameter label (for use in LV2 label field etc.) const char *short_name; /// parameter human-readable name const char *name; /// convert from [0, 1] range to [min, max] (applying scaling) float from_01(double value01) const; /// convert from [min, max] to [0, 1] range (applying reverse scaling) double to_01(float value) const; /// stringify (in sensible way) std::string to_string(float value) const; /// get required width (for reserving GUI space) int get_char_count() const; /// get increment step based on step value (if specified) and other factors float get_increment() const; }; struct cairo_iface { virtual void set_source_rgba(float r, float g, float b, float a = 1.f) = 0; virtual void set_line_width(float width) = 0; virtual ~cairo_iface() {} }; struct progress_report_iface { virtual void report_progress(float percentage, const std::string &message) = 0; virtual ~progress_report_iface() {} }; /// 'provides live line graph values' interface struct line_graph_iface { /// Obtain subindex'th graph of parameter 'index' /// @param index parameter/graph number (usually tied to particular plugin control port) /// @param subindex graph number (there may be multiple overlaid graphs for one parameter, eg. for monosynth 2x12dB filters) /// @param data buffer for normalized output values /// @param points number of points to fill /// @param context cairo context to adjust (for multicolour graphs etc.) /// @retval true graph data was returned; subindex+1 graph may or may not be available /// @retval false graph data was not returned; subindex+1 graph does not exist either virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { return false; } /// Obtain subindex'th dot of parameter 'index' /// @param index parameter/dot number (usually tied to particular plugin control port) /// @param subindex dot number (there may be multiple dots graphs for one parameter) virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { return false; } /// Obtain subindex'th dot of parameter 'index' /// @param index parameter/dot number (usually tied to particular plugin control port) /// @param subindex dot number (there may be multiple dots graphs for one parameter) virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return false; } /// Obtain subindex'th static graph of parameter index (static graphs are only dependent on parameter value, not plugin state) /// @param index parameter/graph number (usually tied to particular plugin control port) /// @param subindex graph number (there may be multiple overlaid graphs for one parameter, eg. for monosynth 2x12dB filters) /// @param value parameter value to pick the graph for /// @param data buffer for normalized output values /// @param points number of points to fill /// @param context cairo context to adjust (for multicolour graphs etc.) /// @retval true graph data was returned; subindex+1 graph may or may not be available /// @retval false graph data was not returned; subindex+1 graph does not exist either virtual bool get_static_graph(int index, int subindex, float value, float *data, int points, cairo_iface *context) const { return false; } /// Return which graphs need to be redrawn and which can be cached for later reuse /// @param index Parameter/graph number (usually tied to particular plugin control port) /// @param generation 0 (at start) or the last value returned by the function (corresponds to a set of input values) /// @param subindex_graph First graph that has to be redrawn (because it depends on values that might have changed) /// @param subindex_dot First dot that has to be redrawn /// @param subindex_gridline First gridline/legend that has to be redrawn /// @retval Current generation (to pass when calling the function next time); if different than passed generation value, call the function again to retrieve which graph offsets should be put into cache virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = subindex_dot = subindex_gridline = 0; return 0; } /// Standard destructor to make compiler happy virtual ~line_graph_iface() {} }; enum table_column_type { TCT_UNKNOWN, ///< guard invalid type TCT_FLOAT, ///< float value (encoded as C locale string) TCT_ENUM, ///< enum value (see: 'values' array in table_column_info) - encoded as string base 10 representation of integer TCT_STRING, ///< string value (encoded as C-escaped string) TCT_OBJECT, ///< external object, encoded as string TCT_LABEL, ///< string value (encoded as C-escaped string) }; /// parameters of struct table_column_info { const char *name; ///< column label table_column_type type; ///< column data type float min; ///< minimum value (for float) float max; ///< maximum value (for float and enum) float def_value; ///< default value (for float and enum) const char **values; ///< NULL unless a TCT_ENUM, where it represents a NULL-terminated list of choices }; /// 'has string parameters containing tabular data' interface struct table_metadata_iface { /// retrieve the table layout for specific parameter virtual const table_column_info *get_table_columns() const = 0; /// return the fixed number of rows, or 0 if the number of rows is variable virtual uint32_t get_table_rows() const = 0; virtual ~table_metadata_iface() {} }; /// 'may receive configure variables' interface struct send_configure_iface { /// Called to set configure variable /// @param key variable name /// @param value variable content virtual void send_configure(const char *key, const char *value) = 0; virtual ~send_configure_iface() {} }; /// 'may receive new status values' interface struct send_updates_iface { /// Called to set configure variable /// @param key variable name /// @param value variable content virtual void send_status(const char *key, const char *value) = 0; virtual ~send_updates_iface() {} }; struct plugin_command_info; /// General information about the plugin - @todo XXXKF lacks the "new" id-label-name triple struct ladspa_plugin_info { /// LADSPA ID uint32_t unique_id; /// plugin short name (camel case) const char *label; /// plugin human-readable name const char *name; /// maker (author) const char *maker; /// copyright notice const char *copyright; /// plugin type for LRDF/LV2 const char *plugin_type; }; /// An interface returning metadata about a plugin struct plugin_metadata_iface { /// @return plugin long name virtual const char *get_name() const = 0; /// @return plugin LV2 label virtual const char *get_id() const = 0; /// @return plugin human-readable label virtual const char *get_label() const = 0; /// @return total number of parameters virtual int get_param_count() const = 0; /// Return custom XML virtual const char *get_gui_xml() const = 0; /// @return number of audio inputs virtual int get_input_count() const =0; /// @return number of audio outputs virtual int get_output_count() const =0; /// @return number of optional inputs virtual int get_inputs_optional() const =0; /// @return number of optional outputs virtual int get_outputs_optional() const =0; /// @return true if plugin can work in hard-realtime conditions virtual bool is_rt_capable() const =0; /// @return true if plugin has MIDI input virtual bool get_midi() const =0; /// @return true if plugin has MIDI input virtual bool requires_midi() const =0; /// @return port offset of first control (parameter) port (= number of audio inputs + number of audio outputs in all existing plugins as for 1 Aug 2008) virtual int get_param_port_offset() const = 0; /// @return NULL-terminated list of menu commands virtual plugin_command_info *get_commands() const { return NULL; } /// @return description structure for given parameter virtual const parameter_properties *get_param_props(int param_no) const = 0; /// @return retrieve names of audio ports (@note control ports are named in parameter_properties, not here) virtual const char **get_port_names() const = 0; /// @return description structure for the plugin virtual const ladspa_plugin_info &get_plugin_info() const = 0; /// is a given parameter a control voltage? virtual bool is_cv(int param_no) const = 0; /// is the given parameter non-interpolated? virtual bool is_noisy(int param_no) const = 0; /// does the plugin require string port extension? (or DSSI configure) may be slow virtual bool requires_configure() const = 0; /// obtain array of names of configure variables (or NULL is none needed) virtual const char *const *get_configure_vars() const { return NULL; } /// @return table_metadata_iface if any virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { return NULL; } /// Do-nothing destructor to silence compiler warning virtual ~plugin_metadata_iface() {} }; /// Interface for host-GUI-plugin interaction (should be really split in two, but ... meh) struct plugin_ctl_iface { /// @return value of given parameter virtual float get_param_value(int param_no) = 0; /// Set value of given parameter virtual void set_param_value(int param_no, float value) = 0; /// Load preset with given number virtual bool activate_preset(int bank, int program) = 0; /// @return volume level for port'th port (if supported by the implementation, currently only jack_host implements that by measuring signal level on plugin ports) virtual float get_level(unsigned int port)=0; /// Execute menu command with given number virtual void execute(int cmd_no)=0; /// Set a configure variable on a plugin virtual char *configure(const char *key, const char *value) = 0; /// Send all configure variables set within a plugin to given destination (which may be limited to only those that plugin understands) virtual void send_configures(send_configure_iface *)=0; /// Restore all state (parameters and configure vars) to default values - implemented in giface.cpp virtual void clear_preset(); /// Call a named function in a plugin - this will most likely be redesigned soon - and never used /// @retval false call has failed, result contains an error message virtual bool blobcall(const char *command, const std::string &request, std::string &result) { result = "Call not supported"; return false; } /// Update status variables changed since last_serial /// @return new last_serial virtual int send_status_updates(send_updates_iface *sui, int last_serial) = 0; /// Return metadata object virtual const plugin_metadata_iface *get_metadata_iface() const = 0; /// @return line_graph_iface if any virtual const line_graph_iface *get_line_graph_iface() const = 0; /// Do-nothing destructor to silence compiler warning virtual ~plugin_ctl_iface() {} }; struct plugin_list_info_iface; /// A class to retrieve and query the list of Calf plugins class plugin_registry { public: typedef std::vector plugin_vector; private: plugin_vector plugins; plugin_registry(); public: /// Get the singleton object. static plugin_registry &instance(); /// Get all plugin metadata objects const plugin_vector &get_all() { return plugins; } /// Get single plugin metadata object by URI const plugin_metadata_iface *get_by_uri(const char *URI); /// Get single plugin metadata object by URI const plugin_metadata_iface *get_by_id(const char *id, bool case_sensitive = false); }; /// Load and strdup a text file with GUI definition extern const char *load_gui_xml(const std::string &plugin_id); /// Interface to audio processing plugins (the real things, not only metadata) struct audio_module_iface { /// Handle MIDI Note On virtual void note_on(int channel, int note, int velocity) = 0; /// Handle MIDI Note Off virtual void note_off(int channel, int note, int velocity) = 0; /// Handle MIDI Program Change virtual void program_change(int channel, int program) = 0; /// Handle MIDI Control Change virtual void control_change(int channel, int controller, int value) = 0; /// Handle MIDI Pitch Bend /// @param value pitch bend value (-8192 to 8191, defined as in MIDI ie. 8191 = 200 ct by default) virtual void pitch_bend(int channel, int value) = 0; /// Handle MIDI Channel Pressure /// @param value channel pressure (0 to 127) virtual void channel_pressure(int channel, int value) = 0; /// Called when params are changed (before processing) virtual void params_changed() = 0; /// LADSPA-esque activate function, except it is called after ports are connected, not before virtual void activate() = 0; /// LADSPA-esque deactivate function virtual void deactivate() = 0; /// Set sample rate for the plugin virtual void set_sample_rate(uint32_t sr) = 0; /// Execute menu command with given number virtual void execute(int cmd_no) = 0; /// DSSI configure call, value = NULL = reset to default virtual char *configure(const char *key, const char *value) = 0; /// Send all understood configure vars (none by default) virtual void send_configures(send_configure_iface *sci) = 0; /// Send all supported status vars (none by default) virtual int send_status_updates(send_updates_iface *sui, int last_serial) = 0; /// Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead of check box) virtual void params_reset() = 0; /// Called after instantiating (after all the feature pointers are set - including interfaces like progress_report_iface) virtual void post_instantiate() = 0; /// Return the arrays of port buffer pointers virtual void get_port_arrays(float **&ins_ptrs, float **&outs_ptrs, float **¶ms_ptrs) = 0; /// Return metadata object virtual const plugin_metadata_iface *get_metadata_iface() const = 0; /// Set the progress report interface to communicate progress to virtual void set_progress_report_iface(progress_report_iface *iface) = 0; /// Clear a part of output buffers that have 0s at mask; subdivide the buffer so that no runs > MAX_SAMPLE_RUN are fed to process function virtual uint32_t process_slice(uint32_t offset, uint32_t end) = 0; /// The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers, call process_slice virtual uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) = 0; /// Message port processing function virtual uint32_t message_run(const void *valid_ports, void *output_ports) = 0; /// @return line_graph_iface if any virtual const line_graph_iface *get_line_graph_iface() const = 0; virtual ~audio_module_iface() {} }; /// Empty implementations for plugin functions. template class audio_module: public Metadata, public audio_module_iface { public: typedef Metadata metadata_type; using Metadata::in_count; using Metadata::out_count; using Metadata::param_count; float *ins[Metadata::in_count]; float *outs[Metadata::out_count]; float *params[Metadata::param_count]; progress_report_iface *progress_report; audio_module() { progress_report = NULL; memset(ins, 0, sizeof(ins)); memset(outs, 0, sizeof(outs)); memset(params, 0, sizeof(params)); } /// Handle MIDI Note On void note_on(int channel, int note, int velocity) {} /// Handle MIDI Note Off void note_off(int channel, int note, int velocity) {} /// Handle MIDI Program Change void program_change(int channel, int program) {} /// Handle MIDI Control Change void control_change(int channel, int controller, int value) {} /// Handle MIDI Pitch Bend /// @param value pitch bend value (-8192 to 8191, defined as in MIDI ie. 8191 = 200 ct by default) void pitch_bend(int channel, int value) {} /// Handle MIDI Channel Pressure /// @param value channel pressure (0 to 127) void channel_pressure(int channel, int value) {} /// Called when params are changed (before processing) void params_changed() {} /// LADSPA-esque activate function, except it is called after ports are connected, not before void activate() {} /// LADSPA-esque deactivate function void deactivate() {} /// Set sample rate for the plugin void set_sample_rate(uint32_t sr) { } /// Execute menu command with given number void execute(int cmd_no) {} /// DSSI configure call virtual char *configure(const char *key, const char *value) { return NULL; } /// Send all understood configure vars (none by default) void send_configures(send_configure_iface *sci) {} /// Send all supported status vars (none by default) int send_status_updates(send_updates_iface *sui, int last_serial) { return last_serial; } /// Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead of check box) void params_reset() {} /// Called after instantiating (after all the feature pointers are set - including interfaces like progress_report_iface) void post_instantiate() {} /// Handle 'message context' port message /// @arg output_ports pointer to bit array of output port "changed" flags, note that 0 = first audio input, not first parameter (use input_count + output_count) uint32_t message_run(const void *valid_ports, void *output_ports) { fprintf(stderr, "ERROR: message run not implemented\n"); return 0; } /// Return the array of input port pointers virtual void get_port_arrays(float **&ins_ptrs, float **&outs_ptrs, float **¶ms_ptrs) { ins_ptrs = ins; outs_ptrs = outs; params_ptrs = params; } /// Return metadata object virtual const plugin_metadata_iface *get_metadata_iface() const { return this; } /// Set the progress report interface to communicate progress to virtual void set_progress_report_iface(progress_report_iface *iface) { progress_report = iface; } /// utility function: zero port values if mask is 0 inline void zero_by_mask(uint32_t mask, uint32_t offset, uint32_t nsamples) { for (int i=0; i(this); } }; #if USE_EXEC_GUI || USE_DSSI enum line_graph_item { LGI_END = 0, LGI_GRAPH, LGI_SUBGRAPH, LGI_LEGEND, LGI_DOT, LGI_END_ITEM, LGI_SET_RGBA, LGI_SET_WIDTH, }; /// A class to send status updates via OSC struct dssi_feedback_sender { /// OSC client object used to send updates osctl::osc_client *client; /// Is client shared with something else? bool is_client_shared; /// Quit flag (used to terminate the thread) bool quit; /// Indices of graphs to send std::vector indices; /// Source for the graph data (interface to marshal) const calf_plugins::line_graph_iface *graph; /// Create using a new client dssi_feedback_sender(const char *URI, const line_graph_iface *_graph); dssi_feedback_sender(osctl::osc_client *_client, const line_graph_iface *_graph); void add_graphs(const calf_plugins::parameter_properties *props, int num_params); void update(); ~dssi_feedback_sender(); }; #endif /// Metadata base class template, to provide default versions of interface functions template class plugin_metadata: public plugin_metadata_iface { public: static const char *port_names[]; static parameter_properties param_props[]; static ladspa_plugin_info plugin_info; typedef plugin_metadata metadata_class; // These below are stock implementations based on enums and static members in Metadata classes // they may be overridden to provide more interesting functionality const char *get_name() const { return Metadata::impl_get_name(); } const char *get_id() const { return Metadata::impl_get_id(); } const char *get_label() const { return Metadata::impl_get_label(); } int get_input_count() const { return Metadata::in_count; } int get_output_count() const { return Metadata::out_count; } int get_inputs_optional() const { return Metadata::ins_optional; } int get_outputs_optional() const { return Metadata::outs_optional; } int get_param_count() const { return Metadata::param_count; } bool get_midi() const { return Metadata::support_midi; } bool requires_midi() const { return Metadata::require_midi; } bool is_rt_capable() const { return Metadata::rt_capable; } int get_param_port_offset() const { return Metadata::in_count + Metadata::out_count; } const char *get_gui_xml() const { static const char *data_ptr = calf_plugins::load_gui_xml(get_id()); return data_ptr; } plugin_command_info *get_commands() const { return NULL; } const parameter_properties *get_param_props(int param_no) const { return ¶m_props[param_no]; } const char **get_port_names() const { return port_names; } bool is_cv(int param_no) const { return true; } bool is_noisy(int param_no) const { return false; } const ladspa_plugin_info &get_plugin_info() const { return plugin_info; } bool requires_configure() const { return false; } }; #define CALF_PORT_NAMES(name) template<> const char *::plugin_metadata::port_names[] #define CALF_PORT_PROPS(name) template<> parameter_properties plugin_metadata::param_props[name##_metadata::param_count + 1] #define CALF_PLUGIN_INFO(name) template<> calf_plugins::ladspa_plugin_info plugin_metadata::plugin_info #define PLUGIN_NAME_ID_LABEL(name, id, label) \ static const char *impl_get_name() { return name; } \ static const char *impl_get_id() { return id; } \ static const char *impl_get_label() { return label; } \ extern const char *calf_copyright_info; bool get_freq_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context, bool use_frequencies = true, float res = 256, float ofs = 0.4); /// convert amplitude value to normalized grid-ish value static inline float dB_grid(float amp, float res = 256, float ofs = 0.4) { return log(amp) * (1.0 / log(res)) + ofs; } template static bool get_graph(Fx &fx, int subindex, float *data, int points, float res = 256, float ofs = 0.4) { for (int i = 0; i < points; i++) { double freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); data[i] = dB_grid(fx.freq_gain(subindex, freq, fx.srate), res, ofs); } return true; } /// convert normalized grid-ish value back to amplitude value static inline float dB_grid_inv(float pos) { return pow(256.0, pos - 0.4); } /// Line graph interface implementation for frequency response graphs class frequency_response_line_graph: public line_graph_iface { public: bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// set drawing color based on channel index (0 or 1) void set_channel_color(cairo_iface *context, int channel); struct preset_access_iface { virtual void store_preset() = 0; virtual void activate_preset(int preset, bool builtin) = 0; virtual ~preset_access_iface() {} }; /// Implementation of table_metadata_iface providing metadata for mod matrices class mod_matrix_metadata: public table_metadata_iface { public: /// Mapping modes enum mapping_mode { map_positive, ///< 0..100% map_bipolar, ///< -100%..100% map_negative, ///< -100%..0% map_squared, ///< x^2 map_squared_bipolar, ///< x^2 scaled to -100%..100% map_antisquared, ///< 1-(1-x)^2 scaled to 0..100% map_antisquared_bipolar, ///< 1-(1-x)^2 scaled to -100..100% map_parabola, ///< inverted parabola (peaks at 0.5, then decreases to 0) map_type_count }; const char **mod_src_names, **mod_dest_names; mod_matrix_metadata(unsigned int _rows, const char **_src_names, const char **_dest_names); virtual const table_column_info *get_table_columns() const; virtual uint32_t get_table_rows() const; protected: /// Column descriptions for table widget table_column_info table_columns[6]; unsigned int matrix_rows; }; /// Check if a given key is either prefix + rows or prefix + i2s(row) + "," + i2s(column) /// @arg key key to parse /// @arg prefix table prefix (e.g. "modmatrix:") /// @arg is_rows[out] set to true if key == prefix + "rows" /// @arg row[out] if key is of a form: prefix + row + "," + i2s(column), returns row, otherwise returns -1 /// @arg column[out] if key is of a form: prefix + row + "," + i2s(column), returns row, otherwise returns -1 /// @retval true if this is one of the recognized string forms extern bool parse_table_key(const char *key, const char *prefix, bool &is_rows, int &row, int &column); #if USE_EXEC_GUI class table_via_configure { protected: typedef std::pair coord; std::vector columns; std::map values; int rows; public: table_via_configure(); void configure(const char *key, const char *value); virtual ~table_via_configure(); }; #endif }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/inertia.h000066400000000000000000000153451247673406200227160ustar00rootroot00000000000000/* Calf DSP Library * Basic "inertia" (parameter smoothing) classes. * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_INERTIA_H #define __CALF_INERTIA_H #include "primitives.h" namespace dsp { /// Algorithm for a constant time linear ramp class linear_ramp { public: int ramp_len; float mul, delta; public: /// Construct for given ramp length linear_ramp(int _ramp_len) { ramp_len = _ramp_len; mul = (float)(1.0f / ramp_len); delta = 0.f; } /// Change ramp length inline void set_length(int _ramp_len) { ramp_len = _ramp_len; mul = (float)(1.0f / ramp_len); } inline int length() { return ramp_len; } inline void start_ramp(float start, float end) { delta = mul * (end - start); } /// Return value after single step inline float ramp(float value) { return value + delta; } /// Return value after many steps inline float ramp_many(float value, int count) { return value + delta * count; } }; /// Algorithm for a constant time linear ramp class exponential_ramp { public: int ramp_len; float root, delta; public: exponential_ramp(int _ramp_len) { ramp_len = _ramp_len; root = (float)(1.0f / ramp_len); delta = 1.0; } inline void set_length(int _ramp_len) { ramp_len = _ramp_len; root = (float)(1.0f / ramp_len); } inline int length() { return ramp_len; } inline void start_ramp(float start, float end) { delta = pow(end / start, root); } /// Return value after single step inline float ramp(float value) { return value * delta; } /// Return value after many steps inline float ramp_many(float value, float count) { return value * pow(delta, count); } }; /// Generic inertia using ramping algorithm specified as template argument. The basic idea /// is producing smooth(ish) output for discrete input, using specified algorithm to go from /// last output value to input value. It is not the same as classic running average lowpass /// filter, because ramping time is finite and pre-determined (it calls ramp algorithm's length() /// function to obtain the expected ramp length) template class inertia { public: float old_value; float value; unsigned int count; Ramp ramp; public: inertia(const Ramp &_ramp, float init_value = 0.f) : ramp(_ramp) { value = old_value = init_value; count = 0; } /// Set value immediately (no inertia) void set_now(float _value) { value = old_value = _value; count = 0; } /// Set with inertia void set_inertia(float source) { if (source != old_value) { ramp.start_ramp(value, source); count = ramp.length(); old_value = source; } } /// Get smoothed value of given source value inline float get(float source) { if (source != old_value) { ramp.start_ramp(value, source); count = ramp.length(); old_value = source; } if (!count) return old_value; value = ramp.ramp(value); count--; if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors value = old_value; return value; } /// Get smoothed value assuming no new input inline float get() { if (!count) return old_value; value = ramp.ramp(value); count--; if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors value = old_value; return value; } /// Do one inertia step, without returning the new value and without changing destination value inline void step() { if (count) { value = ramp.ramp(value); count--; if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors value = old_value; } } /// Do many inertia steps, without returning the new value and without changing destination value inline void step_many(unsigned int steps) { if (steps < count) { // Skip only a part of the current ramping period value = ramp.ramp_many(value, steps); count -= steps; if (!count) // finished ramping, set to desired value to get rid of accumulated rounding errors value = old_value; } else { // The whole ramping period has been skipped, just go to destination value = old_value; count = 0; } } /// Get last smoothed value, without affecting anything inline float get_last() const { return value; } /// Is it still ramping? inline bool active() const { return count > 0; } }; class once_per_n { public: unsigned int frequency; unsigned int left; public: once_per_n(unsigned int _frequency) : frequency(_frequency), left(_frequency) {} inline void start() { left = frequency; } /// Set timer to "elapsed" state (elapsed() will return true during next call) inline void signal() { left = 0; } inline unsigned int get(unsigned int desired) { if (desired > left) { desired = left; left = 0; return desired; } left -= desired; return desired; } inline bool elapsed() { if (!left) { left = frequency; return true; } return false; } }; class gain_smoothing: public inertia { public: gain_smoothing() : inertia(linear_ramp(64)) { } void set_sample_rate(int sr) { ramp = linear_ramp(sr / 100); } // to change param, use set_inertia(value) // to read param, use get() }; } #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h000066400000000000000000000110201247673406200235420ustar00rootroot00000000000000/* Calf DSP Library * API wrappers for LADSPA/DSSI * * Copyright (C) 2007-2008 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_LADSPA_WRAP_H #define __CALF_LADSPA_WRAP_H #if USE_LADSPA #include #include #if USE_DSSI #include #endif #include "giface.h" #include "preset.h" namespace calf_plugins { struct ladspa_plugin_metadata_set; /// A template implementing plugin_ctl_iface for a given plugin struct ladspa_instance: public plugin_ctl_iface { audio_module_iface *module; const plugin_metadata_iface *metadata; ladspa_plugin_metadata_set *ladspa; bool activate_flag; float **ins, **outs, **params; #if USE_DSSI dssi_feedback_sender *feedback_sender; #endif ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate); virtual ~ladspa_instance(); virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); } virtual float get_param_value(int param_no); virtual void set_param_value(int param_no, float value); virtual bool activate_preset(int bank, int program); virtual char *configure(const char *key, const char *value); virtual float get_level(unsigned int port) { return 0.f; } virtual void execute(int cmd_no) { module->execute(cmd_no); } virtual void send_configures(send_configure_iface *sci) { module->send_configures(sci); } virtual int send_status_updates(send_updates_iface *sui, int last_serial) { return module->send_status_updates(sui, last_serial); } void run(unsigned long SampleCount); #if USE_DSSI /// Utility function: handle MIDI event (only handles a subset in this version) void process_dssi_event(snd_seq_event_t &event); void run_synth(unsigned long SampleCount, snd_seq_event_t *Events, unsigned long EventCount); #endif virtual const plugin_metadata_iface *get_metadata_iface() const { return metadata; } }; /// Set of metadata produced by LADSPA wrapper for LADSPA-related purposes struct ladspa_plugin_metadata_set { /// LADSPA descriptor LADSPA_Descriptor descriptor; /// LADSPA descriptor for DSSI (uses a different name for the plugin, otherwise same as descriptor) LADSPA_Descriptor descriptor_for_dssi; #if USE_DSSI /// Extended DSSI descriptor (points to descriptor_for_dssi for things like name/label/port info etc.) DSSI_Descriptor dssi_descriptor; DSSI_Program_Descriptor dssi_default_program; std::vector *presets; std::vector *preset_descs; #endif int input_count, output_count, param_count; const plugin_metadata_iface *metadata; ladspa_plugin_metadata_set(); void prepare(const plugin_metadata_iface *md, LADSPA_Handle (*cb_instantiate)(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate)); void prepare_dssi(); ~ladspa_plugin_metadata_set(); }; /// A wrapper class for plugin class object (there is only one ladspa_wrapper singleton for many instances of the same plugin) template struct ladspa_wrapper { static ladspa_plugin_metadata_set output; private: ladspa_wrapper(const plugin_metadata_iface *md) { output.prepare(md, cb_instantiate); } public: /// LADSPA instantiation function (create a plugin instance) static LADSPA_Handle cb_instantiate(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { return new ladspa_instance(new Module, &output, sample_rate); } /// Get a wrapper singleton - used to prevent initialization order problems which were present in older versions static ladspa_plugin_metadata_set &get() { static ladspa_wrapper instance(new typename Module::metadata_class); return instance.output; } }; }; #endif #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/loudness.h000066400000000000000000000055741247673406200231220ustar00rootroot00000000000000/* Calf DSP Library * A-weighting filter for * Copyright (C) 2001-2007 Krzysztof Foltman * * Most of code in this file is based on freely * available other work of other people (filter equations). * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_LOUDNESS_H #define __CALF_LOUDNESS_H #include "biquad.h" namespace dsp { class aweighter { public: biquad_d2 bq1, bq2, bq3; /// Produce one output sample from one input sample float process(float sample) { return bq1.process(bq2.process(bq3.process(sample))); } /// Set sample rate (updates filter coefficients) void set(float sr) { // analog coeffs taken from: http://www.diracdelta.co.uk/science/source/a/w/aweighting/source.html // first we need to adjust them by doing some obscene sort of reverse pre-warping (a broken one, too!) float f1 = biquad_coeffs::unwarpf(20.6f, sr); float f2 = biquad_coeffs::unwarpf(107.7f, sr); float f3 = biquad_coeffs::unwarpf(738.f, sr); float f4 = biquad_coeffs::unwarpf(12200.f, sr); // then map s domain to z domain using bilinear transform // note: f1 and f4 are double poles bq1.set_bilinear(0, 0, 1, f1*f1, 2 * f1, 1); bq2.set_bilinear(1, 0, 0, f2*f3, f2 + f3, 1); bq3.set_bilinear(0, 0, 1, f4*f4, 2 * f4, 1); // the coeffs above give non-normalized value, so it should be normalized to produce 0dB at 1 kHz // find actual gain float gain1kHz = freq_gain(1000.0, sr); // divide one filter's x[n-m] coefficients by that value float gc = 1.0 / gain1kHz; bq1.a0 *= gc; bq1.a1 *= gc; bq1.a2 *= gc; } /// Reset to zero if at risk of denormals void sanitize() { bq1.sanitize(); bq2.sanitize(); bq3.sanitize(); } /// Reset state to zero void reset() { bq1.reset(); bq2.reset(); bq3.reset(); } /// Gain and a given frequency float freq_gain(float freq, float sr) { return bq1.freq_gain(freq, sr) * bq2.freq_gain(freq, sr) * bq3.freq_gain(freq, sr); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/lv2_external_ui.h000066400000000000000000000061241247673406200243600ustar00rootroot00000000000000/* -*- Mode: C ; c-basic-offset: 2 -*- */ /***************************************************************************** * * This work is in public domain. * * This file 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. * * If you have questions, contact Nedko Arnaudov or * ask in #lad channel, FreeNode IRC network. * *****************************************************************************/ #ifndef LV2_EXTERNAL_UI_H__5AFE09A5_0FB7_47AF_924E_2AF0F8DE8873__INCLUDED #define LV2_EXTERNAL_UI_H__5AFE09A5_0FB7_47AF_924E_2AF0F8DE8873__INCLUDED /** UI extension suitable for out-of-process UIs */ #define LV2_EXTERNAL_UI_URI "http://lv2plug.in/ns/extensions/ui#external" #ifdef __cplusplus extern "C" { #endif #if 0 } /* Adjust editor indent */ #endif /** * When LV2_EXTERNAL_UI_URI UI is instantiated, the returned * LV2UI_Widget handle must be cast to pointer to struct lv2_external_ui. * UI is created in invisible state. */ struct lv2_external_ui { /** * Host calls this function regulary. UI library implementing the * callback may do IPC or redraw the UI. * * @param _this_ the UI context */ void (* run)(struct lv2_external_ui * _this_); /** * Host calls this function to make the plugin UI visible. * * @param _this_ the UI context */ void (* show)(struct lv2_external_ui * _this_); /** * Host calls this function to make the plugin UI invisible again. * * @param _this_ the UI context */ void (* hide)(struct lv2_external_ui * _this_); }; #define LV2_EXTERNAL_UI_RUN(ptr) (ptr)->run(ptr) #define LV2_EXTERNAL_UI_SHOW(ptr) (ptr)->show(ptr) #define LV2_EXTERNAL_UI_HIDE(ptr) (ptr)->hide(ptr) /** * On UI instantiation, host must supply LV2_EXTERNAL_UI_URI * feature. LV2_Feature::data must be pointer to struct lv2_external_ui_host. */ struct lv2_external_ui_host { /** * Callback that plugin UI will call * when UI (GUI window) is closed by user. * This callback wil; be called during execution of lv2_external_ui::run() * (i.e. not from background thread). * * After this callback is called, UI is defunct. Host must call * LV2UI_Descriptor::cleanup(). If host wants to make the UI visible * again UI must be reinstantiated. * * @param controller Host context associated with plugin UI, as * supplied to LV2UI_Descriptor::instantiate() */ void (* ui_closed)(LV2UI_Controller controller); /** * Optional (may be NULL) "user friendly" identifier which the UI * may display to allow a user to easily associate this particular * UI instance with the correct plugin instance as it is represented * by the host (e.g. "track 1" or "channel 4"). * * If supplied by host, the string will be referenced only during * LV2UI_Descriptor::instantiate() */ const char * plugin_human_id; }; #if 0 { /* Adjust editor indent */ #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef LV2_EXTERNAL_UI_H__5AFE09A5_0FB7_47AF_924E_2AF0F8DE8873__INCLUDED */ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/lv2helpers.h000066400000000000000000000017511247673406200233450ustar00rootroot00000000000000/* Calf DSP Library * LV2-related helper classes and functions * * Copyright (C) 2001-2008 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_LV2HELPERS_H #define CALF_LV2HELPERS_H #if USE_LV2 #include #include #endif #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/lv2wrap.h000066400000000000000000000314471247673406200226610ustar00rootroot00000000000000/* Calf DSP Library * LV2 wrapper templates * * Copyright (C) 2001-2008 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_LV2WRAP_H #define CALF_LV2WRAP_H #if USE_LV2 #include #include #include #include #include #include #include #include #include namespace calf_plugins { struct lv2_instance: public plugin_ctl_iface, public progress_report_iface { const plugin_metadata_iface *metadata; audio_module_iface *module; bool set_srate; int srate_to_set; LV2_Event_Buffer *event_data; LV2_URI_Map_Feature *uri_map; LV2_Event_Feature *event_feature; uint32_t midi_event_type; LV2_Progress *progress_report_feature; float **ins, **outs, **params; int out_count; int real_param_count; lv2_instance(audio_module_iface *_module) { module = _module; module->get_port_arrays(ins, outs, params); metadata = module->get_metadata_iface(); out_count = metadata->get_output_count(); real_param_count = metadata->get_param_count(); uri_map = NULL; event_data = NULL; progress_report_feature = NULL; midi_event_type = 0xFFFFFFFF; srate_to_set = 44100; set_srate = true; } /// This, and not Module::post_instantiate, is actually called by lv2_wrapper class void post_instantiate() { if (progress_report_feature) module->set_progress_report_iface(this); module->post_instantiate(); } virtual bool activate_preset(int bank, int program) { return false; } virtual float get_level(unsigned int port) { return 0.f; } virtual void execute(int cmd_no) { module->execute(cmd_no); } virtual void report_progress(float percentage, const std::string &message) { if (progress_report_feature) (*progress_report_feature->progress)(progress_report_feature->context, percentage, !message.empty() ? message.c_str() : NULL); } void send_configures(send_configure_iface *sci) { module->send_configures(sci); } void impl_restore(LV2_State_Retrieve_Function retrieve, void *callback_data) { const char *const *vars = module->get_metadata_iface()->get_configure_vars(); if (!vars) return; assert(uri_map); uint32_t string_type = uri_map->uri_to_id(uri_map->callback_data, NULL, "http://lv2plug.in/ns/ext/atom#String"); assert(string_type); for (unsigned int i = 0; vars[i]; i++) { const uint32_t key = uri_map->uri_to_id(uri_map->callback_data, NULL, vars[i]); size_t len = 0; uint32_t type = 0; uint32_t flags = 0; const void *ptr = (*retrieve)(callback_data, key, &len, &type, &flags); if (ptr) { if (type != string_type) fprintf(stderr, "Warning: type is %d, expected %d\n", (int)type, (int)string_type); printf("Calling configure on %s\n", vars[i]); configure(vars[i], std::string((const char *)ptr, len).c_str()); } else configure(vars[i], NULL); } } char *configure(const char *key, const char *value) { // disambiguation - the plugin_ctl_iface version is just a stub, so don't use it return module->configure(key, value); } void process_events(uint32_t &offset) { struct LV2_Midi_Event: public LV2_Event { unsigned char data[1]; }; unsigned char *data = (unsigned char *)(event_data->data); for (uint32_t i = 0; i < event_data->event_count; i++) { LV2_Midi_Event *item = (LV2_Midi_Event *)data; uint32_t ts = item->frames; // printf("Event: timestamp %d subframes %d type %d vs %d\n", item->frames, item->subframes, item->type, mod->midi_event_type); if (ts > offset) { module->process_slice(offset, ts); offset = ts; } if (item->type == midi_event_type) { // printf("Midi message %x %x %x %x %d\n", item->data[0], item->data[1], item->data[2], item->data[3], item->size); int channel = item->data[0] & 15; switch(item->data[0] >> 4) { case 8: module->note_off(channel, item->data[1], item->data[2]); break; case 9: module->note_on(channel, item->data[1], item->data[2]); break; case 11: module->control_change(channel, item->data[1], item->data[2]); break; case 12: module->program_change(channel, item->data[1]); break; case 13: module->channel_pressure(channel, item->data[1]); break; case 14: module->pitch_bend(channel, item->data[1] + 128 * item->data[2] - 8192); break; } } else if (item->type == 0 && event_feature) event_feature->lv2_event_unref(event_feature->callback_data, item); // printf("timestamp %f item size %d first byte %x\n", item->timestamp, item->size, item->data[0]); data += ((sizeof(LV2_Event) + item->size + 7))&~7; } } virtual float get_param_value(int param_no) { // XXXKF hack if (param_no >= real_param_count) return 0; return (*params)[param_no]; } virtual void set_param_value(int param_no, float value) { // XXXKF hack if (param_no >= real_param_count) return; *params[param_no] = value; } virtual const plugin_metadata_iface *get_metadata_iface() const { return metadata; } virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); } virtual int send_status_updates(send_updates_iface *sui, int last_serial) { return module->send_status_updates(sui, last_serial); } }; struct LV2_Calf_Descriptor { plugin_ctl_iface *(*get_pci)(LV2_Handle Instance); }; template struct lv2_wrapper { typedef lv2_instance instance; static LV2_Descriptor descriptor; static LV2_Calf_Descriptor calf_descriptor; static LV2_State_Interface state_iface; std::string uri; lv2_wrapper() { ladspa_plugin_info &info = Module::plugin_info; uri = "http://calf.sourceforge.net/plugins/" + std::string(info.label); descriptor.URI = uri.c_str(); descriptor.instantiate = cb_instantiate; descriptor.connect_port = cb_connect; descriptor.activate = cb_activate; descriptor.run = cb_run; descriptor.deactivate = cb_deactivate; descriptor.cleanup = cb_cleanup; descriptor.extension_data = cb_ext_data; state_iface.save = cb_state_save; state_iface.restore = cb_state_restore; calf_descriptor.get_pci = cb_get_pci; } static void cb_connect(LV2_Handle Instance, uint32_t port, void *DataLocation) { instance *const mod = (instance *)Instance; const plugin_metadata_iface *md = mod->metadata; unsigned long ins = md->get_input_count(); unsigned long outs = md->get_output_count(); unsigned long params = md->get_param_count(); if (port < ins) mod->ins[port] = (float *)DataLocation; else if (port < ins + outs) mod->outs[port - ins] = (float *)DataLocation; else if (port < ins + outs + params) { int i = port - ins - outs; mod->params[i] = (float *)DataLocation; } else if (md->get_midi() && port == ins + outs + params) { mod->event_data = (LV2_Event_Buffer *)DataLocation; } } static void cb_activate(LV2_Handle Instance) { instance *const mod = (instance *)Instance; mod->set_srate = true; } static void cb_deactivate(LV2_Handle Instance) { instance *const mod = (instance *)Instance; mod->module->deactivate(); } static LV2_Handle cb_instantiate(const LV2_Descriptor * Descriptor, double sample_rate, const char *bundle_path, const LV2_Feature *const *features) { instance *mod = new instance(new Module); // XXXKF some people use fractional sample rates; we respect them ;-) mod->srate_to_set = (uint32_t)sample_rate; mod->set_srate = true; while(*features) { if (!strcmp((*features)->URI, LV2_URI_MAP_URI)) { mod->uri_map = (LV2_URI_Map_Feature *)((*features)->data); mod->midi_event_type = mod->uri_map->uri_to_id( mod->uri_map->callback_data, "http://lv2plug.in/ns/ext/event", "http://lv2plug.in/ns/ext/midi#MidiEvent"); } else if (!strcmp((*features)->URI, LV2_EVENT_URI)) { mod->event_feature = (LV2_Event_Feature *)((*features)->data); } else if (!strcmp((*features)->URI, LV2_PROGRESS_URI)) { mod->progress_report_feature = (LV2_Progress *)((*features)->data); } features++; } mod->post_instantiate(); return mod; } static plugin_ctl_iface *cb_get_pci(LV2_Handle Instance) { return static_cast(Instance); } static void cb_run(LV2_Handle Instance, uint32_t SampleCount) { instance *const inst = (instance *)Instance; audio_module_iface *mod = inst->module; if (inst->set_srate) { mod->set_sample_rate(inst->srate_to_set); mod->activate(); inst->set_srate = false; } mod->params_changed(); uint32_t offset = 0; if (inst->event_data) { inst->process_events(offset); } inst->module->process_slice(offset, SampleCount); } static void cb_cleanup(LV2_Handle Instance) { instance *const mod = (instance *)Instance; delete mod; } static const void *cb_ext_data(const char *URI) { if (!strcmp(URI, "http://foltman.com/ns/calf-plugin-instance")) return &calf_descriptor; if (!strcmp(URI, LV2_STATE_INTERFACE_URI)) return &state_iface; return NULL; } static void cb_state_save(LV2_Handle Instance, LV2_State_Store_Function store, LV2_State_Handle handle, uint32_t flags, const LV2_Feature *const * features) { instance *const inst = (instance *)Instance; struct store_state: public send_configure_iface { LV2_State_Store_Function store; void *callback_data; instance *inst; uint32_t string_data_type; virtual void send_configure(const char *key, const char *value) { (*store)(callback_data, inst->uri_map->uri_to_id(inst->uri_map->callback_data, NULL, key), value, strlen(value) + 1, string_data_type, LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE); } }; // A host that supports State MUST support URI-Map as well. assert(inst->uri_map); store_state s; s.store = store; s.callback_data = handle; s.inst = inst; s.string_data_type = inst->uri_map->uri_to_id(inst->uri_map->callback_data, NULL, "http://lv2plug.in/ns/ext/atom#String"); inst->send_configures(&s); } static void cb_state_restore(LV2_Handle Instance, LV2_State_Retrieve_Function retrieve, LV2_State_Handle callback_data, uint32_t flags, const LV2_Feature *const * features) { instance *const inst = (instance *)Instance; inst->impl_restore(retrieve, callback_data); } static lv2_wrapper &get() { static lv2_wrapper *instance = new lv2_wrapper; return *instance; } }; }; #endif #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/metadata.h000066400000000000000000000706141247673406200230430ustar00rootroot00000000000000/* Calf DSP Library * Audio module (plugin) metadata - header file * * Copyright (C) 2007-2008 Krzysztof Foltman * Copyright (C) 2008 Thor Harald Johansen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_METADATA_H #define __CALF_METADATA_H #include "giface.h" #define MONO_VU_METER_PARAMS param_meter_in, param_meter_out, param_clip_in, param_clip_out #define STEREO_VU_METER_PARAMS param_meter_inL, param_meter_inR, param_meter_outL, param_meter_outR, param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR namespace calf_plugins { struct flanger_metadata: public plugin_metadata { public: enum { par_delay, par_depth, par_rate, par_fb, par_stereo, par_reset, par_amount, par_dryamount, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; PLUGIN_NAME_ID_LABEL("flanger", "flanger", "Flanger") }; struct phaser_metadata: public plugin_metadata { enum { par_freq, par_depth, par_rate, par_fb, par_stages, par_stereo, par_reset, par_amount, par_dryamount, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; PLUGIN_NAME_ID_LABEL("phaser", "phaser", "Phaser") }; struct filter_metadata: public plugin_metadata { enum { par_cutoff, par_resonance, par_mode, par_inertia, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = false, support_midi = false }; PLUGIN_NAME_ID_LABEL("filter", "filter", "Filter") /// do not export mode and inertia as CVs, as those are settings and not parameters bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; } }; /// Filterclavier - metadata struct filterclavier_metadata: public plugin_metadata { enum { par_transpose, par_detune, par_max_resonance, par_mode, par_inertia, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = true, support_midi = true }; PLUGIN_NAME_ID_LABEL("filterclavier", "filterclavier", "Filterclavier") /// do not export mode and inertia as CVs, as those are settings and not parameters bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; } }; struct reverb_metadata: public plugin_metadata { enum { par_clip, par_meter_wet, par_meter_out, par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; PLUGIN_NAME_ID_LABEL("reverb", "reverb", "Reverb") }; struct vintage_delay_metadata: public plugin_metadata { enum { par_bpm, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, par_dryamount, par_width, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false }; PLUGIN_NAME_ID_LABEL("vintage_delay", "vintagedelay", "Vintage Delay") }; struct rotary_speaker_metadata: public plugin_metadata { public: enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, par_am_depth, par_test, par_meter_l, par_meter_h, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = false, rt_capable = true }; PLUGIN_NAME_ID_LABEL("rotary_speaker", "rotaryspeaker", "Rotary Speaker") }; /// A multitap stereo chorus thing - metadata struct multichorus_metadata: public plugin_metadata { public: enum { par_delay, par_depth, par_rate, par_stereo, par_voices, par_vphase, par_amount, par_dryamount, par_freq, par_freq2, par_q, par_overlap, param_count }; enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false }; PLUGIN_NAME_ID_LABEL("multichorus", "multichorus", "Multi Chorus") }; enum CalfEqMode { MODE12DB, MODE24DB, MODE36DB }; /// Monosynth - metadata struct monosynth_metadata: public plugin_metadata { enum { wave_saw, wave_sqr, wave_pulse, wave_sine, wave_triangle, wave_varistep, wave_skewsaw, wave_skewsqr, wave_test1, wave_test2, wave_test3, wave_test4, wave_test5, wave_test6, wave_test7, wave_test8, wave_count }; enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 }; enum { par_wave1, par_wave2, par_pw1, par_pw2, par_detune, par_osc2xpose, par_oscmode, par_oscmix, par_filtertype, par_cutoff, par_resonance, par_cutoffsep, par_env1tocutoff, par_env1tores, par_env1toamp, par_env1attack, par_env1decay, par_env1sustain, par_env1fade, par_env1release, par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, par_pwhlrange, par_lforate, par_lfodelay, par_lfofilter, par_lfopitch, par_lfopw, par_mwhl_lfo, par_scaledetune, par_env2tocutoff, par_env2tores, par_env2toamp, par_env2attack, par_env2decay, par_env2sustain, par_env2fade, par_env2release, par_stretch1, par_window1, par_lfo1trig, par_lfo2trig, par_lfo2rate, par_lfo2delay, param_count }; enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true }; enum { step_size = 64, step_shift = 6 }; enum { mod_matrix_slots = 10 }; enum { modsrc_none, modsrc_velocity, modsrc_pressure, modsrc_modwheel, modsrc_env1, modsrc_env2, modsrc_lfo1, modsrc_lfo2, modsrc_count, }; enum { moddest_none, moddest_attenuation, moddest_oscmix, moddest_cutoff, moddest_resonance, moddest_o1detune, moddest_o2detune, moddest_o1pw, moddest_o2pw, moddest_o1stretch, moddest_count, }; PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth") mod_matrix_metadata mm_metadata; monosynth_metadata(); /// Lookup of table edit interface virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; } const char *const *get_configure_vars() const; }; /// Thor's compressor - metadata /// Added some meters and stripped the weighting part struct compressor_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression, param_count }; PLUGIN_NAME_ID_LABEL("compressor", "compressor", "Compressor") }; /// Markus's sidechain compressor - metadata struct sidechaincompressor_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression, param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_count }; PLUGIN_NAME_ID_LABEL("sidechaincompressor", "sidechaincompressor", "Sidechain Compressor") }; /// Markus's multibandcompressor - metadata struct multibandcompressor_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_freq0, param_freq1, param_freq2, param_sep0, param_sep1, param_sep2, param_q0, param_q1, param_q2, param_mode, param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0, param_detection0, param_compression0, param_output0, param_bypass0, param_solo0, param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1, param_detection1, param_compression1, param_output1, param_bypass1, param_solo1, param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2, param_detection2, param_compression2, param_output2, param_bypass2, param_solo2, param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3, param_detection3, param_compression3, param_output3, param_bypass3, param_solo3, param_count }; PLUGIN_NAME_ID_LABEL("multiband_compressor", "multibandcompressor", "Multiband Compressor") }; /// Markus's deesser - metadata struct deesser_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_detected, param_compression, param_detected_led, param_clip_out, param_detection, param_mode, param_threshold, param_ratio, param_laxity, param_makeup, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, param_f2_q, param_sc_listen, param_count }; PLUGIN_NAME_ID_LABEL("deesser", "deesser", "Deesser") }; /// Damiens' Gate - metadata /// Added some meters and stripped the weighting part struct gate_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating, param_count }; PLUGIN_NAME_ID_LABEL("gate", "gate", "Gate") }; /// Markus's sidechain gate - metadata struct sidechaingate_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS, param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating, param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_count }; PLUGIN_NAME_ID_LABEL("sidechaingate", "sidechaingate", "Sidechain Gate") }; /// Markus's multiband gate - metadata struct multibandgate_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_freq0, param_freq1, param_freq2, param_sep0, param_sep1, param_sep2, param_q0, param_q1, param_q2, param_mode, param_range0, param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0, param_detection0, param_gating0, param_output0, param_bypass0, param_solo0, param_range1, param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1, param_detection1, param_gating1, param_output1, param_bypass1, param_solo1, param_range2, param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2, param_detection2, param_gating2, param_output2, param_bypass2, param_solo2, param_range3, param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3, param_detection3, param_gating3, param_output3, param_bypass3, param_solo3, param_count }; PLUGIN_NAME_ID_LABEL("multiband_gate", "multibandgate", "Multiband Gate") }; /// Markus's limiter - metadata struct limiter_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_limit, param_attack, param_release, param_att, param_asc, param_asc_led, param_asc_coeff, param_count }; PLUGIN_NAME_ID_LABEL("limiter", "limiter", "Limiter") }; /// Markus's multibandlimiter - metadata struct multibandlimiter_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_freq0, param_freq1, param_freq2, param_sep0, param_sep1, param_sep2, param_q0, param_q1, param_q2, param_mode, param_limit, param_attack, param_release, param_minrel, param_att0, param_att1, param_att2, param_att3, param_weight0, param_weight1, param_weight2, param_weight3, param_release0, param_release1, param_release2, param_release3, param_solo0, param_solo1, param_solo2, param_solo3, param_effrelease0, param_effrelease1, param_effrelease2, param_effrelease3, param_asc, param_asc_led, param_asc_coeff, param_count }; PLUGIN_NAME_ID_LABEL("multiband_limiter", "multibandlimiter", "Multiband Limiter") }; /// Markus's 5-band EQ - metadata struct equalizer5band_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_ls_active, param_ls_level, param_ls_freq, param_hs_active, param_hs_level, param_hs_freq, param_p1_active, param_p1_level, param_p1_freq, param_p1_q, param_p2_active, param_p2_level, param_p2_freq, param_p2_q, param_p3_active, param_p3_level, param_p3_freq, param_p3_q, param_count }; // dummy parameter numbers, shouldn't be used EVER, they're only there to avoid pushing LP/HP filters to a separate class // and potentially making inlining and optimization harder for the compiler enum { param_lp_active = 0xDEADBEEF, param_hp_active, param_hp_mode, param_lp_mode, param_hp_freq, param_lp_freq }; enum { PeakBands = 3, first_graph_param = param_ls_active, last_graph_param = param_p3_q }; PLUGIN_NAME_ID_LABEL("equalizer5band", "eq5", "Equalizer 5 Band") }; /// Markus's 8-band EQ - metadata struct equalizer8band_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_hp_active, param_hp_freq, param_hp_mode, param_lp_active, param_lp_freq, param_lp_mode, param_ls_active, param_ls_level, param_ls_freq, param_hs_active, param_hs_level, param_hs_freq, param_p1_active, param_p1_level, param_p1_freq, param_p1_q, param_p2_active, param_p2_level, param_p2_freq, param_p2_q, param_p3_active, param_p3_level, param_p3_freq, param_p3_q, param_p4_active, param_p4_level, param_p4_freq, param_p4_q, param_count }; enum { PeakBands = 4, first_graph_param = param_hp_active, last_graph_param = param_p4_q }; PLUGIN_NAME_ID_LABEL("equalizer8band", "eq8", "Equalizer 8 Band") }; /// Markus's 12-band EQ - metadata struct equalizer12band_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_hp_active, param_hp_freq, param_hp_mode, param_lp_active, param_lp_freq, param_lp_mode, param_ls_active, param_ls_level, param_ls_freq, param_hs_active, param_hs_level, param_hs_freq, param_p1_active, param_p1_level, param_p1_freq, param_p1_q, param_p2_active, param_p2_level, param_p2_freq, param_p2_q, param_p3_active, param_p3_level, param_p3_freq, param_p3_q, param_p4_active, param_p4_level, param_p4_freq, param_p4_q, param_p5_active, param_p5_level, param_p5_freq, param_p5_q, param_p6_active, param_p6_level, param_p6_freq, param_p6_q, param_p7_active, param_p7_level, param_p7_freq, param_p7_q, param_p8_active, param_p8_level, param_p8_freq, param_p8_q, param_count }; enum { PeakBands = 8, first_graph_param = param_hp_active, last_graph_param = param_p8_q }; PLUGIN_NAME_ID_LABEL("equalizer12band", "eq12", "Equalizer 12 Band") }; /// Markus's Pulsator - metadata struct pulsator_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_mode, param_freq, param_amount, param_offset, param_mono, param_reset, param_count }; PLUGIN_NAME_ID_LABEL("pulsator", "pulsator", "Pulsator") }; /// Markus's Saturator - metadata struct saturator_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, param_mix, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive, param_lp_pre_freq, param_hp_pre_freq, param_lp_post_freq, param_hp_post_freq, param_p_freq, param_p_level, param_p_q, param_count }; PLUGIN_NAME_ID_LABEL("saturator", "saturator", "Saturator") }; /// Markus's Exciter - metadata struct exciter_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive, param_freq, param_listen, param_ceil_active, param_ceil, param_count }; PLUGIN_NAME_ID_LABEL("exciter", "exciter", "Exciter") }; /// Markus's Bass Enhancer - metadata struct bassenhancer_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive, param_freq, param_listen, param_floor_active, param_floor, param_count }; PLUGIN_NAME_ID_LABEL("bassenhancer", "bassenhancer", "Bass Enhancer") }; /// Markus's Mono Module - metadata struct stereo_metadata: public plugin_metadata { enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_balance_in, param_balance_out, param_softclip, param_mute_l, param_mute_r, param_phase_l, param_phase_r, param_mode, param_slev, param_sbal, param_mlev, param_mpan, param_widener, param_delay, param_meter_phase, param_count }; PLUGIN_NAME_ID_LABEL("stereo", "stereo", "Stereo Tools") }; /// Markus's Mono Module - metadata struct mono_metadata: public plugin_metadata { enum { in_count = 1, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true }; enum { param_bypass, param_level_in, param_level_out, param_meter_in, param_meter_outL, param_meter_outR, param_clip_in,param_clip_outL, param_clip_outR, param_balance_out, param_softclip, param_mute_l, param_mute_r, param_phase_l, param_phase_r, param_delay, param_count }; PLUGIN_NAME_ID_LABEL("mono", "mono", "Mono Input") }; /// Organ - enums for parameter IDs etc. (this mess is caused by organ split between plugin and generic class - which was /// a bad design decision and should be sorted out some day) XXXKF @todo struct organ_enums { enum { par_drawbar1, par_drawbar2, par_drawbar3, par_drawbar4, par_drawbar5, par_drawbar6, par_drawbar7, par_drawbar8, par_drawbar9, par_frequency1, par_frequency2, par_frequency3, par_frequency4, par_frequency5, par_frequency6, par_frequency7, par_frequency8, par_frequency9, par_waveform1, par_waveform2, par_waveform3, par_waveform4, par_waveform5, par_waveform6, par_waveform7, par_waveform8, par_waveform9, par_detune1, par_detune2, par_detune3, par_detune4, par_detune5, par_detune6, par_detune7, par_detune8, par_detune9, par_phase1, par_phase2, par_phase3, par_phase4, par_phase5, par_phase6, par_phase7, par_phase8, par_phase9, par_pan1, par_pan2, par_pan3, par_pan4, par_pan5, par_pan6, par_pan7, par_pan8, par_pan9, par_routing1, par_routing2, par_routing3, par_routing4, par_routing5, par_routing6, par_routing7, par_routing8, par_routing9, par_foldover, par_percdecay, par_perclevel, par_percwave, par_percharm, par_percvel2amp, par_percfmdecay, par_percfmdepth, par_percfmwave, par_percfmharm, par_percvel2fm, par_perctrigger, par_percstereo, par_filterchain, par_filter1type, par_master, par_f1cutoff, par_f1res, par_f1env1, par_f1env2, par_f1env3, par_f1keyf, par_f2cutoff, par_f2res, par_f2env1, par_f2env2, par_f2env3, par_f2keyf, par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release, par_eg1velscl, par_eg1ampctl, par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl, par_eg2ampctl, par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl, par_eg3ampctl, par_lforate, par_lfoamt, par_lfowet, par_lfophase, par_lfomode, par_lfotype, par_transpose, par_detune, par_polyphony, par_quadenv, par_pwhlrange, par_bassfreq, par_bassgain, par_treblefreq, par_treblegain, param_count }; enum organ_waveform { wave_sine, wave_sinepl1, wave_sinepl2, wave_sinepl3, wave_ssaw, wave_ssqr, wave_spls, wave_saw, wave_sqr, wave_pulse, wave_sinepl05, wave_sqr05, wave_halfsin, wave_clvg, wave_bell, wave_bell2, wave_w1, wave_w2, wave_w3, wave_w4, wave_w5, wave_w6, wave_w7, wave_w8, wave_w9, wave_dsaw, wave_dsqr, wave_dpls, wave_count_small, wave_strings = wave_count_small, wave_strings2, wave_sinepad, wave_bellpad, wave_space, wave_choir, wave_choir2, wave_choir3, wave_count, wave_count_big = wave_count - wave_count_small }; enum { ampctl_none, ampctl_direct, ampctl_f1, ampctl_f2, ampctl_all, ampctl_count }; enum { lfotype_allpass = 0, lfotype_cv1, lfotype_cv2, lfotype_cv3, lfotype_cvfull, lfotype_count }; enum { lfomode_off = 0, lfomode_direct, lfomode_filter1, lfomode_filter2, lfomode_voice, lfomode_global, lfomode_count }; enum { perctrig_first = 0, perctrig_each, perctrig_eachplus, perctrig_polyphonic, perctrig_count }; }; /// Organ - metadata struct organ_metadata: public organ_enums, public plugin_metadata { enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true }; PLUGIN_NAME_ID_LABEL("organ", "organ", "Organ") public: plugin_command_info *get_commands(); const char *const *get_configure_vars() const; }; /// FluidSynth - metadata struct fluidsynth_metadata: public plugin_metadata { enum { par_master, par_interpolation, par_reverb, par_chorus, param_count }; enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = false }; PLUGIN_NAME_ID_LABEL("fluidsynth", "fluidsynth", "Fluidsynth") public: const char *const *get_configure_vars() const; }; /// Wavetable - metadata struct wavetable_metadata: public plugin_metadata { enum { wt_fmshiny, wt_fmshiny2, wt_rezo, wt_metal, wt_bell, wt_blah, wt_pluck, wt_stretch, wt_stretch2, wt_hardsync, wt_hardsync2, wt_softsync, wt_bell2, wt_bell3, wt_tine, wt_tine2, wt_clav, wt_clav2, wt_gtr, wt_gtr2, wt_gtr3, wt_gtr4, wt_gtr5, wt_reed, wt_reed2, wt_silver, wt_brass, wt_multi, wt_multi2, wt_count }; enum { modsrc_none, modsrc_velocity, modsrc_pressure, modsrc_modwheel, modsrc_env1, modsrc_env2, modsrc_env3, modsrc_count, }; enum { moddest_none, moddest_attenuation, moddest_oscmix, moddest_cutoff, moddest_resonance, moddest_o1shift, moddest_o2shift, moddest_o1detune, moddest_o2detune, moddest_count, }; enum { par_o1wave, par_o1offset, par_o1transpose, par_o1detune, par_o1level, par_o2wave, par_o2offset, par_o2transpose, par_o2detune, par_o2level, par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1fade, par_eg1release, par_eg1velscl, par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2fade, par_eg2release, par_eg2velscl, par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3fade, par_eg3release, par_eg3velscl, par_pwhlrange, param_count }; enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true }; enum { mod_matrix_slots = 10 }; enum { step_size = 64 }; PLUGIN_NAME_ID_LABEL("wavetable", "wavetable", "Wavetable") mod_matrix_metadata mm_metadata; wavetable_metadata(); /// Lookup of table edit interface virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modmatrix.h000066400000000000000000000072221247673406200232620ustar00rootroot00000000000000/* Calf DSP Library * Modulation matrix boilerplate code. * * Copyright (C) 2009 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_MODMATRIX_H #define __CALF_MODMATRIX_H #include "giface.h" #include namespace dsp { /// Single entry in modulation matrix struct modulation_entry { /// Mapped source int src1; /// Source mapping mode calf_plugins::mod_matrix_metadata::mapping_mode mapping; /// Unmapped modulating source int src2; /// Modulation amount float amount; /// Modulation destination int dest; modulation_entry() { reset(); } /// Reset the row to default void reset() { src1 = 0; src2 = 0; mapping = calf_plugins::mod_matrix_metadata::map_positive; amount = 0.f; dest = 0; } }; }; namespace calf_plugins { class mod_matrix_impl { protected: dsp::modulation_entry *matrix; mod_matrix_metadata *metadata; unsigned int matrix_rows; /// Polynomials for different scaling modes (1, x, x^2) static const float scaling_coeffs[calf_plugins::mod_matrix_metadata::map_type_count][3]; public: mod_matrix_impl(dsp::modulation_entry *_matrix, calf_plugins::mod_matrix_metadata *_metadata); /// Process modulation matrix, calculate outputs from inputs inline void calculate_modmatrix(float *moddest, int moddest_count, float *modsrc) { for (int i = 0; i < moddest_count; i++) moddest[i] = 0; for (unsigned int i = 0; i < matrix_rows; i++) { dsp::modulation_entry &slot = matrix[i]; if (slot.dest) { float value = modsrc[slot.src1]; const float *c = scaling_coeffs[slot.mapping]; value = c[0] + c[1] * value + c[2] * value * value; moddest[slot.dest] += value * modsrc[slot.src2] * slot.amount; } } } void send_configures(send_configure_iface *); char *configure(const char *key, const char *value); /// Return a list of configure variables used by the modulation matrix template static const char **get_configure_vars() { static std::vector names_vector; static const char *names[rows * 5 + 1]; if (names[0] == NULL) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 5; j++) { char buf[40]; sprintf(buf, "mod_matrix:%d,%d", i, j); names_vector.push_back(buf); } } for (size_t i = 0; i < names_vector.size(); i++) names[i] = names_vector[i].c_str(); names[names_vector.size()] = NULL; } return names; } private: std::string get_cell(int row, int column) const; void set_cell(int row, int column, const std::string &src, std::string &error); }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modulelist.h000066400000000000000000000031621247673406200234360ustar00rootroot00000000000000#ifdef PER_MODULE_ITEM PER_MODULE_ITEM(filter, false, "filter") PER_MODULE_ITEM(filterclavier, false, "filterclavier") PER_MODULE_ITEM(flanger, false, "flanger") PER_MODULE_ITEM(reverb, false, "reverb") PER_MODULE_ITEM(monosynth, true, "monosynth") PER_MODULE_ITEM(vintage_delay, false, "vintagedelay") PER_MODULE_ITEM(organ, true, "organ") PER_MODULE_ITEM(rotary_speaker, false, "rotaryspeaker") PER_MODULE_ITEM(phaser, false, "phaser") PER_MODULE_ITEM(multichorus, false, "multichorus") PER_MODULE_ITEM(compressor, false, "compressor") PER_MODULE_ITEM(sidechaincompressor, false, "sidechaincompressor") PER_MODULE_ITEM(multibandcompressor, false, "multibandcompressor") PER_MODULE_ITEM(deesser, false, "deesser") PER_MODULE_ITEM(gate, false, "gate") PER_MODULE_ITEM(sidechaingate, false, "sidechaingate") PER_MODULE_ITEM(multibandgate, false, "multibandgate") PER_MODULE_ITEM(limiter, false, "limiter") PER_MODULE_ITEM(multibandlimiter, false, "multibandlimiter") PER_MODULE_ITEM(pulsator, false, "pulsator") PER_MODULE_ITEM(equalizer5band, false, "eq5") PER_MODULE_ITEM(equalizer8band, false, "eq8") PER_MODULE_ITEM(equalizer12band, false, "eq12") PER_MODULE_ITEM(saturator, false, "saturator") PER_MODULE_ITEM(exciter, false, "exciter") PER_MODULE_ITEM(bassenhancer, false, "bassenhancer") PER_MODULE_ITEM(mono, false, "mono") PER_MODULE_ITEM(stereo, false, "stereo") #ifdef ENABLE_EXPERIMENTAL PER_MODULE_ITEM(fluidsynth, true, "fluidsynth") PER_MODULE_ITEM(wavetable, true, "wavetable") #endif #undef PER_MODULE_ITEM #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules.h000066400000000000000000000233611247673406200227300ustar00rootroot00000000000000/* Calf DSP plugin pack * Assorted plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_MODULES_H #define CALF_MODULES_H #include #include #include "biquad.h" #include "inertia.h" #include "audio_fx.h" #include "giface.h" #include "metadata.h" #include "loudness.h" namespace calf_plugins { struct ladspa_plugin_info; class reverb_audio_module: public audio_module { public: dsp::reverb reverb; dsp::simple_delay<16384, dsp::stereo_sample > pre_delay; dsp::onepole left_lo, right_lo, left_hi, right_hi; uint32_t srate; dsp::gain_smoothing amount, dryamount; int predelay_amt; float meter_wet, meter_out; uint32_t clip; void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void activate(); void set_sample_rate(uint32_t sr); void deactivate(); }; class vintage_delay_audio_module: public audio_module { public: // 1MB of delay memory per channel... uh, RAM is cheap enum { MAX_DELAY = 262144, ADDR_MASK = MAX_DELAY - 1 }; enum { MIXMODE_STEREO, MIXMODE_PINGPONG, MIXMODE_LR, MIXMODE_RL }; float buffers[2][MAX_DELAY]; int bufptr, deltime_l, deltime_r, mixmode, medium, old_medium; /// number of table entries written (value is only important when it is less than MAX_DELAY, which means that the buffer hasn't been totally filled yet) int age; dsp::gain_smoothing amt_left, amt_right, fb_left, fb_right, dry, chmix; dsp::biquad_d2 biquad_left[2], biquad_right[2]; uint32_t srate; vintage_delay_audio_module(); void params_changed(); void activate(); void deactivate(); void set_sample_rate(uint32_t sr); void calc_filters(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); }; template class filter_module_with_inertia: public audio_module, public FilterClass { public: /// These are pointers to the ins, outs, params arrays in the main class typedef filter_module_with_inertia inertia_filter_module; using audio_module::ins; using audio_module::outs; using audio_module::params; dsp::inertia inertia_cutoff, inertia_resonance, inertia_gain; dsp::once_per_n timer; bool is_active; mutable volatile int last_generation, last_calculated_generation; filter_module_with_inertia(float **ins, float **outs, float **params) : inertia_cutoff(dsp::exponential_ramp(128), 20) , inertia_resonance(dsp::exponential_ramp(128), 20) , inertia_gain(dsp::exponential_ramp(128), 1.0) , timer(128) , is_active(false) , last_generation(-1) , last_calculated_generation(-2) {} void calculate_filter() { float freq = inertia_cutoff.get_last(); // printf("freq=%g inr.cnt=%d timer.left=%d\n", freq, inertia_cutoff.count, timer.left); // XXXKF this is resonance of a single stage, obviously for three stages, resonant gain will be different float q = inertia_resonance.get_last(); int mode = dsp::fastf2i_drm(*params[Metadata::par_mode]); // printf("freq = %f q = %f mode = %d\n", freq, q, mode); int inertia = dsp::fastf2i_drm(*params[Metadata::par_inertia]); if (inertia != inertia_cutoff.ramp.length()) { inertia_cutoff.ramp.set_length(inertia); inertia_resonance.ramp.set_length(inertia); inertia_gain.ramp.set_length(inertia); } FilterClass::calculate_filter(freq, q, mode, inertia_gain.get_last()); } virtual void params_changed() { calculate_filter(); } void on_timer() { int gen = last_generation; inertia_cutoff.step(); inertia_resonance.step(); inertia_gain.step(); calculate_filter(); last_calculated_generation = gen; } void activate() { params_changed(); FilterClass::filter_activate(); timer = dsp::once_per_n(FilterClass::srate / 1000); timer.start(); is_active = true; } void set_sample_rate(uint32_t sr) { FilterClass::srate = sr; } void deactivate() { is_active = false; } uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { // printf("sr=%d cutoff=%f res=%f mode=%f\n", FilterClass::srate, *params[Metadata::par_cutoff], *params[Metadata::par_resonance], *params[Metadata::par_mode]); uint32_t ostate = 0; numsamples += offset; while(offset < numsamples) { uint32_t numnow = numsamples - offset; // if inertia's inactive, we can calculate the whole buffer at once if (inertia_cutoff.active() || inertia_resonance.active() || inertia_gain.active()) numnow = timer.get(numnow); if (outputs_mask & 1) { ostate |= FilterClass::process_channel(0, ins[0] + offset, outs[0] + offset, numnow, inputs_mask & 1); } if (outputs_mask & 2) { ostate |= FilterClass::process_channel(1, ins[1] + offset, outs[1] + offset, numnow, inputs_mask & 2); } if (timer.elapsed()) { on_timer(); } offset += numnow; } return ostate; } }; /// biquad filter module class filter_audio_module: public filter_module_with_inertia, public frequency_response_line_graph { mutable float old_cutoff, old_resonance, old_mode; public: filter_audio_module() : filter_module_with_inertia(ins, outs, params) { last_generation = 0; old_mode = old_resonance = old_cutoff = -1; } void params_changed() { inertia_cutoff.set_inertia(*params[par_cutoff]); inertia_resonance.set_inertia(*params[par_resonance]); inertia_filter_module::params_changed(); } bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Filterclavier --- MIDI controlled filter by Hans Baier class filterclavier_audio_module: public filter_module_with_inertia, public frequency_response_line_graph { using audio_module::ins; using audio_module::outs; using audio_module::params; const float min_gain; const float max_gain; int last_note; int last_velocity; public: filterclavier_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); void deactivate(); /// MIDI control virtual void note_on(int channel, int note, int vel); virtual void note_off(int channel, int note, int vel); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; private: void adjust_gain_according_to_filter_mode(int velocity); }; #define MATH_E 2.718281828 class mono_audio_module: public audio_module { typedef mono_audio_module AM; uint32_t srate; bool active; uint32_t clip_in, clip_outL, clip_outR; float meter_in, meter_outL, meter_outR; float * buffer; unsigned int pos; unsigned int buffer_size; void softclip(float &s) { int ph = s / fabs(s); s = s > 0.63 ? ((0.63 + 0.36) * ph * (1 - pow(MATH_E, (1.f / 3) * (0.63 + s * ph)))) : s; } public: mono_audio_module(); ~mono_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); void deactivate(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); }; class stereo_audio_module: public audio_module { typedef stereo_audio_module AM; float LL, LR, RL, RR; uint32_t srate; bool active; uint32_t clip_inL, clip_inR, clip_outL, clip_outR; float meter_inL, meter_inR, meter_outL, meter_outR, meter_phase; float * buffer; unsigned int pos; unsigned int buffer_size; void softclip(float &s) { int ph = s / fabs(s); s = s > 0.63 ? ((0.63 + 0.36) * ph * (1 - pow(MATH_E, (1.f / 3) * (0.63 + s * ph)))) : s; } public: stereo_audio_module(); ~stereo_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); void deactivate(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_comp.h000066400000000000000000000356031247673406200237500ustar00rootroot00000000000000/* Calf DSP plugin pack * Compression related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_MODULES_COMP_H #define CALF_MODULES_COMP_H #include #include #include "biquad.h" #include "inertia.h" #include "audio_fx.h" #include "giface.h" #include "loudness.h" #include "metadata.h" #include "plugin_tools.h" namespace calf_plugins { /// Not a true _audio_module style class, just pretends to be one! /// Main gain reduction routine by Thor called by various audio modules class gain_reduction_audio_module { private: float linSlope, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop; float compressedKneeStop, adjKneeStart, thres; float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_comp; mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_mute, old_detection, old_stereo_link; mutable volatile int last_generation; uint32_t srate; bool is_active; inline float output_level(float slope) const; inline float output_gain(float linSlope, bool rms) const; public: gain_reduction_audio_module(); void set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu); void update_curve(); void process(float &left, float &right, const float *det_left = NULL, const float *det_right = NULL); void activate(); void deactivate(); int id; void set_sample_rate(uint32_t sr); float get_output_level(); float get_comp_level(); bool get_graph(int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Not a true _audio_module style class, just pretends to be one! /// Main gate routine by Damien called by various audio modules class expander_audio_module { private: float linSlope, peak, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop, linKneeStop; float compressedKneeStop, adjKneeStart, range, thres, attack_coeff, release_coeff; float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_gate; mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_range, old_trigger, old_mute, old_detection, old_stereo_link; mutable volatile int last_generation; inline float output_level(float slope) const; inline float output_gain(float linSlope, bool rms) const; public: uint32_t srate; bool is_active; expander_audio_module(); void set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu, float ran); void update_curve(); void process(float &left, float &right, const float *det_left = NULL, const float *det_right = NULL); void activate(); void deactivate(); int id; void set_sample_rate(uint32_t sr); float get_output_level(); float get_expander_level(); bool get_graph(int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Compressor by Thor class compressor_audio_module: public audio_module, public line_graph_iface { private: typedef compressor_audio_module AM; stereo_in_out_metering meters; gain_reduction_audio_module compressor; public: typedef std::complex cfloat; uint32_t srate; bool is_active; mutable volatile int last_generation, last_calculated_generation; compressor_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Sidecain Compressor by Markus Schmidt (based on Thor's compressor and Krzysztof's filters) class sidechaincompressor_audio_module: public audio_module, public frequency_response_line_graph { private: typedef sidechaincompressor_audio_module AM; enum CalfScModes { WIDEBAND, DEESSER_WIDE, DEESSER_SPLIT, DERUMBLER_WIDE, DERUMBLER_SPLIT, WEIGHTED_1, WEIGHTED_2, WEIGHTED_3, BANDPASS_1, BANDPASS_2 }; enum CalfScRoute { STEREO, RIGHT_LEFT, LEFT_RIGHT }; mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old; mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1; CalfScModes sc_mode; mutable CalfScModes sc_mode_old, sc_mode_old1; float f1_active, f2_active; stereo_in_out_metering meters; gain_reduction_audio_module compressor; dsp::biquad_d2 f1L, f1R, f2L, f2R; public: typedef std::complex cfloat; uint32_t srate; bool is_active; mutable volatile int last_generation, last_calculated_generation; sidechaincompressor_audio_module(); void activate(); void deactivate(); void params_changed(); cfloat h_z(const cfloat &z) const; float freq_gain(int index, double freq, uint32_t sr) const; void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Multibandcompressor by Markus Schmidt (based on Thor's compressor and Krzysztof's filters) class multibandcompressor_audio_module: public audio_module, public line_graph_iface { private: typedef multibandcompressor_audio_module AM; static const int strips = 4; bool solo[strips]; bool no_solo; uint32_t clip_inL, clip_inR, clip_outL, clip_outR; float meter_inL, meter_inR, meter_outL, meter_outR; gain_reduction_audio_module strip[strips]; dsp::biquad_d2 lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3]; float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1]; int mode, mode_old; public: uint32_t srate; bool is_active; multibandcompressor_audio_module(); void activate(); void deactivate(); void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void set_sample_rate(uint32_t sr); const gain_reduction_audio_module *get_strip_by_param_index(int index) const; virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Deesser by Markus Schmidt (based on Thor's compressor and Krzyexpander_audio_modulesztof's filters) class deesser_audio_module: public audio_module, public frequency_response_line_graph { private: enum CalfDeessModes { WIDE, SPLIT }; mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old, f2_q_old; mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1, f2_q_old1; uint32_t detected_led; float detected, clip_out; uint32_t clip_led; gain_reduction_audio_module compressor; dsp::biquad_d2 hpL, hpR, lpL, lpR, pL, pR; public: uint32_t srate; bool is_active; mutable volatile int last_generation, last_calculated_generation; deesser_audio_module(); void activate(); void deactivate(); void params_changed(); float freq_gain(int index, double freq, uint32_t sr) const { return hpL.freq_gain(freq, sr) * pL.freq_gain(freq, sr); } void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Gate by Damien class gate_audio_module: public audio_module, public line_graph_iface { private: typedef gate_audio_module AM; stereo_in_out_metering meters; expander_audio_module gate; public: typedef std::complex cfloat; uint32_t srate; bool is_active; mutable volatile int last_generation, last_calculated_generation; gate_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Sidecain Gate by Markus Schmidt (based on Damiens's gate and Krzysztof's filters) class sidechaingate_audio_module: public audio_module, public frequency_response_line_graph { private: typedef sidechaingate_audio_module AM; enum CalfScModes { WIDEBAND, HIGHGATE_WIDE, HIGHGATE_SPLIT, LOWGATE_WIDE, LOWGATE_SPLIT, WEIGHTED_1, WEIGHTED_2, WEIGHTED_3, BANDPASS_1, BANDPASS_2 }; enum CalfScRoute { STEREO, RIGHT_LEFT, LEFT_RIGHT }; mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old; mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1; CalfScModes sc_mode; mutable CalfScModes sc_mode_old, sc_mode_old1; float f1_active, f2_active; stereo_in_out_metering meters; expander_audio_module gate; dsp::biquad_d2 f1L, f1R, f2L, f2R; public: typedef std::complex cfloat; uint32_t srate; bool is_active; mutable volatile int last_generation, last_calculated_generation; sidechaingate_audio_module(); void activate(); void deactivate(); void params_changed(); cfloat h_z(const cfloat &z) const; float freq_gain(int index, double freq, uint32_t sr) const; void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Multibandgate by Markus Schmidt (based on Damiens's gate and Krzysztof's filters) class multibandgate_audio_module: public audio_module, public line_graph_iface { private: typedef multibandgate_audio_module AM; static const int strips = 4; bool solo[strips]; bool no_solo; uint32_t clip_inL, clip_inR, clip_outL, clip_outR; float meter_inL, meter_inR, meter_outL, meter_outR; expander_audio_module gate[strips]; dsp::biquad_d2 lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3]; float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1]; int mode, mode_old; public: uint32_t srate; bool is_active; multibandgate_audio_module(); void activate(); void deactivate(); void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void set_sample_rate(uint32_t sr); const expander_audio_module *get_strip_by_param_index(int index) const; virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_dev.h000066400000000000000000000074521247673406200235710ustar00rootroot00000000000000/* Calf DSP Library * Prototype audio modules * * Copyright (C) 2008 Thor Harald Johansen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_MODULES_DEV_H #define __CALF_MODULES_DEV_H #include #if ENABLE_EXPERIMENTAL #include #endif namespace calf_plugins { #if ENABLE_EXPERIMENTAL /// Tiny wrapper for fluidsynth class fluidsynth_audio_module: public audio_module { protected: /// Current sample rate uint32_t srate; /// FluidSynth Settings object fluid_settings_t *settings; /// FluidSynth Synth object fluid_synth_t *synth; /// Soundfont filename std::string soundfont; /// Soundfont filename (as received from Fluidsynth) std::string soundfont_name; /// TAB-separated preset list (preset+128*bank TAB preset name LF) std::string soundfont_preset_list; /// FluidSynth assigned SoundFont ID int sfid; /// Map of preset+128*bank to preset name std::map sf_preset_names; /// Last selected preset+128*bank uint32_t last_selected_preset; /// Serial number of status data int status_serial; /// Preset number to set on next process() call volatile int set_preset; /// Update last_selected_preset based on synth object state void update_preset_num(); /// Create a fluidsynth object and load the current soundfont fluid_synth_t *create_synth(int &new_sfid); public: /// Constructor to initialize handles to NULL fluidsynth_audio_module(); void post_instantiate(); void set_sample_rate(uint32_t sr) { srate = sr; } /// Handle MIDI Note On message (by sending it to fluidsynth) void note_on(int channel, int note, int vel); /// Handle MIDI Note Off message (by sending it to fluidsynth) void note_off(int channel, int note, int vel); /// Handle pitch bend message. inline void pitch_bend(int channel, int value) { fluid_synth_pitch_bend(synth, 0, value + 0x2000); } /// Handle control change messages. void control_change(int channel, int controller, int value); /// Handle program change messages. void program_change(int channel, int program); /// Update variables from control ports. void params_changed() { } void activate(); void deactivate(); /// No CV inputs for now bool is_cv(int param_no) { return false; } /// Practically all the stuff here is noisy... for now bool is_noisy(int param_no) { return true; } /// Main processing function uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); /// DSSI-style configure function for handling string port data char *configure(const char *key, const char *value); void send_configures(send_configure_iface *sci); int send_status_updates(send_updates_iface *sui, int last_serial); uint32_t message_run(const void *valid_inputs, void *output_ports) { // silence a default printf (which is kind of a warning about unhandled message_run) return 0; } ~fluidsynth_audio_module(); }; #endif }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_dist.h000066400000000000000000000064731247673406200237600ustar00rootroot00000000000000/* Calf DSP plugin pack * Distortion related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_MODULES_DIST_H #define CALF_MODULES_DIST_H #include #include #include "biquad.h" #include "inertia.h" #include "audio_fx.h" #include "giface.h" #include "metadata.h" #include "plugin_tools.h" namespace calf_plugins { /// Saturator by Markus Schmidt (based on Krzysztof's filters and Tom's distortion algorythm) class saturator_audio_module: public audio_module { private: float hp_pre_freq_old, lp_pre_freq_old; float hp_post_freq_old, lp_post_freq_old; float p_level_old, p_freq_old, p_q_old; stereo_in_out_metering meters; float meter_drive; dsp::biquad_d2 lp[2][4], hp[2][4]; dsp::biquad_d2 p[2]; dsp::tap_distortion dist[2]; public: uint32_t srate; bool is_active; saturator_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); }; /// Exciter by Markus Schmidt (based on Krzysztof's filters and Tom's distortion algorythm) class exciter_audio_module: public audio_module { private: float freq_old, ceil_old; bool ceil_active_old; stereo_in_out_metering meters; float meter_drive; dsp::biquad_d2 hp[2][4]; dsp::biquad_d2 lp[2][2]; dsp::tap_distortion dist[2]; public: uint32_t srate; bool is_active; exciter_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); }; /// Bass Enhancer by Markus Schmidt (based on Krzysztof's filters and Tom's distortion algorythm) class bassenhancer_audio_module: public audio_module { private: float freq_old, floor_old; bool floor_active_old; stereo_in_out_metering meters; float meter_drive; dsp::biquad_d2 lp[2][4]; dsp::biquad_d2 hp[2][2]; dsp::tap_distortion dist[2]; public: uint32_t srate; bool is_active; bassenhancer_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_eq.h000066400000000000000000000066731247673406200234240ustar00rootroot00000000000000/* Calf DSP plugin pack * Equalization related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_MODULES_EQ_H #define CALF_MODULES_EQ_H #include #include #include "biquad.h" #include "inertia.h" #include "audio_fx.h" #include "giface.h" #include "metadata.h" #include "plugin_tools.h" namespace calf_plugins { /// Equalizer N Band by Markus Schmidt (based on Krzysztof's filters) template class equalizerNband_audio_module: public audio_module, public frequency_response_line_graph { public: typedef audio_module AM; using AM::ins; using AM::outs; using AM::params; using AM::in_count; using AM::out_count; using AM::param_count; using AM::PeakBands; private: enum { graph_param_count = BaseClass::last_graph_param - BaseClass::first_graph_param + 1, params_per_band = AM::param_p2_active - AM::param_p1_active }; float hp_mode_old, hp_freq_old; float lp_mode_old, lp_freq_old; float ls_level_old, ls_freq_old; float hs_level_old, hs_freq_old; float p_level_old[PeakBands], p_freq_old[PeakBands], p_q_old[PeakBands]; mutable float old_params_for_graph[graph_param_count]; dual_in_out_metering meters; CalfEqMode hp_mode, lp_mode; dsp::biquad_d2 hp[3][2], lp[3][2]; dsp::biquad_d2 lsL, lsR, hsL, hsR; dsp::biquad_d2 pL[PeakBands], pR[PeakBands]; inline void process_hplp(float &left, float &right); public: typedef std::complex cfloat; uint32_t srate; bool is_active; mutable volatile int last_generation, last_calculated_generation; equalizerNband_audio_module(); void activate(); void deactivate(); void params_changed(); float freq_gain(int index, double freq, uint32_t sr) const; void set_sample_rate(uint32_t sr) { srate = sr; meters.set_sample_rate(sr); } uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; typedef equalizerNband_audio_module equalizer5band_audio_module; typedef equalizerNband_audio_module equalizer8band_audio_module; typedef equalizerNband_audio_module equalizer12band_audio_module; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_limit.h000066400000000000000000000065741247673406200241350ustar00rootroot00000000000000/* Calf DSP plugin pack * Limiter related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_MODULES_LIMIT_H #define CALF_MODULES_LIMIT_H #include #include #include "biquad.h" #include "inertia.h" #include "audio_fx.h" #include "giface.h" #include "metadata.h" #include "plugin_tools.h" namespace calf_plugins { /// Limiter by Markus Schmidt and Christian Holschuh class limiter_audio_module: public audio_module, public line_graph_iface { private: typedef limiter_audio_module AM; uint32_t clip_inL, clip_inR, clip_outL, clip_outR, asc_led; int mode, mode_old; float meter_inL, meter_inR, meter_outL, meter_outR; dsp::lookahead_limiter limiter; public: uint32_t srate; bool is_active; float limit_old; bool asc_old; float attack_old; limiter_audio_module(); void activate(); void deactivate(); void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void set_sample_rate(uint32_t sr); }; /// Multiband Limiter by Markus Schmidt and Christian Holschuh class multibandlimiter_audio_module: public audio_module, public line_graph_iface { private: typedef multibandlimiter_audio_module AM; static const int strips = 4; uint32_t clip_inL, clip_inR, clip_outL, clip_outR, asc_led; int mode, mode_old; bool solo[strips]; bool no_solo; float meter_inL, meter_inR, meter_outL, meter_outR; dsp::lookahead_limiter strip[strips]; dsp::lookahead_limiter broadband; dsp::biquad_d2 lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3]; float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1]; unsigned int pos; unsigned int buffer_size; unsigned int overall_buffer_size; float *buffer; int channels; float striprel[strips]; float weight[strips]; float weight_old[strips]; float limit_old; bool asc_old; float attack_old; bool _sanitize; public: uint32_t srate; bool is_active; multibandlimiter_audio_module(); ~multibandlimiter_audio_module(); void activate(); void deactivate(); void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void set_sample_rate(uint32_t sr); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_mod.h000066400000000000000000000160651247673406200235720ustar00rootroot00000000000000/* Calf DSP plugin pack * Modulation effect plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_MODULES_MOD_H #define CALF_MODULES_MOD_H #include #include #include "biquad.h" #include "inertia.h" #include "audio_fx.h" #include "giface.h" #include "metadata.h" #include "multichorus.h" namespace calf_plugins { class flanger_audio_module: public audio_module, public frequency_response_line_graph { public: dsp::simple_flanger left, right; uint32_t srate; bool clear_reset; float last_r_phase; bool is_active; public: flanger_audio_module() { is_active = false; } void set_sample_rate(uint32_t sr); void params_changed(); void params_reset(); void activate(); void deactivate(); uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { left.process(outs[0] + offset, ins[0] + offset, nsamples); right.process(outs[1] + offset, ins[1] + offset, nsamples); return outputs_mask; // XXXKF allow some delay after input going blank } bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; float freq_gain(int subindex, float freq, float srate) const; }; class phaser_audio_module: public audio_module, public frequency_response_line_graph { public: enum { MaxStages = 12 }; uint32_t srate; bool clear_reset; float last_r_phase; dsp::simple_phaser left, right; float x1vals[2][MaxStages], y1vals[2][MaxStages]; bool is_active; public: phaser_audio_module(); void params_changed(); void params_reset(); void activate(); void set_sample_rate(uint32_t sr); void deactivate(); uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { left.process(outs[0] + offset, ins[0] + offset, nsamples); right.process(outs[1] + offset, ins[1] + offset, nsamples); return outputs_mask; // XXXKF allow some delay after input going blank } bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; float freq_gain(int subindex, float freq, float srate) const; }; class rotary_speaker_audio_module: public audio_module { public: /// Current phases and phase deltas for bass and treble rotors uint32_t phase_l, dphase_l, phase_h, dphase_h; dsp::simple_delay<1024, float> delay; dsp::biquad_d2 crossover1l, crossover1r, crossover2l, crossover2r, damper1l, damper1r; dsp::simple_delay<8, float> phaseshift; uint32_t srate; int vibrato_mode; /// Current CC1 (Modulation) value, normalized to [0, 1] float mwhl_value; /// Current CC64 (Hold) value, normalized to [0, 1] float hold_value; /// Current rotation speed for bass rotor - automatic mode float aspeed_l; /// Current rotation speed for treble rotor - automatic mode float aspeed_h; /// Desired speed (0=slow, 1=fast) - automatic mode float dspeed; /// Current rotation speed for bass rotor - manual mode float maspeed_l; /// Current rotation speed for treble rotor - manual mode float maspeed_h; int meter_l, meter_h; rotary_speaker_audio_module(); void set_sample_rate(uint32_t sr); void setup(); void activate(); void deactivate(); void params_changed(); void set_vibrato(); /// Convert RPM speed to delta-phase uint32_t rpm2dphase(float rpm); /// Set delta-phase variables based on current calculated (and interpolated) RPM speed void update_speed(); void update_speed_manual(float delta); /// Increase or decrease aspeed towards raspeed, with required negative and positive rate bool incr_towards(float &aspeed, float raspeed, float delta_decc, float delta_acc); uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); virtual void control_change(int channel, int ctl, int val); }; /// A multitap stereo chorus thing class multichorus_audio_module: public audio_module, public frequency_response_line_graph { public: uint32_t srate; dsp::multichorus, dsp::filter_sum, dsp::biquad_d2<> >, 4096> left, right; float last_r_phase; float cutoff; bool is_active; public: multichorus_audio_module(); void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void activate(); void deactivate(); void set_sample_rate(uint32_t sr); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; float freq_gain(int subindex, float freq, float srate) const; bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; }; /// Pulsator by Markus Schmidt class pulsator_audio_module: public audio_module, public frequency_response_line_graph { private: typedef pulsator_audio_module AM; uint32_t clip_inL, clip_inR, clip_outL, clip_outR; float meter_inL, meter_inR, meter_outL, meter_outR; float offset_old; int mode_old; bool clear_reset; dsp::simple_lfo lfoL, lfoR; public: uint32_t srate; bool is_active; pulsator_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); void params_reset() { if (clear_reset) { *params[param_reset] = 0.f; clear_reset = false; } } uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_synths.h000066400000000000000000000171771247673406200243500ustar00rootroot00000000000000/* Calf DSP Library * Audio modules - synthesizers * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_MODULES_SYNTHS_H #define __CALF_MODULES_SYNTHS_H #include "biquad.h" #include "onepole.h" #include "audio_fx.h" #include "inertia.h" #include "osc.h" #include "synth.h" #include "envelope.h" #include "modmatrix.h" #include "metadata.h" namespace calf_plugins { #define MONOSYNTH_WAVE_BITS 12 /// Monosynth-in-making. Parameters may change at any point, so don't make songs with it! /// It lacks inertia for parameters, even for those that really need it. class monosynth_audio_module: public audio_module, public line_graph_iface, public mod_matrix_impl { public: uint32_t srate, crate; static dsp::waveform_family *waves; dsp::waveform_oscillator osc1, osc2; dsp::triangle_lfo lfo1, lfo2; dsp::biquad_d1_lerp filter, filter2; /// The step code is producing non-zero values bool running; /// This is the last non-zero buffer (set on calculate_step after fadeout is complete, the next calculate_step will zero running) bool stopping; /// A key is kept pressed bool gate; /// All notes off fadeout bool force_fadeout; /// Last triggered note int last_key; /// Output buffers, used to ensure updates are done every step_size regardless of process buffer size float buffer[step_size], buffer2[step_size]; /// Read position within the buffers, on each '0' the buffers are being filled with new data by calculate_step uint32_t output_pos; /// Waveform number - OSC1 int wave1; /// Waveform number - OSC2 int wave2; /// Last used waveform number - OSC1 int prev_wave1; /// Last used waveform number - OSC2 int prev_wave2; /// Filter type int filter_type; /// Filter type on the last calculate_step int last_filter_type; float freq, start_freq, target_freq, cutoff, fgain, fgain_delta, separation; float detune, xpose, xfade, ampctl, fltctl; float odcr, porta_time, lfo_bend; /// Modulation wheel position (0.f-1.f) float modwheel_value; /// Delay counter for LFOs float lfo_clock; /// Last value of phase shift for pulse width emulation for OSC1 int32_t last_pwshift1; /// Last value of phase shift for pulse width emulation for OSC2 int32_t last_pwshift2; /// Last value of stretch for osc sync emulation for OSC1 int32_t last_stretch1; /// Next note to play on the next calculate_step int queue_note_on; /// Whether the queued note has been already released bool queue_note_on_and_off; /// Velocity of the next note to play float queue_vel; /// Integer value for modwheel (0-16383, read from CC1 - MSBs and CC33 - LSBs) int modwheel_value_int; /// Legato mode (bitmask) int legato; /// Envelope Generators dsp::adsr envelope1, envelope2; dsp::keystack stack; /// Smoothing for master volume dsp::gain_smoothing master; /// Fadeout for buffer 1 dsp::fadeout fadeout; /// Fadeout for buffer 2 dsp::fadeout fadeout2; /// Smoothed cutoff value dsp::inertia inertia_cutoff; /// Smoothed pitch bend value dsp::inertia inertia_pitchbend; /// Smoothed channel pressure value dsp::inertia inertia_pressure; /// Rows of the modulation matrix dsp::modulation_entry mod_matrix_data[mod_matrix_slots]; /// Currently used velocity float velocity; /// Last value of oscillator mix ratio float last_xfade; /// Current calculated mod matrix outputs float moddest[moddest_count]; monosynth_audio_module(); static void precalculate_waves(progress_report_iface *reporter); void set_sample_rate(uint32_t sr); void delayed_note_on(); /// Release a note (physically), called from note-off handler or when note-off has been scheduled after note-on (very short queued note) void end_note(); /// Handle MIDI Note On message (does not immediately trigger a note, as it must start on /// boundary of step_size samples). void note_on(int channel, int note, int vel); /// Handle MIDI Note Off message void note_off(int channel, int note, int vel); /// Handle MIDI Channel Pressure void channel_pressure(int channel, int value); /// Handle pitch bend message. inline void pitch_bend(int /*channel*/, int value) { inertia_pitchbend.set_inertia(pow(2.0, (value * *params[par_pwhlrange]) / (1200.0 * 8192.0))); } /// Update oscillator frequency based on base frequency, detune amount, pitch bend scaling factor and sample rate. void set_frequency(); /// Handle control change messages. void control_change(int channel, int controller, int value); /// Update variables from control ports. void params_changed(); void activate(); void deactivate(); void post_instantiate() { precalculate_waves(progress_report); } /// Set waveform addresses for oscillators void lookup_waveforms(); /// Run oscillators void calculate_buffer_oscs(float lfo); /// Run two filters in series to produce mono output samples. void calculate_buffer_ser(); /// Run one filter to produce mono output samples. void calculate_buffer_single(); /// Run two filters (one per channel) to produce stereo output samples. void calculate_buffer_stereo(); /// Retrieve filter graph (which is 'live' so it cannot be generated by get_static_graph), or fall back to get_static_graph. bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; /// @retval true if the filter 1 is to be used for the left channel and filter 2 for the right channel /// @retval false if filters are to be connected in series and sent (mono) to both channels inline bool is_stereo_filter() const { return filter_type == flt_2lp12 || filter_type == flt_2bp6; } /// No CV inputs for now bool is_cv(int param_no) const { return false; } /// Practically all the stuff here is noisy bool is_noisy(int param_no) const { return param_no != par_cutoff; } /// Calculate control signals and produce step_size samples of output. void calculate_step(); /// Apply anti-click'n'pop fadeout (used at the end of the sound) void apply_fadeout(); /// Main processing function uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); /// Send all configure variables set within a plugin to given destination (which may be limited to only those that plugin understands) virtual void send_configures(send_configure_iface *sci) { return mod_matrix_impl::send_configures(sci); } virtual char *configure(const char *key, const char *value) { return mod_matrix_impl::configure(key, value); } }; }; #if ENABLE_EXPERIMENTAL #include "wavetable.h" #endif #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/multichorus.h000066400000000000000000000173331247673406200236400ustar00rootroot00000000000000/* Calf DSP Library * Multitap chorus class. * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_MULTICHORUS_H #define __CALF_MULTICHORUS_H #include "audio_fx.h" namespace dsp { typedef fixed_point chorus_phase; template class sine_multi_lfo { protected: sine_table sine; public: /// Current LFO phase chorus_phase phase; /// LFO phase increment chorus_phase dphase; /// LFO phase per-voice increment chorus_phase vphase; /// Current number of voices uint32_t voices; /// Current scale (output multiplier) T scale; /// Per-voice offset unit (the value that says how much the voices are offset with respect to each other in non-100% 'overlap' mode), scaled so that full range = 131072 int32_t voice_offset; /// LFO Range scaling for non-100% overlap uint32_t voice_depth; public: sine_multi_lfo() { phase = dphase = vphase = 0.0; voice_offset = 0; voice_depth = 1U << 31; set_voices(Voices); } inline uint32_t get_voices() const { return voices; } inline void set_voices(uint32_t value) { voices = value; // use sqrt, because some phases will cancel each other - so 1 / N is usually too low scale = sqrt(1.0 / voices); } inline void set_overlap(float overlap) { // If we scale the delay amount so that full range of a single LFO is 0..1, all the overlapped LFOs will cover 0..range // How it's calculated: // 1. First voice is assumed to always cover the range of 0..1 // 2. Each remaining voice contributes an interval of a width = 1 - overlap, starting from the end of the interval of the previous voice // Coverage = non-overlapped part of the LFO range in the 1st voice float range = 1.f + (1.f - overlap) * (voices - 1); float scaling = 1.f / range; voice_offset = (int)(131072 * (1 - overlap) / range); voice_depth = (unsigned int)((1U << 30) * 1.0 * scaling); } /// Get LFO value for given voice, returns a values in range of [-65536, 65535] (or close) inline int get_value(uint32_t voice) const { // find this voice's phase (= phase + voice * 360 degrees / number of voices) chorus_phase voice_phase = phase + vphase * (int)voice; // find table offset unsigned int ipart = voice_phase.ipart(); // interpolate (use 14 bits of precision - because the table itself uses 17 bits and the result of multiplication must fit in int32_t) // note, the result is still -65535 .. 65535, it's just interpolated // it is never reaching -65536 - but that's acceptable int intval = voice_phase.lerp_by_fract_int(sine.data[ipart], sine.data[ipart+1]); // apply the voice offset/depth (rescale from -65535..65535 to appropriate voice's "band") return -65535 + voice * voice_offset + ((voice_depth >> (30-13)) * (65536 + intval) >> 13); } inline void step() { phase += dphase; } inline T get_scale() const { return scale; } void reset() { phase = 0.f; } }; /** * Multi-tap chorus without feedback. * Perhaps MaxDelay should be a bit longer! */ template class multichorus: public chorus_base { protected: simple_delay delay; public: MultiLfo lfo; Postprocessor post; public: multichorus() { rate = 0.63f; dry = 0.5f; wet = 0.5f; min_delay = 0.005f; mod_depth = 0.0025f; setup(44100); } void reset() { delay.reset(); lfo.reset(); } void set_rate(float rate) { chorus_base::set_rate(rate); lfo.dphase = dphase; } virtual void setup(int sample_rate) { modulation_effect::setup(sample_rate); delay.reset(); lfo.reset(); set_min_delay(get_min_delay()); set_mod_depth(get_mod_depth()); } template void process(OutIter buf_out, InIter buf_in, int nsamples) { int mds = min_delay_samples + mod_depth_samples * 1024 + 2*65536; int mdepth = mod_depth_samples; // 1 sample peak-to-peak = mod_depth_samples of 32 (this scaling stuff is tricky and may - but shouldn't - be wrong) // with 192 kHz sample rate, 1 ms = 192 samples, and the maximum 20 ms = 3840 samples (so, 4096 will be used) // 3840 samples of mod depth = mdepth of 122880 (which multiplied by 65536 doesn't fit in int32_t) // so, it will be right-shifted by 2, which gives it a safe range of 30720 // NB: calculation of mod_depth_samples (and multiply-by-32) is in chorus_base::set_mod_depth mdepth = mdepth >> 2; T scale = lfo.get_scale(); for (int i=0; i> 2) + 1 because the LFO value is in range of [-65535, 65535] (17 bits) int dv = mds + (mdepth * lfo_output >> (3 + 1)); int ifv = dv >> 16; T fd; // signal from delay's output delay.get_interp(fd, ifv, (dv & 0xFFFF)*(1.0/65536.0)); out += fd; } // apply the post filter out = post.process(out); T sdry = in * gs_dry.get(); T swet = out * gs_wet.get() * scale; *buf_out++ = sdry + swet; lfo.step(); } post.sanitize(); } float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); // z^-1 cfloat h = 0.0; int mds = min_delay_samples + mod_depth_samples * 1024 + 2*65536; int mdepth = mod_depth_samples; mdepth = mdepth >> 2; T scale = lfo.get_scale(); unsigned int nvoices = lfo.get_voices(); for (unsigned int v = 0; v < nvoices; v++) { int lfo_output = lfo.get_value(v); // 3 = log2(32 >> 2) + 1 because the LFO value is in range of [-65535, 65535] (17 bits) int dv = mds + (mdepth * lfo_output >> (3 + 1)); int fldp = dv >> 16; cfloat zn = std::pow(z, fldp); // z^-N h += zn + (zn * z - zn) * cfloat(dv / 65536.0 - fldp); } // apply the post filter h *= post.h_z(z); // mix with dry signal float v = std::abs(cfloat(gs_dry.get_last()) + cfloat(scale * gs_wet.get_last()) * h); return v; } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/onepole.h000066400000000000000000000112661247673406200227220ustar00rootroot00000000000000/* Calf DSP Library * Basic one-pole one-zero filters based on bilinear transform. * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_ONEPOLE_H #define __CALF_ONEPOLE_H #include "primitives.h" namespace dsp { /** * one-pole filter, for floating point values * coefficient calculation is based on bilinear transform, and the code itself is based on my very old OneSignal lib * lp and hp are *somewhat* tested, allpass is not tested at all * don't use this for integers because it won't work */ template class onepole { public: typedef std::complex cfloat; T x1, y1; Coeff a0, a1, b1; onepole() { reset(); } /// Set coefficients for a lowpass filter void set_lp(float fc, float sr) { // x x // x+1 x-1 Coeff x = tan (M_PI * fc / (2 * sr)); Coeff q = 1/(1+x); a0 = a1 = x*q; b1 = (x-1)*q; } /// Set coefficients for an allpass filter void set_ap(float fc, float sr) { // x-1 x+1 // x+1 x-1 Coeff x = tan (M_PI * fc / (2 * sr)); Coeff q = 1/(1+x); b1 = a0 = (x-1)*q; a1 = 1; } /// Set coefficients for an allpass filter, using omega instead of fc and sr /// omega = (PI / 2) * fc / sr void set_ap_w(float w) { // x-1 x+1 // x+1 x-1 Coeff x = tan (w); Coeff q = 1/(1+x); b1 = a0 = (x-1)*q; a1 = 1; } /// Set coefficients for a highpass filter void set_hp(float fc, float sr) { // x -x // x+1 x-1 Coeff x = tan (M_PI * fc / (2 * sr)); Coeff q = 1/(1+x); a0 = q; a1 = -a0; b1 = (x-1)*q; } /// Process one sample inline T process(T in) { T out = in * a0 + x1 * a1 - y1 * b1; x1 = in; y1 = out; return out; } /// Process one sample, assuming it's a lowpass filter (optimized special case) inline T process_lp(T in) { T out = (in + x1) * a0 - y1 * b1; x1 = in; y1 = out; return out; } /// Process one sample, assuming it's a highpass filter (optimized special case) inline T process_hp(T in) { T out = (in - x1) * a0 - y1 * b1; x1 = in; y1 = out; return out; } /// Process one sample, assuming it's an allpass filter (optimized special case) inline T process_ap(T in) { T out = (in - y1) * a0 + x1; x1 = in; y1 = out; return out; } /// Process one sample using external state variables inline T process_ap(T in, float &x1, float &y1) { T out = (in - y1) * a0 + x1; x1 = in; y1 = out; return out; } /// Process one sample using external state variables, including filter coeff inline T process_ap(T in, float &x1, float &y1, float a0) { T out = (in - y1) * a0 + x1; x1 = in; y1 = out; return out; } inline bool empty() const { return y1 == 0; } inline void sanitize() { dsp::sanitize(x1); dsp::sanitize(y1); } inline void reset() { dsp::zero(x1); dsp::zero(y1); } template inline void copy_coeffs(const onepole &src) { a0 = src.a0; a1 = src.a1; b1 = src.b1; } /// Return the filter's gain at frequency freq /// @param freq Frequency to look up /// @param sr Filter sample rate (used to convert frequency to angular frequency) float freq_gain(float freq, float sr) const { freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); return std::abs(h_z(z)); } /// Return H(z) the filter's gain at frequency freq /// @param z Z variable (e^jw) cfloat h_z(const cfloat &z) const { return (cfloat(a0) + double(a1) * z) / (cfloat(1.0) + double(b1) * z); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/organ.h000066400000000000000000000264601247673406200223710ustar00rootroot00000000000000/* Calf DSP Library * Drawbar organ emulator. * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_ORGAN_H #define __CALF_ORGAN_H #include "audio_fx.h" #include "envelope.h" #include "metadata.h" #include "osc.h" #include "synth.h" #define ORGAN_KEYTRACK_POINTS 4 namespace dsp { struct organ_parameters { enum { FilterCount = 2, EnvCount = 3 }; struct organ_filter_parameters { float cutoff; float resonance; float envmod[organ_parameters::EnvCount]; float keyf; }; struct organ_env_parameters { float attack, decay, sustain, release, velscale, ampctl; }; ////////////////////////////////////////////////////////////////////////// // these parameters are binary-copied from control ports (order is important!) float drawbars[9]; float harmonics[9]; float waveforms[9]; float detune[9]; float phase[9]; float pan[9]; float routing[9]; float foldover; float percussion_time; float percussion_level; float percussion_wave; float percussion_harmonic; float percussion_vel2amp; float percussion_fm_time; float percussion_fm_depth; float percussion_fm_wave; float percussion_fm_harmonic; float percussion_vel2fm; float percussion_trigger; float percussion_stereo; float filter_chain; float filter1_type; float master; organ_filter_parameters filters[organ_parameters::FilterCount]; organ_env_parameters envs[organ_parameters::EnvCount]; float lfo_rate; float lfo_amt; float lfo_wet; float lfo_phase; float lfo_mode; float lfo_type; float global_transpose; float global_detune; float polyphony; float quad_env; float pitch_bend_range; float bass_freq; float bass_gain; float treble_freq; float treble_gain; float dummy_mapcurve; ////////////////////////////////////////////////////////////////////////// // these parameters are calculated double perc_decay_const, perc_fm_decay_const; float multiplier[9]; int phaseshift[9]; float cutoff; unsigned int foldvalue; float pitch_bend; float percussion_keytrack[ORGAN_KEYTRACK_POINTS][2]; organ_parameters() : pitch_bend(1.0f) {} inline int get_percussion_wave() { return dsp::fastf2i_drm(percussion_wave); } inline int get_percussion_fm_wave() { return dsp::fastf2i_drm(percussion_fm_wave); } }; #define ORGAN_WAVE_BITS 12 #define ORGAN_WAVE_SIZE 4096 #define ORGAN_BIG_WAVE_BITS 17 #define ORGAN_BIG_WAVE_SIZE 131072 /// 2^ORGAN_BIG_WAVE_SHIFT = how many (quasi)periods per sample #define ORGAN_BIG_WAVE_SHIFT 5 class organ_voice_base: public calf_plugins::organ_enums { public: typedef waveform_family small_wave_family; typedef waveform_family big_wave_family; public: organ_parameters *parameters; protected: static small_wave_family (*waves)[wave_count_small]; static big_wave_family (*big_waves)[wave_count_big]; int note; dsp::decay amp; /// percussion FM carrier amplitude envelope dsp::decay pamp; /// percussion FM modulator amplitude envelope dsp::decay fm_amp; dsp::fixed_point pphase, dpphase; dsp::fixed_point modphase, moddphase; float fm_keytrack; int &sample_rate_ref; bool &released_ref; /// pamp per-sample (linear) step during release stage (calculated on release so that it will take 30ms for it to go from "current value at release point" to 0) float rel_age_const; organ_voice_base(organ_parameters *_parameters, int &_sample_rate_ref, bool &_released_ref); inline float wave(float *data, dsp::fixed_point ph) { return ph.lerp_table_lookup_float(data); } inline float big_wave(float *data, dsp::fixed_point &ph) { // wrap to fit within the wave return ph.lerp_table_lookup_float_mask(data, ORGAN_BIG_WAVE_SIZE - 1); } public: static inline small_wave_family &get_wave(int wave) { return (*waves)[wave]; } static inline big_wave_family &get_big_wave(int wave) { return (*big_waves)[wave]; } static void precalculate_waves(calf_plugins::progress_report_iface *reporter); void update_pitch(); // this doesn't really have a voice interface void render_percussion_to(float (*buf)[2], int nsamples); void perc_note_on(int note, int vel); void perc_note_off(int note, int vel); void perc_reset(); }; /// A simple (and bad) simulation of scanner vibrato based on a series of modulated allpass filters class organ_vibrato { protected: enum { VibratoSize = 6 }; float vibrato_x1[VibratoSize][2], vibrato_y1[VibratoSize][2]; float lfo_phase; dsp::onepole vibrato[2]; public: void reset(); void process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate); }; /// A more sophisticated simulation of scanner vibrato. Simulates a line box /// and an interpolating scanner. The line box is a series of 18 2nd order /// lowpass filters with cutoff frequency ~4kHz, with loss compensation. /// The interpolating scanner uses linear interpolation to "slide" between /// selected outputs of the line box. /// /// @note /// This is a true CPU hog, and it should be optimised some day. /// @note /// The line box is mono. 36 lowpass filters might be an overkill. /// @note /// See also: http://www.jhaible.de/interpolating_scanner_and_scanvib/jh_interpolating_scanner_and_scanvib.html /// (though it's a very loose adaptation of that version) class scanner_vibrato { protected: enum { ScannerSize = 18 }; float lfo_phase; dsp::biquad_d2 scanner[ScannerSize]; organ_vibrato legacy; public: void reset(); void process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate); }; class organ_voice: public dsp::voice, public organ_voice_base { protected: enum { Channels = 2, BlockSize = 64, EnvCount = organ_parameters::EnvCount, FilterCount = organ_parameters::FilterCount }; union { float output_buffer[BlockSize][Channels]; float aux_buffers[3][BlockSize][Channels]; }; dsp::fixed_point phase, dphase; dsp::biquad_d1 filterL[2], filterR[2]; adsr envs[EnvCount]; dsp::inertia expression; scanner_vibrato vibrato; float velocity; bool perc_released; /// The envelopes have ended and the voice is in final fadeout stage bool finishing; dsp::inertia inertia_pitchbend; public: organ_voice() : organ_voice_base(NULL, sample_rate, perc_released) , expression(dsp::linear_ramp(16)) , inertia_pitchbend(dsp::exponential_ramp(1)) { inertia_pitchbend.set_now(1); } void reset(); void note_on(int note, int vel); void note_off(int /* vel */); virtual float get_priority() { return stolen ? 20000 : (perc_released ? 1 : (sostenuto ? 200 : 100)); } virtual void steal(); void render_block(); virtual int get_current_note() { return note; } virtual bool get_active() { // printf("note %d getactive %d use_percussion %d pamp active %d\n", note, amp.get_active(), use_percussion(), pamp.get_active()); return (note != -1) && (amp.get_active() || (use_percussion() && pamp.get_active())); } void update_pitch(); inline bool use_percussion() { return dsp::fastf2i_drm(parameters->percussion_trigger) == perctrig_polyphonic && parameters->percussion_level > 0; } }; /// Not a true voice, just something with similar-ish interface. class percussion_voice: public organ_voice_base { public: int sample_rate; bool released; percussion_voice(organ_parameters *_parameters) : organ_voice_base(_parameters, sample_rate, released) , released(false) { } bool get_active() { return (note != -1) && pamp.get_active(); } bool get_noticable() { return (note != -1) && (pamp.get() > 0.2 * parameters->percussion_level); } void setup(int sr) { sample_rate = sr; } }; struct drawbar_organ: public dsp::basic_synth, public calf_plugins::organ_enums { organ_parameters *parameters; percussion_voice percussion; scanner_vibrato global_vibrato; two_band_eq eq_l, eq_r; drawbar_organ(organ_parameters *_parameters) : parameters(_parameters) , percussion(_parameters) { } void render_separate(float *output[], int nsamples); dsp::voice *alloc_voice(); virtual void percussion_note_on(int note, int vel); virtual void params_changed() = 0; virtual void setup(int sr); void update_params(); void control_change(int controller, int value) { dsp::basic_synth::control_change(controller, value); } void pitch_bend(int amt); virtual bool check_percussion(); }; }; namespace calf_plugins { struct organ_audio_module: public audio_module, public dsp::drawbar_organ, public line_graph_iface { public: using drawbar_organ::note_on; using drawbar_organ::note_off; using drawbar_organ::control_change; enum { param_count = drawbar_organ::param_count}; dsp::organ_parameters par_values; uint32_t srate; bool panic_flag; /// Value for configure variable map_curve std::string var_map_curve; organ_audio_module(); void post_instantiate(); void set_sample_rate(uint32_t sr) { srate = sr; } void params_changed(); void activate(); void deactivate(); uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask); /// No CV inputs for now bool is_cv(int param_no) { return false; } /// Practically all the stuff here is noisy bool is_noisy(int param_no) { return true; } void execute(int cmd_no); bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; char *configure(const char *key, const char *value); void send_configures(send_configure_iface *); uint32_t message_run(const void *valid_inputs, void *output_ports); public: // overrides virtual void note_on(int /*channel*/, int note, int velocity) { dsp::drawbar_organ::note_on(note, velocity); } virtual void note_off(int /*channel*/, int note, int velocity) { dsp::drawbar_organ::note_off(note, velocity); } virtual void control_change(int /*channel*/, int controller, int value) { dsp::drawbar_organ::control_change(controller, value); } virtual void pitch_bend(int /*channel*/, int value) { dsp::drawbar_organ::pitch_bend(value); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/osc.h000066400000000000000000000266361247673406200220540ustar00rootroot00000000000000/* Calf DSP Library * Oscillators * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_OSC_H #define CALF_OSC_H #include "fft.h" #include namespace dsp { /** Very simple, non-bandlimited saw oscillator. Should not be used for anything * else than testing/prototyping. Unless get() function is replaced with something * with "proper" oscillator code, as the frequency setting function is fine. */ struct simple_oscillator { /// Phase (from 0 to 0xFFFFFFFF) uint32_t phase; /// Per-sample phase delta (phase increment), equal to 2^32*freq/sr. uint32_t phasedelta; /// Reset oscillator phase to zero. void reset() { phase = 0; } /// Set phase delta based on oscillator frequency and sample rate. void set_freq(float freq, float sr) { phasedelta = (int)(freq * 65536.0 * 256.0 * 16.0 / sr) << 4; } /// Set phase delta based on oscillator frequency and inverse of sample rate. void set_freq_odsr(float freq, double odsr) { phasedelta = (int)(freq * 65536.0 * 256.0 * 16.0 * odsr) << 4; } inline float get() { float value = (phase >> 16 ) / 65535.0 - 0.5; phase += phasedelta; return value; } }; /** * FFT-based bandlimiting helper class. Allows conversion between time and frequency domains and generating brickwall filtered * versions of a waveform given a pre-computed spectrum. * Waveform size must be a power of two, and template argument SIZE_BITS is log2 of waveform size. */ template struct bandlimiter { enum { SIZE = 1 << SIZE_BITS }; static dsp::fft &get_fft() { static dsp::fft fft; return fft; } std::complex spectrum[SIZE]; /// Import time domain waveform and calculate spectrum from it void compute_spectrum(float input[SIZE]) { dsp::fft &fft = get_fft(); std::complex *data = new std::complex[SIZE]; for (int i = 0; i < SIZE; i++) data[i] = input[i]; fft.calculate(data, spectrum, false); delete []data; } /// Generate the waveform from the contained spectrum. void compute_waveform(float output[SIZE]) { dsp::fft &fft = get_fft(); std::complex *data = new std::complex[SIZE]; fft.calculate(spectrum, data, true); for (int i = 0; i < SIZE; i++) output[i] = data[i].real(); delete []data; } /// remove DC offset of the spectrum (it usually does more harm than good!) void remove_dc() { spectrum[0] = 0.f; } /// Very basic bandlimiting (brickwall filter) /// might need to be improved much in future! void make_waveform(float output[SIZE], int cutoff, bool foldover = false) { dsp::fft &fft = get_fft(); std::vector > new_spec, iffted; new_spec.resize(SIZE); iffted.resize(SIZE); // Copy original harmonics up to cutoff point new_spec[0] = spectrum[0]; for (int i = 1; i < cutoff; i++) new_spec[i] = spectrum[i], new_spec[SIZE - i] = spectrum[SIZE - i]; // Fill the rest with zeros, optionally folding over harmonics over the // cutoff point into the lower octaves while halving the amplitude. // (I think it is almost nice for bell type waveforms when the original // waveform has few widely spread harmonics) if (foldover) { std::complex fatt(0.5); cutoff /= 2; if (cutoff < 2) cutoff = 2; for (int i = SIZE / 2; i >= cutoff; i--) { new_spec[i / 2] += new_spec[i] * fatt; new_spec[SIZE - i / 2] += new_spec[SIZE - i] * fatt; new_spec[i] = 0.f, new_spec[SIZE - i] = 0.f; } } else { if (cutoff < 1) cutoff = 1; for (int i = cutoff; i < SIZE / 2; i++) new_spec[i] = 0.f, new_spec[SIZE - i] = 0.f; } // convert back to time domain (IFFT) and extract only real part fft.calculate(&new_spec.front(), &iffted.front(), true); for (int i = 0; i < SIZE; i++) output[i] = iffted[i].real(); } }; /// Set of bandlimited wavetables template struct waveform_family: public std::map { enum { SIZE = 1 << SIZE_BITS }; using std::map::iterator; using std::map::end; using std::map::lower_bound; float original[SIZE]; /// Fill the family using specified bandlimiter and original waveform. Optionally apply foldover. /// Does not produce harmonics over specified limit (limit = (SIZE / 2) / min_number_of_harmonics) void make(bandlimiter &bl, float input[SIZE], bool foldover = false, uint32_t limit = SIZE / 2) { memcpy(original, input, sizeof(original)); bl.compute_spectrum(input); make_from_spectrum(bl, foldover); } /// Fill the family using specified bandlimiter and spectrum contained within. Optionally apply foldover. /// Does not produce harmonics over specified limit (limit = (SIZE / 2) / min_number_of_harmonics) void make_from_spectrum(bandlimiter &bl, bool foldover = false, uint32_t limit = SIZE / 2) { bl.remove_dc(); uint32_t base = 1 << (32 - SIZE_BITS); uint32_t cutoff = SIZE / 2, top = SIZE / 2; float vmax = 0; for (unsigned int i = 0; i < cutoff; i++) vmax = std::max(vmax, abs(bl.spectrum[i])); float vthres = vmax / 1024.0; // -60dB float cumul = 0.f; while(cutoff > (SIZE / limit)) { if (!foldover) { // skip harmonics too quiet to be heard, but measure their loudness cumulatively, // because even if a single harmonic is too quiet, a whole bunch of them may add up // to considerable amount of space cumul = 0.f; while(cutoff > 1 && cumul + abs(bl.spectrum[cutoff - 1]) < vthres) { cumul += abs(bl.spectrum[cutoff - 1]); cutoff--; } } float *wf = new float[SIZE+1]; bl.make_waveform(wf, cutoff, foldover); wf[SIZE] = wf[0]; (*this)[base * (top / cutoff)] = wf; cutoff = (int)(0.75 * cutoff); } } /// Retrieve waveform pointer suitable for specified phase_delta inline float *get_level(uint32_t phase_delta) { iterator i = upper_bound(phase_delta); if (i == end()) return NULL; // printf("Level = %08x\n", i->first); return i->second; } /// Destructor, deletes the waveforms and removes them from the map. ~waveform_family() { for (iterator i = begin(); i != end(); i++) delete []i->second; clear(); } }; #if 0 // cubic interpolation static inline float cerp(float pm1, float p0, float p1, float p2, float t) { return (-t*(t-1)*(t-2) * pm1 + 3*(t+1)*(t-1)*(t-2) * p0 - 3*(t+1)*t*(t-2) * p1 + (t+1)*t*(t-1) * p2) * (1.0 / 6.0); } #endif /** * Simple table-based lerping oscillator. Uses waveform of size 2^SIZE_BITS. * Combine with waveform_family if bandlimited waveforms are needed. Because * of linear interpolation, it's usually a good idea to use large tables * (2048-4096 points), otherwise aliasing may be produced. */ template struct waveform_oscillator: public simple_oscillator { enum { SIZE = 1 << SIZE_BITS, MASK = SIZE - 1, SCALE = 1 << (32 - SIZE_BITS) }; float *waveform; waveform_oscillator() { waveform = NULL; } /// Get the value from single oscillator at current position inline float get() { uint32_t wpos = phase >> (32 - SIZE_BITS); return dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], (phase & (SCALE - 1)) * (1.0f / SCALE)); } /// Add/substract two phase-shifted values inline float get_phaseshifted(uint32_t shift, float mix) { uint32_t wpos = phase >> (32 - SIZE_BITS); float value1 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], (phase & (SCALE - 1)) * (1.0f / SCALE)); wpos = (phase + shift) >> (32 - SIZE_BITS); float value2 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], ((phase + shift) & (SCALE - 1)) * (1.0f / SCALE)); return value1 + mix * value2; } /// Get the value of a hard synced osc (65536 = 1:1 ratio) inline float get_phasedist(uint32_t sync, uint32_t shift, float mix) { uint32_t phase_mod = (uint64_t(phase) * sync >> 16); uint32_t wpos = phase_mod >> (32 - SIZE_BITS); float value1 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], (phase & (SCALE - 1)) * (1.0f / SCALE)); wpos = (phase_mod + shift) >> (32 - SIZE_BITS); float value2 = dsp::lerp(waveform[wpos], waveform[(wpos + 1) & MASK], ((phase + shift) & (SCALE - 1)) * (1.0f / SCALE)); return value1 + mix * value2; } /// One step inline void advance() { phase += phasedelta; } }; /** * Simple triangle LFO without any smoothing or anything of this sort. */ struct triangle_lfo: public simple_oscillator { /// Previous value (not stored here, but may be used by calling code) float last; triangle_lfo() { reset(); } void reset() { simple_oscillator::reset(); last = 0; } inline float get() { uint32_t phase2 = phase; // start at 90 degrees point of the "/\" wave (-1 to +1) phase2 += 1<<30; // if in second half, invert the wave (so it falls back into 0..0x7FFFFFFF) phase2 ^= ((int32_t)phase2)>>31; float value = (phase2 >> 6) / 16777216.0 - 1.0; phase += phasedelta; return value; } }; /// Simple stupid inline function to normalize a waveform (by removing DC offset and ensuring max absolute value of 1). static inline void normalize_waveform(float *table, unsigned int size) { float dc = 0; for (unsigned int i = 0; i < size; i++) dc += table[i]; dc /= size; for (unsigned int i = 0; i < size; i++) table[i] -= dc; float thismax = 0; for (unsigned int i = 0; i < size; i++) thismax = std::max(thismax, fabsf(table[i])); if (thismax < 0.000001f) return; double divv = 1.0 / thismax; for (unsigned int i = 0; i < size; i++) table[i] *= divv; } }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/osctl.h000066400000000000000000000323261247673406200224050ustar00rootroot00000000000000/* Calf DSP Library * Open Sound Control primitives * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_OSCTL_H #define __CALF_OSCTL_H #include #include #include #include #include #include namespace osctl { enum osc_type { osc_i32 = 'i', osc_f32 = 'f', osc_string = 's', osc_blob = 'b', // unsupported osc_i64 = 'h', osc_ts = 't', osc_f64 = 'd', osc_string_alt = 'S', osc_char = 'c', osc_rgba = 'r', osc_midi = 'm', osc_true = 'T', osc_false = 'F', osc_nil = 'N', osc_inf = 'I', osc_start_array = '[', osc_end_array = ']' }; extern const char *osc_type_name(osc_type type); struct osc_exception: public std::exception { virtual const char *what() const throw() { return "OSC parsing error"; } }; struct osc_read_exception: public std::exception { virtual const char *what() const throw() { return "OSC buffer underflow"; } }; struct osc_write_exception: public std::exception { virtual const char *what() const throw() { return "OSC buffer overflow"; } }; struct null_buffer { static bool read(uint8_t *dest, uint32_t bytes) { return false; } static bool write(uint8_t *dest, uint32_t bytes) { return true; } static void clear() { } }; struct raw_buffer { uint8_t *ptr; uint32_t pos, count, size; raw_buffer() { ptr = NULL; pos = count = size = 0; } raw_buffer(uint8_t *_ptr, uint32_t _count, uint32_t _size) { set(_ptr, _count, _size); } inline void set(uint8_t *_ptr, uint32_t _count, uint32_t _size) { ptr = _ptr; pos = 0; count = _count; size = _size; } bool read(uint8_t *dest, uint32_t bytes) { if (pos + bytes > count) return false; memcpy(dest, ptr + pos, bytes); pos += bytes; return true; } bool write(const uint8_t *src, uint32_t bytes) { if (count + bytes > size) return false; memcpy(ptr + count, src, bytes); count += bytes; return true; } int read_left() { return count - pos; } int write_left() { return size - count; } inline int write_misalignment() { return 4 - (count & 3); } void clear() { pos = 0; count = 0; } int tell() { return pos; } void seek(int _pos) { pos = _pos; } }; struct string_buffer { std::string data; uint32_t pos, size; string_buffer() { pos = 0; size = 1048576; } string_buffer(std::string _data, int _size = 1048576) { data = _data; pos = 0; size = _size; } bool read(uint8_t *dest, uint32_t bytes) { if (pos + bytes > data.length()) return false; memcpy(dest, &data[pos], bytes); pos += bytes; return true; } bool write(const uint8_t *src, uint32_t bytes) { if (data.length() + bytes > size) return false; uint32_t wpos = data.length(); data.resize(wpos + bytes); memcpy(&data[wpos], src, bytes); return true; } inline int read_left() { return data.length() - pos; } inline int write_left() { return size - data.length(); } inline int write_misalignment() { return 4 - (data.length() & 3); } void clear() { data.clear(); pos = 0; } int tell() { return pos; } void seek(int _pos) { pos = _pos; } }; template struct osc_stream { Buffer &buffer; TypeBuffer *type_buffer; bool error; osc_stream(Buffer &_buffer) : buffer(_buffer), type_buffer(NULL), error(false) {} osc_stream(Buffer &_buffer, TypeBuffer &_type_buffer) : buffer(_buffer), type_buffer(&_type_buffer), error(false) {} inline void pad() { uint32_t zero = 0; write(&zero, buffer.write_misalignment()); } inline void read(void *dest, uint32_t bytes) { if (!buffer.read((uint8_t *)dest, bytes)) { #if 0 if (Throw) throw osc_read_exception(); else #endif { error = true; memset(dest, 0, bytes); } } } inline void write(const void *src, uint32_t bytes) { if (!buffer.write((const uint8_t *)src, bytes)) { #if 0 if (Throw) throw osc_write_exception(); else #endif error = true; } } inline void clear() { buffer.clear(); if (type_buffer) type_buffer->clear(); } inline void write_type(char ch) { if (type_buffer) type_buffer->write((uint8_t *)&ch, 1); } }; typedef osc_stream osc_strstream; typedef osc_stream osc_typed_strstream; struct osc_inline_strstream: public string_buffer, public osc_strstream { osc_inline_strstream() : string_buffer(), osc_strstream(static_cast(*this)) { } }; struct osc_str_typed_buffer_pair { string_buffer buf_data, buf_types; }; struct osc_inline_typed_strstream: public osc_str_typed_buffer_pair, public osc_typed_strstream { osc_inline_typed_strstream() : osc_str_typed_buffer_pair(), osc_typed_strstream(buf_data, buf_types) { } }; template inline osc_stream & operator <<(osc_stream &s, uint32_t val) { #if 0 val = htonl(val); s.write(&val, 4); s.write_type(osc_i32); #endif return s; } template inline osc_stream & operator >>(osc_stream &s, uint32_t &val) { #if 0 s.read(&val, 4); val = htonl(val); #endif return s; } template inline osc_stream & operator >>(osc_stream &s, int32_t &val) { #if 0 s.read(&val, 4); val = htonl(val); #endif return s; } template inline osc_stream & operator <<(osc_stream &s, float val) { union { float v; uint32_t i; } val2; val2.v = val; val2.i = htonl(val2.i); s.write(&val2.i, 4); s.write_type(osc_f32); return s; } template inline osc_stream & operator >>(osc_stream &s, float &val) { union { float v; uint32_t i; } val2; s.read(&val2.i, 4); val2.i = htonl(val2.i); val = val2.v; return s; } template inline osc_stream & operator <<(osc_stream &s, const std::string &str) { s.write(&str[0], str.length()); s.pad(); s.write_type(osc_string); return s; } template inline osc_stream & operator >>(osc_stream &s, std::string &str) { // inefficient... char five[5]; five[4] = '\0'; str.resize(0); while(1) { s.read(five, 4); if (five[0] == '\0') break; str += five; if (!five[1] || !five[2] || !five[3]) break; } return s; } template inline osc_stream & read_buffer_from_osc_stream(osc_stream &s, DestBuffer &buf) { #if 0 uint32_t nlen = 0; s.read(&nlen, 4); uint32_t len = htonl(nlen); // write length in network order for (uint32_t i = 0; i < len; i += 1024) { uint8_t tmp[1024]; uint32_t part = std::min((uint32_t)1024, len - i); s.read(tmp, part); buf.write(tmp, part); } // pad s.read(&nlen, 4 - (len & 3)); #endif return s; } template inline osc_stream & write_buffer_to_osc_stream(osc_stream &s, SrcBuffer &buf) { #if 0 uint32_t len = buf.read_left(); uint32_t nlen = ntohl(len); s.write(&nlen, 4); // write length in network order for (uint32_t i = 0; i < len; i += 1024) { uint8_t tmp[1024]; uint32_t part = std::min((uint32_t)1024, len - i); buf.read(tmp, part); s.write(tmp, part); } s.pad(); s.write_type(osc_blob); #endif return s; } template inline osc_stream & operator >>(osc_stream &s, raw_buffer &str) { return read_buffer_from_osc_stream(s, str); } template inline osc_stream & operator >>(osc_stream &s, string_buffer &str) { return read_buffer_from_osc_stream(s, str); } template inline osc_stream & operator <<(osc_stream &s, raw_buffer &str) { return write_buffer_to_osc_stream(s, str); } template inline osc_stream & operator <<(osc_stream &s, string_buffer &str) { return write_buffer_to_osc_stream(s, str); } // XXXKF: I don't support reading binary blobs yet struct osc_net_bad_address: public std::exception { std::string addr, error_msg; osc_net_bad_address(const char *_addr) { addr = _addr; error_msg = "Incorrect OSC URI: " + addr; } virtual const char *what() const throw() { return error_msg.c_str(); } virtual ~osc_net_bad_address() throw () {} }; struct osc_net_exception: public std::exception { int net_errno; std::string command, error_msg; osc_net_exception(const char *cmd, int _errno = errno) { command = cmd; net_errno = _errno; error_msg = "OSC error in "+command+": "+strerror(_errno); } virtual const char *what() const throw() { return error_msg.c_str(); } virtual ~osc_net_exception() throw () {} }; struct osc_net_dns_exception: public std::exception { #if 0 int net_errno; std::string command, error_msg; osc_net_dns_exception(const char *cmd, int _errno = h_errno) { command = cmd; net_errno = _errno; error_msg = "OSC error in "+command+": "+hstrerror(_errno); } virtual const char *what() const throw() { return error_msg.c_str(); } virtual ~osc_net_dns_exception() throw () {} #endif }; template struct osc_message_sink { virtual void receive_osc_message(std::string address, std::string type_tag, OscStream &buffer)=0; virtual ~osc_message_sink() {} }; template struct osc_message_dump: public osc_message_sink { DumpStream &stream; osc_message_dump(DumpStream &_stream) : stream(_stream) {} virtual void receive_osc_message(std::string address, std::string type_tag, OscStream &buffer) { int pos = buffer.buffer.tell(); stream << "address: " << address << ", type tag: " << type_tag << std::endl; for (unsigned int i = 0; i < type_tag.size(); i++) { stream << "Argument " << i << " is "; switch(type_tag[i]) { case 'i': { uint32_t val; buffer >> val; stream << val; break; } case 'f': { float val; buffer >> val; stream << val; break; } case 's': { std::string val; buffer >> val; stream << val; break; } case 'b': { osctl::string_buffer val; buffer >> val; stream << "blob (" << val.data.length() << " bytes)"; break; } default: { stream << "unknown - cannot parse more arguments" << std::endl; i = type_tag.size(); break; } } stream << std::endl; } stream << std::flush; buffer.buffer.seek(pos); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/plugin_tools.h000066400000000000000000000125051247673406200237740ustar00rootroot00000000000000/* Calf DSP plugin pack * Tools to use in plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_PLUGIN_TOOLS_H #define CALF_PLUGIN_TOOLS_H #include #include "giface.h" #include "vumeter.h" namespace calf_plugins { template struct in_out_metering_base { typedef Meter meter; meter vumeter_in, vumeter_out; in_out_metering_base() { reset(); } void reset() { vumeter_in.reset(); vumeter_out.reset(); } void set_sample_rate(double sample_rate) { vumeter_in.set_falloff(0.f, sample_rate); vumeter_out.copy_falloff(vumeter_in); } }; /// Universal single stereo level metering for a specific plugin template class stereo_in_out_metering: public in_out_metering_base { public: inline void process(float *const *params, const float *const *inputs, const float *const *outputs, unsigned int offset, unsigned int nsamples) { if (params[Metadata::param_meter_in] || params[Metadata::param_clip_in]) { if (inputs) vumeter_in.update_stereo(inputs[0] ? inputs[0] + offset : NULL, inputs[1] ? inputs[1] + offset : NULL, nsamples); else vumeter_in.update_zeros(nsamples); if (params[Metadata::param_meter_in]) *params[Metadata::param_meter_in] = vumeter_in.level; if (params[Metadata::param_clip_in]) *params[Metadata::param_clip_in] = vumeter_in.clip > 0 ? 1.f : 0.f; } if (params[Metadata::param_meter_out] || params[Metadata::param_clip_out]) { if (outputs) vumeter_out.update_stereo(outputs[0] ? outputs[0] + offset : NULL, outputs[1] ? outputs[1] + offset : NULL, nsamples); else vumeter_out.update_zeros(nsamples); if (params[Metadata::param_meter_out]) *params[Metadata::param_meter_out] = vumeter_out.level; if (params[Metadata::param_clip_out]) *params[Metadata::param_clip_out] = vumeter_out.clip > 0 ? 1.f : 0.f; } } void bypassed(float *const *params, unsigned int nsamples) { reset(); process(params, NULL, NULL, 0, nsamples); } }; /// Universal dual level metering for a specific plugin template class dual_in_out_metering: public in_out_metering_base { public: inline void process(float *const *params, const float *const *inputs, const float *const *outputs, unsigned int offset, unsigned int nsamples) { if (params[Metadata::param_meter_inL] || params[Metadata::param_clip_inL] || params[Metadata::param_meter_inR] || params[Metadata::param_clip_inR]) { if (inputs) vumeter_in.update_stereo(inputs[0] ? inputs[0] + offset : NULL, inputs[1] ? inputs[1] + offset : NULL, nsamples); else vumeter_in.update_zeros(nsamples); if (params[Metadata::param_meter_inL]) *params[Metadata::param_meter_inL] = vumeter_in.left.level; if (params[Metadata::param_meter_inR]) *params[Metadata::param_meter_inR] = vumeter_in.right.level; if (params[Metadata::param_clip_inL]) *params[Metadata::param_clip_inL] = vumeter_in.left.clip > 0 ? 1.f : 0.f; if (params[Metadata::param_clip_inR]) *params[Metadata::param_clip_inR] = vumeter_in.right.clip > 0 ? 1.f : 0.f; } if (params[Metadata::param_meter_outL] || params[Metadata::param_clip_outL] || params[Metadata::param_meter_outR] || params[Metadata::param_clip_outR]) { if (outputs) vumeter_out.update_stereo(outputs[0] ? outputs[0] + offset : NULL, outputs[1] ? outputs[1] + offset : NULL, nsamples); else vumeter_out.update_zeros(nsamples); if (params[Metadata::param_meter_outL]) *params[Metadata::param_meter_outL] = vumeter_out.left.level; if (params[Metadata::param_meter_outR]) *params[Metadata::param_meter_outR] = vumeter_out.right.level; if (params[Metadata::param_clip_outL]) *params[Metadata::param_clip_outL] = vumeter_out.left.clip > 0 ? 1.f : 0.f; if (params[Metadata::param_clip_outR]) *params[Metadata::param_clip_outR] = vumeter_out.right.clip > 0 ? 1.f : 0.f; } } void bypassed(float *const *params, unsigned int nsamples) { reset(); process(params, NULL, NULL, 0, nsamples); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/preset.h000066400000000000000000000133271247673406200225630ustar00rootroot00000000000000/* Calf DSP Library * Preset management * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_PRESET_H #define __CALF_PRESET_H #include #include #include "utils.h" namespace calf_plugins { class plugin_ctl_iface; /// Contents of single preset struct plugin_preset { /// Bank the preset belongs to (not used yet) int bank; /// Program number of the preset (not used yet) int program; /// Name of the preset std::string name; /// Name of the plugin the preset is for std::string plugin; /// Names of parameters in values array (for each item in param_names there should be a counterpart in values) std::vector param_names; /// Values of parameters std::vector values; /// DSSI configure-style variables std::map variables; plugin_preset() : bank(0), program(0) {} /// Export preset as XML std::string to_xml(); /// "Upload" preset content to the plugin void activate(plugin_ctl_iface *plugin); /// "Download" preset content from the plugin void get_from(plugin_ctl_iface *plugin); std::string get_safe_name(); }; /// Exception thrown by preset system struct preset_exception { std::string message, param, fulltext; int error; preset_exception(const std::string &_message, const std::string &_param, int _error) : message(_message), param(_param), error(_error) { } const char *what() { if (error) fulltext = message + " " + param + " (" + strerror(error) + ")"; else fulltext = message + " " + param; return fulltext.c_str(); } ~preset_exception() { } }; /// A vector of presets typedef std::vector preset_vector; /// A single list of presets (usually there are two - @see get_builtin_presets(), get_user_presets() ) struct preset_list { /// Plugin list item struct plugin_snapshot { /// Preset offset int preset_offset; /// Plugin type std::string type; /// Instance name std::string instance_name; /// Index of the first input port int input_index; /// Index of the first output port int output_index; /// Index of the first MIDI port int midi_index; /// Reset to initial values void reset(); }; /// Parser states enum parser_state { START, ///< Beginning of parsing process (before root element) LIST, ///< Inside root element PRESET, ///< Inside preset definition VALUE, ///< Inside (empty) param tag VAR, ///< Inside (non-empty) var tag PLUGIN, ///< Inside plugin element (calfjackhost snapshots only) RACK, ///< Inside rack element (calfjackhost snapshots only) } state; /// Contained presets (usually for all plugins) preset_vector presets; /// Temporary preset used during parsing process plugin_preset parser_preset; /// Temporary plugin desc used during parsing process plugin_snapshot parser_plugin; /// Preset number counters for DSSI (currently broken) std::map last_preset_ids; /// The key used in current tag (for state == VAR) std::string current_key; /// The file is loaded in rack mode (and rack/plugin elements are expected) bool rack_mode; /// List of plugin states for rack mode std::vector plugins; /// Return the name of the built-in or user-defined preset file static std::string get_preset_filename(bool builtin); /// Load default preset list (built-in or user-defined) bool load_defaults(bool builtin); /// Load preset list from an in-memory XML string void parse(const std::string &data, bool in_rack_mode); /// Load preset list from XML file void load(const char *filename, bool in_rack_mode); /// Save preset list as XML file void save(const char *filename); /// Append or replace a preset (replaces a preset with the same plugin and preset name) void add(const plugin_preset &sp); /// Get a sublist of presets for a given plugin (those with plugin_preset::plugin == plugin) void get_for_plugin(preset_vector &vec, const char *plugin); protected: /// Internal function: start element handler for expat static void xml_start_element_handler(void *user_data, const char *name, const char *attrs[]); /// Internal function: end element handler for expat static void xml_end_element_handler(void *user_data, const char *name); /// Internal function: character data (tag text content) handler for expat static void xml_character_data_handler(void *user_data, const char *data, int len); }; /// Return the current list of built-in (factory) presets (these are loaded from system-wide file) extern preset_list &get_builtin_presets(); /// Return the current list of user-defined presets (these are loaded from ~/.calfpresets) extern preset_list &get_user_presets(); }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/primitives.h000066400000000000000000000350241247673406200234520ustar00rootroot00000000000000/* Calf DSP Library * DSP primitives. * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_PRIMITIVES_H #define __CALF_PRIMITIVES_H #include #include #include #include #include #include #include namespace dsp { /// Set a float to zero inline void zero(float &v) { v = 0; }; /// Set a double to zero inline void zero(double &v) { v = 0; }; /// Set 64-bit unsigned integer value to zero inline void zero(uint64_t &v) { v = 0; }; /// Set 32-bit unsigned integer value to zero inline void zero(uint32_t &v) { v = 0; }; /// Set 16-bit unsigned integer value to zero inline void zero(uint16_t &v) { v = 0; }; /// Set 8-bit unsigned integer value to zero inline void zero(uint8_t &v) { v = 0; }; /// Set 64-bit signed integer value to zero inline void zero(int64_t &v) { v = 0; }; /// Set 32-bit signed integer value to zero inline void zero(int32_t &v) { v = 0; }; /// Set 16-bit signed integer value to zero inline void zero(int16_t &v) { v = 0; }; /// Set 8-bit signed integer value to zero inline void zero(int8_t &v) { v = 0; }; /// Set array (buffer or anything similar) to vector of zeroes template void zero(T *data, unsigned int size) { T value; dsp::zero(value); for (unsigned int i=0; istruct stereo_sample { T left; T right; /// default constructor - preserves T's semantics (ie. no implicit initialization to 0) inline stereo_sample() { } inline stereo_sample(T _left, T _right) { left = _left; right = _right; } inline stereo_sample(T _both) { left = right = _both; } template inline stereo_sample(const stereo_sample &value) { left = value.left; right = value.right; } inline stereo_sample& operator=(const T &value) { left = right = value; return *this; } template inline stereo_sample& operator=(const stereo_sample &value) { left = value.left; right = value.right; return *this; } /* inline operator T() const { return (left+right)/2; } */ inline stereo_sample& operator*=(const T &multiplier) { left *= multiplier; right *= multiplier; return *this; } inline stereo_sample& operator+=(const stereo_sample &value) { left += value.left; right += value.right; return *this; } inline stereo_sample& operator-=(const stereo_sample &value) { left -= value.left; right -= value.right; return *this; } template inline stereo_sample operator*(const U &value) const { return stereo_sample(left*value, right*value); } /*inline stereo_sample operator*(float value) const { return stereo_sample(left*value, right*value); } inline stereo_sample operator*(double value) const { return stereo_sample(left*value, right*value); }*/ inline stereo_sample operator+(const stereo_sample &value) { return stereo_sample(left+value.left, right+value.right); } inline stereo_sample operator-(const stereo_sample &value) { return stereo_sample(left-value.left, right-value.right); } inline stereo_sample operator+(const T &value) { return stereo_sample(left+value, right+value); } inline stereo_sample operator-(const T &value) { return stereo_sample(left-value, right-value); } inline stereo_sample operator+(float value) { return stereo_sample(left+value, right+value); } inline stereo_sample operator-(float value) { return stereo_sample(left-value, right-value); } inline stereo_sample operator+(double value) { return stereo_sample(left+value, right+value); } inline stereo_sample operator-(double value) { return stereo_sample(left-value, right-value); } }; /// Multiply constant by stereo_value template inline stereo_sample operator*(const T &value, const stereo_sample &value2) { return stereo_sample(value2.left*value, value2.right*value); } /// Add constant to stereo_value template inline stereo_sample operator+(const T &value, const stereo_sample &value2) { return stereo_sample(value2.left+value, value2.right+value); } /// Subtract stereo_value from constant (yields stereo_value of course) template inline stereo_sample operator-(const T &value, const stereo_sample &value2) { return stereo_sample(value-value2.left, value-value2.right); } /// Shift value right by 'bits' bits (multiply by 2^-bits) template inline stereo_sample shr(stereo_sample v, int bits = 1) { v.left = shr(v.left, bits); v.right = shr(v.right, bits); return v; } /// Set a stereo_sample value to zero template inline void zero(stereo_sample &v) { dsp::zero(v.left); dsp::zero(v.right); } /// 'Small value' for integer and other types template inline T small_value() { return 0; } /// 'Small value' for floats (2^-24) - used for primitive underrun prevention. The value is pretty much arbitrary (allowing for 24-bit signals normalized to 1.0). template<> inline float small_value() { return (1.0/16777216.0); // allows for 2^-24, should be enough for 24-bit DACs at least :) } /// 'Small value' for doubles (2^-24) - used for primitive underrun prevention. The value is pretty much arbitrary. template<> inline double small_value() { return (1.0/16777216.0); } /// Convert a single value to single value = do nothing :) (but it's a generic with specialisation for stereo_sample) template inline float mono(T v) { return v; } /// Convert a stereo_sample to single value by averaging two channels template inline T mono(stereo_sample v) { return shr(v.left+v.right); } /// Clip a value to [min, max] template inline T clip(T value, T min, T max) { if (value < min) return min; if (value > max) return max; return value; } /// Clip a double to [-1.0, +1.0] inline double clip11(double value) { double a = fabs(value); if (a<=1) return value; return (value<0) ? -1.0 : 1.0; } /// Clip a float to [-1.0f, +1.0f] inline float clip11(float value) { float a = fabsf(value); if (a<=1) return value; return (value<0) ? -1.0f : 1.0f; } /// Clip a double to [0.0, +1.0] inline double clip01(double value) { double a = fabs(value-0.5); if (a<=0.5) return value; return (a<0) ? -0.0 : 1.0; } /// Clip a float to [0.0f, +1.0f] inline float clip01(float value) { float a = fabsf(value-0.5f); if (a<=0.5f) return value; return (value < 0) ? -0.0f : 1.0f; } // Linear interpolation (mix-way between v1 and v2). template inline T lerp(T v1, T v2, U mix) { return v1+(v2-v1)*mix; } // Linear interpolation for stereo values (mix-way between v1 and v2). template inline stereo_sample lerp(stereo_sample &v1, stereo_sample &v2, float mix) { return stereo_sample(v1.left+(v2.left-v1.left)*mix, v1.right+(v2.right-v1.right)*mix); } /** * decay-only envelope (linear or exponential); deactivates itself when it goes below a set point (epsilon) */ class decay { double value, initial; unsigned int age, mask; bool active; public: decay() { active = false; mask = 127; initial = value = 0.0; } inline bool get_active() { return active; } inline double get() { return active ? value : 0.0; } inline void set(double v) { initial = value = v; active = true; age = 0; } /// reinitialise envelope (must be called if shape changes from linear to exponential or vice versa in the middle of envelope) inline void reinit() { initial = value; age = 1; } inline void add(double v) { if (active) value += v; else value = v; initial = value; age = 0; active = true; } static inline double calc_exp_constant(double times, double cycles) { if (cycles < 1.0) cycles = 1.0; return pow(times, 1.0 / cycles); } inline void age_exp(double constant, double epsilon) { if (active) { if (!(age & mask)) value = initial * pow(constant, (double)age); else value *= constant; if (value < epsilon) active = false; age++; } } inline void age_lin(double constant, double epsilon) { if (active) { if (!(age & mask)) value = initial - constant * age; else value -= constant; if (value < epsilon) active = false; age++; } } inline void deactivate() { active = false; value = 0; } }; class scheduler; class task { public: virtual void execute(scheduler *s)=0; virtual void dispose() { delete this; } virtual ~task() {} }; /// this scheduler is based on std::multimap, so it isn't very fast, I guess /// maybe some day it should be rewritten to use heapsort or something /// work in progress, don't use! class scheduler { std::multimap timeline; unsigned int time, next_task; bool eob; class end_buf_task: public task { public: scheduler *p; end_buf_task(scheduler *_p) : p(_p) {} virtual void execute(scheduler *s) { p->eob = true; } virtual void dispose() { } } eobt; public: scheduler() : time(0) , next_task((unsigned)-1) , eob(true) , eobt (this) { time = 0; next_task = (unsigned)-1; eob = false; } inline bool is_next_tick() { if (time < next_task) return true; do_tasks(); } inline void next_tick() { time++; } void set(int pos, task *t) { timeline.insert(std::pair(time+pos, t)); next_task = timeline.begin()->first; } void do_tasks() { std::multimap::iterator i = timeline.begin(); while(i != timeline.end() && i->first == time) { i->second->execute(this); i->second->dispose(); timeline.erase(i); } } bool is_eob() { return eob; } void set_buffer_size(int count) { set(count, &eobt); } }; /** * Force "small enough" float value to zero */ inline void sanitize(float &value) { if (std::abs(value) < small_value()) value = 0.f; } /** * Force already-denormal float value to zero */ inline void sanitize_denormal(float& value) { if (((*(unsigned int *) &value) & 0x7f800000) == 0) { value = 0; } } /** * Force "small enough" double value to zero */ inline void sanitize(double &value) { if (std::abs(value) < small_value()) value = 0.f; } /** * Force "small enough" stereo value to zero */ template inline void sanitize(stereo_sample &value) { sanitize(value.left); sanitize(value.right); } inline float fract16(unsigned int value) { return (value & 0xFFFF) * (1.0 / 65536.0); } /** * typical precalculated sine table */ template class sine_table { public: static bool initialized; static T data[N+1]; sine_table() { if (initialized) return; initialized = true; for (int i=0; i bool sine_table::initialized = false; template T sine_table::data[N+1]; /// fast float to int conversion using default rounding mode inline int fastf2i_drm(float f) { #ifdef __X86__ volatile int v; __asm ( "flds %1; fistpl %0" : "=m"(v) : "m"(f)); return v; #else return (int)nearbyintf(f); #endif } /// Convert MIDI note to frequency in Hz. inline float note_to_hz(double note, double detune_cents = 0.0) { return 440 * pow(2.0, (note - 69 + detune_cents/100.0) / 12.0); } /// Hermite interpolation between two points and slopes in normalized range (written after Wikipedia article) /// @arg t normalized x coordinate (0-1 over the interval in question) /// @arg p0 first point /// @arg p1 second point /// @arg m0 first slope (multiply by interval width when using over non-1-wide interval) /// @arg m1 second slope (multiply by interval width when using over non-1-wide interval) inline float normalized_hermite(float t, float p0, float p1, float m0, float m1) { float t2 = t*t; float t3 = t2*t; return (2*t3 - 3*t2 + 1) * p0 + (t3 - 2*t2 + t) * m0 + (-2*t3 + 3*t2) * p1 + (t3-t2) * m1; } /// Hermite interpolation between two points and slopes /// @arg x point within interval (x0 <= x <= x1) /// @arg x0 interval start /// @arg x1 interval end /// @arg p0 value at x0 /// @arg p1 value at x1 /// @arg m0 slope (steepness, tangent) at x0 /// @arg m1 slope at x1 inline float hermite_interpolation(float x, float x0, float x1, float p0, float p1, float m0, float m1) { float width = x1 - x0; float t = (x - x0) / width; m0 *= width; m1 *= width; float t2 = t*t; float t3 = t2*t; float ct0 = p0; float ct1 = m0; float ct2 = -3 * p0 - 2 * m0 + 3 * p1 - m1; float ct3 = 2 * p0 + m0 - 2 * p1 + m1; return ct3 * t3 + ct2 * t2 + ct1 * t + ct0; //return (2*t3 - 3*t2 + 1) * p0 + (t3 - 2*t2 + t) * m0 + (-2*t3 + 3*t2) * p1 + (t3-t2) * m1; } /// convert amplitude value to dB inline float amp2dB(float amp) { return 6.0 * log(amp) / log(2); } }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/synth.h000066400000000000000000000155441247673406200224310ustar00rootroot00000000000000/* Calf DSP Library * Framework for synthesizer-like plugins. This is based * on my earlier work on Drawbar electric organ emulator. * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef CALF_SYNTH_H #define CALF_SYNTH_H #include #include #include #include #include #include #include namespace dsp { /** * A kind of set with fast non-ordered iteration, used for storing lists of pressed keys. */ class keystack { private: int dcount; uint8_t active[128]; uint8_t states[128]; public: keystack() { memset(states, 0xFF, sizeof(states)); dcount = 0; } void clear() { for (int i=0; i= 0 && key <= 127); if (states[key] != 0xFF) { return true; } states[key] = dcount; active[dcount++] = key; return false; } bool pop(int key) { if (states[key] == 0xFF) return false; int pos = states[key]; if (pos != dcount-1) { // reuse the popped item's stack position for stack top int last = active[dcount-1]; active[pos] = last; // mark that position's new place on stack states[last] = pos; } states[key] = 0xFF; dcount--; return true; } inline bool has(int key) { return states[key] != 0xFF; } inline int count() { return dcount; } inline bool empty() { return (dcount == 0); } inline int nth(int n) { return active[n]; } }; /** * Convert MIDI note number to normalized UINT phase (where 1<<32 is full cycle). * @param MIDI note number * @param cents detune in cents (1/100 of a semitone) * @param sr sample rate */ inline unsigned int midi_note_to_phase(int note, double cents, int sr) { double incphase = 440*pow(2.0, (note-69)/12.0 + cents/1200.0)/sr; if (incphase >= 1.0) incphase = fmod(incphase, 1.0); incphase *= 65536.0*65536.0; return (unsigned int)incphase; } // Base class for all voice objects class voice { public: int sample_rate; bool released, sostenuto, stolen; voice() : sample_rate(-1), released(false), sostenuto(false), stolen(false) {} /// reset voice to default state (used when a voice is to be reused) virtual void setup(int sr) { sample_rate = sr; } /// reset voice to default state (used when a voice is to be reused) virtual void reset()=0; /// a note was pressed virtual void note_on(int note, int vel)=0; /// a note was released virtual void note_off(int vel)=0; /// check if voice can be removed from active voice list virtual bool get_active()=0; /// render voice data to buffer virtual void render_to(float (*buf)[2], int nsamples)=0; /// very fast note off virtual void steal()=0; /// return the note used by this voice virtual int get_current_note()=0; virtual float get_priority() { return stolen ? 20000 : (released ? 1 : (sostenuto ? 200 : 100)); } /// empty virtual destructor virtual ~voice() {} }; /// An "optimized" voice class using fixed-size processing units /// and fixed number of channels. The drawback is that voice /// control is not sample-accurate, and no modulation input /// is possible, but it should be good enough for most cases /// (like Calf Organ). template class block_voice: public Base { public: // derived from Base // enum { Channels = 2 }; using Base::Channels; // enum { BlockSize = 16 }; using Base::BlockSize; // float output_buffer[BlockSize][Channels]; using Base::output_buffer; // void render_block(); using Base::render_block; unsigned int read_ptr; block_voice() { read_ptr = BlockSize; } virtual void reset() { Base::reset(); read_ptr = BlockSize; } virtual void render_to(float (*buf)[2], int nsamples) { int p = 0; while(p < nsamples) { if (read_ptr == BlockSize) { render_block(); read_ptr = 0; } int ncopy = std::min(BlockSize - read_ptr, nsamples - p); for (int i = 0; i < ncopy; i++) for (int c = 0; c < Channels; c++) buf[p + i][c] += output_buffer[read_ptr + i][c]; p += ncopy; read_ptr += ncopy; } } }; /// Base class for all kinds of polyphonic instruments, provides /// somewhat reasonable voice management, pedal support - and /// little else. It's implemented as a base class with virtual /// functions, so there's some performance loss, but it shouldn't /// be horrible. /// @todo it would make sense to support all notes off controller too struct basic_synth { protected: /// Current sample rate int sample_rate; /// Hold pedal state bool hold; /// Sostenuto pedal state bool sostenuto; /// Voices currently playing std::list active_voices; /// Voices allocated, but not used std::stack unused_voices; /// Gate values for all 128 MIDI notes std::bitset<128> gate; /// Maximum allocated number of channels unsigned int polyphony_limit; void kill_note(int note, int vel, bool just_one); public: virtual void setup(int sr) { sample_rate = sr; hold = false; sostenuto = false; polyphony_limit = (unsigned)-1; } virtual void trim_voices(); virtual dsp::voice *give_voice(); virtual dsp::voice *alloc_voice()=0; virtual dsp::voice *steal_voice(); virtual void render_to(float (*output)[2], int nsamples); virtual void note_on(int note, int vel); virtual void percussion_note_on(int note, int vel) {} virtual void control_change(int ctl, int val); virtual void note_off(int note, int vel); /// amt = -8192 to 8191 virtual void pitch_bend(int amt) {} virtual void on_pedal_release(); virtual bool check_percussion() { return active_voices.empty(); } virtual ~basic_synth(); }; } #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/utils.h000066400000000000000000000103211247673406200224100ustar00rootroot00000000000000/* Calf DSP Library * Utilities * * Copyright (C) 2008 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_UTILS_H #define __CALF_UTILS_H #include #include #include #include namespace calf_utils { /// Pthreads based mutex class class ptmutex { public: pthread_mutex_t pm; ptmutex(int type = PTHREAD_MUTEX_RECURSIVE) { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, type); pthread_mutex_init(&pm, &attr); pthread_mutexattr_destroy(&attr); } bool lock() { return pthread_mutex_lock(&pm) == 0; } bool trylock() { return pthread_mutex_trylock(&pm) == 0; } void unlock() { pthread_mutex_unlock(&pm); } ~ptmutex() { pthread_mutex_destroy(&pm); } }; class ptlock_base { protected: ptmutex &mutex; bool locked; ptlock_base(ptmutex &_m) : mutex(_m) , locked(false) { } public: bool is_locked() { return locked; } void unlock() { mutex.unlock(); locked = false; } void unlocked() { locked = false; } ~ptlock_base() { if (locked) mutex.unlock(); } }; /// Exception-safe mutex lock class ptlock: public ptlock_base { public: ptlock(ptmutex &_m) : ptlock_base(_m) { locked = mutex.lock(); } }; /// Exception-safe polling mutex lock class pttrylock: public ptlock_base { public: pttrylock(ptmutex &_m) : ptlock_base(_m) { locked = mutex.trylock(); } }; /// Exception-safe temporary assignment template class scope_assign { Tref data; T old_value; public: scope_assign(Tref _data, T new_value) : data(_data), old_value(_data) { data = new_value; } ~scope_assign() { data = old_value; } }; struct text_exception: public std::exception { const char *text; std::string container; public: text_exception(const std::string &t) : container(t) { text = container.c_str(); } virtual const char *what() const throw () { return text; } virtual ~text_exception() throw () {} }; struct file_exception: public std::exception { const char *text; std::string message, filename, container; public: file_exception(const std::string &f); file_exception(const std::string &f, const std::string &t); virtual const char *what() const throw () { return text; } virtual ~file_exception() throw () {} }; /// String-to-string mapping typedef std::map dictionary; /// Serialize a dictonary to a string extern std::string encode_map(const dictionary &data); /// Deserialize a dictonary from a string extern void decode_map(dictionary &data, const std::string &src); /// int-to-string extern std::string i2s(int value); /// float-to-string extern std::string f2s(double value); /// float-to-string-that-doesn't-resemble-an-int extern std::string ff2s(double value); /// Encode a key-value pair as XML attribute std::string to_xml_attr(const std::string &key, const std::string &value); /// Escape a string to be used in XML file std::string xml_escape(const std::string &src); /// Load file from disk into a std::string blob, or throw file_exception std::string load_file(const std::string &src); /// Indent a string by another string (prefix each line) std::string indent(const std::string &src, const std::string &indent); }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/vumeter.h000066400000000000000000000106601247673406200227450ustar00rootroot00000000000000/* Calf DSP Library * Peak metering facilities. * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, 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. */ #ifndef __CALF_VUMETER_H #define __CALF_VUMETER_H #include namespace dsp { /// Peak meter class struct vumeter { /// Measured signal level float level; /// Falloff of signal level (b1 coefficient of a 1-pole filter) float falloff; /// Clip indicator (set to 1 when |value| >= 1, fading otherwise) float clip; /// Falloff of clip indicator (b1 coefficient of a 1-pole filter); set to 1 if no falloff is required (manual reset of clip indicator) float clip_falloff; vumeter() { falloff = 0.999f; clip_falloff = 0.999f; reset(); } void reset() { level = 0; clip = 0; } /// Set falloff so that the meter falls 20dB in time_20dB seconds, assuming sample rate of sample_rate /// @arg time_20dB time for the meter to move by 20dB (default 300ms if <= 0) void set_falloff(double time_20dB, double sample_rate) { if (time_20dB <= 0) time_20dB = 0.3; // 20dB = 10x +/- --> 0.1 = pow(falloff, sample_rate * time_20dB) = exp(sample_rate * ln(falloff)) // ln(0.1) = sample_rate * ln(falloff) falloff = pow(0.1, 1 / (sample_rate * time_20dB)); clip_falloff = falloff; } /// Copy falloff from another object void copy_falloff(const vumeter &src) { falloff = src.falloff; clip_falloff = src.clip_falloff; } /// Update peak meter based on input signal inline void update(const float *src, unsigned int len) { update_stereo(src, NULL, len); } /// Update peak meter based on louder of two input signals inline void update_stereo(const float *src1, const float *src2, unsigned int len) { // "Age" the old level by falloff^length level *= pow(falloff, len); // Same for clip level (using different fade constant) clip *= pow(clip_falloff, len); dsp::sanitize(level); dsp::sanitize(clip); // Process input samples - to get peak value, take a max of all values in the input signal and "aged" old peak // Clip is set to 1 if any sample is out-of-range, if no clip occurs, the "aged" value is assumed if (src1) run_sample_loop(src1, len); if (src2) run_sample_loop(src2, len); } inline void run_sample_loop(const float *src, unsigned int len) { float tmp = level; for (unsigned int i = 0; i < len; i++) { float sig = fabs(src[i]); tmp = std::max(tmp, sig); if (sig >= 1.f) clip = 1.f; } level = tmp; } /// Update clip meter as if update was called with all-zero input signal inline void update_zeros(unsigned int len) { level *= pow((double)falloff, (double)len); clip *= pow((double)clip_falloff, (double)len); dsp::sanitize(level); dsp::sanitize(clip); } }; struct dual_vumeter { vumeter left, right; inline void update_stereo(const float *src1, const float *src2, unsigned int len) { left.update_stereo(src1, NULL, len); right.update_stereo(NULL, src2, len); } inline void update_zeros(unsigned int len) { left.update_zeros(len); right.update_zeros(len); } inline void reset() { left.reset(); right.reset(); } inline void set_falloff(double time_20dB, double sample_rate) { left.set_falloff(time_20dB, sample_rate); right.copy_falloff(left); } inline void copy_falloff(const dual_vumeter &src) { left.copy_falloff(src.left); right.copy_falloff(src.right); } }; }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/waveshaping.h000066400000000000000000000024341247673406200235720ustar00rootroot00000000000000/* Calf DSP Library * Placeholder for waveshaping classes * * Copyright (C) 2001-2009 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1307, USA. */ #ifndef __CALF_WAVESHAPING_H #define __CALF_WAVESHAPING_H /// This will be a waveshaper... when I'll code it (-: /// (or get Tom Szlagyi's permission to use his own) class waveshaper { public: waveshaper(); void activate() {} void deactivate() {} void set_params(float blend, float drive) {} void set_sample_rate(uint32_t sr) {} float process(float in) { return in; } float get_distortion_level() { return 1; } }; #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/wavetable.h000066400000000000000000000134261247673406200232330ustar00rootroot00000000000000#ifndef __CALF_WAVETABLE_H #define __CALF_WAVETABLE_H #include #include "biquad.h" #include "onepole.h" #include "audio_fx.h" #include "inertia.h" #include "osc.h" #include "synth.h" #include "envelope.h" #include "modmatrix.h" namespace calf_plugins { #define WAVETABLE_WAVE_BITS 8 class wavetable_audio_module; struct wavetable_oscillator: public dsp::simple_oscillator { enum { SIZE = 1 << 8, MASK = SIZE - 1, SCALE = 1 << (32 - 8) }; int16_t (*tables)[256]; inline float get(uint16_t slice) { float fracslice = (slice & 255) * (1.0 / 256.0); slice = slice >> 8; int16_t *waveform = tables[slice]; int16_t *waveform2 = tables[slice + 1]; float value1 = 0.f, value2 = 0.f; uint32_t cphase = phase, cphasedelta = phasedelta >> 3; for (int j = 0; j < 8; j++) { uint32_t wpos = cphase >> (32 - 8); uint32_t wpos2 = (wpos + 1) & MASK; float frac = (cphase & (SCALE - 1)) * (1.0f / SCALE); value1 += dsp::lerp((float)waveform[wpos], (float)waveform[wpos2], frac); value2 += dsp::lerp((float)waveform2[wpos], (float)waveform2[wpos2], frac); cphase += cphasedelta; } phase += phasedelta; return dsp::lerp(value1, value2, fracslice) * (1.0 / 8.0) * (1.0 / 32768.0);; } }; class wavetable_voice: public dsp::voice { public: enum { Channels = 2, BlockSize = 64, EnvCount = 3, OscCount = 2 }; float output_buffer[BlockSize][Channels]; protected: int note; wavetable_audio_module *parent; float **params; dsp::decay amp; wavetable_oscillator oscs[OscCount]; dsp::adsr envs[EnvCount]; /// Current MIDI velocity float velocity; /// Current calculated mod matrix outputs float moddest[wavetable_metadata::moddest_count]; /// Last oscillator shift (wavetable index) of each oscillator float last_oscshift[OscCount]; /// Last oscillator amplitude of each oscillator float last_oscamp[OscCount]; /// Current osc amplitude float cur_oscamp[OscCount]; public: wavetable_voice(); void set_params_ptr(wavetable_audio_module *_parent, int _srate); void reset(); void note_on(int note, int vel); void note_off(int /* vel */); void channel_pressure(int value); void steal(); void render_block(); virtual int get_current_note() { return note; } virtual bool get_active() { // printf("note %d getactive %d use_percussion %d pamp active %d\n", note, amp.get_active(), use_percussion(), pamp.get_active()); return (note != -1) && (amp.get_active()) && !envs[0].stopped(); } inline void calc_derived_dests() { float cv = dsp::clip(0.5f + moddest[wavetable_metadata::moddest_oscmix], 0.f, 1.f); cur_oscamp[0] = (cv) * *params[wavetable_metadata::par_o1level]; cur_oscamp[1] = (1 - cv) * *params[wavetable_metadata::par_o2level]; } }; class wavetable_audio_module: public audio_module, public dsp::basic_synth, public mod_matrix_impl { public: using dsp::basic_synth::note_on; using dsp::basic_synth::note_off; using dsp::basic_synth::control_change; using dsp::basic_synth::pitch_bend; protected: uint32_t crate; bool panic_flag; public: int16_t tables[wt_count][129][256]; // one dummy level for interpolation /// Rows of the modulation matrix dsp::modulation_entry mod_matrix_data[mod_matrix_slots]; /// Smoothed cutoff value dsp::inertia inertia_cutoff; /// Smoothed pitch bend value dsp::inertia inertia_pitchbend; /// Smoothed channel pressure value dsp::inertia inertia_pressure; /// Unsmoothed mod wheel value float modwheel_value; public: wavetable_audio_module(); dsp::voice *alloc_voice() { dsp::block_voice *v = new dsp::block_voice(); v->set_params_ptr(this, sample_rate); return v; } /// process function copied from Organ (will probably need some adjustments as well as implementing the panic flag elsewhere uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { float *o[2] = { outs[0] + offset, outs[1] + offset }; if (panic_flag) { control_change(120, 0); // stop all sounds control_change(121, 0); // reset all controllers panic_flag = false; } float buf[4096][2]; dsp::zero(&buf[0][0], 2 * nsamples); basic_synth::render_to(buf, nsamples); float gain = 1.0f; for (uint32_t i=0; i #include #include #include using namespace std; using namespace calf_utils; using namespace calf_plugins; float parameter_properties::from_01(double value01) const { double value = dsp::clip(value01, 0., 1.); switch(flags & PF_SCALEMASK) { case PF_SCALE_DEFAULT: case PF_SCALE_LINEAR: case PF_SCALE_PERC: default: value = min + (max - min) * value01; break; case PF_SCALE_QUAD: value = min + (max - min) * value01 * value01; break; case PF_SCALE_LOG: value = min * pow(double(max / min), value01); break; case PF_SCALE_GAIN: if (value01 < 0.00001) value = min; else { float rmin = std::max(1.0f / 1024.0f, min); value = rmin * pow(double(max / rmin), value01); } break; case PF_SCALE_LOG_INF: assert(step); if (value01 > (step - 1.0) / step) value = FAKE_INFINITY; else value = min * pow(double(max / min), value01 * step / (step - 1.0)); break; } switch(flags & PF_TYPEMASK) { case PF_INT: case PF_BOOL: case PF_ENUM: case PF_ENUM_MULTI: if (value > 0) value = (int)(value + 0.5); else value = (int)(value - 0.5); break; } return value; } double parameter_properties::to_01(float value) const { switch(flags & PF_SCALEMASK) { case PF_SCALE_DEFAULT: case PF_SCALE_LINEAR: case PF_SCALE_PERC: default: return double(value - min) / (max - min); case PF_SCALE_QUAD: return sqrt(double(value - min) / (max - min)); case PF_SCALE_LOG: value /= min; return log((double)value) / log((double)max / min); case PF_SCALE_LOG_INF: if (IS_FAKE_INFINITY(value)) return max; value /= min; assert(step); return (step - 1.0) * log((double)value) / (step * log((double)max / min)); case PF_SCALE_GAIN: if (value < 1.0 / 1024.0) // new bottom limit - 60 dB return 0; double rmin = std::max(1.0f / 1024.0f, min); value /= rmin; return log((double)value) / log(max / rmin); } } float parameter_properties::get_increment() const { float increment = 0.01; if (step > 1) increment = 1.0 / (step - 1); else if (step > 0 && step < 1) increment = step; else if ((flags & PF_TYPEMASK) != PF_FLOAT) increment = 1.0 / (max - min); return increment; } int parameter_properties::get_char_count() const { if ((flags & PF_SCALEMASK) == PF_SCALE_PERC) return 6; if ((flags & PF_SCALEMASK) == PF_SCALE_GAIN) { char buf[256]; size_t len = 0; sprintf(buf, "%0.0f dB", 6.0 * log(min) / log(2)); len = strlen(buf); sprintf(buf, "%0.0f dB", 6.0 * log(max) / log(2)); len = std::max(len, strlen(buf)) + 2; return (int)len; } return std::max(to_string(min).length(), std::max(to_string(max).length(), to_string(min + (max-min) * 0.987654).length())); } std::string parameter_properties::to_string(float value) const { char buf[32]; if ((flags & PF_SCALEMASK) == PF_SCALE_PERC) { sprintf(buf, "%0.f%%", 100.0 * value); return string(buf); } if ((flags & PF_SCALEMASK) == PF_SCALE_GAIN) { if (value < 1.0 / 1024.0) // new bottom limit - 60 dB return "-inf dB"; // XXXKF change to utf-8 infinity sprintf(buf, "%0.1f dB", 6.0 * log(value) / log(2)); return string(buf); } switch(flags & PF_TYPEMASK) { case PF_INT: case PF_BOOL: case PF_ENUM: case PF_ENUM_MULTI: value = (int)value; break; } if ((flags & PF_SCALEMASK) == PF_SCALE_LOG_INF && IS_FAKE_INFINITY(value)) sprintf(buf, "+inf"); // XXXKF change to utf-8 infinity else sprintf(buf, "%g", value); switch(flags & PF_UNITMASK) { case PF_UNIT_DB: return string(buf) + " dB"; case PF_UNIT_HZ: return string(buf) + " Hz"; case PF_UNIT_SEC: return string(buf) + " s"; case PF_UNIT_MSEC: return string(buf) + " ms"; case PF_UNIT_CENTS: return string(buf) + " ct"; case PF_UNIT_SEMITONES: return string(buf) + "#"; case PF_UNIT_BPM: return string(buf) + " bpm"; case PF_UNIT_RPM: return string(buf) + " rpm"; case PF_UNIT_DEG: return string(buf) + " deg"; case PF_UNIT_NOTE: { static const char *notes = "C C#D D#E F F#G G#A A#B "; int note = (int)value; if (note < 0 || note > 127) return "---"; return string(notes + 2 * (note % 12), 2) + i2s(note / 12 - 2); } } return string(buf); } void calf_plugins::plugin_ctl_iface::clear_preset() { int param_count = get_metadata_iface()->get_param_count(); for (int i = 0; i < param_count; i++) { const parameter_properties &pp = *get_metadata_iface()->get_param_props(i); set_param_value(i, pp.def_value); } const char *const *vars = get_metadata_iface()->get_configure_vars(); if (vars) { for (int i = 0; vars[i]; i++) configure(vars[i], NULL); } } const char *calf_plugins::load_gui_xml(const std::string &plugin_id) { #if 0 try { return strdup(calf_utils::load_file((std::string(PKGLIBDIR) + "/gui-" + plugin_id + ".xml").c_str()).c_str()); } catch(file_exception e) #endif { return NULL; } } bool calf_plugins::get_freq_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context, bool use_frequencies, float res, float ofs) { if (subindex < 0 ) return false; if (use_frequencies) { if (subindex < 28) { vertical = true; if (subindex == 9) legend = "100 Hz"; if (subindex == 18) legend = "1 kHz"; if (subindex == 27) legend = "10 kHz"; float freq = 100; if (subindex < 9) freq = 10 * (subindex + 1); else if (subindex < 18) freq = 100 * (subindex - 9 + 1); else if (subindex < 27) freq = 1000 * (subindex - 18 + 1); else freq = 10000 * (subindex - 27 + 1); pos = log(freq / 20.0) / log(1000); if (!legend.empty()) context->set_source_rgba(0, 0, 0, 0.2); else context->set_source_rgba(0, 0, 0, 0.1); return true; } subindex -= 28; } if (subindex >= 32) return false; float gain = 16.0 / (1 << subindex); pos = dB_grid(gain, res, ofs); if (pos < -1) return false; if (subindex != 4) context->set_source_rgba(0, 0, 0, subindex & 1 ? 0.1 : 0.2); if (!(subindex & 1)) { std::stringstream ss; ss << (24 - 6 * subindex) << " dB"; legend = ss.str(); } vertical = false; return true; } void calf_plugins::set_channel_color(cairo_iface *context, int channel) { if (channel & 1) context->set_source_rgba(0.35, 0.4, 0.2, 1); else context->set_source_rgba(0.35, 0.4, 0.2, 0.5); context->set_line_width(1.5); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// bool frequency_response_line_graph::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return get_freq_gridline(subindex, pos, vertical, legend, context); } int frequency_response_line_graph::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = 0; subindex_dot = 0; subindex_gridline = generation ? INT_MAX : 0; return 1; } /////////////////////////////////////////////////////////////////////////////////////// calf_plugins::plugin_registry &calf_plugins::plugin_registry::instance() { static calf_plugins::plugin_registry registry; return registry; } const plugin_metadata_iface *calf_plugins::plugin_registry::get_by_uri(const char *plugin_uri) { static const char prefix[] = "http://calf.sourceforge.net/plugins/"; if (strncmp(plugin_uri, prefix, sizeof(prefix) - 1)) return NULL; const char *label = plugin_uri + sizeof(prefix) - 1; for (unsigned int i = 0; i < plugins.size(); i++) { if (!strcmp(plugins[i]->get_plugin_info().label, label)) return plugins[i]; } return NULL; } const plugin_metadata_iface *calf_plugins::plugin_registry::get_by_id(const char *id, bool case_sensitive) { typedef int (*comparator)(const char *, const char *); comparator comp = case_sensitive ? strcmp : strcasecmp; for (unsigned int i = 0; i < plugins.size(); i++) { if (!comp(plugins[i]->get_id(), id)) return plugins[i]; } return NULL; } /////////////////////////////////////////////////////////////////////////////////////// bool calf_plugins::parse_table_key(const char *key, const char *prefix, bool &is_rows, int &row, int &column) { is_rows = false; row = -1; column = -1; if (0 != strncmp(key, prefix, strlen(prefix))) return false; key += strlen(prefix); if (!strcmp(key, "rows")) { is_rows = true; return true; } const char *comma = strchr(key, ','); if (comma) { row = atoi(string(key, comma - key).c_str()); column = atoi(comma + 1); return true; } printf("Unknown key %s under prefix %s", key, prefix); return false; } /////////////////////////////////////////////////////////////////////////////////////// const char *mod_mapping_names[] = { "0..1", "-1..1", "-1..0", "x^2", "2x^2-1", "ASqr", "ASqrBip", "Para", NULL }; mod_matrix_metadata::mod_matrix_metadata(unsigned int _rows, const char **_src_names, const char **_dest_names) : mod_src_names(_src_names) , mod_dest_names(_dest_names) , matrix_rows(_rows) { table_column_info tci[6] = { { "Source", TCT_ENUM, 0, 0, 0, mod_src_names }, { "Mapping", TCT_ENUM, 0, 0, 0, mod_mapping_names }, { "Modulator", TCT_ENUM, 0, 0, 0, mod_src_names }, { "Amount", TCT_FLOAT, 0, 1, 1, NULL}, { "Destination", TCT_ENUM, 0, 0, 0, mod_dest_names }, { NULL } }; assert(sizeof(table_columns) == sizeof(tci)); memcpy(table_columns, tci, sizeof(table_columns)); } const table_column_info *mod_matrix_metadata::get_table_columns() const { return table_columns; } uint32_t mod_matrix_metadata::get_table_rows() const { return matrix_rows; } /////////////////////////////////////////////////////////////////////////////////////// #if USE_EXEC_GUI table_via_configure::table_via_configure() { rows = 0; } table_via_configure::~table_via_configure() { } #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/metadata.cpp000066400000000000000000003276661247673406200225050ustar00rootroot00000000000000/* Calf DSP Library * Example audio modules - parameters and LADSPA wrapper instantiation * * Copyright (C) 2001-2008 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include #include using namespace dsp; using namespace calf_plugins; const char *calf_plugins::calf_copyright_info = "(C) 2001-2009 Krzysztof Foltman, Thor Harald Johanssen, Markus Schmidt and others; license: LGPL"; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(flanger) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(flanger) = { { 0.1, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Min delay" }, { 0.5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "mod_depth", "Mod depth" }, { 0.25, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Mod rate" }, { 0.90, -0.99, 0.99, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "feedback", "Feedback" }, { 0, 0, 360, 9, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" }, { 0, 0, 1, 2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" }, { 1, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, {} }; CALF_PLUGIN_INFO(flanger) = { 0x847d, "Flanger", "Calf Flanger", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "FlangerPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(phaser) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(phaser) = { { 1000, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "base_freq", "Center Freq" }, { 4000, 0, 10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "mod_depth", "Mod depth" }, { 0.25, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Mod rate" }, { 0.25, -0.99, 0.99, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "feedback", "Feedback" }, { 6, 1, 12, 12, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "stages", "# Stages" }, { 180, 0, 360, 9, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" }, { 0, 0, 1, 2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" }, { 1, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, }; CALF_PLUGIN_INFO(phaser) = { 0x8484, "Phaser", "Calf Phaser", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "PhaserPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(reverb) = {"In L", "In R", "Out L", "Out R"}; const char *reverb_room_sizes[] = { "Small", "Medium", "Large", "Tunnel-like", "Large/smooth", "Experimental" }; CALF_PORT_PROPS(reverb) = { { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip", "0dB" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_wet", "Wet amount" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 1.5, 0.4, 15.0, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "decay_time", "Decay time" }, { 5000, 2000,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hf_damp", "High Frq Damp" }, { 2, 0, 5, 0, PF_ENUM | PF_CTL_COMBO , reverb_room_sizes, "room_size", "Room size", }, { 0.5, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "diffusion", "Diffusion" }, { 0.25, 0, 2, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Wet Amount" }, { 1.0, 0, 2, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, { 0, 0, 50, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "predelay", "Pre Delay" }, { 300, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "bass_cut", "Bass Cut" }, { 5000, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "treble_cut", "Treble Cut" }, {} }; CALF_PLUGIN_INFO(reverb) = { 0x847e, "Reverb", "Calf Reverb", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "ReverbPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(filter) = {"In L", "In R", "Out L", "Out R"}; const char *filter_choices[] = { "12dB/oct Lowpass", "24dB/oct Lowpass", "36dB/oct Lowpass", "12dB/oct Highpass", "24dB/oct Highpass", "36dB/oct Highpass", "6dB/oct Bandpass", "12dB/oct Bandpass", "18dB/oct Bandpass", "6dB/oct Bandreject", "12dB/oct Bandreject", "18dB/oct Bandreject", }; CALF_PORT_PROPS(filter) = { { 2000, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq", "Frequency" }, { 0.707, 0.707, 32, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "res", "Resonance" }, { biquad_filter_module::mode_12db_lp, biquad_filter_module::mode_12db_lp, biquad_filter_module::mode_count - 1, 1, PF_ENUM | PF_CTL_COMBO, filter_choices, "mode", "Mode" }, { 20, 5, 100, 20, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "inertia", "Inertia"}, }; CALF_PLUGIN_INFO(filter) = { 0x847f, "Filter", "Calf Filter", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "FilterPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(filterclavier) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(filterclavier) = { { 0, -48, 48, 48*2+1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "transpose", "Transpose" }, { 0, -100, 100, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune", "Detune" }, { 32, 0.707, 32, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "maxres", "Max. Resonance" }, { biquad_filter_module::mode_6db_bp, biquad_filter_module::mode_12db_lp, biquad_filter_module::mode_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, filter_choices, "mode", "Mode" }, { 20, 1, 2000, 20, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "inertia", "Portamento time"}, {} }; CALF_PLUGIN_INFO(filterclavier) = { 0x849f, "Filterclavier", "Calf Filterclavier", "Krzysztof Foltman / Hans Baier", calf_plugins::calf_copyright_info, "FilterclavierPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(vintage_delay) = {"In L", "In R", "Out L", "Out R"}; const char *vintage_delay_mixmodes[] = { "Stereo", "Ping-Pong", "L then R", "R then L", }; const char *vintage_delay_fbmodes[] = { "Plain", "Tape", "Old Tape", }; CALF_PORT_PROPS(vintage_delay) = { { 120, 30, 300, 1, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_BPM, NULL, "bpm", "Tempo" }, { 4, 1, 16, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "subdiv", "Subdivide"}, { 3, 1, 16, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "time_l", "Time L"}, { 5, 1, 16, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "time_r", "Time R"}, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "feedback", "Feedback" }, { 0.25, 0, 4, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "amount", "Amount" }, { 1, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, vintage_delay_mixmodes, "mix_mode", "Mix mode" }, { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, vintage_delay_fbmodes, "medium", "Medium" }, { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, { 1.0, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "width", "Stereo Width" }, {} }; CALF_PLUGIN_INFO(vintage_delay) = { 0x8482, "VintageDelay", "Calf Vintage Delay", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "DelayPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(rotary_speaker) = {"In L", "In R", "Out L", "Out R"}; const char *rotary_speaker_speed_names[] = { "Off", "Chorale", "Tremolo", "HoldPedal", "ModWheel", "Manual" }; CALF_PORT_PROPS(rotary_speaker) = { { 5, 0, 5, 1.01, PF_ENUM | PF_CTL_COMBO, rotary_speaker_speed_names, "vib_speed", "Speed Mode" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "spacing", "Tap Spacing" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "shift", "Tap Offset" }, { 0.45, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mod_depth", "FM Depth" }, { 36, 10, 600, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "treble_speed", "Treble Motor" }, { 30, 10, 600, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "bass_speed", "Bass Motor" }, { 0.7, 0, 1, 101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mic_distance", "Mic Distance" }, { 0.3, 0, 1, 101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "reflection", "Reflection" }, { 0.45, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "am_depth", "AM Depth" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "test", "Test" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_l", "Low rotor" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_h", "High rotor" }, {} }; CALF_PLUGIN_INFO(rotary_speaker) = { 0x8483, "RotarySpeaker", "Calf Rotary Speaker", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SimulatorPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(multichorus) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(multichorus) = { { 5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Min delay" }, { 6, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC| PF_PROP_GRAPH, NULL, "mod_depth", "Mod depth" }, { 0.5, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ| PF_PROP_GRAPH, NULL, "mod_rate", "Modulation rate" }, { 180, 0, 360, 91, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" }, { 4, 1, 8, 8, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "voices", "Voices"}, { 64, 0, 360, 91, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "vphase", "Inter-voice phase" }, { 2, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, { 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" }, { 100, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq", "Center Frq 1" }, { 5000, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Center Frq 2" }, { 0.125, 0.125, 8, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "q", "Q" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "overlap", "Overlap" }, }; CALF_PLUGIN_INFO(multichorus) = { 0x8501, "MultiChorus", "Calf MultiChorus", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "ChorusPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(compressor) = {"In L", "In R", "Out L", "Out R"}; const char *compressor_detection_names[] = { "RMS", "Peak" }; const char *compressor_stereo_link_names[] = { "Average", "Maximum" }; CALF_PORT_PROPS(compressor) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, compressor_detection_names, "detection", "Detection" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, compressor_stereo_link_names, "stereo_link", "Stereo Link" }, { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Reduction" }, {} }; CALF_PLUGIN_INFO(compressor) = { 0x8502, "Compressor", "Calf Compressor", "Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(sidechaincompressor) = {"In L", "In R", "Out L", "Out R"}; const char *sidechaincompressor_detection_names[] = { "RMS", "Peak" }; const char *sidechaincompressor_stereo_link_names[] = { "Average", "Maximum" }; const char *sidechaincompressor_mode_names[] = {"Wideband (F1:off / F2:off)", "Deesser wide (F1:Bell / F2:HP)", "Deesser split (F1:off / F2:HP)", "Derumbler wide (F1:LP / F2:Bell)", "Derumbler split (F1:LP / F2:off)", "Weighted #1 (F1:Shelf / F2:Shelf)", "Weighted #2 (F1:Shelf / F2:Bell)", "Weighted #3 (F1:Bell / F2:Shelf)", "Bandpass #1 (F1:BP / F2:off)", "Bandpass #2 (F1:HP / F2:LP)"}; const char *sidechaincompressor_route_names[] = {"Stereo Input (Default)", "R ▸ L (L: Signal / R: S/C)", "L ▸ R (L: S/C / R: Signal)"}; const char *sidechaincompressor_filter_choices[] = { "12dB", "24dB", "36dB"}; CALF_PORT_PROPS(sidechaincompressor) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_detection_names, "detection", "Detection" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_stereo_link_names, "stereo_link", "Stereo Link" }, { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Gain Reduction" }, { 0, 0, 9, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_mode_names, "sc_mode", "S/C Mode" }, { 250, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "F1 Freq" }, { 4500, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "F2 Freq" }, { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "F1 Level" }, { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "F2 Level" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f1_active", "F1 Active" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f2_active", "F2 Active" }, { 0, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, sidechaincompressor_route_names, "sc_route", "S/C Route" }, { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "sc_level", "S/C Level" }, {} }; CALF_PLUGIN_INFO(sidechaincompressor) = { 0x8517, "Sidechaincompressor", "Calf Sidechain Compressor", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(multibandcompressor) = {"In L", "In R", "Out L", "Out R"}; const char *multibandcompressor_detection_names[] = { "RMS", "Peak" }; const char *multibandcompressor_filter_choices[] = { "12dB", "36dB"}; CALF_PORT_PROPS(multibandcompressor) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, { 120, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" }, { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" }, { 6000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" }, { 1, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_filter_choices, "mode", "Filter Mode" }, { 0.25, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold0", "Threshold 1" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio0", "Ratio 1" }, { 150, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack0", "Attack 1" }, { 300, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release0", "Release 1" }, { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup0", "Makeup 1" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee0", "Knee 1" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection0", "Detection 1" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression0", "Gain Reduction 1" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output0", "Output 1" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass0", "Bypass 1" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo0", "Solo 1" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold1", "Threshold 2" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio1", "Ratio 2" }, { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack1", "Attack 2" }, { 200, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release1", "Release 2" }, { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup1", "Makeup 2" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee1", "Knee 2" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection1", "Detection 2" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression1", "Gain Reduction 2" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output1", "Output 2" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass1", "Bypass 2" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo1", "Solo 2" }, { 0.0625, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold2", "Threshold 3" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio2", "Ratio 3" }, { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack2", "Attack 3" }, { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release2", "Release 3" }, { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup2", "Makeup 3" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee2", "Knee 3" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection2", "Detection 3" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression2", "Gain Reduction 3" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output2", "Output 3" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass2", "Bypass 3" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo2", "Solo 3" }, { 0.03125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold3", "Threshold 4" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio3", "Ratio 4" }, { 25, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack3", "Attack 4" }, { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release3", "Release 4" }, { 2, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup3", "Makeup 4" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee3", "Knee 4" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection3", "Detection 4" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression3", "Gain Reduction 4" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output3", "Output 4" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass3", "Bypass 4" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo3", "Solo 4" }, {} }; CALF_PLUGIN_INFO(multibandcompressor) = { 0x8516, "Multibandcompressor", "Calf Multiband Compressor", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(deesser) = {"In L", "In R", "Out L", "Out R"}; const char *deesser_detection_names[] = { "RMS", "Peak" }; const char *deesser_mode_names[] = { "Wide", "Split" }; CALF_PORT_PROPS(deesser) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "detected", "Detected" }, { 0, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "compression", "Gain Reduction" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "detected_led", "Active" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "Out" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, deesser_detection_names, "detection", "Detection" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, deesser_mode_names, "mode", "Mode" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, { 3, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, { 15, 1, 100, 1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "laxity", "Laxity" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup" }, { 6000, 10, 18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "Split" }, { 4500, 10, 18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "Peak" }, { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "Gain" }, { 4, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "Level" }, { 1, 0.1, 100,1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "f2_q", "Peak Q" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" }, {} }; CALF_PLUGIN_INFO(deesser) = { 0x8515, "Deesser", "Calf Deesser", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info, "CompressorPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(gate) = {"In L", "In R", "Out L", "Out R"}; const char *gate_detection_names[] = { "RMS", "Peak" }; const char *gate_stereo_link_names[] = { "Average", "Maximum" }; CALF_PORT_PROPS(gate) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range", "Max Gain Reduction" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, gate_detection_names, "detection", "Detection" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, gate_stereo_link_names, "stereo_link", "Stereo Link" }, { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating", "Gating" }, {} }; CALF_PLUGIN_INFO(gate) = { 0x8503, "Gate", "Calf Gate", "Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(sidechaingate) = {"In L", "In R", "Out L", "Out R"}; const char *sidechaingate_detection_names[] = { "RMS", "Peak" }; const char *sidechaingate_stereo_link_names[] = { "Average", "Maximum" }; const char *sidechaingate_mode_names[] = {"Wideband (F1:off / F2:off)", "High gate wide (F1:Bell / F2:HP)", "High gate split (F1:off / F2:HP)", "Low Gate wide (F1:LP / F2:Bell)", "Low gate split (F1:LP / F2:off)", "Weighted #1 (F1:Shelf / F2:Shelf)", "Weighted #2 (F1:Shelf / F2:Bell)", "Weighted #3 (F1:Bell / F2:Shelf)", "Bandpass #1 (F1:BP / F2:off)", "Bandpass #2 (F1:HP / F2:LP)"}; const char *sidechaingate_route_names[] = {"Stereo Input (Default)", "R ▸ L (L: Signal / R: S/C)", "L ▸ R (L: S/C / R: Signal)"}; const char *sidechaingate_filter_choices[] = { "12dB", "24dB", "36dB"}; CALF_PORT_PROPS(sidechaingate) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB-Out" }, { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range", "Max Gain Reduction" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold", "Threshold" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio", "Ratio" }, { 20, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" }, { 250, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup", "Makeup Gain" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee", "Knee" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_detection_names, "detection", "Detection" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_stereo_link_names, "stereo_link", "Stereo Link" }, { 0, 0.03125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating", "Gating" }, { 0, 0, 9, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_mode_names, "sc_mode", "S/C Mode" }, { 250, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "f1_freq", "F1 Freq" }, { 4500, 10,18000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "f2_freq", "F2 Freq" }, { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f1_level", "F1 Level" }, { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "f2_level", "F2 Level" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "sc_listen", "S/C-Listen" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f1_active", "F1 Active" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "f2_active", "F2 Active" }, { 0, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, sidechaingate_route_names, "sc_route", "S/C Route" }, { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "sc_level", "S/C Level" }, {} }; CALF_PLUGIN_INFO(sidechaingate) = { 0x8504, "Sidechaingate", "Calf Sidechain Gate", "Markus Schmidt / Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(multibandgate) = {"In L", "In R", "Out L", "Out R"}; const char *multibandgate_detection_names[] = { "RMS", "Peak" }; const char *multibandgate_filter_choices[] = { "12dB", "36dB"}; CALF_PORT_PROPS(multibandgate) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, { 120, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" }, { 1000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" }, { 6000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" }, { 1, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandgate_filter_choices, "mode", "Filter Mode" }, { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range0", "Reduction 1" }, { 0.25, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold0", "Threshold 1" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio0", "Ratio 1" }, { 150, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack0", "Attack 1" }, { 300, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release0", "Release 1" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup0", "Makeup 1" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee0", "Knee 1" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection0", "Detection 1" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating0", "Gating 1" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output0", "Output 1" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass0", "Bypass 1" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo0", "Solo 1" }, { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range1", "Reduction 2" }, { 0.125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold1", "Threshold 2" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio1", "Ratio 2" }, { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack1", "Attack 2" }, { 200, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release1", "Release 2" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup1", "Makeup 2" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee1", "Knee 2" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection1", "Detection 2" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating1", "Gating 2" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output1", "Output 2" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass1", "Bypass 2" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo1", "Solo 2" }, { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range2", "Reduction 3" }, { 0.0625, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold2", "Threshold 3" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio2", "Ratio 3" }, { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack2", "Attack 3" }, { 100, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release2", "Release 3" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup2", "Makeup 3" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee2", "Knee 3" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection2", "Detection 3" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating2", "Gating 3" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output2", "Output 3" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass2", "Bypass 3" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo2", "Solo 3" }, { 0.06125, 0.000015849, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "range3", "Reduction 4" }, { 0.03125, 0.000976563, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "threshold3", "Threshold 4" }, { 2, 1, 20, 21, PF_FLOAT | PF_SCALE_LOG_INF | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "ratio3", "Ratio 4" }, { 25, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack3", "Attack 4" }, { 50, 0.01, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release3", "Release 4" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "makeup3", "Makeup 4" }, { 2.828427125, 1, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "knee3", "Knee 4" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandcompressor_detection_names, "detection3", "Detection 4" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "gating3", "Gating 4" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "output3", "Output 4" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass3", "Bypass 4" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo3", "Solo 4" }, {} }; CALF_PLUGIN_INFO(multibandgate) = { 0x8505, "Multibandgate", "Calf Multiband Gate", "Markus Schmidt / Damien Zammit / Thor Harald Johansen", calf_plugins::calf_copyright_info, "ExpanderPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(limiter) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(limiter) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "limit", "Limit" }, { 5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Lookahead" }, { 50, 1, 1000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att", "Attenuation" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "asc", "ASC" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "asc_led", "asc active" }, { 0.5f, 0.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "asc_coeff", "ASC Level" }, {} }; CALF_PLUGIN_INFO(limiter) = { 0x8521, "Limiter", "Calf Limiter", "Christian Holschuh / Markus Schmidt", calf_plugins::calf_copyright_info, "LimiterPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(multibandlimiter) = {"In L", "In R", "Out L", "Out R"}; const char *multibandlimiter_filter_choices[] = { "12dB", "36dB"}; CALF_PORT_PROPS(multibandlimiter) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, { 100, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq0", "Split 1/2" }, { 750, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq1", "Split 2/3" }, { 5000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "freq2", "Split 3/4" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep0", "S1" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep1", "S2" }, { -0.17, -0.5, 0.5, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sep2", "S3" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q0", "Q1" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q1", "Q2" }, { 0.7762471166286917, 0.25, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_GRAPH, NULL, "q2", "Q3" }, { 1, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, multibandlimiter_filter_choices, "mode", "Filter Mode" }, { 1, 0.0625, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "limit", "Limit" }, { 4, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Lookahead" }, { 30, 1, 1000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "minrel", "Min Release" }, { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att0", "Low" }, { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att1", "LMid" }, { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att2", "HMid" }, { 1, 0.125, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att3", "Hi" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight0", "Weight 1" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight1", "Weight 2" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight2", "Weight 3" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight3", "Weight 4" }, { 0.5f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release0", "Release 1" }, { 0.2f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release1", "Release 2" }, { -0.2f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release2", "Release 3" }, { -0.5f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release3", "Release 4" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo0", "Solo 1" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo1", "Solo 2" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo2", "Solo 3" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "solo3", "Solo 4" }, { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease0", "Effectively Release 1" }, { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease1", "Effectively Release 2" }, { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease2", "Effectively Release 3" }, { 1, 0.f, 1000, 0, PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease3", "Effectively Release 4" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "asc", "ASC" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "asc_led", "asc active" }, { 0.5f, 0.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "asc_coeff", "ASC Level" }, {} }; CALF_PLUGIN_INFO(multibandlimiter) = { 0x8520, "Multibandlimiter", "Calf Multiband Limiter", "Markus Schmidt / Christian Holschuh", calf_plugins::calf_copyright_info, "LimiterPlugin" }; //////////////////////////////////////////////////////////////////////////// // A few macros to make #define BYPASS_AND_LEVEL_PARAMS \ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, \ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input Gain" }, \ { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output Gain" }, #define METERING_PARAMS \ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Meter-InL" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Meter-InR" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Meter-OutL" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Meter-OutR" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, \ { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, #define LPHP_PARAMS \ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "HP Active" }, \ { 30, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_freq", "HP Freq" }, \ { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hp_mode", "HP Mode" }, \ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "LP Active" }, \ { 18000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_freq", "LP Freq" }, \ { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lp_mode", "LP Mode" }, \ #define SHELF_PARAMS \ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "LS Active" }, \ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level L" }, \ { 200, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ls_freq", "Freq L" }, \ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "HS Active" }, \ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level H" }, \ { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hs_freq", "Freq H" }, #define EQ_BAND_PARAMS(band, frequency) \ { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p" #band "_active", "F" #band " Active" }, \ { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p" #band "_level", "Level " #band }, \ { frequency, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "p" #band "_freq", "Freq " #band }, \ { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p" #band "_q", "Q " #band }, //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(equalizer5band) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(equalizer5band) = { BYPASS_AND_LEVEL_PARAMS METERING_PARAMS SHELF_PARAMS EQ_BAND_PARAMS(1, 250) EQ_BAND_PARAMS(2, 1000) EQ_BAND_PARAMS(3, 2500) {} }; CALF_PLUGIN_INFO(equalizer5band) = { 0x8511, "Equalizer5Band", "Calf Equalizer 5 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" }; ////////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(equalizer8band) = {"In L", "In R", "Out L", "Out R"}; const char *rolloff_mode_names[] = {"12dB/oct", "24dB/oct", "36dB/oct"}; CALF_PORT_PROPS(equalizer8band) = { BYPASS_AND_LEVEL_PARAMS METERING_PARAMS LPHP_PARAMS SHELF_PARAMS EQ_BAND_PARAMS(1, 250) EQ_BAND_PARAMS(2, 1000) EQ_BAND_PARAMS(3, 2500) EQ_BAND_PARAMS(4, 5000) {} }; CALF_PLUGIN_INFO(equalizer8band) = { 0x8512, "Equalizer8Band", "Calf Equalizer 8 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(equalizer12band) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(equalizer12band) = { BYPASS_AND_LEVEL_PARAMS METERING_PARAMS LPHP_PARAMS SHELF_PARAMS EQ_BAND_PARAMS(1, 60) EQ_BAND_PARAMS(2, 120) EQ_BAND_PARAMS(3, 250) EQ_BAND_PARAMS(4, 500) EQ_BAND_PARAMS(5, 1000) EQ_BAND_PARAMS(6, 2500) EQ_BAND_PARAMS(7, 4000) EQ_BAND_PARAMS(8, 6000) {} }; CALF_PLUGIN_INFO(equalizer12band) = { 0x8513, "Equalizer12Band", "Calf Equalizer 12 Band", "Markus Schmidt", calf_plugins::calf_copyright_info, "EqualizerPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(pulsator) = {"In L", "In R", "Out L", "Out R"}; const char *pulsator_mode_names[] = { "Sine", "Triangle", "Square", "Saw up", "Saw down" }; CALF_PORT_PROPS(pulsator) = { BYPASS_AND_LEVEL_PARAMS METERING_PARAMS { 0, 0, 4, 0, PF_ENUM | PF_CTL_COMBO, pulsator_mode_names, "mode", "Mode" }, { 1, 0.01, 100, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "freq", "Frequency" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "amount", "Modulation" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "offset", "Offset L/R" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "mono", "Mono-in" }, { 0, 0, 1, 2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" }, {} }; CALF_PLUGIN_INFO(pulsator) = { 0x8514, "Pulsator", "Calf Pulsator", "Markus Schmidt", calf_plugins::calf_copyright_info, "ModulationPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(saturator) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(saturator) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 1, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Activation" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Master" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "mix", "Mix" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" }, { 5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "drive", "Saturation" }, { 10, -10, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_COEF, NULL, "blend", "Blend" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_drive", "Drive" }, { 20000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_pre_freq", "Lowpass" }, { 10, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_pre_freq", "Highpass" }, { 20000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_post_freq", "Lowpass" }, { 10, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_post_freq", "Highpass" }, { 2000, 80, 8000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "p_freq", "Tone" }, { 1, 0.0625, 16, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p_level", "Amount" }, { 1, 0.1, 10, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p_q", "Gradient" }, {} }; CALF_PLUGIN_INFO(saturator) = { 0x8530, "Saturator", "Calf Saturator", "Markus Schmidt / Krzysztof Foltman", calf_plugins::calf_copyright_info, "DistortionPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(exciter) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(exciter) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" }, { 8.5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "drive", "Harmonics" }, { 0, -10, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_COEF, NULL, "blend", "Blend harmonics" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_drive", "Harmonics level" }, { 6000, 2000, 12000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "freq", "Scope" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "listen", "Listen" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ceil_active", "Ceiling active" }, { 16000, 10000, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ceil", "Ceiling" }, {} }; CALF_PLUGIN_INFO(exciter) = { 0x8531, "Exciter", "Calf Exciter", "Markus Schmidt / Krzysztof Foltman", calf_plugins::calf_copyright_info, "DistortionPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(bassenhancer) = {"In L", "In R", "Out L", "Out R"}; CALF_PORT_PROPS(bassenhancer) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB | PF_PROP_NOBOUNDS, NULL, "amount", "Amount" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_out", "0dB" }, { 8.5, 0.1, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "drive", "Harmonics" }, { 0, -10, 10, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_COEF, NULL, "blend", "Blend harmonics" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_drive", "Harmonics level" }, { 120, 10, 250, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "freq", "Scope" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "listen", "Listen" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "floor_active", "Floor active" }, { 30, 10, 120, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "floor", "Floor" }, {} }; CALF_PLUGIN_INFO(bassenhancer) = { 0x8532, "BassEnhancer", "Calf Bass Enhancer", "Markus Schmidt / Krzysztof Foltman", calf_plugins::calf_copyright_info, "DistortionPlugin" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(mono) = {"In", "Out L", "Out R"}; CALF_PORT_PROPS(mono) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_in", "Input" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_in", "0dB-In" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "balance_out", "Balance" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "softclip", "Softclip" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "mutel", "Mute L" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "muter", "Mute R" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phasel", "Phase L" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phaser", "Phase R" }, { 0.f, -20.f, 20.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "delay", "Delay" }, {} }; CALF_PLUGIN_INFO(mono) = { 0x8589, "MonoInput", "Calf Mono Input", "Markus Schmidt", calf_plugins::calf_copyright_info, "Utility" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(stereo) = {"In L", "In R", "Out L", "Out R"}; const char *stereo_mode_names[] = { "LR ▸ LR (Stereo Default)", "LR ▸ MS (Stereo to Mid-Side)", "MS ▸ LR (Mid-Side to Stereo)", "LR ▸ LL (Mono Left Channel)", "LR ▸ RR (Mono Right Channel)", "LR ▸ L+R (Mono Sum L+R)", "LR ▸ RL (Stereo Flip Channels)" }; CALF_PORT_PROPS(stereo) = { { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" }, { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Input L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Input R" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Output L" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Output R" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "balance_in", "Balance In" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "balance_out", "Balance Out" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "softclip", "Softclip" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "mutel", "Mute L" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "muter", "Mute R" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phasel", "Phase L" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "phaser", "Phase R" }, { 0, 0, 6, 0, PF_ENUM | PF_CTL_COMBO, stereo_mode_names, "mode", "Mode" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "slev", "S Level" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sbal", "S Balance" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "mlev", "M Level" }, { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "mpan", "M Panorama" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "widener", "Widener" }, { 0.f, -20.f, 20.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "delay", "Delay" }, { 0.f, 0.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_COEF | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_phase", "Phase Correlation" }, {} }; CALF_PLUGIN_INFO(stereo) = { 0x8588, "StereoTools", "Calf Stereo Tools", "Markus Schmidt", calf_plugins::calf_copyright_info, "Utility" }; //////////////////////////////////////////////////////////////////////////// CALF_PORT_NAMES(monosynth) = { "Out L", "Out R", }; const char *monosynth_waveform_names[] = { "Sawtooth", "Square", "Pulse", "Sine", "Triangle", "Varistep", "Skewed Saw", "Skewed Square", "Smooth Brass", "Bass", "Dark FM", "Multiwave", "Bell FM", "Dark Pad", "DCO Saw", "DCO Maze" }; const char *monosynth_mode_names[] = { "0\xC2\xB0 : 0\xC2\xB0", "0\xC2\xB0 : 180\xC2\xB0", "0\xC2\xB0 : 90\xC2\xB0", "90\xC2\xB0 : 90\xC2\xB0", "90\xC2\xB0 : 270\xC2\xB0", "Random" }; const char *monosynth_legato_names[] = { "Retrig", "Legato", "Fng Retrig", "Fng Legato" }; const char *monosynth_lfotrig_names[] = { "Retrig", "Free" }; const char *monosynth_filter_choices[] = { "12dB/oct Lowpass", "24dB/oct Lowpass", "2x12dB/oct Lowpass", "12dB/oct Highpass", "Lowpass+Notch", "Highpass+Notch", "6dB/oct Bandpass", "2x6dB/oct Bandpass", }; CALF_PLUGIN_INFO(monosynth) = { 0x8480, "Monosynth", "Calf Monosynth", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; CALF_PORT_PROPS(monosynth) = { { monosynth_metadata::wave_saw, 0, monosynth_metadata::wave_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_waveform_names, "o1_wave", "Osc1 Wave" }, { monosynth_metadata::wave_sqr, 0, monosynth_metadata::wave_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_waveform_names, "o2_wave", "Osc2 Wave" }, { 0, -1, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o1_pw", "Osc1 PW" }, { 0, -1, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o2_pw", "Osc2 PW" }, { 10, 0, 100, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o12_detune", "O1<>2 Detune" }, { 12, -24, 24, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o2_xpose", "Osc 2 transpose" }, { 0, 0, 5, 0, PF_ENUM | PF_CTL_COMBO, monosynth_mode_names, "phase_mode", "Phase mode" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "o12_mix", "O1<>2 Mix" }, { 1, 0, 7, 0, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_filter_choices, "filter", "Filter" }, { 33, 10,16000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "cutoff", "Cutoff" }, { 3, 0.7, 8, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB, NULL, "res", "Resonance" }, { 0, -2400, 2400, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "filter_sep", "Separation" }, { 8000, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "env2cutoff", "Env->Cutoff" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "env2res", "Env->Res" }, { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "env2amp", "Env->Amp" }, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" }, { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_f", "EG1 Fade" }, { 100, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" }, { 0, 0, 2, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "key_follow", "Key Follow" }, { 0, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, monosynth_legato_names, "legato", "Legato Mode" }, { 1, 1, 2000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "portamento", "Portamento" }, { 0.5, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "vel2filter", "Vel->Filter" }, { 0, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "vel2amp", "Vel->Amp" }, { 0.5, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_PROP_OUTPUT_GAIN, NULL, "master", "Volume" }, { 200, 0, 2400, 25, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "pbend_range", "PBend Range" }, { 5, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lfo_rate", "LFO1 Rate" }, { 0.5, 0, 5, 0, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "lfo_delay", "LFO1 Delay" }, { 0, -4800, 4800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "lfo2filter", "LFO1->Filter" }, { 100, 0, 1200, 0, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "lfo2pitch", "LFO1->Pitch" }, { 0, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "lfo2pw", "LFO1->PW" }, { 1, 0, 1, 0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "mwhl2lfo", "ModWheel->LFO1" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "scale_detune", "Scale Detune" }, { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "adsr2_cutoff", "EG2->Cutoff" }, { 0.3, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "adsr2_res", "EG2->Res" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "adsr2_amp", "EG2->Amp" }, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" }, { 100, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" }, { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_f", "EG2 Fade" }, { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_FADER | PF_UNIT_MSEC, NULL, "adsr2_r", "Release" }, { 1, 1, 16, 0, PF_FLOAT | PF_SCALE_LOG | PF_UNIT_COEF | PF_CTL_KNOB, NULL, "o1_stretch", "Osc1 Stretch" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o1_window", "Osc1 Window" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, monosynth_lfotrig_names, "lfo1_trig", "LFO1 Trigger Mode" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, monosynth_lfotrig_names, "lfo2_trig", "LFO2 Trigger Mode" }, { 5, 0.01, 20, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lfo2_rate", "LFO1 Rate" }, { 0.5, 0.1, 5, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "lfo2_delay", "LFO1 Delay" }, {} }; static const char *monosynth_mod_src_names[] = { "None", "Velocity", "Pressure", "ModWheel", "Envelope 1", "Envelope 2", "LFO 1", "LFO 2", NULL }; static const char *monosynth_mod_dest_names[] = { "None", "Attenuation", "Osc Mix Ratio (%)", "Cutoff [ct]", "Resonance", "O1: Detune [ct]", "O2: Detune [ct]", "O1: PW (%)", "O2: PW (%)", "O1: Stretch", NULL }; monosynth_metadata::monosynth_metadata() : mm_metadata(mod_matrix_slots, monosynth_mod_src_names, monosynth_mod_dest_names) { } const char *const *monosynth_metadata::get_configure_vars() const { return mod_matrix_impl::get_configure_vars(); } //////////////////////////////////////////////////////////////////////////// CALF_PLUGIN_INFO(organ) = { 0x8481, "Organ", "Calf Organ", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; plugin_command_info *organ_metadata::get_commands() { static plugin_command_info cmds[] = { { "cmd_panic", "Panic!", "Stop all sounds and reset all controllers" }, { NULL } }; return cmds; } CALF_PORT_NAMES(organ) = {"Out L", "Out R"}; const char *organ_percussion_trigger_names[] = { "First note", "Each note", "Each, no retrig", "Polyphonic" }; const char *organ_wave_names[] = { "Sin", "S0", "S00", "S000", "SSaw", "SSqr", "SPls", "Saw", "Sqr", "Pls", "S(", "Sq(", "S+", "Clvg", "Bell", "Bell2", "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8", "W9", "DSaw", "DSqr", "DPls", "P:SynStr","P:WideStr","P:Sine","P:Bell","P:Space","P:Voice","P:Hiss","P:Chant", }; const char *organ_routing_names[] = { "Out", "Flt 1", "Flt 2" }; const char *organ_ampctl_names[] = { "None", "Direct", "Flt 1", "Flt 2", "All" }; const char *organ_vibrato_mode_names[] = { "None", "Direct", "Flt 1", "Flt 2", "Voice", "Global" }; const char *organ_vibrato_type_names[] = { "Allpass", "Scanner (V1/C1)", "Scanner (V2/C2)", "Scanner (V3/C3)", "Scanner (Full)" }; const char *organ_filter_type_names[] = { "12dB/oct LP", "12dB/oct HP" }; const char *organ_filter_send_names[] = { "Output", "Filter 2" }; const char *organ_init_map_curve = "2\n0 1\n1 1\n"; CALF_PORT_PROPS(organ) = { { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l1", "16'" }, { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l2", "5 1/3'" }, { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l3", "8'" }, { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l4", "4'" }, { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l5", "2 2/3'" }, { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l6", "2'" }, { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l7", "1 3/5'" }, { 0, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l8", "1 1/3'" }, { 8, 0, 8, 80, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "l9", "1'" }, { 1, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f1", "Freq 1" }, { 3, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f2", "Freq 2" }, { 2, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f3", "Freq 3" }, { 4, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f4", "Freq 4" }, { 6, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f5", "Freq 5" }, { 8, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f6", "Freq 6" }, { 10, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f7", "Freq 7" }, { 12, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f8", "Freq 8" }, { 16, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "f9", "Freq 9" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w1", "Wave 1" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w2", "Wave 2" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w3", "Wave 3" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w4", "Wave 4" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w5", "Wave 5" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w6", "Wave 6" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w7", "Wave 7" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w8", "Wave 8" }, { 0, 0, organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "w9", "Wave 9" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune1", "Detune 1" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune2", "Detune 2" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune3", "Detune 3" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune4", "Detune 4" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune5", "Detune 5" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune6", "Detune 6" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune7", "Detune 7" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune8", "Detune 8" }, { 0, -100,100, 401, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune9", "Detune 9" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase1", "Phase 1" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase2", "Phase 2" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase3", "Phase 3" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase4", "Phase 4" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase5", "Phase 5" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase6", "Phase 6" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase7", "Phase 7" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase8", "Phase 8" }, { 0, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "phase9", "Phase 9" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan1", "Pan 1" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan2", "Pan 2" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan3", "Pan 3" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan4", "Pan 4" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan5", "Pan 5" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan6", "Pan 6" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan7", "Pan 7" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan8", "Pan 8" }, { 0, -1, 1, 201, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "pan9", "Pan 9" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing1", "Routing 1" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing2", "Routing 2" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing3", "Routing 3" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing4", "Routing 4" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing5", "Routing 5" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing6", "Routing 6" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing7", "Routing 7" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing8", "Routing 8" }, { 0, 0, 2, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_routing_names, "routing9", "Routing 9" }, { 96 + 12, 0, 127, 128, PF_INT | PF_CTL_KNOB | PF_UNIT_NOTE, NULL, "foldnote", "Foldover" }, { 200, 10, 3000, 100, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "perc_decay", "P: Carrier Decay" }, { 0.25, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB, NULL, "perc_level", "P: Level" }, { 0, 0, organ_enums::wave_count_small - 1, 1, PF_ENUM | PF_CTL_COMBO, organ_wave_names, "perc_waveform", "P: Carrier Wave" }, { 6, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "perc_harmonic", "P: Carrier Frq" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "perc_vel2amp", "P: Vel->Amp" }, { 200, 10, 3000, 100, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "perc_fm_decay", "P: Modulator Decay" }, { 0, 0, 4, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "perc_fm_depth", "P: FM Depth" }, { 0, 0, organ_enums::wave_count_small - 1, 1, PF_ENUM | PF_CTL_COMBO, organ_wave_names, "perc_fm_waveform", "P: Modulator Wave" }, { 6, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "perc_fm_harmonic", "P: Modulator Frq" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "perc_vel2fm", "P: Vel->FM" }, { 0, 0, organ_enums::perctrig_count - 1, 0, PF_ENUM | PF_CTL_COMBO, organ_percussion_trigger_names, "perc_trigger", "P: Trigger" }, { 90, 0,360, 361, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "perc_stereo", "P: Stereo Phase" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, organ_filter_send_names, "filter_chain", "Filter 1 To" }, { 0, 0, 1, 0, PF_ENUM | PF_CTL_COMBO, organ_filter_type_names, "filter1_type", "Filter 1 Type" }, { 0.1, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_PROP_OUTPUT_GAIN | PF_PROP_GRAPH, NULL, "master", "Volume" }, { 2000, 20, 20000, 100, PF_FLOAT | PF_SCALE_LOG | PF_UNIT_HZ | PF_CTL_KNOB, NULL, "f1_cutoff", "F1 Cutoff" }, { 2, 0.7, 8, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB, NULL, "f1_res", "F1 Res" }, { 8000, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f1_env1", "F1 Env1" }, { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f1_env2", "F1 Env2" }, { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f1_env3", "F1 Env3" }, { 0, 0, 2, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "f1_keyf", "F1 KeyFollow" }, { 2000, 20, 20000, 100, PF_FLOAT | PF_SCALE_LOG | PF_UNIT_HZ | PF_CTL_KNOB, NULL, "f2_cutoff", "F2 Cutoff" }, { 2, 0.7, 8, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB, NULL, "f2_res", "F2 Res" }, { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f2_env1", "F2 Env1" }, { 8000, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f2_env2", "F2 Env2" }, { 0, -10800,10800, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "f2_env3", "F2 Env3" }, { 0, 0, 2, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "f2_keyf", "F2 KeyFollow" }, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" }, { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_v", "EG1 VelMod" }, { 0, 0, organ_enums::ampctl_count - 1, 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "eg1_amp_ctl", "EG1 To Amp"}, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" }, { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_r", "EG2 Release" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_v", "EG2 VelMod" }, { 0, 0, organ_enums::ampctl_count - 1, 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "eg2_amp_ctl", "EG2 To Amp"}, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_a", "EG3 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_d", "EG3 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_s", "EG3 Sustain" }, { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_r", "EG3 Release" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_v", "EG3 VelMod" }, { 0, 0, organ_enums::ampctl_count - 1, 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "eg3_amp_ctl", "EG3 To Amp"}, { 6.6, 0.01, 240, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "vib_rate", "Vib Rate" }, { 1.0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "vib_amt", "Vib Mod Amt" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "vib_wet", "Vib Wet" }, { 180, 0, 360, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "vib_phase", "Vib Stereo" }, { organ_enums::lfomode_global, 0, organ_enums::lfomode_count - 1, 0, PF_ENUM | PF_CTL_COMBO, organ_vibrato_mode_names, "vib_mode", "Vib Mode" }, { organ_enums::lfotype_cv3, 0, organ_enums::lfotype_count - 1, 0, PF_ENUM | PF_CTL_COMBO, organ_vibrato_type_names, "vib_type", "Vib Type" }, // { 0, 0, organ_enums::ampctl_count - 1, // 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "vel_amp_ctl", "Vel To Amp"}, { -12, -24, 24, 49, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "transpose", "Transpose" }, { 0, -100, 100, 201, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune", "Detune" }, { 16, 1, 32, 32, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "polyphony", "Polyphony" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "quad_env", "Quadratic AmpEnv" }, { 200, 0, 2400, 25, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "pbend_range", "PBend Range" }, { 80, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "bass_freq", "Bass Freq" }, { 1, 0.1, 10, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "bass_gain", "Bass Gain" }, { 12000, 20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "treble_freq", "Treble Freq" }, { 1, 0.1, 10, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "treble_gain", "Treble Gain" }, }; const char *const *organ_metadata::get_configure_vars() const { static const char *names[] = {"map_curve", NULL}; return names; } //////////////////////////////////////////////////////////////////////////// const char *fluidsynth_init_soundfont = ""; const char *fluidsynth_init_presetkeyset = ""; const char *fluidsynth_interpolation_names[] = { "None (zero-hold)", "Linear", "Cubic", "7-point" }; CALF_PORT_NAMES(fluidsynth) = { "Out L", "Out R", }; CALF_PLUGIN_INFO(fluidsynth) = { 0x8700, "Fluidsynth", "Calf Fluidsynth", "FluidSynth Team / Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; CALF_PORT_PROPS(fluidsynth) = { { 0.5, 0, 1, 100, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_PROP_OUTPUT_GAIN, NULL, "master", "Volume" }, { 2, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, fluidsynth_interpolation_names, "interpolation", "Interpolation" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "reverb", "Reverb" }, { 1, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "chorus", "Chorus" }, }; const char *const *fluidsynth_metadata::get_configure_vars() const { static const char *names[] = {"soundfont", "preset_key_set", NULL}; return names; } //////////////////////////////////////////////////////////////////////////// const char *wavetable_names[] = { "Shiny1", "Shiny2", "Rezo", "Metal", "Bell", "Blah", "Pluck", "Stretch", "Stretch 2", "Hard Sync", "Hard Sync 2", "Soft Sync", "Bell 2", "Bell 3", "Tine", "Tine 2", "Clav", "Clav 2", "Gtr", "Gtr 2", "Gtr 3", "Gtr 4", "Gtr 5", "Reed", "Reed 2", "Silver", "Brass", "Multi", "Multi 2", }; static const char *wavetable_mod_src_names[] = { "None", "Velocity", "Pressure", "ModWheel", "Env 1", "Env 2", "Env 3", NULL }; static const char *wavetable_mod_dest_names[] = { "None", "Attenuation", "Osc Mix Ratio (%)", "Cutoff [ct]", "Resonance", "O1: Shift (%)", "O2: Shift (%)", "O1: Detune [ct]", "O2: Detune [ct]", NULL }; CALF_PORT_NAMES(wavetable) = { "Out L", "Out R", }; CALF_PLUGIN_INFO(wavetable) = { 0x8701, "Wavetable", "Calf Wavetable", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" }; CALF_PORT_PROPS(wavetable) = { { wavetable_metadata::wt_count - 1, 0, wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o1wave", "Osc1 Wave" }, { 0.2, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o1offset", "Osc1 Ctl"}, { 0, -48, 48, 48*2+1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o1trans", "Osc1 Transpose" }, { 6, -100, 100, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o1detune", "Osc1 Detune" }, { 0.1, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o1level", "Osc1 Level" }, { 0, 0, wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o2wave", "Osc2 Wave" }, { 0.4, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o2offset", "Osc2 Ctl"}, { 0, -48, 48, 48*2+1, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o2trans", "Osc2 Transpose" }, { -6, -100, 100, 0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o2detune", "Osc2 Detune" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o2level", "Osc2 Level" }, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" }, { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_f", "EG1 Fade" }, { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_v", "EG1 VelMod" }, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" }, { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_f", "EG2 Fade" }, { 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_r", "EG2 Release" }, { 1, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_v", "EG2 VelMod" }, { 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_a", "EG3 Attack" }, { 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_d", "EG3 Decay" }, { 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_s", "EG3 Sustain" }, { 0, -10000,10000, 21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_f", "EG3 Fade" }, { 50, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_r", "EG3 Release" }, { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_v", "EG3 VelMod" }, { 200, 0, 2400, 25, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "pbend_range", "PBend Range" }, {} }; wavetable_metadata::wavetable_metadata() : mm_metadata(mod_matrix_slots, wavetable_mod_src_names, wavetable_mod_dest_names) { } //////////////////////////////////////////////////////////////////////////// calf_plugins::plugin_registry::plugin_registry() { #define PER_MODULE_ITEM(name, isSynth, jackname) plugins.push_back((new name##_metadata)); #include } lmms-1.1.3/plugins/LadspaEffect/calf/src/modmatrix.cpp000066400000000000000000000106651247673406200227150ustar00rootroot00000000000000/* Calf DSP Library * Modulation matrix boilerplate code. * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace std; using namespace dsp; using namespace calf_plugins; using namespace calf_utils; mod_matrix_impl::mod_matrix_impl(dsp::modulation_entry *_matrix, mod_matrix_metadata *_metadata) : matrix(_matrix) , metadata(_metadata) { matrix_rows = metadata->get_table_rows(); for (unsigned int i = 0; i < matrix_rows; i++) matrix[i].reset(); } const float mod_matrix_impl::scaling_coeffs[mod_matrix_metadata::map_type_count][3] = { { 0, 1, 0 }, { -1, 2, 0 }, { -1, 1, 0 }, { 0, 0, 1 }, { -1, 0, 1 }, { 0, 2, -1 }, { -1, 4, -2 }, { 0, 4, -4 }, }; std::string mod_matrix_impl::get_cell(int row, int column) const { assert(row >= 0 && row < (int)matrix_rows); modulation_entry &slot = matrix[row]; const char **arr = metadata->get_table_columns()[column].values; switch(column) { case 0: // source 1 return arr[slot.src1]; case 1: // mapping mode return arr[slot.mapping]; case 2: // source 2 return arr[slot.src2]; case 3: // amount return calf_utils::f2s(slot.amount); case 4: // destination return arr[slot.dest]; default: assert(0); return ""; } } void mod_matrix_impl::set_cell(int row, int column, const std::string &src, std::string &error) { assert(row >= 0 && row < (int)matrix_rows); modulation_entry &slot = matrix[row]; const char **arr = metadata->get_table_columns()[column].values; switch(column) { case 0: case 1: case 2: case 4: { for (int i = 0; arr[i]; i++) { if (src == arr[i]) { if (column == 0) slot.src1 = i; else if (column == 1) slot.mapping = (mod_matrix_metadata::mapping_mode)i; else if (column == 2) slot.src2 = i; else if (column == 4) slot.dest = i; error.clear(); return; } } error = "Invalid name: " + src; return; } case 3: { stringstream ss(src); ss >> slot.amount; error.clear(); return; } } } void mod_matrix_impl::send_configures(send_configure_iface *sci) { for (int i = 0; i < (int)matrix_rows; i++) { for (int j = 0; j < 5; j++) { string key = "mod_matrix:" + i2s(i) + "," + i2s(j); sci->send_configure(key.c_str(), get_cell(i, j).c_str()); } } } char *mod_matrix_impl::configure(const char *key, const char *value) { bool is_rows; int row, column; if (!parse_table_key(key, "mod_matrix:", is_rows, row, column)) return NULL; if (is_rows) return strdup("Unexpected key"); if (row != -1 && column != -1) { string error; string value_text; if (value == NULL) { const table_column_info &ci = metadata->get_table_columns()[column]; if (ci.type == TCT_ENUM) value_text = ci.values[(int)ci.def_value]; else if (ci.type == TCT_FLOAT) value_text = f2s(ci.def_value); value = value_text.c_str(); } set_cell(row, column, value, error); if (!error.empty()) return strdup(error.c_str()); } return NULL; } lmms-1.1.3/plugins/LadspaEffect/calf/src/modules.cpp000066400000000000000000000654021247673406200223600ustar00rootroot00000000000000/* Calf DSP plugin pack * Assorted plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include #include using namespace dsp; using namespace calf_plugins; #define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; /////////////////////////////////////////////////////////////////////////////////////////////// void reverb_audio_module::activate() { reverb.reset(); } void reverb_audio_module::deactivate() { } void reverb_audio_module::set_sample_rate(uint32_t sr) { srate = sr; reverb.setup(sr); amount.set_sample_rate(sr); } void reverb_audio_module::params_changed() { reverb.set_type_and_diffusion(fastf2i_drm(*params[par_roomsize]), *params[par_diffusion]); reverb.set_time(*params[par_decay]); reverb.set_cutoff(*params[par_hfdamp]); amount.set_inertia(*params[par_amount]); dryamount.set_inertia(*params[par_dry]); left_lo.set_lp(dsp::clip(*params[par_treblecut], 20.f, (float)(srate * 0.49f)), srate); left_hi.set_hp(dsp::clip(*params[par_basscut], 20.f, (float)(srate * 0.49f)), srate); right_lo.copy_coeffs(left_lo); right_hi.copy_coeffs(left_hi); predelay_amt = (int) (srate * (*params[par_predelay]) * (1.0f / 1000.0f) + 1); } uint32_t reverb_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { numsamples += offset; clip -= std::min(clip, numsamples); for (uint32_t i = offset; i < numsamples; i++) { float dry = dryamount.get(); float wet = amount.get(); stereo_sample s(ins[0][i], ins[1][i]); stereo_sample s2 = pre_delay.process(s, predelay_amt); float rl = s2.left, rr = s2.right; rl = left_lo.process(left_hi.process(rl)); rr = right_lo.process(right_hi.process(rr)); reverb.process(rl, rr); outs[0][i] = dry*s.left + wet*rl; outs[1][i] = dry*s.right + wet*rr; meter_wet = std::max(fabs(wet*rl), fabs(wet*rr)); meter_out = std::max(fabs(outs[0][i]), fabs(outs[1][i])); if(outs[0][i] > 1.f or outs[1][i] > 1.f) { clip = srate >> 3; } } reverb.extra_sanitize(); left_lo.sanitize(); left_hi.sanitize(); right_lo.sanitize(); right_hi.sanitize(); if(params[par_meter_wet] != NULL) { *params[par_meter_wet] = meter_wet; } if(params[par_meter_out] != NULL) { *params[par_meter_out] = meter_out; } if(params[par_clip] != NULL) { *params[par_clip] = clip; } return outputs_mask; } /////////////////////////////////////////////////////////////////////////////////////////////// vintage_delay_audio_module::vintage_delay_audio_module() { old_medium = -1; for (int i = 0; i < MAX_DELAY; i++) { buffers[0][i] = 0.f; buffers[1][i] = 0.f; } } void vintage_delay_audio_module::params_changed() { float unit = 60.0 * srate / (*params[par_bpm] * *params[par_divide]); deltime_l = dsp::fastf2i_drm(unit * *params[par_time_l]); deltime_r = dsp::fastf2i_drm(unit * *params[par_time_r]); int deltime_fb = deltime_l + deltime_r; float fb = *params[par_feedback]; dry.set_inertia(*params[par_dryamount]); mixmode = dsp::fastf2i_drm(*params[par_mixmode]); medium = dsp::fastf2i_drm(*params[par_medium]); switch(mixmode) { case MIXMODE_STEREO: fb_left.set_inertia(fb); fb_right.set_inertia(pow(fb, *params[par_time_r] / *params[par_time_l])); amt_left.set_inertia(*params[par_amount]); amt_right.set_inertia(*params[par_amount]); break; case MIXMODE_PINGPONG: fb_left.set_inertia(fb); fb_right.set_inertia(fb); amt_left.set_inertia(*params[par_amount]); amt_right.set_inertia(*params[par_amount]); break; case MIXMODE_LR: fb_left.set_inertia(fb); fb_right.set_inertia(fb); amt_left.set_inertia(*params[par_amount]); // L is straight 'amount' amt_right.set_inertia(*params[par_amount] * pow(fb, 1.0 * deltime_r / deltime_fb)); // R is amount with feedback based dampening as if it ran through R/FB*100% of delay line's dampening // deltime_l <<< deltime_r -> pow() = fb -> full delay line worth of dampening // deltime_l >>> deltime_r -> pow() = 1 -> no dampening break; case MIXMODE_RL: fb_left.set_inertia(fb); fb_right.set_inertia(fb); amt_left.set_inertia(*params[par_amount] * pow(fb, 1.0 * deltime_l / deltime_fb)); amt_right.set_inertia(*params[par_amount]); break; } chmix.set_inertia((1 - *params[par_width]) * 0.5); if (medium != old_medium) calc_filters(); } void vintage_delay_audio_module::activate() { bufptr = 0; age = 0; } void vintage_delay_audio_module::deactivate() { } void vintage_delay_audio_module::set_sample_rate(uint32_t sr) { srate = sr; old_medium = -1; amt_left.set_sample_rate(sr); amt_right.set_sample_rate(sr); fb_left.set_sample_rate(sr); fb_right.set_sample_rate(sr); } void vintage_delay_audio_module::calc_filters() { // parameters are heavily influenced by gordonjcp and his tape delay unit // although, don't blame him if it sounds bad - I've messed with them too :) biquad_left[0].set_lp_rbj(6000, 0.707, srate); biquad_left[1].set_bp_rbj(4500, 0.250, srate); biquad_right[0].copy_coeffs(biquad_left[0]); biquad_right[1].copy_coeffs(biquad_left[1]); } /// Single delay line with feedback at the same tap static inline void delayline_impl(int age, int deltime, float dry_value, const float &delayed_value, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb) { // if the buffer hasn't been cleared yet (after activation), pretend we've read zeros if (age <= deltime) { out = 0; del = dry_value; amt.step(); fb.step(); } else { float delayed = delayed_value; // avoid dereferencing the pointer in 'then' branch of the if() dsp::sanitize(delayed); out = delayed * amt.get(); del = dry_value + delayed * fb.get(); } } /// Single delay line with tap output static inline void delayline2_impl(int age, int deltime, float dry_value, const float &delayed_value, const float &delayed_value_for_fb, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb) { if (age <= deltime) { out = 0; del = dry_value; amt.step(); fb.step(); } else { out = delayed_value * amt.get(); del = dry_value + delayed_value_for_fb * fb.get(); dsp::sanitize(out); dsp::sanitize(del); } } static inline void delay_mix(float dry_left, float dry_right, float &out_left, float &out_right, float dry, float chmix) { float tmp_left = lerp(out_left, out_right, chmix); float tmp_right = lerp(out_right, out_left, chmix); out_left = dry_left * dry + tmp_left; out_right = dry_right * dry + tmp_right; } uint32_t vintage_delay_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t ostate = 3; // XXXKF optimize! uint32_t end = offset + numsamples; int orig_bufptr = bufptr; float out_left, out_right, del_left, del_right; switch(mixmode) { case MIXMODE_STEREO: case MIXMODE_PINGPONG: { int v = mixmode == MIXMODE_PINGPONG ? 1 : 0; for(uint32_t i = offset; i < end; i++) { delayline_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l) & ADDR_MASK], out_left, del_left, amt_left, fb_left); delayline_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r) & ADDR_MASK], out_right, del_right, amt_right, fb_right); delay_mix(ins[0][i], ins[1][i], out_left, out_right, dry.get(), chmix.get()); age++; outs[0][i] = out_left; outs[1][i] = out_right; buffers[0][bufptr] = del_left; buffers[1][bufptr] = del_right; bufptr = (bufptr + 1) & (MAX_DELAY - 1); } } break; case MIXMODE_LR: case MIXMODE_RL: { int v = mixmode == MIXMODE_RL ? 1 : 0; int deltime_fb = deltime_l + deltime_r; int deltime_l_corr = mixmode == MIXMODE_RL ? deltime_fb : deltime_l; int deltime_r_corr = mixmode == MIXMODE_LR ? deltime_fb : deltime_r; for(uint32_t i = offset; i < end; i++) { delayline2_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l_corr) & ADDR_MASK], buffers[v][(bufptr - deltime_fb) & ADDR_MASK], out_left, del_left, amt_left, fb_left); delayline2_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r_corr) & ADDR_MASK], buffers[1-v][(bufptr - deltime_fb) & ADDR_MASK], out_right, del_right, amt_right, fb_right); delay_mix(ins[0][i], ins[1][i], out_left, out_right, dry.get(), chmix.get()); age++; outs[0][i] = out_left; outs[1][i] = out_right; buffers[0][bufptr] = del_left; buffers[1][bufptr] = del_right; bufptr = (bufptr + 1) & (MAX_DELAY - 1); } } } if (age >= MAX_DELAY) age = MAX_DELAY; if (medium > 0) { bufptr = orig_bufptr; if (medium == 2) { for(uint32_t i = offset; i < end; i++) { buffers[0][bufptr] = biquad_left[0].process_lp(biquad_left[1].process(buffers[0][bufptr])); buffers[1][bufptr] = biquad_right[0].process_lp(biquad_right[1].process(buffers[1][bufptr])); bufptr = (bufptr + 1) & (MAX_DELAY - 1); } biquad_left[0].sanitize();biquad_right[0].sanitize(); } else { for(uint32_t i = offset; i < end; i++) { buffers[0][bufptr] = biquad_left[1].process(buffers[0][bufptr]); buffers[1][bufptr] = biquad_right[1].process(buffers[1][bufptr]); bufptr = (bufptr + 1) & (MAX_DELAY - 1); } } biquad_left[1].sanitize();biquad_right[1].sanitize(); } return ostate; } /////////////////////////////////////////////////////////////////////////////////////////////// bool filter_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (index == par_cutoff && !subindex) { context->set_line_width(1.5); return ::get_graph(*this, subindex, data, points); } return false; } int filter_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) { old_cutoff = inertia_cutoff.get_last(); old_resonance = inertia_resonance.get_last(); old_mode = *params[par_mode]; last_generation++; subindex_graph = 0; subindex_dot = INT_MAX; subindex_gridline = INT_MAX; } else { subindex_graph = 0; subindex_dot = subindex_gridline = generation ? INT_MAX : 0; } if (generation == last_calculated_generation) subindex_graph = INT_MAX; return last_generation; } /////////////////////////////////////////////////////////////////////////////////////////////// filterclavier_audio_module::filterclavier_audio_module() : filter_module_with_inertia(ins, outs, params) , min_gain(1.0) , max_gain(32.0) , last_note(-1) , last_velocity(-1) { } void filterclavier_audio_module::params_changed() { inertia_filter_module::inertia_cutoff.set_inertia( note_to_hz(last_note + *params[par_transpose], *params[par_detune])); float min_resonance = param_props[par_max_resonance].min; inertia_filter_module::inertia_resonance.set_inertia( (float(last_velocity) / 127.0) // 0.001: see below * (*params[par_max_resonance] - min_resonance + 0.001) + min_resonance); adjust_gain_according_to_filter_mode(last_velocity); inertia_filter_module::calculate_filter(); } void filterclavier_audio_module::activate() { inertia_filter_module::activate(); } void filterclavier_audio_module::set_sample_rate(uint32_t sr) { inertia_filter_module::set_sample_rate(sr); } void filterclavier_audio_module::deactivate() { inertia_filter_module::deactivate(); } void filterclavier_audio_module::note_on(int channel, int note, int vel) { last_note = note; last_velocity = vel; inertia_filter_module::inertia_cutoff.set_inertia( note_to_hz(note + *params[par_transpose], *params[par_detune])); float min_resonance = param_props[par_max_resonance].min; inertia_filter_module::inertia_resonance.set_inertia( (float(vel) / 127.0) // 0.001: if the difference is equal to zero (which happens // when the max_resonance knom is at minimum position // then the filter gain doesnt seem to snap to zero on most note offs * (*params[par_max_resonance] - min_resonance + 0.001) + min_resonance); adjust_gain_according_to_filter_mode(vel); inertia_filter_module::calculate_filter(); } void filterclavier_audio_module::note_off(int channel, int note, int vel) { if (note == last_note) { inertia_filter_module::inertia_resonance.set_inertia(param_props[par_max_resonance].min); inertia_filter_module::inertia_gain.set_inertia(min_gain); inertia_filter_module::calculate_filter(); last_velocity = 0; } } void filterclavier_audio_module::adjust_gain_according_to_filter_mode(int velocity) { int mode = dsp::fastf2i_drm(*params[par_mode]); // for bandpasses: boost gain for velocities > 0 if ( (mode_6db_bp <= mode) && (mode <= mode_18db_bp) ) { // gain for velocity 0: 1.0 // gain for velocity 127: 32.0 float mode_max_gain = max_gain; // max_gain is right for mode_6db_bp if (mode == mode_12db_bp) mode_max_gain /= 6.0; if (mode == mode_18db_bp) mode_max_gain /= 10.5; inertia_filter_module::inertia_gain.set_now( (float(velocity) / 127.0) * (mode_max_gain - min_gain) + min_gain); } else { inertia_filter_module::inertia_gain.set_now(min_gain); } } bool filterclavier_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active || index != par_mode) { return false; } if (!subindex) { context->set_line_width(1.5); return ::get_graph(*this, subindex, data, points); } return false; } /////////////////////////////////////////////////////////////////////////////////////////////// stereo_audio_module::stereo_audio_module() { active = false; clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; } stereo_audio_module::~stereo_audio_module() { if( buffer != NULL ) { free(buffer); } } void stereo_audio_module::activate() { active = true; } void stereo_audio_module::deactivate() { active = false; } void stereo_audio_module::params_changed() { float slev = 2 * *params[param_slev]; // stereo level ( -2 -> 2 ) float sbal = 1 + *params[param_sbal]; // stereo balance ( 0 -> 2 ) float mlev = 2 * *params[param_mlev]; // mono level ( -2 -> 2 ) float mpan = 1 + *params[param_mpan]; // mono pan ( 0 -> 2 ) switch((int)*params[param_mode]) { case 0: default: //LR->LR LL = (mlev * (2.f - mpan) + slev * (2.f - sbal)); LR = (mlev * mpan - slev * sbal); RL = (mlev * (2.f - mpan) - slev * (2.f - sbal)); RR = (mlev * mpan + slev * sbal); break; case 1: //LR->MS LL = (2.f - mpan) * (2.f - sbal); LR = mpan * (2.f - sbal) * -1; RL = (2.f - mpan) * sbal; RR = mpan * sbal; break; case 2: //MS->LR LL = mlev * (2.f - sbal); LR = mlev * mpan; RL = slev * (2.f - sbal); RR = slev * sbal * -1; break; case 3: case 4: case 5: case 6: //LR->LL LL = 0.f; LR = 0.f; RL = 0.f; RR = 0.f; break; } } uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { for(uint32_t i = offset; i < offset + numsamples; i++) { if(*params[param_bypass] > 0.5) { outs[0][i] = ins[0][i]; outs[1][i] = ins[1][i]; clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; } else { // let meters fall a bit clip_inL -= std::min(clip_inL, numsamples); clip_inR -= std::min(clip_inR, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; float L = ins[0][i]; float R = ins[1][i]; // levels in L *= *params[param_level_in]; R *= *params[param_level_in]; // balance in L *= (1.f - std::max(0.f, *params[param_balance_in])); R *= (1.f + std::min(0.f, *params[param_balance_in])); // copy / flip / mono ... switch((int)*params[param_mode]) { case 0: default: // LR > LR break; case 1: // LR > MS break; case 2: // MS > LR break; case 3: // LR > LL R = L; break; case 4: // LR > RR L = R; break; case 5: // LR > L+R L = (L + R) / 2; R = L; break; case 6: // LR > RL float tmp = L; L = R; R = tmp; break; } // softclip if(*params[param_softclip]) { int ph; ph = L / fabs(L); L = L > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + L * ph)))) : L; ph = R / fabs(R); R = R > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + R * ph)))) : R; } // GUI stuff if(L > meter_inL) meter_inL = L; if(R > meter_inR) meter_inR = R; if(L > 1.f) clip_inL = srate >> 3; if(R > 1.f) clip_inR = srate >> 3; // mute L *= (1 - floor(*params[param_mute_l] + 0.5)); R *= (1 - floor(*params[param_mute_r] + 0.5)); // phase L *= (2 * (1 - floor(*params[param_phase_l] + 0.5))) - 1; R *= (2 * (1 - floor(*params[param_phase_r] + 0.5))) - 1; // LR/MS L += LL*L + RL*R; R += RR*R + LR*L; // widener L += *params[param_widener] * R * -1; R += *params[param_widener] * L * -1; // delay buffer[pos] = L; buffer[pos + 1] = R; int nbuf = srate * (fabs(*params[param_delay]) / 1000.f); nbuf -= nbuf % 2; if(*params[param_delay] > 0.f) { R = buffer[(pos - (int)nbuf + 1 + buffer_size) % buffer_size]; } else if (*params[param_delay] < 0.f) { L = buffer[(pos - (int)nbuf + buffer_size) % buffer_size]; } pos = (pos + 2) % buffer_size; // balance out L *= (1.f - std::max(0.f, *params[param_balance_out])); R *= (1.f + std::min(0.f, *params[param_balance_out])); // level L *= *params[param_level_out]; R *= *params[param_level_out]; //output outs[0][i] = L; outs[1][i] = R; // clip LED's if(L > 1.f) clip_outL = srate >> 3; if(R > 1.f) clip_outR = srate >> 3; if(L > meter_outL) meter_outL = L; if(R > meter_outR) meter_outR = R; // phase meter if(fabs(L) > 0.001 and fabs(R) > 0.001) { meter_phase = fabs(fabs(L+R) > 0.000000001 ? sin(fabs((L-R)/(L+R))) : 0.f); } else { meter_phase = 0.f; } } } // draw meters SET_IF_CONNECTED(clip_inL); SET_IF_CONNECTED(clip_inR); SET_IF_CONNECTED(clip_outL); SET_IF_CONNECTED(clip_outR); SET_IF_CONNECTED(meter_inL); SET_IF_CONNECTED(meter_inR); SET_IF_CONNECTED(meter_outL); SET_IF_CONNECTED(meter_outR); SET_IF_CONNECTED(meter_phase); return outputs_mask; } void stereo_audio_module::set_sample_rate(uint32_t sr) { srate = sr; // rebuild buffer buffer_size = (int)(srate * 0.05 * 2.f); // buffer size attack rate multiplied by 2 channels buffer = (float*) calloc(buffer_size, sizeof(float)); memset(buffer, 0, buffer_size * sizeof(float)); // reset buffer to zero pos = 0; } /////////////////////////////////////////////////////////////////////////////////////////////// mono_audio_module::mono_audio_module() { active = false; clip_in = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_in = 0.f; meter_outL = 0.f; meter_outR = 0.f; } mono_audio_module::~mono_audio_module() { if( buffer != NULL ) { free(buffer); } } void mono_audio_module::activate() { active = true; } void mono_audio_module::deactivate() { active = false; } void mono_audio_module::params_changed() { } uint32_t mono_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { for(uint32_t i = offset; i < offset + numsamples; i++) { if(*params[param_bypass] > 0.5) { outs[0][i] = ins[0][i]; outs[1][i] = ins[0][i]; clip_in = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_in = 0.f; meter_outL = 0.f; meter_outR = 0.f; } else { // let meters fall a bit clip_in -= std::min(clip_in, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); meter_in = 0.f; meter_outL = 0.f; meter_outR = 0.f; float L = ins[0][i]; // levels in L *= *params[param_level_in]; // softclip if(*params[param_softclip]) { int ph = L / fabs(L); L = L > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + L * ph)))) : L; } // GUI stuff if(L > meter_in) meter_in = L; if(L > 1.f) clip_in = srate >> 3; float R = L; // mute L *= (1 - floor(*params[param_mute_l] + 0.5)); R *= (1 - floor(*params[param_mute_r] + 0.5)); // phase L *= (2 * (1 - floor(*params[param_phase_l] + 0.5))) - 1; R *= (2 * (1 - floor(*params[param_phase_r] + 0.5))) - 1; // delay buffer[pos] = L; buffer[pos + 1] = R; int nbuf = srate * (fabs(*params[param_delay]) / 1000.f); nbuf -= nbuf % 2; if(*params[param_delay] > 0.f) { R = buffer[(pos - (int)nbuf + 1 + buffer_size) % buffer_size]; } else if (*params[param_delay] < 0.f) { L = buffer[(pos - (int)nbuf + buffer_size) % buffer_size]; } pos = (pos + 2) % buffer_size; // balance out L *= (1.f - std::max(0.f, *params[param_balance_out])); R *= (1.f + std::min(0.f, *params[param_balance_out])); // level L *= *params[param_level_out]; R *= *params[param_level_out]; //output outs[0][i] = L; outs[1][i] = R; // clip LED's if(L > 1.f) clip_outL = srate >> 3; if(R > 1.f) clip_outR = srate >> 3; if(L > meter_outL) meter_outL = L; if(R > meter_outR) meter_outR = R; } } // draw meters SET_IF_CONNECTED(clip_in); SET_IF_CONNECTED(clip_outL); SET_IF_CONNECTED(clip_outR); SET_IF_CONNECTED(meter_in); SET_IF_CONNECTED(meter_outL); SET_IF_CONNECTED(meter_outR); return outputs_mask; } void mono_audio_module::set_sample_rate(uint32_t sr) { srate = sr; // rebuild buffer buffer_size = (int)srate * 0.05 * 2; // delay buffer size multiplied by 2 channels buffer = (float*) calloc(buffer_size, sizeof(float)); memset(buffer, 0, buffer_size * sizeof(float)); // reset buffer to zero pos = 0; } lmms-1.1.3/plugins/LadspaEffect/calf/src/modules_comp.cpp000066400000000000000000002567521247673406200234100ustar00rootroot00000000000000/* Calf DSP plugin pack * Compression related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace dsp; using namespace calf_plugins; #define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; /// Multiband Compressor by Markus Schmidt /// /// This module splits the signal in four different bands /// and sends them through multiple filters (implemented by /// Krzysztof). They are processed by a compressing routine /// (implemented by Thor) afterwards and summed up to the /// final output again. /////////////////////////////////////////////////////////////////////////////////////////////// multibandcompressor_audio_module::multibandcompressor_audio_module() { is_active = false; srate = 0; // zero all displays clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; for(int i = 0; i < strips - 1; i ++) { freq_old[i] = -1; sep_old[i] = -1; q_old[i] = -1; } mode_old = -1; } void multibandcompressor_audio_module::activate() { is_active = true; // set all filters and strips params_changed(); // activate all strips for (int j = 0; j < strips; j ++) { strip[j].activate(); strip[j].id = j; } } void multibandcompressor_audio_module::deactivate() { is_active = false; // deactivate all strips for (int j = 0; j < strips; j ++) { strip[j].deactivate(); } } void multibandcompressor_audio_module::params_changed() { // determine mute/solo states solo[0] = *params[param_solo0] > 0.f ? true : false; solo[1] = *params[param_solo1] > 0.f ? true : false; solo[2] = *params[param_solo2] > 0.f ? true : false; solo[3] = *params[param_solo3] > 0.f ? true : false; no_solo = (*params[param_solo0] > 0.f || *params[param_solo1] > 0.f || *params[param_solo2] > 0.f || *params[param_solo3] > 0.f) ? false : true; int i; int j1; switch(mode) { case 0: default: j1 = 0; break; case 1: j1 = 2; break; } // set the params of all filters if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0] or *params[param_mode] != mode_old) { lpL[0][0].set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate); hpL[0][0].set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate); lpR[0][0].copy_coeffs(lpL[0][0]); hpR[0][0].copy_coeffs(hpL[0][0]); for(i = 1; i <= j1; i++) { lpL[0][i].copy_coeffs(lpL[0][0]); hpL[0][i].copy_coeffs(hpL[0][0]); lpR[0][i].copy_coeffs(lpL[0][0]); hpR[0][i].copy_coeffs(hpL[0][0]); } freq_old[0] = *params[param_freq0]; sep_old[0] = *params[param_sep0]; q_old[0] = *params[param_q0]; } if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1] or *params[param_mode] != mode_old) { lpL[1][0].set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate); hpL[1][0].set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate); lpR[1][0].copy_coeffs(lpL[1][0]); hpR[1][0].copy_coeffs(hpL[1][0]); for(i = 1; i <= j1; i++) { lpL[1][i].copy_coeffs(lpL[1][0]); hpL[1][i].copy_coeffs(hpL[1][0]); lpR[1][i].copy_coeffs(lpL[1][0]); hpR[1][i].copy_coeffs(hpL[1][0]); } freq_old[1] = *params[param_freq1]; sep_old[1] = *params[param_sep1]; q_old[1] = *params[param_q1]; } if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2] or *params[param_mode] != mode_old) { lpL[2][0].set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate); hpL[2][0].set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate); lpR[2][0].copy_coeffs(lpL[2][0]); hpR[2][0].copy_coeffs(hpL[2][0]); for(i = 1; i <= j1; i++) { lpL[2][i].copy_coeffs(lpL[2][0]); hpL[2][i].copy_coeffs(hpL[2][0]); lpR[2][i].copy_coeffs(lpL[2][0]); hpR[2][i].copy_coeffs(hpL[2][0]); } freq_old[2] = *params[param_freq2]; sep_old[2] = *params[param_sep2]; q_old[2] = *params[param_q2]; } // set the params of all strips strip[0].set_params(*params[param_attack0], *params[param_release0], *params[param_threshold0], *params[param_ratio0], *params[param_knee0], *params[param_makeup0], *params[param_detection0], 1.f, *params[param_bypass0], !(solo[0] || no_solo)); strip[1].set_params(*params[param_attack1], *params[param_release1], *params[param_threshold1], *params[param_ratio1], *params[param_knee1], *params[param_makeup1], *params[param_detection1], 1.f, *params[param_bypass1], !(solo[1] || no_solo)); strip[2].set_params(*params[param_attack2], *params[param_release2], *params[param_threshold2], *params[param_ratio2], *params[param_knee2], *params[param_makeup2], *params[param_detection2], 1.f, *params[param_bypass2], !(solo[2] || no_solo)); strip[3].set_params(*params[param_attack3], *params[param_release3], *params[param_threshold3], *params[param_ratio3], *params[param_knee3], *params[param_makeup3], *params[param_detection3], 1.f, *params[param_bypass3], !(solo[3] || no_solo)); } void multibandcompressor_audio_module::set_sample_rate(uint32_t sr) { srate = sr; // set srate of all strips for (int j = 0; j < strips; j ++) { strip[j].set_sample_rate(srate); } } #define BYPASSED_COMPRESSION(index) \ if(params[param_compression##index] != NULL) \ *params[param_compression##index] = 1.0; \ if(params[param_output##index] != NULL) \ *params[param_output##index] = 0.0; #define ACTIVE_COMPRESSION(index) \ if(params[param_compression##index] != NULL) \ *params[param_compression##index] = strip[index].get_comp_level(); \ if(params[param_output##index] != NULL) \ *params[param_output##index] = strip[index].get_output_level(); uint32_t multibandcompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; for (int i = 0; i < strips; i++) strip[i].update_curve(); if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; } else { // process all strips // let meters fall a bit clip_inL -= std::min(clip_inL, numsamples); clip_inR -= std::min(clip_inR, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; while(offset < numsamples) { // cycle through samples float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; // out vars float outL = 0.f; float outR = 0.f; int j1; for (int i = 0; i < strips; i ++) { // cycle trough strips if (solo[i] || no_solo) { // strip unmuted float left = inL; float right = inR; // send trough filters switch(mode) { case 0: default: j1 = 0; break; case 1: j1 = 2; break; } for (int j = 0; j <= j1; j++){ if(i + 1 < strips) { left = lpL[i][j].process(left); right = lpR[i][j].process(right); lpL[i][j].sanitize(); lpR[i][j].sanitize(); } if(i - 1 >= 0) { left = hpL[i - 1][j].process(left); right = hpR[i - 1][j].process(right); hpL[i - 1][j].sanitize(); hpR[i - 1][j].sanitize(); } } // process gain reduction strip[i].process(left, right); // sum up output outL += left; outR += right; } else { // strip muted } } // process single strip // even out filters gain reduction // 3dB - levelled manually (based on default sep and q settings) switch(mode) { case 0: outL *= 1.414213562; outR *= 1.414213562; break; case 1: outL *= 0.88; outR *= 0.88; break; } // out level outL *= *params[param_level_out]; outR *= *params[param_level_out]; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // clip LED's if(inL > 1.f) { clip_inL = srate >> 3; } if(inR > 1.f) { clip_inR = srate >> 3; } if(outL > 1.f) { clip_outL = srate >> 3; } if(outR > 1.f) { clip_outR = srate >> 3; } // set up in / out meters if(inL > meter_inL) { meter_inL = inL; } if(inR > meter_inR) { meter_inR = inR; } if(outL > meter_outL) { meter_outL = outL; } if(outR > meter_outR) { meter_outR = outR; } // next sample ++offset; } // cycle trough samples } // process all strips (no bypass) // draw meters SET_IF_CONNECTED(clip_inL); SET_IF_CONNECTED(clip_inR); SET_IF_CONNECTED(clip_outL); SET_IF_CONNECTED(clip_outR); SET_IF_CONNECTED(meter_inL); SET_IF_CONNECTED(meter_inR); SET_IF_CONNECTED(meter_outL); SET_IF_CONNECTED(meter_outR); // draw strip meters if(bypass > 0.5f) { BYPASSED_COMPRESSION(0) BYPASSED_COMPRESSION(1) BYPASSED_COMPRESSION(2) BYPASSED_COMPRESSION(3) } else { ACTIVE_COMPRESSION(0) ACTIVE_COMPRESSION(1) ACTIVE_COMPRESSION(2) ACTIVE_COMPRESSION(3) } // whatever has to be returned x) return outputs_mask; } const gain_reduction_audio_module *multibandcompressor_audio_module::get_strip_by_param_index(int index) const { // let's handle by the corresponding strip switch (index) { case param_compression0: return &strip[0]; case param_compression1: return &strip[1]; case param_compression2: return &strip[2]; case param_compression3: return &strip[3]; } return NULL; } bool multibandcompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { const gain_reduction_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_graph(subindex, data, points, context); return false; } bool multibandcompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { const gain_reduction_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_dot(subindex, x, y, size, context); return false; } bool multibandcompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { const gain_reduction_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_gridline(subindex, pos, vertical, legend, context); return false; } int multibandcompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { const gain_reduction_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); return 0; } /// Compressor originally by Thor /// /// This module provides Thor's original compressor without any sidechain or weighting /////////////////////////////////////////////////////////////////////////////////////////////// compressor_audio_module::compressor_audio_module() { is_active = false; srate = 0; last_generation = 0; meters.reset(); } void compressor_audio_module::activate() { is_active = true; // set all filters and strips compressor.activate(); params_changed(); meters.reset(); } void compressor_audio_module::deactivate() { is_active = false; compressor.deactivate(); } void compressor_audio_module::params_changed() { compressor.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f); } void compressor_audio_module::set_sample_rate(uint32_t sr) { srate = sr; compressor.set_sample_rate(srate); meters.set_sample_rate(srate); } uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too meters.bypassed(params, orig_numsamples); } else { // process compressor.update_curve(); while(offset < numsamples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; float leftAC = inL; float rightAC = inR; compressor.process(leftAC, rightAC); outL = leftAC; outR = rightAC; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); } // draw strip meter if(bypass > 0.5f) { if(params[param_compression] != NULL) { *params[param_compression] = 1.0f; } } else { if(params[param_compression] != NULL) { *params[param_compression] = compressor.get_comp_level(); } } // whatever has to be returned x) return outputs_mask; } bool compressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; return compressor.get_graph(subindex, data, points, context); } bool compressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; return compressor.get_dot(subindex, x, y, size, context); } bool compressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) return false; return compressor.get_gridline(subindex, pos, vertical, legend, context); } int compressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) return false; return compressor.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); } /// Sidecain Compressor by Markus Schmidt /// /// This module splits the signal in a sidechain- and a process signal. /// The sidechain is processed through Krzystofs filters and compresses /// the process signal via Thor's compression routine afterwards. /////////////////////////////////////////////////////////////////////////////////////////////// sidechaincompressor_audio_module::sidechaincompressor_audio_module() { is_active = false; srate = 0; last_generation = 0; f1_freq_old1 = 0.f; f2_freq_old1 = 0.f; f1_level_old1 = 0.f; f2_level_old1 = 0.f; f1_freq_old = 0.f; f2_freq_old = 0.f; f1_level_old = 0.f; f2_level_old = 0.f; sc_mode_old1 = WIDEBAND; meters.reset(); } void sidechaincompressor_audio_module::activate() { is_active = true; // set all filters and strips compressor.activate(); params_changed(); meters.reset(); } void sidechaincompressor_audio_module::deactivate() { is_active = false; compressor.deactivate(); } sidechaincompressor_audio_module::cfloat sidechaincompressor_audio_module::h_z(const cfloat &z) const { switch ((CalfScModes)sc_mode) { default: case WIDEBAND: return false; break; case DEESSER_WIDE: case DERUMBLER_WIDE: case WEIGHTED_1: case WEIGHTED_2: case WEIGHTED_3: case BANDPASS_2: return f1L.h_z(z) * f2L.h_z(z); break; case DEESSER_SPLIT: return f2L.h_z(z); break; case DERUMBLER_SPLIT: case BANDPASS_1: return f1L.h_z(z); break; } } float sidechaincompressor_audio_module::freq_gain(int index, double freq, uint32_t sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); return std::abs(h_z(z)); } void sidechaincompressor_audio_module::params_changed() { // set the params of all filters if(*params[param_f1_freq] != f1_freq_old or *params[param_f1_level] != f1_level_old or *params[param_f2_freq] != f2_freq_old or *params[param_f2_level] != f2_level_old or *params[param_sc_mode] != sc_mode) { float q = 0.707; switch ((CalfScModes)*params[param_sc_mode]) { default: case WIDEBAND: f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 0.f; f2_active = 0.f; break; case DEESSER_WIDE: f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 1.f; break; case DEESSER_SPLIT: f1L.set_lp_rbj((float)*params[param_f2_freq] * (1 + 0.17), q, (float)srate); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 0.f; f2_active = 1.f; break; case DERUMBLER_WIDE: f1L.set_lp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 0.5f; break; case DERUMBLER_SPLIT: f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 0.f; break; case WEIGHTED_1: f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 0.5f; break; case WEIGHTED_2: f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 0.5f; break; case WEIGHTED_3: f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 0.5f; break; case BANDPASS_1: f1L.set_bp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 0.f; break; case BANDPASS_2: f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 1.f; break; } f1_freq_old = *params[param_f1_freq]; f1_level_old = *params[param_f1_level]; f2_freq_old = *params[param_f2_freq]; f2_level_old = *params[param_f2_level]; sc_mode = (CalfScModes)*params[param_sc_mode]; } // light LED's if(params[param_f1_active] != NULL) { *params[param_f1_active] = f1_active; } if(params[param_f2_active] != NULL) { *params[param_f2_active] = f2_active; } // and set the compressor module compressor.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f); } void sidechaincompressor_audio_module::set_sample_rate(uint32_t sr) { srate = sr; compressor.set_sample_rate(srate); meters.set_sample_rate(srate); } uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { switch ((CalfScRoute)*params[param_sc_route]) { case STEREO: outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; break; case RIGHT_LEFT: outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[0][offset]; break; case LEFT_RIGHT: outs[0][offset] = ins[1][offset]; outs[1][offset] = ins[1][offset]; break; } ++offset; } // displays, too meters.bypassed(params, orig_numsamples); } else { // process compressor.update_curve(); while(offset < numsamples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; float leftAC = inL; float rightAC = inR; float leftSC = inL; float rightSC = inR; float leftMC = inL; float rightMC = inR; switch ((CalfScRoute)*params[param_sc_route]) { case STEREO: leftAC = inL; rightAC = inR; leftSC = inL; rightSC = inR; leftMC = inL; rightMC = inR; break; case RIGHT_LEFT: leftAC = inL; rightAC = inL; leftSC = inR; rightSC = inR; leftMC = inL; rightMC = inL; break; case LEFT_RIGHT: leftAC = inR; rightAC = inR; leftSC = inL; rightSC = inL; leftMC = inR; rightMC = inR; break; } leftSC *= *params[param_sc_level]; rightSC *= *params[param_sc_level]; switch ((CalfScModes)*params[param_sc_mode]) { default: case WIDEBAND: compressor.process(leftAC, rightAC, &leftSC, &rightSC); leftMC = leftSC; rightMC = rightSC; break; case DEESSER_WIDE: case DERUMBLER_WIDE: case WEIGHTED_1: case WEIGHTED_2: case WEIGHTED_3: case BANDPASS_2: leftSC = f2L.process(f1L.process(leftSC)); rightSC = f2R.process(f1R.process(rightSC)); leftMC = leftSC; rightMC = rightSC; compressor.process(leftAC, rightAC, &leftSC, &rightSC); break; case DEESSER_SPLIT: leftSC = f2L.process(leftSC); rightSC = f2R.process(rightSC); leftMC = leftSC; rightMC = rightSC; compressor.process(leftSC, rightSC, &leftSC, &rightSC); leftAC = f1L.process(leftAC); rightAC = f1R.process(rightAC); leftAC += leftSC; rightAC += rightSC; break; case DERUMBLER_SPLIT: leftSC = f1L.process(leftSC); rightSC = f1R.process(rightSC); leftMC = leftSC; rightMC = rightSC; compressor.process(leftSC, rightSC, &leftSC, &rightSC); leftAC = f2L.process(leftAC); rightAC = f2R.process(rightAC); leftAC += leftSC; rightAC += rightSC; break; case BANDPASS_1: leftSC = f1L.process(leftSC); rightSC = f1R.process(rightSC); leftMC = leftSC; rightMC = rightSC; compressor.process(leftAC, rightAC, &leftSC, &rightSC); break; } if(*params[param_sc_listen] > 0.f) { outL = leftMC; outR = rightMC; } else { outL = leftAC; outR = rightAC; } // send to output outs[0][offset] = outL; outs[1][offset] = outR; // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); f1L.sanitize(); f1R.sanitize(); f2L.sanitize(); f2R.sanitize(); } // draw strip meter if(bypass > 0.5f) { if(params[param_compression] != NULL) { *params[param_compression] = 1.0f; } } else { if(params[param_compression] != NULL) { *params[param_compression] = compressor.get_comp_level(); } } // whatever has to be returned x) return outputs_mask; } bool sidechaincompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (index == param_f1_freq && !subindex) { context->set_line_width(1.5); return ::get_graph(*this, subindex, data, points); } else if(index == param_compression) { return compressor.get_graph(subindex, data, points, context); } return false; } bool sidechaincompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; if (index == param_compression) { return compressor.get_dot(subindex, x, y, size, context); } return false; } bool sidechaincompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) return false; if (index == param_compression) { return compressor.get_gridline(subindex, pos, vertical, legend, context); } else { return get_freq_gridline(subindex, pos, vertical, legend, context); } // return false; } int sidechaincompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) return false; if(index == param_compression) { return compressor.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); } else { // (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) if (*params[param_f1_freq] != f1_freq_old1 or *params[param_f2_freq] != f2_freq_old1 or *params[param_f1_level] != f1_level_old1 or *params[param_f2_level] != f2_level_old1 or *params[param_sc_mode] !=sc_mode_old1) { f1_freq_old1 = *params[param_f1_freq]; f2_freq_old1 = *params[param_f2_freq]; f1_level_old1 = *params[param_f1_level]; f2_level_old1 = *params[param_f2_level]; sc_mode_old1 = (CalfScModes)*params[param_sc_mode]; last_generation++; subindex_graph = 0; subindex_dot = INT_MAX; subindex_gridline = INT_MAX; } else { subindex_graph = 0; subindex_dot = subindex_gridline = generation ? INT_MAX : 0; } if (generation == last_calculated_generation) subindex_graph = INT_MAX; return last_generation; } return false; } /// Deesser by Markus Schmidt /// /// This module splits the signal in a sidechain- and a process signal. /// The sidechain is processed through Krzystofs filters and compresses /// the process signal via Thor's compression routine afterwards. /////////////////////////////////////////////////////////////////////////////////////////////// deesser_audio_module::deesser_audio_module() { is_active = false; srate = 0; last_generation = 0; f1_freq_old1 = 0.f; f2_freq_old1 = 0.f; f1_level_old1 = 0.f; f2_level_old1 = 0.f; f2_q_old1 = 0.f; f1_freq_old = 0.f; f2_freq_old = 0.f; f1_level_old = 0.f; f2_level_old = 0.f; f2_q_old = 0.f; detected_led = 0; clip_led = 0; } void deesser_audio_module::activate() { is_active = true; // set all filters and strips compressor.activate(); params_changed(); detected = 0.f; detected_led = 0.f; clip_out = 0.f; } void deesser_audio_module::deactivate() { is_active = false; compressor.deactivate(); } void deesser_audio_module::params_changed() { // set the params of all filters if(*params[param_f1_freq] != f1_freq_old or *params[param_f1_level] != f1_level_old or *params[param_f2_freq] != f2_freq_old or *params[param_f2_level] != f2_level_old or *params[param_f2_q] != f2_q_old) { float q = 0.707; hpL.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate, *params[param_f1_level]); hpR.copy_coeffs(hpL); lpL.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate); lpR.copy_coeffs(lpL); pL.set_peakeq_rbj((float)*params[param_f2_freq], *params[param_f2_q], *params[param_f2_level], (float)srate); pR.copy_coeffs(pL); f1_freq_old = *params[param_f1_freq]; f1_level_old = *params[param_f1_level]; f2_freq_old = *params[param_f2_freq]; f2_level_old = *params[param_f2_level]; f2_q_old = *params[param_f2_q]; } // and set the compressor module compressor.set_params((float)*params[param_laxity], (float)*params[param_laxity] * 1.33, *params[param_threshold], *params[param_ratio], 2.8, *params[param_makeup], *params[param_detection], 0.f, *params[param_bypass], 0.f); } void deesser_audio_module::set_sample_rate(uint32_t sr) { srate = sr; compressor.set_sample_rate(srate); } uint32_t deesser_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed81e8da266 while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too clip_out = 0.f; detected = 0.f; detected_led = 0.f; } else { // process detected_led -= std::min(detected_led, numsamples); clip_led -= std::min(clip_led, numsamples); compressor.update_curve(); while(offset < numsamples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; float leftAC = inL; float rightAC = inR; float leftSC = inL; float rightSC = inR; float leftRC = inL; float rightRC = inR; float leftMC = inL; float rightMC = inR; leftSC = pL.process(hpL.process(leftSC)); rightSC = pR.process(hpR.process(rightSC)); leftMC = leftSC; rightMC = rightSC; switch ((int)*params[param_mode]) { default: case WIDE: compressor.process(leftAC, rightAC, &leftSC, &rightSC); break; case SPLIT: hpL.sanitize(); hpR.sanitize(); leftRC = hpL.process(leftRC); rightRC = hpR.process(rightRC); compressor.process(leftRC, rightRC, &leftSC, &rightSC); leftAC = lpL.process(leftAC); rightAC = lpR.process(rightAC); leftAC += leftRC; rightAC += rightRC; break; } if(*params[param_sc_listen] > 0.f) { outL = leftMC; outR = rightMC; } else { outL = leftAC; outR = rightAC; } // send to output outs[0][offset] = outL; outs[1][offset] = outR; if(std::max(fabs(leftSC), fabs(rightSC)) > *params[param_threshold]) { detected_led = srate >> 3; } if(std::max(fabs(leftAC), fabs(rightAC)) > 1.f) { clip_led = srate >> 3; } if(clip_led > 0) { clip_out = 1.f; } else { clip_out = std::max(fabs(outL), fabs(outR)); } detected = std::max(fabs(leftMC), fabs(rightMC)); // next sample ++offset; } // cycle trough samples hpL.sanitize(); hpR.sanitize(); lpL.sanitize(); lpR.sanitize(); pL.sanitize(); pR.sanitize(); } // draw meters if(params[param_detected_led] != NULL) { *params[param_detected_led] = detected_led; } if(params[param_clip_out] != NULL) { *params[param_clip_out] = clip_out; } if(params[param_detected] != NULL) { *params[param_detected] = detected; } // draw strip meter if(bypass > 0.5f) { if(params[param_compression] != NULL) { *params[param_compression] = 1.0f; } } else { if(params[param_compression] != NULL) { *params[param_compression] = compressor.get_comp_level(); } } // whatever has to be returned x) return outputs_mask; } bool deesser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (index == param_f1_freq && !subindex) { context->set_line_width(1.5); return ::get_graph(*this, subindex, data, points); } return false; } bool deesser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return get_freq_gridline(subindex, pos, vertical, legend, context); // return false; } int deesser_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) { return false; } else { // (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) if (*params[param_f1_freq] != f1_freq_old1 or *params[param_f2_freq] != f2_freq_old1 or *params[param_f1_level] != f1_level_old1 or *params[param_f2_level] != f2_level_old1 or *params[param_f2_q] !=f2_q_old1) { f1_freq_old1 = *params[param_f1_freq]; f2_freq_old1 = *params[param_f2_freq]; f1_level_old1 = *params[param_f1_level]; f2_level_old1 = *params[param_f2_level]; f2_q_old1 = *params[param_f2_q]; last_generation++; subindex_graph = 0; subindex_dot = INT_MAX; subindex_gridline = INT_MAX; } else { subindex_graph = 0; subindex_dot = subindex_gridline = generation ? INT_MAX : 0; } if (generation == last_calculated_generation) subindex_graph = INT_MAX; return last_generation; } return false; } /// Gate originally by Damien /// /// This module provides Damien's original expander based on Thor's compressor /// without any weighting /////////////////////////////////////////////////////////////////////////////////////////////// gate_audio_module::gate_audio_module() { is_active = false; srate = 0; last_generation = 0; meters.reset(); } void gate_audio_module::activate() { is_active = true; // set all filters and strips gate.activate(); params_changed(); meters.reset(); } void gate_audio_module::deactivate() { is_active = false; gate.deactivate(); } void gate_audio_module::params_changed() { gate.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f, *params[param_range]); } void gate_audio_module::set_sample_rate(uint32_t sr) { srate = sr; gate.set_sample_rate(srate); meters.set_sample_rate(srate); } uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too meters.bypassed(params, orig_numsamples); } else { // process gate.update_curve(); while(offset < numsamples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; float leftAC = inL; float rightAC = inR; gate.process(leftAC, rightAC); outL = leftAC; outR = rightAC; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); } // draw strip meter if(bypass > 0.5f) { if(params[param_gating] != NULL) { *params[param_gating] = 1.0f; } } else { if(params[param_gating] != NULL) { *params[param_gating] = gate.get_expander_level(); } } // whatever has to be returned x) return outputs_mask; } bool gate_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; return gate.get_graph(subindex, data, points, context); } bool gate_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; return gate.get_dot(subindex, x, y, size, context); } bool gate_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) return false; return gate.get_gridline(subindex, pos, vertical, legend, context); } int gate_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) return false; return gate.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); } /// Sidecain Gate by Markus Schmidt /// /// This module splits the signal in a sidechain- and a process signal. /// The sidechain is processed through Krzystofs filters and gates /// the process signal via Damiens's gating routine afterwards. /////////////////////////////////////////////////////////////////////////////////////////////// sidechaingate_audio_module::sidechaingate_audio_module() { is_active = false; srate = 0; last_generation = 0; f1_freq_old = f2_freq_old = f1_level_old = f2_level_old = 0; f1_freq_old1 = f2_freq_old1 = f1_level_old1 = f2_level_old1 = 0; sc_mode_old = sc_mode_old1 = WIDEBAND; // doesn't matter as long as it's sane meters.reset(); } void sidechaingate_audio_module::activate() { is_active = true; // set all filters and strips gate.activate(); params_changed(); meters.reset(); } void sidechaingate_audio_module::deactivate() { is_active = false; gate.deactivate(); } sidechaingate_audio_module::cfloat sidechaingate_audio_module::h_z(const cfloat &z) const { switch ((CalfScModes)sc_mode) { default: case WIDEBAND: return false; break; case HIGHGATE_WIDE: case LOWGATE_WIDE: case WEIGHTED_1: case WEIGHTED_2: case WEIGHTED_3: case BANDPASS_2: return f1L.h_z(z) * f2L.h_z(z); break; case HIGHGATE_SPLIT: return f2L.h_z(z); break; case LOWGATE_SPLIT: case BANDPASS_1: return f1L.h_z(z); break; } } float sidechaingate_audio_module::freq_gain(int index, double freq, uint32_t sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); return std::abs(h_z(z)); } void sidechaingate_audio_module::params_changed() { // set the params of all filters if(*params[param_f1_freq] != f1_freq_old or *params[param_f1_level] != f1_level_old or *params[param_f2_freq] != f2_freq_old or *params[param_f2_level] != f2_level_old or *params[param_sc_mode] != sc_mode) { float q = 0.707; switch ((CalfScModes)*params[param_sc_mode]) { default: case WIDEBAND: f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 0.f; f2_active = 0.f; break; case HIGHGATE_WIDE: f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 1.f; break; case HIGHGATE_SPLIT: f1L.set_lp_rbj((float)*params[param_f2_freq] * (1 + 0.17), q, (float)srate); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f2_freq] * (1 - 0.17), q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 0.f; f2_active = 1.f; break; case LOWGATE_WIDE: f1L.set_lp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 0.5f; break; case LOWGATE_SPLIT: f1L.set_lp_rbj((float)*params[param_f1_freq] * (1 + 0.17), q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f1_freq] * (1 - 0.17), q, (float)srate); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 0.f; break; case WEIGHTED_1: f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 0.5f; break; case WEIGHTED_2: f1L.set_lowshelf_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_peakeq_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 0.5f; break; case WEIGHTED_3: f1L.set_peakeq_rbj((float)*params[param_f1_freq], q, *params[param_f1_level], (float)srate); f1R.copy_coeffs(f1L); f2L.set_highshelf_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 0.5f; f2_active = 0.5f; break; case BANDPASS_1: f1L.set_bp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_hp_rbj((float)*params[param_f2_freq], q, *params[param_f2_level], (float)srate); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 0.f; break; case BANDPASS_2: f1L.set_hp_rbj((float)*params[param_f1_freq], q, (float)srate, *params[param_f1_level]); f1R.copy_coeffs(f1L); f2L.set_lp_rbj((float)*params[param_f2_freq], q, (float)srate, *params[param_f2_level]); f2R.copy_coeffs(f2L); f1_active = 1.f; f2_active = 1.f; break; } f1_freq_old = *params[param_f1_freq]; f1_level_old = *params[param_f1_level]; f2_freq_old = *params[param_f2_freq]; f2_level_old = *params[param_f2_level]; sc_mode = (CalfScModes)*params[param_sc_mode]; } // light LED's if(params[param_f1_active] != NULL) { *params[param_f1_active] = f1_active; } if(params[param_f2_active] != NULL) { *params[param_f2_active] = f2_active; } // and set the expander module gate.set_params(*params[param_attack], *params[param_release], *params[param_threshold], *params[param_ratio], *params[param_knee], *params[param_makeup], *params[param_detection], *params[param_stereo_link], *params[param_bypass], 0.f, *params[param_range]); } void sidechaingate_audio_module::set_sample_rate(uint32_t sr) { srate = sr; gate.set_sample_rate(srate); meters.set_sample_rate(srate); } uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { switch ((CalfScRoute)*params[param_sc_route]) { case STEREO: outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; break; case RIGHT_LEFT: outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[0][offset]; break; case LEFT_RIGHT: outs[0][offset] = ins[1][offset]; outs[1][offset] = ins[1][offset]; break; } outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too meters.bypassed(params, orig_offset); } else { // process gate.update_curve(); while(offset < numsamples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; float leftAC = inL; float rightAC = inR; float leftSC = inL; float rightSC = inR; float leftMC = inL; float rightMC = inR; switch ((CalfScRoute)*params[param_sc_route]) { case STEREO: leftAC = inL; rightAC = inR; leftSC = inL; rightSC = inR; leftMC = inL; rightMC = inR; break; case RIGHT_LEFT: leftAC = inL; rightAC = inL; leftSC = inR; rightSC = inR; leftMC = inL; rightMC = inL; break; case LEFT_RIGHT: leftAC = inR; rightAC = inR; leftSC = inL; rightSC = inL; leftMC = inR; rightMC = inR; break; } leftSC *= *params[param_sc_level]; rightSC *= *params[param_sc_level]; switch ((CalfScModes)*params[param_sc_mode]) { default: case WIDEBAND: gate.process(leftAC, rightAC, &leftSC, &rightSC); leftMC = leftSC; rightMC = rightSC; break; case HIGHGATE_WIDE: case LOWGATE_WIDE: case WEIGHTED_1: case WEIGHTED_2: case WEIGHTED_3: case BANDPASS_2: leftSC = f2L.process(f1L.process(leftSC)); rightSC = f2R.process(f1R.process(rightSC)); leftMC = leftSC; rightMC = rightSC; gate.process(leftAC, rightAC, &leftSC, &rightSC); break; case HIGHGATE_SPLIT: leftSC = f2L.process(leftSC); rightSC = f2R.process(rightSC); leftMC = leftSC; rightMC = rightSC; gate.process(leftSC, rightSC, &leftSC, &rightSC); leftAC = f1L.process(leftAC); rightAC = f1R.process(rightAC); leftAC += leftSC; rightAC += rightSC; break; case LOWGATE_SPLIT: leftSC = f1L.process(leftSC); rightSC = f1R.process(rightSC); leftMC = leftSC; rightMC = rightSC; gate.process(leftSC, rightSC, &leftSC, &rightSC); leftAC = f2L.process(leftAC); rightAC = f2R.process(rightAC); leftAC += leftSC; rightAC += rightSC; break; case BANDPASS_1: leftSC = f1L.process(leftSC); rightSC = f1R.process(rightSC); leftMC = leftSC; rightMC = rightSC; gate.process(leftAC, rightAC, &leftSC, &rightSC); break; } if(*params[param_sc_listen] > 0.f) { outL = leftMC; outR = rightMC; } else { outL = leftAC; outR = rightAC; } // send to output outs[0][offset] = outL; outs[1][offset] = outR; // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); f1L.sanitize(); f1R.sanitize(); f2L.sanitize(); f2R.sanitize(); } // draw strip meter if(bypass > 0.5f) { if(params[param_gating] != NULL) { *params[param_gating] = 1.0f; } } else { if(params[param_gating] != NULL) { *params[param_gating] = gate.get_expander_level(); } } // whatever has to be returned x) return outputs_mask; } bool sidechaingate_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (index == param_f1_freq && !subindex) { context->set_line_width(1.5); return ::get_graph(*this, subindex, data, points); } else if(index == param_gating) { return gate.get_graph(subindex, data, points, context); } return false; } bool sidechaingate_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; if (index == param_gating) { return gate.get_dot(subindex, x, y, size, context); } return false; } bool sidechaingate_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) return false; if (index == param_gating) { return gate.get_gridline(subindex, pos, vertical, legend, context); } else { return get_freq_gridline(subindex, pos, vertical, legend, context); } // return false; } int sidechaingate_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) return false; if(index == param_gating) { return gate.get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); } else { // (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) if (*params[param_f1_freq] != f1_freq_old1 or *params[param_f2_freq] != f2_freq_old1 or *params[param_f1_level] != f1_level_old1 or *params[param_f2_level] != f2_level_old1 or *params[param_sc_mode] !=sc_mode_old1) { f1_freq_old1 = *params[param_f1_freq]; f2_freq_old1 = *params[param_f2_freq]; f1_level_old1 = *params[param_f1_level]; f2_level_old1 = *params[param_f2_level]; sc_mode_old1 = (CalfScModes)*params[param_sc_mode]; last_generation++; subindex_graph = 0; subindex_dot = INT_MAX; subindex_gridline = INT_MAX; } else { subindex_graph = 0; subindex_dot = subindex_gridline = generation ? INT_MAX : 0; } if (generation == last_calculated_generation) subindex_graph = INT_MAX; return last_generation; } return false; } /// Multiband Compressor by Markus Schmidt /// /// This module splits the signal in four different bands /// and sends them through multiple filters (implemented by /// Krzysztof). They are processed by a compressing routine /// (implemented by Thor) afterwards and summed up to the /// final output again. /////////////////////////////////////////////////////////////////////////////////////////////// multibandgate_audio_module::multibandgate_audio_module() { is_active = false; srate = 0; // zero all displays clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; for(int i = 0; i < strips - 1; i ++) { freq_old[i] = -1; sep_old[i] = -1; q_old[i] = -1; } mode_old = -1; } void multibandgate_audio_module::activate() { is_active = true; // set all filters and strips params_changed(); // activate all strips for (int j = 0; j < strips; j ++) { gate[j].activate(); gate[j].id = j; } } void multibandgate_audio_module::deactivate() { is_active = false; // deactivate all strips for (int j = 0; j < strips; j ++) { gate[j].deactivate(); } } void multibandgate_audio_module::params_changed() { // determine mute/solo states solo[0] = *params[param_solo0] > 0.f ? true : false; solo[1] = *params[param_solo1] > 0.f ? true : false; solo[2] = *params[param_solo2] > 0.f ? true : false; solo[3] = *params[param_solo3] > 0.f ? true : false; no_solo = (*params[param_solo0] > 0.f || *params[param_solo1] > 0.f || *params[param_solo2] > 0.f || *params[param_solo3] > 0.f) ? false : true; int i; int j1; switch(mode) { case 0: default: j1 = 0; break; case 1: j1 = 2; break; } // set the params of all filters if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0] or *params[param_mode] != mode_old) { lpL[0][0].set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate); hpL[0][0].set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate); lpR[0][0].copy_coeffs(lpL[0][0]); hpR[0][0].copy_coeffs(hpL[0][0]); for(i = 1; i <= j1; i++) { lpL[0][i].copy_coeffs(lpL[0][0]); hpL[0][i].copy_coeffs(hpL[0][0]); lpR[0][i].copy_coeffs(lpL[0][0]); hpR[0][i].copy_coeffs(hpL[0][0]); } freq_old[0] = *params[param_freq0]; sep_old[0] = *params[param_sep0]; q_old[0] = *params[param_q0]; } if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1] or *params[param_mode] != mode_old) { lpL[1][0].set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate); hpL[1][0].set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate); lpR[1][0].copy_coeffs(lpL[1][0]); hpR[1][0].copy_coeffs(hpL[1][0]); for(i = 1; i <= j1; i++) { lpL[1][i].copy_coeffs(lpL[1][0]); hpL[1][i].copy_coeffs(hpL[1][0]); lpR[1][i].copy_coeffs(lpL[1][0]); hpR[1][i].copy_coeffs(hpL[1][0]); } freq_old[1] = *params[param_freq1]; sep_old[1] = *params[param_sep1]; q_old[1] = *params[param_q1]; } if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2] or *params[param_mode] != mode_old) { lpL[2][0].set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate); hpL[2][0].set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate); lpR[2][0].copy_coeffs(lpL[2][0]); hpR[2][0].copy_coeffs(hpL[2][0]); for(i = 1; i <= j1; i++) { lpL[2][i].copy_coeffs(lpL[2][0]); hpL[2][i].copy_coeffs(hpL[2][0]); lpR[2][i].copy_coeffs(lpL[2][0]); hpR[2][i].copy_coeffs(hpL[2][0]); } freq_old[2] = *params[param_freq2]; sep_old[2] = *params[param_sep2]; q_old[2] = *params[param_q2]; } // set the params of all strips gate[0].set_params(*params[param_attack0], *params[param_release0], *params[param_threshold0], *params[param_ratio0], *params[param_knee0], *params[param_makeup0], *params[param_detection0], 1.f, *params[param_bypass0], !(solo[0] || no_solo), *params[param_range0]); gate[1].set_params(*params[param_attack1], *params[param_release1], *params[param_threshold1], *params[param_ratio1], *params[param_knee1], *params[param_makeup1], *params[param_detection1], 1.f, *params[param_bypass1], !(solo[1] || no_solo), *params[param_range1]); gate[2].set_params(*params[param_attack2], *params[param_release2], *params[param_threshold2], *params[param_ratio2], *params[param_knee2], *params[param_makeup2], *params[param_detection2], 1.f, *params[param_bypass2], !(solo[2] || no_solo), *params[param_range2]); gate[3].set_params(*params[param_attack3], *params[param_release3], *params[param_threshold3], *params[param_ratio3], *params[param_knee3], *params[param_makeup3], *params[param_detection3], 1.f, *params[param_bypass3], !(solo[3] || no_solo), *params[param_range3]); } void multibandgate_audio_module::set_sample_rate(uint32_t sr) { srate = sr; // set srate of all strips for (int j = 0; j < strips; j ++) { gate[j].set_sample_rate(srate); } } #define BYPASSED_GATING(index) \ if(params[param_gating##index] != NULL) \ *params[param_gating##index] = 1.0; \ if(params[param_output##index] != NULL) \ *params[param_output##index] = 0.0; #define ACTIVE_GATING(index) \ if(params[param_gating##index] != NULL) \ *params[param_gating##index] = gate[index].get_expander_level(); \ if(params[param_output##index] != NULL) \ *params[param_output##index] = gate[index].get_output_level(); uint32_t multibandgate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; for (int i = 0; i < strips; i++) gate[i].update_curve(); if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; } else { // process all strips // let meters fall a bit clip_inL -= std::min(clip_inL, numsamples); clip_inR -= std::min(clip_inR, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; while(offset < numsamples) { // cycle through samples float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; // out vars float outL = 0.f; float outR = 0.f; int j1; for (int i = 0; i < strips; i ++) { // cycle trough strips if (solo[i] || no_solo) { // strip unmuted float left = inL; float right = inR; // send trough filters switch(mode) { case 0: default: j1 = 0; break; case 1: j1 = 2; break; } for (int j = 0; j <= j1; j++){ if(i + 1 < strips) { left = lpL[i][j].process(left); right = lpR[i][j].process(right); lpL[i][j].sanitize(); lpR[i][j].sanitize(); } if(i - 1 >= 0) { left = hpL[i - 1][j].process(left); right = hpR[i - 1][j].process(right); hpL[i - 1][j].sanitize(); hpR[i - 1][j].sanitize(); } } // process gain reduction gate[i].process(left, right); // sum up output outL += left; outR += right; } else { // strip muted } } // process single strip // even out filters gain reduction // 3dB - levelled manually (based on default sep and q settings) switch(mode) { case 0: outL *= 1.414213562; outR *= 1.414213562; break; case 1: outL *= 0.88; outR *= 0.88; break; } // out level outL *= *params[param_level_out]; outR *= *params[param_level_out]; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // clip LED's if(inL > 1.f) { clip_inL = srate >> 3; } if(inR > 1.f) { clip_inR = srate >> 3; } if(outL > 1.f) { clip_outL = srate >> 3; } if(outR > 1.f) { clip_outR = srate >> 3; } // set up in / out meters if(inL > meter_inL) { meter_inL = inL; } if(inR > meter_inR) { meter_inR = inR; } if(outL > meter_outL) { meter_outL = outL; } if(outR > meter_outR) { meter_outR = outR; } // next sample ++offset; } // cycle trough samples } // process all strips (no bypass) // draw meters SET_IF_CONNECTED(clip_inL); SET_IF_CONNECTED(clip_inR); SET_IF_CONNECTED(clip_outL); SET_IF_CONNECTED(clip_outR); SET_IF_CONNECTED(meter_inL); SET_IF_CONNECTED(meter_inR); SET_IF_CONNECTED(meter_outL); SET_IF_CONNECTED(meter_outR); // draw strip meters if(bypass > 0.5f) { BYPASSED_GATING(0) BYPASSED_GATING(1) BYPASSED_GATING(2) BYPASSED_GATING(3) } else { ACTIVE_GATING(0) ACTIVE_GATING(1) ACTIVE_GATING(2) ACTIVE_GATING(3) } // whatever has to be returned x) return outputs_mask; } const expander_audio_module *multibandgate_audio_module::get_strip_by_param_index(int index) const { // let's handle by the corresponding strip switch (index) { case param_gating0: return &gate[0]; case param_gating1: return &gate[1]; case param_gating2: return &gate[2]; case param_gating3: return &gate[3]; } return NULL; } bool multibandgate_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { const expander_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_graph(subindex, data, points, context); return false; } bool multibandgate_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { const expander_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_dot(subindex, x, y, size, context); return false; } bool multibandgate_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { const expander_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_gridline(subindex, pos, vertical, legend, context); return false; } int multibandgate_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { const expander_audio_module *m = get_strip_by_param_index(index); if (m) return m->get_changed_offsets(generation, subindex_graph, subindex_dot, subindex_gridline); return 0; } /// Gain reduction module by Thor /// All functions of this module are originally written /// by Thor, while some features have been stripped (mainly stereo linking /// and frequency correction as implemented in Sidechain Compressor above) /// To save some CPU. //////////////////////////////////////////////////////////////////////////////// gain_reduction_audio_module::gain_reduction_audio_module() { is_active = false; srate = 0; last_generation = 0; old_threshold = 0.f; old_ratio = 0.f; old_knee = 0.f; old_makeup = 0.f; old_detection = 0.f; old_bypass = 0.f; old_mute = 0.f; linSlope = 0.f; attack = 0.f; release = 0.f; detection = -1; stereo_link = -1; threshold = -1; ratio = -1; knee = -1; makeup = -1; bypass = -1; mute = -1; } void gain_reduction_audio_module::activate() { is_active = true; linSlope = 0.f; meter_out = 0.f; meter_comp = 1.f; float l, r; l = r = 0.f; float byp = bypass; bypass = 0.0; process(l, r, 0, 0); bypass = byp; } void gain_reduction_audio_module::deactivate() { is_active = false; } void gain_reduction_audio_module::update_curve() { float linThreshold = threshold; float linKneeSqrt = sqrt(knee); linKneeStart = linThreshold / linKneeSqrt; adjKneeStart = linKneeStart*linKneeStart; float linKneeStop = linThreshold * linKneeSqrt; thres = log(linThreshold); kneeStart = log(linKneeStart); kneeStop = log(linKneeStop); compressedKneeStop = (kneeStop - thres) / ratio + thres; } void gain_reduction_audio_module::process(float &left, float &right, const float *det_left, const float *det_right) { if(!det_left) { det_left = &left; } if(!det_right) { det_right = &right; } if(bypass < 0.5f) { // this routine is mainly copied from thor's compressor module // greatest sounding compressor I've heard! bool rms = (detection == 0); bool average = (stereo_link == 0); float attack_coeff = std::min(1.f, 1.f / (attack * srate / 4000.f)); float release_coeff = std::min(1.f, 1.f / (release * srate / 4000.f)); float absample = average ? (fabs(*det_left) + fabs(*det_right)) * 0.5f : std::max(fabs(*det_left), fabs(*det_right)); if(rms) absample *= absample; dsp::sanitize(linSlope); linSlope += (absample - linSlope) * (absample > linSlope ? attack_coeff : release_coeff); float gain = 1.f; if(linSlope > 0.f) { gain = output_gain(linSlope, rms); } left *= gain * makeup; right *= gain * makeup; meter_out = std::max(fabs(left), fabs(right));; meter_comp = gain; detected = rms ? sqrt(linSlope) : linSlope; } } float gain_reduction_audio_module::output_level(float slope) const { return slope * output_gain(slope, false) * makeup; } float gain_reduction_audio_module::output_gain(float linSlope, bool rms) const { //this calculation is also thor's work if(linSlope > (rms ? adjKneeStart : linKneeStart)) { float slope = log(linSlope); if(rms) slope *= 0.5f; float gain = 0.f; float delta = 0.f; if(IS_FAKE_INFINITY(ratio)) { gain = thres; delta = 0.f; } else { gain = (slope - thres) / ratio + thres; delta = 1.f / ratio; } if(knee > 1.f && slope < kneeStop) { gain = hermite_interpolation(slope, kneeStart, kneeStop, kneeStart, compressedKneeStop, 1.f, delta); } return exp(gain - slope); } return 1.f; } void gain_reduction_audio_module::set_sample_rate(uint32_t sr) { srate = sr; } void gain_reduction_audio_module::set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu) { // set all params attack = att; release = rel; threshold = thr; ratio = rat; knee = kn; makeup = mak; detection = det; stereo_link = stl; bypass = byp; mute = mu; if(mute > 0.f) { meter_out = 0.f; meter_comp = 1.f; } } float gain_reduction_audio_module::get_output_level() { // returns output level (max(left, right)) return meter_out; } float gain_reduction_audio_module::get_comp_level() { // returns amount of compression return meter_comp; } bool gain_reduction_audio_module::get_graph(int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (subindex > 1) // 1 return false; for (int i = 0; i < points; i++) { float input = dB_grid_inv(-1.0 + i * 2.0 / (points - 1)); if (subindex == 0) data[i] = dB_grid(input); else { float output = output_level(input); data[i] = dB_grid(output); } } if (subindex == (bypass > 0.5f ? 1 : 0) or mute > 0.1f) context->set_source_rgba(0.35, 0.4, 0.2, 0.3); else { context->set_source_rgba(0.35, 0.4, 0.2, 1); context->set_line_width(1.5); } return true; } bool gain_reduction_audio_module::get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; if (!subindex) { if(bypass > 0.5f or mute > 0.f) { return false; } else { bool rms = (detection == 0); float det = rms ? sqrt(detected) : detected; x = 0.5 + 0.5 * dB_grid(det); y = dB_grid(bypass > 0.5f or mute > 0.f ? det : output_level(det)); return true; } } return false; } bool gain_reduction_audio_module::get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { bool tmp; vertical = (subindex & 1) != 0; bool result = get_freq_gridline(subindex >> 1, pos, tmp, legend, context, false); if (result && vertical) { if ((subindex & 4) && !legend.empty()) { legend = ""; } else { size_t pos = legend.find(" dB"); if (pos != std::string::npos) legend.erase(pos); } pos = 0.5 + 0.5 * pos; } return result; } int gain_reduction_audio_module::get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = 0; subindex_dot = 0; subindex_gridline = generation ? INT_MAX : 0; if (fabs(threshold-old_threshold) + fabs(ratio - old_ratio) + fabs(knee - old_knee) + fabs(makeup - old_makeup) + fabs(detection - old_detection) + fabs(bypass - old_bypass) + fabs(mute - old_mute) > 0.000001f) { old_threshold = threshold; old_ratio = ratio; old_knee = knee; old_makeup = makeup; old_detection = detection; old_bypass = bypass; old_mute = mute; last_generation++; } if (generation == last_generation) subindex_graph = 2; return last_generation; } /// Gate module by Damien /// All functions of this module are originally written /// by Damien, while some features have been stripped (mainly stereo linking /// and frequency correction as implemented in Sidechain Gate above) /// To save some CPU. //////////////////////////////////////////////////////////////////////////////// expander_audio_module::expander_audio_module() { is_active = false; srate = 0; last_generation = 0; range = -1.f; threshold = -1.f; ratio = -1.f; knee = -1.f; makeup = -1.f; detection = -1.f; bypass = -1.f; mute = -1.f; stereo_link = -1.f; old_range = 0.f; old_threshold = 0.f; old_ratio = 0.f; old_knee = 0.f; old_makeup = 0.f; old_detection = 0.f; old_bypass = 0.f; old_mute = 0.f; old_trigger = 0.f; old_stereo_link = 0.f; linSlope = -1; linKneeStop = 0; } void expander_audio_module::activate() { is_active = true; linSlope = 0.f; meter_out = 0.f; meter_gate = 1.f; float l, r; l = r = 0.f; float byp = bypass; bypass = 0.0; process(l, r); bypass = byp; } void expander_audio_module::deactivate() { is_active = false; } void expander_audio_module::update_curve() { bool rms = (detection == 0); float linThreshold = threshold; if (rms) linThreshold = linThreshold * linThreshold; attack_coeff = std::min(1.f, 1.f / (attack * srate / 4000.f)); release_coeff = std::min(1.f, 1.f / (release * srate / 4000.f)); float linKneeSqrt = sqrt(knee); linKneeStart = linThreshold / linKneeSqrt; adjKneeStart = linKneeStart*linKneeStart; linKneeStop = linThreshold * linKneeSqrt; thres = log(linThreshold); kneeStart = log(linKneeStart); kneeStop = log(linKneeStop); compressedKneeStop = (kneeStop - thres) / ratio + thres; } void expander_audio_module::process(float &left, float &right, const float *det_left, const float *det_right) { if(!det_left) { det_left = &left; } if(!det_right) { det_right = &right; } if(bypass < 0.5f) { // this routine is mainly copied from Damien's expander module based on Thor's compressor bool rms = (detection == 0); bool average = (stereo_link == 0); float absample = average ? (fabs(*det_left) + fabs(*det_right)) * 0.5f : std::max(fabs(*det_left), fabs(*det_right)); if(rms) absample *= absample; dsp::sanitize(linSlope); linSlope += (absample - linSlope) * (absample > linSlope ? attack_coeff : release_coeff); float gain = 1.f; if(linSlope > 0.f) { gain = output_gain(linSlope, rms); } left *= gain * makeup; right *= gain * makeup; meter_out = std::max(fabs(left), fabs(right)); meter_gate = gain; detected = linSlope; } } float expander_audio_module::output_level(float slope) const { bool rms = (detection == 0); return slope * output_gain(rms ? slope*slope : slope, rms) * makeup; } float expander_audio_module::output_gain(float linSlope, bool rms) const { //this calculation is also Damiens's work based on Thor's compressor if(linSlope < linKneeStop) { float slope = log(linSlope); //float tratio = rms ? sqrt(ratio) : ratio; float tratio = ratio; float gain = 0.f; float delta = 0.f; if(IS_FAKE_INFINITY(ratio)) tratio = 1000.f; gain = (slope-thres) * tratio + thres; delta = tratio; if(knee > 1.f && slope > kneeStart ) { gain = dsp::hermite_interpolation(slope, kneeStart, kneeStop, ((kneeStart - thres) * tratio + thres), kneeStop, delta,1.f); } return std::max(range, expf(gain-slope)); } return 1.f; } void expander_audio_module::set_sample_rate(uint32_t sr) { srate = sr; } void expander_audio_module::set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu, float ran) { // set all params attack = att; release = rel; threshold = thr; ratio = rat; knee = kn; makeup = mak; detection = det; stereo_link = stl; bypass = byp; mute = mu; range = ran; if(mute > 0.f) { meter_out = 0.f; meter_gate = 1.f; } } float expander_audio_module::get_output_level() { // returns output level (max(left, right)) return meter_out; } float expander_audio_module::get_expander_level() { // returns amount of gating return meter_gate; } bool expander_audio_module::get_graph(int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (subindex > 1) // 1 return false; for (int i = 0; i < points; i++) { float input = dB_grid_inv(-1.0 + i * 2.0 / (points - 1)); if (subindex == 0) data[i] = dB_grid(input); else { float output = output_level(input); data[i] = dB_grid(output); } } if (subindex == (bypass > 0.5f ? 1 : 0) or mute > 0.1f) context->set_source_rgba(0.35, 0.4, 0.2, 0.3); else { context->set_source_rgba(0.35, 0.4, 0.2, 1); context->set_line_width(1.5); } return true; } bool expander_audio_module::get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; if (!subindex) { if(bypass > 0.5f or mute > 0.f) { return false; } else { bool rms = (detection == 0); float det = rms ? sqrt(detected) : detected; x = 0.5 + 0.5 * dB_grid(det); y = dB_grid(bypass > 0.5f or mute > 0.f ? det : output_level(det)); return true; } } return false; } bool expander_audio_module::get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { bool tmp; vertical = (subindex & 1) != 0; bool result = get_freq_gridline(subindex >> 1, pos, tmp, legend, context, false); if (result && vertical) { if ((subindex & 4) && !legend.empty()) { legend = ""; } else { size_t pos = legend.find(" dB"); if (pos != std::string::npos) legend.erase(pos); } pos = 0.5 + 0.5 * pos; } return result; } int expander_audio_module::get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = 0; subindex_dot = 0; subindex_gridline = generation ? INT_MAX : 0; if (fabs(range-old_range) + fabs(threshold-old_threshold) + fabs(ratio - old_ratio) + fabs(knee - old_knee) + fabs(makeup - old_makeup) + fabs(detection - old_detection) + fabs(bypass - old_bypass) + fabs(mute - old_mute) > 0.000001f) { old_range = range; old_threshold = threshold; old_ratio = ratio; old_knee = knee; old_makeup = makeup; old_detection = detection; old_bypass = bypass; old_mute = mute; last_generation++; } if (generation == last_generation) subindex_graph = 2; return last_generation; } lmms-1.1.3/plugins/LadspaEffect/calf/src/modules_dist.cpp000066400000000000000000000557171247673406200234130ustar00rootroot00000000000000/* Calf DSP plugin pack * Distortion related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace dsp; using namespace calf_plugins; /// Saturator Band by Markus Schmidt /// /// This module is based on Krzysztof's filters and Tom Szilagyi's distortion routine. /// It provides a blendable saturation stage followed by a highpass, a lowpass and a peak filter /////////////////////////////////////////////////////////////////////////////////////////////// saturator_audio_module::saturator_audio_module() { is_active = false; srate = 0; meter_drive = 0.f; lp_pre_freq_old = -1; hp_pre_freq_old = -1; lp_post_freq_old = -1; hp_post_freq_old = -1; p_freq_old = -1; p_level_old = -1; } void saturator_audio_module::activate() { is_active = true; // set all filters params_changed(); meters.reset(); meter_drive = 0.f; } void saturator_audio_module::deactivate() { is_active = false; } void saturator_audio_module::params_changed() { // set the params of all filters if(*params[param_lp_pre_freq] != lp_pre_freq_old) { lp[0][0].set_lp_rbj(*params[param_lp_pre_freq], 0.707, (float)srate); if(in_count > 1 && out_count > 1) lp[1][0].copy_coeffs(lp[0][0]); lp[0][1].copy_coeffs(lp[0][0]); if(in_count > 1 && out_count > 1) lp[1][1].copy_coeffs(lp[0][0]); lp_pre_freq_old = *params[param_lp_pre_freq]; } if(*params[param_hp_pre_freq] != hp_pre_freq_old) { hp[0][0].set_hp_rbj(*params[param_hp_pre_freq], 0.707, (float)srate); if(in_count > 1 && out_count > 1) hp[1][0].copy_coeffs(hp[0][0]); hp[0][1].copy_coeffs(hp[0][0]); if(in_count > 1 && out_count > 1) hp[1][1].copy_coeffs(hp[0][0]); hp_pre_freq_old = *params[param_hp_pre_freq]; } if(*params[param_lp_post_freq] != lp_post_freq_old) { lp[0][2].set_lp_rbj(*params[param_lp_post_freq], 0.707, (float)srate); if(in_count > 1 && out_count > 1) lp[1][2].copy_coeffs(lp[0][2]); lp[0][3].copy_coeffs(lp[0][2]); if(in_count > 1 && out_count > 1) lp[1][3].copy_coeffs(lp[0][2]); lp_post_freq_old = *params[param_lp_post_freq]; } if(*params[param_hp_post_freq] != hp_post_freq_old) { hp[0][2].set_hp_rbj(*params[param_hp_post_freq], 0.707, (float)srate); if(in_count > 1 && out_count > 1) hp[1][2].copy_coeffs(hp[0][2]); hp[0][3].copy_coeffs(hp[0][2]); if(in_count > 1 && out_count > 1) hp[1][3].copy_coeffs(hp[0][2]); hp_post_freq_old = *params[param_hp_post_freq]; } if(*params[param_p_freq] != p_freq_old or *params[param_p_level] != p_level_old or *params[param_p_q] != p_q_old) { p[0].set_peakeq_rbj((float)*params[param_p_freq], (float)*params[param_p_q], (float)*params[param_p_level], (float)srate); if(in_count > 1 && out_count > 1) p[1].copy_coeffs(p[0]); p_freq_old = *params[param_p_freq]; p_level_old = *params[param_p_level]; p_q_old = *params[param_p_q]; } // set distortion dist[0].set_params(*params[param_blend], *params[param_drive]); if(in_count > 1 && out_count > 1) dist[1].set_params(*params[param_blend], *params[param_drive]); } void saturator_audio_module::set_sample_rate(uint32_t sr) { srate = sr; dist[0].set_sample_rate(sr); if(in_count > 1 && out_count > 1) dist[1].set_sample_rate(sr); meters.set_sample_rate(srate); } uint32_t saturator_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { if(in_count > 1 && out_count > 1) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; } else if(in_count > 1) { outs[0][offset] = (ins[0][offset] + ins[1][offset]) / 2; } else if(out_count > 1) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[0][offset]; } else { outs[0][offset] = ins[0][offset]; } ++offset; } meters.bypassed(params, orig_numsamples); } else { meter_drive = 0.f; float in_avg[2] = {0.f, 0.f}; float out_avg[2] = {0.f, 0.f}; float tube_avg = 0.f; // process while(offset < numsamples) { // cycle through samples float out[2], in[2] = {0.f, 0.f}; int c = 0; if(in_count > 1 && out_count > 1) { // stereo in/stereo out // handle full stereo in[0] = ins[0][offset]; in[1] = ins[1][offset]; c = 2; } else { // in and/or out mono // handle mono in[0] = ins[0][offset]; in[1] = in[0]; c = 1; } float proc[2]; proc[0] = in[0] * *params[param_level_in]; proc[1] = in[1] * *params[param_level_in]; float onedivlevelin = 1.0 / *params[param_level_in]; for (int i = 0; i < c; ++i) { // all pre filters in chain proc[i] = lp[i][1].process(lp[i][0].process(proc[i])); proc[i] = hp[i][1].process(hp[i][0].process(proc[i])); // get average for display purposes before... in_avg[i] += fabs(pow(proc[i], 2.f)); // ...saturate... proc[i] = dist[i].process(proc[i]); // ...and get average after... out_avg[i] += fabs(pow(proc[i], 2.f)); // tone control proc[i] = p[i].process(proc[i]); // all post filters in chain proc[i] = lp[i][2].process(lp[i][3].process(proc[i])); proc[i] = hp[i][2].process(hp[i][3].process(proc[i])); //subtract gain proc[i] *= onedivlevelin; } if(in_count > 1 && out_count > 1) { // full stereo out[0] = ((proc[0] * *params[param_mix]) + in[0] * (1 - *params[param_mix])) * *params[param_level_out]; outs[0][offset] = out[0]; out[1] = ((proc[1] * *params[param_mix]) + in[1] * (1 - *params[param_mix])) * *params[param_level_out]; outs[1][offset] = out[1]; } else if(out_count > 1) { // mono -> pseudo stereo out[0] = ((proc[0] * *params[param_mix]) + in[0] * (1 - *params[param_mix])) * *params[param_level_out]; outs[0][offset] = out[0]; out[1] = out[0]; outs[1][offset] = out[1]; } else { // stereo -> mono // or full mono out[0] = ((proc[0] * *params[param_mix]) + in[0] * (1 - *params[param_mix])) * *params[param_level_out]; outs[0][offset] = out[0]; } // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); tube_avg = (sqrt(std::max(out_avg[0], out_avg[1])) / numsamples) - (sqrt(std::max(in_avg[0], in_avg[1])) / numsamples); meter_drive = (5.0f * fabs(tube_avg) * (float(*params[param_blend]) + 30.0f)); // printf("out:%.6f in: %.6f avg: %.6f drv: %.3f\n", sqrt(std::max(out_avg[0], out_avg[1])) / numsamples, sqrt(std::max(in_avg[0], in_avg[1])) / numsamples, tube_avg, meter_drive); // clean up lp[0][0].sanitize(); lp[1][0].sanitize(); lp[0][1].sanitize(); lp[1][1].sanitize(); lp[0][2].sanitize(); lp[1][2].sanitize(); lp[0][3].sanitize(); lp[1][3].sanitize(); hp[0][0].sanitize(); hp[1][0].sanitize(); hp[0][1].sanitize(); hp[1][1].sanitize(); hp[0][2].sanitize(); hp[1][2].sanitize(); hp[0][3].sanitize(); hp[1][3].sanitize(); p[0].sanitize(); p[1].sanitize(); } // draw meters if(params[param_meter_drive] != NULL) { *params[param_meter_drive] = meter_drive; } // whatever has to be returned x) return outputs_mask; } /// Exciter by Markus Schmidt /// /// This module is based on Krzysztof's filters and Tom Szilagyi's distortion routine. /// It provides a blendable saturation stage followed by a highpass, a lowpass and a peak filter /////////////////////////////////////////////////////////////////////////////////////////////// exciter_audio_module::exciter_audio_module() { is_active = false; srate = 0; meter_drive = 0.f; } void exciter_audio_module::activate() { is_active = true; // set all filters params_changed(); } void exciter_audio_module::deactivate() { is_active = false; } void exciter_audio_module::params_changed() { // set the params of all filters if(*params[param_freq] != freq_old) { hp[0][0].set_hp_rbj(*params[param_freq], 0.707, (float)srate); hp[0][1].copy_coeffs(hp[0][0]); hp[0][2].copy_coeffs(hp[0][0]); hp[0][3].copy_coeffs(hp[0][0]); if(in_count > 1 && out_count > 1) { hp[1][0].copy_coeffs(hp[0][0]); hp[1][1].copy_coeffs(hp[0][0]); hp[1][2].copy_coeffs(hp[0][0]); hp[1][3].copy_coeffs(hp[0][0]); } freq_old = *params[param_freq]; } // set the params of all filters if(*params[param_ceil] != ceil_old or *params[param_ceil_active] != ceil_active_old) { lp[0][0].set_lp_rbj(*params[param_ceil], 0.707, (float)srate); lp[0][1].copy_coeffs(lp[0][0]); lp[1][0].copy_coeffs(lp[0][0]); lp[1][1].copy_coeffs(lp[0][0]); ceil_old = *params[param_ceil]; ceil_active_old = *params[param_ceil_active]; } // set distortion dist[0].set_params(*params[param_blend], *params[param_drive]); if(in_count > 1 && out_count > 1) dist[1].set_params(*params[param_blend], *params[param_drive]); } void exciter_audio_module::set_sample_rate(uint32_t sr) { srate = sr; dist[0].set_sample_rate(sr); if(in_count > 1 && out_count > 1) dist[1].set_sample_rate(sr); meters.set_sample_rate(srate); } uint32_t exciter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { if(in_count > 1 && out_count > 1) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; } else if(in_count > 1) { outs[0][offset] = (ins[0][offset] + ins[1][offset]) / 2; } else if(out_count > 1) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[0][offset]; } else { outs[0][offset] = ins[0][offset]; } ++offset; } meters.bypassed(params, orig_numsamples); // displays, too meter_drive = 0.f; } else { meter_drive = 0.f; float in2out = *params[param_listen] > 0.f ? 0.f : 1.f; // process while(offset < numsamples) { // cycle through samples float out[2], in[2] = {0.f, 0.f}; float maxDrive = 0.f; int c = 0; if(in_count > 1 && out_count > 1) { // stereo in/stereo out // handle full stereo in[0] = ins[0][offset]; in[0] *= *params[param_level_in]; in[1] = ins[1][offset]; in[1] *= *params[param_level_in]; c = 2; } else { // in and/or out mono // handle mono in[0] = ins[0][offset]; in[0] *= *params[param_level_in]; in[1] = in[0]; c = 1; } float proc[2]; proc[0] = in[0]; proc[1] = in[1]; for (int i = 0; i < c; ++i) { // all pre filters in chain proc[i] = hp[i][1].process(hp[i][0].process(proc[i])); // saturate proc[i] = dist[i].process(proc[i]); // all post filters in chain proc[i] = hp[i][2].process(hp[i][3].process(proc[i])); if(*params[param_ceil_active] > 0.5f) { // all H/P post filters in chain proc[i] = lp[i][0].process(lp[i][1].process(proc[i])); } } maxDrive = dist[0].get_distortion_level() * *params[param_amount]; if(in_count > 1 && out_count > 1) { maxDrive = std::max(maxDrive, dist[1].get_distortion_level() * *params[param_amount]); // full stereo out[0] = (proc[0] * *params[param_amount] + in2out * in[0]) * *params[param_level_out]; out[1] = (proc[1] * *params[param_amount] + in2out * in[1]) * *params[param_level_out]; outs[0][offset] = out[0]; outs[1][offset] = out[1]; } else if(out_count > 1) { // mono -> pseudo stereo out[1] = out[0] = (proc[0] * *params[param_amount] + in2out * in[0]) * *params[param_level_out]; outs[0][offset] = out[0]; outs[1][offset] = out[1]; } else { // stereo -> mono // or full mono out[0] = (proc[0] * *params[param_amount] + in2out * in[0]) * *params[param_level_out]; outs[0][offset] = out[0]; } // set up in / out meters if(maxDrive > meter_drive) { meter_drive = maxDrive; } // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); // clean up hp[0][0].sanitize(); hp[1][0].sanitize(); hp[0][1].sanitize(); hp[1][1].sanitize(); hp[0][2].sanitize(); hp[1][2].sanitize(); hp[0][3].sanitize(); hp[1][3].sanitize(); } // draw meters if(params[param_meter_drive] != NULL) { *params[param_meter_drive] = meter_drive; } // whatever has to be returned x) return outputs_mask; } /// Bass Enhancer by Markus Schmidt /// /// This module is based on Krzysztof's filters and Tom's distortion routine. /// It sends the signal through a lowpass, saturates it and sends it through a lowpass again /////////////////////////////////////////////////////////////////////////////////////////////// bassenhancer_audio_module::bassenhancer_audio_module() { is_active = false; srate = 0; meters.reset(); meter_drive = 0.f; } void bassenhancer_audio_module::activate() { is_active = true; meters.reset(); // set all filters params_changed(); } void bassenhancer_audio_module::deactivate() { is_active = false; } void bassenhancer_audio_module::params_changed() { // set the params of all filters if(*params[param_freq] != freq_old) { lp[0][0].set_lp_rbj(*params[param_freq], 0.707, (float)srate); lp[0][1].copy_coeffs(lp[0][0]); lp[0][2].copy_coeffs(lp[0][0]); lp[0][3].copy_coeffs(lp[0][0]); if(in_count > 1 && out_count > 1) { lp[1][0].copy_coeffs(lp[0][0]); lp[1][1].copy_coeffs(lp[0][0]); lp[1][2].copy_coeffs(lp[0][0]); lp[1][3].copy_coeffs(lp[0][0]); } freq_old = *params[param_freq]; } // set the params of all filters if(*params[param_floor] != floor_old or *params[param_floor_active] != floor_active_old) { hp[0][0].set_hp_rbj(*params[param_floor], 0.707, (float)srate); hp[0][1].copy_coeffs(hp[0][0]); hp[1][0].copy_coeffs(hp[0][0]); hp[1][1].copy_coeffs(hp[0][0]); floor_old = *params[param_floor]; floor_active_old = *params[param_floor_active]; } // set distortion dist[0].set_params(*params[param_blend], *params[param_drive]); if(in_count > 1 && out_count > 1) dist[1].set_params(*params[param_blend], *params[param_drive]); } void bassenhancer_audio_module::set_sample_rate(uint32_t sr) { srate = sr; dist[0].set_sample_rate(sr); if(in_count > 1 && out_count > 1) dist[1].set_sample_rate(sr); meters.set_sample_rate(srate); } uint32_t bassenhancer_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { if(in_count > 1 && out_count > 1) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; } else if(in_count > 1) { outs[0][offset] = (ins[0][offset] + ins[1][offset]) / 2; } else if(out_count > 1) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[0][offset]; } else { outs[0][offset] = ins[0][offset]; } ++offset; } // displays, too meters.bypassed(params, orig_numsamples); meter_drive = 0.f; } else { meter_drive = 0.f; // process while(offset < numsamples) { // cycle through samples float out[2], in[2] = {0.f, 0.f}; float maxDrive = 0.f; int c = 0; if(in_count > 1 && out_count > 1) { // stereo in/stereo out // handle full stereo in[0] = ins[0][offset]; in[0] *= *params[param_level_in]; in[1] = ins[1][offset]; in[1] *= *params[param_level_in]; c = 2; } else { // in and/or out mono // handle mono in[0] = ins[0][offset]; in[0] *= *params[param_level_in]; in[1] = in[0]; c = 1; } float proc[2]; proc[0] = in[0]; proc[1] = in[1]; for (int i = 0; i < c; ++i) { // all pre filters in chain proc[i] = lp[i][1].process(lp[i][0].process(proc[i])); // saturate proc[i] = dist[i].process(proc[i]); // all post filters in chain proc[i] = lp[i][2].process(lp[i][3].process(proc[i])); if(*params[param_floor_active] > 0.5f) { // all H/P post filters in chain proc[i] = hp[i][0].process(hp[i][1].process(proc[i])); } } if(in_count > 1 && out_count > 1) { // full stereo if(*params[param_listen] > 0.f) out[0] = proc[0] * *params[param_amount] * *params[param_level_out]; else out[0] = (proc[0] * *params[param_amount] + in[0]) * *params[param_level_out]; outs[0][offset] = out[0]; if(*params[param_listen] > 0.f) out[1] = proc[1] * *params[param_amount] * *params[param_level_out]; else out[1] = (proc[1] * *params[param_amount] + in[1]) * *params[param_level_out]; outs[1][offset] = out[1]; maxDrive = std::max(dist[0].get_distortion_level() * *params[param_amount], dist[1].get_distortion_level() * *params[param_amount]); } else if(out_count > 1) { // mono -> pseudo stereo if(*params[param_listen] > 0.f) out[0] = proc[0] * *params[param_amount] * *params[param_level_out]; else out[0] = (proc[0] * *params[param_amount] + in[0]) * *params[param_level_out]; outs[0][offset] = out[0]; out[1] = out[0]; outs[1][offset] = out[1]; maxDrive = dist[0].get_distortion_level() * *params[param_amount]; } else { // stereo -> mono // or full mono if(*params[param_listen] > 0.f) out[0] = proc[0] * *params[param_amount] * *params[param_level_out]; else out[0] = (proc[0] * *params[param_amount] + in[0]) * *params[param_level_out]; outs[0][offset] = out[0]; maxDrive = dist[0].get_distortion_level() * *params[param_amount]; } // set up in / out meters if(maxDrive > meter_drive) { meter_drive = maxDrive; } // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); // clean up lp[0][0].sanitize(); lp[1][0].sanitize(); lp[0][1].sanitize(); lp[1][1].sanitize(); lp[0][2].sanitize(); lp[1][2].sanitize(); lp[0][3].sanitize(); lp[1][3].sanitize(); } // draw meters if(params[param_meter_drive] != NULL) { *params[param_meter_drive] = meter_drive; } // whatever has to be returned x) return outputs_mask; } lmms-1.1.3/plugins/LadspaEffect/calf/src/modules_eq.cpp000066400000000000000000000267501247673406200230500ustar00rootroot00000000000000/* Calf DSP plugin pack * Equalization related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace dsp; using namespace calf_plugins; /// Equalizer 12 Band by Markus Schmidt /// /// This module is based on Krzysztof's filters. It provides a couple /// of different chained filters. /////////////////////////////////////////////////////////////////////////////////////////////// template equalizerNband_audio_module::equalizerNband_audio_module() { is_active = false; srate = 0; last_generation = 0; hp_freq_old = lp_freq_old = 0; hs_freq_old = ls_freq_old = 0; hs_level_old = ls_level_old = 0; for (int i = 0; i < AM::PeakBands; i++) { p_freq_old[i] = 0; p_level_old[i] = 0; p_q_old[i] = 0; } } template void equalizerNband_audio_module::activate() { is_active = true; // set all filters params_changed(); meters.reset(); } template void equalizerNband_audio_module::deactivate() { is_active = false; } static inline void copy_lphp(biquad_d2 filters[3][2]) { for (int i = 0; i < 3; i++) for (int j = 0; j < 2; j++) if (i || j) filters[i][j].copy_coeffs(filters[0][0]); } template void equalizerNband_audio_module::params_changed() { // set the params of all filters // lp/hp first (if available) if (has_lphp) { hp_mode = (CalfEqMode)(int)*params[AM::param_hp_mode]; lp_mode = (CalfEqMode)(int)*params[AM::param_lp_mode]; float hpfreq = *params[AM::param_hp_freq], lpfreq = *params[AM::param_lp_freq]; if(hpfreq != hp_freq_old) { hp[0][0].set_hp_rbj(hpfreq, 0.707, (float)srate, 1.0); copy_lphp(hp); hp_freq_old = hpfreq; } if(lpfreq != lp_freq_old) { lp[0][0].set_lp_rbj(lpfreq, 0.707, (float)srate, 1.0); copy_lphp(lp); lp_freq_old = lpfreq; } } // then shelves float hsfreq = *params[AM::param_hs_freq], hslevel = *params[AM::param_hs_level]; float lsfreq = *params[AM::param_ls_freq], lslevel = *params[AM::param_ls_level]; if(lsfreq != ls_freq_old or lslevel != ls_level_old) { lsL.set_lowshelf_rbj(lsfreq, 0.707, lslevel, (float)srate); lsR.copy_coeffs(lsL); ls_level_old = lslevel; ls_freq_old = lsfreq; } if(hsfreq != hs_freq_old or hslevel != hs_level_old) { hsL.set_highshelf_rbj(hsfreq, 0.707, hslevel, (float)srate); hsR.copy_coeffs(hsL); hs_level_old = hslevel; hs_freq_old = hsfreq; } for (int i = 0; i < AM::PeakBands; i++) { int offset = i * params_per_band; float freq = *params[AM::param_p1_freq + offset]; float level = *params[AM::param_p1_level + offset]; float q = *params[AM::param_p1_q + offset]; if(freq != p_freq_old[i] or level != p_level_old[i] or q != p_q_old[i]) { pL[i].set_peakeq_rbj(freq, q, level, (float)srate); pR[i].copy_coeffs(pL[i]); p_freq_old[i] = freq; p_level_old[i] = level; p_q_old[i] = q; } } } template inline void equalizerNband_audio_module::process_hplp(float &left, float &right) { if (!has_lphp) return; if (*params[AM::param_lp_active] > 0.f) { switch(lp_mode) { case MODE12DB: left = lp[0][0].process(left); right = lp[0][1].process(right); break; case MODE24DB: left = lp[1][0].process(lp[0][0].process(left)); right = lp[1][1].process(lp[0][1].process(right)); break; case MODE36DB: left = lp[2][0].process(lp[1][0].process(lp[0][0].process(left))); right = lp[2][1].process(lp[1][1].process(lp[0][1].process(right))); break; } } if (*params[AM::param_hp_active] > 0.f) { switch(hp_mode) { case MODE12DB: left = hp[0][0].process(left); right = hp[0][1].process(right); break; case MODE24DB: left = hp[1][0].process(hp[0][0].process(left)); right = hp[1][1].process(hp[0][1].process(right)); break; case MODE36DB: left = hp[2][0].process(hp[1][0].process(hp[0][0].process(left))); right = hp[2][1].process(hp[1][1].process(hp[0][1].process(right))); break; } } } template uint32_t equalizerNband_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[AM::param_bypass] > 0.f; uint32_t orig_offset = offset; uint32_t orig_numsamples = numsamples; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too meters.bypassed(params, orig_numsamples); } else { // process while(offset < numsamples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[AM::param_level_in]; inL *= *params[AM::param_level_in]; float procL = inL; float procR = inR; // all filters in chain process_hplp(procL, procR); if(*params[AM::param_ls_active] > 0.f) { procL = lsL.process(procL); procR = lsR.process(procR); } if(*params[AM::param_hs_active] > 0.f) { procL = hsL.process(procL); procR = hsR.process(procR); } for (int i = 0; i < AM::PeakBands; i++) { if(*params[AM::param_p1_active + i * params_per_band] > 0.f) { procL = pL[i].process(procL); procR = pR[i].process(procR); } } outL = procL * *params[AM::param_level_out]; outR = procR * *params[AM::param_level_out]; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // next sample ++offset; } // cycle trough samples meters.process(params, ins, outs, orig_offset, orig_numsamples); // clean up for(int i = 0; i < 3; ++i) { hp[i][0].sanitize(); hp[i][1].sanitize(); lp[i][0].sanitize(); lp[i][1].sanitize(); } lsL.sanitize(); hsR.sanitize(); for(int i = 0; i < AM::PeakBands; ++i) { pL[i].sanitize(); pR[i].sanitize(); } } // whatever has to be returned x) return outputs_mask; } template bool equalizerNband_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (index == AM::param_p1_freq && !subindex) { context->set_line_width(1.5); return ::get_graph(*this, subindex, data, points, 32, 0); } return false; } template bool equalizerNband_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) { return false; } else { return get_freq_gridline(subindex, pos, vertical, legend, context, true, 32, 0); } } template int equalizerNband_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) { return false; } else { bool changed = false; for (int i = 0; i < graph_param_count && !changed; i++) { if (*params[AM::first_graph_param + i] != old_params_for_graph[i]) changed = true; } if (changed) { for (int i = 0; i < graph_param_count; i++) old_params_for_graph[i] = *params[AM::first_graph_param + i]; last_generation++; subindex_graph = 0; subindex_dot = INT_MAX; subindex_gridline = INT_MAX; } else { subindex_graph = 0; subindex_dot = subindex_gridline = generation ? INT_MAX : 0; } if (generation == last_calculated_generation) subindex_graph = INT_MAX; return last_generation; } return false; } static inline float adjusted_lphp_gain(const float *const *params, int param_active, int param_mode, const biquad_d2 &filter, float freq, float srate) { if(*params[param_active] > 0.f) { float gain = filter.freq_gain(freq, srate); switch((int)*params[param_mode]) { case MODE12DB: return gain; case MODE24DB: return gain * gain; case MODE36DB: return gain * gain * gain; } } return 1; } template float equalizerNband_audio_module::freq_gain(int index, double freq, uint32_t sr) const { float ret = 1.f; if (use_hplp) { ret *= adjusted_lphp_gain(params, AM::param_hp_active, AM::param_hp_mode, hp[0][0], freq, (float)sr); ret *= adjusted_lphp_gain(params, AM::param_lp_active, AM::param_lp_mode, lp[0][0], freq, (float)sr); } ret *= (*params[AM::param_ls_active] > 0.f) ? lsL.freq_gain(freq, sr) : 1; ret *= (*params[AM::param_hs_active] > 0.f) ? hsL.freq_gain(freq, sr) : 1; for (int i = 0; i < PeakBands; i++) ret *= (*params[AM::param_p1_active + i * params_per_band] > 0.f) ? pL[i].freq_gain(freq, (float)sr) : 1; return ret; } template class equalizerNband_audio_module; template class equalizerNband_audio_module; template class equalizerNband_audio_module; lmms-1.1.3/plugins/LadspaEffect/calf/src/modules_limit.cpp000066400000000000000000000610341247673406200235530ustar00rootroot00000000000000/* Calf DSP plugin pack * Limiter related plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace dsp; using namespace calf_plugins; #define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; /// Limiter by Markus Schmidt and Christian Holschuh /// /// This module provides the lookahead limiter as a simple audio module /// with choosable lookahead and release time. /////////////////////////////////////////////////////////////////////////////////////////////// limiter_audio_module::limiter_audio_module() { is_active = false; srate = 0; // zero all displays clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; asc_led = 0.f; attack_old = -1.f; limit_old = -1.f; asc_old = true; } void limiter_audio_module::activate() { is_active = true; // set all filters and strips params_changed(); limiter.activate(); } void limiter_audio_module::deactivate() { is_active = false; limiter.deactivate(); } void limiter_audio_module::params_changed() { limiter.set_params(*params[param_limit], *params[param_attack], *params[param_release], 1.f, *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1), true); if( *params[param_attack] != attack_old) { attack_old = *params[param_attack]; limiter.reset(); } if(*params[param_limit] != limit_old or *params[param_asc] != asc_old) { asc_old = *params[param_asc]; limit_old = *params[param_limit]; limiter.reset_asc(); } } void limiter_audio_module::set_sample_rate(uint32_t sr) { srate = sr; limiter.set_sample_rate(srate); } uint32_t limiter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; asc_led = 0.f; } else { // let meters fall a bit clip_inL -= std::min(clip_inL, numsamples); clip_inR -= std::min(clip_inR, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; asc_led -= std::min(asc_led, numsamples); while(offset < numsamples) { // cycle through samples float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; // out vars float outL = inL; float outR = inR; // process gain reduction float fickdich[0]; limiter.process(outL, outR, fickdich); if(limiter.get_asc()) asc_led = srate >> 3; // should never be used. but hackers are paranoid by default. // so we make shure NOTHING is above limit outL = std::max(outL, -*params[param_limit]); outL = std::min(outL, *params[param_limit]); outR = std::max(outR, -*params[param_limit]); outR = std::min(outR, *params[param_limit]); // autolevel outL /= *params[param_limit]; outR /= *params[param_limit]; // out level outL *= *params[param_level_out]; outR *= *params[param_level_out]; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // clip LED's if(inL > 1.f) { clip_inL = srate >> 3; } if(inR > 1.f) { clip_inR = srate >> 3; } if(outL > 1.f) { clip_outL = srate >> 3; } if(outR > 1.f) { clip_outR = srate >> 3; } // set up in / out meters if(inL > meter_inL) { meter_inL = inL; } if(inR > meter_inR) { meter_inR = inR; } if(outL > meter_outL) { meter_outL = outL; } if(outR > meter_outR) { meter_outR = outR; } // next sample ++offset; } // cycle trough samples } // process (no bypass) // draw meters SET_IF_CONNECTED(clip_inL); SET_IF_CONNECTED(clip_inR); SET_IF_CONNECTED(clip_outL); SET_IF_CONNECTED(clip_outR); SET_IF_CONNECTED(meter_inL); SET_IF_CONNECTED(meter_inR); SET_IF_CONNECTED(meter_outL); SET_IF_CONNECTED(meter_outR); if (params[param_asc_led] != NULL) *params[param_asc_led] = asc_led; if (*params[param_att]) { if(bypass) *params[param_att] = 1.f; else *params[param_att] = limiter.get_attenuation(); } // whatever has to be returned x) return outputs_mask; } /// Multiband Limiter by Markus Schmidt and Christian Holschuh /// /// This module splits the signal in four different bands /// and sends them through multiple filters (implemented by /// Krzysztof). They are processed by a lookahead limiter module afterwards /// and summed up to the final output again. /////////////////////////////////////////////////////////////////////////////////////////////// multibandlimiter_audio_module::multibandlimiter_audio_module() { is_active = false; srate = 0; // zero all displays clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; asc_led = 0.f; attack_old = -1.f; channels = 2; buffer_size = 0; overall_buffer_size = 0; _sanitize = false; for(int i = 0; i < strips - 1; i ++) { freq_old[i] = -1; sep_old[i] = -1; q_old[i] = -1; } mode_old = 0; for(int i = 0; i < strips; i ++) { weight_old[i] = -1.f; } attack_old = -1.f; limit_old = -1.f; asc_old = true; } multibandlimiter_audio_module::~multibandlimiter_audio_module() { if( buffer != NULL) { free(buffer); } } void multibandlimiter_audio_module::activate() { is_active = true; // set all filters and strips params_changed(); // activate all strips for (int j = 0; j < strips; j ++) { strip[j].activate(); strip[j].set_multi(true); strip[j].id = j; } broadband.activate(); pos = 0; } void multibandlimiter_audio_module::deactivate() { is_active = false; // deactivate all strips for (int j = 0; j < strips; j ++) { strip[j].deactivate(); } broadband.deactivate(); } void multibandlimiter_audio_module::params_changed() { // determine mute/solo states solo[0] = *params[param_solo0] > 0.f ? true : false; solo[1] = *params[param_solo1] > 0.f ? true : false; solo[2] = *params[param_solo2] > 0.f ? true : false; solo[3] = *params[param_solo3] > 0.f ? true : false; no_solo = (*params[param_solo0] > 0.f || *params[param_solo1] > 0.f || *params[param_solo2] > 0.f || *params[param_solo3] > 0.f) ? false : true; mode_old = mode; mode = *params[param_mode]; int i; int j1; switch(mode) { case 0: default: j1 = 0; break; case 1: j1 = 2; break; } // set the params of all filters if(*params[param_freq0] != freq_old[0] or *params[param_sep0] != sep_old[0] or *params[param_q0] != q_old[0] or *params[param_mode] != mode_old) { lpL[0][0].set_lp_rbj((float)(*params[param_freq0] * (1 - *params[param_sep0])), *params[param_q0], (float)srate); hpL[0][0].set_hp_rbj((float)(*params[param_freq0] * (1 + *params[param_sep0])), *params[param_q0], (float)srate); lpR[0][0].copy_coeffs(lpL[0][0]); hpR[0][0].copy_coeffs(hpL[0][0]); for(i = 1; i <= j1; i++) { lpL[0][i].copy_coeffs(lpL[0][0]); hpL[0][i].copy_coeffs(hpL[0][0]); lpR[0][i].copy_coeffs(lpL[0][0]); hpR[0][i].copy_coeffs(hpL[0][0]); } freq_old[0] = *params[param_freq0]; sep_old[0] = *params[param_sep0]; q_old[0] = *params[param_q0]; } if(*params[param_freq1] != freq_old[1] or *params[param_sep1] != sep_old[1] or *params[param_q1] != q_old[1] or *params[param_mode] != mode_old) { lpL[1][0].set_lp_rbj((float)(*params[param_freq1] * (1 - *params[param_sep1])), *params[param_q1], (float)srate); hpL[1][0].set_hp_rbj((float)(*params[param_freq1] * (1 + *params[param_sep1])), *params[param_q1], (float)srate); lpR[1][0].copy_coeffs(lpL[1][0]); hpR[1][0].copy_coeffs(hpL[1][0]); for(i = 1; i <= j1; i++) { lpL[1][i].copy_coeffs(lpL[1][0]); hpL[1][i].copy_coeffs(hpL[1][0]); lpR[1][i].copy_coeffs(lpL[1][0]); hpR[1][i].copy_coeffs(hpL[1][0]); } freq_old[1] = *params[param_freq1]; sep_old[1] = *params[param_sep1]; q_old[1] = *params[param_q1]; } if(*params[param_freq2] != freq_old[2] or *params[param_sep2] != sep_old[2] or *params[param_q2] != q_old[2] or *params[param_mode] != mode_old) { lpL[2][0].set_lp_rbj((float)(*params[param_freq2] * (1 - *params[param_sep2])), *params[param_q2], (float)srate); hpL[2][0].set_hp_rbj((float)(*params[param_freq2] * (1 + *params[param_sep2])), *params[param_q2], (float)srate); lpR[2][0].copy_coeffs(lpL[2][0]); hpR[2][0].copy_coeffs(hpL[2][0]); for(i = 1; i <= j1; i++) { lpL[2][i].copy_coeffs(lpL[2][0]); hpL[2][i].copy_coeffs(hpL[2][0]); lpR[2][i].copy_coeffs(lpL[2][0]); hpR[2][i].copy_coeffs(hpL[2][0]); } freq_old[2] = *params[param_freq2]; sep_old[2] = *params[param_sep2]; q_old[2] = *params[param_q2]; } // set the params of all strips float rel; rel = *params[param_release] * pow(0.25, *params[param_release0] * -1); rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / 30), rel) : rel; weight[0] = pow(0.25, *params[param_weight0] * -1); strip[0].set_params(*params[param_limit], *params[param_attack], rel, weight[0], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1), true); *params[param_effrelease0] = rel; rel = *params[param_release] * pow(0.25, *params[param_release1] * -1); rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq0]), rel) : rel; weight[1] = pow(0.25, *params[param_weight1] * -1); strip[1].set_params(*params[param_limit], *params[param_attack], rel, weight[1], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); *params[param_effrelease1] = rel; rel = *params[param_release] * pow(0.25, *params[param_release2] * -1); rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq1]), rel) : rel; weight[2] = pow(0.25, *params[param_weight2] * -1); strip[2].set_params(*params[param_limit], *params[param_attack], rel, weight[2], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); *params[param_effrelease2] = rel; rel = *params[param_release] * pow(0.25, *params[param_release3] * -1); rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq2]), rel) : rel; weight[3] = pow(0.25, *params[param_weight3] * -1); strip[3].set_params(*params[param_limit], *params[param_attack], rel, weight[3], *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); *params[param_effrelease3] = rel; broadband.set_params(*params[param_limit], *params[param_attack], rel, 1.f, *params[param_asc], pow(0.5, (*params[param_asc_coeff] - 0.5) * 2 * -1)); // rebuild multiband buffer if( *params[param_attack] != attack_old) { int bs = (int)(srate * (*params[param_attack] / 1000.f) * channels); buffer_size = bs - bs % channels; // buffer size attack rate attack_old = *params[param_attack]; _sanitize = true; pos = 0; for (int j = 0; j < strips; j ++) { strip[j].reset(); } broadband.reset(); } if(*params[param_limit] != limit_old or *params[param_asc] != asc_old or *params[param_weight0] != weight_old[0] or *params[param_weight1] != weight_old[1] or *params[param_weight2] != weight_old[2] or *params[param_weight3] != weight_old[3] ) { asc_old = *params[param_asc]; limit_old = *params[param_limit]; weight_old[0] = *params[param_weight0]; weight_old[1] = *params[param_weight1]; weight_old[2] = *params[param_weight2]; weight_old[3] = *params[param_weight3]; for (int j = 0; j < strips; j ++) { strip[j].reset_asc(); } broadband.reset_asc(); } } void multibandlimiter_audio_module::set_sample_rate(uint32_t sr) { srate = sr; // rebuild buffer overall_buffer_size = (int)(srate * (100.f / 1000.f) * channels) + channels; // buffer size max attack rate buffer = (float*) calloc(overall_buffer_size, sizeof(float)); memset(buffer, 0, overall_buffer_size * sizeof(float)); // reset buffer to zero pos = 0; // set srate of all strips for (int j = 0; j < strips; j ++) { strip[j].set_sample_rate(srate); } broadband.set_sample_rate(srate); } #define BYPASSED_COMPRESSION(index) \ if(params[param_att##index] != NULL) \ *params[param_att##index] = 1.0; \ #define ACTIVE_COMPRESSION(index) \ if(params[param_att##index] != NULL) \ *params[param_att##index] = strip[index].get_attenuation(); \ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; numsamples += offset; float batt = 0.f; if(bypass) { // everything bypassed while(offset < numsamples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; asc_led = 0.f; } else { // process all strips // let meters fall a bit clip_inL -= std::min(clip_inL, numsamples); clip_inR -= std::min(clip_inR, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); asc_led -= std::min(asc_led, numsamples); meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; float _tmpL[channels]; float _tmpR[channels]; while(offset < numsamples) { float inL = 0.f; float inR = 0.f; // cycle through samples if(!_sanitize) { inL = ins[0][offset]; inR = ins[1][offset]; } // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; // even out filters gain reduction // 3dB - levelled manually (based on default sep and q settings) switch(mode) { case 0: inL *= 1.414213562; inR *= 1.414213562; break; case 1: inL *= 0.88; inR *= 0.88; break; } // out vars float outL = 0.f; float outR = 0.f; int j1; float left; float right; float sum_left = 0.f; float sum_right = 0.f; bool asc_active = false; for (int i = 0; i < strips; i++) { left = inL; right = inR; // send trough filters switch(mode) { // how many filter passes? (12/36dB) case 0: default: j1 = 0; break; case 1: j1 = 2; break; } for (int j = 0; j <= j1; j++){ if(i + 1 < strips) { // do lowpass on all bands except most high left = lpL[i][j].process(left); right = lpR[i][j].process(right); lpL[i][j].sanitize(); lpR[i][j].sanitize(); } if(i - 1 >= 0) { // do highpass on all bands except most low left = hpL[i - 1][j].process(left); right = hpR[i - 1][j].process(right); hpL[i - 1][j].sanitize(); hpR[i - 1][j].sanitize(); } } // remember filtered values for limiting // (we need multiband_coeff before we can call the limiter bands) _tmpL[i] = left; _tmpR[i] = right; // sum up for multiband coefficient sum_left += ((fabs(left) > *params[param_limit]) ? *params[param_limit] * (fabs(left) / left) : left) * weight[i]; sum_right += ((fabs(right) > *params[param_limit]) ? *params[param_limit] * (fabs(right) / right) : right) * weight[i]; } // process single strip with filter // write multiband coefficient to buffer buffer[pos] = std::min(*params[param_limit] / std::max(fabs(sum_left), fabs(sum_right)), 1.0); for (int i = 0; i < strips; i++) { // process gain reduction strip[i].process(_tmpL[i], _tmpR[i], buffer); // sum up output of limiters if (solo[i] || no_solo) { outL += _tmpL[i]; outR += _tmpR[i]; } asc_active = asc_active || strip[i].get_asc(); } // process single strip again for limiter float fickdich[0]; broadband.process(outL, outR, fickdich); asc_active = asc_active || broadband.get_asc(); // should never be used. but hackers are paranoid by default. // so we make shure NOTHING is above limit outL = std::max(outL, -*params[param_limit]); outL = std::min(outL, *params[param_limit]); outR = std::max(outR, -*params[param_limit]); outR = std::min(outR, *params[param_limit]); batt = broadband.get_attenuation(); // autolevel outL /= *params[param_limit]; outR /= *params[param_limit]; // out level outL *= *params[param_level_out]; outR *= *params[param_level_out]; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // clip LED's if(ins[0][offset] * *params[param_level_in] > 1.f) { clip_inL = srate >> 3; } if(ins[1][offset] * *params[param_level_in] > 1.f) { clip_inR = srate >> 3; } if(outL > 1.f) { clip_outL = srate >> 3; } if(outR > 1.f) { clip_outR = srate >> 3; } // set up in / out meters if(ins[0][offset] * *params[param_level_in] > meter_inL) { meter_inL = ins[0][offset] * *params[param_level_in]; } if(ins[1][offset] * *params[param_level_in] > meter_inR) { meter_inR = ins[1][offset] * *params[param_level_in]; } if(outL > meter_outL) { meter_outL = outL; } if(outR > meter_outR) { meter_outR = outR; } if(asc_active) { asc_led = srate >> 3; } // next sample ++offset; pos = (pos + channels) % buffer_size; if(pos == 0) _sanitize = false; } // cycle trough samples } // process all strips (no bypass) // draw meters SET_IF_CONNECTED(clip_inL); SET_IF_CONNECTED(clip_inR); SET_IF_CONNECTED(clip_outL); SET_IF_CONNECTED(clip_outR); SET_IF_CONNECTED(meter_inL); SET_IF_CONNECTED(meter_inR); SET_IF_CONNECTED(meter_outL); SET_IF_CONNECTED(meter_outR); if (params[param_asc_led] != NULL) *params[param_asc_led] = asc_led; // draw strip meters if(bypass > 0.5f) { if(params[param_att0] != NULL) *params[param_att0] = 1.0; if(params[param_att1] != NULL) *params[param_att1] = 1.0; if(params[param_att2] != NULL) *params[param_att2] = 1.0; if(params[param_att3] != NULL) *params[param_att3] = 1.0; } else { if(params[param_att0] != NULL) *params[param_att0] = strip[0].get_attenuation() * batt; if(params[param_att1] != NULL) *params[param_att1] = strip[1].get_attenuation() * batt; if(params[param_att2] != NULL) *params[param_att2] = strip[2].get_attenuation() * batt; if(params[param_att3] != NULL) *params[param_att3] = strip[3].get_attenuation() * batt; } // whatever has to be returned x) return outputs_mask; } bool multibandlimiter_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active or subindex > 3) return false; float ret; double freq; int j1; for (int i = 0; i < points; i++) { ret = 1.f; freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); switch(mode) { case 0: default: j1 = 0; break; case 1: j1 = 2; break; } for(int j = 0; j <= j1; j ++) { switch(subindex) { case 0: ret *= lpL[0][j].freq_gain(freq, (float)srate); break; case 1: ret *= hpL[0][j].freq_gain(freq, (float)srate); ret *= lpL[1][j].freq_gain(freq, (float)srate); break; case 2: ret *= hpL[1][j].freq_gain(freq, (float)srate); ret *= lpL[2][j].freq_gain(freq, (float)srate); break; case 3: ret *= hpL[2][j].freq_gain(freq, (float)srate); break; } } data[i] = dB_grid(ret); } if (*params[param_bypass] > 0.5f) context->set_source_rgba(0.35, 0.4, 0.2, 0.3); else { context->set_source_rgba(0.35, 0.4, 0.2, 1); context->set_line_width(1.5); } return true; } bool multibandlimiter_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) { return false; } else { vertical = (subindex & 1) != 0; return get_freq_gridline(subindex, pos, vertical, legend, context); } } lmms-1.1.3/plugins/LadspaEffect/calf/src/modules_mod.cpp000066400000000000000000000600661247673406200232200ustar00rootroot00000000000000/* Calf DSP plugin pack * Modulation effect plugins * * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace dsp; using namespace calf_plugins; #define SET_IF_CONNECTED(name) if (params[AM::param_##name] != NULL) *params[AM::param_##name] = name; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void flanger_audio_module::activate() { left.reset(); right.reset(); last_r_phase = *params[par_stereo] * (1.f / 360.f); left.reset_phase(0.f); right.reset_phase(last_r_phase); is_active = true; } void flanger_audio_module::set_sample_rate(uint32_t sr) { srate = sr; left.setup(sr); right.setup(sr); } void flanger_audio_module::deactivate() { is_active = false; } bool flanger_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (index == par_delay && subindex < 2) { set_channel_color(context, subindex); return ::get_graph(*this, subindex, data, points); } return false; } float flanger_audio_module::freq_gain(int subindex, float freq, float srate) const { return (subindex ? right : left).freq_gain(freq, srate); } void flanger_audio_module::params_changed() { float dry = *params[par_dryamount]; float wet = *params[par_amount]; float rate = *params[par_rate]; // 0.01*pow(1000.0f,*params[par_rate]); float min_delay = *params[par_delay] / 1000.0; float mod_depth = *params[par_depth] / 1000.0; float fb = *params[par_fb]; left.set_dry(dry); right.set_dry(dry); left.set_wet(wet); right.set_wet(wet); left.set_rate(rate); right.set_rate(rate); left.set_min_delay(min_delay); right.set_min_delay(min_delay); left.set_mod_depth(mod_depth); right.set_mod_depth(mod_depth); left.set_fb(fb); right.set_fb(fb); float r_phase = *params[par_stereo] * (1.f / 360.f); clear_reset = false; if (*params[par_reset] >= 0.5) { clear_reset = true; left.reset_phase(0.f); right.reset_phase(r_phase); } else { if (fabs(r_phase - last_r_phase) > 0.0001f) { right.phase = left.phase; right.inc_phase(r_phase); last_r_phase = r_phase; } } } void flanger_audio_module::params_reset() { if (clear_reset) { *params[par_reset] = 0.f; clear_reset = false; } } /////////////////////////////////////////////////////////////////////////////////////////////// phaser_audio_module::phaser_audio_module() : left(MaxStages, x1vals[0], y1vals[0]) , right(MaxStages, x1vals[1], y1vals[1]) { is_active = false; } void phaser_audio_module::set_sample_rate(uint32_t sr) { srate = sr; left.setup(sr); right.setup(sr); } void phaser_audio_module::activate() { is_active = true; left.reset(); right.reset(); last_r_phase = *params[par_stereo] * (1.f / 360.f); left.reset_phase(0.f); right.reset_phase(last_r_phase); } void phaser_audio_module::deactivate() { is_active = false; } bool phaser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; if (subindex < 2) { set_channel_color(context, subindex); return ::get_graph(*this, subindex, data, points); } return false; } float phaser_audio_module::freq_gain(int subindex, float freq, float srate) const { return (subindex ? right : left).freq_gain(freq, srate); } bool phaser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return get_freq_gridline(subindex, pos, vertical, legend, context); } void phaser_audio_module::params_changed() { float dry = *params[par_dryamount]; float wet = *params[par_amount]; float rate = *params[par_rate]; // 0.01*pow(1000.0f,*params[par_rate]); float base_frq = *params[par_freq]; float mod_depth = *params[par_depth]; float fb = *params[par_fb]; int stages = (int)*params[par_stages]; left.set_dry(dry); right.set_dry(dry); left.set_wet(wet); right.set_wet(wet); left.set_rate(rate); right.set_rate(rate); left.set_base_frq(base_frq); right.set_base_frq(base_frq); left.set_mod_depth(mod_depth); right.set_mod_depth(mod_depth); left.set_fb(fb); right.set_fb(fb); left.set_stages(stages); right.set_stages(stages); float r_phase = *params[par_stereo] * (1.f / 360.f); clear_reset = false; if (*params[par_reset] >= 0.5) { clear_reset = true; left.reset_phase(0.f); right.reset_phase(r_phase); } else { if (fabs(r_phase - last_r_phase) > 0.0001f) { right.phase = left.phase; right.inc_phase(r_phase); last_r_phase = r_phase; } } } void phaser_audio_module::params_reset() { if (clear_reset) { *params[par_reset] = 0.f; clear_reset = false; } } /////////////////////////////////////////////////////////////////////////////////////////////// rotary_speaker_audio_module::rotary_speaker_audio_module() { mwhl_value = hold_value = 0.f; phase_h = phase_l = 0.f; aspeed_l = 1.f; aspeed_h = 1.f; dspeed = 0.f; } void rotary_speaker_audio_module::set_sample_rate(uint32_t sr) { srate = sr; setup(); } void rotary_speaker_audio_module::setup() { crossover1l.set_lp_rbj(800.f, 0.7, (float)srate); crossover1r.set_lp_rbj(800.f, 0.7, (float)srate); crossover2l.set_hp_rbj(800.f, 0.7, (float)srate); crossover2r.set_hp_rbj(800.f, 0.7, (float)srate); } void rotary_speaker_audio_module::activate() { phase_h = phase_l = 0.f; maspeed_h = maspeed_l = 0.f; setup(); } void rotary_speaker_audio_module::deactivate() { } void rotary_speaker_audio_module::control_change(int /*channel*/, int ctl, int val) { if (vibrato_mode == 3 && ctl == 64) { hold_value = val / 127.f; set_vibrato(); return; } if (vibrato_mode == 4 && ctl == 1) { mwhl_value = val / 127.f; set_vibrato(); return; } } void rotary_speaker_audio_module::params_changed() { set_vibrato(); } void rotary_speaker_audio_module::set_vibrato() { vibrato_mode = fastf2i_drm(*params[par_speed]); // manual vibrato - do not recalculate speeds as they're not used anyway if (vibrato_mode == 5) return; if (!vibrato_mode) dspeed = -1; else { float speed = vibrato_mode - 1; if (vibrato_mode == 3) speed = hold_value; if (vibrato_mode == 4) speed = mwhl_value; dspeed = (speed < 0.5f) ? 0 : 1; } update_speed(); } /// Convert RPM speed to delta-phase uint32_t rotary_speaker_audio_module::rpm2dphase(float rpm) { return (uint32_t)((rpm / (60.0 * srate)) * (1 << 30)) << 2; } /// Set delta-phase variables based on current calculated (and interpolated) RPM speed void rotary_speaker_audio_module::update_speed() { float speed_h = aspeed_h >= 0 ? (48 + (400-48) * aspeed_h) : (48 * (1 + aspeed_h)); float speed_l = aspeed_l >= 0 ? 40 + (342-40) * aspeed_l : (40 * (1 + aspeed_l)); dphase_h = rpm2dphase(speed_h); dphase_l = rpm2dphase(speed_l); } void rotary_speaker_audio_module::update_speed_manual(float delta) { float ts = *params[par_treblespeed]; float bs = *params[par_bassspeed]; incr_towards(maspeed_h, ts, delta * 200, delta * 200); incr_towards(maspeed_l, bs, delta * 200, delta * 200); dphase_h = rpm2dphase(maspeed_h); dphase_l = rpm2dphase(maspeed_l); } /// map a ramp [int] to a sinusoid-like function [0, 65536] static inline int pseudo_sine_scl(int counter) { // premature optimization is a root of all evil; it can be done with integers only - but later :) double v = counter * (1.0 / (65536.0 * 32768.0)); return (int) (32768 + 32768 * (v - v*v*v) * (1.0 / 0.3849)); } /// Increase or decrease aspeed towards raspeed, with required negative and positive rate inline bool rotary_speaker_audio_module::incr_towards(float &aspeed, float raspeed, float delta_decc, float delta_acc) { if (aspeed < raspeed) { aspeed = std::min(raspeed, aspeed + delta_acc); return true; } else if (aspeed > raspeed) { aspeed = std::max(raspeed, aspeed - delta_decc); return true; } return false; } uint32_t rotary_speaker_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { if (true) { crossover2l.set_bp_rbj(2000.f, 0.7, (float)srate); crossover2r.copy_coeffs(crossover2l); damper1l.set_bp_rbj(1000.f*pow(4.0, *params[par_test]), 0.7, (float)srate); damper1r.copy_coeffs(damper1l); } else { crossover2l.set_hp_rbj(800.f, 0.7, (float)srate); crossover2r.copy_coeffs(crossover2l); } int shift = (int)(300000 * (*params[par_shift])), pdelta = (int)(300000 * (*params[par_spacing])); int md = (int)(100 * (*params[par_moddepth])); float mix = 0.5 * (1.0 - *params[par_micdistance]); float mix2 = *params[par_reflection]; float mix3 = mix2 * mix2; float am_depth = *params[par_am_depth]; for (unsigned int i = 0; i < nsamples; i++) { float in_l = ins[0][i + offset], in_r = ins[1][i + offset]; float in_mono = atan(0.5f * (in_l + in_r)); int xl = pseudo_sine_scl(phase_l), yl = pseudo_sine_scl(phase_l + 0x40000000); int xh = pseudo_sine_scl(phase_h), yh = pseudo_sine_scl(phase_h + 0x40000000); // printf("%d %d %d\n", shift, pdelta, shift + pdelta + 20 * xl); meter_l = xl; meter_h = xh; // float out_hi_l = in_mono - delay.get_interp_1616(shift + md * xh) + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) - delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh); // float out_hi_r = in_mono + delay.get_interp_1616(shift + md * 65536 - md * yh) - delay.get_interp_1616(shift + pdelta + md * xh) + delay.get_interp_1616(shift + pdelta + pdelta + md * yh); float fm_hi_l = delay.get_interp_1616(shift + md * xh) - mix2 * delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) + mix3 * delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh); float fm_hi_r = delay.get_interp_1616(shift + md * 65536 - md * yh) - mix2 * delay.get_interp_1616(shift + pdelta + md * xh) + mix3 * delay.get_interp_1616(shift + pdelta + pdelta + md * yh); float out_hi_l = lerp(in_mono, damper1l.process(fm_hi_l), lerp(0.5, xh * 1.0 / 65536.0, am_depth)); float out_hi_r = lerp(in_mono, damper1r.process(fm_hi_r), lerp(0.5, yh * 1.0 / 65536.0, am_depth)); float out_lo_l = lerp(in_mono, delay.get_interp_1616(shift + (md * xl >> 2)), lerp(0.5, yl * 1.0 / 65536.0, am_depth)); // + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yl); float out_lo_r = lerp(in_mono, delay.get_interp_1616(shift + (md * yl >> 2)), lerp(0.5, xl * 1.0 / 65536.0, am_depth)); // + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yl); out_hi_l = crossover2l.process(out_hi_l); // sanitize(out_hi_l); out_hi_r = crossover2r.process(out_hi_r); // sanitize(out_hi_r); out_lo_l = crossover1l.process(out_lo_l); // sanitize(out_lo_l); out_lo_r = crossover1r.process(out_lo_r); // sanitize(out_lo_r); float out_l = out_hi_l + out_lo_l; float out_r = out_hi_r + out_lo_r; float mic_l = out_l + mix * (out_r - out_l); float mic_r = out_r + mix * (out_l - out_r); outs[0][i + offset] = mic_l; outs[1][i + offset] = mic_r; delay.put(in_mono); phase_l += dphase_l; phase_h += dphase_h; } crossover1l.sanitize(); crossover1r.sanitize(); crossover2l.sanitize(); crossover2r.sanitize(); damper1l.sanitize(); damper1r.sanitize(); float delta = nsamples * 1.0 / srate; if (vibrato_mode == 5) update_speed_manual(delta); else { bool u1 = incr_towards(aspeed_l, dspeed, delta * 0.2, delta * 0.14); bool u2 = incr_towards(aspeed_h, dspeed, delta, delta * 0.5); if (u1 || u2) set_vibrato(); } if(params[par_meter_l] != NULL) { *params[par_meter_l] = (float)meter_l / 65536.0; } if(params[par_meter_h] != NULL) { *params[par_meter_h] = (float)meter_h / 65536.0; } return outputs_mask; } /////////////////////////////////////////////////////////////////////////////////////////////// multichorus_audio_module::multichorus_audio_module() { is_active = false; last_r_phase = -1; } void multichorus_audio_module::activate() { is_active = true; params_changed(); } void multichorus_audio_module::deactivate() { is_active = false; } void multichorus_audio_module::set_sample_rate(uint32_t sr) { srate = sr; left.setup(sr); right.setup(sr); } bool multichorus_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; int nvoices = (int)*params[par_voices]; if (index == par_delay && subindex < 3) { if (subindex < 2) set_channel_color(context, subindex); else { context->set_source_rgba(0.35, 0.4, 0.2); context->set_line_width(1.0); } return ::get_graph(*this, subindex, data, points); } if (index == par_rate && subindex < nvoices) { const sine_multi_lfo &lfo = left.lfo; for (int i = 0; i < points; i++) { float phase = i * 2 * M_PI / points; // original -65536 to 65535 value float orig = subindex * lfo.voice_offset + ((lfo.voice_depth >> (30-13)) * 65536.0 * (0.95 * sin(phase) + 1)/ 8192.0) - 65536; // scale to -1..1 data[i] = orig / 65536.0; } return true; } return false; } bool multichorus_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { int voice = subindex >> 1; int nvoices = (int)*params[par_voices]; if ((index != par_rate && index != par_depth) || voice >= nvoices) return false; float unit = (1 - *params[par_overlap]); float scw = 1 + unit * (nvoices - 1); set_channel_color(context, subindex); const sine_multi_lfo &lfo = (subindex & 1 ? right : left).lfo; if (index == par_rate) { x = (double)(lfo.phase + lfo.vphase * voice) / 4096.0; y = 0.95 * sin(x * 2 * M_PI); y = (voice * unit + (y + 1) / 2) / scw * 2 - 1; } else { double ph = (double)(lfo.phase + lfo.vphase * voice) / 4096.0; x = 0.5 + 0.5 * sin(ph * 2 * M_PI); y = subindex & 1 ? -0.75 : 0.75; x = (voice * unit + x) / scw; } return true; } bool multichorus_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (index == par_rate && !subindex) { pos = 0; vertical = false; return true; } if (index == par_delay) return get_freq_gridline(subindex, pos, vertical, legend, context); return false; } float multichorus_audio_module::freq_gain(int subindex, float freq, float srate) const { if (subindex == 2) return *params[par_amount] * left.post.freq_gain(freq, srate); return (subindex ? right : left).freq_gain(freq, srate); } void multichorus_audio_module::params_changed() { // delicious copy-pasta from flanger module - it'd be better to keep it common or something float dry = *params[par_dryamount]; float wet = *params[par_amount]; float rate = *params[par_rate]; float min_delay = *params[par_delay] / 1000.0; float mod_depth = *params[par_depth] / 1000.0; float overlap = *params[par_overlap]; left.set_dry(dry); right.set_dry(dry); left.set_wet(wet); right.set_wet(wet); left.set_rate(rate); right.set_rate(rate); left.set_min_delay(min_delay); right.set_min_delay(min_delay); left.set_mod_depth(mod_depth); right.set_mod_depth(mod_depth); int voices = (int)*params[par_voices]; left.lfo.set_voices(voices); right.lfo.set_voices(voices); left.lfo.set_overlap(overlap);right.lfo.set_overlap(overlap); float vphase = *params[par_vphase] * (1.f / 360.f); left.lfo.vphase = right.lfo.vphase = vphase * (4096 / std::max(voices - 1, 1)); float r_phase = *params[par_stereo] * (1.f / 360.f); if (fabs(r_phase - last_r_phase) > 0.0001f) { right.lfo.phase = left.lfo.phase; right.lfo.phase += chorus_phase(r_phase * 4096); last_r_phase = r_phase; } left.post.f1.set_bp_rbj(*params[par_freq], *params[par_q], srate); left.post.f2.set_bp_rbj(*params[par_freq2], *params[par_q], srate); right.post.f1.copy_coeffs(left.post.f1); right.post.f2.copy_coeffs(left.post.f2); } uint32_t multichorus_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { left.process(outs[0] + offset, ins[0] + offset, numsamples); right.process(outs[1] + offset, ins[1] + offset, numsamples); return outputs_mask; // XXXKF allow some delay after input going blank } /// Pulsator by Markus Schmidt /// /// This module provides a couple /// of different LFO's for modulating the level of a signal. /////////////////////////////////////////////////////////////////////////////////////////////// pulsator_audio_module::pulsator_audio_module() { is_active = false; srate = 0; // last_generation = 0; clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; } void pulsator_audio_module::activate() { is_active = true; lfoL.activate(); lfoR.activate(); params_changed(); } void pulsator_audio_module::deactivate() { is_active = false; lfoL.deactivate(); lfoR.deactivate(); } void pulsator_audio_module::params_changed() { lfoL.set_params(*params[param_freq], *params[param_mode], 0.f, srate, *params[param_amount]); lfoR.set_params(*params[param_freq], *params[param_mode], *params[param_offset], srate, *params[param_amount]); clear_reset = false; if (*params[param_reset] >= 0.5) { clear_reset = true; lfoL.set_phase(0.f); lfoR.set_phase(0.f); } } void pulsator_audio_module::set_sample_rate(uint32_t sr) { srate = sr; } uint32_t pulsator_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) { bool bypass = *params[param_bypass] > 0.5f; uint32_t samples = numsamples + offset; if(bypass) { // everything bypassed while(offset < samples) { outs[0][offset] = ins[0][offset]; outs[1][offset] = ins[1][offset]; ++offset; } // displays, too clip_inL = 0.f; clip_inR = 0.f; clip_outL = 0.f; clip_outR = 0.f; meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; // LFO's should go on lfoL.advance(numsamples); lfoR.advance(numsamples); } else { clip_inL -= std::min(clip_inL, numsamples); clip_inR -= std::min(clip_inR, numsamples); clip_outL -= std::min(clip_outL, numsamples); clip_outR -= std::min(clip_outR, numsamples); meter_inL = 0.f; meter_inR = 0.f; meter_outL = 0.f; meter_outR = 0.f; // process while(offset < samples) { // cycle through samples float outL = 0.f; float outR = 0.f; float inL = ins[0][offset]; float inR = ins[1][offset]; // in level inR *= *params[param_level_in]; inL *= *params[param_level_in]; if(*params[param_mono] > 0.5) { inL = (inL + inR) * 0.5; inR = inL; } float procL = inL; float procR = inR; procL *= (lfoL.get_value() * 0.5 + *params[param_amount] / 2); procR *= (lfoR.get_value() * 0.5 + *params[param_amount] / 2); outL = procL + inL * (1 - *params[param_amount]); outR = procR + inR * (1 - *params[param_amount]); outL *= *params[param_level_out]; outR *= *params[param_level_out]; // send to output outs[0][offset] = outL; outs[1][offset] = outR; // clip LED's if(inL > 1.f) { clip_inL = srate >> 3; } if(inR > 1.f) { clip_inR = srate >> 3; } if(outL > 1.f) { clip_outL = srate >> 3; } if(outR > 1.f) { clip_outR = srate >> 3; } // set up in / out meters if(inL > meter_inL) { meter_inL = inL; } if(inR > meter_inR) { meter_inR = inR; } if(outL > meter_outL) { meter_outL = outL; } if(outR > meter_outR) { meter_outR = outR; } // next sample ++offset; // advance lfo's lfoL.advance(1); lfoR.advance(1); } // cycle trough samples } // draw meters SET_IF_CONNECTED(clip_inL) SET_IF_CONNECTED(clip_inR) SET_IF_CONNECTED(clip_outL) SET_IF_CONNECTED(clip_outR) SET_IF_CONNECTED(meter_inL) SET_IF_CONNECTED(meter_inR) SET_IF_CONNECTED(meter_outL) SET_IF_CONNECTED(meter_outR) // whatever has to be returned x) return outputs_mask; } bool pulsator_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) { return false; } else if(index == param_freq) { if(subindex == 0) { context->set_source_rgba(0.35, 0.4, 0.2, 1); return lfoL.get_graph(data, points, context); } if(subindex == 1) { context->set_source_rgba(0.35, 0.4, 0.2, 0.5); return lfoR.get_graph(data, points, context); } } return false; } bool pulsator_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) { return false; } else if(index == param_freq) { if(subindex == 0) { context->set_source_rgba(0.35, 0.4, 0.2, 1); return lfoL.get_dot(x, y, size, context); } if(subindex == 1) { context->set_source_rgba(0.35, 0.4, 0.2, 0.5); return lfoR.get_dot(x, y, size, context); } return false; } return false; } bool pulsator_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (index == param_freq && !subindex) { pos = 0; vertical = false; return true; } return false; } lmms-1.1.3/plugins/LadspaEffect/calf/src/monosynth.cpp000066400000000000000000000654361247673406200227550ustar00rootroot00000000000000/* Calf DSP Library * Example audio modules - monosynth * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include using namespace dsp; using namespace calf_plugins; using namespace std; float silence[4097]; monosynth_audio_module::monosynth_audio_module() : mod_matrix_impl(mod_matrix_data, &mm_metadata) , inertia_cutoff(1) , inertia_pitchbend(1) , inertia_pressure(64) { } void monosynth_audio_module::activate() { running = false; output_pos = 0; queue_note_on = -1; inertia_pitchbend.set_now(1.f); lfo_bend = 1.0; modwheel_value = 0.f; modwheel_value_int = 0; inertia_cutoff.set_now(*params[par_cutoff]); inertia_pressure.set_now(0); filter.reset(); filter2.reset(); stack.clear(); last_pwshift1 = last_pwshift2 = 0; last_stretch1 = 65536; queue_note_on_and_off = false; prev_wave1 = -1; prev_wave2 = -1; wave1 = -1; wave2 = -1; queue_note_on = -1; last_filter_type = -1; } waveform_family *monosynth_audio_module::waves; void monosynth_audio_module::precalculate_waves(progress_report_iface *reporter) { float data[1 << MONOSYNTH_WAVE_BITS]; bandlimiter bl; if (waves) return; static waveform_family waves_data[wave_count]; waves = waves_data; enum { S = 1 << MONOSYNTH_WAVE_BITS, HS = S / 2, QS = S / 4, QS3 = 3 * QS }; float iQS = 1.0 / QS; if (reporter) reporter->report_progress(0, "Precalculating waveforms"); // yes these waves don't have really perfect 1/x spectrum because of aliasing // (so what?) for (int i = 0 ; i < HS; i++) data[i] = (float)(i * 1.0 / HS), data[i + HS] = (float)(i * 1.0 / HS - 1.0f); waves[wave_saw].make(bl, data); // this one is dummy, fake and sham, we're using a difference of two sawtooths for square wave due to PWM for (int i = 0 ; i < S; i++) data[i] = (float)(i < HS ? -1.f : 1.f); waves[wave_sqr].make(bl, data, 4); for (int i = 0 ; i < S; i++) data[i] = (float)(i < (64 * S / 2048)? -1.f : 1.f); waves[wave_pulse].make(bl, data); for (int i = 0 ; i < S; i++) data[i] = (float)sin(i * M_PI / HS); waves[wave_sine].make(bl, data); for (int i = 0 ; i < QS; i++) { data[i] = i * iQS, data[i + QS] = 1 - i * iQS, data[i + HS] = - i * iQS, data[i + QS3] = -1 + i * iQS; } waves[wave_triangle].make(bl, data); for (int i = 0, j = 1; i < S; i++) { data[i] = -1 + j * 1.0 / HS; if (i == j) j *= 2; } waves[wave_varistep].make(bl, data); for (int i = 0; i < S; i++) { data[i] = (min(1.f, (float)(i / 64.f))) * (1.0 - i * 1.0 / S) * (-1 + fmod (i * i * 8/ (S * S * 1.0), 2.0)); } waves[wave_skewsaw].make(bl, data); for (int i = 0; i < S; i++) { data[i] = (min(1.f, (float)(i / 64.f))) * (1.0 - i * 1.0 / S) * (fmod (i * i * 8/ (S * S * 1.0), 2.0) < 1.0 ? -1.0 : +1.0); } waves[wave_skewsqr].make(bl, data); if (reporter) reporter->report_progress(50, "Precalculating waveforms"); for (int i = 0; i < S; i++) { if (i < QS3) { float p = i * 1.0 / QS3; data[i] = sin(M_PI * p * p * p); } else { float p = (i - QS3 * 1.0) / QS; data[i] = -0.5 * sin(3 * M_PI * p * p); } } waves[wave_test1].make(bl, data); for (int i = 0; i < S; i++) { data[i] = exp(-i * 1.0 / HS) * sin(i * M_PI / HS) * cos(2 * M_PI * i / HS); } normalize_waveform(data, S); waves[wave_test2].make(bl, data); for (int i = 0; i < S; i++) { //int ii = (i < HS) ? i : S - i; int ii = HS; data[i] = (ii * 1.0 / HS) * sin(i * 3 * M_PI / HS + 2 * M_PI * sin(M_PI / 4 + i * 4 * M_PI / HS)) * sin(i * 5 * M_PI / HS + 2 * M_PI * sin(M_PI / 8 + i * 6 * M_PI / HS)); } waves[wave_test3].make(bl, data); for (int i = 0; i < S; i++) { data[i] = sin(i * 2 * M_PI / HS + sin(i * 2 * M_PI / HS + 0.5 * M_PI * sin(i * 18 * M_PI / HS)) * sin(i * 1 * M_PI / HS + 0.5 * M_PI * sin(i * 11 * M_PI / HS))); } waves[wave_test4].make(bl, data); for (int i = 0; i < S; i++) { data[i] = sin(i * 2 * M_PI / HS + 0.2 * M_PI * sin(i * 13 * M_PI / HS) + 0.1 * M_PI * sin(i * 37 * M_PI / HS)) * sin(i * M_PI / HS + 0.2 * M_PI * sin(i * 15 * M_PI / HS)); } waves[wave_test5].make(bl, data); for (int i = 0; i < S; i++) { if (i < HS) data[i] = sin(i * 2 * M_PI / HS); else if (i < 3 * S / 4) data[i] = sin(i * 4 * M_PI / HS); else if (i < 7 * S / 8) data[i] = sin(i * 8 * M_PI / HS); else data[i] = sin(i * 8 * M_PI / HS) * (S - i) / (S / 8); } waves[wave_test6].make(bl, data); for (int i = 0; i < S; i++) { int j = i >> (MONOSYNTH_WAVE_BITS - 11); data[i] = (j ^ 0x1D0) * 1.0 / HS - 1; } waves[wave_test7].make(bl, data); for (int i = 0; i < S; i++) { int j = i >> (MONOSYNTH_WAVE_BITS - 11); data[i] = -1 + 0.66 * (3 & ((j >> 8) ^ (j >> 10) ^ (j >> 6))); } waves[wave_test8].make(bl, data); if (reporter) reporter->report_progress(100, ""); } bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { monosynth_audio_module::precalculate_waves(NULL); // printf("get_graph %d %p %d wave1=%d wave2=%d\n", index, data, points, wave1, wave2); if (index == par_wave1 || index == par_wave2) { if (subindex) return false; enum { S = 1 << MONOSYNTH_WAVE_BITS }; float value = *params[index]; int wave = dsp::clip(dsp::fastf2i_drm(value), 0, (int)wave_count - 1); uint32_t shift = index == par_wave1 ? last_pwshift1 : last_pwshift2; if (!running) shift = (int32_t)(0x78000000 * (*params[index == par_wave1 ? par_pw1 : par_pw2])); int flag = (wave == wave_sqr); shift = (flag ? S/2 : 0) + (shift >> (32 - MONOSYNTH_WAVE_BITS)); int sign = flag ? -1 : 1; if (wave == wave_sqr) wave = wave_saw; float *waveform = waves[wave].original; float rnd_start = 1 - *params[par_window1] * 0.5f; float scl = rnd_start < 1.0 ? 1.f / (1 - rnd_start) : 0.f; for (int i = 0; i < points; i++) { int pos = i * S / points; float r = 1; if (index == par_wave1) { float ph = i * 1.0 / points; if (ph < 0.5f) ph = 1.f - ph; ph = (ph - rnd_start) * scl; if (ph < 0) ph = 0; r = 1.0 - ph * ph; pos = int(pos * 1.0 * last_stretch1 / 65536.0 ) % S; } data[i] = r * (sign * waveform[pos] + waveform[(pos + shift) & (S - 1)]) / (sign == -1 ? 1 : 2); } return true; } if (index == par_filtertype) { if (!running) return false; if (subindex > (is_stereo_filter() ? 1 : 0)) return false; for (int i = 0; i < points; i++) { double freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); const dsp::biquad_d1_lerp &f = subindex ? filter2 : filter; float level = f.freq_gain(freq, srate); if (!is_stereo_filter()) level *= filter2.freq_gain(freq, srate); level *= fgain; data[i] = log(level) / log(1024.0) + 0.5; } return true; } return get_static_graph(index, subindex, *params[index], data, points, context); } void monosynth_audio_module::calculate_buffer_oscs(float lfo1) { int flag1 = (wave1 == wave_sqr); int flag2 = (wave2 == wave_sqr); int32_t shift1 = last_pwshift1; int32_t shift2 = last_pwshift2; int32_t stretch1 = last_stretch1; int32_t shift_target1 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw1] + lfo1 * *params[par_lfopw] + 0.01f * moddest[moddest_o1pw])); int32_t shift_target2 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw2] + lfo1 * *params[par_lfopw] + 0.01f * moddest[moddest_o2pw])); int32_t stretch_target1 = (int32_t)(65536 * dsp::clip(*params[par_stretch1] + 0.01f * moddest[moddest_o1stretch], 1.f, 16.f)); int32_t shift_delta1 = ((shift_target1 >> 1) - (last_pwshift1 >> 1)) >> (step_shift - 1); int32_t shift_delta2 = ((shift_target2 >> 1) - (last_pwshift2 >> 1)) >> (step_shift - 1); int32_t stretch_delta1 = ((stretch_target1 >> 1) - (last_stretch1 >> 1)) >> (step_shift - 1); last_pwshift1 = shift_target1; last_pwshift2 = shift_target2; last_stretch1 = stretch_target1; lookup_waveforms(); shift1 += (flag1 << 31); shift2 += (flag2 << 31); float mix1 = 1 - 2 * flag1, mix2 = 1 - 2 * flag2; float new_xfade = dsp::clip(xfade + 0.01f * moddest[moddest_oscmix], 0.f, 1.f); float cur_xfade = last_xfade; float xfade_step = (new_xfade - cur_xfade) * (1.0 / step_size); float rnd_start = 1 - *params[par_window1] * 0.5f; float scl = rnd_start < 1.0 ? 1.f / (1 - rnd_start) : 0.f; for (uint32_t i = 0; i < step_size; i++) { //buffer[i] = lerp(osc1.get_phaseshifted(shift1, mix1), osc2.get_phaseshifted(shift2, mix2), cur_xfade); float o1phase = osc1.phase / (65536.0 * 65536.0); if (o1phase < 0.5) o1phase = 1 - o1phase; o1phase = (o1phase - rnd_start) * scl; if (o1phase < 0) o1phase = 0; float r = 1.0 - o1phase * o1phase; buffer[i] = lerp(r * osc1.get_phasedist(stretch1, shift1, mix1), osc2.get_phaseshifted(shift2, mix2), cur_xfade); osc1.advance(); osc2.advance(); shift1 += shift_delta1; shift2 += shift_delta2; stretch1 += stretch_delta1; cur_xfade += xfade_step; } last_xfade = new_xfade; } void monosynth_audio_module::calculate_buffer_ser() { filter.big_step(1.0 / step_size); filter2.big_step(1.0 / step_size); for (uint32_t i = 0; i < step_size; i++) { float wave = buffer[i] * fgain; wave = filter.process(wave); wave = filter2.process(wave); buffer[i] = wave; fgain += fgain_delta; } } void monosynth_audio_module::calculate_buffer_single() { filter.big_step(1.0 / step_size); for (uint32_t i = 0; i < step_size; i++) { float wave = buffer[i] * fgain; wave = filter.process(wave); buffer[i] = wave; fgain += fgain_delta; } } void monosynth_audio_module::calculate_buffer_stereo() { filter.big_step(1.0 / step_size); filter2.big_step(1.0 / step_size); for (uint32_t i = 0; i < step_size; i++) { float wave1 = buffer[i] * fgain; buffer[i] = fgain * filter.process(wave1); buffer2[i] = fgain * filter2.process(wave1); fgain += fgain_delta; } } void monosynth_audio_module::lookup_waveforms() { osc1.waveform = waves[wave1 == wave_sqr ? wave_saw : wave1].get_level((uint32_t)(((uint64_t)osc1.phasedelta) * last_stretch1 >> 16)); osc2.waveform = waves[wave2 == wave_sqr ? wave_saw : wave2].get_level(osc2.phasedelta); if (!osc1.waveform) osc1.waveform = silence; if (!osc2.waveform) osc2.waveform = silence; prev_wave1 = wave1; prev_wave2 = wave2; } void monosynth_audio_module::delayed_note_on() { force_fadeout = false; fadeout.reset_soft(); fadeout2.reset_soft(); porta_time = 0.f; start_freq = freq; target_freq = freq = 440 * pow(2.0, (queue_note_on - 69) / 12.0); velocity = queue_vel; ampctl = 1.0 + (queue_vel - 1.0) * *params[par_vel2amp]; fltctl = 1.0 + (queue_vel - 1.0) * *params[par_vel2filter]; bool starting = false; if (!running) { starting = true; if (legato >= 2) porta_time = -1.f; last_xfade = xfade; osc1.reset(); osc2.reset(); filter.reset(); filter2.reset(); if (*params[par_lfo1trig] <= 0) lfo1.reset(); if (*params[par_lfo2trig] <= 0) lfo2.reset(); switch((int)*params[par_oscmode]) { case 1: osc2.phase = 0x80000000; break; case 2: osc2.phase = 0x40000000; break; case 3: osc1.phase = osc2.phase = 0x40000000; break; case 4: osc1.phase = 0x40000000; osc2.phase = 0xC0000000; break; case 5: // rand() is crap, but I don't have any better RNG in Calf yet osc1.phase = rand() << 16; osc2.phase = rand() << 16; break; default: break; } running = true; } if (legato >= 2 && !gate) porta_time = -1.f; gate = true; stopping = false; if (starting || !(legato & 1) || envelope1.released()) envelope1.note_on(); if (starting || !(legato & 1) || envelope2.released()) envelope2.note_on(); envelope1.advance(); envelope2.advance(); queue_note_on = -1; float modsrc[modsrc_count] = { 1, velocity, inertia_pressure.get_last(), modwheel_value, (float)envelope1.value, (float)envelope2.value, (float)(0.5+0.5*lfo1.last), (float)(0.5+0.5*lfo2.last) }; calculate_modmatrix(moddest, moddest_count, modsrc); set_frequency(); lookup_waveforms(); if (queue_note_on_and_off) { end_note(); queue_note_on_and_off = false; } } void monosynth_audio_module::set_sample_rate(uint32_t sr) { srate = sr; crate = sr / step_size; odcr = (float)(1.0 / crate); fgain = 0.f; fgain_delta = 0.f; inertia_cutoff.ramp.set_length(crate / 30); // 1/30s inertia_pitchbend.ramp.set_length(crate / 30); // 1/30s master.set_sample_rate(sr); } void monosynth_audio_module::calculate_step() { if (queue_note_on != -1) delayed_note_on(); else if (stopping || !running) { running = false; envelope1.advance(); envelope2.advance(); lfo1.get(); lfo2.get(); float modsrc[modsrc_count] = { 1, velocity, inertia_pressure.get_last(), modwheel_value, (float)envelope1.value, (float)envelope2.value, (float)(0.5+0.5*lfo1.last), (float)(0.5+0.5*lfo2.last) }; calculate_modmatrix(moddest, moddest_count, modsrc); last_stretch1 = (int32_t)(65536 * dsp::clip(*params[par_stretch1] + 0.01f * moddest[moddest_o1stretch], 1.f, 16.f)); return; } lfo1.set_freq(*params[par_lforate], crate); lfo2.set_freq(*params[par_lfo2rate], crate); float porta_total_time = *params[par_portamento] * 0.001f; if (porta_total_time >= 0.00101f && porta_time >= 0) { // XXXKF this is criminal, optimize! float point = porta_time / porta_total_time; if (point >= 1.0f) { freq = target_freq; porta_time = -1; } else { freq = start_freq + (target_freq - start_freq) * point; // freq = start_freq * pow(target_freq / start_freq, point); porta_time += odcr; } } float lfov1 = lfo1.get() * std::min(1.0f, lfo_clock / *params[par_lfodelay]); lfov1 = lfov1 * dsp::lerp(1.f, modwheel_value, *params[par_mwhl_lfo]); float lfov2 = lfo2.get() * std::min(1.0f, lfo_clock / *params[par_lfo2delay]); lfo_clock += odcr; if (fabs(*params[par_lfopitch]) > small_value()) lfo_bend = pow(2.0f, *params[par_lfopitch] * lfov1 * (1.f / 1200.0f)); inertia_pitchbend.step(); envelope1.advance(); envelope2.advance(); float env1 = envelope1.value, env2 = envelope2.value; float aenv1 = envelope1.get_amp_value(), aenv2 = envelope2.get_amp_value(); // mod matrix // this should be optimized heavily; I think I'll do it when MIDI in Ardour 3 gets stable :> float modsrc[modsrc_count] = { 1, velocity, inertia_pressure.get(), modwheel_value, (float)env1, (float)env2, (float)(0.5+0.5*lfov1), (float)(0.5+0.5*lfov2) }; calculate_modmatrix(moddest, moddest_count, modsrc); set_frequency(); inertia_cutoff.set_inertia(*params[par_cutoff]); cutoff = inertia_cutoff.get() * pow(2.0f, (lfov1 * *params[par_lfofilter] + env1 * fltctl * *params[par_env1tocutoff] + env2 * fltctl * *params[par_env2tocutoff] + moddest[moddest_cutoff]) * (1.f / 1200.f)); if (*params[par_keyfollow] > 0.01f) cutoff *= pow(freq / 264.f, *params[par_keyfollow]); cutoff = dsp::clip(cutoff , 10.f, 18000.f); float resonance = *params[par_resonance]; float e2r1 = *params[par_env1tores]; resonance = resonance * (1 - e2r1) + (0.7 + (resonance - 0.7) * env1 * env1) * e2r1; float e2r2 = *params[par_env2tores]; resonance = resonance * (1 - e2r2) + (0.7 + (resonance - 0.7) * env2 * env2) * e2r2 + moddest[moddest_resonance]; float cutoff2 = dsp::clip(cutoff * separation, 10.f, 18000.f); float newfgain = 0.f; if (filter_type != last_filter_type) { filter.y2 = filter.y1 = filter.x2 = filter.x1 = filter.y1; filter2.y2 = filter2.y1 = filter2.x2 = filter2.x1 = filter2.y1; last_filter_type = filter_type; } switch(filter_type) { case flt_lp12: filter.set_lp_rbj(cutoff, resonance, srate); filter2.set_null(); newfgain = min(0.7f, 0.7f / resonance) * ampctl; break; case flt_hp12: filter.set_hp_rbj(cutoff, resonance, srate); filter2.set_null(); newfgain = min(0.7f, 0.7f / resonance) * ampctl; break; case flt_lp24: filter.set_lp_rbj(cutoff, resonance, srate); filter2.set_lp_rbj(cutoff2, resonance, srate); newfgain = min(0.5f, 0.5f / resonance) * ampctl; break; case flt_lpbr: filter.set_lp_rbj(cutoff, resonance, srate); filter2.set_br_rbj(cutoff2, 1.0 / resonance, srate); newfgain = min(0.5f, 0.5f / resonance) * ampctl; break; case flt_hpbr: filter.set_hp_rbj(cutoff, resonance, srate); filter2.set_br_rbj(cutoff2, 1.0 / resonance, srate); newfgain = min(0.5f, 0.5f / resonance) * ampctl; break; case flt_2lp12: filter.set_lp_rbj(cutoff, resonance, srate); filter2.set_lp_rbj(cutoff2, resonance, srate); newfgain = min(0.7f, 0.7f / resonance) * ampctl; break; case flt_bp6: filter.set_bp_rbj(cutoff, resonance, srate); filter2.set_null(); newfgain = ampctl; break; case flt_2bp6: filter.set_bp_rbj(cutoff, resonance, srate); filter2.set_bp_rbj(cutoff2, resonance, srate); newfgain = ampctl; break; } float e2a1 = *params[par_env1toamp]; float e2a2 = *params[par_env2toamp]; if (e2a1 > 0.f) newfgain *= aenv1; if (e2a2 > 0.f) newfgain *= aenv2; if (moddest[moddest_attenuation] != 0.f) newfgain *= dsp::clip(1 - moddest[moddest_attenuation] * moddest[moddest_attenuation], 0.f, 1.f); fgain_delta = (newfgain - fgain) * (1.0 / step_size); calculate_buffer_oscs(lfov1); lfo1.last = lfov1; lfo2.last = lfov2; switch(filter_type) { case flt_lp24: case flt_lpbr: case flt_hpbr: // Oomek's wish calculate_buffer_ser(); break; case flt_lp12: case flt_hp12: case flt_bp6: calculate_buffer_single(); break; case flt_2lp12: case flt_2bp6: calculate_buffer_stereo(); break; } apply_fadeout(); } void monosynth_audio_module::apply_fadeout() { if (fadeout.undoing) { fadeout.process(buffer2, step_size); if (is_stereo_filter()) fadeout2.process(buffer2, step_size); } else { // stop the sound if the amplitude envelope is not running (if there's any) bool aenv1_on = *params[par_env1toamp] > 0.f, aenv2_on = *params[par_env2toamp] > 0.f; bool do_fadeout = force_fadeout; // if there's no amplitude envelope at all, the fadeout starts at key release if (!aenv1_on && !aenv2_on && !gate) do_fadeout = true; // if ENV1 modulates amplitude, the fadeout will start on ENV1 end too if (aenv1_on && envelope1.state == adsr::STOP) do_fadeout = true; // if ENV2 modulates amplitude, the fadeout will start on ENV2 end too if (aenv2_on && envelope2.state == adsr::STOP) do_fadeout = true; if (do_fadeout || fadeout.undoing || fadeout2.undoing) { fadeout.process(buffer, step_size); if (is_stereo_filter()) fadeout2.process(buffer2, step_size); if (fadeout.done) stopping = true; } } } void monosynth_audio_module::note_on(int /*channel*/, int note, int vel) { queue_note_on = note; queue_note_on_and_off = false; last_key = note; queue_vel = vel / 127.f; stack.push(note); } void monosynth_audio_module::note_off(int /*channel*/, int note, int vel) { stack.pop(note); if (note == queue_note_on) { queue_note_on_and_off = true; return; } // If releasing the currently played note, try to get another one from note stack. if (note == last_key) { end_note(); } } void monosynth_audio_module::end_note() { if (stack.count()) { int note; last_key = note = stack.nth(stack.count() - 1); start_freq = freq; target_freq = freq = dsp::note_to_hz(note); porta_time = 0; set_frequency(); if (!(legato & 1)) { envelope1.note_on(); envelope2.note_on(); stopping = false; running = true; } return; } gate = false; envelope1.note_off(); envelope2.note_off(); } void monosynth_audio_module::channel_pressure(int /*channel*/, int value) { inertia_pressure.set_inertia(value * (1.0 / 127.0)); } void monosynth_audio_module::control_change(int /*channel*/, int controller, int value) { switch(controller) { case 1: modwheel_value_int = (modwheel_value_int & 127) | (value << 7); modwheel_value = modwheel_value_int / 16383.0; break; case 33: modwheel_value_int = (modwheel_value_int & (127 << 7)) | value; modwheel_value = modwheel_value_int / 16383.0; break; case 120: // all sounds off force_fadeout = true; // fall through case 123: // all notes off gate = false; queue_note_on = -1; envelope1.note_off(); envelope2.note_off(); stack.clear(); break; } } void monosynth_audio_module::deactivate() { gate = false; running = false; stopping = false; envelope1.reset(); envelope2.reset(); stack.clear(); } void monosynth_audio_module::set_frequency() { float detune_scaled = (detune - 1); // * log(freq / 440); if (*params[par_scaledetune] > 0) detune_scaled *= pow(20.0 / freq, (double)*params[par_scaledetune]); float p1 = 1, p2 = 1; if (moddest[moddest_o1detune] != 0) p1 = pow(2.0, moddest[moddest_o1detune] * (1.0 / 1200.0)); if (moddest[moddest_o2detune] != 0) p2 = pow(2.0, moddest[moddest_o2detune] * (1.0 / 1200.0)); osc1.set_freq(freq * (1 - detune_scaled) * p1 * inertia_pitchbend.get_last() * lfo_bend, srate); osc2.set_freq(freq * (1 + detune_scaled) * p2 * inertia_pitchbend.get_last() * lfo_bend * xpose, srate); } void monosynth_audio_module::params_changed() { float sf = 0.001f; envelope1.set(*params[par_env1attack] * sf, *params[par_env1decay] * sf, std::min(0.999f, *params[par_env1sustain]), *params[par_env1release] * sf, srate / step_size, *params[par_env1fade] * sf); envelope2.set(*params[par_env2attack] * sf, *params[par_env2decay] * sf, std::min(0.999f, *params[par_env2sustain]), *params[par_env2release] * sf, srate / step_size, *params[par_env2fade] * sf); filter_type = dsp::fastf2i_drm(*params[par_filtertype]); separation = pow(2.0, *params[par_cutoffsep] / 1200.0); wave1 = dsp::clip(dsp::fastf2i_drm(*params[par_wave1]), 0, (int)wave_count - 1); wave2 = dsp::clip(dsp::fastf2i_drm(*params[par_wave2]), 0, (int)wave_count - 1); detune = pow(2.0, *params[par_detune] / 1200.0); xpose = pow(2.0, *params[par_osc2xpose] / 12.0); xfade = *params[par_oscmix]; legato = dsp::fastf2i_drm(*params[par_legato]); master.set_inertia(*params[par_master]); if (running) set_frequency(); if (wave1 != prev_wave1 || wave2 != prev_wave2) lookup_waveforms(); } uint32_t monosynth_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { uint32_t op = offset; uint32_t op_end = offset + nsamples; int had_data = 0; while(op < op_end) { if (output_pos == 0) calculate_step(); if(op < op_end) { uint32_t ip = output_pos; uint32_t len = std::min(step_size - output_pos, op_end - op); if (running) { had_data = 3; if (is_stereo_filter()) for(uint32_t i = 0 ; i < len; i++) { float vol = master.get(); outs[0][op + i] = buffer[ip + i] * vol; outs[1][op + i] = buffer2[ip + i] * vol; } else for(uint32_t i = 0 ; i < len; i++) outs[0][op + i] = outs[1][op + i] = buffer[ip + i] * master.get(); } else { dsp::zero(&outs[0][op], len); dsp::zero(&outs[1][op], len); } op += len; output_pos += len; if (output_pos == step_size) output_pos = 0; } } return had_data; } lmms-1.1.3/plugins/LadspaEffect/calf/src/organ.cpp000066400000000000000000001166111247673406200220150ustar00rootroot00000000000000/* Calf DSP Library * Example audio modules - organ * * Copyright (C) 2001-2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include using namespace std; using namespace dsp; using namespace calf_plugins; ////////////////////////////////////////////////////////////////////////////////////////////////////////// organ_audio_module::organ_audio_module() : drawbar_organ(&par_values) { var_map_curve = "2\n0 1\n1 1\n"; // XXXKF hacky bugfix } void organ_audio_module::activate() { setup(srate); panic_flag = false; } void organ_audio_module::post_instantiate() { dsp::organ_voice_base::precalculate_waves(progress_report); } uint32_t organ_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) { float *o[2] = { outs[0] + offset, outs[1] + offset }; if (panic_flag) { control_change(120, 0); // stop all sounds control_change(121, 0); // reset all controllers panic_flag = false; } render_separate(o, nsamples); return 3; } void organ_audio_module::params_changed() { for (int i = 0; i < param_count; i++) ((float *)&par_values)[i] = *params[i]; unsigned int old_poly = polyphony_limit; polyphony_limit = dsp::clip(dsp::fastf2i_drm(*params[par_polyphony]), 1, 32); if (polyphony_limit < old_poly) trim_voices(); update_params(); } bool organ_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (index == par_master) { organ_voice_base::precalculate_waves(progress_report); if (subindex) return false; float *waveforms[9]; int S[9], S2[9]; enum { small_waves = organ_voice_base::wave_count_small}; for (int i = 0; i < 9; i++) { int wave = dsp::clip((int)(parameters->waveforms[i]), 0, (int)organ_voice_base::wave_count - 1); if (wave >= small_waves) { waveforms[i] = organ_voice_base::get_big_wave(wave - small_waves).original; S[i] = ORGAN_BIG_WAVE_SIZE; S2[i] = ORGAN_WAVE_SIZE / 64; } else { waveforms[i] = organ_voice_base::get_wave(wave).original; S[i] = S2[i] = ORGAN_WAVE_SIZE; } } for (int i = 0; i < points; i++) { float sum = 0.f; for (int j = 0; j < 9; j++) { float shift = parameters->phase[j] * S[j] / 360.0; sum += parameters->drawbars[j] * waveforms[j][int(parameters->harmonics[j] * i * S2[j] / points + shift) & (S[j] - 1)]; } data[i] = sum * 2 / (9 * 8); } return true; } return false; } uint32_t organ_audio_module::message_run(const void *valid_inputs, void *output_ports) { // silence a default printf (which is kind of a warning about unhandled message_run) return 0; } //////////////////////////////////////////////////////////////////////////// organ_voice_base::small_wave_family (*organ_voice_base::waves)[organ_voice_base::wave_count_small]; organ_voice_base::big_wave_family (*organ_voice_base::big_waves)[organ_voice_base::wave_count_big]; static void smoothen(bandlimiter &bl, float tmp[ORGAN_WAVE_SIZE]) { bl.compute_spectrum(tmp); for (int i = 1; i <= ORGAN_WAVE_SIZE / 2; i++) { bl.spectrum[i] *= 1.0 / sqrt(i); bl.spectrum[ORGAN_WAVE_SIZE - i] *= 1.0 / sqrt(i); } bl.compute_waveform(tmp); normalize_waveform(tmp, ORGAN_WAVE_SIZE); } static void phaseshift(bandlimiter &bl, float tmp[ORGAN_WAVE_SIZE]) { bl.compute_spectrum(tmp); for (int i = 1; i <= ORGAN_WAVE_SIZE / 2; i++) { float frac = i * 2.0 / ORGAN_WAVE_SIZE; float phase = M_PI / sqrt(frac) ; complex shift = complex(cos(phase), sin(phase)); bl.spectrum[i] *= shift; bl.spectrum[ORGAN_WAVE_SIZE - i] *= conj(shift); } bl.compute_waveform(tmp); normalize_waveform(tmp, ORGAN_WAVE_SIZE); } static void padsynth(bandlimiter blSrc, bandlimiter &blDest, organ_voice_base::big_wave_family &result, int bwscale = 20, float bell_factor = 0, bool foldover = false) { // kept in a vector to avoid putting large arrays on stack vector >orig_spectrum; orig_spectrum.resize(ORGAN_WAVE_SIZE / 2); for (int i = 0; i < ORGAN_WAVE_SIZE / 2; i++) { orig_spectrum[i] = blSrc.spectrum[i]; // printf("@%d = %f\n", i, abs(orig_spectrum[i])); } int periods = (1 << ORGAN_BIG_WAVE_SHIFT) * ORGAN_BIG_WAVE_SIZE / ORGAN_WAVE_SIZE; for (int i = 0; i <= ORGAN_BIG_WAVE_SIZE / 2; i++) { blDest.spectrum[i] = 0; } int MAXHARM = (ORGAN_WAVE_SIZE >> (1 + ORGAN_BIG_WAVE_SHIFT)); for (int i = 1; i <= MAXHARM; i++) { //float esc = 0.25 * (1 + 0.5 * log(i)); float esc = 0.5; float amp = abs(blSrc.spectrum[i]); // fade out starting from half if (i >= MAXHARM / 2) { float pos = (i - MAXHARM/2) * 1.0 / (MAXHARM / 2); amp *= 1.0 - pos; amp *= 1.0 - pos; } int bw = 1 + 20 * i; float sum = 1; int delta = 1; if (bw > 20) delta = bw / 20; for (int j = delta; j <= bw; j+=delta) { float p = j * 1.0 / bw; sum += 2 * exp(-p * p * esc); } if (sum < 0.0001) continue; amp *= (ORGAN_BIG_WAVE_SIZE / ORGAN_WAVE_SIZE); amp /= sum; int orig = i * periods + bell_factor * cos(i); if (orig > 0 && orig < ORGAN_BIG_WAVE_SIZE / 2) blDest.spectrum[orig] += amp; for (int j = delta; j <= bw; j += delta) { float p = j * 1.0 / bw; float val = amp * exp(-p * p * esc); int dist = j * bwscale / 40; int pos = orig + dist; if (pos < 1 || pos >= ORGAN_BIG_WAVE_SIZE / 2) continue; int pos2 = orig - dist; if (pos2 < 1 || pos2 >= ORGAN_BIG_WAVE_SIZE / 2) continue; blDest.spectrum[pos] += val; if (j) blDest.spectrum[pos2] += val; } } for (int i = 1; i <= ORGAN_BIG_WAVE_SIZE / 2; i++) { float phase = M_PI * 2 * (rand() & 255) / 256; complex shift = complex(cos(phase), sin(phase)); blDest.spectrum[i] *= shift; // printf("@%d = %f\n", i, abs(blDest.spectrum[i])); blDest.spectrum[ORGAN_BIG_WAVE_SIZE - i] = conj(blDest.spectrum[i]); } // same as above - put large array on heap to avoid stack overflow in ingen vector tmp; tmp.resize(ORGAN_BIG_WAVE_SIZE); float *ptmp = &tmp.front(); blDest.compute_waveform(ptmp); normalize_waveform(ptmp, ORGAN_BIG_WAVE_SIZE); blDest.compute_spectrum(ptmp); // limit is 1/2 of the number of harmonics of the original wave result.make_from_spectrum(blDest, foldover, ORGAN_WAVE_SIZE >> (1 + ORGAN_BIG_WAVE_SHIFT)); memcpy(result.original, result.begin()->second, sizeof(result.original)); #if 0 blDest.compute_waveform(result); normalize_waveform(result, ORGAN_BIG_WAVE_SIZE); result[ORGAN_BIG_WAVE_SIZE] = result[0]; for (int i =0 ; ireport_progress(floor(progress / totalwaves), "Precalculating large waveforms"); } } while(0) void organ_voice_base::update_pitch() { float phase = dsp::midi_note_to_phase(note, 100 * parameters->global_transpose + parameters->global_detune, sample_rate_ref); dpphase.set((long int) (phase * parameters->percussion_harmonic * parameters->pitch_bend)); moddphase.set((long int) (phase * parameters->percussion_fm_harmonic * parameters->pitch_bend)); } void organ_voice_base::precalculate_waves(progress_report_iface *reporter) { static bool inited = false; if (!inited) { static organ_voice_base::small_wave_family waves[organ_voice_base::wave_count_small]; static organ_voice_base::big_wave_family big_waves[organ_voice_base::wave_count_big]; organ_voice_base::waves = &waves; organ_voice_base::big_waves = &big_waves; float progress = 0.0; int totalwaves = 1 + wave_count_big; if (reporter) reporter->report_progress(0, "Precalculating small waveforms"); float tmp[ORGAN_WAVE_SIZE]; static bandlimiter bl; static bandlimiter blBig; for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = sin(i * 2 * M_PI / ORGAN_WAVE_SIZE); waves[wave_sine].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = (i < (ORGAN_WAVE_SIZE / 16)) ? 1 : 0; normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_pulse].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = i < (ORGAN_WAVE_SIZE / 2) ? sin(i * 2 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; waves[wave_sinepl1].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = i < (ORGAN_WAVE_SIZE / 3) ? sin(i * 3 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; waves[wave_sinepl2].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = i < (ORGAN_WAVE_SIZE / 4) ? sin(i * 4 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; waves[wave_sinepl3].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = (i < (ORGAN_WAVE_SIZE / 2)) ? 1 : -1; normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_sqr].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_saw].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = (i < (ORGAN_WAVE_SIZE / 2)) ? 1 : -1; normalize_waveform(tmp, ORGAN_WAVE_SIZE); smoothen(bl, tmp); waves[wave_ssqr].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); smoothen(bl, tmp); waves[wave_ssaw].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = (i < (ORGAN_WAVE_SIZE / 16)) ? 1 : 0; normalize_waveform(tmp, ORGAN_WAVE_SIZE); smoothen(bl, tmp); waves[wave_spls].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = i < (ORGAN_WAVE_SIZE / 1.5) ? sin(i * 1.5 * 2 * M_PI / ORGAN_WAVE_SIZE) : 0; normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_sinepl05].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = i < (ORGAN_WAVE_SIZE / 1.5) ? (i < ORGAN_WAVE_SIZE / 3 ? -1 : +1) : 0; normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_sqr05].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = sin(i * M_PI / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_halfsin].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = sin(i * 3 * M_PI / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_clvg].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = 0.3 * sin(6*ph) + 0.2 * sin(11*ph) + 0.2 * cos(17*ph) - 0.2 * cos(19*ph); tmp[i] = sin(5*ph + fm) + 0.7 * cos(7*ph - fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_bell].make(bl, tmp, true); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = 0.3 * sin(3*ph) + 0.3 * sin(11*ph) + 0.3 * cos(17*ph) - 0.3 * cos(19*ph) + 0.3 * cos(25*ph) - 0.3 * cos(31*ph) + 0.3 * cos(37*ph); tmp[i] = sin(3*ph + fm) + cos(7*ph - fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_bell2].make(bl, tmp, true); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = 0.5 * sin(3*ph) + 0.3 * sin(5*ph) + 0.3 * cos(6*ph) - 0.3 * cos(9*ph); tmp[i] = sin(4*ph + fm) + cos(ph - fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w1].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; tmp[i] = sin(ph) * sin(2 * ph) * sin(4 * ph) * sin(8 * ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w2].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; tmp[i] = sin(ph) * sin(3 * ph) * sin(5 * ph) * sin(7 * ph) * sin(9 * ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w3].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; tmp[i] = sin(ph + 2 * sin(ph + 2 * sin(ph))); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w4].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; tmp[i] = ph * sin(ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w5].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; tmp[i] = ph * sin(ph) + (2 * M_PI - ph) * sin(2 * ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w6].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 1.0 / ORGAN_WAVE_SIZE; tmp[i] = exp(-ph * ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w7].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 1.0 / ORGAN_WAVE_SIZE; tmp[i] = exp(-ph * sin(2 * M_PI * ph)); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w8].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 1.0 / ORGAN_WAVE_SIZE; tmp[i] = sin(2 * M_PI * ph * ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); waves[wave_w9].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); phaseshift(bl, tmp); waves[wave_dsaw].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = (i < (ORGAN_WAVE_SIZE / 2)) ? 1 : -1; normalize_waveform(tmp, ORGAN_WAVE_SIZE); phaseshift(bl, tmp); waves[wave_dsqr].make(bl, tmp); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = (i < (ORGAN_WAVE_SIZE / 16)) ? 1 : 0; normalize_waveform(tmp, ORGAN_WAVE_SIZE); phaseshift(bl, tmp); waves[wave_dpls].make(bl, tmp); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_strings - wave_count_small], 15); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = -1 + (i * 2.0 / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_strings2 - wave_count_small], 40); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) tmp[i] = sin(i * 2 * M_PI / ORGAN_WAVE_SIZE); normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_sinepad - wave_count_small], 20); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = 0.3 * sin(6*ph) + 0.2 * sin(11*ph) + 0.2 * cos(17*ph) - 0.2 * cos(19*ph); tmp[i] = sin(5*ph + fm) + 0.7 * cos(7*ph - fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_bellpad - wave_count_small], 30, 30, true); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = 0.3 * sin(3*ph) + 0.2 * sin(4*ph) + 0.2 * cos(5*ph) - 0.2 * cos(6*ph); tmp[i] = sin(2*ph + fm) + 0.7 * cos(3*ph - fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_space - wave_count_small], 30, 30); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = 0.5 * sin(ph) + 0.5 * sin(2*ph) + 0.5 * sin(3*ph); tmp[i] = sin(ph + fm) + 0.5 * cos(7*ph - 2 * fm) + 0.25 * cos(13*ph - 4 * fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_choir - wave_count_small], 50, 10); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = sin(ph) ; tmp[i] = sin(ph + fm) + 0.25 * cos(11*ph - 2 * fm) + 0.125 * cos(23*ph - 2 * fm) + 0.0625 * cos(49*ph - 2 * fm); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_choir2 - wave_count_small], 50, 10); LARGE_WAVEFORM_PROGRESS(); for (int i = 0; i < ORGAN_WAVE_SIZE; i++) { float ph = i * 2 * M_PI / ORGAN_WAVE_SIZE; float fm = sin(ph) ; tmp[i] = sin(ph + 4 * fm) + 0.5 * sin(2 * ph + 4 * ph); } normalize_waveform(tmp, ORGAN_WAVE_SIZE); bl.compute_spectrum(tmp); padsynth(bl, blBig, big_waves[wave_choir3 - wave_count_small], 50, 10); LARGE_WAVEFORM_PROGRESS(); inited = true; } } organ_voice_base::organ_voice_base(organ_parameters *_parameters, int &_sample_rate_ref, bool &_released_ref) : parameters(_parameters) , sample_rate_ref(_sample_rate_ref) , released_ref(_released_ref) { note = -1; } void organ_voice_base::render_percussion_to(float (*buf)[2], int nsamples) { if (note == -1) return; if (!pamp.get_active()) return; if (parameters->percussion_level < small_value()) return; float level = parameters->percussion_level * 9; static float zeros[ORGAN_WAVE_SIZE]; // XXXKF the decay needs work! double age_const = parameters->perc_decay_const; double fm_age_const = parameters->perc_fm_decay_const; int timbre = parameters->get_percussion_wave(); if (timbre < 0 || timbre >= wave_count_small) return; int timbre2 = parameters->get_percussion_fm_wave(); if (timbre2 < 0 || timbre2 >= wave_count_small) timbre2 = wave_sine; float *fmdata = (*waves)[timbre2].get_level(moddphase.get()); if (!fmdata) fmdata = zeros; float *data = (*waves)[timbre].get_level(dpphase.get()); if (!data) { pamp.deactivate(); return; } float s = parameters->percussion_stereo * ORGAN_WAVE_SIZE * (0.5 / 360.0); for (int i = 0; i < nsamples; i++) { float fm = wave(fmdata, modphase); fm *= ORGAN_WAVE_SIZE * parameters->percussion_fm_depth * fm_amp.get(); modphase += moddphase; fm_amp.age_exp(fm_age_const, 1.0 / 32768.0); float lamp = level * pamp.get(); buf[i][0] += lamp * wave(data, pphase + dsp::fixed_point(fm - s)); buf[i][1] += lamp * wave(data, pphase + dsp::fixed_point(fm + s)); if (released_ref) pamp.age_lin(rel_age_const,0.0); else pamp.age_exp(age_const, 1.0 / 32768.0); pphase += dpphase; } } void organ_voice_base::perc_reset() { pphase = 0; modphase = 0; dpphase = 0; moddphase = 0; note = -1; } ////////////////////////////////////////////////////////////////////////////////////////////////////// void organ_vibrato::reset() { for (int i = 0; i < VibratoSize; i++) vibrato_x1[i][0] = vibrato_y1[i][0] = vibrato_x1[i][1] = vibrato_y1[i][1] = 0.f; vibrato[0].a0 = vibrato[1].a0 = 0; lfo_phase = 0.f; } void organ_vibrato::process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate) { float lfo1 = lfo_phase < 0.5 ? 2 * lfo_phase : 2 - 2 * lfo_phase; float lfo_phase2 = lfo_phase + parameters->lfo_phase * (1.0 / 360.0); if (lfo_phase2 >= 1.0) lfo_phase2 -= 1.0; float lfo2 = lfo_phase2 < 0.5 ? 2 * lfo_phase2 : 2 - 2 * lfo_phase2; lfo_phase += parameters->lfo_rate * len / sample_rate; if (lfo_phase >= 1.0) lfo_phase -= 1.0; if (!len) return; float olda0[2] = {vibrato[0].a0, vibrato[1].a0}; vibrato[0].set_ap(3000 + 7000 * parameters->lfo_amt * lfo1 * lfo1, sample_rate); vibrato[1].set_ap(3000 + 7000 * parameters->lfo_amt * lfo2 * lfo2, sample_rate); float ilen = 1.0 / len; float deltaa0[2] = {(vibrato[0].a0 - olda0[0])*ilen, (vibrato[1].a0 - olda0[1])*ilen}; float vib_wet = parameters->lfo_wet; for (int c = 0; c < 2; c++) { for (unsigned int i = 0; i < len; i++) { float v = data[i][c]; float v0 = v; float coeff = olda0[c] + deltaa0[c] * i; for (int t = 0; t < VibratoSize; t++) v = vibrato[c].process_ap(v, vibrato_x1[t][c], vibrato_y1[t][c], coeff); data[i][c] += (v - v0) * vib_wet; } for (int t = 0; t < VibratoSize; t++) { sanitize(vibrato_x1[t][c]); sanitize(vibrato_y1[t][c]); } } } void scanner_vibrato::reset() { legacy.reset(); for (int i = 0; i < ScannerSize; i++) scanner[i].reset(); lfo_phase = 0.f; } void scanner_vibrato::process(organ_parameters *parameters, float (*data)[2], unsigned int len, float sample_rate) { if (!len) return; int vtype = (int)parameters->lfo_type; if (!vtype || vtype > organ_enums::lfotype_cvfull) { legacy.process(parameters, data, len, sample_rate); return; } // I bet the original components of the line box had some tolerance, // hence two different values of cutoff frequency scanner[0].set_lp_rbj(4000, 0.707, sample_rate); scanner[1].set_lp_rbj(4200, 0.707, sample_rate); for (int t = 2; t < ScannerSize; t ++) { scanner[t].copy_coeffs(scanner[t & 1]); } float lfo_phase2 = lfo_phase + parameters->lfo_phase * (1.0 / 360.0); if (lfo_phase2 >= 1.0) lfo_phase2 -= 1.0; float vib_wet = parameters->lfo_wet; float dphase = parameters->lfo_rate / sample_rate; static const int v1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8 }; static const int v2[] = { 0, 1, 2, 4, 6, 8, 9, 10, 12 }; static const int v3[] = { 0, 1, 3, 6, 11, 12, 15, 17, 18, 18, 18 }; static const int vfull[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18 }; static const int *vtypes[] = { NULL, v1, v2, v3, vfull }; const int *vib = vtypes[vtype]; float vibamt = 8 * parameters->lfo_amt; if (vtype == organ_enums::lfotype_cvfull) vibamt = 17 * parameters->lfo_amt; for (unsigned int i = 0; i < len; i++) { float line[ScannerSize + 1]; float v0 = (data[i][0] + data[i][1]) * 0.5; line[0] = v0; for (int t = 0; t < ScannerSize; t++) line[t + 1] = scanner[t].process(line[t]) * 1.03; float lfo1 = lfo_phase < 0.5 ? 2 * lfo_phase : 2 - 2 * lfo_phase; float lfo2 = lfo_phase2 < 0.5 ? 2 * lfo_phase2 : 2 - 2 * lfo_phase2; float pos = vibamt * lfo1; int ipos = (int)pos; float vl = lerp(line[vib[ipos]], line[vib[ipos + 1]], pos - ipos); pos = vibamt * lfo2; ipos = (int)pos; float vr = lerp(line[vib[ipos]], line[vib[ipos + 1]], pos - ipos); lfo_phase += dphase; if (lfo_phase >= 1.0) lfo_phase -= 1.0; lfo_phase2 += dphase; if (lfo_phase2 >= 1.0) lfo_phase2 -= 1.0; data[i][0] += (vl - v0) * vib_wet; data[i][1] += (vr - v0) * vib_wet; } for (int t = 0; t < ScannerSize; t++) { scanner[t].sanitize(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////// void organ_voice::update_pitch() { organ_voice_base::update_pitch(); dphase.set(dsp::midi_note_to_phase(note, 100 * parameters->global_transpose + parameters->global_detune, sample_rate) * inertia_pitchbend.get_last()); } void organ_voice::render_block() { if (note == -1) return; dsp::zero(&output_buffer[0][0], Channels * BlockSize); dsp::zero(&aux_buffers[1][0][0], 2 * Channels * BlockSize); if (!amp.get_active()) { if (use_percussion()) render_percussion_to(output_buffer, BlockSize); return; } inertia_pitchbend.set_inertia(parameters->pitch_bend); inertia_pitchbend.step(); update_pitch(); dsp::fixed_point tphase, tdphase; unsigned int foldvalue = parameters->foldvalue * inertia_pitchbend.get_last(); int vibrato_mode = fastf2i_drm(parameters->lfo_mode); for (int h = 0; h < 9; h++) { float amp = parameters->drawbars[h]; if (amp < small_value()) continue; float *data; dsp::fixed_point hm = dsp::fixed_point(parameters->multiplier[h]); int waveid = (int)parameters->waveforms[h]; if (waveid < 0 || waveid >= wave_count) waveid = 0; uint32_t rate = (dphase * hm).get(); if (waveid >= wave_count_small) { float *data = (*big_waves)[waveid - wave_count_small].get_level(rate >> (ORGAN_BIG_WAVE_BITS - ORGAN_WAVE_BITS + ORGAN_BIG_WAVE_SHIFT)); if (!data) continue; hm.set(hm.get() >> ORGAN_BIG_WAVE_SHIFT); dsp::fixed_point tphase, tdphase; tphase.set(((phase * hm).get()) + parameters->phaseshift[h]); tdphase.set(rate >> ORGAN_BIG_WAVE_SHIFT); float ampl = amp * 0.5f * (1 - parameters->pan[h]); float ampr = amp * 0.5f * (1 + parameters->pan[h]); float (*out)[Channels] = aux_buffers[dsp::fastf2i_drm(parameters->routing[h])]; for (int i=0; i < (int)BlockSize; i++) { float wv = big_wave(data, tphase); out[i][0] += wv * ampl; out[i][1] += wv * ampr; tphase += tdphase; } } else { unsigned int foldback = 0; while (rate > foldvalue) { rate >>= 1; foldback++; } hm.set(hm.get() >> foldback); data = (*waves)[waveid].get_level(rate); if (!data) continue; tphase.set((uint32_t)((phase * hm).get()) + parameters->phaseshift[h]); tdphase.set((uint32_t)rate); float ampl = amp * 0.5f * (1 - parameters->pan[h]); float ampr = amp * 0.5f * (1 + parameters->pan[h]); float (*out)[Channels] = aux_buffers[dsp::fastf2i_drm(parameters->routing[h])]; for (int i=0; i < (int)BlockSize; i++) { float wv = wave(data, tphase); out[i][0] += wv * ampl; out[i][1] += wv * ampr; tphase += tdphase; } } } bool is_quad = parameters->quad_env >= 0.5f; expression.set_inertia(parameters->cutoff); phase += dphase * BlockSize; float escl[EnvCount], eval[EnvCount]; for (int i = 0; i < EnvCount; i++) escl[i] = (1.f + parameters->envs[i].velscale * (velocity - 1.f)); if (is_quad) { for (int i = 0; i < EnvCount; i++) eval[i] = envs[i].value * envs[i].value * escl[i]; } else { for (int i = 0; i < EnvCount; i++) eval[i] = envs[i].value * escl[i]; } for (int i = 0; i < FilterCount; i++) { float mod = parameters->filters[i].envmod[0] * eval[0] ; mod += parameters->filters[i].keyf * 100 * (note - 60); for (int j = 1; j < EnvCount; j++) { mod += parameters->filters[i].envmod[j] * eval[j]; } if (i) mod += expression.get() * 1200 * 4; float fc = parameters->filters[i].cutoff * pow(2.0f, mod * (1.f / 1200.f)); if (i == 0 && parameters->filter1_type >= 0.5f) filterL[i].set_hp_rbj(dsp::clip(fc, 10, 18000), parameters->filters[i].resonance, sample_rate); else filterL[i].set_lp_rbj(dsp::clip(fc, 10, 18000), parameters->filters[i].resonance, sample_rate); filterR[i].copy_coeffs(filterL[i]); } float amp_pre[ampctl_count - 1], amp_post[ampctl_count - 1]; for (int i = 0; i < ampctl_count - 1; i++) { amp_pre[i] = 1.f; amp_post[i] = 1.f; } bool any_running = false; for (int i = 0; i < EnvCount; i++) { float pre = eval[i]; envs[i].advance(); int mode = fastf2i_drm(parameters->envs[i].ampctl); if (!envs[i].stopped()) any_running = true; if (mode == ampctl_none) continue; float post = (is_quad ? envs[i].value : 1) * envs[i].value * escl[i]; amp_pre[mode - 1] *= pre; amp_post[mode - 1] *= post; } if (vibrato_mode >= lfomode_direct && vibrato_mode <= lfomode_filter2) vibrato.process(parameters, aux_buffers[vibrato_mode - lfomode_direct], BlockSize, sample_rate); if (!any_running) finishing = true; // calculate delta from pre and post for (int i = 0; i < ampctl_count - 1; i++) amp_post[i] = (amp_post[i] - amp_pre[i]) * (1.0 / BlockSize); float a0 = amp_pre[0], a1 = amp_pre[1], a2 = amp_pre[2], a3 = amp_pre[3]; float d0 = amp_post[0], d1 = amp_post[1], d2 = amp_post[2], d3 = amp_post[3]; if (parameters->filter_chain >= 0.5f) { for (int i=0; i < (int) BlockSize; i++) { output_buffer[i][0] = a3 * (a0 * output_buffer[i][0] + a2 * filterL[1].process(a1 * filterL[0].process(aux_buffers[1][i][0]) + aux_buffers[2][i][0])); output_buffer[i][1] = a3 * (a0 * output_buffer[i][1] + a2 * filterR[1].process(a1 * filterR[0].process(aux_buffers[1][i][1]) + aux_buffers[2][i][1])); a0 += d0, a1 += d1, a2 += d2, a3 += d3; } } else { for (int i=0; i < (int) BlockSize; i++) { output_buffer[i][0] = a3 * (a0 * output_buffer[i][0] + a1 * filterL[0].process(aux_buffers[1][i][0]) + a2 * filterL[1].process(aux_buffers[2][i][0])); output_buffer[i][1] = a3 * (a0 * output_buffer[i][1] + a1 * filterR[0].process(aux_buffers[1][i][1]) + a2 * filterR[1].process(aux_buffers[2][i][1])); a0 += d0, a1 += d1, a2 += d2, a3 += d3; } } filterL[0].sanitize(); filterR[0].sanitize(); filterL[1].sanitize(); filterR[1].sanitize(); if (vibrato_mode == lfomode_voice) vibrato.process(parameters, output_buffer, BlockSize, sample_rate); if (finishing) { for (int i = 0; i < (int) BlockSize; i++) { output_buffer[i][0] *= amp.get(); output_buffer[i][1] *= amp.get(); amp.age_lin((1.0/44100.0)/0.03,0.0); } } if (use_percussion()) render_percussion_to(output_buffer, BlockSize); } void organ_voice::note_on(int note, int vel) { stolen = false; finishing = false; perc_released = false; released = false; reset(); this->note = note; const float sf = 0.001f; for (int i = 0; i < EnvCount; i++) { organ_parameters::organ_env_parameters &p = parameters->envs[i]; envs[i].set(sf * p.attack, sf * p.decay, p.sustain, sf * p.release, sample_rate / BlockSize); envs[i].note_on(); } update_pitch(); velocity = vel * 1.0 / 127.0; amp.set(1.0f); perc_note_on(note, vel); } void organ_voice::note_off(int /* vel */) { // reset age to 0 (because decay will turn from exponential to linear, necessary because of error cumulation prevention) perc_released = true; if (pamp.get_active()) { pamp.reinit(); } rel_age_const = pamp.get() * ((1.0/44100.0)/0.03); for (int i = 0; i < EnvCount; i++) envs[i].note_off(); } void organ_voice::steal() { perc_released = true; finishing = true; stolen = true; } void organ_voice::reset() { inertia_pitchbend.ramp.set_length(sample_rate / (BlockSize * 30)); // 1/30s vibrato.reset(); phase = 0; for (int i = 0; i < FilterCount; i++) { filterL[i].reset(); filterR[i].reset(); } } /////////////////////////////////////////////////////////////////////////////////////////////////// void drawbar_organ::update_params() { parameters->perc_decay_const = dsp::decay::calc_exp_constant(1.0 / 1024.0, 0.001 * parameters->percussion_time * sample_rate); parameters->perc_fm_decay_const = dsp::decay::calc_exp_constant(1.0 / 1024.0, 0.001 * parameters->percussion_fm_time * sample_rate); for (int i = 0; i < 9; i++) { parameters->multiplier[i] = parameters->harmonics[i] * pow(2.0, parameters->detune[i] * (1.0 / 1200.0)); parameters->phaseshift[i] = int(parameters->phase[i] * 65536 / 360) << 16; } double dphase = dsp::midi_note_to_phase((int)parameters->foldover, 0, sample_rate); parameters->foldvalue = (int)(dphase); } dsp::voice *drawbar_organ::alloc_voice() { block_voice *v = new block_voice(); v->parameters = parameters; return v; } void drawbar_organ::percussion_note_on(int note, int vel) { percussion.perc_note_on(note, vel); } void drawbar_organ::setup(int sr) { basic_synth::setup(sr); percussion.setup(sr); parameters->cutoff = 0; params_changed(); global_vibrato.reset(); } bool drawbar_organ::check_percussion() { switch(dsp::fastf2i_drm(parameters->percussion_trigger)) { case organ_voice_base::perctrig_first: return active_voices.empty(); case organ_voice_base::perctrig_each: default: return true; case organ_voice_base::perctrig_eachplus: return !percussion.get_noticable(); case organ_voice_base::perctrig_polyphonic: return false; } } void drawbar_organ::pitch_bend(int amt) { parameters->pitch_bend = pow(2.0, (amt * parameters->pitch_bend_range) / (1200.0 * 8192.0)); for (list::iterator i = active_voices.begin(); i != active_voices.end(); i++) { organ_voice *v = dynamic_cast(*i); v->update_pitch(); } percussion.update_pitch(); } void organ_audio_module::execute(int cmd_no) { switch(cmd_no) { case 0: panic_flag = true; break; } } void organ_voice_base::perc_note_on(int note, int vel) { perc_reset(); released_ref = false; this->note = note; if (parameters->percussion_level > 0) pamp.set(1.0f + (vel - 127) * parameters->percussion_vel2amp / 127.0); update_pitch(); float (*kt)[2] = parameters->percussion_keytrack; // assume last point (will be put there by padding) fm_keytrack = kt[ORGAN_KEYTRACK_POINTS - 1][1]; // yes binary search would be nice if we had more than those crappy 4 points for (int i = 0; i < ORGAN_KEYTRACK_POINTS - 1; i++) { float &lower = kt[i][0], upper = kt[i + 1][0]; if (note >= lower && note < upper) { fm_keytrack = kt[i][1] + (note - lower) * (kt[i + 1][1] - kt[i][1]) / (upper - lower); break; } } fm_amp.set(fm_keytrack * (1.0f + (vel - 127) * parameters->percussion_vel2fm / 127.0)); } char *organ_audio_module::configure(const char *key, const char *value) { if (!strcmp(key, "map_curve")) { if (!value) value = "2\n0 1\n1 1\n"; var_map_curve = value; stringstream ss(value); int i = 0; float x = 0, y = 1; if (*value) { int points; ss >> points; for (i = 0; i < points; i++) { static const int whites[] = { 0, 2, 4, 5, 7, 9, 11 }; ss >> x >> y; int wkey = (int)(x * 71); x = whites[wkey % 7] + 12 * (wkey / 7); parameters->percussion_keytrack[i][0] = x; parameters->percussion_keytrack[i][1] = y; // cout << "(" << x << ", " << y << ")" << endl; } } // pad with constant Y for (; i < ORGAN_KEYTRACK_POINTS; i++) { parameters->percussion_keytrack[i][0] = x; parameters->percussion_keytrack[i][1] = y; } return NULL; } cout << "Set unknown configure value " << key << " to " << value << endl; return NULL; } void organ_audio_module::send_configures(send_configure_iface *sci) { sci->send_configure("map_curve", var_map_curve.c_str()); } void organ_audio_module::deactivate() { } void drawbar_organ::render_separate(float *output[], int nsamples) { float buf[MAX_SAMPLE_RUN][2]; dsp::zero(&buf[0][0], 2 * nsamples); basic_synth::render_to(buf, nsamples); if (dsp::fastf2i_drm(parameters->lfo_mode) == organ_voice_base::lfomode_global) { for (int i = 0; i < nsamples; i += 64) global_vibrato.process(parameters, buf + i, std::min(64, nsamples - i), sample_rate); } if (percussion.get_active()) percussion.render_percussion_to(buf, nsamples); float gain = parameters->master * (1.0 / 8); eq_l.set(parameters->bass_freq, parameters->bass_gain, parameters->treble_freq, parameters->treble_gain, sample_rate); eq_r.copy_coeffs(eq_l); for (int i=0; i #include #include #include #include #include #include #include #include #include #include #include using namespace calf_plugins; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #if USE_LADSPA ladspa_instance::ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate) { module = _module; metadata = module->get_metadata_iface(); ladspa = _ladspa; module->get_port_arrays(ins, outs, params); activate_flag = true; #if USE_DSSI feedback_sender = NULL; #endif module->set_sample_rate(sample_rate); module->post_instantiate(); } ladspa_instance::~ladspa_instance() { delete module; } float ladspa_instance::get_param_value(int param_no) { // XXXKF hack if (param_no >= ladspa->param_count) return 0; return *params[param_no]; } void ladspa_instance::set_param_value(int param_no, float value) { // XXXKF hack if (param_no >= ladspa->param_count) return; *params[param_no] = value; } bool ladspa_instance::activate_preset(int bank, int program) { return false; } /// LADSPA run function - does set sample rate / activate logic when it's run first time after activation void ladspa_instance::run(unsigned long SampleCount) { if (activate_flag) { module->activate(); activate_flag = false; } module->params_changed(); module->process_slice(0, SampleCount); } #if USE_DSSI void ladspa_instance::run_synth(unsigned long SampleCount, snd_seq_event_t *Events, unsigned long EventCount) { if (activate_flag) { module->activate(); activate_flag = false; } module->params_changed(); uint32_t offset = 0; for (uint32_t e = 0; e < EventCount; e++) { uint32_t timestamp = Events[e].time.tick; if (timestamp != offset) module->process_slice(offset, timestamp); process_dssi_event(Events[e]); offset = timestamp; } if (offset != SampleCount) module->process_slice(offset, SampleCount); } #endif char *ladspa_instance::configure(const char *key, const char *value) { #if USE_DSSI_GUI if (!strcmp(key, "OSC:FEEDBACK_URI")) { const line_graph_iface *lgi = dynamic_cast(metadata); //if (!lgi) // return NULL; if (*value) { if (feedback_sender) { delete feedback_sender; feedback_sender = NULL; } feedback_sender = new dssi_feedback_sender(value, lgi); feedback_sender->add_graphs(metadata->get_param_props(0), metadata->get_param_count()); } else { if (feedback_sender) { delete feedback_sender; feedback_sender = NULL; } } return NULL; } else if (!strcmp(key, "OSC:UPDATE")) { if (feedback_sender) feedback_sender->update(); return NULL; } else if (!strcmp(key, "OSC:SEND_STATUS")) { if (!feedback_sender) return NULL; struct status_gatherer: public send_updates_iface { osc_inline_typed_strstream str; void send_status(const char *key, const char *value) { str << key << value; } } sg; int serial = atoi(value); serial = module->send_status_updates(&sg, serial); sg.str << (uint32_t)serial; feedback_sender->client->send("/status_data", sg.str); return NULL; } else #endif if (!strcmp(key, "ExecCommand")) { if (*value) { execute(atoi(value)); } return NULL; } return module->configure(key, value); } template ladspa_plugin_metadata_set ladspa_wrapper::output; #if USE_DSSI /// Utility function: handle MIDI event (only handles a subset in this version) void ladspa_instance::process_dssi_event(snd_seq_event_t &event) { switch(event.type) { case SND_SEQ_EVENT_NOTEON: module->note_on(event.data.note.channel, event.data.note.note, event.data.note.velocity); break; case SND_SEQ_EVENT_NOTEOFF: module->note_off(event.data.note.channel, event.data.note.note, event.data.note.velocity); break; case SND_SEQ_EVENT_PGMCHANGE: module->program_change(event.data.control.channel, event.data.control.value); break; case SND_SEQ_EVENT_CONTROLLER: module->control_change(event.data.control.channel, event.data.control.param, event.data.control.value); break; case SND_SEQ_EVENT_PITCHBEND: module->pitch_bend(event.data.control.channel, event.data.control.value); break; case SND_SEQ_EVENT_CHANPRESS: module->channel_pressure(event.data.control.channel, event.data.control.value); break; } } #endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // LADSPA callbacks /// LADSPA activate function (note that at this moment the ports are not set) static void cb_activate(LADSPA_Handle Instance) { ((ladspa_instance *)(Instance))->activate_flag = true; } /// LADSPA run function - does set sample rate / activate logic when it's run first time after activation static void cb_run(LADSPA_Handle Instance, unsigned long SampleCount) { ((ladspa_instance *)(Instance))->run(SampleCount); } /// LADSPA port connection function static void cb_connect(LADSPA_Handle Instance, unsigned long port, LADSPA_Data *DataLocation) { ladspa_instance *const mod = (ladspa_instance *)Instance; int first_out = mod->ladspa->input_count; int first_param = first_out + mod->ladspa->output_count; int ladspa_port_count = first_param + mod->ladspa->param_count; if ((int)port < first_out) mod->ins[port] = DataLocation; else if ((int)port < first_param) mod->outs[port - first_out] = DataLocation; else if ((int)port < ladspa_port_count) { int i = port - first_param; mod->params[i] = DataLocation; *mod->params[i] = mod->metadata->get_param_props(i)->def_value; } } /// LADSPA deactivate function static void cb_deactivate(LADSPA_Handle Instance) { ((ladspa_instance *)(Instance))->module->deactivate(); } /// LADSPA cleanup (delete instance) function static void cb_cleanup(LADSPA_Handle Instance) { delete ((ladspa_instance *)(Instance)); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // DSSI callbacks #if USE_DSSI /// DSSI "run synth" function, same as run() except it allows for event delivery static void cb_run_synth(LADSPA_Handle Instance, unsigned long SampleCount, snd_seq_event_t *Events, unsigned long EventCount) { ((ladspa_instance *)(Instance))->run_synth(SampleCount, Events, EventCount); } /// DSSI configure function (named properties) static char *cb_configure(LADSPA_Handle Instance, const char *Key, const char *Value) { return ((ladspa_instance *)(Instance))->configure(Key, Value); } /// DSSI get program descriptor function; for 0, it returns the default program (from parameter properties table), for others, it uses global or user preset static const DSSI_Program_Descriptor *cb_get_program(LADSPA_Handle Instance, unsigned long index) { ladspa_plugin_metadata_set *ladspa = ((ladspa_instance *)(Instance))->ladspa; if (index > ladspa->presets->size()) return NULL; if (index) return &(*ladspa->preset_descs)[index - 1]; return &ladspa->dssi_default_program; } /// DSSI select program function; for 0, it sets the defaults, for others, it sets global or user preset static void cb_select_program(LADSPA_Handle Instance, unsigned long Bank, unsigned long Program) { ladspa_instance *mod = (ladspa_instance *)Instance; ladspa_plugin_metadata_set *ladspa = mod->ladspa; unsigned int no = (Bank << 7) + Program - 1; // printf("no = %d presets = %p:%d\n", no, presets, presets->size()); if (no == -1U) { int rpc = ladspa->param_count; for (int i =0 ; i < rpc; i++) *mod->params[i] = mod->metadata->get_param_props(i)->def_value; return; } if (no >= ladspa->presets->size()) return; plugin_preset &p = (*ladspa->presets)[no]; // printf("activating preset %s\n", p.name.c_str()); p.activate(mod); } #endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////// ladspa_plugin_metadata_set::ladspa_plugin_metadata_set() { metadata = NULL; memset(&descriptor, 0, sizeof(descriptor)); #if USE_DSSI presets = NULL; preset_descs = NULL; memset(&descriptor_for_dssi, 0, sizeof(descriptor_for_dssi)); memset(&dssi_descriptor, 0, sizeof(dssi_descriptor)); #endif } void ladspa_plugin_metadata_set::prepare(const plugin_metadata_iface *md, LADSPA_Handle (*cb_instantiate)(const struct _LADSPA_Descriptor * Descriptor, unsigned long sample_rate)) { metadata = md; input_count = md->get_input_count(); output_count = md->get_output_count(); param_count = md->get_param_count(); // XXXKF ladspa_instance::real_param_count(); const ladspa_plugin_info &plugin_info = md->get_plugin_info(); descriptor.UniqueID = plugin_info.unique_id; descriptor.Label = plugin_info.label; descriptor.Name = strdup((std::string(plugin_info.name) + " LADSPA").c_str()); descriptor.Maker = plugin_info.maker; descriptor.Copyright = plugin_info.copyright; descriptor.Properties = md->is_rt_capable() ? LADSPA_PROPERTY_HARD_RT_CAPABLE : 0; descriptor.PortCount = input_count + output_count + param_count; descriptor.PortNames = new char *[descriptor.PortCount]; descriptor.PortDescriptors = new LADSPA_PortDescriptor[descriptor.PortCount]; descriptor.PortRangeHints = new LADSPA_PortRangeHint[descriptor.PortCount]; int i; for (i = 0; i < input_count + output_count; i++) { LADSPA_PortRangeHint &prh = ((LADSPA_PortRangeHint *)descriptor.PortRangeHints)[i]; ((int *)descriptor.PortDescriptors)[i] = i < input_count ? LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO : LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; prh.HintDescriptor = 0; ((const char **)descriptor.PortNames)[i] = md->get_port_names()[i]; } for (; i < input_count + output_count + param_count; i++) { LADSPA_PortRangeHint &prh = ((LADSPA_PortRangeHint *)descriptor.PortRangeHints)[i]; const parameter_properties &pp = *md->get_param_props(i - input_count - output_count); ((int *)descriptor.PortDescriptors)[i] = LADSPA_PORT_CONTROL | (pp.flags & PF_PROP_OUTPUT ? LADSPA_PORT_OUTPUT : LADSPA_PORT_INPUT); prh.HintDescriptor = LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW; ((const char **)descriptor.PortNames)[i] = pp.name; prh.LowerBound = pp.min; prh.UpperBound = pp.max; switch(pp.flags & PF_TYPEMASK) { case PF_BOOL: prh.HintDescriptor |= LADSPA_HINT_TOGGLED; prh.HintDescriptor &= ~(LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW); break; case PF_INT: case PF_ENUM: prh.HintDescriptor |= LADSPA_HINT_INTEGER; break; default: { int defpt = (int)(100 * (pp.def_value - pp.min) / (pp.max - pp.min)); if ((pp.flags & PF_SCALEMASK) == PF_SCALE_LOG) defpt = (int)(100 * log(pp.def_value / pp.min) / log(pp.max / pp.min)); if (defpt < 12) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_MINIMUM; else if (defpt < 37) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_LOW; else if (defpt < 63) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_MIDDLE; else if (defpt < 88) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_HIGH; else prh.HintDescriptor |= LADSPA_HINT_DEFAULT_MAXIMUM; } } if (pp.def_value == 0 || pp.def_value == 1 || pp.def_value == 100 || pp.def_value == 440 ) { prh.HintDescriptor &= ~LADSPA_HINT_DEFAULT_MASK; if (pp.def_value == 1) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_1; else if (pp.def_value == 100) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_100; else if (pp.def_value == 440) prh.HintDescriptor |= LADSPA_HINT_DEFAULT_440; else prh.HintDescriptor |= LADSPA_HINT_DEFAULT_0; } switch(pp.flags & PF_SCALEMASK) { case PF_SCALE_LOG: prh.HintDescriptor |= LADSPA_HINT_LOGARITHMIC; break; } } descriptor.ImplementationData = this; descriptor.instantiate = cb_instantiate; descriptor.connect_port = cb_connect; descriptor.activate = cb_activate; descriptor.run = cb_run; descriptor.run_adding = NULL; descriptor.set_run_adding_gain = NULL; descriptor.deactivate = cb_deactivate; descriptor.cleanup = cb_cleanup; prepare_dssi(); } void ladspa_plugin_metadata_set::prepare_dssi() { #if USE_DSSI const ladspa_plugin_info &plugin_info = metadata->get_plugin_info(); memcpy(&descriptor_for_dssi, &descriptor, sizeof(descriptor)); descriptor_for_dssi.Name = strdup((std::string(plugin_info.name) + " DSSI").c_str()); memset(&dssi_descriptor, 0, sizeof(dssi_descriptor)); dssi_descriptor.DSSI_API_Version = 1; dssi_descriptor.LADSPA_Plugin = &descriptor_for_dssi; dssi_descriptor.configure = cb_configure; dssi_descriptor.get_program = cb_get_program; dssi_descriptor.select_program = cb_select_program; if (metadata->get_midi()) dssi_descriptor.run_synth = cb_run_synth; presets = new std::vector; preset_descs = new std::vector; preset_list plist_tmp, plist; plist.load_defaults(true); plist_tmp.load_defaults(false); plist.presets.insert(plist.presets.end(), plist_tmp.presets.begin(), plist_tmp.presets.end()); // XXXKF this assumes that plugin name in preset is case-insensitive equal to plugin label // if I forget about this, I'll be in a deep trouble dssi_default_program.Bank = 0; dssi_default_program.Program = 0; dssi_default_program.Name = "default"; int pos = 1; for (unsigned int i = 0; i < plist.presets.size(); i++) { plugin_preset &pp = plist.presets[i]; if (strcasecmp(pp.plugin.c_str(), descriptor.Label)) continue; DSSI_Program_Descriptor pd; pd.Bank = pos >> 7; pd.Program = pos++; pd.Name = pp.name.c_str(); preset_descs->push_back(pd); presets->push_back(pp); } #endif } ladspa_plugin_metadata_set::~ladspa_plugin_metadata_set() { delete []descriptor.PortNames; delete []descriptor.PortDescriptors; delete []descriptor.PortRangeHints; #if USE_DSSI if (presets) presets->clear(); if (preset_descs) preset_descs->clear(); delete presets; delete preset_descs; #endif } #endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////// #if USE_LV2 // instantiate descriptor templates template LV2_Descriptor calf_plugins::lv2_wrapper::descriptor; template LV2_Calf_Descriptor calf_plugins::lv2_wrapper::calf_descriptor; template LV2_State_Interface calf_plugins::lv2_wrapper::state_iface; extern "C" { const LV2_Descriptor *lv2_descriptor(uint32_t index) { #define PER_MODULE_ITEM(name, isSynth, jackname) if (!(index--)) return &lv2_wrapper::get().descriptor; #include return NULL; } }; #endif #if USE_LADSPA extern "C" { const LADSPA_Descriptor *ladspa_descriptor(unsigned long Index) { #define PER_MODULE_ITEM(name, isSynth, jackname) if (!isSynth && !(Index--)) return &ladspa_wrapper::get().descriptor; #include return NULL; } }; #if USE_DSSI extern "C" { const DSSI_Descriptor *dssi_descriptor(unsigned long Index) { #define PER_MODULE_ITEM(name, isSynth, jackname) if (!(Index--)) return &calf_plugins::ladspa_wrapper::get().dssi_descriptor; #include return NULL; } }; #endif #endif #if USE_JACK extern "C" { audio_module_iface *create_calf_plugin_by_name(const char *effect_name) { #define PER_MODULE_ITEM(name, isSynth, jackname) if (!strcasecmp(effect_name, jackname)) return new name##_audio_module; #include return NULL; } } #endif lmms-1.1.3/plugins/LadspaEffect/calf/src/synth.cpp000066400000000000000000000144751247673406200220610ustar00rootroot00000000000000/* Calf DSP Library * Generic polyphonic synthesizer framework. * * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include using namespace dsp; using namespace std; void basic_synth::kill_note(int note, int vel, bool just_one) { for (list::iterator it = active_voices.begin(); it != active_voices.end(); it++) { // preserve sostenuto notes if ((*it)->get_current_note() == note && !(sostenuto && (*it)->sostenuto)) { (*it)->note_off(vel); if (just_one) return; } } } dsp::voice *basic_synth::give_voice() { if (active_voices.size() >= polyphony_limit) { dsp::voice *stolen = steal_voice(); if (stolen) return stolen; } if (unused_voices.empty()) return alloc_voice(); else { dsp::voice *v = unused_voices.top(); unused_voices.pop(); v->reset(); return v; } } dsp::voice *basic_synth::steal_voice() { std::list::iterator found = active_voices.end(); float priority = 10000; //int idx = 0; for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); i++) { //printf("Voice %d priority %f at %p\n", idx++, (*i)->get_priority(), *i); if ((*i)->get_priority() < priority) { priority = (*i)->get_priority(); found = i; } } //printf("Found: %p\n\n", *found); if (found == active_voices.end()) return NULL; (*found)->steal(); return NULL; } void basic_synth::trim_voices() { // count stealable voices unsigned int count = 0; for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); i++) { if ((*i)->get_priority() < 10000) count++; } // printf("Count=%d limit=%d\n", count, polyphony_limit); // steal any voices above polyphony limit if (count > polyphony_limit) { for (unsigned int i = 0; i < count - polyphony_limit; i++) steal_voice(); } } void basic_synth::note_on(int note, int vel) { if (!vel) { note_off(note, 0); return; } bool perc = check_percussion(); dsp::voice *v = give_voice(); v->setup(sample_rate); v->released = false; v->sostenuto = false; gate.set(note); v->note_on(note, vel); active_voices.push_back(v); if (perc) { percussion_note_on(note, vel); } } void basic_synth::note_off(int note, int vel) { gate.reset(note); if (!hold) kill_note(note, vel, false); } #define for_all_voices(iter) for (std::list::iterator iter = active_voices.begin(); iter != active_voices.end(); iter++) void basic_synth::on_pedal_release() { for_all_voices(i) { int note = (*i)->get_current_note(); if (note < 0 || note > 127) continue; bool still_held = gate[note]; // sostenuto pedal released if ((*i)->sostenuto && !sostenuto) { // mark note as non-sostenuto (*i)->sostenuto = false; // if key still pressed or hold pedal used, hold the note (as non-sostenuto so it can be released later by releasing the key or pedal) // if key has been released and hold pedal is not depressed, release the note if (!still_held && !hold) (*i)->note_off(127); } else if (!hold && !still_held && !(*i)->released) { (*i)->released = true; (*i)->note_off(127); } } } void basic_synth::control_change(int ctl, int val) { if (ctl == 64) { // HOLD controller bool prev = hold; hold = (val >= 64); if (!hold && prev && !sostenuto) { on_pedal_release(); } } if (ctl == 66) { // SOSTENUTO controller bool prev = sostenuto; sostenuto = (val >= 64); if (sostenuto && !prev) { // SOSTENUTO was pressed - move all notes onto sustain stack for_all_voices(i) { (*i)->sostenuto = true; } } if (!sostenuto && prev) { // SOSTENUTO was released - release all keys which were previously held on_pedal_release(); } } if (ctl == 123 || ctl == 120) { // all notes off, all sounds off if (ctl == 120) { // for "all sounds off", automatically release hold and sostenuto pedal control_change(66, 0); control_change(64, 0); } for_all_voices(i) { if (ctl == 123) (*i)->note_off(127); else (*i)->steal(); } } if (ctl == 121) { control_change(1, 0); control_change(7, 100); control_change(10, 64); control_change(11, 127); // release hold..hold2 for (int i = 64; i <= 69; i++) control_change(i, 0); } } void basic_synth::render_to(float (*output)[2], int nsamples) { // render voices, eliminate ones that aren't sounding anymore for (list::iterator i = active_voices.begin(); i != active_voices.end();) { dsp::voice *v = *i; v->render_to(output, nsamples); if (!v->get_active()) { i = active_voices.erase(i); unused_voices.push(v); continue; } i++; } } basic_synth::~basic_synth() { while(!unused_voices.empty()) { delete unused_voices.top(); unused_voices.pop(); } for (list::iterator i = active_voices.begin(); i != active_voices.end(); i++) delete *i; } lmms-1.1.3/plugins/LadspaEffect/calf/src/utils.cpp000066400000000000000000000073071247673406200220500ustar00rootroot00000000000000/* Calf DSP Library * Various utility functions. * Copyright (C) 2007 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #include #include #include #include using namespace std; using namespace osctl; namespace calf_utils { string encode_map(const dictionary &data) { osctl::string_buffer sb; osc_stream str(sb); str << (uint32_t)data.size(); for(dictionary::const_iterator i = data.begin(); i != data.end(); i++) { str << i->first << i->second; } return sb.data; } void decode_map(dictionary &data, const string &src) { osctl::string_buffer sb(src); osc_stream str(sb); uint32_t count = 0; str >> count; string tmp, tmp2; data.clear(); for (uint32_t i = 0; i < count; i++) { str >> tmp; str >> tmp2; data[tmp] = tmp2; } } std::string xml_escape(const std::string &src) { string dest; for (size_t i = 0; i < src.length(); i++) { // XXXKF take care of string encoding if (src[i] < 0 || src[i] == '"' || src[i] == '<' || src[i] == '>' || src[i] == '&') dest += "&"+i2s((uint8_t)src[i])+";"; else dest += src[i]; } return dest; } std::string to_xml_attr(const std::string &key, const std::string &value) { return " " + key + "=\"" + xml_escape(value) + "\""; } std::string load_file(const std::string &src) { std::string str; FILE *f = fopen(src.c_str(), "rb"); #if 0 if (!f) throw file_exception(src); #endif while(!feof(f)) { char buffer[1024]; size_t len = fread(buffer, 1, sizeof(buffer), f); #if 0 if (len < 0) throw file_exception(src); #endif str += string(buffer, len); } fclose(f); return str; } std::string i2s(int value) { char buf[32]; sprintf(buf, "%d", value); return std::string(buf); } std::string f2s(double value) { stringstream ss; ss << value; return ss.str(); } std::string ff2s(double value) { string s = f2s(value); if (s.find('.') == string::npos) s += ".0"; return s; } std::string indent(const std::string &src, const std::string &indent) { std::string dest; size_t pos = 0; do { size_t epos = src.find("\n", pos); if (epos == string::npos) break; dest += indent + src.substr(pos, epos - pos) + "\n"; pos = epos + 1; } while(pos < src.length()); if (pos < src.length()) dest += indent + src.substr(pos); return dest; } ////////////////////////////////////////////////////////////////////////////////// file_exception::file_exception(const std::string &f) : message(strerror(errno)) , filename(f) , container(filename + ":" + message) { text = container.c_str(); } file_exception::file_exception(const std::string &f, const std::string &t) : message(t) , filename(f) , container(filename + ":" + message) { text = container.c_str(); } } lmms-1.1.3/plugins/LadspaEffect/calf/src/wavetable.cpp000066400000000000000000000465451247673406200226710ustar00rootroot00000000000000/* Calf DSP Library * Example audio modules - wavetable synthesizer * * Copyright (C) 2009 Krzysztof Foltman * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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 */ #include #if ENABLE_EXPERIMENTAL #include #include #include using namespace dsp; using namespace calf_plugins; wavetable_voice::wavetable_voice() { sample_rate = -1; } void wavetable_voice::set_params_ptr(wavetable_audio_module *_parent, int _srate) { parent = _parent; params = parent->params; sample_rate = _srate; } void wavetable_voice::reset() { note = -1; } void wavetable_voice::note_on(int note, int vel) { typedef wavetable_metadata md; this->note = note; velocity = vel / 127.0; amp.set(1.0); for (int i = 0; i < OscCount; i++) { oscs[i].reset(); oscs[i].set_freq(note_to_hz(note, 0), sample_rate); last_oscshift[i] = 0; } int cr = sample_rate / BlockSize; for (int i = 0; i < EnvCount; i++) { envs[i].set(0.01, 0.1, 0.5, 1, cr); envs[i].note_on(); } float modsrc[wavetable_metadata::modsrc_count] = { 1, velocity, parent->inertia_pressure.get_last(), parent->modwheel_value, envs[0].value, envs[1].value, envs[2].value}; parent->calculate_modmatrix(moddest, md::moddest_count, modsrc); calc_derived_dests(); float oscshift[2] = { moddest[md::moddest_o1shift], moddest[md::moddest_o2shift] }; memcpy(last_oscshift, oscshift, sizeof(oscshift)); memcpy(last_oscamp, cur_oscamp, sizeof(cur_oscamp)); } void wavetable_voice::note_off(int vel) { for (int i = 0; i < EnvCount; i++) envs[i].note_off(); } void wavetable_voice::steal() { } void wavetable_voice::render_block() { typedef wavetable_metadata md; const float step = 1.f / BlockSize; float s = 0.001; float scl[EnvCount]; int espc = md::par_eg2attack - md::par_eg1attack; for (int j = 0; j < EnvCount; j++) { int o = j*espc; envs[j].set(*params[md::par_eg1attack + o] * s, *params[md::par_eg1decay + o] * s, *params[md::par_eg1sustain + o], *params[md::par_eg1release + o] * s, sample_rate / BlockSize, *params[md::par_eg1fade + o] * s); scl[j] = dsp::lerp(1.f, velocity, *params[md::par_eg1velscl + o]);; } for (int i = 0; i < EnvCount; i++) envs[i].advance(); float modsrc[wavetable_metadata::modsrc_count] = { 1, velocity, parent->inertia_pressure.get_last(), parent->modwheel_value, envs[0].value, envs[1].value, envs[2].value}; parent->calculate_modmatrix(moddest, md::moddest_count, modsrc); calc_derived_dests(); int ospc = md::par_o2level - md::par_o1level; for (int j = 0; j < OscCount; j++) { oscs[j].tables = parent->tables[(int)*params[md::par_o1wave + j * ospc]]; oscs[j].set_freq(note_to_hz(note, *params[md::par_o1transpose + j * ospc] * 100+ *params[md::par_o1detune + j * ospc] + moddest[md::moddest_o1detune]), sample_rate); } float oscshift[2] = { moddest[md::moddest_o1shift], moddest[md::moddest_o2shift] }; float osstep[2] = { (oscshift[0] - last_oscshift[0]) * step, (oscshift[1] - last_oscshift[1]) * step }; float oastep[2] = { (cur_oscamp[0] - last_oscamp[0]) * step, (cur_oscamp[1] - last_oscamp[1]) * step }; for (int i = 0; i < BlockSize; i++) { float value = 0.f; for (int j = 0; j < OscCount; j++) { float o = last_oscshift[j] * 0.01; value += last_oscamp[j] * oscs[j].get(dsp::clip(fastf2i_drm((o + *params[md::par_o1offset + j * ospc]) * 127.0 * 256), 0, 127 * 256)); last_oscshift[j] += osstep[j]; last_oscamp[j] += oastep[j]; } output_buffer[i][0] = output_buffer[i][1] = value; } if (envs[0].stopped()) released = true; memcpy(last_oscshift, oscshift, sizeof(oscshift)); memcpy(last_oscamp, cur_oscamp, sizeof(cur_oscamp)); } ///////////////////////////////////////////////////////////////////////////////////////////////////// static inline float sincl(float x, float clip) { if (fabs(x) > clip) return 0; return sin(M_PI * x); } static inline float blip(float x, float center, float range) { if (x < center - range || x > center + range) return 0; return 1 - fabs(x - center)/range; } static void interpolate_wt(int16_t table[129][256], int step) { for (int i = 0; i < 128; i++) { if (!(i % step)) continue; int prev = i - i % step; int next = prev + step; for (int j = 0; j < 256; j++) { table[i][j] = table[prev][j] + (i - prev) * (table[next][j] - table[prev][j]) / step; } } } wavetable_audio_module::wavetable_audio_module() : mod_matrix_impl(mod_matrix_data, &mm_metadata) , inertia_cutoff(1) , inertia_pitchbend(1) , inertia_pressure(64) { panic_flag = false; modwheel_value = 0.; for (int i = 0; i < 129; i += 8) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; int harm = 1 + 2 * (i / 8); float ii = i / 128.0; float rezo1 = sin(harm * ph) * sin(ph); float rezo2 = sin((harm+1) * ph) * sin(ph * 2); float rezo3 = sin((harm+3) * ph) * sin(ph * 4); float rezo = (rezo1 + rezo2 + rezo3) / 3; float v = (sin (ph) + ii * ii * rezo) / 2; tables[0][i][j] = 32767 * v; } } interpolate_wt(tables[0], 8); for (int i = 0; i < 129; i += 4) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; int harm = 1 + (i / 4); float ii = i / 128.0; float h = sin(harm * ph); float rezo1 = h * sin(ph); float rezo2 = h * sin(ph * 2)/2; float rezo3 = h * sin(ph * 3)/3; float rezo4 = h * sin(ph * 4)/4; float rezo5 = h * sin(ph * 5)/5; float rezo = (rezo1 + rezo2 + rezo3 + rezo4 + rezo5) / 3; float v = sin (ph + ii * rezo); tables[1][i][j] = 32767 * v; } } interpolate_wt(tables[1], 4); for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = (i & ~3) / 128.0; float ii2 = ((i & ~3) + 4) / 128.0; float peak = (32 * ii); float rezo1 = sin(floor(peak) * ph); float rezo2 = sin(floor(peak + 1) * ph); float widener = (0.5 + 0.3 * sin(ph) + 0.2 * sin (3 * ph)); float v1 = 0.5 * sin (ph) + 0.5 * ii * ii * rezo1 * widener; float v2 = 0.5 * sin (ph) + 0.5 * ii2 * ii2 * rezo2 * widener; tables[wavetable_metadata::wt_rezo][i][j] = 32767 * lerp(v1, v2, (i & 3) / 4.0); } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 6 * ii * ii * sin(6 * ph)) + ii * ii * ii * ii * sin(ph + 11 * ii * ii * ii * ii * sin(11 * ph))) / 4; tables[wavetable_metadata::wt_metal][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * sin(5 * ph - 5 * ii * ii * ii * ii * sin(11 * ph))) / 3; tables[wavetable_metadata::wt_bell][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; //float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 3 * ii * ii * sin(3 * ph)) + ii * ii * ii * sin(ph + 5 * ii * ii * ii * sin(5 * ph))) / 4; float v = (sin(ph) + sin(ph - 3 * sin(ii * 5 - 2) * sin(ph)) + sin(ii * 4 - 1.3) * sin(5 * ph + 3 * ii * ii * sin(6 * ph))) / 3; tables[wavetable_metadata::wt_blah][i][j] = 32767 * v; } } for (int i = 0; i < 256; i++) { tables[wavetable_metadata::wt_pluck][128][i] = (i < 128) ? 32000 * fabs(sin(i / 32.0 * M_PI) * sin(i / 13.0 * M_PI) * sin(i / 19.0 * M_PI)) : 0; } for (int i = 127; i >= 0; i--) { int16_t *parent = tables[wavetable_metadata::wt_pluck][i + 1]; float damp = 0.05; for (int j = 0; j < 256; j++) { tables[wavetable_metadata::wt_pluck][i][j] = (1 - 2*damp) * parent[j] + damp * parent[(j+1)&255] + damp * parent[(j+2)&255];// + 0.1 * parent[(j-1)&255]+ 0.1 * parent[(j-2)&255]; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j / 128.0 - 1.0; float ii = i / 128.0; float v = sincl(ph * (1 + 15 * ii), 1); tables[wavetable_metadata::wt_stretch][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j / 128.0 - 1.0; float ii = i / 128.0; float v = sincl(ph * (1 + 15 * ii), 4) * sincl(j / 256.0, 1); tables[wavetable_metadata::wt_stretch2][i][j] = 32000 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j / 128.0 - 1.0; float ii = i / 128.0; float w = sincl(ph * (1 + 15 * ii), 4); float v = pow(w, 9) * sincl(j / 256.0, 1); tables[wavetable_metadata::wt_hardsync][i][j] = 32000 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j / 128.0 - 1.0; float ii = i / 128.0; float w = sincl(ph * (1 + 31 * ii), 3); float v = pow(w, 5) * sincl(j / 256.0, 1); tables[wavetable_metadata::wt_hardsync2][i][j] = 32000 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j / 128.0 - 1.0; float ii = i / 128.0; float w = sincl(ph * ph * (1 + 15 * ii), 2); float v = pow(w, 4) * sincl(j / 256.0, 1); tables[wavetable_metadata::wt_softsync][i][j] = 32000 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * ii * sin(7 * ph - 2 * ii * ii * ii * ii * sin(13 * ph))) / 3; tables[wavetable_metadata::wt_bell2][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * ii * sin(9 * ph - ii * ii * sin(11 * ph))) / 3; tables[wavetable_metadata::wt_bell3][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float v = (sin(ph + ii * sin(ph - 3 * ii * sin(ph) + ii * ii * ii * sin(5 * ph - ii * ii * sin(7 * ph))))); tables[wavetable_metadata::wt_tine][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float v = (sin(ph + ii * sin(ph - 2 * ii * sin(ph) + ii * ii * ii * sin(3 * ph - ii * ii * sin(4 * ph))))); tables[wavetable_metadata::wt_tine2][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ph2 = j / 128.0 - 1; float ii = i / 128.0; float w = sincl(ph2 * (1 + 7 * ii * ii), 4) * pow(sincl(j / 256.0, 1), 2); float v = sin(ph + ii * sin(ph - 2 * ii * w)); tables[wavetable_metadata::wt_clav][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ph2 = j / 128.0 - 1; float ii = i / 128.0; float w = sincl(ph2 * (1 + 7 * ii * ii), 6) * sincl(j / 256.0, 1); float v = sin(ph + ii * sin(3 * ph - 2 * ii * w)); tables[wavetable_metadata::wt_clav2][i][j] = 32767 * v; } } /* for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ph2 = j / 128.0 - 1; float ii = i / 128.0; float w = sincl(ph2 * (1 + 7 * ii * ii), 6) * pow(sincl(j / 256.0, 1), 1); float v = sin(ph + ii * ii * ii * sin(3 * ph - ii * ii * ii * w)); tables[wavetable_metadata::wt_gtr][i][j] = 32767 * v; } } */ for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float ii2 = ii; float w = pow(sincl(j / 256.0, 1), 1); float v = sin(ph + ii2 * ii2 * ii2 * sin(3 * ph - ii2 * ii2 * ii2 * w * sin(ph + sin(3 * ph) + ii * sin(11 * ph) + ii * ii * sin(25 * ph)))); tables[wavetable_metadata::wt_gtr][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float ii2 = dsp::clip(ii - 0.5, 0.0, 1.0); float w = pow(sincl(j / 256.0, 1), 1); float v = sin(ph + ii * ii * ii * sin(3 * ph - ii * ii * ii * w * sin(ph + sin(3 * ph + ii2 * sin(13 * ph))))); tables[wavetable_metadata::wt_gtr2][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float ii2 = dsp::clip(2 * (ii - 0.5), 0.0, 1.0); //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1); float w = pow(sincl(j / 256.0, 1), 1); float v = sin(ph + ii * sin(3 * ph - ii * w * sin(ph + sin(3 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(4 * ph)))))); tables[wavetable_metadata::wt_gtr3][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float ii2 = dsp::clip(2 * (ii - 0.5), 0.0, 1.0); //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1); float w = pow(sincl(j / 256.0, 1), 1); float v = sin(ph + ii * sin(3 * ph - ii * w * sin(2 * ph + sin(5 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(4 * ph)))))); tables[wavetable_metadata::wt_gtr4][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float ii2 = dsp::clip((ii - 0.25)/0.75, 0.0, 1.0); //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1); float w = pow(sincl(j / 256.0, 1), 3); float v = sin(ph + (ii + 0.05) * sin(3 * ph - 2 * ii * w * sin(5 * ph + sin(7 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(11 * ph)))))); tables[wavetable_metadata::wt_gtr5][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float w = pow(sincl(2 * (j / 256.0), 2), 3); float v = sin(ph + (ii + 0.05) * sin(7 * ph - 2 * ii * w * sin(11 * ph))); tables[wavetable_metadata::wt_reed][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float ii2 = dsp::clip((ii - 0.25)/0.75, 0.0, 1.0); float ii3 = dsp::clip((ii - 0.5)/0.5, 0.0, 1.0); float v = sin(ph + (ii + 0.05) * sin(ii * sin(2 * ph) - 2 * ii2 * sin(2 * ph + ii2 * sin(3 * ph)) + 3 * ii3 * sin(3 * ph))); tables[wavetable_metadata::wt_reed2][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float mod = 0; for (int k = 0; k < 13; k++) { mod += blip(i, k * 10, 30) * sin (ph * (5 + 3 * k) + ii * cos(ph * (2 + 2 * k))); } float v = sin(ph + ii * mod); tables[wavetable_metadata::wt_silver][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float mod = 0; for (int k = 0; k < 16; k++) { mod += 2 * blip(i, k * 8, k * 4 + 10) * cos (ph * (k + 1)); } float v = sin(ph + ii * mod); tables[wavetable_metadata::wt_brass][i][j] = 32767 * v; } } for (int i = 0; i < 129; i++) { for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float ii = i / 128.0; float mod = 0; for (int k = 0; k < 16; k++) { mod += 2 * blip(i, k * 8, 16) * cos (ph * (2 * k + 1)); } float v = (sin(ph + ii * mod) + ii * sin(2 * ph + ii * mod)) / 2; tables[wavetable_metadata::wt_multi][i][j] = 32767 * v; } } for (int i = 0; i < 129; i ++) { float h = 1 + i / 16.0; for (int j = 0; j < 256; j++) { float ph = j * 2 * M_PI / 256; float v = sin(ph), tv = 1; for (int k = 1; k < 24; k++) { float amp = blip(i, k * 6, 20) / k; v += amp * sin((k + 1) * ph + h * sin(ph)); tv += amp; } tables[wavetable_metadata::wt_multi2][i][j] = 32767 * v / tv; } } } void wavetable_audio_module::channel_pressure(int /*channel*/, int value) { inertia_pressure.set_inertia(value * (1.0 / 127.0)); } #endif lmms-1.1.3/plugins/LadspaEffect/caps/000077500000000000000000000000001247673406200174275ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/caps/Amp.cc000066400000000000000000000316031247673406200204560ustar00rootroot00000000000000/* Amp.cc Copyright 2003-7 Tim Goetze David Yeh (Tone Stack in TS models) http://quitte.de/dsp/ Tube amplifier models */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include #include "Amp.h" #include "Descriptor.h" void AmpStub::init (bool adjust_downsampler) { dc_blocker.set_f (10. / fs); /* going a bit lower than nominal with fc */ double f = .7 * M_PI / OVERSAMPLE; /* construct the upsampler filter kernel */ DSP::sinc (f, up.c, FIR_SIZE); DSP::kaiser (up.c, FIR_SIZE, 6.4); /* copy upsampler filter kernel for downsampler, make sum */ double s = 0; for (int i = 0; i < up.n; ++i) down.c[i] = up.c[i], s += up.c[i]; s = 1 / s; /* scale downsampler kernel for unity gain + correction for transfer */ double t = adjust_downsampler ? s / max (fabs (tube.clip[0].value), fabs (tube.clip[1].value)) : s; for (int i = 0; i < down.n; ++i) down.c[i] *= t; /* scale upsampler kernel for unity gain */ s *= OVERSAMPLE; for (int i = 0; i < up.n; ++i) up.c[i] *= s; } /* //////////////////////////////////////////////////////////////////////// */ void AmpIII::init() { this->AmpStub::init (false); /* need to filter out dc before the power amp stage, which is running at * the oversampled rate */ dc_blocker.set_f (10. / (fs * OVERSAMPLE)); DSP::RBJ::LoShelve (200 / fs, .2, -3, filter.a, filter.b); } template void AmpIII::one_cycle (int frames) { sample_t * s = ports[0]; sample_t gain = getport(1); sample_t temp = getport(2) * tube.scale; drive = getport(3) * .5; i_drive = 1 / (1 - drive); sample_t * d = ports[4]; *ports[5] = OVERSAMPLE; double g = current.g; current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); current.g *= tube.scale / fabs (tube.transfer (temp)); /* recursive fade to prevent zipper noise from the 'gain' knob */ if (g == 0) g = current.g; double one_over_n = frames > 0 ? 1. / frames : 1; double gf = pow (current.g / g, one_over_n); for (int i = 0; i < frames; ++i) { register sample_t a = s[i]; a = g * tube.transfer (a * temp); a = filter.process (a + normal); a = tube.transfer_clip (up.upsample (a)); a = power_transfer (dc_blocker.process (a)); a = down.process (a); for (int o = 1; o < OVERSAMPLE; ++o) down.store ( power_transfer ( dc_blocker.process ( normal + tube.transfer_clip (up.pad (o))))); F (d, i, a, adding_gain); g *= gf; } current.g = g; } /* //////////////////////////////////////////////////////////////////////// */ PortInfo AmpIII::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 10} }, { "temperature", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.005, 1} }, { "drive", INPUT | CONTROL, {BOUNDED | DEFAULT_MAX, 0.0001, 1} /* ^2 gives the nice drive */ }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 1786; Label = "AmpIII"; Properties = HARD_RT; Name = CAPS "AmpIII - Tube amp"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void AmpIV::init() { this->AmpStub::init (false); /* need to filter out dc before the power amp stage, which is running at * the oversampled rate */ dc_blocker.set_f (10. / (fs * OVERSAMPLE)); tone.init (fs); } template void AmpIV::one_cycle (int frames) { double one_over_n = frames > 0 ? 1. / frames : 1; sample_t * s = ports[0]; sample_t gain = getport(1); sample_t temp = getport(2) * tube.scale; tone.start_cycle (ports + 3, one_over_n); drive = getport(7) * .5; i_drive = 1 / (1 - drive); sample_t * d = ports[8]; *ports[9] = OVERSAMPLE; double g = current.g; current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); current.g *= tube.scale / fabs (tube.transfer (temp)); /* recursive fade to prevent zipper noise from the 'gain' knob */ if (g == 0) g = current.g; double gf = pow (current.g / g, one_over_n); for (int i = 0; i < frames; ++i) { register sample_t a = s[i] + normal; a = g * tube.transfer (a * temp); a = tone.process (a); a = tube.transfer_clip (up.upsample (a)); a = power_transfer (dc_blocker.process (a)); a = down.process (a); for (int o = 1; o < OVERSAMPLE; ++o) down.store ( power_transfer ( dc_blocker.process ( normal + tube.transfer_clip (up.pad (o))))); F (d, i, a, adding_gain); g *= gf; } current.g = g; } /* //////////////////////////////////////////////////////////////////////// */ PortInfo AmpIV::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 10} }, { "temperature", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.005, 1} }, { "bass", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "mid", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "treble", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "hi", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "drive", INPUT | CONTROL, {BOUNDED | DEFAULT_MAX, 0.0001, 1} /* ^2 gives the nice drive */ }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 1794; Label = "AmpIV"; Properties = HARD_RT; Name = CAPS "AmpIV - Tube amp + tone controls"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void AmpV::init() { this->AmpStub::init (false); /* need to filter out dc before the power amp stage, which is running at * the oversampled rate */ dc_blocker.set_f (10. / (fs * OVERSAMPLE)); DSP::RBJ::LoShelve (210. / fs, .2, -1, filter[0].a, filter[0].b); DSP::RBJ::LoShelve (4200. / fs, 1.2, +6, filter[1].a, filter[1].b); DSP::RBJ::LoShelve (420. / fs, .2, +2, filter[2].a, filter[2].b); /* power supply cap */ for (int i = 0; i < 2; ++i) DSP::RBJ::LP (10. / fs, .3, power_cap[i].a, power_cap[i].b); } template void AmpV::one_cycle (int frames) { sample_t * s = ports[0]; sample_t gain = getport(1); if (*ports[2] != cut) { cut = getport(2); DSP::RBJ::LoShelve (210. / fs, .2, cut, filter[0].a, filter[0].b); } if (*ports[3] != tone) { tone = getport(3); double f = tone * tone * 8400 + 420; double q = tone * .4 + .2; double db = tone * 2 + 2; DSP::RBJ::LoShelve (f / fs, q, db, filter[2].a, filter[2].b); } drive = getport(4) * .5; i_drive = 1 / (1 - drive); #define MAX_WATTS port_info[5].range.UpperBound sample_t sag = (MAX_WATTS - getport(5)) / MAX_WATTS; sag = .6 * sag * sag; sample_t * d = ports[6]; *ports[7] = OVERSAMPLE; double g = current.g; current.g = max (gain < 1 ? gain : pow (20, gain - 1), .000001); #if 0 if (++_turn & 127) == 0) fprintf (stderr, "supply = %.3f sag = %.3f\n", supply, sag); #endif if (g == 0) g = current.g; /* recursive fade to prevent zipper noise from the 'gain' knob */ double one_over_n = frames > 0 ? 1. / frames : 1; double gf = pow (current.g / g, one_over_n); for (int i = 0; i < frames; ++i) { register sample_t a = s[i]; register sample_t v = 3 - supply; /* alternative curve: v = v * v * .1 + .1; */ v = v * v * .06 + .46; a = filter[0].process (a + normal); if (0) a = filter[2].process (a); a = g * (a + supply * .001); a = v * tube.transfer_clip (up.upsample (a)); a = power_transfer (dc_blocker.process (a)); a = down.process (a); a = filter[1].process (a - normal); if (1) a = filter[2].process (a + normal); { for (int o = 1; o < OVERSAMPLE; ++o) down.store ( power_transfer ( dc_blocker.process ( normal + tube.transfer_clip ( up.pad (o))))); } F (d, i, a, adding_gain); /* integrate for an approximation of cumulative output power */ supply += sag * fabs (a) + normal; /* filter integrated power consumption */ for (int j = 0; j < 2; ++j) supply = 0.9 * (power_cap[j].process (supply)); g *= gf; normal = -normal; } current.g = g; } /* //////////////////////////////////////////////////////////////////////// */ PortInfo AmpV::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 3} }, { "bass", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -9, 9} }, { "tone", INPUT | CONTROL, {BOUNDED | DEFAULT_MIN, 0, 1} }, { "drive", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0.0001, 1} /* ^2 gives the nice drive */ }, { "watts", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 5, 150} }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 2587; Label = "AmpV"; Properties = HARD_RT; Name = CAPS "AmpV - Tube amp"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void AmpVTS::init() { this->AmpStub::init (false); /* need to filter out dc before the power amp stage, which is running at * the oversampled rate */ dc_blocker.set_f (10. / (fs * OVERSAMPLE)); /* power supply capacitance */ for (int i = 0; i < 2; ++i) DSP::RBJ::LP (10. / fs, .3, power_cap[i].a, power_cap[i].b); tonestack.init (fs); } template void AmpVTS::one_cycle (int frames) { sample_t * s = ports[0]; tonestack.start_cycle (ports + 1, 2); sample_t gain = getport(2); drive = getport(6) * .5; i_drive = 1 / (1 - drive); sample_t sag = 1 - max (0.0001, min (1, getport(7))); sag = .6 * sag * sag; /* map to log space makes slider better */ sample_t * d = ports[8]; *ports[9] = OVERSAMPLE; double g = current.g; if (gain < 1) current.g = max (gain, .001); else { gain -= 1; gain *= gain; current.g = pow (10, gain); } /* recursive fade to prevent zipper noise from the 'gain' knob */ double one_over_n = frames > 0 ? 1. / frames : 1; double gf = pow (current.g / g, one_over_n); for (int i = 0; i < frames; ++i) { register double a = s[i]; register double v = 3 - supply; v = v * v * .06 + .46; a = tube.transfer (a); a = tonestack.process (a + normal); a = g * (a + supply * .001); a = v * tube.transfer_clip (up.upsample (a)); a = power_transfer (dc_blocker.process (a)); a = down.process (a); { for (int o = 1; o < OVERSAMPLE; ++o) down.store ( power_transfer ( dc_blocker.process ( normal + tube.transfer_clip ( up.pad (o))))); } F (d, i, a, adding_gain); /* integrate for an approximation of cumulative output power */ supply += sag * fabs (a) + normal; /* filter integrated power consumption */ for (int j = 0; j < 2; ++j) supply = 0.9 * (power_cap[j].process (supply + normal)); g *= gf; normal = -normal; } current.g = g; } /* //////////////////////////////////////////////////////////////////////// */ PortInfo AmpVTS::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "model", INPUT | CONTROL, {BOUNDED | DEFAULT_0 | INTEGER, 0, 5} /* no way to set dyn at compile t */ }, { "gain", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, 3} }, { "bass", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "mid", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "treble", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, 1} }, { "drive", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.0001, 1} }, { "watts", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0.0001, 1} }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 2592; Label = "AmpVTS"; Properties = HARD_RT; Name = CAPS "AmpVTS - Tube amp + Tone stack"; Maker = "David Yeh & Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Amp.h000066400000000000000000000150521247673406200203200ustar00rootroot00000000000000/* Amp.h Copyright 2002-9 Tim Goetze http://quitte.de/dsp/ Oversampled tube amplifier emulation. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _AMP_H_ #define _AMP_H_ #include "dsp/util.h" #include "dsp/OnePole.h" #include "dsp/BiQuad.h" #include "dsp/TwelveAX7.h" #include "dsp/Roessler.h" #include "dsp/FIR.h" #include "dsp/sinc.h" #include "dsp/windows.h" #include "dsp/RBJ.h" #include "dsp/Eq.h" #include "dsp/ToneStack.h" class AmpStub : public Plugin { public: DSP::TwelveAX7_3 tube; sample_t drive, i_drive; struct { /* gain (remember current setting and fade to port setting in run) */ double g; /* should also do this for temperature to remove another potential * source of zippering, but that would be overkill, at the cost of * at least one pow() per block. */ } current; /* input is hipass-filtered first */ DSP::OnePoleHP dc_blocker; enum { OVERSAMPLE = 8, FIR_SIZE = 64, }; /* antialias filters */ DSP::FIRUpsampler up; DSP::FIR down; AmpStub() : up (FIR_SIZE, OVERSAMPLE), down (FIR_SIZE, up.c) { } void init (bool adjust_downsampler = false); inline sample_t power_transfer (sample_t a) { return i_drive * (a - drive * fabs (a) * a); } }; /* /////////////////////////////////////////////////////////////////////// */ class PreampIII : public AmpStub { public: template void one_cycle (int frames); DSP::BiQuad filter; public: static PortInfo port_info[]; sample_t adding_gain; void init(); void activate() { current.g = 1; filter.reset(); up.reset(); down.reset(); dc_blocker.reset(); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class AmpIII : public AmpStub { public: template void one_cycle (int frames); DSP::BiQuad filter; public: static PortInfo port_info[]; sample_t adding_gain; void init(); void activate() { current.g = 1; up.reset(); down.reset(); dc_blocker.reset(); filter.reset(); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ typedef struct {float center, Q, adjust;} PreampBand; class ToneControls { public: sample_t eq_gain[4]; DSP::Eq<4> eq; static PreampBand bands[4]; public: void init (double _fs); void activate (sample_t **); inline void start_cycle (sample_t ** ports, double one_over_n) { for (int i = 0; i < 4; ++i) { if (*ports[i] == eq_gain[i]) { eq.gf[i] = 1; continue; } eq_gain[i] = *ports [i]; double want = get_band_gain (i, eq_gain[i]); eq.gf[i] = pow (want / eq.gain[i], one_over_n); } } double get_band_gain (int i, double g); void set_band_gain (int i, float g); inline sample_t process (sample_t x) { return eq.process (x); } }; /* /////////////////////////////////////////////////////////////////////// */ class PreampIV : public PreampIII { public: ToneControls tone; template void one_cycle (int frames); public: static PortInfo port_info[]; sample_t adding_gain; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class AmpIV : public AmpStub { public: ToneControls tone; template void one_cycle (int frames); public: static PortInfo port_info[]; sample_t adding_gain; void init(); void activate() { current.g = 1; tone.activate (ports + 3); up.reset(); down.reset(); dc_blocker.reset(); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class AmpV : public AmpStub { public: template void one_cycle (int frames); DSP::BiQuad filter[3]; sample_t cut, tone; /* supply voltage sag */ sample_t supply; DSP::BiQuad power_cap[2]; public: static PortInfo port_info[]; sample_t adding_gain; void init(); void activate() { current.g = 1; for (int i = 0; i < 2; ++i) filter[i].reset(), power_cap[i].reset(); up.reset(); down.reset(); dc_blocker.reset(); cut = 2; supply = 0.; tone = -1; /* causes initialisation of the filter at first cycle */ } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class AmpVTS : public AmpStub { public: DSP::ToneStack tonestack; template void one_cycle (int frames); sample_t cut, tone; /* supply voltage sag */ sample_t supply; DSP::BiQuad power_cap[2]; public: static PortInfo port_info[]; sample_t adding_gain; void init(); void activate() { current.g = 1; for (int i = 0; i < 2; ++i) power_cap[i].reset(); up.reset(); down.reset(); dc_blocker.reset(); cut = 2; supply = 0.; } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _AMP_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/CHANGES000066400000000000000000000176241247673406200204340ustar00rootroot000000000000000.4.5 * Narrower plugin added * fixed 'configure.py' to work with python3 * fixed Sin, Roessler and Lorenz gain smoothing on activation 0.4.4 0.4.3 * basics.h cleanup / comments * minor Makefile cleanup * comment cosmetics * Eq and Eq2x2 per-band Q changed to 1.414 (= 1 octave) * Eq lowest band default value fixed to read 0 * Niclas' fix for the bessel function implemented * uninitialised plugin states eliminated thanks to Damon * linker options for OSX added to the Makefile 0.4.2 * fixed the 'model' port index for AmpVTS in the RDF generator 0.4.1 * cleaned up Eq.h and Eq.cc (many g++ versions choke on the unused code there) * changed -O3 to -O2 in the g++ invocation 0.4.0 * ToneStack plugins, by David Yeh * AmpV + Tone stack plugin, employing David Yeh's fine work * comment cosmetics * Amp* denormal protection fixed (or is it, Dave? ;) * minor code cleanup in Amp.cc * caps.rdf updated with plugin categories (thanks to Paul Winkler) * caps.rdf Cabinet* RDF preset labels renamed * AutoWah plugin * DSP::RMS reworked, may affect Compress plugin * DSP::Eq reworked for double precision and denormal protection * ./configure.py checks SSE availability * in case of SSE math denormal flush to zero activated for all plugins * all plugins renamed C* .. instead of CAPS: .. * Eq modified to play nice with ardour * Eq2x2 * introduced the Plugin base class, collecting common traits (normal etc) * getport() -- read access to control ports which is clamped to port bounds and maps inf and nan to 0 as well * all LADSPA_HINT_SAMPLE_RATE ports changed to *_LOGARITHMIC because of broken implementations (no surprise given the vagueness of ladspa.h regarding this matter) -- this means changed default parameters of the affected ports, too * VCO* "latency" output ports removed * actual activate() call is deferred to first run() after activate() in order to prevent inadvertent parameter smoothing sweeps during the first block of audio after activation, this should fix all problems with ardour (except those caused by denormals or invalid audio input) * caps.rdf installed by 'make install' * fixed a bug in tools/make-ps.py that caused the spectrum plots to be inaccurate for multi-channel plugins 0.3.0 * TwelveAX7_3 changed to clip slightly early in the upper lobe * Scape plugin added * plugin names rewritten, prefixed with "CAPS:" * new ChorusII, StereoChorusII plugins * Chorus, StereoChorus relabeled, appended 'I' suffix * new PhaserII plugin (great stuff if I may say so) * Phaser relabeled, appended 'I' suffix * new AmpV plugin, based on AmpIII, emulates compression and distortion modulation through power supply shortcomings, plus lots of fine-tuning and an additional biquad. We're getting there! * all Preamp and Amp models fitted with a new 12AX7 model, linear interpolation of a sample table obtained from spice simulation 0.2.4 * feedback default reverted to 0 for the Chorus units * fixed Cabinet to switch to correct gain at 'model' control change * fixed 'model' control in Cabinet to work with a broader range of hosts * Cabinet name changed to CabinetI * CabinetII plugin: Cabinet with 32nd order IIR filters, more fidelity to the original frequency responses, supplied coefficients for 4 of the most used sample rates * applied the gcc-4 enabling patch * SweepVF renamed to SweepVFI * new SweepVFII plugin, variant of SweepVFI with Q modulated by a second Lorenz fractal * dsp/exp2 dumped in favour of libm's exp2(3) 0.2.3 * StereoChorus denormal protection made functional (Thanks again to S. Savolainen) * Phaser denormal protected 0.2.2 * Build was _not_ fixed for g++-4.0. * AmpIV gain control restored to operate as expected * Chorus/StereoChorus denormal protection (thanks to S. Savolainen) * a few cosmetic changes elsewhere 0.2.1 * Build fixed for g++-4.0, PPC and AMD64 (Thanks to Niklas Werner, Andreas Jochens and Mario Lang) * Reverb.* cosmetics * AmpIV tone controls moved to after initial tube transfer 0.2.0 * denormal protection for Preamp*, Amp* * Capitalized plugin Names * PDF now lists audio in- and outputs as well as control inputs, only gives average CPU rating * AmpIV: PreampIV + power amp stage * Plate2x2: Plate with 2-in, 2-out audio routing * Plate damping and bandwidth controls changed to map to filter fc, fixes behaviour in hosts that handle the log hint incorrectly 0.1.13 * AmpIII activate() resets the boost filter 0.1.12 * PreampIV band controls fixed to operate as expected 0.1.11 * amps changed back to old tube model :) but new temp & gain behaviour stays * SweepVF, AmpIII default value adjustments 0.1.10 * HRTF recursion runs in doubles * Cabinet recursion runs in doubles for much clearer sound * all amps fitted with a common tube voltage mapping, dsp/TwelveAX7.h * all amps: temperature and gain controls changed slightly * all amps declared in one common Amp.h * Pan echo fixed to be filtered independent of sample rate * Cabinet cosmetics and activate() from port values fix * SweepVF fixed to activate() from the current control settings * rid all *amp* plugins of the initial hi-pass, not needed anymore * PreampIII and AmpIII more authentic with an rbj lo-shelve, +6 dB > 1.2 kHz as hinted by circuit analysis * something_random() removed, stdlib for random generation 0.1.9 * Pan plugin * 'make depend' instead of 'make dep', uses $(CC) -MM instead of 'makedepend' * *Chorus, AmpIII, Plate defaults changed * *Chorus optimizations, reintroduces funny zipper noise when 'feedback' is non-zero and 't' is changed * experimental HRTF plugin * Plate 'blend' goes all the way to wet output only * dsp/White offers a get_31() method for reduced number of bitshifts needed * *Chorus delay line tapping changed to employ cubic interpolation, sounds better * SweepVF modulation mix algorithm changed to clamp if over-fed, makes for wider sweeps 0.1.8 * all oversampling plugins use Kaiser windows instead of Blackman-Harris, for much better performance * SweepVF modulation range slightly increased * Cabinet filter loop cosmetics (slight speedup) * new AmpIII Plugin: Preamp plus power amp emulation * lowered NOISE_FLOOR (equals 'renormal' number) 0.1.7 * connect ports to lower bound on instantiate() * Plate delay line lengths raised, sound changed * Eq activate() fixed to initialize from the current settings * Preamp* cutoff reverted to 0.1.3 setting, thanks to Ben Saylor for testing * old IIR-based Preamp cleaned from the sources * zipper-noise in *Chorus units for t changes with feedback > 0 eliminated * all plugin constructor code moved to init() calls 0.1.6 * SweepVF modulation mix algorithm changed to maintain proportion, not absolute value if x + y + z > 1, for better control * create $(DEST) directory on make install, pointed out by Daniel James 0.1.5 * fixed delay line length miscalculation in ModLattice 0.1.4 * SweepVF modulation source can be mixed now * latency port for VCO* * Lorenz and Roessler get x, y, z mixing knobs * PreampIV eq bands slightly tuned and coefficients moved into common struct * Preamp*, VCO* downsampler filter cutoff lowered * Clip downsampler filter cutoff lowered * nonsensical audio output bounds removed * simplified VCO* implementation * JVRev rewritten for code clarity (funny enough, it also got quicker) * fixed JVRev to reset its history on activate() * added purpose, copyright and licensing information to all (i think) files. * HACKING file * CHANGES file 0.1.3 * fixed all compilation problems with gcc 3.3, with the patient help of the lad mailing list community * dsp/Eq.h SSE assembler code had to go (gcc > 3 doesn't like multi-line asm, and efficiency and even reliability go down if we allow gcc to intersperse its 'optimization' code with our asm) 0.1.2 * fixed more compilation problems with gcc >= 3.0 0.1.1 * tried to (but didn't really) fix compilation problem with ladspa.h 0.1.0 * initial release lmms-1.1.3/plugins/LadspaEffect/caps/CMakeLists.txt000066400000000000000000000014711247673406200221720ustar00rootroot00000000000000INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") FILE(GLOB SOURCES *.cc) ADD_LIBRARY(caps MODULE ${SOURCES}) INSTALL(TARGETS caps LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") IF(LMMS_BUILD_WIN64) ADD_DEFINITIONS(-DLMMS_BUILD_WIN64) ENDIF(LMMS_BUILD_WIN64) SET_TARGET_PROPERTIES(caps PROPERTIES PREFIX "") SET_TARGET_PROPERTIES(caps PROPERTIES COMPILE_FLAGS "-O2 -funroll-loops -Wno-write-strings") IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET caps POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/caps.dll\"") ENDIF(LMMS_BUILD_WIN32) IF(NOT LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") ENDIF(NOT LMMS_BUILD_APPLE) IF(LMMS_BUILD_LINUX) SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") ENDIF(LMMS_BUILD_LINUX) lmms-1.1.3/plugins/LadspaEffect/caps/Cabinet-Models32.h000066400000000000000000001020561247673406200225370ustar00rootroot00000000000000/* Cabinet-Models32.h Copyright 2005 Tim Goetze http://quitte.de/dsp/ Coefficients for 32nd order IIR filters modeling the frequency responses of a few select instrument amplifier speaker boxes. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ Model32 CabinetII::models44100 [] = { { 1, /* identity */ {1}, {0}, 0.2500 }, { 32, /* matchless_off */ {0.751133877447, 0.476665652568, 0.232649157621, 0.073490164573, -0.0520549100755, -0.121257530713, -0.100197130001, -0.0412212505538, 0.0304188276576, 0.0756296082021, 0.0339966964433, -0.0188218345374, -0.0138445066369, 0.0213454687998, 0.0509702380835, 0.0734535180348, 0.0423999627069, 0.0153810625747, 0.0251173605116, 0.0231247294211, 0.0118254107717, 0.0397159715652, 0.0509631315658, 0.0289647310658, -0.0151415828019, -0.0678734405803, -0.093244908543, -0.066522401653, -0.0390777734265, -0.0206522167345, -0.0140462622686, -0.000367155236373}, {0.0, 0.582601584085, 0.179375009603, -0.0310635155569, -0.115346798496, -0.0929627102659, -0.00905181962865, 0.0529760132518, 0.0660791287878, 0.0264313110774, -0.0527906709163, -0.0832644831913, -0.047761487157, -0.00525089678838, 0.00920853658047, 0.00160221988302, -0.036921883774, -0.0508637181262, -0.0369139574948, -0.0297884797081, -0.0131892593004, 0.0328205903451, 0.0532522735819, 0.0434869096278, 0.0171966303505, -0.0117058173799, -0.0222005420711, -0.00885326183421, -0.00467956865215, -0.0017726627279, -0.00860012741033, -0.046231460458}, 0.1088 }, { 32, /* matchless_on */ {0.737841828858, 0.460204992853, 0.280744637086, 0.0935206597339, -0.0705817082991, -0.156854249167, -0.144106172504, -0.0685499381158, 0.00620304241081, 0.0610934722291, 0.0465273895752, -0.0126452119054, -0.0649026246806, -0.0713209874063, -0.0596110923629, -0.0415373874755, -0.0389721881465, -0.0284327312853, -0.0109349222879, 0.0222033554026, 0.0552410801, 0.0896637673103, 0.106570641198, 0.122226072209, 0.115856033255, 0.0801435470104, 0.0100505511461, -0.0489360304782, -0.0829690212741, -0.0887089006669, -0.0886065785655, -0.0469811200837}, {0.0, 0.611100232423, 0.191219480026, -0.0831423854754, -0.193756321128, -0.162103938394, -0.0633420329893, 0.0168905353821, 0.0319336623225, 0.00544046343502, -0.0450052997134, -0.0655650754908, -0.0385274002732, 0.0140346387674, 0.0381359817338, 0.0270741530904, -0.00985978537582, -0.0339616898786, -0.039510862758, -0.0234251294011, -0.00577196250278, 0.00602171273173, -0.0012115688049, -0.00850899153196, -0.0195544970682, -0.0235059343611, -0.0181958065493, 0.00619896262657, 0.0223536984999, 0.0126908937718, -0.0260364491855, -0.048766780312}, 0.1398 }, { 32, /* superchamp */ {0.764583545976, 0.538738620869, 0.179425189777, -0.0185116138637, -0.155373227876, -0.162444114313, -0.0955812737534, -0.0527583372679, 0.0109899803101, 0.027210394773, -0.0177057767782, -0.03205717291, -0.0483168565776, -0.00731185525588, 0.0552452873245, 0.075576957847, 0.0442457880974, -0.0118721835978, -0.0177888197761, 0.0351775943888, 0.0348792107809, 0.0127082443141, -0.0055147874283, -0.025538492041, -0.0266140723472, -0.00351312980821, -0.00705954101235, -0.0071756277097, -0.0073123807337, 0.00388589850911, 0.00920641143732, 0.00675123073573}, {0.0, 0.60762891993, 0.0804538514268, -0.139045714146, -0.188318237239, -0.102850850916, -0.014327283229, 0.0095126479685, 0.00675439266545, -0.0369566468812, -0.0735379197498, -0.0464884257152, -0.00652653570483, 0.0460655599383, 0.0503985731174, -5.63018161884e-05, -0.0506993010893, -0.0519236737825, 0.00601034157191, 0.0565585753845, 0.0271235886591, -0.0124334855533, -0.0275977294885, -0.0178167665585, 0.0128169339437, 0.0370635121992, 0.0234037648427, 0.00539790260771, -0.0105614779717, -0.00455010484908, 0.0101491481873, 0.0220600470141}, 0.1771 }, { 32, /* fender_68 */ {0.952578805555, 0.423653323267, -0.299325586902, -0.181365977098, -0.00917621972835, -0.106211820702, -0.144312857058, -0.0664525836173, -0.0308777018884, -0.0289677657295, 0.06172127279, 0.0700934900581, 0.00309908907112, -0.00891983996273, -0.0687746247517, -0.0146407179784, 0.0264920122813, 0.0134951652977, 0.0480259959669, 0.021152058087, -0.0229395195318, 0.00306616207055, 0.015377268642, -0.0166969251715, -0.0472474005373, -0.0257631159809, -0.0298364749235, -0.0359529903186, -0.0228763062676, -0.0190698276841, -0.0481625561196, -0.024778494842}, {0.0, 0.373287747089, -0.379113471957, -0.162638822705, -0.0309789534425, -0.113942084113, -0.0746182251996, 0.00371088736605, -0.0311272559258, -0.0641468114835, -0.01820597504, -0.0106553201186, -0.0025754233332, 0.00779983208005, -0.0133002473609, 0.0474101909397, 0.0302769494631, -0.0206219756872, 0.00091004302278, 0.00989883124397, -0.00095818764248, -0.00710510898183, -0.0103772680579, 0.00636775505307, 0.0172954284337, 0.00560785607672, -0.00550757886611, 0.0349170637518, 0.033667260855, 0.0263631580776, 0.110816169944, 0.0551965257177}, 0.5267 }, { 32, /* marshall */ {0.632136921276, 0.487520501766, 0.267166936676, 0.0328329910029, -0.124746548218, -0.175922403211, -0.134056005594, -0.0275494615733, 0.0707349518645, 0.112423870345, 0.0758114749041, 0.0139250983739, -0.0210142361937, -0.00193163235992, 0.0197248569676, 0.0206461311409, -0.00897578938148, -0.0306233925441, -0.041776582616, -0.0398244883075, -0.0328395317644, -0.0101508675516, 0.00636535089023, 0.0217430701187, 0.0223553033142, 0.0237782685683, 0.0278909244449, 0.0469073547267, 0.0509466858461, 0.0336174039295, 0.0028829896058, 0.0114245696423}, {0.0, 0.618938053184, 0.180052941443, -0.1028119852, -0.19233134457, -0.14303971742, -0.0450998045919, 0.0341843500162, 0.0465086637485, 0.0071435730282, -0.0461779135605, -0.059013077843, -0.0284397368519, 0.0187689538251, 0.0341298347311, 0.0244703904826, 0.00720524642447, 0.00991307420138, 0.018738094495, 0.0275442994126, 0.0299092523536, 0.0339721143791, 0.0270175082759, 0.0151058732685, -0.00751060215331, -0.0236467101096, -0.0272347092017, -0.00812409176413, 0.0141531255726, 0.0270163512016, 0.00208457244433, -0.0784208903527}, 0.1132 }, { 32, /* mesa */ {0.462494284717, 0.393585742058, 0.303328992303, 0.181503108654, 0.0629173541037, -0.020681232006, -0.0571885284376, -0.0467796891544, -0.0276756897046, -0.00892844543715, 0.00204563746045, 0.0115134879366, 0.00106846505647, -0.0149439761237, -0.0330954690659, -0.0337794782369, -0.0276991983671, -0.0190072253549, -0.0324525139664, -0.0630355306227, -0.0999209480709, -0.111933999507, -0.110645947594, -0.092891889065, -0.0692697576821, -0.0450776510962, -0.0392851148349, -0.035324392499, -0.035403719608, -0.0376283525137, -0.0612971281858, -0.0900100571873}, {0.0, 0.56035020932, 0.29343466934, 0.0772363317707, -0.0530744622425, -0.0885361452358, -0.0589180077997, -0.00257855932105, 0.0334935643243, 0.0442328268628, 0.0294583386742, 0.00717959220156, -0.0175320543891, -0.0208128084726, -0.00373790944406, 0.0334761867029, 0.0627006023834, 0.0700861323961, 0.0416727224516, -0.000637024095321, -0.0357094622237, -0.0404012923223, -0.0285442599547, -0.00354190734239, 0.0184796761008, 0.0306524756002, 0.0181509660649, -0.00687913029057, -0.0393242377083, -0.0550286859069, -0.0375235630652, 0.0471541139774}, 0.2500 }, { 32, /* pro_jr */ {0.734249445521, 0.491537503216, 0.337459965314, 0.176462147927, 0.0276390917692, -0.0644515999868, -0.0972401016684, -0.0803985996088, -0.0428685363211, -0.0140919517701, -0.0337409328059, -0.0478897322188, -0.0362288411405, -0.0130597902066, -0.00582049410513, 0.0022469159791, -0.00964075940401, -0.0380828738621, -0.0763568061844, -0.089961400489, -0.0952731732008, -0.0895604973654, -0.101346765163, -0.119569610891, -0.128233125318, -0.109253322153, -0.0821678710293, -0.041620049917, -0.0245690004857, -0.0219634796685, -0.0419014341928, -0.0651369005252}, {0.0, 0.663188793345, 0.270439727768, 0.0190336508265, -0.0946822703696, -0.0888520332756, -0.0267575060227, 0.03588910806, 0.0599594346375, 0.041850528867, -0.00632721029526, -0.0244115687714, -0.0103162286821, 0.0119858957112, 0.0197992179523, 0.0238625339809, 0.0142267453341, 0.00296440492823, -0.00543873217766, -0.00014858213959, -0.00196572770138, -0.00750279035903, -0.0243069229182, -0.0285801812939, -0.0100437887585, 0.0259127459737, 0.0475587872734, 0.0497287926166, 0.0189008750066, -0.0156259358581, -0.0395277285226, -0.0325403937133}, 0.2500 }, }; Model32 CabinetII::models48000 [] = { { 1, /* identity */ {1}, {0}, 0.2500 }, { 32, /* matchless_off */ {0.751616859768, 0.455477674067, 0.236301148417, 0.0831041136969, -0.0271403780165, -0.100856772665, -0.105648770896, -0.0532306291781, 0.00532168244437, 0.0769562829624, 0.0998339309568, 0.0558038693299, -0.00395884124382, -0.0114310936324, -0.00035476064153, 0.0174339944264, 0.0326924241347, 0.0270873548662, -0.00429020715999, 0.00156163927912, 0.0110729521074, -0.00355947960002, -0.0197465530354, -0.00226491671692, 0.000562585645118, -0.0113374627036, -0.0395530054938, -0.0773637715714, -0.110300349197, -0.102242460538, -0.0802708342222, -0.0368542661019}, {0.0, 0.573363683971, 0.199471497847, -0.0100987131104, -0.10105055289, -0.104899707204, -0.0453437303875, 0.0227558858103, 0.0494210617945, 0.0469948522053, -0.000869801014908, -0.060632162889, -0.078080719406, -0.036500327, 0.00169111404144, 0.0161416041893, 0.00446588199593, -0.0256497606161, -0.052007235054, -0.0329954828689, -0.00846672300472, 0.00503287700528, 0.0225460696732, 0.0488769816297, 0.0448900330347, 0.0265213842101, 0.00867720983291, 0.00309440217249, 0.0106055108636, 0.0271743998844, 0.00790666559882, -0.0494793375024}, 0.0972 }, { 32, /* matchless_on */ {0.736752793274, 0.42789796886, 0.276149514408, 0.115820415827, -0.0320628697966, -0.121795204879, -0.142828258933, -0.0859958693575, -0.0176210080708, 0.0507262077785, 0.0760681727953, 0.0516030677135, -0.0156690595908, -0.0681826247693, -0.0944163538419, -0.0902627133447, -0.0823076517005, -0.0734934090705, -0.0692943287136, -0.0513490885216, -0.0305887683924, 0.00285704997857, 0.0369925466712, 0.0764037770343, 0.103822670992, 0.130505051247, 0.126189167018, 0.0870288516942, 0.00607091602923, -0.0716539223465, -0.122336223951, -0.107802803871}, {0.0, 0.60867772822, 0.226828570484, -0.0393069664502, -0.171393086666, -0.174192716258, -0.103361484389, -0.0132853346158, 0.028065787663, 0.0276791758057, -0.0093177316362, -0.0469821632045, -0.0621330892865, -0.0326281391326, 0.00952584471493, 0.0391305970452, 0.0343547401694, 0.0103991548433, -0.0167038490391, -0.0239538249183, -0.0200522931237, -0.00619037145571, 0.00112030880301, 0.00379111038519, -0.00425737141588, -0.00510101082859, -0.00618382168232, 0.00222622566288, 0.012234432496, 0.0240659559777, 0.00806553945799, -0.0500627523652}, 0.1292 }, { 32, /* superchamp */ {0.736144077022, 0.533697136818, 0.208223243775, 0.0105446749467, -0.115112852124, -0.167784888349, -0.118309369108, -0.0686796829989, -0.0320689348914, 0.0293577338735, 0.0228074058112, -0.00942321170451, -0.0247236206138, -0.0382275338893, -0.0220962904251, 0.0369265390908, 0.0652234781224, 0.0625494411772, 0.0203218939615, -0.0130049534934, 0.00776964355966, 0.0408524993227, 0.0187403995074, -0.00323676614764, -0.011729909669, -0.0146182789026, -0.00520348014418, 0.0251718299467, 0.0292350516935, 0.0265773340322, 0.0181154887123, 0.00421057480694}, {0.0, 0.610899704338, 0.116614493347, -0.107102211172, -0.17045907835, -0.125900190491, -0.0364778545046, 0.00268191730596, 0.00393059621292, -0.00442930148683, -0.0496456084728, -0.0641110080937, -0.0380451267687, -0.00269939732468, 0.0336320714582, 0.0473822399663, 0.00672982206906, -0.0376868259805, -0.0574242984978, -0.0235397064668, 0.0375124576452, 0.0561991090538, 0.0137707473486, -0.019313535496, -0.0308393757193, -0.0231851781013, -0.000359955230619, 0.0224262684571, 0.0140137052508, 0.000784652753983, -0.00886431320574, 0.00520310404507}, 0.1627 }, { 32, /* fender_68 */ {0.940499002611, 0.474406048513, -0.234027864276, -0.245068743132, -0.0275886925241, -0.0375353084644, -0.116020540053, -0.0788142311793, -0.0192628993487, -0.0208031874862, -0.036274591111, 0.0274443468203, 0.0248807593189, -0.00647753415313, 0.0123263590476, -0.0207149994271, -0.0169433327912, 0.0367748568855, 0.0157152144192, 0.0219763333967, 0.0220500063178, -0.0236599648747, -0.028051497911, 0.0300390624893, 0.0503387731847, 0.0200944005064, -0.0199651438354, -0.0189512878551, -0.0341641453641, -0.0429368448753, -0.00172415323758, 0.0187773541719}, {0.0, 0.438339721191, -0.314663980515, -0.200197131305, -0.0199447108206, -0.0806444850114, -0.112178302737, -0.0407327776523, -0.0162859630428, -0.04823028022, -0.0411406583855, 0.0181605305425, 0.0182296926714, 0.0118833391549, 0.00393162532115, -0.0208012980893, 0.0236552029021, 0.0440436249244, -0.015760708804, -0.00800215008051, 0.0264390446392, 0.0224755303713, -0.00488388416495, -0.0302927869543, -0.0389708286652, -0.0213138828272, -0.0196593434643, -0.0250837259433, -0.0171306364105, -0.00247139702561, -0.0442683480699, 0.00104076341183}, 0.4976 }, { 32, /* marshall */ {0.632432814914, 0.466340577796, 0.289928964438, 0.0873773815151, -0.0637714745665, -0.134210611966, -0.135503699906, -0.0734327294692, 0.00792058229369, 0.0760927054439, 0.0890306791735, 0.0595619591479, 0.00922265898468, -0.00784921065447, 0.00721708132165, 0.0350086110935, 0.0376247852781, 0.0202910905225, -0.00870656585895, -0.0201433438279, -0.0279367587019, -0.0245180701261, -0.0152282108474, 0.00828831561931, 0.026894267099, 0.0460507228179, 0.0479724909309, 0.0409446830643, 0.0201085872414, 0.00561387003945, -0.00753169056058, 0.000986659484038}, {0.0, 0.594136919296, 0.201493775156, -0.0716153113375, -0.180702317671, -0.160390621032, -0.0826806167453, 0.000697581661664, 0.0397029332137, 0.0299147550153, -0.0177304803895, -0.0570701545448, -0.0652412298089, -0.0298128518083, 0.0124560081161, 0.0355161884622, 0.0255626596849, 0.00762986123778, -0.00431800264305, 0.00420452150537, 0.0150803653129, 0.0291131391488, 0.0359312991789, 0.0364212054952, 0.0203516393338, 0.0022141464642, -0.0149317465975, -0.0121651677123, 0.00704936522966, 0.0353605810957, 0.0322793623201, -0.0307481566657}, 0.0996 }, { 32, /* mesa */ {0.495930895017, 0.376476419856, 0.303586589503, 0.197845120631, 0.0899987258287, 0.00535662962566, -0.0475751298521, -0.0519576953746, -0.0376515865627, -0.0168652310379, -0.00508935920432, 0.00888673824726, 0.0109356809664, 0.00654236486877, -0.0122417367265, -0.0265484743045, -0.0339837870474, -0.0233241554396, -0.0127914848925, -0.00515836827508, -0.0209864779144, -0.0475368628257, -0.0782299905969, -0.0909360283527, -0.0983527406681, -0.0938199589393, -0.0898861541372, -0.0810532718198, -0.0815503996776, -0.0796236089322, -0.0749972587191, -0.0599151413182}, {0.0, 0.534078389658, 0.294930996327, 0.0991032789063, -0.0272295349878, -0.0770236019127, -0.0705005212384, -0.0257307535864, 0.0146092582685, 0.0379865150974, 0.0359872042115, 0.0230902724993, -0.000725294921074, -0.0174606095957, -0.0236682462783, -0.00669570447944, 0.021362472642, 0.0512331674592, 0.0584309807453, 0.044407663655, 0.00900197651083, -0.0217065441135, -0.037007819832, -0.0257650758221, -0.00590170187955, 0.0194528583388, 0.0320489572473, 0.030386820278, 0.00581345215134, -0.02347217653, -0.0472400829369, -0.0430772235107}, 0.2500 }, { 32, /* pro_jr */ {0.767221028694, 0.44461349725, 0.324943328323, 0.187583401624, 0.0585707039826, -0.036895934974, -0.0893306767021, -0.0935390488322, -0.0758668196298, -0.0408583447944, -0.0309741335777, -0.0417509830741, -0.0550681782871, -0.0417048932451, -0.0295194484972, -0.0177059350466, -0.0189517349534, -0.0180093708399, -0.0336546809637, -0.0511188019942, -0.0648908298083, -0.0619349722444, -0.058573104994, -0.0470621645996, -0.0597723312001, -0.0855574645731, -0.109611426273, -0.113648127167, -0.112000636381, -0.0909222239483, -0.0727424833493, -0.0362189061166}, {0.0, 0.62970643913, 0.293410547935, 0.0578415012725, -0.0672697168081, -0.094466063484, -0.0596589574295, 0.000648321788151, 0.0432524054305, 0.0596811813862, 0.0366985835211, 0.0035102339371, -0.0156226319473, -0.00793362884142, 0.00010974226424, 0.00946937446156, 0.012432810986, 0.0166353982569, 0.00885441580212, 0.00176491241101, -0.00465797946213, -0.00706780418692, -0.0169292031721, -0.0217285491491, -0.0298358684941, -0.0214136482558, 0.00603804801211, 0.0432427970473, 0.0585065590431, 0.0472784452715, -0.00622503195681, -0.0778508047032}, 0.2500 }, }; Model32 CabinetII::models88200 [] = { { 1, /* identity */ {1}, {0}, 0.2500 }, { 32, /* matchless_off */ {0.581241782856, 0.351127495653, 0.293447498861, 0.203644809011, 0.122868019886, 0.0798136296596, 0.0627344813847, 0.0582949053671, 0.0495483041303, 0.0432630437098, 0.040778980166, 0.0502959955879, 0.06102889964, 0.0717641907075, 0.0748815766238, 0.0800912666293, 0.0851573668252, 0.0920643205477, 0.0863975575062, 0.0672325976358, 0.0316956083124, -0.00434276880274, -0.0353531287352, -0.0497775530225, -0.0549729489782, -0.0523697171754, -0.0527017492312, -0.0496529350336, -0.0432932459975, -0.02532771672, -0.00704167237723, 0.0048594343372}, {0.0, 0.527351085198, 0.306902134941, 0.121666659808, -0.000869395618695, -0.0590060725486, -0.0800321294614, -0.0812161497866, -0.0756902882293, -0.0586480829698, -0.035146960319, -0.00693669578546, 0.0137459416267, 0.0260709477944, 0.027142282904, 0.0255107789641, 0.0184912445046, 0.00787311464383, -0.012080806249, -0.0326630439808, -0.0479929895538, -0.0449384101923, -0.0257392906728, 0.00611234738181, 0.0331632616028, 0.0482685642726, 0.0424761053987, 0.0227984734932, -0.00689764194843, -0.0338856201523, -0.0506606159856, -0.036511204766}, 0.0505 }, { 32, /* matchless_on */ {0.754229081317, 0.28992460445, 0.25506113675, 0.205825249671, 0.149736304722, 0.0965453802519, 0.043937905171, 0.000434005345846, -0.0380077969732, -0.0648440473691, -0.0820185458195, -0.0804769096126, -0.067903181347, -0.0457545818062, -0.024506391213, 0.000276698483466, 0.0227732012504, 0.0462273060245, 0.0612627993168, 0.0704402843546, 0.0668070265589, 0.0560526861609, 0.0360109823522, 0.0171596012087, -0.00254977646019, -0.0169995310247, -0.0326802854744, -0.0431803638863, -0.0527933574758, -0.0537365642607, -0.0484658084207, -0.0264410770067}, {0.0, 0.473323278291, 0.304447812378, 0.156758267418, 0.0407417557578, -0.0375541115795, -0.084174169143, -0.0995647273704, -0.0953485009639, -0.0745284443813, -0.047611748504, -0.0160860230858, 0.00812108121932, 0.022520582633, 0.0218183858734, 0.0139436350809, -0.000684654971314, -0.0149097687302, -0.0306604197839, -0.0406022715147, -0.0468128179642, -0.0432623683601, -0.0334406989274, -0.0143890226248, 0.00558711901527, 0.0240338814196, 0.0313772357088, 0.0288551286613, 0.0119537593072, -0.0137695197232, -0.0487934292115, -0.0830489298052}, 0.0977 }, { 32, /* superchamp */ {0.564442248694, 0.417375378841, 0.328112930961, 0.184087902524, 0.0606877879374, -0.000888211396509, -0.0240417949471, -0.0386494407725, -0.0623924578122, -0.077697122496, -0.0771755477917, -0.0625887925073, -0.0567602691995, -0.0606788148043, -0.0653972735044, -0.0482177616776, -0.0134706312764, 0.0255178539984, 0.0454519306153, 0.0488386058553, 0.040370247527, 0.0309888915369, 0.0118591255626, -0.0166655766779, -0.0524886753799, -0.0735764853592, -0.0712539506456, -0.0409275497673, 2.56200623182e-05, 0.0407426819337, 0.0605288133085, 0.045387360314}, {0.0, 0.58401876341, 0.301866612426, 0.0749234792796, -0.0512250579262, -0.0884380547633, -0.0859341509964, -0.0715039798048, -0.0533786975427, -0.0228940420774, 0.00895370138835, 0.029234699873, 0.0249642271923, 0.00815472752255, -0.00852123193886, -0.013874697166, -0.0177655062032, -0.0244009337209, -0.0348366549323, -0.0341041586519, -0.0199202543104, 0.0049040564053, 0.0228786117828, 0.0307412470467, 0.0270357914745, 0.0202102683028, 0.00600213627849, -0.0132416519396, -0.035306113292, -0.0400865958576, -0.0122081055945, 0.061547236583}, 0.0940 }, { 32, /* fender_68 */ {0.636561915308, 0.539655264394, 0.306940867236, -0.00798666364572, -0.2010016693, -0.196429989976, -0.0871390659769, 0.0058320328314, 0.0205797064122, -0.0137249327682, -0.0511542488948, -0.0559233911299, -0.0365269209833, -0.00933607201861, 0.00259528983031, 0.000820508580746, -0.014655020786, -0.0298656923381, -0.0363760565053, -0.0164103072662, 0.0180980103038, 0.0427307277871, 0.0289045601723, -0.00365819240342, -0.0221033761769, -0.00613002097262, 0.0137359639094, 0.0126374765575, -0.0109039821774, -0.022164851067, -0.00644276895272, 0.0406179316828}, {0.0, 0.660098640191, 0.135995579965, -0.18643602906, -0.21362553946, -0.0765656086032, 0.0304158765248, 0.0317377501315, -0.0306547118834, -0.0742288333657, -0.0716640946732, -0.0400798411024, -0.016998894935, -0.0119106601837, -0.0209707717803, -0.0285105267284, -0.033043355156, -0.03016836978, -0.0235112391223, -0.0121431367424, -0.0083970652792, -0.0121227777881, -0.0179437299751, -0.0103936611338, 0.000810102779011, -0.000708784846704, -0.0234941025684, -0.0371015701952, -0.0180247391719, 0.0220761118738, 0.0243771530897, -0.0421517051891}, 0.2672 }, { 32, /* marshall */ {0.487781223472, 0.313482625917, 0.286350463893, 0.224656866466, 0.146402144474, 0.0763559834141, 0.0205530599391, -0.0145817074955, -0.0366424375139, -0.0445785898927, -0.0458160857045, -0.037336889106, -0.0251791786851, -0.00575399966305, 0.0148942739024, 0.0391750282507, 0.0589388969198, 0.0752812491289, 0.0811254049966, 0.0801917939348, 0.0685526132261, 0.0533549680139, 0.0342811257343, 0.0215399491933, 0.0147049499229, 0.0198301270011, 0.030982725155, 0.0503002628087, 0.0693130546132, 0.0867905978395, 0.0881891739024, 0.0641468491285}, {0.0, 0.51943795847, 0.326729354403, 0.149229797985, 0.0109767104297, -0.0732768493116, -0.111088974509, -0.110789539541, -0.0898934114003, -0.0564578047856, -0.0231004313356, 0.0069673688738, 0.0254240918116, 0.0337510299271, 0.0282514883492, 0.0147089116391, -0.00647743824673, -0.0269028751263, -0.0446349197143, -0.0510564142456, -0.0478791675617, -0.0324832722564, -0.0121393859238, 0.0104982033447, 0.0241412382054, 0.026038551433, 0.00994372364326, -0.0158545375622, -0.0436236854665, -0.0537883431888, -0.032574614307, 0.0387767610956}, 0.0666 }, { 32, /* mesa */ {0.800744790951, 0.174351736281, 0.162047205857, 0.138794638546, 0.105850412073, 0.0723656260485, 0.0365740092219, 0.00431957094182, -0.0274260159266, -0.052813754463, -0.0747002681782, -0.0875980404567, -0.0959206315285, -0.0964326627017, -0.0951211930444, -0.0890916136798, -0.0839336477818, -0.0759587618493, -0.0699911420952, -0.0618103150195, -0.0562569921852, -0.0497246788081, -0.0474425366429, -0.045118852226, -0.0466084665482, -0.0466183009403, -0.048518031551, -0.0465434705359, -0.0436608634155, -0.0338725172886, -0.0202008830722, 0.0028064387038}, {0.0, 0.348283848037, 0.278266186344, 0.208315992656, 0.142238507639, 0.0877418515218, 0.0426721771028, 0.0101211230173, -0.0142620082039, -0.0279206093939, -0.0353541175487, -0.0344380562925, -0.030780249931, -0.0230674032021, -0.016830370528, -0.00961683532214, -0.00530786189015, -0.000225073976316, 0.00276994164541, 0.00775476255757, 0.0114020240885, 0.0168731013913, 0.0203623771917, 0.0249313385656, 0.0267810408235, 0.0287888955038, 0.026286558388, 0.0210452426156, 0.00782753651909, -0.0119982689793, -0.0444362907999, -0.0880582917654}, 0.2500 }, { 32, /* pro_jr */ {0.909835294941, 0.237116967883, 0.220493213781, 0.188296175986, 0.145804855731, 0.1035213914, 0.0593519550104, 0.018535542445, -0.0211984146917, -0.0519769598497, -0.0754321013216, -0.0869433378891, -0.0920887014799, -0.087865027182, -0.0792907797887, -0.0637463287733, -0.0482713945314, -0.0325419993651, -0.0236382913314, -0.0187673840883, -0.0211003792763, -0.0242608362201, -0.0299312006336, -0.032972160693, -0.038384284548, -0.0433373155719, -0.0522438990617, -0.0598215574684, -0.0680342990137, -0.0706075753658, -0.0696540637908, -0.0592163425206}, {0.0, 0.437589362895, 0.316542061632, 0.204591087565, 0.109610647885, 0.0395709089276, -0.0101168883103, -0.0392507441308, -0.0536854447628, -0.0525994961208, -0.0429181531663, -0.0263178649123, -0.0108114446263, 0.00361113168474, 0.0124368978113, 0.0183164472387, 0.0173632458965, 0.0133080282174, 0.00451776800884, -0.0027292732446, -0.0084152300302, -0.00649797485834, 0.000343904158769, 0.0135853277076, 0.0260015642816, 0.0368350330248, 0.0397116093504, 0.035854103932, 0.0201173890247, -0.00598389310382, -0.0479894271495, -0.10412912505}, 0.2500 }, }; Model32 CabinetII::models96000 [] = { { 1, /* identity */ {1}, {0}, 0.2500 }, { 32, /* matchless_off */ {0.576442585125, 0.306361432085, 0.256653772545, 0.177316081395, 0.0989986029973, 0.0501811139283, 0.0263950297254, 0.0211066378234, 0.0164669956215, 0.0145939695187, 0.0131915301884, 0.0224302343035, 0.0359395096833, 0.0545608587271, 0.0665798797365, 0.0764638706987, 0.0822020713116, 0.0937583388117, 0.104705110174, 0.114731370205, 0.110211793209, 0.0934363192015, 0.0618719406527, 0.0288732783262, -0.00358352145982, -0.0259155247732, -0.0441021836484, -0.0555310772717, -0.0670712283056, -0.0677576234809, -0.0520883036287, -0.00170675690763}, {0.0, 0.508669145362, 0.322479739387, 0.156892646838, 0.035020841423, -0.0347440829067, -0.0701806136041, -0.0825008530376, -0.0845801358275, -0.0733688333095, -0.0530323023958, -0.0234536559399, 0.00360324038712, 0.0244342060698, 0.0314240125922, 0.0309189326677, 0.0230090442585, 0.0145937492998, 0.00103582471628, -0.0152025378362, -0.0363464186106, -0.0511215757185, -0.0557855361088, -0.0408742372067, -0.0130066718085, 0.023938151261, 0.0530188010691, 0.0671220652663, 0.0540529792683, 0.0164681954699, -0.0469180610472, -0.125461903689}, 0.0494 }, { 32, /* matchless_on */ {0.941618036526, 0.239866043796, 0.218739659026, 0.1855624175, 0.143119285622, 0.098285134927, 0.049823345838, 0.00491072985196, -0.0372254815054, -0.0706502777402, -0.0969381684649, -0.109632530255, -0.11098328422, -0.0987132407502, -0.080379871629, -0.0559715185867, -0.0315381582245, -0.00496109501612, 0.0171690268626, 0.0357166271116, 0.0446464487104, 0.0469813895302, 0.0390401137056, 0.0262125456401, 0.00716840214371, -0.0108017316884, -0.028794724005, -0.0413800680682, -0.0514241182155, -0.0535943709963, -0.0501288491812, -0.0356807796594}, {0.0, 0.436259688495, 0.303343311728, 0.180401443304, 0.0755768977826, -0.00298141418929, -0.057401860201, -0.0849229021135, -0.0921029201246, -0.0808710238831, -0.0601563297725, -0.031853887802, -0.00462566662184, 0.0189321520075, 0.0307568282097, 0.0327103981415, 0.0234112049746, 0.00941773902223, -0.00880302596543, -0.024628145492, -0.0377321989901, -0.0420727660837, -0.0390726798885, -0.0257996845469, -0.00726121684029, 0.0160981879938, 0.0352540092546, 0.0464046029779, 0.0397882340227, 0.0142875216435, -0.0354360590043, -0.105598440048}, 0.0651 }, { 32, /* superchamp */ {0.598483659576, 0.392119614921, 0.324128816827, 0.207253363884, 0.0944270102152, 0.0269672658419, -0.00338080597527, -0.0154386943775, -0.0337854523788, -0.0528375781544, -0.0668037964282, -0.0644824272507, -0.0581122839458, -0.053620685433, -0.05941095465, -0.0599621297144, -0.0476930600655, -0.0143047492128, 0.0237480623761, 0.0559779339589, 0.0689887990541, 0.0713731354487, 0.0647181254244, 0.0560812069922, 0.0357682629483, 0.00706245212017, -0.0286615791021, -0.052644819201, -0.0590210498647, -0.041747604451, -0.0168191702228, 0.00465326173164}, {0.0, 0.555306548005, 0.304384349565, 0.0955876011242, -0.032790937176, -0.0803585769889, -0.0834509085546, -0.069736664388, -0.0558345347225, -0.0359974911327, -0.012046069248, 0.0128302949846, 0.0234882264814, 0.0187166685281, 0.00137741738003, -0.0128825824672, -0.0213054248788, -0.0224842024484, -0.0275110748888, -0.0335451251688, -0.0384673765875, -0.0306779974376, -0.0133415017904, 0.00900611383706, 0.0222626768741, 0.0253127037082, 0.0166771042914, 0.00577574428968, -0.00773567900765, -0.0175688399329, -0.021338142267, -0.00199213694503}, 0.0903 }, { 32, /* fender_68 */ {0.61042243584, 0.519167522444, 0.338455322638, 0.0598120788559, -0.155008295955, -0.209996385603, -0.142681005045, -0.0444570079209, 0.00529240289956, 7.6909429568e-05, -0.03354602127, -0.0535687744411, -0.049519403779, -0.0238846177015, -0.000920606029846, 0.010434338433, 0.002228774067, -0.0140907683377, -0.035872619499, -0.0481212880009, -0.0457673542097, -0.0191076772359, 0.0133771714316, 0.0322386165839, 0.0178556687427, -0.0095701287891, -0.0237842865664, -0.00484822472333, 0.0227424513401, 0.0316309750773, 0.00586735474858, -0.0235815475244}, {0.0, 0.658865798836, 0.184872779539, -0.137135473027, -0.210003150161, -0.108221769211, 0.0110221508749, 0.0526622948184, 0.0145697157163, -0.0398151102571, -0.0659793146563, -0.0534131399862, -0.0284152189248, -0.0091286709165, -0.00636536651116, -0.00986403078301, -0.0155052371976, -0.0165973690878, -0.018011376701, -0.0154898840826, -0.0109104131649, -0.00195757926804, 0.00204116721073, 0.00157889259535, -0.00328499795407, -0.00244356007769, -0.00227606009504, -0.00603112779608, -0.0173439459505, -0.0176299504059, -0.00210293292278, 0.00864548631897}, 0.2359 }, { 32, /* marshall */ {0.519039714244, 0.28397066065, 0.263752501402, 0.216763224092, 0.153202060875, 0.093498887372, 0.0418092813984, 0.00649080672527, -0.0187685887985, -0.0313725205166, -0.0386046242494, -0.0368255569808, -0.0319398932261, -0.0190867195417, -0.00429792893597, 0.0171895051396, 0.038509421914, 0.0625518463058, 0.0812007261611, 0.0971807963934, 0.10334087256, 0.104223746243, 0.0947810421376, 0.0820175331544, 0.0638964900287, 0.049888405421, 0.0379912291508, 0.0353343445924, 0.036271348736, 0.0455456726476, 0.0571810093304, 0.0753869660867}, {0.0, 0.495552580909, 0.326384725738, 0.167649233033, 0.0373913746446, -0.049802990613, -0.0971841927371, -0.108389008817, -0.0971430950292, -0.0702481334571, -0.0402478232447, -0.00995144228925, 0.0120995492915, 0.0263638891687, 0.0284733804008, 0.0226883648689, 0.00733748451124, -0.0103570201666, -0.0304762029918, -0.0447374261541, -0.0534169560389, -0.0509721172171, -0.0411315716449, -0.0225994268992, -0.00306083571223, 0.0162408742504, 0.0258967736277, 0.0250750690024, 0.00862389563333, -0.0164131934788, -0.0455336929843, -0.0629205840552}, 0.0663 }, { 32, /* mesa */ {0.816556812848, 0.150293117891, 0.141795487793, 0.124839522537, 0.099196755702, 0.0723627786971, 0.0428519140057, 0.0161310830227, -0.0110923701697, -0.034007587359, -0.0554568663798, -0.070468417213, -0.0823376819593, -0.0871844200317, -0.0898440433576, -0.0874713568897, -0.0851052646307, -0.0795934648554, -0.075427699709, -0.0687589148326, -0.0639930873009, -0.0572185996408, -0.0529180674694, -0.0475806410473, -0.0456514163291, -0.0429752541034, -0.0432519558816, -0.0416267292155, -0.0408422393067, -0.0352236824279, -0.0269876908459, -0.0103181623672}, {0.0, 0.324884890574, 0.268628249933, 0.210962607294, 0.15379956812, 0.104238396719, 0.0608732030517, 0.0272239220101, -0.000475953058616, -0.019347999351, -0.0332735025431, -0.039418716712, -0.0418327023679, -0.0385575041649, -0.0342524288567, -0.0267537524134, -0.0202714386094, -0.0115967221036, -0.00421419915726, 0.0052675530631, 0.0133773574491, 0.0230906449798, 0.0303465968119, 0.0374618799867, 0.0402738707573, 0.0409671902591, 0.0352080031286, 0.0253938319794, 0.0070273986645, -0.0175302180141, -0.0528396401673, -0.0967034944448}, 0.2500 }, { 32, /* pro_jr */ {0.925365759135, 0.205121186223, 0.193282167511, 0.170964672217, 0.139026712618, 0.10615970874, 0.0712170483592, 0.0387785989803, 0.00565122246474, -0.022529589284, -0.0474765753603, -0.0638195347354, -0.0750789855745, -0.0781013105481, -0.0774023301337, -0.0698851353181, -0.0601759362765, -0.0460666153988, -0.033417255906, -0.0207620686126, -0.0136627961657, -0.008873845834, -0.00924040700271, -0.00959897299234, -0.0122760927684, -0.0134131792383, -0.0169861222268, -0.0197237904964, -0.0247929394164, -0.0274056341581, -0.0290372582108, -0.0230858292646}, {0.0, 0.384047660947, 0.296120799911, 0.212432468703, 0.136561707438, 0.0758675413252, 0.0277844248084, -0.00596868040294, -0.0302987351926, -0.0432929213814, -0.0490562834943, -0.0462652470517, -0.0403753213236, -0.030690892845, -0.022025662253, -0.0121577019191, -0.00457323646437, 0.00324370289428, 0.00777535572758, 0.0119010287281, 0.0130997070818, 0.0155933691883, 0.0177344547654, 0.023362610354, 0.028693981754, 0.0347549373256, 0.0352150834795, 0.0303066390313, 0.0145055938776, -0.0110543984149, -0.0508137742561, -0.102480420772}, 0.2500 }, }; lmms-1.1.3/plugins/LadspaEffect/caps/Cabinet.cc000066400000000000000000000211621247673406200213050ustar00rootroot00000000000000/* Cabinet.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ CabinetI - 16th order IIR filters modeled after various impulse responses from Steve Harris' 'imp' plugin. Limited to 44.1 kHz sample rate. CabinetII - 32nd order IIR filters modeled after the same impulse responses using a different algorithm. Versions for 44.1 / 48 / 88.2 / 96 kHz sample rates, switched at runtime. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Cabinet.h" #include "Descriptor.h" Model16 CabinetI::models [] = { { 1, /* identity */ {1}, {0}, 1, }, { 16, /* unmatched, off-axis */ {0.44334744339382504, 0.49764265352620912, 0.19936863766114088, 0.0038388115609433826, -0.072080744430548876, -0.092589757815768933, -0.023760971045285254, 0.058929802988203807, 0.11073296313735595, 0.14389046518738619, 0.052981055774577353, -0.11817321919764193, -0.22957467728465422, -0.26301284181138151, -0.25586853638823448, -0.10768194462289554}, {0.0, 0.71138736215182674, 0.19571088506350195, -0.086897678126924227, -0.18344238266155902, -0.13338660100611671, -0.017424587504494098, 0.062014975470330351, 0.077979014877680469, 0.039134631327482176, -0.046646061538403727, -0.040653480351542266, 0.068462230153713749, 0.14313162261479676, 0.058844200671679531, -0.17878548463526983}, 1 / 4.4, }, { 16, /* unmatched */ {0.58952373363852417, 0.43625942509584309, 0.235412203403113, 0.048252951521505258, -0.1002076253350956, -0.14467958356216026, -0.074304873528329402, 0.060945557247412331, 0.15959845551788171, 0.20970924189636411, 0.15361368007229703, 0.025339061869183478, -0.11824836967489599, -0.19384403813690479, -0.19295873693806628, -0.058904754435169508}, {0.0, 0.6596380198994729, 0.20825670531468143, -0.10508784276271754, -0.24698905246649294, -0.21519418569376192, -0.10057489587096909, -0.006175810942624007, -0.0019249936836196989, -0.045827268144865707, -0.10184708094147235, -0.09177820187618313, -0.017740067693127175, 0.058828573780348989, 0.010559807576350673, -0.19412688465216324}, 1 / 5.7, }, { 16, /* superchamp */ {0.5335550129666069, 0.61768496153556829, 0.2080126894040209, -0.0067283013134491337, -0.10433152421155355, -0.16159936513841233, -0.10593018443866807, -0.091854930675998661, 0.0023550324496513643, 0.14327516190088724, 0.14688292534697539, 0.089539872443625601, -0.053854769352683005, -0.15693904535289377, -0.083502230074838577, 0.0090113128614708465}, {0.0, 0.67745858591653696, 0.044802106922746734, -0.1932642251200547, -0.18922360327572652, -0.052980570047914469, 0.020446992577988904, -0.028951451474818618, -0.085212072485126716, -0.12241212382510525, -0.089259371449674357, 0.010469056928395087, 0.049019357277555603, 0.037212453438250505, -0.046374612934843573, -0.045133341919937828}, 1 / 4.0, }, { 16, /* fender-vibrolux-68 */ {0.68447985102464837, 0.61538710771230021, -0.28804707230137599, -0.23656583372846893, 0.083100874242250655, -0.027792816938813913, 0.055558334440593965, 0.044458161718059774, -0.25467542393376252, -0.33660492613760157, -0.024663941486403884, 0.1172751972420942, -0.021832135450802759, 0.21440383631745469, 0.20828506390107443, -0.10289957687018361}, {0.0, 0.50968169360260451, -0.48159141882733714, -0.10856607456906017, -0.026802006374108955, -0.24967309940249552, -0.21422424792787859, 0.019271890369619571, 0.08065394481240884, -0.061665636719946543, 0.031613782215493547, 0.069574436103950893, -0.07180222507768147, -0.14447996563879059, 0.012044815820150268, -0.0073237976200291044}, 1 / 2.0, }, { 16, /* marshall */ {0.38455665328113242, 0.50304089890302783, 0.33653970418909934, 0.085604896315814846, -0.070239383452479598, -0.10479060878654689, -0.060150883776583335, 0.030121882977878822, 0.12441775056532201, 0.18287316824579156, 0.17035705141865287, 0.10315414401519916, 0.036357097566567576, 0.024474446155666255, 0.042359967009557103, 0.059946316626725109}, {0.0, 0.68167571829534335, 0.16877527811114035, -0.17427551663276897, -0.25780056810728452, -0.16065744581310681, -0.032007062964857856, 0.033882840656718101, -0.0038880045892747792, -0.084876415098991506, -0.13865107122780057, -0.10073571899064113, -0.013199668806255366, 0.038170305284592504, -0.026492576852036546, -0.12667775510054707}, 1 / 4.2, } }; /* //////////////////////////////////////////////////////////////////////// */ void CabinetI::init() { h = 0; model = 0; } void CabinetI::switch_model (int m) { if (m < 0) m = 0; else if (m > 5) m = 5; model = m; n = models[m].n; a = models[m].a; b = models[m].b; gain = models[m].gain * DSP::db2lin (getport(2)); memset (x, 0, sizeof (x)); memset (y, 0, sizeof (y)); } void CabinetI::activate() { switch_model ((int) getport(1)); gain = models[model].gain * DSP::db2lin (getport(2)); } template void CabinetI::one_cycle (int frames) { sample_t * s = ports[0]; int m = (int) getport (1); if (m != model) switch_model (m); sample_t g = models[model].gain * DSP::db2lin (getport(2)); double gf = pow (g / gain, 1 / (double) frames); sample_t * d = ports[3]; for (int i = 0; i < frames; ++i) { register cabinet_float out = s[i] + normal; x[h] = out; out *= a[0]; for (int j = 1, z = h - 1; j < n; --z, ++j) { z &= 15; out += a[j] * x[z]; out += b[j] * y[z]; } y[h] = out; h = (h + 1) & 15; F (d, i, gain * out, adding_gain); gain *= gf; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo CabinetI::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "model", INPUT | CONTROL, {BOUNDED | INTEGER | DEFAULT_1, 0, 5} }, { "gain (dB)", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -24, 24} }, { "out", OUTPUT | AUDIO, {0} } }; /* //////////////////////////////////////////////////////////////////////// */ template <> void Descriptor::setup() { UniqueID = 1766; Label = "CabinetI"; Properties = HARD_RT; Name = CAPS "CabinetI - Loudspeaker cabinet emulation"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } /* CabinetII ////////////////////////////////////////////////////////////// */ #include "Cabinet-Models32.h" void CabinetII::init() { if (fs < 46000) models = models44100; else if (fs < 72000) models = models48000; else if (fs < 92000) models = models88200; else models = models96000; h = 0; model = 0; } void CabinetII::switch_model (int m) { model = m; n = models[m].n; a = models[m].a; b = models[m].b; gain = models[m].gain * DSP::db2lin (getport(2)); memset (x, 0, sizeof (x)); memset (y, 0, sizeof (y)); } void CabinetII::activate() { switch_model ((int) getport(1)); } template void CabinetII::one_cycle (int frames) { sample_t * s = ports[0]; int m = (int) getport (1); if (m != model) switch_model (m); sample_t g = models[model].gain * DSP::db2lin (getport(2)); double gf = pow (g / gain, 1 / (double) frames); sample_t * d = ports[3]; for (int i = 0; i < frames; ++i) { register cabinet_float out = s[i] + normal; x[h] = out; out *= a[0]; for (int j = 1, z = h - 1; j < n; --z, ++j) { z &= 31; out += a[j] * x[z]; out += b[j] * y[z]; } y[h] = out; h = (h + 1) & 31; F (d, i, gain * out, adding_gain); gain *= gf; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo CabinetII::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "model", INPUT | CONTROL, {BOUNDED | INTEGER | DEFAULT_1, 0, 7} }, { "gain (dB)", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -24, 24} }, { "out", OUTPUT | AUDIO, {0} } }; /* //////////////////////////////////////////////////////////////////////// */ template <> void Descriptor::setup() { UniqueID = 2581; Label = "CabinetII"; Properties = HARD_RT; Name = CAPS "CabinetII - Refined loudspeaker cabinet emulation"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Cabinet.h000066400000000000000000000057161247673406200211560ustar00rootroot00000000000000/* Cabinet.h Copyright 2002-5 Tim Goetze http://quitte.de/dsp/ CabinetI - 16th order IIR filters modeled after various impulse responses from Steve Harris' 'imp' plugin. Limited to 44.1 kHz sample rate. CabinetII - 32nd order IIR filters modeled after the same impulse responses using a different algorithm. Versions for 44.1 / 48 / 88.2 / 96 kHz sample rates, switched at runtime. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _CABINET_H_ #define _CABINET_H_ #include "dsp/util.h" /* cabinet_float sets the data type used for the IIR history and thus the * computing precision. doubles tend to make the sound more vivid and lively. * You can squeeze out a few extra cycles by making this 'float' if needed. * Be warned though that CabinetII has not been tested with 32-bit floats and * might become unstable due to the lower computing precision. */ typedef double cabinet_float; typedef struct { int n; cabinet_float a[16], b[16]; float gain; } Model16; typedef struct { int n; cabinet_float a[32], b[32]; float gain; } Model32; class CabinetI : public Plugin { public: sample_t gain; static Model16 models []; int model; void switch_model (int m); int n, h; cabinet_float * a, * b; cabinet_float x[16], y[16]; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* Second version with 32nd order filters precalculated for * 44.1 / 48 / 88.2 / 96 kHz sample rates */ class CabinetII : public Plugin { public: sample_t gain; static Model32 models44100 []; static Model32 models48000 []; static Model32 models88200 []; static Model32 models96000 []; Model32 * models; int model; void switch_model (int m); int n, h; cabinet_float * a, * b; cabinet_float x[32], y[32]; template void one_cycle (int frames); public: static PortInfo port_info []; sample_t adding_gain; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _CABINET_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Chorus.cc000066400000000000000000000237631247673406200212140ustar00rootroot00000000000000/* Chorus.cc Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ mono and mono-to-stereo chorus units. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Chorus.h" #include "Descriptor.h" template void ChorusI::one_cycle (int frames) { sample_t * s = ports[0]; double one_over_n = 1 / (double) frames; double ms = .001 * fs; double t = time; time = getport(1) * ms; double dt = (time - t) * one_over_n; double w = width; width = getport(2) * ms; /* clamp, or we need future samples from the delay line */ if (width >= t - 3) width = t - 3; double dw = (width - w) * one_over_n; if (rate != *ports[3]) lfo.set_f (max (rate = getport(3), .000001), fs, lfo.get_phase()); double blend = getport(4); double ff = getport(5); double fb = getport(6); sample_t * d = ports[7]; DSP::FPTruncateMode truncate; for (int i = 0; i < frames; ++i) { sample_t x = s[i]; /* truncate the feedback tap to integer, better quality for less * cycles (just a bit of zipper when changing 't', but it does sound * interesting) */ int ti; fistp (t, ti); x -= fb * delay[ti]; delay.put (x + normal); # if 0 /* allpass delay sounds a little cleaner for a chorus * but sucks big time when flanging. */ x = blend * x + ff * tap.get (delay, t + w * lfo.get()); # elif 0 /* linear interpolation */ x = blend * x + ff * delay.get_at (t + w * lfo.get()); # else /* cubic interpolation */ x = blend * x + ff * delay.get_cubic (t + w * lfo.get()); # endif F (d, i, x, adding_gain); t += dt; w += dw; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo ChorusI::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "t (ms)", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_LOW, 2.5, 40} }, { "width (ms)", INPUT | CONTROL, {BOUNDED | DEFAULT_1, .5, 10} }, { "rate (Hz)", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 5} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "feedforward", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1767; Label = "ChorusI"; Properties = HARD_RT; Name = CAPS "ChorusI - Mono chorus/flanger"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ template void StereoChorusI::one_cycle (int frames) { sample_t * s = ports[0]; double one_over_n = 1 / (double) frames; double ms = .001 * fs; double t = time; time = getport(1) * ms; double dt = (time - t) * one_over_n; double w = width; width = getport(2) * ms; /* clamp, or we need future samples from the delay line */ if (width >= t - 1) width = t - 1; double dw = (width - w) * one_over_n; if (rate != *ports[3] && phase != *ports[4]) { rate = getport(3); phase = getport(4); double phi = left.lfo.get_phase(); left.lfo.set_f (max (rate, .000001), fs, phi); right.lfo.set_f (max (rate, .000001), fs, phi + phase * M_PI); } double blend = getport(5); double ff = getport(6); double fb = getport(7); sample_t * dl = ports[8]; sample_t * dr = ports[9]; /* to go sure (on i386) that the fistp instruction does the right thing * when looking up fractional sample indices */ DSP::FPTruncateMode truncate; for (int i = 0; i < frames; ++i) { sample_t x = s[i]; /* truncate the feedback tap to integer, better quality for less * cycles (just a bit of zipper when changing 't', but it does sound * interesting) */ int ti; fistp (t, ti); x -= fb * delay[ti]; delay.put (x + normal); sample_t l = blend * x + ff * delay.get_cubic (t + w * left.lfo.get()); sample_t r = blend * x + ff * delay.get_cubic (t + w * right.lfo.get()); F (dl, i, l, adding_gain); F (dr, i, r, adding_gain); t += dt; w += dw; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo StereoChorusI::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "t (ms)", INPUT | CONTROL, {BOUNDED | DEFAULT_MIN, 2.5, 40} }, { "width (ms)", INPUT | CONTROL, {BOUNDED | DEFAULT_1, .5, 10} }, { "rate (Hz)", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 5} }, { "phase", INPUT | CONTROL, {BOUNDED | DEFAULT_MAX, 0, 1} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "feedforward", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1768; Label = "StereoChorusI"; Properties = HARD_RT; Name = CAPS "StereoChorusI - Stereo chorus/flanger"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ template void ChorusII::one_cycle (int frames) { sample_t * s = ports[0]; double one_over_n = 1 / (double) frames; double ms = .001 * fs; double t = time; time = getport(1) * ms; double dt = (time - t) * one_over_n; double w = width; width = getport(2) * ms; /* clamp, or we need future samples from the delay line */ if (width >= t - 3) width = t - 3; double dw = (width - w) * one_over_n; if (rate != *ports[3]) set_rate (*ports[3]); double blend = getport(4); double ff = getport(5); double fb = getport(6); sample_t * d = ports[7]; DSP::FPTruncateMode truncate; for (int i = 0; i < frames; ++i) { sample_t x = s[i]; x -= fb * delay.get_cubic (t); delay.put (filter.process (x + normal)); double a = 0; for (int j = 0; j < Taps; ++j) a += taps[j].get (delay, t, w); x = blend * x + ff * a; F (d, i, x, adding_gain); t += dt; w += dw; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo ChorusII::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "t (ms)", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_LOW, 2.5, 40} }, { "width (ms)", INPUT | CONTROL, {BOUNDED | DEFAULT_1, .5, 10} }, { "rate", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "feedforward", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2583; Label = "ChorusII"; Properties = HARD_RT; Name = CAPS "ChorusII - Mono chorus/flanger modulated by a fractal"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ template void StereoChorusII::one_cycle (int frames) { sample_t * s = ports[0]; double one_over_n = 1 / (double) frames; double ms = .001 * fs; double t = time; time = getport(1) * ms; double dt = (time - t) * one_over_n; double w = width; width = getport(2) * ms; /* clamp, or we need future samples from the delay line */ if (width >= t - 1) width = t - 1; double dw = (width - w) * one_over_n; set_rate (*ports[3]); double blend = getport(4); double ff = getport(5); double fb = getport(6); sample_t * dl = ports[7]; sample_t * dr = ports[8]; /* to go sure (on i386) that the fistp instruction does the right thing * when looking up fractional sample indices */ DSP::FPTruncateMode truncate; for (int i = 0; i < frames; ++i) { sample_t x = s[i]; /* truncate the feedback tap to integer, better quality for less * cycles (just a bit of zipper when changing 't', but it does sound * interesting) */ int ti; fistp (t, ti); x -= fb * delay[ti]; delay.put (x + normal); double m; m = left.lfo_lp.process (left.fractal.get()); sample_t l = blend * x + ff * delay.get_cubic (t + w * m); m = right.lfo_lp.process (right.fractal.get()); sample_t r = blend * x + ff * delay.get_cubic (t + w * m); F (dl, i, l, adding_gain); F (dr, i, r, adding_gain); t += dt; w += dw; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo StereoChorusII::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "t (ms)", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 2.5, 40} }, { "width (ms)", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, .5, 10} }, { "rate", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "feedforward", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2584; Label = "StereoChorusII"; Properties = HARD_RT; Name = CAPS "StereoChorusII - Stereo chorus/flanger modulated by a fractal"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Chorus.h000066400000000000000000000120651247673406200210470ustar00rootroot00000000000000/* Chorus.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ mono and stereo chorus/flanger units, traditional designs and some differentiated a bit further. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _CHORUS_H_ #define _CHORUS_H_ #include "dsp/Sine.h" #include "dsp/Roessler.h" #include "dsp/Lorenz.h" #include "dsp/Delay.h" #include "dsp/OnePole.h" #include "dsp/BiQuad.h" #include "dsp/RBJ.h" class ChorusStub : public Plugin { public: sample_t time, width, rate; }; class ChorusI : public ChorusStub { public: DSP::Sine lfo; DSP::Delay delay; DSP::DelayTapA tap; template void one_cycle (int frames); public: static PortInfo port_info []; void init() { rate = .15; delay.init ((int) (.040 * fs)); } void activate() { time = 0; width = 0; rate = *ports[3]; delay.reset(); tap.reset(); lfo.set_f (rate, fs, 0); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; class StereoChorusI : public ChorusStub { public: sample_t rate; sample_t phase; DSP::Delay delay; struct { DSP::Sine lfo; DSP::DelayTapA tap; } left, right; template void one_cycle (int frames); public: static PortInfo port_info []; void init() { rate = .15; phase = .5; /* pi */ delay.init ((int) (.040 * fs)); } void activate() { time = 0; width = 0; delay.reset(); left.tap.reset(); right.tap.reset(); left.lfo.set_f (rate, fs, 0); right.lfo.set_f (rate, fs, phase * M_PI); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* //////////////////////////////////////////////////////////////////////// */ #define FRACTAL_RATE 0.02 /* fractally modulated Chorus units */ class FracTap { public: DSP::Lorenz f1; DSP::Roessler f2; DSP::OnePoleLP lp; void init (double fs) { lp.set_f (30. / fs); f1.init (.001, frandom()); f2.init (.001, frandom()); } void set_rate (sample_t r) { f1.set_rate (r * FRACTAL_RATE); f2.set_rate (3.3 * r * FRACTAL_RATE); } /* t = time, w = width, should inline nicely */ sample_t get (DSP::Delay & d, double t, double w) { double m = lp.process (f1.get() + .3 * f2.get()); return d.get_cubic (t + w * m); } }; class ChorusII : public ChorusStub { public: enum { Taps = 1 }; FracTap taps[Taps]; DSP::BiQuad filter; DSP::Delay delay; template void one_cycle (int frames); void set_rate (sample_t r) { rate = r; for (int i = 0; i < Taps; ++i) { taps[i].set_rate (rate * (i * FRACTAL_RATE) / Taps); // fprintf (stderr, "[%d] %.3f\n", i, (rate * (i * FRACTAL_RATE) / Taps)); } } public: static PortInfo port_info []; void init() { delay.init ((int) (.040 * fs)); for (int i = 0; i < Taps; ++i) taps[i].init (fs); DSP::RBJ::HiShelve (1000. / fs, 1., 6, filter.a, filter.b); } void activate() { time = 0; width = 0; set_rate (*ports[3]); delay.reset(); filter.reset(); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; class StereoChorusII : public ChorusStub { public: sample_t rate; sample_t phase; DSP::Delay delay; struct { DSP::Roessler fractal; DSP::OnePoleLP lfo_lp; DSP::DelayTapA tap; } left, right; template void one_cycle (int frames); void set_rate (sample_t r) { rate = r; left.fractal.set_rate (rate * FRACTAL_RATE); right.fractal.set_rate (rate * FRACTAL_RATE); left.lfo_lp.set_f (3. / fs); right.lfo_lp.set_f (3. / fs); } public: static PortInfo port_info []; sample_t adding_gain; void init() { phase = .5; /* pi */ delay.init ((int) (.040 * fs)); left.fractal.init (.001, frandom()); right.fractal.init (.001, frandom()); } void activate() { time = 0; width = 0; delay.reset(); left.tap.reset(); right.tap.reset(); set_rate (*ports[3]); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _CHORUS_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Click.cc000066400000000000000000000077551247673406200210010ustar00rootroot00000000000000/* Click.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ Plugins playing a sound snippet in regular intervals. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "waves/click.h" #include "waves/money.h" #include "Click.h" #include "Descriptor.h" void ClickStub::init (float * _wave, int _N) { wave = _wave; N = _N; bpm = -1; } template void ClickStub::one_cycle (int frames) { bpm = getport(0); sample_t gain = getport(1) * *ports[1]; lp.set (1 - *ports[2]); sample_t * d = ports[3]; while (frames) { if (period == 0) { period = (int) (fs * 60 / bpm); played = 0; } int n = min (frames, period); if (played < N) { n = min (n, N - played); for (int i = 0; i < n; ++i) { sample_t x = gain * wave [played + i] + normal; F (d, i, lp.process (x), adding_gain); normal = -normal; } played += n; } else { for (int i = 0; i < n; ++i) { F (d, i, lp.process (normal), adding_gain); normal = -normal; } } period -= n; frames -= n; d += n; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo ClickStub::port_info [] = { { "bpm", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 4, 244} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "damping", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; /* //////////////////////////////////////////////////////////////////////// */ #define LENGTH(W) ((int) (sizeof (W) / sizeof (float))) void Click::init() { this->ClickStub::init (click, LENGTH (click)); } template <> void Descriptor::setup() { UniqueID = 1769; Label = "Click"; Properties = HARD_RT; Name = CAPS "Click - Metronome"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo CEO::port_info [] = { { "mpm", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 4, 244} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "damping", INPUT | CONTROL, {BOUNDED | DEFAULT_MIN, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; void CEO::init() { this->ClickStub::init (money, LENGTH (money)); } template <> void Descriptor::setup() { UniqueID = 1770; Label = "CEO"; Properties = HARD_RT; Name = CAPS "CEO - Chief Executive Oscillator"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ float dirac [] = { 1, }; PortInfo Dirac::port_info [] = { { "ppm", INPUT | CONTROL, {BOUNDED | DEFAULT_MIN, 30, 60} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "damping", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; void Dirac::init() { this->ClickStub::init (dirac, LENGTH (dirac)); } template <> void Descriptor::setup() { UniqueID = 2585; Label = "Dirac"; Properties = HARD_RT; Name = CAPS "Dirac - One-sample impulse generator"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Click.h000066400000000000000000000034211247673406200206250ustar00rootroot00000000000000/* Click.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ units perpetually repeating a recorded sample. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _CLICK_H_ #define _CLICK_H_ #include "dsp/OnePole.h" #include "dsp/util.h" class ClickStub : public Plugin { public: sample_t bpm; float * wave; int N; /* number of samples in wave */ DSP::OnePoleLP lp; int period; /* frames remaining in period */ int played; /* frames played from sample */ template void one_cycle (int frames); public: static PortInfo port_info []; void init (float * _wave, int _N); void activate() { played = 0; period = 0; } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; class Click : public ClickStub { public: void init(); }; class CEO : public ClickStub { public: void init(); static PortInfo port_info []; }; class Dirac : public ClickStub { public: void init(); static PortInfo port_info []; }; #endif /* _CLICK_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Clip.cc000066400000000000000000000055311247673406200206310ustar00rootroot00000000000000/* Clip.cc Copyright 2003-7 Tim Goetze http://quitte.de/dsp/ simple oversampled hard clipper */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Clip.h" #include "Descriptor.h" void Clip::init() { gain = 1; threshold[0] = -.9; threshold[1] = +.9; /* going a bit lower than nominal with fc */ double f = .5 * M_PI / OVERSAMPLE; /* construct the upsampler filter kernel */ DSP::sinc (f, up.c, FIR_SIZE); DSP::kaiser (up.c, FIR_SIZE, 6.4); /* copy upsampler filter kernel for downsampler, make sum */ double s = 0; for (int i = 0; i < up.n; ++i) down.c[i] = up.c[i], s += up.c[i]; /* scale downsampler kernel for unity gain */ s = 1 / s; for (int i = 0; i < down.n; ++i) down.c[i] *= s; /* scale upsampler kernel for unity gain */ s *= OVERSAMPLE; for (int i = 0; i < up.n; ++i) up.c[i] *= s; } inline sample_t Clip::clip (sample_t a) { if (a < threshold[0]) return threshold[0]; if (a > threshold[1]) return threshold[1]; return a; } template void Clip::one_cycle (int frames) { sample_t * s = ports[0]; double g = getport (1); double gf; if (g == gain_db) gf = 1; else { gain_db = g; sample_t g = DSP::db2lin (gain_db); gf = pow (g / gain, 1 / (double) frames); } sample_t * d = ports[2]; *ports[3] = OVERSAMPLE; for (int i = 0; i < frames; ++i) { register sample_t a = gain * s[i]; a = down.process (clip (up.upsample (a))); for (int o = 1; o < OVERSAMPLE; ++o) down.store (clip (up.pad (o))); F (d, i, a, adding_gain); gain *= gf; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Clip::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain (dB)", INPUT | CONTROL, {BOUNDED | DEFAULT_1, -72, 72} }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 1771; Label = "Clip"; Properties = HARD_RT; Name = CAPS "Clip - Hard clipper, 8x oversampled"; Maker = "Tim Goetze "; Copyright = "GPL, 2003-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Clip.h000066400000000000000000000033221247673406200204670ustar00rootroot00000000000000/* Clip.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ oversampled hard ('diode', 'transistor', sometimes 'op-amp') clipper. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _CLIP_H_ #define _CLIP_H_ #include "dsp/util.h" #include "dsp/FIR.h" #include "dsp/sinc.h" #include "dsp/windows.h" class Clip : public Plugin { public: sample_t gain, gain_db; sample_t threshold[2]; enum { OVERSAMPLE = 8, FIR_SIZE = 64, }; /* antialias filters */ DSP::FIRUpsampler up; DSP::FIR down; template void one_cycle (int frames); inline sample_t clip (sample_t x); public: static PortInfo port_info[]; Clip() : up (FIR_SIZE, OVERSAMPLE), down (FIR_SIZE) { } void init(); void activate() { up.reset(); down.reset(); gain_db = *ports[1]; gain = DSP::db2lin (gain_db); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _CLIP_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Compress.cc000066400000000000000000000072761247673406200215450ustar00rootroot00000000000000/* Compress.cc Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ mono compressor suitable for solo instruments. adaptation of Steve Harris' 'sc1' unit, with minor tweaks: table lookup for attack and release time to frames mapping replaced with exp. port order changed. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Compress.h" #include "Descriptor.h" template void Compress::one_cycle (int frames) { sample_t * s = ports[0]; sample_t range = DSP::db2lin (getport(1)); sample_t ratio = (*ports[2] - 1) / getport(2); /* sc1 has lookup tables here, and they're only 40 % used (400 ms/1 s). * thus, sc1's attack/release controls are a bit coarse due to truncation * error. calling exp() once per cycle doesn't seem too expensive. * * besides, i have a suspicion that the attack and release parameters * don't work like they should. if they, as the code suggests, control * an exponential envelope fade, pow (.5, n_frames) or something like * that seems more appropriate. so ... * * TODO: check whether these parameters work like they should, try pow() */ double ga = exp (-1 / (fs * getport(3))); double gr = exp (-1 / (fs * getport(4))); sample_t threshold = getport(5); sample_t knee = getport(6); sample_t * d = ports[7]; sample_t knee0 = DSP::db2lin (threshold - knee); sample_t knee1 = DSP::db2lin (threshold + knee); sample_t ef_a = ga * .25; sample_t ef_ai = 1 - ef_a; for (int i = 0; i < frames; ++i) { sum += s[i] * s[i]; if (amp > env) env = env * ga + amp * (1 - ga); else env = env * gr + amp * (1 - gr); if ((count++ & 3) == 3) { amp = rms.process (sum * .25); sum = 0; if (env < knee0) gain_t = 1; else if (env < knee1) { float x = -(threshold - knee - DSP::lin2db (env)) / knee; gain_t = DSP::db2lin (-knee * ratio * x * x * 0.25f); } else gain_t = DSP::db2lin ((threshold - DSP::lin2db (env)) * ratio); } gain = gain * ef_a + gain_t * ef_ai; F (d, i, s[i] * gain * range, adding_gain); } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Compress::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain (dB)", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 24} }, { "ratio (1:n)", INPUT | CONTROL, {BOUNDED | DEFAULT_MIN, 1, 10} }, { "attack (s)", INPUT | CONTROL, {BOUNDED | DEFAULT_MIN, .001, 1} }, { "release (s)", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, .001, 1} }, { "threshold (dB)", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -30, 400} }, { "knee radius (dB)", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 1, 10} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1772; Label = "Compress"; Properties = HARD_RT; Name = CAPS "Compress - Mono compressor"; Maker = "Tim Goetze , Steve Harris "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Compress.h000066400000000000000000000027541247673406200214030ustar00rootroot00000000000000/* Compress.h Copyright 2004-5 Tim Goetze , Steve Harris http://quitte.de/dsp/ mono compressor. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _COMPRESS_H_ #define _COMPRESS_H_ #include "dsp/RMS.h" #include "dsp/util.h" class Compress : public Plugin { public: double fs; sample_t f; DSP::RMS rms; sample_t sum, amp, env, gain, gain_t; int count; template void one_cycle (int frames); public: static PortInfo port_info []; void init() {} void activate() { rms.reset(); sum = 0; count = 0; amp = 0; env = 0; gain = 0; gain_t = 0; } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _COMPRESS_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Descriptor.h000066400000000000000000000125011247673406200217150ustar00rootroot00000000000000/* Descriptor.h Copyright 2004-10 Tim Goetze http://quitte.de/dsp/ Creating a LADSPA_Descriptor for a CAPS plugin via a C++ template, saving a virtual function call compared to the usual method used for C++ plugins in a C context. Descriptor

expects P to declare some common methods, like init(), activate() etc, plus a static port_info[] and LADSPA_Data * ports[] and adding_gain. (P should derive from Plugin, too.) */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DESCRIPTOR_H_ #define _DESCRIPTOR_H_ #ifdef __SSE__ #include #endif #ifdef __SSE3__ #include #endif /* common stub for Descriptor makes it possible to delete() without special- * casing for every plugin class. */ class DescriptorStub : public LADSPA_Descriptor { public: DescriptorStub() { PortCount = 0; } ~DescriptorStub() { if (PortCount) { delete [] PortNames; delete [] PortDescriptors; delete [] PortRangeHints; } } }; inline void processor_specific_denormal_measures() { #ifdef __SSE3__ /* this one works reliably on a 6600 Core2 */ _MM_SET_DENORMALS_ZERO_MODE (_MM_DENORMALS_ZERO_ON); #endif #ifdef __SSE__ /* this one doesn't ... */ _MM_SET_FLUSH_ZERO_MODE (_MM_FLUSH_ZERO_ON); #endif } template class Descriptor : public DescriptorStub { public: LADSPA_PortRangeHint * ranges; public: Descriptor() { setup(); } void setup(); void autogen() { PortCount = (sizeof (T::port_info) / sizeof (PortInfo)); /* unroll PortInfo members */ const char ** names = new const char * [PortCount]; LADSPA_PortDescriptor * desc = new LADSPA_PortDescriptor [PortCount]; ranges = new LADSPA_PortRangeHint [PortCount]; /* could also assign directly but const_cast is ugly. */ for (int i = 0; i < (int) PortCount; ++i) { names[i] = T::port_info[i].name; desc[i] = T::port_info[i].descriptor; ranges[i] = T::port_info[i].range; } PortNames = names; PortDescriptors = desc; PortRangeHints = ranges; /* LADSPA_Descriptor vtable entries */ instantiate = _instantiate; connect_port = _connect_port; activate = _activate; run = _run; run_adding = _run_adding; set_run_adding_gain = _set_run_adding_gain; deactivate = 0; cleanup = _cleanup; } static LADSPA_Handle _instantiate ( const struct _LADSPA_Descriptor * d, ulong fs) { T * plugin = new T(); int n = (int) d->PortCount; LADSPA_PortRangeHint * ranges = ((Descriptor *) d)->ranges; plugin->ranges = ranges; plugin->ports = new sample_t * [n]; /* connect to lower bound as a safety measure */ for (int i = 0; i < n; ++i) plugin->ports[i] = &(ranges[i].LowerBound); plugin->fs = fs; plugin->normal = NOISE_FLOOR; plugin->init(); return plugin; } static void _connect_port (LADSPA_Handle h, ulong i, LADSPA_Data * p) { ((T *) h)->ports[i] = p; } static void _activate (LADSPA_Handle h) { T * plugin = (T *) h; plugin->first_run = 1; /* since none of the plugins do any RT-critical work in * activate(), it's safe to defer the actual call to the * plugin's activate() method for the first run() after * the host called in here. * * It's the simplest way to prevent a parameter smoothing sweep * in the first audio block after activation. plugin->activate(); */ } static void _run (LADSPA_Handle h, ulong n) { T * plugin = (T *) h; /* We don't reset the processor flags later, it's true. */ processor_specific_denormal_measures(); /* If this is the first audio block after activation, * initialize the plugin from the current set of parameters. */ if (plugin->first_run) { plugin->activate(); plugin->first_run = 0; } plugin->run (n); plugin->normal = -plugin->normal; } static void _run_adding (LADSPA_Handle h, ulong n) { T * plugin = (T *) h; /* We don't reset the processor flags later, it's true. */ processor_specific_denormal_measures(); /* If this is the first audio block after activation, * initialize the plugin from the current set of parameters. */ if (plugin->first_run) { plugin->activate(); plugin->first_run = 0; } plugin->run_adding (n); plugin->normal = -plugin->normal; } static void _set_run_adding_gain (LADSPA_Handle h, LADSPA_Data g) { T * plugin = (T *) h; plugin->adding_gain = g; } static void _cleanup (LADSPA_Handle h) { T * plugin = (T *) h; delete [] plugin->ports; delete plugin; } }; #endif /* _DESCRIPTOR_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Eq.cc000066400000000000000000000140071247673406200203050ustar00rootroot00000000000000/* Eq.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ 10-band octave-spread equalizer. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include #include "Eq.h" #include "Descriptor.h" /* slight adjustments to gain to keep response optimally flat at * 0 dB gain in all bands */ inline static double adjust_gain (int i, double g) { static float adjust[] = { 0.69238604707174034, 0.67282771124180096, 0.67215187672467813, 0.65768648447259315, 0.65988083755898952, 0.66359580101701909, 0.66485139160960427, 0.65890297086039662, 0.6493229390740376, 0.82305724539749325 }; return g * adjust[i]; } #define Q 1.414 void Eq::init() { eq.init (fs, Q); } void Eq::activate() { for (int i = 0; i < 10; ++i) { gain[i] = getport (1 + i); eq.gain[i] = adjust_gain (i, DSP::db2lin (gain[i])); eq.gf[i] = 1; } } template void Eq::one_cycle (int frames) { sample_t * s = ports[0]; /* evaluate band gain changes and compute recursion factor to prevent * zipper noise */ double one_over_n = frames > 0 ? 1. / frames : 1; for (int i = 0; i < 10; ++i) { sample_t g = getport (1 + i); if (g == gain[i]) { /* no gain factoring */ eq.gf[i] = 1; continue; } gain[i] = g; double want = adjust_gain (i, DSP::db2lin (g)); eq.gf[i] = pow (want / eq.gain[i], one_over_n); } sample_t * d = ports[11]; for (int i = 0; i < frames; ++i) { sample_t x = s[i]; x = eq.process (x); F (d, i, x, adding_gain); } eq.normal = -normal; eq.flush_0(); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Eq::port_info [] = { { "in", INPUT | AUDIO, {0, -1, 1} }, { "31 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "63 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "125 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "250 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "500 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "1 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "2 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "4 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "8 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "16 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1773; Label = "Eq"; Properties = HARD_RT; Name = CAPS "Eq - 10-band equalizer"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void Eq2x2::init() { for (int c = 0; c < 2; ++c) eq[c].init (fs, Q); } void Eq2x2::activate() { /* Fetch current parameter settings so we won't sweep band gains in the * first block to process. */ for (int i = 0; i < 10; ++i) { gain[i] = getport (2 + i); double a = adjust_gain (i, DSP::db2lin (gain[i])); for (int c = 0; c < 2; ++c) eq[c].gf[i] = 1, eq[c].gain[i] = a; } } template void Eq2x2::one_cycle (int frames) { /* evaluate band gain changes and compute recursion factor to prevent * zipper noise */ double one_over_n = frames > 0 ? 1. / frames : 1; for (int i = 0; i < 10; ++i) { double a; if (*ports [2 + i] == gain[i]) /* still same value, no gain fade */ a = 1; else { gain[i] = getport (2 + i); /* prepare factor for logarithmic gain fade */ a = adjust_gain (i, DSP::db2lin (gain[i])); a = pow (a / eq[0].gain[i], one_over_n); } for (int c = 0; c < 2; ++c) eq[c].gf[i] = a; } for (int c = 0; c < 2; ++c) { sample_t * s = ports[c], * d = ports[12 + c]; for (int i = 0; i < frames; ++i) { sample_t x = s[i]; x = eq[c].process (x); F (d, i, x, adding_gain); } } /* flip 'renormal' values */ for (int c = 0; c < 2; ++c) { eq[c].normal = normal; eq[c].flush_0(); } } PortInfo Eq2x2::port_info [] = { { "in:l", INPUT | AUDIO, {0, -1, 1} }, { "in:r", INPUT | AUDIO, {0, -1, 1} }, { "31 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "63 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "125 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "250 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "500 Hz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "1 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "2 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "4 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "8 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "16 kHz", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -48, 24} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2594; Label = "Eq2x2"; Properties = HARD_RT; Name = CAPS "Eq2x2 - stereo 10-band equalizer"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ /* todo: parametric -- 20-400, 60-1k, 150-2.5k, 500-8k, 1k-20k bandwidth 0-2 octaves */ lmms-1.1.3/plugins/LadspaEffect/caps/Eq.h000066400000000000000000000033431247673406200201500ustar00rootroot00000000000000/* Eq.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ equalizer circuit using recursive filtering. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _EQ_H_ #define _EQ_H_ #include "dsp/util.h" #include "dsp/Eq.h" #include "dsp/BiQuad.h" #include "dsp/RBJ.h" class Eq : public Plugin { public: sample_t gain[10]; DSP::Eq<10> eq; int block; enum { BlockSize = 64 }; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; class Eq2x2 : public Plugin { public: sample_t gain[10]; DSP::Eq<10> eq[2]; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _EQ_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/HRTF.cc000066400000000000000000000052701247673406200205050ustar00rootroot00000000000000/* HRTF.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ high-order IIR filtering modeled after HRTF impulse responses */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "HRTF.h" #include "Descriptor.h" #include "elev0.h" /* //////////////////////////////////////////////////////////////////////// */ void HRTF::init() { h = 0; } void HRTF::set_pan (int p) { n = 31; pan = p; if (p >= 0) { left.a = elev0[p].left.a; left.b = elev0[p].left.b; right.a = elev0[p].right.a; right.b = elev0[p].right.b; } else { p = -p; left.a = elev0[p].right.a; left.b = elev0[p].right.b; right.a = elev0[p].left.a; right.b = elev0[p].left.b; } memset (left.y, 0, sizeof (left.y)); memset (right.y, 0, sizeof (right.y)); } template void HRTF::one_cycle (int frames) { sample_t * s = ports[0]; int p = (int) getport(1); if (p != pan) set_pan (p); sample_t * dl = ports[2]; sample_t * dr = ports[3]; double l, r; for (int i = 0; i < frames; ++i) { x[h] = l = r = s[i] + normal; l *= left.a[0]; r *= right.a[0]; for (int j = 1, z = h - 1; j < n; --z, ++j) { z &= 31; l += left.a[j] * x[z]; l += left.b[j] * left.y[z]; r += right.a[j] * x[z]; r += right.b[j] * right.y[z]; } left.y[h] = l; right.y[h] = r; h = (h + 1) & 31; F (dl, i, l, adding_gain); F (dr, i, r, adding_gain); } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo HRTF::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "pan", INPUT | CONTROL, {BOUNDED | INTEGER | DEFAULT_0, -36, 36} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1787; Label = "HRTF"; Properties = HARD_RT; Name = CAPS "HRTF - Head-related transfer function at elevation 0"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/HRTF.h000066400000000000000000000026361247673406200203520ustar00rootroot00000000000000/* HRTF.h Copyright 2002-5 Tim Goetze http://quitte.de/dsp/ IIR filtering based on HRTF data sets */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _HRTF_H_ #define _HRTF_H_ #include "dsp/util.h" class HRTF : public Plugin { public: int pan; int n, h; double x[32]; struct { double * a, * b; double y[32]; } left, right; void set_pan (int p); template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate() { set_pan ((int) *ports[1]); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _HRTF_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Lorenz.cc000066400000000000000000000043471247673406200212170ustar00rootroot00000000000000/* Lorenz.cc Copyright 2002-11 Tim Goetze http://quitte.de/dsp/ the sound of a Lorenz attractor. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include #include "basics.h" #include "Lorenz.h" #include "Descriptor.h" void Lorenz::init() { lorenz.init (h = .001, 0.1 * frandom()); gain = 0; } template void Lorenz::one_cycle (int frames) { lorenz.set_rate (*ports[0]); double g = (gain == *ports[4]) ? 1 : pow (getport(4) / gain, 1. / (double) frames); sample_t * d = ports[5]; sample_t x, sx = getport(1), sy = getport(2), sz = getport(3); for (int i = 0; i < frames; ++i) { lorenz.step(); x = sx * lorenz.get_x() + sy * lorenz.get_y() + sz * lorenz.get_z(); F (d, i, gain * x, adding_gain); gain *= g; } gain = getport(4); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Lorenz::port_info [] = { { "h", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "x", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "y", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "z", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1774; Label = "Lorenz"; Properties = HARD_RT; Name = CAPS "Lorenz - The sound of a Lorenz attractor"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Lorenz.h000066400000000000000000000025141247673406200210530ustar00rootroot00000000000000/* Lorenz.h Copyright 2004-11 Tim Goetze http://quitte.de/dsp/ turns the state of a Lorenz fractal into sound. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _LORENZ_H_ #define _LORENZ_H_ #include "dsp/Lorenz.h" class Lorenz : public Plugin { public: sample_t h, gain; DSP::Lorenz lorenz; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate() { gain = getport(4); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _LORENZ_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Pan.cc000066400000000000000000000101201247673406200204460ustar00rootroot00000000000000/* Pan.cc Copyright 2002-11 Tim Goetze http://quitte.de/dsp/ panorama with width control, stereo image width reduction */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Pan.h" #include "Descriptor.h" void Pan::init() { delay.init ((int) (.040 * fs)); } void Pan::activate() { delay.reset(); tap.reset (400 / fs); set_pan (getport (1)); } inline void Pan::set_pan (sample_t p) { pan = p; double phi = (pan + 1) * M_PI * .25; gain_l = cos (phi); gain_r = sin (phi); } template void Pan::one_cycle (int frames) { sample_t * s = ports[0]; if (pan != *ports[1]) set_pan (getport(1)); sample_t g = getport(2); sample_t width_l = g * gain_r, width_r = g * gain_l; tap.t = (int) (getport(3) * fs * .001); bool mono = getport(4); sample_t * dl = ports[5]; sample_t * dr = ports[6]; sample_t x, xt; if (mono) for (int i = 0; i < frames; ++i) { x = s[i]; xt = tap.get (delay); delay.put (x + normal); x = (gain_l * x + gain_r * x + width_l * xt + width_r * xt) * .5; F (dl, i, x, adding_gain); F (dr, i, x, adding_gain); normal = -normal; } else /* stereo */ for (int i = 0; i < frames; ++i) { x = s[i]; xt = tap.get (delay); delay.put (x + normal); F (dl, i, gain_l * x + width_l * xt, adding_gain); F (dr, i, gain_r * x + width_r * xt, adding_gain); normal = -normal; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Pan::port_info [] = { { "in", INPUT | AUDIO, {0} }, { "pan", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -1, 1} }, { "width", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "t", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.1, 40} }, { "mono", INPUT | CONTROL, {BOUNDED | DEFAULT_0 | INTEGER | TOGGLE, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1788; Label = "Pan"; Properties = HARD_RT; Name = CAPS "Pan - Pan and width"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void Narrower::init() { } void Narrower::activate() { } template void Narrower::one_cycle (int frames) { sample_t * sl = ports[0]; sample_t * sr = ports[1]; if (strength != *ports[2]) strength = *ports[2]; sample_t * dl = ports[3]; sample_t * dr = ports[4]; double xl, xr, m; double dry = 1 - strength, wet = strength; for (int i = 0; i < frames; ++i) { xl = sl[i]; xr = sr[i]; m = wet * (xl + xr) * .5; xl *= dry; xr *= dry; xl += m; xr += m; F (dl, i, xl, adding_gain); F (dr, i, xr, adding_gain); } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Narrower::port_info [] = { { "in:l", INPUT | AUDIO, {0} }, { "in:r", INPUT | AUDIO, {0} }, { "strength", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2595; Label = "Narrower"; Properties = HARD_RT; Name = CAPS "Narrower - Stereo image width reduction"; Maker = "Tim Goetze "; Copyright = "GPL, 2011"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Pan.h000066400000000000000000000037361247673406200203270ustar00rootroot00000000000000/* Pan.h Copyright 2004-11 Tim Goetze http://quitte.de/dsp/ panorama with width control, stereo image width reduction */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _PAN_H_ #define _PAN_H_ #include "dsp/Delay.h" #include "dsp/OnePole.h" class PanTap { public: int t; DSP::OnePoleLP damper; sample_t get (DSP::Delay & delay) { return damper.process (delay[t]); } void reset (double c) { damper.set_f (c); damper.reset(); } }; class Pan : public Plugin { public: sample_t pan; sample_t gain_l, gain_r; DSP::Delay delay; PanTap tap; template void one_cycle (int frames); inline void set_pan (sample_t); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* stereo width reduction */ class Narrower : public Plugin { public: sample_t strength; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _PAN_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Phaser.cc000066400000000000000000000102661247673406200211650ustar00rootroot00000000000000/* Phaser.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ One simple mono phaser, 6 all-pass lines, the usual controls. Another unit in the same vein with the filter modulation controlled by a Lorenz fractal. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Phaser.h" #include "Descriptor.h" template void PhaserI::one_cycle (int frames) { sample_t * s = ports[0]; if (rate != *ports[1]) { rate = getport(1); lfo.set_f (max (.001, rate * (double) blocksize), fs, lfo.get_phase()); } double depth = getport(2); double spread = 1 + getport(3); double fb = getport(4); sample_t * dst = ports[5]; while (frames) { if (remain == 0) remain = 32; int n = min (remain, frames); double d = delay.bottom + delay.range * (1. - fabs (lfo.get())); for (int j = 5; j >= 0; --j) { ap[j].set (d); d *= spread; } for (int i = 0; i < n; ++i) { sample_t x = s[i]; sample_t y = x + y0 * fb + normal; for (int j = 5; j >= 0; --j) y = ap[j].process (y); y0 = y; F (dst, i, x + y * depth, adding_gain); } s += n; dst += n; frames -= n; remain -= n; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo PhaserI::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "rate (Hz)", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 10} }, { "depth", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, 1} }, { "spread", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, M_PI} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, .999} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1775; Label = "PhaserI"; Properties = HARD_RT; Name = CAPS "PhaserI - Mono phaser"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ template void PhaserII::one_cycle (int frames) { sample_t * s = ports[0]; lorenz.set_rate (getport(1) * .08); double depth = getport(2); double spread = 1 + getport(3); double fb = getport(4); sample_t * dst = ports[5]; while (frames) { if (remain == 0) remain = 32; int n = min (remain, frames); double d = delay.bottom + delay.range * (.3 * lorenz.get()); for (int j = 5; j >= 0; --j) { ap[j].set (d); d *= spread; } for (int i = 0; i < n; ++i) { sample_t x = s[i]; sample_t y = x + y0 * fb + normal; for (int j = 5; j >= 0; --j) y = ap[j].process (y); y0 = y; F (dst, i, x + y * depth, adding_gain); } s += n; dst += n; frames -= n; remain -= n; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo PhaserII::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "rate", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "depth", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, 1} }, { "spread", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, M_PI * .5} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, .999} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2586; Label = "PhaserII"; Properties = HARD_RT; Name = CAPS "PhaserII - Mono phaser modulated by a Lorenz fractal"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Phaser.h000066400000000000000000000052261247673406200210270ustar00rootroot00000000000000/* Phaser.h Copyright 2002-5 Tim Goetze http://quitte.de/dsp/ Standard and fractal-modulated phaser units. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _PHASER_H_ #define _PHASER_H_ #include "dsp/Sine.h" #include "dsp/Lorenz.h" #include "dsp/Delay.h" /* all-pass as used by the phaser. */ class PhaserAP { public: sample_t a, m; PhaserAP() { a = m = 0.; } void set (double delay) { a = (1 - delay) / (1 + delay); } sample_t process (sample_t x) { register sample_t y = -a * x + m; m = a * y + x; return y; } }; class PhaserI : public Plugin { public: PhaserAP ap[6]; DSP::Sine lfo; sample_t rate; sample_t y0; struct { double bottom, range; } delay; template void one_cycle (int frames); int blocksize, remain; public: static PortInfo port_info []; void init() { blocksize = 32; } void activate() { y0 = 0.; remain = 0; delay.bottom = 400. / fs; delay.range = 2200. / fs; rate = -1; /* force lfo reset in one_cycle() */ } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* same as above, but filter sweep is controlled by a Lorenz fractal */ class PhaserII : public Plugin { public: double fs; PhaserAP ap[6]; DSP::Lorenz lorenz; sample_t rate; sample_t y0; struct { double bottom, range; } delay; template void one_cycle (int frames); int blocksize, remain; public: static PortInfo port_info []; void init() { blocksize = 32; lorenz.init(); } void activate() { y0 = 0.; remain = 0; delay.bottom = 400. / fs; delay.range = 2200. / fs; rate = -1; /* force lfo reset in one_cycle() */ } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _PHASER_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Preamp.cc000066400000000000000000000115211247673406200211620ustar00rootroot00000000000000/* Preamp.cc Copyright 2003-7 Tim Goetze http://quitte.de/dsp/ Loosely 12AX7-based tube preamp model with 8x oversampling. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include #include "Amp.h" #include "Descriptor.h" void PreampIII::init() { this->AmpStub::init(); DSP::RBJ::LoShelve (200 / fs, .2, -6, filter.a, filter.b); } template void PreampIII::one_cycle (int frames) { sample_t * s = ports[0]; sample_t gain = getport(1); sample_t temp = getport(2) * tube.scale; sample_t * d = ports[3]; *ports[4] = OVERSAMPLE; double g = current.g; current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); /* correction for attenuated first transfer */ current.g *= tube.scale / fabs (tube.transfer (temp)); if (g == 0) g = current.g; /* recursive fade to prevent zipper noise from the 'gain' knob */ double one_over_n = frames > 0 ? 1. / frames : 1; double gf = pow (current.g / g, one_over_n); for (int i = 0; i < frames; ++i) { register sample_t a = s[i] + normal; a = g * tube.transfer (a * temp); a = filter.process (a); a = down.process (tube.transfer_clip (up.upsample (a))); for (int o = 1; o < OVERSAMPLE; ++o) down.store (tube.transfer_clip (up.pad (o))); F (d, i, dc_blocker.process (a), adding_gain); g *= gf; } current.g = g; } /* //////////////////////////////////////////////////////////////////////// */ PortInfo PreampIII::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 10} }, { "temperature", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.005, 1} }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 1776; Label = "PreampIII"; Properties = HARD_RT; Name = CAPS "PreampIII - Tube preamp emulation"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void PreampIV::init() { this->AmpStub::init(); tone.init (fs); } void PreampIV::activate() { this->PreampIII::activate(); tone.activate (ports + 3); } template void PreampIV::one_cycle (int frames) { double one_over_n = frames > 0 ? 1. / frames : 1; sample_t * s = ports[0]; sample_t gain = getport(1); sample_t temp = getport(2) * tube.scale; tone.start_cycle (ports + 3, one_over_n); sample_t * d = ports[7]; *ports[8] = OVERSAMPLE; double g = current.g; current.g = max (gain < 1 ? gain : exp2 (gain - 1), .000001); current.g *= tube.scale / fabs (tube.transfer (temp)); if (g == 0) g = current.g; /* recursive fade to prevent zipper noise from the 'gain' knob */ double gf = pow (current.g / g, one_over_n); for (int i = 0; i < frames; ++i) { register sample_t a = tone.process (s[i] + normal); a = g * tube.transfer (a * temp); a = down.process (tube.transfer_clip (up.upsample (a))); for (int o = 1; o < OVERSAMPLE; ++o) down.store (tube.transfer_clip (up.pad (o))); F (d, i, dc_blocker.process (a), adding_gain); g *= gf; } current.g = g; } /* //////////////////////////////////////////////////////////////////////// */ PortInfo PreampIV::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "gain", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 10} }, { "temperature", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.005, 1} }, { "bass", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "mid", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "treble", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "hi", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -20, 20} }, { "out", OUTPUT | AUDIO, {0} }, { "latency", OUTPUT | CONTROL, {0} } }; template <> void Descriptor::setup() { UniqueID = 1777; Label = "PreampIV"; Properties = HARD_RT; Name = CAPS "PreampIV - Tube preamp emulation + tone controls"; Maker = "Tim Goetze "; Copyright = "GPL, 2002-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/README000066400000000000000000000003661247673406200203140ustar00rootroot00000000000000This is CAPS, the C Audio Plugin Suite ====================================== For all questions, please be referred to the HTML documentation of this software package in the file 'caps.html', also available from http://quitte.de/dsp/caps.html lmms-1.1.3/plugins/LadspaEffect/caps/README.ardour000066400000000000000000000030161247673406200216020ustar00rootroot00000000000000 Ardour Users: Notice and WARNING ================================ ALL the plugins in caps have been renamed as of caps-0.3.0. While this is clearly within the bounds of the LADSPA specification, ardour will fail to load caps plugins from earlier releases referenced in your existing session files should you install caps-0.3.0 over a previous release. As a quick workaround, you can install caps with # make alt-install which will install the plugins as 'caps-ng.so', leaving your existing installation of caps intact so you can manually update your sessions within ardour to use the latest versions of the caps plugins. The downside is you're now stuck with two implementations of identical plugins, and some hosts will (quite sensibly) complain about this. So after you're done updating your ardour sessions, installing caps under its rightful name of 'caps.so' is a good idea. As an alternative, you can also run a search-and-replace on your ardour session files. I'll be happy to help you there should you require assistance, just drop me a mail. RDF metadata ============ Pete Leigh has graciously provided a RDF file that refines the user interface of the Cabinet and SweepVF plugins within ardour (adding labels to the SweepVF filter modes and the Cabinet speaker models to be precise). I have dabbled with these files so if they fail to work for you, it's all my fault. You should be able install the file on your system with # make rdf-install but be warned that I have set this up blindly. Tell me if it works for you. lmms-1.1.3/plugins/LadspaEffect/caps/README.dist000066400000000000000000000012371247673406200212540ustar00rootroot00000000000000 Distribution Notice for the caps audio plugin suite =================================================== If you intend to package caps for redistribution PLEASE include the html and pdf documentation files, and make clear to your users that they exist and where to find them. caps 0.3 Notice and WARNING =========================== The 0.3 release has relabelled the SweepVF, Cabinet, Chorus, StereoChorus and Phaser plugins (appending an 'I' to their label to be precise). Unfortunately, this might break some hosts' session files. Sorry about that. Ardour users are well-advised to read the file 'README.ardour' in this directory before installing caps 0.3.0. lmms-1.1.3/plugins/LadspaEffect/caps/Reverb.cc000066400000000000000000000242731247673406200211730ustar00rootroot00000000000000/* Reverb.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ three reverb units: JVRev, Plate and Plate2x2. the former is a rewrite of STK's JVRev, a traditional design. original comment: This is based on some of the famous Stanford CCRMA reverbs (NRev, KipRev) all based on the Chowning/Moorer/ Schroeder reverberators, which use networks of simple allpass and comb delay filters. the algorithm is mostly unchanged in this implementation; the delay line lengths have been fiddled with to make the stereo field more evenly weighted, and denormal protection has been added. the latter two are based on the circuit discussed in Jon Dattorro's september 1997 JAES paper on effect design (part 1: reverb & filters). */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Reverb.h" #include "Descriptor.h" int JVRev::default_length[9] = { #if 1 /* slightly modified, tg */ 1777, 1847, 1993, 2137, 389, 127, 43, 211, 209 #else 4799, 4999, 5399, 5801, 1051, 337, 113, 573, 487 #endif }; void JVRev::init() { memcpy (length, default_length, sizeof (length)); if (fs != 44100) { double s = fs / 44100.; for (int i = 0; i < 9; ++i) { int v = (int) (s * length[i]); v |= 1; while (!DSP::isprime (v)) v += 2; length[i] = v; } } for (int i = 0; i < 4; ++i) comb[i].init (length[i]); for (int i = 0; i < 3; ++i) allpass[i].init (length[i+4]); left.init (length[7]); right.init (length[8]); /* such a simple number, but i couldn't find a better one. */ apc = .7; } void JVRev::set_t60 (sample_t t) { t60 = t; t = max (.00001, t); for (int i = 0; i < 4; ++i) comb[i].c = pow (10, (-3 * length[i] / (t * fs))); } void JVRev::activate() { for (int i = 0; i < 3; ++i) allpass[i].reset(); for (int i = 0; i < 4; ++i) comb[i].reset(); left.reset(); right.reset(); set_t60 (getport(1)); } template void JVRev::one_cycle (int frames) { sample_t * s = ports[0]; if (t60 != *ports[1]) set_t60 (getport(1)); double wet = getport(2), dry = 1 - wet; sample_t * dl = ports[3]; sample_t * dr = ports[4]; for (int i = 0; i < frames; ++i) { sample_t x = s[i], a = x + normal; x *= dry; /* diffusors */ a = allpass[0].process (a, -apc); a = allpass[1].process (a, -apc); a = allpass[2].process (a, -apc); /* tank */ sample_t t = 0; a -= normal; for (int j = 0; j < 4; ++j) t += comb[j].process (a); F (dl, i, x + wet * left.putget (t), adding_gain); F (dr, i, x + wet * right.putget (t), adding_gain); } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo JVRev::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "t60 (s)", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 4.6} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, .28} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1778; Label = "JVRev"; Properties = HARD_RT; Name = CAPS "JVRev - Stanford-style reverb from STK"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void PlateStub::init() { f_lfo = -1; # define L(i) ((int) (l[i] * fs)) static float l[] = { 0.004771345048889486, 0.0035953092974026408, 0.01273478713752898, 0.0093074829474816042, 0.022579886428547427, 0.030509727495715868, 0.14962534861059779, 0.060481838647894894, 0.12499579987231611, 0.14169550754342933, 0.089244313027116023, 0.10628003091293972 }; /* lh */ input.lattice[0].init (L(0)); input.lattice[1].init (L(1)); /* rh */ input.lattice[2].init (L(2)); input.lattice[3].init (L(3)); /* modulated, width about 12 samples @ 44.1 */ tank.mlattice[0].init (L(4), (int) (0.00040322707570310132 * fs)); tank.mlattice[1].init (L(5), (int) (0.00040322707570310132 * fs)); /* lh */ tank.delay[0].init (L(6)); tank.lattice[0].init (L(7)); tank.delay[1].init (L(8)); /* rh */ tank.delay[2].init (L(9)); tank.lattice[1].init (L(10)); tank.delay[3].init (L(11)); # undef L # define T(i) ((int) (t[i] * fs)) static float t[] = { 0.0089378717113000241, 0.099929437854910791, 0.064278754074123853, 0.067067638856221232, 0.066866032727394914, 0.006283391015086859, 0.01186116057928161, 0.12187090487550822, 0.041262054366452743, 0.089815530392123921, 0.070931756325392295, 0.011256342192802662 }; for (int i = 0; i < 12; ++i) tank.taps[i] = T(i); # undef T /* tuned for soft attack, ambience */ indiff1 = .742; indiff2 = .712; dediff1 = .723; dediff2 = .729; } inline void PlateStub::process (sample_t x, sample_t decay, sample_t * _xl, sample_t * _xr) { x = input.bandwidth.process (x); /* lh */ x = input.lattice[0].process (x, indiff1); x = input.lattice[1].process (x, indiff1); /* rh */ x = input.lattice[2].process (x, indiff2); x = input.lattice[3].process (x, indiff2); /* summation point */ register sample_t xl = x + decay * tank.delay[3].get(); register sample_t xr = x + decay * tank.delay[1].get(); /* lh */ xl = tank.mlattice[0].process (xl, dediff1); xl = tank.delay[0].putget (xl); xl = tank.damping[0].process (xl); xl *= decay; xl = tank.lattice[0].process (xl, dediff2); tank.delay[1].put (xl); /* rh */ xr = tank.mlattice[1].process (xr, dediff1); xr = tank.delay[2].putget (xr); xr = tank.damping[1].process (xr); xr *= decay; xr = tank.lattice[1].process (xr, dediff2); tank.delay[3].put (xr); /* gather output */ xl = .6 * tank.delay[2] [tank.taps[0]]; xl += .6 * tank.delay[2] [tank.taps[1]]; xl -= .6 * tank.lattice[1] [tank.taps[2]]; xl += .6 * tank.delay[3] [tank.taps[3]]; xl -= .6 * tank.delay[0] [tank.taps[4]]; xl += .6 * tank.lattice[0] [tank.taps[5]]; xr = .6 * tank.delay[0] [tank.taps[6]]; xr += .6 * tank.delay[0] [tank.taps[7]]; xr -= .6 * tank.lattice[0] [tank.taps[8]]; xr += .6 * tank.delay[1] [tank.taps[9]]; xr -= .6 * tank.delay[2] [tank.taps[10]]; xr += .6 * tank.lattice[1] [tank.taps[11]]; *_xl = xl; *_xr = xr; } /* //////////////////////////////////////////////////////////////////////// */ template void Plate::one_cycle (int frames) { sample_t * s = ports[0]; input.bandwidth.set (exp (-M_PI * (1. - getport(1)))); sample_t decay = getport(2); double damp = exp (-M_PI * getport(3)); tank.damping[0].set (damp); tank.damping[1].set (damp); sample_t blend = getport(4), dry = 1 - blend; sample_t * dl = ports[5]; sample_t * dr = ports[6]; /* the modulated lattices interpolate, which needs truncated float */ DSP::FPTruncateMode _truncate; for (int i = 0; i < frames; ++i) { normal = -normal; sample_t x = s[i] + normal; sample_t xl, xr; PlateStub::process (x, decay, &xl, &xr); x = dry * s[i]; F (dl, i, x + blend * xl, adding_gain); F (dr, i, x + blend * xr, adding_gain); } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Plate::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "bandwidth", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.005, .999} /* .9995 */ }, { "tail", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, .749} /* .5 */ }, { "damping", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, .0005, 1} /* .0005 */ }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1779; Label = "Plate"; Properties = HARD_RT; Name = CAPS "Plate - Versatile plate reverb"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ template void Plate2x2::one_cycle (int frames) { sample_t * sl = ports[0]; sample_t * sr = ports[1]; input.bandwidth.set (exp (-M_PI * (1. - getport(2)))); sample_t decay = getport(3); double damp = exp (-M_PI * getport(4)); tank.damping[0].set (damp); tank.damping[1].set (damp); sample_t blend = getport(5), dry = 1 - blend; sample_t * dl = ports[6]; sample_t * dr = ports[7]; /* the modulated lattices interpolate, which needs truncated float */ DSP::FPTruncateMode _truncate; for (int i = 0; i < frames; ++i) { normal = -normal; sample_t x = (sl[i] + sr[i] + normal) * .5; sample_t xl, xr; PlateStub::process (x, decay, &xl, &xr); xl = blend * xl + dry * sl[i]; xr = blend * xr + dry * sr[i]; F (dl, i, xl, adding_gain); F (dr, i, xr, adding_gain); } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Plate2x2::port_info [] = { { "in:l", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "in:r", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "bandwidth", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.005, .999} /* .9995 */ }, { "tail", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, .749} /* .5 */ }, { "damping", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, .0005, 1} /* .0005 */ }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1795; Label = "Plate2x2"; Properties = HARD_RT; Name = CAPS "Plate2x2 - Versatile plate reverb, stereo inputs"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Reverb.h000066400000000000000000000112561247673406200210320ustar00rootroot00000000000000/* Reverb.h Copyright 2002-5 Tim Goetze http://quitte.de/dsp/ two reverb units: JVRev and Plate. the former is a rewrite of STK's JVRev, a traditional design. original comment: This is based on some of the famous Stanford CCRMA reverbs (NRev, KipRev) all based on the Chowning/Moorer/ Schroeder reverberators, which use networks of simple allpass and comb delay filters. (STK is an effort of Gary Scavone). the algorithm is mostly unchanged in this implementation; the delay line lengths have been fiddled with to make the stereo field more evenly weighted, and denormal protection has been added. the Plate reverb is based on the circuit discussed in Jon Dattorro's september 1997 JAES paper on effect design (part 1: reverb & filters). */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _REVERB_H_ #define _REVERB_H_ #include #include "dsp/Delay.h" #include "dsp/OnePole.h" #include "dsp/Sine.h" #include "dsp/util.h" /* both reverbs use this */ class Lattice : public DSP::Delay { public: inline sample_t process (sample_t x, double d) { sample_t y = get(); x -= d * y; put (x); return d * x + y; } }; /* helper for JVRev */ class JVComb : public DSP::Delay { public: float c; inline sample_t process (sample_t x) { x += c * get(); put (x); return x; } }; class JVRev : public Plugin { public: static int default_length[9]; sample_t t60; Lattice allpass [3]; JVComb comb[4]; DSP::Delay left, right; double apc; template void one_cycle (int frames); int length [9]; void set_t60 (sample_t t); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class ModLattice { public: float n0, width; DSP::Delay delay; DSP::Sine lfo; DSP::DelayTapA tap; void init (int n, int w) { n0 = n; width = w; delay.init (n + w); } void reset() { delay.reset(); tap.reset(); } inline sample_t process (sample_t x, double d) { /* TODO: try all-pass interpolation */ sample_t y = delay.get_at (n0 + width * lfo.get()); x += d * y; delay.put (x); return y - d * x; /* note sign */ } }; class PlateStub : public Plugin { public: sample_t f_lfo; sample_t indiff1, indiff2, dediff1, dediff2; struct { DSP::OnePoleLP bandwidth; Lattice lattice[4]; } input; struct { ModLattice mlattice[2]; Lattice lattice[2]; DSP::Delay delay[4]; DSP::OnePoleLP damping[2]; int taps[12]; } tank; public: void init(); void activate() { input.bandwidth.reset(); for (int i = 0; i < 4; ++i) { input.lattice[i].reset(); tank.delay[i].reset(); } for (int i = 0; i < 2; ++i) { tank.mlattice[i].reset(); tank.lattice[i].reset(); tank.damping[i].reset(); } tank.mlattice[0].lfo.set_f (1.2, fs, 0); tank.mlattice[1].lfo.set_f (1.2, fs, .5 * M_PI); } inline void process (sample_t x, sample_t decay, sample_t * xl, sample_t * xr); }; /* /////////////////////////////////////////////////////////////////////// */ class Plate : public PlateStub { public: template void one_cycle (int frames); public: static PortInfo port_info []; void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class Plate2x2 : public PlateStub { public: template void one_cycle (int frames); public: static PortInfo port_info []; void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _REVERB_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Roessler.cc000066400000000000000000000045201247673406200215350ustar00rootroot00000000000000/* Roessler.cc Copyright 2002-11 Tim Goetze http://quitte.de/dsp/ the sound of a Roessler attractor. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include #include "basics.h" #include "Roessler.h" #include "Descriptor.h" void Roessler::init() { roessler.init (h = .001, frandom()); gain = 0; } template void Roessler::one_cycle (int frames) { roessler.set_rate (getport(0)); double g = (gain == getport(4)) ? 1 : pow (getport(4) / gain, 1. / (double) frames); sample_t * d = ports[5]; sample_t x, sx = .043 * getport(1), sy = .051 * getport(2), sz = .018 * getport(3); for (int i = 0; i < frames; ++i) { roessler.get(); x = sx * (roessler.get_x() - .515) + sy * (roessler.get_y() + 2.577) + sz * (roessler.get_z() - 2.578); F (d, i, gain * x, adding_gain); gain *= g; } gain = getport(4); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Roessler::port_info [] = { { "h", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "x", INPUT | CONTROL, {BOUNDED | DEFAULT_1, 0, 1} }, { "y", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "z", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1780; Label = "Roessler"; Properties = HARD_RT; Name = CAPS "Roessler - The sound of a Roessler attractor"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Roessler.h000066400000000000000000000025501247673406200214000ustar00rootroot00000000000000/* Roessler.h Copyright 2004-11 Tim Goetze http://quitte.de/dsp/ turns a Roessler fractal into sound. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _ROESSLER_H_ #define _ROESSLER_H_ #include "dsp/Roessler.h" class Roessler : public Plugin { public: sample_t h, gain; DSP::Roessler roessler; template void one_cycle (int frames); public: static PortInfo port_info []; sample_t adding_gain; void init(); void activate() { gain = getport(4); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _ROESSLER_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Scape.cc000066400000000000000000000075451247673406200210040ustar00rootroot00000000000000/* Scape.cc Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Scape.h" #include "Descriptor.h" void Scape::activate() { time = 0; fb = 0; for (int i = 0; i < 4; ++i) svf[i].reset(), svf[i].set_out (SVF::Band), hipass[i].set_f (250. / fs); svf[3].set_out (SVF::Low), delay.reset(); period = 0; } static double dividers [] = { 1 /* 0 sentinel */, 1, 0.5, 0.66666666666666666667, 0.75 }; float frandom2() { float f = frandom(); return f * f * f; } template void Scape::one_cycle (int frames) { sample_t * s = ports[0]; // double one_over_n = 1 / (double) frames; /* delay times */ double t1 = fs * 60. / getport(1); int div = (int) getport(2); double t2 = t1 * dividers[div]; fb = getport(3); double dry = getport(4); dry = dry * dry; double blend = getport(5); sample_t * dl = ports[6]; sample_t * dr = ports[7]; DSP::FPTruncateMode truncate; while (frames) { /* flip 'renormal' addition constant */ normal = -normal; /* retune filters */ if (period <= 1) { period = t2 * .5; float f, q; f = frandom2(); svf[0].set_f_Q (300 + 300 * f / fs, .3); svf[3].set_f_Q (300 + 600 * 2 * f / fs, .6); f = frandom2(); q = f; svf[1].set_f_Q (400 + 2400 * f / fs, q); q = 1 - f; svf[2].set_f_Q (400 + 2400 * f / fs, q); } int n = min ((int) period, frames); if (n < 1) { /* not reached */ #ifdef DEBUG fprintf (stderr, "Scape: %d - %d/%d frames, t2 = %.3f?!?\n", (int) period, n, frames, t2); #endif return; } /* sample loop */ for (int i = 0; i < n; ++i) { sample_t x = s[i] + normal; sample_t x1 = delay.get_at (t1); sample_t x2 = delay.get_at (t2); delay.put (x + fb * x1 + normal); x = dry * x + .2 * svf[0].process (x) + .6 * svf[3].process(x); x1 = svf[1].process (x1 - normal); x2 = svf[2].process (x2 - normal); x1 = hipass[1].process (x1); x2 = hipass[2].process (x2); sample_t x1l, x1r, x2l, x2r; x1l = fabs (lfo[0].get()); x1r = 1 - x1l; x2r = fabs (lfo[1].get()); x2l = 1 - x2r; F (dl, i, x + blend * (x1 * x1l + x2 * x2l), adding_gain); F (dr, i, x + blend * (x2 * x2r + x1 * x1r), adding_gain); } frames -= n; period -= n; s += n; dl += n; dr += n; } } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Scape::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "bpm", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 30, 240} }, { "divider", INPUT | CONTROL, {BOUNDED | INTEGER | DEFAULT_MIN, 2, 4} }, { "feedback", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "dry", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, 0, 1} }, { "out:l", OUTPUT | AUDIO, {0} }, { "out:r", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2588; Label = "Scape"; Properties = HARD_RT; Name = CAPS "Scape - Stereo delay + Filters"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Scape.h000066400000000000000000000032531247673406200206360ustar00rootroot00000000000000/* Scape.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _SCAPE_H_ #define _SCAPE_H_ #include "dsp/Sine.h" #include "dsp/Roessler.h" #include "dsp/Lorenz.h" #include "dsp/Delay.h" #include "dsp/OnePole.h" #include "dsp/BiQuad.h" #include "dsp/RBJ.h" #include "dsp/SVF.h" typedef DSP::SVF<1> SVF; class Scape : public Plugin { public: sample_t time, fb; double period; DSP::Lorenz lfo[2]; DSP::Delay delay; SVF svf[4]; DSP::OnePoleHP hipass[4]; template void one_cycle (int frames); public: static PortInfo port_info []; void init() { delay.init ((int) (2.01 * fs)); /* two seconds = 30 bpm + */ for (int i = 0; i < 2; ++i) lfo[i].init(), lfo[i].set_rate (.00000001 * fs); } void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _SCAPE_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/Sin.cc000066400000000000000000000036031247673406200204710ustar00rootroot00000000000000/* Sin.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ simple sin() generator. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "Sin.h" #include "Descriptor.h" void Sin::init() { sin.set_f (f = .005, fs, 0); gain = 0; } template void Sin::one_cycle (int frames) { if (f != *ports[0]) sin.set_f (f = getport(0), fs, sin.get_phase()); double g = (gain == *ports[1]) ? 1 : pow (getport(1) / gain, 1. / (double) frames); sample_t * d = ports[2]; for (int i = 0; i < frames; ++i) { F (d, i, gain * sin.get(), adding_gain); gain *= g; } gain = getport(1); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo Sin::port_info [] = { { "f", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_100, 0.0001, 20000} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1781; Label = "Sin"; Properties = HARD_RT; Name = CAPS "Sin - Sine wave generator"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/Sin.h000066400000000000000000000024271247673406200203360ustar00rootroot00000000000000/* Sin.h Copyright 2004-11 Tim Goetze http://quitte.de/dsp/ sin() generator. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _SIN_H_ #define _SIN_H_ #include "dsp/Sine.h" class Sin : public Plugin { public: sample_t f, gain; DSP::Sine sin; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate() { gain = getport(1); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _SIN_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/SweepVF.cc000066400000000000000000000210621247673406200212560ustar00rootroot00000000000000/* SweepVF.cc Copyright 2002-7 Tim Goetze http://quitte.de/dsp/ SweepVFI, a lorenz fractal modulating the cutoff frequency of a state-variable (ladder) filter. SweepVFII, the same with Q being modulated by a second fractal. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include #include "basics.h" #include "SweepVF.h" #include "Descriptor.h" #include "dsp/RBJ.h" void SweepVFI::init() { f = .1; Q = .1; lorenz.init(); } void SweepVFI::activate() { svf.reset(); svf.set_f_Q (f = getport(1) / fs, Q = getport(2)); } template void SweepVFI::one_cycle (int frames) { sample_t * s = ports[0]; int blocks = frames / BLOCK_SIZE; if (frames & (BLOCK_SIZE - 1)) ++blocks; double one_over_blocks = 1 / (double) blocks; /* cheesy linear interpolation for f, works well though. */ double df = (getport(1) / fs - f) * one_over_blocks; double dQ = (getport(2) - Q) * one_over_blocks; svf.set_out ((int) getport(3)); lorenz.set_rate (getport(7)); sample_t * d = ports[8]; while (frames) { lorenz.step(); double modulation = getport(4) * lorenz.get_x() + getport(5) * lorenz.get_y() + getport(6) * lorenz.get_z(); double scale = getport(4) + getport(5) + getport(6); modulation *= scale * f; svf.set_f_Q (max (.001, f + modulation), Q); int n = std::min (frames, BLOCK_SIZE); for (int i = 0; i < n; ++i) F (d, i, svf.process (s[i] + normal), adding_gain); s += n; d += n; frames -= n; f += df; Q += dQ; } f = getport(1) / fs; Q = getport(2); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo SweepVFI::port_info [] = { { "in", INPUT | AUDIO, {0, 0, 0} }, { "f", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_LOW, 83, 3383} }, { "Q", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.001, .999} }, { "mode", INPUT | CONTROL, {BOUNDED | DEFAULT_1 | INTEGER, 0, 1} /* only lo and band make sense */ }, { "depth:x", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "depth:y", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "depth:z", INPUT | CONTROL, {BOUNDED | DEFAULT_MAX, 0, 1} }, { "h", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.001, 1} /* .039 */ }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1782; Label = "SweepVFI"; Properties = HARD_RT; Name = CAPS "SweepVFI - Resonant filter swept by a Lorenz fractal"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void SweepVFII::init() { f = .1; Q = .1; lorenz1.init(); lorenz2.init(); } void SweepVFII::activate() { svf.reset(); svf.set_f_Q (f = getport(1) / fs, Q = getport(2)); } template void SweepVFII::one_cycle (int frames) { sample_t * s = ports[0]; int blocks = frames / BLOCK_SIZE; if (frames & (BLOCK_SIZE - 1)) ++blocks; double one_over_blocks = 1 / (double) blocks; /* cheesy linear interpolation for f, works well though. */ double df = (getport(1) / fs - f) * one_over_blocks; double dQ = (getport(2) - Q) * one_over_blocks; svf.set_out ((int) getport(3)); lorenz1.set_rate (getport(7)); lorenz2.set_rate (getport(11)); sample_t * d = ports[12]; while (frames) { /* f modulation */ lorenz1.step(); double modulation1 = getport(4) * lorenz1.get_x() + getport(5) * lorenz1.get_y() + getport(6) * lorenz1.get_z(); double scale1 = getport(4) + getport(5) + getport(6); modulation1 *= scale1 * f; /* Q modulation */ lorenz2.step(); double modulation2 = getport(8) * lorenz2.get_x() + getport(9) * lorenz2.get_y() + getport(10) * lorenz2.get_z(); double scale2 = getport(8) + getport(9) + getport(10); /* enforce Q limit */ double q = Q + (modulation2 * scale2 * Q); q = min (0.96, max (q, 0)); svf.set_f_Q (max (.001, f + modulation1), q); int n = std::min (frames, BLOCK_SIZE); for (int i = 0; i < n; ++i) F (d, i, svf.process (s[i] + normal), adding_gain); s += n; d += n; frames -= n; f += df; Q += dQ; } f = getport(1) / fs; Q = getport(2); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo SweepVFII::port_info [] = { { "in", INPUT | AUDIO, {0, 0, 0} }, { "f", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_LOW, 83, 3383} }, { "Q", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0.001, .999} }, { "mode", INPUT | CONTROL, {BOUNDED | DEFAULT_1 | INTEGER, 0, 1} /* only lo and band make sense */ }, { "f:depth:x", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "f:depth:y", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "f:depth:z", INPUT | CONTROL, {BOUNDED | DEFAULT_MAX, 0, 1} }, { "f:h", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.001, 1} /* .039 */ }, { "Q:depth:x", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0, 1} }, { "Q:depth:y", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "Q:depth:z", INPUT | CONTROL, {BOUNDED | DEFAULT_MAX, 0, 1} }, { "Q:h", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.001, 1} /* .039 */ }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2582; Label = "SweepVFII"; Properties = HARD_RT; Name = CAPS "SweepVFII - Resonant filter, f and Q swept by a Lorenz fractal"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void AutoWah::init() { f = 800 / fs; Q = .5; } void AutoWah::activate() { svf.reset(); svf.set_f_Q (f = getport(1) / fs, Q = getport(2)); svf.set_out (DSP::SVF<1>::Band); /* hi-passing input for envelope RMS calculation */ hp.set_f (250. / fs); /* smoothing the envelope at 20 Hz */ DSP::RBJ::LP (20. * BLOCK_SIZE / fs, .6, filter.a, filter.b); rms.reset(); hp.reset(); filter.reset(); } template void AutoWah::one_cycle (int frames) { sample_t * s = ports[0]; int blocks = frames / BLOCK_SIZE; if (frames & (BLOCK_SIZE - 1)) ++blocks; double one_over_blocks = 1 / (double) blocks; /* cheesy linear interpolation for f, works well though. */ double df = (getport(1) / fs - f) * one_over_blocks; double dQ = (getport(2) - Q) * one_over_blocks; double scale = getport(3); sample_t * d = ports[4]; while (frames) { double m = rms.rms(); m = filter.process (m + normal); /* Leaving debug output in your code is cheesy! */ /* static int _turn = 0; if (_turn++ % 100 == 0) fprintf (stderr, "%.4f\n", m); */ m *= scale * .08; svf.set_f_Q (max (.001, f + m), Q); int n = std::min (frames, BLOCK_SIZE); for (int i = 0; i < n; ++i) { sample_t x = s[i] + normal; /* A stacked SVF in bandpass mode is rather quiet, which is * compensated here */ F (d, i, 2 * svf.process (x), adding_gain); /* for envelope calculation, prefer high f content */ x = hp.process (x); rms.store (x * x); } s += n; d += n; frames -= n; f += df; Q += dQ; normal = -normal; } f = getport(1) / fs; Q = getport(2); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo AutoWah::port_info [] = { { "in", INPUT | AUDIO, {0, 0, 0} }, { "f", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_LOW, 43, 933} }, { "Q", INPUT | CONTROL, {BOUNDED | DEFAULT_LOW, 0.001, .999} }, { "depth", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2593; Label = "AutoWah"; Properties = HARD_RT; Name = CAPS "AutoWah - Resonant envelope-following filter"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/SweepVF.h000066400000000000000000000055001247673406200211170ustar00rootroot00000000000000/* SweepVF.h Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ SweepVFI, a lorenz fractal modulating the cutoff frequency of a state-variable (ladder) filter. SweepVFII, the same with Q being modulated by a second fractal. AutoWah, SVF being modulated by 'instant' amplitude (envelope). */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _SWEEP_VF_H_ #define _SWEEP_VF_H_ #include "dsp/SVF.h" #include "dsp/Lorenz.h" #include "dsp/Roessler.h" #include "dsp/RMS.h" #include "dsp/BiQuad.h" #include "dsp/OnePole.h" class SweepVFI : public Plugin { public: double fs; /* svf parameters */ sample_t f, Q; /* needs to be a power of two */ enum { BLOCK_SIZE = 32 }; DSP::StackedSVF<1,2> svf; DSP::Lorenz lorenz; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; class SweepVFII : public Plugin { public: /* svf parameters */ sample_t f, Q; /* needs to be a power of two */ enum { BLOCK_SIZE = 32 }; DSP::StackedSVF<1,2> svf; DSP::Lorenz lorenz1; DSP::Lorenz lorenz2; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* //////////////////////////////////////////////////////////////////////// */ class AutoWah : public Plugin { public: double fs; /* svf parameters */ sample_t f, Q; /* needs to be a power of two */ enum { BLOCK_SIZE = 32 }; DSP::StackedSVF<1,2> svf; DSP::RMS rms; DSP::BiQuad filter; DSP::OnePoleHP hp; template void one_cycle (int frames); public: static PortInfo port_info []; void init(); void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _SWEEP_VF_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/ToneControls.cc000066400000000000000000000032211247673406200223650ustar00rootroot00000000000000/* ToneControls.cc Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ 4-way Eq for amplifier emulation plugins */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include #include "Amp.h" PreampBand ToneControls::bands[] = { /* f, Q, g */ { 80, 1.20, 1.61}, { 300, 1.10, 1.10}, {1200, 1.14, 1.07}, {4800, .80, 1.06} }; void ToneControls::init (double fs) { for (int i = 0; i < 4; ++i) eq.init_band (i, 2 * bands[i].center * M_PI / fs, bands[i].Q); } double ToneControls::get_band_gain (int i, double g) { return bands[i].adjust * DSP::db2lin (g); } void ToneControls::set_band_gain (int i, float g) { /* sorry, _ != . but hardly readable -- the difference is between local * buffered value and actual Eq band gain */ eq_gain[i] = g; eq.gain[i] = get_band_gain (i, g); } void ToneControls::activate (sample_t ** ports) { for (int i = 0; i < 4; ++i) set_band_gain (i, *ports[i]); eq.reset(); } lmms-1.1.3/plugins/LadspaEffect/caps/ToneStack.cc000066400000000000000000000104631247673406200216350ustar00rootroot00000000000000/* ToneStack.cc Copyright 2006-7 David Yeh Tim Goetze (cosmetics) Tone Stack emulation. * */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "ToneStack.h" #include "Descriptor.h" #include "dsp/tonestack/ks_tab.h" #include "dsp/tonestack/vs_tab.h" DSP::TSParameters DSP::ToneStack::presets[] = { /* for convenience, temporarily define k and MOhms as well as nF and pF */ #define k * 1000 #define M * 1000000 #define nF * 1e-9 #define pF * 1e-12 /* parameter order is R1 - R4, C1 - C3 */ /* { 250000, 1000000, 25000, 56000, 0.25e-9, 20e-9, 20e-9 }, DY */ /* Fender */ {250 k, 1 M, 25 k, 56 k, 250 pF, 20 nF, 20 nF}, /* 59 Bassman 5F6-A */ {250 k, 250 k, 10 k, 100 k, 120 pF, 100 nF, 47 nF}, /* 69 Twin Reverb AA270 */ {250 k, 250 k, 4.8 k, 100 k, 250 pF, 100 nF, 47 nF}, /* 64 Princeton AA1164 */ /* Marshall */ {220 k, 1 M, 22 k, 33 k, 470 pF, 22 nF, 22 nF}, /* 59/81 JCM-800 Lead 100 2203 */ /* R4 is a 10 k fixed + 100 k pot in series actually */ {250 k, 1 M, 25 k, 56 k, 500 pF, 22 nF, 22 nF}, /* 81 2000 Lead */ #if 0 {220 k, 1 M, 22 k, 33 k, 470 pF, 22 nF, 22 nF}, /* 90 JCM-900 Master 2100 (same as JCM-800) */ {250 k, 1 M, 25 k, 33 k, 500 pF, 22 nF, 22 nF}, /* 67 Major Lead 200 */ {250 k, 250 k, 25 k, 56 k, 250 pF, 47 nF, 47 nF}, /* undated M2199 30W solid state */ #endif /* Vox -- R3 is fixed (circuit differs anyway) */ {1 M, 1 M, 10 k, 100 k, 50 pF, 22 nF, 22 nF}, /* 59/86 AC-30 */ #undef k #undef M #undef nF #undef pF }; int DSP::ToneStack::n_presets = TS_N_PRESETS; void ToneStack::activate() { tonestack.activate (ports + 2); } template void ToneStack::one_cycle (int frames) { sample_t * s = ports[0]; tonestack.start_cycle (ports + 1); sample_t * d = ports[5]; for (int i = 0; i < frames; ++i) { register sample_t a = s[i]; a = tonestack.process (a + normal); F (d, i, a, adding_gain); } } PortInfo ToneStack::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "model", INPUT | CONTROL, {BOUNDED | DEFAULT_0 | INTEGER, 0, TS_N_PRESETS - 1} }, { "bass", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "mid", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "treble", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2589; Label = "ToneStack"; Properties = HARD_RT; Name = CAPS "ToneStack - Tone stack emulation"; Maker = "David Yeh "; Copyright = "GPL, 2006-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ template void ToneStackLT::one_cycle (int frames) { sample_t * s = ports[0]; tonestack.updatecoefs (ports + 1); sample_t * d = ports[4]; for (int i = 0; i < frames; ++i) { register sample_t a = s[i]; a = tonestack.process (a + normal); F (d, i, a, adding_gain); } } PortInfo ToneStackLT::port_info [] = { { "in", INPUT | AUDIO, {BOUNDED, -1, 1} }, { "bass", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "mid", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "treble", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, 0, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 2590; Label = "ToneStackLT"; Properties = HARD_RT; Name = CAPS "ToneStackLT - Tone stack emulation, lattice filter 44.1"; Maker = "David Yeh "; Copyright = "GPL, 2006-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/ToneStack.h000066400000000000000000000036051247673406200214770ustar00rootroot00000000000000/* ToneStack.h Copyright 2006-7 David Yeh Tim Goetze (cosmetics) Tone Stack emulation. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _TONESTACK_H_ #define _TONESTACK_H_ #include "dsp/util.h" #include "dsp/windows.h" #include "dsp/ToneStack.h" class ToneStack : public Plugin { private: DSP::ToneStack tonestack; template void one_cycle (int frames); public: static PortInfo port_info []; void init() { tonestack.init (fs); } void activate(); void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* /////////////////////////////////////////////////////////////////////// */ class ToneStackLT : public Plugin { private: DSP::ToneStackLT tonestack; template void one_cycle (int frames); public: static PortInfo port_info []; void init() { tonestack.init (fs); } void activate() { tonestack.activate (ports + 1); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _TONESTACK_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/VCO.cc000066400000000000000000000117541247673406200203750ustar00rootroot00000000000000/* VCO.cc Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ an oversampled triangle/saw/square oscillator, and a combination of two such oscillators with hard sync. TODO: optimize for phase clamping like this: phi -= floor (phi); */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "VCO.h" #include "Descriptor.h" void VCOs::init() { /* going a fair bit lower than nominal with fc because the filter * rolloff is not as steep as we might like it to be. */ double f = .5 * M_PI / OVERSAMPLE; /* construct the downsampler filter kernel */ DSP::sinc (f, down.c, FIR_SIZE); DSP::kaiser (down.c, FIR_SIZE, 6.4); /* normalize downsampler filter gain */ double s = 0; for (int i = 0; i < down.n; ++i) s += down.c[i]; /* scale downsampler kernel */ s = 1 / s; for (int i = 0; i < down.n; ++i) down.c[i] *= s; } template void VCOs::one_cycle (int frames) { vco.set_f (getport(0), OVERSAMPLE * fs); vco.set_saw_square (getport(1), getport(2)); double g = (gain == *ports[3]) ? 1 : pow (getport(3) / gain, 1. / (double) frames); sample_t * d = ports[4]; for (int i = 0; i < frames; ++i) { F (d, i, gain * down.process (vco.get()), adding_gain); for (int o = 1; o < OVERSAMPLE; ++o) down.store (vco.get()); gain *= g; } gain = getport(3); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo VCOs::port_info [] = { { "f", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_100, 1, 5751} }, { "tri .. saw", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "~ .. square", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1783; Label = "VCOs"; Properties = HARD_RT; Name = CAPS "VCOs - Virtual 'analogue' oscillator"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } /* //////////////////////////////////////////////////////////////////////// */ void VCOd::init() { /* going a fair bit lower than nominal with fc because the filter * rolloff is not as steep as we might like it to be. */ double f = .5 * M_PI / OVERSAMPLE; /* construct the downsampler filter kernel */ DSP::sinc (f, down.c, FIR_SIZE); DSP::kaiser (down.c, FIR_SIZE, 6.4); /* normalize downsampler filter gain */ double s = 0; for (int i = 0; i < down.n; ++i) s += down.c[i]; /* scale downsampler kernel */ s = 1 / s; for (int i = 0; i < down.n; ++i) down.c[i] *= s; } template void VCOd::one_cycle (int frames) { vco.set_f (getport(0), OVERSAMPLE * fs, getport(5)); vco.vco[0].set_saw_square (getport(1), getport(2)); vco.vco[1].set_saw_square (getport(3), getport(4)); vco.set_sync (getport(6)); vco.set_blend (getport(7)); double g = (gain == *ports[8]) ? 1 : pow (getport(8) / gain, 1. / (double) frames); sample_t * d = ports[9]; for (int i = 0; i < frames; ++i) { F (d, i, gain * down.process (vco.get()), adding_gain); for (int o = 1; o < OVERSAMPLE; ++o) down.store (vco.get()); gain *= g; } gain = getport(8); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo VCOd::port_info [] = { { "f", INPUT | CONTROL, {BOUNDED | LOG | DEFAULT_100, 1, 5751} }, { "1: tri .. saw", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "1: ~ .. square", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "2: tri .. saw", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "2: ~ .. square", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "2: tune", INPUT | CONTROL, {BOUNDED | DEFAULT_0, -12, 12} }, { "sync", INPUT | CONTROL, {BOUNDED | DEFAULT_0, 0, 1} }, { "blend", INPUT | CONTROL, {BOUNDED | DEFAULT_HIGH, -1, 1} }, { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1784; Label = "VCOd"; Properties = HARD_RT; Name = CAPS "VCOd - Double VCO with detune and hard sync options"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/VCO.h000066400000000000000000000046231247673406200202340ustar00rootroot00000000000000/* VCO.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ an oversampled triangle/saw/square oscillator, and a combination of two such oscillators with hard sync. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _VCO_H_ #define _VCO_H_ #include "dsp/util.h" #include "dsp/VCO.h" #include "dsp/FIR.h" #include "dsp/sinc.h" #include "dsp/windows.h" class VCOs : public Plugin { public: sample_t f, gain; /* ok to just change these as you please, 4/32 works ok, sortof. */ enum { OVERSAMPLE = 8, FIR_SIZE = 64, }; DSP::TriSawSquare vco; /* downsampling filter */ DSP::FIR down; template void one_cycle (int frames); public: static PortInfo port_info[]; VCOs() : down (FIR_SIZE) { } void init(); void activate() { gain = *ports[3]; down.reset(); vco.reset(); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; /* //////////////////////////////////////////////////////////////////////// */ class VCOd : public Plugin { public: double fs; sample_t f, gain; /* ok to just change these as you please, 4/32 works ok, sortof. */ enum { OVERSAMPLE = 8, FIR_SIZE = 64, }; DSP::VCO2 vco; /* downsampling filter */ DSP::FIR down; template void one_cycle (int frames); public: static PortInfo port_info[]; VCOd() : down (FIR_SIZE) { } void init(); void activate() { gain = *ports[8]; down.reset(); vco.reset(); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _VCO_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/White.cc000066400000000000000000000032761247673406200210260ustar00rootroot00000000000000/* White.cc Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ white noise generation. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #include "basics.h" #include "White.h" #include "Descriptor.h" template void White::one_cycle (int frames) { double g = (gain == *ports[0]) ? 1 : pow (getport(0) / gain, 1. / (double) frames); sample_t * d = ports[1]; for (int i = 0; i < frames; ++i) { F (d, i, gain * white.get(), adding_gain); gain *= g; } gain = getport(0); } /* //////////////////////////////////////////////////////////////////////// */ PortInfo White::port_info [] = { { "volume", INPUT | CONTROL, {BOUNDED | DEFAULT_MID, MIN_GAIN, 1} }, { "out", OUTPUT | AUDIO, {0} } }; template <> void Descriptor::setup() { UniqueID = 1785; Label = "White"; Properties = HARD_RT; Name = CAPS "White - White noise generator"; Maker = "Tim Goetze "; Copyright = "GPL, 2004-7"; /* fill port info and vtable */ autogen(); } lmms-1.1.3/plugins/LadspaEffect/caps/White.h000066400000000000000000000024501247673406200206610ustar00rootroot00000000000000/* White.h Copyright 2004-5 Tim Goetze http://quitte.de/dsp/ white noise generator. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _WHITE_H_ #define _WHITE_H_ #include "dsp/White.h" class White : public Plugin { public: sample_t gain; DSP::White white; template void one_cycle (int frames); public: static PortInfo port_info []; void init() {} void activate() { gain = getport(0); } void run (int n) { one_cycle (n); } void run_adding (int n) { one_cycle (n); } }; #endif /* _WHITE_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/basics.h000066400000000000000000000110251247673406200210430ustar00rootroot00000000000000/* basics.h Copyright 2004-9 Tim Goetze http://quitte.de/dsp/ common constants, typedefs, utility functions and simplified LADSPA #defines. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _BASICS_H_ #define _BASICS_H_ #define _GNU_SOURCE 1 #define _USE_GNU 1 /* unlocking some standard math calls. */ #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #define _ISOC99_SOURCE 1 #define _ISOC9X_SOURCE 1 #include #include #include #include #include #include #include /* reducing LADSPA_DEFINES_WITH_LOTS_OF_CHARACTERS_REALLY verbosity */ #define BOUNDED (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE) #define INTEGER LADSPA_HINT_INTEGER #define LOG LADSPA_HINT_LOGARITHMIC #define TOGGLE LADSPA_HINT_TOGGLED #define DEFAULT_0 LADSPA_HINT_DEFAULT_0 #define DEFAULT_1 LADSPA_HINT_DEFAULT_1 #define DEFAULT_100 LADSPA_HINT_DEFAULT_100 #define DEFAULT_440 LADSPA_HINT_DEFAULT_440 #define DEFAULT_MIN LADSPA_HINT_DEFAULT_MINIMUM #define DEFAULT_LOW LADSPA_HINT_DEFAULT_LOW #define DEFAULT_MID LADSPA_HINT_DEFAULT_MIDDLE #define DEFAULT_HIGH LADSPA_HINT_DEFAULT_HIGH #define DEFAULT_MAX LADSPA_HINT_DEFAULT_MAXIMUM #define INPUT LADSPA_PORT_INPUT #define OUTPUT LADSPA_PORT_OUTPUT #define AUDIO LADSPA_PORT_AUDIO #define CONTROL LADSPA_PORT_CONTROL #define HARD_RT LADSPA_PROPERTY_HARD_RT_CAPABLE #define TEN_TO_THE_SIXTH 1000000 #define MIN_GAIN .000001 /* -120 dB */ /* smallest non-denormal 32 bit IEEE float is 1.1810-38 */ #define NOISE_FLOOR .00000000000005 /* -266 dB */ typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; typedef uint16_t uint16; typedef int32_t int32; typedef uint32_t uint32; typedef int64_t int64; typedef uint64_t uint64; typedef struct { const char * name; LADSPA_PortDescriptor descriptor; LADSPA_PortRangeHint range; } PortInfo; typedef LADSPA_Data sample_t; typedef unsigned long ulong; /* flavours for sample store functions run() and run_adding() */ typedef void (*sample_func_t) (sample_t *, int, sample_t, sample_t); inline void store_func (sample_t * s, int i, sample_t x, sample_t gain) { s[i] = x; } inline void adding_func (sample_t * s, int i, sample_t x, sample_t gain) { s[i] += gain * x; } #ifndef max template X min (X x, Y y) { return x < y ? x : (X) y; } template X max (X x, Y y) { return x > y ? x : (X) y; } #endif /* ! max */ template T clamp (T value, T lower, T upper) { if (value < lower) return lower; if (value > upper) return upper; return value; } static inline float frandom() { return (float) rand() / (float) RAND_MAX; } /* NB: also true if 0 */ inline bool is_denormal (float & f) { int32 i = *((int32 *) &f); return ((i & 0x7f800000) == 0); } /* todo: not sure if this double version is correct, actually ... */ inline bool is_denormal (double & f) { int64 i = *((int64 *) &f); return ((i & 0x7fe0000000000000ll) == 0); } #ifdef __i386__ #define TRAP asm ("int $3;") #else #define TRAP #endif /* //////////////////////////////////////////////////////////////////////// */ #define CAPS "C* " class Plugin { public: double fs; /* sample rate */ double adding_gain; /* for run_adding() */ int first_run; /* 1st block after activate(), do no parameter smoothing */ sample_t normal; /* renormal constant */ sample_t ** ports; LADSPA_PortRangeHint * ranges; /* for getport() below */ public: /* get port value, mapping inf or nan to 0 */ inline sample_t getport_unclamped (int i) { sample_t v = *ports[i]; return (isinf (v) || isnan(v)) ? 0 : v; } /* get port value and clamp to port range */ inline sample_t getport (int i) { LADSPA_PortRangeHint & r = ranges[i]; sample_t v = getport_unclamped (i); return clamp (v, r.LowerBound, r.UpperBound); } }; #endif /* _BASICS_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/caps.html000066400000000000000000001526311247673406200212530ustar00rootroot00000000000000 The CAPS Audio Plugin Suite

The CAPS Audio Plugin Suite

Release 0.4.5 http://quitte.de/dsp/caps.html Tim Goetze
March 26, 2011 tim@quitte.de
 

Front Matter

CAPS, the C* Audio Plugin Suite, is a collection of refined LADSPA audio plugins capable of (and mainly intended for) realtime operation. The suite includes DSP units emulating instrument amplifiers, stomp-box classics, versatile 'virtual analogue' oscillators, fractal oscillation, reverb, equalization and more.

My favourite user's quote: “... if your amps beat your plugins, they are *very good* amps.. ;-)” – Thanks, Pete!

Most of the suite is of my own invention, while some plugins are rewrites of existing designs, included for excellence or interest. Inspiring code was authored by (in no particular order): Andrew Simper, Perry Cook, Gary Scavone, Steve Harris, Richard Dobson, Bram de Jong, Robert Bristow-Johnson and others.

The ToneStack plugins and the tone controls of the AmpVTS unit have been designed and implemented by David Yeh at CCRMA.

Invaluable suggestions, bug hunting and fixing and numerous patient reminders of the sorry state of affairs have been graciously provided by (among others and in no particular order) Sampo Savolainen, Damon Chaplin, Paul Winkler and Niclas Wretström.

All of CAPS is free software and distributed in source code.

 
* What's with the C?

So what does the C in the name stand for? Honestly, I don't know.

Complete? Not yet.
C as in the programming language? The source is C++.
Crap? Heaven forbid!
Cute? Why not ...
Common? Not bad either.
C, the latin numeral for one-hundred? Some more to go, but I like the idea.

I've got it! C as in The Caps Audio Plugin Suite! A classic.

 

Download

CAPS is distributed under the GNU General Public License. Other licensing terms can be arranged if you wish, please feel free to contact me.

No Guarantee

While I have bred all the plugins in the suite with the greatest care, there is no guarantee that they will all retain perfect manners under all possible circumstances. Take, for example, the Lorenz plugin, which models a fractal system. How am I to guarantee its output will never go out of range, if people far more knowledgeable about this fractal than me assert its unpredictable behaviour?

This collection 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.

Download the latest release here, it is caps_0.4.5.tar.gz (772 kB).

 

Installation

Provided you run Linux, installation is simply:

$ tar xvfz caps_0.4.5.tar.gz 
$ cd caps-0.4.5 
$ ./configure.py
$ make
$ su
# make install

The configure.py step is optional on Linux but recommended for optimum performance.

You should now be able use the plugins from the collection in any LADSPA-aware host program, like the wonderful pd with the plugin~ external, the inimitable jack-rack, the impressive ardour, the versatile ecasound, the classic snd, and numerous other applications large and small.

You don't run Linux? Why not downgrade now?

OSX

configure.py should detect an OSX build and prepare the relevant flags for Apple's different-thinking ld implementation. Mind you, this is untested by me and not guaranteed to actually work. If it does, please tell me. Thanks!

Troubleshooting

With no external dependencies, compiling CAPS should rarely fail on a Linux box. If it does on your machine, please send the output of the make command so we can try and fix the problem.

Bugs

If any of the plugins in the suite do not work with your host program of choice, or don't work as advertised, please send a bug report.

 

What You Should Know

Parameter Smoothing

To prevent zipper noise, many plugin control inputs are subject to internal parameter smoothing where the effort seems justified. This is achieved by sweeping parameters internal to the plugin. The duration of this sweep will vary with the audio system setup. For realtime use and most known LADSPA hosts it is equal to the audio block size (in jackd terms: the "frames per period").

Sample Rate

The CAPS plugins are designed to be used at sample rates of 44.1 kHz or higher. Operation at lower sample rates is generally possible but untested. Especially the resonant filters in the SweepVFI, SweepVFII, AutoWah and Scape plugins can self-oscillate out of bounds at low sample rates and high filter cutoff frequency settings. It is a wise idea to do some silent test runs testing the entire parameter range to see if the plugin works as expected before relying on its operation at sample rates below 44.1 kHz.

In the plugin listing, for every unit you'll see a note like All sample rates. This means that the plugin should sound the same no matter what sample rate it is run at. If it doesn't, holler at me. A note like 44.1 kHz only means you can still run the plugin at other sample rates without having to fear for your life, but the sonic experience may differ from what is advertised.

Usage at sample rates of 176 kHz or higher may cause problems with some plugins. We recommend not exceeding 100 kHz for all applications.

Realtime Use

All of the plugins in the suite are hard-realtime capable. In some cases, parameter smoothing will take a marginal number of extra CPU cycles when a control value is changed, as well as when the plugin is starting or resuming operation.

In-Place and Mixing/Replacing Operation

All of the plugins in the suite support any combination of in-place, mixing and replacing operation.

Denormals

Denormal numbers (wikipedia) are the bane of DSP on common computer systems because they seriously slow down computing speed. In CAPS, various approaches are employed to prevent this problem from arising. Most of the plugins add an inaudible signal (-266 dB) at the Nyquist (wikipedia) or at a fixed lower frequency which keeps calculations out of the critical zone around zero. In addition, if you run configure.py prior to building CAPS, SSE extensions will be employed to aid in this task if they are available on the build system.

I'd love to hear from you. Really!

You like something about CAPS? Don't like it? Either way, tell me – otherwise I'll never be able to improve it!

Known Bugs and Limitations
  • CPU usage figures, if given, may be inaccurate or even off by an order of magnitude.
  • 8x oversampling consumes a lot of CPU power.
  • Since version 0.4.0, CAPS cannot be compiled with gcc 2.95 any more.
  • Processing blocks larger than 231 - 1 aren't supported.
  • Old jack-rack host versions have some crazy ideas about the default control parameters of the CAPS plugins – they're all over the place.
  • Sample rates in excess of 100 kHz may cause some plugins to develop problems.
  • The White plugin actually produces a slightly purplish signal despite the rather boastful claims of signal purity made elsewhere.
 

Give me a Guitar Setup Already!

Start your guitar signal chain with an AmpVTS, followed by a CabinetII and finish with a Plate reverb. Season to taste, done.

Additional effects like chorus, phaser or auto wah would drop in right before or right after the Cabinet (I usually prefer the latter).

 

The Plugins

Generic

Eq

A ten-band, octave-spread equalizer. Based on a traditional analogue design and about as faithful as digital IIR filtering allows. Individual band filters are 6 dB / octave.

All sample rates (bands beyond Nyquist are disabled).

  • 31 Hz, 63 Hz, 125 Hz, 250 Hz, 500 Hz, 1 kHz, 2 kHz, 4 kHz, 8 kHz, 16 kHz
  • control the gain in dB for the respective band.

Eq2x2

By popular demand, a stereo-in, stereo-out version of the Eq unit. Same controls as Eq.

Compress

A mono compressor, based on the SC1 design by Steve Harris (in other words, a ripoff) with minor tweaks. Be careful with the gain and ratio controls, the output signal can easily exceed 0 dB.

All sample rates.

  • gain (dB)

    controls the maximum gain applied by the unit.

  • ratio (1:n)

    controls the overall gain.

  • attack (s)

    controls the speed at which the circuit acts on a rising input signal envelope.

  • release (s)

    controls the speed at which the circuit acts on a decaying input signal envelope.

  • threshold (dB)

    sets the envelope level that the compressor starts acting at.

  • knee radius (dB)

    controls the softness of the transition between unaltered and compressed signal.

Pan

Places a monaural source in the stereo field. For some extra spicing, the unit can also add a low-pass filtered echo at the far ends of the stereo field to make the signal sound 'wider' (recreating the old doubling effect with a twist). You can (and should!) control the loudness and timing of the echo; what's best depends largely on the source signal.

No parameter smoothing.

All sample rates.

  • pan

    position

  • width

    echo volume

  • t

    delay in milliseconds

  • mono

    if non-zero, causes the unit to mix the stereo output back down to mono and output that (on both outbound ports). The purpose is to check for mono compatibility of the output.

Narrower

Reduces the width of a stereophonic signal. Very useful for headphone listeners.

No parameter smoothing.

All sample rates.

  • strength

    amount of width reduction

Emulation

PreampIII

One further step in the evolution of my tube preamplifier emulation. This one uses conventional polyphase FIR filters for 8x oversampling, which helps make the unit sound a good deal cleaner than the IIR-based predecessor.

The first steps towards this unit were based on a spice model of the preamplifier circuit in a Fender 5F4 design ('Super' tube amp, a close relative of the famed 'Bassman', which is the ancestor of the Marshall lineage). Further evolution was based on measurements of my 'Super 60' (mid-1980s) amp and, of course, personal preference. The plugin offers a softer kind of preamp clipping than the actual circuit, though it can be made to clip as harsh as the original thing if given enough gain.

A word of caution: at high 'temperature' settings, an input signal peaking above 0 dB can drive the first 'tube' stage into hard clipping. Since this stage of the circuit is run at the nominal sample rate, aliasing and thus sound quality degradation will occur. Do not overdrive the input, instead use the 'gain' knob for harsh distortion, it offers more than enough of it. This applies to all Preamp and Amp units.

All sample rates.

  • gain

    controls the level of saturation. For a balanced (0 dB max.) input signal, hard clipping will not occur below a gain value of 1.

  • temperature

    emulates the level of the input signal, thus how much the first preamplifier tube will colour the signal. The effect is very subtle.

PreampIV

A variation on PreampIII with added tone controls before the clipping stage. The tone controls have the same flaws as their analog counterparts (phase cancellation at high band gains). But exactly because they are not linear-phase, they are quite useful in altering the distortion characteristics of the circuit.

All sample rates.

Same parameters as PreampIII, plus the following (all in dB units):

  • bass

    80 Hz band

  • mid

    300 Hz band

  • treble

    1200 Hz band

  • hi

    4800 Hz band

ToneStack

A close model of the tone stack of a traditional instrument amplifier (of Fender origin), designed and implemented by David Yeh, discussed in [2] (see his project page at CCRMA).

This is the 'procedural' implementation which uses a direct form II filter, adapts to the actual sample rate and offers the choice of model from a selection of several classic tone stacks. (The AC-30 is a crude approximation for which David isn't to blame. I simply dropped in the parameters although the circuit doesn't match the one David modeled.)

All sample rates.

  • model

    0 - '59 Bassman
    1 - '69 Twin Reverb
    2 - '64 Princeton
    3 - '59/'81 JCM 800
    4 - '78 Club & Country
    5 - '59/'86 AC-30 of sorts

  • bass
  • mid
  • treble

ToneStackLT

This version of David Yeh's ToneStack replaces the procedural approach and direct form II filter with a lattice filter and operation on precalculated simulation data. It's a fixed implementation of the '59 Bassman model.

44.1 kHz

  • bass
  • mid
  • treble

AmpIII

A PreampIII circuit plus a tube power amplifier emulation giving that smooth drive.

We recommend you use AmpVTS instead.

All sample rates.

Same controls as PreampIII, plus:

  • drive

    controls the 'master volume' of the circuit, i.e. how much coloring and compression the emulated power amplifier produces.

AmpIV

A PreampIV with the same output amp stage emulation that AmpIII employs. Controls are the same as on PreampIV, plus the 'drive' inherited from AmpIII.

We recommend you use AmpVTS instead.

All sample rates.

AmpV

This circuit is loosely based on the AmpIII design. The preamplifier stage has been augmented and tuned to provide a warmer frequency response as well as slightly different clipping characteristics. But more significantly, AmpV emulates the shortcomings of an unregulated power supply and their effect on the total gain of the circuit, the operating point of the tubes and the clipping response.

AmpV's forte is a mellow sound at the transition from clean to rough, at lowish 'gain' settings and moderate 'watts'.

We recommend you use AmpVTS instead.

All sample rates.

  • gain

    controls the amount of edge added in the preamplifier stage. The parameter mapping has been optimized for fine control in the clean to medium-rough range.

  • bass

    controls the attenuation or amplification of low frequencies before the preamp tube (the value is expressed in dB). Technically, a low-shelving equalizer filter.

  • tone

    controls post-preamplifier circuit filtering. At the zero setting, the effect is turned off. At its maximum, there is some resonance quite high in the spectrum.

  • drive

    controls power-amplification stage saturation, which gives a fair bit of warmth and some compression.

  • watts

    controls how capable the emulated power supply is. At its minimum setting, the effects of supply voltage modulation are the most pronounced. At the maximum setting, they are effectively removed (which is recommended for high-'gain' setups).

AmpVTS

An AmpV with the tone controls replaced with the fine ToneStack by David Yeh. And a ton of other modifications (most notably the availability of an extra 28 dB of gain).

All sample rates.

CabinetI

A collection of filters emulating the frequency response of various guitar combo amps or speaker cabinets, using the method outlined here.

You'll find a more exact, but also a lot more cycle-hungry and latency-inflicting rendering of these responses in Steve Harris' collection, from which they were borrowed.

We recommend you use the successor unit CabinetII instead.

44.1 kHz (48 kHz gives a slightly different, but still usable frequency response.)

  • model

    0 - identity filter (what goes in, goes out).
    1 - 'unmatched', as I still like to call it. A Matchless Chieftain.
    2 - the same, but the recording was taken with the microphone on-axis.
    3 - Superchamp (a Fender, isn't it?)
    4 - Fender Vibrolux 68
    5 - Marshall 'Plexi'

  • gain (dB)

    volume control.

CabinetII

A refined version of CabinetI. This version offers a much more faithful rendering of the original speaker cabinet frequency responses due to a modified filter approximation, double the filter order and (limited) adaptability to sample rate.

Unlike conventional impulse response emulators who rely on brute-force convolution, FFT-based algorithms or the patent-encumbered zero-latency variant of the latter, the Cabinet units employ IIR filters for truly resonant behaviour. As a result, their sound is more lively.

Same controls as CabinetI.

44.1, 48, 88.2 and 96 kHz (nearest match chosen at runtime)

Clip

A spin-off of the PreampIII effort. 8x oversampled hard clipping (sometimes called 'diode' or 'transistor' clipping). The clip threshold is fixed at -1 dB (overshoot from the up- and downsampling filters could exceed 0 dB were the threshold higher).

All sample rates.

  • gain (dB)

    controls pre-clipping amplification.

Effects

ChorusI

Mono version, with a feedback circuit. The parameter range suits more subtle effects as well as all-out flanging. Modifying the 't' parameter when 'feedback' is non-zero will cause zipper noise.

All sample rates.

  • t (ms)

    delay time.

  • width (ms)

    controls the amount of pitch change.

  • rate (Hz)

    the speed of the pitch modulation.

  • blend

    the amount of dry and fed-back signal in the output.

  • feedforward

    amount of modulated signal in the output.

  • feedback

    amount of signal with fixed delay in the modulation input.

StereoChorusI

Two ChorusI circuits in parallel, sharing the same input (and delay line). Same parameters as the mono version, plus one.

All sample rates.

  • phase
  • controls the relation of the two LFOs. 0 means in-phase, 0.5 is quadrature, and 1 is anti-phase.

ChorusII

A variation on the ChorusI unit; this one employs a Roessler fractal to steer the signal modulation, resulting in less predictable and thus more interesting sound.

All sample rates.

  • t (ms)

    delay time.

  • width (ms)

    controls the amount of pitch change.

  • rate

    the speed of the pitch modulation.

  • blend

    the amount of dry and fed-back signal in the output.

  • feedforward

    amount of modulated signal in the output.

  • feedback

    amount of signal with fixed delay in the modulation input.

StereoChorusII

Two ChorusII circuits in parallel, sharing the same input (and delay line). Same parameters as the mono version.

All sample rates.

PhaserI

Nothing out of the ordinary, just a phaser like I like to have them. A phaser unit works by sweeping notches in the frequency response; this one has six comb filters, for six notches.

All sample rates.

  • rate (Hz)

    controls the speed of the modulation.

  • depth

    the strength of the effect.

  • spread

    the distance of the notched frequency bands.

  • feedback

    controls the amount of resonance.

PhaserII

A variation of the PhaserI circuit which relies on a Lorenz fractal for the modulation source, improving hugely on output sound variation.

All sample rates.

  • rate

    controls the speed of the modulation.

  • depth

    the strength of the effect.

  • spread

    the distance of the notched frequency bands.

  • feedback

    controls the amount of resonance.

SweepVFI

A resonant filter whose cutoff frequency is swept by a Lorenz fractal. With the default parameters (moderate Q, cutoff around 800 Hz and band pass mode) it makes a nice Wah effect if you lower the 'h' parameter by a fair amount.

Another idea is to set it to very high Q and frequency in low pass mode and filter some noise, for synthetic bird chirping (high h value) or theremin-like sounds (low h, lower frequency).

Please note that the most useful settings for the 'h' parameter are very low, around 0.01 - 0.09. Unfortunately there's no way to provide a default setting as low as this without compromising the range of the control.

And be careful, high Q resonance can peak at up to +18 dB.

All sample rates (modulation rate and character are sample rate dependent).

  • f

    cutoff frequency (band center for band pass filtering).

  • Q

    filter resonance.

  • mode

    0 - low pass
    1 - band pass

  • depth:x
  • depth:y
  • depth:z

    control how the modulation is mixed from the state of the attractor.

  • h

    step size of the fractal.

SweepVFII

A variation on SweepVFI, with the filter Q (bandwidth/resonance) modulated by a second Lorenz fractal.

Please note that the most useful settings for the 'h' parameter are very low, around 0.01 - 0.09. Unfortunately there's no way to provide a default setting as low as this without compromising the range of the control.

And be careful, high Q resonance can peak at up to +18 dB.

All sample rates (modulation rate and character are sample rate dependent).

  • f

    cutoff frequency (band center for band pass filtering).

  • Q

    filter resonance.

  • mode

    0 - low pass
    1 - band pass

  • f:depth:x
  • f:depth:y
  • f:depth:z

    control how the filter cutoff modulation is mixed from the state of the attractor.

  • f:h

    step size of the fractal modulating the cutoff.

  • Q:depth:x
  • Q:depth:y
  • Q:depth:z

    control how the filter Q modulation is mixed from the state of the attractor.

  • Q:h

    step size of the fractal modulating filter Q.

AutoWah

The same resonant filter as used by the SweepVFI and SweepVFII units, the difference being that the filter is hard-wired for bandpass operation and the band centre frequency is modulated by an envelope-following circuit. In short, an effect commonly known and esteemed as an automatic wah, or AutoWah. Probably most useful with instruments allowing fine control over dynamics at all times.

Be careful with the Q parameter, high resonance can peak at up to +18 dB.

All sample rates (modulation rate and character may be sample rate dependent).

  • f

    filter band centre frequency.

  • Q

    resonance.

  • depth

    strength of the modulation.

Scape

This plugin will generate quite expansive soundscapes from even the most modest input signals.

Technically, 'Scape' is a stereo delay, with the panning of the echo modulated by a pair of fractals. The delay times are adjustable through a 'bpm' knob, augmented by a beat division parameter. The input as well as the delayed signals are processed by a collection of resonant filters, with frequency and cutoff modulated in sync to the current tempo.

All sample rates.

  • bpm

    beats per minute.

  • divider

    controls whether the groove is ternary or binary.

  • feedback

    controls the length of the delay tail.

  • dry

    the amount of dry signal mixed to the outputs.

  • blend

    the amount of wet signal mixed to the outputs.

Generators

VCOs

An oscillator capable of producing the standard triangle, sawtooth and square waveforms of analog fame, and almost any conceivable blend thereof. 8x oversampled, thus needs a lot of cycles. Sorry about that, but you don't get the flexibility and fat sound for free.

About the morphing controls:

  • For a triangle wave, set both tri .. saw and ~ .. square to 0 (this is the default setting).
  • To morph into a sawtooth, pull up tri .. saw.
  • For a square wave instead, pull up ~ .. square. When the value reaches 1, tri .. saw fully controls the pulse width.

For a more intuitive approach, thinking of both controls in terms of 'dull .. sharp' for a start can't hurt.

All sample rates.

  • f

    the frequency.

  • tri .. saw

    controls the morph between triangle and sawtooth, and the pulse width of square oscillation.

  • ~ .. square

    controls the morph between triangle/sawtooth and square wave.

  • volume

VCOd

A combination of two VCOs units. The second oscillator offers a separate tuning knob. It can also be made to 'hard sync' to the first unit, which means that when the first has completed a wave cycle, the second is forced to restart its wave cycle together with the first.

All sample rates.

  • f

    the frequency.

  • 1: tri .. saw
  • 1: ~ .. square

    waveform morph controls for the first oscillator.

  • 2: tri .. saw
  • 2: ~ .. square

    waveform morph controls for the second oscillator.

  • 2: tune

    controls the interval between the two oscillator frequencies, in units of (fractional) semitones.

  • sync

    if non-zero, puts the second oscillator into 'hard sync' mode, and determines the forced-restart offset into its wave cycle.

  • blend

    controls how the waveforms from the two oscillators are mixed. A value of 0 means only oscillator one is heard, a value of either 1 or -1 tilts the balance fully towards oscillator two. The sign of the blend value determines if the signals are added or subtracted.

  • volume

CEO

The Chief Executive Oscillator forever repeats the word 'money'.

44.1 kHz.

  • mpm

    moneys per minute.

  • volume
  • damping

    moderates the CEO.

Sin

The old friend, indispensable for testing and tuning.

All sample rates.

  • f

    the frequency.

  • volume

White

White noise (actually slightly pinkish, sorry).

All sample rates.

  • volume

Lorenz

A Lorenz attractor is a fractal system. It produces a very own character of noisz that will hardly repeat in the course of your lifetime.

Sound varies with sample rate.

  • h

    controls the step size of the state progression, and, indirectly, the perceived frequency of the sound.

  • x
  • y
  • z

    control how the signal is mixed from the state of the attractor.

  • volume

For more information on the Lorenz and Roessler attractors, visit Paul Bourke's resourceful site.

Roessler

Another fractal system. This one lends itself particularly well to sweeping the 'h' parameter.

Sound varies with sample rate.

  • h

    controls the step size of the state progression.

  • x
  • y
  • z

    control how the signal is mixed from the state of the attractor.

  • volume

For more information on the Lorenz and Roessler attractors, visit Paul Bourke's resourceful site.

Reverb

JVRev

A traditional Chowning/Moorer/Schroeder reverb. It sounds quite good for a reverberation unit with such a comparatively small footprint (I still remember the times when your average personal computer wasn't even capable of computing this in realtime). A quite straight-forward rewrite of a unit found in CCRMA's STK (Synthesis Toolkit), with minor tweaks.

All sample rates.

  • t60 (s)

    controls the time until the reverb tail is supposed to fade to -60 dB.

  • blend

    controls dry/wet mixing ratio.

Plate

A reverberation unit based on the design discussed in [1]. Unlike the reference, the unit employs cubic instead of allpass interpolation to modulate the reverb 'tank' delay lines.

All sample rates.

  • bandwidth

    controls damping of the input signal before it enters the delay circuits.

  • tail

    controls the length of the reverb tail.

  • damping

    controls attenuation of high frequency components within the reverb 'tank' (decay stage).

  • blend

    dry/wet mixing ratio (default should be 1/8, not 1/4).

Plate2x2

By popular demand, a stereo-in, stereo-out version of the Plate reverb unit. Same controls, same sound.

All sample rates.

Others

Click

A sample-accurate metronome. Timing is exact at any sample rate, but the pitch of the click (being a recorded sample) will vary. (The click also lends well for testing reverb plugins.)

44.1 kHz.

  • bpm

    beats per minute.

  • volume
  • damping

    controls the softness of the click sound.

Dirac

This plugin produces periodic impulses of exactly one sample width (as long as the 'damping' control is left at the default 0 setting). It's probably only useful for testing and basic impulse response retrieval; don't use this plugin if you don't know what you're doing, your amplification hardware and speakers will thank you. The 'volume' control defaults to silent output to spare you nasty surprises.

All sample rates.

  • ppm

    pulses per minute.

  • volume
  • damping

HRTF

Applying the head-related transfer function to a signal makes it appear to come from a specific direction in space. This plugin applies the HRTF with custom-shaped IIR filters. Tell me how it works for you (you should have pretty good headphones to get the full effect).

The HRTF impulse response data has been collected and prepared by MIT's Media Lab.

This unit only utilizes the 0-elevation set (sound source is level with the listener).

44.1 kHz.

  • pan

    The position, in integer steps. Some noteworthy settings:

    • 0 = in front
    • +18 = left,
    • -18 = right, and
    • -36 = +36 = behind the listener.
 

Appendix

Plugin Data Sheets

The CAPS data sheets collect the following information from the plugins:

  • the plugin ID
  • normalized sample output from the plugin with default parameter settings (in the filter case, this is an impulse response)
  • a frequency magnitude plot for the sample output
  • estimated CPU usage on my box (usually wildly inaccurate)
  • latency information if applicable
  • audio routing information
  • the control inputs on the plugin

You can fetch the data sheet compilation here, it is caps-0.4.5.pdf (287 kB).

Changelog

0.4.5
  * Narrower plugin added
  * fixed 'configure.py' to work with python3
  * fixed Sin, Roessler and Lorenz gain smoothing on activation

0.4.4
  
0.4.3
  * basics.h cleanup / comments
  * minor Makefile cleanup
  * comment cosmetics
  * Eq and Eq2x2 per-band Q changed to 1.414 (= 1 octave)
  * Eq lowest band default value fixed to read 0
  * Niclas' fix for the bessel function implemented
  * uninitialised plugin states eliminated thanks to Damon
  * linker options for OSX added to the Makefile

0.4.2
  * fixed the 'model' port index for AmpVTS in the RDF generator

0.4.1
  * cleaned up Eq.h and Eq.cc (many g++ versions choke on the unused code
    there)
  * changed -O3 to -O2 in the g++ invocation

0.4.0
  * ToneStack plugins, by David Yeh
  * AmpV + Tone stack plugin, employing David Yeh's fine work
  * comment cosmetics
  * Amp* denormal protection fixed (or is it, Dave? ;)
  * minor code cleanup in Amp.cc
  * caps.rdf updated with plugin categories (thanks to Paul Winkler)
  * caps.rdf Cabinet* RDF preset labels renamed
  * AutoWah plugin
  * DSP::RMS reworked, may affect Compress plugin
  * DSP::Eq reworked for double precision and denormal protection
  * ./configure.py checks SSE availability
  * in case of SSE math denormal flush to zero activated for all plugins
  * all plugins renamed C* .. instead of CAPS: ..
  * Eq modified to play nice with ardour 
  * Eq2x2
  * introduced the Plugin base class, collecting common traits (normal etc)
  * getport() -- read access to control ports which is clamped to port bounds
    and maps inf and nan to 0 as well
  * all LADSPA_HINT_SAMPLE_RATE ports changed to *_LOGARITHMIC because
    of broken implementations (no surprise given the vagueness of ladspa.h
    regarding this matter) -- this means changed default parameters of the 
    affected ports, too
  * VCO* "latency" output ports removed
  * actual activate() call is deferred to first run() after activate() 
    in order to prevent inadvertent parameter smoothing sweeps during the first 
    block  of audio after activation, this should fix all problems with ardour
    (except those caused by denormals or invalid audio input)
  * caps.rdf installed by 'make install'
  * fixed a bug in tools/make-ps.py that caused the spectrum plots to 
    be inaccurate for multi-channel plugins

0.3.0
  * TwelveAX7_3 changed to clip slightly early in the upper lobe
  * Scape plugin added
  * plugin names rewritten, prefixed with "CAPS:"
  * new ChorusII, StereoChorusII plugins
  * Chorus, StereoChorus relabeled, appended 'I' suffix
  * new PhaserII plugin (great stuff if I may say so)
  * Phaser relabeled, appended 'I' suffix
  * new AmpV plugin, based on AmpIII, emulates compression and distortion
    modulation through power supply shortcomings, plus lots of fine-tuning
    and an additional biquad. We're getting there!
  * all Preamp and Amp models fitted with a new 12AX7 model, linear
    interpolation of a sample table obtained from spice simulation

0.2.4
  * feedback default reverted to 0 for the Chorus units
  * fixed Cabinet to switch to correct gain at 'model' control change
  * fixed 'model' control in Cabinet to work with a broader range of hosts
  * Cabinet name changed to CabinetI
  * CabinetII plugin: Cabinet with 32nd order IIR filters, more fidelity
    to the original frequency responses, supplied coefficients for 4 of the
    most used sample rates
  * applied the gcc-4 enabling patch
  * SweepVF renamed to SweepVFI
  * new SweepVFII plugin, variant of SweepVFI with Q modulated by a 
    second Lorenz fractal
  * dsp/exp2 dumped in favour of libm's exp2(3)

0.2.3
  * StereoChorus denormal protection made functional 
    (Thanks again to S. Savolainen)
  * Phaser denormal protected
  
0.2.2
  * Build was _not_ fixed for g++-4.0.
  * AmpIV gain control restored to operate as expected
  * Chorus/StereoChorus denormal protection (thanks to S. Savolainen)
  * a few cosmetic changes elsewhere
  
0.2.1
  * Build fixed for g++-4.0, PPC and AMD64 
    (Thanks to Niklas Werner, Andreas Jochens and Mario Lang)
  * Reverb.* cosmetics
  * AmpIV tone controls moved to after initial tube transfer

0.2.0
  * denormal protection for Preamp*, Amp*
  * Capitalized plugin Names
  * PDF now lists audio in- and outputs as well as control inputs, only
    gives average CPU rating
  * AmpIV: PreampIV + power amp stage
  * Plate2x2: Plate with 2-in, 2-out audio routing
  * Plate damping and bandwidth controls changed to map to filter fc, fixes
    behaviour in hosts that handle the log hint incorrectly

0.1.13
  * AmpIII activate() resets the boost filter

0.1.12
  * PreampIV band controls fixed to operate as expected

0.1.11
  * amps changed back to old tube model :) but new temp & gain behaviour stays
  * SweepVF, AmpIII default value adjustments

0.1.10
  * HRTF recursion runs in doubles
  * Cabinet recursion runs in doubles for much clearer sound
  * all amps fitted with a common tube voltage mapping, dsp/TwelveAX7.h
  * all amps: temperature and gain controls changed slightly
  * all amps declared in one common Amp.h
  * Pan echo fixed to be filtered independent of sample rate
  * Cabinet cosmetics and activate() from port values fix
  * SweepVF fixed to activate() from the current control settings
  * rid all *amp* plugins of the initial hi-pass, not needed anymore
  * PreampIII and AmpIII more authentic with an rbj lo-shelve, +6 dB > 1.2 kHz
    as hinted by circuit analysis
  * something_random() removed, stdlib for random generation

0.1.9
  * Pan plugin
  * 'make depend' instead of 'make dep', uses $(CC) -MM instead of 'makedepend'
  * *Chorus, AmpIII, Plate defaults changed
  * *Chorus optimizations, reintroduces funny zipper noise when 'feedback' is
    non-zero and 't' is changed
  * experimental HRTF plugin
  * Plate 'blend' goes all the way to wet output only
  * dsp/White offers a get_31() method for reduced number of bitshifts needed
  * *Chorus delay line tapping changed to employ cubic interpolation, sounds
    better
  * SweepVF modulation mix algorithm changed to clamp if over-fed, makes
    for wider sweeps
  
0.1.8
  * all oversampling plugins use Kaiser windows instead of Blackman-Harris,
    for much better performance
  * SweepVF modulation range slightly increased
  * Cabinet filter loop cosmetics (slight speedup)
  * new AmpIII Plugin: Preamp plus power amp emulation
  * lowered NOISE_FLOOR (equals 'renormal' number)
  
0.1.7
  * connect ports to lower bound on instantiate()
  * Plate delay line lengths raised, sound changed
  * Eq activate() fixed to initialize from the current settings
  * Preamp* cutoff reverted to 0.1.3 setting, thanks to Ben Saylor for
    testing
  * old IIR-based Preamp cleaned from the sources
  * zipper-noise in *Chorus units for t changes with feedback > 0 eliminated
  * all plugin constructor code moved to init() calls

0.1.6
  * SweepVF modulation mix algorithm changed to maintain proportion, not
    absolute value if x + y + z > 1, for better control
  * create $(DEST) directory on make install, pointed out by Daniel James

0.1.5
  * fixed delay line length miscalculation in ModLattice

0.1.4
  * SweepVF modulation source can be mixed now
  * latency port for VCO*
  * Lorenz and Roessler get x, y, z mixing knobs
  * PreampIV eq bands slightly tuned and coefficients moved into common struct
  * Preamp*, VCO* downsampler filter cutoff lowered
  * Clip downsampler filter cutoff lowered 
  * nonsensical audio output bounds removed
  * simplified VCO* implementation
  * JVRev rewritten for code clarity (funny enough, it also got quicker)
  * fixed JVRev to reset its history on activate()
  * added purpose, copyright and licensing information to all (i think) files.
  * HACKING file
  * CHANGES file
  
0.1.3
  * fixed all compilation problems with gcc 3.3, with the patient help
    of the lad mailing list community
  * dsp/Eq.h SSE assembler code had to go (gcc > 3 doesn't like multi-line 
    asm, and efficiency and even reliability go down if we allow gcc to 
    intersperse its 'optimization' code with our asm)
  
0.1.2
  * fixed more compilation problems with gcc >= 3.0
  
0.1.1
  * tried to (but didn't really) fix compilation problem with ladspa.h
  
0.1.0
  * initial release
	
 
tim@quitte.de, March 26 2011.
lmms-1.1.3/plugins/LadspaEffect/caps/caps.rdf000066400000000000000000000267221247673406200210630ustar00rootroot00000000000000 ] > lmms-1.1.3/plugins/LadspaEffect/caps/configure.py000077500000000000000000000013731247673406200217710ustar00rootroot00000000000000#! /usr/bin/env python import os CFLAGS = [] OSX_LDFLAGS = "-bundle -undefined suppress -flat_namespace" def we_have_sse(): try: return 'sse' in open ('/proc/cpuinfo').read().split() except: return 0 def we_have_ssse3(): try: return 'ssse3' in open ('/proc/cpuinfo').read().split() except: return 0 def we_think_so_different_dude(): try: return 'Darwin' == os.popen ('uname -s').read().strip() except: return 0 def store(): f = open ('defines.make', 'w') f.write ("_CFLAGS=" + ' '.join (CFLAGS) + "\n") if we_think_so_different_dude(): f.write ("_LDFLAGS=" + OSX_LDFLAGS + "\n") f.write ("STRIP = echo\n") if __name__ == '__main__': if we_have_sse(): CFLAGS += ('-msse', '-mfpmath=sse') if we_have_ssse3(): CFLAGS += ('-msse3',) store() lmms-1.1.3/plugins/LadspaEffect/caps/dsp/000077500000000000000000000000001247673406200202155ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/caps/dsp/BiQuad.h000066400000000000000000000052231247673406200215350ustar00rootroot00000000000000/* dsp/BiQuad.h Copyright 2003-7 Tim Goetze http://quitte.de/dsp/ Bi-quad IIR filter. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_BI_QUAD_H_ #define _DSP_BI_QUAD_H_ namespace DSP { class BiQuad { public: /* coefficients */ sample_t a[3], b[3]; /* history */ int h; sample_t x[2], y[2]; BiQuad() { unity(); reset(); } void unity() { a[0] = 1; a[1] = a[2] = b[0] = b[1] = b[2] = 0; } void copy (BiQuad & bq) { for (int i = 0; i < 3; ++i) a[i] = bq.a[i], b[i] = bq.b[i]; } void reset() { h = 0; x[0] = x[1] = y[0] = y[1] = 0.; } /* denormal zapping */ void flush_0() { for (int i = 0; i < 2; ++i) if (is_denormal (y[i])) y[i] = 0; } inline sample_t process (sample_t s) { register int z = h; register sample_t r = s * a[0]; r += a[1] * x[z]; r += b[1] * y[z]; z ^= 1; r += a[2] * x[z]; r += b[2] * y[z]; y[z] = r; x[z] = s; h = z; return r; } /* Following are additional methods for using the biquad to filter an * upsampled signal with 0 padding -- some terms reduce to 0 in this * case */ inline sample_t process_0_1() { register int z = h; register sample_t r = 0; r += a[1] * x[z]; r += b[1] * y[z]; z ^= 1; r += a[2] * x[z]; r += b[2] * y[z]; y[z] = r; x[z] = 0; h = z; return r; } inline sample_t process_0_2() { register int z = h; register sample_t r = 0; r += b[1] * y[z]; z ^= 1; r += a[2] * x[z]; r += b[2] * y[z]; y[z] = r; x[z] = 0; h = z; return r; } inline sample_t process_0_3() { register int z = h; register sample_t r = 0; r += b[1] * y[z]; z ^= 1; r += b[2] * y[z]; y[z] = r; x[z] = 0; h = z; return r; } }; } /* namespace DSP */ #endif /* _DSP_BI_QUAD_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/Delay.h000066400000000000000000000064161247673406200214330ustar00rootroot00000000000000/* dsp/Delay.h Copyright 2003-4, 2010 Tim Goetze http://quitte.de/dsp/ delay lines with fractional (linear or cubic interpolation) lookup and an allpass interpolating tap (which needs more work). delay line storage is aligned to powers of two for simplified wrapping checks (no conditional or modulo, binary and suffices instead). */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_DELAY_H_ #define _DSP_DELAY_H_ #include "util.h" #include "FPTruncateMode.h" namespace DSP { class Delay { public: int size; sample_t * data; int read, write; Delay() { read = write = 0; data = 0; } ~Delay() { if (data) free (data); } void init (int n) { size = next_power_of_2 (n); data = (sample_t *) calloc (sizeof (sample_t), size); size -= 1; write = n; } void reset() { memset (data, 0, (size + 1) * sizeof (sample_t)); } sample_t & operator [] (int i) { return data [(write - i) & size]; } inline void put (sample_t x) { data [write] = x; write = (write + 1) & size; } inline sample_t get() { sample_t x = data [read]; read = (read + 1) & size; return x; } inline sample_t putget (sample_t x) { put (x); return get(); } /* fractional lookup, linear interpolation */ inline sample_t get_at (float f) { int n; fistp (f, n); /* read: i = (int) f; relies on FPTruncateMode */ f -= n; return (1 - f) * (*this) [n] + f * (*this) [n + 1]; } /* fractional lookup, cubic interpolation */ inline sample_t get_cubic (float f) { int n; fistp (f, n); /* see FPTruncateMode */ f -= n; sample_t x_1 = (*this) [n - 1]; sample_t x0 = (*this) [n]; sample_t x1 = (*this) [n + 1]; sample_t x2 = (*this) [n + 2]; /* sample_t (32bit) quicker than double here */ register sample_t a = (3 * (x0 - x1) - x_1 + x2) * .5; register sample_t b = 2 * x1 + x_1 - (5 * x0 + x2) * .5; register sample_t c = (x1 - x_1) * .5; return x0 + (((a * f) + b) * f + c) * f; } }; /* allpass variant */ class DelayTapA { public: sample_t x1, y1; DelayTapA() { reset(); } void reset() { x1 = y1 = 0; } sample_t get (Delay & d, float f) { int n; fistp (f, n); /* read: n = (int) f; relies on FPTruncateMode */ f -= n; if (0 && f < .5) f += 1, n -= 1; sample_t x = d[n]; f = (1 - f) / (1 + f); y1 = x1 + f * x - f * y1; x1 = x; return y1; } }; }; /* namespace DSP */ #endif /* _DSP_DELAY_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/Eq.h000066400000000000000000000070011247673406200207310ustar00rootroot00000000000000/* Eq.h Copyright 2004-7 Tim Goetze http://quitte.de/dsp/ Equalizer circuit using recursive filtering. Based on a motorola paper implementing a similar circuit on a DSP56001. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_EQ_H_ #define _DSP_EQ_H_ namespace DSP { /* A single bandpass as used by the Eq, expressed as a biquad. Like all * band-pass filters I know of, the filter works with a FIR coefficient of 0 * for x[-1], so a generic biquad isn't the optimum implementation. * * This routine isn't used anywhere, just here for testing purposes. */ template void _BP (double fc, double Q, T * ca, T * cb) { double theta = 2 * fc * M_PI; double b = (Q - theta * .5) / (2 * Q + theta), a = (.5 - b) / 2, c = (.5 + b) * cos (theta); ca[0] = 2 * a; ca[1] = 0; ca[2] = -2 * a; cb[0] = 0; cb[1] = 2 * c; cb[2] = -2 * b; } template class Eq { public: /* recursion coefficients, 3 per band */ eq_sample __attribute__ ((aligned)) a[Bands], b[Bands], c[Bands]; /* past outputs, 2 per band */ eq_sample __attribute__ ((aligned)) y[2][Bands]; /* current gain and recursion factor, each 1 per band = 2 */ eq_sample __attribute__ ((aligned)) gain[Bands], gf[Bands]; /* input history */ eq_sample x[2]; /* history index */ int h; eq_sample normal; Eq() { h = 0; normal = NOISE_FLOOR; } void reset() { for (int z = 0; z < 2; ++z) { memset( y[z], 0, Bands*sizeof( eq_sample ) ); x[z] = 0; } } void init (double fs, double Q) { double f = 31.25; int i = 0; for (i = 0; i < Bands && f < fs / 2; ++i, f *= 2) init_band (i, 2 * f * M_PI / fs, Q); /* just in case, zero the remaining coefficients */ for ( ; i < Bands; ++i) zero_band (i); reset(); } void init_band (int i, double theta, double Q) { b[i] = (Q - theta * .5) / (2 * Q + theta); a[i] = (.5 - b[i]) / 2; c[i] = (.5 + b[i]) * cos (theta); /* fprintf (stderr, "%02d %f %f %f\n", i, a[i], b[i], c[i]); */ gain[i] = 1; gf[i] = 1; } void zero_band (int i) { a[i] = b[i] = c[i] = 0; } /* per-band recursion: * y = 2 * (a * (x - x[-2]) + c * y[-1] - b * y[-2]) */ eq_sample process (eq_sample s) { int z1 = h, z2 = h ^ 1; eq_sample * y1 = y[z1]; eq_sample * y2 = y[z2]; eq_sample x_x2 = s - x[z2]; eq_sample r = 0; for (int i = 0; i < Bands; ++i) { y2[i] = normal + 2 * (a[i] * x_x2 + c[i] * y1[i] - b[i] * y2[i]); r += gain[i] * y2[i]; gain[i] *= gf[i]; } x[z2] = s; h = z2; return r; } /* zap denormals in history */ void flush_0() { for (int i = 0; i < Bands; ++i) if (is_denormal (y[0][i])) y[0][i] = 0; } }; } /* namespace DSP */ #endif /* _DSP_EQ_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/FIR.h000066400000000000000000000116621247673406200210140ustar00rootroot00000000000000/* dsp/FIR.h Copyright 2003-10 Tim Goetze http://quitte.de/dsp/ finite impulse response filters, with options for up- and down-sampling. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _FIR_H_ #define _FIR_H_ #include "util.h" namespace DSP { /* brute-force FIR filter with downsampling method (decimating). * * CAVEAT: constructing it from another FIR makes the filter share the other's * kernel data set. IOW, the other FIR must be valid throughout the lifetime * of this instance. */ class FIR { public: /* kernel length, history length - 1 */ int n, m; /* coefficients, history */ sample_t * c, * x; bool borrowed_kernel; /* history index */ int h; FIR (int N) { c = 0; init (N); } FIR (FIR & fir) { c = fir.c; init (fir.n); } FIR (int n, sample_t * kernel) { c = 0; init (n); memcpy (c, kernel, n * sizeof (*c)); } ~FIR() { if (!borrowed_kernel) free (c); free (x); } void init (int N) { n = N; /* keeping history size a power of 2 makes it possible to wrap the * history pointer by & instead of %, saving a few cpu cycles. */ m = next_power_of_2 (n); if (c) borrowed_kernel = true; else borrowed_kernel = false, c = (sample_t *) malloc (n * sizeof (sample_t)); x = (sample_t *) malloc (m * sizeof (sample_t)); m -= 1; reset(); } void reset() { h = 0; memset (x, 0, n * sizeof (sample_t)); } /* TODO: write an SSE-enabled version */ inline sample_t process (sample_t s) { x[h] = s; s *= c[0]; for (int Z = 1, z = h - 1; Z < n; --z, ++Z) s += c[Z] * x[z & m]; h = (h + 1) & m; return s; } /* Z is the time, in samples, since the last non-zero sample. * OVER is the oversampling factor. just here for documentation, use * a FIRUpsampler instead. */ template inline sample_t upsample (sample_t s) { x[h] = s; s = 0; /* for the interpolation, iterate over the history in z ^ -OVER * steps -- all the samples between are 0. */ for (int j = Z, z = h - Z; j < n; --z, j += OVER) s += c[j] * x[z & m]; h = (h + 1) & m; return s; } /* used in downsampling */ inline void store (sample_t s) { x[h] = s; h = (h + 1) & m; } }; /* close relative of FIR, but distinct enough to not justify inheritance. * * the difference to the FIR is the shorter history length. don't need * to clutter the d-cache with interleaved 0s. * * however, an initial test shows this to be a fraction *slower* than a * complete FIR for N = 32, OVER = 4. */ class FIRUpsampler { public: /* kernel length, history length - 1 */ int n, m; /* oversampling ratio */ int over; /* coefficients, history */ sample_t * c, * x; /* history index */ int h; FIRUpsampler (int _n, int _over) { c = x = 0; init (_n, _over); } FIRUpsampler (FIR & fir, int _over) { c = x = 0; init (fir.n, _over); memcpy (c, fir.c, n * sizeof (sample_t)); } ~FIRUpsampler() { if (c) free (c); if (x) free (x); } void init (int _n, int _over) { /* oversampling ratio must be multiple of FIR kernel length */ // assert (_n % _over == 0); n = _n; over = _over; /* like FIR, keep the history buffer a power of 2; additionally, * compress and don't store the 0 samples inbetween. */ m = next_power_of_2 ((n + over - 1) / over); c = (sample_t *) malloc (n * sizeof (sample_t)); x = (sample_t *) malloc (m * sizeof (sample_t)); m -= 1; reset(); } void reset() { h = 0; memset (x, 0, (m + 1) * sizeof (sample_t)); } /* upsample the given sample */ inline sample_t upsample (sample_t s) { x[h] = s; s = 0; for (int Z = 0, z = h; Z < n; --z, Z += over) s += c[Z] * x[z & m]; h = (h + 1) & m; return s; } /* upsample a zero sample (interleaving), Z being the time, in samples, * since the last non-0 sample. */ inline sample_t pad (int Z) { sample_t s = 0; for (int z = h - 1; Z < n; --z, Z += over) s += c[Z] * x[z & m]; return s; } }; }; /* namespace DSP */ #endif /* _FIR_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h000066400000000000000000000022031247673406200232030ustar00rootroot00000000000000/* Copyright 2001-4 tim goetze -- see 'COPYING'. */ /* Sets the FP rounding mode to 'truncate' in the constructor * and loads the previous FP conrol word in the destructor. * * By directly using the machine instruction to convert float to int * we avoid the performance hit that loading the control word twice for * every (int) cast causes on i386. * * On other architectures this is a no-op. */ #ifndef _DSP_FP_TRUNCATE_MODE_H_ #define _DSP_FP_TRUNCATE_MODE_H_ #ifdef __i386__ #define fstcw(i) \ __asm__ __volatile__ ("fstcw %0" : "=m" (i)) #define fldcw(i) \ __asm__ __volatile__ ("fldcw %0" : : "m" (i)) /* gcc chokes on __volatile__ sometimes. */ #define fistp(f,i) \ __asm__ ("fistpl %0" : "=m" (i) : "t" (f) : "st") #else /* ! __i386__ */ #define fstcw(i) #define fldcw(i) #define fistp(f,i) \ i = (int) f #endif namespace DSP { class FPTruncateMode { public: int cw0, cw1; /* fp control word */ FPTruncateMode() { fstcw (cw0); cw1 = cw0 | 0xC00; fldcw (cw1); } ~FPTruncateMode() { fldcw (cw0); } }; } /* namespace DSP */ #endif /* _DSP_FP_TRUNCATE_MODE_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/LatFilt.h000066400000000000000000000042271247673406200217320ustar00rootroot00000000000000/* LatFilt.h Copyright 2006 David Yeh Lattice digital filter. Assumes order of b = order of a. Assumes a0 = 1. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_LatFilt_H_ #define _DSP_LatFilt_H_ namespace DSP { // ORDER is the highest power of s in the transfer function template class LatFilt { public: double vcoef[ORDER+1]; double kcoef[ORDER]; double state[ORDER]; double y; // fade factors double vf[ORDER+1]; double kf[ORDER]; void reset() { for (int i = 0; i < ORDER; i++) { state[i] = 0; // zero state vf[i] = 1; // reset fade factor kf[i] = 1; } vf[ORDER] = 1; y = 0; } void init (double fs) { reset(); clearcoefs(); } void clearcoefs() { for (int i=0; i< ORDER; i++) { vcoef[i] = 0; kcoef[i] = 0; } vcoef[ORDER] = 0; } sample_t process (sample_t s) { double tmp; int i = ORDER-1; tmp = -kcoef[i]*state[i] + s; y = vcoef[i+1]*(state[i] + kcoef[i]*tmp); for (i = ORDER-2; i >= 0; i--) { tmp = -kcoef[i]*state[i] + tmp; state[i+1] = kcoef[i]*tmp + state[i]; y = y + vcoef[i+1]*state[i+1]; } state[0] = tmp; y = y + vcoef[0]*tmp; return (sample_t) y; } inline void set_vi(double coef, int i) { vcoef[i] = coef; } inline void set_ki(double coef, int i) { kcoef[i] = coef; } }; } /* namespace DSP */ #endif /* _DSP_LatFilt_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/Lorenz.h000066400000000000000000000037651247673406200216520ustar00rootroot00000000000000/* dsp/Lorenz.h Copyright 2001-4 Tim Goetze http://quitte.de/dsp/ Lorenz fractal. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_LORENZ_H_ #define _DSP_LORENZ_H_ namespace DSP { class Lorenz { public: double x[2], y[2], z[2]; double h, a, b, c; int I; public: Lorenz() { h = 0.001; a = 10.0; b = 28.0; c = 8.0 / 3.0; } /* rate is normalized (0 .. 1) */ void set_rate (double r) { h = max (.0000001, r * .015); } void init (double _h = .001, double seed = .0) { I = 0; x[0] = .1 + seed - frandom() * .1; y[0] = 0; z[0] = 0; /* progress quickly to get a 'stable' system */ h = .001; int n = 10000 + min ((int) (10000 * seed), 10000); for (int i = 0; i < n; ++i) step(); h = _h; } sample_t get() { step(); return .5 * get_y() + get_z(); } void step() { int J = I ^ 1; x[J] = x[I] + h * a * (y[I] - x[I]); y[J] = y[I] + h * (x[I] * (b - z[I]) - y[I]); z[J] = z[I] + h * (x[I] * y[I] - c * z[I]); I = J; } double get_x() { return .024 * (x[I] - .172); } double get_y() { return .018 * (y[I] - .172); } double get_z() { return .019 * (z[I] - 25.43); } }; } /* namespace DSP */ #endif /* _DSP_LORENZ_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/OnePole.h000066400000000000000000000042431247673406200217320ustar00rootroot00000000000000/* dsp/OnePole.h Copyright 2003-7 Tim Goetze http://quitte.de/dsp/ one pole (or one zero, or one zero, one pole) hi- and lo-pass filters. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _ONE_POLE_H_ #define _ONE_POLE_H_ namespace DSP { class OnePoleLP { public: sample_t a0, b1, y1; OnePoleLP (double d = 1.) { set (d); y1 = 0.; } inline void reset() { y1 = 0.; } inline void set_f (double fc) { set (exp (-2 * M_PI * fc)); } inline void set (double d) { a0 = (sample_t) d; b1 = (sample_t) 1. - d; } inline sample_t process (sample_t x) { return y1 = a0 * x + b1 * y1; } inline void decay (double d) { a0 *= d; b1 = 1. - a0; } /* clear denormal numbers in history */ void flush_0() { if (is_denormal (y1)) y1 = 0; } }; class OnePoleHP { public: sample_t a0, a1, b1, x1, y1; OnePoleHP (double d = 1.) { set (d); x1 = y1 = 0.; } void set_f (double f) { set (exp (-2 * M_PI * f)); } inline void set (double d) { a0 = (sample_t) ((1. + d) / 2.); a1 = (sample_t) ((1. + d) / -2.); b1 = d; } inline sample_t process (sample_t x) { y1 = a0 * x + a1 * x1 + b1 * y1; x1 = x; return y1; } void reset() { x1 = y1 = 0; } /* clear denormal numbers in history */ void flush_0() { if (is_denormal (y1)) y1 = 0; } }; } /* namespace DSP */ #endif /* _ONE_POLE_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/RBJ.h000066400000000000000000000136461247673406200210150ustar00rootroot00000000000000/* dsp/RBJ.h Copyright 1998 Robert Bristow-Johnson 2004-10 Tim Goetze biquad prototypes according to the eq cookbook. easy-to-use, nice, predictable filters. thanks rbj! */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_RBJ_H_ #define _DSP_RBJ_H_ #include "BiQuad.h" namespace DSP { namespace RBJ { /* base class, prepares common parameters */ class RBJ { public: double Q, alpha, sin, cos; double a[3], b[3]; public: RBJ (double f, double _Q) { Q = _Q; double w = 2 * M_PI * f; sin = ::sin (w); cos = ::cos (w); alpha = sin / (2 * Q); } /* templated so we can set double and float coefficients from the same * piece of code */ template void make_direct_I (T * ca, T * cb) { double a0i = 1 / a[0]; ca[0] = b[0] * a0i; ca[1] = b[1] * a0i; ca[2] = b[2] * a0i; /* our bi-quad implementation /adds/ b[i] * y[i] so we need to * toggle the sign for the b[] coefficients. */ cb[0] = 0; cb[1] = -a[1] * a0i; cb[2] = -a[2] * a0i; } }; /* now the individual prototypes. * set-up is not optimal, i.e. does a lot of operations twice for readability. */ class LP : public RBJ { public: LP (double f, double Q, BiQuad & bq) : RBJ (f, Q) { ab (bq.a, bq.b); } template LP (double f, double Q, T * ca, T * cb) : RBJ (f, Q) { ab (ca, cb); } template void ab (T * ca, T * cb) { b[0] = (1 - cos) * .5; b[1] = (1 - cos); b[2] = (1 - cos) * .5; a[0] = 1 + alpha; a[1] = -2 * cos; a[2] = 1 - alpha; make_direct_I (ca, cb); } }; class BP : public RBJ { public: BP (double f, double Q, BiQuad & bq) : RBJ (f, Q) { ab (bq.a, bq.b); } template BP (double f, double Q, T * ca, T * cb) : RBJ (f, Q) { ab (ca, cb); } template void ab (T * ca, T * cb) { b[0] = Q * alpha; b[1] = 0; b[2] = -Q * alpha; a[0] = 1 + alpha; a[1] = -2 * cos; a[2] = 1 - alpha; make_direct_I (ca, cb); } }; class HP : public RBJ { public: HP (double f, double Q, BiQuad & bq) : RBJ (f, Q) { ab (bq.a, bq.b); } template HP (double f, double Q, T * ca, T * cb) : RBJ (f, Q) { ab (ca, cb); } template void ab (T * ca, T * cb) { b[0] = (1 + cos) * .5; b[1] = -(1 + cos); b[2] = (1 + cos) * .5; a[0] = 1 + alpha; a[1] = -2 * cos; a[2] = 1 - alpha; make_direct_I (ca, cb); } }; class Notch : public RBJ { public: Notch (double f, double Q, BiQuad & bq) : RBJ (f, Q) { ab (bq.a, bq.b); } template Notch (double f, double Q, T * ca, T * cb) : RBJ (f, Q) { ab (ca, cb); } template void ab (T * ca, T * cb) { b[0] = 1; b[1] = -2 * cos; b[2] = 1; a[0] = 1 + alpha; a[1] = -2 * cos; a[2] = 1 - alpha; make_direct_I (ca, cb); } }; /* shelving and peaking dept. ////////////////////////////////////////////// */ class PeakShelve : public RBJ { public: double A, beta; public: PeakShelve (double f, double Q, double dB) : RBJ (f, Q) { A = pow (10, dB * .025); double S = Q; /* slope */ beta = sqrt ((A * A + 1) / S - (A - 1) * (A - 1)); } }; class LoShelve : public PeakShelve { public: LoShelve (double f, double Q, double dB, BiQuad & bq) : PeakShelve (f, Q, dB) { ab (bq.a, bq.b); } template LoShelve (double f, double Q, double dB, T * ca, T * cb) : PeakShelve (f, Q, dB) { ab (ca, cb); } template void ab (T * ca, T * cb) { double Ap1 = A + 1, Am1 = A - 1; double beta_sin = beta * sin; b[0] = A * (Ap1 - Am1 * cos + beta_sin); b[1] = 2 * A * (Am1 - Ap1 * cos); b[2] = A * (Ap1 - Am1 * cos - beta_sin); a[0] = Ap1 + Am1 * cos + beta_sin; a[1] = -2 * (Am1 + Ap1 * cos); a[2] = Ap1 + Am1 * cos - beta_sin; make_direct_I (ca, cb); } }; class PeakingEQ : public PeakShelve { public: PeakingEQ (double f, double Q, double dB, BiQuad & bq) : PeakShelve (f, Q, dB) { ab (bq.a, bq.b); } template PeakingEQ (double f, double Q, double dB, T * ca, T * cb) : PeakShelve (f, Q, dB) { ab (ca, cb); } template void ab (T * ca, T * cb) { b[0] = 1 + alpha * A; b[1] = -2 * cos; b[2] = 1 - alpha * A; a[0] = 1 + alpha / A; a[1] = -2 * cos; a[2] = 1 - alpha / A; make_direct_I (ca, cb); } }; class HiShelve : public PeakShelve { public: HiShelve (double f, double Q, double dB, BiQuad & bq) : PeakShelve (f, Q, dB) { ab (bq.a, bq.b); } template HiShelve (double f, double Q, double dB, T * ca, T * cb) : PeakShelve (f, Q, dB) { ab (ca, cb); } template void ab (T * ca, T * cb) { double Ap1 = A + 1, Am1 = A - 1; double beta_sin = beta * sin; b[0] = A * (Ap1 + Am1 * cos + beta_sin); b[1] = -2 * A * (Am1 + Ap1 * cos); b[2] = A * (Ap1 + Am1 * cos - beta_sin); a[0] = Ap1 - Am1 * cos + beta_sin; a[1] = 2 * (Am1 - Ap1 * cos); a[2] = Ap1 - Am1 * cos - beta_sin; make_direct_I (ca, cb); } }; } /* ~namespace RBJ */ } /* ~namespace DSP */ #endif /* _DSP_RBJ_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/RMS.h000066400000000000000000000030161247673406200210270ustar00rootroot00000000000000/* dsp/RMS.h Copyright 2004 Tim Goetze http://quitte.de/dsp/ root-mean-square accumulator. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_RMS_H_ #define _DSP_RMS_H_ namespace DSP { class RMS { protected: sample_t buffer[64]; int write; public: double sum; RMS() { write = 0; reset(); } void reset() { sum = 0.; memset (buffer, 0, sizeof (buffer)); } /* caution: pass in the *squared* sample value */ void store (sample_t x) { sum -= buffer[write]; sum += (buffer[write] = x); write = (write + 1) & 63; } sample_t process (sample_t x) { store (x); return rms(); } sample_t rms() { /* fabs it before sqrt, just in case ... */ return sqrt (fabs (sum) / 64); } }; } /* namespace DSP */ #endif /* _DSP_RMS_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/Roessler.h000066400000000000000000000034411247673406200221660ustar00rootroot00000000000000/* dsp/Roessler.h Copyright 2003-4 Tim Goetze http://quitte.de/dsp/ Roessler fractal. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_ROESSLER_H_ #define _DSP_ROESSLER_H_ namespace DSP { class Roessler { public: double x[2], y[2], z[2]; double h, a, b, c; int I; public: Roessler() { h = 0.001; a = .2; b = .2; c = 5.7; } /* rate is normalized (0 .. 1) */ void set_rate (double r) { h = max (.000001, r * .096); } void init (double _h = .001, double seed = .0) { h = _h; I = 0; x[0] = .0001 + .0001 * seed; y[0] = .0001; z[0] = .0001; for (int i = 0; i < 5000; ++i) get(); } sample_t get() { int J = I ^ 1; x[J] = x[I] + h * (- y[I] - z[I]); y[J] = y[I] + h * (x[I] + a * y[I]); z[J] = z[I] + h * (b + z[I] * (x[I] - c)); I = J; return x[I] * .01725 + z[I] * .015; } double get_x() { return x[I]; } double get_y() { return y[I]; } double get_z() { return z[I]; } }; } /* namespace DSP */ #endif /* _DSP_ROESSLER_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/SVF.h000066400000000000000000000101251247673406200210230ustar00rootroot00000000000000/* dsp/SVF.h Copyright 2002-4 Tim Goetze http://quitte.de/dsp/ ladder filter in Chamberlin topology. supports largely independent f and Q adjustments and sweeps. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ /* inspired by this music-dsp entry: State Variable Filter (Double Sampled, Stable) Type : 2 Pole Low, High, Band, Notch and Peaking References :Posted by Andrew Simper Notes : Thanks to Laurent de Soras for the stability limit and Steffan Diedrichsen for the correct notch output. Code : input = input buffer; output = output buffer; fs = sampling frequency; fc = cutoff frequency normally something like: 440.0*pow(2.0, (midi_note - 69.0)/12.0); res = resonance 0 to 1; drive = internal distortion 0 to 0.1 freq = MIN(0.25, 2.0*sin(PI*fc/(fs*2))); // the fs*2 is because it's double sampled damp = MIN(2.0*(1.0 - pow(res, 0.25)), MIN(2.0, 2.0/freq - freq*0.5)); notch = notch output low = low pass output high = high pass output band = band pass output peak = peaking output = low - high -- double sampled svf loop: for (i=0; i class SVF { protected: /* loop parameters */ sample_t f, q, qnorm; /* outputs (peak and notch left out) */ sample_t lo, band, hi; sample_t * out; public: /* the type of filtering to do. */ enum { Low = 0, Band = 1, High = 2 }; SVF() { set_out (Low); set_f_Q (.1, .1); } void reset() { hi = band = lo = 0; } void set_f_Q (double fc, double Q) { /* this is a very tight limit */ f = min (.25, 2 * sin (M_PI * fc / OVERSAMPLE)); q = 2 * cos (pow (Q, .1) * M_PI * .5); q = min (q, min (2., 2 / f - f * .5)); qnorm = sqrt (fabs (q) / 2. + .001); } void set_out (int o) { if (o == Low) out = &lo; else if (o == Band) out = &band; else out = &hi; } void one_cycle (sample_t * s, int frames) { for (int i = 0; i < frames; ++i) s[i] = process (s[i]); } sample_t process (sample_t x) { x = qnorm * x; for (int pass = 0; pass < OVERSAMPLE; ++pass) { hi = x - lo - q * band; band += f * hi; lo += f * band; /* zero-padding, not 0th order holding. */ x = 0; } /* peak and notch outputs don't belong in the loop, put them * here (best in a template) if needed. */ return *out; } }; template class StackedSVF { public: SVF svf [STACKED]; void reset() { for (int i = 0; i < STACKED; ++i) svf[i].reset(); } void set_out (int out) { for (int i = 0; i < STACKED; ++i) svf[i].set_out (out); } void set_f_Q (double f, double Q) { for (int i = 0; i < STACKED; ++i) svf[i].set_f_Q (f, Q); } sample_t process (sample_t x) { for (int i = 0; i < STACKED; ++i) x = svf[i].process (x); return x; } }; } /* namespace DSP */ #endif /* _DSP_SVF_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/Sine.h000066400000000000000000000035631247673406200212730ustar00rootroot00000000000000/* dsp/Sine.h Copyright 2003-4 Tim Goetze http://quitte.de/dsp/ direct form I recursive sin() generator. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_SINE_H_ #define _DSP_SINE_H_ namespace DSP { class Sine { protected: int z; double y[2]; double b; public: Sine() { b = 0; y[0] = y[1] = 0; z = 0; } Sine (double f, double fs, double phase) { set_f (f, fs, phase); } Sine (double omega, double phase = 0.) { set_f (omega, phase); } inline void set_f (double f, double fs, double phase) { set_f (f * M_PI / fs, phase); } inline void set_f (double w, double phase) { b = 2 * cos (w); y[0] = sin (phase - w); y[1] = sin (phase - w * 2); z = 0; } /* advance and return 1 sample */ inline double get() { register double s = b * y[z]; z ^= 1; s -= y[z]; return y[z] = s; } double get_phase() { double x0 = y[z], x1 = b * y[z] - y[z^1]; double phi = asin (x0); /* slope is falling, we're into the 2nd half. */ if (x1 < x0) return M_PI - phi; return phi; } }; } /* namespace DSP */ #endif /* _DSP_SINE_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/TDFII.h000066400000000000000000000034401247673406200212260ustar00rootroot00000000000000/* TDFII.h Copyright 2006-7 David Yeh (implementation) Tim Goetze (cosmetics) transposed Direct Form II digital filter. Assumes order of b = order of a. Assumes a0 = 1. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_TDFII_H_ #define _DSP_TDFII_H_ namespace DSP { // ORDER is the highest power of s in the transfer function template class TDFII { public: double a[Order + 1]; double b[Order + 1]; double h[Order + 1]; void reset() { for (int i = 0; i <= Order; ++i) h[i] = 0; // zero state } void init (double fs) { reset(); clear(); } void clear() { for (int i=0; i<= Order; i++) a[i] = b[i] = 1; } /* per-band recursion: * y = 2 * (a * (x - x[-2]) + c * y[-1] - b * y[-2]) */ sample_t process (sample_t s) { double y = h[0] + b[0] * s; for (int i = 1; i < Order; ++i) h[i - 1] = h[i] + b[i] * s - a[i] * y; h[Order - 1] = b[Order] * s - a[Order] * y; return (sample_t) y; } }; } /* namespace DSP */ #endif /* _DSP_TDFII_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/ToneStack.h000066400000000000000000000154221247673406200222650ustar00rootroot00000000000000/* ToneStack.h Copyright 2006-9 David Yeh (implementation) Tim Goetze (cosmetics) Tone Stack emulation. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_TONESTACK_H_ #define _DSP_TONESTACK_H_ #include "util.h" #include "windows.h" #include "TDFII.h" #include "LatFilt.h" #include "tonestack/tables.h" namespace DSP { typedef struct { double R1, R2, R3, R4; double C1, C2, C3; } TSParameters; #define TS_N_PRESETS (sizeof (DSP::ToneStack::presets) / \ sizeof (DSP::TSParameters)) class ToneStack { private: enum { Order = 3 }; double c; // BT coef double b1t, b1m, b1l, b1d, b2t, b2m2, b2m, b2l, b2lm, b2d, b3lm, b3m2, b3m, b3t, b3tm, b3tl, a0, a1d, a1m, a1l, a2m, a2lm, a2m2, a2l, a2d, a3lm, a3m2, a3m, a3l, a3d; // intermediate calculations struct { double b1; double b2; double b3; double a1; double a2; double a3; } acoef; // analog coefficients // digital coefficients double dcoef_a[Order + 1]; double dcoef_b[Order + 1]; TDFII filter; public: int model; static TSParameters presets[]; /* in ../ToneStack.cc */ static int n_presets; ToneStack() { model = -1; setparams (presets[0]); } void init (double _fs) { c = 2 * _fs; } void activate (sample_t ** ports) { filter.reset(); } /* pass in pointer to ports and relative index of first eq band control */ void start_cycle (sample_t ** ports, int bassindex = 1) { int m = clamp ((int) *ports[0], 0, n_presets - 1); if (m != model) { model = m; setparams (presets[model]); filter.reset(); } updatecoefs (ports + bassindex); } void setparams (TSParameters & p) { double R1 = p.R1, R2 = p.R2, R3 = p.R3, R4 = p.R4; double C1 = p.C1, C2 = p.C2, C3 = p.C3; b1t = C1*R1; b1m = C3*R3; b1l = C1*R2 + C2*R2; b1d = C1*R3 + C2*R3; b2t = C1*C2*R1*R4 + C1*C3*R1*R4; b2m2 = -(C1*C3*R3*R3 + C2*C3*R3*R3); b2m = C1*C3*R1*R3 + C1*C3*R3*R3 + C2*C3*R3*R3; b2l = C1*C2*R1*R2 + C1*C2*R2*R4 + C1*C3*R2*R4; b2lm = C1*C3*R2*R3 + C2*C3*R2*R3; b2d = C1*C2*R1*R3 + C1*C2*R3*R4 + C1*C3*R3*R4; b3lm = C1*C2*C3*R1*R2*R3 + C1*C2*C3*R2*R3*R4; b3m2 = -(C1*C2*C3*R1*R3*R3 + C1*C2*C3*R3*R3*R4); b3m = C1*C2*C3*R1*R3*R3 + C1*C2*C3*R3*R3*R4; b3t = C1*C2*C3*R1*R3*R4; b3tm = -b3t; b3tl = C1*C2*C3*R1*R2*R4; a0 = 1; a1d = C1*R1 + C1*R3 + C2*R3 + C2*R4 + C3*R4; a1m = C3*R3; a1l = C1*R2 + C2*R2; a2m = C1*C3*R1*R3 - C2*C3*R3*R4 + C1*C3*R3*R3 + C2*C3*R3*R3; a2lm = C1*C3*R2*R3 + C2*C3*R2*R3; a2m2 = -(C1*C3*R3*R3 + C2*C3*R3*R3); a2l = C1*C2*R2*R4 + C1*C2*R1*R2 + C1*C3*R2*R4 + C2*C3*R2*R4; a2d = C1*C2*R1*R4 + C1*C3*R1*R4 + C1*C2*R3*R4 + C1*C2*R1*R3 + C1*C3*R3*R4 + C2*C3*R3*R4; a3lm = C1*C2*C3*R1*R2*R3 + C1*C2*C3*R2*R3*R4; a3m2 = -(C1*C2*C3*R1*R3*R3 + C1*C2*C3*R3*R3*R4); a3m = C1*C2*C3*R3*R3*R4 + C1*C2*C3*R1*R3*R3 - C1*C2*C3*R1*R3*R4; a3l = C1*C2*C3*R1*R2*R4; a3d = C1*C2*C3*R1*R3*R4; filter.reset(); } inline void updatecoefs (sample_t ** ports) { /* range checks on input */ double b = clamp (*ports[0], 0, 1); double m = clamp (*ports[1], 0, 1); double t = clamp (*ports[2], 0, 1); m = (m - 1) * 3.5; m = pow (10, m); acoef.a1 = a1d + m*a1m + b*a1l; acoef.a2 = m*a2m + b*m*a2lm + m*m*a2m2 + b*a2l + a2d; acoef.a3 = b*m*a3lm + m*m*a3m2 + m*a3m + b*a3l + a3d; dcoef_a[0] = -1 - acoef.a1*c - acoef.a2*c*c - acoef.a3*c*c*c; // sets scale dcoef_a[1] = -3 - acoef.a1*c + acoef.a2*c*c + 3*acoef.a3*c*c*c; dcoef_a[2] = -3 + acoef.a1*c + acoef.a2*c*c - 3*acoef.a3*c*c*c; dcoef_a[3] = -1 + acoef.a1*c - acoef.a2*c*c + acoef.a3*c*c*c; acoef.b1 = t*b1t + m*b1m + b*b1l + b1d; acoef.b2 = t*b2t + m*m*b2m2 + m*b2m + b*b2l + b*m*b2lm + b2d; acoef.b3 = b*m*b3lm + m*m*b3m2 + m*b3m + t*b3t + t*m*b3tm + t*b*b3tl; dcoef_b[0] = - acoef.b1*c - acoef.b2*c*c - acoef.b3*c*c*c; dcoef_b[1] = - acoef.b1*c + acoef.b2*c*c + 3*acoef.b3*c*c*c; dcoef_b[2] = acoef.b1*c + acoef.b2*c*c - 3*acoef.b3*c*c*c; dcoef_b[3] = acoef.b1*c - acoef.b2*c*c + acoef.b3*c*c*c; for (int i=1; i<=3; ++i) filter.a[i] = dcoef_a[i] / dcoef_a[0]; for (int i=0; i<=3; ++i) filter.b[i] = dcoef_b[i] / dcoef_a[0]; } // actualy do the DFII filtering, one sample at a time inline sample_t process (sample_t x) { return filter.process (x); } }; /* /////////////////////////////////////////////////////////////////////// */ /* hardcode this, known size memory blocks extern double* KS; // 25 x 25 x 3 extern double* VS; // 25 x 25 x 25 x 4 extern double KS[NSTEPS][NSTEPS][TSORDER]; //[bass][mid][coefs] extern double VS[NSTEPS][NSTEPS][NSTEPS][TSORDER+1]; //[bass][mid][treb][coefs] */ class ToneStackLT { private: enum { Order = 3, Steps = 25 }; // digital coefficients double *kcoef; double *vcoef; LatFilt filter; public: ToneStackLT() { setparams (250000, 1000000, 25000, 56000, 0.25e-9, 20e-9, 20e-9); } void init (double _fs) { } void activate (sample_t ** ports) { filter.reset(); } void setparams (double R1, double R2, double R3, double R4, double C1, double C2, double C3) { } void updatecoefs (sample_t ** ports) { double b = min (Steps - 1, max (*ports[0] * (Steps - 1), 0)); double m = min (Steps - 1, max (*ports[1] * (Steps - 1), 0)); double t = min (Steps - 1, max (*ports[2] * (Steps - 1), 0)); int bi = (int) b; int mi = (int) m; int ti = (int) t; kcoef = DSP::ToneStackKS + (mi * Steps + bi) * Order; vcoef = DSP::ToneStackVS + ((mi * Steps + bi) * Steps + ti) * (Order + 1); for (int i = 0; i < Order; ++i) filter.set_ki (kcoef[i], i); for (int i = 0; i < Order + 1; ++i) filter.set_vi (vcoef[i], i); } // actualy do the DFII filtering, one sample at a time inline sample_t process (sample_t x) { return filter.process (x); } }; } /* namespace DSP */ #endif /* _DSP_TONESTACK_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/TwelveAX7.h000066400000000000000000000124761247673406200221660ustar00rootroot00000000000000/* dsp/TwelveAX7.h Copyright 2003-6 Tim Goetze http://quitte.de/dsp/ collection of approximations of the 12AX7 voltage transfer function */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_TWELVE_AX_7_H_ #define _DSP_TWELVE_AX_7_H_ namespace DSP { #include "r12ax7.h" typedef sample_t tube_sample; /* this is the original tube model from caps < 0.1.9 or preamp.so, put * back into use in 0.1.11; the replacement (below) is too strong in * odd-order harmonics at the expense of even-order. it has to sound * good: it took a good deal of fiddling to get the coefficients right. */ class TwelveAX7 { public: tube_sample b, c, d; struct { tube_sample threshold, value; } clip[2]; /* amplitude at which clipping starts */ tube_sample scale; public: TwelveAX7() { /* transfer polynomial parameters */ b = -0.79618574210627535; c = -0.21108555430962023; d = +0.38944033523200522; set_clips(); scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); } inline tube_sample transfer (tube_sample a) { return a * (b + a * (c + a * d)); } inline tube_sample transfer_clip (tube_sample a) { if (a <= clip[0].threshold) return clip[0].value; if (a >= clip[1].threshold) return clip[1].value; return transfer (a); } inline double get_root (double sign) { /* only once, no need to optimize */ return (-2*c + sign * sqrt ((2*c) * (2*c) - 4 * (3 * d * b))) / (6 * d); } inline void set_clips() { /* find 0 crossings in the derived, this is where we'll clip */ double x0 = get_root (-1); double x1 = get_root (+1); clip[0].value = transfer (x0); clip[1].value = transfer (x1); clip[0].threshold = x0; clip[1].threshold = x1; } }; /* reworked model. higher order (than 3) polynomials make little sense; * sonically the difference is minim, and the cycle count increases * dramatically. */ class TwelveAX7_2 { public: tube_sample b, c, d; struct { tube_sample threshold, value; } clip[2]; tube_sample scale; public: TwelveAX7_2() { /* transfer polynomial parameters, made with gnuplot::fit() */ b = -1.08150605597883; c = -0.262760944760536; d = 0.445770802765903; static double x[2] = {-.52, +.98}; for (int i = 0; i < 2; ++i) clip[i].threshold = x[i], clip[i].value = transfer (x[i]); scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); } inline tube_sample transfer (tube_sample a) { return a * (b + a * (c + a * d)); } inline tube_sample transfer_clip (tube_sample a) { if (a <= clip[0].threshold) return clip[0].value; if (a >= clip[1].threshold) return clip[1].value; return transfer (a); } }; /* third model relies on linear interpolation based on the transfer function * as calculated from a spice model. */ class TwelveAX7_3 { public: tube_sample b, c, d; struct { tube_sample threshold, value; } clip[2]; tube_sample scale; public: TwelveAX7_3() { static double x[2] = { (double) r12AX7::Zero / ((double) r12AX7::Samples - (double) r12AX7::Zero), 1 }; for (int i = 0; i < 2; ++i) clip[i].threshold = x[i], clip[i].value = transfer (x[i]); scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); } inline tube_sample transfer (tube_sample a) { a = r12AX7::Zero + a * (r12AX7::Samples - r12AX7::Zero); if (a <= 0) return r12AX7::v2v[0]; if (a >= r12AX7::Samples - 1) return r12AX7::v2v [r12AX7::Samples - 1]; /* linear interpolation from sampled function */ register int i = lrintf (a); a -= i; return (r12AX7::v2v [i] * (1.f - a) + r12AX7::v2v [i + 1] * a); } inline tube_sample transfer_clip (tube_sample a) { return transfer (a); } }; /* experimental */ class NoTwelveAX7 { public: struct { tube_sample threshold, value; } clip[2]; /* amplitude at which clipping starts */ tube_sample scale; public: NoTwelveAX7() { static double x[2] = { -1, 1 }; for (int i = 0; i < 2; ++i) clip[i].threshold = x[i], clip[i].value = transfer (x[i]); scale = min (fabs (clip[0].threshold), fabs (clip[1].threshold)); } inline tube_sample transfer (tube_sample a) { return 0.5469181606780 * (pow (1 - a, 1.5) - 1); } inline tube_sample transfer_clip (tube_sample a) { if (a <= clip[0].threshold) return clip[0].value; if (a >= clip[1].threshold) return clip[1].value; return transfer (a); } }; } /* namespace DSP */ #endif /* _DSP_TWELVE_AX_7_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/VCO.h000066400000000000000000000106471247673406200210250ustar00rootroot00000000000000/* dsp/VCO.h Copyright 2004, 2010 Tim Goetze oscillators for triangle/sawtooth/square waves, and a combination for detuning and hard sync. NB: these oscillators are *not* bandlimited. oversample if needed. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_VCO_H_ #define _DSP_VCO_H_ namespace DSP { /* variable triangle to sawtooth generator. you can use two of these to * generate a square, but we prefer the integrated solution below. */ class TriSaw { public: /* doubles for maximum stability */ double phase, inc; double tri, tri1, tri2; public: TriSaw() { phase = 0; tri = .5; } inline void set_f (double f, double fs) { set_inc (f / fs); } inline void set_inc (double i) { inc = i; } /* 0: triangle, 1: saw */ inline void set_saw (double t) { tri = .5 + .5 * t; tri1 = 2. / tri; tri2 = 2. / (1 - tri); } /* advance and return 1 sample. * many conditionals, but quicker than a solution based on fmod() */ inline float get() { phase += inc; /* the good thing is that tri is always > .5, which implies * that this first conditional is true more often than not. */ if (phase <= tri) return -1 + phase * tri1; if (phase < 1) return 1 - (phase - tri) * tri2; phase -= 1; return -1 + phase * tri1; } }; /* variable triangle to sawtooth to square generator */ class TriSawSquare { public: /* doubles for maximum stability, using floats here increases * cycle need on my athlon */ double phase, inc; double * sync; float sync_phase; /* using doubles here increases cycle need significantly */ float square_i; float tri, tri1, tri2; float st1, st2; public: TriSawSquare() { reset(); } void reset() { phase = 0; sync = &phase; sync_phase = 0; set_saw_square (.5, .5); } inline void set_f (double f, double fs) { set_inc (f / fs); } inline void set_inc (double i) { inc = i; } inline void set_sync (TriSawSquare & tss, float p) { sync = &tss.phase; sync_phase = p; } /* t = 0: tri - 1: saw, * s = 0: tri/saw - 1: square */ inline void set_saw_square (float t, float s) { tri = .5 + .5 * t; square_i = 1 - s; float si2 = 2 * square_i; float one_m_t = 1 - tri; tri1 = si2 / tri; tri2 = si2 / one_m_t; st1 = s * one_m_t; st2 = s * tri; } /* advance and return 1 sample. * many branching instructions but on this intel chip faster than * a version using floor() to keep the phase within [0..1]. */ inline float get() { phase += inc; if (phase <= tri) first_half: /* raw version: return (1 - square) * (-1 + phase * 2 / tri) - square * (1 - tri); */ return -square_i + phase * tri1 - st1; if (phase < 1) /* raw version: return (1 - square) * (1 - (phase - tri) * 2 / (1 - tri)) + square * tri; */ return square_i - (phase - tri) * tri2 + st2; phase -= 1; *sync = phase + sync_phase; goto first_half; } }; class VCO2 { public: TriSawSquare vco[2]; float blend, i_blend; public: VCO2() { set_blend (.5); } void reset() { set_blend (.5); vco[0].reset(); vco[1].reset(); } void set_f (double f, double fs, double detune) { vco[0].set_f (f, fs); vco[1].set_f (f * pow (2, detune / 12.), fs); } inline void set_blend (float b) { blend = b; i_blend = 1 - fabs (b); } inline void set_sync (float sync) { vco[0].set_sync (sync ? vco[1] : vco[0], sync); } inline float get() { return vco[0].get() * blend + vco[1].get() * i_blend; } }; } /* namespace DSP */ #endif /* _DSP_VCO_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/White.h000066400000000000000000000040331247673406200214460ustar00rootroot00000000000000/* dsp/White.h Copyright 2004 Tim Goetze simple white noise generator, based on Jon Dattorro's 3/2002 JAES paper. quite an elegant design; consumes next to no CPU on a processor providing a decent binary shift operator. most of all, no random() calls. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_WHITE_H_ #define _DSP_WHITE_H_ namespace DSP { /* after initializing, call either get() or get_31() to get a sample, don't * mix them. (get_31 output goes out of range if called after get()). */ class White { public: uint32 b; White() { b = 0x1fff7777; } void init (float f) { b = (uint32) (f * (float) 0x1fff7777); } sample_t abs() { return fabs (get()); } /* 32-bit version */ sample_t get() { # define BIT(y) ((b << (31 - y)) & 0x80000000) b = ((BIT (28) ^ BIT (27) ^ BIT (1) ^ BIT (0))) | (b >> 1); return (4.6566128730773926e-10 * (sample_t) b) - 1; # undef BIT } /* 31-bit version, at least 6 instructions less / sample. probably only * pays off on a processor not providing a decent binary shift. */ sample_t get_31() { # define BIT(y) ((b << (30 - y)) & 0x40000000) b = ((BIT (3) ^ BIT (0))) | (b >> 1); return (9.3132257461547852e-10 * (sample_t) b) - 1; # undef BIT } }; } /* namespace DSP */ #endif /* _DSP_WHITE_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/r12ax7.h000066400000000000000000000713241247673406200214210ustar00rootroot00000000000000/* dsp/r12ax7.h Copyright 2003-5 Tim Goetze http://quitte.de/dsp/ 12AX7 voltage transfer function, sampled from a spice simulation running a simple preamp net with a 12ax7 model graciously provided by duncanamps.com . */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_R_12_AX_7_H_ #define _DSP_R_12_AX_7_H_ namespace r12AX7 { enum { Zero = 566, Samples = 1668, }; static float v2v[] = { 0.277279436588, 0.277249097824, 0.277187168598, 0.277105689049, 0.277008116245, 0.276897609234, 0.276775300503, 0.276642978191, 0.276501119137, 0.276351094246, 0.276193082333, 0.276027917862, 0.275855839252, 0.275678634644, 0.275495171547, 0.275305449963, 0.275109887123, 0.274909138680, 0.274703323841, 0.274492740631, 0.274277567863, 0.274058103561, 0.273834228516, 0.273606359959, 0.273374497890, 0.273138821125, 0.272899389267, 0.272656440735, 0.272409796715, 0.272159934044, 0.271906614304, 0.271650075912, 0.271390438080, 0.271127700806, 0.270861923695, 0.270593225956, 0.270321667194, 0.270047247410, 0.269770205021, 0.269490361214, 0.269207894802, 0.268922865391, 0.268635272980, 0.268345177174, 0.268052697182, 0.267757713795, 0.267460465431, 0.267160952091, 0.266858994961, 0.266555011272, 0.266248643398, 0.265940189362, 0.265629589558, 0.265316963196, 0.265002191067, 0.264685392380, 0.264366567135, 0.264045774937, 0.263723075390, 0.263398468494, 0.263071894646, 0.262743532658, 0.262413203716, 0.262081146240, 0.261747241020, 0.261411607265, 0.261074185371, 0.260735154152, 0.260394215584, 0.260051786900, 0.259707629681, 0.259361803532, 0.259014308453, 0.258665204048, 0.258314549923, 0.257962286472, 0.257608532906, 0.257253229618, 0.256896317005, 0.256537973881, 0.256178140640, 0.255816757679, 0.255454003811, 0.255089759827, 0.254724085331, 0.254356980324, 0.253988444805, 0.253618597984, 0.253247320652, 0.252874732018, 0.252500772476, 0.252125442028, 0.251748800278, 0.251370847225, 0.250991582870, 0.250611066818, 0.250229299068, 0.249846160412, 0.249461889267, 0.249076247215, 0.248689472675, 0.248301327229, 0.247912168503, 0.247521698475, 0.247129976749, 0.246737182140, 0.246343135834, 0.245947897434, 0.245551586151, 0.245154082775, 0.244755446911, 0.244355678558, 0.243954837322, 0.243552863598, 0.243149697781, 0.242745578289, 0.242340266705, 0.241933882236, 0.241526484489, 0.241117894650, 0.240708351135, 0.240297734737, 0.239886105061, 0.239473402500, 0.239059746265, 0.238644957542, 0.238229274750, 0.237812399864, 0.237394690514, 0.236975908279, 0.236556172371, 0.236135542393, 0.235713779926, 0.235291123390, 0.234867513180, 0.234442949295, 0.234017431736, 0.233590960503, 0.233163535595, 0.232735216618, 0.232305943966, 0.231875777245, 0.231444656849, 0.231012642384, 0.230579853058, 0.230145990849, 0.229711294174, 0.229275703430, 0.228839278221, 0.228401958942, 0.227963745594, 0.227524638176, 0.227084696293, 0.226643919945, 0.226202249527, 0.225759744644, 0.225316464901, 0.224872291088, 0.224427282810, 0.223981380463, 0.223534762859, 0.223087251186, 0.222638964653, 0.222189962864, 0.221740007401, 0.221289336681, 0.220837771893, 0.220385491848, 0.219932436943, 0.219478607178, 0.219023883343, 0.218568444252, 0.218112349510, 0.217655301094, 0.217197597027, 0.216739118099, 0.216279804707, 0.215819895267, 0.215359091759, 0.214897632599, 0.214435338974, 0.213972389698, 0.213508665562, 0.213044166565, 0.212579071522, 0.212113201618, 0.211646556854, 0.211179137230, 0.210711181164, 0.210242390633, 0.209772944450, 0.209302783012, 0.208831906319, 0.208360373974, 0.207888066769, 0.207415163517, 0.206941485405, 0.206467092037, 0.205992162228, 0.205516517162, 0.205040097237, 0.204563021660, 0.204085409641, 0.203607022762, 0.203128039837, 0.202648282051, 0.202167987823, 0.201686978340, 0.201205253601, 0.200723052025, 0.200240015984, 0.199756443501, 0.199272215366, 0.198787331581, 0.198301851749, 0.197815716267, 0.197328925133, 0.196841537952, 0.196353554726, 0.195864915848, 0.195375621319, 0.194885730743, 0.194395244122, 0.193904161453, 0.193412423134, 0.192920088768, 0.192427158356, 0.191933691502, 0.191439509392, 0.190944850445, 0.190449535847, 0.189953625202, 0.189457118511, 0.188960015774, 0.188462376595, 0.187964081764, 0.187465250492, 0.186965823174, 0.186465859413, 0.185965299606, 0.185464143753, 0.184962451458, 0.184460222721, 0.183957397938, 0.183453977108, 0.182949960232, 0.182445406914, 0.181940436363, 0.181434750557, 0.180928587914, 0.180421829224, 0.179914534092, 0.179406702518, 0.178898334503, 0.178389430046, 0.177879989147, 0.177369952202, 0.176859438419, 0.176348328590, 0.175836741924, 0.175324618816, 0.174811959267, 0.174298763275, 0.173785090446, 0.173270881176, 0.172756135464, 0.172240853310, 0.171725094318, 0.171208739281, 0.170691967010, 0.170174598694, 0.169656693935, 0.169138371944, 0.168619513512, 0.168100118637, 0.167580246925, 0.167059898376, 0.166539072990, 0.166017711163, 0.165495812893, 0.164973437786, 0.164450585842, 0.163927257061, 0.163403451443, 0.162879049778, 0.162354290485, 0.161828994751, 0.161303222179, 0.160776913166, 0.160250246525, 0.159723043442, 0.159195303917, 0.158667147160, 0.158138513565, 0.157609403133, 0.157079756260, 0.156549692154, 0.156019270420, 0.155488193035, 0.154956758022, 0.154424905777, 0.153892517090, 0.153359651566, 0.152826309204, 0.152292609215, 0.151758432388, 0.151223719120, 0.150688648224, 0.150153040886, 0.149617075920, 0.149080574512, 0.148543596268, 0.148006320000, 0.147468507290, 0.146930217743, 0.146391570568, 0.145852446556, 0.145312905312, 0.144772827625, 0.144232392311, 0.143691599369, 0.143150269985, 0.142608463764, 0.142066359520, 0.141523718834, 0.140980720520, 0.140437245369, 0.139893352985, 0.139349043369, 0.138804316521, 0.138259172440, 0.137713611126, 0.137167632580, 0.136621177197, 0.136074364185, 0.135527133942, 0.134979486465, 0.134431421757, 0.133882939816, 0.133334040642, 0.132784724236, 0.132234990597, 0.131684958935, 0.131134390831, 0.130583465099, 0.130032181740, 0.129480421543, 0.128928303719, 0.128375828266, 0.127822816372, 0.127269506454, 0.126715779305, 0.126161694527, 0.125607132912, 0.125052213669, 0.124496996403, 0.123941242695, 0.123385190964, 0.122828722000, 0.122271895409, 0.121714651585, 0.121156990528, 0.120598971844, 0.120040595531, 0.119481861591, 0.118922710419, 0.118363082409, 0.117803215981, 0.117242932320, 0.116682231426, 0.116121232510, 0.115559816360, 0.114997982979, 0.114435851574, 0.113873243332, 0.113310396671, 0.112747073174, 0.112183392048, 0.111619412899, 0.111055016518, 0.110490322113, 0.109925150871, 0.109359681606, 0.108793854713, 0.108227670193, 0.107661128044, 0.107094168663, 0.106526911259, 0.105959236622, 0.105391263962, 0.104822933674, 0.104254245758, 0.103685200214, 0.103115737438, 0.102545976639, 0.101975917816, 0.101405382156, 0.100834667683, 0.100263476372, 0.099691987038, 0.099120140076, 0.098547875881, 0.097975373268, 0.097402453423, 0.096829295158, 0.096255660057, 0.095681726933, 0.095107495785, 0.094532907009, 0.093957960606, 0.093382716179, 0.092807114124, 0.092231214046, 0.091654956341, 0.091078281403, 0.090501308441, 0.089924037457, 0.089346468449, 0.088768541813, 0.088190257549, 0.087611675262, 0.087032735348, 0.086453497410, 0.085873961449, 0.085294008255, 0.084713757038, 0.084133267403, 0.083552420139, 0.082971215248, 0.082389712334, 0.081807851791, 0.081225633621, 0.080643236637, 0.080060362816, 0.079477250576, 0.078893840313, 0.078310132027, 0.077726066113, 0.077141702175, 0.076556980610, 0.075971961021, 0.075386703014, 0.074801087379, 0.074215173721, 0.073628902435, 0.073042333126, 0.072455525398, 0.071868300438, 0.071280896664, 0.070693075657, 0.070105016232, 0.069516658783, 0.068927943707, 0.068338930607, 0.067749619484, 0.067160010338, 0.066570162773, 0.065979957581, 0.065389454365, 0.064798653126, 0.064207553864, 0.063616216183, 0.063024461269, 0.062432527542, 0.061840236187, 0.061247646809, 0.060654759407, 0.060061693192, 0.059468209743, 0.058874547482, 0.058280467987, 0.057686150074, 0.057091534138, 0.056496620178, 0.055901467800, 0.055306017399, 0.054710209370, 0.054114162922, 0.053517878056, 0.052921295166, 0.052324414253, 0.051727175713, 0.051129758358, 0.050532042980, 0.049934029579, 0.049335718155, 0.048737108707, 0.048138201237, 0.047539114952, 0.046939730644, 0.046340048313, 0.045740067959, 0.045139789581, 0.044539213181, 0.043938457966, 0.043337404728, 0.042736113071, 0.042134463787, 0.041532635689, 0.040930390358, 0.040328025818, 0.039725303650, 0.039122343063, 0.038519084454, 0.037915587425, 0.037311792374, 0.036707758904, 0.036103487015, 0.035498917103, 0.034894108772, 0.034289002419, 0.033683657646, 0.033078014851, 0.032472133636, 0.031866014004, 0.031259536743, 0.030652880669, 0.030045926571, 0.029438734055, 0.028831362724, 0.028223633766, 0.027615666389, 0.027007460594, 0.026398956776, 0.025790274143, 0.025181293488, 0.024572074413, 0.023962497711, 0.023352801800, 0.022742748260, 0.022132515907, 0.021522045135, 0.020911276340, 0.020300269127, 0.019689023495, 0.019077539444, 0.018465697765, 0.017853736877, 0.017241477966, 0.016628980637, 0.016016244888, 0.015403211117, 0.014789998531, 0.014176487923, 0.013562798500, 0.012948811054, 0.012334585190, 0.011720120907, 0.011105477810, 0.010490477085, 0.009875297546, 0.009259879589, 0.008644223213, 0.008028268814, 0.007412135601, 0.006795823574, 0.006179153919, 0.005562305450, 0.004945218563, 0.004327833652, 0.003710269928, 0.003092467785, 0.002474486828, 0.001856148243, 0.001237690449, 0.000618994236, 0.000000000000, -0.000619232655, -0.001238644123, -0.001858353615, -0.002478241920, -0.003098428249, -0.003718733788, -0.004339277744, -0.004960119724, -0.005581140518, -0.006202459335, -0.006823956966, -0.007445693016, -0.008067667484, -0.008689820766, -0.009312212467, -0.009934842587, -0.010557651520, -0.011180758476, -0.011804044247, -0.012427628040, -0.013051390648, -0.013675332069, -0.014299511909, -0.014923930168, -0.015548527241, -0.016173422337, -0.016798496246, -0.017423748970, -0.018049240112, -0.018674969673, -0.019300937653, -0.019927084446, -0.020553469658, -0.021180033684, -0.021806895733, -0.022433876991, -0.023061156273, -0.023688614368, -0.024316251278, -0.024944126606, -0.025572240353, -0.026200532913, -0.026829063892, -0.027457773685, -0.028086721897, -0.028715848923, -0.029345214367, -0.029974758625, -0.030604541302, -0.031234562397, -0.031864762306, -0.032495141029, -0.033125758171, -0.033756554127, -0.034387588501, -0.035018861294, -0.035650253296, -0.036281883717, -0.036913752556, -0.037545800209, -0.038178086281, -0.038810491562, -0.039443194866, -0.040076017380, -0.040709137917, -0.041342377663, -0.041975855827, -0.042609512806, -0.043243408203, -0.043877482414, -0.044511735439, -0.045146226883, -0.045780897141, -0.046415746212, -0.047050774097, -0.047686040401, -0.048321545124, -0.048957169056, -0.049593031406, -0.050229072571, -0.050865292549, -0.051501750946, -0.052138388157, -0.052775204182, -0.053412258625, -0.054049432278, -0.054686844349, -0.055324435234, -0.055962264538, -0.056600213051, -0.057238399982, -0.057876765728, -0.058515310287, -0.059154093266, -0.059792995453, -0.060432136059, -0.061071455479, -0.061710953712, -0.062350630760, -0.062990486622, -0.063630580902, -0.064270794392, -0.064911246300, -0.065551877022, -0.066192686558, -0.066833674908, -0.067474842072, -0.068116247654, -0.068757772446, -0.069399535656, -0.070041418076, -0.070683538914, -0.071325838566, -0.071968257427, -0.072610914707, -0.073253750801, -0.073896765709, -0.074539959431, -0.075183331966, -0.075826883316, -0.076470613480, -0.077114522457, -0.077758610249, -0.078402876854, -0.079047322273, -0.079691946507, -0.080336749554, -0.080981731415, -0.081626832485, -0.082272171974, -0.082917690277, -0.083563387394, -0.084209203720, -0.084855258465, -0.085501432419, -0.086147844791, -0.086794376373, -0.087441086769, -0.088088035583, -0.088735103607, -0.089382350445, -0.090029716492, -0.090677320957, -0.091325104237, -0.091973006725, -0.092621147633, -0.093269407749, -0.093917787075, -0.094566464424, -0.095215201378, -0.095864176750, -0.096513271332, -0.097162544727, -0.097811996937, -0.098461627960, -0.099111437798, -0.099761366844, -0.100411474705, -0.101061761379, -0.101712167263, -0.102362811565, -0.103013575077, -0.103664517403, -0.104315698147, -0.104966938496, -0.105618357658, -0.106269955635, -0.106921732426, -0.107573628426, -0.108225762844, -0.108877956867, -0.109530389309, -0.110182940960, -0.110835671425, -0.111488580704, -0.112141609192, -0.112794876099, -0.113448202610, -0.114101707935, -0.114755392075, -0.115409255028, -0.116063296795, -0.116717457771, -0.117371797562, -0.118026256561, -0.118680894375, -0.119335711002, -0.119990646839, -0.120645701885, -0.121300995350, -0.121956408024, -0.122611939907, -0.123267710209, -0.123923599720, -0.124579608440, -0.125235795975, -0.125892102718, -0.126548647881, -0.127205252647, -0.127862036228, -0.128518998623, -0.129176080227, -0.129833400249, -0.130490779877, -0.131148338318, -0.131806015968, -0.132463872433, -0.133121848106, -0.133780062199, -0.134438335896, -0.135096788406, -0.135755360126, -0.136414170265, -0.137073040009, -0.137732088566, -0.138391256332, -0.139050662518, -0.139710128307, -0.140369713306, -0.141029477119, -0.141689419746, -0.142349541187, -0.143009781837, -0.143670141697, -0.144330620766, -0.144991278648, -0.145652055740, -0.146312952042, -0.146974027157, -0.147635281086, -0.148296654224, -0.148958146572, -0.149619817734, -0.150281608105, -0.150943517685, -0.151605606079, -0.152267873287, -0.152930200100, -0.153592705727, -0.154255390167, -0.154918134212, -0.155581057072, -0.156244099140, -0.156907320023, -0.157570660114, -0.158234119415, -0.158897757530, -0.159561455250, -0.160225391388, -0.160889446735, -0.161553561687, -0.162217855453, -0.162882328033, -0.163546860218, -0.164211571217, -0.164876461029, -0.165541410446, -0.166206538677, -0.166871786118, -0.167537152767, -0.168202698231, -0.168868362904, -0.169534146786, -0.170200049877, -0.170866131783, -0.171532273293, -0.172198593616, -0.172865033150, -0.173531651497, -0.174198389053, -0.174865186214, -0.175532162189, -0.176199316978, -0.176866531372, -0.177533924580, -0.178201436996, -0.178869009018, -0.179536819458, -0.180204689503, -0.180872738361, -0.181540846825, -0.182209134102, -0.182877540588, -0.183546066284, -0.184214711189, -0.184883534908, -0.185552418232, -0.186221480370, -0.186890661716, -0.187559902668, -0.188229382038, -0.188898921013, -0.189568579197, -0.190238356590, -0.190908312798, -0.191578388214, -0.192248523235, -0.192918837070, -0.193589210510, -0.194259762764, -0.194930493832, -0.195601284504, -0.196272194386, -0.196943223476, -0.197614312172, -0.198285639286, -0.198957026005, -0.199628591537, -0.200300216675, -0.200972020626, -0.201643884182, -0.202315866947, -0.202988028526, -0.203660309315, -0.204332649708, -0.205005109310, -0.205677747726, -0.206350505352, -0.207023322582, -0.207696318626, -0.208369374275, -0.209042608738, -0.209715902805, -0.210389316082, -0.211062908173, -0.211736559868, -0.212410390377, -0.213084280491, -0.213758289814, -0.214432477951, -0.215106725693, -0.215781092644, -0.216455549002, -0.217130184174, -0.217804878950, -0.218479722738, -0.219154685736, -0.219829738140, -0.220504909754, -0.221180200577, -0.221855610609, -0.222531110048, -0.223206758499, -0.223882496357, -0.224558383226, -0.225234329700, -0.225910425186, -0.226586610079, -0.227262884378, -0.227939307690, -0.228615850210, -0.229292482138, -0.229969263077, -0.230646073818, -0.231323093176, -0.232000142336, -0.232677340508, -0.233354657888, -0.234032064676, -0.234709590673, -0.235387206078, -0.236064910889, -0.236742764711, -0.237420737743, -0.238098770380, -0.238776952028, -0.239455252886, -0.240133613348, -0.240812093019, -0.241490721703, -0.242169409990, -0.242848247290, -0.243527114391, -0.244206160307, -0.244885295630, -0.245564520359, -0.246243864298, -0.246923267841, -0.247602820396, -0.248282492161, -0.248962253332, -0.249642103910, -0.250322073698, -0.251002162695, -0.251682341099, -0.252362608910, -0.253042995930, -0.253723442554, -0.254404038191, -0.255084723234, -0.255765527487, -0.256446391344, -0.257127404213, -0.257808506489, -0.258489698172, -0.259170979261, -0.259852379560, -0.260533869267, -0.261215478182, -0.261897146702, -0.262578964233, -0.263260871172, -0.263942837715, -0.264624953270, -0.265307158232, -0.265989482403, -0.266671866179, -0.267354339361, -0.268036931753, -0.268719583750, -0.269402414560, -0.270085275173, -0.270768254995, -0.271451354027, -0.272134482861, -0.272817790508, -0.273501127958, -0.274184614420, -0.274868160486, -0.275552004576, -0.276246696711, -0.276955842972, -0.277676463127, -0.278406113386, -0.279142975807, -0.279885530472, -0.280632615089, -0.281383335590, -0.282136917114, -0.282892853022, -0.283650636673, -0.284409940243, -0.285170495510, -0.285932064056, -0.286694467068, -0.287457615137, -0.288221299648, -0.288985580206, -0.289750248194, -0.290515333414, -0.291280776262, -0.292046546936, -0.292812615633, -0.293578982353, -0.294345587492, -0.295112460852, -0.295879513025, -0.296646833420, -0.297414392233, -0.298182129860, -0.298950135708, -0.299718320370, -0.300486743450, -0.301255315542, -0.302024126053, -0.302793115377, -0.303562343121, -0.304331749678, -0.305101364851, -0.305871158838, -0.306641131639, -0.307411372662, -0.308181732893, -0.308952361345, -0.309723138809, -0.310494124889, -0.311265289783, -0.312036663294, -0.312808215618, -0.313580006361, -0.314351975918, -0.315124064684, -0.315896451473, -0.316668987274, -0.317441672087, -0.318214595318, -0.318987697363, -0.319761008024, -0.320534497499, -0.321308195591, -0.322082072496, -0.322856098413, -0.323630332947, -0.324404805899, -0.325179398060, -0.325954228640, -0.326729238033, -0.327504426241, -0.328279823065, -0.329055398703, -0.329831123352, -0.330607086420, -0.331383198500, -0.332159548998, -0.332936048508, -0.333712756634, -0.334489613771, -0.335266709328, -0.336043953896, -0.336821347475, -0.337598979473, -0.338376790285, -0.339154779911, -0.339932948351, -0.340703547001, -0.341460168362, -0.342204123735, -0.342936009169, -0.343656539917, -0.344366520643, -0.345066785812, -0.345758140087, -0.346441298723, -0.347117066383, -0.347785979509, -0.348448574543, -0.349105387926, -0.349756926298, -0.350403457880, -0.351045399904, -0.351682960987, -0.352316498756, -0.352946251631, -0.353572368622, -0.354195058346, -0.354814529419, -0.355430841446, -0.356044232845, -0.356654793024, -0.357262581587, -0.357867747545, -0.358470380306, -0.359070599079, -0.359668403864, -0.360263943672, -0.360857278109, -0.361448466778, -0.362037539482, -0.362624615431, -0.363209664822, -0.363792806864, -0.364374041557, -0.364953458309, -0.365531116724, -0.366106957197, -0.366681158543, -0.367253661156, -0.367824524641, -0.368393778801, -0.368961453438, -0.369527608156, -0.370092272758, -0.370655417442, -0.371217161417, -0.371777445078, -0.372336328030, -0.372893840075, -0.373450040817, -0.374004870653, -0.374558418989, -0.375110656023, -0.375661671162, -0.376211434603, -0.376759976149, -0.377307295799, -0.377853453159, -0.378398448229, -0.378942251205, -0.379484951496, -0.380026549101, -0.380567044020, -0.381106466055, -0.381644785404, -0.382182061672, -0.382718294859, -0.383253514767, -0.383787691593, -0.384320884943, -0.384853094816, -0.385384321213, -0.385914593935, -0.386443912983, -0.386972278357, -0.387499719858, -0.388026237488, -0.388551831245, -0.389076471329, -0.389600366354, -0.390123337507, -0.390645444393, -0.391166716814, -0.391687124968, -0.392206668854, -0.392725408077, -0.393243283033, -0.393760412931, -0.394276678562, -0.394792169333, -0.395306885242, -0.395820796490, -0.396333962679, -0.396846383810, -0.397358000278, -0.397868901491, -0.398379057646, -0.398888468742, -0.399397134781, -0.399905115366, -0.400412350893, -0.400918900967, -0.401424735785, -0.401929885149, -0.402434349060, -0.402938157320, -0.403441250324, -0.403943657875, -0.404445439577, -0.404946535826, -0.405447006226, -0.405946820974, -0.406445980072, -0.406944513321, -0.407442390919, -0.407939672470, -0.408436328173, -0.408932358027, -0.409427791834, -0.409922599792, -0.410416811705, -0.410910427570, -0.411403477192, -0.411895900965, -0.412387788296, -0.412879049778, -0.413369774818, -0.413859903812, -0.414349466562, -0.414838492870, -0.415326923132, -0.415814846754, -0.416302174330, -0.416788995266, -0.417275249958, -0.417760968208, -0.418246179819, -0.418730825186, -0.419214993715, -0.419698596001, -0.420181691647, -0.420664280653, -0.421146333218, -0.421627908945, -0.422108948231, -0.422589510679, -0.423069566488, -0.423549115658, -0.424028217793, -0.424506783485, -0.424984872341, -0.425462514162, -0.425939619541, -0.426416277885, -0.426892489195, -0.427368193865, -0.427843451500, -0.428318232298, -0.428792566061, -0.429266452789, -0.429739862680, -0.430212795734, -0.430685311556, -0.431157380342, -0.431629002094, -0.432100176811, -0.432570904493, -0.433041214943, -0.433511078358, -0.433980494738, -0.434449523687, -0.434918075800, -0.435386240482, -0.435853987932, -0.436321288347, -0.436788171530, -0.437254667282, -0.437720745802, -0.438186407089, -0.438651651144, -0.439116477966, -0.439580917358, -0.440044969320, -0.440508633852, -0.440971851349, -0.441434711218, -0.441897183657, -0.442359238863, -0.442820936441, -0.443282216787, -0.443743109703, -0.444203674793, -0.444663792849, -0.445123583078, -0.445582956076, -0.446041971445, -0.446500629187, -0.446958899498, -0.447416782379, -0.447874337435, -0.448331505060, -0.448788315058, -0.449244767427, -0.449700862169, -0.450156599283, -0.450611978769, -0.451067000628, -0.451521664858, -0.451975971460, -0.452429950237, -0.452883571386, -0.453336834908, -0.453789770603, -0.454242378473, -0.454694598913, -0.455146521330, -0.455598086119, -0.456049323082, -0.456500232220, -0.456950783730, -0.457401037216, -0.457850933075, -0.458300501108, -0.458749771118, -0.459198683500, -0.459647268057, -0.460095554590, -0.460543513298, -0.460991144180, -0.461438477039, -0.461885482073, -0.462332129478, -0.462778508663, -0.463224560022, -0.463670313358, -0.464115768671, -0.464560896158, -0.465005695820, -0.465450197458, -0.465894401073, -0.466338336468, -0.466781944036, -0.467225223780, -0.467668235302, -0.468110918999, -0.468553334475, -0.468995451927, -0.469437271357, -0.469878792763, -0.470320016146, -0.470760941505, -0.471201598644, -0.471641957760, -0.472082048655, -0.472521811724, -0.472961336374, -0.473400533199, -0.473839461803, -0.474278151989, -0.474716484547, -0.475154578686, -0.475592404604, -0.476029932499, -0.476467192173, -0.476904183626, -0.477340877056, -0.477777302265, -0.478213489056, -0.478649377823, -0.479084998369, -0.479520380497, -0.479955434799, -0.480390250683, -0.480824828148, -0.481259107590, -0.481693148613, -0.482126891613, -0.482560396194, -0.482993602753, -0.483426630497, -0.483859330416, -0.484291791916, -0.484723985195, -0.485155940056, -0.485587626696, -0.486019074917, -0.486450254917, -0.486881166697, -0.487311840057, -0.487742304802, -0.488172471523, -0.488602399826, -0.489032089710, -0.489461481571, -0.489890694618, -0.490319639444, -0.490748345852, -0.491176784039, -0.491604983807, -0.492032945156, -0.492460697889, -0.492888182402, -0.493315428495, -0.493742465973, -0.494169205427, -0.494595766068, -0.495022058487, -0.495448112488, -0.495873928070, -0.496299535036, -0.496724903584, -0.497150033712, -0.497574925423, -0.497999608517, -0.498424023390, -0.498848229647, -0.499272227287, -0.499695956707, -0.500119447708, -0.500542759895, -0.500965833664, -0.501388669014, -0.501811325550, -0.502233743668, -0.502655923367, -0.503077864647, -0.503499567509, -0.503921091557, -0.504342377186, -0.504763484001, -0.505184292793, -0.505604982376, -0.506025373936, -0.506445586681, -0.506865620613, -0.507285356522, -0.507704913616, -0.508124232292, -0.508543372154, -0.508962333202, -0.509381055832, -0.509799540043, -0.510217785835, -0.510635912418, -0.511053800583, -0.511471390724, -0.511888861656, -0.512306094170, -0.512723147869, -0.513139963150, -0.513556599617, -0.513972997665, -0.514389276505, -0.514805316925, -0.515221118927, -0.515636682510, -0.516052126884, -0.516467332840, -0.516882300377, -0.517297148705, -0.517711758614, -0.518126130104, -0.518540382385, -0.518954396248, -0.519368171692, -0.519781827927, -0.520195245743, -0.520608425140, -0.521021485329, -0.521434307098, -0.521846950054, -0.522259414196, -0.522671699524, -0.523083746433, -0.523495614529, -0.523907303810, -0.524318814278, -0.524730086327, -0.525141239166, -0.525552153587, -0.525962889194, -0.526373445988, -0.526783823967, -0.527194023132, -0.527603983879, -0.528013765812, -0.528423428535, -0.528832852840, -0.529242098331, -0.529651165009, -0.530060052872, -0.530468702316, -0.530877232552, -0.531285583973, -0.531693756580, -0.532101750374, -0.532509565353, -0.532917141914, -0.533324599266, -0.533731818199, -0.534138917923, -0.534545779228, -0.534952521324, -0.535359084606, -0.535765469074, -0.536171674728, -0.536577701569, -0.536983489990, -0.537389159203, -0.537794649601, -0.538200020790, -0.538605153561, -0.539010107517, -0.539414882660, -0.539819538593, -0.540224015713, -0.540628314018, -0.541032433510, -0.541436374187, -0.541840136051, -0.542243719101, -0.542647182941, -0.543050467968, -0.543453574181, -0.543856501579, -0.544259250164, -0.544661879539, -0.545064270496, -0.545466542244, -0.545868635178, -0.546270608902, -0.546672344208, -0.547073960304, -0.547475457191, -0.547876715660, -0.548277854919, -0.548678755760, -0.549079537392, -0.549480199814, -0.549880683422, -0.550280988216, -0.550681114197, -0.551081120968, -0.551480948925, -0.551880598068, -0.552280128002, -0.552679419518, -0.553078651428, -0.553477704525, -0.553876519203, -0.554275274277, -0.554673850536, -0.555072247982, -0.555470466614, -0.555868566036, -0.556266546249, -0.556664288044, -0.557061910629, -0.557459414005, -0.557856678963, -0.558253884315, -0.558650851250, -0.559047758579, -0.559444427490, -0.559840977192, -0.560237407684, -0.560633659363, -0.561029732227, -0.561425685883, -0.561821460724, -0.562217116356, -0.562612652779, -0.563007950783, -0.563403189182, -0.563798189163, -0.564193129539, -0.564587831497, -0.564982473850, -0.565376937389, -0.565771222115, -0.566165387630, -0.566559433937, -0.566953301430, -0.567346990108, -0.567740559578, -0.568134009838, -0.568527281284, -0.568920433521, -0.569313466549, -0.569706320763, -0.570098996162, -0.570491552353, -0.570883989334, -0.571276307106, -0.571668446064, -0.572060406208, -0.572452306747, -0.572843968868, -0.573235571384, -0.573626995087, -0.574018299580, -0.574409425259, -0.574800431728, -0.575191318989, -0.575582027435, -0.575972676277, -0.576363086700, -0.576753377914, -0.577143609524, -0.577533602715, -0.577923536301, -0.578313291073, -0.578702926636, -0.579092383385, -0.579481780529, -0.579870998859, -0.580260038376, -0.580649018288, -0.581037819386, -0.581426501274, -0.581815004349, -0.582203447819, -0.582591712475, -0.582979857922, -0.583367824554, -0.583755731583, -0.584143459797, -0.584531068802, -0.584918558598, -0.585305869579, -0.585693120956, -0.586080193520, -0.586467146873, -0.586853921413, -0.587240576744, -0.587627172470, -0.588013589382, -0.588399887085, -0.588786005974, -0.589172065258, -0.589557945728, -0.589943766594, -0.590329408646, -0.590714871883, -0.591100275517, -0.591485500336, -0.591870665550, -0.592255651951, -0.592640519142, -0.593025267124, -0.593409895897, -0.593794405460, -0.594178795815, -0.594563007355, -0.594947099686, -0.595331132412, -0.595714986324, -0.596098721027, -0.596482336521, -0.596865832806, -0.597249209881, -0.597632408142, -0.598015546799, -0.598398566246, -0.598781406879, -0.599164128304, -0.599546790123, -0.599929273129, -0.600311636925, -0.600693881512, -0.601076066494, -0.601458072662, -0.601839959621, -0.602221727371, -0.602603375912, -0.602984905243, -0.603366315365, -0.603747546673, -0.604128718376, -0.604509770870, -0.604890704155, -0.605271518230, -0.605652213097, -0.606032729149, -0.606413185596, -0.606793522835, -0.607173740864, -0.607553839684, -0.607933819294, -0.608313679695, -0.608693420887, -0.609073042870, -0.609452545643, }; } /* namespace r12AX7 */ #endif /* _DSP_R_12_AX_7_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/sinc.h000066400000000000000000000025501247673406200213240ustar00rootroot00000000000000/* dsp/sinc.h Copyright 2003-4 Tim Goetze http://quitte.de/dsp/ computes the sinc function: sin (x * pi) / (x * pi). */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _SINC_H_ #define _SINC_H_ #include "Sine.h" namespace DSP { /* sample sinc() with step size omega into s[], centered around s + n / 2 */ inline void sinc (double omega, sample_t * s, int n) { /* initial phase */ double phi = (n / 2) * -omega; Sine sine (omega, phi); for (int i = 0; i < n; ++i, phi += omega) { double sin_phi = sine.get(); if (fabs (phi) < 0.000000001) s[i] = 1.; else s[i] = sin_phi / phi; } } }; /* namespace DSP */ #endif /* _SINC_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/tonestack/000077500000000000000000000000001247673406200222105ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/caps/dsp/tonestack/ks_tab.h000066400000000000000000001115201247673406200236240ustar00rootroot00000000000000/* ks_tab.h Copyright 2006 David Yeh http://quitte.de/dsp/ Tone Stack emulation coefficient table for lattice filter. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _KS_TAB_H_ #define _KS_TAB_H_ namespace DSP { double ToneStackKS[] = { -0.999655160907038,0.980127109825519,-0.614914419461634, -0.999656568120978,0.980206907765841,-0.615188716843305, -0.999658517676675,0.980317236486758,-0.615568128036899, -0.999661208271173,0.98046907704722,-0.616090612857295, -0.999664902023365,0.980676730894581,-0.616805748794314, -0.999669936365576,0.980958270564762,-0.617776442867139, -0.999676730565233,0.981335546377295,-0.619079214371838, -0.999685778922586,0.981833264634174,-0.620801399623313, -0.999697618702198,0.982476493745153,-0.623033027158334, -0.999712758774516,0.983286007325851,-0.625851163451736, -0.99973155988367,0.984271440446054,-0.629296281256582, -0.999754076003002,0.98542354941219,-0.633344581005633, -0.999779899796788,0.986708608367483,-0.637886397587646, -0.999808088604521,0.988068846787513,-0.642724617436751, -0.999837246275279,0.989431147988487,-0.647602282731862, -0.999865773984939,0.990721953717012,-0.652254061004993, -0.999892205612632,0.991882358316473,-0.656461274207081, -0.999915487257858,0.992877246278541,-0.660087773487817, -0.999935097854328,0.993696153431228,-0.663086394317218, -0.999951003603908,0.994347891380557,-0.665481748921572, -0.999963513493909,0.994852827640871,-0.667343004256292, -0.999973116451418,0.995235942818388,-0.668758405977034, -0.999980351396071,0.995522046602486,-0.669817209794174, -0.99998572581668,0.995733179766024,-0.670599558951996, -0.999989676414453,0.995887625130919,-0.671172389008809, -0.99964958032362,0.979587583563023,-0.613841200571614, -0.99965105886229,0.979673968717358,-0.614139015327499, -0.99965310654599,0.979793345129979,-0.614550764884576, -0.999655931261197,0.979957524247093,-0.615117419836355, -0.999659806674729,0.980181839664558,-0.615892331666542, -0.99966508402413,0.980485578112938,-0.616942906326338, -0.999672197810492,0.980891896855617,-0.618350616306868, -0.999681656900824,0.981426699112155,-0.620207543319113, -0.999694008538874,0.982115787972737,-0.622607053883059, -0.999709761087518,0.982979722321469,-0.625626413960214, -0.999729257452251,0.984026477862534,-0.629301273863883, -0.999752511640623,0.985243474991385,-0.633596859040439, -0.999779056061162,0.98659232792421,-0.638387182556479, -0.999807879344237,0.988010325656004,-0.643456796374595, -0.999837527771197,0.989420506822037,-0.648533280922821, -0.999866374253003,0.990747568499188,-0.653342756744767, -0.999892960043297,0.991933070692341,-0.657666017256545, -0.999916265897791,0.992943874252478,-0.661372461014463, -0.999935816364322,0.993772030018927,-0.66442324414345, -0.999951619581897,0.994428658432513,-0.666851256235163, -0.999964015160231,0.994935885870011,-0.668732389522373, -0.99997351033002,0.995319870362579,-0.67015970170105, -0.999980652603298,0.995606135693424,-0.671225609758467, -0.999985951820482,0.995817121286393,-0.672012217707519, -0.999989843684551,0.995971315456801,-0.672587633075114, -0.999643378423064,0.978985881492609,-0.612500740824184, -0.999644936096075,0.979079752094198,-0.612825144699971, -0.99964709260153,0.979209402031235,-0.613273429777593, -0.999650065958286,0.979387576553966,-0.613889937311562, -0.999654142524417,0.97963076347191,-0.614732221861648, -0.99965968863373,0.97995959552602,-0.615872659651328, -0.999667155309705,0.980398657679706,-0.617398123146777, -0.999677066975389,0.980975122632538,-0.619405738241327, -0.999689981074653,0.98171549955349,-0.621992177692255, -0.999706404340016,0.982639946893981,-0.625234340260081, -0.999726658923252,0.983754410258249,-0.629161826247319, -0.999750714237359,0.985042459195097,-0.633727095084122, -0.999778037042399,0.986460516399503,-0.638785891235472, -0.999807542776699,0.9879405525597,-0.644102932677235, -0.999837718122031,0.989401653230246,-0.649389757433484, -0.999866908526907,0.990766919256306,-0.654364321488812, -0.999893665267437,0.991978663173791,-0.658807867477182, -0.999917006727609,0.993006014704747,-0.662596430819353, -0.999936505324055,0.993843761495685,-0.665700368324747, -0.999952212433419,0.994505470936323,-0.668161425658953, -0.999964498892951,0.995015103003389,-0.670062547781078, -0.999973890491138,0.995400030001749,-0.671501769244335, -0.99998094346516,0.995686507256172,-0.672574743431766, -0.9999861701193,0.995897381317078,-0.673365566060677, -0.999990005274817,0.996051350521398,-0.673943527635947, -0.999636497864097,0.978314250888013,-0.610868507178806, -0.999638143609638,0.978416674858248,-0.611223133119698, -0.999640421166529,0.978558054130414,-0.611712912678915, -0.999643559753541,0.97875218877719,-0.612385977311627, -0.999647859706568,0.979016862349941,-0.61330458074876, -0.999653703893894,0.97937420403329,-0.614546606917925, -0.999661561270341,0.979850359871836,-0.616204823882976, -0.999671972845482,0.980473843383251,-0.618381706324296, -0.99968550637702,0.981271816955761,-0.621177132648703, -0.999702665524369,0.982263799418809,-0.624666899863223, -0.999723748225852,0.983453256531511,-0.628873069633944, -0.999748673996069,0.984819306197574,-0.63373324602853, -0.99977683795445,0.98631258435924,-0.639082719486578, -0.999807077565093,0.987859347100283,-0.644664781960943, -0.999837817970182,0.989374645543676,-0.650174417628097, -0.999867378328761,0.990780183969698,-0.655321967566108, -0.999894323021703,0.992019364405147,-0.659890277895962, -0.999917711372098,0.993063913192047,-0.663763240841613, -0.999937166122597,0.993911596229206,-0.66692136936033, -0.999952783288071,0.994578575143569,-0.669415879976423, -0.999964965581412,0.995090721972347,-0.671337112690936, -0.999974257618683,0.995476661471914,-0.672788249221993, -0.999981224498276,0.995763398345879,-0.673868256393632, -0.999986381097967,0.995974194795217,-0.674663253284672, -0.999990161468935,0.996127963642263,-0.675243724730679, -0.999628871599216,0.977563340625174,-0.608914428430414, -0.999630615705312,0.977675597836713,-0.609303604497054, -0.999633028378567,0.977830449102962,-0.609840779838346, -0.999636351252157,0.978042891841267,-0.610578368059795, -0.999640900093703,0.978332170312435,-0.611583898461033, -0.999647075913584,0.978722082369623,-0.612941377384029, -0.999655367140044,0.979240482054698,-0.614750017497272, -0.999666332434044,0.979917290534043,-0.617117944354921, -0.999680549835182,0.98078023709284,-0.62014804531906, -0.999698518090521,0.981847892980184,-0.623914065384914, -0.999720506814374,0.98312069692929,-0.628428717414309, -0.999746379537056,0.9845726129935,-0.633612307993453, -0.999775453078932,0.986147824972144,-0.639277222192053, -0.999806481847782,0.987766463858197,-0.64514365014005, -0.999837827653051,0.989339503078404,-0.650889614066351, -0.999867784981983,0.990787512735525,-0.656218595909368, -0.999894934895781,0.992055379434954,-0.660916404977201, -0.999918381339343,0.993117793337578,-0.664876156724425, -0.999937800054862,0.993975761434163,-0.668089558173762, -0.999953333200393,0.99464819664376,-0.670617950121693, -0.999965416056239,0.995162965417149,-0.672559425593145, -0.999974612351636,0.995549984512892,-0.674022489490217, -0.999981496185304,0.995837026254415,-0.675109501099312, -0.999986585116092,0.996047777075045,-0.675908635241351, -0.999990312531913,0.996201368691033,-0.676491582768135, -0.999620420975775,0.976721799513297,-0.606601635017253, -0.999622275355999,0.97684543733367,-0.607030558569431, -0.999624839418341,0.977015864707194,-0.6076222077637, -0.999628368599035,0.97724944539608,-0.608433858852205, -0.999633195747874,0.977567077732237,-0.609538989890021, -0.999639741820149,0.977994425988304,-0.611028434870471, -0.999648516406429,0.978561213224713,-0.61300845746645, -0.999660096906448,0.979298825518745,-0.615593120493524, -0.999675071412884,0.980235426548642,-0.618887989909175, -0.999693931427662,0.981388243122174,-0.622963529987665, -0.999716913349402,0.982754019087567,-0.627820896963069, -0.999743817730573,0.984300742606826,-0.633360240188853, -0.999773875694897,0.985965403475005,-0.639368293929638, -0.999805753219434,0.987661589920051,-0.64554040334027, -0.999837747205987,0.989296206939276,-0.651537368871066, -0.999868129620919,0.990789029644207,-0.657056822841524, -0.999895502342668,0.992086891864035,-0.661889136757108, -0.999919018029778,0.993167859006729,-0.66593818034046, -0.999938408329249,0.994036465317501,-0.669207982776834, -0.999953863156006,0.994714542470667,-0.671770703919781, -0.999965851094207,0.995232037757674,-0.673732564308737, -0.999974955287586,0.995620200909204,-0.675207573989099, -0.999981758977838,0.995907590527414,-0.676301565758894, -0.999986782510092,0.996118325926393,-0.677104803288624, -0.999990458711745,0.996271762077857,-0.677690195455546, -0.999611053343317,0.975775743039613,-0.603884796825947, -0.999613031883562,0.975912650295233,-0.604359763835632, -0.999615766283421,0.976101218495051,-0.6050144497913, -0.999619527378512,0.976359379624739,-0.6059116832352, -0.999624666982958,0.976709914051601,-0.607131681527055, -0.999631628025413,0.977180580098539,-0.60877291769307, -0.999640943108211,0.977803144860867,-0.610949372866091, -0.999653209460591,0.978610499278102,-0.613781297332705, -0.999669024734094,0.979631045031147,-0.617376419553776, -0.99968887023538,0.980880152002991,-0.621800333065081, -0.999712943314506,0.982350051181377,-0.627039935806544, -0.999740973496636,0.984001791228723,-0.632971865481303, -0.999772097994155,0.985764344142541,-0.639354138465182, -0.999804888706456,0.987544341427899,-0.645855471952423, -0.999837576362628,0.989244700363806,-0.652119392113297, -0.999868413198854,0.990784834346404,-0.657839003408275, -0.99989602668777,0.992114065717222,-0.662811117640661, -0.99991962274449,0.993214296218098,-0.666952074995355, -0.999938992074364,0.994093898965587,-0.670279453607488, -0.999954374077029,0.994777802955718,-0.672876971494188, -0.999966271422507,0.995298127015559,-0.674859368596826, -0.999975286986133,0.995687496286005,-0.676346348241333, -0.999982013298656,0.99597527473925,-0.677447299868145, -0.99998697359497,0.996186023293375,-0.67825460983632, -0.999990600240577,0.99633932449768,-0.678842417373446, -0.999600659011736,0.974708035989579,-0.600707907614531, -0.999602778010854,0.974860542895886,-0.601236618584895, -0.999605704965998,0.975070410914491,-0.601964799208377, -0.999609727957629,0.975357383329951,-0.602961655657006, -0.999615219921094,0.975746392931787,-0.604315078325081, -0.999622648047905,0.976267554594276,-0.606132115041143, -0.999632569975118,0.976954867084367,-0.608535190817401, -0.999645603825713,0.977842737024011,-0.61165092590881, -0.999662355958282,0.978959518964467,-0.615588436744899, -0.999683293758011,0.980318062023894,-0.6204063845804, -0.999708568554593,0.981905078819314,-0.626074091503736, -0.999737829566184,0.983673547947443,-0.63244074347204, -0.99977011098019,0.985543514350578,-0.639232225924571, -0.99980388473604,0.987414259071501,-0.646088848833459, -0.999837314552659,0.989184888620582,-0.652637096558166, -0.999868636494754,0.990775003339118,-0.658567251678203, -0.999896509137097,0.992137047075131,-0.663684770297548, -0.999920196692532,0.993257274825996,-0.667920387749179, -0.999939552345391,0.99414823800866,-0.671306565983005, -0.999954866827104,0.994838153363176,-0.673939367784046, -0.999966677722521,0.995361406421881,-0.675942462717049, -0.999975607971746,0.995752041693706,-0.677441441950547, -0.99998225954412,0.996040248059161,-0.678549336835372, -0.99998715866607,0.996251036846146,-0.679360690995204, -0.9999907373361,0.996404222471088,-0.679950886641583, -0.999589107344937,0.973497312875968,-0.597001294754147, -0.999591386080871,0.973668328230434,-0.597593268842574, -0.99959453183983,0.973903432400324,-0.598407851047308, -0.999598852093593,0.974224475166901,-0.599521620766309, -0.999604743382784,0.974658864441676,-0.601031250906323, -0.999612699753767,0.97523937456658,-0.603053445209834, -0.99962330608542,0.97600243259764,-0.605719853677987, -0.999637202386439,0.976983924442916,-0.609163532904264, -0.999655002388357,0.978211748419904,-0.613493851909141, -0.999677154847819,0.979695369509032,-0.61875985885503, -0.99970375671817,0.981414741216281,-0.624909211111447, -0.999734366195928,0.983313445338257,-0.631759010565249, -0.999767904348015,0.985301605206536,-0.638999236073545, -0.99980273709838,0.987270802414969,-0.646240081512932, -0.999836960897071,0.989116638466047,-0.653091609034812, -0.999868800118624,0.990759590999243,-0.659243458364673, -0.999896950784494,0.992155965496688,-0.664512315028276, -0.999920740997713,0.993296950004936,-0.668845469230266, -0.999940090129518,0.994199644092504,-0.672291720044044, -0.99995534221587,0.994895755336471,-0.674960312547262, -0.999967070633483,0.995422035839287,-0.676984275473309, -0.999975918736602,0.9958139950097,-0.678495289077025, -0.99998249808615,0.996102666636638,-0.679610114082481, -0.999987338000502,0.996313521353591,-0.680425486697752, -0.999990870202646,0.996466609707338,-0.681018045054702, -0.999576241686749,0.972116617749095,-0.592677524712023, -0.99957870315305,0.97230982067096,-0.593344669475996, -0.999582098983777,0.972575129825707,-0.594261769514429, -0.999586758554847,0.972936863320769,-0.595513988772127, -0.999593104888038,0.97342529174051,-0.597208109144451, -0.999601661826924,0.974076198024372,-0.599471740073253, -0.999613043888958,0.974928635484012,-0.602446577711838, -0.999627913819039,0.97601985787081,-0.606271990784749, -0.999646890735495,0.977376723720224,-0.611055959085039, -0.999670398812179,0.979004185472482,-0.616834417946938, -0.999698470581005,0.980873900666029,-0.623528301373912, -0.999730560827483,0.982918498660264,-0.630917179784869, -0.999765466341961,0.985037108077224,-0.638650985611181, -0.999801440901162,0.987113342915257,-0.646308258106163, -0.999836514200741,0.989039777153926,-0.653483778621958, -0.99986890451577,0.990738630386345,-0.659869306066888, -0.999897352618159,0.992170935258235,-0.665295786916716, -0.999921256704574,0.993333463562061,-0.669729491261027, -0.999940606351128,0.994248266182805,-0.673237138510218, -0.999955801003116,0.994950758180636,-0.675942048171054, -0.999967450755683,0.99548016302305,-0.677987058060857, -0.999976219742873,0.995873502181361,-0.679510145713319, -0.999982729274098,0.99616267482996,-0.680631890943183, -0.999987511858705,0.996373619900609,-0.681451258613912, -0.999990999032129,0.996526628313089,-0.682046156011673, -0.99956187268433,0.970531479526377,-0.587625703122706, -0.999564544561613,0.970751592835626,-0.588383112630484, -0.999568228052843,0.971053471010611,-0.589423118267952, -0.99957327740021,0.971464348435104,-0.590840956059624, -0.999580145454236,0.972017826647422,-0.592755112731153, -0.999589389203159,0.972753097820726,-0.595305546336125, -0.999601655385005,0.973712026201297,-0.59864482915026, -0.999617630085655,0.97493300368958,-0.602918212146777, -0.99963793493872,0.976441017872316,-0.608229928386846, -0.999662961985651,0.978235025410733,-0.614598209635963, -0.999692667221772,0.980276477231159,-0.621910984287905, -0.999726387678802,0.982485230710179,-0.62990389083695, -0.999762783587337,0.984748286160729,-0.638182336737736, -0.999799990515491,0.986941155449722,-0.646291986463415, -0.9998359729422,0.988954090981809,-0.653814181774226, -0.999868949969855,0.990712133831788,-0.660446282379072, -0.999897715526312,0.992182056431122,-0.666037051039227, -0.999921744783971,0.99336694509957,-0.670574462569404, -0.999941101876438,0.994294241723863,-0.674144882521851, -0.999956243902449,0.995003300002107,-0.676886655565201, -0.999967818653287,0.99553592474197,-0.678952899992532, -0.999976511425167,0.995930698330922,-0.680488106036015, -0.999982953436508,0.996220406298199,-0.681616764634929, -0.999987680485395,0.996431464970127,-0.682440106138711, -0.999991124005049,0.996584409866817,-0.683037320515038, -0.999545769372832,0.968697129881683,-0.581703389413761, -0.999548685330482,0.968950318756053,-0.582570485078089, -0.999552702131166,0.969297052285561,-0.583759569216554, -0.999558202401447,0.969768041680857,-0.585377795072816, -0.999565672738884,0.970400788413801,-0.587557285815401, -0.99957570708997,0.971238349112145,-0.590452006519345, -0.999588987158165,0.972325543365669,-0.594226183799786, -0.999606222572019,0.973701485409508,-0.59903003585127, -0.999628033400377,0.97538810561202,-0.604960671497707, -0.999654769948043,0.977376402599708,-0.612012563238519, -0.999686297011813,0.979615237602125,-0.620032803668798, -0.999721817252862,0.982009578441646,-0.62870559790186, -0.999759840891314,0.984433140013485,-0.637587083446276, -0.999798379512054,0.986753408121981,-0.646189365889778, -0.999835335260595,0.988859323349258,-0.654083124451187, -0.999868936604779,0.990680093327157,-0.660975691075208, -0.999898040302297,0.992189415816235,-0.666737815961683, -0.99992220613798,0.99339751304594,-0.671382242820988, -0.999941577517616,0.994337697670144,-0.675016865803864, -0.999956671584689,0.995053508724011,-0.677796068374459, -0.999968174857054,0.995589447776921,-0.679883743341079, -0.999976794192393,0.995985708739766,-0.681431116570944, -0.999983170882486,0.996275984974083,-0.682566684542184, -0.999987844111017,0.996487179407059,-0.683393980689551, -0.999991245291239,0.996640076376014,-0.683993491478984, -0.999527647068028,0.966554383008803,-0.574724879596308, -0.999530848539975,0.966848851405444,-0.575727078537408, -0.99953525472567,0.967251434416085,-0.57709940504731, -0.999541280848263,0.967797029601554,-0.578963243130562, -0.999549451864263,0.968527732682652,-0.581466703366014, -0.999560403023074,0.969490971729293,-0.584779644783603, -0.999574853846751,0.970734576829317,-0.589078562311174, -0.999593537066634,0.972297674431688,-0.59451695807115, -0.999617065445341,0.974197436159595,-0.601179970724196, -0.999645735282156,0.97641428827226,-0.609030274548682, -0.999679302369117,0.978881522835187,-0.617864335613826, -0.99971681574429,0.981486776171256,-0.62730617857504, -0.999756621007015,0.98408936563692,-0.636857810951617, -0.999796600586004,0.986549150056454,-0.645997950543695, -0.99983459893934,0.988755172290888,-0.654290641249287, -0.999868864385614,0.990642480721143,-0.661458661540686, -0.999898327649026,0.992193087751127,-0.66739964572281, -0.999922641604418,0.9934252755721,-0.672154555174154, -0.999942034036786,0.994378751406568,-0.675854867355025, -0.999957084680973,0.995101502992542,-0.678672085713889, -0.999968519866798,0.995640849812384,-0.68078139550167, -0.999977068429707,0.996038649727251,-0.682340988976285, -0.999983381903268,0.996329525932602,-0.683483465015717, -0.999988002952587,0.996540877278988,-0.684314698518073, -0.99999136305069,0.996693741131828,-0.684916486550783, -0.999507150598248,0.964023361778569,-0.566443805631269, -0.999510689256673,0.964370271326711,-0.567615024684631, -0.999515554615236,0.964843610477965,-0.569216045936927, -0.999522199580942,0.965483372059577,-0.571385418568372, -0.999531192926903,0.966337094760156,-0.574290114034592, -0.999543216143162,0.967457120290353,-0.578117988726243, -0.999559029420708,0.968894166267862,-0.583058050119345, -0.999579387147137,0.970686191408446,-0.589264179491485, -0.999604886734295,0.972843149467847,-0.596802560696606, -0.999635754725745,0.975331385211999,-0.605593323611265, -0.999671616210287,0.978064893520965,-0.615370037541993, -0.999711344319248,0.980911208410932,-0.625686441819605, -0.999753104353326,0.983714303325128,-0.635985722329208, -0.999794645469085,0.986327296819486,-0.645714703351608, -0.999833761386482,0.988641287435787,-0.654436491473955, -0.999868733118323,0.990599247730616,-0.661896156590664, -0.999898578182872,0.992193134802953,-0.66802397047431, -0.99992305196103,0.993450331406395,-0.672892997532942, -0.999942472149362,0.994417511571143,-0.676660542838115, -0.999957483785679,0.995147392987777,-0.679516383603064, -0.999968854153534,0.995690240234068,-0.681647540650936, -0.999977334500213,0.99608962943699,-0.683219411520137, -0.999983586773378,0.99638113616817,-0.684368796864731, -0.999988157214811,0.996592664646218,-0.685203952213579, -0.999991477434319,0.996745509473735,-0.685807999622806, -0.999483830537178,0.96099363273767,-0.556526558132353, -0.999487771824971,0.961408567503047,-0.557913085833148, -0.99949318453032,0.961973392338345,-0.559804618374626, -0.999500565445448,0.962734373879405,-0.562360637123727, -0.99951053364941,0.963745527570854,-0.565770491848824, -0.999523822447645,0.965064639052157,-0.570242285359762, -0.999541235335364,0.96674484954275,-0.575977037252997, -0.999563545337433,0.968821009537295,-0.583124143295505, -0.999591323245939,0.971292265484483,-0.59172069161267, -0.999624705516342,0.974106135226471,-0.601629796724883, -0.999663160011883,0.977152661845667,-0.612506744011134, -0.999705358236516,0.980276222869867,-0.623823505106148, -0.999749268681416,0.983304874940093,-0.634960424679979, -0.999792504826671,0.98608661301415,-0.645335938947312, -0.999832819611289,0.988517266330941,-0.654520152023392, -0.999868542448472,0.990550325768389,-0.662288978786769, -0.999898792436992,0.992189608358322,-0.668612095924406, -0.999923437929053,0.993472770560181,-0.673599052648918, -0.999942892527405,0.994454078791728,-0.67743543482306, -0.999957869458855,0.995191281150468,-0.680330525251589, -0.999969178161553,0.995737720843995,-0.682483750055223, -0.999977592746505,0.996138748541774,-0.684067959405521, -0.999983785751949,0.996430915291374,-0.685224257694965, -0.999988307090768,0.996642640252181,-0.686063321051298, -0.999991588584531,0.996795479475092,-0.686669611188537, -0.999457108562801,0.957308100330452,-0.544510348254195, -0.999461536891738,0.957813496974774,-0.546177043093093, -0.999467610348739,0.958499509739162,-0.548445349392839, -0.99947587724496,0.959420224561283,-0.551500575623861, -0.999487014706649,0.96063737454455,-0.555558738396518, -0.999501814057202,0.962214593042568,-0.560850379360616, -0.999521124121701,0.964206335982036,-0.567586594383798, -0.999545731079106,0.966641151433838,-0.575904240780955, -0.99957616326672,0.969502075922418,-0.585796443590518, -0.999612440645105,0.97271133966764,-0.597049671898101, -0.999653841360903,0.97612926634827,-0.609221678375412, -0.999698805768044,0.979573890622481,-0.621690000135093, -0.999745088676003,0.98285750656369,-0.633769664809452, -0.999790168137297,0.985825691481262,-0.644857253738139, -0.999831770196654,0.988382650050448,-0.654540806884388, -0.999868291858835,0.990495625586984,-0.662637775338392, -0.999898970864313,0.99218254911945,-0.669165211711007, -0.999923800176717,0.993492674974405,-0.674274097203207, -0.999943295802393,0.99448854634705,-0.678180982015034, -0.999958242228691,0.995233262834796,-0.681115970328253, -0.999969492310313,0.995783386502816,-0.683291491360672, -0.9999778434921,0.996186100876788,-0.684888104075612, -0.999983979083579,0.996478956154855,-0.686051321225753, -0.999988452762854,0.996690896143604,-0.686894280318611, -0.999991696635762,0.996843742558989,-0.687502797675764, -0.99942622519677,0.95273551376525,-0.52973445342276, -0.999431251888513,0.953364890065364,-0.531775078248324, -0.999438135127102,0.954216205818819,-0.534544256478421, -0.999447484232229,0.955353409604379,-0.538259555819354, -0.999460043610956,0.956847382797287,-0.543168806764506, -0.999476669294355,0.958767617957035,-0.549526631433258, -0.999498256120107,0.961167548841825,-0.557549533893376, -0.999525594039106,0.96406411345337,-0.567348498477478, -0.99955914655047,0.967416296772765,-0.578850629984727, -0.999598782612736,0.971112205090269,-0.591738948908515, -0.999643550828683,0.974975424245401,-0.605449790438815, -0.999691626863873,0.978794695326964,-0.619253051210138, -0.999740535476891,0.982368032503499,-0.632399001290434, -0.999787623551576,0.985542928393217,-0.644273440690982, -0.999830609266859,0.988236917993668,-0.654497332961353, -0.999867980665878,0.990435036734623,-0.662943041651411, -0.999899113839826,0.992171987514358,-0.669684398813115, -0.99992413932228,0.993510119095966,-0.674919409982818, -0.999943682568059,0.994521000760791,-0.678898527582435, -0.999958602593663,0.995273426895692,-0.681874083329038, -0.999969796996008,0.995827325707849,-0.684072136980539, -0.999978087042701,0.996231774009489,-0.685681221614805, -0.999984166999591,0.996525345416597,-0.686851365701776, -0.999988594403447,0.996737518228668,-0.687698209735077, -0.99999180171517,0.996890384052486,-0.68830893987291, -0.999390157426463,0.946920942804295,-0.51122226313308, -0.999395933441802,0.947726692929812,-0.513777573628096, -0.999403827648663,0.948811777610072,-0.51723281658354, -0.999414522275239,0.950252708159809,-0.521846337183872, -0.999428839936587,0.952130988141452,-0.527903696028361, -0.999447708094207,0.954520972605718,-0.535683534220698, -0.999472065554197,0.957470350228495,-0.545397862094965, -0.999502690391198,0.960975483022857,-0.557109508368084, -0.999539949364454,0.964959236107952,-0.570646385943978, -0.999583515091451,0.969263514061787,-0.585551315111654, -0.999632157937203,0.973666963417248,-0.601110139814965, -0.999683751487941,0.977927125893571,-0.616472948214351, -0.999735576101922,0.981831575297115,-0.630831395552119, -0.999784857726637,0.985236493339534,-0.643578385785915, -0.999829332450153,0.988079481753197,-0.65438828186954, -0.999867608015024,0.990368426816476,-0.663205123565136, -0.999899221662683,0.992157944027575,-0.670170636093868, -0.999924455936773,0.99352517039157,-0.675536179250677, -0.999944053382784,0.994551522336392,-0.679589326684972, -0.999958951024577,0.995311856218264,-0.682606141144479, -0.999970092593324,0.995869621114249,-0.684826971680466, -0.999978323687495,0.996275849753412,-0.686448600346481, -0.999984349718736,0.996570164047781,-0.687625681500497, -0.99998873217569,0.996782586780245,-0.68847640106736, -0.999991903942978,0.996935483686355,-0.689089330549666, -0.999347481117801,0.939290459494334,-0.487467495756698, -0.999354218814845,0.940359291937983,-0.490758827061018, -0.999363405293717,0.94179042102576,-0.495189208987614, -0.99937581067759,0.943676400697521,-0.501069025782312, -0.999392348372638,0.946110332967342,-0.508727587294775, -0.999414022815505,0.949167962851339,-0.518463101634253, -0.999441809315305,0.952881721565543,-0.530462948663941, -0.999476448137069,0.957211904308363,-0.544703949914482, -0.999518163390315,0.962026671148328,-0.560864218500752, -0.999566371599233,0.9671054278198,-0.578296052160285, -0.999619505889223,0.972173183572955,-0.596100902764443, -0.999675097525905,0.976957135851488,-0.613301403710775, -0.999730172747202,0.981242394512128,-0.629046698844639, -0.999781855631441,0.984904293259831,-0.64276494225858, -0.999827934835346,0.987909677906738,-0.654211857218486, -0.999867172874756,0.990295640550794,-0.663424218297065, -0.999899294557703,0.992140429456527,-0.670624806055411, -0.999924750546524,0.99353788980571,-0.676125509396204, -0.999944408771816,0.994580185639227,-0.680254553289513, -0.999959287966352,0.99534862819584,-0.683313339914276, -0.999970379456712,0.995910350005688,-0.685557199449765, -0.999978553700145,0.996318404632234,-0.687191447715675, -0.99998452744805,0.996613487791505,-0.688375478023611, -0.999988866233908,0.996826176890439,-0.689230065027467, -0.999992003433048,0.996979116046436,-0.689845181360383, -0.99929612221311,0.92885164154965,-0.456019541351542, -0.999304136012349,0.930338079224207,-0.460415923605211, -0.999315027665755,0.932312945848239,-0.466298906238068, -0.99932967386815,0.934888870826995,-0.474045380275375, -0.999349092121395,0.938169262151671,-0.484032087617024, -0.999374365071002,0.942221624043521,-0.496561507953729, -0.999406486153652,0.947043569031187,-0.511755566566498, -0.999446114575041,0.952531828519665,-0.529439310857211, -0.999493265137843,0.95847104464828,-0.549062847224271, -0.999547019807701,0.964557081761264,-0.56972004770415, -0.999605404586501,0.970454509503382,-0.590292352063801, -0.999665568129688,0.975867415739172,-0.609679235305811, -0.999724281933513,0.980593694544417,-0.627021003888902, -0.999778600317221,0.984543928761683,-0.641824777683263, -0.999826410921627,0.987726759554179,-0.653965886787326, -0.999866674029357,0.990216498606079,-0.663600374094058, -0.999899332676593,0.992119445097779,-0.671047699874178, -0.999925023635529,0.99354833216856,-0.676688426942388, -0.99994474922943,0.994607059931934,-0.680895306350511, -0.999959613839686,0.995383815162353,-0.683996801246194, -0.999970657921832,0.99594958472018,-0.686263949735904, -0.999978777339898,0.996359510299634,-0.687910896533956, -0.999984700383703,0.996655387577793,-0.689101889949892, -0.999988996724424,0.996868358881836,-0.689960337531757, -0.999992100293264,0.997021350982018,-0.690577629107776, -0.999232852507766,0.913727519036899,-0.412606853125446, -0.999242645398387,0.915935956793934,-0.41877234970756, -0.999255893862801,0.918837586526089,-0.426956504255908, -0.999273602979233,0.922567693783475,-0.437619185024585, -0.999296904214589,0.927230536454782,-0.451177895602595, -0.999326946918226,0.932859625501621,-0.467896904643251, -0.999364701514127,0.939375916610792,-0.487748118687341, -0.999410673041913,0.946562446165056,-0.510287421562708, -0.999464570104078,0.95407637777001,-0.534615408125632, -0.999525039284739,0.961506490361475,-0.559480266158481, -0.999589621231223,0.968459052306018,-0.583516782465201, -0.999655048311424,0.97463639862061,-0.605533240844905, -0.999717853458056,0.979877377924312,-0.62472581872234, -0.999775072645767,0.984152640941173,-0.640748187551763, -0.999824754560624,0.987529886381108,-0.653647788844286, -0.999866110070261,0.990130796201362,-0.663733488567256, -0.999899336098702,0.992094982866248,-0.671440021774989, -0.999925275647391,0.993556546558814,-0.677225885975937, -0.999945075220809,0.994632209568016,-0.681512615422448, -0.999959929042703,0.99541748478404,-0.684657577866916, -0.999970928306749,0.995987393035966,-0.686948283109992, -0.99997899485255,0.996399233919776,-0.688608010654417, -0.999984868711673,0.996695929899694,-0.689805982917444, -0.999989123785848,0.996909198680171,-0.690668285388792, -0.99999219462584,0.997062253975925,-0.691287741435037, -0.999152077060728,0.889889548444139,-0.349061088286487, -0.999164564481812,0.893512362357241,-0.358321392850279, -0.999181328175061,0.89819090051193,-0.370471779013374, -0.999203519013022,0.904073370874581,-0.386063949868755, -0.999232372094478,0.911225741593758,-0.405512187944769, -0.999269054494269,0.919575847587998,-0.428928148710386, -0.999314422562479,0.928873757841218,-0.455951377537584, -0.999368702795487,0.938696629074492,-0.485653574382402, -0.999431161107827,0.948513477384418,-0.516600823762431, -0.999499889019962,0.957794017950755,-0.547100205403036, -0.999571867439423,0.966117436282565,-0.575553712340007, -0.999643400523047,0.973236877263828,-0.600771919790487, -0.999710829097846,0.979083725305741,-0.622127004150167, -0.999771250966691,0.983727246264749,-0.639523867161234, -0.999822958889432,0.987318112980124,-0.653254531680796, -0.999865479385908,0.990038301447359,-0.663823305665926, -0.999899304831475,0.992067025349649,-0.67180239279328, -0.999925506987289,0.993562576625782,-0.677738773058922, -0.999945387183711,0.994655694348136,-0.682107445763671, -0.999960233952359,0.995449700414856,-0.685296658764391, -0.999971190912995,0.996023838521735,-0.687611196422924, -0.999979206471127,0.996437638512654,-0.689283790136547, -0.999985032608414,0.996735177154657,-0.690488758695185, -0.999989247549769,0.996948758152623,-0.691354911475921, -0.999992286527841,0.997101886480435,-0.691976522006297, -0.999042007259475,0.846839476355646,-0.247562606935731, -0.999059310027056,0.853850930614133,-0.262993110426348, -0.99908215215834,0.862634865772264,-0.282874416523585, -0.999111791350179,0.873267701688246,-0.307799227855353, -0.999149460274721,0.885615899778428,-0.337997269244, -0.999196176211498,0.89928385557361,-0.373105577817442, -0.999252479946996,0.913630787322957,-0.412017325303364, -0.999318122840983,0.927874730147937,-0.452924609459096, -0.9993917698708,0.941254666200446,-0.493608708966554, -0.999470858355026,0.953184064404172,-0.531898307960971, -0.999551781187113,0.963334777927113,-0.566107560700536, -0.999630458843132,0.971634043939743,-0.595279512665676, -0.999703140993037,0.978200975484896,-0.619183392925497, -0.999767110732338,0.983264056319206,-0.638138631171118, -0.999821016253149,0.987090375099302,-0.652782585207141, -0.999864780149848,0.989938753401259,-0.663869411221801, -0.999899238810493,0.992035545799555,-0.672135353966679, -0.999925718023562,0.993566460874601,-0.678227911673286, -0.999945685530231,0.99467756984301,-0.682680702983936, -0.999960528925675,0.995480521419424,-0.685914973874208, -0.999971446026693,0.996058980854992,-0.688253627504821, -0.999979412416931,0.996474783268042,-0.689939175953683, -0.999985192241392,0.996773187954865,-0.69115115989633, -0.999989368141114,0.996987095415323,-0.692021159457422, -0.999992376091346,0.997140306222664,-0.692644915228308, -0.998865086928174,0.745924580066976,-0.0604141480564288, -0.998895487231205,0.764873649745473,-0.0910755754690588, -0.998933409668284,0.787060755596958,-0.129313938502959, -0.998979684019541,0.81184986561543,-0.175344827159791, -0.99903493644843,0.83813626350615,-0.228455101442363, -0.999099521125361,0.864509230253996,-0.286815983154912, -0.999173362695985,0.889538052977561,-0.347607059890004, -0.999255664139382,0.912066866492635,-0.407502232575221, -0.999344565973438,0.931397810612656,-0.463365245732482, -0.99943698944938,0.94731384445106,-0.512864721985471, -0.999528900858466,0.959977803907794,-0.554772924977228, -0.999616021217074,0.969782650772129,-0.588907534659359, -0.999694709613298,0.977214767105395,-0.615844974558559, -0.999762624036077,0.982758778214894,-0.636577066889482, -0.999818918115288,0.986845473409128,-0.652227863178924, -0.999864010307122,0.989831859802084,-0.663871226969659, -0.999899137899114,0.992000508059639,-0.672439368989748, -0.999925909089307,0.993568232917785,-0.6786940662434, -0.999945970648199,0.994697887686373,-0.68323323728191, -0.999960814301116,0.995510003466929,-0.686513398356392, -0.99997169391947,0.996092876111869,-0.688876459454257, -0.999979612900072,0.996510723831304,-0.690575054289614, -0.999985347769733,0.996810017409768,-0.69179407428053, -0.999989485678529,0.997024265113336,-0.69266791809088, -0.999992463403904,0.997177567482597,-0.693293810560046, -0.998168670041896,0.234202002930654,0.397757295018613, -0.998398779709349,0.385186319412462,0.309863134853804, -0.998576095338357,0.517988723723858,0.208214440973434, -0.998719357216826,0.629703569518859,0.096222948116353, -0.998842476527936,0.720203330951345,-0.0207601551784617, -0.998955556213729,0.791300079843907,-0.136348134920346, -0.999065378019792,0.845813571958666,-0.24445016793907, -0.999175567184225,0.88683389735994,-0.340477179725281, -0.999286737933873,0.917262868364474,-0.421953754912466, -0.999396947303236,0.939594279052761,-0.488436998558289, -0.999502626750312,0.955853286353504,-0.540978607500742, -0.999599838919708,0.967622793392235,-0.581462483326913, -0.999685441175006,0.976107385917766,-0.612050478470221, -0.999757759055763,0.982206390023536,-0.634821102862626, -0.999816654953809,0.986582054280449,-0.651585654275972, -0.999863167558551,0.989717294446952,-0.663828002921204, -0.999899001887773,0.991961866430869,-0.672714826358979, -0.999926080483689,0.993567921696033,-0.679137945776486, -0.999946242902525,0.994716695840987,-0.683765847313538, -0.999961090399614,0.995538198798929,-0.687092756503707, -0.999971934849436,0.996125577031366,-0.689480524558436, -0.999979808120392,0.996545512563991,-0.691192260465585, -0.999985499344625,0.996845717383694,-0.692418338685915, -0.999989600274749,0.997060318675938,-0.693296025163123, -0.999992548548667,0.997213721346586,-0.693924046451602 }; } /* namespace DSP */ #endif /* _KS_TAB_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/tonestack/tables.h000066400000000000000000000020621247673406200236330ustar00rootroot00000000000000/* ks_tab.h Copyright 2006 David Yeh http://quitte.de/dsp/ Tone Stack emulation coefficient table for lattice filter. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _TS_TABLES_H_ #define _TS_TABLES_H_ namespace DSP { extern double ToneStackKS[]; extern double ToneStackVS[]; } /* namespace DSP */ #endif /* _TS_TABLES_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/tonestack/vs_tab.h000066400000000000000000047246421247673406200236620ustar00rootroot00000000000000/* vs_tab.h Copyright 2006 David Yeh http://quitte.de/dsp/ Tone Stack emulation coefficient table for lattice filter. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _VS_TAB_H_ #define _VS_TAB_H_ namespace DSP { double ToneStackVS[] = { -9.45385446026598e-06,-0.00655412425867525,0.0132200144354443,0.0102188726276126, -1.24191436832038e-05,-0.00586705925752717,0.0294688298274704,-0.0216003374232777, -1.53844329061348e-05,-0.00517999425637911,0.0457176452194964,-0.053419547474168, -1.83497221290796e-05,-0.00449292925523104,0.0619664606115225,-0.0852387575250582, -2.13150113519966e-05,-0.00380586425408297,0.0782152760035486,-0.117057967575949, -2.42803005748859e-05,-0.00311879925293479,0.0944640913955747,-0.148877177626839, -2.72455897978585e-05,-0.00243173425178678,0.110712906787601,-0.180696387677729, -3.02108790207201e-05,-0.00174466925063865,0.126961722179627,-0.212515597728619, -3.31761682436094e-05,-0.00105760424949042,0.143210537571653,-0.24433480777951, -3.61414574664987e-05,-0.000370539248342183,0.159459352963679,-0.2761540178304, -3.9106746689721e-05,0.000316525752805275,0.175708168355705,-0.30797322788129, -4.20720359125548e-05,0.0010035907539534,0.191956983747731,-0.339792437932181, -4.50373251356662e-05,0.00169065575510152,0.208205799139757,-0.371611647983071, -4.80026143581114e-05,0.00237772075625009,0.224454614531783,-0.403430858033961, -5.09679035813893e-05,0.00306478575739821,0.24070342992381,-0.435250068084851, -5.3933192804112e-05,0.00375185075854612,0.256952245315835,-0.467069278135742, -5.68984820269458e-05,0.00443891575969446,0.273201060707862,-0.498888488186632, -5.98637712498906e-05,0.00512598076084236,0.289449876099888,-0.530707698237522, -6.28290604727244e-05,0.00581304576199071,0.305698691491914,-0.562526908288412, -6.57943496960023e-05,0.00650011076313839,0.32194750688394,-0.594346118339303, -6.87596389189471e-05,0.00718717576428629,0.338196322275966,-0.626165328390193, -7.17249281420029e-05,0.00787424076543397,0.354445137667992,-0.657984538441083, -7.46902173648367e-05,0.00856130576658254,0.370693953060018,-0.689803748491973, -7.76555065876705e-05,0.00924837076773066,0.386942768452044,-0.721622958542864, -8.06207958105043e-05,0.00993543576887879,0.40319158384407,-0.753442168593754, -9.41939857081013e-06,-0.00655319504622455,0.0132268917091642,0.0102210248142172, -1.23601628603601e-05,-0.00586780948081826,0.0294548118993129,-0.0216122564867453, -1.53009271499499e-05,-0.00518242391541199,0.0456827320894617,-0.0534455377877077, -1.82416914396022e-05,-0.00449703835000587,0.0619106522796104,-0.0852788190886702, -2.11824557291018e-05,-0.0038116527845995,0.0781385724697592,-0.117112100389633, -2.41232200187957e-05,-0.00312626721919329,0.094366492659908,-0.148945381690595, -2.70639843083231e-05,-0.00244088165378709,0.110594412850057,-0.180778662991558, -3.00047485976007e-05,-0.00175549608838033,0.126822333040206,-0.21261194429252, -3.29455128875722e-05,-0.00107011052297457,0.143050253230354,-0.244445225593482, -3.58862771771551e-05,-0.000384724957568361,0.159278173420503,-0.276278506894445, -3.8827041466738e-05,0.000300660607837733,0.175506093610652,-0.308111788195407, -4.17678057565429e-05,0.000986046173243826,0.191734013800801,-0.33994506949637, -4.47085700459038e-05,0.00167143173865036,0.207961933990949,-0.371778350797332, -4.76493343355422e-05,0.00235681730405624,0.224189854181098,-0.403611632098295, -5.05900986250696e-05,0.00304220286946277,0.240417774371247,-0.435444913399257, -5.35308629144859e-05,0.00372758843486909,0.256645694561396,-0.46727819470022, -5.64716272042354e-05,0.00441297400027518,0.272873614751544,-0.499111476001182, -5.94123914935407e-05,0.00509835956568172,0.289101534941693,-0.530944757302145, -6.23531557831791e-05,0.00578374513108781,0.305329455131842,-0.562778038603107, -6.52939200728175e-05,0.00646913069649413,0.32155737532199,-0.594611319904069, -6.8234684362567e-05,0.00715451626190022,0.337785295512139,-0.626444601205032, -7.11754486519833e-05,0.00783990182730676,0.354013215702288,-0.658277882505994, -7.41162129419548e-05,0.00852528739271241,0.370241135892437,-0.690111163806957, -7.70569772319263e-05,0.00921067295811806,0.386469056082585,-0.721944445107919, -7.99977415204545e-05,0.00989605852352593,0.402696976272735,-0.753777726408882, -9.37160003060961e-06,-0.00655190758967857,0.0132364072721412,0.0102240017427008, -1.22785730753069e-05,-0.00586885694194833,0.0294354064091315,-0.0216287430680944, -1.51855461200251e-05,-0.00518580629421808,0.0456344055461219,-0.0534814878788896, -1.80925191646669e-05,-0.00450275564648778,0.0618334046831123,-0.0853342326896848, -2.09994922094614e-05,-0.00381970499875756,0.0780324038201028,-0.11718697750048, -2.3906465254131e-05,-0.00313665435102717,0.0942314029570933,-0.149039722311275, -2.68134382989116e-05,-0.00245360370329706,0.110430402094084,-0.18089246712207, -2.97204113434146e-05,-0.0017705530555665,0.126629401231074,-0.212745211932866, -3.26273843883063e-05,-0.00108750240783662,0.142828400368064,-0.244597956743661, -3.55343574329758e-05,-0.000404451760106284,0.159027399505055,-0.276450701554456, -3.84413304777564e-05,0.000278598887623938,0.175226398642045,-0.308303446365251, -4.1348303522426e-05,0.000961649535354159,0.191425397779036,-0.340156191176046, -4.42552765669846e-05,0.0016447001830846,0.207624396916026,-0.372008935986842, -4.71622496115987e-05,0.00232775083081505,0.223823396053016,-0.403861680797637, -5.00692226566013e-05,0.0030108014785446,0.240022395190006,-0.435714425608432, -5.29761957012154e-05,0.00369385212627549,0.256221394326997,-0.467567170419227, -5.58831687457184e-05,0.00437690277400571,0.272420393463988,-0.499419915230022, -5.87901417908876e-05,0.00505995342173526,0.288619392600978,-0.531272660040818, -6.16971148355017e-05,0.00574300406946571,0.304818391737968,-0.563125404851613, -6.46040878798937e-05,0.00642605471719659,0.321017390874959,-0.594978149662408, -6.75110609249518e-05,0.00710910536492637,0.337216390011949,-0.626830894473203, -7.04180339694549e-05,0.00779215601265681,0.35341538914894,-0.658683639283998, -7.33250070134028e-05,0.0084752066603877,0.36961438828593,-0.690536384094793, -7.62319800590161e-05,0.0091582573081177,0.385813387422921,-0.722389128905589, -7.91389531040743e-05,0.00984130795584681,0.40201238655991,-0.754241873716384, -9.30551244646138e-06,-0.00655013053761504,0.0132495164937455,0.0102281012526002, -1.21662034849382e-05,-0.00587031791026438,0.0294086533311691,-0.0216514466378377, -1.5026894523415e-05,-0.00519050528291368,0.0455677901685926,-0.0535309945282756, -1.78875855619126e-05,-0.00451069265556314,0.0617269270060161,-0.0854105424187135, -2.07482766004519e-05,-0.00383088002821247,0.0778860638434397,-0.117290090309151, -2.36089676389495e-05,-0.00315106740086191,0.0940452006808631,-0.149169638199589, -2.64696586773916e-05,-0.00247125477351118,0.110204337518287,-0.181049186090027, -2.93303497158059e-05,-0.00179144214616056,0.12636347435571,-0.212928733980465, -3.21910407543036e-05,-0.00111162951880983,0.142522611193134,-0.244808281870903, -3.50517317928567e-05,-0.000431816891459214,0.158681748030557,-0.276687829761341, -3.79124228314653e-05,0.000247995735891182,0.174840884867981,-0.308567377651779, -4.07731138695744e-05,0.000927808363242466,0.191000021705405,-0.340446925542217, -4.36338049084051e-05,0.00160762099059264,0.207159158542828,-0.372326473432655, -4.64944959466806e-05,0.00228743361794348,0.223318295380251,-0.404206021323093, -4.93551869851228e-05,0.0029672462452941,0.239477432217675,-0.436085569213531, -5.22158780237314e-05,0.00364705887264472,0.255636569055099,-0.467965117103969, -5.50765690616739e-05,0.00432687149999578,0.271795705892522,-0.499844664994407, -5.79372601006156e-05,0.00500668412734617,0.287954842729946,-0.531724212884844, -6.07979511390022e-05,0.00568649675469701,0.304113979567369,-0.563603760775282, -6.36586421778329e-05,0.00636630938204696,0.320273116404793,-0.59548330866572, -6.65193332161085e-05,0.00704612200939803,0.336432253242216,-0.627362856556158, -6.93800242546061e-05,0.00772593463674864,0.35259139007964,-0.659242404446596, -7.22407152924376e-05,0.00840574726410015,0.368750526917063,-0.691121952337034, -7.51014063312683e-05,0.00908555989145032,0.384909663754487,-0.723001500227472, -7.79620973696549e-05,0.00976537251880094,0.40106880059191,-0.75488104811791, -9.21455795741509e-06,-0.00654769054013065,0.0132674694997489,0.01023371233782, -1.20123774072986e-05,-0.00587235235406242,0.0293719796792397,-0.0216825214901362, -1.48101968571318e-05,-0.00519701416799415,0.0454764898587305,-0.0535987553180923, -1.76080163070691e-05,-0.00452167598192593,0.0615810000382213,-0.0855149891460485, -2.04058357570203e-05,-0.0038463377958578,0.0776855102177121,-0.117431222974005, -2.32036552068604e-05,-0.0031709996097895,0.0937900203972029,-0.149347456801961, -2.60014746567283e-05,-0.00249566142372137,0.109894530576694,-0.181263690629917, -2.87992941066517e-05,-0.00182032323765302,0.125999040756185,-0.213179924457873, -3.15971135562698e-05,-0.00114498505158456,0.142103550935675,-0.245096158285829, -3.4394933006443e-05,-0.000469646865516538,0.158208061115166,-0.277012392113785, -3.71927524563387e-05,0.000205691320551926,0.174312571294657,-0.308928625941742, -3.99905719063454e-05,0.000881029506619724,0.190417081474148,-0.340844859769698, -4.27883913557969e-05,0.00155636769268885,0.206521591653639,-0.372761093597654, -4.55862108061367e-05,0.00223170587875599,0.222626101833129,-0.40467732742561, -4.83840302557548e-05,0.00290704406482489,0.23873061201262,-0.436593561253566, -5.11818497057615e-05,0.00358238225089269,0.254835122192111,-0.468509795081522, -5.39796691556571e-05,0.00425772043696138,0.270939632371602,-0.500426028909479, -5.67774886057748e-05,0.00493305862302873,0.287044142551092,-0.532342262737435, -5.95753080553374e-05,0.00560839680909742,0.303148652730583,-0.564258496565391, -6.2373127505011e-05,0.00628373499516632,0.319253162910074,-0.596174730393347, -6.51709469547956e-05,0.00695907318123457,0.335357673089565,-0.628090964221303, -6.79687664046913e-05,0.00763441136730281,0.351462183269056,-0.660007198049259, -7.07665858552531e-05,0.00830974955337016,0.367566693448546,-0.691923431877215, -7.35644053048157e-05,0.00898508773943885,0.383671203628037,-0.723839665705172, -7.63622247547113e-05,0.00966042592550664,0.399775713807528,-0.755755899533128, -9.0901720242835e-06,-0.00654436433726225,0.0132918568674893,0.0102413285781499, -1.18035387460871e-05,-0.00587517815686124,0.0293220966544303,-0.0217247011281304, -1.45169054678873e-05,-0.00520599197646027,0.0453523364413711,-0.0536907308344107, -1.72302721896667e-05,-0.00453680579605925,0.061382576228312,-0.0856567605406909, -1.99436389114738e-05,-0.00386761961565824,0.077412816015253,-0.117622790246971, -2.26570056333086e-05,-0.00319843343525739,0.0934430558021937,-0.149588819953251, -2.53703723551435e-05,-0.00252924725485637,0.109473295589135,-0.181554849659532, -2.80837390769784e-05,-0.00186006107445547,0.125503535376076,-0.213520879365812, -3.07971057986745e-05,-0.00119087489405445,0.141533775163016,-0.245486909072092, -3.35104725203705e-05,-0.000521688713653212,0.157564014949957,-0.277452938778373, -3.62238392423997e-05,0.00014749746674747,0.173594254736898,-0.309418968484653, -3.89372059641513e-05,0.000816683647148375,0.189624494523839,-0.341384998190933, -4.16505726857919e-05,0.00148586982754972,0.20565473431078,-0.373351027897213, -4.43639394076545e-05,0.00215505600795085,0.221684974097721,-0.405317057603494, -4.70773061294061e-05,0.00282424218835153,0.237715213884662,-0.437283087309774, -4.97906728511577e-05,0.00349342836875288,0.253745453671603,-0.469249117016054, -5.25040395730203e-05,0.00416261454915356,0.269775693458544,-0.501215146722335, -5.52174062947719e-05,0.00483180072955491,0.285805933245485,-0.533181176428615, -5.79307730167455e-05,0.00550098690995537,0.301836173032425,-0.565147206134895, -6.06441397383861e-05,0.00617017309035606,0.317866412819366,-0.597113235841175, -6.33575064603598e-05,0.00683935927075741,0.333896652606307,-0.629079265547456, -6.60708731822224e-05,0.00750854545115809,0.349926892393248,-0.661045295253736, -6.87842399037519e-05,0.00817773163155922,0.365957132180188,-0.693011324960016, -7.14976066260586e-05,0.0088469178119599,0.38198737196713,-0.724977354666296, -7.42109733471441e-05,0.00951610399236191,0.398017611754071,-0.756943384372577, -8.92153915172701e-06,-0.00653987441482468,0.013324621159271,0.0102515503577533, -1.15231835207535e-05,-0.00587908717616796,0.0292549605824841,-0.021781310550188, -1.41248278898304e-05,-0.00521829993751122,0.0451853000056971,-0.0538141714581293, -1.67264722587823e-05,-0.00455751269885435,0.0611156394289102,-0.0858470323660706, -1.93281166278592e-05,-0.0038967254601977,0.0770459788521232,-0.117879893274012, -2.1929760996936e-05,-0.003235938221541,0.0929763182753361,-0.149912754181953, -2.45314053658185e-05,-0.00257515098288408,0.108906657698549,-0.181945615089894, -2.71330497349509e-05,-0.00191436374422738,0.124836997121762,-0.213978475997836, -2.97346941040555e-05,-0.00125357650557101,0.140767336544975,-0.246011336905777, -3.23363384731046e-05,-0.000592789266914084,0.156697675968188,-0.278044197813718, -3.49379828420981e-05,6.79979717426171e-05,0.172628015391401,-0.31007705872166, -3.75396272110917e-05,0.00072878521039943,0.188558354814614,-0.342109919629601, -4.01412715799743e-05,0.00138957244905646,0.204488694237827,-0.374142780537542, -4.27429159494674e-05,0.00205035968771239,0.22041903366104,-0.406175641445483, -4.5344560318239e-05,0.00271114692636965,0.236349373084253,-0.438208502353425, -4.79462046875101e-05,0.00337193416502601,0.252279712507466,-0.470241363261366, -5.05478490560041e-05,0.00403272140368327,0.268210051930679,-0.502274224169307, -5.31494934248311e-05,0.0046935086423403,0.284140391353892,-0.534307085077249, -5.57511377943243e-05,0.00535429588099645,0.300070730777105,-0.56633994598519, -5.83527821632623e-05,0.00601508311965326,0.316001070200318,-0.598372806893131, -6.09544265320894e-05,0.00667587035831074,0.331931409623532,-0.630405667801072, -6.35560709016936e-05,0.00733665759696622,0.347861749046744,-0.662438528709014, -6.61577152706316e-05,0.00799744483562348,0.363792088469957,-0.694471389616955, -6.87593596394587e-05,0.00865823207428029,0.379722427893171,-0.726504250524896, -7.13610040086188e-05,0.00931901931293666,0.395652767316383,-0.758537111432838, -8.69560363404333e-06,-0.00653389357768309,0.0133679932546893,0.0102650629330693, -1.1152452480033e-05,-0.00588445970216538,0.0291658802327748,-0.0218561447873589, -1.36093013259897e-05,-0.00523502582664756,0.0449637672108603,-0.0539773525077871, -1.60661501719533e-05,-0.00458559195112979,0.0607616541889458,-0.0860985602282153, -1.85229990179725e-05,-0.0039361580756121,0.0765595411670313,-0.118219767948644, -2.09798478638945e-05,-0.00328672420009424,0.0923574281451169,-0.150340975669072, -2.34366967097333e-05,-0.00263729032457627,0.108155315123202,-0.1824621833895, -2.58935455558218e-05,-0.00198785644905874,0.123953202101288,-0.214583391109928, -2.83503944018548e-05,-0.00133842257354089,0.139751089079374,-0.246704598830356, -3.08072432478879e-05,-0.000688988698023363,0.155548976057459,-0.278825806550785, -3.32640920938099e-05,-3.95548225053943e-05,0.171346863035544,-0.310947014271213, -3.57209409400649e-05,0.000609879053012019,0.18714475001363,-0.343068221991641, -3.81777897856539e-05,0.0012593129285301,0.202942636991715,-0.375189429712069, -4.06346386317979e-05,0.00190874680404773,0.218740523969801,-0.407310637432497, -4.30914874776089e-05,0.00255818067956581,0.234538410947887,-0.439431845152926, -4.55483363235309e-05,0.00320761455508323,0.250336297925972,-0.471553052873354, -4.8005185169453e-05,0.00385704843060108,0.266134184904057,-0.503674260593782, -5.0462034015486e-05,0.00450648230611894,0.281932071882143,-0.53579546831421, -5.2918882861519e-05,0.0051559161816368,0.297729958860229,-0.567916676034638, -5.53757317078851e-05,0.00580535005715377,0.313527845838314,-0.600037883755067, -5.78325805538071e-05,0.00645478393267185,0.329325732816399,-0.632159091475495, -6.02894293996181e-05,0.00710421780819015,0.345123619794485,-0.664280299195923, -6.27462782459842e-05,0.00775365168370667,0.36092150677257,-0.696401506916351, -6.52031270920173e-05,0.00840308555922498,0.376719393750656,-0.72852271463678, -6.76599759376062e-05,0.00905251943474328,0.392517280728742,-0.760643922357208, -8.3976552870263e-06,-0.00652606653885501,0.0134242963979835,0.0102825726841942, -1.0671874045888e-05,-0.00589176903631011,0.029049889087214,-0.0219531158559996, -1.29460928047914e-05,-0.0052574715337653,0.0446754817764445,-0.0541888043961935, -1.52203115635907e-05,-0.00462317403122031,0.060301074465675,-0.0864244929363873, -1.74945303223761e-05,-0.0039888765286753,0.0759266671549055,-0.118660181476581, -1.97687490813003e-05,-0.00335457902613046,0.091552259844136,-0.150895870016775, -2.2042967840058e-05,-0.0027202815235855,0.107177852533366,-0.183131558556969, -2.43171865989544e-05,-0.00208598402104065,0.122803445222597,-0.215367247097163, -2.65914053579897e-05,-0.00145168651849592,0.138429037911827,-0.247602935637357, -2.88656241165808e-05,-0.000817389015950853,0.154054630601058,-0.27983862417755, -3.11398428753384e-05,-0.000183091513405786,0.169680223290288,-0.312074312717744, -3.34140616344847e-05,0.000451205989138836,0.185305815979519,-0.344310001257938, -3.56882803931313e-05,0.00108550349168413,0.200931408668749,-0.376545689798132, -3.7962499152e-05,0.00171980099422875,0.21655700135798,-0.408781378338326, -4.02367179110907e-05,0.00235409849677359,0.23218259404721,-0.44101706687852, -4.25109366696264e-05,0.00298839599931844,0.24780818673644,-0.473252755418713, -4.47851554288281e-05,0.00362269350186306,0.263433779425671,-0.505488443958907, -4.70593741874747e-05,0.00425699100440813,0.279059372114901,-0.537724132499101, -4.93335929462324e-05,0.00489128850695342,0.294684964804132,-0.569959821039295, -5.16078117052121e-05,0.00552558600949804,0.310310557493362,-0.602195509579489, -5.38820304641918e-05,0.00615988351204289,0.325936150182593,-0.634431198119683, -5.61562492230605e-05,0.00679418101458751,0.341561742871823,-0.666666886659877, -5.84304679815961e-05,0.00742847851713302,0.357187335561054,-0.69890257520007, -6.07046867409089e-05,0.00806277601967764,0.372812928250285,-0.731138263740264, -6.29789054994445e-05,0.00869707352222271,0.388438520939515,-0.763373952280458, -8.01288922574507e-06,-0.00651605811818941,0.0134955599712367,0.0103046842885544, -1.00647415169075e-05,-0.00590156051043475,0.0289025106675619,-0.0220755725310754, -1.21165938081064e-05,-0.00528706290268011,0.0443094613638871,-0.0544558293507052, -1.41684460992636e-05,-0.00467256529492538,0.0597164120602123,-0.0868360861703351, -1.62202983903792e-05,-0.00405806768717071,0.0751233627565375,-0.119216342989965, -1.82721506816752e-05,-0.0034435700794162,0.0905303134528626,-0.151596599809595, -2.03240029728324e-05,-0.00282907247166142,0.105937264149188,-0.183976856629224, -2.23758552639897e-05,-0.00221457486390686,0.121344214845513,-0.216357113448854, -2.44277075554522e-05,-0.00160007725615263,0.136751165541838,-0.248737370268484, -2.64795598463041e-05,-0.000985579648397295,0.152158116238164,-0.281117627088114, -2.85314121376001e-05,-0.000371082040642845,0.167565066934489,-0.313497883907744, -3.05832644285076e-05,0.000243415567112271,0.182972017630814,-0.345878140727373, -3.26351167200811e-05,0.000857913174866054,0.198378968327139,-0.378258397547003, -3.46869690107665e-05,0.00147241078262139,0.213785919023464,-0.410638654366633, -3.67388213020625e-05,0.00208690839037606,0.22919286971979,-0.443018911186263, -3.87906735930255e-05,0.00270140599813096,0.244599820416115,-0.475399168005893, -4.08425258842104e-05,0.00331590360588563,0.26000677111244,-0.507779424825523, -4.28943781759505e-05,0.00393040121363963,0.275413721808765,-0.540159681645152, -4.49462304674686e-05,0.00454489882139342,0.29082067250509,-0.572539938464782, -4.69980827583205e-05,0.00515939642914853,0.306227623201415,-0.604920195284412, -4.90499350497275e-05,0.0057738940369032,0.321634573897741,-0.637300452104042, -5.11017873406905e-05,0.00638839164465788,0.337041524594066,-0.669680708923672, -5.31536396312093e-05,0.00700288925241388,0.352448475290392,-0.702060965743301, -5.52054919231715e-05,0.00761738686016722,0.367855425986716,-0.734441222562931, -5.72573442142454e-05,0.00823188446792233,0.383262376683042,-0.766821479382561, -7.52930152583819e-06,-0.00650363431344411,0.013582925522093,0.0103317153026516, -9.32223570344892e-06,-0.00591438229124575,0.0287209743777398,-0.0222252734779792, -1.11151698810596e-05,-0.00532513026904735,0.0438590232333866,-0.0547822622586099, -1.29081040586843e-05,-0.00473587824684896,0.0589970720890334,-0.0873392510392406, -1.47010382363366e-05,-0.00414662622465067,0.0741351209446801,-0.119896239819871, -1.6493972413878e-05,-0.00355737420245217,0.089273169800327,-0.152453228600502, -1.82869065915581e-05,-0.002968122180254,0.104411218655974,-0.185010217381133, -2.00798407690717e-05,-0.00237887015805549,0.11954926751162,-0.217567206161764, -2.18727749466407e-05,-0.00178961813585721,0.134687316367267,-0.250124194942394, -2.36657091243209e-05,-0.0012003661136587,0.149825365222914,-0.282681183723025, -2.54586433019455e-05,-0.000611114091460196,0.164963414078561,-0.315238172503656, -2.72515774794035e-05,-2.18620692618021e-05,0.180101462934208,-0.347795161284287, -2.90445116573057e-05,0.000567389952936148,0.195239511789854,-0.380352150064917, -3.08374458347638e-05,0.00115664197513499,0.210377560645501,-0.412909138845548, -3.26303800124439e-05,0.00174589399733294,0.225515609501148,-0.445466127626179, -3.44233141897909e-05,0.00233514601953178,0.240653658356795,-0.478023116406809, -3.62162483674711e-05,0.00292439804172973,0.255791707212441,-0.51058010518744, -3.80091825449291e-05,0.00351365006392879,0.270929756068088,-0.543137093968071, -3.98021167228313e-05,0.00410290208612651,0.286067804923735,-0.575694082748702, -4.15950509007335e-05,0.00469215410832424,0.301205853779381,-0.608251071529333, -4.33879850779695e-05,0.00528140613052308,0.316343902635028,-0.640808060309963, -4.51809192555386e-05,0.00587065815272148,0.331481951490675,-0.673365049090594, -4.69738534332187e-05,0.00645991017492031,0.346620000346322,-0.705922037871225, -4.87667876102327e-05,0.0070491621971196,0.361758049201969,-0.738479026651855, -5.05597217874687e-05,0.00763841421931799,0.376896098057616,-0.771036015432486, -6.94191090454613e-06,-0.00648876962972663,0.0136859348298208,0.0103634789907996, -8.44945441232786e-06,-0.00593064844059443,0.0285057295183049,-0.0224011845324374, -9.95699792012694e-06,-0.00537252725146228,0.0433255242067889,-0.0551658480556743, -1.14645414278775e-05,-0.00481440606233002,0.058145318895273,-0.0879305115789112, -1.29720849357529e-05,-0.0042562848731979,0.072965113583757,-0.120695175102148, -1.44796284435034e-05,-0.00369816368406561,0.0877849082722411,-0.153459838625385, -1.59871719514204e-05,-0.00314004249493371,0.102604702960725,-0.186224502148622, -1.74947154590321e-05,-0.00258192130580115,0.117424497649209,-0.218989165671859, -1.90022589668382e-05,-0.00202380011666892,0.132244292337693,-0.251753829195096, -2.05098024746442e-05,-0.00146567892753702,0.147064087026177,-0.284518492718333, -2.20173459823392e-05,-0.000907557738404785,0.161883881714661,-0.31728315624157, -2.35248894902007e-05,-0.00034943654927222,0.176703676403146,-0.350047819764807, -2.50324329980067e-05,0.00020868463985968,0.191523471091629,-0.382812483288044, -2.65399765057572e-05,0.000766805828992023,0.206343265780114,-0.41557714681128, -2.80475200135077e-05,0.00132492701812392,0.221163060468597,-0.448341810334518, -2.95550635217579e-05,0.00188304820725582,0.235982855157082,-0.481106473857754, -3.10626070293418e-05,0.00244116939638794,0.250802649845565,-0.513871137380991, -3.25701505368148e-05,0.00299929058552095,0.26562244453405,-0.546635800904228, -3.40776940450649e-05,0.00355741177465219,0.280442239222533,-0.579400464427465, -3.55852375527599e-05,0.00411553296378475,0.295262033911018,-0.612165127950702, -3.70927810602328e-05,0.00467365415291665,0.310081828599501,-0.644929791473939, -3.86003245683719e-05,0.00523177534204899,0.324901623287986,-0.677694454997176, -4.01078680751787e-05,0.00578989653118223,0.33972141797647,-0.710459118520413, -4.16154115836509e-05,0.00634801772031368,0.354541212664954,-0.74322378204365, -4.31229550911238e-05,0.00690613890944647,0.369361007353438,-0.775988445566887, -6.25744233416145e-06,-0.00647175054085835,0.0138019486649254,0.0103991149008061, -7.47014513666905e-06,-0.00595044294930479,0.0282617694880461,-0.0225985404086382, -8.68284793918705e-06,-0.00542913535775125,0.0427215903111668,-0.0555961957180824, -9.89555074168424e-06,-0.00490782776619769,0.0571814111342875,-0.0885938510275267, -1.11082535440843e-05,-0.00438652017464386,0.0716412319574083,-0.121591506336971, -1.23209563467896e-05,-0.00386521258309058,0.0861010527805289,-0.154589161646415, -1.35336591492452e-05,-0.00334390499153692,0.10056087360365,-0.187586816955859, -1.47463619518118e-05,-0.00282259739998358,0.11502069442677,-0.220584472265304, -1.59590647544339e-05,-0.00230128980843014,0.129480515249891,-0.253582127574748, -1.71717675567229e-05,-0.00177998221687636,0.143940336073011,-0.286579782884192, -1.8384470359234e-05,-0.0012586746253227,0.158400156896132,-0.319577438193636, -1.95971731619116e-05,-0.000737367033769365,0.172859977719253,-0.352575093503081, -2.08098759644781e-05,-0.00021605944221581,0.187319798542374,-0.385572748812525, -2.20225787666006e-05,0.000305248149338189,0.201779619365494,-0.418570404121969, -2.32352815692227e-05,0.000826555740891521,0.216239440188615,-0.451568059431413, -2.44479843719558e-05,0.00134786333244508,0.230699261011736,-0.484565714740858, -2.56606871742449e-05,0.00186917092399863,0.245159081834856,-0.517563370050302, -2.68733899767559e-05,0.00239047851555263,0.259618902657977,-0.550561025359746, -2.8086092779267e-05,0.00291178610710552,0.274078723481097,-0.58355868066919, -2.92987955821111e-05,0.00343309369865907,0.288538544304218,-0.616556335978635, -3.05114983847332e-05,0.00395440129021241,0.302998365127339,-0.649553991288079, -3.17242011863561e-05,0.00447570888176729,0.31745818595046,-0.682551646597523, -3.29369039892002e-05,0.00499701647331996,0.33191800677358,-0.715549301906967, -3.41496067919334e-05,0.00551832406487396,0.346377827596702,-0.748546957216412, -3.53623095941114e-05,0.00603963165642796,0.360837648419822,-0.781544612525856, -5.49750577741662e-06,-0.00645322180163136,0.0139260535767921,0.0104370764441712, -6.42707927860781e-06,-0.00597333040810041,0.0279990091067501,-0.0228087759169046, -7.35665277980246e-06,-0.00549343901456942,0.0420719646367081,-0.0560546282779804, -8.28622628097631e-06,-0.00501354762103851,0.0561449201666661,-0.0893004806390561, -9.21579978216402e-06,-0.00453365622750751,0.0702178756966241,-0.122546333000132, -1.01453732834489e-05,-0.00405376483397657,0.0842908312265822,-0.155792185361208, -1.10749467846227e-05,-0.00357387344044569,0.0983637867565402,-0.189038037722283, -1.20045202858798e-05,-0.00309398204691469,0.112436742286498,-0.222283890083359, -1.29340937870537e-05,-0.0026140906533838,0.126509697816456,-0.255529742444435, -1.3863667288283e-05,-0.0021341992598527,0.140582653346414,-0.288775594805511, -1.47932407890683e-05,-0.00165430786632137,0.154655608876372,-0.322021447166586, -1.57228142906307e-05,-0.00117441647279093,0.16872856440633,-0.355267299527662, -1.66523877918601e-05,-0.000694525079260044,0.182801519936288,-0.388513151888738, -1.75819612930894e-05,-0.000214633685728938,0.196874475466246,-0.421759004249814, -1.85115347942633e-05,0.000265257707802169,0.210947430996204,-0.455004856610889, -1.94411082952151e-05,0.000745149101333054,0.225020386526162,-0.488250708971965, -2.0370681796722e-05,0.00122504049486372,0.23909334205612,-0.521496561333041, -2.13002552978958e-05,0.00170493188839482,0.253166297586078,-0.554742413694117, -2.22298287995137e-05,0.00218482328192504,0.267239253116036,-0.587988266055192, -2.31594023003545e-05,0.00266471467545659,0.281312208645994,-0.621234118416268, -2.40889758015284e-05,0.0031446060689877,0.295385164175952,-0.654479970777344, -2.50185493027022e-05,0.00362449746251858,0.30945811970591,-0.68772582313842, -2.59481228042091e-05,0.00410438885604991,0.323531075235869,-0.720971675499495, -2.68776963047168e-05,0.0045842802495808,0.337604030765826,-0.754217527860571, -2.78072698055576e-05,0.00506417164311257,0.351676986295785,-0.787463380221647, -4.69784619103707e-06,-0.0064341244487738,0.0140517132106779,0.0104753474836021, -5.37602596115128e-06,-0.00599828914833316,0.0277310997761066,-0.0230207254509178, -6.05420573124293e-06,-0.00556245384789256,0.0414104863415353,-0.0565167983854377, -6.73238550133459e-06,-0.00512661854745189,0.055089872906964,-0.0900128713199576, -7.41056527139849e-06,-0.00469078324701117,0.0687692594723927,-0.123508944254477, -8.08874504160118e-06,-0.00425494794657066,0.0824486460378213,-0.157005017188997, -8.76692481163732e-06,-0.00381911264613,0.09612803260325,-0.190501090123517, -9.44510458161796e-06,-0.00338327734568933,0.109807419168679,-0.223997163058037, -1.01232843517374e-05,-0.00294744204524844,0.123486805734108,-0.257493235992557, -1.08014641220233e-05,-0.0025116067448081,0.137166192299536,-0.290989308927077, -1.14796438921427e-05,-0.00207577144436755,0.150845578864965,-0.324485381861597, -1.21578236620956e-05,-0.00163993614392677,0.164524965430393,-0.357981454796117, -1.28360034322705e-05,-0.00120410084348621,0.178204351995822,-0.391477527730637, -1.35141832023344e-05,-0.000768265543045654,0.191883738561251,-0.424973600665156, -1.41923629719543e-05,-0.000332430242603987,0.20556312512668,-0.458469673599677, -1.48705427427398e-05,0.000103405057835682,0.219242511692108,-0.491965746534196, -1.55487225127482e-05,0.000539240358276238,0.232921898257537,-0.525461819468717, -1.62269022826456e-05,0.000975075658717017,0.246601284822966,-0.558957892403236, -1.6905082053098e-05,0.00141091095915735,0.260280671388394,-0.592453965337756, -1.75832618231064e-05,0.00184674625959835,0.273960057953823,-0.625950038272276, -1.82614415930038e-05,0.00228258156003891,0.287639444519251,-0.659446111206796, -1.89396213633453e-05,0.00271841686047924,0.30131883108468,-0.692942184141316, -1.96178011332426e-05,0.00315425216092047,0.314998217650109,-0.726438257075836, -2.0295980903362e-05,0.0035900874613608,0.328677604215537,-0.759934330010356, -2.09741606734815e-05,0.00402592276180158,0.342356990780966,-0.793430402944876, -3.90250082043207e-06,-0.00641552001996264,0.0141720613176397,0.01051184617282, -4.37448407007712e-06,-0.0060238585272803,0.0274727850268507,-0.0232228595002366, -4.8464673197135e-06,-0.00563219703459794,0.0407735087360618,-0.0569575651732933, -5.318450569336e-06,-0.00524053554191556,0.0540742324452729,-0.0906922708463499, -5.79043381904176e-06,-0.00484887404923323,0.067374956154484,-0.124426976519407, -6.26241706871977e-06,-0.00445721255655085,0.0806756798636952,-0.158161682192463, -6.73440031839778e-06,-0.00406555106386863,0.0939764035729062,-0.19189638786552, -7.20638356799252e-06,-0.00367388957118608,0.107277127282117,-0.225631093538576, -7.67836681758727e-06,-0.00328222807850376,0.120577850991328,-0.259365799211633, -8.1503500671265e-06,-0.00289056658582132,0.13387857470054,-0.29310050488469, -8.62233331710982e-06,-0.00249890509313921,0.147179298409751,-0.326835210557746, -9.09431656642701e-06,-0.00210724360045633,0.160480022118962,-0.360569916230803, -9.56629981629931e-06,-0.00171558210777478,0.173780745828172,-0.39430462190386, -1.00382830660051e-05,-0.00132392061509212,0.187081469537384,-0.428039327576916, -1.05102663158219e-05,-0.00093225912241035,0.200382193246595,-0.461774033249973, -1.09822495653056e-05,-0.00054059762972769,0.213682916955806,-0.495508738923029, -1.14542328149003e-05,-0.000148936137044808,0.226983640665017,-0.529243444596086, -1.19262160646061e-05,0.000242725355637186,0.240284364374228,-0.562978150269143, -1.23981993140898e-05,0.000634386848319846,0.253585088083439,-0.596712855942199, -1.28701825636846e-05,0.00102604834100251,0.266885811792651,-0.630447561615256, -1.33421658133903e-05,0.00141770983368428,0.280186535501861,-0.664182267288313, -1.38141490630961e-05,0.00180937132636672,0.293487259211072,-0.697916972961369, -1.42861323125798e-05,0.00220103281904915,0.306787982920284,-0.731651678634426, -1.47581155621745e-05,0.00259269431173204,0.320088706629495,-0.765386384307482, -1.52300988118803e-05,0.00298435580441403,0.333389430338706,-0.799121089980539, -3.15450593771707e-06,-0.00639836367314161,0.0142813348790851,0.0105448567245102, -3.46966136174215e-06,-0.00604847237755808,0.0272367924321802,-0.0234056758321753, -3.78481678578457e-06,-0.00569858108197457,0.0401922499852753,-0.0573562083888607, -4.09997220975067e-06,-0.00534868978639097,0.0531477075383705,-0.0913067409455462, -4.41512763380003e-06,-0.00499879849080748,0.0661031650914656,-0.125257273502232, -4.73028305778e-06,-0.00464890719522393,0.0790586226445607,-0.159207806058917, -5.04543848189876e-06,-0.00429901589964066,0.0920140801976557,-0.193158338615603, -5.36059390598975e-06,-0.00394912460405705,0.104969537750751,-0.227108871172288, -5.6757493298587e-06,-0.00359923330847345,0.117924995303846,-0.261059403728973, -5.99090475406072e-06,-0.00324934201289007,0.130880452856941,-0.295009936285659, -6.30606017787416e-06,-0.00289945071730635,0.143835910410036,-0.328960468842344, -6.62121560207618e-06,-0.00254955942172308,0.156791367963131,-0.36291100139903, -6.93637102644473e-06,-0.00219966812614003,0.169746825516226,-0.396861533955715, -7.25152645009164e-06,-0.00184977683055632,0.182702283069321,-0.430812066512401, -7.56668187429366e-06,-0.0014998855349726,0.195657740622417,-0.464762599069086, -7.8818372976075e-06,-0.00114999423938844,0.208613198175512,-0.498713131625771, -8.19699272203156e-06,-0.000800102943805614,0.221568655728607,-0.532663664182457, -8.51214814623358e-06,-0.000450211648221899,0.234524113281702,-0.566614196739142, -8.82730357021355e-06,-0.000100320352638184,0.247479570834797,-0.600564729295828, -9.14245899419353e-06,0.00024957094294531,0.260435028387892,-0.634515261852513, -9.45761441828452e-06,0.000599462238529025,0.273390485940988,-0.668465794409199, -9.77276984193143e-06,0.000949353534112074,0.286345943494082,-0.702416326965884, -1.00879252662445e-05,0.00129924482969601,0.299301401047178,-0.736366859522569, -1.04030806905575e-05,0.00164913612527906,0.312256858600273,-0.770317392079255, -1.07182361138713e-05,0.00199902742086389,0.325212316153368,-0.80426792463594, -2.48707302702086e-06,-0.00638332336523917,0.0143758510640176,0.010573310890299, -2.6907122829406e-06,-0.00607082502746692,0.0270315710667872,-0.0235632583611409, -2.89435153885687e-06,-0.00575832668969467,0.0396872910695568,-0.0576998276125807, -3.09799079484252e-06,-0.00544582835192253,0.0523430110723264,-0.0918363968640206, -3.30163005066164e-06,-0.00513333001415006,0.0649987310750962,-0.12597296611546, -3.50526930659179e-06,-0.00482083167637792,0.0776544510778657,-0.1601095353669, -3.70890856268846e-06,-0.00450833333860579,0.0903101710806353,-0.19424610461834, -3.91254781845207e-06,-0.00419583500083331,0.102965891083405,-0.22838267386978, -4.11618707457651e-06,-0.00388333666306151,0.115621611086174,-0.26251924312122, -4.31982633031236e-06,-0.00357083832528893,0.128277331088944,-0.29665581237266, -4.52346558621475e-06,-0.00325833998751657,0.140933051091714,-0.330792381624099, -4.72710484206162e-06,-0.00294584164974432,0.153588771094483,-0.364928950875539, -4.93074409807503e-06,-0.00263334331197229,0.166244491097253,-0.399065520126979, -5.13438335397742e-06,-0.00232084497420004,0.178900211100022,-0.433202089378419, -5.33802260993532e-06,-0.00200834663642757,0.191555931102792,-0.467338658629859, -5.54166186605975e-06,-0.00169584829865554,0.204211651105562,-0.501475227881299, -5.74530112196214e-06,-0.0013833499608833,0.216867371108332,-0.535611797132738, -5.94894037775351e-06,-0.00107085162311127,0.229523091111101,-0.569748366384178, -6.15257963398896e-06,-0.00075835328533902,0.242178811113871,-0.603884935635618, -6.3562188901134e-06,-0.000445854947567215,0.25483453111664,-0.638021504887058, -6.55985814479454e-06,-0.000133356609793189,0.26749025111941,-0.672158074138498, -6.76349740114102e-06,0.000179141727978838,0.28014597112218,-0.706294643389937, -6.96713665748749e-06,0.000491640065749976,0.292801691124949,-0.740431212641378, -7.17077591305681e-06,0.000804138403522892,0.305457411127719,-0.774567781892817, -7.37441516918125e-06,0.00111663674129536,0.318113131130489,-0.808704351144257, -1.91880374737774e-06,-0.00637071049791407,0.0144542306593313,0.010596838608799, -2.04745307910009e-06,-0.00609010333634319,0.0268606205517252,-0.0236935576434862, -2.17610241076693e-06,-0.00580949617477219,0.039267010444119,-0.0579839538957713, -2.30475174253786e-06,-0.00552888901320142,0.0516734003365128,-0.0922743501480565, -2.43340107419776e-06,-0.00524828185163051,0.0640797902289066,-0.126564746400342, -2.56205040591317e-06,-0.00496767469005954,0.0764861801213005,-0.160855142652627, -2.69069973776737e-06,-0.00468706752848891,0.0888925700136942,-0.195145538904912, -2.81934906937176e-06,-0.00440646036691783,0.101298959906088,-0.229435935157197, -2.94799840105942e-06,-0.00412585320534686,0.113705349798482,-0.263726331409482, -3.07664773291361e-06,-0.00384524604377612,0.126111739690876,-0.298016727661768, -3.20529706449024e-06,-0.00356463888220526,0.138518129583269,-0.332307123914053, -3.33394639612239e-06,-0.00328403172063418,0.150924519475663,-0.366597520166338, -3.46259572781005e-06,-0.00300342455906311,0.163330909368057,-0.400887916418623, -3.59124505938668e-06,-0.00272281739749203,0.175737299260451,-0.435178312670908, -3.71989439118536e-06,-0.00244221023592117,0.188143689152845,-0.469468708923193, -3.84854372315058e-06,-0.00216160307435098,0.200550079045239,-0.503759105175478, -3.9771930546717e-06,-0.00188099591277968,0.212956468937633,-0.538049501427764, -4.10584238630385e-06,-0.0016003887512086,0.225362858830026,-0.572339897680049, -4.23449171838008e-06,-0.00131978158963819,0.23776924872242,-0.606630293932334, -4.36314105001223e-06,-0.00103917442806711,0.250175638614814,-0.640920690184619, -4.49179038197745e-06,-0.000758567266496257,0.262582028507208,-0.675211086436904, -4.62043971394266e-06,-0.000477960104926289,0.274988418399601,-0.70950148268919, -4.74908904568583e-06,-0.000197352943354989,0.287394808291995,-0.743791878941474, -4.8777383764298e-06,8.32542182171991e-05,0.29980119818439,-0.778082275193759, -5.00638770906114e-06,0.000363861379786723,0.312207588076783,-0.812372671446045, -1.45389860190144e-06,-0.00636052006542933,0.0145169897682612,0.0106156329919655, -1.5342204134558e-06,-0.00610602135183713,0.0267232423360384,-0.0237976431560157, -1.61454222499802e-06,-0.00585152263824487,0.0389294949038155,-0.0582109193039968, -1.69486403653329e-06,-0.00559702392465261,0.0511357474715926,-0.092624195451978, -1.77518584815184e-06,-0.00534252521106054,0.0633420000393697,-0.127037471599959, -1.85550765968712e-06,-0.0050880264974682,0.0755482526071469,-0.16145074774794, -1.93582947105586e-06,-0.00483352778387569,0.0877545051749241,-0.195864023895922, -2.01615128270216e-06,-0.00457902907028362,0.0999607577427012,-0.230277300043903, -2.09647309451499e-06,-0.00432453035669189,0.112167010310478,-0.264690576191884, -2.17679490566169e-06,-0.00407003164309883,0.124373262878256,-0.299103852339865, -2.25711671741902e-06,-0.00381553292950687,0.136579515446033,-0.333517128487846, -2.33743852889878e-06,-0.00356103421591469,0.14878576801381,-0.367930404635827, -2.41776034054508e-06,-0.00330653550232296,0.160992020581586,-0.402343680783809, -2.49808215185832e-06,-0.00305203678873034,0.173198273149364,-0.43675695693179, -2.57840396378217e-06,-0.00279753807513861,0.185404525717141,-0.471170233079771, -2.65872577520643e-06,-0.00254303936154598,0.197610778284918,-0.505583509227752, -2.73904758663068e-06,-0.00228854064795381,0.209817030852695,-0.539996785375733, -2.81936939827698e-06,-0.00203404193436163,0.222023283420472,-0.574410061523714, -2.89969120970124e-06,-0.00177954322076901,0.23422953598825,-0.608823337671696, -2.98001302112549e-06,-0.00152504450717683,0.246435788556027,-0.643236613819677, -3.06033483299384e-06,-0.00127054579358532,0.258642041123804,-0.677649889967658, -3.14065664452912e-06,-0.00101604707999314,0.27084829369158,-0.712063166115639, -3.22097845628644e-06,-0.000761548366400522,0.283054546259358,-0.74647644226362, -3.30130026793274e-06,-0.000507049652809233,0.295260798827135,-0.780889718411602, -3.38162207935699e-06,-0.000252550939216167,0.307467051394912,-0.815302994559583, -1.08578119911891e-06,-0.00635253118688859,0.0145658460555481,0.0106302367361743, -1.13584146603507e-06,-0.00611870810443864,0.0266159930967423,-0.0238785204153202, -1.18590173298072e-06,-0.00588488502198872,0.0386661401379365,-0.0583872775668148, -1.235961999968e-06,-0.00565106193953885,0.0507162871791307,-0.0928960347183094, -1.28602226689978e-06,-0.00541723885708889,0.0627664342203249,-0.127404791869804, -1.33608253385931e-06,-0.00518341577463888,0.0748165812615192,-0.161913549021298, -1.38614280068006e-06,-0.00494959269218886,0.0868667283027134,-0.196422306172793, -1.43620306752856e-06,-0.00471576960973885,0.0989168753439076,-0.230931063324288, -1.48626333462687e-06,-0.00448194652728928,0.110967022385102,-0.265439820475782, -1.53632360161415e-06,-0.00424812344483938,0.123017169426296,-0.299948577627277, -1.58638386832388e-06,-0.00401430036238914,0.13506731646749,-0.334457334778771, -1.63644413542219e-06,-0.00378047727993924,0.147117463508684,-0.368966091930266, -1.68650440246498e-06,-0.00354665419748956,0.159167610549878,-0.40347484908176, -1.73656466923022e-06,-0.00331283111503944,0.171217757591073,-0.437983606233255, -1.78662493610648e-06,-0.00307900803258931,0.183267904632267,-0.472492363384749, -1.83668520314928e-06,-0.00284518495013963,0.195318051673461,-0.507001120536244, -1.88674546974799e-06,-0.00261136186768929,0.207368198714655,-0.541509877687739, -1.93680573701283e-06,-0.00237753878523961,0.21941834575585,-0.576018634839233, -1.98686600383358e-06,-0.00214371570278971,0.231468492797044,-0.610527391990728, -2.03692627120944e-06,-0.00190989262034003,0.243518639838238,-0.645036149142222, -2.08698653780814e-06,-0.0016760695378899,0.255568786879432,-0.679544906293717, -2.13704680429583e-06,-0.00144224645543956,0.267618933920626,-0.714053663445211, -2.18710707189373e-06,-0.00120842337299054,0.27966908096182,-0.748562420596706, -2.23716733871449e-06,-0.000974600290540639,0.291719228003014,-0.783071177748201, -2.28722760542421e-06,-0.000740777208089849,0.303769375044209,-0.817579934899695, -8.01749084474931e-07,-0.00634641460551702,0.0146030522148104,0.0106413422327158, -8.33154617373155e-07,-0.0061285421207572,0.026534140588,-0.0239400239660976, -8.64560150290461e-07,-0.0059106696359974,0.0384652289611896,-0.058521390164911, -8.95965683117561e-07,-0.00569279715123744,0.0503963173343792,-0.0931027563637243, -9.27371216069561e-07,-0.00547492466647775,0.0623274057075687,-0.127684122562538, -9.58776749049317e-07,-0.00525705218171801,0.0742584940807582,-0.162265488761351, -9.90182281696006e-07,-0.00503917969695777,0.086189582453948,-0.196846854960164, -1.02158781478678e-06,-0.00482130721219831,0.0981206708271374,-0.231428221158978, -1.05299334757225e-06,-0.00460343472743818,0.110051759200327,-0.266009587357791, -1.08439888063527e-06,-0.00438556224267872,0.121982847573517,-0.300590953556605, -1.11580441347625e-06,-0.00416768975791881,0.133913935946706,-0.335172319755418, -1.14720994603967e-06,-0.00394981727315846,0.145845024319896,-0.369753685954231, -1.1786154791027e-06,-0.00373194478839878,0.157776112693085,-0.404335052153045, -1.21002101216572e-06,-0.00351407230363954,0.169707201066275,-0.438916418351858, -1.24142654478465e-06,-0.00329619981887919,0.181638289439465,-0.473497784550671, -1.2728320779587e-06,-0.00307832733411972,0.193569377812654,-0.508079150749485, -1.3042376109107e-06,-0.00286045484935982,0.205500466185844,-0.542660516948298, -1.33564314341861e-06,-0.00264258236459969,0.217431554559033,-0.577241883147111, -1.36704867637061e-06,-0.00242470987983978,0.229362642932223,-0.611823249345925, -1.39845420954465e-06,-0.00220683739508032,0.241293731305412,-0.646404615544738, -1.42985974205256e-06,-0.00198896491031997,0.253224819678602,-0.680985981743551, -1.46126527522661e-06,-0.00177109242556028,0.265155908051792,-0.715567347942365, -1.49267080773452e-06,-0.00155321994080015,0.277086996424981,-0.750148714141178, -1.52407634146368e-06,-0.00133534745604136,0.289018084798171,-0.784730080339991, -1.5554818745267e-06,-0.00111747497128167,0.30094917317136,-0.819311446538805, -5.86931568026181e-07,-0.00634181563994453,0.0146309146236483,0.0106496497979511, -6.06883570793137e-07,-0.00613600384126378,0.0264727438866888,-0.0239860322430245, -6.2683557355836e-07,-0.00593019204258308,0.0383145731497292,-0.0586217142840001, -6.46787576316643e-07,-0.00572438024390237,0.0501564024127696,-0.0932573963249758, -6.66739579130438e-07,-0.00551856844522158,0.0619982316758101,-0.127893078365951, -6.86691581791576e-07,-0.00531275664654074,0.0738400609388505,-0.162528760406927, -7.06643584563738e-07,-0.00510694484786001,0.085681890201891,-0.197164442447903, -7.26595587474677e-07,-0.00490113304917938,0.0975237194649314,-0.231800124488878, -7.46547590246838e-07,-0.00469532125049865,0.109365548727972,-0.266435806529854, -7.66499592796954e-07,-0.0044895094518177,0.121207377991012,-0.301071488570829, -7.86451595680138e-07,-0.00428369765313708,0.133049207254053,-0.335707170611805, -8.06403598618832e-07,-0.00407788585445656,0.144891036517093,-0.370342852652781, -8.26355601335482e-07,-0.00387207405577561,0.156732865780134,-0.404978534693756, -8.46307603830088e-07,-0.00366626225709465,0.168574695043174,-0.439614216734732, -8.66259606935316e-07,-0.00346045045841414,0.180416524306215,-0.474249898775708, -8.86211609540943e-07,-0.00325463865973341,0.192258353569255,-0.508885580816683, -9.06163611924526e-07,-0.00304882686105201,0.204100182832296,-0.543521262857659, -9.2611561530731e-07,-0.00284301506237239,0.215942012095335,-0.578156944898634, -9.46067617912938e-07,-0.00263720326369166,0.227783841358376,-0.61279262693961, -9.66019620407543e-07,-0.00243139146501004,0.239625670621417,-0.647428308980586, -9.85971624234416e-07,-0.00222557966633108,0.251467499884457,-0.682063991021561, -1.00592362628493e-06,-0.00201976786764924,0.263309329147497,-0.716699673062537, -1.02587562866852e-06,-0.00181395606896784,0.275151158410538,-0.751335355103513, -1.04582763171823e-06,-0.00160814427028777,0.286992987673578,-0.785971037144488, -1.06577963476795e-06,-0.00140233247160682,0.298834816936619,-0.820606719185464, -4.26900618001602e-07,-0.00633840459239337,0.0146515186331716,0.0106557882501934, -4.39781620190094e-07,-0.00614157522153411,0.0264272865338625,-0.0240200277161461, -4.52662622371647e-07,-0.00594474585067487,0.0382030544345534,-0.0586958436824856, -4.65543624594833e-07,-0.00574791647981565,0.0499788223352442,-0.093371659648825, -4.78424626804141e-07,-0.00555108710895635,0.0617545902359352,-0.128047475615164, -4.9130562901345e-07,-0.00535425773809706,0.0735303581366261,-0.162723291581504, -5.04186631056225e-07,-0.00515742836723765,0.085306126037317,-0.197399107547843, -5.17067633265533e-07,-0.00496059899637835,0.0970818939380079,-0.232074923514183, -5.29948635419331e-07,-0.00476376962551905,0.108857661838699,-0.266750739480522, -5.4282963768415e-07,-0.00456694025466009,0.12063342973939,-0.301426555446862, -5.55710639671414e-07,-0.00437011088380057,0.13240919764008,-0.336102371413201, -5.68591641880722e-07,-0.00417328151294116,0.144184965540771,-0.370778187379541, -5.81472643867986e-07,-0.00397645214208131,0.155960733441463,-0.40545400334588, -5.94353646410362e-07,-0.00377962277122301,0.167736501342153,-0.44012981931222, -6.07234648897226e-07,-0.00358279340036405,0.179512269242844,-0.474805635278559, -6.20115650717956e-07,-0.0033859640295042,0.191288037143535,-0.509481451244898, -6.32996653093798e-07,-0.00318913465864501,0.203063805044226,-0.544157267211238, -6.45877655136573e-07,-0.00299230528778582,0.214839572944917,-0.578833083177577, -6.58758658067526e-07,-0.0027954759169273,0.226615340845607,-0.613508899143917, -6.7163965955519e-07,-0.00259864654606745,0.238391108746298,-0.648184715110256, -6.84520662264099e-07,-0.00240181717520871,0.250166876646989,-0.682860531076596, -6.97401664084829e-07,-0.00220498780434886,0.26194264454768,-0.717536347042935, -7.10282666016582e-07,-0.00200815843348945,0.273718412448371,-0.752212163009275, -7.23163668614468e-07,-0.00181132906263048,0.285494180349062,-0.786887978975615, -7.36044670879288e-07,-0.00161449969177152,0.297269948249753,-0.821563794941954, -3.09019888160983e-07,-0.00633590010679615,0.0146666136241614,0.0106602827778752, -3.17480487545263e-07,-0.0061456857691984,0.0263939537572725,-0.0240449189409974, -3.25941086926074e-07,-0.00595547143160066,0.0381212938903837,-0.0587501206598701, -3.34401686341579e-07,-0.005765257094003,0.0498486340234948,-0.0934553223787428, -3.42862285673817e-07,-0.00557504275640514,0.061575974156606,-0.128160524097615, -3.51322885255856e-07,-0.00538482841880761,0.0733033142897171,-0.162865725816488, -3.59783484560339e-07,-0.0051946140812098,0.0850306544228283,-0.197570927535361, -3.68244083837066e-07,-0.00500439974361189,0.0967579945559395,-0.232276129254233, -3.76704683280327e-07,-0.00481418540601419,0.108485334689051,-0.266981330973106, -3.85165282723587e-07,-0.00462397106841672,0.120212674822162,-0.301686532691979, -3.93625882055826e-07,-0.00443375673081881,0.131940014955273,-0.336391734410851, -4.02086481221531e-07,-0.00424354239322056,0.143667355088384,-0.371096936129724, -4.10547080831325e-07,-0.00405332805562342,0.155394695221495,-0.405802137848597, -4.19007680385608e-07,-0.00386311371802539,0.167122035354607,-0.440507339567469, -4.27468279773358e-07,-0.00367289938042781,0.178849375487718,-0.475212541286342, -4.35928879327641e-07,-0.00348268504283045,0.190576715620828,-0.509917743005214, -4.44389478770901e-07,-0.00329247070523264,0.20230405575394,-0.544622944724087, -4.52850077770073e-07,-0.00310225636763461,0.214031395887051,-0.57932814644296, -4.613106775464e-07,-0.00291204203003748,0.225758736020162,-0.614033348161833, -4.69771276545572e-07,-0.00272182769243856,0.237486076153274,-0.648738549880705, -4.78231875988833e-07,-0.00253161335484098,0.249213416286385,-0.683443751599578, -4.86692475432093e-07,-0.00234139901724317,0.260940756419496,-0.718148953318451, -4.95153074764332e-07,-0.00215118467964581,0.272668096552607,-0.752854155037323, -5.03613673874526e-07,-0.00196097034204756,0.284395436685718,-0.787559356756195, -5.12074273428809e-07,-0.0017707560044502,0.296122776818829,-0.822264558475068, -1.41195823768342e-05,-0.0066893430151478,0.025440415439077,-0.00442004566760469, -1.7169243624951e-05,-0.00600675280697524,0.0414703510037193,-0.0354395098086673, -2.02189048730678e-05,-0.0053241625988027,0.0575002865683616,-0.0664589739497299, -2.32685661212539e-05,-0.00464157239063018,0.0735302221330039,-0.0974784380907926, -2.6318227369343e-05,-0.00395898218245755,0.0895601576976463,-0.128497902231855, -2.93678886174598e-05,-0.00327639197428509,0.105590093262288,-0.159517366372918, -3.24175498653823e-05,-0.00259380176611212,0.121620028826931,-0.19053683051398, -3.54672111138044e-05,-0.00191121155794005,0.137649964391573,-0.221556294655043, -3.85168723618934e-05,-0.00122862134976742,0.153679899956215,-0.252575758796106, -4.15665336098714e-05,-0.000546031141594794,0.169709835520858,-0.283595222937168, -4.46161948580714e-05,0.000136559066577835,0.1857397710855,-0.314614687078231, -4.7665856106105e-05,0.000819149274750464,0.201769706650142,-0.345634151219294, -5.07155173544716e-05,0.00150173948292287,0.217799642214785,-0.376653615360356, -5.37651786025606e-05,0.00218432969109505,0.233829577779427,-0.407673079501419, -5.68148398503165e-05,0.00286691989926813,0.249859513344069,-0.438692543642481, -5.98645010989607e-05,0.00354951010744053,0.265889448908712,-0.469712007783544, -6.29141623466056e-05,0.00423210031561339,0.281919384473354,-0.500731471924607, -6.59638235951387e-05,0.00491469052378535,0.297949320037996,-0.531750936065669, -6.90134848431168e-05,0.00559728073195842,0.313979255602639,-0.562770400206732, -7.20631460909837e-05,0.00627987094013061,0.33000919116728,-0.593789864347795, -7.51128073391838e-05,0.00696246114830368,0.346039126731923,-0.624809328488857, -7.81624685877169e-05,0.00764505135647564,0.362069062296565,-0.65582879262992, -8.12121298358059e-05,0.00832764156464849,0.378098997861208,-0.686848256770982, -8.42617910836729e-05,0.0090102317728209,0.39412893342585,-0.717867720912045, -8.7311452331762e-05,0.00969282198099375,0.410158868990493,-0.748887185053108, -1.40610073333589e-05,-0.00668638968518565,0.0254398211250674,-0.00442471458540301, -1.70844765248895e-05,-0.00600551598731253,0.0414476775710687,-0.035459099814681, -2.01079457164133e-05,-0.00532464228943946,0.05745553401707,-0.066493485043959, -2.31314149080064e-05,-0.00464376859156634,0.0734633904630713,-0.097527870273237, -2.61548840995163e-05,-0.00396289489369323,0.0894712469090727,-0.128562255502515, -2.91783532910816e-05,-0.00328202119582033,0.105479103355074,-0.159596640731793, -3.22018224826748e-05,-0.00260114749794726,0.121486959801075,-0.190631025961071, -3.52252916742124e-05,-0.00192027380007431,0.137494816247076,-0.221665411190349, -3.82487608656112e-05,-0.0012394001022008,0.153502672693078,-0.252699796419627, -4.12722300570656e-05,-0.00055852640432752,0.169510529139079,-0.283734181648905, -4.4295699248742e-05,0.000122347293545211,0.18551838558508,-0.314768566878183, -4.73191684401408e-05,0.000803220991418607,0.201526242031082,-0.345802952107461, -5.03426376317062e-05,0.00148409468929134,0.217534098477083,-0.376837337336739, -5.33661068234936e-05,0.00216496838716429,0.233541954923084,-0.407871722566017, -5.6389576014948e-05,0.00284584208503746,0.249549811369085,-0.438906107795295, -5.94130452066244e-05,0.00352671578291042,0.265557667815087,-0.469940493024573, -6.24365143978567e-05,0.00420758948078381,0.281565524261088,-0.500974878253851, -6.54599835895331e-05,0.00488846317865677,0.297573380707089,-0.532009263483129, -6.84834527810985e-05,0.00556933687653038,0.313581237153091,-0.563043648712407, -7.15069219722198e-05,0.00625021057440334,0.329589093599092,-0.594078033941685, -7.45303911640072e-05,0.00693108427227607,0.345596950045093,-0.625112419170963, -7.75538603551285e-05,0.00761195797014969,0.361604806491094,-0.656146804400241, -8.0577329547582e-05,0.00829283166802153,0.377612662937095,-0.687181189629519, -8.36007987393694e-05,0.0089737053658947,0.393620519383097,-0.718215574858797, -8.66242679299356e-05,0.00965457906376921,0.409628375829099,-0.749249960088075, -1.39798650033995e-05,-0.00668230991677934,0.0254389927688464,-0.00443116968810527, -1.69672664514647e-05,-0.00600382301715574,0.0414163019668647,-0.0354861843567995, -1.99546678995577e-05,-0.00532533611753216,0.0573936111648831,-0.0665411990254936, -2.29420693475813e-05,-0.00464684921790859,0.0733709203629014,-0.0975962136941878, -2.5929470795466e-05,-0.00396836231828462,0.08934822956092,-0.128651228362882, -2.89168722435451e-05,-0.0032898754186611,0.105325538758938,-0.159706243031576, -3.19042736915964e-05,-0.00261138851903753,0.121302847956957,-0.19076125770027, -3.48916751397033e-05,-0.00193290161941406,0.137280157154975,-0.221816272368965, -3.7879076587588e-05,-0.00125441471979015,0.153257466352994,-0.252871287037659, -4.08664780357504e-05,-0.000575927820166688,0.169234775551012,-0.283926301706353, -4.38538794837462e-05,0.000102559079456999,0.18521208474903,-0.314981316375047, -4.68412809319085e-05,0.000781045979080464,0.201189393947049,-0.346036331043741, -4.98286823799043e-05,0.00145953287870415,0.217166703145067,-0.377091345712435, -5.28160838279002e-05,0.00213801977832784,0.233144012343085,-0.40814636038113, -5.58034852756739e-05,0.00281650667795197,0.249121321541104,-0.439201375049824, -5.87908867240028e-05,0.00349499357757521,0.265098630739122,-0.470256389718518, -6.17782881719986e-05,0.00417348047719868,0.281075939937141,-0.501311404387212, -6.47656896201054e-05,0.00485196737682236,0.297053249135159,-0.532366419055906, -6.77530910681012e-05,0.00553045427644605,0.313030558333177,-0.563421433724601, -7.07404925162081e-05,0.00620894117606952,0.329007867531196,-0.594476448393295, -7.37278939644259e-05,0.00688742807569298,0.344985176729214,-0.625531463061989, -7.67152954114225e-05,0.00756591497531778,0.360962485927233,-0.656586477730683, -7.97026968605286e-05,0.00824440187494035,0.376939795125251,-0.687641492399377, -8.26900983079693e-05,0.00892288877456471,0.39291710432327,-0.718696507068071, -8.56774997564091e-05,0.00960137567418817,0.408894413521288,-0.749751521736766, -1.38678946849796e-05,-0.00667670177047548,0.0254378401061605,-0.00444005328214347, -1.68059349148764e-05,-0.00600152543255097,0.0413730693088682,-0.0355234584464598, -1.9743975144787e-05,-0.00532634909462648,0.057308298511576,-0.0666068636107761, -2.26820153746976e-05,-0.00465117275670196,0.0732435277142837,-0.0976902687750925, -2.56200556044694e-05,-0.00397599641877727,0.0891787569169916,-0.128773673939409, -2.85580958342968e-05,-0.00330082008085264,0.105113986119699,-0.159857079103725, -3.1496136064374e-05,-0.00262564374292829,0.121049215322407,-0.190940484268042, -3.44341762942291e-05,-0.00195046740500393,0.136984444525115,-0.222023889432358, -3.73722165241119e-05,-0.00127529106707902,0.152919673727823,-0.253107294596674, -4.03102567537728e-05,-0.000600114729154333,0.168854902930531,-0.284190699760991, -4.32482969839887e-05,7.50616087696887e-05,0.184790132133238,-0.315274104925307, -4.6186337213816e-05,0.000750237946694376,0.200725361335946,-0.346357510089623, -4.91243774436434e-05,0.00142541428461884,0.216660590538653,-0.37744091525394, -5.20624176734152e-05,0.00210059062254353,0.232595819741361,-0.408524320418256, -5.50004579031871e-05,0.00277576696046822,0.248531048944069,-0.439607725582572, -5.79384981336251e-05,0.00345094329839224,0.264466278146777,-0.470691130746889, -6.08765383636189e-05,0.00412611963631648,0.280401507349484,-0.501774535911205, -6.38145785933908e-05,0.00480129597424139,0.296336736552192,-0.532857941075521, -6.67526188231626e-05,0.00547647231216586,0.3122719657549,-0.563941346239838, -6.96906590524904e-05,0.00615164865009121,0.328207194957608,-0.595024751404154, -7.26286992830394e-05,0.00682682498801501,0.344142424160316,-0.62610815656847, -7.55667395130333e-05,0.00750200132593903,0.360077653363023,-0.657191561732787, -7.85047797425831e-05,0.00817717766386439,0.376012882565731,-0.688274966897103, -8.14428199723549e-05,0.00885235400178885,0.391948111768439,-0.719358372061419, -8.43808602027929e-05,0.00952753033971243,0.407883340971146,-0.750441777225736, -1.37142059711895e-05,-0.00666904468042966,0.0254362400625622,-0.00445220177231932, -1.65852639968794e-05,-0.00599844402853861,0.0413138481253304,-0.0355744314997202, -1.94563220225624e-05,-0.00532784337664755,0.0571914561880986,-0.066696661227121, -2.23273800482593e-05,-0.00465724272475654,0.0730690642508667,-0.0978188909545219, -2.51984380738868e-05,-0.00398664207286542,0.088946672313635,-0.128941120681923, -2.80694960997918e-05,-0.00331604142097464,0.104824280376403,-0.160063350409323, -3.09405541254748e-05,-0.00264544076908357,0.120701888439171,-0.191185580136724, -3.38116121509913e-05,-0.00197484011719229,0.136579496501939,-0.222307809864125, -3.66826701768685e-05,-0.00130423946530156,0.152457104564708,-0.253430039591526, -3.95537282024128e-05,-0.000633638813410164,0.168334712627476,-0.284552269318927, -4.24247862281235e-05,3.69618384810089e-05,0.184212320690244,-0.315674499046328, -4.52958442538898e-05,0.000707562490371627,0.200089928753012,-0.346796728773729, -4.81669022798226e-05,0.00137816314226247,0.21596753681578,-0.377918958501129, -5.10379603049227e-05,0.0020487637941542,0.231845144878549,-0.40904118822853, -5.39090183308e-05,0.00271936444604526,0.247722752941317,-0.440163417955931, -5.67800763565662e-05,0.0033899650979361,0.263600361004085,-0.471285647683332, -5.96511343823325e-05,0.00406056574982716,0.279477969066853,-0.502407877410733, -6.25221924084318e-05,0.00473116640171733,0.295355577129621,-0.533530107138134, -6.53932504333099e-05,0.00540176705360973,0.31123318519239,-0.564652336865534, -6.82643084587431e-05,0.00607236770550101,0.327110793255158,-0.595774566592935, -7.11353664847314e-05,0.00674296835739163,0.342988401317926,-0.626896796320336, -7.40064245108307e-05,0.00741356900928247,0.358866009380694,-0.658019026047737, -7.68774825360419e-05,0.00808416966117376,0.374743617443462,-0.689141255775138, -7.97485405619192e-05,0.00875477031306504,0.390621225506231,-0.720263485502539, -8.26195985879075e-05,0.00942537096495499,0.406498833568998,-0.75138571522994, -1.35047929589946e-05,-0.00665868614607887,0.0254340270066494,-0.00446867189890189, -1.628600905626e-05,-0.00599437827861751,0.0412333760583813,-0.0356435374237771, -1.90672251536017e-05,-0.0053300704111563,0.0570327251101131,-0.0668184029486523, -2.18484412508324e-05,-0.00466576254369488,0.072832074161845,-0.0979932684735275, -2.46296573481464e-05,-0.00400145467623347,0.088631423213577,-0.129168133998403, -2.74108734453771e-05,-0.00333714680877217,0.104430772265309,-0.160342999523278, -3.01920895427188e-05,-0.00267283894131087,0.120230121317041,-0.191517865048153, -3.29733056401715e-05,-0.00200853107384968,0.136029470368773,-0.222692730573028, -3.57545217374855e-05,-0.00134422320638861,0.151828819420504,-0.253867596097903, -3.85357378346329e-05,-0.000679915338926751,0.167628168472236,-0.285042461622779, -4.13169539318359e-05,-1.56074714656729e-05,0.183427517523968,-0.316217327147654, -4.40981700290943e-05,0.000648700395995849,0.1992268665757,-0.347392192672529, -4.68793861265193e-05,0.00131300826345693,0.215026215627432,-0.378567058197404, -4.96606022235557e-05,0.00197731613091889,0.230825564679164,-0.409741923722279, -5.24418183209807e-05,0.00264162399837975,0.246624913730896,-0.440916789247155, -5.52230344184057e-05,0.00330593186584105,0.262424262782628,-0.47209165477203, -5.80042505153866e-05,0.00397023973330324,0.27822361183436,-0.503266520296905, -6.07854666132557e-05,0.00463454760076343,0.294022960886091,-0.53444138582178, -6.35666827105696e-05,0.00529885546822473,0.309822309937823,-0.565616251346655, -6.63478988076616e-05,0.00596316333568603,0.325621658989555,-0.596791116871531, -6.91291149048645e-05,0.00662747120314799,0.341421008041287,-0.627965982396406, -7.19103310020675e-05,0.00729177907060885,0.357220357093019,-0.659140847921281, -7.46915470986043e-05,0.00795608693807148,0.373019706144751,-0.690315713446156, -7.74727631960292e-05,0.00862039480553278,0.388819055196483,-0.721490578971031, -8.02539792941204e-05,0.00928470267299319,0.404618404248215,-0.752665444495907, -1.32222791387193e-05,-0.00664484683601915,0.0254309825651138,-0.00449074092689025, -1.58848799419603e-05,-0.00598913227789127,0.0411252163116373,-0.0357361354110802, -1.85474807451458e-05,-0.00533341771976331,0.0568194500581608,-0.0669815298952701, -2.12100815484562e-05,-0.00467770316163546,0.0725136838046843,-0.09822692437946, -2.38726823516833e-05,-0.00402198860350761,0.0882079175512078,-0.12947231886365, -2.65352831548549e-05,-0.0033662740453797,0.103902151297731,-0.16071771334784, -2.91978839583318e-05,-0.00271055948725207,0.119596385044255,-0.19196310783203, -3.18604847614479e-05,-0.002054844929124,0.135290618790778,-0.22320850231622, -3.45230855645084e-05,-0.00139913037099604,0.150984852537302,-0.25445389680041, -3.71856863680686e-05,-0.000743415812868298,0.166679086283825,-0.2856992912846, -3.98482871712402e-05,-8.77012547404465e-05,0.182373320030349,-0.316944685768789, -4.25108879745228e-05,0.000568013303387405,0.198067553776872,-0.348190080252979, -4.51734887774724e-05,0.0012237278615157,0.213761787523396,-0.379435474737169, -4.78360895808105e-05,0.00187944241964377,0.229456021269919,-0.410680869221359, -5.04986903840932e-05,0.00253515697777118,0.245150255016443,-0.441926263705549, -5.31612911873758e-05,0.00319087153589903,0.260844488762966,-0.473171658189739, -5.58238919908804e-05,0.00384658609402688,0.27653872250949,-0.504417052673929, -5.848649279383e-05,0.00450230065215518,0.292232956256013,-0.535662447158119, -6.11490935971126e-05,0.00515801521028281,0.307927190002537,-0.566907841642309, -6.38116944001732e-05,0.00581372976841088,0.32362142374906,-0.598153236126499, -6.64742952038999e-05,0.00646944432653784,0.339315657495583,-0.629398630610689, -6.91368960070715e-05,0.00712515888466614,0.355009891242107,-0.660644025094879, -7.179949680991e-05,0.00778087344279488,0.370704124988631,-0.691889419579068, -7.44620976130816e-05,0.00843658800092273,0.386398358735154,-0.723134814063259, -7.71246984168084e-05,0.00909230255904969,0.402092592481677,-0.754380208547449, -1.28462280215083e-05,-0.00662666231581905,0.0254268280857261,-0.00451985244472586, -1.53555079866613e-05,-0.00598256610710396,0.040981960292534,-0.035858282519704, -1.78647879517796e-05,-0.00533846989838876,0.056537092499342,-0.0671967125946821, -2.03740679169673e-05,-0.00469437368967363,0.07209222470615,-0.0985351426696602, -2.28833478820578e-05,-0.00405027748095849,0.0876473569129579,-0.129873572744638, -2.53926278471761e-05,-0.00340618127224324,0.103202489119766,-0.161212002819616, -2.79019078123222e-05,-0.00276208506352815,0.118757621326574,-0.192550432894595, -3.04111877774682e-05,-0.00211798885481307,0.134312753533382,-0.223888862969573, -3.29204677426698e-05,-0.0014738926460981,0.14986788574019,-0.255227293044551, -3.54297477078158e-05,-0.00082979643738279,0.165423017946998,-0.286565723119529, -3.79390276729064e-05,-0.000185700228667818,0.180978150153805,-0.317904153194507, -4.04483076382189e-05,0.000458395980047488,0.196533282360614,-0.349242583269485, -4.29575876030874e-05,0.00110249218876279,0.212088414567422,-0.380581013344463, -4.54668675681225e-05,0.00174658839747832,0.22764354677423,-0.411919443419441, -4.79761475332685e-05,0.00239068460619341,0.243198678981038,-0.443257873494419, -5.04854274983035e-05,0.00303478081490871,0.258753811187846,-0.474596303569398, -5.29947074638937e-05,0.00367887702362291,0.274308943394653,-0.505934733644376, -5.55039874291507e-05,0.00432297323233799,0.289864075601461,-0.537273163719354, -5.80132673939637e-05,0.00496706944105396,0.30541920780827,-0.568611593794332, -6.05225473595539e-05,0.00561116564976794,0.320974340015077,-0.59995002386931, -6.30318273241448e-05,0.00625526185848413,0.336529472221885,-0.631288453944288, -6.55411072892909e-05,0.00689935806719921,0.352084604428693,-0.662626884019266, -6.805038725477e-05,0.00754345427591385,0.367639736635501,-0.693965314094244, -7.05596672194719e-05,0.00818755048462938,0.383194868842309,-0.725303744169222, -7.30689471843959e-05,0.00883164669334491,0.398750001049117,-0.756642174244201, -1.23545201799261e-05,-0.00660328428945223,0.0254212263169582,-0.00455747018312831, -1.46710909880721e-05,-0.00597467811814334,0.0407958664774927,-0.0360161203213869, -1.69876617961834e-05,-0.00534607194683445,0.0561705066380271,-0.0674747704596454, -1.9304232604378e-05,-0.00471746577552562,0.0715451467985616,-0.0989334205979039, -2.16208034123921e-05,-0.00408885960421657,0.0869197869590962,-0.130392070736163, -2.39373742207949e-05,-0.00346025343290801,0.10229442711963,-0.161850720874421, -2.62539450287536e-05,-0.00283164726159879,0.117669067280165,-0.19330937101268, -2.85705158369343e-05,-0.0022030410902899,0.1330437074407,-0.224768021150938, -3.0887086645115e-05,-0.00157443491898113,0.148418347601234,-0.256226671289197, -3.32036574531291e-05,-0.000945828747672128,0.163792987761769,-0.287685321427455, -3.55202282615874e-05,-0.000317222576363463,0.179167627922303,-0.319143971565714, -3.78367990695461e-05,0.000311383594945314,0.194542268082837,-0.350602621703972, -4.01533698776158e-05,0.000939989766254312,0.209916908243372,-0.382061271842231, -4.24699406857409e-05,0.00156859593756331,0.225291548403906,-0.413519921980489, -4.47865114940882e-05,0.00219720210887209,0.240666188564441,-0.444978572118748, -4.71030823021579e-05,0.00282580828018109,0.256040828724975,-0.476437222257007, -4.94196531105606e-05,0.0034544144514892,0.271415468885509,-0.507895872395265, -5.17362239182972e-05,0.00408302062279886,0.286790109046044,-0.539354522533524, -5.40527947264779e-05,0.00471162679410742,0.302164749206578,-0.570813172671782, -5.63693655348807e-05,0.00534023296541619,0.317539389367113,-0.602271822810041, -5.86859363428394e-05,0.00596883913672563,0.332914029527648,-0.633730472948299, -6.10025071510201e-05,0.00659744530803419,0.348288669688182,-0.665189123086558, -6.33190779590898e-05,0.00722605147934319,0.363663309848717,-0.696647773224816, -6.56356487673815e-05,0.0078546576506513,0.37903795000925,-0.728106423363075, -6.79522195753401e-05,0.00848326382196074,0.394412590169785,-0.759565073501333, -1.17263788682875e-05,-0.0065740595809894,0.0254138036221959,-0.00460480546026015, -1.38093612328249e-05,-0.00596570964058377,0.0405601316434969,-0.0362147313065718, -1.58923435974595e-05,-0.00535735970017825,0.0557064596647978,-0.0678246571528835, -1.79753259620108e-05,-0.0047490097597726,0.0708527876860989,-0.0994345829991951, -2.00583083265204e-05,-0.00414065981936701,0.0859991157073998,-0.131044508845507, -2.21412906912244e-05,-0.00353230987896158,0.101145443728701,-0.162654434691818, -2.4224273055623e-05,-0.00292395993855565,0.116291771750002,-0.19426436053813, -2.63072554202992e-05,-0.00231560999815028,0.131438099771303,-0.225874286384442, -2.83902377847811e-05,-0.00170726005774446,0.146584427792604,-0.257484212230754, -3.04732201495406e-05,-0.00109891011733931,0.161730755813905,-0.289094138077065, -3.25562025137449e-05,-0.000490560176933164,0.176877083835206,-0.320704063923377, -3.46391848783933e-05,0.000117789763472542,0.192023411856507,-0.352313989769688, -3.67221672432083e-05,0.000726139703877804,0.207169739877808,-0.383923915616, -3.88051496077457e-05,0.00133448964428373,0.222316067899109,-0.415533841462312, -4.08881319722276e-05,0.00194283958468899,0.23746239592041,-0.447143767308623, -4.29711143367095e-05,0.00255118952509426,0.252608723941711,-0.478753693154935, -4.50540967011914e-05,0.00315953946550018,0.267755051963012,-0.510363619001247, -4.71370790660064e-05,0.00376788940590567,0.282901379984313,-0.541973544847558, -4.92200614303773e-05,0.00437623934631159,0.298047708005614,-0.57358347069387, -5.13030437946371e-05,0.00498458928671774,0.313194036026915,-0.605193396540182, -5.33860261595631e-05,0.00559293922712278,0.328340364048216,-0.636803322386493, -5.54690085237119e-05,0.00620128916752893,0.343486692069517,-0.668413248232805, -5.755199088886e-05,0.00680963910793331,0.358633020090817,-0.700023174079117, -5.96349732528978e-05,0.0074179890483399,0.373779348112119,-0.731633099925428, -6.17179556178238e-05,0.00802633898874472,0.388925676133419,-0.76324302577174, -1.09474054983544e-05,-0.00653878010131805,0.0254042073544089,-0.00466241717516525, -1.27599238548132e-05,-0.00595623538196288,0.0402708604933348,-0.0364564605231058, -1.45724422112303e-05,-0.00537369066260773,0.0551375136322606,-0.0682505038710463, -1.63849605677169e-05,-0.00479114594325258,0.0700041667711865,-0.100044547218987, -1.81974789241202e-05,-0.00420860122389743,0.0848708199101124,-0.131838590566927, -2.00099972804679e-05,-0.00362605650454217,0.0997374730490382,-0.163632633914868, -2.18225156371488e-05,-0.00304351178518736,0.114604126187964,-0.195426677262808, -2.36350339934965e-05,-0.00246096706583199,0.12947077932689,-0.227220720610749, -2.54475523502884e-05,-0.00187842234647728,0.144337432465816,-0.259014763958689, -2.72600707062476e-05,-0.00129587762712147,0.159204085604742,-0.29080880730663, -2.90725890629839e-05,-0.000713332907766873,0.174070738743667,-0.32260285065457, -3.08851074194982e-05,-0.000130788188411612,0.188937391882594,-0.354396894002511, -3.2697625775735e-05,0.000451756530943648,0.203804045021519,-0.386190937350451, -3.45101441320828e-05,0.00103430125029913,0.218670698160445,-0.417984980698392, -3.63226624888746e-05,0.0016168459696535,0.233537351299371,-0.449779024046332, -3.81351808449448e-05,0.00219939068900921,0.248404004438297,-0.481573067394273, -3.99476992012371e-05,0.00278193540836491,0.263270657577223,-0.513367110742213, -4.17602175583065e-05,0.00336448012771906,0.278137310716149,-0.545161154090154, -4.35727359147098e-05,0.00394702484707432,0.293003963855075,-0.576955197438094, -4.5385254270891e-05,0.00452956956643025,0.307870616994001,-0.608749240786035, -4.71977726274053e-05,0.00511211428578484,0.322737270132926,-0.640543284133975, -4.90102909841417e-05,0.00569465900513944,0.337603923271852,-0.672337327481916, -5.08228093404339e-05,0.00627720372449492,0.352470576410778,-0.704131370829856, -5.26353276962821e-05,0.00685974844385084,0.367337229549704,-0.735925414177797, -5.44478460527964e-05,0.00744229316320588,0.38220388268863,-0.767719457525737, -1.00161865496037e-05,-0.00649794593372762,0.0253922078414258,-0.00472976015830734, -1.15326006883271e-05,-0.00594717025762809,0.0399294456681986,-0.0367390205298823, -1.30490148270573e-05,-0.00539639458152857,0.0544666834949714,-0.0687482809014573, -1.4565428965746e-05,-0.00484561890542889,0.0690039213217444,-0.100757541273032, -1.60818431044207e-05,-0.00429484322932938,0.0835411591485172,-0.132766801644607, -1.7598257243151e-05,-0.00374406755322987,0.09807839697529,-0.164776062016182, -1.9114671381798e-05,-0.00319329187713024,0.112615634802063,-0.196785322387757, -2.06310855205283e-05,-0.00264251620103073,0.127152872628836,-0.228794582759332, -2.21474996593418e-05,-0.00209174052493133,0.141690110455608,-0.260803843130907, -2.36639137978778e-05,-0.00154096484883137,0.156227348282381,-0.292813103502482, -2.51803279370244e-05,-0.000990189172732636,0.170764586109154,-0.324822363874057, -2.66967420757824e-05,-0.00043941349663279,0.185301823935927,-0.356831624245632, -2.82131562143184e-05,0.000111362179466834,0.1998390617627,-0.388840884617207, -2.97295703528544e-05,0.000662137855566236,0.214376299589472,-0.420850144988782, -3.12459844914459e-05,0.0012129135316663,0.228913537416246,-0.452859405360357, -3.27623986304815e-05,0.00176368920776548,0.243450775243018,-0.484868665731932, -3.4278812769184e-05,0.00231446488386511,0.257988013069791,-0.516877926103507, -3.57952269074424e-05,0.00286524055996518,0.272525250896564,-0.548887186475082, -3.7311641046589e-05,0.00341601623606391,0.287062488723337,-0.580896446846657, -3.88280551850695e-05,0.00396679191216376,0.30159972655011,-0.612905707218232, -4.0344469323772e-05,0.00451756758826338,0.316136964376883,-0.644914967589807, -4.18608834625855e-05,0.00506834326436278,0.330674202203655,-0.676924227961382, -4.33772976018432e-05,0.00561911894046174,0.345211440030428,-0.708933488332957, -4.48937117402126e-05,0.00616989461656203,0.359748677857201,-0.740942748704532, -4.641012587836e-05,0.00672067029266188,0.374285915683974,-0.772952009076107, -8.95061131261227e-06,-0.00645292424524583,0.0253778317728423,-0.00480485928043545, -1.01635120729332e-05,-0.00593962074851551,0.0395445359692769,-0.0370541240116016, -1.1376412833275e-05,-0.00542631725178516,0.0537112401657115,-0.0693033887427677, -1.25893135936028e-05,-0.00491301375505498,0.0678779443621459,-0.101552653473934, -1.38022143539307e-05,-0.00439971025832459,0.0820446485585806,-0.1338019182051, -1.50151151142308e-05,-0.00388640676159435,0.0962113527550151,-0.166051182936266, -1.62280158744754e-05,-0.00337310326486384,0.11037805695145,-0.198300447667432, -1.74409166347478e-05,-0.00285979976813344,0.124544761147884,-0.230549712398598, -1.86538173950757e-05,-0.00234649627140304,0.138711465344319,-0.262798977129764, -1.98667181555701e-05,-0.00183319277467298,0.152878169540754,-0.295048241860931, -2.10796189158424e-05,-0.00131988927794269,0.167044873737188,-0.327297506592097, -2.22925196765034e-05,-0.000806585781212732,0.181211577933623,-0.359546771323263, -2.35054204364982e-05,-0.000293282284481888,0.195378282130057,-0.391796036054429, -2.47183211967705e-05,0.000220021212248733,0.209544986326492,-0.424045300785595, -2.59312219570429e-05,0.000733324708978689,0.223711690522926,-0.456294565516761, -2.71441227174263e-05,0.00124662820570909,0.237878394719361,-0.488543830247927, -2.83570234775876e-05,0.00175993170243949,0.252045098915796,-0.520793094979093, -2.95699242383041e-05,0.00227323519916922,0.26621180311223,-0.55304235971026, -3.07828249982434e-05,0.00278653869590006,0.280378507308665,-0.585291624441425, -3.19957257587378e-05,0.00329984219263024,0.294545211505099,-0.617540889172592, -3.3208626518455e-05,0.00381314568936153,0.308711915701534,-0.649790153903758, -3.44215272796156e-05,0.00432644918609038,0.322878619897968,-0.682039418634924, -3.5634428040221e-05,0.004839752682821,0.337045324094403,-0.71428868336609, -3.68473288002713e-05,0.00535305617955117,0.351212028290838,-0.746537948097256, -3.80602295600996e-05,0.00586635967628224,0.365378732487272,-0.778787212828422, -7.79067106557868e-06,-0.0064058714063689,0.025361475361132,-0.00488433690778027, -8.71464295375268e-06,-0.00593457731235156,0.0391323924974063,-0.0373875989762279, -9.63861484193362e-06,-0.00546328321833428,0.0529033096336805,-0.0698908610446755, -1.05625867301007e-05,-0.00499198912431692,0.0666742267699548,-0.102394123113123, -1.14865586183788e-05,-0.00452069503029973,0.080445143906229,-0.134897385181571, -1.24105305066013e-05,-0.00404940093628248,0.0942160610425033,-0.167400647250018, -1.33345023948239e-05,-0.00357810684226534,0.107986978178777,-0.199903909318466, -1.425847428288e-05,-0.00310681274824776,0.121757895315052,-0.232407171386914, -1.5182446171158e-05,-0.00263551865423051,0.135528812451326,-0.264910433455361, -1.61064180592141e-05,-0.00216422456021326,0.1492997295876,-0.297413695523809, -1.70303899476587e-05,-0.00169293046619612,0.163070646723875,-0.329916957592256, -1.79543618354927e-05,-0.00122163637217843,0.176841563860149,-0.362420219660704, -1.88783337238818e-05,-0.000750342278161398,0.190612480996423,-0.394923481729152, -1.98023056120489e-05,-0.000279048184144148,0.204383398132697,-0.427426743797599, -2.07262775000494e-05,0.000192245909873323,0.218154315268972,-0.459930005866047, -2.1650249388494e-05,0.000663540003890573,0.231925232405246,-0.492433267934494, -2.25742212766056e-05,0.00113483409790782,0.24569614954152,-0.524936530002942, -2.34981931649392e-05,0.00160612819192507,0.259467066677795,-0.55743979207139, -2.44221650530507e-05,0.00207742228594276,0.273237983814069,-0.589943054139837, -2.53461369410513e-05,0.00254871637996024,0.287008900950343,-0.622446316208285, -2.62701088294959e-05,0.00302001047397704,0.300779818086617,-0.654949578276732, -2.71940807173854e-05,0.00349130456799474,0.314550735222892,-0.68745284034518, -2.8118052605941e-05,0.0039625986620111,0.328321652359165,-0.719956102413627, -2.90420244946077e-05,0.0044338927560279,0.34209256949544,-0.752459364482075, -2.9965996381498e-05,0.00490518685004737,0.355863486631715,-0.784962626550523, -6.5946658991331e-06,-0.00635936840938081,0.0253439198651874,-0.0049639222493114, -7.26444071441623e-06,-0.00593256992546679,0.0387147523091504,-0.0377215258917449, -7.93421552977569e-06,-0.00550577144155279,0.0520855847531134,-0.0704791295341784, -8.60399034513515e-06,-0.00507897295763887,0.0654564171970763,-0.103236733176612, -9.27376516038358e-06,-0.00465217447372474,0.0788272496410394,-0.135994336819045, -9.94353997574304e-06,-0.00422537598981076,0.0921980820850024,-0.168751940461479, -1.06133147909082e-05,-0.00379857750589652,0.105568914528965,-0.201509544103912, -1.12830896062954e-05,-0.00337177902198249,0.118939746972929,-0.234267147746346, -1.19528644214606e-05,-0.00294498053806846,0.132310579416891,-0.267024751388779, -1.26226392370699e-05,-0.00251818205415477,0.145681411860854,-0.299782355031213, -1.32924140519575e-05,-0.00209138357024008,0.159052244304818,-0.332539958673646, -1.39621888672892e-05,-0.00166458508632639,0.17242307674878,-0.36529756231608, -1.46319636827874e-05,-0.00123778660241269,0.185793909192743,-0.398055165958513, -1.53017384983412e-05,-0.000810988118499001,0.199164741636706,-0.430812769600947, -1.59715133133398e-05,-0.000384189634584198,0.21253557408067,-0.46357037324338, -1.6641288128505e-05,4.26088493301613e-05,0.225906406524633,-0.496327976885814, -1.73110629441142e-05,0.000469407333243632,0.239277238968595,-0.529085580528247, -1.79808377592794e-05,0.000896205817158213,0.252648071412559,-0.561843184170681, -1.86506125744446e-05,0.00132300430107213,0.266018903856521,-0.594600787813114, -1.93203873900538e-05,0.0017498027849856,0.279389736300484,-0.627358391455548, -1.9990162205108e-05,0.00217660126889951,0.292760568744447,-0.660115995097981, -2.06599370204952e-05,0.00260339975281365,0.30613140118841,-0.692873598740415, -2.13297118358824e-05,0.00303019823672823,0.319502233632374,-0.725631202382848, -2.19994866508255e-05,0.00345699672064237,0.332873066076336,-0.758388806025282, -2.26692614664348e-05,0.00388379520455562,0.346243898520299,-0.791146409667715, -5.42848221371517e-06,-0.00631587937051781,0.0253262013124811,-0.00503932162701836, -5.89167125854273e-06,-0.00593348347584252,0.0383145203489413,-0.0380378891961575, -6.35486030345356e-06,-0.00555108758116729,0.0513028393854015,-0.0710364567652966, -6.81804934832275e-06,-0.00516869168649192,0.0642911584218618,-0.104035024334436, -7.28123839308092e-06,-0.0047862957918165,0.077279477458322,-0.137033591903575, -7.74442743795012e-06,-0.00440389989714118,0.0902677964947822,-0.170032159472714, -8.20761648270829e-06,-0.00402150400246581,0.103256115531242,-0.203030727041853, -8.67080552768851e-06,-0.00363910810779067,0.116244434567703,-0.236029294610992, -9.13399457264097e-06,-0.00325671221311541,0.129232753604163,-0.269027862180131, -9.59718361726036e-06,-0.00287431631844004,0.142221072640623,-0.30202642974927, -1.00603726622683e-05,-0.00249192042376456,0.155209391677083,-0.335024997318409, -1.05235617069432e-05,-0.00210952452908897,0.168197710713544,-0.368023564887548, -1.09867507520067e-05,-0.00172712863441449,0.181186029750003,-0.401022132456688, -1.14499397967927e-05,-0.0013447327397389,0.194174348786464,-0.434020700025827, -1.19131288415231e-05,-0.000962336845063305,0.207162667822924,-0.467019267594965, -1.23763178869751e-05,-0.000579940950389046,0.220150986859384,-0.500017835164105, -1.28395069310949e-05,-0.000197545055712345,0.233139305895845,-0.533016402733244, -1.3302695976547e-05,0.000184850838962136,0.246127624932305,-0.566014970302383, -1.37658850213329e-05,0.000567246733637727,0.259115943968765,-0.599013537871522, -1.42290740656748e-05,0.000949642628313319,0.272104263005225,-0.632012105440661, -1.46922631107937e-05,0.00133203852298847,0.285092582041685,-0.6650106730098, -1.51554521554687e-05,0.00171443441766428,0.298080901078146,-0.698009240578939, -1.56186412004766e-05,0.00209683031233876,0.311069220114605,-0.731007808148078, -1.60818302453736e-05,0.00247922620701457,0.324057539151066,-0.764006375717217, -1.65450192899375e-05,0.00286162210168994,0.337045858187526,-0.797004943286357, -4.35168288635823e-06,-0.00627725978127903,0.0253093718361411,-0.00510709848344121, -4.65912107407151e-06,-0.00593664760446716,0.0379509645294384,-0.0383222696633804, -4.9665592617848e-06,-0.0055960354276553,0.0505925572227357,-0.0715374408433196, -5.27399744956747e-06,-0.00525542325084344,0.063234149916033,-0.104752612023259, -5.58143563716973e-06,-0.00491481107403152,0.0758757426093302,-0.137967783203198, -5.8888738248275e-06,-0.00457419889721944,0.0885173353026277,-0.171182954383137, -6.19631201270732e-06,-0.00423358672040774,0.101158927995925,-0.204398125563076, -6.50375020028182e-06,-0.00389297454359561,0.113800520689222,-0.237613296743015, -6.81118838780082e-06,-0.00355236236678358,0.12644211338252,-0.270828467922955, -7.11862657587492e-06,-0.00321175018997222,0.139083706075817,-0.304043639102894, -7.4260647633384e-06,-0.00287113801316008,0.151725298769114,-0.337258810282833, -7.73350295113495e-06,-0.00253052583634816,0.164366891462411,-0.370473981462772, -8.0409411389315e-06,-0.00218991365953647,0.177008484155709,-0.403689152642711, -8.34837932661703e-06,-0.00184930148272455,0.189650076849006,-0.43690432382265, -8.6558175145246e-06,-0.00150868930591286,0.202291669542303,-0.47011949500259, -8.96325570232115e-06,-0.00116807712910094,0.214933262235601,-0.503334666182529, -9.27069388945156e-06,-0.000827464952288359,0.227574854928898,-0.536549837362468, -9.57813207735914e-06,-0.000486852775476443,0.240216447622196,-0.569765008542407, -9.88557026537773e-06,-0.000146240598665193,0.252858040315493,-0.602980179722347, -1.01930084526192e-05,0.00019437157814739,0.26549963300879,-0.636195350902285, -1.05004466407488e-05,0.000534983754958418,0.278141225702087,-0.669410522082225, -1.08078848281012e-05,0.000875595931770778,0.290782818395384,-0.702625693262164, -1.11153230156757e-05,0.00121620810858269,0.303424411088682,-0.735840864442103, -1.14227612030282e-05,0.0015568202853955,0.316066003781979,-0.769056035622042, -1.17301993911578e-05,0.00189743246220653,0.328707596475276,-0.802271206801981, -3.40627984006525e-06,-0.0062445074647781,0.0252942634384722,-0.00516520534647556, -3.60385146050413e-06,-0.00594112973499392,0.0376364252876892,-0.0385660764394793, -3.80142308087361e-06,-0.00563775200520966,0.0499785871369062,-0.071966947532483, -3.99899470115983e-06,-0.00533437427542527,0.0623207489861233,-0.105367818625487, -4.19656632158483e-06,-0.00503099654564115,0.0746629108353402,-0.13876868971849, -4.39413794198207e-06,-0.00472761881585693,0.0870050726845572,-0.172169560811494, -4.59170956237931e-06,-0.00442424108607264,0.0993472345337743,-0.205570431904498, -4.78928118274879e-06,-0.00412086335628836,0.111689396382991,-0.238971302997502, -4.98685280320155e-06,-0.00381748562650441,0.124031558232208,-0.272372174090505, -5.18442442343225e-06,-0.00351410789671969,0.136373720081425,-0.305773045183509, -5.38199604410705e-06,-0.00321073016693596,0.148715881930642,-0.339173916276513, -5.57956766444878e-06,-0.00290735243715168,0.161058043779859,-0.372574787369516, -5.77713928479051e-06,-0.00260397470736717,0.173400205629076,-0.40597565846252, -5.97471090513224e-06,-0.00230059697758289,0.185742367478293,-0.439376529555524, -6.1722825256405e-06,-0.00199721924779883,0.19808452932751,-0.472777400648527, -6.36985414592672e-06,-0.00169384151801499,0.210426691176727,-0.506178271741531, -6.56742576654601e-06,-0.00139046378823049,0.222768853025944,-0.539579142834535, -6.76499738661018e-06,-0.00108708605844576,0.235111014875162,-0.572980013927539, -6.96256900734049e-06,-0.000783708328662369,0.247453176724378,-0.606380885020543, -7.16014062729364e-06,-0.000480330598877199,0.259795338573596,-0.639781756113546, -7.35771224813497e-06,-0.000176952869093583,0.272137500422812,-0.67318262720655, -7.55528386786608e-06,0.000126424860691365,0.28447966227203,-0.706583498299553, -7.75285548837434e-06,0.00042980259047587,0.296821824121247,-0.739984369392557, -7.95042710954874e-06,0.000733180320258597,0.309163985970463,-0.773385240485561, -8.14799872972394e-06,0.0010365580500431,0.32150614781968,-0.806786111578565, -2.61224921833947e-06,-0.00621779686777803,0.0252813566324146,-0.00521303325079621, -2.73646024999408e-06,-0.00594604662143827,0.0373755508193538,-0.0387667544067805, -2.86067128163481e-06,-0.00567429637509842,0.0494697450062931,-0.0723204755627647, -2.98488231320615e-06,-0.00540254612875862,0.0615639391932323,-0.105874196718749, -3.10909334491627e-06,-0.00513079588241888,0.0736581333801715,-0.139427917874733, -3.23330437662639e-06,-0.0048590456360792,0.0857523275671107,-0.172981639030717, -3.35751540811446e-06,-0.00458729538973934,0.0978465217540498,-0.206535360186702, -3.48172643993561e-06,-0.0043155451433996,0.109940715940989,-0.240089081342686, -3.60593747134041e-06,-0.00404379489705942,0.122034910127929,-0.27364280249867, -3.73014850296727e-06,-0.0037720446507199,0.134129104314868,-0.307196523654654, -3.85435953470514e-06,-0.00350029440438004,0.146223298501807,-0.340750244810639, -3.97857056655404e-06,-0.00322854415804064,0.158317492688746,-0.374303965966623, -4.10278159795885e-06,-0.00295679391170056,0.170411686875685,-0.407857687122607, -4.22699262947468e-06,-0.00268504366536071,0.182505881062625,-0.441411408278591, -4.35120366115704e-06,-0.00241329341902108,0.194600075249564,-0.474965129434575, -4.47541469283941e-06,-0.002141543172681,0.206694269436503,-0.50851885059056, -4.59962572441075e-06,-0.00186979292634115,0.218788463623443,-0.542072571746544, -4.72383675642618e-06,-0.00159804268000197,0.230882657810381,-0.575626292902528, -4.8480477878865e-06,-0.00132629243366189,0.242976851997321,-0.609180014058512, -4.97225881934682e-06,-0.00105454218732204,0.25507104618426,-0.642733735214497, -5.09646985102918e-06,-0.000782791940982186,0.267165240371199,-0.676287456370481, -5.22068088304461e-06,-0.000511041694642778,0.279259434558139,-0.709841177526465, -5.34489191461596e-06,-0.000239291448302481,0.291353628745078,-0.743394898682449, -5.46910294585423e-06,3.24587980369273e-05,0.303447822932017,-0.776948619838434, -5.59331397842477e-06,0.000304209044375447,0.315542017118955,-0.810502340994418, -1.96980984534106e-06,-0.00619669904589003,0.025270780592608,-0.00525109781491041, -2.04703023620745e-06,-0.00595075304648801,0.0371666545363841,-0.0389264670151655, -2.12425062715016e-06,-0.00570480704708615,0.0490625284801601,-0.0726018362154206, -2.20147101809287e-06,-0.00545886104768428,0.0609584024239361,-0.106277205415676, -2.27869140900783e-06,-0.00521291504828231,0.0728542763677122,-0.139952574615931, -2.35591179981176e-06,-0.00496696904888028,0.0847501503114882,-0.173627943816186, -2.43313219064345e-06,-0.0047210230494783,0.0966460242552643,-0.207303313016441, -2.51035258169718e-06,-0.00447507705007644,0.10854189819904,-0.240978682216696, -2.58757297250112e-06,-0.00422913105067457,0.120437772142816,-0.274654051416951, -2.66479336330505e-06,-0.00398318505127215,0.132333646086593,-0.308329420617206, -2.74201375422001e-06,-0.0037372390518704,0.144229520030369,-0.342004789817462, -2.81923414541252e-06,-0.00349129305246887,0.156125393974144,-0.375680159017717, -2.89645453616094e-06,-0.00324534705306645,0.168021267917921,-0.409355528217972, -2.97367492702039e-06,-0.0029994010536647,0.179917141861697,-0.443030897418227, -3.05089531793534e-06,-0.00275345505426272,0.191813015805473,-0.476706266618482, -3.12811570890581e-06,-0.00250750905486097,0.203708889749249,-0.510381635818737, -3.20533609965423e-06,-0.00226156305545877,0.215604763693025,-0.544057005018992, -3.28255649084674e-06,-0.00201561705605724,0.227500637636801,-0.577732374219247, -3.35977688170619e-06,-0.00176967105665504,0.239396511580577,-0.611407743419502, -3.43699727312075e-06,-0.00152372505725396,0.251292385524353,-0.645083112619757, -3.51421766364712e-06,-0.00127777905785154,0.263188259468129,-0.678758481820013, -3.59143805461759e-06,-0.00103183305844956,0.275084133411905,-0.712433851020268, -3.66865844536601e-06,-0.000785887059047585,0.286980007355681,-0.746109220220523, -3.74587883600341e-06,-0.000539941059645166,0.298875881299457,-0.779784589420778, -3.82309922664081e-06,-0.000293995060242747,0.310771755243234,-0.813459958621033, -1.46554387259884e-06,-0.00618045097756702,0.0252624014483386,-0.00528058882068535, -1.51349218004138e-06,-0.0059548832993663,0.0370040323170038,-0.0390502063923481, -1.56144048751861e-06,-0.00572931562116558,0.048745663185669,-0.0728198239640108, -1.60938879489869e-06,-0.00550374794296482,0.0604872940543341,-0.106589441535674, -1.65733710233429e-06,-0.00527818026476412,0.0722289249229993,-0.140359059107336, -1.70528540979764e-06,-0.00505261258656331,0.0839705557916645,-0.174128676678999, -1.75323371737202e-06,-0.00482704490836272,0.0957121866603297,-0.207898294250662, -1.80118202458557e-06,-0.00460147723016169,0.107453817528995,-0.241667911822324, -1.8491303321877e-06,-0.00437590955196132,0.11919544839766,-0.275437529393987, -1.89707863951227e-06,-0.0041503418737604,0.130937079266325,-0.30920714696565, -1.94502694689236e-06,-0.00392477419555948,0.14267871013499,-0.342976764537313, -1.99297525438347e-06,-0.00369920651735889,0.154420341003656,-0.376746382108975, -2.04092356187457e-06,-0.00347363883915808,0.166161971872321,-0.410515999680638, -2.08887186942119e-06,-0.00324807116095749,0.177903602740986,-0.444285617252301, -2.13682017669026e-06,-0.00302250348275668,0.189645233609651,-0.478055234823964, -2.18476848423688e-06,-0.00279693580455631,0.201386864478316,-0.511824852395626, -2.23271679145043e-06,-0.00257136812635483,0.213128495346982,-0.545594469967289, -2.28066509888603e-06,-0.00234580044815402,0.224870126215647,-0.579364087538952, -2.32861340643264e-06,-0.00212023276995388,0.236611757084312,-0.613133705110615, -2.37656171397926e-06,-0.00189466509175329,0.248353387952977,-0.646903322682277, -2.42451002163691e-06,-0.00166909741355248,0.260095018821642,-0.68067294025394, -2.47245832851739e-06,-0.00144352973535122,0.271836649690307,-0.714442557825603, -2.52040663661912e-06,-0.0012179620571513,0.283578280558972,-0.748212175397266, -2.56835494349961e-06,-0.000992394378949157,0.295319911427638,-0.781981792968928, -2.61630325071316e-06,-0.000766826700748346,0.307061542296303,-0.815751410540591, -1.07906766994709e-06,-0.00616817972183895,0.0252559358611204,-0.00530296515732785, -1.10905105556169e-06,-0.00595829925679961,0.0368801897736026,-0.0391440937958805, -1.13903444118324e-06,-0.00574841879176025,0.0485044436860849,-0.0729852224344332, -1.16901782679091e-06,-0.00553853832672085,0.0601286975985671,-0.106826351072986, -1.19900121237082e-06,-0.00532865786168146,0.0717529515110493,-0.140667479711539, -1.22898459806176e-06,-0.00511877739664213,0.0833772054235316,-0.174508608350091, -1.25896798369718e-06,-0.0049088969316029,0.0950014593360137,-0.208349736988644, -1.2889513690828e-06,-0.00469901646656312,0.106625713248496,-0.242190865627196, -1.31893475469047e-06,-0.00448913600152401,0.118249967160978,-0.276031994265749, -1.34891814052018e-06,-0.00427925553648456,0.129874221073461,-0.309873122904302, -1.37890152596132e-06,-0.00406937507144534,0.141498474985942,-0.343714251542855, -1.40888491145796e-06,-0.00385949460640567,0.153122728898425,-0.377555380181407, -1.43886829717665e-06,-0.00364961414136622,0.164746982810907,-0.41139650881996, -1.46885168289534e-06,-0.00343973367632699,0.176371236723389,-0.445237637458512, -1.49883506850301e-06,-0.00322985321128777,0.187995490635872,-0.479078766097065, -1.52881845383313e-06,-0.0030199727462481,0.199619744548354,-0.512919894735618, -1.55880183982937e-06,-0.0028100922812091,0.211243998460836,-0.546761023374171, -1.58878522515948e-06,-0.00260021181616921,0.222868252373319,-0.580602152012723, -1.61876861060062e-06,-0.00239033135112976,0.234492506285801,-0.614443280651276, -1.64875199659686e-06,-0.00218045088609076,0.246116760198283,-0.648284409289828, -1.67873538248209e-06,-0.00197057042105175,0.257741014110765,-0.682125537928381, -1.70871876747913e-06,-0.00176068995601186,0.269365268023247,-0.715966666566934, -1.73870215314231e-06,-0.0015508094909733,0.280989521935729,-0.749807795205486, -1.76868553858345e-06,-0.00134092902593297,0.292613775848212,-0.783648923844039, -1.79866892446867e-06,-0.00113104856089352,0.304238029760694,-0.817490052482591, -7.88248433407357e-07,-0.00615904771366496,0.0252510466753871,-0.00531967566949122, -8.07243923386936e-07,-0.00596100914560357,0.036787450125136,-0.039214208338032, -8.26239413387331e-07,-0.00576297057754227,0.0483238535748849,-0.0731087410065727, -8.45234903401604e-07,-0.00556493200948088,0.0598602570246339,-0.107003273675114, -8.64230393471388e-07,-0.00536689344141961,0.0713966604743828,-0.140897806343654, -8.83225883541172e-07,-0.00516885487335828,0.0829330639241318,-0.174792339012195, -9.02221373333401e-07,-0.00497081630529672,0.0944694673738807,-0.208686871680736, -9.21216863458696e-07,-0.0047727777372355,0.10600587082363,-0.242581404349277, -9.40212353084391e-07,-0.00457473916917361,0.117542274273379,-0.276475937017817, -9.5920784337622e-07,-0.00437670060111273,0.129078677723128,-0.310370469686358, -9.78203333334982e-07,-0.00417866203305128,0.140615081172876,-0.344265002354899, -9.97198822960677e-07,-0.00398062346498929,0.152151484622626,-0.37815953502344, -1.01619431336353e-06,-0.00378258489692884,0.163687888072374,-0.41205406769198, -1.03518980326678e-06,-0.00358454632886684,0.175224291522124,-0.445948600360521, -1.05418529317003e-06,-0.00338650776080596,0.186760694971872,-0.479843133029062, -1.07318078323981e-06,-0.00318846919274463,0.198297098421621,-0.513737665697602, -1.09217627308755e-06,-0.00299043062468285,0.20983350187137,-0.547632198366143, -1.11117176337938e-06,-0.00279239205662174,0.221369905321119,-0.581526731034684, -1.13016725333814e-06,-0.00259435348856041,0.232906308770868,-0.615421263703225, -1.14916274340793e-06,-0.00239631492049908,0.244442712220617,-0.649315796371766, -1.16815823325567e-06,-0.0021982763524373,0.255979115670366,-0.683210329040306, -1.18715372310341e-06,-0.00200023778437552,0.267515519120115,-0.717104861708847, -1.2061492137283e-06,-0.00180219921631553,0.279051922569864,-0.750999394377388, -1.22514470346502e-06,-0.00160416064825331,0.290588326019613,-0.784893927045929, -1.24414019331276e-06,-0.00140612208019197,0.302124729469362,-0.818788459714469, -5.72414513677622e-07,-0.00615232617215074,0.0252474053070923,-0.00533200752270217, -5.84649016172056e-07,-0.00596309611677742,0.03671887135759,-0.0392659507522268, -5.96883518652613e-07,-0.00577386606140412,0.0481903374080877,-0.0731998939817515, -6.09118021105415e-07,-0.00558463600603071,0.0596618034585855,-0.107133837211276, -6.21352523516583e-07,-0.00539540595065729,0.0711332695090832,-0.141067780440801, -6.33587025927751e-07,-0.00520617589528383,0.082604735559581,-0.175001723670325, -6.45821528366675e-07,-0.00501694583991041,0.0940762016100787,-0.20893566689985, -6.58056031055398e-07,-0.00482771578453745,0.105547667660576,-0.242869610129375, -6.70290533466567e-07,-0.00463848572916414,0.117019133711074,-0.276803553358899, -6.82525035988757e-07,-0.00444925567379073,0.128490599761572,-0.310737496588424, -6.94759538344414e-07,-0.00426002561841732,0.139962065812069,-0.344671439817949, -7.06994040811093e-07,-0.00407079556304368,0.151433531862567,-0.378605383047473, -7.19228543555328e-07,-0.00388156550767071,0.162904997913065,-0.412539326276998, -7.31463045577918e-07,-0.00369233545229686,0.174376463963563,-0.446473269506523, -7.43697548211131e-07,-0.00350310539692367,0.18584793001406,-0.480407212736047, -7.55932050955366e-07,-0.0033138753415507,0.197319396064558,-0.514341155965572, -7.68166553588578e-07,-0.00312464528617751,0.208790862115056,-0.548275099195097, -7.80401055888724e-07,-0.00293541523080409,0.220262328165553,-0.582209042424621, -7.92635558299892e-07,-0.00274618517543068,0.231733794216051,-0.616142985654146, -8.04870060489016e-07,-0.0025569551200566,0.243205260266549,-0.65007692888367, -8.17104562900184e-07,-0.00236772506468386,0.254676726317046,-0.684010872113195, -8.29339065866463e-07,-0.00217849500931067,0.266148192367544,-0.71794481534272, -8.41573567944565e-07,-0.00198926495393748,0.277619658418041,-0.751878758572245, -8.53808070133688e-07,-0.00180003489856295,0.28909112446854,-0.78581270180177, -8.66042573099968e-07,-0.00161080484319065,0.300562590519037,-0.819746645031294, -4.13869175520942e-07,-0.0061474187365574,0.0252447236841371,-0.00534102845601091, -4.21889341600812e-07,-0.00596466965806236,0.0366686298337597,-0.0393038010947261, -4.29909507757009e-07,-0.00578192057956745,0.0480925359833822,-0.0732665737334412, -4.3792967382994e-07,-0.00559917150107236,0.0595164421330048,-0.107229346372156, -4.45949840027771e-07,-0.00541642242257745,0.0709403482826274,-0.141192119010872, -4.53970006031312e-07,-0.00523367334408242,0.0823642544322499,-0.175154891649587, -4.61990172090365e-07,-0.00505092426558718,0.0937881605818727,-0.209117664288302, -4.70010338315952e-07,-0.00486817518709237,0.105212066731495,-0.243080436927017, -4.78030504458271e-07,-0.00468542610859746,0.116635972881118,-0.277043209565732, -4.8605067054508e-07,-0.00450267703010254,0.12805987903074,-0.311005982204447, -4.94070836298821e-07,-0.00431992795160707,0.139483785180363,-0.344968754843162, -5.0209100238563e-07,-0.00413717887311194,0.150907691329985,-0.378931527481877, -5.10111168861016e-07,-0.00395442979461746,0.162331597479608,-0.412894300120593, -5.18131334836802e-07,-0.00377168071612233,0.17375550362923,-0.446857072759308, -5.26151501145655e-07,-0.00358893163762763,0.185179409778853,-0.480819845398023, -5.34171667232464e-07,-0.0034061825591325,0.196603315928475,-0.514782618036738, -5.4219183320825e-07,-0.00322343348063736,0.208027222078098,-0.548745390675453, -5.50211999628125e-07,-0.00304068440214289,0.219451128227721,-0.582708163314168, -5.58232165936978e-07,-0.0028579353236482,0.230875034377343,-0.616670935952883, -5.66252330913564e-07,-0.00267518624515128,0.242298940526966,-0.650633708591598, -5.74272497333439e-07,-0.00249243716665681,0.253722846676589,-0.684596481230314, -5.82292663975359e-07,-0.00230968808816279,0.265146752826211,-0.718559253869029, -5.90312829396034e-07,-0.00212693900966698,0.276570658975833,-0.752522026507744, -5.98332995704887e-07,-0.00194418993117251,0.287994565125456,-0.786484799146459, -6.06353162346807e-07,-0.0017614408526776,0.299418471275079,-0.820447571785174, -1.88214363341863e-05,-0.00685505252793257,0.0372352849382559,-0.0183293921652007, -2.19693087145506e-05,-0.00617600832893198,0.053071722954117,-0.0485726429861822, -2.51171810948525e-05,-0.00549696412993123,0.0689081609699782,-0.0788158938071636, -2.82650534750573e-05,-0.00481791993093039,0.0847445989858394,-0.109059144628145, -3.14129258554563e-05,-0.00413887573192984,0.100581037001701,-0.139302395449127, -3.45607982356055e-05,-0.00345983153292906,0.116417475017562,-0.169545646270108, -3.77086706160323e-05,-0.00278078733392839,0.132253913033423,-0.199788897091089, -4.08565429965146e-05,-0.00210174313492795,0.148090351049284,-0.230032147912071, -4.40044153765529e-05,-0.00142269893592695,0.163926789065145,-0.260275398733052, -4.71522877570352e-05,-0.000743654736926391,0.179763227081006,-0.290518649554034, -5.03001601370734e-05,-6.46105379251694e-05,0.195599665096868,-0.320761900375015, -5.34480325177777e-05,0.000614433661074942,0.211436103112729,-0.351005151195997, -5.65959048976494e-05,0.00129347786007616,0.22727254112859,-0.381248402016978, -5.97437772780762e-05,0.00197252205907672,0.243108979144451,-0.41149165283796, -6.28916496586696e-05,0.00265156625807705,0.258945417160312,-0.441734903658941, -6.60395220386523e-05,0.00333061045707805,0.274781855176173,-0.471978154479923, -6.91873944190791e-05,0.00400965465607883,0.290618293192035,-0.502221405300904, -7.23352667991728e-05,0.00468869885507983,0.306454731207896,-0.532464656121886, -7.54831391794886e-05,0.00536774305408039,0.322291169223757,-0.562707906942867, -7.86310115603595e-05,0.00604678725308005,0.338127607239618,-0.592951157763849, -8.17788839406752e-05,0.00672583145208128,0.353964045255479,-0.62319440858483, -8.49267563204359e-05,0.0074048756510825,0.369800483271341,-0.653437659405811, -8.80746287010847e-05,0.00808391985008283,0.385636921287202,-0.683680910226793, -9.12225010808454e-05,0.00876296404908405,0.401473359303063,-0.713924161047774, -9.43703734609391e-05,0.00944200824808528,0.417309797318924,-0.744167411868756, -1.87366418219342e-05,-0.00684975478369067,0.0372263427390231,-0.0183417609263533, -2.18564035990298e-05,-0.00617246373150038,0.0530393725162785,-0.0486008942974748, -2.49761653760283e-05,-0.00549517267930999,0.0688524022935339,-0.0788600276685963, -2.80959271531378e-05,-0.00481788162711977,0.0846654320707892,-0.109119161039718, -3.12156889302473e-05,-0.00414059057492955,0.100478461848044,-0.139378294410839, -3.4335450707107e-05,-0.00346329952273894,0.1162914916253,-0.169637427781961, -3.7455212484383e-05,-0.00278600847054877,0.132104521402555,-0.199896561153082, -4.05749742612982e-05,-0.00210871741835839,0.147917551179811,-0.230155694524204, -4.36947360384354e-05,-0.00143142636616844,0.163730580957066,-0.260414827895325, -4.68144978154617e-05,-0.000754135313977833,0.179543610734321,-0.290673961266447, -4.99342595923769e-05,-7.68442617873344e-05,0.195356640511577,-0.320933094637568, -5.30540213692365e-05,0.000600446790403275,0.211169670288832,-0.35119222800869, -5.61737831464293e-05,0.00127773784259322,0.226982700066087,-0.381451361379811, -5.9293544923622e-05,0.00195502889478383,0.242795729843343,-0.411710494750933, -6.24133067010924e-05,0.00263231994697355,0.258608759620598,-0.441969628122054, -6.55330684780076e-05,0.00330961099916349,0.274421789397853,-0.472228761493176, -6.86528302548117e-05,0.00398690205135432,0.290234819175109,-0.502487894864297, -7.1772592031949e-05,0.00466419310354449,0.306047848952364,-0.532747028235419, -7.48923538085311e-05,0.00534148415573532,0.32186087872962,-0.56300616160654, -7.80121155858904e-05,0.00601877520792549,0.337673908506875,-0.593265294977662, -8.11318773628056e-05,0.00669606626011587,0.35348693828413,-0.623524428348783, -8.42516391402759e-05,0.00737335731230582,0.369299968061386,-0.653783561719905, -8.73714009170801e-05,0.0080506483644962,0.385112997838641,-0.684042695091026, -9.04911626937732e-05,0.00872793941668748,0.400926027615897,-0.714301828462148, -9.36109244710215e-05,0.00940523046887742,0.416739057393152,-0.744560961833269, -1.86192833677642e-05,-0.00684244467215672,0.0372139665350253,-0.0183588529880309, -2.17003591440612e-05,-0.00616759190513824,0.0529946244144051,-0.0486399340322654, -2.47814349203651e-05,-0.00549273913811976,0.0687752822937849,-0.0789210150764998, -2.78625106967523e-05,-0.00481788637110131,0.0845559401731646,-0.109202096120734, -3.09435864731256e-05,-0.00414303360408297,0.100336598052544,-0.139483177164969, -3.40246622494156e-05,-0.00346818083706446,0.116117255931924,-0.169764258209203, -3.71057380255668e-05,-0.00279332807004573,0.131897913811304,-0.200045339253438, -4.01868138019124e-05,-0.00211847530302745,0.147678571690684,-0.230326420297672, -4.32678895783689e-05,-0.00144362253600905,0.163459229570063,-0.260607501341907, -4.63489653548255e-05,-0.000768769768990873,0.179239887449443,-0.290888582386141, -4.943004113106e-05,-9.39170019722546e-05,0.195020545328823,-0.321169663430376, -5.2511116907128e-05,0.000580935765046586,0.210801203208203,-0.35145074447461, -5.55921926835845e-05,0.00125578853206476,0.226581861087582,-0.381731825518845, -5.86732684600966e-05,0.00193064129908316,0.242362518966962,-0.412012906563079, -6.17543442361645e-05,0.00260549406610155,0.258143176846342,-0.442293987607314, -6.48354200128987e-05,0.00328034683311951,0.273923834725721,-0.472575068651548, -6.79164957891887e-05,0.00395519960013813,0.289704492605101,-0.502856149695783, -7.09975715654787e-05,0.00463005236715697,0.305485150484481,-0.533137230740017, -7.40786473417687e-05,0.00530490513417536,0.321265808363861,-0.563418311784251, -7.71597231180587e-05,0.00597975790119376,0.337046466243241,-0.593699392828486, -8.02407988945708e-05,0.00665461066821216,0.352827124122621,-0.62398047387272, -8.33218746706388e-05,0.007329463435231,0.368607782002,-0.654261554916955, -8.64029504470398e-05,0.00800431620224895,0.38438843988138,-0.684542635961189, -8.94840262234409e-05,0.00867916896926735,0.40016909776076,-0.714823717005424, -9.2565102000064e-05,0.0093540217362853,0.415949755640139,-0.745104798049659, -1.84575372020879e-05,-0.00683241166888501,0.0371969096452189,-0.0183823589785741, -2.1485713185318e-05,-0.00616094185344759,0.0529330010553548,-0.0486936237306827, -2.45138891684926e-05,-0.00548947203801003,0.0686690924654907,-0.0790048884827912, -2.75420651517089e-05,-0.00481800222257261,0.0844051838756265,-0.1093161532349, -3.05702411349806e-05,-0.00414653240713514,0.100141275285762,-0.139627417987008, -3.35984171181691e-05,-0.00347506259169783,0.115877366695898,-0.169938682739117, -3.66265931014409e-05,-0.0028035927762603,0.131613458106034,-0.200249947491225, -3.96547690846294e-05,-0.00213212296082288,0.14734954951617,-0.230561212243334, -4.26829450678734e-05,-0.00146065314538546,0.163085640926306,-0.260872476995442, -4.57111210511729e-05,-0.000789183329947929,0.178821732336442,-0.291183741747551, -4.87392970341394e-05,-0.000117713514510065,0.194557823746578,-0.321495006499659, -5.17674730172724e-05,0.000553756300927244,0.210293915156713,-0.351806271251768, -5.47956490006829e-05,0.00122522611636455,0.226030006566849,-0.382117536003877, -5.78238249840379e-05,0.00189669593180186,0.241766097976985,-0.412428800755985, -6.08520009670599e-05,0.00256816574723939,0.257502189387121,-0.442740065508094, -6.38801769502484e-05,0.00323963556267715,0.273238280797257,-0.473051330260202, -6.69083529335479e-05,0.00391110537811445,0.288974372207393,-0.503362595012311, -6.99365289167364e-05,0.00458257519355176,0.304710463617528,-0.533673859764419, -7.29647048999249e-05,0.00525404500898952,0.320446555027665,-0.563985124516528, -7.59928808832244e-05,0.00592551482442705,0.3361826464378,-0.594296389268636, -7.90210568660799e-05,0.0065969846398648,0.351918737847936,-0.624607654020745, -8.20492328499345e-05,0.00726845445530122,0.367654829258072,-0.654918918772853, -8.5077408833345e-05,0.00793992427073809,0.383390920668207,-0.685230183524962, -8.81055848157564e-05,0.00861139408617717,0.399127012078344,-0.71554144827707, -9.11337607991669e-05,0.00928286390161448,0.41486310348848,-0.745852713029179, -1.82359026973528e-05,-0.0068187423677884,0.0371735380238382,-0.0184144733187535, -2.11923778945938e-05,-0.00615194997760457,0.0528486543261413,-0.0487669756379732, -2.4148853091821e-05,-0.00548515758742074,0.0685237706284444,-0.0791194779571929, -2.71053282892286e-05,-0.00481836519723722,0.0841988869307474,-0.109471980276413, -3.00618034866085e-05,-0.00415157280705358,0.0998740032330505,-0.139824482595632, -3.30182786838773e-05,-0.00348478041686973,0.115549119535354,-0.170176984914852, -3.59747538810629e-05,-0.00281798802668609,0.131224235837657,-0.200529487234072, -3.89312290784427e-05,-0.00215119563650235,0.14689935213996,-0.230881989553292, -4.18877042758226e-05,-0.00148440324631871,0.162574468442263,-0.261234491872511, -4.48441794729804e-05,-0.000817610856134965,0.178249584744566,-0.291586994191731, -4.78006546705267e-05,-0.000150818465951552,0.193924701046869,-0.321939496510951, -5.0757129867629e-05,0.000515973924232638,0.209599817349172,-0.35229199883017, -5.37136050651754e-05,0.00118276631441594,0.225274933651475,-0.38264450114939, -5.66700802620557e-05,0.00184955870460035,0.240950049953778,-0.41299700346861, -5.96265554598796e-05,0.00251635109478343,0.256625166256081,-0.443349505787829, -6.25830306567599e-05,0.0031831434849674,0.272300282558384,-0.473702008107049, -6.55395058540842e-05,0.00384993587515092,0.287975398860687,-0.504054510426269, -6.84959810511865e-05,0.00451672826533511,0.30365051516299,-0.534407012745489, -7.14524562486218e-05,0.00518352065551841,0.319325631465293,-0.564759515064708, -7.44089314462792e-05,0.00585031304570194,0.335000747767596,-0.595112017383928, -7.73654066436036e-05,0.00651710543588546,0.350675864069899,-0.625464519703148, -8.03218818407059e-05,0.00718389782606943,0.366350980372202,-0.655817022022367, -8.32783570380302e-05,0.00785069021625295,0.382026096674505,-0.686169524341587, -8.62348322353546e-05,0.00851748260643692,0.397701212976808,-0.716522026660807, -8.91913074322348e-05,0.00918427499662089,0.413376329279111,-0.746874528980027, -1.79346047260026e-05,-0.00680030432163194,0.0371417678314268,-0.0184579555447157, -2.07950609872887e-05,-0.00613994738454396,0.0527341638745772,-0.0488662927713706, -2.36555172485886e-05,-0.005479590447456,0.0683265599177277,-0.0792746299980255, -2.65159735098608e-05,-0.00481923351036806,0.0839189559608781,-0.10968296722468, -2.93764297711607e-05,-0.00415887657328007,0.0995113520040287,-0.140091304451335, -3.22368860323219e-05,-0.00349851963619197,0.115103748047179,-0.17049964167799, -3.50973422939549e-05,-0.00283816269910442,0.130696144090329,-0.200907978904645, -3.79577985551438e-05,-0.00217780576201632,0.14628854013348,-0.2313163161313, -4.08182548163882e-05,-0.00151744882492832,0.16188093617663,-0.261724653357955, -4.36787110777992e-05,-0.000857091887840555,0.177473332219781,-0.29213299058461, -4.65391673391546e-05,-0.000196734950752564,0.193065728262931,-0.322541327811265, -4.9399623600177e-05,0.000463621986335871,0.208658124306082,-0.35294966503792, -5.2260079861588e-05,0.00112397892342342,0.224250520349232,-0.383358002264575, -5.512053612311e-05,0.00178433586051119,0.239842916392383,-0.413766339491229, -5.79809923841879e-05,0.0024446927975994,0.255435312435533,-0.444174676717884, -6.08414486454878e-05,0.00310504973468717,0.271027708478684,-0.474583013944539, -6.37019049071208e-05,0.00376540667177472,0.286620104521834,-0.504991351171194, -6.65623611679766e-05,0.0044257636088636,0.302212500564985,-0.535399688397849, -6.94228174293876e-05,0.00508612054595137,0.317804896608135,-0.565808025624504, -7.22832736904655e-05,0.00574647748303958,0.333397292651286,-0.596216362851159, -7.51437299522095e-05,0.00640683442012691,0.348989688694436,-0.626624700077814, -7.80041862128433e-05,0.00706719135721556,0.364582084737586,-0.657033037304469, -8.08646424746984e-05,0.00772754829430289,0.380174480780737,-0.687441374531124, -8.37250987359983e-05,0.00838790523139066,0.395766876823887,-0.717849711757778, -8.65855549972983e-05,0.00904826216847932,0.411359272867038,-0.748258048984433, -1.75293962865336e-05,-0.00677576723881289,0.0370990460173373,-0.0185161179004411, -2.02633523189166e-05,-0.00612420253475468,0.0525805047211186,-0.0489991405802043, -2.29973083512441e-05,-0.0054726378306964,0.0680619634249,-0.0794821632599674, -2.57312643835717e-05,-0.00482107312663815,0.0835434221286812,-0.109965185939731, -2.84652204158575e-05,-0.00416950842257968,0.0990248808324627,-0.140448208619494, -3.11991764481434e-05,-0.00351794371852143,0.114506339536244,-0.170931231299257, -3.39331324807346e-05,-0.0028663790144634,0.129987798240025,-0.20141425397902, -3.66670885128539e-05,-0.00221481431040504,0.145469256943807,-0.231897276658783, -3.94010445453619e-05,-0.00156324960634668,0.160950715647588,-0.262380299338546, -4.21350005775367e-05,-0.000911684902288434,0.176432174351369,-0.29286332201831, -4.48689566101002e-05,-0.000260120198230407,0.19191363305515,-0.323346344698073, -4.76029126424415e-05,0.000391444505827732,0.207395091758932,-0.353829367377836, -5.03368686746164e-05,0.00104300920988654,0.222876550462713,-0.384312390057599, -5.30708247066247e-05,0.00169457391394512,0.238358009166495,-0.414795412737362, -5.58047807394102e-05,0.00234613861800304,0.253839467870276,-0.445278435417126, -5.85387367717516e-05,0.00299770332206117,0.269320926574057,-0.475761458096889, -6.1272692804204e-05,0.00364926802611931,0.284802385277839,-0.506244480776652, -6.40066488362123e-05,0.00430083273017789,0.30028384398162,-0.536727503456415, -6.67406048686647e-05,0.00495239743423603,0.315765302685401,-0.567210526136178, -6.94745609011171e-05,0.00560396213829417,0.331246761389183,-0.597693548815941, -7.22085169332365e-05,0.00625552684235275,0.346728220092964,-0.628176571495704, -7.4942472966022e-05,0.00690709154641045,0.362209678796745,-0.658659594175468, -7.76764289983634e-05,0.00755865625046859,0.377691137500526,-0.689142616855231, -8.04103850307047e-05,0.00821022095452673,0.393172596204307,-0.719625639534994, -8.31443410631572e-05,0.00886178565858531,0.408654054908089,-0.750108662214757, -1.69922629897207e-05,-0.00674369450186987,0.0370424276515967,-0.0185926635691099, -1.9563170846032e-05,-0.0061040222919802,0.0523773798652408,-0.0491739774524651, -2.21340787024266e-05,-0.00546435008209067,0.0677123320788847,-0.0797552913358204, -2.47049865587934e-05,-0.00482467787220103,0.0830472842925288,-0.110336605219176, -2.72758944151186e-05,-0.00418500566231128,0.0983822365061729,-0.140917919102531, -2.9846802271416e-05,-0.0035453334524217,0.113717188719817,-0.171499232985886, -3.24177101278522e-05,-0.002905661242532,0.129052140933461,-0.202080546869242, -3.49886179841774e-05,-0.00226598903264241,0.144387093147105,-0.232661860752597, -3.75595258406691e-05,-0.00162631682275294,0.159722045360749,-0.263243174635952, -4.01304336968833e-05,-0.000986644612863241,0.175056997574393,-0.293824488519308, -4.27013415530975e-05,-0.000346972402973433,0.190391949788037,-0.324405802402663, -4.52722494096447e-05,0.000292699806916152,0.205726902001681,-0.354987116286018, -4.78431572659699e-05,0.000932372016805516,0.221061854215325,-0.385568430169373, -5.04140651225171e-05,0.00157204422669488,0.236396806428969,-0.416149744052729, -5.29849729786758e-05,0.00221171643658491,0.251731758642613,-0.446731057936084, -5.55558808349454e-05,0.00285138864647472,0.267066710856257,-0.477312371819439, -5.81267886915482e-05,0.00349106085636408,0.282401663069901,-0.507893685702795, -6.06976965478179e-05,0.00413073306625367,0.297736615283545,-0.53847499958615, -6.32686044041986e-05,0.00477040527614325,0.313071567497189,-0.569056313469505, -6.58395122608013e-05,0.00541007748603284,0.328406519710833,-0.599637627352861, -6.8410420117071e-05,0.0060497496959222,0.343741471924477,-0.630218941236216, -7.09813279733407e-05,0.00668942190581268,0.359076424138122,-0.660800255119571, -7.35522358296103e-05,0.00732909411570182,0.374411376351766,-0.691381569002926, -7.612314368588e-05,0.00796876632559185,0.38974632856541,-0.721962882886282, -7.86940515423717e-05,0.00860843853548099,0.405081280779054,-0.752544196769637, -1.62937396231272e-05,-0.0067027433278069,0.0369688261835577,-0.018691278456884, -1.86604746705704e-05,-0.00607893113012178,0.0521141854907746,-0.0493992223139529, -2.10272097180136e-05,-0.00545511893243666,0.0672595447979915,-0.0801071661710218, -2.33939447654985e-05,-0.00483130673475157,0.0824049041052085,-0.110815110028091, -2.57606798129972e-05,-0.00420749453706659,0.0975502634124253,-0.14152305388516, -2.81274148602184e-05,-0.00358368233938122,0.112695622719642,-0.172230997742229, -3.04941499078559e-05,-0.0029598701416963,0.127840982026859,-0.202938941599298, -3.28608849553547e-05,-0.00233605794401126,0.142986341334076,-0.233646885456367, -3.52276200029089e-05,-0.00171224574632622,0.158131700641293,-0.264354829313435, -3.75943550502411e-05,-0.00108843354864108,0.17327705994851,-0.295062773170504, -3.99610900979064e-05,-0.000464621350956262,0.188422419255727,-0.325770717027573, -4.23278251451276e-05,0.000159190846729551,0.203567778562944,-0.356478660884642, -4.46945601925153e-05,0.000783003044414032,0.21871313787016,-0.387186604741711, -4.70612952400695e-05,0.0014068152420994,0.233858497177378,-0.41789454859878, -4.94280302876238e-05,0.00203062743978433,0.249003856484594,-0.448602492455849, -5.17947653349005e-05,0.0026544396374697,0.264149215791811,-0.479310436312918, -5.41615003825102e-05,0.00327825183515484,0.279294575099029,-0.510018380169987, -5.6528235430342e-05,0.00390206403283933,0.294439934406245,-0.540726324027056, -5.88949704776187e-05,0.00452587623052447,0.309585293713462,-0.571434267884125, -6.12617055247844e-05,0.00514968842821051,0.324730653020679,-0.602142211741194, -6.36284405725052e-05,0.00577350062589455,0.339876012327896,-0.632850155598263, -6.5995175620337e-05,0.00639731282357925,0.355021371635113,-0.663558099455332, -6.83619106673916e-05,0.00702112502126484,0.37016673094233,-0.6942660433124, -7.07286457145573e-05,0.00764493721895088,0.385312090249547,-0.724973987169469, -7.3095380762167e-05,0.00826874941663558,0.400457449556764,-0.755681931026538, -1.54075864325573e-05,-0.00665199721018116,0.0368755166188757,-0.0188148945336712, -1.75280170387065e-05,-0.00604892369816176,0.0517818705359336,-0.0496815720354004, -1.96484476449321e-05,-0.00544585018614246,0.0666882244529914,-0.0805482495371296, -2.17688782510328e-05,-0.00484277667412297,0.0815945783700494,-0.111414927038859, -2.3889308857189e-05,-0.00423970316210354,0.0965009322871072,-0.142281604540588, -2.60097394632897e-05,-0.00363662965008404,0.111407286204165,-0.173148282042317, -2.81301700693071e-05,-0.00303355613806455,0.126313640121223,-0.204014959544047, -3.02506006756298e-05,-0.00243048262604539,0.141219994038281,-0.234881637045776, -3.23710312818415e-05,-0.00182740911402601,0.156126347955339,-0.265748314547505, -3.44914618879977e-05,-0.00122433560200674,0.171032701872396,-0.296614992049234, -3.66118924940428e-05,-0.000621262089987029,0.185939055789454,-0.327481669550963, -3.87323231005321e-05,-1.81885779682034e-05,0.200845409706512,-0.358348347052693, -4.08527537067993e-05,0.000584884934051288,0.21575176362357,-0.389215024554422, -4.29731843128445e-05,0.00118795844607056,0.230658117540628,-0.420081702056151, -4.50936149192227e-05,0.00179103195808961,0.245564471457685,-0.450948379557881, -4.72140455248793e-05,0.00239410547010954,0.260470825374743,-0.48181505705961, -4.9334476131091e-05,0.00299717898212926,0.275377179291802,-0.512681734561339, -5.14549067375247e-05,0.00360025249414808,0.290283533208859,-0.543548412063068, -5.35753373431813e-05,0.00420332600616824,0.305189887125918,-0.574415089564797, -5.56957679497261e-05,0.00480639951818684,0.320096241042975,-0.605281767066527, -5.78161985562708e-05,0.00540947303020634,0.335002594960033,-0.636148444568256, -5.99366291622605e-05,0.00601254654222538,0.349908948877091,-0.667015122069985, -6.20570597681391e-05,0.00661562005424532,0.364815302794149,-0.697881799571714, -6.41774903740178e-05,0.00721869356626526,0.379721656711207,-0.728748477073443, -6.62979209800074e-05,0.0078217670782843,0.394628010628264,-0.759615154575173, -1.43181155143612e-05,-0.00659140106304036,0.0367609212111324,-0.018964640389785, -1.61550505929503e-05,-0.00601472995701616,0.0513757431305874,-0.0500236044138784, -1.79919856715394e-05,-0.00543805885099197,0.0659905650500425,-0.0810825684379719, -1.98289207502811e-05,-0.00486138774496792,0.0806053869694975,-0.112141532462065, -2.1665855828884e-05,-0.00428471663894381,0.0952202088889524,-0.143200496486159, -2.35027909075425e-05,-0.0037080455329197,0.109835030808407,-0.174259460510252, -2.53397259862287e-05,-0.00313137442689571,0.124449852727862,-0.205318424534346, -2.71766610647206e-05,-0.00255470332087127,0.139064674647318,-0.236377388558439, -2.90135961433236e-05,-0.00197803221484727,0.153679496566772,-0.267436352582533, -3.0850531222204e-05,-0.00140136110882327,0.168294318486227,-0.298495316606626, -3.2687466300918e-05,-0.000824690002799278,0.182909140405682,-0.329554280630719, -3.45244013796875e-05,-0.000248018896775504,0.197523962325137,-0.360613244654813, -3.63613364581794e-05,0.000328652209249158,0.212138784244593,-0.391672208678906, -3.81982715365048e-05,0.000905323315273376,0.226753606164047,-0.422731172703, -4.00352066155518e-05,0.00148199442129715,0.241368428083502,-0.453790136727093, -4.18721416935997e-05,0.00205866552732226,0.255983250002958,-0.484849100751187, -4.37090767724246e-05,0.00263533663334559,0.270598071922412,-0.51590806477528, -4.55460118512496e-05,0.00321200773937003,0.285212893841868,-0.546967028799374, -4.73829469300746e-05,0.00378867884539424,0.299827715761323,-0.578025992823467, -4.92198820079004e-05,0.00436534995141891,0.314442537680778,-0.60908495684756, -5.10568170869474e-05,0.00494202105744268,0.329057359600233,-0.640143920871654, -5.28937521658834e-05,0.00551869216346601,0.343672181519687,-0.671202884895747, -5.47306872443754e-05,0.00609536326949067,0.358287003439143,-0.702261848919841, -5.65676223228673e-05,0.00667203437551445,0.372901825358597,-0.733320812943934, -5.84045574021363e-05,0.00724870548153778,0.387516647278052,-0.764379776968028, -1.30291705836005e-05,-0.00652217453444938,0.0366255656968742,-0.0191387034144726, -1.45579484050751e-05,-0.00597795876668852,0.0508987517815769,-0.050421179290967, -1.60867262264802e-05,-0.00543374299892763,0.0651719378662797,-0.0817036551674614, -1.76155040479409e-05,-0.00488952723116676,0.0794451239509824,-0.112986131043956, -1.91442818693044e-05,-0.00434531146340589,0.0937183100356851,-0.14426860692045, -2.06730596907512e-05,-0.00380109569564491,0.107991496120388,-0.175551082796945, -2.22018375121702e-05,-0.00325687992788404,0.122264682205091,-0.206833558673439, -2.37306153336725e-05,-0.0027126641601235,0.136537868289793,-0.238116034549934, -2.52593931549527e-05,-0.00216844839236219,0.150811054374496,-0.269398510426428, -2.67881709765105e-05,-0.00162423262460143,0.165084240459199,-0.300680986302922, -2.83169487977908e-05,-0.00108001685684034,0.179357426543902,-0.331963462179417, -2.98457266190155e-05,-0.000535801089079246,0.193630612628604,-0.363245938055911, -3.13745044409064e-05,8.41467868095691e-06,0.207903798713307,-0.394528413932406, -3.29032822621311e-05,0.00055263044644227,0.22217698479801,-0.4258108898089, -3.44320600835779e-05,0.00109684621420314,0.236450170882713,-0.457093365685395, -3.59608379052467e-05,0.00164106198196357,0.250723356967415,-0.488375841561889, -3.74896157261384e-05,0.0021852777497251,0.264996543052118,-0.519658317438383, -3.90183935481403e-05,0.00272949351748553,0.279269729136821,-0.550940793314878, -4.05471713694761e-05,0.00327370928524617,0.293542915221523,-0.582223269191372, -4.20759491905898e-05,0.00381792505300815,0.307816101306227,-0.613505745067867, -4.36047270119255e-05,0.0043621408207688,0.322089287390929,-0.644788220944361, -4.51335048340384e-05,0.00490635658852812,0.336362473475631,-0.676070696820856, -4.66622826553742e-05,0.00545057235628965,0.350635659560334,-0.70735317269735, -4.81910604762659e-05,0.00599478812405119,0.364908845645038,-0.738635648573844, -4.97198382976016e-05,0.00653900389181183,0.37918203172974,-0.769918124450339, -1.1571773419268e-05,-0.00644698744831899,0.0364728765592646,-0.0193315834815309, -1.27872832081238e-05,-0.00594095685927656,0.0503640259712118,-0.0508617339066942, -1.40027929969727e-05,-0.00543492627023401,0.064255175383159,-0.0823918843318574, -1.52183027858632e-05,-0.00492889568119159,0.0781463247951061,-0.113922034757021, -1.64338125747676e-05,-0.00442286509214906,0.0920374742070534,-0.145452185182184, -1.76493223636442e-05,-0.00391683450310665,0.105928623619001,-0.176982335607347, -1.88648321524654e-05,-0.00341080391406423,0.119819773030948,-0.208512486032511, -2.0080341941342e-05,-0.00290477332502181,0.133710922442895,-0.240042636457674, -2.12958517299411e-05,-0.00239874273597895,0.147602071854842,-0.271572786882837, -2.25113615188732e-05,-0.00189271214693632,0.161493221266789,-0.303102937308, -2.37268713078054e-05,-0.00138668155789423,0.175384370678736,-0.334633087733164, -2.4942381096793e-05,-0.000880650968851926,0.189275520090683,-0.366163238158327, -2.61578908855586e-05,-0.000374620379809176,0.203166669502631,-0.39769338858349, -2.73734006746573e-05,0.000131410209233129,0.217057818914578,-0.429223539008653, -2.85889104632009e-05,0.000637440798275879,0.230948968326525,-0.460753689433817, -2.9804420252133e-05,0.00114347138731841,0.244840117738472,-0.49228383985898, -3.10199300408431e-05,0.00164950197636071,0.258731267150419,-0.523813990284143, -3.22354398297753e-05,0.00215553256540324,0.272622416562367,-0.555344140709307, -3.34509496190405e-05,0.00266156315444532,0.286513565974314,-0.58687429113447, -3.46664594077506e-05,0.00316759374348763,0.300404715386261,-0.618404441559633, -3.58819691965717e-05,0.00367362433253016,0.314295864798208,-0.649934591984797, -3.70974789849488e-05,0.00417965492157357,0.328187014210156,-0.68146474240996, -3.83129887741029e-05,0.00468568551061566,0.342078163622102,-0.712994892835123, -3.95284985629241e-05,0.00519171609965774,0.355969313034049,-0.744525043260286, -4.07440083520783e-05,0.00569774668869982,0.369860462445996,-0.77605519368545, -1.00059536845415e-05,-0.00636969301938656,0.0363093321376009,-0.019534309837596, -1.09259525469946e-05,-0.00590631936602409,0.0497950121854411,-0.0513247782909903, -1.18459514094615e-05,-0.00544294571266168,0.0632806922332813,-0.0831152467443846, -1.27659502718869e-05,-0.00497957205929911,0.0767663722811217,-0.114905715197779, -1.36859491342844e-05,-0.00451619840593664,0.0902520523289619,-0.146696183651173, -1.46059479967098e-05,-0.00405282475257407,0.103737732376802,-0.178486652104568, -1.55259468589963e-05,-0.00358945109921138,0.117223412424643,-0.210277120557962, -1.64459457215882e-05,-0.00312607744584914,0.130709092472483,-0.242067589011356, -1.7365944583958e-05,-0.00266270379248645,0.144194772520323,-0.273858057464751, -1.82859434463278e-05,-0.0021993301391241,0.157680452568163,-0.305648525918145, -1.92059423088642e-05,-0.00173595648576153,0.171166132616004,-0.337438994371539, -2.01259411712895e-05,-0.00127258283239917,0.184651812663844,-0.369229462824934, -2.10459400337148e-05,-0.000809209179036596,0.198137492711684,-0.401019931278328, -2.19659388960847e-05,-0.000345835525674243,0.211623172759524,-0.432810399731722, -2.28859377583435e-05,0.000117538127688555,0.225108852807365,-0.464600868185117, -2.38059366209908e-05,0.00058091178105113,0.238594532855205,-0.496391336638511, -2.47259354831941e-05,0.00104428543441371,0.252080212903045,-0.528181805091905, -2.56459343456195e-05,0.00150765908777606,0.265565892950885,-0.5599722735453, -2.65659332080448e-05,0.00197103274113841,0.279051572998726,-0.591762741998694, -2.74859320706922e-05,0.00243440639450099,0.292537253046566,-0.623553210452088, -2.84059309331175e-05,0.00289778004786356,0.306022933094406,-0.655343678905482, -2.93259297952098e-05,0.00336115370122636,0.319508613142247,-0.687134147358877, -3.02459286580792e-05,0.00382452735458827,0.332994293190087,-0.718924615812271, -3.11659275201714e-05,0.00428790100795151,0.346479973237928,-0.750715084265666, -3.20859263820417e-05,0.00475127466131431,0.359965653285768,-0.78250555271906, -8.41328971042804e-06,-0.00629460181127853,0.0361436069563478,-0.0197358841021053, -9.07577024131245e-06,-0.00587621167600946,0.0492221281791086,-0.0517851911993628, -9.73825077225932e-06,-0.00545782154074048,0.0623006494018693,-0.0838344982966202, -1.04007313031229e-05,-0.00503943140547136,0.0753791706246301,-0.115883805393878, -1.10632118339726e-05,-0.00462104127020224,0.0884576918473909,-0.147933112491135, -1.17256923649889e-05,-0.00420265113493334,0.101536213070152,-0.179982419588393, -1.23881728957831e-05,-0.003784260999664,0.114614734292913,-0.21203172668565, -1.30506534267161e-05,-0.00336587086439522,0.127693255515673,-0.244081033782908, -1.37131339577046e-05,-0.00294748072912598,0.140771776738434,-0.276130340880165, -1.4375614488582e-05,-0.00252909059385709,0.153850297961195,-0.308179647977422, -1.5038095019293e-05,-0.00211070045858786,0.166928819183955,-0.34022895507468, -1.57005755503925e-05,-0.00169231032331907,0.180007340406716,-0.372278262171937, -1.63630560812145e-05,-0.00127392018804984,0.193085861629477,-0.404327569269195, -1.70255366120364e-05,-0.000855530052780828,0.206164382852238,-0.436376876366452, -1.76880171428584e-05,-0.000437139917511375,0.219242904074999,-0.46842618346371, -1.83504976737359e-05,-1.87497822421445e-05,0.23232142529776,-0.500475490560967, -1.90129782047244e-05,0.000399640353026864,0.245399946520521,-0.532524797658224, -1.96754587356018e-05,0.000818030488295651,0.258478467743281,-0.564574104755482, -2.03379392664793e-05,0.00123642062356466,0.271556988966042,-0.596623411852739, -2.10004197976899e-05,0.00165481075883323,0.284635510188802,-0.628672718949997, -2.16629003289004e-05,0.00207320089410246,0.297714031411563,-0.660722026047254, -2.23253808592228e-05,0.00249159102937169,0.310792552634324,-0.692771333144512, -2.29878613902113e-05,0.00290998116464047,0.323871073857084,-0.724820640241769, -2.36503419210887e-05,0.0033283712999097,0.336949595079845,-0.756869947339027, -2.43128224518552e-05,0.00374676143517894,0.350028116302606,-0.788919254436284, -6.88102790130651e-06,-0.00622555647263549,0.0359848381938962,-0.0199255525963224, -7.33620228605958e-06,-0.00585183735802305,0.0486766125121778,-0.0522184103072765, -7.79137667081264e-06,-0.00547811824341055,0.0613683868304594,-0.0845112680182306, -8.24655105557959e-06,-0.00510439912879818,0.0740601611487409,-0.116804125729185, -8.70172544048531e-06,-0.00473068001418586,0.0867519354670224,-0.149096983440139, -9.15689982494694e-06,-0.00435696089957305,0.0994437097853041,-0.181389841151093, -9.61207420974164e-06,-0.00398324178496057,0.112135484103586,-0.213682698862047, -1.00672485945363e-05,-0.00360952267034831,0.124827258421867,-0.245975556573001, -1.05224229794421e-05,-0.00323580355573583,0.137519032740149,-0.278268414283955, -1.09775973639037e-05,-0.00286208444112312,0.15021080705843,-0.310561271994909, -1.14327717486429e-05,-0.00248836532651064,0.162902581376712,-0.342854129705864, -1.18879461337706e-05,-0.00211464621189883,0.175594355694993,-0.375146987416818, -1.23431205184543e-05,-0.00174092709728568,0.188286130013275,-0.407439845127772, -1.27982949030825e-05,-0.00136720798267342,0.200977904331557,-0.439732702838726, -1.32534692879327e-05,-0.000993488868061165,0.213669678649838,-0.47202556054968, -1.37086436725609e-05,-0.000619769753448685,0.22636145296812,-0.504318418260634, -1.41638180575221e-05,-0.000246050638836204,0.239053227286401,-0.536611275971588, -1.46189924420392e-05,0.000127668475776277,0.251745001604683,-0.568904133682543, -1.50741668264454e-05,0.000501387590389424,0.264436775922965,-0.601196991393496, -1.55293412116286e-05,0.00087510670500146,0.277128550241246,-0.633489849104451, -1.59845155963678e-05,0.0012488258196135,0.289820324559527,-0.665782706815405, -1.64396899813291e-05,0.00162254493422598,0.302512098877809,-0.698075564526359, -1.68948643654021e-05,0.00199626404883935,0.315203873196091,-0.730368422237313, -1.73500387500303e-05,0.00236998316345183,0.327895647514373,-0.762661279948267, -1.78052131355466e-05,0.00274370227806386,0.340587421832654,-0.794954137659221, -5.48380948876825e-06,-0.00616520542924962,0.035840695691782,-0.0200949746134528, -5.78409060808527e-06,-0.00583331493506042,0.0481840256868369,-0.0526053847250636, -6.08437172744392e-06,-0.00550142444087132,0.0605273556818919,-0.0851157948366744, -6.38465284680256e-06,-0.00516953394668218,0.0728706856769468,-0.117626204948285, -6.68493396607794e-06,-0.00483764345249293,0.0852140156720018,-0.150136615059896, -6.98521508551986e-06,-0.00450575295830391,0.0975573456670566,-0.182647025171507, -7.28549620487851e-06,-0.00417386246411477,0.109900675662112,-0.215157435283117, -7.58577732407062e-06,-0.00384197196992553,0.122244005657167,-0.247667845394728, -7.8860584435958e-06,-0.00351008147573639,0.134587335652221,-0.280178255506339, -8.18633956262138e-06,-0.00317819098154692,0.146930665647277,-0.31268866561795, -8.48662068242412e-06,-0.00284630048735846,0.159273995642331,-0.34519907572956, -8.78690180161623e-06,-0.0025144099931691,0.171617325637386,-0.377709485841171, -9.08718292080835e-06,-0.00218251949897974,0.183960655632441,-0.410219895952782, -9.38746404033353e-06,-0.0018506290047906,0.196303985627496,-0.442730306064393, -9.68774515963666e-06,-0.00151873851060169,0.208647315622551,-0.475240716176004, -9.98802627905082e-06,-0.00118684801641233,0.220990645617606,-0.507751126287614, -1.0288307398687e-05,-0.000854957522223643,0.233333975612661,-0.540261536399225, -1.0588588517213e-05,-0.000523067028033619,0.245677305607716,-0.572771946510836, -1.08888696364051e-05,-0.000191176533844262,0.258020635602771,-0.605282356622447, -1.11891507565964e-05,0.000140713960343763,0.270363965597825,-0.637792766734057, -1.14894318752334e-05,0.000472604454534231,0.282707295592881,-0.670303176845668, -1.17897129946476e-05,0.000804494948722922,0.295050625587936,-0.702813586957279, -1.20899941137287e-05,0.0011363854429125,0.307393955582991,-0.73532399706889, -1.23902752335869e-05,0.00146827593710119,0.319737285578046,-0.7678344071805, -1.2690556352668e-05,0.00180016643129033,0.3320806155731,-0.800344817292111, -4.27063925444865e-06,-0.0061147390656839,0.035716069660084,-0.0202394236739863, -4.46254755315234e-06,-0.0058199496928541,0.0477600945300585,-0.0529353187681507, -4.65445585189073e-06,-0.00552516032002431,0.059804119400033,-0.0856312138623151, -4.84636415046258e-06,-0.00523037094719436,0.0718481442700076,-0.11832710895648, -5.03827244932586e-06,-0.00493558157436491,0.0838921691399819,-0.151023004050644, -5.23018074807813e-06,-0.00464079220153513,0.0959361940099564,-0.183718899144808, -5.42208904669161e-06,-0.00434600282870512,0.107980218879931,-0.216414794238973, -5.61399734533286e-06,-0.00405121345587545,0.120024243749905,-0.249110689333137, -5.80590564419614e-06,-0.00375642408304577,0.13206826861988,-0.281806584427302, -5.99781394272636e-06,-0.00346163471021566,0.144112293489855,-0.314502479521466, -6.18972224153413e-06,-0.00316684533738609,0.156156318359829,-0.347198374615631, -6.38163054023089e-06,-0.00287205596455631,0.168200343229803,-0.379894269709795, -6.57353883909417e-06,-0.00257726659172652,0.180244368099778,-0.412590164803959, -6.7654471376799e-06,-0.00228247721889674,0.192288392969752,-0.445286059898124, -6.95735543632114e-06,-0.00198768784606673,0.204332417839727,-0.477981954992288, -7.14926373490687e-06,-0.00169289847323717,0.216376442709701,-0.510677850086453, -7.34117203382567e-06,-0.00139810910040739,0.228420467579676,-0.543373745180617, -7.53308033230038e-06,-0.00110331972757738,0.24046449244965,-0.576069640274782, -7.72498863088611e-06,-0.00080853035474715,0.252508517319625,-0.608765535368946, -7.91689692991593e-06,-0.00051374098191781,0.2645525421896,-0.64146143046311, -8.1088052287237e-06,-0.000218951609087803,0.276596567059574,-0.674157325557275, -8.30071352786454e-06,7.58377637408714e-05,0.288640591929548,-0.706853220651439, -8.49262182622823e-06,0.000370627136571322,0.300684616799523,-0.739549115745604, -8.68453012492498e-06,0.000665416509400885,0.312728641669497,-0.772245010839768, -8.87643842351071e-06,0.000960205882230447,0.324772666539471,-0.804940905933933, -3.26127385064101e-06,-0.00607407204136683,0.0356127777136462,-0.0203577695523877, -3.38133523655748e-06,-0.00581066736359478,0.047410060368674,-0.0532056309044808, -3.50139662258497e-06,-0.0055472626858229,0.0592073430237018,-0.0860534922565739, -3.62145800847369e-06,-0.00528385800805081,0.0710046256787297,-0.118901353608667, -3.74151939450118e-06,-0.00502045333027901,0.0828019083337574,-0.15174921496076, -3.86158078047316e-06,-0.00475704865250703,0.0945991909887852,-0.184597076312853, -3.98164216658392e-06,-0.00449364397473506,0.106396473643813,-0.217444937664946, -4.10170355236161e-06,-0.00423023929696287,0.118193756298841,-0.250292799017039, -4.22176493836135e-06,-0.00396683461919112,0.129991038953869,-0.283140660369132, -4.34182632458313e-06,-0.00370342994141937,0.141788321608896,-0.315988521721226, -4.46188771030531e-06,-0.00344002526364706,0.153585604263924,-0.348836383073319, -4.58194909613852e-06,-0.00317662058587498,0.165382886918952,-0.381684244425412, -4.70201048224927e-06,-0.00291321590810334,0.17718016957398,-0.414532105777505, -4.82207186824901e-06,-0.00264981123033148,0.188977452229008,-0.447379967129598, -4.94213325419324e-06,-0.00238640655255962,0.200774734884035,-0.480227828481691, -5.06219464035951e-06,-0.00212300187478731,0.212572017539064,-0.513075689833784, -5.18225602608169e-06,-0.00185959719701523,0.224369300194091,-0.545923551185877, -5.30231741202591e-06,-0.00159619251924314,0.236166582849119,-0.57877141253797, -5.42237879808116e-06,-0.00133278784147173,0.247963865504147,-0.611619273890063, -5.54244018413641e-06,-0.00106938316369964,0.259761148159174,-0.644467135242156, -5.66250157019166e-06,-0.000805978485928005,0.271558430814202,-0.677314996594249, -5.78256295591384e-06,-0.000542573808155922,0.28335571346923,-0.710162857946343, -5.90262434185806e-06,-0.000279169130383394,0.295152996124258,-0.743010719298436, -6.02268572802434e-06,-1.57644526121992e-05,0.306950278779285,-0.775858580650529, -6.14274711463469e-06,0.00024764022515944,0.318747561434313,-0.808706442002622, -2.45087047683751e-06,-0.00604226362942155,0.0355301195261492,-0.0204516039132621, -2.52519229645976e-06,-0.00580437669403822,0.0471307889492505,-0.0534199566325227, -2.59951411607506e-06,-0.00556648975865487,0.0587314583723518,-0.0863883093517833, -2.67383593569037e-06,-0.00532860282327163,0.070332127795453,-0.119356662071044, -2.74815775527792e-06,-0.00509071588788823,0.0819327972185543,-0.152325014790304, -2.82247957494874e-06,-0.00485282895250494,0.0935334666416556,-0.185293367509565, -2.8968013945363e-06,-0.00461494201712143,0.105134136064757,-0.218261720228826, -2.97112321406834e-06,-0.00437705508173825,0.116734805487858,-0.251230072948086, -3.04544503382242e-06,-0.00413916814635484,0.12833547491096,-0.284198425667347, -3.11976685340998e-06,-0.00390128121097155,0.139936144334061,-0.317166778386607, -3.1940886733306e-06,-0.00366339427558882,0.151536813757162,-0.350135131105868, -3.26841049264059e-06,-0.00342550734020497,0.163137483180263,-0.383103483825128, -3.34273231211712e-06,-0.00318762040482135,0.174738152603365,-0.416071836544389, -3.41705413203774e-06,-0.00294973346943861,0.186338822026466,-0.44904018926365, -3.49137595168081e-06,-0.00271184653405565,0.197939491449567,-0.48200854198291, -3.56569777093529e-06,-0.00247395959867136,0.209540160872669,-0.514976894702171, -3.64001959074489e-06,-0.00223607266328862,0.22114083029577,-0.547945247421431, -3.71434141055449e-06,-0.00199818572790567,0.232741499718871,-0.580913600140692, -3.78866322969795e-06,-0.0017602987925216,0.244342169141972,-0.613881952859953, -3.86298504917448e-06,-0.0015224118571382,0.255942838565074,-0.646850305579213, -3.93730686887306e-06,-0.00128452492175457,0.267543507988175,-0.679818658298474, -4.01162868846061e-06,-0.00104663798637139,0.279144177411276,-0.712787011017734, -4.0859505087143e-06,-0.000808751050989098,0.290744846834377,-0.745755363736995, -4.16027232774674e-06,-0.000570864115604586,0.302345516257479,-0.778723716456255, -4.23459414766736e-06,-0.00033297718022185,0.31394618568058,-0.811692069175516, -1.81862549927109e-06,-0.00601795638562291,0.0354658074895192,-0.0205240892539303, -1.86460256136611e-06,-0.00580016536697839,0.0469140059682884,-0.0535855193673919, -1.91057962349583e-06,-0.00558237434833397,0.0583622044470575,-0.0866469494808535, -1.95655668558392e-06,-0.00536458332968942,0.0698104029258267,-0.119708379594315, -2.00253374754711e-06,-0.00514679231104487,0.0812586014045958,-0.152769809707777, -2.04851080978785e-06,-0.0049290012924007,0.0927067998833647,-0.185831239821238, -2.09448787186206e-06,-0.00471121027375598,0.104154998362134,-0.2188926699347, -2.14046493379749e-06,-0.00449341925511126,0.115603196840903,-0.251954100048162, -2.18644199584395e-06,-0.00427562823646688,0.127051395319672,-0.285015530161623, -2.23241905800142e-06,-0.00405783721782238,0.138499593798441,-0.318076960275085, -2.27839612010339e-06,-0.00384004619917766,0.149947792277211,-0.351138390388546, -2.32437318237189e-06,-0.00362225518053361,0.16139599075598,-0.384199820502008, -2.3703502441963e-06,-0.00340446416188867,0.172844189234749,-0.41726125061547, -2.41632730607622e-06,-0.00318667314324395,0.184292387713518,-0.450322680728931, -2.4623043682892e-06,-0.00296888212459967,0.195740586192287,-0.483384110842393, -2.50828143033566e-06,-0.00275109110595495,0.207188784671057,-0.516445540955854, -2.55425849249313e-06,-0.00253330008731067,0.218636983149825,-0.549506971069316, -2.60023555465061e-06,-0.00231550906866618,0.230085181628595,-0.582568401182778, -2.64621261680809e-06,-0.00209771805002168,0.241533380107364,-0.615629831296239, -2.69218967896556e-06,-0.00187992703137763,0.252981578586132,-0.648691261409701, -2.73816674101202e-06,-0.00166213601273357,0.264429777064901,-0.681752691523162, -2.78414380283643e-06,-0.00144434499408774,0.275877975543671,-0.714814121636624, -2.83012086488288e-06,-0.00122655397544325,0.28732617402244,-0.747875551750085, -2.87609792704036e-06,-0.00100876295679919,0.298774372501209,-0.780936981863547, -2.92207498908681e-06,-0.00079097193815425,0.310222570979979,-0.813998411977009, -1.33633359245683e-06,-0.00599970816774084,0.0354168541279304,-0.0205789634026486, -1.36499175208693e-06,-0.00579735326426706,0.0467492838428647,-0.0537108566294048, -1.39364991171009e-06,-0.00559499836079336,0.0580817135577988,-0.086842749856161, -1.42230807126387e-06,-0.00539264345731943,0.0694141432727331,-0.119974643082917, -1.45096623083152e-06,-0.00519028855384562,0.0807465729876673,-0.153106536309673, -1.47962439062121e-06,-0.00498793365037198,0.0920790027026015,-0.186238429536429, -1.50828255024438e-06,-0.00478557874689822,0.103411432417536,-0.219370322763186, -1.53694070975652e-06,-0.00458322384342436,0.11474386213247,-0.252502215989942, -1.56559886943519e-06,-0.00438086893995082,0.126076291847404,-0.285634109216698, -1.59425702916938e-06,-0.00417851403647718,0.137408721562338,-0.318766002443454, -1.62291518851498e-06,-0.00397615913300275,0.148741151277273,-0.35189789567021, -1.65157334813815e-06,-0.003773804229529,0.160073580992207,-0.385029788896967, -1.68023150809438e-06,-0.00357144932605591,0.171406010707141,-0.418161682123723, -1.70888966771754e-06,-0.00336909442258215,0.182738440422075,-0.451293575350479, -1.73754782695212e-06,-0.00316673951910751,0.19407087013701,-0.484425468577235, -1.76620598690835e-06,-0.00296438461563442,0.205403299851943,-0.517557361803991, -1.79486414642049e-06,-0.00276202971216022,0.216735729566878,-0.550689255030747, -1.82352230582161e-06,-0.00255967480868646,0.228068159281812,-0.583821148257504, -1.85218046566682e-06,-0.00235731990521293,0.239400588996746,-0.61695304148426, -1.88083862528998e-06,-0.0021549650017394,0.25073301871168,-0.650084934711016, -1.90949678435803e-06,-0.00195261009826453,0.262065448426615,-0.683216827937772, -1.93815494420324e-06,-0.001750255194791,0.273397878141549,-0.716348721164528, -1.96681310438152e-06,-0.00154790029131835,0.284730307856482,-0.749480614391284, -1.99547126378263e-06,-0.00134554538784393,0.296062737571417,-0.78261250761804, -2.02412942296171e-06,-0.00114319048436951,0.307395167286352,-0.815744400844796, -9.74699892214437e-07,-0.00598618968932808,0.0353802086763759,-0.0206198733992233, -9.92805531535579e-07,-0.00579546775011153,0.0466261379683687,-0.053804298570271, -1.01091117085672e-06,-0.00560474581089498,0.0578720672603616,-0.0869887237413188, -1.02901681015011e-06,-0.00541402387167855,0.0691179965523542,-0.120173148912367, -1.04712244972105e-06,-0.00522330193246223,0.0803639258443471,-0.153357574083414, -1.06522808898668e-06,-0.00503257999324558,0.09160985513634,-0.186541999254462, -1.08333372811353e-06,-0.00484185805402892,0.102855784428333,-0.21972642442551, -1.1014393675457e-06,-0.00465113611481238,0.114101713720326,-0.252910849596558, -1.11954500703337e-06,-0.00446041417559606,0.125347643012318,-0.286095274767605, -1.13765064613247e-06,-0.00426969223637919,0.136593572304311,-0.319279699938653, -1.15575628562015e-06,-0.00407897029716286,0.147839501596304,-0.352464125109701, -1.17386192505231e-06,-0.00388824835794654,0.159085430888297,-0.385648550280748, -1.19196756442896e-06,-0.00369752641873,0.17033136018029,-0.418832975451796, -1.21007320358357e-06,-0.00350680447951301,0.181577289472283,-0.452017400622844, -1.22817884296023e-06,-0.00331608254029714,0.192823218764275,-0.485201825793892, -1.24628448239239e-06,-0.0031253606010806,0.204069148056268,-0.518386250964939, -1.26439012182455e-06,-0.00293463866186405,0.215315077348261,-0.551570676135987, -1.28249576081263e-06,-0.00274391672264684,0.226561006640254,-0.584755101307035, -1.30060140013377e-06,-0.00255319478343052,0.237806935932247,-0.617939526478083, -1.31870703978798e-06,-0.0023624728442142,0.249052865224239,-0.65112395164913, -1.3368126789981e-06,-0.00217175090499744,0.260298794516233,-0.684308376820178, -1.35491831887435e-06,-0.00198102896578201,0.271544723808225,-0.717492801991226, -1.37302395775141e-06,-0.0017903070265648,0.282790653100218,-0.750677227162274, -1.39112959696153e-06,-0.00159958508734803,0.294036582392211,-0.783861652333322, -1.40923523650471e-06,-0.00140886314813216,0.305282511684203,-0.817046077504369, -7.07019120936569e-07,-0.00597627311205831,0.0353531178182547,-0.020650025616694, -7.18653093340071e-07,-0.00579419347460122,0.046535188019078,-0.0538731688210115, -7.30287065708879e-07,-0.00561211383714416,0.0577172582199012,-0.087096312025329, -7.41921038188709e-07,-0.00543003419968724,0.0688993284207244,-0.120319455229646, -7.53555010474249e-07,-0.00524795456223004,0.0800813986215478,-0.153542598433964, -7.65188982898568e-07,-0.00506587492477284,0.0912634688223712,-0.186765741638281, -7.76822955184109e-07,-0.00488379528731564,0.102445539023195,-0.219988884842599, -7.88456927747205e-07,-0.004701715649859,0.113627609224017,-0.253212028046916, -8.00090900254791e-07,-0.00451963601240191,0.124809679424841,-0.286435171251234, -8.11724872318287e-07,-0.00433755637494437,0.135991749625664,-0.319658314455551, -8.23358844936894e-07,-0.00415547673748762,0.147173819826487,-0.352881457659869, -8.34992817166924e-07,-0.0039733971000302,0.158355890027311,-0.386104600864186, -8.46626789563487e-07,-0.00379131746257366,0.169537960228134,-0.419327744068504, -8.5826076196005e-07,-0.00360923782511624,0.180720030428957,-0.452550887272821, -8.69894734578658e-07,-0.00342715818765971,0.19190210062978,-0.485774030477138, -8.81528706586643e-07,-0.00324507855020184,0.203084170830604,-0.518997173681456, -8.93162679482806e-07,-0.00306299891274575,0.214266241031427,-0.552220316885773, -9.04796651823858e-07,-0.00288091927528811,0.225448311232251,-0.585443460090091, -9.1643062416491e-07,-0.00269883963783113,0.236630381433074,-0.618666603294408, -9.28064596728007e-07,-0.0025167600003746,0.247812451633897,-0.651889746498726, -9.39698568624969e-07,-0.00233468036291651,0.25899452183472,-0.685112889703043, -9.51332541521133e-07,-0.00215260072546064,0.270176592035543,-0.718336032907361, -9.62966513307073e-07,-0.00197052108800255,0.281358662236367,-0.751559176111678, -9.7460048587017e-07,-0.00178844145054535,0.29254073243719,-0.784782319315996, -9.86234458433266e-07,-0.0016063618130886,0.303722802638013,-0.818005462520313, -5.10771194582593e-07,-0.00596905098598514,0.0353332749568421,-0.0206720619399733, -5.18382780284599e-07,-0.00579332416002917,0.0464686182828356,-0.0539235016733503, -5.25994366035176e-07,-0.00561759733407313,0.0576039616088292,-0.0871749414067273, -5.33605951730243e-07,-0.00544187050811712,0.0687393049348227,-0.120426381140104, -5.41217537508576e-07,-0.00526614368216127,0.0798746482608161,-0.153677820873481, -5.48829123175887e-07,-0.00509041685620526,0.0910099915868096,-0.186929260606858, -5.56440708843198e-07,-0.00491469003024925,0.102145334912803,-0.220180700340235, -5.64052294704798e-07,-0.00473896320429334,0.113280678238797,-0.253432140073612, -5.71663880344353e-07,-0.00456323637833722,0.12441602156479,-0.286683579806989, -5.79275466372486e-07,-0.00438750955238154,0.135551364890784,-0.319935019540366, -5.86887051956531e-07,-0.00421178272642542,0.146686708216777,-0.353186459273743, -5.94498637762619e-07,-0.00403605590046952,0.157822051542771,-0.38643789900712, -6.02110223402175e-07,-0.00386032907451361,0.168957394868764,-0.419689338740497, -6.09721808986219e-07,-0.00368460224855727,0.180092738194758,-0.452940778473874, -6.17333395069863e-07,-0.00350887542260159,0.191228081520751,-0.486192218207251, -6.24944980653908e-07,-0.00333314859664569,0.202363424846745,-0.519443657940628, -6.32556566015907e-07,-0.00315742177068934,0.213498768172738,-0.552695097674005, -6.40168151933018e-07,-0.00298169494473344,0.224634111498732,-0.585946537407382, -6.47779737850129e-07,-0.00280596811877798,0.235769454824725,-0.619197977140759, -6.55391323656218e-07,-0.00263024129282163,0.246904798150719,-0.652449416874136, -6.6300290912924e-07,-0.00245451446686529,0.258040141476712,-0.685700856607513, -6.70614495046351e-07,-0.00227878764090983,0.269175484802705,-0.71895229634089, -6.78226080741418e-07,-0.00210306081495348,0.280310828128699,-0.752203736074267, -6.85837666991596e-07,-0.00192733398899891,0.291446171454692,-0.785455175807644, -6.93449252020528e-07,-0.00175160716304168,0.302581514780686,-0.818706615541021, -2.3594827396542e-05,-0.00705454434582081,0.0486493044125134,-0.0315387942280043, -2.68564869033844e-05,-0.00637817687214226,0.064317667428829,-0.0610266075605757, -3.01181464102129e-05,-0.0057018093984636,0.0799860304451446,-0.0905144208931471, -3.33798059170554e-05,-0.00502544192478505,0.0956543934614602,-0.120002234225719, -3.66414654238423e-05,-0.00434907445110644,0.111322756477776,-0.14949004755829, -3.99031249307125e-05,-0.00367270697742805,0.126991119494091,-0.178977860890861, -4.31647844377214e-05,-0.00299633950374956,0.142659482510407,-0.208465674223433, -4.64264439441475e-05,-0.00231997203007028,0.158327845526723,-0.237953487556004, -4.96881034511287e-05,-0.00164360455639201,0.173996208543038,-0.267441300888576, -5.29497629578324e-05,-0.000967237082713179,0.189664571559354,-0.296929114221147, -5.62114224648136e-05,-0.000290869609034905,0.205332934575669,-0.326416927553718, -5.94730819714617e-05,0.000385497864644035,0.221001297591985,-0.35590474088629, -6.27347414784429e-05,0.00106186533832275,0.236669660608301,-0.385392554218861, -6.59964009854797e-05,0.00173823281200103,0.252338023624616,-0.414880367551433, -6.92580604920723e-05,0.0024146002856793,0.268006386640931,-0.444368180884004, -7.2519719998887e-05,0.00309096775935847,0.283674749657248,-0.473855994216575, -7.57813795057016e-05,0.00376733523303674,0.299343112673563,-0.503343807549147, -7.90430390124053e-05,0.00444370270671568,0.315011475689879,-0.532831620881718, -8.2304698519664e-05,0.00512007018039395,0.330679838706194,-0.562319434214289, -8.55663580264787e-05,0.00579643765407201,0.346348201722509,-0.591807247546861, -8.88280175330713e-05,0.00647280512775117,0.362016564738825,-0.621295060879432, -9.20896770408852e-05,0.00714917260142833,0.37768492775514,-0.650782874212004, -9.53513365472558e-05,0.00782554007510772,0.393353290771456,-0.680270687544575, -9.86129960536264e-05,0.0085019075487871,0.409021653787772,-0.709758500877147, -0.000101874655560996,0.00917827502246471,0.424690016804087,-0.739246314209718, -2.34812631053904e-05,-0.00704650783120872,0.0486309746561106,-0.0315599217145, -2.67125954673958e-05,-0.00637192841193729,0.0642744317962176,-0.0610647100786468, -2.99439278295122e-05,-0.005697348992666,0.0799178889363246,-0.0905694984427936, -3.31752601916702e-05,-0.00502276957339476,0.0955613460764316,-0.12007428680694, -3.64065925536339e-05,-0.00434819015412335,0.111204803216539,-0.149579075171087, -3.96379249158196e-05,-0.00367361073485217,0.126848260356646,-0.179083863535234, -4.28692572778666e-05,-0.00299903131558077,0.142491717496753,-0.208588651899381, -4.61005896399969e-05,-0.00232445189630948,0.15813517463686,-0.238093440263528, -4.93319220020161e-05,-0.00164987247703818,0.173778631776967,-0.267598228627674, -5.25632543642574e-05,-0.000975293057767113,0.189422088917073,-0.297103016991821, -5.57945867262211e-05,-0.000300713638495598,0.20506554605718,-0.326607805355968, -5.90259190882958e-05,0.000373865780775695,0.220709003197287,-0.356112593720115, -6.2257251450315e-05,0.00104844520004699,0.236352460337394,-0.385617382084262, -6.54885838127783e-05,0.00172302461931828,0.251995917477501,-0.415122170448408, -6.8719916174742e-05,0.00239760403858935,0.267639374617608,-0.444626958812555, -7.19512485368723e-05,0.00307218345786087,0.283282831757715,-0.474131747176702, -7.51825808991136e-05,0.00374676287713172,0.298926288897822,-0.503636535540849, -7.84139132605777e-05,0.0044213422964039,0.314569746037929,-0.533141323904996, -8.1645245623152e-05,0.0050959217156743,0.330213203178036,-0.562646112269143, -8.48765779852823e-05,0.00577050113494537,0.345856660318143,-0.592150900633289, -8.81079103470794e-05,0.00644508055421777,0.36150011745825,-0.621655688997436, -9.13392427094317e-05,0.00711965997348862,0.377143574598357,-0.651160477361583, -9.45705750711179e-05,0.00779423939276036,0.392787031738464,-0.68066526572573, -9.78019074331371e-05,0.00846881881203165,0.408430488878571,-0.710170054089877, -0.000101033239795378,0.00914339823130295,0.424073946018678,-0.739674842454023, -2.33242024943875e-05,-0.00703542873146884,0.0486056233416017,-0.0315891012240339, -2.65138259760017e-05,-0.00636333698488284,0.0642146538181516,-0.0611173340758056, -2.9703449457491e-05,-0.00569124523829678,0.0798236842947014,-0.0906455669275773, -3.28930729389665e-05,-0.00501915349171067,0.0954327147712512,-0.120173799779349, -3.6082696420553e-05,-0.00434706174512456,0.111041745247801,-0.149702032631121, -3.92723199020839e-05,-0.00367496999853845,0.126650775724351,-0.179230265482893, -4.24619433836981e-05,-0.00300287825195245,0.142259806200901,-0.208758498334664, -4.56515668652568e-05,-0.00233078650536656,0.157868836677451,-0.238286731186436, -4.88411903468156e-05,-0.00165869475878044,0.173477867154,-0.267814964038208, -5.20308138280967e-05,-0.000986603012194109,0.18908689763055,-0.29734319688998, -5.52204373099885e-05,-0.000314511265608441,0.2046959281071,-0.326871429741751, -5.84100607911031e-05,0.000357580480977893,0.22030495858365,-0.356399662593523, -6.15996842726618e-05,0.001029672227564,0.2359139890602,-0.385927895445295, -6.47893077543316e-05,0.00170176397414989,0.251523019536749,-0.415456128297067, -6.79789312355572e-05,0.00237385572073623,0.267132050013299,-0.444984361148838, -7.11685547172269e-05,0.00304594746732256,0.282741080489849,-0.47451259400061, -7.43581781992297e-05,0.00371803921390756,0.298350110966399,-0.504040826852382, -7.75478016801223e-05,0.00439013096049479,0.313959141442949,-0.533569059704153, -8.07374251622361e-05,0.00506222270707957,0.329568171919498,-0.563097292555925, -8.39270486433508e-05,0.00573431445366679,0.345177202396049,-0.592625525407697, -8.71166721247985e-05,0.00640640620025268,0.360786232872598,-0.622153758259469, -9.03062956064682e-05,0.00707849794683879,0.376395263349148,-0.65168199111124, -9.34959190880269e-05,0.00775058969342446,0.392004293825698,-0.681210223963012, -9.66855425695856e-05,0.00842268144001057,0.407613324302248,-0.710738456814784, -9.98751660515884e-05,0.00909477318659624,0.423222354778797,-0.740266689666556, -2.31079586765909e-05,-0.0070202419677704,0.0485707173301202,-0.0316292002757349, -2.62406007479898e-05,-0.00635160320840189,0.0641323835871722,-0.0611896510001301, -2.93732428194304e-05,-0.00568296444903343,0.0796940498442241,-0.0907501017245252, -3.25058848908155e-05,-0.00501432568966498,0.095255716101276,-0.12031055244892, -3.56385269622006e-05,-0.00434568693029658,0.110817382358328,-0.149871003173316, -3.87711690336134e-05,-0.00367704817092807,0.12637904861538,-0.179431453897711, -4.19038111050818e-05,-0.00300840941155966,0.141940714872432,-0.208991904622106, -4.50364531765501e-05,-0.00233977065219126,0.157502381129484,-0.238552355346501, -4.81690952476854e-05,-0.00167113189282242,0.173064047386536,-0.268112806070896, -5.13017373190428e-05,-0.0010024931334538,0.188625713643588,-0.297673256795292, -5.44343793907331e-05,-0.000333854374085396,0.20418737990064,-0.327233707519687, -5.7567021462035e-05,0.000334784385282783,0.219749046157691,-0.356794158244082, -6.06996635333368e-05,0.00100342314465141,0.235310712414743,-0.386354608968477, -6.38323056050272e-05,0.00167206190401981,0.250872378671795,-0.415915059692872, -6.6964947676218e-05,0.00234070066338865,0.266434044928848,-0.445475510417267, -7.00975897474088e-05,0.00300933942275705,0.281995711185899,-0.475035961141662, -7.32302318189326e-05,0.00367797818212545,0.297557377442951,-0.504596411866058, -7.63628738903455e-05,0.00434661694149385,0.313119043700003,-0.534156862590453, -7.94955159619803e-05,0.00501525570086181,0.328680709957055,-0.563717313314848, -8.26281580331711e-05,0.00568389446023065,0.344242376214107,-0.593277764039243, -8.57608001043619e-05,0.00635253321959972,0.359804042471159,-0.622838214763638, -8.88934421763299e-05,0.00702117197896701,0.37536570872821,-0.652398665488033, -9.20260842477427e-05,0.00768981073833608,0.390927374985263,-0.681959116212428, -9.51587263186005e-05,0.0083584494977047,0.406489041242314,-0.711519566936824, -9.82913683905684e-05,0.00902708825707288,0.422050707499366,-0.741080017661219, -2.28120629598982e-05,-0.00699958663889538,0.0485229508093914,-0.0316839277490385, -2.58675684358667e-05,-0.00633572478445732,0.0640198723657723,-0.0612883496570178, -2.89230739119184e-05,-0.00567186293001926,0.0795167939221532,-0.090892771564997, -3.19785793877758e-05,-0.00500800107558119,0.095013715478534,-0.120497193472976, -3.50340848636888e-05,-0.00434413922114296,0.110510637034915,-0.150101615380956, -3.80895903398237e-05,-0.00368027736670518,0.126007558591296,-0.179706037288935, -4.11450958155424e-05,-0.00301641551226661,0.141504480147677,-0.209310459196914, -4.42006012915663e-05,-0.00235255365782872,0.157001401704058,-0.238914881104894, -4.72561067673682e-05,-0.00168869180339037,0.172498323260439,-0.268519303012873, -5.03116122435587e-05,-0.00102482994895259,0.18799524481682,-0.298123724920852, -5.33671177194717e-05,-0.000360968094514469,0.2034921663732,-0.327728146828831, -5.64226231957732e-05,0.000302893759923206,0.218989087929581,-0.357332568736811, -5.94781286712975e-05,0.000966755614361547,0.234486009485962,-0.38693699064479, -6.25336341470439e-05,0.00163061746880033,0.249982931042344,-0.416541412552769, -6.55891396231789e-05,0.00229447932323823,0.265479852598724,-0.446145834460749, -6.86446450990363e-05,0.00295834117767635,0.280976774155105,-0.475750256368728, -7.17001505750048e-05,0.00362220303211402,0.296473695711486,-0.505354678276707, -7.47556560505291e-05,0.00428606488655325,0.311970617267867,-0.534959100184686, -7.78111615270527e-05,0.0049499267409896,0.327467538824247,-0.564563522092666, -8.08666670026881e-05,0.00561378859542883,0.342964460380629,-0.594167944000645, -8.39221724785455e-05,0.00627765044986672,0.358461381937009,-0.623772365908625, -8.6977677954736e-05,0.00694151230430462,0.37395830349339,-0.653376787816603, -9.00331834308155e-05,0.00760537415874252,0.389455225049771,-0.682981209724583, -9.30886889062288e-05,0.00826923601318086,0.404952146606152,-0.712585631632562, -9.61441943824193e-05,0.0089330978676192,0.420449068162533,-0.742190053540541, -2.24105788531326e-05,-0.006971790591252,0.0484581343463593,-0.031757923720823, -2.5362961627709e-05,-0.00631450546007623,0.0638673292162421,-0.0614217982266187, -2.83153444023687e-05,-0.00565722032890054,0.079276524086125,-0.0910856727324144, -3.12677271770423e-05,-0.00499993519772485,0.0946857189560079,-0.12074954723821, -3.42201099516048e-05,-0.0043426500665491,0.110094913825891,-0.150413421744006, -3.71724927262507e-05,-0.00368536493537353,0.125504108695773,-0.180077296249801, -4.01248755009243e-05,-0.00302807980419784,0.140913303565656,-0.209741170755597, -4.30772582755701e-05,-0.00237079467302193,0.156322498435539,-0.239405045261393, -4.60296410502159e-05,-0.00171350954184635,0.171731693305422,-0.269068919767189, -4.89820238249727e-05,-0.00105622441067066,0.187140888175305,-0.298732794272984, -5.1934406599341e-05,-0.000398939279494748,0.202550083045188,-0.32839666877878, -5.48867893742644e-05,0.000258345851680497,0.217959277915071,-0.358060543284576, -5.78391721481886e-05,0.000915630982857296,0.233368472784954,-0.387724417790371, -6.07915549233895e-05,0.0015729161140321,0.248777667654836,-0.417388292296167, -6.37439376979243e-05,0.00223020124520801,0.264186862524719,-0.447052166801963, -6.66963204726256e-05,0.0028874863763837,0.279596057394602,-0.476716041307758, -6.96487032471049e-05,0.00354477150755916,0.295005252264485,-0.506379915813554, -7.26010860216952e-05,0.00420205663873552,0.310414447134368,-0.53604379031935, -7.55534687965076e-05,0.00485934176991054,0.32582364200425,-0.565707664825145, -7.85058515710979e-05,0.00551662690108645,0.341232836874134,-0.595371539330941, -8.14582343454662e-05,0.00617391203226303,0.356642031744017,-0.625035413836737, -8.44106171206116e-05,0.00683119716343805,0.3720512266139,-0.654699288342532, -8.73629998947578e-05,0.00748848229461441,0.387460421483782,-0.684363162848328, -9.03153826692371e-05,0.00814576742578987,0.402869616353665,-0.714027037354124, -9.32677654439384e-05,0.00880305255696578,0.418278811223548,-0.74369091185992, -2.18720218072843e-05,-0.00693491643490615,0.048371182282186,-0.0318567150175, -2.46888569472026e-05,-0.00628662334124291,0.0636629196819949,-0.061599964103931, -2.75056920869543e-05,-0.00563833024757943,0.0789546570818039,-0.0913432131903619, -3.03225272269003e-05,-0.00499003715391622,0.0942463944816127,-0.121086462276793, -3.31393623668741e-05,-0.00434174406025301,0.109538131881422,-0.150829711363224, -3.59561975066258e-05,-0.00369345096658957,0.124829869281231,-0.180572960449655, -3.87730326464886e-05,-0.00304515787292625,0.140121606681039,-0.210316209536086, -4.15898677863513e-05,-0.00239686477926304,0.155413344080848,-0.240059458622517, -4.44067029262141e-05,-0.00174857168559961,0.170705081480657,-0.269802707708948, -4.72235380659103e-05,-0.00110027859193629,0.185996818880466,-0.299545956795379, -5.0040373205773e-05,-0.000451985498272744,0.201288556280275,-0.32928920588181, -5.28572083459689e-05,0.000196307595390133,0.216580293680084,-0.35903245496824, -5.56740434858316e-05,0.000844600689053454,0.231872031079893,-0.388775704054671, -5.84908786257499e-05,0.00149289378271678,0.247163768479702,-0.418518953141103, -6.1307713765113e-05,0.00214118687638054,0.262455505879511,-0.448262202227533, -6.41245489049203e-05,0.00278947997004364,0.277747243279319,-0.478005451313964, -6.69413840450606e-05,0.00343777306370718,0.293038980679128,-0.507748700400395, -6.97582191853119e-05,0.00408606615736962,0.308330718078937,-0.537491949486826, -7.25750543248971e-05,0.00473435925103383,0.323622455478746,-0.567235198573257, -7.53918894643713e-05,0.00538265234469737,0.338914192878555,-0.596978447659688, -7.82087246042895e-05,0.00603094543836047,0.354205930278364,-0.626721696746119, -8.10255597444298e-05,0.00667923853202401,0.369497667678173,-0.65646494583255, -8.38423948844591e-05,0.00732753162568622,0.384789405077981,-0.686208194918981, -8.66592300241553e-05,0.00797582471934977,0.40008114247779,-0.715951444005412, -8.94760651637405e-05,0.00862411781301375,0.415372879877599,-0.745694693091843, -2.11605704003165e-05,-0.00688691882449444,0.0482563103433187,-0.0319864067548445, -2.38032287121076e-05,-0.00625079780245241,0.0633932707791616,-0.0618338576040809, -2.64458870239959e-05,-0.00561467678041044,0.0785302312150046,-0.0916813084533172, -2.90885453357592e-05,-0.00497855575836831,0.0936671916508476,-0.121528759302554, -3.17312036477446e-05,-0.00434243473632645,0.108804152086691,-0.15137621015179, -3.43738619594247e-05,-0.0037063137142842,0.123941112522534,-0.181223661001026, -3.70165202714379e-05,-0.00307019269224251,0.139078072958376,-0.211071111850263, -3.96591785830069e-05,-0.00243407167019993,0.15421503339422,-0.240918562699499, -4.2301836894687e-05,-0.00179795064815769,0.169351993830063,-0.270766013548735, -4.49444952065892e-05,-0.001161829626116,0.184488954265906,-0.300613464397972, -4.75871535181582e-05,-0.000525708604073527,0.199625914701749,-0.330460915247208, -5.02298118300604e-05,0.000110412417968719,0.214762875137592,-0.360308366096445, -5.28724701421845e-05,0.000746533440010078,0.229899835573435,-0.390155816945681, -5.55151284538091e-05,0.00138265446205232,0.245036796009278,-0.420003267794917, -5.81577867655447e-05,0.00201877548409479,0.260173756445121,-0.449850718644154, -6.08004450773914e-05,0.00265489650613682,0.275310716880964,-0.47969816949339, -6.3443103389238e-05,0.00329101752817884,0.290447677316807,-0.509545620342626, -6.60857617013066e-05,0.00392713855022042,0.30558463775265,-0.539393071191863, -6.87284200131533e-05,0.00456325957226245,0.320721598188493,-0.569240522041099, -7.13710783248889e-05,0.00519938059430447,0.335858558624336,-0.599087972890335, -7.40137366366245e-05,0.00583550161634649,0.350995519060179,-0.628935423739572, -7.66563949483601e-05,0.00647162263838874,0.366132479496021,-0.658782874588808, -7.92990532606508e-05,0.00710774366043054,0.381269439931865,-0.688630325438044, -8.19417115720533e-05,0.00774386468247323,0.396406400367708,-0.718477776287281, -8.45843698838999e-05,0.00837998570451504,0.411543360803551,-0.748325227136517, -2.02394967061814e-05,-0.00682596698169216,0.0481075954312107,-0.0321529493709036, -2.26649154918684e-05,-0.00620608901611291,0.0630448336788449,-0.0621342100875296, -2.50903342774722e-05,-0.00558621105053364,0.0779820719264791,-0.0921154708041555, -2.75157530631731e-05,-0.00496633308495431,0.0929193101741135,-0.122096731520781, -2.99411718487907e-05,-0.00434645511937515,0.107856548421748,-0.152077992237407, -3.23665906344639e-05,-0.00372657715379576,0.122793786669382,-0.182059252954033, -3.47920094202481e-05,-0.00310669918821671,0.137731024917016,-0.212040513670659, -3.72174282060045e-05,-0.00248682122263744,0.15266826316465,-0.242021774387285, -3.96428469915389e-05,-0.00186694325705816,0.167605501412285,-0.272003035103911, -4.20682657774063e-05,-0.00124706529147911,0.182542739659919,-0.301984295820537, -4.44936845627186e-05,-0.000627187325899392,0.197479977907553,-0.331965556537163, -4.69191033486416e-05,-7.30936032056206e-06,0.212417216155187,-0.361946817253789, -4.9344522134287e-05,0.000612568605259156,0.227354454402822,-0.391928077970415, -5.17699409202099e-05,0.00123244657083754,0.242291692650455,-0.421909338687041, -5.41953597058553e-05,0.00185232453641726,0.25722893089809,-0.451890599403667, -5.66207784917783e-05,0.00247220250199587,0.272166169145724,-0.481871860120293, -5.90461972770351e-05,0.00309208046757603,0.287103407393359,-0.511853120836919, -6.1471616062625e-05,0.0037119584331553,0.302040645640993,-0.541834381553544, -6.38970348481038e-05,0.00433183639873458,0.316977883888627,-0.57181564227017, -6.63224536343598e-05,0.00495171436431319,0.331915122136261,-0.601796902986796, -6.87478724200608e-05,0.00557159232989202,0.346852360383895,-0.631778163703422, -7.11732912055396e-05,0.00619147029547173,0.361789598631529,-0.661759424420048, -7.35987099907964e-05,0.0068113482610519,0.376726836879164,-0.691740685136674, -7.60241287766084e-05,0.00743122622663073,0.391664075126798,-0.7217219458533, -7.84495475628644e-05,0.00805110419220867,0.406601313374432,-0.751703206569926, -1.90777036821049e-05,-0.0067509566582728,0.0479200436444593,-0.0323608586104601, -2.12423877882506e-05,-0.00615232382186409,0.0626064265192182,-0.0625091655068113, -2.34070718945212e-05,-0.00555369098545533,0.0772928093939773,-0.0926574724031625, -2.55717560007362e-05,-0.00495505814904668,0.0919791922687362,-0.122805779299514, -2.77364401069513e-05,-0.00435642531263802,0.106665575143495,-0.152954086195865, -2.99011242132496e-05,-0.00375779247622932,0.121351958018254,-0.183102393092216, -3.2065808319437e-05,-0.00315915963982061,0.136038340893013,-0.213250699988567, -3.42304924255132e-05,-0.00256052680341168,0.150724723767772,-0.243399006884918, -3.63951765317561e-05,-0.00196189396700297,0.165411106642531,-0.27354731378127, -3.85598606380544e-05,-0.00136326113059471,0.18009748951729,-0.303695620677621, -4.07245447440752e-05,-0.000764628294185554,0.194783872392049,-0.333843927573972, -4.2889228850318e-05,-0.000165995457776846,0.209470255266808,-0.363992234470323, -4.50539129565053e-05,0.000432637378632084,0.224156638141567,-0.394140541366674, -4.72185970629146e-05,0.00103127021504035,0.238843021016326,-0.424288848263025, -4.9383281169324e-05,0.00162990305144883,0.253529403891085,-0.454437155159377, -5.15479652752893e-05,0.00222853588785799,0.268215786765844,-0.484585462055728, -5.37126493814766e-05,0.00282716872426625,0.282902169640602,-0.514733768952079, -5.58773334877749e-05,0.0034258015606754,0.297588552515362,-0.54488207584843, -5.80420175938512e-05,0.00402443439708411,0.312274935390121,-0.575030382744781, -6.02067017001495e-05,0.00462306723349304,0.32696131826488,-0.605178689641132, -6.23713858056707e-05,0.00522170006990219,0.341647701139639,-0.635326996537484, -6.45360699130793e-05,0.00582033290630912,0.356334084014397,-0.665475303433835, -6.67007540189335e-05,0.00641896574271872,0.371020466889157,-0.695623610330186, -6.88654381252318e-05,0.00701759857912743,0.385706849763916,-0.725771917226537, -7.10301222313081e-05,0.00761623141553613,0.400393232638675,-0.755920224122888, -1.76595017411796e-05,-0.00666214638203028,0.0476911883195031,-0.0326114488374637, -1.95259739344811e-05,-0.00609055012260873,0.0620729675499896,-0.0629610942610814, -2.13924461277548e-05,-0.00551895386318724,0.076454746780476,-0.0933107396846991, -2.32589183211673e-05,-0.00494735760376575,0.0908365260109626,-0.123660385108317, -2.51253905145243e-05,-0.00437576134434436,0.105218305241449,-0.154010030531935, -2.69918627076871e-05,-0.00380416508492265,0.119600084471935,-0.184359675955552, -2.88583349011273e-05,-0.00323256882550116,0.133981863702422,-0.21470932137917, -3.07248070943178e-05,-0.00266097256607967,0.148363642932908,-0.245058966802788, -3.25912792878413e-05,-0.0020893763066584,0.162745422163395,-0.275408612226406, -3.44577514810318e-05,-0.00151778004723657,0.177127201393881,-0.305758257650023, -3.63242236744443e-05,-0.000946183787815302,0.191508980624368,-0.336107903073641, -3.81906958676903e-05,-0.000374587528393588,0.205890759854854,-0.366457548497259, -4.00571680611583e-05,0.000197008731027681,0.220272539085341,-0.396807193920877, -4.19236402542378e-05,0.000768604990449395,0.234654318315827,-0.427156839344494, -4.37901124479279e-05,0.00134020124987067,0.249036097546314,-0.457506484768112, -4.56565846410628e-05,0.00191179750929238,0.2634178767768,-0.48785613019173, -4.75230568347529e-05,0.00248339376871365,0.277799656007287,-0.518205775615347, -4.93895290277768e-05,0.00305499002813536,0.292181435237773,-0.548555421038965, -5.12560012206897e-05,0.0036265862875573,0.30656321446826,-0.578905066462583, -5.31224734140467e-05,0.00419818254697879,0.320944993698746,-0.609254711886201, -5.49889456074037e-05,0.00476977880640028,0.335326772929233,-0.639604357309818, -5.68554178010938e-05,0.00534137506582155,0.349708552159719,-0.669954002733436, -5.87218899936737e-05,0.00591297132524371,0.364090331390206,-0.700303648157054, -6.05883621879189e-05,0.00648456758466409,0.378472110620692,-0.730653293580672, -6.24548343816089e-05,0.00705616384408536,0.392853889851178,-0.761002939004289, -1.59959192743281e-05,-0.00656170866354217,0.0474229351147055,-0.0329010027005708, -1.75406844489939e-05,-0.00602330309650645,0.0614496844725409,-0.0634832922662185, -1.90854496235904e-05,-0.00548489752947057,0.0754764338303764,-0.0940655818318661, -2.06302147984505e-05,-0.00494649196243513,0.0895031831882117,-0.124647871397514, -2.21749799729221e-05,-0.00440808639539914,0.103529932546047,-0.155230160963162, -2.37197451475601e-05,-0.00386968082836325,0.117556681903883,-0.185812450528809, -2.52645103224758e-05,-0.0033312752613277,0.131583431261718,-0.216394740094457, -2.68092754970861e-05,-0.00279286969429227,0.145610180619553,-0.246977029660105, -2.83540406713634e-05,-0.00225446412725583,0.159636929977389,-0.277559319225752, -2.98988058461402e-05,-0.00171605856022028,0.173663679335224,-0.3081416087914, -3.14435710209171e-05,-0.00117765299318462,0.18769042869306,-0.338723898357048, -3.29883361955274e-05,-0.000639247426148959,0.201717178050895,-0.369306187922695, -3.45331013705819e-05,-0.000100841859113743,0.21574392740873,-0.399888477488343, -3.60778665446371e-05,0.000437563707922806,0.229770676766566,-0.430470767053991, -3.76226317195805e-05,0.000975969274958244,0.243797426124401,-0.461053056619638, -3.91673968945794e-05,0.00151437484199346,0.257824175482237,-0.491635346185286, -4.07121620688011e-05,0.00205278040902979,0.271850924840072,-0.522217635750934, -4.2256927243689e-05,0.00259118597606567,0.285877674197908,-0.552799925316581, -4.38016924181328e-05,0.00312959154310133,0.299904423555743,-0.583382214882229, -4.53464575930207e-05,0.00366799711013677,0.313931172913578,-0.613964504447877, -4.68912227675755e-05,0.00420640267717287,0.327957922271414,-0.644546794013524, -4.84359879420193e-05,0.00474480824420898,0.34198467162925,-0.675129083579172, -4.99807531166852e-05,0.00528321381124464,0.356011420987085,-0.70571137314482, -5.1525518291351e-05,0.0058216193782803,0.37003817034492,-0.736293662710468, -5.30702834662389e-05,0.00636002494531551,0.384064919702755,-0.766875952276115, -1.4133300540814e-05,-0.0064538706340953,0.0471229485411515,-0.0332197073276481, -1.5353856657227e-05,-0.00595441955359038,0.0607551275041145,-0.06405806242712, -1.65744127736123e-05,-0.00545496847308546,0.0743873064670775,-0.094896417526592, -1.77949688899559e-05,-0.00495551739258043,0.0880194854300406,-0.125734772626064, -1.90155250064106e-05,-0.00445606631207573,0.101651664393003,-0.156573127725536, -2.0236081122782e-05,-0.00395661523157076,0.115283843355966,-0.187411482825008, -2.14566372390146e-05,-0.00345716415106567,0.12891602231893,-0.21824983792448, -2.26771933552472e-05,-0.00295771307056047,0.142548201281893,-0.249088193023952, -2.38977494717574e-05,-0.00245826199005572,0.156180380244856,-0.279926548123423, -2.51183055879345e-05,-0.00195881090955052,0.169812559207819,-0.310764903222895, -2.63388617046667e-05,-0.00145935982904599,0.183444738170782,-0.341603258322367, -2.75594178210659e-05,-0.000959908748541016,0.197076917133745,-0.372441613421839, -2.87799739377981e-05,-0.000460457668036485,0.210709096096708,-0.403279968521311, -3.00005300540862e-05,3.8993412468491e-05,0.22434127505967,-0.434118323620783, -3.12210861695972e-05,0.000538444492974355,0.237973454022634,-0.464956678720255, -3.24416422864404e-05,0.00103789557347911,0.251605632985597,-0.495795033819727, -3.36621984028396e-05,0.00153734665398342,0.265237811948559,-0.526633388919199, -3.48827545193497e-05,0.00203679773448839,0.278869990911522,-0.557471744018671, -3.61033106354158e-05,0.00253624881499359,0.292502169874486,-0.588310099118142, -3.73238667522591e-05,0.00303569989549812,0.306134348837449,-0.619148454217614, -3.85444228689913e-05,0.00353515097600221,0.319766527800411,-0.649986809317087, -3.97649789841692e-05,0.00403460205650896,0.333398706763375,-0.680825164416558, -4.09855351010124e-05,0.00453405313701394,0.347030885726338,-0.71166351951603, -4.22060912178557e-05,0.00503350421751803,0.360663064689301,-0.742501874615502, -4.34266473331446e-05,0.00553295529802433,0.374295243652264,-0.773340229714974, -1.21534947497837e-05,-0.00634438197652659,0.0468046375595618,-0.0335522688691095, -1.30711203291528e-05,-0.00588829157735871,0.0600208473306649,-0.064657822940321, -1.39887459086052e-05,-0.00543220117819077,0.0732370571017682,-0.0957633770115324, -1.49063714880437e-05,-0.00497611077902305,0.0864532668728713,-0.126868931082744, -1.58239970676211e-05,-0.00452002037985533,0.0996694766439744,-0.157974485153955, -1.67416226470596e-05,-0.0040639299806875,0.112885686415078,-0.189080039225167, -1.76592482264426e-05,-0.00360783958151967,0.126101896186181,-0.220185593296378, -1.85768738057424e-05,-0.00315174918235162,0.139318105957284,-0.25129114736759, -1.94944993854307e-05,-0.00269565878318412,0.152534315728387,-0.282396701438801, -2.04121249646749e-05,-0.00223956838401596,0.16575052549949,-0.313502255510013, -2.13297505440302e-05,-0.00178347798484801,0.178966735270593,-0.344607809581224, -2.2247376123552e-05,-0.00132738758568007,0.192182945041697,-0.375713363652436, -2.31650017031293e-05,-0.000871297186512798,0.2053991548128,-0.406818917723647, -2.40826272824846e-05,-0.000415206787344635,0.218615364583903,-0.437924471794858, -2.50002528621174e-05,4.08836118228617e-05,0.231831574355006,-0.46903002586607, -2.5917878440973e-05,0.000496974010991691,0.24504778412611,-0.500135579937281, -2.68355040207169e-05,0.000953064410158744,0.258263993897212,-0.531241134008493, -2.77531296001277e-05,0.00140915480932691,0.271480203668316,-0.562346688079704, -2.86707551794274e-05,0.00186524520849507,0.284696413439419,-0.593452242150916, -2.95883807592823e-05,0.00232133560766234,0.297912623210522,-0.624557796222127, -3.0506006338249e-05,0.00277742600683073,0.311128832981626,-0.655663350293339, -3.14236319178818e-05,0.00323351640599867,0.324345042752729,-0.68676890436455, -3.23412574978477e-05,0.00368960680516528,0.337561252523831,-0.717874458435762, -3.32588830770364e-05,0.00414569720433322,0.350777462294934,-0.748980012506973, -3.41765086567802e-05,0.00460178760350072,0.363993672066038,-0.780085566578185, -1.01620730509622e-05,-0.00623936560030039,0.0464851674537681,-0.0338805154515821, -1.081832139678e-05,-0.00582879618279192,0.0592865555669479,-0.0652498016095776, -1.14745697426533e-05,-0.0054182267652837,0.0720879436801276,-0.0966190877675731, -1.21308180884849e-05,-0.00500765734777514,0.0848893317933074,-0.127988373925569, -1.27870664344831e-05,-0.00459708793026703,0.0976907199064871,-0.159357660083564, -1.3443314780287e-05,-0.00418651851275864,0.110492108019667,-0.19072694624156, -1.40995631261465e-05,-0.00377594909525014,0.123293496132847,-0.222096232399555, -1.47558114719781e-05,-0.00336537967774198,0.136094884246026,-0.253465518557551, -1.54120598174767e-05,-0.00295481026023292,0.148896272359206,-0.284834804715546, -1.60683081635304e-05,-0.00254424084272498,0.161697660472386,-0.316204090873541, -1.67245565095842e-05,-0.00213367142521692,0.174499048585566,-0.347573377031537, -1.73808048555268e-05,-0.00172310200770864,0.187300436698745,-0.378942663189533, -1.8037053201192e-05,-0.00131253259019992,0.200101824811925,-0.410311949347528, -1.86933015471902e-05,-0.000901963172691866,0.212903212925105,-0.441681235505523, -1.93495498930218e-05,-0.000491393755183589,0.225704601038284,-0.473050521663519, -2.00057982384649e-05,-8.08243376744233e-05,0.238505989151465,-0.504419807821514, -2.06620465843521e-05,0.000329745079833632,0.251307377264644,-0.53578909397951, -2.13182949301283e-05,0.00074031449734191,0.264108765377824,-0.567158380137506, -2.19745432760154e-05,0.00115088391485063,0.276910153491004,-0.598527666295501, -2.26307916216806e-05,0.00156145333235935,0.289711541604184,-0.629896952453496, -2.32870399675678e-05,0.00197202274986763,0.302512929717363,-0.661266238611492, -2.3943288313677e-05,0.00238259216737502,0.315314317830542,-0.692635524769487, -2.45995366598972e-05,0.0027931615848833,0.328115705943723,-0.724004810927483, -2.52557850056734e-05,0.00320373100239113,0.340917094056902,-0.755374097085478, -2.59120333515606e-05,0.00361430041989985,0.353718482170082,-0.786743383243474, -8.26705109892301e-06,-0.00614399811919378,0.0461819444859536,-0.0341871901170836, -8.71494151642727e-06,-0.00577840804286384,0.058591957638233,-0.0658028762494132, -9.16283193405643e-06,-0.00541281796653398,0.0710019707905123,-0.0974185623817426, -9.61072235172722e-06,-0.00504722789020423,0.0834119839427916,-0.129034248514072, -1.0058612769176e-05,-0.00468163781387432,0.0958219970950708,-0.160649934646402, -1.05065031867912e-05,-0.00431604773754446,0.10823201024735,-0.192265620778731, -1.09543936041567e-05,-0.00395045766121427,0.12064202339963,-0.223881306911061, -1.14022840220218e-05,-0.00358486758488485,0.133052036551909,-0.25549699304339, -1.18501744393318e-05,-0.00321927750855455,0.145462049704188,-0.28711267917572, -1.22980648569748e-05,-0.00285368743222492,0.157872062856467,-0.318728365308049, -1.27459552746734e-05,-0.00248809735589517,0.170282076008747,-0.350344051440379, -1.31938456918168e-05,-0.00212250727956453,0.182692089161026,-0.381959737572708, -1.36417361095154e-05,-0.00175691720323479,0.195102102313306,-0.413575423705038, -1.40896265271029e-05,-0.00139132712690526,0.207512115465585,-0.445191109837367, -1.45375169446904e-05,-0.00102573705057507,0.219922128617864,-0.476806795969697, -1.49854073622224e-05,-0.000660146974245324,0.232332141770144,-0.508422482102026, -1.54332977795324e-05,-0.000294556897915133,0.244742154922423,-0.540038168234356, -1.58811881972865e-05,7.10331784146145e-05,0.257152168074702,-0.571653854366686, -1.63290786149295e-05,0.00043662325474414,0.269562181226981,-0.603269540499015, -1.67769690324615e-05,0.000802213331074331,0.281972194379261,-0.634885226631344, -1.72248594498825e-05,0.0011678034074043,0.29438220753154,-0.666500912763674, -1.76727498673035e-05,0.00153339348373427,0.306792220683819,-0.698116598896004, -1.81206402853906e-05,0.00189898356006335,0.319202233836098,-0.729732285028333, -1.85685307022565e-05,0.00226457363639376,0.331612246988378,-0.761347971160663, -1.90164211203436e-05,0.00263016371272329,0.344022260140657,-0.792963657292992, -6.55658407081039e-06,-0.00606159083217481,0.0459090008301479,-0.0344593555276549, -6.85022699883908e-06,-0.00573790517319722,0.0579685928599279,-0.0662937149242715, -7.14386992681226e-06,-0.00541421951421955,0.070028184889708,-0.0981280743208882, -7.43751285489647e-06,-0.00509053385524205,0.082087776919488,-0.129962433717505, -7.7311557828974e-06,-0.00476684819626438,0.0941473689492681,-0.161796793114121, -8.02479871087058e-06,-0.00444316253728694,0.106206960979048,-0.193631152510738, -8.31844163906581e-06,-0.00411947687830927,0.118266553008828,-0.225465511907355, -8.61208456715001e-06,-0.00379579121933193,0.130326145038608,-0.257299871303971, -8.90572749501217e-06,-0.00347210556035404,0.142385737068388,-0.289134230700588, -9.19937042309638e-06,-0.00314841990137649,0.154445329098168,-0.320968590097205, -9.49301335084751e-06,-0.0028247342423986,0.166504921127948,-0.352802949493821, -9.78665627926478e-06,-0.00250104858342159,0.178564513157728,-0.384637308890438, -1.00802992069604e-05,-0.00217736292444348,0.190624105187508,-0.416471668287055, -1.03739421350446e-05,-0.00185367726546581,0.202683697217289,-0.448306027683671, -1.06675850630733e-05,-0.00152999160648859,0.214743289247068,-0.480140387080288, -1.09612279913796e-05,-0.00120630594751092,0.226802881276849,-0.511974746476904, -1.12548709191307e-05,-0.000882620288533476,0.238862473306628,-0.543809105873521, -1.15485138472149e-05,-0.000558934629555585,0.250922065336409,-0.575643465270138, -1.18421567755211e-05,-0.000235248970578805,0.262981657366188,-0.607477824666755, -1.21357997029392e-05,8.84366883999732e-05,0.275041249395969,-0.639312184063371, -1.24294426315785e-05,0.000412122347376531,0.287100841425748,-0.671146543459988, -1.27230855595517e-05,0.000735808006354421,0.299160433455528,-0.702980902856604, -1.30167284865257e-05,0.0010594936653332,0.311220025485309,-0.734815262253221, -1.33103714157201e-05,0.00138317932430976,0.323279617515089,-0.766649621649837, -1.36040143425831e-05,0.00170686498328809,0.335339209544868,-0.798483981046454, -5.08478729989437e-06,-0.00599337229756208,0.0456747726584931,-0.0346900943510097, -5.27140450777563e-06,-0.00570667872925507,0.057435008107411,-0.0667098425212948, -5.45802171550425e-06,-0.00541998516094772,0.0691952435563291,-0.09872959069158, -5.64463892352429e-06,-0.00513329159264081,0.080955479005247,-0.130749338861865, -5.83125613121127e-06,-0.00484659802433351,0.092715714454165,-0.16276908703215, -6.01787333912029e-06,-0.00455990445602639,0.104475949903083,-0.194788835202435, -6.20449054683503e-06,-0.00427321088771926,0.116236185352001,-0.22680858337272, -6.39110775468854e-06,-0.00398651731941224,0.127996420800919,-0.258828331543005, -6.57772496270859e-06,-0.00369982375110534,0.139756656249837,-0.290848079713291, -6.76434217045108e-06,-0.00341313018279799,0.151516891698755,-0.322867827883576, -6.95095937847112e-06,-0.00312643661449075,0.163277127147673,-0.354887576053861, -7.13757658643566e-06,-0.0028397430461844,0.17503736259659,-0.386907324224146, -7.32419379384508e-06,-0.00255304947787649,0.186797598045509,-0.418927072394431, -7.5108110022537e-06,-0.00226635590957036,0.198557833494426,-0.450946820564716, -7.69742820949659e-06,-0.00197966234126223,0.210318068943345,-0.482966568735001, -7.88404541740562e-06,-0.00169296877295522,0.222078304392263,-0.514986316905286, -8.07066262542566e-06,-0.0014062752046482,0.23383853984118,-0.547006065075571, -8.25727983344571e-06,-0.00111958163634096,0.245598775290099,-0.579025813245856, -8.44389704091064e-06,-0.000832888068033499,0.257359010739017,-0.611045561416142, -8.63051424870864e-06,-0.000546194499726482,0.269119246187934,-0.643065309586427, -8.81713145639562e-06,-0.000259500931419243,0.280879481636852,-0.675085057756712, -9.00374866452669e-06,2.71926368875519e-05,0.29263971708577,-0.707104805926997, -9.19036587232469e-06,0.000313886205194347,0.304399952534688,-0.739124554097282, -9.37698307978962e-06,0.00060057977350203,0.316160187983606,-0.771144302267567, -9.56360028792069e-06,0.000887273341809269,0.327920423432524,-0.803164050437852, -3.86957818909739e-06,-0.00593886466524146,0.0454818542272867,-0.0348782456110755, -3.98575481037888e-06,-0.00568333287867956,0.0569964413405259,-0.067049165269802, -4.10193143168813e-06,-0.00542780109211766,0.0685110284537651,-0.0992200849285285, -4.21810805301126e-06,-0.00517226930555587,0.0800256155670042,-0.131391004587255, -4.33428467425112e-06,-0.0049167375189938,0.0915402026802435,-0.163561924245982, -4.45046129576854e-06,-0.00466120573243234,0.103054789793482,-0.195732843904708, -4.56663791703615e-06,-0.00440567394587021,0.114569376906722,-0.227903763563435, -4.68281453830377e-06,-0.00415014215930853,0.126083964019961,-0.260074683222161, -4.79899115973792e-06,-0.00389461037274674,0.1375985511332,-0.292245602880888, -4.91516778067247e-06,-0.0036390785861844,0.149113138246439,-0.324416522539614, -5.03134440210662e-06,-0.00338354679962261,0.160627725359679,-0.356587442198341, -5.14752102331872e-06,-0.00312801501306059,0.172142312472918,-0.388758361857067, -5.2636976448639e-06,-0.0028724832264988,0.183656899586157,-0.420929281515794, -5.37987426635356e-06,-0.00261695143993745,0.195171486699396,-0.45310020117452, -5.49605088751015e-06,-0.00236141965337522,0.206686073812635,-0.485271120833247, -5.61222750872226e-06,-0.00210588786681343,0.218200660925874,-0.517442040491973, -5.72840413026743e-06,-0.00185035608025164,0.229715248039114,-0.5496129601507, -5.84458075114647e-06,-0.0015948242936894,0.241229835152353,-0.581783879809426, -5.96075737246959e-06,-0.00133929250712739,0.252744422265592,-0.613954799468153, -6.07693399412579e-06,-0.0010837607205656,0.264259009378832,-0.646125719126879, -6.19311061533789e-06,-0.000828228934004027,0.27577359649207,-0.678296638785606, -6.30928723632795e-06,-0.000572697147442014,0.287288183605309,-0.710467558444333, -6.42546385820619e-06,-0.000317165360880445,0.298802770718549,-0.742638478103059, -6.54164047908523e-06,-6.16335743179874e-05,0.310317357831788,-0.774809397761785, -6.65781710051938e-06,0.000193898212243138,0.321831944945027,-0.806980317420512, -2.89997342294013e-06,-0.0058965229248214,0.04532825336189,-0.0350268606255955, -2.97158240979145e-06,-0.00566623906565222,0.0566478297080244,-0.0673171860908092, -3.04319139671216e-06,-0.00543595520648321,0.0679674060541586,-0.0996075115560229, -3.11480038370227e-06,-0.00520567134731414,0.0792869824002929,-0.131897837021237, -3.18640937066461e-06,-0.00497538748814519,0.0906065587464271,-0.16418816248645, -3.25801835751593e-06,-0.00474510362897607,0.101926135092561,-0.196478487951664, -3.32962734445053e-06,-0.00451481976980717,0.113245711438695,-0.228768813416878, -3.40123633119083e-06,-0.00428453591063782,0.12456528778483,-0.261059138882091, -3.47284531831971e-06,-0.00405425205146892,0.135884864130964,-0.293349464347305, -3.54445430494899e-06,-0.00382396819229935,0.147204440477099,-0.325639789812519, -3.61606329180031e-06,-0.00359368433313034,0.158524016823233,-0.357930115277732, -3.6876722789847e-06,-0.00336340047396155,0.169843593169367,-0.390220440742946, -3.75928126594705e-06,-0.00313311661479254,0.181163169515501,-0.42251076620816, -3.83089025263184e-06,-0.00290283275562331,0.192482745861635,-0.454801091673373, -3.90249923953867e-06,-0.0026725488964543,0.20380232220777,-0.487091417138587, -3.97410822638999e-06,-0.00244226503728528,0.215121898553904,-0.519381742603801, -4.04571721324132e-06,-0.00221198117811627,0.226441474900038,-0.551672068069014, -4.11732620053673e-06,-0.00198169731894726,0.237761051246172,-0.583962393534228, -4.18893518738805e-06,-0.00175141345977869,0.249080627592306,-0.616252718999442, -4.26054417446142e-06,-0.00152112960060924,0.260400203938441,-0.648543044464655, -4.33215316086866e-06,-0.00129084574143956,0.271719780284575,-0.680833369929869, -4.40376214749794e-06,-0.00106056188226988,0.28303935663071,-0.713123695395083, -4.47537113479335e-06,-0.000830278023101982,0.294358932976843,-0.745414020860297, -4.54698012153365e-06,-0.000599994163932305,0.305678509322978,-0.77770434632551, -4.61858910860702e-06,-0.000369710304763959,0.316998085669112,-0.809994671790724, -2.14724391352228e-06,-0.00586434101126784,0.0452092181363553,-0.0351413215647159, -2.19137834478467e-06,-0.00565388466844047,0.0563780103181248,-0.0675236114979282, -2.23551277592215e-06,-0.0054434283256129,0.0675468024998945,-0.0999059014311406, -2.27964720717067e-06,-0.00523297198278561,0.0787155946816639,-0.132288191364353, -2.32378163830815e-06,-0.00502251563995793,0.0898843868634336,-0.164670481297565, -2.3679160694734e-06,-0.00481205929713047,0.101053179045203,-0.197052771230778, -2.41205050061088e-06,-0.00460160295430301,0.112221971226973,-0.22943506116399, -2.45618493199817e-06,-0.00439114661147566,0.123390763408742,-0.261817351097202, -2.50031936310791e-06,-0.0041806902686482,0.134559555590512,-0.294199641030415, -2.54445379432866e-06,-0.00397023392582097,0.145728347772281,-0.326581930963627, -2.5885882254939e-06,-0.0037597775829934,0.156897139954051,-0.358964220896839, -2.63272265654813e-06,-0.00354932124016538,0.168065932135821,-0.391346510830052, -2.67685708760235e-06,-0.00333886489733759,0.179234724317591,-0.423728800763264, -2.72099151898963e-06,-0.00312840855451091,0.19040351649936,-0.456111090696476, -2.76512595021039e-06,-0.00291795221168356,0.201572308681129,-0.488493380629689, -2.80926038154217e-06,-0.00270749586885599,0.212741100862899,-0.520875670562901, -2.8533948126519e-06,-0.00249703952602864,0.223909893044668,-0.553257960496114, -2.89752924420572e-06,-0.00228658318320152,0.235078685226438,-0.585640250429326, -2.94166367509341e-06,-0.00207612684037328,0.246247477408208,-0.618022540362538, -2.98579810620314e-06,-0.00186567049754593,0.257416269589977,-0.65040483029575, -3.02993253686878e-06,-0.00165521415471748,0.268585061771747,-0.682787120228963, -3.07406696864465e-06,-0.00144475781189124,0.279753853953516,-0.715169410162175, -3.11820139997643e-06,-0.00123430146906367,0.290922646135286,-0.747551700095387, -3.16233583042003e-06,-0.00102384512623521,0.302091438317056,-0.7799339900286, -3.20647026230692e-06,-0.000813388783408531,0.313260230498825,-0.812316279961812, -1.57521898412616e-06,-0.0058402812355243,0.0451188854488749,-0.0352277756672731, -1.60264036312696e-06,-0.00564502143455947,0.0561734477297235,-0.0676795277734248, -1.63006174194735e-06,-0.00544976163359451,0.067228010010572,-0.100131279879576, -1.65748312089264e-06,-0.00525450183262971,0.0782825722914205,-0.132583031985728, -1.68490449986569e-06,-0.00505924203166486,0.0893371345722691,-0.16503478409188, -1.71232587875547e-06,-0.00486398223069984,0.100391696853118,-0.197486536198031, -1.73974725758974e-06,-0.00466872242973504,0.111446259133966,-0.229938288304183, -1.76716863670157e-06,-0.00447346262877013,0.122500821414815,-0.262390040410335, -1.79459001553584e-06,-0.00427820282780533,0.133555383695663,-0.294841792516486, -1.82201139448113e-06,-0.00408294302684031,0.144609945976512,-0.327293544622638, -1.84943277348193e-06,-0.00388768322587563,0.155664508257361,-0.35974529672879, -1.87685415253824e-06,-0.00369242342491072,0.166719070538209,-0.392197048834941, -1.90427553109496e-06,-0.00349716362394537,0.177773632819058,-0.424648800941093, -1.9316969103178e-06,-0.0033019038229809,0.188828195099906,-0.457100553047244, -1.9591182892631e-06,-0.00310664402201621,0.199882757380755,-0.489552305153396, -1.9865396677643e-06,-0.00291138422105086,0.210937319661604,-0.522004057259548, -2.01396104693163e-06,-0.00271612442008617,0.221991881942452,-0.5544558093657, -2.04138242643204e-06,-0.00252086461912215,0.2330464442233,-0.586907561471851, -2.06880380460017e-06,-0.00232560481815636,0.244101006504149,-0.619359313578003, -2.09622518376751e-06,-0.00213034501719145,0.255155568784998,-0.651811065684154, -2.12364656326791e-06,-0.00193508521622743,0.266210131065846,-0.684262817790306, -2.15106794188014e-06,-0.00173982541526208,0.277264693346695,-0.716714569896458, -2.17848932004827e-06,-0.00154456561429672,0.288319255627543,-0.749166322002609, -2.20591069888254e-06,-0.00134930581333093,0.299373817908393,-0.781618074108761, -2.23333207827192e-06,-0.00115404601236735,0.31042838018924,-0.814069826214913, -1.14752978243315e-06,-0.00582251324052027,0.0450514188223559,-0.0352921190621095, -1.16480631602578e-06,-0.00563868670992446,0.0560207754968416,-0.0677955683334324, -1.18208284960453e-06,-0.00545486017932861,0.0669901321713274,-0.100299017604755, -1.19935938328042e-06,-0.00527103364873294,0.0779594888458131,-0.132802466876078, -1.21663591656773e-06,-0.00508720711813671,0.0889288455202991,-0.165305916147401, -1.23391245032689e-06,-0.00490338058754114,0.0998982021947847,-0.197809365418724, -1.251188983864e-06,-0.00471955405694524,0.110867558869271,-0.230312814690047, -1.26846551762316e-06,-0.00453572752634968,0.121836915543756,-0.262816263961369, -1.28574205116028e-06,-0.00435190099575378,0.132806272218242,-0.295319713232692, -1.30301858458637e-06,-0.00416807446515799,0.143775628892728,-0.327823162504015, -1.32029511845655e-06,-0.00398424793456242,0.154744985567213,-0.360326611775338, -1.33757165204917e-06,-0.00380042140396664,0.165714342241699,-0.392830061046661, -1.35484818508669e-06,-0.00361659487337018,0.176683698916185,-0.425333510317984, -1.37212471901238e-06,-0.00343276834277462,0.187653055590671,-0.457836959589306, -1.38940125271603e-06,-0.00324894181217883,0.198622412265157,-0.490340408860629, -1.40667778558701e-06,-0.00306511528158193,0.209591768939643,-0.522843858131952, -1.42395432023434e-06,-0.0028812887509877,0.220561125614128,-0.555347307403275, -1.44123085354941e-06,-0.00269746222039169,0.231530482288614,-0.587850756674598, -1.45850738753062e-06,-0.00251363568979657,0.242499838963099,-0.620354205945921, -1.47578392073466e-06,-0.00232980915920011,0.253469195637585,-0.652857655217243, -1.49306045427178e-06,-0.00214598262860433,0.264438552312071,-0.685361104488566, -1.51033698803094e-06,-0.00196215609800854,0.275407908986557,-0.717864553759889, -1.52761352090192e-06,-0.00177832956741186,0.286377265661043,-0.750368003031212, -1.54489005521619e-06,-0.00159450303681741,0.297346622335528,-0.782871452302535, -1.56216658819819e-06,-0.00141067650622029,0.308315979010014,-0.815374901573858, -8.31630060330046e-07,-0.00580950970757976,0.045001627399384,-0.0353394824502399, -8.42705339509919e-07,-0.0056341664871114,0.0559081602851909,-0.0678809861777422, -8.53780618564892e-07,-0.00545882326664299,0.0668146931709978,-0.100422489905245, -8.64855897703132e-07,-0.00528348004617463,0.0777212260568046,-0.132963993632747, -8.75931176924638e-07,-0.00510813682570643,0.0886277589426114,-0.165505497360249, -8.87006455979611e-07,-0.00493279360523791,0.0995342918284183,-0.198047001087752, -8.98081734979073e-07,-0.00475745038476927,0.110440824714225,-0.230588504815254, -9.09157014394868e-07,-0.0045821071643013,0.121347357600032,-0.263130008542756, -9.20232293366574e-07,-0.00440676394383277,0.132253890485839,-0.295671512270259, -9.31307572282769e-07,-0.00423142072336402,0.143160423371646,-0.328213015997761, -9.42382851587542e-07,-0.00405607750289616,0.154066956257452,-0.360754519725263, -9.53458130947826e-07,-0.00388073428242786,0.164973489143259,-0.393296023452766, -9.64533409919532e-07,-0.00370539106195933,0.175880022029066,-0.425837527180268, -9.75608688891239e-07,-0.0035300478414908,0.186786554914873,-0.45837903090777, -9.86683968418056e-07,-0.00335470462102294,0.19769308780068,-0.490920534635273, -9.97759247445273e-07,-0.00317936140055419,0.208599620686487,-0.523462038362775, -1.00883452636147e-06,-0.00300401818008611,0.219506153572294,-0.556003542090278, -1.01990980572175e-06,-0.00282867495961758,0.230412686458101,-0.58854504581778, -1.03098508485999e-06,-0.0026533317391495,0.241319219343907,-0.621086549545282, -1.04206036377619e-06,-0.00247798851868009,0.252225752229715,-0.653628053272784, -1.05313564291443e-06,-0.00230264529821245,0.263132285115521,-0.686169557000287, -1.06421092227471e-06,-0.00212730207774436,0.274038818001328,-0.718711060727789, -1.07528620130193e-06,-0.00195195885727539,0.284945350887135,-0.751252564455292, -1.08636148032915e-06,-0.00177661563680775,0.295851883772941,-0.783794068182794, -1.09743675957841e-06,-0.00160127241633923,0.306758416658749,-0.816335571910297, -6.00394642863433e-07,-0.00580005558619484,0.0449652028088316,-0.0353740650941542, -6.07626607168621e-07,-0.00563094253125529,0.0558258090308201,-0.0679433544966126, -6.14858571307275e-07,-0.00546182947631557,0.0666864152528086,-0.100512643899071, -6.22090535612463e-07,-0.00529271642137613,0.077547021474797,-0.133081933301529, -6.29322499862139e-07,-0.00512360336643647,0.0884076276967856,-0.165651222703988, -6.36554464250594e-07,-0.00495449031149708,0.0992682339187739,-0.198220512106446, -6.43786428555781e-07,-0.0047853772565577,0.110128840140762,-0.230789801508905, -6.51018392694436e-07,-0.00461626420161787,0.120989446362751,-0.263359090911363, -6.58250356999623e-07,-0.00444715114667871,0.131850052584739,-0.295928380313821, -6.65482321082767e-07,-0.00427803809173866,0.142710658806728,-0.32849766971628, -6.72714285276932e-07,-0.00410892503679894,0.153571265028716,-0.361066959118738, -6.79946249637631e-07,-0.00393981198185989,0.164431871250704,-0.393636248521197, -6.87178214053841e-07,-0.00377069892692039,0.175292477472693,-0.426205537923655, -6.94410178525562e-07,-0.00360158587198089,0.186153083694681,-0.458774827326114, -7.0164214283075e-07,-0.00343247281704162,0.19701368991667,-0.491344116728572, -7.08874106969404e-07,-0.0032633597621019,0.207874296138658,-0.523913406131031, -7.16106070886013e-07,-0.00309424670716196,0.218734902360647,-0.556482695533489, -7.23338035579779e-07,-0.00292513365222269,0.229595508582635,-0.589051984935947, -7.30569999607411e-07,-0.00275602059728319,0.240456114804624,-0.621621274338406, -7.37801963746065e-07,-0.00258690754234348,0.251316721026612,-0.654190563740864, -7.45033928661876e-07,-0.00241779448740465,0.2621773272486,-0.686759853143323, -7.52265892245418e-07,-0.00224868143246404,0.273037933470589,-0.719329142545781, -7.59497857050206e-07,-0.00207956837752521,0.283898539692578,-0.751898431948239, -7.66729821521928e-07,-0.00191045532258594,0.294759145914566,-0.784467721350698, -7.73961785327515e-07,-0.00174134226764533,0.305619752136555,-0.817037010753156, -2.84782493201324e-05,-0.00729197454872307,0.0597259588284352,-0.0440726974825753, -3.18714019584831e-05,-0.00661748196895767,0.0752520089806604,-0.0728230742581764, -3.52645545967922e-05,-0.00594298938919213,0.0907780591328857,-0.101573451033777, -3.86577072351846e-05,-0.00526849680942676,0.106304109285111,-0.130323827809379, -4.20508598735769e-05,-0.0045940042296615,0.121830159437336,-0.15907420458498, -4.5444012511664e-05,-0.00391951164989557,0.137356209589561,-0.187824581360581, -4.88371651501396e-05,-0.0032450190701302,0.152882259741787,-0.216574958136182, -5.22303177883932e-05,-0.00257052649036471,0.168408309894012,-0.245325334911783, -5.56234704267577e-05,-0.00189603391059934,0.183934360046237,-0.274075711687384, -5.90166230652334e-05,-0.00122154133083408,0.199460410198462,-0.302826088462985, -6.2409775703709e-05,-0.000547048751068813,0.214986460350687,-0.331576465238586, -6.58029283415185e-05,0.000127443828697338,0.230512510502913,-0.360326842014187, -6.9196080979772e-05,0.000801936408463044,0.246038560655138,-0.389077218789788, -7.25892336184142e-05,0.00147642898822764,0.261564610807363,-0.417827595565389, -7.59823862567233e-05,0.00215092156799357,0.277090660959589,-0.446577972340991, -7.93755388952544e-05,0.00282541414775905,0.292616711111814,-0.475328349116592, -8.27686915334525e-05,0.00349990672752409,0.308142761264039,-0.504078725892193, -8.61618441717615e-05,0.0041743993072898,0.323668811416264,-0.532829102667794, -8.95549968101816e-05,0.00484889188705528,0.33919486156849,-0.561579479443395, -9.29481494481577e-05,0.00552338446682121,0.354720911720715,-0.590329856218996, -9.63413020870219e-05,0.00619787704658581,0.37024696187294,-0.619080232994597, -9.97344547251089e-05,0.00687236962635218,0.385773012025166,-0.647830609770198, -0.000103127607363307,0.00754686220611767,0.401299062177391,-0.676580986545799, -0.000106520760002393,0.00822135478588226,0.416825112329616,-0.7053313633214, -0.000109913912640369,0.00889584736564775,0.432351162481841,-0.734081740097001, -2.83328205074457e-05,-0.00728071021353133,0.0596970031002054,-0.0441038666928489, -3.16930733335052e-05,-0.00660803700476242,0.0751964528709227,-0.0728724659747643, -3.50533261596619e-05,-0.00593536379599358,0.09069590264164,-0.10164106525668, -3.84135789857354e-05,-0.00526269058722467,0.106195352412357,-0.130409664538595, -4.17738318117811e-05,-0.00459001737845577,0.121694802183075,-0.159178263820511, -4.5134084637799e-05,-0.00391734416968681,0.137194251953792,-0.187946863102426, -4.84943374638447e-05,-0.00324467096091785,0.152693701724509,-0.216715462384341, -5.18545902896683e-05,-0.00257199775214845,0.168193151495227,-0.245484061666257, -5.52148431159361e-05,-0.00189932454337971,0.183692601265944,-0.274252660948172, -5.85750959419817e-05,-0.00122665133461064,0.199192051036661,-0.303021260230087, -6.19353487680829e-05,-0.000553978125841903,0.214691500807378,-0.331789859512003, -6.52956015942396e-05,0.000118695082927056,0.230190950578096,-0.360558458793918, -6.86558544201188e-05,0.000791368291696015,0.245690400348813,-0.389327058075834, -7.20161072461645e-05,0.00146404150046497,0.26118985011953,-0.418095657357749, -7.53763600719326e-05,0.00213671470923438,0.276689299890248,-0.446864256639665, -7.87366128985889e-05,0.00280938791800223,0.292188749660965,-0.47563285592158, -8.2096865724246e-05,0.00348206112677185,0.307688199431682,-0.504401455203495, -8.54571185503472e-05,0.00415473433554037,0.323187649202399,-0.533170054485411, -8.88173713763374e-05,0.00482740754430977,0.338687098973117,-0.561938653767326, -9.21776242027716e-05,0.00550008075307828,0.354186548743834,-0.590707253049242, -9.55378770288728e-05,0.00617275396184747,0.369685998514552,-0.619475852331157, -9.8898129854641e-05,0.00684542717061642,0.385185448285269,-0.648244451613072, -0.000102258382681186,0.0075181003793845,0.400684898055985,-0.677013050894987, -0.000105618635506954,0.0081907735881539,0.416184347826703,-0.705781650176903, -0.000108978888332723,0.0088634467969233,0.43168379759742,-0.734550249458818, -2.81318302663564e-05,-0.00726519504593853,0.0596569780256893,-0.0441468892027146, -3.14468683355607e-05,-0.0065950543363637,0.0751196777924643,-0.0729406408048461, -3.47619064047233e-05,-0.00592491362678882,0.0905823775592394,-0.101734392406978, -3.80769444739415e-05,-0.00525477291721388,0.106045077326015,-0.130528144009109, -4.13919825430487e-05,-0.00458463220763905,0.12150777709279,-0.159321895611241, -4.47070206123779e-05,-0.00391449149806444,0.136970476859564,-0.188115647213372, -4.80220586816515e-05,-0.00324435078848961,0.15243317662634,-0.216909398815504, -5.13370967507587e-05,-0.00257421007891478,0.167895876393115,-0.245703150417635, -5.46521348198659e-05,-0.00190406936933962,0.18335857615989,-0.274496902019767, -5.79671728889175e-05,-0.00123392865976468,0.198821275926665,-0.303290653621898, -6.12822109583577e-05,-0.000563787950190076,0.21428397569344,-0.33208440522403, -6.45972490274649e-05,0.000106352759384976,0.229746675460215,-0.360878156826161, -6.79122870966831e-05,0.000776493468959361,0.24520937522699,-0.389671908428293, -7.12273251656237e-05,0.00144663417853463,0.260672074993765,-0.418465660030425, -7.45423632351194e-05,0.00211677488810902,0.27613477476054,-0.447259411632556, -7.785740130406e-05,0.00278691559768451,0.291597474527315,-0.476053163234688, -8.11724393735558e-05,0.0034570563072589,0.30706017429409,-0.504846914836819, -8.44874774427185e-05,0.00412719701683351,0.322522874060865,-0.533640666438951, -8.78025155117701e-05,0.00479733772640834,0.33798557382764,-0.562434418041082, -9.11175535808217e-05,0.00546747843598405,0.353448273594416,-0.591228169643214, -9.44325916502065e-05,0.00613761914555866,0.368910973361191,-0.620021921245345, -9.7747629718925e-05,0.00680775985513327,0.384373673127965,-0.648815672847477, -0.000101062667788532,0.00747790056470787,0.39983637289474,-0.677609424449608, -0.000104377705857583,0.00814804127428337,0.415299072661516,-0.70640317605174, -0.000107692743927079,0.00881818198385753,0.43076177242829,-0.735196927653871, -2.78553677655058e-05,-0.00724395350292695,0.0596019109039985,-0.0442059628311834, -3.11086956129997e-05,-0.00657733028075719,0.0750140858755764,-0.073034250745218, -3.43620234603825e-05,-0.00591070705858715,0.0904262608471544,-0.101862538659253, -3.76153513079458e-05,-0.00524408383641739,0.105838435818732,-0.130690826573287, -4.08686791554258e-05,-0.00457746061424769,0.12125061079031,-0.159519114487322, -4.4122007002767e-05,-0.00391083739207754,0.136662785761888,-0.188347402401357, -4.73753348502193e-05,-0.00324421416990772,0.152074960733466,-0.217175690315391, -5.0628662697616e-05,-0.00257759094773768,0.167487135705044,-0.246003978229426, -5.38819905452903e-05,-0.00191096772556809,0.182899310676622,-0.274832266143461, -5.71353183927981e-05,-0.00124434450339828,0.1983114856482,-0.303660554057495, -6.03886462401948e-05,-0.000577721281228571,0.213723660619778,-0.33248884197153, -6.36419740874805e-05,8.8901940941799e-05,0.229135835591356,-0.361317129885565, -6.68953019351548e-05,0.000755525163111059,0.244548010562934,-0.390145417799599, -7.0148629782496e-05,0.00142214838528143,0.259960185534512,-0.418973705713634, -7.34019576296152e-05,0.00208877160745158,0.27537236050609,-0.447801993627669, -7.66552854771785e-05,0.0027553948296215,0.290784535477669,-0.476630281541703, -7.99086133247418e-05,0.00342201805179143,0.306196710449247,-0.505458569455738, -8.3161941171972e-05,0.00408864127396114,0.321608885420824,-0.534286857369773, -8.64152690194242e-05,0.00475526449613128,0.337021060392403,-0.563115145283807, -8.96685968673205e-05,0.00542188771830077,0.352433235363981,-0.591943433197842, -9.29219247146618e-05,0.00608851094047047,0.367845410335558,-0.620771721111877, -9.6175252562225e-05,0.00675513416264018,0.383257585307136,-0.649600009025911, -9.94285804094552e-05,0.00742175738481032,0.398669760278714,-0.678428296939946, -0.000102681908256685,0.00808838060698047,0.414081935250292,-0.707256584853981, -0.000105935236104471,0.00875500382914973,0.42949411022187,-0.736084872768015, -2.74775680015188e-05,-0.00721511144957537,0.0595266360380612,-0.044286496017058, -3.06474705275839e-05,-0.00655335836996551,0.074869813130267,-0.0731618661790941, -3.38173730536351e-05,-0.00589160529035571,0.0902129902224726,-0.10203723634113, -3.69872755798528e-05,-0.00522985221074601,0.105556167314678,-0.130912606503166, -4.0157178105904e-05,-0.00456809913113621,0.120899344406884,-0.159787976665203, -4.3327080631872e-05,-0.0039063460515264,0.13624252149909,-0.188663346827239, -4.64969831581175e-05,-0.00324459297191682,0.151585698591295,-0.217538716989275, -4.96668856841409e-05,-0.00258283989230679,0.166928875683501,-0.246414087151311, -5.28367882101088e-05,-0.00192108681269676,0.182272052775707,-0.275289457313347, -5.60066907361878e-05,-0.00125933373308706,0.197615229867913,-0.304164827475383, -5.91765932622113e-05,-0.000597580653477259,0.212958406960118,-0.33304019763742, -6.23464957884012e-05,6.41724261325471e-05,0.228301584052324,-0.361915567799456, -6.55163983140361e-05,0.000725925505743019,0.24364476114453,-0.390790937961492, -6.86863008405592e-05,0.00138767858535238,0.258987938236736,-0.419666308123528, -7.18562033665826e-05,0.00204943166496241,0.274331115328942,-0.448541678285564, -7.50261058927171e-05,0.00271118474457155,0.289674292421147,-0.4774170484476, -7.81960084190736e-05,0.00337293782418113,0.305017469513353,-0.506292418609637, -8.1365910945097e-05,0.00403469090379072,0.320360646605558,-0.535167788771673, -8.45358134712315e-05,0.00469644398340097,0.335703823697764,-0.564043158933709, -8.77057159969219e-05,0.00535819706301122,0.35104700078997,-0.592918529095745, -9.08756185235005e-05,0.00601995014262036,0.366390177882175,-0.621793899257781, -9.40455210495239e-05,0.00668170322222972,0.381733354974381,-0.650669269419817, -9.72154235756584e-05,0.00734345630183952,0.397076532066586,-0.679544639581854, -0.000100385326101127,0.00800520938145066,0.412419709158793,-0.70842000974389, -0.000103555228627927,0.00866696246106002,0.427762886250999,-0.737295379905926, -2.69658674338924e-05,-0.00717638647988697,0.0594246413539615,-0.0443952168496572, -3.00244447036385e-05,-0.00652134522800274,0.0746744525616861,-0.0733341486496414, -3.30830219733569e-05,-0.00586630397611854,0.0899242637694107,-0.102273080449626, -3.61415992432002e-05,-0.00521126272423444,0.105174074977135,-0.13121201224961, -3.92001765129601e-05,-0.00455622147235035,0.12042388618486,-0.160150944049594, -4.22587537827201e-05,-0.00390118022046615,0.135673697392585,-0.189089875849578, -4.53173310523414e-05,-0.00324613896858172,0.150923508600309,-0.218028807649563, -4.83759083223512e-05,-0.00259109771669797,0.166173319808034,-0.246967739449547, -5.14344855919724e-05,-0.00193605646481354,0.181423131015758,-0.275906671249531, -5.44930628618157e-05,-0.00128101521292945,0.196672942223483,-0.304845603049515, -5.75516401315479e-05,-0.000625973961045023,0.211922753431208,-0.3337845348495, -6.06102174010581e-05,2.90672908389578e-05,0.227172564638932,-0.362723466649484, -6.36687946708459e-05,0.000684108542723383,0.242422375846657,-0.391662398449468, -6.67273719408001e-05,0.00133914979460736,0.257672187054382,-0.420601330249453, -6.97859492102548e-05,0.00199419104649201,0.272921998262107,-0.449540262049437, -7.28445264801536e-05,0.00264923229837621,0.288171809469831,-0.478479193849421, -7.59031037498303e-05,0.00330427355026042,0.303421620677556,-0.507418125649405, -7.8961681019396e-05,0.00395931480214462,0.31867143188528,-0.536357057449389, -8.20202582898499e-05,0.00461435605402771,0.333921243093004,-0.565295989249374, -8.50788355594156e-05,0.00526939730591214,0.349171054300729,-0.594234921049358, -8.81374128287593e-05,0.00592443855779701,0.364420865508454,-0.623173852849342, -9.1195990098436e-05,0.00657947980968121,0.379670676716179,-0.652112784649326, -9.42545673681128e-05,0.00723452106156586,0.394920487923903,-0.681051716449311, -9.73131446380116e-05,0.00788956231344917,0.410170299131627,-0.709990648249295, -0.000100371721908021,0.00854460356533293,0.425420110339352,-0.738929580049279, -2.62811141993613e-05,-0.00712517025886258,0.0592880832589611,-0.0445400712968631, -2.91937237537065e-05,-0.00647931637516425,0.0744131092949161,-0.0735636895889239, -3.21063333081073e-05,-0.00583346249146593,0.0895381353308712,-0.102587307880985, -3.50189428625636e-05,-0.00518760860776779,0.104663161366826,-0.131610926173046, -3.79315524170754e-05,-0.00454175472406959,0.119788187402781,-0.160634544465106, -4.08441619714206e-05,-0.00389590084037161,0.134913213438736,-0.189658162757167, -4.37567715258491e-05,-0.00325004695667308,0.150038239474691,-0.218681781049228, -4.66693810802221e-05,-0.00260419307297477,0.165163265510646,-0.247705399341289, -4.95819906347617e-05,-0.0019583391892769,0.180288291546601,-0.27672901763335, -5.24946001890791e-05,-0.00131248530557837,0.195413317582556,-0.30575263592541, -5.54072097435632e-05,-0.000666631421880615,0.210538343618511,-0.334776254217471, -5.83198192981027e-05,-2.07775381819708e-05,0.225663369654466,-0.363799872509532, -6.12324288523647e-05,0.000625076345516229,0.240788395690421,-0.392823490801593, -6.41450384065712e-05,0.00127093022921465,0.255913421726376,-0.421847109093654, -6.70576479612217e-05,0.00191678411291285,0.271038447762331,-0.450870727385714, -6.99702575155392e-05,0.00256263799661105,0.286163473798286,-0.479894345677775, -7.28828670699677e-05,0.00320849188030947,0.301288499834241,-0.508917963969836, -7.57954766245073e-05,0.00385434576400745,0.316413525870196,-0.537941582261897, -7.87080861786027e-05,0.00450019964770609,0.331538551906151,-0.566965200553958, -8.16206957334753e-05,0.00514605353140385,0.346663577942106,-0.595988818846019, -8.45333052880148e-05,0.00579190741510205,0.361788603978061,-0.625012437138079, -8.74459148416662e-05,0.00643776129880091,0.376913630014016,-0.65403605543014, -9.03585243967608e-05,0.00708361518249845,0.392038656049971,-0.683059673722201, -9.32711339513004e-05,0.00772946906619687,0.407163682085927,-0.712083292014262, -9.61837435055068e-05,0.00837532294989485,0.422288708121881,-0.741106910306323, -2.53794224035347e-05,-0.00705877183441364,0.0591081483077737,-0.0447297191618403, -2.81050807483113e-05,-0.00642536954754025,0.074069130089697,-0.0738642115949753, -3.0830739092963e-05,-0.00579196726066661,0.0890301118716205,-0.10299870402811, -3.35563974377118e-05,-0.00515856497379319,0.103991093653544,-0.132133196461245, -3.62820557824606e-05,-0.00452516268691971,0.118952075435467,-0.16126768889438, -3.90077141270151e-05,-0.00389176040004591,0.133913057217391,-0.190402181327515, -4.17333724717084e-05,-0.00325835811317254,0.148874038999314,-0.21953667376065, -4.44590308165682e-05,-0.00262495582629918,0.163835020781237,-0.248671166193785, -4.71846891612615e-05,-0.00199155353942582,0.178796002563161,-0.27780565862692, -4.99103475058993e-05,-0.00135815125255223,0.193756984345084,-0.306940151060055, -5.26360058507591e-05,-0.000724748965678756,0.208717966127007,-0.33607464349319, -5.53616641952859e-05,-9.13466788048378e-05,0.223678947908931,-0.365209135926325, -5.80873225402567e-05,0.000542055608067749,0.238639929690854,-0.39434362835946, -6.08129808845614e-05,0.00117545789494211,0.253600911472778,-0.423478120792595, -6.35386392294768e-05,0.00180886018181514,0.268561893254701,-0.452612613225731, -6.62642975741701e-05,0.00244226246868862,0.283522875036624,-0.481747105658865, -6.89899559187523e-05,0.00307566475556298,0.298483856818548,-0.510881598092001, -7.17156142635567e-05,0.00370906704243579,0.313444838600471,-0.540016090525135, -7.444127260825e-05,0.00434246932930971,0.328405820382395,-0.56915058295827, -7.71669309531653e-05,0.00497587161618274,0.343366802164317,-0.598285075391405, -7.98925892977476e-05,0.00560927390305643,0.358327783946241,-0.62741956782454, -8.26182476426629e-05,0.00624267618992969,0.373288765728164,-0.656554060257675, -8.53439059870231e-05,0.00687607847680338,0.388249747510087,-0.68568855269081, -8.80695643321605e-05,0.00750948076367619,0.403210729292011,-0.714823045123946, -9.07952226765207e-05,0.00814288305055078,0.418171711073935,-0.74395753755708, -2.42169219448612e-05,-0.0069748910802756,0.0588759956276035,-0.0449724007196165, -2.67104048698452e-05,-0.00635812307561145,0.0736259484247471,-0.0742487724682725, -2.92038877948153e-05,-0.00574135507094725,0.0883759012218906,-0.103525144216928, -3.16973707195078e-05,-0.00512458706628288,0.103125854019034,-0.132801515965584, -3.41908536445612e-05,-0.00450781906161868,0.117875806816178,-0.16207788771424, -3.66843365696146e-05,-0.00389105105695464,0.132625759613321,-0.191354259462896, -3.91778194944736e-05,-0.00327428305229027,0.147375712410465,-0.220630631211552, -4.16713024194437e-05,-0.00265751504762612,0.162125665207608,-0.249907002960208, -4.41647853443583e-05,-0.00204074704296209,0.176875618004752,-0.279183374708864, -4.66582682692174e-05,-0.00142397903829772,0.191625570801895,-0.30845974645752, -4.91517511940764e-05,-0.000807211033633237,0.206375523599039,-0.337736118206176, -5.16452341192131e-05,-0.000190443028969423,0.221125476396183,-0.367012489954832, -5.41387170442942e-05,0.000426324975694392,0.235875429193326,-0.396288861703488, -5.66321999692088e-05,0.00104309298035887,0.25062538199047,-0.425565233452144, -5.91256828940123e-05,0.00165986098502291,0.265375334787613,-0.4548416052008, -6.16191658188159e-05,0.00227662898968739,0.280125287584757,-0.484117976949456, -6.41126487441745e-05,0.00289339699435098,0.2948752403819,-0.513394348698112, -6.6606131668534e-05,0.00351016499901591,0.309625193179044,-0.542670720446768, -6.90996145936706e-05,0.00412693300368039,0.324375145976188,-0.571947092195424, -7.15930975185852e-05,0.0047437010083442,0.339125098773331,-0.60122346394408, -7.40865804437219e-05,0.00536046901300846,0.353875051570474,-0.630499835692736, -7.65800633678593e-05,0.00597723701767316,0.368625004367618,-0.659776207441392, -7.90735462937731e-05,0.00659400502233654,0.383374957164761,-0.689052579190047, -8.15670292182435e-05,0.00721077302700124,0.398124909961905,-0.718328950938704, -8.40605121431581e-05,0.0078275410316655,0.412874862759049,-0.74760532268736, -2.27583961417144e-05,-0.0068723398930263,0.0585844867841895,-0.045274022225637, -2.49747339643308e-05,-0.00627734400617658,0.0730704197735651,-0.074726731448029, -2.7191071786753e-05,-0.00568234811932666,0.0875563527629407,-0.104179440670421, -2.94074096093e-05,-0.00508735223247692,0.102042285752316,-0.133632149892813, -3.16237474319025e-05,-0.00449235634562717,0.116528218741692,-0.163084859115205, -3.38400852544218e-05,-0.00389736045877742,0.131014151731067,-0.192537568337597, -3.60564230769689e-05,-0.00330236457192745,0.145500084720443,-0.221990277559989, -3.82727608995159e-05,-0.00270736868507782,0.159986017709819,-0.251442986782381, -4.04890987221185e-05,-0.00211237279822818,0.174471950699194,-0.280895696004773, -4.270543654461e-05,-0.0015173769113781,0.18895788368857,-0.310348405227165, -4.49217743672681e-05,-0.000922381024528462,0.203443816677946,-0.339801114449557, -4.71381121896486e-05,-0.000327385137678382,0.217929749667321,-0.369253823671949, -4.93544500122511e-05,0.000267610749171254,0.232415682656697,-0.398706532894342, -5.15707878347982e-05,0.000862606636021113,0.246901615646072,-0.428159242116734, -5.37871256572897e-05,0.00145760252287097,0.261387548635448,-0.457611951339126, -5.60034634798923e-05,0.00205259840972039,0.275873481624823,-0.487064660561518, -5.82198013021618e-05,0.00264759429657069,0.290359414614199,-0.51651736978391, -6.04361391250974e-05,0.0032425901834201,0.304845347603575,-0.545970079006302, -6.26524769475889e-05,0.00383758607026974,0.31933128059295,-0.575422788228694, -6.48688147699694e-05,0.00443258195711982,0.333817213582326,-0.604875497451086, -6.70851525922389e-05,0.00502757784396968,0.348303146571701,-0.634328206673478, -6.93014904147304e-05,0.00562257373081954,0.362789079561077,-0.66378091589587, -7.15178282366669e-05,0.00621756961767028,0.377275012550453,-0.693233625118262, -7.37341660600466e-05,0.00681256550451881,0.391760945539828,-0.722686334340654, -7.59505038830932e-05,0.00740756139136778,0.406246878529203,-0.752139043563046, -2.09896723926684e-05,-0.00675189391053091,0.0582306870362514,-0.0456356018562426, -2.28911588340958e-05,-0.00618460437605056,0.0723975777075627,-0.075299701968683, -2.47926452754677e-05,-0.00561731484157013,0.0865644683788739,-0.104963802081123, -2.66941317169644e-05,-0.00505002530708998,0.100731359050185,-0.134627902193564, -2.85956181584335e-05,-0.00448273577260982,0.114898249721496,-0.164292002306004, -3.04971045997915e-05,-0.00391544623812956,0.129065140392807,-0.193956102418445, -3.23985910411495e-05,-0.00334815670364919,0.143232031064119,-0.223620202530885, -3.4300077482452e-05,-0.0027808671691687,0.15739892173543,-0.253284302643326, -3.62015639240321e-05,-0.00221357763468855,0.171565812406741,-0.282948402755766, -3.81030503653346e-05,-0.00164628810020817,0.185732703078052,-0.312612502868207, -4.00045368067481e-05,-0.0010789985657278,0.199899593749363,-0.342276602980647, -4.19060232480506e-05,-0.000511709031247198,0.214066484420675,-0.371940703093087, -4.38075096894641e-05,5.55805032329548e-05,0.228233375091986,-0.401604803205528, -4.57089961309887e-05,0.00062287003771333,0.242400265763297,-0.431268903317968, -4.76104825724022e-05,0.00119015957219326,0.256567156434608,-0.460933003430409, -4.95119690139267e-05,0.00175744910667364,0.270734047105919,-0.490597103542849, -5.14134554552292e-05,0.00232473864115401,0.28490093777723,-0.52026120365529, -5.33149418967538e-05,0.00289202817563394,0.299067828448541,-0.54992530376773, -5.52164283381673e-05,0.00345931771011387,0.313234719119852,-0.57958940388017, -5.71179147794698e-05,0.00402660724459469,0.327401609791164,-0.609253503992611, -5.90194012208833e-05,0.00459389677907529,0.341568500462475,-0.638917604105051, -6.09208876626299e-05,0.005161186313555,0.355735391133786,-0.668581704217492, -6.28223741040435e-05,0.00572847584803515,0.369902281805097,-0.698245804329932, -6.472386054579e-05,0.00629576538251531,0.384069172476408,-0.727909904442373, -6.66253469867595e-05,0.00686305491699635,0.39823606314772,-0.757574004554813, -1.89311786960439e-05,-0.00661695961314956,0.0578186243856483,-0.0460507569456302, -2.04957256269706e-05,-0.00608364584900739,0.0716157856959496,-0.0759575698560974, -2.20602725578278e-05,-0.00555033208486505,0.085412947006251,-0.105864382766565, -2.36248194886157e-05,-0.00501701832072277,0.0992101083165523,-0.135771195677032, -2.51893664195424e-05,-0.00448370455658043,0.113007269626854,-0.165678008587499, -2.67539133505523e-05,-0.00395039079243842,0.126804430937155,-0.195584821497966, -2.83184602813402e-05,-0.00341707702829597,0.140601592247456,-0.225491634408434, -2.98830072125167e-05,-0.00288376326415407,0.154398753557758,-0.255398447318901, -3.14475541430825e-05,-0.0023504495000114,0.168195914868059,-0.285305260229368, -3.3012101074148e-05,-0.00181713573586939,0.18199307617836,-0.315212073139835, -3.45766480051024e-05,-0.00128382197172727,0.195790237488662,-0.345118886050302, -3.61411949358348e-05,-0.00075050820758471,0.209587398798963,-0.37502569896077, -3.77057418669002e-05,-0.000217194443442814,0.223384560109264,-0.404932511871237, -3.92702887974661e-05,0.000316119320699748,0.237181721419566,-0.434839324781704, -4.0834835728476e-05,0.000849433084842088,0.250978882729867,-0.464746137692171, -4.23993826591529e-05,0.00138274684898443,0.264776044040169,-0.494652950602639, -4.39639295901628e-05,0.00191606061312677,0.27857320535047,-0.524559763513106, -4.55284765215058e-05,0.00244937437726822,0.292370366660771,-0.554466576423573, -4.70930234520717e-05,0.00298268814141078,0.306167527971072,-0.58437338933404, -4.86575703828596e-05,0.00351600190555335,0.319964689281374,-0.614280202244507, -5.02221173135364e-05,0.00404931566969591,0.333761850591676,-0.644187015154975, -5.17866642448794e-05,0.00458262943383758,0.347559011901977,-0.674093828065442, -5.33512111760004e-05,0.00511594319797926,0.361356173212278,-0.704000640975909, -5.49157581065662e-05,0.00564925696212271,0.37515333452258,-0.733907453886376, -5.648030503691e-05,0.00618257072626482,0.388950495832881,-0.763814266796844, -1.66470254656104e-05,-0.00647361313829381,0.0573611600706776,-0.04650446136626, -1.78751135015004e-05,-0.00598008142069067,0.0707500867390631,-0.076676524233245, -1.91032015374459e-05,-0.00548654970308754,0.0841390134074487,-0.10684858710023, -2.03312895733776e-05,-0.00499301798548435,0.0975279400758344,-0.137020649967215, -2.15593776093093e-05,-0.00449948626788133,0.11091686674422,-0.1671927128342, -2.27874656453242e-05,-0.0040059545502783,0.124305793412605,-0.197364775701185, -2.40155536812003e-05,-0.00351242283267506,0.137694720080991,-0.22753683856817, -2.524364171691e-05,-0.0030188911150717,0.151083646749377,-0.257708901435155, -2.64717297531192e-05,-0.0025253593974689,0.164472573417762,-0.28788096430214, -2.76998177888288e-05,-0.00203182767986543,0.177861500086148,-0.318053027169125, -2.8927905825149e-05,-0.00153829596226274,0.191250426754533,-0.34822509003611, -3.01559938605811e-05,-0.00104476424465938,0.204639353422919,-0.378397152903095, -3.13840818968458e-05,-0.000551232527056245,0.218028280091305,-0.40856921577008, -3.26121699325554e-05,-5.77008094531095e-05,0.23141720675969,-0.438741278637065, -3.38402579687092e-05,0.000435830908150026,0.244806133428076,-0.46891334150405, -3.50683460041967e-05,0.000929362625753605,0.258195060096461,-0.499085404371035, -3.62964340406835e-05,0.00142289434335607,0.271583986764847,-0.52925746723802, -3.75245220763931e-05,0.00191642606095943,0.284972913433232,-0.559429530105005, -3.87526101122138e-05,0.00240995777856257,0.298361840101618,-0.58960159297199, -3.99806981481454e-05,0.0029034894961657,0.311750766770003,-0.619773655838975, -4.12087861839661e-05,0.00339702121376906,0.325139693438389,-0.64994571870596, -4.24368742201198e-05,0.00389055293137197,0.338528620106775,-0.680117781572945, -4.36649622556073e-05,0.00438408464897577,0.351917546775161,-0.710289844439929, -4.48930502920941e-05,0.0048776163665778,0.365306473443546,-0.740461907306915, -4.61211383281368e-05,0.00537114808418071,0.378695400111931,-0.7706339701739, -1.42427884829849e-05,-0.00632971345519029,0.0568795639046676,-0.0469743050743908, -1.51596241397545e-05,-0.00588030446785154,0.0698411395937946,-0.0774210534359073, -1.60764597967322e-05,-0.00543089548051295,0.0828027152829215,-0.107867801797424, -1.69932954535712e-05,-0.00498148649317443,0.0957642909720484,-0.13831455015894, -1.79101311104657e-05,-0.00453207750583573,0.108725866661175,-0.168761298520457, -1.88269667673047e-05,-0.00408266851849703,0.121687442350302,-0.199208046881973, -1.97438024240881e-05,-0.00363325953115845,0.134649018039429,-0.22965479524349, -2.06606380810381e-05,-0.00318385054381976,0.147610593728556,-0.260101543605006, -2.15774737381547e-05,-0.00273444155648161,0.160572169417683,-0.290548291966523, -2.24943093948271e-05,-0.00228503256914259,0.17353374510681,-0.320995040328039, -2.34111450516661e-05,-0.00183562358180422,0.186495320795937,-0.351441788689556, -2.43279807084495e-05,-0.00138621459446542,0.199456896485064,-0.381888537051072, -2.52448163652885e-05,-0.000936805607126612,0.212418472174191,-0.412335285412589, -2.6161652022072e-05,-0.00048739661978825,0.225380047863317,-0.442782033774105, -2.7078487678911e-05,-3.79876324492212e-05,0.238341623552444,-0.473228782135622, -2.7995323335972e-05,0.000411421354889141,0.251303199241571,-0.503675530497138, -2.89121589926999e-05,0.000860830342227725,0.264264774930698,-0.534122278858655, -2.9828994649872e-05,0.00131023932956631,0.277226350619825,-0.564569027220171, -3.0745830306822e-05,0.00175964831690489,0.290187926308952,-0.595015775581688, -3.1662665963772e-05,0.00220905730424326,0.303149501998079,-0.625462523943204, -3.25795016201669e-05,0.00265846629158251,0.316111077687206,-0.655909272304721, -3.34963372773389e-05,0.00310787527892042,0.329072653376333,-0.686356020666237, -3.44131729342889e-05,0.00355728426625879,0.342034229065459,-0.716802769027754, -3.53300085910169e-05,0.00400669325359759,0.354995804754586,-0.74724951738927, -3.62468442477448e-05,0.0044561022409364,0.367957380443713,-0.777696265750787, -1.18487128997202e-05,-0.00619326655079422,0.0564001055218364,-0.04743450078835, -1.2499750499384e-05,-0.00578996693775052,0.0689385738635717,-0.0781502941218063, -1.31507880989923e-05,-0.00538666732470688,0.0814770422053068,-0.108866087455263, -1.38018256987948e-05,-0.00498336771166341,0.094015510547042,-0.139581880788719, -1.44528632982921e-05,-0.00458006809861966,0.106553978888777,-0.170297674122175, -1.51039008980391e-05,-0.00417676848557602,0.119092447230512,-0.201013467455632, -1.5754938497814e-05,-0.0037734688725326,0.131630915572247,-0.231729260789088, -1.64059760973112e-05,-0.00337016925948874,0.144169383913983,-0.262445054122544, -1.70570136970305e-05,-0.00296686964644532,0.156707852255718,-0.293160847456001, -1.77080512969163e-05,-0.00256357003340191,0.169246320597453,-0.323876640789457, -1.83590888963026e-05,-0.00216027042035782,0.181784788939188,-0.354592434122913, -1.90101264960774e-05,-0.00175697080731441,0.194323257280923,-0.38530822745637, -1.96611640961297e-05,-0.00135367119427099,0.206861725622659,-0.416024020789826, -2.0312201695627e-05,-0.000950371581227349,0.219400193964394,-0.446739814123282, -2.09632392947912e-05,-0.000547071968183044,0.231938662306129,-0.477455607456739, -2.16142768949545e-05,-0.00014377235514007,0.244477130647864,-0.508171400790195, -2.22653144947849e-05,0.000259527257903347,0.257015598989599,-0.538887194123651, -2.2916352093949e-05,0.000662826870947431,0.269554067331335,-0.569602987457108, -2.35673896938904e-05,0.00106612648399063,0.282092535673069,-0.600318780790564, -2.42184272931656e-05,0.00146942609703471,0.294631004014805,-0.63103457412402, -2.4869464893329e-05,0.0018727257100779,0.30716947235654,-0.661750367457477, -2.55205024934924e-05,0.0022760253231211,0.319707940698275,-0.692466160790933, -2.61715400923235e-05,0.00267932493616518,0.33224640904001,-0.72318195412439, -2.68225776921538e-05,0.00308262454920882,0.344784877381745,-0.753897747457846, -2.74736152920951e-05,0.00348592416225246,0.357323345723481,-0.784613540791302, -9.59285573970403e-06,-0.00607071185607524,0.0559485849309637,-0.0478613003010824, -1.00341497088624e-05,-0.00571274019390927,0.0680906422344277,-0.0788266141308056, -1.04754436778542e-05,-0.00535476853174316,0.0802326995378917,-0.109791927960529, -1.09167376469987e-05,-0.0049967968695771,0.0923747568413559,-0.140757241790252, -1.13580316161432e-05,-0.0046388252074111,0.10451681414482,-0.171722555619976, -1.1799325585371e-05,-0.00428085354524532,0.116658871448284,-0.202687869449699, -1.2240619554349e-05,-0.00392288188307921,0.128800928751748,-0.233653183279422, -1.26819135233824e-05,-0.0035649102209131,0.140942986055212,-0.264618497109145, -1.31232074925824e-05,-0.0032069385587471,0.153085043358676,-0.295583810938869, -1.35645014618935e-05,-0.00284896689658143,0.16522710066214,-0.326549124768592, -1.40057954307604e-05,-0.00249099523441521,0.177369157965604,-0.357514438598315, -1.44470893999604e-05,-0.0021330235722492,0.189511215269068,-0.388479752428039, -1.48883833688829e-05,-0.00177505191008298,0.201653272572532,-0.419445066257762, -1.53296773383049e-05,-0.00141708024791742,0.213795329875996,-0.450410380087485, -1.57709713073384e-05,-0.0010591085857512,0.22593738717946,-0.481375693917208, -1.62122652762609e-05,-0.000701136923585199,0.238079444482924,-0.512341007746932, -1.66535592456274e-05,-0.00034316526141942,0.250221501786388,-0.543306321576655, -1.70948532147719e-05,1.48064007463589e-05,0.262363559089852,-0.574271635406378, -1.75361471838054e-05,0.000372778062912582,0.274505616393316,-0.605236949236102, -1.79774411530609e-05,0.000730749725078361,0.28664767369678,-0.636202263065825, -1.84187351220944e-05,0.00108872138724481,0.298789731000244,-0.667167576895548, -1.88600290911278e-05,0.00144669304941081,0.310931788303708,-0.698132890725272, -1.93013230600503e-05,0.00180466471157681,0.323073845607172,-0.729098204554995, -1.97426170291948e-05,0.00216263637374237,0.335215902910635,-0.760063518384718, -2.01839109986723e-05,0.00252060803590837,0.3473579602141,-0.791028832214441, -7.57517455252099e-06,-0.00596586621096029,0.0555450709451129,-0.0482375490255339, -7.86266118284196e-06,-0.0056499052921945,0.0673344695282808,-0.0794228297616014, -8.15014781332946e-06,-0.00533394437342888,0.0791238681114488,-0.110608110497669, -8.43763444380308e-06,-0.00501798345466331,0.0909132666946166,-0.141793391233736, -8.72512107416568e-06,-0.00470202253589747,0.102702665277785,-0.172978671969804, -9.01260770475032e-06,-0.00438606161713206,0.114492063860952,-0.204163952705871, -9.30009433519619e-06,-0.00407010069836633,0.12628146244412,-0.235349233441939, -9.58758096547552e-06,-0.00375413977960026,0.138070861027289,-0.266534514178006, -9.87506759586587e-06,-0.00343817886083453,0.149860259610457,-0.297719794914074, -1.01625542266448e-05,-0.00312221794206935,0.161649658193624,-0.328905075650142, -1.04500408568131e-05,-0.00280625702330339,0.173439056776792,-0.360090356386209, -1.07375274873145e-05,-0.0024902961045381,0.18522845535996,-0.391275637122276, -1.10250141178159e-05,-0.00217433518577237,0.197017853943128,-0.422460917858344, -1.13125007482617e-05,-0.00185837426700641,0.208807252526296,-0.453646198594411, -1.15999873788741e-05,-0.00154241334824112,0.220596651109464,-0.484831479330479, -1.18874740092645e-05,-0.00122645242947539,0.232386049692632,-0.516016760066546, -1.21749606394328e-05,-0.000910491510709432,0.2441754482758,-0.547202040802614, -1.24624472701562e-05,-0.00059453059194392,0.255964846858968,-0.578387321538681, -1.27499339002135e-05,-0.000278569673178186,0.267754245442135,-0.609572602274749, -1.30374205303818e-05,3.73912455882142e-05,0.279543644025304,-0.640757883010816, -1.33249071612163e-05,0.000353352164352838,0.291333042608471,-0.671943163746884, -1.36123937919397e-05,0.00066931308311835,0.303122441191639,-0.703128444482952, -1.3899880421997e-05,0.000985274001884751,0.314911839774807,-0.734313725219019, -1.41873670521653e-05,0.00130123492065071,0.326701238357975,-0.765499005955087, -1.44748536839989e-05,0.00161719583941489,0.338490636941143,-0.796684286691154, -5.85291751924177e-06,-0.00587982223885913,0.055200969110531,-0.0485546865512454, -6.03458705161763e-06,-0.00560076788768915,0.0666907856685643,-0.079925375916985, -6.21625658403513e-06,-0.00532171353651917,0.0781806022265976,-0.111296065282725, -6.39792611628609e-06,-0.00504265918534896,0.0896704187846309,-0.142666754648464, -6.57959564870358e-06,-0.00476360483417904,0.101160235342664,-0.174037444014204, -6.76126518128761e-06,-0.00448455048300944,0.112650051900697,-0.205408133379943, -6.94293471348306e-06,-0.00420549613183918,0.124139868458731,-0.236778822745683, -7.12460424601158e-06,-0.00392644178066914,0.135629685016764,-0.268149512111422, -7.30627377809601e-06,-0.00364738742949899,0.147119501574797,-0.299520201477162, -7.48794331079106e-06,-0.0033683330783294,0.15860931813283,-0.330890890842902, -7.66961284337508e-06,-0.00308927872715947,0.170099134690864,-0.362261580208641, -7.851282375404e-06,-0.00281022437598932,0.181588951248897,-0.393632269574381, -8.03295190798803e-06,-0.0025311700248194,0.19307876780693,-0.42500295894012, -8.2146214402945e-06,-0.00225211567364947,0.204568584364963,-0.45637364830586, -8.39629097293404e-06,-0.00197306132247976,0.216058400922997,-0.487744337671599, -8.57796050512949e-06,-0.00169400697130939,0.22754821748103,-0.519115027037339, -8.75963003721392e-06,-0.00141495262013946,0.239038034039063,-0.550485716403079, -8.94129957018652e-06,-0.00113589826896954,0.250527850597097,-0.581856405768818, -9.12296910238197e-06,-0.00085684391779961,0.26201766715513,-0.613227095134558, -9.30463863491049e-06,-0.000577789566630127,0.273507483713163,-0.644597784500297, -9.48630816699492e-06,-0.000298735215459089,0.284997300271197,-0.675968473866037, -9.66797769930139e-06,-1.96808642889401e-05,0.29648711682923,-0.707339163231776, -9.84964723171888e-06,0.000259373486879877,0.307976933387262,-0.738709852597516, -1.00313167636923e-05,0.000538427838051359,0.319466749945297,-0.770080541963256, -1.02129862968869e-05,0.000817482189219731,0.330956566503329,-0.801451231328995, -4.44050545927999e-06,-0.00581156574737568,0.0549190472023984,-0.0488120486915552, -4.55304085171526e-06,-0.00556346920329315,0.066164182659506,-0.0803332001057616, -4.66557624420605e-06,-0.00531537265921084,0.0774093181166134,-0.111854351519968, -4.7781116366552e-06,-0.00506727611512836,0.0886544535737209,-0.143375502934175, -4.89064702915987e-06,-0.00481917957104605,0.0998995890308284,-0.174896654348381, -5.00318242158126e-06,-0.00457108302696352,0.111144724487936,-0.206417805762588, -5.11571781386388e-06,-0.00432298648288099,0.122389859945043,-0.237938957176794, -5.22825320653508e-06,-0.00407488993879868,0.133634995402151,-0.269460108591001, -5.34078859898424e-06,-0.00382679339471614,0.144880130859259,-0.300981260005207, -5.45332399143339e-06,-0.00357869685063372,0.156125266316366,-0.332502411419414, -5.56585938371601e-06,-0.00333060030655119,0.167370401773474,-0.36402356283362, -5.67839477599863e-06,-0.00308250376246821,0.178615537230581,-0.395544714247827, -5.79093016844778e-06,-0.00283440721838635,0.189860672687688,-0.427065865662033, -5.90346556095245e-06,-0.00258631067430382,0.201105808144796,-0.45858701707624, -6.01600095384569e-06,-0.00233821413022173,0.212350943601904,-0.490108168490446, -6.12853634596178e-06,-0.00209011758613853,0.223596079059011,-0.521629319904652, -6.24107173863298e-06,-0.00184202104205666,0.234841214516119,-0.553150471318859, -6.35360713086008e-06,-0.00159392449797413,0.246086349973226,-0.584671622733065, -6.46614252330924e-06,-0.00134582795389182,0.257331485430333,-0.616192774147272, -6.57867791564737e-06,-0.00109773140980884,0.268576620887441,-0.647713925561478, -6.69121330909572e-06,-0.000849634865727644,0.279821756344548,-0.679235076975685, -6.80374870098976e-06,-0.000601538321644668,0.291066891801656,-0.710756228389892, -6.91628409321687e-06,-0.000353441777561692,0.302312027258764,-0.742277379804098, -7.02881948633216e-06,-0.000105345233480492,0.313557162715871,-0.773798531218305, -7.14135487844825e-06,0.000142751310602485,0.324802298172979,-0.805319682632511, -3.31973059683466e-06,-0.00575884980193198,0.0546955368165693,-0.0490145482464725, -3.38879714462115e-06,-0.0055357471369798,0.0657471645046427,-0.0806540873062349, -3.45786369237988e-06,-0.00531264447202762,0.0767987921927161,-0.112293626365997, -3.52693024002759e-06,-0.00508954180707522,0.0878504198807896,-0.14393316542576, -3.59599678795286e-06,-0.00486643914212315,0.0989020475688629,-0.175572704485522, -3.66506333560057e-06,-0.00464333647717075,0.109953675256936,-0.207212243545285, -3.73412988341482e-06,-0.00442023381221845,0.12100530294501,-0.238851782605047, -3.80319643111804e-06,-0.00419713114726605,0.132056930633084,-0.270491321664809, -3.87226297915433e-06,-0.00397402848231443,0.143108558321157,-0.302130860724572, -3.94132952680204e-06,-0.00375092581736203,0.15416018600923,-0.333770399784334, -4.01039607411668e-06,-0.00352782315240896,0.165211813697304,-0.365409938844097, -4.07946262231951e-06,-0.00330472048745745,0.176263441385377,-0.397049477903859, -4.14852917002273e-06,-0.00308161782250505,0.187315069073451,-0.428689016963622, -4.2175957174484e-06,-0.00285851515755242,0.198366696761524,-0.460328556023384, -4.28666226548469e-06,-0.00263541249260091,0.209418324449597,-0.491968095083147, -4.35572881329893e-06,-0.00241230982764851,0.220469952137671,-0.523607634142909, -4.42479536066909e-06,-0.00218920716269611,0.231521579825744,-0.555247173202671, -4.4938619088164e-06,-0.00196610449774393,0.242573207513818,-0.586886712262434, -4.56292845663064e-06,-0.00174300183279197,0.253624835201891,-0.618526251322196, -4.63199500422284e-06,-0.00151989916783934,0.264676462889964,-0.650165790381959, -4.70106155192607e-06,-0.00129679650288761,0.275728090578037,-0.681805329441721, -4.77012809951827e-06,-0.00107369383793454,0.286779718266111,-0.713444868501484, -4.83919464788762e-06,-0.00085059117298325,0.297831345954185,-0.745084407561246, -4.90826119481369e-06,-0.000627488508029739,0.308882973642258,-0.776723946621009, -4.97732774284998e-06,-0.000404385843077559,0.319934601330332,-0.808363485680771, -2.45340071673705e-06,-0.00571896343692924,0.0545229018106951,-0.0491700415113413, -2.49581029534984e-06,-0.00551543306426827,0.0654253513504637,-0.0809004868525282, -2.53821987394875e-06,-0.0053119026916072,0.0763278008902324,-0.112630932193715, -2.58062945240889e-06,-0.0051083723189459,0.0872302504300012,-0.144361377534902, -2.62303903095229e-06,-0.00490484194628504,0.0981326999697696,-0.176091822876089, -2.66544860949569e-06,-0.00470131157362386,0.109035149509538,-0.207822268217276, -2.7078581883444e-06,-0.00449778120096311,0.119937599049307,-0.239552713558462, -2.75026776674903e-06,-0.00429425082830182,0.130840048589076,-0.271283158899649, -2.79267734526467e-06,-0.00409072045564074,0.141742498128844,-0.303013604240836, -2.83508692394685e-06,-0.00388719008298,0.152644947668613,-0.334744049582023, -2.87749650229596e-06,-0.00368365971031848,0.163547397208382,-0.36647449492321, -2.91990608081161e-06,-0.00348012933765762,0.17444984674815,-0.398204940264397, -2.96231565988236e-06,-0.00327659896499699,0.185352296287919,-0.429935385605584, -3.00472523795392e-06,-0.00307306859233525,0.196254745827688,-0.46166583094677, -3.04713481646957e-06,-0.00286953821967395,0.207157195367456,-0.493396276287957, -3.08954439487419e-06,-0.00266600784701287,0.218059644907225,-0.525126721629144, -3.13195397350086e-06,-0.00246247747435202,0.228962094446993,-0.556857166970331, -3.17436355234957e-06,-0.00225894710169117,0.239864543986762,-0.588587612311518, -3.21677313119828e-06,-0.00205541672903053,0.25076699352653,-0.620318057652705, -3.25918270949188e-06,-0.00185188635636901,0.261669443066299,-0.652048502993891, -3.30159228800753e-06,-0.00164835598370772,0.272571892606068,-0.683778948335078, -3.34400186652317e-06,-0.00144482561104686,0.283474342145836,-0.715509393676265, -3.38641144503882e-06,-0.00124129523838645,0.294376791685604,-0.747239839017452, -3.42882102366548e-06,-0.00103776486572427,0.305279241225374,-0.778970284358639, -3.47123060229215e-06,-0.000834234493063413,0.316181690765143,-0.810700729699826, -1.79723251893249e-06,-0.00568924620187969,0.0543922282550564,-0.0492872186713995, -1.82349798166781e-06,-0.00550068362258754,0.065181921298203,-0.0810861694870695, -1.84976344422272e-06,-0.00531212104329515,0.0759716143413497,-0.112885120302739, -1.87602890705518e-06,-0.00512355846400303,0.0867613073844965,-0.144684071118409, -1.90229436969336e-06,-0.0049349958847108,0.0975510004276431,-0.176483021934079, -1.92855983244256e-06,-0.00474643330541868,0.10834069347079,-0.208281972749749, -1.95482529502522e-06,-0.00455787072612646,0.119130386513936,-0.240080923565419, -1.98109075788544e-06,-0.00436930814683434,0.129920079557083,-0.271879874381089, -2.00735622030157e-06,-0.00418074556754178,0.14070977260023,-0.303678825196759, -2.03362168277321e-06,-0.00399218298824922,0.151499465643377,-0.335477776012429, -2.05988714607752e-06,-0.00380362040895799,0.162289158686523,-0.367276726828099, -2.08615260838263e-06,-0.00361505782966542,0.17307885172967,-0.399075677643769, -2.11241807129836e-06,-0.00342649525037308,0.183868544772817,-0.430874628459438, -2.13868353382551e-06,-0.00323793267108075,0.194658237815963,-0.462673579275108, -2.16494899696329e-06,-0.00304937009178952,0.205447930859109,-0.494472530090778, -2.19121445943493e-06,-0.00286080751249673,0.216237623902256,-0.526271480906448, -2.21747992190657e-06,-0.00267224493320417,0.227027316945403,-0.558070431722118, -2.2437453848223e-06,-0.0024836823539125,0.237817009988549,-0.589869382537788, -2.27001084740497e-06,-0.00229511977461994,0.248606703031696,-0.621668333353458, -2.29627631009865e-06,-0.0021065571953276,0.259396396074843,-0.653467284169128, -2.32254177268132e-06,-0.00191799461603548,0.27018608911799,-0.685266234984798, -2.34880723537501e-06,-0.00172943203674336,0.280975782161136,-0.717065185800468, -2.37507269829074e-06,-0.00154086945745124,0.291765475204283,-0.748864136616137, -2.40133816065136e-06,-0.00135230687815868,0.30255516824743,-0.780663087431807, -2.42760362356709e-06,-0.00116374429886656,0.313344861290576,-0.812462038247477, -1.30786010667239e-06,-0.00566735681711797,0.0542948197846209,-0.0493742777079591, -1.32436299335459e-06,-0.00549003648582658,0.0650005499420833,-0.0812241259903759, -1.34086588032822e-06,-0.00531271615453555,0.0757062800995456,-0.113073974272793, -1.35736876705206e-06,-0.00513539582324418,0.086412010257008,-0.144923822555209, -1.37387165394243e-06,-0.00495807549195304,0.0971177404144702,-0.176773670837626, -1.39037454066626e-06,-0.00478075516066157,0.107823470571933,-0.208623519120043, -1.40687742744561e-06,-0.00460343482937042,0.118529200729395,-0.24047336740246, -1.42338031439149e-06,-0.00442611449807928,0.129234930886857,-0.272323215684876, -1.43988320094879e-06,-0.00424879416678792,0.13994066104432,-0.304173063967293, -1.45638608800569e-06,-0.00407147383549677,0.150646391201782,-0.33602291224971, -1.47288897484055e-06,-0.00389415350420563,0.161352121359244,-0.367872760532127, -1.48939186145336e-06,-0.00371683317291427,0.172057851516707,-0.399722608814543, -1.50589474806617e-06,-0.00353951284162246,0.182763581674169,-0.43157245709696, -1.52239763517859e-06,-0.00336219251033198,0.193469311831631,-0.463422305379377, -1.53890052201344e-06,-0.00318487217904084,0.204175041989093,-0.495272153661794, -1.5554034088483e-06,-0.00300755184774948,0.214880772146556,-0.52712200194421, -1.57190629568316e-06,-0.00283023151645811,0.225586502304018,-0.558971850226627, -1.58840918262904e-06,-0.00265291118516719,0.23629223246148,-0.590821698509044, -1.60491206857571e-06,-0.00247559085387472,0.246997962618943,-0.622671546791461, -1.62141495629875e-06,-0.00229827052258491,0.257703692776405,-0.654521395073878, -1.63791784313361e-06,-0.00212095019129332,0.268409422933868,-0.686371243356294, -1.65442072952438e-06,-0.00194362986000129,0.279115153091331,-0.718221091638711, -1.67092361624821e-06,-0.00176630952871015,0.289820883248793,-0.750070939921128, -1.68742650341613e-06,-0.00158898919741945,0.300526613406255,-0.781920788203545, -1.70392938947383e-06,-0.00141166886612698,0.311232343563717,-0.813770636485961, -9.47073127297027e-07,-0.00565136763978538,0.0542230332692654,-0.0494382805648794, -9.57627861980503e-07,-0.00548237840085608,0.0648669343832368,-0.0813255469420803, -9.68182596622347e-07,-0.00531338916192675,0.0755108354972083,-0.113212813319281, -9.78737331208679e-07,-0.0051443999229972,0.0861547366111798,-0.145100079696482, -9.89292066044811e-07,-0.00497541068406815,0.0967986377251512,-0.176987346073683, -9.9984680046461e-07,-0.00480642144513843,0.107442538839123,-0.208874612450884, -1.01040153527299e-06,-0.00463743220620916,0.118086439953094,-0.240761878828085, -1.02095626985932e-06,-0.00446844296728,0.128730341067066,-0.272649145205286, -1.03151100444565e-06,-0.0042994537283505,0.139374242181037,-0.304536411582487, -1.04206573919852e-06,-0.00413046448942134,0.150018143295009,-0.336423677959688, -1.05262047372934e-06,-0.00396147525049195,0.16066204440898,-0.368310944336889, -1.06317520870425e-06,-0.00379248601156279,0.171305945522952,-0.40019821071409, -1.07372994306854e-06,-0.00362349677263296,0.181949846636923,-0.432085477091291, -1.08428467815447e-06,-0.00345450753370447,0.192593747750894,-0.463972743468491, -1.09483941246324e-06,-0.00328551829477419,0.203237648864866,-0.495860009845692, -1.10539414710509e-06,-0.00311652905584503,0.213881549978837,-0.527747276222893, -1.11594888219102e-06,-0.00294753981691631,0.224525451092809,-0.559634542600094, -1.12650361661082e-06,-0.0027785505779867,0.23516935220678,-0.591521808977295, -1.13705835136368e-06,-0.00260956133905776,0.245813253320751,-0.623409075354496, -1.14761308589451e-06,-0.00244057210012771,0.256457154434723,-0.655296341731697, -1.15816781998124e-06,-0.00227158286119788,0.267101055548695,-0.687183608108898, -1.16872255540024e-06,-0.00210259362226939,0.277744956662666,-0.719070874486099, -1.17927728982004e-06,-0.00193360438333956,0.288388857776638,-0.7509581408633, -1.18983202446188e-06,-0.00176461514441062,0.299032758890609,-0.782845407240501, -1.20038675943679e-06,-0.00159562590548079,0.309676660004581,-0.814732673617702, -6.83342537374787e-07,-0.00563975911363324,0.0541705732794429,-0.0494849689807362, -6.90221258703438e-07,-0.00547688257234463,0.0647693169974282,-0.0813995308827608, -6.97099980240257e-07,-0.0053140060310562,0.0753680607154135,-0.113314092784785, -7.03978701527275e-07,-0.00515112948976748,0.0859668044333988,-0.14522865468681, -7.10857422925315e-07,-0.00498825294847893,0.0965655481513841,-0.177143216588835, -7.17736144240089e-07,-0.00482537640719016,0.107164291869369,-0.209057778490859, -7.24614865721396e-07,-0.00466249986590173,0.117763035587355,-0.240972340392884, -7.31493587258214e-07,-0.00449962332461329,0.12836177930534,-0.272886902294908, -7.38372308461965e-07,-0.00433674678332441,0.138960523023326,-0.304801464196933, -7.45251029887761e-07,-0.00417387024203575,0.149559266741311,-0.336716026098957, -7.52129751424579e-07,-0.00401099370074776,0.160158010459296,-0.368630588000982, -7.59008472850375e-07,-0.00384811715945865,0.170756754177282,-0.400545149903006, -7.65887194442705e-07,-0.00368524061817066,0.181355497895267,-0.432459711805031, -7.72765915590945e-07,-0.00352236407688133,0.191954241613252,-0.464374273707056, -7.79644637072252e-07,-0.00335948753559312,0.202552985331237,-0.49628883560908, -7.86523358553559e-07,-0.00319661099430468,0.213151729049223,-0.528203397511105, -7.93402079701799e-07,-0.0030337344530158,0.223750472767208,-0.560117959413129, -8.00280800850039e-07,-0.00287085791172692,0.234349216485193,-0.592032521315154, -8.07159522664413e-07,-0.00270798137043915,0.244947960203178,-0.623947083217179, -8.14038243812654e-07,-0.00254510482915027,0.255546703921164,-0.655861645119203, -8.20916965182938e-07,-0.00238222828786183,0.266145447639149,-0.687776207021227, -8.27795686775268e-07,-0.00221935174657339,0.276744191357134,-0.719690768923252, -8.3467440803453e-07,-0.00205647520528451,0.28734293507512,-0.751605330825277, -8.41553129293793e-07,-0.00189359866399519,0.297941678793106,-0.783519892727301, -8.48431850664078e-07,-0.00173072212270675,0.308540422511091,-0.815434454629326, -3.3514362659734e-05,-0.0075725860829095,0.0705082317074798,-0.0559502033100555, -3.70593347697179e-05,-0.00689924795748276,0.0859184038549559,-0.0839782955458044, -4.06043068797157e-05,-0.00622590983205606,0.101328576002432,-0.112006387781553, -4.41492789896025e-05,-0.00555257170662915,0.116738748149908,-0.140034480017302, -4.76942510996559e-05,-0.00487923358120257,0.132148920297384,-0.168062572253051, -5.12392232097092e-05,-0.00420589545577577,0.147559092444861,-0.1960906644888, -5.47841953195682e-05,-0.00353255733034896,0.162969264592337,-0.224118756724549, -5.83291674295383e-05,-0.00285921920492205,0.178379436739813,-0.252146848960298, -6.18741395396749e-05,-0.00218588107949558,0.193789608887289,-0.280174941196047, -6.5419111649756e-05,-0.00151254295406877,0.209199781034765,-0.308203033431796, -6.89640837596706e-05,-0.000839204828642082,0.224609953182241,-0.336231125667544, -7.25090558696961e-05,-0.000165866703215611,0.240020125329717,-0.364259217903294, -7.60540279799993e-05,0.000507471422210637,0.255430297477193,-0.392287310139042, -7.95990000896918e-05,0.00118080954763777,0.270840469624669,-0.420315402374791, -8.31439721994398e-05,0.00185414767306469,0.286250641772146,-0.44834349461054, -8.66889443094099e-05,0.00252748579849182,0.301660813919622,-0.476371586846289, -9.0233916419713e-05,0.00320082392391807,0.317070986067098,-0.504399679082038, -9.37788885297941e-05,0.00387416204934476,0.332481158214574,-0.532427771317787, -9.73238606397642e-05,0.00454750017477124,0.34789133036205,-0.560455863553536, -0.000100868832749956,0.00522083830019771,0.363301502509526,-0.588483955789285, -0.000104413804859926,0.00589417642562484,0.378711674657003,-0.616512048025034, -0.000107958776969341,0.00656751455105198,0.394121846804478,-0.644540140260783, -0.000111503749079644,0.00724085267647823,0.409532018951954,-0.672568232496531, -0.000115048721189059,0.00791419080190581,0.424942191099431,-0.70059632473228, -0.000118593693299585,0.00858752892733206,0.440352363246907,-0.728624416968029, -3.333330835599e-05,-0.0075574823956483,0.0704671679721499,-0.0559929789484191, -3.68423786739347e-05,-0.00688598867887147,0.0858488136336203,-0.0840407260669521, -4.03514489917822e-05,-0.00621449496209442,0.101230459295091,-0.112088473185485, -4.3860519309713e-05,-0.00554300124531759,0.116612104956561,-0.140136220304018, -4.73695896275605e-05,-0.0048715075285406,0.131993750618032,-0.168183967422551, -5.08786599457411e-05,-0.00420001381176405,0.147375396279502,-0.196231714541084, -5.43877302634499e-05,-0.00352852009498683,0.162757041940973,-0.224279461659616, -5.78968005812697e-05,-0.00285702637820995,0.178138687602443,-0.252327208778149, -6.14058708990894e-05,-0.00218553266143273,0.193520333263914,-0.280374955896682, -6.49149412169647e-05,-0.00151403894465574,0.208901978925384,-0.308422703015215, -6.84240115350621e-05,-0.000842545227879077,0.224283624586855,-0.336470450133748, -7.19330818528818e-05,-0.000171051511102194,0.239665270248325,-0.364518197252281, -7.54421521707571e-05,0.000500442205674689,0.255046915909795,-0.392565944370814, -7.89512224884659e-05,0.00117193592245157,0.270428561571266,-0.420613691489347, -8.24602928068963e-05,0.00184342963922846,0.285810207232737,-0.44866143860788, -8.59693631239944e-05,0.002514923356006,0.301191852894207,-0.476709185726412, -8.94784334426468e-05,0.003186417072782,0.316573498555677,-0.504756932844945, -9.2987503759856e-05,0.00385791078955977,0.331955144217148,-0.532804679963478, -9.64965740780643e-05,0.00452940450633643,0.347336789878618,-0.560852427082011, -0.000100005644396273,0.00520089822311309,0.362718435540089,-0.588900174200544, -0.000103514714713704,0.00587239193989086,0.37810008120156,-0.616947921319077, -0.000107023785032134,0.00654388565666641,0.39348172686303,-0.64499566843761, -0.000110532855349676,0.0072153793734433,0.408863372524499,-0.673043415556143, -0.000114041925667885,0.00788687309022063,0.42424501818597,-0.701091162674675, -0.000117550995985538,0.00855836680699795,0.439626663847441,-0.729138909793208, -3.30832550226173e-05,-0.00753669825446041,0.0704104381983693,-0.0560519828707818, -3.65430231690222e-05,-0.00686777374934983,0.0857526948780803,-0.0841268415701629, -4.000279131533e-05,-0.00619884924423908,0.101094951557791,-0.112201700269544, -4.34625594617211e-05,-0.00552992473912817,0.116437208237503,-0.140276558968925, -4.69223276080011e-05,-0.00486100023401725,0.131779464917214,-0.168351417668306, -5.03820957543089e-05,-0.00419207572890667,0.147121721596925,-0.196426276367687, -5.38418639008387e-05,-0.00352315122379609,0.162463978276636,-0.224501135067069, -5.73016320471464e-05,-0.00285422671868507,0.177806234956347,-0.25257599376645, -6.07614001935652e-05,-0.00218530221357449,0.193148491636058,-0.280650852465831, -6.4221168339762e-05,-0.00151637770846347,0.20849074831577,-0.308725711165212, -6.76809364861253e-05,-0.000847453203352666,0.223833004995481,-0.336800569864593, -7.11407046325441e-05,-0.000178528698242086,0.239175261675192,-0.364875428563974, -7.46004727790184e-05,0.000490395806868493,0.254517518354903,-0.392950287263355, -7.80602409253817e-05,0.00115932031197952,0.269859775034614,-0.421025145962736, -8.15200090716894e-05,0.00182824481708965,0.285202031714325,-0.449100004662118, -8.49797772181082e-05,0.0024971693222009,0.300544288394037,-0.477174863361499, -8.84395453648601e-05,0.00316609382731103,0.315886545073747,-0.50524972206088, -9.18993135107238e-05,0.0038350183324225,0.331228801753459,-0.533324580760261, -9.53590816573646e-05,0.00450394283753242,0.346571058433169,-0.561399439459642, -9.88188498034503e-05,0.00517286734264366,0.361913315112881,-0.589474298159023, -0.000102278617949647,0.00584179184775513,0.377255571792592,-0.617549156858404, -0.000105738386096843,0.0065107163528646,0.392597828472303,-0.645624015557786, -0.000109198154242707,0.00717964085797629,0.407940085152015,-0.673698874257166, -0.000112657922388903,0.00784856536308709,0.423282341831726,-0.701773732956547, -0.000116117690535544,0.008517489868197,0.438624598511436,-0.729848591655929, -3.27396342828523e-05,-0.00750827923529929,0.0703324492112678,-0.0561329271165876, -3.61321854839003e-05,-0.00684292659055397,0.0856205947112607,-0.0842449787071612, -3.95247366848095e-05,-0.00617757394580842,0.100908740211254,-0.112357030297735, -4.29172878858297e-05,-0.00551222130106288,0.116196885711247,-0.140469081888308, -4.63098390867112e-05,-0.00484686865631734,0.13148503121124,-0.168581133478882, -4.97023902876204e-05,-0.0041815160115718,0.146773176711233,-0.196693185069456, -5.30949414886961e-05,-0.00351616336682647,0.162061322211226,-0.224805236660029, -5.64874926897718e-05,-0.00285081072208104,0.177349467711219,-0.252917288250603, -5.988004389057e-05,-0.00218545807733528,0.192637613211212,-0.281029339841177, -6.32725950913682e-05,-0.00152010543258974,0.207925758711205,-0.30914139143175, -6.66651462923329e-05,-0.000854752787844193,0.223213904211198,-0.337253443022324, -7.00576974934086e-05,-0.00018940014309865,0.238502049711191,-0.365365494612897, -7.34502486943733e-05,0.00047595250164667,0.253790195211184,-0.393477546203471, -7.68427998953936e-05,0.00114130514639199,0.269078340711177,-0.421589597794045, -8.02353510961362e-05,0.00180665779113798,0.28436648621117,-0.449701649384618, -8.3627902297323e-05,0.00247201043588285,0.299654631711162,-0.477813700975192, -8.70204534980656e-05,0.00313736308062862,0.314942777211155,-0.505925752565766, -9.04130046994744e-05,0.00380271572537372,0.330230922711148,-0.534037804156339, -9.3805555899884e-05,0.00446806837012015,0.345519068211142,-0.562149855746913, -9.71981071011818e-05,0.00513342101486525,0.360807213711135,-0.590261907337486, -0.000100590658302147,0.00579877365961101,0.376095359211128,-0.61837395892806, -0.000103983209503222,0.00646412630435611,0.391383504711121,-0.646486010518634, -0.000107375760704298,0.00712947894910121,0.406671650211113,-0.674598062109207, -0.000110768311905263,0.0077948315938472,0.421959795711107,-0.702710113699781, -0.000114160863106005,0.00846018423859274,0.437247941211099,-0.730822165290354, -3.22706733916212e-05,-0.00746975853033011,0.0702259546872205,-0.0562431394968078, -3.55724877529606e-05,-0.00680935727376503,0.0854402826847812,-0.0844058323284578, -3.88743021142446e-05,-0.00614895601719984,0.100654610682342,-0.112568525160108, -4.21761164756396e-05,-0.00548855476063481,0.115868938679903,-0.140731217991758, -4.54779308367292e-05,-0.00482815350406929,0.131083266677464,-0.168893910823408, -4.87797451983463e-05,-0.00416775224750454,0.146297594675024,-0.197056603655058, -5.2081559559658e-05,-0.00350735099093957,0.161511922672585,-0.225219296486708, -5.53833739207477e-05,-0.00284694973437394,0.176726250670146,-0.253381989318358, -5.86851882821704e-05,-0.00218654847780897,0.191940578667706,-0.281544682150008, -6.19870026434821e-05,-0.001526147221244,0.207154906665267,-0.309707374981658, -6.52888170046828e-05,-0.000865745964678588,0.222369234662828,-0.337870067813308, -6.859063136605e-05,-0.000205344708113619,0.237583562660389,-0.366032760644958, -7.18924457273618e-05,0.000455056548451571,0.252797890657949,-0.394195453476608, -7.51942600885069e-05,0.00111545780501676,0.26801221865551,-0.422358146308258, -7.84960744497631e-05,0.00177585906158217,0.283226546653071,-0.450520839139908, -8.17978888113524e-05,0.00243626031814737,0.298440874650632,-0.478683531971558, -8.50997031728307e-05,0.00309666157471211,0.313655202648192,-0.506846224803208, -8.84015175338648e-05,0.00375706283127752,0.328869530645753,-0.535008917634858, -9.17033318954541e-05,0.00441746408784205,0.344083858643313,-0.563171610466508, -9.50051462561552e-05,0.00507786534440791,0.359298186640874,-0.591334303298158, -9.83069606179665e-05,0.00573826660097243,0.374512514638435,-0.619496996129808, -0.000101608774979334,0.00639866785753762,0.389726842635996,-0.647659688961458, -0.000104910589340035,0.0070590691141037,0.404941170633557,-0.675822381793108, -0.000108212403701069,0.00771947037066933,0.420155498631118,-0.703985074624758, -0.000111514218062658,0.00837987162723364,0.435369826628678,-0.732147767456408, -3.1636631266832e-05,-0.00741816005590101,0.0700818680436263,-0.0563916786934148, -3.48176043722948e-05,-0.00676459267663321,0.0851964517058617,-0.0846226234696252, -3.79985774777991e-05,-0.00611102529736535,0.100311035368097,-0.112853568245836, -4.11795505834145e-05,-0.0054574579180976,0.115425619030333,-0.141084513022046, -4.43605236890021e-05,-0.0048038905388299,0.130540202692568,-0.169315457798256, -4.75414967944232e-05,-0.00415032315956199,0.145654786354803,-0.197546402574467, -5.07224699000108e-05,-0.00349675578029429,0.160769370017039,-0.225777347350677, -5.39034430053764e-05,-0.00284318840102626,0.175883953679274,-0.254008292126888, -5.70844161110196e-05,-0.00218962102175879,0.19099853734151,-0.282239236903098, -6.02653892162741e-05,-0.00153605364249043,0.206113121003745,-0.310470181679309, -6.34463623219728e-05,-0.000882486263222848,0.221227704665981,-0.338701126455519, -6.66273354276159e-05,-0.000228918883955043,0.236342288328216,-0.366932071231729, -6.98083085332035e-05,0.000424648495312541,0.251456871990452,-0.39516301600794, -7.29892816384581e-05,0.00107821587458079,0.266571455652687,-0.42339396078415, -7.61702547442678e-05,0.00173178325384793,0.281686039314922,-0.451624905560361, -7.93512278496333e-05,0.00238535063311596,0.296800622977158,-0.479855850336571, -8.25322009547769e-05,0.00303891801238443,0.311915206639394,-0.508086795112782, -8.57131740604755e-05,0.00369248539165201,0.327029790301629,-0.536317739888992, -8.88941471662852e-05,0.00434605277091893,0.342144373963864,-0.564548684665202, -9.20751202717618e-05,0.0049996201501874,0.3572589576261,-0.592779629441413, -9.52560933771274e-05,0.00565318752945476,0.372373541288335,-0.621010574217623, -9.8437066482604e-05,0.00630675490872301,0.38748812495057,-0.649241518993834, -0.000101618039588303,0.00696032228798993,0.402602708612805,-0.677472463770044, -0.00010479901269389,0.00761388966725818,0.417717292275041,-0.705703408546255, -0.000107979985799145,0.00826745704652598,0.432831875937276,-0.733934353322465, -3.07901906400759e-05,-0.00735013236564763,0.069889331386681,-0.0565891421576789, -3.38131421663279e-05,-0.00670593545475512,0.0848708620399048,-0.084910818981211, -3.68360936923717e-05,-0.00606173854386244,0.0998523926931286,-0.113232495804743, -3.98590452185543e-05,-0.00541754163296981,0.114833923346352,-0.141554172628275, -4.28819967447092e-05,-0.00477334472207724,0.129815453999576,-0.169875849451807, -4.59049482707807e-05,-0.00412914781118445,0.1447969846528,-0.198197526275339, -4.89278997967135e-05,-0.00348495090029144,0.159778515306024,-0.226519203098871, -5.19508513228129e-05,-0.00284075398939898,0.174760045959248,-0.254840879922404, -5.49738028493008e-05,-0.00219655707850663,0.189741576612472,-0.283162556745936, -5.79967543752336e-05,-0.00155236016761373,0.204723107265696,-0.311484233569468, -6.10197059012219e-05,-0.000908163256721162,0.219704637918919,-0.339805910393, -6.40426574273767e-05,-0.000263966345828148,0.234686168572143,-0.368127587216532, -6.70656089534205e-05,0.000380230565064421,0.249667699225367,-0.396449264040064, -7.00885604794088e-05,0.00102442747595721,0.264649229878591,-0.424770940863596, -7.31115120059522e-05,0.00166862438684956,0.279630760531815,-0.453092617687128, -7.61344635320516e-05,0.00231282129774213,0.294612291185038,-0.48141429451066, -7.91574150580399e-05,0.00295701820863514,0.309593821838263,-0.509735971334192, -8.21803665839171e-05,0.00360121511952816,0.324575352491487,-0.538057648157724, -8.52033181101275e-05,0.00424541203042028,0.33955688314471,-0.566379324981257, -8.82262696358938e-05,0.00488960894131352,0.354538413797934,-0.594701001804789, -9.12492211627702e-05,0.0055338058522052,0.369519944451157,-0.623022678628321, -9.42721726887585e-05,0.00617800276309843,0.384501475104382,-0.651344355451853, -9.72951242149689e-05,0.00682219967399034,0.399483005757605,-0.679666032275385, -0.000100318075741401,0.00746639658488268,0.414464536410829,-0.707987709098917, -0.000103341027266945,0.00811059349577636,0.429446067064053,-0.736309385922449, -2.96791214308423e-05,-0.00726230382292048,0.069636295537153,-0.0568469051328679, -3.25003998211115e-05,-0.00663082998881531,0.084443359670137,-0.0852870208916724, -3.53216782112142e-05,-0.00599935615470987,0.0992504238031211,-0.113727136650477, -3.81429566014557e-05,-0.00536788232060459,0.114057487936105,-0.142167252409281, -4.09642349917527e-05,-0.00473640848649948,0.128864552069089,-0.170607368168086, -4.37855133817444e-05,-0.00410493465239392,0.143671616202073,-0.19904748392689, -4.66067917720969e-05,-0.0034734608182887,0.158478680335057,-0.227487599685694, -4.94280701623384e-05,-0.00284198698418359,0.173285744468041,-0.255927715444499, -5.22493485525799e-05,-0.00221051315007847,0.188092808601025,-0.284367831203303, -5.50706269425993e-05,-0.00157903931597292,0.202899872734009,-0.312807946962108, -5.78919053328963e-05,-0.000947565481867807,0.217706936866993,-0.341248062720912, -6.07131837232489e-05,-0.000316091647762695,0.232514000999977,-0.369688178479717, -6.35344621134348e-05,0.000315382186342417,0.247321065132961,-0.398128294238521, -6.63557405037318e-05,0.000946856020447751,0.262128129265945,-0.426568409997325, -6.91770188938623e-05,0.00157832985455308,0.276935193398929,-0.45500852575613, -7.19982972839928e-05,0.00220980368865842,0.291742257531913,-0.483448641514934, -7.48195756743453e-05,0.00284127752276397,0.306549321664898,-0.511888757273739, -7.76408540641427e-05,0.00347275135686909,0.321356385797881,-0.540328873032543, -8.04621324547172e-05,0.00410422519097398,0.336163449930865,-0.568768988791347, -8.32834108451808e-05,0.00473569902507931,0.350970514063849,-0.597209104550152, -8.61046892349782e-05,0.00536717285918487,0.365777578196833,-0.625649220308956, -8.89259676255527e-05,0.00599864669328953,0.380584642329817,-0.654089336067761, -9.17472460152391e-05,0.00663012052739598,0.395391706462802,-0.682529451826565, -9.45685244054806e-05,0.00726159436150109,0.410198770595786,-0.710969567585369, -9.7389802795389e-05,0.0078930681956062,0.42500583472877,-0.739409683344174, -2.82525934522937e-05,-0.00715194177284662,0.0693109329894528,-0.0571754954885706, -3.08245652365924e-05,-0.00653749439738832,0.0838943054360859,-0.0857665944979433, -3.33965370209466e-05,-0.00592304702193008,0.0984776778827189,-0.114357693507316, -3.59685088051898e-05,-0.00530859964647179,0.113061050329352,-0.142948792516689, -3.85404805894607e-05,-0.00469415227101333,0.127644422775985,-0.171539891526061, -4.11124523739259e-05,-0.00407970489555531,0.142227795222618,-0.200130990535434, -4.36844241581413e-05,-0.00346525752009674,0.156811167669251,-0.228722089544807, -4.62563959423568e-05,-0.00285081014463839,0.171394540115884,-0.257313188554179, -4.88283677266832e-05,-0.00223636276918016,0.185977912562517,-0.285904287563552, -5.14003395112317e-05,-0.00162191539372225,0.20056128500915,-0.314495386572925, -5.3972311295003e-05,-0.00100746801826301,0.215144657455784,-0.343086485582297, -5.6544283079607e-05,-0.000393020642805331,0.229728029902416,-0.37167758459167, -5.91162548638779e-05,0.000221426732653018,0.24431140234905,-0.400268683601043, -6.16882266483154e-05,0.000835874108110923,0.258894774795682,-0.428859782610415, -6.42601984326419e-05,0.00145032148356949,0.273478147242316,-0.457450881619788, -6.68321702171903e-05,0.0020647688590274,0.288061519688949,-0.48604198062916, -6.94041420009617e-05,0.00267921623448619,0.302644892135582,-0.514633079638533, -7.19761137853991e-05,0.00329366360994454,0.317228264582215,-0.543224178647906, -7.45480855695035e-05,0.00390811098540333,0.331811637028848,-0.571815277657278, -7.7120057354052e-05,0.0045225583608608,0.346395009475481,-0.600406376666651, -7.96920291383785e-05,0.00513700573631937,0.360978381922114,-0.628997475676024, -8.22640009228159e-05,0.00575145311177749,0.375561754368747,-0.657588574685396, -8.48359727069203e-05,0.00636590048723606,0.39014512681538,-0.686179673694769, -8.74079444912468e-05,0.00698034786269464,0.404728499262014,-0.714770772704142, -8.99799162754622e-05,0.00759479523815232,0.419311871708646,-0.743361871713514, -2.64721851737232e-05,-0.0070179164517512,0.0689041417036613,-0.0575819404777743, -2.87482984059895e-05,-0.00642578341161415,0.0832088283563476,-0.0863597959898322, -3.10244116382419e-05,-0.00583365037147698,0.097513515009034,-0.11513765150189, -3.3300524870522e-05,-0.00524151733133993,0.11181820166172,-0.143915507013948, -3.55766381028022e-05,-0.00464938429120298,0.126122888314407,-0.172693362526006, -3.78527513352211e-05,-0.00405725125106604,0.140427574967093,-0.201471218038064, -4.01288645674458e-05,-0.00346511821092899,0.154732261619779,-0.230249073550122, -4.24049777996149e-05,-0.00287298517079182,0.169036948272466,-0.25902692906218, -4.46810910320616e-05,-0.00228085213065476,0.183341634925152,-0.287804784574238, -4.69572042641198e-05,-0.00168871909051749,0.197646321577838,-0.316582640086295, -4.92333174964554e-05,-0.00109658605038065,0.211951008230525,-0.345360495598353, -5.15094307287911e-05,-0.000504453010243378,0.226255694883211,-0.374138351110411, -5.37855439609602e-05,8.76800298934555e-05,0.240560381535897,-0.402916206622469, -5.60616571932959e-05,0.000679813070030511,0.254865068188584,-0.431694062134527, -5.83377704252985e-05,0.00127194611016801,0.26916975484127,-0.460471917646585, -6.06138836576342e-05,0.00186407915030484,0.283474441493956,-0.489249773158643, -6.28899968900809e-05,0.0024562121904419,0.297779128146643,-0.518027628670701, -6.51661101224166e-05,0.00304834523057895,0.312083814799329,-0.546805484182759, -6.74422233547523e-05,0.00364047827071601,0.326388501452016,-0.575583339694817, -6.97183365870879e-05,0.00423261131085262,0.340693188104702,-0.604361195206875, -7.19944498192016e-05,0.0048247443509899,0.354997874757388,-0.633139050718933, -7.42705630510931e-05,0.00541687739112762,0.369302561410074,-0.661916906230991, -7.65466762836509e-05,0.00600901043126445,0.383607248062761,-0.690694761743048, -7.88227895160976e-05,0.00660114347140084,0.397911934715447,-0.719472617255106, -8.10989027478781e-05,0.007193276511539,0.412216621368134,-0.748250472767164, -2.43270513372168e-05,-0.00686177910283986,0.068413046531941,-0.0580663554092568, -2.62694646791517e-05,-0.00629805522500304,0.0823827061525363,-0.0870667936590905, -2.82118780211282e-05,-0.00573433134716617,0.0963523657731316,-0.116067231908924, -3.0154291363188e-05,-0.00517060746932951,0.110322025393727,-0.145067670158758, -3.20967047051368e-05,-0.00460688359149253,0.124291685014322,-0.174068108408592, -3.40391180468913e-05,-0.00404315971365532,0.138261344634918,-0.203068546658425, -3.59815313890066e-05,-0.00347943583581889,0.152231004255513,-0.232068984908259, -3.79239447310109e-05,-0.00291571195798201,0.166200663876108,-0.261069423158093, -3.98663580730152e-05,-0.00235198808014525,0.180170323496703,-0.290069861407926, -4.1808771414853e-05,-0.00178826420230815,0.194139983117299,-0.31907029965776, -4.37511847566907e-05,-0.00122454032447106,0.208109642737894,-0.348070737907594, -4.56935980990836e-05,-0.000660816446634849,0.222079302358489,-0.377071176157428, -4.76360114404217e-05,-9.70925687970858e-05,0.236048961979085,-0.406071614407261, -4.95784247825926e-05,0.000466631309038901,0.25001862159968,-0.435072052657095, -5.15208381246524e-05,0.001030355186876,0.263988281220275,-0.464072490906929, -5.34632514666011e-05,0.00159407906471287,0.277957940840871,-0.493072929156762, -5.54056648083279e-05,0.00215780294254997,0.291927600461466,-0.522073367406596, -5.73480781503877e-05,0.00272152682038662,0.305897260082061,-0.55107380565643, -5.92904914925585e-05,0.00328525069822305,0.319866919702656,-0.580074243906263, -6.12329048340632e-05,0.00384897457606082,0.333836579323252,-0.609074682156097, -6.3175318176012e-05,0.00441269845389725,0.347806238943847,-0.638075120405931, -6.51177315182938e-05,0.00497642233173368,0.361775898564442,-0.667075558655764, -6.70601448604646e-05,0.00554014620957055,0.375745558185038,-0.696075996905598, -6.90025582023024e-05,0.00610387008740787,0.389715217805634,-0.725076435155432, -7.09449715440291e-05,0.00666759396524519,0.403684877426229,-0.754076873405265, -2.1849580899666e-05,-0.00668850940268417,0.0678446826992698,-0.0586187823892984, -2.34379189397171e-05,-0.00615959626440699,0.0814284550167798,-0.0878730540815954, -2.50262569798099e-05,-0.00563068312612991,0.0950122273342897,-0.117127325773892, -2.66145950201524e-05,-0.00510176998785317,0.1085959996518,-0.14638159746619, -2.82029330602174e-05,-0.00457285684957609,0.122179771969309,-0.175635869158487, -2.97912711004766e-05,-0.00404394371129924,0.135763544286819,-0.204890140850784, -3.13796091405694e-05,-0.00351503057302227,0.149347316604329,-0.234144412543081, -3.296794718044e-05,-0.00298611743474475,0.162931088921839,-0.263398684235378, -3.45562852205883e-05,-0.00245720429646812,0.176514861239349,-0.292652955927675, -3.61446232608476e-05,-0.00192829115819082,0.190098633556859,-0.321907227619972, -3.77329613007737e-05,-0.00139937801991397,0.203682405874369,-0.351161499312269, -3.9321299341144e-05,-0.000870464881637334,0.217266178191878,-0.380415771004566, -4.09096373811813e-05,-0.000341551743359592,0.230849950509389,-0.409670042696863, -4.24979754214405e-05,0.000187361394917041,0.244433722826898,-0.43892431438916, -4.40863134615332e-05,0.000716274533194117,0.258017495144408,-0.468178586081457, -4.56746515014039e-05,0.00124518767147119,0.271601267461918,-0.497432857773754, -4.72629895422738e-05,0.00177410080974738,0.285185039779428,-0.526687129466051, -4.88513275819225e-05,0.0023030139480249,0.298768812096938,-0.555941401158348, -5.04396656219042e-05,0.00283192708630242,0.312352584414448,-0.585195672850645, -5.20280036628851e-05,0.00336084022457817,0.325936356731957,-0.614449944542942, -5.36163417024227e-05,0.00388975336285613,0.339520129049468,-0.643704216235239, -5.52046797419603e-05,0.00441866650113365,0.353103901366978,-0.672958487927536, -5.67930177822751e-05,0.00494757963941028,0.366687673684487,-0.702212759619833, -5.83813558223678e-05,0.00547649277768736,0.380271446001997,-0.73146703131213, -5.99696938625716e-05,0.00600540591596443,0.393855218319507,-0.760721303004427, -1.91243824914644e-05,-0.00650636573407587,0.0672182056732137,-0.0592179528773268, -2.03625594114853e-05,-0.0060181223875741,0.0803788342890195,-0.0887475360824455, -2.16007363314508e-05,-0.00552987904107211,0.0935394629048256,-0.118277119287564, -2.28389132516105e-05,-0.0050416356945705,0.106700091520631,-0.147806702492683, -2.40770901714094e-05,-0.00455339234806851,0.119860720136437,-0.177336285697801, -2.53152670914858e-05,-0.00406514900156663,0.133021348752243,-0.20686586890292, -2.65534440115345e-05,-0.00357690565506497,0.146181977368049,-0.236395452108039, -2.77916209314721e-05,-0.00308866230856297,0.159342605983855,-0.265925035313157, -2.90297978514098e-05,-0.0026004189620612,0.172503234599661,-0.295454618518276, -3.02679747713475e-05,-0.00211217561555932,0.185663863215467,-0.324984201723395, -3.15061516915072e-05,-0.00162393226905766,0.198824491831273,-0.354513784928513, -3.27443286112783e-05,-0.00113568892255556,0.211985120447079,-0.384043368133632, -3.39825055314935e-05,-0.000647445576053673,0.225145749062885,-0.41357295133875, -3.52206824517642e-05,-0.000159202229552458,0.23830637767869,-0.443102534543869, -3.64588593716464e-05,0.000329041116949202,0.251467006294496,-0.472632117748988, -3.76970362911955e-05,0.000817284463451973,0.264627634910302,-0.502161700954106, -3.89352132111886e-05,0.00130552780995385,0.277788263526108,-0.531691284159225, -4.01733901316259e-05,0.00179377115645463,0.290948892141913,-0.561220867364343, -4.14115670515081e-05,0.00228201450295673,0.30410952075772,-0.590750450569462, -4.26497439706131e-05,0.00277025784946039,0.317270149373526,-0.620280033774581, -4.38879208914944e-05,0.00325850119596049,0.330430777989332,-0.649809616979699, -4.51260978113766e-05,0.00374674454246238,0.343591406605137,-0.679339200184818, -4.63642747311477e-05,0.00423498788896515,0.356752035220944,-0.708868783389936, -4.76024516513629e-05,0.00472323123546659,0.36991266383675,-0.738398366595055, -4.8840628571134e-05,0.00521147458196847,0.383073292452556,-0.767927949800174, -1.62827888009337e-05,-0.00632553980067685,0.0665637631324394,-0.0598334842902082, -1.7200413722579e-05,-0.00588224182507047,0.0792847041431977,-0.0896458966530631, -1.81180386441271e-05,-0.00543894384946414,0.0920056451539559,-0.119458309015918, -1.90356635656475e-05,-0.00499564587385748,0.104726586164714,-0.149270721378773, -1.99532884871956e-05,-0.00455234789825099,0.117447527175473,-0.179083133741628, -2.08709134089102e-05,-0.00410904992264494,0.130168468186231,-0.208895546104483, -2.17885383304584e-05,-0.00366575194703833,0.142889409196989,-0.238707958467338, -2.2706163252062e-05,-0.00322245397143184,0.155610350207748,-0.268520370830193, -2.36237881734436e-05,-0.00277915599582523,0.168331291218506,-0.298332783193048, -2.45414130948807e-05,-0.00233585802021841,0.181052232229264,-0.328145195555903, -2.54590380165398e-05,-0.00189256004461225,0.193773173240023,-0.357957607918758, -2.6376662938199e-05,-0.00144926206900586,0.206494114250781,-0.387770020281613, -2.72942878601357e-05,-0.00100596409339992,0.219215055261539,-0.417582432644468, -2.82119127816838e-05,-0.000562666117793542,0.231935996272297,-0.447394845007323, -2.91295377027323e-05,-0.000119368142186493,0.244656937283056,-0.477207257370178, -3.0047162624558e-05,0.000323929833420111,0.257377878293814,-0.507019669733033, -3.09647875461616e-05,0.000767227809026272,0.270098819304572,-0.536832082095888, -3.18824124679873e-05,0.00121052578463199,0.28281976031533,-0.566644494458743, -3.28000373893689e-05,0.00165382376023926,0.295540701326089,-0.596456906821598, -3.37176623109725e-05,0.00209712173584542,0.308261642336847,-0.626269319184453, -3.46352872323541e-05,0.00254041971145202,0.320982583347605,-0.656081731547308, -3.55529121540687e-05,0.00298371768705818,0.333703524358364,-0.685894143910163, -3.64705370755614e-05,0.00342701566266523,0.346424465369122,-0.715706556273017, -3.7388161997165e-05,0.00387031363827139,0.35914540637988,-0.745518968635873, -3.83057869188796e-05,0.004313611613878,0.371866347390639,-0.775331380998727, -1.34803339186668e-05,-0.00615597225470871,0.0659173502755847,-0.0604315489745142, -1.41271488639794e-05,-0.00575942456010398,0.0782062369907426,-0.0905187647469017, -1.47739638092781e-05,-0.00536287686549913,0.0904951237059005,-0.120605980519289, -1.54207787546601e-05,-0.00496632917089457,0.102784010421058,-0.150693196291677, -1.60675936999588e-05,-0.00456978147628972,0.115072897136216,-0.180780412064064, -1.67144086452575e-05,-0.00417323378168499,0.127361783851374,-0.210867627836452, -1.73612235904175e-05,-0.00377668608708004,0.139650670566532,-0.240954843608839, -1.80080385359105e-05,-0.00338013839247553,0.15193955728169,-0.271042059381227, -1.86548534811815e-05,-0.00298359069787058,0.164228443996848,-0.301129275153614, -1.93016684266745e-05,-0.00258704300326595,0.176517330712006,-0.331216490926002, -1.99484833717234e-05,-0.00219049530866111,0.188806217427164,-0.361303706698389, -2.05952983170499e-05,-0.00179394761405627,0.201095104142321,-0.391390922470777, -2.12421132625429e-05,-0.00139739991945187,0.213383990857479,-0.421478138243164, -2.18889282079804e-05,-0.00100085222484747,0.225672877572637,-0.451565354015551, -2.25357431529183e-05,-0.000604304530242183,0.237961764287795,-0.481652569787939, -2.31825580980782e-05,-0.000207756835636896,0.250250651002953,-0.511739785560326, -2.38293730436823e-05,0.000188790858967502,0.262539537718111,-0.541827001332714, -2.44761879890643e-05,0.000585338553572123,0.274828424433269,-0.571914217105101, -2.51230029338911e-05,0.00098188624817741,0.287117311148427,-0.602001432877489, -2.57698178798282e-05,0.00137843394278114,0.299406197863584,-0.632088648649876, -2.64166328252102e-05,0.00177498163738621,0.311695084578743,-0.662175864422264, -2.70634477703702e-05,0.00217152933199083,0.3239839712939,-0.692263080194651, -2.77102627156411e-05,0.00256807702659545,0.336272858009058,-0.722350295967039, -2.8357077660579e-05,0.00296462472120052,0.348561744724216,-0.752437511739426, -2.9003892605739e-05,0.00336117241580602,0.360850631439374,-0.782524727511814, -1.08642086106003e-05,-0.00600526002682084,0.0653132268553835,-0.0609819924412029, -1.1299555561145e-05,-0.00565442974138458,0.0772002430266358,-0.0913221302559217, -1.17349025117452e-05,-0.00530359945594833,0.0890872591978881,-0.121662268070641, -1.2170249462401e-05,-0.00495276917051202,0.100974275369141,-0.152002405885359, -1.26055964130012e-05,-0.00460193888507576,0.112861291540393,-0.182342543700078, -1.30409433636292e-05,-0.00425110859963962,0.124748307711645,-0.212682681514797, -1.34762903140628e-05,-0.00390027831420325,0.136635323882897,-0.243022819329516, -1.39116372649406e-05,-0.00354944802876733,0.14852234005415,-0.273362957144235, -1.43469842153188e-05,-0.00319861774333075,0.160409356225402,-0.303703094958953, -1.47823311660855e-05,-0.00284778745789493,0.172296372396654,-0.334043232773672, -1.52176781165747e-05,-0.00249695717245846,0.184183388567907,-0.364383370588391, -1.56530250674525e-05,-0.00214612688702243,0.196070404739159,-0.39472350840311, -1.60883720179972e-05,-0.00179529660158639,0.207957420910411,-0.425063646217829, -1.65237189684309e-05,-0.0014444663161497,0.219844437081664,-0.455403784032547, -1.6959065918809e-05,-0.001093636030713,0.231731453252916,-0.485743921847266, -1.73944128696313e-05,-0.000742805745276964,0.243618469424169,-0.516084059661985, -1.78297598203425e-05,-0.000391975459841154,0.255505485595421,-0.546424197476704, -1.82651067707207e-05,-4.11451744044555e-05,0.267392501766673,-0.576764335291423, -1.8700453721654e-05,0.000309685111031133,0.279279517937925,-0.607104473106141, -1.9135800671366e-05,0.000660515396468053,0.291166534109177,-0.63744461092086, -1.95711476226323e-05,0.00101134568190409,0.30305355028043,-0.667784748735579, -2.00064945726774e-05,0.00136217596734101,0.314940566451682,-0.698124886550298, -2.04418415239438e-05,0.00171300625277615,0.326827582622934,-0.728465024365017, -2.08771884740999e-05,0.00206383653821307,0.338714598794187,-0.758805162179735, -2.13125354253663e-05,0.00241466682364866,0.350601614965439,-0.789145299994454, -8.54427901572641e-06,-0.00587753542442282,0.0647770877488557,-0.0614639088840356, -8.82605807289716e-06,-0.00556885248833594,0.0763089438781005,-0.0920254814115461, -9.1078371300124e-06,-0.00526016955224901,0.0878408000073453,-0.122587053939057, -9.38961618718315e-06,-0.00495148661616218,0.09937265613659,-0.153148626466567, -9.67139524427063e-06,-0.00464280368007497,0.110904512265835,-0.183710198994078, -9.95317430141363e-06,-0.0043341207439882,0.12243636839508,-0.214271771521588, -1.02349533586676e-05,-0.00402543780790132,0.133968224524325,-0.244833344049099, -1.05167324157551e-05,-0.00371675487181433,0.145500080653569,-0.275394916576609, -1.07985114729536e-05,-0.00340807193572767,0.157031936782814,-0.30595648910412, -1.10802905301521e-05,-0.00309938899964091,0.168563792912059,-0.336518061631631, -1.13620695871841e-05,-0.00279070606355369,0.180095649041304,-0.367079634159141, -1.16438486443826e-05,-0.00248202312746693,0.191627505170548,-0.397641206686651, -1.19256277018032e-05,-0.00217334019138038,0.203159361299793,-0.428202779214162, -1.22074067585576e-05,-0.00186465725529272,0.214691217429038,-0.458764351741672, -1.24891858162002e-05,-0.00155597431920662,0.226223073558283,-0.489325924269183, -1.27709648733987e-05,-0.00124729138311963,0.237754929687527,-0.519887496796694, -1.305274392982e-05,-0.000938608447031974,0.249286785816772,-0.550449069324204, -1.33345229874626e-05,-0.00062992551094565,0.260818641946017,-0.581010641851715, -1.36163020447722e-05,-0.000321242574858882,0.272350498075262,-0.611572214379225, -1.38980811017486e-05,-1.25596387716698e-05,0.283882354204507,-0.642133786906736, -1.41798601591692e-05,0.000296123297315098,0.295414210333752,-0.672695359434246, -1.44616392159236e-05,0.000604806233401867,0.306946066462996,-0.703256931961757, -1.47434182732331e-05,0.000913489169489079,0.318477922592241,-0.733818504489267, -1.50251973304316e-05,0.0012221721055754,0.330009778721486,-0.764380077016778, -1.5306976387186e-05,0.00153085504166306,0.341541634850731,-0.794941649544288, -6.57883096513712e-06,-0.0057735583080733,0.0643226571187663,-0.061867711433839, -6.75587030443681e-06,-0.00550171923130122,0.0755545343874936,-0.0926148262954412, -6.93290964365323e-06,-0.00522988015452924,0.0867864116562209,-0.123361941157043, -7.10994898306394e-06,-0.00495804107775732,0.0980182889249481,-0.154109056018645, -7.28698832222485e-06,-0.00468620200098524,0.109250166193675,-0.184856170880248, -7.4640276615523e-06,-0.00441436292421316,0.120482043462403,-0.21560328574185, -7.6410670009075e-06,-0.0041425238474414,0.13171392073113,-0.246350400603452, -7.81810634020719e-06,-0.00387068477066943,0.142945797999857,-0.277097515465054, -7.99514567950688e-06,-0.00359884569389735,0.154177675268585,-0.307844630326656, -8.17218501869554e-06,-0.00332700661712515,0.165409552537312,-0.338591745188258, -8.34922435793972e-06,-0.0030551675403534,0.176641429806039,-0.36933886004986, -8.52626369729492e-06,-0.00278332846358142,0.187873307074766,-0.400085974911463, -8.70330303670563e-06,-0.00251148938680945,0.199105184343494,-0.430833089773065, -8.8803423758943e-06,-0.00223965031003726,0.210337061612221,-0.461580204634667, -9.05738171497195e-06,-0.00196781123326528,0.221568938880948,-0.492327319496269, -9.23442105438266e-06,-0.00169597215649331,0.232800816149676,-0.523074434357871, -9.41146039379337e-06,-0.00142413307972133,0.244032693418403,-0.553821549219473, -9.58849973320408e-06,-0.00115229400294936,0.25526457068713,-0.584568664081075, -9.76553907283684e-06,-0.000880454926178054,0.266496447955857,-0.615315778942678, -9.94257841113733e-06,-0.000608615849404526,0.277728325224585,-0.64606289380428, -1.0119617750326e-05,-0.000336776772632774,0.288960202493312,-0.676810008665882, -1.02966570902918e-05,-6.49376958614667e-05,0.300192079762039,-0.707557123527484, -1.04736964294805e-05,0.000206901380910729,0.311423957030767,-0.738304238389086, -1.06507357684471e-05,0.000478740457682925,0.322655834299494,-0.769051353250689, -1.08277751080799e-05,0.000750579534454232,0.333887711568221,-0.799798468112291, -4.97708186809886e-06,-0.00569162186446176,0.0639522252365395,-0.0621938019127339, -5.08620036032692e-06,-0.00545055470662098,0.0749402664515676,-0.0930907513620787, -5.19531885256885e-06,-0.00520948754878031,0.0859283076665957,-0.123987700811423, -5.30443734478303e-06,-0.00496842039093937,0.096916348881624,-0.154884650260768, -5.41355583683067e-06,-0.00472735323309859,0.107904390096652,-0.185781599710113, -5.52267432923914e-06,-0.00448628607525814,0.11889243131168,-0.216678549159458, -5.63179282131454e-06,-0.00424521891741725,0.129880472526708,-0.247575498608802, -5.74091131361198e-06,-0.0040041517595768,0.140868513741736,-0.278472448058147, -5.85002980579841e-06,-0.0037630846017358,0.151856554956764,-0.309369397507492, -5.95914829798483e-06,-0.00352201744389502,0.162844596171792,-0.340266346956836, -6.06826679033778e-06,-0.00328095028605446,0.17383263738682,-0.371163296406181, -6.17738528235767e-06,-0.00303988312821324,0.184820678601849,-0.402060245855526, -6.28650377448858e-06,-0.00279881597037246,0.195808719816877,-0.432957195304871, -6.39562226689705e-06,-0.00255774881253212,0.206796761031905,-0.463854144754215, -6.50474075947205e-06,-0.00231668165469179,0.217784802246933,-0.49475109420356, -6.61385925160296e-06,-0.00207561449685101,0.228772843461961,-0.525648043652905, -6.72297774373387e-06,-0.00183454733901023,0.239760884676989,-0.556544993102249, -6.83209623564274e-06,-0.001593480181169,0.250748925892017,-0.587441942551594, -6.94121472788467e-06,-0.00135241302332845,0.261736967107045,-0.618338892000939, -7.05033322068171e-06,-0.00111134586548811,0.272725008322073,-0.649235841450284, -7.15945171236854e-06,-0.00087027870764711,0.283713049537101,-0.680132790899628, -7.26857020472149e-06,-0.000629211549806108,0.294701090752129,-0.711029740348973, -7.37768869707445e-06,-0.000388144391965994,0.305689131967157,-0.741926689798318, -7.48680718920536e-06,-0.000147077234124993,0.316677173182185,-0.772823639247663, -7.59592568155831e-06,9.3989923715565e-05,0.327665214397213,-0.803720588697007, -3.71250461386752e-06,-0.00562867394503819,0.0636597386881602,-0.0624493766702425, -3.77918532362687e-06,-0.00541236153796443,0.0744556803412751,-0.0934637595955922, -3.84586603335846e-06,-0.00519604913089067,0.08525162199439,-0.124478142520942, -3.91254674311781e-06,-0.0049797367238168,0.0960475636475049,-0.155492525446291, -3.97922745293267e-06,-0.00476342431674326,0.10684350530062,-0.186506908371641, -4.04590816266426e-06,-0.00454711190966939,0.117639446953735,-0.217521291296991, -4.11258887239585e-06,-0.00433079950259563,0.128435388606849,-0.24853567422234, -4.17926958218295e-06,-0.00411448709552176,0.139231330259964,-0.27955005714769, -4.24595029185904e-06,-0.00389817468844811,0.150027271913079,-0.310564440073039, -4.31263100175716e-06,-0.00368186228137435,0.160823213566194,-0.341578822998389, -4.37931171159978e-06,-0.00346554987430059,0.171619155219309,-0.372593205923738, -4.44599242122035e-06,-0.00324923746722683,0.182415096872424,-0.403607588849088, -4.51267313106296e-06,-0.00303292506015351,0.193211038525538,-0.434621971774438, -4.5793538410166e-06,-0.00281661265307953,0.204006980178653,-0.465636354699787, -4.64603455052615e-06,-0.00260030024600555,0.214802921831768,-0.496650737625137, -4.71271526047978e-06,-0.00238398783893201,0.225598863484883,-0.527665120550486, -4.77939597043342e-06,-0.0021676754318587,0.236394805137998,-0.558679503475836, -4.84607667994297e-06,-0.00195136302478427,0.247190746791113,-0.589693886401186, -4.91275738967456e-06,-0.00173505061771007,0.257986688444228,-0.620708269326535, -4.97943809918411e-06,-0.00151873821063653,0.268782630097343,-0.651722652251885, -5.04611880913775e-06,-0.00130242580356299,0.279578571750457,-0.682737035177234, -5.11279951875832e-06,-0.00108611339648856,0.290374513403573,-0.713751418102584, -5.17948022848991e-06,-0.000869800989415026,0.301170455056687,-0.744765801027934, -5.24616093855457e-06,-0.000653488582341932,0.311966396709802,-0.775780183953283, -5.31284164861923e-06,-0.000437176175268839,0.322762338362916,-0.806794566878633, -2.73890571138302e-06,-0.00558124015239941,0.0634345469472606,-0.0626450288560269, -2.77969848899717e-06,-0.00538425722868063,0.0740828399435056,-0.0937493115683843, -2.82049126643091e-06,-0.00518727430496169,0.0847311329397504,-0.124853594280742, -2.86128404400343e-06,-0.00499029138124296,0.0953794259359953,-0.155957876993099, -2.90207682138166e-06,-0.00479330845752379,0.10602771893224,-0.187062159705457, -2.94286959889867e-06,-0.00459632553380496,0.116676011928485,-0.218166442417814, -2.9836623762769e-06,-0.00439934261008579,0.12732430492473,-0.249270725130171, -3.0244551540437e-06,-0.0042023596863674,0.137972597920975,-0.280375007842529, -3.06524793153296e-06,-0.00400537676264845,0.14862089091722,-0.311479290554886, -3.10604070891118e-06,-0.00380839383892928,0.159269183913465,-0.342583573267244, -3.14683348628941e-06,-0.00361141091521033,0.16991747690971,-0.373687855979601, -3.18762626383418e-06,-0.00341442799149161,0.180565769905955,-0.404792138691959, -3.22841904148996e-06,-0.00321744506777266,0.1912140629022,-0.435896421404316, -3.26921181936779e-06,-0.0030204621440546,0.201862355898444,-0.467000704116673, -3.310004596635e-06,-0.00282347922033499,0.21251064889469,-0.498104986829031, -3.35079737445731e-06,-0.00262649629661671,0.223158941890934,-0.529209269541388, -3.39159015150248e-06,-0.00242951337289732,0.233807234887179,-0.560313552253746, -3.43238292899173e-06,-0.00223253044917837,0.244455527883424,-0.591417834966103, -3.47317570670302e-06,-0.00203554752545987,0.255103820879669,-0.622522117678461, -3.51396848374819e-06,-0.00183856460174026,0.265752113875914,-0.653626400390818, -3.55476126212562e-06,-0.00164158167802286,0.276400406872158,-0.684730683103175, -3.59555403917078e-06,-0.00144459875430281,0.287048699868404,-0.715834965815533, -3.63634681643799e-06,-0.00124761583058364,0.297696992864649,-0.74693924852789, -3.67713959403826e-06,-0.00105063290686536,0.308345285860893,-0.778043531240247, -3.71793237174955e-06,-0.000853649983146187,0.318993578857139,-0.809147813952605, -2.00373790508468e-06,-0.00554600914918618,0.0632645060146246,-0.0627921284506976, -2.02892152043055e-06,-0.00536377545118588,0.0738014540411196,-0.0939640016281287, -2.0541051357903e-06,-0.00518154175318591,0.0843384020676143,-0.12513587480556, -2.07928875109453e-06,-0.00499930805518567,0.0948753500941091,-0.156307747982991, -2.10447236628775e-06,-0.00481707435718537,0.105412298120604,-0.187479621160422, -2.12965598156423e-06,-0.00463484065918507,0.115949246147099,-0.218651494337853, -2.15483959725704e-06,-0.00445260696118543,0.126486194173594,-0.249823367515284, -2.18002321256128e-06,-0.00427037326318513,0.137023142200088,-0.280995240692715, -2.20520682753245e-06,-0.00408813956518461,0.147560090226583,-0.312167113870146, -2.23039044294771e-06,-0.00390590586718464,0.158097038253078,-0.343338987047577, -2.25557405858501e-06,-0.00372367216918468,0.168633986279573,-0.374510860225008, -2.28075767372271e-06,-0.00354143847118427,0.179170934306068,-0.405682733402439, -2.30594128919348e-06,-0.0033592047731843,0.189707882332563,-0.43685460657987, -2.33112490444221e-06,-0.00317697107518389,0.200244830359058,-0.468026479757301, -2.35630851985746e-06,-0.00299473737718414,0.210781778385552,-0.499198352934732, -2.38149213493966e-06,-0.00281250367918395,0.221318726412047,-0.530370226112163, -2.40667575035491e-06,-0.00263026998118354,0.231855674438542,-0.561542099289595, -2.43185936565915e-06,-0.00244803628318357,0.242392622465037,-0.592713972467026, -2.45704298085236e-06,-0.00226580258518272,0.252929570491532,-0.623885845644457, -2.4822265961566e-06,-0.00208356888718297,0.263466518518026,-0.655057718821888, -2.50741021146084e-06,-0.00190133518918278,0.274003466544521,-0.686229591999319, -2.53259382654303e-06,-0.00171910149118171,0.284540414571017,-0.71740146517675, -2.55777744273544e-06,-0.00153686779318329,0.29507736259751,-0.748573338354181, -2.58296105759559e-06,-0.00135463409518177,0.305614310624006,-0.779745211531612, -2.6081446727888e-06,-0.00117240039718203,0.316151258650501,-0.810917084709043, -1.4567048298858e-06,-0.00552011838490268,0.0631379833391577,-0.0629012299352861, -1.47248479620554e-06,-0.0053489440620324,0.0735921619988165,-0.0941232339108343, -1.48826476256692e-06,-0.00517776973916217,0.0840463406584754,-0.125345237886383, -1.50404472887278e-06,-0.00500659541629189,0.0945005193181342,-0.156567241861931, -1.5198246952064e-06,-0.0048354210934215,0.104954697977793,-0.187789245837479, -1.53560466154001e-06,-0.00466424677055122,0.115408876637452,-0.219011249813027, -1.55138462781812e-06,-0.00449307244768082,0.125863055297111,-0.250233253788575, -1.56716459409623e-06,-0.00432189812481065,0.13631723395677,-0.281455257764124, -1.58294456037433e-06,-0.00415072380194026,0.146771412616429,-0.312677261739672, -1.59872452665244e-06,-0.0039795494790702,0.157225591276087,-0.34389926571522, -1.61450449293055e-06,-0.00380837515619969,0.167679769935746,-0.375121269690768, -1.6302844594307e-06,-0.00363720083332941,0.178133948595405,-0.406343273666317, -1.64606442565329e-06,-0.00346602651045935,0.188588127255064,-0.437565277641865, -1.66184439198691e-06,-0.00329485218758907,0.199042305914723,-0.468787281617413, -1.67762435832053e-06,-0.00312367786471879,0.209496484574381,-0.500009285592961, -1.69340432487619e-06,-0.00295250354184895,0.21995066323404,-0.53123128956851, -1.70918429132083e-06,-0.00278132921897867,0.230404841893699,-0.562453293544058, -1.72496425698832e-06,-0.0026101548961075,0.240859020553358,-0.593675297519606, -1.74074422376602e-06,-0.00243898057323833,0.251313199213016,-0.624897301495154, -1.75652418965555e-06,-0.00226780625036715,0.261767377872676,-0.656119305470703, -1.77230415632224e-06,-0.00209663192749732,0.272221556532334,-0.687341309446251, -1.78808412265585e-06,-0.00192545760462703,0.282675735191993,-0.718563313421799, -1.80386408887845e-06,-0.00175428328175631,0.293129913851653,-0.749785317397347, -1.81964405499002e-06,-0.00158310895888603,0.303584092511311,-0.781007321372896, -1.83542402110159e-06,-0.00141193463601486,0.314038271170971,-0.812229325348444, -1.05409447145877e-06,-0.0055012386522445,0.0630448669403176,-0.0629813351146762, -1.06416351181027e-06,-0.00533824956799184,0.0734381730101917,-0.0942401464406587, -1.07423255221728e-06,-0.00517526048373934,0.0838314790800657,-0.125498957766641, -1.08430159240225e-06,-0.00501227139948646,0.0942247851499398,-0.156757769092624, -1.09437063283702e-06,-0.00484928231523385,0.104618091219814,-0.188016580418606, -1.10443967316076e-06,-0.00468629323098124,0.115011397289688,-0.219275391744589, -1.11450871376206e-06,-0.00452330414672886,0.125404703359562,-0.250534203070571, -1.1245777540303e-06,-0.00436031506247636,0.135798009429436,-0.281793014396554, -1.134646794132e-06,-0.00419732597822309,0.14619131549931,-0.313051825722536, -1.14471583456677e-06,-0.00403433689397037,0.156584621569185,-0.344310637048519, -1.1547848753346e-06,-0.00387134780971876,0.166977927639058,-0.375569448374502, -1.16485391526977e-06,-0.00370835872546516,0.177371233708933,-0.406828259700484, -1.17492295559352e-06,-0.00354536964121266,0.187764539778807,-0.438087071026467, -1.1849919960838e-06,-0.00338238055696016,0.198157845848681,-0.469345882352449, -1.19506103646305e-06,-0.00321939147270722,0.208551151918555,-0.500604693678432, -1.20513007662026e-06,-0.00305640238845473,0.218944457988429,-0.531863505004414, -1.21519911711054e-06,-0.00289341330420201,0.229337764058303,-0.563122316330397, -1.22526815760082e-06,-0.00273042421994929,0.239731070128177,-0.594381127656379, -1.23533719764701e-06,-0.00256743513569657,0.250124376198051,-0.625639938982362, -1.24540623791525e-06,-0.00240444605144363,0.260517682267925,-0.656898750308344, -1.25547527873859e-06,-0.00224145696719225,0.270910988337799,-0.688157561634327, -1.26554431889581e-06,-0.00207846788293908,0.281304294407673,-0.719416372960309, -1.27561335938609e-06,-0.00191547879868637,0.291697600477547,-0.750675184286292, -1.28568240009841e-06,-0.00175248971443365,0.302090906547422,-0.781933995612274, -1.2957514401446e-06,-0.00158950063018182,0.312484212617295,-0.813192806938257, -7.60159664076054e-07,-0.00548754861970574,0.0629768871422562,-0.0630397150369398, -7.6670921528299e-07,-0.00533055962925999,0.0733257758731576,-0.0943253512233551, -7.73258766573193e-07,-0.00517357063881413,0.0836746646040593,-0.12561098740977, -7.79808318002173e-07,-0.00501658164836838,0.0940235533349608,-0.156896623596186, -7.86357868931553e-07,-0.00485959265792213,0.104372442065862,-0.188182259782601, -7.92907420332778e-07,-0.00470260366747643,0.114721330796764,-0.219467895969016, -7.9945697162298e-07,-0.00454561467703063,0.125070219527666,-0.250753532155431, -8.06006522802161e-07,-0.0043886256865846,0.135419108258567,-0.282039168341847, -8.1255607392583e-07,-0.0042316366961388,0.145767996989469,-0.313324804528262, -8.19105625327055e-07,-0.00407464770569299,0.15611688572037,-0.344610440714677, -8.25655176561746e-07,-0.00391765871524696,0.166465774451272,-0.375896076901093, -8.32204728073993e-07,-0.0037606697248016,0.176814663182173,-0.407181713087508, -8.38754279197662e-07,-0.00360368073435535,0.187163551913075,-0.438467349273923, -8.45303830487865e-07,-0.00344669174390955,0.197512440643977,-0.469752985460338, -8.51853381833578e-07,-0.00328970275346396,0.207861329374878,-0.501038621646754, -8.58402932846225e-07,-0.00313271376301794,0.218210218105779,-0.532324257833169, -8.64952484302961e-07,-0.00297572477257235,0.228559106836681,-0.563609894019584, -8.71502035537652e-07,-0.00281873578212632,0.238907995567583,-0.594895530206, -8.78051586661321e-07,-0.00266174679168008,0.249256884298484,-0.626181166392415, -8.84601137673968e-07,-0.00250475780123383,0.259605773029386,-0.65746680257883, -8.91150689130704e-07,-0.00234776881078869,0.269954661760287,-0.688752438765245, -8.97700239810284e-07,-0.00219077982034177,0.280303550491189,-0.720038074951661, -9.04249791489065e-07,-0.00203379082989663,0.29065243922209,-0.751323711138076, -9.10799343278867e-07,-0.00187680183945194,0.301001327952991,-0.782609347324491, -9.17348894513559e-07,-0.00171981284900591,0.311350216683893,-0.813894983510907, -3.87513374328075e-05,-0.00790301093123119,0.0810393634870072,-0.0671847208865598, -4.2471694755325e-05,-0.00723021059810613,0.0963611459252105,-0.0945026907767414, -4.61920520778425e-05,-0.00655741026498113,0.111682928363414,-0.121820660666923, -4.99124094003045e-05,-0.00588460993185602,0.127004710801617,-0.149138630557104, -5.3632766722822e-05,-0.00521180959873102,0.14232649323982,-0.176456600447286, -5.73531240453673e-05,-0.00453900926560591,0.157648275678024,-0.203774570337468, -6.10734813678571e-05,-0.00386620893248102,0.172970058116227,-0.231092540227649, -6.47938386903468e-05,-0.0031934085993558,0.18829184055443,-0.258410510117831, -6.85141960126701e-05,-0.00252060826623057,0.203613622992633,-0.285728480008012, -7.22345533355484e-05,-0.0018478079331059,0.218935405430837,-0.313046449898194, -7.59549106576496e-05,-0.00117500759998013,0.23425718786904,-0.340364419788375, -7.96752679803614e-05,-0.000502207266855681,0.249578970307243,-0.367682389678557, -8.33956253027401e-05,0.000170593066269653,0.264900752745447,-0.395000359568739, -8.71159826254519e-05,0.000843393399394543,0.28022253518365,-0.42231832945892, -9.08363399479972e-05,0.00151619373251966,0.295544317621853,-0.449636299349102, -9.45566972703205e-05,0.00218899406564477,0.310866100060056,-0.476954269239283, -9.82770545928657e-05,0.0028617943987701,0.32618788249826,-0.504272239129465, -0.000101997411915411,0.00353459473189499,0.341509664936463,-0.531590209019646, -0.000105717769237734,0.0042073950650201,0.356831447374666,-0.558908178909828, -0.000109438126560391,0.00488019539814522,0.37215322981287,-0.586226148800009, -0.000113158483883047,0.00555299573126966,0.387475012251072,-0.613544118690191, -0.000116878841205481,0.00622579606439499,0.402796794689276,-0.640862088580373, -0.000120599198527804,0.00689859639752077,0.41811857712748,-0.668180058470554, -0.000124319555850461,0.00757139673064477,0.433440359565682,-0.695498028360736, -0.000128039913172673,0.008244197063771,0.448762142003886,-0.722815998250917, -3.85300721344739e-05,-0.00788329595479953,0.0809844087123069,-0.0672410256727426, -4.22110033521939e-05,-0.00721235489558286,0.0962754640655238,-0.0945803054201955, -4.58919345698305e-05,-0.00654141383636603,0.111566519418741,-0.121919585167648, -4.9572865787717e-05,-0.00587047277714958,0.126857574771957,-0.149258864915101, -5.32537970052704e-05,-0.00519953171793275,0.142148630125174,-0.176598144662554, -5.69347282229904e-05,-0.00452859065871603,0.157439685478391,-0.203937424410007, -6.06156594410434e-05,-0.00385764959949975,0.172730740831608,-0.23127670415746, -6.42965906586523e-05,-0.00318670854028302,0.188021796184825,-0.258615983904913, -6.79775218763723e-05,-0.0025157674810663,0.203312851538042,-0.285955263652366, -7.16584530939257e-05,-0.00184482642184958,0.218603906891258,-0.313294543399819, -7.53393843120898e-05,-0.0011738853626333,0.233894962244475,-0.340633823147271, -7.90203155295877e-05,-0.000502944303416575,0.249186017597692,-0.367973102894724, -8.27012467474741e-05,0.000167996755799704,0.264477072950908,-0.395312382642177, -8.6382177964861e-05,0.000838937815017315,0.279768128304126,-0.42265166238963, -9.0063109182803e-05,0.00150987887423359,0.295059183657343,-0.449990942137083, -9.37440404003009e-05,0.0021808199334501,0.310350239010559,-0.477330221884536, -9.7424971618354e-05,0.00285176099266704,0.325641294363777,-0.504669501631989, -0.000101105902836074,0.00352270205188354,0.340932349716993,-0.532008781379442, -0.000104786834053572,0.00419364311110049,0.35622340507021,-0.559348061126895, -0.000108467765271736,0.00486458417031654,0.371514460423427,-0.586687340874348, -0.000112148696488679,0.00553552522953416,0.386805515776644,-0.6140266206218, -0.000115829627707287,0.00620646628874955,0.40209657112986,-0.641365900369254, -0.000119510558924674,0.00687740734796627,0.417387626483077,-0.668705180116706, -0.000123191490142394,0.00754834840718388,0.432678681836294,-0.696044459864159, -0.000126872421360114,0.00821928946640016,0.447969737189511,-0.723383739611612, -3.82247026755878e-05,-0.00785619318357883,0.0809085332388486,-0.0673186351740324, -4.18515377016149e-05,-0.00718784479051343,0.0961571869407825,-0.0946872880442251, -4.54783727276142e-05,-0.00651949639744787,0.111405840642717,-0.122055940914418, -4.91052077537246e-05,-0.00585114800438247,0.126654494344651,-0.149424593784611, -5.27320427798905e-05,-0.00518279961131718,0.141903148046585,-0.176793246654803, -5.63588778056956e-05,-0.00451445121825145,0.157151801748519,-0.204161899524996, -5.99857128317782e-05,-0.00384610282518616,0.172400455450453,-0.231530552395189, -6.36125478577498e-05,-0.00317775443212054,0.187649109152387,-0.258899205265382, -6.72393828840545e-05,-0.00250940603905536,0.202897762854321,-0.286267858135574, -7.08662179099151e-05,-0.00184105764598974,0.218146416556255,-0.313636511005767, -7.44930529361088e-05,-0.00117270925292456,0.233395070258189,-0.34100516387596, -7.81198879620248e-05,-0.000504360859858943,0.248643723960123,-0.368373816746152, -8.17467229879965e-05,0.000163987533206678,0.263892377662057,-0.395742469616345, -8.53735580140791e-05,0.000832335926271854,0.279141031363991,-0.423111122486538, -8.90003930400507e-05,0.00150068431933792,0.294389685065926,-0.450479775356731, -9.26272280661333e-05,0.00216903271240287,0.309638338767859,-0.477848428226923, -9.62540630918829e-05,0.00283738110546872,0.324886992469793,-0.505217081097116, -9.98808981181876e-05,0.00350572949853367,0.340135646171727,-0.532585733967309, -0.000103507733144048,0.00417407789159951,0.355384299873661,-0.559954386837501, -0.000107134568170131,0.00484242628466491,0.370632953575595,-0.587323039707694, -0.000110761403196546,0.00551077467772965,0.385881607277529,-0.614691692577887, -0.000114388238221963,0.00617912307079571,0.401130260979463,-0.64206034544808, -0.00011801507324849,0.00684747146386089,0.416378914681397,-0.669428998318272, -0.000121641908274683,0.00751581985692606,0.431627568383331,-0.696797651188465, -0.000125268743299767,0.00818416824999302,0.446876222085266,-0.724166304058658, -3.7805481504255e-05,-0.00781918500902962,0.080804308743738,-0.0674249973764269, -4.13586493746843e-05,-0.00715444607824173,0.095994761509842,-0.0948339054985397, -4.49118172448915e-05,-0.00648970714745345,0.111185214275946,-0.122242813620652, -4.84649851153485e-05,-0.00582496821666545,0.12637566704205,-0.149651721742765, -5.20181529854447e-05,-0.00516022928587712,0.141566119808155,-0.177060629864878, -5.55713208558739e-05,-0.004495490355089,0.156756572574259,-0.204469537986991, -5.91244887262476e-05,-0.00383075142430112,0.171947025340363,-0.231878446109104, -6.26776565967879e-05,-0.00316601249351334,0.187137478106467,-0.259287354231217, -6.62308244668286e-05,-0.00250127356272478,0.202327930872571,-0.286696262353329, -6.97839923374244e-05,-0.00183653463193689,0.217518383638675,-0.314105170475442, -7.33371602074095e-05,-0.00117179570114856,0.232708836404779,-0.341514078597555, -7.68903280778943e-05,-0.00050705677036067,0.247899289170883,-0.368922986719668, -8.04434959479905e-05,0.000157682160427886,0.263089741936988,-0.39633189484178, -8.39966638188638e-05,0.000822421091215109,0.278280194703092,-0.423740802963893, -8.75498316887935e-05,0.00148716002200411,0.293470647469196,-0.451149711086006, -9.11029995592783e-05,0.00215189895279155,0.3086611002353,-0.478558619208119, -9.46561674292079e-05,0.00281663788358033,0.323851553001405,-0.505967527330232, -9.82093353001368e-05,0.00348137681436778,0.339042005767509,-0.533376435452344, -0.000101762503170177,0.00414611574515589,0.354232458533613,-0.560785343574457, -0.000105315671040773,0.00481085467594422,0.369422911299717,-0.58819425169657, -0.00010886883891148,0.00547559360673144,0.384613364065821,-0.615603159818683, -0.00011242200678141,0.00614033253752044,0.399803816831926,-0.643012067940796, -0.000115975174651783,0.00680507146830811,0.414994269598029,-0.670420976062908, -0.000119528342522268,0.00746981039909622,0.430184722364133,-0.697829884185021, -0.000123081510392309,0.00813454932988522,0.445375175130238,-0.725238792307134, -3.72341175191859e-05,-0.00776911545554998,0.0806621483403185,-0.0675696216167753, -4.06879996476817e-05,-0.00710938885211015,0.0957732957329877,-0.0950332661499243, -4.41418817761219e-05,-0.0064496622486705,0.110884443125657,-0.122496910683073, -4.75957639044233e-05,-0.00578993564523034,0.125995590518326,-0.149960555216222, -5.10496460329191e-05,-0.00513020904179062,0.141106737910995,-0.177424199749371, -5.4503528161276e-05,-0.00447048243835069,0.156217885303664,-0.20488784428252, -5.7957410289744e-05,-0.00381075583491108,0.171329032696333,-0.232351488815669, -6.14112924179899e-05,-0.00315102923147093,0.186440180089003,-0.259815133348818, -6.48651745466244e-05,-0.00249130262803132,0.201551327481672,-0.287278777881967, -6.83190566749814e-05,-0.00183157602459127,0.216662474874341,-0.314742422415116, -7.17729388035049e-05,-0.00117184942115189,0.23177362226701,-0.342206066948265, -7.52268209318063e-05,-0.000512122817711624,0.246884769659679,-0.369669711481414, -7.86807030599412e-05,0.000147603785728201,0.261995917052348,-0.397133356014562, -8.21345851884647e-05,0.000807330389168248,0.277107064445018,-0.424597000547711, -8.55884673173213e-05,0.00146705699260696,0.292218211837686,-0.45206064508086, -8.90423494456227e-05,0.00212678359604745,0.307329359230356,-0.479524289614009, -9.24962315739242e-05,0.00278651019948728,0.322440506623025,-0.506987934147158, -9.59501137020036e-05,0.00344623680292755,0.337551654015694,-0.534451578680307, -9.94039958305271e-05,0.0041059634063676,0.352662801408363,-0.561915223213456, -0.000102857877959162,0.00476569000980698,0.367773948801032,-0.589378867746605, -0.00010631176008713,0.00542541661324725,0.382885096193701,-0.616842512279754, -0.000109765642215653,0.00608514321668707,0.39799624358637,-0.644306156812903, -0.000113219524344066,0.0067448698201269,0.413107390979039,-0.671769801346051, -0.000116673406472811,0.00740459642356628,0.428218538371709,-0.699233445879201, -0.000120127288600669,0.00806432302700655,0.443329685764378,-0.72669709041235, -3.64630431560764e-05,-0.00770221594930115,0.0804700980057073,-0.0677641813430692, -3.97849844228915e-05,-0.00704942226023914,0.0954742529407388,-0.0953014615345548, -4.31069256898453e-05,-0.00639662857117718,0.11047840787577,-0.12283874172604, -4.64288669568269e-05,-0.00574383488211527,0.125482562810802,-0.150376021917526, -4.97508082238363e-05,-0.00509104119305337,0.140486717745833,-0.177913302109012, -5.30727494907346e-05,-0.00443824750399169,0.155490872680865,-0.205450582300497, -5.6394690757855e-05,-0.0037854538149299,0.170495027615896,-0.232987862491983, -5.97166320246423e-05,-0.00313266012586766,0.185499182550928,-0.260525142683468, -6.30385732917627e-05,-0.00247986643680598,0.200503337485959,-0.288062422874954, -6.636051455855e-05,-0.00182707274774385,0.215507492420991,-0.31559970306644, -6.96824558258369e-05,-0.00117427905868239,0.230511647356022,-0.343136983257925, -7.30043970924577e-05,-0.000521485369620045,0.245515802291054,-0.370674263449411, -7.6326338359578e-05,0.000131308319441636,0.260519957226085,-0.398211543640897, -7.96482796265874e-05,0.000784102008503096,0.275524112161116,-0.425748823832382, -8.29702208930971e-05,0.00143689569756567,0.290528267096148,-0.453286104023868, -8.6292162160384e-05,0.00208968938662712,0.305532422031179,-0.480823384215353, -8.9614103427671e-05,0.00274248307568925,0.320536576966211,-0.508360664406839, -9.29360446944028e-05,0.00339527676475115,0.335540731901242,-0.535897944598325, -9.62579859613566e-05,0.00404807045381306,0.350544886836274,-0.56343522478981, -9.95799272280884e-05,0.00470086414287518,0.365549041771305,-0.590972504981296, -0.000102901868495042,0.00535365783193686,0.380553196706337,-0.618509785172781, -0.000106223809761885,0.00600645152099899,0.395557351641368,-0.646047065364267, -0.000109545751028617,0.00665924521006112,0.4105615065764,-0.673584345555752, -0.000112867692295682,0.0073120388991228,0.425565661511431,-0.701121625747238, -0.000116189633563191,0.00796483258818403,0.440569816446462,-0.728658905938724, -3.54362035020206e-05,-0.00761431110991845,0.0802139940284266,-0.0680221884059904, -3.85861085285266e-05,-0.00697104754351358,0.0950757263030734,-0.0956571173775994, -4.17360135551159e-05,-0.0063277839771087,0.10993745857772,-0.123292046349208, -4.48859185816775e-05,-0.00568452041070378,0.124799190852367,-0.150926975320817, -4.80358236081835e-05,-0.00504125684429868,0.139660923127014,-0.178561904292426, -5.11857286348283e-05,-0.00439799327789403,0.154522655401661,-0.206196833264035, -5.4335633661251e-05,-0.00375472971148894,0.169384387676308,-0.233831762235644, -5.74855386878959e-05,-0.00311146614508406,0.184246119950955,-0.261466691207253, -6.06354437142076e-05,-0.00246820257867886,0.199107852225602,-0.289101620178862, -6.37853487409079e-05,-0.00182493901227421,0.213969584500249,-0.316736549150471, -6.69352537672752e-05,-0.00118167544586889,0.228831316774896,-0.34437147812208, -7.008515879392e-05,-0.00053841187946424,0.243693049049542,-0.372006407093689, -7.32350638205093e-05,0.000104851686940632,0.258554781324189,-0.399641336065297, -7.63849688468765e-05,0.000748115253345949,0.273416513598836,-0.427276265036906, -7.95348738737989e-05,0.00139137881975016,0.288278245873483,-0.454911194008515, -8.26847789001661e-05,0.00203464238615525,0.30313997814813,-0.482546122980124, -8.58346839267554e-05,0.00267790595256034,0.318001710422777,-0.510181051951733, -8.89845889533447e-05,0.00332116951896522,0.332863442697424,-0.537815980923342, -9.21344939796009e-05,0.00396443308537009,0.34772517497207,-0.565450909894951, -9.52843990065233e-05,0.00460769665177452,0.362586907246717,-0.59308583886656, -9.84343040325575e-05,0.00525096021818028,0.377448639521365,-0.620720767838169, -0.000101584209059147,0.00589422378458515,0.392310371796011,-0.648355696809777, -0.00010473411408618,0.00653748735098958,0.407172104070658,-0.675990625781386, -0.000107884019112658,0.00718075091739445,0.422033836345305,-0.703625554752995, -0.000111033924139248,0.00782401448379977,0.436895568619952,-0.731260483724604, -3.40927319410211e-05,-0.00750131884290484,0.0798783290034158,-0.0683578978307025, -3.70239188101085e-05,-0.00687103020131541,0.0945538257009949,-0.0961198838503931, -3.9955105679057e-05,-0.0062407415597257,0.109229322398574,-0.123881869870084, -4.28862925481721e-05,-0.00561045291813633,0.123904819096153,-0.151643855889775, -4.58174794171762e-05,-0.00498016427654668,0.138580315793732,-0.179405841909465, -4.87486662862358e-05,-0.00434987563495703,0.153255812491311,-0.207167827929156, -5.16798531552398e-05,-0.0037195869933675,0.16793130918889,-0.234929813948847, -5.46110400244659e-05,-0.00308929835177818,0.182606805886469,-0.262691799968537, -5.75422268935255e-05,-0.00245900971018886,0.197282302584048,-0.290453785988228, -6.04734137626406e-05,-0.00182872106859922,0.211957799281627,-0.318215772007919, -6.34046006317002e-05,-0.00119843242700979,0.226633295979206,-0.345977758027609, -6.63357875003712e-05,-0.000568143785419695,0.241308792676785,-0.3737397440473, -6.92669743697083e-05,6.21448561692883e-05,0.255984289374364,-0.401501730066991, -7.21981612387124e-05,0.000692433497758937,0.270659786071943,-0.429263716086681, -7.51293481078275e-05,0.00132272213934859,0.285335282769523,-0.457025702106372, -7.80605349766095e-05,0.00195301078093824,0.300010779467101,-0.484787688126063, -8.09917218458356e-05,0.00258329942252766,0.31468627616468,-0.512549674145753, -8.39229087151727e-05,0.00321358806411665,0.329361772862259,-0.540311660165444, -8.68540955839547e-05,0.00384387670570674,0.344037269559839,-0.568073646185135, -8.97852824530698e-05,0.00447416534729594,0.358712766257418,-0.595835632204825, -9.27164693222959e-05,0.00510445398888537,0.373388262954996,-0.623597618224516, -9.56476561917441e-05,0.00573474263047435,0.388063759652575,-0.651359604244207, -9.8578843060082e-05,0.00636503127206511,0.402739256350155,-0.679121590263897, -0.000101510029929308,0.00699531991365365,0.417414753047733,-0.706883576283588, -0.000104441216798534,0.00762560855524308,0.432090249745312,-0.734645562303279, -3.23751147089935e-05,-0.0073601376514536,0.0794482412780845,-0.0687840802472298, -3.50372660770093e-05,-0.00674725802378606,0.0938858129100584,-0.0967073649252313, -3.76994174449974e-05,-0.00613437839611847,0.108323384542032,-0.124630649603233, -4.03615688129577e-05,-0.00552149876845098,0.122760956174006,-0.152553934281234, -4.30237201811123e-05,-0.00490861914078367,0.13719852780598,-0.180477218959236, -4.56858715489616e-05,-0.00429573951311601,0.151636099437954,-0.208400503637237, -4.83480229169775e-05,-0.00368285988544848,0.166073671069928,-0.236323788315239, -5.10101742849378e-05,-0.00306998025778105,0.180511242701902,-0.26424707299324, -5.36723256527871e-05,-0.00245710063011328,0.194948814333875,-0.292170357671241, -5.63344770208585e-05,-0.00184422100244586,0.209386385965849,-0.320093642349243, -5.89966283890409e-05,-0.00123134137477865,0.223823957597823,-0.348016927027244, -6.16587797568902e-05,-0.000618461747110777,0.238261529229797,-0.375940211705246, -6.4320931124906e-05,-5.58211944312603e-06,0.252699100861771,-0.403863496383247, -6.69830824929774e-05,0.000607297508224303,0.267136672493745,-0.431786781061249, -6.96452338608822e-05,0.00122017713589173,0.281574244125719,-0.45971006573925, -7.23073852292311e-05,0.00183305676355872,0.296011815757692,-0.487633350417252, -7.49695365971359e-05,0.00244593639122637,0.310449387389666,-0.515556635095253, -7.76316879649297e-05,0.00305881601889402,0.32488695902164,-0.543479919773254, -8.02938393329455e-05,0.00367169564656189,0.339324530653614,-0.571403204451256, -8.29559907012944e-05,0.00428457527422887,0.353762102285588,-0.599326489129257, -8.56181420687552e-05,0.00489745490189719,0.368199673917562,-0.627249773807259, -8.8280293436549e-05,0.00551033452956462,0.382637245549536,-0.65517305848526, -9.09424448052309e-05,0.0061232141572316,0.397074817181509,-0.683096343163262, -9.36045961724696e-05,0.00673609378489948,0.411512388813483,-0.711019627841263, -9.62667475407075e-05,0.00734897341256691,0.425949960445457,-0.738942912519264, -3.02428762286033e-05,-0.00718989029943223,0.0789129219964207,-0.0693085114166922, -3.25877583167711e-05,-0.00659987447214505,0.0930554171182493,-0.0974302792810717, -3.49326404048278e-05,-0.00600985864485759,0.107197912240078,-0.125552047145451, -3.72775224930511e-05,-0.00541984281757057,0.121340407361906,-0.153673815009831, -3.96224045812188e-05,-0.00482982699028334,0.135482902483735,-0.18179558287421, -4.19672866693865e-05,-0.00423981116299621,0.149625397605564,-0.209917350738589, -4.43121687574988e-05,-0.00364979533570886,0.163767892727392,-0.238039118602969, -4.6657050845722e-05,-0.00305977950842173,0.177910387849221,-0.266160886467348, -4.90019329335012e-05,-0.00246976368113416,0.19205288297105,-0.294282654331728, -5.1346815022113e-05,-0.00187974785384726,0.206195378092878,-0.322404422196107, -5.36916971101142e-05,-0.00128973202655991,0.220337873214707,-0.350526190060487, -5.60365791982265e-05,-0.000699716199272782,0.234480368336535,-0.378647957924866, -5.83814612863942e-05,-0.000109700371985211,0.248622863458364,-0.406769725789246, -6.07263433740624e-05,0.00048031545530236,0.262765358580193,-0.434891493653625, -6.30712254625632e-05,0.00107033128258904,0.276907853702021,-0.463013261518005, -6.54161075507309e-05,0.00166034710987639,0.29105034882385,-0.491135029382384, -6.77609896391207e-05,0.0022503629371633,0.305192843945679,-0.519256797246763, -7.01058717271774e-05,0.00284037876445042,0.319335339067507,-0.547378565111143, -7.24507538153452e-05,0.00343039459173822,0.333477834189336,-0.575500332975522, -7.47956359030688e-05,0.00402041041902557,0.347620329311165,-0.603622100839901, -7.71405179913476e-05,0.00461042624631247,0.361762824432993,-0.631743868704281, -7.94854000790712e-05,0.00520044207360026,0.375905319554822,-0.65986563656866, -8.18302821677941e-05,0.00579045790088673,0.39004781467665,-0.68798740443304, -8.41751642562949e-05,0.00638047372817363,0.404190309798479,-0.716109172297419, -8.65200463442406e-05,0.00697048955546142,0.418332804920308,-0.744230940161799, -2.76906766451257e-05,-0.00699323286277509,0.0782702182224257,-0.0699296381602874, -2.96804563928443e-05,-0.00643235776638196,0.0920599444313986,-0.0982864859024318, -3.16702361404242e-05,-0.00587148266998838,0.105849670640372,-0.126643333644576, -3.36600158881706e-05,-0.00531060757359525,0.119639396849345,-0.155000181386721, -3.56497956355284e-05,-0.00474973247720156,0.133429123058318,-0.183357029128865, -3.76395753833858e-05,-0.00418885738080843,0.147218849267291,-0.211713876871009, -3.96293551312987e-05,-0.00362798228441552,0.161008575476263,-0.240070724613154, -4.16191348788786e-05,-0.00306710718802206,0.174798301685236,-0.268427572355298, -4.36089146262364e-05,-0.00250623209162826,0.188588027894209,-0.296784420097443, -4.55986943740938e-05,-0.00194535699523524,0.202377754103182,-0.325141267839587, -4.75884741218402e-05,-0.00138448189884222,0.216167480312155,-0.353498115581731, -4.9578253869309e-05,-0.000823606802448751,0.229957206521128,-0.381854963323876, -5.15680336170554e-05,-0.000262731706055064,0.243746932730101,-0.41021181106602, -5.35578133643577e-05,0.000298143390338623,0.257536658939074,-0.438568658808165, -5.55475931122151e-05,0.000859018486731644,0.271326385148047,-0.466925506550309, -5.75373728599615e-05,0.00141989358312467,0.28511611135702,-0.495282354292453, -5.95271526078189e-05,0.00198076867951791,0.298905837565993,-0.523639202034598, -6.15169323548992e-05,0.00254164377591204,0.312695563774966,-0.551996049776742, -6.35067121030897e-05,0.00310251887230462,0.326485289983939,-0.580352897518886, -6.54964918502809e-05,0.00366339396869808,0.340275016192912,-0.608709745261031, -6.74862715981384e-05,0.00422426906509132,0.354064742401885,-0.637066593003175, -6.94760513461068e-05,0.00478514416148412,0.367854468610857,-0.66542344074532, -7.1465831092965e-05,0.00534601925787914,0.381644194819831,-0.693780288487464, -7.34556108410445e-05,0.0059068943542715,0.395433921028804,-0.722137136229608, -7.54453905891239e-05,0.0064677694506643,0.409223647237776,-0.750493983971753, -2.4765843945479e-05,-0.00677712800949692,0.0775312295647967,-0.0706328365407603, -2.63822469181996e-05,-0.00625194792299394,0.0909172739889085,-0.0992558260825144, -2.79986498909757e-05,-0.00572676783649095,0.10430331841302,-0.127878815624268, -2.96150528635852e-05,-0.0052015877499878,0.117689362837132,-0.156501805166023, -3.12314558363336e-05,-0.00467640766348476,0.131075407261244,-0.185124794707777, -3.28478588090264e-05,-0.00415122757698183,0.144461451685356,-0.213747784249531, -3.44642617820523e-05,-0.00362604749047912,0.157847496109467,-0.242370773791285, -3.60806647545786e-05,-0.00310086740397575,0.171233540533579,-0.270993763333039, -3.76970677272714e-05,-0.00257568731747249,0.184619584957691,-0.299616752874793, -3.93134706999643e-05,-0.00205050723096978,0.198005629381803,-0.328239742416547, -4.09298736725461e-05,-0.0015253271444664,0.211391673805915,-0.356862731958301, -4.25462766455165e-05,-0.0010001470579637,0.224777718230027,-0.385485721500055, -4.41626796184313e-05,-0.000474966971460766,0.238163762654138,-0.414108711041809, -4.57790825910687e-05,5.02131150419416e-05,0.25154980707825,-0.442731700583563, -4.73954855636505e-05,0.00057539320154576,0.264935851502362,-0.471354690125317, -4.90118885365654e-05,0.00110057328804825,0.278321895926474,-0.499977679667071, -5.06282915089251e-05,0.00162575337455162,0.291707940350586,-0.528600669208825, -5.22446944821731e-05,0.00215093346105433,0.305093984774698,-0.557223658750579, -5.38610974546438e-05,0.00267611354755748,0.318480029198809,-0.585846648292333, -5.54775004271146e-05,0.00320129363406085,0.331866073622921,-0.614469637834087, -5.70939034004736e-05,0.00372647372056267,0.345252118047032,-0.643092627375841, -5.87103063727223e-05,0.00425165380706627,0.358638162471144,-0.671715616917596, -6.03267093456372e-05,0.00477683389356942,0.372024206895256,-0.700338606459349, -6.19431123183301e-05,0.00530201398007257,0.385410251319368,-0.728961596001104, -6.35595152911339e-05,0.00582719406657572,0.39879629574348,-0.757584585542858, -2.15765426092307e-05,-0.00655239545050879,0.0767226627807991,-0.0713894207000596, -2.28274613289781e-05,-0.00606883491992061,0.0896692784930238,-0.100298757132398, -2.40783800486977e-05,-0.00558527438933248,0.102615894205248,-0.129208093564736, -2.5329298768334e-05,-0.00510171385874414,0.115562509917473,-0.158117429997074, -2.65802174880814e-05,-0.00461815332815607,0.128509125629697,-0.187026766429412, -2.78311362078565e-05,-0.004134592797568,0.141455741341922,-0.21593610286175, -2.90820549274096e-05,-0.00365103226697949,0.154402357054147,-0.244845439294088, -3.03329736473512e-05,-0.00316747173639176,0.167348972766371,-0.273754775726425, -3.15838923667378e-05,-0.00268391120580325,0.180295588478596,-0.302664112158763, -3.28348110867349e-05,-0.00220035067521507,0.19324220419082,-0.331573448591101, -3.40857298061215e-05,-0.00171679014462689,0.206188819903045,-0.360482785023439, -3.53366485258966e-05,-0.00123322961403871,0.219135435615269,-0.389392121455777, -3.65875672462268e-05,-0.000749669083451199,0.232082051327494,-0.418301457888115, -3.78384859658354e-05,-0.00026610855286302,0.245028667039718,-0.447210794320453, -3.9089404685333e-05,0.000217451977725602,0.257975282751943,-0.476120130752791, -4.03403234051636e-05,0.000701012508313781,0.270921898464167,-0.505029467185129, -4.15912421247722e-05,0.00118457303890174,0.283868514176392,-0.533938803617467, -4.28421608440477e-05,0.00166813356949014,0.296815129888616,-0.562848140049805, -4.40930795638783e-05,0.00215169410007854,0.309761745600841,-0.591757476482143, -4.53439982843751e-05,0.00263525463066605,0.322708361313066,-0.620666812914481, -4.65949170036506e-05,0.00311881516125379,0.335654977025289,-0.649576149346819, -4.78458357230371e-05,0.00360237569184285,0.348601592737515,-0.678485485779157, -4.90967544434229e-05,0.00408593622243014,0.361548208449739,-0.707394822211495, -5.03476731626984e-05,0.00456949675301965,0.374494824161964,-0.736304158643833, -5.15985918828621e-05,0.00505305728360694,0.387441439874189,-0.765213495076171, -1.82820068112266e-05,-0.00633178907998166,0.0758846509921035,-0.0721601188421155, -1.92020081763167e-05,-0.00589405962601686,0.0883782051392907,-0.101361143930426, -2.01220095410737e-05,-0.00545633017205149,0.100871759286478,-0.130562169018737, -2.10420109060805e-05,-0.00501860071808657,0.113365313433665,-0.159763194107048, -2.1962012271004e-05,-0.00458087126412166,0.125858867580853,-0.188964219195359, -2.2882013635761e-05,-0.00414314181015618,0.13835242172804,-0.21816524428367, -2.38020150007401e-05,-0.00370541235619148,0.150845975875227,-0.247366269371981, -2.47220163657191e-05,-0.00326768290222657,0.163339530022415,-0.276567294460292, -2.56420177306982e-05,-0.00282995344826165,0.175833084169602,-0.305768319548603, -2.65620190952887e-05,-0.00239222399429595,0.18832663831679,-0.334969344636914, -2.74820204602677e-05,-0.00195449454033114,0.200820192463977,-0.364170369725225, -2.84020218253578e-05,-0.00151676508636611,0.213313746611164,-0.393371394813536, -2.93220231902258e-05,-0.00107903563240108,0.225807300758351,-0.422572419901847, -3.02420245549273e-05,-0.000641306178436052,0.238300854905539,-0.451773444990158, -3.11620259195733e-05,-0.000203576724470356,0.250794409052726,-0.480974470078469, -3.20820272849964e-05,0.000234152729494008,0.263287963199913,-0.51017549516678, -3.30020286495314e-05,0.00067188218345926,0.275781517347101,-0.539376520255091, -3.39220300145104e-05,0.00110961163742429,0.288275071494288,-0.568577545343402, -3.48420313798226e-05,0.0015473410913891,0.300768625641475,-0.597778570431713, -3.57620327445796e-05,0.00198507054535391,0.313262179788662,-0.626979595520024, -3.66820341088925e-05,0.00242279999931982,0.32575573393585,-0.656180620608335, -3.76020354743156e-05,0.00286052945328441,0.338249288083037,-0.685381645696646, -3.85220368391836e-05,0.003298258907249,0.350742842230224,-0.714582670784957, -3.94420382042737e-05,0.00373598836121447,0.363236396377412,-0.743783695873268, -4.03620395693638e-05,0.00417371781517817,0.375729950524598,-0.772984720961579, -1.5063564925144e-05,-0.00612720700004926,0.0750635316699236,-0.0729026729103611, -1.57071187954771e-05,-0.00573692304783152,0.087115380217898,-0.102384734874635, -1.63506726658103e-05,-0.00534663909561384,0.0991672287658724,-0.131866796838909, -1.69942265362821e-05,-0.00495635514339632,0.111219077313847,-0.161348858803183, -1.76377804065875e-05,-0.00456607119117847,0.123270925861821,-0.190830920767457, -1.82813342767263e-05,-0.00417578723896062,0.135322774409796,-0.220312982731731, -1.89248881469761e-05,-0.00378550328674265,0.14737462295777,-0.249795044696005, -1.95684420172815e-05,-0.0033952193345248,0.159426471505745,-0.279277106660279, -2.02119958878644e-05,-0.00300493538230762,0.171478320053719,-0.308759168624553, -2.08555497580587e-05,-0.00261465143008976,0.183530168601693,-0.338241230588827, -2.14991036285861e-05,-0.00222436747787191,0.195582017149668,-0.367723292553101, -2.21426574988914e-05,-0.00183408352565428,0.207633865697642,-0.397205354517375, -2.27862113692523e-05,-0.00144379957343665,0.219685714245616,-0.426687416481649, -2.34297652392801e-05,-0.00105351562121836,0.231737562793591,-0.456169478445923, -2.40733191100295e-05,-0.000663231669001396,0.243789411341565,-0.485651540410197, -2.47168729804459e-05,-0.000272947716783767,0.255841259889539,-0.515133602374471, -2.53604268505292e-05,0.000117336235434751,0.267893108437514,-0.544615664338745, -2.60039807205015e-05,0.000507620187652824,0.279944956985489,-0.574097726303019, -2.66475345908068e-05,0.000897904139870453,0.291996805533463,-0.603579788267293, -2.72910884614452e-05,0.00128818809208786,0.304048654081438,-0.633061850231567, -2.79346423320836e-05,0.00167847204430505,0.316100502629412,-0.662543912195841, -2.85781962020559e-05,0.00206875599652312,0.328152351177386,-0.692025974160114, -2.92217500724723e-05,0.0024590399487403,0.34020419972536,-0.721508036124388, -2.98653039435548e-05,0.00284932390095749,0.352256048273335,-0.750990098088662, -3.05088578134161e-05,0.00323960785317601,0.364307896821309,-0.780472160052936, -1.20864025979217e-05,-0.00594725462785445,0.0743020124196335,-0.0735807020880631, -1.25164184503479e-05,-0.00560311911021305,0.0859460900176758,-0.103319379981145, -1.29464343028574e-05,-0.00525898359257171,0.0975901676157181,-0.133058057874227, -1.33764501551448e-05,-0.00491484807493003,0.109234245213761,-0.16279673576731, -1.3806466007571e-05,-0.00457071255728869,0.120878322811803,-0.192535413660392, -1.42364818601082e-05,-0.00422657703964724,0.132522400409845,-0.222274091553474, -1.46664977125899e-05,-0.00388244152200601,0.144166478007888,-0.252012769446556, -1.50965135650161e-05,-0.00353830600436444,0.15581055560593,-0.281751447339638, -1.55265294173867e-05,-0.0031941704867231,0.167454633203972,-0.31149012523272, -1.59565452695354e-05,-0.00285003496908121,0.179098710802015,-0.341228803125802, -1.63865611221836e-05,-0.0025058994514402,0.190742788400057,-0.370967481018885, -1.68165769746098e-05,-0.0021617639337983,0.2023868659981,-0.400706158911967, -1.7246592826925e-05,-0.00181762841615729,0.214030943596142,-0.430444836805049, -1.76766086796842e-05,-0.00147349289851606,0.225675021194184,-0.460183514698131, -1.81066245319439e-05,-0.00112935738087461,0.237319098792226,-0.489922192591213, -1.85366403843146e-05,-0.000785221863233154,0.248963176390269,-0.519660870484295, -1.89666562371293e-05,-0.000441086345591701,0.260607253988312,-0.549399548377378, -1.93966720890559e-05,-9.69508279502485e-05,0.272251331586354,-0.57913822627046, -1.98266879414266e-05,0.000247184689690982,0.283895409184396,-0.608876904163542, -2.02567037944634e-05,0.000591320207332213,0.295539486782438,-0.638615582056624, -2.0686719646057e-05,0.000935455724974776,0.307183564380481,-0.668354259949706, -2.11167354994268e-05,0.00127959124261467,0.318827641978523,-0.698092937842788, -2.15467513519085e-05,0.00162372676025635,0.330471719576565,-0.727831615735871, -2.19767672036131e-05,0.00196786227789847,0.342115797174608,-0.757570293628953, -2.24067830565389e-05,0.00231199779553926,0.35375987477265,-0.787308971522035, -9.46817859062699e-06,-0.00579615041194154,0.0736309015583511,-0.0741701195065835, -9.74466901729198e-06,-0.00549432899130387,0.0849170501959846,-0.10413187614507, -1.00211594437905e-05,-0.00519250757066592,0.0962031988336182,-0.134093632783557, -1.02976498701224e-05,-0.00489068615002786,0.107489347471252,-0.164055389422043, -1.05741402965931e-05,-0.00458886472938991,0.118775496108885,-0.19401714606053, -1.08506307232026e-05,-0.00428704330875218,0.130061644746519,-0.223978902699016, -1.11271211498121e-05,-0.00398522188811445,0.141347793384152,-0.253940659337503, -1.1403611576144e-05,-0.00368340046747617,0.152633942021786,-0.283902415975989, -1.16801020029755e-05,-0.00338157904683878,0.163920090659419,-0.313864172614476, -1.19565924294185e-05,-0.00307975762620094,0.175206239297053,-0.343825929252962, -1.2233082855917e-05,-0.00277793620556266,0.186492387934687,-0.373787685891449, -1.25095732820824e-05,-0.00247611478492482,0.19777853657232,-0.403749442529935, -1.27860637087474e-05,-0.00217429336428698,0.209064685209953,-0.433711199168422, -1.30625541352458e-05,-0.00187247194364892,0.220350833847587,-0.463672955806908, -1.33390445619108e-05,-0.00157065052301131,0.23163698248522,-0.493634712445395, -1.36155349885758e-05,-0.00126882910237369,0.242923131122854,-0.523596469083881, -1.38920254150188e-05,-0.000967007681735188,0.254209279760488,-0.553558225722368, -1.41685158416838e-05,-0.000665186261098238,0.265495428398121,-0.583519982360854, -1.44450062683488e-05,-0.000363364840459957,0.276781577035755,-0.613481738999341, -1.47214966944587e-05,-6.15434198212306e-05,0.288067725673389,-0.643443495637827, -1.49979871211237e-05,0.000240278000815497,0.299353874311021,-0.673405252276314, -1.52744775475666e-05,0.000542099421454001,0.310640022948655,-0.703367008914801, -1.55509679742316e-05,0.000843920842091617,0.321926171586289,-0.733328765553287, -1.58274584005635e-05,0.00114574226273012,0.333212320223923,-0.763290522191774, -1.61039488268955e-05,0.00144756368336862,0.344498468861556,-0.79325227883026, -7.26597980485466e-06,-0.00567409848383488,0.0730655058317331,-0.0746610077444901, -7.43868304958761e-06,-0.00540908042356814,0.0840511094225305,-0.10480855246593, -7.61138629457037e-06,-0.00514406236330178,0.0950367130133277,-0.134956097187369, -7.78408953930332e-06,-0.00487904430303487,0.106022316604125,-0.165103641908808, -7.95679278386974e-06,-0.00461402624276808,0.117007920194923,-0.195251186630248, -8.12949602868596e-06,-0.00434900818250128,0.12799352378572,-0.225398731351687, -8.30219927366871e-06,-0.00408399012223493,0.138979127376517,-0.255546276073127, -8.47490251837391e-06,-0.00381897206196802,0.149964730967315,-0.285693820794566, -8.64760576319012e-06,-0.00355395400170155,0.160950334558112,-0.315841365516006, -8.82030900756225e-06,-0.00328893594143409,0.17193593814891,-0.345988910237445, -8.99301225282256e-06,-0.0030239178811684,0.182921541739706,-0.376136454958885, -9.16571549736123e-06,-0.00275889982090094,0.193907145330504,-0.406283999680324, -9.33841874239949e-06,-0.00249388176063503,0.204892748921301,-0.436431544401764, -9.51112198721571e-06,-0.00222886370036846,0.215878352512099,-0.466579089123203, -9.68382523192091e-06,-0.00196384564010166,0.226863956102896,-0.496726633844643, -9.85652847673713e-06,-0.00169882757983464,0.237849559693694,-0.526874178566082, -1.00292317213313e-05,-0.00143380951956784,0.248835163284491,-0.557021723287522, -1.02019349662585e-05,-0.00116879145930149,0.259820766875288,-0.587169268008961, -1.03746382108527e-05,-0.000903773399034247,0.270806370466086,-0.617316812730401, -1.05473414556689e-05,-0.000638755338767893,0.281791974056883,-0.64746435745184, -1.07200447010403e-05,-0.00037373727850154,0.29277757764768,-0.677611902173279, -1.08927479450793e-05,-0.000108719218234299,0.303763181238478,-0.707759446894719, -1.10654511904507e-05,0.00015629884203161,0.314748784829275,-0.737906991616159, -1.12381544351559e-05,0.000421316902298408,0.325734388420072,-0.768054536337598, -1.1410857679639e-05,0.000686334962565649,0.33671999201087,-0.798202081059038, -5.482051736172e-06,-0.00557852921852242,0.0726069333781728,-0.0750554505952252, -5.58796033722775e-06,-0.00534411450003119,0.0833494278031076,-0.105352281397311, -5.6938689382835e-06,-0.00510969978153997,0.0940919222280422,-0.135649112199397, -5.79977753953353e-06,-0.00487528506304891,0.104834416652977,-0.165945943001483, -5.90568614045051e-06,-0.00464087034455729,0.115576911077912,-0.196242773803569, -6.01159474145074e-06,-0.00440645562606612,0.126319405502847,-0.226539604605656, -6.11750334272854e-06,-0.00417204090757506,0.137061899927781,-0.256836435407742, -6.22341194367326e-06,-0.00393762618908367,0.147804394352716,-0.287133266209828, -6.32932054495106e-06,-0.00370321147059305,0.15854688877765,-0.317430097011914, -6.43522914595129e-06,-0.00346879675210143,0.169289383202585,-0.347726927814, -6.54113774684051e-06,-0.00323438203361004,0.18003187762752,-0.378023758616086, -6.64704634817381e-06,-0.00299996731511909,0.190774372052455,-0.408320589418172, -6.75295494911854e-06,-0.0027655525966277,0.20151686647739,-0.438617420220258, -6.85886355000775e-06,-0.00253113787813608,0.212259360902325,-0.468914251022344, -6.96477215134106e-06,-0.00229672315964491,0.223001855327259,-0.49921108182443, -7.0706807523413e-06,-0.00206230844115396,0.233744349752194,-0.529507912626516, -7.17658935323051e-06,-0.00182789372266257,0.244486844177129,-0.559804743428602, -7.28249795467484e-06,-0.00159347900417162,0.255229338602063,-0.590101574230688, -7.38840655545303e-06,-0.00135906428568022,0.265971833026998,-0.620398405032774, -7.4943151571194e-06,-0.00112464956718972,0.276714327451933,-0.65069523583486, -7.60022375800862e-06,-0.000890234848697879,0.287456821876868,-0.680992066636946, -7.70613235945294e-06,-0.000655820130207374,0.298199316301802,-0.711288897439032, -7.81204095978705e-06,-0.000421405411715092,0.308941810726737,-0.741585728241118, -7.9179495613424e-06,-0.000186990693224143,0.319684305151672,-0.771882559043204, -8.02385816189854e-06,4.7424025267695e-05,0.330426799576607,-0.80217938984529, -4.08043643584932e-06,-0.0055054757741303,0.0722463101057433,-0.0753633723797584, -4.14487548536235e-06,-0.00529559081989184,0.0827980226927252,-0.105776743350523, -4.20931453479212e-06,-0.00508570586565316,0.0933497352797074,-0.136190114321287, -4.27375358424964e-06,-0.0048758209114147,0.103901447866689,-0.166603485292052, -4.33819263379043e-06,-0.00466593595717624,0.114453160453671,-0.197016856262816, -4.40263168310917e-06,-0.00445605100293733,0.125004873040654,-0.22743022723358, -4.46707073264996e-06,-0.0042461660486991,0.135556585627635,-0.257843598204345, -4.53150978219075e-06,-0.00403628109446053,0.146108298214617,-0.288256969175109, -4.59594883178704e-06,-0.00382639614022229,0.156660010801599,-0.318670340145874, -4.66038788093925e-06,-0.00361651118598316,0.167211723388582,-0.349083711116638, -4.72482693042453e-06,-0.0034066262317447,0.177763435975564,-0.379497082087402, -4.78926598024287e-06,-0.00319674127750669,0.188315148562545,-0.409910453058167, -4.85370502956162e-06,-0.00298685632326778,0.198866861149528,-0.440323824028931, -4.91814407888036e-06,-0.00277697136902888,0.20941857373651,-0.470737194999695, -4.98258312853217e-06,-0.00256708641479064,0.219970286323492,-0.50115056597046, -5.04702217807296e-06,-0.00235720146055218,0.230521998910474,-0.531563936941224, -5.1114612273917e-06,-0.00214731650631328,0.241073711497456,-0.561977307911989, -5.17590027682147e-06,-0.00193743155207504,0.251625424084438,-0.592390678882753, -5.24033932691736e-06,-0.00172754659783747,0.262177136671419,-0.622804049853518, -5.30477837601406e-06,-0.00151766164359834,0.272728849258401,-0.653217420824282, -5.36921742555485e-06,-0.00130777668936011,0.283280561845383,-0.683630791795046, -5.43365647542871e-06,-0.00109789173512187,0.293832274432365,-0.714044162765811, -5.4980955245254e-06,-0.000888006780883188,0.304383987019347,-0.744457533736575, -5.56253457417721e-06,-0.000678121826644063,0.31493569960633,-0.77487090470734, -5.626973623718e-06,-0.000468236872406269,0.325487412193311,-0.805284275678104, -3.00539819664269e-06,-0.00545063936356049,0.0719695296992574,-0.0755983749014439, -3.0446734750611e-06,-0.00525985279772129,0.0823750505193432,-0.106100688048088, -3.08394875339624e-06,-0.00506906623188197,0.092780571339429,-0.136603001194732, -3.12322403189791e-06,-0.00487827966604304,0.103186092159515,-0.167105314341376, -3.16249931014978e-06,-0.00468749310020378,0.1135916129796,-0.19760762748802, -3.20177458851267e-06,-0.0044967065343644,0.123997133799686,-0.228109940634663, -3.24104986715312e-06,-0.00430591996852558,0.134402654619772,-0.258612253781307, -3.28032514551602e-06,-0.00411513340268654,0.144808175439857,-0.289114566927951, -3.31960042365687e-06,-0.00392434683684706,0.155213696259943,-0.319616880074595, -3.35887570235283e-06,-0.00373356027100846,0.165619217080029,-0.350119193221239, -3.39815098071572e-06,-0.00354277370516876,0.176024737900115,-0.380621506367883, -3.43742625891208e-06,-0.00335198713932949,0.186430258720201,-0.411123819514527, -3.47670153744151e-06,-0.00316120057349045,0.196835779540286,-0.441626132661171, -3.51597681558236e-06,-0.00297041400765119,0.207241300360372,-0.472128445807814, -3.55525209405627e-06,-0.00277962744181215,0.217646821180458,-0.502630758954458, -3.59452737264121e-06,-0.00258884087597289,0.228052342000544,-0.533133072101102, -3.63380265122615e-06,-0.00239805431013385,0.23845786282063,-0.563635385247746, -3.67307792947802e-06,-0.00220726774429503,0.248863383640715,-0.59413769839439, -3.712353208285e-06,-0.00201648117845621,0.259268904460801,-0.624640011541034, -3.75162848553767e-06,-0.00182569461261561,0.269674425280887,-0.655142324687678, -3.79090376434466e-06,-0.00163490804677657,0.280079946100973,-0.685644637834322, -3.83017904337368e-06,-0.00144412148093842,0.290485466921058,-0.716146950980966, -3.86945432140351e-06,-0.00125333491509938,0.300890987741143,-0.74664926412761, -3.90872959954436e-06,-0.00106254834925945,0.31129650856123,-0.777151577274253, -3.94800487857339e-06,-0.000871761783421299,0.321702029381315,-0.807653890420898, -2.19596999972982e-06,-0.00541002868313351,0.0717610344841811,-0.0757746483461988, -2.22013973152912e-06,-0.00523378236273958,0.0820565633018825,-0.106343676282173, -2.24430946332843e-06,-0.00505753604234593,0.0923520921195836,-0.136912704218147, -2.26847919515549e-06,-0.0048812897219519,0.102647620937285,-0.16748173215412, -2.29264892703807e-06,-0.00470504340155842,0.112943149754986,-0.198050760090094, -2.31681865875411e-06,-0.00452879708116427,0.123238678572688,-0.228619788026068, -2.34098839035912e-06,-0.00435255076077012,0.133534207390389,-0.259188815962042, -2.36515812246374e-06,-0.00417630444037675,0.14382973620809,-0.289757843898016, -2.38932785395773e-06,-0.00400005811998239,0.154125265025792,-0.32032687183399, -2.41349758584031e-06,-0.00382381179958857,0.164420793843493,-0.350895899769964, -2.43766731800044e-06,-0.00364756547919542,0.174716322661194,-0.381464927705938, -2.46183704960545e-06,-0.00347131915880117,0.185011851478896,-0.412033955641912, -2.486006781377e-06,-0.00329507283840691,0.195307380296597,-0.442602983577886, -2.510176512871e-06,-0.0031188265180131,0.205602909114298,-0.473172011513859, -2.53434624464255e-06,-0.00294258019761906,0.215898437932,-0.503741039449833, -2.55851597674717e-06,-0.00276633387722569,0.226193966749701,-0.534310067385807, -2.58268570851872e-06,-0.0025900875568321,0.236489495567402,-0.564879095321781, -2.60685544040129e-06,-0.00241384123643806,0.246785024385104,-0.595448123257755, -2.63102517239489e-06,-0.00223759491604425,0.257080553202805,-0.626017151193729, -2.65519490338928e-06,-0.00206134859564999,0.267376082020506,-0.656586179129703, -2.67936463604901e-06,-0.0018851022752564,0.277671610838208,-0.687155207065677, -2.70353436748749e-06,-0.00170885595486236,0.287967139655909,-0.717724235001651, -2.72770409881495e-06,-0.00153260963446833,0.29826266847361,-0.748293262937625, -2.75187383091957e-06,-0.00135636331407429,0.308558197291312,-0.778862290873598, -2.77604356324623e-06,-0.00118011699368115,0.318853726109013,-0.809431318809572, -1.59498190127616e-06,-0.00538024907151868,0.0716061772516516,-0.075905160244249, -1.61008542687302e-06,-0.00521488692176708,0.0818200837016172,-0.10652358344674, -1.62518895227559e-06,-0.00504952477201526,0.0920339901515828,-0.13714200664923, -1.64029247781694e-06,-0.00488416262226354,0.102247896601548,-0.167760429851721, -1.65539600327502e-06,-0.00471880047251194,0.112461803051514,-0.198378853054212, -1.67049952876086e-06,-0.0045534383227599,0.12267570950148,-0.228997276256702, -1.68560305413568e-06,-0.00438807617300807,0.132889615951445,-0.259615699459193, -1.70070657945498e-06,-0.00422271402325602,0.143103522401411,-0.290234122661683, -1.71581010527389e-06,-0.00405735187350476,0.153317428851377,-0.320852545864174, -1.73091363042666e-06,-0.0038919897237526,0.163531335301342,-0.351470969066664, -1.74601715607903e-06,-0.00372662757400111,0.173745241751308,-0.382089392269155, -1.76112068167589e-06,-0.00356126542424939,0.183959148201273,-0.412707815471646, -1.77622420693968e-06,-0.00339590327449746,0.194173054651239,-0.443326238674136, -1.79132773248103e-06,-0.00323054112474552,0.204386961101205,-0.473944661876627, -1.80643125802238e-06,-0.00306517897499448,0.21460086755117,-0.504563085079118, -1.82153478323066e-06,-0.00289981682524165,0.224814774001136,-0.535181508281608, -1.83663830866099e-06,-0.00273445467548994,0.235028680451102,-0.565799931484099, -1.85174183442438e-06,-0.00256909252573867,0.245242586901067,-0.596418354686589, -1.86684535963266e-06,-0.00240373037598651,0.255456493351033,-0.62703677788908, -1.88194888584015e-06,-0.00223836822623591,0.265670399800998,-0.65765520109157, -1.89705241149252e-06,-0.00207300607648442,0.275884306250963,-0.688273624294061, -1.91215593681182e-06,-0.00190764392673248,0.286098212700929,-0.718892047496552, -1.9272594620201e-06,-0.00174228177698055,0.296312119150895,-0.749510470699042, -1.94236298689532e-06,-0.00157691962722728,0.306526025600861,-0.780128893901533, -1.95746651276973e-06,-0.00141155747747668,0.316739932050826,-0.810747317104024, -1.15336946768241e-06,-0.0053585681419499,0.0714923588165568,-0.07600086250191, -1.16298470706488e-06,-0.00520125136338623,0.081646312938949,-0.106655506452041, -1.17259994661389e-06,-0.00504393458482266,0.0918002670613413,-0.137310150402173, -1.18221518596862e-06,-0.00488661780625899,0.101954221183733,-0.167964794352304, -1.19183042551763e-06,-0.00472930102769553,0.112108175306126,-0.198619438302436, -1.20144566501112e-06,-0.00457198424913197,0.122262129428518,-0.229274082252567, -1.21106090422707e-06,-0.00441466747056796,0.13241608355091,-0.259928726202699, -1.22067614383159e-06,-0.00425735069200461,0.142570037673302,-0.29058337015283, -1.23029138371367e-06,-0.0041000339134416,0.152723991795694,-0.321238014102962, -1.23990662248552e-06,-0.00394271713487715,0.162877945918087,-0.351892658053093, -1.24952186242311e-06,-0.00378540035631425,0.173031900040479,-0.382547302003225, -1.25913710180559e-06,-0.00362808357775046,0.183185854162871,-0.413201945953356, -1.26875234129908e-06,-0.00347076679918668,0.193339808285263,-0.443856589903487, -1.27836758057054e-06,-0.00331345002062311,0.203493762407655,-0.474511233853619, -1.28798281995302e-06,-0.00315613324205932,0.213647716530048,-0.50516587780375, -1.29759805955754e-06,-0.00299881646349598,0.223801670652439,-0.535820521753882, -1.30721329905104e-06,-0.00284149968493219,0.233955624774832,-0.566475165704013, -1.31682853854453e-06,-0.00268418290636885,0.244109578897224,-0.597129809654145, -1.32644377803803e-06,-0.00252686612780528,0.254263533019616,-0.627784453604276, -1.33605901742051e-06,-0.00236954934924194,0.264417487142008,-0.658439097554408, -1.34567425658094e-06,-0.00221223257067749,0.274571441264401,-0.689093741504539, -1.35528949651853e-06,-0.00205491579211525,0.284725395386792,-0.719748385454671, -1.36490473578998e-06,-0.00189759901355124,0.294879349509185,-0.750403029404802, -1.37451997528348e-06,-0.00174028223498723,0.305033303631577,-0.781057673354934, -1.38413521466596e-06,-0.00158296545642367,0.315187257753969,-0.811712317305065, -8.31339066226233e-07,-0.00534286518022409,0.0714093462833771,-0.0760705439261344, -8.37581454998793e-07,-0.00519144046630249,0.0815195955185766,-0.106751560433651, -8.43823843854619e-07,-0.005040015752381,0.0916298447537761,-0.137432576941169, -8.50066232516156e-07,-0.00488859103845918,0.101740093988976,-0.168113593448686, -8.56308621288715e-07,-0.00473716632453769,0.111850343224175,-0.198794609956203, -8.62551009950252e-07,-0.00458574161061576,0.121960592459375,-0.22947562646372, -8.68793398778323e-07,-0.00443431689669427,0.132070841694574,-0.260156642971237, -8.75035787550882e-07,-0.00428289218277278,0.142181090929774,-0.290837659478754, -8.81278176323441e-07,-0.00413146746885107,0.152291340164973,-0.321518675986271, -8.87520564929467e-07,-0.00398004275492903,0.162401589400173,-0.352199692493788, -8.93762954090604e-07,-0.00382861804100831,0.172511838635372,-0.382880709001305, -9.00005342585608e-07,-0.00367719332708605,0.182622087870572,-0.413561725508822, -9.06247731247145e-07,-0.00352576861316445,0.192732337105771,-0.444242742016339, -9.12490119686638e-07,-0.00337434389924218,0.202842586340971,-0.474923758523856, -9.1873250862573e-07,-0.00322291918532081,0.212952835576171,-0.505604775031373, -9.24974897342778e-07,-0.00307149447139921,0.22306308481137,-0.53628579153889, -9.31217286503916e-07,-0.00292006975747805,0.23317333404657,-0.566966808046407, -9.37459675220964e-07,-0.00276864504355623,0.243283583281769,-0.597647824553924, -9.4370206382699e-07,-0.00261722032963463,0.253393832516969,-0.628328841061441, -9.49944452988127e-07,-0.00246579561571325,0.263504081752168,-0.659009857568958, -9.56186841483131e-07,-0.00231437090179165,0.273614330987368,-0.689690874076475, -9.62429230311201e-07,-0.00216294618787005,0.283724580222567,-0.720371890583992, -9.68671618362116e-07,-0.00201152147394756,0.293834829457767,-0.751052907091509, -9.74914006746097e-07,-0.00186009676002552,0.303945078692966,-0.781733923599026, -9.81156396129279e-07,-0.00170867204610481,0.314055327928166,-0.812414940106543, -4.42445513552936e-05,-0.00829168561266924,0.0913637107697273,-0.0777833820791131, -4.81678903504479e-05,-0.0076189447664301,0.106626091225949,-0.104400178095791, -5.20912293454634e-05,-0.00694620392019074,0.121888471682171,-0.131016974112468, -5.60145683403401e-05,-0.00627346307395116,0.137150852138394,-0.157633770129146, -5.99379073354389e-05,-0.00560072222771202,0.152413232594616,-0.184250566145823, -6.38612463303989e-05,-0.00492798138147266,0.167675613050838,-0.210867362162501, -6.77845853253034e-05,-0.0042552405352333,0.18293799350706,-0.237484158179178, -7.17079243202079e-05,-0.00358249968899371,0.198200373963282,-0.264100954195856, -7.56312633155565e-05,-0.00290975884275468,0.213462754419504,-0.290717750212533, -7.95546023104055e-05,-0.00223701799651543,0.228725134875726,-0.317334546229211, -8.3477941305421e-05,-0.00156427715027618,0.243987515331948,-0.343951342245889, -8.74012803005475e-05,-0.000891536304036933,0.25924989578817,-0.370568138262566, -9.13246192953965e-05,-0.000218795457797238,0.274512276244393,-0.397184934279244, -9.52479582900789e-05,0.000453945388442678,0.289774656700615,-0.423801730295921, -9.91712972855385e-05,0.00112668623468104,0.305037037156836,-0.450418526312599, -0.000103094636279999,0.0017994270809214,0.320299417613059,-0.477035322329276, -0.000107017975275681,0.00247216792715999,0.335561798069281,-0.503652118345954, -0.000110941314270363,0.00314490877339968,0.350824178525503,-0.530268914362631, -0.000114864653265156,0.00381764961963915,0.366086558981725,-0.556885710379309, -0.000118787992260061,0.0044903904658784,0.381348939437947,-0.583502506395986, -0.000122711331255299,0.0051631313121181,0.39661131989417,-0.610119302412664, -0.000126634670250536,0.00583587215835646,0.411873700350391,-0.636736098429341, -0.000130558009245441,0.00650861300459571,0.427136080806613,-0.663352894446019, -0.000134481348240789,0.00718135385083452,0.442398461262835,-0.689969690462697, -0.000138404687234917,0.0078540946970751,0.457660841719058,-0.716586486479374, -4.39774573719187e-05,-0.00826637447153794,0.0912927069884302,-0.0778555991839324, -4.78572041406056e-05,-0.00759549191827702,0.106521831821564,-0.104495630683952, -5.17369509092924e-05,-0.00692460936501615,0.121750956654699,-0.131135662183971, -5.56166976781458e-05,-0.00625372681175529,0.136980081487833,-0.15777569368399, -5.94964444469714e-05,-0.00558284425849453,0.152209206320967,-0.18441572518401, -6.33761912157693e-05,-0.00491196170523378,0.167438331154101,-0.211055756684029, -6.72559379843451e-05,-0.00424107915197269,0.182667455987236,-0.237695788184048, -7.11356847533651e-05,-0.00357019659871216,0.19789658082037,-0.264335819684067, -7.50154315221074e-05,-0.00289931404545118,0.213125705653504,-0.290975851184087, -7.88951782908498e-05,-0.00222843149219032,0.228354830486639,-0.317615882684106, -8.27749250594811e-05,-0.00155754893892945,0.243583955319773,-0.344255914184125, -8.66546718284456e-05,-0.000886666385668589,0.258813080152907,-0.370895945684145, -9.0534418597521e-05,-0.000215783832408389,0.274042204986041,-0.397535977184164, -9.44141653657082e-05,0.000455098720853586,0.289271329819176,-0.424176008684183, -9.82939121345616e-05,0.00112598127411401,0.30450045465231,-0.450816040184203, -0.000102173658903748,0.00179686382737465,0.319729579485444,-0.477456071684222, -0.000106053405672046,0.00246774638063596,0.334958704318579,-0.504096103184241, -0.0001099331524409,0.00313862893389683,0.350187829151713,-0.53073613468426, -0.000113812899210086,0.00380951148715702,0.365416953984847,-0.55737616618428, -0.000117692645978607,0.00448039404041811,0.380646078817981,-0.584016197684299, -0.000121572392747349,0.00515127659367876,0.395875203651115,-0.610656229184318, -0.000125452139515314,0.00582215914694073,0.41110432848425,-0.637296260684337, -0.000129331886285278,0.00649304170020049,0.426333453317384,-0.663936292184357, -0.000133211633053909,0.00716392425346113,0.441562578150518,-0.690576323684376, -0.000137091379821763,0.0078348068067231,0.456791702983653,-0.717216355184395, -4.36091194501165e-05,-0.00823161628614266,0.091194734657373,-0.0779550620272648, -4.74291090190593e-05,-0.00756332910621127,0.106377999241316,-0.10462709518735, -5.12490985878911e-05,-0.00689504192627988,0.121561263825259,-0.131299128347435, -5.50690881565841e-05,-0.00622675474634815,0.136744528409202,-0.15797116150752, -5.88890777253881e-05,-0.00555846756641643,0.151927792993146,-0.184643194667606, -6.27090672943309e-05,-0.00489018038648525,0.167111057577089,-0.211315227827691, -6.65290568632737e-05,-0.00422189320655386,0.182294322161032,-0.237987260987776, -7.03490464321055e-05,-0.00355360602662225,0.197477586744975,-0.264659294147861, -7.41690360009928e-05,-0.00288531884669085,0.212660851328918,-0.291331327307946, -7.7989025569547e-05,-0.00221703166675891,0.227844115912861,-0.318003360468031, -8.18090151385453e-05,-0.00154874448682762,0.243027380496804,-0.344675393628117, -8.56290047071551e-05,-0.000880457306895899,0.258210645080748,-0.371347426788202, -8.94489942764309e-05,-0.000212170126965283,0.27339390966469,-0.398019459948287, -9.32689838448741e-05,0.000456117052966887,0.288577174248634,-0.424691493108372, -9.70889734138725e-05,0.00112440423289839,0.303760438832577,-0.451363526268457, -0.000100908962982316,0.00179269141283012,0.31894370341652,-0.478035559428543, -0.000104728952551425,0.0024609785927614,0.334126968000463,-0.504707592588628, -0.000108548942120423,0.00312926577269268,0.349310232584406,-0.531379625748713, -0.000112368931688978,0.00379755295262463,0.364493497168349,-0.558051658908798, -0.000116188921258087,0.00446584013255524,0.379676761752292,-0.584723692068883, -0.00012000891082653,0.00513412731248808,0.394860026336236,-0.611395725228968, -0.00012382890039575,0.00580241449241869,0.410043290920179,-0.638067758389054, -0.000127648889964527,0.00647070167234975,0.425226555504121,-0.664739791549139, -0.000131468879533081,0.0071389888522817,0.440409820088065,-0.691411824709224, -0.000135288869101968,0.00780727603221365,0.455593084672008,-0.718083857869309, -4.3103981690551e-05,-0.00818422557750659,0.0910602743446279,-0.078091223542111, -4.68426985407444e-05,-0.00751955902889478,0.106180648528959,-0.10480706597173, -5.05814153909656e-05,-0.00685489248028326,0.12130102271329,-0.131522908401349, -5.43201322412978e-05,-0.00619022593167173,0.136421396897621,-0.158238750830968, -5.80588490916023e-05,-0.00552555938305999,0.151541771081952,-0.184954593260587, -6.17975659417125e-05,-0.00486089283444835,0.166662145266282,-0.211670435690206, -6.55362827922112e-05,-0.00419622628583705,0.181782519450613,-0.238386278119826, -6.92749996424324e-05,-0.00353155973722541,0.196902893634944,-0.265102120549445, -7.30137164928202e-05,-0.00286689318861377,0.212023267819275,-0.291817962979064, -7.67524333427083e-05,-0.00220222664000191,0.227143642003606,-0.318533805408683, -8.04911501930961e-05,-0.0015375600913905,0.242264016187936,-0.345249647838302, -8.42298670430397e-05,-0.000872893542778419,0.257384390372268,-0.371965490267921, -8.7968583893816e-05,-0.000208226994167227,0.272504764556599,-0.39868133269754, -9.17073007439262e-05,0.000456439554444632,0.287625138740929,-0.425397175127159, -9.54460175939253e-05,0.00112110610305649,0.30274551292526,-0.452113017556778, -9.91847344442576e-05,0.00178577265166791,0.317865887109591,-0.478828859986398, -0.000102923451294479,0.00245043920027954,0.332986261293922,-0.505544702416017, -0.000106662168144922,0.00311510574889118,0.348106635478253,-0.532260544845636, -0.000110400884995254,0.00377977229750237,0.363227009662583,-0.558976387275255, -0.000114139601845475,0.00444443884611445,0.378347383846915,-0.585692229704874, -0.000117878318695475,0.00510910539472587,0.393467758031245,-0.612408072134493, -0.000121617035545918,0.00577377194333772,0.408588132215576,-0.639123914564112, -0.000125355752395917,0.00643843849194914,0.423708506399907,-0.665839756993731, -0.00012909446924636,0.00710310504056055,0.438828880584238,-0.69255559942335, -0.000132833186096248,0.00776777158917241,0.453949254768569,-0.71927144185297, -4.24165047226421e-05,-0.00812023932709,0.0908770912732962,-0.0782760887561202, -4.60458757737259e-05,-0.00746061366440209,0.105911877835496,-0.105051410620858, -4.96752468248096e-05,-0.00680098800171414,0.120946664397695,-0.131826732485596, -5.33046178758378e-05,-0.00614136233902618,0.135981450959895,-0.158602054350334, -5.69339889267551e-05,-0.005481736676338,0.151016237522094,-0.185377376215072, -6.05633599780053e-05,-0.00482211101365038,0.166051024084293,-0.21215269807981, -6.4192731028867e-05,-0.00416248535096231,0.181085810646493,-0.238928019944548, -6.78221020800063e-05,-0.00350285968827435,0.196120597208692,-0.265703341809286, -7.14514731309235e-05,-0.00284323402558639,0.211155383770892,-0.292478663674024, -7.50808441821738e-05,-0.00218360836289855,0.226190170333091,-0.319253985538762, -7.87102152332575e-05,-0.00152398270021092,0.24122495689529,-0.3460293074035, -8.23395862839527e-05,-0.000864357037522412,0.25625974345749,-0.372804629268238, -8.59689573354805e-05,-0.00020473137483501,0.271294530019689,-0.399579951132976, -8.95983283857316e-05,0.000454894287853946,0.286329316581889,-0.426355272997714, -9.32276994374259e-05,0.00111451995054113,0.301364103144088,-0.453130594862452, -9.68570704880101e-05,0.00177414561322942,0.316398889706287,-0.47990591672719, -0.00010048644153926,0.00243377127591748,0.331433676268487,-0.506681238591928, -0.000104115812590289,0.00309339693860511,0.346468462830686,-0.533456560456666, -0.000107745183640984,0.0037530226012934,0.361503249392886,-0.560231882321404, -0.000111374554692456,0.00441264826398102,0.376538035955085,-0.587007204186142, -0.000115003925743262,0.00507227392666953,0.391572822517285,-0.61378252605088, -0.000118633296794401,0.00573189958935716,0.406607609079484,-0.640557847915618, -0.000122262667845541,0.00639152525204523,0.421642395641684,-0.667333169780356, -0.000125892038896347,0.0070511509147333,0.436677182203883,-0.694108491645094, -0.00012952140994793,0.00771077657742003,0.451711968766082,-0.720883813509833, -4.14905306511115e-05,-0.00803497930851171,0.0906300224053497,-0.078524279428037, -4.49749343499617e-05,-0.00738234814739813,0.105549537680614,-0.105379455369414, -4.84593380489229e-05,-0.00672971698628466,0.120469052955878,-0.132234631310791, -5.19437417477175e-05,-0.00607708582517108,0.135388568231143,-0.159089807252168, -5.54281454466232e-05,-0.0054244546640575,0.150308083506407,-0.185944983193545, -5.89125491455289e-05,-0.00477182350294414,0.165227598781671,-0.212800159134922, -6.23969528445456e-05,-0.00411919234183078,0.180147114056936,-0.239655335076299, -6.58813565431182e-05,-0.00346656118071664,0.1950666293322,-0.266510511017676, -6.93657602419684e-05,-0.00281393001960306,0.209986144607464,-0.293365686959053, -7.2850163940763e-05,-0.00216129885848959,0.224905659882729,-0.320220862900431, -7.63345676396132e-05,-0.0015086676973759,0.239825175157993,-0.347076038841807, -7.98189713385189e-05,-0.000856036536262428,0.254744690433257,-0.373931214783185, -8.33033750378132e-05,-0.000203405375149623,0.269664205708521,-0.400786390724562, -8.67877787363858e-05,0.000449225785964513,0.284583720983786,-0.427641566665939, -9.02721824354025e-05,0.00110185694707776,0.29950323625905,-0.454496742607316, -9.37565861341971e-05,0.00175448810819145,0.314422751534315,-0.481351918548693, -9.72409898332138e-05,0.00240711926930492,0.329342266809579,-0.50820709449007, -0.000100725393532008,0.00305975043041884,0.344261782084843,-0.535062270431447, -0.000104209797230914,0.00371238159153187,0.359181297360107,-0.561917446372824, -0.000107694200929487,0.004365012752646,0.374100812635372,-0.588772622314201, -0.000111178604628392,0.00501764391375925,0.389020327910636,-0.615627798255578, -0.000114663008327742,0.00567027507487206,0.4039398431859,-0.642482974196955, -0.000118147412026204,0.00632290623598708,0.418859358461166,-0.669338150138332, -0.000121631815725332,0.00697553739709988,0.433778873736429,-0.69619332607971, -0.000125116219423349,0.00762816855821447,0.448698389011694,-0.723048502021087, -4.02606149702278e-05,-0.00792335697679852,0.0903012669809651,-0.0788525176998919, -4.35565936896254e-05,-0.00728037590829322,0.105067689406134,-0.105813302622921, -4.68525724090507e-05,-0.00663739483978809,0.119834111831304,-0.132774087545949, -5.01485511282818e-05,-0.00599441377128263,0.134600534256473,-0.159734872468978, -5.34445298475128e-05,-0.00535143270277716,0.149366956681643,-0.186695657392007, -5.67405085671879e-05,-0.00470845163427203,0.164133379106812,-0.213656442315036, -6.00364872863079e-05,-0.00406547056576656,0.178899801531981,-0.240617227238064, -6.333246600565e-05,-0.00342248949726132,0.19366622395715,-0.267578012161093, -6.66284447251586e-05,-0.00277950842875585,0.20843264638232,-0.294538797084122, -6.99244234446117e-05,-0.00213652736025094,0.223199068807489,-0.321499582007151, -7.32204021637872e-05,-0.00149354629174536,0.237965491232659,-0.348460366930179, -7.65163808830738e-05,-0.000850565223240007,0.252731913657828,-0.375421151853208, -7.98123596028599e-05,-0.000207584154735319,0.267498336082997,-0.402381936776237, -8.31083383215914e-05,0.000435396913771147,0.282264758508167,-0.429342721699265, -8.64043170409889e-05,0.0010783779822765,0.297031180933336,-0.456303506622294, -8.97002957606086e-05,0.00172135905078119,0.311797603358505,-0.483264291545323, -9.29962744797841e-05,0.00236434011928655,0.326564025783675,-0.510225076468352, -9.62922531992927e-05,0.0030073211877919,0.341330448208844,-0.53718586139138, -9.95882319184682e-05,0.00365030225629703,0.356096870634013,-0.564146646314409, -0.000102884210638421,0.00429328332480194,0.370863293059183,-0.591107431237438, -0.000106180189357707,0.00493626439330752,0.385629715484352,-0.618068216160466, -0.000109476168076772,0.0055792454618131,0.400396137909521,-0.645029001083495, -0.000112772146795614,0.00622222653031912,0.415162560334691,-0.671989786006524, -0.000116068125515345,0.00686520759882381,0.42992898275986,-0.698950570929553, -0.000119364104235298,0.0075081886673285,0.444695405185029,-0.725911355852581, -3.86569647305435e-05,-0.00778056098095492,0.0898716229858205,-0.0792780987456773, -4.17143859098856e-05,-0.00715077028090649,0.104438459646998,-0.106375812188959, -4.47718070892278e-05,-0.00652097958085796,0.119005296308177,-0.133473525632242, -4.78292282686532e-05,-0.00589118888080975,0.133572132969354,-0.160571239075524, -5.08866494480786e-05,-0.00526139818076155,0.148138969630532,-0.187668952518806, -5.39440706273653e-05,-0.00463160748071312,0.16270580629171,-0.214766665962088, -5.70014918070405e-05,-0.0040018167806648,0.177272642952888,-0.24186437940537, -6.00589129863827e-05,-0.00337202608061649,0.191839479614066,-0.268962092848653, -6.31163341656693e-05,-0.00274223538056817,0.206406316275244,-0.296059806291935, -6.61737553447894e-05,-0.00211244468051919,0.220973152936422,-0.323157519735217, -6.92311765241871e-05,-0.00148265398047109,0.2355399895976,-0.350255233178499, -7.22885977036958e-05,-0.000852863280422778,0.250106826258778,-0.377352946621781, -7.53460188829269e-05,-0.000223072580374017,0.264673662919956,-0.404450660065063, -7.84034400623801e-05,0.000406718119674077,0.279240499581134,-0.431548373508346, -8.14608612416112e-05,0.00103650881972239,0.293807336242312,-0.458646086951628, -8.45182824206203e-05,0.00166629951977137,0.30837417290349,-0.48574380039491, -8.75757036007396e-05,0.0022960902198188,0.322941009564668,-0.512841513838192, -9.06331247799708e-05,0.00292588091986756,0.337507846225846,-0.539939227281474, -9.36905459594239e-05,0.00355567161991521,0.352074682887023,-0.567036940724757, -9.67479671386551e-05,0.00418546231996419,0.366641519548202,-0.594134654168039, -9.98053883176642e-05,0.00481525302001318,0.38120835620938,-0.621232367611321, -0.000102862809497561,0.00544504372006127,0.395775192870558,-0.648330081054603, -0.000105920230676571,0.00607483442010981,0.410342029531736,-0.675427794497885, -0.000108977651856024,0.00670462512015879,0.424908866192914,-0.702525507941168, -0.000112035073035144,0.00733441582020689,0.439475702854092,-0.72962322138445, -3.66157987935489e-05,-0.0076032241914849,0.08932318112222,-0.0798159268761991, -3.93813574805502e-05,-0.00699120007977883,0.103636028336712,-0.107086683763949, -4.21469161677457e-05,-0.00637917596807303,0.117948875551203,-0.1343574406517, -4.49124748545804e-05,-0.00576715185636689,0.132261722765694,-0.16162819753945, -4.76780335414984e-05,-0.00515512774466043,0.146574569980186,-0.1888989544272, -5.04435922285551e-05,-0.00454310363295463,0.160887417194678,-0.216169711314951, -5.32091509157229e-05,-0.00393107952124849,0.175200264409169,-0.243440468202701, -5.59747096028351e-05,-0.00331905540954269,0.189513111623661,-0.270711225090451, -5.87402682897809e-05,-0.00270703129783656,0.203825958838152,-0.297981981978201, -6.15058269768931e-05,-0.00209500718613054,0.218138806052644,-0.325252738865952, -6.42713856636723e-05,-0.00148298307442429,0.232451653267135,-0.352523495753702, -6.7036944350618e-05,-0.000870958962717827,0.246764500481627,-0.379794252641452, -6.98025030380078e-05,-0.000258934851012471,0.261077347696118,-0.407065009529203, -7.25680617252866e-05,0.000353089260693107,0.27539019491061,-0.434335766416953, -7.53336204118993e-05,0.000965113372399795,0.289703042125101,-0.461606523304703, -7.8099179098956e-05,0.00157713748410537,0.304015889339593,-0.488877280192453, -8.08647377865679e-05,0.0021891615958114,0.318328736554085,-0.516148037080204, -8.36302964734026e-05,0.0028011857075172,0.332641583768576,-0.543418793967954, -8.63958551602373e-05,0.00341320981922344,0.346954430983067,-0.570689550855704, -8.91614138475161e-05,0.00402523393092924,0.361267278197559,-0.597960307743455, -9.19269725347949e-05,0.00463725804263548,0.375580125412051,-0.625231064631205, -9.46925312212965e-05,0.00524928215434128,0.389892972626541,-0.652501821518955, -9.74580899089084e-05,0.00586130626604708,0.404205819841033,-0.679772578406705, -0.000100223648595188,0.00647333037775422,0.418518667055525,-0.707043335294456, -0.000102989207282578,0.00708535448945957,0.432831514270016,-0.734314092182206, -3.40960517092037e-05,-0.00739098692626106,0.0886437839778648,-0.0804740146847633, -3.65197484325508e-05,-0.00680237154852958,0.102643171415431,-0.107956507952026, -3.89434451558979e-05,-0.00621375617079811,0.116642558852997,-0.135439001219288, -4.13671418791617e-05,-0.00562514079306653,0.130641946290562,-0.16292149448655, -4.37908386024533e-05,-0.00503652541533495,0.144641333728128,-0.190403987753812, -4.62145353260501e-05,-0.00444791003760392,0.158640721165694,-0.217886481021075, -4.86382320492584e-05,-0.00385929465987234,0.17264010860326,-0.245368974288337, -5.10619287727443e-05,-0.00327067928214098,0.186639496040826,-0.272851467555599, -5.34856254961191e-05,-0.00268206390440939,0.200638883478392,-0.300333960822862, -5.59093222192719e-05,-0.0020934485266777,0.214638270915958,-0.327816454090124, -5.83330189428688e-05,-0.00150483314894667,0.228637658353523,-0.355298947357386, -6.07567156661326e-05,-0.0009162177712152,0.242637045791089,-0.382781440624649, -6.31804123895074e-05,-0.000327602393483728,0.256636433228655,-0.410263933891911, -6.56041091128268e-05,0.000261012984247744,0.270635820666221,-0.437746427159173, -6.8027805835702e-05,0.00084962836197966,0.284635208103787,-0.465228920426436, -7.04515025593544e-05,0.00143824373971069,0.298634595541352,-0.492711413693698, -7.28751992826737e-05,0.00202685911744238,0.312633982978918,-0.52019390696096, -7.52988960062151e-05,0.00261547449517363,0.326633370416484,-0.547676400228222, -7.77225927294234e-05,0.00320408987290555,0.34063275785405,-0.575158893495485, -8.01462894525207e-05,0.0037927052506368,0.354632145291616,-0.602641386762747, -8.2569986176062e-05,0.00438132062836827,0.368631532729182,-0.630123880030009, -8.49936828991593e-05,0.00496993600609974,0.382630920166747,-0.657606373297272, -8.74173796228117e-05,0.00555855138383121,0.396630307604314,-0.685088866564534, -8.98410763465751e-05,0.00614716676156224,0.410629695041879,-0.712571359831796, -9.22647730693393e-05,0.00673578213929416,0.424629082479445,-0.740053853099059, -3.11005306776468e-05,-0.00714803056391161,0.0878328342118803,-0.0812481718479604, -3.31447504075266e-05,-0.00658930953292436,0.101459703410679,-0.108979746214698, -3.51889701373231e-05,-0.00603058850193694,0.115086572609478,-0.136711320581436, -3.72331898670919e-05,-0.00547186747094963,0.128713441808277,-0.164442894948174, -3.92774095969717e-05,-0.00491314643996243,0.142340311007076,-0.192174469314912, -4.1321629326796e-05,-0.00435442540897513,0.155967180205875,-0.21990604368165, -4.33658490568423e-05,-0.00379570437798804,0.169594049404674,-0.247637618048388, -4.5410068786389e-05,-0.00323698334700051,0.183220918603473,-0.275369192415125, -4.74542885163798e-05,-0.00267826231601331,0.196847787802272,-0.303100766781863, -4.9498508246093e-05,-0.00211954128502612,0.210474657001071,-0.330832341148601, -5.15427279760283e-05,-0.0015608202540387,0.22410152619987,-0.358563915515339, -5.35869477056861e-05,-0.00100209922305128,0.237728395398669,-0.386295489882077, -5.56311674355658e-05,-0.000443378192063859,0.251355264597468,-0.414027064248815, -5.76753871652791e-05,0.000115342838923338,0.264982133796267,-0.441758638615552, -5.97196068954364e-05,0.000674063869910313,0.278609002995066,-0.46949021298229, -6.17638266248166e-05,0.00123278490089818,0.292235872193865,-0.497221787349028, -6.38080463548629e-05,0.00179150593188493,0.305862741392663,-0.524953361715766, -6.58522660846872e-05,0.00235022696287257,0.319489610591463,-0.552684936082504, -6.78964858144004e-05,0.00290894799385999,0.333116479790262,-0.580416510449242, -6.99407055446688e-05,0.00346766902484674,0.346743348989061,-0.60814808481598, -7.1984925274271e-05,0.00402639005583438,0.360370218187859,-0.635879659182717, -7.40291450042063e-05,0.00458511108682114,0.373997087386658,-0.663611233549455, -7.60733647344747e-05,0.00514383211780833,0.387623956585457,-0.691342807916193, -7.81175844636328e-05,0.00570255314879642,0.401250825784256,-0.719074382282931, -8.01618041933461e-05,0.00626127417978362,0.414877694983055,-0.746805956649669, -2.76949814652927e-05,-0.0068837960383844,0.0869067615619287,-0.0821177985406446, -2.93440439205483e-05,-0.00636170187866747,0.100110309829948,-0.110129170838661, -3.09931063758595e-05,-0.00583960771895042,0.113313858097968,-0.138140543136678, -3.26421688311707e-05,-0.00531751355923349,0.126517406365987,-0.166151915434694, -3.42912312864541e-05,-0.00479541939951644,0.139720954634006,-0.194163287732711, -3.59402937417097e-05,-0.00427332523979951,0.152924502902026,-0.222174660030727, -3.75893561969098e-05,-0.00375123108008224,0.166128051170045,-0.250186032328744, -3.9238418652221e-05,-0.00322913692036531,0.179331599438065,-0.27819740462676, -4.08874811077542e-05,-0.00270704276064881,0.192535147706084,-0.306208776924777, -4.25365435630654e-05,-0.00218494860093177,0.205738695974104,-0.334220149222793, -4.4185606018321e-05,-0.0016628544412145,0.218942244242123,-0.36223152152081, -4.58346684737987e-05,-0.00114076028149812,0.232145792510142,-0.390242893818826, -4.74837309288878e-05,-0.000618666121780853,0.245349340778162,-0.418254266116843, -4.91327933841434e-05,-9.65719620635852e-05,0.258552889046181,-0.446265638414859, -5.07818558396211e-05,0.000425522197653017,0.271756437314201,-0.474277010712876, -5.24309182947658e-05,0.000947616357370284,0.28495998558222,-0.502288383010892, -5.40799807499104e-05,0.00146971051708711,0.29816353385024,-0.530299755308909, -5.57290432052771e-05,0.00199180467680393,0.311367082118259,-0.558311127606925, -5.73781056603107e-05,0.00251389883652142,0.324570630386279,-0.586322499904942, -5.90271681160104e-05,0.0030359929962378,0.337774178654298,-0.614333872202958, -6.0676230571266e-05,0.00355808715595529,0.350977726922318,-0.642345244500975, -6.23252930266327e-05,0.00408018131567189,0.364181275190337,-0.670356616798991, -6.39743554813332e-05,0.00460227547538938,0.377384823458356,-0.698367989097008, -6.56234179374771e-05,0.00512436963510554,0.390588371726375,-0.726379361395024, -6.72724803927327e-05,0.00564646379482259,0.403791919994395,-0.754390733693041, -2.40145463735741e-05,-0.00661209284973829,0.0859012639790929,-0.0830454532095383, -2.52809823776956e-05,-0.00613263163969541,0.0986475716772185,-0.111355293642768, -2.65474183817893e-05,-0.0056531704296523,0.111393879375344,-0.139665134075998, -2.78138543860496e-05,-0.00517370921960947,0.12414018707347,-0.167974974509229, -2.908029039006e-05,-0.00469424800956642,0.136886494771596,-0.196284814942459, -3.03467263941815e-05,-0.00421478679952358,0.149632802469721,-0.224594655375689, -3.16131623983029e-05,-0.00373532558948075,0.162379110167847,-0.252904495808919, -3.28795984025354e-05,-0.00325586437943781,0.175125417865972,-0.281214336242149, -3.41460344065458e-05,-0.00277640316939487,0.187871725564098,-0.309524176675379, -3.54124704106673e-05,-0.00229694195935215,0.200618033262223,-0.337834017108609, -3.66789064148443e-05,-0.00181748074930899,0.213364340960349,-0.366143857541839, -3.79453424189102e-05,-0.00133801953926604,0.226110648658475,-0.39445369797507, -3.92117784225876e-05,-0.000858558329222436,0.238856956356601,-0.4227635384083, -4.04782144269866e-05,-0.000379097119180161,0.251603264054726,-0.45107337884153, -4.17446504310526e-05,0.000100364090863003,0.264349571752852,-0.47938321927476, -4.30110864354516e-05,0.000579825300905501,0.277095879450977,-0.50769305970799, -4.42775224396286e-05,0.00105928651094844,0.289842187149103,-0.53600290014122, -4.55439584438055e-05,0.00153874772099138,0.302588494847228,-0.56431274057445, -4.68103944477605e-05,0.00201820893103477,0.315334802545354,-0.59262258100768, -4.80768304516044e-05,0.00249767014107771,0.32808111024348,-0.62093242144091, -4.93432664563365e-05,0.00297713135111977,0.340827417941605,-0.64924226187414, -5.06097024595142e-05,0.00345659256116404,0.353573725639731,-0.677552102307371, -5.18761384643573e-05,0.00393605377120609,0.366320033337856,-0.705861942740601, -5.31425744684233e-05,0.00441551498124904,0.379066341035982,-0.734171783173831, -5.44090104721562e-05,0.00489497619129242,0.391812648734108,-0.762481623607061, -2.024860122668e-05,-0.00634846484767609,0.0848676598048198,-0.0839820054716886, -2.1172586532503e-05,-0.00591578612376553,0.0971464011409162,-0.11259317679516, -2.20965718385202e-05,-0.00548310739985514,0.109425142477013,-0.141204348118631, -2.30205571442599e-05,-0.00505042867594441,0.121703883813109,-0.169815519442102, -2.39445424501938e-05,-0.0046177499520339,0.133982625149205,-0.198426690765574, -2.48685277561833e-05,-0.0041850712281235,0.146261366485302,-0.227037862089045, -2.57925130618952e-05,-0.00375239250421255,0.158540107821398,-0.255649033412516, -2.67164983678292e-05,-0.00331971378030227,0.170818849157494,-0.284260204735988, -2.76404836739297e-05,-0.0028870350563921,0.183097590493591,-0.312871376059459, -2.85644689798081e-05,-0.00245435633248103,0.195376331829687,-0.34148254738293, -2.948845428552e-05,-0.00202167760857042,0.207655073165784,-0.370093718706401, -3.04124395913985e-05,-0.00158899888466024,0.21993381450188,-0.398704890029873, -3.13364248972769e-05,-0.00115632016074962,0.232212555837976,-0.427316061353344, -3.22604102030999e-05,-0.000723641436839007,0.244491297174073,-0.455927232676815, -3.31843955089228e-05,-0.000290962712928167,0.256770038510169,-0.484538404000286, -3.41083808149678e-05,0.000141716010982007,0.269048779846266,-0.513149575323758, -3.50323661209018e-05,0.000574394734892403,0.281327521182362,-0.541760746647229, -3.59563514263916e-05,0.00100707345880346,0.293606262518458,-0.5703719179707, -3.68803367324366e-05,0.00143975218271386,0.305885003854555,-0.598983089294172, -3.78043220388147e-05,0.00187243090662337,0.31816374519065,-0.627594260617643, -3.87283073436384e-05,0.00230510963053554,0.330442486526747,-0.656205431941114, -3.96522926497944e-05,0.00273778835444594,0.342721227862844,-0.684816603264585, -4.05762779555063e-05,0.00317046707835678,0.354999969198941,-0.713427774588056, -4.15002632626615e-05,0.0036031458022654,0.367278710535036,-0.742038945911528, -4.24242485678183e-05,0.00403582452617757,0.379557451871134,-0.770650117234999, -1.66046072638815e-05,-0.00610674845149206,0.0838632239709511,-0.0848764364913305, -1.72458415884369e-05,-0.0057222667830471,0.0956898557338712,-0.11377538641115, -1.78870759132144e-05,-0.00533778511460259,0.107516487496791,-0.142674336330969, -1.85283102375478e-05,-0.00495330344615741,0.119343119259711,-0.171573286250788, -1.91695445621587e-05,-0.00456882177771267,0.131169751022631,-0.200472236170607, -1.98107788866309e-05,-0.0041843401092676,0.142996382785551,-0.229371186090426, -2.04520132112695e-05,-0.00379985844082287,0.154823014548471,-0.258270136010245, -2.10932475357417e-05,-0.0034153767723778,0.166649646311391,-0.287169085930064, -2.1734481860658e-05,-0.00303089510393328,0.178476278074311,-0.316068035849883, -2.23757161850746e-05,-0.00264641343548822,0.190302909837231,-0.344966985769702, -2.30169505094913e-05,-0.00226193176704315,0.202129541600151,-0.373865935689521, -2.3658184834241e-05,-0.00187745009859852,0.213956173363071,-0.40276488560934, -2.42994191586021e-05,-0.00149296843015323,0.225782805125991,-0.431663835529159, -2.49406534835739e-05,-0.00110848676170927,0.23760943688891,-0.460562785448978, -2.55818878076575e-05,-0.000724005093263758,0.24943606865183,-0.489461735368798, -2.62231221324072e-05,-0.000339523424818688,0.261262700414751,-0.518360685288616, -2.68643564570459e-05,4.49582436257145e-05,0.27308933217767,-0.547259635208436, -2.75055907817956e-05,0.00042943991207034,0.28491596394059,-0.576158585128255, -2.81468251061012e-05,0.000813921580515409,0.29674259570351,-0.605057535048074, -2.87880594307399e-05,0.00119840324896048,0.30856922746643,-0.633956484967893, -2.94292937557117e-05,0.0015828849174051,0.32039585922935,-0.662855434887712, -3.00705280801283e-05,0.00196736658584973,0.33222249099227,-0.691754384807531, -3.0711762404656e-05,0.0023518482542948,0.34404912275519,-0.72065333472735, -3.13529967286286e-05,0.00273632992274031,0.35587575451811,-0.749552284647169, -3.19942310532673e-05,0.00312081159118538,0.36770238628103,-0.778451234566988, -1.32643123506859e-05,-0.00589635286828044,0.0829389981464266,-0.0856864416886958, -1.36895836624906e-05,-0.00555849310559758,0.0943514979743686,-0.114846006629252, -1.41148549741288e-05,-0.00522063334291434,0.105763997802311,-0.144005571569809, -1.45401262860168e-05,-0.00488277358023126,0.117176497630253,-0.173165136510365, -1.49653975977104e-05,-0.00454491381754829,0.128588997458195,-0.202324701450922, -1.53906689097094e-05,-0.00420705405486566,0.140001497286137,-0.231484266391479, -1.58159402214308e-05,-0.00386919429218235,0.151413997114079,-0.260643831332035, -1.62412115330968e-05,-0.00353133452949927,0.162826496942022,-0.289803396272592, -1.66664828447627e-05,-0.00319347476681631,0.174238996769964,-0.318962961213148, -1.70917541563731e-05,-0.00285561500413323,0.185651496597906,-0.348122526153705, -1.75170254682055e-05,-0.00251775524144993,0.197063996425848,-0.377282091094261, -1.79422967802045e-05,-0.00217989547876729,0.20847649625379,-0.406441656034818, -1.8367568092037e-05,-0.00184203571608421,0.219888996081732,-0.435601220975374, -1.87928394033143e-05,-0.00150417595340047,0.231301495909675,-0.464760785915931, -1.92181107154799e-05,-0.00116631619071805,0.242713995737617,-0.493920350856488, -1.96433820269792e-05,-0.000828456428034752,0.254126495565559,-0.523079915797044, -2.00686533391448e-05,-0.000490596665352339,0.265538995393501,-0.552239480737601, -2.04939246503111e-05,-0.000152736902668593,0.276951495221443,-0.581399045678157, -2.09191959623656e-05,0.000185122860014042,0.288363995049385,-0.610558610618714, -2.1344467273976e-05,0.000522982622697121,0.299776494877327,-0.63971817555927, -2.17697385852533e-05,0.000860842385380867,0.311188994705269,-0.668877740499827, -2.21950098975299e-05,0.00119870214806284,0.322601494533211,-0.698037305440383, -2.26202812092513e-05,0.00153656191074658,0.334013994361154,-0.72719687038094, -2.30455525206397e-05,0.00187442167343033,0.345426494189096,-0.756356435321496, -2.34708238334713e-05,0.00221228143611096,0.356838994017037,-0.785516000262053, -1.03507837654337e-05,-0.00572130633451018,0.0821302691350132,-0.0863854481388437, -1.06223777410486e-05,-0.0054259575270364,0.0931817986578394,-0.115769914822122, -1.08939717166356e-05,-0.0051306087195625,0.104233328180666,-0.1451543815054, -1.11655656923615e-05,-0.00483525991208866,0.115284857703492,-0.174538848188678, -1.1437159667893e-05,-0.00453991110461482,0.126336387226318,-0.203923314871956, -1.17087536436467e-05,-0.00424456229714121,0.137387916749144,-0.233307781555234, -1.19803476191782e-05,-0.00394921348966715,0.14843944627197,-0.262692248238512, -1.22519415948763e-05,-0.00365386468219342,0.159490975794797,-0.29207671492179, -1.25235355705189e-05,-0.0033585158747198,0.170542505317623,-0.321461181605068, -1.2795129546217e-05,-0.00306316706724585,0.181594034840449,-0.350845648288346, -1.30667235220261e-05,-0.00276781825977235,0.192645564363275,-0.380230114971624, -1.33383174975577e-05,-0.00247246945229818,0.203697093886102,-0.409614581654902, -1.36099114729227e-05,-0.00217712064482378,0.214748623408928,-0.43899904833818, -1.38815054488983e-05,-0.00188177183735094,0.225800152931754,-0.468383515021458, -1.41530994243189e-05,-0.00158642302987677,0.23685168245458,-0.497767981704736, -1.44246933997394e-05,-0.0012910742224026,0.247903211977407,-0.527152448388014, -1.46962873759371e-05,-0.00099572541492976,0.258954741500232,-0.556536915071292, -1.49678813512466e-05,-0.000700376607455366,0.270006271023059,-0.58592138175457, -1.52394753272223e-05,-0.000405027799981639,0.281057800545885,-0.615305848437848, -1.55110693027538e-05,-0.000109678992508133,0.292109330068711,-0.644690315121126, -1.57826632779523e-05,0.000185669814966261,0.303160859591537,-0.674074781804404, -1.6054257254039e-05,0.00048101862244021,0.314212389114364,-0.703459248487682, -1.63258512295705e-05,0.00077636742991416,0.32526391863719,-0.73284371517096, -1.65974452052131e-05,0.00107171623738722,0.336315448160016,-0.762228181854238, -1.68690391808557e-05,0.00136706504486162,0.347366977682842,-0.791612648537516, -7.91750545015013e-06,-0.00558100423806918,0.0814530923693547,-0.08696399491889, -8.08614557601395e-06,-0.00532243997700249,0.092203342817765,-0.116534606063426, -8.25478570212757e-06,-0.00506387571593603,0.102953593266175,-0.146105217207961, -8.42342582799138e-06,-0.00480531145486918,0.113703843714586,-0.175675828352497, -8.59206595399398e-06,-0.00454674719380255,0.124454094162996,-0.205246439497032, -8.76070607985779e-06,-0.00428818293273603,0.135204344611406,-0.234817050641568, -8.92934620588814e-06,-0.00402961867166962,0.145954595059816,-0.264387661786104, -9.09798633169645e-06,-0.00377105441060277,0.156704845508226,-0.293958272930639, -9.26662645783782e-06,-0.00351249014953625,0.167455095956637,-0.323528884075175, -9.43526658375715e-06,-0.00325392588846962,0.178205346405047,-0.35309949521971, -9.60390670950995e-06,-0.00299536162740277,0.188955596853457,-0.382670106364246, -9.77254683542927e-06,-0.00273679736633614,0.199705847301868,-0.412240717508781, -9.94118696140411e-06,-0.00247823310526929,0.210456097750278,-0.441811328653317, -1.0109827087379e-05,-0.0022196688442031,0.221206348198688,-0.471381939797853, -1.02784672133538e-05,-0.00196110458313625,0.231956598647098,-0.500952550942388, -1.04471073394397e-05,-0.00170254032207007,0.242706849095508,-0.530523162086924, -1.06157474655255e-05,-0.00144397606100322,0.253457099543919,-0.560093773231459, -1.07843875909452e-05,-0.00118541179993636,0.264207349992329,-0.589664384375995, -1.09530277171421e-05,-0.000926847538869513,0.27495760044074,-0.619234995520531, -1.1121667843339e-05,-0.00066828327780355,0.28570785088915,-0.648805606665066, -1.12903079687587e-05,-0.000409719016736254,0.29645810133756,-0.678376217809602, -1.14589480951777e-05,-0.000151154755669847,0.30720835178597,-0.707946828954137, -1.16275882211525e-05,0.000107409505396561,0.317958602234381,-0.737517440098673, -1.17962283469053e-05,0.000365973766463412,0.328708852682791,-0.767088051243209, -1.19648684726581e-05,0.000624538027530264,0.339459103131201,-0.796658662387744, -5.95790820895337e-06,-0.0054718284239843,0.0809066293812432,-0.0874265160356373, -6.0607982790839e-06,-0.00524371553294883,0.0914143830249319,-0.11714594097893, -6.16368834926995e-06,-0.00501560264191359,0.10192213666862,-0.146865365922222, -6.26657841937273e-06,-0.00478748975087784,0.112429890312309,-0.176584790865514, -6.36946848930897e-06,-0.00455937685984231,0.122937643955998,-0.206304215808806, -6.47235855966155e-06,-0.0043312639688069,0.133445397599686,-0.236023640752099, -6.57524862973657e-06,-0.00410315107777159,0.143953151243375,-0.265743065695391, -6.67813869986711e-06,-0.00387503818673596,0.154460904887064,-0.295462490638683, -6.78102877010867e-06,-0.00364692529570076,0.164968658530752,-0.325181915581976, -6.88391884018369e-06,-0.00341881240466524,0.175476412174441,-0.354901340525268, -6.98680891053627e-06,-0.00319069951363016,0.185984165818129,-0.38462076546856, -7.08969898027823e-06,-0.00296258662259441,0.196491919461818,-0.414340190411853, -7.19258905035325e-06,-0.00273447373155866,0.206999673105507,-0.444059615355145, -7.29547912092787e-06,-0.00250636084052402,0.217507426749195,-0.473779040298437, -7.39836919072534e-06,-0.00227824794948805,0.228015180392884,-0.503498465241729, -7.50125926129996e-06,-0.00205013505845342,0.238522934036572,-0.533217890185022, -7.60414933109743e-06,-0.00182202216741723,0.249030687680261,-0.562937315128314, -7.70703940156103e-06,-0.00159390927638214,0.259538441323949,-0.592656740071606, -7.80992947124748e-06,-0.00136579638534617,0.270046194967638,-0.622376165014899, -7.91281954204415e-06,-0.00113768349431131,0.280553948611327,-0.652095589958191, -8.01570961173059e-06,-0.000909570603275345,0.291061702255015,-0.681815014901483, -8.11859968186113e-06,-0.000681457712240263,0.301569455898704,-0.711534439844776, -8.22148975176962e-06,-0.000453344821204293,0.312077209542392,-0.741253864788068, -8.32437982167811e-06,-0.000225231930168768,0.322584963186081,-0.77097328973136, -8.42726989214171e-06,2.88096086675793e-06,0.33309271682977,-0.800692714674652, -4.42546953025036e-06,-0.00538878111252727,0.0804786202161186,-0.0877861327909007, -4.48779988349024e-06,-0.00518498642541804,0.0907968232344126,-0.117621262582057, -4.55013023675788e-06,-0.00498119173830891,0.101115026252706,-0.147456392373214, -4.61246059024756e-06,-0.00477739705120006,0.111433229271,-0.177291522164371, -4.67479094318213e-06,-0.00457360236409032,0.121751432289295,-0.207126651955527, -4.7371212966163e-06,-0.00436980767698159,0.132069635307588,-0.236961781746684, -4.79945164988393e-06,-0.0041660129898724,0.142387838325882,-0.266796911537841, -4.86178200304055e-06,-0.00396221830276289,0.152706041344176,-0.296632041328998, -4.92411235641921e-06,-0.00375842361565404,0.16302424436247,-0.326467171120154, -4.9864427094648e-06,-0.00355462892854463,0.173342447380764,-0.356302300911311, -5.04877306284346e-06,-0.00335083424143545,0.183660650399058,-0.386137430702468, -5.11110341644416e-06,-0.00314703955432694,0.193978853417352,-0.415972560493624, -5.17343376926771e-06,-0.00294324486721709,0.204297056435646,-0.445807690284781, -5.2357641228129e-06,-0.00273945018010835,0.21461525945394,-0.475642820075938, -5.29809447613605e-06,-0.00253565549299939,0.224933462472233,-0.505477949867095, -5.36042482957022e-06,-0.00233186080589065,0.235251665490527,-0.535313079658251, -5.42275518278235e-06,-0.00212806611878147,0.245569868508821,-0.565148209449408, -5.4850855356614e-06,-0.00192427143167118,0.255888071527116,-0.594983339240564, -5.54741588909557e-06,-0.00172047674456244,0.266206274545409,-0.624818469031721, -5.60974624219668e-06,-0.00151668205745326,0.276524477563703,-0.654653598822878, -5.67207659529778e-06,-0.00131288737034385,0.286842680581997,-0.684488728614035, -5.734406948954e-06,-0.00110909268323489,0.297160883600291,-0.714323858405191, -5.79673730238817e-06,-0.000905297996126819,0.307479086618584,-0.744158988196348, -5.85906765526722e-06,-0.000701503309016527,0.317797289636879,-0.773994117987505, -5.92139800892344e-06,-0.000497708621907567,0.328115492655173,-0.803829247778661, -3.25436557427339e-06,-0.00532667556094296,0.0801511491377326,-0.0880597373212555, -3.29221476833008e-06,-0.00514175923455507,0.0903245483128141,-0.11798289796775, -3.330063962248e-06,-0.00495684290816711,0.100497947487895,-0.147906058614245, -3.36791315613816e-06,-0.00477192658177927,0.110671346662977,-0.17782921926074, -3.40576235008383e-06,-0.00458701025539121,0.120844745838058,-0.207752379907234, -3.44361154408501e-06,-0.00440209392900348,0.131018145013139,-0.237675540553729, -3.48146073786415e-06,-0.00421717760261509,0.141191544188221,-0.267598701200224, -3.51930993164329e-06,-0.00403226127622691,0.151364943363303,-0.297521861846718, -3.55715912608856e-06,-0.00384734494983974,0.161538342538384,-0.327445022493213, -3.59500831970117e-06,-0.00366242862345145,0.171711741713465,-0.357368183139708, -3.63285751364684e-06,-0.00347751229706339,0.181885140888546,-0.387291343786202, -3.67070670792558e-06,-0.00329259597067599,0.192058540063628,-0.417214504432697, -3.70855590137165e-06,-0.00310767964428749,0.202231939238709,-0.447137665079192, -3.74640509592794e-06,-0.00292276331790009,0.212405338413791,-0.477060825725686, -3.78425428926299e-06,-0.00273784699151181,0.222578737588872,-0.506983986372181, -3.82210348337519e-06,-0.00255293066512396,0.232752136763953,-0.536907147018676, -3.85995267759842e-06,-0.00236801433873612,0.242925535939035,-0.566830307665171, -3.89780187082245e-06,-0.00218309801234695,0.253098935114117,-0.596753468311665, -3.93565106526772e-06,-0.00199818168596,0.263272334289198,-0.62667662895816, -3.97350025937993e-06,-0.00181326535957194,0.273445733464279,-0.656599789604654, -4.01134945315906e-06,-0.00162834903318387,0.28361913263936,-0.686522950251149, -4.04919864704922e-06,-0.00144343270679581,0.293792531814442,-0.716446110897644, -4.08704784093938e-06,-0.00125851638040819,0.303965930989523,-0.746369271544139, -4.12489703482954e-06,-0.00107360005402013,0.314139330164604,-0.776292432190633, -4.16274622849766e-06,-0.000888683727631623,0.324312729339686,-0.806215592837128, -2.37504888861428e-06,-0.005280810421116,0.079905056501776,-0.0882644842368586, -2.39826720455083e-06,-0.00511023439952679,0.0899697611605282,-0.11825352115406, -2.42148552068167e-06,-0.00493965837793764,0.10003446581928,-0.148242558071262, -2.4447038368125e-06,-0.00476908235634865,0.110099170478033,-0.178231594988464, -2.46792215274905e-06,-0.00459850633475933,0.120163875136785,-0.208220631905666, -2.49114046879662e-06,-0.00442793031317035,0.130228579795537,-0.238209668822868, -2.5143587848997e-06,-0.00425735429158125,0.140293284454289,-0.26819870574007, -2.53757710094726e-06,-0.00408677826999182,0.150357989113042,-0.298187742657271, -2.5607954168283e-06,-0.00391620224840272,0.160422693771794,-0.328176779574473, -2.58401373265382e-06,-0.00374562622681296,0.170487398430546,-0.358165816491675, -2.60723204908997e-06,-0.00357505020522431,0.180552103089298,-0.388154853408877, -2.63045036485998e-06,-0.00340447418363476,0.190616807748051,-0.418143890326079, -2.65366868101857e-06,-0.00323389816204567,0.200681512406803,-0.448132927243281, -2.67688699728819e-06,-0.00306332214045724,0.210746217065555,-0.478121964160482, -2.70010531333575e-06,-0.00289274611886792,0.220810921724307,-0.508111001077684, -2.72332362893923e-06,-0.00272217009727838,0.230875626383059,-0.538100037994886, -2.74654194531987e-06,-0.00255159407568883,0.240940331041812,-0.568089074912088, -2.76976026114539e-06,-0.00238101805409974,0.251005035700564,-0.59807811182929, -2.79297857763705e-06,-0.00221044203251108,0.261069740359316,-0.628067148746492, -2.81619689346257e-06,-0.00203986601092243,0.271134445018068,-0.658056185663694, -2.83941520973219e-06,-0.00186928998933267,0.281199149676821,-0.688045222580896, -2.86263352566873e-06,-0.00169871396774379,0.291263854335573,-0.718034259498098, -2.88585184138324e-06,-0.00152813794615403,0.301328558994325,-0.748023296415299, -2.90907015798592e-06,-0.0013575619245656,0.311393263653077,-0.778012333332501, -2.93228847381144e-06,-0.00118698590297628,0.321457968311829,-0.808001370249703, -1.7235237572133e-06,-0.00524724759180278,0.0797225997427357,-0.0884158125911222, -1.73799350300374e-06,-0.0050873877606607,0.0897067850021773,-0.118453538630706, -1.75246324873868e-06,-0.00492752792951845,0.099690970261619,-0.14849126467029, -1.76693299461239e-06,-0.00476766809837637,0.109675155521061,-0.178528990709874, -1.78140274020855e-06,-0.00460780826723406,0.119659340780502,-0.208566716749458, -1.79587248605451e-06,-0.00444794843609186,0.129643526039944,-0.238604442789041, -1.81034223178944e-06,-0.00428808860494978,0.139627711299386,-0.268642168828625, -1.82481197752438e-06,-0.00412822877380759,0.149611896558827,-0.298679894868209, -1.83928172348136e-06,-0.00396836894266572,0.159596081818269,-0.328717620907793, -1.85375146899425e-06,-0.00380850911152297,0.169580267077711,-0.358755346947377, -1.86822121511776e-06,-0.00364864928038133,0.179564452337152,-0.388793072986961, -1.88269096079718e-06,-0.00348878944923925,0.189548637596594,-0.418830799026545, -1.89716070664314e-06,-0.00332892961809717,0.199532822856036,-0.448868525066129, -1.91163045226705e-06,-0.00316906978695464,0.209517008115478,-0.478906251105712, -1.92610019800199e-06,-0.00300920995581233,0.219501193374919,-0.508943977145296, -1.94056994406999e-06,-0.00284935012467114,0.22948537863436,-0.53898170318488, -1.95503968924982e-06,-0.00268949029352794,0.239469563893803,-0.569019429224464, -1.96950943509577e-06,-0.00252963046238563,0.249453749153244,-0.599057155264048, -1.98397918105275e-06,-0.00236977063124399,0.259437934412686,-0.629094881303632, -1.99844892678769e-06,-0.00220991080010169,0.269422119672128,-0.659132607343215, -2.0129186724116e-06,-0.00205005096895983,0.279406304931569,-0.689170333382799, -2.02738841803551e-06,-0.00189019113781708,0.289390490191011,-0.719208059422383, -2.04185816365943e-06,-0.00173033130667477,0.299374675450453,-0.749245785461967, -2.05632790994947e-06,-0.00157047147553335,0.309358860709894,-0.779283511501551, -2.07079765657259e-06,-0.00141061164439282,0.319343045969335,-0.809321237541135, -1.24551046420951e-06,-0.00522284953621327,0.0795886724021008,-0.0885266361822533, -1.25470114031856e-06,-0.00507090084651973,0.0895137913536916,-0.11860001914428, -1.2638918163721e-06,-0.00491895215682614,0.0994389103052823,-0.148673402106307, -1.27308249239788e-06,-0.00476700346713244,0.109364029256873,-0.178746785068334, -1.28227316836815e-06,-0.00461505477743873,0.119289148208464,-0.20882016803036, -1.29146384436618e-06,-0.00446310608774481,0.129214267160055,-0.238893550992387, -1.30065452041972e-06,-0.00431115739805121,0.139139386111646,-0.268966933954414, -1.30984519647326e-06,-0.00415920870835773,0.149064505063237,-0.299040316916441, -1.31903587241577e-06,-0.00400726001866381,0.158989624014828,-0.329113699878468, -1.32822654869136e-06,-0.00385531132897055,0.168914742966418,-0.359187082840494, -1.33741722446734e-06,-0.0037033626392764,0.178839861918009,-0.389260465802521, -1.34660790079844e-06,-0.00355141394958336,0.1887649808696,-0.419333848764548, -1.35579857651891e-06,-0.00339946525988921,0.198690099821191,-0.449407231726575, -1.36498925273898e-06,-0.00324751657019573,0.208615218772781,-0.479480614688602, -1.37417992884803e-06,-0.00309556788050225,0.218540337724372,-0.509553997650628, -1.38337060473503e-06,-0.0029436191908081,0.228465456675963,-0.539627380612655, -1.39256128084408e-06,-0.00279167050111506,0.238390575627554,-0.569700763574682, -1.40175195695313e-06,-0.00263972181142091,0.248315694579145,-0.599774146536709, -1.41094263272912e-06,-0.00248777312172699,0.258240813530736,-0.629847529498736, -1.42013330928226e-06,-0.00233582443203462,0.268165932482326,-0.659920912460763, -1.42932398450313e-06,-0.00218387574233914,0.278091051433918,-0.689994295422789, -1.43851466094524e-06,-0.00203192705264632,0.288016170385508,-0.720067678384816, -1.44770533738736e-06,-0.0018799783629535,0.297941289337099,-0.750141061346843, -1.45689601238619e-06,-0.00172802967325802,0.30786640828869,-0.78021444430887, -1.46608668905035e-06,-0.00157608098356521,0.317791527240281,-0.810287827270897, -8.97327714383112e-07,-0.00520519823579557,0.0794910877134545,-0.0886072515340195, -9.03283094738638e-07,-0.00505903788916073,0.0893731881145652,-0.1187065720723, -9.09238475260699e-07,-0.00491287754252623,0.0992552885156758,-0.14880589261058, -9.15193855616225e-07,-0.00476671719589161,0.109137388916786,-0.17890521314886, -9.2114923611053e-07,-0.004620556849257,0.119019489317897,-0.20900453368714, -9.27104616577079e-07,-0.00447439650262238,0.128901589719008,-0.23910385422542, -9.33059996988117e-07,-0.00432823615598754,0.138783690120118,-0.269203174763701, -9.39015377343644e-07,-0.00418207580935293,0.148665790521229,-0.299302495301981, -9.44970757810193e-07,-0.00403591546271831,0.158547890922339,-0.329401815840261, -9.50926138276742e-07,-0.00388975511608391,0.16842999132345,-0.359501136378541, -9.56881518854313e-07,-0.0037435947694493,0.178312091724561,-0.389600456916821, -9.62836899154329e-07,-0.00359743442281468,0.188194192125671,-0.419699777455102, -9.68792279287811e-07,-0.0034512740761794,0.198076292526782,-0.449799097993382, -9.74747660031916e-07,-0.00330511372954501,0.207958392927893,-0.479898418531662, -9.80703040553976e-07,-0.00315895338291083,0.217840493329003,-0.509997739069942, -9.86658420853992e-07,-0.00301279303627555,0.227722593730114,-0.540097059608222, -9.92613801042985e-07,-0.00286663268964049,0.237604694131225,-0.570196380146503, -9.9856918178709e-07,-0.00272047234300632,0.247486794532335,-0.600295700684783, -1.00452456253119e-06,-0.00257431199637237,0.257368894933445,-0.630395021223063, -1.01047994260917e-06,-0.00242815164973686,0.267250995334557,-0.660494341761343, -1.01643532313123e-06,-0.00228199130310269,0.277133095735667,-0.690593662299623, -1.02239070354226e-06,-0.00213583095646808,0.287015196136777,-0.720692982837904, -1.02834608450841e-06,-0.00198967060983435,0.296897296537888,-0.750792303376184, -1.0343014641423e-06,-0.0018435102631984,0.306779396938999,-0.780891623914464, -1.04025684477538e-06,-0.00169734991656423,0.316661497340109,-0.810990944452744, -5.0058779060641e-05,-0.00874943061523603,0.10152775478316,-0.087746140739364, -5.42177514088749e-05,-0.00807646185555561,0.116761755025814,-0.113667167375043, -5.83767237571919e-05,-0.00740349309587529,0.131995755268469,-0.139588194010721, -6.2535696105398e-05,-0.00673052433619481,0.147229755511123,-0.1655092206464, -6.6694668453382e-05,-0.00605755557651411,0.162463755753778,-0.191430247282079, -7.08536408016713e-05,-0.00538458681683374,0.177697755996432,-0.217351273917757, -7.50126131497386e-05,-0.00471161805715326,0.192931756239087,-0.243272300553436, -7.91715854980835e-05,-0.004038649297473,0.208165756481741,-0.269193327189115, -8.33305578462062e-05,-0.0033656805377924,0.223399756724396,-0.295114353824793, -8.74895301944956e-05,-0.0026927117781117,0.238633756967051,-0.321035380460472, -9.16485025426739e-05,-0.00201974301843144,0.253867757209705,-0.346956407096151, -9.58074748910742e-05,-0.00134677425875118,0.269101757452359,-0.372877433731829, -9.9966447239086e-05,-0.000673805499070479,0.284335757695014,-0.398798460367508, -0.000104125419587375,-8.36739390219776e-07,0.299569757937668,-0.424719487003187, -0.000108284391935221,0.000672132020290483,0.314803758180323,-0.450640513638865, -0.000112443364283843,0.00134510077997052,0.330037758422977,-0.476561540274544, -0.000116602336632132,0.00201806953965122,0.345271758665632,-0.502482566910223, -0.000120761308980089,0.00269103829933193,0.360505758908287,-0.528403593545901, -0.000124920281328378,0.00336400705901219,0.375739759150941,-0.55432462018158, -0.000129079253676556,0.00403697581869222,0.390973759393595,-0.580245646817259, -0.000133238226024845,0.00470994457837337,0.40620775963625,-0.606166673452937, -0.000137397198373135,0.00538291333805319,0.421441759878904,-0.632087700088616, -0.000141556170721313,0.00605588209773389,0.436675760121559,-0.658008726724294, -0.000145715143068936,0.00672885085741504,0.451909760364213,-0.683929753359973, -0.000149874115417781,0.00740181961709441,0.467143760606868,-0.709850779995652, -4.97389312965335e-05,-0.00871725152278963,0.101438073036634,-0.0878372532864131, -5.38493482503399e-05,-0.00804611588991389,0.116635893956205,-0.113783773714845, -5.79597652041741e-05,-0.00737498025703809,0.131833714875777,-0.139730294143276, -6.20701821580361e-05,-0.00670384462416251,0.147031535795348,-0.165676814571708, -6.61805991118425e-05,-0.00603270899128661,0.16222935671492,-0.19162333500014, -7.02910160657599e-05,-0.00536157335841103,0.177427177634491,-0.217569855428571, -7.44014330195109e-05,-0.00469043772553546,0.192624998554062,-0.243516375857003, -7.85118499734283e-05,-0.00401930209265977,0.207822819473634,-0.269462896285435, -8.26222669273458e-05,-0.00334816645978409,0.223020640393205,-0.295409416713866, -8.67326838813742e-05,-0.00267703082690862,0.238218461312777,-0.321355937142298, -9.08431008350696e-05,-0.00200589519403271,0.253416282232348,-0.347302457570729, -9.49535177888206e-05,-0.00133475956115681,0.268614103151919,-0.373248977999161, -9.90639347425715e-05,-0.000663623928281121,0.283811924071491,-0.399195498427593, -0.0001031743516966,7.51170459456496e-06,0.299009744991062,-0.425142018856025, -0.000107284768650406,0.000678647337470251,0.314207565910634,-0.451088539284456, -0.000111395185603991,0.00134978297034594,0.329405386830205,-0.477035059712888, -0.000115505602558241,0.0020209186032214,0.344603207749776,-0.50298158014132, -0.000119616019511937,0.00269205423609775,0.359801028669348,-0.528928100569751, -0.000123726436465854,0.00336318986897277,0.374998849588919,-0.554874620998183, -0.000127836853419994,0.00403432550184801,0.39019667050849,-0.580821141426614, -0.000131947270374022,0.0047054611347237,0.405394491428062,-0.606767661855046, -0.000136057687327273,0.00537659676760027,0.420592312347634,-0.632714182283478, -0.00014016810428108,0.00604773240047596,0.435790133267205,-0.658660702711909, -0.000144278521235108,0.00671886803335164,0.450987954186777,-0.684607223140341, -0.000148388938189248,0.00739000366622689,0.466185775106348,-0.710553743568773, -4.92982031372602e-05,-0.00867311516561137,0.101314412654826,-0.0879626281311997, -5.33421268683332e-05,-0.00800454587266874,0.116462378068205,-0.113944229132099, -5.7386050599656e-05,-0.00733597657972618,0.131610343481584,-0.139925830132997, -6.14299743308677e-05,-0.00666740728678361,0.146758308894964,-0.165907431133896, -6.54738980620517e-05,-0.00599883799384104,0.161906274308343,-0.191889032134795, -6.95178217931525e-05,-0.00533026870089848,0.177054239721722,-0.217870633135694, -7.35617455243087e-05,-0.00466169940795569,0.192202205135101,-0.243852234136593, -7.76056692556315e-05,-0.00399313011501334,0.20735017054848,-0.269833835137492, -8.16495929867878e-05,-0.00332456082207044,0.22249813596186,-0.29581543613839, -8.56935167174999e-05,-0.00265599152912732,0.237646101375239,-0.321797037139289, -8.97374404488782e-05,-0.00198742223618509,0.252794066788618,-0.347778638140188, -9.37813641801455e-05,-0.00131885294324285,0.267942032201997,-0.373760239141087, -9.78252879109132e-05,-0.00065028365029951,0.283089997615376,-0.399741840141986, -0.000101869211642236,1.82856426431677e-05,0.298237963028756,-0.425723441142885, -0.00010591313537367,0.000686854935585179,0.313385928442135,-0.451705042143783, -0.00010995705910477,0.00135542422852786,0.328533893855514,-0.477686643144682, -0.000114000982836093,0.00202399352147054,0.343681859268893,-0.503668244145581, -0.000118044906567416,0.00269256281441299,0.358829824682273,-0.52964984514648, -0.000122088830298406,0.00336113210735567,0.373977790095652,-0.555631446147378, -0.000126132754029729,0.00402970140029835,0.389125755509031,-0.581613047148278, -0.000130176677760607,0.00469827069324102,0.40427372092241,-0.607594648149176, -0.000134220601491708,0.0053668399861837,0.419421686335789,-0.633576249150075, -0.000138264525223142,0.00603540927912594,0.434569651749168,-0.659557850150974, -0.000142308448954243,0.00670397857206861,0.449717617162547,-0.685539451151873, -0.00014635237268501,0.00737254786501174,0.464865582575927,-0.711521052152772, -4.86944684676138e-05,-0.00861303707949579,0.101144856267737,-0.0881340518436699, -5.26480844179056e-05,-0.00794805899594692,0.116224521346548,-0.114163618143973, -5.66017003680308e-05,-0.00728308091239793,0.13130418642536,-0.140193184444275, -6.05553163181283e-05,-0.00661810282884889,0.146383851504171,-0.166222750744578, -6.45089322683368e-05,-0.00595312474529996,0.161463516582983,-0.192252317044881, -6.84625482184065e-05,-0.0052881466617507,0.176543181661794,-0.218281883345184, -7.24161641684762e-05,-0.00462316857820155,0.191622846740606,-0.244311449645486, -7.63697801186014e-05,-0.00395819049465262,0.206702511819417,-0.270341015945789, -8.03233960689487e-05,-0.00329321241110403,0.221782176898228,-0.296370582246092, -8.42770120189629e-05,-0.00262823432755477,0.23686184197704,-0.322400148546395, -8.82306279688105e-05,-0.00196325624400551,0.251941507055851,-0.348429714846697, -9.21842439194354e-05,-0.00129827816045691,0.267021172134663,-0.374459281147, -9.6137859869394e-05,-0.00063330007690765,0.282100837213475,-0.400488847447303, -0.000100091475819797,3.1678006640723e-05,0.297180502292286,-0.426518413747606, -0.000104045091769978,0.000696656090189762,0.312260167371097,-0.452547980047908, -0.000107998707720047,0.0013616341737388,0.327339832449909,-0.478577546348211, -0.000111952323670228,0.00202661225728784,0.34241949752872,-0.504607112648514, -0.000115905939620076,0.00269159034083732,0.357499162607532,-0.530636678948817, -0.000119859555570367,0.00335656842438614,0.372578827686343,-0.556666245249119, -0.000123813171520326,0.00402154650793562,0.387658492765155,-0.582695811549422, -0.000127766787470285,0.00468652459148489,0.402738157843967,-0.608725377849725, -0.000131720403420799,0.00535150267503326,0.417817822922778,-0.634754944150028, -0.00013567401937109,0.00601648075858252,0.43289748800159,-0.66078451045033, -0.00013962763532116,0.00668145884213089,0.447977153080401,-0.686814076750633, -0.000143581251271452,0.00734643692568016,0.463056818159213,-0.712843643050936, -4.78740650391163e-05,-0.00853210234720342,0.100914156200479,-0.0883664036473179, -5.17064108839782e-05,-0.0078721436731175,0.115900999343048,-0.114460983262689, -5.55387567290067e-05,-0.00721218499903176,0.130887842485617,-0.14055556287806, -5.93711025739241e-05,-0.00655222632494612,0.145874685628185,-0.166650142493431, -6.32034484186472e-05,-0.00589226765085993,0.160861528770754,-0.192744722108802, -6.703579426387e-05,-0.0052323089767744,0.175848371913323,-0.218839301724173, -7.08681401085376e-05,-0.00457235030268832,0.190835215055892,-0.244933881339544, -7.47004859534828e-05,-0.00391239162860257,0.205822058198461,-0.271028460954915, -7.85328317984835e-05,-0.00325243295451694,0.220808901341029,-0.297123040570286, -8.23651776432621e-05,-0.00259247428043086,0.235795744483598,-0.323217620185658, -8.61975234884294e-05,-0.00193251560634544,0.250782587626167,-0.349312199801029, -9.00298693327639e-05,-0.00127255693225892,0.265769430768736,-0.3754067794164, -9.38622151779311e-05,-0.00061259825817328,0.280756273911305,-0.401501359031771, -9.76945610230429e-05,4.73604159121344e-05,0.295743117053873,-0.427595938647142, -0.000101526906867488,0.000707319089998659,0.310729960196442,-0.453690518262513, -0.000105359252712933,0.00136727776408385,0.325716803339011,-0.479785097877884, -0.00010919159855749,0.00202723643816993,0.34070364648158,-0.505879677493255, -0.000113023944402602,0.00268719511225557,0.355690489624149,-0.531974257108626, -0.000116856290247713,0.00334715378634121,0.370677332766717,-0.558068836723997, -0.000120688636091937,0.00400711246042773,0.385664175909286,-0.584163416339368, -0.000124520981937382,0.00466707113451292,0.400651019051855,-0.610257995954739, -0.000128353327782604,0.00532702980859856,0.415637862194424,-0.63635257557011, -0.000132185673626606,0.00598698848268553,0.430624705336993,-0.662447155185481, -0.000136018019472162,0.00664694715677072,0.445611548479562,-0.688541734800853, -0.000139850365317384,0.00730690583085591,0.46059839162213,-0.714636314416224, -4.67713460918506e-05,-0.0084245841700562,0.10060354094776,-0.0886776457729838, -5.0443330422395e-05,-0.0077716230812121,0.115465602675248,-0.11485931265026, -5.41153147529116e-05,-0.00711866199236821,0.130327664402736,-0.141040979527536, -5.77872990834838e-05,-0.00646570090352439,0.145189726130224,-0.167222646404813, -6.14592834138339e-05,-0.00581273981468011,0.160051787857712,-0.193404313282089, -6.51312677444338e-05,-0.00515977872583639,0.1749138495852,-0.219585980159366, -6.88032520751447e-05,-0.00450681763699257,0.189775911312688,-0.245767647036642, -7.24752364054115e-05,-0.00385385654814829,0.204637973040176,-0.271949313913918, -7.61472207359004e-05,-0.00320089545930435,0.219500034767663,-0.298130980791195, -7.98192050663893e-05,-0.00254793437046019,0.234362096495151,-0.324312647668471, -8.34911893968782e-05,-0.00189497328161625,0.249224158222639,-0.350494314545747, -8.71631737274225e-05,-0.00124201219277209,0.264086219950127,-0.376675981423024, -9.08351580578559e-05,-0.000589051103927929,0.278948281677615,-0.4028576483003, -9.45071423888999e-05,6.39099849153446e-05,0.293810343405103,-0.429039315177576, -9.81791267187226e-05,0.000716871073760394,0.308672405132591,-0.455220982054853, -0.000101851111049656,0.00136983216260345,0.323534466860079,-0.481402648932129, -0.000105523095380033,0.00202279325144783,0.338396528587567,-0.507584315809405, -0.000109195079710855,0.00267575434029133,0.353258590315054,-0.533765982686682, -0.000112867064041122,0.00332871542913571,0.368120652042542,-0.559947649563958, -0.000116539048371611,0.00398167651797987,0.382982713770031,-0.586129316441234, -0.000120211032702211,0.00463463760682314,0.397844775497518,-0.612310983318511, -0.000123883017032922,0.00528759869566731,0.412706837225006,-0.638492650195787, -0.000127555001363078,0.00594055978451191,0.427568898952494,-0.664674317073063, -0.000131226985694011,0.00659352087335519,0.442430960679982,-0.69085598395034, -0.000134898970024611,0.00724648196219935,0.45729302240747,-0.717037650827616, -4.53107414451481e-05,-0.00828438459144798,0.100191196783747,-0.0890880408760064, -4.87750104347096e-05,-0.00764113027100488,0.114887948612064,-0.115384538564649, -5.22392794244375e-05,-0.00699787595056189,0.129584700440381,-0.141681036253292, -5.57035484139712e-05,-0.0063546216301188,0.144281452268698,-0.167977533941934, -5.91678174035049e-05,-0.00571136730967536,0.158978204097015,-0.194274031630577, -6.26320863932328e-05,-0.0050681129892326,0.173674955925332,-0.220570529319219, -6.60963553827387e-05,-0.00442485866878917,0.188371707753649,-0.246867027007862, -6.95606243724112e-05,-0.00378160434834629,0.203068459581966,-0.273163524696505, -7.30248933621391e-05,-0.00313835002790341,0.217765211410283,-0.299460022385147, -7.6489162351423e-05,-0.00249509570745987,0.2324619632386,-0.32575652007379, -7.99534313412065e-05,-0.00185184138701699,0.247158715066917,-0.352053017762433, -8.34177003307124e-05,-0.00120858706657367,0.261855466895234,-0.378349515451075, -8.68819693206069e-05,-0.00056533274613102,0.276552218723551,-0.404646013139718, -9.03462383102793e-05,7.79215743120787e-05,0.291248970551867,-0.430942510828361, -9.38105072993967e-05,0.000721175894756065,0.305945722380185,-0.457239008517003, -9.72747762897352e-05,0.00136443021519783,0.320642474208501,-0.483535506205646, -0.00010073904527852,0.00200768453564182,0.335339226036818,-0.509832003894289, -0.000104203314268525,0.00265093885608425,0.350035977865135,-0.536128501582931, -0.000107667583258086,0.00329419317652779,0.364732729693452,-0.562424999271574, -0.000111131852247759,0.00393744749697111,0.37942948152177,-0.588721496960216, -0.000114596121237875,0.00458070181741332,0.394126233350086,-0.615017994648859, -0.000118060390227548,0.00522395613785687,0.408822985178404,-0.641314492337501, -0.000121524659216776,0.00586721045829952,0.42351973700672,-0.667610990026144, -0.000124988928206005,0.00651046477874351,0.438216488835037,-0.693907487714787, -0.000128453197195788,0.00715371909918661,0.452913240663354,-0.720203985403429, -4.34132682335386e-05,-0.00810596430317584,0.0996539807637659,-0.0896180681046644, -4.66157490368324e-05,-0.00747605506734977,0.114135926939613,-0.116062870332676, -4.98182298401817e-05,-0.00684614583152376,0.12861787311546,-0.142507672560687, -5.30207106436142e-05,-0.00621623659569792,0.143099819291307,-0.168952474788699, -5.62231914469913e-05,-0.00558632735987197,0.157581765467154,-0.19539727701671, -5.94256722504793e-05,-0.00495641812404612,0.172063711643001,-0.221842079244722, -6.26281530536899e-05,-0.00432650888821984,0.186545657818849,-0.248286881472733, -6.58306338569559e-05,-0.00369659965239377,0.201027603994696,-0.274731683700745, -6.90331146602774e-05,-0.00306669041656749,0.215509550170543,-0.301176485928756, -7.2235595464043e-05,-0.00243678118074242,0.22999149634639,-0.327621288156768, -7.54380762672535e-05,-0.00180687194491602,0.244473442522237,-0.354066090384779, -7.86405570706306e-05,-0.00117696270909007,0.258955388698084,-0.380510892612791, -8.18430378738411e-05,-0.000547053473264114,0.273437334873931,-0.406955694840802, -8.50455186776067e-05,8.28557625613957e-05,0.287919281049778,-0.433400497068814, -8.82479994805951e-05,0.000712764998388238,0.302401227225626,-0.459845299296825, -9.14504802842497e-05,0.00134267423421375,0.316883173401473,-0.486290101524837, -9.46529610874602e-05,0.0019725834700397,0.33136511957732,-0.512734903752848, -9.78554418905597e-05,0.00260249270586632,0.345847065753167,-0.53917970598086, -0.000101057922694325,0.00323240194169117,0.360329011929014,-0.565624508208871, -0.000104260403497647,0.00386231117751779,0.374810958104862,-0.592069310436883, -0.000107462884300746,0.00449222041334396,0.389292904280709,-0.618514112664894, -0.000110665365104734,0.00512212964916925,0.403774850456555,-0.644958914892906, -0.000113867845907278,0.00575203888499631,0.418256796632403,-0.671403717120917, -0.000117070326711044,0.0063819481208216,0.43273874280825,-0.697848519348929, -0.000120272807514366,0.00701185735664733,0.447220688984097,-0.72429332157694, -4.10094967634722e-05,-0.00788585184550522,0.0989709743399407,-0.0902845607802442, -4.3893562496955e-05,-0.00727401952321172,0.113180717835569,-0.116915851331686, -4.67776282303267e-05,-0.00666218720091816,0.127390461331197,-0.143547141883127, -4.96616939639205e-05,-0.00605035487862482,0.141600204826825,-0.170178432434568, -5.25457596971535e-05,-0.00543852255633093,0.155809948322453,-0.19680972298601, -5.5429825430664e-05,-0.00482669023403759,0.170019691818081,-0.223441013537451, -5.831389116423e-05,-0.00421485791174392,0.184229435313709,-0.250072304088892, -6.11979568976295e-05,-0.00360302558945047,0.198439178809337,-0.276703594640334, -6.4082022630918e-05,-0.00299119326715669,0.212648922304965,-0.303334885191775, -6.69660883643175e-05,-0.0023793609448628,0.226858665800594,-0.329966175743216, -6.9850154097828e-05,-0.00176752862256957,0.241068409296222,-0.356597466294657, -7.2734219831061e-05,-0.00115569630027568,0.25527815279185,-0.383228756846099, -7.56182855647936e-05,-0.000543863977982451,0.269487896287478,-0.40986004739754, -7.85023512981375e-05,6.79683443107759e-05,0.283697639783105,-0.436491337948982, -8.13864170315926e-05,0.000679800666604446,0.297907383278734,-0.463122628500423, -8.42704827652696e-05,0.00129163298889812,0.312117126774362,-0.489753919051864, -8.71545484990577e-05,0.00190346531119112,0.32632687026999,-0.516385209603306, -9.00386142319576e-05,0.00251529763348501,0.340536613765618,-0.543016500154747, -9.29226799651905e-05,0.00312712995577891,0.354746357261246,-0.569647790706188, -9.58067456986456e-05,0.00373896227807258,0.368956100756874,-0.59627908125763, -9.86908114323226e-05,0.00435079460036603,0.383165844252503,-0.622910371809071, -0.000101574877165889,0.00496262692265903,0.39737558774813,-0.649541662360512, -0.000104458942898678,0.00557445924495381,0.411585331243759,-0.676172952911953, -0.000107343008632244,0.00618629156724682,0.425795074739386,-0.702804243463395, -0.000110227074366587,0.00679812388953938,0.440004818235014,-0.729435534014836, -3.80596517962906e-05,-0.0076245671120399,0.0981291654083597,-0.0910950680558131, -4.05734806585289e-05,-0.00703666671454195,0.112004749814571,-0.117953143009374, -4.30873095206841e-05,-0.00644876631704372,0.125880334220783,-0.144811217962935, -4.5601138383089e-05,-0.00586086591954604,0.139755918626994,-0.171669292916496, -4.81149672451053e-05,-0.00527296552204759,0.153631503033206,-0.198527367870057, -5.06287961075103e-05,-0.0046850651245498,0.167507087439417,-0.225385442823618, -5.31426249695266e-05,-0.00409716472705157,0.181382671845629,-0.252243517777179, -5.56564538321536e-05,-0.00350926432955401,0.19525825625184,-0.27910159273074, -5.81702826940589e-05,-0.00292136393205555,0.209133840658052,-0.305959667684301, -6.06841115561307e-05,-0.0023334635345571,0.223009425064263,-0.332817742637863, -6.31979404187577e-05,-0.00174556313705998,0.236885009470474,-0.359675817591423, -6.57117692809961e-05,-0.00115766273956175,0.250760593876686,-0.386533892544985, -6.82255981431235e-05,-0.000569762342063518,0.264636178282898,-0.413391967498546, -7.07394270053063e-05,1.81380554347133e-05,0.278511762689109,-0.440250042452107, -7.32532558677113e-05,0.000606038452932056,0.29238734709532,-0.467108117405668, -7.57670847297831e-05,0.00119393885043051,0.306262931501532,-0.493966192359229, -7.82809135917439e-05,0.00178183924792896,0.320138515907744,-0.52082426731279, -8.07947424543709e-05,0.00236973964542653,0.334014100313955,-0.547682342266351, -8.33085713164428e-05,0.00295764004292476,0.347889684720166,-0.574540417219912, -8.58224001789587e-05,0.00354554044042255,0.361765269126378,-0.601398492173473, -8.83362290406975e-05,0.00413344083792078,0.375640853532589,-0.628256567127034, -9.08500579029914e-05,0.00472134123541901,0.389516437938801,-0.655114642080595, -9.33638867655073e-05,0.00530924163291679,0.403392022345012,-0.681972717034156, -9.58777156273571e-05,0.00589714203041458,0.417267606751223,-0.708830791987717, -9.83915444897621e-05,0.00648504242791326,0.431143191157436,-0.735688866941278, -3.45779145164704e-05,-0.00732835531256426,0.0971305622271952,-0.0920415337166216, -3.66844091888585e-05,-0.00677111474302738,0.110611573274943,-0.11916443497771, -3.87909038613854e-05,-0.00621387417349073,0.12409258432269,-0.146287336238799, -4.08973985337735e-05,-0.00565663360395396,0.137573595370438,-0.173410237499888, -4.30038932061061e-05,-0.00509939303441687,0.151054606418186,-0.200533138760977, -4.5110387878633e-05,-0.00454215246488043,0.164535617465933,-0.227656040022065, -4.72168825510488e-05,-0.00398491189534356,0.178016628513681,-0.254778941283154, -4.93233772231871e-05,-0.00342767132580635,0.191497639561429,-0.281901842544243, -5.14298718957695e-05,-0.00287043075626969,0.204978650609177,-0.309024743805332, -5.35363665684074e-05,-0.00231319018673326,0.218459661656924,-0.336147645066421, -5.56428612406012e-05,-0.00175594961719616,0.231940672704672,-0.363270546327509, -5.77493559131281e-05,-0.00119870904765929,0.24542168375242,-0.390393447588598, -5.9855850585655e-05,-0.000641468478122853,0.258902694800167,-0.417516348849687, -6.19623452577933e-05,-8.42279085857545e-05,0.272383705847915,-0.444639250110776, -6.40688399304867e-05,0.0004730126609509,0.285864716895663,-0.471762151371865, -6.61753346027361e-05,0.00103025323048822,0.299345727943411,-0.498885052632953, -6.82818292755405e-05,0.00158749380002421,0.312826738991158,-0.526007953894042, -7.03883239473457e-05,0.00214473436956153,0.326307750038906,-0.553130855155131, -7.24948186198171e-05,0.00270197493909818,0.339788761086653,-0.580253756416219, -7.46013132923995e-05,0.00325921550863484,0.353269772134401,-0.607376657677308, -7.67078079648709e-05,0.00381645607817171,0.366750783182149,-0.634499558938397, -7.88143026374533e-05,0.00437369664770859,0.380231794229897,-0.661622460199486, -8.09207973094805e-05,0.00493093721724591,0.393712805277644,-0.688745361460574, -8.30272919819519e-05,0.00548817778678234,0.407193816325392,-0.715868262721663, -8.51337866539792e-05,0.00604541835631967,0.42067482737314,-0.742991163982752, -3.06525281011105e-05,-0.00700973400874272,0.0959984432618401,-0.0930958073532768, -3.23392300514425e-05,-0.00649009642664439,0.10903440525097,-0.120513700187626, -3.40259320015801e-05,-0.00597045884454606,0.122070367240099,-0.147931593021976, -3.57126339517455e-05,-0.00545082126244745,0.135106329229229,-0.175349485856326, -3.73993359019109e-05,-0.00493118368034906,0.148142291218359,-0.202767378690675, -3.90860378523539e-05,-0.00441154609825101,0.161178253207488,-0.230185271525025, -4.07727398021307e-05,-0.00389190851615162,0.174214215196619,-0.257603164359374, -4.24594417525737e-05,-0.00337227093405379,0.187250177185748,-0.285021057193724, -4.41461437028501e-05,-0.00285263335195518,0.200286139174878,-0.312438950028074, -4.58328456530155e-05,-0.00233299576985702,0.213322101164008,-0.339856842862423, -4.75195476034584e-05,-0.00181335818775841,0.226358063153138,-0.367274735696773, -4.92062495536238e-05,-0.00129372060566046,0.239394025142267,-0.394692628531123, -5.08929515037337e-05,-0.000774083023561634,0.252429987131397,-0.422110521365472, -5.25796534536216e-05,-0.000254445441462803,0.265465949120527,-0.449528414199822, -5.42663554041756e-05,0.00026519214063514,0.278501911109656,-0.476946307034171, -5.59530573540634e-05,0.000784829722733971,0.291537873098786,-0.504364199868521, -5.76397593043954e-05,0.00130446730483214,0.304573835087916,-0.531782092702871, -5.93264612549493e-05,0.0018241048869303,0.317609797077046,-0.55919998553722, -6.10131632049482e-05,0.00234374246902935,0.330645759066176,-0.58661787837157, -6.2699865154392e-05,0.00286338005112841,0.343681721055305,-0.614035771205919, -6.43865671061672e-05,0.00338301763322457,0.356717683044434,-0.641453664040269, -6.60732690552779e-05,0.00390265521532474,0.369753645033565,-0.668871556874619, -6.77599710058319e-05,0.00442229279742268,0.382789607022694,-0.696289449708968, -6.94466729558307e-05,0.00494193037952151,0.395825569011824,-0.723707342543318, -7.11333749062737e-05,0.00546156796161945,0.408861531000954,-0.751125235377668, -2.64494376026603e-05,-0.00668598208688942,0.0947791461911116,-0.094210172661096, -2.77343182182865e-05,-0.00621005569337407,0.107338354713484,-0.121939871049442, -2.90191988338018e-05,-0.00573412929985873,0.119897563235857,-0.149669569437788, -3.0304079449428e-05,-0.00525820290634327,0.13245677175823,-0.177399267826133, -3.15889600651653e-05,-0.00478227651282837,0.145015980280602,-0.205128966214479, -3.28738406804585e-05,-0.00430635011931257,0.157575188802975,-0.232858664602825, -3.41587212962513e-05,-0.00383042372579745,0.170134397325348,-0.260588362991171, -3.54436019119331e-05,-0.0033544973322821,0.182693605847721,-0.288318061379517, -3.67284825276704e-05,-0.00287857093876709,0.195252814370094,-0.316047759767862, -3.8013363142908e-05,-0.00240264454525096,0.207812022892467,-0.343777458156208, -3.92982437585898e-05,-0.00192671815173595,0.220371231414839,-0.371507156544554, -4.0583124373994e-05,-0.00145079175822027,0.232930439937212,-0.3992368549329, -4.18680049897313e-05,-0.000974865364705257,0.245489648459585,-0.426966553321246, -4.31528856047469e-05,-0.000498938971188911,0.258048856981958,-0.454696251709591, -4.44377662207618e-05,-2.30125776745638e-05,0.27060806550433,-0.482425950097937, -4.57226468366656e-05,0.000452913815840672,0.283167274026703,-0.510155648486283, -4.70075274520143e-05,0.000928840209356574,0.295726482549076,-0.537885346874629, -4.8292408067363e-05,0.00140476660287181,0.308285691071449,-0.565615045262975, -4.95772886830448e-05,0.00188069299638705,0.320844899593822,-0.59334474365132, -5.08621692989486e-05,0.00235661938990184,0.333404108116194,-0.621074442039666, -5.21470499141863e-05,0.00283254578341818,0.345963316638568,-0.648804140428012, -5.34319305303121e-05,0.00330847217693275,0.35852252516094,-0.676533838816358, -5.47168111455498e-05,0.00378439857044865,0.371081733683313,-0.704263537204703, -5.60016917613426e-05,0.00426032496396367,0.383640942205686,-0.731993235593049, -5.72865723769134e-05,0.00473625135747913,0.396200150728059,-0.759722933981395, -2.21904635240855e-05,-0.00637564714269551,0.0935364647369939,-0.0953246333844103, -2.31200732917491e-05,-0.00594752312316504,0.105612365103849,-0.123366164024534, -2.40496830592185e-05,-0.0055193991036343,0.117688265470703,-0.151407694664657, -2.49792928268544e-05,-0.00509127508410401,0.129764165837558,-0.17944922530478, -2.59089025945736e-05,-0.00466315106457338,0.141840066204413,-0.207490755944904, -2.68385123621262e-05,-0.00423502704504308,0.153915966571267,-0.235532286585027, -2.77681221296788e-05,-0.00380690302551245,0.165991866938122,-0.26357381722515, -2.8697731897287e-05,-0.00337877900598182,0.178067767304977,-0.291615347865274, -2.96273416646731e-05,-0.00295065498645108,0.190143667671832,-0.319656878505397, -3.05569514327808e-05,-0.00252253096692101,0.202219568038687,-0.34769840914552, -3.14865612001669e-05,-0.00209440694739049,0.214295468405541,-0.375739939785644, -3.24161709682191e-05,-0.00166628292786086,0.226371368772395,-0.403781470425767, -3.33457807355497e-05,-0.00123815890832968,0.238447269139251,-0.43182300106589, -3.42753905027138e-05,-0.000810034888798272,0.250523169506106,-0.459864531706014, -3.5205000270655e-05,-0.000381910869267976,0.26259906987296,-0.487906062346137, -3.61346100381521e-05,4.62131502620977e-05,0.274674970239815,-0.51594759298626, -3.70642198060933e-05,0.000474337169792172,0.286750870606669,-0.543989123626384, -3.79938295733684e-05,0.000902461189323134,0.298826770973524,-0.572030654266507, -3.89234393414206e-05,0.00133058520885299,0.310902671340379,-0.600072184906631, -3.98530491085847e-05,0.00175870922838461,0.322978571707234,-0.628113715546754, -4.07826588758597e-05,0.00218683324791513,0.335054472074088,-0.656155246186877, -4.1712268643912e-05,0.00261495726744476,0.347130372440943,-0.684196776827001, -4.26418784115201e-05,0.00304308128697528,0.359206272807797,-0.712238307467124, -4.35714881793503e-05,0.0034712053065058,0.371282173174652,-0.740279838107247, -4.45010979468474e-05,0.00389932932603676,0.383358073541507,-0.76832136874737, -1.81092964162965e-05,-0.00609442506540392,0.092339161418845,-0.0963791729933219, -1.87491388606575e-05,-0.00571530823008992,0.103951741424497,-0.124715769627209, -1.93889813051573e-05,-0.00533619139477615,0.11556432143015,-0.153052366261096, -2.00288237498514e-05,-0.0049570745594627,0.127176901435802,-0.181388962894984, -2.06686661942124e-05,-0.00457795772414893,0.138789481441454,-0.209725559528871, -2.13085086385179e-05,-0.00419884088883482,0.150402061447107,-0.238062156162758, -2.19483510832119e-05,-0.00381972405352127,0.162014641452759,-0.266398752796645, -2.25881935274619e-05,-0.00344060721820716,0.173627221458412,-0.294735349430532, -2.32280359721004e-05,-0.00306149038289383,0.185239801464064,-0.32307194606442, -2.3867878416739e-05,-0.0026823735475805,0.196852381469716,-0.351408542698307, -2.45077208610445e-05,-0.00230325671226628,0.208464961475369,-0.379745139332194, -2.51475633050724e-05,-0.00192413987695206,0.220077541481021,-0.408081735966081, -2.57874057499885e-05,-0.00154502304163917,0.231690121486673,-0.436418332599969, -2.64272481942385e-05,-0.00116590620632495,0.243302701492326,-0.464754929233856, -2.70670906388215e-05,-0.000786789371011176,0.254915281497978,-0.493091525867743, -2.77069330829605e-05,-0.000407672535697179,0.26652786150363,-0.52142812250163, -2.83467755275435e-05,-2.85557003834036e-05,0.278140441509283,-0.549764719135517, -2.89866179723486e-05,0.000350561134929706,0.289753021514935,-0.578101315769404, -2.96264604167096e-05,0.000729677970243703,0.301365601520587,-0.606437912403291, -3.02663028611816e-05,0.0011087948055577,0.31297818152624,-0.634774509037179, -3.09061453060977e-05,0.00148791164087081,0.324590761531892,-0.663111105671066, -3.15459877504587e-05,0.00186702847618481,0.336203341537545,-0.691447702304953, -3.21858301944866e-05,0.0022461453114988,0.347815921543197,-0.71978429893884, -3.28256726390697e-05,0.0026252621468128,0.35942850154885,-0.748120895572728, -3.34655150839858e-05,0.00300437898212547,0.371041081554501,-0.776457492206615, -1.44024434682866e-05,-0.00585225334547468,0.0912463662770427,-0.0973260229863607, -1.48235312124601e-05,-0.00552027537389832,0.102437970731987,-0.125927553466052, -1.52446189566335e-05,-0.00518829740232207,0.113629575186932,-0.154529083945742, -1.56657067008348e-05,-0.00485631943074571,0.124821179641876,-0.183130614425433, -1.60867944450915e-05,-0.00452434145916925,0.136012784096821,-0.211732144905124, -1.6507882189154e-05,-0.004192363487593,0.147204388551766,-0.240333675384815, -1.69289699337161e-05,-0.0038603855160172,0.15839599300671,-0.268935205864506, -1.73500576775565e-05,-0.00352840754444017,0.169587597461655,-0.297536736344197, -1.7771145421952e-05,-0.00319642957286415,0.180779201916599,-0.326138266823888, -1.81922331660145e-05,-0.00286445160128768,0.191970806371544,-0.354739797303579, -1.86133209100214e-05,-0.00253247362971076,0.203162410826489,-0.38334132778327, -1.9034408654417e-05,-0.00220049565813518,0.214354015281433,-0.41194285826296, -1.94554963985905e-05,-0.00186851768655849,0.225545619736378,-0.440544388742651, -1.98765841425974e-05,-0.0015365397149818,0.236737224191323,-0.469145919222342, -2.02976718876036e-05,-0.00120456174340688,0.247928828646267,-0.497747449702033, -2.07187596309444e-05,-0.000872583771829083,0.259120433101212,-0.526348980181724, -2.11398473756175e-05,-0.000540605800253502,0.270312037556156,-0.554950510661415, -2.15609351198465e-05,-0.000208627828677033,0.281503642011101,-0.583552041141106, -2.19820228638534e-05,0.000123350142899881,0.292695246466046,-0.612153571620797, -2.24031106076383e-05,0.000455328114476128,0.30388685092099,-0.640755102100487, -2.28241983523114e-05,0.000787306086052375,0.315078455375935,-0.669356632580178, -2.32452860965404e-05,0.00111928405762818,0.326270059830879,-0.697958163059869, -2.36663738407694e-05,0.00145126202920487,0.337461664285824,-0.72655969353956, -2.40874615848874e-05,0.00178324000078112,0.348653268740768,-0.755161224019251, -2.45085493290054e-05,0.00211521797235692,0.359844873195712,-0.783762754498942, -1.11956750544762e-05,-0.00565263731943455,0.0902970633076586,-0.0981369688707207, -1.14627406947176e-05,-0.0053633973446745,0.101124377882493,-0.126965406477688, -1.17298063349314e-05,-0.00507415736991468,0.111951692457328,-0.155793844084655, -1.19968719753671e-05,-0.00478491739515507,0.122779007032162,-0.184622281691623, -1.22639376156641e-05,-0.00449567742039525,0.133606321606997,-0.21345071929859, -1.25310032560999e-05,-0.00420643744563565,0.144433636181831,-0.242279156905557, -1.27980688963691e-05,-0.00391719747087582,0.155260950756666,-0.271107594512525, -1.30651345369714e-05,-0.00362795749611622,0.1660882653315,-0.299936032119492, -1.33322001771297e-05,-0.00333871752135617,0.176915579906335,-0.32876446972646, -1.35992658176209e-05,-0.00304947754659657,0.187742894481169,-0.357592907333427, -1.38663314576681e-05,-0.00276023757183652,0.198570209056004,-0.386421344940394, -1.41333970979374e-05,-0.00247099759707647,0.209397523630839,-0.415249782547362, -1.44004627384842e-05,-0.00218175762231732,0.220224838205673,-0.444078220154329, -1.46675283788644e-05,-0.00189251764755749,0.231052152780507,-0.472906657761296, -1.49345940188006e-05,-0.00160327767279722,0.241879467355342,-0.501735095368264, -1.52016596595139e-05,-0.00131403769803762,0.252706781930176,-0.530563532975231, -1.54687252994501e-05,-0.00102479772327735,0.263534096505011,-0.559391970582198, -1.57357909403855e-05,-0.000735557748518634,0.274361411079845,-0.588220408189166, -1.60028565808767e-05,-0.000446317773758809,0.28518872565468,-0.617048845796133, -1.62699222199247e-05,-0.000157077798997651,0.296016040229514,-0.645877283403101, -1.65369878610822e-05,0.000132162175761508,0.306843354804349,-0.674705721010068, -1.68040535013514e-05,0.000421402150521111,0.317670669379184,-0.703534158617035, -1.70711191419537e-05,0.00071064212528027,0.328497983954018,-0.732362596224003, -1.7338184782334e-05,0.000999882100040317,0.339325298528852,-0.76119103383097, -1.76052504223811e-05,0.00128912207480036,0.350152613103687,-0.790019471437937, -8.53627198391105e-06,-0.00549387608430107,0.0895071105732167,-0.0988038979201813, -8.70110285366987e-06,-0.00524142307825587,0.10003224520615,-0.127818945950395, -8.86593372320665e-06,-0.00498897007221011,0.110557379839084,-0.156833993980609, -9.03076459266017e-06,-0.00473651706616451,0.121082514472018,-0.185849042010823, -9.19559546241899e-06,-0.00448406406011925,0.131607649104952,-0.214864090041036, -9.36042633220557e-06,-0.00423161105407388,0.142132783737886,-0.24387913807125, -9.5252572017146e-06,-0.00397915804802829,0.152657918370819,-0.272894186101464, -9.6900880716122e-06,-0.00372670504198336,0.163183053003753,-0.301909234131678, -9.8549189410102e-06,-0.00347425203593765,0.173708187636687,-0.330924282161892, -1.00197498106858e-05,-0.00322179902989195,0.184233322269621,-0.359939330192105, -1.01845806801393e-05,-0.00296934602384646,0.194758456902554,-0.388954378222319, -1.03494115502034e-05,-0.00271689301780165,0.205283591535488,-0.417969426252533, -1.05142424191573e-05,-0.00246444001175528,0.215808726168422,-0.446984474282747, -1.06790732894435e-05,-0.00221198700571046,0.226333860801355,-0.47599952231296, -1.08439041586195e-05,-0.00195953399966431,0.236858995434289,-0.505014570343174, -1.10087350281285e-05,-0.00170708099361883,0.247384130067223,-0.534029618373388, -1.11735658978596e-05,-0.00145462798757379,0.257909264700157,-0.563044666403602, -1.13383967679237e-05,-0.00120217498152897,0.26843439933309,-0.592059714433815, -1.15032276370997e-05,-0.00094972197548282,0.278959533966024,-0.621074762464029, -1.16680585069417e-05,-0.000697268969437559,0.289484668598958,-0.650089810494243, -1.18328893772279e-05,-0.000444815963393186,0.300009803231891,-0.679104858524457, -1.19977202459598e-05,-0.000192362957346592,0.310534937864825,-0.70811990655467, -1.21625511158019e-05,6.00900486991129e-05,0.321060072497759,-0.737134954584884, -1.2327381985866e-05,0.000312543054743486,0.331585207130693,-0.766150002615098, -1.24922128547089e-05,0.000564996060790079,0.342110341763627,-0.795165050645312, -6.40692016448674e-06,-0.0053710999246836,0.0888728918428511,-0.0993343209497565, -6.50696889714641e-06,-0.0051489622806824,0.0991560307723809,-0.128497784266617, -6.60701762988936e-06,-0.00492682463668104,0.109439169701911,-0.157661247583477, -6.70706636268781e-06,-0.0047046869926799,0.119722308631441,-0.186824710900338, -6.80711509537524e-06,-0.00448254934867875,0.130005447560971,-0.215988174217198, -6.90716382828471e-06,-0.00426041170467784,0.140288586490501,-0.245151637534059, -7.0072125607501e-06,-0.00403827406067636,0.150571725420031,-0.274315100850919, -7.10726129382611e-06,-0.00381613641667555,0.160854864349561,-0.303478564167779, -7.20731002623598e-06,-0.00359399877267408,0.17113800327909,-0.33264202748464, -7.30735875920097e-06,-0.00337186112867305,0.18142114220862,-0.3618054908015, -7.40740749172186e-06,-0.0031497234846718,0.19170428113815,-0.39096895411836, -7.5074562244648e-06,-0.00292758584067077,0.20198742006768,-0.420132417435221, -7.60750495754081e-06,-0.00270544819666951,0.21227055899721,-0.449295880752081, -7.7075536905058e-06,-0.00248331055266848,0.22255369792674,-0.478459344068942, -7.80760242291567e-06,-0.00226117290866701,0.23283683685627,-0.507622807385802, -7.90765115599168e-06,-0.00203903526466642,0.2431199757858,-0.536786270702662, -8.0076998886236e-06,-0.00181689762066495,0.25340311471533,-0.565949734019523, -8.10774862125552e-06,-0.00159475997666414,0.263686253644859,-0.595113197336383, -8.20779735388744e-06,-0.00137262233266267,0.27396939257439,-0.624276660653243, -8.30784608663038e-06,-0.00115048468866163,0.284252531503919,-0.653440123970104, -8.40789482015047e-06,-0.000928347044661493,0.294535670433449,-0.682603587286964, -8.50794355211626e-06,-0.000706209400658686,0.30481880936298,-0.711767050603825, -8.60799228508125e-06,-0.0004840717566581,0.315101948292509,-0.740930513920685, -8.70804101815725e-06,-0.000261934112657958,0.325385087222038,-0.770093977237545, -8.80808975034508e-06,-3.97964686555952e-05,0.335668226151569,-0.799257440554406, -4.7493710347013e-06,-0.00527815649809937,0.0883781638102335,-0.0997450522043126, -4.80971551430898e-06,-0.00508013826492776,0.0984729004798276,-0.129023440389591, -4.8700599936391e-06,-0.00488212003175592,0.108567637149422,-0.158301828574869, -4.93040447338555e-06,-0.00468410179858436,0.118662373819016,-0.187580216760147, -4.99074895271567e-06,-0.00448608356541258,0.12875711048861,-0.216858604945425, -5.05109343229559e-06,-0.00428806533224102,0.138851847158204,-0.246136993130703, -5.11143791193103e-06,-0.00409004709906957,0.148946583827798,-0.275415381315981, -5.17178239123339e-06,-0.00389202886589768,0.159041320497392,-0.30469376950126, -5.23212687070229e-06,-0.0036940106327259,0.169136057166986,-0.333972157686538, -5.2924713502267e-06,-0.00349599239955434,0.17923079383658,-0.363250545871816, -5.35281583002867e-06,-0.00329797416638278,0.189325530506175,-0.392528934057094, -5.41316030960859e-06,-0.003099955933211,0.199420267175769,-0.421807322242372, -5.47350478896647e-06,-0.00290193770003966,0.209515003845362,-0.45108571042765, -5.53384926815781e-06,-0.00270391946686721,0.219609740514957,-0.480364098612928, -5.59419374790426e-06,-0.00250590123369587,0.229704477184551,-0.509642486798207, -5.65453822720663e-06,-0.00230788300052409,0.239799213854145,-0.538920874983485, -5.71488270706411e-06,-0.00210986476735253,0.249893950523739,-0.568199263168763, -5.77522718625545e-06,-0.00191184653418097,0.259988687193333,-0.597477651354041, -5.83557166555781e-06,-0.0017138283010083,0.270083423862928,-0.626756039539319, -5.89591614541529e-06,-0.00151581006783719,0.280178160532522,-0.656034427724597, -5.95626062516175e-06,-0.00131779183466607,0.290272897202115,-0.685312815909875, -6.01660510446411e-06,-0.00111977360149407,0.30036763387171,-0.714591204095153, -6.07694958443261e-06,-0.000921755368323396,0.310462370541303,-0.743869592280432, -6.13729406373498e-06,-0.000723737135150948,0.320557107210898,-0.77314798046571, -6.19763854325939e-06,-0.000525718901979388,0.330651843880492,-0.802426368650988, -3.48715964956781e-06,-0.00520890474348573,0.0880008344408879,-0.100056566544096, -3.523667049532e-06,-0.00502955531331717,0.0979520895970044,-0.12942211815829, -3.56017444960721e-06,-0.00485020588314866,0.107903344753121,-0.158787669772483, -3.59668184971018e-06,-0.00467085645298015,0.117854599909237,-0.188153221386677, -3.63318924967437e-06,-0.00449150702281154,0.127805855065354,-0.21751877300087, -3.6696966495553e-06,-0.0043121575926427,0.13775711022147,-0.246884324615064, -3.70620404976929e-06,-0.00413280816247441,0.147708365377587,-0.276249876229257, -3.74271144976124e-06,-0.00395345873230579,0.157659620533703,-0.305615427843451, -3.77921884947563e-06,-0.00377410930213684,0.16761087568982,-0.334980979457644, -3.81572624991167e-06,-0.00359475987196856,0.177562130845936,-0.364346531071838, -3.8522336498481e-06,-0.00341541044180005,0.187513386002053,-0.393712082686032, -3.88874105000658e-06,-0.00323606101163154,0.197464641158169,-0.423077634300225, -3.92524844994302e-06,-0.00305671158146303,0.207415896314286,-0.452443185914419, -3.96175585004599e-06,-0.0028773621512943,0.217367151470402,-0.481808737528612, -3.99826324992691e-06,-0.00269801272112535,0.227318406626519,-0.511174289142806, -4.03477065002988e-06,-0.00251866329095707,0.237269661782635,-0.540539840756999, -4.07127805013285e-06,-0.00233931386078856,0.247220916938752,-0.569905392371193, -4.1077854501248e-06,-0.00215996443062028,0.257172172094868,-0.599270943985386, -4.14429285000573e-06,-0.00198061500045155,0.267123427250985,-0.62863649559958, -4.18080025044176e-06,-0.00180126557028304,0.277074682407101,-0.658002047213773, -4.21730765043371e-06,-0.00162191614011453,0.287025937563218,-0.687367598827967, -4.25381505009259e-06,-0.00144256670994558,0.296977192719334,-0.71673315044216, -4.29032245052863e-06,-0.00126321727977796,0.30692844787545,-0.746098702056354, -4.32682984996546e-06,-0.00108386784960768,0.316879703031568,-0.775464253670547, -4.36333724973537e-06,-0.000904518419439171,0.326830958187684,-0.804829805284741, -2.54199221810802e-06,-0.00515790214524514,0.0877179488119476,-0.100289131280884, -2.5643166282896e-06,-0.00499270161256504,0.0975617543160146,-0.129719755790012, -2.58664103830464e-06,-0.00482750107988472,0.107405559820082,-0.15915038029914, -2.60896544848621e-06,-0.00466230054720473,0.117249365324149,-0.188581004808268, -2.63128985850125e-06,-0.00449710001452464,0.127093170828216,-0.218011629317396, -2.65361426871058e-06,-0.00433189948184465,0.136936976332283,-0.247442253826524, -2.67593867891991e-06,-0.00416669894916466,0.14678078183635,-0.276872878335652, -2.69826308918475e-06,-0.00400149841648467,0.156624587340417,-0.30630350284478, -2.72058749889448e-06,-0.0038362978838038,0.166468392844484,-0.335734127353908, -2.7429119090483e-06,-0.00367109735112403,0.176312198348551,-0.365164751863036, -2.76523631953518e-06,-0.00350589681844427,0.186156003852618,-0.394595376372163, -2.78756072946695e-06,-0.00334069628576406,0.195999809356685,-0.424026000881291, -2.80988513956526e-06,-0.00317549575308407,0.205843614860751,-0.453456625390419, -2.83220954977459e-06,-0.00301029522040386,0.215687420364818,-0.482887249899547, -2.85453395976187e-06,-0.00284509468772387,0.225531225868885,-0.512317874408675, -2.87685836974916e-06,-0.00267989415504299,0.235375031372953,-0.541748498917803, -2.89918278006951e-06,-0.00251469362236367,0.245218836877019,-0.571179123426931, -2.92150719050088e-06,-0.00234949308968391,0.255062642381086,-0.600609747936059, -2.94383160026612e-06,-0.00218429255700325,0.264906447885153,-0.630040372445187, -2.9661560106975e-06,-0.00201909202432349,0.274750253389221,-0.659470996954315, -2.98848042024069e-06,-0.00185389149164283,0.284594058893288,-0.688901621463443, -3.01080483111615e-06,-0.00168869095896396,0.294437864397354,-0.718332245972571, -3.03312924121446e-06,-0.0015234904262833,0.304281669901422,-0.747762870481698, -3.05545365031357e-06,-0.00135828989360176,0.314125475405489,-0.777193494990826, -3.07777806130005e-06,-0.00119308936092244,0.323969280909556,-0.806624119499954, -1.8430865197927e-06,-0.00512065534514089,0.0875085860192835,-0.100460717415729, -1.8569617065145e-06,-0.00496600983648232,0.0972729333748349,-0.129939352670936, -1.87083689301426e-06,-0.00481136432782359,0.107037280730386,-0.159417987926143, -1.88471207970831e-06,-0.00465671881916507,0.116801628085938,-0.18889662318135, -1.89858726634684e-06,-0.00450207331050667,0.126565975441489,-0.218375258436557, -1.91246245301313e-06,-0.00434742780184805,0.13633032279704,-0.247853893691764, -1.92633763973493e-06,-0.00419278229318942,0.146094670152592,-0.277332528946971, -1.9402128262902e-06,-0.0040381367845308,0.155859017508143,-0.306811164202179, -1.95408801273445e-06,-0.00388349127587184,0.165623364863695,-0.336289799457386, -1.96796319962278e-06,-0.00372884576721355,0.175387712219246,-0.365768434712593, -1.98183838573396e-06,-0.00357420025855437,0.185152059574797,-0.3952470699678, -1.99571357228923e-06,-0.00341955474989608,0.194916406930348,-0.424725705223007, -2.00958875951063e-06,-0.00326490924123801,0.2046807542859,-0.454204340478215, -2.0234639460659e-06,-0.0031102637325795,0.214445101641451,-0.483682975733422, -2.03733913262116e-06,-0.00295561822392054,0.224209448997003,-0.513161610988629, -2.05121431928745e-06,-0.00280097271526225,0.233973796352554,-0.542640246243836, -2.06508950584272e-06,-0.00264632720660352,0.243738143708105,-0.572118881499043, -2.07896469239799e-06,-0.00249168169794434,0.253502491063657,-0.60159751675425, -2.09283987928632e-06,-0.00233703618928649,0.263266838419208,-0.631076152009458, -2.10671506528648e-06,-0.00218239068062687,0.27303118577476,-0.660554787264665, -2.12059025206379e-06,-0.00202774517196813,0.282795533130311,-0.690033422519872, -2.1344654388411e-06,-0.00187309966331028,0.292559880485862,-0.719512057775079, -2.14834062617353e-06,-0.00171845415465288,0.302324227841413,-0.748990693030286, -2.1622158127288e-06,-0.0015638086459937,0.312088575196965,-0.778469328285493, -2.17609099806282e-06,-0.00140916313733364,0.321852922552516,-0.8079479635407, -1.33107356933837e-06,-0.00509361934727198,0.087355110602369,-0.100586213915024, -1.33986652878226e-06,-0.00494675606574968,0.0970612452386173,-0.130099963782301, -1.3486594881984e-06,-0.00479989278422721,0.106767379874866,-0.159613713649577, -1.35745244772556e-06,-0.00465302950270519,0.116473514511114,-0.189127463516854, -1.36624540691965e-06,-0.00450616622118238,0.126179649147362,-0.21864121338413, -1.37503836644681e-06,-0.00435930293966025,0.135885783783611,-0.248154963251406, -1.38383132580744e-06,-0.00421243965813756,0.145591918419859,-0.277668713118683, -1.39262428516806e-06,-0.00406557637661531,0.155298053056108,-0.307182462985959, -1.40141724502829e-06,-0.00391871309509373,0.165004187692355,-0.336696212853236, -1.41021020416687e-06,-0.00377184981357082,0.174710322328604,-0.366209962720512, -1.41900316336097e-06,-0.00362498653204812,0.184416456964853,-0.395723712587788, -1.42779612311017e-06,-0.00347812325052632,0.194122591601101,-0.425237462455065, -1.43658908258182e-06,-0.00333125996900407,0.203828726237349,-0.454751212322341, -1.44538204216449e-06,-0.00318439668748161,0.213534860873598,-0.484264962189618, -1.45417500119205e-06,-0.00303753340595914,0.223240995509846,-0.513778712056894, -1.46296796088574e-06,-0.00289067012443711,0.232947130146094,-0.543292461924171, -1.47176092013535e-06,-0.00274380684291464,0.242653264782342,-0.572806211791447, -1.48055387994006e-06,-0.0025969435613924,0.252359399418591,-0.602319961658723, -1.48934683941171e-06,-0.00245008027987037,0.262065534054839,-0.631833711526, -1.49813979866131e-06,-0.00230321699834768,0.271771668691087,-0.661347461393276, -1.50693275735581e-06,-0.00215635371682454,0.281477803327336,-0.690861211260553, -1.51572571716052e-06,-0.00200949043530274,0.291183937963584,-0.720374961127829, -1.52451867696524e-06,-0.00186262715378094,0.300890072599832,-0.749888710995105, -1.533311636992e-06,-0.00171576387225958,0.31059620723608,-0.779402460862382, -1.54210459568649e-06,-0.00156890059073556,0.320302341872329,-0.808916210729658, -9.58531469835711e-07,-0.00507408061420334,0.087243389692799,-0.100677416388633, -9.64218329235766e-07,-0.00493290601486351,0.0969071673851203,-0.13021668521061, -9.69905188913378e-07,-0.00479173141552414,0.106570945077441,-0.159755954032586, -9.75592048313434e-07,-0.00465055681618431,0.116234722769763,-0.189295222854562, -9.81278907741245e-07,-0.00450938221684438,0.125898500462084,-0.218834491676539, -9.86965767113546e-07,-0.00436820761750445,0.135562278154405,-0.248373760498515, -9.92652626763402e-07,-0.00422703301816485,0.145226055846727,-0.277913029320492, -9.98339485969169e-07,-0.00408585841882503,0.154889833539048,-0.307452298142468, -1.00402634573005e-06,-0.00394468381948543,0.164553611231369,-0.336991566964444, -1.00971320521337e-06,-0.00380350922014583,0.17421738892369,-0.366530835786421, -1.01540006491874e-06,-0.00366233462080645,0.183881166616011,-0.396070104608397, -1.02108692418001e-06,-0.00352116002146663,0.193544944308333,-0.425609373430374, -1.02677378344129e-06,-0.00337998542212614,0.203208722000654,-0.45514864225235, -1.03246064275808e-06,-0.00323881082278676,0.212872499692975,-0.484687911074327, -1.03814750251896e-06,-0.00309763622344739,0.222536277385296,-0.514227179896303, -1.04383436183575e-06,-0.00295646162410712,0.232200055077618,-0.543766448718279, -1.04952122137458e-06,-0.00281528702476774,0.241863832769939,-0.573305717540256, -1.05520808113546e-06,-0.00267411242542837,0.25152761046226,-0.602844986362232, -1.0608949406743e-06,-0.00253293782608832,0.261191388154582,-0.632384255184209, -1.06658179988006e-06,-0.00239176322674828,0.270855165846903,-0.661923524006185, -1.07226865964094e-06,-0.00225058862740868,0.280518943539224,-0.691462792828161, -1.07795551851364e-06,-0.00210941402806819,0.290182721231546,-0.721002061650138, -1.0836423781635e-06,-0.00196823942872948,0.299846498923866,-0.750541330472114, -1.08932923759131e-06,-0.00182706482938944,0.309510276616188,-0.780080599294091, -1.09501609724116e-06,-0.00168589023004984,0.319174054308509,-0.809619868116067, -5.62710645622966e-05,-0.00929027179783393,0.111581322726033,-0.0970644369926607, -6.07047215306356e-05,-0.00861705818975056,0.126820653135254,-0.122291084080049, -6.51383784987802e-05,-0.00794384458166708,0.142059983544474,-0.147517731167437, -6.9572035467147e-05,-0.00727063097358371,0.157299313953695,-0.172744378254826, -7.40056924353194e-05,-0.00659741736550012,0.172538644362916,-0.197971025342214, -7.84393494034918e-05,-0.00592420375741654,0.187777974772136,-0.223197672429603, -8.28730063719418e-05,-0.0052509901493335,0.203017305181357,-0.248424319516991, -8.73066633402808e-05,-0.00457777654125024,0.218256635590577,-0.273650966604379, -9.17403203085643e-05,-0.00390456293316666,0.233495965999798,-0.298877613691768, -9.61739772764036e-05,-0.00323134932508262,0.248735296409019,-0.324104260779156, -0.000100607634244854,-0.00255813571699948,0.26397462681824,-0.349330907866544, -0.000105041291213193,-0.00188492210891611,0.27921395722746,-0.374557554953933, -0.000109474948181809,-0.00121170850083296,0.294453287636681,-0.399784202041321, -0.000113908605149815,-0.000538494892749375,0.309692618045902,-0.42501084912871, -0.000118342262118154,0.000134718715334214,0.324931948455123,-0.450237496216098, -0.000122775919086493,0.00080793232341736,0.340171278864343,-0.475464143303486, -0.000127209576054721,0.00148114593150073,0.355410609273564,-0.500690790390875, -0.00013164323302306,0.00215435953958409,0.370649939682784,-0.525917437478263, -0.000136076889990622,0.00282757314766835,0.385889270092005,-0.551144084565651, -0.000140510546959405,0.00350078675575149,0.401128600501226,-0.57637073165304, -0.000144944203927633,0.00417400036383464,0.416367930910446,-0.601597378740428, -0.000149377860895306,0.00484721397191867,0.431607261319667,-0.626824025827817, -0.000153811517863756,0.00552042758000182,0.446846591728888,-0.652050672915205, -0.000158245174832095,0.00619364118808541,0.462085922138109,-0.677277320002594, -0.000162678831800656,0.00686685479616855,0.477325252547329,-0.702503967089982, -5.58898615238002e-05,-0.00924955997740112,0.111469737258622,-0.0971782211083355, -6.02689985940985e-05,-0.00857811775207085,0.12666948406076,-0.122433034186761, -6.46481356645356e-05,-0.00790667552674051,0.141869230862897,-0.147687847265187, -6.9027272734612e-05,-0.00723523330140985,0.157068977665035,-0.172942660343612, -7.34064098051879e-05,-0.00656379107607996,0.172268724467172,-0.198197473422038, -7.77855468755417e-05,-0.00589234885074974,0.187468471269309,-0.223452286500464, -8.21646839457291e-05,-0.00522090662541919,0.202668218071447,-0.248707099578889, -8.65438210163605e-05,-0.00454946440008919,0.217867964873584,-0.273961912657315, -9.09229580866588e-05,-0.00387802217475897,0.233067711675721,-0.299216725735741, -9.53020951567907e-05,-0.00320657994942852,0.248267458477859,-0.324471538814167, -9.96812322275331e-05,-0.00253513772409852,0.263467205279996,-0.349726351892592, -0.000104060369297776,-0.0018636954987683,0.278666952082133,-0.374981164971018, -0.000108439506367519,-0.00119225327343742,0.293866698884271,-0.400235978049443, -0.000112818643438484,-0.000520811048107639,0.309066445686408,-0.425490791127869, -0.000117197780508782,0.00015063117722236,0.324266192488545,-0.450745604206295, -0.000121576917578969,0.000822073402552803,0.339465939290682,-0.476000417284721, -0.000125956054649046,0.00149351562788413,0.354665686092821,-0.501255230363146, -0.000130335191719788,0.00216495785321369,0.369865432894958,-0.526510043441572, -0.000134714328789864,0.00283640007854435,0.385065179697095,-0.551764856519997, -0.000139093465860385,0.00350784230387413,0.400264926499232,-0.577019669598423, -0.000143472602930794,0.0041792845292048,0.41546467330137,-0.602274482676849, -0.000147851740001426,0.00485072675453413,0.430664420103507,-0.627529295755275, -0.000152230877071502,0.00552216897986435,0.445864166905644,-0.6527841088337, -0.000156610014141356,0.0061936112051959,0.461063913707782,-0.678038921912126, -0.000160989151211655,0.00686505343052612,0.476263660509919,-0.703293734990551, -5.53650565652264e-05,-0.00919379537165227,0.111315987704391,-0.0973346360612716, -5.96696161429267e-05,-0.00852484240257845,0.126461231965598,-0.122628167919875, -6.39741757204604e-05,-0.00785588943350446,0.141606476226805,-0.147921699778478, -6.82787352981884e-05,-0.00718693646443092,0.156751720488012,-0.173215231637081, -7.25832948758054e-05,-0.00651798349535715,0.171896964749218,-0.198508763495684, -7.68878544534224e-05,-0.00584903052628316,0.187042209010425,-0.223802295354287, -8.11924140310949e-05,-0.00518007755720939,0.202187453271632,-0.24909582721289, -8.54969736086564e-05,-0.00451112458813552,0.217332697532839,-0.274389359071493, -8.98015331861068e-05,-0.00384217161906153,0.232477941794046,-0.299682890930096, -9.41060927638349e-05,-0.00317321864998799,0.247623186055253,-0.3249764227887, -9.84106523415074e-05,-0.00250426568091422,0.26276843031646,-0.350269954647302, -0.000102715211918958,-0.00183531271184001,0.277913674577667,-0.375563486505906, -0.000107019771497074,-0.00116635974276669,0.293058918838874,-0.400857018364509, -0.000111324331074081,-0.000497406773692033,0.308204163100081,-0.426150550223112, -0.000115628890651753,0.000171546195381511,0.323349407361288,-0.451444082081715, -0.000119933450229315,0.000840499164455499,0.338494651622495,-0.476737613940318, -0.000124238009806876,0.00150945213352949,0.353639895883702,-0.502031145798921, -0.00012854256938466,0.00217840510260281,0.368785140144908,-0.527324677657524, -0.000132847128962554,0.00284735807167635,0.383930384406115,-0.552618209516127, -0.000137151688540449,0.0035163110407499,0.399075628667322,-0.577911741374731, -0.000141456248116789,0.00418526400982522,0.414220872928529,-0.603205273233334, -0.000145760807695128,0.00485421697889832,0.429366117189736,-0.628498805091937, -0.000150065367272689,0.00552316994797231,0.444511361450943,-0.65379233695054, -0.000154369926850584,0.00619212291704541,0.45965660571215,-0.679085868809143, -0.000158674486428256,0.00686107588611895,0.474801849973357,-0.704379400667746, -5.46470261018894e-05,-0.00911802876212842,0.111105388761253,-0.0975482068911161, -5.88504542051171e-05,-0.0084525760314943,0.126176049380055,-0.122894605830889, -6.30538823081228e-05,-0.00778712330085995,0.141246709998856,-0.148241004770662, -6.72573104111285e-05,-0.0071216705702255,0.156317370617657,-0.173587403710435, -7.14607385142174e-05,-0.00645621783959116,0.171388031236459,-0.198933802650208, -7.56641666170843e-05,-0.00579076510895682,0.18645869185526,-0.224280201589981, -7.98675947204508e-05,-0.0051253123783227,0.201529352474061,-0.249626600529754, -8.40710228234287e-05,-0.00445985964768836,0.216600013092862,-0.274972999469527, -8.82744509264621e-05,-0.00379440691705413,0.231670673711663,-0.3003193984093, -9.24778790298286e-05,-0.00312895418642012,0.246741334330465,-0.325665797349073, -9.66813071330286e-05,-0.00246350145578611,0.261811994949266,-0.351012196288846, -0.000100884735236006,-0.00179804872515166,0.276882655568067,-0.376358595228619, -0.00010508816333854,-0.00113259599451632,0.291953316186869,-0.401704994168392, -0.00010929159144224,-0.000467143263882974,0.30702397680567,-0.427051393108165, -0.000113495019545162,0.000198309466751478,0.322094637424471,-0.452397792047938, -0.000117698447647752,0.000863762197386597,0.337165298043273,-0.477744190987711, -0.000121901875751007,0.00152921492802016,0.352235958662074,-0.503090589927484, -0.000126105303854152,0.00219466765865461,0.367306619280875,-0.528436988867257, -0.000130308731957296,0.00286012038928884,0.382377279899676,-0.55378338780703, -0.000134512160060329,0.0035255731199233,0.397447940518477,-0.579129786746803, -0.000138715588163807,0.00419102585055731,0.412518601137279,-0.604476185686576, -0.00014291901626684,0.00485647858119176,0.42758926175608,-0.629822584626349, -0.00014712244436943,0.00552193131182621,0.442659922374881,-0.655168983566122, -0.000151325872472796,0.00618738404246022,0.457730582993683,-0.680515382505895, -0.000155529300575608,0.00685283677309467,0.472801243612484,-0.705861781445668, -5.36729334582597e-05,-0.00901621422295495,0.110819244155366,-0.097837145662461, -5.77408420101566e-05,-0.00835568333326708,0.125788697382655,-0.123255068178225, -6.18087505618037e-05,-0.00769515244357899,0.140758150609944,-0.148672990693989, -6.58766591136173e-05,-0.00703462155389123,0.155727603837232,-0.174090913209753, -6.99445676652366e-05,-0.00637409066420302,0.170697057064521,-0.199508835725517, -7.40124762173e-05,-0.00571355977451549,0.185666510291809,-0.22492675824128, -7.80803847689193e-05,-0.0050530288848275,0.200635963519098,-0.250344680757045, -8.21482933206497e-05,-0.00439249799513952,0.215605416746386,-0.275762603272808, -8.6216201872491e-05,-0.00373196710545165,0.230574869973675,-0.301180525788572, -9.02841104244989e-05,-0.003071436215764,0.245544323200964,-0.326598448304336, -9.43520189762292e-05,-0.00241090532607613,0.260513776428252,-0.3520163708201, -9.84199275280151e-05,-0.00175037443638826,0.275483229655541,-0.377434293335864, -0.000102487836079579,-0.00108984354669972,0.29045268288283,-0.402852215851628, -0.000106555744631143,-0.000429312657011849,0.305422136110118,-0.428270138367392, -0.000110623653183262,0.000231218232675579,0.320391589337406,-0.453688060883156, -0.000114691561734936,0.00089174912236345,0.335361042564695,-0.47910598339892, -0.000118759470286611,0.00155228001205199,0.350330495791984,-0.504523905914684, -0.000122827378838397,0.00221281090173986,0.365299949019272,-0.529941828430447, -0.000126895287390294,0.00287334179142751,0.380269402246561,-0.555359750946211, -0.000130963195941747,0.00353387268111582,0.395238855473849,-0.580777673461975, -0.000135031104494421,0.00419440357080259,0.410208308701138,-0.606195595977739, -0.000139099013045429,0.00485493446049112,0.425177761928426,-0.631613518493503, -0.000143166921596993,0.00551546535017922,0.440147215155715,-0.657031441009267, -0.00014723483014889,0.00617599623986775,0.455116668383004,-0.682449363525031, -0.000151302738700565,0.00683652712955496,0.470086121610292,-0.707867286040795, -5.23665861979217e-05,-0.00888141198140296,0.110434705288464,-0.0982232166583781, -5.62557988355028e-05,-0.00822779229853743,0.125268383429118,-0.123736706750919, -6.01450114732227e-05,-0.00757417261567206,0.140102061569772,-0.14925019684346, -6.40342241108316e-05,-0.00692055293280636,0.154935739710426,-0.174763686936001, -6.7923436748496e-05,-0.00626693324994099,0.16976941785108,-0.200277177028542, -7.18126493859939e-05,-0.00561331356707528,0.184603095991734,-0.225790667121083, -7.57018620237693e-05,-0.00495969388421003,0.199436774132388,-0.251304157213624, -7.95910746613782e-05,-0.00430607420134432,0.214270452273042,-0.276817647306165, -8.34802872992091e-05,-0.00365245451847929,0.229104130413696,-0.302331137398706, -8.73694999366514e-05,-0.00299883483561314,0.24393780855435,-0.327844627491247, -9.12587125742048e-05,-0.00234521515274766,0.258771486695004,-0.353358117583788, -9.51479252120913e-05,-0.0016915954698824,0.273605164835658,-0.378871607676329, -9.90371378495336e-05,-0.0010379757870167,0.288438842976312,-0.404385097768869, -0.000102926350487142,-0.000384356104151218,0.303272521116966,-0.42989858786141, -0.000106815563124862,0.000269263578714041,0.31810619925762,-0.455412077953951, -0.000110704775762693,0.000922883261579521,0.332939877398274,-0.480925568046492, -0.000114593988400191,0.001576502944445,0.347773555538928,-0.506439058139033, -0.000118483201037578,0.0022301226273107,0.362607233679582,-0.531952548231574, -0.000122372413675853,0.00288374231017552,0.377440911820236,-0.557466038324115, -0.000126261626313795,0.003537361993041,0.39227458996089,-0.582979528416656, -0.000130150838950849,0.00419098167590715,0.407108268101545,-0.608493018509197, -0.000134040051588125,0.00484460135877285,0.421941946242198,-0.634006508601738, -0.000137929264225845,0.005498221041639,0.436775624382853,-0.659519998694279, -0.000141818476864009,0.00615184072450292,0.451609302523506,-0.68503348878682, -0.000145707689501173,0.00680546040736907,0.46644298066416,-0.710546978879361, -5.06414664759591e-05,-0.00870641494209479,0.109925519599893,-0.0987305867049729, -5.4300090960635e-05,-0.00806246084650675,0.124579815825865,-0.124369670603822, -5.7958715445644e-05,-0.00741850675091893,0.139234112051837,-0.150008754502671, -6.16173399302089e-05,-0.00677455265533078,0.153888408277809,-0.175647838401519, -6.52759644150236e-05,-0.00613059855974274,0.168542704503781,-0.201286922300368, -6.89345888998938e-05,-0.00548664446415503,0.183197000729753,-0.226926006199217, -7.25932133845419e-05,-0.00484269036856666,0.197851296955725,-0.252565090098066, -7.62518378695787e-05,-0.00419873627297918,0.212505593181697,-0.278204173996915, -7.99104623543934e-05,-0.00355478217739136,0.227159889407669,-0.303843257895764, -8.35690868390415e-05,-0.0029108280818031,0.241814185633641,-0.329482341794613, -8.72277113236342e-05,-0.00226687398621461,0.256468481859614,-0.355121425693461, -9.08863358084488e-05,-0.00162291989062679,0.271122778085585,-0.38076050959231, -9.45449602932635e-05,-0.000978965795038311,0.285777074311558,-0.406399593491159, -9.82035847781892e-05,-0.000335011699450938,0.30043137053753,-0.432038677390008, -0.000101862209262782,0.000308942396137546,0.315085666763502,-0.457677761288857, -0.00010552083374793,0.000952896491724697,0.329739962989474,-0.483316845187706, -0.000109179458232411,0.0015968505873134,0.344394259215446,-0.508955929086555, -0.000112838082717559,0.00224080468290078,0.359048555441418,-0.534595012985404, -0.000116496707201819,0.00288475877848993,0.37370285166739,-0.560234096884252, -0.000120155331686522,0.00352871287407774,0.388357147893362,-0.585873180783101, -0.000123813956171559,0.00417266696966534,0.403011444119334,-0.61151226468195, -0.000127472580656374,0.00481662106525338,0.417665740345306,-0.637151348580799, -0.000131131205141188,0.00546057516084097,0.432320036571278,-0.662790432479648, -0.000134789829626225,0.00610452925642901,0.44697433279725,-0.688429516378497, -0.000138448454110485,0.0067484833520175,0.461628629023222,-0.714068600277346, -4.84092007519699e-05,-0.00848499191781982,0.109264353836443,-0.0993830256763889, -5.17786513329621e-05,-0.007854441457956,0.123686396404011,-0.125183613578783, -5.51481019137601e-05,-0.00722389099809195,0.13810843897158,-0.150984201481176, -5.85175524945858e-05,-0.00659334053822791,0.152530481539148,-0.17678478938357, -6.18870030755225e-05,-0.00596279007836398,0.166952524106717,-0.202585377285963, -6.52564536562927e-05,-0.0053322396184996,0.181374566674286,-0.228385965188357, -6.86259042370074e-05,-0.00470168915863556,0.195796609241854,-0.25418655309075, -7.19953548179442e-05,-0.00407113869877151,0.210218651809423,-0.279987140993144, -7.53648053989919e-05,-0.00344058823890747,0.224640694376991,-0.305787728895538, -7.87342559796511e-05,-0.00281003777904343,0.23906273694456,-0.331588316797931, -8.21037065606434e-05,-0.00217948731917939,0.253484779512128,-0.357388904700325, -8.54731571413025e-05,-0.00154893685931512,0.267906822079697,-0.383189492602718, -8.88426077221283e-05,-0.000918386399451299,0.282328864647265,-0.408990080505112, -9.22120583030095e-05,-0.000287835939587255,0.296750907214834,-0.434790668407506, -9.55815088841128e-05,0.000342714520276566,0.311172949782402,-0.460591256309899, -9.8950959464883e-05,0.000973264980140609,0.325594992349971,-0.486391844212293, -0.000102320410045764,0.00160381544000487,0.34001703491754,-0.512192432114686, -0.000105689860626312,0.00223436589986914,0.354439077485108,-0.53799302001708, -0.000109059311206972,0.0028649163597334,0.368861120052677,-0.563793607919474, -0.000112428761788186,0.00349546681959723,0.383283162620245,-0.589594195821867, -0.000115798212368845,0.00412601727946127,0.397705205187814,-0.615394783724261, -0.000119167662950281,0.00475656773932487,0.412127247755382,-0.641195371626654, -0.000122537113530941,0.00538711819918891,0.42654929032295,-0.666995959529048, -0.000125906564111822,0.00601766865905295,0.440971332890519,-0.692796547431442, -0.000129276014692481,0.00664821911891789,0.455393375458088,-0.718597135333835, -4.5595620421085e-05,-0.00821381402702714,0.108427395723077,-0.100198949943295, -4.8615583543743e-05,-0.00760157123076188,0.122556482353515,-0.126201510813993, -5.16355466664287e-05,-0.00698932843449651,0.136685568983954,-0.152204071684692, -5.46555097888923e-05,-0.00637708563823103,0.150814655614392,-0.17820663255539, -5.76754729117446e-05,-0.00576484284196588,0.16494374224483,-0.204209193426089, -6.06954360342082e-05,-0.00515260004570006,0.179072828875269,-0.230211754296787, -6.37153991569495e-05,-0.00454035724943513,0.193201915505707,-0.256214315167486, -6.67353622795797e-05,-0.00392811445316954,0.207331002136145,-0.282216876038184, -6.97553254023209e-05,-0.00331587165690439,0.221460088766583,-0.308219436908882, -7.27752885247845e-05,-0.00270362886063857,0.235589175397022,-0.334221997779581, -7.57952516476923e-05,-0.00209138606437387,0.24971826202746,-0.360224558650279, -7.88152147704335e-05,-0.00147914326810827,0.263847348657898,-0.386227119520978, -8.18351778930637e-05,-0.000866900471843124,0.277976435288336,-0.412229680391676, -8.48551410155274e-05,-0.00025465767557753,0.292105521918775,-0.438232241262375, -8.78751041384351e-05,0.00035758512068762,0.306234608549213,-0.464234802133073, -9.08950672607878e-05,0.000969827916953658,0.320363695179652,-0.490237363003771, -9.39150303838066e-05,0.00158207071321814,0.334492781810089,-0.51623992387447, -9.69349935058261e-05,0.0021943135094844,0.348621868440528,-0.542242484745168, -9.99549566289559e-05,0.00280655630574911,0.362750955070966,-0.568245045615867, -0.000102974919751309,0.0034187991020147,0.376880041701404,-0.594247606486565, -0.000105994882873661,0.00403104189828074,0.391009128331843,-0.620250167357264, -0.000109014845996902,0.004643284694545,0.405138214962281,-0.646252728227962, -0.000112034809119255,0.00525552749081104,0.419267301592719,-0.672255289098661, -0.000115054772241496,0.00586777028707708,0.433396388223158,-0.698257849969359, -0.000118074735364515,0.00648001308334178,0.447525474853596,-0.724260410840057, -4.2164673495132e-05,-0.00789477635516589,0.107401453686758,-0.101184488415708, -4.47814931092694e-05,-0.00730694190386327,0.121172972355841,-0.127431008362911, -4.73983127236843e-05,-0.0067191074525611,0.134944491024923,-0.153677528310114, -5.00151323377107e-05,-0.00613127300125815,0.148716009694006,-0.179924048257317, -5.26319519519869e-05,-0.00554343854995598,0.162487528363088,-0.206170568204519, -5.52487715662631e-05,-0.00495560409865359,0.176259047032171,-0.232417088151722, -5.78655911804837e-05,-0.00436776964735119,0.190030565701253,-0.258663608098925, -6.04824107948154e-05,-0.0037799351960488,0.203802084370336,-0.284910128046128, -6.30992304090361e-05,-0.00319210074474663,0.217573603039418,-0.31115664799333, -6.57160500232568e-05,-0.00260426629344401,0.231345121708501,-0.337403167940533, -6.83328696375884e-05,-0.00201643184214162,0.245116640377584,-0.363649687887736, -7.09496892515871e-05,-0.00142859739083878,0.258888159046666,-0.389896207834939, -7.35665088654747e-05,-0.000840762939536388,0.272659677715749,-0.416142727782142, -7.61833284801394e-05,-0.000252928488234216,0.286431196384831,-0.442389247729344, -7.88001480944711e-05,0.000334905963068177,0.300202715053914,-0.468635767676547, -8.14169677081367e-05,0.000922740414371459,0.313974233722997,-0.49488228762375, -8.40337873225794e-05,0.00151057486567385,0.327745752392079,-0.521128807570953, -8.66506069369111e-05,0.00209840931697602,0.341517271061162,-0.547375327518156, -8.92674265513538e-05,0.00268624376827731,0.355288789730243,-0.573621847465358, -9.18842461650193e-05,0.00327407821958081,0.369060308399326,-0.599868367412561, -9.4501065779018e-05,0.00386191267088387,0.382831827068409,-0.626114887359764, -9.71178853942378e-05,0.00444974712218471,0.396603345737491,-0.652361407306967, -9.97347050075703e-05,0.0050375815734891,0.410374864406575,-0.67860792725417, -0.000102351524621902,0.00562541602479083,0.424146383075657,-0.704854447201373, -0.000104968344236789,0.00621325047609211,0.437917901744739,-0.731100967148575, -3.81458826478609e-05,-0.00753687964632804,0.106192467225051,-0.102326156082606, -4.03234014009213e-05,-0.00698046723672974,0.119544693813782,-0.128855283150168, -4.25009201538151e-05,-0.00642405482713104,0.132896920402514,-0.155384410217729, -4.4678438906931e-05,-0.00586764241753279,0.146249146991246,-0.181913537285291, -4.68559576597416e-05,-0.00531123000793399,0.159601373579978,-0.208442664352852, -4.90334764128297e-05,-0.00475481759833585,0.17295360016871,-0.234971791420414, -5.12109951657513e-05,-0.00419840518873738,0.186305826757441,-0.261500918487976, -5.3388513918895e-05,-0.0036419927791389,0.199658053346173,-0.288030045555537, -5.55660326718166e-05,-0.00308558036954043,0.213010279934905,-0.314559172623098, -5.77435514247937e-05,-0.00252916795994218,0.226362506523636,-0.34108829969066, -5.99210701777153e-05,-0.00197275555034326,0.239714733112369,-0.367617426758221, -6.20985889311365e-05,-0.00141634314074546,0.2530669597011,-0.394146553825783, -6.42761076836695e-05,-0.000859930731146763,0.266419186289832,-0.420675680893344, -6.64536264366467e-05,-0.000303518321548291,0.279771412878564,-0.447204807960906, -6.86311451896238e-05,0.000252894088050626,0.293123639467296,-0.473733935028468, -7.08086639424899e-05,0.000809306497648876,0.306475866056027,-0.500263062096029, -7.29861826960221e-05,0.00136571890724668,0.319828092644759,-0.526792189163591, -7.51637014483331e-05,0.00192213131684582,0.333180319233491,-0.553321316231152, -7.73412202011992e-05,0.00247854372644496,0.346532545822223,-0.579850443298713, -7.95187389548424e-05,0.00303495613604232,0.359884772410954,-0.606379570366275, -8.16962577082636e-05,0.00359136854564035,0.373236998999686,-0.632908697433836, -8.38737764603525e-05,0.00414778095523971,0.386589225588418,-0.659437824501398, -8.60512952136627e-05,0.00470419336483818,0.39994145217715,-0.685966951568959, -8.82288139665288e-05,0.00526060577443621,0.413293678765881,-0.712496078636521, -9.04063327205051e-05,0.0058170181840338,0.426645905354613,-0.739025205704083, -3.36547882024141e-05,-0.00715643983893677,0.104832389040387,-0.103586357827746, -3.53845704886835e-05,-0.00663864511414669,0.117715461255131,-0.130427433807054, -3.71143527748141e-05,-0.00612085038935617,0.130598533469875,-0.157268509786362, -3.88441350612223e-05,-0.00560305566456609,0.143481605684618,-0.18410958576567, -4.05739173472974e-05,-0.00508526093977568,0.156364677899362,-0.210950661744977, -4.23036996333725e-05,-0.00456746621498516,0.169247750114106,-0.237791737724285, -4.40334819199473e-05,-0.00404967149019542,0.18213082232885,-0.264632813703593, -4.57632642059669e-05,-0.00353187676540467,0.195013894543594,-0.291473889682901, -4.74930464920975e-05,-0.00301408204061415,0.207896966758337,-0.318314965662209, -4.92228287781726e-05,-0.00249628731582363,0.220780038973081,-0.345156041641517, -5.09526110645253e-05,-0.00197849259103378,0.233663111187825,-0.371997117620825, -5.2682393350767e-05,-0.0014606978662437,0.246546183402568,-0.398838193600132, -5.44121756368421e-05,-0.000942903141452955,0.259429255617313,-0.42567926957944, -5.61419579230282e-05,-0.000425108416662878,0.272312327832056,-0.452520345558748, -5.78717402093254e-05,9.2686308127643e-05,0.2851954000468,-0.479361421538056, -5.96015224957336e-05,0.000610481032917498,0.298078472261543,-0.506202497517364, -6.13313047819197e-05,0.00112827575770802,0.310961544476287,-0.533043573496672, -6.30610870679948e-05,0.00164607048249854,0.323844616691031,-0.559884649475979, -6.4790869354181e-05,0.0021638652072884,0.336727688905775,-0.586725725455287, -6.65206516408112e-05,0.00268165993207869,0.349610761120519,-0.613566801434595, -6.82504339269974e-05,0.00319945465686899,0.362493833335263,-0.640407877413903, -6.99802162127394e-05,0.00371724938165974,0.375376905550006,-0.667248953393211, -7.17099984990366e-05,0.00423504410644959,0.38825997776475,-0.694090029372519, -7.34397807856668e-05,0.00475283883123989,0.401143049979494,-0.720931105351827, -7.5169563071853e-05,0.00527063355603019,0.414026122194237,-0.747772181331134, -2.88924011872804e-05,-0.00677473419631736,0.103380081712184,-0.104905388275511, -3.01988382318263e-05,-0.00630179432450795,0.115764984726713,-0.13207297555694, -3.15052752763723e-05,-0.00582885445269854,0.128149887741241,-0.159240562838369, -3.28117123206684e-05,-0.00535591458088891,0.14053479075577,-0.186408150119798, -3.41181493653253e-05,-0.00488297470907961,0.152919693770299,-0.213575737401227, -3.54245864099267e-05,-0.00441003483727009,0.165304596784827,-0.240743324682656, -3.67310234544171e-05,-0.00393709496546057,0.177689499799356,-0.267910911964085, -3.80374604989631e-05,-0.00346415509365161,0.190074402813884,-0.295078499245513, -3.93438975432314e-05,-0.00299121522184165,0.202459305828413,-0.322246086526942, -4.0650334588388e-05,-0.00251827535003324,0.214844208842941,-0.349413673808371, -4.19567716326008e-05,-0.00204533547822305,0.22722911185747,-0.3765812610898, -4.32632086773688e-05,-0.0015723956064142,0.239614014871999,-0.403748848371229, -4.45696457216371e-05,-0.00109945573460446,0.251998917886528,-0.430916435652658, -4.58760827662941e-05,-0.000626515862795385,0.264383820901056,-0.458084022934087, -4.718251981084e-05,-0.000153575990985644,0.276768723915585,-0.485251610215516, -4.84889568551639e-05,0.000319363880824097,0.289153626930114,-0.512419197496944, -4.97953938994877e-05,0.00079230375263406,0.301538529944643,-0.539586784778373, -5.11018309442557e-05,0.00126524362444269,0.313923432959171,-0.566754372059802, -5.24082679886906e-05,0.00173818349625243,0.3263083359737,-0.593921959341231, -5.37147050329034e-05,0.00221112336806195,0.338693238988228,-0.62108954662266, -5.50211420778934e-05,0.00268406323987103,0.351078142002757,-0.648257133904089, -5.63275791223283e-05,0.00315700311168055,0.363463045017285,-0.675424721185518, -5.76340161670963e-05,0.00362994298348962,0.375847948031814,-0.702592308466946, -5.89404532111981e-05,0.00410288285529958,0.388232851046343,-0.729759895748375, -6.02468902568543e-05,0.00457582272710733,0.400617754060871,-0.756927483029804, -2.41152995490712e-05,-0.00641349477086245,0.101913187729533,-0.106211365668085, -2.505222062818e-05,-0.0059894485064711,0.11379768301813,-0.133702233113146, -2.59891417071501e-05,-0.00556540224207958,0.125682178306728,-0.161193100558208, -2.69260627863144e-05,-0.00514135597768839,0.137566673595326,-0.188683968003269, -2.78629838653122e-05,-0.00471730971329676,0.149451168883923,-0.21617483544833, -2.87999049443655e-05,-0.00429326344890557,0.161335664172521,-0.243665702893392, -2.97368260233632e-05,-0.00386921718451394,0.173220159461118,-0.271156570338453, -3.06737471025276e-05,-0.00344517092012242,0.185104654749716,-0.298647437783514, -3.16106681816364e-05,-0.00302112465573146,0.196989150038313,-0.326138305228576, -3.25475892608562e-05,-0.00259707839134005,0.208873645326911,-0.353629172673637, -3.3484510339854e-05,-0.00217303212694886,0.220758140615508,-0.381120040118699, -3.44214314187963e-05,-0.00174898586255723,0.232642635904106,-0.40861090756376, -3.5358352497572e-05,-0.00132493959816515,0.244527131192704,-0.436101775008821, -3.62952735766253e-05,-0.000900893333774189,0.256411626481301,-0.463592642453883, -3.72321946559007e-05,-0.000476847069383002,0.268296121769899,-0.491083509898944, -3.8169115735065e-05,-5.28008049915929e-05,0.280180617058496,-0.518574377344005, -3.91060368140073e-05,0.00037124545940026,0.292065112347094,-0.546065244789067, -4.00429578930606e-05,0.000795291723791447,0.303949607635692,-0.573556112234128, -4.09798789721139e-05,0.00121933798818263,0.315834102924289,-0.601046979679189, -4.19168000509451e-05,0.00164338425257471,0.327718598212887,-0.628537847124251, -4.28537211297764e-05,0.0020674305169659,0.339603093501484,-0.656028714569312, -4.37906422097178e-05,0.00249147678135619,0.351487588790081,-0.683519582014373, -4.47275632883271e-05,0.00291552304574871,0.36337208407868,-0.711010449459434, -4.56644843674914e-05,0.0033395693101399,0.375256579367277,-0.738501316904496, -4.66014054466557e-05,0.00376361557453109,0.387141074655875,-0.765992184349557, -1.95831580042938e-05,-0.00609011418887767,0.100512430000829,-0.107435178400323, -2.02225283721935e-05,-0.00571594628149952,0.111921526641904,-0.135228987062119, -2.08618987400933e-05,-0.00534177837412131,0.123330623282978,-0.163022795723914, -2.1501269108215e-05,-0.00496761046674332,0.134739719924052,-0.19081660438571, -2.2140639475865e-05,-0.00459344255936489,0.146148816565127,-0.218610413047505, -2.27800098440145e-05,-0.00421927465198702,0.157557913206201,-0.246404221709301, -2.3419380211942e-05,-0.0038451067446087,0.168967009847276,-0.274198030371096, -2.4058750580036e-05,-0.00347093883723071,0.18037610648835,-0.301991839032892, -2.4698120947908e-05,-0.00309677092985261,0.191785203129424,-0.329785647694687, -2.533749131578e-05,-0.00272260302247407,0.203194299770499,-0.357579456356483, -2.59768616835965e-05,-0.00234843511509619,0.214603396411573,-0.385373265018278, -2.66162320516905e-05,-0.00197426720771854,0.226012493052647,-0.413167073680073, -2.72556024196735e-05,-0.00160009930033977,0.237421589693722,-0.440960882341869, -2.78949727875455e-05,-0.00122593139296145,0.248830686334796,-0.468754691003664, -2.85343431551954e-05,-0.000851763485583357,0.26023978297587,-0.49654849966546, -2.91737135230674e-05,-0.000477595578204815,0.271648879616945,-0.524342308327255, -2.98130838913835e-05,-0.000103427670827383,0.283057976258019,-0.552136116989051, -3.04524542588114e-05,0.000270740236551603,0.294467072899094,-0.579929925650846, -3.10918246271275e-05,0.000644908143929257,0.305876169540168,-0.607723734312642, -3.17311949951105e-05,0.00101907605130735,0.317285266181242,-0.635517542974437, -3.23705653630935e-05,0.00139324395868501,0.328694362822316,-0.663311351636233, -3.30099357310765e-05,0.00176741186606355,0.340103459463391,-0.691105160298028, -3.36493060989485e-05,0.0021415797734412,0.351512556104465,-0.718898968959823, -3.42886764667094e-05,0.00251574768081975,0.362921652745539,-0.746692777621619, -3.49280468350255e-05,0.0028899155881974,0.374330749386614,-0.774486586283414, -1.55049761480508e-05,-0.0058146927621745,0.0992446118064855,-0.108524254763767, -1.59224191787766e-05,-0.00548822537001237,0.110225382031673,-0.136587652154269, -1.63398622096689e-05,-0.00516175797785046,0.12120615225686,-0.16465104954477, -1.67573052405334e-05,-0.00483529058568855,0.132186922482047,-0.192714446935271, -1.717474827162e-05,-0.00450882319352675,0.143167692707234,-0.220777844325773, -1.7592191302318e-05,-0.0041823558013645,0.154148462932421,-0.248841241716274, -1.80096343331271e-05,-0.00385588840920259,0.165129233157608,-0.276904639106775, -1.84270773641582e-05,-0.00352942101704068,0.176110003382795,-0.304968036497277, -1.88445203948562e-05,-0.00320295362487877,0.187090773607982,-0.333031433887778, -1.92619634257762e-05,-0.00287648623271641,0.198071543833169,-0.361094831278279, -1.96794064567518e-05,-0.0025500188405545,0.209052314058356,-0.389158228668781, -2.00968494876164e-05,-0.00222355144839259,0.220033084283543,-0.417221626059282, -2.0514292518814e-05,-0.00189708405623112,0.23101385450873,-0.445285023449783, -2.0931735549512e-05,-0.00157061666406899,0.241994624733917,-0.473348420840284, -2.1349178579988e-05,-0.00124414927190641,0.252975394959105,-0.501411818230786, -2.17666216112411e-05,-0.000917681879745391,0.263956165184291,-0.529475215621287, -2.21840646423832e-05,-0.000591214487583702,0.274936935409478,-0.557538613011788, -2.26015076730812e-05,-0.000264747095420903,0.285917705634666,-0.58560201040229, -2.30189507038903e-05,6.1720296741008e-05,0.296898475859853,-0.613665407792791, -2.34363937343662e-05,0.000388187688903585,0.30787924608504,-0.641728805183292, -2.38538367656194e-05,0.000714655081065274,0.318860016310227,-0.669792202573794, -2.42712797965394e-05,0.00104112247322696,0.329840786535414,-0.697855599964295, -2.46887228279036e-05,0.00136758986538821,0.340821556760601,-0.725918997354796, -2.51061658587126e-05,0.00169405725755034,0.351802326985788,-0.753982394745298, -2.55236088895217e-05,0.00202052464971203,0.362783097210975,-0.782045792135799, -1.20061388099169e-05,-0.00558981272839293,0.0981514582102102,-0.109449762027059, -1.22690225870248e-05,-0.00530634073274416,0.108764333946017,-0.137742258436595, -1.25319063639107e-05,-0.00502286873709501,0.119377209681824,-0.166034754846131, -1.27947901409908e-05,-0.00473939674144608,0.129990085417631,-0.194327251255667, -1.30576739180155e-05,-0.00445592474579715,0.140602961153438,-0.222619747665203, -1.33205576947071e-05,-0.00417245275014788,0.151215836889245,-0.250912244074739, -1.35834414717872e-05,-0.00388898075449895,0.161828712625052,-0.279204740484274, -1.38463252486454e-05,-0.00360550875884957,0.17244158836086,-0.30749723689381, -1.41092090258366e-05,-0.00332203676320098,0.183054464096666,-0.335789733303346, -1.43720928026392e-05,-0.00303856476755171,0.193667339832474,-0.364082229712882, -1.46349765797193e-05,-0.00275509277190289,0.204280215568281,-0.392374726122418, -1.48978603571326e-05,-0.00247162077625451,0.214893091304087,-0.420667222531954, -1.51607441337687e-05,-0.0021881487806048,0.225505967039895,-0.44895971894149, -1.54236279108488e-05,-0.00190467678495598,0.236118842775702,-0.477252215351026, -1.5686511687929e-05,-0.00162120478930694,0.246731718511509,-0.505544711760562, -1.59493954646761e-05,-0.00133773279365745,0.257344594247316,-0.533837208170097, -1.62122792415342e-05,-0.00105426079800797,0.267957469983124,-0.562129704579633, -1.64751630186144e-05,-0.000770788802359146,0.278570345718931,-0.590422200989169, -1.67380467960276e-05,-0.000487316806710769,0.289183221454737,-0.618714697398705, -1.70009305727747e-05,-0.000203844811061504,0.299796097190545,-0.647007193808241, -1.72638143497439e-05,7.96271845868723e-05,0.310408972926351,-0.675299690217777, -1.75266981270461e-05,0.000363099180236137,0.321021848662159,-0.703592186627313, -1.77895819037932e-05,0.000646571175885402,0.331634724397966,-0.731884683036849, -1.80524656806513e-05,0.000930043171534667,0.342247600133773,-0.760177179446385, -1.83153494573984e-05,0.00121351516718393,0.35286047586958,-0.788469675855921, -9.12489553736573e-06,-0.0054123496580194,0.0972475554035802,-0.110205947423729, -9.28615369125141e-06,-0.00516568791187411,0.107557184001185,-0.138685629109336, -9.44741184549791e-06,-0.00491902616572915,0.117866812598789,-0.167165310794943, -9.60866999932808e-06,-0.00467236441958374,0.128176441196394,-0.195644992480551, -9.7699281534358e-06,-0.00442570267343856,0.138486069793999,-0.224124674166158, -9.93118630748802e-06,-0.00417904092729326,0.148795698391604,-0.252604355851765, -1.00924444614847e-05,-0.0039323791811483,0.159105326989208,-0.281084037537372, -1.02537026154259e-05,-0.0036857174350029,0.169414955586813,-0.30956371922298, -1.04149607694781e-05,-0.00343905568885772,0.179724584184417,-0.338043400908587, -1.05762189235303e-05,-0.00319239394271231,0.190034212782022,-0.366523082594194, -1.0737477077416e-05,-0.00294573219656713,0.200343841379627,-0.395002764279802, -1.08987352316903e-05,-0.00269907045042239,0.210653469977231,-0.423482445965409, -1.10599933854649e-05,-0.00245240870427654,0.220963098574836,-0.451962127651016, -1.12212515392951e-05,-0.00220574695813136,0.231272727172441,-0.480441809336623, -1.13825096936804e-05,-0.00195908521198662,0.241582355770045,-0.508921491022231, -1.15437678472885e-05,-0.00171242346584055,0.25189198436765,-0.537401172707838, -1.17050260016738e-05,-0.00146576171969559,0.262201612965255,-0.565880854393445, -1.1866284155726e-05,-0.00121909997355085,0.272511241562859,-0.594360536079053, -1.20275423095562e-05,-0.000972438227405448,0.282820870160464,-0.62284021776466, -1.21888004632753e-05,-0.000725776481259377,0.293130498758069,-0.651319899450267, -1.23500586176606e-05,-0.000479114735114639,0.303440127355674,-0.679799581135874, -1.25113167716018e-05,-0.000232452988969456,0.313749755953278,-0.708279262821482, -1.2672574925876e-05,1.42087571752825e-05,0.324059384550883,-0.736758944507089, -1.28338330798172e-05,0.000260870503320465,0.334369013148487,-0.765238626192696, -1.29950912333143e-05,0.000507532249466092,0.344678641746092,-0.793718307878304, -6.83115584967919e-06,-0.00527595995553259,0.0965256040382916,-0.110804190206857, -6.92852758998885e-06,-0.00505949294417618,0.106593629701304,-0.139431960232983, -7.02589933029851e-06,-0.0048430259328196,0.116661655364317,-0.168059730259109, -7.12327107088573e-06,-0.00462655892146346,0.126729681027329,-0.196687500285235, -7.22064281111212e-06,-0.00441009191010688,0.136797706690342,-0.225315270311362, -7.31801455144954e-06,-0.00419362489875008,0.146865732353354,-0.253943040337488, -7.41538629184246e-06,-0.00397715788739395,0.156933758016367,-0.282570810363614, -7.51275803234641e-06,-0.0037606908760377,0.167001783679379,-0.311198580389741, -7.61012977251729e-06,-0.00354422386468078,0.177069809342392,-0.339826350415867, -7.70750151302124e-06,-0.00332775685332454,0.187137835005404,-0.368454120441993, -7.80487325330315e-06,-0.00311128984196807,0.197205860668417,-0.397081890468119, -7.90224499347403e-06,-0.00289482283061138,0.207273886331429,-0.425709660494246, -7.99961673392247e-06,-0.00267835581925491,0.217341911994442,-0.454337430520372, -8.09698847425988e-06,-0.00246188880789866,0.227409937657454,-0.482965200546498, -8.19436021448627e-06,-0.00224542179654175,0.237477963320467,-0.511592970572624, -8.29173195504573e-06,-0.00202895478518572,0.247545988983479,-0.54022074059875, -8.38910369549417e-06,-0.00181248777382947,0.257614014646492,-0.568848510624877, -8.48647543549852e-06,-0.00159602076247278,0.267682040309504,-0.597476280651003, -8.58384717605798e-06,-0.00137955375111654,0.277750065972517,-0.62610405067713, -8.68121891695051e-06,-0.00116308673976029,0.28781809163553,-0.654731820703256, -8.77859065673281e-06,-0.000946619728403153,0.297886117298542,-0.683359590729382, -8.87596239718125e-06,-0.00073015271704735,0.307954142961554,-0.711987360755509, -8.9733341371856e-06,-0.00051368570568977,0.318022168624567,-0.740615130781635, -9.07070587707892e-06,-0.000297218694333079,0.32809019428758,-0.769242900807761, -9.16807761852656e-06,-8.0751682978164e-05,0.338158219950592,-0.797870670833887, -5.05375034340338e-06,-0.0051732050509341,0.0959647446968884,-0.11126552299452, -5.11222258181565e-06,-0.00498067081721709,0.105845437000755,-0.140007490816054, -5.17069482022792e-06,-0.00478813658350008,0.115726129304622,-0.168749458637588, -5.22916705875121e-06,-0.00459560234978307,0.125606821608488,-0.197491426459123, -5.28763929735776e-06,-0.00440306811606639,0.135487513912355,-0.226233394280657, -5.34611153563125e-06,-0.00421053388234915,0.145368206216221,-0.254975362102192, -5.40458377390474e-06,-0.0040179996486317,0.155248898520088,-0.283717329923726, -5.46305601234476e-06,-0.0038254654149148,0.165129590823955,-0.31245929774526, -5.5215282513954e-06,-0.00363293118119867,0.175010283127821,-0.341201265566795, -5.58000048955787e-06,-0.00344039694748122,0.184890975431688,-0.369943233388329, -5.63847272777585e-06,-0.00324786271376376,0.194771667735555,-0.398685201209863, -5.69694496660444e-06,-0.00305532848004719,0.204652360039421,-0.427427169031398, -5.75541720493344e-06,-0.00286279424633018,0.214533052343288,-0.456169136852932, -5.81388944331795e-06,-0.00267026001261317,0.224413744647155,-0.484911104674467, -5.87236168192451e-06,-0.00247772577889616,0.234294436951021,-0.513653072496001, -5.93083392042004e-06,-0.00228519154517914,0.244175129254888,-0.542395040317535, -5.98930615891557e-06,-0.00209265731146235,0.254055821558755,-0.57113700813907, -6.04777839718906e-06,-0.00190012307774512,0.263936513862621,-0.599878975960604, -6.10625063512948e-06,-0.00170758884402744,0.273817206166488,-0.628620943782139, -6.16472287373604e-06,-0.00151505461031043,0.283697898470355,-0.657362911603673, -6.22319511245362e-06,-0.0013225203765943,0.293578590774221,-0.686104879425207, -6.28166735094915e-06,-0.00112998614287729,0.303459283078088,-0.714846847246742, -6.34013958988877e-06,-0.000937451909160725,0.313339975381954,-0.743588815068276, -6.3986118283843e-06,-0.000744917675443713,0.323220667685821,-0.77233078288981, -6.45708406588064e-06,-0.000552383441724924,0.333101359989688,-0.801072750711345, -3.70501094104636e-06,-0.00509692020875624,0.0955383278748698,-0.11161430732803, -3.7402543903442e-06,-0.00492285513785695,0.105276798533111,-0.140442612828188, -3.77549783975306e-06,-0.00474879006695772,0.115015269191353,-0.169270918328346, -3.81074128913417e-06,-0.0045747249960586,0.124753739849594,-0.198099223828504, -3.8459847386263e-06,-0.00440065992515948,0.134492210507836,-0.226927529328662, -3.88122818795189e-06,-0.00422659485426036,0.144230681166077,-0.25575583482882, -3.91647163738851e-06,-0.00405252978336113,0.153969151824318,-0.284584140328978, -3.95171508704717e-06,-0.00387846471246234,0.16370762248256,-0.313412445829136, -3.98695853615072e-06,-0.00370439964156266,0.173446093140801,-0.342240751329294, -4.02220198564285e-06,-0.00353033457066365,0.183184563799043,-0.371069056829453, -4.05744543519049e-06,-0.00335626949976464,0.192923034457284,-0.399897362329611, -4.09268888440506e-06,-0.00318220442886541,0.202661505115525,-0.428725667829769, -4.12793233373066e-06,-0.00300813935796618,0.212399975773767,-0.457553973329927, -4.16317578322278e-06,-0.00283407428706717,0.222138446432008,-0.486382278830085, -4.19841923238184e-06,-0.00266000921616749,0.23187691709025,-0.515210584330243, -4.23366268209602e-06,-0.00248594414526915,0.241615387748491,-0.544038889830401, -4.26890613147712e-06,-0.00231187907436925,0.251353858406733,-0.572867195330559, -4.30414958030312e-06,-0.00213781400346957,0.261092329064974,-0.601695500830717, -4.33939303035036e-06,-0.00196374893257145,0.270830799723215,-0.630523806330875, -4.37463647950942e-06,-0.00178968386167178,0.280569270381457,-0.659352111831033, -4.40987992955666e-06,-0.00161561879077343,0.290307741039698,-0.688180417331191, -4.44512337882674e-06,-0.0014415537198742,0.300046211697939,-0.717008722831349, -4.48036682809683e-06,-0.00126748864897497,0.309784682356181,-0.745837028331507, -4.51561027725589e-06,-0.00109342357807574,0.319523153014422,-0.774665333831665, -4.55085372697006e-06,-0.000919358507176504,0.329261623672664,-0.803493639331823, -2.69772602098928e-06,-0.00504088952996201,0.0952194047193457,-0.11187407580856, -2.71920955394189e-06,-0.00488079001395125,0.104851620627799,-0.140766684103981, -2.74069308667246e-06,-0.00472069049794011,0.114483836536253,-0.169659292399401, -2.76217661970835e-06,-0.00456059098192918,0.124116052444707,-0.198551900694822, -2.78366015249443e-06,-0.00440049146591825,0.133748268353161,-0.227444508990243, -2.80514368550255e-06,-0.00424039194990744,0.143380484261615,-0.256337117285663, -2.82662721828864e-06,-0.00408029243389629,0.153012700170069,-0.285229725581084, -2.84811075090818e-06,-0.00392019291788492,0.162644916078522,-0.314122333876505, -2.86959428402733e-06,-0.00376009340187444,0.172277131986976,-0.343014942171925, -2.8910778172575e-06,-0.00359999388586396,0.18190934789543,-0.371907550467346, -2.91256134976603e-06,-0.00343989436985281,0.191541563803883,-0.400800158762767, -2.93404488260762e-06,-0.00327979485384167,0.201173779712337,-0.429692767058187, -2.95552841544922e-06,-0.00311969533783074,0.210805995620791,-0.458585375353608, -2.97701194795774e-06,-0.00295959582181915,0.220438211529245,-0.487477983649028, -2.99849548135445e-06,-0.00279949630580867,0.230070427437699,-0.516370591944449, -3.01997901475115e-06,-0.00263939678979885,0.239702643346152,-0.54526320023987, -3.04146254703763e-06,-0.00247929727378682,0.249334859254606,-0.57415580853529, -3.06294608021229e-06,-0.00231919775777634,0.25896707516306,-0.603048416830711, -3.08442961283184e-06,-0.00215909824176519,0.268599291071514,-0.631941025126132, -3.10591314622854e-06,-0.00199899872575493,0.278231506979967,-0.660833633421552, -3.12739667862605e-06,-0.00183889920974245,0.287863722888422,-0.689726241716973, -3.14888021157866e-06,-0.00167879969373175,0.297495938796876,-0.718618850012394, -3.17036374397617e-06,-0.0015187001777206,0.307128154705329,-0.747511458307814, -3.19184727737287e-06,-0.00135860066171034,0.316760370613783,-0.776404066603235, -3.21333080999242e-06,-0.00119850114569919,0.326392586522236,-0.805296674898655, -1.95435807170963e-06,-0.00500005209382431,0.0949837906642617,-0.112065393789132, -1.96767481369653e-06,-0.00485035286914359,0.104537570109605,-0.141005360720634, -1.98099155565568e-06,-0.00470065364446282,0.114091349554949,-0.169945327652136, -1.99430829761482e-06,-0.00455095441978193,0.123645129000292,-0.198885294583638, -2.00762503965723e-06,-0.00440125519510115,0.133198908445636,-0.227825261515139, -2.02094178164414e-06,-0.00425155597042037,0.14275268789098,-0.256765228446641, -2.03425852379757e-06,-0.00410185674573993,0.152306467336323,-0.285705195378143, -2.04757526545141e-06,-0.00395215752105882,0.161860246781667,-0.314645162309645, -2.06089200749382e-06,-0.00380245829637804,0.171414026227011,-0.343585129241147, -2.07420874948072e-06,-0.00365275907169726,0.180967805672354,-0.372525096172648, -2.08752549157865e-06,-0.00350305984701693,0.190521585117697,-0.40146506310415, -2.10084223362106e-06,-0.00335336062233571,0.200075364563041,-0.430405030035652, -2.11415897566347e-06,-0.00320366139765516,0.209629144008385,-0.459344996967154, -2.1274757172618e-06,-0.00305396217297416,0.219182923453728,-0.488284963898656, -2.14079245919319e-06,-0.00290426294829316,0.228736702899072,-0.517224930830157, -2.15410920179071e-06,-0.00275456372361349,0.238290482344415,-0.546164897761659, -2.16742594305597e-06,-0.00260486449893138,0.247844261789759,-0.575104864693161, -2.1807426852094e-06,-0.00245516527425083,0.257398041235103,-0.604044831624663, -2.19405942758488e-06,-0.00230546604957071,0.266951820680446,-0.632984798556165, -2.20737616873912e-06,-0.00215576682488861,0.27650560012579,-0.661924765487666, -2.22069291133664e-06,-0.00200606760020872,0.286059379571133,-0.690864732419168, -2.23400965326803e-06,-0.00185636837552838,0.295613159016477,-0.71980469935067, -2.24732639497738e-06,-0.00170666915084627,0.305166938461821,-0.748744666282172, -2.26064313746388e-06,-0.00155696992616683,0.314720717907164,-0.777684633213674, -2.27395987917323e-06,-0.00140727070148605,0.324274497352508,-0.806624600145176, -1.41056460697953e-06,-0.00497045281280539,0.0948112979073366,-0.112205140109363, -1.41898454053546e-06,-0.00482841191805494,0.104307687476285,-0.141179699686594, -1.42740447453549e-06,-0.00468637102330483,0.113804077045234,-0.170154259263824, -1.43582440809142e-06,-0.00454433012855426,0.123300466614182,-0.199128818841055, -1.44424434178614e-06,-0.00440228923380392,0.132796856183131,-0.228103378418286, -1.45266427548085e-06,-0.00426024833905336,0.14229324575208,-0.257077937995516, -1.46108420917557e-06,-0.00411820744430313,0.151789635321028,-0.286052497572747, -1.46950414287028e-06,-0.00397616654955235,0.161286024889977,-0.315027057149978, -1.47792407700909e-06,-0.00383412565480268,0.170782414458926,-0.344001616727208, -1.48634401081482e-06,-0.00369208476005234,0.180278804027874,-0.372976176304439, -1.49476394395442e-06,-0.00355004386530133,0.189775193596823,-0.40195073588167, -1.50318387792669e-06,-0.00340800297055122,0.199271583165772,-0.4309252954589, -1.51160381134385e-06,-0.00326596207580043,0.20876797273472,-0.459899855036131, -1.52002374542715e-06,-0.00312392118105076,0.218264362303669,-0.488874414613362, -1.52844367906635e-06,-0.0029818802863002,0.227760751872617,-0.517848974190592, -1.53686361281657e-06,-0.00283983939154964,0.237257141441566,-0.546823533767823, -1.54528354645578e-06,-0.00269779849679908,0.246753531010515,-0.575798093345054, -1.55370347998396e-06,-0.00255575760204829,0.256249920579464,-0.604772652922284, -1.56212341373418e-06,-0.00241371670729817,0.265746310148412,-0.633747212499515, -1.57054334770645e-06,-0.00227167581254806,0.275242699717361,-0.662721772076746, -1.57896328145668e-06,-0.0021296349177975,0.28473908928631,-0.691696331653976, -1.58738321520691e-06,-0.00198759402304738,0.294235478855258,-0.720670891231207, -1.59580314862406e-06,-0.00184555312829637,0.303731868424207,-0.749645450808438, -1.60422308270736e-06,-0.0017035122335467,0.313228257993155,-0.778620010385669, -1.61264301612452e-06,-0.00156147133879569,0.322724647562104,-0.807594569962899, -1.01531944154964e-06,-0.00494908414239981,0.0946858537565381,-0.112306602157747, -1.02075476535179e-06,-0.00481263610113947,0.104140524546712,-0.141306277535443, -1.02619008929272e-06,-0.00467618805987946,0.113595195336887,-0.170305952913139, -1.03162541342794e-06,-0.00453974001861945,0.123049866127061,-0.199305628290835, -1.03706073723009e-06,-0.00440329197735922,0.132504536917236,-0.228305303668531, -1.04249606130979e-06,-0.00426684393609933,0.14195920770741,-0.257304979046227, -1.04793138483439e-06,-0.00413039589483866,0.151413878497584,-0.286304654423923, -1.05336670891409e-06,-0.00399394785357865,0.160868549287759,-0.315304329801619, -1.05880203271624e-06,-0.0038574998123182,0.170323220077933,-0.344304005179315, -1.06423735674044e-06,-0.00372105177105819,0.179777890868107,-0.373303680557011, -1.06967268070912e-06,-0.00358460372979841,0.189232561658282,-0.402303355934707, -1.07510800434474e-06,-0.00344815568853796,0.198687232448456,-0.431303031312403, -1.08054332814689e-06,-0.00331170764727751,0.20814190323863,-0.460302706690099, -1.08597865233762e-06,-0.00317525960601772,0.217596574028805,-0.489302382067795, -1.09141397608425e-06,-0.00303881156475749,0.227051244818979,-0.518302057445491, -1.09684930049703e-06,-0.00290236352349793,0.236505915609153,-0.547301732823187, -1.10228462413264e-06,-0.00276591548223704,0.245960586399328,-0.576301408200883, -1.1077199479903e-06,-0.00262946744097725,0.255415257189502,-0.605301083578579, -1.11315527184797e-06,-0.00249301939971724,0.264869927979676,-0.634300758956275, -1.1185905955946e-06,-0.00235657135845635,0.274324598769851,-0.663300434333971, -1.12402591978533e-06,-0.00222012331719679,0.283779269560025,-0.692300109711667, -1.12946124342095e-06,-0.00208367527593634,0.2932339403502,-0.721299785089364, -1.13489656750065e-06,-0.00194722723467633,0.302688611140374,-0.750299460467059, -1.14033189158036e-06,-0.00181077919341588,0.312143281930549,-0.779299135844755, -1.14576721554904e-06,-0.00167433115215676,0.321597952720722,-0.808298811222452, -6.29745544075688e-05,-0.00993262689014757,0.121579107247871,-0.105719242678498, -6.77301365100968e-05,-0.00925954296093956,0.136860984208181,-0.130248224071424, -7.24857186124306e-05,-0.00858645903173139,0.15214286116849,-0.154777205464349, -7.72413007151806e-05,-0.00791337510252366,0.1674247381288,-0.179306186857274, -8.19968828174034e-05,-0.00724029117331548,0.18270661508911,-0.2038351682502, -8.67524649198481e-05,-0.00656720724410742,0.197988492049419,-0.228364149643125, -9.15080470225149e-05,-0.00589412331489947,0.213270369009729,-0.25289313103605, -9.62636291250152e-05,-0.00522103938569174,0.228552245970039,-0.277422112428976, -0.000101019211227404,-0.00454795545648334,0.243834122930349,-0.301951093821901, -0.000105774793329905,-0.00387487152727539,0.259115999890658,-0.326480075214826, -0.000110530375432516,-0.00320178759806744,0.274397876850968,-0.351009056607751, -0.00011528595753485,-0.00252870366885904,0.289679753811278,-0.375538038000677, -0.000120041539637072,-0.00185561973965109,0.304961630771587,-0.400067019393602, -0.000124797121740072,-0.00118253581044359,0.320243507731897,-0.424596000786527, -0.000129552703841962,-0.000509451881234746,0.335525384692207,-0.449124982179453, -0.000134308285944407,0.000163632047972984,0.350807261652516,-0.473653963572378, -0.000139063868047185,0.000836715977180935,0.366089138612826,-0.498182944965303, -0.000143819450149629,0.00150979990638889,0.381371015573136,-0.522711926358228, -0.000148575032251963,0.0021828838355975,0.396652892533446,-0.547240907751154, -0.00015333061435463,0.00285596776480501,0.411934769493755,-0.571769889144079, -0.000158086196456964,0.00352905169401296,0.427216646454065,-0.596298870537004, -0.000162841778559852,0.00420213562322047,0.442498523414374,-0.62082785192993, -0.000167597360662075,0.00487521955242931,0.457780400374685,-0.645356833322855, -0.000172352942764409,0.00554830348163726,0.473062277334994,-0.66988581471578, -0.000177108524866965,0.00622138741084477,0.488344154295304,-0.694414796108706, -6.25212171991851e-05,-0.00988116932849398,0.121441629470806,-0.105860539473836, -6.72150409196381e-05,-0.00920973978907358,0.136679928207829,-0.130420880930384, -7.1908864640341e-05,-0.00853831024965357,0.151918226944851,-0.154981222386931, -7.6602688361016e-05,-0.00786688071023356,0.167156525681874,-0.179541563843478, -8.12965120814968e-05,-0.00719545117081322,0.182394824418896,-0.204101905300026, -8.59903358020331e-05,-0.00652402163139298,0.197633123155919,-0.228662246756573, -9.06841595224583e-05,-0.00585259209197264,0.212871421892942,-0.25322258821312, -9.53779832431056e-05,-0.00518116255255241,0.228109720629964,-0.277782929669668, -0.000100071806963364,-0.00450973301313162,0.243348019366987,-0.302343271126215, -0.000104765630684178,-0.00383830347371217,0.258586318104009,-0.326903612582762, -0.000109459454404603,-0.00316687393429138,0.273824616841032,-0.351463954039309, -0.000114153278125251,-0.00249544439487148,0.289062915578055,-0.376024295495857, -0.000118847101845843,-0.00182401485545158,0.304301214315077,-0.400584636952404, -0.000123540925566545,-0.00115258531603146,0.319539513052099,-0.425144978408951, -0.000128234749287026,-0.000481155776610898,0.334777811789122,-0.449705319865499, -0.000132928573007951,0.000190273762809001,0.350016110526145,-0.474265661322046, -0.000137622396728099,0.000861703302229566,0.365254409263168,-0.498826002778593, -0.000142316220448691,0.00153313284164946,0.38049270800019,-0.523386344235141, -0.00014701004416906,0.00220456238107047,0.395731006737213,-0.547946685691688, -0.00015170386788943,0.00287599192049059,0.410969305474235,-0.572507027148235, -0.000156397691610133,0.00354742145991072,0.426207604211258,-0.597067368604782, -0.000161091515330503,0.00421885099933128,0.441445902948281,-0.62162771006133, -0.000165785339051427,0.00489028053875096,0.456684201685303,-0.646188051517877, -0.000170479162772241,0.00556171007817108,0.471922500422326,-0.670748392974424, -0.000175172986492944,0.00623313961759075,0.487160799159348,-0.695308734430971, -6.18977128422071e-05,-0.00981079287236147,0.121252355724612,-0.106054555342661, -6.65071626657632e-05,-0.009141702933808,0.136430705448179,-0.13065795757759, -7.11166124893192e-05,-0.00847261299525459,0.151609055171746,-0.155261359812518, -7.57260623130973e-05,-0.00780352305670173,0.166787404895312,-0.179864762047447, -8.03355121364868e-05,-0.0071344331181481,0.181965754618879,-0.204468164282375, -8.49449619601539e-05,-0.00646534317959502,0.197144104342446,-0.229071566517304, -8.95544117838765e-05,-0.00579625324104172,0.212322454066012,-0.253674968752232, -9.41638616073215e-05,-0.00512716330248808,0.227500803789579,-0.278278370987161, -9.87733114308775e-05,-0.00445807336393478,0.242679153513146,-0.302881773222089, -0.000103382761254323,-0.00378898342538125,0.257857503236713,-0.327485175457018, -0.000107992211077879,-0.00311989348682795,0.27303585296028,-0.352088577691946, -0.000112601660901435,-0.00245080354827487,0.288214202683846,-0.376691979926875, -0.000117211110725379,-0.00178171360972179,0.303392552407413,-0.401295382161804, -0.000121820560548769,-0.00111262367116849,0.31857090213098,-0.425898784396732, -0.000126430010372269,-0.000443533732614743,0.333749251854547,-0.450502186631661, -0.000131039460196103,0.000225556205937671,0.348927601578113,-0.475105588866589, -0.000135648910019603,0.000894646144491418,0.36410595130168,-0.499708991101518, -0.000140258359843437,0.00156373608304428,0.379284301025247,-0.524312393336446, -0.000144867809666827,0.00223282602159802,0.394462650748814,-0.548915795571375, -0.000149477259490216,0.00290191596015132,0.40964100047238,-0.573519197806303, -0.00015408670931405,0.00357100589870463,0.424819350195947,-0.598122600041232, -0.000158696159137661,0.00424009583725793,0.439997699919514,-0.62272600227616, -0.000163305608961384,0.00490918577581079,0.45517604964308,-0.647329404511088, -0.000167915058784551,0.00557827571436498,0.470354399366647,-0.671932806746017, -0.00017252450860894,0.00624736565291695,0.485532749090214,-0.696536208980946, -6.10457847530221e-05,-0.00971537180219301,0.120993383697517,-0.106319056823321, -6.55410138808432e-05,-0.00904959816023088,0.136089797416879,-0.130981163739001, -7.00362430086365e-05,-0.00838382451826869,0.151186211136242,-0.155643270654681, -7.45314721367629e-05,-0.00771805087630673,0.166282624855604,-0.180305377570362, -7.9026701264362e-05,-0.00705227723434443,0.181379038574967,-0.204967484486042, -8.3521930392183e-05,-0.00638650359238202,0.196475452294329,-0.229629591401722, -8.80171595203927e-05,-0.00572072995042039,0.211571866013692,-0.254291698317403, -9.25123886481583e-05,-0.00505495630845831,0.226668279733054,-0.278953805233083, -9.70076177758683e-05,-0.00438918266649591,0.241764693452417,-0.303615912148763, -0.000101502846903911,-0.00372340902453394,0.256861107171779,-0.328278019064444, -0.000105998076032121,-0.0030576353825722,0.271957520891141,-0.352940125980124, -0.000110493305159665,-0.00239186174060957,0.287053934610504,-0.377602232895804, -0.000114988534287708,-0.00172608809864805,0.302150348329866,-0.402264339811485, -0.000119483763415751,-0.00106031445668608,0.317246762049229,-0.426926446727165, -0.000123978992543461,-0.000394540814723676,0.332343175768591,-0.451588553642845, -0.000128474221671282,0.000271232827238288,0.347439589487953,-0.476250660558526, -0.000132969450799325,0.000937006469200252,0.362536003207316,-0.500912767474206, -0.000137464679927479,0.00160278011116244,0.377632416926678,-0.525574874389886, -0.000141959909054634,0.00226855375312529,0.392728830646041,-0.550236981305567, -0.000146455138183121,0.00293432739508637,0.407825244365403,-0.574899088221247, -0.00015095036731072,0.003600101037049,0.422921658084766,-0.599561195136928, -0.000155445596438319,0.00426587467901118,0.438018071804128,-0.624223302052608, -0.000159940825566474,0.00493164832097337,0.453114485523491,-0.648885408968288, -0.000164436054694406,0.00559742196293511,0.468210899242853,-0.673547515883969, -0.000168931283822338,0.00626319560489685,0.483307312962215,-0.698209622799649, -5.98921521896556e-05,-0.00958750637341704,0.12064204552938,-0.10667614793544, -6.42346775772129e-05,-0.00892644199013992,0.135627461276786,-0.13141750930249, -6.85772029647147e-05,-0.00826537760686286,0.150612877024192,-0.156158870669541, -7.291972835205e-05,-0.00760431322358557,0.165598292771598,-0.180900232036592, -7.72622537394962e-05,-0.00694324884030839,0.180583708519004,-0.205641593403642, -8.16047791267205e-05,-0.00628218445703088,0.195569124266409,-0.230382954770693, -8.59473045145553e-05,-0.00562112007375415,0.210554540013815,-0.255124316137744, -9.02898299017241e-05,-0.00496005569047653,0.225539955761221,-0.279865677504794, -9.46323552894479e-05,-0.0042989913071998,0.240525371508627,-0.304607038871845, -9.89748806765056e-05,-0.00363792692392195,0.255510787256033,-0.329348400238896, -0.000103317406064285,-0.002976862540645,0.270496203003439,-0.354089761605946, -0.000107659931451454,-0.0023157981573676,0.285481618750845,-0.378831122972997, -0.000112002456839178,-0.00165473377409064,0.300467034498251,-0.403572484340048, -0.000116344982226346,-0.000993669390813468,0.315452450245656,-0.428313845707098, -0.000120687507614403,-0.000332605007536735,0.330437865993062,-0.453055207074149, -0.000125030033001017,0.000328459375741552,0.345423281740468,-0.4777965684412, -0.000129372558388852,0.000989523759018063,0.360408697487874,-0.502537929808251, -0.000133715083776242,0.00165058814229546,0.37539411323528,-0.527279291175301, -0.000138057609163633,0.00231165252557264,0.390379528982685,-0.552020652542352, -0.000142400134551246,0.00297271690884982,0.405364944730091,-0.576762013909403, -0.000146742659938637,0.00363378129212766,0.420350360477498,-0.601503375276453, -0.000151085185326139,0.00429484567540417,0.435335776224903,-0.626244736643504, -0.000155427710713751,0.00495591005868112,0.450321191972309,-0.650986098010554, -0.000159770236100587,0.00561697444195897,0.465306607719715,-0.675727459377605, -0.000164112761488311,0.00627803882523637,0.480292023467121,-0.700468820744656, -5.8348834089228e-05,-0.00941885030773526,0.120170863833363,-0.107151938233032, -6.24906356596067e-05,-0.00876447526894952,0.135007706822138,-0.131998898697129, -6.66324372299021e-05,-0.0081101002301639,0.149844549810914,-0.156845859161226, -7.0774238800253e-05,-0.00745572519137827,0.164681392799689,-0.181692819625323, -7.49160403704097e-05,-0.00680135015259253,0.179518235788465,-0.20653978008942, -7.90578419407328e-05,-0.00614697511380669,0.194355078777241,-0.231386740553517, -8.31996435113336e-05,-0.00549260007502139,0.209191921766016,-0.256233701017614, -8.73414450815457e-05,-0.00483822503623554,0.224028764754792,-0.281080661481711, -9.14832466518689e-05,-0.00418384999745003,0.238865607743567,-0.305927621945808, -9.5625048221859e-05,-0.00352947495866363,0.253702450732343,-0.330774582409905, -9.97668497922377e-05,-0.00287509991987811,0.268539293721119,-0.355621542874002, -0.000103908651362561,-0.0022207248810926,0.283376136709894,-0.380468503338099, -0.000108050452932607,-0.00156634984230664,0.29821297969867,-0.405315463802196, -0.000112192254502985,-0.000911974803520899,0.313049822687446,-0.430162424266293, -0.000116334056073586,-0.000257599764735605,0.327886665676221,-0.45500938473039, -0.000120475857643632,0.000396775274050354,0.342723508664997,-0.479856345194487, -0.000124617659214232,0.00105115031283565,0.357560351653772,-0.504703305658584, -0.0001287594607845,0.00170552535162138,0.372397194642548,-0.529550266122681, -0.000132901262354546,0.00235990039040757,0.387234037631324,-0.554397226586777, -0.000137043063925257,0.00301427542919264,0.402070880620099,-0.579244187050875, -0.000141184865494748,0.00366865046797926,0.416907723608875,-0.604091147514971, -0.000145326667065682,0.00432302550676456,0.43174456659765,-0.628938107979068, -0.000149468468635949,0.00497740054555029,0.446581409586426,-0.653785068443165, -0.000153610270206439,0.00563177558433559,0.461418252575202,-0.678632028907262, -0.000157752071776374,0.00628615062312221,0.476255095563977,-0.703478989371359, -5.63174605223149e-05,-0.00920099165407712,0.119548666053613,-0.10777489048742, -6.02013293527492e-05,-0.00855609208950081,0.134189810952349,-0.132760111853219, -6.40851981831558e-05,-0.00791119252492445,0.148830955851085,-0.157745333219018, -6.79690670135624e-05,-0.00726629296034842,0.163472100749821,-0.182730554584817, -7.18529358439413e-05,-0.00662139339577195,0.178113245648558,-0.207715775950616, -7.57368046744866e-05,-0.00597649383119592,0.192754390547294,-0.232700997316415, -7.96206735047544e-05,-0.00533159426661944,0.20739553544603,-0.257686218682214, -8.35045423352998e-05,-0.00468669470204341,0.222036680344766,-0.282671440048013, -8.73884111656231e-05,-0.00404179513746716,0.236677825243503,-0.307656661413812, -9.12722799961685e-05,-0.00339689557289113,0.251318970142239,-0.332641882779611, -9.51561488269359e-05,-0.00275199600831511,0.265960115040975,-0.35762710414541, -9.90400176567041e-05,-0.00210709644373797,0.280601259939712,-0.382612325511209, -0.000102923886487694,-0.00146219687916305,0.295242404838447,-0.407597546877008, -0.000106807755317906,-0.00081729731458613,0.309883549737184,-0.432582768242807, -0.000110691624148562,-0.0001723977500101,0.32452469463592,-0.457567989608606, -0.000114575492978775,0.000472501814566373,0.339165839534656,-0.482553210974405, -0.00011845936180932,0.0011174013791424,0.353806984433392,-0.507538432340204, -0.000122343230639532,0.00176230094371865,0.368448129332128,-0.532523653706003, -0.000126227099469967,0.0024072005082949,0.383089274230864,-0.557508875071802, -0.000130110968300734,0.00305210007287071,0.397730419129601,-0.582494096437601, -0.000133994837131057,0.00369699963744763,0.412371564028337,-0.6074793178034, -0.000137878705961714,0.00434189920202321,0.427012708927073,-0.6324645391692, -0.000141762574792148,0.00498679876659924,0.441653853825809,-0.657449760534998, -0.000145646443622138,0.0056316983311766,0.456294998724546,-0.682434981900797, -0.000149530312452351,0.00627659789575219,0.470936143623282,-0.707420203266596, -5.37001857960906e-05,-0.00892710193971546,0.118743687487011,-0.108572101661111, -5.72623515026072e-05,-0.00829551638681869,0.133132453292541,-0.133734259758329, -6.08245172088462e-05,-0.00766393083392147,0.14752121909807,-0.158896417855547, -6.43866829152517e-05,-0.00703234528102437,0.1619099849036,-0.184058575952765, -6.79488486214352e-05,-0.00640075972812737,0.176298750709129,-0.209220734049983, -7.15110143278408e-05,-0.00576917417523037,0.190687516514659,-0.234382892147201, -7.50731800343574e-05,-0.0051375886223336,0.205076282320188,-0.259545050244419, -7.86353457406519e-05,-0.0045060030694366,0.219465048125718,-0.284707208341637, -8.21975114469464e-05,-0.0038744175165395,0.233853813931247,-0.309869366438855, -8.5759677153241e-05,-0.00324283196364239,0.248242579736777,-0.335031524536073, -8.9321842859702e-05,-0.0026112464107455,0.262631345542306,-0.360193682633291, -9.28840085657745e-05,-0.00197966085784795,0.277020111347836,-0.38535584073051, -9.64461742721801e-05,-0.00134807530495129,0.291408877153366,-0.410517998827728, -0.000100008339978697,-0.000716489752054184,0.305797642958895,-0.435680156924946, -0.000103570505685102,-8.49041991572985e-05,0.320186408764425,-0.460842315022164, -0.000107132671391619,0.000546681353739142,0.334575174569954,-0.486004473119382, -0.000110694837098024,0.00117826690663647,0.348963940375484,-0.5111666312166, -0.000114257002804541,0.00180985245953291,0.363352706181013,-0.536328789313818, -0.000117819168510502,0.00244143801243069,0.377741471986543,-0.561490947411036, -0.000121381334216908,0.00307302356532757,0.392130237792072,-0.586653105508254, -0.000124943499923313,0.00370460911822468,0.406519003597602,-0.611815263605472, -0.000128505665629497,0.00433619467112178,0.420907769403132,-0.63697742170269, -0.00013206783133568,0.00496778022401889,0.435296535208661,-0.662139579799908, -0.000135629997041975,0.005599365776916,0.44968530101419,-0.687301737897126, -0.000139192162749269,0.00623095132981177,0.46407406681972,-0.712463895994345, -5.04194275811609e-05,-0.00859436858308127,0.117729450459499,-0.109563016714011, -5.35954980609432e-05,-0.00798119474293357,0.131801481508245,-0.134945103076613, -5.6771568540559e-05,-0.00736802090278554,0.14587351255699,-0.160327189439214, -5.99476390202303e-05,-0.00675484706263751,0.159945543605736,-0.185709275801816, -6.31237094999015e-05,-0.0061416732224896,0.174017574654482,-0.211091362164417, -6.62997799796838e-05,-0.0055284993823419,0.188089605703227,-0.236473448527019, -6.94758504594106e-05,-0.00491532554219376,0.202161636751973,-0.26185553488962, -7.26519209392484e-05,-0.00430215170204606,0.216233667800718,-0.287237621252222, -7.58279914190307e-05,-0.00368897786189848,0.230305698849464,-0.312619707614823, -7.90040618981469e-05,-0.00307580402174956,0.24437772989821,-0.338001793977425, -8.21801323784843e-05,-0.00246263018160287,0.258449760946955,-0.363383880340026, -8.5356202857878e-05,-0.00184945634145417,0.272521791995701,-0.388765966702628, -8.85322733373828e-05,-0.00123628250130636,0.286593823044446,-0.41414805306523, -9.17083438173316e-05,-0.000623108661158556,0.300665854093192,-0.439530139427831, -9.48844142971694e-05,-9.93482101030452e-06,0.314737885141938,-0.464912225790433, -9.80604847767852e-05,0.000603239019137281,0.328809916190683,-0.490294312153034, -0.000101236555256401,0.00121641285928531,0.342881947239428,-0.515676398515636, -0.000104412625736128,0.00182958669943356,0.356953978288174,-0.541058484878237, -0.000107588696215632,0.00244276053958115,0.371026009336919,-0.566440571240839, -0.000110764766695914,0.00305593437972851,0.385098040385665,-0.591822657603441, -0.000113940837175419,0.00366910821987654,0.39917007143441,-0.617204743966042, -0.000117116907655146,0.00428228206002457,0.413242102483156,-0.642586830328644, -0.000120292978134873,0.00489545590017215,0.427314133531901,-0.667968916691245, -0.000123469048614377,0.00550862974032063,0.441386164580647,-0.693351003053847, -0.000126645119093882,0.00612180358046865,0.455458195629393,-0.718733089416449, -4.64460278921386e-05,-0.00820674271006061,0.116493502208095,-0.11075103683136, -4.91805722405425e-05,-0.00761837050000824,0.130181364503788,-0.136396797868077, -5.19151165888632e-05,-0.00702999828995587,0.143869226799482,-0.162042558904794, -5.46496609374336e-05,-0.00644162607990362,0.157557089095175,-0.18768831994151, -5.73842052857265e-05,-0.00585325386985114,0.171244951390868,-0.213334080978227, -6.01187496341304e-05,-0.00526488165979855,0.184932813686562,-0.238979842014944, -6.28532939825344e-05,-0.00467650944974629,0.198620675982255,-0.264625603051661, -6.55878383311048e-05,-0.00408813723969415,0.212308538277948,-0.290271364088377, -6.83223826792312e-05,-0.00349976502964156,0.225996400573641,-0.315917125125094, -7.10569270276351e-05,-0.00291139281958896,0.239684262869335,-0.341562886161811, -7.37914713760945e-05,-0.00232302060953637,0.253372125165028,-0.367208647198527, -7.65260157243874e-05,-0.00173464839948423,0.267059987460721,-0.392854408235244, -7.92605600729024e-05,-0.00114627618943186,0.280747849756415,-0.418500169271961, -8.19951044211953e-05,-0.000557903979379715,0.294435712052108,-0.444145930308678, -8.47296487699323e-05,3.04682306722093e-05,0.308123574347801,-0.469791691345394, -8.74641931178921e-05,0.000618840440725466,0.321811436643495,-0.495437452382111, -9.0198737466296e-05,0.00120721265077783,0.335499298939188,-0.521083213418828, -9.2933281814811e-05,0.0017955848608302,0.349187161234881,-0.546728974455544, -9.56678261633259e-05,0.00238395707088235,0.362875023530574,-0.572374735492261, -9.84023705118409e-05,0.00297232928093427,0.376562885826267,-0.598020496528978, -0.000101136914860578,0.00356070149098686,0.390250748121961,-0.623666257565694, -0.00010387145920876,0.00414907370103945,0.403938610417654,-0.649312018602411, -0.000106606003557275,0.00473744591109115,0.417626472713347,-0.674957779639128, -0.000109340547905235,0.00532581812114419,0.43131433500904,-0.700603540675844, -0.000112075092253416,0.00591419033119722,0.445002197304734,-0.726249301712561, -4.18297581402938e-05,-0.00777687143813749,0.115047391134535,-0.11211525475144, -4.40881495395451e-05,-0.00722065799464855,0.128288147089261,-0.138063796616735, -4.63465409387964e-05,-0.00666444455115955,0.141528903043987,-0.16401233848203, -4.86049323382143e-05,-0.00610823110767067,0.154769658998713,-0.189960880347325, -5.08633237373823e-05,-0.00555201766418167,0.168010414953439,-0.21590942221262, -5.31217151366059e-05,-0.00499580422069246,0.181251170908165,-0.241857964077916, -5.53801065355519e-05,-0.00443959077720324,0.194491926862891,-0.267806505943211, -5.76384979351641e-05,-0.0038833773337148,0.207732682817617,-0.293755047808506, -5.98968893344987e-05,-0.00332716389022569,0.220973438772344,-0.319703589673801, -6.21552807334447e-05,-0.00277095044673636,0.23421419472707,-0.345652131539097, -6.44136721326682e-05,-0.00221473700324726,0.247454950681796,-0.371600673404392, -6.66720635322804e-05,-0.0016585235597586,0.260695706636522,-0.397549215269687, -6.89304549309488e-05,-0.00110231011626927,0.273936462591248,-0.423497757134982, -7.11888463303945e-05,-0.000546096672780827,0.287177218545974,-0.449446299000277, -7.34472377298401e-05,1.01167707082794e-05,0.3004179745007,-0.475394840865573, -7.57056291289526e-05,0.000566330214197608,0.313658730455426,-0.501343382730868, -7.79640205280652e-05,0.00112254365768694,0.326899486410152,-0.527291924596163, -8.02224119273998e-05,0.00167875710117538,0.340140242364878,-0.553240466461458, -8.24808033266233e-05,0.00223497054466448,0.353380998319604,-0.579189008326753, -8.4739194726291e-05,0.00279118398815292,0.36662175427433,-0.605137550192049, -8.69975861250705e-05,0.00334739743164292,0.379862510229057,-0.631086092057344, -8.92559775244051e-05,0.00390361087513158,0.393103266183783,-0.657034633922639, -9.15143689239617e-05,0.0044598243186198,0.406344022138508,-0.682983175787934, -9.37727603226302e-05,0.00501603776210979,0.419584778093235,-0.708931717653229, -9.60311517219647e-05,0.0055722512055989,0.432825534047961,-0.734880259518525, -3.67191166250336e-05,-0.0073257366447137,0.113433942679541,-0.113606353119257, -3.84979696033683e-05,-0.00680918514886164,0.126178719976784,-0.139885836245955, -4.02768225816474e-05,-0.00629263365300958,0.138923497274027,-0.166165319372653, -4.20556755598711e-05,-0.00577608215715764,0.15166827457127,-0.192444802499352, -4.38345285381225e-05,-0.00525953066130547,0.164413051868513,-0.21872428562605, -4.5613381516374e-05,-0.00474297916545308,0.177157829165756,-0.245003768752748, -4.73922344947364e-05,-0.00422642766960135,0.189902606462999,-0.271283251879447, -4.91710874727658e-05,-0.00370987617374885,0.202647383760242,-0.297562735006145, -5.09499404511837e-05,-0.00319332467789701,0.215392161057485,-0.323842218132843, -5.27287934293796e-05,-0.00267677318204451,0.228136938354728,-0.350121701259542, -5.45076464076866e-05,-0.00216022168619268,0.24088171565197,-0.37640118438624, -5.62864993864931e-05,-0.00164367019034106,0.253626492949213,-0.402680667512938, -5.80653523644115e-05,-0.00112711869448856,0.266371270246456,-0.428960150639636, -5.98442053427739e-05,-0.000610567198636502,0.279116047543699,-0.455239633766335, -6.16230583205812e-05,-9.40157027837785e-05,0.291860824840942,-0.481519116893033, -6.34019112990547e-05,0.000422535793068279,0.304605602138186,-0.507798600019731, -6.51807642774171e-05,0.000939087288919893,0.317350379435428,-0.53407808314643, -6.69596172556686e-05,0.0014556387847724,0.330095156732671,-0.560357566273128, -6.8738470234031e-05,0.00197219028062401,0.342839934029914,-0.586637049399826, -7.05173232119494e-05,0.00248874177647673,0.355584711327157,-0.612916532526524, -7.22961761907559e-05,0.00300529327232768,0.368329488624399,-0.639196015653223, -7.40750291690073e-05,0.00352184476817996,0.381074265921642,-0.665475498779921, -7.58538821471477e-05,0.00403839626403224,0.393819043218885,-0.691754981906619, -7.76327351259543e-05,0.00455494775988408,0.406563820516128,-0.718034465033317, -7.94115881033175e-05,0.00507149925573724,0.419308597813372,-0.744313948160016, -3.13549085854958e-05,-0.0068791841975252,0.111726695670886,-0.115150719626607, -3.26862352426349e-05,-0.0064086962548392,0.123949750500439,-0.141772966591723, -3.40175619001626e-05,-0.00593820831215364,0.136172805329992,-0.168395213556839, -3.53488885571629e-05,-0.00546772036946741,0.148395860159545,-0.195017460521955, -3.66802152145795e-05,-0.00499723242678152,0.160618914989097,-0.22163970748707, -3.80115418720517e-05,-0.00452674448409573,0.17284196981865,-0.248261954452186, -3.93428685289687e-05,-0.00405625654140951,0.185065024648203,-0.274884201417302, -4.06741951866074e-05,-0.00358576859872439,0.197288079477756,-0.301506448382418, -4.200552184358e-05,-0.00311528065603772,0.209511134307309,-0.328128695347534, -4.33368485008301e-05,-0.00264479271335216,0.221734189136861,-0.35475094231265, -4.46681751583022e-05,-0.00217430477066638,0.233957243966414,-0.381373189277765, -4.59995018154968e-05,-0.00170381682798015,0.246180298795967,-0.407995436242881, -4.733082847308e-05,-0.00123332888529482,0.25840335362552,-0.434617683207997, -4.86621551304411e-05,-0.000762840942609033,0.270626408455073,-0.461239930173113, -4.99934817871361e-05,-0.000292352999922585,0.282849463284626,-0.487862177138229, -5.13248084446083e-05,0.000178134942763419,0.295072518114179,-0.514484424103345, -5.26561351020804e-05,0.000648622885449202,0.307295572943732,-0.541106671068461, -5.39874617587754e-05,0.00111911082813543,0.319518627773284,-0.567728918033576, -5.53187884164696e-05,0.00158959877082121,0.331741682602837,-0.594351164998692, -5.66501150739418e-05,0.00206008671350677,0.34396473743239,-0.620973411963808, -5.79814417306368e-05,0.002530574656193,0.356187792261943,-0.647595658928924, -5.93127683879979e-05,0.00300106259887878,0.368410847091495,-0.67421790589404, -6.06440950461362e-05,0.00347155054156367,0.380633901921048,-0.700840152859155, -6.19754217027202e-05,0.00394203848425034,0.392856956750601,-0.727462399824271, -6.33067483596372e-05,0.00441252642693746,0.405080011580155,-0.754084646789387, -2.60307091927425e-05,-0.00646224896747605,0.110018582726155,-0.116663596750258, -2.69766889140211e-05,-0.00604182010861598,0.121722634733857,-0.143621618654476, -2.7922668635133e-05,-0.00562139124975558,0.13342668674156,-0.170579640558694, -2.88686483561618e-05,-0.00520096239089529,0.145130738749262,-0.197537662462911, -2.98146280773848e-05,-0.00478053353203534,0.156834790756964,-0.224495684367129, -3.07606077985523e-05,-0.00436010467317494,0.168538842764666,-0.251453706271347, -3.17065875199973e-05,-0.00393967581431509,0.180242894772368,-0.278411728175565, -3.26525672407763e-05,-0.00351924695545458,0.191946946780071,-0.305369750079783, -3.35985469621103e-05,-0.00309881809659429,0.203650998787773,-0.332327771984, -3.45445266833888e-05,-0.00267838923773422,0.215355050795475,-0.359285793888218, -3.54905064045008e-05,-0.00225796037887416,0.227059102803177,-0.386243815792436, -3.64364861255018e-05,-0.00183753152001342,0.23876315481088,-0.413201837696654, -3.73824658466138e-05,-0.00141710266115314,0.250467206818582,-0.440159859600872, -3.83284455679478e-05,-0.000996673802293291,0.262171258826284,-0.46711788150509, -3.92744252892818e-05,-0.000576244943433446,0.273875310833986,-0.494075903409308, -4.02204050102828e-05,-0.000155816084572935,0.285579362841688,-0.521033925313525, -4.11663847311727e-05,0.000264612774287576,0.297283414849391,-0.547991947217743, -4.21123644527288e-05,0.000685041633147865,0.308987466857093,-0.574949969121961, -4.30583441738408e-05,0.00110547049200793,0.320691518864795,-0.601907991026179, -4.40043238946197e-05,0.00152589935086844,0.332395570872497,-0.628866012930397, -4.49503036163978e-05,0.00194632820972718,0.344099622880199,-0.655824034834615, -4.58962833372878e-05,0.00236675706858813,0.355803674887901,-0.682782056738832, -4.68422630587328e-05,0.0027871859274482,0.367507726895604,-0.70974007864305, -4.77882427791787e-05,0.00320761478630915,0.379211778903306,-0.736698100547268, -4.87342225002907e-05,0.00362804364516967,0.390915830911009,-0.763656122451486, -2.10314592080929e-05,-0.00609374080828951,0.108402638682531,-0.118066882661525, -2.16712753431936e-05,-0.00572412522208843,0.119618278202666,-0.145336356324801, -2.23110914782942e-05,-0.00535450963588713,0.1308339177228,-0.172605829988076, -2.29509076133394e-05,-0.00498489404968572,0.142049557242935,-0.199875303651351, -2.35907237484678e-05,-0.00461527846348464,0.15326519676307,-0.227144777314626, -2.42305398835407e-05,-0.00424566287728301,0.164480836283205,-0.254414250977901, -2.48703560185581e-05,-0.00387604729108204,0.175696475803339,-0.281683724641176, -2.55101721538531e-05,-0.00350643170488096,0.186912115323474,-0.308953198304451, -2.6149988288815e-05,-0.00313681611867933,0.198127754843609,-0.336222671967726, -2.67898044238324e-05,-0.00276720053247792,0.209343394363743,-0.363492145631001, -2.74296205591273e-05,-0.00239758494627673,0.220559033883878,-0.390761619294276, -2.80694366939782e-05,-0.00202796936007554,0.231774673404012,-0.418031092957551, -2.87092528290511e-05,-0.00165835377387391,0.242990312924148,-0.445300566620827, -2.93490689644571e-05,-0.00128873818767317,0.254205952444282,-0.472570040284102, -2.9988885099419e-05,-0.000919122601471978,0.265421591964417,-0.499839513947377, -3.06287012343809e-05,-0.000549507015270567,0.276637231484551,-0.527108987610652, -3.12685173700089e-05,-0.000179891429070045,0.287852871004686,-0.554378461273927, -3.19083335046377e-05,0.000189724157132032,0.299068510524821,-0.581647934937202, -3.25481496394886e-05,0.000559339743333886,0.310284150044956,-0.608917408600477, -3.31879657751166e-05,0.000928955329534631,0.32149978956509,-0.636186882263752, -3.38277819096344e-05,0.00129857091573626,0.332715429085225,-0.663456355927027, -3.44675980448184e-05,0.00166818650193745,0.34393106860536,-0.690725829590302, -3.51074141802243e-05,0.00203780208813775,0.355146708125494,-0.717995303253577, -3.57472303149642e-05,0.00240741767434072,0.36636234764563,-0.745264776916852, -3.63870464499261e-05,0.00277703326054146,0.377577987165764,-0.772534250580128, -1.65758040944763e-05,-0.00578344312304624,0.106952708469109,-0.119304118994317, -1.6990122348931e-05,-0.0054621357738901,0.117732136048038,-0.146848190605967, -1.74044406033302e-05,-0.00514082842473396,0.128511563626968,-0.174392262217617, -1.78187588577017e-05,-0.00481952107557782,0.139290991205897,-0.201936333829267, -1.82330771119621e-05,-0.00449821372642145,0.150070418784826,-0.229480405440917, -1.86473953663335e-05,-0.00417690637726531,0.160849846363755,-0.257024477052567, -1.90617136206495e-05,-0.00385559902810917,0.171629273942684,-0.284568548664217, -1.94760318754095e-05,-0.00353429167895336,0.182408701521614,-0.312112620275867, -1.98903501293923e-05,-0.00321298432979655,0.193188129100543,-0.339656691887517, -2.03046683838748e-05,-0.00289167698064086,0.203967556679472,-0.367200763499167, -2.07189866382462e-05,-0.00257036963148471,0.214746984258401,-0.394744835110817, -2.11333048927287e-05,-0.00224906228232857,0.225526411837331,-0.422288906722467, -2.15476231468781e-05,-0.00192775493317199,0.23630583941626,-0.449832978334117, -2.19619414013605e-05,-0.00160644758401629,0.247085266995189,-0.477377049945767, -2.2376259655732e-05,-0.00128514023485971,0.257864694574119,-0.504921121557417, -2.27905779105475e-05,-0.000963832885704674,0.268644122153047,-0.532465193169067, -2.32048961646969e-05,-0.000642525536548089,0.279423549731976,-0.560009264780717, -2.36192144187353e-05,-0.000321218187390837,0.290202977310906,-0.587553336392367, -2.40335326733288e-05,8.91617646381349e-08,0.300982404889835,-0.615097408004017, -2.44478509274781e-05,0.000321396510921002,0.311761832468765,-0.642641479615667, -2.48621691818496e-05,0.000642703860077365,0.322541260047694,-0.670185551227317, -2.52764874364431e-05,0.00096401120923284,0.333320687626623,-0.697729622838967, -2.56908056909255e-05,0.00128531855838965,0.344100115205553,-0.725273694450617, -2.6105123945297e-05,0.00160662590754557,0.354879542784482,-0.752817766062266, -2.65194421992243e-05,0.00192793325670149,0.36565897036341,-0.780361837673917, -1.27851988466487e-05,-0.0055325338806973,0.105712093385572,-0.120347092032078, -1.30442277671561e-05,-0.00525450996101073,0.116119728993648,-0.148122645898807, -1.33032566877189e-05,-0.00497648604132428,0.126527364601724,-0.175898199765535, -1.35622856080042e-05,-0.00469846212163749,0.1369350002098,-0.203673753632264, -1.38213145283728e-05,-0.00442043820195093,0.147342635817875,-0.231449307498992, -1.40803434488523e-05,-0.00414241428226414,0.157750271425951,-0.259224861365721, -1.43393723691654e-05,-0.00386439036257746,0.168157907034027,-0.287000415232449, -1.45984012895339e-05,-0.00358636644289079,0.178565542642103,-0.314775969099177, -1.48574302101245e-05,-0.00330834252320455,0.188973178250179,-0.342551522965906, -1.51164591307151e-05,-0.0030303186035181,0.199380813858255,-0.370327076832634, -1.53754880508616e-05,-0.00275229468383098,0.209788449466331,-0.398102630699363, -1.56345169712857e-05,-0.00247427076414453,0.220196085074407,-0.425878184566091, -1.58935458915987e-05,-0.00219624684445741,0.230603720682483,-0.45365373843282, -1.61525748119118e-05,-0.00191822292477051,0.24101135629056,-0.481429292299548, -1.64116037325579e-05,-0.00164019900508472,0.251418991898635,-0.509204846166277, -1.66706326526489e-05,-0.00136217508539738,0.261826627506711,-0.536980400033005, -1.6929661573073e-05,-0.00108415116571092,0.272234263114787,-0.564755953899733, -1.71886904938301e-05,-0.000806127246024246,0.282641898722863,-0.592531507766462, -1.74477194138101e-05,-0.000528103326337348,0.293049534330939,-0.62030706163319, -1.77067483342341e-05,-0.000250079406650894,0.303457169939015,-0.648082615499919, -1.79657772552133e-05,2.79445130351164e-05,0.313864805547091,-0.675858169366647, -1.82248061755264e-05,0.000305968432722015,0.324272441155167,-0.703633723233375, -1.84838350959504e-05,0.000583992352408469,0.334680076763243,-0.731409277100104, -1.87428640165965e-05,0.000862016272094479,0.345087712371318,-0.759184830966833, -1.90018929370206e-05,0.00114004019178093,0.355495347979394,-0.786960384833561, -9.68577017024241e-06,-0.0053360922584294,0.104692886225837,-0.121193558443921, -9.84367642783979e-06,-0.00509492241656495,0.114796041205658,-0.149156980977209, -1.00015826854094e-05,-0.00485375257470044,0.12489919618548,-0.177120403510496, -1.01594889428958e-05,-0.00461258273283627,0.135002351165301,-0.205083826043784, -1.03173952006874e-05,-0.00437141289097198,0.145105506145123,-0.233047248577072, -1.04753014579795e-05,-0.00413024304910736,0.155208661124944,-0.261010671110359, -1.06332077154936e-05,-0.00388907320724252,0.165311816104766,-0.288974093643647, -1.07911139729522e-05,-0.00364790336537824,0.175414971084587,-0.316937516176935, -1.09490202308549e-05,-0.00340673352351439,0.185518126064408,-0.344900938710223, -1.11069264882024e-05,-0.00316556368164944,0.19562128104423,-0.37286436124351, -1.12648327459386e-05,-0.00292439383978538,0.205724436024051,-0.400827783776798, -1.14227390032307e-05,-0.00268322399792087,0.215827591003873,-0.428791206310086, -1.15806452609668e-05,-0.00244205415605614,0.225930745983695,-0.456754628843373, -1.17385515185919e-05,-0.0022008843141923,0.236033900963516,-0.484718051376661, -1.18964577762171e-05,-0.00195971447232801,0.246137055943337,-0.512681473909949, -1.20543640338422e-05,-0.0017185446304635,0.256240210923159,-0.540644896443237, -1.22122702916894e-05,-0.00147737478859966,0.26634336590298,-0.568608318976524, -1.23701765487594e-05,-0.00123620494673449,0.276446520882802,-0.596571741509812, -1.25280828060514e-05,-0.000995035104869757,0.286549675862623,-0.6245351640431, -1.26859890642317e-05,-0.000753865263006137,0.296652830842444,-0.652498586576387, -1.28438953214127e-05,-0.000512695421141185,0.306755985822266,-0.680462009109675, -1.30018015789268e-05,-0.000271525579276233,0.316859140802088,-0.708425431642963, -1.3159707836996e-05,-3.0355737413057e-05,0.326962295781909,-0.736388854176251, -1.33176140946212e-05,0.000210814104451451,0.33706545076173,-0.764352276709538, -1.34755203520243e-05,0.000451983946315959,0.347168605741552,-0.792315699242826, -7.2325036896137e-06,-0.00518605697630781,0.103883116689497,-0.121859629957562, -7.32735110889338e-06,-0.00497497609359365,0.113744955782084,-0.149970883480184, -7.42219852797876e-06,-0.00476389521087928,0.12360679487467,-0.178082137002806, -7.51704594720293e-06,-0.00455281432816523,0.133468633967257,-0.206193390525428, -7.61189336639934e-06,-0.00434173344545075,0.143330473059844,-0.23430464404805, -7.70674078554023e-06,-0.00413065256273648,0.153192312152431,-0.262415897570672, -7.8015882050142e-06,-0.00391957168002266,0.163054151245017,-0.290527151093294, -7.89643562409958e-06,-0.00370849079730817,0.172915990337604,-0.318638404615916, -7.99128304357355e-06,-0.00349740991459435,0.18277782943019,-0.346749658138538, -8.08613046243689e-06,-0.00328632903187964,0.192639668522777,-0.37486091166116, -8.18097788191086e-06,-0.00307524814916582,0.202501507615364,-0.402972165183782, -8.27582530082971e-06,-0.00286416726645156,0.21236334670795,-0.431083418706404, -8.37067272030367e-06,-0.00265308638373751,0.222225185800537,-0.459194672229025, -8.46552013933355e-06,-0.00244200550102325,0.232087024893123,-0.487305925751648, -8.5603675582524e-06,-0.00223092461830832,0.241948863985711,-0.515417179274269, -8.65521497794841e-06,-0.00201984373559494,0.251810703078297,-0.543528432796891, -8.75006239686726e-06,-0.00180876285288023,0.261672542170884,-0.571639686319513, -8.84490981600816e-06,-0.00159768197016574,0.271534381263471,-0.599750939842135, -8.93975723492701e-06,-0.00138660108745103,0.281396220356057,-0.627862193364757, -9.03460465440098e-06,-0.00117552020473699,0.291258059448644,-0.655973446887379, -9.1294520736529e-06,-0.000964439322022947,0.301119898541231,-0.684084700410001, -9.22429949312686e-06,-0.000753358439308904,0.310981737633817,-0.712195953932623, -9.31914691215674e-06,-0.000542277556595305,0.320843576726404,-0.740307207455245, -9.41399433107559e-06,-0.000331196673879486,0.330705415818991,-0.768418460977867, -9.50884175066058e-06,-0.000120115791166331,0.340567254911577,-0.796529714500489, -5.34007546679205e-06,-0.00507356282331128,0.103256638053844,-0.122371115145682, -5.39678075442418e-06,-0.00488623968474178,0.112932136346901,-0.150595890054283, -5.45348604188978e-06,-0.00469891654617194,0.122607634639959,-0.178820664962884, -5.51019132954966e-06,-0.00451159340760265,0.132283132933017,-0.207045439871485, -5.56689661695975e-06,-0.0043242702690327,0.141958631226075,-0.235270214780086, -5.62360190464739e-06,-0.00413694713046309,0.151634129519133,-0.263494989688686, -5.68030719250157e-06,-0.00394962399189414,0.16130962781219,-0.291719764597287, -5.73701247985614e-06,-0.00376230085332385,0.170985126105248,-0.319944539505888, -5.79371776743276e-06,-0.00357497771475446,0.180660624398306,-0.348169314414489, -5.85042305523142e-06,-0.00338765457618506,0.190336122691364,-0.37639408932309, -5.90712834280804e-06,-0.00320033143761544,0.200011620984422,-0.404618864231691, -5.96383363049569e-06,-0.00301300829904583,0.209687119277479,-0.432843639140292, -6.02053891785026e-06,-0.00282568516047577,0.219362617570537,-0.461068414048892, -6.07724420587097e-06,-0.00263836202190704,0.229038115863595,-0.489293188957493, -6.13394949333657e-06,-0.0024510388833372,0.238713614156653,-0.517517963866094, -6.19065478102421e-06,-0.00226371574476758,0.248389112449711,-0.545742738774695, -6.24736006860083e-06,-0.00207639260619819,0.258064610742768,-0.573967513683296, -6.3040653559554e-06,-0.00188906946762835,0.267740109035826,-0.602192288591897, -6.36077064286589e-06,-0.0017017463290574,0.277415607328884,-0.630417063500498, -6.41747593155273e-06,-0.00151442319048956,0.287091105621942,-0.658641838409098, -6.47418121857424e-06,-0.00132710005191905,0.296766603915,-0.686866613317699, -6.53088650603983e-06,-0.00113977691334988,0.306442102208057,-0.7150913882263, -6.58759179406054e-06,-0.00095245377478026,0.316117600501115,-0.743316163134901, -6.64429708141512e-06,-0.000765130636210642,0.325793098794173,-0.771540938043502, -6.70100236921378e-06,-0.000577807497641025,0.335468597087231,-0.799765712952103, -3.90904127570146e-06,-0.00499034883416188,0.102781846791002,-0.12275657864062, -3.94309277224059e-06,-0.00482130462420516,0.112316323756452,-0.151066905098329, -3.97714426855766e-06,-0.00465226041424815,0.121850800721901,-0.179377231556038, -4.01119576504128e-06,-0.0044832162042916,0.13138527768735,-0.207687558013747, -4.04524726149713e-06,-0.00431417199433459,0.140919754652799,-0.235997884471456, -4.07929875795299e-06,-0.00414512778437792,0.150454231618248,-0.264308210929165, -4.11335025451987e-06,-0.00397608357442136,0.159988708583697,-0.292618537386874, -4.14740175075368e-06,-0.00380703936446403,0.169523185549146,-0.320928863844583, -4.1814532475426e-06,-0.0036379951545078,0.179057662514595,-0.349239190302292, -4.21550474383192e-06,-0.00346895094455069,0.188592139480044,-0.377549516760001, -4.24955624012124e-06,-0.00329990673459335,0.198126616445493,-0.40585984321771, -4.28360773652159e-06,-0.0031308625246369,0.207661093410942,-0.434170169675419, -4.31765923269989e-06,-0.00296181831467934,0.217195570376391,-0.462480496133128, -4.35171072910023e-06,-0.00279277410472245,0.226730047341841,-0.490790822590837, -4.38576222550058e-06,-0.002623729894766,0.236264524307289,-0.519101149048546, -4.41981372201194e-06,-0.00245468568480933,0.245799001272738,-0.547411475506255, -4.45386521885638e-06,-0.00228564147485288,0.255333478238187,-0.575721801963964, -4.48791671492366e-06,-0.00211659726489577,0.264867955203636,-0.604032128421673, -4.521968211324e-06,-0.00194755305493866,0.274402432169085,-0.632342454879382, -4.55601970794639e-06,-0.00177850884498199,0.283936909134535,-0.660652781337091, -4.59007120434674e-06,-0.00160946463502487,0.293471386099984,-0.6889631077948, -4.62412270096912e-06,-0.00144042042506864,0.303005863065433,-0.717273434252509, -4.65817419748049e-06,-0.00127137621511197,0.312540340030881,-0.745583760710219, -4.69222569388084e-06,-0.00110233200515442,0.322074816996331,-0.773894087167927, -4.72627718983709e-06,-0.000933287795197302,0.33160929396178,-0.802204413625637, -2.84309424389284e-06,-0.00492939236769374,0.10242759579158,-0.12304297548658, -2.86378587022185e-06,-0.00477413800038395,0.111856965424429,-0.151416866183584, -2.88447749688392e-06,-0.00461888363307472,0.121286335057277,-0.179790756880588, -2.90516912349048e-06,-0.00446362926576527,0.130715704690126,-0.208164647577591, -2.92586074984724e-06,-0.00430837489845559,0.140145074322974,-0.236538538274595, -2.94655237625951e-06,-0.00415312053114569,0.149574443955823,-0.264912428971599, -2.96724400289383e-06,-0.00399786616383646,0.159003813588672,-0.293286319668603, -2.9879356293061e-06,-0.00384261179652712,0.16843318322152,-0.321660210365607, -3.00862725571838e-06,-0.00368735742921711,0.177862552854369,-0.35003410106261, -3.02931888240821e-06,-0.00353210306190799,0.187291922487217,-0.378407991759614, -3.0500105089315e-06,-0.00337684869459842,0.196721292120066,-0.406781882456618, -3.07070213556582e-06,-0.00322159432728908,0.206150661752915,-0.435155773153622, -3.09139376175604e-06,-0.00306633995997907,0.215580031385763,-0.463529663850625, -3.11208538839036e-06,-0.0029110855926695,0.225009401018612,-0.491903554547629, -3.13277701480263e-06,-0.00275583122536016,0.234438770651461,-0.520277445244633, -3.15346864099286e-06,-0.00260057685805037,0.243868140284309,-0.548651335941637, -3.17416026784922e-06,-0.00244532249074125,0.253297509917158,-0.577025226638641, -3.1948518942615e-06,-0.00229006812343147,0.262726879550006,-0.605399117335645, -3.21554352022968e-06,-0.00213481375612101,0.272156249182856,-0.633773008032648, -3.23623514719706e-06,-0.00197955938881211,0.281585618815704,-0.662146898729652, -3.2569267739424e-06,-0.00182430502150321,0.291014988448552,-0.690520789426656, -3.27761840013263e-06,-0.00166905065419254,0.300444358081402,-0.71889468012366, -3.29831002621184e-06,-0.00151379628688275,0.30987372771425,-0.747268570820663, -3.31900165273513e-06,-0.00135854191957341,0.319303097347098,-0.775642461517667, -3.33969327903638e-06,-0.00120328755226318,0.328732466979948,-0.804016352214671, -2.05796516150603e-06,-0.00488505214499968,0.102166349102288,-0.123253529805505, -2.07075676403323e-06,-0.00474004941776607,0.111518266397154,-0.151674151900921, -2.08354836644942e-06,-0.00459504669053246,0.120870183692019,-0.180094773996338, -2.09633996905989e-06,-0.00445004396329896,0.130222100986884,-0.208515396091754, -2.10913157144832e-06,-0.00430504123606523,0.13957401828175,-0.23693601818717, -2.12192317400328e-06,-0.00416003850883184,0.148925935576615,-0.265356640282587, -2.13471477655824e-06,-0.00401503578159823,0.15827785287148,-0.293777262378003, -2.14750637872463e-06,-0.00387003305436417,0.167629770166346,-0.32219788447342, -2.16029798144612e-06,-0.00372503032713078,0.176981687461211,-0.350618506568836, -2.1730895840566e-06,-0.0035800275998974,0.186333604756076,-0.379039128664252, -2.18588118605645e-06,-0.00343502487266312,0.195685522050941,-0.407459750759669, -2.1986727890555e-06,-0.00329002214543039,0.205037439345807,-0.435880372855085, -2.21146439149944e-06,-0.00314501941819612,0.214389356640672,-0.464300994950502, -2.22425599416542e-06,-0.00300001669096317,0.223741273935537,-0.492721617045918, -2.23704759660937e-06,-0.00285501396372934,0.233093191230403,-0.521142239141334, -2.24983919916433e-06,-0.00271001123649595,0.242445108525268,-0.549562861236751, -2.26263080149725e-06,-0.00256500850926233,0.251797025820133,-0.577983483332167, -2.27542240405221e-06,-0.00242000578202872,0.261148943114998,-0.606404105427583, -2.28821400682921e-06,-0.00227500305479555,0.270500860409863,-0.634824727523, -2.30100560871804e-06,-0.00213000032756128,0.279852777704729,-0.663245349618416, -2.31379721193914e-06,-0.00198499760032833,0.289204694999594,-0.691665971713833, -2.32658881405001e-06,-0.00183999487309405,0.29855661229446,-0.720086593809249, -2.33938041693804e-06,-0.00169499214586155,0.307908529589324,-0.748507215904666, -2.35217201871585e-06,-0.00154998941862683,0.31726044688419,-0.776927838000082, -2.36496362127081e-06,-0.00140498669139344,0.326612364179055,-0.805348460095498, -1.48444435693618e-06,-0.00485296004430896,0.101975341671248,-0.123407126393293, -1.49251400780037e-06,-0.00471549649036385,0.111270662757443,-0.151861838425099, -1.50058365874783e-06,-0.0045780329364189,0.120565983843638,-0.180316550456906, -1.50865330961203e-06,-0.00444056938247384,0.129861304929834,-0.208771262488712, -1.51672296055949e-06,-0.00430310582852889,0.139156626016029,-0.237225974520518, -1.52479261117389e-06,-0.00416564227458338,0.148451947102225,-0.265680686552325, -1.53286226201033e-06,-0.00402817872063843,0.15774726818842,-0.294135398584131, -1.54093191312432e-06,-0.00389071516669337,0.167042589274616,-0.322590110615937, -1.54900156357218e-06,-0.00375325161274787,0.176337910360811,-0.351044822647743, -1.55707121457516e-06,-0.00361578805880303,0.185633231447007,-0.37949953467955, -1.56514086557813e-06,-0.00347832450485797,0.194928552533202,-0.407954246711356, -1.57321051619252e-06,-0.00334086095091291,0.204223873619397,-0.436408958743162, -1.58128016713999e-06,-0.00320339739696784,0.213519194705593,-0.464863670774968, -1.58934981797643e-06,-0.00306593384302278,0.222814515791788,-0.493318382806774, -1.59741946859082e-06,-0.00292847028907728,0.232109836877984,-0.521773094838581, -1.60548911953828e-06,-0.00279100673513222,0.241405157964179,-0.550227806870387, -1.61355877048575e-06,-0.00265354318118738,0.250700479050375,-0.578682518902193, -1.6216284208781e-06,-0.00251607962724143,0.259995800136571,-0.607137230933999, -1.62969807260271e-06,-0.00237861607329748,0.269291121222766,-0.635591942965806, -1.63776772243995e-06,-0.00224115251935109,0.278586442308961,-0.664046654997612, -1.64583737360946e-06,-0.00210368896540647,0.287881763395157,-0.692501367029418, -1.65390702455692e-06,-0.00196622541146185,0.297177084481352,-0.720956079061224, -1.66197667539336e-06,-0.00182876185751635,0.306472405567547,-0.749410791093031, -1.67004632600776e-06,-0.00169129830357084,0.315767726653743,-0.777865503124837, -1.67811597717726e-06,-0.00155383474962623,0.325063047739938,-0.806320215156643, -1.06802781960069e-06,-0.0048298157695611,0.101836565852121,-0.123518538352924, -1.0732272373859e-06,-0.00469785286076918,0.111090784084086,-0.151997977669832, -1.07842665530988e-06,-0.00456588995197749,0.120345002316051,-0.18047741698674, -1.0836260731506e-06,-0.00443392704318579,0.129599220548016,-0.208956856303648, -1.08882549065825e-06,-0.00430196413439365,0.138853438779981,-0.237436295620556, -1.09402490860999e-06,-0.00417000122560218,0.148107657011946,-0.265915734937464, -1.09922432633969e-06,-0.00403803831681016,0.157361875243911,-0.294395174254372, -1.10442374395836e-06,-0.00390607540801846,0.166616093475876,-0.32287461357128, -1.10962316202112e-06,-0.00377411249922677,0.175870311707841,-0.351354052888188, -1.11482257997286e-06,-0.00364214959043552,0.185124529939806,-0.379833492205096, -1.120021997425e-06,-0.00351018668164294,0.194378748171771,-0.408312931522004, -1.12522141537674e-06,-0.00337822377285169,0.203632966403736,-0.436792370838912, -1.13042083282888e-06,-0.00324626086405955,0.212887184635701,-0.46527181015582, -1.13562025083613e-06,-0.00311429795526763,0.222141402867666,-0.493751249472728, -1.14081966873236e-06,-0.00298233504647594,0.231395621099631,-0.522230688789636, -1.14601908662859e-06,-0.00285037213768424,0.240649839331596,-0.550710128106544, -1.15121850452482e-06,-0.00271840922889321,0.24990405756356,-0.579189567423452, -1.15641792186594e-06,-0.00258644632010041,0.259158275795526,-0.60766900674036, -1.16161733965114e-06,-0.00245448341130849,0.268412494027491,-0.636148446057268, -1.16681675754737e-06,-0.00232252050251702,0.277666712259456,-0.664627885374176, -1.17201617599871e-06,-0.00219055759372644,0.28692093049142,-0.693107324691084, -1.17721559300676e-06,-0.00205859468493319,0.296175148723386,-0.721586764007992, -1.1824150104589e-06,-0.00192663177614127,0.30542936695535,-0.7500662033249, -1.18761442902127e-06,-0.00179466886735025,0.314683585187315,-0.778545642641808, -1.19281384669545e-06,-0.00166270595855789,0.323937803419281,-0.807025081958716, -7.0283698254292e-05,-0.010701056425712,0.131582598851909,-0.113678199740911, -7.54190551024159e-05,-0.0100290541223641,0.146948784494001,-0.137500626106234, -8.05544119503732e-05,-0.00935705181901603,0.162314970136092,-0.161323052471557, -8.56897687984692e-05,-0.00868504951566784,0.177681155778183,-0.18514547883688, -9.08251256466208e-05,-0.00801304721231988,0.193047341420274,-0.208967905202204, -9.59604824944948e-05,-0.00734104490897158,0.208413527062365,-0.232790331567527, -0.000101095839342424,-0.00666904260562329,0.223779712704456,-0.25661275793285, -0.000106231196190631,-0.00599704030227532,0.239145898346548,-0.280435184298173, -0.000111366553038783,-0.00532503799892758,0.254512083988638,-0.304257610663496, -0.000116501909886713,-0.00465303569557918,0.26987826963073,-0.32808003702882, -0.000121637266734698,-0.00398103339223121,0.285244455272821,-0.351902463394143, -0.000126772623582849,-0.00330903108888325,0.300610640914912,-0.375724889759466, -0.000131907980430834,-0.00263702878553507,0.315976826557003,-0.39954731612479, -0.000137043337278819,-0.0019650264821871,0.331343012199094,-0.423369742490113, -0.000142178694126582,-0.00129302417883848,0.346709197841186,-0.447192168855436, -0.000147314050975234,-0.000621021875491401,0.362075383483276,-0.47101459522076, -0.000152449407822886,5.09804278574499e-05,0.377441569125368,-0.494837021586083, -0.000157584764670871,0.000722982731205635,0.392807754767459,-0.518659447951406, -0.000162720121518634,0.00139498503455426,0.40817394040955,-0.542481874316729, -0.000167855478367285,0.00206698733790134,0.423540126051641,-0.566304300682053, -0.000172990835215159,0.00273898964124974,0.438906311693732,-0.590126727047376, -0.000178126192063366,0.00341099194459726,0.454272497335823,-0.613949153412699, -0.000183261548911129,0.00408299424794611,0.469638682977915,-0.637771579778022, -0.000188396905759003,0.00475499655129452,0.485004868620006,-0.661594006143345, -0.00019353226260721,0.00542699885464248,0.500371054262097,-0.685416432508669, -6.974458098577e-05,-0.0106358594249302,0.13141425677876,-0.113853306286322, -7.48092974050818e-05,-0.00996531066807438,0.146732136582974,-0.137710954815312, -7.98740138244769e-05,-0.00929476191121881,0.162050016387189,-0.161568603344303, -8.49387302438442e-05,-0.00862421315436301,0.177367896191403,-0.185426251873293, -9.00034466631006e-05,-0.00795366439750711,0.192685775995618,-0.209283900402283, -9.50681630824124e-05,-0.00728311564065121,0.208003655799832,-0.233141548931274, -0.000100132879501724,-0.00661256688379541,0.223321535604046,-0.256999197460264, -0.000105197595920981,-0.00594201812693962,0.238639415408261,-0.280856845989255, -0.000110262312340181,-0.00527146937008349,0.253957295212475,-0.304714494518245, -0.000115327028759826,-0.00460092061322825,0.26927517501669,-0.328572143047235, -0.000120391745179027,-0.00393037185637257,0.284593054820904,-0.352429791576226, -0.00012545646159845,-0.00325982309951689,0.299910934625118,-0.376287440105216, -0.000130521178017928,-0.00258927434266143,0.315228814429332,-0.400145088634206, -0.000135585894436963,-0.00191872558580508,0.330546694233547,-0.424002737163197, -0.000140650610856219,-0.0012481768289494,0.345864574037761,-0.447860385692187, -0.000145715327275697,-0.000577628072093717,0.361182453841976,-0.471718034221177, -0.000150780043694954,9.29206847621877e-05,0.37650033364619,-0.495575682750168, -0.000155844760114543,0.00076346944161787,0.391818213450405,-0.519433331279158, -0.000160909476534021,0.00143401819847311,0.407136093254619,-0.543290979808148, -0.000165974192952945,0.00210456695532946,0.422453973058833,-0.567148628337139, -0.000171038909372534,0.00277511571218492,0.437771852863048,-0.591006276866129, -0.00017610362579179,0.00344566446904082,0.453089732667262,-0.61486392539512, -0.000181168342211158,0.00411621322589673,0.468407612471477,-0.63872157392411, -0.000186233058630081,0.00478676198275263,0.483725492275691,-0.6625792224531, -0.000191297775049892,0.00545731073960765,0.499043372079905,-0.686436870982091, -6.90038965986128e-05,-0.0105468463361844,0.131182692667461,-0.114093437132613, -7.39722384737462e-05,-0.00987837748463394,0.14643418593165,-0.137999387271059, -7.89405803488519e-05,-0.00920990863308335,0.16168567919584,-0.161905337409505, -8.39089222240408e-05,-0.00854143978153299,0.17693717246003,-0.185811287547951, -8.88772640992297e-05,-0.00787297092998251,0.192188665724219,-0.209717237686397, -9.38456059744741e-05,-0.00720450207843215,0.207440158988409,-0.233623187824843, -9.88139478494965e-05,-0.00653603322688157,0.222691652252599,-0.257529137963289, -0.000103782289724741,-0.0058675643753312,0.237943145516789,-0.281435088101735, -0.000108750631599541,-0.00519909552377995,0.253194638780979,-0.30534103824018, -0.000113718973475063,-0.00453062667223025,0.268446132045168,-0.329246988378627, -0.000118687315350363,-0.00386215782068011,0.283697625309357,-0.353152938517072, -0.000123655657225052,-0.00319368896912864,0.298949118573548,-0.377058888655518, -0.000128623999100186,-0.00252522011757828,0.314200611837737,-0.400964838793964, -0.000133592340975541,-0.00185675126602791,0.329452105101927,-0.42487078893241, -0.000138560682850453,-0.00118828241447755,0.344703598366117,-0.448776739070856, -0.000143529024725475,-0.000519813562926519,0.359955091630307,-0.472682689209302, -0.000148497366600941,0.000148655288623178,0.375206584894496,-0.496588639347748, -0.000153465708475631,0.000817124140174652,0.390458078158686,-0.520494589486194, -0.00015843405035143,0.00148559299172391,0.405709571422875,-0.54440053962464, -0.000163402392226009,0.00215406184327582,0.420961064687066,-0.568306489763086, -0.000168370734101697,0.00282253069482508,0.436212557951255,-0.592212439901532, -0.000173339075976831,0.00349099954637566,0.451464051215445,-0.616118390039978, -0.000178307417851631,0.00415946839792625,0.466715544479634,-0.640024340178424, -0.000183275759727097,0.00482793724947639,0.481967037743824,-0.66393029031687, -0.00018824410160212,0.00549640610102786,0.497218531008015,-0.687836240455316, -6.79933548632383e-05,-0.0104264414366823,0.130866238235245,-0.114420231454212, -7.28314784274042e-05,-0.00976096412066174,0.146027120756868,-0.138391915303833, -7.76696019917367e-05,-0.00909548680464123,0.161188003278491,-0.162363599153453, -8.25077255560136e-05,-0.00843000948862083,0.176348885800115,-0.186335283003074, -8.73458491201795e-05,-0.00776453217260031,0.191509768321738,-0.210306966852694, -9.2183972684512e-05,-0.00709905485657991,0.206670650843361,-0.234278650702315, -9.70220962485113e-05,-0.00643357754055895,0.221831533364985,-0.258250334551935, -0.000101860219812455,-0.00576810022453822,0.236992415886608,-0.282222018401556, -0.000106698343377232,-0.00510262290851826,0.252153298408232,-0.306193702251176, -0.000111536466941176,-0.00443714559249719,0.267314180929855,-0.330165386100797, -0.000116374590505619,-0.00377166827647701,0.282475063451478,-0.354137069950417, -0.000121212714069729,-0.00310619096045683,0.297635945973101,-0.378108753800038, -0.000126050837634173,-0.00244071364443643,0.312796828494725,-0.402080437649658, -0.000130888961198394,-0.00177523632841603,0.327957711016348,-0.426052121499279, -0.000135727084762283,-0.00110975901239496,0.343118593537972,-0.450023805348899, -0.000140565208326726,-0.000444281696374782,0.358279476059595,-0.47399548919852, -0.00014540333189117,0.000221195619645842,0.373440358581218,-0.49796717304814, -0.000150241455454836,0.00088667293566691,0.388601241102842,-0.521938856897761, -0.000155079579019279,0.00155215025168709,0.403762123624465,-0.545910540747381, -0.000159917702584167,0.00221762756770705,0.418923006146088,-0.569882224597001, -0.000164755826147722,0.00288310488372812,0.434083888667712,-0.593853908446622, -0.000169593949711833,0.00354858219974918,0.449244771189335,-0.617825592296242, -0.000174432073275721,0.00421405951576981,0.464405653710959,-0.641797276145863, -0.000179270196840164,0.00487953683178999,0.479566536232582,-0.665768959995483, -0.000184108320405385,0.00554501414780928,0.494727418754205,-0.689740643845104, -6.66276904059682e-05,-0.0102656124561046,0.130437622391132,-0.114860371003274, -7.12921731370331e-05,-0.00960445780326635,0.145475983522797,-0.138920587621312, -7.59566558684033e-05,-0.00894330315042857,0.160514344654462,-0.162980804239351, -8.06211385996902e-05,-0.00828214849759057,0.175552705786127,-0.18704102085739, -8.52856213309217e-05,-0.00762099384475246,0.190591066917792,-0.211101237475428, -8.99501040623196e-05,-0.00695983919191467,0.205629428049457,-0.235161454093467, -9.46145867933845e-05,-0.00629868453907645,0.220667789181123,-0.259221670711505, -9.92790695242274e-05,-0.00563752988623789,0.235706150312788,-0.283281887329544, -0.000103943552255625,-0.0049763752334,0.250744511444453,-0.307342103947582, -0.000108608034987245,-0.00431522058056255,0.265782872576118,-0.331402320565621, -0.000113272517718366,-0.00365406592772421,0.280821233707783,-0.35546253718366, -0.000117937000449819,-0.00299291127488654,0.295859594839448,-0.379522753801698, -0.000122601483180551,-0.00233175662204821,0.310897955971113,-0.403582970419737, -0.000127265965912282,-0.00167060196921076,0.325936317102778,-0.427643187037775, -0.000131930448643458,-0.0010094473163722,0.340974678234444,-0.451703403655814, -0.000136594931374523,-0.000348292663534089,0.356013039366109,-0.475763620273853, -0.00014125941410581,0.000312861989303359,0.371051400497773,-0.499823836891891, -0.00014592389683743,0.000974016642141251,0.386089761629439,-0.52388405350993, -0.000150588379568162,0.00163517129498025,0.401128122761104,-0.547944270127968, -0.00015525286229956,0.00229632594781792,0.416166483892769,-0.572004486746007, -0.000159917345030403,0.00295748060065604,0.431204845024434,-0.596064703364045, -0.000164581827761578,0.0036186352534946,0.4462432061561,-0.620124919982084, -0.000169246310493087,0.00427978990633227,0.461281567287765,-0.644185136600123, -0.00017391079322393,0.00494094455917082,0.47631992841943,-0.668245353218161, -0.000178575275956216,0.00560209921200761,0.491358289551095,-0.6923055698362, -6.48056721373191e-05,-0.0100543813491858,0.129864086951448,-0.115444948418722, -6.92427046365407e-05,-0.00939948934531509,0.144738862039717,-0.139622751054774, -7.36797371359565e-05,-0.00874459734144473,0.159613637127985,-0.163800553690826, -7.81167696349838e-05,-0.0080897053375738,0.174488412216254,-0.187978356326877, -8.25538021343997e-05,-0.00743481333370333,0.189363187304522,-0.212156158962929, -8.69908346334269e-05,-0.00677992132983252,0.204237962392791,-0.236333961598981, -9.14278671325097e-05,-0.0061250293259616,0.219112737481059,-0.260511764235033, -9.58648996318701e-05,-0.00547013732209112,0.233987512569328,-0.284689566871085, -0.000100301932131119,-0.00481524531822042,0.248862287657596,-0.308867369507137, -0.000104738964630258,-0.00416035331434972,0.263737062745865,-0.333045172143189, -0.000109175997129507,-0.00350546131047902,0.278611837834134,-0.35722297477924, -0.000113613029628867,-0.00285056930660854,0.293486612922402,-0.381400777415292, -0.000118050062128283,-0.00219567730273829,0.30836138801067,-0.405578580051344, -0.000122487094627366,-0.00154078529886692,0.32323616309894,-0.429756382687396, -0.000126924127126449,-0.000885893294996887,0.338110938187207,-0.453934185323448, -0.000131361159625532,-0.000231001291125299,0.352985713275477,-0.4781119879595, -0.000135798192124725,0.000423890712745179,0.367860488363745,-0.502289790595551, -0.000140235224623919,0.0010787827166161,0.382735263452014,-0.526467593231604, -0.000144672257123224,0.0017336747204868,0.397610038540282,-0.550645395867655, -0.000149109289622196,0.00238856672435706,0.41248481362855,-0.574823198503707, -0.000153546322121834,0.00304345872822775,0.427359588716819,-0.599001001139759, -0.000157983354621138,0.00369835073209801,0.442234363805087,-0.623178803775811, -0.000162420387120443,0.00435324273596871,0.457109138893356,-0.647356606411863, -0.00016685741961997,0.00500813473983897,0.471983913981624,-0.671534409047915, -0.000171294452118498,0.005663026743711,0.486858689069894,-0.695712211683967, -6.24161043309979e-05,-0.00978305435470772,0.129108997826724,-0.116207128616983, -6.65622104957797e-05,-0.00913722239051584,0.143769017645452,-0.140538241545485, -7.0708316660506e-05,-0.00849139042632396,0.15842903746418,-0.164869354473987, -7.48544228252879e-05,-0.00784555846213197,0.173089057282909,-0.189200467402489, -7.90005289902362e-05,-0.00719972649794032,0.187749077101637,-0.213531580330991, -8.31466351550736e-05,-0.00655389453374877,0.202409096920365,-0.237862693259493, -8.72927413196334e-05,-0.00590806256955678,0.217069116739093,-0.262193806187995, -9.14388474844152e-05,-0.00526223060536468,0.231729136557821,-0.286524919116497, -9.55849536494191e-05,-0.00461639864117314,0.24638915637655,-0.310856032044999, -9.97310598142565e-05,-0.00397056667698092,0.261049176195278,-0.335187144973501, -0.000103877165978983,-0.00332473471278938,0.275709196014006,-0.359518257902003, -0.000108023272143987,-0.00267890274859783,0.290369215832734,-0.383849370830505, -0.000112169378308713,-0.00203307078440607,0.305029235651462,-0.408180483759007, -0.000116315484473328,-0.00138723882021408,0.31968925547019,-0.432511596687509, -0.000120461590638166,-0.000741406856022087,0.334349275288919,-0.456842709616011, -0.000124607696803225,-9.55748918307631e-05,0.349009295107647,-0.481173822544513, -0.00012875380296784,0.000550257072361449,0.363669314926375,-0.505504935473015, -0.000132899909132567,0.00119608903655366,0.378329334745104,-0.529836048401517, -0.000137046015297848,0.00184192100074432,0.392989354563831,-0.554167161330019, -0.00014119212146213,0.00248775296493697,0.40764937438256,-0.578498274258522, -0.000145338227627079,0.00313358492912874,0.422309394201288,-0.602829387187023, -0.000149484333792138,0.00377941689332006,0.436969414020016,-0.627160500115526, -0.000153630439957309,0.00442524885751139,0.451629433838744,-0.651491613044027, -0.000157776546122146,0.00507108082170316,0.466289453657472,-0.67582272597253, -0.000161922652286539,0.00571691278589626,0.480949473476201,-0.700153838901032, -5.93517939788124e-05,-0.00944439753518178,0.128135943825456,-0.117177247569262, -6.31372292670129e-05,-0.00881156468885913,0.142520212767342,-0.141703497055529, -6.692266455538e-05,-0.00817873184253648,0.156904481709227,-0.166229746541796, -7.07080998436083e-05,-0.00754589899621405,0.171288750651113,-0.190755996028063, -7.44935351320586e-05,-0.00691306614989151,0.185673019592998,-0.215282245514331, -7.82789704202869e-05,-0.00628023330356875,0.200057288534884,-0.239808495000598, -8.20644057086817e-05,-0.00564740045724643,0.214441557476769,-0.264334744486865, -8.584984099691e-05,-0.00501456761092367,0.228825826418655,-0.288860993973132, -8.96352762851382e-05,-0.00438173476460091,0.243210095360541,-0.313387243459399, -9.34207115736441e-05,-0.00374890191827881,0.257594364302426,-0.337913492945666, -9.72061468619834e-05,-0.00311606907195605,0.271978633244312,-0.362439742431933, -0.000100991582150489,-0.00248323622563396,0.286362902186197,-0.386965991918201, -0.000104777017438384,-0.00185040337931053,0.300747171128083,-0.411492241404468, -0.000108562452727168,-0.00121757053298865,0.315131440069968,-0.436018490890735, -0.000112347888015285,-0.000584737686665671,0.329515709011854,-0.460544740377002, -0.000116133323303735,4.80951596568691e-05,0.34389997795374,-0.485070989863269, -0.000119918758591964,0.000680928005979187,0.358284246895625,-0.509597239349536, -0.000123704193880414,0.00131376085230173,0.372668515837511,-0.534123488835803, -0.00012748962916842,0.00194659369862449,0.387052784779396,-0.55864973832207, -0.000131275064456982,0.00257942654494681,0.401437053721282,-0.583175987808338, -0.000135060499745321,0.00321225939126935,0.415821322663167,-0.607702237294604, -0.000138845935033549,0.00384509223759233,0.430205591605053,-0.632228486780872, -0.000142631370321888,0.00447792508391487,0.444589860546938,-0.656754736267139, -0.000146416805610117,0.00511075793023696,0.458974129488824,-0.681280985753406, -0.000150202240898789,0.00574359077655906,0.473358398430709,-0.705807235239673, -5.55336637548809e-05,-0.00903667762364446,0.126916173561392,-0.118374916019083, -5.88895474387674e-05,-0.00842216465480727,0.140956295096243,-0.143142072971484, -6.22454311227094e-05,-0.00780765168597031,0.154996416631094,-0.167909229923885, -6.56013148067625e-05,-0.00719313871713345,0.169036538165945,-0.192676386876286, -6.8957198490649e-05,-0.00657862574829626,0.183076659700796,-0.217443543828687, -7.23130821745355e-05,-0.00596411277945952,0.197116781235647,-0.242210700781088, -7.56689658584775e-05,-0.00534959981062233,0.211156902770499,-0.266977857733489, -7.90248495423085e-05,-0.00473508684178525,0.22519702430535,-0.29174501468589, -8.2380733226306e-05,-0.00412057387294817,0.239237145840201,-0.31651217163829, -8.5736616910137e-05,-0.0035060609041111,0.253277267375052,-0.341279328590691, -8.90925005940235e-05,-0.0028915479352738,0.267317388909903,-0.366046485543092, -9.24483842782431e-05,-0.00227703496643761,0.281357510444754,-0.390813642495493, -9.58042679619631e-05,-0.00166252199760053,0.295397631979605,-0.415580799447894, -9.91601516459051e-05,-0.00104800902876301,0.309437753514457,-0.440347956400295, -0.000102516035329958,-0.000433496059926153,0.323477875049308,-0.465115113352696, -0.000105871919013789,0.000181016908910703,0.337517996584159,-0.489882270305097, -0.000109227802697842,0.00079552987774778,0.35155811811901,-0.514649427257498, -0.000112583686382117,0.00141004284658441,0.365598239653861,-0.539416584209899, -0.000115939570065615,0.00202455581542171,0.379638361188712,-0.5641837411623, -0.00011929545374989,0.00263906878425901,0.393678482723564,-0.5889508981147, -0.000122651337433832,0.00325358175309542,0.407718604258414,-0.613718055067102, -0.000126007221117441,0.00386809472193317,0.421758725793266,-0.638485212019502, -0.000129363104801827,0.00448260769076914,0.435798847328116,-0.663252368971903, -0.000132718988485436,0.00509712065960732,0.449838968862968,-0.688019525924304, -0.000136074872169378,0.00571163362844374,0.463879090397819,-0.712786682876705, -5.09436093744098e-05,-0.00856684132877095,0.125439218184938,-0.119799017709532, -5.38129069865834e-05,-0.00797738717200214,0.139064782083119,-0.144852628504658, -5.66822045991455e-05,-0.00738793301523377,0.152690345981301,-0.169906239299785, -5.95515022115412e-05,-0.00679847885846518,0.166315909879482,-0.194959850094912, -6.24207998238813e-05,-0.0062090247016966,0.179941473777664,-0.220013460890039, -6.52900974362769e-05,-0.0056195705449279,0.193567037675845,-0.245067071685166, -6.81593950485615e-05,-0.0050301163881592,0.207192601574027,-0.270120682480292, -7.10286926610681e-05,-0.00444066223139084,0.220818165472208,-0.295174293275419, -7.38979902731862e-05,-0.0038512080746218,0.23444372937039,-0.320227904070546, -7.67672878857484e-05,-0.00326175391785366,0.248069293268571,-0.345281514865673, -7.96365854983105e-05,-0.00267229976108507,0.261694857166753,-0.370335125660799, -8.25058831107617e-05,-0.00208284560431671,0.275320421064934,-0.395388736455926, -8.53751807230463e-05,-0.00149339144754768,0.288945984963116,-0.420442347251053, -8.8244478335775e-05,-0.000903937290779755,0.302571548861297,-0.44549595804618, -9.11137759475045e-05,-0.000314483134010279,0.316197112759479,-0.470549568841306, -9.39830735600111e-05,0.000274971022758086,0.32982267665766,-0.495603179636433, -9.68523711722957e-05,0.000864425179527117,0.343448240555842,-0.52065679043156, -9.97216687849134e-05,0.00145387933629504,0.357073804454023,-0.545710401226687, -0.000102590966397198,0.00204333349306363,0.370699368352205,-0.570764012021814, -0.000105460264009705,0.00263278764983221,0.384324932250386,-0.59581762281694, -0.000108329561621989,0.00322224180660102,0.397950496148568,-0.620871233612067, -0.000111198859234385,0.00381169596336983,0.41157606004675,-0.645924844407194, -0.000114068156847225,0.00440115012013775,0.425201623944931,-0.670978455202321, -0.000116937454459176,0.00499060427690656,0.438827187843112,-0.696032065997447, -0.000119806752071905,0.00558005843367493,0.452452751741294,-0.721085676792574, -4.56577545911163e-05,-0.00805233202422462,0.123724364207198,-0.121418673593989, -4.80081934708387e-05,-0.00749571544070993,0.13687138683906,-0.146798073379543, -5.03586323506999e-05,-0.00693909885719535,0.150018409470922,-0.172177473165096, -5.27090712304501e-05,-0.00638248227368088,0.163165432102784,-0.19755687295065, -5.50595101101448e-05,-0.00582586569016597,0.176312454734646,-0.222936272736204, -5.7409948990117e-05,-0.0052692491066515,0.189459477366507,-0.248315672521757, -5.97603878697561e-05,-0.00471263252313681,0.202606499998369,-0.273695072307311, -6.21108267498949e-05,-0.00415601593962278,0.215753522630231,-0.299074472092865, -6.44612656295895e-05,-0.00359939935610809,0.228900545262093,-0.324453871878418, -6.68117045091732e-05,-0.00304278277259296,0.242047567893955,-0.349833271663972, -6.91621433889233e-05,-0.00248616618907849,0.255194590525816,-0.375212671449525, -7.15125822687845e-05,-0.00192954960556424,0.268341613157678,-0.400592071235079, -7.38630211487568e-05,-0.00137293302204955,0.28148863578954,-0.425971471020633, -7.62134600283959e-05,-0.000816316438534637,0.294635658421402,-0.451350870806186, -7.85638989085902e-05,-0.000259699855020612,0.307782681053263,-0.47673027059174, -8.09143377878963e-05,0.000296916728494745,0.320929703685126,-0.502109670377294, -8.32647766675354e-05,0.000853533312009436,0.334076726316987,-0.527489070162847, -8.56152155473966e-05,0.00141014989552346,0.347223748948849,-0.552868469948401, -8.79656544272578e-05,0.00196676647903837,0.360370771580711,-0.578247869733954, -9.0316093307341e-05,0.0025233830625524,0.373517794212572,-0.603627269519508, -9.26665321868692e-05,0.00307999964606731,0.386664816844434,-0.629006669305062, -9.50169710671744e-05,0.00363661622958222,0.399811839476297,-0.654386069090615, -9.73674099468136e-05,0.00419323281309669,0.412958862108158,-0.679765468876169, -9.97178488257866e-05,0.00474984939661205,0.42610588474002,-0.705144868661722, -0.000102068287705981,0.00530646598012652,0.439252907371882,-0.730524268447276, -3.98642425261941e-05,-0.00751983369950515,0.121827962154871,-0.123170110142105, -4.16988114729511e-05,-0.00700393910405428,0.134449055234155,-0.14890180620879, -4.35333804199578e-05,-0.00648804450860363,0.147070148313438,-0.174633502275476, -4.53679493667702e-05,-0.00597214991315298,0.159691241392722,-0.200365198342161, -4.72025183136937e-05,-0.00545625531770222,0.172312334472005,-0.226096894408846, -4.90370872608392e-05,-0.00494036072225201,0.184933427551288,-0.251828590475532, -5.08716562076517e-05,-0.00442446612680114,0.197554520630572,-0.277560286542217, -5.27062251546306e-05,-0.00390857153135049,0.210175613709855,-0.303291982608902, -5.45407941014986e-05,-0.00339267693589984,0.222796706789139,-0.329023678675588, -5.63753630486996e-05,-0.00287678234044941,0.235417799868422,-0.354755374742273, -5.82099319949014e-05,-0.0023608877449981,0.248038892947705,-0.380487070808958, -6.00445009424355e-05,-0.00184499314954811,0.260659986026989,-0.406218766875644, -6.18790698894145e-05,-0.00132909855409769,0.273281079106272,-0.431950462942329, -6.37136388359494e-05,-0.000813203958646369,0.285902172185556,-0.457682159009014, -6.55482077830394e-05,-0.000297309363195719,0.298523265264839,-0.4834138550757, -6.73827767299073e-05,0.000218585232255153,0.311144358344123,-0.509145551142385, -6.92173456765532e-05,0.000734479827706025,0.323765451423406,-0.53487724720907, -7.10519146235322e-05,0.00125037442315645,0.33638654450269,-0.560608943275756, -7.28864835708443e-05,0.00176626901860644,0.349007637581973,-0.586340639342441, -7.47210525179343e-05,0.00228216361405664,0.361628730661256,-0.612072335409126, -7.65556214641361e-05,0.00279805820950862,0.37424982374054,-0.637804031475811, -7.83901904113371e-05,0.00331395280495883,0.386870916819823,-0.663535727542497, -8.0224759357983e-05,0.00382984740040948,0.399492009899106,-0.689267423609182, -8.2059328304851e-05,0.00434574199586057,0.41211310297839,-0.714999119675867, -8.38938972518299e-05,0.00486163659131122,0.424734196057674,-0.740730815742553, -3.38488750320498e-05,-0.00700035280528066,0.119840674312775,-0.124963691076466, -3.5208687984567e-05,-0.00653179367099987,0.13191407999209,-0.151056160642918, -3.65685009369177e-05,-0.00606323453671886,0.143987485671406,-0.177148630209371, -3.79283138893238e-05,-0.00559467540243797,0.156060891350721,-0.203241099775823, -3.92881268418965e-05,-0.00512611626815707,0.168134297030036,-0.229333569342276, -4.06479397943027e-05,-0.00465755713387617,0.180207702709352,-0.255426038908728, -4.20077527468199e-05,-0.00418899799959549,0.192281108388667,-0.281518508475181, -4.33675656990595e-05,-0.00372043886531404,0.204354514067983,-0.307610978041633, -4.47273786516877e-05,-0.00325187973103369,0.216427919747298,-0.333703447608086, -4.60871916042049e-05,-0.00278332059675268,0.228501325426613,-0.359795917174538, -4.74470045566666e-05,-0.00231476146247189,0.240574731105929,-0.385888386740991, -4.88068175088507e-05,-0.00184620232819088,0.252648136785244,-0.411980856307443, -5.01666304619786e-05,-0.00137764319391054,0.264721542464559,-0.438073325873896, -5.15264434139961e-05,-0.00090908405962975,0.276794948143874,-0.464165795440348, -5.28862563664578e-05,-0.000440524925348296,0.28886835382319,-0.490258265006801, -5.42460693191416e-05,2.80342089320484e-05,0.300941759502505,-0.516350734573253, -5.56058822713812e-05,0.000496593343213725,0.313015165181821,-0.542443204139705, -5.69656952237318e-05,0.000965152477494291,0.325088570861136,-0.568535673706158, -5.83255081765266e-05,0.00143371161177441,0.337161976540451,-0.594628143272611, -5.96853211287662e-05,0.00190227074605609,0.349235382219767,-0.620720612839063, -6.10451340810059e-05,0.00237082988033732,0.361308787899083,-0.646813082405516, -6.24049470336896e-05,0.00283938901461767,0.373382193578398,-0.672905551971968, -6.37647599857072e-05,0.00330794814889934,0.385455599257713,-0.69899802153842, -6.51245729381689e-05,0.00377650728318013,0.397529004937029,-0.725090491104873, -6.64843858908526e-05,0.00424506641746092,0.409602410616344,-0.751182960671325, -2.79442657529771e-05,-0.00652223857923007,0.117872205432874,-0.126700888047118, -2.89011271974171e-05,-0.00610498108625279,0.129406360135984,-0.153142789645814, -2.98579886420236e-05,-0.00568772359327585,0.140940514839095,-0.179584691244511, -3.08148500869354e-05,-0.00527046610029913,0.152474669542205,-0.206026592843207, -3.17717115314586e-05,-0.00485320860732186,0.164008824245316,-0.232468494441903, -3.27285729762039e-05,-0.00443595111434514,0.175542978948426,-0.258910396040599, -3.36854344210602e-05,-0.00401869362136842,0.187077133651536,-0.285352297639295, -3.46422958656389e-05,-0.00360143612839137,0.198611288354647,-0.311794199237991, -3.55991573102177e-05,-0.00318417863541431,0.210145443057757,-0.338236100836688, -3.65560187545744e-05,-0.00276692114243682,0.221679597760868,-0.364678002435384, -3.75128801993752e-05,-0.00234966364946021,0.233213752463978,-0.39111990403408, -3.84697416441204e-05,-0.00193240615648338,0.244747907167089,-0.417561805632776, -3.94266030888657e-05,-0.00151514866350633,0.256282061870199,-0.444003707231472, -4.03834645334999e-05,-0.00109789117052905,0.26781621657331,-0.470445608830168, -4.13403259781342e-05,-0.000680633677552667,0.27935037127642,-0.496887510428865, -4.22971874232125e-05,-0.000263376184575614,0.290884525979531,-0.523329412027561, -4.32540488672917e-05,0.000153881308401882,0.302418680682641,-0.549771313626257, -4.4210910312481e-05,0.000571138801378268,0.313952835385752,-0.576213215224953, -4.51677717566712e-05,0.000988396294355542,0.325486990088862,-0.602655116823649, -4.61246332010834e-05,0.00140565378733282,0.337021144791973,-0.629097018422346, -4.70814946462728e-05,0.0018229112803092,0.348555299495083,-0.655538920021042, -4.8038356090907e-05,0.00224016877328603,0.360089454198193,-0.681980821619738, -4.89952175354302e-05,0.00265742626626331,0.371623608901304,-0.708422723218434, -4.99520789802865e-05,0.00307468375924014,0.383157763604414,-0.73486462481713, -5.09089404246987e-05,0.00349194125221786,0.394691918307525,-0.761306526415827, -2.24592565011283e-05,-0.00610527692785379,0.116028072975099,-0.128295001417611, -2.3100440174062e-05,-0.00573983429560132,0.127059789399198,-0.155057554205601, -2.37416238467736e-05,-0.0053743916633483,0.138091505823298,-0.181820106993591, -2.43828075195407e-05,-0.00500894903109528,0.149123222247398,-0.208582659781582, -2.50239911924188e-05,-0.00464350639884259,0.160154938671497,-0.235345212569572, -2.5665174865297e-05,-0.0042780637665899,0.171186655095597,-0.262107765357563, -2.63063585380641e-05,-0.00391262113433699,0.182218371519697,-0.288870318145553, -2.69475422106091e-05,-0.00354717850208375,0.193250087943797,-0.315632870933544, -2.75887258834318e-05,-0.00318173586983117,0.204281804367896,-0.342395423721534, -2.82299095563654e-05,-0.00281629323757815,0.215313520791996,-0.369157976509524, -2.8871093229188e-05,-0.00245085060532579,0.226345237216095,-0.395920529297515, -2.95122769018441e-05,-0.00208540797307255,0.237376953640195,-0.422683082085505, -3.01534605749998e-05,-0.0017199653408202,0.248408670064294,-0.449445634873496, -3.07946442472673e-05,-0.00135452270856651,0.259440386488395,-0.476208187661486, -3.1435827920423e-05,-0.000989080076313931,0.270472102912494,-0.502970740449476, -3.20770115933566e-05,-0.000623637444061798,0.281503819336593,-0.529733293237467, -3.27181952659572e-05,-0.000258194811808332,0.292535535760693,-0.556495846025457, -3.33593789390019e-05,0.000107247820443801,0.303567252184793,-0.583258398813448, -3.40005626117135e-05,0.0004726904526966,0.314598968608892,-0.610020951601438, -3.4641746284314e-05,0.00083813308495051,0.325630685032993,-0.636783504389428, -3.52829299572477e-05,0.00120357571720264,0.336662401457092,-0.663546057177419, -3.59241136304034e-05,0.00156901834945522,0.347694117881191,-0.690308609965409, -3.65652973028929e-05,0.00193446098170824,0.358725834305291,-0.7170711627534, -3.72064809761596e-05,0.00229990361396037,0.36975755072939,-0.74383371554139, -3.78476646492043e-05,0.00266534624621295,0.38078926715349,-0.770596268329381, -1.76185693750164e-05,-0.00575830935917143,0.114388256464148,-0.129686928029868, -1.80302668530696e-05,-0.00544183030858969,0.124975310299501,-0.156729462738776, -1.84419643305955e-05,-0.00512535125800728,0.135562364134854,-0.183771997447684, -1.88536618085378e-05,-0.00480887220742543,0.146149417970207,-0.210814532156592, -1.92653592862579e-05,-0.00449239315684313,0.15673647180556,-0.2378570668655, -1.96770567640892e-05,-0.00417591410626117,0.167323525640913,-0.264899601574408, -2.00887542417538e-05,-0.00385943505567909,0.177910579476266,-0.291942136283316, -2.0500451719474e-05,-0.00354295600509702,0.188497633311619,-0.318984670992224, -2.09121491975273e-05,-0.00322647695451517,0.199084687146972,-0.346027205701132, -2.13238466753585e-05,-0.00290999790393309,0.209671740982325,-0.37306974041004, -2.17355441529121e-05,-0.0025935188533508,0.220258794817679,-0.400112275118947, -2.21472416310764e-05,-0.00227703980276939,0.230845848653031,-0.427154809827856, -2.25589391089631e-05,-0.00196056075218709,0.241432902488385,-0.454197344536763, -2.29706365868498e-05,-0.00164408170160546,0.252019956323738,-0.481239879245671, -2.33823340642925e-05,-0.00132760265102294,0.262607010159091,-0.508282413954579, -2.37940315421792e-05,-0.00101112360044087,0.273194063994444,-0.535324948663487, -2.42057290202879e-05,-0.000694644549859236,0.283781117829797,-0.562367483372395, -2.46174264979526e-05,-0.000378165499276939,0.29436817166515,-0.589410018081303, -2.50291239757283e-05,-6.16864486948643e-05,0.304955225500503,-0.616452552790211, -2.5440821453504e-05,0.00025479260188721,0.315542279335856,-0.643495087499119, -2.58525189312797e-05,0.000571271652469285,0.326129333171209,-0.670537622208027, -2.62642164092775e-05,0.000887750703050916,0.336716387006562,-0.697580156916935, -2.66759138870531e-05,0.00120422975363343,0.347303440841916,-0.724622691625842, -2.70876113644958e-05,0.00152070880421595,0.357890494677269,-0.75166522633475, -2.74993088424935e-05,0.00183718785479758,0.368477548512622,-0.778707761043658, -1.35356444470602e-05,-0.00548053117374969,0.112996219523963,-0.130850566397133, -1.379112801983e-05,-0.00520765459392381,0.123207282120401,-0.158127163521725, -1.40466115924887e-05,-0.00493477801409814,0.133418344716838,-0.185403760646317, -1.43020951651751e-05,-0.00466190143427248,0.143629407313276,-0.212680357770909, -1.45575787380281e-05,-0.0043890248544467,0.153840469909714,-0.239956954895501, -1.4813062310659e-05,-0.0041161482746207,0.164051532506152,-0.267233552020093, -1.50685458835675e-05,-0.00384327169479537,0.17426259510259,-0.294510149144685, -1.53240294563095e-05,-0.0035703951149697,0.184473657699027,-0.321786746269277, -1.55795130290515e-05,-0.00329751853514404,0.194684720295465,-0.349063343393869, -1.58349966017934e-05,-0.00302464195531815,0.204895782891903,-0.376339940518461, -1.60904801742578e-05,-0.00275176537549227,0.215106845488341,-0.403616537643053, -1.63459637469998e-05,-0.0024788887956666,0.225317908084778,-0.430893134767645, -1.66014473197418e-05,-0.00220601221584094,0.235528970681216,-0.458169731892237, -1.68569308922617e-05,-0.0019331356360146,0.245740033277654,-0.485446329016829, -1.71124144652257e-05,-0.00166025905618916,0.255951095874092,-0.512722926141421, -1.73678980380787e-05,-0.00138738247636394,0.266162158470529,-0.539999523266013, -1.76233816108207e-05,-0.00111450589653783,0.276373221066967,-0.567276120390605, -1.78788651831185e-05,-0.000841629316711723,0.286584283663405,-0.594552717515197, -1.81343487561936e-05,-0.000568752736886502,0.296795346259843,-0.621829314639789, -1.83898323284915e-05,-0.000295876157060171,0.307006408856281,-0.649105911764381, -1.86453159012334e-05,-2.2999577234728e-05,0.317217471452719,-0.676382508888973, -1.89007994746415e-05,0.000249877002590271,0.327428534049156,-0.703659106013565, -1.91562830463843e-05,0.00052275358241749,0.337639596645594,-0.730935703138157, -1.94117666195703e-05,0.000795630162242489,0.347850659242032,-0.758212300262749, -1.96672501920903e-05,0.00106850674206882,0.35806172183847,-0.785488897387341, -1.02210907211298e-05,-0.00526479979132233,0.111860171746584,-0.131788490061392, -1.03758516132035e-05,-0.00502884141754323,0.121765353500718,-0.159253747756793, -1.05306125047777e-05,-0.00479288304376324,0.131670535254852,-0.186719005452195, -1.06853733966572e-05,-0.00455692466998392,0.141575717008986,-0.214184263147596, -1.08401342883702e-05,-0.00432096629620426,0.15148089876312,-0.241649520842997, -1.09948951803052e-05,-0.00408500792242505,0.161386080517254,-0.269114778538399, -1.11496560720736e-05,-0.0038490495486454,0.171291262271389,-0.2965800362338, -1.13044169638421e-05,-0.00361309117486552,0.181196444025523,-0.324045293929201, -1.14591778557216e-05,-0.00337713280108631,0.191101625779657,-0.351510551624603, -1.16139387474901e-05,-0.0031411744273071,0.201006807533791,-0.378975809320004, -1.17686996394806e-05,-0.00290521605352767,0.210911989287925,-0.406441067015405, -1.19234605313601e-05,-0.00266925767974802,0.22081717104206,-0.433906324710807, -1.20782214225734e-05,-0.00243329930596792,0.230722352796194,-0.461371582406208, -1.22329823145639e-05,-0.00219734093218849,0.240627534550328,-0.488836840101609, -1.23877432067765e-05,-0.00196138255840927,0.250532716304462,-0.516302097797011, -1.25425040981009e-05,-0.00172542418462962,0.260437898058596,-0.543767355492412, -1.26972649903134e-05,-0.00148946581085019,0.270343079812731,-0.571232613187813, -1.28520258819709e-05,-0.00125350743707053,0.280248261566865,-0.598697870883215, -1.30067867732953e-05,-0.00101754906329088,0.290153443320999,-0.626163128578616, -1.31615476660629e-05,-0.000781590689512335,0.300058625075133,-0.653628386274017, -1.33163085576093e-05,-0.000545632315732902,0.309963806829266,-0.681093643969419, -1.34710694490447e-05,-0.000309673941952582,0.319868988583401,-0.70855890166482, -1.36258303411463e-05,-7.37155681727053e-05,0.329774170337536,-0.736024159360221, -1.37805912330258e-05,0.000162242805606283,0.33967935209167,-0.763489417055623, -1.39353521244612e-05,0.000398201179385715,0.349584533845804,-0.790954674751024, -7.61269064772363e-06,-0.00510106851568781,0.110962392421196,-0.132522487820334, -7.70515579273656e-06,-0.00489510769763823,0.120626441929424,-0.160135386993876, -7.79762093761072e-06,-0.00468914687958821,0.130290491437652,-0.187748286167419, -7.8900860826514e-06,-0.00448318606153864,0.13995454094588,-0.215361185340961, -7.98255122769209e-06,-0.00427722524348906,0.149618590454108,-0.242974084514503, -8.07501637256625e-06,-0.00407126442543915,0.159282639962336,-0.270586983688046, -8.16748151727387e-06,-0.00386530360738924,0.168946689470564,-0.298199882861588, -8.25994666237007e-06,-0.00365934278933966,0.178610738978792,-0.325812782035131, -8.35241180741075e-06,-0.00345338197129008,0.188274788487019,-0.353425681208673, -8.44487695211837e-06,-0.00324742115324006,0.197938837995247,-0.381038580382215, -8.53734209715906e-06,-0.00304146033519048,0.207602887503475,-0.408651479555758, -8.62980724247731e-06,-0.00283549951714113,0.217266937011703,-0.4362643787293, -8.72227238712941e-06,-0.00262953869909088,0.226930986519931,-0.463877277902843, -8.81473753222561e-06,-0.00242357788104131,0.236595036028159,-0.491490177076385, -8.90720267698875e-06,-0.00221761706299173,0.246259085536387,-0.519103076249928, -8.99966782164086e-06,-0.00201165624494148,0.255923135044615,-0.54671597542347, -9.09213296673705e-06,-0.00180569542689168,0.265587184552843,-0.574328874597013, -9.18459811194428e-06,-0.00159973460884277,0.275251234061071,-0.601941773770555, -9.27706325681843e-06,-0.00139377379079253,0.284915283569299,-0.629554672944097, -9.36952840124849e-06,-0.00118781297274184,0.294579333077527,-0.65716757211764, -9.46199354678878e-06,-0.000981852154693375,0.304243382585755,-0.684780471291182, -9.55445869210703e-06,-0.000775891336643575,0.313907432093983,-0.712393370464725, -9.64692383687016e-06,-0.000569930518594219,0.32357148160221,-0.740006269638267, -9.73938898196636e-06,-0.00036396970054442,0.333235531110438,-0.76761916881181, -9.8318541272846e-06,-0.000158008882495064,0.342899580618667,-0.795232067985352, -5.60968746154966e-06,-0.00497889556875963,0.110270734505491,-0.133083736804912, -5.66472350171932e-06,-0.004796528543909,0.119749362317796,-0.1608095295516, -5.71975954172244e-06,-0.00461416151905814,0.129227990130102,-0.188535322298289, -5.77479558172556e-06,-0.00443179449420739,0.138706617942407,-0.216261115044977, -5.82983162217277e-06,-0.00424942746935697,0.148185245754712,-0.243986907791666, -5.8848676622314e-06,-0.00406706044450655,0.157663873567016,-0.271712700538355, -5.93990370212349e-06,-0.00388469341965525,0.167142501379322,-0.299438493285043, -5.9949397420711e-06,-0.00370232639480439,0.176621129191627,-0.327164286031732, -6.04997578240729e-06,-0.00351995936995397,0.186099757003932,-0.354890078778421, -6.1050118223549e-06,-0.00333759234510289,0.195578384816237,-0.382615871525109, -6.16004786246904e-06,-0.00315522532025247,0.205057012628542,-0.410341664271798, -6.21508390308279e-06,-0.0029728582954025,0.214535640440847,-0.438067457018487, -6.27011994280835e-06,-0.00279049127055142,0.224014268253152,-0.465793249765175, -6.32515598286698e-06,-0.00260812424570056,0.233492896065457,-0.493519042511864, -6.38019202292561e-06,-0.00242575722084948,0.242971523877762,-0.521244835258553, -6.43522806320629e-06,-0.00224339019599951,0.252450151690067,-0.548970628005241, -6.49026410359799e-06,-0.00206102317114909,0.261928779502372,-0.57669642075193, -6.54530014321253e-06,-0.00187865614629779,0.271407407314677,-0.604422213498619, -6.60033618393729e-06,-0.00169628912144804,0.280886035126982,-0.632148006245307, -6.65537222377388e-06,-0.00151392209659695,0.290364662939287,-0.659873798991996, -6.71040826361047e-06,-0.00133155507174543,0.299843290751592,-0.687599591738684, -6.76544430378012e-06,-0.00114918804689479,0.309321918563898,-0.715325384485373, -6.82048034428284e-06,-0.000966821022044595,0.318800546376202,-0.743051177232062, -6.87551638389738e-06,-0.000784453997193513,0.328279174188507,-0.770776969978751, -6.93055242428908e-06,-0.000602086972343319,0.337757802000812,-0.798502762725439, -4.10027489805564e-06,-0.00488884778478804,0.109748227384138,-0.13350533452058, -4.13320112943594e-06,-0.004724578386053,0.119086977347266,-0.161315930400744, -4.1661273611493e-06,-0.00456030898731841,0.128425727310393,-0.189126526280908, -4.19905359239081e-06,-0.00439603958858314,0.137764477273521,-0.216937122161073, -4.23197982385437e-06,-0.00423177018984811,0.147103227236649,-0.244747718041237, -4.264906055651e-06,-0.00406750079111351,0.156441977199777,-0.272558313921401, -4.29783228705904e-06,-0.00390323139237858,0.165780727162905,-0.300368909801565, -4.3307585185226e-06,-0.00373896199364343,0.175119477126033,-0.328179505681729, -4.36368475026372e-06,-0.00357469259490872,0.184458227089161,-0.355990101561893, -4.39661098144972e-06,-0.00341042319617335,0.193796977052289,-0.383800697442057, -4.42953721291328e-06,-0.00324615379743864,0.203135727015416,-0.411611293322221, -4.46246344421031e-06,-0.00308188439870349,0.212474476978544,-0.439421889202385, -4.4953896758404e-06,-0.00291761499996834,0.221813226941672,-0.46723248508255, -4.52831590758151e-06,-0.00275334560123386,0.2311519769048,-0.495043080962714, -4.56124213898956e-06,-0.00258907620249915,0.240490726867927,-0.522853676842878, -4.59416837017557e-06,-0.00242480680376356,0.249829476831056,-0.550664272723042, -4.62709460191668e-06,-0.00226053740502841,0.259168226794184,-0.578474868603206, -4.66002083332473e-06,-0.00209626800629392,0.268506976757311,-0.60628546448337, -4.69294706528789e-06,-0.00193199860755966,0.277845726720439,-0.634096060363534, -4.72587329725105e-06,-0.00176772920882495,0.287184476683567,-0.661906656243698, -4.75879952788194e-06,-0.00160345981008936,0.296523226646695,-0.689717252123862, -4.79172575928999e-06,-0.00143919041135465,0.305861976609822,-0.717527848004027, -4.8246519910311e-06,-0.00127492101261906,0.315200726572951,-0.745338443884191, -4.85757822221711e-06,-0.00111065161388435,0.324539476536078,-0.773149039764355, -4.89050445406924e-06,-0.000946382215150088,0.333878226499206,-0.800959635644519, -2.9788671481179e-06,-0.00482306122726872,0.109359315352207,-0.133817820434063, -2.99881215790054e-06,-0.00467241318619205,0.118594060224239,-0.161691271931431, -3.01875716784972e-06,-0.0045217651451156,0.127828805096271,-0.189564723428799, -3.03870217749358e-06,-0.00437111710403848,0.137063549968304,-0.217438174926168, -3.05864718730398e-06,-0.00422046906296181,0.146298294840336,-0.245311626423536, -3.07859219716988e-06,-0.00406982102188536,0.155533039712368,-0.273185077920904, -3.09853720698028e-06,-0.00391917298080835,0.1647677845844,-0.301058529418273, -3.1184822169017e-06,-0.00376852493973168,0.174002529456433,-0.328931980915641, -3.13842722687863e-06,-0.003617876898655,0.183237274328465,-0.356805432413009, -3.15837223624493e-06,-0.00346722885757789,0.192472019200497,-0.384678883910378, -3.17831724633288e-06,-0.00331658081650188,0.201706764072529,-0.412552335407746, -3.19826225603226e-06,-0.00316593277542476,0.210941508944561,-0.440425786905114, -3.21820726600919e-06,-0.00301528473434809,0.220176253816593,-0.468299238402483, -3.23815227576407e-06,-0.00286463669327119,0.229410998688626,-0.496172689899851, -3.25809728551896e-06,-0.00271398865219474,0.238645743560658,-0.524046141397219, -3.27804229527384e-06,-0.00256334061111763,0.24788048843269,-0.551919592894588, -3.29798730525077e-06,-0.00241269257004095,0.257115233304723,-0.579793044391956, -3.31793231478361e-06,-0.00226204452896428,0.266349978176754,-0.607666495889325, -3.33787732498259e-06,-0.00211139648788761,0.275584723048787,-0.635539947386693, -3.3578223344044e-06,-0.00196074844681071,0.284819467920819,-0.663413398884061, -3.37776734393724e-06,-0.00181010040573382,0.294054212792851,-0.69128685038143, -3.3977123540252e-06,-0.00165945236465737,0.303288957664883,-0.719160301878798, -3.41765736378008e-06,-0.00150880432358003,0.312523702536916,-0.747033753376166, -3.43760237364599e-06,-0.00135815628250402,0.321758447408948,-0.774907204873535, -3.45754738451109e-06,-0.00120750824142801,0.33099319228098,-0.802780656370903, -2.15447966761539e-06,-0.00477530097020373,0.109073020878775,-0.134047143901708, -2.16677689013345e-06,-0.00463476167236698,0.118231261847959,-0.161966723136284, -2.17907411254048e-06,-0.00449422237453001,0.127389502817143,-0.18988630237086, -2.19137133533609e-06,-0.00435368307669359,0.136547743786326,-0.217805881605436, -2.20366855779863e-06,-0.00421314377885684,0.145705984755509,-0.245725460840013, -2.21596578053873e-06,-0.00407260448102031,0.154864225724693,-0.273645040074589, -2.22826300316781e-06,-0.00393206518318401,0.164022466693876,-0.301564619309165, -2.24056022557484e-06,-0.0037915258853467,0.17318070766306,-0.329484198543741, -2.25285744842596e-06,-0.00365098658751051,0.182338948632243,-0.357403777778317, -2.2651546708885e-06,-0.00351044728967387,0.191497189601427,-0.385323357012893, -2.27745189324002e-06,-0.00336990799183656,0.200655430570611,-0.41324293624747, -2.2897491158691e-06,-0.00322936869400037,0.209813671539794,-0.441162515482046, -2.30204633844266e-06,-0.00308882939616351,0.218971912508977,-0.469082094716622, -2.31434356090521e-06,-0.00294829009832664,0.228130153478161,-0.497001673951198, -2.32664078381184e-06,-0.00280775080049023,0.237288394447344,-0.524921253185774, -2.33893800649643e-06,-0.00266721150265403,0.246446635416527,-0.55284083242035, -2.35123522906999e-06,-0.00252667220481717,0.255604876385711,-0.580760411654927, -2.36353245142151e-06,-0.00238613290698053,0.264763117354894,-0.608679990889503, -2.37582967355099e-06,-0.002245593609143,0.273921358324078,-0.636599570124079, -2.38812689645762e-06,-0.00210505431130636,0.283079599293262,-0.664519149358655, -2.40042411892016e-06,-0.00196451501347017,0.292237840262445,-0.692438728593231, -2.41272134204884e-06,-0.00182397571563353,0.301396081231629,-0.720358307827807, -2.42501856440036e-06,-0.00168343641779733,0.310554322200812,-0.748277887062384, -2.43731578664086e-06,-0.00154289711995981,0.319712563169996,-0.77619746629696, -2.44961300954749e-06,-0.00140235782212317,0.328870804139179,-0.804117045531536, -1.5531331770402e-06,-0.00474078261675359,0.108863975224288,-0.13421421309183, -1.56087352429224e-06,-0.00460766781943001,0.117966385942351,-0.16216739779983, -1.5686138719051e-06,-0.00447455302210653,0.127068796660415,-0.190120582507831, -1.57635421910163e-06,-0.00434143822478306,0.136171207378478,-0.218073767215831, -1.58409456674224e-06,-0.0042083234274598,0.145273618096541,-0.246026951923831, -1.59183491404979e-06,-0.00407520863013622,0.154376028814604,-0.273980136631832, -1.59957526157939e-06,-0.00394209383281274,0.163478439532668,-0.301933321339832, -1.60731560899796e-06,-0.0038089790354896,0.172580850250731,-0.329886506047832, -1.61505595641653e-06,-0.00367586423816602,0.181683260968794,-0.357839690755832, -1.62279630350204e-06,-0.00354274944084199,0.190785671686858,-0.385792875463833, -1.63053665125368e-06,-0.00340963464351884,0.199888082404921,-0.413746060171833, -1.63827699861674e-06,-0.0032765198461957,0.208990493122984,-0.441699244879833, -1.64601734586878e-06,-0.00314340504887145,0.218092903841048,-0.469652429587833, -1.65375769334286e-06,-0.00301029025154831,0.227195314559111,-0.497605614295834, -1.66149804081694e-06,-0.00287717545422472,0.236297725277174,-0.525558799003834, -1.66923838840205e-06,-0.00274406065690158,0.245400135995237,-0.553511983711834, -1.67697873554307e-06,-0.002610945859578,0.2545025467133,-0.581465168419835, -1.68471908268408e-06,-0.00247783106225441,0.263604957431364,-0.609418353127835, -1.69245943026919e-06,-0.00234471626493082,0.272707368149427,-0.637371537835835, -1.70019977785429e-06,-0.00221160146760724,0.281809778867491,-0.665324722543835, -1.70794012566144e-06,-0.00207848667028498,0.290912189585553,-0.693277907251836, -1.71568047235837e-06,-0.00194537187296007,0.300014600303617,-0.721231091959836, -1.72342081961041e-06,-0.00181225707563692,0.30911701102168,-0.749184276667836, -1.73116116708449e-06,-0.00167914227831378,0.318219421739743,-0.777137461375836, -1.73890151422551e-06,-0.00154602748098931,0.327321832457807,-0.805090646083837, -1.1169632548047e-06,-0.00471591413422234,0.108712239322846,-0.1343352819284, -1.121941169413e-06,-0.00458821119745223,0.117774141990799,-0.16231281927477, -1.12691908421558e-06,-0.00446050826068234,0.126836044658752,-0.19029035662114, -1.13189699885163e-06,-0.00433280532391223,0.135897947326706,-0.218267893967511, -1.13687491370973e-06,-0.00420510238714211,0.144959849994659,-0.246245431313881, -1.14185282829027e-06,-0.004077399450372,0.154021752662612,-0.274222968660251, -1.14683074303734e-06,-0.00394969651360211,0.163083655330565,-0.302200506006622, -1.15180865795095e-06,-0.00382199357683199,0.172145557998518,-0.330178043352992, -1.15678657253149e-06,-0.00369429064006188,0.181207460666472,-0.358155580699362, -1.16176448744509e-06,-0.00356658770329221,0.190269363334425,-0.386133118045733, -1.16674240202563e-06,-0.00343888476652188,0.199331266002378,-0.414110655392103, -1.17172031710577e-06,-0.00331118182975199,0.208393168670331,-0.442088192738473, -1.17669823140876e-06,-0.00318347889298121,0.217455071338285,-0.470065730084843, -1.18167614615583e-06,-0.00305577595621154,0.226516974006237,-0.498043267431214, -1.18665406068086e-06,-0.00292807301944142,0.23557887667419,-0.526020804777584, -1.19163197520589e-06,-0.00280037008267087,0.244640779342144,-0.553998342123954, -1.19660989028603e-06,-0.0026726671459012,0.253702682010097,-0.581975879470325, -1.20158780514412e-06,-0.00254496420913153,0.26276458467805,-0.609953416816695, -1.20656572011324e-06,-0.00241726127236142,0.271826487346003,-0.637930954163065, -1.21154363419418e-06,-0.00228955833559086,0.280888390013956,-0.665908491509436, -1.21652154938534e-06,-0.00216185539882119,0.28995029268191,-0.693886028855806, -1.22149946402139e-06,-0.00203415246205108,0.299012195349863,-0.721863566202176, -1.22647737854642e-06,-0.00190644952528052,0.308074098017816,-0.749841103548547, -1.23145529307145e-06,-0.0017787465885104,0.317136000685769,-0.777818640894917, -1.23643320815159e-06,-0.00165104365174118,0.326197903353722,-0.805796178241287, -7.83414222345902e-05,-0.0116289112638718,0.141662584592908,-0.120891389200109, -8.39283406746938e-05,-0.0109598102246087,0.157160732718559,-0.143991459763914, -8.95152591147141e-05,-0.0102907091853457,0.17265888084421,-0.167091530327719, -9.51021775547067e-05,-0.00962160814608259,0.188157028969861,-0.190191600891524, -0.000100689095994588,-0.00895250710681939,0.203655177095512,-0.213291671455329, -0.000106276014434692,-0.00828340606755651,0.219153325221162,-0.236391742019134, -0.000111862932874962,-0.00761430502829374,0.234651473346813,-0.259491812582939, -0.000117449851314677,-0.00694520398903031,0.250149621472464,-0.282591883146744, -0.000123036769755003,-0.00627610294976755,0.265647769598115,-0.305691953710549, -0.000128623688194773,-0.00560700191050412,0.281145917723766,-0.328792024274354, -0.000134210606634488,-0.00493790087124046,0.296644065849417,-0.351892094838159, -0.000139797525074647,-0.00426879983197748,0.312142213975068,-0.374992165401964, -0.000145384443514751,-0.00359969879271449,0.327640362100719,-0.398092235965769, -0.000150971361955077,-0.00293059775345195,0.34313851022637,-0.421192306529575, -0.000156558280394958,-0.00226149671418896,0.358636658352021,-0.44429237709338, -0.000162145198835062,-0.00159239567492575,0.374134806477672,-0.467392447657185, -0.000167732117275166,-0.000923294635662764,0.389632954603323,-0.49049251822099, -0.000173319035714825,-0.00025419359639911,0.405131102728974,-0.513592588784795, -0.00017890595415504,0.000414907442863433,0.420629250854625,-0.5366926593486, -0.000184492872595365,0.0010840084821262,0.436127398980275,-0.559792729912405, -0.00019007979103558,0.00175310952138918,0.451625547105926,-0.58289280047621, -0.00019566670947524,0.00242221056065306,0.467123695231578,-0.605992871040015, -0.000201253627915454,0.0030913115999156,0.482621843357228,-0.62909294160382, -0.000206840546355225,0.00376041263917903,0.498119991482879,-0.652193012167625, -0.000212427464795661,0.00442951367844158,0.51361813960853,-0.67529308273143, -7.76990489378682e-05,-0.0115458433149976,0.141457128654798,-0.121108633483948, -8.32042916177889e-05,-0.0108778664364927,0.156901322561119,-0.144248658146241, -8.87095342972932e-05,-0.0102098895579871,0.172345516467441,-0.167388682808533, -9.42147769772417e-05,-0.00954191267948201,0.187789710373762,-0.190528707470825, -9.97200196568016e-05,-0.00887393580097673,0.203233904280083,-0.213668732133118, -0.000105225262336306,-0.00820595892247145,0.218678098186404,-0.23680875679541, -0.00011073050501631,-0.00753798204396627,0.234122292092726,-0.259948781457702, -0.000116235747695925,-0.00687000516546088,0.249566485999047,-0.283088806119995, -0.000121740990375485,-0.00620202828695549,0.265010679905369,-0.306228830782287, -0.000127246233055045,-0.00553405140845031,0.28045487381169,-0.329368855444579, -0.000132751475734882,-0.00486607452994514,0.295899067718011,-0.352508880106872, -0.000138256718414831,-0.00419809765144019,0.311343261624332,-0.375648904769164, -0.000143761961094335,-0.0035301207729348,0.326787455530654,-0.398788929431456, -0.000149267203773618,-0.00286214389442874,0.342231649436975,-0.421928954093749, -0.000154772446453899,-0.00219416701592423,0.357675843343296,-0.445068978756041, -0.000160277689133403,-0.00152619013741884,0.373120037249618,-0.468209003418333, -0.000165782931813463,-0.000858213258914331,0.388564231155939,-0.491349028080626, -0.000171288174493189,-0.000190236380408715,0.40400842506226,-0.514489052742918, -0.000176793417172361,0.000477740498097567,0.419452618968582,-0.53762907740521, -0.00018229865985242,0.0011457173766023,0.434896812874903,-0.560769102067503, -0.000187803902531813,0.00181369425510791,0.450341006781225,-0.583909126729795, -0.000193309145211762,0.00248167113361264,0.465785200687546,-0.607049151392087, -0.000198814387891377,0.00314964801211826,0.481229394593867,-0.630189176054379, -0.000204319630571437,0.0038176248906221,0.496673588500188,-0.653329200716672, -0.000209824873250497,0.00448560176912904,0.51211778240651,-0.676469225378964, -7.68175610340871e-05,-0.0114326568479056,0.141174780546538,-0.121406109441676, -8.22115473388119e-05,-0.010766331768774,0.156544907596779,-0.144600843868951, -8.76055336435644e-05,-0.0101000066896424,0.17191503464702,-0.167795578296226, -9.29995199482891e-05,-0.00943368161051072,0.187285161697261,-0.190990312723501, -9.83935062529584e-05,-0.00876735653137894,0.202655288747502,-0.214185047150775, -0.000103787492557905,-0.00810103145224761,0.218025415797743,-0.23737978157805, -0.000109181478862685,-0.00743470637311616,0.233395542847984,-0.260574516005325, -0.000114575465167299,-0.00676838129398427,0.248765669898226,-0.2837692504326, -0.000119969451471913,-0.0061020562148526,0.264135796948467,-0.306963984859875, -0.000125363437776804,-0.00543573113572116,0.279505923998708,-0.330158719287149, -0.000130757424081807,-0.00476940605659015,0.294876051048948,-0.353353453714424, -0.000136151410386254,-0.00410308097745804,0.31024617809919,-0.376548188141699, -0.000141545396690979,-0.00343675589832637,0.325616305149431,-0.399742922568974, -0.000146939382995703,-0.00277043081919448,0.340986432199672,-0.422937656996249, -0.000152333369300539,-0.00210410574006326,0.356356559249913,-0.446132391423524, -0.000157727355605375,-0.00143778066093181,0.371726686300154,-0.469327125850798, -0.000163121341910211,-0.00077145558180014,0.387096813350395,-0.492521860278073, -0.000168515328215157,-0.000105130502668471,0.402466940400637,-0.515716594705348, -0.00017390931451966,0.000561194576463198,0.417837067450878,-0.538911329132623, -0.000179303300824163,0.00122751965559464,0.433207194501118,-0.562106063559898, -0.000184697287129332,0.00189384473472609,0.448577321551359,-0.585300797987172, -0.000190091273433723,0.00256016981385798,0.463947448601601,-0.608495532414447, -0.000195485259738781,0.00322649489298943,0.479317575651842,-0.631690266841722, -0.000200879246043284,0.00389281997212132,0.494687702702083,-0.654885001268997, -0.000206273232348009,0.00455914505125321,0.510057829752324,-0.678079735696272, -7.56168926999978e-05,-0.011279968639008,0.140789429704878,-0.121810129195623, -8.08608735217153e-05,-0.0106160952802743,0.15605861693504,-0.145079168201847, -8.61048543434606e-05,-0.00995222192154066,0.171327804165203,-0.168348207208072, -9.13488351651504e-05,-0.00928834856280691,0.186596991395366,-0.191617246214297, -9.65928159866736e-05,-0.00862447520407306,0.201866178625529,-0.214886285220522, -0.000101836796808419,-0.00796060184533942,0.217135365855692,-0.238155324226746, -0.000107080777629887,-0.00729672848660523,0.232404553085855,-0.261424363232971, -0.000112324758451576,-0.00663285512787182,0.247673740316018,-0.284693402239196, -0.000117568739273433,-0.0059689817691384,0.262942927546181,-0.307962441245421, -0.000122812720095233,-0.00530510841040477,0.278212114776344,-0.331231480251646, -0.000128056700916812,-0.00464123505167069,0.293481302006507,-0.35450051925787, -0.000133300681738557,-0.00397736169293683,0.30875048923667,-0.377769558264095, -0.000138544662560136,-0.0033134883342032,0.324019676466833,-0.40103859727032, -0.000143788643382048,-0.00264961497546978,0.339288863696996,-0.424307636276545, -0.000149032624203405,-0.00198574161673548,0.354558050927159,-0.44757667528277, -0.000154276605025094,-0.00132186825800229,0.369827238157321,-0.470845714288995, -0.000159520585847117,-0.000657994899268433,0.385096425387485,-0.494114753295219, -0.000164764566668807,5.87845946498078e-06,0.400365612617647,-0.517383792301444, -0.000170008547490497,0.000669751818198616,0.41563479984781,-0.540652831307669, -0.000175252528312075,0.0013336251769327,0.430903987077973,-0.563921870313894, -0.000180496509133099,0.00199749853566722,0.446173174308137,-0.587190909320118, -0.000185740489955455,0.00266137189439997,0.461442361538299,-0.610459948326343, -0.000190984470776923,0.00332524525313405,0.476711548768462,-0.633728987332568, -0.000196228451598501,0.00398911861186768,0.491980735998625,-0.656998026338793, -0.000201472432420524,0.00465299197060132,0.507249923228788,-0.680267065345017, -7.39979141961555e-05,-0.0110767637999118,0.140268433623546,-0.122352798324143, -7.9042448202532e-05,-0.0104165614610069,0.155401415260391,-0.145721641363983, -8.4086982208631e-05,-0.00975635912210149,0.170534396897237,-0.169090484403822, -8.91315162152573e-05,-0.00909615678319675,0.185667378534082,-0.192459327443662, -9.4176050221495e-05,-0.00843595444429157,0.200800360170928,-0.215828170483502, -9.92205842277882e-05,-0.00777575210538639,0.215933341807773,-0.239197013523341, -0.000104265118234192,-0.00711554976648143,0.231066323444619,-0.262565856563181, -0.000109309652240597,-0.00645534742757659,0.246199305081464,-0.28593469960302, -0.000114354186246668,-0.00579514508867085,0.26133228671831,-0.30930354264286, -0.000119398720253128,-0.005134942749766,0.276465268355156,-0.332672385682699, -0.000124443254259476,-0.00447474041086093,0.291598249992001,-0.356041228722539, -0.000129487788265714,-0.00381453807195586,0.306731231628846,-0.379410071762378, -0.000134532322272118,-0.00315433573305079,0.321864213265692,-0.402778914802218, -0.000139576856278745,-0.00249413339414595,0.336997194902537,-0.426147757842057, -0.00014462139028526,-0.00183393105524154,0.352130176539383,-0.449516600881897, -0.000149665924291109,-0.00117372871633559,0.367263158176228,-0.472885443921737, -0.000154710458297846,-0.000513526377431184,0.382396139813074,-0.496254286961576, -0.000159754992303918,0.000146675961474108,0.397529121449919,-0.519623130001416, -0.0001647995263101,0.000806878300379399,0.412662103086765,-0.542991973041255, -0.000169844060316393,0.00146708063928491,0.427795084723611,-0.566360816081095, -0.000174888594323241,0.00212728297818909,0.442928066360456,-0.589729659120934, -0.000179933128329313,0.00278748531709461,0.458061047997301,-0.613098502160774, -0.000184977662335606,0.00344768765599968,0.473194029634147,-0.636467345200613, -0.000190022196341788,0.00410788999490519,0.488327011270993,-0.659836188240453, -0.000195066730348414,0.00476809233380981,0.503459992907838,-0.683205031280293, -7.18444281493369e-05,-0.0108111761873713,0.139572979280439,-0.123070936765675, -7.66287251092457e-05,-0.0101564987311539,0.154524611041197,-0.146571854967693, -8.14130220691545e-05,-0.00950182127493626,0.169476242801955,-0.170072773169711, -8.61973190288134e-05,-0.00884714381871832,0.184427874562713,-0.193573691371729, -9.09816159885835e-05,-0.00819246636250082,0.199379506323472,-0.217074609573747, -9.57659129484645e-05,-0.0075377889062832,0.21433113808423,-0.240575527775765, -0.000100550209908123,-0.00688311145006515,0.229282769844989,-0.264076445977783, -0.000105334506867838,-0.00622843399384765,0.244234401605747,-0.287577364179801, -0.000110118803827775,-0.00557375653763015,0.259186033366505,-0.311078282381819, -0.000114903100787545,-0.00491907908141243,0.274137665127263,-0.334579200583837, -0.00011968739774737,-0.00426440162519492,0.289089296888022,-0.358080118785855, -0.000124471694707418,-0.00360972416897787,0.304040928648779,-0.381581036987873, -0.000129255991667243,-0.00295504671276015,0.318992560409538,-0.405081955189891, -0.000134040288626625,-0.00230036925654198,0.333944192170296,-0.428582873391909, -0.000138824585586783,-0.0016456918003247,0.348895823931055,-0.452083791593927, -0.000143608882546498,-0.000991014344106977,0.363847455691813,-0.475584709795945, -0.000148393179506434,-0.000336336887889921,0.378799087452571,-0.499085627997963, -0.000153177476465927,0.000318340568328024,0.393750719213329,-0.522586546199981, -0.000157961773425641,0.000973018024546191,0.408702350974088,-0.546087464401999, -0.000162746070385467,0.00162769548076369,0.423653982734846,-0.569588382604017, -0.000167530367345181,0.00228237293698141,0.438605614495604,-0.593089300806035, -0.000172314664304896,0.00293705039319914,0.453557246256363,-0.616590219008053, -0.000177098961265387,0.00359172784941597,0.468508878017121,-0.640091137210071, -0.00018188325822488,0.00424640530563369,0.483460509777879,-0.663592055412089, -0.000186667555184261,0.0049010827618523,0.498412141538638,-0.687092973614107, -6.90314003069792e-05,-0.0104722002027698,0.138660364701854,-0.12400280290648, -7.34845469011758e-05,-0.00982582607415372,0.153374801509756,-0.147675103622728, -7.79376934958442e-05,-0.00917945194553793,0.168089238317658,-0.171347404338977, -8.23908400900408e-05,-0.00853307781692147,0.18280367512556,-0.195019705055226, -8.68439866842374e-05,-0.00788670368830502,0.197518111933462,-0.218692005771475, -9.12971332787116e-05,-0.00724032955968901,0.212232548741364,-0.242364306487724, -9.57502798729082e-05,-0.00659395543107255,0.226946985549266,-0.266036607203973, -0.000100203426467271,-0.00594758130245654,0.241661422357168,-0.289708907920222, -0.000104656573061634,-0.00530120717384031,0.25637585916507,-0.31338120863647, -0.000109109719655998,-0.00465483304522429,0.271090295972972,-0.337053509352719, -0.000113562866250083,-0.00400845891660806,0.285804732780874,-0.360725810068968, -0.000118016012845112,-0.00336208478799249,0.300519169588776,-0.384398110785217, -0.000122469159439254,-0.00271571065937581,0.315233606396678,-0.408070411501466, -0.000126922306033284,-0.0020693365307598,0.329948043204579,-0.431742712217715, -0.000131375452627314,-0.00142296240214268,0.344662480012482,-0.455415012933963, -0.000135828599222121,-0.000776588273527334,0.359376916820384,-0.479087313650212, -0.000140281745816262,-0.000130214144910878,0.374091353628285,-0.502759614366461, -0.000144734892410292,0.0005161599837058,0.388805790436188,-0.52643191508271, -0.000149188039004544,0.00116253411232203,0.40352022724409,-0.550104215798959, -0.000153641185599573,0.00180890824093716,0.418234664051991,-0.573776516515208, -0.000158094332193714,0.00245528236955384,0.432949100859893,-0.597448817231456, -0.000162547478788189,0.00310165649816962,0.447663537667795,-0.621121117947705, -0.000167000625382552,0.00374803062678586,0.462377974475697,-0.644793418663954, -0.000171453771976915,0.00439440475540209,0.477092411283599,-0.668465719380203, -0.000175906918571167,0.00504077888401788,0.491806848091501,-0.692138020096452, -6.54427559836912e-05,-0.0100525494061992,0.137489370775112,-0.125181671037007, -6.94881053941165e-05,-0.00941851850435549,0.151900710412697,-0.149070781201855, -7.35334548044864e-05,-0.00878448760251183,0.166312050050283,-0.172959891366703, -7.75788042147729e-05,-0.00815045670066783,0.180723389687868,-0.196849001531552, -8.1624153625004e-05,-0.00751642579882406,0.195134729325454,-0.2207381116964, -8.5669503035235e-05,-0.00688239489698028,0.209546068963039,-0.244627221861248, -8.97148524458546e-05,-0.00624836399513673,0.223957408600625,-0.268516332026096, -9.37602018560302e-05,-0.00561433309329273,0.23836874823821,-0.292405442190945, -9.78055512662612e-05,-0.00498030219144896,0.252780087875795,-0.316294552355793, -0.000101850900676825,-0.00434627128960541,0.267191427513381,-0.340183662520641, -0.00010589625008689,-0.00371224038776119,0.281602767150966,-0.364072772685489, -0.000109941599497287,-0.00307820948591742,0.296014106788552,-0.387961882850338, -0.000113986948907407,-0.0024441785840732,0.310425446426138,-0.411850993015186, -0.000118032298318083,-0.00181014768222987,0.324836786063723,-0.435740103180034, -0.000122077647728536,-0.00117611678038654,0.339248125701308,-0.459629213344882, -0.000126122997138767,-0.000542085878542098,0.353659465338894,-0.483518323509731, -0.000130168346549442,9.19450233007879e-05,0.368070804976479,-0.507407433674579, -0.000134213695959118,0.00072597592514545,0.382482144614065,-0.531296543839427, -0.000138259045369793,0.001360006826989,0.39689348425165,-0.555185654004275, -0.000142304394780024,0.00199403772883233,0.411304823889235,-0.579074764169124, -0.000146349744190699,0.00262806863067588,0.425716163526821,-0.602963874333972, -0.00015039509360093,0.00326209953251988,0.440127503164406,-0.62685298449882, -0.000154440443011494,0.00389613043436299,0.454538842801991,-0.650742094663668, -0.000158485792421281,0.00453016133620832,0.468950182439578,-0.674631204828516, -0.000162531141831401,0.00516419223805231,0.483361522077163,-0.698520314993365, -6.10006916742234e-05,-0.00955241818104746,0.136029599275224,-0.126625996462491, -6.45644653196609e-05,-0.00893631688648289,0.150064975374546,-0.15078073718515, -6.81282389652926e-05,-0.00832021559191864,0.164100351473868,-0.174935477907808, -7.16920126107579e-05,-0.00770411429735429,0.17813572757319,-0.199090218630467, -7.52557862562231e-05,-0.00708801300278983,0.192171103672513,-0.223244959353126, -7.88195599014663e-05,-0.00647191170822492,0.206206479771835,-0.247399700075785, -8.23833335472646e-05,-0.00585581041366079,0.220241855871157,-0.271554440798444, -8.59471071922857e-05,-0.00523970911909566,0.23427723197048,-0.295709181521103, -8.9510880837973e-05,-0.00462360782453164,0.248312608069802,-0.319863922243762, -9.30746544831051e-05,-0.00400750652996651,0.262347984169125,-0.344018662966421, -9.66384281291255e-05,-0.00339140523540271,0.276383360268447,-0.36817340368908, -0.00010020220177398,-0.00277530394083758,0.290418736367769,-0.392328144411739, -0.000103765975419834,-0.00215920264627356,0.304454112467091,-0.416482885134398, -0.000107329749065022,-0.00154310135170888,0.318489488566414,-0.440637625857057, -0.000110893522710542,-0.000927000057144189,0.332524864665736,-0.464792366579716, -0.000114457296356285,-0.000310898762580392,0.346560240765058,-0.488947107302375, -0.000118021070001584,0.000305202531984516,0.36059561686438,-0.513101848025034, -0.000121584843646771,0.00092130382654898,0.374630992963702,-0.537256588747693, -0.000125148617292625,0.00153740512111322,0.388666369063025,-0.561411329470351, -0.000128712390937147,0.00215350641567902,0.402701745162347,-0.58556607019301, -0.00013227616458289,0.00276960771024282,0.416737121261669,-0.609720810915669, -0.000135839938228743,0.0033857090048075,0.430772497360992,-0.633875551638328, -0.000139403711874597,0.0040018102993713,0.444807873460314,-0.658030292360987, -0.000142967485519341,0.00461791159393732,0.458843249559637,-0.682185033083646, -0.000146531259164751,0.00523401288850156,0.472878625658959,-0.706339773806305, -5.5703650192529e-05,-0.0089830523772978,0.134274251811519,-0.128327688174916, -5.87275555902489e-05,-0.00839205339918936,0.147860149854505,-0.152795392521159, -6.17514609882464e-05,-0.00780105442108114,0.161446047897492,-0.177263096867402, -6.47753663862716e-05,-0.00721005544297315,0.175031945940478,-0.201730801213645, -6.77992717841303e-05,-0.00661905646486483,0.188617843983464,-0.226198505559887, -7.08231771822665e-05,-0.00602805748675694,0.202203742026451,-0.25066620990613, -7.38470825800697e-05,-0.00543705850864851,0.215789640069437,-0.275133914252372, -7.68709879779839e-05,-0.0048460595305404,0.229375538112424,-0.299601618598615, -7.98948933761201e-05,-0.0042550605524323,0.24296143615541,-0.324069322944858, -8.29187987739788e-05,-0.0036640615743242,0.256547334198396,-0.348537027291101, -8.5942704172004e-05,-0.00307306259621587,0.270133232241383,-0.373004731637343, -8.89666095700292e-05,-0.00248206361810821,0.283719130284369,-0.397472435983586, -9.19905149677769e-05,-0.00189106463999944,0.297305028327356,-0.421940140329828, -9.50144203657466e-05,-0.00130006566189156,0.310890926370342,-0.446407844676071, -9.80383257632722e-05,-0.000709066683782344,0.324476824413329,-0.470875549022314, -0.000101062231161464,-0.000118067705674907,0.338062722456315,-0.495343253368556, -0.000104086136559878,0.000472931272432753,0.351648620499301,-0.519810957714799, -0.000107110041957181,0.00106393025054174,0.365234518542288,-0.544278662061042, -0.000110133947355151,0.00165492922865007,0.378820416585274,-0.568746366407284, -0.000113157852753343,0.00224592820675795,0.392406314628261,-0.593214070753527, -0.000116181758151424,0.00283692718486561,0.405992212671247,-0.61768177509977, -0.00011920566354906,0.0034279261629746,0.419578110714234,-0.642149479446012, -0.000122229568947252,0.00401892514108226,0.43316400875722,-0.666617183792255, -0.000125253474345,0.00460992411919081,0.446749906800206,-0.691084888138498, -0.000128277379742858,0.00520092309729936,0.460335804843193,-0.71555259248474, -4.96617395167875e-05,-0.00836817782865384,0.132253064403274,-0.130242626607584, -5.21170075100941e-05,-0.00781059006857521,0.14532472226681,-0.155062513471054, -5.45722755033728e-05,-0.0072530023084969,0.158396380130346,-0.179882400334524, -5.70275434969014e-05,-0.00669541454841849,0.171468037993881,-0.204702287197994, -5.94828114901524e-05,-0.00613782678833974,0.184539695857417,-0.229522174061464, -6.19380794834035e-05,-0.00558023902826121,0.197611353720953,-0.254342060924934, -6.4393347476599e-05,-0.00502265126818258,0.210683011584489,-0.279161947788404, -6.68486154701831e-05,-0.00446506350810427,0.223754669448024,-0.303981834651874, -6.93038834631565e-05,-0.00390747574802552,0.23682632731156,-0.328801721515344, -7.17591514568516e-05,-0.00334988798794744,0.249897985175096,-0.353621608378814, -7.42144194501582e-05,-0.00279230022786892,0.262969643038631,-0.378441495242285, -7.66696874434647e-05,-0.00223471246779017,0.276041300902167,-0.403261382105755, -7.91249554369378e-05,-0.00167712470771209,0.289112958765703,-0.428081268969225, -8.15802234301888e-05,-0.00111953694763356,0.302184616629239,-0.452901155832695, -8.40354914234398e-05,-0.000561949187554811,0.315256274492774,-0.477721042696165, -8.64907594170239e-05,-4.36142747672896e-06,0.32832793235631,-0.502540929559635, -8.89460274100529e-05,0.000553226332601797,0.341399590219845,-0.527360816423105, -9.14012954035259e-05,0.00111081409268077,0.354471248083382,-0.552180703286575, -9.385656339711e-05,0.00166840185275863,0.367542905946917,-0.577000590150046, -9.63118313906941e-05,0.00222598961283715,0.380614563810453,-0.601820477013516, -9.87670993839451e-05,0.00278357737291524,0.393686221673988,-0.626640363876986, -0.00010122236737653,0.00334116513299509,0.406757879537525,-0.651460250740456, -0.000103677635370003,0.00389875289307318,0.41982953740106,-0.676280137603926, -0.000106132903363476,0.0044563406531517,0.432901195264596,-0.701100024467396, -0.000108588171356838,0.00501392841322978,0.445972853128131,-0.725919911330866, -4.31106498472444e-05,-0.00774140441284921,0.130039117898095,-0.132289312478137, -4.50083614302044e-05,-0.00722559384707899,0.142551279483455,-0.157485611956012, -4.69060730135529e-05,-0.00670978328130956,0.155063441068814,-0.182681911433887, -4.88037845968181e-05,-0.00619397271553979,0.167575602654174,-0.207878210911763, -5.07014961800833e-05,-0.00567816214977002,0.180087764239534,-0.233074510389638, -5.25992077629045e-05,-0.00516235158399958,0.192599925824894,-0.258270809867513, -5.44969193461142e-05,-0.00464654101823014,0.205112087410254,-0.283467109345389, -5.63946309291019e-05,-0.0041307304524596,0.217624248995614,-0.308663408823264, -5.82923425126447e-05,-0.0036149198866906,0.230136410580973,-0.333859708301139, -6.01900540958544e-05,-0.0030991093209205,0.242648572166333,-0.359056007779015, -6.20877656791197e-05,-0.00258329875515106,0.255160733751693,-0.38425230725689, -6.39854772621629e-05,-0.00206748818938096,0.267672895337053,-0.409448606734765, -6.58831888453726e-05,-0.0015516776236113,0.280185056922412,-0.434644906212641, -6.77809004285823e-05,-0.00103586705784142,0.292697218507772,-0.459841205690516, -6.967861201157e-05,-0.000520056492071319,0.305209380093132,-0.485037505168391, -7.15763235950018e-05,-4.24592630188236e-06,0.317721541678492,-0.510233804646267, -7.34740351782115e-05,0.000511564639467998,0.330233703263851,-0.535430104124142, -7.53717467607551e-05,0.00102737520523877,0.342745864849211,-0.560626403602018, -7.72694583445199e-05,0.00154318577100776,0.355258026434571,-0.585822703079893, -7.91671699273966e-05,0.00205899633677742,0.36777018801993,-0.611019002557768, -8.10648815107173e-05,0.00257480690254752,0.380282349605291,-0.636215302035643, -8.29625930941491e-05,0.00309061746831718,0.39279451119065,-0.661411601513519, -8.48603046766927e-05,0.00360642803408773,0.40530667277601,-0.686607900991394, -8.67580162601245e-05,0.00412223859985694,0.41781883436137,-0.71180420046927, -8.86557278433342e-05,0.00463804916562705,0.43033099594673,-0.737000499947145, -3.63868331456629e-05,-0.00713947377690205,0.127742968489222,-0.134359797139464, -3.77790412184609e-05,-0.00667232986491384,0.139678744397291,-0.159936886144286, -3.91712492913698e-05,-0.00620518595292563,0.15161452030536,-0.185513975149108, -4.05634573641955e-05,-0.00573804204093731,0.163550296213429,-0.21109106415393, -4.19556654374653e-05,-0.00527089812894943,0.175486072121498,-0.236668153158752, -4.33478735101245e-05,-0.00480375421696089,0.187421848029568,-0.262245242163574, -4.47400815835053e-05,-0.00433661030497334,0.199357623937637,-0.287822331168396, -4.61322896562755e-05,-0.00386946639298502,0.211293399845706,-0.313399420173218, -4.75244977292677e-05,-0.00340232248099692,0.223229175753775,-0.33897650917804, -4.89167058019824e-05,-0.00293517856900838,0.235164951661845,-0.364553598182862, -5.03089138752522e-05,-0.0024680346570205,0.247100727569914,-0.390130687187684, -5.17011219481889e-05,-0.00200089074503262,0.259036503477983,-0.415707776192506, -5.30933300211256e-05,-0.00153374683304408,0.270972279386053,-0.441284865197328, -5.44855380941733e-05,-0.0010666029210562,0.282908055294122,-0.46686195420215, -5.58777461671101e-05,-0.000599459009068326,0.294843831202191,-0.492439043206972, -5.72699542398247e-05,-0.000132315097079561,0.30677960711026,-0.518016132211794, -5.86621623130945e-05,0.000334828814908095,0.318715383018329,-0.543593221216616, -6.00543703859202e-05,0.000801972726896416,0.330651158926399,-0.569170310221438, -6.1446578459079e-05,0.00126911663888407,0.342586934834467,-0.59474739922626, -6.28387865322377e-05,0.00173626055087217,0.354522710742537,-0.620324488231082, -6.42309946051745e-05,0.00220340446286027,0.366458486650606,-0.645901577235904, -6.56232026785553e-05,0.00267054837484748,0.378394262558675,-0.671478666240726, -6.70154107510479e-05,0.00313769228683647,0.390330038466744,-0.697055755245548, -6.84076188239846e-05,0.00360483619882501,0.402265814374814,-0.72263284425037, -6.97998268970323e-05,0.00407198011081267,0.414201590282883,-0.748209933255191, -2.98635966270167e-05,-0.0065938869575296,0.125492570526292,-0.136341083487356, -3.08332553230206e-05,-0.00617936697725818,0.136867013534308,-0.162282557268965, -3.18029140187748e-05,-0.00576484699698687,0.148241456542323,-0.188224031050575, -3.27725727150008e-05,-0.00535032701671589,0.159615899550339,-0.214165504832184, -3.37422314108382e-05,-0.00493580703644436,0.170990342558355,-0.240106978613793, -3.47118901066756e-05,-0.00452128705617283,0.182364785566371,-0.266048452395403, -3.56815488028461e-05,-0.00410676707590207,0.193739228574386,-0.291989926177012, -3.66512074982395e-05,-0.00369224709562976,0.205113671582402,-0.317931399958621, -3.76208661945765e-05,-0.00327772711535901,0.216488114590418,-0.343872873740231, -3.85905248906915e-05,-0.00286320713508803,0.227862557598434,-0.36981434752184, -3.95601835864179e-05,-0.00244868715481639,0.239237000606449,-0.395755821303449, -4.05298422825329e-05,-0.00203416717454519,0.250611443614465,-0.421697295085058, -4.14995009785368e-05,-0.00161964719427399,0.261985886622481,-0.447638768866668, -4.24691596747628e-05,-0.00120512721400279,0.273360329630497,-0.473580242648277, -4.34388183704337e-05,-0.00079060723373181,0.284734772638512,-0.499521716429886, -4.44084770662156e-05,-0.000376087253459501,0.296109215646529,-0.525463190211496, -4.53781357624417e-05,3.84327268108109e-05,0.307483658654544,-0.551404663993105, -4.63477944582236e-05,0.000452952707082455,0.31885810166256,-0.577346137774714, -4.73174531544496e-05,0.000867472687353654,0.330232544670576,-0.603287611556324, -4.82871118500094e-05,0.00128199266762508,0.341606987678591,-0.629229085337933, -4.92567705456803e-05,0.00169651264789694,0.352981430686607,-0.655170559119542, -5.02264292421284e-05,0.00211103262816748,0.364355873694623,-0.681112032901152, -5.11960879381324e-05,0.00252555260843934,0.375730316702639,-0.707053506682761, -5.21657466340253e-05,0.00294007258871032,0.387104759710655,-0.73299498046437, -5.31354053298072e-05,0.00335459256898218,0.398479202718671,-0.75893645424598, -2.38714405217944e-05,-0.00612474157325127,0.12340583332653,-0.138138670353154, -2.45149233846498e-05,-0.00576310787245682,0.134262714435169,-0.164410744145986, -2.51584062475607e-05,-0.00540147417166226,0.145119595543808,-0.190682817938819, -2.58018891103884e-05,-0.00503984047086781,0.155976476652448,-0.216954891731652, -2.64453719731605e-05,-0.00467820677007325,0.166833357761087,-0.243226965524484, -2.70888548359327e-05,-0.00431657306927857,0.177690238869726,-0.269499039317317, -2.77323376986494e-05,-0.0039549393684839,0.188547119978366,-0.295771113110149, -2.8375820561477e-05,-0.00359330566768934,0.199404001087005,-0.322043186902982, -2.90193034245267e-05,-0.00323167196689522,0.210260882195644,-0.348315260695815, -2.96627862874654e-05,-0.00287003826610088,0.221117763304283,-0.374587334488647, -3.03062691501821e-05,-0.00250840456530632,0.231974644412922,-0.40085940828148, -3.09497520128987e-05,-0.00214677086451154,0.242831525521562,-0.427131482074312, -3.15932348756709e-05,-0.00178513716371698,0.253688406630201,-0.453403555867145, -3.2236717738332e-05,-0.00142350346292197,0.264545287738841,-0.479675629659977, -3.28802006013262e-05,-0.00106186976212808,0.275402168847479,-0.50594770345281, -3.35236834638764e-05,-0.000700236061333293,0.286259049956119,-0.532219777245643, -3.41671663269816e-05,-0.000338602360539397,0.297115931064758,-0.558491851038475, -3.48106491898648e-05,2.30313402553861e-05,0.307972812173397,-0.584763924831308, -3.54541320526369e-05,0.000384665041049725,0.318829693282036,-0.61103599862414, -3.60976149156311e-05,0.000746298741844509,0.329686574390676,-0.637308072416973, -3.67410977779592e-05,0.00110793244263974,0.340543455499315,-0.663580146209806, -3.73845806413975e-05,0.00146956614343319,0.351400336607954,-0.689852220002638, -3.80280635043917e-05,0.00183119984422753,0.362257217716593,-0.716124293795471, -3.86715463659426e-05,0.00219283354502364,0.373114098825233,-0.742396367588303, -3.93150292291589e-05,0.00255446724581754,0.383970979933872,-0.768668441381136, -1.86366938105809e-05,-0.00573912733790094,0.121567614308078,-0.139692465084808, -1.90462613730846e-05,-0.00542716192069048,0.131970783245955,-0.166250302289411, -1.94558289357549e-05,-0.00511519650348025,0.142373952183832,-0.192808139494014, -1.9865396498453e-05,-0.00480323108627001,0.152777121121708,-0.219365976698617, -2.0274964060929e-05,-0.00449126566905966,0.163180290059585,-0.24592381390322, -2.0684531623516e-05,-0.00417930025184954,0.173583458997461,-0.272481651107823, -2.1094099185881e-05,-0.00386733483463853,0.183986627935338,-0.299039488312425, -2.1503666748357e-05,-0.00355536941742818,0.194389796873215,-0.325597325517028, -2.19132343111106e-05,-0.00324340400021828,0.204792965811091,-0.352155162721631, -2.23228018736976e-05,-0.00293143858300771,0.215196134748968,-0.378712999926234, -2.27323694361736e-05,-0.00261947316579736,0.225599303686844,-0.405270837130837, -2.31419369985941e-05,-0.00230750774858701,0.236002472624721,-0.43182867433544, -2.35515045611256e-05,-0.00199554233137622,0.246405641562598,-0.458386511540042, -2.39610721237682e-05,-0.00168357691416698,0.256808810500474,-0.484944348744645, -2.43706396862997e-05,-0.00137161149695619,0.267211979438351,-0.511502185949248, -2.47802072484982e-05,-0.00105964607974518,0.277615148376227,-0.538060023153851, -2.51897748111407e-05,-0.000747680662535055,0.288018317314104,-0.564617860358454, -2.55993423736722e-05,-0.000435715245324486,0.298421486251981,-0.591175697563057, -2.60089099364258e-05,-0.000123749828114139,0.308824655189857,-0.617733534767659, -2.64184774992904e-05,0.000188215589095542,0.319227824127734,-0.644291371972262, -2.68280450617109e-05,0.000500181006305667,0.32963099306561,-0.670849209176865, -2.72376126240204e-05,0.00081214642351668,0.340034162003487,-0.697407046381468, -2.76471801867739e-05,0.0011241118407268,0.350437330941364,-0.723964883586071, -2.80567477494165e-05,0.00143607725793737,0.36084049987924,-0.750522720790674, -2.84663153122811e-05,0.0017480426751475,0.371243668817117,-0.777080557995277, -1.4260055230586e-05,-0.00543356155125818,0.120019828200091,-0.140980278113756, -1.45122872499681e-05,-0.00516554912953837,0.130042494802027,-0.167774961175394, -1.47645192689616e-05,-0.0048975367078179,0.140065161403963,-0.194569644237031, -1.50167512882882e-05,-0.00462952428609797,0.150087828005898,-0.221364327298668, -1.52689833078923e-05,-0.00436151186437828,0.160110494607834,-0.248159010360306, -1.55212153267748e-05,-0.0040934994426578,0.17013316120977,-0.274953693421943, -1.57734473457127e-05,-0.00382548702093755,0.180155827811705,-0.30174837648358, -1.60256793652613e-05,-0.00355747459921774,0.190178494413641,-0.328543059545217, -1.62779113848099e-05,-0.00328946217749815,0.200201161015577,-0.355337742606855, -1.653014340397e-05,-0.00302144975577789,0.210223827617513,-0.382132425668492, -1.67823754227414e-05,-0.00275343733405742,0.220246494219448,-0.408927108730129, -1.703460744229e-05,-0.00248542491233761,0.230269160821384,-0.435721791791767, -1.7286839461228e-05,-0.00221741249061735,0.240291827423319,-0.462516474853404, -1.75390714806101e-05,-0.00194940006889754,0.250314494025255,-0.489311157915041, -1.77913034997701e-05,-0.00168138764717707,0.260337160627191,-0.516105840976678, -1.80435355188191e-05,-0.00141337522545681,0.270359827229127,-0.542900524038316, -1.82957675384232e-05,-0.00114536280373745,0.280382493831062,-0.569695207099953, -1.85479995576943e-05,-0.000877350382017195,0.290405160432998,-0.59648989016159, -1.88002315768543e-05,-0.000609337960297385,0.300427827034933,-0.623284573223228, -1.90524635962364e-05,-0.000341325538577575,0.310450493636869,-0.650079256284865, -1.93046956153964e-05,-7.33131168568768e-05,0.320473160238805,-0.676873939346502, -1.95569276342233e-05,0.000194699304863377,0.330495826840741,-0.703668622408139, -1.98091596533834e-05,0.000462711726583187,0.340518493442676,-0.730463305469777, -2.00613916727654e-05,0.000730724148303885,0.350541160044612,-0.757257988531414, -2.03136236925916e-05,0.000998736570022807,0.360563826646548,-0.784052671593051, -1.07328730314382e-05,-0.00519819406153044,0.118765218956076,-0.142010988540715, -1.08846820860431e-05,-0.00496718408670926,0.128480436889489,-0.168995232888765, -1.1036491140648e-05,-0.00473617411188787,0.138195654822903,-0.195979477236816, -1.11883001951973e-05,-0.0045051641370667,0.147910872756316,-0.222963721584867, -1.13401092496357e-05,-0.00427415416224508,0.15762609068973,-0.249947965932917, -1.14919183045181e-05,-0.00404314418742424,0.167341308623143,-0.276932210280968, -1.16437273588454e-05,-0.00381213421260274,0.177056526556556,-0.303916454629019, -1.17955364132283e-05,-0.00358112423778101,0.18677174448997,-0.330900698977069, -1.19473454683883e-05,-0.00335011426296039,0.196486962423383,-0.35788494332512, -1.20991545226046e-05,-0.00311910428813889,0.206202180356796,-0.384869187673171, -1.22509635775425e-05,-0.00288809431331805,0.215917398290209,-0.411853432021221, -1.24027726319254e-05,-0.00265708433849654,0.225632616223623,-0.438837676369272, -1.25545816863637e-05,-0.00242607436367481,0.235347834157037,-0.465821920717322, -1.27063907413572e-05,-0.0021950643888542,0.24506305209045,-0.492806165065373, -1.28581997957955e-05,-0.00196405441403269,0.254778270023863,-0.519790409413424, -1.30100088499008e-05,-0.00173304443921074,0.264493487957277,-0.546774653761474, -1.31618179046722e-05,-0.0015020344643899,0.27420870589069,-0.573758898109525, -1.33136269595546e-05,-0.00127102448956906,0.283923923824103,-0.600743142457575, -1.3465436014215e-05,-0.00104001451474733,0.293639141757517,-0.627727386805626, -1.36172450683203e-05,-0.000809004539925162,0.30335435969093,-0.654711631153677, -1.37690541234248e-05,-0.000577994565105211,0.313069577624343,-0.681695875501727, -1.39208631779741e-05,-0.000346984590283483,0.322784795557757,-0.708680119849778, -1.40726722323015e-05,-0.0001159746154622,0.33250001349117,-0.735664364197829, -1.42244812871839e-05,0.000115035359359084,0.342215231424584,-0.762648608545879, -1.43762903414002e-05,0.000346045334179923,0.351930449357996,-0.78963285289393, -7.97329846330408e-06,-0.0050206983726272,0.117779134256373,-0.142813096422442, -8.06351369583846e-06,-0.00481960848891561,0.127253302217248,-0.169944859023851, -8.15372892820632e-06,-0.00461851860520368,0.136727470178124,-0.197076621625259, -8.24394416065743e-06,-0.00441742872149198,0.146201638138999,-0.224208384226668, -8.33415939338611e-06,-0.00421633883778072,0.155675806099874,-0.251340146828076, -8.42437462572621e-06,-0.00401524895406868,0.16514997406075,-0.278471909429485, -8.51458985817732e-06,-0.00381415907035687,0.174624142021625,-0.305603672030893, -8.60480509079498e-06,-0.00361306918664561,0.1840983099825,-0.332735434632302, -8.69502032330161e-06,-0.00341197930293369,0.193572477943376,-0.35986719723371, -8.78523555536415e-06,-0.00321088941922154,0.203046645904251,-0.386998959835118, -8.87545078837038e-06,-0.00300979953551028,0.212520813865127,-0.414130722436527, -8.96566602048843e-06,-0.00280870965179836,0.221994981826002,-0.441262485037935, -9.05588125266199e-06,-0.00260761976808599,0.231469149786878,-0.468394247639344, -9.14609648561271e-06,-0.00240652988437517,0.240943317747753,-0.495526010240752, -9.23631171811934e-06,-0.00220544000066347,0.250417485708628,-0.522657772842161, -9.32652695018188e-06,-0.0020043501169511,0.259891653669504,-0.549789535443569, -9.41674218302158e-06,-0.00180326023324007,0.269365821630379,-0.576921298044978, -9.50695741586127e-06,-0.00160217034952836,0.278839989591254,-0.604053060646386, -9.59717264825688e-06,-0.00140108046581622,0.28831415755213,-0.631184823247794, -9.68738788065249e-06,-0.00119999058210496,0.297788325513005,-0.658316585849203, -9.77760311282605e-06,-0.000998900698392813,0.30726249347388,-0.685448348450612, -9.86781834555472e-06,-0.00079781081468111,0.316736661434756,-0.71258011105202, -9.95803357817238e-06,-0.000596720930969408,0.326210829395632,-0.739711873653428, -1.00482488109011e-05,-0.000395631047258593,0.335684997356506,-0.766843636254837, -1.01384640428526e-05,-0.000194541163546003,0.345159165317382,-0.793975398856246, -5.86381318926077e-06,-0.00488889587612285,0.117022668274179,-0.143423778154074, -5.91727077381421e-06,-0.0047112464395086,0.126312262852083,-0.170667853206788, -5.97072835856194e-06,-0.00453359700289468,0.135601857429986,-0.197911928259501, -6.02418594308762e-06,-0.00435594756628055,0.144891452007889,-0.225156003312214, -6.07764352777984e-06,-0.0041782981296663,0.154181046585792,-0.252400078364928, -6.13110111252757e-06,-0.00400064869305228,0.163470641163695,-0.279644153417641, -6.18455869710877e-06,-0.00382299925643825,0.172760235741598,-0.306888228470355, -6.23801628163445e-06,-0.0036453498198239,0.182049830319502,-0.334132303523068, -6.29147386627116e-06,-0.0034677003832102,0.191339424897405,-0.361376378575781, -6.34493145068582e-06,-0.0032900509465954,0.200629019475308,-0.388620453628495, -6.39838903576662e-06,-0.00311240150998193,0.209918614053211,-0.415864528681208, -6.45184662007026e-06,-0.00293475207336735,0.219208208631115,-0.443108603733922, -6.50530420442941e-06,-0.00275710263675299,0.228497803209018,-0.470352678786635, -6.55876178967674e-06,-0.00257945320013953,0.237787397786921,-0.497596753839348, -6.61221937381384e-06,-0.00240180376352517,0.247076992364824,-0.524840828892062, -6.66567695839504e-06,-0.00222415432691059,0.256366586942728,-0.552084903944775, -6.71913454353135e-06,-0.00204650489029734,0.26565618152063,-0.579328978997489, -6.77259212755743e-06,-0.00186885545368232,0.274945776098534,-0.606573054050202, -6.82604971236067e-06,-0.0016912060170684,0.284235370676437,-0.633817129102916, -6.87950729705289e-06,-0.00151355658045382,0.293524965254341,-0.661061204155629, -6.93296488174511e-06,-0.00133590714384058,0.302814559832243,-0.688305279208342, -6.98642246665937e-06,-0.00115825770722644,0.312104154410147,-0.715549354261056, -7.03988005135159e-06,-0.000980608270612304,0.32139374898805,-0.742793429313769, -7.09333763571074e-06,-0.000802958833997724,0.330683343565954,-0.770037504366483, -7.14679521995887e-06,-0.000625309397383145,0.339972938143857,-0.797281579419196, -4.27964828755845e-06,-0.00479210159281818,0.116453052555298,-0.143881008226318, -4.31151111096595e-06,-0.00463237697131769,0.125603858447749,-0.171209173939623, -4.34337393440121e-06,-0.00447265234981753,0.134754664340201,-0.198537339652928, -4.37523675778095e-06,-0.00431292772831715,0.143905470232653,-0.225865505366233, -4.40709958121621e-06,-0.00415320310681677,0.153056276125104,-0.253193671079537, -4.43896240476249e-06,-0.00399347848531673,0.162207082017556,-0.280521836792842, -4.47082522814224e-06,-0.00383375386381624,0.171357887910008,-0.307850002506147, -4.5026880515775e-06,-0.00367402924231608,0.180508693802459,-0.335178168219452, -4.53455087517929e-06,-0.00351430462081592,0.189659499694911,-0.362506333932757, -4.56641369855904e-06,-0.00335457999931554,0.198810305587362,-0.389834499646062, -4.59827652221634e-06,-0.00319485537781539,0.207961111479814,-0.417162665359367, -4.63013934548506e-06,-0.00303513075631501,0.217111917372266,-0.444490831072671, -4.66200216919788e-06,-0.00287540613481552,0.226262723264717,-0.471818996785977, -4.69386499224456e-06,-0.00271568151331381,0.235413529157169,-0.499147162499281, -4.72572781595737e-06,-0.00255595689181431,0.24456433504962,-0.526475328212586, -4.75759063889303e-06,-0.00239623227031349,0.253715140942072,-0.553803493925891, -4.78945346271686e-06,-0.00223650764881378,0.262865946834523,-0.581131659639196, -4.82131628631866e-06,-0.00207678302731362,0.272016752726975,-0.608459825352501, -4.85317910980942e-06,-0.00191705840581324,0.281167558619427,-0.635787991065806, -4.88504193318917e-06,-0.0017573337843122,0.290318364511879,-0.66311615677911, -4.91690475667994e-06,-0.00159760916281293,0.29946917040433,-0.690444322492415, -4.94876757994867e-06,-0.00143788454131233,0.308619976296781,-0.71777248820572, -4.98063040299535e-06,-0.00127815991981128,0.317770782189233,-0.745100653919025, -5.01249322704123e-06,-0.00111843529831246,0.326921588081684,-0.77242881963233, -5.04435604997688e-06,-0.000958710676811414,0.336072393974136,-0.799756985345635, -3.10574873518821e-06,-0.00472157448926613,0.116030106103755,-0.144219077599153, -3.12498907284464e-06,-0.00457530959310426,0.125077966126535,-0.171609418743631, -3.14422941033454e-06,-0.00442904469694194,0.134125826149315,-0.19899975988811, -3.16346974793547e-06,-0.00428277980078007,0.143173686172094,-0.226390101032589, -3.18271008570292e-06,-0.00413651490461797,0.152221546194874,-0.253780442177068, -3.20195042313731e-06,-0.00399025000845588,0.161269406217654,-0.281170783321546, -3.22119076090477e-06,-0.003843985112294,0.170317266240434,-0.308561124466025, -3.24043109861671e-06,-0.00369772021613213,0.179365126263213,-0.335951465610504, -3.2596714360511e-06,-0.00355145531997003,0.188412986285993,-0.363341806754983, -3.27891177376305e-06,-0.00340519042380794,0.197460846308773,-0.390732147899461, -3.29815211125295e-06,-0.00325892552764584,0.206508706331552,-0.41812248904394, -3.31739244885387e-06,-0.00311266063148352,0.215556566354332,-0.445512830188419, -3.33663278639929e-06,-0.00296639573532165,0.224604426377112,-0.472903171332897, -3.3558731239447e-06,-0.00282013083915955,0.233652286399891,-0.500293512477376, -3.37511346182318e-06,-0.00267386594299812,0.242700146422671,-0.527683853621855, -3.39435379925757e-06,-0.0025276010468358,0.25174800644545,-0.555074194766334, -3.41359413669196e-06,-0.00238133615067326,0.260795866468231,-0.582464535910813, -3.43283447412635e-06,-0.00223507125451139,0.26984372649101,-0.609854877055291, -3.45207481278198e-06,-0.0020888063583504,0.27889158651379,-0.63724521819977, -3.47131515021637e-06,-0.00194254146218809,0.287939446536569,-0.664635559344249, -3.49055548765076e-06,-0.00179627656602577,0.296987306559349,-0.692025900488727, -3.50979582541822e-06,-0.00165001166986434,0.306035166582128,-0.719416241633206, -3.52903616240852e-06,-0.00150374677370069,0.315083026604909,-0.746806582777685, -3.54827650017597e-06,-0.00135748187754015,0.324130886627688,-0.774196923922164, -3.56751683794343e-06,-0.00121121698137738,0.333178746650468,-0.801587265066642, -2.24442413485071e-06,-0.00467047220604022,0.115719317089902,-0.144466729416384, -2.25625542663033e-06,-0.00453417860675587,0.12469158770153,-0.171902617007109, -2.26808671810463e-06,-0.00439788500747085,0.133663858313158,-0.199338504597833, -2.27991800971772e-06,-0.00426159140818638,0.142636128924786,-0.226774392188558, -2.2917493013308e-06,-0.00412529780890181,0.151608399536414,-0.254210279779283, -2.30358059283287e-06,-0.00398900420961679,0.160580670148042,-0.281646167370008, -2.31541188433493e-06,-0.00385271061033232,0.16955294075967,-0.309082054960733, -2.32724317605904e-06,-0.00371641701104752,0.178525211371299,-0.336517942551458, -2.33907446739456e-06,-0.00358012341176273,0.187497481982927,-0.363953830142183, -2.35090575911867e-06,-0.00344382981247815,0.196469752594555,-0.391389717732908, -2.36273705034318e-06,-0.00330753621319291,0.205442023206184,-0.418825605323633, -2.37456834206728e-06,-0.00317124261390833,0.214414293817812,-0.446261492914358, -2.38639963390241e-06,-0.0030349490146242,0.22338656442944,-0.473697380505083, -2.3982309255155e-06,-0.00289865541533918,0.232358835041068,-0.501133268095808, -2.41006221624041e-06,-0.00276236181605372,0.241331105652696,-0.528569155686533, -2.42189350818656e-06,-0.00262606821676936,0.250303376264325,-0.556005043277258, -2.43372479991066e-06,-0.00248977461748501,0.259275646875953,-0.583440930867983, -2.44555609141273e-06,-0.00235348101820021,0.268247917487581,-0.610876818458708, -2.45738738324786e-06,-0.00221718741891586,0.277220188099209,-0.638312706049433, -2.46921867474992e-06,-0.00208089381963106,0.286192458710837,-0.665748593640157, -2.48104996558585e-06,-0.00194460022034537,0.295164729322466,-0.693184481230882, -2.492881257532e-06,-0.00180830662106102,0.304136999934094,-0.720620368821607, -2.50471254914508e-06,-0.00167201302177711,0.313109270545721,-0.748056256412333, -2.51654384053612e-06,-0.00153571942249142,0.32208154115735,-0.775492144003057, -2.5283751325933e-06,-0.00139942582320751,0.331053811768978,-0.802928031593782, -1.61701508455403e-06,-0.00463359054262125,0.115492685151383,-0.144646913928178, -1.62444550891316e-06,-0.00450461101635524,0.124409865127504,-0.172115939834917, -1.63187593338332e-06,-0.00437563149008913,0.133327045103625,-0.199584965741655, -1.63930635782572e-06,-0.00424665196382312,0.142244225079746,-0.227053991648394, -1.64673678221261e-06,-0.00411767243755701,0.151161405055867,-0.254523017555133, -1.65416720676603e-06,-0.00398869291129123,0.160078585031988,-0.281992043461872, -1.66159763098639e-06,-0.00385971338502467,0.16899576500811,-0.309461069368611, -1.66902805531777e-06,-0.00373073385875888,0.17791294498423,-0.33693009527535, -1.67645847970466e-06,-0.00360175433249266,0.186830124960351,-0.364399121182089, -1.68388890409155e-06,-0.00347277480622621,0.195747304936473,-0.391868147088828, -1.69131932875599e-06,-0.00334379527996087,0.204664484912593,-0.419337172995567, -1.69874975308737e-06,-0.00321481575369464,0.213581664888715,-0.446806198902306, -1.70618017758528e-06,-0.00308583622742886,0.222498844864835,-0.474275224809045, -1.71361060208319e-06,-0.00295685670116286,0.231416024840956,-0.501744250715784, -1.72104102613702e-06,-0.00282787717489619,0.240333204817078,-0.529213276622522, -1.72847145074595e-06,-0.00269889764863018,0.249250384793199,-0.556682302529261, -1.73590187513284e-06,-0.0025699181223644,0.25816756476932,-0.584151328436, -1.74333229963075e-06,-0.0024409385960984,0.267084744745441,-0.611620354342739, -1.7507627237956e-06,-0.00231195906983217,0.276001924721561,-0.639089380249478, -1.75819314807146e-06,-0.00218297954356572,0.284919104697683,-0.666558406156217, -1.76562357279142e-06,-0.00205400001730016,0.293836284673804,-0.694027432062956, -1.77305399695626e-06,-0.00192502049103371,0.302753464649925,-0.721496457969695, -1.78048442101009e-06,-0.00179604096476726,0.311670644626046,-0.748965483876434, -1.78791484584107e-06,-0.0016670614385017,0.320587824602167,-0.776434509783173, -1.79534527022795e-06,-0.0015380819122357,0.329505004578288,-0.803903535689912, -1.16240584427385e-06,-0.00460704651822252,0.115328342070984,-0.144777362090541, -1.16717554787815e-06,-0.00448339330890912,0.124205588726908,-0.172270379140496, -1.17194525128816e-06,-0.00435974009959517,0.133082835382833,-0.199763396190452, -1.1767149548092e-06,-0.00423608689028143,0.141960082038757,-0.227256413240407, -1.18148465860779e-06,-0.00411243368096836,0.150837328694681,-0.254749430290363, -1.18625436212882e-06,-0.00398878047165452,0.159714575350606,-0.282242447340318, -1.19102406553884e-06,-0.00386512726234067,0.168591822006531,-0.309735464390273, -1.19579376944845e-06,-0.00374147405302749,0.177469068662455,-0.337228481440229, -1.20056347291397e-06,-0.00361782084371387,0.186346315318379,-0.364721498490184, -1.20533317649052e-06,-0.00349416763440002,0.195223561974304,-0.39221451554014, -1.21010288028911e-06,-0.00337051442508707,0.204100808630228,-0.419707532590095, -1.21487258364361e-06,-0.00324686121577322,0.212978055286152,-0.44720054964005, -1.21964228705362e-06,-0.00312320800645915,0.221855301942077,-0.474693566690006, -1.22441199090773e-06,-0.00299955479714575,0.230732548598002,-0.502186583739961, -1.22918169453978e-06,-0.00287590158783235,0.239609795253926,-0.529679600789916, -1.23395139783877e-06,-0.00275224837851806,0.248487041909851,-0.557172617839872, -1.23872110158185e-06,-0.00262859516920511,0.257364288565775,-0.584665634889827, -1.24349080532493e-06,-0.00250494195989193,0.266241535221699,-0.612158651939783, -1.24826050884597e-06,-0.00238128875057786,0.275118781877624,-0.639651668989738, -1.25303021247802e-06,-0.00225763554126424,0.283996028533548,-0.667144686039693, -1.25779991599906e-06,-0.00213398233195061,0.292873275189473,-0.694637703089649, -1.26256961985316e-06,-0.00201032912263743,0.301750521845397,-0.722130720139604, -1.26733932326317e-06,-0.00188667591332292,0.310627768501322,-0.749623737189559, -1.27210902689523e-06,-0.00176302270401019,0.319505015157246,-0.777116754239515, -1.27687873019422e-06,-0.00163936949469612,0.328382261813171,-0.80460977128947, -8.73291886486771e-05,-0.0127624485212806,0.151902411475711,-0.127284967931506, -9.34580568415777e-05,-0.0120993984572826,0.16758783910667,-0.149638100422294, -9.95869250347003e-05,-0.0114363483932849,0.183273266737629,-0.171991232913083, -0.000105715793227823,-0.0107732983292872,0.198958694368588,-0.194344365403871, -0.000111844661420668,-0.0101102482652893,0.214644121999547,-0.216697497894659, -0.000117973529613624,-0.0094471982012917,0.230329549630505,-0.239050630385448, -0.000124102397806525,-0.00878414813729345,0.246014977261465,-0.261403762876236, -0.000130231265999703,-0.00812109807329597,0.261700404892424,-0.283756895367024, -0.000136360134192937,-0.0074580480092985,0.277385832523382,-0.306110027857813, -0.000142489002385615,-0.00679499794530014,0.293071260154341,-0.328463160348601, -0.000148617870578516,-0.00613194788130222,0.3087566877853,-0.350816292839389, -0.000154746738771361,-0.00546889781730409,0.32444211541626,-0.373169425330177, -0.000160875606964317,-0.00480584775330617,0.340127543047218,-0.395522557820966, -0.000167004475157606,-0.0041427976893087,0.355812970678177,-0.417875690311754, -0.00017313334335034,-0.00347974762531078,0.371498398309136,-0.440228822802542, -0.000179262211543407,-0.00281669756131331,0.387183825940095,-0.462581955293331, -0.000185391079736252,-0.00215364749731495,0.402869253571054,-0.484935087784119, -0.000191519947929319,-0.00149059743331703,0.418554681202013,-0.507288220274907, -0.000197648816121943,-0.000827547369319115,0.434240108832972,-0.529641352765695, -0.000203777684315898,-0.000164497305322531,0.449925536463931,-0.551994485256484, -0.000209906552507744,0.00049855275867694,0.46561096409489,-0.574347617747272, -0.000216035420701588,0.0011616028226733,0.481296391725848,-0.596700750238061, -0.0002221642888941,0.00182465288667188,0.496981819356807,-0.619053882728849, -0.000228293157086945,0.00248770295067002,0.512667246987767,-0.641407015219637, -0.000234422025280234,0.00315075301466727,0.528352674618725,-0.663760147710425, -8.656088771547e-05,-0.0126556753030974,0.151651922568162,-0.127555576576485, -9.25941748554093e-05,-0.0119932199685446,0.1672765765241,-0.149954550029706, -9.86274619952376e-05,-0.0113307646339917,0.182901230480038,-0.172353523482928, -0.000104660749135455,-0.0106683092994392,0.198525884435976,-0.194752496936149, -0.000110694036275394,-0.0100058539648865,0.214150538391914,-0.217151470389371, -0.000116727323415555,-0.00934339863033407,0.229775192347852,-0.239550443842592, -0.000122760610555384,-0.00868094329578128,0.24539984630379,-0.261949417295814, -0.000128793897695378,-0.00801848796122862,0.261024500259728,-0.284348390749035, -0.00013482718483554,-0.00735603262667617,0.276649154215666,-0.306747364202256, -0.000140860471975313,-0.00669357729212283,0.292273808171605,-0.329146337655478, -0.000146893759115585,-0.00603112195757061,0.307898462127543,-0.351545311108699, -0.000152927046255469,-0.00536866662301794,0.323523116083481,-0.373944284561921, -0.000158960333395464,-0.00470621128846505,0.339147770039419,-0.396343258015142, -0.000164993620535681,-0.0040437559539126,0.354772423995357,-0.418742231468364, -0.000171026907675897,-0.00338130061936015,0.370397077951295,-0.441141204921585, -0.000177060194815448,-0.00271884528480704,0.386021731907233,-0.463540178374807, -0.000183093481955776,-0.00205638995025481,0.401646385863171,-0.485939151828028, -0.000189126769095771,-0.00139393461570192,0.417271039819109,-0.508338125281249, -0.000195160056235766,-0.000731479281149472,0.432895693775047,-0.530737098734471, -0.000201193343375428,-6.90239465961362e-05,0.448520347730985,-0.553136072187692, -0.000207226630516311,0.000593431387955423,0.464145001686923,-0.575535045640914, -0.000213259917655639,0.0012558867225092,0.479769655642861,-0.597934019094135, -0.000219293204796189,0.00191834205706076,0.495394309598799,-0.620332992547356, -0.000225326491934852,0.00258079739161543,0.511018963554738,-0.642731966000578, -0.000231359779075513,0.00324325272616699,0.526643617510675,-0.665130939453799, -8.55080122962038e-05,-0.0125105253220902,0.151308041069526,-0.127925490462723, -9.14113310258036e-05,-0.0118490322212319,0.166849370103956,-0.150387127134128, -9.73146497552646e-05,-0.0111875391203735,0.182390699138386,-0.172848763805533, -0.000103217968484504,-0.0105260460195149,0.197932028172816,-0.195310400476937, -0.000109121287213965,-0.00986455291865618,0.213473357207247,-0.217772037148342, -0.000115024605943592,-0.00920305981779801,0.229014686241677,-0.240233673819746, -0.000120927924672942,-0.00854156671693929,0.244556015276107,-0.262695310491151, -0.000126831243402625,-0.00788007361608134,0.260097344310537,-0.285156947162556, -0.000132734562131809,-0.00721858051522228,0.275638673344968,-0.30761858383396, -0.000138637880861492,-0.00655708741436434,0.291180002379398,-0.330080220505365, -0.000144541199591286,-0.00589559431350595,0.306721331413828,-0.35254185717677, -0.000150444518320469,-0.00523410121264756,0.322262660448258,-0.375003493848174, -0.000156347837049875,-0.0045726081117885,0.337803989482688,-0.397465130519579, -0.000162251155779392,-0.00391111501093011,0.353345318517119,-0.419926767190984, -0.000168154474508686,-0.00324962191007194,0.368886647551548,-0.442388403862388, -0.000174057793238536,-0.00258812880921355,0.384427976585979,-0.464850040533793, -0.000179961111968385,-0.00192663570835561,0.399969305620409,-0.487311677205198, -0.000185864430697014,-0.00126514260749633,0.415510634654839,-0.509773313876602, -0.000191767749426863,-0.000603649506638604,0.431051963689269,-0.532234950548007, -0.000197671068156047,5.78435942206745e-05,0.4465932927237,-0.554696587219412, -0.000203574386886118,0.000719336695078177,0.462134621758129,-0.577158223890816, -0.000209477705615302,0.00138082979593701,0.47767595079256,-0.599619860562221, -0.000215381024344818,0.00204232289679496,0.493217279826989,-0.622081497233625, -0.000221284343074779,0.00270381599765335,0.50875860886142,-0.64454313390503, -0.000227187661803518,0.00336530909851263,0.52429993789585,-0.667004770576434, -8.40765343565752e-05,-0.0123153346921183,0.150839373759823,-0.128426721198822, -8.98050404665729e-05,-0.0116554206815792,0.166267338987168,-0.150973266093856, -9.55335465764873e-05,-0.0109955066710401,0.181695304214512,-0.173519810988889, -0.000101262052686402,-0.0103355926605008,0.197123269441857,-0.196066355883923, -0.000106990558796427,-0.00967567864996166,0.212551234669201,-0.218612900778957, -0.000112719064906508,-0.00901576463942277,0.227979199896546,-0.24115944567399, -0.000118447571016311,-0.00835585062888344,0.24340716512389,-0.263705990569024, -0.000124176077126781,-0.00769593661834467,0.258835130351235,-0.286252535464058, -0.000129904583236029,-0.007036022607805,0.274263095578579,-0.308799080359092, -0.000135633089346276,-0.00637610859726601,0.289691060805924,-0.331345625254125, -0.000141361595455747,-0.00571619458672634,0.305119026033268,-0.353892170149159, -0.000147090101566105,-0.00505628057618757,0.320546991260613,-0.376438715044193, -0.000152818607675909,-0.00439636656564857,0.335974956487957,-0.398985259939227, -0.000158547113785823,-0.00373645255510913,0.351402921715302,-0.42153180483426, -0.000164275619895626,-0.00307653854456991,0.366830886942646,-0.444078349729294, -0.000170004126005985,-0.00241662453403158,0.38225885216999,-0.466624894624328, -0.000175732632115233,-0.00175671052349102,0.397686817397336,-0.489171439519362, -0.000181461138225147,-0.00109679651295203,0.41311478262468,-0.511717984414395, -0.000187189644335728,-0.000436882502413471,0.428542747852024,-0.534264529309429, -0.000192918150445087,0.000223031508126414,0.443970713079369,-0.556811074204463, -0.000198646656555335,0.000882945518665412,0.459398678306714,-0.579357619099497, -0.000204375162665471,0.00154285952920397,0.474826643534058,-0.60190416399453, -0.000210103668775163,0.00220277353974385,0.490254608761402,-0.624450708889564, -0.000215832174885411,0.00286268755028196,0.505682573988746,-0.646997253784598, -0.000221560680994881,0.00352260156082229,0.521110539216092,-0.669543798679631, -8.21511521776341e-05,-0.0120566655294801,0.150206964936421,-0.129097847323293, -8.76479867296109e-05,-0.0113993623803532,0.165482313665983,-0.151758080631578, -9.31448212816988e-05,-0.0107420592312264,0.180757662395545,-0.174418313939864, -9.86416558337311e-05,-0.0100847560820992,0.196033011125107,-0.197078547248149, -0.000104138490385652,-0.00942745293297198,0.211308359854669,-0.219738780556434, -0.000109635324937685,-0.00877014978384527,0.226583708584231,-0.24239901386472, -0.000115132159489939,-0.00811284663471845,0.241859057313794,-0.265059247173005, -0.000120628994041971,-0.00745554348559141,0.257134406043356,-0.28771948048129, -0.000126125828593893,-0.00679824033646415,0.272409754772918,-0.310379713789576, -0.00013162266314598,-0.00614093718733755,0.28768510350248,-0.333039947097861, -0.00013711949769768,-0.00548363403821006,0.302960452232042,-0.355700180406146, -0.00014261633224999,-0.00482633088908324,0.318235800961604,-0.378360413714431, -0.000148113166802299,-0.00416902773995664,0.333511149691166,-0.401020647022717, -0.000153610001353832,-0.00351172459082871,0.348786498420729,-0.423680880331002, -0.00015910683590592,-0.00285442144170234,0.364061847150291,-0.446341113639288, -0.000164603670457897,-0.00219711829257552,0.379337195879853,-0.469001346947573, -0.000170100505009874,-0.00153981514344803,0.394612544609415,-0.491661580255858, -0.000175597339562183,-0.000882511994321211,0.409887893338977,-0.514321813564143, -0.000181094174114271,-0.000225208845194613,0.425163242068539,-0.536982046872429, -0.000186591008666359,0.000432094303932207,0.440438590798101,-0.559642280180714, -0.000192087843218003,0.00108939745305969,0.455713939527663,-0.582302513488999, -0.000197584677770202,0.00174670060218673,0.470989288257226,-0.604962746797284, -0.00020308151232229,0.00240400375131378,0.486264636986788,-0.62762298010557, -0.000208578346874155,0.00306130690044037,0.50153998571635,-0.650283213413855, -0.000214075181426243,0.00371861004956786,0.516815334445912,-0.67294344672214, -7.9598691956756e-05,-0.0117204850187089,0.149365022520053,-0.129982272811832, -8.47945646269554e-05,-0.0110674919238278,0.164437803124756,-0.152792327333694, -8.99904372966831e-05,-0.0104144988289463,0.17951058372946,-0.175602381855556, -9.51863099667993e-05,-0.00976150573406531,0.194583364334164,-0.198412436377418, -0.00010038218263686,-0.00910851263918422,0.209656144938868,-0.22122249089928, -0.000105578055306865,-0.00845551954430324,0.224728925543571,-0.244032545421142, -0.000110773927976981,-0.00780252644942214,0.239801706148275,-0.266842599943004, -0.000115969800647042,-0.00714953335454105,0.254874486752979,-0.289652654464866, -0.000121165673316936,-0.00649654025965951,0.269947267357683,-0.312462708986727, -0.000126361545986609,-0.00584354716477797,0.285020047962387,-0.335272763508589, -0.000131557418656891,-0.00519055406989732,0.30009282856709,-0.358082818030451, -0.000136753291327008,-0.00453756097501623,0.315165609171794,-0.380892872552313, -0.000141949163996791,-0.00388456788013491,0.330238389776498,-0.403702927074175, -0.000147145036666907,-0.00323157478525382,0.345311170381202,-0.426512981596037, -0.00015234090933669,-0.00257858169037251,0.360383950985905,-0.449323036117899, -0.000157536782006695,-0.00192558859549119,0.375456731590609,-0.472133090639761, -0.000162732654677367,-0.00127259550061121,0.390529512195313,-0.494943145161623, -0.000167928527346595,-0.000619602405728337,0.405602292800017,-0.517753199683485, -0.000173124400017155,3.33906891516467e-05,0.42067507340472,-0.540563254205346, -0.000178320272686827,0.000686383784033406,0.435747854009424,-0.563373308727208, -0.00018351614535661,0.0013393768789145,0.450820634614128,-0.58618336324907, -0.000188712018027282,0.00199236997379471,0.465893415218831,-0.608993417770932, -0.00019390789069651,0.00264536306867713,0.480966195823535,-0.631803472292794, -0.00019910376336707,0.00329835616355734,0.496038976428239,-0.654613526814656, -0.000204299636036853,0.00395134925843887,0.511111757032943,-0.677423581336518, -7.62792891767228e-05,-0.0112945458857542,0.148264101903325,-0.131123667596917, -8.10943977086476e-05,-0.01064857893753,0.163073027057669,-0.154127073796322, -8.59095062408777e-05,-0.0100026119893064,0.177881952212014,-0.177130479995727, -9.07246147730523e-05,-0.00935664504108236,0.192690877366359,-0.200133886195133, -9.55397233051158e-05,-0.00871067809285875,0.207499802520703,-0.223137292394539, -0.00010035483183729,-0.00806471114463458,0.222308727675048,-0.246140698593944, -0.000105169940369076,-0.00741874419641042,0.237117652829393,-0.269144104793349, -0.000109985048901251,-0.00677277724818648,0.251926577983738,-0.292147510992755, -0.000114800157433426,-0.00612681029996276,0.266735503138082,-0.31515091719216, -0.000119615265965489,-0.00548084335173882,0.281544428292427,-0.338154323391566, -0.00012443037449783,-0.00483487640351488,0.296353353446771,-0.361157729590971, -0.000129245483029838,-0.00418890945529138,0.311162278601116,-0.384161135790377, -0.000134060591561846,-0.00354294250706721,0.325971203755461,-0.407164541989783, -0.000138875700094188,-0.00289697555884327,0.340780128909806,-0.430167948189188, -0.000143690808625863,-0.00225100861061889,0.35558905406415,-0.453171354388594, -0.000148505917158426,-0.00160504166239539,0.370397979218495,-0.476174760587999, -0.000153321025690656,-0.000959074714171892,0.385206904372839,-0.499178166787405, -0.000158136134222553,-0.000313107765947507,0.400015829527184,-0.52218157298681, -0.000162951242754339,0.000332859182276657,0.414824754681529,-0.545184979186215, -0.000167766351286791,0.000978826130500376,0.429633679835874,-0.568188385385621, -0.000172581459819021,0.0016247930787241,0.444442604990218,-0.591191791585027, -0.000177396568350918,0.00227076002694782,0.459251530144563,-0.614195197784432, -0.000182211676882593,0.00291672697517287,0.474060455298908,-0.637198603983837, -0.000187026785414601,0.00356269392339659,0.488869380453252,-0.660202010183243, -0.000191841893946942,0.00420866087162119,0.503678305607598,-0.683205416382648, -7.20690026665693e-05,-0.0107721304816955,0.146858109530938,-0.132557585748381, -7.64187099734359e-05,-0.0101373334437707,0.16133167394459,-0.155803896930067, -8.07684172806078e-05,-0.00950253640584642,0.175805238358242,-0.179050208111753, -8.51181245872246e-05,-0.0088677393679214,0.190278802771894,-0.202296519293439, -8.94678318940079e-05,-0.0082329423299965,0.204752367185546,-0.225542830475125, -9.38175392010132e-05,-0.00759814529207226,0.219225931599198,-0.248789141656811, -9.8167246507963e-05,-0.00696334825414757,0.23369949601285,-0.272035452838497, -0.000102516953814635,-0.00632855121622278,0.248173060426502,-0.295281764020183, -0.000106866661121807,-0.00569375417829843,0.262646624840154,-0.318528075201869, -0.000111216368428646,-0.00505895714037363,0.277120189253806,-0.341774386383555, -0.000115566075735485,-0.00442416010244906,0.291593753667458,-0.365020697565241, -0.000119915783042379,-0.00378936306452426,0.30606731808111,-0.388267008746927, -0.00012426549034894,-0.00315456602659925,0.320540882494762,-0.411513319928613, -0.000128615197656057,-0.00251976898867512,0.335014446908414,-0.434759631110299, -0.000132964904963062,-0.0018849719507501,0.349488011322066,-0.458005942291985, -0.000137314612269512,-0.00125017491282531,0.363961575735718,-0.481252253473671, -0.000141664319576518,-0.000615377874900513,0.37843514014937,-0.504498564655357, -0.000146014026883745,1.94191630233931e-05,0.392908704563022,-0.527744875837043, -0.000150363734190528,0.000654216200948632,0.407382268976674,-0.550991187018729, -0.000154713441497201,0.00128901323887343,0.421855833390326,-0.574237498200415, -0.000159063148804206,0.00192381027679822,0.436329397803979,-0.597483809382101, -0.0001634128561111,0.00255860731472213,0.45080296221763,-0.620730120563787, -0.000167762563417884,0.00319340435264737,0.465276526631282,-0.643976431745472, -0.000172112270724556,0.00382820139057216,0.479750091044934,-0.667222742927159, -0.000176461978032005,0.00446299842849607,0.494223655458586,-0.690469054108844, -6.68952954001878e-05,-0.010156644295174,0.14511596475665,-0.13429931895994, -7.07005536468297e-05,-0.00953893425820018,0.159176361672187,-0.157840678833533, -7.45058118937769e-05,-0.00892122422122676,0.173236758587724,-0.181382038707125, -7.83110701403356e-05,-0.00830351418425301,0.187297155503261,-0.204923398580718, -8.21163283871162e-05,-0.00768580414727915,0.201357552418798,-0.22846475845431, -8.59215866339524e-05,-0.00706809411030562,0.215417949334335,-0.252006118327903, -8.97268448806776e-05,-0.00645038407333187,0.229478346249873,-0.275547478201496, -9.35321031275693e-05,-0.00583267403635834,0.243538743165409,-0.299088838075088, -9.73373613737949e-05,-0.00521496399938415,0.257599140080947,-0.322630197948681, -0.000101142619620631,-0.00459725396241062,0.271659536996483,-0.346171557822274, -0.000104947877867301,-0.00397954392543665,0.285719933912021,-0.369712917695866, -0.000108753136114581,-0.00336183388846356,0.299780330827558,-0.393254277569459, -0.000112558394360973,-0.00274412385148959,0.313840727743095,-0.416795637443052, -0.000116363652607809,-0.00212641381451606,0.327901124658631,-0.440336997316644, -0.000120168910854535,-0.00150870377754231,0.341961521574168,-0.463878357190237, -0.000123974169101371,-0.00089099374056878,0.356021918489706,-0.48741971706383, -0.000127779427347763,-0.000273283703594585,0.370082315405243,-0.510961076937422, -0.000131584685594821,0.000344426333379166,0.38414271232078,-0.534502436811015, -0.000135389943841213,0.000962136370352695,0.398203109236317,-0.558043796684608, -0.000139195202088049,0.001579846407326,0.412263506151853,-0.5815851565582, -0.000143000460335108,0.00219755644429931,0.42632390306739,-0.605126516431793, -0.000146805718581722,0.0028152664812735,0.440384299982927,-0.628667876305386, -0.000150610976828891,0.00343297651824681,0.454444696898464,-0.652209236178978, -0.000154416235075172,0.00405068655522145,0.468505093814002,-0.675750596052571, -0.000158221493322341,0.00466839659219387,0.482565490729538,-0.699291955926163, -6.0780462052018e-05,-0.00946545187349679,0.143036825947692,-0.136330413343041, -6.39823372760584e-05,-0.00887255943138299,0.156607356780888,-0.160215839539132, -6.71842125000155e-05,-0.00827966698926896,0.170177887614084,-0.184101265735222, -7.03860877238061e-05,-0.00768677454715472,0.183748418447281,-0.207986691931312, -7.35879629475966e-05,-0.00709388210504058,0.197318949280477,-0.231872118127402, -7.67898381713872e-05,-0.00650098966292656,0.210889480113673,-0.255757544323493, -7.99917133952888e-05,-0.00590809722081254,0.224460010946869,-0.279642970519583, -8.31935886192459e-05,-0.0053152047786984,0.238030541780065,-0.303528396715674, -8.6395463843314e-05,-0.00472231233658471,0.251601072613261,-0.327413822911764, -8.95973390669935e-05,-0.00412941989447035,0.265171603446458,-0.351299249107854, -9.27992142909506e-05,-0.00353652745235622,0.278742134279654,-0.375184675303945, -9.60010895147967e-05,-0.00294363501024231,0.29231266511285,-0.399070101500035, -9.92029647391979e-05,-0.00235074256812884,0.305883195946046,-0.422955527696125, -0.000102404839962378,-0.00175785012601404,0.319453726779242,-0.446840953892216, -0.000105606715186668,-0.00116495768390057,0.333024257612438,-0.470726380088306, -0.000108808590410403,-0.000572065241786213,0.346594788445635,-0.494611806284396, -0.00011201046563436,2.08272003276999e-05,0.360165319278831,-0.518497232480487, -0.000115212340858095,0.000613719642441835,0.373735850112027,-0.542382658676577, -0.000118414216081719,0.00120661208455619,0.387306380945223,-0.566268084872667, -0.000121616091305676,0.00179950452667033,0.400876911778419,-0.590153511068757, -0.000124817966529855,0.00239239696878402,0.414447442611616,-0.614038937264848, -0.000128019841753702,0.00298528941089815,0.428017973444812,-0.637924363460938, -0.000131221716976992,0.00357818185301317,0.441588504278008,-0.661809789657028, -0.000134423592201283,0.00417107429512598,0.455159035111204,-0.685695215853119, -0.000137625467425462,0.00476396673723967,0.4687295659444,-0.709580642049209, -5.38781856682657e-05,-0.00873048154270528,0.140664345468733,-0.138589310431118, -5.64530216378145e-05,-0.00817139984803095,0.153679878558344,-0.162857392608368, -5.90278576074188e-05,-0.00761231815335672,0.166695411647955,-0.187125474785619, -6.16026935769121e-05,-0.00705323645868217,0.179710944737566,-0.21139355696287, -6.41775295465163e-05,-0.00649415476400783,0.192726477827178,-0.235661639140121, -6.67523655160651e-05,-0.0059350730693335,0.205742010916789,-0.259929721317371, -6.93272014853363e-05,-0.00537599137465872,0.2187575440064,-0.284197803494622, -7.19020374552182e-05,-0.00481690967998483,0.231773077096011,-0.308465885671873, -7.44768734245449e-05,-0.00425782798531027,0.244788610185622,-0.332733967849124, -7.70517093943157e-05,-0.00369874629063616,0.257804143275233,-0.357002050026375, -7.96265453638645e-05,-0.00313966459596182,0.270819676364844,-0.381270132203625, -8.22013813331912e-05,-0.00258058290128682,0.283835209454456,-0.405538214380876, -8.47762173025179e-05,-0.00202150120661226,0.296850742544067,-0.429806296558127, -8.73510532720667e-05,-0.00146241951193793,0.309866275633678,-0.454074378735378, -8.99258892417265e-05,-0.000903337817263816,0.322881808723289,-0.478342460912629, -9.25007252112753e-05,-0.000344256122589481,0.335897341812901,-0.50261054308988, -9.50755611812681e-05,0.000214825572083965,0.348912874902511,-0.52687862526713, -9.76503971504838e-05,0.000773907266759188,0.361928407992123,-0.551146707444381, -0.000100225233120366,0.0013329889614333,0.374943941081734,-0.575414789621632, -0.000102800069089248,0.00189207065610786,0.387959474171345,-0.599682871798883, -0.000105374905059352,0.00245115235078242,0.400975007260957,-0.623950953976133, -0.000107949741028457,0.00301023404545697,0.413990540350567,-0.648219036153384, -0.00011052457699845,0.00356931574013064,0.427006073440178,-0.672487118330635, -0.000113099412967888,0.0041283974348052,0.44002160652979,-0.696755200507886, -0.000115674248937658,0.00468747912947931,0.453037139619401,-0.721023282685136, -4.64810320248976e-05,-0.00799368659322441,0.138092214199511,-0.140972902274679, -4.84502474501491e-05,-0.00747740205714353,0.150510477396081,-0.165644763659224, -5.04194628750954e-05,-0.00696111752106221,0.162928740592652,-0.19031662504377, -5.23886783001526e-05,-0.00644483298498111,0.175347003789223,-0.214988486428315, -5.43578937252098e-05,-0.0059285484488999,0.187765266985793,-0.239660347812861, -5.63271091501005e-05,-0.00541226391281868,0.200183530182364,-0.264332209197406, -5.82963245754353e-05,-0.0048959793767378,0.212601793378934,-0.289004070581952, -6.02655400004926e-05,-0.00437969484065648,0.225020056575505,-0.313675931966498, -6.22347554256053e-05,-0.0038634103045756,0.237438319772075,-0.338347793351043, -6.42039708504405e-05,-0.00334712576849405,0.249856582968646,-0.363019654735589, -6.61731862753312e-05,-0.00283084123241273,0.262274846165217,-0.387691516120134, -6.81424017007215e-05,-0.00231455669633229,0.274693109361787,-0.41236337750468, -7.01116171258898e-05,-0.00179827216025097,0.287111372558358,-0.437035238889225, -7.2080832551058e-05,-0.00128198762417009,0.299529635754928,-0.461707100273771, -7.40500479757822e-05,-0.000765703088088543,0.311947898951499,-0.486378961658317, -7.60192634009504e-05,-0.000249418552007663,0.324366162148069,-0.511050823042862, -7.79884788262297e-05,0.000266865984072995,0.336784425344639,-0.535722684427408, -7.99576942508429e-05,0.000783150520154985,0.349202688541211,-0.560394545811953, -8.19269096763442e-05,0.00129943505623586,0.361620951737781,-0.585066407196499, -8.38961251011794e-05,0.00181571959231652,0.374039214934351,-0.609738268581045, -8.58653405260146e-05,0.00233200412839807,0.386457478130922,-0.63441012996559, -8.78345559512939e-05,0.00284828866447917,0.398875741327492,-0.659081991350136, -8.9803771375907e-05,0.00336457320056072,0.411294004524063,-0.683753852734681, -9.17729868015194e-05,0.00388085773664137,0.423712267720634,-0.708425714119227, -9.37422022265766e-05,0.00439714227272248,0.436130530917204,-0.733097575503772, -3.89821285236847e-05,-0.00729802825722803,0.135453996894149,-0.143352537693825, -4.04110093917831e-05,-0.00683179390766009,0.147264063411592,-0.168427508069446, -4.18398902599648e-05,-0.00636555955809226,0.159074129929035,-0.193502478445067, -4.32687711283686e-05,-0.00589932520852465,0.170884196446478,-0.218577448820688, -4.46976519963282e-05,-0.0054330908589566,0.18269426296392,-0.243652419196309, -4.61265328644545e-05,-0.00496685650938855,0.194504329481363,-0.26872738957193, -4.75554137328027e-05,-0.00450062215982117,0.206314395998806,-0.293802359947551, -4.89842946007624e-05,-0.00403438781025289,0.218124462516249,-0.318877330323172, -5.04131754691661e-05,-0.00356815346068551,0.229934529033691,-0.343952300698793, -5.18420563370703e-05,-0.00310191911111746,0.241744595551134,-0.369027271074413, -5.32709372054185e-05,-0.00263568476154963,0.253554662068577,-0.394102241450035, -5.46998180733782e-05,-0.00216945041198136,0.26536472858602,-0.419177211825655, -5.6128698941893e-05,-0.00170321606241397,0.277174795103463,-0.444252182201277, -5.75575798100747e-05,-0.00123698171284636,0.288984861620905,-0.469327152576897, -5.89864606779233e-05,-0.000770747363278312,0.300794928138348,-0.494402122952518, -6.04153415465492e-05,-0.000304513013710928,0.312604994655791,-0.519477093328139, -6.18442224145088e-05,0.000161721335857568,0.324415061173234,-0.54455206370376, -6.32731032823575e-05,0.000627955685425619,0.336225127690677,-0.569627034079381, -6.47019841513163e-05,0.00109419003499278,0.348035194208119,-0.594702004455002, -6.6130865019165e-05,0.00156042438456039,0.359845260725562,-0.619776974830623, -6.75597458875687e-05,0.002026658734128,0.371655327243005,-0.644851945206244, -6.89886267553064e-05,0.00249289308369649,0.383465393760448,-0.669926915581865, -7.04175076234881e-05,0.00295912743326499,0.395275460277891,-0.695001885957486, -7.18463884916698e-05,0.00342536178283215,0.407085526795333,-0.720076856333107, -7.32752693595184e-05,0.00389159613240064,0.418895593312776,-0.745151826708728, -3.17964670884519e-05,-0.00667772081892115,0.132897299000605,-0.145600406155269, -3.27809494870546e-05,-0.00626551471094228,0.144121908926038,-0.171056164268487, -3.37654318859348e-05,-0.00585330860296396,0.155346518851471,-0.196511922381706, -3.47499142847596e-05,-0.00544110249498531,0.166571128776903,-0.221967680494924, -3.57343966835288e-05,-0.00502889638700665,0.177795738702336,-0.247423438608142, -3.67188790822426e-05,-0.004616690279028,0.189020348627769,-0.27287919672136, -3.77033614809563e-05,-0.00420448417104913,0.200244958553202,-0.298334954834579, -3.86878438798366e-05,-0.00379227806307081,0.211469568478635,-0.323790712947797, -3.96723262785503e-05,-0.00338007195509182,0.222694178404068,-0.349246471061015, -4.06568086773751e-05,-0.0029678658471135,0.233918788329501,-0.374702229174233, -4.16412910760888e-05,-0.00255565973913474,0.245143398254934,-0.400157987287452, -4.26257734748026e-05,-0.00214345363115598,0.256368008180367,-0.42561374540067, -4.36102558739604e-05,-0.00173124752317766,0.2675926181058,-0.451069503513888, -4.45947382724521e-05,-0.00131904141519867,0.278817228031233,-0.476525261627106, -4.55792206711658e-05,-0.000906835307219911,0.290041837956666,-0.501981019740325, -4.65637030702126e-05,-0.000494629199241814,0.301266447882099,-0.527436777853543, -4.75481854688153e-05,-8.24230912630508e-05,0.312491057807532,-0.552892535966761, -4.8532667867307e-05,0.000329783016716156,0.323715667732965,-0.578348294079979, -4.95171502662428e-05,0.000741989124694697,0.334940277658398,-0.603804052193198, -5.05016326650676e-05,0.00115419523267324,0.346164887583831,-0.629259810306416, -5.14861150640034e-05,0.00156640134065178,0.357389497509264,-0.654715568419634, -5.24705974627171e-05,0.00197860744863032,0.368614107434696,-0.680171326532852, -5.34550798614308e-05,0.00239081355660931,0.379838717360129,-0.70562708464607, -5.44395622602556e-05,0.0028030196645874,0.391063327285562,-0.731082842759289, -5.54240446589693e-05,0.00321522577256594,0.402287937210995,-0.756538600872507, -2.52727788376539e-05,-0.00615220143011774,0.130551960505155,-0.147615564001963, -2.59195085329789e-05,-0.00579402623130587,0.141242690388364,-0.173412688796775, -2.65662382286092e-05,-0.00543585103249455,0.151933420271573,-0.199209813591588, -2.72129679239619e-05,-0.00507767583368268,0.162624150154781,-0.225006938386401, -2.78596976193146e-05,-0.00471950063487103,0.17331488003799,-0.250804063181213, -2.85064273149449e-05,-0.0043613254360596,0.184005609921199,-0.276601187976026, -2.91531570103531e-05,-0.00400315023724773,0.194696339804408,-0.302398312770838, -2.97998867058169e-05,-0.00364497503843642,0.205387069687616,-0.328195437565651, -3.04466164013362e-05,-0.00328679983962465,0.216077799570825,-0.353992562360464, -3.10933460967444e-05,-0.00292862464081312,0.226768529454033,-0.379789687155276, -3.17400757922082e-05,-0.00257044944200135,0.237459259337242,-0.405586811950089, -3.23868054877829e-05,-0.00221227424319004,0.248149989220451,-0.431383936744901, -3.30335351829136e-05,-0.00185409904437783,0.25884071910366,-0.457181061539714, -3.36802648788215e-05,-0.00149592384556718,0.269531448986868,-0.482978186334526, -3.43269945740632e-05,-0.00113774864675498,0.280222178870077,-0.508775311129339, -3.4973724269638e-05,-0.000779573447943438,0.290912908753286,-0.534572435924152, -3.56204539648797e-05,-0.000421398249131455,0.301603638636494,-0.560369560718964, -3.62671836601214e-05,-6.3223050319694e-05,0.312294368519703,-0.586166685513777, -3.69139133561402e-05,0.000294952148491401,0.322985098402912,-0.611963810308589, -3.75606430509379e-05,0.00065312734730405,0.333675828286121,-0.637760935103402, -3.82073727468457e-05,0.00101130254611492,0.344366558169329,-0.663558059898215, -3.88541024425315e-05,0.00136947774492535,0.355057288052537,-0.689355184693027, -3.95008321372181e-05,0.00172765294373844,0.365748017935746,-0.71515230948784, -4.0147561833126e-05,0.00208582814254976,0.376438747818955,-0.740949434282653, -4.07942915287007e-05,0.00244400334136152,0.387129477702164,-0.766746559077465, -1.96334074151483e-05,-0.00572576222337406,0.128506016863772,-0.14933910996327, -2.00413254359821e-05,-0.00541801129124064,0.138733348553683,-0.175428202539342, -2.04492434565662e-05,-0.00511026035910667,0.148960680243594,-0.201517295115414, -2.08571614775388e-05,-0.00480250942697347,0.159188011933505,-0.227606387691486, -2.12650794982894e-05,-0.00449475849484016,0.169415343623416,-0.253695480267558, -2.1672997519262e-05,-0.00418700756270685,0.179642675313327,-0.27978457284363, -2.20809155400126e-05,-0.00387925663057298,0.189870007003238,-0.305873665419702, -2.24888335607631e-05,-0.00357150569843956,0.200097338693149,-0.331962757995774, -2.28967515816247e-05,-0.00326375476630614,0.21032467038306,-0.358051850571846, -2.33046696022643e-05,-0.00295600383417249,0.220552002072971,-0.384140943147918, -2.37125876229038e-05,-0.00264825290203885,0.230779333762882,-0.41023003572399, -2.41205056435989e-05,-0.00234050196990521,0.241006665452793,-0.436319128300062, -2.4528423664627e-05,-0.00203275103777201,0.251233997142704,-0.462408220876134, -2.49363416854331e-05,-0.00172500010563859,0.261461328832615,-0.488497313452206, -2.53442597062392e-05,-0.00141724917350494,0.271688660522526,-0.514586406028278, -2.57521777269343e-05,-0.0011094982413713,0.281915992212437,-0.54067549860435, -2.61600957482955e-05,-0.000801747309238765,0.292143323902348,-0.566764591180422, -2.65680137689905e-05,-0.000493996377105343,0.302370655592259,-0.592853683756494, -2.69759317897966e-05,-0.000186245444971256,0.31259798728217,-0.618942776332566, -2.73838498099366e-05,0.000121505487162388,0.322825318972081,-0.645031868908638, -2.77917678311868e-05,0.000429256419295587,0.333052650661992,-0.67112096148471, -2.81996858518818e-05,0.000737007351429231,0.343279982351903,-0.697210054060782, -2.86076038726879e-05,0.00104475828356287,0.353507314041814,-0.723299146636854, -2.90155218938271e-05,0.00135250921569563,0.363734645731725,-0.749388239212926, -2.94234399143001e-05,0.00166026014782972,0.373961977421636,-0.775477331788998, -1.49608233049603e-05,-0.00539140627700752,0.126797767634769,-0.150754933422575, -1.52100834727165e-05,-0.00512799092456584,0.13663976283128,-0.177083865749572, -1.54593436405559e-05,-0.00486457557212427,0.146481758027791,-0.20341279807657, -1.57086038082288e-05,-0.00460116021968238,0.156323753224302,-0.229741730403567, -1.59578639760127e-05,-0.00433774486724092,0.166165748420813,-0.256070662730564, -1.62071241436856e-05,-0.00407432951479891,0.176007743617324,-0.282399595057562, -1.64563843115251e-05,-0.00381091416235746,0.185849738813835,-0.308728527384559, -1.67056444788094e-05,-0.0035474988099149,0.195691734010347,-0.335057459711557, -1.69549046468709e-05,-0.00328408345747366,0.205533729206857,-0.361386392038554, -1.72041648142107e-05,-0.00302066810503154,0.215375724403368,-0.387715324365552, -1.74534249820502e-05,-0.00275725275258987,0.22521771959988,-0.414044256692549, -1.77026851503337e-05,-0.00249383740014864,0.235059714796391,-0.440373189019546, -1.7951945317618e-05,-0.00223042204770652,0.244901709992902,-0.466702121346544, -1.82012054855685e-05,-0.00196700669526528,0.254743705189412,-0.493031053673541, -1.84504656528528e-05,-0.00170359134282272,0.264585700385924,-0.519359986000539, -1.86997258205812e-05,-0.00144017599038104,0.274427695582435,-0.545688918327536, -1.89489859885317e-05,-0.00117676063793981,0.284269690778946,-0.572017850654533, -1.9198246155927e-05,-0.000913345285497469,0.294111685975457,-0.598346782981531, -1.94475063239885e-05,-0.000649929933056015,0.303953681171968,-0.624675715308529, -1.9696766491939e-05,-0.000386514580614339,0.313795676368479,-0.651004647635526, -1.99460266590012e-05,-0.000123099228172219,0.32363767156499,-0.677333579962523, -2.01952868267297e-05,0.000140316124269457,0.333479666761501,-0.703662512289521, -2.04445469950132e-05,0.000403731476710689,0.343321661958012,-0.729991444616518, -2.06938071626306e-05,0.000667146829152809,0.353163657154523,-0.756320376943516, -2.0943067330137e-05,0.000930562181594929,0.363005652351034,-0.782649309270513, -1.12229718828294e-05,-0.0051360203707892,0.125422688095384,-0.151879915816704, -1.13720107837723e-05,-0.00490971168928833,0.134955497843117,-0.178399419570831, -1.15210496851037e-05,-0.00468340300778758,0.144488307590851,-0.204918923324958, -1.16700885856025e-05,-0.0044570943262856,0.154021117338585,-0.231438427079086, -1.18191274869339e-05,-0.00423078564478518,0.163553927086318,-0.257957930833213, -1.19681663877658e-05,-0.00400447696328388,0.173086736834052,-0.28447743458734, -1.21172052887086e-05,-0.00377816828178279,0.182619546581785,-0.310996938341467, -1.22662441899291e-05,-0.00355185960028193,0.192152356329519,-0.337516442095594, -1.24152830907054e-05,-0.0033255509187804,0.201685166077253,-0.364035945849721, -1.25643219918703e-05,-0.00309924223727998,0.211217975824986,-0.390555449603849, -1.27133608925911e-05,-0.00287293355577822,0.22075078557272,-0.417074953357976, -1.28623997939226e-05,-0.0026466248742778,0.230283595320453,-0.443594457112103, -1.30114386945879e-05,-0.00242031619277605,0.239816405068187,-0.47011396086623, -1.31604775958083e-05,-0.00219400751127519,0.24934921481592,-0.496633464620357, -1.33095164970287e-05,-0.00196769882977454,0.258882024563654,-0.523152968374484, -1.3458555397361e-05,-0.00174139014827257,0.268414834311387,-0.549672472128611, -1.36075942983593e-05,-0.00151508146677148,0.277947644059121,-0.576191975882739, -1.37566331999128e-05,-0.00128877278527129,0.287480453806854,-0.602711479636866, -1.39056721008002e-05,-0.00106246410377064,0.297013263554587,-0.629230983390993, -1.40547110014655e-05,-0.000836155422268892,0.306546073302321,-0.65575048714512, -1.4203749903019e-05,-0.000609846740768472,0.316078883050054,-0.682269990899247, -1.43527888035733e-05,-0.000383538059266719,0.325611692797788,-0.708789494653374, -1.45018277047937e-05,-0.000157229377765855,0.335144502545522,-0.735308998407502, -1.4650866605348e-05,6.90793037358972e-05,0.344677312293256,-0.761828502161629, -1.47999055070125e-05,0.000295387985235873,0.354210122040989,-0.788348005915756, -8.31577803500627e-06,-0.00494467412969601,0.124347900164765,-0.152750402278653, -8.40386687445127e-06,-0.00474822162272148,0.133639642622223,-0.179417365982568, -8.49195571367423e-06,-0.00455176911574662,0.142931385079682,-0.206084329686484, -8.58004455289718e-06,-0.00435531660877198,0.15222312753714,-0.232751293390399, -8.66813339217565e-06,-0.00415886410179722,0.161514869994598,-0.259418257094314, -8.75622223101002e-06,-0.0039624115948218,0.170806612452057,-0.286085220798229, -8.84431107045502e-06,-0.00376595908784738,0.180098354909515,-0.312752184502144, -8.93239990995554e-06,-0.00356950658087274,0.189390097366974,-0.339419148206059, -9.02048874912298e-06,-0.00337305407389787,0.198681839824432,-0.366086111909974, -9.10857758806838e-06,-0.00317660156692279,0.20797358228189,-0.39275307561389, -9.19666642751338e-06,-0.00298014905994859,0.217265324739348,-0.419420039317805, -9.28475526718042e-06,-0.00278369655297395,0.226557067196807,-0.44608700302172, -9.37284410640338e-06,-0.0025872440459993,0.235848809654265,-0.472753966725635, -9.46093294507122e-06,-0.00239079153902422,0.245140552111723,-0.49942093042955, -9.54902178451622e-06,-0.0021943390320498,0.254432294569181,-0.526087894133466, -9.63711062396122e-06,-0.00199788652507493,0.26372403702664,-0.552754857837381, -9.72519946285111e-06,-0.00180143401809985,0.273015779484098,-0.579421821541296, -9.81328830229611e-06,-0.00160498151112498,0.282307521941557,-0.606088785245211, -9.90137714129702e-06,-0.00140852900415034,0.291599264399015,-0.632755748949126, -9.98946598051997e-06,-0.00121207649717503,0.300891006856474,-0.659422712653041, -1.0077554820187e-05,-0.00101562399020105,0.310182749313932,-0.686089676356957, -1.0165643659743e-05,-0.000819171483227077,0.31947449177139,-0.712756640060872, -1.02537324984109e-05,-0.000622718976251324,0.328766234228849,-0.739423603764787, -1.03418213375228e-05,-0.00042626646927646,0.338057976686307,-0.766090567468702, -1.04299101771899e-05,-0.000229813962302483,0.347349719143765,-0.792757531172617, -6.10357661676164e-06,-0.00480328062227675,0.123526931414982,-0.153410240587686, -6.15554023142284e-06,-0.0046301253796257,0.132634880473999,-0.180188980554842, -6.20750384611179e-06,-0.00445697013697488,0.141742829533017,-0.206967720521998, -6.25946746068973e-06,-0.00428381489432383,0.150850778592034,-0.233746460489154, -6.31143107515664e-06,-0.00411065965167245,0.159958727651052,-0.26052520045631, -6.36339469017866e-06,-0.00393750440902196,0.169066676710069,-0.287303940423466, -6.41535830492312e-06,-0.00376434916637103,0.178174625769087,-0.314082680390621, -6.46732191927901e-06,-0.00359119392371943,0.187282574828105,-0.340861420357777, -6.51928553385694e-06,-0.00341803868106871,0.196390523887122,-0.367640160324933, -6.57124914887897e-06,-0.003244883438418,0.20549847294614,-0.394418900292089, -6.62321276334588e-06,-0.00307172819576684,0.214606422005158,-0.421197640259245, -6.67517637775727e-06,-0.00289857295311524,0.223714371064175,-0.447976380226401, -6.72713999216867e-06,-0.00272541771046386,0.232822320123193,-0.474755120193557, -6.77910360702416e-06,-0.00255226246781337,0.241930269182211,-0.501533860160712, -6.83106722165761e-06,-0.00237910722516221,0.251038218241228,-0.528312600127868, -6.88303083629105e-06,-0.00220595198251106,0.260146167300246,-0.555091340095024, -6.93499445092449e-06,-0.00203279673986034,0.269254116359263,-0.58187008006218, -6.98695806566896e-06,-0.00185964149720919,0.278362065418281,-0.608648820029336, -7.03892168052445e-06,-0.00168648625455869,0.287470014477298,-0.635427559996492, -7.09088529504687e-06,-0.00151333101190732,0.296577963536316,-0.662206299963648, -7.14284891001338e-06,-0.00134017576925727,0.305685912595333,-0.688985039930803, -7.19481252464682e-06,-0.00116702052660589,0.314793861654351,-0.715763779897959, -7.24677613916924e-06,-0.000993865283954065,0.323901810713369,-0.742542519865115, -7.29873975402473e-06,-0.000820710041304018,0.333009759772386,-0.769321259832271, -7.35070336865817e-06,-0.000647554798652639,0.342117708831404,-0.796099999799427, -4.44801885537971e-06,-0.00469981956135423,0.122910765884985,-0.153902641662708, -4.47887572457839e-06,-0.00454442440526293,0.131880963461904,-0.180764794113541, -4.50973259363829e-06,-0.00438902924917117,0.140851161038824,-0.207626946564374, -4.54058946264269e-06,-0.00423363409307931,0.149821358615744,-0.234489099015206, -4.57144633198014e-06,-0.004078238936988,0.158791556192663,-0.261351251466039, -4.60230320109556e-06,-0.00392284378089647,0.167761753769583,-0.288213403916872, -4.63316007021097e-06,-0.00376744862480494,0.176731951346503,-0.315075556367705, -4.66401693932639e-06,-0.00361205346871318,0.185702148923423,-0.341937708818537, -4.69487380849731e-06,-0.00345665831262187,0.194672346500342,-0.36879986126937, -4.72573067777926e-06,-0.00330126315653057,0.203642544077262,-0.395662013720203, -4.7565875465061e-06,-0.00314586800043881,0.212612741654181,-0.422524166171036, -4.78744441567702e-06,-0.00299047284434684,0.221582939231101,-0.449386318621868, -4.81830128473693e-06,-0.00283507768825508,0.230553136808021,-0.476248471072701, -4.84915815379683e-06,-0.00267968253216377,0.239523334384941,-0.503110623523534, -4.8800150231898e-06,-0.00252428737607224,0.24849353196186,-0.529972775974366, -4.91087189258277e-06,-0.00236889221998071,0.25746372953878,-0.556834928425199, -4.94172876119858e-06,-0.00221349706388918,0.266433927115699,-0.583697080876032, -4.97258563092462e-06,-0.00205810190779876,0.275404124692619,-0.610559233326865, -5.00344250009555e-06,-0.00190270675170634,0.284374322269539,-0.637421385777697, -5.03429936904443e-06,-0.00174731159561459,0.293344519846459,-0.66428353822853, -5.06515623788228e-06,-0.00159191643952283,0.302314717423378,-0.691145690679363, -5.09601310771934e-06,-0.00143652128343286,0.311284915000297,-0.718007843130195, -5.12686997633516e-06,-0.00128112612733977,0.320255112577218,-0.744869995581028, -5.15772684561711e-06,-0.00112573097124891,0.329225310154137,-0.771732148031861, -5.18858371423292e-06,-0.000970335815156265,0.338195507731057,-0.798594300482694, -3.22438332248098e-06,-0.00462463571043847,0.122454373884297,-0.154265820390697, -3.24295788739493e-06,-0.00448254515153534,0.131322643807124,-0.18118949512744, -3.26153245189253e-06,-0.00434045459263144,0.140190913729951,-0.208113169864183, -3.28010701661219e-06,-0.00419836403372775,0.149059183652778,-0.235036844600927, -3.29868158122082e-06,-0.0040562734748244,0.157927453575604,-0.26196051933767, -3.31725614638456e-06,-0.00391418291592127,0.166795723498431,-0.288884194074413, -3.33583071099319e-06,-0.0037720923570177,0.175663993421258,-0.315807868811157, -3.35440527521325e-06,-0.00363000179811346,0.184532263344085,-0.3427315435479, -3.37297983982188e-06,-0.00348791123920966,0.193400533266912,-0.369655218284643, -3.39155440481909e-06,-0.00334582068030653,0.202268803189739,-0.396578893021386, -3.41012896953874e-06,-0.00320373012140318,0.211137073112565,-0.423502567758129, -3.42870353464697e-06,-0.00306163956250005,0.220005343035392,-0.450426242494873, -3.44727809897805e-06,-0.00291954900359603,0.228873612958219,-0.477349917231616, -3.46585266364219e-06,-0.00277745844469224,0.237741882881046,-0.504273591968359, -3.48442722819531e-06,-0.00263536788578911,0.246610152803872,-0.531197266705102, -3.50300179308149e-06,-0.00249327732688531,0.255478422726699,-0.558120941441846, -3.52157635719053e-06,-0.00235118676798152,0.264346692649526,-0.585044616178589, -3.54015092218773e-06,-0.00220909620907839,0.273214962572353,-0.611968290915332, -3.55872548751801e-06,-0.00206700565017526,0.282083232495179,-0.638891965652076, -3.57730005173806e-06,-0.00192491509127146,0.290951502418006,-0.665815640388819, -3.5958746168463e-06,-0.00178282453236811,0.299819772340833,-0.692739315125562, -3.61444918117737e-06,-0.00164073397346387,0.30868804226366,-0.719662989862305, -3.63302374650765e-06,-0.00149864341456096,0.317556312186487,-0.746586664599048, -3.6515983107277e-06,-0.00135655285565761,0.326424582109313,-0.773510339335792, -3.67017287539184e-06,-0.00121446229675293,0.335292852032141,-0.800434014072535, -2.32827667848157e-06,-0.00457026498761604,0.122119613964616,-0.15453138438555, -2.33966838714128e-06,-0.0044380134468488,0.130913176657392,-0.181500045523643, -2.35106009521813e-06,-0.00430576190608123,0.139706739350168,-0.208468706661736, -2.3624518039056e-06,-0.00417351036531433,0.148500302042944,-0.235437367799828, -2.37384351248204e-06,-0.00404125882454709,0.15729386473572,-0.262406028937921, -2.38523522066991e-06,-0.0039090072837793,0.166087427428497,-0.289374690076014, -2.39662692919085e-06,-0.00377675574301195,0.174880990121273,-0.316343351214107, -2.4080186377673e-06,-0.00364450420224505,0.183674552814049,-0.343312012352199, -2.41941034606619e-06,-0.00351225266147748,0.192468115506825,-0.370280673490292, -2.4308020544761e-06,-0.00338000112071013,0.201261678199602,-0.397249334628385, -2.44219376299704e-06,-0.00324774957994278,0.210055240892378,-0.424217995766477, -2.45358547168451e-06,-0.00311549803917566,0.218848803585154,-0.45118665690457, -2.46497717992789e-06,-0.00298324649840853,0.22764236627793,-0.478155318042663, -2.47636888839331e-06,-0.00285099495764096,0.236435928970707,-0.505123979180756, -2.4877605971918e-06,-0.0027187434168745,0.245229491663482,-0.532092640318848, -2.49915230521314e-06,-0.00258649187610605,0.254023054356259,-0.559061301456941, -2.51054401390061e-06,-0.00245424033533936,0.262816617049035,-0.586029962595034, -2.52193572225501e-06,-0.00232198879457179,0.271610179741811,-0.612998623733127, -2.53332743027634e-06,-0.00218973725380378,0.280403742434588,-0.639967284871219, -2.5447191394079e-06,-0.00205748571303754,0.289197305127364,-0.666935946009312, -2.55611084742924e-06,-0.00192523417226953,0.29799086782014,-0.693904607147405, -2.56750255700489e-06,-0.00179298263150374,0.306784430512916,-0.720873268285498, -2.5788942649152e-06,-0.00166073109073617,0.315577993205692,-0.747841929423591, -2.59028597304756e-06,-0.00152847954996815,0.324371555898468,-0.774810590561683, -2.60167768129094e-06,-0.00139622800920058,0.333165118591245,-0.801779251699776, -1.67644137261114e-06,-0.00453107958152321,0.121875824737514,-0.154724345946967, -1.68357980206979e-06,-0.0044060357095308,0.130615011347768,-0.18172569467229, -1.69071823136191e-06,-0.00428099183753794,0.139354197958022,-0.208727043397613, -1.69785666087607e-06,-0.00415594796554553,0.148093384568276,-0.235728392122936, -1.7049950902237e-06,-0.00403090409355278,0.15683257117853,-0.262729740848259, -1.71213351973787e-06,-0.00390586022156025,0.165571757788784,-0.289731089573582, -1.71927194902999e-06,-0.0037808163495674,0.174310944399038,-0.316732438298905, -1.72641037865517e-06,-0.0036557724775752,0.183050131009291,-0.343733787024228, -1.73354880789178e-06,-0.00353072860558257,0.191789317619545,-0.37073513574955, -1.74068723712839e-06,-0.00340568473358949,0.2005285042298,-0.397736484474873, -1.74782566630949e-06,-0.00328064086159663,0.209267690840053,-0.424737833200196, -1.75496409560161e-06,-0.00315559698960377,0.218006877450308,-0.451739181925519, -1.76210252567088e-06,-0.00303055311761202,0.226746064060561,-0.478740530650842, -1.769240954963e-06,-0.00290550924561916,0.235485250670815,-0.505741879376165, -1.77637938436614e-06,-0.00278046537362675,0.244224437281069,-0.532743228101488, -1.78351781343622e-06,-0.00265542150163389,0.252963623891323,-0.559744576826811, -1.79065624295038e-06,-0.00253037762964103,0.261702810501577,-0.586745925552133, -1.79779467246455e-06,-0.00240533375764884,0.270441997111831,-0.613747274277456, -1.80493310175667e-06,-0.00228028988565621,0.279181183722085,-0.640748623002779, -1.81207153138185e-06,-0.00215524601366379,0.287920370332339,-0.667749971728102, -1.81920996067397e-06,-0.00203020214167093,0.296659556942593,-0.694751320453425, -1.82634838985507e-06,-0.00190515826967808,0.305398743552847,-0.721752669178748, -1.83348681981332e-06,-0.00178011439768611,0.3141379301631,-0.748754017904071, -1.84062524877238e-06,-0.0016550705256928,0.322877116773355,-0.775755366629394, -1.84776367817552e-06,-0.00153002665369995,0.331616303383609,-0.802756715354716, -1.20461177616216e-06,-0.00450290613835991,0.121699209898508,-0.154863910318333, -1.20918555218674e-06,-0.00438310611066661,0.130399018822513,-0.181888901174916, -1.21375932843337e-06,-0.00426330608297343,0.139098827746517,-0.208913892031499, -1.21833310390285e-06,-0.00414350605527936,0.147798636670522,-0.235938882888083, -1.22290687998294e-06,-0.00402370602758606,0.156498445594527,-0.262963873744666, -1.22748065589651e-06,-0.00390390599989243,0.165198254518532,-0.289988864601249, -1.23205443181007e-06,-0.00378410597219925,0.173898063442536,-0.317013855457833, -1.23662820789017e-06,-0.00366430594450584,0.182597872366541,-0.344038846314416, -1.24120198369271e-06,-0.00354450591681221,0.191297681290545,-0.371063837170999, -1.24577575971729e-06,-0.00342470588911881,0.19999749021455,-0.398088828027582, -1.25034953579739e-06,-0.00330490586142562,0.208697299138554,-0.425113818884165, -1.25492331148891e-06,-0.00318510583373177,0.217397108062559,-0.452138809740749, -1.25949708773554e-06,-0.00306530580603881,0.226096916986563,-0.479163800597332, -1.26407086342706e-06,-0.00294550577834496,0.234796725910568,-0.506188791453915, -1.2686446392296e-06,-0.00282570575065111,0.243496534834573,-0.533213782310498, -1.27321841558725e-06,-0.00270590572295837,0.252196343758577,-0.560238773167082, -1.27779219138979e-06,-0.00258610569526452,0.260896152682582,-0.587263764023665, -1.28236596719233e-06,-0.00246630566757089,0.269595961606587,-0.614288754880248, -1.28693974266181e-06,-0.00234650563987682,0.278295770530592,-0.641313745736832, -1.29151351868639e-06,-0.00222670561218363,0.286995579454596,-0.668338736593415, -1.29608729471098e-06,-0.00210690558449,0.295695388378601,-0.695363727449998, -1.30066107051352e-06,-0.00198710555679638,0.304395197302605,-0.722388718306581, -1.30523484676015e-06,-0.00186730552910364,0.31309500622661,-0.749413709163165, -1.30980862256269e-06,-0.00174750550141001,0.321794815150614,-0.776438700019748, -1.31438239836523e-06,-0.00162770547371593,0.330494624074619,-0.803463690876331, -9.74813355643089e-05,-0.0141674375286459,0.162402249079949,-0.132751372904114, -0.000104267816828707,-0.0135156735364591,0.178340305057565,-0.154321479317847, -0.000111054298092883,-0.0128639095442722,0.194278361035181,-0.17589158573158, -0.000117840779357337,-0.0122121455520854,0.210216417012796,-0.197461692145313, -0.000124627260621624,-0.0115603815598984,0.226154472990412,-0.219031798559046, -0.000131413741886022,-0.0109086175677116,0.242092528968028,-0.240601904972779, -0.000138200223150531,-0.0102568535755247,0.258030584945644,-0.262172011386512, -0.000144986704414818,-0.00960508958333794,0.27396864092326,-0.283742117800245, -0.000151773185678716,-0.00895332559115047,0.289906696900876,-0.305312224213978, -0.000158559666943503,-0.00830156159896456,0.305844752878491,-0.326882330627711, -0.000165346148207846,-0.00764979760677731,0.321782808856107,-0.348452437041444, -0.000172132629471466,-0.00699803361458984,0.337720864833723,-0.370022543455177, -0.000178919110736309,-0.00634626962240348,0.353658920811339,-0.39159264986891, -0.000185705592000263,-0.00569450563021601,0.369596976788955,-0.413162756282643, -0.000192492073264772,-0.00504274163802965,0.38553503276657,-0.434732862696375, -0.000199278554529281,-0.00439097764584306,0.401473088744186,-0.456302969110108, -0.000206065035793346,-0.00373921365365559,0.417411144721802,-0.477873075523841, -0.000212851517058077,-0.00308744966146879,0.433349200699418,-0.499443181937574, -0.000219637998322253,-0.00243568566928243,0.449287256677033,-0.521013288351307, -0.000226424479586318,-0.00178392167709474,0.465225312654649,-0.54258339476504, -0.000233210960850716,-0.00113215768490837,0.481163368632265,-0.564153501178773, -0.000239997442115225,-0.000480393692722014,0.49710142460988,-0.585723607592506, -0.000246783923379956,0.000171370299464346,0.513039480587496,-0.607293714006238, -0.000253570404643355,0.000823134291652927,0.528977536565112,-0.628863820419972, -0.000260356885907753,0.00147489828383973,0.544915592542728,-0.650433926833705, -9.65572740553866e-05,-0.014028497454653,0.162096622487676,-0.133090820295134, -0.000103230369417728,-0.0133764810638287,0.177965576355787,-0.154714222971821, -0.000109903464780126,-0.0127244646730047,0.193834530223897,-0.176337625648509, -0.000116576560142301,-0.0120724482821802,0.209703484092008,-0.197961028325197, -0.000123249655504754,-0.0114204318913559,0.225572437960119,-0.219584431001884, -0.000129922750866984,-0.0107684155005316,0.24144139182823,-0.241207833678572, -0.00013659584622927,-0.0101163991097073,0.25731034569634,-0.262831236355259, -0.000143268941591779,-0.00946438271888339,0.273179299564451,-0.284454639031947, -0.000149942036954065,-0.00881236632805904,0.289048253432562,-0.306078041708635, -0.000156615132316462,-0.00816034993723491,0.304917207300672,-0.327701444385322, -0.000163288227678748,-0.00750833354641078,0.320786161168783,-0.34932484706201, -0.000169961323041257,-0.00685631715558643,0.336655115036894,-0.370948249738697, -0.00017663441840321,-0.00620430076476186,0.352524068905005,-0.392571652415385, -0.000183307513765607,-0.00555228437393773,0.368393022773115,-0.414195055092073, -0.000189980609127893,-0.0049002679831136,0.384261976641226,-0.43581845776876, -0.000196653704490402,-0.00424825159228925,0.400130930509337,-0.457441860445448, -0.000203326799852799,-0.00359623520146535,0.415999884377447,-0.479065263122136, -0.000209999895215085,-0.00294421881064122,0.431868838245558,-0.500688665798823, -0.000216672990577482,-0.00229220241981709,0.447737792113668,-0.52231206847551, -0.000223346085939324,-0.00164018602899185,0.463606745981779,-0.543935471152198, -0.000230019181302055,-0.000988169638167946,0.47947569984989,-0.565558873828886, -0.000236692276664119,-0.00033615324734404,0.495344653718,-0.587182276505574, -0.000243365372026849,0.000315863143479866,0.511213607586111,-0.608805679182261, -0.000250038467389024,0.000967879534304661,0.527082561454222,-0.630429081858949, -0.000256711562751422,0.00161989592512812,0.542951515322332,-0.652052484535637, -9.52928558560773e-05,-0.0138401336541844,0.161677504997964,-0.133553902126001, -0.000101812081613084,-0.0131879760277055,0.177451846744137,-0.155250012773586, -0.00010833130737059,-0.012535818401227,0.193226188490309,-0.176946123421171, -0.000114850533127819,-0.0118836607747481,0.209000530236482,-0.198642234068756, -0.000121369758885159,-0.0112315031482696,0.224774871982655,-0.220338344716342, -0.000127888984642277,-0.0105793455217907,0.240549213728828,-0.242034455363927, -0.000134408210399339,-0.00992718789531177,0.256323555475001,-0.263730566011512, -0.000140927436156624,-0.00927503026883314,0.272097897221174,-0.285426676659097, -0.00014744666191413,-0.00862287264235473,0.287872238967346,-0.307122787306682, -0.000153965887671081,-0.00797071501587543,0.303646580713519,-0.328818897954267, -0.000160485113428255,-0.00731855738939657,0.319420922459692,-0.350515008601852, -0.000167004339185484,-0.00666639976291794,0.335195264205865,-0.372211119249437, -0.000173523564942935,-0.00601424213643975,0.350969605952038,-0.393907229897022, -0.00018004279069983,-0.00536208450996045,0.366743947698211,-0.415603340544608, -0.000186562016457503,-0.00470992688348226,0.382518289444383,-0.437299451192192, -0.000193081242214621,-0.00405776925700319,0.398292631190556,-0.458995561839777, -0.00019960046797185,-0.00340561163052455,0.414066972936729,-0.480691672487363, -0.000206119693728524,-0.00275345400404503,0.429841314682902,-0.502387783134948, -0.000212638919486308,-0.00210129637756706,0.445615656429075,-0.524083893782533, -0.000219158145243648,-0.00144913875108843,0.461389998175247,-0.545780004430118, -0.000225677371000765,-0.000796981124609797,0.47716433992142,-0.567476115077703, -0.000232196596757661,-0.000144823498130275,0.492938681667593,-0.589172225725288, -0.000238715822515001,0.000507334128347914,0.508713023413766,-0.610868336372873, -0.000245235048272341,0.00115949175482699,0.524487365159939,-0.632564447020458, -0.00025175427402957,0.00181164938130562,0.540261706906112,-0.654260557668043, -9.35773171724386e-05,-0.0135877673676663,0.16110716638979,-0.134179662358041, -9.98901491691129e-05,-0.01293579158175,0.176753033212161,-0.155974022934056, -0.000106202981165704,-0.0122838157958333,0.192398900034533,-0.177768383510071, -0.000112515813162462,-0.0116318400099168,0.208044766856905,-0.199562744086086, -0.000118828645158886,-0.0109798642240001,0.223690633679277,-0.221357104662101, -0.000125141477155644,-0.0103278884380839,0.239336500501648,-0.243151465238116, -0.000131454309152346,-0.00967591265216727,0.25498236732402,-0.264945825814131, -0.000137767141149103,-0.00902393686625103,0.270628234146391,-0.286740186390146, -0.00014407997314575,-0.00837196108033433,0.286274100968763,-0.308534546966161, -0.000150392805142396,-0.00771998529441764,0.301919967791135,-0.330328907542176, -0.000156705637138765,-0.00706800950850095,0.317565834613507,-0.35212326811819, -0.000163018469135578,-0.00641603372258448,0.333211701435879,-0.373917628694206, -0.000169331301132059,-0.00576405793666801,0.34885756825825,-0.39571198927022, -0.000175644133128872,-0.00511208215075176,0.364503435080622,-0.417506349846236, -0.000181956965125463,-0.00446010636483507,0.380149301902994,-0.43930071042225, -0.000188269797122276,-0.0038081305789186,0.395795168725365,-0.461095070998265, -0.000194582629118534,-0.00315615479300213,0.411441035547736,-0.48288943157428, -0.000200895461115125,-0.00250417900708499,0.427086902370109,-0.504683792150295, -0.000207208293111827,-0.00185220322116852,0.442732769192481,-0.52647815272631, -0.000213521125108751,-0.00120022743525228,0.458378636014852,-0.548272513302325, -0.000219833957105675,-0.000548251649336695,0.474024502837223,-0.57006687387834, -0.000226146789102044,0.000103724136580219,0.489670369659595,-0.591861234454355, -0.000232459621098746,0.000755699922497133,0.505316236481967,-0.61365559503037, -0.000238772453095115,0.00140767570841405,0.520962103304339,-0.635449955606385, -0.00024508528509215,0.00205965149432963,0.53660797012671,-0.6572443161824, -9.12763325408017e-05,-0.0132549861448596,0.160339171693365,-0.135014457284623, -9.73166533757563e-05,-0.012603920691451,0.175812526399135,-0.156939888097433, -0.000103356974210655,-0.0119528552380422,0.191285881104906,-0.178865318910243, -0.000109397295045666,-0.0113017897846338,0.206759235810677,-0.200790749723053, -0.000115437615880509,-0.0106507243312249,0.222232590516448,-0.222716180535863, -0.000121477936715408,-0.00999965887781618,0.237705945222219,-0.244641611348672, -0.000127518257550474,-0.00934859342440775,0.253179299927989,-0.266567042161482, -0.000133558578384985,-0.00869752797099843,0.26865265463376,-0.288492472974292, -0.000139598899220106,-0.00804646251759,0.284126009339531,-0.310417903787102, -0.000145639220055005,-0.00739539706418135,0.299599364045302,-0.332343334599912, -0.000151679540889793,-0.0067443316107727,0.315072718751072,-0.354268765412722, -0.000157719861724637,-0.00609326615736361,0.330546073456844,-0.376194196225532, -0.00016376018255948,-0.00544220070395474,0.346019428162614,-0.398119627038342, -0.000169800503394657,-0.00479113525054675,0.361492782868385,-0.420045057851152, -0.000175840824229168,-0.00414006979713699,0.376966137574156,-0.441970488663961, -0.000181881145064344,-0.00348900434372923,0.392439492279926,-0.463895919476771, -0.000187921465898966,-0.00283793889031991,0.407912846985697,-0.485821350289581, -0.000193961786734143,-0.00218687343691171,0.423386201691468,-0.507746781102391, -0.000200002107569208,-0.00153580798350306,0.438859556397239,-0.529672211915201, -0.000206042428403941,-0.000884742530093963,0.45433291110301,-0.551597642728011, -0.000212082749239451,-0.000233677076686423,0.46980626580878,-0.573523073540821, -0.00021812307007385,0.000417388376722894,0.485279620514551,-0.595448504353631, -0.000224163390908694,0.00106845383013132,0.500752975220321,-0.61737393516644, -0.000230203711743759,0.00171951928354064,0.516226329926093,-0.639299365979251, -0.000236244032578714,0.00237058473694907,0.531699684631864,-0.66122479679206, -8.82374095284577e-05,-0.0128253175285241,0.159319636936119,-0.136109234287343, -9.39254667058353e-05,-0.0121766047217775,0.174564812783837,-0.158206554837878, -9.9613523883324e-05,-0.011527891915031,0.189809988631556,-0.180303875388413, -0.000105301581060924,-0.0108791791082846,0.205055164479274,-0.202401195938947, -0.00011098963823819,-0.0102304663015381,0.220300340326992,-0.224498516489482, -0.000116677695415845,-0.00958175349479196,0.23554551617471,-0.246595837040017, -0.000122365752593112,-0.00893304068804524,0.250790692022428,-0.268693157590552, -0.000128053809770712,-0.00828432788129851,0.266035867870147,-0.290790478141087, -0.000133741866948089,-0.00763561507455224,0.281281043717865,-0.312887798691621, -0.000139429924125523,-0.00698690226780552,0.296526219565583,-0.334985119242156, -0.0001451179813029,-0.0063381894610588,0.311771395413301,-0.357082439792691, -0.0001508060384805,-0.00568947665431252,0.32701657126102,-0.379179760343226, -0.000156494095657767,-0.00504076384756602,0.342261747108738,-0.401277080893761, -0.000162182152835366,-0.00439205104081974,0.357506922956456,-0.423374401444295, -0.000167870210012744,-0.00374333823407302,0.372752098804174,-0.44547172199483, -0.000173558267190344,-0.00309462542732675,0.387997274651892,-0.467569042545365, -0.000179246324367499,-0.00244591262058003,0.40324245049961,-0.4896663630959, -0.000184934381544877,-0.00179719981383308,0.418487626347329,-0.511763683646435, -0.000190622438722476,-0.00114848700708681,0.433732802195047,-0.533861004196969, -0.000196310495899743,-0.000499774200339864,0.448977978042766,-0.555958324747504, -0.000201998553077343,0.00014893860640619,0.464223153890484,-0.578055645298039, -0.000207686610254498,0.000797651413153133,0.479468329738202,-0.600152965848574, -0.000213374667432431,0.00144636421989919,0.49471350558592,-0.622250286399108, -0.000219062724609587,0.00209507702664569,0.509958681433638,-0.644347606949643, -0.000224750781787408,0.00274378983339219,0.525203857281357,-0.666444927500178, -8.43049934345363e-05,-0.0122855440681731,0.157991628026262,-0.137513206647351, -8.95502806999571e-05,-0.0116417768731061,0.172940957703181,-0.159830963359894, -9.47955679653223e-05,-0.010998009678039,0.187890287380099,-0.182148720072438, -0.000100040855230688,-0.0103542424829719,0.202839617057018,-0.204466476784981, -0.000105286142495997,-0.00971047528790492,0.217788946733937,-0.226784233497524, -0.000110531429761307,-0.00906670809283783,0.232738276410855,-0.249101990210067, -0.000115776717026672,-0.00842294089777051,0.247687606087774,-0.27141974692261, -0.000121022004292204,-0.00777917370270398,0.262636935764693,-0.293737503635154, -0.00012626729155768,-0.00713540650763678,0.277586265441612,-0.316055260347697, -0.000131512578822324,-0.00649163931256913,0.29253559511853,-0.33837301706024, -0.0001367578660878,-0.00584787211750215,0.307484924795449,-0.360690773772783, -0.000142003153352888,-0.00520410492243473,0.322434254472368,-0.383008530485326, -0.000147248440618641,-0.00456033772736819,0.337383584149286,-0.405326287197869, -0.000152493727884173,-0.00391657053230121,0.352332913826205,-0.427644043910413, -0.00015773901514915,-0.00327280333723379,0.367282243503124,-0.449961800622956, -0.000162984302414571,-0.00262903614216681,0.382231573180043,-0.472279557335499, -0.000168229589679658,-0.00198526894709938,0.397180902856961,-0.494597314048042, -0.00017347487694519,-0.0013415017520324,0.41213023253388,-0.516915070760586, -0.000178720164210611,-0.000697734556965424,0.427079562210799,-0.539232827473128, -0.000183965451476253,-5.39673618988878e-05,0.442028891887717,-0.561550584185672, -0.00018921073874123,0.000589799833168758,0.456978221564636,-0.583868340898215, -0.000194456026006318,0.00123356702823596,0.471927551241555,-0.606186097610758, -0.000199701313271627,0.00187733422330361,0.486876880918474,-0.628503854323301, -0.000204946600537048,0.00252110141837036,0.501826210595393,-0.650821611035845, -0.000210191887802802,0.00316486861343668,0.516775540272311,-0.673139367748388, -7.93491674057067e-05,-0.0116305897499808,0.156304265631554,-0.139262949186268, -8.40577919143937e-05,-0.0109960276981653,0.170879818105791,-0.161855431057774, -8.8766416422692e-05,-0.0103614656463494,0.185455370580027,-0.184447912929279, -9.34750409314344e-05,-0.00972690359453376,0.200030923054264,-0.207040394800784, -9.81836654398993e-05,-0.00909234154271821,0.214606475528501,-0.22963287667229, -0.000102892289948364,-0.00845777949090232,0.229182028002737,-0.252225358543795, -0.000107600914456663,-0.00782321743908621,0.243757580476974,-0.274817840415301, -0.000112309538965294,-0.00718865538727065,0.258333132951211,-0.297410322286806, -0.000117018163473759,-0.00655409333545487,0.272908685425448,-0.320002804158311, -0.000121726787982279,-0.00591953128363887,0.287484237899685,-0.342595286029817, -0.000126435412490911,-0.00528496923182353,0.302059790373921,-0.365187767901322, -0.000131144036999542,-0.00465040718000798,0.316635342848158,-0.387780249772827, -0.00013585266150784,-0.00401584512819197,0.331210895322394,-0.410372731644333, -0.000140561286016583,-0.00338128307637642,0.345786447796631,-0.432965213515838, -0.00014526991052477,-0.00274672102455997,0.360362000270868,-0.455557695387344, -0.000149978535033402,-0.00211215897274442,0.374937552745105,-0.478150177258849, -0.000154687159542144,-0.00147759692092908,0.389513105219341,-0.500742659130354, -0.000159395784050553,-0.000843034869112858,0.404088657693578,-0.52333514100186, -0.000164104408558963,-0.0002084728172973,0.418664210167815,-0.545927622873365, -0.000168813033067816,0.000426089234518034,0.433239762642051,-0.56852010474487, -0.000173521657576226,0.00106065128633359,0.447815315116288,-0.591112586616376, -0.000178230282084746,0.00169521333814959,0.462390867590525,-0.613705068487881, -0.000182938906593266,0.00232977538996559,0.476966420064761,-0.636297550359386, -0.000187647531101343,0.00296433744178204,0.491541972538998,-0.658890032230892, -0.000192356155610529,0.00359889949359671,0.506117525013235,-0.681482514102397, -7.33084283427998e-05,-0.0108690271586309,0.154227234967652,-0.141367541756875, -7.7395808252001e-05,-0.0102500226536285,0.168345754685598,-0.164290463402033, -8.14831881611466e-05,-0.00963101814862588,0.182464274403545,-0.187213385047191, -8.55705680705143e-05,-0.00901201364362358,0.196582794121492,-0.210136306692349, -8.96579479794934e-05,-0.00839300913862084,0.210701313839439,-0.233059228337508, -9.37453278886391e-05,-0.00777400463361799,0.224819833557386,-0.255982149982666, -9.78327077979513e-05,-0.00715500012861559,0.238938353275333,-0.278905071627824, -0.000101920087707263,-0.00653599562361329,0.253056872993279,-0.301827993272982, -0.000106007467616687,-0.00591699111861121,0.267175392711226,-0.32475091491814, -0.000110094847525444,-0.00529798661360847,0.281293912429172,-0.347673836563299, -0.000114182227434312,-0.00467898210860529,0.295412432147119,-0.370596758208457, -0.000118269607344068,-0.00405997760360322,0.309530951865066,-0.393519679853615, -0.000122356987252714,-0.00344097309860025,0.323649471583013,-0.416442601498773, -0.000126444367162137,-0.00282196859359796,0.33776799130096,-0.439365523143932, -0.000130531747071783,-0.00220296408859588,0.351886511018906,-0.46228844478909, -0.000134619126980651,-0.00158395958359314,0.366005030736853,-0.485211366434248, -0.00013870650688963,-0.000964955078589957,0.3801235504548,-0.508134288079406, -0.00014279388679872,-0.000345950573587661,0.394242070172747,-0.531057209724564, -0.000146881266707699,0.000273053931415079,0.408360589890693,-0.553980131369722, -0.000150968646617455,0.000892058436416931,0.42247910960864,-0.576903053014881, -0.000155056026526768,0.00151106294141945,0.436597629326587,-0.599825974660039, -0.000159143406435525,0.00213006744642241,0.450716149044534,-0.622748896305197, -0.000163230786345059,0.00274907195142449,0.46483466876248,-0.645671817950355, -0.000167318166253705,0.00336807645642789,0.478953188480428,-0.668594739595514, -0.00017140554616335,0.00398708096142952,0.493071708198374,-0.691517661240672, -6.62387076846849e-05,-0.0100268952049943,0.151768758559499,-0.143793472285164, -6.96463069615461e-05,-0.00943192434013529,0.165350365663682,-0.167097286624643, -7.30539062381852e-05,-0.00883695347527602,0.178931972767865,-0.190401100964121, -7.64615055150464e-05,-0.00824198261041698,0.192513579872047,-0.2137049153036, -7.98691047917965e-05,-0.00764701174555782,0.20609518697623,-0.237008729643079, -8.32767040687687e-05,-0.00705204088069888,0.219676794080413,-0.260312543982558, -8.66843033453524e-05,-0.00645707001583928,0.233258401184596,-0.283616358322036, -9.0091902622158e-05,-0.00586209915098057,0.246840008288779,-0.306920172661515, -9.34995018992413e-05,-0.00526712828612164,0.260421615392961,-0.330223987000994, -9.69071011758804e-05,-0.0046721574212627,0.274003222497144,-0.353527801340473, -0.000100314700452242,-0.00407718655640266,0.287584829601327,-0.376831615679952, -0.000103722299729547,-0.00348221569154439,0.30116643670551,-0.400135430019431, -0.000107129899006408,-0.00288724482668568,0.314748043809692,-0.423439244358909, -0.000110537498283048,-0.00229227396182585,0.328329650913876,-0.446743058698388, -0.000113945097559465,-0.00169730309696625,0.341911258018059,-0.470046873037867, -0.000117352696836104,-0.00110233223210687,0.355492865122241,-0.493350687377346, -0.000120760296113631,-0.000507361367248826,0.369074472226424,-0.516654501716824, -0.000124167895390159,8.76094976105524e-05,0.382656079330607,-0.539958316056303, -0.000127575494666909,0.000682580362469709,0.39623768643479,-0.563262130395782, -0.000130983093942993,0.00127755122732998,0.409819293538973,-0.586565944735261, -0.000134390693220521,0.00187252209218736,0.423400900643154,-0.60986975907474, -0.00013779829249716,0.00246749295704696,0.436982507747338,-0.633173573414219, -0.000141205891773799,0.00306246382190656,0.450564114851521,-0.656477387753697, -0.000144613491050771,0.00365743468676527,0.464145721955704,-0.679781202093176, -0.000148021090327299,0.00425240555162532,0.477727329059887,-0.703085016432655, -5.83493734662988e-05,-0.00914679607477842,0.148990860315642,-0.146456348314583, -6.1060915826916e-05,-0.00858576022960544,0.161970663058358,-0.17017825790191, -6.37724581875609e-05,-0.00802472438443202,0.174950465801074,-0.193900167489237, -6.64840005480949e-05,-0.0074636885392585,0.18793026854379,-0.217622077076563, -6.91955429087954e-05,-0.00690265269408552,0.200910071286505,-0.24134398666389, -7.19070852696069e-05,-0.00634161684891255,0.213889874029221,-0.265065896251217, -7.46186276303629e-05,-0.00578058100373946,0.226869676771936,-0.288787805838544, -7.73301699908968e-05,-0.00521954515856615,0.239849479514652,-0.312509715425871, -8.00417123514308e-05,-0.00465850931339284,0.252829282257368,-0.336231625013198, -8.27532547122423e-05,-0.00409747346821976,0.265809085000084,-0.359953534600524, -8.54647970731648e-05,-0.0035364376230469,0.278788887742799,-0.383675444187851, -8.81763394339208e-05,-0.00297540177787403,0.291768690485515,-0.407397353775178, -9.08878817946768e-05,-0.00241436593270072,0.304748493228231,-0.431119263362505, -9.35994241548777e-05,-0.00185333008752675,0.317728295970947,-0.454841172949832, -9.63109665156336e-05,-0.00129229424235366,0.330708098713663,-0.478563082537159, -9.90225088760566e-05,-0.000731258397180579,0.343687901456378,-0.502284992124486, -0.000101734051237257,-0.000170222552007715,0.356667704199094,-0.526006901711812, -0.000104445593597458,0.000390813293166037,0.36964750694181,-0.549728811299139, -0.000107157135958214,0.000951849138338901,0.382627309684525,-0.573450720886466, -0.000109868678319414,0.00151288498351176,0.395607112427241,-0.597172630473793, -0.00011258022068017,0.00207392082868463,0.408586915169957,-0.62089454006112, -0.000115291763040704,0.00263495667385749,0.421566717912672,-0.644616449648447, -0.000118003305400793,0.00319599251903213,0.434546520655388,-0.668338359235773, -0.000120714847761549,0.00375702836420455,0.447526323398104,-0.692060268823101, -0.000123426390122194,0.0043180642093783,0.46050612614082,-0.715782178410427, -5.00008437605282e-05,-0.0082806122605158,0.146012545416299,-0.149226898824529, -5.20510459185441e-05,-0.00776331374063288,0.158352378488708,-0.173383809511919, -5.41012480767544e-05,-0.00724601522075019,0.170692211561116,-0.19754072019931, -5.61514502348537e-05,-0.00672871670086739,0.183032044633524,-0.221697630886701, -5.82016523930085e-05,-0.0062114181809847,0.195371877705932,-0.245854541574092, -6.02518545513853e-05,-0.005694119661102,0.207711710778341,-0.270011452261483, -6.23020567090404e-05,-0.00517682114121887,0.220051543850749,-0.294168362948873, -6.43522588675838e-05,-0.00465952262133662,0.232391376923157,-0.318325273636264, -6.64024610255165e-05,-0.00414222410145371,0.244731209995565,-0.342482184323655, -6.84526631838933e-05,-0.00362492558157146,0.257071043067973,-0.366639095011046, -7.05028653420481e-05,-0.00310762706168832,0.269410876140382,-0.390796005698437, -7.25530674999808e-05,-0.00259032854180563,0.28175070921279,-0.414952916385828, -7.46032696582466e-05,-0.00207303002192294,0.294090542285198,-0.439109827073218, -7.66534718161793e-05,-0.00155573150204003,0.306430375357606,-0.463266737760609, -7.87036739744451e-05,-0.00103843298215733,0.318770208430015,-0.487423648448, -8.07538761323778e-05,-0.00052113446227442,0.331110041502423,-0.511580559135391, -8.28040782908657e-05,-3.83594239217189e-06,0.343449874574831,-0.535737469822782, -8.48542804487984e-05,0.000513462577490742,0.355789707647239,-0.559894380510173, -8.69044826065091e-05,0.0010307610973741,0.368129540719647,-0.584051291197563, -8.89546847649969e-05,0.00154805961725657,0.380469373792056,-0.608208201884954, -9.10048869232627e-05,0.00206535813713948,0.392809206864464,-0.632365112572345, -9.30550890809734e-05,0.00258265665702284,0.405149039936873,-0.656522023259736, -9.51052912396833e-05,0.00309995517690442,0.41748887300928,-0.680678933947127, -9.7155493397727e-05,0.00361725369678734,0.429828706081689,-0.704835844634518, -9.92056955558818e-05,0.00413455221666981,0.442168539154097,-0.728992755321908, -4.1649144156386e-05,-0.00747778791928899,0.1429938539503,-0.151953420834266, -4.31194110468991e-05,-0.00701196418013939,0.154690116754021,-0.176538419755143, -4.45896779373012e-05,-0.00654614044099,0.166386379557741,-0.201123418676019, -4.60599448279808e-05,-0.00608031670184073,0.178082642361462,-0.225708417596895, -4.75302117183274e-05,-0.00561449296269123,0.189778905165182,-0.250293416517771, -4.9000478609118e-05,-0.00514866922354185,0.201475167968903,-0.274878415438647, -5.04707454994646e-05,-0.00468284548439235,0.213171430772624,-0.299463414359523, -5.19410123900332e-05,-0.00421702174524308,0.224867693576344,-0.324048413280399, -5.34112792803243e-05,-0.00375119800609336,0.236563956380065,-0.348633412201276, -5.48815461711705e-05,-0.00328537426694431,0.248260219183785,-0.373218411122152, -5.6351813061406e-05,-0.00281955052779437,0.259956481987506,-0.397803410043028, -5.78220799517526e-05,-0.00235372678864443,0.271652744791227,-0.422388408963904, -5.92923468426543e-05,-0.00188790304949538,0.283349007594947,-0.44697340788478, -6.07626137333339e-05,-0.00142207931034699,0.295045270398667,-0.471558406805656, -6.22328806233474e-05,-0.000956255571196385,0.306741533202388,-0.496143405726533, -6.37031475140271e-05,-0.000490431832047111,0.318437796006109,-0.520728404647409, -6.51734144045957e-05,-2.46080928978376e-05,0.330134058809829,-0.545313403568285, -6.66436812952753e-05,0.000441215646250992,0.341830321613549,-0.569898402489161, -6.81139481855109e-05,0.000907039385401376,0.353526584417271,-0.594483401410037, -6.95842150765236e-05,0.00137286312454998,0.365222847220991,-0.619068400330913, -7.10544819670922e-05,0.00183868686369948,0.376919110024712,-0.64365339925179, -7.25247488566616e-05,0.00230451060284986,0.388615372828432,-0.668238398172666, -7.39950157475633e-05,0.00277033434199936,0.400311635632153,-0.692823397093541, -7.54652826381319e-05,0.00323615808114841,0.412007898435873,-0.717408396014418, -7.69355495288115e-05,0.00370198182029746,0.423704161239594,-0.741993394935294, -3.37508690498589e-05,-0.00677438140676512,0.140103258196382,-0.154493536871263, -3.47523332031585e-05,-0.00636407390783766,0.15118765866025,-0.179477356628077, -3.57537973568189e-05,-0.00595376640891054,0.162272059124119,-0.204461176384891, -3.67552615102018e-05,-0.00554345890998331,0.173356459587987,-0.229444996141705, -3.77567256637512e-05,-0.00513315141105608,0.184440860051856,-0.254428815898518, -3.87581898171896e-05,-0.00472284391212874,0.195525260515725,-0.279412635655332, -3.97596539704614e-05,-0.00431253641320106,0.206609660979594,-0.304396455412146, -4.07611181241219e-05,-0.00390222891427427,0.217694061443462,-0.32938027516896, -4.17625822773382e-05,-0.0034919214153466,0.228778461907331,-0.354364094925773, -4.27640464311652e-05,-0.00308161391641959,0.239862862371199,-0.379347914682587, -4.37655105844925e-05,-0.00267130641749236,0.250947262835068,-0.404331734439401, -4.47669747383195e-05,-0.00226099891856557,0.262031663298936,-0.429315554196214, -4.57684388915913e-05,-0.0018506914196379,0.273116063762805,-0.454299373953028, -4.67699030453073e-05,-0.00144038392071111,0.284200464226674,-0.479283193709842, -4.77713671985791e-05,-0.00103007642178388,0.295284864690542,-0.504267013466656, -4.8772831352295e-05,-0.000619768922857089,0.30636926515441,-0.529250833223469, -4.97742955052338e-05,-0.000209461423928969,0.317453665618279,-0.554234652980283, -5.07757596593938e-05,0.000200846074997596,0.328538066082148,-0.579218472737097, -5.17772238124437e-05,0.000611153573925272,0.339622466546017,-0.604202292493911, -5.27786879659375e-05,0.0010214610728525,0.350706867009885,-0.629186112250724, -5.37801521195425e-05,0.00143176857178018,0.361791267473754,-0.654169932007538, -5.47816162728143e-05,0.00184207607070741,0.372875667937623,-0.679153751764352, -5.57830804270854e-05,0.00225238356963331,0.383960068401491,-0.704137571521165, -5.67845445798021e-05,0.00266269106856232,0.39504446886536,-0.729121391277979, -5.77860087340731e-05,0.00307299856748777,0.406128869329228,-0.754105211034793, -2.6667957315929e-05,-0.00618777214258726,0.137481549880341,-0.156742000544548, -2.73189038292321e-05,-0.00583271698214405,0.148014448552917,-0.182078849119217, -2.79698503422576e-05,-0.00547766182170062,0.158547347225494,-0.207415697693885, -2.86207968553387e-05,-0.00512260666125741,0.16908024589807,-0.232752546268554, -2.92717433685863e-05,-0.00476755150081409,0.179613144570646,-0.258089394843222, -2.99226898816118e-05,-0.00441249634037066,0.190146043243222,-0.28342624341789, -3.05736363946929e-05,-0.00405744117992723,0.200678941915799,-0.308763091992559, -3.12245829076074e-05,-0.00370238601948381,0.211211840588375,-0.334099940567227, -3.18755294210771e-05,-0.00334733085904082,0.221744739260951,-0.359436789141895, -3.25264759336585e-05,-0.00299227569859672,0.232277637933528,-0.384773637716564, -3.31774224470172e-05,-0.00263722053815374,0.242810536606104,-0.410110486291232, -3.38283689602648e-05,-0.00228216537771053,0.25334343527868,-0.435447334865901, -3.44793154735124e-05,-0.0019271102172671,0.263876333951256,-0.460784183440569, -3.51302619864269e-05,-0.0015720550568239,0.274409232623832,-0.486121032015237, -3.57812084994524e-05,-0.00121699989638069,0.284942131296408,-0.511457880589906, -3.64321550127e-05,-0.000861944735937481,0.295475029968985,-0.536794729164574, -3.70831015263917e-05,-0.000506889575494718,0.306007928641561,-0.562131577739243, -3.77340480390842e-05,-0.0001518344150504,0.316540827314138,-0.587468426313911, -3.83849945514436e-05,0.000203220745393473,0.327073725986714,-0.612805274888579, -3.90359410652463e-05,0.000558275905836236,0.33760662465929,-0.638142123463248, -3.96868875783829e-05,0.000913331066279444,0.348139523331866,-0.663478972037916, -4.03378340910754e-05,0.00126838622672309,0.358672422004442,-0.688815820612585, -4.09887806041009e-05,0.00162344138716675,0.369205320677019,-0.714152669187253, -4.16397271180147e-05,0.00197849654760862,0.379738219349595,-0.739489517761921, -4.22906736302631e-05,0.00233355170805405,0.390271118022172,-0.76482636633659, -2.06117743312972e-05,-0.00571810715990129,0.135217681313593,-0.158643951709748, -2.10185152314524e-05,-0.00541428565188995,0.145276817734889,-0.184279423553027, -2.14252561317463e-05,-0.00511046414387861,0.155335954156185,-0.209914895396306, -2.18319970321512e-05,-0.00480664263586728,0.165395090577481,-0.235550367239585, -2.22387379325006e-05,-0.00450282112785594,0.175454226998777,-0.261185839082864, -2.26454788325725e-05,-0.0041989996198446,0.185513363420073,-0.286821310926142, -2.30522197330885e-05,-0.00389517811183371,0.195572499841369,-0.312456782769421, -2.34589606333269e-05,-0.00359135660382237,0.205631636262665,-0.3380922546127, -2.38657015336763e-05,-0.00328753509581126,0.215690772683961,-0.363727726455979, -2.42724424338592e-05,-0.0029837135877997,0.225749909105257,-0.389363198299257, -2.4679183333931e-05,-0.00267989207978769,0.235809045526554,-0.414998670142536, -2.5085924234336e-05,-0.0023760705717768,0.24586818194785,-0.440634141985815, -2.54926651341858e-05,-0.0020722490637648,0.255927318369146,-0.466269613829093, -2.58994060349238e-05,-0.00176842755575413,0.265986454790442,-0.491905085672372, -2.63061469346626e-05,-0.00146460604774235,0.276045591211738,-0.517540557515651, -2.67128878348455e-05,-0.00116078453973079,0.286104727633034,-0.54317602935893, -2.71196287353614e-05,-0.000856963031720337,0.29616386405433,-0.568811501202208, -2.75263696358774e-05,-0.000553141523708556,0.306223000475627,-0.594446973045487, -2.79331105359493e-05,-0.000249320015697219,0.316282136896922,-0.620082444888766, -2.83398514364652e-05,5.45014923138964e-05,0.326341273318218,-0.645717916732044, -2.87465923365371e-05,0.000358323000325456,0.336400409739515,-0.671353388575323, -2.9153333236831e-05,0.000662144508337015,0.346459546160811,-0.696988860418602, -2.95600741369029e-05,0.00096596601634813,0.356518682582107,-0.722624332261881, -2.99668150374188e-05,0.00126978752435924,0.366577819003403,-0.748259804105159, -3.03735559383789e-05,0.00157360903236947,0.376636955424698,-0.773895275948438, -1.56401730516953e-05,-0.00535386897811518,0.133343846221497,-0.16019196666412, -1.5886728459702e-05,-0.00509479837193472,0.14301247643955,-0.18607049063933, -1.61332838677364e-05,-0.00483572776575414,0.152681106657604,-0.211949014614541, -1.63798392761039e-05,-0.00457665715957412,0.162349736875657,-0.237827538589751, -1.66263946840273e-05,-0.00431758655339332,0.172018367093711,-0.263706062564962, -1.68729500921727e-05,-0.00405851594721307,0.181686997311764,-0.289584586540172, -1.71195055003182e-05,-0.00379944534103283,0.191355627529818,-0.315463110515383, -1.73660609084636e-05,-0.00354037473485214,0.201024257747871,-0.341341634490593, -1.7612616316609e-05,-0.00328130412867189,0.210692887965925,-0.367220158465803, -1.7859171724699e-05,-0.0030222335224912,0.220361518183979,-0.393098682441014, -1.81057271327889e-05,-0.00276316291631096,0.230030148402032,-0.418977206416224, -1.83522825406568e-05,-0.00250409231013027,0.239698778620085,-0.444855730391435, -1.85988379493018e-05,-0.00224502170395069,0.249367408838139,-0.470734254366645, -1.88453933576138e-05,-0.00198595109777044,0.259036039056192,-0.496612778341856, -1.90919487651486e-05,-0.00172688049158976,0.268704669274245,-0.522491302317066, -1.93385041739047e-05,-0.00146780988540973,0.278373299492299,-0.548369826292277, -1.95850595816616e-05,-0.0012087392792286,0.288041929710353,-0.574248350267487, -1.98316149898625e-05,-0.000949668673048576,0.297710559928406,-0.600126874242698, -2.00781703979525e-05,-0.000690598066868109,0.30737919014646,-0.626005398217908, -2.03247258061534e-05,-0.000431527460687864,0.317047820364513,-0.651883922193118, -2.05712812143544e-05,-0.000172456854507619,0.326716450582567,-0.677762446168329, -2.08178366216671e-05,8.66137516739585e-05,0.33638508080062,-0.703640970143539, -2.10643920308673e-05,0.000345684357853315,0.346053711018674,-0.72951949411875, -2.13109474387352e-05,0.000604754964034004,0.355722341236727,-0.75539801809396, -2.1557502846381e-05,0.000863825570214694,0.365390971454781,-0.781276542069171, -1.16930969399354e-05,-0.00507804538306245,0.131846195381745,-0.161412865062537, -1.18395365694135e-05,-0.00485620558137778,0.141203732622371,-0.187483080957628, -1.19859761988916e-05,-0.00463436577969289,0.150561269862996,-0.213553296852719, -1.21324158283698e-05,-0.00441252597800801,0.159918807103622,-0.239623512747811, -1.22788554581255e-05,-0.00419068617632368,0.169276344344247,-0.265693728642902, -1.24252950874371e-05,-0.00396884637463835,0.178633881584873,-0.291763944537993, -1.25717347168597e-05,-0.00374700657295346,0.187991418825499,-0.317834160433084, -1.27181743465044e-05,-0.00352516677126924,0.197348956066124,-0.343904376328175, -1.28646139760935e-05,-0.00330332696958435,0.206706493306749,-0.369974592223267, -1.30110536054051e-05,-0.00308148716789947,0.216064030547375,-0.396044808118358, -1.31574932349388e-05,-0.0028596473662148,0.225421567788,-0.422115024013449, -1.33039328644724e-05,-0.00263780756452947,0.234779105028626,-0.44818523990854, -1.3450372494006e-05,-0.00241596776284525,0.244136642269251,-0.474255455803631, -1.35968121236507e-05,-0.00219412796116059,0.253494179509877,-0.500325671698722, -1.37432517531844e-05,-0.00197228815947548,0.262851716750503,-0.526395887593814, -1.3889691382829e-05,-0.00175044835779126,0.272209253991128,-0.552466103488905, -1.40361310118076e-05,-0.00152860855610526,0.281566791231754,-0.578536319383996, -1.41825706413412e-05,-0.00130676875442082,0.290924328472379,-0.604606535279087, -1.43290102712079e-05,-0.0010849289527366,0.300281865713005,-0.630676751174178, -1.44754499006305e-05,-0.00086308915105171,0.30963940295363,-0.656746967069269, -1.46218895299421e-05,-0.00064124934936638,0.318996940194256,-0.68281718296436, -1.47683291598089e-05,-0.000419409547681937,0.328354477434881,-0.708887398859452, -1.49147687897866e-05,-0.000197569745997939,0.337712014675507,-0.734957614754543, -1.50612084185431e-05,2.42700556878361e-05,0.347069551916133,-0.761027830649634, -1.52076480481877e-05,0.000246109857371835,0.356427089156758,-0.787098046544725, -8.64146219878292e-06,-0.00487274493939027,0.13068220539379,-0.162352081725297, -8.72754007852361e-06,-0.00468071059261466,0.139798559965167,-0.188569762999573, -8.81361795840307e-06,-0.00448867624583893,0.148914914536545,-0.214787444273849, -8.89969583817152e-06,-0.00429664189906354,0.158031269107922,-0.241005125548125, -8.98577371788445e-06,-0.00410460755228781,0.1671476236793,-0.2672228068224, -9.0718515977084e-06,-0.0039125732055123,0.176263978250677,-0.293440488096676, -9.15792947747684e-06,-0.00372053885873669,0.185380332822054,-0.319658169370952, -9.24400735718978e-06,-0.00352850451196107,0.194496687393432,-0.345875850645227, -9.33008523701373e-06,-0.00333647016518546,0.203613041964809,-0.372093531919503, -9.41616311667115e-06,-0.00314443581840984,0.212729396536187,-0.398311213193779, -9.50224099660613e-06,-0.00295240147163445,0.221845751107564,-0.424528894468055, -9.58831887598599e-06,-0.00276036712485839,0.230962105678942,-0.45074657574233, -9.67439675603199e-06,-0.00256833277808322,0.240078460250319,-0.476964257016606, -9.76047463574492e-06,-0.00237629843130738,0.249194814821697,-0.503181938290882, -9.84655251534683e-06,-0.00218426408453176,0.258311169393074,-0.529399619565157, -9.93263039517078e-06,-0.00199222973775615,0.267427523964451,-0.555617300839433, -1.00187082752168e-05,-0.00180019539098142,0.276543878535828,-0.581834982113709, -1.01047861549297e-05,-0.00160816104420536,0.285660233107206,-0.608052663387985, -1.01908640346426e-05,-0.00141612669742974,0.294776587678584,-0.63427034466226, -1.02769419145776e-05,-0.00122409235065435,0.303892942249961,-0.660488025936536, -1.03630197941795e-05,-0.00103205800387896,0.313009296821338,-0.686705707210812, -1.04490976741145e-05,-0.000840023657103561,0.322125651392715,-0.712923388485088, -1.05351755533833e-05,-0.000647989310326835,0.331242005964093,-0.739141069759363, -1.06212534334293e-05,-0.000455954963551886,0.340358360535471,-0.765358751033639, -1.07073313136974e-05,-0.000263920616776936,0.349474715106848,-0.791576432307915, -6.33000884706081e-06,-0.00472178870364792,0.12979697585986,-0.163060852918376, -6.38055721335906e-06,-0.00455291819349901,0.138730250963072,-0.189389817581125, -6.43110558001814e-06,-0.00438404768335054,0.147663526066284,-0.215718782243874, -6.48165394667721e-06,-0.00421517717320241,0.156596801169495,-0.242047746906623, -6.53220231316975e-06,-0.00404630666305394,0.165530076272707,-0.268376711569372, -6.58275067955127e-06,-0.00387743615290526,0.174463351375918,-0.294705676232121, -6.63329904609933e-06,-0.00370856564275646,0.18339662647913,-0.32103464089487, -6.68384741286943e-06,-0.00353969513260854,0.192329901582342,-0.347363605557619, -6.73439577908441e-06,-0.00337082462245952,0.201263176685553,-0.373692570220368, -6.78494414596553e-06,-0.00320195411231161,0.210196451788765,-0.400021534883117, -6.83549251234705e-06,-0.00303308360216259,0.219129726891977,-0.426350499545865, -6.88604087883959e-06,-0.00286421309201446,0.228063001995188,-0.452679464208614, -6.93658924511009e-06,-0.00269534258186543,0.2369962770984,-0.479008428871363, -6.98713761171366e-06,-0.00252647207171686,0.245929552201611,-0.505337393534112, -7.03768597798415e-06,-0.00235760156156806,0.254862827304823,-0.531666358196861, -7.08823434503181e-06,-0.00218873105142081,0.263796102408034,-0.55799532285961, -7.13878271152435e-06,-0.00201986054127157,0.272729377511246,-0.584324287522359, -7.18933107768382e-06,-0.00185099003112277,0.281662652614458,-0.610653252185108, -7.23987944450943e-06,-0.00168211952097463,0.290595927717669,-0.636982216847857, -7.290427811113e-06,-0.00151324901082672,0.29952920282088,-0.663311181510606, -7.34097617716145e-06,-0.00134437850067659,0.308462477924093,-0.689640146173355, -7.39152454387604e-06,-0.00117550799052868,0.317395753027304,-0.715969110836104, -7.44207291070165e-06,-0.00100663748038077,0.326329028130516,-0.742298075498853, -7.49262127719419e-06,-0.000837766970232412,0.335262303233727,-0.768627040161602, -7.54316964357571e-06,-0.000668896460084056,0.344195578336938,-0.794956004824351, -4.60617266223595e-06,-0.00461173345207377,0.129134773440109,-0.16358800181086, -4.6360770110665e-06,-0.00446046600189209,0.1379312845014,-0.189999733543656, -4.6659813601746e-06,-0.00430919855171075,0.146727795562692,-0.216411465276453, -4.69588570917168e-06,-0.00415793110152907,0.155524306623983,-0.24282319700925, -4.72579005805773e-06,-0.00400666365134761,0.164320817685275,-0.269234928742047, -4.75569440705481e-06,-0.00385539620116604,0.173117328746566,-0.295646660474844, -4.78559875621842e-06,-0.00370412875098491,0.181913839807858,-0.32205839220764, -4.81550310504897e-06,-0.0035528613008029,0.190710350869149,-0.348470123940437, -4.84540745371298e-06,-0.00340159385062111,0.199506861930441,-0.374881855673234, -4.87531180287659e-06,-0.00325032640043998,0.208303372991732,-0.401293587406031, -4.90521615181816e-06,-0.00309905895025842,0.217099884053024,-0.427705319138827, -4.93512050103728e-06,-0.00294779150007685,0.225896395114315,-0.454117050871624, -4.96502484970129e-06,-0.00279652404989505,0.234692906175607,-0.480528782604421, -4.99492919903144e-06,-0.00264525659971415,0.243489417236898,-0.506940514337218, -5.02483354802852e-06,-0.0024939891495328,0.25228592829819,-0.533352246070015, -5.05473789735866e-06,-0.00234272169935168,0.261082439359481,-0.559763977802811, -5.08464224591165e-06,-0.00219145424916989,0.269878950420772,-0.586175709535608, -5.11454659557486e-06,-0.00204018679898921,0.278675461482064,-0.612587441268405, -5.14445094412785e-06,-0.00188891934880653,0.287471972543356,-0.638999173001202, -5.17435529268084e-06,-0.00173765189862474,0.296268483604647,-0.665410904733998, -5.20425964178894e-06,-0.00158638444844339,0.305064994665939,-0.691822636466795, -5.23416399056398e-06,-0.0014351169982616,0.31386150572723,-0.718234368199592, -5.26406834000515e-06,-0.00128384954808025,0.322658016788522,-0.744646099932389, -5.29397268922427e-06,-0.00113258209789935,0.331454527849813,-0.771057831665186, -5.32387703788828e-06,-0.000981314647717557,0.340251038911105,-0.797469563397983, -3.33536137761548e-06,-0.00453197127607574,0.128645489278008,-0.163975845292442, -3.35330629214203e-06,-0.00439385947448934,0.137341051779052,-0.190448471905349, -3.3712512069739e-06,-0.00425574767290315,0.146036614280096,-0.216921098518255, -3.38919612141719e-06,-0.00411763587131653,0.15473217678114,-0.243393725131162, -3.40714103619355e-06,-0.00397952406973046,0.163427739282184,-0.269866351744068, -3.42508595096991e-06,-0.0038414122681445,0.172123301783228,-0.296338978356975, -3.44303086557973e-06,-0.00370330046655787,0.180818864284272,-0.322811604969881, -3.46097577996751e-06,-0.00356518866497146,0.189514426785315,-0.349284231582788, -3.47892069452183e-06,-0.00342707686338506,0.198209989286359,-0.375756858195695, -3.49686560979778e-06,-0.00328896506179954,0.206905551787403,-0.402229484808601, -3.51481052418556e-06,-0.00315085326021314,0.215601114288447,-0.428702111421508, -3.53275543873988e-06,-0.00301274145862673,0.224296676789491,-0.455174738034414, -3.55070035351623e-06,-0.00287462965704055,0.232992239290534,-0.481647364647321, -3.5686452678485e-06,-0.0027365178554537,0.241687801791578,-0.508119991260227, -3.58659018273588e-06,-0.00259840605386774,0.250383364292622,-0.534592617873134, -3.60453509751224e-06,-0.00246029425228222,0.259078926793666,-0.56106524448604, -3.6224800122886e-06,-0.00232218245069538,0.26777448929471,-0.587537871098947, -3.64042492673189e-06,-0.00218407064910897,0.276470051795754,-0.614010497711853, -3.65836984095314e-06,-0.00204595884752257,0.285165614296797,-0.64048312432476, -3.67631475572949e-06,-0.00190784704593616,0.293861176797841,-0.666955750937666, -3.69425967094994e-06,-0.00176973524435065,0.302556739298885,-0.693428377550573, -3.71220458550425e-06,-0.00163162344276424,0.311252301799929,-0.71990100416348, -3.73014950005857e-06,-0.00149351164117739,0.319947864300973,-0.746373630776386, -3.74809441494595e-06,-0.00135539983959188,0.328643426802016,-0.772846257389292, -3.76603932938924e-06,-0.00121728803800547,0.33733898930306,-0.799318884002199, -2.40647533106264e-06,-0.00447440157313828,0.128287254317087,-0.164258928304319, -2.41745189122344e-06,-0.0043460014150305,0.136908960986774,-0.190776001470766, -2.42842845105118e-06,-0.00421760125692239,0.14553066765646,-0.217293074637212, -2.43940501060136e-06,-0.00408920109881394,0.154152374326147,-0.243810147803659, -2.45038157059563e-06,-0.00396080094070594,0.162774080995833,-0.270327220970106, -2.46135813081194e-06,-0.00383240078259828,0.171395787665519,-0.296844294136552, -2.47233469019559e-06,-0.00370400062448972,0.180017494335206,-0.323361367302999, -2.48331125013435e-06,-0.00357560046638183,0.188639201004892,-0.349878440469445, -2.49428781012861e-06,-0.00344720030827372,0.197260907674579,-0.376395513635892, -2.50526437001186e-06,-0.00331880015016583,0.205882614344265,-0.402912586802339, -2.51624092972857e-06,-0.0031903999920575,0.214504321013952,-0.429429659968785, -2.5272174895008e-06,-0.00306199983394961,0.223126027683638,-0.455946733135232, -2.53819404938405e-06,-0.00293359967584106,0.231747734353325,-0.482463806301679, -2.54917060948934e-06,-0.00280519951773339,0.240369441023011,-0.508980879468125, -2.56014716915054e-06,-0.00267679935962506,0.248991147692698,-0.535497952634572, -2.57112372914481e-06,-0.00254839920151695,0.257612854362384,-0.562015025801018, -2.58210028902806e-06,-0.00241999904340928,0.26623456103207,-0.588532098967465, -2.59307684924437e-06,-0.00229159888530139,0.274856267701757,-0.615049172133912, -2.60405340890557e-06,-0.00216319872719284,0.283477974371444,-0.641566245300358, -2.61502996845575e-06,-0.00203479856908428,0.29209968104113,-0.668083318466805, -2.62600652878309e-06,-0.00190639841097662,0.300721387710817,-0.694600391633251, -2.63698308833327e-06,-0.00177799825286895,0.309343094380502,-0.721117464799698, -2.64795964821651e-06,-0.00164959809476084,0.317964801050189,-0.747634537966145, -2.65893620798874e-06,-0.00152119793665273,0.326586507719875,-0.774151611132592, -2.66991276809403e-06,-0.00139279777854417,0.335208214389562,-0.800668684299038, -1.73173381648462e-06,-0.00443296884346656,0.128026715296367,-0.164464346390841, -1.7385968573147e-06,-0.00431167376626507,0.136594736571357,-0.19101367202599, -1.74545989839459e-06,-0.0041903786890638,0.145162757846347,-0.217562997661139, -1.75232293919692e-06,-0.00406908361186265,0.153730779121336,-0.244112323296288, -1.75918597999924e-06,-0.00394778853466127,0.162298800396326,-0.270661648931437, -1.76604902096811e-06,-0.00382649345746011,0.170866821671316,-0.297210974566586, -1.77291206215902e-06,-0.00370519838025896,0.179434842946306,-0.323760300201735, -1.7797751027393e-06,-0.00358390330305736,0.188002864221296,-0.350309625836884, -1.78663814376367e-06,-0.0034626082258562,0.196570885496286,-0.376858951472033, -1.79350118501009e-06,-0.00334131314865527,0.205138906771276,-0.403408277107182, -1.80036422559038e-06,-0.00322001807145345,0.213706928046266,-0.429957602742331, -1.80722726617066e-06,-0.00309872299425185,0.222274949321256,-0.456506928377479, -1.81409030741708e-06,-0.00297742791705091,0.230842970596246,-0.483056254012628, -1.82095334844146e-06,-0.00285613283984976,0.239410991871236,-0.509605579647777, -1.82781638924379e-06,-0.00273483776264882,0.247979013146225,-0.536154905282926, -1.83467943026816e-06,-0.00261354268544767,0.256547034421215,-0.562704230918075, -1.84154247073742e-06,-0.00249224760824562,0.265115055696205,-0.589253556553224, -1.8484055117618e-06,-0.00237095253104425,0.273683076971196,-0.615802882188373, -1.85526855300822e-06,-0.00224965745384376,0.282251098246185,-0.642352207823522, -1.86213159347748e-06,-0.00212836237664105,0.290819119521176,-0.668901533458671, -1.86899463494594e-06,-0.002007067299441,0.299387140796165,-0.69545085909382, -1.8758576754152e-06,-0.00188577222223918,0.307955162071155,-0.722000184728969, -1.88272071677265e-06,-0.00176447714503825,0.316523183346145,-0.748549510364117, -1.88958375779702e-06,-0.00164318206783776,0.325091204621134,-0.775098835999267, -1.89644679871037e-06,-0.00152188699063638,0.333659225896124,-0.801648161634415, -1.24381567481735e-06,-0.00440320973356756,0.127838147741034,-0.164612777327467, -1.24820488994759e-06,-0.00428707894052194,0.136367328783441,-0.19118540794135, -1.25259410488354e-06,-0.00417094814747587,0.144896509825848,-0.217758038555233, -1.25698331998603e-06,-0.00405481735443025,0.153425690868254,-0.244330669169116, -1.26137253486647e-06,-0.00393868656138407,0.161954871910661,-0.270903299782999, -1.26576175007997e-06,-0.00382255576833823,0.170484052953068,-0.297475930396882, -1.27015096473837e-06,-0.00370642497529206,0.179013233995475,-0.324048561010765, -1.2745401800629e-06,-0.00359029418224655,0.187542415037882,-0.350621191624647, -1.27892939499885e-06,-0.00347416338920081,0.196071596080288,-0.37719382223853, -1.28331861010134e-06,-0.00335803259615486,0.204600777122695,-0.403766452852413, -1.28770782503729e-06,-0.0032419018031089,0.213129958165102,-0.430339083466296, -1.29209704036182e-06,-0.00312577101006362,0.221659139207508,-0.456911714080179, -1.29648625513124e-06,-0.00300964021701722,0.230188320249916,-0.483484344694062, -1.30087547001168e-06,-0.00289350942397104,0.238717501292323,-0.510056975307944, -1.30526468522518e-06,-0.00277737863092575,0.247246682334729,-0.536629605921828, -1.30965389977256e-06,-0.00266124783787891,0.255775863377136,-0.56320223653571, -1.31404311498606e-06,-0.0025451170448334,0.264305044419543,-0.589774867149593, -1.31843233008855e-06,-0.00242898625178789,0.27283422546195,-0.616347497763476, -1.32282154530206e-06,-0.00231285545874149,0.281363406504357,-0.642920128377359, -1.32721076029352e-06,-0.00219672466569554,0.289892587546764,-0.669492758991242, -1.33159997572907e-06,-0.00208059387265047,0.29842176858917,-0.696065389605125, -1.33598918983235e-06,-0.00196446307960363,0.306950949631577,-0.722638020219008, -1.34037840537893e-06,-0.00184833228655856,0.315480130673984,-0.749210650832891, -1.34476762025937e-06,-0.00173220149351216,0.324009311716391,-0.775783281446774, -1.34915683547288e-06,-0.0016160707004671,0.332538492758797,-0.802355912060657, -0.000109105830328471,-0.01594016039724,0.173284557167582,-0.137133789376549, -0.000116700637134093,-0.0153082751560351,0.189553833512804,-0.157869207663768, -0.000124295443939881,-0.0146763899148304,0.205823109858027,-0.178604625950987, -0.000131890250745614,-0.0140445046736256,0.222092386203249,-0.199340044238205, -0.000139485057550959,-0.0134126194324204,0.238361662548472,-0.220075462525424, -0.000147079864356747,-0.0127807341912156,0.254630938893694,-0.240810880812643, -0.000154674671162314,-0.0121488489500108,0.270900215238916,-0.261546299099862, -0.000162269477968269,-0.0115169637088064,0.287169491584139,-0.282281717387081, -0.000169864284774002,-0.0108850784676011,0.303438767929361,-0.3030171356743, -0.000177459091579402,-0.0102531932263963,0.319708044274584,-0.323752553961518, -0.000185053898385412,-0.0096213079851919,0.335977320619806,-0.344487972248737, -0.00019264870519109,-0.00898942274398706,0.352246596965028,-0.365223390535956, -0.000200243511996878,-0.00835753750278223,0.368515873310251,-0.385958808823175, -0.000207838318802556,-0.0077256522615774,0.384785149655473,-0.406694227110394, -0.000215433125608011,-0.00709376702037212,0.401054426000696,-0.427429645397613, -0.000223027932413689,-0.00646188177916751,0.417323702345918,-0.448165063684831, -0.000230622739219033,-0.00582999653796201,0.433592978691141,-0.46890048197205, -0.000238217546024933,-0.0051981112967574,0.449862255036363,-0.489635900259269, -0.00024581235283061,-0.00456622605555301,0.466131531381585,-0.510371318546488, -0.000253407159636398,-0.0039343408143484,0.482400807726808,-0.531106736833707, -0.000261001966441965,-0.00330245557314335,0.49867008407203,-0.551842155120926, -0.000268596773247864,-0.00267057033193874,0.514939360417253,-0.572577573408145, -0.000276191580052987,-0.00203868509073324,0.531208636762475,-0.593312991695363, -0.000283786386859997,-0.00140679984952996,0.547477913107697,-0.614048409982582, -0.000291381193664564,-0.00077491460832313,0.56374718945292,-0.634783828269801, -0.000107986145649386,-0.0157563919054167,0.172910847280786,-0.137563969118022, -0.00011544434687738,-0.015122889278699,0.189100722839485,-0.158362325876307, -0.00012290254810543,-0.0144893866519814,0.205290598398184,-0.179160682634591, -0.000130360749333591,-0.0138558840252641,0.221480473956883,-0.199959039392875, -0.000137818950561586,-0.0132223813985465,0.237670349515582,-0.220757396151159, -0.00014527715178958,-0.0125888787718289,0.253860225074281,-0.241555752909443, -0.000152735353017519,-0.0119553761451112,0.27005010063298,-0.262354109667727, -0.000160193554245958,-0.0113218735183942,0.286239976191679,-0.283152466426011, -0.000167651755474063,-0.0106883708916767,0.302429851750378,-0.303950823184295, -0.000175109956702058,-0.0100548682649593,0.318619727309077,-0.324749179942579, -0.000182568157930163,-0.00942136563824159,0.334809602867776,-0.345547536700863, -0.000190026359157991,-0.00878786301152368,0.350999478426475,-0.366345893459147, -0.000197484560386041,-0.00815436038480599,0.367189353985174,-0.387144250217431, -0.000204942761614424,-0.00752085775808897,0.383379229543872,-0.407942606975715, -0.000212400962842474,-0.00688735513137151,0.399569105102571,-0.428740963733999, -0.000219859164070302,-0.00625385250465382,0.41575898066127,-0.449539320492283, -0.000227317365298796,-0.0056203498779368,0.431948856219969,-0.470337677250567, -0.000234775566526846,-0.00498684725121934,0.448138731778668,-0.491136034008851, -0.000242233767754785,-0.00435334462450143,0.464328607337367,-0.511934390767135, -0.000249691968982613,-0.0037198419977833,0.480518482896066,-0.532732747525419, -0.000257150170210663,-0.00308633937106562,0.496708358454766,-0.553531104283703, -0.000264608371438824,-0.00245283674434882,0.512898234013464,-0.574329461041987, -0.000272066572667096,-0.00181933411763158,0.529088109572162,-0.595127817800271, -0.000279524773895368,-0.00118583149091389,0.545277985130862,-0.615926174558556, -0.000286982975122863,-0.000552328864196205,0.561467860689561,-0.636724531316839, -0.000106456655496245,-0.0155080632490269,0.17239894562501,-0.138149426872396, -0.000113729904062443,-0.0148726439950433,0.188480277429105,-0.159033440421043, -0.000121003152628307,-0.0142372247410596,0.2045616092332,-0.179917453969689, -0.000128276401194283,-0.0136018054870759,0.220642941037294,-0.200801467518335, -0.000135549649760425,-0.0129663862330924,0.236724272841389,-0.221685481066982, -0.000142822898326567,-0.0123309669791092,0.252805604645483,-0.242569494615628, -0.00015009614689232,-0.011695547725125,0.268886936449578,-0.263453508164275, -0.000157369395458518,-0.0110601284711418,0.284968268253673,-0.284337521712921, -0.000164642644024382,-0.0104247092171579,0.301049600057767,-0.305221535261567, -0.000171915892590357,-0.00978928996317419,0.317130931861862,-0.326105548810214, -0.000179189141156444,-0.00915387070919071,0.333212263665957,-0.34698956235886, -0.00018646238972253,-0.00851845145520724,0.349293595470051,-0.367873575907507, -0.000193735638288284,-0.00788303220122333,0.365374927274146,-0.388757589456153, -0.000201008886854592,-0.00724761294723986,0.381456259078241,-0.409641603004799, -0.000208282135420568,-0.00661219369325639,0.397537590882335,-0.430525616553446, -0.000215555383986432,-0.00597677443927247,0.41361892268643,-0.451409630102092, -0.000222828632552297,-0.00534135518528855,0.429700254490525,-0.472293643650739, -0.000230101881118827,-0.00470593593130575,0.445781586294619,-0.493177657199385, -0.000237375129684358,-0.00407051667732161,0.461862918098714,-0.514061670748031, -0.000244648378250667,-0.00343509742333836,0.477944249902808,-0.534945684296678, -0.000251921626816864,-0.00279967816935489,0.494025581706903,-0.555829697845324, -0.000259194875382618,-0.00216425891537098,0.510106913510998,-0.576713711393971, -0.000266468123948482,-0.00152883966138706,0.526188245315092,-0.597597724942617, -0.000273741372515235,-0.000893420407404921,0.542269577119186,-0.618481738491264, -0.000281014621080322,-0.000258001153419674,0.558350908923282,-0.63936575203991, -0.000104386300676274,-0.0151768206276401,0.171703447155883,-0.138937991401145, -0.000111412241128483,-0.0145393389677697,0.187637700220449,-0.159937377760249, -0.000118438181580471,-0.0139018573078993,0.203571953285014,-0.180936764119353, -0.000125464122032959,-0.0132643756480294,0.21950620634958,-0.201936150478457, -0.000132490062485169,-0.0126268939881592,0.235440459414145,-0.222935536837561, -0.000139516002937545,-0.0119894123282891,0.25137471247871,-0.243934923196665, -0.000146541943389478,-0.0113519306684184,0.267308965543276,-0.264934309555769, -0.000153567883841965,-0.0107144490085487,0.283243218607841,-0.285933695914873, -0.000160593824293953,-0.010076967348678,0.299177471672407,-0.306933082273977, -0.000167619764746607,-0.00943948568880848,0.315111724736972,-0.327932468633081, -0.00017464570519854,-0.00880200402893783,0.331045977801538,-0.348931854992185, -0.00018167164565086,-0.0081645223690674,0.346980230866104,-0.369931241351289, -0.000188697586103181,-0.00752704070919763,0.362914483930669,-0.390930627710393, -0.00019572352655528,-0.0068895590493272,0.378848736995234,-0.411930014069497, -0.000202749467007712,-0.00625207738945743,0.3947829900598,-0.432929400428601, -0.000209775407460033,-0.005614595729587,0.410717243124366,-0.453928786787705, -0.00021680134791191,-0.00497711406971635,0.426651496188931,-0.474928173146809, -0.000223827288364231,-0.00433963240984636,0.442585749253496,-0.495927559505913, -0.000230853228816774,-0.00370215074997637,0.458520002318062,-0.516926945865017, -0.00023787916926854,-0.00306466909010572,0.474454255382627,-0.537926332224121, -0.000244905109720861,-0.00242718743023529,0.490388508447193,-0.558925718583225, -0.000251931050173404,-0.00178970577036575,0.506322761511758,-0.579925104942329, -0.000258956990625614,-0.00115222411049531,0.522257014576324,-0.600924491301433, -0.000265982931078046,-0.000514742450625771,0.538191267640889,-0.621923877660537, -0.000273008871529479,0.000122739209245992,0.554125520705455,-0.642923264019641, -0.000101618181613972,-0.0147425973284282,0.170768974501748,-0.139985417343589, -0.000108318973942922,-0.0141032990303317,0.186506307265792,-0.161138049848469, -0.000115019766271818,-0.013464000732235,0.202243640029836,-0.182290682353348, -0.000121720558600491,-0.0128247024341381,0.217980972793881,-0.203443314858227, -0.000128421350929386,-0.0121854041360413,0.233718305557925,-0.224595947363106, -0.000135122143258115,-0.0115461058379448,0.249455638321969,-0.245748579867986, -0.000141822935586899,-0.0109068075398477,0.265192971086014,-0.266901212372865, -0.000148523727915739,-0.010267509241751,0.280930303850058,-0.288053844877744, -0.000155224520244635,-0.00962821094365451,0.296667636614102,-0.309206477382624, -0.00016192531257353,-0.00898891264555779,0.312404969378146,-0.330359109887503, -0.000168626104902536,-0.00834961434746107,0.328142302142191,-0.351511742392382, -0.00017532689723132,-0.00771031604936456,0.343879634906235,-0.372664374897262, -0.000182027689559994,-0.00707101775126762,0.359616967670279,-0.393817007402141, -0.000188728481888889,-0.00643171945317045,0.375354300434324,-0.41496963990702, -0.000195429274217673,-0.00579242115507395,0.391091633198368,-0.436122272411899, -0.000202130066547013,-0.00515312285697811,0.406828965962411,-0.457274904916779, -0.000208830858875686,-0.00451382455888139,0.422566298726456,-0.478427537421658, -0.000215531651204248,-0.00387452626078399,0.4383036314905,-0.499580169926537, -0.000222232443533144,-0.00323522796268749,0.454040964254544,-0.520732802431416, -0.000228933235861817,-0.00259592966459055,0.469778297018588,-0.541885434936296, -0.000235634028191267,-0.00195663136649493,0.485515629782632,-0.563038067441175, -0.000242334820519607,-0.0013173330683971,0.501252962546677,-0.584190699946054, -0.00024903561284928,-0.000678034770301039,0.516990295310721,-0.605343332450933, -0.000255736405177176,-3.87364722032046e-05,0.532727628074766,-0.626495964955813, -0.000262437197506737,0.000600561825892854,0.54846496083881,-0.647648597460692, -9.79777821442096e-05,-0.0141862851340914,0.169532192762625,-0.141351208302306, -0.00010426064261726,-0.0135462027558207,0.185010077374992,-0.162703666104494, -0.000110543503090199,-0.0129061203775498,0.200487961987359,-0.184056123906683, -0.000116826363563138,-0.0122660379992791,0.215965846599726,-0.205408581708871, -0.000123109224036189,-0.0116259556210084,0.231443731212093,-0.226761039511059, -0.00012939208450935,-0.0109858732427379,0.24692161582446,-0.248113497313248, -0.000135674944982123,-0.0103457908644669,0.262399500436827,-0.269465955115436, -0.000141957805455062,-0.00970570848619601,0.277877385049195,-0.290818412917624, -0.000148240665928057,-0.00906562610792538,0.293355269661561,-0.312170870719813, -0.000154523526401051,-0.00842554372965476,0.308833154273928,-0.333523328522001, -0.000160806386874102,-0.00778546135138392,0.324311038886295,-0.354875786324189, -0.000167089247347096,-0.00714537897311307,0.339788923498663,-0.376228244126378, -0.000173372107820091,-0.00650529659484267,0.355266808111029,-0.397580701928566, -0.000179654968292975,-0.00586521421657138,0.370744692723397,-0.418933159730754, -0.00018593782876597,-0.00522513183830053,0.386222577335764,-0.440285617532943, -0.000192220689238742,-0.00458504946002991,0.401700461948131,-0.461638075335131, -0.000198503549711626,-0.00394496708175884,0.417178346560498,-0.48299053313732, -0.000204786410184954,-0.00330488470348889,0.432656231172864,-0.504342990939508, -0.000211069270657838,-0.00266480232521782,0.448134115785232,-0.525695448741696, -0.000217352131130943,-0.00202471994694742,0.463612000397598,-0.547047906543884, -0.000223634991603716,-0.00138463756867635,0.479089885009966,-0.568400364346073, -0.0002299178520766,-0.000744555190405727,0.494567769622332,-0.589752822148261, -0.000236200712549262,-0.000104472812134215,0.5100456542347,-0.611105279950449, -0.000242483573022922,0.00053560956613552,0.525523538847066,-0.632457737752638, -0.000248766433494918,0.00117569194440748,0.541001423459434,-0.653810195554826, -9.32933258415147e-05,-0.0134943641406834,0.167927850514354,-0.143089848855785, -9.90547590565272e-05,-0.0128558854187758,0.1830710808969,-0.164696682602766, -0.000104816192271817,-0.0122174066968684,0.198214311279446,-0.186303516349747, -0.000110577625486996,-0.0115789279749612,0.213357541661992,-0.207910350096727, -0.000116339058702009,-0.0109404492530535,0.228500772044538,-0.229517183843708, -0.00012210049191741,-0.0103019705311462,0.243644002427084,-0.251124017590689, -0.000127861925132644,-0.00966349180923909,0.258787232809629,-0.27273085133767, -0.000133623358347434,-0.00902501308733106,0.273930463192176,-0.294337685084651, -0.000139384791562724,-0.00838653436542369,0.289073693574721,-0.315944518831631, -0.00014514622477807,-0.00774805564351677,0.304216923957267,-0.337551352578612, -0.000150907657993193,-0.00710957692160918,0.319360154339813,-0.359158186325593, -0.00015666909120815,-0.00647109819970138,0.334503384722359,-0.380765020072574, -0.000162430524423662,-0.00583261947779445,0.349646615104905,-0.402371853819555, -0.00016819195763873,-0.00519414075588664,0.364789845487451,-0.423978687566536, -0.000173953390853354,-0.00455566203397884,0.379933075869997,-0.445585521313516, -0.000179714824068866,-0.00391718331207191,0.395076306252542,-0.467192355060497, -0.000185476257284267,-0.00327870459016433,0.410219536635089,-0.488799188807478, -0.00019123769049878,-0.0026402258682563,0.425362767017635,-0.510406022554459, -0.000196999123714736,-0.00200174714634982,0.44050599740018,-0.53201285630144, -0.000202760556929249,-0.00136326842444134,0.455649227782726,-0.55361969004842, -0.000208521990144983,-0.000724789702534867,0.470792458165272,-0.575226523795402, -0.00021428342335994,-8.63109806270579e-05,0.485935688547818,-0.596833357542382, -0.00022004485657523,0.000552167741279863,0.501078918930363,-0.618440191289363, -0.000225806289790631,0.00119064646318723,0.51622214931291,-0.640047025036344, -0.000231567723006143,0.00182912518509415,0.531365379695455,-0.661653858783325, -8.74321996301441e-05,-0.0126652446511913,0.165900610755314,-0.145236662353547, -9.25676095201999e-05,-0.0120327796731364,0.180623854433982,-0.167157590759539, -9.77030194103667e-05,-0.0114003146950816,0.19534709811265,-0.18907851916553, -0.000102838429300367,-0.0107678497170266,0.210070341791318,-0.210999447571521, -0.000107973839190256,-0.0101353847389716,0.224793585469987,-0.232920375977512, -0.000113109249080201,-0.00950291976091644,0.239516829148655,-0.254841304383503, -0.000118244658970479,-0.00887045478286175,0.254240072827323,-0.276762232789494, -0.000123380068860479,-0.00823798980480683,0.268963316505992,-0.298683161195486, -0.000128515478750646,-0.00760552482675192,0.28368656018466,-0.320604089601477, -0.000133650888640258,-0.00697305984869656,0.298409803863328,-0.342525018007468, -0.000138786298530258,-0.00634059487064143,0.313133047541997,-0.364445946413459, -0.000143921708420591,-0.00570812989258673,0.327856291220665,-0.38636687481945, -0.000149057118310703,-0.00507566491453182,0.342579534899333,-0.408287803225441, -0.000154192528200481,-0.00444319993647646,0.357302778578002,-0.430208731631433, -0.000159327938090703,-0.00381073495842199,0.37202602225667,-0.452129660037424, -0.000164463347980814,-0.00317826998036708,0.386749265935338,-0.474050588443415, -0.000169598757870371,-0.0025458050023115,0.401472509614007,-0.495971516849406, -0.000174734167761037,-0.00191334002425725,0.416195753292675,-0.517892445255397, -0.000179869577650926,-0.00128087504620233,0.430918996971343,-0.539813373661388, -0.000185004987540704,-0.000648410068146976,0.445642240650011,-0.56173430206738, -0.000190140397430705,-1.5945090091396e-05,0.46036548432868,-0.583655230473371, -0.00019527580732126,0.000616519887962408,0.475088728007348,-0.605576158879362, -0.000200411217210816,0.00124898486601799,0.489811971686016,-0.627497087285353, -0.000205546627100706,0.00188144984407357,0.504535215364685,-0.649418015691344, -0.000210682036990595,0.00251391482212826,0.519258459043353,-0.671338944097335, -8.03522994982098e-05,-0.0117156773980369,0.163423066677582,-0.147789874344073, -8.47715379367342e-05,-0.0110961896811264,0.177637083345373,-0.170084356507939, -8.91907763753697e-05,-0.0104767019642161,0.191851100013164,-0.192378838671805, -9.36100148137831e-05,-0.00985721424730535,0.206065116680955,-0.214673320835671, -9.80292532525295e-05,-0.00923772653039512,0.220279133348745,-0.236967802999537, -0.000102448491691109,-0.00861823881348456,0.234493150016536,-0.259262285163402, -0.000106867730129467,-0.007998751096574,0.248707166684327,-0.281556767327269, -0.00011128696856777,-0.00737926337966299,0.262921183352118,-0.303851249491134, -0.000115706207006794,-0.00675977566275332,0.277135200019908,-0.326145731655, -0.000120125445445096,-0.00614028794584232,0.2913492166877,-0.348440213818866, -0.000124544683883454,-0.00552080022893175,0.30556323335549,-0.370734695982732, -0.000128963922322312,-0.00490131251202142,0.319777250023281,-0.393029178146598, -0.000133383160760614,-0.00428182479511041,0.333991266691072,-0.415323660310464, -0.000137802399199249,-0.0036623370782003,0.348205283358863,-0.43761814247433, -0.000142221637638107,-0.00304284936128996,0.362419300026654,-0.459912624638195, -0.000146640876075965,-0.00242336164437895,0.376633316694444,-0.482207106802061, -0.000151060114515045,-0.00180387392746884,0.390847333362235,-0.504501588965927, -0.000155479352953347,-0.00118438621055805,0.405061350030026,-0.526796071129793, -0.000159898591392205,-0.000564898493647936,0.419275366697816,-0.549090553293658, -0.000164317829830507,5.45892232630685e-05,0.433489383365607,-0.571385035457525, -0.00016873706826892,0.000674076940173407,0.447703400033398,-0.593679517621391, -0.000173156306707778,0.00129356465708375,0.461917416701189,-0.615973999785256, -0.000177575545145969,0.00191305237399453,0.47613143336898,-0.638268481949122, -0.000181994783584494,0.00253254009090487,0.49034545003677,-0.660562964112988, -0.000186414022022685,0.00315202780781609,0.504559466704562,-0.682857446276854, -7.21564063035918e-05,-0.0106839855395054,0.16051674839087,-0.150694371754829, -7.58030394666376e-05,-0.0100869894380015,0.174138615339031,-0.173413803326167, -7.94496726294613e-05,-0.00948999333649747,0.187760482287193,-0.196133234897505, -8.30963057922296e-05,-0.00889299723499326,0.201382349235354,-0.218852666468843, -8.67429389552199e-05,-0.00829600113348927,0.215004216183516,-0.241572098040181, -9.03895721179881e-05,-0.00769900503198517,0.228626083131678,-0.264291529611519, -9.40362052809229e-05,-0.00710200893048119,0.242247950079839,-0.287010961182857, -9.76828384439687e-05,-0.0065050128289772,0.255869817028001,-0.309730392754196, -0.000101329471606626,-0.00590801672747299,0.269491683976163,-0.332449824325534, -0.000104976104769783,-0.00531102062596944,0.283113550924324,-0.355169255896872, -0.000108622737932884,-0.00471402452446545,0.296735417872486,-0.37788868746821, -0.000112269371095208,-0.0041170284229608,0.310357284820648,-0.400608119039548, -0.00011591600425831,-0.00352003232145681,0.323979151768809,-0.423327550610886, -0.000119562637421078,-0.00292303621995305,0.33760101871697,-0.446046982182224, -0.000123209270583957,-0.00232604011844884,0.351222885665132,-0.468766413753562, -0.000126855903747169,-0.00172904401694551,0.364844752613293,-0.491485845324901, -0.00013050253691016,-0.00113204791544108,0.378466619561455,-0.514205276896239, -0.000134149170072262,-0.000535051813936205,0.392088486509617,-0.536924708467577, -0.000137795803236029,6.19442875668952e-05,0.405710353457779,-0.559644140038915, -0.000141442436398798,0.000658940389070661,0.41933222040594,-0.582363571610253, -0.000145089069561788,0.00125593649057487,0.432954087354102,-0.605083003181591, -0.000148735702724334,0.00185293259207953,0.446575954302264,-0.627802434752929, -0.000152382335887324,0.00244992869358285,0.460197821250425,-0.650521866324267, -0.000156028969050426,0.00304692479508706,0.473819688198587,-0.673241297895606, -0.000159675602212972,0.00364392089659127,0.487441555146748,-0.695960729466943, -6.31249316708771e-05,-0.00962659538787658,0.157267814668057,-0.153836009010444, -6.5993282822141e-05,-0.00906323379249774,0.170233775287234,-0.177015085298738, -6.8861633973627e-05,-0.0084998721971189,0.183199735906411,-0.200194161587033, -7.1729985125224e-05,-0.00793651060174061,0.196165696525587,-0.223373237875327, -7.45983362764324e-05,-0.00737314900636155,0.209131657144764,-0.246552314163621, -7.74666874279739e-05,-0.00680978741098315,0.222097617763941,-0.269731390451916, -8.03350385792378e-05,-0.00624642581560386,0.235063578383118,-0.29291046674021, -8.32033897309459e-05,-0.00568306422022569,0.248029539002295,-0.316089543028504, -8.60717408822098e-05,-0.00511970262484707,0.260995499621471,-0.339268619316798, -8.89400920337513e-05,-0.00455634102946822,0.273961460240648,-0.362447695605093, -9.18084431853483e-05,-0.00399297943408983,0.286927420859825,-0.385626771893387, -9.46767943366122e-05,-0.00342961783871032,0.299893381479002,-0.408805848181681, -9.75451454879872e-05,-0.00286625624333214,0.312859342098179,-0.431984924469975, -0.000100413496639362,-0.0023028946479533,0.325825302717356,-0.45516400075827, -0.000103281847790404,-0.00173953305257379,0.338791263336533,-0.478343077046564, -0.000106150198942334,-0.00117617145719606,0.351757223955709,-0.501522153334859, -0.000109018550093376,-0.000612809861816555,0.364723184574886,-0.524701229623152, -0.000111886901245306,-4.94482664388229e-05,0.377689145194062,-0.547880305911447, -0.000114755252396459,0.000513913328940685,0.39065510581324,-0.571059382199741, -0.000117623603548167,0.00107727492431886,0.403621066432416,-0.594238458488035, -0.000120491954699542,0.00164063651969792,0.416587027051594,-0.61741753477633, -0.000123360305850473,0.00220399811507699,0.42955298767077,-0.640596611064624, -0.000126228657002292,0.00276735971045516,0.442518948289947,-0.663775687352918, -0.000129097008153445,0.00333072130583423,0.455484908909124,-0.686954763641212, -0.000131965359305153,0.00389408290121196,0.4684508695283,-0.710133839929507, -5.36989799683751e-05,-0.00860697714783887,0.153826301483036,-0.157054126272231, -5.58410042438839e-05,-0.0080881480926922,0.166103784343122,-0.180704036866835, -5.79830285193927e-05,-0.00756931903754554,0.178381267203208,-0.204353947461439, -6.01250527950126e-05,-0.00705048998239888,0.190658750063294,-0.228003858056044, -6.22670770706324e-05,-0.00653166092725233,0.20293623292338,-0.251653768650648, -6.44091013461412e-05,-0.00601283187210577,0.215213715783466,-0.275303679245252, -6.65511256217055e-05,-0.005494002816959,0.227491198643552,-0.298953589839857, -6.86931498969368e-05,-0.00497517376181222,0.239768681503637,-0.322603500434461, -7.08351741727231e-05,-0.00445634470666589,0.252046164363723,-0.346253411029066, -7.2977198448454e-05,-0.00393751565151934,0.264323647223809,-0.36990332162367, -7.51192227238517e-05,-0.00341868659637234,0.276601130083895,-0.393553232218274, -7.72612469992495e-05,-0.00289985754122579,0.288878612943981,-0.417203142812879, -7.94032712747583e-05,-0.00238102848607946,0.301156095804066,-0.440853053407483, -8.15452955508222e-05,-0.00186219943093335,0.313433578664152,-0.464502964002087, -8.368731982622e-05,-0.00134337037578613,0.325711061524238,-0.488152874596692, -8.58293441013958e-05,-0.00082454132063936,0.337988544384324,-0.511802785191296, -8.79713683772376e-05,-0.00030571226549303,0.35026602724441,-0.5354526957859, -9.01133926527464e-05,0.0002131167896533,0.362543510104495,-0.559102606380505, -9.22554169279222e-05,0.000731945844800741,0.374820992964582,-0.582752516975109, -9.43974412039861e-05,0.00125077489994663,0.387098475824667,-0.606402427569713, -9.6539465479939e-05,0.00176960395509296,0.399375958684753,-0.630052338164318, -9.86814897548927e-05,0.00228843301024018,0.411653441544839,-0.653702248758922, -0.000100823514030179,0.00280726206538695,0.423930924404925,-0.677352159353526, -0.000102965538306021,0.00332609112053284,0.43620840726501,-0.701002069948131, -0.000105107562582085,0.00384492017567917,0.448485890125097,-0.724651980542735, -4.44035621398609e-05,-0.00768086929031253,0.150382527841535,-0.160171929786963, -4.59204429688609e-05,-0.00721496318449477,0.161976967681695,-0.184277998046331, -4.7437323798083e-05,-0.00674905707867723,0.173571407521856,-0.208384066305698, -4.89542046269165e-05,-0.00628315097285903,0.185165847362017,-0.232490134565065, -5.04710854561941e-05,-0.0058172448670416,0.196760287202177,-0.256596202824433, -5.19879662854161e-05,-0.00535133876122384,0.208354727042338,-0.2807022710838, -5.35048471145272e-05,-0.0048854326554062,0.219949166882498,-0.304808339343168, -5.50217279433607e-05,-0.0044195265495881,0.231543606722659,-0.328914407602535, -5.65386087725273e-05,-0.00395362044377046,0.24313804656282,-0.353020475861902, -5.80554896018604e-05,-0.00348771433795303,0.25473248640298,-0.37712654412127, -5.95723704307494e-05,-0.00302180823213516,0.266326926243141,-0.401232612380637, -6.10892512595829e-05,-0.00255590212631707,0.277921366083302,-0.425338680640005, -6.26061320891935e-05,-0.00208999602050008,0.289515805923462,-0.449444748899372, -6.4123012917805e-05,-0.00162408991468155,0.301110245763623,-0.473550817158739, -6.56398937477487e-05,-0.00115818380886457,0.312704685603783,-0.497656885418107, -6.71567745762491e-05,-0.000692277703046695,0.324299125443944,-0.521762953677474, -6.86736554054157e-05,-0.000226371597228825,0.335893565284104,-0.545869021936842, -7.01905362348043e-05,0.000239534508588601,0.347488005124265,-0.569975090196209, -7.17074170636378e-05,0.000705440614406694,0.359082444964426,-0.594081158455576, -7.32242978928044e-05,0.00117134672022434,0.370676884804586,-0.618187226714944, -7.47411787215269e-05,0.00163725282604288,0.382271324644747,-0.642293294974311, -7.62580595510265e-05,0.00210315893186008,0.393865764484908,-0.666399363233678, -7.777494037986e-05,0.00256906503767729,0.405460204325068,-0.690505431493046, -7.92918212088045e-05,0.00303497114349627,0.417054644165229,-0.714611499752413, -8.08087020380821e-05,0.00350087724931347,0.42864908400539,-0.738717568011781, -3.57351169674724e-05,-0.0068846383866169,0.147126696986295,-0.163033675097257, -3.675587589963e-05,-0.00647582090672838,0.158080307984815,-0.187558437816273, -3.77766348318431e-05,-0.00606700342684019,0.169033918983334,-0.212083200535288, -3.87973937637787e-05,-0.00565818594695144,0.179987529981854,-0.236607963254304, -3.98181526960473e-05,-0.00524936846706325,0.190941140980373,-0.26113272597332, -4.08389116279828e-05,-0.00484055098717451,0.201894751978893,-0.285657488692335, -4.18596705600294e-05,-0.00443173350728587,0.212848362977413,-0.310182251411351, -4.28804294919649e-05,-0.00402291602739746,0.223801973975932,-0.334707014130366, -4.39011884246221e-05,-0.00361409854750949,0.234755584974452,-0.359231776849382, -4.49219473565576e-05,-0.00320528106762108,0.245709195972971,-0.383756539568398, -4.59427062884377e-05,-0.002796463587732,0.256662806971491,-0.408281302287413, -4.69634652204842e-05,-0.00238764610784359,0.267616417970011,-0.432806065006429, -4.79842241528639e-05,-0.00197882862795562,0.27857002896853,-0.457330827725444, -4.90049830847994e-05,-0.00157001114806676,0.28952363996705,-0.48185559044446, -5.0025742017179e-05,-0.00116119366817857,0.30047725096557,-0.506380353163476, -5.10465009491146e-05,-0.000752376188289716,0.311430861964089,-0.530905115882491, -5.20672598811611e-05,-0.000343558708401526,0.322384472962609,-0.555429878601507, -5.30880188135407e-05,6.52587714866648e-05,0.333338083961128,-0.579954641320523, -5.41087777455873e-05,0.000474076251375077,0.344291694959648,-0.604479404039538, -5.51295366776339e-05,0.000882893731263934,0.355245305958168,-0.629004166758554, -5.61502956092363e-05,0.00129171121115279,0.366198916956687,-0.653528929477569, -5.7171054541616e-05,0.0017005286910412,0.377152527955207,-0.678053692196585, -5.81918134735515e-05,0.00210934617092962,0.388106138953726,-0.7025784549156, -5.92125724054871e-05,0.00251816365081803,0.399059749952246,-0.727103217634616, -6.02333313378667e-05,0.002926981130706,0.410013360950765,-0.751627980353632, -2.80616207928297e-05,-0.00623162031375268,0.144208856291756,-0.165533033883148, -2.87177831424512e-05,-0.00587935717506471,0.154591916809099,-0.190423471238744, -2.93739454922948e-05,-0.00552709403637697,0.164974977326443,-0.215313908594339, -3.00301078419163e-05,-0.005174830897689,0.175358037843786,-0.240204345949934, -3.06862701915378e-05,-0.00482256775900081,0.18574109836113,-0.26509478330553, -3.13424325412703e-05,-0.00447030462031317,0.196124158878473,-0.289985220661125, -3.19985948911694e-05,-0.00411804148162553,0.206507219395816,-0.314875658016721, -3.26547572409019e-05,-0.00376577834293768,0.216890279913159,-0.339766095372316, -3.33109195904679e-05,-0.00341351520424982,0.227273340430502,-0.364656532727911, -3.39670819403115e-05,-0.00306125206556218,0.237656400947846,-0.389546970083507, -3.4623244289822e-05,-0.00270898892687432,0.248039461465189,-0.414437407439102, -3.52794066397211e-05,-0.00235672578818669,0.258422521982532,-0.439327844794698, -3.59355689892871e-05,-0.00200446264949861,0.268805582499875,-0.464218282150293, -3.65917313391861e-05,-0.00165219951081075,0.279188643017219,-0.489108719505888, -3.72478936885301e-05,-0.00129993637212289,0.289571703534562,-0.513999156861484, -3.79040560385402e-05,-0.000947673233435031,0.299954764051906,-0.538889594217079, -3.85602183881062e-05,-0.000595410094747173,0.310337824569249,-0.563780031572675, -3.92163807378942e-05,-0.000243146956059759,0.320720885086592,-0.58867046892827, -3.98725430877933e-05,0.000109116182628544,0.331103945603936,-0.613560906283865, -4.05287054374703e-05,0.000461379321315736,0.341487006121278,-0.638451343639461, -4.11848677873694e-05,0.000813642460003816,0.351870066638622,-0.663341780995056, -4.18410301369354e-05,0.00116590559869145,0.362253127155965,-0.688232218350652, -4.24971924866124e-05,0.00151816873737953,0.372636187673308,-0.713122655706247, -4.31533548365115e-05,0.00187043187606761,0.383019248190652,-0.738013093061842, -4.38095171861885e-05,0.00222269501475481,0.393402308707995,-0.762903530417438, -2.15747166540936e-05,-0.00571608225660958,0.141715902605768,-0.167622889635366, -2.19807473527678e-05,-0.00541591788672946,0.151614112640134,-0.192819088311429, -2.23867780511644e-05,-0.0051157535168489,0.161512322674499,-0.218015286987492, -2.27928087498386e-05,-0.00481558914696845,0.171410532708865,-0.243211485663555, -2.31988394482907e-05,-0.00451542477708822,0.18130874274323,-0.268407684339618, -2.36048701467428e-05,-0.00421526040720788,0.191206952777595,-0.293603883015681, -2.40109008453615e-05,-0.00391509603732754,0.201105162811961,-0.318800081691744, -2.44169315438691e-05,-0.0036149316674472,0.211003372846326,-0.343996280367807, -2.48229622423213e-05,-0.00331476729756663,0.220901582880691,-0.36919247904387, -2.5228992941051e-05,-0.00301460292768652,0.230799792915057,-0.394388677719934, -2.563502363917e-05,-0.00271443855780573,0.240698002949422,-0.419584876395997, -2.60410543381218e-05,-0.00241427418792584,0.250596212983787,-0.44478107507206, -2.64470850361853e-05,-0.00211410981804483,0.260494423018153,-0.469977273748123, -2.6853115735137e-05,-0.00181394544816516,0.270392633052518,-0.495173472424186, -2.72591464335337e-05,-0.00151378107828504,0.280290843086883,-0.520369671100249, -2.76651771315972e-05,-0.00121361670840336,0.290189053121249,-0.545565869776312, -2.80712078305489e-05,-0.00091345233852369,0.300087263155614,-0.570762068452375, -2.84772385291676e-05,-0.00061328796864335,0.30998547318998,-0.595958267128438, -2.88832692273422e-05,-0.00031312359876301,0.319883683224345,-0.621154465804501, -2.92892999259609e-05,-1.29592288824476e-05,0.32978189325871,-0.646350664480564, -2.96953306242465e-05,0.000287205140998115,0.339680103293076,-0.671546863156627, -3.01013613230872e-05,0.000587369510878233,0.349578313327441,-0.69674306183269, -3.05073920217058e-05,0.000887533880758351,0.359476523361806,-0.721939260508753, -3.09134227202135e-05,0.00118769825063847,0.369374733396172,-0.747135459184816, -3.13194534186101e-05,0.00148786262051903,0.379272943430537,-0.77233165786088, -1.63001788559547e-05,-0.00532077392692598,0.139670925317938,-0.169307643692151, -1.65442853462539e-05,-0.00506580930210265,0.149173110051875,-0.194750334320838, -1.6788391836553e-05,-0.00481084467727899,0.158675294785811,-0.220193024949525, -1.70324983266856e-05,-0.00455588005245511,0.168177479519748,-0.245635715578211, -1.72766048168183e-05,-0.00430091542763145,0.177679664253684,-0.271078406206898, -1.75207113071174e-05,-0.0040459508028079,0.187181848987621,-0.296521096835585, -1.7764817796917e-05,-0.0037909861779839,0.196684033721557,-0.321963787464272, -1.80089242878267e-05,-0.00353602155316124,0.206186218455493,-0.347406478092958, -1.82530307779594e-05,-0.00328105692833747,0.21568840318943,-0.372849168721645, -1.84971372681475e-05,-0.00302609230351369,0.225190587923366,-0.398291859350332, -1.87412437586687e-05,-0.00277112767869059,0.234692772657302,-0.423734549979019, -1.89853502483572e-05,-0.00251616305386615,0.244194957391239,-0.449177240607705, -1.92294567386009e-05,-0.0022611984290426,0.253697142125175,-0.474619931236392, -1.94735632289555e-05,-0.00200623380421949,0.263199326859112,-0.500062621865079, -1.97176697189771e-05,-0.00175126917939505,0.272701511593049,-0.525505312493765, -1.99617762091098e-05,-0.00149630455457128,0.282203696326985,-0.550948003122452, -2.02058826991314e-05,-0.00124133992974795,0.291705881060921,-0.576390693751139, -2.04499891895971e-05,-0.000986375304924625,0.301208065794857,-0.601833384379825, -2.06940956798407e-05,-0.000731410680101074,0.310710250528794,-0.627276075008513, -2.09382021705284e-05,-0.000476446055277524,0.320212435262731,-0.652718765637199, -2.11823086608831e-05,-0.000221481430453974,0.329714619996667,-0.678161456265886, -2.14264151506827e-05,3.34831943695768e-05,0.339216804730603,-0.703604146894573, -2.16705216405932e-05,0.000288447819194015,0.34871898946454,-0.729046837523259, -2.1914628131614e-05,0.000543412444016234,0.358221174198476,-0.754489528151946, -2.21587346217467e-05,0.000798377068840228,0.367723358932412,-0.779932218780633, -1.21448269517765e-05,-0.00502405522464089,0.138048404985096,-0.170626264827203, -1.22888283335398e-05,-0.00480646542779262,0.147237416215967,-0.196261879459866, -1.24328297151921e-05,-0.00458887563094412,0.156426427446838,-0.221897494092528, -1.25768310970664e-05,-0.00437128583409563,0.16561543867771,-0.247533108725191, -1.27208324789962e-05,-0.00415369603724758,0.174804449908581,-0.273168723357854, -1.2864833860482e-05,-0.00393610624039864,0.183993461139452,-0.298804337990516, -1.30088352421898e-05,-0.00371851644355048,0.193182472370323,-0.324439952623179, -1.31528366240086e-05,-0.0035009266467021,0.202371483601194,-0.350075567255842, -1.32968380054943e-05,-0.00328333684985305,0.211560494832066,-0.375711181888504, -1.34408393874796e-05,-0.00306574705300511,0.220749506062937,-0.401346796521167, -1.35848407692984e-05,-0.00284815725615672,0.229938517293808,-0.42698241115383, -1.37288421505621e-05,-0.00263056745930768,0.23912752852468,-0.452618025786492, -1.3872843532492e-05,-0.00241297766245951,0.248316539755551,-0.478253640419155, -1.40168449143108e-05,-0.00219538786561113,0.257505550986422,-0.503889255051817, -1.41608462963516e-05,-0.00197779806876341,0.266694562217293,-0.52952486968448, -1.43048476775043e-05,-0.00176020827191392,0.275883573448165,-0.555160484317143, -1.44488490594341e-05,-0.00154261847506576,0.285072584679036,-0.580796098949805, -1.4592850441475e-05,-0.00132502867821804,0.294261595909907,-0.606431713582468, -1.47368518227387e-05,-0.00110743888136833,0.303450607140779,-0.632067328215131, -1.48808532045575e-05,-0.000889849084520389,0.31263961837165,-0.657702942847793, -1.50248545867093e-05,-0.00067225928767245,0.321828629602521,-0.683338557480456, -1.5168855968084e-05,-0.000454669490823179,0.331017640833392,-0.708974172113119, -1.53128573500139e-05,-0.000237079693974795,0.340206652064264,-0.734609786745781, -1.54568587319437e-05,-1.94898971273005e-05,0.349395663295134,-0.760245401378444, -1.56008601130964e-05,0.000198099899721971,0.358584674526006,-0.785881016011107, -8.95157708807881e-06,-0.0048046795498099,0.136794614071217,-0.171634645401195, -9.03575203842211e-06,-0.00461685737120388,0.145742230488012,-0.19741779355406, -9.11992698859887e-06,-0.00442903519259796,0.154689846904808,-0.223200941706924, -9.20410193916421e-06,-0.00424121301399194,0.163637463321604,-0.248984089859788, -9.28827688967404e-06,-0.00405339083538625,0.1725850797384,-0.274767238012652, -9.37245183979529e-06,-0.00386556865677967,0.181532696155196,-0.300550386165516, -9.45662679013859e-06,-0.00367774647817343,0.190480312571992,-0.32633353431838, -9.54080174025984e-06,-0.0034899242995674,0.199427928988787,-0.352116682471244, -9.6249766904366e-06,-0.00330210212096071,0.208375545405584,-0.377899830624108, -9.7091516412795e-06,-0.00311427994235558,0.217323161822379,-0.403682978776972, -9.79332659145626e-06,-0.00292645776374933,0.226270778239175,-0.429466126929836, -9.87750154191058e-06,-0.00273863558514309,0.235218394655971,-0.4552492750827, -9.96167649225388e-06,-0.00255081340653729,0.244166011072767,-0.481032423235564, -1.00458514427082e-05,-0.00236299122793127,0.253113627489563,-0.506815571388428, -1.01300263929405e-05,-0.0021751690493248,0.262061243906359,-0.532598719541292, -1.02142013433948e-05,-0.00198734687071922,0.271008860323154,-0.558381867694156, -1.02983762936271e-05,-0.0017995246921132,0.27995647673995,-0.58416501584702, -1.03825512443034e-05,-0.0016117025135074,0.288904093156746,-0.609948163999884, -1.04667261942026e-05,-0.00142388033490048,0.297851709573542,-0.635731312152748, -1.0550901144657e-05,-0.00123605815629535,0.306799325990337,-0.661514460305613, -1.06350760952223e-05,-0.00104823597768933,0.315746942407133,-0.687297608458477, -1.07192510453435e-05,-0.00086041379908286,0.324694558823929,-0.713080756611341, -1.08034259959089e-05,-0.000672591620477281,0.333642175240725,-0.738863904764205, -1.08876009466963e-05,-0.000484769441871702,0.342589791657521,-0.764647052917069, -1.09717758959293e-05,-0.000296947263264347,0.351537408074317,-0.790430201069933, -6.54405703920391e-06,-0.00464417901219771,0.135845304757493,-0.172392176104683, -6.59326360402668e-06,-0.00447939661998475,0.144610491681815,-0.198286156590327, -6.64247016851638e-06,-0.00431461422777157,0.153375678606136,-0.224180137075972, -6.69167673317261e-06,-0.00414983183555828,0.162140865530458,-0.250074117561616, -6.7408832976068e-06,-0.00398504944334488,0.17090605245478,-0.275968098047261, -6.79008986248508e-06,-0.00382026705113203,0.179671239379102,-0.301862078532905, -6.83929642719683e-06,-0.00365548465891896,0.188436426303424,-0.32775605901855, -6.88850299124244e-06,-0.003490702266705,0.197201613227746,-0.353650039504194, -6.93770955639827e-06,-0.0033259198744926,0.205966800152067,-0.379544019989839, -6.98691612105451e-06,-0.00316113748227931,0.214731987076389,-0.405438000475483, -7.0361226854887e-06,-0.00299635509006579,0.223497174000711,-0.431331980961128, -7.08532925053351e-06,-0.00283157269785339,0.232262360925033,-0.457225961446772, -7.1345358144681e-06,-0.00266679030563921,0.241027547849355,-0.483119941932417, -7.18374237940189e-06,-0.00250200791342658,0.249792734773677,-0.509013922418061, -7.23294894389159e-06,-0.00233722552121307,0.258557921697999,-0.534907902903706, -7.28215550860334e-06,-0.00217244312899911,0.267323108622321,-0.56080188338935, -7.33136207287099e-06,-0.00200766073678604,0.276088295546643,-0.586695863874995, -7.38056863802683e-06,-0.00184287834457386,0.284853482470964,-0.612589844360639, -7.42977520329369e-06,-0.00167809595236124,0.293618669395286,-0.638483824846284, -7.47898176722828e-06,-0.00151331356014683,0.302383856319608,-0.664377805331928, -7.52818833149593e-06,-0.00134853116793376,0.31114904324393,-0.690271785817573, -7.57739489587461e-06,-0.00118374877571981,0.319914230168252,-0.716165766303217, -7.62660146136351e-06,-0.00101896638350807,0.328679417092573,-0.742059746788862, -7.67580802552015e-06,-0.000854183991294111,0.337444604016895,-0.767953727274507, -7.72501459012087e-06,-0.000689401599081485,0.346209790941217,-0.793847707760151, -4.75483127965193e-06,-0.00452759542177628,0.135137534898178,-0.172953685658474, -4.78383286778294e-06,-0.00438026641063038,0.143766897509781,-0.198929819135989, -4.81283445530334e-06,-0.00423293739948372,0.152396260121385,-0.224905952613504, -4.84183604326782e-06,-0.00408560838833749,0.161025622732988,-0.250882086091019, -4.87083763128782e-06,-0.00393827937719138,0.169654985344592,-0.276858219568534, -4.89983921914128e-06,-0.00379095036604515,0.178284347956195,-0.302834353046049, -4.92884080693923e-06,-0.00364362135489826,0.186913710567799,-0.328810486523564, -4.95784239501473e-06,-0.0034962923437527,0.195543073179402,-0.354786620001079, -4.98684398253513e-06,-0.00334896333260581,0.204172435791006,-0.380762753478594, -5.01584557038859e-06,-0.00320163432145959,0.212801798402609,-0.406738886956109, -5.04484715857512e-06,-0.00305430531031337,0.221431161014213,-0.432715020433624, -5.07384874637307e-06,-0.00290697629916736,0.230060523625816,-0.458691153911139, -5.10285033417102e-06,-0.00275964728802069,0.23868988623742,-0.484667287388654, -5.13185192185794e-06,-0.00261231827687425,0.247319248849023,-0.510643420866169, -5.16085350998896e-06,-0.00246498926572802,0.255948611460627,-0.536619554343684, -5.18985509767589e-06,-0.00231766025458158,0.26457797407223,-0.5625956878212, -5.21885668591793e-06,-0.00217033124343602,0.273207336683833,-0.588571821298715, -5.24785827338281e-06,-0.00202300223228935,0.281836699295437,-0.61454795477623, -5.27685986151383e-06,-0.0018756732211429,0.290466061907041,-0.640524088253745, -5.30586144931178e-06,-0.00172834420999646,0.299095424518645,-0.66650022173126, -5.33486303722075e-06,-0.00158101519885046,0.307724787130248,-0.692476355208775, -5.3638646250187e-06,-0.00143368618770356,0.316354149741852,-0.71845248868629, -5.39286621292767e-06,-0.00128635717655756,0.324983512353455,-0.744428622163805, -5.4218678006146e-06,-0.00113902816541112,0.333612874965059,-0.77040475564132, -5.45086938952277e-06,-0.000991699154266001,0.342242237576662,-0.796380889118835, -3.43922470513736e-06,-0.00444332830486172,0.134615878561166,-0.173365776959723, -3.456573557159e-06,-0.00430901187057042,0.143145234348802,-0.199402202435999, -3.47392240895861e-06,-0.00417469543627902,0.151674590136438,-0.225438627912275, -3.49127126109128e-06,-0.00404037900198784,0.160203945924074,-0.251475053388551, -3.50862011305741e-06,-0.00390606256769666,0.168733301711709,-0.277511478864826, -3.525968964746e-06,-0.00377174613340459,0.177262657499346,-0.303547904341102, -3.54331781660111e-06,-0.00363742969911329,0.185792013286981,-0.329584329817378, -3.56066666862276e-06,-0.003503113264822,0.194321369074617,-0.355620755293654, -3.57801552119952e-06,-0.00336879683053137,0.202850724862253,-0.38165718076993, -3.59536437283259e-06,-0.00323448039624008,0.211380080649888,-0.407693606246206, -3.61271322479872e-06,-0.00310016396194857,0.219909436437524,-0.433730031722482, -3.6300620769314e-06,-0.00296584752765772,0.22843879222516,-0.459766457198758, -3.64741092828691e-06,-0.00283153109336509,0.236968148012796,-0.485802882675033, -3.6647597805306e-06,-0.00269721465907424,0.245497503800432,-0.511839308151309, -3.68210863277429e-06,-0.00256289822478362,0.254026859588067,-0.537875733627585, -3.69945748446288e-06,-0.00242858179049144,0.262556215375704,-0.563912159103861, -3.71680633626248e-06,-0.00229426535620014,0.271085571163339,-0.589948584580137, -3.73415518806208e-06,-0.00215994892190841,0.279614926950975,-0.615985010056413, -3.75150403997271e-06,-0.00202563248761711,0.288144282738611,-0.642021435532689, -3.76885289155027e-06,-0.00189131605332538,0.296673638526247,-0.668057861008965, -3.78620174457112e-06,-0.0017569996190363,0.305202994313881,-0.694094286485241, -3.80355059570459e-06,-0.00162268318474323,0.313732350101518,-0.720130711961517, -3.82089944783726e-06,-0.00148836675045194,0.322261705889154,-0.746167137437792, -3.83824829952584e-06,-0.00135405031616065,0.33079106167679,-0.772203562914068, -3.85559715188055e-06,-0.00121973388186936,0.339320417464426,-0.798239988390344, -2.47942191083927e-06,-0.00438262522385557,0.13423463834927,-0.173666007356582, -2.49000601110216e-06,-0.00425789771663643,0.14269096035358,-0.199746358755731, -2.50059011175363e-06,-0.00413317020941784,0.15114728235789,-0.22582671015488, -2.51117421229408e-06,-0.00400844270219913,0.1596036043622,-0.251907061554029, -2.52175831255697e-06,-0.0038837151949801,0.168059926366511,-0.277987412953179, -2.5323424130419e-06,-0.00375898768776128,0.176516248370821,-0.304067764352328, -2.54292651363786e-06,-0.0036342601805428,0.184972570375131,-0.330148115751477, -2.55351061434483e-06,-0.00350953267332432,0.193428892379441,-0.356228467150626, -2.56409471427466e-06,-0.00338480516610473,0.201885214383751,-0.382308818549775, -2.57467881437101e-06,-0.00326007765888514,0.210341536388062,-0.408389169948924, -2.58526291518901e-06,-0.0031353501516671,0.218797858392372,-0.434469521348073, -2.5958470154519e-06,-0.00301062264444774,0.227254180396682,-0.460549872747223, -2.60643111593684e-06,-0.00288589513722948,0.235710502400992,-0.486630224146372, -2.61701521631075e-06,-0.00276116763001033,0.244166824405302,-0.512710575545521, -2.62759931701773e-06,-0.00263644012279163,0.252623146409612,-0.53879092694467, -2.63818341694755e-06,-0.00251171261557226,0.261079468413923,-0.564871278343819, -2.64876751787657e-06,-0.00238698510835422,0.269535790418233,-0.590951629742968, -2.65935161791742e-06,-0.00226225760113508,0.277992112422543,-0.617031981142118, -2.66993571862439e-06,-0.00213753009391615,0.286448434426853,-0.643112332541267, -2.68051981955342e-06,-0.00201280258669856,0.294904756431163,-0.669192683940416, -2.69110391970528e-06,-0.00188807507947875,0.303361078435473,-0.695273035339565, -2.70168801930204e-06,-0.00176334757225893,0.311817400439784,-0.721353386738714, -2.71227212034209e-06,-0.00163862006504134,0.320273722444093,-0.747433738137863, -2.722856220716e-06,-0.00151389255782197,0.328730044448404,-0.773514089537012, -2.73344032131195e-06,-0.00138916505060394,0.337186366452713,-0.799594440936162, -1.78318752480644e-06,-0.00433899864963383,0.133957736860613,-0.173883578033694, -1.78979057968709e-06,-0.00422127725885069,0.142361041414946,-0.199995761628658, -1.79639363401263e-06,-0.00410355586806677,0.150764345969279,-0.226107945223622, -1.80299668883777e-06,-0.00398583447728329,0.159167650523613,-0.252220128818586, -1.80959974349637e-06,-0.00386811308649992,0.167570955077946,-0.278332312413549, -1.816202798266e-06,-0.00375039169571623,0.17597425963228,-0.304444496008513, -1.82280585298011e-06,-0.00363267030493275,0.184377564186613,-0.330556679603477, -1.82940890763872e-06,-0.00351494891414927,0.192780868740946,-0.356668863198441, -1.83601196235283e-06,-0.00339722752336558,0.20118417329528,-0.382781046793404, -1.84261501723348e-06,-0.00327950613258277,0.209587477849613,-0.408893230388368, -1.84921807167004e-06,-0.0031617847417984,0.217990782403947,-0.435005413983332, -1.85582112677274e-06,-0.00304406335101559,0.22639408695828,-0.461117597578296, -1.86242418098725e-06,-0.00292634196023167,0.234797391512613,-0.487229781173259, -1.8690272358679e-06,-0.00280862056944797,0.243200696066947,-0.513341964768223, -1.87563029052651e-06,-0.00269089917866472,0.25160400062128,-0.539454148363187, -1.8822333456292e-06,-0.00257317778788146,0.260007305175614,-0.56556633195815, -1.8888363997327e-06,-0.00245545639709754,0.268410609729947,-0.591678515553114, -1.89543945450232e-06,-0.00233773500631429,0.27681391428428,-0.617790699148078, -1.90204250860582e-06,-0.00222001361552948,0.285217218838614,-0.643902882743042, -1.90864556393056e-06,-0.00210229222474689,0.293620523392947,-0.670015066338005, -1.91524861914427e-06,-0.00198457083396431,0.30202382794728,-0.696127249932969, -1.92185167358083e-06,-0.00186684944317994,0.310427132501614,-0.722239433527933, -1.92845472835046e-06,-0.00174912805239646,0.318830437055948,-0.748351617122897, -1.93505778334213e-06,-0.00163140666161343,0.327233741610281,-0.774463800717861, -1.94166083788971e-06,-0.00151368527082996,0.335637046164614,-0.800575984312824, -1.28023268458621e-06,-0.00430769541124465,0.13375752027218,-0.174040638482477, -1.28444787067528e-06,-0.00419506150919025,0.142122504725356,-0.200175801180263, -1.28866305693087e-06,-0.00408242760713606,0.150487489178533,-0.226310963878049, -1.29287824313096e-06,-0.00396979370508199,0.15885247363171,-0.252446126575835, -1.29709342916451e-06,-0.00385715980302748,0.167217458084887,-0.27858128927362, -1.3013086154201e-06,-0.00374452590097341,0.175582442538064,-0.304716451971406, -1.30552380173121e-06,-0.00363189199891956,0.183947426991241,-0.330851614669192, -1.30973898798681e-06,-0.00351925809686526,0.192312411444418,-0.356986777366977, -1.31395417385383e-06,-0.0034066241948103,0.200677395897595,-0.383121940064763, -1.31816936016493e-06,-0.00329399029275668,0.209042380350771,-0.409257102762549, -1.32238454653155e-06,-0.00318135639070261,0.217407364803948,-0.435392265460334, -1.32659973217653e-06,-0.00306872248864742,0.225772349257126,-0.46152742815812, -1.33081491859866e-06,-0.0029560885865938,0.234137333710302,-0.487662590855906, -1.33503010513181e-06,-0.00284345468453995,0.242502318163479,-0.513797753553691, -1.33924529055474e-06,-0.00273082078248432,0.250867302616656,-0.539932916251477, -1.34346047697687e-06,-0.00261818688043114,0.259232287069832,-0.566068078949263, -1.34767566317695e-06,-0.00250555297837662,0.26759727152301,-0.592203241647048, -1.35189084937704e-06,-0.00239291907632255,0.275962255976187,-0.618338404344834, -1.35610603602121e-06,-0.00228028517426893,0.284327240429363,-0.64447356704262, -1.36032122188823e-06,-0.00216765127221441,0.29269222488254,-0.670608729740405, -1.36453640819933e-06,-0.0020550173701599,0.301057209335717,-0.696743892438191, -1.36875159373329e-06,-0.00194238346810494,0.309422193788894,-0.722879055135977, -1.37296678082155e-06,-0.0018297495660522,0.31778717824207,-0.749014217833762, -1.37718196691061e-06,-0.00171711566399724,0.326152162695248,-0.775149380531548, -1.38139715266661e-06,-0.00160448176194272,0.334517147148425,-0.801284543229334, -0.000122614663452481,-0.0182265374582882,0.184700687434548,-0.14020061472181, -0.000131218248003218,-0.0176287050077489,0.201397418238037,-0.160027840678904, -0.000139821832554121,-0.0170308725572099,0.218094149041525,-0.179855066635997, -0.000148425417104747,-0.0164330401066703,0.234790879845014,-0.19968229259309, -0.000157029001655817,-0.0158352076561317,0.251487610648502,-0.219509518550184, -0.000165632586206443,-0.0152373752055923,0.268184341451991,-0.239336744507277, -0.000174236170757125,-0.014639542755053,0.284881072255479,-0.25916397046437, -0.000182839755308362,-0.0140417103045141,0.301577803058968,-0.278991196421464, -0.000191443339859043,-0.0134438778539749,0.318274533862456,-0.298818422378557, -0.000200046924409891,-0.012846045403436,0.334971264665945,-0.31864564833565, -0.000208650508960684,-0.0122482129528969,0.351667995469433,-0.338472874292744, -0.000217254093511254,-0.0116503805023573,0.368364726272922,-0.358300100249837, -0.000225857678061936,-0.0110525480518178,0.38506145707641,-0.37812732620693, -0.000234461262613062,-0.0104547156012789,0.401758187879899,-0.397954552164024, -0.000243064847163854,-0.00985688315073996,0.418454918683387,-0.417781778121117, -0.000251668431714425,-0.00925905070020061,0.435151649486876,-0.43760900407821, -0.000260272016265217,-0.00866121824966148,0.451848380290364,-0.457436230035304, -0.00026887560081601,-0.00806338579912236,0.468545111093853,-0.477263455992397, -0.000277479185367469,-0.0074655533485839,0.485241841897341,-0.49709068194949, -0.000286082769917928,-0.00686772089804411,0.50193857270083,-0.516917907906583, -0.000294686354469054,-0.00626988844750542,0.518635303504318,-0.536745133863677, -0.000303289939019624,-0.00567205599696585,0.535332034307807,-0.55657235982077, -0.000311893523570195,-0.00507422354642673,0.552028765111295,-0.576399585777863, -0.000320497108121431,-0.00447639109588804,0.568725495914784,-0.596226811734957, -0.000329100692672002,-0.00387855864534847,0.585422226718272,-0.61605403769205, -0.00012124524057977,-0.0179782783708148,0.18424235710624,-0.140753479772638, -0.00012968129392199,-0.0173765912123108,0.200846784262435,-0.160656432524923, -0.000138117347264211,-0.0167749040538067,0.217451211418631,-0.180559385277208, -0.000146553400606431,-0.0161732168953023,0.234055638574827,-0.200462338029494, -0.000154989453948706,-0.0155715297367984,0.250660065731022,-0.220365290781779, -0.000163425507290871,-0.0149698425782943,0.267264492887218,-0.240268243534064, -0.000171861560632869,-0.0143681554197899,0.283868920043414,-0.260171196286349, -0.000180297613975089,-0.0137664682612855,0.30047334719961,-0.280074149038634, -0.000188733667317309,-0.0131647811027815,0.317077774355806,-0.299977101790919, -0.000197169720659307,-0.0125630939442771,0.333682201512001,-0.319880054543204, -0.000205605774001527,-0.0119614067857732,0.350286628668197,-0.339783007295489, -0.000214041827343858,-0.011359719627269,0.366891055824393,-0.359685960047774, -0.000222477880685967,-0.0107580324687648,0.383495482980589,-0.37958891280006, -0.000230913934028076,-0.0101563453102604,0.400099910136784,-0.399491865552345, -0.000239349987370407,-0.00955465815175627,0.41670433729298,-0.41939481830463, -0.000247786040712406,-0.0089529709932521,0.433308764449176,-0.439297771056915, -0.000256222094054626,-0.00835128383474792,0.449913191605372,-0.4592007238092, -0.000264658147396735,-0.00774959667624375,0.466517618761567,-0.479103676561485, -0.000273094200738955,-0.00714790951773936,0.483122045917763,-0.49900662931377, -0.000281530254081508,-0.00654622235923563,0.499726473073959,-0.518909582066055, -0.000289966307423395,-0.00594453520073124,0.516330900230155,-0.53881253481834, -0.000298402360764616,-0.00534284804222596,0.532935327386351,-0.558715487570626, -0.000306838414107946,-0.00474116088372289,0.549539754542546,-0.57861844032291, -0.000315274467450166,-0.00413947372521895,0.566144181698742,-0.598521393075196, -0.000323710520791942,-0.00353778656671411,0.582748608854938,-0.618424345827481, -0.000119378181690943,-0.0176441252191403,0.183615232002131,-0.141503731285682, -0.000127588016705371,-0.0170376200221406,0.200093694121303,-0.161509447167207, -0.000135797851719244,-0.0164311148251405,0.216572156240475,-0.181515163048732, -0.000144007686733449,-0.0158246096281407,0.233050618359647,-0.201520878930258, -0.000152217521747489,-0.0152181044311408,0.249529080478819,-0.221526594811783, -0.000160427356761805,-0.0146115992341411,0.266007542597991,-0.241532310693308, -0.0001686371917759,-0.0140050940371412,0.282486004717163,-0.261538026574833, -0.000176847026789773,-0.0133985888401411,0.298964466836335,-0.281543742456359, -0.000185056861803923,-0.012792083643141,0.315442928955508,-0.301549458337884, -0.000193266696818295,-0.0121855784461413,0.33192139107468,-0.321555174219409, -0.000201476531832334,-0.0115790732491414,0.348399853193852,-0.341560890100934, -0.000209686366846373,-0.0109725680521415,0.364878315313024,-0.36156660598246, -0.000217896201860079,-0.0103660628551412,0.381356777432196,-0.381572321863985, -0.000226106036874563,-0.00975955765814196,0.397835239551368,-0.40157803774551, -0.000234315871889046,-0.00915305246114251,0.41431370167054,-0.421583753627035, -0.000242525706902641,-0.00854654726414172,0.430792163789712,-0.441589469508561, -0.000250735541916902,-0.00794004206714205,0.447270625908884,-0.461595185390086, -0.000258945376931052,-0.00733353687014215,0.463749088028056,-0.481600901271611, -0.000267155211945314,-0.00672703167314248,0.480227550147228,-0.501606617153136, -0.000275365046959131,-0.00612052647614236,0.4967060122664,-0.521612333034661, -0.000283574881973836,-0.00551402127914269,0.513184474385572,-0.541618048916187, -0.00029178471698732,-0.00490751608214213,0.529662936504745,-0.561623764797712, -0.00029999455200147,-0.00430101088514245,0.546141398623917,-0.581629480679237, -0.000308204387015398,-0.00369450568814234,0.562619860743089,-0.601635196560763, -0.000316414222030104,-0.00308800049114355,0.57909832286226,-0.621640912442288, -0.000116857500888801,-0.0172007722457338,0.182764509922216,-0.142510314726809, -0.000124765947903338,-0.0165885507931877,0.199072691324401,-0.162653903924753, -0.000132674394917875,-0.0159763293406416,0.215380872726586,-0.182797493122697, -0.000140582841932135,-0.0153641078880949,0.231689054128772,-0.202941082320641, -0.000148491288946673,-0.014751886435549,0.247997235530957,-0.223084671518585, -0.00015639973596121,-0.014139664983003,0.264305416933141,-0.243228260716529, -0.000164308182975581,-0.0135274435304569,0.280613598335327,-0.263371849914473, -0.000172216629990285,-0.0129152220779107,0.296921779737512,-0.283515439112417, -0.000180125077004878,-0.0123030006253648,0.313229961139696,-0.303659028310361, -0.000188033524019304,-0.0116907791728189,0.329538142541881,-0.323802617508305, -0.000195941971033564,-0.0110785577202723,0.345846323944066,-0.343946206706248, -0.000203850418047935,-0.010466336267726,0.362154505346251,-0.364089795904193, -0.00021175886506275,-0.00985411481518028,0.378462686748436,-0.384233385102137, -0.000219667312077121,-0.00924189336263415,0.394770868150621,-0.404376974300081, -0.000227575759091714,-0.00862967191008779,0.411079049552806,-0.424520563498025, -0.000235484206106307,-0.0080174504575421,0.427387230954991,-0.444664152695969, -0.000243392653120789,-0.00740522900499574,0.443695412357177,-0.464807741893913, -0.000251301100135048,-0.00679300755244938,0.460003593759361,-0.484951331091857, -0.000259209547149863,-0.00618078609990369,0.476311775161546,-0.5050949202898, -0.000267117994163901,-0.00556856464735755,0.492619956563731,-0.525238509487744, -0.000275026441178161,-0.00495634319481031,0.508928137965917,-0.545382098685688, -0.000282934888193087,-0.00434412174226528,0.525236319368101,-0.565525687883633, -0.000290843335207902,-0.00373190028971937,0.541544500770286,-0.585669277081576, -0.000298751782222162,-0.00311967883717301,0.557852682172471,-0.605812866279521, -0.000306660229236422,-0.00250745738462665,0.574160863574656,-0.625956455477464, -0.000113499264498385,-0.0166236968541382,0.181623997566467,-0.143840374637536, -0.000121013399512926,-0.0160052391047554,0.197704930157943,-0.16416614423249, -0.000128527534527689,-0.0153867813553729,0.21378586274942,-0.184491913827443, -0.000136041669542286,-0.0147683236059902,0.229866795340896,-0.204817683422397, -0.000143555804556716,-0.0141498658566074,0.245947727932373,-0.22514345301735, -0.000151069939571424,-0.0135314081072249,0.26202866052385,-0.245469222612303, -0.000158584074586021,-0.0129129503578422,0.278109593115326,-0.265794992207257, -0.000166098209600452,-0.0122944926084594,0.294190525706803,-0.28612076180221, -0.000173612344615326,-0.011676034859077,0.310271458298279,-0.306446531397163, -0.000181126479629756,-0.0110575771096939,0.326352390889757,-0.326772300992117, -0.000188640614644298,-0.0104391193603111,0.342433323481233,-0.34709807058707, -0.000196154749659061,-0.00982066161092843,0.35851425607271,-0.367423840182024, -0.000203668884673602,-0.0092022038615458,0.374595188664186,-0.387749609776977, -0.000211183019688033,-0.00858374611216273,0.390676121255663,-0.408075379371931, -0.000218697154702685,-0.00796528836278032,0.40675705384714,-0.428401148966884, -0.000226211289717226,-0.00734683061339725,0.422837986438617,-0.448726918561837, -0.000233725424731879,-0.00672837286401484,0.438918919030093,-0.469052688156791, -0.000241239559746531,-0.00610991511463244,0.454999851621569,-0.489378457751744, -0.000248753694761072,-0.00549145736524936,0.471080784213046,-0.509704227346697, -0.000256267829775281,-0.00487299961586629,0.487161716804523,-0.530029996941651, -0.000263781964790377,-0.00425454186648411,0.503242649396,-0.550355766536604, -0.00027129609980503,-0.00363608411710192,0.519323581987476,-0.570681536131558, -0.000278810234819682,-0.00301762636771885,0.535404514578953,-0.59100730572651, -0.000286324369834112,-0.00239916861833578,0.55148544717043,-0.611333075321464, -0.000293838504849098,-0.00178071086895359,0.567566379761906,-0.631658844916418, -0.000109103850067294,-0.015891206727496,0.180119204645341,-0.145562895609843, -0.000116114444255633,-0.0152669061543458,0.195902033200158,-0.166124601610413, -0.000123125038444472,-0.0146426055811961,0.211684861754975,-0.186686307610983, -0.000130135632633088,-0.0140183050080465,0.227467690309792,-0.207248013611553, -0.000137146226821649,-0.0133940044348966,0.243250518864608,-0.227809719612123, -0.000144156821010155,-0.0127697038617467,0.259033347419425,-0.248371425612694, -0.000151167415198716,-0.0121454032885968,0.274816175974242,-0.268933131613264, -0.000158178009387611,-0.0115211027154469,0.290599004529059,-0.289494837613834, -0.00016518860357595,-0.0108968021422968,0.306381833083876,-0.310056543614404, -0.0001721991977649,-0.0102725015691476,0.322164661638692,-0.330618249614974, -0.000179209791953405,-0.00964820099599795,0.337947490193509,-0.351179955615544, -0.000186220386142022,-0.00902390042284784,0.353730318748326,-0.371741661616114, -0.000193230980330417,-0.00839959984969796,0.369513147303142,-0.392303367616684, -0.000200241574519033,-0.00777529927654808,0.385295975857959,-0.412865073617254, -0.000207252168707539,-0.00715099870339819,0.401078804412776,-0.433426779617824, -0.000214262762895934,-0.00652669813024809,0.416861632967593,-0.453988485618394, -0.000221273357084772,-0.0059023975570982,0.43264446152241,-0.474550191618964, -0.000228283951273611,-0.00527809698394899,0.448427290077226,-0.495111897619534, -0.000235294545462117,-0.00465379641079888,0.464210118632043,-0.515673603620104, -0.000242305139650068,-0.00402949583764878,0.47999294718686,-0.536235309620674, -0.000249315733839128,-0.00340519526449912,0.495775775741677,-0.556797015621244, -0.000256326328027301,-0.00278089469134857,0.511558604296494,-0.577358721621814, -0.000263336922216251,-0.00215659411819979,0.52734143285131,-0.597920427622384, -0.000270347516405423,-0.00153229354505013,0.543124261406127,-0.618482133622954, -0.000277358110593817,-0.000907992971900029,0.558907089960944,-0.639043839623524, -0.000103483394497561,-0.0149909277874961,0.178175621500553,-0.147736534938755, -0.000109871070723244,-0.0143628630069459,0.193576152530571,-0.168595967735466, -0.000116258746948983,-0.0137347982263959,0.208976683560588,-0.189455400532177, -0.000122646423174944,-0.0131067334458459,0.224377214590606,-0.210314833328888, -0.000129034099400849,-0.012478668665296,0.239777745620624,-0.231174266125599, -0.000135421775626365,-0.0118506038847459,0.255178276650641,-0.25203369892231, -0.00014180945185216,-0.0112225391041958,0.270578807680659,-0.272893131719021, -0.000148197128078009,-0.0105944743236457,0.285979338710676,-0.293752564515732, -0.000154584804303692,-0.0099664095430958,0.301379869740694,-0.314611997312443, -0.000160972480529487,-0.00933834476254547,0.316780400770712,-0.335471430109154, -0.000167360156755558,-0.00871027998199603,0.332180931800729,-0.356330862905865, -0.000173747832981519,-0.00808221520144614,0.347581462830746,-0.377190295702576, -0.000180135509207147,-0.00745415042089581,0.362981993860764,-0.398049728499287, -0.000186523185432441,-0.00682608564034526,0.378382524890782,-0.418909161295998, -0.000192910861658957,-0.00619802085979604,0.393783055920799,-0.439768594092709, -0.000199298537884474,-0.00556995607924549,0.409183586950817,-0.46062802688942, -0.000205686214110434,-0.00494189129869649,0.424584117980834,-0.481487459686132, -0.000212073890336173,-0.00431382651814616,0.439984649010852,-0.502346892482842, -0.000218461566561912,-0.00368576173759583,0.455385180040869,-0.523206325279553, -0.000224849242787761,-0.0030576969570455,0.470785711070888,-0.544065758076264, -0.000231236919014166,-0.00242963217649672,0.486186242100904,-0.564925190872976, -0.000237624595239572,-0.00180156739594572,0.501586773130923,-0.585784623669687, -0.000244012271465643,-0.0011735026153965,0.516987304160939,-0.606644056466397, -0.000250399947690605,-0.000545437834845064,0.532387835190958,-0.627503489263109, -0.000256787623916233,8.26269457046003e-05,0.547788366220975,-0.648362922059819, -9.65080703466126e-05,-0.0139279477482086,0.175734129785176,-0.150391361531562, -0.000102155929316838,-0.0133007690298704,0.190658466457635,-0.171614430100443, -0.000107803788287064,-0.0126735903115325,0.205582803130094,-0.192837498669323, -0.000113451647257512,-0.0120464115931944,0.220507139802553,-0.214060567238203, -0.000119099506227849,-0.0114192328748565,0.235431476475013,-0.235283635807083, -0.000124747365197964,-0.0107920541565183,0.250355813147472,-0.256506704375964, -0.000130395224168134,-0.01016487543818,0.265280149819931,-0.277729772944844, -0.000136043083138415,-0.00953769671984195,0.28020448649239,-0.298952841513724, -0.000141690942108696,-0.00891051800150411,0.295128823164849,-0.320175910082604, -0.000147338801078978,-0.0082833392831656,0.310053159837308,-0.341398978651484, -0.000152986660049148,-0.00765616056482754,0.324977496509767,-0.362622047220365, -0.00015863451901954,-0.0070289818464897,0.339901833182226,-0.383845115789245, -0.000164282377990155,-0.00640180312815208,0.354826169854685,-0.405068184358125, -0.000169930236960325,-0.0057746244098138,0.369750506527144,-0.426291252927005, -0.000175578095930828,-0.00514744569147618,0.384674843199603,-0.447514321495886, -0.000181225954900999,-0.0045202669731379,0.399599179872063,-0.468737390064766, -0.000186873813871058,-0.00389308825479961,0.414523516544522,-0.489960458633646, -0.000192521672841117,-0.00326590953646155,0.429447853216981,-0.511183527202526, -0.000198169531811732,-0.00263873081812349,0.44437218988944,-0.532406595771406, -0.00020381739078168,-0.00201155209978499,0.459296526561899,-0.553629664340286, -0.000209465249751961,-0.00138437338144692,0.474220863234358,-0.574852732909167, -0.000215113108721687,-0.000757194663108418,0.489145199906817,-0.596075801478047, -0.000220760967692302,-0.000130015944771245,0.504069536579276,-0.617298870046927, -0.000226408826662916,0.000497162773566817,0.518993873251735,-0.638521938615808, -0.000232056685632753,0.00112434149190532,0.533918209924195,-0.659745007184688, -8.8167383742177e-05,-0.0127318878404413,0.172773369911458,-0.153507625942697, -9.29801404675468e-05,-0.0121134777557286,0.187125744444409,-0.175157534147167, -9.77928971929165e-05,-0.0114950676710156,0.201478118977361,-0.196807442351636, -0.000102605653918175,-0.0108766575863025,0.215830493510312,-0.218457350556106, -0.000107418410643711,-0.0102582475015902,0.230182868043263,-0.240107258760576, -0.000112231167369248,-0.00963983741687757,0.244535242576215,-0.261757166965045, -0.000117043924094729,-0.00902142733216471,0.258887617109166,-0.283407075169515, -0.000121856680820098,-0.00840301724745185,0.273239991642118,-0.305056983373984, -0.00012666943754569,-0.00778460716273943,0.287592366175069,-0.326706891578454, -0.00013148219427106,-0.00716619707802657,0.30194474070802,-0.348356799782923, -0.000136294950996541,-0.00654778699331393,0.316297115240971,-0.370006707987393, -0.000141107707721688,-0.00592937690860063,0.330649489773923,-0.391656616191862, -0.000145920464447613,-0.00531096682388865,0.345001864306874,-0.413306524396332, -0.000150733221172539,-0.0046925567391749,0.359354238839826,-0.434956432600801, -0.000155545977898242,-0.00407414665446293,0.373706613372777,-0.456606340805271, -0.000160358734623389,-0.00345573656974962,0.388058987905728,-0.47825624900974, -0.000165171491349203,-0.00283732648503743,0.402411362438679,-0.49990615721421, -0.000169984248074462,-0.00221891640032479,0.41676373697163,-0.521556065418679, -0.000174797004800054,-0.00160050631561126,0.431116111504583,-0.543205973623149, -0.000179609761525645,-0.000982096230899288,0.445468486037533,-0.564855881827618, -0.000184422518250682,-0.000363686146186204,0.459820860570485,-0.586505790032088, -0.000189235274976163,0.00025472393852688,0.474173235103436,-0.608155698236558, -0.000194048031701421,0.000873134023239963,0.488525609636388,-0.629805606441026, -0.000198860788426458,0.00149154410795305,0.502877984169339,-0.651455514645497, -0.000203673545152272,0.0021099541926648,0.51723035870229,-0.673105422849966, -7.86289681380947e-05,-0.0114584727726581,0.169334019550029,-0.156999449137054, -8.25550523894658e-05,-0.0108598557752654,0.18302882216364,-0.179127637854081, -8.64811366408369e-05,-0.0102612387778728,0.196723624777251,-0.201255826571108, -9.04072208925411e-05,-0.0096626217804805,0.210418427390862,-0.223384015288135, -9.43333051438566e-05,-0.00906400478308766,0.224113230004473,-0.245512204005161, -9.82593893955053e-05,-0.00846538778569528,0.237808032618083,-0.267640392722188, -0.000102185473646876,-0.00786677078830267,0.251502835231694,-0.289768581439215, -0.000106111557898247,-0.00726815379091006,0.265197637845305,-0.311896770156242, -0.000110037642149785,-0.00666953679351745,0.278892440458916,-0.334024958873268, -0.000113963726401156,-0.00607091979612462,0.292587243072527,-0.356153147590295, -0.000117889810652638,-0.00547230279873223,0.306282045686137,-0.378281336307322, -0.000121815894904453,-0.00487368580133984,0.319976848299748,-0.400409525024349, -0.000125741979156158,-0.00427506880394768,0.333671650913359,-0.422537713741375, -0.000129668063407085,-0.0036764518065544,0.34736645352697,-0.444665902458402, -0.000133594147658234,-0.00307783480916135,0.361061256140581,-0.466794091175429, -0.000137520231909716,-0.00247921781176896,0.374756058754192,-0.488922279892456, -0.00014144631616142,-0.00188060081437658,0.388450861367802,-0.511050468609482, -0.000145372400413013,-0.00128198381698441,0.402145663981413,-0.533178657326509, -0.000149298484664273,-0.000683366819591136,0.415840466595024,-0.555306846043536, -0.000153224568916088,-8.47498221991927e-05,0.429535269208634,-0.577435034760563, -0.000157150653167459,0.000513867175193194,0.443230071822245,-0.59956322347759, -0.000161076737418275,0.00111248417258691,0.456924874435856,-0.621691412194616, -0.000165002821670424,0.00171110116997841,0.470619677049467,-0.643819600911643, -0.000168928905921573,0.00230971816737124,0.484314479663078,-0.66594778962867, -0.000172854990173166,0.00290833516476408,0.498009282276689,-0.688075978345696, -6.82638380566924e-05,-0.0101818832773357,0.165533897607265,-0.160714117803524, -7.13127930284108e-05,-0.0096159520438085,0.178509811924003,-0.183351110527767, -7.43617479999625e-05,-0.00905002081028106,0.19148572624074,-0.205988103252009, -7.74107029712368e-05,-0.00848408957675328,0.204461640557478,-0.228625095976252, -8.04596579429551e-05,-0.00791815834322585,0.217437554874215,-0.251262088700495, -8.35086129143958e-05,-0.00735222710969841,0.230413469190953,-0.273899081424738, -8.65575678858921e-05,-0.00678629587617108,0.24338938350769,-0.296536074148981, -8.96065228574439e-05,-0.00622036464264353,0.256365297824428,-0.319173066873224, -9.26554778290511e-05,-0.0056544334091162,0.269341212141165,-0.341810059597467, -9.57044328000478e-05,-0.00508850217558798,0.282317126457903,-0.36444705232171, -9.87533877719882e-05,-0.0045225709420611,0.29529304077464,-0.387084045045953, -0.000101802342743373,-0.00395663970853333,0.308268955091378,-0.409721037770196, -0.00010485129771487,-0.003390708475006,0.321244869408115,-0.432358030494439, -0.000107900252686366,-0.00282477724147867,0.334220783724852,-0.454995023218682, -0.000110949207658084,-0.00225884600795134,0.34719669804159,-0.477632015942924, -0.000113998162629358,-0.00169291477442379,0.360172612358327,-0.500269008667167, -0.000117047117600966,-0.00112698354089602,0.373148526675065,-0.52290600139141, -0.000120096072572351,-0.000561052307368692,0.386124440991802,-0.545542994115653, -0.000123145027543736,4.87892615907981e-06,0.39910035530854,-0.568179986839896, -0.000126193982515899,0.000570810159685742,0.412076269625277,-0.590816979564139, -0.000129242937486951,0.00113674139321418,0.425052183942015,-0.613453972288382, -0.000132291892458669,0.00170267262674129,0.438028098258752,-0.636090965012625, -0.000135340847430832,0.00226860386026795,0.451004012575489,-0.658727957736868, -0.000138389802401662,0.00283453509379639,0.463979926892227,-0.681364950461111, -0.000141438757373047,0.00340046632732349,0.476955841208964,-0.704001943185353, -5.76086222014993e-05,-0.00897866422883398,0.161561041172487,-0.164453825550056, -5.98549438223239e-05,-0.0084578203509732,0.173793070280581,-0.187603051923676, -6.2101265443093e-05,-0.00793697647311231,0.186025099388675,-0.210752278297296, -6.43475870640287e-05,-0.00741613259525187,0.198257128496769,-0.233901504670916, -6.65939086847422e-05,-0.00689528871739109,0.210489157604863,-0.257050731044537, -6.88402303057334e-05,-0.00637444483953065,0.222721186712957,-0.280199957418157, -7.10865519266135e-05,-0.00585360096167009,0.234953215821051,-0.303349183791777, -7.33328735476046e-05,-0.00533275708380976,0.247185244929145,-0.326498410165397, -7.55791951681517e-05,-0.00481191320594854,0.259417274037239,-0.349647636539017, -7.78255167890318e-05,-0.00429106932808798,0.271649303145333,-0.372796862912638, -8.00718384098564e-05,-0.0037702254502272,0.283881332253427,-0.395946089286258, -8.2318160030348e-05,-0.00324938157236643,0.296113361361521,-0.419095315659878, -8.45644816517277e-05,-0.00272853769450632,0.308345390469615,-0.442244542033498, -8.68108032721082e-05,-0.0022076938166451,0.32057741957771,-0.465393768407119, -8.90571248933769e-05,-0.00168684993878498,0.332809448685804,-0.488542994780739, -9.13034465139795e-05,-0.00116600606092376,0.345041477793898,-0.511692221154359, -9.35497681350261e-05,-0.00064516218306343,0.357273506901992,-0.534841447527979, -9.57960897559618e-05,-0.000124318305202875,0.369505536010086,-0.557990673901599, -9.80424113763423e-05,0.00039652557265768,0.38173756511818,-0.58113990027522, -0.000100288732997611,0.000917369450518457,0.393969594226274,-0.60428912664884, -0.000102535054617992,0.00143821332837968,0.406201623334368,-0.62743835302246, -0.000104781376239038,0.00195905720624001,0.418433652442462,-0.65058757939608, -0.000107027697860196,0.00247990108410034,0.430665681550556,-0.6737368057697, -0.000109274019480687,0.00300074496196157,0.44289771065865,-0.696886032143321, -0.000111520341101068,0.00352158883982234,0.455129739766744,-0.720035258516941, -4.72626734265291e-05,-0.00790980246243134,0.157640135075173,-0.168015448572707, -4.88320054694569e-05,-0.00744332688314142,0.169144905200348,-0.191652516051101, -5.04013375124401e-05,-0.00697685130385139,0.180649675325522,-0.215289583529495, -5.19706695553124e-05,-0.00651037572456115,0.192154445450698,-0.238926651007889, -5.35400015984067e-05,-0.00604390014527156,0.203659215575872,-0.262563718486283, -5.5109333641723e-05,-0.00557742456598165,0.215163985701047,-0.286200785964677, -5.66786656842622e-05,-0.00511094898669118,0.226668755826222,-0.309837853443071, -5.82479977276895e-05,-0.00464447340740182,0.238173525951397,-0.333474920921464, -5.98173297702287e-05,-0.00417799782811112,0.249678296076572,-0.357111988399858, -6.1386661813323e-05,-0.00371152224882132,0.261183066201747,-0.380749055878252, -6.29559938565283e-05,-0.00324504666953151,0.272687836326922,-0.404386123356646, -6.45253258990675e-05,-0.00277857109024127,0.284192606452097,-0.42802319083504, -6.60946579422728e-05,-0.00231209551095146,0.295697376577272,-0.451660258313434, -6.7663989985367e-05,-0.00184561993166121,0.307202146702447,-0.475297325791828, -6.92333220281283e-05,-0.00137914435237096,0.318706916827622,-0.498934393270221, -7.08026540713336e-05,-0.000912668773081382,0.330211686952797,-0.522571460748615, -7.23719861140948e-05,-0.000446193193791578,0.341716457077972,-0.546208528227009, -7.3941318156745e-05,2.02823854995593e-05,0.353221227203147,-0.569845595705403, -7.55106502005054e-05,0.00048675796478781,0.364725997328321,-0.593482663183797, -7.70799822429336e-05,0.000953233544079168,0.376230767453497,-0.617119730662191, -7.86493142861389e-05,0.00141970912336831,0.387735537578671,-0.640756798140585, -8.0218646328678e-05,0.00188618470265922,0.399240307703847,-0.664393865618979, -8.17879783723274e-05,0.00235266028194836,0.410745077829021,-0.688030933097372, -8.33573104147556e-05,0.00281913586123927,0.422249847954197,-0.711668000575766, -8.4926642458405e-05,0.00328561144052886,0.433754618079372,-0.73530506805416, -3.77579533709094e-05,-0.00700940703286379,0.153983378606066,-0.171232582099896, -3.88005017408211e-05,-0.00660167608253526,0.164815467990088,-0.195310305415285, -3.98430501106772e-05,-0.00619394513220661,0.17564755737411,-0.219388028730674, -4.08855984803114e-05,-0.00578621418187775,0.186479646758132,-0.243465752046064, -4.1928146850001e-05,-0.0053784832315491,0.197311736142154,-0.267543475361453, -4.29706952199682e-05,-0.00497075228122057,0.208143825526177,-0.291621198676842, -4.40132435897134e-05,-0.00456302133089204,0.218975914910199,-0.315698921992231, -4.50557919596806e-05,-0.00415529038056328,0.229808004294221,-0.339776645307621, -4.60983403293147e-05,-0.00374755943023453,0.240640093678243,-0.36385436862301, -4.71408886992819e-05,-0.00333982847990599,0.251472183062265,-0.387932091938399, -4.81834370690271e-05,-0.00293209752957768,0.262304272446287,-0.412009815253788, -4.92259854384391e-05,-0.00252436657924804,0.27313636183031,-0.436087538569177, -5.02685338086284e-05,-0.00211663562891995,0.283968451214332,-0.460165261884566, -5.13110821781515e-05,-0.00170890467859097,0.294800540598354,-0.484242985199956, -5.23536305482297e-05,-0.00130117372826288,0.305632629982376,-0.508320708515345, -5.33961789178639e-05,-0.000893442777933906,0.316464719366399,-0.532398431830734, -5.443872728772e-05,-0.000485711827605373,0.327296808750421,-0.556476155146123, -5.54812756574652e-05,-7.79808772761736e-05,0.338128898134443,-0.580553878461512, -5.65238240276544e-05,0.000329750073051471,0.348960987518465,-0.604631601776902, -5.75663723968445e-05,0.000737481023381115,0.359793076902488,-0.62870932509229, -5.86089207670337e-05,0.00114521197370943,0.37062516628651,-0.65278704840768, -5.96514691363348e-05,0.00155294292403862,0.381457255670532,-0.676864771723069, -6.0694017506524e-05,0.00196067387436694,0.392289345054554,-0.700942495038458, -6.17365658760471e-05,0.00236840482469569,0.403121434438577,-0.725020218353847, -6.27791142463474e-05,0.00277613577502356,0.413953523822598,-0.749097941669236, -2.94584137228715e-05,-0.00628396626851779,0.150747391027488,-0.174002534052311, -3.01208270984121e-05,-0.00593417615710912,0.160988314506727,-0.198459662041367, -3.07832404738972e-05,-0.00558438604570033,0.171229237985966,-0.222916790030424, -3.14456538492713e-05,-0.00523459593429121,0.181470161465205,-0.247373918019481, -3.21080672247009e-05,-0.00488480582288231,0.191711084944444,-0.271831046008538, -3.27704806001305e-05,-0.00453501571147341,0.201952008423683,-0.296288173997594, -3.34328939759487e-05,-0.00418522560006473,0.212192931902922,-0.320745301986651, -3.40953073512673e-05,-0.00383543548865561,0.222433855382161,-0.345202429975708, -3.47577207264749e-05,-0.00348564537724672,0.2326747788614,-0.369659557964765, -3.54201341026261e-05,-0.00313585526583848,0.242915702340639,-0.394116685953821, -3.60825474780002e-05,-0.00278606515442936,0.253156625819878,-0.418573813942878, -3.67449608530412e-05,-0.0024362750430198,0.263397549299118,-0.443030941931935, -3.74073742285264e-05,-0.00208648493161134,0.273638472778356,-0.467488069920992, -3.80697876042335e-05,-0.00173669482020244,0.283879396257595,-0.491945197910048, -3.87322009793856e-05,-0.00138690470879332,0.294120319736835,-0.516402325899105, -3.93946143547597e-05,-0.0010371145973842,0.304361243216074,-0.540859453888161, -4.00570277303558e-05,-0.000687324485975527,0.314602166695312,-0.565316581877218, -4.0719441106063e-05,-0.000337534374566406,0.324843090174552,-0.589773709866275, -4.13818544816591e-05,1.22557368418263e-05,0.33508401365379,-0.614230837855332, -4.20442678568111e-05,0.000362045848250947,0.345324937133029,-0.638687965844388, -4.27066812322963e-05,0.000711835959660068,0.355565860612269,-0.663145093833445, -4.33690946081144e-05,0.00106162607106874,0.365806784091508,-0.687602221822502, -4.40315079831555e-05,0.00141141618247786,0.376047707570747,-0.712059349811559, -4.46939213585296e-05,0.00176120629388699,0.386288631049986,-0.736516477800615, -4.53563347346808e-05,0.00211099640529477,0.396529554529224,-0.760973605789672, -2.25250364927487e-05,-0.00571963385739138,0.148013139703018,-0.176290723976157, -2.29308207982948e-05,-0.00542286590567631,0.157757349089021,-0.201061268936432, -2.33366051037298e-05,-0.00512609795396146,0.167501558475022,-0.225831813896707, -2.37423894093314e-05,-0.00482933000224683,0.177245767861024,-0.250602358856982, -2.41481737149329e-05,-0.0045325620505321,0.186989977247026,-0.275372903817258, -2.45539580204235e-05,-0.00423579409881714,0.196734186633028,-0.300143448777533, -2.49597423256365e-05,-0.00393902614710195,0.206478396019031,-0.324913993737808, -2.53655266314601e-05,-0.00364225819538766,0.216222605405032,-0.349684538698083, -2.57713109371172e-05,-0.0033454902436727,0.225966814791035,-0.374455083658358, -2.61770952424412e-05,-0.00304872229195752,0.235711024177037,-0.399225628618633, -2.65828795481537e-05,-0.002751954340243,0.245455233563038,-0.423996173578908, -2.69886638538663e-05,-0.00245518638852849,0.25519944294904,-0.448766718539183, -2.73944481592459e-05,-0.0021584184368133,0.264943652335043,-0.473537263499459, -2.78002324645144e-05,-0.00186165048509856,0.274687861721044,-0.498307808459734, -2.8206016770449e-05,-0.00156488253338405,0.284432071107046,-0.523078353420009, -2.86118010754954e-05,-0.0012681145816682,0.294176280493049,-0.547848898380284, -2.9017585381208e-05,-0.000971346629953906,0.303920489879051,-0.572619443340559, -2.94233696872537e-05,-0.000674578678239168,0.313664699265053,-0.597389988300834, -2.98291539919671e-05,-0.000377810726523542,0.323408908651055,-0.622160533261109, -3.02349382976796e-05,-8.1042774809692e-05,0.333153118037056,-0.646931078221385, -3.06407226035033e-05,0.00021572517690549,0.342897327423059,-0.67170162318166, -3.10465069094379e-05,0.00051249312861934,0.35264153680906,-0.696472168141935, -3.14522912144843e-05,0.000809261080335411,0.362385746195063,-0.72124271310221, -3.18580755203079e-05,0.0011060290320497,0.372129955581065,-0.746013258062485, -3.22638598256875e-05,0.00140279698376444,0.381874164967066,-0.77078380302276, -1.69427810465805e-05,-0.00529196453517244,0.145791002598509,-0.178117155137419, -1.71846844633783e-05,-0.00504087958355992,0.155133302926869,-0.203137869245253, -1.74265878804536e-05,-0.00478979463194773,0.164475603255229,-0.228158583353087, -1.76684912975844e-05,-0.00453870968033554,0.173817903583589,-0.253179297460921, -1.79103947145487e-05,-0.00428762472872313,0.183160203911949,-0.278200011568755, -1.81522981316795e-05,-0.00403653977711138,0.192502504240309,-0.303220725676589, -1.83942015486438e-05,-0.00378545482549875,0.20184480456867,-0.328241439784423, -1.86361049658301e-05,-0.003534369873887,0.211187104897029,-0.353262153892257, -1.8878008383072e-05,-0.00328328492227503,0.220529405225389,-0.378282868000091, -1.91199117999252e-05,-0.00303219997066262,0.22987170555375,-0.403303582107925, -1.93618152167785e-05,-0.00278111501905021,0.23921400588211,-0.428324296215759, -1.96037186340758e-05,-0.00253003006743868,0.248556306210469,-0.453345010323593, -1.98456220508181e-05,-0.00227894511582583,0.25789860653883,-0.478365724431427, -2.00875254680044e-05,-0.00202786016421408,0.26724090686719,-0.503386438539261, -2.03294288851907e-05,-0.00177677521260144,0.27658320719555,-0.528407152647095, -2.05713323023771e-05,-0.00152569026098992,0.28592550752391,-0.553427866754929, -2.08132357187862e-05,-0.00127460530937684,0.29526780785227,-0.578448580862764, -2.10551391363056e-05,-0.00102352035776532,0.30461010818063,-0.603469294970598, -2.1297042553492e-05,-0.000772435406153349,0.31395240850899,-0.628490009078432, -2.15389459705673e-05,-0.000521350454540936,0.32329470883735,-0.653510723186266, -2.17808493869764e-05,-0.00027026550292808,0.33263700916571,-0.6785314372941, -2.20227528044958e-05,-1.91805513165555e-05,0.34197930949407,-0.703552151401934, -2.2264656221016e-05,0.000231904400296301,0.351321609822431,-0.728572865509768, -2.25065596389795e-05,0.000482989351906937,0.36066391015079,-0.753593579617602, -2.27484630563879e-05,0.000734074303518462,0.37000621047915,-0.778614293725436, -1.25796224305641e-05,-0.00497385379081838,0.144041111545111,-0.179535473036997, -1.27213375839541e-05,-0.00476030761378166,0.153067982140322,-0.204750456377328, -1.28630527372886e-05,-0.00454676143674471,0.162094852735533,-0.229965439717658, -1.30047678906786e-05,-0.00433321525970787,0.171121723330744,-0.255180423057988, -1.31464830440686e-05,-0.00411966908267081,0.180148593925955,-0.280395406398318, -1.32881981972366e-05,-0.00390612290563386,0.189175464521166,-0.305610389738648, -1.34299133506266e-05,-0.00369257672859713,0.198202335116377,-0.330825373078978, -1.35716285043497e-05,-0.0034790305515604,0.207229205711588,-0.356040356419308, -1.37133436574066e-05,-0.00326548437452323,0.216256076306799,-0.381255339759638, -1.38550588110187e-05,-0.00305193819748673,0.225282946902009,-0.406470323099968, -1.39967739640756e-05,-0.00283839202044955,0.23430981749722,-0.431685306440298, -1.41384891176877e-05,-0.00262484584341283,0.243336688092431,-0.456900289780629, -1.42802042709667e-05,-0.00241129966637588,0.252363558687642,-0.482115273120959, -1.44219194244677e-05,-0.00219775348933915,0.261390429282853,-0.507330256461289, -1.45636345776357e-05,-0.0019842073123022,0.270417299878064,-0.532545239801619, -1.47053497310257e-05,-0.00177066113526525,0.279444170473275,-0.557760223141949, -1.48470648845267e-05,-0.00155711495822808,0.288471041068487,-0.582975206482279, -1.49887800380277e-05,-0.0013435687811918,0.297497911663697,-0.608190189822609, -1.51304951909736e-05,-0.00113002260415396,0.306524782258909,-0.633405173162939, -1.52722103444747e-05,-0.000916476427117452,0.315551652854119,-0.658620156503269, -1.54139254983088e-05,-0.000702930250081835,0.32457852344933,-0.683835139843599, -1.55556406512547e-05,-0.000489384073043553,0.333605394044542,-0.709050123183929, -1.56973558047557e-05,-0.000275837896007047,0.342632264639752,-0.73426510652426, -1.58390709580347e-05,-6.22917189705419e-05,0.351659135234963,-0.75948008986459, -1.59807861114247e-05,0.000151254458066852,0.360686005830174,-0.78469507320492, -9.24725226419953e-06,-0.00474026454069099,0.142696821365599,-0.180613532573666, -9.32962552641081e-06,-0.00455646074887239,0.15148198930787,-0.205976179423591, -9.41199878878862e-06,-0.00437265695705402,0.16026715725014,-0.231338826273517, -9.49437205116643e-06,-0.00418885316523576,0.16905232519241,-0.256701473123442, -9.57674531354424e-06,-0.00400504937341717,0.17783749313468,-0.282064119973368, -9.65911857586654e-06,-0.00382124558159869,0.18662266107695,-0.307426766823293, -9.74149183818884e-06,-0.0036374417897802,0.19540782901922,-0.332789413673219, -9.82386510056665e-06,-0.00345363799796172,0.204192996961491,-0.358152060523144, -9.90623836272242e-06,-0.00326983420614302,0.212978164903761,-0.383514707373069, -9.98861162526676e-06,-0.00308603041432498,0.221763332846031,-0.408877354222995, -1.0070984887478e-05,-0.0029022266225065,0.230548500788301,-0.43424000107292, -1.01533581498003e-05,-0.00271842283068779,0.239333668730571,-0.459602647922846, -1.02357314124557e-05,-0.00253461903886976,0.248118836672841,-0.484965294772771, -1.0318104674556e-05,-0.00235081524705083,0.256904004615111,-0.510327941622697, -1.04004779368783e-05,-0.00216701145523279,0.265689172557381,-0.535690588472622, -1.04828511990895e-05,-0.00198320766341409,0.274474340499651,-0.561053235322547, -1.05652244609677e-05,-0.00179940387159494,0.283259508441922,-0.586415882172473, -1.06475977237341e-05,-0.00161560007977712,0.292044676384192,-0.611778529022398, -1.07299709858344e-05,-0.00143179628795842,0.300829844326462,-0.637141175872324, -1.08123442488228e-05,-0.0012479924961406,0.309615012268732,-0.662503822722249, -1.08947175113672e-05,-0.00106418870432234,0.318400180211002,-0.687866469572174, -1.09770907728013e-05,-0.000880384912502752,0.327185348153273,-0.7132291164221, -1.10594640347905e-05,-0.000696581120684048,0.335970516095543,-0.738591763272025, -1.11418372986671e-05,-0.000512777328867564,0.344755684037812,-0.763954410121951, -1.12242105599902e-05,-0.000328973537047528,0.353540851980083,-0.789317056971876, -6.74659235810893e-06,-0.00457022862622525,0.141683554392096,-0.181419697802315, -6.79452573076889e-06,-0.00440934959867834,0.15028688080046,-0.206892766371011, -6.84245910342884e-06,-0.00424847057113109,0.158890207208824,-0.232365834939707, -6.89039247647738e-06,-0.0040875915435844,0.167493533617189,-0.257838903508403, -6.93832584935938e-06,-0.00392671251603738,0.176096860025553,-0.283311972077099, -6.98625922224139e-06,-0.00376583348849047,0.184700186433918,-0.308785040645795, -7.03419259479032e-06,-0.00360495446094311,0.193303512842282,-0.334258109214491, -7.08212596745028e-06,-0.00344407543339642,0.201906839250646,-0.359731177783187, -7.1300593403878e-06,-0.00328319640584906,0.210510165659011,-0.385204246351883, -7.17799271343633e-06,-0.00312231737830282,0.219113492067375,-0.410677314920579, -7.22592608604078e-06,-0.00296143835075546,0.227716818475739,-0.436150383489275, -7.27385945897829e-06,-0.00280055932320855,0.236320144884104,-0.461623452057971, -7.32179283180479e-06,-0.0026396802956612,0.244923471292469,-0.487096520626666, -7.36972620463128e-06,-0.00247880126811428,0.253526797700833,-0.512569589195363, -7.41765957801288e-06,-0.00231792224056826,0.262130124109197,-0.538042657764059, -7.46559295028426e-06,-0.00215704321302068,0.270733450517562,-0.563515726332755, -7.51352632311075e-06,-0.00199616418547377,0.279336776925926,-0.588988794901451, -7.56145969593724e-06,-0.00183528515792597,0.287940103334291,-0.614461863470147, -7.6093930690968e-06,-0.00167440613037995,0.296543429742655,-0.639934932038842, -7.65732644147921e-06,-0.00151352710283259,0.305146756151019,-0.665408000607538, -7.70525981441672e-06,-0.00135264807528568,0.313750082559384,-0.690881069176234, -7.75319318713219e-06,-0.00119176904773877,0.322353408967748,-0.716354137744931, -7.80112656051379e-06,-0.0010308900201923,0.330956735376112,-0.741827206313627, -7.84905993267415e-06,-0.000870010992644055,0.339560061784477,-0.767300274882323, -7.89699330538962e-06,-0.000709131965097143,0.348163388192841,-0.792773343451019, -4.89465790221022e-06,-0.00444717617764279,0.140930645269771,-0.182015214934389, -4.92280312297533e-06,-0.0043036078697839,0.149399041301859,-0.2075698524209, -4.9509483430743e-06,-0.00416003956192423,0.157867437333948,-0.233124489907411, -4.97909356389492e-06,-0.00401647125406557,0.166335833366036,-0.258679127393922, -5.00723878443798e-06,-0.00387290294620612,0.174804229398124,-0.284233764880433, -5.03538400459247e-06,-0.00372933463834646,0.183272625430213,-0.309788402366944, -5.06352922508002e-06,-0.00358576633048746,0.191741021462301,-0.335343039853455, -5.0916744461782e-06,-0.00344219802262891,0.200209417494389,-0.360897677339966, -5.11981966666575e-06,-0.00329862971476969,0.208677813526477,-0.386452314826477, -5.14796488682023e-06,-0.0031550614069098,0.217146209558566,-0.412006952312988, -5.17611010752983e-06,-0.00301149309905102,0.225614605590654,-0.437561589799499, -5.20425532790636e-06,-0.0028679247911918,0.234083001622742,-0.46311622728601, -5.23240054794982e-06,-0.00272435648333191,0.242551397654831,-0.488670864772521, -5.26054576899249e-06,-0.00258078817547314,0.251019793686919,-0.514225502259032, -5.28869098936902e-06,-0.00243721986761392,0.259488189719007,-0.539780139745543, -5.31683620974555e-06,-0.00229365155975469,0.267956585751095,-0.565334777232054, -5.34498143067719e-06,-0.00215008325189658,0.276424981783183,-0.590889414718565, -5.37312665094269e-06,-0.00200651494403692,0.284893377815272,-0.616444052205076, -5.40127187143025e-06,-0.00186294663617748,0.29336177384736,-0.641998689691587, -5.42941709180678e-06,-0.00171937832831803,0.301830169879449,-0.667553327178098, -5.4575623126274e-06,-0.00157581002045948,0.310298565911536,-0.693107964664609, -5.48570753344801e-06,-0.00143224171260004,0.318766961943625,-0.71866260215112, -5.51385275349148e-06,-0.00128867340474059,0.327235357975714,-0.744217239637631, -5.54199797353494e-06,-0.00114510509688071,0.335703754007802,-0.769771877124142, -5.57014319502169e-06,-0.00100153678902304,0.34417215003989,-0.795326514610653, -3.53647106743349e-06,-0.00435847277562251,0.14037710526267,-0.182451163104266, -3.55325512529925e-06,-0.00422777956714671,0.148746400502972,-0.208065513096975, -3.57003918277643e-06,-0.00409708635867012,0.157115695743273,-0.233679863089684, -3.58682324047566e-06,-0.00396639315019387,0.165484990983575,-0.259294213082394, -3.60360729800835e-06,-0.00383569994171773,0.173854286223876,-0.284908563075103, -3.62039135559655e-06,-0.00370500673324137,0.182223581464178,-0.310522913067813, -3.63717541373987e-06,-0.00357431352476589,0.190592876704479,-0.336137263060522, -3.65395947093949e-06,-0.00344362031628886,0.198962171944781,-0.361751613053232, -3.67074352863872e-06,-0.00331292710781272,0.207331467185082,-0.387365963045941, -3.68752758628244e-06,-0.00318223389933658,0.215700762425383,-0.412980313038651, -3.70431164398166e-06,-0.00305154069086044,0.224070057665685,-0.43859466303136, -3.72109570168089e-06,-0.00292084748238408,0.232439352905986,-0.46420901302407, -3.73787975938011e-06,-0.00279015427390772,0.240808648146288,-0.489823363016779, -3.75466381696832e-06,-0.00265946106543136,0.24917794338659,-0.515437713009489, -3.7714478744455e-06,-0.00252876785695499,0.257547238626891,-0.541052063002198, -3.78823193236677e-06,-0.00239807464847908,0.265916533867192,-0.566666412994908, -3.80501598973293e-06,-0.00226738144000271,0.274285829107494,-0.592280762987617, -3.82180004732113e-06,-0.00213668823152657,0.282655124347795,-0.617895112980327, -3.83858410557547e-06,-0.00200599502305066,0.291024419588097,-0.643509462973036, -3.85536816294163e-06,-0.00187530181457429,0.299393714828398,-0.669123812965746, -3.87215222064086e-06,-0.00174460860609837,0.3077630100687,-0.694738162958455, -3.88893627867315e-06,-0.00161391539762201,0.316132305309001,-0.720352512951165, -3.9057203354842e-06,-0.00148322218914521,0.324501600549303,-0.745966862943874, -3.92250439329445e-06,-0.00135252898066929,0.332870895789604,-0.771581212936584, -3.93928845110469e-06,-0.00122183577219293,0.341240191029906,-0.797195562929293, -2.54748546552053e-06,-0.0042946983083828,0.139973305081111,-0.182768189419938, -2.55769820090013e-06,-0.0041734757392542,0.148270360578211,-0.208425963005514, -2.56791093650177e-06,-0.0040522531701257,0.156567416075312,-0.234083736591091, -2.57812367215893e-06,-0.00393103060099742,0.164864471572412,-0.259741510176667, -2.58833640753853e-06,-0.0038098080318687,0.173161527069512,-0.285399283762243, -2.59854914314017e-06,-0.00368858546274065,0.181458582566612,-0.311057057347819, -2.60876187913039e-06,-0.00356736289361259,0.189755638063712,-0.336714830933395, -2.61897461462102e-06,-0.00344614032448387,0.198052693560812,-0.362372604518971, -2.62918735005613e-06,-0.00332491775535537,0.206349749057912,-0.388030378104547, -2.63940008571328e-06,-0.00320369518622687,0.214646804555013,-0.413688151690124, -2.64961282137044e-06,-0.0030824726170986,0.222943860052113,-0.4393459252757, -2.65982555647248e-06,-0.00296125004796988,0.231240915549213,-0.465003698861276, -2.67003829257373e-06,-0.0028400274788416,0.239537971046313,-0.490661472446852, -2.68025102823088e-06,-0.00271880490971355,0.247835026543413,-0.516319246032428, -2.69046376344395e-06,-0.00259758234058483,0.256132082040514,-0.541977019618004, -2.70067649910111e-06,-0.00247635977145677,0.264429137537613,-0.56763479320358, -2.71088923453622e-06,-0.00235513720232738,0.272726193034714,-0.593292566789157, -2.72110197041542e-06,-0.00223391463319977,0.281023248531814,-0.618950340374733, -2.73131470596155e-06,-0.00211269206407128,0.289320304028914,-0.644608113960309, -2.74152744139666e-06,-0.00199146949494278,0.297617359526014,-0.670265887545885, -2.75174017660973e-06,-0.00187024692581339,0.305914415023115,-0.695923661131461, -2.76195291215586e-06,-0.00174902435668489,0.314211470520215,-0.721581434717037, -2.77216564825711e-06,-0.00162780178755728,0.322508526017315,-0.747239208302614, -2.78237838402529e-06,-0.00150657921842923,0.330805581514415,-0.77289698188819, -2.79259111923835e-06,-0.00138535664929984,0.339102637011516,-0.798554755473766, -1.83107347795364e-06,-0.00424892861948079,0.139680409510101,-0.182997624279129, -1.83743084986032e-06,-0.00413461664548964,0.147925093811305,-0.208686823918072, -1.8437882217115e-06,-0.00402030467149883,0.156169778112509,-0.234376023557014, -1.85014559356267e-06,-0.00390599269750769,0.164414462413714,-0.260065223195957, -1.85650296535833e-06,-0.00379168072351677,0.172659146714918,-0.2857544228349, -1.86286033698746e-06,-0.00367736874952551,0.180903831016122,-0.311443622473842, -1.86921770861659e-06,-0.00356305677553426,0.189148515317326,-0.337132822112785, -1.8755750806343e-06,-0.00344874480154367,0.19739319961853,-0.362822021751728, -1.88193245231894e-06,-0.00333443282755241,0.205637883919735,-0.38851122139067, -1.88828982417011e-06,-0.00322012085356138,0.213882568220939,-0.414200421029613, -1.89464719557719e-06,-0.0031058088795699,0.222127252522143,-0.439889620668555, -1.90100456731734e-06,-0.00299149690557887,0.230371936823347,-0.465578820307498, -1.90736193916852e-06,-0.00287718493158806,0.238616621124551,-0.491268019946441, -1.91371931101969e-06,-0.00276287295759681,0.246861305425756,-0.516957219585383, -1.92007668275984e-06,-0.00264856098360577,0.25510598972696,-0.542646419224326, -1.92643405449999e-06,-0.00253424900961474,0.263350674028164,-0.568335618863268, -1.93279142635117e-06,-0.00241993703562349,0.271595358329368,-0.594024818502211, -1.93914879820234e-06,-0.00230562506163245,0.279840042630573,-0.619714018141154, -1.94550617016453e-06,-0.00219131308764187,0.288084726931777,-0.645403217780096, -1.95186354234878e-06,-0.00207700111365128,0.296329411232981,-0.671092417419039, -1.95822091320075e-06,-0.00196268913965891,0.304574095534185,-0.696781617057982, -1.96457828538499e-06,-0.00184837716566877,0.312818779835389,-0.722470816696924, -1.97093565723616e-06,-0.00173406519167818,0.321063464136593,-0.748160016335867, -1.9772930284212e-06,-0.00161975321768582,0.329308148437798,-0.773849215974809, -1.98365040060544e-06,-0.00150544124369567,0.337552832739001,-0.799538415613752, -1.31406032644055e-06,-0.00421612072135213,0.139468833153718,-0.183163088966447, -1.31811125458903e-06,-0.00410682206736301,0.147675700967806,-0.208874952563745, -1.32216218279302e-06,-0.003997523413374,0.155882568781895,-0.234586816161043, -1.32621311105252e-06,-0.00388822475938511,0.164089436595984,-0.260298679758341, -1.33026403914549e-06,-0.00377892610539576,0.172296304410073,-0.286010543355639, -1.33431496718295e-06,-0.00366962745140631,0.180503172224162,-0.311722406952936, -1.33836589555347e-06,-0.00356032879741774,0.18871004003825,-0.337434270550234, -1.34241682353542e-06,-0.00345103014342829,0.196916907852339,-0.363146134147532, -1.34646775207248e-06,-0.0033417314894395,0.205123775666428,-0.38885799774483, -1.35051867988789e-06,-0.00323243283545027,0.213330643480517,-0.414569861342128, -1.35456960825842e-06,-0.00312313418146104,0.221537511294606,-0.440281724939426, -1.35862053629587e-06,-0.00301383552747203,0.229744379108695,-0.465993588536723, -1.36267146444435e-06,-0.00290453687348302,0.237951246922783,-0.491705452134021, -1.36672239237079e-06,-0.00279523821949357,0.246158114736872,-0.517417315731319, -1.37077332085234e-06,-0.00268593956550434,0.254364982550962,-0.543129179328617, -1.37482424944491e-06,-0.00257664091151621,0.26257185036505,-0.568841042925915, -1.37887517748236e-06,-0.00246734225752698,0.270778718179139,-0.594552906523212, -1.38292610518675e-06,-0.00235804360353686,0.278985585993228,-0.62026477012051, -1.38697703377932e-06,-0.00224874494954852,0.287192453807317,-0.645976633717808, -1.3910279619278e-06,-0.00213944629555929,0.295399321621405,-0.671688497315106, -1.39507888974322e-06,-0.00203014764157006,0.303606189435494,-0.697400360912404, -1.39912981811374e-06,-0.00192084898758083,0.311813057249583,-0.723112224509702, -1.40318074648427e-06,-0.00181155033359248,0.320019925063671,-0.748824088107, -1.40723167463275e-06,-0.00170225167960325,0.32822679287776,-0.774535951704297, -1.41128260289225e-06,-0.00159295302561402,0.336433660691849,-0.800247815301595, -0.000138568490530733,-0.0212571188369073,0.196837434248721,-0.141601576221728, -0.000148453772764845,-0.0207171610154719,0.214081530925473,-0.160415225126397, -0.000158339054999124,-0.0201772031940368,0.231325627602226,-0.179228874031065, -0.000168224337233347,-0.0196372453726016,0.248569724278979,-0.198042522935734, -0.00017810961946757,-0.0190972875511665,0.265813820955731,-0.216856171840402, -0.000187994901702071,-0.0185573297297315,0.283057917632484,-0.23566982074507, -0.000197880183935739,-0.0180173719082957,0.300302014309237,-0.254483469649739, -0.000207765466170351,-0.0174774140868612,0.31754611098599,-0.273297118554407, -0.000217650748404574,-0.0169374562654259,0.334790207662742,-0.292110767459076, -0.000227536030638853,-0.0163974984439905,0.352034304339495,-0.310924416363744, -0.000237421312873187,-0.0158575406225556,0.369278401016248,-0.329738065268413, -0.000247306595107633,-0.0153175828011205,0.386522497693001,-0.348551714173081, -0.000257191877341079,-0.0147776249796845,0.403766594369753,-0.36736536307775, -0.000267077159575413,-0.0142376671582494,0.421010691046506,-0.386179011982418, -0.000276962441809858,-0.0136977093368145,0.438254787723259,-0.404992660887087, -0.000286847724044081,-0.01315775151538,0.455498884400011,-0.423806309791755, -0.000296733006278638,-0.0126177936939447,0.472742981076764,-0.442619958696424, -0.000306618288512639,-0.0120778358725095,0.489987077753516,-0.461433607601092, -0.000316503570747084,-0.0115378780510744,0.507231174430269,-0.48024725650576, -0.000326388852981307,-0.0109979202296393,0.524475271107022,-0.499060905410429, -0.000336274135215531,-0.010457962408204,0.541719367783775,-0.517874554315097, -0.00034615941744931,-0.00991800458676861,0.558963464460527,-0.536688203219766, -0.000356044699683755,-0.00937804676533327,0.57620756113728,-0.555501852124434, -0.000365929981918089,-0.00883808894389793,0.593451657814033,-0.574315501029102, -0.000375815264152646,-0.00829813112246391,0.610695754490785,-0.593129149933771, -0.000136874769601947,-0.0209124407958453,0.196273770192236,-0.142325544723687, -0.000146550319085836,-0.0203648595511365,0.213409188946912,-0.161232408717505, -0.000156225868569337,-0.0198172783064275,0.230544607701589,-0.180139272711322, -0.000165901418053227,-0.0192696970617188,0.247680026456265,-0.19904613670514, -0.000175576967537006,-0.0187221158170098,0.264815445210941,-0.217953000698957, -0.000185252517020618,-0.0181745345723008,0.281950863965617,-0.236859864692775, -0.000194928066504507,-0.0176269533275921,0.299086282720293,-0.255766728686592, -0.000204603615988008,-0.017079372082883,0.31622170147497,-0.27467359268041, -0.000214279165472453,-0.0165317908381748,0.333357120229646,-0.293580456674227, -0.000223954714955732,-0.0159842095934655,0.350492538984322,-0.312487320668044, -0.000233630264439677,-0.0154366283487568,0.367627957738998,-0.331394184661862, -0.000243305813923289,-0.0148890471040477,0.384763376493674,-0.350301048655679, -0.000252981363406901,-0.0143414658593388,0.40189879524835,-0.369207912649497, -0.000262656912890735,-0.0137938846146299,0.419034214003027,-0.388114776643314, -0.000272332462374458,-0.0132463033699208,0.436169632757703,-0.407021640637132, -0.000282008011858181,-0.0126987221252115,0.45330505151238,-0.425928504630949, -0.000291683561341793,-0.0121511408805028,0.470440470267056,-0.444835368624767, -0.000301359110825516,-0.0116035596357937,0.487575889021732,-0.463742232618584, -0.000311034660309351,-0.0110559783910851,0.504711307776408,-0.482649096612401, -0.000320710209792852,-0.010508397146376,0.521846726531084,-0.501555960606219, -0.000330385759276908,-0.00996081590166709,0.53898214528576,-0.520462824600036, -0.000340061308760742,-0.00941323465695865,0.556117564040436,-0.539369688593853, -0.000349736858243799,-0.00886565341224888,0.573252982795113,-0.558276552587671, -0.000359412407728299,-0.00831807216754044,0.590388401549789,-0.577183416581488, -0.000369087957212244,-0.007770490922832,0.607523820304465,-0.596090280575306, -0.000134570459241534,-0.0204507692890145,0.195503189223776,-0.143304481362205, -0.000143963687516679,-0.0198935046999725,0.212490573537839,-0.162337389052376, -0.000153356915791991,-0.0193362401109307,0.229477957851903,-0.181370296742547, -0.000162750144066914,-0.0187789755218889,0.246465342165966,-0.200403204432718, -0.000172143372342115,-0.0182217109328471,0.263452726480029,-0.219436112122889, -0.000181536600617038,-0.0176644463438049,0.280440110794092,-0.23846901981306, -0.000190929828892183,-0.0171071817547632,0.297427495108155,-0.257501927503231, -0.000200323057167218,-0.0165499171657213,0.314414879422218,-0.276534835193402, -0.000209716285442751,-0.0159926525766798,0.331402263736281,-0.295567742883573, -0.000219109513717619,-0.0154353879876377,0.348389648050344,-0.314600650573744, -0.000228502741992598,-0.0148781233985955,0.365377032364407,-0.333633558263915, -0.00023789597026791,-0.0143208588095538,0.382364416678471,-0.352666465954087, -0.000247289198542888,-0.0137635942205119,0.399351800992534,-0.371699373644258, -0.000256682426818311,-0.0132063296314704,0.416339185306597,-0.390732281334429, -0.000266075655093179,-0.0126490650424285,0.43332656962066,-0.4097651890246, -0.000275468883368268,-0.0120918004533861,0.450313953934723,-0.428798096714771, -0.000284862111643691,-0.0115345358643453,0.467301338248785,-0.447831004404942, -0.000294255339918448,-0.0109772712753027,0.484288722562849,-0.466863912095113, -0.000303648568193426,-0.0104200066862608,0.501276106876912,-0.485896819785284, -0.000313041796468183,-0.00986274209721816,0.518263491190975,-0.504929727475455, -0.000322435024743606,-0.00930547750817645,0.535250875505038,-0.523962635165626, -0.00033182825301914,-0.00874821291913541,0.552238259819101,-0.542995542855797, -0.000341221481294229,-0.00819094833009348,0.569225644133164,-0.562028450545968, -0.000350614709568986,-0.00763368374105111,0.586213028447228,-0.58106135823614, -0.000360007937844409,-0.00707641915200963,0.603200412761291,-0.600094265926311, -0.000131468518038691,-0.0198422353376262,0.194459226113996,-0.144611580285915, -0.000140487205163964,-0.0192731635396821,0.211247011635563,-0.163812784445297, -0.000149505892289348,-0.0187040917417384,0.228034797157131,-0.18301398860468, -0.000158524579414621,-0.0181350199437945,0.244822582678699,-0.202215192764063, -0.000167543266540116,-0.017565948145851,0.261610368200266,-0.221416396923446, -0.000176561953665277,-0.0169968763479069,0.278398153721834,-0.240617601082828, -0.000185580640790883,-0.0164278045499635,0.295185939243402,-0.259818805242211, -0.000194599327915934,-0.0158587327520194,0.311973724764969,-0.279020009401594, -0.000203618015041873,-0.0152896609540762,0.328761510286537,-0.298221213560976, -0.000212636702166979,-0.0147205891561322,0.345549295808105,-0.317422417720359, -0.000221655389292197,-0.0141515173581883,0.362337081329672,-0.336623621879742, -0.000230674076417636,-0.0135824455602447,0.37912486685124,-0.355824826039124, -0.000239692763542854,-0.0130133737623008,0.395912652372807,-0.375026030198507, -0.000248711450668737,-0.0124443019643576,0.412700437894375,-0.39422723435789, -0.000257730137793843,-0.0118752301664133,0.429488223415943,-0.413428438517273, -0.000266748824919505,-0.0113061583684702,0.44627600893751,-0.432629642676655, -0.000275767512044278,-0.0107370865705256,0.463063794459078,-0.451830846836038, -0.000284786199169829,-0.010168014772582,0.479851579980646,-0.471032050995421, -0.000293804886295268,-0.00959894297463837,0.496639365502213,-0.490233255154803, -0.000302823573420485,-0.00902987117669429,0.513427151023781,-0.509434459314186, -0.000311842260545481,-0.00846079937875066,0.530214936545348,-0.528635663473569, -0.000320860947671697,-0.00789172758080792,0.547002722066916,-0.547836867632951, -0.000329879634796804,-0.00732265578286384,0.563790507588483,-0.567038071792334, -0.00033889832192191,-0.00675358398491932,0.580578293110052,-0.586239275951717, -0.00034791700904746,-0.00618451218697613,0.597366078631619,-0.6054404801111, -0.000127352300467731,-0.0190570233465511,0.19306238696977,-0.146327746292757, -0.000135883755368549,-0.0184744025881373,0.209584739482984,-0.165749916650102, -0.000144415210269588,-0.0178917818297237,0.226107091996198,-0.185172087007447, -0.000152946665170073,-0.0173091610713094,0.242629444509412,-0.204594257364791, -0.000161478120071001,-0.0167265403128957,0.259151797022626,-0.224016427722136, -0.000170009574971486,-0.0161439195544817,0.275674149535839,-0.243438598079481, -0.000178541029872525,-0.0155612987960678,0.292196502049054,-0.262860768436826, -0.00018707248477362,-0.0149786780376544,0.308718854562267,-0.282282938794171, -0.000195603939674216,-0.0143960572792401,0.325241207075481,-0.301705109151515, -0.000204135394574756,-0.0138134365208258,0.341763559588696,-0.32112727950886, -0.000212666849475518,-0.0132308157624117,0.35828591210191,-0.340549449866205, -0.00022119830437628,-0.0126481950039981,0.374808264615123,-0.35997162022355, -0.000229729759277597,-0.0120655742455851,0.391330617128337,-0.379393790580894, -0.000238261214178359,-0.0114829534871708,0.407852969641551,-0.398815960938239, -0.000246792669079121,-0.0109003327287573,0.424375322154765,-0.418238131295584, -0.000255324123979883,-0.0103177119703433,0.440897674667978,-0.437660301652929, -0.000263855578880978,-0.00973509121192961,0.457420027181193,-0.457082472010274, -0.000272387033781407,-0.00915247045351486,0.473942379694407,-0.476504642367618, -0.000280918488682058,-0.00856984969510122,0.49046473220762,-0.495926812724963, -0.00028944994358282,-0.00798722893668735,0.506987084720834,-0.515348983082308, -0.000297981398483804,-0.00740460817827371,0.523509437234048,-0.534771153439653, -0.00030651285338501,-0.00682198741986006,0.540031789747262,-0.554193323796997, -0.000315044308285661,-0.00623936666144598,0.556554142260476,-0.573615494154342, -0.000323575763186756,-0.00565674590303278,0.573076494773689,-0.593037664511687, -0.000332107218087407,-0.00507412514461869,0.589598847286904,-0.612459834869032, -0.000121993621610639,-0.0180715621396583,0.191224773067189,-0.148531923754783, -0.000129907561818077,-0.0174748032975077,0.207400604084888,-0.168237894578677, -0.000137821502025792,-0.0168780444553571,0.223576435102588,-0.187943865402571, -0.000145735442233175,-0.0162812856132063,0.239752266120288,-0.207649836226464, -0.000153649382440724,-0.0156845267710557,0.255928097137988,-0.227355807050358, -0.000161563322648328,-0.015087767928905,0.272103928155688,-0.247061777874252, -0.000169477262855822,-0.0144910090867545,0.288279759173387,-0.266767748698146, -0.000177391203063426,-0.0138942502446036,0.304455590191087,-0.28647371952204, -0.000185305143270864,-0.0132974914024528,0.320631421208787,-0.306179690345934, -0.000193219083478358,-0.0127007325603024,0.336807252226487,-0.325885661169828, -0.00020113302368574,-0.0121039737181516,0.352983083244186,-0.345591631993721, -0.000209046963893122,-0.0115072148760007,0.369158914261887,-0.365297602817615, -0.000216960904100505,-0.0109104560338498,0.385334745279586,-0.385003573641509, -0.000224874844308331,-0.0103136971916993,0.401510576297286,-0.404709544465403, -0.000232788784515825,-0.00971693834954879,0.417686407314986,-0.424415515289297, -0.000240702724723318,-0.00912017950739807,0.433862238332686,-0.444121486113191, -0.000248616664930923,-0.00852342066524758,0.450038069350385,-0.463827456937085, -0.000256530605138194,-0.00792666182309665,0.466213900368085,-0.483533427760978, -0.000264444545345688,-0.00732990298094571,0.482389731385785,-0.503239398584872, -0.00027235848555307,-0.00673314413879433,0.498565562403485,-0.522945369408766, -0.000280272425761008,-0.00613638529664451,0.514741393421185,-0.54265134023266, -0.000288186365968501,-0.0055396264544938,0.530917224438884,-0.562357311056553, -0.000296100306175773,-0.00494286761234264,0.547093055456584,-0.582063281880447, -0.000304014246383266,-0.00434610877019193,0.563268886474284,-0.601769252704341, -0.000311928186590538,-0.00374934992804121,0.579444717491984,-0.621475223528236, -0.000115189896055634,-0.0168776345346261,0.188861450544414,-0.151284179268307, -0.000122347392235655,-0.016268394858554,0.204595740450284,-0.171344518745477, -0.000129504888415732,-0.0156591551824822,0.220330030356154,-0.191404858222648, -0.000136662384595754,-0.0150499155064102,0.236064320262024,-0.211465197699818, -0.00014381988077572,-0.0144406758303383,0.251798610167894,-0.231525537176989, -0.000150977376955963,-0.0138314361542664,0.267532900073764,-0.251585876654159, -0.000158134873135984,-0.0132221964781944,0.283267189979634,-0.271646216131329, -0.000165292369315617,-0.012612956802122,0.299001479885504,-0.2917065556085, -0.000172449865495916,-0.0120037171260503,0.314735769791374,-0.31176689508567, -0.000179607361676215,-0.0113944774499786,0.330470059697245,-0.33182723456284, -0.000186764857855737,-0.0107852377739062,0.346204349603115,-0.351887574040011, -0.000193922354035814,-0.0101759980978344,0.361938639508985,-0.371947913517181, -0.000201079850216113,-0.00956675842176291,0.377672929414854,-0.392008252994351, -0.000208237346395745,-0.00895751874569051,0.393407219320725,-0.412068592471522, -0.000215394842575822,-0.00834827906961833,0.409141509226595,-0.432128931948692, -0.000222552338755899,-0.00773903939354637,0.424875799132465,-0.452189271425862, -0.000229709834936309,-0.00712979971747485,0.440610089038335,-0.472249610903033, -0.00023686733111572,-0.00652056004140245,0.456344378944205,-0.492309950380203, -0.000244024827295686,-0.00591132036533049,0.472078668850075,-0.512370289857373, -0.000251182323475763,-0.0053020806892583,0.487812958755945,-0.532430629334544, -0.000258339819655951,-0.00469284101318657,0.503547248661815,-0.552490968811714, -0.000265497315836249,-0.00408360133711438,0.519281538567686,-0.572551308288884, -0.000272654812015771,-0.00347436166104265,0.535015828473555,-0.592611647766055, -0.00027981230819607,-0.00286512198497091,0.550750118379425,-0.612671987243225, -0.000286969804376258,-0.00225588230889917,0.566484408285295,-0.632732326720396, -0.000106823067110629,-0.015492604428486,0.18591066072162,-0.154602313414574, -0.000113093272265052,-0.014875992531985,0.201099550434247,-0.175089881658487, -0.000119363477419476,-0.0142593806354839,0.216288440146875,-0.1955774499024, -0.000125633682573734,-0.0136427687389827,0.231477329859503,-0.216065018146313, -0.000131903887728102,-0.0130261568424817,0.246666219572131,-0.236552586390226, -0.000138174092882415,-0.0124095449459802,0.261855109284759,-0.257040154634139, -0.000144444298036672,-0.011792933049479,0.277043998997386,-0.277527722878051, -0.000150714503191096,-0.0111763211529778,0.292232888710014,-0.298015291121964, -0.000156984708345465,-0.0105597092564769,0.307421778422642,-0.318502859365877, -0.000163254913499777,-0.00994309735997545,0.32261066813527,-0.33899042760979, -0.000169525118653979,-0.00932648546347403,0.337799557847898,-0.359477995853703, -0.000175795323808292,-0.00870987356697328,0.352988447560525,-0.379965564097616, -0.000182065528962716,-0.00809326167047186,0.368177337273153,-0.400453132341529, -0.000188335734116918,-0.00747664977397067,0.383366226985781,-0.420940700585442, -0.00019460593927112,-0.00686003787746947,0.398555116698409,-0.441428268829355, -0.000200876144425655,-0.00624342598096828,0.413744006411036,-0.461915837073267, -0.000207146349579856,-0.00562681408446708,0.428932896123664,-0.48240340531718, -0.00021341655473428,-0.00501020218796588,0.444121785836292,-0.502890973561093, -0.000219686759888704,-0.00439359029146491,0.45931067554892,-0.523378541805006, -0.000225956965043017,-0.00377697839496349,0.474499565261548,-0.543866110048919, -0.000232227170197219,-0.00316036649846207,0.489688454974176,-0.564353678292832, -0.000238497375351199,-0.00254375460196021,0.504877344686804,-0.584841246536745, -0.000244767580505734,-0.00192714270546013,0.520066234399431,-0.605328814780658, -0.000251037785660047,-0.00131053080895782,0.53525512411206,-0.62581638302457, -0.00025730799081447,-0.000693918912457736,0.550444013824687,-0.646303951268484, -9.69322386731308e-05,-0.0139663759823091,0.182361673096866,-0.158437570616758, -0.000102216042004166,-0.0133517550950321,0.196902353270231,-0.179418950181251, -0.000107499845335479,-0.0127371342077555,0.211443033443595,-0.200400329745744, -0.000112783648666626,-0.0121225133204786,0.22598371361696,-0.221381709310236, -0.00011806745199755,-0.0115078924332014,0.240524393790325,-0.242363088874729, -0.000123351255328974,-0.0108932715459247,0.25506507396369,-0.263344468439222, -0.000128635058660009,-0.0102786506586479,0.269605754137054,-0.284325848003715, -0.000133918861991322,-0.00966402977137104,0.284146434310419,-0.305307227568208, -0.000139202665322413,-0.00904940888409422,0.298687114483783,-0.3262886071327, -0.000144486468653726,-0.00843478799681763,0.313227794657148,-0.347269986697193, -0.000149770271984373,-0.00782016710953992,0.327768474830513,-0.368251366261686, -0.000155054075316241,-0.00720554622226421,0.342309155003877,-0.389232745826179, -0.00016033787864711,-0.00659092533498673,0.356849835177242,-0.410214125390672, -0.000165621681978201,-0.00597630444770969,0.371390515350607,-0.431195504955165, -0.000170905485309403,-0.00536168356043287,0.385931195523971,-0.452176884519658, -0.000176189288640938,-0.00474706267315672,0.400471875697336,-0.47315826408415, -0.000181473091971918,-0.0041324417858799,0.4150125558707,-0.494139643648643, -0.000186756895302453,-0.0035178208986022,0.429553236044065,-0.515121023213136, -0.000192040698633988,-0.00290320001132582,0.444093916217429,-0.536102402777629, -0.000197324501965301,-0.00228857912404923,0.458634596390794,-0.557083782342121, -0.000202608305296281,-0.00167395823677241,0.473175276564158,-0.578065161906614, -0.000207892108627816,-0.00105933734949515,0.487715956737524,-0.599046541471107, -0.000213175911958685,-0.000444716462218775,0.502256636910888,-0.6200279210356, -0.000218459715289998,0.000169904425058043,0.516797317084252,-0.641009300600093, -0.000223743518620534,0.000784525312336193,0.531337997257618,-0.661990680164586, -8.57746917162783e-05,-0.0123793191099448,0.178282454778791,-0.162660423089042, -9.00298535422839e-05,-0.0117800103967033,0.192087326528341,-0.184185519084017, -9.4285015368345e-05,-0.0111807016834615,0.205892198277892,-0.205710615078992, -9.85401771945726e-05,-0.0105813929702202,0.219697070027442,-0.227235711073967, -0.000102795339020634,-0.00998208425697877,0.233501941776992,-0.248760807068943, -0.00010705050084675,-0.00938277554373723,0.247306813526542,-0.270285903063918, -0.000111305662672812,-0.00878346683049558,0.261111685276093,-0.291810999058893, -0.00011556082449915,-0.00818415811725459,0.274916557025643,-0.313336095053868, -0.0001198159863251,-0.00758484940401272,0.288721428775193,-0.334861191048843, -0.000124071148151161,-0.00698554069077106,0.302526300524744,-0.356386287043818, -0.000128326309977056,-0.00638623197752941,0.316331172274294,-0.377911383038793, -0.000132581471803062,-0.00578692326428798,0.330136044023844,-0.399436479033768, -0.000136836633629622,-0.00518761455104655,0.343940915773395,-0.420961575028744, -0.000141091795455295,-0.00458830583780445,0.357745787522945,-0.442486671023718, -0.000145346957281633,-0.00398899712456369,0.371550659272495,-0.464011767018694, -0.000149602119107417,-0.00338968841132159,0.385355531022045,-0.485536863013669, -0.0001538572809342,-0.00279037969808082,0.399160402771596,-0.507061959008644, -0.000158112442760205,-0.00219107098483917,0.412965274521146,-0.528587055003619, -0.000162367604586322,-0.00159176227159774,0.426770146270696,-0.550112150998594, -0.000166622766412217,-0.00099245355835631,0.440575018020246,-0.571637246993569, -0.000170877928237667,-0.000393144845113991,0.454379889769796,-0.593162342988544, -0.000175133090064561,0.000206163868126552,0.468184761519346,-0.614687438983519, -0.000179388251890789,0.000805472581367539,0.481989633268896,-0.636212534978495, -0.000183643413716683,0.00140478129460986,0.495794505018447,-0.65773763097347, -0.000187898575543022,0.00200409000785129,0.509599376767998,-0.679262726968445, -7.38370526889853e-05,-0.0108280480267909,0.173832451924669,-0.167068536715419, -7.70950515421309e-05,-0.0102594896346754,0.186844535993324,-0.189161202575035, -8.035305039511e-05,-0.00969093124255982,0.199856620061979,-0.211253868434651, -8.36110492481446e-05,-0.00912237285044426,0.212868704130633,-0.233346534294267, -8.68690481011791e-05,-0.00855381445832859,0.225880788199288,-0.255439200153884, -9.01270469540472e-05,-0.00798525606621281,0.238892872267943,-0.2775318660135, -9.33850458071928e-05,-0.00741669767409725,0.251904956336598,-0.299624531873116, -9.66430446603384e-05,-0.00684813928198169,0.264917040405252,-0.321717197732732, -9.9901043513595e-05,-0.00627958088986635,0.277929124473907,-0.343809863592349, -0.000103159042366574,-0.0057110224977508,0.290941208542562,-0.365902529451965, -0.00010641704121972,-0.00514246410563524,0.303953292611216,-0.387995195311581, -0.000109675040072643,-0.00457390571351945,0.316965376679871,-0.410087861171198, -0.0001129330389259,-0.00400534732140412,0.329977460748526,-0.432180527030814, -0.000116191037778934,-0.00343678892928834,0.34298954481718,-0.45427319289043, -0.000119449036632302,-0.00286823053717322,0.356001628885835,-0.476365858750047, -0.000122707035485115,-0.00229967214505744,0.36901371295449,-0.498458524609663, -0.00012596503433826,-0.00173111375294188,0.382025797023144,-0.520551190469279, -0.000129223033191295,-0.00116255536082654,0.395037881091799,-0.542643856328895, -0.000132481032043774,-0.000593996968710098,0.408049965160454,-0.564736522188511, -0.000135739030897031,-2.54385765949827e-05,0.421062049229108,-0.586829188048128, -0.000138997029750954,0.000543119815519688,0.434074133297763,-0.608921853907744, -0.000142255028603877,0.00111167820763569,0.447086217366418,-0.63101451976736, -0.000145513027456246,0.00168023659975214,0.460098301435073,-0.653107185626976, -0.000148771026310057,0.00224879499186681,0.473110385503727,-0.675199851486593, -0.000152029025162981,0.00281735338398237,0.486122469572382,-0.697292517346209, -6.17683071474917e-05,-0.00940294183231072,0.169246257044863,-0.171421115161163, -6.41334024594209e-05,-0.00887964466982916,0.181450787364694,-0.19407420041299, -6.64984977712946e-05,-0.00835634750734748,0.193655317684524,-0.216727285664817, -6.88635930831683e-05,-0.00783305034486592,0.205859848004355,-0.239380370916645, -7.1228688395264e-05,-0.00730975318238425,0.218064378324185,-0.262033456168472, -7.35937837069156e-05,-0.00678645601990224,0.230268908644016,-0.284686541420299, -7.59588790186227e-05,-0.00626315885742068,0.242473438963847,-0.307339626672126, -7.83239743304964e-05,-0.0057398616949389,0.254677969283677,-0.329992711923954, -8.06890696423146e-05,-0.00521656453245711,0.266882499603508,-0.352645797175781, -8.30541649542438e-05,-0.00469326736997533,0.279087029923339,-0.375298882427608, -8.54192602656179e-05,-0.0041699702074931,0.291291560243169,-0.397951967679435, -8.77843555781022e-05,-0.00364667304501221,0.303496090563,-0.420605052931263, -9.01494508894762e-05,-0.00312337588252998,0.315700620882831,-0.44325813818309, -9.25145462017385e-05,-0.00260007872004908,0.327905151202661,-0.465911223434917, -9.48796415134456e-05,-0.00207678155756708,0.340109681522492,-0.488564308686744, -9.72447368254858e-05,-0.00155348439508551,0.352314211842322,-0.511217393938571, -9.96098321375261e-05,-0.00103018723260417,0.364518742162153,-0.533870479190399, -0.000101974927449122,-0.000506890070122168,0.376723272481983,-0.556523564442226, -0.000104340022760718,1.64070923598381e-05,0.388927802801814,-0.579176649694053, -0.000106705118072981,0.000539704254840956,0.401132333121644,-0.601829734945881, -0.000109070213384355,0.00106300141732341,0.413336863441475,-0.624482820197708, -0.000111435308696173,0.00158629857980497,0.425541393761306,-0.647135905449535, -0.000113800404008102,0.00210959574228653,0.437745924081136,-0.669788990701362, -0.000116165499320364,0.00263289290476809,0.449950454400967,-0.69244207595319, -0.000118530594632293,0.00315619006724965,0.462154984720798,-0.715095161205017, -5.02457493531949e-05,-0.00816761850920722,0.164787179220487,-0.175489138843553, -5.18740934261075e-05,-0.00770009295342611,0.176214713051117,-0.198666005432811, -5.35024374995752e-05,-0.00723256739764577,0.187642246881747,-0.221842872022069, -5.51307815720992e-05,-0.00676504184186411,0.199069780712377,-0.245019738611328, -5.67591256454558e-05,-0.00629751628608344,0.210497314543007,-0.268196605200586, -5.83874697183684e-05,-0.0058299907303021,0.221924848373637,-0.291373471789844, -6.0015813791725e-05,-0.00536246517452166,0.233352382204267,-0.314550338379102, -6.16441578645266e-05,-0.00489493961874055,0.244779916034897,-0.337727204968361, -6.32725019376612e-05,-0.00442741406295966,0.256207449865527,-0.360904071557619, -6.49008460109624e-05,-0.00395988850717854,0.267634983696157,-0.384080938146877, -6.65291900837639e-05,-0.00349236295139765,0.279062517526787,-0.407257804736135, -6.81575341571206e-05,-0.00302483739561721,0.290490051357417,-0.430434671325393, -6.97858782299221e-05,-0.0025573118398361,0.301917585188047,-0.453611537914652, -7.14142223033898e-05,-0.00208978628405476,0.313345119018677,-0.47678840450391, -7.30425663758583e-05,-0.00162226072827343,0.324772652849307,-0.499965271093168, -7.46709104492149e-05,-0.0011547351724932,0.336200186679937,-0.523142137682426, -7.62992545226826e-05,-0.000687209616712536,0.347627720510567,-0.546319004271684, -7.79275985953731e-05,-0.000219684060930758,0.359055254341197,-0.569495870860942, -7.95559426683967e-05,0.000247841494849688,0.370482788171827,-0.592672737450201, -8.11842867418644e-05,0.000715367050630356,0.381910322002457,-0.615849604039459, -8.2812630814777e-05,0.00118289260641147,0.393337855833087,-0.639026470628717, -8.44409748874675e-05,0.00165041816219302,0.404765389663717,-0.662203337217975, -8.60693189610462e-05,0.00211794371797325,0.416192923494346,-0.685380203807234, -8.76976630342918e-05,0.00258546927375392,0.427620457324976,-0.708557070396492, -8.93260071060942e-05,0.0030529948295368,0.439047991155607,-0.73173393698575, -3.98286669491266e-05,-0.00714976942538137,0.16068871371924,-0.179100605803067, -4.08957117294384e-05,-0.00674272518123153,0.171408449587027,-0.202742469438024, -4.19627565096947e-05,-0.00633568093708159,0.182128185454815,-0.22638433307298, -4.30298012898955e-05,-0.00592863669293209,0.192847921322602,-0.250026196707937, -4.40968460703739e-05,-0.00552159244878214,0.203567657190389,-0.273668060342893, -4.51638908506857e-05,-0.00511454820463264,0.214287393058177,-0.29730992397785, -4.6230935630831e-05,-0.00470750396048247,0.225007128925964,-0.320951787612806, -4.72979804109208e-05,-0.00430045971633253,0.235726864793751,-0.344593651247763, -4.83650251914547e-05,-0.00389341547218303,0.246446600661539,-0.36823551488272, -4.94320699717665e-05,-0.00348637122803308,0.257166336529326,-0.391877378517676, -5.04991147518563e-05,-0.00307932698388336,0.267886072397113,-0.415519242152632, -5.15661595321681e-05,-0.00267228273973319,0.278605808264901,-0.439161105787589, -5.26332043121469e-05,-0.00226523849558302,0.289325544132689,-0.462802969422546, -5.37002490923477e-05,-0.00185819425143308,0.300045280000476,-0.486444833057502, -5.47672938733257e-05,-0.00145115000728424,0.310765015868263,-0.510086696692459, -5.58343386533044e-05,-0.00104410576313407,0.32148475173605,-0.533728560327415, -5.69013834336163e-05,-0.000637061518984128,0.332204487603838,-0.557370423962372, -5.79684282138171e-05,-0.00023001727483396,0.342924223471625,-0.581012287597328, -5.90354729941289e-05,0.000177026969315541,0.353643959339413,-0.604654151232285, -6.01025177747738e-05,0.000584071213464821,0.3643636952072,-0.628296014867241, -6.11695625541975e-05,0.000991115457615432,0.375083431074987,-0.651937878502198, -6.22366073348424e-05,0.00139815970176516,0.385803166942775,-0.675579742137154, -6.33036521147101e-05,0.00180520394591532,0.396522902810562,-0.699221605772111, -6.4370696895466e-05,0.00221224819006505,0.407242638678349,-0.722863469407067, -6.54377416753338e-05,0.00261929243421477,0.417962374546136,-0.746505333042024, -3.08630215203887e-05,-0.00634508766070307,0.157110012297973,-0.182163256815249, -3.15327649793029e-05,-0.00599745926084072,0.167216241223128,-0.206199454300863, -3.22025084378286e-05,-0.00564983086097781,0.177322470148283,-0.230235651786478, -3.28722518966873e-05,-0.00530220246111524,0.187428699073438,-0.254271849272092, -3.35419953556015e-05,-0.00495457406125288,0.197534927998593,-0.278308046757706, -3.42117388142937e-05,-0.00460694566139019,0.207641156923748,-0.302344244243321, -3.48814822726529e-05,-0.00425931726152706,0.217747385848903,-0.326380441728935, -3.55512257316781e-05,-0.00391168886166482,0.227853614774057,-0.35041663921455, -3.62209691905369e-05,-0.00356406046180191,0.237959843699213,-0.374452836700164, -3.68907126495621e-05,-0.00321643206194011,0.248066072624367,-0.398489034185779, -3.75604561083653e-05,-0.00286880366207765,0.258172301549522,-0.422525231671393, -3.82301995670575e-05,-0.00252117526221451,0.268278530474677,-0.446561429157007, -3.88999430260828e-05,-0.00217354686235205,0.278384759399832,-0.470597626642622, -3.95696864842199e-05,-0.00182591846248914,0.288490988324987,-0.494633824128236, -4.02394299429121e-05,-0.00147829006262623,0.298597217250142,-0.518670021613851, -4.09091734019373e-05,-0.00113066166276399,0.308703446175297,-0.542706219099465, -4.15789168606295e-05,-0.0007830332629013,0.318809675100452,-0.56674241658508, -4.22486603195438e-05,-0.000435404863039057,0.328915904025607,-0.590778614070694, -4.29184037781249e-05,-8.7776463176148e-05,0.339022132950762,-0.614814811556309, -4.35881472364841e-05,0.000259851936687205,0.349128361875917,-0.638851009041923, -4.42578906960645e-05,0.000607480336548782,0.359234590801072,-0.662887206527538, -4.49276341543126e-05,0.000955108736412136,0.369340819726227,-0.686923404013152, -4.55973776126717e-05,0.00130273713627505,0.379447048651382,-0.710959601498766, -4.6267121071808e-05,0.00165036553613751,0.389553277576537,-0.734995798984381, -4.69368645303891e-05,0.00199799393599998,0.399659506501691,-0.759031996469996, -2.34654365861009e-05,-0.00572873408547392,0.154121093793554,-0.184661237270783, -2.38714375595528e-05,-0.00543511228029048,0.163717912761929,-0.209019064040303, -2.42774385328937e-05,-0.00514149047510659,0.173314731730304,-0.233376890809823, -2.46834395060125e-05,-0.00484786866992226,0.182911550698678,-0.257734717579342, -2.50894404796309e-05,-0.00455424686473882,0.192508369667053,-0.282092544348862, -2.54954414533048e-05,-0.0042606250595556,0.202105188635427,-0.306450371118381, -2.59014424264237e-05,-0.00396700325437127,0.211702007603802,-0.330808197887901, -2.63074433996535e-05,-0.00367338144918739,0.221298826572177,-0.355166024657421, -2.67134443730499e-05,-0.0033797596440035,0.230895645540552,-0.37952385142694, -2.71194453466128e-05,-0.00308613783882028,0.240492464508926,-0.40388167819646, -2.75254463197872e-05,-0.00279251603363617,0.250089283477301,-0.428239504965979, -2.79314472934056e-05,-0.00249889422845251,0.259686102445676,-0.452597331735499, -2.8337448266913e-05,-0.00220527242326884,0.26928292141405,-0.476955158505019, -2.87434492396432e-05,-0.00191165061808407,0.278879740382425,-0.501312985274538, -2.91494502137057e-05,-0.0016180288129013,0.288476559350799,-0.525670812044058, -2.9555451186658e-05,-0.00132440700771697,0.298073378319174,-0.550028638813577, -2.99614521601654e-05,-0.0010307852025333,0.307670197287549,-0.574386465583097, -3.03674531336728e-05,-0.00073716339734986,0.317267016255923,-0.598744292352617, -3.07734541065141e-05,-0.000443541592165086,0.326863835224298,-0.623102119122136, -3.11794550801325e-05,-0.000149919786981645,0.336460654192673,-0.647459945891656, -3.1585456054084e-05,0.000143702018201353,0.346057473161048,-0.671817772661175, -3.19914570269253e-05,0.000437323823386127,0.355654292129422,-0.696175599430695, -3.23974580007658e-05,0.000730945628569568,0.365251111097797,-0.720533426200214, -3.2803458973385e-05,0.0010245674337539,0.374847930066172,-0.744891252969734, -3.32094599468924e-05,0.00131818923893734,0.384444749034546,-0.769249079739254, -1.75698002736757e-05,-0.00526730203784365,0.151715287091405,-0.186634700644663, -1.78097376261621e-05,-0.0050198819015348,0.160903931766359,-0.211246622121108, -1.8049674978371e-05,-0.00477246176522572,0.170092576441312,-0.235858543597553, -1.82896123306908e-05,-0.00452504162891643,0.179281221116265,-0.260470465073998, -1.85295496830107e-05,-0.00427762149260746,0.188469865791218,-0.285082386550442, -1.87694870354971e-05,-0.00403020135629872,0.197658510466171,-0.309694308026887, -1.90094243879835e-05,-0.00378278121998954,0.206847155141125,-0.334306229503332, -1.92493617401923e-05,-0.0035353610836808,0.216035799816078,-0.358918150979777, -1.94892990925677e-05,-0.00328794094737161,0.225224444491031,-0.383530072456222, -1.97292364448876e-05,-0.00304052081106199,0.234413089165985,-0.408141993932666, -1.99691737972074e-05,-0.00279310067475325,0.243601733840938,-0.432753915409111, -2.02091111494163e-05,-0.00254568053844384,0.252790378515891,-0.457365836885556, -2.04490485019582e-05,-0.0022982604021351,0.261979023190845,-0.481977758362001, -2.0688985853945e-05,-0.00205084026582614,0.271167667865797,-0.506589679838446, -2.09289232065979e-05,-0.00180342012951695,0.280356312540751,-0.531201601314891, -2.11688605592508e-05,-0.00155599999320799,0.289544957215705,-0.555813522791335, -2.14087979112376e-05,-0.00130857985689925,0.298733601890657,-0.58042544426778, -2.16487352634465e-05,-0.00106115972059007,0.307922246565611,-0.605037365744225, -2.18886726162104e-05,-0.000813739584281326,0.317110891240564,-0.62964928722067, -2.21286099686413e-05,-0.000566319447972141,0.326299535915517,-0.654261208697115, -2.23685473206281e-05,-0.000318899311662069,0.335488180590471,-0.678873130173559, -2.26084846736141e-05,-7.14791753546606e-05,0.344676825265423,-0.703485051650004, -2.28484220258229e-05,0.000175940960955412,0.353865469940378,-0.728096973126449, -2.30883593773656e-05,0.00042336109726504,0.363054114615331,-0.752708894602894, -2.33282967300186e-05,0.000670781233573337,0.372242759290283,-0.777320816079339, -1.29988369886869e-05,-0.00492726123474363,0.14983531434508,-0.188154861990617, -1.31384097043497e-05,-0.00471756382775512,0.15870609417851,-0.212962512942861, -1.32779824197904e-05,-0.0045078664207665,0.16757687401194,-0.237770163895106, -1.34175551355642e-05,-0.00429816901377789,0.176447653845371,-0.26257781484735, -1.35571278511715e-05,-0.00408847160678949,0.185318433678801,-0.287385465799594, -1.36967005668343e-05,-0.00387877419980098,0.194189213512232,-0.312193116751839, -1.38362732826081e-05,-0.00366907679281248,0.203059993345662,-0.337000767704083, -1.39758459979933e-05,-0.00345937938582375,0.211930773179092,-0.361808418656327, -1.41154187138781e-05,-0.00324968197883568,0.220801553012523,-0.386616069608572, -1.42549914290413e-05,-0.00303998457184651,0.229672332845953,-0.411423720560816, -1.43945641449816e-05,-0.00283028716485845,0.238543112679384,-0.436231371513061, -1.45341368604779e-05,-0.0026205897578695,0.247413892512814,-0.461039022465305, -1.46737095763072e-05,-0.00241089235088165,0.256284672346244,-0.485846673417549, -1.48132822920255e-05,-0.0022011949438927,0.265155452179675,-0.510654324369794, -1.49528550076328e-05,-0.0019914975369042,0.274026232013105,-0.535461975322038, -1.50924277234621e-05,-0.00178180012991591,0.282897011846536,-0.560269626274282, -1.52320004380702e-05,-0.00157210272292652,0.291767791679966,-0.585077277226527, -1.53715731545656e-05,-0.00136240531593845,0.300638571513397,-0.609884928178771, -1.55111458700619e-05,-0.00115270790894995,0.309509351346827,-0.634692579131016, -1.56507185856691e-05,-0.000943010501961439,0.318380131180257,-0.65950023008326, -1.57902913018315e-05,-0.00073331309497382,0.327250911013687,-0.684307881035504, -1.59298640171057e-05,-0.000523615687984869,0.336121690847118,-0.709115531987749, -1.60694367321579e-05,-0.000313918280995473,0.344992470680549,-0.733923182939993, -1.62090094482092e-05,-0.00010422087400741,0.353863250513979,-0.758730833892237, -1.63485821641496e-05,0.000105476532980653,0.362734030347409,-0.783538484844482, -9.52952976085442e-06,-0.00467930274466644,0.148399727317786,-0.18930319644232, -9.61019634404536e-06,-0.00449933484683085,0.15702840182311,-0.214258702029122, -9.69086292679222e-06,-0.0043193669489946,0.165657076328434,-0.239214207615924, -9.77152950942806e-06,-0.00413939905115812,0.174285750833759,-0.264169713202726, -9.85219609250798e-06,-0.0039594311533222,0.182914425339083,-0.289125218789528, -9.93286267508831e-06,-0.00377946325548595,0.191543099844407,-0.31408072437633, -1.00135292576686e-05,-0.00359949535764947,0.200171774349731,-0.339036229963132, -1.00941958409151e-05,-0.00341952745981389,0.208800448855055,-0.363991735549934, -1.0174862423773e-05,-0.00323955956197763,0.217429123360379,-0.388947241136736, -1.02555290061312e-05,-0.00305959166414094,0.226057797865703,-0.413902746723538, -1.03361955895442e-05,-0.00287962376630535,0.234686472371027,-0.43885825231034, -1.04168621722911e-05,-0.00269965586846954,0.243315146876351,-0.463813757897141, -1.04975287549269e-05,-0.00251968797063262,0.251943821381676,-0.488769263483943, -1.05781953376738e-05,-0.00233972007279681,0.260572495886999,-0.513724769070745, -1.06588619205317e-05,-0.00215975217496078,0.269201170392323,-0.538680274657547, -1.07395285028344e-05,-0.00197978427712342,0.277829844897648,-0.563635780244349, -1.08201950864695e-05,-0.00179981637928828,0.286458519402972,-0.588591285831151, -1.09008616695494e-05,-0.00161984848145291,0.295087193908296,-0.613546791417953, -1.09815282514081e-05,-0.00143988058361488,0.303715868413621,-0.638502297004755, -1.10621948348211e-05,-0.00125991268577952,0.312344542918944,-0.663457802591557, -1.11428614174569e-05,-0.00107994478794371,0.320973217424268,-0.688413308178359, -1.12235280003148e-05,-0.000899976890107457,0.329601891929592,-0.713368813765161, -1.13041945828396e-05,-0.000720008992271204,0.338230566434916,-0.738324319351963, -1.13848611661416e-05,-0.000540041094434951,0.346859240940241,-0.763279824938765, -1.14655277494435e-05,-0.000360073196599586,0.355487915445565,-0.788235330525567, -6.93841706522758e-06,-0.00449973119030489,0.1473225677922,-0.190157917874099, -6.98514141661555e-06,-0.00434258173950808,0.155769928491412,-0.215223473738289, -7.0318657683921e-06,-0.00418543228871182,0.164217289190624,-0.240289029602479, -7.07859011983558e-06,-0.00402828283791501,0.172664649889836,-0.265354585466668, -7.12531447155662e-06,-0.00387113338711842,0.181112010589048,-0.290420141330858, -7.17203882294459e-06,-0.00371398393632161,0.189559371288261,-0.315485697195048, -7.2187631744991e-06,-0.00355683448552502,0.198006731987473,-0.340551253059238, -7.26548752577605e-06,-0.00339968503472821,0.206454092686685,-0.365616808923428, -7.31221187760811e-06,-0.00324253558393162,0.214901453385898,-0.390682364787618, -7.35893622894057e-06,-0.00308538613313503,0.223348814085109,-0.415747920651808, -7.40566058066161e-06,-0.00292823668233888,0.231796174784321,-0.440813476515998, -7.45238493216061e-06,-0.00277108723154229,0.240243535483533,-0.465879032380188, -7.49910928377062e-06,-0.00261393778074548,0.248690896182746,-0.490944588244377, -7.54583363526962e-06,-0.00245678832994889,0.257138256881958,-0.516010144108567, -7.59255798665759e-06,-0.00229963887915186,0.265585617581171,-0.541075699972757, -7.63928233860067e-06,-0.00214248942835571,0.274032978280383,-0.566141255836947, -7.68600668998864e-06,-0.0019853399775589,0.282480338979595,-0.591206811701137, -7.73273104182071e-06,-0.00182819052676297,0.290927699678807,-0.616272367565327, -7.77945539343072e-06,-0.00167104107596616,0.299375060378019,-0.641337923429517, -7.82617974415256e-06,-0.00151389162516891,0.307822421077231,-0.666403479293707, -7.87290409598462e-06,-0.00135674217437254,0.316269781776443,-0.691469035157897, -7.91962844748362e-06,-0.00119959272357528,0.324717142475656,-0.716534591022087, -7.96635279931568e-06,-0.0010424432727798,0.333164503174867,-0.741600146886277, -8.01307715114774e-06,-0.000885293821983435,0.34161186387408,-0.766665702750467, -8.05980150186958e-06,-0.000728144371186179,0.350059224573292,-0.791731258614656, -5.02626280407537e-06,-0.0043702633250704,0.146524908328217,-0.190787121784692, -5.05359496510982e-06,-0.00423028864211605,0.154838188589072,-0.215933691254391, -5.08092712597774e-06,-0.00409031395916126,0.163151468849927,-0.24108026072409, -5.10825928679015e-06,-0.0039503392762068,0.171464749110782,-0.266226830193789, -5.13559144760256e-06,-0.00381036459325235,0.179778029371637,-0.291373399663488, -5.16292360847048e-06,-0.00367038991029767,0.188091309632492,-0.316519969133187, -5.19025576917187e-06,-0.00353041522734276,0.196404589893347,-0.341666538602886, -5.21758792992877e-06,-0.00339044054438853,0.204717870154201,-0.366813108072586, -5.24492009107425e-06,-0.00325046586143407,0.213031150415056,-0.391959677542285, -5.27225225188666e-06,-0.00311049117847939,0.221344430675911,-0.417106247011984, -5.29958441275458e-06,-0.00297051649552493,0.229657710936766,-0.442252816481683, -5.3269165736225e-06,-0.0028305418125707,0.237970991197621,-0.467399385951382, -5.3542487343794e-06,-0.00269056712961557,0.246284271458476,-0.492545955421081, -5.3815808951363e-06,-0.00255059244666134,0.254597551719331,-0.51769252489078, -5.40891305611524e-06,-0.00241061776370666,0.262910831980186,-0.542839094360479, -5.43624521653907e-06,-0.00227064308075198,0.271224112241041,-0.567985663830178, -5.46357737762904e-06,-0.00213066839779774,0.279537392501896,-0.593132233299878, -5.49090953838594e-06,-0.00199069371484306,0.287850672762751,-0.618278802769577, -5.5182416994759e-06,-0.00185071903188883,0.296163953023605,-0.643425372239276, -5.54557386045484e-06,-0.00171074434893415,0.304477233284461,-0.668571941708974, -5.57290602054561e-06,-0.00157076966597858,0.312790513545316,-0.693718511178674, -5.60023818163558e-06,-0.0014307949830239,0.321103793806171,-0.718865080648373, -5.62757034272554e-06,-0.00129082030007011,0.329417074067025,-0.744011650118072, -5.65490250359346e-06,-0.00115084561711587,0.33773035432788,-0.769158219587771, -5.68223466412832e-06,-0.0010108709341603,0.346043634588736,-0.79430478905747, -3.62755830696226e-06,-0.0042771878494583,0.145939943446299,-0.191246560306296, -3.64380671474818e-06,-0.00414995611860303,0.15415499479461,-0.216452285115811, -3.66005512225653e-06,-0.00402272438774809,0.162370046142922,-0.241658009925327, -3.67630353009796e-06,-0.00389549265689337,0.170585097491233,-0.266863734734842, -3.69255193793938e-06,-0.00376826092603855,0.178800148839545,-0.292069459544358, -3.70880034550325e-06,-0.00364102919518361,0.187015200187856,-0.317275184353873, -3.72504875323365e-06,-0.00351379746432889,0.195230251536167,-0.342480909163389, -3.74129716124161e-06,-0.00338656573347418,0.203445302884479,-0.367686633972904, -3.75754556847241e-06,-0.0032593340026188,0.21166035423279,-0.39289235878242, -3.77379397620281e-06,-0.00313210227176408,0.219875405581101,-0.418098083591935, -3.79004238360015e-06,-0.00300487054090848,0.228090456929413,-0.443303808401451, -3.80629079166361e-06,-0.00287763881005398,0.236305508277725,-0.468509533210966, -3.82253919950504e-06,-0.00275040707919927,0.244520559626036,-0.493715258020482, -3.83878760701339e-06,-0.00262317534834411,0.252735610974347,-0.518920982829997, -3.85503601518788e-06,-0.00249594361748984,0.260950662322659,-0.544126707639513, -3.87128442269624e-06,-0.00236871188663446,0.26916571367097,-0.569332432449028, -3.88753283009358e-06,-0.00224148015577974,0.277380765019281,-0.594538157258544, -3.90378123782398e-06,-0.0021142484249248,0.285595816367593,-0.619743882068059, -3.92002964588745e-06,-0.00198701669406987,0.293810867715905,-0.644949606877575, -3.93627805361785e-06,-0.00185978496321493,0.302025919064216,-0.67015533168709, -3.95252646123723e-06,-0.00173255323236043,0.310240970412527,-0.695361056496606, -3.96877486852354e-06,-0.00160532150150461,0.318456021760839,-0.720566781306121, -3.98502327647599e-06,-0.00147808977065012,0.32667107310915,-0.745772506115637, -4.00127168398434e-06,-0.00135085803979562,0.334886124457461,-0.770978230925152, -4.01752009193679e-06,-0.00122362630894068,0.343101175805773,-0.796183955734667, -2.61100534154624e-06,-0.00421040060462718,0.145514005514239,-0.191580049986481, -2.62086634805758e-06,-0.00409252543945515,0.153657584412099,-0.216828713501458, -2.63072735451342e-06,-0.00397465027428312,0.161801163309958,-0.242077377016434, -2.64058836130232e-06,-0.00385677510911131,0.169944742207818,-0.267326040531411, -2.65044936753611e-06,-0.00373889994393917,0.178088321105677,-0.292574704046388, -2.66031037399195e-06,-0.00362102477876713,0.186231900003537,-0.317823367561364, -2.67017138078085e-06,-0.00350314961359532,0.194375478901397,-0.343072031076341, -2.6800323872922e-06,-0.00338527444842329,0.202519057799256,-0.368320694591317, -2.68989339347048e-06,-0.00326739928325082,0.210662636697116,-0.393569358106294, -2.69975440014836e-06,-0.00314952411807901,0.218806215594975,-0.418818021621271, -2.70961540638215e-06,-0.00303164895290631,0.226949794492835,-0.444066685136247, -2.71947641294901e-06,-0.00291377378773494,0.235093373390695,-0.469315348651224, -2.72933741940484e-06,-0.00279589862256291,0.243236952288554,-0.4945640121662, -2.73919842586068e-06,-0.00267802345739065,0.251380531186414,-0.519812675681177, -2.74905943253856e-06,-0.00256014829221884,0.259524110084273,-0.545061339196154, -2.75892043855031e-06,-0.00244227312704615,0.267667688982133,-0.57031000271113, -2.76878144533921e-06,-0.00232439796187478,0.275811267879992,-0.595558666226107, -2.77864245190607e-06,-0.00220652279670253,0.283954846777852,-0.620807329741083, -2.78850345847292e-06,-0.00208864763153072,0.292098425675712,-0.64605599325606, -2.79836446503978e-06,-0.00197077246635891,0.300242004573571,-0.671304656771037, -2.80822547149562e-06,-0.00185289730118665,0.308385583471431,-0.696553320286013, -2.81808647784043e-06,-0.00173502213601395,0.316529162369291,-0.72180198380099, -2.82794748451831e-06,-0.00161714697084303,0.32467274126715,-0.747050647315967, -2.8378084907521e-06,-0.00149927180567033,0.33281632016501,-0.772299310830943, -2.84766949720794e-06,-0.00138139664049808,0.34095989906287,-0.79754797434592, -1.87564079440206e-06,-0.00416253595712757,0.145205466442737,-0.191821075165852, -1.88176578169719e-06,-0.00405147914047299,0.153297299696321,-0.217100772052476, -1.88789076921436e-06,-0.00394042232381853,0.161389132949905,-0.2423804689391, -1.894015756565e-06,-0.00382936550716395,0.169480966203489,-0.267660165825724, -1.90014074441525e-06,-0.00371830869050993,0.177572799457073,-0.292939862712348, -1.90626573176589e-06,-0.00360725187385547,0.185664632710657,-0.318219559598971, -1.91239071928306e-06,-0.00349619505720078,0.193756465964242,-0.343499256485595, -1.91851570668922e-06,-0.00338513824054631,0.201848299217826,-0.368778953372219, -1.92464069398435e-06,-0.00327408142389163,0.20994013247141,-0.394058650258843, -1.93076568111294e-06,-0.00316302460723672,0.218031965724994,-0.419338347145467, -1.93689066885216e-06,-0.00305196779058226,0.226123798978578,-0.444618044032091, -1.94301565670241e-06,-0.00294091097392868,0.234215632232162,-0.469897740918715, -1.94914064421958e-06,-0.00282985415727421,0.242307465485746,-0.495177437805338, -1.95526563140369e-06,-0.00271879734061931,0.25039929873933,-0.520457134691962, -1.96139061903189e-06,-0.00260774052396484,0.258491131992915,-0.545736831578586, -1.967515606216e-06,-0.00249668370730993,0.266582965246499,-0.57101652846521, -1.97364059362215e-06,-0.00238562689065569,0.274674798500083,-0.596296225351834, -1.97976558136137e-06,-0.00227457007400167,0.282766631753667,-0.621575922238458, -1.98589056954468e-06,-0.00216351325734809,0.29085846500725,-0.646855619125081, -1.99201555639572e-06,-0.0020524564406923,0.298950298260835,-0.672135316011705, -1.99814054357983e-06,-0.00194139962403783,0.307042131514419,-0.697415012898329, -2.00426553131905e-06,-0.00183034280738381,0.315133964768003,-0.722694709784953, -2.01039051850316e-06,-0.0017192859907289,0.323225798021587,-0.747974406671577, -2.01651550657544e-06,-0.00160822917407533,0.331317631275171,-0.773254103558201, -2.02264049375955e-06,-0.00149717235742042,0.339409464528755,-0.798533800444825, -1.3454801545687e-06,-0.00412826093108687,0.144982806035451,-0.191994729850861, -1.34937590040574e-06,-0.00402214576337145,0.153037310654293,-0.217296785772305, -1.35327164613175e-06,-0.00391603059565615,0.161091815273134,-0.24259884169375, -1.35716739207981e-06,-0.00380991542794085,0.169146319891976,-0.267900897615194, -1.3610631381944e-06,-0.00370380026022588,0.177200824510817,-0.293202953536638, -1.36495888403143e-06,-0.00359768509251079,0.185255329129659,-0.318505009458083, -1.36885462981295e-06,-0.00349156992479527,0.193309833748501,-0.343807065379527, -1.37275037603857e-06,-0.00338545475708041,0.201364338367342,-0.369109121300971, -1.37664612170907e-06,-0.00327933958936466,0.209418842986184,-0.394411177222416, -1.38054186749059e-06,-0.00317322442164958,0.217473347605025,-0.41971323314386, -1.38443761388274e-06,-0.00306710925393472,0.225527852223867,-0.445015289065304, -1.38833335949773e-06,-0.00296099408621919,0.233582356842708,-0.470317344986749, -1.39222910533476e-06,-0.00285487891850411,0.24163686146155,-0.495619400908193, -1.3961248511718e-06,-0.00274876375078881,0.249691366080391,-0.520921456829637, -1.40002059689781e-06,-0.00264264858307306,0.257745870699233,-0.546223512751082, -1.40391634295689e-06,-0.00253653341535798,0.265800375318075,-0.571525568672526, -1.40781208912699e-06,-0.00243041824764334,0.273854879936916,-0.59682762459397, -1.411707834853e-06,-0.00232430307992759,0.281909384555758,-0.622129680515415, -1.41560358113413e-06,-0.00221818791221295,0.289963889174599,-0.647431736436859, -1.4194993266381e-06,-0.00211207274449698,0.298018393793441,-0.672733792358303, -1.42339507303024e-06,-0.00200595757678235,0.306072898412283,-0.698035848279748, -1.42729081886728e-06,-0.00189984240906771,0.314127403031124,-0.723337904201192, -1.43118656459329e-06,-0.00179372724135174,0.322181907649966,-0.748639960122636, -1.43508230998624e-06,-0.00168761207363577,0.330236412268808,-0.773942016044081, -1.43897805582327e-06,-0.00158149690592069,0.338290916887649,-0.799244071965525, -0.000157740819841989,-0.0254151520084142,0.209918431044634,-0.14078812449481, -0.000169289483192614,-0.0249743980106578,0.227861594053555,-0.158434063167546, -0.000180838146542961,-0.024533644012901,0.245804757062477,-0.176080001840282, -0.000192386809893585,-0.0240928900151447,0.263747920071397,-0.193725940513019, -0.00020393547324421,-0.0236521360173881,0.281691083080319,-0.211371879185755, -0.000215484136594613,-0.0232113820196314,0.29963424608924,-0.229017817858491, -0.000227032799945515,-0.0227706280218753,0.317577409098161,-0.246663756531227, -0.000238581463295862,-0.0223298740241187,0.335520572107082,-0.264309695203964, -0.000250130126646653,-0.0218891200263625,0.353463735116003,-0.2819556338767, -0.000261678789996944,-0.0214483660286056,0.371406898124924,-0.299601572549436, -0.00027322745334768,-0.0210076120308493,0.389350061133845,-0.317247511222172, -0.000284776116698082,-0.0205668580330929,0.407293224142766,-0.334893449894909, -0.000296324780048485,-0.0201261040353362,0.425236387151687,-0.352539388567645, -0.000307873443399664,-0.0196853500375802,0.443179550160609,-0.370185327240381, -0.000319422106749956,-0.0192445960398235,0.46112271316953,-0.387831265913117, -0.000330970770100247,-0.0188038420420666,0.479065876178451,-0.405477204585854, -0.00034251943345065,-0.0183630880443097,0.497009039187372,-0.42312314325859, -0.000354068096801941,-0.0179223340465546,0.514952202196293,-0.440769081931326, -0.000365616760151788,-0.0174815800487969,0.532895365205215,-0.458415020604062, -0.000377165423502857,-0.0170408260510411,0.550838528214135,-0.476060959276798, -0.000388714086853481,-0.0166000720532851,0.568781691223056,-0.493706897949535, -0.00040026275020455,-0.0161593180555291,0.586724854231977,-0.511352836622271, -0.000411811413554508,-0.0157185640577717,0.604668017240898,-0.528998775295007, -0.000423360076905133,-0.0152778100600148,0.62261118024982,-0.546644713967744, -0.000434908740255535,-0.0148370560622584,0.640554343258741,-0.56429065264048, -0.000155619073621271,-0.0249192899988971,0.209225139844652,-0.141760038219477, -0.000166898779435931,-0.0244643115463761,0.22703863488966,-0.159524034970541, -0.000178178485250369,-0.0240093330938547,0.244852129934667,-0.177288031721605, -0.000189458191065361,-0.0235543546413336,0.262665624979675,-0.195052028472669, -0.000200737896880188,-0.0230993761888126,0.280479120024683,-0.212816025223733, -0.000212017602694792,-0.0226443977362916,0.29829261506969,-0.230580021974797, -0.000223297308509895,-0.0221894192837706,0.316106110114698,-0.248344018725861, -0.000234577014323945,-0.0217344408312488,0.333919605159706,-0.266108015476925, -0.000245856720138937,-0.021279462378728,0.351733100204713,-0.283872012227989, -0.000257136425953486,-0.0208244839262066,0.369546595249721,-0.301636008979053, -0.000268416131768423,-0.0203695054736857,0.387360090294729,-0.319400005730116, -0.000279695837582916,-0.0199145270211645,0.405173585339736,-0.337164002481181, -0.000290975543398075,-0.0194595485686433,0.422987080384744,-0.354927999232245, -0.000302255249212569,-0.0190045701161221,0.440800575429752,-0.372691995983309, -0.000313534955027284,-0.0185495916636009,0.458614070474759,-0.390455992734372, -0.000324814660841888,-0.0180946132110797,0.476427565519767,-0.408219989485436, -0.000336094366656936,-0.0176396347585588,0.494241060564775,-0.425983986236501, -0.000347374072471429,-0.0171846563060376,0.512054555609782,-0.443747982987564, -0.000358653778286033,-0.0167296778535164,0.52986805065479,-0.461511979738628, -0.000369933484101304,-0.0162746994009959,0.547681545699797,-0.479275976489692, -0.000381213189915464,-0.0158197209484738,0.565495040744805,-0.497039973240756, -0.000392492895730401,-0.0153647424959531,0.583308535789813,-0.51480396999182, -0.000403772601545227,-0.0149097640434319,0.601122030834821,-0.532567966742884, -0.000415052307359276,-0.0144547855909103,0.618935525879829,-0.550331963493948, -0.000426332013173991,-0.0139998071383887,0.636749020924837,-0.568095960245012, -0.000152738951035625,-0.0242592096479013,0.208277499919437,-0.14306830791397, -0.000163657938009709,-0.023786080281894,0.225914700769516,-0.160991219805489, -0.000174576924983849,-0.0233129509158867,0.243551901619595,-0.178914131697008, -0.000185495911958045,-0.0228398215498797,0.261189102469674,-0.196837043588528, -0.00019641489893224,-0.0223666921838725,0.278826303319754,-0.214759955480047, -0.000207333885906491,-0.0218935628178656,0.296463504169833,-0.232682867371567, -0.000218252872880409,-0.0214204334518582,0.314100705019912,-0.250605779263086, -0.000229171859855104,-0.0209473040858514,0.331737905869991,-0.268528691154606, -0.000240090846829022,-0.0204741747198443,0.34937510672007,-0.286451603046125, -0.00025100983380355,-0.0200010453538373,0.367012307570149,-0.304374514937644, -0.000261928820777357,-0.0195279159878297,0.384649508420229,-0.322297426829163, -0.000272847807751608,-0.0190547866218225,0.402286709270308,-0.340220338720683, -0.000283766794725526,-0.0185816572558153,0.419923910120387,-0.358143250612203, -0.000294685781699999,-0.0181085278898083,0.437561110970466,-0.376066162503722, -0.000305604768674361,-0.0176353985238016,0.455198311820545,-0.393989074395241, -0.00031652375564839,-0.0171622691577942,0.472835512670625,-0.411911986286761, -0.000327442742622419,-0.0166891397917868,0.490472713520704,-0.429834898178281, -0.000338361729596892,-0.0162160104257802,0.508109914370783,-0.4477578100698, -0.000349280716570921,-0.0157428810597726,0.525747115220862,-0.465680721961319, -0.000360199703545505,-0.0152697516937661,0.543384316070941,-0.483603633852838, -0.000371118690519534,-0.0147966223277587,0.56102151692102,-0.501526545744358, -0.000382037677493785,-0.0143234929617519,0.578658717771099,-0.519449457635877, -0.000392956664468702,-0.0138503635957452,0.596295918621178,-0.537372369527396, -0.000403875651442287,-0.0133772342297376,0.613933119471258,-0.555295281418916, -0.000414794638415761,-0.0129041048637295,0.631570320321337,-0.573218193310436, -0.000148874044137715,-0.0233963192889641,0.206994283818034,-0.144804588498605, -0.00015931686130527,-0.0229008707888062,0.224394411085606,-0.162938405889304, -0.00016975967847277,-0.0224054222886481,0.241794538353179,-0.181072223280002, -0.000180202495640269,-0.0219099737884899,0.259194665620751,-0.1992060406707, -0.000190645312807269,-0.0214145252883313,0.276594792888324,-0.217339858061399, -0.000201088129974991,-0.0209190767881733,0.293994920155897,-0.235473675452097, -0.000211530947142269,-0.0204236282880148,0.311395047423469,-0.253607492842795, -0.00022197376430988,-0.019928179787857,0.328795174691042,-0.271741310233494, -0.000232416581477046,-0.0194327312876985,0.346195301958614,-0.289875127624192, -0.000242859398644546,-0.0189372827875405,0.363595429226186,-0.30800894501489, -0.000253302215811657,-0.018441834287382,0.380995556493759,-0.326142762405588, -0.000263745032979545,-0.0179463857872242,0.398395683761331,-0.344276579796287, -0.000274187850147212,-0.0174509372870661,0.415795811028904,-0.362410397186985, -0.000284630667314323,-0.0169554887869077,0.433195938296477,-0.380544214577683, -0.000295073484481656,-0.0164600402867496,0.450596065564049,-0.398678031968382, -0.0003055163016491,-0.0159645917865912,0.467996192831621,-0.41681184935908, -0.000315959118816211,-0.0154691432864327,0.485396320099194,-0.434945666749778, -0.000326401935983989,-0.0149736947862746,0.502796447366767,-0.453079484140476, -0.0003368447531511,-0.0144782462861164,0.520196574634339,-0.471213301531175, -0.000347287570318655,-0.0139827977859581,0.537596701901911,-0.489347118921873, -0.000357730387485655,-0.0134873492857999,0.554996829169484,-0.507480936312572, -0.000368173204653433,-0.0129919007856421,0.572396956437056,-0.525614753703269, -0.000378616021820877,-0.0124964522854834,0.589797083704629,-0.543748571093968, -0.000389058838988765,-0.012001003785326,0.607197210972201,-0.561882388484667, -0.000399501656155654,-0.0115055552851673,0.624597338239774,-0.580016205875365, -0.000143767577879483,-0.0222949748027097,0.205279176829357,-0.147066123530159, -0.000153595085932656,-0.0217734926577877,0.222365203957992,-0.165474648925405, -0.000163422593985829,-0.0212520105128657,0.239451231086628,-0.183883174320652, -0.000173250102039002,-0.0207305283679439,0.256537258215264,-0.202291699715898, -0.000183077610092119,-0.0202090462230217,0.2736232853439,-0.220700225111144, -0.000192905118145292,-0.0196875640781,0.290709312472536,-0.23910875050639, -0.000202732626198465,-0.019166081933178,0.307795339601172,-0.257517275901636, -0.000212560134251527,-0.0186445997882558,0.324881366729808,-0.275925801296882, -0.000222387642304978,-0.0181231176433343,0.341967393858443,-0.294334326692128, -0.000232215150358095,-0.0176016354984121,0.359053420987079,-0.312742852087375, -0.000242042658411212,-0.0170801533534903,0.376139448115715,-0.331151377482621, -0.000251870166463886,-0.0165586712085677,0.393225475244351,-0.349559902877867, -0.000261697674517114,-0.0160371890636457,0.410311502372987,-0.367968428273113, -0.00027152518257012,-0.0155157069187235,0.427397529501623,-0.386376953668359, -0.000281352690623349,-0.0149942247738015,0.444483556630259,-0.404785479063605, -0.000291180198676577,-0.0144727426288798,0.461569583758895,-0.423194004458851, -0.000301007706729917,-0.0139512604839578,0.478655610887531,-0.441602529854098, -0.000310835214782812,-0.0134297783390358,0.495741638016166,-0.460011055249344, -0.00032066272283604,-0.012908296194114,0.512827665144802,-0.47841958064459, -0.000330490230889713,-0.0123868140491923,0.529913692273438,-0.496828106039836, -0.000340317738942386,-0.0118653319042701,0.546999719402074,-0.515236631435082, -0.000350145246994948,-0.011343849759347,0.56408574653071,-0.533645156830328, -0.000359972755048621,-0.0108223676144257,0.581171773659346,-0.552053682225574, -0.000369800263101849,-0.0103008854695039,0.598257800787982,-0.570462207620821, -0.000379627771154745,-0.00977940332458127,0.615343827916618,-0.588870733016067, -0.000137158942421445,-0.0209320675868468,0.203027578081791,-0.149940972376525, -0.000146213478226576,-0.0203824734448916,0.219705654351263,-0.168698704827573, -0.000155268014031817,-0.0198328793029362,0.236383730620736,-0.187456437278621, -0.000164322549837226,-0.0192832851609813,0.253061806890209,-0.206214169729669, -0.000173377085642634,-0.0187336910190264,0.269739883159681,-0.224971902180717, -0.000182431621448154,-0.0181840968770717,0.286417959429154,-0.243729634631765, -0.000191486157253395,-0.0176345027351161,0.303096035698627,-0.262487367082813, -0.000200540693058582,-0.017084908593161,0.319774111968099,-0.281245099533861, -0.000209595228863824,-0.0165353144512057,0.336452188237572,-0.300002831984909, -0.000218649764669121,-0.0159857203092506,0.353130264507045,-0.318760564435957, -0.000227704300474696,-0.0154361261672955,0.369808340776517,-0.337518296887005, -0.000236758836279938,-0.0148865320253406,0.38648641704599,-0.356276029338054, -0.000245813372085513,-0.014336937883386,0.403164493315462,-0.375033761789102, -0.000254867907890532,-0.0137873437414302,0.419842569584935,-0.39379149424015, -0.000263922443695663,-0.0132377495994751,0.436520645854408,-0.412549226691198, -0.000272976979501349,-0.0126881554575204,0.45319872212388,-0.431306959142246, -0.000282031515306702,-0.0121385613155651,0.469876798393353,-0.450064691593294, -0.000291086051111722,-0.0115889671736098,0.486554874662826,-0.468822424044342, -0.000300140586917186,-0.0110393730316551,0.503232950932298,-0.48758015649539, -0.000309195122722428,-0.0104897788896996,0.519911027201771,-0.506337888946438, -0.000318249658527781,-0.0099401847477445,0.536589103471244,-0.525095621397486, -0.000327304194333355,-0.00939059060578984,0.553267179740716,-0.543853353848534, -0.000336358730138264,-0.00884099646383385,0.569945256010189,-0.562611086299582, -0.000345413265943395,-0.00829140232187919,0.586623332279661,-0.58136881875063, -0.000354467801749303,-0.00774180817992454,0.603301408549134,-0.600126551201678, -0.000128834306842018,-0.019309768269802,0.200142372870624,-0.15348446737709, -0.000136952745200314,-0.0187332368399949,0.216304263304367,-0.172672627138416, -0.000145071183558554,-0.0181567054101879,0.23246615373811,-0.191860786899741, -0.000153189621917016,-0.0175801739803813,0.248628044171853,-0.211048946661067, -0.000161308060275256,-0.0170036425505741,0.264789934605596,-0.230237106422392, -0.000169426498633607,-0.0164271111207674,0.280951825039339,-0.249425266183718, -0.000177544936992013,-0.0158505796909605,0.297113715473082,-0.268613425945044, -0.000185663375350253,-0.0152740482611535,0.313275605906825,-0.287801585706369, -0.000193781813708493,-0.0146975168313463,0.329437496340568,-0.306989745467695, -0.000201900252066567,-0.0141209854015389,0.345599386774311,-0.32617790522902, -0.000210018690425029,-0.0135444539717324,0.361761277208054,-0.345366064990346, -0.000218137128783269,-0.0129679225419252,0.377923167641797,-0.364554224751672, -0.000226255567141842,-0.0123913911121187,0.39408505807554,-0.383742384512997, -0.000234374005499749,-0.0118148596823111,0.410246948509283,-0.402930544274323, -0.000242492443858211,-0.0112383282525046,0.426408838943026,-0.422118704035649, -0.000250610882216562,-0.0106617968226979,0.442570729376769,-0.441306863796974, -0.000258729320574802,-0.0100852653928905,0.458732619810512,-0.4604950235583, -0.000266847758933042,-0.00950873396308349,0.474894510244255,-0.479683183319626, -0.000274966197290727,-0.00893220253327587,0.491056400677998,-0.498871343080951, -0.0002830846356493,-0.00835567110346913,0.507218291111741,-0.518059502842277, -0.00029120307400754,-0.00777913967366217,0.523380181545484,-0.537247662603602, -0.000299321512365558,-0.00720260824385477,0.539542071979227,-0.556435822364928, -0.000307439950724908,-0.00662607681404914,0.55570396241297,-0.575623982126254, -0.000315558389082371,-0.00604954538424129,0.571865852846714,-0.59481214188758, -0.000323676827441055,-0.00547301395443478,0.588027743280456,-0.614000301648905, -0.000118701970086121,-0.0174677468674611,0.196560823501357,-0.157689764045413, -0.000125738109483686,-0.0168703668319528,0.212090992493522,-0.177388739973708, -0.00013277424888114,-0.0162729867964442,0.227621161485688,-0.197087715902004, -0.000139810388278538,-0.0156756067609354,0.243151330477853,-0.216786691830299, -0.000146846527676103,-0.0150782267254269,0.258681499470019,-0.236485667758595, -0.000153882667073335,-0.014480846689918,0.274211668462184,-0.25618464368689, -0.000160918806470622,-0.0138834666544092,0.28974183745435,-0.275883619615186, -0.000167954945868132,-0.0132860866189006,0.305272006446516,-0.295582595543481, -0.000174991085265641,-0.0126887065833921,0.320802175438681,-0.315281571471777, -0.000182027224663539,-0.0120913265478839,0.336332344430846,-0.334980547400072, -0.000189063364060771,-0.0114939465123749,0.351862513423012,-0.354679523328368, -0.000196099503458336,-0.0108965664768665,0.367392682415178,-0.374378499256664, -0.00020313564285579,-0.010299186441358,0.382922851407343,-0.394077475184959, -0.000210171782252688,-0.0097018064058485,0.398453020399509,-0.413776451113255, -0.000217207921650586,-0.00910442637034037,0.413983189391674,-0.43347542704155, -0.00022424406104804,-0.00850704633483179,0.42951335838384,-0.453174402969846, -0.000231280200445494,-0.00790966629932321,0.445043527376005,-0.472873378898142, -0.000238316339842726,-0.00731228626381419,0.460573696368171,-0.492572354826437, -0.000245352479240513,-0.00671490622830628,0.476103865360336,-0.512271330754732, -0.000252388618637633,-0.00611752619279748,0.491634034352501,-0.531970306683028, -0.000259424758034865,-0.00552014615728824,0.507164203344667,-0.551669282611323, -0.000266460897432985,-0.00492276612177989,0.522694372336833,-0.571368258539619, -0.000273497036830106,-0.00432538608627153,0.538224541328998,-0.591067234467914, -0.000280533176227338,-0.00372800605076229,0.553754710321164,-0.61076621039621, -0.00028756931562457,-0.00313062601525305,0.56928487931333,-0.630465186324506, -0.000106877472319467,-0.0154880544387747,0.1922895394295,-0.162461810789138, -0.000112731347651218,-0.01488173791601,0.207077699558768,-0.182740445851733, -0.000118585222982803,-0.0142754213932447,0.221865859688037,-0.203019080914328, -0.000124439098314388,-0.0136691048704799,0.236654019817305,-0.223297715976922, -0.000130292973646029,-0.0130627883477149,0.251442179946573,-0.243576351039517, -0.00013614684897767,-0.01245647182495,0.266230340075841,-0.263854986102112, -0.000142000724309532,-0.0118501553021853,0.28101850020511,-0.284133621164707, -0.000147854599641173,-0.0112438387794203,0.295806660334378,-0.304412256227301, -0.000153708474972702,-0.010637522256655,0.310594820463647,-0.324690891289896, -0.000159562350304565,-0.0100312057338903,0.325382980592915,-0.344969526352491, -0.000165416225635817,-0.00942488921112505,0.340171140722183,-0.365248161415085, -0.000171270100967957,-0.00881857268836073,0.354959300851451,-0.38552679647768, -0.000177123976299431,-0.00821225616559507,0.36974746098072,-0.405805431540275, -0.000182977851631128,-0.00760593964283074,0.384535621109988,-0.42608406660287, -0.000188831726962602,-0.00699962312006552,0.399323781239256,-0.446362701665464, -0.00019468560229452,-0.00639330659730097,0.414111941368524,-0.466641336728059, -0.000200539477626216,-0.00578699007453576,0.428900101497793,-0.486919971790654, -0.000206393352957801,-0.00518067355177099,0.443688261627061,-0.507198606853248, -0.000212247228289497,-0.00457435702900599,0.458476421756329,-0.527477241915843, -0.00021810110362086,-0.00396804050624056,0.473264581885598,-0.547755876978438, -0.000223954978953,-0.00336172398347623,0.488052742014866,-0.568034512041033, -0.000229808854284697,-0.00275540746071146,0.502840902144134,-0.588313147103627, -0.000235662729615949,-0.00214909093794535,0.517629062273403,-0.608591782166222, -0.000241516604947534,-0.00154277441518103,0.53241722240267,-0.628870417228817, -0.000247370480279341,-0.000936457892416254,0.547205382531939,-0.649149052291412, -9.37423703483709e-05,-0.0134858253268317,0.187435391011737,-0.167609344359392, -9.83883413782083e-05,-0.0128875503826037,0.201393181293224,-0.188513248832232, -0.000103034312408656,-0.0122892754383762,0.215350971574711,-0.209417153305071, -0.000107680283438494,-0.0116910004941481,0.229308761856198,-0.23032105777791, -0.000112326254468664,-0.0110927255499205,0.243266552137685,-0.25122496225075, -0.000116972225498502,-0.0104944506056923,0.257224342419172,-0.272128866723589, -0.000121618196528783,-0.00989617566146483,0.271182132700659,-0.293032771196428, -0.000126264167558898,-0.00929790071723713,0.285139922982146,-0.313936675669268, -0.000130910138588625,-0.00869962577300898,0.299097713263633,-0.334840580142107, -0.000135556109619128,-0.0081013508287815,0.31305550354512,-0.355744484614946, -0.000140202080649243,-0.00750307588455401,0.327013293826606,-0.376648389087786, -0.000144848051679247,-0.00690480094032608,0.340971084108094,-0.397552293560625, -0.000149494022709584,-0.0063065259960986,0.35492887438958,-0.418456198033465, -0.000154139993739588,-0.00570825105187067,0.368886664671067,-0.439360102506304, -0.000158785964769814,-0.00510997610764297,0.382844454952554,-0.460264006979143, -0.000163431935799707,-0.00451170116341504,0.396802245234041,-0.481167911451983, -0.0001680779068296,-0.00391342621918711,0.410760035515528,-0.502071815924822, -0.000172723877859937,-0.0033151512749594,0.424717825797015,-0.522975720397661, -0.000177369848889941,-0.00271687633073192,0.438675616078502,-0.543879624870501, -0.000182015819919501,-0.00211860138650355,0.452633406359989,-0.56478352934334, -0.000186661790949949,-0.00152032644227607,0.466591196641476,-0.58568743381618, -0.000191307761980064,-0.000922051498048138,0.480548986922963,-0.606591338289019, -0.000195953733010179,-0.000323776553820654,0.49450677720445,-0.627495242761858, -0.000200599704040072,0.000274498390407718,0.508464567485937,-0.648399147234698, -0.000205245675070409,0.000872773334635202,0.522422357767424,-0.669303051707537, -7.99310319722357e-05,-0.0115850845897552,0.182212969751726,-0.172867027973653, -8.3432421549845e-05,-0.0110141164450552,0.195290504735669,-0.194409581750645, -8.69338111273432e-05,-0.0104431483003549,0.208368039719613,-0.215952135527636, -9.04352007047859e-05,-0.0098721801556545,0.221445574703557,-0.237494689304628, -9.39365902821176e-05,-0.00930121201095435,0.234523109687501,-0.259037243081619, -9.74379798595604e-05,-0.00873024386625398,0.247600644671445,-0.280579796858611, -0.00010093936943717,-0.00815927572155406,0.260678179655388,-0.302122350635602, -0.000104440759014612,-0.00758830757685369,0.273755714639332,-0.323664904412594, -0.000107942148591667,-0.00701733943215288,0.286833249623276,-0.345207458189585, -0.000111443538169387,-0.00644637128745318,0.29991078460722,-0.366750011966577, -0.000114944927746774,-0.00587540314275281,0.312988319591164,-0.388292565743568, -0.000118446317324494,-0.00530443499805311,0.326065854575107,-0.40983511952056, -0.000121947706901882,-0.00473346685335274,0.339143389559051,-0.431377673297551, -0.00012544909647938,-0.00416249870865304,0.352220924542995,-0.452920227074543, -0.000128950486056767,-0.00359153056395245,0.365298459526939,-0.474462780851534, -0.000132451875634154,-0.00302056241925186,0.378375994510883,-0.496005334628525, -0.000135953265211652,-0.00244959427455149,0.391453529494827,-0.517547888405517, -0.000139454654788707,-0.00187862612985068,0.404531064478771,-0.539090442182508, -0.000142956044366316,-0.00130765798515142,0.417608599462714,-0.5606329959595, -0.000146457433944147,-0.000736689840451277,0.430686134446658,-0.582175549736491, -0.000149958823521423,-0.000165721695751131,0.443763669430601,-0.603718103513483, -0.000153460213099033,0.000405246448949015,0.456841204414545,-0.625260657290474, -0.000156961602676309,0.000976214593649161,0.469918739398489,-0.646803211067466, -0.000160462992253363,0.00154718273834975,0.482996274382433,-0.668345764844457, -0.000163964381831305,0.0021181508830499,0.496073809366377,-0.689888318621449, -6.62232921073147e-05,-0.00988886630486607,0.17691406364501,-0.177946250147048, -6.87240975152381e-05,-0.00936274368892565,0.18911039895448,-0.200105775568715, -7.1224902923217e-05,-0.00883662107298555,0.20130673426395,-0.222265300990382, -7.37257083307519e-05,-0.00831049845704479,0.213503069573419,-0.244424826412048, -7.62265137384532e-05,-0.00778437584110425,0.225699404882889,-0.266584351833715, -7.87273191462101e-05,-0.00725825322516349,0.237895740192359,-0.288743877255381, -8.12281245538005e-05,-0.00673213060922295,0.250092075501828,-0.310903402677048, -8.37289299616684e-05,-0.00620600799328241,0.262288410811298,-0.333062928098715, -8.62297353697028e-05,-0.00567988537734254,0.274484746120767,-0.355222453520381, -8.87305407771821e-05,-0.00515376276140134,0.286681081430238,-0.377381978942048, -9.12313461846059e-05,-0.00462764014546058,0.298877416739707,-0.399541504363715, -9.37321515922518e-05,-0.00410151752951982,0.311073752049177,-0.421701029785381, -9.62329570006748e-05,-0.00357539491358017,0.323270087358646,-0.443860555207048, -9.87337624080986e-05,-0.00304927229763896,0.335466422668116,-0.466020080628714, -0.000101234567815855,-0.00252314968169842,0.347662757977586,-0.488179606050381, -0.000103735373223501,-0.00199702706575811,0.359859093287056,-0.510339131472048, -0.000106236178631369,-0.00147090444981779,0.372055428596525,-0.532498656893715, -0.000108736984039126,-0.000944781833877251,0.384251763905995,-0.554658182315381, -0.000111237789446883,-0.00041865921793649,0.396448099215465,-0.576817707737048, -0.000113738594854751,0.000107463398003826,0.408644434524934,-0.598977233158714, -0.00011623940026273,0.000633586013944143,0.420840769834404,-0.621136758580381, -0.000118740205670265,0.00115970862988446,0.433037105143873,-0.643296284002048, -0.000121241011078244,0.00168583124582522,0.445233440453343,-0.665455809423714, -0.000123741816485223,0.00221195386176642,0.457429775762813,-0.687615334845381, -0.000126242621893868,0.0027380764777063,0.469626111072283,-0.709774860267048, -5.33744927950219e-05,-0.00845796150272471,0.171844843222908,-0.1825957572992, -5.506927210569e-05,-0.00798891394834234,0.183207975456313,-0.205320057006508, -5.67640514163026e-05,-0.00751986639396007,0.194571107689718,-0.228044356713816, -5.84588307267486e-05,-0.00705081883957748,0.205934239923124,-0.250768656421124, -6.01536100370836e-05,-0.00658177128519477,0.217297372156529,-0.273492956128431, -6.18483893479183e-05,-0.00611272373081273,0.228660504389935,-0.296217255835739, -6.35431686584753e-05,-0.00564367617643025,0.24002363662334,-0.318941555543047, -6.52379479690324e-05,-0.00517462862204798,0.251386768856745,-0.341665855250355, -6.69327272793119e-05,-0.00470558106766505,0.262749901090151,-0.364390154957663, -6.8627506590202e-05,-0.00423653351328324,0.274113033323556,-0.38711445466497, -7.0322285900537e-05,-0.00376748595890031,0.285476165556962,-0.409838754372278, -7.20170652116492e-05,-0.00329843840451871,0.296839297790366,-0.432563054079586, -7.37118445216511e-05,-0.00282939085013512,0.308202430023772,-0.455287353786894, -7.54066238325413e-05,-0.00236034329575352,0.319565562257177,-0.478011653494202, -7.71014031432093e-05,-0.0018912957413717,0.330928694490582,-0.50073595320151, -7.87961824537664e-05,-0.00142224818698877,0.342291826723988,-0.523460252908817, -8.04909617643235e-05,-0.000953200632606288,0.353654958957394,-0.546184552616125, -8.21857410746585e-05,-0.000484153078224026,0.365018091190799,-0.568908852323433, -8.38805203851045e-05,-1.51055238410969e-05,0.376381223424204,-0.591633152030741, -8.55752996959946e-05,0.000453942030540944,0.387744355657609,-0.614357451738049, -8.72700790065517e-05,0.000922989584923428,0.399107487891015,-0.637081751445357, -8.89648583171088e-05,0.00139203713930591,0.41047062012442,-0.659806051152664, -9.06596376273328e-05,0.00186108469368884,0.421833752357826,-0.682530350859972, -9.23544169381119e-05,0.00233013224807044,0.433196884591231,-0.70525465056728, -9.40491962486689e-05,0.00279917980245337,0.444560016824637,-0.727978950274588, -4.19572267271184e-05,-0.00730700058508948,0.167257896503593,-0.186646686184674, -4.30517227855698e-05,-0.0069002456101086,0.177874401383225,-0.209863051049128, -4.41462188444097e-05,-0.00649349063512827,0.188490906262858,-0.233079415913582, -4.52407149028056e-05,-0.00608673566014739,0.19910741114249,-0.256295780778036, -4.6335210961479e-05,-0.00567998068516706,0.209723916022123,-0.279512145642491, -4.74297070200413e-05,-0.00527322571018618,0.220340420901755,-0.302728510506945, -4.85242030786037e-05,-0.00486647073520552,0.230956925781388,-0.325944875371399, -4.96186991369996e-05,-0.00445971576022464,0.241573430661021,-0.349161240235853, -5.07131951956175e-05,-0.0040529607852442,0.252189935540653,-0.372377605100308, -5.18076912542353e-05,-0.00364620581026354,0.262806440420286,-0.395593969964762, -5.29021873127977e-05,-0.00323945083528288,0.273422945299918,-0.418810334829216, -5.39966833713601e-05,-0.00283269586030177,0.284039450179551,-0.44202669969367, -5.50911794302555e-05,-0.00242594088532155,0.294655955059184,-0.465243064558125, -5.61856754883738e-05,-0.00201918591034045,0.305272459938816,-0.488459429422579, -5.72801715476023e-05,-0.00161243093536068,0.315888964818448,-0.511675794287033, -5.83746676054986e-05,-0.00120567596037868,0.326505469698082,-0.534892159151487, -5.9469163664283e-05,-0.000798920985398688,0.337121974577714,-0.558108524015941, -6.05636597230674e-05,-0.000392166010418471,0.347738479457346,-0.581324888880396, -6.16581557811857e-05,1.45889645630781e-05,0.358354984336979,-0.60454125374485, -6.2752651839304e-05,0.000421343939544627,0.368971489216612,-0.627757618609304, -6.38471478986435e-05,0.0008280989145244,0.379587994096245,-0.650973983473758, -6.4941643957428e-05,0.00123485388950417,0.390204498975877,-0.674190348338212, -6.60361400157683e-05,0.00164160886448528,0.400821003855509,-0.697406713202667, -6.71306360742197e-05,0.00204836383946638,0.411437508735142,-0.720623078067121, -6.82251321330041e-05,0.0024551188144466,0.422054013614775,-0.743839442931575, -3.228021332502e-05,-0.00641532403135203,0.163309010493678,-0.19002690310177, -3.29584181856246e-05,-0.00606955243326501,0.173287760665244,-0.213653861935045, -3.36366230463403e-05,-0.00572378083517799,0.183266510836809,-0.237280820768321, -3.4314827906945e-05,-0.00537800923709075,0.193245261008375,-0.260907779601596, -3.49930327672721e-05,-0.00503223763900329,0.203224011179941,-0.284534738434872, -3.56712376280988e-05,-0.00468646604091649,0.213202761351506,-0.308161697268148, -3.63494424887589e-05,-0.0043406944428297,0.223181511523072,-0.331788656101423, -3.70276473493636e-05,-0.00399492284474245,0.233160261694638,-0.355415614934699, -3.77058522095797e-05,-0.00364915124665455,0.243139011866204,-0.379042573767974, -3.83840570703509e-05,-0.00330337964856797,0.253117762037769,-0.40266953260125, -3.90622619308445e-05,-0.00295760805048095,0.263096512209334,-0.426296491434525, -3.97404667922263e-05,-0.0026118364523946,0.2730752623809,-0.449923450267801, -4.04186716520538e-05,-0.00226606485430669,0.283054012552466,-0.473550409101076, -4.10968765128805e-05,-0.0019202932562199,0.293032762724031,-0.497177367934352, -4.17750813735962e-05,-0.00157452165813265,0.303011512895597,-0.520804326767628, -4.24532862336457e-05,-0.00122875006004497,0.312990263067163,-0.544431285600903, -4.31314910949165e-05,-0.000882978461958617,0.322969013238728,-0.568058244434179, -4.38096959555212e-05,-0.00053720686387182,0.332947763410294,-0.591685203267454, -4.44879008154597e-05,-0.000191435265783468,0.34292651358186,-0.61531216210073, -4.51661056768415e-05,0.000154336332302663,0.352905263753425,-0.638939120934005, -4.5844310536558e-05,0.00050010793039057,0.362884013924991,-0.662566079767281, -4.65225153973847e-05,0.000845879528477145,0.372862764096556,-0.686193038600556, -4.72007202584335e-05,0.00119165112656416,0.382841514268123,-0.709819997433832, -4.7878925118594e-05,0.00153742272465163,0.392820264439688,-0.733446956267108, -4.85571299797538e-05,0.00188319432273865,0.402799014611254,-0.757073915100383, -2.43985397578306e-05,-0.00574338065697311,0.160050779482165,-0.192747267398463, -2.48052220699901e-05,-0.00545266413771017,0.169506528338644,-0.216704668094085, -2.52119043824828e-05,-0.00516194761844779,0.178962277195123,-0.240662068789706, -2.56185866945313e-05,-0.00487123109918475,0.188418026051603,-0.264619469485328, -2.60252690066909e-05,-0.00458051457992181,0.197873774908082,-0.28857687018095, -2.64319513194611e-05,-0.00428979806065977,0.207329523764561,-0.312534270876571, -2.68386336318427e-05,-0.00399908154139728,0.21678527262104,-0.336491671572193, -2.72453159438912e-05,-0.00370836502213412,0.22624102147752,-0.360449072267815, -2.76519982566059e-05,-0.00341764850287185,0.235696770333999,-0.384406472963436, -2.80586805690985e-05,-0.00312693198360936,0.245152519190478,-0.408363873659058, -2.84653628811471e-05,-0.00283621546434643,0.254608268046957,-0.43232127435468, -2.88720451937508e-05,-0.00254549894508371,0.264064016903437,-0.456278675050302, -2.92787275054662e-05,-0.00225478242582078,0.273519765759916,-0.480236075745923, -2.96854098182919e-05,-0.00196406590655895,0.282975514616395,-0.504193476441545, -3.00920921303405e-05,-0.00167334938729535,0.292431263472875,-0.528150877137167, -3.04987744429441e-05,-0.00138263286803353,0.301887012329353,-0.552108277832788, -3.09054567555478e-05,-0.00109191634877059,0.311342761185833,-0.57606567852841, -3.13121390678184e-05,-0.000801199829508104,0.320798510042312,-0.600023079224032, -3.17188213802e-05,-0.000510483310245835,0.330254258898791,-0.623980479919653, -3.21255036921375e-05,-0.000219766790982678,0.33971000775527,-0.647937880615275, -3.25321860048522e-05,7.09497282795901e-05,0.34916575661175,-0.671895281310897, -3.29388683173448e-05,0.000361666247541859,0.358621505468229,-0.695852682006519, -3.33455506292824e-05,0.000652382766805459,0.368077254324708,-0.71981008270214, -3.3752232941664e-05,0.000943099286068172,0.377533003181188,-0.743767483397762, -3.41589152541566e-05,0.00123381580533044,0.386988752037667,-0.767724884093383, -1.81829505269682e-05,-0.00524666434754717,0.157454266876236,-0.194873565063733, -1.84211510676491e-05,-0.0050027046970138,0.166495176237537,-0.219089246520232, -1.8659351608219e-05,-0.00475874504648033,0.175536085598838,-0.243304927976732, -1.88975521489554e-05,-0.00451478539594707,0.184576994960139,-0.267520609433231, -1.91357526897473e-05,-0.00427082574541382,0.19361790432144,-0.29173629088973, -1.93739532300397e-05,-0.00402686609488012,0.202658813682741,-0.31595197234623, -1.96121537707206e-05,-0.00378290644434687,0.211699723044042,-0.340167653802729, -1.98503543111794e-05,-0.00353894679381339,0.220740632405343,-0.364383335259228, -2.00885548519159e-05,-0.00329498714328014,0.229781541766644,-0.388599016715727, -2.03267553925413e-05,-0.0030510274927471,0.238822451127945,-0.412814698172227, -2.05649559330556e-05,-0.00280706784221318,0.247863360489246,-0.437030379628726, -2.08031564737921e-05,-0.00256310819167949,0.256904269850547,-0.461246061085225, -2.10413570141954e-05,-0.00231914854114601,0.265945179211848,-0.485461742541724, -2.12795575551539e-05,-0.00207518889061298,0.274986088573149,-0.509677423998224, -2.15177580954462e-05,-0.00183122924007906,0.28402699793445,-0.533893105454723, -2.17559586360716e-05,-0.00158726958954603,0.293067907295751,-0.558108786911222, -2.1994159176697e-05,-0.00134330993901277,0.302108816657052,-0.582324468367722, -2.22323597178775e-05,-0.00109935028847996,0.311149726018353,-0.606540149824221, -2.24705602578368e-05,-0.000855390637945597,0.320190635379654,-0.63075583128072, -2.27087607982401e-05,-0.00061143098741212,0.329231544740955,-0.654971512737219, -2.29469613391986e-05,-0.000367471336879532,0.338272454102255,-0.679187194193719, -2.31851618793799e-05,-0.000123511686345612,0.347313363463556,-0.703402875650218, -2.34233624196722e-05,0.000120447964188752,0.356354272824858,-0.727618557106717, -2.36615629608528e-05,0.000364407614720896,0.365395182186158,-0.751834238563217, -2.38997635013671e-05,0.000608367265254373,0.374436091547459,-0.776049920019716, -1.34037275033028e-05,-0.00488411261732169,0.155441284111603,-0.196497895335566, -1.35412940485691e-05,-0.00467807979522517,0.164161710994076,-0.220910883719208, -1.36788605941685e-05,-0.00447204697312842,0.17288213787655,-0.245323872102851, -1.38164271393793e-05,-0.00426601415103145,0.181602564759025,-0.269736860486493, -1.39539936848121e-05,-0.00405998132893481,0.190322991641499,-0.294149848870135, -1.40915602301894e-05,-0.00385394850683807,0.199043418523973,-0.318562837253777, -1.42291267754557e-05,-0.0036479156847411,0.207763845406447,-0.342975825637419, -1.43666933209441e-05,-0.00344188286264413,0.216484272288921,-0.367388814021061, -1.45042598661549e-05,-0.00323585004054738,0.225204699171395,-0.391801802404704, -1.46418264117543e-05,-0.00302981721845086,0.233925126053869,-0.416214790788346, -1.47793929570206e-05,-0.00282378439635433,0.242645552936343,-0.440627779171988, -1.491695950262e-05,-0.00261775157425759,0.251365979818817,-0.46504076755563, -1.50545260474422e-05,-0.00241171875216062,0.260086406701291,-0.489453755939272, -1.51920925927085e-05,-0.00220568593006321,0.268806833583765,-0.513866744322914, -1.53296591381968e-05,-0.00199965310796668,0.277527260466239,-0.538279732706556, -1.54672256836852e-05,-0.00179362028587016,0.286247687348713,-0.562692721090199, -1.56047922290625e-05,-0.00158758746377297,0.294968114231188,-0.587105709473841, -1.57423587745509e-05,-0.00138155464167644,0.303688541113662,-0.611518697857483, -1.58799253199282e-05,-0.00117552181957992,0.312408967996135,-0.635931686241125, -1.60174918654166e-05,-0.000969488997482948,0.32112939487861,-0.660344674624767, -1.61550584103498e-05,-0.000763456175385979,0.329849821761084,-0.684757663008409, -1.62926249561712e-05,-0.00055742335328901,0.338570248643558,-0.709170651392051, -1.64301915013265e-05,-0.000351390531192042,0.347290675526032,-0.733583639775694, -1.65677580462598e-05,-0.000145357709094629,0.356011102408507,-0.757996628159336, -1.67053245919702e-05,6.06751130014516e-05,0.36473152929098,-0.782409616542978, -9.79937217493454e-06,-0.00462161183197185,0.153913503309736,-0.197717181411202, -9.87842135719008e-06,-0.00444530778400654,0.162391328004467,-0.222278276120918, -9.95747053961216e-06,-0.00426900373604122,0.170869152699199,-0.246839370830634, -1.00365197216457e-05,-0.00409269968807568,0.179346977393931,-0.27140046554035, -1.01155689035681e-05,-0.00391639564010959,0.187824802088662,-0.295961560250066, -1.01946180861012e-05,-0.00374009159214483,0.196302626783394,-0.320522654959782, -1.02736672682457e-05,-0.00356378754417896,0.204780451478126,-0.345083749669498, -1.03527164501127e-05,-0.0033874834962131,0.213258276172857,-0.369644844379214, -1.04317656323683e-05,-0.00321117944824811,0.221736100867589,-0.39420593908893, -1.05108148146238e-05,-0.00303487540028269,0.23021392556232,-0.418767033798646, -1.05898639967128e-05,-0.00285857135231682,0.238691750257052,-0.443328128508362, -1.06689131789128e-05,-0.00268226730435162,0.247169574951783,-0.467889223218078, -1.07479623613349e-05,-0.00250596325638663,0.255647399646515,-0.492450317927794, -1.08270115429798e-05,-0.0023296592084201,0.264125224341247,-0.51701141263751, -1.0906060725735e-05,-0.00215335516045578,0.272603049035978,-0.541572507347226, -1.09851099076019e-05,-0.00197705111248925,0.28108087373071,-0.566133602056942, -1.1064159089913e-05,-0.00180074706452449,0.289558698425441,-0.590694696766658, -1.11432082723351e-05,-0.00162444301655906,0.298036523120173,-0.615255791476374, -1.1222257454313e-05,-0.00144813896859386,0.306514347814904,-0.63981688618609, -1.13013066358469e-05,-0.00127183492062732,0.314992172509637,-0.664377980895806, -1.138035581838e-05,-0.00109553087266256,0.323469997204368,-0.688939075605522, -1.14594050009131e-05,-0.000919226824697805,0.331947821899099,-0.713500170315238, -1.15384541830021e-05,-0.000742922776731714,0.340425646593831,-0.738061265024954, -1.16175033654242e-05,-0.00056661872876651,0.348903471288563,-0.76262235973467, -1.16965525469581e-05,-0.000390314680799975,0.357381295983295,-0.787183454444386, -7.12027086441358e-06,-0.00443249546210334,0.152772460993502,-0.198620425851387, -7.165846283963e-06,-0.00427891194980523,0.16106944102443,-0.223291237401355, -7.21142170356792e-06,-0.00412532843750735,0.169366421055358,-0.247962048951324, -7.25699712311734e-06,-0.00397174492520924,0.177663401086287,-0.272632860501292, -7.30257254311084e-06,-0.0038181614129118,0.185960381117215,-0.297303672051261, -7.34814796260475e-06,-0.00366457790061392,0.194257361148143,-0.321974483601229, -7.39372338215416e-06,-0.00351099438831559,0.202554341179072,-0.346645295151198, -7.43929880220318e-06,-0.00335741087601815,0.21085132121,-0.371316106701166, -7.48487422175259e-06,-0.00320382736372027,0.219148301240928,-0.395986918251134, -7.53044964107996e-06,-0.00305024385142194,0.227445281271857,-0.420657729801103, -7.57602506151756e-06,-0.00289666033912539,0.235742261302784,-0.445328541351071, -7.62160048062288e-06,-0.0027430768268264,0.244039241333713,-0.46999935290104, -7.66717590061639e-06,-0.0025894933145294,0.252336221364641,-0.494670164451008, -7.71275131994376e-06,-0.00243590980223107,0.260633201395569,-0.519340976000977, -7.75832673982624e-06,-0.00228232628993341,0.268930181426497,-0.544011787550945, -7.80390215937565e-06,-0.00212874277763508,0.277227161457426,-0.568682599100913, -7.84947757925814e-06,-0.00197515926533764,0.285524141488354,-0.593353410650882, -7.89505299825244e-06,-0.00182157575303865,0.293821121519283,-0.61802422220085, -7.94062841869003e-06,-0.00166799224074188,0.302118101550211,-0.642695033750819, -7.9862038380174e-06,-0.00151440872844377,0.310415081581139,-0.667365845300787, -8.03177925767784e-06,-0.00136082521614522,0.318712061612068,-0.692036656850755, -8.07735467789339e-06,-0.00120724170384845,0.327009041642996,-0.716707468400724, -8.12293009699872e-06,-0.00105365819155034,0.335306021673924,-0.741378279950692, -8.16850551654813e-06,-0.00090007467925135,0.343603001704853,-0.766049091500661, -8.21408093643061e-06,-0.000746491166954577,0.351899981735781,-0.790719903050629, -5.15020821351131e-06,-0.00429665988542394,0.151930402708798,-0.199283026385069, -5.17676778843956e-06,-0.00416012161111801,0.160094109920119,-0.224034323829742, -5.20332736314577e-06,-0.00402358333681185,0.168257817131441,-0.248785621274415, -5.22988693807402e-06,-0.00388704506250603,0.176421524342762,-0.273536918719088, -5.25644651289126e-06,-0.00375050678819999,0.184585231554083,-0.298288216163761, -5.28300608743093e-06,-0.0036139685138934,0.192748938765405,-0.323039513608434, -5.30956566263674e-06,-0.00347743023958791,0.200912645976726,-0.347790811053106, -5.33612523723193e-06,-0.00334089196528153,0.209076353188047,-0.372542108497779, -5.36268481182711e-06,-0.00320435369097516,0.217240060399368,-0.397293405942452, -5.38924438675537e-06,-0.00306781541666923,0.22540376761069,-0.422044703387125, -5.41580396173913e-06,-0.00293127714236352,0.233567474822011,-0.446796000831798, -5.44236353650085e-06,-0.00279473886805759,0.241731182033332,-0.471547298276471, -5.46892311181768e-06,-0.00265820059375188,0.249894889244653,-0.496298595721144, -5.49548268591327e-06,-0.00252166231944484,0.258058596455975,-0.521049893165817, -5.52204226111908e-06,-0.00238512404513957,0.266222303667295,-0.54580119061049, -5.5486018358808e-06,-0.00224858577083342,0.274386010878617,-0.570552488055163, -5.57516141042047e-06,-0.00211204749652683,0.282549718089939,-0.595303785499836, -5.60172098584832e-06,-0.00197550922222156,0.29071342530126,-0.620055082944509, -5.62828056016595e-06,-0.00183897094791474,0.298877132512581,-0.644806380389181, -5.65484013481665e-06,-0.00170243267360837,0.307040839723903,-0.669557677833854, -5.68139971002246e-06,-0.00156589439930288,0.315204546935224,-0.694308975278527, -5.7079592848952e-06,-0.00142935612499695,0.323368254146545,-0.7190602727232, -5.73451885932386e-06,-0.00129281785069102,0.331531961357866,-0.743811570167873, -5.76107843430762e-06,-0.00115627957638464,0.339695668569187,-0.768562867612546, -5.78763800929138e-06,-0.00101974130207871,0.347859375780509,-0.793314165057218, -3.71290802991808e-06,-0.00419927236427542,0.151314443675528,-0.199765611750166, -3.72864798375838e-06,-0.00407534997793668,0.159380761157111,-0.224575528699211, -3.74438793754317e-06,-0.00395142759159828,0.167447078638693,-0.249385445648256, -3.76012789138347e-06,-0.00382750520525965,0.175513396120276,-0.274195362597301, -3.77586784511275e-06,-0.00370358281892091,0.183579713601859,-0.299005279546346, -3.79160779939713e-06,-0.00357966043258329,0.191646031083441,-0.323815196495391, -3.80734775279334e-06,-0.00345573804624411,0.199712348565024,-0.348625113444436, -3.82308770652262e-06,-0.00333181565990515,0.207778666046607,-0.373435030393481, -3.8388276607515e-06,-0.00320789327356752,0.215844983528189,-0.398244947342527, -3.8545676140922e-06,-0.00308397088722812,0.223911301009772,-0.423054864291572, -3.87030756821005e-06,-0.00296004850089004,0.231977618491355,-0.447864781240616, -3.8860475217728e-06,-0.00283612611455131,0.240043935972938,-0.472674698189662, -3.90178747600167e-06,-0.00271220372821346,0.24811025345452,-0.497484615138706, -3.91752742956442e-06,-0.00258828134187428,0.256176570936103,-0.522294532087751, -3.93326738357125e-06,-0.00246435895553621,0.264242888417686,-0.547104449036796, -3.94900733724501e-06,-0.00234043656919769,0.272309205899268,-0.571914365985841, -3.96474729069674e-06,-0.00221651418285829,0.280375523380851,-0.596724282934887, -3.98048724448152e-06,-0.00209259179651955,0.288441840862434,-0.621534199883932, -3.99622719804427e-06,-0.00196866941018081,0.296508158344017,-0.646344116832977, -4.01196715260621e-06,-0.00184474702384341,0.304574475825599,-0.671154033782022, -4.027707106391e-06,-0.00172082463750467,0.312640793307182,-0.695963950731067, -4.04344706017579e-06,-0.00159690225116593,0.320707110788765,-0.720773867680112, -4.05918701362751e-06,-0.0014729798648272,0.328773428270347,-0.745583784629157, -4.07492696719025e-06,-0.0013490574784889,0.33683974575193,-0.770393701578202, -4.09066692119708e-06,-0.00122513509214972,0.344906063233513,-0.795203618527247, -2.67029393397067e-06,-0.00412952777607445,0.15086676848874,-0.200115249996913, -2.67982151025414e-06,-0.00401485189495598,0.15886235524972,-0.224967637402412, -2.68934908675966e-06,-0.00390017601383774,0.166857942010699,-0.249820024807911, -2.69887666343172e-06,-0.00378550013271939,0.174853528771679,-0.27467241221341, -2.70840423982621e-06,-0.00367082425160126,0.182849115532658,-0.29952479961891, -2.71793181605418e-06,-0.00355614837048268,0.190844702293637,-0.324377187024409, -2.72745939278174e-06,-0.00344147248936499,0.198840289054616,-0.349229574429908, -2.73698696934277e-06,-0.00332679660824642,0.206835875815596,-0.374081961835407, -2.7465145454042e-06,-0.00321212072712784,0.214831462576575,-0.398934349240907, -2.75604212196523e-06,-0.00309744484600971,0.222827049337555,-0.423786736646406, -2.7655696982487e-06,-0.00298276896489114,0.230822636098534,-0.448639124051905, -2.77509727475422e-06,-0.00286809308377278,0.238818222859513,-0.473491511457404, -2.78462485137076e-06,-0.00275341720265465,0.246813809620493,-0.498343898862904, -2.79415242787628e-06,-0.00263874132153652,0.254809396381472,-0.523196286268403, -2.80368000449283e-06,-0.00252406544041861,0.262804983142451,-0.548048673673902, -2.81320758044323e-06,-0.00240938955929937,0.270800569903431,-0.572901061079401, -2.82273515750386e-06,-0.00229471367818213,0.27879615666441,-0.597753448484901, -2.83226273323223e-06,-0.00218003779706288,0.286791743425389,-0.6226058358904, -2.84179031018184e-06,-0.0020653619159452,0.294787330186369,-0.647458223295899, -2.8513178869094e-06,-0.00195068603482706,0.302782916947348,-0.672310610701398, -2.86084546297083e-06,-0.00183601015370805,0.310778503708328,-0.697162998106898, -2.8703730392543e-06,-0.00172133427258991,0.318774090469307,-0.722015385512397, -2.87990061598187e-06,-0.00160665839147223,0.326769677230286,-0.746867772917896, -2.88942819237636e-06,-0.00149198251035365,0.334765263991265,-0.771720160323396, -2.89895576865984e-06,-0.00137730662923508,0.342760850752245,-0.796572547728895, -1.91711875047185e-06,-0.00407961391361322,0.150542919746702,-0.200367605278461, -1.92302373297482e-06,-0.00397166725137255,0.158487366641278,-0.225250646206839, -1.92892871531125e-06,-0.0038637205891312,0.166431813535854,-0.250133687135217, -1.93483369753666e-06,-0.00375577392688964,0.174376260430431,-0.275016728063596, -1.94073867998412e-06,-0.00364782726464852,0.182320707325007,-0.299899768991974, -1.94664366243158e-06,-0.00353988060240762,0.190265154219583,-0.324782809920352, -1.95254864476802e-06,-0.0034319339401665,0.19820960111416,-0.34966585084873, -1.95845362699343e-06,-0.00332398727792493,0.206154048008736,-0.374548891777109, -1.96435860927435e-06,-0.00321604061568381,0.214098494903312,-0.399431932705487, -1.97026359172181e-06,-0.00310809395344269,0.222042941797889,-0.424314973633865, -1.97616857389171e-06,-0.00300014729120113,0.229987388692465,-0.449198014562243, -1.98207355639468e-06,-0.00289220062896045,0.237931835587041,-0.474081055490621, -1.98797853867561e-06,-0.00278425396671889,0.245876282481618,-0.498964096418999, -1.99388352073449e-06,-0.00267630730447754,0.253820729376194,-0.523847137347378, -1.99978850323745e-06,-0.0025683606422362,0.261765176270771,-0.548730178275756, -2.00569348585145e-06,-0.00246041397999552,0.269709623165347,-0.573613219204134, -2.01159846802135e-06,-0.00235246731775418,0.277654070059923,-0.598496260132512, -2.01750345041329e-06,-0.00224452065551306,0.2855985169545,-0.62337930106089, -2.02340843291626e-06,-0.00213657399327172,0.293542963849076,-0.648262341989269, -2.02931341519719e-06,-0.00202862733103037,0.301487410743653,-0.673145382917647, -2.03521839703402e-06,-0.00192068066878903,0.309431857638229,-0.698028423846025, -2.0411233800921e-06,-0.00181273400654902,0.317376304532805,-0.722911464774403, -2.04702836203996e-06,-0.00170478734430679,0.325320751427382,-0.747794505702781, -2.05293334465395e-06,-0.00159684068206589,0.333265198321958,-0.772677546631159, -2.05883832649079e-06,-0.00148889401982411,0.341209645216535,-0.797560587559538, -1.37465923455427e-06,-0.00404390747655059,0.150309438262744,-0.200549246064803, -1.37840823793978e-06,-0.003940833169086,0.158217029323549,-0.225454350846831, -1.38215724149182e-06,-0.00383775886162163,0.166124620384354,-0.250359455628859, -1.38590624476631e-06,-0.00373468455415704,0.174032211445159,-0.275264560410887, -1.38965524848489e-06,-0.0036316102466929,0.181939802505964,-0.300169665192915, -1.39340425220347e-06,-0.00352853593922875,0.189847393566769,-0.325074769974944, -1.3971532557e-06,-0.00342546163176438,0.197754984627574,-0.349979874756972, -1.40090225941858e-06,-0.00332238732430024,0.205662575688379,-0.374884979539, -1.40465126247102e-06,-0.00321931301683542,0.213570166749184,-0.399790084321028, -1.4084002661896e-06,-0.00311623870937128,0.221477757809989,-0.424695189103056, -1.41214927007471e-06,-0.00301316440190735,0.229385348870794,-0.449600293885084, -1.41589827351574e-06,-0.00291009009444299,0.237292939931598,-0.474505398667112, -1.41964727695676e-06,-0.0028070157869784,0.245200530992403,-0.499410503449141, -1.42339628061983e-06,-0.00270394147951425,0.253108122053208,-0.524315608231169, -1.42714528428289e-06,-0.0026008671720501,0.261015713114013,-0.549220713013197, -1.43089428783494e-06,-0.00249779286458574,0.268923304174818,-0.574125817795225, -1.43464329105392e-06,-0.0023947185571207,0.276830895235624,-0.599030922577253, -1.43839229493903e-06,-0.00229164424965722,0.284738486296428,-0.623936027359281, -1.44214129815801e-06,-0.00218856994219285,0.292646077357233,-0.648841132141309, -1.44589030171005e-06,-0.00208549563472804,0.300553668418038,-0.673746236923337, -1.44963930581721e-06,-0.00198242132726456,0.308461259478843,-0.698651341705366, -1.45338830892516e-06,-0.00187934701979975,0.316368850539648,-0.723556446487394, -1.4571373129213e-06,-0.00177627271233627,0.324276441600452,-0.748461551269422, -1.46088631669539e-06,-0.00167319840487146,0.332184032661258,-0.77336665605145, -1.46463531969232e-06,-0.00157012409740709,0.340091623722063,-0.798271760833478, -0.000181201626823391,-0.0313793041347652,0.224181556802017,-0.136858951696573, -0.000194964032887435,-0.031112869119811,0.243017255725212,-0.153104187665781, -0.00020872643895159,-0.030846434104857,0.261852954648408,-0.169349423634989, -0.000222488845015745,-0.0305799990899031,0.280688653571603,-0.185594659604197, -0.0002362512510799,-0.030313564074949,0.299524352494798,-0.201839895573404, -0.000250013657144055,-0.0300471290599948,0.318360051417994,-0.218085131542612, -0.000263776063208598,-0.0297806940450411,0.337195750341189,-0.23433036751182, -0.000277538469272531,-0.029514259030087,0.356031449264384,-0.250575603481028, -0.000291300875336686,-0.029247824015133,0.374867148187579,-0.266820839450235, -0.000305063281400786,-0.0289813890001784,0.393702847110775,-0.283066075419443, -0.000318825687464996,-0.0287149539852243,0.41253854603397,-0.29931131138865, -0.000332588093529096,-0.0284485189702708,0.431374244957165,-0.315556547357858, -0.00034635049959364,-0.0281820839553166,0.450209943880361,-0.331801783327066, -0.00036011290565785,-0.0279156489403627,0.469045642803556,-0.348047019296274, -0.000373875311721616,-0.0276492139254083,0.487881341726751,-0.364292255265481, -0.000387637717786271,-0.027382778910455,0.506717040649946,-0.380537491234689, -0.000401400123849927,-0.0271163438955002,0.525552739573142,-0.396782727203897, -0.000415162529914359,-0.0268499088805465,0.544388438496337,-0.413027963173104, -0.000428924935978126,-0.0265834738655919,0.563224137419533,-0.429273199142312, -0.000442687342042336,-0.026317038850638,0.582059836342728,-0.44551843511152, -0.000456449748106991,-0.0260506038356842,0.600895535265924,-0.461763671080728, -0.000470212154170868,-0.0257841688207301,0.619731234189118,-0.478008907049935, -0.000483974560234968,-0.0255177338057759,0.638566933112314,-0.494254143019143, -0.0004977369662994,-0.0252512987908222,0.657402632035509,-0.510499378988351, -0.000511499372363722,-0.0249848637758681,0.676238330958705,-0.526744614957558, -0.000178508613633555,-0.0306316557916103,0.223336230760757,-0.138208101102135, -0.000191916250282753,-0.0303387950758676,0.242015347908285,-0.154608440860078, -0.000205323886931452,-0.0300459343601241,0.260694465055813,-0.171008780618022, -0.000218731523580595,-0.0297530736443813,0.279373582203341,-0.187409120375965, -0.000232139160229516,-0.0294602129286381,0.298052699350868,-0.203809460133909, -0.000245546796878326,-0.029167352212895,0.316731816498396,-0.220209799891852, -0.000258954433527248,-0.0288744914971517,0.335410933645924,-0.236610139649796, -0.000272362070176391,-0.0285816307814089,0.354090050793452,-0.253010479407739, -0.00028576970682509,-0.0282887700656653,0.37276916794098,-0.269410819165682, -0.000299177343474288,-0.0279959093499227,0.391448285088507,-0.285811158923626, -0.000312584980123209,-0.0277030486341792,0.410127402236035,-0.302211498681569, -0.000325992616772464,-0.0274101879184367,0.428806519383563,-0.318611838439513, -0.000339400253421052,-0.0271173272026932,0.447485636531091,-0.335012178197456, -0.000352807890069973,-0.0268244664869499,0.466164753678619,-0.3514125179554, -0.000366215526718894,-0.0265316057712066,0.484843870826147,-0.367812857713343, -0.000379623163367926,-0.0262387450554642,0.503522987973674,-0.384213197471287, -0.000393030800017069,-0.0259458843397209,0.522202105121202,-0.40061353722923, -0.00040643843666599,-0.025653023623978,0.540881222268729,-0.417013876987174, -0.000419846073314911,-0.025360162908235,0.559560339416257,-0.433414216745117, -0.000433253709963721,-0.0250673021924912,0.578239456563785,-0.449814556503061, -0.000446661346612531,-0.0247744414767479,0.596918573711313,-0.466214896261004, -0.000460068983261896,-0.0244815807610053,0.615597690858841,-0.482615236018947, -0.000473476619910262,-0.0241887200452622,0.634276808006368,-0.499015575776891, -0.000486884256560072,-0.0238958593295195,0.652955925153896,-0.515415915534835, -0.000500291893208882,-0.0236029986137765,0.671635042301424,-0.531816255292778, -0.000174860756161854,-0.0296443738569953,0.222178602899426,-0.140013454245716, -0.000187794628576432,-0.0293178478489339,0.240645149278726,-0.156621344858606, -0.000200728500990788,-0.0289913218408724,0.259111695658025,-0.173229235471497, -0.000213662373405477,-0.0286647958328111,0.277578242037325,-0.189837126084387, -0.000226596245819721,-0.0283382698247495,0.296044788416624,-0.206445016697278, -0.000239530118234355,-0.0280117438166885,0.314511334795923,-0.223052907310168, -0.000252463990649043,-0.0276852178086273,0.332977881175223,-0.239660797923059, -0.000265397863063677,-0.0273586918005659,0.351444427554522,-0.256268688535949, -0.000278331735477699,-0.0270321657925039,0.369910973933822,-0.272876579148839, -0.00029126560789261,-0.026705639784443,0.388377520313121,-0.28948446976173, -0.000304199480307021,-0.0263791137763816,0.406844066692421,-0.306092360374621, -0.000317133352721433,-0.02605258776832,0.425310613071721,-0.322700250987511, -0.000330067225136066,-0.0257260617602588,0.44377715945102,-0.339308141600401, -0.000343001097550477,-0.0253995357521974,0.462243705830319,-0.355916032213292, -0.000355934969965555,-0.0250730097441367,0.480710252209618,-0.372523922826182, -0.000368868842379744,-0.0247464837360749,0.499176798588918,-0.389131813439073, -0.000381802714794155,-0.0244199577280133,0.517643344968218,-0.405739704051963, -0.00039473658720901,-0.0240934317199522,0.536109891347517,-0.422347594664854, -0.000407670459623422,-0.023766905711891,0.554576437726816,-0.438955485277744, -0.000420604332037944,-0.0234403797038298,0.573042984106116,-0.455563375890635, -0.000433538204452133,-0.0231138536957678,0.591509530485416,-0.472171266503525, -0.000446472076866433,-0.022787327687706,0.609976076864715,-0.488779157116416, -0.0004594059492814,-0.022460801679645,0.628442623244015,-0.505387047729306, -0.000472339821695922,-0.0221342756715841,0.646909169623314,-0.521994938342197, -0.000485273694110555,-0.0218077496635227,0.665375716002613,-0.538602828955087, -0.00016998050449446,-0.0283674951077179,0.220608085680564,-0.142390670383804, -0.000182292630499015,-0.0279996121384419,0.238789416158635,-0.159271855583745, -0.000194604756503736,-0.0276317291691663,0.256970746636706,-0.176153040783685, -0.000206916882508346,-0.0272638461998902,0.275152077114777,-0.193034225983625, -0.000219229008512956,-0.0268959632306144,0.293333407592848,-0.209915411183566, -0.000231541134517677,-0.0265280802613386,0.311514738070919,-0.226796596383506, -0.000243853260522064,-0.0261601972920624,0.32969606854899,-0.243677781583446, -0.000256165386526952,-0.0257923143227867,0.347877399027061,-0.260558966783387, -0.000268477512531506,-0.0254244313535108,0.366058729505132,-0.277440151983327, -0.000280789638536394,-0.0250565483842353,0.384240059983203,-0.294321337183267, -0.000293101764541004,-0.0246886654149594,0.402421390461274,-0.311202522383208, -0.000305413890545725,-0.0243207824456837,0.420602720939345,-0.328083707583148, -0.000317726016550224,-0.0239528994764078,0.438784051417416,-0.344964892783088, -0.000330038142554612,-0.0235850165071316,0.456965381895487,-0.361846077983029, -0.000342350268559333,-0.0232171335378559,0.475146712373557,-0.378727263182969, -0.000354662394563943,-0.02284925056858,0.493328042851629,-0.395608448382909, -0.000366974520568997,-0.022481367599305,0.511509373329699,-0.41248963358285, -0.000379286646573385,-0.0221134846300288,0.52969070380777,-0.42937081878279, -0.000391598772577995,-0.0217456016607529,0.547872034285841,-0.44625200398273, -0.000403910898582716,-0.021377718691477,0.566053364763912,-0.463133189182671, -0.000416223024587326,-0.0210098357222011,0.584234695241983,-0.480014374382611, -0.000428535150591602,-0.0206419527529245,0.602416025720055,-0.496895559582551, -0.000440847276595879,-0.0202740697836483,0.620597356198125,-0.513776744782491, -0.000453159402601044,-0.0199061868143735,0.638778686676196,-0.530657929982432, -0.000465471528605543,-0.0195383038450974,0.656960017154267,-0.547539115182373, -0.000163560643764105,-0.026760430442765,0.218505891058895,-0.145455363009714, -0.000175075641198785,-0.026344239466899,0.236310613971572,-0.162688877933575, -0.00018659063863341,-0.0259280484910333,0.254115336884249,-0.179922392857436, -0.00019810563606798,-0.0255118575151669,0.271920059796926,-0.197155907781297, -0.00020962063350255,-0.025095666539301,0.289724782709604,-0.214389422705158, -0.000221135630937397,-0.0246794755634354,0.30752950562228,-0.231622937629019, -0.000232650628371578,-0.024263284587569,0.325334228534958,-0.248856452552881, -0.000244165625806148,-0.0238470936117028,0.343138951447635,-0.266089967476742, -0.000255680623240828,-0.023430902635837,0.360943674360312,-0.283323482400603, -0.000267195620675342,-0.0230147116599706,0.37874839727299,-0.300556997324464, -0.000278710618110023,-0.0225985206841048,0.396553120185666,-0.317790512248325, -0.000290225615544482,-0.0221823297082386,0.414357843098344,-0.335024027172186, -0.000301740612979273,-0.0217661387323729,0.432162566011021,-0.352257542096047, -0.000313255610413621,-0.0213499477565064,0.449967288923698,-0.369491057019908, -0.00032477060784819,-0.0209337567806405,0.467772011836375,-0.386724571943769, -0.000336285605282982,-0.0205175658047749,0.485576734749052,-0.40395808686763, -0.000347800602717663,-0.0201013748289094,0.503381457661729,-0.421191601791491, -0.000359315600152232,-0.019685183853043,0.521186180574406,-0.438425116715352, -0.00037083059758658,-0.0192689928771768,0.538990903487083,-0.455658631639213, -0.000382345595021372,-0.0188528019013103,0.556795626399761,-0.472892146563074, -0.000393860592456052,-0.0184366109254448,0.574600349312438,-0.490125661486936, -0.000405375589889956,-0.0180204199495781,0.592405072225115,-0.507359176410797, -0.000416890587324747,-0.0176042289737124,0.610209795137792,-0.524592691334657, -0.000428405584759317,-0.0171880379978462,0.62801451805047,-0.541826206258519, -0.000439920582194331,-0.0167718470219809,0.645819240963146,-0.55905972118238, -0.000155303464255907,-0.0248069936288694,0.215745010319136,-0.149300356239133, -0.000165827440043398,-0.0243382219842224,0.233063045746992,-0.166975907467563, -0.000176351415830944,-0.0238694503395758,0.250381081174847,-0.184651458695993, -0.000186875391618713,-0.0234006786949291,0.267699116602703,-0.202327009924424, -0.000197399367406148,-0.0229319070502826,0.285017152030558,-0.220002561152854, -0.000207923343193583,-0.0224631354056357,0.302335187458413,-0.237678112381285, -0.000218447318981296,-0.021994363760989,0.319653222886269,-0.255353663609715, -0.000228971294768954,-0.0215255921163426,0.336971258314124,-0.273029214838146, -0.000239495270556667,-0.0210568204716959,0.35428929374198,-0.290704766066576, -0.000250019246343824,-0.0205880488270487,0.371607329169835,-0.308380317295006, -0.000260543222131537,-0.0201192771824024,0.38892536459769,-0.326055868523437, -0.000271067197919028,-0.0196505055377556,0.406243400025546,-0.343731419751867, -0.00028159117370663,-0.0191817338931091,0.423561435453401,-0.361406970980298, -0.000292115149494343,-0.0187129622484625,0.440879470881257,-0.379082522208728, -0.000302639125281945,-0.018244190603816,0.458197506309112,-0.396758073437158, -0.000313163101069325,-0.017775418959169,0.475515541736967,-0.414433624665589, -0.00032368707685726,-0.0173066473145227,0.492833577164823,-0.432109175894019, -0.000334211052644418,-0.0168378756698753,0.510151612592678,-0.44978472712245, -0.000344735028431797,-0.0163691040252287,0.527469648020533,-0.46746027835088, -0.000355259004219399,-0.0159003323805817,0.544787683448389,-0.485135829579311, -0.000365782980007445,-0.0154315607359363,0.562105718876244,-0.502811380807741, -0.000376306955794714,-0.0149627890912889,0.5794237543041,-0.520486932036171, -0.000386830931582427,-0.0144940174466424,0.596741789731955,-0.538162483264601, -0.000397354907369474,-0.0140252458019949,0.614059825159811,-0.555838034493032, -0.000407878883157298,-0.0135564741573484,0.631377860587666,-0.573513585721463, -0.000144990681892998,-0.022532879574928,0.212212649733898,-0.153963066158947, -0.000154330511624501,-0.0220124161465299,0.228919303189943,-0.172174661780502, -0.000163670341356059,-0.0214919527181319,0.245625956645989,-0.190386257402058, -0.000173010171087895,-0.0209714892897342,0.262332610102034,-0.208597853023613, -0.000182350000819287,-0.0204510258613363,0.279039263558079,-0.226809448645169, -0.000191689830550901,-0.0199305624329382,0.295745917014124,-0.245021044266724, -0.00020102966028257,-0.0194100990045405,0.31245257047017,-0.26323263988828, -0.000210369490014406,-0.0188896355761425,0.329159223926215,-0.281444235509835, -0.000219709319745798,-0.0183691721477446,0.34586587738226,-0.299655831131391, -0.000229049149477745,-0.0178487087193469,0.362572530838305,-0.317867426752946, -0.00023838897920947,-0.0173282452909491,0.379279184294351,-0.336079022374502, -0.000247728808940972,-0.0168077818625512,0.395985837750396,-0.354290617996057, -0.000257068638672475,-0.0162873184341532,0.412692491206441,-0.372502213617613, -0.000266408468403867,-0.0157668550057548,0.429399144662487,-0.390713809239169, -0.000275748298135703,-0.0152463915773573,0.446105798118532,-0.408925404860724, -0.000285088127867317,-0.0147259281489593,0.462812451574577,-0.427137000482279, -0.000294427957598931,-0.0142054647205616,0.479519105030622,-0.445348596103835, -0.000303767787330766,-0.0136850012921639,0.496225758486667,-0.463560191725391, -0.00031310761706238,-0.0131645378637661,0.512932411942712,-0.481771787346946, -0.000322447446793994,-0.012644074435368,0.529639065398758,-0.499983382968502, -0.000331787276525164,-0.0121236110069698,0.546345718854803,-0.518194978590057, -0.000341127106256889,-0.0116031475785721,0.563052372310848,-0.536406574211612, -0.000350466935988725,-0.0110826841501743,0.579759025766893,-0.554618169833168, -0.000359806765720672,-0.0105622207217766,0.596465679222939,-0.572829765454724, -0.000369146595452174,-0.0100417572933784,0.613172332678984,-0.591041361076279, -0.00013258055994525,-0.020018509793014,0.20784707051382,-0.159389803808523, -0.000140574176482944,-0.0194546836470862,0.223812913552605,-0.178225279607066, -0.00014856779302036,-0.0188908575011577,0.239778756591391,-0.197060755405609, -0.000156561409557943,-0.0183270313552296,0.255744599630176,-0.215896231204152, -0.000164555026095636,-0.0177632052093015,0.271710442668962,-0.234731707002696, -0.000172548642633163,-0.0171993790633733,0.287676285707748,-0.253567182801239, -0.000180542259170413,-0.0166355529174447,0.303642128746534,-0.272402658599782, -0.00018853587570844,-0.0160717267715171,0.319607971785319,-0.291238134398325, -0.000196529492245856,-0.0155079006255887,0.335573814824105,-0.310073610196868, -0.000204523108783827,-0.0149440744796612,0.35153965786289,-0.328909085995412, -0.000212516725320744,-0.0143802483337321,0.367505500901676,-0.347744561793955, -0.00022051034185866,-0.0138164221878043,0.383471343940462,-0.366580037592498, -0.000228503958396353,-0.0132525960418759,0.399437186979248,-0.385415513391041, -0.000236497574933825,-0.0126887698959479,0.415403030018034,-0.404250989189584, -0.000244491191471297,-0.0121249437500197,0.431368873056819,-0.423086464988127, -0.000252484808008546,-0.0115611176040911,0.447334716095605,-0.44192194078667, -0.000260478424546906,-0.0109972914581642,0.46330055913439,-0.460757416585214, -0.000268472041083934,-0.0104334653122353,0.479266402173176,-0.479592892383757, -0.000276465657621405,-0.00986963916630645,0.495232245211962,-0.4984283681823, -0.000284459274158988,-0.00930581302037803,0.511198088250748,-0.517263843980843, -0.000292452890696904,-0.00874198687445071,0.527163931289533,-0.536099319779386, -0.000300446507234264,-0.00817816072852251,0.543129774328319,-0.554934795577929, -0.000308440123772069,-0.00761433458259431,0.559095617367105,-0.573770271376472, -0.000316433740308875,-0.00705050843666521,0.575061460405891,-0.592605747175016, -0.000324427356847345,-0.00648668229073834,0.591027303444676,-0.611441222973559, -0.000118305920004058,-0.0173972325122059,0.202682264387483,-0.165411819387931, -0.000124858604172773,-0.0168066339551569,0.217789206015731,-0.184939610973252, -0.00013141128834121,-0.0162160353981077,0.232896147643979,-0.204467402558573, -0.000137963972509647,-0.0156254368410583,0.248003089272226,-0.223995194143894, -0.000144516656678251,-0.0150348382840091,0.263110030900474,-0.243522985729215, -0.000151069340846799,-0.0144442397269602,0.278216972528722,-0.263050777314536, -0.000157622025015458,-0.0138536411699113,0.293323914156969,-0.282578568899857, -0.000164174709183951,-0.0132630426128617,0.308430855785217,-0.302106360485178, -0.00017072739335261,-0.0126724440558126,0.323537797413465,-0.321634152070499, -0.000177280077521158,-0.0120818454987637,0.338644739041713,-0.34116194365582, -0.000183832761689873,-0.0114912469417148,0.35375168066996,-0.360689735241141, -0.000190385445858254,-0.0109006483846652,0.368858622298208,-0.380217526826462, -0.000196938130026636,-0.0103100498276161,0.383965563926456,-0.399745318411784, -0.00020349081419524,-0.00971945127056695,0.399072505554704,-0.419273109997105, -0.000210043498363843,-0.00912885271351782,0.414179447182951,-0.438800901582426, -0.000216596182532669,-0.00853825415646892,0.429286388811199,-0.458328693167747, -0.000223148866701162,-0.00794765559941979,0.444393330439447,-0.477856484753068, -0.000229701550869876,-0.00735705704237066,0.459500272067695,-0.497384276338389, -0.000236254235038147,-0.00676645848532109,0.474607213695942,-0.51691206792371, -0.000242806919206418,-0.00617585992827152,0.48971415532419,-0.536439859509031, -0.000249359603375243,-0.00558526137122239,0.504821096952438,-0.555967651094352, -0.000255912287543847,-0.00499466281417371,0.519928038580686,-0.575495442679673, -0.000262464971712006,-0.00440406425712414,0.535034980208933,-0.595023234264994, -0.000269017655880943,-0.0038134657000759,0.550141921837181,-0.614551025850316, -0.000275570340049325,-0.00322286714302589,0.565248863465429,-0.634078817435636, -0.000102721984339249,-0.0148324973710203,0.196881300534295,-0.171751042899428, -0.00010783666674502,-0.0142382113384385,0.211042239576902,-0.192007617805724, -0.000112951349151125,-0.0136439253058569,0.225203178619509,-0.21226419271202, -0.000118066031557229,-0.0130496392732753,0.239364117662116,-0.232520767618316, -0.000123180713963111,-0.0124553532406937,0.253525056704723,-0.252777342524612, -0.000128295396369438,-0.0118610672081121,0.26768599574733,-0.273033917430908, -0.000133410078774987,-0.0112667811755298,0.281846934789937,-0.293290492337204, -0.000138524761181258,-0.0106724951429484,0.296007873832544,-0.3135470672435, -0.000143639443587362,-0.0100782091103671,0.310168812875151,-0.333803642149796, -0.000148754125993356,-0.00948392307778523,0.324329751917758,-0.354060217056092, -0.00015386880839896,-0.00888963704520296,0.338490690960366,-0.374316791962388, -0.000158983490805009,-0.00829535101262158,0.352651630002973,-0.394573366868684, -0.000164098173211502,-0.00770106498004042,0.366812569045579,-0.41482994177498, -0.000169212855617218,-0.00710677894745815,0.380973508088187,-0.435086516681276, -0.000174327538023045,-0.00651249291487654,0.395134447130794,-0.455343091587571, -0.000179442220429316,-0.00591820688229516,0.409295386173401,-0.475599666493867, -0.00018455690283492,-0.00532392084971289,0.423456325216008,-0.495856241400163, -0.000189671585241191,-0.00472963481713107,0.437617264258615,-0.516112816306459, -0.000194786267647018,-0.00413534878454991,0.451778203301222,-0.536369391212755, -0.000199900950052845,-0.00354106275196786,0.465939142343829,-0.556625966119051, -0.000205015632458894,-0.0029467767193867,0.480100081386436,-0.576882541025347, -0.00021013031486472,-0.00235249068680465,0.494261020429043,-0.597139115931643, -0.000215244997271546,-0.00175820465422349,0.50842195947165,-0.617395690837939, -0.000220359679677706,-0.00116391862164189,0.522582898514258,-0.637652265744235, -0.000225474362083755,-0.000569632589060731,0.536743837556864,-0.657908840650531, -8.6652485557559e-05,-0.0124793789045492,0.190733029769109,-0.178064213728622, -9.04392157989875e-05,-0.0119066285146803,0.203909185421869,-0.199046576831916, -9.42259460405825e-05,-0.0113338781248116,0.217085341074628,-0.220028939935211, -9.80126762819555e-05,-0.0107611277349426,0.230261496727388,-0.241011303038506, -0.000101799406523106,-0.0101883773450735,0.243437652380147,-0.2619936661418, -0.000105586136764757,-0.00961562695520479,0.256613808032907,-0.282976029245095, -0.000109372867006075,-0.00904287656533564,0.269789963685667,-0.30395839234839, -0.000113159597247336,-0.00847012617546672,0.282966119338427,-0.324940755451684, -0.000116946327488932,-0.00789737578559802,0.296142274991186,-0.345923118554979, -0.000120733057730193,-0.00732462539572887,0.309318430643946,-0.366905481658273, -0.000124519787971455,-0.00675187500585972,0.322494586296706,-0.387887844761568, -0.000128306518213162,-0.00617912461599124,0.335670741949465,-0.408870207864863, -0.000132093248454535,-0.00560637422612231,0.348846897602225,-0.429852570968157, -0.000135879978695352,-0.0050336238362525,0.362023053254985,-0.450834934071452, -0.000139666708937169,-0.00446087344638424,0.375199208907744,-0.471817297174747, -0.000143453439178653,-0.00388812305651554,0.388375364560504,-0.492799660278041, -0.000147240169419693,-0.00331537266664594,0.401551520213264,-0.513782023381336, -0.000151026899661177,-0.00274262227677746,0.414727675866023,-0.53476438648463, -0.000154813629902661,-0.00216987188690831,0.427903831518783,-0.555746749587925, -0.000158600360144145,-0.00159712149703939,0.441079987171543,-0.57672911269122, -0.000162387090385629,-0.00102437110717046,0.454256142824303,-0.597711475794514, -0.000166173820627558,-0.00045162071730287,0.467432298477061,-0.618693838897809, -0.000169960550867931,0.000121129672567832,0.480608454129822,-0.639676202001103, -0.000173747281108749,0.000693880062437202,0.493784609782582,-0.660658565104398, -0.000177534011350899,0.00126663045230568,0.506960765435341,-0.681640928207693, -7.1027321613959e-05,-0.0104478336416512,0.184600051096082,-0.184013605863442, -7.36838230560588e-05,-0.009918610326345,0.196809197647762,-0.205679935662332, -7.63403244982697e-05,-0.0093893870110392,0.209018344199441,-0.227346265461221, -7.8996825940203e-05,-0.00886016369573273,0.221227490751121,-0.249012595260111, -8.16533273819142e-05,-0.00833094038042614,0.233436637302801,-0.270678925059, -8.43098288239585e-05,-0.0078017170651199,0.245645783854481,-0.29234525485789, -8.6966330266558e-05,-0.00727249374981431,0.257854930406161,-0.31401158465678, -8.96228317078807e-05,-0.00674327043450718,0.270064076957841,-0.335677914455669, -9.2279333150036e-05,-0.00621404711920093,0.282273223509521,-0.357344244254559, -9.49358345924134e-05,-0.00568482380389512,0.294482370061201,-0.379010574053448, -9.75923360340136e-05,-0.00515560048858865,0.306691516612881,-0.400676903852338, -0.000100248837476169,-0.00462637717328218,0.318900663164561,-0.422343233651227, -0.000102905338917991,-0.00409715385797549,0.331109809716241,-0.444009563450116, -0.000105561840360369,-0.00356793054267013,0.343318956267921,-0.465675893249006, -0.000108218341802191,-0.00303870722736388,0.355528102819601,-0.487342223047896, -0.000110874843244013,-0.00250948391205696,0.367737249371281,-0.509008552846785, -0.000113531344686169,-0.00198026059675094,0.379946395922961,-0.530674882645675, -0.00011618784612788,-0.00145103728144425,0.392155542474641,-0.552341212444564, -0.000118844347570035,-0.000921813966138441,0.404364689026321,-0.574007542243454, -0.00012150084901219,-0.00039259065083197,0.416573835578001,-0.595673872042343, -0.000124157350454346,0.000136632664474057,0.428782982129681,-0.617340201841233, -0.000126813851896501,0.000665855979780083,0.440992128681361,-0.639006531640122, -0.000129470353338546,0.00119507929508611,0.45320127523304,-0.660672861439012, -0.000132126854780035,0.00172430261039347,0.465410421784721,-0.682339191237901, -0.000134783356221746,0.00225352592569994,0.477619568336401,-0.704005521036791, -5.66735923779316e-05,-0.00878523326279179,0.178835327103749,-0.189335398970885, -5.84432627911413e-05,-0.00831420363354363,0.190147432215679,-0.211613544088693, -6.02129332041845e-05,-0.00784317400429546,0.20145953732761,-0.233891689206501, -6.19826036174498e-05,-0.0073721443750473,0.21277164243954,-0.256169834324309, -6.37522740309926e-05,-0.0069011147457998,0.224083747551471,-0.278447979442117, -6.55219444437027e-05,-0.00643008511655085,0.235395852663401,-0.300726124559925, -6.72916148570235e-05,-0.00595905548730302,0.246707957775332,-0.323004269677733, -6.90612852701222e-05,-0.00548802585805497,0.258020062887262,-0.345282414795541, -7.08309556830544e-05,-0.00501699622880669,0.269332167999193,-0.36756055991335, -7.26006260964862e-05,-0.00454596659955864,0.280644273111123,-0.389838705031157, -7.43702965095849e-05,-0.00407493697031036,0.291956378223054,-0.412116850148966, -7.61399669229057e-05,-0.00360390734106253,0.303268483334984,-0.434394995266774, -7.79096373356714e-05,-0.00313287771181425,0.314580588446915,-0.456673140384582, -7.96793077489921e-05,-0.00266184808256598,0.325892693558846,-0.47895128550239, -8.14489781622019e-05,-0.00219081845331792,0.337204798670776,-0.501229430620198, -8.32186485754116e-05,-0.00171978882406987,0.348516903782706,-0.523507575738006, -8.49883189885103e-05,-0.00124875919482181,0.359829008894637,-0.545785720855814, -8.67579894016091e-05,-0.000777729565573537,0.371141114006567,-0.568063865973622, -8.85276598142637e-05,-0.000306699936324595,0.382453219118498,-0.590342011091431, -9.02973302275845e-05,0.000164329692923015,0.393765324230428,-0.612620156209239, -9.20670006414603e-05,0.000635359322170626,0.405077429342359,-0.634898301327047, -9.3836671054115e-05,0.00110638895141912,0.416389534454289,-0.657176446444855, -9.56063414672137e-05,0.00157741858066762,0.42770163956622,-0.679454591562663, -9.73760118809786e-05,0.00204844820991434,0.43901374467815,-0.701732736680471, -9.91456822939663e-05,0.00251947783916284,0.450325849790081,-0.724010881798279, -4.41544366463487e-05,-0.00748260075409668,0.173706046862735,-0.193878339384689, -4.52796283268442e-05,-0.00707573890148239,0.184228454668077,-0.216678759698467, -4.64048200072842e-05,-0.00666887704886809,0.194750862473419,-0.239479180012245, -4.75300116875021e-05,-0.00626201519625336,0.205273270278762,-0.262279600326023, -4.86552033679977e-05,-0.00585515334363906,0.215795678084104,-0.2850800206398, -4.97803950484377e-05,-0.00544829149102477,0.226318085889447,-0.307880440953578, -5.09055867286556e-05,-0.00504142963841026,0.236840493694789,-0.330680861267356, -5.20307784092622e-05,-0.00463456778579618,0.247362901500131,-0.353481281581134, -5.31559700895357e-05,-0.00422770593318145,0.257885309305474,-0.376281701894912, -5.42811617703087e-05,-0.0038208440805676,0.268407717110816,-0.39908212220869, -5.54063534504712e-05,-0.00341398222795308,0.278930124916158,-0.421882542522468, -5.65315451309667e-05,-0.00300712037533857,0.289452532721501,-0.444682962836246, -5.76567368110181e-05,-0.00260025852272383,0.299974940526843,-0.467483383150023, -5.87819284917357e-05,-0.00219339667010998,0.310497348332185,-0.490283803463801, -5.99071201718981e-05,-0.00178653481749524,0.321019756137528,-0.513084223777579, -6.10323118526157e-05,-0.00137967296488095,0.33154216394287,-0.535884644091357, -6.21575035328892e-05,-0.00097281111226688,0.342064571748212,-0.558685064405135, -6.32826952133847e-05,-0.000565949259652143,0.352586979553555,-0.581485484718913, -6.44078868934361e-05,-0.000159087407037628,0.363109387358897,-0.604285905032691, -6.55330785739316e-05,0.000247774445576887,0.37363179516424,-0.627086325346468, -6.66582702544272e-05,0.000654636298190958,0.384154202969582,-0.649886745660246, -6.77834619342566e-05,0.00106149815080636,0.394676610774924,-0.672687165974024, -6.89086536156402e-05,0.0014683600034191,0.405199018580266,-0.695487586287802, -7.00338452958027e-05,0.00187522185603362,0.415721426385608,-0.71828800660158, -7.11590369755211e-05,0.00228208370864946,0.426243834190951,-0.741088426915357, -3.37148869941073e-05,-0.00649508245527053,0.16935618944763,-0.197604168756539, -3.44027460754681e-05,-0.00615086794371156,0.17921448092606,-0.220832925805578, -3.50906051568844e-05,-0.00580665343215259,0.18907277240449,-0.244061682854617, -3.57784642380787e-05,-0.0054624389205935,0.19893106388292,-0.267290439903655, -3.64663233196061e-05,-0.00511822440903487,0.208789355361349,-0.290519196952694, -3.71541824009669e-05,-0.00477400989747623,0.218647646839779,-0.313747954001732, -3.78420414818836e-05,-0.0044297953859167,0.228505938318209,-0.336976711050771, -3.8529900563522e-05,-0.00408558087435806,0.238364229796639,-0.360205468099809, -3.92177596448828e-05,-0.0037413663627992,0.248222521275069,-0.383434225148848, -3.99056187261326e-05,-0.00339715185124034,0.258080812753498,-0.406662982197887, -4.05934778077155e-05,-0.0030529373396817,0.267939104231928,-0.429891739246925, -4.12813368889653e-05,-0.00270872282812262,0.277797395710358,-0.453120496295964, -4.19691959701041e-05,-0.00236450831656332,0.287655687188788,-0.476349253345002, -4.26570550516869e-05,-0.0020202938050049,0.297513978667218,-0.499578010394041, -4.33449141328257e-05,-0.00167607929344604,0.307372270145647,-0.522806767443079, -4.40327732141865e-05,-0.00133186478188674,0.317230561624077,-0.546035524492118, -4.47206322956584e-05,-0.0009876502703281,0.327088853102507,-0.569264281541157, -4.54084913775743e-05,-0.000643435758770572,0.336947144580936,-0.592493038590195, -4.609635045838e-05,-0.000299221247210379,0.346805436059367,-0.615721795639234, -4.67842095400739e-05,4.49932643480366e-05,0.356663727537796,-0.638950552688272, -4.74720686211016e-05,0.000389207775907341,0.366522019016226,-0.662179309737311, -4.81599277020184e-05,0.000733422287467089,0.376380310494657,-0.685408066786349, -4.88477867841564e-05,0.00107763679902462,0.386238601973086,-0.708636823835388, -4.95356458651841e-05,0.00142185131058392,0.396096893451516,-0.731865580884426, -5.02235049457678e-05,0.00176606582214411,0.405955184929946,-0.755094337933465, -2.53269074744766e-05,-0.00576359696272943,0.165812589859222,-0.200560773090004, -2.57347397882857e-05,-0.00547555331318617,0.175133322754538,-0.224129433586372, -2.61425721022057e-05,-0.00518750966364323,0.184454055649854,-0.24769809408274, -2.65504044159037e-05,-0.00489946601409996,0.193774788545169,-0.271266754579109, -2.69582367299903e-05,-0.00461142236455747,0.203095521440484,-0.294835415075477, -2.73660690439659e-05,-0.00432337871501431,0.2124162543358,-0.318404075571845, -2.77739013578859e-05,-0.00403533506547138,0.221736987231115,-0.341972736068213, -2.81817336717505e-05,-0.00374729141592822,0.231057720126431,-0.365541396564581, -2.8589565985282e-05,-0.00345924776638462,0.240378453021747,-0.38911005706095, -2.8997398299202e-05,-0.00317120411684213,0.249699185917062,-0.412678717557318, -2.94052306132331e-05,-0.00288316046729875,0.259019918812378,-0.436247378053686, -2.98130629272642e-05,-0.00259511681775582,0.268340651707693,-0.459816038550054, -3.02208952411842e-05,-0.0023070731682131,0.277661384603008,-0.483384699046422, -3.06287275551043e-05,-0.00201902951867039,0.286982117498324,-0.506953359542791, -3.10365598688023e-05,-0.00173098586912679,0.29630285039364,-0.530522020039159, -3.14443921828333e-05,-0.00144294221958408,0.305623583288955,-0.554090680535527, -3.18522244966424e-05,-0.0011548985700407,0.314944316184271,-0.577659341031895, -3.22600568100073e-05,-0.000866854920496873,0.324265049079587,-0.601228001528264, -3.26678891243715e-05,-0.000578811270954827,0.333585781974902,-0.624796662024632, -3.30757214377364e-05,-0.000290767621410559,0.342906514870218,-0.648365322521, -3.34835537521005e-05,-2.72397186851236e-06,0.352227247765533,-0.671933983017368, -3.38913860662426e-05,0.000285319677674423,0.361547980660848,-0.695502643513736, -3.42992183800517e-05,0.000573363327217802,0.370868713556164,-0.719071304010104, -3.47070506944158e-05,0.000861406976759849,0.380189446451479,-0.742639964506473, -3.51148830076697e-05,0.00114945062630367,0.389510179346795,-0.766208625002841, -1.8783850970705e-05,-0.0052299450629808,0.163017770292857,-0.202846187453344, -1.90205372084806e-05,-0.004989251250889,0.171916578229367,-0.226677588625522, -1.92572234464228e-05,-0.00474855743879754,0.180815386165876,-0.2505089897977, -1.94939096846425e-05,-0.00450786362670641,0.189714194102386,-0.274340390969877, -1.97305959224181e-05,-0.00426716981461484,0.198613002038896,-0.298171792142055, -1.99672821603603e-05,-0.00402647600252304,0.207511809975406,-0.322003193314233, -2.02039683986355e-05,-0.00378578219043213,0.216410617911916,-0.345834594486411, -2.04406546364666e-05,-0.00354508837834056,0.225309425848426,-0.369665995658589, -2.06773408743532e-05,-0.0033043945662492,0.234208233784935,-0.393497396830766, -2.0914027112573e-05,-0.00306370075415785,0.243107041721445,-0.417328798002944, -2.1150713350182e-05,-0.00282300694206561,0.252005849657956,-0.441160199175122, -2.13873995880132e-05,-0.00258231312997403,0.260904657594466,-0.464991600347299, -2.16240858261774e-05,-0.0023416193178829,0.269803465530975,-0.488823001519477, -2.18607720640085e-05,-0.00210092550579133,0.278702273467485,-0.512654402691655, -2.20974583020617e-05,-0.0018602316937002,0.287601081403995,-0.536485803863833, -2.23341445404479e-05,-0.00161953788160907,0.296499889340505,-0.560317205036011, -2.2570830778279e-05,-0.00137884406951772,0.305398697277014,-0.584148606208188, -2.28075170155551e-05,-0.00113815025742525,0.314297505213525,-0.607980007380366, -2.30442032542744e-05,-0.000897456445334566,0.323196313150035,-0.631811408552544, -2.32808894922165e-05,-0.000656762633243435,0.332095121086544,-0.655642809724722, -2.35175757300476e-05,-0.000416068821151416,0.340993929023054,-0.6794742108969, -2.37542619677678e-05,-0.000175375009059398,0.349892736959565,-0.703305612069077, -2.39909482064871e-05,6.5318803031289e-05,0.358791544896074,-0.727137013241255, -2.42276344442072e-05,0.000306012615122864,0.367690352832584,-0.750968414413433, -2.44643206812611e-05,0.000546706427215771,0.376589160769095,-0.774799815585611, -1.37954632438153e-05,-0.00484425669981303,0.160868623283244,-0.204577197891451, -1.39311530069075e-05,-0.00464171414675896,0.16944414443389,-0.228607603174059, -1.40668427697221e-05,-0.00443917159370444,0.178019665584536,-0.252638008456667, -1.42025325325368e-05,-0.00423662904064992,0.186595186735182,-0.276668413739276, -1.4338222295518e-05,-0.00403408648759562,0.195170707885828,-0.300698819021884, -1.44739120585546e-05,-0.00383154393454155,0.203746229036474,-0.324729224304492, -1.46096018212027e-05,-0.00362900138148681,0.21232175018712,-0.3487596295871, -1.47452915842394e-05,-0.00342645882843251,0.220897271337766,-0.372790034869709, -1.48809813473871e-05,-0.00322391627537866,0.229472792488412,-0.396820440152317, -1.50166711101463e-05,-0.00302137372232392,0.238048313639058,-0.420850845434925, -1.51523608730164e-05,-0.00281883116926962,0.246623834789704,-0.444881250717534, -1.52880506358866e-05,-0.00261628861621532,0.25519935594035,-0.468911656000142, -1.54237403990898e-05,-0.00241374606316125,0.263774877090996,-0.49294206128275, -1.55594301614048e-05,-0.00221120351010584,0.272350398241642,-0.516972466565358, -1.56951199247191e-05,-0.00200866095705243,0.280925919392287,-0.541002871847967, -1.58308096877002e-05,-0.00180611840399814,0.289501440542933,-0.565033277130575, -1.59664994504594e-05,-0.0016035758509434,0.298076961693579,-0.589063682413183, -1.61021892132185e-05,-0.00140103329788888,0.306652482844225,-0.613094087695792, -1.62378789767548e-05,-0.00119849074483547,0.315228003994871,-0.6371244929784, -1.63735687394029e-05,-0.000995948191780283,0.323803525145518,-0.661154898261008, -1.650925850194e-05,-0.000793405638725986,0.332379046296163,-0.685185303543616, -1.66449482655873e-05,-0.000590863085672577,0.340954567446809,-0.709215708826225, -1.67806380280133e-05,-0.00038832053261828,0.349530088597454,-0.733246114108833, -1.69163277909945e-05,-0.000185777979562651,0.358105609748101,-0.757276519391441, -1.70520175530875e-05,1.67645734920896e-05,0.366681130898747,-0.78130692467405, -1.00576699147426e-05,-0.00456702303964351,0.159247652011238,-0.205868193197421, -1.0135185701865e-05,-0.00439422047996585,0.167579980382908,-0.230047016633253, -1.0212701489265e-05,-0.00422141792028874,0.175912308754578,-0.254225840069085, -1.02902172761654e-05,-0.00404861536061096,0.184244637126249,-0.278404663504917, -1.03677330632324e-05,-0.00387581280093308,0.192576965497919,-0.302583486940748, -1.04452488506879e-05,-0.00370301024125586,0.20090929386959,-0.32676231037658, -1.05227646374773e-05,-0.00353020768157797,0.20924162224126,-0.350941133812412, -1.06002804247662e-05,-0.00335740512190075,0.21757395061293,-0.375119957248244, -1.06777962113336e-05,-0.00318460256222242,0.225906278984601,-0.399298780684076, -1.07553119989001e-05,-0.0030118000025452,0.234238607356271,-0.423477604119908, -1.08328277860226e-05,-0.00283899744286753,0.242570935727942,-0.447656427555739, -1.09103435724789e-05,-0.0026661948831892,0.250903264099612,-0.471835250991571, -1.09878593598234e-05,-0.0024933923235122,0.259235592471282,-0.496014074427403, -1.10653751469458e-05,-0.00232058976383476,0.267567920842952,-0.520192897863235, -1.11428909340683e-05,-0.00214778720415709,0.275900249214623,-0.544371721299067, -1.12204067215238e-05,-0.00197498464447943,0.284232577586293,-0.568550544734899, -1.12979225077581e-05,-0.00180218208480132,0.292564905957964,-0.592729368170731, -1.13754382948805e-05,-0.00162937952512321,0.300897234329634,-0.616908191606562, -1.14529540830022e-05,-0.0014565769654471,0.309229562701304,-0.641087015042394, -1.15304698701246e-05,-0.00128377440576966,0.317561891072974,-0.665265838478226, -1.1607985656692e-05,-0.00111097184609177,0.325894219444644,-0.689444661914058, -1.16855014437034e-05,-0.000938169286413437,0.334226547816315,-0.71362348534989, -1.17630172306038e-05,-0.000765366726735994,0.342558876187985,-0.737802308785722, -1.18405330183924e-05,-0.000592564167059439,0.350891204559655,-0.761981132221554, -1.19180488048487e-05,-0.000419761607380664,0.359223532931326,-0.786159955657385, -7.29283658090774e-06,-0.00436834400669828,0.158042682794528,-0.206819971217035, -7.33731940139037e-06,-0.00421817220059251,0.166194578572552,-0.23110821498561, -7.38180222170648e-06,-0.00406800039448674,0.174346474350575,-0.255396458754186, -7.42628504235565e-06,-0.00391782858838119,0.182498370128599,-0.279684702522762, -7.47076786294931e-06,-0.00376765678227553,0.190650265906622,-0.303972946291337, -7.51525068343195e-06,-0.00361748497616965,0.198802161684646,-0.328261190059913, -7.55973350391459e-06,-0.00346731317006421,0.206954057462669,-0.352549433828488, -7.60421632450825e-06,-0.00331714136395855,0.215105953240692,-0.376837677597064, -7.64869914465782e-06,-0.00316696955785201,0.223257849018716,-0.401125921365639, -7.69318196547353e-06,-0.00301679775174679,0.23140974479674,-0.425414165134215, -7.7376647861227e-06,-0.00286662594564135,0.239561640574763,-0.449702408902791, -7.78214760666085e-06,-0.0027164541395357,0.247713536352787,-0.473990652671366, -7.82663042686593e-06,-0.00256628233342915,0.255865432130811,-0.498278896439942, -7.8711132475151e-06,-0.00241611052732416,0.264017327908834,-0.522567140208517, -7.91559606772019e-06,-0.00226593872121783,0.272169223686857,-0.546855383977093, -7.96007888870243e-06,-0.00211576691511306,0.28032111946488,-0.571143627745669, -8.00456170868546e-06,-0.00196559510900607,0.288473015242905,-0.595431871514244, -8.04904452911259e-06,-0.00181542330290041,0.296624911020928,-0.61972011528282, -8.09352734987279e-06,-0.00166525149679497,0.304776806798951,-0.644008359051395, -8.13801017041094e-06,-0.00151507969068909,0.312928702576975,-0.668296602819971, -8.18249299028295e-06,-0.00136490788458277,0.321080598354999,-0.692584846588546, -8.22697581137621e-06,-0.00121473607847777,0.329232494133022,-0.716873090357122, -8.27145863191436e-06,-0.00106456427237234,0.337384389911045,-0.741161334125698, -8.3159414518974e-06,-0.000914392466265568,0.345536285689069,-0.765449577894273, -8.36042427254657e-06,-0.000764220660160575,0.353688181467092,-0.789737821662849, -5.26701267977714e-06,-0.00422618296398847,0.157156541514628,-0.207515707361147, -5.29283753597509e-06,-0.0040929330193602,0.165175931345386,-0.2318839358308, -5.31866239233958e-06,-0.00395968307473227,0.173195321176145,-0.256252164300453, -5.34448724853753e-06,-0.00382643313010433,0.181214711006903,-0.280620392770105, -5.370312104791e-06,-0.00369318318547585,0.189234100837662,-0.304988621239758, -5.39613696126651e-06,-0.00355993324084802,0.19725349066842,-0.329356849709411, -5.42196181751997e-06,-0.0034266832962202,0.205272880499178,-0.353725078179063, -5.44778667382895e-06,-0.00329343335159193,0.213292270329937,-0.378093306648716, -5.4736115300269e-06,-0.00316018340696389,0.221311660160695,-0.402461535118369, -5.49943638605832e-06,-0.0030269334623354,0.229331049991454,-0.426829763588022, -5.52526124297792e-06,-0.00289368351770847,0.237350439822212,-0.451197992057674, -5.55108609923138e-06,-0.00276043357307998,0.24536982965297,-0.475566220527327, -5.57691095515178e-06,-0.00262718362845171,0.253389219483729,-0.49993444899698, -5.60273581151627e-06,-0.00249393368382322,0.261408609314488,-0.524302677466633, -5.62856066776973e-06,-0.00236068373919562,0.269427999145246,-0.548670905936285, -5.65438552424524e-06,-0.0022274337945678,0.277447388976004,-0.573039134405938, -5.68021038060973e-06,-0.00209418384993931,0.285466778806763,-0.597407362875591, -5.70603523697422e-06,-0.00196093390531171,0.293486168637521,-0.621775591345244, -5.73186009300564e-06,-0.00182768396068278,0.30150555846828,-0.646143819814896, -5.75768494948115e-06,-0.00169443401605562,0.309524948299038,-0.670512048284549, -5.78350980573461e-06,-0.00156118407142758,0.317544338129796,-0.694880276754202, -5.80933466187705e-06,-0.00142793412679909,0.325563727960555,-0.719248505223854, -5.83515951835256e-06,-0.00129468418217193,0.333583117791313,-0.743616733693507, -5.86098437460603e-06,-0.00116143423754256,0.341602507622072,-0.76798496216316, -5.88680923063745e-06,-0.00102818429291451,0.349621897452831,-0.792353190632813, -3.7929089066191e-06,-0.00412453948172586,0.156509992496728,-0.208021117756644, -3.80816581302401e-06,-0.00400378321276129,0.164432800452917,-0.232447450293115, -3.82342271937341e-06,-0.0038830269437965,0.172355608409106,-0.256873782829585, -3.83867962588935e-06,-0.00376227067483215,0.180278416365295,-0.281300115366056, -3.85393653240529e-06,-0.00364151440586769,0.188201224321484,-0.305726447902526, -3.86919343864367e-06,-0.00352075813690256,0.196124032277674,-0.330152780438997, -3.88445034538165e-06,-0.0034000018679381,0.204046840233863,-0.354579112975468, -3.89970725139799e-06,-0.00327924559897319,0.211969648190052,-0.379005445511938, -3.91496415808046e-06,-0.00315848933000873,0.219892456146241,-0.403431778048409, -3.93022106437435e-06,-0.00303773306104405,0.22781526410243,-0.427858110584879, -3.94547797077927e-06,-0.00291697679207958,0.23573807205862,-0.45228444312135, -3.96073487718418e-06,-0.0027962205231149,0.243660880014809,-0.476710775657821, -3.97599178414421e-06,-0.00267546425415066,0.251583687970998,-0.501137108194291, -3.9912486904381e-06,-0.00255470798518598,0.259506495927187,-0.525563440730762, -4.00650559684301e-06,-0.00243395171622152,0.267429303883376,-0.549989773267232, -4.02176250324793e-06,-0.00231319544725683,0.275352111839565,-0.574416105803703, -4.03701940987489e-06,-0.00219243917829237,0.283274919795754,-0.598842438340174, -4.05227631583571e-06,-0.0020716829093268,0.291197727751944,-0.623268770876644, -4.06753322268472e-06,-0.001950926640363,0.299120535708133,-0.647695103413115, -4.08279012875656e-06,-0.00183017037139832,0.307043343664322,-0.672121435949585, -4.09804703493943e-06,-0.00170941410243231,0.314966151620512,-0.696547768486056, -4.11330394201048e-06,-0.0015886578334694,0.3228889595767,-0.720974101022527, -4.12856084797131e-06,-0.00146790156450338,0.33081176753289,-0.745400433558997, -4.14381775470929e-06,-0.00134714529553959,0.338734575489079,-0.769826766095468, -4.15907466067011e-06,-0.00122638902657402,0.346657383445268,-0.794253098631938, -2.72563913966684e-06,-0.0040518900022144,0.156040960067775,-0.208386606462226, -2.73485035878762e-06,-0.00394027400304098,0.163893754584341,-0.232854957090053, -2.74406157790841e-06,-0.00382865800386778,0.171746549100906,-0.257323307717879, -2.7532727970847e-06,-0.0037170420046948,0.179599343617471,-0.281791658345706, -2.76248401603896e-06,-0.00360542600552116,0.187452138134037,-0.306260008973533, -2.77169523510423e-06,-0.00349381000634774,0.195304932650603,-0.33072835960136, -2.78090645444706e-06,-0.00338219400717477,0.203157727167168,-0.355196710229186, -2.79011767329029e-06,-0.00327057800800135,0.211010521683733,-0.379665060857013, -2.79932889218903e-06,-0.00315896200882793,0.218863316200299,-0.40413341148484, -2.80854011158738e-06,-0.00304734600965517,0.226716110716864,-0.428601762112666, -2.81775133059714e-06,-0.00293573001048153,0.23456890523343,-0.453070112740493, -2.8269625496069e-06,-0.00282411401130833,0.242421699749995,-0.47753846336832, -2.83617376861667e-06,-0.00271249801213469,0.250274494266561,-0.502006813996147, -2.84538498740439e-06,-0.00260088201296127,0.258127288783126,-0.526475164623973, -2.85459620708028e-06,-0.00248926601378852,0.265980083299692,-0.5509435152518, -2.863807425868e-06,-0.00237765001461465,0.273832877816258,-0.575411865879626, -2.87301864465572e-06,-0.00226603401544168,0.281685672332822,-0.599880216507453, -2.88222986355446e-06,-0.00215441801626781,0.289538466849388,-0.62434856713528, -2.89144108323036e-06,-0.00204280201709528,0.297391261365954,-0.648816917763107, -2.90065230224013e-06,-0.00193118601792186,0.305244055882519,-0.673285268390933, -2.90986352113887e-06,-0.00181957001874844,0.313096850399085,-0.69775361901876, -2.91907473981556e-06,-0.00170795401957413,0.320949644915651,-0.722221969646587, -2.92828595904737e-06,-0.0015963380204016,0.328802439432216,-0.746690320274414, -2.93749717916736e-06,-0.00148472202122951,0.336655233948781,-0.771158670902241, -2.94670839717792e-06,-0.00137310602205476,0.344508028465347,-0.795627021530067, -1.95571859751276e-06,-0.00399997040463507,0.155702119707913,-0.208650044438715, -1.96141511105141e-06,-0.00389499746393041,0.163504361235841,-0.23314868098453, -1.96711162464558e-06,-0.00379002452322552,0.17130660276377,-0.257647317530345, -1.97280813812872e-06,-0.00368505158252086,0.179108844291697,-0.282145954076159, -1.97850465172289e-06,-0.00358007864181609,0.186911085819626,-0.306644590621974, -1.98420116492848e-06,-0.00347510570111109,0.194713327347554,-0.331143227167789, -1.98989767885571e-06,-0.00337013276040632,0.202515568875482,-0.355641863713603, -1.99559419183926e-06,-0.0032651598197011,0.21031781040341,-0.380140500259418, -2.00129070571098e-06,-0.003160186878997,0.218120051931338,-0.404639136805233, -2.00698721930515e-06,-0.00305521393829222,0.225922293459266,-0.429137773351047, -2.01268373267727e-06,-0.00295024099758701,0.233724534987195,-0.453636409896862, -2.01838024593837e-06,-0.00284526805688223,0.241526776515123,-0.478135046442677, -2.02407675964356e-06,-0.00274029511617746,0.249329018043051,-0.502633682988492, -2.02977327301568e-06,-0.00263532217547247,0.257131259570979,-0.527132319534306, -2.03546978660984e-06,-0.00253034923476836,0.264933501098906,-0.551630956080121, -2.04116629987094e-06,-0.00242537629406314,0.272735742626835,-0.576129592625935, -2.04686281346511e-06,-0.00232040335335815,0.280537984154763,-0.60062822917175, -2.05255932705928e-06,-0.0022154304126536,0.288340225682691,-0.625126865717565, -2.0582558404314e-06,-0.00211045747194838,0.29614246721062,-0.64962550226338, -2.06395235391454e-06,-0.00200548453124361,0.303944708738548,-0.674124138809194, -2.0696488679528e-06,-0.00190051159053972,0.311746950266475,-0.698622775355009, -2.0753453812139e-06,-0.0017955386498345,0.319549191794404,-0.723121411900824, -2.08104189391989e-06,-0.0016905657091284,0.327351433322332,-0.747620048446638, -2.08673840751405e-06,-0.00158559276842407,0.33515367485026,-0.772118684992453, -2.09243492121924e-06,-0.0014806198277193,0.342955916378188,-0.796617321538268, -1.40175146834398e-06,-0.00396286657091116,0.155458068124965,-0.208839477139238, -1.40536158738103e-06,-0.00386269895458025,0.163223912236866,-0.233359891650814, -1.408971706085e-06,-0.00376253133824855,0.170989756348769,-0.257880306162391, -1.41258182501103e-06,-0.00366236372191753,0.17875560046067,-0.282400720673967, -1.41619194360398e-06,-0.00356219610558584,0.186521444572572,-0.306921135185543, -1.41980206286307e-06,-0.00346202848925503,0.194287288684474,-0.331441549697119, -1.42341218123399e-06,-0.00336186087292312,0.202053132796376,-0.355961964208696, -1.42702230027103e-06,-0.00326169325659209,0.209818976908278,-0.380482378720272, -1.43063241914154e-06,-0.00316152564026062,0.21758482102018,-0.405002793231848, -1.43424253751245e-06,-0.00306135802392871,0.225350665132082,-0.429523207743425, -1.43785265682705e-06,-0.00296119040759812,0.233116509243984,-0.454043622255001, -1.4414627753645e-06,-0.00286102279126621,0.240882353355886,-0.478564036766577, -1.44507289445706e-06,-0.00276085517493518,0.248648197467788,-0.503084451278153, -1.4486830129945e-06,-0.00266068755860349,0.25641404157969,-0.527604865789729, -1.4522931323091e-06,-0.00256051994227313,0.264179885691591,-0.552125280301306, -1.45590325040246e-06,-0.00246035232594033,0.271945729803494,-0.576645694812882, -1.45951336982808e-06,-0.00236018470960975,0.279711573915395,-0.601166109324458, -1.46312348858757e-06,-0.0022600170932785,0.287477418027297,-0.625686523836035, -1.46673360712501e-06,-0.00215984947694636,0.295243262139199,-0.650206938347611, -1.47034372599553e-06,-0.00205968186061511,0.303009106251101,-0.674727352859187, -1.47395384475502e-06,-0.00195951424428431,0.310774950363003,-0.699247767370763, -1.47756396406962e-06,-0.00185934662795351,0.318540794474904,-0.72376818188234, -1.48117408294013e-06,-0.00175917901162226,0.326306638586806,-0.748288596393916, -1.48478420181064e-06,-0.00165901139529057,0.334072482698708,-0.772809010905492, -1.48839432012604e-06,-0.00155884377895932,0.34183832681061,-0.797329425417068, -0.000210381738549925,-0.040452318490265,0.23976229956605,-0.128233328183071, -0.000227178737724265,-0.0405059289058023,0.259733811745583,-0.142707906705057, -0.000243975736898605,-0.0405595393213395,0.279705323925116,-0.157182485227043, -0.00026077273607289,-0.0406131497368766,0.29967683610465,-0.171657063749029, -0.000277569735247396,-0.0406667601524141,0.319648348284183,-0.186131642271016, -0.000294366734421903,-0.0407203705679515,0.339619860463717,-0.200606220793002, -0.000311163733596076,-0.0407739809834884,0.35959137264325,-0.215080799314988, -0.000327960732770305,-0.0408275913990257,0.379562884822784,-0.229555377836974, -0.000344757731944867,-0.0408812018145632,0.399534397002317,-0.24402995635896, -0.000361554731119318,-0.0409348122301005,0.41950590918185,-0.258504534880946, -0.000378351730293658,-0.0409884226456381,0.439477421361383,-0.272979113402932, -0.000395148729467887,-0.0410420330611749,0.459448933540917,-0.287453691924918, -0.000411945728642449,-0.0410956434767127,0.47942044572045,-0.301928270446904, -0.0004287427278169,-0.04114925389225,0.499391957899984,-0.316402848968891, -0.000445539726991018,-0.0412028643077869,0.519363470079517,-0.330877427490877, -0.00046233672616558,-0.0412564747233242,0.539334982259051,-0.345352006012863, -0.000479133725340142,-0.0413100851388617,0.559306494438584,-0.359826584534849, -0.000495930724514593,-0.0413636955543994,0.579278006618117,-0.374301163056835, -0.000512727723688267,-0.0414173059699363,0.59924951879765,-0.388775741578821, -0.000529524722863051,-0.0414709163854734,0.619221030977185,-0.403250320100808, -0.000546321722037391,-0.0415245268010109,0.639192543156717,-0.417724898622794, -0.000563118721211731,-0.0415781372165478,0.659164055336251,-0.432199477144779, -0.000579915720385737,-0.0416317476320849,0.679135567515784,-0.446674055666765, -0.000596712719560522,-0.0416853580476224,0.699107079695318,-0.461148634188752, -0.000613509718734195,-0.0417389684631591,0.719078591874852,-0.475623212710738, -0.000206932482338329,-0.0392510675745538,0.238768744075897,-0.130194478901327, -0.000223245994934507,-0.0392539673040582,0.258550278031811,-0.144883058126622, -0.000239559507530407,-0.0392568670335623,0.278331811987725,-0.159571637351917, -0.000255873020126418,-0.0392597667630666,0.298113345943639,-0.174260216577211, -0.000272186532722207,-0.0392626664925708,0.317894879899553,-0.188948795802506, -0.000288500045318385,-0.0392655662220753,0.337676413855467,-0.203637375027801, -0.000304813557914396,-0.0392684659515796,0.357457947811381,-0.218325954253096, -0.000321127070510296,-0.0392713656810839,0.377239481767295,-0.233014533478391, -0.000337440583105919,-0.0392742654105875,0.397021015723209,-0.247703112703685, -0.000353754095702263,-0.0392771651400925,0.416802549679122,-0.26239169192898, -0.000370067608298164,-0.0392800648695968,0.436584083635036,-0.277080271154274, -0.000386381120893953,-0.0392829645991009,0.456365617590951,-0.291768850379569, -0.000402694633489742,-0.0392858643286047,0.476147151546865,-0.306457429604863, -0.000419008146086086,-0.0392887640581094,0.495928685502779,-0.321146008830159, -0.000435321658681542,-0.0392916637876131,0.515710219458693,-0.335834588055453, -0.000451635171277887,-0.039294563517118,0.535491753414607,-0.350523167280749, -0.00046794868387412,-0.0392974632466225,0.555273287370521,-0.365211746506043, -0.00048426219647002,-0.0393003629761266,0.575054821326434,-0.379900325731337, -0.000500575709065809,-0.0393032627056311,0.594836355282348,-0.394588904956632, -0.000516889221661265,-0.0393061624351347,0.614617889238263,-0.409277484181927, -0.000533202734257388,-0.039309062164639,0.634399423194176,-0.423966063407222, -0.000549516246854065,-0.039311961894144,0.65418095715009,-0.438654642632516, -0.000565829759449743,-0.0393148616236485,0.673962491106004,-0.453343221857811, -0.000582143272045088,-0.0393177613531517,0.693744025061918,-0.468031801083105, -0.000598456784641432,-0.0393206610826562,0.713525559017833,-0.482720380308401, -0.000202264694731835,-0.0376818875860169,0.237396666084338,-0.132797734025557, -0.000217935721911033,-0.0376206160044349,0.256920213240721,-0.147770380366291, -0.000233606749090343,-0.037559344422853,0.276443760397104,-0.162743026707025, -0.000249277776269763,-0.0374980728412712,0.295967307553488,-0.177715673047759, -0.000264948803449017,-0.0374368012596893,0.315490854709871,-0.192688319388494, -0.000280619830628659,-0.0373755296781078,0.335014401866254,-0.207660965729227, -0.000296290857808024,-0.037314258096526,0.354537949022637,-0.222633612069962, -0.000311961884987388,-0.0372529865149442,0.37406149617902,-0.237606258410696, -0.000327632912166864,-0.0371917149333627,0.393585043335403,-0.25257890475143, -0.000343303939346118,-0.0371304433517805,0.413108590491786,-0.267551551092164, -0.000358974966525483,-0.0370691717701987,0.432632137648169,-0.282524197432897, -0.00037464599370518,-0.0370079001886172,0.452155684804553,-0.297496843773632, -0.000390317020884101,-0.0369466286070348,0.471679231960936,-0.312469490114365, -0.000405988048063799,-0.0368853570254533,0.491202779117319,-0.3274421364551, -0.000421659075243164,-0.0368240854438717,0.510726326273702,-0.342414782795834, -0.000437330102422528,-0.0367628138622897,0.530249873430086,-0.357387429136568, -0.000453001129601893,-0.036701542280708,0.549773420586469,-0.372360075477302, -0.000468672156781369,-0.0366402706991265,0.569296967742852,-0.387332721818036, -0.000484343183960845,-0.0365789991175447,0.588820514899235,-0.40230536815877, -0.000500014211140209,-0.0365177275359629,0.608344062055618,-0.417278014499504, -0.000515685238319241,-0.0364564559543805,0.627867609212001,-0.432250660840238, -0.000531356265498939,-0.0363951843727994,0.647391156368384,-0.447223307180972, -0.000547027292678415,-0.0363339127912172,0.666914703524767,-0.462195953521706, -0.000562698319857668,-0.0362726412096355,0.686438250681151,-0.47716859986244, -0.000578369347037033,-0.0362113696280537,0.705961797837534,-0.492141246203175, -0.000196031289594722,-0.0356812992016964,0.235517993312198,-0.136189370655231, -0.000210864818652567,-0.0355418316680342,0.254695486392783,-0.151532112275925, -0.000225698347710135,-0.0354023641343714,0.273872979473367,-0.16687485389662, -0.000240531876767758,-0.0352628966007087,0.293050472553952,-0.182217595517314, -0.000255365405825658,-0.0351234290670464,0.312227965634536,-0.197560337138008, -0.000270198934883337,-0.034983961533384,0.33140545871512,-0.212903078758702, -0.000285032463940793,-0.034844493999721,0.350582951795705,-0.228245820379397, -0.000299865992998694,-0.0347050264660587,0.369760444876289,-0.243588562000091, -0.000314699522056427,-0.0345655589323963,0.388937937956873,-0.258931303620785, -0.00032953305111405,-0.0344260913987338,0.408115431037457,-0.274274045241479, -0.000344366580171562,-0.0342866238650708,0.427292924118042,-0.289616786862174, -0.000359200109229518,-0.0341471563314086,0.446470417198626,-0.304959528482868, -0.000374033638287363,-0.0340076887977463,0.46564791027921,-0.320302270103562, -0.000388867167345208,-0.0338682212640837,0.484825403359795,-0.335645011724257, -0.000403700696402387,-0.0337287537304207,0.50400289644038,-0.350987753344951, -0.000418534225460454,-0.0335892861967584,0.523180389520964,-0.366330494965646, -0.000433367754518077,-0.0334498186630963,0.542357882601548,-0.38167323658634, -0.000448201283576033,-0.0333103511294337,0.561535375682132,-0.397015978207034, -0.000463034812633545,-0.0331708835957709,0.580712868762717,-0.412358719827728, -0.000477868341690946,-0.0330314160621081,0.599890361843301,-0.427701461448423, -0.000492701870748902,-0.0328919485284458,0.619067854923885,-0.443044203069116, -0.000507535399806969,-0.0327524809947839,0.63824534800447,-0.458386944689811, -0.00052236892886437,-0.0326130134611207,0.657422841085054,-0.473729686310505, -0.000537202457921881,-0.0324735459274583,0.676600334165638,-0.489072427931199, -0.000552035986979171,-0.0323340783937951,0.695777827246223,-0.504415169551894, -0.000187857899902444,-0.0332097375012657,0.232980238268616,-0.140502190333995, -0.000201627460896747,-0.032979741061566,0.251701447538942,-0.156315546699342, -0.000215397021891328,-0.0327497446218665,0.270422656809268,-0.172128903064689, -0.000229166582885576,-0.0325197481821667,0.289143866079594,-0.187942259430037, -0.000242936143879768,-0.0322897517424668,0.30786507534992,-0.203755615795384, -0.000256705704874183,-0.0320597553027675,0.326586284620245,-0.219568972160732, -0.000270475265868653,-0.0318297588630676,0.345307493890572,-0.235382328526079, -0.000284244826862734,-0.0315997624233679,0.364028703160898,-0.251195684891427, -0.000298014387857037,-0.0313697659836683,0.382749912431223,-0.267009041256774, -0.000311783948851785,-0.0311397695439688,0.40147112170155,-0.282822397622121, -0.000325553509846088,-0.0309097731042691,0.420192330971875,-0.298635753987468, -0.000339323070840281,-0.0306797766645692,0.438913540242202,-0.314449110352816, -0.000353092631834917,-0.03044978022487,0.457634749512527,-0.330262466718163, -0.000366862192828665,-0.0302197837851697,0.476355958782854,-0.346075823083511, -0.000380631753823524,-0.0299897873454706,0.495077168053179,-0.361889179448858, -0.000394401314817605,-0.0297597909057707,0.513798377323505,-0.377702535814206, -0.000408170875811908,-0.0295297944660713,0.532519586593831,-0.393515892179553, -0.000421940436806323,-0.0292997980263714,0.551240795864157,-0.4093292485449, -0.000435709997800737,-0.0290698015866722,0.569962005134483,-0.425142604910247, -0.000449479558795041,-0.028839805146972,0.588683214404809,-0.440955961275595, -0.00046324911979001,-0.028609808707273,0.607404423675135,-0.456769317640942, -0.000477018680783758,-0.0283798122675725,0.626125632945461,-0.472582674006289, -0.000490788241777729,-0.0281498158278723,0.644846842215787,-0.488396030371637, -0.000504557802772254,-0.0279198193881731,0.663568051486113,-0.504209386736984, -0.00051832736376678,-0.0276898229484734,0.682289260756439,-0.520022743102332, -0.000177401834488999,-0.0302751956006273,0.229621574958222,-0.145820252902342, -0.000189864624830671,-0.0299474196245475,0.247755116306721,-0.162213916084127, -0.000202327415172232,-0.0296196436484673,0.265888657655219,-0.178607579265912, -0.000214790205513626,-0.0292918676723869,0.284022199003718,-0.195001242447697, -0.000227252995855409,-0.0289640916963072,0.302155740352216,-0.211394905629481, -0.00023971578619697,-0.0286363157202272,0.320289281700715,-0.227788568811266, -0.000252178576538531,-0.0283085397441472,0.338422823049214,-0.244182231993051, -0.000264641366879925,-0.0279807637680665,0.356556364397713,-0.260575895174836, -0.00027710415722193,-0.0276529877919869,0.374689905746211,-0.276969558356621, -0.000289566947563102,-0.0273252118159064,0.39282344709471,-0.293363221538405, -0.000302029737905052,-0.0269974358398268,0.410956988443208,-0.30975688472019, -0.000314492528246446,-0.0266696598637466,0.429090529791707,-0.326150547901975, -0.000326955318588285,-0.0263418838876666,0.447224071140205,-0.34254421108376, -0.00033941810892979,-0.0260141079115865,0.465357612488704,-0.358937874265545, -0.000351880899271295,-0.0256863319355065,0.483491153837203,-0.37533153744733, -0.000364343689613134,-0.0253585559594265,0.501624695185701,-0.391725200629115, -0.000376806479954417,-0.025030779983346,0.5197582365342,-0.4081188638109, -0.000389269270295589,-0.0247030040072653,0.537891777882699,-0.424512526992684, -0.000401732060637205,-0.0243752280311853,0.556025319231197,-0.440906190174469, -0.000414194850979155,-0.0240474520551059,0.574158860579696,-0.457299853356254, -0.000426657641320993,-0.0237196760790259,0.592292401928194,-0.473693516538039, -0.000439120431662499,-0.0233919001029461,0.610425943276693,-0.490087179719823, -0.000451583222004004,-0.0230641241268663,0.628559484625191,-0.506480842901608, -0.000464046012346286,-0.0227363481507865,0.64669302597369,-0.522874506083393, -0.000476508802687015,-0.0224085721747054,0.664826567322189,-0.539268169265178, -0.000164451401711507,-0.0269556184686348,0.225304699967009,-0.15213462225805, -0.000175377221189987,-0.0265318150541448,0.242704578377824,-0.169217309220869, -0.000186303040668245,-0.0261080116396545,0.260104456788639,-0.186299996183689, -0.000197228860146503,-0.0256842082251643,0.277504335199454,-0.203382683146508, -0.000208154679624872,-0.0252604048106744,0.294904213610269,-0.220465370109327, -0.000219080499103297,-0.0248366013961843,0.312304092021084,-0.237548057072147, -0.000230006318581777,-0.0244127979816942,0.329703970431899,-0.254630744034966, -0.000240932138060035,-0.023988994567204,0.347103848842714,-0.271713430997785, -0.000251857957538459,-0.0235651911527142,0.364503727253529,-0.288796117960605, -0.000262783777016939,-0.0231413877382243,0.381903605664344,-0.305878804923424, -0.000273709596495531,-0.0227175843237342,0.399303484075159,-0.322961491886243, -0.000284635415973455,-0.0222937809092434,0.416703362485974,-0.340044178849063, -0.000295561235451824,-0.0218699774947533,0.434103240896789,-0.357126865811882, -0.000306487054929971,-0.0214461740802632,0.451503119307604,-0.374209552774702, -0.00031741287440834,-0.0210223706657731,0.468902997718419,-0.391292239737521, -0.000328338693886709,-0.0205985672512832,0.486302876129234,-0.408374926700341, -0.000339264513365301,-0.0201747638367928,0.50370275454005,-0.42545761366316, -0.000350190332843892,-0.0197509604223036,0.521102632950864,-0.442540300625979, -0.00036111615232215,-0.0193271570078133,0.538502511361679,-0.459622987588798, -0.000372041971800408,-0.0189033535933232,0.555902389772494,-0.476705674551618, -0.000382967791278888,-0.0184795501788328,0.573302268183309,-0.493788361514437, -0.000393893610757146,-0.0180557467643427,0.590702146594124,-0.510871048477256, -0.000404819430235515,-0.0176319433498526,0.608102025004939,-0.527953735440075, -0.000415745249714439,-0.017208139935363,0.625501903415754,-0.545036422402895, -0.000426671069192364,-0.0167843365208729,0.642901781826569,-0.562119109365714, -0.00014905331718873,-0.0234070918642836,0.219970284423855,-0.159304031799408, -0.000158266061085932,-0.0229009811454691,0.236489905994488,-0.177169044500823, -0.000167478804982746,-0.0223948704266541,0.253009527565121,-0.195034057202238, -0.000176691548879948,-0.0218887597078395,0.269529149135755,-0.212899069903653, -0.000185904292776928,-0.0213826489890248,0.286048770706388,-0.230764082605069, -0.00019511703667402,-0.0208765382702105,0.302568392277021,-0.248629095306484, -0.000204329780571222,-0.0203704275513956,0.319088013847654,-0.266494108007899, -0.00021354252446848,-0.0198643168325814,0.335607635418287,-0.284359120709315, -0.000222755268365682,-0.0193582061137667,0.352127256988921,-0.30222413341073, -0.000231968012262662,-0.0188520953949518,0.368646878559554,-0.320089146112145, -0.000241180756159531,-0.0183459846761369,0.385166500130187,-0.33795415881356, -0.000250393500056401,-0.0178398739573222,0.40168612170082,-0.355819171514975, -0.000259606243953714,-0.017333763238508,0.418205743271453,-0.373684184216391, -0.000268818987851027,-0.0168276525196933,0.434725364842087,-0.391549196917806, -0.000278031731748229,-0.0163215418008789,0.45124498641272,-0.409414209619221, -0.00028724447564521,-0.0158154310820642,0.467764607983353,-0.427279222320637, -0.000296457219542079,-0.0153093203632491,0.484284229553987,-0.445144235022052, -0.000305669963439392,-0.0148032096444348,0.50080385112462,-0.463009247723467, -0.000314882707336483,-0.0142970989256206,0.517323472695252,-0.480874260424882, -0.000324095451233353,-0.013790988206805,0.533843094265886,-0.498739273126297, -0.000333308195130444,-0.0132848774879908,0.550362715836519,-0.516604285827713, -0.000342520939027535,-0.0127787667691766,0.566882337407152,-0.534469298529128, -0.00035173368292496,-0.0122726560503619,0.583401958977785,-0.552334311230543, -0.000360946426821718,-0.0117665453315472,0.599921580548418,-0.570199323931958, -0.000370159170719142,-0.0112604346127325,0.616441202119052,-0.588064336633374, -0.000131622152289179,-0.0198449451573922,0.213695836973503,-0.167042394425382, -0.00013904439169421,-0.0192822799836783,0.229208963499579,-0.18575181700769, -0.000146466631099018,-0.0187196148099639,0.244722090025656,-0.204461239589998, -0.000153888870504104,-0.0181569496362499,0.260235216551733,-0.223170662172306, -0.000161311109909024,-0.0175942844625356,0.27574834307781,-0.241880084754614, -0.00016873334931411,-0.0170316192888216,0.291261469603886,-0.260589507336921, -0.000176155588718807,-0.0164689541151073,0.306774596129963,-0.279298929919229, -0.000183577828123671,-0.015906288941393,0.32228772265604,-0.298008352501537, -0.000191000067528591,-0.0153436237676787,0.337800849182116,-0.316717775083845, -0.000198422306933344,-0.0147809585939647,0.353313975708193,-0.335427197666153, -0.000205844546338652,-0.0142182934202506,0.36882710223427,-0.35413662024846, -0.000213266785743516,-0.0136556282465363,0.384340228760346,-0.372846042830769, -0.000220689025148268,-0.013092963072822,0.399853355286423,-0.391555465413076, -0.000228111264553132,-0.012530297899108,0.4153664818125,-0.410264887995385, -0.000235533503958218,-0.0119676327253939,0.430879608338576,-0.428974310577692, -0.000242955743363304,-0.0114049675516799,0.446392734864653,-0.44768373316, -0.000250377982767724,-0.0108423023779651,0.46190586139073,-0.466393155742308, -0.000257800222172921,-0.0102796372042511,0.477418987916806,-0.485102578324616, -0.000265222461577896,-0.00971697203053679,0.492932114442883,-0.503812000906923, -0.00027264470098276,-0.00915430685682272,0.50844524096896,-0.522521423489232, -0.000280066940387069,-0.008591641683108,0.523958367495037,-0.541230846071539, -0.000287489179792821,-0.0080289765093946,0.539471494021113,-0.559940268653847, -0.000294911419197574,-0.00746631133568032,0.55498462054719,-0.578649691236155, -0.000302333658602216,-0.00690364616196604,0.570497747073266,-0.597359113818463, -0.000309755898007302,-0.00634098098825131,0.586010873599344,-0.616068536400771, -0.000112959969216286,-0.0164968703529933,0.206728616478026,-0.174951527702971, -0.000118643263656182,-0.0159114678864911,0.221152550477629,-0.194523994654184, -0.000124326558096244,-0.0153260654199894,0.235576484477233,-0.214096461605397, -0.000130009852536084,-0.0147406629534872,0.250000418476836,-0.23366892855661, -0.000135693146975813,-0.014155260486985,0.26442435247644,-0.253241395507823, -0.000141376441415653,-0.0135698580204828,0.278848286476043,-0.272813862459036, -0.000147059735855548,-0.0129844555539809,0.293272220475647,-0.292386329410249, -0.000152743030295277,-0.0123990530874787,0.30769615447525,-0.311958796361462, -0.000158426324735506,-0.0118136506209769,0.322120088474854,-0.331531263312675, -0.000164109619175012,-0.0112282481544745,0.336544022474457,-0.351103730263887, -0.000169792913614963,-0.0106428456879726,0.350967956474061,-0.3706761972151, -0.000175476208054914,-0.0100574432214704,0.365391890473664,-0.390248664166313, -0.000181159502494532,-0.00947204075496844,0.379815824473267,-0.409821131117526, -0.000186842796934705,-0.00888663828846603,0.394239758472872,-0.429393598068739, -0.000192526091374656,-0.00830123582196451,0.408663692472474,-0.448966065019952, -0.000198209385814607,-0.00771583335546255,0.423087626472078,-0.468538531971165, -0.000203892680254225,-0.00713043088896015,0.437511560471681,-0.488110998922378, -0.000209575974694065,-0.00654502842245797,0.451935494471285,-0.507683465873591, -0.000215259269134016,-0.00595962595595623,0.466359428470888,-0.527255932824804, -0.000220942563572968,-0.00537422348945249,0.480783362470493,-0.546828399776017, -0.000226625858013696,-0.00478882102295186,0.495207296470096,-0.56640086672723, -0.000232309152453536,-0.00420341855644946,0.509631230469699,-0.585973333678442, -0.000237992446893487,-0.0036180160899475,0.524055164469303,-0.605545800629655, -0.000243675741333216,-0.00303261362344553,0.538479098468906,-0.625118267580868, -0.000249359035772723,-0.00244721115694269,0.55290303246851,-0.644690734532081, -9.41349121394985e-05,-0.0135463743684346,0.199460833058139,-0.182597178072164, -9.82588537443707e-05,-0.0129730888036693,0.212773734995571,-0.203003938145791, -0.000102382795349465,-0.0123998032389044,0.226086636933003,-0.223410698219418, -0.000106506736954393,-0.0118265176741392,0.239399538870435,-0.243817458293045, -0.000110630678559098,-0.0112532321093741,0.252712440807867,-0.264224218366672, -0.000114754620164248,-0.0106799465446095,0.266025342745299,-0.284630978440299, -0.000118878561769287,-0.0101066609798444,0.279338244682731,-0.305037738513926, -0.000123002503374214,-0.00953337541507904,0.292651146620164,-0.325444498587553, -0.000127126444979253,-0.00896008985031438,0.305964048557596,-0.34585125866118, -0.000131250386584347,-0.00838680428554972,0.319276950495027,-0.366258018734807, -0.00013537432818933,-0.00781351872078417,0.33258985243246,-0.386664778808434, -0.000139498269794425,-0.00724023315601952,0.345902754369892,-0.407071538882061, -0.000143622211399186,-0.00666694759125419,0.359215656307324,-0.427478298955688, -0.000147746153003947,-0.00609366202648887,0.372528558244756,-0.447885059029316, -0.000151870094609707,-0.00552037646172465,0.385841460182188,-0.468291819102943, -0.000155994036214246,-0.00494709089695933,0.39915436211962,-0.48869857917657, -0.00016011797781923,-0.00437380533219445,0.412467264057052,-0.509105339250197, -0.000164241919423991,-0.00380051976742868,0.425780165994485,-0.529512099323824, -0.000168365861029085,-0.00322723420266424,0.439093067931916,-0.549918859397451, -0.000172489802633957,-0.00265394863789892,0.452405969869349,-0.570325619471078, -0.000176613744239718,-0.00208066307313493,0.46571887180678,-0.590732379544705, -0.000180737685843924,-0.00150737750836871,0.479031773744213,-0.611139139618331, -0.000184861627448907,-0.000934091943603832,0.492344675681645,-0.631545899691958, -0.000188985569054445,-0.00036080637883984,0.505657577619076,-0.651952659765586, -0.000193109510658651,0.000212479185926373,0.518970479556509,-0.672359419839213, -7.62449419381972e-05,-0.0110943472152419,0.192344360958631,-0.189600278729145, -7.90809410445292e-05,-0.010561890685425,0.204589464652692,-0.210771216921253, -8.19169401510833e-05,-0.0100294341556083,0.216834568346753,-0.23194215511336, -8.47529392573598e-05,-0.00949697762579138,0.229079672040814,-0.253113093305468, -8.75889383641915e-05,-0.00896452109597501,0.241324775734874,-0.274284031497576, -9.0424937470579e-05,-0.00843206456615819,0.253569879428935,-0.295454969689684, -9.32609365772441e-05,-0.0078996080363416,0.265814983122996,-0.316625907881792, -9.60969356834651e-05,-0.00736715150652456,0.278060086817057,-0.3377968460739, -9.89329347900192e-05,-0.00683469497670774,0.290305190511118,-0.358967784266008, -0.000101768933896573,-0.00630223844689115,0.302550294205179,-0.380138722458116, -0.000104604933003238,-0.00576978191707456,0.314795397899239,-0.401309660650224, -0.000107440932109126,-0.00523732538725707,0.327040501593301,-0.422480598842332, -0.000110276931216235,-0.00470486885744137,0.339285605287361,-0.443651537034439, -0.000113112930322123,-0.00417241232762411,0.351530708981422,-0.464822475226547, -0.000115948929429122,-0.00363995579780796,0.363775812675483,-0.485993413418655, -0.000118784928535343,-0.0031074992679907,0.376020916369544,-0.507164351610763, -0.000121620927642341,-0.00257504273817455,0.388266020063605,-0.528335289802871, -0.000124456926748784,-0.00204258620835751,0.400511123757666,-0.549506227994979, -0.000127292925855116,-0.00151012967854047,0.412756227451727,-0.570677166187087, -0.00013012892496167,-0.000977673148724545,0.425001331145787,-0.591848104379195, -0.000132964924068002,-0.000445216618907285,0.437246434839848,-0.613019042571303, -0.000135800923174889,8.72399109090871e-05,0.449491538533909,-0.634189980763411, -0.000138636922280666,0.000619696440726347,0.46173664222797,-0.655360918955518, -0.000141472921387775,0.00115215297054228,0.47398174592203,-0.676531857147626, -0.000144308920494218,0.00168460950035909,0.486226849616091,-0.697702795339735, -6.01714108874329e-05,-0.00915478219390498,0.185782246156446,-0.195705145934604, -6.20256715301859e-05,-0.00868132806013711,0.197057399314531,-0.217542247039848, -6.38799321728833e-05,-0.00820787392636912,0.208332552472616,-0.239379348145093, -6.57341928155808e-05,-0.00773441979260081,0.219607705630701,-0.261216449250337, -6.75884534582782e-05,-0.00726096565883272,0.230882858788787,-0.283053550355582, -6.94427141011977e-05,-0.00678751152506507,0.242158011946872,-0.304890651460826, -7.12969747433956e-05,-0.00631405739129609,0.253433165104957,-0.326727752566071, -7.31512353862596e-05,-0.00584060325752822,0.264708318263042,-0.348564853671316, -7.50054960293456e-05,-0.00536714912376057,0.275983471421127,-0.37040195477656, -7.6859756672043e-05,-0.0048936949899927,0.287258624579213,-0.392239055881805, -7.87140173146295e-05,-0.00442024085622417,0.298533777737298,-0.414076156987049, -8.0568277957549e-05,-0.0039467867224563,0.309808930895383,-0.435913258092294, -8.24225386000244e-05,-0.00347333258868798,0.321084084053469,-0.457750359197538, -8.42767992427218e-05,-0.00299987845491967,0.332359237211554,-0.479587460302783, -8.61310598850862e-05,-0.00252642432115135,0.343634390369639,-0.501424561408027, -8.79853205285608e-05,-0.00205297018738437,0.354909543527724,-0.523261662513272, -8.98395811710362e-05,-0.00157951605361539,0.36618469668581,-0.545098763618517, -9.16938418138447e-05,-0.00110606191984797,0.377459849843895,-0.566935864723761, -9.3548102455987e-05,-0.000632607786078765,0.38873500300198,-0.588772965829005, -9.54023630995726e-05,-0.000159153652312227,0.400010156160065,-0.61061006693425, -9.7256623742048e-05,0.000314300481456531,0.411285309318151,-0.632447168039495, -9.91108843844124e-05,0.000787754615224845,0.422560462476236,-0.654284269144739, -0.000100965145027443,0.00126120874899271,0.433835615634321,-0.676121370249984, -0.000102819405669807,0.00173466288276147,0.445110768792407,-0.697958471355228, -0.000104673666312505,0.00220811701652979,0.456385921950492,-0.719795572460473, -4.64321159043823e-05,-0.00767833539457463,0.180048362324907,-0.200801617843962, -4.75915859728393e-05,-0.00727097094068141,0.190485879215915,-0.223194845800061, -4.87510560410187e-05,-0.00686360648678785,0.200923396106922,-0.24558807375616, -4.99105261096422e-05,-0.00645624203289485,0.21136091299793,-0.267981301712259, -5.10699961777661e-05,-0.0060488775790013,0.221798429888937,-0.290374529668358, -5.22294662459455e-05,-0.00564151312510752,0.232235946779945,-0.312767757624457, -5.3388936314458e-05,-0.00523414867121463,0.242673463670952,-0.335160985580557, -5.45484063825818e-05,-0.00482678421732086,0.25311098056196,-0.357554213536656, -5.57078764508168e-05,-0.0044194197634273,0.263548497452967,-0.379947441492755, -5.68673465193292e-05,-0.00401205530953441,0.273986014343975,-0.402340669448854, -5.80268165875086e-05,-0.00360469085564086,0.284423531234982,-0.424733897404953, -5.9186286655688e-05,-0.00319732640174708,0.29486104812599,-0.447127125361052, -6.03457567243115e-05,-0.00278996194785397,0.305298565016997,-0.469520353317151, -6.1505226792602e-05,-0.00238259749396041,0.315736081908005,-0.49191358127325, -6.26646968608924e-05,-0.00197523304006708,0.326173598799012,-0.514306809229349, -6.38241669289608e-05,-0.00156786858617375,0.33661111569002,-0.536700037185448, -6.49836369975842e-05,-0.00116050413228064,0.347048632581027,-0.559093265141548, -6.61431070660967e-05,-0.000753139678387527,0.357486149472035,-0.581486493097647, -6.7302577133499e-05,-0.000345775224492861,0.367923666363043,-0.603879721053746, -6.84620472021225e-05,6.15892294004716e-05,0.37836118325405,-0.626272949009845, -6.9621517271079e-05,0.000468953683292916,0.388798700145058,-0.648666176965944, -7.07809873391474e-05,0.000876318137186249,0.399236217036065,-0.671059404922043, -7.19404574074378e-05,0.00128368259108047,0.409673733927073,-0.693452632878142, -7.30999274756172e-05,0.0016910470449738,0.42011125081808,-0.715845860834241, -7.42593975436856e-05,0.00209841149886758,0.430548767709088,-0.73823908879034, -3.51721172094921e-05,-0.00658484444939922,0.175262944888296,-0.20490478488057, -3.58708950935482e-05,-0.00624189134589404,0.185007632277422,-0.227745750291752, -3.65696729778819e-05,-0.00589893824238907,0.194752319666549,-0.250586715702934, -3.72684508622156e-05,-0.00555598513888422,0.204497007055675,-0.273427681114117, -3.79672287464383e-05,-0.00521303203537893,0.214241694444802,-0.296268646525299, -3.8666006630772e-05,-0.0048700789318743,0.223986381833928,-0.319109611936481, -3.93647845153833e-05,-0.00452712582836945,0.233731069223054,-0.341950577347663, -4.00635623994394e-05,-0.00418417272486415,0.243475756612181,-0.364791542758846, -4.07623402838286e-05,-0.0038412196213593,0.253220444001307,-0.387632508170028, -4.14611181682734e-05,-0.00349826651785468,0.262965131390433,-0.41047347358121, -4.21598960526071e-05,-0.0031553134143496,0.27270981877956,-0.433314438992392, -4.28586739370518e-05,-0.00281236031084475,0.282454506168686,-0.456155404403574, -4.35574518209414e-05,-0.00246940720733946,0.292199193557812,-0.478996369814757, -4.42562297052751e-05,-0.00212645410383483,0.301943880946938,-0.501837335225939, -4.49550075896088e-05,-0.00178350100032931,0.311688568336065,-0.524678300637121, -4.56537854736094e-05,-0.00144054789682402,0.321433255725192,-0.547519266048303, -4.63525633582762e-05,-0.00109759479331961,0.331177943114318,-0.570360231459486, -4.70513412427209e-05,-0.000754641689814761,0.340922630503444,-0.593201196870668, -4.77501191268326e-05,-0.000411688586309022,0.350667317892571,-0.61604216228185, -4.84488970108332e-05,-6.8735482804172e-05,0.360412005281697,-0.638883127693032, -4.9147674895722e-05,0.00027421762069979,0.370156692670823,-0.661724093104215, -4.98464527801668e-05,0.000617170724205085,0.37990138005995,-0.684565058515397, -5.05452306637233e-05,0.00096012382771038,0.389646067449076,-0.707406023926579, -5.12440085487231e-05,0.00130307693121523,0.399390754838202,-0.730246989337762, -5.19427864327238e-05,0.00164603003472052,0.409135442227329,-0.753087954748944, -2.62530577582187e-05,-0.00578943242276553,0.171416356244769,-0.208112892612427, -2.66625151588706e-05,-0.00550383676652244,0.180607883348395,-0.231303926636141, -2.70719725590784e-05,-0.00521824111027891,0.189799410452021,-0.254494960659856, -2.74814299592863e-05,-0.00493264545403549,0.198990937555647,-0.277685994683571, -2.78908873596051e-05,-0.00464704979779218,0.208182464659273,-0.300877028707286, -2.83003447598129e-05,-0.00436145414154843,0.2173739917629,-0.324068062731, -2.87098021602983e-05,-0.00407585848530556,0.226565518866525,-0.347259096754715, -2.91192595606171e-05,-0.00379026282906203,0.235757045970152,-0.37045013077843, -2.9528716961269e-05,-0.00350466717281939,0.244948573073777,-0.393641164802144, -2.99381743611438e-05,-0.00321907151657519,0.254140100177404,-0.416832198825859, -3.03476317614626e-05,-0.00293347586033188,0.26333162728103,-0.440023232849574, -3.07570891617814e-05,-0.00264788020408857,0.272523154384656,-0.463214266873289, -3.11665465619893e-05,-0.00236228454784526,0.281714681488282,-0.486405300897003, -3.15760039624191e-05,-0.00207668889160173,0.290906208591908,-0.509596334920718, -3.1985461363071e-05,-0.00179109323535886,0.300097735695534,-0.532787368944433, -3.23949187628347e-05,-0.00150549757911445,0.309289262799161,-0.555978402968147, -3.28043761632646e-05,-0.00121990192287158,0.318480789902786,-0.579169436991862, -3.32138335638055e-05,-0.000934306266628493,0.327672317006412,-0.602360471015577, -3.36232909639023e-05,-0.00064871061038474,0.336863844110039,-0.625551505039292, -3.40327483643321e-05,-0.00036311495414143,0.346055371213665,-0.648742539063006, -3.44422057645399e-05,-7.7519297898121e-05,0.355246898317291,-0.671933573086721, -3.48516631650808e-05,0.000208076358345188,0.364438425420917,-0.695124607110436, -3.52611205652886e-05,0.000493672014588498,0.373629952524543,-0.718315641134151, -3.56705779652744e-05,0.000779267670832695,0.382821479628169,-0.741506675157865, -3.60800353654822e-05,0.001064863327076,0.392013006731796,-0.76469770918158, -1.93740367441242e-05,-0.00521705261768279,0.168415021404619,-0.210564223650296, -1.96094253980261e-05,-0.00497943890039421,0.177177095561348,-0.234022746838032, -1.98448140515395e-05,-0.00474182518310529,0.185939169718077,-0.257481270025767, -2.00802027054969e-05,-0.0045042114658167,0.194701243874807,-0.280939793213503, -2.03155913591768e-05,-0.00426659774852811,0.203463318031536,-0.304398316401239, -2.05509800124681e-05,-0.00402898403123908,0.212225392188265,-0.327856839588975, -2.07863686663701e-05,-0.00379137031395049,0.220987466344994,-0.351315362776711, -2.102175732005e-05,-0.00355375659666191,0.229749540501723,-0.374773885964447, -2.12571459734523e-05,-0.00331614287937221,0.238511614658453,-0.398232409152183, -2.14925346273542e-05,-0.00307852916208384,0.247273688815182,-0.421690932339919, -2.17279232810341e-05,-0.0028409154447957,0.25603576297191,-0.445149455527655, -2.1963311934603e-05,-0.00260330172750667,0.26479783712864,-0.468607978715391, -2.21987005886159e-05,-0.00236568801021808,0.273559911285369,-0.492066501903127, -2.24340892420738e-05,-0.00212807429292927,0.282321985442098,-0.515525025090863, -2.26694778957537e-05,-0.00189046057564024,0.291084059598827,-0.538983548278599, -2.29048665499887e-05,-0.00165284685835276,0.299846133755556,-0.562442071466335, -2.31402552033355e-05,-0.00141523314106351,0.308608207912285,-0.585900594654071, -2.33756438571264e-05,-0.00117761942377514,0.317370282069014,-0.609359117841807, -2.36110325114725e-05,-0.00094000570648678,0.326132356225743,-0.632817641029543, -2.38464211640421e-05,-0.000702391989197082,0.334894430382473,-0.656276164217279, -2.40818098171669e-05,-0.000464778271907829,0.343656504539202,-0.679734687405015, -2.43171984722901e-05,-0.000227164554620352,0.352418578695931,-0.703193210592751, -2.45525871248597e-05,1.04491626693459e-05,0.36118065285266,-0.726651733780487, -2.47879757790948e-05,0.000248062879957711,0.369942727009389,-0.750110256968223, -2.50233644329967e-05,0.000485676597245632,0.378704801166118,-0.773568780155959, -1.41751340891894e-05,-0.00480755486317341,0.166126320483516,-0.212404619080298, -1.43090701665849e-05,-0.00460833740499644,0.174562112230244,-0.236063966158172, -1.44430062434808e-05,-0.00440911994681903,0.182997903976971,-0.259723313236046, -1.45769423204878e-05,-0.0042099024886415,0.1914336957237,-0.283382660313919, -1.47108783976058e-05,-0.00401068503046442,0.199869487470427,-0.307042007391793, -1.48448144748903e-05,-0.00381146757228734,0.208305279217155,-0.330701354469667, -1.49787505518972e-05,-0.00361225011410982,0.216741070963883,-0.35436070154754, -1.51126866289042e-05,-0.00341303265593251,0.225176862710611,-0.378020048625414, -1.52466227059112e-05,-0.00321381519775521,0.233612654457339,-0.401679395703288, -1.53805587832512e-05,-0.00301459773957791,0.242048446204067,-0.425338742781161, -1.55144948602581e-05,-0.0028153802814006,0.250484237950795,-0.448998089859035, -1.56484309374871e-05,-0.0026161628232233,0.258920029697523,-0.472657436936909, -1.5782367013828e-05,-0.00241694536504511,0.267355821444251,-0.496316784014782, -1.5916303091501e-05,-0.00221772790686825,0.275791613190979,-0.519976131092656, -1.60502391687301e-05,-0.00201851044869161,0.284227404937707,-0.543635478170529, -1.6184175245626e-05,-0.00181929299051387,0.292663196684435,-0.567294825248403, -1.6318111322744e-05,-0.00162007553233656,0.301098988431163,-0.590954172326277, -1.6452047400084e-05,-0.0014208580741597,0.30953478017789,-0.61461351940415, -1.65859834770909e-05,-0.00122164061598218,0.317970571924619,-0.638272866482024, -1.67199195540979e-05,-0.0010224231578051,0.326406363671346,-0.661932213559898, -1.68538556312159e-05,-0.000823205699627572,0.334842155418074,-0.685591560637771, -1.69877917081118e-05,-0.000623988241450046,0.343277947164802,-0.709250907715645, -1.71217277856739e-05,-0.000424770783273409,0.35171373891153,-0.732910254793519, -1.72556638624588e-05,-0.00022555332509544,0.360149530658258,-0.756569601871392, -1.73895999395768e-05,-2.63358669183589e-05,0.368585322404986,-0.780228948949266, -1.03052477093413e-05,-0.00451538002871554,0.164411061537537,-0.213768162538806, -1.03813092477423e-05,-0.00434592557833724,0.172602976442202,-0.237576299435023, -1.04573707868649e-05,-0.00417647112796005,0.180794891346867,-0.26138443633124, -1.0533432325488e-05,-0.00400701667758208,0.188986806251533,-0.285192573227456, -1.06094938642776e-05,-0.00383756222720422,0.197178721156198,-0.309000710123673, -1.06855554029006e-05,-0.00366810777682636,0.205370636060863,-0.332808847019889, -1.07616169421898e-05,-0.00349865332644916,0.213562550965528,-0.356616983916106, -1.08376784808684e-05,-0.0033291988760713,0.221754465870193,-0.380425120812323, -1.09137400193804e-05,-0.00315974442569322,0.229946380774859,-0.404233257708539, -1.09898015585586e-05,-0.00299028997531603,0.238138295679523,-0.428041394604756, -1.10658630970706e-05,-0.0028208355249375,0.246330210584189,-0.451849531500973, -1.11419246358047e-05,-0.00265138107455964,0.254522125488854,-0.475657668397189, -1.12179861749828e-05,-0.00248192662418267,0.262714040393519,-0.499465805293406, -1.12940477134948e-05,-0.00231247217380437,0.270905955298185,-0.523273942189622, -1.13701092521179e-05,-0.00214301772342629,0.27909787020285,-0.547082079085839, -1.1446170791074e-05,-0.00197356327304865,0.287289785107515,-0.570890215982055, -1.15222323296971e-05,-0.00180410882267124,0.29548170001218,-0.594698352878272, -1.15982938686532e-05,-0.00163465437229338,0.303673614916845,-0.618506489774489, -1.16743554077203e-05,-0.00146519992191596,0.31186552982151,-0.642314626670705, -1.17504169463434e-05,-0.00129574547153855,0.320057444726175,-0.666122763566922, -1.18264784854105e-05,-0.00112629102116069,0.328249359630841,-0.689930900463139, -1.19025400242556e-05,-0.000956836570782826,0.336441274535506,-0.713739037359355, -1.19786015624346e-05,-0.000787382120404079,0.344633189440172,-0.737547174255572, -1.20546631015017e-05,-0.000617927670026663,0.352825104344836,-0.761355311151788, -1.21307246397917e-05,-0.000448473219648804,0.361017019249501,-0.785163448048005, -7.4567452583163e-06,-0.00430711202153433,0.163142068736445,-0.214768527274187, -7.50018834982935e-06,-0.00416020641618919,0.171153907435093,-0.238685823938158, -7.54363144117587e-06,-0.00401330081084339,0.179165746133742,-0.262603120602129, -7.58707453291096e-06,-0.00386639520549847,0.187177584832391,-0.2865204172661, -7.63051762431299e-06,-0.00371948960015311,0.19518942353104,-0.310437713930072, -7.67396071543747e-06,-0.00357258399480731,0.203201262229689,-0.334355010594043, -7.71740380722807e-06,-0.00342567838946217,0.211213100928337,-0.358272307258014, -7.76084689896317e-06,-0.00327877278411726,0.219224939626986,-0.382189603921985, -7.8042899903652e-06,-0.00313186717877212,0.227236778325635,-0.406106900585956, -7.84773308171172e-06,-0.00298496157342609,0.235248617024284,-0.430024197249927, -7.89117617328028e-06,-0.00283805596808118,0.243260455722932,-0.453941493913898, -7.9346192646268e-06,-0.00269115036273559,0.251272294421581,-0.47785879057787, -7.97806235652843e-06,-0.00254424475739068,0.25928413312023,-0.501776087241841, -8.0215054476529e-06,-0.0023973391520451,0.267295971818879,-0.525693383905812, -8.06494853933248e-06,-0.00225043354670018,0.275307810517527,-0.549610680569783, -8.10839163123411e-06,-0.00210352794135504,0.283319649216176,-0.573527977233754, -8.1518347219145e-06,-0.0019566223360088,0.291331487914825,-0.597445273897725, -8.19527781314999e-06,-0.00180971673066344,0.299343326613474,-0.621362570561697, -8.23872090505162e-06,-0.00166281112531852,0.307355165312122,-0.645279867225668, -8.28216399684223e-06,-0.0015159055199736,0.315367004010771,-0.669197163889639, -8.32560708829977e-06,-0.00136899991462824,0.32337884270942,-0.69311446055361, -8.36905018009038e-06,-0.00122209430928333,0.331390681408068,-0.717031757217581, -8.41249327121485e-06,-0.00107518870393752,0.339402520106717,-0.740949053881552, -8.45593636233932e-06,-0.000928283098591276,0.347414358805366,-0.764866350545523, -8.49937945457402e-06,-0.000781377493247248,0.355426197504014,-0.788783647209495, -5.37715498966085e-06,-0.00415866255094555,0.162212126159133,-0.215497165782528, -5.40228059531245e-06,-0.00402856133269092,0.170092186510175,-0.239493971457097, -5.42740620079751e-06,-0.00389846011443618,0.177972246861216,-0.263490777131667, -5.45253180617156e-06,-0.00376835889618121,0.185852307212258,-0.287487582806236, -5.47765741182316e-06,-0.00363825767792658,0.1937323675633,-0.311484388480806, -5.50278301758578e-06,-0.0035081564596724,0.201612427914342,-0.335481194155375, -5.52790862290431e-06,-0.00337805524141732,0.209492488265383,-0.359477999829944, -5.55303422855591e-06,-0.00324795402316291,0.217372548616425,-0.383474805504514, -5.57815983381893e-06,-0.00311785280490762,0.225252608967467,-0.407471611179083, -5.60328543952604e-06,-0.00298775158665343,0.233132669318509,-0.431468416853653, -5.62841104501111e-06,-0.0028576503683988,0.24101272966955,-0.455465222528222, -5.65353665071822e-06,-0.00272754915014395,0.248892790020592,-0.479462028202791, -5.67866225587021e-06,-0.00259744793188887,0.256772850371634,-0.503458833877361, -5.70378786135528e-06,-0.00246734671363447,0.264652910722676,-0.52745563955193, -5.72891346695137e-06,-0.00233724549537939,0.272532971073718,-0.5514524452265, -5.7540390727695e-06,-0.00220714427712521,0.280413031424759,-0.575449250901069, -5.77916467781048e-06,-0.00207704305886991,0.288293091775801,-0.599446056575639, -5.80429028385065e-06,-0.00194694184061595,0.296173152126842,-0.623442862250208, -5.82941588966879e-06,-0.00181684062236132,0.304053212477884,-0.647439667924778, -5.85454149493181e-06,-0.00168673940410669,0.311933272828926,-0.671436473599347, -5.87966709975074e-06,-0.00155663818585117,0.319813333179968,-0.695433279273916, -5.90479270590194e-06,-0.00142653696759698,0.327693393531009,-0.719430084948486, -5.92991831072087e-06,-0.00129643574934146,0.335573453882051,-0.743426890623055, -5.95504391631696e-06,-0.00116633453108639,0.343453514233094,-0.767423696297624, -5.98016952224611e-06,-0.00103623331283265,0.351333574584135,-0.791420501972194, -3.86791962808664e-06,-0.00405281546913538,0.161535366169486,-0.216025099878753, -3.88271724793832e-06,-0.00393509034925488,0.169319622460955,-0.240079513704925, -3.89751486779e-06,-0.00381736522937437,0.177103878752425,-0.264133927531097, -3.91231248714208e-06,-0.00369964010949331,0.184888135043894,-0.288188341357269, -3.92711010638314e-06,-0.00358191498961169,0.192672391335364,-0.312242755183441, -3.94190772623482e-06,-0.00346418986973118,0.200456647626833,-0.336297169009613, -3.95670534591996e-06,-0.00334646474985045,0.208240903918302,-0.360351582835785, -3.9715029655496e-06,-0.00322873962996995,0.216025160209771,-0.384405996661957, -3.98630058506821e-06,-0.00311101451008899,0.223809416501241,-0.408460410488129, -4.00109820497541e-06,-0.00299328939020804,0.23159367279271,-0.432514824314301, -4.01589582432749e-06,-0.00287556427032709,0.23937792908418,-0.456569238140473, -4.03069344367957e-06,-0.0027578391504457,0.247162185375649,-0.480623651966645, -4.04549106325369e-06,-0.00264011403056497,0.254946441667118,-0.504678065792817, -4.06028868282782e-06,-0.00252238891068424,0.262730697958588,-0.528732479618989, -4.07508630273501e-06,-0.00240466379080373,0.270514954250057,-0.552786893445161, -4.08988392242016e-06,-0.00228693867092256,0.278299210541527,-0.576841307271333, -4.10468154232735e-06,-0.00216921355104249,0.286083466832995,-0.600895721097505, -4.11947916167943e-06,-0.0020514884311611,0.293867723124465,-0.624950134923677, -4.1342767814756e-06,-0.00193376331128103,0.301651979415934,-0.649004548749849, -4.14907440116075e-06,-0.00181603819139964,0.309436235707404,-0.67305896257602, -4.16387202029078e-06,-0.00169831307151824,0.317220491998873,-0.697113376402193, -4.17866964008695e-06,-0.00158058795163774,0.325004748290342,-0.721167790228365, -4.19346725955005e-06,-0.00146286283175678,0.332789004581812,-0.745222204054537, -4.20826487912418e-06,-0.00134513771187583,0.340573260873281,-0.769276617880708, -4.2230624986983e-06,-0.00122741259199488,0.348357517164751,-0.79333103170688, -2.77730656589315e-06,-0.00397731074550967,0.161045337177822,-0.216406156640815, -2.78621737304086e-06,-0.00386862330856763,0.168760273910496,-0.24050215136861, -2.79512818091021e-06,-0.00375993587162637,0.17647521064317,-0.264598146096404, -2.80403898855752e-06,-0.0036512484346849,0.184190147375844,-0.288694140824198, -2.81294979592728e-06,-0.00354256099774286,0.191905084108518,-0.312790135551992, -2.82186060351908e-06,-0.00343387356080171,0.199620020841192,-0.336886130279786, -2.83077141105537e-06,-0.0033251861238599,0.207334957573866,-0.36098212500758, -2.83968221859165e-06,-0.00321649868691831,0.21504989430654,-0.385078119735374, -2.84859302612794e-06,-0.00310781124997672,0.222764831039215,-0.409174114463168, -2.85750383410832e-06,-0.00299912381303558,0.230479767771889,-0.433270109190962, -2.86641464142257e-06,-0.00289043637609354,0.238194704504563,-0.457366103918756, -2.87532544906988e-06,-0.00278174893915217,0.245909641237237,-0.48146209864655, -2.88423625649514e-06,-0.00267306150221058,0.253624577969911,-0.505558093374344, -2.89314706380939e-06,-0.00256437406526855,0.261339514702585,-0.529654088102138, -2.9020578714567e-06,-0.00245568662832674,0.26905445143526,-0.553750082829932, -2.91096867910401e-06,-0.00234699919138537,0.276769388167934,-0.577846077557726, -2.91987948686234e-06,-0.00223831175444422,0.284484324900608,-0.60194207228552, -2.92879029439863e-06,-0.00212962431750263,0.292199261633282,-0.626038067013314, -2.93770110149083e-06,-0.00202093688056015,0.299914198365956,-0.650134061741108, -2.94661190913814e-06,-0.00191224944361901,0.30762913509863,-0.674230056468902, -2.95552271656341e-06,-0.00180356200667697,0.315344071831305,-0.698326051196696, -2.96443352454379e-06,-0.00169487456973583,0.323059008563979,-0.72242204592449, -2.97334433163599e-06,-0.00158618713279379,0.330773945296653,-0.746518040652285, -2.98225513906125e-06,-0.00147749969585176,0.338488882029327,-0.770614035380078, -2.99116594693061e-06,-0.00136881225891061,0.346203818762001,-0.794710030107872, -1.99163518083134e-06,-0.00392342676600754,0.16069180837979,-0.216680441945902, -1.99713398812973e-06,-0.00382129905779505,0.168356760924067,-0.240806366677367, -2.00263279531709e-06,-0.00371917134958222,0.176021713468344,-0.264932291408831, -2.00813160283753e-06,-0.00361704364136983,0.183686666012621,-0.289058216140296, -2.01363040985836e-06,-0.00351491593315689,0.191351618556898,-0.31318414087176, -2.01912921754532e-06,-0.00341278822494484,0.199016571101175,-0.337310065603225, -2.02462802495473e-06,-0.00331066051673212,0.206681523645452,-0.36143599033469, -2.03012683197556e-06,-0.00320853280851918,0.214346476189728,-0.385561915066154, -2.03562563916293e-06,-0.00310640510030646,0.222011428734005,-0.409687839797619, -2.04112444668336e-06,-0.00300427739209419,0.229676381278282,-0.433813764529083, -2.04662325387073e-06,-0.00290214968388125,0.237341333822559,-0.457939689260548, -2.05212206094707e-06,-0.00280002197566809,0.245006286366836,-0.482065613992012, -2.0576208684675e-06,-0.00269789426745581,0.252671238911113,-0.506191538723477, -2.06311967587691e-06,-0.00259576655924354,0.26033619145539,-0.530317463454941, -2.06861848306428e-06,-0.00249363885103016,0.268001143999667,-0.554443388186406, -2.07411729069573e-06,-0.00239151114281833,0.275666096543944,-0.57856931291787, -2.07961609743901e-06,-0.00228938343460516,0.283331049088221,-0.602695237649335, -2.0851149047374e-06,-0.00218725572639222,0.290996001632498,-0.626821162380799, -2.09061371170272e-06,-0.00208512801817973,0.298660954176774,-0.650947087112264, -2.09611251988928e-06,-0.00198300030996812,0.306325906721051,-0.675073011843728, -2.10161132663256e-06,-0.00188087260175429,0.313990859265328,-0.699198936575193, -2.10711013404197e-06,-0.00177874489354179,0.321655811809605,-0.723324861306658, -2.11260894189547e-06,-0.00167661718533019,0.329320764353882,-0.747450786038122, -2.11810774897181e-06,-0.00157448947711725,0.336985716898158,-0.771576710769587, -2.12360655582611e-06,-0.00147236176890431,0.344650669442435,-0.795702635501051, -1.42689878224189e-06,-0.00388495795118449,0.160437426371332,-0.216877481495571, -1.43037733996154e-06,-0.00378757069459368,0.168066426163253,-0.241024907176358, -1.43385589768119e-06,-0.00369018343800287,0.175695425955175,-0.265172332857146, -1.4373344551788e-06,-0.00359279618141173,0.183324425747097,-0.289319758537934, -1.44081301306498e-06,-0.00349540892482114,0.190953425539019,-0.313467184218722, -1.44429157089565e-06,-0.00339802166823056,0.198582425330941,-0.33761460989951, -1.44777012844877e-06,-0.00330063441163952,0.206211425122863,-0.361762035580298, -1.4512486861129e-06,-0.00320324715504849,0.213840424914785,-0.385909461261086, -1.45472724366602e-06,-0.00310585989845746,0.221469424706707,-0.410056886941873, -1.45820580144118e-06,-0.0030084726418671,0.229098424498628,-0.434204312622661, -1.4616843589943e-06,-0.00291108538527607,0.23672742429055,-0.458351738303449, -1.4651629169915e-06,-0.00281369812868548,0.244356424082472,-0.482499163984237, -1.46864147421155e-06,-0.00271631087209401,0.251985423874394,-0.506646589665025, -1.47212003254182e-06,-0.00261892361550409,0.259614423666316,-0.530794015345813, -1.47559858998392e-06,-0.00252153635891328,0.267243423458237,-0.554941441026601, -1.47907714753703e-06,-0.0024241491023218,0.27487242325016,-0.579088866707388, -1.48255570542322e-06,-0.00232676184573144,0.282501423042081,-0.603236292388176, -1.4860342633094e-06,-0.0022293745891413,0.290130422834003,-0.627383718068964, -1.48951282097354e-06,-0.00213198733254982,0.297759422625925,-0.651531143749752, -1.49299137885972e-06,-0.00203460007595968,0.305388422417847,-0.67567856943054, -1.49646993619079e-06,-0.00193721281936776,0.313017422209769,-0.699825995111328, -1.49994849341084e-06,-0.00183982556277673,0.320646422001691,-0.723973420792116, -1.50342705140805e-06,-0.00174243830618659,0.328275421793613,-0.748120846472904, -1.50690560929423e-06,-0.001645051049596,0.335904421585534,-0.772268272153691, -1.51038416784655e-06,-0.00154766379300586,0.343533421377456,-0.796415697834479, -0.000246864452599971,-0.0554140565176802,0.256198145899963,-0.111877456940221, -0.000267960892454677,-0.0560975627866294,0.277583211357556,-0.123950075503243, -0.000289057332309883,-0.0567810690555792,0.298968276815148,-0.136022694066265, -0.000310153772164756,-0.0574645753245284,0.320353342272741,-0.148095312629287, -0.000331250212019796,-0.058148081593478,0.341738407730333,-0.160167931192309, -0.000352346651874613,-0.0588315878624271,0.363123473187926,-0.172240549755331, -0.000373443091729431,-0.0595150941313765,0.384508538645519,-0.184313168318354, -0.000394539531584803,-0.0601986004003265,0.405893604103111,-0.196385786881376, -0.000415635971439232,-0.0608821066692755,0.427278669560703,-0.208458405444397, -0.000436732411294383,-0.0615656129382252,0.448663735018296,-0.22053102400742, -0.000457828851149422,-0.0622491192071746,0.470048800475889,-0.232603642570442, -0.000478925291004351,-0.0629326254761238,0.491433865933482,-0.244676261133464, -0.000500021730859057,-0.063616131745073,0.512818931391074,-0.256748879696486, -0.000521118170714208,-0.0642996380140228,0.534203996848667,-0.268821498259509, -0.000542214610569136,-0.0649831442829722,0.55558906230626,-0.280894116822531, -0.000563311050424398,-0.0656666505519221,0.576974127763852,-0.292966735385553, -0.000584407490278771,-0.0663501568208709,0.598359193221445,-0.305039353948575, -0.000605503930134144,-0.0670336630898207,0.619744258679036,-0.317111972511596, -0.000626600369988961,-0.0677171693587701,0.641129324136629,-0.329184591074618, -0.000647696809844112,-0.0684006756277196,0.662514389594222,-0.341257209637641, -0.000668793249699262,-0.0690841818966692,0.683899455051814,-0.353329828200662, -0.00068988968955408,-0.0697676881656186,0.705284520509407,-0.365402446763685, -0.000710986129408564,-0.0704511944345674,0.726669585966999,-0.377475065326706, -0.000732082569263937,-0.0711347007035172,0.748054651424592,-0.389547683889728, -0.000753179009118865,-0.0718182069724667,0.769439716882185,-0.401620302452752, -0.00024249693930406,-0.0533044069831468,0.255189035588836,-0.114923501968334, -0.000262910922894488,-0.0538835958385343,0.276349286939148,-0.127312425600976, -0.000283324906484694,-0.0544627846939217,0.297509538289459,-0.139701349233619, -0.000303738890075289,-0.0550419735493095,0.31866978963977,-0.152090272866262, -0.000324152873665662,-0.0556211624046972,0.339830040990082,-0.164479196498905, -0.00034456685725609,-0.0562003512600846,0.360990292340393,-0.176868120131548, -0.000364980840846518,-0.0567795401154723,0.382150543690705,-0.18925704376419, -0.00038539482443678,-0.0573587289708597,0.403310795041016,-0.201645967396833, -0.000405808808027208,-0.0579379178262474,0.424471046391327,-0.214034891029476, -0.000426222791617969,-0.0585171066816352,0.445631297741639,-0.226423814662119, -0.000446636775208398,-0.0590962955370229,0.46679154909195,-0.238812738294761, -0.000467050758798604,-0.0596754843924101,0.487951800442262,-0.251201661927405, -0.000487464742389032,-0.0602546732477978,0.509112051792572,-0.263590585560047, -0.000507878725979682,-0.0608338621031854,0.530272303142884,-0.27597950919269, -0.000528292709569889,-0.0614130509585733,0.551432554493196,-0.288368432825333, -0.000548706693160206,-0.0619922398139603,0.572592805843507,-0.300757356457976, -0.000569120676750523,-0.062571428669348,0.593753057193819,-0.313146280090619, -0.000589534660340951,-0.0631506175247356,0.614913308544129,-0.325535203723261, -0.000609948643931602,-0.0637298063801237,0.63607355989444,-0.337924127355903, -0.000630362627521697,-0.0643089952355109,0.657233811244752,-0.350313050988547, -0.000650776611112347,-0.0648881840908986,0.678394062595063,-0.362701974621189, -0.000671190594702997,-0.0654673729462862,0.699554313945375,-0.375090898253833, -0.000691604578293314,-0.0660465618016737,0.720714565295686,-0.387479821886475, -0.000712018561884076,-0.0666257506570616,0.741874816645998,-0.399868745519118, -0.000732432545473727,-0.0672049395124485,0.763035067996309,-0.412257669151761, -0.000236561234025101,-0.050590201727908,0.253743175509646,-0.118920198092828, -0.000256072781308236,-0.0510390282996631,0.274595800509578,-0.131724143576508, -0.000275584328591427,-0.0514878548714186,0.295448425509511,-0.144528089060189, -0.00029509587587484,-0.0519366814431742,0.316301050509443,-0.157332034543869, -0.00031460742315792,-0.0523855080149295,0.337153675509376,-0.170135980027549, -0.000334118970441166,-0.0528343345866849,0.358006300509309,-0.18293992551123, -0.000353630517724635,-0.0532831611584403,0.378858925509241,-0.19574387099491, -0.000373142065007881,-0.0537319877301961,0.399711550509174,-0.20854781647859, -0.000392653612290905,-0.0541808143019511,0.420564175509106,-0.22135176196227, -0.000412165159574318,-0.0546296408737068,0.441416800509039,-0.234155707445952, -0.000431676706857398,-0.0550784674454621,0.462269425508971,-0.246959652929631, -0.0004511882541407,-0.0555272940172176,0.483122050508904,-0.259763598413312, -0.000470699801423891,-0.0559761205889728,0.503974675508837,-0.272567543896992, -0.00049021134870697,-0.0564249471607281,0.52482730050877,-0.285371489380673, -0.000509722895990383,-0.0568737737324838,0.545679925508702,-0.298175434864354, -0.000529234443273463,-0.0573226003042391,0.566532550508635,-0.310979380348034, -0.000548745990556765,-0.0577714268759943,0.587385175508568,-0.323783325831715, -0.000568257537840289,-0.0582202534477503,0.608237800508499,-0.336587271315394, -0.000587769085122924,-0.0586690800195051,0.629090425508432,-0.349391216799074, -0.000607280632406559,-0.0591179065912608,0.649943050508365,-0.362195162282755, -0.000626792179689306,-0.0595667331630156,0.670795675508297,-0.374999107766435, -0.000646303726972608,-0.0600155597347714,0.69164830050823,-0.387803053250116, -0.000665815274256021,-0.0604643863065271,0.712500925508162,-0.400606998733796, -0.000685326821539101,-0.0609132128782819,0.733353550508095,-0.413410944217476, -0.000704838368822625,-0.0613620394500378,0.754206175508028,-0.426214889701157, -0.000228604507525432,-0.0471982040778014,0.251685206284882,-0.124049020172528, -0.000246947949845921,-0.0474906853328141,0.272122032292897,-0.13738554886165, -0.000265291392166356,-0.0477831665878266,0.292558858300913,-0.150722077550772, -0.000283634834487123,-0.0480756478428391,0.312995684308928,-0.164058606239893, -0.000301978276807724,-0.0483681290978517,0.333432510316943,-0.177395134929015, -0.000320321719128325,-0.0486606103528644,0.353869336324959,-0.190731663618137, -0.000338665161448648,-0.0489530916078766,0.374306162332974,-0.204068192307259, -0.000357008603769304,-0.0492455728628893,0.394742988340989,-0.217404720996381, -0.000375352046089628,-0.0495380541179016,0.415179814349005,-0.230741249685503, -0.000393695488410173,-0.049830535372914,0.43561664035702,-0.244077778374625, -0.000412038930731051,-0.050123016627927,0.456053466365035,-0.257414307063747, -0.000430382373051152,-0.050415497882939,0.476490292373051,-0.27075083575287, -0.000448725815371809,-0.0507079791379517,0.496927118381066,-0.284087364441991, -0.000467069257692354,-0.0510004603929641,0.517363944389082,-0.297423893131113, -0.000485412700013232,-0.0512929416479773,0.537800770397097,-0.310760421820236, -0.000503756142333445,-0.0515854229029888,0.558237596405113,-0.324096950509357, -0.000522099584654101,-0.0518779041580018,0.578674422413128,-0.33743347919848, -0.000540443026974424,-0.052170385413014,0.599111248421143,-0.350770007887601, -0.000558786469295192,-0.0524628666680271,0.619548074429157,-0.364106536576722, -0.000577129911615293,-0.0527553479230389,0.639984900437173,-0.377443065265845, -0.000595473353935949,-0.0530478291780514,0.660421726445189,-0.390779593954967, -0.00061381679625705,-0.0533403104330645,0.680858552453204,-0.404116122644089, -0.000632160238576929,-0.0536327916880763,0.701295378461219,-0.41745265133321, -0.000650503680897918,-0.0539252729430895,0.721732204469235,-0.430789180022333, -0.000668847123218019,-0.0542177541981013,0.742169030477251,-0.444125708711455, -0.000218148077783364,-0.0431136784634787,0.248799188503801,-0.130446240532712, -0.000235022199236046,-0.0432286149130472,0.268684249767171,-0.144447064467877, -0.000251896320688283,-0.0433435513626149,0.288569311030542,-0.158447888403041, -0.000268770442140964,-0.0434584878121833,0.308454372293912,-0.172448712338206, -0.000285644563593479,-0.0435734242617516,0.328339433557283,-0.18644953627337, -0.000302518685046049,-0.0436883607113197,0.348224494820653,-0.200450360208535, -0.000319392806498564,-0.0438032971608879,0.368109556084024,-0.2144511841437, -0.000336266927951079,-0.0439182336104562,0.387994617347394,-0.228452008078864, -0.000353141049403427,-0.0440331700600241,0.407879678610765,-0.242452832014029, -0.000370015170855997,-0.0441481065095923,0.427764739874136,-0.256453655949194, -0.000386889292308568,-0.0442630429591604,0.447649801137506,-0.270454479884358, -0.000403763413761471,-0.0443779794087291,0.467534862400877,-0.284455303819523, -0.000420637535213486,-0.0444929158582967,0.487419923664247,-0.298456127754687, -0.000437511656666278,-0.0446078523078652,0.507304984927618,-0.312456951689852, -0.000454385778118627,-0.0447227887574333,0.527190046190988,-0.326457775625017, -0.000471259899571308,-0.0448377252070016,0.547075107454359,-0.340458599560182, -0.000488134021023878,-0.0449526616565696,0.56696016871773,-0.354459423495347, -0.000505008142476338,-0.0450675981061379,0.586845229981099,-0.368460247430511, -0.000521882263928908,-0.0451825345557062,0.60673029124447,-0.382461071365675, -0.000538756385381256,-0.045297471005274,0.626615352507841,-0.39646189530084, -0.00055563050683427,-0.0454124074548425,0.646500413771211,-0.410462719236004, -0.000572504628286397,-0.0455273439044106,0.666385475034582,-0.42446354317117, -0.000589378749739189,-0.0456422803539791,0.686270536297951,-0.438464367106333, -0.000606252871191315,-0.0457572168035463,0.706155597561323,-0.452465191041498, -0.000623126992644107,-0.0458721532531152,0.726040658824693,-0.466466014976664, -0.000204781344414262,-0.0384164175417704,0.244854401331128,-0.138148586646411, -0.000219875354801669,-0.0383437017482647,0.264026326545991,-0.152949231694281, -0.000234969365188853,-0.0382709859547589,0.283198251760854,-0.167749876742151, -0.000250063375576426,-0.0381982701612533,0.302370176975716,-0.182550521790021, -0.000265157385963721,-0.0381255543677477,0.321542102190579,-0.197351166837891, -0.000280251396351294,-0.038052838574242,0.340714027405442,-0.212151811885762, -0.000295345406738423,-0.0379801227807364,0.359885952620305,-0.226952456933632, -0.000310439417125774,-0.0379074069872305,0.379057877835168,-0.241753101981502, -0.000325533427512958,-0.0378346911937246,0.39822980305003,-0.256553747029372, -0.000340627437900753,-0.0377619754002194,0.417401728264893,-0.271354392077243, -0.000355721448288104,-0.037689259606714,0.436573653479755,-0.286155037125113, -0.000370815458675122,-0.0376165438132077,0.455745578694619,-0.300955682172983, -0.000385909469062362,-0.037543828019702,0.474917503909481,-0.315756327220853, -0.000401003479449824,-0.0374711122261961,0.494089429124344,-0.330556972268724, -0.000416097489837397,-0.0373983964326907,0.513261354339207,-0.345357617316594, -0.000431191500224415,-0.0373256806391844,0.53243327955407,-0.360158262364464, -0.000446285510611766,-0.0372529648456787,0.551605204768933,-0.374958907412334, -0.000461379520999783,-0.0371802490521742,0.570777129983795,-0.389759552460204, -0.000476473531386579,-0.0371075332586681,0.589949055198657,-0.404560197508074, -0.000491567541774152,-0.0370348174651627,0.60912098041352,-0.419360842555945, -0.000506661552161169,-0.0369621016716561,0.628292905628383,-0.434161487603815, -0.000521755562549076,-0.0368893858781512,0.647464830843246,-0.448962132651685, -0.000536849572935871,-0.0368166700846446,0.666636756058109,-0.463762777699555, -0.000551943583323333,-0.0367439542911394,0.685808681272971,-0.478563422747425, -0.000567037593710684,-0.0366712384976333,0.704980606487835,-0.493364067795296, -0.000188312302296323,-0.0333027545366644,0.239663682021648,-0.147037492107954, -0.000201350409809231,-0.0330495379784752,0.257946336683769,-0.162761172053508, -0.000214388517322417,-0.0327963214202862,0.27622899134589,-0.178484851999062, -0.00022742662483527,-0.0325431048620969,0.29451164600801,-0.194208531944617, -0.000240464732348455,-0.032289888303908,0.31279430067013,-0.209932211890171, -0.000253502839861142,-0.0320366717457181,0.331076955332251,-0.225655891835725, -0.000266540947374383,-0.0317834551875296,0.349359609994372,-0.24137957178128, -0.000279579054887291,-0.0315302386293399,0.367642264656493,-0.257103251726834, -0.000292617162400588,-0.0312770220711511,0.385924919318613,-0.272826931672388, -0.000305655269913441,-0.0310238055129615,0.404207573980734,-0.288550611617943, -0.000318693377426404,-0.0307705889547725,0.422490228642854,-0.304274291563497, -0.000331731484939479,-0.0305173723965833,0.440772883304975,-0.319997971509052, -0.000344769592452665,-0.0302641558383943,0.459055537967095,-0.335721651454606, -0.00035780769996574,-0.0300109392802053,0.477338192629216,-0.351445331400161, -0.000370845807478482,-0.0297577227220156,0.495620847291336,-0.367169011345715, -0.000383883914991556,-0.0295045061638264,0.513903501953457,-0.38289269129127, -0.000396922022504409,-0.0292512896056372,0.532186156615578,-0.398616371236824, -0.000409960130017373,-0.0289980730474479,0.550468811277698,-0.414340051182378, -0.00042299823753067,-0.0287448564892592,0.568751465939818,-0.430063731127932, -0.000436036345043411,-0.0284916399310693,0.587034120601939,-0.445787411073487, -0.000449074452556486,-0.0282384233728803,0.605316775264059,-0.461511091019041, -0.000462112560069672,-0.0279852068146913,0.62359942992618,-0.477234770964596, -0.000475150667582969,-0.0277319902565027,0.6418820845883,-0.49295845091015, -0.000488188775095377,-0.027478773698312,0.660164739250422,-0.508682130855704, -0.000501226882608563,-0.0272255571401239,0.678447393912542,-0.524405810801259, -0.000168941576360493,-0.0280720748629026,0.233169446040873,-0.156807605866084, -0.000179740730544442,-0.027665828520984,0.250392748099001,-0.173545826464828, -0.000190539884728114,-0.0272595821790648,0.267616050157129,-0.190284047063573, -0.000201339038912007,-0.0268533358371459,0.284839352215256,-0.207022267662317, -0.000212138193095956,-0.0264470894952271,0.302062654273384,-0.223760488261062, -0.000222937347279906,-0.0260408431533083,0.319285956331511,-0.240498708859806, -0.000233736501463522,-0.0256345968113891,0.336509258389639,-0.257236929458551, -0.00024453565564786,-0.0252283504694708,0.353732560447767,-0.273975150057295, -0.00025533480983142,-0.0248221041275516,0.370955862505894,-0.290713370656039, -0.000266133964015536,-0.0244158577856328,0.388179164564022,-0.307451591254784, -0.000276933118198985,-0.0240096114437136,0.40540246662215,-0.324189811853528, -0.00028773227238299,-0.0236033651017944,0.422625768680278,-0.340928032452273, -0.000298531426566773,-0.0231971187598758,0.439849070738405,-0.357666253051017, -0.000309330580750444,-0.0227908724179564,0.457072372796533,-0.374404473649762, -0.000320129734934116,-0.0223846260760372,0.474295674854661,-0.391142694248507, -0.000330928889118454,-0.0219783797341189,0.491518976912789,-0.407880914847251, -0.000341728043302014,-0.0215721333921997,0.508742278970916,-0.424619135445995, -0.00035252719748613,-0.0211658870502809,0.525965581029044,-0.441357356044739, -0.000363326351669913,-0.0207596407083621,0.543188883087171,-0.458095576643484, -0.000374125505854139,-0.0203533943664436,0.560412185145299,-0.474833797242228, -0.000384924660037145,-0.0199471480245239,0.577635487203426,-0.491572017840973, -0.000395723814221371,-0.0195409016826051,0.594858789261554,-0.508310238439718, -0.000406522968405043,-0.0191346553406864,0.612082091319682,-0.525048459038462, -0.00041732212258927,-0.0187284089987676,0.629305393377809,-0.541786679637206, -0.000428121276773386,-0.0183221626568488,0.646528695435937,-0.558524900235951, -0.000147375830275187,-0.0230680050143636,0.225524121968931,-0.166987261886944, -0.000155899325228193,-0.0225537475345226,0.241552403347803,-0.184782550512154, -0.000164422820181032,-0.0220394900546814,0.257580684726674,-0.202577839137364, -0.000172946315134093,-0.0215252325748405,0.273608966105546,-0.220373127762575, -0.000181469810086932,-0.0210109750949994,0.289637247484418,-0.238168416387785, -0.000189993305040048,-0.0204967176151585,0.30566552886329,-0.255963705012995, -0.000198516799992776,-0.0199824601353171,0.321693810242162,-0.273758993638206, -0.000207040294945671,-0.019468202655476,0.337722091621034,-0.291554282263416, -0.000215563789898954,-0.0189539451756355,0.353750372999905,-0.309349570888626, -0.000224087284851904,-0.0184396876957944,0.369778654378777,-0.327144859513836, -0.000232610779804965,-0.0179254302159535,0.385806935757649,-0.344940148139046, -0.000241134274757582,-0.0174111727361124,0.401835217136521,-0.362735436764257, -0.000249657769710421,-0.016896915256271,0.417863498515393,-0.380530725389467, -0.000258181264663593,-0.0163826577764301,0.433891779894265,-0.398326014014678, -0.000266704759616432,-0.0158684002965892,0.449920061273137,-0.416121302639888, -0.000275228254569604,-0.0153541428167483,0.465948342652009,-0.433916591265098, -0.000283751749522332,-0.0148398853369067,0.481976624030881,-0.451711879890309, -0.000292275244475615,-0.014325627857066,0.498004905409752,-0.469507168515518, -0.000300798739428454,-0.0138113703772256,0.514033186788623,-0.487302457140728, -0.000309322234380627,-0.0132971128973836,0.530061468167496,-0.505097745765939, -0.000317845729334132,-0.0127828554175426,0.546089749546368,-0.522893034391149, -0.000326369224287193,-0.0122685979377022,0.562118030925239,-0.54068832301636, -0.000334892719239921,-0.0117543404578608,0.578146312304111,-0.55848361164157, -0.000343416214192427,-0.011240082978019,0.594174593682983,-0.57627890026678, -0.000351939709146154,-0.010725825498179,0.610202875061855,-0.594074188891991, -0.000124781340769542,-0.0185925649659061,0.217111911363614,-0.177019598206651, -0.000131163698672054,-0.0180240798120679,0.23187134262974,-0.195856656999005, -0.000137546056574456,-0.0174555946582301,0.246630773895866,-0.214693715791358, -0.000143928414476857,-0.016887109504392,0.261390205161992,-0.233530774583712, -0.000150310772379314,-0.016318624350554,0.276149636428119,-0.252367833376066, -0.000156693130281715,-0.0157501391967159,0.290909067694245,-0.27120489216842, -0.00016307548818445,-0.0151816540428782,0.305668498960371,-0.290041950960773, -0.000169457846086518,-0.0146131688890396,0.320427930226497,-0.308879009753127, -0.000175840203988864,-0.0140446837352017,0.335187361492623,-0.327716068545481, -0.000182222561891598,-0.0134761985813641,0.349946792758749,-0.346553127337835, -0.000188604919794333,-0.0129077134275264,0.364706224024875,-0.365390186130188, -0.000194987277696734,-0.0123392282736887,0.379465655291,-0.384227244922542, -0.000201369635598803,-0.0117707431198495,0.394225086557127,-0.403064303714896, -0.000207751993501204,-0.011202257966012,0.408984517823253,-0.42190136250725, -0.000214134351403827,-0.0106337728121741,0.423743949089379,-0.440738421299604, -0.000220516709306451,-0.0100652876583365,0.438503380355505,-0.459575480091957, -0.000226899067208963,-0.00949680250449858,0.453262811621631,-0.478412538884311, -0.000233281425111587,-0.00892831735066091,0.468022242887757,-0.497249597676664, -0.000239663783013544,-0.00835983219682257,0.482781674153882,-0.516086656469018, -0.000246046140916056,-0.00779134704298423,0.497541105420009,-0.534923715261372, -0.000252428498819235,-0.00722286188914678,0.512300536686135,-0.553760774053725, -0.000258810856720637,-0.006654376735308,0.527059967952261,-0.57259783284608, -0.000265193214623483,-0.0060858915814701,0.541819399218387,-0.591434891638433, -0.000271575572525773,-0.00551740642763221,0.556578830484513,-0.610271950430787, -0.000277957930428285,-0.00494892127379343,0.57133826175064,-0.629109009223141, -0.000102547718876467,-0.0148346633131522,0.208478544432048,-0.186378973240234, -0.000107073886912112,-0.0142630400592851,0.221972677914883,-0.206187921070433, -0.000111600054947925,-0.013691416805418,0.235466811397719,-0.225996868900631, -0.000116126222983792,-0.013119793551551,0.248960944880554,-0.245805816730829, -0.00012065239101966,-0.012548170297684,0.262455078363389,-0.265614764561028, -0.000125178559055361,-0.0119765470438169,0.275949211846224,-0.285423712391226, -0.000129704727091229,-0.0114049237899503,0.289443345329059,-0.305232660221425, -0.000134230895126985,-0.0108333005360828,0.302937478811895,-0.325041608051623, -0.000138757063162798,-0.0102616772822159,0.31643161229473,-0.344850555881822, -0.000143283231198388,-0.00969005402834866,0.329925745777565,-0.36465950371202, -0.000147809399234422,-0.00911843077448182,0.3434198792604,-0.384468451542219, -0.000152335567270012,-0.00854680752061454,0.356914012743236,-0.404277399372417, -0.000156861735306046,-0.00797518426674793,0.37040814622607,-0.424086347202615, -0.000161387903341415,-0.0074035610128802,0.383902279708906,-0.443895295032814, -0.000165914071377116,-0.00683193775901314,0.397396413191741,-0.463704242863013, -0.000170440239413594,-0.00626031450514697,0.410890546674576,-0.483513190693211, -0.000174966407449073,-0.00568869125127947,0.424384680157412,-0.503322138523409, -0.000179492575484885,-0.00511706799741241,0.437878813640247,-0.523131086353608, -0.000184018743521031,-0.00454544474354579,0.451372947123082,-0.542940034183806, -0.000188544911556843,-0.00397382148967873,0.464867080605917,-0.562748982014005, -0.000193071079592544,-0.00340219823581167,0.478361214088752,-0.582557929844203, -0.000197597247628134,-0.00283057498194417,0.491855347571588,-0.602366877674401, -0.000202123415663724,-0.00225895172807666,0.505349481054423,-0.622175825504599, -0.000206649583700425,-0.00168732847421094,0.518843614537258,-0.641984773334798, -0.000211175751735793,-0.00111570522034343,0.532337748020093,-0.661793721164997, -8.19545731325921e-05,-0.011847105218636,0.200193061642561,-0.194674142680212, -8.49986958874061e-05,-0.0113114945378022,0.212499956188785,-0.215344471127903, -8.8042818642442e-05,-0.0107758838569688,0.224806850735009,-0.236014799575595, -9.10869413977555e-05,-0.0102402731761357,0.237113745281232,-0.256685128023287, -9.41310641523474e-05,-0.00970466249530189,0.249420639827456,-0.277355456470978, -9.71751869071613e-05,-0.00916905181446825,0.26172753437368,-0.29802578491867, -0.000100219309662086,-0.00863344113363507,0.274034428919903,-0.318696113366361, -0.000103263432417566,-0.00809783045280188,0.286341323466127,-0.339366441814053, -0.000106307555172047,-0.00756221977196825,0.29864821801235,-0.360036770261745, -0.000109351677927028,-0.00702660909113439,0.310955112558574,-0.380707098709436, -0.000112395800682008,-0.00649099841030099,0.323262007104798,-0.401377427157128, -0.000115439923436877,-0.00595538772946735,0.335568901651021,-0.422047755604819, -0.000118484046191747,-0.00541977704863417,0.347875796197245,-0.442718084052511, -0.000121528168946616,-0.00488416636780054,0.360182690743468,-0.463388412500203, -0.000124572291701708,-0.00434855568696735,0.372489585289692,-0.484058740947894, -0.000127616414456466,-0.00381294500613305,0.384796479835916,-0.504729069395586, -0.000130660537211669,-0.00327733432530053,0.397103374382139,-0.525399397843278, -0.000133704659966316,-0.00274172364446645,0.409410268928363,-0.546069726290969, -0.000136748782721297,-0.00220611296363327,0.421717163474586,-0.56674005473866, -0.000139792905476055,-0.00167050228279875,0.434024058020811,-0.587410383186352, -0.000142837028231368,-0.001134891601966,0.446330952567034,-0.608080711634044, -0.000145881150986682,-0.000599280921133261,0.458637847113258,-0.628751040081736, -0.000148925273741218,-6.36702402991851e-05,0.470944741659481,-0.649421368529427, -0.000151969396495755,0.00047194044053489,0.483251636205705,-0.670091696977119, -0.000155013519250624,0.00100755112136763,0.495558530751928,-0.690762025424811, -6.39008497230753e-05,-0.00957315228300548,0.192711109273746,-0.201698592911911, -6.58509058489853e-05,-0.00909685774987279,0.203964276096877,-0.223098348928492, -6.7800961975284e-05,-0.00862056321674054,0.215217442920008,-0.244498104945073, -6.9751018101083e-05,-0.00814426868360751,0.226470609743139,-0.265897860961655, -7.17010742274926e-05,-0.00766797415047549,0.23772377656627,-0.287297616978236, -7.36511303534026e-05,-0.00719167961734257,0.248976943389401,-0.308697372994817, -7.56011864792572e-05,-0.00671538508420966,0.260230110212532,-0.330097129011399, -7.75512426053337e-05,-0.00623909055107719,0.271483277035663,-0.35149688502798, -7.95012987311328e-05,-0.00576279601794405,0.282736443858794,-0.372896641044561, -8.14513548572648e-05,-0.00528650148481158,0.293989610681925,-0.394296397061142, -8.34014109832859e-05,-0.00481020695167911,0.305242777505056,-0.415696153077724, -8.5351467109307e-05,-0.00433391241854642,0.316495944328187,-0.437095909094305, -8.7301523235439e-05,-0.00385761788541372,0.327749111151318,-0.458495665110886, -8.92515793613491e-05,-0.00338132335228125,0.339002277974449,-0.479895421127468, -9.12016354879253e-05,-0.00290502881914878,0.35025544479758,-0.501295177144049, -9.31516916135022e-05,-0.00242873428601587,0.361508611620711,-0.52269493316063, -9.51017477400784e-05,-0.00195243975288406,0.372761778443842,-0.544094689177212, -9.70518038657664e-05,-0.0014761452197507,0.384014945266973,-0.565494445193793, -9.90018599917875e-05,-0.000999850686618231,0.395268112090103,-0.586894201210374, -0.000100951916118031,-0.000523556153486204,0.406521278913234,-0.608293957226955, -0.000102901972243497,-4.72616203519571e-05,0.417774445736366,-0.629693713243537, -0.00010485202836974,0.000429032912779626,0.429027612559496,-0.651093469260118, -0.000106802084496538,0.000905327445911652,0.440280779382627,-0.672493225276699, -0.000108752140621338,0.0013816219790459,0.451533946205759,-0.693892981293281, -0.000110702196747803,0.00185791651217793,0.46278711302889,-0.715292737309862, -4.88033117650999e-05,-0.00789628497602224,0.186300283828706,-0.207421042720615, -5.00010394403061e-05,-0.00748802205088783,0.196662254302952,-0.229415024977596, -5.11987671155123e-05,-0.00707975912575354,0.207024224777197,-0.251409007234577, -5.2396494790663e-05,-0.00667149620061913,0.217386195251442,-0.273402989491558, -5.35942224660912e-05,-0.00626323327548528,0.227748165725687,-0.295396971748539, -5.47919501410754e-05,-0.00585497035035032,0.238110136199933,-0.31739095400552, -5.59896778162261e-05,-0.00544670742521602,0.248472106674178,-0.339384936262501, -5.71874054916544e-05,-0.00503844450008195,0.258834077148423,-0.361378918519482, -5.8385133166694e-05,-0.00463018157494743,0.269196047622668,-0.383372900776463, -5.95828608419557e-05,-0.00422191864981358,0.279558018096913,-0.405366883033444, -6.07805885175505e-05,-0.00381365572467929,0.289919988571159,-0.427360865290425, -6.19783161924792e-05,-0.00340539279954455,0.300281959045404,-0.449354847547406, -6.31760438671858e-05,-0.00299712987440959,0.310643929519649,-0.471348829804387, -6.43737715432247e-05,-0.0025888669492764,0.321005899993894,-0.493342812061368, -6.55714992182643e-05,-0.00218060402414189,0.33136787046814,-0.515336794318349, -6.6769226893304e-05,-0.00177234109900715,0.341729840942385,-0.53733077657533, -6.79669545685657e-05,-0.00136407817387307,0.35209181141663,-0.559324758832311, -6.91646822438274e-05,-0.000955815248738556,0.362453781890876,-0.581318741089292, -7.0362409918201e-05,-0.000547552323603373,0.372815752365121,-0.603312723346273, -7.15601375936847e-05,-0.000139289398469966,0.383177722839365,-0.625306705603254, -7.27578652691685e-05,0.000268973526664773,0.393539693313611,-0.647300687860235, -7.39555929444302e-05,0.000677236451798624,0.403901663787856,-0.669294670117216, -7.51533206195809e-05,0.00108549937693292,0.414263634262101,-0.691288652374197, -7.63510482952867e-05,0.00149376230206677,0.424625604736346,-0.713282634631178, -7.75487759702154e-05,0.00190202522720151,0.434987575210592,-0.735276616888159, -3.6657207693358e-05,-0.00668517436174343,0.181040341264463,-0.211937548857577, -3.73682522203378e-05,-0.0063431899145856,0.190678143685197,-0.234400530677896, -3.80792967470955e-05,-0.00600120546742733,0.200315946105931,-0.256863512498215, -3.87903412739643e-05,-0.00565922102026928,0.209953748526665,-0.279326494318535, -3.9501385800722e-05,-0.00531723657311112,0.219591550947399,-0.301789476138854, -4.02124303273688e-05,-0.00497525212595296,0.229229353368133,-0.324252457959174, -4.09234748546261e-05,-0.00463326767879524,0.238867155788867,-0.346715439779493, -4.16345193815504e-05,-0.0042912832316373,0.248504958209601,-0.369178421599812, -4.23455639082526e-05,-0.00394929878447869,0.258142760630335,-0.391641403420132, -4.30566084352879e-05,-0.00360731433732098,0.267780563051069,-0.414104385240451, -4.37676529622122e-05,-0.00326532989016304,0.277418365471803,-0.43656736706077, -4.44786974886924e-05,-0.00292334544300443,0.287056167892537,-0.45903034888109, -4.51897420157277e-05,-0.00258136099584649,0.296693970313271,-0.481493330701409, -4.59007865424299e-05,-0.00223937654868833,0.306331772734005,-0.503956312521729, -4.66118310696872e-05,-0.00189739210153061,0.315969575154739,-0.526419294342048, -4.73228755961674e-05,-0.00155540765437268,0.325607377575472,-0.548882276162367, -4.80339201235358e-05,-0.00121342320721474,0.335245179996206,-0.571345257982687, -4.8744964650127e-05,-0.000871438760056353,0.34488298241694,-0.593808239803006, -4.94560091767182e-05,-0.000529454312897748,0.354520784837675,-0.616271221623325, -5.01670537036425e-05,-0.000187469865740031,0.364158587258408,-0.638734203443645, -5.08780982301227e-05,0.000154514581419019,0.373796389679143,-0.661197185263964, -5.15891427580462e-05,0.000496499028575403,0.383434192099876,-0.683660167084283, -5.23001872844153e-05,0.000838483475734009,0.39307199452061,-0.706123148904603, -5.30112318110065e-05,0.00118046792289261,0.402709796941344,-0.728586130724922, -5.37222763382639e-05,0.00152245237004989,0.412347599362078,-0.751049112545242, -2.71794826884886e-05,-0.00582096312288161,0.176871403320773,-0.215413996228058, -2.75910491914777e-05,-0.00553759727282632,0.185939311595505,-0.238237976627652, -2.80026156946889e-05,-0.00525423142277137,0.195007219870237,-0.261061957027245, -2.84141821976225e-05,-0.00497086557271609,0.204075128144968,-0.283885937426838, -2.88257487006116e-05,-0.00468749972266069,0.2131430364197,-0.306709917826431, -2.92373152036562e-05,-0.0044041338726053,0.222210944694432,-0.329533898226025, -2.96488817068674e-05,-0.00412076802255057,0.231278852969163,-0.352357878625618, -3.00604482095235e-05,-0.00383740217249473,0.240346761243895,-0.375181859025211, -3.04720147126236e-05,-0.00355403632243934,0.249414669518627,-0.398005839424804, -3.08835812159458e-05,-0.00327067047238461,0.258482577793358,-0.420829819824398, -3.1295147719157e-05,-0.00298730462232943,0.26755048606809,-0.443653800223991, -3.1706714221702e-05,-0.00270393877227337,0.276618394342822,-0.466477780623584, -3.21182807252463e-05,-0.00242057292221909,0.285686302617553,-0.489301761023178, -3.25298472279023e-05,-0.00213720707216369,0.294754210892285,-0.512125741422771, -3.29414137306694e-05,-0.00185384122210808,0.303822119167017,-0.534949721822364, -3.33529802343246e-05,-0.00157047537205357,0.312890027441748,-0.557773702221957, -3.37645467367587e-05,-0.00128710952199773,0.32195793571648,-0.58059768262155, -3.41761132395257e-05,-0.00100374367194211,0.331025843991212,-0.603421663021144, -3.4587679743292e-05,-0.00072037782188783,0.340093752265943,-0.626245643420737, -3.4999246245726e-05,-0.000437011971831769,0.349161660540675,-0.64906962382033, -3.54108127487152e-05,-0.000153646121776596,0.358229568815407,-0.671893604219924, -3.58223792520374e-05,0.000129719728277689,0.367297477090138,-0.694717584619517, -3.62339457548044e-05,0.000413085578333749,0.37636538536487,-0.71754156501911, -3.66455122579046e-05,0.000696451428389366,0.385433293639602,-0.740365545418703, -3.70570787603386e-05,0.000979817278445427,0.394501201914334,-0.763189525818296, -1.99549688742473e-05,-0.00520790955741457,0.173654690367246,-0.218038603065309, -2.01892717745511e-05,-0.004973198377072,0.182285150774053,-0.24113512587341, -2.04235746748549e-05,-0.00473848719672942,0.190915611180859,-0.264231648681511, -2.06578775754362e-05,-0.00450377601638707,0.199546071587666,-0.287328171489611, -2.0892180475296e-05,-0.00426906483604395,0.208176531994472,-0.310424694297712, -2.11264833759883e-05,-0.00403435365570193,0.216806992401279,-0.333521217105813, -2.13607862764031e-05,-0.00379964247535947,0.225437452808085,-0.356617739913913, -2.15950891762628e-05,-0.00356493129501589,0.234067913214892,-0.379714262722014, -2.18293920768442e-05,-0.00333022011467365,0.242698373621699,-0.402810785530115, -2.2063694977259e-05,-0.00309550893433119,0.251328834028505,-0.425907308338215, -2.22979978773408e-05,-0.00286079775398851,0.259959294435312,-0.449003831146316, -2.25323007779776e-05,-0.00262608657364605,0.268589754842118,-0.472100353954416, -2.27666036783924e-05,-0.00239137539330403,0.277220215248924,-0.495196876762517, -2.30009065782522e-05,-0.00215666421296024,0.285850675655732,-0.518293399570617, -2.3235209478667e-05,-0.00192195303261822,0.294481136062538,-0.541389922378718, -2.34695123793038e-05,-0.00168724185227576,0.303111596469344,-0.564486445186819, -2.37038152792746e-05,-0.00145253067193285,0.311742056876151,-0.587582967994919, -2.39381181798004e-05,-0.00121781949159061,0.320372517282957,-0.61067949080302, -2.41724210798822e-05,-0.000983108311247705,0.329002977689764,-0.633776013611121, -2.440672398063e-05,-0.000748397130905687,0.33763343809657,-0.656872536419221, -2.46410268810449e-05,-0.000513685950563225,0.346263898503377,-0.679969059227322, -2.48753297809046e-05,-0.000278974770220319,0.354894358910183,-0.703065582035423, -2.51096326808753e-05,-4.42635898769694e-05,0.36352481931699,-0.726162104843523, -2.53439355815122e-05,0.000190447590465492,0.372155279723797,-0.749258627651624, -2.5578238482149e-05,0.00042515877080751,0.380785740130603,-0.772355150459724, -1.45437579358587e-05,-0.00477388014024482,0.171222799841025,-0.219991290632827, -1.46760576720806e-05,-0.00457783107770926,0.179523785723102,-0.243290582924403, -1.48083574079694e-05,-0.00438178201517347,0.18782477160518,-0.266589875215978, -1.49406571438027e-05,-0.00418573295263736,0.196125757487258,-0.289889167507553, -1.5072956879858e-05,-0.0039896838901019,0.204426743369335,-0.313188459799129, -1.52052566158578e-05,-0.00379363482756623,0.212727729251412,-0.336487752090704, -1.53375563515801e-05,-0.00359758576503033,0.22102871513349,-0.35978704438228, -1.54698560872468e-05,-0.00340153670249421,0.229329701015567,-0.383086336673855, -1.56021558235242e-05,-0.00320548763995898,0.237630686897645,-0.40638562896543, -1.57344555596906e-05,-0.00300943857742375,0.245931672779722,-0.429684921257006, -1.58667552953018e-05,-0.00281338951488719,0.2542326586618,-0.452984213548581, -1.59990550313571e-05,-0.00261734045235174,0.262533644543877,-0.476283505840157, -1.61313547669684e-05,-0.00242129138981562,0.270834630425954,-0.499582798131732, -1.62636545031347e-05,-0.00222524232728016,0.279135616308032,-0.522882090423307, -1.63959542386349e-05,-0.0020291932647436,0.28743660219011,-0.546181382714883, -1.65282539746903e-05,-0.00183314420220793,0.295737588072187,-0.569480675006458, -1.66605537109676e-05,-0.00163709513967292,0.304038573954264,-0.592779967298034, -1.67928534466899e-05,-0.00144104607713658,0.312339559836342,-0.616079259589609, -1.69251531828563e-05,-0.00124499701460135,0.320640545718419,-0.639378551881185, -1.70574529181344e-05,-0.00104894795206434,0.328941531600497,-0.66267784417276, -1.71897526540787e-05,-0.000852898889529108,0.337242517482574,-0.685977136464335, -1.73220523910222e-05,-0.000656849826993877,0.345543503364652,-0.70927642875591, -1.74543521264114e-05,-0.000460800764458202,0.353844489246729,-0.732575721047486, -1.75866518623558e-05,-0.000264751701922528,0.362145475128806,-0.755875013339061, -1.77189515983001e-05,-6.87026393868528e-05,0.370446461010884,-0.779174305630637, -1.05428704574306e-05,-0.00446653785499607,0.16941205445849,-0.221428303171678, -1.06175524133278e-05,-0.00430028647719183,0.177468386034947,-0.244876816616242, -1.06922343692251e-05,-0.00413403509938748,0.185524717611403,-0.268325330060805, -1.07669163251223e-05,-0.00396778372158346,0.193581049187859,-0.291773843505368, -1.0841598280853e-05,-0.003801532343779,0.201637380764316,-0.315222356949931, -1.09162802365281e-05,-0.00363528096597454,0.209693712340772,-0.338670870394494, -1.09909621924253e-05,-0.0034690295881703,0.217750043917228,-0.362119383839057, -1.10656441482115e-05,-0.00330277821036562,0.225806375493685,-0.38556789728362, -1.11403261041643e-05,-0.00313652683256183,0.233862707070141,-0.409016410728183, -1.12150080595619e-05,-0.0029702754547567,0.241919038646597,-0.432464924172746, -1.12896900158477e-05,-0.00280402407695313,0.249975370223053,-0.455913437617309, -1.13643719718004e-05,-0.00263777269914911,0.25803170179951,-0.479361951061872, -1.1439053927087e-05,-0.00247152132134443,0.266088033375966,-0.502810464506435, -1.15137358831507e-05,-0.00230526994353975,0.274144364952423,-0.526258977950998, -1.15884178389924e-05,-0.00213901856573573,0.282200696528879,-0.549707491395561, -1.16630997948342e-05,-0.00197276718793171,0.290257028105335,-0.573156004840124, -1.17377817503428e-05,-0.00180651581012681,0.298313359681791,-0.596604518284687, -1.18124637062955e-05,-0.00164026443232279,0.306369691258247,-0.62005303172925, -1.18871456620262e-05,-0.00147401305451789,0.314426022834704,-0.643501545173812, -1.1961827618534e-05,-0.00130776167671476,0.32248235441116,-0.666950058618376, -1.20365095735986e-05,-0.00114151029890985,0.330538685987616,-0.690398572062939, -1.21111915298844e-05,-0.000975258921106281,0.338595017564072,-0.713847085507502, -1.21858734856151e-05,-0.000809007543301377,0.346651349140529,-0.737295598952065, -1.22605554413457e-05,-0.000642756165496916,0.354707680716985,-0.760744112396628, -1.23352373974095e-05,-0.0004765047876929,0.362764012293442,-0.784192625841191, -7.61258073717075e-06,-0.00424864627727706,0.16807888994616,-0.222477349273512, -7.65503377453403e-06,-0.00410486947323174,0.1759554472951,-0.246034796958118, -7.69748681206384e-06,-0.00396109266918687,0.183832004644041,-0.269592244642725, -7.7399398493716e-06,-0.00381731586514178,0.191708561992982,-0.293149692327332, -7.78239288673488e-06,-0.00367353906109646,0.199585119341923,-0.316707140011938, -7.82484592409816e-06,-0.00352976225705137,0.207461676690864,-0.340264587696544, -7.86729896146143e-06,-0.0033859854530065,0.215338234039804,-0.363822035381151, -7.90975199910227e-06,-0.00324220864896163,0.223214791388745,-0.387379483065758, -7.9522050362435e-06,-0.00309843184491632,0.231091348737686,-0.410936930750364, -7.99465807377331e-06,-0.00295465504087122,0.238967906086627,-0.434494378434971, -8.03711111108107e-06,-0.00281087823682591,0.246844463435568,-0.458051826119577, -8.07956414838884e-06,-0.00266710143278082,0.254721020784508,-0.481609273804184, -8.12201718569661e-06,-0.0025233246287355,0.262597578133449,-0.50516672148879, -8.16447022300437e-06,-0.00237954782469085,0.270474135482389,-0.528724169173396, -8.20692326042316e-06,-0.00223577102064509,0.278350692831331,-0.552281616858003, -8.24937629806399e-06,-0.00209199421660067,0.286227250180271,-0.57583906454261, -8.29182933537176e-06,-0.00194821741255513,0.294103807529212,-0.599396512227216, -8.33428237323464e-06,-0.00180444060851048,0.301980364878153,-0.622953959911823, -8.37673540976525e-06,-0.0016606638044645,0.309856922227094,-0.646511407596429, -8.41918844685097e-06,-0.00151688700041941,0.317733479576034,-0.670068855281036, -8.46164148438078e-06,-0.00137311019637432,0.325610036924975,-0.693626302965642, -8.50409452179957e-06,-0.00122933339232967,0.333486594273916,-0.717183750650249, -8.54654755888529e-06,-0.00108555658828413,0.341363151622857,-0.740741198334855, -8.58900059730328e-06,-0.000941779784239927,0.349239708971798,-0.764298646019462, -8.63145363372286e-06,-0.000798002980193502,0.357116266320739,-0.787856093704068, -5.48107768499895e-06,-0.00409394044038736,0.167105395083023,-0.223238683404435, -5.50553729483649e-06,-0.00396685621611603,0.174850863792921,-0.246875188963453, -5.52999690445199e-06,-0.00383977199184504,0.182596332502818,-0.270511694522472, -5.55445651478914e-06,-0.00371268776757483,0.190341801212715,-0.294148200081491, -5.5789161246822e-06,-0.00358560354330417,0.198087269922612,-0.317784705640509, -5.60337573435321e-06,-0.00345851931903307,0.205832738632509,-0.341421211199528, -5.62783534435729e-06,-0.00333143509476219,0.213578207342407,-0.365057716758546, -5.65229495425035e-06,-0.00320435087049131,0.221323676052304,-0.388694222317565, -5.67675456442096e-06,-0.00307726664622088,0.229069144762201,-0.412330727876584, -5.70121417409197e-06,-0.00295018242195,0.236814613472098,-0.435967233435602, -5.72567378398503e-06,-0.0028230981976789,0.244560082181996,-0.459603738994621, -5.75013339398911e-06,-0.00269601397340846,0.252305550891893,-0.48324024455364, -5.77459300377114e-06,-0.0025689297491378,0.26005101960179,-0.506876750112658, -5.79905261399727e-06,-0.0024418455248667,0.267796488311687,-0.530513255671677, -5.82351222366828e-06,-0.00231476130059582,0.275541957021584,-0.554149761230695, -5.84797183345032e-06,-0.00218767707632472,0.283287425731482,-0.577786266789714, -5.87243144301031e-06,-0.0020605928520534,0.291032894441379,-0.601422772348733, -5.89689105345848e-06,-0.00193350862778363,0.298778363151276,-0.625059277907751, -5.92135066279642e-06,-0.00180642440351209,0.306523831861173,-0.64869578346677, -5.94581027291152e-06,-0.00167934017924187,0.31426930057107,-0.672332289025788, -5.97026988313765e-06,-0.00155225595497122,0.322014769280967,-0.695968794584807, -5.99472949314173e-06,-0.00142517173070011,0.329760237990865,-0.719605300143826, -6.01918910325683e-06,-0.0012980875064299,0.337505706700762,-0.743241805702844, -6.0436487127058e-06,-0.0011710032821588,0.345251175410659,-0.766878311261863, -6.06810832293192e-06,-0.00104391905788859,0.352996644120556,-0.790514816820882, -3.93827156464077e-06,-0.00398393860121116,0.166398779280903,-0.223788859236162, -3.95263214225672e-06,-0.00386911732963868,0.174049192917986,-0.247482495731576, -3.9669927195396e-06,-0.00375429605806565,0.18169960655507,-0.27117613222699, -3.98135329715554e-06,-0.00363947478649318,0.189350020192153,-0.294869768722404, -3.99571387471598e-06,-0.00352465351492026,0.197000433829236,-0.318563405217818, -4.01007445205437e-06,-0.00340983224334757,0.20465084746632,-0.342257041713232, -4.02443502950378e-06,-0.00329501097177465,0.212301261103403,-0.365950678208646, -4.03879560728626e-06,-0.0031801897002024,0.219951674740486,-0.389644314704059, -4.05315618479118e-06,-0.00306536842862926,0.22760208837757,-0.413337951199473, -4.06751676207406e-06,-0.00295054715705634,0.235252502014653,-0.437031587694887, -4.08187733980103e-06,-0.00283572588548409,0.242902915651736,-0.460725224190301, -4.09623791708391e-06,-0.00272090461391117,0.25055332928882,-0.484418860685715, -4.11059849447781e-06,-0.00260608334233825,0.258203742925903,-0.508112497181129, -4.12495907253785e-06,-0.00249126207076644,0.265854156562986,-0.531806133676543, -4.13931964948766e-06,-0.00237644079919286,0.27350457020007,-0.555499770171957, -4.15368022710361e-06,-0.00226161952762038,0.281154983837153,-0.579193406667371, -4.1680408049416e-06,-0.00214679825604813,0.288805397474236,-0.602887043162785, -4.18240138266857e-06,-0.00203197698447521,0.29645581111132,-0.626580679658198, -4.19676195950736e-06,-0.00191715571290141,0.304106224748404,-0.650274316153612, -4.21112253734535e-06,-0.00180233444132982,0.311756638385486,-0.673967952649026, -4.2254831145172e-06,-0.00168751316975646,0.31940705202257,-0.69766158914444, -4.23984369168906e-06,-0.0015726918981831,0.327057465659653,-0.721355225639854, -4.25420426986012e-06,-0.00145787062661151,0.334707879296736,-0.745048862135268, -4.26856484692095e-06,-0.00134304935503771,0.34235829293382,-0.768742498630682, -4.2829254245369e-06,-0.00122822808346523,0.350008706570903,-0.792436135126095, -2.8255415050471e-06,-0.00390562563951535,0.165888096140561,-0.224185216446855, -2.8341668102394e-06,-0.00379974294697316,0.173469861687616,-0.247920011163492, -2.84279211559824e-06,-0.00369386025443141,0.18105162723467,-0.271654805880129, -2.85141742067951e-06,-0.003587977561889,0.188633392781724,-0.295389600596766, -2.86004272620488e-06,-0.00348209486934703,0.196215158328779,-0.319124395313403, -2.86866803156371e-06,-0.00337621217680484,0.203796923875833,-0.34285919003004, -2.87729333714459e-06,-0.00327032948426331,0.211378689422887,-0.366593984746677, -2.88591864228138e-06,-0.0031644467917209,0.218960454969942,-0.390328779463314, -2.89454394719613e-06,-0.00305856409917871,0.226542220516996,-0.414063574179951, -2.903169252777e-06,-0.00295268140663674,0.23412398606405,-0.437798368896589, -2.91179455791379e-06,-0.00284679871409454,0.241705751611105,-0.461533163613225, -2.92041986360569e-06,-0.00274091602155258,0.249287517158159,-0.485267958329863, -2.92904516874248e-06,-0.00263503332901038,0.256869282705213,-0.5090027530465, -2.93767047421234e-06,-0.00252915063646864,0.264451048252267,-0.532737547763137, -2.94629577912708e-06,-0.00242326794392644,0.272032813799322,-0.556472342479774, -2.9549210843749e-06,-0.00231738525138403,0.279614579346376,-0.580207137196411, -2.96354638995577e-06,-0.0022115025588425,0.28719634489343,-0.603941931913048, -2.97217169487052e-06,-0.00210561986629942,0.294778110440485,-0.627676726629685, -2.9807970004514e-06,-0.00199973717375768,0.302359875987539,-0.651411521346322, -2.98942230636534e-06,-0.00189385448121637,0.309941641534593,-0.675146316062959, -2.99804761072497e-06,-0.00178797178867374,0.317523407081648,-0.698881110779596, -3.0066729165279e-06,-0.00168208909613199,0.325105172628702,-0.722615905496233, -3.01529822188673e-06,-0.0015762064035898,0.332686938175756,-0.746350700212871, -3.02392352746761e-06,-0.00147032371104805,0.340268703722811,-0.770085494929508, -3.03254883204929e-06,-0.00136444101850497,0.347850469269865,-0.793820289646145, -2.02504840152162e-06,-0.00384981663134298,0.165520168050654,-0.224470125042806, -2.03035955431696e-06,-0.00375041303838319,0.173052500907214,-0.248234505019163, -2.0356707066127e-06,-0.00365100944542318,0.180584833763774,-0.271998884995521, -2.04098185996315e-06,-0.00355160585246428,0.188117166620333,-0.295763264971879, -2.04629301253645e-06,-0.00345220225950427,0.195649499476893,-0.319527644948237, -2.05160416527628e-06,-0.0033527986665447,0.203181832333453,-0.343292024924595, -2.05691531823815e-06,-0.00325339507358557,0.210714165190012,-0.367056404900952, -2.06222647081145e-06,-0.00315399148062534,0.218246498046572,-0.39082078487731, -2.06753762377332e-06,-0.00305458788766622,0.225778830903131,-0.414585164853668, -2.0728487762911e-06,-0.00295518429470643,0.233311163759691,-0.438349544830026, -2.07815992914195e-06,-0.00285578070174686,0.240843496616251,-0.462113924806384, -2.08347108188178e-06,-0.00275637710878729,0.248375829472811,-0.485878304782741, -2.08878223462161e-06,-0.00265697351582772,0.25590816232937,-0.509642684759099, -2.09409338736144e-06,-0.00255756992286815,0.26344049518593,-0.533407064735457, -2.09940454010127e-06,-0.00245816632990836,0.27097282804249,-0.557171444711815, -2.10471569306314e-06,-0.00235876273694902,0.278505160899049,-0.580935824688173, -2.11002684569195e-06,-0.00225935914398923,0.286037493755609,-0.60470020466453, -2.11533799843178e-06,-0.00215995555102921,0.293569826612169,-0.628464584640888, -2.12064915150467e-06,-0.00206055195807009,0.301102159468729,-0.652228964617246, -2.12596030435552e-06,-0.00196114836511052,0.308634492325288,-0.675993344593604, -2.13127145720637e-06,-0.0018617447721514,0.316166825181848,-0.699757724569962, -2.13658260961314e-06,-0.00176234117919138,0.323699158038407,-0.723522104546319, -2.14189376246399e-06,-0.00166293758623137,0.331231490894968,-0.747286484522677, -2.1472049146487e-06,-0.00156353399327092,0.338763823751528,-0.771050864499035, -2.15251606783262e-06,-0.00146413040031224,0.346296156608087,-0.794815244475393, -1.45023219166873e-06,-0.00381001374802681,0.165255684628993,-0.224674594955478, -1.45358602143819e-06,-0.00371528779198183,0.172752496235725,-0.248460207339553, -1.45693985115214e-06,-0.00362056183593662,0.180249307842458,-0.272245819723629, -1.46029368097711e-06,-0.00352583587989197,0.187746119449191,-0.296031432107704, -1.46364751058004e-06,-0.00343110992384665,0.195242931055924,-0.31981704449178, -1.46700134051603e-06,-0.003336383967802,0.202739742662657,-0.343602656875855, -1.47035516978589e-06,-0.00324165801175647,0.21023655426939,-0.36738826925993, -1.47370899999943e-06,-0.00314693205571204,0.217733365876122,-0.391173881644006, -1.47706282938032e-06,-0.00305220609966694,0.225230177482855,-0.414959494028081, -1.48041665892773e-06,-0.0029574801436214,0.232726989089588,-0.438745106412157, -1.48377048891923e-06,-0.00286275418757653,0.240223800696321,-0.462530718796232, -1.48712431857767e-06,-0.00276802823153144,0.247720612303054,-0.486316331180307, -1.49047814823611e-06,-0.00267330227548612,0.255217423909787,-0.510101943564383, -1.49383197789454e-06,-0.00257857631944147,0.262714235516519,-0.533887555948458, -1.49718580799707e-06,-0.0024838503633966,0.270211047123252,-0.557673168332534, -1.50053963721142e-06,-0.00238912440735128,0.277707858729985,-0.581458780716609, -1.5038934670919e-06,-0.00229439845130619,0.285204670336718,-0.605244393100684, -1.50724729730545e-06,-0.00219967249526176,0.292701481943451,-0.62903000548476, -1.51060112685286e-06,-0.00210494653921689,0.300198293550183,-0.652815617868835, -1.51395495706641e-06,-0.00201022058317246,0.307695105156916,-0.676601230252911, -1.51730878605871e-06,-0.00191549462712626,0.315191916763649,-0.700386842636986, -1.52066261605022e-06,-0.00182076867108183,0.322688728370382,-0.724172455021062, -1.52401644559763e-06,-0.00172604271503651,0.330185539977115,-0.747958067405137, -1.52737027558913e-06,-0.00163131675899209,0.337682351583847,-0.771743679789213, -1.53072410569166e-06,-0.00153659080294766,0.34517916319058,-0.795529292173288, -0.000290365556621486,-0.0831048794773134,0.270183118729893,-0.0811597439040615, -0.000317727021539316,-0.0851696668271098,0.293139119567801,-0.089629629797002, -0.000345088486457201,-0.0872344541769061,0.316095120405709,-0.0980995156899426, -0.000372449951375031,-0.0892992415267024,0.339051121243617,-0.106569401582883, -0.000399811416292473,-0.0913640288764984,0.362007122081525,-0.115039287475824, -0.000427172881210525,-0.093428816226295,0.384963122919433,-0.123509173368764, -0.000454534346128355,-0.0954936035760914,0.407919123757341,-0.131979059261705, -0.000481895811046018,-0.0975583909258875,0.430875124595249,-0.140448945154645, -0.000509257275963848,-0.0996231782756838,0.453831125433157,-0.148918831047585, -0.000536618740881512,-0.10168796562548,0.476787126271066,-0.157388716940526, -0.000563980205799286,-0.103752752975276,0.499743127108973,-0.165858602833466, -0.000591341670717282,-0.105817540325073,0.522699127946882,-0.174328488726407, -0.000618703135634613,-0.107882327674869,0.54565512878479,-0.182798374619348, -0.00064606460055272,-0.109947115024665,0.568611129622698,-0.191268260512289, -0.000673426065470495,-0.112011902374461,0.591567130460606,-0.199738146405229, -0.000700787530388602,-0.114076689724258,0.614523131298514,-0.208208032298169, -0.000728148995305933,-0.116141477074054,0.637479132136422,-0.21667791819111, -0.00075551046022404,-0.118206264423851,0.66043513297433,-0.22514780408405, -0.000782871925141593,-0.120271051773646,0.683391133812238,-0.233617689976991, -0.000810233390059145,-0.122335839123443,0.706347134650147,-0.242087575869932, -0.000837594854977031,-0.124400626473239,0.729303135488054,-0.250557461762871, -0.000864956319894805,-0.126465413823035,0.752259136325962,-0.259027347655812, -0.000892317784812802,-0.128530201172832,0.77521513716387,-0.267497233548752, -0.000919679249730465,-0.130594988522628,0.798171138001779,-0.275967119441694, -0.000947040714648462,-0.132659775872424,0.821127138839687,-0.284437005334635, -0.000285439044318658,-0.0788884600813667,0.269908099348282,-0.0863975780654059, -0.000311814613315697,-0.0807116562214574,0.292640773346268,-0.0953862696122311, -0.000338190182312514,-0.0825348523615481,0.315373447344253,-0.104374961159056, -0.00036456575130972,-0.0843580485016392,0.338106121342238,-0.113363652705881, -0.000390941320307037,-0.0861812446417302,0.360838795340224,-0.122352344252706, -0.000417316889304076,-0.088004440781821,0.38357146933821,-0.131341035799531, -0.000443692458300948,-0.0898276369219116,0.406304143336196,-0.140329727346357, -0.000470068027297932,-0.0916508330620025,0.429036817334181,-0.149318418893182, -0.000496443596295304,-0.0934740292020937,0.451769491332166,-0.158307110440007, -0.000522819165292066,-0.0952972253421842,0.474502165330152,-0.167295801986832, -0.000549194734289049,-0.097120421482275,0.497234839328137,-0.176284493533656, -0.000575570303286366,-0.0989436176223661,0.519967513326123,-0.185273185080482, -0.000601945872283127,-0.100766813762457,0.542700187324108,-0.194261876627307, -0.000628321441280444,-0.102590009902548,0.565432861322094,-0.203250568174133, -0.000654697010277649,-0.104413206042639,0.588165535320079,-0.212239259720957, -0.000681072579274633,-0.106236402182729,0.610898209318065,-0.221227951267783, -0.000707448148271617,-0.10805959832282,0.63363088331605,-0.230216642814608, -0.000733823717268933,-0.109882794462911,0.656363557314036,-0.239205334361433, -0.000760199286265473,-0.111705990603002,0.679096231312021,-0.248194025908258, -0.000786574855262789,-0.113529186743093,0.701828905310007,-0.257182717455083, -0.000812950424259884,-0.115352382883184,0.724561579307992,-0.266171409001908, -0.000839325993256868,-0.117175579023274,0.747294253305977,-0.275160100548733, -0.000865701562253851,-0.118998775163365,0.770026927303963,-0.284148792095558, -0.000892077131250613,-0.120821971303456,0.792759601301949,-0.293137483642384, -0.000918452700247707,-0.122645167443546,0.815492275299935,-0.30212617518921, -0.000278517917485899,-0.0735827109712001,0.269214791543963,-0.0931462226777854, -0.000303590963914135,-0.0751102086031479,0.291626147898498,-0.102803365128765, -0.000328664010342372,-0.0766377062350957,0.314037504253033,-0.112460507579744, -0.000353737056770553,-0.0781652038670434,0.336448860607568,-0.122117650030723, -0.000378810103198957,-0.0796927014989917,0.358860216962103,-0.131774792481703, -0.000403883149626971,-0.0812201991309393,0.381271573316638,-0.141431934932682, -0.000428956196055541,-0.0827476967628875,0.403682929671172,-0.151089077383661, -0.000454029242483833,-0.0842751943948354,0.426094286025707,-0.160746219834641, -0.000479102288912125,-0.0858026920267834,0.448505642380242,-0.17040336228562, -0.000504175335339863,-0.0873301896587306,0.470916998734777,-0.180060504736599, -0.000529248381768377,-0.088857687290679,0.493328355089311,-0.189717647187578, -0.000554321428196447,-0.0903851849226263,0.515739711443847,-0.199374789638558, -0.000579394474624739,-0.0919126825545744,0.538151067798381,-0.209031932089537, -0.000604467521053254,-0.0934401801865226,0.560562424152916,-0.218689074540517, -0.000629540567481546,-0.0949676778184705,0.58297378050745,-0.228346216991495, -0.000654613613909394,-0.096495175450418,0.605385136861986,-0.238003359442475, -0.000679686660337797,-0.0980226730823657,0.627796493216521,-0.247660501893454, -0.000704759706765978,-0.0995501707143136,0.650207849571056,-0.257317644344434, -0.00072983275319416,-0.101077668346262,0.67261920592559,-0.266974786795413, -0.000754905799622563,-0.102605165978209,0.695030562280125,-0.276631929246392, -0.000779978846050855,-0.104132663610157,0.717441918634659,-0.286289071697371, -0.000805051892478925,-0.105660161242105,0.739853274989195,-0.295946214148351, -0.000830124938907328,-0.107187658874053,0.762264631343729,-0.30560335659933, -0.000855197985335399,-0.108715156506001,0.784675987698264,-0.31526049905031, -0.000880271031763469,-0.110242654137948,0.8070873440528,-0.324917641501289, -0.000268932171180125,-0.0671413516680254,0.267806399191215,-0.101606868718142, -0.000292324722309001,-0.0683235465568256,0.28976151765628,-0.11210203521991, -0.000315717273438099,-0.0695057414456262,0.311716636121344,-0.122597201721679, -0.000339109824566919,-0.0706879363344263,0.333671754586409,-0.133092368223448, -0.00036250237569585,-0.0718701312232265,0.355626873051473,-0.143587534725217, -0.000385894926824615,-0.0730523261120266,0.377581991516538,-0.154082701226985, -0.000409287477953768,-0.0742345210008273,0.399537109981602,-0.164577867728754, -0.000432680029082755,-0.0754167158896277,0.421492228446667,-0.175073034230523, -0.000456072580211631,-0.076598910778428,0.443447346911731,-0.185568200732291, -0.000479465131340673,-0.0777811056672282,0.465402465376796,-0.196063367234061, -0.000502857682469271,-0.0789633005560282,0.48735758384186,-0.206558533735829, -0.000526250233598202,-0.0801454954448284,0.509312702306925,-0.217053700237598, -0.000549642784727467,-0.0813276903336293,0.53126782077199,-0.227548866739367, -0.000573035335856065,-0.0825098852224291,0.553222939237055,-0.238044033241136, -0.000596427886985218,-0.0836920801112297,0.575178057702118,-0.248539199742904, -0.000619820438113927,-0.0848742750000295,0.597133176167183,-0.259034366244673, -0.000643212989243191,-0.08605646988883,0.619088294632248,-0.269529532746442, -0.000666605540371901,-0.0872386647776302,0.641043413097313,-0.280024699248211, -0.000689998091501165,-0.0884208596664307,0.662998531562377,-0.290519865749979, -0.000713390642629874,-0.0896030545552307,0.684953650027442,-0.301015032251749, -0.000736783193758694,-0.0907852494440313,0.706908768492506,-0.311510198753517, -0.000760175744887959,-0.0919674443328318,0.728863886957571,-0.322005365255286, -0.000783568296016446,-0.0931496392216316,0.750819005422635,-0.332500531757054, -0.000806960847145488,-0.0943318341104322,0.7727741238877,-0.342995698258824, -0.000830353398274863,-0.0955140289992329,0.794729242352764,-0.353490864760592, -0.000255971318819492,-0.0596655614004283,0.265296336351817,-0.111857495529336, -0.000277264898083718,-0.0604683600995755,0.286619086203558,-0.123367983055347, -0.000298558477347832,-0.0612711587987222,0.307941836055298,-0.134878470581358, -0.000319852056612002,-0.0620739574978694,0.329264585907038,-0.14638895810737, -0.000341145635876283,-0.0628767561970165,0.350587335758779,-0.157899445633381, -0.000362439215140398,-0.0636795548961633,0.371910085610519,-0.169409933159392, -0.000383732794404346,-0.0644823535953101,0.393232835462259,-0.180920420685404, -0.000405026373668849,-0.0652851522944573,0.414555585314,-0.192430908211415, -0.000426319952932963,-0.0660879509936041,0.43587833516574,-0.203941395737426, -0.000447613532197133,-0.0668907496927511,0.45720108501748,-0.215451883263438, -0.000468907111461636,-0.0676935483918983,0.47852383486922,-0.226962370789448, -0.000490200690725473,-0.0684963470910449,0.499846584720961,-0.23847285831546, -0.000511494269989754,-0.0692991457901919,0.521169334572701,-0.249983345841471, -0.000532787849253813,-0.0701019444893389,0.542492084424442,-0.261493833367483, -0.000554081428518316,-0.0709047431884862,0.563814834276182,-0.273004320893494, -0.000575375007782264,-0.071707541887633,0.585137584127922,-0.284514808419505, -0.000596668587046212,-0.0725103405867795,0.606460333979663,-0.296025295945517, -0.000617962166310493,-0.0733131392859265,0.627783083831403,-0.307535783471528, -0.000639255745574885,-0.074115937985074,0.649105833683143,-0.319046270997539, -0.000660549324839055,-0.0749187366842208,0.670428583534884,-0.330556758523551, -0.000681842904103336,-0.075721535383368,0.691751333386624,-0.342067246049562, -0.000703136483367506,-0.0765243340825146,0.713074083238364,-0.353577733575573, -0.000724430062631565,-0.0773271327816618,0.734396833090104,-0.365088221101584, -0.000745723641896179,-0.0781299314808093,0.755719582941845,-0.376598708627596, -0.000767017221160127,-0.0789327301799561,0.777042332793585,-0.388109196153607, -0.000239062339685736,-0.0514489907115763,0.261271124276077,-0.123774896546407, -0.00025784440303811,-0.0518660262219388,0.281749032288758,-0.13646579850266, -0.000276626466390317,-0.0522830617323016,0.302226940301438,-0.149156700458914, -0.00029540852974258,-0.0527000972426643,0.322704848314118,-0.161847602415167, -0.000314190593094898,-0.053117132753027,0.343182756326799,-0.174538504371421, -0.000332972656447106,-0.0535341682633895,0.363660664339479,-0.187229406327674, -0.000351754719799424,-0.0539512037737524,0.384138572352159,-0.199920308283928, -0.000370536783151854,-0.0543682392841154,0.40461648036484,-0.212611210240181, -0.000389318846504172,-0.0547852747944781,0.42509438837752,-0.225302112196435, -0.000408100909856213,-0.0552023103048405,0.445572296390201,-0.237993014152688, -0.000426882973208476,-0.0556193458152032,0.466050204402881,-0.250683916108941, -0.000445665036561071,-0.0560363813255664,0.486528112415561,-0.263374818065195, -0.00046444709991289,-0.0564534168359285,0.507006020428241,-0.276065720021448, -0.000483229163265153,-0.0568704523462913,0.527483928440922,-0.288756621977703, -0.000502011226617749,-0.0572874878566543,0.547961836453602,-0.301447523933956, -0.000520793289970345,-0.0577045233670175,0.568439744466282,-0.314138425890209, -0.000539575353321942,-0.0581215588773794,0.588917652478963,-0.326829327846463, -0.000558357416674315,-0.0585385943877421,0.609395560491643,-0.339520229802717, -0.000577139480026911,-0.0589556298981053,0.629873468504323,-0.352211131758969, -0.000595921543379063,-0.0593726654084679,0.650351376517004,-0.364902033715223, -0.000614703606731437,-0.0597897009188304,0.670829284529684,-0.377592935671477, -0.000633485670083589,-0.0602067364291932,0.691307192542365,-0.39028383762773, -0.000652267733435852,-0.0606237719395564,0.711785100555044,-0.402974739583983, -0.000671049796787893,-0.0610408074499182,0.732263008567725,-0.415665641540237, -0.000689831860140711,-0.0614578429602819,0.752740916580406,-0.428356543496491, -0.000218035455180232,-0.0429684642126457,0.255419200877421,-0.13698336251664, -0.000233971756844753,-0.0430296346636544,0.274822998954568,-0.150982558438187, -0.000249908058509163,-0.0430908051146629,0.294226797031714,-0.164981754359735, -0.000265844360173906,-0.043151975565672,0.31363059510886,-0.178980950281283, -0.000281780661838038,-0.0432131460166802,0.333034393186007,-0.192980146202831, -0.000297716963502836,-0.0432743164676892,0.352438191263153,-0.206979342124378, -0.000313653265167191,-0.0433354869186977,0.3718419893403,-0.220978538045926, -0.000329589566831545,-0.0433966573697064,0.391245787417446,-0.234977733967474, -0.000345525868496344,-0.0434578278207156,0.410649585494592,-0.248976929889022, -0.000361462170160975,-0.0435189982717241,0.430053383571739,-0.26297612581057, -0.000377398471825496,-0.0435801687227328,0.449457181648885,-0.276975321732117, -0.000393334773490017,-0.0436413391737418,0.468860979726031,-0.290974517653665, -0.000409271075154649,-0.0437025096247508,0.488264777803178,-0.304973713575213, -0.000425207376819059,-0.0437636800757588,0.507668575880325,-0.318972909496761, -0.000441143678483802,-0.043824850526768,0.52707237395747,-0.332972105418308, -0.000457079980148323,-0.0438860209777769,0.546476172034617,-0.346971301339857, -0.000473016281812622,-0.0439471914287854,0.565879970111763,-0.360970497261404, -0.000488952583477475,-0.0440083618797946,0.585283768188909,-0.374969693182952, -0.000504888885141996,-0.0440695323308034,0.604687566266056,-0.3889688891045, -0.000520825186806628,-0.0441307027818123,0.624091364343202,-0.402968085026048, -0.000536761488470594,-0.0441918732328201,0.643495162420348,-0.416967280947595, -0.000552697790135337,-0.0442530436838289,0.662898960497495,-0.430966476869143, -0.000568634091800302,-0.0443142141348383,0.682302758574641,-0.444965672790691, -0.000584570393464712,-0.0443753845858472,0.701706556651787,-0.458964868712239, -0.000600506695128789,-0.0444365550368553,0.721110354728934,-0.472964064633787, -0.000193380070825533,-0.0347963517830426,0.247690675273858,-0.150869206911089, -0.000206297447399584,-0.0345671484551668,0.26580912793042,-0.166243790895506, -0.000219214823973413,-0.0343379451272909,0.283927580586982,-0.181618374879923, -0.000232132200547241,-0.034108741799415,0.302046033243544,-0.19699295886434, -0.000245049577121015,-0.0338795384715389,0.320164485900106,-0.212367542848757, -0.000257966953695288,-0.0336503351436634,0.338282938556668,-0.227742126833174, -0.00027088433026895,-0.0334211318157873,0.35640139121323,-0.243116710817591, -0.000283801706843057,-0.0331919284879116,0.374519843869792,-0.258491294802008, -0.000296719083416663,-0.0329627251600353,0.392638296526354,-0.273865878786425, -0.000309636459990825,-0.0327335218321598,0.410756749182916,-0.289240462770842, -0.000322553836564765,-0.0325043185042841,0.428875201839477,-0.304615046755259, -0.000335471213138705,-0.0322751151764085,0.446993654496039,-0.319989630739676, -0.000348388589712423,-0.0320459118485321,0.465112107152602,-0.335364214724093, -0.000361305966286585,-0.0318167085206564,0.483230559809164,-0.350738798708511, -0.000374223342860192,-0.0315875051927805,0.501349012465725,-0.366113382692927, -0.000387140719434131,-0.0313583018649044,0.519467465122288,-0.381487966677344, -0.000400058096007627,-0.0311290985370283,0.537585917778849,-0.396862550661761, -0.000412975472581567,-0.0308998952091526,0.555704370435411,-0.412237134646179, -0.000425892849156062,-0.0306706918812774,0.573822823091973,-0.427611718630595, -0.000438810225729891,-0.0304414885534012,0.591941275748535,-0.442986302615013, -0.000451727602303831,-0.0302122852255255,0.610059728405097,-0.458360886599429, -0.000464644978877105,-0.0299830818976488,0.628178181061659,-0.473735470583847, -0.000477562355451155,-0.0297538785697733,0.646296633718221,-0.489110054568264, -0.000490479732025428,-0.0295246752418978,0.664415086374783,-0.504484638552681, -0.000503397108599146,-0.0292954719140215,0.682533539031345,-0.519859222537098, -0.000166324389982486,-0.0274564673426033,0.238401607945775,-0.164679292003469, -0.000176271908794268,-0.0270259757527455,0.255082980230495,-0.181421760118207, -0.000186219427605883,-0.0265954841628874,0.271764352515215,-0.198164228232945, -0.000196166946417442,-0.0261649925730291,0.288445724799935,-0.214906696347682, -0.000206114465229335,-0.0257345009831713,0.305127097084655,-0.23164916446242, -0.000216061984040949,-0.0253040093933132,0.321808469369375,-0.248391632577158, -0.000226009502852509,-0.0248735178034551,0.338489841654094,-0.265134100691896, -0.000235957021664346,-0.0244430262135971,0.355171213938815,-0.281876568806633, -0.000245904540476238,-0.0240125346237394,0.371852586223534,-0.298619036921371, -0.000255852059287576,-0.0235820430338809,0.388533958508254,-0.315361505036109, -0.000265799578099468,-0.023151551444023,0.405215330792974,-0.332103973150846, -0.000275747096911139,-0.0227210598541647,0.421896703077694,-0.348846441265584, -0.000285694615722809,-0.0222905682643069,0.438578075362414,-0.365588909380322, -0.000295642134534257,-0.0218600766744488,0.455259447647134,-0.38233137749506, -0.00030558965334615,-0.0214295850845909,0.471940819931854,-0.399073845609797, -0.00031553717215782,-0.0209990934947326,0.488622192216574,-0.415816313724535, -0.000325484690969269,-0.0205686019048741,0.505303564501294,-0.432558781839273, -0.000335432209781161,-0.0201381103150167,0.521984936786014,-0.449301249954011, -0.000345379728593054,-0.0197076187251586,0.538666309070734,-0.466043718068748, -0.000355327247404613,-0.0192771271353007,0.555347681355453,-0.482786186183487, -0.000365274766216506,-0.0188466355454429,0.572029053640173,-0.499528654298224, -0.000375222285028065,-0.0184161439555846,0.588710425924893,-0.516271122412962, -0.00038516980383918,-0.0179856523657258,0.605391798209613,-0.533013590527699, -0.000395117322651295,-0.0175551607758679,0.622073170494333,-0.549756058642438, -0.000405064841462965,-0.0171246691860101,0.638754542779053,-0.566498526757175, -0.000138622115878562,-0.0212920465336244,0.228199271739853,-0.177676571694251, -0.000145877422407792,-0.0207537564373693,0.24338353329062,-0.195706415846676, -0.000153132728936911,-0.0202154663411143,0.258567794841388,-0.213736259999102, -0.00016038803546653,-0.0196771762448595,0.273752056392155,-0.231766104151527, -0.00016764334199576,-0.0191388861486044,0.288936317942923,-0.249795948303953, -0.000174898648524879,-0.0186005960523494,0.304120579493691,-0.267825792456378, -0.000182153955054554,-0.0180623059560949,0.319304841044458,-0.285855636608804, -0.00018940926158395,-0.01752401585984,0.334489102595226,-0.303885480761229, -0.000196664568113292,-0.016985725763585,0.349673364145993,-0.321915324913655, -0.000203919874642411,-0.0164474356673299,0.364857625696761,-0.33994516906608, -0.000211175181172085,-0.0159091455710758,0.380041887247528,-0.357975013218505, -0.000218430487701093,-0.0153708554748202,0.395226148798296,-0.376004857370931, -0.000225685794230324,-0.014832565378565,0.410410410349064,-0.394034701523357, -0.000232941100759554,-0.0142942752823099,0.425594671899831,-0.412064545675782, -0.000240196407289339,-0.0137559851860558,0.440778933450598,-0.430094389828207, -0.00024745171381868,-0.0132176950898006,0.455963195001366,-0.448124233980633, -0.000254707020347911,-0.0126794049935457,0.471147456552134,-0.466154078133058, -0.000261962326877141,-0.012141114897291,0.486331718102901,-0.484183922285484, -0.000269217633406926,-0.0116028248010362,0.501515979653669,-0.502213766437909, -0.000276472939935712,-0.0110645347047806,0.516700241204437,-0.520243610590335, -0.000283728246464388,-0.0105262446085255,0.531884502755204,-0.53827345474276, -0.000290983552994617,-0.00998795451227119,0.547068764305972,-0.556303298895186, -0.000298238859523958,-0.00944966441601647,0.562253025856739,-0.574333143047611, -0.000305494166053522,-0.0089113743197613,0.577437287407507,-0.592362987200037, -0.00031274947258253,-0.00837308422350613,0.592621548958274,-0.610392831352463, -0.00011210914715587,-0.0164124571966151,0.217886694365635,-0.189288791136236, -0.00011712027451094,-0.015846179191027,0.23161477766408,-0.208468821589921, -0.000122131401865733,-0.0152799011854385,0.245342860962524,-0.227648852043607, -0.00012714252922047,-0.0147136231798504,0.259070944260969,-0.246828882497292, -0.000132153656575318,-0.014147345174262,0.272799027559414,-0.266008912950978, -0.000137164783930332,-0.0135810671686738,0.286527110857858,-0.285188943404664, -0.000142175911284903,-0.013014789163085,0.300255194156304,-0.304368973858349, -0.000147187038639973,-0.0124485111574972,0.313983277454748,-0.323549004312035, -0.000152198165994766,-0.0118822331519086,0.327711360753193,-0.34272903476572, -0.000157209293349836,-0.0113159551463204,0.341439444051638,-0.361909065219406, -0.000162220420704684,-0.0107496771407323,0.355167527350082,-0.381089095673092, -0.00016723154805931,-0.0101833991351439,0.368895610648527,-0.400269126126777, -0.00017224267541438,-0.00961712112955571,0.382623693946972,-0.419449156580463, -0.000177253802769117,-0.00905084312396709,0.396351777245417,-0.438629187034149, -0.000182264930123632,-0.00848456511837847,0.410079860543861,-0.457809217487834, -0.000187276057478813,-0.00791828711279052,0.423807943842306,-0.47698924794152, -0.000192287184833773,-0.00735200910720213,0.437536027140751,-0.496169278395205, -0.000197298312188177,-0.00678573110161351,0.451264110439196,-0.515349308848891, -0.00020230943954247,-0.00621945309602445,0.464992193737641,-0.534529339302576, -0.000207320566897984,-0.00565317509043695,0.478720277036085,-0.553709369756262, -0.000212331694252832,-0.00508689708484855,0.49244836033453,-0.572889400209948, -0.000217342821607569,-0.0045206190792606,0.506176443632974,-0.592069430663633, -0.000222353948962306,-0.00395434107367221,0.519904526931419,-0.611249461117319, -0.000227365076318042,-0.0033880630680847,0.533632610229864,-0.630429491571005, -0.000232376203672779,-0.00282178506249631,0.547360693528309,-0.64960952202469, -8.8252642437836e-05,-0.0127305715463246,0.208199928740099,-0.199191115234022, -9.15396858167106e-05,-0.0121922018181925,0.220597832748001,-0.219351967449199, -9.48267291958627e-05,-0.011653832090061,0.232995736755904,-0.239512819664375, -9.81137725746262e-05,-0.0111154623619287,0.245393640763806,-0.259673671879552, -0.000101400815953945,-0.0105770926337971,0.257791544771709,-0.279834524094729, -0.000104687859332653,-0.0100387229056651,0.270189448779611,-0.299995376309906, -0.000107974902712138,-0.0095003531775335,0.282587352787513,-0.320156228525083, -0.000111261946091012,-0.00896198344940147,0.294985256795416,-0.34031708074026, -0.000114548989470165,-0.00842361372126987,0.307383160803318,-0.360477932955437, -0.000117836032848762,-0.00788524399313695,0.319781064811221,-0.380638785170614, -0.000121123076227914,-0.00734687426500558,0.332178968819123,-0.40079963738579, -0.000124410119606955,-0.00680850453687354,0.344576872827026,-0.420960489600967, -0.000127697162985885,-0.00627013480874172,0.356974776834928,-0.441121341816144, -0.000130984206365037,-0.00573176508061013,0.369372680842831,-0.461282194031321, -0.000134271249743745,-0.00519339535247787,0.381770584850733,-0.481443046246498, -0.000137558293123008,-0.00465502562434605,0.394168488858636,-0.501603898461675, -0.000140845336501494,-0.00411665589621357,0.406566392866538,-0.521764750676852, -0.00014413237988109,-0.0035782861680822,0.418964296874441,-0.541925602892029, -0.00014741942326002,-0.00303991643995083,0.431362200882343,-0.562086455107206, -0.000150706466638728,-0.00250154671181813,0.443760104890246,-0.582247307322383, -0.00015399351001788,-0.00196317698368631,0.456158008898148,-0.602408159537559, -0.000157280553397143,-0.00142480725555494,0.46855591290605,-0.622569011752737, -0.00016056759677574,-0.000886437527422235,0.480953816913953,-0.642729863967913, -0.000163854640155225,-0.000348067799290863,0.493351720921855,-0.66289071618309, -0.000167141683534044,0.000190301928840952,0.505749624929758,-0.683051568398267, -6.7900446304836e-05,-0.0100484153455295,0.199649903255621,-0.207305209546609, -6.99593405395493e-05,-0.00956890453904014,0.210897166783117,-0.228269759984343, -7.2018234773874e-05,-0.00908939373255058,0.222144430310613,-0.249234310422078, -7.40771290089204e-05,-0.00860988292606191,0.233391693838108,-0.270198860859812, -7.61360232434671e-05,-0.00813037211957224,0.244638957365605,-0.291163411297547, -7.81949174783469e-05,-0.00765086131308301,0.255886220893101,-0.312127961735281, -8.02538117129492e-05,-0.00717135050659357,0.267133484420597,-0.333092512173015, -8.23127059474404e-05,-0.00669183970010412,0.278380747948092,-0.35405706261075, -8.43716001817096e-05,-0.00621232889361445,0.289628011475588,-0.375021613048484, -8.64304944167005e-05,-0.00573281808712567,0.300875275003084,-0.395986163486218, -8.84893886513582e-05,-0.00525330728063622,0.31212253853058,-0.416950713923953, -9.05482828864601e-05,-0.00477379647414766,0.323369802058076,-0.437915264361687, -9.26071771205628e-05,-0.00429428566765755,0.334617065585572,-0.458879814799422, -9.46660713553316e-05,-0.00381477486116788,0.345864329113068,-0.479844365237156, -9.67249655898783e-05,-0.0033352640546791,0.357111592640563,-0.50080891567489, -9.87838598248691e-05,-0.00285575324818965,0.36835885616806,-0.521773466112624, -0.000100842754058972,-0.00237624244169976,0.379606119695556,-0.542738016550359, -0.000102901648293519,-0.00189673163521054,0.390853383223051,-0.563702566988093, -0.000104960542528953,-0.00141722082872198,0.402100646750547,-0.584667117425828, -0.000107019436762945,-0.000937710022232086,0.413347910278043,-0.605631667863562, -0.000109078330997492,-0.000458199215742638,0.424595173805539,-0.626596218301297, -0.000111137225232816,2.13115907459205e-05,0.435842437333035,-0.647560768739031, -0.000113196119467585,0.000500822397234923,0.447089700860531,-0.668525319176765, -0.000115255013701243,0.000980333203725703,0.458336964388027,-0.6894898696145, -0.000117313907936345,0.00145984401021426,0.469584227915522,-0.710454420052234, -5.12825533630079e-05,-0.00813890729406974,0.192477680464014,-0.213739503442444, -5.25229836055852e-05,-0.00772934970987138,0.202773660265388,-0.235341368455074, -5.376341384844e-05,-0.00731979212567313,0.213069640066761,-0.256943233467705, -5.50038440911838e-05,-0.00691023454147488,0.223365619868134,-0.278545098480336, -5.6244274333872e-05,-0.00650067695727663,0.233661599669507,-0.300146963492966, -5.74847045764493e-05,-0.00609111937307794,0.243957579470881,-0.321748828505597, -5.87251348191931e-05,-0.00568156178887969,0.254253559272254,-0.343350693518228, -5.99655650618258e-05,-0.00527200420468121,0.264549539073627,-0.364952558530858, -6.12059953043476e-05,-0.00486244662048252,0.274845518875001,-0.386554423543489, -6.24464255468693e-05,-0.00445288903628427,0.285141498676374,-0.408156288556119, -6.36868557896131e-05,-0.0040433314520858,0.295437478477747,-0.42975815356875, -6.49272860324679e-05,-0.00363377386788799,0.30573345827912,-0.451360018581381, -6.61677162752117e-05,-0.00322421628368952,0.316029438080493,-0.472961883594011, -6.74081465179555e-05,-0.00281465869949105,0.326325417881867,-0.494563748606642, -6.86485767604772e-05,-0.00240510111529213,0.33662139768324,-0.516165613619272, -6.98890070028879e-05,-0.00199554353109388,0.346917377484613,-0.537767478631903, -7.11294372457427e-05,-0.00158598594689519,0.357213357285987,-0.559369343644534, -7.23698674884865e-05,-0.00117642836269694,0.36750933708736,-0.580971208657164, -7.36102977311193e-05,-0.000766870778498685,0.377805316888733,-0.602573073669795, -7.48507279738631e-05,-0.000357313194300879,0.388101296690106,-0.624174938682426, -7.60911582162738e-05,5.22443898982594e-05,0.39839727649148,-0.645776803695056, -7.73315884589065e-05,0.000461801974096954,0.408693256292853,-0.667378668707687, -7.85720187022054e-05,0.00087135955829476,0.418989236094226,-0.688980533720317, -7.98124489443941e-05,0.00128091714249345,0.4292852158956,-0.710582398732948, -8.10528791872489e-05,0.00169047472669126,0.439581195696972,-0.732184263745579, -3.81757486992429e-05,-0.00679672951586896,0.186699188153392,-0.218710345952779, -3.89005039367896e-05,-0.00645542283383593,0.196236719270698,-0.240804571189024, -3.96252591742252e-05,-0.0061141161518028,0.205774250388003,-0.262898796425268, -4.03500144119939e-05,-0.00577280946977021,0.215311781505308,-0.284993021661513, -4.10747696494851e-05,-0.00543150278773674,0.224849312622614,-0.307087246897757, -4.17995248871428e-05,-0.00509019610570416,0.234386843739919,-0.329181472134002, -4.25242801246339e-05,-0.00474888942367069,0.243924374857225,-0.351275697370246, -4.32490353621806e-05,-0.00440758274163744,0.25346190597453,-0.373369922606491, -4.39737906002824e-05,-0.0040662760596053,0.262999437091835,-0.395464147842735, -4.46985458375515e-05,-0.00372496937757183,0.272536968209141,-0.41755837307898, -4.54233010751537e-05,-0.00338366269553902,0.282074499326446,-0.439652598315224, -4.61480563125338e-05,-0.00304235601350578,0.291612030443752,-0.461746823551469, -4.68728115498029e-05,-0.00270104933147275,0.301149561561057,-0.483841048787713, -4.75975667874051e-05,-0.0023597426494395,0.310687092678362,-0.505935274023958, -4.83223220252293e-05,-0.0020184359674067,0.320224623795668,-0.528029499260202, -4.90470772626095e-05,-0.00167712928537367,0.329762154912973,-0.550123724496447, -4.97718325007668e-05,-0.00133582260334131,0.339299686030278,-0.572217949732691, -5.04965877374808e-05,-0.000994515921306949,0.348837217147584,-0.594312174968936, -5.1221342975305e-05,-0.000653209239274588,0.358374748264889,-0.61640640020518, -5.19460982125741e-05,-0.000311902557240895,0.367912279382195,-0.638500625441425, -5.26708534508424e-05,2.94041247910215e-05,0.3774498104995,-0.660594850677669, -5.33956086882226e-05,0.00037071080682427,0.386987341616805,-0.682689075913913, -5.41203639256027e-05,0.000712017488857075,0.39652487273411,-0.704783301150158, -5.4845119163538e-05,0.00105332417089032,0.406062403851416,-0.726877526386403, -5.5569874400363e-05,0.00139463085292402,0.415599934968721,-0.748971751622647, -2.81086657295537e-05,-0.0058582927484967,0.182186600295054,-0.222473732939845, -2.8522836899858e-05,-0.00557694440341794,0.191136273053259,-0.244940720349634, -2.89370080704399e-05,-0.0052955960583394,0.200085945811464,-0.267407707759422, -2.93511792405776e-05,-0.00501424771326042,0.209035618569669,-0.289874695169211, -2.9765350411104e-05,-0.00473289936818189,0.217985291327874,-0.312341682578999, -3.01795215812417e-05,-0.00445155102310313,0.226934964086079,-0.334808669988788, -3.05936927514905e-05,-0.00417020267802437,0.235884636844284,-0.357275657398576, -3.10078639221834e-05,-0.00388885433294606,0.244834309602489,-0.379742644808365, -3.14220350923211e-05,-0.0036075059878673,0.253783982360694,-0.402209632218153, -3.18362062626809e-05,-0.00332615764278854,0.262733655118899,-0.424676619627942, -3.22503774327076e-05,-0.00304480929770956,0.271683327877104,-0.44714360703773, -3.26645486031785e-05,-0.00276346095263058,0.280633000635309,-0.469610594447519, -3.30787197734272e-05,-0.00248211260755182,0.289582673393514,-0.492077581857307, -3.3492890943676e-05,-0.00220076426247307,0.298532346151719,-0.514544569267096, -3.39070621141468e-05,-0.00191941591739475,0.307482018909924,-0.537011556676884, -3.43212332846177e-05,-0.00163806757231622,0.316431691668129,-0.559478544086673, -3.47354044548664e-05,-0.00135671922723724,0.325381364426334,-0.581945531496461, -3.51495756250042e-05,-0.00107537088215803,0.334331037184539,-0.60441251890625, -3.55637467959191e-05,-0.000794022537080608,0.343280709942744,-0.626879506316038, -3.59779179657238e-05,-0.000512674192000961,0.352230382700949,-0.649346493725826, -3.63920891357505e-05,-0.000231325846921759,0.361180055459154,-0.671813481135615, -3.68062603063324e-05,5.00224981561104e-05,0.370129728217358,-0.694280468545403, -3.72204314766922e-05,0.000331370843234868,0.379079400975564,-0.716747455955192, -3.76346026468299e-05,0.00061271918831407,0.388029073733769,-0.73921444336498, -3.80487738168567e-05,0.000894067533393272,0.396978746491974,-0.761681430774769, -2.05280434074639e-05,-0.00520245193650515,0.178744939275501,-0.225279580287028, -2.07614683601087e-05,-0.00497047325737787,0.187248675554571,-0.248024485901711, -2.09948933129755e-05,-0.00473849457825071,0.195752411833641,-0.270769391516394, -2.12283182656203e-05,-0.00450651589912354,0.204256148112712,-0.293514297131077, -2.14617432184316e-05,-0.0042745372199966,0.212759884391782,-0.31625920274576, -2.16951681712985e-05,-0.00404255854086966,0.221263620670852,-0.339004108360442, -2.19285931237767e-05,-0.00381057986174205,0.229767356949922,-0.361749013975125, -2.2162018076588e-05,-0.00357860118261533,0.238271093228992,-0.384493919589808, -2.23954430293993e-05,-0.00334662250348772,0.246774829508063,-0.407238825204491, -2.26288679820996e-05,-0.00311464382436077,0.255278565787133,-0.429983730819174, -2.28622929349109e-05,-0.00288266514523383,0.263782302066203,-0.452728636433857, -2.30957178875002e-05,-0.00265068646610644,0.272286038345273,-0.47547354204854, -2.33291428398674e-05,-0.00241870778697839,0.280789774624344,-0.498218447663223, -2.35625677929008e-05,-0.00218672910785234,0.289293510903413,-0.520963353277906, -2.3795992745379e-05,-0.00195475042872451,0.297797247182484,-0.543708258892589, -2.40294176978573e-05,-0.00172277174959712,0.306300983461554,-0.566453164507271, -2.42628426507796e-05,-0.00149079307047062,0.314804719740624,-0.589198070121954, -2.44962676037019e-05,-0.00125881439134323,0.323308456019695,-0.611942975736637, -2.47296925564022e-05,-0.00102683571221629,0.331812192298765,-0.63468788135132, -2.49631175094356e-05,-0.000794857033089347,0.340315928577835,-0.657432786966003, -2.51965424620249e-05,-0.00056287835396196,0.348819664856905,-0.680177692580686, -2.54299674149472e-05,-0.000330899674835461,0.357323401135975,-0.702922598195369, -2.56633923676475e-05,-9.89209957080739e-05,0.365827137415045,-0.725667503810052, -2.58968173197927e-05,0.000133057683419757,0.374330873694116,-0.748412409424735, -2.61302422731591e-05,0.000365036362546256,0.382834609973186,-0.771157315039417, -1.49022873956461e-05,-0.0047431163486723,0.176165965720026,-0.227347679160473, -1.50330628788109e-05,-0.00455008684554492,0.184336833146563,-0.250297429250045, -1.51638383614205e-05,-0.00435705734241676,0.192507700573101,-0.273247179339616, -1.52946138442522e-05,-0.00416402783928871,0.200678567999639,-0.296196929429188, -1.5425389327306e-05,-0.00397099833616132,0.208849435426176,-0.31914667951876, -1.55561648103597e-05,-0.00377796883303372,0.217020302852714,-0.342096429608332, -1.56869402929138e-05,-0.00358493932990545,0.225191170279251,-0.365046179697903, -1.58177157763562e-05,-0.00339190982677851,0.233362037705789,-0.387995929787475, -1.59484912586327e-05,-0.00319888032364979,0.241532905132327,-0.410945679877047, -1.60792667412979e-05,-0.00300585082052174,0.249703772558864,-0.433895429966618, -1.62100422251843e-05,-0.00281282131739524,0.257874639985401,-0.45684518005619, -1.63408177078495e-05,-0.00261979181426719,0.266045507411939,-0.479794930145762, -1.64715931906256e-05,-0.00242676231113936,0.274216374838476,-0.502744680235334, -1.66023686732908e-05,-0.00223373280801109,0.282387242265014,-0.525694430324905, -1.6733144156178e-05,-0.00204070330488326,0.290558109691552,-0.548644180414477, -1.68639196392872e-05,-0.0018476738017561,0.298728977118089,-0.571593930504049, -1.69946951216193e-05,-0.00165464429862716,0.306899844544627,-0.594543680593621, -1.71254706046176e-05,-0.00146161479549933,0.315070711971165,-0.617493430683192, -1.72562460880599e-05,-0.00126858529237239,0.323241579397702,-0.640443180772764, -1.73870215702809e-05,-0.00107555578924323,0.331412446824241,-0.663392930862336, -1.75177970536122e-05,-0.000882526286116736,0.339583314250777,-0.686342680951908, -1.76485725363884e-05,-0.000689496782988908,0.347754181677315,-0.709292431041479, -1.77793480189425e-05,-0.000496467279860635,0.355925049103853,-0.732242181131051, -1.79101235027179e-05,-0.000303437776733695,0.36409591653039,-0.755191931220623, -1.804089898505e-05,-0.000110408273605422,0.372266783956928,-0.778141681310195, -1.07712484989642e-05,-0.00442036204083607,0.174258432220366,-0.228859164670614, -1.08446213992752e-05,-0.00425717645452517,0.182183774364055,-0.251958626874825, -1.09179942997528e-05,-0.00409399086821471,0.190109116507744,-0.275058089079037, -1.09913672003414e-05,-0.00393080528190426,0.198034458651433,-0.298157551283248, -1.10647401009856e-05,-0.0037676196955938,0.205959800795122,-0.321257013487459, -1.11381130011301e-05,-0.00360443410928268,0.213885142938811,-0.344356475691671, -1.12114859012746e-05,-0.00344124852297201,0.2218104850825,-0.367455937895882, -1.12848588020853e-05,-0.003278062936662,0.229735827226188,-0.390555400100093, -1.13582317026184e-05,-0.00311487735035132,0.237661169369877,-0.413654862304304, -1.14316046024854e-05,-0.00295169176403998,0.245586511513566,-0.436754324508516, -1.15049775036846e-05,-0.00278850617773019,0.253511853657255,-0.459853786712727, -1.15783504037736e-05,-0.00262532059141907,0.261437195800944,-0.482953248916938, -1.16517233040847e-05,-0.00246213500510817,0.269362537944633,-0.506052711121149, -1.17250962045068e-05,-0.00229894941879794,0.277287880088322,-0.529152173325361, -1.1798469105373e-05,-0.0021357638324877,0.285213222232011,-0.552251635529572, -1.1871842005462e-05,-0.00197257824617658,0.2931385643757,-0.575351097733783, -1.19452149058841e-05,-0.00180939265986613,0.301063906519389,-0.598450559937995, -1.20185878065282e-05,-0.00164620707355567,0.308989248663077,-0.621550022142206, -1.20919607065062e-05,-0.00148302148724477,0.316914590806766,-0.644649484346417, -1.21653336073724e-05,-0.00131983590093432,0.324839932950455,-0.667748946550628, -1.22387065073504e-05,-0.00115665031462298,0.332765275094144,-0.690848408754839, -1.23120794081055e-05,-0.000993464728312521,0.340690617237833,-0.713947870959051, -1.23854523091937e-05,-0.000830279142002954,0.348615959381522,-0.737047333163262, -1.24588252090607e-05,-0.000667093555691611,0.356541301525211,-0.760146795367474, -1.25321981098159e-05,-0.000503907969381601,0.3644666436689,-0.783246257571685, -7.76088377574258e-06,-0.00419280416168544,0.172860897402497,-0.2299570273921, -7.80239348163736e-06,-0.00405202629696622,0.180606714051988,-0.253165232517441, -7.84390318747663e-06,-0.00391124843224722,0.188352530701478,-0.276373437642782, -7.88541289303835e-06,-0.00377047056752744,0.196098347350968,-0.299581642768123, -7.92692259915517e-06,-0.00362969270280877,0.203844164000458,-0.322789847893463, -7.96843230521649e-06,-0.00348891483808988,0.211589980649948,-0.345998053018804, -8.00994201066718e-06,-0.00334813697337055,0.219335797299439,-0.369206258144145, -8.05145171633992e-06,-0.003207359108651,0.227081613948929,-0.392414463269486, -8.09296142190163e-06,-0.00306658124393122,0.23482743059842,-0.415622668394826, -8.13447112790744e-06,-0.00292580337921278,0.242573247247909,-0.438830873520167, -8.17598083402427e-06,-0.00278502551449344,0.2503190638974,-0.462039078645508, -8.21749053914189e-06,-0.00264424764977411,0.25806488054689,-0.485247283770848, -8.25900024570281e-06,-0.00250346978505567,0.26581069719638,-0.508455488896189, -8.3005099511535e-06,-0.00236269192033589,0.273556513845871,-0.53166369402153, -8.34201965627113e-06,-0.00222191405561545,0.281302330495361,-0.554871899146871, -8.38352936261e-06,-0.00208113619089723,0.289048147144851,-0.578080104272211, -8.42503906806069e-06,-0.00194035832617745,0.296793963794342,-0.601288309397552, -8.46654877417752e-06,-0.001799580461459,0.304539780443832,-0.624496514522893, -8.50805848051639e-06,-0.00165880259674056,0.312285597093322,-0.647704719648234, -8.54956818596708e-06,-0.00151802473202078,0.320031413742812,-0.670912924773574, -8.59107789119573e-06,-0.00137724686730101,0.327777230392303,-0.694121129898915, -8.63258759720154e-06,-0.00123646900258167,0.335523047041793,-0.717329335024256, -8.67409730309632e-06,-0.00109569113786279,0.343268863691283,-0.740537540149596, -8.71560700843599e-06,-0.000954913273143454,0.351014680340773,-0.763745745274937, -8.7571167149969e-06,-0.000814135408425454,0.358760496990263,-0.786953950400278, -5.57919022814435e-06,-0.00403186925423415,0.171844067904429,-0.230750875751321, -5.60301505503347e-06,-0.00390767760895838,0.179459449028108,-0.254037711280834, -5.62683988203361e-06,-0.0037834859636825,0.187074830151787,-0.277324546810346, -5.65066470875619e-06,-0.00365929431840595,0.194690211275466,-0.300611382339859, -5.67448953586736e-06,-0.00353510267313029,0.202305592399145,-0.323898217869371, -5.69831436292301e-06,-0.0034109110278544,0.209920973522825,-0.347185053398883, -5.72213918964559e-06,-0.0032867193825783,0.217536354646504,-0.370471888928396, -5.74596401631267e-06,-0.00316252773730175,0.225151735770183,-0.393758724457908, -5.76978884359036e-06,-0.00303833609202631,0.232767116893862,-0.417045559987421, -5.79361367047948e-06,-0.0029141444467502,0.240382498017542,-0.440332395516933, -5.81743849725758e-06,-0.00278995280147409,0.247997879141221,-0.463619231046445, -5.84126332459078e-06,-0.00266576115619843,0.2556132602649,-0.486906066575958, -5.86508815114684e-06,-0.0025415695109221,0.263228641388579,-0.51019290210547, -5.88891297859107e-06,-0.00241737786564689,0.270844022512258,-0.533479737634983, -5.91273780492507e-06,-0.00229318622037011,0.278459403635938,-0.556766573164495, -5.93656263170317e-06,-0.00216899457509379,0.286074784759617,-0.580053408694007, -5.96038745881433e-06,-0.0020448029298179,0.293690165883296,-0.60334024422352, -5.98421228614754e-06,-0.00192061128454268,0.301305547006975,-0.626627079753032, -6.00803711248155e-06,-0.00179641963926569,0.308920928130655,-0.649913915282545, -6.03186193992578e-06,-0.00167222799399047,0.316536309254334,-0.673200750812057, -6.05568676670387e-06,-0.00154803634871437,0.324151690378013,-0.69648758634157, -6.07951159348197e-06,-0.00142384470343737,0.331767071501693,-0.719774421871082, -6.10333642070415e-06,-0.0012996530581626,0.339382452625371,-0.743061257400594, -6.12716124748225e-06,-0.00117546141288649,0.34699783374905,-0.766348092930107, -6.15098607414932e-06,-0.00105126976760994,0.35461321487273,-0.789634928459619, -4.00427115482271e-06,-0.00391775816821938,0.171107928801608,-0.231323029683396, -4.01821553702719e-06,-0.00380572057059281,0.178628976152715,-0.254666536861095, -4.03215991912065e-06,-0.00369368297296635,0.186150023503821,-0.278010044038794, -4.04610430149166e-06,-0.00358164537534011,0.193671070854928,-0.301353551216494, -4.06004868425125e-06,-0.00346960777771432,0.201192118206035,-0.324697058394193, -4.07399306651124e-06,-0.00335757018008764,0.208713165557141,-0.348040565571892, -4.08793744866021e-06,-0.00324553258246119,0.216234212908248,-0.371384072749591, -4.10188183114224e-06,-0.00313349498483539,0.223755260259354,-0.394727579927291, -4.11582621306916e-06,-0.00302145738720827,0.231276307610461,-0.41807108710499, -4.12977059560671e-06,-0.00290941978958226,0.238797354961568,-0.441414594282689, -4.14371497814425e-06,-0.00279738219195647,0.246318402312674,-0.464758101460388, -4.15765936045975e-06,-0.00268534459432979,0.253839449663781,-0.488101608638087, -4.17160374266423e-06,-0.00257330699670355,0.261360497014888,-0.511445115815787, -4.18554812486871e-06,-0.00246126939907687,0.268881544365994,-0.534788622993486, -4.19949250674012e-06,-0.00234923180144975,0.276402591717102,-0.558132130171185, -4.21343688927767e-06,-0.00223719420382396,0.283923639068208,-0.581475637348884, -4.22738127181521e-06,-0.00212515660619772,0.291444686419315,-0.604819144526584, -4.24132565413071e-06,-0.00201311900857171,0.298965733770421,-0.628162651704283, -4.2552700358911e-06,-0.0019010814109448,0.306486781121528,-0.651506158881982, -4.26921441831762e-06,-0.0017890438133179,0.314007828472635,-0.674849666059681, -4.28315880063312e-06,-0.00167700621569233,0.321528875823741,-0.698193173237381, -4.2971031828376e-06,-0.00156496861806543,0.329049923174848,-0.72153668041508, -4.31104756548617e-06,-0.00145293102043942,0.336570970525955,-0.744880187592779, -4.32499194802372e-06,-0.00134089342281341,0.344092017877061,-0.768223694770478, -4.3389363297841e-06,-0.0012288558251865,0.351613065228168,-0.791567201948177, -2.87057071801655e-06,-0.00383668148470795,0.170576916653393,-0.231734433685972, -2.87892447570215e-06,-0.00373348668952855,0.178029965902923,-0.255118690287191, -2.88727823333224e-06,-0.00363029189434916,0.185483015152453,-0.27850294688841, -2.89563199079579e-06,-0.00352709709916943,0.192936064401983,-0.301887203489629, -2.90398574842587e-06,-0.00342390230399015,0.200389113651512,-0.325271460090848, -2.91233950572289e-06,-0.00332070750881019,0.207842162901043,-0.348655716692067, -2.92069326313094e-06,-0.00321751271363047,0.215295212150573,-0.372039973293286, -2.92904702076102e-06,-0.00311431791845096,0.222748261400103,-0.395424229894505, -2.93740077805804e-06,-0.00301112312327101,0.230201310649633,-0.418808486495724, -2.94575453607671e-06,-0.00290792832809217,0.237654359899163,-0.442192743096943, -2.95410829320719e-06,-0.002804733532912,0.245107409148693,-0.465576999698162, -2.96246205100381e-06,-0.00270153873773316,0.252560458398222,-0.488961256299381, -2.97081580824532e-06,-0.00259834394255254,0.260013507647753,-0.5123455129006, -2.97916956570887e-06,-0.00249514914737348,0.267466556897282,-0.535729769501819, -2.98752332350549e-06,-0.00239195435219397,0.274919606146812,-0.559114026103038, -2.99587708119109e-06,-0.00228875955701469,0.282372655396342,-0.582498282704257, -3.00423083832158e-06,-0.00218556476183496,0.289825704645872,-0.605882539305476, -3.01258459567411e-06,-0.00208236996665478,0.297278753895402,-0.629266795906695, -3.02093835380379e-06,-0.00197917517147594,0.304731803144932,-0.652651052507914, -3.02929211082326e-06,-0.00187598037629577,0.312184852394462,-0.676035309109133, -3.03764586828681e-06,-0.00177278558111604,0.319637901643993,-0.699419565710352, -3.04599962586138e-06,-0.00166959078593676,0.327090950893522,-0.722803822311571, -3.05435338299187e-06,-0.00156639599075659,0.334544000143052,-0.74618807891279, -3.06270714112156e-06,-0.00146320119557819,0.341997049392582,-0.769572335514009, -3.07106089836306e-06,-0.00136000640039757,0.349450098642112,-0.792956592115228, -2.05612452663928e-06,-0.0037789849183788,0.170194865165181,-0.232029752203881, -2.0612574225809e-06,-0.00368219117200408,0.177599016650932,-0.255443260001695, -2.06639031807843e-06,-0.00358539742562858,0.185003168136682,-0.27885676779951, -2.07152321335391e-06,-0.00348860367925297,0.192407319622433,-0.302270275597324, -2.07665610912899e-06,-0.00339180993287802,0.199811471108184,-0.325683783395139, -2.08178900473754e-06,-0.00329501618650263,0.207215622593935,-0.349097291192953, -2.08692190029058e-06,-0.00319822244012724,0.214619774079686,-0.372510798990768, -2.09205479589913e-06,-0.00310142869375207,0.222023925565437,-0.395924306788582, -2.09718769117462e-06,-0.00300463494737624,0.229428077051188,-0.419337814586397, -2.1023205869497e-06,-0.00290784120100152,0.236832228536938,-0.442751322384211, -2.1074534822807e-06,-0.00281104745462613,0.244236380022689,-0.466164830182026, -2.1125863781668e-06,-0.00271425370825118,0.25164053150844,-0.48957833797984, -2.11771927338678e-06,-0.00261745996187512,0.259044682994191,-0.512991845777655, -2.12285216905084e-06,-0.00252066621549996,0.266448834479942,-0.536405353575469, -2.1279850647149e-06,-0.00242387246912501,0.273852985965693,-0.559818861373284, -2.13311796060101e-06,-0.00232707872275006,0.281257137451443,-0.583232369171098, -2.13825085615404e-06,-0.0022302849763749,0.288661288937194,-0.606645876968913, -2.14338375104095e-06,-0.00213349122999862,0.296065440422945,-0.630059384766727, -2.14851664726012e-06,-0.00203669748362412,0.303469591908696,-0.653472892564542, -2.1536495424801e-06,-0.00193990373724828,0.310873743394447,-0.676886400362356, -2.15878243803314e-06,-0.00184310999087334,0.318277894880198,-0.700299908160171, -2.16391533314209e-06,-0.00174631624449795,0.325682046365948,-0.723713415957986, -2.16904822947228e-06,-0.001649522498123,0.333086197851699,-0.7471269237558, -2.17418112413714e-06,-0.00155272875174672,0.34049034933745,-0.770540431553615, -2.17931402035632e-06,-0.00145593500537178,0.347894500823201,-0.793953939351429, -1.47187275956195e-06,-0.00373787746490029,0.1699204992793,-0.232241484069083, -1.4751082436093e-06,-0.00364570050518198,0.177289548415884,-0.255675963834583, -1.47834372749012e-06,-0.00355352354546423,0.184658597552467,-0.279110443600084, -1.48157921137093e-06,-0.00346134658574559,0.192027646689052,-0.302544923365584, -1.48481469558481e-06,-0.00336916962602807,0.199396695825635,-0.325979403131084, -1.48805017990972e-06,-0.00327699266631076,0.206765744962219,-0.349413882896584, -1.49128566345746e-06,-0.0031848157065919,0.214134794098803,-0.372848362662084, -1.49452114761583e-06,-0.00309263874687393,0.221503843235387,-0.396282842427584, -1.49775663160767e-06,-0.00300046178715641,0.228872892371971,-0.419717322193085, -1.50099211559951e-06,-0.00290828482743799,0.236241941508555,-0.443151801958585, -1.50422760014646e-06,-0.00281610786772113,0.243610990645138,-0.466586281724085, -1.5074630836942e-06,-0.00272393090800227,0.250980039781722,-0.490020761489585, -1.51069856757502e-06,-0.00263175394828452,0.258349088918306,-0.513455241255086, -1.51393405167788e-06,-0.00253957698856633,0.26571813805489,-0.536889721020586, -1.51716953578074e-06,-0.00244740002884858,0.273087187191474,-0.560324200786086, -1.52040501966155e-06,-0.00235522306913016,0.280456236328058,-0.583758680551586, -1.52364050398646e-06,-0.0022630461094133,0.287825285464641,-0.607193160317086, -1.52687598808932e-06,-0.00217086914969489,0.295194334601225,-0.630627640082587, -1.53011147241422e-06,-0.00207869218997736,0.302563383737809,-0.654062119848087, -1.53334695596197e-06,-0.0019865152302585,0.309932432874393,-0.677496599613587, -1.53658243962074e-06,-0.00189433827054053,0.317301482010977,-0.700931079379087, -1.53981792416769e-06,-0.001802161310823,0.32467053114756,-0.724365559144588, -1.54305340782646e-06,-0.00170998435110459,0.332039580284144,-0.747800038910088, -1.5462888923734e-06,-0.00161780739138706,0.339408629420728,-0.771234518675588, -1.54952437636524e-06,-0.00152563043166998,0.346777678557311,-0.794668998441088, -0.000323545292728211,-0.143721951397625,0.262809707514684,-0.0183122212470148, -0.000359716535790588,-0.149368024920156,0.286311810441876,-0.0204552043030264, -0.000395887778852799,-0.155014098442687,0.309813913369068,-0.0225981873590377, -0.000432059021915121,-0.160660171965218,0.33331601629626,-0.0247411704150492, -0.000468230264977498,-0.166306245487748,0.356818119223452,-0.026884153471061, -0.000504401508039765,-0.171952319010279,0.380320222150643,-0.029027136527072, -0.000540572751101975,-0.17759839253281,0.403822325077835,-0.0311701195830837, -0.000576743994164408,-0.183244466055341,0.427324428005027,-0.0333131026390954, -0.000612915237226841,-0.188890539577872,0.450826530932219,-0.0354560856951064, -0.00064908648028883,-0.194536613100402,0.474328633859411,-0.0375990687511183, -0.000685257723351262,-0.200182686622933,0.497830736786603,-0.0397420518071297, -0.000721428966413806,-0.205828760145464,0.521332839713795,-0.0418850348631413, -0.000757600209475906,-0.211474833667994,0.544834942640986,-0.0440280179191523, -0.000793771452538339,-0.217120907190525,0.568337045568179,-0.0461710009751648, -0.000829942695600772,-0.222766980713056,0.591839148495371,-0.0483139840311763, -0.000866113938662871,-0.228413054235587,0.615341251422563,-0.0504569670871878, -0.000902285181725748,-0.234059127758118,0.638843354349756,-0.0525999501432002, -0.000938456424787515,-0.239705201280648,0.662345457276945,-0.0547429331992102, -0.000974627667850281,-0.24535127480318,0.685847560204138,-0.0568859162552222, -0.00101079891091238,-0.25099734832571,0.70934966313133,-0.0590288993112338, -0.0010469701539747,-0.256643421848241,0.73285176605852,-0.0611718823672436, -0.00108314139703725,-0.262289495370772,0.756353868985712,-0.0633148654232551, -0.00111931264009957,-0.267935568893303,0.779855971912905,-0.0654578484792677, -0.00115548388316145,-0.273581642415833,0.803358074840098,-0.0676008315352801, -0.00119165512622399,-0.279227715938364,0.82686017776729,-0.0697438145912916, -0.000322833005258871,-0.133606204982444,0.267703994909201,-0.0290324854660902, -0.00035771689080849,-0.138578795784722,0.291287261216504,-0.032190471351649, -0.00039260077635811,-0.143551386587001,0.314870527523807,-0.0353484572372077, -0.000427484661907618,-0.148523977389279,0.338453793831109,-0.0385064431227663, -0.00046236854745707,-0.153496568191558,0.362037060138413,-0.0416644290083254, -0.000497252433006634,-0.158469158993836,0.385620326445715,-0.0448224148938838, -0.000532136318556031,-0.163441749796115,0.409203592753018,-0.0479804007794428, -0.000567020204105595,-0.168414340598393,0.432786859060321,-0.0511383866650018, -0.000601904089655325,-0.173386931400672,0.456370125367623,-0.05429637255056, -0.000636787975204944,-0.17835952220295,0.479953391674926,-0.0574543584361193, -0.000671671860754453,-0.183332113005229,0.503536657982228,-0.0606123443216776, -0.00070655574630385,-0.188304703807507,0.527119924289532,-0.0637703302072369, -0.00074143963185358,-0.193277294609786,0.550703190596833,-0.0669283160927949, -0.000776323517403088,-0.198249885412064,0.574286456904138,-0.0700863019783549, -0.000811207402952485,-0.203222476214342,0.59786972321144,-0.0732442878639134, -0.000846091288501993,-0.208195067016621,0.621452989518743,-0.0764022737494724, -0.000880975174051501,-0.213167657818899,0.645036255826046,-0.079560259635032, -0.00091585905960101,-0.218140248621178,0.668619522133348,-0.0827182455205895, -0.000950742945150629,-0.223112839423457,0.69220278844065,-0.0858762314061485, -0.00098562683070047,-0.228085430225735,0.715786054747954,-0.0890342172917074, -0.00102051071624976,-0.233058021028014,0.739369321055255,-0.092192203177265, -0.00105539460179949,-0.238030611830292,0.762952587362556,-0.095350189062823, -0.00109027848734866,-0.24300320263257,0.786535853669861,-0.0985081749483831, -0.00112516237289828,-0.247975793434849,0.810119119977164,-0.101666160833942, -0.0011600462584479,-0.252948384237127,0.833702386284467,-0.104824146719501, -0.000319722084197338,-0.121234499692456,0.272498538517763,-0.0424019007092795, -0.000352837493021008,-0.125407366617773,0.29605906878887,-0.0468257130729845, -0.000385952901844566,-0.129580233543089,0.319619599059976,-0.0512495254366894, -0.000419068310668347,-0.133753100468406,0.343180129331083,-0.0556733378003942, -0.000452183719492016,-0.137925967393722,0.36674065960219,-0.0600971501640996, -0.000485299128316019,-0.142098834319039,0.390301189873296,-0.0645209625278041, -0.000518414537139578,-0.146271701244355,0.413861720144403,-0.0689447748915092, -0.000551529945963414,-0.150444568169672,0.437422250415509,-0.0733685872552143, -0.000584645354786972,-0.154617435094989,0.460982780686615,-0.0777923996189187, -0.000617760763610642,-0.158790302020305,0.484543310957723,-0.0822162119826243, -0.0006508761724342,-0.162963168945621,0.508103841228829,-0.086640024346329, -0.000683991581257981,-0.167136035870938,0.531664371499935,-0.0910638367100341, -0.000717106990081429,-0.171308902796254,0.555224901771041,-0.0954876490737386, -0.00075022239890532,-0.175481769721571,0.578785432042149,-0.0999114614374448, -0.000783337807729101,-0.179654636646887,0.602345962313255,-0.104335273801149, -0.000816453216552993,-0.183827503572204,0.625906492584362,-0.108759086164855, -0.000849568625376218,-0.18800037049752,0.64946702285547,-0.11318289852856, -0.000882684034199888,-0.192173237422837,0.673027553126574,-0.117606710892264, -0.000915799443024112,-0.196346104348154,0.696588083397681,-0.122030523255969, -0.00094891485184756,-0.20051897127347,0.720148613668788,-0.126454335619675, -0.000982030260671118,-0.204691838198787,0.743709143939893,-0.130878147983378, -0.00101514566949512,-0.208864705124103,0.767269674210999,-0.135301960347083, -0.00104826107831879,-0.21303757204942,0.790830204482107,-0.139725772710789, -0.00108137648714246,-0.217210438974736,0.814390734753214,-0.144149585074494, -0.00111449189596602,-0.221383305900053,0.83795126502432,-0.148573397438199, -0.000312715712178169,-0.106800559708677,0.276342593792607,-0.0584958444777561, -0.00034347305752791,-0.110076911119946,0.299693251877458,-0.0644434437677676, -0.000374230402877984,-0.113353262531215,0.32304390996231,-0.0703910430577789, -0.000404987748227947,-0.116629613942485,0.346394568047161,-0.0763386423477902, -0.000435745093577744,-0.119905965353754,0.369745226132014,-0.0822862416378018, -0.000466502438927874,-0.123182316765024,0.393095884216865,-0.0882338409278129, -0.000497259784277837,-0.126458668176293,0.416446542301716,-0.0941814402178245, -0.000528017129627689,-0.129735019587562,0.439797200386569,-0.100129039507836, -0.000558774474977763,-0.133011370998832,0.46314785847142,-0.106076638797847, -0.000589531820327727,-0.136287722410101,0.486498516556272,-0.112024238087859, -0.000620289165677468,-0.139564073821371,0.509849174641123,-0.11797183737787, -0.000651046511027209,-0.14284042523264,0.533199832725975,-0.123919436667881, -0.000681803856377283,-0.146116776643909,0.556550490810826,-0.129867035957892, -0.000712561201727246,-0.149393128055179,0.579901148895679,-0.135814635247905, -0.000743318547077321,-0.152669479466448,0.60325180698053,-0.141762234537916, -0.000774075892427284,-0.155945830877718,0.626602465065382,-0.147709833827928, -0.000804833237777136,-0.159222182288987,0.649953123150235,-0.15365743311794, -0.000835590583126988,-0.162498533700256,0.673303781235085,-0.15960503240795, -0.000866347928477063,-0.165774885111526,0.696654439319937,-0.165552631697962, -0.000897105273827248,-0.169051236522795,0.720005097404789,-0.171500230987974, -0.000927862619176989,-0.172327587934065,0.743355755489639,-0.177447830277984, -0.000958619964526952,-0.175603939345334,0.766706413574491,-0.183395429567995, -0.000989377309876693,-0.178880290756603,0.790057071659344,-0.189343028858007, -0.00102013465522666,-0.182156642167873,0.813407729744196,-0.195290628148019, -0.00105089200057684,-0.185432993579142,0.836758387829047,-0.20123822743803, -0.000300226167247397,-0.0909098300988948,0.278161344227518,-0.0770649790909155, -0.000327972985308955,-0.0932514493842631,0.301022119671934,-0.0847707182727651, -0.000355719803370458,-0.0955930686696315,0.32388289511635,-0.0924764574546145, -0.000383466621432071,-0.0979346879549998,0.346743670560766,-0.100182196636464, -0.000411213439493463,-0.100276307240368,0.369604446005182,-0.107887935818314, -0.000438960257554688,-0.102617926525736,0.392465221449598,-0.115593675000163, -0.000466707075616246,-0.104959545811104,0.415325996894014,-0.123299414182013, -0.00049445389367786,-0.107301165096473,0.43818677233843,-0.131005153363862, -0.000522200711739362,-0.109642784381841,0.461047547782846,-0.138710892545711, -0.000549947529800865,-0.111984403667209,0.483908323227262,-0.146416631727561, -0.000577694347862145,-0.114326022952577,0.506769098671678,-0.15412237090941, -0.000605441165923981,-0.116667642237946,0.529629874116094,-0.16182811009126, -0.00063318798398504,-0.119009261523314,0.552490649560509,-0.169533849273109, -0.000660934802046986,-0.121350880808683,0.575351425004927,-0.17723958845496, -0.000688681620108267,-0.123692500094051,0.598212200449342,-0.184945327636809, -0.000716428438169769,-0.126034119379419,0.621072975893758,-0.192651066818658, -0.00074417525623105,-0.128375738664787,0.643933751338175,-0.200356806000508, -0.000771922074292553,-0.130717357950155,0.66679452678259,-0.208062545182357, -0.000799668892354055,-0.133058977235524,0.689655302227006,-0.215768284364207, -0.000827415710415669,-0.135400596520892,0.712516077671422,-0.223474023546056, -0.000855162528476949,-0.13774221580626,0.735376853115837,-0.231179762727905, -0.000882909346538674,-0.140083835091628,0.758237628560253,-0.238885501909754, -0.000910656164600065,-0.142425454376997,0.781098404004669,-0.246591241091604, -0.000938402982662234,-0.144767073662366,0.803959179449086,-0.254296980273454, -0.000966149800723071,-0.147108692947734,0.826819954893502,-0.262002719455303, -0.000281097607381264,-0.0745591789974794,0.27692713919708,-0.097469902305907, -0.00030521667784883,-0.0760086017583467,0.298943520713897,-0.107107595250898, -0.000329335748316006,-0.0774580245192134,0.320959902230715,-0.116745288195888, -0.00035345481878335,-0.0789074472800804,0.342976283747533,-0.126382981140879, -0.000377573889250749,-0.0803568700409474,0.36499266526435,-0.13602067408587, -0.000401692959718258,-0.0818062928018146,0.387009046781168,-0.14565836703086, -0.000425812030185435,-0.0832557155626814,0.409025428297985,-0.155296059975851, -0.000449931100652945,-0.0847051383235486,0.431041809814803,-0.164933752920842, -0.000474050171120233,-0.0861545610844154,0.45305819133162,-0.174571445865832, -0.000498169241587521,-0.0876039838452825,0.475074572848438,-0.184209138810823, -0.000522288312055252,-0.0890534066061497,0.497090954365255,-0.193846831755813, -0.00054640738252254,-0.0905028293670165,0.519107335882073,-0.203484524700804, -0.000570526452989717,-0.0919522521278837,0.54112371739889,-0.213122217645795, -0.000594645523457338,-0.093401674888751,0.563140098915708,-0.222759910590786, -0.000618764593924515,-0.0948510976496175,0.585156480432526,-0.232397603535776, -0.000642883664392024,-0.0963005204104848,0.607172861949344,-0.242035296480767, -0.000667002734859312,-0.0977499431713515,0.629189243466162,-0.251672989425758, -0.000691121805326711,-0.0991993659322183,0.651205624982979,-0.261310682370748, -0.00071524087579411,-0.100648788693086,0.673222006499796,-0.270948375315739, -0.00073935994626162,-0.102098211453953,0.695238388016614,-0.28058606826073, -0.000763479016728796,-0.10354763421482,0.717254769533431,-0.29022376120572, -0.000787598087196195,-0.104997056975687,0.739271151050249,-0.29986145415071, -0.000811717157663372,-0.106446479736553,0.761287532567066,-0.309499147095702, -0.000835836228130993,-0.107895902497421,0.783303914083884,-0.319136840040692, -0.000859955298598503,-0.109345325258288,0.805320295600701,-0.328774532985683, -0.000255218721438244,-0.058936460766477,0.272042139066151,-0.118724503273827, -0.000275265659824275,-0.0596188450044045,0.292838171279937,-0.130374598122583, -0.000295312598210362,-0.0603012292423324,0.313634203493722,-0.14202469297134, -0.000315359536596282,-0.06098361348026,0.334430235707507,-0.153674787820096, -0.000335406474982314,-0.0616659977181875,0.355226267921293,-0.165324882668852, -0.000355453413368567,-0.0623483819561157,0.376022300135077,-0.176974977517608, -0.00037550035175421,-0.0630307661940428,0.396818332348863,-0.188625072366364, -0.000395547290140352,-0.0637131504319706,0.417614364562648,-0.20027516721512, -0.000415594228526661,-0.0643955346698986,0.438410396776433,-0.211925262063876, -0.000435641166912637,-0.0650779189078261,0.459206428990219,-0.223575356912633, -0.000455688105298613,-0.0657603031457537,0.480002461204004,-0.235225451761389, -0.000475735043684589,-0.0664426873836814,0.500798493417789,-0.246875546610145, -0.000495781982070564,-0.067125071621609,0.521594525631574,-0.258525641458901, -0.000515828920456651,-0.0678074558595372,0.54239055784536,-0.270175736307657, -0.000535875858842738,-0.0684898400974645,0.563186590059145,-0.281825831156413, -0.000555922797228603,-0.0691722243353923,0.583982622272931,-0.29347592600517, -0.000575969735614579,-0.0698546085733198,0.604778654486716,-0.305126020853926, -0.000596016674000999,-0.070536992811248,0.625574686700501,-0.316776115702682, -0.000616063612387197,-0.071219377049176,0.646370718914286,-0.328426210551438, -0.000636110550773061,-0.0719017612871033,0.667166751128071,-0.340076305400194, -0.000656157489158704,-0.0725841455250305,0.687962783341857,-0.35172640024895, -0.000676204427545235,-0.0732665297629589,0.708758815555641,-0.363376495097706, -0.000696251365931433,-0.0739489140008867,0.729554847769427,-0.375026589946463, -0.000716298304316965,-0.0746312982388133,0.750350879983213,-0.386676684795219, -0.00073634524270294,-0.0753136824767413,0.771146912196998,-0.398326779643975, -0.000223871184812041,-0.045098615770738,0.263637109831037,-0.139665866113582, -0.000239703543307102,-0.0451977038120701,0.282890682208818,-0.153298705240143, -0.000255535901802328,-0.0452967918534022,0.302144254586599,-0.166931544366704, -0.000271368260297389,-0.0453958798947341,0.32139782696438,-0.180564383493265, -0.000287200618792449,-0.0454949679360661,0.340651399342161,-0.194197222619826, -0.000303032977287565,-0.0455940559773984,0.359904971719942,-0.207830061746387, -0.000318865335782681,-0.0456931440187305,0.379158544097723,-0.221462900872947, -0.00033469769427763,-0.0457922320600626,0.398412116475504,-0.235095739999509, -0.000350530052772524,-0.0458913201013942,0.417665688853285,-0.248728579126069, -0.000366362411267862,-0.0459904081427265,0.436919261231066,-0.26236141825263, -0.0003821947697632,-0.0460894961840586,0.456172833608847,-0.275994257379191, -0.000398027128257872,-0.0461885842253902,0.475426405986628,-0.289627096505752, -0.00041385948675321,-0.0462876722667225,0.494679978364409,-0.303259935632313, -0.000429691845248215,-0.0463867603080546,0.51393355074219,-0.316892774758874, -0.000445524203743441,-0.0464858483493866,0.533187123119971,-0.330525613885435, -0.000461356562238779,-0.0465849363907187,0.552440695497753,-0.344158453011996, -0.000477188920733451,-0.0466840244320506,0.571694267875534,-0.357791292138557, -0.0004930212792289,-0.0467831124733831,0.590947840253314,-0.371424131265118, -0.000508853637723683,-0.0468822005147147,0.610201412631095,-0.385056970391679, -0.000524685996219132,-0.046981288556047,0.629454985008876,-0.39868980951824, -0.000540518354714248,-0.0470803765973791,0.648708557386657,-0.4123226486448, -0.000556350713209253,-0.0471794646387109,0.667962129764438,-0.425955487771361, -0.000572183071704035,-0.047278552680043,0.687215702142219,-0.439588326897922, -0.000588015430199706,-0.0473776407213751,0.706469274520001,-0.453221166024483, -0.000603847788694822,-0.0474767287627076,0.725722846897781,-0.466854005151044, -0.000189516698970216,-0.0336932637551542,0.252584505134946,-0.159197450637036, -0.000201351568739128,-0.0334103525741689,0.270095208912561,-0.174679555150319, -0.000213186438508317,-0.0331274413931841,0.287605912690177,-0.190161659663601, -0.000225021308277285,-0.0328445302121992,0.305116616467792,-0.205643764176884, -0.000236856178046307,-0.0325616190312144,0.322627320245407,-0.221125868690167, -0.000248691047815663,-0.0322787078502296,0.340138024023023,-0.236607973203449, -0.000260525917584797,-0.0319957966692448,0.357648727800638,-0.252090077716732, -0.000272360787353931,-0.03171288548826,0.375159431578253,-0.267572182230014, -0.000284195657123121,-0.031429974307275,0.392670135355869,-0.283054286743297, -0.000296030526891866,-0.0311470631262898,0.410180839133484,-0.298536391256579, -0.000307865396661389,-0.0308641519453052,0.4276915429111,-0.314018495769862, -0.000319700266430356,-0.0305812407643204,0.445202246688715,-0.329500600283145, -0.000331535136199657,-0.0302983295833357,0.46271295046633,-0.344982704796427, -0.000343370005968735,-0.0300154184023507,0.480223654243946,-0.36046480930971, -0.000355204875737702,-0.0297325072213659,0.497734358021561,-0.375946913822992, -0.000367039745507225,-0.0294495960403816,0.515245061799176,-0.391429018336275, -0.000378874615276081,-0.0291666848593959,0.532755765576792,-0.406911122849558, -0.000390709485045049,-0.0288837736784111,0.550266469354407,-0.42239322736284, -0.000402544354814127,-0.0286008624974263,0.567777173132023,-0.437875331876123, -0.000414379224583983,-0.028317951316442,0.585287876909638,-0.453357436389405, -0.000426214094353061,-0.0280350401354572,0.602798580687253,-0.468839540902688, -0.000438048964121918,-0.0277521289544715,0.620309284464869,-0.48432164541597, -0.000449883833890996,-0.0274692177734868,0.637819988242484,-0.499803749929253, -0.000461718703660075,-0.027186306592502,0.6553306920201,-0.515285854442536, -0.000473553573429264,-0.0269033954115176,0.672841395797715,-0.530767958955818, -0.000155076897248696,-0.0248683996732791,0.240199290946024,-0.176504129057341, -0.000163442452789819,-0.024382692674357,0.255920282762325,-0.193624843142897, -0.000171808008330776,-0.0238969856754347,0.271641274578625,-0.210745557228453, -0.000180173563872121,-0.0234112786765133,0.287362266394926,-0.227866271314008, -0.000188539119413522,-0.0229255716775913,0.303083258211227,-0.244986985399564, -0.00019690467495459,-0.0224398646786694,0.318804250027527,-0.262107699485119, -0.000205270230495547,-0.0219541576797473,0.334525241843828,-0.279228413570675, -0.000213635786036948,-0.0214684506808258,0.350246233660129,-0.296349127656231, -0.000222001341578015,-0.0209827436819037,0.36596722547643,-0.313469841741786, -0.000230366897118861,-0.0204970366829813,0.381688217292731,-0.330590555827342, -0.000238732452659929,-0.0200113296840594,0.397409209109031,-0.347711269912898, -0.000247098008201441,-0.0195256226851377,0.413130200925332,-0.364831983998454, -0.00025546356374273,-0.0190399156862162,0.428851192741632,-0.381952698084009, -0.00026382911928402,-0.0185542086872943,0.444572184557933,-0.399073412169565, -0.000272194674825199,-0.0180685016883724,0.460293176374234,-0.416194126255121, -0.000280560230366156,-0.0175827946894502,0.476014168190535,-0.433314840340677, -0.000288925785907446,-0.0170970876905281,0.491735160006836,-0.450435554426232, -0.000297291341448513,-0.0166113806916062,0.507456151823136,-0.467556268511788, -0.00030565689698947,-0.0161256736926838,0.523177143639437,-0.484676982597343, -0.000314022452530649,-0.0156399666937621,0.538898135455738,-0.501797696682899, -0.000322388008072494,-0.0151542596948411,0.554619127272038,-0.518918410768454, -0.000330753563613118,-0.0146685526959187,0.570340119088339,-0.53603912485401, -0.000339119119154407,-0.0141828456969963,0.58606111090464,-0.553159838939566, -0.000347484674695697,-0.0136971386980749,0.60178210272094,-0.570280553025122, -0.000355850230236654,-0.013211431699153,0.617503094537241,-0.587401267110677, -0.000123104875927371,-0.0183781797131825,0.227809902064159,-0.191156643533338, -0.000128708047047621,-0.0178233055562346,0.241835420990147,-0.209664668915444, -0.000134311218167482,-0.0172684313992865,0.255860939916135,-0.228172694297549, -0.000139914389287454,-0.0167135572423387,0.269886458842123,-0.246680719679654, -0.000145517560407482,-0.0161586830853908,0.283911977768111,-0.265188745061759, -0.000151120731527343,-0.0156038089284429,0.297937496694099,-0.283696770443864, -0.000156723902647593,-0.015048934771495,0.311963015620087,-0.30220479582597, -0.000162327073767177,-0.0144940606145465,0.325988534546075,-0.320712821208075, -0.000167930244887371,-0.0139391864575988,0.340014053472063,-0.33922084659018, -0.000173533416007232,-0.0133843123006507,0.354039572398051,-0.357728871972285, -0.000179136587127204,-0.0128294381437026,0.368065091324039,-0.37623689735439, -0.000184739758247177,-0.012274563986755,0.382090610250026,-0.394744922736496, -0.00019034292936726,-0.0117196898298071,0.396116129176014,-0.413252948118601, -0.000195946100487454,-0.0111648156728592,0.410141648102002,-0.431760973500706, -0.000201549271607426,-0.0106099415159115,0.42416716702799,-0.450268998882811, -0.000207152442727065,-0.010055067358963,0.438192685953978,-0.468777024264916, -0.000212755613846816,-0.00950019320201467,0.452218204879966,-0.487285049647022, -0.000218358784967121,-0.00894531904506768,0.466243723805953,-0.505793075029127, -0.000223961956085983,-0.0083904448881178,0.480269242731942,-0.524301100411232, -0.000229565127207065,-0.00783557073117125,0.49429476165793,-0.542809125793337, -0.00023516829832726,-0.00728069657422381,0.508320280583917,-0.561317151175442, -0.000240771469446788,-0.00672582241727548,0.522345799509905,-0.579825176557547, -0.000246374640567315,-0.00617094826032805,0.536371318435893,-0.598333201939653, -0.000251977811686843,-0.00561607410337928,0.550396837361881,-0.616841227321758, -0.000257580982807593,-0.00506119994643273,0.564422356287869,-0.635349252703863, -9.5259225765143e-05,-0.0137772956582463,0.216428773426664,-0.20309124885627, -9.8831983422254e-05,-0.0132370386761339,0.228951189487147,-0.222729251813998, -0.000102404741079476,-0.0126967816940213,0.24147360554763,-0.242367254771726, -0.000105977498736809,-0.0121565247119089,0.253996021608114,-0.262005257729454, -0.000109550256394364,-0.0116162677297968,0.266518437668597,-0.281643260687182, -0.000113123014051308,-0.0110760107476839,0.27904085372908,-0.301281263644909, -0.000116695771708697,-0.0105357537655719,0.291563269789563,-0.320919266602637, -0.000120268529365974,-0.00999549678345923,0.304085685850047,-0.340557269560365, -0.000123841287023474,-0.00945523980134721,0.31660810191053,-0.360195272518093, -0.000127414044680418,-0.00891498281923409,0.329130517971013,-0.379833275475821, -0.000130986802338029,-0.00837472583712229,0.341652934031496,-0.399471278433549, -0.000134559559995084,-0.0078344688550096,0.35417535009198,-0.419109281391277, -0.000138132317652695,-0.0072942118728978,0.366697766152463,-0.438747284349005, -0.000141705075309528,-0.00675395489078445,0.379220182212946,-0.458385287306732, -0.000145277832966917,-0.00621369790867199,0.39174259827343,-0.47802329026446, -0.000148850590624083,-0.00567344092655975,0.404265014333913,-0.497661293222188, -0.00015242334828125,-0.00513318394444684,0.416787430394396,-0.517299296179916, -0.000155996105938638,-0.00459292696233504,0.429309846454879,-0.536937299137644, -0.000159568863596582,-0.00405266998022347,0.441832262515362,-0.556575302095372, -0.000163141621253193,-0.00351241299811011,0.454354678575846,-0.5762133050531, -0.000166714378910249,-0.00297215601599721,0.466877094636329,-0.595851308010827, -0.000170287136567748,-0.00243189903388519,0.479399510696812,-0.615489310968555, -0.000173859894224582,-0.00189164205177228,0.491921926757296,-0.635127313926283, -0.000177432651882303,-0.0013513850696607,0.504444342817779,-0.654765316884011, -0.000181005409539692,-0.000811128087548685,0.516966758878262,-0.674403319841739, -7.22157827551806e-05,-0.0105906202215608,0.206629817519026,-0.212509482039568, -7.43988167827836e-05,-0.0101075774870291,0.217888653401413,-0.23303921053083, -7.6581850809887e-05,-0.00962453475249658,0.2291474892838,-0.253568939022092, -7.8764884837601e-05,-0.00914149201796488,0.240406325166187,-0.274098667513354, -8.0947918865093e-05,-0.00865844928343318,0.251665161048574,-0.294628396004616, -8.31309528921964e-05,-0.00817540654890059,0.262923996930961,-0.315158124495878, -8.53139869194663e-05,-0.00769236381436844,0.274182832813348,-0.33568785298714, -8.74970209470138e-05,-0.00720932107983674,0.285441668695735,-0.356217581478402, -8.96800549744503e-05,-0.00672627834530459,0.296700504578122,-0.376747309969664, -9.18630890021088e-05,-0.00624323561077311,0.307959340460509,-0.397277038460926, -9.40461230293232e-05,-0.00576019287624097,0.319218176342896,-0.417806766952188, -9.62291570567597e-05,-0.00527715014170882,0.330477012225283,-0.43833649544345, -9.84121910838631e-05,-0.00479410740717623,0.341735848107671,-0.458866223934713, -0.000100595225111522,-0.00431106467264475,0.352994683990058,-0.479395952425975, -0.000102778259138847,-0.00382802193811282,0.364253519872444,-0.499925680917237, -0.000104961293166062,-0.00334497920358023,0.375512355754832,-0.520455409408499, -0.000107144327193942,-0.0028619364690492,0.386771191637218,-0.540985137899761, -0.000109327361220934,-0.00237889373451683,0.398030027519605,-0.561514866391023, -0.000111510395248593,-0.00189585099998446,0.409288863401993,-0.582044594882285, -0.000113693429276251,-0.00141280826545298,0.42054769928438,-0.602574323373547, -0.000115876463303355,-0.000929765530920612,0.431806535166767,-0.623104051864809, -0.000118059497331013,-0.000446722796389132,0.443065371049153,-0.643633780356071, -0.000120242531358339,3.63199381432366e-05,0.454324206931541,-0.664163508847334, -0.00012242556538522,0.000519362672675605,0.465583042813928,-0.684693237338596, -0.000124608599413656,0.0010024054072062,0.476841878696314,-0.705222965829858, -5.38861574215788e-05,-0.00840911598937211,0.198597059407067,-0.219758117421436, -5.51742842593295e-05,-0.00799786761214571,0.208836897178451,-0.240974152264164, -5.64624110964695e-05,-0.00758661923491832,0.219076734949836,-0.262190187106893, -5.77505379337762e-05,-0.00717537085769093,0.229316572721221,-0.283406221949622, -5.90386647713603e-05,-0.00676412248046443,0.239556410492605,-0.304622256792351, -6.0326791608889e-05,-0.00635287410323748,0.24979624826399,-0.325838291635079, -6.16149184463621e-05,-0.00594162572601076,0.260036086035374,-0.347054326477808, -6.29030452834467e-05,-0.00553037734878292,0.270275923806759,-0.368270361320537, -6.41911721213084e-05,-0.00511912897155664,0.280515761578144,-0.389486396163266, -6.5479298958282e-05,-0.00470788059432903,0.290755599349528,-0.410702431005994, -6.67674257960327e-05,-0.00429663221710275,0.300995437120912,-0.431918465848723, -6.80555526336724e-05,-0.00388538383987558,0.311235274892298,-0.453134500691452, -6.93436794707569e-05,-0.00347413546264841,0.321475112663682,-0.474350535534181, -7.06318063086186e-05,-0.00306288708542168,0.331714950435066,-0.495566570376909, -7.19199331457032e-05,-0.00265163870819451,0.341954788206451,-0.516782605219638, -7.32080599835649e-05,-0.00224039033096757,0.352194625977836,-0.537998640062367, -7.44961868213156e-05,-0.00182914195374129,0.36243446374922,-0.559214674905096, -7.57843136581782e-05,-0.00141789357651323,0.372674301520605,-0.580430709747824, -7.70724404960399e-05,-0.00100664519928673,0.38291413929199,-0.601646744590553, -7.83605673330134e-05,-0.000595396822059335,0.393153977063374,-0.622862779433282, -7.96486941704311e-05,-0.000184148444832388,0.403393814834759,-0.64407881427601, -8.09368210075156e-05,0.000227099932395003,0.413633652606143,-0.665294849118739, -8.22249478458215e-05,0.000638348309620618,0.423873490377528,-0.686510883961468, -8.3513074682573e-05,0.0010495966868489,0.434113328148913,-0.707726918804197, -8.48012015206567e-05,0.0014608450640754,0.444353165920297,-0.728942953646926, -3.97336811269189e-05,-0.00692027245687898,0.192250117530069,-0.225230161146074, -4.04737021136303e-05,-0.00657935348492511,0.201693916018145,-0.246964293281035, -4.12137231006193e-05,-0.00623843451297157,0.211137714506222,-0.268698425415996, -4.19537440876638e-05,-0.00589751554101814,0.220581512994299,-0.290432557550956, -4.26937650747083e-05,-0.00555659656906449,0.230025311482376,-0.312166689685917, -4.34337860619749e-05,-0.0052156775971115,0.239469109970452,-0.333900821820878, -4.41738070489639e-05,-0.00487475862515763,0.248912908458529,-0.355634953955839, -4.49138280361749e-05,-0.00453383965320442,0.258356706946606,-0.377369086090799, -4.56538490228864e-05,-0.00419292068125054,0.267800505434683,-0.39910321822576, -4.6393870010264e-05,-0.00385200170929734,0.277244303922759,-0.420837350360721, -4.71338909971974e-05,-0.00351108273734368,0.286688102410836,-0.442571482495681, -4.78739119839089e-05,-0.00317016376538959,0.296131900898913,-0.464305614630642, -4.86139329715085e-05,-0.00282924479343682,0.30557569938699,-0.486039746765603, -4.9353953958442e-05,-0.00248832582148339,0.315019497875066,-0.507773878900564, -5.00939749458196e-05,-0.00214740684953063,0.324463296363143,-0.529508011035525, -5.083399593242e-05,-0.00180648787757587,0.33390709485122,-0.551242143170485, -5.15740169193535e-05,-0.00146556890562266,0.343350893339297,-0.572976275305446, -5.2314037906509e-05,-0.00112464993366901,0.352794691827374,-0.594710407440407, -5.30540588929984e-05,-0.000783730961714912,0.362238490315451,-0.616444539575367, -5.37940798813752e-05,-0.000442811989763037,0.371682288803527,-0.638178671710328, -5.45341008675315e-05,-0.000101893017808496,0.381126087291604,-0.659912803845289, -5.5274121854465e-05,0.0002390259541456,0.390569885779681,-0.681646935980249, -5.60141428422867e-05,0.000579944926097031,0.400013684267757,-0.70338106811521, -5.67541638294422e-05,0.000920863898050683,0.409457482755833,-0.725115200250171, -5.74941848158206e-05,0.00126178287000567,0.418901281243911,-0.746849332385132, -2.90430991169432e-05,-0.0059015538369479,0.187370408683567,-0.229301071953837, -2.94603848240982e-05,-0.00562201581875277,0.196207044092587,-0.251420641042988, -2.98776705318082e-05,-0.00534247780055863,0.205043679501608,-0.273540210132138, -3.02949562390187e-05,-0.00506293978236383,0.213880314910628,-0.295659779221289, -3.07122419463401e-05,-0.00478340176416903,0.222716950319648,-0.31777934831044, -3.11295276536061e-05,-0.004503863745974,0.231553585728669,-0.339898917399591, -3.15468133611496e-05,-0.00422432572777987,0.240390221137689,-0.362018486488742, -3.1964099068138e-05,-0.0039447877095844,0.24922685654671,-0.384138055577892, -3.23813847760146e-05,-0.00366524969139026,0.25806349195573,-0.406257624667043, -3.2798670482892e-05,-0.00338571167319524,0.26690012736475,-0.428377193756194, -3.32159561907686e-05,-0.00310617365500132,0.275736762773771,-0.450496762845345, -3.3633241897868e-05,-0.00282663563680607,0.284573398182791,-0.472616331934496, -3.40505276055225e-05,-0.00254709761861216,0.293410033591811,-0.494735901023647, -3.4467813312955e-05,-0.00226755960041758,0.302246669000831,-0.516855470112797, -3.48850990199434e-05,-0.00198802158222211,0.311083304409852,-0.538975039201948, -3.53023847272649e-05,-0.00170848356402775,0.319919939818872,-0.561094608291099, -3.57196704350304e-05,-0.00142894554583339,0.328756575227893,-0.58321417738025, -3.61369561417968e-05,-0.0011494075276377,0.337593210636913,-0.605333746469401, -3.65542418493403e-05,-0.000869869509443788,0.346429846045933,-0.627453315558551, -3.69715275567728e-05,-0.000590331491248985,0.355266481454954,-0.649572884647702, -3.73888132637612e-05,-0.000310793473053295,0.364103116863975,-0.671692453736853, -3.78060989716378e-05,-3.12554548602684e-05,0.372939752272994,-0.693812022826004, -3.82233846790703e-05,0.000248282563334534,0.381776387682015,-0.715931591915155, -3.86406703868358e-05,0.000527820581528449,0.390613023091035,-0.738051161004305, -3.90579560939353e-05,0.000807358599723251,0.399449658500055,-0.760170730093456, -2.1094599880922e-05,-0.00520062882525585,0.183693463991894,-0.232296782006268, -2.13273514954038e-05,-0.00497121951867519,0.192075151284544,-0.254699987218334, -2.15601031103851e-05,-0.0047418102120953,0.200456838577194,-0.2771031924304, -2.17928547247559e-05,-0.00451240090551441,0.208838525869844,-0.299506397642466, -2.20256063397928e-05,-0.00428299159893464,0.217220213162494,-0.321909602854531, -2.2258357953886e-05,-0.00405358229235331,0.225601900455144,-0.344312808066597, -2.24911095688118e-05,-0.00382417298577331,0.233983587747794,-0.366716013278662, -2.27238611839597e-05,-0.00359476367919331,0.242365275040444,-0.389119218490728, -2.29566127979419e-05,-0.00336535437261265,0.250746962333093,-0.411522423702794, -2.31893644129233e-05,-0.00313594506603199,0.259128649625744,-0.43392562891486, -2.34221160275716e-05,-0.00290653575945155,0.267510336918394,-0.456328834126925, -2.36548676416648e-05,-0.00267712645287066,0.275892024211044,-0.478732039338991, -2.38876192572013e-05,-0.00244771714629133,0.284273711503693,-0.501135244551057, -2.41203708717386e-05,-0.00221830783971066,0.292655398796343,-0.523538449763122, -2.43531224862759e-05,-0.00198889853313,0.301037086088993,-0.545941654975188, -2.45858741012572e-05,-0.00175948922654978,0.309418773381643,-0.568344860187253, -2.48186257155725e-05,-0.00153007991996956,0.317800460674293,-0.590748065399319, -2.50513773297767e-05,-0.00130067061338845,0.326182147966943,-0.613151270611385, -2.52841289450911e-05,-0.00107126130680868,0.334563835259593,-0.635554475823451, -2.55168805597394e-05,-0.000841852000228016,0.342945522552243,-0.657957681035516, -2.57496321747208e-05,-0.000612442693648241,0.351327209844893,-0.680360886247582, -2.5982383788703e-05,-0.000383033387066689,0.359708897137543,-0.702764091459648, -2.62151354034623e-05,-0.00015362408048647,0.368090584430193,-0.725167296671713, -2.64478870183327e-05,7.57852260933056e-05,0.376472271722843,-0.747570501883779, -2.66806386326479e-05,0.000305194532674857,0.384853959015493,-0.769973707095844, -1.52516158616334e-05,-0.00471515731396943,0.180963243355894,-0.234483634114199, -1.53809743794753e-05,-0.00452500583453941,0.189008458957277,-0.257093892159291, -1.55103328973172e-05,-0.00433485435510939,0.197053674558659,-0.279704150204383, -1.56396914151591e-05,-0.00414470287567981,0.205098890160041,-0.302314408249476, -1.5769049933001e-05,-0.00395455139624956,0.213144105761424,-0.324924666294568, -1.5898408451176e-05,-0.00376439991681998,0.221189321362806,-0.34753492433966, -1.60277669687958e-05,-0.00357424843738974,0.229234536964189,-0.370145182384752, -1.61571254866377e-05,-0.00338409695795994,0.237279752565571,-0.392755440429844, -1.62864840047572e-05,-0.00319394547853036,0.245324968166954,-0.415365698474936, -1.64158425223215e-05,-0.00300379399909989,0.253370183768336,-0.437975956520028, -1.654520104033e-05,-0.00281364251967009,0.261415399369719,-0.46058621456512, -1.66745595583384e-05,-0.00262349104024029,0.269460614971101,-0.483196472610212, -1.68039180765689e-05,-0.00243333956081093,0.277505830572484,-0.505806730655304, -1.69332765936892e-05,-0.00224318808138002,0.285551046173866,-0.528416988700396, -1.70626351118086e-05,-0.00205303660195066,0.293596261775249,-0.551027246745488, -1.7191993629817e-05,-0.00186288512252064,0.301641477376631,-0.573637504790581, -1.73213521474924e-05,-0.0016727336430904,0.309686692978014,-0.596247762835673, -1.74507106655009e-05,-0.0014825821636606,0.317731908579396,-0.618858020880765, -1.75800691829542e-05,-0.00129243068423035,0.325777124180779,-0.641468278925857, -1.77094277005185e-05,-0.00110227920479966,0.333822339782162,-0.664078536970949, -1.7838786218749e-05,-0.000912127725370304,0.341867555383544,-0.686688795016041, -1.79681447374236e-05,-0.000721976245941391,0.349912770984926,-0.709299053061133, -1.80975032540998e-05,-0.000531824766509814,0.357957986586309,-0.731909311106225, -1.82268617722192e-05,-0.000341673287080013,0.366003202187692,-0.754519569151317, -1.83562202904497e-05,-0.000151521807650656,0.374048417789074,-0.777129827196409, -1.09910423647386e-05,-0.0043767277368314,0.178957515472806,-0.236070680673172, -1.10631729136057e-05,-0.00421647787845592,0.186756241005505,-0.258831201502377, -1.11353034624173e-05,-0.00405622802008065,0.194554966538204,-0.281591722331581, -1.12074340113399e-05,-0.00389597816170517,0.202353692070903,-0.304352243160786, -1.12795645599295e-05,-0.00373572830332969,0.210152417603602,-0.32711276398999, -1.13516951090187e-05,-0.00357547844495465,0.217951143136301,-0.349873284819195, -1.14238256578303e-05,-0.00341522858657917,0.225749868669001,-0.3726338056484, -1.14959562066419e-05,-0.00325497872820368,0.2335485942017,-0.395394326477604, -1.1568086755398e-05,-0.00309472886982842,0.241347319734399,-0.418154847306809, -1.16402173040431e-05,-0.0029344790114525,0.249146045267098,-0.440915368136014, -1.17123478530212e-05,-0.00277422915307768,0.256944770799797,-0.463675888965218, -1.17844784019994e-05,-0.00261397929470242,0.264743496332496,-0.486436409794423, -1.18566089507555e-05,-0.00245372943632693,0.272542221865195,-0.509196930623628, -1.19287394994005e-05,-0.00229347957795123,0.280340947397894,-0.531957451452832, -1.20008700482677e-05,-0.00213322971957597,0.288139672930593,-0.554717972282037, -1.20730005969127e-05,-0.00197297986120004,0.295938398463293,-0.577478493111241, -1.21451311455578e-05,-0.00181273000282456,0.303737123995992,-0.600239013940446, -1.22172616944249e-05,-0.00165248014444908,0.311535849528691,-0.62299953476965, -1.22893922435141e-05,-0.00149223028607448,0.31933457506139,-0.645760055598855, -1.23615227921592e-05,-0.00133198042769855,0.327133300594089,-0.66852057642806, -1.24336533406932e-05,-0.00117173056932307,0.334932026126788,-0.691281097257264, -1.25057838896714e-05,-0.00101148071094759,0.342730751659487,-0.714041618086469, -1.25779144382054e-05,-0.000851230852572105,0.350529477192186,-0.736802138915674, -1.26500449874056e-05,-0.000690980994197066,0.358328202724886,-0.759562659744878, -1.27221755361617e-05,-0.000530731135821583,0.366126928257585,-0.782323180574083, -7.90215576385034e-06,-0.00413945281520123,0.177495362116764,-0.237217535088211, -7.94276612925415e-06,-0.00400155104414346,0.185114758704036,-0.260086640972089, -7.98337649526859e-06,-0.0038636492730868,0.192734155291306,-0.282955746855967, -8.02398686083894e-06,-0.00372574750202936,0.200353551878578,-0.305824852739845, -8.06459722652031e-06,-0.00358784573097193,0.207972948465849,-0.328693958623724, -8.10520759236821e-06,-0.00344994395991471,0.21559234505312,-0.351563064507602, -8.14581795838265e-06,-0.00331204218885817,0.22321174164039,-0.37443217039148, -8.18642832367544e-06,-0.00317414041780029,0.230831138227662,-0.397301276275358, -8.22703868941232e-06,-0.00303623864674285,0.238450534814933,-0.420170382159236, -8.26764905503818e-06,-0.00289833687568564,0.246069931402204,-0.443039488043115, -8.30825942088609e-06,-0.00276043510462864,0.253689327989475,-0.465908593926993, -8.34886978640093e-06,-0.00262253333357076,0.261308724576746,-0.488777699810871, -8.38948015213781e-06,-0.00248463156251333,0.268928121164018,-0.511646805694749, -8.43009051776367e-06,-0.00234672979145634,0.276547517751288,-0.534515911578627, -8.47070088338953e-06,-0.00220882802039912,0.284166914338559,-0.557385017462506, -8.51131124912641e-06,-0.00207092624934213,0.29178631092583,-0.580254123346384, -8.55192161508533e-06,-0.00193302447828492,0.299405707513102,-0.603123229230262, -8.59253198048915e-06,-0.00179512270722748,0.307025104100373,-0.62599233511414, -8.63314234644807e-06,-0.00165722093617049,0.314644500687643,-0.648861440998018, -8.67375271185189e-06,-0.00151931916511261,0.322263897274915,-0.671730546881896, -8.71436307736673e-06,-0.00138141739405517,0.329883293862186,-0.694599652765775, -8.75497344310361e-06,-0.00124351562299818,0.337502690449457,-0.717468758649653, -8.79558380861845e-06,-0.00110561385194075,0.345122087036728,-0.740337864533531, -8.83619417468839e-06,-0.000967712080883754,0.352741483623999,-0.763206970417409, -8.87680454009221e-06,-0.000829810309825874,0.360360880211271,-0.786076076301288, -5.67187185163132e-06,-0.00397231155957245,0.176435385492517,-0.238043740567624, -5.69509122033685e-06,-0.00385089488842016,0.183924964287591,-0.260991072219287, -5.71831058870931e-06,-0.00372947821726743,0.191414543082666,-0.283938403870949, -5.74152995813648e-06,-0.00360806154611626,0.19890412187774,-0.306885735522612, -5.76474932639792e-06,-0.00348664487496331,0.206393700672815,-0.329833067174275, -5.7879686953255e-06,-0.00336522820381124,0.213883279467889,-0.352780398825938, -5.81118806392e-06,-0.00324381153265918,0.221372858262963,-0.375727730477601, -5.83440743240349e-06,-0.00312239486150623,0.228862437058038,-0.398675062129264, -5.8576268014976e-06,-0.00300097819035461,0.236352015853112,-0.421622393780926, -5.88084617014761e-06,-0.00287956151920232,0.243841594648187,-0.444569725432589, -5.90406553901968e-06,-0.00275814484805004,0.251331173443262,-0.467517057084252, -5.92728490811378e-06,-0.00263672817689842,0.258820752238336,-0.490464388735915, -5.95050427609767e-06,-0.00251531150574524,0.266310331033411,-0.513411720387578, -5.97372364519178e-06,-0.00239389483459318,0.273799909828485,-0.53635905203924, -5.99694301395282e-06,-0.00227247816344134,0.281289488623559,-0.559306383690903, -6.02016238260283e-06,-0.00215106149228905,0.288779067418634,-0.582253715342566, -6.04338175136387e-06,-0.00202964482113677,0.296268646213708,-0.605201046994229, -6.06660112023594e-06,-0.00190822814998493,0.303758225008782,-0.628148378645892, -6.08982048899698e-06,-0.00178681147883264,0.311247803803857,-0.651095710297555, -6.11303985742495e-06,-0.00166539480768035,0.318737382598931,-0.674043041949217, -6.1362592267411e-06,-0.00154397813652851,0.326226961394006,-0.69699037360088, -6.15947859505805e-06,-0.00142256146537623,0.33371654018908,-0.719937705252543, -6.18269796359705e-06,-0.00130114479422305,0.341206118984155,-0.742885036904206, -6.20591733369036e-06,-0.00117972812307299,0.348695697779229,-0.765832368555869, -6.22913670111913e-06,-0.00105831145191893,0.356185276574304,-0.788779700207532, -4.06620205822827e-06,-0.00385413357897368,0.175670034072985,-0.238637626337883, -4.07974980204395e-06,-0.00374476611156715,0.183065973785591,-0.261641187549277, -4.09329754547105e-06,-0.00363539864416018,0.190461913498196,-0.284644748760671, -4.10684528900918e-06,-0.00352603117675376,0.197857853210801,-0.307648309972065, -4.12039303265832e-06,-0.00341666370934712,0.205253792923407,-0.330651871183459, -4.13394077586338e-06,-0.00330729624194004,0.212649732636012,-0.353655432394853, -4.14748851934599e-06,-0.00319792877453295,0.220045672348618,-0.376658993606247, -4.16103626310615e-06,-0.00308856130712676,0.227441612061223,-0.399662554817641, -4.17458400614468e-06,-0.00297919383971945,0.234837551773829,-0.422666116029035, -4.1881317501824e-06,-0.00286982637231348,0.242233491486434,-0.445669677240429, -4.20167949344297e-06,-0.00276045890490639,0.249629431199039,-0.468673238451823, -4.21522723770273e-06,-0.00265109143750042,0.257025370911645,-0.491676799663217, -4.22877498051921e-06,-0.00254172397009311,0.26442131062425,-0.514680360874611, -4.24232272400182e-06,-0.00243235650268647,0.271817250336855,-0.537683922086005, -4.25587046826159e-06,-0.00232298903528028,0.279213190049461,-0.560687483297399, -4.26941821163318e-06,-0.00221362156787341,0.286609129762066,-0.583691044508793, -4.28296595456068e-06,-0.00210425410046611,0.294005069474671,-0.606694605720187, -4.29651369782125e-06,-0.0019948866330588,0.301401009187277,-0.629698166931581, -4.31006144185897e-06,-0.00188551916565283,0.308796948899882,-0.652701728142975, -4.32360918556363e-06,-0.00177615169824685,0.316192888612487,-0.675705289354369, -4.3371569293793e-06,-0.00166678423083955,0.323588828325093,-0.698708850565763, -4.35070467263987e-06,-0.00155741676343357,0.330984768037698,-0.721712411777157, -4.36425241612248e-06,-0.00144804929602627,0.338380707750304,-0.744715972988551, -4.37780015949407e-06,-0.00133868182861896,0.34577664746291,-0.767719534199945, -4.39134790308771e-06,-0.00122931436121254,0.353172587175515,-0.790723095411339, -2.91260403556537e-06,-0.00377033534021953,0.17511900170741,-0.239063836644894, -2.92069931934202e-06,-0.00366971807965799,0.182447572705915,-0.262107751774695, -2.92879460289663e-06,-0.00356910081909634,0.18977614370442,-0.285151666904496, -2.93688988639573e-06,-0.00346848355853435,0.197104714702926,-0.308195582034297, -2.94498516989483e-06,-0.00336786629797214,0.204433285701431,-0.331239497164098, -2.95308045367149e-06,-0.00326724903741105,0.211761856699936,-0.3542834122939, -2.96117573728161e-06,-0.00316663177684906,0.219090427698441,-0.377327327423701, -2.96927102072519e-06,-0.00306601451628685,0.226418998696946,-0.400371242553502, -2.97736630461287e-06,-0.00296539725572575,0.233747569695451,-0.423415157683303, -2.98546158772339e-06,-0.0028647799951631,0.241076140693957,-0.446459072813104, -2.99355687161107e-06,-0.002764162734602,0.248404711692461,-0.469502987942905, -3.0016521552767e-06,-0.00266354547404024,0.255733282690966,-0.492546903072706, -3.00974743894233e-06,-0.00256292821347825,0.263061853689472,-0.515590818202507, -3.01784272271899e-06,-0.00246231095291671,0.270390424687977,-0.538634733332308, -3.02593800616258e-06,-0.00236169369235539,0.277718995686481,-0.561678648462109, -3.03403328971719e-06,-0.00226107643179319,0.285047566684987,-0.58472256359191, -3.04212857338282e-06,-0.00216045917123164,0.292376137683492,-0.607766478721712, -3.05022385715947e-06,-0.0020598419106701,0.299704708681997,-0.630810393851513, -3.05831914093613e-06,-0.00195922465010812,0.307033279680502,-0.653854308981314, -3.06641442393563e-06,-0.00185860738954569,0.314361850679007,-0.676898224111115, -3.07450970771228e-06,-0.00175799012898503,0.321690421677512,-0.699942139240916, -3.08260499148894e-06,-0.00165737286842305,0.329018992676017,-0.722986054370717, -3.09070027570968e-06,-0.00155675560786195,0.336347563674522,-0.746029969500518, -3.09879555826509e-06,-0.00145613834729907,0.343676134673027,-0.769073884630319, -3.10689084259685e-06,-0.00135552108673798,0.351004705671532,-0.79211779976012, -2.08501737136713e-06,-0.00371078691206617,0.174723090188211,-0.239369361772837, -2.08998080425404e-06,-0.00361649511294615,0.182003282468652,-0.262442204255829, -2.09494423708545e-06,-0.00352220331382602,0.189283474749094,-0.28551504673882, -2.09990766980583e-06,-0.00342791151470556,0.196563667029536,-0.308587889221812, -2.10487110263724e-06,-0.00333361971558599,0.203843859309977,-0.331660731704803, -2.10983453541314e-06,-0.00323932791646553,0.211124051590418,-0.354733574187795, -2.11479796846659e-06,-0.00314503611734618,0.218404243870859,-0.377806416670786, -2.11976140118697e-06,-0.00305074431822572,0.225684436151301,-0.400879259153778, -2.12472483385184e-06,-0.00295645251910526,0.232964628431743,-0.423952101636769, -2.12968826696081e-06,-0.00286216071998546,0.240244820712184,-0.447024944119761, -2.13465169940363e-06,-0.00276786892086522,0.247525012992626,-0.470097786602753, -2.1396151325126e-06,-0.00267357712174543,0.254805205273067,-0.493170629085744, -2.14457856528849e-06,-0.00257928532262519,0.262085397553509,-0.516243471568736, -2.14954199795336e-06,-0.00248499352350517,0.26936558983395,-0.539316314051727, -2.1545054309513e-06,-0.00239070172438494,0.276645782114392,-0.562389156534719, -2.1594688637272e-06,-0.00229640992526559,0.283925974394833,-0.58546199901771, -2.16443229639207e-06,-0.0022021181261449,0.291206166675275,-0.608534841500702, -2.16939572916797e-06,-0.00210782632702466,0.298486358955716,-0.631607683983693, -2.17435916261e-06,-0.00201353452790531,0.305766551236157,-0.654680526466685, -2.1793225949418e-06,-0.00191924272878463,0.313046743516599,-0.677753368949676, -2.18428602816179e-06,-0.00182495092966484,0.320326935797041,-0.700826211432668, -2.18924946071564e-06,-0.0017306591305446,0.327607128077482,-0.723899053915659, -2.19421289371358e-06,-0.00163636733142436,0.334887320357924,-0.746971896398651, -2.19917632637845e-06,-0.00154207553230412,0.342167512638365,-0.770044738881642, -2.20413975959843e-06,-0.00144778373318477,0.349447704918807,-0.793117581364634, -1.49193246151702e-06,-0.00366840305462612,0.174439051280189,-0.239588194789053, -1.49505556684693e-06,-0.00357866906832982,0.181684548038225,-0.262681756549678, -1.49817867245439e-06,-0.00348893508203418,0.18893004479626,-0.285775318310302, -1.50130177756225e-06,-0.00339920109573755,0.196175541554295,-0.308868880070927, -1.50442488316971e-06,-0.00330946710944158,0.203421038312331,-0.331962441831552, -1.50754798861064e-06,-0.00321973312314561,0.210666535070366,-0.355056003592177, -1.51067109394054e-06,-0.00312999913684919,0.217912031828402,-0.378149565352802, -1.513794199548e-06,-0.00304026515055322,0.225157528586437,-0.401243127113426, -1.51691730487791e-06,-0.00295053116425725,0.232403025344472,-0.424336688874051, -1.52004040987475e-06,-0.00286079717796039,0.239648522102508,-0.447430250634676, -1.52316351553772e-06,-0.00277106319166465,0.246894018860543,-0.470523812395301, -1.52628662097865e-06,-0.00268132920536845,0.254139515618579,-0.493617374155926, -1.5294097265306e-06,-0.00259159521907226,0.261385012376614,-0.51671093591655, -1.53253283152743e-06,-0.00250186123277563,0.26863050913465,-0.539804497677175, -1.53565593741245e-06,-0.00241212724648032,0.275876005892685,-0.5628980594378, -1.53877904252031e-06,-0.00232239326018324,0.283121502650721,-0.585991621198425, -1.54190214762817e-06,-0.00223265927388683,0.290366999408756,-0.60908518295905, -1.54502525373523e-06,-0.00214292528759197,0.297612496166791,-0.632178744719675, -1.5481483593982e-06,-0.00205319130129578,0.304857992924827,-0.655272306480299, -1.55127146395095e-06,-0.0019634573149987,0.312103489682862,-0.678365868240924, -1.55439456961393e-06,-0.00187372332870339,0.319348986440897,-0.701459430001549, -1.55751767483281e-06,-0.00178398934240587,0.326594483198934,-0.724552991762174, -1.5606407806068e-06,-0.00169425535611012,0.333839979956969,-0.747646553522799, -1.56376388549262e-06,-0.00160452136981393,0.341085476715004,-0.770740115283423, -1.5668869907115e-06,-0.00151478738351685,0.34833097347304,-0.793833677044048, -0.000146583299647174,-0.271218885405731,0.0808864238687777,0.145747218847474, -0.000185387331537445,-0.286478911886419,0.0924894516929451,0.158574501684756, -0.000224191363427551,-0.301738938367107,0.104092479517112,0.171401784522039, -0.000262995395317656,-0.316998964847794,0.115695507341279,0.184229067359322, -0.000301799427208038,-0.332258991328482,0.127298535165447,0.197056350196604, -0.000340603459098199,-0.34751901780917,0.138901562989613,0.209883633033887, -0.000379407490988304,-0.362779044289858,0.150504590813782,0.222710915871169, -0.000418211522878353,-0.378039070770546,0.16210761863795,0.235538198708452, -0.000457015554768625,-0.393299097251232,0.173710646462114,0.248365481545736, -0.000495819586658786,-0.408559123731921,0.185313674286284,0.261192764383017, -0.000534623618549057,-0.423819150212607,0.196916702110448,0.274020047220302, -0.000573427650439107,-0.439079176693298,0.20851972993462,0.286847330057582, -0.000612231682329156,-0.454339203173983,0.220122757758783,0.299674612894867, -0.000651035714219317,-0.469599229654672,0.231725785582953,0.312501895732148, -0.000689839746109477,-0.48485925613536,0.243328813407121,0.32532917856943, -0.00072864377799986,-0.500119282616049,0.25493184123129,0.338156461406712, -0.00076744780988991,-0.515379309096736,0.266534869055455,0.350983744243995, -0.000806251841779959,-0.530639335577424,0.278137896879625,0.363811027081277, -0.000845055873670231,-0.54589936205811,0.289740924703787,0.376638309918562, -0.000883859905560502,-0.561159388538799,0.301343952527958,0.389465592755843, -0.000922663937450663,-0.576419415019487,0.312946980352125,0.402292875593126, -0.000961467969340934,-0.591679441500176,0.324550008176294,0.415120158430407, -0.0010002720012311,-0.606939467980861,0.336153036000456,0.427947441267693, -0.00103907603312114,-0.62219949446155,0.347756063824626,0.440774724104974, -0.00107788006501119,-0.637459520942238,0.359359091648795,0.453602006942256, -0.000209464172506113,-0.261658472207287,0.133817819798418,0.114148304246229, -0.000249874389631366,-0.275727544859501,0.149145262602714,0.12411016579477, -0.000290284606756397,-0.289796617511715,0.164472705407009,0.134072027343312, -0.000330694823881594,-0.303865690163928,0.179800148211304,0.144033888891853, -0.000371105041006847,-0.317934762816142,0.1951275910156,0.153995750440394, -0.000411515258131878,-0.332003835468356,0.210455033819895,0.163957611988936, -0.000451925475256965,-0.34607290812057,0.225782476624191,0.173919473537476, -0.000492335692382273,-0.360141980772784,0.241109919428488,0.183881335086017, -0.00053274590950747,-0.374211053424997,0.25643736223278,0.19384319663456, -0.000573156126632557,-0.388280126077211,0.271764805037078,0.2038050581831, -0.000613566343757754,-0.402349198729424,0.28709224784137,0.213766919731643, -0.000653976560882841,-0.416418271381639,0.302419690645669,0.223728781280182, -0.000694386778008038,-0.430487344033852,0.317747133449961,0.233690642828725, -0.000734796995133347,-0.444556416686066,0.333074576254259,0.243652504377265, -0.000775207212258322,-0.45862548933828,0.348402019058555,0.253614365925806, -0.000815617429383741,-0.472694561990494,0.363729461862852,0.263576227474346, -0.000856027646508606,-0.486763634642708,0.379056904667147,0.273538089022888, -0.000896437863633803,-0.500832707294922,0.394384347471443,0.283499950571429, -0.000936848080759112,-0.514901779947134,0.409711790275735,0.293461812119972, -0.000977258297884309,-0.528970852599349,0.425039233080033,0.303423673668512, -0.00101766851500917,-0.543039925251562,0.440366675884328,0.313385535217053, -0.00105807873213459,-0.557108997903777,0.455694118688625,0.323347396765593, -0.00109848894925979,-0.57117807055599,0.471021561492917,0.333309258314136, -0.00113889916638488,-0.585247143208204,0.486349004297215,0.343271119862676, -0.00117930938351007,-0.599316215860418,0.50167644710151,0.353232981411218, -0.000265515191711585,-0.236985506141874,0.185195266788547,0.0776044839146968, -0.000306381893174612,-0.248929044705287,0.20393791292456,0.0842525151601619, -0.000347248594637306,-0.2608725832687,0.222680559060573,0.0909005464056268, -0.000388115296100167,-0.272816121832113,0.241423205196585,0.0975485776510922, -0.000428981997563194,-0.284759660395527,0.260165851332598,0.104196608896557, -0.000469848699026054,-0.296703198958939,0.27890849746861,0.110844640142022, -0.000510715400488915,-0.308646737522353,0.297651143604623,0.117492671387487, -0.000551582101951942,-0.320590276085766,0.316393789740637,0.124140702632952, -0.000592448803414802,-0.332533814649179,0.335136435876647,0.130788733878418, -0.000633315504877774,-0.344477353212592,0.353879082012662,0.137436765123882, -0.000674182206340634,-0.356420891776004,0.372621728148672,0.144084796369349, -0.000715048907803606,-0.368364430339418,0.391364374284688,0.150732827614812, -0.000755915609266355,-0.380307968902831,0.410107020420697,0.157380858860279, -0.000796782310729105,-0.392251507466244,0.428849666556712,0.164028890105743, -0.000837649012192299,-0.404195046029658,0.447592312692726,0.170676921351207, -0.000878515713655159,-0.41613858459307,0.466334958828739,0.177324952596672, -0.000919382415117798,-0.428082123156483,0.485077604964751,0.183972983842137, -0.000960249116580769,-0.440025661719897,0.503820251100765,0.190621015087602, -0.00100111581804385,-0.451969200283309,0.522562897236774,0.197269046333069, -0.00104198251950682,-0.463912738846723,0.541305543372789,0.203917077578533, -0.00108284922096968,-0.475856277410136,0.560048189508802,0.210565108823998, -0.00112371592243232,-0.487799815973549,0.578790835644814,0.217213140069463, -0.00116458262389507,-0.499743354536961,0.597533481780825,0.223861171314929, -0.00120544932535838,-0.511686893100375,0.61627612791684,0.230509202560393, -0.00124631602682101,-0.523630431663788,0.635018774052852,0.237157233805858, -0.000306608637818284,-0.201449472070623,0.229584395024278,0.0373423139113528, -0.000346281658001768,-0.210696435852848,0.250981984107072,0.0403393311737625, -0.000385954678185307,-0.219943399635072,0.272379573189866,0.0433363484361724, -0.000425627698368847,-0.229190363417296,0.29377716227266,0.0463333656985824, -0.000465300718552331,-0.238437327199521,0.315174751355454,0.0493303829609921, -0.000504973738735703,-0.247684290981745,0.336572340438247,0.0523274002234024, -0.000544646758919298,-0.25693125476397,0.357969929521041,0.055324417485812, -0.000584319779102782,-0.266178218546194,0.379367518603836,0.0583214347482216, -0.000623992799286266,-0.275425182328419,0.400765107686628,0.0613184520106327, -0.000663665819469861,-0.284672146110643,0.422162696769424,0.0643154692730413, -0.000703338839653345,-0.293919109892868,0.443560285852215,0.0673124865354527, -0.000743011859836828,-0.303166073675092,0.464957874935012,0.0703095037978607, -0.000782684880020201,-0.312413037457316,0.486355464017804,0.0733065210602717, -0.000822357900204018,-0.321660001239541,0.507753053100599,0.076303538322681, -0.000862030920387169,-0.330906965021766,0.529150642183394,0.0793005555850902, -0.000901703940570764,-0.34015392880399,0.550548231266187,0.0822975728475001, -0.000941376960754359,-0.349400892586215,0.571945820348981,0.0852945901099099, -0.000981049980938176,-0.35864785636844,0.593343409431776,0.0882916073723191, -0.00102072300112155,-0.367894820150664,0.614740998514567,0.091288624634731, -0.00106039602130481,-0.377141783932888,0.636138587597363,0.0942856418971395, -0.00110006904148863,-0.386388747715113,0.657536176680156,0.0972826591595499, -0.00113974206167167,-0.395635711497337,0.67893376576295,0.10027967642196, -0.00117941508185537,-0.404882675279561,0.700331354845744,0.10327669368437, -0.00121908810203908,-0.414129639061786,0.721728943928538,0.10627371094678, -0.00125876112222223,-0.42337660284401,0.743126533011331,0.109270728209189, -0.000326480061561718,-0.161175547115598,0.262275619882452,-0.00471439479227425, -0.000363081683064648,-0.167624575368612,0.285206297846787,-0.00553112208326205, -0.000399683304567522,-0.174073603621626,0.308136975811121,-0.00634784937424984, -0.000436284926070452,-0.180522631874639,0.331067653775456,-0.0071645766652375, -0.000472886547573326,-0.186971660127653,0.353998331739791,-0.00798130395622549, -0.0005094881690762,-0.193420688380667,0.376929009704125,-0.00879803124721289, -0.000546089790579241,-0.199869716633681,0.39985968766846,-0.00961475853820119, -0.000582691412082004,-0.206318744886695,0.422790365632795,-0.0104314858291892, -0.000619293033584767,-0.212767773139709,0.445721043597129,-0.011248213120176, -0.000655894655087863,-0.219216801392723,0.468651721561465,-0.0120649404111648, -0.000692496276590959,-0.225665829645737,0.491582399525798,-0.0128816677021519, -0.0007290978980935,-0.232114857898751,0.514513077490135,-0.0136983949931409, -0.000765699519596597,-0.238563886151765,0.537443755454468,-0.0145151222841275, -0.00080230114109936,-0.245012914404779,0.560374433418803,-0.015331849575116, -0.000838902762602234,-0.251461942657792,0.583305111383138,-0.016148576866104, -0.00087550438410533,-0.257910970910807,0.606235789347473,-0.0169653041570921, -0.000912106005607982,-0.26435999916382,0.629166467311808,-0.0177820314480802, -0.0009487076271113,-0.270809027416835,0.652097145276143,-0.0185987587390683, -0.00098530924861373,-0.277258055669848,0.675027823240476,-0.0194154860300546, -0.00102191087011705,-0.283707083922862,0.697958501204813,-0.0202322133210438, -0.0010585124916197,-0.290156112175876,0.720889179169146,-0.0210489406120308, -0.00109511411312258,-0.29660514042889,0.743819857133482,-0.0218656679030194, -0.00113171573462567,-0.303054168681904,0.766750535097815,-0.0226823951940058, -0.00116831735612843,-0.309503196934918,0.789681213062151,-0.0234991224849944, -0.00120491897763164,-0.315952225187932,0.812611891026486,-0.0243158497759829, -0.000323103273302039,-0.12215307045556,0.280851438272442,-0.046269541276926, -0.000354957525579735,-0.126120709649369,0.30405227637425,-0.0508545309559264, -0.000386811777857266,-0.130088348843178,0.327253114476057,-0.0554395206349269, -0.000418666030134962,-0.134055988036987,0.350453952577865,-0.0600245103139272, -0.000450520282412714,-0.138023627230797,0.373654790679672,-0.0646094999929277, -0.000482374534690244,-0.141991266424606,0.39685562878148,-0.0691944896719279, -0.000514228786968052,-0.145958905618415,0.420056466883287,-0.0737794793509285, -0.000546083039245415,-0.149926544812224,0.443257304985095,-0.0783644690299291, -0.000577937291523334,-0.153894184006033,0.466458143086902,-0.0829494587089288, -0.000609791543800808,-0.157861823199842,0.48965898118871,-0.0875344483879299, -0.000641645796078283,-0.161829462393652,0.512859819290517,-0.0921194380669296, -0.000673500048355979,-0.165797101587461,0.536060657392326,-0.0967044277459313, -0.000705354300633787,-0.16976474078127,0.559261495494132,-0.10128941742493, -0.000737208552911484,-0.173732379975079,0.58246233359594,-0.105874407103932, -0.000769062805188958,-0.177700019168888,0.605663171697749,-0.110459396782933, -0.000800917057466433,-0.181667658362697,0.628864009799556,-0.115044386461933, -0.000832771309744351,-0.185635297556507,0.652064847901364,-0.119629376140933, -0.000864625562021604,-0.189602936750315,0.675265686003171,-0.124214365819934, -0.000896479814299411,-0.193570575944125,0.698466524104978,-0.128799355498933, -0.000928334066577219,-0.197538215137934,0.721667362206786,-0.133384345177935, -0.000960188318854804,-0.201505854331743,0.744868200308594,-0.137969334856935, -0.000992042571132279,-0.205473493525552,0.768069038410402,-0.142554324535936, -0.0010238968234102,-0.209441132719362,0.791269876512208,-0.147139314214935, -0.00105575107568756,-0.213408771913171,0.814470714614016,-0.151724303893936, -0.00108760532796537,-0.21737641110698,0.837671552715824,-0.156309293572937, -0.000299425426667388,-0.0885790639556613,0.285877782085161,-0.0851334078088358, -0.00032546758613089,-0.0906303354860626,0.308211697068309,-0.0932426119087632, -0.000351509745594281,-0.092681607016464,0.330545612051456,-0.101351816008691, -0.000377551905057893,-0.0947328785468653,0.352879527034604,-0.109461020108618, -0.000403594064521506,-0.0967841500772668,0.375213442017752,-0.117570224208545, -0.00042963622398523,-0.0988354216076682,0.397547357000899,-0.125679428308472, -0.000455678383448621,-0.10088669313807,0.419881271984047,-0.1337886324084, -0.000481720542912178,-0.102937964668471,0.442215186967195,-0.141897836508328, -0.000507762702375958,-0.104989236198873,0.464549101950342,-0.150007040608254, -0.000533804861839293,-0.107040507729274,0.48688301693349,-0.158116244708182, -0.000559847021303073,-0.109091779259676,0.509216931916637,-0.166225448808109, -0.000585889180766741,-0.111143050790077,0.531550846899785,-0.174334652908037, -0.000611931340230298,-0.113194322320478,0.553884761882932,-0.182443857007964, -0.000637973499693967,-0.11524559385088,0.57621867686608,-0.190553061107892, -0.000664015659157635,-0.117296865381281,0.598552591849228,-0.198662265207819, -0.000690057818620859,-0.119348136911682,0.620886506832376,-0.206771469307747, -0.000716099978084306,-0.121399408442084,0.643220421815524,-0.214880673407674, -0.000742142137547974,-0.123450679972485,0.665554336798672,-0.222989877507602, -0.000768184297012087,-0.125501951502887,0.687888251781818,-0.231099081607528, -0.0007942264564752,-0.127553223033288,0.710222166764966,-0.239208285707456, -0.000820268615938868,-0.129604494563689,0.732556081748114,-0.247317489807383, -0.000846310775402426,-0.131655766094091,0.754889996731262,-0.255426693907311, -0.000872352934865983,-0.133707037624492,0.777223911714408,-0.263535898007237, -0.000898395094329651,-0.135758309154894,0.799557826697556,-0.271645102107165, -0.000924437253792987,-0.137809580685295,0.821891741680704,-0.279754306207093, -0.000261985993152636,-0.0622658778388391,0.280334409439723,-0.119656171768983, -0.000281965775723203,-0.0630193698510431,0.300990676594572,-0.130895934751895, -0.000301945558293659,-0.0637728618632469,0.32164694374942,-0.142135697734808, -0.000321925340864559,-0.0645263538754512,0.342303210904269,-0.15337546071772, -0.000341905123435182,-0.0652798458876551,0.362959478059118,-0.164615223700632, -0.000361884906005583,-0.0660333378998589,0.383615745213966,-0.175854986683544, -0.000381864688576372,-0.0667868299120633,0.404272012368815,-0.187094749666457, -0.000401844471146551,-0.0675403219242665,0.424928279523664,-0.198334512649369, -0.000421824253717507,-0.068293813936471,0.445584546678512,-0.20957427563228, -0.000441804036288018,-0.0690473059486747,0.466240813833361,-0.220814038615193, -0.000461783818858752,-0.0698007979608792,0.486897080988209,-0.232053801598105, -0.000481763601429486,-0.0705542899730831,0.507553348143058,-0.243293564581018, -0.000501743384000219,-0.0713077819852874,0.528209615297906,-0.254533327563929, -0.000521723166570731,-0.0720612739974911,0.548865882452755,-0.265773090546842, -0.000541702949141243,-0.0728147660096949,0.569522149607604,-0.277012853529754, -0.000561682731711866,-0.0735682580218988,0.590178416762453,-0.288252616512666, -0.000581662514282377,-0.0743217500341029,0.610834683917301,-0.299492379495578, -0.000601642296853,-0.075075242046307,0.63149095107215,-0.310732142478491, -0.000621622079423401,-0.0758287340585109,0.652147218226998,-0.321971905461402, -0.000641601861994023,-0.0765822260707145,0.672803485381847,-0.333211668444315, -0.000661581644564868,-0.0773357180829186,0.693459752536695,-0.344451431427227, -0.000681561427135602,-0.0780892100951227,0.714116019691544,-0.35569119441014, -0.000701541209706114,-0.0788427021073268,0.734772286846392,-0.366930957393051, -0.000721520992276736,-0.0795961941195311,0.755428554001241,-0.378170720375964, -0.000741500774847581,-0.080349686131735,0.77608482115609,-0.389410483358876, -0.000218368860962048,-0.0430705668063568,0.268246837935423,-0.148947894182783, -0.000232778845944137,-0.0430577750698555,0.286810059265156,-0.162843859951379, -0.000247188830926337,-0.0430449833333544,0.305373280594888,-0.176739825719975, -0.000261598815908648,-0.0430321915968532,0.323936501924621,-0.190635791488571, -0.00027600880089057,-0.0430193998603519,0.342499723254354,-0.204531757257167, -0.000290418785872826,-0.0430066081238507,0.361062944584086,-0.218427723025763, -0.000304828770855081,-0.0429938163873498,0.379626165913819,-0.232323688794359, -0.000319238755837281,-0.0429810246508484,0.398189387243552,-0.246219654562955, -0.000333648740819092,-0.0429682329143473,0.416752608573284,-0.26011562033155, -0.000348058725801348,-0.0429554411778461,0.435315829903016,-0.274011586100147, -0.000362468710783159,-0.0429426494413443,0.453879051232749,-0.287907551868742, -0.000376878695765859,-0.0429298577048436,0.472442272562482,-0.301803517637339, -0.000391288680747781,-0.0429170659683422,0.491005493892214,-0.315699483405934, -0.000405698665729703,-0.0429042742318411,0.509568715221947,-0.32959544917453, -0.000420108650711959,-0.0428914824953397,0.528131936551679,-0.343491414943126, -0.000434518635694103,-0.0428786907588383,0.546695157881412,-0.357387380711723, -0.000448928620676026,-0.0428658990223372,0.565258379211145,-0.371283346480319, -0.000463338605658614,-0.0428531072858362,0.583821600540877,-0.385179312248915, -0.000477748590640426,-0.0428403155493344,0.60238482187061,-0.39907527801751, -0.000492158575623014,-0.0428275238128342,0.620948043200342,-0.412971243786106, -0.000506568560605047,-0.0428147320763328,0.639511264530075,-0.426867209554702, -0.000520978545587081,-0.0428019403398312,0.658074485859808,-0.440763175323298, -0.000535388530568892,-0.0427891486033296,0.67663770718954,-0.454659141091894, -0.000549798515550926,-0.042776356866828,0.695200928519273,-0.46855510686049, -0.000564208500533514,-0.0427635651303278,0.713764149849005,-0.482451072629086, -0.000174967021522532,-0.0297769214803709,0.253361158310299,-0.1728493494608, -0.000184775542161619,-0.0293828081671382,0.269761054268607,-0.188912723181529, -0.000194584062800762,-0.0289886948539053,0.286160950226915,-0.204976096902259, -0.000204392583440072,-0.028594581540673,0.302560846185223,-0.221039470622989, -0.000214201104079159,-0.0282004682274399,0.318960742143531,-0.237102844343719, -0.000224009624718302,-0.0278063549142074,0.335360638101839,-0.253166218064448, -0.000233818145357445,-0.0274122416009743,0.351760534060147,-0.269229591785178, -0.000243626665996755,-0.027018128287742,0.368160430018455,-0.285292965505908, -0.000253435186635564,-0.0266240149745089,0.384560325976763,-0.301356339226637, -0.000263243707274929,-0.0262299016612761,0.400960221935071,-0.317419712947367, -0.00027305222791385,-0.0258357883480433,0.417360117893379,-0.333483086668097, -0.000282860748552993,-0.0254416750348103,0.433760013851687,-0.349546460388827, -0.000292669269192136,-0.025047561721578,0.450159909809995,-0.365609834109556, -0.000302477789831279,-0.0246534484083452,0.466559805768303,-0.381673207830286, -0.000312286310470089,-0.0242593350951117,0.482959701726611,-0.397736581551016, -0.000322094831109454,-0.0238652217818789,0.49935959768492,-0.413799955271746, -0.000331903351748486,-0.0234711084686459,0.515759493643228,-0.429863328992475, -0.000341711872387962,-0.0230769951554142,0.532159389601535,-0.445926702713205, -0.000351520393026883,-0.0226828818421809,0.548559285559843,-0.461990076433934, -0.000361328913666248,-0.0222887685289481,0.564959181518152,-0.478053450154664, -0.000371137434305391,-0.021894655215716,0.581359077476459,-0.494116823875394, -0.000380945954944645,-0.0215005419024834,0.597758973434767,-0.510180197596124, -0.000390754475583233,-0.0211064285892495,0.614158869393076,-0.526243571316853, -0.000400562996222487,-0.0207123152760169,0.630558765351384,-0.542306945037583, -0.000410371516861963,-0.0203182019627843,0.646958661309692,-0.558370318758313, -0.000135915154038768,-0.0208785239313828,0.238404005590504,-0.191738634151289, -0.000142251668475646,-0.0203450207610709,0.252804682258477,-0.209514907165056, -0.000148588182912579,-0.0198115175907591,0.26720535892645,-0.227291180178823, -0.000154924697349568,-0.0192780144204472,0.281606035594422,-0.245067453192591, -0.000161261211786667,-0.0187445112501357,0.296006712262395,-0.262843726206358, -0.000167597726223712,-0.0182110080798239,0.310407388930368,-0.280619999220125, -0.000173934240660256,-0.0176775049095115,0.324808065598341,-0.298396272233893, -0.000180270755096967,-0.0171440017391995,0.339208742266314,-0.31617254524766, -0.000186607269534345,-0.016610498568888,0.353609418934286,-0.333948818261427, -0.000192943783971056,-0.016076995398576,0.368010095602259,-0.351725091275194, -0.000199280298407989,-0.0155434922282642,0.382410772270231,-0.369501364288962, -0.000205616812845144,-0.0150099890579527,0.396811448938204,-0.387277637302729, -0.000211953327282077,-0.0144764858876409,0.411212125606177,-0.405053910316496, -0.000218289841719344,-0.0139429827173294,0.425612802274149,-0.422830183330264, -0.000224626356156166,-0.0134094795470174,0.440013478942122,-0.440606456344031, -0.000230962870592766,-0.0128759763767052,0.454414155610095,-0.458382729357798, -0.000237299385030032,-0.0123424732063937,0.468814832278068,-0.476159002371565, -0.000243635899466965,-0.0118089700360819,0.483215508946041,-0.493935275385333, -0.000249972413904231,-0.0112754668657704,0.497616185614013,-0.5117115483991, -0.000256308928340943,-0.010741963695458,0.512016862281986,-0.529487821412867, -0.000262645442777321,-0.0102084605251456,0.526417538949959,-0.547264094426635, -0.00026898195721492,-0.00967495735483492,0.540818215617931,-0.565040367440402, -0.000275318471651187,-0.00914145418452206,0.555218892285904,-0.582816640454169, -0.000281654986088897,-0.00860795101421097,0.569619568953877,-0.600592913467937, -0.000287991500525497,-0.00807444784389899,0.58402024562185,-0.618369186481704, -0.000103125863562259,-0.0150314249109791,0.224956510323409,-0.206293031537416, -0.000107037643296282,-0.0144908805500709,0.237642401206236,-0.225389111912964, -0.000110949423030471,-0.0139503361891626,0.250328292089064,-0.244485192288512, -0.00011486120276416,-0.0134097918282541,0.263014182971891,-0.263581272664061, -0.000118772982498516,-0.012869247467346,0.275700073854718,-0.282677353039609, -0.00012268476223265,-0.0123287031064379,0.288385964737546,-0.301773433415157, -0.000126596541966839,-0.01178815874553,0.301071855620373,-0.320869513790705, -0.000130508321700695,-0.0112476143846212,0.3137577465032,-0.339965594166254, -0.000134420101434607,-0.0107070700237131,0.326443637386027,-0.359061674541802, -0.000138331881168741,-0.0101665256628045,0.339129528268855,-0.37815775491735, -0.000142243660903207,-0.00962598130189707,0.351815419151681,-0.397253835292898, -0.000146155440637008,-0.00908543694098807,0.364501310034509,-0.416349915668447, -0.000150067220371031,-0.00854489258007973,0.377187200917336,-0.435445996043995, -0.000153979000105275,-0.00800434821917206,0.389873091800164,-0.454542076419543, -0.000157890779839853,-0.0074638038582644,0.402558982682991,-0.473638156795092, -0.000161802559573543,-0.00692325949735562,0.415244873565818,-0.49273423717064, -0.000165714339307343,-0.00638271513644684,0.427930764448646,-0.511830317546188, -0.000169626119041255,-0.00584217077553828,0.440616655331473,-0.530926397921737, -0.0001735378987755,-0.00530162641463017,0.4533025462143,-0.550022478297285, -0.000177449678509745,-0.00476108205372228,0.465988437097127,-0.569118558672833, -0.000181361458243434,-0.0042205376928135,0.478674327979955,-0.588214639048381, -0.000185273237977457,-0.00367999333190516,0.491360218862782,-0.60731071942393, -0.000189185017711702,-0.00313944897099772,0.504046109745609,-0.626406799799478, -0.000193096797445502,-0.00259890461008849,0.516732000628437,-0.645502880175026, -0.000197008577180635,-0.00205836024918193,0.529417891511264,-0.664598960550575, -7.69013150269116e-05,-0.0112124089945802,0.213686155491768,-0.217289751280164, -7.92265923220126e-05,-0.0107256090212421,0.224975770084113,-0.237383025238303, -8.1551869616947e-05,-0.0102388090479035,0.236265384676458,-0.257476299196442, -8.38771469119926e-05,-0.0097520090745653,0.247554999268803,-0.277569573154581, -8.62024242070936e-05,-0.0092652091012273,0.258844613861147,-0.297662847112721, -8.85277015023056e-05,-0.0087784091278893,0.270134228453492,-0.31775612107086, -9.08529787969625e-05,-0.00829160915455063,0.281423843045837,-0.337849395028999, -9.3178256091786e-05,-0.00780480918121174,0.292713457638182,-0.357942668987138, -9.55035333870535e-05,-0.00731800920787395,0.304003072230526,-0.378035942945277, -9.78288106822101e-05,-0.00683120923453595,0.315292686822871,-0.398129216903416, -0.000100154087977367,-0.00634440926119773,0.326582301415216,-0.418222490861555, -0.00010247936527219,-0.00585760928785928,0.337871916007561,-0.438315764819694, -0.00010480464256768,-0.00537080931452172,0.349161530599905,-0.458409038777833, -0.000107129919862503,-0.00488400934118283,0.36045114519225,-0.478502312735972, -0.000109455197157105,-0.00439720936784394,0.371740759784595,-0.498595586694111, -0.000111780474452372,-0.00391040939450638,0.38303037437694,-0.518688860652251, -0.000114105751747307,-0.00342360942116771,0.394319988969285,-0.53878213461039, -0.000116431029042463,-0.0029368094478297,0.405609603561629,-0.558875408568529, -0.000118756306336842,-0.00245000947449059,0.416899218153974,-0.578968682526668, -0.000121081583632443,-0.00196320950115325,0.428188832746319,-0.599061956484807, -0.000123406860927822,-0.00147640952781503,0.439478447338664,-0.619155230442946, -0.000125732138222534,-0.0009896095544768,0.450768061931008,-0.639248504401085, -0.000128057415517246,-0.000502809581138131,0.462057676523353,-0.659341778359224, -0.000130382692812514,-1.6009607799905e-05,0.473347291115698,-0.679435052317363, -0.000132707970107671,0.000470790365538321,0.484636905708043,-0.699528326275502, -5.66326000286943e-05,-0.00871038022143844,0.204675808860634,-0.225476040497143, -5.79740674953588e-05,-0.00829704609557247,0.214869738915819,-0.246311655377245, -5.93155349618013e-05,-0.00788371196970594,0.225063668971004,-0.267147270257348, -6.06570024283548e-05,-0.00747037784383964,0.235257599026188,-0.28798288513745, -6.19984698949638e-05,-0.00705704371797378,0.245451529081373,-0.308818500017552, -6.33399373611843e-05,-0.00664370959210681,0.255645459136558,-0.329654114897655, -6.46814048279043e-05,-0.00623037546624117,0.265839389191742,-0.350489729777757, -6.60228722945133e-05,-0.00581704134037442,0.276033319246927,-0.371325344657859, -6.73643397609558e-05,-0.00540370721450811,0.286227249302112,-0.392160959537962, -6.87058072276203e-05,-0.00499037308864203,0.296421179357297,-0.412996574418064, -7.00472746938408e-05,-0.00457703896277573,0.306615109412481,-0.433832189298166, -7.13887421601722e-05,-0.00416370483690898,0.316809039467666,-0.454667804178269, -7.27302096271698e-05,-0.00375037071104356,0.32700296952285,-0.475503419058371, -7.40716770935013e-05,-0.00333703658517681,0.337196899578035,-0.496339033938474, -7.54131445597217e-05,-0.00292370245931028,0.34739082963322,-0.517174648818576, -7.67546120263862e-05,-0.00251036833344376,0.357584759688405,-0.538010263698678, -7.80960794933838e-05,-0.00209703420757834,0.367778689743589,-0.558845878578781, -7.94375469600483e-05,-0.00168370008171248,0.377972619798774,-0.579681493458883, -8.07790144256026e-05,-0.00127036595584507,0.388166549853959,-0.600517108338986, -8.21204818929333e-05,-0.000857031829979427,0.398360479909143,-0.621352723219088, -8.34619493590427e-05,-0.0004436977041129,0.408554409964328,-0.64218833809919, -8.48034168255962e-05,-3.03635782463729e-05,0.418748340019513,-0.663023952979293, -8.61448842924828e-05,0.000382970547619266,0.428942270074697,-0.683859567859395, -8.74863517583702e-05,0.000796304673487125,0.439136200129883,-0.704695182739497, -8.88278192258118e-05,0.00120963879935099,0.449330130185066,-0.7255307976196, -4.13373688740171e-05,-0.00705668573501761,0.19770366328409,-0.231503080603621, -4.20943384865091e-05,-0.00671586427299242,0.207060224147296,-0.252885233529322, -4.28513080990567e-05,-0.00637504281096724,0.216416785010503,-0.274267386455022, -4.36082777115487e-05,-0.00603422134894172,0.22577334587371,-0.295649539380723, -4.43652473240408e-05,-0.00569339988691642,0.235129906736916,-0.317031692306424, -4.51222169367549e-05,-0.00535257842489134,0.244486467600123,-0.338413845232125, -4.587918654958e-05,-0.00501175696286627,0.25384302846333,-0.359795998157826, -4.6636156161739e-05,-0.00467093550084052,0.263199589326536,-0.381178151083527, -4.73931257741755e-05,-0.004330114038815,0.272556150189743,-0.402560304009228, -4.81500953869451e-05,-0.00398929257678993,0.28191271105295,-0.423942456934929, -4.89070649996037e-05,-0.00364847111476485,0.291269271916156,-0.44532460986063, -4.96640346119293e-05,-0.00330764965273933,0.300625832779363,-0.466706762786331, -5.04210042249209e-05,-0.0029668281907147,0.309982393642569,-0.488088915712032, -5.11779738375795e-05,-0.0026260067286894,0.319338954505776,-0.509471068637732, -5.1934943449794e-05,-0.0022851852666641,0.328695515368983,-0.530853221563433, -5.26919130625636e-05,-0.0019443638046388,0.338052076232189,-0.552235374489135, -5.34488826750001e-05,-0.00160354234261328,0.347408637095396,-0.573617527414835, -5.42058522873257e-05,-0.00126272088058776,0.356765197958603,-0.594999680340536, -5.49628219004283e-05,-0.000921899418563132,0.36612175882181,-0.616381833266237, -5.57197915128649e-05,-0.000581077956537612,0.375478319685016,-0.637763986191938, -5.64767611251904e-05,-0.000240256494512092,0.384834880548223,-0.659146139117639, -5.72337307371829e-05,0.000100564967513872,0.39419144141143,-0.68052829204334, -5.79907003502855e-05,0.000441386429538504,0.403548002274636,-0.701910444969041, -5.87476699631662e-05,0.00078220789156358,0.412904563137843,-0.723292597894742, -5.95046395752696e-05,0.00112302935358954,0.42226112400105,-0.744674750820443, -2.99853015393037e-05,-0.00595090937629139,0.192430927252515,-0.235904339215501, -3.04062288902784e-05,-0.00567297890198493,0.201159555945985,-0.257685602689234, -3.08271562415308e-05,-0.00539504842767902,0.209888184639455,-0.279466866162968, -3.12480835929496e-05,-0.00511711795337288,0.218616813332924,-0.301248129636701, -3.16690109442574e-05,-0.00483918747906675,0.227345442026394,-0.323029393110435, -3.20899382953987e-05,-0.00456125700476062,0.236074070719864,-0.344810656584168, -3.2510865646429e-05,-0.00428332653045405,0.244802699413334,-0.366591920057902, -3.29317929976813e-05,-0.00400539605614791,0.253531328106803,-0.388373183531635, -3.33527203489892e-05,-0.003727465581842,0.262259956800273,-0.410154447005369, -3.3773647700297e-05,-0.00344953510753565,0.270988585493743,-0.431935710479102, -3.41945750516048e-05,-0.00317160463322996,0.279717214187212,-0.453716973952836, -3.46155024023576e-05,-0.00289367415892272,0.288445842880682,-0.475498237426569, -3.50364297537764e-05,-0.00261574368461726,0.297174471574152,-0.497279500900303, -3.54573571051953e-05,-0.00233781321031112,0.305903100267621,-0.519060764374036, -3.5878284456059e-05,-0.00205988273600455,0.314631728961091,-0.54084202784777, -3.62992118074779e-05,-0.00178195226169886,0.323360357654561,-0.562623291321504, -3.67201391587857e-05,-0.00150402178739295,0.33208898634803,-0.584404554795237, -3.71410665098715e-05,-0.00122609131308637,0.3408176150415,-0.606185818268971, -3.75619938611793e-05,-0.000948160838780243,0.34954624373497,-0.627967081742704, -3.79829212123761e-05,-0.000670230364473667,0.35827487242844,-0.649748345216437, -3.8403848563795e-05,-0.00039229989016798,0.367003501121909,-0.671529608690171, -3.88247759145477e-05,-0.000114369415861848,0.375732129815379,-0.693310872163905, -3.92457032656335e-05,0.000163561058444728,0.384460758508849,-0.715092135637638, -3.96666306177185e-05,0.000441491532749971,0.393189387202318,-0.736873399111371, -4.00875579681381e-05,0.000719422007057435,0.401918015895788,-0.758654662585105, -2.16559292193774e-05,-0.00520240192210908,0.18850753240315,-0.239099249711944, -2.1888209712384e-05,-0.00497540519491824,0.196771646142004,-0.26117023087591, -2.21204902053351e-05,-0.00474840846772784,0.205035759880858,-0.283241212039876, -2.23527706981197e-05,-0.004521411740537,0.213299873619712,-0.305312193203842, -2.25850511909598e-05,-0.00429441501334638,0.221563987358565,-0.327383174367808, -2.28173316838554e-05,-0.00406741828615553,0.229828101097419,-0.349454155531774, -2.30496121766954e-05,-0.00384042155896491,0.238092214836273,-0.371525136695741, -2.32818926698686e-05,-0.00361342483177474,0.246356328575126,-0.393596117859707, -2.35141731628197e-05,-0.00338642810458367,0.25462044231398,-0.415667099023673, -2.37464536556597e-05,-0.00315943137739305,0.262884556052834,-0.437738080187639, -2.39787341484998e-05,-0.00293243465020288,0.271148669791687,-0.459809061351605, -2.42110146414509e-05,-0.00270543792301181,0.279412783530541,-0.481880042515572, -2.4443295134069e-05,-0.00247844119582075,0.287676897269395,-0.503951023679538, -2.46755756274641e-05,-0.00225144446863079,0.295941011008249,-0.526022004843504, -2.49078561201932e-05,-0.00202444774143995,0.304205124747102,-0.54809298600747, -2.51401366134774e-05,-0.00179745101425,0.312469238485956,-0.570163967171436, -2.53724171062064e-05,-0.00157045428705871,0.32073335222481,-0.592234948335402, -2.56046975987134e-05,-0.00134345755986764,0.328997465963663,-0.614305929499369, -2.58369780917755e-05,-0.00111646083267702,0.337261579702517,-0.636376910663335, -2.60692585846156e-05,-0.000889464105486404,0.345525693441371,-0.658447891827301, -2.63015390778998e-05,-0.000662467378296228,0.353789807180224,-0.680518872991267, -2.65338195698517e-05,-0.000435470651104275,0.362053920919079,-0.702589854155233, -2.67661000635799e-05,-0.000208473923915431,0.370318034657931,-0.724660835319199, -2.69983805567531e-05,1.85228032747453e-05,0.378582148396785,-0.746731816483166, -2.72306610492601e-05,0.000245519530466698,0.386846262135639,-0.768802797647132, -1.55925830145898e-05,-0.00468990617347764,0.185621615830676,-0.241408431591227, -1.57206274770672e-05,-0.00450249796473789,0.193545439625256,-0.263688811685504, -1.5848671939489e-05,-0.00431508975599804,0.201469263419836,-0.28596919177978, -1.59767164019109e-05,-0.00412768154725818,0.209393087214416,-0.308249571874057, -1.61047608645548e-05,-0.00394027333851876,0.217316911008995,-0.330529951968334, -1.62328053266436e-05,-0.00375286512977868,0.225240734803575,-0.35281033206261, -1.63608497889545e-05,-0.00356545692103838,0.233164558598155,-0.375090712156887, -1.64888942512098e-05,-0.00337804871229852,0.241088382392735,-0.397371092251164, -1.66169387137982e-05,-0.00319064050355933,0.249012206187315,-0.419651472345441, -1.67449831757205e-05,-0.00300323229481858,0.256936029981895,-0.441931852439717, -1.68730276385309e-05,-0.00281582408607961,0.264859853776475,-0.464212232533994, -1.70010721008973e-05,-0.00262841587733953,0.272783677571055,-0.486492612628271, -1.71291165630416e-05,-0.002441007668599,0.280707501365635,-0.508772992722547, -1.7257161025408e-05,-0.00225359945985892,0.288631325160215,-0.531053372816824, -1.73852054876633e-05,-0.00206619125111929,0.296555148954795,-0.553333752911101, -1.75132499499187e-05,-0.00187878304237921,0.304478972749375,-0.575614133005378, -1.7641294412396e-05,-0.00169137483363935,0.312402796543955,-0.597894513099654, -1.77693388750955e-05,-0.00150396662490015,0.320326620338534,-0.620174893193931, -1.78973833372398e-05,-0.00131655841616007,0.328250444133114,-0.642455273288208, -1.80254277994951e-05,-0.00112915020742044,0.336174267927694,-0.664735653382484, -1.81534722619725e-05,-0.000941741998680357,0.344098091722274,-0.687016033476761, -1.82815167245609e-05,-0.00075433378994072,0.352021915516854,-0.709296413571037, -1.84095611867052e-05,-0.000566925581200639,0.359945739311434,-0.731576793665314, -1.85376056488495e-05,-0.000379517372460558,0.367869563106014,-0.753857173759591, -1.86656501113269e-05,-0.000192109163720922,0.375793386900594,-0.776137553853868, -1.12028670707365e-05,-0.00433551896378215,0.183516180734126,-0.24307221295256, -1.12738184348538e-05,-0.00417808149301435,0.191192455390847,-0.265503466410455, -1.1344769798749e-05,-0.00402064402224633,0.198868730047568,-0.28793471986835, -1.14157211631993e-05,-0.00386320655147876,0.206545004704288,-0.310365973326245, -1.14866725270391e-05,-0.00370576908071052,0.214221279361009,-0.33279722678414, -1.15576238910453e-05,-0.0035483316099425,0.22189755401773,-0.355228480242035, -1.16285752549405e-05,-0.00339089413917448,0.229573828674451,-0.37765973369993, -1.16995266195019e-05,-0.00323345666840713,0.237250103331172,-0.400090987157825, -1.17704779830641e-05,-0.00307601919763889,0.244926377987892,-0.42252224061572, -1.18414293469593e-05,-0.00291858172687065,0.252602652644613,-0.444953494073615, -1.19123807117427e-05,-0.00276114425610374,0.260278927301334,-0.46738474753151, -1.1983332075638e-05,-0.0026037067853355,0.267955201958055,-0.489816000989405, -1.20542834393111e-05,-0.00244626931456682,0.275631476614776,-0.5122472544473, -1.21252348037615e-05,-0.00228883184379969,0.283307751271496,-0.534678507905195, -1.21961861673237e-05,-0.002131394373031,0.290984025928217,-0.55710976136309, -1.2267137531774e-05,-0.00197395690226343,0.298660300584938,-0.579541014820985, -1.23380888957803e-05,-0.00181651943149586,0.306336575241658,-0.60197226827888, -1.24090402602306e-05,-0.00165908196072806,0.314012849898379,-0.624403521736775, -1.24799916237928e-05,-0.00150164448995938,0.321689124555101,-0.64683477519467, -1.255094298791e-05,-0.00134420701919202,0.329365399211821,-0.669266028652565, -1.26218943524714e-05,-0.00118676954842423,0.337041673868542,-0.69169728211046, -1.26928457166997e-05,-0.00102933207765687,0.344717948525262,-0.714128535568355, -1.27637970801509e-05,-0.000871894606888191,0.352394223181983,-0.73655978902625, -1.28347484440461e-05,-0.000714457136119506,0.360070497838705,-0.758991042484145, -1.29056998080523e-05,-0.00055701966535171,0.367746772495425,-0.78142229594204, -8.03686207367926e-06,-0.00408846834833199,0.181989111659815,-0.244268273295922, -8.07661456186937e-06,-0.00395332636317081,0.189486202698229,-0.266807986706121, -8.1163670497264e-06,-0.00381818437800963,0.196983293736642,-0.289347700116319, -8.15611953774997e-06,-0.003683042392848,0.204480384775056,-0.311887413526517, -8.19587202582905e-06,-0.00354790040768704,0.211977475813469,-0.334427126936716, -8.2356245137416e-06,-0.00341275842252609,0.219474566851882,-0.356966840346914, -8.27537700182068e-06,-0.00327761643736446,0.226971657890296,-0.379506553757112, -8.31512948973323e-06,-0.00314247445220306,0.23446874892871,-0.402046267167311, -8.35488197747924e-06,-0.00300733246704166,0.241965839967123,-0.424585980577509, -8.39463446578037e-06,-0.00287219048188092,0.249462931005537,-0.447125693987707, -8.43438695330434e-06,-0.00273704849671907,0.25696002204395,-0.469665407397906, -8.47413944171649e-06,-0.00260190651155789,0.264457113082364,-0.492205120808104, -8.51389192968455e-06,-0.00246676452639649,0.271954204120777,-0.514744834218302, -8.55364441731954e-06,-0.00233162254123487,0.279451295159191,-0.5372845476285, -8.59339690562066e-06,-0.00219648055607413,0.286948386197604,-0.559824261038699, -8.6331493934777e-06,-0.00206133857091295,0.294445477236017,-0.582363974448897, -8.67290188222292e-06,-0.00192619658575222,0.301942568274431,-0.604903687859096, -8.71265436952484e-06,-0.00179105460059015,0.309439659312845,-0.627443401269294, -8.75240685727086e-06,-0.00165591261542852,0.316936750351258,-0.649983114679492, -8.79215934546096e-06,-0.00152077063026779,0.324433841389672,-0.672522828089691, -8.83191183320697e-06,-0.00138562864510572,0.331930932428086,-0.695062541499889, -8.87166432161912e-06,-0.00125048665994498,0.339428023466499,-0.717602254910087, -8.91141680980923e-06,-0.0011153446747838,0.346925114504913,-0.740141968320285, -8.95116929822137e-06,-0.000980202689623511,0.354422205543325,-0.762681681730484, -8.99092178541228e-06,-0.000845060704461442,0.361919296581739,-0.785221395140682, -5.75947413478106e-06,-0.00391513906929497,0.180886146395829,-0.245126702100606, -5.7821156230764e-06,-0.00379638611201094,0.188254003136995,-0.267744258696333, -5.80475711159378e-06,-0.0036776331547268,0.195621859878162,-0.29036181529206, -5.82739860011117e-06,-0.0035588801974431,0.202989716619328,-0.312979371887788, -5.85004008840651e-06,-0.00344012724015896,0.210357573360494,-0.335596928483515, -5.87268157681287e-06,-0.00332137428287504,0.21772543010166,-0.358214485079242, -5.8953230651082e-06,-0.00320262132559046,0.225093286842826,-0.380832041674969, -5.91796455362559e-06,-0.00308386836830676,0.232461143583992,-0.403449598270696, -5.94060604219848e-06,-0.00296511541102262,0.239829000325158,-0.426067154866423, -5.96324753054933e-06,-0.00284636245373893,0.247196857066324,-0.44868471146215, -5.98588901912223e-06,-0.00272760949645523,0.25456471380749,-0.471302268057877, -6.00853050769512e-06,-0.00260885653917153,0.261932570548656,-0.493919824653604, -6.03117199549086e-06,-0.0024901035818865,0.269300427289823,-0.516537381249331, -6.0538134842858e-06,-0.00237135062460281,0.276668284030988,-0.539154937845058, -6.07645497308074e-06,-0.00225259766731933,0.284036140772154,-0.561772494440785, -6.09909646132056e-06,-0.00213384471003542,0.29140399751332,-0.584390051036512, -6.12173794978244e-06,-0.00201509175275127,0.298771854254487,-0.607007607632239, -6.14437943846635e-06,-0.00189633879546802,0.306139710995652,-0.629625164227966, -6.16702092659516e-06,-0.00177758583818299,0.313507567736819,-0.652242720823693, -6.18966241516805e-06,-0.0016588328808993,0.320875424477985,-0.67486027741942, -6.21230390318583e-06,-0.00154007992361471,0.328243281219151,-0.697477834015147, -6.23494539142566e-06,-0.00142132696633057,0.335611137960317,-0.720095390610874, -6.25758688044264e-06,-0.00130257400904732,0.342978994701483,-0.742712947206601, -6.28022836857145e-06,-0.00118382105176273,0.350346851442649,-0.765330503802328, -6.30286985670026e-06,-0.00106506809447815,0.357714708183816,-0.787948060398055, -4.12432709961941e-06,-0.00379293354838373,0.180091873156102,-0.245742089933523, -4.13749656824614e-06,-0.00368612884327413,0.187366759910271,-0.268415450515543, -4.15066603637326e-06,-0.00357932413816386,0.19464164666444,-0.291088811097563, -4.16383550483346e-06,-0.00347251943305427,0.201916533418609,-0.313762171679582, -4.17700497290507e-06,-0.00336571472794378,0.209191420172778,-0.336435532261602, -4.1901744415318e-06,-0.00325891002283396,0.216466306926947,-0.359108892843622, -4.20334390976995e-06,-0.00315210531772414,0.223741193681116,-0.381782253425642, -4.21651337823015e-06,-0.00304530061261454,0.231016080435285,-0.404455614007662, -4.22968284641279e-06,-0.0029384959075045,0.238290967189454,-0.427128974589681, -4.24285231470645e-06,-0.00283169120239446,0.245565853943623,-0.449802335171701, -4.25602178277806e-06,-0.00272488649728375,0.252840740697792,-0.472475695753721, -4.2691912509607e-06,-0.00261808179217371,0.260115627451961,-0.495149056335741, -4.28236071947641e-06,-0.00251127708706345,0.267390514206131,-0.51782241691776, -4.29553018788109e-06,-0.00240447238195385,0.274665400960299,-0.54049577749978, -4.30869965584169e-06,-0.00229766767684381,0.281940287714468,-0.5631691380818, -4.32186912435739e-06,-0.00219086297173354,0.289215174468638,-0.585842498663819, -4.33503859309514e-06,-0.00208405826662439,0.296490061222806,-0.608515859245839, -4.34820806094471e-06,-0.00197725356151368,0.303764947976976,-0.631189219827859, -4.36137752968246e-06,-0.00187044885640431,0.311039834731144,-0.653862580409879, -4.37454699775408e-06,-0.00176364415129404,0.318314721485313,-0.676535940991898, -4.38771646571467e-06,-0.00165683944618333,0.325589608239483,-0.699209301573918, -4.40088593467447e-06,-0.0015500347410744,0.332864494993651,-0.721882662155938, -4.414055402302e-06,-0.00144323003596281,0.340139381747821,-0.744556022737958, -4.42722487126179e-06,-0.00133642533085432,0.347414268501989,-0.767229383319977, -4.4403943397775e-06,-0.0012296206257445,0.354689155256158,-0.789902743901997, -2.95183580645286e-06,-0.00370645370112288,0.179521113872734,-0.246182878501342, -2.95968487706855e-06,-0.00360830965049797,0.186729241529835,-0.268896210233067, -2.96753394729565e-06,-0.00351016559987261,0.193937369186937,-0.291609541964792, -2.97538301768929e-06,-0.00341202154924747,0.201145496844038,-0.314322873696518, -2.98323208819395e-06,-0.00331387749862233,0.20835362450114,-0.337036205428243, -2.99108115892066e-06,-0.00321573344799742,0.215561752158241,-0.359749537159968, -2.99893022920328e-06,-0.00311758939737206,0.222769879815343,-0.382462868891694, -3.00677929976345e-06,-0.00301944534674714,0.229978007472444,-0.405176200623419, -3.01462837004607e-06,-0.00292130129612178,0.237186135129546,-0.427889532355144, -3.0224774408838e-06,-0.00282315724549731,0.244394262786647,-0.45060286408687, -3.03032651116641e-06,-0.00272501319487173,0.251602390443749,-0.473316195818595, -3.03817558156005e-06,-0.00262686914424637,0.258810518100851,-0.496029527550321, -3.04602465206472e-06,-0.00252872509362123,0.266018645757953,-0.518742859282046, -3.05387372245836e-06,-0.00243058104299587,0.273226773415054,-0.541456191013771, -3.061722792852e-06,-0.00233243699237118,0.280434901072155,-0.564169522745497, -3.06957186324563e-06,-0.00223429294174537,0.287643028729258,-0.586882854477222, -3.07742093397234e-06,-0.0021361488911209,0.294851156386359,-0.609596186208947, -3.08527000469905e-06,-0.00203800484049621,0.30205928404346,-0.632309517940673, -3.09311907475962e-06,-0.00193986078987018,0.309267411700562,-0.655022849672398, -3.10096814515326e-06,-0.00184171673924549,0.316475539357663,-0.677736181404123, -3.10881721599099e-06,-0.00174357268861991,0.323683667014766,-0.700449513135849, -3.11666628627361e-06,-0.00164542863799522,0.330891794671867,-0.723162844867574, -3.12451535711133e-06,-0.00154728458737052,0.338099922328968,-0.745876176599299, -3.13236442717191e-06,-0.0014491405367445,0.34530804998607,-0.768589508331025, -3.14021349756555e-06,-0.00135099648611936,0.352516177643172,-0.79130284006275, -2.11186936349694e-06,-0.00364508743395964,0.179111593840341,-0.246498416416352, -2.11667157173911e-06,-0.00355319561261913,0.186271846596139,-0.269240361442884, -2.12147378031435e-06,-0.00346130379127874,0.193432099351938,-0.291982306469417, -2.12627598883408e-06,-0.00336941196993856,0.200592352107736,-0.31472425149595, -2.13107819735381e-06,-0.00327752014859817,0.207752604863535,-0.337466196522482, -2.13588040542945e-06,-0.00318562832725733,0.214912857619333,-0.360208141549015, -2.1406826140602e-06,-0.00309373650591716,0.222073110375132,-0.382950086575547, -2.14548482235788e-06,-0.00300184468457654,0.229233363130931,-0.40569203160208, -2.15028703065556e-06,-0.00290995286323592,0.236393615886729,-0.428433976628613, -2.15508923928631e-06,-0.00281806104189575,0.243553868642528,-0.451175921655145, -2.15989144791706e-06,-0.00272616922055557,0.250714121398326,-0.473917866681678, -2.16469365588168e-06,-0.00263427739921429,0.257874374154125,-0.49665981170821, -2.16949586451243e-06,-0.00254238557787434,0.265034626909923,-0.519401756734743, -2.17429807269909e-06,-0.0024504937565335,0.272194879665722,-0.542143701761276, -2.17910028144086e-06,-0.00235860193519355,0.27935513242152,-0.564885646787808, -2.18390249007161e-06,-0.00226671011385338,0.286515385177319,-0.587627591814341, -2.18870469870236e-06,-0.00217481829251343,0.293675637933117,-0.610369536840874, -2.19350690688902e-06,-0.00208292647117192,0.300835890688917,-0.633111481867406, -2.19830911574181e-06,-0.00199103464983219,0.307996143444715,-0.655853426893939, -2.20311132392847e-06,-0.00189914282849157,0.315156396200513,-0.678595371920471, -2.20791353200411e-06,-0.00180725100715051,0.322316648956312,-0.701337316947004, -2.21271574074589e-06,-0.00171535918581034,0.329476901712111,-0.724079261973537, -2.21751794904357e-06,-0.00162346736447017,0.336637154467909,-0.746821207000069, -2.22232015700818e-06,-0.00153157554312955,0.343797407223707,-0.769563152026602, -2.227122365972e-06,-0.00143968372178938,0.350957659979506,-0.792305097053135, -1.51051496311005e-06,-0.00360145408282586,0.178818082363727,-0.246724196957689, -1.51353127442189e-06,-0.00351406289403688,0.185944034848802,-0.269486615990304, -1.51654758584474e-06,-0.0034266717052478,0.193069987333877,-0.292249035022918, -1.51956389665697e-06,-0.00333928051645849,0.200195939818952,-0.315011454055533, -1.52258020852392e-06,-0.00325188932766984,0.207321892304027,-0.337773873088148, -1.52559651944717e-06,-0.00316449813888009,0.214447844789102,-0.360536292120762, -1.52861283087002e-06,-0.00307710695009167,0.221573797274176,-0.383298711153377, -1.53162914162674e-06,-0.00298971576130191,0.228699749759252,-0.406061130185991, -1.53464545293858e-06,-0.0029023245725126,0.235825702244327,-0.428823549218606, -1.53766176391734e-06,-0.00281493338372285,0.242951654729402,-0.451585968251221, -1.54067807556224e-06,-0.00272754219493465,0.250077607214476,-0.474348387283835, -1.54369438676305e-06,-0.00264015100614512,0.257203559699552,-0.49711080631645, -1.54671069829693e-06,-0.0025527598173567,0.264329512184626,-0.519873225349065, -1.54972700905365e-06,-0.00246536862856672,0.271455464669702,-0.542635644381679, -1.55274332069855e-06,-0.00237797743977808,0.278581417154776,-0.565398063414294, -1.55575963167731e-06,-0.00229058625098877,0.285707369639851,-0.588160482446909, -1.55877594287812e-06,-0.00220319506219946,0.292833322124926,-0.610922901479523, -1.56179225396791e-06,-0.00211580387340993,0.299959274610001,-0.633685320512138, -1.56480856550179e-06,-0.00202841268462173,0.307085227095076,-0.656447739544753, -1.56782487592544e-06,-0.00194102149583086,0.314211179580152,-0.679210158577367, -1.57084118757034e-06,-0.00185363030704266,0.321337132065226,-0.701972577609982, -1.57385749932626e-06,-0.00176623911825446,0.328463084550301,-0.724734996642597, -1.57687381008298e-06,-0.00167884792946404,0.335589037035376,-0.747497415675211, -1.57989012128379e-06,-0.0015914567406754,0.342714989520451,-0.770259834707826, -1.58290643315073e-06,-0.0015040655518872,0.349840942005526,-0.793022253740441 }; } /* namespace DSP */ #endif /* _VS_TAB_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/util.h000066400000000000000000000026231247673406200213460ustar00rootroot00000000000000/* dsp/util.h Copyright 2002-4 Tim Goetze http://quitte.de/dsp/ Common math utility functions. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_UTIL_H_ #define _DSP_UTIL_H_ namespace DSP { inline int next_power_of_2 (int n) { assert (n <= 0x40000000); int m = 1; while (m < n) m <<= 1; return m; } inline bool isprime (int v) { if (v <= 3) return true; if (!(v & 1)) return false; for (int i = 3; i < (int) sqrt (v) + 1; i += 2) if ((v % i) == 0) return false; return true; } inline double db2lin (double db) { return pow (10., db * .05); } inline double lin2db (double lin) { return 20. * log10 (lin); } } /* namespace DSP */ #endif /* _DSP_UTIL_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/windows.h000066400000000000000000000064771247673406200220760ustar00rootroot00000000000000/* dsp/windows.h Copyright 2004-11 Tim Goetze http://quitte.de/dsp/ select few common windowing algorithms. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ #ifndef _DSP_WINDOWS_H_ #define _DSP_WINDOWS_H_ namespace DSP { /* prototypes for window value application ... */ typedef void (*window_sample_func_t) (sample_t &, sample_t); /* ... which go as template parameters for the window calculation below */ inline void store_sample (sample_t & d, sample_t s) { d = s; } inline void apply_window (sample_t &d, sample_t s) { d *= s; } template void hanning (sample_t * s, int n) { /* could speed up by using DSP::Sine but we rarely use this window */ for (int i = 0; i < n; ++i) { register double f = (double) i / n - 1; F (s[i], .5 - .5 * cos (2 * M_PI * f)); } } template void blackman (sample_t * s, int n) { register float w = n; for (int i = 0; i < n; ++i) { register float f = (float) i; register double b = .42f - .5f * cos (2.f * f * M_PI / w) + .08 * cos (4.f * f * M_PI / w); F (s[i], b); } } template void blackman_harris (sample_t * s, int n) { register double w1 = 2.f * M_PI / (n - 1); register double w2 = 2.f * w1; register double w3 = 3.f * w1; for (int i = 0; i < n; ++i) { register double f = (double) i; register double bh = .35875f - .48829f * cos (w1 * f) + .14128f * cos (w2 * f) - .01168f * cos (w3 * f); bh *= .761f; F (s[i], bh); } } /* helper for the kaiser window, courtesy of R. Dobson, courtesy of csound */ inline double besseli (double x) { double ax, ans; double y; if ((ax = fabs (x)) < 3.75) { y = x / 3.75; y *= y; ans = (1.0 + y * (3.5156229 + y * (3.0899424 + y * (1.2067492 + y * (0.2659732 + y * (0.360768e-1 + y * 0.45813e-2)))))); } else { y = 3.75 / ax; ans = ((exp (ax) / sqrt (ax)) * (0.39894228 + y * (0.1328592e-1 + y * (0.225319e-2 + y * (-0.157565e-2 + y * (0.916281e-2 + y * (-0.2057706e-1 + y * (0.2635537e-1 + y * (-0.1647633e-1 + y * 0.392377e-2))))))))); } return ans; } template void kaiser (sample_t * s, int n, double beta) { double bb = besseli (beta); int si = 0; for (double i = -n / 2 + .1; si < n; ++si, ++i) { double k = besseli ((beta * sqrt (1 - pow ((2 * i / (n - 1)), 2)))) / bb; /* can you spell hack */ if (!isfinite (k) || isnan(k)) k = 0; F (s[si], k); } /* asymmetrical hack: sort out first value! win[0] = win[len-1]; */ } }; /* namespace DSP */ #endif /* _DSP_WINDOWS_H_ */ lmms-1.1.3/plugins/LadspaEffect/caps/elev0.h000066400000000000000000003522011247673406200206160ustar00rootroot00000000000000#ifndef _ELEV_0_H_ #define _ELEV_0_H_ static struct { struct {double a[31], b[31];} left, right; } elev0 [] = { { /* 0 deg */ { /* left */ { /* a */ 0.00016115992608954982025, -0.00010768917854458648288, -0.00063346856180946037665, 0.00046347742029473120925, -0.0015439852840736303929, 0.002322097197441415177, -0.0030171705384801628114, 0.0040049622633845857744, -0.0061951205789184497774, 0.007477237413920645448, -0.0077387794749934207816, 0.011064070674173843989, -0.0039638879209113325741, 0.18900346994412650647, 0.11180546019300675875, -0.30157903765100790849, 0.1347944936894422685, -0.11208456287521188777, -0.10407312479763883295, 0.36646565042846751536, -0.03021948747062653054, 0.12118534476775748299, 0.38955804570991658942, 0.10541328915312503378, -0.3230797648386828369, -0.047446774889543630316, 0.074881148756352045037, -0.35284433955617594547, -0.17940547664191497379, -0.031687898661414630463, -0.079669760381518725523}, { /* b */ 0, 0.060872553612196914075, 0.028134109258271672305, 0.19714624090581839289, 0.080867126093135940912, 0.015075818698181541605, 0.09631379420052403606, 0.10062956273363155013, 0.078554087002350780899, -0.015526584402269706653, -0.046159578846992205259, 0.08942137063482573367, -0.0031327716162594778163, 0.044707285945433258845, 0.019012234566775400302, 0.023245822417901004786, 0.099133288024720767062, -0.016901102476781122708, -0.0080432755625650560749, -0.059588888105196691214, 0.025493274350173785597, 0.052825597092033604874, 0.052130256044543292482, 0.014949928868884798661, -0.015431476841200410938, -0.0083606347897418296922, 0.019454219693235737937, 0.0028516212312724819981, -0.044967056642177052894, -0.03421366827611452277, -0.063356553650132305111}, }, { /* right */ { /* a */ 0.00016115992608954982025, -0.00010768917854458648288, -0.00063346856180946037665, 0.00046347742029473120925, -0.0015439852840736303929, 0.002322097197441415177, -0.0030171705384801628114, 0.0040049622633845857744, -0.0061951205789184497774, 0.007477237413920645448, -0.0077387794749934207816, 0.011064070674173843989, -0.0039638879209113325741, 0.18900346994412650647, 0.11180546019300675875, -0.30157903765100790849, 0.1347944936894422685, -0.11208456287521188777, -0.10407312479763883295, 0.36646565042846751536, -0.03021948747062653054, 0.12118534476775748299, 0.38955804570991658942, 0.10541328915312503378, -0.3230797648386828369, -0.047446774889543630316, 0.074881148756352045037, -0.35284433955617594547, -0.17940547664191497379, -0.031687898661414630463, -0.079669760381518725523}, { /* b */ 0, 0.060872553612196914075, 0.028134109258271672305, 0.19714624090581839289, 0.080867126093135940912, 0.015075818698181541605, 0.09631379420052403606, 0.10062956273363155013, 0.078554087002350780899, -0.015526584402269706653, -0.046159578846992205259, 0.08942137063482573367, -0.0031327716162594778163, 0.044707285945433258845, 0.019012234566775400302, 0.023245822417901004786, 0.099133288024720767062, -0.016901102476781122708, -0.0080432755625650560749, -0.059588888105196691214, 0.025493274350173785597, 0.052825597092033604874, 0.052130256044543292482, 0.014949928868884798661, -0.015431476841200410938, -0.0083606347897418296922, 0.019454219693235737937, 0.0028516212312724819981, -0.044967056642177052894, -0.03421366827611452277, -0.063356553650132305111}, }, }, { /* 5 deg */ { /* left */ { /* a */ -0.00017696253206769471666, 0.00021107918665545769466, -2.0620763396513567709e-05, -0.00018186803582760145237, 8.373679531671252463e-05, -0.0011082651235009427504, 0.0013814999459888562677, -0.0022305356427783796375, 0.0034326663959655806524, -0.0048009305045435424902, 0.0056349419483249160723, -0.0071918462710358118523, 0.0095052705275961314052, 0.0007448483104648476183, 0.17757056636691290197, 0.080751512987945209265, -0.25584565078920767922, 0.11313029183314063375, -0.11130775557262871656, -0.068744404280904225502, 0.30732662377751773786, -0.027707718907452515145, 0.12364106832536264635, 0.35026569867066370545, 0.07471421608637314471, -0.25776067100019012246, -0.055371338162804373262, -0.012256460040568777775, -0.25866536683473279057, -0.17782894990620184972, -0.064670654485651041243}, { /* b */ 0, 0.055090796937088862273, 0.055437560430932439348, 0.22990052867708210549, 0.099428824021023237689, -0.0027769955961815754458, 0.10085574251165992099, 0.16312061234767347151, 0.039470376556444738969, -0.041848049583603372237, -0.032542858026161185225, 0.02139343730159100343, 0.048098231701239960167, 0.037733893377851102091, 0.019373785721910955632, 0.061746578342221650204, 0.035488211745084013993, -0.01806919754088130714, -0.027128260233510496924, -0.042503705793375312627, 0.051926493757134692397, 0.07069393657400141473, 0.019673226352204746525, -0.00012103498389409196589, -0.027627741515316259213, 0.009635983304503818736, 0.018631749546224596337, -0.016615904545286074023, -0.044341341793715960407, -0.030215378264473007064, -0.041358753534985123745}, }, { /* right */ { /* a */ 0.00021674611259610464188, -0.0010589548271123022313, 0.0010969447757948318917, -0.0021209537250143142839, 0.0028729385414139746446, -0.0035972033027254976534, 0.0044402795492401794797, -0.006073245440653581885, 0.0067101547727077218847, -0.0060717874211108089147, 0.0086287155143119700917, -0.0062948148262572563294, 0.16059210095363563031, 0.20386616350646591389, -0.35114984389089032302, 0.086216963151213521499, -0.024061119790435951671, -0.22331071743275801578, 0.43099142324044042995, 0.031472736270457199459, 0.027458263182878438202, 0.45513707401194097857, 0.15478327645377623623, -0.42059874974912558887, -0.063648009970495300625, 0.14751824494855145242, -0.3619823099623888929, -0.19283311769574695838, -0.011882636463899330648, -0.089521111340056691574, -0.026022800212665765651}, { /* b */ 0, 0.079572218898552926625, 0.053165668189737030902, 0.17176014787903778891, 0.086820173277007889334, 0.060694063956346300248, 0.029633229388448603658, 0.084867011888823756793, 0.042640077616905060209, -0.029035195885816392214, 0.029653473189723660031, 0.085308978346717134755, 0.0048636815673216080014, 0.01605369931437055156, -0.015454426947098148445, 0.042357713858054937828, 0.097316348725284551602, 0.0052640081186572720839, -0.0050867430431700277893, -0.058963722940593224497, 0.01239314631939524014, 0.049900557159985092781, 0.043026255599535281893, 0.035562415292306887027, -0.020192113930755928308, 0.00095028634658748944997, 0.027622002386662635603, 0.0053820468586939663319, -0.050497180968884017305, -0.041024391020222893134, -0.067588730417863646105}, }, }, { /* 10 deg */ { /* left */ { /* a */ -7.1010261369361740713e-05, -2.5406000913078783136e-05, 0.00026759211721569383866, -8.4826521543719497699e-05, -6.8403155187606121818e-05, 9.9131511745002002427e-05, -0.001071700570934656406, 0.001098798497419818665, -0.0016933689074365935318, 0.0027481963651477848976, -0.0036606743705400422717, 0.0042060653153788429837, -0.0062821160138389776223, 0.0076862441225774222331, 0.0058233041551466677155, 0.16799390464336699802, 0.041851271057766162298, -0.22290193556303047884, 0.10546865511928886494, -0.106571152734197927, -0.05232811055746418305, 0.26763450404808436511, -0.00068426453713908361176, 0.10572562194246151734, 0.30292254127254580887, 0.047280029708680913758, -0.26546206167345709481, -0.050352179118358361687, -0.0083467693297659146384, -0.25140273187294914781, -0.13705105321611377178}, { /* b */ 0, 0.085263325112734211775, 0.12395856358757566251, 0.21451203553535497237, 0.11368862237752869193, 0.045975440610246019746, 0.083841885720174272323, 0.10819905319188556636, 0.017486735496958213942, -0.05191158900020079181, -0.028267552250675329062, 0.051676694820251889428, 0.024780584746461171985, 0.045146936514918814543, 0.035293885693133908443, 0.023177674056059194285, 0.026807353374273618085, -0.049021533124109263613, 0.0011432617002724524552, -0.014547714109382908765, 0.058036283161763971283, 0.045635673184493387444, -0.0059891149151256751343, -0.0012376581991289520301, -0.019638054713496739395, 0.011740972931786674421, 0.0070604429584699562872, -0.017821868007230894093, -0.043622648597657895375, -0.015285888173058835571, -0.030656316135630173186}, }, { /* right */ { /* a */ -0.0011216376818203241394, 0.0014367662570877876016, -0.0025198357459085482524, 0.0025096953781399834564, -0.0032299692564715168364, 0.0035089721995293712831, -0.0040294036972093535964, 0.0036878989368056844592, -0.0019541662377772078818, 0.0022472517084747394012, -0.0005003840012913342121, 0.11928409575778700646, 0.29902193960400280659, -0.33871176061436253368, -0.029905872073465733507, 0.049693450022043894609, -0.28970435882155598506, 0.45366820402683577518, 0.09535253759394757278, 0.0024675934431721262968, 0.49110597895532337454, 0.19050822857905158614, -0.41285791290153855959, -0.18341018858515711898, 0.13888828001019423719, -0.2208057176764740559, -0.23909434820313357761, -0.060380123254846998493, -0.033071856447566480575, -0.071881204823059763331, -0.036764849742506287844}, { /* b */ 0, 0.048428266517714681216, 0.029860695413591771541, 0.23466227365818198569, 0.085941189405338319629, 0.044706680082991917535, 0.020668341355824411398, 0.080504621225128858431, -0.053243345596708929746, 0.014347828952276237002, 0.057257699183194593617, 0.10270797432433603769, 0.075890406819505484837, -0.061027205690788143, -0.022290009665058146959, 0.026499148640187108333, 0.08706458016097509689, 0.047083089686696284748, 0.019236465222853896262, -0.071824516859942622027, 0.016260258014978885843, 0.013562271183576411759, 0.05466513346106918747, 0.041512450833693780028, -0.0083719999989691172571, 0.021910246791019868939, 0.021244709892120912376, -0.0015736893779544000593, -0.057791902480916139406, -0.053290959980646299132, -0.056723042022796543726}, }, }, { /* 15 deg */ { /* left */ { /* a */ -2.3034189992013315946e-05, 0.00024731908682368210911, -0.00021574284523261577293, 0.00051389676229479305802, -0.00040052734994627293714, 0.00015362020114751537476, -9.7371630267258237708e-05, -0.00037603622009404547629, 0.0002572275934744837041, -0.0015722688641566645584, 0.0018871578089975343112, -0.0026390305604912303594, 0.0044552306132121174964, -0.0051638664595472089092, 0.0058601946919547252823, 0.0062588950906924088746, 0.15092144486019995475, 0.0099448016942541832969, -0.18453753620347421172, 0.1114543447477359811, -0.14402726113297464883, -0.024507724738784635726, 0.25757743305304819925, -0.013476042841332157296, 0.11613418986197675264, 0.25394558785192672401, -0.016719111244215333761, -0.27302452491092155107, -0.018530595274781173909, -0.055725585873423050254, -0.21319498722583413164}, { /* b */ 0, 0.22058127507023964076, 0.066638548713839174109, 0.24589498965493170046, 0.22418170335686704586, 0.066699912495684771097, 0.017692407245350268152, -0.0085239509346052289018, 0.020142743144099965746, -0.12941267987335691725, 0.051998998636554896735, 0.073490792657822143208, 0.023168188775066381885, 0.11108377267495579688, -0.084872666928730286506, -0.0042479536929002342099, -0.0070616745589371816838, 0.019184876108773011444, 0.054142940329746425121, -0.0041972999708067126184, -0.017760334508399627101, 0.00029087332720613727141, 0.0015107269032326241069, 0.045117303832109524608, 0.00061607549538982876725, -0.01586494033253469868, -0.017623046137960902968, -0.015727943013500934183, -0.027390319948145405715, 0.011098882581240697084, -0.037335305543559987873}, }, { /* right */ { /* a */ 0.0013800413829036378699, -0.0015945865447638749024, 0.001441061774076768387, -0.0018400002827411929274, 0.00081415159166025458104, -3.6541798449987185869e-06, -0.0023947168327270382249, 0.0060372912386117555394, -0.0079721892125425228293, 0.011425654544714239358, 0.061862177923783547018, 0.36620909077115043617, -0.25889177344254588053, -0.18653313956236422522, 0.16218219769577690847, -0.37467524215994219006, 0.40581752873141435645, 0.22834841562013005745, -0.06840666565317407577, 0.49400293320883370551, 0.27528320440222048271, -0.3919047384840718129, -0.31990047663825482704, 0.21386477926686497941, -0.20486652355001294668, -0.31035711367531787497, 0.023166421866086150255, -0.085451721164105515216, -0.12985289364082702734, -0.017432175610271501143, 0.035672848704699881839}, { /* b */ 0, 0.073725628815923066606, 0.015390993798134605663, 0.2124990748692205389, 0.10259839572077958381, 0.065254899181072217873, 0.030885702765035875916, 0.0059236228567302942616, -0.015551106356376763473, 0.045129370224812268009, 0.040489463356448152087, 0.1405222487957555888, 0.021308824891246722771, -0.052224936798331650367, -0.03569736412508371648, -0.0011315094965852479092, 0.10462683156774776894, 0.0707489055921939336, 0.035186628731939326165, -0.082713931987719563343, -0.013492902896563435666, 0.0074634101167011038247, 0.063222517807061034967, 0.061186927189146173012, 0.011493852096039973432, 0.0030603490119027530574, 0.011353160845064234896, -0.0052093273690718977509, -0.056452439121564002011, -0.044554455604682921543, -0.065044801859899914476}, }, }, { /* 20 deg */ { /* left */ { /* a */ -1.280464119543479537e-05, 5.0847061283666207532e-05, -0.00010881943401930269165, -9.3295295100479555105e-06, 0.00018214684718853571478, -0.00016714467226952578471, 3.8897084095323997133e-05, -8.6690768452699420998e-06, -0.00023930660994486751061, 0.00071371038218304150291, -0.0010748950257655209839, 0.0014994882018698474369, -0.0025345205104804202634, 0.0029200474736118531283, -0.0032896042424790383762, 0.0051489509612229200641, 0.008226002461003689703, 0.13635910042254784091, 0.040811705554130717211, -0.12913078637682984251, 0.08933326884147385627, -0.073730698277943429453, 0.014957473944005039712, 0.2228220708940659156, 0.013110312729186501812, 0.1325955850479260123, 0.27241754762964698333, 0.1078490562880785042, -0.050076992741537873499, 0.062667886178355280968, 0.091717117197270825457}, { /* b */ 0, -0.025158955952384043364, -0.062687203468275720653, 0.10856821347889067386, -0.031139900499438377679, -0.26394215694752753976, -0.20012513910774853976, 0.014278312291601813477, -0.074773034303560192981, -0.077797089910458527839, -0.077518931664924406455, -0.048200302791706617356, 0.013312597278228310849, -0.060823018845704290847, -0.12047847469359718175, -0.080758707132477791646, 0.014496285603640690631, 0.024176297966430060349, 0.030498046991178640042, -0.097021462282728676563, -0.072063053678794730672, -0.030360872356541279693, 0.036410577287371292954, 0.060757926768420511543, 0.0026579726669639916134, -0.046553056477285914561, -0.024262156919224731055, -0.01133193016360223293, 0.0053419247464381305543, 0.017221495934721664511, -0.017836842867227642451}, }, { /* right */ { /* a */ -0.00036599626872854673643, -0.0002460058195520581489, 0.001771055531804219263, -0.0025798946401336259049, 0.004338330896903190223, -0.0083341804897000444641, 0.012345621434499756686, -0.015540479481844504672, 0.021682746444567913002, 0.011508763580149114492, 0.37385080964059264064, -0.067135215764081365708, -0.36356326706210229105, 0.18127847719926099002, -0.35357578125112620882, 0.24597069823393058474, 0.39826579050225030532, -0.061438050383000319954, 0.42367882073686397026, 0.37232726266096677348, -0.31491476121032047075, -0.45397206381806498587, 0.22065950816309298776, -0.17315503013207861338, -0.33798287901752616103, 0.015306755417106993056, -0.14347429792658547565, -0.12428129176521134081, -0.06877797614801214876, 0.078433037183928827618, 0.054698817074467706578}, { /* b */ 0, 0.048889005590125461653, -0.016041040104873907635, 0.24226714422677714245, 0.13214897408713416338, 0.11581965776929874223, -0.026343158066582245125, -0.043469803567581372095, 0.050182432390893233487, 0.059005150016260693446, 0.11712934066232007224, 0.10913298414466296449, -0.052970566889378595254, -0.041796521766095801054, -0.085321521280405307475, 0.051627174717985155339, 0.10872628148092013112, 0.07994668585422151641, 0.016498059996527050797, -0.087325778447147950345, -0.034046925974987041208, 0.036057834351442899501, 0.047799563959215543574, 0.099378425802562272984, -0.0093373522400217665029, 0.0010294654363175760603, -0.0028328873103410090462, -0.0010957144530761298018, -0.04991883841052625892, -0.057430845556592433065, -0.065998025744829283412}, }, }, { /* 25 deg */ { /* left */ { /* a */ 5.4851695726303682787e-05, -6.9900108687348527781e-05, 0.00020257180634308816149, -6.0375831348324806962e-05, 4.7622701199179218179e-05, 4.3511237113325919312e-05, -1.8460715942027545235e-05, 8.4488357907084823311e-05, 0.00036921527953037713843, -0.00026485096144002531759, 0.00055643892715728825518, -0.0012241930933548604565, 0.0014098272716617245813, -0.0018170794729988060112, 0.0030765460808102034623, -0.002557592370458494635, 0.0040626938255239365694, 0.0062155450463591277455, 0.11813763723118875237, 0.036915229743791910799, -0.10863854615301982154, 0.071427932468587362891, -0.090269999915917886746, 0.0041725637770634281531, 0.20269035461810414045, 0.014055537838481013679, 0.12304199409125804454, 0.24661633430483886897, 0.050829375524627518068, -0.058588412423787872285, 0.026858601453252917146}, { /* b */ 0, 0.030312183511849170175, -0.095541000844981405216, 0.1892261747966222929, 0.12808694865439063104, -0.1294162586626401712, -0.23340276657783654013, 0.070083589599131967951, -0.16393473066693420304, -0.038721197898189396724, -0.0071446294807459009846, -0.078586084721193882885, 0.1042302939213007873, -0.057276855840310281209, -0.10131559666906597705, -0.068958661479864846733, 0.0053298328402118233527, 0.034128981517000944734, 0.084083984187854898806, -0.1060379653611276396, -0.056291907571809352007, -0.035088677719993799364, 0.033487980128643624056, 0.083839894129689174207, 0.0064468873873374521466, -0.040191723771829113154, -0.021859064198159749992, -0.0074521605177013672261, 0.0068960510733739877054, 0.020068191506558696879, -0.032594931639526314449}, }, { /* right */ { /* a */ -0.0021078233190400252894, 0.0033911920282320151543, -0.0050816297403333265947, 0.0070429241880685944377, -0.010690185705680699257, 0.013587756297721298449, -0.015591114736097921867, 0.020843633502798386559, -0.012948727955118533028, 0.29853930777651016548, 0.16678964803161847041, -0.46891720194919617182, 0.10671347466639086177, -0.19485400919129133857, 0.020296222080044834524, 0.50175032885310333342, -0.062426652745247585008, 0.35287342243971148159, 0.46181252928104832289, -0.21215736966683634845, -0.39772241165672927998, 0.11779767228724952188, -0.11684806370437089695, -0.34157516678375399177, -0.12471035998072588225, -0.083290919299407184528, -0.03285571473570295109, -0.18135912101915549477, 0.17043289762173896573, 0.094838956789539824443, -0.1597664824630647129}, { /* b */ 0, 0.073618220206590062604, -0.0022034661454478632336, 0.18948155049250750559, 0.10488342872512837478, 0.1018566136577053749, -0.031429803589201610325, -0.036141501734993780603, 0.06141191135917295485, 0.13766930493647536182, 0.064430777704134467587, -0.04979451200932960564, 0.025701316421090220077, -0.059124346167005459307, -0.02257216690736835174, 0.16212608510750292634, 0.036696102518347234467, 0.055920596136981026714, -0.041643049307846922991, -0.096430747652202081222, 0.041209812920335597841, 0.037813250066461717713, 0.098343702773055763355, 0.048742335630406335989, -0.045791237814445107102, 0.023916124844060998589, 0.0008038992096136357568, 0.019401014685008904914, -0.063873397769254047773, -0.070877111835333100887, -0.048087413353891522716}, }, }, { /* 30 deg */ { /* left */ { /* a */ -5.5564638593561861978e-06, 9.3852107960201930706e-05, -3.1084894380750682785e-06, 0.00028840725196932481822, 6.4946293412693228324e-05, 0.000155365044510191757, 5.7003061507132635199e-05, 2.4933508036006904319e-06, -0.00013672519873220156938, 0.00028540432156498596328, -0.0003096984341893760373, 0.00059548038278123185257, -0.00076294144120414401911, 0.0011346642860010636156, -0.0015290288656044648263, 0.0025263433554162384453, -0.0018363250559039192775, 0.003292358995918287512, 0.0044893145683538842466, 0.099393432492281275081, 0.044378238408873671439, -0.099042449494685103062, 0.046096231459888392656, -0.069686141489361252965, -0.0044478077054072029384, 0.18077959408453747603, 0.026777358766022496539, 0.09446026603660007126, 0.20126013716523227792, 0.055686081012890069342, -0.061474581435280728492}, { /* b */ 0, 0.025180167786686968867, -0.040991063065334842896, 0.26971809175449501517, 0.19181840837760588681, -0.15250762307253418193, -0.24123727501546010643, 0.037160259659663186227, -0.11575978546930765223, -0.0019633931924722958229, -0.0063613286760411114074, -0.080834549709765668446, 0.10457219077671109364, -0.041267150275581254704, -0.073405901137024720526, -0.038209215752968428426, -0.008657436421921627101, 0.04235425265723680166, 0.058400869357641549406, -0.092083706177692459249, -0.024897575410173788946, -0.015314459922213807808, 0.025318966408588439165, 0.066904667133937945067, -0.017951122045153925649, -0.019282834278142035878, 0.012661929285409656565, -0.0046187674564157621404, -0.00082718411884008524737, -0.012980776141549577041, -0.049460302773279840594}, }, { /* right */ { /* a */ 0.0033885300294439271718, -0.0048613774544705584679, 0.005302865794605711447, -0.0070892003638982695191, 0.0070361738768297960034, -0.0063941087232333854162, 0.0081928188122495221313, -0.0089060004377240070683, 0.17020867472563366851, 0.35789768856113390871, -0.39521414506180546633, -0.12407235017989748371, -0.0089740119029986867294, -0.14021003585508545752, 0.50678090343772674853, 0.01377337314436687804, 0.17528644143745444883, 0.56933646082806399491, -0.072240746769574454289, -0.35931102012550142355, 0.013416561081202801886, -0.033982538129653794279, -0.36652241223536613512, -0.19744384675815446206, -0.091076149317218135781, -0.10323197357604668722, -0.054589396278610473334, 0.14291346832079576679, 0.044643159462969331241, -0.11546406559509028722, -0.012902913224164223871}, { /* b */ 0, 0.10605423311031529632, 0.014864888313219706828, 0.15043223924465926045, 0.11450889378892231685, 0.041507161879618739708, -0.03674693254257770797, 0.040977443315154751802, 0.10157898434947321142, 0.15279684507974583552, -0.061822560485326125135, 0.004772237741598212013, -0.016819258489976333937, -0.066786210621604474857, 0.1081005394898459232, 0.093086116443072242088, 0.048463595010632236348, -0.0058250974846723452272, -0.081800519183662989686, -0.032885530861031207761, 0.052918311400137335587, 0.073362721889048077006, 0.065072441811087039509, 0.0058499565193945515795, -0.029018687889527036705, 0.034235417789990618687, 0.014857609548302522229, -0.011971843220984736827, -0.076724286436182287385, -0.040299204163377760901, -0.048631300045695255441}, }, }, { /* 35 deg */ { /* left */ { /* a */ 2.2246319549504983693e-05, -1.7981306166259231711e-05, 0.00013168464332857961196, 9.9034379204276934416e-05, 0.0003615243665544558456, 0.00041192910880949624997, 0.00055513530303891254342, 0.0004627765871206843476, 0.00030127446919159267145, -8.1061927205416939302e-05, 0.00023778236973165040101, -0.00033298576951335152885, 0.00084825840306751616737, -0.00069129572830007104955, 0.001420559255088660322, -0.0012973704223082083153, 0.0019848520281529093146, -0.0013496792289693941222, 0.0019496759876003223744, 0.0035721438084931889101, 0.079964526305924266136, 0.060786211180906268847, -0.072227985409185901933, 0.033541081923930959885, -0.047731446357855700224, -0.020688550877619171775, 0.15226630594781381811, 0.031397312903122531758, 0.092806103290377084392, 0.19568936619800136878, 0.096992123180227041157}, { /* b */ 0, -0.056091597445684371337, -0.12532019980467795639, 0.21619816714720657691, 0.24292246036838882617, -0.18441540976129461304, -0.16877038135500177507, 0.046285230921004616444, -0.12996636591072752154, 0.0011975693127094788615, -0.086536047550177241927, -0.082626417097879378826, 0.12612621449737543289, -0.0067070476921643473744, -0.031313081347780769015, -0.054627413082521114607, -0.050072452026928004898, 0.043095265048753716997, 0.061391567137795977072, -0.031588886056574394523, -0.015918232628454875854, -0.039366355925538054628, -0.015517509680679220097, 0.059049611165241933097, 0.0093687542665824019572, 0.030141503283322157447, 0.0095184589911020967001, -0.023527488786957706512, -0.040401343824290891771, -0.038667213391636867659, -0.059674745198669276736}, }, { /* right */ { /* a */ -0.0013714152522657646616, 0.0006273793896546808746, 0.00043122457778210776524, -0.0021922389323563579167, 0.0055708395088355927571, -0.0075242460363320051719, 0.010591462743974114358, 0.048398020978598910169, 0.41619284829983088647, -0.14382476555407414098, -0.35882374610701062156, 0.039668989509555538375, -0.1620882671571429734, 0.38019200426458643616, 0.14583130894703361102, 0.06383703585639832756, 0.5445344840782336826, 0.12599765399910417552, -0.28518956246040627622, -0.11700115479775820282, 0.0039966079479203386882, -0.38531175783483723185, -0.22423262908750918321, -0.10515959452829688747, -0.1399597004266011635, 0.043707663783861684659, 0.04139732538284597585, 0.015522465146040196476, -0.052820550344454333946, 0.0032102282042194285605, 0.015984710792678324953}, { /* b */ 0, 0.13427337041599388123, 0.0048139154348175727804, 0.1572444113827342338, 0.10908352866460453712, 0.025770956456642665766, -0.0050018096122567134998, 0.055807560734215735931, 0.21187737349172824919, 0.011038836686726512248, -0.080848400150794128005, 0.042421610143179855346, -0.075470694051683537285, 0.066863221023921726172, 0.13083208495369075264, 0.033121454529102395403, -0.050277280289135257985, -0.039128620222435295251, -0.012052262736315584243, 0.010345718716008728277, 0.087596569448757793941, 0.022997773874034593833, -0.025031434367365004712, 0.052202915093862989337, -0.0089830303802527350365, 0.068664492264150847611, -0.028446270625478303762, -0.049388113445691245174, -0.0848237667824044278, -0.0093243400765309625289, -0.022253412473574249453}, }, }, { /* 40 deg */ { /* left */ { /* a */ 2.1793835894011746233e-06, -0.00027154751197633331117, 0.0005671281328931141244, 9.0822337706075701542e-05, 0.00099206136663226862638, 0.00073251131878920849871, 0.00067401960485158330088, 0.0010339520481461583756, 0.001261491156673288927, 0.00081585154267788454179, 0.0013721862622898001877, 0.00056652749939184432991, 0.00017514670911517038476, 0.0018149465347977447247, -0.0009629098705887795262, 0.0021172863388929652473, -0.0012859543649379467922, 0.0012650418609871942523, -0.00080761000567641804977, 0.002045207774387101593, 0.00012780165967174808572, 0.059086023985258084856, 0.044267535707145921897, -0.085465943991669401925, 0.052769026021581844077, -0.039779355975461117012, -0.042237528407387814333, 0.1643077306221277234, -0.02446083998811077187, 0.061938320602659968639, 0.16384587098797892546}, { /* b */ 0, 0.33422749822261538233, -0.11487095431066823847, 0.16644427691021174143, 0.38071775606933477842, -0.39012462081940146863, -0.053576722369511053934, 0.068011811522050713563, -0.22451887863150776781, 0.19746958958965360464, -0.065277732785341824329, -0.017461553695752307647, 0.089348993440457880055, -0.075603194818196772786, -0.019483190216752765966, 0.046489056814216778157, 0.014291576027163077622, 0.030426427107856091059, 0.019112163865651898842, -0.091943596894211720993, 0.00084339433090163673512, 0.025779716876124514346, 0.02709668019695160579, 0.04270873769130628661, -0.04509487662892469606, -0.037299422899345069382, 0.0029375173199799875512, -0.0014709831565318243207, -0.033163954348824908891, -0.029644025426878162222, -0.082647976311391035953}, }, { /* right */ { /* a */ -0.0039789246353439718801, 0.006133535092132241795, -0.009010367649220363262, 0.012938576527919687376, -0.01631979618553144884, 0.02221570561540889277, -0.017115080265671555465, 0.32623476405816531631, 0.17063411234871997402, -0.45850444292681674652, -0.044599086886291765264, -0.072363693609748216962, 0.1893440694816350689, 0.21226201381446715977, -0.0040666736535709159528, 0.54388239423168593945, 0.29842581082375013724, -0.23242339948278389894, -0.14737358160892799486, 0.032063708780309327362, -0.34195980604076975373, -0.26555148095350827875, -0.14613400600363329884, -0.18983946477948737686, 0.074588566864848854232, -0.024440181328726912069, -0.019429265748025642546, -0.0080576389074145035596, 0.074790705429606918475, 0.019974100701055860774, -0.067154806391257426679}, { /* b */ 0, 0.16460431381272111473, 0.0027972040284951842602, 0.10698578598074351409, 0.04041523264294942519, 0.087410249710898862974, 0.028702626391889109886, 0.10146221100793439973, 0.18156553983888379378, -0.071713879295784793699, -0.039211217036441703421, 0.030793778252199113105, -0.01910649119353687031, 0.053438277835419004114, 0.12370544227754264044, 0.0047416582382763319825, -0.10684133284608565706, 0.037659786684316430561, 0.0088382827167620553466, 0.043525054958149130002, 0.044306391668120712057, -0.049406157896095606596, 0.010671084977429030893, 0.067328644708557622289, 0.030307410623826858131, 0.044862049177331157768, -0.085971974419243063492, -0.028695458295538260607, -0.08142448996261655858, 0.026977203326033163955, -0.035164209142325708601}, }, }, { /* 45 deg */ { /* left */ { /* a */ 0.00016150711548268382404, -0.0019440537467503571367, 0.00060534014269947300762, 0.0029997960951551327913, 0.0017473438424821241544, -0.0034913008790417314649, -0.0013297336088485822714, 0.0029546740437647045496, 0.0017854343836894155488, -0.0023195419721240544825, 0.0038098928129871867387, 0.005714340667335032764, -0.0043362884876059493156, -0.0076623794658531325236, 0.0071344829064012849074, 0.0085652865194213445577, -0.0065424164318386712758, -0.0076128530448159315025, 0.011673780507467923506, 0.0042333848121640909462, -0.016075536998505498415, -0.00062319470183272093755, 0.067045896686504513617, 0.05542911650422560621, -0.11456365746859847876, -0.017773627792316837315, 0.043664478116614557912, -0.026494992388624571955, 0.071614826367208395119, 0.069981694853296638748, 0.05410009876933435935}, { /* b */ 0, 0.32113328027076204485, 0.29373423297325218506, 0.38933482938681784891, -0.090586007813944074973, -0.21987920577531960831, -0.057359431636112151454, -0.22344633226157803452, -0.12363438135674920115, 0.33827945463841063711, 0.23367396812070881373, -0.20292402709079504497, -0.13842849880823723807, 0.11751149999315868566, 0.081481066321800049712, -0.12070609368596690869, -0.037213914143678639146, 0.13644485314354831695, 0.031379917151685976506, -0.14910167035159932469, 0.037218743909137735892, 0.12517705391255906644, -0.059856545310699865725, -0.055103064822512731746, 0.00172123115449798747, 0.0095876042228992819361, -0.05475981256181788881, -0.045525117256077496375, 0.045296337271901604415, 0.042633212967158051754, -0.11473134600864867694}, }, { /* right */ { /* a */ 0.004417449235734144386, -0.00620600649388087372, 0.0063726741346805185207, -0.0066460159533262442438, 0.0072749496685510887939, -0.010562132644713340124, 0.1412531184820029484, 0.41189149595716445518, -0.29560082071015386651, -0.31284630781385347476, 0.013791284580906559842, 0.073780292975883843276, 0.27143177757182124221, -0.049788461825507793201, 0.43780067747246809162, 0.52900554641297115044, -0.18903325950267421685, -0.18045978026173392639, 0.053681675569795278546, -0.20352403802022145385, -0.27235779954244454526, -0.19356389785279901061, -0.28417610303460733023, 0.025695652746474118011, -0.026884398969355405296, -0.055587273835120548648, 0.07687468227252683417, 0.063709559864257719886, 0.046913219828460112071, -0.10119045335950105358, -0.073455519061875987341}, { /* b */ 0, 0.12523694267447316175, 0.030106660207185158284, 0.091163028595100129015, 0.010834765787190100972, 0.071592206550095252582, 0.058714390304081230665, 0.12465362164220200603, 0.090861745203670657434, -0.003444280655042625261, -0.03959819336804993456, 0.020380346085020425301, -0.01277437795050694741, 0.0098684267116778273676, 0.095808865982682456242, 0.010206453529616223153, -0.027353704550592272682, 0.051750464218872256617, 0.0434786225811953711, 0.015354926024562126283, -0.010280446025986642034, -0.043444088830705065996, 0.03676543185066136199, 0.077987256491148446158, 0.029809860226468615219, 0.0077312126460418045815, -0.082362130505542030523, -0.018751972524978961776, -0.052424431011004364589, 0.010904743472919462, -0.038141478777217741047}, }, }, { /* 50 deg */ { /* left */ { /* a */ -7.0597622706974894058e-05, -0.0014187129521170413829, -0.0041973382672311210229, -0.0058731709218912131476, -0.0051930623767848516081, -0.0029746939450570053509, 0.00074269907814061798465, 0.0068509220603474299191, 0.008540351205538199153, 0.0052652735571534492465, 0.0044591066482302394586, 0.011150738290360839855, 0.012062318974492836077, 0.0022383464427094819198, -0.005308597948033844105, -0.0029183510540098378527, -0.0091992071743485243768, -0.021803415056753649992, -0.017754068490916097289, -0.0019571380532878990266, -0.0032260693465929746182, -0.012139060934640566458, 0.0086345886406852256911, 0.066564554163928146835, 0.09702719796146619391, -0.034108301861165979396, -0.013453636385357681249, 0.051139938249747385335, -0.037622455357141926235, 0.037629351289369949995, 0.053611444630619065066}, { /* b */ 0, 0.13449444518795483638, 0.16598922760596712678, 0.28643099415512351946, 0.061039639002585799332, -0.14318519554738784461, 0.030355409185375825665, 0.018292234915534555384, -0.010792444827129044072, 0.29406308138177350564, 0.16978117316310270546, -0.19761376468752089863, -0.14479296715406986262, 0.028158686575310842848, -0.014840610429028844308, -0.13835806041959108903, -0.12487480125847327805, 0.060761864553032784997, 0.078122467536342887762, -0.071426222519668791655, 0.059574263595527081339, 0.1423682842825041428, 0.024943297676841003074, -0.0088567426092395207249, 0.047857365474066049238, 0.064262716563054378405, -0.0040174613885612941999, -0.10083010619624244164, -0.1174901659180965785, -0.035432070135468785033, -0.10903701903458573597}, }, { /* right */ { /* a */ 0.0035403829431335867572, -0.0063994790363381941906, 0.0094807609668512426992, -0.01338496440375386981, 0.017607435620764499973, -0.00054243706903381967363, 0.38819394139654789244, 0.11542622008901651243, -0.50122674108308362673, -0.063632383809830370125, 0.037142079636945900256, 0.21196427083662505719, 0.047035520659341988059, 0.19612761644393400529, 0.7247137348377837851, 8.1468708675903889205e-05, -0.25420295892867450505, 0.06339404868670878157, -0.12628198942908777647, -0.25323361607423072739, -0.22324934898687293083, -0.30038007421886431247, -0.061813695789816359982, -0.022059680251655836708, -0.1396998528962117847, 0.049196289436822214503, 0.069781770804478920889, 0.0099113580072232934648, -0.10035101637286514276, -0.022883120806838075367, 0.045852482443127853817}, { /* b */ 0, 0.10359200124467059234, 0.0052610111223993366592, 0.068536565964016221697, 0.036899271175761486075, 0.054564604864992288791, 0.099686898476871774188, 0.12172863702120204077, 0.041674938768762603836, 0.069604512032048732051, -0.059011297680986070369, 0.051313382834683098077, -0.023223897932292923707, 0.02582365530437620571, 0.13896725418573549482, -0.036231211028676588159, -0.015840360248773124874, 0.050522971645401183738, 0.033836980910442043813, -0.002528124984245084389, -0.0011833207609092404218, -0.028868936378292221756, 0.053324252075556168029, 0.04659001444153997723, 0.013013853236939522395, -0.043392750016090636533, -0.042388805764409162591, -0.016981208463182597551, -0.037989579387181005021, -0.004257499909570035268, -0.024568667484287445846}, }, }, { /* 55 deg */ { /* left */ { /* a */ 1.1578368860037852297e-05, -0.00011816999108404946384, 0.00087640537979605248609, -0.0020280251725873776891, -0.0021068047360156549885, 0.00027187084084001611473, 0.0031304327319237042031, 0.00089292948111940884104, 0.00045933324546720832871, 0.0051687820153134556023, 0.0065643674857646105991, -0.00055561873747722589911, -0.0032679994507733844955, 0.0015441048749342829293, -0.0029191626319674530803, -0.014514898701023515315, -0.012984473763688608727, -0.0046561391591620759911, -0.0083716584381443581719, -0.01356103312845358122, 0.0018988103912126463868, 0.020432107407306054903, 0.012447960186859341469, 0.013390889061007382743, 0.050401262412999581208, 0.1024391092795812197, 0.0076396060180033975584, -0.011690786411236442355, 0.05990382429044149859, -0.036577009552216099841, -0.021380778457980031959}, { /* b */ 0, 0.10623619191692246222, -0.0067788270131929895257, 0.18852906559209403614, -0.049206343541163821698, -0.01126637043082079348, 0.24317483738434120255, 0.096263757482575873503, 0.05760214667596685878, 0.33866109073667216567, 0.2547586839746901477, -0.059317376256765030895, -0.013459832727269471775, 0.075663009614992948748, -0.035307654850449954331, -0.1798777472163115565, -0.15813077589243995646, -0.049518167965986736867, -0.14129805415867557894, -0.2164595138297309429, -0.022427379978498529489, 0.031400080641869054787, -0.061226279240850223218, 0.010520714239237172194, 0.1198982523673702838, 0.092899746554145345989, 0.025864164006697554221, 0.010682328837122168075, 0.035779475401134797075, 0.023278286305425388569, -0.11316441404674026927}, }, { /* right */ { /* a */ -0.0048765805688135432927, 0.0053151709295158611202, -0.0056105185624460915395, 0.0058353469265925300702, -0.0095124904947408925326, 0.1474736271262454268, 0.45015598574916032559, -0.31617058194011959937, -0.37500561058249115565, 0.1024040461535024038, 0.09880224296723426336, 0.13507025371908992772, -0.0076921438847904824443, 0.70384742117252319105, 0.39354022432035029588, -0.35987631054416541199, -0.016295617248206911709, 0.0037069899110325136952, -0.18230754888878106246, -0.25574618730660003685, -0.22473349359278305126, -0.086128208326026980957, -0.066843673532245156954, -0.2811472454940759369, -0.071489158758016368989, 0.12593590396064910375, -0.084427226536140737023, -0.075750225784808708496, 0.078348230738386523409, 0.075996002542261575918, -0.0088596280720283637766}, { /* b */ 0, 0.10992763307071229395, -0.031950991955910876263, 0.067764336110112510791, 0.011642549958236145247, 0.065471901287065897845, 0.1673034870980578126, 0.028095206047705489905, 0.027267773057104531531, 0.084579867348890197531, 0.0099220485684850534547, 0.088989181038956643999, -0.021794892683911493148, 0.11813758800985002528, 0.054176192981242488056, -0.10363299382656462888, -0.018662590133854996266, 0.070475304695992779802, 0.051096625691584955653, -0.027165719683553204988, 0.048772571120754747154, -0.0011836521868419450088, 0.026143533279308905914, 0.010018324394546467004, -0.027326001794422516422, -0.054777896142175867833, -0.013206742436717121281, -0.0049659044408859077946, -0.041443238983922443819, -0.01206157172231516958, -0.0033435101275689320388}, }, }, { /* 60 deg */ { /* left */ { /* a */ -7.7511870492402576904e-05, 0.0016441118738663718091, -0.0014490512186687842799, 0.0013291594554154519906, -0.0033660169662663719237, -0.0035405112611824867547, -0.0018534540596054638328, 0.0026523822617419146042, 0.0035696953020608597311, 0.0010309818936765626982, 0.0015555973072872710753, 0.0069861562371903440649, 0.005884164429037497257, 0.0020504561617368248679, 0.0051656079144007938098, 0.0018480741443421826349, -0.0098740636215316479607, -0.015193873352109532604, -0.010129356530011455681, -0.011786926255030749644, -0.017737538763468174707, -0.013045360977154141224, 0.007715513063652479353, 0.0077814785513774520354, 0.0056104852005217642485, 0.032549948194363076404, 0.095042192724825724781, 0.041711508438485589423, -0.0079170798496924765786, 0.06418245741109107616, -0.014766641064020702423}, { /* b */ 0, 0.13754721824368876248, -0.063493641654088772697, 0.22830296737448574351, -0.06090628577308521141, -0.046004693137549623749, 0.21580730819120708119, 0.12307782917671261647, 0.089740574449950760716, 0.32648577436567016719, 0.24035205934268277783, -0.072543872172078915916, -0.012821880001484542433, 0.061865137137434578207, -0.05044571494396132838, -0.20687345392352007867, -0.19352544602058152634, -0.081534524324355928115, -0.11527908326446067999, -0.19205089159229915552, -0.014435573776200305574, 0.091578567882680261825, -0.016821578118150770642, 0.022722319119941603027, 0.083369554422021985296, 0.059078833427872456951, 0.062862807790400876407, 0.050723340750263856691, 0.021365973798814774653, 0.0016529181815633231523, -0.15764243352166251722}, }, { /* right */ { /* a */ -0.0082355372166692739078, 0.011221317614100445592, -0.015398602139821311596, 0.019928042385439565659, -0.016098624365389231639, 0.35687158954924280696, 0.25056043621692913881, -0.58374093063797949377, -0.096587696990415444764, 0.1417547393039359227, 0.12297834557525599841, 0.022570043259149269455, 0.33375919715316915148, 0.760382535490139011, -0.16254361373105752353, -0.19917812853966368469, 0.070067615832109297891, -0.10829091532814275056, -0.18484059920915038577, -0.1432702217603286643, -0.12124479647419947326, -0.15236845595713283119, -0.18674136242612379699, -0.25923778948833559044, 0.0083936426743206477008, -0.099921477749484607922, -0.11575635007653031772, 0.11489835825258340463, 0.05190968921625193494, 0.041271947034530499787, 0.031437997309678028524}, { /* b */ 0, 0.10868828192197363403, -0.074118270899444116395, 0.090777214578766446396, -0.013578916722286824004, 0.070883676521874855458, 0.11959741347631475117, -0.01478983329482146114, 0.072627013198334366972, 0.061154270063062954321, 0.053538843911089990801, 0.10606045726597232437, 0.084565973879056371976, 0.12939459925111462812, -0.071073677257657563722, -0.045887381062256933639, -0.032179006816211025432, 0.040614594623645042248, 0.051338232550410083099, -0.0046888299313390183198, 0.08651005715390544526, -0.012422527402296091453, 0.036899877754051693679, -0.022144609442510329589, -0.063400842038184745952, -0.026440060318911294546, -0.023673563205560410605, 0.0010511162089202694819, -0.047472031235924229409, -0.0013554914729107421512, -0.0048621235097193868033}, }, }, { /* 65 deg */ { /* left */ { /* a */ 0.00021209643066757990983, -0.00031257144469942722484, 0.0016441805216621534387, -0.00081058611586804288351, -4.3648113456917552941e-05, -0.0012284241081988998053, -0.0013372660613575335694, -0.0012448771791878643356, 0.0011663351290325252307, 0.0042197117786080262647, 0.0023254717276821601502, 0.00025887355412090818849, 0.0052097013800850300314, 0.0068133846221896101833, 0.0012296601063083159242, -0.0012431805547497014504, -8.8048805399475269656e-05, -0.0038129513141305082513, -0.013960404317975294575, -0.014560488715287256412, -0.010102471322895321612, -0.012002486002929415101, -0.016113745186924210984, 0.0018967118588925058718, 0.013449767355400155111, 0.012584539113361103979, 0.020867824729736694778, 0.073836201193860917513, 0.067122965072344276116, -0.0018477671601818679292, 0.05223682330510182048}, { /* b */ 0, 0.13309668338776226015, -0.034796214140597747644, 0.20259809733892686356, -0.074229467116257441539, -0.033589853999302365928, 0.17194460518329957033, 0.14053069634131776233, 0.10398223014011775955, 0.28622058494381930061, 0.25553069116036886133, -0.033340385994645727052, 0.0493901404229751817, 0.065507437268241819339, -0.14259732883797893166, -0.22103298760553502511, -0.14786809695042923973, -0.12633674696810315297, -0.12873024948879818741, -0.1027909150680406114, 0.0014565313397746360025, 0.023432772310455485254, -0.066093717438972521272, 0.043814867214386765681, 0.11896612672430972868, 0.044357594944782752222, 0.040347747146118884132, 0.077413706726509046163, 0.040768513366040703971, -0.045448434075889831973, -0.11511235099577465935}, }, { /* right */ { /* a */ -0.0043138529817596110716, 0.0075413039075933347571, -0.011521651041039235319, 0.013325571083565648789, 0.041007771396277606368, 0.5053361523397409405, -0.094698397193346620093, -0.61958974147486567396, 0.13570958419739470591, 0.14441422292394201499, 0.085033815695051417904, 0.092603593314331822395, 0.6701887476182314396, 0.36261635455576279874, -0.3621843326644283434, 0.0042299442428242461922, -0.002366041054087388365, -0.12368382816733622387, -0.088272849346890044919, -0.049419563996561458041, -0.2125426294795428328, -0.1586871870165506293, -0.190927188977616763, -0.17006683683656526052, -0.060741253294065850055, -0.19496219647700138711, 0.036515091593278953264, 0.06314691771158037481, -0.015262096579524153661, 0.048691056102282553875, 0.021226484220801533631}, { /* b */ 0, 0.089542514489504565489, -0.058716409615418296841, 0.10736888709090598726, -0.02331315160544743248, 0.091213288884433446624, 0.017298834005556238541, -0.016589287472655936395, 0.079801817869399827021, 0.035479049186560793205, 0.068019632837512306045, 0.11886793181633235894, 0.13836077542754027236, 0.070163159715686679307, -0.079640800716906573475, -0.0062391578820996523858, -0.024478254830942465514, 0.038586029342448785462, 0.042690244877749763952, 0.0082479014534321548613, 0.096996213193910676975, -0.013540957110730333923, 0.043726799693584783579, -0.050859473091123888477, -0.051383908254952481709, -0.018315577251619419297, -0.026445801315291839195, -0.0068531948455192986253, -0.042271390394759897347, 0.0064541724220136438561, -0.012350604079308658001}, }, }, { /* 70 deg */ { /* left */ { /* a */ -5.1811224841032703294e-07, 0.0001195077510562910048, 0.00054565132884265522481, 0.00036921285875846077389, 0.00033238357281806241161, 0.0012172851626690581531, 0.00026386278322021471977, 0.00076749530397712774007, 0.0027338096357520935697, 0.0016283443813464026917, -0.00062622425994751651501, 0.00012757274674146668048, -0.0011569955119666852639, -0.0045294448897115202612, -0.0047029865648390289934, -0.0036212338211383254816, -0.0092852833147305524619, -0.014348328680399702328, -0.0074853254233148147634, -0.0050769693650531966256, -0.0098573400794665921865, -0.0040309461902393595167, 0.010067145221129281119, 0.004994392654444901325, 0.0063956208098958633457, 0.026055905177485572111, 0.030774492283322522207, 0.020200953112017860924, 0.051526075933797099715, 0.081379623049979143978, 0.0023131432713013877489}, { /* b */ 0, 0.10894635247324369054, 0.08226281338868934867, 0.13188409788832122782, -0.10259859632821832776, -0.036453212321138628305, 0.053734255601595171115, -0.0047133499977286552607, 0.12938685340448119465, 0.34471458269645649519, 0.23193048383982062255, 0.031865410002815397483, 0.15000719272233176138, 0.11166707115740914791, -0.12525365639212693303, -0.12533914392043321584, -0.013940020445260548065, -0.076263219169064866421, -0.13523188830209809108, -0.12570995087821112968, -0.12364896750882703458, -0.11644943785832362337, -0.057756822422969089637, 0.02441554646979982035, 0.0003564445640730218301, -0.021530279351658632159, 0.034706834490041971186, 0.056194495670694455391, 0.033570314935671419221, 0.042081857466388927769, 0.021545695715191603981}, }, { /* right */ { /* a */ 0.0035836200210229286582, -0.0031072734051323207261, 0.0019421304212324103089, -0.0058643234854055224792, 0.15128443576764849521, 0.52834049315792519508, -0.43710112538159973106, -0.47925878830830015431, 0.29492476075622842124, 0.11155941490950406492, 0.042356073563245243141, 0.29913230770566656691, 0.71528723603458332914, -0.047873961502792675149, -0.27559532028674138537, 0.072072004801736505586, -0.052072379004377590539, -0.039855623428972607181, 0.015994912410223841026, -0.16099078872106220572, -0.2483811542539591799, -0.061804120649365870688, -0.23081587273945508576, -0.14671726044973676384, -0.13359308987310225536, -0.11866357264318513898, 0.057726807929955707699, -0.052300350854971928982, 0.0070598896143025946515, 0.040982578067495951946, 0.010737637321303616922}, { /* b */ 0, 0.085990202435275248094, -0.045241177450963329654, 0.10617869357694004195, -0.027274277623547289739, 0.081604490424743256205, -0.044586295972629322315, -3.5857159416154138487e-05, 0.065533207614784261263, 0.013976222370463801947, 0.081284503898977275571, 0.15219632615988584745, 0.14536894803318561875, -0.0047486841226037877772, -0.028328518717180534159, 0.012226862885177103291, -0.023973643258740594264, 0.052947342934830943229, 0.027989269883246792325, 0.019243641513648143682, 0.081454590263969284258, -0.00708365997103155981, 0.048979713260849030987, -0.060966803987036639889, -0.028789221111322378654, -0.032056881092154890234, -0.013506612710420529133, -0.019305102195920839647, -0.036637922409973010252, 0.0051001653031878674271, -0.012499719609549049537}, }, }, { /* 75 deg */ { /* left */ { /* a */ -6.5923442983146108426e-05, 0.0011271001093549047091, 0.00025601249190043554645, 0.0018847194721560711628, 5.0876901303009702815e-06, 0.00012011933336886215784, 0.00083171514300706128608, 0.00052309243540882353722, 0.0011673413852220091477, 0.0026861263670296948829, 0.0010904448629472929255, -0.0025833300498073752394, -0.0036355509377972161644, -0.0054094004553473240549, -0.0060745633297804024764, -0.005798110979324255787, -0.0058363766689689677847, -0.0064945304305980000592, -0.0096925802501451885362, -0.0107794127797433692, -0.0055240783044391283951, -0.00062055389930815163524, 0.00099273240065922419006, 0.011862141140531190509, 0.012128941204794796427, 0.007469531601092538331, 0.019089850497380767003, 0.027868375799752764799, 0.02564535563215342151, 0.040200335544512966202, 0.075140591824576774549}, { /* b */ 0, 0.16821546891768179854, 0.052070955596089651962, 0.15059408780382366189, -0.034484929464922986497, -0.09681834645926257199, 0.038993096989556330634, 0.025165602614909965418, 0.068217434327291756602, 0.28588626697426122725, 0.25322530989441149885, 0.023257670143314590483, 0.084631528479706119583, 0.087623863125815826258, -0.063289424224385881779, -0.04111210934180931087, 0.0062099315267100108073, -0.086630674442783606182, -0.14520617328789287015, -0.11845477998956299714, -0.09507741318859341817, -0.067074376130724089329, -0.049297931923528159892, -0.032629951249585342765, -0.032322618598035202098, -0.028774768976724818259, 0.0050862628908632245839, 0.030059867262149930767, 0.03619620949003865551, 0.040048636948536442404, 0.074784483329731754608}, }, { /* right */ { /* a */ 0.011019275525695253204, -0.013849992827126740569, 0.016917266614222860321, -0.024593574280674067312, 0.2755979158975589427, 0.45173428558416955925, -0.65405270132110782111, -0.27540548350881166595, 0.32271395364772170744, 0.050144850607296634348, 0.097796546761367855738, 0.52489190531289731112, 0.53222901585795523438, -0.28672062269614356778, -0.099921138514967006161, 0.074086470897411355052, -0.054510924206991988317, 0.037202647828410775888, 0.01654229015551119536, -0.26427705887042252098, -0.17851612488609874818, -0.087535243016548386352, -0.25308108532219603104, -0.11270654329725227072, -0.19911311611538287658, -0.087208381822291847207, 0.041575970333826602066, -0.046835263936002749507, -0.0031789718109168432769, 0.017733383501500332713, 0.022284914124549512482}, { /* b */ 0, 0.063654984772485573297, -0.072258235141275717339, 0.11143147791531111956, 0.0087840137916747988711, 0.064463015400774259511, -0.11346145969663629094, 0.02100129439068075532, 0.064648989334362388925, 0.038270361198741026376, 0.071675930769700912926, 0.15879780912824276173, 0.14156427256304554563, 0.0029008342249592002776, 0.013453795811311022868, -0.031978426252195213397, -0.0047055545557023736869, 0.057295800200696245241, 0.019880527866045910601, 0.023882626203728003766, 0.0816614286701679154, -0.011451559711870597236, 0.036329458605499818924, -0.041088532580567209418, -0.023652412022372691636, -0.026671112082336280447, -0.024258466376539916665, -0.018453252246660931113, -0.03518859123466042127, 2.2642044285488299076e-05, -0.017197498276247558113}, }, }, { /* 80 deg */ { /* left */ { /* a */ 1.7418901153948339409e-05, 0.0024829349213467679855, 0.00080662799356590042521, -0.0040748995594475090343, -0.0043772687331744553063, -0.0045817695894234677922, -0.0026921600358026384972, 0.0020317311486689479741, 0.0021593746597770016246, 0.00066712085501630102868, -9.5710687916805595003e-05, -0.0060753720715345238546, -0.015743200903750587116, -0.01434605846804826168, -0.0073507314333337570034, -0.0062768288260767191034, -0.00052040153811216960378, 0.0089624149056388713319, 0.0087255307387040792477, 0.0041380932427198535706, 0.0025873059441433587935, -0.00056427236265477176674, -0.00042937015477806351159, 0.0051603085642754065177, 0.013367090647350976518, 0.026507895717620133524, 0.03763876907939001093, 0.037489388889297425855, 0.028338574035793876599, 0.023157443746341099811, 0.018735089226257217732}, { /* b */ 0, 0.14534882996838915936, 0.14803175382258060289, 0.094844719201528371322, 0.067106074548503591437, 0.0076561274135744650238, -0.045065770755345346821, -0.048916309039123695435, -0.065139716880976972213, -0.040503460437060767596, 0.061896597042185308446, 0.14430131906391363561, 0.12502812778689142981, 0.13307255907833714925, 0.15846438120380168524, 0.072443959380358302624, -0.022362089126953810236, -0.045059346560211155364, -0.054526658792158899658, -0.054612633246867159365, -0.023133071334960342291, 0.0073895288997538610687, 0.024334450270876994971, 0.010667863612340289237, -0.044504676902160089647, -0.098200245560384202825, -0.11766865822868122216, -0.11382238342308448331, -0.093681436951140173441, -0.019605847884629490352, 0.090021698045603115723}, }, { /* right */ { /* a */ 0.015512396634440192567, -0.020391464096575218079, 0.024050195860016859717, -0.029979857909256946158, 0.36905414956375964808, 0.35065405180331060686, -0.82070459684360974606, -0.17294854510044505025, 0.5091349998282543865, 0.070519733383666086124, -0.077559956631959026119, 0.61125406796720882507, 0.52623629698317675452, -0.46897902004352903793, -0.1714417829200720611, 0.26948853777138070953, 0.097069492238713306342, -0.14707004524472033768, -0.096403658302783926115, -0.13634031166999754925, -0.098303552232116911402, -0.18241456272988593179, -0.21530248155336156879, -0.11279416724501584168, -0.23690606176759601564, -0.056911240660061090946, 0.037438849309527962028, -0.04578389942453200967, 0.0046264186300080251124, 0.042007640021230613359, 0.022151274334351871154}, { /* b */ 0, 0.041982195862818455501, 0.08254722741980052847, 0.072664427252597960094, -0.11829377132001502038, 0.070236617743524298874, -0.011901997620548596113, 0.0077893227590393396276, -0.0089008987991332638723, 0.090522189974536967916, 0.095324643530981037487, 0.11754453832870694063, 0.13654235503493533654, 0.034013562766714577901, 0.02340727949840144817, -0.040713847604418457182, 0.015732261217336895864, 0.023791283777080396433, -0.0028896805095383198969, 0.0169974431277371274, 0.072837038118719221735, 0.0039342201881270161268, 0.012312494370343705571, -0.021651764233942757953, -0.021179489185238833948, -0.0081668579190747464525, -0.03054195555383248939, -0.019423375638861345438, -0.04295726081561708487, 0.0067010462456371100437, -0.019120058380112447266}, }, }, { /* 85 deg */ { /* left */ { /* a */ 5.4207905774400502404e-05, 7.5793917808653077373e-05, -0.00036713129453191939433, -0.0015618904773695430066, -0.0024990267563640422566, -0.0026372051095679980084, -0.0019537977059835842653, -0.00080050034712009221494, -0.0018979737133328900001, -0.003172980689997162429, -0.0025624502986154595874, -0.0049276394160913117304, -0.0082707509296842118829, -0.007992069046836025592, -0.0092253530901975633327, -0.0105164612737573826, -0.0039970754482643311434, 0.0015139378144179982399, 0.00047514063947207141325, 0.0032575344298402253429, 0.006201190368149145371, 0.0016213095890837969648, 0.0040644636932485322944, 0.016439269262674693906, 0.02129002660264389668, 0.027932376313460904882, 0.040271769366495568931, 0.039282525111511423788, 0.029202236994929631209, 0.023979121666767300169, 0.012741959251327816816}, { /* b */ 0, 0.058008692718908294594, 0.077001205963933561094, 0.095079889668447936657, 0.05750192471398740679, 0.055385520693063128306, 0.068756639874378855382, 0.023913171111333841878, -0.0029203640386499252202, -0.0029721632491264138309, -0.03824664324664217574, -0.035867937897005042203, 0.053236292890807002109, 0.097727381831724802197, 0.10594328185259405117, 0.15491145954144025509, 0.13646633487365833481, 0.042836349739144852222, 0.005589485785606473911, -0.018748615375624444468, -0.082901956566933110437, -0.080797429955759003661, -0.039435179337715675629, -0.046340158566526845618, -0.048427734634648444967, -0.034067592635106391796, -0.060826253589774115227, -0.084456034839947013992, -0.06411890376520346102, -0.041638553569395275744, -0.011361247130581286768}, }, { /* right */ { /* a */ 0.017637404019566080282, -0.023146976510304839714, 0.026545048936775856446, -0.030274109689290909508, 0.41203671504139649517, 0.29639804351685683503, -0.89791623818012644698, -0.10535778408185016153, 0.60757898399007725931, 0.024978129788012087831, -0.14743139188086634705, 0.71873064564674038479, 0.49418969158774794792, -0.62062564666938124791, -0.1537079765276824217, 0.45739395065715737765, 0.073932804114116082439, -0.32371044784339197964, -0.039912490742135750543, -0.012636479730003882804, -0.14847117245701110799, -0.20037727215219974797, -0.12919185722683890205, -0.16960876451316783675, -0.27984633351919496747, -0.037881302318437670706, 0.011410078671189247124, -0.083369129763727345406, 0.026709242074499095487, 0.075985860814370073668, 0.021280055718898502337}, { /* b */ 0, 0.012410399428397497074, 0.15419767583516708065, 0.044336732203144324505, -0.16155512807170341327, 0.097794779635425668762, 0.028450550355408124603, -0.021886728378568004461, -0.053240842936555163312, 0.12024645298295937035, 0.089631044274977519914, 0.072930089746372356307, 0.15639732412983112231, 0.088433184541984732885, 0.024345740863166279166, -0.020881518480592164977, 0.036574638166480696877, -0.0095547481038585346802, -0.014256673297645752752, -0.011645669012270293274, 0.059601517433541598145, -0.0071614952672649674625, 0.02250688614354422884, -0.010717105567844815647, -0.013790642205040518076, 0.0052048230799340358677, -0.034950820363846904493, -0.013621506644743638925, -0.033005877849209136476, -0.011242747822229337551, -0.018391922098279223086}, }, }, { /* 90 deg */ { /* left */ { /* a */ -0.00021027350211119634135, -0.00076954670552575963477, -0.0011207516659172984258, -0.00042666875046948500583, -0.00054082018030587875046, -0.00081260628920221122939, -0.00090837626309792085522, -0.0019174726827164700893, -0.0023521897586642470657, -0.0023920627754969734161, -0.0025815123637362704864, -0.0025258929374494254461, -0.0058967493983541618974, -0.012319825143519702593, -0.014053078285086728627, -0.0091114297819105960485, -0.00068447180839870114255, 0.0067545738888230566488, 0.0060516706282265353423, -0.00056778821963532344341, -0.0024491019702532765626, -0.0015151936721968795041, -0.00056192173400471156011, 0.0046321597563236949213, 0.010342522776957130404, 0.015535668206057007268, 0.02835261129333077959, 0.042384537828482615751, 0.048529210478764905901, 0.049409287418838987449, 0.033861063585272077603}, { /* b */ 0, 0.11751352912328649758, 0.066881041690391995758, 0.011611767165436992499, 0.03294226308819814264, 0.025103883935645443515, 0.029312215250876239026, 0.067710098670265006504, 0.042243824341647862042, 0.0026960360979821906824, -0.047575363222307487376, -0.093041097951607198979, 0.00046041687407072373617, 0.17926292561601386844, 0.21698522719396096115, 0.15024545135314260058, 0.11181873055793323246, 0.058785092002106020814, -0.015643363836109758225, -0.056250849052585927268, -0.088323964511638486385, -0.1180599631592227361, -0.098079574614301501256, -0.054691967391884421801, -0.0042877756914472264782, 0.02967474956150351062, 0.0041033038782056774352, -0.052367108693135433484, -0.096005862271902886462, -0.097642108675688454866, -0.049513994578587183781}, }, { /* right */ { /* a */ 0.018150091886578817446, -0.023845130864017311662, 0.02775998848373803507, -0.033769769876715663437, 0.40491345429583497362, 0.30159629298977624901, -0.91025359983279008347, -0.081343437060522535975, 0.6034854052168470151, -0.016960078838921387179, -0.10269926345311472526, 0.76352954683775542399, 0.40219093258717791839, -0.67920968317533791936, -0.056851256921459925042, 0.50905276924295583818, -0.026665421050103131628, -0.34920467562186752186, 0.0904739783458112512, -0.036397887595374447955, -0.23393069424555568148, -0.091199150924403324381, -0.08447542487670205158, -0.2564507423497264238, -0.25721831617591872643, -0.002125597952633978549, -0.023743067912420159904, -0.14477973281574843534, 0.022873577043523718455, 0.10671418109207270186, 0.019985873195510830969}, { /* b */ 0, 0.022491626840903319873, 0.14018081549356001259, 0.036298385305407951384, -0.12830863123070554432, 0.1263510274922885479, 7.3727942596565898548e-05, -0.040013158347134217263, -0.040805047872806074483, 0.10760179031267538829, 0.050746002994671302044, 0.056791978592174836848, 0.19465630967095987058, 0.090536167472289943992, 0.012593323203309580993, 0.023442724816696527967, 0.052788767871281977451, -0.02033437245395515458, -0.013196282948289839165, -0.03588112911393463722, 0.045571940713064196249, -0.036429356549544406052, 0.012429019951958051801, 0.015175738110519865209, -0.005163890233013043729, 0.0095466567671172869458, -0.024098419125345715841, -0.0027907433619838569946, -0.029257612807875116312, -0.017229223565869491996, -0.027034952156425318126}, }, }, { /* 95 deg */ { /* left */ { /* a */ 4.3144119567767368149e-05, 0.0021302951028895344976, -0.00072025735438352445072, -0.00013430419547322269835, 0.0021619131040928616164, 0.0029562742718397547539, 0.00096759804273094471988, -0.00066731916388562597525, 0.0019554424952883397992, 0.0010573150741738377226, -0.0057630517610873779541, -0.0042654429244920457828, 0.0015852209983568954499, -0.00080285248435507682897, -0.0069895806820152728278, -0.0091754745607658394491, -0.0046974684961287316298, -0.0031730985117911503224, -0.0059280793673899268015, -0.0064032724680918038165, -0.006423050928003326554, -0.0070405610571450116808, -0.0077339430447354029496, -0.0014087955666625129325, 0.011971743844804705326, 0.013240980043030536883, 0.0092823699160415884535, 0.015909933135591081133, 0.035265748517532280459, 0.056161277110985952099, 0.062561299477500997845}, { /* b */ 0, 0.20709919017362909965, 0.0098618492626323384087, -0.022612805280972092525, 0.084165341115993719256, 0.16295141133805535194, 0.13525992009599807631, 0.076210698016637712371, 0.13542574322733536007, 0.12770426112175548017, -0.15277262657230339382, -0.19301078065525612004, 0.030943661178395309719, 0.16248284197585560751, 0.21971897027288356252, 0.07839165727906161063, -0.06874609237615680879, -0.016754077436093028908, 0.029805198816373890125, -0.077448460786694317548, -0.15288485929854100931, -0.15750109847730009438, -0.14646534862002014155, -0.085980202811780648275, -0.012868257388554127374, 0.047737443159209802523, 0.026936777247771326316, -0.030203923302996038558, -0.015646012142198073569, 0.051186183679524654977, 0.1190345000479098303}, }, { /* right */ { /* a */ 0.01692233902813708446, -0.022198608990108524563, 0.028099027819879392187, -0.039354076304459403857, 0.34863248838263793949, 0.37030810409398823291, -0.81202423172712479005, -0.10771914287425415901, 0.38881054615390941986, -0.0028186697992533052415, 0.15279498696206239572, 0.64893570506150766164, 0.24152380950455987207, -0.46843371022348617716, 0.040251807388405093369, 0.22185368445738418153, 0.026645189291616723504, -0.039489443724228558141, -0.030196096577209466383, -0.28276446496745261117, -0.10981838965732558522, -0.014211428795898178867, -0.23828445961990032953, -0.20240959014934223337, -0.14479536848323548703, -0.09799054788940303462, -0.05841732980083247373, -0.079964546967404639966, -0.019575448765071085111, 0.084889554289851065771, 0.056574151995427736372}, { /* b */ 0, 0.044253003048792295682, -0.058688959402343476857, 0.11139315219106762922, 0.017428467999755184459, 0.079856031028604626543, -0.094212947161441934485, 0.047957245507034521048, 0.0050481755695976071596, 0.035439933418202063109, 0.084984660605178799497, 0.13136657987866395825, 0.12922176951737388007, 0.037151492684652648313, 0.060936255183892382159, 0.019033300477288780939, 0.046573677877307567696, 0.011154648339030230619, -0.020788905402422175328, -0.029532534082383869734, 0.017164554652654588629, -0.046263076050861294541, -0.0079167598297791019757, 0.022379966080907434667, -0.0091716797912888906041, 0.022277703175120792262, -0.02238749197036766711, 0.0071438113455552301745, -0.036059010862666412978, -0.0043682279381737978974, -0.028520125641734627581}, }, }, { /* 100 deg */ { /* left */ { /* a */ 3.8678007732439994838e-06, 0.00036880559217689068419, -0.00071422931596787375425, 0.0015315462861820172691, 0.0013974373520159177886, 0.0013013753347168579774, 0.0025956690450495995687, 0.0032526644595798348547, 0.0036340130423612171384, 0.0031337673469383755739, -0.0031445933911661283489, -0.006291570253877387664, -0.0031212408654196499569, -0.0059143209433371035644, -0.0094436593248842237713, -0.010033109807058848695, -0.0091828205094068859893, -0.0050242048843518460899, 0.00022635591977182570257, 0.0026831373144825532151, -0.0025832568337907928398, -0.011199233881722947537, -0.0090800117833605975548, 0.0047504101117340491456, 0.0074455714467458466999, 0.005686961780868027283, 0.012409919323344564823, 0.017226539487935621509, 0.028654026888730310674, 0.068762734723379348445, 0.072600415099710602362}, { /* b */ 0, 0.1413129266600310352, -0.0073914337867658774783, 0.022834191067966358446, 0.050140980169949278533, 0.049027788577155062555, 0.11641762768903329839, 0.16322290968165398262, 0.19894767328013096552, 0.22894987291049995193, -0.027045810778655865469, -0.26571378944677259692, -0.047611977908035285623, 0.11705887087903876775, 0.065492599011507390827, 0.080517969516941123587, 0.064856092412760024679, -0.02627393330616178968, 0.0076090381427584841134, 0.078206132751237888989, -0.053194635189005023967, -0.20185179645061668285, -0.21971235027985758226, -0.16978804320735840783, -0.09891850269103108495, -0.02115339760265511071, 0.025780282346676841598, 0.022902251530926287515, 0.020839531242738962291, 0.074518988234795191516, 0.14546865989319146539}, }, { /* right */ { /* a */ 0.011966198050782757278, -0.01496833593309099264, 0.016450527454028689156, -0.025926850401778410438, 0.23555114438391683285, 0.4722188962311174576, -0.75234591910942427706, -0.27801732081729912949, 0.53915520795346294491, 0.058085551110777060291, -0.058566576042035599359, 0.51853021102951979415, 0.48054627214607975594, -0.48585026237959572093, -0.15351342024705222356, 0.31670886696633759883, 0.16315084986006778145, -0.10738911933637247664, -0.11149882163329602469, -0.17039061038015274052, 0.0042422902277487392619, -0.0078028915498091350189, -0.36061792668445225019, -0.15431112049922079965, 0.0056192329624029507817, -0.161735335935920016, -0.16088938293551427461, -0.014354427764549752833, 0.062287468304296059185, 0.024598150199371844604, -0.029702161103367999417}, { /* b */ 0, 0.11504375649924208913, 0.021651963885253810993, 0.10021424308853918439, -0.10065297428003720792, 0.095000281296097124906, 0.023494773330606733008, -0.016304743455830727344, -0.084119092396599648431, -0.0018681129193348286477, 0.16086967464476359391, 0.1547736184561407935, 0.035506119840447707137, 0.0021680979266731487121, 0.14736967829420749565, 0.032388603988108173592, -0.014040054102954644538, -0.0074069314810135834098, -0.0068700930707776136641, 0.0046630860661743883319, 0.0017586704099742042628, -0.032198686096395617851, 0.0050750934625035867831, 0.02081839662318105133, -0.029219757397332818405, 0.029697584116748429461, -0.03943419296503075655, 0.032075243587325115435, -0.035072374385213510306, 0.0035978369066023275884, -0.031802406372611821683}, }, }, { /* 105 deg */ { /* left */ { /* a */ 9.4464175203451297529e-05, -0.00034244421284745647348, 0.0026178336597765267807, 0.002987633016607316172, 0.0018853869852841764754, 0.00045206286006238376174, -0.001268446398333677571, 0.0020279656421512415321, 0.0030288385766130687671, -0.0038811095125906858172, -0.0075575813094502786171, -0.010229789842788883369, -0.011581592352233327503, -0.0073160070666877796697, -0.004986785201444021709, -0.0045074024905555898357, -0.0032919373525036607978, -0.0014195923712934097657, 0.0015888908617284211791, 0.0045270852556261731436, 0.0061991054128851530436, 0.0029025465434623365368, 0.0019189911238531860531, 0.0066606047902095788515, 0.0079475207345747200804, 0.0057883047890894302745, 0.011572011089297510461, 0.018921730568569050668, 0.042937813008875336251, 0.071911292230178447404, 0.025067402116066284101}, { /* b */ 0, 0.08696686852271984236, 0.01578577589152196925, 0.080596070642993677957, 0.078967631586684960965, 0.027571309059240545203, -0.017849018280266526482, 0.03678492740549765827, 0.26450544155613708863, 0.28130387428208780687, 0.028682499716783937949, -0.083076202529522302775, -0.11054641272073562064, -0.070511572391532273407, 0.072697528049545101503, 0.08803285558675599809, 0.060692369318604555417, 0.091712773311602990844, 0.056769837322862004569, -0.029069460460717788663, -0.053468190293962103432, -0.049532799916429670617, -0.097734676907518247546, -0.1433145927644957629, -0.12552474600482921296, -0.10327250824185285616, -0.097065348691610653376, -0.057873120256762833336, -0.0013652695425581118371, 0.081695758853764233187, 0.15936741351876837491}, }, { /* right */ { /* a */ 0.0015668016976515403149, 0.00045427934985357160125, -0.0040624383178386076765, 0.0033630907472987142323, 0.090224127649338028978, 0.55691589500825799952, -0.45046585761131857639, -0.51700272135909752791, 0.40994229687848926513, 0.12186291752863150084, -0.017702323542065183382, 0.3852700380226054544, 0.60735360287334350105, -0.34406050321392755986, -0.25331881626544316966, 0.32373118512070442332, 0.17009464975948093701, -0.11799552026600904076, -0.053982922896562278436, -0.10496289068836175962, -0.17613957317129758096, -0.010978053477058748177, -0.22407543854546807527, -0.22678697091639107852, -0.099112038357802939581, -0.10828770800024090093, -0.096155268437089880251, -0.071548024391486636508, 0.0031216356084383112268, 0.055150743162330623237, 0.0020468437013712518883}, { /* b */ 0, 0.074935774006172503614, -0.082168941655711369432, 0.13844432786310970074, -0.058480690143646735235, 0.11667134772661268138, 0.041131301620027371779, -0.059720708901109774425, -0.015459233266758992675, 0.014607460522074285775, 0.11341577404696766285, 0.14390743799855879037, 0.10101969001017635508, 0.018064679750528361835, 0.093985627682125455484, 0.023710957272608974844, 0.020682315887456118736, -0.0082715441267720846152, -0.023816672842006357536, 0.016464978742749061813, -0.010626858727223569001, -0.029205347423567375176, -0.025576540012752640996, 0.023889155526357452874, -0.028413243782442719476, 0.035434099354063164355, -0.041507684576278999766, 0.044291022458608879375, -0.043082373704919282864, 0.015778813708729882981, -0.0355929261714078779}, }, }, { /* 110 deg */ { /* left */ { /* a */ -1.309667384352426468e-05, -0.00061238318339873476503, -0.0016670731304430086439, -0.0014611074396903012129, -0.0013514815526416419471, -0.0014923048672482728313, -0.0047851932726689083708, -0.0084144403305480564015, -0.0081578614171545771327, -0.0071634186354224693716, -0.0048760878632037041314, -0.0019702122355108563079, -0.00039475779929631568677, 0.0013245241139991958176, 0.0013479559485968274635, 0.0020580642721979014453, 0.0056999761501724810486, 0.0090073449320743348423, 0.010529556221730573817, 0.01158655953362175417, 0.01127516438069464666, 0.0077818288692077519642, 0.0073530654720599386565, 0.011622573802480551386, 0.014405918050339194814, 0.016984436818426318361, 0.021012748511878287516, 0.030158607004018844755, 0.061966094625845451194, 0.027403379903104263526, -0.023880726698483067949}, { /* b */ 0, 0.053318079201170043291, 0.011064278072347999426, 0.054140974536862063182, 0.031002934313129060229, -0.053491157458798725688, -0.13046741982040976904, -0.029661942213682346292, 0.22939319402809354997, 0.24193695175984963885, 0.15020956842450028379, 0.131262422400565959, 0.066188955555809836362, 0.05079161501511664234, -0.01867327535411134054, -0.069402381644226296409, 0.022429179740643401253, 0.024520253971427319328, 0.0085418548669696815756, 0.059209236950297228219, 0.022315975949510624687, -0.061762492375855293503, -0.047355749546590386601, -0.0008467798533889903112, -0.0042025996453004532682, -0.014104953056232050201, -0.024569466304663611922, -0.052179779108096902007, -0.088391765753551010398, -0.11757297369387187391, -0.11682440156687845523}, }, { /* right */ { /* a */ -0.0097350431312497598402, 0.015482519303677139133, -0.0236709560834293814, 0.032716952161958127998, -0.021186002237671280879, 0.49063496764359487701, -0.053611641899699476188, -0.69339229561045856443, 0.2531354733319123862, 0.19514698973700089768, -0.0034329576007472231702, 0.19370032104909776227, 0.61944910438216083115, -0.023758962855663715019, -0.39063671190927723442, 0.24685431267866464466, 0.24316308284436491394, -0.071477629128430184013, -0.12323689128967714457, -0.025006304592077414906, -0.18000479907094349419, -0.085949375769707014872, -0.15130158860041317825, -0.24225203164662723054, -0.13477995139787868339, -0.10915578320838900672, -0.052342989122419747439, -0.088876098193230390621, -0.030830002652761610837, 0.073681981632048226816, 0.00916070516668136825}, { /* b */ 0, 0.093839709295710768688, -0.13940626207778822332, 0.14604782141311858923, -0.030637347776664262955, 0.089197237289730460508, 0.12447339357294055773, -0.08808459118423306311, -0.0030632245232508556465, 0.023143885267244691112, 0.088977747081065997059, 0.15688125838616676089, 0.10509645690274375951, 0.031561154657990669881, 0.056260543647721261706, 0.028330076578537782828, 0.017823918696284149488, -0.015781512822110599359, -0.029762747061987809838, 0.031778403531169951979, -0.012599544304873165623, -0.027143550201066436733, -0.033725115150895837446, 0.007539852218147596874, -0.022102951250232635849, 0.025737829876023434611, -0.039906391082608280718, 0.051619486429567776331, -0.03681355675302314806, 0.021735208940261083188, -0.032249935928698944543}, }, }, { /* 115 deg */ { /* left */ { /* a */ 0.00013942449105569176761, -0.00029118390563326237291, 0.00022469527204138639576, 0.00037784487202235927938, 6.8148422981140210908e-05, -0.00055012036023760306491, -0.00017107817051886797799, 0.00086004933896877133748, 0.0017649907087941008044, 0.0024257156893206510695, 0.0017981001016950659555, -0.000523941382189748589, -0.0035758145046360621799, -0.0045305571148845889817, -0.0047015341152548094372, -0.0071128570323930641328, -0.0084398977100511064775, -0.0080221088034210207007, -0.0097193916145238423709, -0.0095620836841614487156, -0.0047173685237961171524, 0.0029446533543128765482, 0.011042163645669234029, 0.018131401262645729933, 0.019064528837507699333, 0.022336489023215555516, 0.030683382765510358592, 0.072432990680347530965, 0.05566116299669798817, -0.022451281695354263768, -0.0016246083237719845249}, { /* b */ 0, 0.10160865983710465343, -0.0084893985911882463569, 0.098656925751963719939, 0.11538695058401632343, 0.0029827292803707994295, -0.1115621224458476779, 0.00024371850308735343305, 0.29946499607094723139, 0.25129923915422069935, 0.085404819556295086258, 0.10125239327595653149, 0.13313095025790228076, 0.12516283172010755909, 0.033605136931132151279, -0.072097613554103490152, -0.14633661861489233313, -0.17418014311789548065, -0.098961418529240618991, -0.061263955812435044734, -0.085098411928968831219, -0.04496168292497659813, -0.032656829860241987085, -0.088768874276570763904, -0.039613918116597479635, 0.037358619477956267474, 0.026565492379435062809, 0.040526936886213504874, 0.053534521469930651527, 0.014505389111275910838, -0.024861739940824911788}, }, { /* right */ { /* a */ -0.011093287405129442433, 0.014294408261423564854, -0.018378514697486338092, 0.022532777726584116151, -0.030699638831704033348, 0.25907586376942981499, 0.35366673996007236269, -0.66341804511645396936, -0.10190680423687648037, 0.39806769439849831738, -0.074577292316266766137, 0.058450823929609249663, 0.57243656900714623426, 0.22754131074863476192, -0.43903162085690844441, 0.16412776225961495102, 0.3403615484415121184, -0.049543018421195975098, -0.14402901381840427231, -0.038975851083568324729, -0.13613905270452761331, -0.12963800935446376239, -0.086825198761480759657, -0.24036202841746270864, -0.17799756582542053396, -0.14065958789134627716, -0.10391730580476109258, 0.0086228976871197474119, -0.016981458250357045481, 0.0026454871184357700575, 0.045309008599547596907}, { /* b */ 0, 0.068192103314683172322, -0.061669001785108826241, 0.01395546386205766265, 0.068994778020183222811, 0.092885954115612900939, 0.087322007906250234677, -0.05372210536269423492, 0.029172058847717546176, 0.044405376757425570056, 0.057849167924908816152, 0.14699406690442545775, 0.089944467205095551821, 0.075583888107812677304, 0.052866776009121915769, 0.0029402623440057946806, -0.0042458379854006314535, -0.023984315872921900537, -0.035880772482231246268, 0.019422392492089886329, 0.030931664043963580379, -0.013971230482688265506, -0.054088307483422283506, 0.015147931433324643424, -0.060471716411530249125, 0.02539520388936124598, -0.036192334006072787722, 0.038136007919063227845, -0.0023172886767179011469, 0.013993189017700267962, -0.016096950709648318034}, }, }, { /* 120 deg */ { /* left */ { /* a */ -7.2262671827473773205e-06, 0.00021137481615723910833, 0.00047060124644393683431, 7.9837206741482360725e-05, -0.0015860829008507160154, -0.003324635078419402312, -0.0020038651385792527471, 0.0010743732347523477638, 0.0035367302569574987636, 0.0037129599008908767063, 0.0033303416441948785476, 0.0034552064656981351654, 0.0031470039602021766638, 0.0032199891907003226448, 0.0011094837919917166502, -0.0045865829201990893083, -0.010334055626989857579, -0.013081917360317774079, -0.011671678229047133257, -0.0095789163916809583199, -0.0042091261113694211637, -0.00031535904488483312846, 0.0016833268137381174334, 0.004271428691686451895, 0.015849235636376801661, 0.023900184131717128189, 0.064088261183432859713, 0.073371531546864710016, -0.020243074718567788395, -0.01291555641776132024, 0.027781266974009899418}, { /* b */ 0, 0.1153786319833122187, 0.033470230237989118116, 0.065880011802729732118, 0.14410401144287349195, 0.073978442038033498385, -0.073173764431264110009, 0.10942576385807034622, 0.36433920385721407786, 0.1935859346975654649, 0.043272615446177102594, 0.036373710836958006443, -0.040599685044405420253, 0.01509110368821953152, 0.040262603654243889206, -0.073363608563761784076, -0.10625240212336350965, -0.13942337976260987809, -0.18241885025176846069, -0.11843255686854597952, -0.069344142937972919061, -0.044163662314966600775, 0.019034985302424090037, 0.059005661138498977092, 0.066810227270786004539, 0.050514892022991697562, 0.069291521255163135429, 0.072269225925743196814, -0.020010108109196067527, -0.050848664101162122098, -0.054208314001352730926}, }, { /* right */ { /* a */ 0.00042043829732560378254, -0.0026942172581595124833, 0.0059841555066471631419, -0.01070625760087127315, 0.013960005139680710731, 0.033288064213549649339, 0.46415670738615477653, -0.23584123219842412222, -0.49742803604778829119, 0.32618315423010030285, 0.10695757597020510987, -0.024407046527426604077, 0.25862288808148653496, 0.43593051408603211705, -0.097845318288349691915, -0.12989829461206447991, 0.24916628389953562883, 0.20835511501327691475, -0.084299476675381068702, -0.21365480676733850096, -0.052461013067177722502, -0.047057771811738306755, -0.16149470478124788864, -0.21587916625733602483, -0.15596401194622733222, -0.13849896023468763473, -0.14956880244593814822, -0.039030618517181710214, -0.021206352760830340931, -0.0088528002070362155074, 0.048871936650565078741}, { /* b */ 0, 0.085351109527296825652, -0.11590278249875042571, 0.053546767390562494127, 0.074919546368423864391, -0.0035077009333294197069, 0.16797329487910725443, 0.022317478922057387009, -0.11473244788613998213, 0.11005313665454834193, 0.06016798586990554365, 0.13623473513239403587, 0.091448580907950410834, 0.072340642627592710578, 0.047742713236860995218, 0.020330236324720904473, 0.00068758880059690413722, -0.037753658176874725638, -0.018234949665778960037, 0.00050008863222792548919, 0.043357848545674641805, -0.021018098479127021727, -0.043587923975502325391, -0.0027822357407097236814, -0.046056280136991777086, 0.0099491877322529023719, -0.02693354394970193938, 0.025567960137179608637, 0.013183576335847914385, 0.015280040867320272835, -0.01665173962277395614}, }, }, { /* 125 deg */ { /* left */ { /* a */ -5.7581132945960734806e-05, 0.00064948927000485490169, -0.00030281755231814709399, -0.0016139543534271494352, -0.0028540076139893510998, -0.00069932054189147940804, 0.00040557645956951215993, 0.002287262538813731455, 0.0052463534689142811429, 0.0032526905361166011214, 0.0023591679716716863757, 0.0036377204579163299573, 0.00069868315931420968412, -0.0028582077860397868407, -0.0034227549605345165828, -0.0052880765379764750611, -0.0091447628576893404129, -0.0091561620299898671682, -0.0099534071835646886761, -0.0072195747947978450298, 0.0004740145097964497704, 0.0054870306801999002566, 0.0052488173069020760408, 0.012925204477994001184, 0.018778806908058276459, 0.053969855680208178583, 0.093038142662399403449, -0.0068153728441378014224, -0.034268778804982802377, 0.026583882200004183005, -0.0024075520452249143943}, { /* b */ 0, 0.099092019363866690185, 0.0087517440291312587064, 0.096491267048796902639, 0.16342077613768629663, 0.041201858055478490783, -0.1175707893002683746, 0.15420751412906219535, 0.43588039982098147895, 0.18642586019690376986, 0.056413400277011138684, 0.031866802650444558953, -0.077302578875594607499, 0.029927363015720687134, 0.0017402496533050482164, -0.13997630338099392722, -0.113035329772255555, -0.13352392733995827045, -0.10298695693605752766, -0.04326825474416928774, -0.11393581492328413995, -0.06559839813850137924, 0.038815055255700385561, 0.030781327476601946097, 0.056987065056787744588, 0.098012456777943346431, 0.068958606987759574203, 0.011201442200667321991, 0.0026327055667116350257, -0.013589254772850001274, -0.095569145918267262019}, }, { /* right */ { /* a */ 0.0075183561421753863918, -0.010436048359461352897, 0.012740024716386723347, -0.016114742188342266738, 0.020025116608144918895, -0.027263264945716000898, 0.24753853818150456378, 0.27118531986500399311, -0.58866565184274277645, -0.071171008282390368915, 0.44792919886633941751, -0.068263227306014959139, -0.09652718239072137496, 0.52032593224742407223, 0.1901601808898969459, -0.3318782249512020055, 0.23531611286604497968, 0.350087143838723025, -0.096030647934270838006, -0.1960682593386528505, -0.01274418685537088633, -0.099505400015498790545, -0.12575831107495658023, -0.12198877743594112311, -0.21599050364756824938, -0.17300979780852390744, -0.084674809326234362628, -0.093016237510280097567, -0.081152149354491581734, 0.020578498556179242174, 0.059782309145633115433}, { /* b */ 0, 0.079288650579058719825, 0.039894740617003009164, -0.052060688524599788018, -0.0054613514197847726206, 0.11873078078229983012, 0.062957485088546372154, 0.048153345581620175808, -0.041180981923197274019, 0.076072955387394947113, 0.054709085033151534649, 0.15295131928289695811, 0.10385187848640624331, 0.0068785110194377954707, 0.063340427332151699735, 0.041550837520348653242, -0.02648256370923682268, -0.042126265048679154002, -0.010657528361768279709, -0.0061631088717119877907, 0.039875390696639083365, 0.0095109303333137593106, -0.050126654616640571593, -0.0049517103930521097488, -0.042935357546479424595, -0.024702225965536787206, -0.0089685459519865708133, 0.015917359637452496018, 0.014042791065134972717, 0.035103098473886019948, -0.015108788392181160543}, }, }, { /* 130 deg */ { /* left */ { /* a */ 1.1812758242913043642e-05, -5.5901626799801859558e-05, -0.00051669836013956975569, -0.0012710223678408238968, -0.00071126548338573680752, 0.00059890656135819231309, 0.0015958964632439842646, 0.0024059881895133194973, 0.0025038508332658748756, 0.0018244612608186998488, 0.0013785031645341394579, 0.0008901754070672653063, -0.00044113225364239214144, -0.0016912166763555190607, -0.0035638006112836927153, -0.0082546755705153983251, -0.0099357213378253837754, -0.010172744588574086227, -0.0066835498931799852684, 0.0024028444645801672053, 0.0052078603414440483022, 0.0042555749380640550683, 0.013549694026088188181, 0.021317888175206856083, 0.046844200248669087827, 0.10684921842064876163, 0.011220217490531814164, -0.054044667341171526154, 0.029068939411819316732, 0.0053611345657289533051, -0.01814694018408002929}, { /* b */ 0, 0.12251311485703131332, -0.0048966409354339601734, 0.043225474417180054232, 0.13288643283357326474, 0.0024753584727116306752, -0.13493550284474076228, 0.25001905995872264477, 0.46116198007706277195, 0.16767002957919496797, 0.12022113801239686648, 0.035092266079117528932, -0.082874925052406345216, 0.09299057500647411878, -0.010335927920560039617, -0.22303158437285419691, -0.17736799351152077175, -0.15576870378924967397, -0.09553559118941068462, -0.010527352803241241119, -0.039461536134599572989, -0.04397576750678200419, 0.0022546490695968257612, 0.045224075152991427551, 0.070264909304215694696, 0.061617087093734923542, 0.035144339289305825957, 0.023098222545966939911, -0.016722037124855537726, -0.041553072690561632108, -0.040322919942353818712}, }, { /* right */ { /* a */ -0.0003954638475309746326, 0.0016802147026744734815, -0.0041307781481307566732, 0.0069268081880503179493, -0.011149805097107265417, 0.014711395451955620872, 0.012661300819154924779, 0.376705963309491354, -0.091160582263321632279, -0.49515815498233545222, 0.23973469451584847323, 0.25725972791418044716, -0.1364809441059457451, 0.097772769740633494462, 0.46604942100162649599, -0.076037106709709686991, -0.041141158584846390656, 0.35232917095899790594, 0.13782727738610198176, -0.13520175195935402179, -0.150874719704523097, -0.083235944983574144951, -0.078215007079862383654, -0.064032710649359989019, -0.22784168154062375833, -0.1887778082459686535, -0.054015447047816439463, -0.098555610973257296026, -0.12211294722235141452, -0.043146183514660048364, 0.0049622785846126921117}, { /* b */ 0, 0.068255698670396408589, -0.019626044183932569304, 0.027022734233770818318, -0.029199728361064755666, 0.053847894874170493251, 0.074286951068278456178, 0.093327301540100923716, 0.0046883292136945808881, -0.014905365299500671072, 0.077121161747451066892, 0.098097439175047873583, 0.078872250090676374046, 0.022649650580929860111, 0.10118989200943753759, 0.032708378546854668945, 0.018610044422722078761, 0.013278570298379081815, -0.018196151545185959564, -0.028528768151272497489, 0.0049331955231501209078, -0.015694823528042758931, -0.045042267051635491437, 0.022953317535046903475, -0.049253424540020296352, 0.01848907971264186767, -0.013561713523798677589, 0.017034870128463178163, -5.9926623485577479311e-05, 0.01361690711632057571, -0.014890291483199591394}, }, }, { /* 135 deg */ { /* left */ { /* a */ 0.00010640586492385905107, -0.0020863220798889004458, -0.0027546738669975696749, -0.00057689734912769186082, 0.00066419501364156662872, 0.0020730048205103157599, 0.0042753920946603241049, 0.0024273015306053302709, 0.0041430994752317245461, 0.0090535447899720046527, 0.006478835994985780028, 0.0019980716855355629136, 3.7437150879338076948e-05, -0.0060434387033625469599, -0.010258699474491317361, -0.010462940875158310838, -0.017758528357350589211, -0.019186225865344685992, -0.0056492490439069530106, -0.0015221615476401738343, 0.00065944081514835188249, 0.01116663625060076992, 0.019168392713514448289, 0.041054080523461600194, 0.12181615837242310008, 0.041202139539203708196, -0.067452937283843383831, 0.024205569470678308525, 0.018561269636285793183, -0.014617104953928983235, 0.012766910383738006018}, { /* b */ 0, 0.15611339107442223639, 0.016778431063749214142, 0.081041717545221603203, 0.16997935467485958405, -0.064237394333324648876, -0.1467946458799662679, 0.31367196839646172002, 0.41053110185970687063, 0.092442334293230121745, 0.054708062922834144182, -0.05471108079559138665, -0.10471127127917312372, 0.12256479566694067351, -0.041264754456551977491, -0.26877304811281921282, -0.15682178410143798875, -0.12960269481887554122, -0.074410637441665872238, 0.040540669179120469856, -0.011041781803264316686, -0.0015913537167872027212, 0.11404907080604653746, 0.089380662718768766339, 0.040644184712002040527, 0.057264541138690727706, 0.03605762351477359573, 0.002108751488011373354, -0.036946082845115690851, -0.027051392492011272495, -0.14859598965757947475}, }, { /* right */ { /* a */ -0.0039158275946397091971, 0.0045651814713915106481, -0.0053509730125501937109, 0.0060881631249679723367, -0.0069729162432800844557, 0.0074547800273452868858, -0.010667169556234295386, 0.12038098870040858657, 0.32619730270482744094, -0.33417848277127332191, -0.25402146762454541618, 0.31913744062667975809, 0.096220172381067059497, -0.12010643039258775411, 0.23997327133401527566, 0.32270779230925061842, -0.14215569908666408905, 0.164853962412100985, 0.32719285053214147707, -0.029655260724431586894, -0.17571807629752189683, -0.095723928936843727389, -0.090418165187601373667, -0.10250068810447621193, -0.07679258050520215706, -0.21946952455217211275, -0.15779039960212257188, -0.0097222428803184907098, -0.085743480977948399735, -0.10062298804902622407, -0.039130299227052925404}, { /* b */ 0, 0.060566366555303216557, -0.033585461857244328088, 0.097375755251810053315, -0.0057979207029488586539, -0.013037187911631165083, 0.099547705230398603193, 0.065450202271855356662, 0.079607690447289047864, -0.016594043229971669473, 0.0039141099964726949745, 0.11239923309603364054, 0.060828670912557031292, 0.037661575031187194407, 0.067372873971643737478, 0.06127743996696152079, 0.00425967189704272442, 0.049933361264478656749, -0.011891207176021113476, -0.043937700071649057887, -0.01454360809969700713, -0.036771014605774601791, -0.031196266083756418741, 0.03340208106078057515, -0.037511987641784816372, 0.021432249770140368583, 0.00047072404577540305493, -0.0042222493704937736486, 0.0066621020424406339477, -0.0071434454623851111055, -0.0015815756864876948096}, }, }, { /* 140 deg */ { /* left */ { /* a */ -2.8322500534026556936e-06, -0.00053066106186355809296, 0.00082483518027906630593, -0.00042863322878908282666, -1.1879332136033315948e-05, -0.00066783173309145670363, 7.7773664591825947327e-06, 0.00214109388265923406, 0.00019600041728518038876, -0.00012057335090423157431, -0.00083007319325381981323, -0.0016636900295081960208, 0.0032933505128562882633, 0.0011374034858575837043, -0.0017964573410626802699, -1.5318938721698739658e-05, -0.0039285770478056369903, 0.0026668064562369859886, 0.0064403246606559161336, -0.0039511678598391775097, -0.0042266883104082053624, 0.0068954789365915933677, -0.0011256836162168446305, 0.085086384090781591594, 0.0044761479967535267033, -0.13405338016282686286, 0.049965532002184398497, 0.048763835001040811701, -0.050795157665751294873, 0.066932538639891819843, 0.12590629103302261593}, { /* b */ 0, 0.58045527243727446098, 0.11532640933909973913, -0.070294737643389337833, 0.181548564083585523, -0.018736087559288044924, -0.40284097321803180591, 0.14967265663310205803, 0.13808262017332012528, -0.14681980457335874757, 0.095308802128581115998, -0.090946576570358900193, -0.070282983278130428673, 0.16869505144689184162, -0.0056995287795943982978, -0.11145719903146375507, 0.010645899981859968664, -0.029949005576172804677, 0.020448635869082382177, 0.062096271982760298247, -0.061559281084502120995, -0.010155868739088885766, 0.022991411353021073971, 0.032517242832784398754, 0.053763405399084168712, -0.044022531706967849008, -0.056791172460615713113, -0.010048509774783498383, -0.011135553684340354641, 0.012392231463938252478, -0.028022778311032753296}, }, { /* right */ { /* a */ 0.0018361282853110241775, -0.0033872857336473410905, 0.0046059858721698987427, -0.0065776919334296218844, 0.0083542195671026941994, -0.011143260589185560033, 0.014031371980195189719, -0.015337968677412404384, 0.21316430420635706922, 0.18207602262459615661, -0.41531887067146328052, -0.031187790338876170138, 0.29269849220073268503, -0.054235962098389371711, -0.042109054573871707028, 0.3423878607439811983, 0.16665370514435465243, -0.12828009228750011927, 0.26039154286775512137, 0.25358554767330221402, -0.13060052607320907225, -0.16234915440849845281, -0.060712808823515200529, -0.11670474881265904821, -0.13121958987003162767, -0.11982151889132144906, -0.18541725949783305349, -0.10845374594194448492, -0.032077652783813255521, -0.071363329167328279357, -0.023880378233289735468}, { /* b */ 0, 0.063936342454143688108, -0.009966133409831066936, 0.11085760377685827116, 0.044677819807104057759, -0.034361268819236949479, 0.062743239678210147026, 0.062943407025382550057, 0.083058071853022163999, 0.13134064665964562124, -0.009268611908543576694, 0.065924378272914974097, 0.031868980523838338903, 4.2139580657379909672e-05, 0.069306867166024632709, 0.015998377618240203213, 0.023748490644913237968, 0.040251817749930099422, 0.012188030292016073519, -0.042057852935031489472, -0.0057086301428208377495, -0.043725723377226709265, -0.041252225482777717114, 0.02142720307404984148, -0.048367296921177430069, 0.032738401870443196995, 0.011597842342267461468, -0.0043165727307750041686, 0.014759019374048845674, -0.012598826880840656092, 0.0059455537992827295346}, }, }, { /* 145 deg */ { /* left */ { /* a */ 2.3996799380029271154e-05, -3.6983924603382553609e-05, -0.00010885427087492863252, 9.4027203384472457515e-06, 2.4325316760817870956e-06, 0.00013631801319691230442, 0.0003569147487281192771, -0.00021825674274833503706, 0.00049352887651621379916, -0.00034778795489354185147, 0.00010764262883821917806, -0.00013369431908771822748, 0.0001612257009148132796, -0.00082230832962326520785, 0.00098596277656181480209, -0.00076071996507610234461, 0.00048347716170849507067, 0.00024596005544775048635, 0.001122381176055228108, -0.0020218050363063327229, 0.0057335193050928046077, 0.00098351229257942485162, 0.07911624124667948621, 0.046474585830846848467, -0.10163739703000773673, -0.0031500376619642000975, 0.02685673447709591502, -0.0098010597263803456158, 0.019079556105860977222, 0.13571862275116308716, 0.16518685852055792207}, { /* b */ 0, 0.29209289431744722698, -0.088683859083907301546, 0.19870288442330741319, 0.056117942729694281212, 0.0055233992313913349292, -0.034417842552231237008, -0.18642029961095374357, 0.03188050946213716319, -0.12215473870355597619, 0.058564694857057841837, 0.027133066872742084286, -0.098321742115492494207, 0.10165847932147586974, -0.036326745038034458091, -0.081706909303494446029, 0.05666085919578400798, -0.065230034060614894287, -0.023126302295464751246, 0.034088858653635867313, -0.054637137087559795035, -0.0062919689342716411673, 0.00337558118006231608, 0.0067879138795912119519, 0.032772559692278990795, 0.064759985108769901885, -0.015975298047754549202, -0.027683987494919737316, -0.037109281432953777902, -0.033246283187224334732, -0.0065407641535591941329}, }, { /* right */ { /* a */ -5.9295322625916386996e-05, 0.00025361030688269420308, -0.0014975462105494886413, 0.0023321644056564800468, -0.0040143723665109903864, 0.0056496033224969280373, -0.0083177157733822781882, 0.010418731344547307871, 0.0037317150503252466062, 0.25774726845881812398, 0.03548555282497853347, -0.37577294565440211294, 0.13177411199254401852, 0.18278456868343551101, -0.13825278210365615772, 0.072251944089277819749, 0.37727001604717619321, 0.061230184483984304022, -0.046667811543061286927, 0.29825638920078673122, 0.11633725609713846394, -0.14742657162931566139, -0.078501906429860102143, -0.054583903007854664424, -0.14088563291174288628, -0.12188196573843396164, -0.16632804680378696083, -0.16103868772087179262, -0.062667853368376519319, -0.090920878374582722592, -0.067120396724383718512}, { /* b */ 0, 0.058538717682757313021, -0.0067235800765147457625, 0.10061999071942813455, 0.032009963128213844707, -0.0085750658654045221196, 0.0016715560854918543043, 0.051641640912733315083, 0.08213774559567066369, 0.14615828567515251613, 0.069892761402653755254, 0.03775384784469610483, 0.035962486104601509851, -0.0038619656431799556651, 0.07389376333252321849, -0.016166609451647752371, 0.048384225398525639028, 0.041847242283617011593, -0.0053303041007467626133, -0.03351417438249727071, -0.025366513586497739519, -0.0029940071307734909128, -0.035054287279749976602, 0.020758025097121490798, -0.060317252944543611748, 0.034924170228588589937, -0.010758538361728933047, 0.019019207899853916854, -0.0063627382651402011882, 0.0041195717837743143705, -0.0023809626018564782057}, }, }, { /* 150 deg */ { /* left */ { /* a */ -5.7808969703442882049e-06, 7.859375997232387963e-05, -0.00020195202801720404245, 0.00031595442082088791985, -0.00038697247538299443803, 0.00034207817356524117258, -0.00014974415749047315853, -0.00011228781855721113939, 0.0001483494695142529012, -7.6482351424324215156e-05, -0.00039344251322182000052, 0.00074616616850542438755, -0.00077416060895174783341, 0.00073700183421399230455, -0.00013666060560968244786, 0.00021771677245763058905, -0.00032895946806832474657, 0.0019676944930380199997, -0.002446887221799197952, 0.004275371799714045018, 0.0014554996183996360415, 0.077215344536710195378, 0.093552337016925002366, -0.077496570637172745855, -0.054258581771438052499, 0.015401699340680807815, 0.0022501846647787751218, 0.019689311409679107617, 0.14642282391945371511, 0.23487005904862523487, 0.086820381211688557599}, { /* b */ 0, -0.033799469500717105319, -0.096279236524443589929, 0.22091500173217204495, 0.12148875439946250909, -0.0076572573475680583144, -0.030131378491796145802, -0.14024308381335726104, -0.11888930525678909067, -0.099487028630620977232, 0.022130821356672325528, -0.0073011246190524126121, -0.024081928838987076702, 0.039823506357977711545, -0.040895948917110680476, -0.04829093947618379179, 0.022019905220257984801, -0.074358003629357294351, -0.0014864981615070327337, -0.015010722241373675168, -0.078612975309214072617, 0.019454143961178393951, -0.038257495985904999003, -0.017326638979547892561, 0.036913624998496930019, 0.03219274391251525369, 0.0068989239107586364241, 0.046842982808978361753, -0.060166361891406117124, 0.0039340002654791907111, -0.04171936477739834892}, }, { /* right */ { /* a */ -0.00074478344217444522601, 0.0007511785498183834453, -0.00095975582467544540664, 0.0003837616212743652196, 2.7485100289465424443e-05, -0.0013624965539919126067, 0.0023531580862221406977, -0.0042316079678110102291, 0.004840207769030158147, 0.031003830564175528794, 0.25958893247698433537, -0.084294597014668987134, -0.26906499788472909573, 0.1985279390908638586, 0.031028247903159594107, -0.11486513800822001352, 0.15741827212653530799, 0.34498012878014588933, 0.025665866484748771359, 0.018993532817268739266, 0.24502951514964954605, 0.0052309987987704175891, -0.12440272003277369484, -0.038543594725226788811, -0.06620071414478256866, -0.13099098239792078546, -0.13456166221842535968, -0.19553646171913985352, -0.097051768685255085378, -0.057685786296096837333, -0.10554790331524466218}, { /* b */ 0, 0.10296905720001520157, -0.031916632292636540336, 0.1371772093303840756, 0.025581835101807365307, 0.0037329793989293587157, 0.017041252381062854671, 0.0096940844390236771688, 0.083133380807689172265, 0.15137376358411169797, 0.08291163369970458441, 0.04345817582482400937, 0.032173172324003081191, 0.018586719340587219695, 0.028174870867589581203, -0.060814479048063550815, 0.047343284532777578366, 0.090803696340692977018, -0.024400418685635583138, 0.01192035672426071044, -0.076481246590415954967, -0.0051987080044437958271, -0.030485298389941462016, 0.01697330043399884747, -0.014962470605548762459, 0.029782567270843045282, -0.02811451573473626106, 0.015568336049018999256, -0.019634447613083035045, 0.018551872579303414768, -0.0031451728171741702433}, }, }, { /* 155 deg */ { /* left */ { /* a */ -7.846684997090895401e-06, -1.1967299512471996081e-05, 1.7571946397955742758e-05, 2.3839611326683177173e-05, -9.8824770589072309798e-06, 0.00012370376389902930999, -0.0001906069247575863275, 3.6766283073585981356e-05, 9.5089872087506020857e-05, -0.00012925669250207598437, 0.00029605806355082007336, -0.00021290917223693115595, 0.00046180190858835512557, -0.00039533474840980353804, 0.0008719665658268871411, -0.0011835970670920365616, 0.0020615578255611666236, -0.0020408909146701903481, 0.0033778563048036955654, 0.00052249169449347654393, 0.075086891007103417905, 0.10799162756168489974, -0.090613576457787559093, -0.086873763159647787724, 0.027096272833398993285, 0.021638942594090493365, 0.015445631834157258488, 0.1481240784572540603, 0.25527186229550025143, 0.056256086679792871585, -0.054761228196753553021}, { /* b */ 0, 0.015162328826992532704, 0.051460910327205677817, 0.25159007800437671598, 0.089044318617378936942, -0.071396716489688372143, -0.027379932088927860789, -0.13151821887623371676, -0.12205488260252916888, -0.034882323086196653783, -0.023718234665251469728, 0.031729017745465992739, -0.0024102467378883662974, -0.0018285683795610241376, -0.0028123056431544890543, -0.070871822570248155237, 0.010888903779204817113, -0.02650154579134089694, -0.0091602423032965951677, -0.022468559707222723887, -0.075005627228411086982, 0.011826150009136560115, -0.032163875408469655426, 0.0060877235611572766416, 0.0060017553941277279606, 0.0012837575007196289079, 0.0098048556126939523381, 0.017781482509124372365, -0.027803873140497255972, 0.016507726800299438175, -0.027745125743341980673}, }, { /* right */ { /* a */ 0.00075439313840242397391, -0.0009466484373081228941, 0.001117362672074795121, -0.0014999605847621955319, 0.0016130037250750729055, -0.0010427407160298850231, 0.00018687770332505987403, -0.00077652318897052118908, -0.00090588186742266568752, 0.0015874841468015831597, 0.056834941265862526372, 0.24021804398403312497, -0.13156983644280922929, -0.18774733377208435714, 0.15910464303583024548, -0.029387909936760131524, -0.066336326890658964262, 0.17600750420838770505, 0.31933440250999356458, 0.058621487908495764629, 0.053661208389622384873, 0.15542385504150191267, -0.078959879496191764936, -0.074108004601744492668, -0.0063690900763265986817, -0.17126990566013439166, -0.14328044992083904807, -0.099481795226936550747, -0.15814941178761987572, -0.10715729861463489658, -0.05079474350469341537}, { /* b */ 0, 0.041837716966783983219, 0.043280733016035598248, 0.1618483912770071198, 0.047340245106636258399, 0.0031153111105684458404, 0.05045513278414959224, 0.056800988297829903273, 0.083928671198514714913, 0.091601980773403729463, 0.014031960039830905507, 0.15350077616926702251, 0.012928372237460199548, -0.083614777794745298589, 0.02619391224583256933, -0.035909758683057992068, 0.13051397315322144088, -0.016959957605281961168, 0.014304710495411342153, 0.0039130715491280873564, -0.054039861922456668142, -0.036287732663882986406, -0.078426592983126514058, 0.056537939498906356062, 0.031549020181593882828, 0.039827905272487272581, -0.038563172179047200405, -0.021165137341089962364, -0.025250491764430491037, 0.036724720661475938888, 0.0033189175586024327602}, }, }, { /* 160 deg */ { /* left */ { /* a */ -3.7149558527515245954e-05, 4.1919578780416459629e-05, -5.8159129318057683003e-05, 0.00011254862958276544514, -7.3107186415732666393e-05, 6.5512044955529091794e-05, -7.4440959507706197518e-05, 0.00013568662041163210424, -0.00010189252337700028736, 0.00033243663814797042022, -0.000401587946230464116, 0.00067368910020015838544, -0.00083517900248408728434, 0.0011976710675293275946, -0.0013152957472478687961, 0.0021443953957672734489, -0.0018815142202588393087, 0.0037106122421914911058, -0.00017044498791529661633, 0.073961320379498096678, 0.12068648584967478499, -0.085907113320793371258, -0.073179540880097260214, 0.039265139187560915701, -0.00064392313717242903592, 0.0031548102298606384153, 0.16699928175344103121, 0.27331661117895034163, 0.055941628567326984189, -0.00013439361352951534464, 0.063545655250157873084}, { /* b */ 0, 0.077243387544764785524, -0.062916283022906860367, 0.07204284067405253289, 0.091071494507100059224, -0.063047357928280867156, -0.0051944896203165447091, -0.110764290783549324, -0.10636944939058923243, -0.049625576369546897659, -0.064948907208470241237, 0.013479571139007884284, -0.040799955185258363066, 0.024249363108699850677, -0.013429698593608874191, -0.058369924720511057181, -0.0036411935396690742195, -0.03473734107251047476, -0.0089189182392312993386, -0.028110515997228913143, -0.063925976663548045309, -0.012325351390687910857, -0.035356944142472812587, -0.013074194403078776006, -0.0054812757612626716863, -0.0065053700493838961805, 0.0022551694686678835922, -0.012557569879015349421, -0.014525072829715823808, -0.022243763452348130905, 0.014447532142719543558}, }, { /* right */ { /* a */ -0.00044383087323665549543, 0.00075264275358963295126, -0.0011084317211133842829, 0.0015064296893978550932, -0.001913399413399143132, 0.0020827856229543167954, -0.00262639912518378843, 0.0020921307683496870311, -0.0025292965287471158575, 0.0027619283838892921823, -0.0027051536817968725029, 0.074579262764962267473, 0.20716610339513352734, -0.15270625867165765754, -0.11899492661092578305, 0.11041565204819833723, -0.066124249006130147999, -0.028881576291817784297, 0.20122834414620333066, 0.29345582399218328451, 0.046628516668419800473, 0.062649396769284729225, 0.080578444427042511533, -0.096966963434950134704, -0.034589843090214629495, -0.044983954419234792321, -0.19708491210074569056, -0.12473633591782173902, -0.075757846912942697348, -0.13561377678227309884, -0.070620516137197747453}, { /* b */ 0, 0.076700172241986136479, 0.097031324089486045703, 0.12607736701479729802, 0.054803947831198004947, 0.056108645304260573727, 0.031710589549764807427, 0.071202750919399010465, 0.11568453878672926849, 0.0081356648562588493312, 0.025496606300130612854, 0.13118928657870976284, -0.0039962511106262504912, -0.10255093474432377953, 0.017731740670247349984, 0.05153480708222722001, 0.086564962476945131464, -0.0029973253242322056566, -0.027265078521871571882, -0.028460734340868612535, -0.03770221949125473343, 0.0030526263578587176095, -0.049991694319084956089, 0.038639510098717640141, 0.0075666518905073698598, 0.034827489302385362946, -0.0081345578607739943422, -0.0078819762681881996857, -0.031609262095906760781, 0.012555574735251609497, 0.0037631991324808475308}, }, }, { /* 165 deg */ { /* left */ { /* a */ 1.6032358884032509494e-05, -2.0618572127428181555e-05, 7.6373596474832493395e-05, -1.3536907012001353945e-05, 3.4933854420335863443e-06, 1.6362994709193858786e-05, 0.00020972907258109840952, -2.5256253477489408465e-05, 0.00039309818927746298899, -0.00027020741019678816766, 0.0008771638958238181516, -0.00079800995589351941817, 0.0014095308371875328243, -0.00099036352715908696279, 0.0021987588748328948038, -0.0012523736038494441732, 0.0036145935512765792197, 0.00026645679829240243551, 0.073071940605157204018, 0.13836674623374234372, -0.077092070428358416834, -0.09434908569569411263, 0.057399978942024310058, 0.028636249922858736383, -0.021592044304602486804, 0.15781165319680989789, 0.31786629420146872427, 0.064473943994503013499, -0.0062786139784498616601, 0.12491529823840941127, 0.061071277870083928718}, { /* b */ 0, 0.027214061265740108198, -0.0086497991384770767098, -3.2940689898009319026e-05, -0.075158699224670000305, -0.055577653949451244486, -0.0047999396921016845852, -0.08780777413688878319, -0.080424568475456759131, -0.060754304003485248842, -0.072840781644434304809, -0.018781093659853143052, -0.051867299993568760641, -0.024221852314987302179, 0.024312080425248350224, -0.06347898491576575708, -0.021541957671705747046, -0.025194329854871799768, -0.030851700042189289519, -0.02876187536651752738, -0.051425569297935957991, -0.025301806133859461312, -0.060655013523758238847, 0.0016406946004576816733, -0.035637107960312386368, 0.0017071477050045746893, -0.0080116049747114212454, -0.041229325803970866271, -0.031203173601196398934, -0.010422760565592659177, -0.013613842045900881317}, }, { /* right */ { /* a */ 0.00024507018937369750601, -0.00036103168107003104012, 0.00062721293653169446491, -0.00099399394534738227946, 0.0015420607719094162058, -0.0022155908981774663502, 0.0021943216735754306201, -0.0030760841178596731726, 0.0032577844373072109563, -0.0036687244225159718058, 0.0043774992430477971395, -0.0046297866164099477082, 0.084871246778502398844, 0.17731062929576502096, -0.1375195862328166263, -0.085910592216953435285, 0.042853910962566479914, -0.054304062404994177249, 0.0029573622616291647854, 0.17139734238236412067, 0.30171044478694875046, 0.076820024231594938313, 0.0069952166036318236264, 0.053998326361680282215, -0.042834848103449722767, -0.068257583462445384215, -0.12962925817370279935, -0.16877151750987853807, -0.096130845080358684474, -0.11173355687788871782, -0.084937499051003145789}, { /* b */ 0, 0.10156275271398867988, 0.077185566288041296268, 0.13282149838280954413, 0.08171816697032448229, 0.065019220953049655654, 0.10019105873802339191, 0.072012868194281015599, 0.055492568684905457799, 0.064212004771331043784, 0.010854841299193750126, 0.014918743122863641071, -0.045033301591780941497, -0.031706095040356062353, 0.089564090825565129128, 0.022024871724492765812, 0.070052222587587240077, -0.030671518055237073641, -0.031950765902958457032, -0.0033956392862712764247, -0.055116051972375207368, 0.020522665861114758323, -0.053010372439558396673, 0.039559117300537981199, 0.008336639543545999731, 0.031089458806289597959, 0.0058377015975212484533, -0.0083504315081823349276, -0.015804329272896613934, -0.010019162080842670959, 0.0015402341953458034696}, }, }, { /* 170 deg */ { /* left */ { /* a */ 3.1302173760794381822e-06, 9.0499071014882737779e-05, 4.1432883721159718959e-05, 9.3300330586410179859e-05, 3.0958006921876900924e-05, 0.00030591771116306133368, 3.4937743809137188078e-05, 0.0005286897953454814704, -7.7097293896266627655e-05, 0.0010526264265092732941, -0.00059039595483312257672, 0.0016554385683792412036, -0.00081576048305276229605, 0.0024720344257711523994, -0.0010712973259885414171, 0.0038707551676397940026, 0.00035560747645158063447, 0.073630880141617449652, 0.14661407056075492772, -0.078085169269020981986, -0.1085137050343965015, 0.047500582381204692339, 0.017874880158738615243, -0.02261152729082782642, 0.17893430052470793434, 0.34360192665262856426, 0.053606962467575569597, -0.026329075153777581342, 0.11186902796209152733, 0.01673664825244114418, -0.032569655570580113846}, { /* b */ 0, 0.053914155213885539553, 0.015830023390450698173, 0.020072501148854504649, 0.012655482483289737239, 0.020659117037705176934, -0.036430595746206329011, -0.092725103952862042433, -0.087702484986157402957, -0.071331118872211551896, -0.055194423238813516974, 0.0030397885680127911812, -0.037054498365218790923, -0.00066159090580941715132, 0.03453582545144551208, -0.079728062440387326149, -0.016901163871901880853, -0.031621694144279288707, -0.010376069900994155937, -0.020804253498749036844, -0.062761266384006586527, -0.03055738570310884139, -0.034919971965419183135, 0.0067210583352961261738, -0.018044902997532696887, -0.012390824741873029957, -0.034925941218427729307, 0.0019679796761651324744, -0.046916920430073449921, -0.001926393056322917019, -0.043422184307362332589}, }, { /* right */ { /* a */ -0.00012554898192080455157, 0.00017247319621539056113, -0.00052640243619356957838, 0.00078473489119584155516, -0.0010021108972691795957, 0.0013892594930291386757, -0.0019935503377168503278, 0.0019212312861796600715, -0.0028198965807725573374, 0.0034947162689657335077, -0.0040898955417896856734, 0.0051162537699099217003, -0.004885681522894154416, 0.08688474323844917746, 0.15813922660799484277, -0.11585092003650954151, -0.095210034436674195746, 0.0056687868211797304285, -0.027443531844821480309, 0.004389007744525982857, 0.16430947455392352907, 0.31363566378326407369, 0.056519924958118465674, -0.014416914733167852242, 0.059496911787165755736, -0.067927300887186875533, -0.10596882274465810325, -0.14491118769143784828, -0.16207943488078788152, -0.10543191067505575109, -0.061618897190486243698}, { /* b */ 0, 0.12235116841116192021, 0.085685636739992132593, 0.15071367068084445817, 0.11999752191271674528, 0.096732633326932923601, 0.097546664174340963482, 0.044232293409446080124, 0.1363900499191263993, 0.017644008448738056349, -0.14868778347587457977, 0.045368560833557475265, -0.046122428467992582224, 0.01830430837505836808, 0.13364735242459227504, 0.014238310704218614527, 0.036885293430335579223, -0.087165827746189125658, -0.0012216042663201753804, -0.0089679957372733667964, -0.014654928771533435455, -0.0018582758058304105903, -0.053026415433481702277, 0.032246281499307472007, 0.023017491024904506575, 0.039495641088039872002, -0.0061943089637748680043, 0.0029509240232947725295, -0.047081833601529801681, 0.026892462378347564006, -0.011464508826155780929}, }, }, { /* 175 deg */ { /* left */ { /* a */ 0.00014791617587631145092, 0.000285910551379997492, 0.00012692619729554049804, 0.00040438895197725276999, 0.00029066876152533671629, 0.00016507225739092941949, 0.00040071421306131515833, 0.00027735693519659234546, 0.00081157671666387543041, -0.00048502720052107117267, 0.0016187447863386097632, -0.00064023663697010402274, 0.0026127689616017857333, -0.001428850716564400436, 0.0036199114237731029424, -0.00021464509485785707231, 0.075591000634582516948, 0.14738894320017598139, -0.090538848975703356547, -0.13055765949530895309, 0.032117835465639288373, 0.016143228745123250345, -0.038226437773861143832, 0.17392064687423575142, 0.37274723141852289521, 0.040910440487311454383, -0.08476188187521438433, 0.062153593309993704352, -0.044583141086268485154, -0.12590025666951026873, -0.067260170498982529974}, { /* b */ 0, 0.11842983119354777433, 0.099103374896943041694, 0.12024966287153826539, 0.063220438431613179553, 0.14988272645351241597, 0.07228893489249349491, -0.10464217060759950506, -0.082634139336214273985, -0.10798282870583958415, -0.043442174670269007031, 0.039613032465045383557, 0.022400956780355141262, 0.040843572178851650367, 0.038353247796031608718, -0.04998345091756367653, -0.049227045004901492931, 0.0015240723438836312198, 0.0055340797093517135607, -0.035845162634114136058, -0.04118472436785008961, -0.016152787545783975354, -0.015680433024141404719, 0.041462862682487000576, -0.042056545545322843171, 0.008567650860054343287, -0.00230326459824820029, 0.003062478046954308919, -0.045793547300658488108, -0.0049872007967452502974, -0.034906317380872797784}, }, { /* right */ { /* a */ -2.6286289642291852525e-06, -0.00017077534716653690935, 7.4272678877389209859e-05, -0.00013287330160411834831, 0.00040045161805264337107, -0.00056894292294095219487, 0.00088913424170587013716, -0.0015036768604738406322, 0.0015723919800491449432, -0.0020893795767270781361, 0.0025485069730176064529, -0.0033080076535896112133, 0.0042371007784964762055, -0.0032218224161424321994, 0.083844912285675393671, 0.1496127653714211525, -0.10289831272694256736, -0.12129415487574513044, 0.0028921886841243122854, -0.0016166957512390297755, -0.0042121147670812217681, 0.16185108144442361677, 0.31174473329193308491, 0.052425807425518416993, -0.040640843909603860395, 0.036208208063514615849, -0.0729609243242863581, -0.12242990870115746938, -0.13585684803994743652, -0.15817574423506386427, -0.085508421111451085594}, { /* b */ 0, 0.13055355297732951225, 0.12756246882044364188, 0.15909574579012766837, 0.1369194323142817471, 0.10740926008837287098, 0.049654510518590780355, 0.1251822474353236625, 0.10966935207374262085, -0.12088604357909142617, -0.085642514571738492801, 0.035567864082081318555, -0.032137217958537335483, 0.052516747987079649695, 0.11296002551350671494, 0.02020028482228879152, -0.0074679857903648533268, -0.047169535066008072555, -0.036124457824004196915, -0.0028072058675244863923, 0.015793363116794936069, -0.013593318103706682198, -0.052801939558321624169, 0.036735233879708145688, 0.018116300454979784862, 0.033374630253686560222, 0.012518645296619081847, -0.021356743399605047917, -0.026839107781398245656, 0.0027055497416701361317, 0.0080514686745915622912}, }, }, { /* 180 deg */ { /* left */ { /* a */ -3.7346135617535164419e-06, -8.984158843630088865e-05, -6.4019064466941996011e-05, 0.00017983139599295761544, -0.00036096701588926875717, 0.00041559948135705469634, -0.00073226175846888372917, 0.0010489358635856500107, -0.0014871849499012005681, 0.0015217921538472787765, -0.0020253943033149424124, 0.0024041410881373882769, -0.0027338250369914052218, 0.003546028232389620248, -0.0017319271452512392806, 0.078317721315781116398, 0.1456521503947636742, -0.10293337788602949234, -0.1375738668682491006, 0.0081216237324363959454, 0.013184690158497477941, -0.014014253666613232449, 0.14577791035449927382, 0.33195957443370960327, 0.054534511669034113623, -0.086101008923252425609, 0.0092129082075557977571, -0.084077471088312816239, -0.13684081102824682818, -0.15318119974974245268, -0.11230157584427044593}, { /* b */ 0, 0.1666384464706137658, 0.13608019535398821476, 0.20224660094906901642, 0.14926961513838893358, 0.073384972730091965754, 0.15686389072040762827, 0.096143170518754386689, -0.056347703479486407896, -0.1152601897366377498, -0.085029587197256589759, 0.060132780117322551239, 0.0069822793384761733942, 0.094093296548866611761, 0.081554016876462839813, -0.054404436604773884212, 0.021259701144760105584, -0.061703475341862205894, 0.012044605759416269347, -0.0013065382791313008559, -0.038045451921514553129, 0.00033388944627459234138, -0.0034356779476680393559, 0.021952832657257385918, 0.0026729239074668119901, 0.029827744301169373947, -0.0043862222358814935419, 0.0099212081615504717214, -0.020663956459189152665, -0.0088133274362810903879, 0.0044341780491049653107}, }, { /* right */ { /* a */ -3.7346135617535164419e-06, -8.984158843630088865e-05, -6.4019064466941996011e-05, 0.00017983139599295761544, -0.00036096701588926875717, 0.00041559948135705469634, -0.00073226175846888372917, 0.0010489358635856500107, -0.0014871849499012005681, 0.0015217921538472787765, -0.0020253943033149424124, 0.0024041410881373882769, -0.0027338250369914052218, 0.003546028232389620248, -0.0017319271452512392806, 0.078317721315781116398, 0.1456521503947636742, -0.10293337788602949234, -0.1375738668682491006, 0.0081216237324363959454, 0.013184690158497477941, -0.014014253666613232449, 0.14577791035449927382, 0.33195957443370960327, 0.054534511669034113623, -0.086101008923252425609, 0.0092129082075557977571, -0.084077471088312816239, -0.13684081102824682818, -0.15318119974974245268, -0.11230157584427044593}, { /* b */ 0, 0.1666384464706137658, 0.13608019535398821476, 0.20224660094906901642, 0.14926961513838893358, 0.073384972730091965754, 0.15686389072040762827, 0.096143170518754386689, -0.056347703479486407896, -0.1152601897366377498, -0.085029587197256589759, 0.060132780117322551239, 0.0069822793384761733942, 0.094093296548866611761, 0.081554016876462839813, -0.054404436604773884212, 0.021259701144760105584, -0.061703475341862205894, 0.012044605759416269347, -0.0013065382791313008559, -0.038045451921514553129, 0.00033388944627459234138, -0.0034356779476680393559, 0.021952832657257385918, 0.0026729239074668119901, 0.029827744301169373947, -0.0043862222358814935419, 0.0099212081615504717214, -0.020663956459189152665, -0.0088133274362810903879, 0.0044341780491049653107}, }, } }; #endif lmms-1.1.3/plugins/LadspaEffect/caps/interface.cc000066400000000000000000000066131247673406200217040ustar00rootroot00000000000000/* interface.cc Copyright 2004-11 Tim Goetze http://quitte.de/dsp/ LADSPA descriptor factory, host interface. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA or point your web browser to http://www.gnu.org. */ /* LADSPA ID ranges 1761 - 1800 and 2581 - 2660 (2541 - 2580 donated to artemio@kdemail.net) */ #include #include "basics.h" #include "Cabinet.h" #include "Chorus.h" #include "Phaser.h" #include "Sin.h" #include "Lorenz.h" #include "Roessler.h" #include "Reverb.h" #include "Compress.h" #include "Click.h" #include "Eq.h" #include "Clip.h" #include "White.h" #include "SweepVF.h" #include "VCO.h" #include "Amp.h" #include "HRTF.h" #include "Pan.h" #include "Scape.h" #include "ToneStack.h" #include "Descriptor.h" #define N 39 static DescriptorStub * descriptors [N]; /*static inline void seed() { static struct timeval tv; gettimeofday (&tv, 0); srand (tv.tv_sec ^ tv.tv_usec); }*/ extern "C" { __attribute__ ((constructor)) void caps_so_init() { DescriptorStub ** d = descriptors; *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); *d++ = new Descriptor(); /* make sure N is correct */ assert (d - descriptors == N); //seed(); } __attribute__ ((destructor)) void caps_so_fini() { for (ulong i = 0; i < N; ++i) delete descriptors[i]; } /* /////////////////////////////////////////////////////////////////////// */ const LADSPA_Descriptor * ladspa_descriptor (unsigned long i) { if (i < N) return descriptors[i]; return 0; } }; /* extern "C" */ lmms-1.1.3/plugins/LadspaEffect/caps/waves/000077500000000000000000000000001247673406200205545ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/caps/waves/click.h000066400000000000000000001017201247673406200220130ustar00rootroot00000000000000float click [] = { -0.013062, -0.013062, -0.012817, -0.011078, -0.031097, -0.266479, -0.610718, -0.255005, 0.698975, 0.999969, 0.505188, -0.724579, -1.000000, -0.493225, 0.532135, 0.789459, 0.131744, -0.270599, -0.080780, -0.065796, 0.584381, 0.718567, -0.355316, -0.760559, -0.649994, -0.039032, 0.442017, 0.700043, 0.434845, -0.556427, -1.000000, -0.400391, 0.590729, 0.999969, 0.999969, 0.592896, -0.248932, -0.662750, -0.074615, 0.424774, 0.274933, -0.416504, -0.772736, -0.359833, -0.218140, -0.254456, -0.379547, -0.768280, -0.707428, 0.108124, 0.755127, 0.680847, 0.429352, 0.126129, -0.424316, -0.451813, 0.197510, 0.862762, 0.964508, 0.263824, -0.383057, -0.753571, -0.848297, -0.491425, -0.042114, -0.222504, -0.664490, -0.690155, -0.227905, 0.286682, 0.742981, 0.812225, 0.326691, 0.182770, 0.381195, 0.536194, 0.446930, 0.085754, -0.650604, -1.000000, -1.000000, -0.774658, -0.152191, -0.112122, -0.416290, -0.491547, -0.253235, 0.241760, 0.749847, 0.618042, 0.338440, 0.431335, 0.773712, 0.936890, 0.752563, 0.291595, -0.206970, -0.552460, -0.447449, -0.152069, -0.315735, -0.891846, -1.000000, -1.000000, -0.682281, 0.066925, 0.477264, 0.447144, 0.209167, 0.149994, 0.374176, 0.621185, 0.597046, 0.315826, 0.034210, -0.004089, 0.084534, 0.127075, 0.060608, -0.134949, -0.275421, -0.347870, -0.505371, -0.618835, -0.443878, -0.217682, -0.157898, -0.241058, -0.424103, -0.494690, -0.286438, 0.111542, 0.487793, 0.654907, 0.571869, 0.484650, 0.413208, 0.254089, 0.136414, 0.021118, -0.223724, -0.366364, -0.290771, -0.126251, -0.080048, -0.175262, -0.290100, -0.281403, -0.071808, 0.078613, 0.216339, 0.275787, 0.223938, 0.178131, 0.162659, 0.110779, 0.104553, 0.158661, 0.208252, 0.271484, 0.256531, 0.153046, 0.068054, -0.009003, -0.116119, -0.155304, -0.099213, 0.066589, 0.293732, 0.392303, 0.313416, 0.196320, 0.123932, 0.145874, 0.279053, 0.291016, 0.081818, -0.092133, -0.090363, 0.030029, 0.099762, -0.021912, -0.133942, -0.025299, 0.257782, 0.466980, 0.406006, 0.150085, -0.007385, -0.027588, 0.048920, 0.128998, 0.058868, -0.066589, -0.146759, -0.168427, -0.119751, -0.087677, -0.082581, -0.029694, -0.041138, -0.139984, -0.156036, -0.033325, 0.164612, 0.331726, 0.320435, 0.205811, 0.209717, 0.275909, 0.240479, 0.081238, -0.104828, -0.239624, -0.286652, -0.254120, -0.304688, -0.428223, -0.479248, -0.534729, -0.453003, -0.144928, -0.001709, 0.059448, 0.016937, -0.127991, -0.186432, -0.122986, 0.086090, 0.278351, 0.258026, 0.172882, -0.032043, -0.267242, -0.289276, -0.293365, -0.288971, -0.256073, -0.212250, -0.214783, -0.182709, -0.149170, -0.132599, -0.221649, -0.233063, 0.002472, 0.208008, 0.119659, -0.018250, -0.182861, -0.267731, -0.164001, -0.052063, 0.009979, 0.058472, 0.147156, 0.111298, 0.017426, -0.067780, -0.049835, 0.002167, -0.028259, 0.003418, 0.023743, -0.056702, -0.074066, -0.070984, -0.075439, -0.056915, -0.189575, -0.324524, -0.241882, -0.051514, 0.075623, 0.160095, 0.094238, 0.004425, 0.010193, 0.032898, 0.040222, 0.163605, 0.273682, 0.192261, -0.019989, -0.217682, -0.327728, -0.337372, -0.227386, -0.043945, 0.107788, 0.244690, 0.226227, -0.034332, -0.252106, -0.364136, -0.377136, -0.246277, -0.021973, 0.194763, 0.300110, 0.295532, 0.246246, 0.198425, 0.209991, 0.272064, 0.249451, 0.078094, -0.143616, -0.276459, -0.257782, -0.228638, -0.161224, -0.006012, 0.169342, 0.267456, 0.246094, 0.232147, 0.290436, 0.280670, 0.220886, 0.162811, 0.187286, 0.178223, 0.036804, -0.043304, -0.098694, -0.101990, 0.008698, 0.102844, 0.132050, 0.142578, 0.152924, 0.058960, -0.074615, -0.079041, 0.026123, 0.136322, 0.253510, 0.382782, 0.447357, 0.419800, 0.294952, 0.129059, 0.004028, -0.119781, -0.257538, -0.320526, -0.211609, -0.054565, 0.012085, -0.016663, 0.006592, 0.144958, 0.193237, 0.072174, -0.018951, 0.038483, 0.085175, -0.023407, -0.089661, -0.029999, -0.023956, -0.079498, -0.135223, -0.154205, -0.095276, -0.031830, -0.105988, -0.252563, -0.284424, -0.153198, 0.017273, 0.073456, 0.072571, 0.175751, 0.222260, 0.105316, -0.053345, -0.180115, -0.192932, -0.185211, -0.167511, -0.079529, -0.070007, -0.151276, -0.215210, -0.206390, -0.133820, -0.099060, -0.082855, 0.047852, 0.108429, 0.014099, -0.049377, -0.050751, -0.081207, -0.060944, -0.028564, -0.124420, -0.139526, -0.033508, 0.054108, 0.042664, -0.004669, -0.069611, -0.105774, -0.090881, -0.128601, -0.090027, -0.012634, 0.004578, 0.046387, 0.085144, 0.055511, 0.036469, 0.001770, -0.019867, 0.016998, 0.031891, 0.089935, 0.066254, -0.069183, -0.020081, 0.046356, 0.005554, -0.023224, -0.042847, -0.133057, -0.104004, 0.065674, 0.146484, 0.145782, 0.006897, -0.059509, 0.070923, 0.058319, -0.002655, 0.000641, -0.036011, 0.049988, 0.076752, 0.016998, 0.063049, 0.105835, 0.041870, -0.092072, -0.154358, -0.081879, 0.089905, 0.090820, 0.054047, -0.110565, -0.285980, -0.219116, -0.103058, 0.083405, 0.192200, 0.124146, 0.080994, 0.118896, 0.231659, 0.259644, 0.175018, 0.110840, 0.005096, -0.156128, -0.202209, -0.167572, -0.145050, -0.126068, -0.139221, -0.039856, 0.078674, 0.062866, -0.069672, -0.143311, -0.049530, 0.082611, 0.142487, 0.039612, -0.035736, -0.006287, 0.017181, 0.013580, -0.019043, -0.017303, 0.007904, -0.073944, -0.121704, -0.065369, -0.098083, -0.063568, 0.056885, 0.083984, 0.148987, 0.298431, 0.253815, 0.052643, -0.139740, -0.217743, -0.073181, 0.097351, 0.124786, 0.091156, 0.056152, -0.007446, 0.048553, 0.129333, 0.021118, -0.003235, 0.093872, 0.080658, 0.025482, -0.037598, -0.055481, -0.078796, -0.130676, -0.140930, -0.126770, -0.048004, 0.026093, 0.035767, 0.049957, 0.009247, -0.076599, -0.066101, 0.002747, 0.076813, 0.173492, 0.091949, -0.071960, -0.080902, -0.061157, -0.061066, -0.073029, -0.070251, -0.008545, 0.035187, -0.036194, -0.086456, -0.158691, -0.199036, -0.150177, -0.099030, -0.027802, -0.001465, 0.003662, 0.089020, 0.056122, -0.108551, -0.125610, -0.056610, -0.053284, -0.128998, -0.166504, -0.124725, -0.095459, -0.088531, -0.087433, -0.065399, -0.084045, -0.053284, -0.006317, -0.008698, 0.025879, -0.019714, -0.055511, -0.076874, -0.084442, -0.111450, -0.097198, -0.040924, -0.047729, 0.025604, 0.077301, 0.027100, -0.052612, -0.046265, 0.021271, 0.022186, -0.060669, -0.109283, -0.022858, 0.126740, 0.199036, 0.255798, 0.210114, 0.167450, 0.034515, -0.140167, -0.106354, -0.056549, -0.016449, 0.092529, 0.082977, 0.035645, 0.066132, 0.113098, 0.123657, 0.150513, 0.123840, 0.125702, 0.146637, 0.131683, 0.114014, 0.019806, 0.017670, 0.017914, -0.029480, 0.074280, 0.118622, 0.049805, 0.057922, 0.033569, 0.028870, 0.095551, 0.030121, -0.080963, -0.042938, 0.091400, 0.075287, 0.011597, -0.023834, -0.035278, -0.009552, -0.030884, -0.058044, -0.038818, 0.016785, 0.037354, -0.004852, -0.048157, -0.051849, 0.014618, 0.067535, 0.060547, 0.029022, -0.019257, -0.078705, -0.057495, 0.056549, -0.016022, -0.145416, -0.142548, -0.124207, -0.015961, 0.118011, 0.059906, -0.050842, -0.037537, -0.042084, -0.060059, -0.034454, -0.011414, 0.040009, 0.084778, 0.039246, -0.029663, -0.059631, -0.023285, 0.033173, 0.044617, -0.023254, -0.044983, -0.039337, -0.037506, 0.024750, 0.034637, -0.024902, -0.007019, -0.006195, 0.021271, 0.067657, 0.043182, 0.004089, -0.043091, -0.077576, -0.118225, -0.100006, -0.084015, -0.117065, -0.140533, -0.091675, 0.001709, 0.019196, -0.053619, -0.090454, -0.007599, 0.064209, 0.048920, -0.077576, -0.158813, 0.000214, 0.086823, 0.027100, 0.065979, 0.028351, -0.032745, -0.089844, -0.026672, 0.033234, -0.002045, -0.068665, -0.114441, -0.152344, -0.166840, -0.129181, -0.077667, -0.001678, 0.082428, 0.123138, 0.048737, -0.080750, -0.094452, -0.066895, -0.061401, -0.009613, -0.021729, 0.015442, 0.051270, -0.017273, -0.013519, 0.007172, -0.065338, -0.133209, -0.104095, -0.069153, -0.047638, -0.011871, -0.043182, -0.056427, 0.028900, 0.031128, -0.004974, -0.057983, -0.129303, -0.086914, -0.039917, -0.016266, 0.033936, 0.017426, 0.021576, 0.037964, -0.003693, -0.009979, 0.064392, 0.022491, -0.075836, -0.030457, 0.040741, 0.075745, 0.076447, 0.034851, -0.042816, -0.058960, -0.049591, -0.033905, -0.005127, -0.015778, -0.011963, 0.043091, 0.093231, 0.070007, 0.060211, 0.045074, 0.039642, 0.041260, 0.015594, 0.016663, 0.032867, 0.031250, 0.009583, -0.011230, 0.009247, 0.050415, 0.087524, 0.040375, -0.017792, -0.023621, -0.033478, 0.012543, 0.010864, 0.016724, 0.047638, 0.089905, 0.132141, 0.089111, 0.045471, -0.019409, -0.041229, 0.011597, -0.053101, -0.105194, -0.104187, -0.087799, -0.061951, -0.055634, 0.003082, 0.064270, 0.062744, 0.022552, 0.045837, 0.096985, 0.080139, 0.028015, -0.003204, -0.035553, -0.006714, 0.071960, 0.052155, -0.085815, -0.133209, -0.086212, -0.063507, -0.040466, -0.048065, -0.071106, -0.006256, 0.013641, 0.026611, 0.101166, 0.072357, 0.070557, 0.060333, -0.004028, -0.012787, -0.003387, 0.000793, -0.042328, -0.083740, -0.114532, -0.106598, 0.000183, 0.052155, -0.011536, -0.042480, 0.040649, 0.096161, 0.074463, 0.033417, -0.013824, 0.006500, 0.001068, 0.052094, 0.065125, 0.027496, -0.009613, -0.042542, -0.053436, -0.047607, -0.063080, -0.003693, 0.001129, -0.113068, -0.136444, -0.046387, 0.056641, 0.095581, 0.071533, 0.006836, 0.015869, 0.094147, 0.035950, -0.057190, 0.013245, 0.040802, 0.020050, -0.008636, -0.041199, -0.051025, -0.049683, -0.065826, -0.073303, -0.081909, -0.105347, -0.019348, 0.024902, 0.007904, 0.010712, -0.030792, -0.059875, -0.052521, -0.065125, -0.029419, 0.076965, 0.043243, 0.022247, 0.019684, -0.016968, 0.026611, 0.010071, -0.047852, -0.037903, -0.015839, -0.032013, -0.055054, -0.145294, -0.203003, -0.141785, -0.069946, -0.011261, 0.027435, -0.020538, -0.047455, -0.046051, -0.035400, -0.006287, 0.014496, 0.004425, 0.001251, 0.003479, 0.023132, 0.102905, 0.105377, 0.013947, -0.088074, -0.138519, -0.089172, 0.021210, 0.031830, -0.057739, -0.066895, -0.024292, 0.001801, -0.027924, -0.053284, -0.022003, 0.012726, 0.011047, -0.005920, -0.033295, -0.049042, -0.025055, 0.031738, 0.031097, 0.004059, 0.008698, 0.054688, 0.046570, -0.022980, -0.080597, -0.092163, -0.052277, -0.003967, -0.026337, -0.039886, 0.025238, 0.037323, 0.005829, -0.014282, 0.028442, 0.057098, 0.003662, -0.038483, -0.050537, -0.017151, 0.031555, -0.025391, -0.038452, -0.011871, -0.042664, 0.015411, 0.065277, 0.015594, -0.015778, -0.036652, -0.097076, -0.057983, 0.001434, 0.002991, -0.016724, -0.071564, -0.036926, 0.038452, 0.049683, 0.071075, 0.066925, 0.007935, -0.028351, -0.003754, 0.020569, -0.008881, -0.016998, -0.024841, -0.031677, 0.005615, 0.019470, -0.028290, -0.035645, -0.012756, -0.014191, -0.027496, -0.002411, -0.018066, 0.012177, 0.103668, 0.134277, 0.056885, 0.027893, -0.002533, -0.008148, 0.018707, -0.005615, 0.004822, 0.055634, 0.054718, 0.003296, -0.046875, -0.058838, -0.034149, 0.031616, 0.020233, -0.014771, -0.005981, 0.025391, 0.043091, 0.010376, 0.006866, 0.037842, 0.053589, 0.037567, 0.042938, 0.063629, -0.000092, -0.056000, -0.045074, -0.034454, -0.006531, 0.004303, -0.034882, -0.026886, 0.056580, 0.066437, 0.025757, 0.036255, 0.066376, 0.017395, -0.030701, -0.042419, -0.049744, -0.013733, 0.006653, -0.036713, -0.045166, -0.008270, 0.011841, 0.049622, 0.086792, 0.052460, 0.037872, -0.009338, -0.074890, -0.007385, 0.029053, 0.002991, -0.001862, -0.055817, -0.109833, -0.082581, -0.018097, -0.005829, -0.006561, -0.038422, -0.026855, 0.067139, 0.051575, -0.023956, 0.005768, 0.032318, -0.009094, -0.031799, -0.019714, -0.075714, -0.137512, -0.110962, -0.081360, -0.014679, -0.015259, -0.067322, -0.077271, -0.073303, -0.035583, 0.033325, 0.059540, 0.034912, 0.015411, -0.013214, -0.019135, -0.013306, -0.024170, -0.043640, -0.067596, -0.077026, -0.050446, -0.039398, -0.074158, -0.079590, -0.077148, -0.119843, -0.070496, 0.023834, 0.030396, -0.002869, -0.011810, -0.001465, 0.025299, 0.031250, 0.045990, 0.034027, -0.058624, -0.070892, -0.031067, -0.025360, -0.042572, -0.063507, -0.054352, -0.028412, -0.001923, -0.037018, -0.048157, -0.007141, -0.003357, 0.013916, 0.035767, 0.035034, 0.038391, 0.011749, -0.011780, -0.033905, -0.065521, -0.075470, -0.065491, -0.065125, -0.079376, -0.044281, -0.014130, -0.000458, 0.024017, 0.021973, -0.004120, 0.026245, 0.043976, -0.009155, -0.035187, -0.030853, -0.042633, 0.002563, 0.055603, 0.021820, -0.057800, -0.074646, -0.015411, 0.045898, 0.007233, -0.055756, -0.016113, 0.035370, 0.023315, -0.017120, -0.024292, 0.004974, 0.041718, 0.045227, -0.000793, 0.025970, 0.086670, 0.042450, -0.023834, -0.054077, -0.036926, 0.028320, 0.006622, 0.005341, 0.059265, 0.049164, 0.011841, 0.019470, 0.004242, -0.035248, -0.009949, 0.027069, 0.029419, 0.042816, 0.043671, 0.012878, 0.023865, 0.027802, -0.000854, 0.006348, 0.039337, 0.040802, -0.013275, -0.055634, -0.029480, -0.013092, -0.033936, -0.040649, -0.001404, 0.038910, 0.046722, 0.033447, -0.020294, -0.040283, -0.014923, -0.003143, -0.001312, 0.005493, 0.002899, 0.037140, 0.062469, 0.038696, 0.002747, -0.012482, -0.009827, -0.004486, -0.011780, -0.018097, -0.014862, -0.008057, -0.056702, -0.049561, 0.025269, 0.046844, 0.003296, 0.014130, 0.043182, 0.018280, 0.007294, 0.008270, -0.004517, -0.014679, -0.026764, -0.019745, -0.041779, -0.027863, 0.028412, 0.033722, 0.020264, 0.004913, -0.004578, -0.007935, -0.006226, -0.005737, -0.032074, -0.040955, -0.010468, -0.040863, -0.031433, -0.004547, -0.032654, -0.038239, 0.027496, 0.010681, -0.000702, 0.020782, -0.010376, -0.005768, 0.013733, -0.007324, -0.027466, -0.018005, -0.033600, -0.028778, -0.036316, -0.073090, -0.050781, -0.029938, -0.037567, -0.035828, -0.036163, -0.035828, -0.005249, -0.005646, -0.002289, 0.011078, -0.014038, -0.035309, 0.000061, 0.010101, -0.028961, -0.035950, -0.053802, -0.066620, -0.048981, -0.030823, -0.034515, 0.008972, 0.030731, -0.021942, -0.069214, -0.046722, -0.000854, 0.028656, -0.000580, -0.027313, -0.026886, -0.060364, -0.051880, -0.022766, -0.019531, -0.016418, -0.047089, -0.072510, -0.054871, -0.046570, -0.053772, -0.021820, 0.003204, 0.010406, 0.000793, -0.037170, -0.023926, 0.025269, 0.054657, 0.057159, 0.007996, -0.063232, -0.097137, -0.066803, -0.021606, -0.015015, -0.037842, -0.045776, -0.054840, -0.068481, -0.033081, 0.026459, 0.048157, 0.017700, -0.011230, -0.020599, -0.040405, 0.001526, 0.048492, 0.023407, -0.011658, 0.004059, 0.006165, -0.013245, 0.008118, 0.049591, 0.050262, 0.008606, -0.029175, -0.039368, 0.003937, 0.027863, -0.005646, -0.046082, -0.043152, -0.002838, 0.018341, 0.006012, -0.001282, 0.015137, 0.004425, -0.018524, -0.001343, 0.009308, 0.002350, -0.013306, -0.014832, -0.008759, 0.000671, 0.023254, 0.035645, 0.005646, -0.028717, -0.028931, -0.008484, -0.019043, -0.019928, 0.006042, 0.016083, 0.023682, 0.034363, 0.020844, 0.016235, 0.008636, 0.003601, 0.018646, 0.029480, 0.034088, 0.016327, 0.004761, -0.029022, -0.027893, -0.006836, -0.015350, -0.021820, -0.018250, -0.008026, -0.001343, 0.004669, -0.015900, -0.004303, 0.032898, 0.041046, 0.023132, 0.020844, 0.032196, 0.020355, -0.002716, 0.003662, 0.031433, 0.043213, 0.043304, -0.007507, -0.015747, 0.000916, -0.009094, 0.004852, 0.004272, 0.007507, 0.021088, 0.024017, 0.010254, 0.023987, 0.035431, 0.006561, -0.015869, -0.004791, 0.013885, 0.019440, -0.015106, -0.038666, -0.028625, -0.036438, -0.051361, -0.020905, -0.019531, -0.038666, -0.015747, -0.001587, 0.006317, 0.024994, 0.022797, 0.012726, -0.004822, 0.001404, -0.006042, 0.000732, 0.008118, -0.024506, -0.045654, -0.037537, -0.024933, -0.026733, -0.038605, -0.051971, -0.050171, -0.031372, -0.041199, -0.012268, -0.006500, -0.038208, -0.053650, -0.021118, 0.007324, 0.006561, -0.026459, -0.052338, -0.015717, -0.015106, -0.037018, -0.037720, -0.047852, -0.032562, -0.014557, -0.059265, -0.101318, -0.091644, -0.050659, -0.037628, -0.000763, 0.016144, -0.018799, -0.022827, -0.005707, -0.010712, -0.012054, -0.007019, -0.008881, -0.000702, -0.000427, -0.015594, -0.030426, -0.015778, -0.019501, -0.064423, -0.072540, -0.041229, -0.012177, -0.007294, -0.034027, -0.059723, -0.034729, -0.007629, 0.003418, -0.007751, -0.032043, -0.034149, -0.024170, 0.007233, 0.023834, 0.008575, 0.004669, -0.008148, -0.037811, -0.033783, 0.007996, 0.016602, 0.014038, 0.012238, -0.009979, -0.028748, -0.014862, 0.013000, 0.000977, -0.049530, -0.061859, -0.022247, 0.006226, 0.009369, -0.029236, -0.031128, 0.006226, 0.009399, -0.006653, 0.001190, -0.011993, -0.000916, 0.011322, -0.002350, 0.004333, 0.004517, -0.014191, -0.012177, 0.010986, 0.011566, -0.000092, -0.010651, -0.014038, -0.005280, -0.000732, -0.007935, -0.017303, -0.019073, -0.009399, 0.007935, 0.015778, 0.019073, 0.004272, -0.012726, 0.001434, 0.011963, 0.010162, 0.018555, 0.018036, 0.008789, 0.000946, 0.009552, 0.014923, 0.033722, 0.048553, 0.019989, -0.010803, -0.026733, -0.012207, 0.012512, -0.003967, -0.018097, 0.002289, 0.032410, 0.036804, 0.025970, 0.013550, 0.008301, 0.011108, 0.012421, 0.010101, 0.001404, -0.010956, 0.010498, 0.029999, 0.014221, 0.003937, 0.002563, -0.001709, -0.013428, -0.023102, -0.005188, 0.011780, 0.002655, -0.002045, 0.006348, 0.005981, -0.011841, -0.016327, -0.004486, -0.004944, -0.030151, -0.029114, -0.023376, -0.024261, -0.009857, 0.008423, 0.016235, 0.021606, 0.012054, -0.005432, -0.006744, -0.003937, -0.004974, -0.024506, -0.029541, -0.015839, -0.028381, -0.030823, -0.018036, -0.006104, -0.003998, -0.022858, -0.030975, -0.005798, -0.001709, -0.008850, -0.011780, -0.013031, -0.018921, -0.029480, -0.024689, -0.012909, -0.006104, -0.006042, -0.013763, -0.018188, -0.034576, -0.036713, -0.004517, 0.009583, -0.002106, -0.026093, -0.033875, -0.008575, 0.006226, -0.008148, -0.032654, -0.037842, -0.024811, -0.019714, -0.013062, -0.014771, -0.028992, -0.023376, -0.012695, -0.007690, -0.014343, -0.031708, -0.044586, -0.036865, -0.027985, -0.022552, -0.025208, -0.028168, -0.024933, -0.028717, -0.030212, -0.018066, -0.004547, 0.001282, -0.008148, -0.024200, -0.023834, -0.019623, -0.037048, -0.042877, -0.031952, -0.016998, -0.009338, -0.014893, -0.018280, -0.013550, -0.003418, 0.013306, 0.008606, -0.002991, -0.015350, -0.023102, -0.021118, -0.025269, -0.032654, -0.040375, -0.028992, -0.016357, -0.034027, -0.036011, -0.016022, -0.010284, -0.000793, 0.006805, 0.005096, 0.021973, 0.009796, -0.012207, -0.013489, -0.014648, -0.017120, -0.017578, -0.012329, -0.002472, 0.000397, -0.013031, -0.018890, -0.009338, -0.018280, -0.017670, -0.005920, -0.004944, -0.006073, -0.003479, 0.000610, 0.009003, 0.010559, 0.011475, -0.003693, -0.016357, -0.006378, -0.007507, 0.000366, 0.011322, 0.012390, 0.004639, -0.002655, 0.003754, 0.027283, 0.016052, -0.008575, -0.005615, 0.004303, 0.013550, 0.018677, 0.003662, -0.022858, -0.028168, -0.017975, -0.002197, -0.012360, -0.022736, -0.016144, 0.003784, 0.018951, 0.008270, -0.005707, -0.008514, 0.007446, 0.015717, 0.012177, 0.011414, 0.010590, 0.013367, 0.008331, 0.002686, -0.003876, -0.009857, -0.024902, -0.021973, -0.014557, -0.012756, -0.001251, 0.004303, 0.005402, 0.009460, 0.002960, -0.009003, -0.003784, 0.009430, 0.008484, 0.006012, 0.014130, 0.008148, -0.002441, 0.000397, 0.002686, -0.000214, -0.014557, -0.026489, -0.014587, -0.009918, -0.006805, -0.001221, -0.004089, -0.003601, -0.006226, -0.020142, -0.023315, -0.005341, 0.012421, 0.008545, -0.002472, -0.000366, 0.000580, -0.020508, -0.033752, -0.029205, 0.000031, 0.017365, 0.012390, -0.008514, -0.017181, -0.018311, -0.016663, -0.008301, -0.013519, -0.010376, 0.011841, 0.002930, -0.016510, -0.025116, -0.029968, -0.015289, -0.003082, -0.007355, -0.010590, -0.012451, -0.021759, -0.028351, -0.040375, -0.041840, -0.027374, -0.014343, -0.018005, -0.024628, -0.018188, -0.009644, -0.003723, -0.009644, -0.005341, 0.003204, 0.002045, 0.007629, -0.003815, -0.013062, -0.010193, -0.003540, -0.012268, -0.019501, -0.025330, -0.040314, -0.039520, -0.035187, -0.034180, -0.032257, -0.036285, -0.029572, -0.008575, -0.002045, -0.012787, -0.010559, -0.006317, -0.005371, -0.003693, 0.000519, 0.000854, -0.010101, -0.017090, -0.023499, -0.034790, -0.033569, -0.025818, -0.007507, 0.004913, -0.004089, -0.011780, -0.008759, -0.004150, -0.002411, -0.004059, -0.002960, -0.007416, -0.012177, -0.015289, -0.024750, -0.033478, -0.035461, -0.029419, -0.022003, -0.013306, -0.006958, -0.007996, -0.011658, -0.013916, -0.017303, -0.011261, -0.000061, 0.009674, -0.001404, -0.013245, -0.006226, 0.010773, 0.012482, 0.002075, -0.006165, -0.007172, -0.014618, -0.021759, -0.029266, -0.024841, -0.018005, -0.015350, -0.010590, -0.002075, -0.000427, -0.009308, -0.007721, 0.007782, 0.010223, -0.001434, -0.007141, -0.005127, 0.000458, 0.005920, -0.006500, -0.018921, -0.012726, -0.007416, -0.009033, -0.015900, -0.021088, -0.017761, -0.007172, 0.002289, 0.004333, 0.003174, -0.000427, -0.001678, 0.002289, 0.004974, 0.009552, 0.002380, -0.014374, -0.013824, -0.005890, 0.003998, -0.002014, -0.013367, -0.010315, -0.002380, 0.001129, -0.001160, -0.001404, -0.001190, -0.001526, 0.001007, 0.003082, 0.006836, 0.008820, 0.000153, -0.008972, -0.013184, -0.014343, -0.009430, 0.003571, 0.000214, -0.013214, -0.011261, -0.001312, 0.003754, 0.002899, -0.000946, 0.000641, 0.006195, 0.011322, 0.013245, 0.004120, -0.001862, 0.003448, -0.003998, -0.018250, -0.020447, -0.012054, -0.001129, 0.005615, 0.000366, -0.010773, -0.015564, -0.014343, -0.011566, -0.001862, 0.015198, 0.010162, -0.002991, -0.011261, -0.014008, -0.009399, -0.007416, -0.005219, -0.015411, -0.026123, -0.031647, -0.035095, -0.028290, -0.016052, -0.008423, 0.005615, 0.007233, 0.001984, 0.000610, -0.002319, -0.006866, -0.002045, 0.008636, 0.003754, -0.008575, -0.016907, -0.011536, -0.000336, -0.003998, -0.022400, -0.038818, -0.039948, -0.029755, -0.016785, -0.009705, -0.006805, -0.004303, -0.004578, 0.000610, 0.003265, 0.004669, 0.009857, 0.002899, -0.009552, -0.020294, -0.019928, -0.016083, -0.013214, -0.015503, -0.017700, -0.026581, -0.025879, -0.020721, -0.018066, -0.015503, -0.007690, -0.002258, -0.009827, -0.018951, -0.014099, 0.002808, -0.002075, -0.026947, -0.024506, -0.009277, -0.004822, -0.011108, -0.018372, -0.022125, -0.023804, -0.016144, -0.012726, -0.012939, -0.015900, -0.017456, -0.020294, -0.023834, -0.023499, -0.018311, -0.011108, -0.010162, -0.014404, -0.022705, -0.025330, -0.021057, -0.012543, -0.008575, -0.014557, -0.022614, -0.021637, -0.015259, -0.015778, -0.022156, -0.021210, -0.009552, -0.002014, -0.002991, -0.004242, -0.007141, -0.006256, 0.002106, 0.003235, -0.003021, -0.017426, -0.015259, -0.001312, -0.001801, -0.014191, -0.020935, -0.021057, -0.015533, -0.015717, -0.018311, -0.010223, -0.008209, -0.012451, -0.011780, -0.009735, -0.007355, -0.002075, -0.002441, -0.004578, -0.003204, -0.001556, 0.004944, 0.002563, -0.006073, -0.011993, -0.016632, -0.019226, -0.006805, -0.000183, -0.006500, -0.015717, -0.014038, -0.000397, 0.008484, 0.005920, -0.000946, -0.011963, -0.019440, -0.017731, -0.018921, -0.017548, -0.013885, -0.005188, -0.006653, -0.008759, -0.006958, -0.001801, 0.008545, 0.005371, -0.000854, 0.009125, 0.016113, 0.010284, 0.000671, 0.000427, 0.001129, -0.002319, -0.002441, -0.004639, -0.016052, -0.027039, -0.020142, -0.014404, -0.010834, -0.014771, -0.016449, -0.005493, 0.006958, 0.014160, 0.011536, 0.011383, 0.012939, 0.011261, 0.014923, 0.015015, 0.006653, -0.001007, -0.004852, -0.007660, -0.005371, -0.011505, -0.018555, -0.018219, -0.016571, -0.016296, -0.012878, -0.010834, -0.004333, 0.006073, 0.015350, 0.016510, 0.006653, 0.004761, 0.005463, 0.004578, 0.005615, -0.005066, -0.016602, -0.022308, -0.018890, -0.014191, -0.016937, -0.015198, -0.017548, -0.023987, -0.020905, -0.009735, 0.002838, 0.008484, 0.005280, 0.002258, -0.002075, -0.007416, -0.008423, 0.001434, 0.002167, -0.007843, -0.008911, -0.010223, -0.019226, -0.026428, -0.023224, -0.016083, -0.008850, -0.007965, -0.013062, -0.014496, -0.011932, -0.012146, -0.006561, -0.003876, -0.009155, -0.013916, -0.009735, -0.004211, -0.001007, -0.003510, -0.014709, -0.022949, -0.021484, -0.018311, -0.014404, -0.010406, -0.010162, -0.011993, -0.018890, -0.022430, -0.016144, -0.008514, -0.009796, -0.012207, -0.007843, -0.007629, -0.009552, -0.012970, -0.012115, -0.012360, -0.016022, -0.018768, -0.015167, -0.009979, -0.018616, -0.029205, -0.025421, -0.019531, -0.024902, -0.026733, -0.019989, -0.008331, -0.004913, -0.007202, -0.002045, -0.007599, -0.011841, -0.006897, -0.009277, -0.016449, -0.015991, -0.009674, -0.008331, -0.008636, -0.023621, -0.036377, -0.031158, -0.025909, -0.023895, -0.022827, -0.025177, -0.027008, -0.023590, -0.016907, -0.007324, -0.000671, -0.000610, -0.002167, -0.003876, -0.002350, 0.000061, -0.001801, -0.008392, -0.008636, -0.007385, -0.014893, -0.015808, -0.013458, -0.015198, -0.015320, -0.011108, -0.010956, -0.016937, -0.018463, -0.015839, -0.013367, -0.010223, -0.006500, -0.000977, -0.001221, -0.005981, -0.010162, -0.005768, 0.003784, 0.003204, -0.008118, -0.015747, -0.014709, -0.012238, -0.012604, -0.008453, 0.000916, 0.003510, 0.000305, -0.000305, 0.003998, 0.001526, 0.003571, 0.006500, 0.003937, -0.001678, -0.004547, -0.003815, -0.001740, -0.007568, -0.011597, -0.011841, -0.015015, -0.013550, -0.012543, -0.006470, -0.002197, -0.006775, -0.002075, 0.008118, 0.005157, -0.002197, -0.004211, -0.000397, 0.005280, 0.001587, -0.003357, 0.001526, 0.003876, 0.008209, 0.004669, -0.004700, -0.007050, -0.007294, -0.005280, -0.003357, -0.007416, -0.008423, -0.002808, -0.000336, -0.005280, -0.012787, -0.008026, 0.002869, 0.000336, -0.000580, -0.000488, -0.002960, 0.002380, 0.002991, -0.001526, -0.002197, -0.006226, -0.009552, -0.007568, -0.001160, 0.000153, 0.001923, -0.005798, -0.014557, -0.013367, -0.006805, -0.000610, 0.006104, 0.003143, -0.001343, -0.000610, 0.001526, 0.005249, 0.000244, -0.009064, -0.010223, -0.010651, -0.012787, -0.010101, -0.012970, -0.016266, -0.014404, -0.009064, -0.006287, -0.005219, -0.004089, -0.007629, -0.009796, -0.011566, -0.007294, -0.001251, -0.005035, -0.015533, -0.016998, -0.011566, -0.005981, -0.007782, -0.008026, -0.007599, -0.011230, -0.014740, -0.016907, -0.019073, -0.020477, -0.016113, -0.012146, -0.009918, -0.009186, -0.020874, -0.031067, -0.026611, -0.017303, -0.009125, -0.004517, -0.008972, -0.015198, -0.019714, -0.022827, -0.020172, -0.020660, -0.021454, -0.022186, -0.023254, -0.018036, -0.010864, -0.016266, -0.027252, -0.028656, -0.022003, -0.016174, -0.017212, -0.020203, -0.025421, -0.025757, -0.021362, -0.015717, -0.008392, -0.006927, -0.019958, -0.031830, -0.027588, -0.021820, -0.019470, -0.021454, -0.024261, -0.020508, -0.019043, -0.015411, -0.010132, -0.007294, -0.004272, -0.002014, -0.003448, -0.009735, -0.011780, -0.013611, -0.019714, -0.020172, -0.016846, -0.018127, -0.017578, -0.018402, -0.018860, -0.013245, -0.007629, -0.010132, -0.009064, -0.005676, -0.004395, -0.006256, -0.011292, -0.013367, -0.003784, 0.003387, 0.001434, 0.000336, -0.004059, -0.006592, -0.003845, -0.003815, -0.002472, -0.004150, -0.012390, -0.016998, -0.015350, -0.013214, -0.012360, -0.016418, -0.014496, 0.000580, 0.008881, 0.005951, -0.000122, -0.006378, -0.008850, -0.005432, 0.001007, 0.002441, -0.002869, -0.007690, -0.006866, -0.001434, 0.000641, -0.004303, -0.006592, -0.005096, -0.005280, -0.002838, 0.000946, 0.001160, -0.001465, -0.004822, -0.006439, 0.003113, 0.008392, 0.001556, -0.005768, -0.010437, -0.009705, -0.006042, -0.000183, 0.002869, -0.003876, -0.012512, -0.007843, 0.003845, 0.009796, 0.009583, 0.005035, 0.005737, 0.006104, 0.001007, 0.003143, 0.004791, 0.003143, 0.001068, -0.005798, -0.008423, -0.002563, 0.001678, -0.002747, -0.008911, -0.010468, -0.002808, 0.005646, 0.002075, -0.003235, -0.006866, -0.007019, -0.001160, 0.002167, 0.001343, -0.000519, -0.005615, -0.009399, -0.009613, -0.013336, -0.015533, -0.016418, -0.012970, -0.011078, -0.015320, -0.020721, -0.014709, -0.002625, -0.004547, -0.011932, -0.007599, -0.000671, 0.000336, -0.002747, -0.008148, -0.012939, -0.017944, -0.020538, -0.018494, -0.014221, -0.013824, -0.019470, -0.023163, -0.020203, -0.016968, -0.017578, -0.018372, -0.015533, -0.012726, -0.010101, -0.011017, -0.015533, -0.014130, -0.005890, -0.002625, -0.003693, -0.005676, -0.009369, -0.013184, -0.013855, -0.010925, -0.013184, -0.020294, -0.029968, -0.031219, -0.023285, -0.019897, -0.019623, -0.016327, -0.013855, -0.016724, -0.020813, -0.016602, -0.010651, -0.011505, -0.016449, -0.019623, -0.019440, -0.016449, -0.014465, -0.010742, -0.011658, -0.013184, -0.011017, -0.009277, -0.010284, -0.015991, -0.017731, -0.017487, -0.021362, -0.018799, -0.017151, -0.020599, -0.023529, -0.024567, -0.026733, -0.024414, -0.019440, -0.019257, -0.022400, -0.019501, -0.015320, -0.016235, -0.016815, -0.011505, -0.003601, -0.002014, -0.007141, -0.013214, -0.009186, -0.001862, -0.000214, -0.003784, -0.008972, -0.011871, -0.012512, -0.010986, -0.008789, -0.010010, -0.014496, -0.018829, -0.018005, -0.018677, -0.015625, -0.011108, -0.011902, -0.012970, -0.009338, -0.003265, -0.002136, -0.004608, -0.001556, 0.001312, -0.000580, -0.000793, -0.001526, -0.003998, -0.006653, -0.008698, -0.007599, -0.002319, -0.002045, -0.005280, -0.009521, -0.008911, -0.003693, -0.002594, -0.002319, 0.003296, 0.004761, -0.001495, -0.008972, -0.011627, -0.002655, 0.006042, 0.002441, -0.002960, -0.006226, -0.012512, -0.013763, -0.004333, 0.002838, 0.004913, 0.000854, -0.008057, -0.007050, 0.005707, 0.013733, 0.010284, 0.002319, 0.001495, 0.007111, 0.002594, -0.005615, -0.010315, -0.011383, -0.011566, -0.004608, 0.003754, 0.001587, -0.008179, -0.013885, -0.005798, 0.004761, 0.004547, -0.000122, -0.002960, -0.001862, 0.002350, 0.002075, -0.000458, -0.002045, 0.000488, 0.003113, -0.000061, -0.005127, -0.008575, -0.013306, -0.017914, -0.019897, -0.016449, -0.010254, -0.004974, -0.003845, -0.003754, -0.007477, -0.011780, -0.007965, 0.001221, 0.006195, 0.001282, -0.008453, -0.015778, -0.012177, -0.005676, -0.002319, -0.003021, -0.009064, -0.014832, -0.016693, -0.014740, -0.011658, -0.009583, -0.010559, -0.012421, -0.005920, -0.002563, -0.007324, -0.013000, -0.013031, -0.008057, -0.007965, -0.011230, -0.015594, -0.017822, -0.019257, -0.018280, -0.014008, -0.012604, -0.016388, -0.018280, -0.014099, -0.008820, -0.009674, -0.010742, -0.008087, -0.006287, -0.008667, -0.010742, -0.011505, -0.013489, -0.010864, -0.007874, -0.013336, -0.020386, -0.019928, -0.016479, -0.014038, -0.014313, -0.017303, -0.017822, -0.017761, -0.018524, -0.015137, -0.011749, -0.012238, -0.014832, -0.018097, -0.018616, -0.015564, -0.014252, -0.014923, -0.013306, -0.012817, -0.014618, -0.017059, -0.019623, -0.019012, -0.016052, -0.011261, -0.007538, -0.005249, -0.005554, -0.007416, -0.005096, -0.004547, -0.011108, -0.017639, -0.018829, -0.017639, -0.018921, -0.019073, -0.016968, -0.013031, -0.008179, -0.004395, -0.005066, -0.005341, -0.004059, -0.004120, -0.005463, -0.008698, -0.007538, -0.003723, -0.001068, -0.003448, -0.007507, -0.007477, -0.005096, -0.005493, -0.009277, -0.014526, -0.014587, -0.009613, -0.004333, -0.003082, -0.003845, -0.004089, -0.004730, -0.003082, 0.002167, 0.002960, -0.001587, -0.004944, -0.004333, 0.000336, 0.002686, -0.000610, -0.007721, -0.010895, -0.006561, -0.003143, 0.000214, 0.004242, 0.003082, -0.001221, -0.002747, -0.000305, 0.004822, 0.005341, 0.000702, -0.001343, -0.000519, -0.001678, -0.004944, -0.006104, -0.004913, -0.003998, -0.005066, -0.005188, -0.002289, -0.000214, -0.000061, -0.000031, 0.000732, 0.002563, 0.005432, 0.004272, 0.001160, 0.000244, -0.000580, -0.001251, -0.002228, -0.003143, -0.001953, -0.001740, -0.004669, -0.006592, -0.006805, -0.005981, -0.004425, -0.005737, -0.005920, -0.004120, -0.001984, -0.000092, 0.000702, 0.001282, 0.001068, 0.001862, 0.001923, 0.000763, -0.001038, -0.004578, -0.007111, -0.007355, -0.005035, -0.003113, -0.004395, -0.006500, -0.006958, -0.005951, -0.004181, -0.005341, -0.006348, -0.004761, -0.003723, -0.003235, -0.003510, -0.002869, -0.002136, -0.003784, -0.005585, -0.005463, -0.004761, -0.003998, -0.003876, -0.004700, -0.004578, -0.005066, -0.006714, -0.007812, -0.007568, -0.005737, -0.004028, -0.004517, -0.005341, -0.005981, -0.006317, -0.005310, -0.005066, -0.006348, -0.006989, -0.005737, -0.005005, -0.006042, -0.005920, -0.004150, -0.003784, -0.005127, -0.006653, -0.006500, -0.003906, -0.002594, -0.003967, -0.005798, -0.006927, -0.006927, -0.006836, -0.006378, -0.005188, -0.004059, -0.003906, -0.004944, -0.005371, -0.005066, -0.004639, -0.004578, -0.004608, -0.004150, -0.003815, -0.003326, -0.002777, -0.002686, -0.002991, -0.003082, -0.003540, -0.003998, -0.003906, -0.004517, -0.005280, -0.005371, -0.004730, -0.003723, -0.003693, -0.004028, -0.003845, -0.003082, -0.002655, -0.002991, -0.003754, -0.003479, -0.002808, -0.003174, -0.002991, -0.002563, -0.002136, -0.001678, -0.001526, -0.002350, -0.003021, -0.003540, -0.003845, -0.003052, -0.002106, -0.002258, -0.002869, -0.002838, -0.002777, -0.002319, -0.001434, -0.000977, -0.000793, -0.001007, -0.001129, -0.001343, -0.001526, -0.001892, -0.002441, -0.002960, -0.003021, -0.002197, -0.001587, -0.001526, -0.001373, -0.001282, -0.001007, -0.000549, 0.000366, 0.000763, 0.000336, -0.000244, -0.000854, -0.001190, -0.000946, -0.000610, -0.000854, -0.001465, -0.001923, -0.001892, -0.001648, -0.001068, -0.000366, -0.000061, -0.000244, -0.000580, -0.000671, -0.000549, -0.000183, 0.000000, -0.000031, 0.000000, -0.000031, -0.000336, -0.000519, -0.000610, -0.000671, -0.000519, -0.000671, -0.000824, -0.000519, -0.000244, -0.000183, -0.000092, -0.000092, -0.000244, -0.000366, -0.000366, -0.000305, -0.000153, -0.000092 }; lmms-1.1.3/plugins/LadspaEffect/caps/waves/money.h000066400000000000000000005213071247673406200220640ustar00rootroot00000000000000#ifndef _MONEY_H_ #define _MONEY_H_ float money [] = { 0.000000, 0.000000, 0.000000, 0.000226, 0.000454, 0.000684, 0.000686, 0.000688, 0.000690, 0.000693, 0.000926, 0.000929, 0.001165, 0.001169, 0.001173, 0.001412, 0.001416, 0.001421, 0.001425, 0.001668, 0.001673, 0.001918, 0.001924, 0.002171, 0.002178, 0.002670, 0.002678, 0.002687, 0.002940, 0.003194, 0.003697, 0.003708, 0.003967, 0.004228, 0.004490, 0.004754, 0.004266, 0.005034, 0.004796, 0.005064, 0.005078, 0.005093, 0.005108, 0.005379, 0.005652, 0.005668, 0.005943, 0.005960, 0.005977, 0.005994, 0.006011, 0.006553, 0.006309, 0.006590, 0.006873, 0.007157, 0.007178, 0.007464, 0.007485, 0.008042, 0.008064, 0.008087, 0.008109, 0.008402, 0.008426, 0.008994, 0.009018, 0.008769, 0.009067, 0.009092, 0.009117, 0.009141, 0.009166, 0.009469, 0.009494, 0.009799, 0.009545, 0.009852, 0.009878, 0.010187, 0.010213, 0.010525, 0.010552, 0.011152, 0.010894, 0.010922, 0.011239, 0.011268, 0.011297, 0.011616, 0.011646, 0.011676, 0.011413, 0.011735, 0.012059, 0.012385, 0.012416, 0.013040, 0.012776, 0.013106, 0.013106, 0.012808, 0.013106, 0.013106, 0.013106, 0.013106, 0.013106, 0.012808, 0.013106, 0.013106, 0.013106, 0.012808, 0.013403, 0.012808, 0.013106, 0.013106, 0.013403, 0.013701, 0.013701, 0.013701, 0.013403, 0.013403, 0.013403, 0.013403, 0.013701, 0.013701, 0.013701, 0.013403, 0.013701, 0.013403, 0.013403, 0.013106, 0.012808, 0.013106, 0.012808, 0.013106, 0.012808, 0.012510, 0.012510, 0.012510, 0.012510, 0.012510, 0.012510, 0.012212, 0.012510, 0.011914, 0.011914, 0.011616, 0.011616, 0.011616, 0.011318, 0.011318, 0.011021, 0.011021, 0.010723, 0.010723, 0.010127, 0.010127, 0.010127, 0.010127, 0.009829, 0.010127, 0.009531, 0.009829, 0.009233, 0.009233, 0.008936, 0.008638, 0.008340, 0.008340, 0.008042, 0.008042, 0.008042, 0.007744, 0.007446, 0.007149, 0.007149, 0.006553, 0.006851, 0.006553, 0.006255, 0.005957, 0.006255, 0.005659, 0.005659, 0.005361, 0.005064, 0.004766, 0.004766, 0.004468, 0.004468, 0.003872, 0.003872, 0.003276, 0.003276, 0.002681, 0.002383, 0.002383, 0.001787, 0.001787, 0.001787, 0.001489, 0.001489, 0.000596, 0.000894, 0.000596, 0.000298, 0.000298, 0.000000, 0.000000, -0.000298, -0.000596, -0.000894, -0.000894, -0.001489, -0.001787, -0.002085, -0.001787, -0.002681, -0.002681, -0.003276, -0.003574, -0.003872, -0.004170, -0.004170, -0.004766, -0.004468, -0.004468, -0.004766, -0.005361, -0.005361, -0.005659, -0.005957, -0.006255, -0.006851, -0.006851, -0.007744, -0.007744, -0.008042, -0.008340, -0.008638, -0.008638, -0.008936, -0.009233, -0.009531, -0.009829, -0.009531, -0.009829, -0.009829, -0.009829, -0.010127, -0.010723, -0.010723, -0.010723, -0.011318, -0.011318, -0.011616, -0.011914, -0.012212, -0.012510, -0.012212, -0.012510, -0.012510, -0.013106, -0.012808, -0.013403, -0.013403, -0.013403, -0.013701, -0.013701, -0.013701, -0.013999, -0.014297, -0.014595, -0.014595, -0.014297, -0.014893, -0.014893, -0.015191, -0.015191, -0.015488, -0.015191, -0.015786, -0.015786, -0.016084, -0.016382, -0.016680, -0.016680, -0.016978, -0.017276, -0.017276, -0.017573, -0.017573, -0.018169, -0.017871, -0.018169, -0.018467, -0.018169, -0.018765, -0.018765, -0.018467, -0.019063, -0.019361, -0.019361, -0.019361, -0.019361, -0.019361, -0.019658, -0.019956, -0.019658, -0.019956, -0.019956, -0.020254, -0.020552, -0.020552, -0.020552, -0.020552, -0.020850, -0.021148, -0.021148, -0.020850, -0.020850, -0.021148, -0.021446, -0.021743, -0.021446, -0.021446, -0.021743, -0.021743, -0.021743, -0.022041, -0.022041, -0.022041, -0.022637, -0.022339, -0.022935, -0.022339, -0.022339, -0.022041, -0.021743, -0.022339, -0.022339, -0.022339, -0.022339, -0.022339, -0.022637, -0.022637, -0.022637, -0.022637, -0.022637, -0.022935, -0.022637, -0.022637, -0.022637, -0.022339, -0.022339, -0.022339, -0.022637, -0.022041, -0.022339, -0.022041, -0.022041, -0.022637, -0.022339, -0.022339, -0.022339, -0.022339, -0.022637, -0.022339, -0.022041, -0.022041, -0.021743, -0.021743, -0.021743, -0.021446, -0.021446, -0.021446, -0.021446, -0.021446, -0.021148, -0.020850, -0.020850, -0.020552, -0.020850, -0.020254, -0.019956, -0.019361, -0.019361, -0.018765, -0.018467, -0.018467, -0.017871, -0.017871, -0.017871, -0.017871, -0.018169, -0.017871, -0.017573, -0.016978, -0.016382, -0.016084, -0.016084, -0.016084, -0.015488, -0.015191, -0.015191, -0.014893, -0.014297, -0.013701, -0.013403, -0.013106, -0.012808, -0.012510, -0.011914, -0.011318, -0.010723, -0.010425, -0.010127, -0.008936, -0.008936, -0.008340, -0.007744, -0.007744, -0.006851, -0.006553, -0.006255, -0.005957, -0.005361, -0.004468, -0.003872, -0.003574, -0.002979, -0.002383, -0.001489, -0.000894, -0.000298, 0.000000, 0.000596, 0.000894, 0.001489, 0.002085, 0.002383, 0.002979, 0.003872, 0.004170, 0.005064, 0.005659, 0.006553, 0.007149, 0.007446, 0.008638, 0.009233, 0.009829, 0.010723, 0.011021, 0.011616, 0.012212, 0.013106, 0.013701, 0.014297, 0.014893, 0.015488, 0.016382, 0.017276, 0.017871, 0.018765, 0.019658, 0.020552, 0.021148, 0.021743, 0.022637, 0.023233, 0.023828, 0.024424, 0.025615, 0.026211, 0.027105, 0.027998, 0.027998, 0.028892, 0.029488, 0.030381, 0.030977, 0.031573, 0.032168, 0.032764, 0.033658, 0.034253, 0.034849, 0.035445, 0.035743, 0.036636, 0.037232, 0.037530, 0.038125, 0.038721, 0.039317, 0.040210, 0.040806, 0.041104, 0.041700, 0.041997, 0.042593, 0.043189, 0.043487, 0.043785, 0.044380, 0.044678, 0.044976, 0.045870, 0.046167, 0.046167, 0.046763, 0.047061, 0.047359, 0.047061, 0.047657, 0.047955, 0.047955, 0.048550, 0.048550, 0.048848, 0.048550, 0.048848, 0.048848, 0.048848, 0.049146, 0.049146, 0.049742, 0.049742, 0.049742, 0.049742, 0.049444, 0.049742, 0.049742, 0.049742, 0.049742, 0.049444, 0.049146, 0.049146, 0.048848, 0.048848, 0.048550, 0.048550, 0.048550, 0.048550, 0.048252, 0.048252, 0.048252, 0.047657, 0.047359, 0.046763, 0.046763, 0.046167, 0.045870, 0.045274, 0.045274, 0.044976, 0.044678, 0.044380, 0.043785, 0.043487, 0.042891, 0.042593, 0.042295, 0.041997, 0.041402, 0.041104, 0.039913, 0.039615, 0.038721, 0.038423, 0.037828, 0.037530, 0.036636, 0.036338, 0.035445, 0.035147, 0.034551, 0.034253, 0.033658, 0.033062, 0.032168, 0.031573, 0.030679, 0.030083, 0.029488, 0.028892, 0.027998, 0.027403, 0.026807, 0.025913, 0.025318, 0.024424, 0.023828, 0.023233, 0.022339, 0.021743, 0.020850, 0.019956, 0.019361, 0.018467, 0.017573, 0.016978, 0.015786, 0.015191, 0.014297, 0.013701, 0.012808, 0.012510, 0.011318, 0.010425, 0.009531, 0.008936, 0.008042, 0.007149, 0.006553, 0.005659, 0.005064, 0.003872, 0.002979, 0.002383, 0.001489, 0.000298, -0.000298, -0.000894, -0.001489, -0.002681, -0.003276, -0.004170, -0.005064, -0.005659, -0.006553, -0.007446, -0.008340, -0.008936, -0.010425, -0.011021, -0.011914, -0.012808, -0.013403, -0.014297, -0.015191, -0.016382, -0.016978, -0.017573, -0.018467, -0.019361, -0.019956, -0.021148, -0.021743, -0.022637, -0.023531, -0.023828, -0.025020, -0.025615, -0.026211, -0.026807, -0.027700, -0.028296, -0.029190, -0.030083, -0.030977, -0.031573, -0.032466, -0.033062, -0.033955, -0.034849, -0.035445, -0.036338, -0.036636, -0.037530, -0.038423, -0.039019, -0.039615, -0.040210, -0.040806, -0.041700, -0.042295, -0.043189, -0.043487, -0.044380, -0.044976, -0.045870, -0.046465, -0.047061, -0.047657, -0.048252, -0.048848, -0.049146, -0.050040, -0.050337, -0.050933, -0.051529, -0.051827, -0.052125, -0.053316, -0.053614, -0.054210, -0.054805, -0.055699, -0.055997, -0.056592, -0.056890, -0.057486, -0.058082, -0.058380, -0.058975, -0.059273, -0.059571, -0.060464, -0.061060, -0.061656, -0.062549, -0.062847, -0.063741, -0.064634, -0.065528, -0.065826, -0.066422, -0.067613, -0.068209, -0.069102, -0.069400, -0.069996, -0.070889, -0.072081, -0.072379, -0.073272, -0.073868, -0.074166, -0.075059, -0.075655, -0.076251, -0.077144, -0.077740, -0.078336, -0.079527, -0.079825, -0.080421, -0.081314, -0.082208, -0.082506, -0.083399, -0.083995, -0.085186, -0.086378, -0.087867, -0.088463, -0.089356, -0.090846, -0.091739, -0.092633, -0.093228, -0.093824, -0.094718, -0.095611, -0.096207, -0.097101, -0.097696, -0.098590, -0.099483, -0.100377, -0.101568, -0.102164, -0.103356, -0.104249, -0.105143, -0.106036, -0.106334, -0.106930, -0.107823, -0.108717, -0.109313, -0.109908, -0.109908, -0.110802, -0.110802, -0.111100, -0.111100, -0.110504, -0.109908, -0.109313, -0.109313, -0.109610, -0.109610, -0.108717, -0.108717, -0.107823, -0.108121, -0.107228, -0.106334, -0.104547, -0.103058, -0.101866, -0.100377, -0.097994, -0.095611, -0.092633, -0.089654, -0.087271, -0.083995, -0.080719, -0.077442, -0.075357, -0.073272, -0.072379, -0.071187, -0.069996, -0.068507, -0.066422, -0.063443, -0.059869, -0.055401, -0.050635, -0.046763, -0.042295, -0.039019, -0.036040, -0.033360, -0.030381, -0.027105, -0.024126, -0.019956, -0.016084, -0.011914, -0.007744, -0.004468, -0.000894, 0.002085, 0.005957, 0.010127, 0.014893, 0.019658, 0.024126, 0.029190, 0.033360, 0.037530, 0.040508, 0.043487, 0.046167, 0.049146, 0.053018, 0.056592, 0.060762, 0.064932, 0.069102, 0.073272, 0.076846, 0.080421, 0.083101, 0.086378, 0.089059, 0.092335, 0.095313, 0.097696, 0.100377, 0.103356, 0.106632, 0.109313, 0.112291, 0.114972, 0.117653, 0.121823, 0.125099, 0.127780, 0.130460, 0.132843, 0.134630, 0.136715, 0.138502, 0.139992, 0.142077, 0.143864, 0.145949, 0.148332, 0.150417, 0.151906, 0.153097, 0.154289, 0.155480, 0.156374, 0.157565, 0.158459, 0.159650, 0.160544, 0.161139, 0.161437, 0.161437, 0.161139, 0.160544, 0.160246, 0.160246, 0.160841, 0.161139, 0.161437, 0.161437, 0.162033, 0.161437, 0.160841, 0.159650, 0.158756, 0.157863, 0.157565, 0.156374, 0.156374, 0.155778, 0.155480, 0.155480, 0.155182, 0.154289, 0.153693, 0.152502, 0.151310, 0.150417, 0.148927, 0.147438, 0.145651, 0.144162, 0.142375, 0.140885, 0.138800, 0.137311, 0.135822, 0.134035, 0.132843, 0.131056, 0.129269, 0.127482, 0.125695, 0.123610, 0.121227, 0.119142, 0.117355, 0.114972, 0.113185, 0.111100, 0.109015, 0.106930, 0.104845, 0.102760, 0.101271, 0.099186, 0.097696, 0.096207, 0.094420, 0.092335, 0.090846, 0.088761, 0.086378, 0.083697, 0.080719, 0.078634, 0.076251, 0.073868, 0.072379, 0.070294, 0.067911, 0.065826, 0.063741, 0.061060, 0.058380, 0.055997, 0.053018, 0.050635, 0.048252, 0.045870, 0.043785, 0.041402, 0.039615, 0.037232, 0.035147, 0.032764, 0.030381, 0.028296, 0.026509, 0.024126, 0.022339, 0.020254, 0.018169, 0.016382, 0.014297, 0.012212, 0.010127, 0.008340, 0.006553, 0.004468, 0.002681, 0.000596, -0.000894, -0.002383, -0.003872, -0.005659, -0.007149, -0.008638, -0.010425, -0.012212, -0.013701, -0.015488, -0.016978, -0.018765, -0.020552, -0.021446, -0.022339, -0.023828, -0.024722, -0.025913, -0.027105, -0.028296, -0.029488, -0.030679, -0.031870, -0.033062, -0.033658, -0.034551, -0.035445, -0.035743, -0.036338, -0.036636, -0.036934, -0.037232, -0.037828, -0.037828, -0.038125, -0.038423, -0.039019, -0.039019, -0.039317, -0.039317, -0.039615, -0.039615, -0.039913, -0.040210, -0.040508, -0.040806, -0.040806, -0.041104, -0.040806, -0.040806, -0.040806, -0.040806, -0.041104, -0.041104, -0.041104, -0.041402, -0.041402, -0.041402, -0.041402, -0.041402, -0.041104, -0.040806, -0.039913, -0.039615, -0.039019, -0.039019, -0.038125, -0.037828, -0.037232, -0.036934, -0.036934, -0.036338, -0.036338, -0.035743, -0.035743, -0.035445, -0.035147, -0.034849, -0.034253, -0.033955, -0.033658, -0.033658, -0.033062, -0.033062, -0.032764, -0.032764, -0.032764, -0.032466, -0.032466, -0.032466, -0.031870, -0.032168, -0.032168, -0.032466, -0.032168, -0.032168, -0.032168, -0.032466, -0.032168, -0.032168, -0.032466, -0.032466, -0.032764, -0.033062, -0.033360, -0.033658, -0.033955, -0.034253, -0.034849, -0.035445, -0.035743, -0.036338, -0.036934, -0.037232, -0.038125, -0.038721, -0.039913, -0.040806, -0.041402, -0.042593, -0.043487, -0.044678, -0.045572, -0.047061, -0.048252, -0.049742, -0.050933, -0.052125, -0.053614, -0.054805, -0.056295, -0.057188, -0.058677, -0.059869, -0.061358, -0.062847, -0.064337, -0.065826, -0.067911, -0.068804, -0.070889, -0.072379, -0.074464, -0.076251, -0.077740, -0.079825, -0.081016, -0.083399, -0.085186, -0.087271, -0.089059, -0.090846, -0.092931, -0.095313, -0.097994, -0.100377, -0.102462, -0.104547, -0.107526, -0.111100, -0.114078, -0.116461, -0.118546, -0.121525, -0.124503, -0.127184, -0.129567, -0.132545, -0.135226, -0.138205, -0.141183, -0.144459, -0.148034, -0.151310, -0.154289, -0.157863, -0.161139, -0.164416, -0.167990, -0.171266, -0.174543, -0.177521, -0.179904, -0.181989, -0.184372, -0.186457, -0.187946, -0.188840, -0.190329, -0.191818, -0.193605, -0.194797, -0.195988, -0.196882, -0.196882, -0.193605, -0.187648, -0.181096, -0.175734, -0.171564, -0.167990, -0.165607, -0.165607, -0.168586, -0.173947, -0.179904, -0.182883, -0.181989, -0.177819, -0.172458, -0.166799, -0.159948, -0.153097, -0.147438, -0.144757, -0.144459, -0.145055, -0.143864, -0.141779, -0.137311, -0.132545, -0.126290, -0.120035, -0.114972, -0.111695, -0.109610, -0.107823, -0.103951, -0.097994, -0.090250, -0.080719, -0.070592, -0.060464, -0.052422, -0.045870, -0.041997, -0.039615, -0.038423, -0.037530, -0.034253, -0.028892, -0.021148, -0.012510, -0.004766, 0.002085, 0.007744, 0.013106, 0.017573, 0.021743, 0.024722, 0.028296, 0.031870, 0.036636, 0.041700, 0.045870, 0.049742, 0.053912, 0.057784, 0.062847, 0.068507, 0.074166, 0.081016, 0.087569, 0.093824, 0.098888, 0.103058, 0.106036, 0.108717, 0.112291, 0.115270, 0.118844, 0.122418, 0.126886, 0.131950, 0.136715, 0.139992, 0.142375, 0.144757, 0.147438, 0.151012, 0.153991, 0.157863, 0.160841, 0.163820, 0.165011, 0.165905, 0.165607, 0.164416, 0.163522, 0.163522, 0.165011, 0.167692, 0.170969, 0.174245, 0.177521, 0.179308, 0.179904, 0.179308, 0.177521, 0.175436, 0.174245, 0.173649, 0.174841, 0.176032, 0.178415, 0.179904, 0.181393, 0.182585, 0.183478, 0.183181, 0.182585, 0.181393, 0.180500, 0.180202, 0.179606, 0.179308, 0.177819, 0.176926, 0.175734, 0.175139, 0.173649, 0.172160, 0.170969, 0.169777, 0.168884, 0.167692, 0.166203, 0.164714, 0.163224, 0.162033, 0.159650, 0.157267, 0.154587, 0.151906, 0.149523, 0.146842, 0.144162, 0.141779, 0.139992, 0.139098, 0.138502, 0.137907, 0.137311, 0.135822, 0.134332, 0.131950, 0.128971, 0.125397, 0.121823, 0.117950, 0.114674, 0.112291, 0.110206, 0.108717, 0.107823, 0.106632, 0.104845, 0.102760, 0.100079, 0.096505, 0.092931, 0.089356, 0.086080, 0.083101, 0.080719, 0.077740, 0.075655, 0.072974, 0.070889, 0.067911, 0.065230, 0.061954, 0.058975, 0.056295, 0.054507, 0.052422, 0.050635, 0.048252, 0.046465, 0.044082, 0.041402, 0.039317, 0.037232, 0.035147, 0.032764, 0.030381, 0.027998, 0.026807, 0.025020, 0.022339, 0.019956, 0.017276, 0.015191, 0.013106, 0.011021, 0.008042, 0.005957, 0.003276, 0.001489, 0.000000, -0.001191, -0.002979, -0.004170, -0.005064, -0.005064, -0.005659, -0.006255, -0.007744, -0.009829, -0.011616, -0.013701, -0.015488, -0.016680, -0.017276, -0.017276, -0.016680, -0.015191, -0.015191, -0.015191, -0.016382, -0.017573, -0.018467, -0.019063, -0.020254, -0.020254, -0.019956, -0.019063, -0.017871, -0.017276, -0.016978, -0.016978, -0.017573, -0.017276, -0.016978, -0.015786, -0.014893, -0.013701, -0.012510, -0.011616, -0.010425, -0.010127, -0.009829, -0.008936, -0.008340, -0.007446, -0.006553, -0.005361, -0.004468, -0.003276, -0.002085, -0.000596, 0.000298, 0.001489, 0.002681, 0.004468, 0.005361, 0.005957, 0.006255, 0.006553, 0.008042, 0.008638, 0.009531, 0.010127, 0.011914, 0.013403, 0.015191, 0.016978, 0.017871, 0.019361, 0.019658, 0.020254, 0.020552, 0.021743, 0.022041, 0.022935, 0.024424, 0.026211, 0.027403, 0.028892, 0.029488, 0.029785, 0.030083, 0.030381, 0.030679, 0.030679, 0.031275, 0.031573, 0.032764, 0.033360, 0.034253, 0.033955, 0.033360, 0.033062, 0.032764, 0.032764, 0.032764, 0.032764, 0.032764, 0.032764, 0.032466, 0.032764, 0.031870, 0.030977, 0.030381, 0.029488, 0.029190, 0.028594, 0.027998, 0.027105, 0.026807, 0.026211, 0.025913, 0.025318, 0.024722, 0.023828, 0.023233, 0.022339, 0.021148, 0.019658, 0.018467, 0.017276, 0.015786, 0.014893, 0.013701, 0.012510, 0.011616, 0.010723, 0.009531, 0.007446, 0.005659, 0.003872, 0.002085, 0.000000, -0.001787, -0.003574, -0.005361, -0.007446, -0.008936, -0.011021, -0.012808, -0.014595, -0.016382, -0.018467, -0.020254, -0.022339, -0.024126, -0.026211, -0.027700, -0.029190, -0.031275, -0.033360, -0.035743, -0.037828, -0.040210, -0.042593, -0.044678, -0.047061, -0.049146, -0.051231, -0.053018, -0.055103, -0.057188, -0.059869, -0.062252, -0.064634, -0.066719, -0.069102, -0.071187, -0.073570, -0.075655, -0.078038, -0.080123, -0.082506, -0.084293, -0.086974, -0.089356, -0.091739, -0.094420, -0.096505, -0.099186, -0.101568, -0.104249, -0.106632, -0.108717, -0.111100, -0.113185, -0.114972, -0.117057, -0.118844, -0.121227, -0.123014, -0.125397, -0.127780, -0.130758, -0.133141, -0.135524, -0.138502, -0.140290, -0.143268, -0.145949, -0.148927, -0.151608, -0.154289, -0.156969, -0.159948, -0.162926, -0.165011, -0.167692, -0.170373, -0.173351, -0.176330, -0.179308, -0.182585, -0.185563, -0.189138, -0.193010, -0.195988, -0.198967, -0.201350, -0.204328, -0.207605, -0.211179, -0.214157, -0.217136, -0.220412, -0.223391, -0.226072, -0.227859, -0.229348, -0.231135, -0.233220, -0.234709, -0.236199, -0.237688, -0.240071, -0.241858, -0.242454, -0.241560, -0.239475, -0.237390, -0.233518, -0.226965, -0.218923, -0.211775, -0.207605, -0.205818, -0.204924, -0.203733, -0.204328, -0.207307, -0.212072, -0.214753, -0.213264, -0.208200, -0.201350, -0.194797, -0.188244, -0.181096, -0.173351, -0.167692, -0.164416, -0.163522, -0.163224, -0.160841, -0.156672, -0.151310, -0.144757, -0.138502, -0.132545, -0.127482, -0.122716, -0.117950, -0.112589, -0.106036, -0.097994, -0.087569, -0.076549, -0.065528, -0.055699, -0.048848, -0.043785, -0.040210, -0.037828, -0.035743, -0.033062, -0.027700, -0.018765, -0.008042, 0.002681, 0.011914, 0.019361, 0.025615, 0.030977, 0.035445, 0.038721, 0.041402, 0.044380, 0.049146, 0.054507, 0.059869, 0.065230, 0.070294, 0.075655, 0.081314, 0.087569, 0.093228, 0.099186, 0.105441, 0.112291, 0.118546, 0.123312, 0.126588, 0.129567, 0.131950, 0.134928, 0.138205, 0.141481, 0.145055, 0.150119, 0.155480, 0.161139, 0.165309, 0.168288, 0.170969, 0.173351, 0.176628, 0.179011, 0.181096, 0.182287, 0.183478, 0.184074, 0.184968, 0.184968, 0.184074, 0.183776, 0.184670, 0.186755, 0.190031, 0.193010, 0.195690, 0.196882, 0.196882, 0.196286, 0.194499, 0.191818, 0.188840, 0.187351, 0.187053, 0.188840, 0.190925, 0.192712, 0.194499, 0.195393, 0.196286, 0.195690, 0.194797, 0.192712, 0.190627, 0.188840, 0.187648, 0.186755, 0.185563, 0.184670, 0.183478, 0.181989, 0.180798, 0.179606, 0.177819, 0.176628, 0.175139, 0.173947, 0.172756, 0.171266, 0.168884, 0.166501, 0.164118, 0.161139, 0.157863, 0.154884, 0.151608, 0.148629, 0.146544, 0.144757, 0.143268, 0.142375, 0.141779, 0.141183, 0.139992, 0.138205, 0.135524, 0.132843, 0.129567, 0.125992, 0.121823, 0.118248, 0.115568, 0.113483, 0.111993, 0.110504, 0.109908, 0.108717, 0.107228, 0.105143, 0.102164, 0.098292, 0.094420, 0.090250, 0.086974, 0.084293, 0.081910, 0.080123, 0.078634, 0.077442, 0.076846, 0.075357, 0.073570, 0.070592, 0.067613, 0.065230, 0.063145, 0.060464, 0.057784, 0.055401, 0.053316, 0.051529, 0.049146, 0.046167, 0.043487, 0.040508, 0.038125, 0.036636, 0.035147, 0.033658, 0.032764, 0.031870, 0.030977, 0.030083, 0.027998, 0.025615, 0.022935, 0.020254, 0.017573, 0.015786, 0.014893, 0.014893, 0.014595, 0.014893, 0.015191, 0.014595, 0.013701, 0.011914, 0.009829, 0.007446, 0.005659, 0.004170, 0.002681, 0.002085, 0.001489, 0.001787, 0.002085, 0.002383, 0.002979, 0.003276, 0.003276, 0.002979, 0.002979, 0.002383, 0.000894, 0.000298, -0.000596, -0.001489, -0.001489, -0.000894, 0.000000, 0.001191, 0.002681, 0.003574, 0.004766, 0.005659, 0.006553, 0.007149, 0.008042, 0.008638, 0.010425, 0.011616, 0.012808, 0.013403, 0.013106, 0.012808, 0.012510, 0.012510, 0.013106, 0.014297, 0.015786, 0.017573, 0.019658, 0.021148, 0.021743, 0.021743, 0.021446, 0.021148, 0.020552, 0.019956, 0.020254, 0.020552, 0.021446, 0.022637, 0.023828, 0.025020, 0.026211, 0.027105, 0.027403, 0.027998, 0.028296, 0.028296, 0.028296, 0.028296, 0.028296, 0.029190, 0.029785, 0.030977, 0.031275, 0.032168, 0.032466, 0.032466, 0.032764, 0.032764, 0.033062, 0.032764, 0.032764, 0.032168, 0.031573, 0.030977, 0.030381, 0.029488, 0.028594, 0.027700, 0.027105, 0.026211, 0.025615, 0.024722, 0.023828, 0.022935, 0.022041, 0.021148, 0.020552, 0.019658, 0.018169, 0.016680, 0.014893, 0.013106, 0.011616, 0.010127, 0.008936, 0.008638, 0.008042, 0.007744, 0.006851, 0.006255, 0.004766, 0.002681, 0.000596, -0.001191, -0.003276, -0.005064, -0.006851, -0.008340, -0.009829, -0.011616, -0.013403, -0.015488, -0.017573, -0.019658, -0.021743, -0.024126, -0.026509, -0.029190, -0.031870, -0.033955, -0.036636, -0.039019, -0.041402, -0.044082, -0.046465, -0.048848, -0.050635, -0.053018, -0.055103, -0.056890, -0.059273, -0.061060, -0.062847, -0.065230, -0.067613, -0.070592, -0.073570, -0.075953, -0.078931, -0.081612, -0.083995, -0.086378, -0.088463, -0.090250, -0.092335, -0.094122, -0.096505, -0.098590, -0.101271, -0.103653, -0.106334, -0.109908, -0.112887, -0.116163, -0.119142, -0.121525, -0.124205, -0.126886, -0.129269, -0.131652, -0.133737, -0.135822, -0.138205, -0.141183, -0.143566, -0.145949, -0.148629, -0.151608, -0.154587, -0.157267, -0.159948, -0.162926, -0.165607, -0.168288, -0.170671, -0.172756, -0.175139, -0.177521, -0.180202, -0.183478, -0.185563, -0.188244, -0.191223, -0.194499, -0.198371, -0.201350, -0.204924, -0.207903, -0.212072, -0.215945, -0.220115, -0.223689, -0.226667, -0.230539, -0.235305, -0.239773, -0.244539, -0.248411, -0.253474, -0.258538, -0.263006, -0.266282, -0.268665, -0.271346, -0.273728, -0.276111, -0.277898, -0.279685, -0.280281, -0.278792, -0.275515, -0.268665, -0.258836, -0.248113, -0.238582, -0.232029, -0.228454, -0.227859, -0.231135, -0.238284, -0.247517, -0.255261, -0.257942, -0.254666, -0.246624, -0.235901, -0.224582, -0.213860, -0.205222, -0.200158, -0.198967, -0.201350, -0.204328, -0.204924, -0.202243, -0.195690, -0.187648, -0.179904, -0.173054, -0.168586, -0.165011, -0.162629, -0.159650, -0.154587, -0.145651, -0.132843, -0.117950, -0.102462, -0.089356, -0.080123, -0.074464, -0.072081, -0.070889, -0.069698, -0.067315, -0.061060, -0.050635, -0.036934, -0.022637, -0.009829, 0.000000, 0.007446, 0.012808, 0.016978, 0.020254, 0.023531, 0.027403, 0.032466, 0.039317, 0.045572, 0.051529, 0.056592, 0.061954, 0.067315, 0.073868, 0.081612, 0.089952, 0.098888, 0.108419, 0.115865, 0.121823, 0.125397, 0.127482, 0.128971, 0.131354, 0.134630, 0.139694, 0.146544, 0.153693, 0.161735, 0.168586, 0.174543, 0.178117, 0.180798, 0.183181, 0.186457, 0.190329, 0.194499, 0.198073, 0.200456, 0.202243, 0.202839, 0.202243, 0.201052, 0.200158, 0.200456, 0.203435, 0.207605, 0.212966, 0.217434, 0.220115, 0.221306, 0.220115, 0.217434, 0.213562, 0.209392, 0.206413, 0.205520, 0.206711, 0.210285, 0.213860, 0.217136, 0.219817, 0.221604, 0.221604, 0.220710, 0.218030, 0.215349, 0.212668, 0.210583, 0.209392, 0.208498, 0.207903, 0.207307, 0.206711, 0.205818, 0.204626, 0.203137, 0.201945, 0.200754, 0.199265, 0.197775, 0.196286, 0.193903, 0.191520, 0.188542, 0.185266, 0.181393, 0.178117, 0.174543, 0.171564, 0.168586, 0.166203, 0.164416, 0.163224, 0.162629, 0.162331, 0.161139, 0.160246, 0.157863, 0.154884, 0.151310, 0.146842, 0.142077, 0.137311, 0.133439, 0.130162, 0.128375, 0.127184, 0.126588, 0.125992, 0.125397, 0.123908, 0.121227, 0.116759, 0.111695, 0.106334, 0.100675, 0.095909, 0.092037, 0.089059, 0.086974, 0.086080, 0.083995, 0.082506, 0.080123, 0.076846, 0.073272, 0.069102, 0.065230, 0.061358, 0.058677, 0.055699, 0.053614, 0.051529, 0.050337, 0.048252, 0.045274, 0.041402, 0.038423, 0.036636, 0.034253, 0.032764, 0.030679, 0.029785, 0.028594, 0.027700, 0.025913, 0.024126, 0.021148, 0.017573, 0.014297, 0.011318, 0.008638, 0.006851, 0.005361, 0.004766, 0.004766, 0.004766, 0.004170, 0.003276, 0.002085, 0.000298, -0.001191, -0.002979, -0.004766, -0.005957, -0.006851, -0.007446, -0.006851, -0.006553, -0.006255, -0.006255, -0.005957, -0.005659, -0.005659, -0.006255, -0.006851, -0.007744, -0.008042, -0.007744, -0.007446, -0.006851, -0.005957, -0.005064, -0.003276, -0.001489, -0.000298, 0.000298, 0.000596, 0.001489, 0.002383, 0.003574, 0.005064, 0.007149, 0.008638, 0.010723, 0.012212, 0.012808, 0.013106, 0.013403, 0.013999, 0.014893, 0.016084, 0.017276, 0.019063, 0.021148, 0.022935, 0.024424, 0.025913, 0.026807, 0.027403, 0.027998, 0.028296, 0.028594, 0.029190, 0.030381, 0.031573, 0.033360, 0.035445, 0.037530, 0.039019, 0.040508, 0.041402, 0.041997, 0.042295, 0.043189, 0.043189, 0.043785, 0.044678, 0.045870, 0.047359, 0.048252, 0.049444, 0.049742, 0.050040, 0.050040, 0.050635, 0.049742, 0.049742, 0.049444, 0.049444, 0.049444, 0.048848, 0.048252, 0.048252, 0.047955, 0.047657, 0.047061, 0.046167, 0.045274, 0.044082, 0.043189, 0.041997, 0.041700, 0.040806, 0.039913, 0.039317, 0.038423, 0.037232, 0.035743, 0.033658, 0.031870, 0.030083, 0.028594, 0.026807, 0.025913, 0.024722, 0.023531, 0.022041, 0.020850, 0.018765, 0.016382, 0.014297, 0.011616, 0.009531, 0.007446, 0.005361, 0.003276, 0.001787, 0.000000, -0.001787, -0.003574, -0.005957, -0.008638, -0.011021, -0.013701, -0.016680, -0.019361, -0.022339, -0.024722, -0.026807, -0.029190, -0.031573, -0.033955, -0.036338, -0.039019, -0.041700, -0.044380, -0.047061, -0.049742, -0.052422, -0.054805, -0.057784, -0.060167, -0.062847, -0.065528, -0.068209, -0.071187, -0.073868, -0.077144, -0.080123, -0.082506, -0.085186, -0.087867, -0.090250, -0.092931, -0.095313, -0.097994, -0.101271, -0.104249, -0.107228, -0.110504, -0.113185, -0.115865, -0.118546, -0.120929, -0.123610, -0.125992, -0.128673, -0.131354, -0.134035, -0.136715, -0.139694, -0.142672, -0.145949, -0.148332, -0.151012, -0.153395, -0.156374, -0.159352, -0.162629, -0.165607, -0.167990, -0.170373, -0.173649, -0.176330, -0.179904, -0.182585, -0.185266, -0.188244, -0.190925, -0.194499, -0.197775, -0.200754, -0.203137, -0.205818, -0.209094, -0.212668, -0.216540, -0.219221, -0.222497, -0.225774, -0.230242, -0.234412, -0.237986, -0.241858, -0.246028, -0.250496, -0.254964, -0.259729, -0.264197, -0.269261, -0.274324, -0.279983, -0.284451, -0.288323, -0.292195, -0.296067, -0.300237, -0.303216, -0.305897, -0.307684, -0.309769, -0.310067, -0.309173, -0.303812, -0.293982, -0.282366, -0.271643, -0.262112, -0.255261, -0.250198, -0.249602, -0.254070, -0.263601, -0.274324, -0.282664, -0.284153, -0.278792, -0.268963, -0.256751, -0.243943, -0.231135, -0.220710, -0.214753, -0.214753, -0.218327, -0.222795, -0.223987, -0.220115, -0.212668, -0.204030, -0.195393, -0.187351, -0.181096, -0.176926, -0.174245, -0.172160, -0.167394, -0.157267, -0.142077, -0.124503, -0.108121, -0.094718, -0.084293, -0.077442, -0.074166, -0.074166, -0.074464, -0.072379, -0.064337, -0.050635, -0.033658, -0.016978, -0.002383, 0.009233, 0.018467, 0.025020, 0.028594, 0.030083, 0.031870, 0.036040, 0.042891, 0.051529, 0.058975, 0.065826, 0.072379, 0.078931, 0.085782, 0.092633, 0.100377, 0.108717, 0.117950, 0.127780, 0.136120, 0.141779, 0.144757, 0.145353, 0.146544, 0.149225, 0.153693, 0.159352, 0.166799, 0.175734, 0.185266, 0.193605, 0.199563, 0.202541, 0.203733, 0.205222, 0.207903, 0.211775, 0.216242, 0.220710, 0.224880, 0.228454, 0.230242, 0.229646, 0.227263, 0.224582, 0.224582, 0.227263, 0.232327, 0.237986, 0.242751, 0.246624, 0.247815, 0.247219, 0.243347, 0.237688, 0.231135, 0.226667, 0.225178, 0.227263, 0.231731, 0.236497, 0.241560, 0.245134, 0.246921, 0.246326, 0.243347, 0.238582, 0.233816, 0.229348, 0.227263, 0.225476, 0.224880, 0.224582, 0.224284, 0.224582, 0.223987, 0.223391, 0.221902, 0.219817, 0.218625, 0.216540, 0.214455, 0.211477, 0.208498, 0.205222, 0.201945, 0.198073, 0.194499, 0.190627, 0.187946, 0.184968, 0.183181, 0.180798, 0.178415, 0.176628, 0.174841, 0.173947, 0.172756, 0.171266, 0.168884, 0.165905, 0.162629, 0.158161, 0.153395, 0.148034, 0.143268, 0.139396, 0.137311, 0.136715, 0.136715, 0.136715, 0.136120, 0.134928, 0.131950, 0.127184, 0.120929, 0.114078, 0.106632, 0.101568, 0.097398, 0.095016, 0.094122, 0.093824, 0.094420, 0.094122, 0.093228, 0.089356, 0.085484, 0.080719, 0.075655, 0.070889, 0.067315, 0.064634, 0.062549, 0.061656, 0.060464, 0.059869, 0.058380, 0.056295, 0.053614, 0.051231, 0.048848, 0.046763, 0.044380, 0.042295, 0.040806, 0.038721, 0.036338, 0.033360, 0.030083, 0.027403, 0.025318, 0.023531, 0.022339, 0.021446, 0.021148, 0.021446, 0.022041, 0.021446, 0.019956, 0.018169, 0.016382, 0.014297, 0.011914, 0.009233, 0.007149, 0.005361, 0.004766, 0.004468, 0.005361, 0.006255, 0.008340, 0.009233, 0.010723, 0.011021, 0.010723, 0.008936, 0.006553, 0.003574, 0.001489, 0.000000, -0.000298, 0.000596, 0.002681, 0.006553, 0.010127, 0.012510, 0.013701, 0.014595, 0.013999, 0.013701, 0.012510, 0.011616, 0.011021, 0.011318, 0.012808, 0.014595, 0.016382, 0.017871, 0.018765, 0.019658, 0.020552, 0.021446, 0.022339, 0.023233, 0.024424, 0.025913, 0.027403, 0.028296, 0.028892, 0.028892, 0.028296, 0.027998, 0.028296, 0.027998, 0.028296, 0.029488, 0.031275, 0.033360, 0.035743, 0.036934, 0.037828, 0.037828, 0.037530, 0.036934, 0.035445, 0.034551, 0.033360, 0.033360, 0.033955, 0.034551, 0.035445, 0.036636, 0.037828, 0.039019, 0.039913, 0.039913, 0.039317, 0.037828, 0.036338, 0.034253, 0.032764, 0.031870, 0.031275, 0.030977, 0.031275, 0.032168, 0.032466, 0.032466, 0.031573, 0.030679, 0.029190, 0.027403, 0.025318, 0.023233, 0.021446, 0.020254, 0.018765, 0.017573, 0.015786, 0.013999, 0.011914, 0.009829, 0.007744, 0.005659, 0.003872, 0.002085, 0.000894, -0.000596, -0.002383, -0.004468, -0.007149, -0.009829, -0.012808, -0.015786, -0.018765, -0.020850, -0.022637, -0.023828, -0.025020, -0.026211, -0.027105, -0.028892, -0.031275, -0.034253, -0.037232, -0.040508, -0.044082, -0.047359, -0.050635, -0.053018, -0.055997, -0.058082, -0.060464, -0.062252, -0.064039, -0.066124, -0.068804, -0.071485, -0.074464, -0.078038, -0.081612, -0.084591, -0.088463, -0.091441, -0.094122, -0.096803, -0.099483, -0.102164, -0.104547, -0.106930, -0.109313, -0.112291, -0.115270, -0.117950, -0.121227, -0.123908, -0.127184, -0.130162, -0.133737, -0.137013, -0.139992, -0.142672, -0.145651, -0.148629, -0.151310, -0.153991, -0.156374, -0.158756, -0.161735, -0.164714, -0.167990, -0.171564, -0.174841, -0.178415, -0.182287, -0.186159, -0.189733, -0.192414, -0.195095, -0.198073, -0.200754, -0.203733, -0.206711, -0.209690, -0.213264, -0.216838, -0.221306, -0.226072, -0.229944, -0.233220, -0.236497, -0.240964, -0.245134, -0.248113, -0.250794, -0.254368, -0.258240, -0.262708, -0.267176, -0.272239, -0.277005, -0.282366, -0.287430, -0.293089, -0.299642, -0.307088, -0.313939, -0.319002, -0.323470, -0.328831, -0.333895, -0.336278, -0.337171, -0.337171, -0.334491, -0.327938, -0.320492, -0.313939, -0.307088, -0.296067, -0.284749, -0.277600, -0.277600, -0.281175, -0.285047, -0.289515, -0.295174, -0.300535, -0.302918, -0.299642, -0.290110, -0.276409, -0.261814, -0.250794, -0.243347, -0.237688, -0.234114, -0.234412, -0.237688, -0.240964, -0.239773, -0.233816, -0.224284, -0.214753, -0.206711, -0.199265, -0.193308, -0.188244, -0.184074, -0.177521, -0.169181, -0.158161, -0.144459, -0.127482, -0.110504, -0.097696, -0.091144, -0.087867, -0.085484, -0.082208, -0.077144, -0.069698, -0.058677, -0.043189, -0.024722, -0.006553, 0.008340, 0.018467, 0.023828, 0.027403, 0.030381, 0.033062, 0.035743, 0.040508, 0.047955, 0.058082, 0.069102, 0.078931, 0.086974, 0.094420, 0.101568, 0.109313, 0.116461, 0.124205, 0.131950, 0.139396, 0.145949, 0.151906, 0.155778, 0.157565, 0.159650, 0.163522, 0.170373, 0.178713, 0.187351, 0.195393, 0.204328, 0.210881, 0.215945, 0.217732, 0.219221, 0.220412, 0.222795, 0.227263, 0.232327, 0.237688, 0.241262, 0.244539, 0.246028, 0.246028, 0.244836, 0.243943, 0.244539, 0.247815, 0.252283, 0.257346, 0.261516, 0.264197, 0.263601, 0.260623, 0.255857, 0.250794, 0.246624, 0.243645, 0.244539, 0.248113, 0.254070, 0.259729, 0.263899, 0.265984, 0.265686, 0.263006, 0.257644, 0.251389, 0.245730, 0.241560, 0.239177, 0.238879, 0.239475, 0.240667, 0.240964, 0.240964, 0.240071, 0.238582, 0.235901, 0.232624, 0.229348, 0.226667, 0.223689, 0.220412, 0.217136, 0.213860, 0.210881, 0.207903, 0.205222, 0.202839, 0.199860, 0.197478, 0.195393, 0.193308, 0.190925, 0.188840, 0.186457, 0.184670, 0.182287, 0.180202, 0.177223, 0.173947, 0.170671, 0.166799, 0.162629, 0.158459, 0.154289, 0.151310, 0.148927, 0.147736, 0.146842, 0.145949, 0.144459, 0.141183, 0.137311, 0.131652, 0.125397, 0.118248, 0.111695, 0.106334, 0.103356, 0.101271, 0.100973, 0.100377, 0.100079, 0.098888, 0.095909, 0.091739, 0.086378, 0.080123, 0.074762, 0.070294, 0.067613, 0.065826, 0.064634, 0.063443, 0.063443, 0.062847, 0.060464, 0.056890, 0.053316, 0.050040, 0.047359, 0.045870, 0.044678, 0.043487, 0.042295, 0.041402, 0.039913, 0.038423, 0.035445, 0.031870, 0.028594, 0.026509, 0.025615, 0.024424, 0.023233, 0.021743, 0.020850, 0.020254, 0.018765, 0.016978, 0.014893, 0.013106, 0.012510, 0.012510, 0.012212, 0.011021, 0.010127, 0.009829, 0.010425, 0.010723, 0.011318, 0.011318, 0.012212, 0.012510, 0.013403, 0.012510, 0.011914, 0.010425, 0.009233, 0.008340, 0.009531, 0.011318, 0.013403, 0.015786, 0.017871, 0.020254, 0.021446, 0.021148, 0.019956, 0.018765, 0.017871, 0.018169, 0.018467, 0.019658, 0.020552, 0.022935, 0.025020, 0.026509, 0.027998, 0.028296, 0.028594, 0.029190, 0.029785, 0.030977, 0.031573, 0.032764, 0.034551, 0.036040, 0.037232, 0.038125, 0.038423, 0.038423, 0.039019, 0.039615, 0.040508, 0.041700, 0.042593, 0.043487, 0.044380, 0.045274, 0.044976, 0.045274, 0.044678, 0.044380, 0.044082, 0.044082, 0.044082, 0.044082, 0.044082, 0.043785, 0.043487, 0.043487, 0.043487, 0.043189, 0.043785, 0.043487, 0.043189, 0.042593, 0.041700, 0.040508, 0.039019, 0.038423, 0.037530, 0.037232, 0.037232, 0.037530, 0.037232, 0.036934, 0.036040, 0.034849, 0.032764, 0.030977, 0.028892, 0.026807, 0.024722, 0.022935, 0.021743, 0.020552, 0.019063, 0.017573, 0.015488, 0.012808, 0.010127, 0.007446, 0.004468, 0.002085, -0.000596, -0.002979, -0.005361, -0.007446, -0.010127, -0.012510, -0.015191, -0.017871, -0.020254, -0.022339, -0.024722, -0.026509, -0.028594, -0.030679, -0.033360, -0.035743, -0.038125, -0.041104, -0.043487, -0.046465, -0.048848, -0.051231, -0.053614, -0.055997, -0.058677, -0.061060, -0.064039, -0.066719, -0.069698, -0.072677, -0.075655, -0.078336, -0.081016, -0.084293, -0.087271, -0.090548, -0.094122, -0.097696, -0.100973, -0.104249, -0.106930, -0.110206, -0.112589, -0.115270, -0.118248, -0.121227, -0.124205, -0.127482, -0.131056, -0.134630, -0.138205, -0.141183, -0.144459, -0.147438, -0.149821, -0.152799, -0.155778, -0.158459, -0.161735, -0.165011, -0.168288, -0.171862, -0.174841, -0.178415, -0.181393, -0.184670, -0.187053, -0.190031, -0.193605, -0.196882, -0.200158, -0.203137, -0.206711, -0.211179, -0.214753, -0.218327, -0.221008, -0.224880, -0.228454, -0.232327, -0.235901, -0.239475, -0.243049, -0.247517, -0.251985, -0.256751, -0.260325, -0.264197, -0.268665, -0.273431, -0.277005, -0.279983, -0.283558, -0.288621, -0.293982, -0.299642, -0.305003, -0.311258, -0.318407, -0.325853, -0.333299, -0.340746, -0.347894, -0.353851, -0.358021, -0.361595, -0.365170, -0.366361, -0.363978, -0.356532, -0.347001, -0.338065, -0.329725, -0.319598, -0.307982, -0.298450, -0.295770, -0.299642, -0.305003, -0.309173, -0.313343, -0.317811, -0.321087, -0.320194, -0.311854, -0.297855, -0.282366, -0.269856, -0.260921, -0.254368, -0.249602, -0.247517, -0.248411, -0.251091, -0.251985, -0.249602, -0.242454, -0.232922, -0.223391, -0.215051, -0.208796, -0.202839, -0.196584, -0.188840, -0.180202, -0.170075, -0.158459, -0.143566, -0.126290, -0.111100, -0.101271, -0.096207, -0.092335, -0.087867, -0.081612, -0.074762, -0.065230, -0.052422, -0.034551, -0.014595, 0.003276, 0.017573, 0.027105, 0.033658, 0.037530, 0.040210, 0.041700, 0.044380, 0.050040, 0.057486, 0.067911, 0.079825, 0.091441, 0.102462, 0.111993, 0.121227, 0.130162, 0.138205, 0.144459, 0.149225, 0.152799, 0.156672, 0.161139, 0.165011, 0.168884, 0.172756, 0.179904, 0.189138, 0.198967, 0.207009, 0.213860, 0.220412, 0.225774, 0.229050, 0.230242, 0.230837, 0.232922, 0.237092, 0.242454, 0.247517, 0.251985, 0.255261, 0.258240, 0.259729, 0.259729, 0.259431, 0.259729, 0.261516, 0.264793, 0.268665, 0.272537, 0.275515, 0.276707, 0.275218, 0.271941, 0.267473, 0.263303, 0.259729, 0.258538, 0.259729, 0.263899, 0.269856, 0.275515, 0.279388, 0.280281, 0.279090, 0.275218, 0.269558, 0.262112, 0.254964, 0.249602, 0.246326, 0.246028, 0.246326, 0.248113, 0.249900, 0.251389, 0.251985, 0.250496, 0.247219, 0.242454, 0.237092, 0.231433, 0.226072, 0.221008, 0.216540, 0.213860, 0.212072, 0.210285, 0.209094, 0.207903, 0.206413, 0.204626, 0.201648, 0.197775, 0.194499, 0.190925, 0.187946, 0.185861, 0.183776, 0.181393, 0.179606, 0.177223, 0.174245, 0.170373, 0.166501, 0.162331, 0.158459, 0.155480, 0.152799, 0.151012, 0.149821, 0.148629, 0.146544, 0.143268, 0.139098, 0.133141, 0.126886, 0.119440, 0.112887, 0.107823, 0.104547, 0.102760, 0.102164, 0.102462, 0.102462, 0.102164, 0.100973, 0.097994, 0.093228, 0.087867, 0.082208, 0.077442, 0.072974, 0.069698, 0.067315, 0.066124, 0.065826, 0.065230, 0.065230, 0.064039, 0.061954, 0.059273, 0.055997, 0.052422, 0.048848, 0.045274, 0.041700, 0.039317, 0.038125, 0.037530, 0.036934, 0.036040, 0.034551, 0.033360, 0.031275, 0.028594, 0.025615, 0.023531, 0.021743, 0.021148, 0.020850, 0.021148, 0.020850, 0.020254, 0.019361, 0.017871, 0.015786, 0.013701, 0.011914, 0.010425, 0.010127, 0.011318, 0.013106, 0.014893, 0.016084, 0.017276, 0.017276, 0.016680, 0.014595, 0.011914, 0.009531, 0.008042, 0.007744, 0.008042, 0.010127, 0.012510, 0.015786, 0.018169, 0.020254, 0.020850, 0.020552, 0.019361, 0.017871, 0.016382, 0.015488, 0.016084, 0.017276, 0.019063, 0.022041, 0.025020, 0.027998, 0.030083, 0.031573, 0.032466, 0.033062, 0.033062, 0.033360, 0.033062, 0.033955, 0.035147, 0.036934, 0.039019, 0.041104, 0.041997, 0.042891, 0.043487, 0.043487, 0.043189, 0.042593, 0.042295, 0.042593, 0.042891, 0.043189, 0.043785, 0.044082, 0.044380, 0.043785, 0.042593, 0.041700, 0.040210, 0.039019, 0.038721, 0.038721, 0.039019, 0.039913, 0.040508, 0.041700, 0.041997, 0.041997, 0.040806, 0.039913, 0.037828, 0.036636, 0.035147, 0.034551, 0.034253, 0.034253, 0.034551, 0.034849, 0.035445, 0.035147, 0.034253, 0.032168, 0.030381, 0.027105, 0.024424, 0.021446, 0.018765, 0.016978, 0.015191, 0.013999, 0.012808, 0.011021, 0.009233, 0.007149, 0.003872, 0.000596, -0.002681, -0.005659, -0.009233, -0.011914, -0.014297, -0.016680, -0.018169, -0.020552, -0.022339, -0.024126, -0.025913, -0.027998, -0.030679, -0.033360, -0.036338, -0.038721, -0.040210, -0.041997, -0.044082, -0.046763, -0.049444, -0.052422, -0.055699, -0.058677, -0.061656, -0.064634, -0.067613, -0.069996, -0.072974, -0.074762, -0.077144, -0.079527, -0.082208, -0.084591, -0.088165, -0.091441, -0.095313, -0.098888, -0.103356, -0.106930, -0.110802, -0.114376, -0.117057, -0.120035, -0.123312, -0.126588, -0.130460, -0.134630, -0.138800, -0.143566, -0.148332, -0.153693, -0.158756, -0.163522, -0.167990, -0.172756, -0.177521, -0.182287, -0.186755, -0.191520, -0.197180, -0.202839, -0.209392, -0.215051, -0.220710, -0.226369, -0.232029, -0.237986, -0.243645, -0.249304, -0.255559, -0.262410, -0.268665, -0.273728, -0.278792, -0.284451, -0.291004, -0.296961, -0.301429, -0.305599, -0.310662, -0.317215, -0.323768, -0.330023, -0.334789, -0.340448, -0.346703, -0.354745, -0.362489, -0.369638, -0.375892, -0.383339, -0.392572, -0.403295, -0.413422, -0.422358, -0.430996, -0.440527, -0.450654, -0.461079, -0.468227, -0.470610, -0.470015, -0.469121, -0.467334, -0.461079, -0.450654, -0.437548, -0.426528, -0.417294, -0.405976, -0.390487, -0.373510, -0.361893, -0.355638, -0.355638, -0.354447, -0.344916, -0.330321, -0.317513, -0.307386, -0.296365, -0.280281, -0.259431, -0.236497, -0.213860, -0.190329, -0.168586, -0.150119, -0.135226, -0.124205, -0.115270, -0.108419, -0.103058, -0.094420, -0.080719, -0.065230, -0.055103, -0.053018, -0.052422, -0.045870, -0.034253, -0.023233, -0.016382, -0.011616, -0.002979, 0.008042, 0.016084, 0.017276, 0.014595, 0.015786, 0.017573, 0.018765, 0.019658, 0.026807, 0.041700, 0.060762, 0.077144, 0.089952, 0.102760, 0.116759, 0.126290, 0.129567, 0.129269, 0.133737, 0.146544, 0.162926, 0.177819, 0.191520, 0.206413, 0.222795, 0.235603, 0.243049, 0.247219, 0.253176, 0.260623, 0.265984, 0.268069, 0.271346, 0.279685, 0.288621, 0.290706, 0.285345, 0.279388, 0.278792, 0.280579, 0.277005, 0.267473, 0.258836, 0.257049, 0.259431, 0.259133, 0.254368, 0.249304, 0.247815, 0.247219, 0.243347, 0.236497, 0.231433, 0.231135, 0.231731, 0.228454, 0.223987, 0.224582, 0.231135, 0.237986, 0.240369, 0.241560, 0.246624, 0.256155, 0.263006, 0.262708, 0.258836, 0.257942, 0.262410, 0.268665, 0.272835, 0.277303, 0.284749, 0.294280, 0.301429, 0.302918, 0.300833, 0.299046, 0.296663, 0.291302, 0.281473, 0.274026, 0.271643, 0.272835, 0.272239, 0.267771, 0.263006, 0.262112, 0.262112, 0.257644, 0.247219, 0.235901, 0.229348, 0.226667, 0.223391, 0.218030, 0.213860, 0.212668, 0.213562, 0.212072, 0.206711, 0.201945, 0.200158, 0.199860, 0.197478, 0.194201, 0.193605, 0.197775, 0.202541, 0.203733, 0.201648, 0.200158, 0.201350, 0.202243, 0.197478, 0.190031, 0.184074, 0.182287, 0.181393, 0.178415, 0.173947, 0.170075, 0.169479, 0.167096, 0.160544, 0.151608, 0.144162, 0.138502, 0.131354, 0.121823, 0.113483, 0.111100, 0.111398, 0.109908, 0.105143, 0.101866, 0.104547, 0.109015, 0.109313, 0.104845, 0.100377, 0.101568, 0.105441, 0.106930, 0.106334, 0.106036, 0.110206, 0.115270, 0.119142, 0.120333, 0.121227, 0.122716, 0.122716, 0.120929, 0.118844, 0.118248, 0.118248, 0.117355, 0.114972, 0.111993, 0.111695, 0.111993, 0.109313, 0.103653, 0.096207, 0.090846, 0.087569, 0.083101, 0.077740, 0.073570, 0.072379, 0.072677, 0.071783, 0.069400, 0.066124, 0.064337, 0.062847, 0.061656, 0.060167, 0.059869, 0.062549, 0.066124, 0.070294, 0.073868, 0.077144, 0.081016, 0.084889, 0.087569, 0.089654, 0.090846, 0.092037, 0.094718, 0.097101, 0.099483, 0.102164, 0.105143, 0.107823, 0.109610, 0.110802, 0.111993, 0.112291, 0.111398, 0.110206, 0.109015, 0.109313, 0.109313, 0.108419, 0.107526, 0.107526, 0.108121, 0.109908, 0.110802, 0.111993, 0.112589, 0.113483, 0.114972, 0.116461, 0.117355, 0.119142, 0.121227, 0.123908, 0.126886, 0.129865, 0.133141, 0.134928, 0.135822, 0.136715, 0.138205, 0.139396, 0.139694, 0.139396, 0.139396, 0.139098, 0.138800, 0.137609, 0.135226, 0.132545, 0.129567, 0.125397, 0.120333, 0.115568, 0.111100, 0.107228, 0.102462, 0.098292, 0.094122, 0.090548, 0.086080, 0.081016, 0.075357, 0.069698, 0.065528, 0.061656, 0.057784, 0.053614, 0.050040, 0.047657, 0.045870, 0.043189, 0.040508, 0.038125, 0.036040, 0.034253, 0.030977, 0.027105, 0.024126, 0.022041, 0.018765, 0.014893, 0.010723, 0.006851, 0.003276, -0.000894, -0.005957, -0.011914, -0.017871, -0.024126, -0.030679, -0.037828, -0.045572, -0.052720, -0.060464, -0.067911, -0.075655, -0.083101, -0.089952, -0.097101, -0.104845, -0.112887, -0.120333, -0.127482, -0.133737, -0.140885, -0.147438, -0.153693, -0.158459, -0.163224, -0.168586, -0.174543, -0.180500, -0.184372, -0.188542, -0.193308, -0.198967, -0.204030, -0.207307, -0.211179, -0.216540, -0.223391, -0.229944, -0.235603, -0.241858, -0.248709, -0.256751, -0.265091, -0.273728, -0.282068, -0.289813, -0.298450, -0.308279, -0.319300, -0.330916, -0.341044, -0.351171, -0.361893, -0.374403, -0.387211, -0.398827, -0.409550, -0.420273, -0.431889, -0.443803, -0.454228, -0.464355, -0.473887, -0.484609, -0.494439, -0.503672, -0.513799, -0.524820, -0.536436, -0.545670, -0.553116, -0.561754, -0.572179, -0.583497, -0.594220, -0.603453, -0.612091, -0.622218, -0.635324, -0.649025, -0.660046, -0.669577, -0.679108, -0.690725, -0.703830, -0.717532, -0.730935, -0.743743, -0.758040, -0.775018, -0.793187, -0.813143, -0.832801, -0.851864, -0.870331, -0.891181, -0.916499, -0.942710, -0.966538, -0.984409, -0.994536, -0.998706, -0.999600, -0.995430, -0.980239, -0.950156, -0.908754, -0.865268, -0.829823, -0.803016, -0.772039, -0.727361, -0.674343, -0.624899, -0.581710, -0.533160, -0.468227, -0.387807, -0.308279, -0.244836, -0.200158, -0.161437, -0.120333, -0.080421, -0.047359, -0.021148, 0.004766, 0.037232, 0.076251, 0.115568, 0.148332, 0.169479, 0.177223, 0.170373, 0.152799, 0.131950, 0.110206, 0.086676, 0.058677, 0.031573, 0.013106, 0.003574, -0.005361, -0.024722, -0.051827, -0.077442, -0.093824, -0.104547, -0.119440, -0.138800, -0.153097, -0.155480, -0.148332, -0.140885, -0.137311, -0.131354, -0.117057, -0.095909, -0.074762, -0.055997, -0.035743, -0.011021, 0.014595, 0.039317, 0.062252, 0.086676, 0.112887, 0.139694, 0.164714, 0.187351, 0.208498, 0.226965, 0.240964, 0.248113, 0.251687, 0.256453, 0.262708, 0.269856, 0.276111, 0.284749, 0.294876, 0.302322, 0.302322, 0.294876, 0.284153, 0.273133, 0.262708, 0.252581, 0.244241, 0.244241, 0.252581, 0.267176, 0.281473, 0.293089, 0.303812, 0.313343, 0.320789, 0.324661, 0.327938, 0.333299, 0.343426, 0.357723, 0.374999, 0.393764, 0.413124, 0.430698, 0.442910, 0.449165, 0.451548, 0.452739, 0.450952, 0.445888, 0.438442, 0.432187, 0.428017, 0.424145, 0.417294, 0.406274, 0.392572, 0.378573, 0.363680, 0.346405, 0.325555, 0.303812, 0.284749, 0.268665, 0.254070, 0.240369, 0.226965, 0.216540, 0.208200, 0.201350, 0.194797, 0.188840, 0.185563, 0.184670, 0.188244, 0.194499, 0.204328, 0.216242, 0.230837, 0.247815, 0.264495, 0.280281, 0.294578, 0.307684, 0.319300, 0.329725, 0.340150, 0.351468, 0.364872, 0.377680, 0.391083, 0.403295, 0.414614, 0.422954, 0.426528, 0.425038, 0.419379, 0.411933, 0.402997, 0.392572, 0.381552, 0.371723, 0.363978, 0.357128, 0.349383, 0.338959, 0.327044, 0.314237, 0.300833, 0.285643, 0.268963, 0.253474, 0.241858, 0.234114, 0.227859, 0.222200, 0.218327, 0.216242, 0.215051, 0.212370, 0.208498, 0.204626, 0.202541, 0.201945, 0.203733, 0.208498, 0.215945, 0.221902, 0.225476, 0.227859, 0.230242, 0.232922, 0.233518, 0.230539, 0.226965, 0.226667, 0.229348, 0.232327, 0.232327, 0.229646, 0.227263, 0.225476, 0.223391, 0.217732, 0.209690, 0.201052, 0.194499, 0.190031, 0.187053, 0.185266, 0.184074, 0.184074, 0.183478, 0.183181, 0.182585, 0.181096, 0.179011, 0.175139, 0.171862, 0.170671, 0.171266, 0.173947, 0.176032, 0.178713, 0.182287, 0.187351, 0.192414, 0.194499, 0.194797, 0.193605, 0.193308, 0.193605, 0.193308, 0.192414, 0.191223, 0.193010, 0.196882, 0.201350, 0.203733, 0.204626, 0.204924, 0.206115, 0.206413, 0.206115, 0.204924, 0.205222, 0.207903, 0.211179, 0.215349, 0.218625, 0.221306, 0.222795, 0.223093, 0.222200, 0.220710, 0.220115, 0.219817, 0.219817, 0.219817, 0.222200, 0.223987, 0.226072, 0.225178, 0.222200, 0.217434, 0.212370, 0.206413, 0.200158, 0.192712, 0.186755, 0.181989, 0.178117, 0.173351, 0.167394, 0.160841, 0.154587, 0.146544, 0.137907, 0.128077, 0.119440, 0.111695, 0.105441, 0.100377, 0.095909, 0.092633, 0.090548, 0.088165, 0.085186, 0.081314, 0.077144, 0.073868, 0.070592, 0.068209, 0.066124, 0.064932, 0.064932, 0.064634, 0.064039, 0.063741, 0.062847, 0.062252, 0.059869, 0.056592, 0.052422, 0.048252, 0.044678, 0.040210, 0.035147, 0.030381, 0.026211, 0.022041, 0.016382, 0.009531, 0.001489, -0.005659, -0.013106, -0.020254, -0.028594, -0.035743, -0.041997, -0.047359, -0.053018, -0.058975, -0.065230, -0.070889, -0.076549, -0.082208, -0.088463, -0.094718, -0.099483, -0.103951, -0.107526, -0.110802, -0.113780, -0.117057, -0.120631, -0.125695, -0.131652, -0.138205, -0.144757, -0.151608, -0.158756, -0.165905, -0.172160, -0.177521, -0.183181, -0.190329, -0.197478, -0.205222, -0.212966, -0.221604, -0.231731, -0.242156, -0.252283, -0.260027, -0.267176, -0.274324, -0.282068, -0.289217, -0.295770, -0.302025, -0.309173, -0.318407, -0.327044, -0.333895, -0.340150, -0.346703, -0.353553, -0.359510, -0.364276, -0.368148, -0.374105, -0.381552, -0.389594, -0.396147, -0.401806, -0.409550, -0.418486, -0.427719, -0.435463, -0.441420, -0.448271, -0.456611, -0.467334, -0.478057, -0.486694, -0.495630, -0.506055, -0.516480, -0.526607, -0.534947, -0.542691, -0.549542, -0.558179, -0.568902, -0.579327, -0.589156, -0.600773, -0.612687, -0.623112, -0.632643, -0.642174, -0.649919, -0.656471, -0.664216, -0.673151, -0.681491, -0.689236, -0.698469, -0.710085, -0.722595, -0.734509, -0.747913, -0.759231, -0.769954, -0.781273, -0.797357, -0.816122, -0.834886, -0.852162, -0.870927, -0.896244, -0.927221, -0.955815, -0.974282, -0.980239, -0.978154, -0.972793, -0.964453, -0.947475, -0.915903, -0.869735, -0.819100, -0.774124, -0.740764, -0.710383, -0.668684, -0.611495, -0.548946, -0.493545, -0.441718, -0.381254, -0.302918, -0.216540, -0.141183, -0.089059, -0.054210, -0.021148, 0.015786, 0.050337, 0.073868, 0.088165, 0.106334, 0.135226, 0.167990, 0.192414, 0.204030, 0.204030, 0.193308, 0.170969, 0.139396, 0.103058, 0.065826, 0.030083, -0.002085, -0.029488, -0.050933, -0.066422, -0.083697, -0.106334, -0.131950, -0.151906, -0.165011, -0.176032, -0.189138, -0.200158, -0.199265, -0.184074, -0.161437, -0.142077, -0.127780, -0.109908, -0.081910, -0.050040, -0.023233, -0.002383, 0.020552, 0.053018, 0.089356, 0.124205, 0.153097, 0.179011, 0.205222, 0.230539, 0.251687, 0.265091, 0.273133, 0.278792, 0.283558, 0.286238, 0.286834, 0.288919, 0.293089, 0.297855, 0.302322, 0.303812, 0.303216, 0.299046, 0.289813, 0.277303, 0.264495, 0.254964, 0.249304, 0.247517, 0.250794, 0.260921, 0.277005, 0.295770, 0.312449, 0.325853, 0.337767, 0.348788, 0.357723, 0.364276, 0.371127, 0.380956, 0.394955, 0.411933, 0.428613, 0.442612, 0.453930, 0.461377, 0.463462, 0.458696, 0.448867, 0.436655, 0.423549, 0.409848, 0.395551, 0.382445, 0.370233, 0.358021, 0.342533, 0.324066, 0.304110, 0.285345, 0.265984, 0.245134, 0.225178, 0.208796, 0.198669, 0.193308, 0.190329, 0.186457, 0.184670, 0.186159, 0.190329, 0.195095, 0.198669, 0.204924, 0.215945, 0.232624, 0.251687, 0.271048, 0.291898, 0.314534, 0.338363, 0.358915, 0.374701, 0.387509, 0.398529, 0.408061, 0.415209, 0.421166, 0.427123, 0.433974, 0.440527, 0.445293, 0.447675, 0.447675, 0.444399, 0.436357, 0.424145, 0.408359, 0.391977, 0.376190, 0.360404, 0.344618, 0.329725, 0.318109, 0.309173, 0.300237, 0.289217, 0.276707, 0.264793, 0.253474, 0.242751, 0.230837, 0.220710, 0.214455, 0.211775, 0.211775, 0.212966, 0.218030, 0.225476, 0.232922, 0.238582, 0.241560, 0.244836, 0.249602, 0.254368, 0.258240, 0.261218, 0.265686, 0.272835, 0.278792, 0.281770, 0.282366, 0.282366, 0.281175, 0.278196, 0.272835, 0.266580, 0.261218, 0.257942, 0.255261, 0.250794, 0.245432, 0.241858, 0.239177, 0.234412, 0.227561, 0.220115, 0.213860, 0.209987, 0.206413, 0.203435, 0.201052, 0.200754, 0.201648, 0.202243, 0.200754, 0.198967, 0.196584, 0.194201, 0.191520, 0.189138, 0.187946, 0.188244, 0.189733, 0.191520, 0.192414, 0.192712, 0.193308, 0.193308, 0.191520, 0.187648, 0.184074, 0.181691, 0.179011, 0.176926, 0.176032, 0.176330, 0.177819, 0.180500, 0.183181, 0.184968, 0.187053, 0.188542, 0.189733, 0.190925, 0.192116, 0.194797, 0.198371, 0.201945, 0.206711, 0.211179, 0.215349, 0.220115, 0.222795, 0.223987, 0.224582, 0.223689, 0.222200, 0.219519, 0.216838, 0.214455, 0.211477, 0.207605, 0.202243, 0.195690, 0.188244, 0.179904, 0.170373, 0.159650, 0.148034, 0.137907, 0.128077, 0.118248, 0.108419, 0.098888, 0.090250, 0.082208, 0.073570, 0.064932, 0.056592, 0.049444, 0.043487, 0.038721, 0.034849, 0.032466, 0.031573, 0.031870, 0.032168, 0.032168, 0.032168, 0.032466, 0.032764, 0.032466, 0.032168, 0.031870, 0.031573, 0.031870, 0.031870, 0.031275, 0.030381, 0.028296, 0.025913, 0.022041, 0.016382, 0.009829, 0.002383, -0.005064, -0.012808, -0.020850, -0.028594, -0.036040, -0.042891, -0.050040, -0.057486, -0.064932, -0.072677, -0.080123, -0.087271, -0.094122, -0.100377, -0.106334, -0.111695, -0.116461, -0.120333, -0.123610, -0.127482, -0.131056, -0.134630, -0.138205, -0.141183, -0.145353, -0.150417, -0.154884, -0.159054, -0.162926, -0.167394, -0.173054, -0.179606, -0.186159, -0.193308, -0.201350, -0.209690, -0.218327, -0.226072, -0.234114, -0.242156, -0.251091, -0.260027, -0.268665, -0.277005, -0.285047, -0.293982, -0.302918, -0.312152, -0.319896, -0.326449, -0.333597, -0.341044, -0.347298, -0.352660, -0.355936, -0.361298, -0.368148, -0.375892, -0.382147, -0.386913, -0.391977, -0.398827, -0.406572, -0.413720, -0.418784, -0.422954, -0.428613, -0.435463, -0.443803, -0.450654, -0.456909, -0.464653, -0.473589, -0.483120, -0.491460, -0.498906, -0.506055, -0.512906, -0.520352, -0.527798, -0.536436, -0.545670, -0.554903, -0.563839, -0.573668, -0.584689, -0.594816, -0.602858, -0.609708, -0.614474, -0.619835, -0.627580, -0.637707, -0.646940, -0.654387, -0.661833, -0.672258, -0.685661, -0.697575, -0.704426, -0.708298, -0.715745, -0.730042, -0.745828, -0.758933, -0.772039, -0.788719, -0.810760, -0.836376, -0.860800, -0.881650, -0.901010, -0.921264, -0.938838, -0.944497, -0.937646, -0.924541, -0.910839, -0.892372, -0.861693, -0.814632, -0.760125, -0.712170, -0.675236, -0.638898, -0.591241, -0.532266, -0.472993, -0.419975, -0.367553, -0.303514, -0.224582, -0.143268, -0.077442, -0.032168, 0.002979, 0.038721, 0.071187, 0.092335, 0.101866, 0.111695, 0.130162, 0.153395, 0.173351, 0.185266, 0.190627, 0.189436, 0.176032, 0.147736, 0.109313, 0.068507, 0.030381, -0.003872, -0.036040, -0.064634, -0.085782, -0.100973, -0.115568, -0.134630, -0.155480, -0.168586, -0.173649, -0.178415, -0.186457, -0.189138, -0.178117, -0.154884, -0.130460, -0.112589, -0.095313, -0.070592, -0.037828, -0.005659, 0.020254, 0.043189, 0.072081, 0.108419, 0.145055, 0.175139, 0.197775, 0.218625, 0.242156, 0.263006, 0.276111, 0.281770, 0.285940, 0.291600, 0.295770, 0.294578, 0.290706, 0.288919, 0.292195, 0.295472, 0.296961, 0.295770, 0.293387, 0.289813, 0.284153, 0.275813, 0.266878, 0.259729, 0.257644, 0.261218, 0.269558, 0.281473, 0.298152, 0.318704, 0.338959, 0.356532, 0.369638, 0.380658, 0.390487, 0.399125, 0.406274, 0.412826, 0.421464, 0.433676, 0.447080, 0.457803, 0.462866, 0.462568, 0.457207, 0.448867, 0.436655, 0.419975, 0.399423, 0.380360, 0.363978, 0.349681, 0.333597, 0.315428, 0.297259, 0.280579, 0.264197, 0.246921, 0.228157, 0.210881, 0.198371, 0.190329, 0.186159, 0.183776, 0.184372, 0.187053, 0.193010, 0.200456, 0.207605, 0.215647, 0.226072, 0.240667, 0.258240, 0.277303, 0.297855, 0.320492, 0.342831, 0.364276, 0.383041, 0.398827, 0.411635, 0.421464, 0.428017, 0.431889, 0.434570, 0.436357, 0.438144, 0.439038, 0.438442, 0.436655, 0.432783, 0.426528, 0.416996, 0.404487, 0.390487, 0.373808, 0.356830, 0.339852, 0.323172, 0.308279, 0.295472, 0.284749, 0.275813, 0.267771, 0.260325, 0.252879, 0.244836, 0.236497, 0.229050, 0.222200, 0.216540, 0.212668, 0.212072, 0.214455, 0.219221, 0.224582, 0.228454, 0.232029, 0.236199, 0.240964, 0.245134, 0.246624, 0.246624, 0.248411, 0.252879, 0.257346, 0.259729, 0.259729, 0.260027, 0.262708, 0.265686, 0.265091, 0.259431, 0.252283, 0.248113, 0.247219, 0.245730, 0.243645, 0.240369, 0.237986, 0.237390, 0.235901, 0.231433, 0.224582, 0.218030, 0.213860, 0.210285, 0.207605, 0.204924, 0.202541, 0.200158, 0.198669, 0.196882, 0.193903, 0.191223, 0.186755, 0.180202, 0.172756, 0.166501, 0.162331, 0.159054, 0.156672, 0.156076, 0.156672, 0.157565, 0.157565, 0.156076, 0.152799, 0.150119, 0.149225, 0.148629, 0.147736, 0.147736, 0.149225, 0.153097, 0.159054, 0.165607, 0.171266, 0.176330, 0.182287, 0.188542, 0.193308, 0.196882, 0.199860, 0.203733, 0.209392, 0.215349, 0.220412, 0.223689, 0.225476, 0.226667, 0.228157, 0.227263, 0.223987, 0.219519, 0.214455, 0.209094, 0.203137, 0.195690, 0.186755, 0.179011, 0.171862, 0.163522, 0.153991, 0.142077, 0.131056, 0.120035, 0.109610, 0.100079, 0.090846, 0.083399, 0.077144, 0.071187, 0.065230, 0.059273, 0.054210, 0.050337, 0.046465, 0.042891, 0.040210, 0.038423, 0.038721, 0.039317, 0.039615, 0.041700, 0.044082, 0.046763, 0.047359, 0.046465, 0.044380, 0.041997, 0.039615, 0.037530, 0.034551, 0.031870, 0.029785, 0.027403, 0.025020, 0.020850, 0.015488, 0.009531, 0.003872, -0.002383, -0.009829, -0.017871, -0.025318, -0.031870, -0.037828, -0.043487, -0.048252, -0.052720, -0.056890, -0.061358, -0.066422, -0.071783, -0.076549, -0.081016, -0.084889, -0.088761, -0.092335, -0.096207, -0.099781, -0.103653, -0.108121, -0.112291, -0.117057, -0.122418, -0.127780, -0.134035, -0.139992, -0.146842, -0.153991, -0.161735, -0.168884, -0.176032, -0.184372, -0.193308, -0.202541, -0.211179, -0.220115, -0.228454, -0.237390, -0.244836, -0.251687, -0.258538, -0.264793, -0.271346, -0.277005, -0.282068, -0.286834, -0.291600, -0.295472, -0.299642, -0.302918, -0.306492, -0.309173, -0.312152, -0.315130, -0.317513, -0.320789, -0.324959, -0.328831, -0.332704, -0.336278, -0.341044, -0.347596, -0.354745, -0.362191, -0.369935, -0.378573, -0.387807, -0.397934, -0.408657, -0.418486, -0.427719, -0.437251, -0.447080, -0.457803, -0.468227, -0.478354, -0.486099, -0.494141, -0.504566, -0.515884, -0.525118, -0.530777, -0.537032, -0.544776, -0.552520, -0.559073, -0.562647, -0.566222, -0.572477, -0.582008, -0.590944, -0.596007, -0.601071, -0.609410, -0.618942, -0.628473, -0.634728, -0.640090, -0.647834, -0.658259, -0.668684, -0.677023, -0.686555, -0.699958, -0.715447, -0.732127, -0.748509, -0.764891, -0.780677, -0.800335, -0.820589, -0.839354, -0.856630, -0.878969, -0.905180, -0.929008, -0.941816, -0.941221, -0.932881, -0.924243, -0.913818, -0.889989, -0.847992, -0.792889, -0.736594, -0.688640, -0.647834, -0.605241, -0.551627, -0.490567, -0.432187, -0.380360, -0.326746, -0.260623, -0.180202, -0.099186, -0.034551, 0.008936, 0.042295, 0.073868, 0.104249, 0.126290, 0.136120, 0.137609, 0.140290, 0.152799, 0.170373, 0.180798, 0.179011, 0.166501, 0.148034, 0.123908, 0.092633, 0.052422, 0.008638, -0.032168, -0.064634, -0.089654, -0.108419, -0.125992, -0.145353, -0.161735, -0.170373, -0.172756, -0.174543, -0.177819, -0.180202, -0.174841, -0.160544, -0.138800, -0.114376, -0.091739, -0.068507, -0.039913, -0.006851, 0.027105, 0.055401, 0.079825, 0.105738, 0.137311, 0.169479, 0.196584, 0.217434, 0.235901, 0.254368, 0.271048, 0.282962, 0.289813, 0.293089, 0.293089, 0.291004, 0.287430, 0.283558, 0.280281, 0.279983, 0.282068, 0.285940, 0.288323, 0.289515, 0.289515, 0.287728, 0.283855, 0.278494, 0.275515, 0.276707, 0.281175, 0.290408, 0.304705, 0.324959, 0.347298, 0.368148, 0.386615, 0.403593, 0.417294, 0.427421, 0.433081, 0.434868, 0.437846, 0.443208, 0.450356, 0.456015, 0.458994, 0.459292, 0.456015, 0.449760, 0.438144, 0.419975, 0.397636, 0.375892, 0.354745, 0.334193, 0.314534, 0.294876, 0.277303, 0.260921, 0.246326, 0.233220, 0.220412, 0.207605, 0.195393, 0.186159, 0.181393, 0.181691, 0.184670, 0.189733, 0.197775, 0.208796, 0.222200, 0.235901, 0.249602, 0.263303, 0.279090, 0.297557, 0.317513, 0.337767, 0.357426, 0.375892, 0.394657, 0.411933, 0.426528, 0.437251, 0.443208, 0.445888, 0.446186, 0.443208, 0.439336, 0.434570, 0.429804, 0.424443, 0.418784, 0.412231, 0.405082, 0.395551, 0.383339, 0.369340, 0.353553, 0.338363, 0.323470, 0.308577, 0.294876, 0.282664, 0.274026, 0.268963, 0.264793, 0.260623, 0.255857, 0.251389, 0.247517, 0.243049, 0.237390, 0.231433, 0.226965, 0.224880, 0.224582, 0.225178, 0.226667, 0.229050, 0.232624, 0.235603, 0.236794, 0.236199, 0.236794, 0.237986, 0.240071, 0.240667, 0.239773, 0.239475, 0.239773, 0.240071, 0.239177, 0.237390, 0.236199, 0.235007, 0.234412, 0.233518, 0.232327, 0.231135, 0.229944, 0.228752, 0.227859, 0.226369, 0.223987, 0.220710, 0.218030, 0.216540, 0.216242, 0.217136, 0.216838, 0.214753, 0.212072, 0.209690, 0.206413, 0.202541, 0.196584, 0.190329, 0.183776, 0.178713, 0.172756, 0.165607, 0.159650, 0.154289, 0.150119, 0.147438, 0.146247, 0.143864, 0.139992, 0.136715, 0.135524, 0.135822, 0.136715, 0.137311, 0.138205, 0.139694, 0.142970, 0.147736, 0.152204, 0.157565, 0.164714, 0.173054, 0.181691, 0.189138, 0.195095, 0.199563, 0.204030, 0.209392, 0.213264, 0.215945, 0.218327, 0.220412, 0.221306, 0.221008, 0.219519, 0.217434, 0.213860, 0.209392, 0.203137, 0.195988, 0.187648, 0.179011, 0.169479, 0.159948, 0.150417, 0.141183, 0.131950, 0.123014, 0.113780, 0.105143, 0.097696, 0.091441, 0.085484, 0.079825, 0.074166, 0.069996, 0.066422, 0.062549, 0.059571, 0.057188, 0.056295, 0.055997, 0.055997, 0.055997, 0.055997, 0.056592, 0.057188, 0.057188, 0.056890, 0.055997, 0.054210, 0.052125, 0.049146, 0.045870, 0.041700, 0.038125, 0.034551, 0.030381, 0.025913, 0.021148, 0.016084, 0.010723, 0.005659, 0.000000, -0.004468, -0.009829, -0.015191, -0.020850, -0.026509, -0.031870, -0.036934, -0.041402, -0.045572, -0.048550, -0.051529, -0.054210, -0.056890, -0.059571, -0.062549, -0.065230, -0.067911, -0.071485, -0.076251, -0.080421, -0.085484, -0.090548, -0.095313, -0.100973, -0.106334, -0.112291, -0.118248, -0.124503, -0.132247, -0.139992, -0.148332, -0.156969, -0.164714, -0.172756, -0.180798, -0.189733, -0.198073, -0.206413, -0.214157, -0.220710, -0.226965, -0.233220, -0.238879, -0.243645, -0.248709, -0.252879, -0.257346, -0.261814, -0.266282, -0.270154, -0.272537, -0.275218, -0.279090, -0.282068, -0.285345, -0.286238, -0.287430, -0.290110, -0.294876, -0.300237, -0.305003, -0.309173, -0.314832, -0.322874, -0.330619, -0.336874, -0.342831, -0.350575, -0.360404, -0.370233, -0.380062, -0.388700, -0.397934, -0.408954, -0.419677, -0.428315, -0.436357, -0.444697, -0.454824, -0.463164, -0.471504, -0.478354, -0.485503, -0.493843, -0.502481, -0.509331, -0.514693, -0.519458, -0.525713, -0.532862, -0.540010, -0.545967, -0.550435, -0.555797, -0.566222, -0.577242, -0.586178, -0.592731, -0.600177, -0.610006, -0.619835, -0.628175, -0.633835, -0.639792, -0.648429, -0.658854, -0.667492, -0.674641, -0.685363, -0.699660, -0.713362, -0.724382, -0.733616, -0.745828, -0.761614, -0.777103, -0.790506, -0.802420, -0.821185, -0.845907, -0.870927, -0.890287, -0.901010, -0.903691, -0.900414, -0.892670, -0.877777, -0.849779, -0.810462, -0.762806, -0.711277, -0.660344, -0.613878, -0.570689, -0.523926, -0.471504, -0.416699, -0.363978, -0.311258, -0.254070, -0.185563, -0.110206, -0.043487, 0.002979, 0.037530, 0.067911, 0.094718, 0.113185, 0.117653, 0.114376, 0.112887, 0.119738, 0.132545, 0.140587, 0.139694, 0.132545, 0.120333, 0.100973, 0.072974, 0.036338, -0.004170, -0.040210, -0.070294, -0.095313, -0.115568, -0.128673, -0.137609, -0.145353, -0.150714, -0.151012, -0.148332, -0.146247, -0.143268, -0.136417, -0.121525, -0.098888, -0.072379, -0.045870, -0.021148, 0.005957, 0.034849, 0.064337, 0.089952, 0.112291, 0.134332, 0.159054, 0.185861, 0.210285, 0.229348, 0.246028, 0.261516, 0.274920, 0.283260, 0.287132, 0.287132, 0.285047, 0.280579, 0.274026, 0.269261, 0.267771, 0.269261, 0.272239, 0.277898, 0.285047, 0.292195, 0.296365, 0.298450, 0.298450, 0.298450, 0.299344, 0.302620, 0.308279, 0.317513, 0.332704, 0.354149, 0.377382, 0.398827, 0.418486, 0.435166, 0.449760, 0.458100, 0.461079, 0.460185, 0.458398, 0.458100, 0.457505, 0.455718, 0.453335, 0.450356, 0.443505, 0.432783, 0.417294, 0.398529, 0.376488, 0.353553, 0.330023, 0.307386, 0.287430, 0.271346, 0.257346, 0.244241, 0.233220, 0.223391, 0.215349, 0.208796, 0.202243, 0.198073, 0.198073, 0.202839, 0.211775, 0.222497, 0.235603, 0.250496, 0.267176, 0.282664, 0.297259, 0.310662, 0.323470, 0.336874, 0.350873, 0.365765, 0.381254, 0.396742, 0.410444, 0.422656, 0.432187, 0.438442, 0.440527, 0.437548, 0.430698, 0.421762, 0.411933, 0.403295, 0.394955, 0.387509, 0.380360, 0.375595, 0.370829, 0.365468, 0.357128, 0.347001, 0.335384, 0.324066, 0.313045, 0.302620, 0.293685, 0.286238, 0.281473, 0.280281, 0.280281, 0.280281, 0.278494, 0.275813, 0.273133, 0.269856, 0.264793, 0.259729, 0.255857, 0.255261, 0.254964, 0.253772, 0.251687, 0.251091, 0.251091, 0.249006, 0.244539, 0.238582, 0.234114, 0.231731, 0.229944, 0.228454, 0.226369, 0.225476, 0.226369, 0.226965, 0.226965, 0.224284, 0.220710, 0.217732, 0.217136, 0.217732, 0.220115, 0.223689, 0.228752, 0.233220, 0.237092, 0.240667, 0.242454, 0.241858, 0.238582, 0.233816, 0.229050, 0.224880, 0.221008, 0.216540, 0.212072, 0.208498, 0.204924, 0.199860, 0.193605, 0.184968, 0.175139, 0.164416, 0.154289, 0.144459, 0.135226, 0.127482, 0.122120, 0.119738, 0.118844, 0.119440, 0.120631, 0.123610, 0.126290, 0.128077, 0.129567, 0.132545, 0.137013, 0.142672, 0.149225, 0.157267, 0.165905, 0.175436, 0.184372, 0.192414, 0.198967, 0.204626, 0.209392, 0.212370, 0.214157, 0.215945, 0.216838, 0.217434, 0.217434, 0.215945, 0.212966, 0.209094, 0.203137, 0.195690, 0.185861, 0.176628, 0.167692, 0.159352, 0.150714, 0.143268, 0.136715, 0.131056, 0.125099, 0.117355, 0.109313, 0.102164, 0.095909, 0.088761, 0.082208, 0.078038, 0.075357, 0.073868, 0.073868, 0.073868, 0.073570, 0.072677, 0.071485, 0.069400, 0.065826, 0.062252, 0.058975, 0.055997, 0.053316, 0.050635, 0.049444, 0.048252, 0.047061, 0.044678, 0.040806, 0.036636, 0.031573, 0.026509, 0.020254, 0.014595, 0.008936, 0.004766, 0.001191, -0.001787, -0.005064, -0.007446, -0.009829, -0.011914, -0.015488, -0.018765, -0.022041, -0.024424, -0.026807, -0.029190, -0.031573, -0.033360, -0.034551, -0.036338, -0.039019, -0.042891, -0.047061, -0.051529, -0.056890, -0.062549, -0.069400, -0.075357, -0.081314, -0.087271, -0.094420, -0.102164, -0.110504, -0.119142, -0.128673, -0.137907, -0.147736, -0.156672, -0.165011, -0.172458, -0.179011, -0.186159, -0.192116, -0.197478, -0.202541, -0.207903, -0.213562, -0.219221, -0.224284, -0.228454, -0.232029, -0.235007, -0.237390, -0.238879, -0.239773, -0.241560, -0.243645, -0.245730, -0.248709, -0.251687, -0.256155, -0.260623, -0.265686, -0.269558, -0.273728, -0.278792, -0.284153, -0.289515, -0.295174, -0.301727, -0.309769, -0.317513, -0.324364, -0.331214, -0.339852, -0.349681, -0.357723, -0.364276, -0.370531, -0.378573, -0.387211, -0.395849, -0.402402, -0.408061, -0.413720, -0.420273, -0.428017, -0.433676, -0.438442, -0.442612, -0.446782, -0.451250, -0.456015, -0.463164, -0.469419, -0.474482, -0.478950, -0.486694, -0.497119, -0.506353, -0.510225, -0.512608, -0.519161, -0.530479, -0.542095, -0.548052, -0.551925, -0.557584, -0.567711, -0.579625, -0.590348, -0.595709, -0.598688, -0.603156, -0.611793, -0.623410, -0.631452, -0.633239, -0.634132, -0.640090, -0.653791, -0.667194, -0.673747, -0.677321, -0.682981, -0.696384, -0.713957, -0.729148, -0.740169, -0.750891, -0.768465, -0.792293, -0.817015, -0.837865, -0.855141, -0.870033, -0.879267, -0.880458, -0.872714, -0.857225, -0.833993, -0.799740, -0.756253, -0.708894, -0.659152, -0.608219, -0.558477, -0.512906, -0.466738, -0.415209, -0.359213, -0.303216, -0.246326, -0.186755, -0.120333, -0.054507, 0.000298, 0.039019, 0.064932, 0.083697, 0.097398, 0.105738, 0.107526, 0.105143, 0.103058, 0.106632, 0.114376, 0.115568, 0.104845, 0.086974, 0.066422, 0.041997, 0.010723, -0.024722, -0.055699, -0.078038, -0.093526, -0.107228, -0.118546, -0.124503, -0.127780, -0.130758, -0.131950, -0.128077, -0.118248, -0.105143, -0.087271, -0.066719, -0.042295, -0.014595, 0.014297, 0.039615, 0.059571, 0.077740, 0.098590, 0.122120, 0.142077, 0.157565, 0.173054, 0.193308, 0.215349, 0.232624, 0.242156, 0.249304, 0.255857, 0.261218, 0.262112, 0.258240, 0.251985, 0.246624, 0.243347, 0.241262, 0.240964, 0.243645, 0.251389, 0.264197, 0.278494, 0.290408, 0.300833, 0.310364, 0.320789, 0.329427, 0.335682, 0.343128, 0.355638, 0.372020, 0.390487, 0.409252, 0.428315, 0.447675, 0.464355, 0.476269, 0.482822, 0.484907, 0.484014, 0.481929, 0.477759, 0.471206, 0.462270, 0.451548, 0.440825, 0.427719, 0.411039, 0.390785, 0.369042, 0.348192, 0.328831, 0.309769, 0.291898, 0.275813, 0.263303, 0.253176, 0.244539, 0.236199, 0.228752, 0.223093, 0.220710, 0.221306, 0.223689, 0.228752, 0.237688, 0.250794, 0.266282, 0.282962, 0.298748, 0.313343, 0.327342, 0.339852, 0.350575, 0.359213, 0.366659, 0.373212, 0.379169, 0.386317, 0.393168, 0.399423, 0.404189, 0.407465, 0.408954, 0.407763, 0.402997, 0.395253, 0.386317, 0.377084, 0.368148, 0.359510, 0.353553, 0.349383, 0.347001, 0.344916, 0.344022, 0.343128, 0.343128, 0.341639, 0.340448, 0.338065, 0.335980, 0.334491, 0.333299, 0.331810, 0.329427, 0.327044, 0.324661, 0.321683, 0.316322, 0.309173, 0.301429, 0.295770, 0.291302, 0.285345, 0.275515, 0.265686, 0.257644, 0.251389, 0.243943, 0.235603, 0.226667, 0.218625, 0.213264, 0.209392, 0.205222, 0.201052, 0.200158, 0.202839, 0.207605, 0.212966, 0.217434, 0.221604, 0.224582, 0.227859, 0.230837, 0.233816, 0.236794, 0.240071, 0.243645, 0.246921, 0.250198, 0.254070, 0.257049, 0.258240, 0.256751, 0.251985, 0.246028, 0.239177, 0.230539, 0.220710, 0.209690, 0.199265, 0.190329, 0.183478, 0.175436, 0.166203, 0.156374, 0.148927, 0.142970, 0.137311, 0.130758, 0.124503, 0.120631, 0.119738, 0.120929, 0.122120, 0.123312, 0.126588, 0.131056, 0.136120, 0.140885, 0.146544, 0.152799, 0.160544, 0.167990, 0.174543, 0.180500, 0.185861, 0.190031, 0.192712, 0.193903, 0.194499, 0.194201, 0.193308, 0.191520, 0.189436, 0.186755, 0.184968, 0.183776, 0.181393, 0.177819, 0.173351, 0.169181, 0.164416, 0.159054, 0.152799, 0.146247, 0.141183, 0.137907, 0.135226, 0.132843, 0.131354, 0.130162, 0.129567, 0.128971, 0.127482, 0.125099, 0.121823, 0.118546, 0.115270, 0.111398, 0.107228, 0.102462, 0.097994, 0.093526, 0.088761, 0.083697, 0.077740, 0.071783, 0.065528, 0.058975, 0.052125, 0.045274, 0.038125, 0.031870, 0.026509, 0.021148, 0.016382, 0.011616, 0.007744, 0.004468, 0.002681, 0.000596, 0.000000, -0.000298, 0.000298, 0.000894, 0.002085, 0.002979, 0.003574, 0.003574, 0.002979, 0.001787, 0.000596, -0.000894, -0.002383, -0.004468, -0.007149, -0.010127, -0.013403, -0.017573, -0.022935, -0.029190, -0.036040, -0.044082, -0.052125, -0.060762, -0.070592, -0.079527, -0.088165, -0.095909, -0.103058, -0.110206, -0.116461, -0.122418, -0.128077, -0.134035, -0.139992, -0.145949, -0.151310, -0.155480, -0.159650, -0.164416, -0.168586, -0.172458, -0.175734, -0.178713, -0.182287, -0.186159, -0.190329, -0.194499, -0.198371, -0.203137, -0.208796, -0.214157, -0.219519, -0.224880, -0.230539, -0.237092, -0.243943, -0.250198, -0.256751, -0.263303, -0.269261, -0.274920, -0.279388, -0.283855, -0.288025, -0.293387, -0.298450, -0.301429, -0.304407, -0.308875, -0.314237, -0.319598, -0.322874, -0.324959, -0.327342, -0.330916, -0.334491, -0.338065, -0.341341, -0.344022, -0.347894, -0.354745, -0.363383, -0.369935, -0.374701, -0.380956, -0.389892, -0.398232, -0.405380, -0.412529, -0.419677, -0.427123, -0.436953, -0.447378, -0.455718, -0.463760, -0.473589, -0.483120, -0.490567, -0.497715, -0.506949, -0.514395, -0.519161, -0.523628, -0.529585, -0.534947, -0.540606, -0.546861, -0.550137, -0.551031, -0.553116, -0.557286, -0.560562, -0.560562, -0.559669, -0.562349, -0.568604, -0.577242, -0.584689, -0.588263, -0.592135, -0.603453, -0.618644, -0.630558, -0.637707, -0.645749, -0.661237, -0.680300, -0.697575, -0.708298, -0.717532, -0.734212, -0.757146, -0.777996, -0.792591, -0.809867, -0.833397, -0.857523, -0.874799, -0.879565, -0.872416, -0.858119, -0.841737, -0.817015, -0.775613, -0.722000, -0.661833, -0.597794, -0.537925, -0.491162, -0.451548, -0.405082, -0.349383, -0.296067, -0.250496, -0.208796, -0.159352, -0.095016, -0.024722, 0.025615, 0.046167, 0.053018, 0.064932, 0.076846, 0.075655, 0.055997, 0.031573, 0.019658, 0.026509, 0.036636, 0.031275, 0.015786, 0.003574, -0.004468, -0.018169, -0.042593, -0.069102, -0.087271, -0.092335, -0.089356, -0.089654, -0.090548, -0.084889, -0.074166, -0.066124, -0.059869, -0.048550, -0.033360, -0.015786, 0.001489, 0.020850, 0.044678, 0.072677, 0.097994, 0.112291, 0.116759, 0.123312, 0.134332, 0.142077, 0.141779, 0.137907, 0.138502, 0.148629, 0.163522, 0.173054, 0.175436, 0.179308, 0.188542, 0.199563, 0.205222, 0.204030, 0.200456, 0.200456, 0.204626, 0.212072, 0.221604, 0.234114, 0.254070, 0.280877, 0.309173, 0.335086, 0.356234, 0.372616, 0.386615, 0.400019, 0.410741, 0.419081, 0.426230, 0.434868, 0.446484, 0.458696, 0.469419, 0.473589, 0.472695, 0.470015, 0.466142, 0.459887, 0.448569, 0.436059, 0.424741, 0.416103, 0.406274, 0.393764, 0.378871, 0.361595, 0.344916, 0.328236, 0.312152, 0.298450, 0.287728, 0.281473, 0.277898, 0.278494, 0.280877, 0.283260, 0.285345, 0.285940, 0.285643, 0.286536, 0.287430, 0.288323, 0.289515, 0.292791, 0.299046, 0.307982, 0.317811, 0.327044, 0.335384, 0.341937, 0.345511, 0.346405, 0.344320, 0.340150, 0.335384, 0.331810, 0.328831, 0.328236, 0.329129, 0.332406, 0.335682, 0.339554, 0.344022, 0.347894, 0.349086, 0.348788, 0.348788, 0.349383, 0.351468, 0.353553, 0.357128, 0.361595, 0.368148, 0.373808, 0.377084, 0.377977, 0.377680, 0.377680, 0.377680, 0.374701, 0.371127, 0.366957, 0.362787, 0.356234, 0.346703, 0.334789, 0.321087, 0.306492, 0.291302, 0.277303, 0.263601, 0.250496, 0.239773, 0.231731, 0.225178, 0.220115, 0.215051, 0.210881, 0.207605, 0.206413, 0.205818, 0.204030, 0.201945, 0.203435, 0.207903, 0.214157, 0.221008, 0.228454, 0.237092, 0.246028, 0.253474, 0.258240, 0.259133, 0.258538, 0.257049, 0.254666, 0.250496, 0.246028, 0.240667, 0.235901, 0.230539, 0.224880, 0.218327, 0.211179, 0.204030, 0.197180, 0.189436, 0.181691, 0.173649, 0.166203, 0.159650, 0.155182, 0.150714, 0.146247, 0.142970, 0.140587, 0.138205, 0.137013, 0.135822, 0.136715, 0.139098, 0.143268, 0.149523, 0.154289, 0.156672, 0.157863, 0.159352, 0.161139, 0.161735, 0.161437, 0.161139, 0.160544, 0.159650, 0.159948, 0.161139, 0.161139, 0.160841, 0.160841, 0.160544, 0.158459, 0.155182, 0.152204, 0.148332, 0.145651, 0.144757, 0.145353, 0.146544, 0.149225, 0.151608, 0.153693, 0.155778, 0.159352, 0.162331, 0.163522, 0.163522, 0.162926, 0.162033, 0.161139, 0.159650, 0.156969, 0.154587, 0.151906, 0.148332, 0.143566, 0.137311, 0.130758, 0.123908, 0.117057, 0.110504, 0.103058, 0.095313, 0.086974, 0.079229, 0.070294, 0.061954, 0.053912, 0.047657, 0.041700, 0.036338, 0.032764, 0.030381, 0.029190, 0.029190, 0.029488, 0.029785, 0.030083, 0.030083, 0.030083, 0.028892, 0.027998, 0.026509, 0.026211, 0.026807, 0.026807, 0.026509, 0.025615, 0.025020, 0.023531, 0.020850, 0.017276, 0.012212, 0.007149, 0.001489, -0.004170, -0.010723, -0.016978, -0.023233, -0.028594, -0.033955, -0.038721, -0.043487, -0.048252, -0.053614, -0.058380, -0.062847, -0.067017, -0.070889, -0.074166, -0.077442, -0.081016, -0.084293, -0.087569, -0.091739, -0.095611, -0.099781, -0.103058, -0.106930, -0.110504, -0.114674, -0.119440, -0.124801, -0.130758, -0.137013, -0.143566, -0.150714, -0.157863, -0.165607, -0.173054, -0.180202, -0.186755, -0.193308, -0.198669, -0.203733, -0.209094, -0.215349, -0.221604, -0.226965, -0.231135, -0.234709, -0.238582, -0.242156, -0.245730, -0.247815, -0.249900, -0.251985, -0.254964, -0.256751, -0.257942, -0.259729, -0.262708, -0.266580, -0.269856, -0.273728, -0.279685, -0.286238, -0.290706, -0.295174, -0.299940, -0.306195, -0.313641, -0.320194, -0.325853, -0.330321, -0.335980, -0.342533, -0.347894, -0.352660, -0.358021, -0.363978, -0.368446, -0.373510, -0.380360, -0.386020, -0.388998, -0.392870, -0.397040, -0.400912, -0.403891, -0.407763, -0.413422, -0.420273, -0.428613, -0.436357, -0.442314, -0.448867, -0.460483, -0.471802, -0.478057, -0.481333, -0.487588, -0.498609, -0.510523, -0.518565, -0.522139, -0.524522, -0.530479, -0.540010, -0.547457, -0.546563, -0.542989, -0.546563, -0.558179, -0.568604, -0.570987, -0.570392, -0.573966, -0.582604, -0.590944, -0.593624, -0.593028, -0.594518, -0.602560, -0.614474, -0.624899, -0.630856, -0.638600, -0.652004, -0.670471, -0.687448, -0.699660, -0.710681, -0.723191, -0.739871, -0.756849, -0.774720, -0.794080, -0.813143, -0.824462, -0.819994, -0.806590, -0.791102, -0.770848, -0.736594, -0.684172, -0.621325, -0.559073, -0.504268, -0.459590, -0.418188, -0.372914, -0.324364, -0.279685, -0.242751, -0.208498, -0.162033, -0.102462, -0.044082, -0.006553, 0.010127, 0.017573, 0.025615, 0.029488, 0.023233, 0.007149, -0.009829, -0.016382, -0.011914, -0.006255, -0.007149, -0.011318, -0.015488, -0.021148, -0.031573, -0.047657, -0.063741, -0.070294, -0.067315, -0.058082, -0.048550, -0.037232, -0.022637, -0.009233, -0.001191, 0.006255, 0.016978, 0.029488, 0.038721, 0.047955, 0.061656, 0.080123, 0.099781, 0.113780, 0.120333, 0.123312, 0.126588, 0.127780, 0.123610, 0.114078, 0.105441, 0.104249, 0.110206, 0.117057, 0.123312, 0.131950, 0.146247, 0.162926, 0.175436, 0.182883, 0.190031, 0.199265, 0.210583, 0.221008, 0.231731, 0.247219, 0.269261, 0.295174, 0.322874, 0.348192, 0.371127, 0.389892, 0.403891, 0.414316, 0.420869, 0.425038, 0.428315, 0.431591, 0.435761, 0.439633, 0.442314, 0.442314, 0.437846, 0.430400, 0.422060, 0.413422, 0.403593, 0.393168, 0.383935, 0.377382, 0.372914, 0.368148, 0.362489, 0.356830, 0.349979, 0.341639, 0.332108, 0.323470, 0.315726, 0.310662, 0.308577, 0.310067, 0.314237, 0.319300, 0.323172, 0.325257, 0.326449, 0.326449, 0.322577, 0.316917, 0.310067, 0.304705, 0.300535, 0.296961, 0.294578, 0.295174, 0.298152, 0.301131, 0.302025, 0.299940, 0.296365, 0.293089, 0.290706, 0.288025, 0.285940, 0.287132, 0.292195, 0.300535, 0.308577, 0.316917, 0.324959, 0.333001, 0.340448, 0.346107, 0.349979, 0.353553, 0.358617, 0.364574, 0.369935, 0.375297, 0.380658, 0.383637, 0.383935, 0.380956, 0.375892, 0.370233, 0.363680, 0.355936, 0.348192, 0.341937, 0.336278, 0.330023, 0.321087, 0.310960, 0.299344, 0.287728, 0.274622, 0.260325, 0.247517, 0.239773, 0.235603, 0.232624, 0.227859, 0.225774, 0.227859, 0.232327, 0.234412, 0.234709, 0.236497, 0.241858, 0.246624, 0.246921, 0.244241, 0.241560, 0.240667, 0.241560, 0.242454, 0.243645, 0.244241, 0.243645, 0.240369, 0.235305, 0.229646, 0.224582, 0.218327, 0.212370, 0.208200, 0.206413, 0.201350, 0.194499, 0.190031, 0.187648, 0.185861, 0.182883, 0.180202, 0.177223, 0.176926, 0.178117, 0.179904, 0.180202, 0.180798, 0.181691, 0.181691, 0.179011, 0.174543, 0.170969, 0.167692, 0.165011, 0.162629, 0.160841, 0.159948, 0.159054, 0.156969, 0.154587, 0.153693, 0.151906, 0.148034, 0.142375, 0.137907, 0.134035, 0.130460, 0.127482, 0.126886, 0.128077, 0.130758, 0.134630, 0.137609, 0.139396, 0.142077, 0.144757, 0.147140, 0.148332, 0.151012, 0.153991, 0.156969, 0.158161, 0.160841, 0.163820, 0.165905, 0.167394, 0.168586, 0.168288, 0.167096, 0.165607, 0.162926, 0.159352, 0.154884, 0.151310, 0.147140, 0.141481, 0.134928, 0.128077, 0.121525, 0.114078, 0.106930, 0.100079, 0.095016, 0.091144, 0.087867, 0.084591, 0.081910, 0.078336, 0.074762, 0.070592, 0.066422, 0.062252, 0.058380, 0.055103, 0.051827, 0.049146, 0.047359, 0.046465, 0.045572, 0.044082, 0.042295, 0.039615, 0.036934, 0.033658, 0.029488, 0.024722, 0.020254, 0.015488, 0.011616, 0.008042, 0.003872, 0.000596, -0.002085, -0.004766, -0.007446, -0.010127, -0.013403, -0.016382, -0.019361, -0.021446, -0.023531, -0.025913, -0.027998, -0.030083, -0.031573, -0.033658, -0.036636, -0.039019, -0.041700, -0.044082, -0.047061, -0.050040, -0.053018, -0.056295, -0.061060, -0.065528, -0.071783, -0.078336, -0.085782, -0.092931, -0.100973, -0.108121, -0.113780, -0.117950, -0.123014, -0.128971, -0.134928, -0.139694, -0.143864, -0.148629, -0.154587, -0.160544, -0.165905, -0.170969, -0.175436, -0.181096, -0.185563, -0.188840, -0.191223, -0.193903, -0.197775, -0.202541, -0.207903, -0.212668, -0.216838, -0.220710, -0.224582, -0.228454, -0.233518, -0.237390, -0.240964, -0.244241, -0.250198, -0.255857, -0.260623, -0.264495, -0.268069, -0.272239, -0.276707, -0.279983, -0.282366, -0.285345, -0.289515, -0.293387, -0.296365, -0.301131, -0.305599, -0.308875, -0.310662, -0.313641, -0.318704, -0.323768, -0.327342, -0.328534, -0.330916, -0.336278, -0.343724, -0.350277, -0.354447, -0.358319, -0.366063, -0.375892, -0.385722, -0.395849, -0.401210, -0.396742, -0.392572, -0.404784, -0.430400, -0.446782, -0.446186, -0.439038, -0.441123, -0.454228, -0.469121, -0.475376, -0.472993, -0.473887, -0.483716, -0.494141, -0.495332, -0.489971, -0.489971, -0.501289, -0.515586, -0.520352, -0.513799, -0.507544, -0.512012, -0.521543, -0.525118, -0.524522, -0.530181, -0.541500, -0.548648, -0.549244, -0.551627, -0.560860, -0.570987, -0.576944, -0.582008, -0.590646, -0.592731, -0.595411, -0.617453, -0.641579, -0.641877, -0.646940, -0.680002, -0.709787, -0.711872, -0.708000, -0.722595, -0.750594, -0.763401, -0.753274, -0.736297, -0.722595, -0.709490, -0.689831, -0.655876, -0.609113, -0.551329, -0.489077, -0.436059, -0.402104, -0.371127, -0.320492, -0.268069, -0.244836, -0.237986, -0.209094, -0.161139, -0.119738, -0.086080, -0.055699, -0.038423, -0.033658, -0.030679, -0.027700, -0.034849, -0.050635, -0.061954, -0.061656, -0.053316, -0.043189, -0.036338, -0.030679, -0.022041, -0.016382, -0.019658, -0.025020, -0.019956, -0.008340, -0.000596, 0.007446, 0.022041, 0.036338, 0.045870, 0.053912, 0.061358, 0.068804, 0.077144, 0.083995, 0.086378, 0.088463, 0.093824, 0.101271, 0.105441, 0.103356, 0.097994, 0.095909, 0.097994, 0.098292, 0.092037, 0.083697, 0.080421, 0.085484, 0.093228, 0.100079, 0.106930, 0.119738, 0.140885, 0.165309, 0.185861, 0.202243, 0.217434, 0.232922, 0.247815, 0.260623, 0.272239, 0.285345, 0.301131, 0.321087, 0.343128, 0.361893, 0.376190, 0.386020, 0.392274, 0.396444, 0.397338, 0.394657, 0.391083, 0.388998, 0.388105, 0.388105, 0.387807, 0.387211, 0.384828, 0.380956, 0.377977, 0.376786, 0.374999, 0.373808, 0.374701, 0.376190, 0.378573, 0.380956, 0.382147, 0.381850, 0.380360, 0.376786, 0.373212, 0.369340, 0.364276, 0.359213, 0.354447, 0.351766, 0.349086, 0.345511, 0.341044, 0.335086, 0.329427, 0.323768, 0.315428, 0.305003, 0.293982, 0.285047, 0.277600, 0.271048, 0.265388, 0.262708, 0.263006, 0.265686, 0.269558, 0.273431, 0.276707, 0.280877, 0.284153, 0.286834, 0.289515, 0.293387, 0.298450, 0.305003, 0.312449, 0.319598, 0.326746, 0.333001, 0.338065, 0.340746, 0.342235, 0.342235, 0.342533, 0.341937, 0.342235, 0.341937, 0.341341, 0.339256, 0.337171, 0.333597, 0.328831, 0.324066, 0.319598, 0.316024, 0.311854, 0.307982, 0.305301, 0.302620, 0.299046, 0.295472, 0.292195, 0.289217, 0.285345, 0.280579, 0.274920, 0.270452, 0.267771, 0.266282, 0.264495, 0.261814, 0.259431, 0.258538, 0.258240, 0.254666, 0.247815, 0.239773, 0.232922, 0.227263, 0.222200, 0.217136, 0.211477, 0.206413, 0.203137, 0.200754, 0.198371, 0.195393, 0.191818, 0.188542, 0.186755, 0.186159, 0.185861, 0.185266, 0.184968, 0.186159, 0.187053, 0.186755, 0.184968, 0.182585, 0.180202, 0.178117, 0.175436, 0.173351, 0.170671, 0.169181, 0.168586, 0.168586, 0.165607, 0.161437, 0.156076, 0.151012, 0.146544, 0.142672, 0.138205, 0.133141, 0.128971, 0.125992, 0.123610, 0.121525, 0.119142, 0.117950, 0.117653, 0.119738, 0.123312, 0.126588, 0.126886, 0.125695, 0.126588, 0.128673, 0.129567, 0.128971, 0.130162, 0.133141, 0.136715, 0.138800, 0.139992, 0.139992, 0.139396, 0.138800, 0.137609, 0.136120, 0.135822, 0.136120, 0.134928, 0.132545, 0.131354, 0.131056, 0.129269, 0.125695, 0.123312, 0.122418, 0.122120, 0.121227, 0.119738, 0.117653, 0.114972, 0.112887, 0.109908, 0.105738, 0.101568, 0.098590, 0.096207, 0.092931, 0.088463, 0.083995, 0.081016, 0.078038, 0.073570, 0.069102, 0.064634, 0.061954, 0.059273, 0.054210, 0.047657, 0.042593, 0.038721, 0.035743, 0.031870, 0.027403, 0.023233, 0.021446, 0.019956, 0.018765, 0.016680, 0.014595, 0.013106, 0.011318, 0.008340, 0.005064, 0.002085, 0.000000, -0.002085, -0.005064, -0.008042, -0.010127, -0.012212, -0.013999, -0.016680, -0.019063, -0.022041, -0.024126, -0.027105, -0.030083, -0.033062, -0.036338, -0.039019, -0.042891, -0.047657, -0.052720, -0.056592, -0.060762, -0.063443, -0.067017, -0.071187, -0.075655, -0.079825, -0.083399, -0.086676, -0.090250, -0.094122, -0.098590, -0.103058, -0.107526, -0.112291, -0.116163, -0.119440, -0.123014, -0.127482, -0.131652, -0.135524, -0.138502, -0.141779, -0.145651, -0.150119, -0.155182, -0.160544, -0.166203, -0.171564, -0.176926, -0.181989, -0.186159, -0.190627, -0.195690, -0.201052, -0.206115, -0.211477, -0.216838, -0.222497, -0.226667, -0.229348, -0.231433, -0.234114, -0.238879, -0.242454, -0.244836, -0.246028, -0.247517, -0.250496, -0.253772, -0.256453, -0.258538, -0.260921, -0.263303, -0.265984, -0.267473, -0.269856, -0.272239, -0.275515, -0.278196, -0.280877, -0.284153, -0.287132, -0.290706, -0.294578, -0.298748, -0.302918, -0.307386, -0.311258, -0.314832, -0.318109, -0.323172, -0.330023, -0.336576, -0.340746, -0.344618, -0.350277, -0.357426, -0.362787, -0.365468, -0.367255, -0.372020, -0.377382, -0.382445, -0.386020, -0.389296, -0.393466, -0.398232, -0.402402, -0.405082, -0.407465, -0.411635, -0.415805, -0.419677, -0.423549, -0.428613, -0.434272, -0.439038, -0.441718, -0.445888, -0.451548, -0.456015, -0.456909, -0.454526, -0.455420, -0.461377, -0.468525, -0.470015, -0.468227, -0.468227, -0.473589, -0.479546, -0.481631, -0.480439, -0.481333, -0.485503, -0.490864, -0.493843, -0.496226, -0.502481, -0.511118, -0.517076, -0.519756, -0.526309, -0.538521, -0.551925, -0.561158, -0.567115, -0.574561, -0.586476, -0.600773, -0.613580, -0.624005, -0.630260, -0.633537, -0.633239, -0.626686, -0.615368, -0.598092, -0.572477, -0.536138, -0.493545, -0.451250, -0.416103, -0.386913, -0.356532, -0.322874, -0.291004, -0.269261, -0.257644, -0.244539, -0.219817, -0.187351, -0.155480, -0.130758, -0.115270, -0.103951, -0.092931, -0.084591, -0.083101, -0.088463, -0.095611, -0.097994, -0.090250, -0.073868, -0.054210, -0.039317, -0.030679, -0.022637, -0.011616, -0.000596, 0.005659, 0.009829, 0.016382, 0.029785, 0.047657, 0.063443, 0.074166, 0.081910, 0.090548, 0.099781, 0.105441, 0.105441, 0.103951, 0.107228, 0.115270, 0.124503, 0.129567, 0.129269, 0.126886, 0.125099, 0.123312, 0.119738, 0.114078, 0.108717, 0.106632, 0.109908, 0.116461, 0.125992, 0.135226, 0.144162, 0.153693, 0.164714, 0.176330, 0.187946, 0.199563, 0.210583, 0.222200, 0.234412, 0.245134, 0.253176, 0.259729, 0.266580, 0.275515, 0.285643, 0.294578, 0.303216, 0.310960, 0.319300, 0.325555, 0.328236, 0.326449, 0.322874, 0.320789, 0.321087, 0.321981, 0.322874, 0.323768, 0.326746, 0.331512, 0.337171, 0.340746, 0.341937, 0.343724, 0.346405, 0.350277, 0.353851, 0.355341, 0.356532, 0.357426, 0.358319, 0.357128, 0.352958, 0.348490, 0.343724, 0.339256, 0.335384, 0.332108, 0.329129, 0.325853, 0.323172, 0.319598, 0.314832, 0.308875, 0.302025, 0.295174, 0.288323, 0.282366, 0.277898, 0.273431, 0.270154, 0.268367, 0.267176, 0.265984, 0.265091, 0.264793, 0.265388, 0.266878, 0.268069, 0.268665, 0.269261, 0.270154, 0.271048, 0.271346, 0.269856, 0.268665, 0.268665, 0.268665, 0.268963, 0.269558, 0.269261, 0.269261, 0.269261, 0.268069, 0.266580, 0.263899, 0.260623, 0.257346, 0.254666, 0.252283, 0.251389, 0.250198, 0.249006, 0.247815, 0.246326, 0.245730, 0.244539, 0.242751, 0.240964, 0.238582, 0.236497, 0.234709, 0.232029, 0.229646, 0.226369, 0.223689, 0.219817, 0.216242, 0.212668, 0.209690, 0.206711, 0.204328, 0.202243, 0.200754, 0.198967, 0.197180, 0.194499, 0.191520, 0.187648, 0.183776, 0.178713, 0.173054, 0.167096, 0.161437, 0.156969, 0.153097, 0.150119, 0.147438, 0.144757, 0.141481, 0.138800, 0.136120, 0.132545, 0.128077, 0.123312, 0.118248, 0.113185, 0.108419, 0.103356, 0.098590, 0.095313, 0.092335, 0.090846, 0.089356, 0.087867, 0.086378, 0.083995, 0.081612, 0.078038, 0.074166, 0.070294, 0.066124, 0.062549, 0.059273, 0.055401, 0.051827, 0.049742, 0.048848, 0.048252, 0.047955, 0.047657, 0.048550, 0.048550, 0.047955, 0.047359, 0.046167, 0.045274, 0.043785, 0.043487, 0.042891, 0.043189, 0.042891, 0.041402, 0.039913, 0.039019, 0.038423, 0.037828, 0.036636, 0.035743, 0.034253, 0.032764, 0.030977, 0.028892, 0.025913, 0.022935, 0.019063, 0.015786, 0.012808, 0.010723, 0.009829, 0.009531, 0.009531, 0.009829, 0.010425, 0.010723, 0.011021, 0.011318, 0.011616, 0.011616, 0.011318, 0.010425, 0.010127, 0.010127, 0.010723, 0.010425, 0.010425, 0.010425, 0.010127, 0.008936, 0.007149, 0.005957, 0.005957, 0.005361, 0.003872, 0.001489, -0.000298, -0.001787, -0.002085, -0.002979, -0.004170, -0.005064, -0.009829, -0.016978, -0.011021, 0.006851, 0.006851, -0.014893, -0.026509, -0.019063, -0.011021, -0.007744, -0.011616, -0.024126, -0.032168, -0.024126, -0.012808, -0.018169, -0.028594, -0.026509, -0.020850, -0.022637, -0.028594, -0.034849, -0.036934, -0.031573, -0.025913, -0.031870, -0.043487, -0.044678, -0.036636, -0.032168, -0.036040, -0.041104, -0.042295, -0.041700, -0.040210, -0.041104, -0.045274, -0.047955, -0.048252, -0.050337, -0.054805, -0.056890, -0.054805, -0.052720, -0.054805, -0.058677, -0.060464, -0.058082, -0.054805, -0.054805, -0.059869, -0.064634, -0.065230, -0.064634, -0.067017, -0.070889, -0.073868, -0.074166, -0.073570, -0.075059, -0.077144, -0.077740, -0.075953, -0.075655, -0.076549, -0.080123, -0.082208, -0.082804, -0.083697, -0.085782, -0.088761, -0.090250, -0.091441, -0.092037, -0.092633, -0.092931, -0.092931, -0.092633, -0.092931, -0.094122, -0.095313, -0.095313, -0.094420, -0.095313, -0.097101, -0.098888, -0.098888, -0.097696, -0.097101, -0.097101, -0.097398, -0.097994, -0.097994, -0.097994, -0.098292, -0.098590, -0.099186, -0.100079, -0.101271, -0.102462, -0.103058, -0.103356, -0.103951, -0.105143, -0.106334, -0.107526, -0.108419, -0.109313, -0.109610, -0.110504, -0.111398, -0.112291, -0.113780, -0.115865, -0.117653, -0.119142, -0.120333, -0.121823, -0.123908, -0.125099, -0.126588, -0.127482, -0.128077, -0.128971, -0.130460, -0.131056, -0.132247, -0.133439, -0.134332, -0.135226, -0.137013, -0.138502, -0.141779, -0.144162, -0.145353, -0.146247, -0.147736, -0.150417, -0.152204, -0.152204, -0.151906, -0.152502, -0.154587, -0.156374, -0.157565, -0.158756, -0.160841, -0.165011, -0.168884, -0.171564, -0.173649, -0.176926, -0.181096, -0.184372, -0.184074, -0.183181, -0.184074, -0.187351, -0.189733, -0.189733, -0.189436, -0.191520, -0.195690, -0.200158, -0.202541, -0.204924, -0.208200, -0.212966, -0.217434, -0.220115, -0.221902, -0.223689, -0.227263, -0.230837, -0.233518, -0.234709, -0.237986, -0.242751, -0.247517, -0.250496, -0.252581, -0.253474, -0.251687, -0.246921, -0.237986, -0.227561, -0.216838, -0.205222, -0.190329, -0.176330, -0.167096, -0.165607, -0.169479, -0.173649, -0.176032, -0.178117, -0.183181, -0.187648, -0.187053, -0.176330, -0.161139, -0.148034, -0.140587, -0.135822, -0.128971, -0.121525, -0.117355, -0.118546, -0.122716, -0.122418, -0.115865, -0.106930, -0.100377, -0.094718, -0.087271, -0.075357, -0.062847, -0.053614, -0.047657, -0.041402, -0.032466, -0.023233, -0.016978, -0.014893, -0.013701, -0.009531, -0.003276, 0.001787, 0.005659, 0.009233, 0.015786, 0.023828, 0.030977, 0.035147, 0.037828, 0.040210, 0.044082, 0.048252, 0.051827, 0.055401, 0.059273, 0.063741, 0.068209, 0.072677, 0.076846, 0.082208, 0.088165, 0.095611, 0.104547, 0.115270, 0.125695, 0.134035, 0.139694, 0.143268, 0.145651, 0.146544, 0.145949, 0.143864, 0.143864, 0.147140, 0.153097, 0.159650, 0.165905, 0.171862, 0.177223, 0.182287, 0.184670, 0.183776, 0.181989, 0.181096, 0.181989, 0.183181, 0.183478, 0.183776, 0.185861, 0.189733, 0.194499, 0.197478, 0.199860, 0.203137, 0.207307, 0.211477, 0.214753, 0.215647, 0.215647, 0.214157, 0.212966, 0.211179, 0.209392, 0.207605, 0.206413, 0.207307, 0.209094, 0.211477, 0.213562, 0.215349, 0.217136, 0.218327, 0.219221, 0.218327, 0.216540, 0.214157, 0.212072, 0.209987, 0.207307, 0.204328, 0.202541, 0.202839, 0.203733, 0.204626, 0.205818, 0.207605, 0.210285, 0.213264, 0.213264, 0.211179, 0.207605, 0.204328, 0.200754, 0.196286, 0.190925, 0.187053, 0.184968, 0.183776, 0.182883, 0.182287, 0.181989, 0.182585, 0.182585, 0.181096, 0.178117, 0.175734, 0.173351, 0.170671, 0.166501, 0.162033, 0.159054, 0.157863, 0.157565, 0.157267, 0.156374, 0.156969, 0.157267, 0.157863, 0.156374, 0.154587, 0.152502, 0.151310, 0.150417, 0.148927, 0.147736, 0.145651, 0.143566, 0.140885, 0.137907, 0.134928, 0.132843, 0.131354, 0.129865, 0.128077, 0.126588, 0.124503, 0.122120, 0.119142, 0.115270, 0.111993, 0.107823, 0.104547, 0.101271, 0.098590, 0.096505, 0.095016, 0.094122, 0.092335, 0.091144, 0.089059, 0.086676, 0.084293, 0.080421, 0.076549, 0.072974, 0.069996, 0.067017, 0.064634, 0.061656, 0.059273, 0.056890, 0.055103, 0.053912, 0.052422, 0.050933, 0.049444, 0.047955, 0.045572, 0.043487, 0.040508, 0.037232, 0.034253, 0.031573, 0.029785, 0.028594, 0.027700, 0.026509, 0.025318, 0.024722, 0.023531, 0.022339, 0.021148, 0.020254, 0.019361, 0.018169, 0.016680, 0.014893, 0.013106, 0.011616, 0.010723, 0.009531, 0.009233, 0.008936, 0.008936, 0.008042, 0.007446, 0.006553, 0.006255, 0.006255, 0.005957, 0.005361, 0.004170, 0.002383, 0.000894, -0.000596, -0.002383, -0.004468, -0.005064, -0.005064, -0.004468, -0.004170, -0.004170, -0.004170, -0.004766, -0.005361, -0.006553, -0.007149, -0.008042, -0.008340, -0.008936, -0.008638, -0.008638, -0.008936, -0.008638, -0.008638, -0.008638, -0.008638, -0.008638, -0.008936, -0.008936, -0.009531, -0.009829, -0.010723, -0.011318, -0.011914, -0.012510, -0.013403, -0.014595, -0.015191, -0.016084, -0.017276, -0.017871, -0.017871, -0.017871, -0.018765, -0.019361, -0.020552, -0.021743, -0.022935, -0.023828, -0.024722, -0.025615, -0.026211, -0.026807, -0.027105, -0.027998, -0.028296, -0.029190, -0.030083, -0.030679, -0.031870, -0.032466, -0.033658, -0.034849, -0.036040, -0.037530, -0.038721, -0.040210, -0.041104, -0.041997, -0.043189, -0.044380, -0.045274, -0.046465, -0.047061, -0.048252, -0.048848, -0.049742, -0.051231, -0.052422, -0.053912, -0.055401, -0.056295, -0.057784, -0.058677, -0.059571, -0.060464, -0.061358, -0.062252, -0.063443, -0.064932, -0.065826, -0.067315, -0.068209, -0.069400, -0.070592, -0.071485, -0.072677, -0.073868, -0.074762, -0.075655, -0.076846, -0.078038, -0.079527, -0.080421, -0.081612, -0.082506, -0.083399, -0.084591, -0.086080, -0.087271, -0.088463, -0.089356, -0.090548, -0.091441, -0.092633, -0.094122, -0.095016, -0.095909, -0.096505, -0.097696, -0.098888, -0.100377, -0.101568, -0.102760, -0.103951, -0.105441, -0.106334, -0.107823, -0.107823, -0.109015, -0.109908, -0.111100, -0.111695, -0.112291, -0.112887, -0.114376, -0.115568, -0.116759, -0.117355, -0.118546, -0.119738, -0.120929, -0.121823, -0.122716, -0.123610, -0.124801, -0.126886, -0.128971, -0.130758, -0.132247, -0.133439, -0.135524, -0.136715, -0.138205, -0.138800, -0.139396, -0.140885, -0.142077, -0.143268, -0.143864, -0.145651, -0.147140, -0.148332, -0.150417, -0.152502, -0.154289, -0.156374, -0.157565, -0.159054, -0.160246, -0.161735, -0.162926, -0.164416, -0.165607, -0.167096, -0.168884, -0.171266, -0.173351, -0.174543, -0.175734, -0.177223, -0.179011, -0.180500, -0.181691, -0.182883, -0.184670, -0.187053, -0.189138, -0.191223, -0.193605, -0.196286, -0.198967, -0.201350, -0.202541, -0.204328, -0.206711, -0.208796, -0.211477, -0.214455, -0.217732, -0.221306, -0.224880, -0.229050, -0.232624, -0.235901, -0.239475, -0.243943, -0.248709, -0.253176, -0.257644, -0.261814, -0.265686, -0.267473, -0.266878, -0.262410, -0.256155, -0.249602, -0.241560, -0.231135, -0.217732, -0.207009, -0.202541, -0.204328, -0.206711, -0.207605, -0.209094, -0.214455, -0.221604, -0.224284, -0.217434, -0.205222, -0.193903, -0.187053, -0.181393, -0.172160, -0.159650, -0.151012, -0.149523, -0.150119, -0.145651, -0.135822, -0.125099, -0.120631, -0.118844, -0.114376, -0.104845, -0.095611, -0.090846, -0.089059, -0.083697, -0.073272, -0.060762, -0.051529, -0.045572, -0.040508, -0.033360, -0.025615, -0.020552, -0.017573, -0.015488, -0.011616, -0.005957, -0.000298, 0.004766, 0.009531, 0.015191, 0.021148, 0.028892, 0.037232, 0.045572, 0.053614, 0.060167, 0.066719, 0.073570, 0.080719, 0.085484, 0.089059, 0.092931, 0.099483, 0.107526, 0.115865, 0.122716, 0.128673, 0.135524, 0.142077, 0.146247, 0.147438, 0.147140, 0.148332, 0.151310, 0.155778, 0.159948, 0.163820, 0.167990, 0.173649, 0.178713, 0.181691, 0.182287, 0.182883, 0.184968, 0.188542, 0.193010, 0.196584, 0.200158, 0.204328, 0.208796, 0.212966, 0.215051, 0.215647, 0.216242, 0.217434, 0.219817, 0.221902, 0.222795, 0.222200, 0.221902, 0.221902, 0.221604, 0.220115, 0.218030, 0.217136, 0.217136, 0.217732, 0.217732, 0.217136, 0.216242, 0.216838, 0.217732, 0.217434, 0.216838, 0.215945, 0.216242, 0.216540, 0.216540, 0.215349, 0.213264, 0.212072, 0.212072, 0.212668, 0.212668, 0.211775, 0.211775, 0.212072, 0.212668, 0.212072, 0.210285, 0.207605, 0.204924, 0.202243, 0.198967, 0.195690, 0.192414, 0.190031, 0.188244, 0.186457, 0.184372, 0.182585, 0.180500, 0.178713, 0.176926, 0.174841, 0.173054, 0.170969, 0.169479, 0.167692, 0.165905, 0.164118, 0.162331, 0.161437, 0.160246, 0.158459, 0.156969, 0.155778, 0.153991, 0.152204, 0.149821, 0.147140, 0.144757, 0.142077, 0.139694, 0.137013, 0.134928, 0.133141, 0.130758, 0.128673, 0.126588, 0.125099, 0.123610, 0.121823, 0.120035, 0.119142, 0.118248, 0.116163, 0.113780, 0.110802, 0.107228, 0.104249, 0.101866, 0.098888, 0.096505, 0.094420, 0.092633, 0.090548, 0.088463, 0.085782, 0.083697, 0.081612, 0.079527, 0.076251, 0.072974, 0.069698, 0.067017, 0.064337, 0.061954, 0.059571, 0.058380, 0.057188, 0.056592, 0.055401, 0.053614, 0.051827, 0.050337, 0.048252, 0.046167, 0.044380, 0.042295, 0.040210, 0.038423, 0.036934, 0.035445, 0.033955, 0.033360, 0.033360, 0.033062, 0.031870, 0.031870, 0.030977, 0.030381, 0.029488, 0.028594, 0.027998, 0.026807, 0.025913, 0.025020, 0.024424, 0.023828, 0.023531, 0.023828, 0.023531, 0.024126, 0.024126, 0.024126, 0.023531, 0.022637, 0.022339, 0.021446, 0.020850, 0.019956, 0.019361, 0.018765, 0.018169, 0.017276, 0.016978, 0.016382, 0.016382, 0.016680, 0.017276, 0.017871, 0.018169, 0.018467, 0.018467, 0.018169, 0.017573, 0.017573, 0.017573, 0.017573, 0.018169, 0.018169, 0.018765, 0.019063, 0.019361, 0.019361, 0.019956, 0.019658, 0.019361, 0.018765, 0.018169, 0.017573, 0.017276, 0.016680, 0.016382, 0.016084, 0.016084, 0.015786, 0.015786, 0.015488, 0.015191, 0.014595, 0.014893, 0.014595, 0.013999, 0.013701, 0.013106, 0.012510, 0.011318, 0.010425, 0.009531, 0.008936, 0.008340, 0.007446, 0.006851, 0.006255, 0.005361, 0.004468, 0.003574, 0.002085, 0.001191, 0.000000, -0.000596, -0.002383, -0.003276, -0.004766, -0.005659, -0.006553, -0.007149, -0.007446, -0.008638, -0.009531, -0.010127, -0.011318, -0.012212, -0.013999, -0.015191, -0.016382, -0.017573, -0.019063, -0.020552, -0.022041, -0.023233, -0.024722, -0.025615, -0.026807, -0.027700, -0.028892, -0.030381, -0.032168, -0.033360, -0.035147, -0.036934, -0.038721, -0.039913, -0.041700, -0.042891, -0.044082, -0.045274, -0.046465, -0.047657, -0.048848, -0.049742, -0.051231, -0.052422, -0.053912, -0.055401, -0.056890, -0.058082, -0.059869, -0.061060, -0.062549, -0.063741, -0.064932, -0.066422, -0.067911, -0.069102, -0.070294, -0.071783, -0.072677, -0.073570, -0.075059, -0.076549, -0.077442, -0.078931, -0.080123, -0.081016, -0.082208, -0.082804, -0.083697, -0.083995, -0.084889, -0.085484, -0.086378, -0.086676, -0.087569, -0.088761, -0.090548, -0.092037, -0.093526, -0.094718, -0.096505, -0.098292, -0.099781, -0.100377, -0.101271, -0.102164, -0.103653, -0.104249, -0.105738, -0.106930, -0.108121, -0.109610, -0.111695, -0.113185, -0.114674, -0.115270, -0.116461, -0.118248, -0.119440, -0.120035, -0.120929, -0.121823, -0.123014, -0.123908, -0.124801, -0.125992, -0.127184, -0.128375, -0.129865, -0.131950, -0.133141, -0.134630, -0.135822, -0.137311, -0.138205, -0.138800, -0.139396, -0.139992, -0.140885, -0.142672, -0.144459, -0.145949, -0.148034, -0.149523, -0.151310, -0.152799, -0.154587, -0.155778, -0.157267, -0.158459, -0.159948, -0.161139, -0.162331, -0.163522, -0.165011, -0.166799, -0.169181, -0.171266, -0.172756, -0.175139, -0.176926, -0.179011, -0.180798, -0.181691, -0.183478, -0.184968, -0.187351, -0.189436, -0.191520, -0.193903, -0.196584, -0.199563, -0.202839, -0.205520, -0.207903, -0.210881, -0.214753, -0.218625, -0.222497, -0.225178, -0.228454, -0.231731, -0.236497, -0.240667, -0.243347, -0.244539, -0.243645, -0.240667, -0.234709, -0.226965, -0.217434, -0.207009, -0.196584, -0.188542, -0.184968, -0.186159, -0.188840, -0.190925, -0.192414, -0.195690, -0.198967, -0.199265, -0.193010, -0.182287, -0.171862, -0.163820, -0.157267, -0.149225, -0.139694, -0.132843, -0.129567, -0.128673, -0.125397, -0.117057, -0.108419, -0.101866, -0.099781, -0.096505, -0.089952, -0.081910, -0.076549, -0.072974, -0.067613, -0.058380, -0.047359, -0.038423, -0.033062, -0.027998, -0.021743, -0.014893, -0.009233, -0.005659, -0.002979, 0.000298, 0.006255, 0.011914, 0.016084, 0.019956, 0.025318, 0.032168, 0.041104, 0.050040, 0.057784, 0.065826, 0.072974, 0.079825, 0.085782, 0.089952, 0.093228, 0.095909, 0.100675, 0.106036, 0.112589, 0.118546, 0.124205, 0.130162, 0.136715, 0.141779, 0.145353, 0.146544, 0.147736, 0.149821, 0.153693, 0.157565, 0.161139, 0.164714, 0.169777, 0.175436, 0.179606, 0.181691, 0.182287, 0.184074, 0.187053, 0.191223, 0.195393, 0.198967, 0.202839, 0.207307, 0.211179, 0.213860, 0.213860, 0.213562, 0.213264, 0.213860, 0.213562, 0.213860, 0.214157, 0.214455, 0.215051, 0.215945, 0.215647, 0.215051, 0.214455, 0.213860, 0.213860, 0.213562, 0.213562, 0.212966, 0.212966, 0.213562, 0.214753, 0.215945, 0.216540, 0.216838, 0.217434, 0.218030, 0.218923, 0.218030, 0.216838, 0.215647, 0.215051, 0.214753, 0.214157, 0.212370, 0.211179, 0.209987, 0.209392, 0.207903, 0.205222, 0.202243, 0.199860, 0.198371, 0.195988, 0.193605, 0.190925, 0.189436, 0.188542, 0.186755, 0.183776, 0.181393, 0.179904, 0.178117, 0.176628, 0.174841, 0.173649, 0.172756, 0.171862, 0.170969, 0.168884, 0.166501, 0.164416, 0.162629, 0.160246, 0.157863, 0.155182, 0.153097, 0.151608, 0.148927, 0.145949, 0.142970, 0.140290, 0.138502, 0.136120, 0.133737, 0.131652, 0.130758, 0.129567, 0.127780, 0.125695, 0.123312, 0.120929, 0.119142, 0.117355, 0.114674, 0.112291, 0.109610, 0.107823, 0.106036, 0.104249, 0.102164, 0.099186, 0.097101, 0.094718, 0.092037, 0.089059, 0.086378, 0.083697, 0.082208, 0.080421, 0.078634, 0.075059, 0.072379, 0.069102, 0.066422, 0.063443, 0.061358, 0.059869, 0.058677, 0.058380, 0.057188, 0.055103, 0.052720, 0.050040, 0.047359, 0.045274, 0.043487, 0.041402, 0.040806, 0.039615, 0.038125, 0.036934, 0.035147, 0.033062, 0.031573, 0.030381, 0.028594, 0.027403, 0.026211, 0.025615, 0.025020, 0.024722, 0.023828, 0.023531, 0.022637, 0.021743, 0.020552, 0.019063, 0.018467, 0.018169, 0.018169, 0.018169, 0.018169, 0.017573, 0.016680, 0.015191, 0.014297, 0.013403, 0.012510, 0.011616, 0.011021, 0.010425, 0.009531, 0.009233, 0.008638, 0.008042, 0.007446, 0.007446, 0.007446, 0.007744, 0.007744, 0.007744, 0.008042, 0.008340, 0.008638, 0.008638, 0.008638, 0.009531, 0.009233, 0.009531, 0.009233, 0.009233, 0.008936, 0.009233, 0.008936, 0.009233, 0.008936, 0.008936, 0.007744, 0.007744, 0.006851, 0.005957, 0.005361, 0.005064, 0.005064, 0.005064, 0.005361, 0.005064, 0.004468, 0.004170, 0.003872, 0.003276, 0.002681, 0.002383, 0.001787, 0.001191, 0.000894, 0.000298, 0.000000, -0.000596, -0.001489, -0.002383, -0.003276, -0.004468, -0.005659, -0.006255, -0.007149, -0.007744, -0.008340, -0.009233, -0.010425, -0.011616, -0.012510, -0.014297, -0.015488, -0.016680, -0.017276, -0.018169, -0.018467, -0.019063, -0.019956, -0.020850, -0.022041, -0.023531, -0.025020, -0.026211, -0.027998, -0.029190, -0.030679, -0.031573, -0.032764, -0.033955, -0.035147, -0.036338, -0.037530, -0.039317, -0.040508, -0.041997, -0.043189, -0.044380, -0.045274, -0.046465, -0.047359, -0.048252, -0.049146, -0.050040, -0.051827, -0.052720, -0.053912, -0.055103, -0.055997, -0.056890, -0.057188, -0.058082, -0.059273, -0.060464, -0.061656, -0.063741, -0.065230, -0.066719, -0.068209, -0.069400, -0.070294, -0.071485, -0.072677, -0.073570, -0.074464, -0.075655, -0.076549, -0.077740, -0.078634, -0.079825, -0.080421, -0.081314, -0.081612, -0.082208, -0.082804, -0.083399, -0.084293, -0.085186, -0.085782, -0.086378, -0.086676, -0.087569, -0.088165, -0.088761, -0.089654, -0.090846, -0.092633, -0.094122, -0.095313, -0.096207, -0.096803, -0.097994, -0.098888, -0.100079, -0.100377, -0.100973, -0.101866, -0.103058, -0.103951, -0.105143, -0.105441, -0.106632, -0.107526, -0.108717, -0.109908, -0.109908, -0.110504, -0.111100, -0.111993, -0.113185, -0.114078, -0.114972, -0.116163, -0.117950, -0.119142, -0.120631, -0.120929, -0.122120, -0.123312, -0.124801, -0.126290, -0.126886, -0.127780, -0.128673, -0.130162, -0.130758, -0.131354, -0.131652, -0.132247, -0.133439, -0.134332, -0.135822, -0.136417, -0.137013, -0.138502, -0.140290, -0.141779, -0.143268, -0.143864, -0.145055, -0.146544, -0.147438, -0.148629, -0.149523, -0.150714, -0.151906, -0.153097, -0.154587, -0.155778, -0.156969, -0.157863, -0.159054, -0.159948, -0.161735, -0.163522, -0.165309, -0.166501, -0.168884, -0.170969, -0.173054, -0.174841, -0.176628, -0.179011, -0.181989, -0.184372, -0.187351, -0.189733, -0.192712, -0.195393, -0.198967, -0.202243, -0.204030, -0.205818, -0.208796, -0.212668, -0.217136, -0.220710, -0.224284, -0.227859, -0.230242, -0.231731, -0.232029, -0.231433, -0.228752, -0.223093, -0.214753, -0.204328, -0.195393, -0.200158, -0.219519, -0.233518, -0.233220, -0.229050, -0.231433, -0.237688, -0.237390, -0.222200, -0.196882, -0.172756, -0.157863, -0.154289, -0.156374, -0.159948, -0.162926, -0.165607, -0.169777, -0.179904, -0.187648, -0.182883, -0.165309, -0.141481, -0.119738, -0.100079, -0.078931, -0.057188, -0.039615, -0.029488, -0.025020, -0.022637, -0.021446, -0.023531, -0.027998, -0.029190, -0.021743, -0.007149, 0.008638, 0.020850, 0.031573, 0.045274, 0.059273, 0.066124, 0.062252, 0.053018, 0.046465, 0.046763, 0.050933, 0.055401, 0.059273, 0.066124, 0.077144, 0.090548, 0.103951, 0.115865, 0.125099, 0.130162, 0.133141, 0.133439, 0.133737, 0.136715, 0.142375, 0.147438, 0.152204, 0.155778, 0.161139, 0.166799, 0.170969, 0.172458, 0.171266, 0.168884, 0.166203, 0.165011, 0.166203, 0.169777, 0.174841, 0.181393, 0.187946, 0.195095, 0.202243, 0.208498, 0.212966, 0.214753, 0.215051, 0.216540, 0.218923, 0.222200, 0.224880, 0.226369, 0.228752, 0.232624, 0.237092, 0.239475, 0.240071, 0.238582, 0.236497, 0.233220, 0.229050, 0.223987, 0.219817, 0.217434, 0.216540, 0.215647, 0.215647, 0.218030, 0.223093, 0.228752, 0.233220, 0.235305, 0.236199, 0.236794, 0.235901, 0.232922, 0.229050, 0.226072, 0.224284, 0.223093, 0.222200, 0.220412, 0.218030, 0.216540, 0.213562, 0.209987, 0.205520, 0.201945, 0.198371, 0.195095, 0.191818, 0.188840, 0.187351, 0.186457, 0.186159, 0.184968, 0.183776, 0.183776, 0.184372, 0.184670, 0.184968, 0.185563, 0.186159, 0.185266, 0.183181, 0.179904, 0.177223, 0.173947, 0.171266, 0.168586, 0.166203, 0.163820, 0.162033, 0.161139, 0.159054, 0.155778, 0.153097, 0.151012, 0.149225, 0.145949, 0.144162, 0.144162, 0.145353, 0.145353, 0.145055, 0.145055, 0.146247, 0.147140, 0.146544, 0.145055, 0.144459, 0.144459, 0.144162, 0.141779, 0.137609, 0.133439, 0.130162, 0.125397, 0.120333, 0.114972, 0.110206, 0.106632, 0.103356, 0.100675, 0.098292, 0.097696, 0.097994, 0.098590, 0.096803, 0.095313, 0.094420, 0.092931, 0.091144, 0.089059, 0.087271, 0.085484, 0.083101, 0.079825, 0.076251, 0.072379, 0.068507, 0.064337, 0.060464, 0.057486, 0.054805, 0.052422, 0.048848, 0.045870, 0.044082, 0.042593, 0.040806, 0.039317, 0.039019, 0.040210, 0.040806, 0.041997, 0.042593, 0.042593, 0.041997, 0.041402, 0.040508, 0.039615, 0.038721, 0.038125, 0.036934, 0.034551, 0.032466, 0.030679, 0.028296, 0.026509, 0.025318, 0.024126, 0.022637, 0.021743, 0.021148, 0.020850, 0.021148, 0.022339, 0.024126, 0.025615, 0.027105, 0.028594, 0.030083, 0.030679, 0.030977, 0.031573, 0.032764, 0.033360, 0.033658, 0.032764, 0.031573, 0.030381, 0.029190, 0.027700, 0.026509, 0.025913, 0.025615, 0.025020, 0.024126, 0.023828, 0.023828, 0.024722, 0.025615, 0.026509, 0.027998, 0.029785, 0.031870, 0.033062, 0.034551, 0.034849, 0.035147, 0.035147, 0.034253, 0.033955, 0.033062, 0.031870, 0.030381, 0.028594, 0.026211, 0.025020, 0.023233, 0.021148, 0.019361, 0.017276, 0.015488, 0.014595, 0.013999, 0.012510, 0.012212, 0.012212, 0.011914, 0.011914, 0.010425, 0.010127, 0.009233, 0.008042, 0.006255, 0.004468, 0.002681, 0.000894, -0.000894, -0.004468, -0.008042, -0.011616, -0.014893, -0.018467, -0.022339, -0.025615, -0.028892, -0.031573, -0.033955, -0.036338, -0.038125, -0.039317, -0.040806, -0.041700, -0.043189, -0.044082, -0.045274, -0.046763, -0.047657, -0.049742, -0.051827, -0.054210, -0.055997, -0.058677, -0.061358, -0.064039, -0.066719, -0.069400, -0.072081, -0.075059, -0.077740, -0.080421, -0.083101, -0.085186, -0.086974, -0.088463, -0.089654, -0.090548, -0.091144, -0.091739, -0.091739, -0.092335, -0.092931, -0.093228, -0.094122, -0.095313, -0.095909, -0.097398, -0.098888, -0.100675, -0.102760, -0.105143, -0.107823, -0.110206, -0.113185, -0.115865, -0.118546, -0.120631, -0.123014, -0.124801, -0.126290, -0.127184, -0.128673, -0.129567, -0.130758, -0.131652, -0.132545, -0.133439, -0.134630, -0.135226, -0.136120, -0.137013, -0.138205, -0.140290, -0.142672, -0.144459, -0.146247, -0.148927, -0.152204, -0.155778, -0.157863, -0.159650, -0.162629, -0.166501, -0.169181, -0.169479, -0.169479, -0.170969, -0.172458, -0.172458, -0.172160, -0.172160, -0.173351, -0.175139, -0.176330, -0.176032, -0.175734, -0.176628, -0.178713, -0.179011, -0.178713, -0.179606, -0.182883, -0.186755, -0.189436, -0.190627, -0.192712, -0.196584, -0.200754, -0.202243, -0.202243, -0.204030, -0.206711, -0.209392, -0.209690, -0.210285, -0.212072, -0.215051, -0.216242, -0.216242, -0.215945, -0.217434, -0.220412, -0.221306, -0.221306, -0.222200, -0.226369, -0.230539, -0.232922, -0.233518, -0.235305, -0.239177, -0.242751, -0.244836, -0.245432, -0.246624, -0.249006, -0.251985, -0.253176, -0.252581, -0.252283, -0.254070, -0.256453, -0.257644, -0.256751, -0.256751, -0.260027, -0.263601, -0.265388, -0.265984, -0.267473, -0.269856, -0.272835, -0.275813, -0.277898, -0.279983, -0.283260, -0.288025, -0.291302, -0.291898, -0.292493, -0.297259, -0.302918, -0.304407, -0.304110, -0.306790, -0.314237, -0.319598, -0.320789, -0.321087, -0.324661, -0.329725, -0.331512, -0.332704, -0.335980, -0.341044, -0.347894, -0.355043, -0.360702, -0.363383, -0.364276, -0.362787, -0.356830, -0.344618, -0.330619, -0.316917, -0.302620, -0.285940, -0.268069, -0.248411, -0.228454, -0.211775, -0.197180, -0.181691, -0.167394, -0.157863, -0.154289, -0.153097, -0.151906, -0.148332, -0.141183, -0.131056, -0.119738, -0.107228, -0.090548, -0.073272, -0.061656, -0.053912, -0.045870, -0.036636, -0.026509, -0.013999, 0.001489, 0.019361, 0.036636, 0.051529, 0.064634, 0.075357, 0.082208, 0.085782, 0.087569, 0.088761, 0.089952, 0.092037, 0.093526, 0.094122, 0.092633, 0.091144, 0.090250, 0.089356, 0.088165, 0.089654, 0.093824, 0.101866, 0.112291, 0.122716, 0.131652, 0.139992, 0.147736, 0.154587, 0.158756, 0.160841, 0.165011, 0.170671, 0.177819, 0.182585, 0.186159, 0.187351, 0.189138, 0.191223, 0.193010, 0.192116, 0.192116, 0.195095, 0.199860, 0.202839, 0.204328, 0.205222, 0.207605, 0.210881, 0.215349, 0.221306, 0.230539, 0.241858, 0.255559, 0.268367, 0.278196, 0.285643, 0.291898, 0.296067, 0.298450, 0.298450, 0.297855, 0.298152, 0.298450, 0.297855, 0.295770, 0.293089, 0.291302, 0.289813, 0.288323, 0.286238, 0.285345, 0.285643, 0.286238, 0.287430, 0.287430, 0.287132, 0.286834, 0.287430, 0.286834, 0.285643, 0.285047, 0.285345, 0.285047, 0.284451, 0.282366, 0.279388, 0.275515, 0.271048, 0.265984, 0.259729, 0.254070, 0.248113, 0.242454, 0.235603, 0.228454, 0.222200, 0.217732, 0.213860, 0.211775, 0.210881, 0.212966, 0.216242, 0.219221, 0.221306, 0.221902, 0.222497, 0.222795, 0.221604, 0.219519, 0.217136, 0.215945, 0.215349, 0.213562, 0.210583, 0.208200, 0.205222, 0.201945, 0.198371, 0.195095, 0.193010, 0.191223, 0.190925, 0.190925, 0.190925, 0.191223, 0.191223, 0.191520, 0.191223, 0.191818, 0.192116, 0.192712, 0.193903, 0.197180, 0.200456, 0.200754, 0.198073, 0.194797, 0.191223, 0.186159, 0.178117, 0.169777, 0.163522, 0.159650, 0.156076, 0.151906, 0.148629, 0.145651, 0.144162, 0.142672, 0.140587, 0.139396, 0.139694, 0.140290, 0.140885, 0.141183, 0.140290, 0.138205, 0.135524, 0.132247, 0.128673, 0.124801, 0.121227, 0.117355, 0.113483, 0.108419, 0.102462, 0.097101, 0.091739, 0.086080, 0.081016, 0.077144, 0.074762, 0.072677, 0.070889, 0.069400, 0.068209, 0.068209, 0.068507, 0.068804, 0.069698, 0.070294, 0.072081, 0.072974, 0.072677, 0.070889, 0.067613, 0.064634, 0.061358, 0.057486, 0.053614, 0.049742, 0.047359, 0.046465, 0.045274, 0.043785, 0.042891, 0.043189, 0.044976, 0.046167, 0.047657, 0.049742, 0.053614, 0.057188, 0.060167, 0.061954, 0.064337, 0.066422, 0.067017, 0.067613, 0.067315, 0.067613, 0.067911, 0.067315, 0.066124, 0.064634, 0.061656, 0.059273, 0.056592, 0.055103, 0.052720, 0.051827, 0.051529, 0.052125, 0.052720, 0.053912, 0.055103, 0.056890, 0.058677, 0.060464, 0.061954, 0.062847, 0.064337, 0.064337, 0.062549, 0.060167, 0.057188, 0.054210, 0.050933, 0.047061, 0.044082, 0.041402, 0.039317, 0.037530, 0.035445, 0.033658, 0.032168, 0.031573, 0.031573, 0.030679, 0.030977, 0.031275, 0.032764, 0.033658, 0.033955, 0.033955, 0.033955, 0.033955, 0.033360, 0.031870, 0.030083, 0.028892, 0.026807, 0.023531, 0.020254, 0.016680, 0.013106, 0.010127, 0.006255, 0.003872, 0.001787, 0.000596, 0.000000, -0.000298, -0.000596, -0.000596, 0.000000, 0.000000, 0.000298, 0.000298, 0.000000, 0.000000, -0.001191, -0.003276, -0.005361, -0.008042, -0.011021, -0.014297, -0.017573, -0.020552, -0.023233, -0.026211, -0.028892, -0.031870, -0.034849, -0.037232, -0.039317, -0.041104, -0.042593, -0.043487, -0.043785, -0.044082, -0.044380, -0.044082, -0.044678, -0.045274, -0.046465, -0.047657, -0.049742, -0.052422, -0.055103, -0.058082, -0.061656, -0.065230, -0.068804, -0.072677, -0.076251, -0.079527, -0.082506, -0.084889, -0.086974, -0.088463, -0.089654, -0.090548, -0.091144, -0.091739, -0.092335, -0.093228, -0.094122, -0.095016, -0.096207, -0.097696, -0.099186, -0.100973, -0.102760, -0.104845, -0.106930, -0.108717, -0.110802, -0.113185, -0.115270, -0.117653, -0.120035, -0.122120, -0.123908, -0.125397, -0.126588, -0.126290, -0.126588, -0.125695, -0.125099, -0.124801, -0.124503, -0.124503, -0.124801, -0.125099, -0.125397, -0.126290, -0.127780, -0.129269, -0.130758, -0.132545, -0.134928, -0.137311, -0.139992, -0.142375, -0.144162, -0.145949, -0.147736, -0.148927, -0.149821, -0.150119, -0.150417, -0.150417, -0.150417, -0.149821, -0.150119, -0.150417, -0.151012, -0.151906, -0.153693, -0.155480, -0.156374, -0.158161, -0.161139, -0.163224, -0.163820, -0.164416, -0.167394, -0.170373, -0.172160, -0.173649, -0.176330, -0.179011, -0.180798, -0.181393, -0.182287, -0.181691, -0.181691, -0.181691, -0.181393, -0.181393, -0.181393, -0.183478, -0.186159, -0.189138, -0.191520, -0.194201, -0.197478, -0.199563, -0.200158, -0.201052, -0.202243, -0.203435, -0.204924, -0.206711, -0.209094, -0.211477, -0.213562, -0.215945, -0.216838, -0.218030, -0.219221, -0.220115, -0.219221, -0.219519, -0.220412, -0.222497, -0.223987, -0.224284, -0.224582, -0.226369, -0.229348, -0.230539, -0.230242, -0.229944, -0.231731, -0.234114, -0.235901, -0.237092, -0.238582, -0.240667, -0.242751, -0.243347, -0.244836, -0.246028, -0.244836, -0.243943, -0.243645, -0.246028, -0.246921, -0.246326, -0.249006, -0.253474, -0.257942, -0.260623, -0.262112, -0.263601, -0.266580, -0.271048, -0.275218, -0.275218, -0.275218, -0.280579, -0.287728, -0.289813, -0.288323, -0.288919, -0.292195, -0.295174, -0.293982, -0.292493, -0.293387, -0.296365, -0.299046, -0.300535, -0.301429, -0.304407, -0.310364, -0.315428, -0.316619, -0.315726, -0.317215, -0.319896, -0.316322, -0.303812, -0.290408, -0.279685, -0.269558, -0.255559, -0.238582, -0.221306, -0.204626, -0.187648, -0.169181, -0.153097, -0.142375, -0.136715, -0.131354, -0.126886, -0.125397, -0.124205, -0.117950, -0.107228, -0.094718, -0.083101, -0.070592, -0.058380, -0.047359, -0.037828, -0.028594, -0.017871, -0.007744, 0.003276, 0.017871, 0.032764, 0.044380, 0.052720, 0.060167, 0.067911, 0.074166, 0.078038, 0.081314, 0.084889, 0.088761, 0.090548, 0.089654, 0.085782, 0.083101, 0.081910, 0.081612, 0.081612, 0.083101, 0.087867, 0.096207, 0.103951, 0.110802, 0.117355, 0.125099, 0.133737, 0.141183, 0.146842, 0.152204, 0.157565, 0.161437, 0.162331, 0.162629, 0.164714, 0.168288, 0.170373, 0.170969, 0.172756, 0.176926, 0.181691, 0.184670, 0.187351, 0.190627, 0.195690, 0.200754, 0.205520, 0.210881, 0.216838, 0.223987, 0.230837, 0.238284, 0.246624, 0.255857, 0.264495, 0.271941, 0.278196, 0.283558, 0.286536, 0.288323, 0.288323, 0.287430, 0.285345, 0.283558, 0.282366, 0.281175, 0.280281, 0.279388, 0.279685, 0.281175, 0.282962, 0.285047, 0.287132, 0.289217, 0.290706, 0.291898, 0.291600, 0.290408, 0.289217, 0.288025, 0.285940, 0.282068, 0.278494, 0.276409, 0.274026, 0.269856, 0.264495, 0.259729, 0.255857, 0.252581, 0.247815, 0.242454, 0.237688, 0.234709, 0.232327, 0.228752, 0.225178, 0.222795, 0.222200, 0.222200, 0.222200, 0.223093, 0.224880, 0.227263, 0.228157, 0.227561, 0.225774, 0.224284, 0.222795, 0.220412, 0.216838, 0.212370, 0.209690, 0.207605, 0.204626, 0.201052, 0.198073, 0.197478, 0.197775, 0.198073, 0.198669, 0.200456, 0.202243, 0.204328, 0.204626, 0.204328, 0.204626, 0.204626, 0.204328, 0.203137, 0.201052, 0.199265, 0.197478, 0.195393, 0.191223, 0.186755, 0.183181, 0.180500, 0.176628, 0.173649, 0.173351, 0.175436, 0.174841, 0.170969, 0.165011, 0.160841, 0.157863, 0.153991, 0.150714, 0.151608, 0.155182, 0.158161, 0.158756, 0.156672, 0.153693, 0.149225, 0.143268, 0.136715, 0.131354, 0.127184, 0.123610, 0.118844, 0.113780, 0.109908, 0.106632, 0.102760, 0.098888, 0.096803, 0.097398, 0.097696, 0.096803, 0.094718, 0.092037, 0.089059, 0.086080, 0.083101, 0.081314, 0.080719, 0.080719, 0.079825, 0.077442, 0.074762, 0.072081, 0.068804, 0.065826, 0.063741, 0.063145, 0.062847, 0.061358, 0.059571, 0.057188, 0.054210, 0.051529, 0.048550, 0.047955, 0.049444, 0.052125, 0.054210, 0.056592, 0.058380, 0.059571, 0.059869, 0.059869, 0.059869, 0.060762, 0.060167, 0.059571, 0.058380, 0.056592, 0.055103, 0.053912, 0.053018, 0.053614, 0.055103, 0.056592, 0.057188, 0.057188, 0.056890, 0.057188, 0.057188, 0.057188, 0.058082, 0.059571, 0.060464, 0.060762, 0.060464, 0.060167, 0.059869, 0.058975, 0.058380, 0.057784, 0.057188, 0.056890, 0.054805, 0.052125, 0.049146, 0.046763, 0.044082, 0.041104, 0.039019, 0.037530, 0.036338, 0.035147, 0.033360, 0.032466, 0.032168, 0.032466, 0.032764, 0.033062, 0.033062, 0.032764, 0.031573, 0.029190, 0.026509, 0.024126, 0.022041, 0.019658, 0.017573, 0.016084, 0.015191, 0.014297, 0.012808, 0.011318, 0.009829, 0.008936, 0.007446, 0.006255, 0.005361, 0.005064, 0.004766, 0.004468, 0.004170, 0.003574, 0.003276, 0.003276, 0.002979, 0.002085, 0.001489, 0.000596, -0.000298, -0.002085, -0.003872, -0.006255, -0.008340, -0.010127, -0.011914, -0.013701, -0.015191, -0.017276, -0.018169, -0.019658, -0.020552, -0.021148, -0.022041, -0.022637, -0.023233, -0.023828, -0.024722, -0.026211, -0.027700, -0.029488, -0.031275, -0.033658, -0.036338, -0.038423, -0.040806, -0.042593, -0.044976, -0.047359, -0.049444, -0.051529, -0.053912, -0.056295, -0.058380, -0.060167, -0.061954, -0.064039, -0.065826, -0.067017, -0.067911, -0.068804, -0.069698, -0.070889, -0.072379, -0.073272, -0.075059, -0.077144, -0.078634, -0.080719, -0.082506, -0.085186, -0.087569, -0.089952, -0.092335, -0.094122, -0.095909, -0.097696, -0.098590, -0.099186, -0.099781, -0.100079, -0.099781, -0.100079, -0.099781, -0.099781, -0.100079, -0.100377, -0.100973, -0.101271, -0.102760, -0.103951, -0.105441, -0.106334, -0.107228, -0.108717, -0.109610, -0.111100, -0.111695, -0.113185, -0.114972, -0.116759, -0.117950, -0.118844, -0.120035, -0.120929, -0.121823, -0.122120, -0.122418, -0.123610, -0.124801, -0.125992, -0.126886, -0.127184, -0.128375, -0.129865, -0.130460, -0.131354, -0.132247, -0.133737, -0.135822, -0.137609, -0.139098, -0.140885, -0.142672, -0.144162, -0.144757, -0.145949, -0.147140, -0.148629, -0.149523, -0.149523, -0.149821, -0.150417, -0.150119, -0.149821, -0.149523, -0.149821, -0.151012, -0.152799, -0.154587, -0.156076, -0.157267, -0.158161, -0.159352, -0.160544, -0.161139, -0.161735, -0.163522, -0.166203, -0.168288, -0.169479, -0.170075, -0.172160, -0.173054, -0.172756, -0.173351, -0.174841, -0.176032, -0.177223, -0.177819, -0.177819, -0.178415, -0.179606, -0.180202, -0.181393, -0.183478, -0.186457, -0.190031, -0.192712, -0.195095, -0.196882, -0.198967, -0.200754, -0.201945, -0.202541, -0.203733, -0.205520, -0.206711, -0.206115, -0.204626, -0.204328, -0.206115, -0.207605, -0.207307, -0.206413, -0.208498, -0.213264, -0.216242, -0.215051, -0.212370, -0.212370, -0.216242, -0.219519, -0.219221, -0.218923, -0.223093, -0.228157, -0.230242, -0.228752, -0.227859, -0.229050, -0.230242, -0.230837, -0.229944, -0.228454, -0.229050, -0.229348, -0.230242, -0.229646, -0.230837, -0.233518, -0.236497, -0.239773, -0.242454, -0.245730, -0.249006, -0.253176, -0.254666, -0.253772, -0.252283, -0.254070, -0.257644, -0.259431, -0.258836, -0.259729, -0.263899, -0.268069, -0.268367, -0.266878, -0.269856, -0.275515, -0.278792, -0.277005, -0.275218, -0.276111, -0.276111, -0.269856, -0.255857, -0.238879, -0.225178, -0.215647, -0.205222, -0.193010, -0.182883, -0.176926, -0.170075, -0.158756, -0.144459, -0.132545, -0.123312, -0.115865, -0.108121, -0.101568, -0.099186, -0.100079, -0.096505, -0.085782, -0.071485, -0.057486, -0.045870, -0.033062, -0.017573, -0.003574, 0.002979, 0.006255, 0.012212, 0.024126, 0.036934, 0.045572, 0.050635, 0.056295, 0.064039, 0.069400, 0.070294, 0.068804, 0.068804, 0.072081, 0.073868, 0.074166, 0.075357, 0.078634, 0.083101, 0.086676, 0.088761, 0.090548, 0.095909, 0.103653, 0.110802, 0.115270, 0.118546, 0.124205, 0.130758, 0.136120, 0.138205, 0.138502, 0.141481, 0.146247, 0.150119, 0.151012, 0.151608, 0.154289, 0.159054, 0.161139, 0.160544, 0.161139, 0.166203, 0.173649, 0.178713, 0.182287, 0.188244, 0.196286, 0.203435, 0.207009, 0.209094, 0.213264, 0.219817, 0.226667, 0.232327, 0.237986, 0.244836, 0.251389, 0.255559, 0.256155, 0.254964, 0.255559, 0.257049, 0.257049, 0.256751, 0.255857, 0.257942, 0.260325, 0.261516, 0.260921, 0.260325, 0.262112, 0.265091, 0.267473, 0.268069, 0.268963, 0.270452, 0.271643, 0.271346, 0.268665, 0.265388, 0.263006, 0.260325, 0.256155, 0.251389, 0.247219, 0.244241, 0.241262, 0.237092, 0.233220, 0.230539, 0.228752, 0.226965, 0.223391, 0.220710, 0.219817, 0.219519, 0.218327, 0.216242, 0.213860, 0.212668, 0.212072, 0.210881, 0.209690, 0.208498, 0.207903, 0.207307, 0.206115, 0.203137, 0.200754, 0.197775, 0.194797, 0.191520, 0.189138, 0.187946, 0.187946, 0.187946, 0.187648, 0.187648, 0.187946, 0.188244, 0.188244, 0.188840, 0.189138, 0.190627, 0.191223, 0.191520, 0.190925, 0.189138, 0.186457, 0.183776, 0.180500, 0.177521, 0.175436, 0.172756, 0.170671, 0.169181, 0.170373, 0.173054, 0.174543, 0.171862, 0.167096, 0.163522, 0.160544, 0.156672, 0.151310, 0.149523, 0.150417, 0.152502, 0.152799, 0.150119, 0.147736, 0.144459, 0.140587, 0.135524, 0.131354, 0.128375, 0.125992, 0.122120, 0.118248, 0.114078, 0.110802, 0.106036, 0.101568, 0.098888, 0.098888, 0.098590, 0.097398, 0.094718, 0.092037, 0.089654, 0.086080, 0.082208, 0.079825, 0.078634, 0.077740, 0.075059, 0.071485, 0.067911, 0.064337, 0.060762, 0.057486, 0.055699, 0.055699, 0.056295, 0.056295, 0.055401, 0.053912, 0.052125, 0.049742, 0.046763, 0.044380, 0.043785, 0.044082, 0.044082, 0.043487, 0.042891, 0.043785, 0.044082, 0.044380, 0.043487, 0.042593, 0.042295, 0.041700, 0.039615, 0.037828, 0.036040, 0.036040, 0.036338, 0.038125, 0.039317, 0.040210, 0.040806, 0.041104, 0.041104, 0.041402, 0.041104, 0.041700, 0.042891, 0.044082, 0.044678, 0.043785, 0.042295, 0.041104, 0.040210, 0.039317, 0.038125, 0.037828, 0.038721, 0.039019, 0.039019, 0.037828, 0.036636, 0.036636, 0.036338, 0.035743, 0.034551, 0.033955, 0.033360, 0.032466, 0.030381, 0.028594, 0.027700, 0.027700, 0.027700, 0.027105, 0.026509, 0.026509, 0.025913, 0.023531, 0.020254, 0.017871, 0.016382, 0.015488, 0.013701, 0.012808, 0.012510, 0.013106, 0.013106, 0.012510, 0.011914, 0.011616, 0.011021, 0.010127, 0.008936, 0.008042, 0.007744, 0.007446, 0.006851, 0.005659, 0.004468, 0.003276, 0.002085, 0.000894, -0.000298, -0.001191, -0.002085, -0.003276, -0.003574, -0.004468, -0.004766, -0.005957, -0.006553, -0.007744, -0.008936, -0.010127, -0.011914, -0.013106, -0.013701, -0.014595, -0.015488, -0.016382, -0.016978, -0.017871, -0.019063, -0.020254, -0.022339, -0.023828, -0.025913, -0.027998, -0.030381, -0.032168, -0.033658, -0.034551, -0.035743, -0.036934, -0.037828, -0.038721, -0.039615, -0.040508, -0.042295, -0.043487, -0.045572, -0.047359, -0.048550, -0.050635, -0.051827, -0.053614, -0.054805, -0.056592, -0.058380, -0.060464, -0.061954, -0.064337, -0.066124, -0.067613, -0.069102, -0.070294, -0.071783, -0.073272, -0.074762, -0.076251, -0.077740, -0.079229, -0.080421, -0.081612, -0.082804, -0.083399, -0.084591, -0.085186, -0.085484, -0.086676, -0.087271, -0.088463, -0.088761, -0.090250, -0.092037, -0.094122, -0.095016, -0.095611, -0.096207, -0.096803, -0.097101, -0.096505, -0.096207, -0.096207, -0.096803, -0.096803, -0.096505, -0.096505, -0.096505, -0.097101, -0.097101, -0.098292, -0.099186, -0.100079, -0.100377, -0.101271, -0.102164, -0.102462, -0.103356, -0.103951, -0.105441, -0.107228, -0.108717, -0.109908, -0.111100, -0.111695, -0.112589, -0.112887, -0.113483, -0.114078, -0.115270, -0.116163, -0.117355, -0.117950, -0.117950, -0.118844, -0.119440, -0.120929, -0.121823, -0.122716, -0.123908, -0.125397, -0.126886, -0.127482, -0.127482, -0.128077, -0.129865, -0.130758, -0.130460, -0.130460, -0.130758, -0.131354, -0.131056, -0.130758, -0.130758, -0.131950, -0.133141, -0.134332, -0.134630, -0.135524, -0.136715, -0.137609, -0.138502, -0.139396, -0.140885, -0.142077, -0.142375, -0.142672, -0.143268, -0.144757, -0.145651, -0.147438, -0.149821, -0.152204, -0.153693, -0.154884, -0.155778, -0.156374, -0.156076, -0.155480, -0.156076, -0.158161, -0.159948, -0.160246, -0.159948, -0.160544, -0.161437, -0.161437, -0.161735, -0.163820, -0.166799, -0.168586, -0.169479, -0.170373, -0.171862, -0.173947, -0.173351, -0.173947, -0.176628, -0.179308, -0.180202, -0.179308, -0.180500, -0.181691, -0.180798, -0.177223, -0.175139, -0.177223, -0.180202, -0.181691, -0.179308, -0.177819, -0.180202, -0.183181, -0.182883, -0.180798, -0.181989, -0.187351, -0.191520, -0.191818, -0.190627, -0.191223, -0.193010, -0.194797, -0.195988, -0.196882, -0.198073, -0.200158, -0.202839, -0.204626, -0.204030, -0.202541, -0.202541, -0.204030, -0.204924, -0.204626, -0.205520, -0.207903, -0.211179, -0.213562, -0.213860, -0.214455, -0.216838, -0.220412, -0.223391, -0.223689, -0.223689, -0.225178, -0.226965, -0.227859, -0.228157, -0.229646, -0.232922, -0.235305, -0.236199, -0.235901, -0.232624, -0.225476, -0.214455, -0.202541, -0.190031, -0.177819, -0.166799, -0.156672, -0.148629, -0.141481, -0.132843, -0.121823, -0.110802, -0.101866, -0.094122, -0.088463, -0.085782, -0.084591, -0.081910, -0.077144, -0.071187, -0.063741, -0.053316, -0.040210, -0.026807, -0.016084, -0.008042, 0.000894, 0.011318, 0.020552, 0.027105, 0.034253, 0.043785, 0.053316, 0.060167, 0.064337, 0.066422, 0.066124, 0.066422, 0.067315, 0.069400, 0.071485, 0.072379, 0.072974, 0.073868, 0.076251, 0.077442, 0.078634, 0.079825, 0.083101, 0.088165, 0.094718, 0.101866, 0.107823, 0.112291, 0.117950, 0.122716, 0.126588, 0.128673, 0.130162, 0.131652, 0.134630, 0.137609, 0.140290, 0.140587, 0.140885, 0.142672, 0.145353, 0.147736, 0.149821, 0.152799, 0.157565, 0.164118, 0.170671, 0.175436, 0.181393, 0.188542, 0.195095, 0.200158, 0.204328, 0.209392, 0.215051, 0.220412, 0.225178, 0.228454, 0.231433, 0.234114, 0.235901, 0.236199, 0.235901, 0.235603, 0.236497, 0.237688, 0.239177, 0.239773, 0.240369, 0.241262, 0.242751, 0.243645, 0.244241, 0.246624, 0.249304, 0.251985, 0.253176, 0.253772, 0.253474, 0.252581, 0.250198, 0.246028, 0.241560, 0.238284, 0.235305, 0.231135, 0.226965, 0.223093, 0.219221, 0.215647, 0.211775, 0.208498, 0.205520, 0.204626, 0.204030, 0.203435, 0.203137, 0.203435, 0.203137, 0.202243, 0.200456, 0.198371, 0.195393, 0.193605, 0.191818, 0.190031, 0.188542, 0.186755, 0.184968, 0.182883, 0.181096, 0.178713, 0.176330, 0.174245, 0.172756, 0.171862, 0.171266, 0.170671, 0.170373, 0.171266, 0.171862, 0.173054, 0.174245, 0.174841, 0.175436, 0.176032, 0.176330, 0.175139, 0.173649, 0.171266, 0.169479, 0.167394, 0.163820, 0.161139, 0.159054, 0.156672, 0.154289, 0.152204, 0.152204, 0.154587, 0.157267, 0.157267, 0.154884, 0.152502, 0.149821, 0.147140, 0.142970, 0.139098, 0.137609, 0.137311, 0.135822, 0.132545, 0.128673, 0.125397, 0.121525, 0.117355, 0.113483, 0.111398, 0.109313, 0.106930, 0.103653, 0.100377, 0.097101, 0.093824, 0.090250, 0.087569, 0.086676, 0.086378, 0.085782, 0.083995, 0.081612, 0.079229, 0.076251, 0.072379, 0.069996, 0.068507, 0.067017, 0.064634, 0.060762, 0.057188, 0.053912, 0.050337, 0.047359, 0.045572, 0.044976, 0.045274, 0.046167, 0.045870, 0.045274, 0.044380, 0.043189, 0.041700, 0.039615, 0.038423, 0.037530, 0.037232, 0.035743, 0.034551, 0.033360, 0.032764, 0.032168, 0.031275, 0.030977, 0.030679, 0.029785, 0.028296, 0.026509, 0.025615, 0.024722, 0.024424, 0.024424, 0.024722, 0.026509, 0.027403, 0.027700, 0.027403, 0.027700, 0.028892, 0.029488, 0.029785, 0.030083, 0.030977, 0.031870, 0.030381, 0.028892, 0.027998, 0.027998, 0.027105, 0.025615, 0.024126, 0.024126, 0.023828, 0.023233, 0.022041, 0.021743, 0.022339, 0.022935, 0.022935, 0.022637, 0.022637, 0.022339, 0.021743, 0.020850, 0.019361, 0.018467, 0.017573, 0.016978, 0.016084, 0.015191, 0.014297, 0.013106, 0.011318, 0.009829, 0.008042, 0.006553, 0.005361, 0.004468, 0.003872, 0.003872, 0.003872, 0.003872, 0.004170, 0.003872, 0.003872, 0.002979, 0.002383, 0.001787, 0.001191, 0.001191, 0.000000, -0.000596, -0.001489, -0.002681, -0.003872, -0.005659, -0.006851, -0.007744, -0.008340, -0.009233, -0.009531, -0.009829, -0.009531, -0.009531, -0.009829, -0.009531, -0.009233, -0.008936, -0.009233, -0.010127, -0.011021, -0.011318, -0.012212, -0.013403, -0.013999, -0.014893, -0.015191, -0.016382, -0.017871, -0.019063, -0.020552, -0.021743, -0.023233, -0.024722, -0.025615, -0.026509, -0.026807, -0.027105, -0.027998, -0.028296, -0.028296, -0.029190, -0.030083, -0.030679, -0.032466, -0.033955, -0.035743, -0.037828, -0.039913, -0.041700, -0.043785, -0.045274, -0.047061, -0.048550, -0.050040, -0.052125, -0.054210, -0.055997, -0.057188, -0.058380, -0.058975, -0.060464, -0.061060, -0.062252, -0.062847, -0.064039, -0.064932, -0.065826, -0.067017, -0.067911, -0.069102, -0.069698, -0.070889, -0.071783, -0.073272, -0.074464, -0.075655, -0.076549, -0.078038, -0.078634, -0.079825, -0.080421, -0.081016, -0.081314, -0.081910, -0.081612, -0.081612, -0.081314, -0.081314, -0.081612, -0.081314, -0.081910, -0.081910, -0.082506, -0.083101, -0.083399, -0.083399, -0.083697, -0.084293, -0.084889, -0.085186, -0.085484, -0.086676, -0.087867, -0.088463, -0.088761, -0.089654, -0.090846, -0.091739, -0.092037, -0.091144, -0.091739, -0.092633, -0.092931, -0.092633, -0.092633, -0.093228, -0.094718, -0.095611, -0.096505, -0.097696, -0.099186, -0.100973, -0.102760, -0.104249, -0.105441, -0.106334, -0.107526, -0.108419, -0.109313, -0.109610, -0.109908, -0.109908, -0.110504, -0.111100, -0.111100, -0.111100, -0.111695, -0.112887, -0.113780, -0.114376, -0.114674, -0.115568, -0.116461, -0.117057, -0.117057, -0.117355, -0.118248, -0.119738, -0.120631, -0.121227, -0.121823, -0.122418, -0.123908, -0.123610, -0.123312, -0.123014, -0.123908, -0.124205, -0.123908, -0.123312, -0.123610, -0.123908, -0.125397, -0.126290, -0.127184, -0.127482, -0.128375, -0.129269, -0.129567, -0.129567, -0.129567, -0.130460, -0.132247, -0.133439, -0.134035, -0.134630, -0.135822, -0.136120, -0.135524, -0.134332, -0.133737, -0.133141, -0.134035, -0.134332, -0.134332, -0.134630, -0.136417, -0.138502, -0.140885, -0.141779, -0.142375, -0.143268, -0.144459, -0.145055, -0.144459, -0.144162, -0.144459, -0.145055, -0.145353, -0.145353, -0.145353, -0.145353, -0.146247, -0.147140, -0.147736, -0.147140, -0.147140, -0.147736, -0.148629, -0.148034, -0.147140, -0.146842, -0.148927, -0.151608, -0.151608, -0.150714, -0.151608, -0.153991, -0.154884, -0.152502, -0.150119, -0.149821, -0.151608, -0.151906, -0.150119, -0.148034, -0.147736, -0.148034, -0.146544, -0.143864, -0.142077, -0.142375, -0.144459, -0.146247, -0.146842, -0.148034, -0.149523, -0.151012, -0.151310, -0.150119, -0.150714, -0.151608, -0.151012, -0.149821, -0.150119, -0.150417, -0.150119, -0.149821, -0.150714, -0.151310, -0.152204, -0.153097, -0.153991, -0.154587, -0.155182, -0.155182, -0.155480, -0.156374, -0.156076, -0.154587, -0.151310, -0.148332, -0.144162, -0.137609, -0.128971, -0.120929, -0.114972, -0.110802, -0.105441, -0.098292, -0.090250, -0.082506, -0.073570, -0.063443, -0.055103, -0.050337, -0.048550, -0.047657, -0.046465, -0.044678, -0.040508, -0.033658, -0.024126, -0.013106, -0.002681, 0.005064, 0.011318, 0.015786, 0.019063, 0.021743, 0.025913, 0.032168, 0.040210, 0.047955, 0.055103, 0.060762, 0.064932, 0.067613, 0.068804, 0.069996, 0.071485, 0.072974, 0.075059, 0.076251, 0.076846, 0.077442, 0.078634, 0.081612, 0.085186, 0.089654, 0.094420, 0.099781, 0.104249, 0.108121, 0.111398, 0.113780, 0.115270, 0.118546, 0.121823, 0.125695, 0.128971, 0.131950, 0.134332, 0.136120, 0.135226, 0.134035, 0.133737, 0.135226, 0.137311, 0.139396, 0.142970, 0.148332, 0.153991, 0.159352, 0.162331, 0.165607, 0.169479, 0.173351, 0.176628, 0.179011, 0.182287, 0.186755, 0.191520, 0.195690, 0.198371, 0.201350, 0.203733, 0.204626, 0.204030, 0.203435, 0.202243, 0.202839, 0.204030, 0.204924, 0.206413, 0.208498, 0.211179, 0.212966, 0.213860, 0.214455, 0.214753, 0.216242, 0.216540, 0.216242, 0.215349, 0.215051, 0.215051, 0.213860, 0.211775, 0.208796, 0.206711, 0.204924, 0.202243, 0.198669, 0.194797, 0.191818, 0.189138, 0.187053, 0.184670, 0.183181, 0.182883, 0.182585, 0.182883, 0.181989, 0.180500, 0.179011, 0.177223, 0.175734, 0.173351, 0.171564, 0.170373, 0.170373, 0.169479, 0.168586, 0.166501, 0.164714, 0.162629, 0.159352, 0.156672, 0.153395, 0.152204, 0.151310, 0.151012, 0.150714, 0.150417, 0.151012, 0.151310, 0.150714, 0.149821, 0.148927, 0.148927, 0.148034, 0.147438, 0.146247, 0.144757, 0.143864, 0.142077, 0.139992, 0.137311, 0.135226, 0.132545, 0.129269, 0.126290, 0.123312, 0.121525, 0.119142, 0.117355, 0.115568, 0.113185, 0.111695, 0.110206, 0.108419, 0.106036, 0.103653, 0.101271, 0.098888, 0.096207, 0.093228, 0.090250, 0.087569, 0.086378, 0.085782, 0.086378, 0.086974, 0.085782, 0.083101, 0.079527, 0.075953, 0.072081, 0.067613, 0.064634, 0.063145, 0.063145, 0.062252, 0.061060, 0.058975, 0.057188, 0.054805, 0.052720, 0.050933, 0.050337, 0.049742, 0.048848, 0.047359, 0.046465, 0.045274, 0.042891, 0.039913, 0.037530, 0.036338, 0.035743, 0.034253, 0.032168, 0.030083, 0.028296, 0.026211, 0.023531, 0.021743, 0.021743, 0.021446, 0.020552, 0.018765, 0.017276, 0.016084, 0.014595, 0.013106, 0.011914, 0.011914, 0.013106, 0.013999, 0.013403, 0.012808, 0.012212, 0.011616, 0.009829, 0.007446, 0.005957, 0.005064, 0.004468, 0.003574, 0.002979, 0.003276, 0.005064, 0.005957, 0.006553, 0.006851, 0.007446, 0.008340, 0.008042, 0.007744, 0.007744, 0.008340, 0.008936, 0.009531, 0.010425, 0.010723, 0.011318, 0.010723, 0.010723, 0.010425, 0.010723, 0.011021, 0.011914, 0.013403, 0.014297, 0.015488, 0.014893, 0.014893, 0.014893, 0.015191, 0.014595, 0.014297, 0.013999, 0.014893, 0.015786, 0.015488, 0.014893, 0.014893, 0.015786, 0.015786, 0.015191, 0.013701, 0.013106, 0.011914, 0.010723, 0.008936, 0.007149, 0.006255, 0.005957, 0.005659, 0.005064, 0.005064, 0.005957, 0.005957, 0.005064, 0.003872, 0.003276, 0.003276, 0.002979, 0.002383, 0.001787, 0.002085, 0.002383, 0.001787, 0.000596, 0.000000, -0.000298, -0.000596, -0.001191, -0.001489, -0.001787, -0.001191, -0.001191, -0.001489, -0.001489, -0.001489, -0.001489, -0.002085, -0.002085, -0.002383, -0.002383, -0.002681, -0.002085, -0.001787, -0.001489, -0.001787, -0.002085, -0.002383, -0.002979, -0.003276, -0.005064, -0.006851, -0.008042, -0.008936, -0.009829, -0.010723, -0.011616, -0.011914, -0.011914, -0.012808, -0.013106, -0.013999, -0.014297, -0.014893, -0.016084, -0.017573, -0.019063, -0.019956, -0.021446, -0.022935, -0.024424, -0.025615, -0.026807, -0.027403, -0.029190, -0.030381, -0.031573, -0.032466, -0.033658, -0.034849, -0.035743, -0.036636, -0.037530, -0.038423, -0.039615, -0.040508, -0.041402, -0.042295, -0.043189, -0.043785, -0.044380, -0.044976, -0.045572, -0.046465, -0.047359, -0.048848, -0.049742, -0.050933, -0.051827, -0.053316, -0.054507, -0.055401, -0.055997, -0.056592, -0.057188, -0.057486, -0.057188, -0.057188, -0.057188, -0.057486, -0.058082, -0.058677, -0.059273, -0.060167, -0.061358, -0.062252, -0.063145, -0.063741, -0.064337, -0.065528, -0.066124, -0.067017, -0.067613, -0.068804, -0.069400, -0.069996, -0.070294, -0.070592, -0.070889, -0.070889, -0.071187, -0.071485, -0.072081, -0.072379, -0.072974, -0.073570, -0.074464, -0.075357, -0.075953, -0.076846, -0.078038, -0.078931, -0.079825, -0.080719, -0.081314, -0.082506, -0.083399, -0.084293, -0.084889, -0.086080, -0.087569, -0.088165, -0.087867, -0.088165, -0.088463, -0.089059, -0.089654, -0.089356, -0.090250, -0.091441, -0.092931, -0.093824, -0.094420, -0.095313, -0.096207, -0.097696, -0.098888, -0.100377, -0.101271, -0.102164, -0.102760, -0.103951, -0.104249, -0.104249, -0.103951, -0.103951, -0.104845, -0.105738, -0.105738, -0.105738, -0.106334, -0.107823, -0.108717, -0.108419, -0.109015, -0.109908, -0.111100, -0.111100, -0.110802, -0.110504, -0.111100, -0.111695, -0.112291, -0.113185, -0.114376, -0.114674, -0.114674, -0.114674, -0.114972, -0.114972, -0.114674, -0.113780, -0.113780, -0.114078, -0.114674, -0.115270, -0.116461, -0.116759, -0.117355, -0.118844, -0.119738, -0.120333, -0.120631, -0.121525, -0.122716, -0.123610, -0.124205, -0.123312, -0.122418, -0.121525, -0.122120, -0.122418, -0.121823, -0.120333, -0.120929, -0.123312, -0.124503, -0.123610, -0.121525, -0.121227, -0.122418, -0.123312, -0.122120, -0.120929, -0.120929, -0.122120, -0.123014, -0.122120, -0.120631, -0.120631, -0.122418, -0.123908, -0.124503, -0.123908, -0.124503, -0.124205, -0.123908, -0.121823, -0.120035, -0.118546, -0.117355, -0.116461, -0.115568, -0.115270, -0.115270, -0.115865, -0.114674, -0.113780, -0.114376, -0.117057, -0.119142, -0.119440, -0.119142, -0.120929, -0.122120, -0.121227, -0.118546, -0.117355, -0.116759, -0.115568, -0.113780, -0.113185, -0.113185, -0.113185, -0.111993, -0.111398, -0.111100, -0.111100, -0.110802, -0.109610, -0.109908, -0.111398, -0.112589, -0.111695, -0.110206, -0.110802, -0.112291, -0.111993, -0.109015, -0.105143, -0.103058, -0.101271, -0.096505, -0.090548, -0.086676, -0.085186, -0.084591, -0.080719, -0.076251, -0.072379, -0.068804, -0.063443, -0.056592, -0.048252, -0.040210, -0.034253, -0.030381, -0.027403, -0.024722, -0.022637, -0.022339, -0.021446, -0.018765, -0.013701, -0.006553, 0.001191, 0.008340, 0.015191, 0.020850, 0.026509, 0.031573, 0.034849, 0.036636, 0.038125, 0.041104, 0.045572, 0.051231, 0.055997, 0.061060, 0.066124, 0.070294, 0.073570, 0.074762, 0.074762, 0.074762, 0.074762, 0.075059, 0.075953, 0.078634, 0.082208, 0.084591, 0.086378, 0.088463, 0.092037, 0.095313, 0.097101, 0.098590, 0.102164, 0.107228, 0.112589, 0.116163, 0.118844, 0.122120, 0.125099, 0.126588, 0.126886, 0.126290, 0.125992, 0.126290, 0.126588, 0.126886, 0.128077, 0.131056, 0.135524, 0.140587, 0.145949, 0.150714, 0.155778, 0.158756, 0.161437, 0.162926, 0.164416, 0.165011, 0.166501, 0.169777, 0.172756, 0.175734, 0.177223, 0.179011, 0.179904, 0.180202, 0.179011, 0.178415, 0.177819, 0.178117, 0.178713, 0.179606, 0.180202, 0.181393, 0.182287, 0.183478, 0.183776, 0.183478, 0.183776, 0.184074, 0.184372, 0.184372, 0.184074, 0.184074, 0.183181, 0.182287, 0.180500, 0.178415, 0.175734, 0.172458, 0.169181, 0.165905, 0.163522, 0.160841, 0.159352, 0.157863, 0.157863, 0.157863, 0.158756, 0.158161, 0.157863, 0.156969, 0.156374, 0.154587, 0.152799, 0.151012, 0.149821, 0.148629, 0.147438, 0.146247, 0.145055, 0.143864, 0.141779, 0.139992, 0.137907, 0.135822, 0.133737, 0.131354, 0.129865, 0.128673, 0.128077, 0.127482, 0.127482, 0.126886, 0.126588, 0.125992, 0.125099, 0.124205, 0.123610, 0.122716, 0.123014, 0.121525, 0.120333, 0.118546, 0.117057, 0.114674, 0.111993, 0.108981, 0.105376, 0.102963, 0.099956, 0.098141, 0.096327, 0.095109, 0.093594, 0.092971, 0.092349, 0.091430, 0.090511, 0.089000, 0.087787, 0.085981, 0.084176, 0.081779, 0.079385, 0.076991, 0.074303, 0.072209, 0.069820, 0.067432, 0.065046, 0.062957, 0.060574, 0.057896, 0.054630, 0.052547, 0.050465, 0.049269, 0.047779, 0.046585, 0.045981, 0.045377, 0.045069, 0.044171, 0.042391, 0.041495, 0.040306, 0.039411, 0.037929, 0.036153, 0.034085, 0.032606, 0.031127, 0.028769, 0.026412, 0.024057, 0.022290, 0.020524, 0.019052, 0.017288, 0.016111, 0.015520, 0.015223, 0.015218, 0.014920, 0.014916, 0.014911, 0.014907, 0.014025, 0.012852, 0.011388, 0.010217, 0.009047, 0.007877, 0.006125, 0.005248, 0.004080, 0.003496, 0.002039, 0.001165, 0.000000, -0.000873, -0.001745, -0.002327, -0.003198, -0.003197, -0.003196, -0.002324, -0.002033, -0.001742, -0.000580, 0.000000, 0.000000, 0.000290, 0.000000, -0.000290, -0.000579, -0.000579, -0.000868, -0.001447, -0.001446, -0.000868, -0.000289, -0.000289, -0.000578, -0.000866, -0.000577, 0.000000, 0.000000, 0.000288, 0.000288, 0.001730, 0.002882, 0.003169, 0.003168, 0.003455, 0.004317, 0.004028, 0.004027, 0.003738, 0.003737, 0.003736, 0.003447, 0.002297, 0.001722, 0.001148, 0.001148, 0.000860, 0.000000, -0.000860, -0.001433, -0.001432, -0.002004, -0.002863, -0.003720, -0.003433, -0.003146, -0.002859, -0.003430, -0.003429, -0.003427, -0.003712, -0.003996, -0.004851, -0.005705, -0.005703, -0.006272, -0.007124, -0.007692, -0.007974, -0.007972, -0.008254, -0.008536, -0.008817, -0.008815, -0.008812, -0.008809, -0.008806, -0.008519, -0.008233, -0.008230, -0.007376, -0.007374, -0.007371, -0.007086, -0.007083, -0.007364, -0.007645, -0.008209, -0.008489, -0.008486, -0.009049, -0.009329, -0.009609, -0.010171, -0.010450, -0.010729, -0.011290, -0.012132, -0.012128, -0.012688, -0.012403, -0.012962, -0.013521, -0.014080, -0.013794, -0.014071, -0.014910, -0.015749, -0.016588, -0.017144, -0.018263, -0.019380, -0.020497, -0.021613, -0.022448, -0.023843, -0.024676, -0.025790, -0.026622, -0.027454, -0.028005, -0.028836, -0.029946, -0.030495, -0.031325, -0.031874, -0.032702, -0.033250, -0.033798, -0.034345, -0.034892, -0.035439, -0.036264, -0.036810, -0.037355, -0.038179, -0.038724, -0.039268, -0.040090, -0.040077, -0.040621, -0.040885, -0.041706, -0.042248, -0.042512, -0.043054, -0.043040, -0.043581, -0.043566, -0.043275, -0.042983, -0.042969, -0.043232, -0.042941, -0.042926, -0.042635, -0.043452, -0.043991, -0.044529, -0.044791, -0.045329, -0.045867, -0.046128, -0.046665, -0.047201, -0.047186, -0.047998, -0.048258, -0.049069, -0.049603, -0.049587, -0.050397, -0.050380, -0.050914, -0.051172, -0.051705, -0.051688, -0.052495, -0.052753, -0.053010, -0.053267, -0.053798, -0.054603, -0.055134, -0.055664, -0.056193, -0.057271, -0.057799, -0.058328, -0.058856, -0.059657, -0.060185, -0.060438, -0.060691, -0.061217, -0.062017, -0.061996, -0.061975, -0.061954, -0.062206, -0.062186, -0.062438, -0.062689, -0.063213, -0.063192, -0.063715, -0.064511, -0.064761, -0.065283, -0.065805, -0.066055, -0.066305, -0.066554, -0.066803, -0.067052, -0.067572, -0.067821, -0.068340, -0.068317, -0.068836, -0.069626, -0.070144, -0.070391, -0.070909, -0.071155, -0.071402, -0.071378, -0.071894, -0.071870, -0.072116, -0.072631, -0.072607, -0.072852, -0.072827, -0.073342, -0.073587, -0.073831, -0.074076, -0.074589, -0.075102, -0.075346, -0.075589, -0.075563, -0.075538, -0.075781, -0.075755, -0.075998, -0.075704, -0.075946, -0.075920, -0.075895, -0.075869, -0.075039, -0.074745, -0.074184, -0.073891, -0.073331, -0.072503, -0.072211, -0.071919, -0.071627, -0.071336, -0.070510, -0.070486, -0.070462, -0.070171, -0.070147, -0.070656, -0.070898, -0.071140, -0.071382, -0.071624, -0.071866, -0.072107, -0.072083, -0.071526, -0.070970, -0.070680, -0.070655, -0.070631, -0.070076, -0.069787, -0.070028, -0.070269, -0.070510, -0.069955, -0.069666, -0.069378, -0.069618, -0.069859, -0.069306, -0.069282, -0.068729, -0.068970, -0.068946, -0.068394, -0.068106, -0.067819, -0.067796, -0.067245, -0.066431, -0.065090, -0.064014, -0.063465, -0.062916, -0.061315, -0.060768, -0.059958, -0.059411, -0.058340, -0.057531, -0.056986, -0.056704, -0.055897, -0.054828, -0.054284, -0.053479, -0.052936, -0.052132, -0.051590, -0.050787, -0.049984, -0.049182, -0.048380, -0.047317, -0.045994, -0.044933, -0.043612, -0.042552, -0.041493, -0.040175, -0.038596, -0.037800, -0.036484, -0.035169, -0.033854, -0.032801, -0.032269, -0.032258, -0.031986, -0.032235, -0.031704, -0.031693, -0.031422, -0.030892, -0.030621, -0.029832, -0.029044, -0.027997, -0.026173, -0.024350, -0.022788, -0.021227, -0.019926, -0.019142, -0.018101, -0.017578, -0.017055, -0.016791, -0.016268, -0.014972, -0.013676, -0.012898, -0.011862, -0.010569, -0.009276, -0.007985, -0.007725, -0.006178, -0.003345, -0.000514, 0.001543, 0.002570, 0.004625, 0.006935, 0.008730, 0.009497, 0.010520, 0.012312, 0.014358, 0.016404, 0.018448, 0.021002, 0.023555, 0.025594, 0.027120, 0.028389, 0.029913, 0.031436, 0.032958, 0.033712, 0.034977, 0.036751, 0.038778, 0.040550, 0.041810, 0.043324, 0.045601, 0.047877, 0.050151, 0.052169, 0.054440, 0.056200, 0.058468, 0.059972, 0.061220, 0.062468, 0.062953, 0.063945, 0.065191, 0.066435, 0.067425, 0.068668, 0.070416, 0.071150, 0.072390, 0.073376, 0.074867, 0.076104, 0.077593, 0.078829, 0.080316, 0.081801, 0.083286, 0.084770, 0.085496, 0.086977, 0.088458, 0.090189, 0.092171, 0.093900, 0.094621, 0.096096, 0.097067, 0.098037, 0.098002, 0.098217, 0.098433, 0.098648, 0.099365, 0.100081, 0.101048, 0.101763, 0.103480, 0.104945, 0.106409, 0.107371, 0.108583, 0.109794, 0.111004, 0.111463, 0.112172, 0.112880, 0.113587, 0.113546, 0.113255, 0.113463, 0.113421, 0.113878, 0.113338, 0.113297, 0.113504, 0.113960, 0.114664, 0.114374, 0.114332, 0.114787, 0.114993, 0.115447, 0.114660, 0.114618, 0.114576, 0.114781, 0.114987, 0.114944, 0.114654, 0.114860, 0.114817, 0.114775, 0.114238, 0.113702, 0.113165, 0.112383, 0.111353, 0.110325, 0.108804, 0.107777, 0.106751, 0.105972, 0.105440, 0.104416, 0.104623, 0.104093, 0.104300, 0.104015, 0.103239, 0.102955, 0.102426, 0.101651, 0.100631, 0.099858, 0.098594, 0.097577, 0.096560, 0.095055, 0.093550, 0.092291, 0.091033, 0.089776, 0.088520, 0.087753, 0.086987, 0.086222, 0.085702, 0.084693, 0.083686, 0.082679, 0.081673, 0.080667, 0.079419, 0.078171, 0.077168, 0.076409, 0.075651, 0.074164, 0.072921, 0.072164, 0.070923, 0.069682, 0.068200, 0.066718, 0.065238, 0.063516, 0.062038, 0.060319, 0.059086, 0.057853, 0.056864, 0.055875, 0.055128, 0.054141, 0.053395, 0.052651, 0.051665, 0.050439, 0.049455, 0.048230, 0.047007, 0.045543, 0.043840, 0.042378, 0.041159, 0.039699, 0.038241, 0.036784, 0.035569, 0.034354, 0.033620, 0.032407, 0.031195, 0.030224, 0.029014, 0.028044, 0.027075, 0.025867, 0.024899, 0.023693, 0.022488, 0.021044, 0.019841, 0.018639, 0.017676, 0.016476, 0.015515, 0.014316, 0.013595, 0.012159, 0.011201, 0.009529, 0.008335, 0.006665, 0.005473, 0.004519, 0.003091, 0.001901, 0.000950, 0.000000, -0.000712, -0.001424, -0.002372, -0.003320, -0.004030, -0.004976, -0.005921, -0.006866, -0.007574, -0.008754, -0.009696, -0.010402, -0.011343, -0.012283, -0.012987, -0.013926, -0.014629, -0.015566, -0.016268, -0.016968, -0.017669, -0.018368, -0.018832, -0.019530, -0.020229, -0.020691, -0.021153, -0.022085, -0.022780, -0.023241, -0.023936, -0.024161, -0.024855, -0.025315, -0.026008, -0.026466, -0.027158, -0.027615, -0.028540, -0.028997, -0.029921, -0.030610, -0.031299, -0.031987, -0.032908, -0.033595, -0.034048, -0.034501, -0.034721, -0.035406, -0.035858, -0.036309, -0.036760, -0.036978, -0.037894, -0.038344, -0.039025, -0.039474, -0.040155, -0.040835, -0.041515, -0.041963, -0.042409, -0.042624, -0.043302, -0.043980, -0.044194, -0.044639, -0.044852, -0.045066, -0.045741, -0.045723, -0.045936, -0.046148, -0.046361, -0.046342, -0.046554, -0.046766, -0.046978, -0.046959, -0.047171, -0.047382, -0.047363, -0.047574, -0.047556, -0.047766, -0.047747, -0.048187, -0.048397, -0.048837, -0.049046, -0.049256, -0.049236, -0.049446, -0.049426, -0.049406, -0.049158, -0.048910, -0.048662, -0.048642, -0.048395, -0.048375, -0.048128, -0.048336, -0.048317, -0.048298, -0.048278, -0.048259, -0.048467, -0.048448, -0.048428, -0.048409, -0.048162, -0.048143, -0.048124, -0.047877, -0.047858, -0.047612, -0.047593, -0.047574, -0.047328, -0.047083, -0.046837, -0.046592, -0.046347, -0.046329, -0.046084, -0.045614, -0.045370, -0.044900, -0.044431, -0.044187, -0.043719, -0.043701, -0.043233, -0.042990, -0.042748, -0.042506, -0.042264, -0.042022, -0.041555, -0.041314, -0.040848, -0.040607, -0.040142, -0.039453, -0.038989, -0.038749, -0.038286, -0.038046, -0.037583, -0.037344, -0.036882, -0.036420, -0.036182, -0.035944, -0.035483, -0.035022, -0.035008, -0.034548, -0.034311, -0.034074, -0.033615, -0.033601, -0.033142, -0.032906, -0.032671, -0.032657, -0.032422, -0.032186, -0.031951, -0.031716, -0.031038, -0.030804, -0.030348, -0.029893, -0.029659, -0.029204, -0.028750, -0.028517, -0.028063, -0.027610, -0.027378, -0.027366, -0.027355, -0.026903, -0.027112, -0.027101, -0.026869, -0.026638, -0.026407, -0.026176, -0.025945, -0.025935, -0.025265, -0.025035, -0.024585, -0.024575, -0.024126, -0.023678, -0.023449, -0.023439, -0.023429, -0.023638, -0.023628, -0.023618, -0.023608, -0.023599, -0.023589, -0.023579, -0.023351, -0.023559, -0.023113, -0.023104, -0.022876, -0.022649, -0.022421, -0.021977, -0.021750, -0.021524, -0.021080, -0.020854, -0.020845, -0.020836, -0.020611, -0.020602, -0.020376, -0.020368, -0.020359, -0.020351, -0.020342, -0.020766, -0.020325, -0.020100, -0.019660, -0.019219, -0.018995, -0.018556, -0.017901, -0.017893, -0.018101, -0.018094, -0.017655, -0.015926, -0.014414, -0.014192, -0.015906, -0.016759, -0.016537, -0.016315, -0.016093, -0.017374, -0.018438, -0.017144, -0.015423, -0.014989, -0.015624, -0.016687, -0.015825, -0.013894, -0.012606, -0.013028, -0.014090, -0.014511, -0.013438, -0.012579, -0.013213, -0.013847, -0.014054, -0.013622, -0.013403, -0.013610, -0.014242, -0.014449, -0.014655, -0.014436, -0.014006, -0.013363, -0.012509, -0.012080, -0.012075, -0.011646, -0.010795, -0.010367, -0.010151, -0.010146, -0.009719, -0.009082, -0.008655, -0.008019, -0.007804, -0.007168, -0.006322, -0.005898, -0.005053, -0.004841, -0.004628, -0.004626, -0.004835, -0.005043, -0.005040, -0.004828, -0.004826, -0.004195, -0.003983, -0.002934, -0.001885, -0.001047, 0.000000, 0.000418, 0.001464, 0.002299, 0.002925, 0.002924, 0.003131, 0.003338, 0.003963, 0.004169, 0.004167, 0.004166, 0.003956, 0.003746, 0.003536, 0.003119, 0.002702, 0.002701, 0.002699, 0.002491, 0.002489, 0.002903, 0.003316, 0.003729, 0.003728, 0.003933, 0.004552, 0.004964, 0.005168, 0.005373, 0.005577, 0.005368, 0.005778, 0.005569, 0.005361, 0.004946, 0.004944, 0.004736, 0.004734, 0.004526, 0.004730, 0.004933, 0.004931, 0.005134, 0.005542, 0.006566, 0.007178, 0.007790, 0.008606, 0.009216, 0.009826, 0.010231, 0.010636, 0.011040, 0.011444, 0.011643, 0.012046, 0.012449, 0.013055, 0.013661, 0.014063, 0.014464, 0.015068, 0.015265, 0.015665, 0.016065, 0.016464, 0.016863, 0.017058, 0.017863, 0.018260, 0.018860, 0.019257, 0.019451, 0.019848, 0.020244, 0.020437, 0.020630, 0.020620, 0.020813, 0.021006, 0.021198, 0.020987, 0.021179, 0.021169, 0.020958, 0.020949, 0.020939, 0.020729, 0.020920, 0.020710, 0.020700, 0.021093, 0.021284, 0.021676, 0.021666, 0.021856, 0.021646, 0.022237, 0.022227, 0.022417, 0.022207, 0.022197, 0.021787, 0.021777, 0.022166, 0.022156, 0.022146, 0.022335, 0.022724, 0.022713, 0.023101, 0.023091, 0.023279, 0.023467, 0.023655, 0.024042, 0.024229, 0.024417, 0.024405, 0.024791, 0.024779, 0.024768, 0.024757, 0.024745, 0.024734, 0.024722, 0.024513, 0.024502, 0.024491, 0.024677, 0.024863, 0.024851, 0.024840, 0.024828, 0.024620, 0.024411, 0.024203, 0.024192, 0.023984, 0.023973, 0.023962, 0.023754, 0.023940, 0.024125, 0.023917, 0.023906, 0.023699, 0.023492, 0.023090, 0.022884, 0.022482, 0.022276, 0.021875, 0.021670, 0.021464, 0.021454, 0.021249, 0.021239, 0.021229, 0.021025, 0.021015, 0.020811, 0.020606, 0.020597, 0.020587, 0.020966, 0.020956, 0.021334, 0.021324, 0.021701, 0.021497, 0.021487, 0.021477, 0.021467, 0.021650, 0.021447, 0.021436, 0.021619, 0.021609, 0.021599, 0.021589, 0.021386, 0.021568, 0.021943, 0.021933, 0.021730, 0.021912, 0.021709, 0.021891, 0.021881, 0.021870, 0.022051, 0.022041, 0.022414, 0.022020, 0.022009, 0.021616, 0.021415, 0.021022, 0.020821, 0.020620, 0.020229, 0.020219, 0.020019, 0.020009, 0.019809, 0.019800, 0.019981, 0.019781, 0.019771, 0.019762, 0.019562, 0.019553, 0.019354, 0.019155, 0.019146, 0.019136, 0.019127, 0.018929, 0.019109, 0.018910, 0.018712, 0.018514, 0.018505, 0.018308, 0.018487, 0.018290, 0.018281, 0.018272, 0.018452, 0.018255, 0.018246, 0.018237, 0.018228, 0.017843, 0.017835, 0.017826, 0.017817, 0.017809, 0.017613, 0.017230, 0.017034, 0.017026, 0.016643, 0.016448, 0.016253, 0.016059, 0.015678, 0.015483, 0.015103, 0.014723, 0.014529, 0.014150, 0.014143, 0.013764, 0.013385, 0.013193, 0.012815, 0.012623, 0.012246, 0.012054, 0.011678, 0.011301, 0.010925, 0.010550, 0.010360, 0.009985, 0.009610, 0.009421, 0.009047, 0.008673, 0.008300, 0.008112, 0.007739, 0.007735, 0.007547, 0.007176, 0.006988, 0.006801, 0.006614, 0.006243, 0.006057, 0.005870, 0.005684, 0.005498, 0.005312, 0.005126, 0.004941, 0.004755, 0.004570, 0.004568, 0.004200, 0.004016, 0.003831, 0.003465, 0.003463, 0.003279, 0.003095, 0.002912, 0.002546, 0.002363, 0.002180, 0.001816, 0.001634, 0.001633, 0.001269, 0.001088, 0.000906, 0.000724, 0.000543, 0.000543, 0.000181, 0.000000, -0.000181, -0.000361, -0.000541, -0.000721, -0.000901, -0.001081, -0.001441, -0.001800, -0.001799, -0.002157, -0.002336, -0.002694, -0.002693, -0.003050, -0.003049, -0.003406, -0.003583, -0.003760, -0.003937, -0.004293, -0.004291, -0.004289, -0.004644, -0.004820, -0.004996, -0.004993, -0.005169, -0.005344, -0.005342, -0.005517, -0.005692, -0.005867, -0.005864, -0.005861, -0.006035, -0.006032, -0.006029, -0.006026, -0.005846, -0.006020, -0.006017, -0.006014, -0.006010, -0.006007, -0.005828, -0.005825, -0.005998, -0.005995, -0.005992, -0.005989, -0.005810, -0.005982, -0.005804, -0.005976, -0.005797, -0.005970, -0.005967, -0.005964, -0.005961, -0.005958, -0.005779, -0.006126, -0.005773, -0.006120, -0.005942, -0.005939, -0.005936, -0.005933, -0.005930, -0.005927, -0.005749, -0.005746, -0.005743, -0.005566, -0.005737, -0.005560, -0.005558, -0.005555, -0.005552, -0.005375, -0.005546, -0.005716, -0.005713, -0.005710, -0.005534, -0.005358, -0.005183, -0.005007, -0.005005, -0.005002, -0.004655, -0.004480, -0.004133, -0.003959, -0.003957, -0.003783, -0.003437, -0.003607, -0.003090, -0.003088, -0.002915, -0.002742, -0.002569, -0.002568, -0.002567, -0.002223, -0.002222, -0.002050, -0.001878, -0.001536, -0.001706, -0.001534, -0.001363, -0.001192, -0.001021, -0.000851, -0.000680, -0.000340, -0.000340, -0.000170, -0.000339, -0.000170, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.000169, 0.000000, 0.000000, 0.000000, 0.000000, -0.000168, -0.000336, -0.000336, -0.000336, -0.000504, -0.000671, -0.000671, -0.001006, -0.001005, -0.001340, -0.001339, -0.001338, -0.001505, -0.001504, -0.001670, -0.001669, -0.002002, -0.002168, -0.002000, -0.002165, -0.002330, -0.002329, -0.002328, -0.002327, -0.002325, -0.002324, -0.002323, -0.002321, -0.002154, -0.002153, -0.001987, -0.001985, -0.001984, -0.001818, -0.001817, -0.001816, -0.001650, -0.001649, -0.001648, -0.001812, -0.001811, -0.001810, -0.002138, -0.002301, -0.002300, -0.002627, -0.002625, -0.002952, -0.003114, -0.003112, -0.003274, -0.003436, -0.003598, -0.003759, -0.003921, -0.003918, -0.004079, -0.004240, -0.004075, -0.004235, -0.004396, -0.004393, -0.004553, -0.004551, -0.004873, -0.004870, -0.005030, -0.005352, -0.005511, -0.005993, -0.006152, -0.006472, -0.006954, -0.006950, -0.007430, -0.007588, -0.007906, -0.008224, -0.008542, -0.008859, -0.009176, -0.009332, -0.009326, -0.009482, -0.009637, -0.009952, -0.010107, -0.010101, -0.010256, -0.010250, -0.010244, -0.010398, -0.010552, -0.010387, -0.010381, -0.010534, -0.010369, -0.010522, -0.010357, -0.010510, -0.010504, -0.010498, -0.010492, -0.010486, -0.010480, -0.010474, -0.010468, -0.010303, -0.010456, -0.010292, -0.010286, -0.010122, -0.009958, -0.009952, -0.009788, -0.009625, -0.009619, -0.009456, -0.009293, -0.009130, -0.009125, -0.009120, -0.008957, -0.008795, -0.008790, -0.008785, -0.008780, -0.008931, -0.009083, -0.009077, -0.009228, -0.009223, -0.009530, -0.009368, -0.009363, -0.009202, -0.009196, -0.009035, -0.008874, -0.008558, -0.008397, -0.008392, -0.008077, -0.008072, -0.007912, -0.007597, -0.007438, -0.007279, -0.007119, -0.006961, -0.006647, -0.006334, -0.006331, -0.006173, -0.005860, -0.005857, -0.005700, -0.005542, -0.005539, -0.005382, -0.005379, -0.005375, -0.005526, -0.005522, -0.005519, -0.005669, -0.005666, -0.005662, -0.005965, -0.006114, -0.006110, -0.006107, -0.006256, -0.006252, -0.006401, -0.006397, -0.006545, -0.006389, -0.006689, -0.006837, -0.006681, -0.006677, -0.006673, -0.006669, -0.006665, -0.006510, -0.006657, -0.006502, -0.006649, -0.006494, -0.006490, -0.006335, -0.006181, -0.006328, -0.006324, -0.006320, -0.006467, -0.006312, -0.006309, -0.006455, -0.006301, -0.006297, -0.006293, -0.006289, -0.006286, -0.006132, -0.005979, -0.005975, -0.005673, -0.005819, -0.005517, -0.005514, -0.005212, -0.005060, -0.005057, -0.005054, -0.004754, -0.004751, -0.004748, -0.004745, -0.004594, -0.004591, -0.004292, -0.004438, -0.004287, -0.004137, -0.004134, -0.003836, -0.003687, -0.003684, -0.003535, -0.003385, -0.003089, -0.003087, -0.002791, -0.002790, -0.002641, -0.002640, -0.002491, -0.002490, -0.002635, -0.002779, -0.002778, -0.002776, -0.003066, -0.002918, -0.003062, -0.003060, -0.003058, -0.003057, -0.003055, -0.003053, -0.002905, -0.002613, -0.002612, -0.002610, -0.002319, -0.002462, -0.002460, -0.002314, -0.002313, -0.002167, -0.002165, -0.002164, -0.002163, -0.002161, -0.002160, -0.002159, -0.002013, -0.001868, -0.001724, -0.001722, -0.001578, -0.001434, -0.001289, -0.001289, -0.001431, -0.001287, -0.001429, -0.001285, -0.001570, -0.001426, -0.001425, -0.001424, -0.001566, -0.001565, -0.001706, -0.001847, -0.001988, -0.001987, -0.002127, -0.001984, -0.001983, -0.001840, -0.001839, -0.001555, -0.001554, -0.001412, -0.001411, -0.001269, -0.001127, -0.000986, -0.000844, -0.000984, -0.000703, -0.000702, -0.000702, -0.000701, -0.000841, -0.000700, -0.001120, -0.000979, -0.000979, -0.000978, -0.000977, -0.000977, -0.000837, -0.000697, -0.000557, -0.000557, -0.000556, -0.000417, -0.000278, -0.000416, -0.000277, -0.000277, -0.000277, -0.000277, -0.000277, -0.000276, -0.000276, -0.000276, -0.000276, -0.000276, -0.000276, -0.000138, -0.000275, -0.000413, -0.000687, -0.000687, -0.000823, -0.001234, -0.001508, -0.001644, -0.001916, -0.002325, -0.002324, -0.002595, -0.002867, -0.003138, -0.003544, -0.003815, -0.004084, -0.004218, -0.004487, -0.004620, -0.004888, -0.005020, -0.005424, -0.005691, -0.005823, -0.006225, -0.006626, -0.006757, -0.007023, -0.007288, -0.007418, -0.007413, -0.007542, -0.007537, -0.007532, -0.007392, -0.007387, -0.007248, -0.007243, -0.007104, -0.006966, -0.006693, -0.006287, -0.006016, -0.005611, -0.005473, -0.005203, -0.005066, -0.005062, -0.004793, -0.004789, -0.005052, -0.005181, -0.005576, -0.005705, -0.006099, -0.006227, -0.006355, -0.006615, -0.006875, -0.007135, -0.007130, -0.007257, -0.007384, -0.007379, -0.007505, -0.007500, -0.007495, -0.007621, -0.007747, -0.007873, -0.007867, -0.007731, -0.007594, -0.007720, -0.007976, -0.008101, -0.008357, -0.008612, -0.008736, -0.008860, -0.009115, -0.009368, -0.009362, -0.009615, -0.009868, -0.009991, -0.010243, -0.010495, -0.010747, -0.010998, -0.010861, -0.010982, -0.011104, -0.011354, -0.011475, -0.011853, -0.012231, -0.012608, -0.013114, -0.013361, -0.013737, -0.014112, -0.014358, -0.014604, -0.014722, -0.014967, -0.015084, -0.015201, -0.015318, -0.015562, -0.015551, -0.015667, -0.015784, -0.015772, -0.015634, -0.015750, -0.015484, -0.015346, -0.015209, -0.015071, -0.014934, -0.015049, -0.014912, -0.014901, -0.015143, -0.015258, -0.015373, -0.015488, -0.015854, -0.015968, -0.016082, -0.016196, -0.016059, -0.016173, -0.016161, -0.016274, -0.016262, -0.016376, -0.016114, -0.016102, -0.016090, -0.016078, -0.015942, -0.016179, -0.016167, -0.016156, -0.016392, -0.016504, -0.016616, -0.016728, -0.016715, -0.016703, -0.016691, -0.016555, -0.016543, -0.016407, -0.016148, -0.016013, -0.015755, -0.015497, -0.015486, -0.015352, -0.015340, -0.015206, -0.015195, -0.015306, -0.015294, -0.015405, -0.015394, -0.015504, -0.015493, -0.015481, -0.015470, -0.015458, -0.015446, -0.015313, -0.015545, -0.015654, -0.015521, -0.015510, -0.015498, -0.015365, -0.015354, -0.015342, -0.015210, -0.015198, -0.015187, -0.015296, -0.015284, -0.015513, -0.015381, -0.015489, -0.015358, -0.015346, -0.015454, -0.015562, -0.015670, -0.015777, -0.015765, -0.015753, -0.015741, -0.015610, -0.015717, -0.015824, -0.015812, -0.015919, -0.016025, -0.016013, -0.016000, -0.016225, -0.016212, -0.016318, -0.016305, -0.016411, -0.016398, -0.016503, -0.016491, -0.016478, -0.016700, -0.016687, -0.016792, -0.016779, -0.016766, -0.016635, -0.016623, -0.016493, -0.016480, -0.016350, -0.016337, -0.016208, -0.015962, -0.015717, -0.015704, -0.015576, -0.015448, -0.015551, -0.015423, -0.015411, -0.015399, -0.015503, -0.015375, -0.015247, -0.015120, -0.015108, -0.014980, -0.014853, -0.014611, -0.014485, -0.014473, -0.014232, -0.014106, -0.013866, -0.013626, -0.013615, -0.013261, -0.013251, -0.012898, -0.012773, -0.012421, -0.012183, -0.012060, -0.011709, -0.011473, -0.011236, -0.011114, -0.010992, -0.010756, -0.010748, -0.010400, -0.010504, -0.010157, -0.010036, -0.009803, -0.009682, -0.009450, -0.009217, -0.009097, -0.008753, -0.008522, -0.008291, -0.007948, -0.007830, -0.007488, -0.007259, -0.006918, -0.006801, -0.006573, -0.006233, -0.006117, -0.005778, -0.005552, -0.005325, -0.005099, -0.004763, -0.004537, -0.004312, -0.004088, -0.003974, -0.003640, -0.003417, -0.003083, -0.002861, -0.002639, -0.002307, -0.002195, -0.001974, -0.001644, -0.001533, -0.001203, -0.000984, -0.000874, -0.000655, -0.000545, -0.000327, -0.000109, 0.000000, 0.000000, 0.000217, 0.000217, 0.000325, 0.000433, 0.000541, 0.000541, 0.000648, 0.000756, 0.000755, 0.000862, 0.000861, 0.001076, 0.001075, 0.001074, 0.001287, 0.001286, 0.001285, 0.001391, 0.001497, 0.001389, 0.001601, 0.001600, 0.001705, 0.001597, 0.001915, 0.001807, 0.002018, 0.001910, 0.002120, 0.002118, 0.002222, 0.002220, 0.002324, 0.002322, 0.002426, 0.002424, 0.002527, 0.002630, 0.002733, 0.002730, 0.002938, 0.002935, 0.003037, 0.003139, 0.003241, 0.003343, 0.003340, 0.003441, 0.003542, 0.003643, 0.003640, 0.003845, 0.003841, 0.003838, 0.003938, 0.003935, 0.004035, 0.004135, 0.004028, 0.004127, 0.004227, 0.004223, 0.004219, 0.004215, 0.004314, 0.004413, 0.004307, 0.004303, 0.004401, 0.004398, 0.004394, 0.004492, 0.004386, 0.004586, 0.004480, 0.004476, 0.004472, 0.004468, 0.004565, 0.004460, 0.004557, 0.004452, 0.004448, 0.004545, 0.004540, 0.004637, 0.004532, 0.004629, 0.004524, 0.004620, 0.004616, 0.004612, 0.004708, 0.004704, 0.004599, 0.004695, 0.004791, 0.004686, 0.004682, 0.004678, 0.004773, 0.004769, 0.004863, 0.004859, 0.004855, 0.004850, 0.004846, 0.004742, 0.004738, 0.004734, 0.004729, 0.004823, 0.004622, 0.004716, 0.004712, 0.004707, 0.004605, 0.004698, 0.004498, 0.004494, 0.004490, 0.004388, 0.004482, 0.004380, 0.004473, 0.004469, 0.004562, 0.004461, 0.004360, 0.004356, 0.004351, 0.004347, 0.004343, 0.004339, 0.004335, 0.004331, 0.004231, 0.004227, 0.004127, 0.004123, 0.004023, 0.004019, 0.003920, 0.003916, 0.003817, 0.003718, 0.003714, 0.003520, 0.003517, 0.003419, 0.003415, 0.003317, 0.003125, 0.003216, 0.003024, 0.003021, 0.002924, 0.002921, 0.002918, 0.002727, 0.002631, 0.002628, 0.002532, 0.002436, 0.002527, 0.002431, 0.002335, 0.002333, 0.002237, 0.002235, 0.002140, 0.002138, 0.002043, 0.001948, 0.001854, 0.001852, 0.001757, 0.001663, 0.001477, 0.001476, 0.001382, 0.001197, 0.001103, 0.001102, 0.000918, 0.000825, 0.000733, 0.000640, 0.000548, 0.000457, 0.000365, 0.000273, 0.000273, 0.000182, 0.000091, 0.000091, 0.000000, 0.000091, 0.000000, -0.000090, -0.000181, -0.000090, -0.000270, -0.000270, -0.000270, -0.000359, -0.000359, -0.000448, -0.000448, -0.000447, -0.000536, -0.000536, -0.000624, -0.000624, -0.000712, -0.000711, -0.000711, -0.000888, -0.000887, -0.000974, -0.000973, -0.001061, -0.001060, -0.001147, -0.001145, -0.001232, -0.001143, -0.001230, -0.001228, -0.001227, -0.001226, -0.001312, -0.001311, -0.001309, -0.001308, -0.001307, -0.001305, -0.001391, -0.001389, -0.001388, -0.001386, -0.001385, -0.001470, -0.001382, -0.001381, -0.001293, -0.001292, -0.001376, -0.001289, -0.001373, -0.001286, -0.001199, -0.001283, -0.001282, -0.001281, -0.001279, -0.001193, -0.001277, -0.001190, -0.001274, -0.001272, -0.001271, -0.001270, -0.001268, -0.001182, -0.001266, -0.001264, -0.001347, -0.001346, -0.001344, -0.001343, -0.001341, -0.001423, -0.001422, -0.001420, -0.001502, -0.001501, -0.001582, -0.001580, -0.001579, -0.001660, -0.001741, -0.001739, -0.001655, -0.001735, -0.001733, -0.001732, -0.001730, -0.001728, -0.001808, -0.001806, -0.001722, -0.001720, -0.001636, -0.001716, -0.001633, -0.001631, -0.001548, -0.001546, -0.001544, -0.001461, -0.001460, -0.001377, -0.001456, -0.001293, -0.001372, -0.001290, -0.001289, -0.001207, -0.001205, -0.001204, -0.001122, -0.001121, -0.001120, -0.001039, -0.000958, -0.000957, -0.000955, -0.000875, -0.000874, -0.000873, -0.000793, -0.000712, -0.000712, -0.000711, -0.000631, -0.000552, -0.000472, -0.000393, -0.000393, -0.000314, -0.000313, -0.000235, -0.000156, -0.000156, -0.000156, -0.000078, -0.000078, 0.000000, 0.000000, 0.000000, 0.000000, 0.000077, 0.000077, 0.000154, 0.000154, 0.000308, 0.000231, 0.000461, 0.000384, 0.000536, 0.000536, 0.000764, 0.000687, 0.000839, 0.000838, 0.000913, 0.000988, 0.001062, 0.001137, 0.001060, 0.001134, 0.001208, 0.001207, 0.001281, 0.001279, 0.001353, 0.001351, 0.001424, 0.001423, 0.001496, 0.001494, 0.001567, 0.001490, 0.001488, 0.001561, 0.001559, 0.001557, 0.001555, 0.001627, 0.001699, 0.001697, 0.001695, 0.001766, 0.001764, 0.001835, 0.001833, 0.001758, 0.001828, 0.001826, 0.001897, 0.001895, 0.001892, 0.001962, 0.001960, 0.001958, 0.002027, 0.002025, 0.002095, 0.002092, 0.002161, 0.002159, 0.002156, 0.002153, 0.002222, 0.002219, 0.002216, 0.002285, 0.002211, 0.002279, 0.002276, 0.002344, 0.002341, 0.002338, 0.002335, 0.002403, 0.002400, 0.002467, 0.002464, 0.002461, 0.002528, 0.002525, 0.002591, 0.002588, 0.002585, 0.002721, 0.002717, 0.002783, 0.002779, 0.002776, 0.002841, 0.002907, 0.002972, 0.002968, 0.003033, 0.003029, 0.003025, 0.003090, 0.003154, 0.003150, 0.003214, 0.003210, 0.003138, 0.003133, 0.003061, 0.003193, 0.003121, 0.003049, 0.003045, 0.003041, 0.003037, 0.003032, 0.002961, 0.002890, 0.002886, 0.002882, 0.002811, 0.002807, 0.002737, 0.002733, 0.002796, 0.002725, 0.002655, 0.002652, 0.002648, 0.002578, 0.002575, 0.002571, 0.002568, 0.002564, 0.002560, 0.002557, 0.002488, 0.002484, 0.002546, 0.002477, 0.002539, 0.002536, 0.002532, 0.002528, 0.002525, 0.002521, 0.002582, 0.002514, 0.002575, 0.002507, 0.002503, 0.002500, 0.002496, 0.002493, 0.002489, 0.002422, 0.002418, 0.002479, 0.002412, 0.002408, 0.002405, 0.002401, 0.002398, 0.002394, 0.002391, 0.002262, 0.002196, 0.002130, 0.002064, 0.001999, 0.001996, 0.001993, 0.001928, 0.001863, 0.001860, 0.001795, 0.001793, 0.001852, 0.001849, 0.001785, 0.001844, 0.001779, 0.001838, 0.001774, 0.001894, 0.002013, 0.002314, 0.002615, 0.003097, 0.003456, 0.003511, 0.003204, 0.002837, 0.002290, 0.001865, 0.001622, 0.001380, 0.000958, 0.000598, 0.000358, 0.000596, 0.001250, 0.001902, 0.002552, 0.002667, 0.002426, 0.001950, 0.001593, 0.001355, 0.001411, 0.001527, 0.001700, 0.001814, 0.001928, 0.001925, 0.002155, 0.002676, 0.003368, 0.003769, 0.003937, 0.003584, 0.003174, 0.002766, 0.002704, 0.002872, 0.003154, 0.003378, 0.003487, 0.003481, 0.003248, 0.002844, 0.002272, 0.001644, 0.001076, 0.000678, 0.000621, 0.001014, 0.001519, 0.002078, 0.002579, 0.002855, 0.003018, 0.003013, 0.003008, 0.002947, 0.002831, 0.002716, 0.002601, 0.002375, 0.002261, 0.002368, 0.002803, 0.003567, 0.004219, 0.004758, 0.004696, 0.004197, 0.003374, 0.002716, 0.002115, 0.001787, 0.001676, 0.001727, 0.001939, 0.002205, 0.002470, 0.002573, 0.002515, 0.002457, 0.002506, 0.002555, 0.002657, 0.002546, 0.002436, 0.002273, 0.002428, 0.002687, 0.003050, 0.003465, 0.003721, 0.003872, 0.003813, 0.003545, 0.003071, 0.002650, 0.002438, 0.002433, 0.002687, 0.003044, 0.003296, 0.003444, 0.003438, 0.003227, 0.002966, 0.002654, 0.002242, 0.001933, 0.001675, 0.001520, 0.001518, 0.001464, 0.001663, 0.001761, 0.002109, 0.002406, 0.002652, 0.002647, 0.002443, 0.002090, 0.001788, 0.001537, 0.001336, 0.001433, 0.001430, 0.001673, 0.001916, 0.002108, 0.002251, 0.002198, 0.001999, 0.001849, 0.001652, 0.001552, 0.001403, 0.001401, 0.001350, 0.001395, 0.001489, 0.001630, 0.001722, 0.001671, 0.001668, 0.001475, 0.001377, 0.001185, 0.001088, 0.000897, 0.000801, 0.000752, 0.000892, 0.001031, 0.001169, 0.001166, 0.001071, 0.000930, 0.000789, 0.000694, 0.000508, 0.000415, 0.000368, 0.000413, 0.000596, 0.000823, 0.000959, 0.001094, 0.001182, 0.001225, 0.001223, 0.001130, 0.001037, 0.000810, 0.000719, 0.000628, 0.000626, 0.000714, 0.000847, 0.001023, 0.001198, 0.001329, 0.001326, 0.001103, 0.000792, 0.000439, 0.000131, -0.000087, -0.000175, -0.000305, -0.000391, -0.000390, -0.000216, 0.000000, 0.000388, 0.000688, 0.000815, 0.000771, 0.000598, 0.000341, 0.000255, 0.000297, 0.000381, 0.000550, 0.000591, 0.000547, 0.000420, 0.000419, 0.000502, 0.000709, 0.000791, 0.000748, 0.000497, 0.000207, -0.000083, -0.000165, -0.000123, 0.000000, 0.000082, 0.000163, 0.000122, 0.000000, -0.000081, -0.000243, -0.000363, -0.000443, -0.000402, -0.000361, -0.000280, -0.000120, 0.000000, 0.000159, 0.000238, 0.000316, 0.000316, 0.000275, 0.000275, 0.000157, 0.000039, -0.000117, -0.000233, -0.000349, -0.000271, -0.000154, 0.000000, 0.000192, 0.000230, 0.000153, 0.000000, -0.000190, -0.000418, -0.000531, -0.000567, -0.000528, -0.000451, -0.000413, -0.000299, -0.000299, -0.000261, -0.000149, -0.000111, 0.000000, 0.000000, -0.000037, -0.000147, -0.000256, -0.000402, -0.000364, -0.000291, -0.000218, -0.000108, -0.000036, -0.000072, -0.000144, -0.000251, -0.000393, -0.000499, -0.000497, -0.000461, -0.000424, -0.000317, -0.000281, -0.000245, -0.000210, -0.000174, -0.000209, -0.000243, -0.000311, -0.000345, -0.000482, -0.000515, -0.000582, -0.000615, -0.000545, -0.000476, -0.000407, -0.000304, -0.000270, -0.000302, -0.000369, -0.000468, -0.000567, -0.000665, -0.000630, -0.000661, -0.000593, -0.000625, -0.000557, -0.000490, -0.000456, -0.000455, -0.000421, -0.000420, -0.000483, -0.000514, -0.000577, -0.000607, -0.000637, -0.000540, -0.000539, -0.000505, -0.000473, -0.000471, -0.000438, -0.000500, -0.000560, -0.000559, -0.000619, -0.000648, -0.000646, -0.000614, -0.000551, -0.000518, -0.000456, -0.000455, -0.000393, -0.000331, -0.000300, -0.000270, -0.000299, -0.000298, -0.000267, -0.000266, -0.000206, -0.000118, -0.000029, 0.000058, 0.000117, 0.000174, 0.000174, 0.000173, 0.000115, 0.000029, -0.000029, -0.000028, -0.000028, 0.000000, 0.000000, }; #endif /* _MONEY_H_ */ lmms-1.1.3/plugins/LadspaEffect/cmt/000077500000000000000000000000001247673406200172645ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/cmt/CMakeLists.txt000066400000000000000000000013171247673406200220260ustar00rootroot00000000000000INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") FILE(GLOB_RECURSE SOURCES src/*.cpp) ADD_LIBRARY(cmt MODULE ${SOURCES}) INSTALL(TARGETS cmt LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") SET_TARGET_PROPERTIES(cmt PROPERTIES PREFIX "") SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "-Wall -O3 -fno-strict-aliasing") IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET cmt POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/cmt.dll\"") ELSE(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -fPIC") ENDIF(LMMS_BUILD_WIN32) IF(NOT LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES(cmt PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") ENDIF(NOT LMMS_BUILD_APPLE) lmms-1.1.3/plugins/LadspaEffect/cmt/README000066400000000000000000000005201247673406200201410ustar00rootroot00000000000000Computer Music Toolkit (CMT) ---------------------------- This toolkit is a set of musical sound processing and synthesis tools presented as a LADSPA plugin library. See the doc/ directory for documentation and installation instructions. See http://www.ladspa.org for LADSPA information. See http://www.ladspa.org/cmt for CMT updates. lmms-1.1.3/plugins/LadspaEffect/cmt/doc/000077500000000000000000000000001247673406200200315ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/cmt/doc/COPYING000066400000000000000000000431051247673406200210670ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. lmms-1.1.3/plugins/LadspaEffect/cmt/doc/adding_plugins.html000066400000000000000000000052141247673406200237100ustar00rootroot00000000000000

Adding Plugins to the CMT Library

The CMT LADSPA plugin collection is written in C++ and uses a little additional sophistication to make plugin writing easier. This document describes how to add a new plugin to the toolkit.

At the moment CMT is not under public version control, so please send changes to Richard Furse.

CMT plugins interpret LADSPA_Handle entities as pointers to objects derived from the CMT_PluginInstance class. Plugin instance structures are defined by subclassing this, so writing a descendent of CMT_PluginInstance is the first thing to do. The CMT library provides its own implementation of connect_port(), cleanup() and a templated form of instantiate() (see CMT_Instantiate<>()). These calls assume that any instantiation or cleanup mechanisms required will be written in the constructor or destructor of the class.

When writing a plugin module, an initialisation function should be included. To ensure this is called, add a call to the initialise_modules() function in descriptor.cpp. The module should also be added to the makefile.

Your initialisation function should construct new CMT_Desctiptor plugin descriptor structures and pass them to registerNewPluginDescriptor(). The CMT_Descriptor is directly descended from LADSPA_Descriptor but provides constructor, destructor and addPort() methods.

All plugins need unique IDs. During development, use values between 1 and 1000. When the plugin is ready, please request an ID from ladspa@muse.demon.co.uk. Please also add a brief description of your module to plugins.html.

In practice, CMT plugin writing is probably best learned by example. For a simple case, see the mixer.cpp module. This defines a SimpleMixer class to handle instance data, a runSimpleMixer() function for use with it and a mixer_descriptor() function to provide a description of the plugin to the CMT core. The mixer_descriptor() function is declared and referenced in the descriptor.cpp module. Additional information is available in cmt.h and ladspa.h.

CMT plugins are licenced under GPL version 2. Please read and understand this license before submitting plugins to the library.

lmms-1.1.3/plugins/LadspaEffect/cmt/doc/bugs.html000066400000000000000000000011011247673406200216500ustar00rootroot00000000000000

CMT Bugs

Please report bugs to richard@muse.demon.co.uk.

  • I'm not sure I've got attack & decay the right way around in the expander plugins.
  • Need to have a look at dynamic.cpp for handling of unusual arithmetic situation such as isnan(), isinf() etc.
  • Memory management is a little haphazard at present. What happens when new() fails? The host can use set_new_handler(), but I suspect this needs further thought anyway.
lmms-1.1.3/plugins/LadspaEffect/cmt/doc/changes.html000066400000000000000000000055411247673406200223340ustar00rootroot00000000000000

CMT Changes

Version 1.01 - 4 May 2000

  • Initial Release.

Version 1.02 - 11 May 2000

  • Use _init() and _fini(). To handle memory management automatically.
  • Change from *_descriptor() approach simpler initialise_*() approach. Use _init() and _fini() to handle memory management. Supply CMT_Descriptor::~CMT_Descriptor().
  • Make comments compatible with Doxygen.
  • Addition of Ambisonic encoder, decoder, converter and rotation plugins.
  • Addition of Sine Waveshaper and Granular Scatter Processor plugin.

Version 1.03 - 14 May 2000

  • Updated to correspond to http://www.ladspa.org/.

Version 1.04 - 18 May 2000

  • Bugfixes: Ambisonic encoder inputs, white noise amplitude/DC, Ambisonic rotation inplace support, sine oscillator frequency input inplace support.

Version 1.05 - 18 May 2000

  • Bugfix: use explicit pointer type when deleting ImplementationData in ~CMT_Descriptor.

Version 1.06 - 24 Sep 2000

  • Introduction of Identity plugins.

Version 1.07 - 30 Sep 2000

  • Use constructor/destructor rather than _fini() and _init(). Use C++ for linkage.

Version 1.08 - 30 Sep 2000

  • Fix to Ambisonic decode equations.

Version 1.09 - 4 Nov 2000

  • Addition of a port of Freeverb (version 3) and a collection of plugins by David Bartold (analogue, canyon_delay, organ, syndrum, vcf303).

Version 1.10 - 17 Feb 2001

  • Small compile fixes to some modules. Apologies to David who sent me a patch ages ago for the analogue module.

Version 1.11 - 8 May 2001

  • Addition of newline character to end of allpass.h.

Version 1.12 - 17 Sept 2001

  • Addition of new plugins by David: "Lo Fi" and "Phase Modulated Voice."

Version 1.13 - 7 May 2002

  • Fix to B-Format rotation algorithm.

Version 1.14 - 7 Aug 2002

  • Fix to B-Format rotation algorithm.
  • Update for LADSPA 1.1 (include default values).

Version 1.15 - 19 Dec 2002

  • Addition of a number of utility routines and namespaces by Nathaniel Virgo.
  • Addition of a number of plugins by Nathaniel Virgo.
  • Small change to trigger mechanism in syndrum plugin.

Version 1.16 - 6 Nov 2007

  • Remove -Werror from compile options in makefile.
  • Remove "local" part from install directories.
  • Small additional changes to makefile for robustness.
  • Replace strdup() with localStrdup() to avoid malloc/new mismatch.
lmms-1.1.3/plugins/LadspaEffect/cmt/doc/index.html000066400000000000000000000014011247673406200220220ustar00rootroot00000000000000

CMT Index

Other Links

Richard Furse can be emailed as richard@muse.demon.co.uk.

lmms-1.1.3/plugins/LadspaEffect/cmt/doc/installation.html000066400000000000000000000016261247673406200234250ustar00rootroot00000000000000

CMT Installation

To build the plugin library, enter the src/ directory and run make. The makefile expects to find the ladspa.h header file in your include path or /usr/local/include/. If you do not have this file it can be downloaded as part of the LADSPA SDK from http://www.ladspa.org/download/.

Running make will generate the CMT LADSPA plugin library (cmt.so) in the plugins/ directory. This can be moved to an appropriate location depending on the application you are using. Running make install from the src/ directory as root will install to /usr/local/lib/ladspa/ which is on the search path recommended for hosts looking for plugin libraries. Some applications may not search this directory automatically.

lmms-1.1.3/plugins/LadspaEffect/cmt/doc/license.html000066400000000000000000000012511247673406200223400ustar00rootroot00000000000000

CMT License

The CMT toolkit is licensed under GPL version 2.

As I understand it (I'm not a lawyer) this means that, once built, the CMT library may be used with non-GPL'd applications as long as it is built and loaded using the standard LADSPA dynamic-linking approach without modification. In my opinion this is a good thing for the toolkit, if not for the GPL.

The above may not be correct when built against the LGPL version of the ladpsa.h header file, but it is certainly the way we would like things to be. See the LADPSA license for further details.

lmms-1.1.3/plugins/LadspaEffect/cmt/doc/overview.html000066400000000000000000000012361247673406200225670ustar00rootroot00000000000000

Computer Music Toolkit (CMT) v1.16 Overview

The Computer Music Toolkit (CMT) is a collection of LADSPA plugins for use with software synthesis and recording packages on Linux. See the license before use.

The CMT was initially designed and developed by Richard W.E. Furse (who was also the principal designer of the LADSPA standard) and further plugins have been provided by by Jezar, David Bartold and Nathaniel Virgo. If you are a programmer or can write documentation and would like to help out, please feel free to contact Richard.

lmms-1.1.3/plugins/LadspaEffect/cmt/doc/plugins.html000066400000000000000000000247441247673406200224130ustar00rootroot00000000000000

CMT Library Plugins

The following plugins are provided in the CMT library:

Plugin ID Plugin Label Description
1051 lpf Low Pass Filter (One Pole).
1052 hpf High Pass Filter (One Pole).
1053 delay_0.01s Echo Delay Line. The delay time may be varied up to 0.01 seconds. No feedback is provided.
1054 delay_0.1s Echo Delay Line. The delay time may be varied up to 0.1 seconds. No feedback is provided.
1055 delay_1s Echo Delay Line. The delay time may be varied up to 1 second. No feedback is provided.
1056 delay_5s Echo Delay Line. The delay time may be varied up to 5 seconds. No feedback is provided.
1057 delay_60s Echo Delay Line. The delay time may be varied up to 60 seconds. No feedback is provided.
1058 fbdelay_0.01s Feedback Delay Line. The delay time may be varied up to 0.01 seconds.
1059 fbdelay_0.1s Feedback Delay Line. The delay time may be varied up to 0.1 seconds.
1060 fbdelay_1s Feedback Delay Line. The delay time may be varied up to 1 second.
1061 fbdelay_5s Feedback Delay Line. The delay time may be varied up to 5 seconds.
1062 fbdelay_60s Feedback Delay Line. The delay time may be varied up to 60 seconds.
1063 sine_faaa Sine Oscillator. Frequency input is audio, Amplitude input is audio.
1064 sine_faac Sine Oscillator. Frequency input is audio, Amplitude input is control.
1065 sine_fcaa Sine Oscillator. Frequency input is control, Amplitude input is audio.
1066 sine_fcac Sine Oscillator. Frequency input is control, Amplitude input is control.
1067 amp_mono Amplifier (Mono).
1068 amp_stereo Amplifier (Stereo).
1069 noise_source_white Noise Source (White).
1070 am Amplitude Modulator.
1071 mixer Mixer (Stereo to Mono).
1072 compress_peak Simple Compressor (Peak Envelope Tracking).
1073 compress_rms Simple Compressor (RMS Envelope Tracking).
1074 expand_peak Simple Expander (Peak Envelope Tracking).
1075 expand_rms Simple Expander (RMS Envelope Tracking).
1076 limit_peak Simple Limiter (Peak Envelope Tracking).
1077 limit_rms Simple Limiter (RMS Envelope Tracking).
1078 track_peak Envelope Tracker (Peak).
1079 track_rms Envelope Tracker (RMS).
1080 track_max_peak Envelope Tracker (Maximum Peak).
1081 track_max_rms Envelope Tracker (Maximum RMS).
1082 peak Peak Monitor.
1083 null_ci Null Plugin (Control Input).
1084 null_ai Null Plugin (Audio Input).
1085 null_co Null Plugin (Control Output).
1086 null_ao Null Plugin (Audio Output).
1087 encode_bformat B-Format Encoder. This plugin encodes ambisonic B-Format audio using the inverse square law but no filtering, reverb or delay.
1088 encode_fmh FMH-Format Encoder. This plugin encodes ambisonic FMH-Format audio using the inverse square law but no filtering, reverb or delay.
1089 fmh2bf FMH-Format to B-Format. This plugin simply discards the R, S, T, U and V channels but is included for clarity.
1090 bf2stereo B-Format to Stereo Ambisonic Decoder. This plugin only actually uses its W and Y input signals and does not use UHJ.
1091 bf2quad B-Format to Quad Ambisonic Decoder. This plugin only actually uses its W, Y and Z input signals.
1092 bf2cube B-Format to Cube Ambisonic Decoder.
1093 bf2oct FMH-Format to Octagon Ambisonic Decoder. This plugin only actually uses its W, X, Y, U and V inputs.
1094 bf_rotate_z B-Format Rotation (Horizontal). This plugin rotates an B-Format encoded soundfield around the Z-axis.
1095 fmh_rotate_z FMH-Format Rotation (Horizontal). This plugin rotates an FMH-Format encoded soundfield around the Z-axis.
1096 grain_scatter Granular Scattering Processor. This plugin generates an output audio stream by scattering short `grains' of sound from an input stream. It is possible to control the length and envelope of these grains, how far away from their source time grains may be scattered and the density (grains/sec) of the texture produced.
1097 wsshape_sine Wave Shaper (Sine-Based).
1098 identity_audio Identity (Audio).
1099 identity_control Identity (Control).
1123 freeverb3 Freeverb (Version 3). This reverb unit is a direct port of the free public domain source code available from Jezar at Dreampoint.
1221 analogue Analogue Synthesizer Voice. Contains two audio oscillators, one LFO, and three ADSRs. There are five waveforms available for the DCOs: Sine, Triangle, Square, Sawtooth, and Fullwave rectified sine. The DCOs may be frequency modulated and/or pulse width modulated by the LFO.
1222 organ Organ Voice with Configurable Harmonics. The user may control the loudness of the harmonics. There are three additional tones that may be enabled and combined: brass, flute, and reed. Two ADSRs control the envelope for the upper and lower harmonics.
1223 syndrum Drum Synthesizer.
1224 vcf303 VCF 303. A TB-303 resonant filter clone.
1225 canyon_delay Canyon Delay. A deep stereo crossdelay with built-in low pass filters.
1226 phasemod Phase Modulated Synthesizer Voice. Contains six audio oscillators, each oscillator phase modulates the next. If a modulation coefficient is zero, then the former oscillator's output is summed with the module's output. DCO1's phase modulation parameter specifies an offset not a coefficient. Example modulation parameters {1.0, 0.5, 0.0, 0.5, 0.2, 0.0} for all six oscillators results in the output function: DCO2 (phase = DCO1 (phase = 1.0) * 0.5) + DCO5 (phase = DCO4 (phase = DCO3 (phase = 0.0) * 0.5) * 0.2) + DCO6 (phase = 0.0). Each oscillator's output is bounded by -1.0 and 1.0, or -360o and 360o.
1227 lofi Lo Fi. Simulates old audio equipment. Adds distortion, bandwidth limiting, compression, and crackling to audio.
1841 pink_interpolated_audio Interpolated pink noise. Pink noise is a kind of random one-dimensional fractal. This plugin approximates the effect of an extreme low pass filter on a pink noise signal. It is useful as a natural-sounding continuously varying control signal with long-term trends as well as short-term variation. If you use it to control the pitch of a sine wave it can sound a bit like wind blowing. Notice that the average value tends to gradually drift over long periods of time. This is in the nature of pink noise, and so can't be helped.
1843 pink_sh Sample and hold pink noise. Similar to pink, but with stepped instead of interpolated output.
1844 pink_full_frequency Pink noise simulation with a full frequency range. You can low pass filter this to get a similar effect to the interpolated pink noise generator.
1845 hard_gate Hard noise gate. If the absolute value of the signal falls below "threshold", it is set to zero. There is no antialiasing.
1846 disintegrator Amplifies random half-cycles of it's input by multiplier. Set multiplier to 0 and vary probability for a weird fade effect, or set multiplier to -1 and probability to 0.5 to turn pitched sounds into noise.
1848 sledgehammer A Dynamic Sledgehammer, which you can use to bash your signals into shape. It's basically a very simple and heavy compressor with a sidechain. Try it with a pad sound as the carrier and a drum loop as the modulator. Also, you can get some nice "Satan Maximiser"-style distortion by not connecting the modulator (set it's influence to 0) and putting the rate up to around 0.1.
1849 logistic Logistic Map chaotic stepped control generator. The logistic map is a classic example from chaos theory. It can be summarised by the formula
x := r*x*(1-x).
With r<3, x just converges to a constant value. With r just greater than 3 it oscillates with period 2. at about 3.45 the period doubles again to 4. These period doublings occur at smaller and smaller increments of r, until at about 3.5699 there have been an infinite number and the signal never repeates. Between this value and 4 the system exhibits chaotic behaviour (although there are regions of periodicity). Papers are still being published today on the subject of this system's behaviour. This plugin iterates this map at a given frequency to produce a stepped signal, which is scaled to lie in the range (-1,1). When this signal is used as a frequency control it can sometimes sound quite musical.

"Ambisonics" is a registered trademark of Nimbus Communications International.

lmms-1.1.3/plugins/LadspaEffect/cmt/doc/tasks.html000066400000000000000000000007131247673406200220450ustar00rootroot00000000000000

CMT Library Task List

Basic Plugins Needed

  • Noise Gate
  • Flanger
  • Phaser
  • Chorus
  • Unbounded Delay (echo & feedback)
  • Distortion
  • Overdrive
  • Exciter
  • Resonant Filter
  • Graphic EQ
  • Envelope Generator

Other Plugins Planned

  • Vocoder

Other Tasks

  • Think up a better name than CMT.
lmms-1.1.3/plugins/LadspaEffect/cmt/src/000077500000000000000000000000001247673406200200535ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/cmt/src/am.cpp000066400000000000000000000061371247673406200211630ustar00rootroot00000000000000/* am.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ #define AM_INPUT1 0 #define AM_INPUT2 1 #define AM_OUTPUT 2 /** This plugin multiplies two signals together to produce a third. */ class AmplitudeModulator : public CMT_PluginInstance { public: AmplitudeModulator(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(3) { } friend void runAmplitudeModulator(LADSPA_Handle Instance, unsigned long SAmplitudeModulatorpleCount); }; /*****************************************************************************/ void runAmplitudeModulator(LADSPA_Handle Instance, unsigned long SAmplitudeModulatorpleCount) { AmplitudeModulator * poAmplitudeModulator = (AmplitudeModulator *)Instance; LADSPA_Data * pfInput1 = poAmplitudeModulator->m_ppfPorts[AM_INPUT1]; LADSPA_Data * pfInput2 = poAmplitudeModulator->m_ppfPorts[AM_INPUT2]; LADSPA_Data * pfOutput = poAmplitudeModulator->m_ppfPorts[AM_OUTPUT]; for (unsigned long lSAmplitudeModulatorpleIndex = 0; lSAmplitudeModulatorpleIndex < SAmplitudeModulatorpleCount; lSAmplitudeModulatorpleIndex++) *(pfOutput++) = *(pfInput1++) * *(pfInput2++); } /*****************************************************************************/ void initialise_am() { CMT_Descriptor * psDescriptor = new CMT_Descriptor (1070, "am", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Amplitude Modulator", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runAmplitudeModulator, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input 1"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input 2"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/ambisonic.cpp000066400000000000000000001061561247673406200225340ustar00rootroot00000000000000/* ambisonic.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ /* This module provides simple plugins handling B-Format and FMH-Format audio. Ambisonics is a mathematical technique designed to capture the sound field around point. See http://www.muse.demon.co.uk/3daudio.html. "Ambisonics" is a registered trademark of Nimbus Communications International although. An exteremly `vanilla' approach is taken to encoding distance, using inverse square, but no filtering or delay. */ /*****************************************************************************/ #include #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ #define ENC_INPUT 0 #define ENC_IN_X 1 #define ENC_IN_Y 2 #define ENC_IN_Z 3 #define ENC_OUT_W 4 #define ENC_OUT_X 5 #define ENC_OUT_Y 6 #define ENC_OUT_Z 7 #define ENC_OUT_R 8 #define ENC_OUT_S 9 #define ENC_OUT_T 10 #define ENC_OUT_U 11 #define ENC_OUT_V 12 /*****************************************************************************/ /** This plugin encodes a signal to B-Format depending on where it is located in a virtual space. */ class BFormatEncoder : public CMT_PluginInstance { public: BFormatEncoder(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(8) { } friend void runBFormatEncoder(LADSPA_Handle Instance, unsigned long SampleCount); }; /** This plugin encodes a signal to FMH-Format depending on where it is located in a virtual space. */ class FMHFormatEncoder : public CMT_PluginInstance { public: FMHFormatEncoder(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(13) { } friend void runFMHFormatEncoder(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define F2B_IN_W 0 #define F2B_IN_X 1 #define F2B_IN_Y 2 #define F2B_IN_Z 3 #define F2B_IN_R 4 #define F2B_IN_S 5 #define F2B_IN_T 6 #define F2B_IN_U 7 #define F2B_IN_V 8 #define F2B_OUT_W 9 #define F2B_OUT_X 10 #define F2B_OUT_Y 11 #define F2B_OUT_Z 12 /** This plugin coverts FMH-Format to B-Format. This is a trivial operation that can also be achieved simply by discarding RSTUV channels. */ class FMHToB : public CMT_PluginInstance { public: FMHToB(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(13) { } friend void runFMHToB(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define DECST_IN_W 0 #define DECST_IN_X 1 #define DECST_IN_Y 2 #define DECST_IN_Z 3 #define DECST_OUT_L 4 #define DECST_OUT_R 5 /** This plugin decodes B-Format to produce a stereo speaker feed. */ class BFormatToStereo : public CMT_PluginInstance { public: BFormatToStereo(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(6) { } friend void runBFormatToStereo(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define DECQ_IN_W 0 #define DECQ_IN_X 1 #define DECQ_IN_Y 2 #define DECQ_IN_Z 3 #define DECQ_OUT_FL 4 #define DECQ_OUT_FR 5 #define DECQ_OUT_BL 6 #define DECQ_OUT_BR 7 /** This plugin decodes B-Format to produce a quad (square) speaker feed. */ class BFormatToQuad : public CMT_PluginInstance { public: BFormatToQuad(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(8) { } friend void runBFormatToQuad(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define DECC_IN_W 0 #define DECC_IN_X 1 #define DECC_IN_Y 2 #define DECC_IN_Z 3 #define DECC_OUT_BFL 4 #define DECC_OUT_BFR 5 #define DECC_OUT_BBL 6 #define DECC_OUT_BBR 7 #define DECC_OUT_TFL 8 #define DECC_OUT_TFR 9 #define DECC_OUT_TBL 10 #define DECC_OUT_TBR 11 /** This plugin decodes B-Format to produce a speaker feed for eight speakers arranged at the corners of a cube. */ class BFormatToCube : public CMT_PluginInstance { public: BFormatToCube(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(12) { } friend void runBFormatToCube(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define DECO_IN_W 0 #define DECO_IN_X 1 #define DECO_IN_Y 2 #define DECO_IN_Z 3 #define DECO_IN_R 4 #define DECO_IN_S 5 #define DECO_IN_T 6 #define DECO_IN_U 7 #define DECO_IN_V 8 #define DECO_OUT_FFL 9 #define DECO_OUT_FFR 10 #define DECO_OUT_FRR 11 #define DECO_OUT_BRR 12 #define DECO_OUT_BBR 13 #define DECO_OUT_BBL 14 #define DECO_OUT_BLL 15 #define DECO_OUT_FLL 16 /** This plugin decodes FMH-Format to produce a speaker feed for eight speakers arranged at the corners of an octagon. */ class FMHFormatToOct : public CMT_PluginInstance { public: FMHFormatToOct(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(17) { } friend void runFMHFormatToOct(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define BFROT_ANGLE 0 #define BFROT_IN_W 1 #define BFROT_IN_X 2 #define BFROT_IN_Y 3 #define BFROT_IN_Z 4 #define BFROT_OUT_W 5 #define BFROT_OUT_X 6 #define BFROT_OUT_Y 7 #define BFROT_OUT_Z 8 /** This plugin rotates an B-Format soundfield around the Z-axis. */ class BFormatRotation : public CMT_PluginInstance { public: BFormatRotation(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(9) { } friend void runBFormatRotation(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define FMHROT_ANGLE 0 #define FMHROT_IN_W 1 #define FMHROT_IN_X 2 #define FMHROT_IN_Y 3 #define FMHROT_IN_Z 4 #define FMHROT_IN_R 5 #define FMHROT_IN_S 6 #define FMHROT_IN_T 7 #define FMHROT_IN_U 8 #define FMHROT_IN_V 9 #define FMHROT_OUT_W 10 #define FMHROT_OUT_X 11 #define FMHROT_OUT_Y 12 #define FMHROT_OUT_Z 13 #define FMHROT_OUT_R 14 #define FMHROT_OUT_S 15 #define FMHROT_OUT_T 16 #define FMHROT_OUT_U 17 #define FMHROT_OUT_V 18 /** This plugin rotates an FMH-Format soundfield around the Z-axis. */ class FMHFormatRotation : public CMT_PluginInstance { public: FMHFormatRotation(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(19) { } friend void runFMHFormatRotation(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void runBFormatEncoder(LADSPA_Handle Instance, unsigned long SampleCount) { BFormatEncoder * poProcessor = (BFormatEncoder *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ENC_INPUT]; LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[ENC_OUT_W]; LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[ENC_OUT_X]; LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[ENC_OUT_Y]; LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[ENC_OUT_Z]; LADSPA_Data fX = *(poProcessor->m_ppfPorts[ENC_IN_X]); LADSPA_Data fY = *(poProcessor->m_ppfPorts[ENC_IN_Y]); LADSPA_Data fZ = *(poProcessor->m_ppfPorts[ENC_IN_Z]); LADSPA_Data fDistanceSquared = fX * fX + fY * fY + fZ * fZ; const LADSPA_Data fWScalar = 0.707107; LADSPA_Data fXScalar, fYScalar, fZScalar; if (fDistanceSquared > 1e-10) { LADSPA_Data fOneOverDistanceSquared = 1 / fDistanceSquared; fXScalar = fX * fOneOverDistanceSquared; fYScalar = fY * fOneOverDistanceSquared; fZScalar = fZ * fOneOverDistanceSquared; } else { /* Avoid division by zero issues. */ fXScalar = fYScalar = fZScalar = 0; } for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); *(pfOutW++) = fWScalar * fInput; *(pfOutX++) = fXScalar * fInput; *(pfOutY++) = fYScalar * fInput; *(pfOutZ++) = fZScalar * fInput; } } /*****************************************************************************/ void runFMHFormatEncoder(LADSPA_Handle Instance, unsigned long SampleCount) { FMHFormatEncoder * poProcessor = (FMHFormatEncoder *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ENC_INPUT]; LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[ENC_OUT_W]; LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[ENC_OUT_X]; LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[ENC_OUT_Y]; LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[ENC_OUT_Z]; LADSPA_Data * pfOutR = poProcessor->m_ppfPorts[ENC_OUT_R]; LADSPA_Data * pfOutS = poProcessor->m_ppfPorts[ENC_OUT_S]; LADSPA_Data * pfOutT = poProcessor->m_ppfPorts[ENC_OUT_T]; LADSPA_Data * pfOutU = poProcessor->m_ppfPorts[ENC_OUT_U]; LADSPA_Data * pfOutV = poProcessor->m_ppfPorts[ENC_OUT_V]; LADSPA_Data fX = *(poProcessor->m_ppfPorts[ENC_IN_X]); LADSPA_Data fY = *(poProcessor->m_ppfPorts[ENC_IN_Y]); LADSPA_Data fZ = *(poProcessor->m_ppfPorts[ENC_IN_Z]); LADSPA_Data fDistanceSquared = fX * fX + fY * fY + fZ * fZ; const LADSPA_Data fWScalar = 0.707107; LADSPA_Data fXScalar, fYScalar, fZScalar; LADSPA_Data fRScalar, fSScalar, fTScalar; LADSPA_Data fUScalar, fVScalar; if (fDistanceSquared > 1e-10) { LADSPA_Data fOneOverDistanceSquared = 1 / fDistanceSquared; LADSPA_Data fOneOverDistanceCubed = LADSPA_Data(pow(fDistanceSquared, -1.5)); fXScalar = fX * fOneOverDistanceSquared; fYScalar = fY * fOneOverDistanceSquared; fZScalar = fZ * fOneOverDistanceSquared; fRScalar = ((fZ * fZ) * fOneOverDistanceSquared - 0.5) * sqrt(fOneOverDistanceSquared); fSScalar = 2 * (fZ * fX) * fOneOverDistanceCubed; fTScalar = 2 * (fY * fX) * fOneOverDistanceCubed; fUScalar = (fX * fX - fY * fY) * fOneOverDistanceCubed; fVScalar = 2 * (fX * fY) * fOneOverDistanceCubed; } else { /* Avoid division by zero issues. */ fXScalar = fYScalar = fZScalar = fRScalar = fSScalar = fTScalar = fUScalar = fVScalar = 0; } for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); *(pfOutW++) = fWScalar * fInput; *(pfOutX++) = fXScalar * fInput; *(pfOutY++) = fYScalar * fInput; *(pfOutZ++) = fZScalar * fInput; *(pfOutR++) = fRScalar * fInput; *(pfOutS++) = fSScalar * fInput; *(pfOutT++) = fTScalar * fInput; *(pfOutU++) = fUScalar * fInput; *(pfOutV++) = fVScalar * fInput; } } /*****************************************************************************/ void runFMHToB(LADSPA_Handle Instance, unsigned long SampleCount) { FMHToB * poProcessor = (FMHToB *)Instance; LADSPA_Data * pfInW = poProcessor->m_ppfPorts[F2B_IN_W]; LADSPA_Data * pfInX = poProcessor->m_ppfPorts[F2B_IN_X]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[F2B_IN_Y]; LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[F2B_IN_Z]; LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[F2B_OUT_W]; LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[F2B_OUT_X]; LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[F2B_OUT_Y]; LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[F2B_OUT_Z]; int iSize = sizeof(LADSPA_Data) * SampleCount; memcpy(pfOutW, pfInW, iSize); memcpy(pfOutX, pfInX, iSize); memcpy(pfOutY, pfInY, iSize); memcpy(pfOutZ, pfInZ, iSize); } /*****************************************************************************/ void runBFormatToStereo(LADSPA_Handle Instance, unsigned long SampleCount) { BFormatToStereo * poProcessor = (BFormatToStereo *)Instance; LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECST_IN_W]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECST_IN_Y]; LADSPA_Data * pfOutL = poProcessor->m_ppfPorts[DECST_OUT_L]; LADSPA_Data * pfOutR = poProcessor->m_ppfPorts[DECST_OUT_R]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fA = 0.707107 * *(pfInW++); LADSPA_Data fB = 0.5 * *(pfInY++); *(pfOutL++) = fA + fB; *(pfOutR++) = fA - fB; } } /*****************************************************************************/ void runBFormatToQuad(LADSPA_Handle Instance, unsigned long SampleCount) { BFormatToQuad * poProcessor = (BFormatToQuad *)Instance; LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECQ_IN_W]; LADSPA_Data * pfInX = poProcessor->m_ppfPorts[DECQ_IN_X]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECQ_IN_Y]; LADSPA_Data * pfOutFL = poProcessor->m_ppfPorts[DECQ_OUT_FL]; LADSPA_Data * pfOutFR = poProcessor->m_ppfPorts[DECQ_OUT_FR]; LADSPA_Data * pfOutBL = poProcessor->m_ppfPorts[DECQ_OUT_BL]; LADSPA_Data * pfOutBR = poProcessor->m_ppfPorts[DECQ_OUT_BR]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fW = 0.353553 * *(pfInW++); LADSPA_Data fX = 0.243361 * *(pfInX++); LADSPA_Data fY = 0.243361 * *(pfInY++); LADSPA_Data fV = 0.096383 * *(pfInY++); *(pfOutFL++) = fW + fX + fY + fV; *(pfOutFR++) = fW + fX - fY - fV; *(pfOutBL++) = fW - fX + fY + fV; *(pfOutBR++) = fW - fX - fY - fV; } } /*****************************************************************************/ void runBFormatToCube(LADSPA_Handle Instance, unsigned long SampleCount) { BFormatToCube * poProcessor = (BFormatToCube *)Instance; LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECC_IN_W]; LADSPA_Data * pfInX = poProcessor->m_ppfPorts[DECC_IN_X]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECC_IN_Y]; LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[DECC_IN_Z]; LADSPA_Data * pfOutBFL = poProcessor->m_ppfPorts[DECC_OUT_BFL]; LADSPA_Data * pfOutBFR = poProcessor->m_ppfPorts[DECC_OUT_BFR]; LADSPA_Data * pfOutBBL = poProcessor->m_ppfPorts[DECC_OUT_BBL]; LADSPA_Data * pfOutBBR = poProcessor->m_ppfPorts[DECC_OUT_BBR]; LADSPA_Data * pfOutTFL = poProcessor->m_ppfPorts[DECC_OUT_BFL]; LADSPA_Data * pfOutTFR = poProcessor->m_ppfPorts[DECC_OUT_BFR]; LADSPA_Data * pfOutTBL = poProcessor->m_ppfPorts[DECC_OUT_BBL]; LADSPA_Data * pfOutTBR = poProcessor->m_ppfPorts[DECC_OUT_BBR]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fW = 0.176777 * *(pfInW++); LADSPA_Data fX = 0.113996 * *(pfInX++); LADSPA_Data fY = 0.113996 * *(pfInY++); LADSPA_Data fZ = 0.113996 * *(pfInZ++); LADSPA_Data fS = 0.036859 * *(pfInX++); LADSPA_Data fT = 0.036859 * *(pfInY++); LADSPA_Data fV = 0.036859 * *(pfInZ++); *(pfOutBFL++) = fW + fX + fY - fZ + fV - fT - fS; *(pfOutBFR++) = fW + fX - fY - fZ - fV + fT - fS; *(pfOutBBL++) = fW - fX + fY - fZ + fV + fT + fS; *(pfOutBBR++) = fW - fX - fY - fZ - fV - fT + fS; *(pfOutTFL++) = fW + fX + fY + fZ + fV + fT + fS; *(pfOutTFR++) = fW + fX - fY + fZ - fV - fT + fS; *(pfOutTBL++) = fW - fX + fY + fZ + fV - fT - fS; *(pfOutTBR++) = fW - fX - fY + fZ - fV + fT - fS; } } /*****************************************************************************/ void runFMHFormatToOct(LADSPA_Handle Instance, unsigned long SampleCount) { FMHFormatToOct * poProcessor = (FMHFormatToOct *)Instance; LADSPA_Data * pfInW = poProcessor->m_ppfPorts[DECO_IN_W]; LADSPA_Data * pfInX = poProcessor->m_ppfPorts[DECO_IN_X]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[DECO_IN_Y]; LADSPA_Data * pfInU = poProcessor->m_ppfPorts[DECO_IN_U]; LADSPA_Data * pfInV = poProcessor->m_ppfPorts[DECO_IN_V]; LADSPA_Data * pfOutFFL = poProcessor->m_ppfPorts[DECO_OUT_FFL]; LADSPA_Data * pfOutFFR = poProcessor->m_ppfPorts[DECO_OUT_FFR]; LADSPA_Data * pfOutFRR = poProcessor->m_ppfPorts[DECO_OUT_FRR]; LADSPA_Data * pfOutBRR = poProcessor->m_ppfPorts[DECO_OUT_BRR]; LADSPA_Data * pfOutBBR = poProcessor->m_ppfPorts[DECO_OUT_BBR]; LADSPA_Data * pfOutBBL = poProcessor->m_ppfPorts[DECO_OUT_BBL]; LADSPA_Data * pfOutBLL = poProcessor->m_ppfPorts[DECO_OUT_BLL]; LADSPA_Data * pfOutFLL = poProcessor->m_ppfPorts[DECO_OUT_FLL]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fW = 0.176777 * *(pfInW++); LADSPA_Data fX1 = 0.065888 * *pfInX; LADSPA_Data fX2 = 0.159068 * *(pfInX++); LADSPA_Data fY1 = 0.065888 * *pfInY; LADSPA_Data fY2 = 0.159068 * *(pfInY++); LADSPA_Data fU = 0.034175 * *(pfInU++); LADSPA_Data fV = 0.034175 * *(pfInV++); *(pfOutFFL++) = fW + fX2 + fY1 + fU + fV; *(pfOutFFR++) = fW + fX2 - fY1 + fU - fV; *(pfOutFRR++) = fW + fX1 - fY2 - fU - fV; *(pfOutBRR++) = fW - fX1 + fY2 - fU + fV; *(pfOutBBR++) = fW - fX2 + fY1 + fU + fV; *(pfOutBBL++) = fW - fX2 - fY1 + fU - fV; *(pfOutBLL++) = fW - fX1 - fY2 - fU - fV; *(pfOutFLL++) = fW + fX1 + fY2 - fU + fV; } } /*****************************************************************************/ void runBFormatRotation(LADSPA_Handle Instance, unsigned long SampleCount) { BFormatRotation * poProcessor = (BFormatRotation *)Instance; /* Work in radians. */ LADSPA_Data fAngle = LADSPA_Data(M_PI / 180.0) * *(poProcessor->m_ppfPorts[FMHROT_ANGLE]); LADSPA_Data fSin = sin(fAngle); LADSPA_Data fCos = cos(fAngle); LADSPA_Data * pfInW = poProcessor->m_ppfPorts[BFROT_IN_W]; LADSPA_Data * pfInX = poProcessor->m_ppfPorts[BFROT_IN_X]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[BFROT_IN_Y]; LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[BFROT_IN_Z]; LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[BFROT_OUT_W]; LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[BFROT_OUT_X]; LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[BFROT_OUT_Y]; LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[BFROT_OUT_Z]; int iSize = sizeof(LADSPA_Data) * SampleCount; memcpy(pfOutW, pfInW, iSize); memcpy(pfOutZ, pfInZ, iSize); for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { float fInX = *(pfInX++); float fInY = *(pfInY++); *(pfOutX++) = fCos * fInX - fSin * fInY; *(pfOutY++) = fSin * fInX + fCos * fInY; } } /*****************************************************************************/ void runFMHFormatRotation(LADSPA_Handle Instance, unsigned long SampleCount) { FMHFormatRotation * poProcessor = (FMHFormatRotation *)Instance; /* Work in radians. */ LADSPA_Data fAngle = LADSPA_Data(M_PI / 180.0) * *(poProcessor->m_ppfPorts[FMHROT_ANGLE]); LADSPA_Data fSin = sin(fAngle); LADSPA_Data fCos = cos(fAngle); LADSPA_Data fSin2 = sin(fAngle * 2); LADSPA_Data fCos2 = cos(fAngle * 2); LADSPA_Data * pfInW = poProcessor->m_ppfPorts[FMHROT_IN_W]; LADSPA_Data * pfInX = poProcessor->m_ppfPorts[FMHROT_IN_X]; LADSPA_Data * pfInY = poProcessor->m_ppfPorts[FMHROT_IN_Y]; LADSPA_Data * pfInZ = poProcessor->m_ppfPorts[FMHROT_IN_Z]; LADSPA_Data * pfInR = poProcessor->m_ppfPorts[FMHROT_IN_R]; LADSPA_Data * pfInS = poProcessor->m_ppfPorts[FMHROT_IN_S]; LADSPA_Data * pfInT = poProcessor->m_ppfPorts[FMHROT_IN_T]; LADSPA_Data * pfInU = poProcessor->m_ppfPorts[FMHROT_IN_U]; LADSPA_Data * pfInV = poProcessor->m_ppfPorts[FMHROT_IN_V]; LADSPA_Data * pfOutW = poProcessor->m_ppfPorts[FMHROT_OUT_W]; LADSPA_Data * pfOutX = poProcessor->m_ppfPorts[FMHROT_OUT_X]; LADSPA_Data * pfOutY = poProcessor->m_ppfPorts[FMHROT_OUT_Y]; LADSPA_Data * pfOutZ = poProcessor->m_ppfPorts[FMHROT_OUT_Z]; LADSPA_Data * pfOutR = poProcessor->m_ppfPorts[FMHROT_OUT_R]; LADSPA_Data * pfOutS = poProcessor->m_ppfPorts[FMHROT_OUT_S]; LADSPA_Data * pfOutT = poProcessor->m_ppfPorts[FMHROT_OUT_T]; LADSPA_Data * pfOutU = poProcessor->m_ppfPorts[FMHROT_OUT_U]; LADSPA_Data * pfOutV = poProcessor->m_ppfPorts[FMHROT_OUT_V]; int iSize = sizeof(LADSPA_Data) * SampleCount; memcpy(pfOutW, pfInW, iSize); memcpy(pfOutZ, pfInZ, iSize); memcpy(pfOutR, pfInR, iSize); for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { float fInX = *(pfInX++); float fInY = *(pfInY++); float fInS = *(pfInS++); float fInT = *(pfInT++); float fInU = *(pfInU++); float fInV = *(pfInV++); *(pfOutX++) = fCos * fInX - fSin * fInY; *(pfOutY++) = fSin * fInX + fCos * fInY; *(pfOutS++) = fCos * fInS - fSin * fInT; *(pfOutT++) = fSin * fInS + fCos * fInT; *(pfOutU++) = fCos2 * fInU - fSin2 * fInV; *(pfOutV++) = fSin2 * fInU + fCos2 * fInV; } } /*****************************************************************************/ void initialise_ambisonic() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1087, "encode_bformat", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Encoder (B-Format)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runBFormatEncoder, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sound Source X Coordinate", LADSPA_HINT_DEFAULT_1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sound Source Y Coordinate", LADSPA_HINT_DEFAULT_0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sound Source Z Coordinate", LADSPA_HINT_DEFAULT_0); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (W)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (X)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Y)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Z)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1088, "encode_fmh", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Encoder (FMH-Format)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runFMHFormatEncoder, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sound Source X Coordinate", LADSPA_HINT_DEFAULT_1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sound Source Y Coordinate", LADSPA_HINT_DEFAULT_0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sound Source Z Coordinate", LADSPA_HINT_DEFAULT_0); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (W)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (X)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Y)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Z)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (R)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (S)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (T)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (U)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (V)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1089, "fmh2bf", LADSPA_PROPERTY_HARD_RT_CAPABLE, "FMH-Format to B-Format (Discards RSTUV Channels)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runFMHToB, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (R)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (S)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (T)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (U)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (V)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (W)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (X)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Y)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Z)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1090, "bf2stereo", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Decoder (B-Format to Stereo)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runBFormatToStereo, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Right)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1091, "bf2quad", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Decoder (B-Format to Quad)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runBFormatToQuad, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Front Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Front Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Back Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Back Right)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1092, "bf2cube", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Decoder (B-Format to Cube)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runBFormatToCube, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Base Front Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Base Front Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Base Back Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Base Back Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Top Front Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Top Front Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Top Back Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Top Back Right)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1093, "fmh2oct", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Decoder (FMH-Format to Octagon)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runFMHFormatToOct, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (R)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (S)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (T)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (U)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (V)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Front Front Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Front Front Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Front Right Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Back Right Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Back Back Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Back Back Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Back Left Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Front Left Left)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1094, "bf_rotate_z", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Rotation (B-Format, Horizontal)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runBFormatRotation, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Angle of Rotation (Degrees Anticlockwise)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH), -180, 180); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (W)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (X)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Y)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Z)"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1095, "fmh_rotate_z", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Ambisonic Rotation (FMH-Format, Horizontal)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runFMHFormatRotation, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Angle of Rotation (Degrees Anticlockwise)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH), -180, 180); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (W)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (X)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Y)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Z)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (R)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (S)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (T)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (U)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (V)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (W)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (X)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Y)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Z)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (R)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (S)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (T)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (U)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (V)"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/amp.cpp000066400000000000000000000122571247673406200213430ustar00rootroot00000000000000/* amp.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ #define AMP_CONTROL 0 #define AMP_INPUT1 1 #define AMP_OUTPUT1 2 /** This plugin applies a gain to a mono signal. */ class MonoAmplifier : public CMT_PluginInstance { public: MonoAmplifier(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(3) { } friend void runMonoAmplifier(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ /* Ports as above, plus... */ #define AMP_INPUT2 3 #define AMP_OUTPUT2 4 /** This plugin applies a gain to a stereo signal. */ class StereoAmplifier : public CMT_PluginInstance { public: StereoAmplifier(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(5) { } friend void runStereoAmplifier(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void runMonoAmplifier(LADSPA_Handle Instance, unsigned long SampleCount) { MonoAmplifier * poAmplifier = (MonoAmplifier *)Instance; LADSPA_Data * pfInput = poAmplifier->m_ppfPorts[AMP_INPUT1]; LADSPA_Data * pfOutput = poAmplifier->m_ppfPorts[AMP_OUTPUT1]; LADSPA_Data fGain = *(poAmplifier->m_ppfPorts[AMP_CONTROL]); for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) = *(pfInput++) * fGain; } /*****************************************************************************/ void runStereoAmplifier(LADSPA_Handle Instance, unsigned long SampleCount) { unsigned long lSampleIndex; StereoAmplifier * poAmplifier = (StereoAmplifier *)Instance; LADSPA_Data fGain = *(poAmplifier->m_ppfPorts[AMP_CONTROL]); LADSPA_Data * pfInput = poAmplifier->m_ppfPorts[AMP_INPUT1]; LADSPA_Data * pfOutput = poAmplifier->m_ppfPorts[AMP_OUTPUT1]; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) = *(pfInput++) * fGain; pfInput = poAmplifier->m_ppfPorts[AMP_INPUT2]; pfOutput = poAmplifier->m_ppfPorts[AMP_OUTPUT2]; for (lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) = *(pfInput++) * fGain; } /*****************************************************************************/ void initialise_amp() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1067, "amp_mono", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Amplifier (Mono)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runMonoAmplifier, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Gain", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1068, "amp_stereo", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Amplifier (Stereo)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runStereoAmplifier, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Gain", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Left)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Right)"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/analogue.cpp000066400000000000000000000362341247673406200223620ustar00rootroot00000000000000/* analogue.cpp Analogue Voice - Analog synthesizer voice Copyright (c) 2000 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_OUT 0 #define PORT_GATE 1 #define PORT_VELOCITY 2 #define PORT_FREQ 3 #define PORT_DCO1_OCTAVE 4 #define PORT_DCO1_WAVEFORM 5 #define PORT_DCO1_FM 6 #define PORT_DCO1_PWM 7 #define PORT_DCO1_ATTACK 8 #define PORT_DCO1_DECAY 9 #define PORT_DCO1_SUSTAIN 10 #define PORT_DCO1_RELEASE 11 #define PORT_DCO2_OCTAVE 12 #define PORT_DCO2_WAVEFORM 13 #define PORT_DCO2_FM 14 #define PORT_DCO2_PWM 15 #define PORT_DCO2_ATTACK 16 #define PORT_DCO2_DECAY 17 #define PORT_DCO2_SUSTAIN 18 #define PORT_DCO2_RELEASE 19 #define PORT_LFO_FREQ 20 #define PORT_LFO_FADEIN 21 #define PORT_FILT_ENV_MOD 22 #define PORT_FILT_LFO_MOD 23 #define PORT_FILT_RES 24 #define PORT_FILT_ATTACK 25 #define PORT_FILT_DECAY 26 #define PORT_FILT_SUSTAIN 27 #define PORT_FILT_RELEASE 28 #define NUM_PORTS 29 #ifndef PI #define PI 3.14159265358979F #endif typedef struct Envelope { int envelope_decay; LADSPA_Data envelope; Envelope () : envelope_decay (0), envelope (0.0) {} } Envelope; class Analogue : public CMT_PluginInstance { LADSPA_Data sample_rate; int trigger; Envelope dco1_env; Envelope dco2_env; Envelope filt_env; LADSPA_Data d1; LADSPA_Data d2; LADSPA_Data dco1_accum; LADSPA_Data dco2_accum; LADSPA_Data lfo_accum; LADSPA_Data lfo_vol; public: Analogue(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) : CMT_PluginInstance(NUM_PORTS), sample_rate (SampleRate), trigger (0), d1 (0.0), d2 (0.0), dco1_accum (0.0), dco2_accum (0.0), lfo_accum (0.0) { } ~Analogue () { } /* Third-order approximation of a sine wave. */ static inline LADSPA_Data fast_sin(LADSPA_Data x) { if (x > PI) x = (x < PI * 1.5F) ? (PI - x) : (x - 2.0F * PI); else if (x > PI * 0.5F) x = PI - x; return x * (1.05F - x * x * 0.175F); } static inline LADSPA_Data tri(LADSPA_Data x) { if (x > 0.75F) x = x - 1.0F; else if (x > 0.25F) x = 0.5F - x; return x * 4.0F; } static inline LADSPA_Data envelope(Envelope *env, int gate, LADSPA_Data attack, LADSPA_Data decay, LADSPA_Data sustain, LADSPA_Data release) { if (gate) if (env->envelope_decay == 0) { env->envelope += (1.0F - env->envelope) * attack; if (env->envelope >= 0.95F) env->envelope_decay = 1; } else env->envelope += (sustain - env->envelope) * decay; else env->envelope += -env->envelope * release; return env->envelope; } static void activate(LADSPA_Handle Instance) { Analogue *analogue = (Analogue*) Instance; analogue->trigger = 0; analogue->dco1_env.envelope_decay = 0; analogue->dco1_env.envelope = 0.0; analogue->dco2_env.envelope_decay = 0; analogue->dco2_env.envelope = 0.0; analogue->filt_env.envelope_decay = 0; analogue->filt_env.envelope = 0.0; analogue->d1 = 0.0F; analogue->d2 = 0.0F; analogue->dco1_accum = 0.0F; analogue->dco2_accum = 0.0F; analogue->lfo_accum = 0.0F; analogue->lfo_vol = 0.0F; } static inline LADSPA_Data osc(int waveform, LADSPA_Data inc, LADSPA_Data width, LADSPA_Data *accum) { *accum += inc; while (*accum >= 1.0F) *accum -= 1.0F; /* 0 = Sine wave */ if (waveform == 0) if (*accum < width) return fast_sin (*accum / width * PI); else return fast_sin (PI + (*accum - width) / (1.0F - width) * PI); /* 1 = Triangle wave */ else if (waveform == 1) if (*accum < width) return tri (*accum / width * 0.5); else return tri (0.5 + (*accum - width) * 0.5 / (1.0F - width)); /* 2 = Square wave */ else if (waveform == 2) return (*accum > width) ? 1.0F : -1.0F; /* 3 = Sawtooth wave */ else if (waveform == 3) if (*accum < width) return *accum / width * 2.0F - 1.0F; else return (*accum - width) / (1.0F - width) * 2.0F - 1.0F; /* 4 = Fullwave Rectified Sine wave */ else if (waveform == 4) if (*accum < width) return fast_sin (*accum / width * PI); else return fast_sin ((*accum - width) / (1.0F - width) * PI); /* 5 = Static */ else return (rand () & 1) ? -1.0F : 1.0F; } static LADSPA_Data inc(LADSPA_Data oct, LADSPA_Data freq, LADSPA_Data sample_rate) { return pow (2.0, oct) * freq / sample_rate; } static void calc_a_b_c(Analogue *analogue, LADSPA_Data freq, LADSPA_Data *a, LADSPA_Data *b, LADSPA_Data *c) { LADSPA_Data top_freq, k, res; top_freq = freq; top_freq *= PI / analogue->sample_rate; res = exp (-1.20 + 3.455 * *analogue->m_ppfPorts[PORT_FILT_RES]); k = exp (-top_freq / res); *a = 2.0 * cos (2.0 * top_freq) * k; *b = -k * k; *c = (1.0 - *a - *b) * 0.2; } static inline LADSPA_Data multiplier(Analogue *analogue, LADSPA_Data value) { return 1.0 - pow (0.05, 1.0 / (analogue->sample_rate * value)); } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { Analogue *analogue = (Analogue*) Instance; unsigned long i; int waveform1, waveform2; int gate; LADSPA_Data lfo_inc, inc1, inc2; LADSPA_Data attack1, decay1, release1; LADSPA_Data attack2, decay2, release2; LADSPA_Data filt_attack, filt_decay, filt_release; LADSPA_Data lfo_fadein, a = 0, b = 0, c = 0; LADSPA_Data dco1_pwm, dco2_pwm; LADSPA_Data dco1_fm, dco2_fm; LADSPA_Data filt_lfo_mod; LADSPA_Data **ports; ports = analogue->m_ppfPorts; gate = (*ports[PORT_GATE] > 0.0); if (gate == 1 && analogue->trigger == 0) { analogue->lfo_vol = 0.0F; analogue->dco1_env.envelope_decay = 0; analogue->dco1_env.envelope = 0.0; analogue->dco2_env.envelope_decay = 0; analogue->dco2_env.envelope = 0.0; analogue->filt_env.envelope_decay = 0; analogue->filt_env.envelope = 0.0; } analogue->trigger = gate; waveform1 = (int) *ports[PORT_DCO1_WAVEFORM]; waveform2 = (int) *ports[PORT_DCO2_WAVEFORM]; inc1 = inc (*ports[PORT_DCO1_OCTAVE], *ports[PORT_FREQ], analogue->sample_rate); inc2 = inc (*ports[PORT_DCO2_OCTAVE], *ports[PORT_FREQ], analogue->sample_rate); lfo_inc = 2.0F * PI * *ports[PORT_LFO_FREQ] / analogue->sample_rate; attack1 = multiplier (analogue, *ports[PORT_DCO1_ATTACK]); decay1 = multiplier (analogue, *ports[PORT_DCO1_DECAY]); release1 = multiplier (analogue, *ports[PORT_DCO1_RELEASE]); attack2 = multiplier (analogue, *ports[PORT_DCO2_ATTACK]); decay2 = multiplier (analogue, *ports[PORT_DCO2_DECAY]); release2 = multiplier (analogue, *ports[PORT_DCO2_RELEASE]); filt_attack = multiplier (analogue, *ports[PORT_FILT_ATTACK]); filt_decay = multiplier (analogue, *ports[PORT_FILT_DECAY]); filt_release = multiplier (analogue, *ports[PORT_FILT_RELEASE]); lfo_fadein = 1.0 / (*ports[PORT_LFO_FADEIN] * analogue->sample_rate); dco1_pwm = *analogue->m_ppfPorts[PORT_DCO1_PWM] * 0.225F; dco2_pwm = *analogue->m_ppfPorts[PORT_DCO2_PWM] * 0.225F; dco1_fm = *analogue->m_ppfPorts[PORT_DCO1_FM] * inc1 * 0.45F; dco2_fm = *analogue->m_ppfPorts[PORT_DCO2_FM] * inc2 * 0.45F; filt_lfo_mod = *analogue->m_ppfPorts[PORT_FILT_LFO_MOD] * 0.45F; for (i = 0; i < SampleCount; i++) { LADSPA_Data lfo, sample; analogue->lfo_accum += lfo_inc; while (analogue->lfo_accum >= 2.0F * PI) analogue->lfo_accum -= 2.0F * PI; lfo = fast_sin (analogue->lfo_accum) * analogue->lfo_vol; analogue->lfo_vol += lfo_fadein; if (analogue->lfo_vol >= 1.0F) analogue->lfo_vol = 1.0F; envelope (&analogue->filt_env, gate, filt_attack, filt_decay, *ports[PORT_FILT_SUSTAIN], filt_release); if ((i & 0x000f) == 0) calc_a_b_c (analogue, *ports[PORT_FREQ] * 0.25F + (analogue->filt_env.envelope * *ports[PORT_FILT_ENV_MOD] * *ports[PORT_VELOCITY] * (1.5 + filt_lfo_mod * lfo)) * *ports[PORT_FREQ] * 10.0F, &a, &b, &c); sample = osc (waveform1, inc1 * (1.0 + lfo * dco1_fm), 0.5F + lfo * dco1_pwm, &analogue->dco1_accum) * envelope (&analogue->dco1_env, gate, attack1, decay1, *ports[PORT_DCO1_SUSTAIN], release1) + osc (waveform2, inc2 * (1.0 + lfo * dco2_fm), 0.5F + lfo * dco2_pwm, &analogue->dco2_accum) * envelope (&analogue->dco2_env, gate, attack2, decay2, *ports[PORT_DCO2_SUSTAIN], release2); sample = a * analogue->d1 + b * analogue->d2 + c * *ports[PORT_VELOCITY] * sample; analogue->d2 = analogue->d1; analogue->d1 = sample; ports[PORT_OUT][i] = sample; } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "Out", "Gate", "Velocity", "Frequency (Hz)", "DCO1 Octave", "DCO1 Waveform", "DCO1 LFO Frequency Modulation", "DCO1 LFO Pulse Width Modulation", "DCO1 Attack", "DCO1 Decay", "DCO1 Sustain", "DCO1 Release", "DCO2 Octave", "DCO2 Waveform", "DCO2 LFO Frequency Modulation", "DCO2 LFO Pulse Width Modulation", "DCO2 Attack", "DCO2 Decay", "DCO2 Sustain", "DCO2 Release", "LFO Frequency (Hz)", "LFO Fadein", "Filter Envelope Modulation", "Filter LFO Modulation", "Filter Resonance", "Filter Attack", "Filter Decay", "Filter Sustain", "Filter Release" }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.001, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 10.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 } }; void initialise_analogue() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1221, "analogue", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Analogue Voice", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("2000", "David A. Bartold"), NULL, CMT_Instantiate, Analogue::activate, Analogue::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/canyondelay.cpp000066400000000000000000000144411247673406200230710ustar00rootroot00000000000000/* canyondelay.cpp Canyon Delay - Deep Stereo Cross Delay Copyright (c) 1999, 2000 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_IN_LEFT 0 #define PORT_IN_RIGHT 1 #define PORT_OUT_LEFT 2 #define PORT_OUT_RIGHT 3 #define PORT_LTR_TIME 4 #define PORT_LTR_FEEDBACK 5 #define PORT_RTL_TIME 6 #define PORT_RTL_FEEDBACK 7 #define PORT_CUTOFF 8 #define NUM_PORTS 9 #ifndef PI #define PI 3.14159265358979 #endif class CanyonDelay : public CMT_PluginInstance { LADSPA_Data sample_rate; long datasize; LADSPA_Data *data_l; LADSPA_Data *data_r; LADSPA_Data accum_l; LADSPA_Data accum_r; int pos; public: CanyonDelay(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(NUM_PORTS), sample_rate(s_rate), datasize(s_rate), data_l(new LADSPA_Data[datasize]), data_r(new LADSPA_Data[datasize]), accum_l(0.0), accum_r(0.0), pos(0) { for (long i = 0; i < datasize; i++) data_l[i] = data_r[i] = 0.0; } ~CanyonDelay() { delete[] data_l; delete[] data_r; } static void activate(LADSPA_Handle Instance) { CanyonDelay *delay = (CanyonDelay*) Instance; for (long i = 0; i < delay->datasize; i++) delay->data_l[i] = delay->data_r[i] = 0.0; delay->accum_l = 0.0; delay->accum_r = 0.0; delay->pos = 0; } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { CanyonDelay *delay = (CanyonDelay*) Instance; LADSPA_Data **ports; unsigned long i; int l_to_r_offset, r_to_l_offset; LADSPA_Data ltr_invmag, rtl_invmag; LADSPA_Data filter_mag, filter_invmag; ports = delay->m_ppfPorts; l_to_r_offset = (int) (*ports[PORT_LTR_TIME] * delay->sample_rate); r_to_l_offset = (int) (*ports[PORT_RTL_TIME] * delay->sample_rate); ltr_invmag = 1.0 - fabs (*ports[PORT_LTR_FEEDBACK]); rtl_invmag = 1.0 - fabs (*ports[PORT_RTL_FEEDBACK]); filter_invmag = pow (0.5, (4.0 * PI * *ports[PORT_CUTOFF]) / delay->sample_rate); filter_mag = 1.0 - filter_invmag; for (i = 0; i < SampleCount; i++) { LADSPA_Data accum_l, accum_r; int pos1, pos2; accum_l = ports[PORT_IN_LEFT][i]; accum_r = ports[PORT_IN_RIGHT][i]; pos1 = delay->pos - r_to_l_offset + delay->datasize; while (pos1 >= delay->datasize) pos1 -= delay->datasize; pos2 = delay->pos - l_to_r_offset + delay->datasize; while (pos2 >= delay->datasize) pos2 -= delay->datasize; /* Mix channels with past samples. */ accum_l = accum_l * rtl_invmag + delay->data_r[pos1] * *ports[PORT_RTL_FEEDBACK]; accum_r = accum_r * ltr_invmag + delay->data_l[pos2] * *ports[PORT_LTR_FEEDBACK]; /* Low-pass filter output. */ accum_l = delay->accum_l * filter_invmag + accum_l * filter_mag; accum_r = delay->accum_r * filter_invmag + accum_r * filter_mag; /* Store IIR samples. */ delay->accum_l = accum_l; delay->accum_r = accum_r; /* Store samples in arrays. */ delay->data_l[delay->pos] = accum_l; delay->data_r[delay->pos] = accum_r; ports[PORT_OUT_LEFT][i] = accum_l; ports[PORT_OUT_RIGHT][i] = accum_r; delay->pos++; if (delay->pos >= delay->datasize) delay->pos -= delay->datasize; } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "In (Left)", "In (Right)", "Out (Left)", "Out (Right)", "Left to Right Time (Seconds)", "Left to Right Feedback (Percent)", "Right to Left Time (Seconds)", "Right to Left Feedback (Percent)", "Low-Pass Cutoff (Hz)" }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 0.99 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -1.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 0.99 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -1.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 1.0, 5000.0 } }; void initialise_canyondelay() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1225, "canyon_delay", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Canyon Delay", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("1999, 2000", "David A. Bartold"), NULL, CMT_Instantiate, CanyonDelay::activate, CanyonDelay::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/cmt.cpp000066400000000000000000000135261247673406200213510ustar00rootroot00000000000000/* cmt.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ inline char * localStrdup(const char * input) { char * output = new char[strlen(input) + 1]; strcpy(output, input); return output; } /*****************************************************************************/ CMT_Descriptor:: ~CMT_Descriptor() { if (Label) delete [] Label; if (Name) delete [] Name; if (Maker) delete [] Maker; if (Copyright) delete [] Copyright; if (ImplementationData) delete (CMT_ImplementationData *)ImplementationData; if (PortDescriptors) delete [] PortDescriptors; if (PortNames) { for (unsigned long lIndex = 0; lIndex < PortCount; lIndex++) if (PortNames[lIndex]) delete [] PortNames[lIndex]; delete [] PortNames; } if (PortRangeHints) delete [] PortRangeHints; } /*****************************************************************************/ void CMT_ConnectPort(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { CMT_PluginInstance * poInstance = (CMT_PluginInstance *)Instance; poInstance->m_ppfPorts[Port] = DataLocation; } /*****************************************************************************/ void CMT_Cleanup(LADSPA_Handle Instance) { CMT_PluginInstance * poInstance = (CMT_PluginInstance *)Instance; delete poInstance; } /*****************************************************************************/ CMT_Descriptor:: CMT_Descriptor(unsigned long lUniqueID, const char * pcLabel, LADSPA_Properties iProperties, const char * pcName, const char * pcMaker, const char * pcCopyright, CMT_ImplementationData * poImplementationData, LADSPA_Instantiate_Function fInstantiate, LADSPA_Activate_Function fActivate, LADSPA_Run_Function fRun, LADSPA_Run_Adding_Function fRunAdding, LADSPA_Set_Run_Adding_Gain_Function fSetRunAddingGain, LADSPA_Deactivate_Function fDeactivate) { UniqueID = lUniqueID; Label = localStrdup(pcLabel); Properties = iProperties; Name = localStrdup(pcName); Maker = localStrdup(pcMaker); Copyright = localStrdup(pcCopyright); PortCount = 0; ImplementationData = poImplementationData; instantiate = fInstantiate; connect_port = CMT_ConnectPort; activate = fActivate; run = fRun; run_adding = fRunAdding; set_run_adding_gain = fSetRunAddingGain; deactivate = fDeactivate; cleanup = CMT_Cleanup; }; /*****************************************************************************/ typedef char * char_ptr; void CMT_Descriptor:: addPort(LADSPA_PortDescriptor iPortDescriptor, const char * pcPortName, LADSPA_PortRangeHintDescriptor iHintDescriptor, LADSPA_Data fLowerBound, LADSPA_Data fUpperBound) { unsigned long lOldPortCount = PortCount; unsigned long lNewPortCount = PortCount + 1; LADSPA_PortDescriptor * piOldPortDescriptors = (LADSPA_PortDescriptor *)PortDescriptors; char ** ppcOldPortNames = (char **)PortNames; LADSPA_PortRangeHint * psOldPortRangeHints = (LADSPA_PortRangeHint *)PortRangeHints; LADSPA_PortDescriptor * piNewPortDescriptors = new LADSPA_PortDescriptor[lNewPortCount]; char ** ppcNewPortNames = new char_ptr[lNewPortCount]; LADSPA_PortRangeHint * psNewPortRangeHints = new LADSPA_PortRangeHint[lNewPortCount]; if (piNewPortDescriptors == NULL || ppcNewPortNames == NULL || psNewPortRangeHints == NULL) { /* Memory allocation failure that we cannot handle. Best option is probably just to get out while the going is reasonably good. */ return; } for (unsigned long lPortIndex = 0; lPortIndex < lOldPortCount; lPortIndex++) { piNewPortDescriptors[lPortIndex] = piOldPortDescriptors[lPortIndex]; ppcNewPortNames[lPortIndex] = ppcOldPortNames[lPortIndex]; psNewPortRangeHints[lPortIndex] = psOldPortRangeHints[lPortIndex]; } if (lOldPortCount > 0) { delete [] piOldPortDescriptors; delete [] ppcOldPortNames; delete [] psOldPortRangeHints; } piNewPortDescriptors[lOldPortCount] = iPortDescriptor; ppcNewPortNames[lOldPortCount] = localStrdup(pcPortName); psNewPortRangeHints[lOldPortCount].HintDescriptor = iHintDescriptor; psNewPortRangeHints[lOldPortCount].LowerBound = fLowerBound; psNewPortRangeHints[lOldPortCount].UpperBound = fUpperBound; PortDescriptors = piNewPortDescriptors; PortNames = ppcNewPortNames; PortRangeHints = psNewPortRangeHints; PortCount++; } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/cmt.h000066400000000000000000000152601247673406200210130ustar00rootroot00000000000000/* cmt.h Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CMT_BASE_INCLUDED #define CMT_BASE_INCLUDED /*****************************************************************************/ #include "ladspa_types.h" /*****************************************************************************/ /** This class is the baseclass of all CMT plugin implementation data. Baseclassed so virtual destructors can be used. */ class CMT_ImplementationData { public: virtual ~CMT_ImplementationData() { } }; /*****************************************************************************/ /** This structure describes a CMT LADSPA Plugin. It is a direct ancestor of the _LADSPA_Descriptor structure which allows direct casting. A rich constructor function is provided make it easier to write LADSPA_Descriptor objects. (Less code is required and the compiler will tell you when you have missed an entry.) An addPort() function makes configuration of ports more straightforward than using the _LADSPA_Descriptor structure directly. */ struct CMT_Descriptor : public _LADSPA_Descriptor { private: CMT_Descriptor &operator=(const CMT_Descriptor &) { return *this; } CMT_Descriptor(const CMT_Descriptor &) { } public: ~CMT_Descriptor(); /** The basic constructor for a CMT_Descriptor object. If you do not know what the parameters mean, please see the fields in the LADSPA_Descriptor structure, described in ladspa.h. Note that some parameters may be NULL. Note also that a template is provided to generate instantiate functions automatically (see CMT_Instantiate<>() below). Implementation data must be NULL if not allocated. */ CMT_Descriptor(unsigned long lUniqueID, const char * pcLabel, LADSPA_Properties iProperties, const char * pcName, const char * pcMaker, const char * pcCopyright, CMT_ImplementationData * poImplementationData, LADSPA_Instantiate_Function fInstantiate, LADSPA_Activate_Function fActivate, LADSPA_Run_Function fRun, LADSPA_Run_Adding_Function fRunAdding, LADSPA_Set_Run_Adding_Gain_Function fSetRunAddingGain, LADSPA_Deactivate_Function fDeactivate); /** This method adds a new port to the descriptor. If you do not know what the parameters mean, please see the fields in the LADSPA_Descriptor structure, described in ladspa.h. */ void addPort(LADSPA_PortDescriptor iPortDescriptor, const char * pcPortName, LADSPA_PortRangeHintDescriptor iHintDescriptor = 0, LADSPA_Data fLowerBound = 0, LADSPA_Data fUpperBound = 0); }; typedef CMT_Descriptor * CMT_Descriptor_ptr; /*****************************************************************************/ /** Each plugin type must register itself with the descriptor registry. This is done by calling the following function, passing a newly allocated structure (that will be cleaned up on library unload automatically). Each module needs to be initialised in order to have a chance to register new plugins. This can be achieved by modifying the list of initialiser functions in descriptor.cpp. */ void registerNewPluginDescriptor(CMT_Descriptor * psDescriptor); /*****************************************************************************/ /** This class is the baseclass of all CMT plugins. It provides functionality to handle LADSPA connect_port() and cleanup() requirements (as long as plugins have correctly written destructors!) A CMT_Instantiate<>() template is provided also, which makes LADSPA instantiate() methods easier to write. Derived classes access port data through the m_ppfPorts[] array. This contains one entry for each port, in the order in which ports were added to the corresponding CMT_Descriptor object. */ class CMT_PluginInstance { private: CMT_PluginInstance &operator=(const CMT_PluginInstance &) { return *this; } CMT_PluginInstance(const CMT_PluginInstance &) { } protected: LADSPA_Data ** m_ppfPorts; CMT_PluginInstance(const unsigned long lPortCount) : m_ppfPorts(new LADSPA_Data_ptr[lPortCount]) { } virtual ~CMT_PluginInstance() { delete [] m_ppfPorts; } friend void CMT_ConnectPort(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation); friend void CMT_Cleanup(LADSPA_Handle Instance); }; /*****************************************************************************/ /** This template can be used to generate functions to instantiate CMT plugins. To be used with this function, the plugin must accept two parameters (a LADSPA_Descriptor pointer and a sample rate). See the SimpleMixer class and mixer_descriptor() in mixer.cpp for a simple example of this: the instantiate function for the mixer class is generated within the mixer_descriptor() function as "CMT_Instantiate". */ template LADSPA_Handle CMT_Instantiate(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { return new T(Descriptor, SampleRate); } /*****************************************************************************/ /** This macro should be used to fill in the `Maker' field in the CMT_Descriptor. */ #define CMT_MAKER(AUTHORS) \ "CMT (http://www.ladspa.org/cmt, plugin by " AUTHORS ")" /** This macro should be used to fill in the `Copyright' field in the CMT_Descriptor. */ #define CMT_COPYRIGHT(YEARS, AUTHORS) \ "(C)" YEARS ", " AUTHORS ". " \ "GNU General Public Licence Version 2 applies." /*****************************************************************************/ #endif /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/delay.cpp000066400000000000000000000236361247673406200216670ustar00rootroot00000000000000/* delay.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ /* This module provides delays and delays with feedback. A variety of maximum delay times are available. (The plugins reserve different amounts of memory space on this basis.) */ /*****************************************************************************/ #include #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ #define DELAY_TYPE_COUNT 2 #define DELAY_LENGTH_COUNT 5 /*****************************************************************************/ #define LIMIT_BETWEEN(x, a, b) \ (((x) < a) ? a : (((x) > b) ? b : (x))) /*****************************************************************************/ #define DL_DELAY_LENGTH 0 #define DL_DRY_WET 1 #define DL_INPUT 2 #define DL_OUTPUT 3 /* Present only on feedback delays: */ #define DL_FEEDBACK 4 /** This class is used to implement delay line plugins. Different maximum delay times are supported as are both echo and feedback delays. */ class DelayLine : public CMT_PluginInstance { private: LADSPA_Data m_fSampleRate; LADSPA_Data m_fMaximumDelay; LADSPA_Data * m_pfBuffer; /** Buffer size, a power of two. */ unsigned long m_lBufferSize; /** Write pointer in buffer. */ unsigned long m_lWritePointer; friend void activateDelayLine(LADSPA_Handle Instance); friend void runSimpleDelayLine(LADSPA_Handle Instance, unsigned long SampleCount); friend void runFeedbackDelayLine(LADSPA_Handle Instance, unsigned long SampleCount); public: DelayLine(const unsigned long lSampleRate, const LADSPA_Data fMaximumDelay) : CMT_PluginInstance(5), m_fSampleRate(LADSPA_Data(lSampleRate)), m_fMaximumDelay(fMaximumDelay) { /* Buffer size is a power of two bigger than max delay time. */ unsigned long lMinimumBufferSize = (unsigned long)((LADSPA_Data)lSampleRate * m_fMaximumDelay); m_lBufferSize = 1; while (m_lBufferSize < lMinimumBufferSize) m_lBufferSize <<= 1; m_pfBuffer = new LADSPA_Data[m_lBufferSize]; } ~DelayLine() { delete [] m_pfBuffer; } }; /*****************************************************************************/ /* Initialise and activate a plugin instance. */ void activateDelayLine(LADSPA_Handle Instance) { DelayLine * poDelayLine = (DelayLine *)Instance; /* Need to reset the delay history in this function rather than instantiate() in case deactivate() followed by activate() have been called to reinitialise a delay line. */ memset(poDelayLine->m_pfBuffer, 0, sizeof(LADSPA_Data) * poDelayLine->m_lBufferSize); poDelayLine->m_lWritePointer = 0; } /*****************************************************************************/ /* Run a delay line instance for a block of SampleCount samples. */ void runSimpleDelayLine(LADSPA_Handle Instance, unsigned long SampleCount) { DelayLine * poDelayLine = (DelayLine *)Instance; unsigned long lBufferSizeMinusOne = poDelayLine->m_lBufferSize - 1; unsigned long lDelay = (unsigned long) (LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DELAY_LENGTH]), 0, poDelayLine->m_fMaximumDelay) * poDelayLine->m_fSampleRate); LADSPA_Data * pfInput = poDelayLine->m_ppfPorts[DL_INPUT]; LADSPA_Data * pfOutput = poDelayLine->m_ppfPorts[DL_OUTPUT]; LADSPA_Data * pfBuffer = poDelayLine->m_pfBuffer; unsigned long lBufferWriteOffset = poDelayLine->m_lWritePointer; unsigned long lBufferReadOffset = lBufferWriteOffset + poDelayLine->m_lBufferSize - lDelay; LADSPA_Data fWet = LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DRY_WET]), 0, 1); LADSPA_Data fDry = 1 - fWet; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInputSample = *(pfInput++); *(pfOutput++) = (fDry * fInputSample + fWet * pfBuffer[((lSampleIndex + lBufferReadOffset) & lBufferSizeMinusOne)]); pfBuffer[((lSampleIndex + lBufferWriteOffset) & lBufferSizeMinusOne)] = fInputSample; } poDelayLine->m_lWritePointer = ((poDelayLine->m_lWritePointer + SampleCount) & lBufferSizeMinusOne); } /*****************************************************************************/ /** Run a feedback delay line instance for a block of SampleCount samples. */ void runFeedbackDelayLine(LADSPA_Handle Instance, unsigned long SampleCount) { DelayLine * poDelayLine = (DelayLine *)Instance; unsigned long lBufferSizeMinusOne = poDelayLine->m_lBufferSize - 1; unsigned long lDelay = (unsigned long) (LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DELAY_LENGTH]), 0, poDelayLine->m_fMaximumDelay) * poDelayLine->m_fSampleRate); LADSPA_Data * pfInput = poDelayLine->m_ppfPorts[DL_INPUT]; LADSPA_Data * pfOutput = poDelayLine->m_ppfPorts[DL_OUTPUT]; LADSPA_Data * pfBuffer = poDelayLine->m_pfBuffer; unsigned long lBufferWriteOffset = poDelayLine->m_lWritePointer; unsigned long lBufferReadOffset = lBufferWriteOffset + poDelayLine->m_lBufferSize - lDelay; LADSPA_Data fWet = LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_DRY_WET]), 0, 1); LADSPA_Data fDry = 1 - fWet; LADSPA_Data fFeedback = LIMIT_BETWEEN(*(poDelayLine->m_ppfPorts[DL_FEEDBACK]), -1, 1); for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInputSample = *(pfInput++); LADSPA_Data &fDelayedSample = pfBuffer[((lSampleIndex + lBufferReadOffset) & lBufferSizeMinusOne)]; *(pfOutput++) = (fDry * fInputSample + fWet * fDelayedSample); pfBuffer[((lSampleIndex + lBufferWriteOffset) & lBufferSizeMinusOne)] = fInputSample + fDelayedSample * fFeedback; } poDelayLine->m_lWritePointer = ((poDelayLine->m_lWritePointer + SampleCount) & lBufferSizeMinusOne); } /*****************************************************************************/ template LADSPA_Handle CMT_Delay_Instantiate(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { return new DelayLine(SampleRate, LADSPA_Data(lMaximumDelayMilliseconds * 0.001)); } /*****************************************************************************/ void initialise_delay() { CMT_Descriptor * psDescriptor; const char * apcDelayTypeNames[DELAY_TYPE_COUNT] = { "Echo", "Feedback" }; const char * apcDelayTypeLabels[DELAY_TYPE_COUNT] = { "delay", "fbdelay" }; LADSPA_Run_Function afRunFunctions[DELAY_TYPE_COUNT] = { runSimpleDelayLine, runFeedbackDelayLine }; LADSPA_Data afMaximumDelays[DELAY_LENGTH_COUNT] = { 0.01, 0.1, 1, 5, 60 }; LADSPA_Instantiate_Function afInstantiateFunctions[DELAY_LENGTH_COUNT] = { CMT_Delay_Instantiate<10>, CMT_Delay_Instantiate<100>, CMT_Delay_Instantiate<1000>, CMT_Delay_Instantiate<5000>, CMT_Delay_Instantiate<60000> }; for (long lDelayTypeIndex = 0; lDelayTypeIndex < DELAY_TYPE_COUNT; lDelayTypeIndex++) { for (long lDelayLengthIndex = 0; lDelayLengthIndex < DELAY_LENGTH_COUNT; lDelayLengthIndex++) { long lPluginIndex = lDelayTypeIndex * DELAY_LENGTH_COUNT + lDelayLengthIndex; char acLabel[100]; sprintf(acLabel, "%s_%gs", apcDelayTypeLabels[lDelayTypeIndex], afMaximumDelays[lDelayLengthIndex]); char acName[100]; sprintf(acName, "%s Delay Line (Maximum Delay %gs)", apcDelayTypeNames[lDelayTypeIndex], afMaximumDelays[lDelayLengthIndex]); psDescriptor = new CMT_Descriptor (1053 + lPluginIndex, acLabel, LADSPA_PROPERTY_HARD_RT_CAPABLE, acName, CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, afInstantiateFunctions[lDelayLengthIndex], activateDelayLine, afRunFunctions[lDelayTypeIndex], NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Delay (Seconds)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1), 0, afMaximumDelays[lDelayLengthIndex]); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Dry/Wet Balance", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); if (lDelayTypeIndex == 1) psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Feedback", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH), -1, 1); registerNewPluginDescriptor(psDescriptor); } } } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/descriptor.cpp000066400000000000000000000071741247673406200227460ustar00rootroot00000000000000/* descriptor.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ /* This module contains code providing and supporting the CMT_Descriptor() function that provides hosts with initial access to LADSPA plugins. ALL PLUGINS MUST BE REGISTERED IN THIS FILE (see below). */ /*****************************************************************************/ /* Module Initialisation: ---------------------- */ void initialise_am(); void initialise_ambisonic(); void initialise_amp(); void initialise_analogue(); void initialise_canyondelay(); void initialise_delay(); void initialise_dynamic(); void initialise_filter(); void initialise_freeverb3(); void initialise_grain(); void initialise_lofi(); void initialise_mixer(); void initialise_noise(); void initialise_null(); void initialise_organ(); void initialise_peak(); void initialise_phasemod(); void initialise_sine(); void initialise_syndrum(); void initialise_vcf303(); void initialise_wshape_sine(); namespace hardgate { void initialise(); } namespace disintegrator { void initialise(); } namespace pink { void initialise(); } namespace pink_full { void initialise(); } namespace pink_sh { void initialise(); } namespace sledgehammer { void initialise(); } namespace logistic { void initialise(); } /** This function should initialise all modules in the library. This will lead to all plugin descriptors being registered. If you write a new plugin you should initialise it here. If the module has structures it wishes to remove also then these should be included in finalise_modules(). */ void initialise_modules() { initialise_am(); initialise_ambisonic(); initialise_amp(); initialise_analogue(); initialise_canyondelay(); initialise_delay(); initialise_dynamic(); initialise_filter(); initialise_freeverb3(); initialise_grain(); initialise_lofi(); initialise_mixer(); initialise_noise(); initialise_null(); initialise_organ(); initialise_peak(); initialise_phasemod(); initialise_sine(); initialise_syndrum(); initialise_vcf303(); initialise_wshape_sine(); hardgate::initialise(); disintegrator::initialise(); pink::initialise(); pink_full::initialise(); pink_sh::initialise(); sledgehammer::initialise(); logistic::initialise(); } /*****************************************************************************/ /* Module Finalisation: -------------------- */ void finalise_sine(); /** Finalise any structures allocated by the modules. This does not include descriptors passed to registerNewPluginDescriptor(). */ void finalise_modules() { finalise_sine(); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/disintegrator.cpp000066400000000000000000000077641247673406200234530ustar00rootroot00000000000000/* disintegrator.cpp (c) 2002 Nathaniel Virgo Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" #include "run_adding.h" /*****************************************************************************/ namespace disintegrator { enum { port_probability = 0, port_multiplier = 1, port_input = 2, port_output = 3, n_ports = 4 }; /** This plugin multiplies random half-waveforms by port_multiplier, with probability port_probability */ class Plugin : public CMT_PluginInstance { LADSPA_Data run_adding_gain; bool active; LADSPA_Data last_input; public: Plugin(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(n_ports) { active = false; last_input = 0.0f; } template friend void run(LADSPA_Handle instance, unsigned long sample_count); friend void set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data new_gain); }; template void run(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; LADSPA_Data prob = *pp->m_ppfPorts[port_probability]; LADSPA_Data mult = *pp->m_ppfPorts[port_multiplier]; LADSPA_Data * in = pp->m_ppfPorts[port_input]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; mult *= get_gain(p.run_adding_gain); for ( unsigned long i = 0; i < sample_count ; ++i ) { LADSPA_Data insig = *(in++); if ( ( p.last_input>0 && insig<0 ) || ( p.last_input<0 && insig>0 ) ) p.active = rand() < prob*RAND_MAX; p.last_input = insig; if (p.active) write_output(out, insig*mult, 1.0f); else write_output(out, insig, p.run_adding_gain); } } void set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data new_gain) { ((Plugin *) instance)->run_adding_gain = new_gain; } void initialise() { CMT_Descriptor * d = new CMT_Descriptor (1846, "disintegrator", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Disintegrator", CMT_MAKER("Nathaniel Virgo"), CMT_COPYRIGHT("2002", "Nathaniel Virgo"), NULL, CMT_Instantiate, NULL, run, run, set_run_adding_gain, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Probability", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0), 0, 1); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Multiplier", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0), -1, 1); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/dynamic.cpp000066400000000000000000000557101247673406200222130ustar00rootroot00000000000000/* dynamic.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ /* This module provides unsophisticated implementations of compressor, expander and limiter plugins. Note that attack and decay times are applied at the LEVEL DETECTION stage rather than at gain processing (the reason no noise gate is provided). No delay is applied to the main signal. These are useful (and efficient) tools and extended compressors should probably allocate new IDs rather than break compatibility in parameter set and sound for this set. */ // Having said this, I'm not sure the attack/decay parameters are the // right way around. /*****************************************************************************/ #include #include #include /*****************************************************************************/ #include "cmt.h" #include "utils.h" /*****************************************************************************/ class DynamicProcessor { protected: /** This state variable is used to track the input envelope (peak or rms). The state is stored here so that the run function can perform low-pass filtering to produce a smoothed envelope. */ LADSPA_Data m_fEnvelopeState; /** The sample rate in the world this instance exists in. */ LADSPA_Data m_fSampleRate; DynamicProcessor(const LADSPA_Data fSampleRate) : m_fSampleRate(fSampleRate) { } }; /*****************************************************************************/ #define CE_THRESHOLD 0 #define CE_RATIO 1 #define CE_ATTACK 2 #define CE_DECAY 3 #define CE_INPUT 4 #define CE_OUTPUT 5 /** This class is used to implement simple compressor and expander plugins. Attack and decay times are applied at the level detection stage rather than at gain processing. No delay is applied to the main signal. Both peak and RMS support is included. */ class CompressorExpander : public CMT_PluginInstance, public DynamicProcessor { public: CompressorExpander(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(6), DynamicProcessor(lSampleRate) { } friend void activateCompressorExpander(void * pvHandle); friend void runCompressor_Peak(LADSPA_Handle Instance, unsigned long SampleCount); friend void runCompressor_RMS(LADSPA_Handle Instance, unsigned long SampleCount); friend void runExpander_Peak(LADSPA_Handle Instance, unsigned long SampleCount); friend void runExpander_RMS(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define LN_THRESHOLD 0 #define LN_ATTACK 1 #define LN_DECAY 2 #define LN_INPUT 3 #define LN_OUTPUT 4 /** This class is used to implement simple limiter plugins. Attack and decay times are applied at the level detection stage rather than at gain processing. No delay is applied to the main signal. Both peak and RMS support is included. */ class Limiter : public CMT_PluginInstance, public DynamicProcessor { public: Limiter(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(5), DynamicProcessor(lSampleRate) { } friend void activateLimiter(void * pvHandle); friend void runLimiter_Peak(LADSPA_Handle Instance, unsigned long SampleCount); friend void runLimiter_RMS(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void activateCompressorExpander(void * pvHandle) { CompressorExpander * poProcessor = (CompressorExpander *)pvHandle; poProcessor->m_fEnvelopeState = 0; } /*****************************************************************************/ void activateLimiter(void * pvHandle) { Limiter * poProcessor = (Limiter *)pvHandle; poProcessor->m_fEnvelopeState = 0; } /*****************************************************************************/ void runCompressor_Peak(LADSPA_Handle Instance, unsigned long SampleCount) { CompressorExpander * poProcessor = (CompressorExpander *)Instance; LADSPA_Data fThreshold = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), 0); LADSPA_Data fOneOverThreshold = 1 / fThreshold; LADSPA_Data fRatioMinusOne = *(poProcessor->m_ppfPorts[CE_RATIO]) - 1; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[CE_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[CE_OUTPUT]; LADSPA_Data fEnvelopeDrag_Attack = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), poProcessor->m_fSampleRate); LADSPA_Data fEnvelopeDrag_Decay = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), poProcessor->m_fSampleRate); LADSPA_Data &rfEnvelopeState = poProcessor->m_fEnvelopeState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fabs(fInput); if (fEnvelopeTarget > rfEnvelopeState) rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); else rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); /* Perform the mapping. This questions this plugin's claim of being `hard-realtime.' */ LADSPA_Data fGain; if (rfEnvelopeState < fThreshold) fGain = 1; else { fGain = pow(rfEnvelopeState * fOneOverThreshold, fRatioMinusOne); if (isnan(fGain)) fGain = 0; } /* Perform output. */ *(pfOutput++) = fInput * fGain; } } /*****************************************************************************/ void runCompressor_RMS(LADSPA_Handle Instance, unsigned long SampleCount) { CompressorExpander * poProcessor = (CompressorExpander *)Instance; LADSPA_Data fThreshold = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), 0); LADSPA_Data fOneOverThreshold = 1 / fThreshold; LADSPA_Data fRatioMinusOne = *(poProcessor->m_ppfPorts[CE_RATIO]) - 1; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[CE_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[CE_OUTPUT]; LADSPA_Data fEnvelopeDrag_Attack = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), poProcessor->m_fSampleRate); LADSPA_Data fEnvelopeDrag_Decay = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), poProcessor->m_fSampleRate); LADSPA_Data &rfEnvelopeState = poProcessor->m_fEnvelopeState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fInput * fInput; if (fEnvelopeTarget > rfEnvelopeState) rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); else rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); LADSPA_Data fEnvelopeAmplitude = sqrt(rfEnvelopeState); /* Perform the mapping. This questions this plugin's claim of being `hard-realtime.' */ LADSPA_Data fGain; if (fEnvelopeAmplitude < fThreshold) fGain = 1; else { fGain = pow(fEnvelopeAmplitude * fOneOverThreshold, fRatioMinusOne); if (isnan(fGain)) fGain = 0; } /* Perform output. */ *(pfOutput++) = fInput * fGain; } } /*****************************************************************************/ void runExpander_Peak(LADSPA_Handle Instance, unsigned long SampleCount) { CompressorExpander * poProcessor = (CompressorExpander *)Instance; LADSPA_Data fThreshold = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), 0); LADSPA_Data fOneOverThreshold = 1 / fThreshold; LADSPA_Data fOneMinusRatio = 1 - *(poProcessor->m_ppfPorts[CE_RATIO]); LADSPA_Data * pfInput = poProcessor->m_ppfPorts[CE_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[CE_OUTPUT]; LADSPA_Data fEnvelopeDrag_Attack = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), poProcessor->m_fSampleRate); LADSPA_Data fEnvelopeDrag_Decay = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), poProcessor->m_fSampleRate); LADSPA_Data &rfEnvelopeState = poProcessor->m_fEnvelopeState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fabs(fInput); if (fEnvelopeTarget > rfEnvelopeState) rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); else rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); /* Perform the mapping. This questions this plugin's claim of being `hard-realtime.' */ LADSPA_Data fGain; if (rfEnvelopeState > fThreshold) fGain = 1; else { fGain = pow(rfEnvelopeState * fOneOverThreshold, fOneMinusRatio); if (isnan(fGain)) fGain = 0; } /* Perform output. */ *(pfOutput++) = fInput * fGain; } } /*****************************************************************************/ void runExpander_RMS(LADSPA_Handle Instance, unsigned long SampleCount) { CompressorExpander * poProcessor = (CompressorExpander *)Instance; LADSPA_Data fThreshold = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[CE_THRESHOLD]), 0); LADSPA_Data fOneOverThreshold = 1 / fThreshold; LADSPA_Data fOneMinusRatio = 1 - *(poProcessor->m_ppfPorts[CE_RATIO]); LADSPA_Data * pfInput = poProcessor->m_ppfPorts[CE_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[CE_OUTPUT]; LADSPA_Data fEnvelopeDrag_Attack = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), poProcessor->m_fSampleRate); LADSPA_Data fEnvelopeDrag_Decay = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), poProcessor->m_fSampleRate); LADSPA_Data &rfEnvelopeState = poProcessor->m_fEnvelopeState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fInput * fInput; if (fEnvelopeTarget > rfEnvelopeState) rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); else rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); LADSPA_Data fEnvelopeAmplitude = sqrt(rfEnvelopeState); /* Perform the mapping. This questions this plugin's claim of being `hard-realtime.' */ LADSPA_Data fGain; if (fEnvelopeAmplitude > fThreshold) fGain = 1; else { fGain = pow(fEnvelopeAmplitude * fOneOverThreshold, fOneMinusRatio); if (isnan(fGain)) fGain = 0; } /* Perform output. */ *(pfOutput++) = fInput * fGain; } } /*****************************************************************************/ void runLimiter_Peak(LADSPA_Handle Instance, unsigned long SampleCount) { Limiter * poProcessor = (Limiter *)Instance; LADSPA_Data fThreshold = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[LN_THRESHOLD]), 0); LADSPA_Data * pfInput = poProcessor->m_ppfPorts[LN_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[LN_OUTPUT]; LADSPA_Data fEnvelopeDrag_Attack = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), poProcessor->m_fSampleRate); LADSPA_Data fEnvelopeDrag_Decay = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), poProcessor->m_fSampleRate); LADSPA_Data &rfEnvelopeState = poProcessor->m_fEnvelopeState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fabs(fInput); if (fEnvelopeTarget > rfEnvelopeState) rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); else rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); /* Perform the mapping. This questions this plugin's claim of being `hard-realtime.' */ LADSPA_Data fGain; if (rfEnvelopeState < fThreshold) fGain = 1; else { fGain = fThreshold / rfEnvelopeState; if (isnan(fGain)) fGain = 0; } /* Perform output. */ *(pfOutput++) = fInput * fGain; } } /*****************************************************************************/ void runLimiter_RMS(LADSPA_Handle Instance, unsigned long SampleCount) { Limiter * poProcessor = (Limiter *)Instance; LADSPA_Data fThreshold = BOUNDED_BELOW(*(poProcessor->m_ppfPorts[LN_THRESHOLD]), 0); LADSPA_Data * pfInput = poProcessor->m_ppfPorts[LN_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[LN_OUTPUT]; LADSPA_Data fEnvelopeDrag_Attack = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_ATTACK]), poProcessor->m_fSampleRate); LADSPA_Data fEnvelopeDrag_Decay = calculate60dBDrag(*(poProcessor->m_ppfPorts[CE_DECAY]), poProcessor->m_fSampleRate); LADSPA_Data &rfEnvelopeState = poProcessor->m_fEnvelopeState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fInput * fInput; if (fEnvelopeTarget > rfEnvelopeState) rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Attack + fEnvelopeTarget * (1 - fEnvelopeDrag_Attack)); else rfEnvelopeState = (rfEnvelopeState * fEnvelopeDrag_Decay + fEnvelopeTarget * (1 - fEnvelopeDrag_Decay)); LADSPA_Data fEnvelopeAmplitude = sqrt(rfEnvelopeState); /* Perform the mapping. This questions this plugin's claim of being `hard-realtime.' */ LADSPA_Data fGain; if (fEnvelopeAmplitude < fThreshold) fGain = 1; else { fGain = fThreshold / fEnvelopeAmplitude; if (isnan(fGain)) fGain = 0; } /* Perform output. */ *(pfOutput++) = fInput * fGain; } } /*****************************************************************************/ void initialise_dynamic() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1072, "compress_peak", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Simple Compressor (Peak Envelope Tracking)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateCompressorExpander, runCompressor_Peak, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Compression Ratio", (LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Decay (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1073, "compress_rms", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Simple Compressor (RMS Envelope Tracking)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateCompressorExpander, runCompressor_RMS, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Compression Ratio", (LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Decay (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1074, "expand_peak", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Simple Expander (Peak Envelope Tracking)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateCompressorExpander, runExpander_Peak, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Expansion Ratio", (LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Decay (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1075, "expand_rms", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Simple Expander (RMS Envelope Tracking)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateCompressorExpander, runExpander_RMS, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Expansion Ratio", (LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Decay (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1076, "limit_peak", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Simple Limiter (Peak Envelope Tracking)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateLimiter, runLimiter_Peak, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Decay (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1077, "limit_rms", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Simple Limiter (RMS Envelope Tracking)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateLimiter, runLimiter_RMS, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Output Envelope Decay (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.1f); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/filter.cpp000066400000000000000000000174021247673406200220500ustar00rootroot00000000000000/* filter.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ #define SF_CUTOFF 0 #define SF_INPUT 1 #define SF_OUTPUT 2 /** Instance data for the OnePoll filter (one-poll, low or high pass). We can get away with using this structure for both low- and high-pass filters because the data stored is the same. Note that the actual run() calls differ however. */ class OnePollFilter : public CMT_PluginInstance { private: LADSPA_Data m_fSampleRate; LADSPA_Data m_fTwoPiOverSampleRate; LADSPA_Data m_fLastOutput; LADSPA_Data m_fLastCutoff; LADSPA_Data m_fAmountOfCurrent; LADSPA_Data m_fAmountOfLast; public: OnePollFilter(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(3), m_fSampleRate(LADSPA_Data(lSampleRate)), m_fTwoPiOverSampleRate(LADSPA_Data((2 * M_PI) / lSampleRate)), m_fLastCutoff(0), m_fAmountOfCurrent(0), m_fAmountOfLast(0) { } friend void activateOnePollFilter(LADSPA_Handle Instance); friend void runOnePollLowPassFilter(LADSPA_Handle Instance, unsigned long SampleCount); friend void runOnePollHighPassFilter(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void activateOnePollFilter(LADSPA_Handle Instance) { ((OnePollFilter *)Instance)->m_fLastOutput = 0; } /*****************************************************************************/ /** Run the LPF algorithm for a block of SampleCount samples. */ void runOnePollLowPassFilter(LADSPA_Handle Instance, unsigned long SampleCount) { OnePollFilter * poFilter = (OnePollFilter *)Instance; LADSPA_Data * pfInput = poFilter->m_ppfPorts[SF_INPUT]; LADSPA_Data * pfOutput = poFilter->m_ppfPorts[SF_OUTPUT]; if (poFilter->m_fLastCutoff != *(poFilter->m_ppfPorts[SF_CUTOFF])) { poFilter->m_fLastCutoff = *(poFilter->m_ppfPorts[SF_CUTOFF]); if (poFilter->m_fLastCutoff <= 0) { /* Reject everything. */ poFilter->m_fAmountOfCurrent = poFilter->m_fAmountOfLast = 0; } else if (poFilter->m_fLastCutoff > poFilter->m_fSampleRate * 0.5) { /* Above Nyquist frequency. Let everything through. */ poFilter->m_fAmountOfCurrent = 1; poFilter->m_fAmountOfLast = 0; } else { poFilter->m_fAmountOfLast = 0; LADSPA_Data fComp = 2 - cos(poFilter->m_fTwoPiOverSampleRate * poFilter->m_fLastCutoff); poFilter->m_fAmountOfLast = fComp - (LADSPA_Data)sqrt(fComp * fComp - 1); poFilter->m_fAmountOfCurrent = 1 - poFilter->m_fAmountOfLast; } } LADSPA_Data fAmountOfCurrent = poFilter->m_fAmountOfCurrent; LADSPA_Data fAmountOfLast = poFilter->m_fAmountOfLast; LADSPA_Data fLastOutput = poFilter->m_fLastOutput; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { *(pfOutput++) = fLastOutput = (fAmountOfCurrent * *(pfInput++) + fAmountOfLast * fLastOutput); } poFilter->m_fLastOutput = fLastOutput; } /*****************************************************************************/ /** Run the HPF algorithm for a block of SampleCount samples. */ void runOnePollHighPassFilter(LADSPA_Handle Instance, unsigned long SampleCount) { OnePollFilter * poFilter = (OnePollFilter *)Instance; LADSPA_Data * pfInput = poFilter->m_ppfPorts[SF_INPUT]; LADSPA_Data * pfOutput = poFilter->m_ppfPorts[SF_OUTPUT]; if (poFilter->m_fLastCutoff != *(poFilter->m_ppfPorts[SF_CUTOFF])) { poFilter->m_fLastCutoff = *(poFilter->m_ppfPorts[SF_CUTOFF]); if (poFilter->m_fLastCutoff <= 0) { /* Let everything through. */ poFilter->m_fAmountOfCurrent = 1; poFilter->m_fAmountOfLast = 0; } else if (poFilter->m_fLastCutoff > poFilter->m_fSampleRate * 0.5) { /* Above Nyquist frequency. Reject everything. */ poFilter->m_fAmountOfCurrent = poFilter->m_fAmountOfLast = 0; } else { poFilter->m_fAmountOfLast = 0; LADSPA_Data fComp = 2 - cos(poFilter->m_fTwoPiOverSampleRate * poFilter->m_fLastCutoff); poFilter->m_fAmountOfLast = fComp - (LADSPA_Data)sqrt(fComp * fComp - 1); poFilter->m_fAmountOfCurrent = 1 - poFilter->m_fAmountOfLast; } } LADSPA_Data fAmountOfCurrent = poFilter->m_fAmountOfCurrent; LADSPA_Data fAmountOfLast = poFilter->m_fAmountOfLast; LADSPA_Data fLastOutput = poFilter->m_fLastOutput; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { fLastOutput = (fAmountOfCurrent * *pfInput + fAmountOfLast * fLastOutput); *(pfOutput++) = *(pfInput++) - fLastOutput; } poFilter->m_fLastOutput = fLastOutput; } /*****************************************************************************/ void initialise_filter() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1051, "lpf", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Low Pass Filter (One Pole)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateOnePollFilter, runOnePollLowPassFilter, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Cutoff Frequency (Hz)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_440), 0, 0.5f); /* Nyquist frequency (half the sample rate) */ psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1052, "hpf", LADSPA_PROPERTY_HARD_RT_CAPABLE, "High Pass Filter (One Pole)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateOnePollFilter, runOnePollHighPassFilter, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Cutoff Frequency (Hz)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_440), 0, 0.5f); /* Nyquist frequency (half the sample rate) */ psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/000077500000000000000000000000001247673406200216535ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/000077500000000000000000000000001247673406200240005ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/allpass.cpp000066400000000000000000000007371247673406200261520ustar00rootroot00000000000000// Allpass filter implementation // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // This code is public domain #include "allpass.h" allpass::allpass() { bufidx = 0; } void allpass::setbuffer(float *buf, int size) { buffer = buf; bufsize = size; } void allpass::mute() { for (int i=0; i=bufsize) bufidx = 0; return output; } #endif//_allpass //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/comb.cpp000066400000000000000000000011101247673406200254150ustar00rootroot00000000000000// Comb filter implementation // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // This code is public domain #include "comb.h" comb::comb() { filterstore = 0; bufidx = 0; } void comb::setbuffer(float *buf, int size) { buffer = buf; bufsize = size; } void comb::mute() { for (int i=0; i=bufsize) bufidx = 0; return output; } #endif //_comb_ //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/denormals.h000066400000000000000000000007611247673406200261410ustar00rootroot00000000000000// Macro for killing denormalled numbers // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // Based on IS_DENORMAL macro by Jon Watte // This code is public domain #ifndef _denormals_ #define _denormals_ /*#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f*/ static void inline undenormalise(float *sample) { if (((*(unsigned int*)sample) & 0x7f800000) == 0) *sample = 0.0f; } #endif//_denormals_ //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.cpp000066400000000000000000000123131247673406200263210ustar00rootroot00000000000000// Reverb model implementation // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // This code is public domain #include "revmodel.h" revmodel::revmodel() { // Tie the components to their buffers combL[0].setbuffer(bufcombL1,combtuningL1); combR[0].setbuffer(bufcombR1,combtuningR1); combL[1].setbuffer(bufcombL2,combtuningL2); combR[1].setbuffer(bufcombR2,combtuningR2); combL[2].setbuffer(bufcombL3,combtuningL3); combR[2].setbuffer(bufcombR3,combtuningR3); combL[3].setbuffer(bufcombL4,combtuningL4); combR[3].setbuffer(bufcombR4,combtuningR4); combL[4].setbuffer(bufcombL5,combtuningL5); combR[4].setbuffer(bufcombR5,combtuningR5); combL[5].setbuffer(bufcombL6,combtuningL6); combR[5].setbuffer(bufcombR6,combtuningR6); combL[6].setbuffer(bufcombL7,combtuningL7); combR[6].setbuffer(bufcombR7,combtuningR7); combL[7].setbuffer(bufcombL8,combtuningL8); combR[7].setbuffer(bufcombR8,combtuningR8); allpassL[0].setbuffer(bufallpassL1,allpasstuningL1); allpassR[0].setbuffer(bufallpassR1,allpasstuningR1); allpassL[1].setbuffer(bufallpassL2,allpasstuningL2); allpassR[1].setbuffer(bufallpassR2,allpasstuningR2); allpassL[2].setbuffer(bufallpassL3,allpasstuningL3); allpassR[2].setbuffer(bufallpassR3,allpasstuningR3); allpassL[3].setbuffer(bufallpassL4,allpasstuningL4); allpassR[3].setbuffer(bufallpassR4,allpasstuningR4); // Set default values allpassL[0].setfeedback(0.5f); allpassR[0].setfeedback(0.5f); allpassL[1].setfeedback(0.5f); allpassR[1].setfeedback(0.5f); allpassL[2].setfeedback(0.5f); allpassR[2].setfeedback(0.5f); allpassL[3].setfeedback(0.5f); allpassR[3].setfeedback(0.5f); setwet(initialwet); setroomsize(initialroom); setdry(initialdry); setdamp(initialdamp); setwidth(initialwidth); setmode(initialmode); // Buffer will be full of rubbish - so we MUST mute them mute(); } void revmodel::mute() { int i; if (getmode() >= freezemode) return; for (i=0;i 0) { outL = outR = 0; input = (*inputL + *inputR) * gain; // Accumulate comb filters in parallel for(i=0; i 0) { outL = outR = 0; input = (*inputL + *inputR) * gain; // Accumulate comb filters in parallel for(i=0; i= freezemode) { roomsize1 = 1; damp1 = 0; gain = muted; } else { roomsize1 = roomsize; damp1 = damp; gain = fixedgain; } for(i=0; i= freezemode) return 1; else return 0; } //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/revmodel.h000066400000000000000000000041761247673406200257760ustar00rootroot00000000000000// Reverb model declaration // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // This code is public domain #ifndef _revmodel_ #define _revmodel_ #include "comb.h" #include "allpass.h" #include "tuning.h" class revmodel { public: revmodel(); void mute(); void processmix(float *inputL, float *inputR, float *outputL, float *outputR, long numsamples, int skip); void processreplace(float *inputL, float *inputR, float *outputL, float *outputR, long numsamples, int skip); void setroomsize(float value); float getroomsize(); void setdamp(float value); float getdamp(); void setwet(float value); float getwet(); void setdry(float value); float getdry(); void setwidth(float value); float getwidth(); void setmode(float value); float getmode(); private: void update(); private: float gain; float roomsize,roomsize1; float damp,damp1; float wet,wet1,wet2; float dry; float width; float mode; // The following are all declared inline // to remove the need for dynamic allocation // with its subsequent error-checking messiness // Comb filters comb combL[numcombs]; comb combR[numcombs]; // Allpass filters allpass allpassL[numallpasses]; allpass allpassR[numallpasses]; // Buffers for the combs float bufcombL1[combtuningL1]; float bufcombR1[combtuningR1]; float bufcombL2[combtuningL2]; float bufcombR2[combtuningR2]; float bufcombL3[combtuningL3]; float bufcombR3[combtuningR3]; float bufcombL4[combtuningL4]; float bufcombR4[combtuningR4]; float bufcombL5[combtuningL5]; float bufcombR5[combtuningR5]; float bufcombL6[combtuningL6]; float bufcombR6[combtuningR6]; float bufcombL7[combtuningL7]; float bufcombR7[combtuningR7]; float bufcombL8[combtuningL8]; float bufcombR8[combtuningR8]; // Buffers for the allpasses float bufallpassL1[allpasstuningL1]; float bufallpassR1[allpasstuningR1]; float bufallpassL2[allpasstuningL2]; float bufallpassR2[allpasstuningR2]; float bufallpassL3[allpasstuningL3]; float bufallpassR3[allpasstuningR3]; float bufallpassL4[allpasstuningL4]; float bufallpassR4[allpasstuningR4]; }; #endif//_revmodel_ //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/Components/tuning.h000066400000000000000000000035671247673406200254700ustar00rootroot00000000000000// Reverb model tuning values // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // This code is public domain #ifndef _tuning_ #define _tuning_ const int numcombs = 8; const int numallpasses = 4; const float muted = 0; const float fixedgain = 0.015f; const float scalewet = 3; const float scaledry = 2; const float scaledamp = 0.4f; const float scaleroom = 0.28f; const float offsetroom = 0.7f; const float initialroom = 0.5f; const float initialdamp = 0.5f; const float initialwet = 1/scalewet; const float initialdry = 0; const float initialwidth = 1; const float initialmode = 0; const float freezemode = 0.5f; const int stereospread = 23; // These values assume 44.1KHz sample rate // they will probably be OK for 48KHz sample rate // but would need scaling for 96KHz (or other) sample rates. // The values were obtained by listening tests. const int combtuningL1 = 1116; const int combtuningR1 = 1116+stereospread; const int combtuningL2 = 1188; const int combtuningR2 = 1188+stereospread; const int combtuningL3 = 1277; const int combtuningR3 = 1277+stereospread; const int combtuningL4 = 1356; const int combtuningR4 = 1356+stereospread; const int combtuningL5 = 1422; const int combtuningR5 = 1422+stereospread; const int combtuningL6 = 1491; const int combtuningR6 = 1491+stereospread; const int combtuningL7 = 1557; const int combtuningR7 = 1557+stereospread; const int combtuningL8 = 1617; const int combtuningR8 = 1617+stereospread; const int allpasstuningL1 = 556; const int allpasstuningR1 = 556+stereospread; const int allpasstuningL2 = 441; const int allpasstuningR2 = 441+stereospread; const int allpasstuningL3 = 341; const int allpasstuningR3 = 341+stereospread; const int allpasstuningL4 = 225; const int allpasstuningR4 = 225+stereospread; #endif//_tuning_ //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/freeverb.cpp000066400000000000000000000132551247673406200241650ustar00rootroot00000000000000/* freeverb.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. Freeverb is also Copyright (C) 2000 Jezar. Richard may be contacted at richard@muse.demon.co.uk. [V1 Ported to LADSPA 15/7/2000 Richard W.E. Furse, V3 ported to CMT 4/11/2000.] This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "../cmt.h" #include "Components/revmodel.h" /*****************************************************************************/ enum { FV_Input1 = 0, FV_Input2, FV_Output1, FV_Output2, FV_Mode, FV_RoomSize, FV_Damping, FV_Wet, FV_Dry, FV_Width, FV_NumPorts }; /*****************************************************************************/ /** This plugin wraps Jezar's Freeverb free reverberation module (version 3). */ class Freeverb3 : public CMT_PluginInstance, public revmodel { public: Freeverb3(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(FV_NumPorts) { /* Richard's note 17/5/2000. Hmm - not sure I like the fact that lSampleRate isn't actually used in this function! */ } friend void activateFreeverb3(LADSPA_Handle Instance); friend void runFreeverb3(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void activateFreeverb3(LADSPA_Handle Instance) { Freeverb3 * poFreeverb = (Freeverb3 *)Instance; poFreeverb->mute(); } /*****************************************************************************/ void runFreeverb3(LADSPA_Handle Instance, const unsigned long SampleCount) { Freeverb3 * poFreeverb = ((Freeverb3 *)Instance); /* Handle control ports. Note that this isn't especially efficient because of the way the update() code works in revmodel.cpp, but at least this approach allows Freeverb to work with almost no code changes. */ if (*(poFreeverb->m_ppfPorts[FV_Mode]) > 0) poFreeverb->setmode(1); else poFreeverb->setmode(0); poFreeverb->setdamp(*(poFreeverb->m_ppfPorts[FV_Damping])); poFreeverb->setwet(*(poFreeverb->m_ppfPorts[FV_Wet])); poFreeverb->setdry(*(poFreeverb->m_ppfPorts[FV_Dry])); poFreeverb->setroomsize(*(poFreeverb->m_ppfPorts[FV_RoomSize])); poFreeverb->setwidth(*(poFreeverb->m_ppfPorts[FV_Width])); /* Connect to audio ports and run. */ poFreeverb->processreplace(poFreeverb->m_ppfPorts[FV_Input1], poFreeverb->m_ppfPorts[FV_Input2], poFreeverb->m_ppfPorts[FV_Output1], poFreeverb->m_ppfPorts[FV_Output2], SampleCount, 1); } /*****************************************************************************/ void initialise_freeverb3() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1123, "freeverb3", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Freeverb (Version 3)", CMT_MAKER("Jezar at Dreampoint, ported by Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Jezar at Dreampoint"), NULL, CMT_Instantiate, activateFreeverb3, runFreeverb3, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Left)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input (Right)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Left)"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output (Right)"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Freeze Mode", (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_0), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Room Size", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Damping", (LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Wet Level", (LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Dry Level", (LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 1); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Width", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 1); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/freeverb/readme.txt000066400000000000000000000155301247673406200236550ustar00rootroot00000000000000Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain ----------------------------------------------------------------------- Written by Jezar at Dreampoint - http://www.dreampoint.co.uk Introduction ------------ Hello. I'll try to keep this "readme" reasonably small. There are few things in the world that I hate more than long "readme" files. Except "coding conventions" - but more on that later... In this zip file you will find two folders of C++ source code: "Components" - Contains files that should clean-compile ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary to make ANY changes to these files to get them to compile, except to make up for inadequacies of certain compilers. These files create three classes - a comb filter, an allpass filter, and a reverb model made up of a number of instances of the filters, with some features to control the filters at a macro level. You will need to link these classes into another program that interfaces with them. The files in the components drawer are completely independant, and can be built without dependancies on anything else. Because of the simple interface, it should be possible to interface these files to any system - VST, DirectX, anything - without changing them AT ALL. "FreeverbVST" - Contains a Steinberg VST implementation of this version of Freeverb, using the components in (surprise) the components folder. It was built on a PC but may compile properly for the Macintosh with no problems. I don't know - I don't have a Macintosh. If you've figured out how to compile the examples in the Steinberg VST Development Kit, then you should easilly figure out how to bring the files into a project and get it working in a few minutes. It should be very simple. Note that this version of Freeverb doesn't contain predelay, or any EQ. I thought that might make it difficult to understand the "reverb" part of the code. Once you figure out how Freeverb works, you should find it trivial to add such features with little CPU overhead. Also, the code in this version of Freeverb has been optimised. This has changed the sound *slightly*, but not significantly compared to how much processing power it saves. Finally, note that there is also a built copy of this version of Freeverb called "Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for the Mac or anything else, then you'll need to build it yourself from the code. Technical Explanation --------------------- Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model. I guess the only reason why it sounds better than other reverbs, is simply because I spent a long while doing listening tests in order to create the values found in "tuning.h". It uses 8 comb filters on both the left and right channels), and you might possibly be able to get away with less if CPU power is a serious constraint for you. It then feeds the result of the reverb through 4 allpass filters on both the left and right channels. These "smooth" the sound. Adding more than four allpasses doesn't seem to add anything significant to the sound, and if you use less, the sound gets a bit "grainy". The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect. Hopefully, you should find the code in the components drawer a model of brevity and clarity. Notice that I don't use any "coding conventions". Personally, I think that coding conventions suck. They are meant to make the code "clearer", but they inevitably do the complete opposite, making the code completely unfathomable. Anyone whose done Windows programming with its - frankly stupid - "Hungarian notation" will know exactly what I mean. Coding conventions typically promote issues that are irrelevant up to the status of appearing supremely important. It may have helped back people in the days when compilers where somewhat feeble in their type-safety, but not in the new millenium with advanced C++ compilers. Imagine if we rewrote the English language to conform to coding conventions. After all, The arguments should be just as valid for the English language as they are for a computer language. For example, we could put a lower-case "n" in front of every noun, a lower-case "p" in front of a persons name, a lower-case "v" in front of every verb, and a lower-case "a" in front of every adjective. Can you imagine what the English language would look like? All in the name of "clarity". It's just as stupid to do this for computer code as it would be to do it for the English language. I hope that the code for Freeverb in the components drawer demonstrates this, and helps start a movement back towards sanity in coding practices. Background ---------- Why is the Freeverb code now public domain? Simple. I only intended to create Freeverb to provide me and my friends with studio-quality reverb for free. I never intended to make any money out of it. However, I simply do not have the time to develop it any further. I'm working on a "concept album" at the moment, and I'll never finish it if I spend any more time programming. In any case, I make more far money as a contract programmer - making Mobile Internet products - than I ever could writing plugins, so it simply doesn't make financial sense for me to spend any more time on it. Rather than give Freeverb to any particular individual or organisation to profit from it, I've decided to give it away to the internet community at large, so that quality, FREE (or at the very least, low-cost) reverbs can be developed for all platforms. Feel free to use the source code for Freeverb in any of your own products, whether they are also available for free, or even if they are commercial - I really don't mind. You may do with the code whatever you wish. If you use it in a product (whether commercial or not), it would be very nice of you, if you were to send me a copy of your product - although I appreciate that this isn't always possible in all circumstances. HOWEVER, please don't bug me with questions about how to use this code. I gave away Freeverb because I don't have time to maintain it. That means I *certainly* don't have time to answer questions about the source code, so please don't email questions to me. I *will* ignore them. If you can't figure the code for Freeverb out - then find somebody who can. I hope that either way, you enjoy experimenting with it. Disclaimer ---------- This software and source code is given away for free, without any warranties of any kind. It has been given away to the internet community as a free gift, so please treat it in the same spirit. I hope this code is useful and interesting to you all! I hope you have lots of fun experimenting with it and make good products! Very best regards, Jezar. Technology Consultant Dreampoint Design and Engineering http://www.dreampoint.co.uk //ends lmms-1.1.3/plugins/LadspaEffect/cmt/src/grain.cpp000066400000000000000000000271241247673406200216650ustar00rootroot00000000000000/* grain.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" #include "utils.h" /*****************************************************************************/ /** Period (in seconds) from which grains are selected. */ #define GRAIN_MAXIMUM_HISTORY 6 #define GRAIN_MAXIMUM_BLOCK 1 /* (seconds) */ #define GRAIN_MAXIMUM_SCATTER (GRAIN_MAXIMUM_HISTORY - GRAIN_MAXIMUM_BLOCK) #define GRAIN_MAXIMUM_LENGTH (GRAIN_MAXIMUM_HISTORY - GRAIN_MAXIMUM_BLOCK) /** What quality should we require when sampling the normal distribution to generate grain counts? */ #define GRAIN_NORMAL_RV_QUALITY 16 /*****************************************************************************/ /** Pointers to this can be used as linked list of grains. */ class Grain { private: long m_lReadPointer; long m_lGrainLength; long m_lAttackTime; long m_lRunTime; bool m_bFinished; LADSPA_Data m_fAttackSlope; LADSPA_Data m_fDecaySlope; public: Grain(const long lReadPointer, const long lGrainLength, const long lAttackTime) : m_lReadPointer(lReadPointer), m_lGrainLength(lGrainLength), m_lAttackTime(lAttackTime), m_lRunTime(0), m_bFinished(false) { if (lAttackTime <= 0) { m_fAttackSlope = 0; m_fDecaySlope = LADSPA_Data(1.0 / lGrainLength); } else { m_fAttackSlope = LADSPA_Data(1.0 / lAttackTime); if (lAttackTime >= lGrainLength) m_fDecaySlope = 0; else m_fDecaySlope = LADSPA_Data(1.0 / (lGrainLength - lAttackTime)); } } bool isFinished() const { return m_bFinished; } /** NULL if end of grain list. */ Grain * m_poNextGrain; void run(const unsigned long lSampleCount, float * pfOutput, const float * pfHistoryBuffer, const unsigned long lHistoryBufferSize) { LADSPA_Data fAmp; if (m_lRunTime < m_lAttackTime) fAmp = m_fAttackSlope * m_lRunTime; else fAmp = m_fDecaySlope * (m_lGrainLength - m_lRunTime); for (unsigned long lSampleIndex = 0; lSampleIndex < lSampleCount; lSampleIndex++) { if (fAmp < 0) { m_bFinished = true; break; } *(pfOutput++) += fAmp * pfHistoryBuffer[m_lReadPointer]; m_lReadPointer = (m_lReadPointer + 1) & (lHistoryBufferSize - 1); if (m_lRunTime < m_lAttackTime) fAmp += m_fAttackSlope; else fAmp -= m_fDecaySlope; m_lRunTime++; } } }; /*****************************************************************************/ #define GRN_INPUT 0 #define GRN_OUTPUT 1 #define GRN_DENSITY 2 #define GRN_SCATTER 3 #define GRN_GRAIN_LENGTH 4 #define GRN_GRAIN_ATTACK 5 /** This plugin cuts an audio stream up and uses it to generate a granular texture. */ class GrainScatter : public CMT_PluginInstance { private: Grain * m_poCurrentGrains; long m_lSampleRate; LADSPA_Data * m_pfBuffer; /** Buffer size, a power of two. */ unsigned long m_lBufferSize; /** Write pointer in buffer. */ unsigned long m_lWritePointer; public: GrainScatter(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(6), m_poCurrentGrains(NULL), m_lSampleRate(lSampleRate) { /* Buffer size is a power of two bigger than max delay time. */ unsigned long lMinimumBufferSize = (unsigned long)((LADSPA_Data)lSampleRate * GRAIN_MAXIMUM_HISTORY); m_lBufferSize = 1; while (m_lBufferSize < lMinimumBufferSize) m_lBufferSize <<= 1; m_pfBuffer = new LADSPA_Data[m_lBufferSize]; } ~GrainScatter() { delete [] m_pfBuffer; } friend void activateGrainScatter(LADSPA_Handle Instance); friend void runGrainScatter(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ /** Initialise and activate a plugin instance. */ void activateGrainScatter(LADSPA_Handle Instance) { GrainScatter * poGrainScatter = (GrainScatter *)Instance; /* Need to reset the delay history in this function rather than instantiate() in case deactivate() followed by activate() have been called to reinitialise a delay line. */ memset(poGrainScatter->m_pfBuffer, 0, sizeof(LADSPA_Data) * poGrainScatter->m_lBufferSize); poGrainScatter->m_lWritePointer = 0; } /*****************************************************************************/ void runGrainScatter(LADSPA_Handle Instance, unsigned long SampleCount) { GrainScatter * poGrainScatter = (GrainScatter *)Instance; LADSPA_Data * pfInput = poGrainScatter->m_ppfPorts[GRN_INPUT]; LADSPA_Data * pfOutput = poGrainScatter->m_ppfPorts[GRN_OUTPUT]; unsigned long lMaximumSampleCount = (unsigned long)(poGrainScatter->m_lSampleRate * GRAIN_MAXIMUM_BLOCK); if (SampleCount > lMaximumSampleCount) { /* We're beyond our capabilities. We're going to run out of delay line for a large grain. Divide and conquer. */ runGrainScatter(Instance, lMaximumSampleCount); poGrainScatter->m_ppfPorts[GRN_INPUT] += lMaximumSampleCount; poGrainScatter->m_ppfPorts[GRN_OUTPUT] += lMaximumSampleCount; runGrainScatter(Instance, SampleCount - lMaximumSampleCount); poGrainScatter->m_ppfPorts[GRN_INPUT] = pfInput; poGrainScatter->m_ppfPorts[GRN_OUTPUT] = pfOutput; } else { /* Move the delay line along. */ if (poGrainScatter->m_lWritePointer + SampleCount > poGrainScatter->m_lBufferSize) { memcpy(poGrainScatter->m_pfBuffer + poGrainScatter->m_lWritePointer, pfInput, sizeof(LADSPA_Data) * (poGrainScatter->m_lBufferSize - poGrainScatter->m_lWritePointer)); memcpy(poGrainScatter->m_pfBuffer, pfInput + (poGrainScatter->m_lBufferSize - poGrainScatter->m_lWritePointer), sizeof(LADSPA_Data) * (SampleCount - (poGrainScatter->m_lBufferSize - poGrainScatter->m_lWritePointer))); } else { memcpy(poGrainScatter->m_pfBuffer + poGrainScatter->m_lWritePointer, pfInput, sizeof(LADSPA_Data) * SampleCount); } poGrainScatter->m_lWritePointer = ((poGrainScatter->m_lWritePointer + SampleCount) & (poGrainScatter->m_lBufferSize - 1)); /* Empty the output buffer. */ memset(pfOutput, 0, SampleCount * sizeof(LADSPA_Data)); /* Process current grains. */ Grain ** ppoGrainReference = &(poGrainScatter->m_poCurrentGrains); while (*ppoGrainReference != NULL) { (*ppoGrainReference)->run(SampleCount, pfOutput, poGrainScatter->m_pfBuffer, poGrainScatter->m_lBufferSize); if ((*ppoGrainReference)->isFinished()) { Grain *poNextGrain = (*ppoGrainReference)->m_poNextGrain; delete *ppoGrainReference; *ppoGrainReference = poNextGrain; } else { ppoGrainReference = &((*ppoGrainReference)->m_poNextGrain); } } LADSPA_Data fSampleRate = LADSPA_Data(poGrainScatter->m_lSampleRate); LADSPA_Data fDensity = BOUNDED_BELOW(*(poGrainScatter->m_ppfPorts[GRN_DENSITY]), 0); /* We want to average fDensity new grains per second. We need to use a RNG to generate a new grain count from the fraction of a second we are dealing with. Use a normal distribution and choose standard deviation also to be fDensity. This could be separately parameterised but any guarantees could be confusing given that individual grains are uniformly distributed within the block. Note that fDensity isn't quite grains/sec as we discard negative samples from the RV. */ double dGrainCountRV_Mean = fDensity * SampleCount / fSampleRate; double dGrainCountRV_SD = dGrainCountRV_Mean; double dGrainCountRV = sampleNormalDistribution(dGrainCountRV_Mean, dGrainCountRV_SD, GRAIN_NORMAL_RV_QUALITY); unsigned long lNewGrainCount = 0; if (dGrainCountRV > 0) lNewGrainCount = (unsigned long)(0.5 + dGrainCountRV); if (lNewGrainCount > 0) { LADSPA_Data fScatter = BOUNDED(*(poGrainScatter->m_ppfPorts[GRN_SCATTER]), 0, GRAIN_MAXIMUM_SCATTER); LADSPA_Data fGrainLength = BOUNDED_BELOW(*(poGrainScatter->m_ppfPorts[GRN_GRAIN_LENGTH]), 0); LADSPA_Data fAttack = BOUNDED_BELOW(*(poGrainScatter->m_ppfPorts[GRN_GRAIN_ATTACK]), 0); long lScatterSampleWidth = long(fSampleRate * fScatter) + 1; long lGrainLength = long(fSampleRate * fGrainLength); long lAttackTime = long(fSampleRate * fAttack); for (unsigned long lIndex = 0; lIndex < lNewGrainCount; lIndex++) { long lOffset = rand() % SampleCount; long lGrainReadPointer = (poGrainScatter->m_lWritePointer - SampleCount + lOffset - (rand() % lScatterSampleWidth)); while (lGrainReadPointer < 0) lGrainReadPointer += poGrainScatter->m_lBufferSize; lGrainReadPointer &= (poGrainScatter->m_lBufferSize - 1); Grain * poNewGrain = new Grain(lGrainReadPointer, lGrainLength, lAttackTime); poNewGrain->m_poNextGrain = poGrainScatter->m_poCurrentGrains; poGrainScatter->m_poCurrentGrains = poNewGrain; poNewGrain->run(SampleCount - lOffset, pfOutput + lOffset, poGrainScatter->m_pfBuffer, poGrainScatter->m_lBufferSize); } } } } /*****************************************************************************/ void initialise_grain() { CMT_Descriptor * psDescriptor = new CMT_Descriptor (1096, "grain_scatter", 0, "Granular Scatter Processor", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateGrainScatter, runGrainScatter, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Density (Grains/s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 10); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Scatter (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0, GRAIN_MAXIMUM_SCATTER); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Grain Length (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.2); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Grain Attack (s)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 0.05); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/hardgate.cpp000066400000000000000000000057101247673406200223410ustar00rootroot00000000000000/* hardgate.cpp (c) 2002 Nathaniel Virgo Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ namespace hardgate { enum { port_threshold = 0, port_input = 1, port_output = 2, n_ports = 3 }; /** This plugin sets its input signal to 0 if it falls below a threshold. */ class Plugin : public CMT_PluginInstance { public: Plugin(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(n_ports) { } friend void run(LADSPA_Handle instance, unsigned long sample_count); }; void run(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; LADSPA_Data threshold = *pp->m_ppfPorts[port_threshold]; LADSPA_Data * in = pp->m_ppfPorts[port_input]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; for ( unsigned long i = 0; i < sample_count ; ++i ) { LADSPA_Data insig = *(in++); if ( insig < threshold && insig > -threshold ) *(out++) = 0.0f; else *(out++) = insig; } } void initialise() { CMT_Descriptor * d = new CMT_Descriptor (1845, "hard_gate", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Hard Gate", CMT_MAKER("Nathaniel Virgo"), CMT_COPYRIGHT("2002", "Nathaniel Virgo"), NULL, CMT_Instantiate, NULL, run, NULL, NULL, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Threshold", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0), 0, 1); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/init.cpp000066400000000000000000000074741247673406200215360ustar00rootroot00000000000000/* init.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ void initialise_modules(); void finalise_modules(); /*****************************************************************************/ int pluginNameComparator(const void * pvDescriptor1, const void * pvDescriptor2) { const CMT_Descriptor * psDescriptor1 = *(const CMT_Descriptor **)pvDescriptor1; const CMT_Descriptor * psDescriptor2 = *(const CMT_Descriptor **)pvDescriptor2; int iResult = strcmp(psDescriptor1->Name, psDescriptor2->Name); if (iResult < 0) return -1; else if (iResult > 0) return 1; else return 0; } /*****************************************************************************/ CMT_Descriptor ** g_ppsRegisteredDescriptors = NULL; unsigned long g_lPluginCapacity = 0; unsigned long g_lPluginCount = 0; /*****************************************************************************/ #define CAPACITY_STEP 20 void registerNewPluginDescriptor(CMT_Descriptor * psDescriptor) { if (g_lPluginCapacity == g_lPluginCount) { /* Full. Enlarge capacity. */ CMT_Descriptor ** ppsOldDescriptors = g_ppsRegisteredDescriptors; g_ppsRegisteredDescriptors = new CMT_Descriptor_ptr[g_lPluginCapacity + CAPACITY_STEP]; if (g_lPluginCapacity > 0) { memcpy(g_ppsRegisteredDescriptors, ppsOldDescriptors, g_lPluginCapacity * sizeof(CMT_Descriptor_ptr)); delete [] ppsOldDescriptors; } g_lPluginCapacity += CAPACITY_STEP; } g_ppsRegisteredDescriptors[g_lPluginCount++] = psDescriptor; } /*****************************************************************************/ /** A global object of this class is used to perform initialisation and shutdown services for the entire library. The constructor is run when the library is loaded and the destructor when it is unloaded. */ class StartupShutdownHandler { public: StartupShutdownHandler() { initialise_modules(); qsort(g_ppsRegisteredDescriptors, g_lPluginCount, sizeof(CMT_Descriptor_ptr), pluginNameComparator); } ~StartupShutdownHandler() { if (g_ppsRegisteredDescriptors != NULL) { for (unsigned long lIndex = 0; lIndex < g_lPluginCount; lIndex++) delete g_ppsRegisteredDescriptors[lIndex]; delete [] g_ppsRegisteredDescriptors; } finalise_modules(); } } ; /*****************************************************************************/ extern "C" { const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { static StartupShutdownHandler handler; if (Index < g_lPluginCount) return g_ppsRegisteredDescriptors[Index]; else return NULL; } }; /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/ladspa_types.h000066400000000000000000000047731247673406200227270ustar00rootroot00000000000000/* ladspa_types.h Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CMT_LADSPA_TYPES_INCLUDED #define CMT_LADSPA_TYPES_INCLUDED /*****************************************************************************/ #include /* Compatibility hack for version 1.0. */ #ifndef LADSPA_VERSION_MAJOR #define LADSPA_HINT_DEFAULT_MINIMUM 0x40 #define LADSPA_HINT_DEFAULT_LOW 0x80 #define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 #define LADSPA_HINT_DEFAULT_HIGH 0x100 #define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 #define LADSPA_HINT_DEFAULT_0 0x200 #define LADSPA_HINT_DEFAULT_1 0x240 #define LADSPA_HINT_DEFAULT_100 0x280 #define LADSPA_HINT_DEFAULT_440 0x2C0 #endif /*****************************************************************************/ typedef LADSPA_Handle (*LADSPA_Instantiate_Function) (const struct _LADSPA_Descriptor * Descriptor, unsigned long SampleRate); typedef void (*LADSPA_Connect_Port_Function) (LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation); typedef void (*LADSPA_Activate_Function) (LADSPA_Handle Instance); typedef void (*LADSPA_Run_Function) (LADSPA_Handle Instance, unsigned long SampleCount); typedef void (*LADSPA_Run_Adding_Function) (LADSPA_Handle Instance, unsigned long SampleCount); typedef void (*LADSPA_Set_Run_Adding_Gain_Function) (LADSPA_Handle Instance, LADSPA_Data Gain); typedef void (*LADSPA_Deactivate_Function) (LADSPA_Handle Instance); typedef void (*LADSPA_Cleanup_Function) (LADSPA_Handle Instance); typedef LADSPA_Data * LADSPA_Data_ptr; /*****************************************************************************/ #endif /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/lofi.cpp000066400000000000000000000214101247673406200215060ustar00rootroot00000000000000/* lofi.cpp Lo Fi - Simulate low quality audio equipment Copyright (c) 2001 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_IN_LEFT 0 #define PORT_IN_RIGHT 1 #define PORT_OUT_LEFT 2 #define PORT_OUT_RIGHT 3 #define PORT_CRACKLING 4 #define PORT_OVERLOADING 5 #define PORT_BANDWIDTH 6 #define NUM_PORTS 7 #ifndef PI #define PI 3.14159265358979 #endif #ifndef MIN #define MIN(x,y) ((x)<(y)?(x):(y)) #endif #ifndef MAX #define MAX(x,y) ((x)>(y)?(x):(y)) #endif class Pop { public: float x; float dx; float amp; float pwr; Pop *next; Pop (float dx, float amp, float pwr, Pop *next); ~Pop (); }; Pop::Pop (float _dx, float _amp, float _pwr, Pop *_next) : x (0.0), dx (_dx), amp (_amp), pwr (_pwr), next (_next) { } Pop::~Pop () { delete next; } class Record { public: int rate; int amount; /* 0 -> 100% */ Pop *pops; LADSPA_Data process (LADSPA_Data sample); void setAmount (int _amount); Record (int sample_rate); ~Record (); }; Record::Record (int sample_rate) : rate (sample_rate), amount (0), pops (NULL) { } Record::~Record () { delete pops; } static Pop * record_pop_new (Record *record, Pop *next) { return new Pop ((rand () % 1500 + 500.0) / record->rate, (rand () % 50) / 10000.0, 1.0, next); } static Pop * record_pop_loud_new (Record *record, Pop *next) { return new Pop ((rand () % 500 + 2500.0) / record->rate, (rand () % 100) / 400.0 + 0.5, (rand () % 50) / 20.0, next); } LADSPA_Data Record::process (LADSPA_Data sample) { Pop *pop; Pop **pop_prev; /* Add some crackle */ if (rand () % rate < rate * amount / 4000) pops = record_pop_new (this, pops); /* Add some loud pops */ if (rand () % (rate * 10) < rate * amount / 400000) pops = record_pop_loud_new (this, pops); /* Compute pops */ pop_prev = &pops; pop = *pop_prev; while (pop != NULL) { if (pop->x >= 0.5) sample += (pow ((1.0 - pop->x) * 2.0, pop->pwr) - 0.5) * pop->amp; else sample += (pow (pop->x * 2.0, pop->pwr) - 0.5) * pop->amp; pop->x += pop->dx; if (pop->x > 1.0) { *pop_prev = pop->next; pop->next = NULL; delete pop; } else pop_prev = &pop->next; pop = *pop_prev; } return sample; } void Record::setAmount (int _amount) { amount = _amount; } class Compressor { public: int rate; double amp; double up; double down; float vol; float clamp_hi; float clamp_lo; LADSPA_Data process (LADSPA_Data sample); void setClamp (float clamp); Compressor (int sample_rate, float clamp); }; Compressor::Compressor (int sample_rate, float clamp) : rate (sample_rate), amp (0.5), up (1.0 / pow (0.5, 20.0 / sample_rate)), down (pow (0.5, 50.0 / sample_rate)), vol (0.5), clamp_hi (clamp), clamp_lo (1.0 / clamp) { } LADSPA_Data Compressor::process (LADSPA_Data sample) { sample *= amp; if (fabs (sample) > vol) { amp *= down; if (amp < clamp_lo) amp = clamp_lo; } else { amp *= up; if (amp > clamp_hi) amp = clamp_hi; } return sample; } void Compressor::setClamp (float clamp) { clamp_hi = clamp; clamp_lo = 1.0 / clamp; } static inline LADSPA_Data distort (LADSPA_Data in) { if (in > 0.0F) return (in * 1.0F) / (in + 1.0F) * 2.0F; else return -(-in * 1.0F) / (-in + 1.0F) * 2.0F; } class BandwidthLimit { public: int rate; float x; float dx; void setFreq (float freq); LADSPA_Data process (LADSPA_Data sample); BandwidthLimit (int _rate, float _freq); }; BandwidthLimit::BandwidthLimit (int _rate, float _freq) : rate (_rate), x (0.0), dx (_freq / _rate) { } LADSPA_Data BandwidthLimit::process (LADSPA_Data sample) { if (sample >= x) sample = MIN (x + dx, sample); else sample = MAX (x - dx, sample); x = sample; return sample; } void BandwidthLimit::setFreq (float freq) { dx = freq / rate; } class LoFi : public CMT_PluginInstance { Record *record; Compressor *compressor; BandwidthLimit *bandwidth_l; BandwidthLimit *bandwidth_r; public: LoFi(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance (NUM_PORTS), record (new Record (s_rate * 2)), compressor (new Compressor (s_rate * 2, 1.6)), bandwidth_l (new BandwidthLimit (s_rate, 8000.0)), bandwidth_r (new BandwidthLimit (s_rate, 8000.0)) { } ~LoFi() { delete bandwidth_l; delete bandwidth_r; delete compressor; delete record; } static void activate (LADSPA_Handle Instance) { LoFi *lofi = (LoFi*) Instance; lofi->bandwidth_l->setFreq (8000); lofi->bandwidth_r->setFreq (8000); lofi->compressor->setClamp (1.6); lofi->record->setAmount (0); } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { LoFi *lofi = (LoFi*) Instance; unsigned long i; LADSPA_Data **ports = lofi->m_ppfPorts; LADSPA_Data clamp; lofi->bandwidth_l->setFreq (ports[PORT_BANDWIDTH][0]); lofi->bandwidth_r->setFreq (ports[PORT_BANDWIDTH][0]); if (ports[PORT_OVERLOADING][0] > 99.0) clamp = 100.0; else clamp = 100.0 / (100.0 - ports[PORT_OVERLOADING][0]); lofi->compressor->setClamp (clamp); lofi->record->setAmount ((int) ports[PORT_CRACKLING][0]); for (i = 0; i < SampleCount; i++) { LADSPA_Data sample_l, sample_r; sample_l = ports[PORT_IN_LEFT][i]; sample_r = ports[PORT_IN_RIGHT][i]; sample_l = lofi->compressor->process (sample_l); sample_r = lofi->compressor->process (sample_r); sample_l = lofi->bandwidth_l->process (sample_l); sample_r = lofi->bandwidth_r->process (sample_r); sample_l = distort (sample_l); sample_r = distort (sample_r); sample_l = lofi->record->process (sample_l); sample_r = lofi->record->process (sample_r); ports[PORT_OUT_LEFT][i] = sample_l; ports[PORT_OUT_RIGHT][i] = sample_r; } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "In (Left)", "In (Right)", "Out (Left)", "Out (Right)", "Crackling (%)", "Powersupply Overloading (%)", "Opamp Bandwidth Limiting (Hz)" }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 100.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 100.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 1.0, 10000.0 } }; void initialise_lofi() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1227, "lofi", 0 /* Sorry, this module is not RT capable, run() calls malloc() */, "Lo Fi", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("2001", "David A. Bartold"), NULL, CMT_Instantiate, LoFi::activate, LoFi::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/logistic.cpp000066400000000000000000000077111247673406200224020ustar00rootroot00000000000000/* logistic.cpp A sample-and-hold logistic map control generator (c) 2002 Nathaniel Virgo Part of the Computer Music Toolkit - a library of LADSPA plugins. The Computer Music Toolkit is Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" #include "pinknoise.h" #include "utils.h" /*****************************************************************************/ namespace logistic { enum { port_r = 0, port_frequency = 1, port_output = 2, n_ports = 3 }; /** This plugin uses the logistic map to generate periodic or chaotic control signals. */ class Plugin : public CMT_PluginInstance { private: LADSPA_Data sample_rate; LADSPA_Data x; unsigned counter; public: Plugin(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(n_ports), sample_rate(s_rate) { } ~Plugin() { } friend void activate(LADSPA_Handle instance); friend void run(LADSPA_Handle instance, unsigned long sample_count); }; void activate(LADSPA_Handle instance) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; p.x = 0.3; // arbitrary non-zero value. } void run(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; LADSPA_Data r = *pp->m_ppfPorts[port_r]; LADSPA_Data frequency = *pp->m_ppfPorts[port_frequency]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; frequency = BOUNDED_ABOVE(frequency,p.sample_rate); r = BOUNDED_ABOVE(r,4); unsigned remain = sample_count; if (frequency > 0) { while (remain) { unsigned jump_samples = (remain, activate, run, NULL, NULL, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "\"r\" parameter", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM), 2.9, 3.9999); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Step frequency", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MIDDLE), 0, 0.001); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/mixer.cpp000066400000000000000000000057431247673406200217140ustar00rootroot00000000000000/* mixer.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ /* The port numbers for the plugin: */ #define MIXER_INPUT1 0 #define MIXER_INPUT2 1 #define MIXER_OUTPUT 2 /** This plugin adds two signals together to produce a third. */ class SimpleMixer : public CMT_PluginInstance { public: SimpleMixer(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(3) { } friend void runSimpleMixer(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void runSimpleMixer(LADSPA_Handle Instance, unsigned long SampleCount) { SimpleMixer * poMixer = (SimpleMixer *)Instance; LADSPA_Data * pfInput1 = poMixer->m_ppfPorts[MIXER_INPUT1]; LADSPA_Data * pfInput2 = poMixer->m_ppfPorts[MIXER_INPUT2]; LADSPA_Data * pfOutput = poMixer->m_ppfPorts[MIXER_OUTPUT]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) = *(pfInput1++) + *(pfInput2++); } /*****************************************************************************/ void initialise_mixer() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1071, "mixer", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Mixer (Stereo to Mono)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runSimpleMixer, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input 1"); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input 2"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/noise.cpp000066400000000000000000000076061247673406200217050ustar00rootroot00000000000000/* noise.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ /* The port numbers for the plugin: */ #define NOISE_AMPLITUDE 0 #define NOISE_OUTPUT 1 /** Plugin that provides white noise output. This is provided by calling rand() repeatedly. */ class WhiteNoise : public CMT_PluginInstance { private: LADSPA_Data m_fRunAddingGain; public: WhiteNoise(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(2) { } friend void runWhiteNoise(LADSPA_Handle Instance, unsigned long SampleCount); friend void runWhiteNoiseAdding(LADSPA_Handle Instance, unsigned long SampleCount); friend void setWhiteNoiseRunAddingGain(LADSPA_Handle Instance, LADSPA_Data Gain); }; /*****************************************************************************/ void runWhiteNoise(LADSPA_Handle Instance, unsigned long SampleCount) { WhiteNoise * poNoise = (WhiteNoise *)Instance; LADSPA_Data fAmplitude = *(poNoise->m_ppfPorts[NOISE_AMPLITUDE]); LADSPA_Data fScalar = fAmplitude * LADSPA_Data(2.0 / RAND_MAX); LADSPA_Data * pfOutput = poNoise->m_ppfPorts[NOISE_OUTPUT]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) = rand() * fScalar - fAmplitude; } void runWhiteNoiseAdding(LADSPA_Handle Instance, unsigned long SampleCount) { WhiteNoise * poNoise = (WhiteNoise *)Instance; LADSPA_Data fAmplitude = *(poNoise->m_ppfPorts[NOISE_AMPLITUDE]); LADSPA_Data fScalar = poNoise->m_fRunAddingGain * fAmplitude * LADSPA_Data(2.0 / RAND_MAX); LADSPA_Data * pfOutput = poNoise->m_ppfPorts[NOISE_OUTPUT]; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) += rand() * fScalar - fAmplitude; } void setWhiteNoiseRunAddingGain(LADSPA_Handle Instance, LADSPA_Data Gain) { } /*****************************************************************************/ void initialise_noise() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1069, "noise_source_white", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Noise Source (White)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runWhiteNoise, runWhiteNoiseAdding, setWhiteNoiseRunAddingGain, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Amplitude", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/null.cpp000066400000000000000000000157241247673406200215420ustar00rootroot00000000000000/* null.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ /* The port numbers for the plugin: */ #define NULL_PORT 0 /** This plugin can be used to take care of unwanted connections in a host's plugin network by generating zero data and audio or accepting (but ignoring) data and audio. */ class NullPlugin : public CMT_PluginInstance { public: NullPlugin(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(1) { } friend void runNull_Nop(LADSPA_Handle Instance, unsigned long SampleCount); friend void runNull_OutputAudio(LADSPA_Handle Instance, unsigned long SampleCount); friend void runNull_OutputControl(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ #define IDENTITY_INPUT 0 #define IDENTITY_OUTPUT 1 /* This plugin passes its input to its output. There are audio and control varieties. */ class IdentityPlugin : public CMT_PluginInstance { public: IdentityPlugin(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(2) { } friend void runIdentity_Audio(LADSPA_Handle Instance, unsigned long SampleCount); friend void runIdentity_Control(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void runNull_Nop(LADSPA_Handle Instance, unsigned long SampleCount) { /* Nothing to do. */ } /*****************************************************************************/ void runNull_OutputAudio(LADSPA_Handle Instance, unsigned long SampleCount) { NullPlugin * poPlugin = (NullPlugin *)Instance; memset(poPlugin->m_ppfPorts[NULL_PORT], 0, sizeof(LADSPA_Data) * SampleCount); } /*****************************************************************************/ void runNull_OutputControl(LADSPA_Handle Instance, unsigned long) { NullPlugin * poPlugin = (NullPlugin *)Instance; *(poPlugin->m_ppfPorts[NULL_PORT]) = 0; } /*****************************************************************************/ void runIdentity_Audio(LADSPA_Handle Instance, unsigned long SampleCount) { IdentityPlugin * poPlugin = (IdentityPlugin *)Instance; if (poPlugin->m_ppfPorts[IDENTITY_OUTPUT] != poPlugin->m_ppfPorts[IDENTITY_INPUT]) memcpy(poPlugin->m_ppfPorts[IDENTITY_OUTPUT], poPlugin->m_ppfPorts[IDENTITY_INPUT], sizeof(LADSPA_Data) * SampleCount); } /*****************************************************************************/ void runIdentity_Control(LADSPA_Handle Instance, unsigned long) { IdentityPlugin * poPlugin = (IdentityPlugin *)Instance; *(poPlugin->m_ppfPorts[IDENTITY_OUTPUT]) = *(poPlugin->m_ppfPorts[IDENTITY_INPUT]); } /*****************************************************************************/ void initialise_null() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1083, "null_ci", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Null (Control Input)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runNull_Nop, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Input"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1084, "null_ai", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Null (Audio Input)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runNull_Nop, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1085, "null_co", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Null (Control Output)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runNull_OutputControl, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1086, "null_ao", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Null (Audio Output)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runNull_OutputAudio, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1098, "identity_audio", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Identity (Audio)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runIdentity_Audio, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1099, "identity_control", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Identity (Control)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runIdentity_Control, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/organ.cpp000066400000000000000000000277721247673406200217040ustar00rootroot00000000000000/* organ.cpp Organ - Additive Organ Synthesizer Voice Copyright (c) 1999, 2000 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_OUT 0 #define PORT_GATE 1 #define PORT_VELOCITY 2 #define PORT_FREQ 3 #define PORT_BRASS 4 #define PORT_FLUTE 5 #define PORT_REED 6 #define PORT_HARM0 7 #define PORT_HARM1 8 #define PORT_HARM2 9 #define PORT_HARM3 10 #define PORT_HARM4 11 #define PORT_HARM5 12 #define PORT_ATTACK_LO 13 #define PORT_DECAY_LO 14 #define PORT_SUSTAIN_LO 15 #define PORT_RELEASE_LO 16 #define PORT_ATTACK_HI 17 #define PORT_DECAY_HI 18 #define PORT_SUSTAIN_HI 19 #define PORT_RELEASE_HI 20 #define NUM_PORTS 21 #define RESOLUTION 16384 #ifndef PI #define PI 3.14159265358979 #endif typedef struct Envelope { int envelope_decay; double envelope; Envelope () : envelope_decay (0), envelope (0.0) {} } Envelope; static LADSPA_Data *g_sine_table; static LADSPA_Data *g_triangle_table; static LADSPA_Data *g_pulse_table; static int ref_count; class Organ : CMT_PluginInstance { LADSPA_Data sample_rate; Envelope env0; Envelope env1; unsigned long harm0_accum; unsigned long harm1_accum; unsigned long harm2_accum; unsigned long harm3_accum; unsigned long harm4_accum; unsigned long harm5_accum; public: Organ(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) : CMT_PluginInstance(NUM_PORTS), sample_rate(SampleRate), harm0_accum(0), harm1_accum(0), harm2_accum(0), harm3_accum(0), harm4_accum(0), harm5_accum(0) { if (ref_count++ == 0) { int size = RESOLUTION; int half = size / 2; int slope = size / 10; int i; /* Initialize sine table. */ g_sine_table = new LADSPA_Data[size]; for (i = 0; i < size; i++) g_sine_table[i] = sin ((i * 2.0 * PI) / size) / 6.0; /* Initialize triangle table. */ g_triangle_table = new LADSPA_Data[size]; for (i = 0; i < half; i++) g_triangle_table[i] = (4.0 / size * i - 1.0) / 6.0; for (; i < size; i++) g_triangle_table[i] = (4.0 / size * (size - i) - 1.0) / 6.0; /* Initialize pulse table. */ g_pulse_table = new LADSPA_Data[size]; for (i = 0; i < slope; i++) g_pulse_table[i] = ((double) -i) / slope / 6.0; for (; i < half - slope; i++) g_pulse_table[i] = -1.0 / 6.0; for (; i < half + slope; i++) g_pulse_table[i] = ((double) i - half) / slope / 6.0; for (; i < size - slope; i++) g_pulse_table[i] = 1.0 / 6.0; for (; i < size; i++) g_pulse_table[i] = ((double) size - i) / slope / 6.0; } } ~Organ () { if (--ref_count == 0) { delete[] g_pulse_table; delete[] g_triangle_table; delete[] g_sine_table; } } static inline LADSPA_Data table_pos (LADSPA_Data *table, unsigned long freq_256, unsigned long *accum) { *accum += freq_256; while (*accum >= RESOLUTION * 256) *accum -= RESOLUTION * 256; return table[*accum >> 8]; } static inline LADSPA_Data envelope(Envelope *env, int gate, LADSPA_Data attack, LADSPA_Data decay, LADSPA_Data sustain, LADSPA_Data release) { if (gate) if (env->envelope_decay == 0) { env->envelope += (1.0F - env->envelope) * attack; if (env->envelope >= 0.95F) env->envelope_decay = 1; } else env->envelope += (sustain - env->envelope) * decay; else env->envelope += -env->envelope * release; return env->envelope; } static inline LADSPA_Data multiplier(Organ *organ, LADSPA_Data value) { return 1.0 - pow (0.05, 1.0 / (organ->sample_rate * value)); } static void activate(LADSPA_Handle Instance) { Organ *organ = (Organ*) Instance; organ->env0.envelope_decay = 0; organ->env0.envelope = 0.0; organ->env1.envelope_decay = 0; organ->env1.envelope = 0.0; organ->harm0_accum = 0; organ->harm1_accum = 0; organ->harm2_accum = 0; organ->harm3_accum = 0; organ->harm4_accum = 0; organ->harm5_accum = 0; } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { Organ *organ = (Organ*) Instance; unsigned long i; LADSPA_Data **ports; LADSPA_Data *sine_table; LADSPA_Data *reed_table; LADSPA_Data *flute_table; unsigned long freq_256; unsigned long freq_256_harm0, freq_256_harm1; unsigned long freq_256_harm2, freq_256_harm3; unsigned long freq_256_harm4, freq_256_harm5; double attack0, decay0, release0; double attack1, decay1, release1; int gate; ports = organ->m_ppfPorts; gate = (*ports[PORT_GATE] > 0.0); if (gate == 0) { organ->env0.envelope_decay = 0; organ->env1.envelope_decay = 0; } sine_table = g_sine_table; reed_table = (*ports[PORT_REED] > 0.0) ? g_pulse_table : sine_table; flute_table = (*ports[PORT_FLUTE] > 0.0) ? g_triangle_table : sine_table; freq_256 = (int) (*ports[PORT_FREQ] * ((double) RESOLUTION) / organ->sample_rate * 256.0); freq_256_harm0 = freq_256 / 2; freq_256_harm1 = freq_256; attack0 = multiplier (organ, *ports[PORT_ATTACK_LO]); decay0 = multiplier (organ, *ports[PORT_DECAY_LO]); release0 = multiplier (organ, *ports[PORT_RELEASE_LO]); attack1 = multiplier (organ, *ports[PORT_ATTACK_HI]); decay1 = multiplier (organ, *ports[PORT_DECAY_HI]); release1 = multiplier (organ, *ports[PORT_RELEASE_HI]); if (*ports[PORT_BRASS] > 0.0) { freq_256_harm2 = freq_256 * 2; freq_256_harm3 = freq_256_harm2 * 2; freq_256_harm4 = freq_256_harm3 * 2; freq_256_harm5 = freq_256_harm4 * 2; for (i = 0; i < SampleCount; i++) ports[PORT_OUT][i] = ((table_pos (sine_table, freq_256_harm0, &organ->harm0_accum) * *ports[PORT_HARM0] + table_pos (sine_table, freq_256_harm1, &organ->harm1_accum) * *ports[PORT_HARM1] + table_pos (reed_table, freq_256_harm2, &organ->harm2_accum) * *ports[PORT_HARM2]) * envelope (&organ->env0, gate, attack0, decay0, *ports[PORT_SUSTAIN_LO], release0) + (table_pos (sine_table, freq_256_harm3, &organ->harm3_accum) * *ports[PORT_HARM3] + table_pos (flute_table, freq_256_harm4, &organ->harm4_accum) * *ports[PORT_HARM4] + table_pos (flute_table, freq_256_harm5, &organ->harm5_accum) * *ports[PORT_HARM5]) * envelope (&organ->env1, gate, attack1, decay1, *ports[PORT_SUSTAIN_HI], release1)) * *ports[PORT_VELOCITY]; } else { freq_256_harm2 = freq_256 * 3 / 2; freq_256_harm3 = freq_256 * 2; freq_256_harm4 = freq_256 * 3; freq_256_harm5 = freq_256_harm3 * 2; for (i = 0; i < SampleCount; i++) ports[PORT_OUT][i] = ((table_pos (sine_table, freq_256_harm0, &organ->harm0_accum) * *ports[PORT_HARM0] + table_pos (sine_table, freq_256_harm1, &organ->harm1_accum) * *ports[PORT_HARM1] + table_pos (sine_table, freq_256_harm2, &organ->harm2_accum) * *ports[PORT_HARM2]) * envelope (&organ->env0, gate, attack0, decay0, *ports[PORT_SUSTAIN_LO], release0) + (table_pos (reed_table, freq_256_harm3, &organ->harm3_accum) * *ports[PORT_HARM3] + table_pos (sine_table, freq_256_harm4, &organ->harm4_accum) * *ports[PORT_HARM4] + table_pos (flute_table, freq_256_harm5, &organ->harm5_accum) * *ports[PORT_HARM5]) * envelope (&organ->env1, gate, attack1, decay1, *ports[PORT_SUSTAIN_HI], release1)) * *ports[PORT_VELOCITY]; } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "Out", "Gate", "Velocity", "Frequency (Hz)", "Brass", "Reed", "Flute", "16th Harmonic", "8th Harmonic", "5 1/3rd Harmonic", "4th Harmonic", "2 2/3rd Harmonic", "2nd Harmonic", "Attack Lo (Secs)", "Decay Lo (Secs)", "Sustain Lo (Level)", "Release Lo (Secs)", "Attack Hi (Secs)", "Decay Hi (Secs)", "Sustain Hi (Level)", "Release Hi (Secs)", }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.00, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 1.0 } }; void initialise_organ() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1222, "organ", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Organ", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("1999, 2000", "David A. Bartold"), NULL, CMT_Instantiate, Organ::activate, Organ::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/peak.cpp000066400000000000000000000252761247673406200215130ustar00rootroot00000000000000/* peak.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include /*****************************************************************************/ #include "cmt.h" #include "utils.h" /*****************************************************************************/ #define ET_INPUT 0 #define ET_OUTPUT 1 #define ET_FILTER 2 /** This class is used to provide plugins that perform envelope tracking. Peak and RMS are supported and smoothed or smoothed maximum approaches are available. */ class Tracker : public CMT_PluginInstance { private: LADSPA_Data m_fState; LADSPA_Data m_fSampleRate; public: Tracker(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(3), m_fSampleRate(LADSPA_Data(lSampleRate)) { } friend void activateTracker(void * pvHandle); friend void runEnvelopeTracker_Peak(LADSPA_Handle Instance, unsigned long SampleCount); friend void runEnvelopeTracker_RMS(LADSPA_Handle Instance, unsigned long SampleCount); friend void runEnvelopeTracker_MaxPeak(LADSPA_Handle Instance, unsigned long SampleCount); friend void runEnvelopeTracker_MaxRMS(LADSPA_Handle Instance, unsigned long SampleCount); }; /** This class provides a simple peak monitor that records the highest signal peak present ever. It can be useful to identify clipping cases. */ class PeakMonitor : public CMT_PluginInstance { private: LADSPA_Data m_fState; public: PeakMonitor(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(2) { } friend void activatePeakMonitor(void * pvHandle); friend void runPeakMonitor(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void activateTracker(void * pvHandle) { ((Tracker *)pvHandle)->m_fState = 0; } /*****************************************************************************/ void activatePeakMonitor(void * pvHandle) { ((PeakMonitor *)pvHandle)->m_fState = 0; } /*****************************************************************************/ void runEnvelopeTracker_Peak(LADSPA_Handle Instance, unsigned long SampleCount) { Tracker * poProcessor = (Tracker *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; LADSPA_Data fDrag = *(poProcessor->m_ppfPorts[ET_FILTER]); LADSPA_Data fOneMinusDrag = 1 - fDrag; LADSPA_Data &rfState = poProcessor->m_fState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fabs(fInput); rfState = rfState * fDrag + fEnvelopeTarget * fOneMinusDrag; } *(poProcessor->m_ppfPorts[ET_OUTPUT]) = rfState; } /*****************************************************************************/ void runEnvelopeTracker_RMS(LADSPA_Handle Instance, unsigned long SampleCount) { Tracker * poProcessor = (Tracker *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; LADSPA_Data fDrag = *(poProcessor->m_ppfPorts[ET_FILTER]); LADSPA_Data fOneMinusDrag = 1 - fDrag; LADSPA_Data &rfState = poProcessor->m_fState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fInput * fInput; rfState = rfState * fDrag + fEnvelopeTarget * fOneMinusDrag; } *(poProcessor->m_ppfPorts[ET_OUTPUT]) = sqrt(rfState); } /*****************************************************************************/ void runEnvelopeTracker_MaxPeak(LADSPA_Handle Instance, unsigned long SampleCount) { Tracker * poProcessor = (Tracker *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; LADSPA_Data fDrag = calculate60dBDrag(*(poProcessor->m_ppfPorts[ET_FILTER]), poProcessor->m_fSampleRate); LADSPA_Data &rfState = poProcessor->m_fState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fabs(fInput); if (fEnvelopeTarget > rfState) rfState = fEnvelopeTarget; else { rfState *= fDrag; if (fEnvelopeTarget > rfState) rfState = fEnvelopeTarget; } } *(poProcessor->m_ppfPorts[ET_OUTPUT]) = rfState; } /*****************************************************************************/ void runEnvelopeTracker_MaxRMS(LADSPA_Handle Instance, unsigned long SampleCount) { Tracker * poProcessor = (Tracker *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; LADSPA_Data fDrag = calculate60dBDrag(*(poProcessor->m_ppfPorts[ET_FILTER]), poProcessor->m_fSampleRate); LADSPA_Data &rfState = poProcessor->m_fState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fInput * fInput; if (fEnvelopeTarget > rfState) rfState = fEnvelopeTarget; else { rfState *= fDrag; if (fEnvelopeTarget > rfState) rfState = fEnvelopeTarget; } } *(poProcessor->m_ppfPorts[ET_OUTPUT]) = sqrt(rfState); } /*****************************************************************************/ void runPeakMonitor(LADSPA_Handle Instance, unsigned long SampleCount) { PeakMonitor * poProcessor = (PeakMonitor *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[ET_INPUT]; LADSPA_Data &rfState = poProcessor->m_fState; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) { LADSPA_Data fInput = *(pfInput++); LADSPA_Data fEnvelopeTarget = fabs(fInput); if (rfState < fEnvelopeTarget) rfState = fEnvelopeTarget; } *(poProcessor->m_ppfPorts[ET_OUTPUT]) = rfState; } /*****************************************************************************/ void initialise_peak() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1078, "track_peak", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Envelope Tracker (Peak)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateTracker, runEnvelopeTracker_Peak, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output", LADSPA_HINT_BOUNDED_BELOW, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Smoothing Factor", LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE, 0, 1); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1079, "track_rms", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Envelope Tracker (RMS)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateTracker, runEnvelopeTracker_RMS, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output", LADSPA_HINT_BOUNDED_BELOW, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Smoothing Factor", LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE, 0, 1); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1080, "track_max_peak", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Envelope Tracker (Maximum Peak)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateTracker, runEnvelopeTracker_MaxPeak, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output", LADSPA_HINT_BOUNDED_BELOW, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Envelope Forgetting Factor (s/60dB)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 10); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1081, "track_max_rms", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Envelope Tracker (Maximum RMS)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateTracker, runEnvelopeTracker_MaxRMS, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output", LADSPA_HINT_BOUNDED_BELOW, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Envelope Forgetting Factor (s/60dB)", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MAXIMUM), 0, 10); registerNewPluginDescriptor(psDescriptor); psDescriptor = new CMT_Descriptor (1082, "peak", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Peak Monitor", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000", "Richard W.E. Furse"), NULL, CMT_Instantiate, activatePeakMonitor, runPeakMonitor, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Peak", LADSPA_HINT_BOUNDED_BELOW, 0); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/phasemod.cpp000066400000000000000000000325371247673406200223710ustar00rootroot00000000000000/* phasemod.cpp Phase Modulated Voice - Phase Modulation synthesizer voice Copyright (c) 2001 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_OUT 0 #define PORT_GATE 1 #define PORT_VELOCITY 2 #define PORT_FREQ 3 #define PORT_DCO_MODULATION 4 #define PORT_DCO_OCTAVE 5 #define PORT_DCO_WAVEFORM 6 #define PORT_DCO_ATTACK 7 #define PORT_DCO_DECAY 8 #define PORT_DCO_SUSTAIN 9 #define PORT_DCO_RELEASE 10 #define DCO_MULTIPLIER 7 #define NUM_PORTS 46 #ifndef PI #define PI 3.14159265358979F #endif typedef struct Envelope { int envelope_decay; LADSPA_Data envelope; Envelope () : envelope_decay (0), envelope (0.0) {} } Envelope; class PhaseMod : public CMT_PluginInstance { LADSPA_Data sample_rate; int trigger; Envelope dco_env[6]; LADSPA_Data dco_accum[6]; public: PhaseMod(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) : CMT_PluginInstance(NUM_PORTS), sample_rate (SampleRate), trigger (0) { int i; for (i = 0; i < 6; i++) dco_accum[i] = 0.0; } ~PhaseMod () { } static inline LADSPA_Data tri(LADSPA_Data x) { if (x > 0.75F) x = x - 1.0F; else if (x > 0.25F) x = 0.5F - x; return x * 4.0F; } static inline LADSPA_Data envelope(Envelope *env, int gate, LADSPA_Data attack, LADSPA_Data decay, LADSPA_Data sustain, LADSPA_Data release) { if (gate) if (env->envelope_decay == 0) { env->envelope += (1.0F - env->envelope) * attack; if (env->envelope >= 0.95F) env->envelope_decay = 1; } else env->envelope += (sustain - env->envelope) * decay; else env->envelope += -env->envelope * release; return env->envelope; } static void activate(LADSPA_Handle Instance) { PhaseMod *phasemod = (PhaseMod*) Instance; int i; phasemod->trigger = 0; for (i = 0; i < 6; i++) { phasemod->dco_env[i].envelope_decay = 0; phasemod->dco_env[i].envelope = 0.0; phasemod->dco_accum[i] = 0.0; } } static inline LADSPA_Data osc(int waveform, LADSPA_Data inc, LADSPA_Data phasemod, LADSPA_Data *accum) { LADSPA_Data pos; *accum += inc; while (*accum >= 1.0F) *accum -= 1.0F; pos = *accum + phasemod; while (pos < 0.0F) pos += 1.0F; while (pos > 1.0F) pos -= 1.0F; /* 0 = Sine wave */ if (waveform == 0) return sin (pos * 2.0 * PI); /* 1 = Triangle wave */ else if (waveform == 1) return tri (pos); /* 2 = Square wave */ else if (waveform == 2) return (pos > 0.5) ? 1.0F : -1.0F; /* 3 = Sawtooth wave */ else if (waveform == 3) return pos * 2.0F - 1.0F; /* 4 = Fullwave Rectified Sine wave */ else if (waveform == 4) return fabs (pos * PI); /* 5 = Static */ else return (rand () & 1) ? -1.0F : 1.0F; } static LADSPA_Data calc_inc(LADSPA_Data oct, LADSPA_Data freq, LADSPA_Data sample_rate) { return pow (2.0, oct) * freq / sample_rate; } static inline LADSPA_Data multiplier(PhaseMod *phasemod, LADSPA_Data value) { return 1.0 - pow (0.05, 1.0 / (phasemod->sample_rate * value)); } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { PhaseMod *phasemod = (PhaseMod*) Instance; unsigned long i, j; int gate; int waveform[6]; int store[6]; LADSPA_Data inc[6]; LADSPA_Data attack[6]; LADSPA_Data decay[6]; LADSPA_Data release[6]; LADSPA_Data **ports; LADSPA_Data vol; ports = phasemod->m_ppfPorts; gate = (*ports[PORT_GATE] > 0.0); if (gate == 1 && phasemod->trigger == 0) for (i = 0; i < 6; i++) phasemod->dco_env[i].envelope_decay = 0; phasemod->trigger = gate; for (i = 0; i < 6; i++) { int offset = DCO_MULTIPLIER * i; waveform[i] = (int) *ports[PORT_DCO_WAVEFORM + offset]; inc[i] = calc_inc (*ports[PORT_DCO_OCTAVE + offset], *ports[PORT_FREQ], phasemod->sample_rate); attack[i] = multiplier (phasemod, *ports[PORT_DCO_ATTACK + offset]); decay[i] = multiplier (phasemod, *ports[PORT_DCO_DECAY + offset]); release[i] = multiplier (phasemod, *ports[PORT_DCO_RELEASE + offset]); } j = 1; for (i = 0; i < 5; i++) if (*ports[PORT_DCO_MODULATION + (i + 1) * DCO_MULTIPLIER] < 0.0001) store[i] = 1, j++; else store[i] = 0; store[5] = 1; vol = 1.0 / j; for (i = 0; i < SampleCount; i++) { LADSPA_Data sample; LADSPA_Data prev; sample = 0.0; prev = 1.0; for (j = 0; j < 6; j++) { int offset = DCO_MULTIPLIER * j; prev = envelope (&phasemod->dco_env[j], gate, attack[j], decay[j], *ports[PORT_DCO_SUSTAIN + offset], release[j]) * osc (waveform[j], inc[j], prev * *ports[PORT_DCO_MODULATION + offset], &phasemod->dco_accum[j]) * *ports[PORT_VELOCITY]; if (store[j]) sample += prev; } ports[PORT_OUT][i] = sample * vol; } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "Out", "Gate", "Velocity", "Frequency (Hz)", "DCO1 Modulation", "DCO1 Octave", "DCO1 Waveform", "DCO1 Attack", "DCO1 Decay", "DCO1 Sustain", "DCO1 Release", "DCO2 Modulation", "DCO2 Octave", "DCO2 Waveform", "DCO2 Attack", "DCO2 Decay", "DCO2 Sustain", "DCO2 Release", "DCO3 Modulation", "DCO3 Octave", "DCO3 Waveform", "DCO3 Attack", "DCO3 Decay", "DCO3 Sustain", "DCO3 Release", "DCO4 Modulation", "DCO4 Octave", "DCO4 Waveform", "DCO4 Attack", "DCO4 Decay", "DCO4 Sustain", "DCO4 Release", "DCO5 Modulation", "DCO5 Octave", "DCO5 Waveform", "DCO5 Attack", "DCO5 Decay", "DCO5 Sustain", "DCO5 Release", "DCO6 Modulation", "DCO6 Octave", "DCO6 Waveform", "DCO6 Attack", "DCO6 Decay", "DCO6 Sustain", "DCO6 Release" }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, -2.0, 2.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_INTEGER, -0.1, 5.1 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.01, 8.0 } }; void initialise_phasemod() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1226, "phasemod", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Phase Modulated Voice", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("2001", "David A. Bartold"), NULL, CMT_Instantiate, PhaseMod::activate, PhaseMod::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/pink.cpp000066400000000000000000000161121247673406200215210ustar00rootroot00000000000000/* pink.cpp Interpolated pink noise plugins for use as control signals. (c) 2002 Nathaniel Virgo Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" #include "pinknoise.h" #include "utils.h" /*****************************************************************************/ namespace pink { enum { port_frequency = 0, port_output = 1, n_ports = 2 }; /** This plugin generates a signal which approximates the effect of low-pass filtered pink noise, which makes for an interesting randomly changing control parameter. It should probably use sinc interpolation, but in fact it uses third-order splines, which sound more-or-less okay to me. */ class Plugin : public CMT_PluginInstance { private: LADSPA_Data sample_rate; PinkNoise noise_source; LADSPA_Data *data_points; int first_point; unsigned long counter; float multiplier; // 1/(max counter value) public: Plugin(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(n_ports), sample_rate(s_rate) { data_points = new LADSPA_Data[4]; } ~Plugin() { delete [] data_points; } friend void activate(LADSPA_Handle instance); friend void run_interpolated_audio(LADSPA_Handle instance, unsigned long sample_count); friend void run_interpolated_control(LADSPA_Handle instance, unsigned long sample_count); }; void activate(LADSPA_Handle instance) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; p.noise_source.reset(); for (int i=0; i<4; ++i) p.data_points[i] = p.noise_source.getValue(); p.first_point = 0; p.counter = 0; p.multiplier = 1; } inline float thirdInterp(const float &x, const float &L1,const float &L0, const float &H0,const float &H1) { return L0 + .5f* x*(H0-L1 + x*(H0 + L0*(-2) + L1 + x*( (H0 - L0)*9 + (L1 - H1)*3 + x*((L0 - H0)*15 + (H1 - L1)*5 + x*((H0 - L0)*6 + (L1 - H1)*2 ))))); } void run_interpolated_audio(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; LADSPA_Data frequency = *pp->m_ppfPorts[port_frequency]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; if (frequency<=0) { LADSPA_Data value = thirdInterp( 1 - p.counter*p.multiplier, p.data_points[ p.first_point ], p.data_points[ (p.first_point+1) % 4 ], p.data_points[ (p.first_point+2) % 4 ], p.data_points[ (p.first_point+3) % 4 ] ); for (unsigned long i=0; im_ppfPorts[port_frequency]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; float value = thirdInterp( 1 - p.counter*p.multiplier, p.data_points[ p.first_point ], p.data_points[ (p.first_point+1) % 4 ], p.data_points[ (p.first_point+2) % 4 ], p.data_points[ (p.first_point+3) % 4 ] ); if (frequency>0) { frequency = BOUNDED_ABOVE(frequency, p.sample_rate/sample_count); while (p.counter <= sample_count) { p.data_points[ p.first_point ] = p.noise_source.getValue(); p.first_point = (p.first_point + 1) % 4; p.multiplier = frequency/p.sample_rate; p.counter += (unsigned long)(p.sample_rate/frequency); } p.counter -= (p.counter < sample_count) ? p.counter : sample_count; } *(out)=value; } void initialise() { CMT_Descriptor * d = new CMT_Descriptor (1841, "pink_interpolated_audio", 0, "Pink Noise (Interpolated)", CMT_MAKER("Nathaniel Virgo"), CMT_COPYRIGHT("2002", "Nathaniel Virgo"), NULL, CMT_Instantiate, activate, run_interpolated_audio, NULL, NULL, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Highest frequency", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_1), 0, 1); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); // the following has been commented out because I'm pretty sure that // control-rate outputs don't make sense for the vast majority of hosts. // (SSM being the notable exception) /* d = new CMT_Descriptor (1842, "pink_interpolated_control", 0, "Pink Noise (Interpolated, control rate)", CMT_MAKER("Nathaniel Virgo"), CMT_COPYRIGHT("2002", "Nathaniel Virgo"), NULL, CMT_Instantiate, activate, run_interpolated_control, NULL, NULL, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Highest frequency", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_1), 0, 0.002); // arbitrary low value (sensible for sample_count around 500) d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL, "Output"); registerNewPluginDescriptor(d); */ } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/pink_full.cpp000066400000000000000000000056161247673406200225520ustar00rootroot00000000000000/* pink_full.cpp A full-frequency pink noise generator. (c) 2002 Nathaniel Virgo Part of the Computer Music Toolkit - a library of LADSPA plugins. The Computer Music Toolkit is Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" #include "pinknoise.h" #include "utils.h" /*****************************************************************************/ namespace pink_full { enum { port_output = 0, n_ports = 1 }; /** This plugin generates a signal which approximates pink noise, using the Voss-McCartney algorithm described at www.firstpr.com.au/dsp/pink-noise/ */ class Plugin : public CMT_PluginInstance { private: PinkNoise noise_source; public: Plugin(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(n_ports) { } ~Plugin() { } friend void activate(LADSPA_Handle instance); friend void run(LADSPA_Handle instance, unsigned long sample_count); }; void activate(LADSPA_Handle instance) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; p.noise_source.reset(); } void run(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; LADSPA_Data * out = pp->m_ppfPorts[port_output]; for (unsigned long i=0; i, activate, run, NULL, NULL, NULL); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/pink_sh.cpp000066400000000000000000000074421247673406200222210ustar00rootroot00000000000000/* pink_sh.cpp A sample-and-hold pink noise generator. (c) 2002 Nathaniel Virgo Part of the Computer Music Toolkit - a library of LADSPA plugins. The Computer Music Toolkit is Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "cmt.h" #include "pinknoise.h" #include "utils.h" /*****************************************************************************/ namespace pink_sh { enum { port_frequency = 0, port_output = 1, n_ports = 2 }; /** This plugin generates a signal which approximates stepped (sample-and-hold like) pink noise, using the Voss-McCartney algorithm described at www.firstpr.com.au/dsp/pink-noise/ */ class Plugin : public CMT_PluginInstance { private: LADSPA_Data sample_rate; PinkNoise noise_source; unsigned counter; public: Plugin(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(n_ports), sample_rate(s_rate) { } ~Plugin() { } friend void activate(LADSPA_Handle instance); friend void run(LADSPA_Handle instance, unsigned long sample_count); }; void activate(LADSPA_Handle instance) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; p.noise_source.reset(); p.counter = 0; } void run(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; LADSPA_Data frequency = *pp->m_ppfPorts[port_frequency]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; frequency = BOUNDED_ABOVE(frequency,p.sample_rate); unsigned remain = sample_count; if (frequency > 0) { while (remain) { unsigned jump_samples = (remain, activate, run, NULL, NULL, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Sample and hold frequency", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_1), 0, 0.02); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/pinknoise.h000066400000000000000000000052271247673406200222310ustar00rootroot00000000000000/* pinknoise.h pink noise generating class using the Voss-McCartney algorithm, as described at www.firstpr.com.au/dsp/pink-noise/ (c) 2002 Nathaniel Virgo Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _PINKNOISE_H #define _PINKNOISE_H #include typedef unsigned int CounterType; typedef float DataValue; const int n_generators = 8*sizeof(CounterType); class PinkNoise { private: CounterType counter; DataValue * generators; DataValue last_value; public: PinkNoise() { generators = new DataValue[n_generators]; reset(); } ~PinkNoise() {delete [] generators;}; void reset() { counter = 0; last_value = 0; for (int i=0; i>= 1; index++; // this loop means that the plugins cannot be labelled as // capable of hard real-time performance. } last_value -= generators[index]; generators[index] = 2*(rand()/DataValue(RAND_MAX))-1; last_value += generators[index]; } counter++; return last_value; } inline DataValue getValue() { return getUnscaledValue()/n_generators; } inline DataValue getLastValue() { return last_value/n_generators; } inline DataValue getValue2() { // adding some white noise gets rid of some nulls in the frequency spectrum // but makes the signal spikier, so possibly not so good for control signals. return (getUnscaledValue() + rand()/DataValue(RAND_MAX*0.5)-1)/(n_generators+1); } }; #endif lmms-1.1.3/plugins/LadspaEffect/cmt/src/run_adding.h000066400000000000000000000115571247673406200223470ustar00rootroot00000000000000/* run_adding.h (c) 2002 Nathaniel Virgo a few simple inline functions that can be used with templates to get run_adding for free. Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ /* How to use this --------------- Templates can be used to automatically generate code for both the run and run_adding LADSPA functions. Simply define the plugin's run function as template void run_foo(LADSPA_Handle Instance, unsigned long SampleCount); and in the body of the function use write_output(pfOutput, fValue, poFoo->m_fRunAddingGain); instead of *(pfOutput++) = fValue. and be sure to include a set_run_adding_gain function. then set the LADSPA run function as run_foo; and the run_adding function as run_foo; With -O1 or greater g++ will inline the write_output function, and although the code ends up slightly bigger there is no overhead compared to having two seperate functions. Sometimes the run_adding_gain function can be made more efficient than this - for instance, if the output is multiplied by a gain already then you are doing one more multiplication than necessary on every sample. It's a lot less code to maintain, though, and it should still save some work for the host compared to not having a run_adding function. */ /*****************************************************************************/ #include /*****************************************************************************/ typedef void OutputFunction(LADSPA_Data *&, const LADSPA_Data &, const LADSPA_Data &); inline void write_output_normal(LADSPA_Data *&out, const LADSPA_Data &value, const LADSPA_Data &run_adding_gain) { *(out++) = value; } inline void write_output_adding(LADSPA_Data *&out, const LADSPA_Data &value, const LADSPA_Data &run_adding_gain) { *(out++) += value*run_adding_gain; } /*****************************************************************************/ /* If the plugin has a control-rate ouput then you don't want the write_output function to try to increment the pointer. To achieve this, use write_control(pfOutput, fValue, poFoo->m_fRunAddingGain); instead of just write_output(...); I realise this feels a bit hacky, but it works. */ template inline void write_control(LADSPA_Data *const, const LADSPA_Data &, const LADSPA_Data &); template <> inline void write_control(LADSPA_Data *const out, const LADSPA_Data &value, const LADSPA_Data &run_adding_gain) { *out = value; } template <> inline void write_control(LADSPA_Data *const out, const LADSPA_Data &value, const LADSPA_Data &run_adding_gain) { *out += value*run_adding_gain; } /*****************************************************************************/ /* This next bit is an attempt to facilitate the writing of slightly more efficent run_adding functions without writing two seperate pieces of code. You can say something like LADSPA_Data fOutputGain = ... ; ... fOutputGain *= get_gain(poFoo->m_fRunAddingGain); ... write_output(pfOutput, fValue*fOutputGain, 1.0f); in run_foo. With -O1 or greater g++ should inline the functions and optimise away the multiplies by 1.0f, so in run_foo fOutputGain will be multiplied by m_fRunAddingGain and in run_foo it will be left alone. This does not make for very clear code, sorry about that. See disintegrator.cpp for an example. */ template inline float get_gain(const LADSPA_Data &); template <> inline float get_gain(const LADSPA_Data &) { return 1.0f; } template <> inline float get_gain(const LADSPA_Data &run_adding_gain) { return run_adding_gain; } lmms-1.1.3/plugins/LadspaEffect/cmt/src/sine.cpp000066400000000000000000000233751247673406200215270ustar00rootroot00000000000000/* sine.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ /* Sine table size is given by (1 << SINE_TABLE_BITS). */ #define SINE_TABLE_BITS 14 #define SINE_TABLE_SHIFT (8 * sizeof(unsigned long) - SINE_TABLE_BITS) /*****************************************************************************/ LADSPA_Data * g_pfSineTable = NULL; LADSPA_Data g_fPhaseStepBase = 0; /*****************************************************************************/ void initialise_sine_wavetable() { if (g_pfSineTable == NULL) { long lTableSize = (1 << SINE_TABLE_BITS); double dShift = (double(M_PI) * 2) / lTableSize; g_pfSineTable = new float[lTableSize]; if (g_pfSineTable != NULL) for (long lIndex = 0; lIndex < lTableSize; lIndex++) g_pfSineTable[lIndex] = LADSPA_Data(sin(dShift * lIndex)); } if (g_fPhaseStepBase == 0) { g_fPhaseStepBase = (LADSPA_Data)pow(2, sizeof(unsigned long) * 8); } } /*****************************************************************************/ #define OSC_FREQUENCY 0 #define OSC_AMPLITUDE 1 #define OSC_OUTPUT 2 /* This class provides sine wavetable oscillator plugins. Band-limiting to avoid aliasing is trivial because of the waveform in use. Four versions of the oscillator are provided, allowing the amplitude and frequency inputs of the oscillator to be audio signals rather than controls (for use in AM and FM synthesis). */ class SineOscillator : public CMT_PluginInstance{ private: /* Oscillator state: */ unsigned long m_lPhase; unsigned long m_lPhaseStep; LADSPA_Data m_fCachedFrequency; const LADSPA_Data m_fLimitFrequency; const LADSPA_Data m_fPhaseStepScalar; void setPhaseStepFromFrequency(const LADSPA_Data fFrequency) { if (fFrequency != m_fCachedFrequency) { if (fFrequency >= 0 && fFrequency < m_fLimitFrequency) m_lPhaseStep = (unsigned long)(m_fPhaseStepScalar * fFrequency); else m_lPhaseStep = 0; m_fCachedFrequency = fFrequency; } } public: SineOscillator(const LADSPA_Descriptor *, unsigned long lSampleRate) : CMT_PluginInstance(3), m_lPhaseStep(0), m_fCachedFrequency(0), m_fLimitFrequency(LADSPA_Data(lSampleRate * 0.5)), m_fPhaseStepScalar(LADSPA_Data(g_fPhaseStepBase / lSampleRate)) { } friend void activateSineOscillator(void * pvHandle); friend void runSineOscillator_FreqAudio_AmpAudio(LADSPA_Handle Instance, unsigned long SampleCount); friend void runSineOscillator_FreqAudio_AmpCtrl(LADSPA_Handle Instance, unsigned long SampleCount); friend void runSineOscillator_FreqCtrl_AmpAudio(LADSPA_Handle Instance, unsigned long SampleCount); friend void runSineOscillator_FreqCtrl_AmpCtrl(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void activateSineOscillator(void * pvHandle) { ((SineOscillator *)pvHandle)->m_lPhase = 0; } /*****************************************************************************/ void runSineOscillator_FreqAudio_AmpAudio(LADSPA_Handle Instance, unsigned long SampleCount) { SineOscillator * poSineOscillator = (SineOscillator *)Instance; LADSPA_Data * pfFrequency = poSineOscillator->m_ppfPorts[OSC_FREQUENCY]; LADSPA_Data * pfAmplitude = poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]; LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { /* Extract frequency at this point to guarantee inplace support. */ LADSPA_Data fFrequency = *(pfFrequency++); *(pfOutput++) = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] * *(pfAmplitude++)); poSineOscillator->setPhaseStepFromFrequency(fFrequency); poSineOscillator->m_lPhase += poSineOscillator->m_lPhaseStep; } } /*****************************************************************************/ void runSineOscillator_FreqAudio_AmpCtrl(LADSPA_Handle Instance, unsigned long SampleCount) { SineOscillator * poSineOscillator = (SineOscillator *)Instance; LADSPA_Data fAmplitude = *(poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]); LADSPA_Data * pfFrequency = poSineOscillator->m_ppfPorts[OSC_FREQUENCY]; LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { /* Extract frequency at this point to guarantee inplace support. */ LADSPA_Data fFrequency = *(pfFrequency++); *(pfOutput++) = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] * fAmplitude); poSineOscillator->setPhaseStepFromFrequency(fFrequency); poSineOscillator->m_lPhase += poSineOscillator->m_lPhaseStep; } } /*****************************************************************************/ void runSineOscillator_FreqCtrl_AmpAudio(LADSPA_Handle Instance, unsigned long SampleCount) { SineOscillator * poSineOscillator = (SineOscillator *)Instance; poSineOscillator->setPhaseStepFromFrequency (*(poSineOscillator->m_ppfPorts[OSC_FREQUENCY])); LADSPA_Data * pfAmplitude = poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]; LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { *(pfOutput++) = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] * *(pfAmplitude++)); poSineOscillator->m_lPhase += poSineOscillator->m_lPhaseStep; } } /*****************************************************************************/ void runSineOscillator_FreqCtrl_AmpCtrl(LADSPA_Handle Instance, unsigned long SampleCount) { SineOscillator * poSineOscillator = (SineOscillator *)Instance; LADSPA_Data fAmplitude = *(poSineOscillator->m_ppfPorts[OSC_AMPLITUDE]); poSineOscillator->setPhaseStepFromFrequency (*(poSineOscillator->m_ppfPorts[OSC_FREQUENCY])); LADSPA_Data * pfOutput = poSineOscillator->m_ppfPorts[OSC_OUTPUT]; for (unsigned long lIndex = 0; lIndex < SampleCount; lIndex++) { *(pfOutput++) = (g_pfSineTable[poSineOscillator->m_lPhase >> SINE_TABLE_SHIFT] * fAmplitude); poSineOscillator->m_lPhase += poSineOscillator->m_lPhaseStep; } } /*****************************************************************************/ void initialise_sine() { initialise_sine_wavetable(); const char * apcLabels[] = { "sine_faaa", "sine_faac", "sine_fcaa", "sine_fcac" }; const char * apcNames[] = { "Sine Oscillator (Freq:audio, Amp:audio)", "Sine Oscillator (Freq:audio, Amp:control)", "Sine Oscillator (Freq:control, Amp:audio)", "Sine Oscillator (Freq:control, Amp:control)" }; LADSPA_Run_Function afRunFunction[] = { runSineOscillator_FreqAudio_AmpAudio, runSineOscillator_FreqAudio_AmpCtrl, runSineOscillator_FreqCtrl_AmpAudio, runSineOscillator_FreqCtrl_AmpCtrl }; LADSPA_PortDescriptor piFrequencyPortProperties[] = { LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL }; LADSPA_PortDescriptor piAmplitudePortProperties[] = { LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL }; for (long lPluginIndex = 0; lPluginIndex < 4; lPluginIndex++) { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1063 + lPluginIndex, apcLabels[lPluginIndex], LADSPA_PROPERTY_HARD_RT_CAPABLE, apcNames[lPluginIndex], CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, activateSineOscillator, afRunFunction[lPluginIndex], NULL, NULL, NULL); psDescriptor->addPort (piFrequencyPortProperties[lPluginIndex], "Frequency", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_440), 0, 0.5); psDescriptor->addPort (piAmplitudePortProperties[lPluginIndex], "Amplitude", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } } /*****************************************************************************/ void finalise_sine() { delete [] g_pfSineTable; } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/sledgehammer.cpp000066400000000000000000000120271247673406200232160ustar00rootroot00000000000000/* sledgehammer.cpp "Dynamic Sledgehammer" - a thing to brutally mangle the dynamics of a sound. (c) 2002 Nathaniel Virgo Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" #include "run_adding.h" /*****************************************************************************/ namespace sledgehammer { enum { port_rate = 0, port_mod_infl = 1, // modulator influence port_car_infl = 2, // carrier influence (0 to 1 for compression) port_modulator = 3, port_carrier = 4, port_output = 5, n_ports = 6 }; /** This plugin imposes the dynamics of one sound onto another. It can be seen as a brutal compressor with a sidechain, or as a kind of one-band vocoder. */ class Plugin : public CMT_PluginInstance { LADSPA_Data run_adding_gain; LADSPA_Data running_ms_mod; LADSPA_Data running_ms_car; // current mean square average public: Plugin(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(n_ports) {} friend void activate(LADSPA_Handle instance); template friend void run(LADSPA_Handle instance, unsigned long sample_count); friend void set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data new_gain); }; void activate(LADSPA_Handle instance) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; p.running_ms_mod = 0; p.running_ms_car = 0; } template void run(LADSPA_Handle instance, unsigned long sample_count) { Plugin *pp = (Plugin *) instance; Plugin &p = *pp; LADSPA_Data rate = *pp->m_ppfPorts[port_rate]; LADSPA_Data mod_infl = *pp->m_ppfPorts[port_mod_infl]; LADSPA_Data car_infl = *pp->m_ppfPorts[port_car_infl]; LADSPA_Data * modptr = pp->m_ppfPorts[port_modulator]; LADSPA_Data * carptr = pp->m_ppfPorts[port_carrier]; LADSPA_Data * out = pp->m_ppfPorts[port_output]; for ( unsigned long i = 0; i < sample_count ; ++i ) { LADSPA_Data mod = *(modptr++); LADSPA_Data car = *(carptr++); p.running_ms_mod = p.running_ms_mod*(1-rate) + (mod*mod)*rate; p.running_ms_car = p.running_ms_car*(1-rate) + (car*car)*rate; LADSPA_Data rms_mod = sqrt(p.running_ms_mod); LADSPA_Data rms_car = sqrt(p.running_ms_car); LADSPA_Data outsig = car; if (rms_car>0) outsig *= ((rms_car-0.5)*car_infl+0.5)/rms_car; outsig *= ((rms_mod-0.5)*mod_infl+0.5); write_output(out, outsig ,p.run_adding_gain); } } void set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data new_gain) { ((Plugin *) instance)->run_adding_gain = new_gain; } void initialise() { CMT_Descriptor * d = new CMT_Descriptor (1848, "sledgehammer", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Dynamic Sledgehammer", CMT_MAKER("Nathaniel Virgo"), CMT_COPYRIGHT("2002", "Nathaniel Virgo"), NULL, CMT_Instantiate, activate, run, run, set_run_adding_gain, NULL); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Rate", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE), 0.00001, 0.001); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Modulator influence", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0), -1, 1); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Carrier influence", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1), -1, 1); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Modulator"); d->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Carrier"); d->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(d); } } // end of namespace /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/syndrum.cpp000066400000000000000000000113231247673406200222600ustar00rootroot00000000000000/* syndrum.cpp SynDrum - Drum Synthesizer Copyright (c) 1999, 2000 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_OUT 0 #define PORT_TRIGGER 1 #define PORT_VELOCITY 2 #define PORT_FREQ 3 #define PORT_RESONANCE 4 #define PORT_RATIO 5 #define NUM_PORTS 6 #ifndef PI #define PI 3.14159265358979 #endif class SynDrum : public CMT_PluginInstance { LADSPA_Data sample_rate; LADSPA_Data spring_vel; LADSPA_Data spring_pos; LADSPA_Data env; int last_trigger; public: SynDrum(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(NUM_PORTS), sample_rate(s_rate), spring_vel(0.0F), spring_pos(0.0F), env(0.0F) { } ~SynDrum() { } static void activate(LADSPA_Handle Instance) { SynDrum *syndrum = (SynDrum*) Instance; syndrum->spring_vel = 0.0F; syndrum->spring_pos = 0.0F; syndrum->env = 0.0F; syndrum->last_trigger = 0; } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { SynDrum *syndrum = (SynDrum*) Instance; unsigned long i; int trigger; LADSPA_Data freq_shift; LADSPA_Data factor; LADSPA_Data res; trigger = *syndrum->m_ppfPorts[PORT_TRIGGER] > 0.0; if (trigger == 1 && syndrum->last_trigger == 0) { syndrum->spring_vel = *syndrum->m_ppfPorts[PORT_VELOCITY]; syndrum->env = *syndrum->m_ppfPorts[PORT_VELOCITY]; } syndrum->last_trigger = trigger; factor = 2.0 * PI / syndrum->sample_rate; freq_shift = *syndrum->m_ppfPorts[PORT_FREQ] * *syndrum->m_ppfPorts[PORT_RATIO]; res = pow (0.05, 1.0 / (syndrum->sample_rate * *syndrum->m_ppfPorts[PORT_RESONANCE])); for (i = 0; i < SampleCount; i++) { LADSPA_Data cur_freq; cur_freq = *syndrum->m_ppfPorts[PORT_FREQ] + (syndrum->env * freq_shift); cur_freq *= factor; syndrum->spring_vel -= syndrum->spring_pos * cur_freq; syndrum->spring_pos += syndrum->spring_vel * cur_freq; syndrum->spring_vel *= res; syndrum->env *= res; syndrum->m_ppfPorts[PORT_OUT][i] = syndrum->spring_pos; } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "Out", "Trigger", "Velocity", "Frequency (Hz)", "Resonance", "Frequency Ratio" }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 10.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 20000.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.001, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 10.0 } }; void initialise_syndrum() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1223, "syndrum", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Syn Drum", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("1999, 2000", "David A. Bartold"), NULL, CMT_Instantiate, SynDrum::activate, SynDrum::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/utils.h000066400000000000000000000060251247673406200213670ustar00rootroot00000000000000/* utils.h Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CMT_UTILS_INCLUDED #define CMT_UTILS_INCLUDED /*****************************************************************************/ #include #include /*****************************************************************************/ #include "ladspa_types.h" /*****************************************************************************/ /** The drag setting is arranged so that the gain drops by a factor of 1e3 (60dB) in the time specified. This is a bit of an arbitrary value but ties in with what the user will probably expect from his/her experience with reverb units. */ inline LADSPA_Data calculate60dBDrag(const LADSPA_Data fTime, const LADSPA_Data fSampleRate) { if (fTime <= 0) return 0; else return pow(1e3, -1 / (fTime * fSampleRate)); } /*****************************************************************************/ inline LADSPA_Data BOUNDED_BELOW(const LADSPA_Data fData, const LADSPA_Data fLowerBound) { if (fData <= fLowerBound) return fLowerBound; else return fData; } inline LADSPA_Data BOUNDED_ABOVE(const LADSPA_Data fData, const LADSPA_Data fUpperBound) { if (fData >= fUpperBound) return fUpperBound; else return fData; } inline LADSPA_Data BOUNDED(const LADSPA_Data fData, const LADSPA_Data fLowerBound, const LADSPA_Data fUpperBound) { if (fData <= fLowerBound) return fLowerBound; else if (fData >= fUpperBound) return fUpperBound; else return fData; } /*****************************************************************************/ /* Take a reading from a normal RV. The algorithm works by repeated sampling of the uniform distribution, the lQuality variable giving the number of samples. */ inline double sampleNormalDistribution(const double dMean, const double dStandardDeviation, const long lQuality = 12) { double dValue = 0; for (long lIter = 0; lIter < lQuality; lIter++) dValue += rand(); double dSampleFromNormal01 = (dValue / RAND_MAX) - (lQuality * 0.5); return dMean + dStandardDeviation * dSampleFromNormal01; } /*****************************************************************************/ #endif /* EOF */ lmms-1.1.3/plugins/LadspaEffect/cmt/src/vcf303.cpp000066400000000000000000000133141247673406200215650ustar00rootroot00000000000000/* vcf303.cpp VCF 303 - TB-303 Resonant Filter Copyright (c) 1998 Andy Sloane Copyright (c) 1999, 2000 David A. Bartold Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include #include "cmt.h" #define PORT_IN 0 #define PORT_OUT 1 #define PORT_TRIGGER 2 #define PORT_CUTOFF 3 #define PORT_RESONANCE 4 #define PORT_ENV_MOD 5 #define PORT_DECAY 6 #define NUM_PORTS 7 #ifndef PI #define PI 3.14159265358979 #endif class Vcf303 : public CMT_PluginInstance { LADSPA_Data sample_rate; LADSPA_Data d1, d2, c0; int last_trigger; int envpos; public: Vcf303(const LADSPA_Descriptor *, unsigned long s_rate) : CMT_PluginInstance(NUM_PORTS), sample_rate(s_rate), d1(0.0), d2(0.0), c0(0.0), last_trigger(0), envpos(0) { } ~Vcf303() { } static void activate(LADSPA_Handle Instance) { Vcf303 *vcf303 = (Vcf303*) Instance; vcf303->d1 = 0.0; vcf303->d2 = 0.0; vcf303->c0 = 0.0; vcf303->last_trigger = 0; vcf303->envpos = 0; } static inline void recalc_a_b_c (Vcf303 *filter, LADSPA_Data e0, LADSPA_Data c0, LADSPA_Data resonance, LADSPA_Data *a, LADSPA_Data *b, LADSPA_Data *c) { LADSPA_Data whopping, k; whopping = e0 + c0; k = exp (-whopping / resonance); *a = 2.0 * cos (2.0 * whopping) * k; *b = -k * k; *c = (1.0 - *a - *b) * 0.2; } static void run(LADSPA_Handle Instance, unsigned long SampleCount) { Vcf303 *vcf303 = (Vcf303*) Instance; unsigned long i; LADSPA_Data e0, d, a, b, c; LADSPA_Data decay, resonance; LADSPA_Data **ports; int trigger; /* Update vars given envmod, cutoff, and reso. */ ports = vcf303->m_ppfPorts; e0 = exp (5.613 - 0.8 * *ports[PORT_ENV_MOD] + 2.1553 * *ports[PORT_CUTOFF] - 0.7696 * (1.0 - *ports[PORT_RESONANCE])); e0 *= PI / vcf303->sample_rate; trigger = (*ports[PORT_TRIGGER] > 0.0); if (trigger == 1 && vcf303->last_trigger == 0) { LADSPA_Data e1; e1 = exp (6.109 + 1.5876 * *ports[PORT_ENV_MOD] + 2.1553 * *ports[PORT_CUTOFF] - 1.2 * (1.0 - *ports[PORT_RESONANCE])); e1 *= PI / vcf303->sample_rate; vcf303->c0 = e1 - e0; } vcf303->last_trigger = trigger; /* Update decay given envdecay. */ d = 0.2 + (2.3 * *ports[PORT_DECAY]); d *= vcf303->sample_rate; d = pow (0.1, 1.0 / d); decay = pow (d, 64); /* Update resonance. */ resonance = exp (-1.20 + 3.455 * *ports[PORT_RESONANCE]); recalc_a_b_c (vcf303, e0, vcf303->c0, resonance, &a, &b, &c); for (i = 0; i < SampleCount; i++) { LADSPA_Data sample; sample = a * vcf303->d1 + b * vcf303->d2 + c * ports[PORT_IN][i]; ports[PORT_OUT][i] = sample; vcf303->d2 = vcf303->d1; vcf303->d1 = sample; vcf303->envpos++; if (vcf303->envpos >= 64) { vcf303->envpos = 0; vcf303->c0 *= decay; recalc_a_b_c (vcf303, e0, vcf303->c0, resonance, &a, &b, &c); } } } }; static LADSPA_PortDescriptor g_psPortDescriptors[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT }; static const char * const g_psPortNames[] = { "In", "Out", "Trigger", "Cutoff", "Resonance", "Envelope Modulation", "Decay" }; static LADSPA_PortRangeHint g_psPortRangeHints[] = { /* Hints, Lower bound, Upper bound */ { 0, 0.0, 0.0 }, { 0, 0.0, 0.0 }, { LADSPA_HINT_TOGGLED, 0.0, 0.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 }, { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW, 0.0, 1.0 } }; void initialise_vcf303() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1224, "vcf303", LADSPA_PROPERTY_HARD_RT_CAPABLE, "VCF 303", CMT_MAKER("David A. Bartold"), CMT_COPYRIGHT("1998-2000", "Andy Sloane, David A. Bartold"), NULL, CMT_Instantiate, Vcf303::activate, Vcf303::run, NULL, NULL, NULL); for (int i = 0; i < NUM_PORTS; i++) psDescriptor->addPort( g_psPortDescriptors[i], g_psPortNames[i], g_psPortRangeHints[i].HintDescriptor, g_psPortRangeHints[i].LowerBound, g_psPortRangeHints[i].UpperBound); registerNewPluginDescriptor(psDescriptor); } lmms-1.1.3/plugins/LadspaEffect/cmt/src/wshape_sine.cpp000066400000000000000000000062331247673406200230700ustar00rootroot00000000000000/* wshape_sine.cpp Computer Music Toolkit - a library of LADSPA plugins. Copyright (C) 2000-2002 Richard W.E. Furse. The author may be contacted at richard@muse.demon.co.uk. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /*****************************************************************************/ #include #include /*****************************************************************************/ #include "cmt.h" /*****************************************************************************/ #define WSS_CONTROL 0 #define WSS_INPUT 1 #define WSS_OUTPUT 2 /** This plugin applies a gain to a mono signal. */ class SineWaveshaper : public CMT_PluginInstance { public: SineWaveshaper(const LADSPA_Descriptor *, unsigned long) : CMT_PluginInstance(3) { } friend void runSineWaveshaper(LADSPA_Handle Instance, unsigned long SampleCount); }; /*****************************************************************************/ void runSineWaveshaper(LADSPA_Handle Instance, unsigned long SampleCount) { SineWaveshaper * poProcessor = (SineWaveshaper *)Instance; LADSPA_Data * pfInput = poProcessor->m_ppfPorts[WSS_INPUT]; LADSPA_Data * pfOutput = poProcessor->m_ppfPorts[WSS_OUTPUT]; LADSPA_Data fLimit = *(poProcessor->m_ppfPorts[WSS_CONTROL]); LADSPA_Data fOneOverLimit = 1 / fLimit; for (unsigned long lSampleIndex = 0; lSampleIndex < SampleCount; lSampleIndex++) *(pfOutput++) = fLimit * sin(*(pfInput++) * fOneOverLimit); } /*****************************************************************************/ void initialise_wshape_sine() { CMT_Descriptor * psDescriptor; psDescriptor = new CMT_Descriptor (1097, "wshape_sine", LADSPA_PROPERTY_HARD_RT_CAPABLE, "Wave Shaper (Sine-Based)", CMT_MAKER("Richard W.E. Furse"), CMT_COPYRIGHT("2000-2002", "Richard W.E. Furse"), NULL, CMT_Instantiate, NULL, runSineWaveshaper, NULL, NULL, NULL); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, "Limiting Amplitude", (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1), 0, 0); psDescriptor->addPort (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, "Input"); psDescriptor->addPort (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, "Output"); registerNewPluginDescriptor(psDescriptor); } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/logo.png000066400000000000000000000062311247673406200201510ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/LadspaEffect/swh/000077500000000000000000000000001247673406200173025ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/AUTHORS000066400000000000000000000010751247673406200203550ustar00rootroot00000000000000In no particular order: Steve Harris - general stuff Frank Neumann - documentation, proofreading, DSP code Juhana Sadeharju - DSP code Joern Nettingsmeier - DSP code, bug reports and inspiration Mark Knecht - testesting, docuementation Pascal Haakmat - bugfixes, testing Marcus Andersson - DSP code Paul Winkler - documentation Matthias Nagorni - testing, inspiration Nathaniel Virgo - bugfixes Patrick Shirkey - testing, inspiration Project maintainted by Steve Harris, Southampton UK. steve@plugin.org.uk or swh@ecs.soton.ac.uk Plugin website at http://plugin.org.uk/ lmms-1.1.3/plugins/LadspaEffect/swh/CMakeLists.txt000066400000000000000000000061451247673406200220500ustar00rootroot00000000000000ADD_DEFINITIONS(-DFFTW3) INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}" ${FFTW3F_INCLUDE_DIRS} "${CMAKE_BINARY_DIR}") LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(-lfftw3f) FILE(GLOB PLUGIN_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.c") FOREACH(_item ${PLUGIN_SOURCES}) GET_FILENAME_COMPONENT(_plugin "${_item}" NAME_WE) ADD_LIBRARY("${_plugin}" MODULE "${_item}") INSTALL(TARGETS "${_plugin}" LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES PREFIX "") SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES COMPILE_FLAGS "-O3 -Wall -fomit-frame-pointer -fstrength-reduce -funroll-loops -ffast-math -c -fno-strict-aliasing") IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET "${_plugin}" POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll\"") ELSE(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -fPIC -DPIC") ENDIF(LMMS_BUILD_WIN32) IF(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Bsymbolic -lm") ELSE(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined -Wl,-Bsymbolic -lm") ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_LINUX) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") ENDIF(LMMS_BUILD_LINUX) ENDFOREACH(_item ${PLUGIN_SOURCES}) IF(LMMS_BUILD_WIN32) SET(PIC_FLAGS "") ELSE(LMMS_BUILD_WIN32) SET(PIC_FLAGS "-fPIC") ENDIF(LMMS_BUILD_WIN32) ADD_LIBRARY(iir STATIC util/iir.c) SET_TARGET_PROPERTIES(iir PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(bandpass_a_iir_1893 iir) TARGET_LINK_LIBRARIES(bandpass_iir_1892 iir) TARGET_LINK_LIBRARIES(butterworth_1902 iir) TARGET_LINK_LIBRARIES(highpass_iir_1890 iir) TARGET_LINK_LIBRARIES(lowpass_iir_1891 iir) TARGET_LINK_LIBRARIES(notch_iir_1894 iir) FILE(GLOB GSM_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/gsm/*.c") ADD_LIBRARY(gsm STATIC ${GSM_SOURCES}) SET_TARGET_PROPERTIES(gsm PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(gsm_1215 gsm) ADD_LIBRARY(gverb STATIC gverb/gverb.c gverb/gverbdsp.c) SET_TARGET_PROPERTIES(gverb PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(gverb_1216 gverb) ADD_LIBRARY(blo STATIC util/blo.c) SET_TARGET_PROPERTIES(blo PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(hermes_filter_1200 blo) ADD_LIBRARY(rms STATIC util/rms.c) ADD_LIBRARY(db STATIC util/db.c) SET_TARGET_PROPERTIES(rms PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") SET_TARGET_PROPERTIES(db PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(sc1_1425 rms db) TARGET_LINK_LIBRARIES(sc2_1426 rms db) TARGET_LINK_LIBRARIES(sc3_1427 rms db) TARGET_LINK_LIBRARIES(sc4_1882 rms db) TARGET_LINK_LIBRARIES(sc4m_1916 rms db) TARGET_LINK_LIBRARIES(se4_1883 rms db) ADD_LIBRARY(pitchscale STATIC util/pitchscale.c) SET_TARGET_PROPERTIES(pitchscale PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(pitch_scale_1193 pitchscale) TARGET_LINK_LIBRARIES(pitch_scale_1194 pitchscale) lmms-1.1.3/plugins/LadspaEffect/swh/COPYING000066400000000000000000000431101247673406200203340ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. lmms-1.1.3/plugins/LadspaEffect/swh/NEWS000066400000000000000000000000001247673406200177670ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/README000066400000000000000000000016531247673406200201670ustar00rootroot00000000000000Compiling ~~~~~~~~~ You will need libfftw version 2 or 3 installed with 32 bit float support (eg. for FFTW3 use --enable-float), for FFTW recommend you specify the approriate SIMD isntruction set for your CPU with --enable-sse, --enable-sse2, --enable-k7 or --enable-altivec. You can get FFTW from http://www.fftw.org/. Install with ./configure make su -c "make install". This code is normally built from XML source, using Perl and XML::Parser. I distribute the generated .c files, so you wont need perl, but if you want to edit the XML source then you will need a copy of Perl and XML::Parser installed. Homepage and docs ~~~~~~~~~~~~~~~~~ The homepage for this project is http://plugin.org.uk/ Bug reports ~~~~~~~~~~~ Please send bug reports or comments to steve@plugin.org.uk, except for bugs relating to the gverb plugin, for that please send bug reports etc. to Juhana Sadeharju, kouhia_at_nic.funet.fi. Enjoy, Steve lmms-1.1.3/plugins/LadspaEffect/swh/alias_1407.c000066400000000000000000000142361247673406200212200ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define ALIAS_LEVEL 0 #define ALIAS_INPUT 1 #define ALIAS_OUTPUT 2 static LADSPA_Descriptor *aliasDescriptor = NULL; typedef struct { LADSPA_Data *level; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Alias; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return aliasDescriptor; default: return NULL; } } static void cleanupAlias(LADSPA_Handle instance) { free(instance); } static void connectPortAlias( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Alias *plugin; plugin = (Alias *)instance; switch (port) { case ALIAS_LEVEL: plugin->level = data; break; case ALIAS_INPUT: plugin->input = data; break; case ALIAS_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateAlias( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Alias *plugin_data = (Alias *)malloc(sizeof(Alias)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAlias(LADSPA_Handle instance, unsigned long sample_count) { Alias *plugin_data = (Alias *)instance; /* Aliasing level (float value) */ const LADSPA_Data level = *(plugin_data->level); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "alias_1407.xml" unsigned long pos; float coef = 1.0f - 2.0f * level; if (output != input) { for (pos = 0; pos < sample_count; pos+=2) { buffer_write(output[pos], input[pos]); } } for (pos = 1; pos < sample_count; pos+=2) { buffer_write(output[pos], input[pos] * coef); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAlias(LADSPA_Handle instance, LADSPA_Data gain) { ((Alias *)instance)->run_adding_gain = gain; } static void runAddingAlias(LADSPA_Handle instance, unsigned long sample_count) { Alias *plugin_data = (Alias *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Aliasing level (float value) */ const LADSPA_Data level = *(plugin_data->level); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "alias_1407.xml" unsigned long pos; float coef = 1.0f - 2.0f * level; if (output != input) { for (pos = 0; pos < sample_count; pos+=2) { buffer_write(output[pos], input[pos]); } } for (pos = 1; pos < sample_count; pos+=2) { buffer_write(output[pos], input[pos] * coef); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif aliasDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (aliasDescriptor) { aliasDescriptor->UniqueID = 1407; aliasDescriptor->Label = "alias"; aliasDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; aliasDescriptor->Name = D_("Aliasing"); aliasDescriptor->Maker = "Steve Harris "; aliasDescriptor->Copyright = "GPL"; aliasDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); aliasDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); aliasDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); aliasDescriptor->PortNames = (const char **)port_names; /* Parameters for Aliasing level */ port_descriptors[ALIAS_LEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALIAS_LEVEL] = D_("Aliasing level"); port_range_hints[ALIAS_LEVEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[ALIAS_LEVEL].LowerBound = 0; port_range_hints[ALIAS_LEVEL].UpperBound = 1; /* Parameters for Input */ port_descriptors[ALIAS_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[ALIAS_INPUT] = D_("Input"); port_range_hints[ALIAS_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[ALIAS_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[ALIAS_OUTPUT] = D_("Output"); port_range_hints[ALIAS_OUTPUT].HintDescriptor = 0; aliasDescriptor->activate = NULL; aliasDescriptor->cleanup = cleanupAlias; aliasDescriptor->connect_port = connectPortAlias; aliasDescriptor->deactivate = NULL; aliasDescriptor->instantiate = instantiateAlias; aliasDescriptor->run = runAlias; aliasDescriptor->run_adding = runAddingAlias; aliasDescriptor->set_run_adding_gain = setRunAddingGainAlias; } } void __attribute__((destructor)) swh_fini() { if (aliasDescriptor) { free((LADSPA_PortDescriptor *)aliasDescriptor->PortDescriptors); free((char **)aliasDescriptor->PortNames); free((LADSPA_PortRangeHint *)aliasDescriptor->PortRangeHints); free(aliasDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/allpass_1895.c000066400000000000000000001260741247673406200216050ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "ladspa-util.h" #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define CALC_DELAY(delaytime) \ (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1))) #define LOG001 -6.9077552789f static inline float calc_feedback (float delaytime, float decaytime) { if (delaytime == 0.f) return 0.f; else if (decaytime > 0.f) return exp(LOG001 * delaytime / decaytime); else if (decaytime < 0.f) return -exp(LOG001 * delaytime / -decaytime); else return 0.f; } void ignore(LADSPA_Data some_var) { } #define ALLPASS_N_IN 0 #define ALLPASS_N_OUT 1 #define ALLPASS_N_MAX_DELAY 2 #define ALLPASS_N_DELAY_TIME 3 #define ALLPASS_N_DECAY_TIME 4 #define ALLPASS_L_IN 0 #define ALLPASS_L_OUT 1 #define ALLPASS_L_MAX_DELAY 2 #define ALLPASS_L_DELAY_TIME 3 #define ALLPASS_L_DECAY_TIME 4 #define ALLPASS_C_IN 0 #define ALLPASS_C_OUT 1 #define ALLPASS_C_MAX_DELAY 2 #define ALLPASS_C_DELAY_TIME 3 #define ALLPASS_C_DECAY_TIME 4 static LADSPA_Descriptor *allpass_nDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *decay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data feedback; LADSPA_Data last_decay_time; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Allpass_n; static LADSPA_Descriptor *allpass_lDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *decay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data feedback; LADSPA_Data last_decay_time; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Allpass_l; static LADSPA_Descriptor *allpass_cDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *decay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data feedback; LADSPA_Data last_decay_time; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Allpass_c; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return allpass_nDescriptor; case 1: return allpass_lDescriptor; case 2: return allpass_cDescriptor; default: return NULL; } } static void activateAllpass_n(LADSPA_Handle instance) { Allpass_n *plugin_data = (Allpass_n *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupAllpass_n(LADSPA_Handle instance) { Allpass_n *plugin_data = (Allpass_n *)instance; free(plugin_data->buffer); free(instance); } static void connectPortAllpass_n( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Allpass_n *plugin; plugin = (Allpass_n *)instance; switch (port) { case ALLPASS_N_IN: plugin->in = data; break; case ALLPASS_N_OUT: plugin->out = data; break; case ALLPASS_N_MAX_DELAY: plugin->max_delay = data; break; case ALLPASS_N_DELAY_TIME: plugin->delay_time = data; break; case ALLPASS_N_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateAllpass_n( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Allpass_n *plugin_data = (Allpass_n *)malloc(sizeof(Allpass_n)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data feedback = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAllpass_n(LADSPA_Handle instance, unsigned long sample_count) { Allpass_n *plugin_data = (Allpass_n *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; ignore(max_delay); if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time) { long read_phase = write_phase - (long)delay_samples; LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); LADSPA_Data *lastptr = buffer + buffer_mask + 1; if (decay_time == last_decay_time) { long remain = sample_count; while (remain) { long read_space = lastptr - readptr; long write_space = lastptr - writeptr; long to_process = MIN (MIN (read_space, remain), write_space); if (to_process == 0) return; // buffer not allocated. remain -= to_process; for (i=0; ilast_decay_time = decay_time; plugin_data->feedback = feedback; } write_phase += sample_count; } else { float next_delay_samples = CALC_DELAY (delay_time); float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; float next_feedback = calc_feedback (delay_time, decay_time); float feedback_slope = (next_feedback - feedback) / sample_count; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAllpass_n(LADSPA_Handle instance, LADSPA_Data gain) { ((Allpass_n *)instance)->run_adding_gain = gain; } static void runAddingAllpass_n(LADSPA_Handle instance, unsigned long sample_count) { Allpass_n *plugin_data = (Allpass_n *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; ignore(max_delay); if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time) { long read_phase = write_phase - (long)delay_samples; LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); LADSPA_Data *lastptr = buffer + buffer_mask + 1; if (decay_time == last_decay_time) { long remain = sample_count; while (remain) { long read_space = lastptr - readptr; long write_space = lastptr - writeptr; long to_process = MIN (MIN (read_space, remain), write_space); if (to_process == 0) return; // buffer not allocated. remain -= to_process; for (i=0; ilast_decay_time = decay_time; plugin_data->feedback = feedback; } write_phase += sample_count; } else { float next_delay_samples = CALC_DELAY (delay_time); float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; float next_feedback = calc_feedback (delay_time, decay_time); float feedback_slope = (next_feedback - feedback) / sample_count; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } static void activateAllpass_l(LADSPA_Handle instance) { Allpass_l *plugin_data = (Allpass_l *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupAllpass_l(LADSPA_Handle instance) { Allpass_l *plugin_data = (Allpass_l *)instance; free(plugin_data->buffer); free(instance); } static void connectPortAllpass_l( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Allpass_l *plugin; plugin = (Allpass_l *)instance; switch (port) { case ALLPASS_L_IN: plugin->in = data; break; case ALLPASS_L_OUT: plugin->out = data; break; case ALLPASS_L_MAX_DELAY: plugin->max_delay = data; break; case ALLPASS_L_DELAY_TIME: plugin->delay_time = data; break; case ALLPASS_L_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateAllpass_l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Allpass_l *plugin_data = (Allpass_l *)malloc(sizeof(Allpass_l)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data feedback = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAllpass_l(LADSPA_Handle instance, unsigned long sample_count) { Allpass_l *plugin_data = (Allpass_l *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAllpass_l(LADSPA_Handle instance, LADSPA_Data gain) { ((Allpass_l *)instance)->run_adding_gain = gain; } static void runAddingAllpass_l(LADSPA_Handle instance, unsigned long sample_count) { Allpass_l *plugin_data = (Allpass_l *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } static void activateAllpass_c(LADSPA_Handle instance) { Allpass_c *plugin_data = (Allpass_c *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupAllpass_c(LADSPA_Handle instance) { Allpass_c *plugin_data = (Allpass_c *)instance; free(plugin_data->buffer); free(instance); } static void connectPortAllpass_c( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Allpass_c *plugin; plugin = (Allpass_c *)instance; switch (port) { case ALLPASS_C_IN: plugin->in = data; break; case ALLPASS_C_OUT: plugin->out = data; break; case ALLPASS_C_MAX_DELAY: plugin->max_delay = data; break; case ALLPASS_C_DELAY_TIME: plugin->delay_time = data; break; case ALLPASS_C_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateAllpass_c( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Allpass_c *plugin_data = (Allpass_c *)malloc(sizeof(Allpass_c)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data feedback = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAllpass_c(LADSPA_Handle instance, unsigned long sample_count) { Allpass_c *plugin_data = (Allpass_c *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAllpass_c(LADSPA_Handle instance, LADSPA_Data gain) { ((Allpass_c *)instance)->run_adding_gain = gain; } static void runAddingAllpass_c(LADSPA_Handle instance, unsigned long sample_count) { Allpass_c *plugin_data = (Allpass_c *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif allpass_nDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (allpass_nDescriptor) { allpass_nDescriptor->UniqueID = 1895; allpass_nDescriptor->Label = "allpass_n"; allpass_nDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; allpass_nDescriptor->Name = D_("Allpass delay line, noninterpolating"); allpass_nDescriptor->Maker = "Andy Wingo "; allpass_nDescriptor->Copyright = "GPL"; allpass_nDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); allpass_nDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); allpass_nDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); allpass_nDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[ALLPASS_N_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[ALLPASS_N_IN] = D_("Input"); port_range_hints[ALLPASS_N_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[ALLPASS_N_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[ALLPASS_N_OUT] = D_("Output"); port_range_hints[ALLPASS_N_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[ALLPASS_N_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_N_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[ALLPASS_N_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_N_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[ALLPASS_N_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_N_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[ALLPASS_N_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_N_DELAY_TIME].LowerBound = 0; /* Parameters for Decay Time (s) */ port_descriptors[ALLPASS_N_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_N_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[ALLPASS_N_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_N_DECAY_TIME].LowerBound = 0; allpass_nDescriptor->activate = activateAllpass_n; allpass_nDescriptor->cleanup = cleanupAllpass_n; allpass_nDescriptor->connect_port = connectPortAllpass_n; allpass_nDescriptor->deactivate = NULL; allpass_nDescriptor->instantiate = instantiateAllpass_n; allpass_nDescriptor->run = runAllpass_n; allpass_nDescriptor->run_adding = runAddingAllpass_n; allpass_nDescriptor->set_run_adding_gain = setRunAddingGainAllpass_n; } allpass_lDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (allpass_lDescriptor) { allpass_lDescriptor->UniqueID = 1896; allpass_lDescriptor->Label = "allpass_l"; allpass_lDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; allpass_lDescriptor->Name = D_("Allpass delay line, linear interpolation"); allpass_lDescriptor->Maker = "Andy Wingo "; allpass_lDescriptor->Copyright = "GPL"; allpass_lDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); allpass_lDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); allpass_lDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); allpass_lDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[ALLPASS_L_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[ALLPASS_L_IN] = D_("Input"); port_range_hints[ALLPASS_L_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[ALLPASS_L_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[ALLPASS_L_OUT] = D_("Output"); port_range_hints[ALLPASS_L_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[ALLPASS_L_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_L_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[ALLPASS_L_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_L_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[ALLPASS_L_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_L_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[ALLPASS_L_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_L_DELAY_TIME].LowerBound = 0; /* Parameters for Decay Time (s) */ port_descriptors[ALLPASS_L_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_L_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[ALLPASS_L_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_L_DECAY_TIME].LowerBound = 0; allpass_lDescriptor->activate = activateAllpass_l; allpass_lDescriptor->cleanup = cleanupAllpass_l; allpass_lDescriptor->connect_port = connectPortAllpass_l; allpass_lDescriptor->deactivate = NULL; allpass_lDescriptor->instantiate = instantiateAllpass_l; allpass_lDescriptor->run = runAllpass_l; allpass_lDescriptor->run_adding = runAddingAllpass_l; allpass_lDescriptor->set_run_adding_gain = setRunAddingGainAllpass_l; } allpass_cDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (allpass_cDescriptor) { allpass_cDescriptor->UniqueID = 1897; allpass_cDescriptor->Label = "allpass_c"; allpass_cDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; allpass_cDescriptor->Name = D_("Allpass delay line, cubic spline interpolation"); allpass_cDescriptor->Maker = "Andy Wingo "; allpass_cDescriptor->Copyright = "GPL"; allpass_cDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); allpass_cDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); allpass_cDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); allpass_cDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[ALLPASS_C_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[ALLPASS_C_IN] = D_("Input"); port_range_hints[ALLPASS_C_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[ALLPASS_C_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[ALLPASS_C_OUT] = D_("Output"); port_range_hints[ALLPASS_C_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[ALLPASS_C_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_C_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[ALLPASS_C_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_C_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[ALLPASS_C_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_C_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[ALLPASS_C_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_C_DELAY_TIME].LowerBound = 0; /* Parameters for Decay Time (s) */ port_descriptors[ALLPASS_C_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ALLPASS_C_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[ALLPASS_C_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[ALLPASS_C_DECAY_TIME].LowerBound = 0; allpass_cDescriptor->activate = activateAllpass_c; allpass_cDescriptor->cleanup = cleanupAllpass_c; allpass_cDescriptor->connect_port = connectPortAllpass_c; allpass_cDescriptor->deactivate = NULL; allpass_cDescriptor->instantiate = instantiateAllpass_c; allpass_cDescriptor->run = runAllpass_c; allpass_cDescriptor->run_adding = runAddingAllpass_c; allpass_cDescriptor->set_run_adding_gain = setRunAddingGainAllpass_c; } } void __attribute__((destructor)) swh_fini() { if (allpass_nDescriptor) { free((LADSPA_PortDescriptor *)allpass_nDescriptor->PortDescriptors); free((char **)allpass_nDescriptor->PortNames); free((LADSPA_PortRangeHint *)allpass_nDescriptor->PortRangeHints); free(allpass_nDescriptor); } if (allpass_lDescriptor) { free((LADSPA_PortDescriptor *)allpass_lDescriptor->PortDescriptors); free((char **)allpass_lDescriptor->PortNames); free((LADSPA_PortRangeHint *)allpass_lDescriptor->PortRangeHints); free(allpass_lDescriptor); } if (allpass_cDescriptor) { free((LADSPA_PortDescriptor *)allpass_cDescriptor->PortDescriptors); free((char **)allpass_cDescriptor->PortNames); free((LADSPA_PortRangeHint *)allpass_cDescriptor->PortRangeHints); free(allpass_cDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/am_pitchshift_1433.c000066400000000000000000000317261247673406200227530ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "am_pitchshift_1433.xml" #include #include #include "ladspa-util.h" /* Beware of dependcies if you change this */ #define DELAY_SIZE 8192 #define AMPITCHSHIFT_PITCH 0 #define AMPITCHSHIFT_SIZE 1 #define AMPITCHSHIFT_INPUT 2 #define AMPITCHSHIFT_OUTPUT 3 #define AMPITCHSHIFT_LATENCY 4 static LADSPA_Descriptor *amPitchshiftDescriptor = NULL; typedef struct { LADSPA_Data *pitch; LADSPA_Data *size; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; unsigned int count; LADSPA_Data *delay; unsigned int delay_mask; unsigned int delay_ofs; float last_gain; float last_inc; int last_size; fixp16 rptr; unsigned int wptr; LADSPA_Data run_adding_gain; } AmPitchshift; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return amPitchshiftDescriptor; default: return NULL; } } static void cleanupAmPitchshift(LADSPA_Handle instance) { #line 39 "am_pitchshift_1433.xml" AmPitchshift *plugin_data = (AmPitchshift *)instance; free(plugin_data->delay); free(instance); } static void connectPortAmPitchshift( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { AmPitchshift *plugin; plugin = (AmPitchshift *)instance; switch (port) { case AMPITCHSHIFT_PITCH: plugin->pitch = data; break; case AMPITCHSHIFT_SIZE: plugin->size = data; break; case AMPITCHSHIFT_INPUT: plugin->input = data; break; case AMPITCHSHIFT_OUTPUT: plugin->output = data; break; case AMPITCHSHIFT_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateAmPitchshift( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { AmPitchshift *plugin_data = (AmPitchshift *)malloc(sizeof(AmPitchshift)); unsigned int count; LADSPA_Data *delay = NULL; unsigned int delay_mask; unsigned int delay_ofs; float last_gain; float last_inc; int last_size; fixp16 rptr; unsigned int wptr; #line 27 "am_pitchshift_1433.xml" delay = calloc(DELAY_SIZE, sizeof(LADSPA_Data)); rptr.all = 0; wptr = 0; last_size = -1; delay_mask = 0xFF; delay_ofs = 0x80; last_gain = 0.5f; count = 0; last_inc = 0.0f; plugin_data->count = count; plugin_data->delay = delay; plugin_data->delay_mask = delay_mask; plugin_data->delay_ofs = delay_ofs; plugin_data->last_gain = last_gain; plugin_data->last_inc = last_inc; plugin_data->last_size = last_size; plugin_data->rptr = rptr; plugin_data->wptr = wptr; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAmPitchshift(LADSPA_Handle instance, unsigned long sample_count) { AmPitchshift *plugin_data = (AmPitchshift *)instance; /* Pitch shift (float value) */ const LADSPA_Data pitch = *(plugin_data->pitch); /* Buffer size (float value) */ const LADSPA_Data size = *(plugin_data->size); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int count = plugin_data->count; LADSPA_Data * delay = plugin_data->delay; unsigned int delay_mask = plugin_data->delay_mask; unsigned int delay_ofs = plugin_data->delay_ofs; float last_gain = plugin_data->last_gain; float last_inc = plugin_data->last_inc; int last_size = plugin_data->last_size; fixp16 rptr = plugin_data->rptr; unsigned int wptr = plugin_data->wptr; #line 43 "am_pitchshift_1433.xml" unsigned long pos; fixp16 om; float gain = last_gain, gain_inc = last_inc; unsigned int i; om.all = f_round(pitch * 65536.0f); if (size != last_size) { int size_tmp = f_round(size); if (size_tmp > 7) { size_tmp = 5; } else if (size_tmp < 1) { size_tmp = 1; } plugin_data->last_size = size; /* Calculate the ringbuf parameters, the magick constants will need * to be changed if you change DELAY_SIZE */ delay_mask = (1 << (size_tmp + 6)) - 1; delay_ofs = 1 << (size_tmp + 5); } for (pos = 0; pos < sample_count; pos++) { float out = 0.0f; if (count++ > 14) { float tmp; count = 0; tmp = 0.5f * (float)((rptr.part.in - wptr + delay_ofs/2) & delay_mask) / (float)delay_ofs; tmp = sinf(M_PI * 2.0f * tmp) * 0.5f + 0.5f; gain_inc = (tmp - gain) / 15.0f; } gain += gain_inc; delay[wptr] = input[pos]; /* Add contributions from the two readpointers, scaled by thier * distance from the write pointer */ i = rptr.part.in; out += cube_interp((float)rptr.part.fr * 0.0000152587f, delay[(i - 1) & delay_mask], delay[i], delay[(i + 1) & delay_mask], delay[(i + 2) & delay_mask]) * (1.0f - gain); i += delay_ofs; out += cube_interp((float)rptr.part.fr * 0.0000152587f, delay[(i - 1) & delay_mask], delay[i & delay_mask], delay[(i + 1) & delay_mask], delay[(i + 2) & delay_mask]) * gain; buffer_write(output[pos], out); /* Increment ringbuffer pointers */ wptr = (wptr + 1) & delay_mask; rptr.all += om.all; rptr.part.in &= delay_mask; } plugin_data->rptr.all = rptr.all; plugin_data->wptr = wptr; plugin_data->delay_mask = delay_mask; plugin_data->delay_ofs = delay_ofs; plugin_data->last_gain = gain; plugin_data->count = count; plugin_data->last_inc = gain_inc; *(plugin_data->latency) = delay_ofs/2; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAmPitchshift(LADSPA_Handle instance, LADSPA_Data gain) { ((AmPitchshift *)instance)->run_adding_gain = gain; } static void runAddingAmPitchshift(LADSPA_Handle instance, unsigned long sample_count) { AmPitchshift *plugin_data = (AmPitchshift *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Pitch shift (float value) */ const LADSPA_Data pitch = *(plugin_data->pitch); /* Buffer size (float value) */ const LADSPA_Data size = *(plugin_data->size); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int count = plugin_data->count; LADSPA_Data * delay = plugin_data->delay; unsigned int delay_mask = plugin_data->delay_mask; unsigned int delay_ofs = plugin_data->delay_ofs; float last_gain = plugin_data->last_gain; float last_inc = plugin_data->last_inc; int last_size = plugin_data->last_size; fixp16 rptr = plugin_data->rptr; unsigned int wptr = plugin_data->wptr; #line 43 "am_pitchshift_1433.xml" unsigned long pos; fixp16 om; float gain = last_gain, gain_inc = last_inc; unsigned int i; om.all = f_round(pitch * 65536.0f); if (size != last_size) { int size_tmp = f_round(size); if (size_tmp > 7) { size_tmp = 5; } else if (size_tmp < 1) { size_tmp = 1; } plugin_data->last_size = size; /* Calculate the ringbuf parameters, the magick constants will need * to be changed if you change DELAY_SIZE */ delay_mask = (1 << (size_tmp + 6)) - 1; delay_ofs = 1 << (size_tmp + 5); } for (pos = 0; pos < sample_count; pos++) { float out = 0.0f; if (count++ > 14) { float tmp; count = 0; tmp = 0.5f * (float)((rptr.part.in - wptr + delay_ofs/2) & delay_mask) / (float)delay_ofs; tmp = sinf(M_PI * 2.0f * tmp) * 0.5f + 0.5f; gain_inc = (tmp - gain) / 15.0f; } gain += gain_inc; delay[wptr] = input[pos]; /* Add contributions from the two readpointers, scaled by thier * distance from the write pointer */ i = rptr.part.in; out += cube_interp((float)rptr.part.fr * 0.0000152587f, delay[(i - 1) & delay_mask], delay[i], delay[(i + 1) & delay_mask], delay[(i + 2) & delay_mask]) * (1.0f - gain); i += delay_ofs; out += cube_interp((float)rptr.part.fr * 0.0000152587f, delay[(i - 1) & delay_mask], delay[i & delay_mask], delay[(i + 1) & delay_mask], delay[(i + 2) & delay_mask]) * gain; buffer_write(output[pos], out); /* Increment ringbuffer pointers */ wptr = (wptr + 1) & delay_mask; rptr.all += om.all; rptr.part.in &= delay_mask; } plugin_data->rptr.all = rptr.all; plugin_data->wptr = wptr; plugin_data->delay_mask = delay_mask; plugin_data->delay_ofs = delay_ofs; plugin_data->last_gain = gain; plugin_data->count = count; plugin_data->last_inc = gain_inc; *(plugin_data->latency) = delay_ofs/2; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif amPitchshiftDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (amPitchshiftDescriptor) { amPitchshiftDescriptor->UniqueID = 1433; amPitchshiftDescriptor->Label = "amPitchshift"; amPitchshiftDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; amPitchshiftDescriptor->Name = D_("AM pitchshifter"); amPitchshiftDescriptor->Maker = "Steve Harris "; amPitchshiftDescriptor->Copyright = "GPL"; amPitchshiftDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); amPitchshiftDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); amPitchshiftDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); amPitchshiftDescriptor->PortNames = (const char **)port_names; /* Parameters for Pitch shift */ port_descriptors[AMPITCHSHIFT_PITCH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AMPITCHSHIFT_PITCH] = D_("Pitch shift"); port_range_hints[AMPITCHSHIFT_PITCH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_1; port_range_hints[AMPITCHSHIFT_PITCH].LowerBound = 0.25; port_range_hints[AMPITCHSHIFT_PITCH].UpperBound = 4.0; /* Parameters for Buffer size */ port_descriptors[AMPITCHSHIFT_SIZE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AMPITCHSHIFT_SIZE] = D_("Buffer size"); port_range_hints[AMPITCHSHIFT_SIZE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[AMPITCHSHIFT_SIZE].LowerBound = 1; port_range_hints[AMPITCHSHIFT_SIZE].UpperBound = 7; /* Parameters for Input */ port_descriptors[AMPITCHSHIFT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[AMPITCHSHIFT_INPUT] = D_("Input"); port_range_hints[AMPITCHSHIFT_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[AMPITCHSHIFT_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[AMPITCHSHIFT_OUTPUT] = D_("Output"); port_range_hints[AMPITCHSHIFT_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[AMPITCHSHIFT_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[AMPITCHSHIFT_LATENCY] = D_("latency"); port_range_hints[AMPITCHSHIFT_LATENCY].HintDescriptor = 0; amPitchshiftDescriptor->activate = NULL; amPitchshiftDescriptor->cleanup = cleanupAmPitchshift; amPitchshiftDescriptor->connect_port = connectPortAmPitchshift; amPitchshiftDescriptor->deactivate = NULL; amPitchshiftDescriptor->instantiate = instantiateAmPitchshift; amPitchshiftDescriptor->run = runAmPitchshift; amPitchshiftDescriptor->run_adding = runAddingAmPitchshift; amPitchshiftDescriptor->set_run_adding_gain = setRunAddingGainAmPitchshift; } } void __attribute__((destructor)) swh_fini() { if (amPitchshiftDescriptor) { free((LADSPA_PortDescriptor *)amPitchshiftDescriptor->PortDescriptors); free((char **)amPitchshiftDescriptor->PortNames); free((LADSPA_PortRangeHint *)amPitchshiftDescriptor->PortRangeHints); free(amPitchshiftDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/amp_1181.c000066400000000000000000000135041247673406200207000ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "amp_1181.xml" #include "ladspa-util.h" #define AMP_GAIN 0 #define AMP_INPUT 1 #define AMP_OUTPUT 2 static LADSPA_Descriptor *ampDescriptor = NULL; typedef struct { LADSPA_Data *gain; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Amp; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return ampDescriptor; default: return NULL; } } static void cleanupAmp(LADSPA_Handle instance) { free(instance); } static void connectPortAmp( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Amp *plugin; plugin = (Amp *)instance; switch (port) { case AMP_GAIN: plugin->gain = data; break; case AMP_INPUT: plugin->input = data; break; case AMP_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateAmp( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Amp *plugin_data = (Amp *)malloc(sizeof(Amp)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAmp(LADSPA_Handle instance, unsigned long sample_count) { Amp *plugin_data = (Amp *)instance; /* Amps gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 19 "amp_1181.xml" unsigned long pos; float coef = DB_CO(gain); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos] * coef); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAmp(LADSPA_Handle instance, LADSPA_Data gain) { ((Amp *)instance)->run_adding_gain = gain; } static void runAddingAmp(LADSPA_Handle instance, unsigned long sample_count) { Amp *plugin_data = (Amp *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Amps gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 19 "amp_1181.xml" unsigned long pos; float coef = DB_CO(gain); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos] * coef); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif ampDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (ampDescriptor) { ampDescriptor->UniqueID = 1181; ampDescriptor->Label = "amp"; ampDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; ampDescriptor->Name = D_("Simple amplifier"); ampDescriptor->Maker = "Steve Harris "; ampDescriptor->Copyright = "GPL"; ampDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); ampDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); ampDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); ampDescriptor->PortNames = (const char **)port_names; /* Parameters for Amps gain (dB) */ port_descriptors[AMP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AMP_GAIN] = D_("Amps gain (dB)"); port_range_hints[AMP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[AMP_GAIN].LowerBound = -70; port_range_hints[AMP_GAIN].UpperBound = +70; /* Parameters for Input */ port_descriptors[AMP_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[AMP_INPUT] = D_("Input"); port_range_hints[AMP_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[AMP_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[AMP_OUTPUT] = D_("Output"); port_range_hints[AMP_OUTPUT].HintDescriptor = 0; ampDescriptor->activate = NULL; ampDescriptor->cleanup = cleanupAmp; ampDescriptor->connect_port = connectPortAmp; ampDescriptor->deactivate = NULL; ampDescriptor->instantiate = instantiateAmp; ampDescriptor->run = runAmp; ampDescriptor->run_adding = runAddingAmp; ampDescriptor->set_run_adding_gain = setRunAddingGainAmp; } } void __attribute__((destructor)) swh_fini() { if (ampDescriptor) { free((LADSPA_PortDescriptor *)ampDescriptor->PortDescriptors); free((char **)ampDescriptor->PortNames); free((LADSPA_PortRangeHint *)ampDescriptor->PortRangeHints); free(ampDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c000066400000000000000000000205321247673406200230720ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "config.h" #include "util/iir.h" #define BANDPASS_A_IIR_CENTER 0 #define BANDPASS_A_IIR_WIDTH 1 #define BANDPASS_A_IIR_INPUT 2 #define BANDPASS_A_IIR_OUTPUT 3 static LADSPA_Descriptor *bandpass_a_iirDescriptor = NULL; typedef struct { LADSPA_Data *center; LADSPA_Data *width; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* gt; iirf_t* iirf; long sample_rate; LADSPA_Data run_adding_gain; } Bandpass_a_iir; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return bandpass_a_iirDescriptor; default: return NULL; } } static void activateBandpass_a_iir(LADSPA_Handle instance) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); calc_2polebandpass(iirf, gt, *(plugin_data->center), *(plugin_data->width), sample_rate); plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; } static void cleanupBandpass_a_iir(LADSPA_Handle instance) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortBandpass_a_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Bandpass_a_iir *plugin; plugin = (Bandpass_a_iir *)instance; switch (port) { case BANDPASS_A_IIR_CENTER: plugin->center = data; break; case BANDPASS_A_IIR_WIDTH: plugin->width = data; break; case BANDPASS_A_IIR_INPUT: plugin->input = data; break; case BANDPASS_A_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateBandpass_a_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)malloc(sizeof(Bandpass_a_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; sample_rate = s_rate; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); /* Bandwidth (Hz) (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; calc_2polebandpass(iirf, gt, center, width, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainBandpass_a_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Bandpass_a_iir *)instance)->run_adding_gain = gain; } static void runAddingBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); /* Bandwidth (Hz) (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; calc_2polebandpass(iirf, gt, center, width, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif bandpass_a_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (bandpass_a_iirDescriptor) { bandpass_a_iirDescriptor->UniqueID = 1893; bandpass_a_iirDescriptor->Label = "bandpass_a_iir"; bandpass_a_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; bandpass_a_iirDescriptor->Name = D_("Glame Bandpass Analog Filter"); bandpass_a_iirDescriptor->Maker = "Alexander Ehlert "; bandpass_a_iirDescriptor->Copyright = "GPL"; bandpass_a_iirDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); bandpass_a_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); bandpass_a_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); bandpass_a_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Center Frequency (Hz) */ port_descriptors[BANDPASS_A_IIR_CENTER] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BANDPASS_A_IIR_CENTER] = D_("Center Frequency (Hz)"); port_range_hints[BANDPASS_A_IIR_CENTER].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BANDPASS_A_IIR_CENTER].LowerBound = 0.0001; port_range_hints[BANDPASS_A_IIR_CENTER].UpperBound = 0.45; /* Parameters for Bandwidth (Hz) */ port_descriptors[BANDPASS_A_IIR_WIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BANDPASS_A_IIR_WIDTH] = D_("Bandwidth (Hz)"); port_range_hints[BANDPASS_A_IIR_WIDTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BANDPASS_A_IIR_WIDTH].LowerBound = 0.0001; port_range_hints[BANDPASS_A_IIR_WIDTH].UpperBound = 0.45; /* Parameters for Input */ port_descriptors[BANDPASS_A_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BANDPASS_A_IIR_INPUT] = D_("Input"); port_range_hints[BANDPASS_A_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[BANDPASS_A_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BANDPASS_A_IIR_OUTPUT] = D_("Output"); port_range_hints[BANDPASS_A_IIR_OUTPUT].HintDescriptor = 0; bandpass_a_iirDescriptor->activate = activateBandpass_a_iir; bandpass_a_iirDescriptor->cleanup = cleanupBandpass_a_iir; bandpass_a_iirDescriptor->connect_port = connectPortBandpass_a_iir; bandpass_a_iirDescriptor->deactivate = NULL; bandpass_a_iirDescriptor->instantiate = instantiateBandpass_a_iir; bandpass_a_iirDescriptor->run = runBandpass_a_iir; bandpass_a_iirDescriptor->run_adding = runAddingBandpass_a_iir; bandpass_a_iirDescriptor->set_run_adding_gain = setRunAddingGainBandpass_a_iir; } } void __attribute__((destructor)) swh_fini() { if (bandpass_a_iirDescriptor) { free((LADSPA_PortDescriptor *)bandpass_a_iirDescriptor->PortDescriptors); free((char **)bandpass_a_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)bandpass_a_iirDescriptor->PortRangeHints); free(bandpass_a_iirDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/bandpass_iir_1892.c000066400000000000000000000257101247673406200225740ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "config.h" #include "util/iir.h" #define BANDPASS_IIR_CENTER 0 #define BANDPASS_IIR_WIDTH 1 #define BANDPASS_IIR_STAGES 2 #define BANDPASS_IIR_INPUT 3 #define BANDPASS_IIR_OUTPUT 4 static LADSPA_Descriptor *bandpass_iirDescriptor = NULL; typedef struct { LADSPA_Data *center; LADSPA_Data *width; LADSPA_Data *stages; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* first; iir_stage_t* gt; iirf_t* iirf; float lfc; long sample_rate; iir_stage_t* second; float ufc; LADSPA_Data run_adding_gain; } Bandpass_iir; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return bandpass_iirDescriptor; default: return NULL; } } static void activateBandpass_iir(LADSPA_Handle instance) { Bandpass_iir *plugin_data = (Bandpass_iir *)instance; iir_stage_t*first = plugin_data->first; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; float lfc = plugin_data->lfc; long sample_rate = plugin_data->sample_rate; iir_stage_t*second = plugin_data->second; float ufc = plugin_data->ufc; ufc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate; lfc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate; first = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); second = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); gt = init_iir_stage(IIR_STAGE_BANDPASS,20,3,2); iirf = init_iirf_t(gt); chebyshev(iirf, first, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); chebyshev(iirf, second, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second,0,0); plugin_data->first = first; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->lfc = lfc; plugin_data->sample_rate = sample_rate; plugin_data->second = second; plugin_data->ufc = ufc; } static void cleanupBandpass_iir(LADSPA_Handle instance) { Bandpass_iir *plugin_data = (Bandpass_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->first); free_iir_stage(plugin_data->second); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortBandpass_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Bandpass_iir *plugin; plugin = (Bandpass_iir *)instance; switch (port) { case BANDPASS_IIR_CENTER: plugin->center = data; break; case BANDPASS_IIR_WIDTH: plugin->width = data; break; case BANDPASS_IIR_STAGES: plugin->stages = data; break; case BANDPASS_IIR_INPUT: plugin->input = data; break; case BANDPASS_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateBandpass_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Bandpass_iir *plugin_data = (Bandpass_iir *)malloc(sizeof(Bandpass_iir)); iir_stage_t*first = NULL; iir_stage_t*gt = NULL; iirf_t*iirf = NULL; float lfc = 0; long sample_rate = 0; iir_stage_t*second = NULL; float ufc = 0; sample_rate = s_rate; plugin_data->first = first; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->lfc = lfc; plugin_data->sample_rate = sample_rate; plugin_data->second = second; plugin_data->ufc = ufc; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_iir *plugin_data = (Bandpass_iir *)instance; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); /* Bandwidth (Hz) (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* first = plugin_data->first; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; float lfc = plugin_data->lfc; long sample_rate = plugin_data->sample_rate; iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; ufc = (center + width*0.5f)/(float)sample_rate; lfc = (center - width*0.5f)/(float)sample_rate; combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second, chebyshev(iirf, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f), chebyshev(iirf, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f)); iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainBandpass_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Bandpass_iir *)instance)->run_adding_gain = gain; } static void runAddingBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_iir *plugin_data = (Bandpass_iir *)instance; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); /* Bandwidth (Hz) (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* first = plugin_data->first; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; float lfc = plugin_data->lfc; long sample_rate = plugin_data->sample_rate; iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; ufc = (center + width*0.5f)/(float)sample_rate; lfc = (center - width*0.5f)/(float)sample_rate; combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second, chebyshev(iirf, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f), chebyshev(iirf, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f)); iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif bandpass_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (bandpass_iirDescriptor) { bandpass_iirDescriptor->UniqueID = 1892; bandpass_iirDescriptor->Label = "bandpass_iir"; bandpass_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; bandpass_iirDescriptor->Name = D_("Glame Bandpass Filter"); bandpass_iirDescriptor->Maker = "Alexander Ehlert "; bandpass_iirDescriptor->Copyright = "GPL"; bandpass_iirDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); bandpass_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); bandpass_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); bandpass_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Center Frequency (Hz) */ port_descriptors[BANDPASS_IIR_CENTER] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BANDPASS_IIR_CENTER] = D_("Center Frequency (Hz)"); port_range_hints[BANDPASS_IIR_CENTER].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BANDPASS_IIR_CENTER].LowerBound = 0.0001; port_range_hints[BANDPASS_IIR_CENTER].UpperBound = 0.45; /* Parameters for Bandwidth (Hz) */ port_descriptors[BANDPASS_IIR_WIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BANDPASS_IIR_WIDTH] = D_("Bandwidth (Hz)"); port_range_hints[BANDPASS_IIR_WIDTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BANDPASS_IIR_WIDTH].LowerBound = 0.0001; port_range_hints[BANDPASS_IIR_WIDTH].UpperBound = 0.45; /* Parameters for Stages(2 poles per stage) */ port_descriptors[BANDPASS_IIR_STAGES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BANDPASS_IIR_STAGES] = D_("Stages(2 poles per stage)"); port_range_hints[BANDPASS_IIR_STAGES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; port_range_hints[BANDPASS_IIR_STAGES].LowerBound = 1.0; port_range_hints[BANDPASS_IIR_STAGES].UpperBound = 10.0; /* Parameters for Input */ port_descriptors[BANDPASS_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BANDPASS_IIR_INPUT] = D_("Input"); port_range_hints[BANDPASS_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[BANDPASS_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BANDPASS_IIR_OUTPUT] = D_("Output"); port_range_hints[BANDPASS_IIR_OUTPUT].HintDescriptor = 0; bandpass_iirDescriptor->activate = activateBandpass_iir; bandpass_iirDescriptor->cleanup = cleanupBandpass_iir; bandpass_iirDescriptor->connect_port = connectPortBandpass_iir; bandpass_iirDescriptor->deactivate = NULL; bandpass_iirDescriptor->instantiate = instantiateBandpass_iir; bandpass_iirDescriptor->run = runBandpass_iir; bandpass_iirDescriptor->run_adding = runAddingBandpass_iir; bandpass_iirDescriptor->set_run_adding_gain = setRunAddingGainBandpass_iir; } } void __attribute__((destructor)) swh_fini() { if (bandpass_iirDescriptor) { free((LADSPA_PortDescriptor *)bandpass_iirDescriptor->PortDescriptors); free((char **)bandpass_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)bandpass_iirDescriptor->PortRangeHints); free(bandpass_iirDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/bode_shifter_1431.c000066400000000000000000000342121247673406200225550ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "bode_shifter_1431.xml" #include #include "ladspa-util.h" #define SIN_T_SIZE 1024 #define D_SIZE 256 #define NZEROS 200 /* The non-zero taps of the Hilbert transformer */ static float xcoeffs[] = { +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, }; #define BODESHIFTER_SHIFT 0 #define BODESHIFTER_INPUT 1 #define BODESHIFTER_DOUT 2 #define BODESHIFTER_UOUT 3 #define BODESHIFTER_LATENCY 4 static LADSPA_Descriptor *bodeShifterDescriptor = NULL; typedef struct { LADSPA_Data *shift; LADSPA_Data *input; LADSPA_Data *dout; LADSPA_Data *uout; LADSPA_Data *latency; LADSPA_Data *delay; unsigned int dptr; float fs; float last_shift; float phi; float * sint; LADSPA_Data run_adding_gain; } BodeShifter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return bodeShifterDescriptor; default: return NULL; } } static void cleanupBodeShifter(LADSPA_Handle instance) { #line 75 "bode_shifter_1431.xml" BodeShifter *plugin_data = (BodeShifter *)instance; free(plugin_data->delay); free(plugin_data->sint); free(instance); } static void connectPortBodeShifter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { BodeShifter *plugin; plugin = (BodeShifter *)instance; switch (port) { case BODESHIFTER_SHIFT: plugin->shift = data; break; case BODESHIFTER_INPUT: plugin->input = data; break; case BODESHIFTER_DOUT: plugin->dout = data; break; case BODESHIFTER_UOUT: plugin->uout = data; break; case BODESHIFTER_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateBodeShifter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { BodeShifter *plugin_data = (BodeShifter *)malloc(sizeof(BodeShifter)); LADSPA_Data *delay = NULL; unsigned int dptr; float fs; float last_shift; float phi; float *sint = NULL; #line 58 "bode_shifter_1431.xml" unsigned int i; fs = (float)s_rate; delay = calloc(D_SIZE, sizeof(LADSPA_Data)); sint = calloc(SIN_T_SIZE + 4, sizeof(float)); dptr = 0; phi = 0.0f; last_shift = 0.0f; for (i = 0; i < SIN_T_SIZE + 4; i++) { sint[i] = sinf(2.0f * M_PI * (float)i / (float)SIN_T_SIZE); } plugin_data->delay = delay; plugin_data->dptr = dptr; plugin_data->fs = fs; plugin_data->last_shift = last_shift; plugin_data->phi = phi; plugin_data->sint = sint; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runBodeShifter(LADSPA_Handle instance, unsigned long sample_count) { BodeShifter *plugin_data = (BodeShifter *)instance; /* Frequency shift (float value) */ const LADSPA_Data shift = *(plugin_data->shift); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Down out (array of floats of length sample_count) */ LADSPA_Data * const dout = plugin_data->dout; /* Up out (array of floats of length sample_count) */ LADSPA_Data * const uout = plugin_data->uout; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; float fs = plugin_data->fs; float last_shift = plugin_data->last_shift; float phi = plugin_data->phi; float * sint = plugin_data->sint; #line 80 "bode_shifter_1431.xml" unsigned long pos; unsigned int i; float hilb, rm1, rm2; float shift_i = last_shift; int int_p; float frac_p; const float shift_c = f_clamp(shift, 0.0f, 10000.0f); const float shift_inc = (shift_c - last_shift) / (float)sample_count; const float freq_fix = (float)SIN_T_SIZE / fs; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = input[pos]; /* Perform the Hilbert FIR convolution * (probably FFT would be faster) */ hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } /* Calcuate the table positions for the sine modulator */ int_p = f_round(floor(phi)); /* Calculate ringmod1, the transformed input modulated with a shift Hz * sinewave. This creates a +180 degree sideband at source-shift Hz and * a 0 degree sindeband at source+shift Hz */ frac_p = phi - int_p; /* the Hilbert has a gain of pi/2, which we have to correct for, thanks * Fons! */ rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Calcuate the table positions for the cosine modulator */ int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); /* Calculate ringmod2, the delayed input modulated with a shift Hz * cosinewave. This creates a 0 degree sideband at source+shift Hz * and a -180 degree sindeband at source-shift Hz */ rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Output the sum and differences of the ringmods. The +/-180 degree * sidebands cancel (more of less) and just leave the shifted * components */ buffer_write(dout[pos], (rm2 - rm1) * 0.5f); buffer_write(uout[pos], (rm2 + rm1) * 0.5f); dptr = (dptr + 1) & (D_SIZE - 1); phi += shift_i * freq_fix; while (phi > SIN_T_SIZE) { phi -= SIN_T_SIZE; } shift_i += shift_inc; } plugin_data->dptr = dptr; plugin_data->phi = phi; plugin_data->last_shift = shift_c; *(plugin_data->latency) = 99; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainBodeShifter(LADSPA_Handle instance, LADSPA_Data gain) { ((BodeShifter *)instance)->run_adding_gain = gain; } static void runAddingBodeShifter(LADSPA_Handle instance, unsigned long sample_count) { BodeShifter *plugin_data = (BodeShifter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Frequency shift (float value) */ const LADSPA_Data shift = *(plugin_data->shift); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Down out (array of floats of length sample_count) */ LADSPA_Data * const dout = plugin_data->dout; /* Up out (array of floats of length sample_count) */ LADSPA_Data * const uout = plugin_data->uout; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; float fs = plugin_data->fs; float last_shift = plugin_data->last_shift; float phi = plugin_data->phi; float * sint = plugin_data->sint; #line 80 "bode_shifter_1431.xml" unsigned long pos; unsigned int i; float hilb, rm1, rm2; float shift_i = last_shift; int int_p; float frac_p; const float shift_c = f_clamp(shift, 0.0f, 10000.0f); const float shift_inc = (shift_c - last_shift) / (float)sample_count; const float freq_fix = (float)SIN_T_SIZE / fs; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = input[pos]; /* Perform the Hilbert FIR convolution * (probably FFT would be faster) */ hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } /* Calcuate the table positions for the sine modulator */ int_p = f_round(floor(phi)); /* Calculate ringmod1, the transformed input modulated with a shift Hz * sinewave. This creates a +180 degree sideband at source-shift Hz and * a 0 degree sindeband at source+shift Hz */ frac_p = phi - int_p; /* the Hilbert has a gain of pi/2, which we have to correct for, thanks * Fons! */ rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Calcuate the table positions for the cosine modulator */ int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); /* Calculate ringmod2, the delayed input modulated with a shift Hz * cosinewave. This creates a 0 degree sideband at source+shift Hz * and a -180 degree sindeband at source-shift Hz */ rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Output the sum and differences of the ringmods. The +/-180 degree * sidebands cancel (more of less) and just leave the shifted * components */ buffer_write(dout[pos], (rm2 - rm1) * 0.5f); buffer_write(uout[pos], (rm2 + rm1) * 0.5f); dptr = (dptr + 1) & (D_SIZE - 1); phi += shift_i * freq_fix; while (phi > SIN_T_SIZE) { phi -= SIN_T_SIZE; } shift_i += shift_inc; } plugin_data->dptr = dptr; plugin_data->phi = phi; plugin_data->last_shift = shift_c; *(plugin_data->latency) = 99; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif bodeShifterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (bodeShifterDescriptor) { bodeShifterDescriptor->UniqueID = 1431; bodeShifterDescriptor->Label = "bodeShifter"; bodeShifterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; bodeShifterDescriptor->Name = D_("Bode frequency shifter"); bodeShifterDescriptor->Maker = "Steve Harris "; bodeShifterDescriptor->Copyright = "GPL"; bodeShifterDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); bodeShifterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); bodeShifterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); bodeShifterDescriptor->PortNames = (const char **)port_names; /* Parameters for Frequency shift */ port_descriptors[BODESHIFTER_SHIFT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BODESHIFTER_SHIFT] = D_("Frequency shift"); port_range_hints[BODESHIFTER_SHIFT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[BODESHIFTER_SHIFT].LowerBound = 0; port_range_hints[BODESHIFTER_SHIFT].UpperBound = 5000; /* Parameters for Input */ port_descriptors[BODESHIFTER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTER_INPUT] = D_("Input"); port_range_hints[BODESHIFTER_INPUT].HintDescriptor = 0; /* Parameters for Down out */ port_descriptors[BODESHIFTER_DOUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTER_DOUT] = D_("Down out"); port_range_hints[BODESHIFTER_DOUT].HintDescriptor = 0; /* Parameters for Up out */ port_descriptors[BODESHIFTER_UOUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTER_UOUT] = D_("Up out"); port_range_hints[BODESHIFTER_UOUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[BODESHIFTER_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[BODESHIFTER_LATENCY] = D_("latency"); port_range_hints[BODESHIFTER_LATENCY].HintDescriptor = 0; bodeShifterDescriptor->activate = NULL; bodeShifterDescriptor->cleanup = cleanupBodeShifter; bodeShifterDescriptor->connect_port = connectPortBodeShifter; bodeShifterDescriptor->deactivate = NULL; bodeShifterDescriptor->instantiate = instantiateBodeShifter; bodeShifterDescriptor->run = runBodeShifter; bodeShifterDescriptor->run_adding = runAddingBodeShifter; bodeShifterDescriptor->set_run_adding_gain = setRunAddingGainBodeShifter; } } void __attribute__((destructor)) swh_fini() { if (bodeShifterDescriptor) { free((LADSPA_PortDescriptor *)bodeShifterDescriptor->PortDescriptors); free((char **)bodeShifterDescriptor->PortNames); free((LADSPA_PortRangeHint *)bodeShifterDescriptor->PortRangeHints); free(bodeShifterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c000066400000000000000000000414441247673406200232530ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "bode_shifter_cv_1432.xml" #include #include "ladspa-util.h" #define SIN_T_SIZE 1024 #define D_SIZE 256 #define NZEROS 200 /* The non-zero taps of the Hilbert transformer */ static float xcoeffs[] = { +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, }; #define BODESHIFTERCV_SHIFT_B 0 #define BODESHIFTERCV_MIX 1 #define BODESHIFTERCV_INPUT 2 #define BODESHIFTERCV_ATTEN 3 #define BODESHIFTERCV_SHIFT 4 #define BODESHIFTERCV_DOUT 5 #define BODESHIFTERCV_UOUT 6 #define BODESHIFTERCV_MIXOUT 7 #define BODESHIFTERCV_LATENCY 8 static LADSPA_Descriptor *bodeShifterCVDescriptor = NULL; typedef struct { LADSPA_Data *shift_b; LADSPA_Data *mix; LADSPA_Data *input; LADSPA_Data *atten; LADSPA_Data *shift; LADSPA_Data *dout; LADSPA_Data *uout; LADSPA_Data *mixout; LADSPA_Data *latency; LADSPA_Data *delay; unsigned int dptr; float fs; float phi; float * sint; LADSPA_Data run_adding_gain; } BodeShifterCV; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return bodeShifterCVDescriptor; default: return NULL; } } static void cleanupBodeShifterCV(LADSPA_Handle instance) { #line 132 "bode_shifter_cv_1432.xml" BodeShifterCV *plugin_data = (BodeShifterCV *)instance; free(plugin_data->delay); free(plugin_data->sint); free(instance); } static void connectPortBodeShifterCV( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { BodeShifterCV *plugin; plugin = (BodeShifterCV *)instance; switch (port) { case BODESHIFTERCV_SHIFT_B: plugin->shift_b = data; break; case BODESHIFTERCV_MIX: plugin->mix = data; break; case BODESHIFTERCV_INPUT: plugin->input = data; break; case BODESHIFTERCV_ATTEN: plugin->atten = data; break; case BODESHIFTERCV_SHIFT: plugin->shift = data; break; case BODESHIFTERCV_DOUT: plugin->dout = data; break; case BODESHIFTERCV_UOUT: plugin->uout = data; break; case BODESHIFTERCV_MIXOUT: plugin->mixout = data; break; case BODESHIFTERCV_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateBodeShifterCV( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { BodeShifterCV *plugin_data = (BodeShifterCV *)malloc(sizeof(BodeShifterCV)); LADSPA_Data *delay = NULL; unsigned int dptr; float fs; float phi; float *sint = NULL; #line 57 "bode_shifter_cv_1432.xml" unsigned int i; fs = (float)s_rate; delay = calloc(D_SIZE, sizeof(LADSPA_Data)); sint = calloc(SIN_T_SIZE + 4, sizeof(float)); dptr = 0; phi = 0.0f; for (i = 0; i < SIN_T_SIZE + 4; i++) { sint[i] = sinf(2.0f * M_PI * (float)i / (float)SIN_T_SIZE); } plugin_data->delay = delay; plugin_data->dptr = dptr; plugin_data->fs = fs; plugin_data->phi = phi; plugin_data->sint = sint; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runBodeShifterCV(LADSPA_Handle instance, unsigned long sample_count) { BodeShifterCV *plugin_data = (BodeShifterCV *)instance; /* Base shift (float value) */ const LADSPA_Data shift_b = *(plugin_data->shift_b); /* Mix (-1=down, +1=up) (float value) */ const LADSPA_Data mix = *(plugin_data->mix); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* CV Attenuation (float value) */ const LADSPA_Data atten = *(plugin_data->atten); /* Shift CV (array of floats of length sample_count) */ const LADSPA_Data * const shift = plugin_data->shift; /* Down out (array of floats of length sample_count) */ LADSPA_Data * const dout = plugin_data->dout; /* Up out (array of floats of length sample_count) */ LADSPA_Data * const uout = plugin_data->uout; /* Mix out (array of floats of length sample_count) */ LADSPA_Data * const mixout = plugin_data->mixout; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; float fs = plugin_data->fs; float phi = plugin_data->phi; float * sint = plugin_data->sint; #line 73 "bode_shifter_cv_1432.xml" unsigned long pos; unsigned int i; float hilb, rm1, rm2; int int_p; float frac_p; const float freq_fix = (float)SIN_T_SIZE * 1000.0f * f_clamp(atten, 0.0f, 10.0f) / fs; const float base_ofs = (float)SIN_T_SIZE * f_clamp(shift_b, 0.0f, 10000.0f) / fs; const float mixc = mix * 0.5f + 0.5f; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = input[pos]; /* Perform the Hilbert FIR convolution * (probably FFT would be faster) */ hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } /* Calcuate the table positions for the sine modulator */ int_p = f_round(floor(phi)); /* Calculate ringmod1, the transformed input modulated with a shift Hz * sinewave. This creates a +180 degree sideband at source-shift Hz and * a 0 degree sindeband at source+shift Hz */ frac_p = phi - int_p; rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Calcuate the table positions for the cosine modulator */ int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); /* Calculate ringmod2, the delayed input modulated with a shift Hz * cosinewave. This creates a 0 degree sideband at source+shift Hz * and a -180 degree sindeband at source-shift Hz */ rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Output the sum and differences of the ringmods. The +/-180 degree * sidebands cancel (more of less) and just leave the shifted * components */ buffer_write(dout[pos], (rm2 - rm1) * 0.5f); buffer_write(uout[pos], (rm2 + rm1) * 0.5f); buffer_write(mixout[pos], (dout[pos] - uout[pos]) * mixc + uout[pos]); dptr = (dptr + 1) & (D_SIZE - 1); phi += f_clamp(shift[pos], 0.0f, 10.0f) * freq_fix + base_ofs; while (phi > SIN_T_SIZE) { phi -= SIN_T_SIZE; } } plugin_data->dptr = dptr; plugin_data->phi = phi; *(plugin_data->latency) = 99; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainBodeShifterCV(LADSPA_Handle instance, LADSPA_Data gain) { ((BodeShifterCV *)instance)->run_adding_gain = gain; } static void runAddingBodeShifterCV(LADSPA_Handle instance, unsigned long sample_count) { BodeShifterCV *plugin_data = (BodeShifterCV *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Base shift (float value) */ const LADSPA_Data shift_b = *(plugin_data->shift_b); /* Mix (-1=down, +1=up) (float value) */ const LADSPA_Data mix = *(plugin_data->mix); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* CV Attenuation (float value) */ const LADSPA_Data atten = *(plugin_data->atten); /* Shift CV (array of floats of length sample_count) */ const LADSPA_Data * const shift = plugin_data->shift; /* Down out (array of floats of length sample_count) */ LADSPA_Data * const dout = plugin_data->dout; /* Up out (array of floats of length sample_count) */ LADSPA_Data * const uout = plugin_data->uout; /* Mix out (array of floats of length sample_count) */ LADSPA_Data * const mixout = plugin_data->mixout; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; float fs = plugin_data->fs; float phi = plugin_data->phi; float * sint = plugin_data->sint; #line 73 "bode_shifter_cv_1432.xml" unsigned long pos; unsigned int i; float hilb, rm1, rm2; int int_p; float frac_p; const float freq_fix = (float)SIN_T_SIZE * 1000.0f * f_clamp(atten, 0.0f, 10.0f) / fs; const float base_ofs = (float)SIN_T_SIZE * f_clamp(shift_b, 0.0f, 10000.0f) / fs; const float mixc = mix * 0.5f + 0.5f; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = input[pos]; /* Perform the Hilbert FIR convolution * (probably FFT would be faster) */ hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } /* Calcuate the table positions for the sine modulator */ int_p = f_round(floor(phi)); /* Calculate ringmod1, the transformed input modulated with a shift Hz * sinewave. This creates a +180 degree sideband at source-shift Hz and * a 0 degree sindeband at source+shift Hz */ frac_p = phi - int_p; rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Calcuate the table positions for the cosine modulator */ int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1); /* Calculate ringmod2, the delayed input modulated with a shift Hz * cosinewave. This creates a 0 degree sideband at source+shift Hz * and a -180 degree sindeband at source-shift Hz */ rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p, sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]); /* Output the sum and differences of the ringmods. The +/-180 degree * sidebands cancel (more of less) and just leave the shifted * components */ buffer_write(dout[pos], (rm2 - rm1) * 0.5f); buffer_write(uout[pos], (rm2 + rm1) * 0.5f); buffer_write(mixout[pos], (dout[pos] - uout[pos]) * mixc + uout[pos]); dptr = (dptr + 1) & (D_SIZE - 1); phi += f_clamp(shift[pos], 0.0f, 10.0f) * freq_fix + base_ofs; while (phi > SIN_T_SIZE) { phi -= SIN_T_SIZE; } } plugin_data->dptr = dptr; plugin_data->phi = phi; *(plugin_data->latency) = 99; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif bodeShifterCVDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (bodeShifterCVDescriptor) { bodeShifterCVDescriptor->UniqueID = 1432; bodeShifterCVDescriptor->Label = "bodeShifterCV"; bodeShifterCVDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; bodeShifterCVDescriptor->Name = D_("Bode frequency shifter (CV)"); bodeShifterCVDescriptor->Maker = "Steve Harris "; bodeShifterCVDescriptor->Copyright = "GPL"; bodeShifterCVDescriptor->PortCount = 9; port_descriptors = (LADSPA_PortDescriptor *)calloc(9, sizeof(LADSPA_PortDescriptor)); bodeShifterCVDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(9, sizeof(LADSPA_PortRangeHint)); bodeShifterCVDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(9, sizeof(char*)); bodeShifterCVDescriptor->PortNames = (const char **)port_names; /* Parameters for Base shift */ port_descriptors[BODESHIFTERCV_SHIFT_B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BODESHIFTERCV_SHIFT_B] = D_("Base shift"); port_range_hints[BODESHIFTERCV_SHIFT_B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[BODESHIFTERCV_SHIFT_B].LowerBound = 0; port_range_hints[BODESHIFTERCV_SHIFT_B].UpperBound = 5000; /* Parameters for Mix (-1=down, +1=up) */ port_descriptors[BODESHIFTERCV_MIX] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BODESHIFTERCV_MIX] = D_("Mix (-1=down, +1=up)"); port_range_hints[BODESHIFTERCV_MIX].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[BODESHIFTERCV_MIX].LowerBound = -1; port_range_hints[BODESHIFTERCV_MIX].UpperBound = 1; /* Parameters for Input */ port_descriptors[BODESHIFTERCV_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTERCV_INPUT] = D_("Input"); port_range_hints[BODESHIFTERCV_INPUT].HintDescriptor = 0; /* Parameters for CV Attenuation */ port_descriptors[BODESHIFTERCV_ATTEN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BODESHIFTERCV_ATTEN] = D_("CV Attenuation"); port_range_hints[BODESHIFTERCV_ATTEN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[BODESHIFTERCV_ATTEN].LowerBound = 0; port_range_hints[BODESHIFTERCV_ATTEN].UpperBound = 1; /* Parameters for Shift CV */ port_descriptors[BODESHIFTERCV_SHIFT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTERCV_SHIFT] = D_("Shift CV"); port_range_hints[BODESHIFTERCV_SHIFT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[BODESHIFTERCV_SHIFT].LowerBound = 0; port_range_hints[BODESHIFTERCV_SHIFT].UpperBound = 5; /* Parameters for Down out */ port_descriptors[BODESHIFTERCV_DOUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTERCV_DOUT] = D_("Down out"); port_range_hints[BODESHIFTERCV_DOUT].HintDescriptor = 0; /* Parameters for Up out */ port_descriptors[BODESHIFTERCV_UOUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTERCV_UOUT] = D_("Up out"); port_range_hints[BODESHIFTERCV_UOUT].HintDescriptor = 0; /* Parameters for Mix out */ port_descriptors[BODESHIFTERCV_MIXOUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BODESHIFTERCV_MIXOUT] = D_("Mix out"); port_range_hints[BODESHIFTERCV_MIXOUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[BODESHIFTERCV_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[BODESHIFTERCV_LATENCY] = D_("latency"); port_range_hints[BODESHIFTERCV_LATENCY].HintDescriptor = 0; bodeShifterCVDescriptor->activate = NULL; bodeShifterCVDescriptor->cleanup = cleanupBodeShifterCV; bodeShifterCVDescriptor->connect_port = connectPortBodeShifterCV; bodeShifterCVDescriptor->deactivate = NULL; bodeShifterCVDescriptor->instantiate = instantiateBodeShifterCV; bodeShifterCVDescriptor->run = runBodeShifterCV; bodeShifterCVDescriptor->run_adding = runAddingBodeShifterCV; bodeShifterCVDescriptor->set_run_adding_gain = setRunAddingGainBodeShifterCV; } } void __attribute__((destructor)) swh_fini() { if (bodeShifterCVDescriptor) { free((LADSPA_PortDescriptor *)bodeShifterCVDescriptor->PortDescriptors); free((char **)bodeShifterCVDescriptor->PortNames); free((LADSPA_PortRangeHint *)bodeShifterCVDescriptor->PortRangeHints); free(bodeShifterCVDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/butterworth_1902.c000066400000000000000000000560601247673406200225210ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "config.h" #include "util/iir.h" #include "util/buffer.h" #define BWXOVER_IIR_CUTOFF 0 #define BWXOVER_IIR_RESONANCE 1 #define BWXOVER_IIR_INPUT 2 #define BWXOVER_IIR_LPOUTPUT 3 #define BWXOVER_IIR_HPOUTPUT 4 #define BUTTLOW_IIR_CUTOFF 0 #define BUTTLOW_IIR_RESONANCE 1 #define BUTTLOW_IIR_INPUT 2 #define BUTTLOW_IIR_OUTPUT 3 #define BUTTHIGH_IIR_CUTOFF 0 #define BUTTHIGH_IIR_RESONANCE 1 #define BUTTHIGH_IIR_INPUT 2 #define BUTTHIGH_IIR_OUTPUT 3 static LADSPA_Descriptor *bwxover_iirDescriptor = NULL; typedef struct { LADSPA_Data *cutoff; LADSPA_Data *resonance; LADSPA_Data *input; LADSPA_Data *lpoutput; LADSPA_Data *hpoutput; iir_stage_t* gt; iirf_t* iirf; long sample_rate; LADSPA_Data run_adding_gain; } Bwxover_iir; static LADSPA_Descriptor *buttlow_iirDescriptor = NULL; typedef struct { LADSPA_Data *cutoff; LADSPA_Data *resonance; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* gt; iirf_t* iirf; long sample_rate; LADSPA_Data run_adding_gain; } Buttlow_iir; static LADSPA_Descriptor *butthigh_iirDescriptor = NULL; typedef struct { LADSPA_Data *cutoff; LADSPA_Data *resonance; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* gt; iirf_t* iirf; long sample_rate; LADSPA_Data run_adding_gain; } Butthigh_iir; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return bwxover_iirDescriptor; case 1: return buttlow_iirDescriptor; case 2: return butthigh_iirDescriptor; default: return NULL; } } static void activateBwxover_iir(LADSPA_Handle instance) { Bwxover_iir *plugin_data = (Bwxover_iir *)instance; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); butterworth_stage(gt, 0, *(plugin_data->cutoff), *(plugin_data->resonance), sample_rate); plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; } static void cleanupBwxover_iir(LADSPA_Handle instance) { Bwxover_iir *plugin_data = (Bwxover_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortBwxover_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Bwxover_iir *plugin; plugin = (Bwxover_iir *)instance; switch (port) { case BWXOVER_IIR_CUTOFF: plugin->cutoff = data; break; case BWXOVER_IIR_RESONANCE: plugin->resonance = data; break; case BWXOVER_IIR_INPUT: plugin->input = data; break; case BWXOVER_IIR_LPOUTPUT: plugin->lpoutput = data; break; case BWXOVER_IIR_HPOUTPUT: plugin->hpoutput = data; break; } } static LADSPA_Handle instantiateBwxover_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Bwxover_iir *plugin_data = (Bwxover_iir *)malloc(sizeof(Bwxover_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; sample_rate = s_rate; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { Bwxover_iir *plugin_data = (Bwxover_iir *)instance; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* LP-Output (array of floats of length sample_count) */ LADSPA_Data * const lpoutput = plugin_data->lpoutput; /* HP-Output (array of floats of length sample_count) */ LADSPA_Data * const hpoutput = plugin_data->hpoutput; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; butterworth_stage(gt, 0, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0); buffer_sub(input, lpoutput, hpoutput, sample_count); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainBwxover_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Bwxover_iir *)instance)->run_adding_gain = gain; } static void runAddingBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { Bwxover_iir *plugin_data = (Bwxover_iir *)instance; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* LP-Output (array of floats of length sample_count) */ LADSPA_Data * const lpoutput = plugin_data->lpoutput; /* HP-Output (array of floats of length sample_count) */ LADSPA_Data * const hpoutput = plugin_data->hpoutput; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; butterworth_stage(gt, 0, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0); buffer_sub(input, lpoutput, hpoutput, sample_count); } static void activateButtlow_iir(LADSPA_Handle instance) { Buttlow_iir *plugin_data = (Buttlow_iir *)instance; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); butterworth_stage(gt, 0, *(plugin_data->cutoff), *(plugin_data->resonance), sample_rate); plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; } static void cleanupButtlow_iir(LADSPA_Handle instance) { Buttlow_iir *plugin_data = (Buttlow_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortButtlow_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Buttlow_iir *plugin; plugin = (Buttlow_iir *)instance; switch (port) { case BUTTLOW_IIR_CUTOFF: plugin->cutoff = data; break; case BUTTLOW_IIR_RESONANCE: plugin->resonance = data; break; case BUTTLOW_IIR_INPUT: plugin->input = data; break; case BUTTLOW_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateButtlow_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Buttlow_iir *plugin_data = (Buttlow_iir *)malloc(sizeof(Buttlow_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; sample_rate = s_rate; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { Buttlow_iir *plugin_data = (Buttlow_iir *)instance; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; butterworth_stage(gt, 0, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainButtlow_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Buttlow_iir *)instance)->run_adding_gain = gain; } static void runAddingButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { Buttlow_iir *plugin_data = (Buttlow_iir *)instance; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; butterworth_stage(gt, 0, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } static void activateButthigh_iir(LADSPA_Handle instance) { Butthigh_iir *plugin_data = (Butthigh_iir *)instance; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); butterworth_stage(gt, 1, *(plugin_data->cutoff), *(plugin_data->resonance), sample_rate); plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; } static void cleanupButthigh_iir(LADSPA_Handle instance) { Butthigh_iir *plugin_data = (Butthigh_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortButthigh_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Butthigh_iir *plugin; plugin = (Butthigh_iir *)instance; switch (port) { case BUTTHIGH_IIR_CUTOFF: plugin->cutoff = data; break; case BUTTHIGH_IIR_RESONANCE: plugin->resonance = data; break; case BUTTHIGH_IIR_INPUT: plugin->input = data; break; case BUTTHIGH_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateButthigh_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Butthigh_iir *plugin_data = (Butthigh_iir *)malloc(sizeof(Butthigh_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; sample_rate = s_rate; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) { Butthigh_iir *plugin_data = (Butthigh_iir *)instance; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; butterworth_stage(gt, 1, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainButthigh_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Butthigh_iir *)instance)->run_adding_gain = gain; } static void runAddingButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) { Butthigh_iir *plugin_data = (Butthigh_iir *)instance; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; butterworth_stage(gt, 1, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif bwxover_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (bwxover_iirDescriptor) { bwxover_iirDescriptor->UniqueID = 1902; bwxover_iirDescriptor->Label = "bwxover_iir"; bwxover_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; bwxover_iirDescriptor->Name = D_("Glame Butterworth X-over Filter"); bwxover_iirDescriptor->Maker = "Alexander Ehlert "; bwxover_iirDescriptor->Copyright = "GPL"; bwxover_iirDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); bwxover_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); bwxover_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); bwxover_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Cutoff Frequency (Hz) */ port_descriptors[BWXOVER_IIR_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BWXOVER_IIR_CUTOFF] = D_("Cutoff Frequency (Hz)"); port_range_hints[BWXOVER_IIR_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BWXOVER_IIR_CUTOFF].LowerBound = 0.0001; port_range_hints[BWXOVER_IIR_CUTOFF].UpperBound = 0.45; /* Parameters for Resonance */ port_descriptors[BWXOVER_IIR_RESONANCE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BWXOVER_IIR_RESONANCE] = D_("Resonance"); port_range_hints[BWXOVER_IIR_RESONANCE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[BWXOVER_IIR_RESONANCE].LowerBound = 0.1; port_range_hints[BWXOVER_IIR_RESONANCE].UpperBound = 1.41; /* Parameters for Input */ port_descriptors[BWXOVER_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BWXOVER_IIR_INPUT] = D_("Input"); port_range_hints[BWXOVER_IIR_INPUT].HintDescriptor = 0; /* Parameters for LP-Output */ port_descriptors[BWXOVER_IIR_LPOUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BWXOVER_IIR_LPOUTPUT] = D_("LP-Output"); port_range_hints[BWXOVER_IIR_LPOUTPUT].HintDescriptor = 0; /* Parameters for HP-Output */ port_descriptors[BWXOVER_IIR_HPOUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BWXOVER_IIR_HPOUTPUT] = D_("HP-Output"); port_range_hints[BWXOVER_IIR_HPOUTPUT].HintDescriptor = 0; bwxover_iirDescriptor->activate = activateBwxover_iir; bwxover_iirDescriptor->cleanup = cleanupBwxover_iir; bwxover_iirDescriptor->connect_port = connectPortBwxover_iir; bwxover_iirDescriptor->deactivate = NULL; bwxover_iirDescriptor->instantiate = instantiateBwxover_iir; bwxover_iirDescriptor->run = runBwxover_iir; bwxover_iirDescriptor->run_adding = runAddingBwxover_iir; bwxover_iirDescriptor->set_run_adding_gain = setRunAddingGainBwxover_iir; } buttlow_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (buttlow_iirDescriptor) { buttlow_iirDescriptor->UniqueID = 1903; buttlow_iirDescriptor->Label = "buttlow_iir"; buttlow_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; buttlow_iirDescriptor->Name = D_("GLAME Butterworth Lowpass"); buttlow_iirDescriptor->Maker = "Alexander Ehlert "; buttlow_iirDescriptor->Copyright = "GPL"; buttlow_iirDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); buttlow_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); buttlow_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); buttlow_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Cutoff Frequency (Hz) */ port_descriptors[BUTTLOW_IIR_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BUTTLOW_IIR_CUTOFF] = D_("Cutoff Frequency (Hz)"); port_range_hints[BUTTLOW_IIR_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BUTTLOW_IIR_CUTOFF].LowerBound = 0.0001; port_range_hints[BUTTLOW_IIR_CUTOFF].UpperBound = 0.45; /* Parameters for Resonance */ port_descriptors[BUTTLOW_IIR_RESONANCE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BUTTLOW_IIR_RESONANCE] = D_("Resonance"); port_range_hints[BUTTLOW_IIR_RESONANCE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[BUTTLOW_IIR_RESONANCE].LowerBound = 0.1; port_range_hints[BUTTLOW_IIR_RESONANCE].UpperBound = 1.41; /* Parameters for Input */ port_descriptors[BUTTLOW_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BUTTLOW_IIR_INPUT] = D_("Input"); port_range_hints[BUTTLOW_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[BUTTLOW_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BUTTLOW_IIR_OUTPUT] = D_("Output"); port_range_hints[BUTTLOW_IIR_OUTPUT].HintDescriptor = 0; buttlow_iirDescriptor->activate = activateButtlow_iir; buttlow_iirDescriptor->cleanup = cleanupButtlow_iir; buttlow_iirDescriptor->connect_port = connectPortButtlow_iir; buttlow_iirDescriptor->deactivate = NULL; buttlow_iirDescriptor->instantiate = instantiateButtlow_iir; buttlow_iirDescriptor->run = runButtlow_iir; buttlow_iirDescriptor->run_adding = runAddingButtlow_iir; buttlow_iirDescriptor->set_run_adding_gain = setRunAddingGainButtlow_iir; } butthigh_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (butthigh_iirDescriptor) { butthigh_iirDescriptor->UniqueID = 1904; butthigh_iirDescriptor->Label = "butthigh_iir"; butthigh_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; butthigh_iirDescriptor->Name = D_("GLAME Butterworth Highpass"); butthigh_iirDescriptor->Maker = "Alexander Ehlert "; butthigh_iirDescriptor->Copyright = "GPL"; butthigh_iirDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); butthigh_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); butthigh_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); butthigh_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Cutoff Frequency (Hz) */ port_descriptors[BUTTHIGH_IIR_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BUTTHIGH_IIR_CUTOFF] = D_("Cutoff Frequency (Hz)"); port_range_hints[BUTTHIGH_IIR_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[BUTTHIGH_IIR_CUTOFF].LowerBound = 0.0001; port_range_hints[BUTTHIGH_IIR_CUTOFF].UpperBound = 0.45; /* Parameters for Resonance */ port_descriptors[BUTTHIGH_IIR_RESONANCE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[BUTTHIGH_IIR_RESONANCE] = D_("Resonance"); port_range_hints[BUTTHIGH_IIR_RESONANCE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[BUTTHIGH_IIR_RESONANCE].LowerBound = 0.1; port_range_hints[BUTTHIGH_IIR_RESONANCE].UpperBound = 1.41; /* Parameters for Input */ port_descriptors[BUTTHIGH_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[BUTTHIGH_IIR_INPUT] = D_("Input"); port_range_hints[BUTTHIGH_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[BUTTHIGH_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[BUTTHIGH_IIR_OUTPUT] = D_("Output"); port_range_hints[BUTTHIGH_IIR_OUTPUT].HintDescriptor = 0; butthigh_iirDescriptor->activate = activateButthigh_iir; butthigh_iirDescriptor->cleanup = cleanupButthigh_iir; butthigh_iirDescriptor->connect_port = connectPortButthigh_iir; butthigh_iirDescriptor->deactivate = NULL; butthigh_iirDescriptor->instantiate = instantiateButthigh_iir; butthigh_iirDescriptor->run = runButthigh_iir; butthigh_iirDescriptor->run_adding = runAddingButthigh_iir; butthigh_iirDescriptor->set_run_adding_gain = setRunAddingGainButthigh_iir; } } void __attribute__((destructor)) swh_fini() { if (bwxover_iirDescriptor) { free((LADSPA_PortDescriptor *)bwxover_iirDescriptor->PortDescriptors); free((char **)bwxover_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)bwxover_iirDescriptor->PortRangeHints); free(bwxover_iirDescriptor); } if (buttlow_iirDescriptor) { free((LADSPA_PortDescriptor *)buttlow_iirDescriptor->PortDescriptors); free((char **)buttlow_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)buttlow_iirDescriptor->PortRangeHints); free(buttlow_iirDescriptor); } if (butthigh_iirDescriptor) { free((LADSPA_PortDescriptor *)butthigh_iirDescriptor->PortDescriptors); free((char **)butthigh_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)butthigh_iirDescriptor->PortRangeHints); free(butthigh_iirDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/chebstortion_1430.c000066400000000000000000000245261247673406200226310ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "chebstortion_1430.xml" #include #define HARMONICS 11 #define STAGES 2 static float cd_lut[STAGES][HARMONICS]; /* Calculate Chebychev coefficents from partial magnitudes, adapted from * example in Num. Rec. */ void chebpc(float c[], float d[]) { int k, j; float sv, dd[HARMONICS]; for (j = 0; j < HARMONICS; j++) { d[j] = dd[j] = 0.0; } d[0] = c[HARMONICS - 1]; for (j = HARMONICS - 2; j >= 1; j--) { for (k = HARMONICS - j; k >= 1; k--) { sv = d[k]; d[k] = 2.0 * d[k - 1] - dd[k]; dd[k] = sv; } sv = d[0]; d[0] = -dd[0] + c[j]; dd[0] = sv; } for (j = HARMONICS - 1; j >= 1; j--) { d[j] = d[j - 1] - dd[j]; } d[0] = -dd[0] + 0.5 * c[0]; } #define CHEBSTORTION_DIST 0 #define CHEBSTORTION_INPUT 1 #define CHEBSTORTION_OUTPUT 2 static LADSPA_Descriptor *chebstortionDescriptor = NULL; typedef struct { LADSPA_Data *dist; LADSPA_Data *input; LADSPA_Data *output; unsigned int count; float env; float itm1; float otm1; LADSPA_Data run_adding_gain; } Chebstortion; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return chebstortionDescriptor; default: return NULL; } } static void activateChebstortion(LADSPA_Handle instance) { Chebstortion *plugin_data = (Chebstortion *)instance; unsigned int count = plugin_data->count; float env = plugin_data->env; float itm1 = plugin_data->itm1; float otm1 = plugin_data->otm1; #line 82 "chebstortion_1430.xml" itm1 = 0.0f; otm1 = 0.0f; env = 0.0f; count = 0; plugin_data->count = count; plugin_data->env = env; plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } static void cleanupChebstortion(LADSPA_Handle instance) { free(instance); } static void connectPortChebstortion( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Chebstortion *plugin; plugin = (Chebstortion *)instance; switch (port) { case CHEBSTORTION_DIST: plugin->dist = data; break; case CHEBSTORTION_INPUT: plugin->input = data; break; case CHEBSTORTION_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateChebstortion( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Chebstortion *plugin_data = (Chebstortion *)malloc(sizeof(Chebstortion)); unsigned int count; float env; float itm1; float otm1; #line 62 "chebstortion_1430.xml" unsigned int i; cd_lut[0][0] = 0.0f; cd_lut[0][1] = 1.0f; for (i=2; icount = count; plugin_data->env = env; plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runChebstortion(LADSPA_Handle instance, unsigned long sample_count) { Chebstortion *plugin_data = (Chebstortion *)instance; /* Distortion (float value) */ const LADSPA_Data dist = *(plugin_data->dist); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int count = plugin_data->count; float env = plugin_data->env; float itm1 = plugin_data->itm1; float otm1 = plugin_data->otm1; #line 89 "chebstortion_1430.xml" unsigned long pos, i; float p[HARMONICS], interp[HARMONICS]; for (pos = 0; pos < sample_count; pos++) { const float x = input[pos]; const float a = fabs(input[pos]); float y; if (a > env) { env = env * 0.9f + a * 0.1f; } else { env = env * 0.97f + a * 0.03f; } if (count-- == 0) { for (i=0; iitm1 = itm1; plugin_data->otm1 = otm1; plugin_data->env = env; plugin_data->count = count; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainChebstortion(LADSPA_Handle instance, LADSPA_Data gain) { ((Chebstortion *)instance)->run_adding_gain = gain; } static void runAddingChebstortion(LADSPA_Handle instance, unsigned long sample_count) { Chebstortion *plugin_data = (Chebstortion *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Distortion (float value) */ const LADSPA_Data dist = *(plugin_data->dist); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int count = plugin_data->count; float env = plugin_data->env; float itm1 = plugin_data->itm1; float otm1 = plugin_data->otm1; #line 89 "chebstortion_1430.xml" unsigned long pos, i; float p[HARMONICS], interp[HARMONICS]; for (pos = 0; pos < sample_count; pos++) { const float x = input[pos]; const float a = fabs(input[pos]); float y; if (a > env) { env = env * 0.9f + a * 0.1f; } else { env = env * 0.97f + a * 0.03f; } if (count-- == 0) { for (i=0; iitm1 = itm1; plugin_data->otm1 = otm1; plugin_data->env = env; plugin_data->count = count; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif chebstortionDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (chebstortionDescriptor) { chebstortionDescriptor->UniqueID = 1430; chebstortionDescriptor->Label = "chebstortion"; chebstortionDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; chebstortionDescriptor->Name = D_("Chebyshev distortion"); chebstortionDescriptor->Maker = "Steve Harris "; chebstortionDescriptor->Copyright = "GPL"; chebstortionDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); chebstortionDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); chebstortionDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); chebstortionDescriptor->PortNames = (const char **)port_names; /* Parameters for Distortion */ port_descriptors[CHEBSTORTION_DIST] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[CHEBSTORTION_DIST] = D_("Distortion"); port_range_hints[CHEBSTORTION_DIST].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[CHEBSTORTION_DIST].LowerBound = 0; port_range_hints[CHEBSTORTION_DIST].UpperBound = 3; /* Parameters for Input */ port_descriptors[CHEBSTORTION_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[CHEBSTORTION_INPUT] = D_("Input"); port_range_hints[CHEBSTORTION_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[CHEBSTORTION_INPUT].LowerBound = -1; port_range_hints[CHEBSTORTION_INPUT].UpperBound = +1; /* Parameters for Output */ port_descriptors[CHEBSTORTION_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[CHEBSTORTION_OUTPUT] = D_("Output"); port_range_hints[CHEBSTORTION_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[CHEBSTORTION_OUTPUT].LowerBound = -1; port_range_hints[CHEBSTORTION_OUTPUT].UpperBound = +1; chebstortionDescriptor->activate = activateChebstortion; chebstortionDescriptor->cleanup = cleanupChebstortion; chebstortionDescriptor->connect_port = connectPortChebstortion; chebstortionDescriptor->deactivate = NULL; chebstortionDescriptor->instantiate = instantiateChebstortion; chebstortionDescriptor->run = runChebstortion; chebstortionDescriptor->run_adding = runAddingChebstortion; chebstortionDescriptor->set_run_adding_gain = setRunAddingGainChebstortion; } } void __attribute__((destructor)) swh_fini() { if (chebstortionDescriptor) { free((LADSPA_PortDescriptor *)chebstortionDescriptor->PortDescriptors); free((char **)chebstortionDescriptor->PortNames); free((LADSPA_PortRangeHint *)chebstortionDescriptor->PortRangeHints); free(chebstortionDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/comb_1190.c000066400000000000000000000225651247673406200210520ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "comb_1190.xml" #include "ladspa-util.h" #define COMB_SIZE 0x4000 #define COMB_MASK 0x3FFF #define COMB_FREQ 0 #define COMB_FB 1 #define COMB_INPUT 2 #define COMB_OUTPUT 3 static LADSPA_Descriptor *combDescriptor = NULL; typedef struct { LADSPA_Data *freq; LADSPA_Data *fb; LADSPA_Data *input; LADSPA_Data *output; long comb_pos; LADSPA_Data *comb_tbl; float last_offset; long sample_rate; LADSPA_Data run_adding_gain; } Comb; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return combDescriptor; default: return NULL; } } static void activateComb(LADSPA_Handle instance) { Comb *plugin_data = (Comb *)instance; long comb_pos = plugin_data->comb_pos; LADSPA_Data *comb_tbl = plugin_data->comb_tbl; float last_offset = plugin_data->last_offset; long sample_rate = plugin_data->sample_rate; #line 27 "comb_1190.xml" int i; for (i = 0; i < COMB_SIZE; i++) { comb_tbl[i] = 0; } comb_pos = 0; last_offset = 1000; plugin_data->comb_pos = comb_pos; plugin_data->comb_tbl = comb_tbl; plugin_data->last_offset = last_offset; plugin_data->sample_rate = sample_rate; } static void cleanupComb(LADSPA_Handle instance) { #line 37 "comb_1190.xml" Comb *plugin_data = (Comb *)instance; free(plugin_data->comb_tbl); free(instance); } static void connectPortComb( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Comb *plugin; plugin = (Comb *)instance; switch (port) { case COMB_FREQ: plugin->freq = data; break; case COMB_FB: plugin->fb = data; break; case COMB_INPUT: plugin->input = data; break; case COMB_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateComb( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Comb *plugin_data = (Comb *)malloc(sizeof(Comb)); long comb_pos; LADSPA_Data *comb_tbl = NULL; float last_offset; long sample_rate; #line 20 "comb_1190.xml" sample_rate = s_rate; comb_tbl = malloc(sizeof(LADSPA_Data) * COMB_SIZE); comb_pos = 0; last_offset = 1000; plugin_data->comb_pos = comb_pos; plugin_data->comb_tbl = comb_tbl; plugin_data->last_offset = last_offset; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runComb(LADSPA_Handle instance, unsigned long sample_count) { Comb *plugin_data = (Comb *)instance; /* Band separation (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Feedback (float value) */ const LADSPA_Data fb = *(plugin_data->fb); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long comb_pos = plugin_data->comb_pos; LADSPA_Data * comb_tbl = plugin_data->comb_tbl; float last_offset = plugin_data->last_offset; long sample_rate = plugin_data->sample_rate; #line 41 "comb_1190.xml" float offset; int data_pos; unsigned long pos; float xf, xf_step, d_pos, fr, interp; offset = sample_rate / freq; offset = f_clamp(offset, 0, COMB_SIZE - 1); xf_step = 1.0f / (float)sample_count; xf = 0.0f; for (pos = 0; pos < sample_count; pos++) { xf += xf_step; d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); data_pos = f_trunc(d_pos); fr = d_pos - data_pos; interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); comb_tbl[comb_pos] = input[pos] + fb * interp; buffer_write(output[pos], (input[pos] + interp) * 0.5f); comb_pos = (comb_pos + 1) & COMB_MASK; } plugin_data->comb_pos = comb_pos; plugin_data->last_offset = offset; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainComb(LADSPA_Handle instance, LADSPA_Data gain) { ((Comb *)instance)->run_adding_gain = gain; } static void runAddingComb(LADSPA_Handle instance, unsigned long sample_count) { Comb *plugin_data = (Comb *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Band separation (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Feedback (float value) */ const LADSPA_Data fb = *(plugin_data->fb); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long comb_pos = plugin_data->comb_pos; LADSPA_Data * comb_tbl = plugin_data->comb_tbl; float last_offset = plugin_data->last_offset; long sample_rate = plugin_data->sample_rate; #line 41 "comb_1190.xml" float offset; int data_pos; unsigned long pos; float xf, xf_step, d_pos, fr, interp; offset = sample_rate / freq; offset = f_clamp(offset, 0, COMB_SIZE - 1); xf_step = 1.0f / (float)sample_count; xf = 0.0f; for (pos = 0; pos < sample_count; pos++) { xf += xf_step; d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); data_pos = f_trunc(d_pos); fr = d_pos - data_pos; interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); comb_tbl[comb_pos] = input[pos] + fb * interp; buffer_write(output[pos], (input[pos] + interp) * 0.5f); comb_pos = (comb_pos + 1) & COMB_MASK; } plugin_data->comb_pos = comb_pos; plugin_data->last_offset = offset; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif combDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (combDescriptor) { combDescriptor->UniqueID = 1190; combDescriptor->Label = "comb"; combDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; combDescriptor->Name = D_("Comb Filter"); combDescriptor->Maker = "Steve Harris "; combDescriptor->Copyright = "GPL"; combDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); combDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); combDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); combDescriptor->PortNames = (const char **)port_names; /* Parameters for Band separation (Hz) */ port_descriptors[COMB_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_FREQ] = D_("Band separation (Hz)"); port_range_hints[COMB_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[COMB_FREQ].LowerBound = 16; port_range_hints[COMB_FREQ].UpperBound = 640; /* Parameters for Feedback */ port_descriptors[COMB_FB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_FB] = D_("Feedback"); port_range_hints[COMB_FB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[COMB_FB].LowerBound = -0.99; port_range_hints[COMB_FB].UpperBound = 0.99; /* Parameters for Input */ port_descriptors[COMB_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[COMB_INPUT] = D_("Input"); port_range_hints[COMB_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[COMB_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[COMB_OUTPUT] = D_("Output"); port_range_hints[COMB_OUTPUT].HintDescriptor = 0; combDescriptor->activate = activateComb; combDescriptor->cleanup = cleanupComb; combDescriptor->connect_port = connectPortComb; combDescriptor->deactivate = NULL; combDescriptor->instantiate = instantiateComb; combDescriptor->run = runComb; combDescriptor->run_adding = runAddingComb; combDescriptor->set_run_adding_gain = setRunAddingGainComb; } } void __attribute__((destructor)) swh_fini() { if (combDescriptor) { free((LADSPA_PortDescriptor *)combDescriptor->PortDescriptors); free((char **)combDescriptor->PortNames); free((LADSPA_PortRangeHint *)combDescriptor->PortRangeHints); free(combDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/comb_1887.c000066400000000000000000001240271247673406200210630ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "ladspa-util.h" #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define CALC_DELAY(delaytime) \ (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1))) #define LOG001 -6.9077552789f static inline float calc_feedback (float delaytime, float decaytime) { if (delaytime == 0.f) return 0.f; else if (decaytime > 0.f) return exp(LOG001 * delaytime / decaytime); else if (decaytime < 0.f) return -exp(LOG001 * delaytime / -decaytime); else return 0.f; } #define COMB_N_IN 0 #define COMB_N_OUT 1 #define COMB_N_MAX_DELAY 2 #define COMB_N_DELAY_TIME 3 #define COMB_N_DECAY_TIME 4 #define COMB_L_IN 0 #define COMB_L_OUT 1 #define COMB_L_MAX_DELAY 2 #define COMB_L_DELAY_TIME 3 #define COMB_L_DECAY_TIME 4 #define COMB_C_IN 0 #define COMB_C_OUT 1 #define COMB_C_MAX_DELAY 2 #define COMB_C_DELAY_TIME 3 #define COMB_C_DECAY_TIME 4 static LADSPA_Descriptor *comb_nDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *decay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data feedback; LADSPA_Data last_decay_time; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Comb_n; static LADSPA_Descriptor *comb_lDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *decay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data feedback; LADSPA_Data last_decay_time; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Comb_l; static LADSPA_Descriptor *comb_cDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *decay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data feedback; LADSPA_Data last_decay_time; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Comb_c; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return comb_nDescriptor; case 1: return comb_lDescriptor; case 2: return comb_cDescriptor; default: return NULL; } } static void activateComb_n(LADSPA_Handle instance) { Comb_n *plugin_data = (Comb_n *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupComb_n(LADSPA_Handle instance) { Comb_n *plugin_data = (Comb_n *)instance; free(plugin_data->buffer); free(instance); } static void connectPortComb_n( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Comb_n *plugin; plugin = (Comb_n *)instance; switch (port) { case COMB_N_IN: plugin->in = data; break; case COMB_N_OUT: plugin->out = data; break; case COMB_N_MAX_DELAY: plugin->max_delay = data; break; case COMB_N_DELAY_TIME: plugin->delay_time = data; break; case COMB_N_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateComb_n( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Comb_n *plugin_data = (Comb_n *)malloc(sizeof(Comb_n)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data feedback = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runComb_n(LADSPA_Handle instance, unsigned long sample_count) { Comb_n *plugin_data = (Comb_n *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; i = max_delay; /* stop gcc complaining */ if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time) { long read_phase = write_phase - (long)delay_samples; LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); LADSPA_Data *lastptr = buffer + buffer_mask + 1; if (decay_time == last_decay_time) { long remain = sample_count; while (remain) { long read_space = lastptr - readptr; long write_space = lastptr - writeptr; long to_process = MIN (MIN (read_space, remain), write_space); if (to_process == 0) return; // buffer not allocated. remain -= to_process; for (i=0; ilast_decay_time = decay_time; plugin_data->feedback = feedback; } write_phase += sample_count; } else { float next_delay_samples = CALC_DELAY (delay_time); float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; float next_feedback = calc_feedback (delay_time, decay_time); float feedback_slope = (next_feedback - feedback) / sample_count; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainComb_n(LADSPA_Handle instance, LADSPA_Data gain) { ((Comb_n *)instance)->run_adding_gain = gain; } static void runAddingComb_n(LADSPA_Handle instance, unsigned long sample_count) { Comb_n *plugin_data = (Comb_n *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; i = max_delay; /* stop gcc complaining */ if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time) { long read_phase = write_phase - (long)delay_samples; LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); LADSPA_Data *lastptr = buffer + buffer_mask + 1; if (decay_time == last_decay_time) { long remain = sample_count; while (remain) { long read_space = lastptr - readptr; long write_space = lastptr - writeptr; long to_process = MIN (MIN (read_space, remain), write_space); if (to_process == 0) return; // buffer not allocated. remain -= to_process; for (i=0; ilast_decay_time = decay_time; plugin_data->feedback = feedback; } write_phase += sample_count; } else { float next_delay_samples = CALC_DELAY (delay_time); float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; float next_feedback = calc_feedback (delay_time, decay_time); float feedback_slope = (next_feedback - feedback) / sample_count; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } static void activateComb_l(LADSPA_Handle instance) { Comb_l *plugin_data = (Comb_l *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupComb_l(LADSPA_Handle instance) { Comb_l *plugin_data = (Comb_l *)instance; free(plugin_data->buffer); free(instance); } static void connectPortComb_l( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Comb_l *plugin; plugin = (Comb_l *)instance; switch (port) { case COMB_L_IN: plugin->in = data; break; case COMB_L_OUT: plugin->out = data; break; case COMB_L_MAX_DELAY: plugin->max_delay = data; break; case COMB_L_DELAY_TIME: plugin->delay_time = data; break; case COMB_L_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateComb_l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Comb_l *plugin_data = (Comb_l *)malloc(sizeof(Comb_l)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data feedback = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runComb_l(LADSPA_Handle instance, unsigned long sample_count) { Comb_l *plugin_data = (Comb_l *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; i = max_delay; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainComb_l(LADSPA_Handle instance, LADSPA_Data gain) { ((Comb_l *)instance)->run_adding_gain = gain; } static void runAddingComb_l(LADSPA_Handle instance, unsigned long sample_count) { Comb_l *plugin_data = (Comb_l *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; i = max_delay; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } static void activateComb_c(LADSPA_Handle instance) { Comb_c *plugin_data = (Comb_c *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupComb_c(LADSPA_Handle instance) { Comb_c *plugin_data = (Comb_c *)instance; free(plugin_data->buffer); free(instance); } static void connectPortComb_c( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Comb_c *plugin; plugin = (Comb_c *)instance; switch (port) { case COMB_C_IN: plugin->in = data; break; case COMB_C_OUT: plugin->out = data; break; case COMB_C_MAX_DELAY: plugin->max_delay = data; break; case COMB_C_DELAY_TIME: plugin->delay_time = data; break; case COMB_C_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateComb_c( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Comb_c *plugin_data = (Comb_c *)malloc(sizeof(Comb_c)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data feedback = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->feedback = feedback; plugin_data->last_decay_time = last_decay_time; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runComb_c(LADSPA_Handle instance, unsigned long sample_count) { Comb_c *plugin_data = (Comb_c *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; i = max_delay; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainComb_c(LADSPA_Handle instance, LADSPA_Data gain) { ((Comb_c *)instance)->run_adding_gain = gain; } static void runAddingComb_c(LADSPA_Handle instance, unsigned long sample_count) { Comb_c *plugin_data = (Comb_c *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Max Delay (s) (float value) */ const LADSPA_Data max_delay = *(plugin_data->max_delay); /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data feedback = plugin_data->feedback; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; i = max_delay; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time); } if (delay_time == last_delay_time && decay_time == last_decay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->last_decay_time = decay_time; plugin_data->feedback = feedback; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif comb_nDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (comb_nDescriptor) { comb_nDescriptor->UniqueID = 1889; comb_nDescriptor->Label = "comb_n"; comb_nDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; comb_nDescriptor->Name = D_("Comb delay line, noninterpolating"); comb_nDescriptor->Maker = "Andy Wingo "; comb_nDescriptor->Copyright = "GPL"; comb_nDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); comb_nDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); comb_nDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); comb_nDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[COMB_N_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[COMB_N_IN] = D_("Input"); port_range_hints[COMB_N_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[COMB_N_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[COMB_N_OUT] = D_("Output"); port_range_hints[COMB_N_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[COMB_N_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_N_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[COMB_N_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_N_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[COMB_N_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_N_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[COMB_N_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_N_DELAY_TIME].LowerBound = 0; /* Parameters for Decay Time (s) */ port_descriptors[COMB_N_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_N_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[COMB_N_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_N_DECAY_TIME].LowerBound = 0; comb_nDescriptor->activate = activateComb_n; comb_nDescriptor->cleanup = cleanupComb_n; comb_nDescriptor->connect_port = connectPortComb_n; comb_nDescriptor->deactivate = NULL; comb_nDescriptor->instantiate = instantiateComb_n; comb_nDescriptor->run = runComb_n; comb_nDescriptor->run_adding = runAddingComb_n; comb_nDescriptor->set_run_adding_gain = setRunAddingGainComb_n; } comb_lDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (comb_lDescriptor) { comb_lDescriptor->UniqueID = 1887; comb_lDescriptor->Label = "comb_l"; comb_lDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; comb_lDescriptor->Name = D_("Comb delay line, linear interpolation"); comb_lDescriptor->Maker = "Andy Wingo "; comb_lDescriptor->Copyright = "GPL"; comb_lDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); comb_lDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); comb_lDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); comb_lDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[COMB_L_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[COMB_L_IN] = D_("Input"); port_range_hints[COMB_L_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[COMB_L_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[COMB_L_OUT] = D_("Output"); port_range_hints[COMB_L_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[COMB_L_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_L_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[COMB_L_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_L_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[COMB_L_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_L_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[COMB_L_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_L_DELAY_TIME].LowerBound = 0; /* Parameters for Decay Time (s) */ port_descriptors[COMB_L_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_L_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[COMB_L_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_L_DECAY_TIME].LowerBound = 0; comb_lDescriptor->activate = activateComb_l; comb_lDescriptor->cleanup = cleanupComb_l; comb_lDescriptor->connect_port = connectPortComb_l; comb_lDescriptor->deactivate = NULL; comb_lDescriptor->instantiate = instantiateComb_l; comb_lDescriptor->run = runComb_l; comb_lDescriptor->run_adding = runAddingComb_l; comb_lDescriptor->set_run_adding_gain = setRunAddingGainComb_l; } comb_cDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (comb_cDescriptor) { comb_cDescriptor->UniqueID = 1888; comb_cDescriptor->Label = "comb_c"; comb_cDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; comb_cDescriptor->Name = D_("Comb delay line, cubic spline interpolation"); comb_cDescriptor->Maker = "Andy Wingo "; comb_cDescriptor->Copyright = "GPL"; comb_cDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); comb_cDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); comb_cDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); comb_cDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[COMB_C_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[COMB_C_IN] = D_("Input"); port_range_hints[COMB_C_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[COMB_C_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[COMB_C_OUT] = D_("Output"); port_range_hints[COMB_C_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[COMB_C_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_C_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[COMB_C_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_C_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[COMB_C_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_C_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[COMB_C_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_C_DELAY_TIME].LowerBound = 0; /* Parameters for Decay Time (s) */ port_descriptors[COMB_C_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMB_C_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[COMB_C_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[COMB_C_DECAY_TIME].LowerBound = 0; comb_cDescriptor->activate = activateComb_c; comb_cDescriptor->cleanup = cleanupComb_c; comb_cDescriptor->connect_port = connectPortComb_c; comb_cDescriptor->deactivate = NULL; comb_cDescriptor->instantiate = instantiateComb_c; comb_cDescriptor->run = runComb_c; comb_cDescriptor->run_adding = runAddingComb_c; comb_cDescriptor->set_run_adding_gain = setRunAddingGainComb_c; } } void __attribute__((destructor)) swh_fini() { if (comb_nDescriptor) { free((LADSPA_PortDescriptor *)comb_nDescriptor->PortDescriptors); free((char **)comb_nDescriptor->PortNames); free((LADSPA_PortRangeHint *)comb_nDescriptor->PortRangeHints); free(comb_nDescriptor); } if (comb_lDescriptor) { free((LADSPA_PortDescriptor *)comb_lDescriptor->PortDescriptors); free((char **)comb_lDescriptor->PortNames); free((LADSPA_PortRangeHint *)comb_lDescriptor->PortRangeHints); free(comb_lDescriptor); } if (comb_cDescriptor) { free((LADSPA_PortDescriptor *)comb_cDescriptor->PortDescriptors); free((char **)comb_cDescriptor->PortNames); free((LADSPA_PortRangeHint *)comb_cDescriptor->PortRangeHints); free(comb_cDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/comb_splitter_1411.c000066400000000000000000000237761247673406200230010ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "comb_splitter_1411.xml" #include "ladspa-util.h" #define COMB_SIZE 0x4000 #define COMB_MASK 0x3FFF #define COMBSPLITTER_FREQ 0 #define COMBSPLITTER_INPUT 1 #define COMBSPLITTER_OUT1 2 #define COMBSPLITTER_OUT2 3 static LADSPA_Descriptor *combSplitterDescriptor = NULL; typedef struct { LADSPA_Data *freq; LADSPA_Data *input; LADSPA_Data *out1; LADSPA_Data *out2; long comb_pos; LADSPA_Data *comb_tbl; float last_offset; long sample_rate; LADSPA_Data run_adding_gain; } CombSplitter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return combSplitterDescriptor; default: return NULL; } } static void activateCombSplitter(LADSPA_Handle instance) { CombSplitter *plugin_data = (CombSplitter *)instance; long comb_pos = plugin_data->comb_pos; LADSPA_Data *comb_tbl = plugin_data->comb_tbl; float last_offset = plugin_data->last_offset; long sample_rate = plugin_data->sample_rate; #line 29 "comb_splitter_1411.xml" int i; for (i = 0; i < COMB_SIZE; i++) { comb_tbl[i] = 0; } comb_pos = 0; last_offset = 1000; plugin_data->comb_pos = comb_pos; plugin_data->comb_tbl = comb_tbl; plugin_data->last_offset = last_offset; plugin_data->sample_rate = sample_rate; } static void cleanupCombSplitter(LADSPA_Handle instance) { #line 39 "comb_splitter_1411.xml" CombSplitter *plugin_data = (CombSplitter *)instance; free(plugin_data->comb_tbl); free(instance); } static void connectPortCombSplitter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { CombSplitter *plugin; plugin = (CombSplitter *)instance; switch (port) { case COMBSPLITTER_FREQ: plugin->freq = data; break; case COMBSPLITTER_INPUT: plugin->input = data; break; case COMBSPLITTER_OUT1: plugin->out1 = data; break; case COMBSPLITTER_OUT2: plugin->out2 = data; break; } } static LADSPA_Handle instantiateCombSplitter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { CombSplitter *plugin_data = (CombSplitter *)malloc(sizeof(CombSplitter)); long comb_pos; LADSPA_Data *comb_tbl = NULL; float last_offset; long sample_rate; #line 22 "comb_splitter_1411.xml" sample_rate = s_rate; comb_tbl = malloc(sizeof(LADSPA_Data) * COMB_SIZE); comb_pos = 0; last_offset = 1000; plugin_data->comb_pos = comb_pos; plugin_data->comb_tbl = comb_tbl; plugin_data->last_offset = last_offset; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runCombSplitter(LADSPA_Handle instance, unsigned long sample_count) { CombSplitter *plugin_data = (CombSplitter *)instance; /* Band separation (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output 1 (array of floats of length sample_count) */ LADSPA_Data * const out1 = plugin_data->out1; /* Output 2 (array of floats of length sample_count) */ LADSPA_Data * const out2 = plugin_data->out2; long comb_pos = plugin_data->comb_pos; LADSPA_Data * comb_tbl = plugin_data->comb_tbl; float last_offset = plugin_data->last_offset; long sample_rate = plugin_data->sample_rate; #line 43 "comb_splitter_1411.xml" float offset; int data_pos; unsigned long pos; float xf, xf_step, d_pos, fr, interp, in; offset = sample_rate / freq; offset = f_clamp(offset, 0, COMB_SIZE - 1); xf_step = 1.0f / (float)sample_count; xf = 0.0f; for (pos = 0; pos < sample_count; pos++) { xf += xf_step; d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); data_pos = f_trunc(d_pos); fr = d_pos - data_pos; interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); in = input[pos]; comb_tbl[comb_pos] = in; buffer_write(out1[pos], (in + interp) * 0.5f); buffer_write(out2[pos], (in - interp) * 0.5f); comb_pos = (comb_pos + 1) & COMB_MASK; } plugin_data->comb_pos = comb_pos; plugin_data->last_offset = offset; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainCombSplitter(LADSPA_Handle instance, LADSPA_Data gain) { ((CombSplitter *)instance)->run_adding_gain = gain; } static void runAddingCombSplitter(LADSPA_Handle instance, unsigned long sample_count) { CombSplitter *plugin_data = (CombSplitter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Band separation (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output 1 (array of floats of length sample_count) */ LADSPA_Data * const out1 = plugin_data->out1; /* Output 2 (array of floats of length sample_count) */ LADSPA_Data * const out2 = plugin_data->out2; long comb_pos = plugin_data->comb_pos; LADSPA_Data * comb_tbl = plugin_data->comb_tbl; float last_offset = plugin_data->last_offset; long sample_rate = plugin_data->sample_rate; #line 43 "comb_splitter_1411.xml" float offset; int data_pos; unsigned long pos; float xf, xf_step, d_pos, fr, interp, in; offset = sample_rate / freq; offset = f_clamp(offset, 0, COMB_SIZE - 1); xf_step = 1.0f / (float)sample_count; xf = 0.0f; for (pos = 0; pos < sample_count; pos++) { xf += xf_step; d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset); data_pos = f_trunc(d_pos); fr = d_pos - data_pos; interp = cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]); in = input[pos]; comb_tbl[comb_pos] = in; buffer_write(out1[pos], (in + interp) * 0.5f); buffer_write(out2[pos], (in - interp) * 0.5f); comb_pos = (comb_pos + 1) & COMB_MASK; } plugin_data->comb_pos = comb_pos; plugin_data->last_offset = offset; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif combSplitterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (combSplitterDescriptor) { combSplitterDescriptor->UniqueID = 1411; combSplitterDescriptor->Label = "combSplitter"; combSplitterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; combSplitterDescriptor->Name = D_("Comb Splitter"); combSplitterDescriptor->Maker = "Steve Harris "; combSplitterDescriptor->Copyright = "GPL"; combSplitterDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); combSplitterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); combSplitterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); combSplitterDescriptor->PortNames = (const char **)port_names; /* Parameters for Band separation (Hz) */ port_descriptors[COMBSPLITTER_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[COMBSPLITTER_FREQ] = D_("Band separation (Hz)"); port_range_hints[COMBSPLITTER_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[COMBSPLITTER_FREQ].LowerBound = 16; port_range_hints[COMBSPLITTER_FREQ].UpperBound = 640; /* Parameters for Input */ port_descriptors[COMBSPLITTER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[COMBSPLITTER_INPUT] = D_("Input"); port_range_hints[COMBSPLITTER_INPUT].HintDescriptor = 0; /* Parameters for Output 1 */ port_descriptors[COMBSPLITTER_OUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[COMBSPLITTER_OUT1] = D_("Output 1"); port_range_hints[COMBSPLITTER_OUT1].HintDescriptor = 0; /* Parameters for Output 2 */ port_descriptors[COMBSPLITTER_OUT2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[COMBSPLITTER_OUT2] = D_("Output 2"); port_range_hints[COMBSPLITTER_OUT2].HintDescriptor = 0; combSplitterDescriptor->activate = activateCombSplitter; combSplitterDescriptor->cleanup = cleanupCombSplitter; combSplitterDescriptor->connect_port = connectPortCombSplitter; combSplitterDescriptor->deactivate = NULL; combSplitterDescriptor->instantiate = instantiateCombSplitter; combSplitterDescriptor->run = runCombSplitter; combSplitterDescriptor->run_adding = runAddingCombSplitter; combSplitterDescriptor->set_run_adding_gain = setRunAddingGainCombSplitter; } } void __attribute__((destructor)) swh_fini() { if (combSplitterDescriptor) { free((LADSPA_PortDescriptor *)combSplitterDescriptor->PortDescriptors); free((char **)combSplitterDescriptor->PortNames); free((LADSPA_PortRangeHint *)combSplitterDescriptor->PortRangeHints); free(combSplitterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/config.h000066400000000000000000000000001247673406200207060ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/const_1909.c000066400000000000000000000150121247673406200212550ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define CONST_AMPLITUDE 0 #define CONST_INPUT 1 #define CONST_OUTPUT 2 static LADSPA_Descriptor *constDescriptor = NULL; typedef struct { LADSPA_Data *amplitude; LADSPA_Data *input; LADSPA_Data *output; float last_amp; LADSPA_Data run_adding_gain; } Const; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return constDescriptor; default: return NULL; } } static void activateConst(LADSPA_Handle instance) { Const *plugin_data = (Const *)instance; float last_amp = plugin_data->last_amp; #line 18 "const_1909.xml" last_amp = 0.0f; plugin_data->last_amp = last_amp; } static void cleanupConst(LADSPA_Handle instance) { free(instance); } static void connectPortConst( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Const *plugin; plugin = (Const *)instance; switch (port) { case CONST_AMPLITUDE: plugin->amplitude = data; break; case CONST_INPUT: plugin->input = data; break; case CONST_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateConst( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Const *plugin_data = (Const *)malloc(sizeof(Const)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runConst(LADSPA_Handle instance, unsigned long sample_count) { Const *plugin_data = (Const *)instance; /* Signal amplitude (float value) */ const LADSPA_Data amplitude = *(plugin_data->amplitude); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float last_amp = plugin_data->last_amp; #line 22 "const_1909.xml" unsigned long pos; const float delta = (amplitude - last_amp) / (sample_count - 1); float amp = last_amp; for (pos = 0; pos < sample_count; pos++) { amp += delta; buffer_write(output[pos], input[pos] + amp); } plugin_data->last_amp = amp; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainConst(LADSPA_Handle instance, LADSPA_Data gain) { ((Const *)instance)->run_adding_gain = gain; } static void runAddingConst(LADSPA_Handle instance, unsigned long sample_count) { Const *plugin_data = (Const *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Signal amplitude (float value) */ const LADSPA_Data amplitude = *(plugin_data->amplitude); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float last_amp = plugin_data->last_amp; #line 22 "const_1909.xml" unsigned long pos; const float delta = (amplitude - last_amp) / (sample_count - 1); float amp = last_amp; for (pos = 0; pos < sample_count; pos++) { amp += delta; buffer_write(output[pos], input[pos] + amp); } plugin_data->last_amp = amp; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif constDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (constDescriptor) { constDescriptor->UniqueID = 1909; constDescriptor->Label = "const"; constDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; constDescriptor->Name = D_("Constant Signal Generator"); constDescriptor->Maker = "Steve Harris "; constDescriptor->Copyright = "GPL"; constDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); constDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); constDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); constDescriptor->PortNames = (const char **)port_names; /* Parameters for Signal amplitude */ port_descriptors[CONST_AMPLITUDE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[CONST_AMPLITUDE] = D_("Signal amplitude"); port_range_hints[CONST_AMPLITUDE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[CONST_AMPLITUDE].LowerBound = -1; port_range_hints[CONST_AMPLITUDE].UpperBound = 1.1; /* Parameters for Input */ port_descriptors[CONST_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[CONST_INPUT] = D_("Input"); port_range_hints[CONST_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[CONST_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[CONST_OUTPUT] = D_("Output"); port_range_hints[CONST_OUTPUT].HintDescriptor = 0; constDescriptor->activate = activateConst; constDescriptor->cleanup = cleanupConst; constDescriptor->connect_port = connectPortConst; constDescriptor->deactivate = NULL; constDescriptor->instantiate = instantiateConst; constDescriptor->run = runConst; constDescriptor->run_adding = runAddingConst; constDescriptor->set_run_adding_gain = setRunAddingGainConst; } } void __attribute__((destructor)) swh_fini() { if (constDescriptor) { free((LADSPA_PortDescriptor *)constDescriptor->PortDescriptors); free((char **)constDescriptor->PortNames); free((LADSPA_PortRangeHint *)constDescriptor->PortRangeHints); free(constDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/crossover_dist_1404.c000066400000000000000000000171661247673406200232010ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "crossover_dist_1404.xml" #include "ladspa-util.h" #define CROSSOVERDIST_AMP 0 #define CROSSOVERDIST_SMOOTH 1 #define CROSSOVERDIST_INPUT 2 #define CROSSOVERDIST_OUTPUT 3 static LADSPA_Descriptor *crossoverDistDescriptor = NULL; typedef struct { LADSPA_Data *amp; LADSPA_Data *smooth; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } CrossoverDist; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return crossoverDistDescriptor; default: return NULL; } } static void cleanupCrossoverDist(LADSPA_Handle instance) { free(instance); } static void connectPortCrossoverDist( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { CrossoverDist *plugin; plugin = (CrossoverDist *)instance; switch (port) { case CROSSOVERDIST_AMP: plugin->amp = data; break; case CROSSOVERDIST_SMOOTH: plugin->smooth = data; break; case CROSSOVERDIST_INPUT: plugin->input = data; break; case CROSSOVERDIST_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateCrossoverDist( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { CrossoverDist *plugin_data = (CrossoverDist *)malloc(sizeof(CrossoverDist)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runCrossoverDist(LADSPA_Handle instance, unsigned long sample_count) { CrossoverDist *plugin_data = (CrossoverDist *)instance; /* Crossover amplitude (float value) */ const LADSPA_Data amp = *(plugin_data->amp); /* Smoothing (float value) */ const LADSPA_Data smooth = *(plugin_data->smooth); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 21 "crossover_dist_1404.xml" unsigned long pos; float sig; const float fade = fabs(amp * smooth) + 0.0001; for (pos = 0; pos < sample_count; pos++) { sig = fabs(input[pos]) - amp; if (sig < 0.0f) { sig *= (1.0f + sig/fade) * smooth; } if (input[pos] < 0.0f) { buffer_write(output[pos], -sig); } else { buffer_write(output[pos], sig); } } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainCrossoverDist(LADSPA_Handle instance, LADSPA_Data gain) { ((CrossoverDist *)instance)->run_adding_gain = gain; } static void runAddingCrossoverDist(LADSPA_Handle instance, unsigned long sample_count) { CrossoverDist *plugin_data = (CrossoverDist *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Crossover amplitude (float value) */ const LADSPA_Data amp = *(plugin_data->amp); /* Smoothing (float value) */ const LADSPA_Data smooth = *(plugin_data->smooth); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 21 "crossover_dist_1404.xml" unsigned long pos; float sig; const float fade = fabs(amp * smooth) + 0.0001; for (pos = 0; pos < sample_count; pos++) { sig = fabs(input[pos]) - amp; if (sig < 0.0f) { sig *= (1.0f + sig/fade) * smooth; } if (input[pos] < 0.0f) { buffer_write(output[pos], -sig); } else { buffer_write(output[pos], sig); } } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif crossoverDistDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (crossoverDistDescriptor) { crossoverDistDescriptor->UniqueID = 1404; crossoverDistDescriptor->Label = "crossoverDist"; crossoverDistDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; crossoverDistDescriptor->Name = D_("Crossover distortion"); crossoverDistDescriptor->Maker = "Steve Harris "; crossoverDistDescriptor->Copyright = "GPL"; crossoverDistDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); crossoverDistDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); crossoverDistDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); crossoverDistDescriptor->PortNames = (const char **)port_names; /* Parameters for Crossover amplitude */ port_descriptors[CROSSOVERDIST_AMP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[CROSSOVERDIST_AMP] = D_("Crossover amplitude"); port_range_hints[CROSSOVERDIST_AMP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[CROSSOVERDIST_AMP].LowerBound = 0; port_range_hints[CROSSOVERDIST_AMP].UpperBound = 0.1; /* Parameters for Smoothing */ port_descriptors[CROSSOVERDIST_SMOOTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[CROSSOVERDIST_SMOOTH] = D_("Smoothing"); port_range_hints[CROSSOVERDIST_SMOOTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[CROSSOVERDIST_SMOOTH].LowerBound = 0; port_range_hints[CROSSOVERDIST_SMOOTH].UpperBound = 1; /* Parameters for Input */ port_descriptors[CROSSOVERDIST_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[CROSSOVERDIST_INPUT] = D_("Input"); port_range_hints[CROSSOVERDIST_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[CROSSOVERDIST_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[CROSSOVERDIST_OUTPUT] = D_("Output"); port_range_hints[CROSSOVERDIST_OUTPUT].HintDescriptor = 0; crossoverDistDescriptor->activate = NULL; crossoverDistDescriptor->cleanup = cleanupCrossoverDist; crossoverDistDescriptor->connect_port = connectPortCrossoverDist; crossoverDistDescriptor->deactivate = NULL; crossoverDistDescriptor->instantiate = instantiateCrossoverDist; crossoverDistDescriptor->run = runCrossoverDist; crossoverDistDescriptor->run_adding = runAddingCrossoverDist; crossoverDistDescriptor->set_run_adding_gain = setRunAddingGainCrossoverDist; } } void __attribute__((destructor)) swh_fini() { if (crossoverDistDescriptor) { free((LADSPA_PortDescriptor *)crossoverDistDescriptor->PortDescriptors); free((char **)crossoverDistDescriptor->PortNames); free((LADSPA_PortRangeHint *)crossoverDistDescriptor->PortRangeHints); free(crossoverDistDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/dc_remove_1207.c000066400000000000000000000141111247673406200220600ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define DCREMOVE_INPUT 0 #define DCREMOVE_OUTPUT 1 static LADSPA_Descriptor *dcRemoveDescriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data itm1; LADSPA_Data otm1; LADSPA_Data run_adding_gain; } DcRemove; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return dcRemoveDescriptor; default: return NULL; } } static void activateDcRemove(LADSPA_Handle instance) { DcRemove *plugin_data = (DcRemove *)instance; LADSPA_Data itm1 = plugin_data->itm1; LADSPA_Data otm1 = plugin_data->otm1; #line 17 "dc_remove_1207.xml" itm1 = 0.0f; otm1 = 0.0f; plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } static void cleanupDcRemove(LADSPA_Handle instance) { free(instance); } static void connectPortDcRemove( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { DcRemove *plugin; plugin = (DcRemove *)instance; switch (port) { case DCREMOVE_INPUT: plugin->input = data; break; case DCREMOVE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDcRemove( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { DcRemove *plugin_data = (DcRemove *)malloc(sizeof(DcRemove)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDcRemove(LADSPA_Handle instance, unsigned long sample_count) { DcRemove *plugin_data = (DcRemove *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data itm1 = plugin_data->itm1; LADSPA_Data otm1 = plugin_data->otm1; #line 22 "dc_remove_1207.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { otm1 = 0.999f * otm1 + input[pos] - itm1; itm1 = input[pos]; buffer_write(output[pos], otm1); } plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDcRemove(LADSPA_Handle instance, LADSPA_Data gain) { ((DcRemove *)instance)->run_adding_gain = gain; } static void runAddingDcRemove(LADSPA_Handle instance, unsigned long sample_count) { DcRemove *plugin_data = (DcRemove *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data itm1 = plugin_data->itm1; LADSPA_Data otm1 = plugin_data->otm1; #line 22 "dc_remove_1207.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { otm1 = 0.999f * otm1 + input[pos] - itm1; itm1 = input[pos]; buffer_write(output[pos], otm1); } plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif dcRemoveDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (dcRemoveDescriptor) { dcRemoveDescriptor->UniqueID = 1207; dcRemoveDescriptor->Label = "dcRemove"; dcRemoveDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; dcRemoveDescriptor->Name = D_("DC Offset Remover"); dcRemoveDescriptor->Maker = "Steve Harris "; dcRemoveDescriptor->Copyright = "GPL"; dcRemoveDescriptor->PortCount = 2; port_descriptors = (LADSPA_PortDescriptor *)calloc(2, sizeof(LADSPA_PortDescriptor)); dcRemoveDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(2, sizeof(LADSPA_PortRangeHint)); dcRemoveDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(2, sizeof(char*)); dcRemoveDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[DCREMOVE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DCREMOVE_INPUT] = D_("Input"); port_range_hints[DCREMOVE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DCREMOVE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DCREMOVE_OUTPUT] = D_("Output"); port_range_hints[DCREMOVE_OUTPUT].HintDescriptor = 0; dcRemoveDescriptor->activate = activateDcRemove; dcRemoveDescriptor->cleanup = cleanupDcRemove; dcRemoveDescriptor->connect_port = connectPortDcRemove; dcRemoveDescriptor->deactivate = NULL; dcRemoveDescriptor->instantiate = instantiateDcRemove; dcRemoveDescriptor->run = runDcRemove; dcRemoveDescriptor->run_adding = runAddingDcRemove; dcRemoveDescriptor->set_run_adding_gain = setRunAddingGainDcRemove; } } void __attribute__((destructor)) swh_fini() { if (dcRemoveDescriptor) { free((LADSPA_PortDescriptor *)dcRemoveDescriptor->PortDescriptors); free((char **)dcRemoveDescriptor->PortNames); free((LADSPA_PortRangeHint *)dcRemoveDescriptor->PortRangeHints); free(dcRemoveDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/decay_1886.c000066400000000000000000000206271247673406200212300ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "ladspa-util.h" #define LOG001 -6.9077552789f #define DECAY_IN 0 #define DECAY_OUT 1 #define DECAY_DECAY_TIME 2 static LADSPA_Descriptor *decayDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *decay_time; LADSPA_Data b; char first_time; LADSPA_Data last_decay_time; LADSPA_Data sample_rate; LADSPA_Data y; LADSPA_Data run_adding_gain; } Decay; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return decayDescriptor; default: return NULL; } } static void activateDecay(LADSPA_Handle instance) { Decay *plugin_data = (Decay *)instance; LADSPA_Data b = plugin_data->b; char first_time = plugin_data->first_time; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data sample_rate = plugin_data->sample_rate; LADSPA_Data y = plugin_data->y; b = 0.f; y = 0.f; last_decay_time = 0.f; first_time = 0; plugin_data->b = b; plugin_data->first_time = first_time; plugin_data->last_decay_time = last_decay_time; plugin_data->sample_rate = sample_rate; plugin_data->y = y; } static void cleanupDecay(LADSPA_Handle instance) { free(instance); } static void connectPortDecay( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Decay *plugin; plugin = (Decay *)instance; switch (port) { case DECAY_IN: plugin->in = data; break; case DECAY_OUT: plugin->out = data; break; case DECAY_DECAY_TIME: plugin->decay_time = data; break; } } static LADSPA_Handle instantiateDecay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Decay *plugin_data = (Decay *)malloc(sizeof(Decay)); LADSPA_Data b = 0; char first_time = 0; LADSPA_Data last_decay_time = 0; LADSPA_Data sample_rate = 0; LADSPA_Data y = 0; sample_rate = s_rate; plugin_data->b = b; plugin_data->first_time = first_time; plugin_data->last_decay_time = last_decay_time; plugin_data->sample_rate = sample_rate; plugin_data->y = y; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDecay(LADSPA_Handle instance, unsigned long sample_count) { Decay *plugin_data = (Decay *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data b = plugin_data->b; char first_time = plugin_data->first_time; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data sample_rate = plugin_data->sample_rate; LADSPA_Data y = plugin_data->y; unsigned int i; if (first_time) { plugin_data->last_decay_time = decay_time; plugin_data->b = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); plugin_data->first_time = 0; } if (decay_time == last_decay_time) { if (b == 0.f) for (i=0; ib = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); b_slope = (plugin_data->b - b) / sample_count; for (i=0; ilast_decay_time = decay_time; } plugin_data->y = y; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDecay(LADSPA_Handle instance, LADSPA_Data gain) { ((Decay *)instance)->run_adding_gain = gain; } static void runAddingDecay(LADSPA_Handle instance, unsigned long sample_count) { Decay *plugin_data = (Decay *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Decay Time (s) (float value) */ const LADSPA_Data decay_time = *(plugin_data->decay_time); LADSPA_Data b = plugin_data->b; char first_time = plugin_data->first_time; LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data sample_rate = plugin_data->sample_rate; LADSPA_Data y = plugin_data->y; unsigned int i; if (first_time) { plugin_data->last_decay_time = decay_time; plugin_data->b = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); plugin_data->first_time = 0; } if (decay_time == last_decay_time) { if (b == 0.f) for (i=0; ib = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate)); b_slope = (plugin_data->b - b) / sample_count; for (i=0; ilast_decay_time = decay_time; } plugin_data->y = y; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif decayDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (decayDescriptor) { decayDescriptor->UniqueID = 1886; decayDescriptor->Label = "decay"; decayDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; decayDescriptor->Name = D_("Exponential signal decay"); decayDescriptor->Maker = "Andy Wingo "; decayDescriptor->Copyright = "GPL"; decayDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); decayDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); decayDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); decayDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[DECAY_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DECAY_IN] = D_("Input"); port_range_hints[DECAY_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DECAY_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DECAY_OUT] = D_("Output"); port_range_hints[DECAY_OUT].HintDescriptor = 0; /* Parameters for Decay Time (s) */ port_descriptors[DECAY_DECAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DECAY_DECAY_TIME] = D_("Decay Time (s)"); port_range_hints[DECAY_DECAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DECAY_DECAY_TIME].LowerBound = 0; decayDescriptor->activate = activateDecay; decayDescriptor->cleanup = cleanupDecay; decayDescriptor->connect_port = connectPortDecay; decayDescriptor->deactivate = NULL; decayDescriptor->instantiate = instantiateDecay; decayDescriptor->run = runDecay; decayDescriptor->run_adding = runAddingDecay; decayDescriptor->set_run_adding_gain = setRunAddingGainDecay; } } void __attribute__((destructor)) swh_fini() { if (decayDescriptor) { free((LADSPA_PortDescriptor *)decayDescriptor->PortDescriptors); free((char **)decayDescriptor->PortNames); free((LADSPA_PortRangeHint *)decayDescriptor->PortRangeHints); free(decayDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/decimator_1202.c000066400000000000000000000220671247673406200220700ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "decimator_1202.xml" #include #include "ladspa-util.h" #define DECIMATOR_BITS 0 #define DECIMATOR_FS 1 #define DECIMATOR_INPUT 2 #define DECIMATOR_OUTPUT 3 static LADSPA_Descriptor *decimatorDescriptor = NULL; typedef struct { LADSPA_Data *bits; LADSPA_Data *fs; LADSPA_Data *input; LADSPA_Data *output; float count; LADSPA_Data last_out; long sample_rate; LADSPA_Data run_adding_gain; } Decimator; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return decimatorDescriptor; default: return NULL; } } static void cleanupDecimator(LADSPA_Handle instance) { free(instance); } static void connectPortDecimator( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Decimator *plugin; plugin = (Decimator *)instance; switch (port) { case DECIMATOR_BITS: plugin->bits = data; break; case DECIMATOR_FS: plugin->fs = data; break; case DECIMATOR_INPUT: plugin->input = data; break; case DECIMATOR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDecimator( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Decimator *plugin_data = (Decimator *)malloc(sizeof(Decimator)); float count; LADSPA_Data last_out; long sample_rate; #line 20 "decimator_1202.xml" sample_rate = s_rate; count = 0.0f; last_out = 0.0f; plugin_data->count = count; plugin_data->last_out = last_out; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDecimator(LADSPA_Handle instance, unsigned long sample_count) { Decimator *plugin_data = (Decimator *)instance; /* Bit depth (float value) */ const LADSPA_Data bits = *(plugin_data->bits); /* Sample rate (Hz) (float value) */ const LADSPA_Data fs = *(plugin_data->fs); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float count = plugin_data->count; LADSPA_Data last_out = plugin_data->last_out; long sample_rate = plugin_data->sample_rate; #line 26 "decimator_1202.xml" unsigned long pos; float step, stepr, delta, ratio; double dummy; if (bits >= 31.0f || bits < 1.0f) { step = 0.0f; stepr = 1.0f; } else { step = pow(0.5f, bits - 0.999f); stepr = 1/step; } if (fs >= sample_rate) { ratio = 1.0f; } else { ratio = fs/sample_rate; } for (pos = 0; pos < sample_count; pos++) { count += ratio; if (count >= 1.0f) { count -= 1.0f; delta = modf((input[pos] + (input[pos]<0?-1.0:1.0)*step*0.5) * stepr, &dummy) * step; last_out = input[pos] - delta; buffer_write(output[pos], last_out); } else { buffer_write(output[pos], last_out); } } plugin_data->last_out = last_out; plugin_data->count = count; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDecimator(LADSPA_Handle instance, LADSPA_Data gain) { ((Decimator *)instance)->run_adding_gain = gain; } static void runAddingDecimator(LADSPA_Handle instance, unsigned long sample_count) { Decimator *plugin_data = (Decimator *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Bit depth (float value) */ const LADSPA_Data bits = *(plugin_data->bits); /* Sample rate (Hz) (float value) */ const LADSPA_Data fs = *(plugin_data->fs); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float count = plugin_data->count; LADSPA_Data last_out = plugin_data->last_out; long sample_rate = plugin_data->sample_rate; #line 26 "decimator_1202.xml" unsigned long pos; float step, stepr, delta, ratio; double dummy; if (bits >= 31.0f || bits < 1.0f) { step = 0.0f; stepr = 1.0f; } else { step = pow(0.5f, bits - 0.999f); stepr = 1/step; } if (fs >= sample_rate) { ratio = 1.0f; } else { ratio = fs/sample_rate; } for (pos = 0; pos < sample_count; pos++) { count += ratio; if (count >= 1.0f) { count -= 1.0f; delta = modf((input[pos] + (input[pos]<0?-1.0:1.0)*step*0.5) * stepr, &dummy) * step; last_out = input[pos] - delta; buffer_write(output[pos], last_out); } else { buffer_write(output[pos], last_out); } } plugin_data->last_out = last_out; plugin_data->count = count; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif decimatorDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (decimatorDescriptor) { decimatorDescriptor->UniqueID = 1202; decimatorDescriptor->Label = "decimator"; decimatorDescriptor->Properties = 0; decimatorDescriptor->Name = D_("Decimator"); decimatorDescriptor->Maker = "Steve Harris "; decimatorDescriptor->Copyright = "GPL"; decimatorDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); decimatorDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); decimatorDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); decimatorDescriptor->PortNames = (const char **)port_names; /* Parameters for Bit depth */ port_descriptors[DECIMATOR_BITS] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DECIMATOR_BITS] = D_("Bit depth"); port_range_hints[DECIMATOR_BITS].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[DECIMATOR_BITS].LowerBound = 1; port_range_hints[DECIMATOR_BITS].UpperBound = 24; /* Parameters for Sample rate (Hz) */ port_descriptors[DECIMATOR_FS] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DECIMATOR_FS] = D_("Sample rate (Hz)"); port_range_hints[DECIMATOR_FS].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[DECIMATOR_FS].LowerBound = 0.001; port_range_hints[DECIMATOR_FS].UpperBound = 1; /* Parameters for Input */ port_descriptors[DECIMATOR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DECIMATOR_INPUT] = D_("Input"); port_range_hints[DECIMATOR_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[DECIMATOR_INPUT].LowerBound = -1.0; port_range_hints[DECIMATOR_INPUT].UpperBound = +1.0; /* Parameters for Output */ port_descriptors[DECIMATOR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DECIMATOR_OUTPUT] = D_("Output"); port_range_hints[DECIMATOR_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[DECIMATOR_OUTPUT].LowerBound = -1.0; port_range_hints[DECIMATOR_OUTPUT].UpperBound = +1.0; decimatorDescriptor->activate = NULL; decimatorDescriptor->cleanup = cleanupDecimator; decimatorDescriptor->connect_port = connectPortDecimator; decimatorDescriptor->deactivate = NULL; decimatorDescriptor->instantiate = instantiateDecimator; decimatorDescriptor->run = runDecimator; decimatorDescriptor->run_adding = runAddingDecimator; decimatorDescriptor->set_run_adding_gain = setRunAddingGainDecimator; } } void __attribute__((destructor)) swh_fini() { if (decimatorDescriptor) { free((LADSPA_PortDescriptor *)decimatorDescriptor->PortDescriptors); free((char **)decimatorDescriptor->PortNames); free((LADSPA_PortRangeHint *)decimatorDescriptor->PortRangeHints); free(decimatorDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/declip_1195.c000066400000000000000000000144711247673406200213740ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "declip_1195.xml" #define MAX_AMP 1.0f #define CLIP 0.8f #define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP)) #define CLIP_B (MAX_AMP - 2.0f * CLIP) #define DECLIP_INPUT 0 #define DECLIP_OUTPUT 1 static LADSPA_Descriptor *declipDescriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Declip; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return declipDescriptor; default: return NULL; } } static void cleanupDeclip(LADSPA_Handle instance) { free(instance); } static void connectPortDeclip( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Declip *plugin; plugin = (Declip *)instance; switch (port) { case DECLIP_INPUT: plugin->input = data; break; case DECLIP_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDeclip( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Declip *plugin_data = (Declip *)malloc(sizeof(Declip)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDeclip(LADSPA_Handle instance, unsigned long sample_count) { Declip *plugin_data = (Declip *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 23 "declip_1195.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { const LADSPA_Data in = input[pos]; if((in < CLIP) && (in > -CLIP)) { buffer_write(output[pos], in); } else if (in > 0.0f) { buffer_write(output[pos], MAX_AMP - (CLIP_A / (CLIP_B + in))); } else { buffer_write(output[pos], -(MAX_AMP - (CLIP_A / (CLIP_B - in)))); } } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDeclip(LADSPA_Handle instance, LADSPA_Data gain) { ((Declip *)instance)->run_adding_gain = gain; } static void runAddingDeclip(LADSPA_Handle instance, unsigned long sample_count) { Declip *plugin_data = (Declip *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 23 "declip_1195.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { const LADSPA_Data in = input[pos]; if((in < CLIP) && (in > -CLIP)) { buffer_write(output[pos], in); } else if (in > 0.0f) { buffer_write(output[pos], MAX_AMP - (CLIP_A / (CLIP_B + in))); } else { buffer_write(output[pos], -(MAX_AMP - (CLIP_A / (CLIP_B - in)))); } } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif declipDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (declipDescriptor) { declipDescriptor->UniqueID = 1195; declipDescriptor->Label = "declip"; declipDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; declipDescriptor->Name = D_("Declipper"); declipDescriptor->Maker = "Steve Harris "; declipDescriptor->Copyright = "GPL"; declipDescriptor->PortCount = 2; port_descriptors = (LADSPA_PortDescriptor *)calloc(2, sizeof(LADSPA_PortDescriptor)); declipDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(2, sizeof(LADSPA_PortRangeHint)); declipDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(2, sizeof(char*)); declipDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[DECLIP_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DECLIP_INPUT] = D_("Input"); port_range_hints[DECLIP_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[DECLIP_INPUT].LowerBound = -1; port_range_hints[DECLIP_INPUT].UpperBound = +1; /* Parameters for Output */ port_descriptors[DECLIP_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DECLIP_OUTPUT] = D_("Output"); port_range_hints[DECLIP_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[DECLIP_OUTPUT].LowerBound = -1; port_range_hints[DECLIP_OUTPUT].UpperBound = +1; declipDescriptor->activate = NULL; declipDescriptor->cleanup = cleanupDeclip; declipDescriptor->connect_port = connectPortDeclip; declipDescriptor->deactivate = NULL; declipDescriptor->instantiate = instantiateDeclip; declipDescriptor->run = runDeclip; declipDescriptor->run_adding = runAddingDeclip; declipDescriptor->set_run_adding_gain = setRunAddingGainDeclip; } } void __attribute__((destructor)) swh_fini() { if (declipDescriptor) { free((LADSPA_PortDescriptor *)declipDescriptor->PortDescriptors); free((char **)declipDescriptor->PortNames); free((LADSPA_PortRangeHint *)declipDescriptor->PortRangeHints); free(declipDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/delay_1898.c000066400000000000000000001022601247673406200212360ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "ladspa-util.h" #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define CALC_DELAY(delaytime) \ (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1))) #define DELAY_N_IN 0 #define DELAY_N_OUT 1 #define DELAY_N_MAX_DELAY 2 #define DELAY_N_DELAY_TIME 3 #define DELAY_L_IN 0 #define DELAY_L_OUT 1 #define DELAY_L_MAX_DELAY 2 #define DELAY_L_DELAY_TIME 3 #define DELAY_C_IN 0 #define DELAY_C_OUT 1 #define DELAY_C_MAX_DELAY 2 #define DELAY_C_DELAY_TIME 3 static LADSPA_Descriptor *delay_nDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Delay_n; static LADSPA_Descriptor *delay_lDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Delay_l; static LADSPA_Descriptor *delay_cDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *max_delay; LADSPA_Data *delay_time; LADSPA_Data *buffer; unsigned int buffer_mask; LADSPA_Data delay_samples; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Delay_c; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return delay_nDescriptor; case 1: return delay_lDescriptor; case 2: return delay_cDescriptor; default: return NULL; } } static void activateDelay_n(LADSPA_Handle instance) { Delay_n *plugin_data = (Delay_n *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupDelay_n(LADSPA_Handle instance) { Delay_n *plugin_data = (Delay_n *)instance; free(plugin_data->buffer); free(instance); } static void connectPortDelay_n( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Delay_n *plugin; plugin = (Delay_n *)instance; switch (port) { case DELAY_N_IN: plugin->in = data; break; case DELAY_N_OUT: plugin->out = data; break; case DELAY_N_MAX_DELAY: plugin->max_delay = data; break; case DELAY_N_DELAY_TIME: plugin->delay_time = data; break; } } static LADSPA_Handle instantiateDelay_n( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Delay_n *plugin_data = (Delay_n *)malloc(sizeof(Delay_n)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDelay_n(LADSPA_Handle instance, unsigned long sample_count) { Delay_n *plugin_data = (Delay_n *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long read_phase = write_phase - (long)delay_samples; LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); LADSPA_Data *lastptr = buffer + buffer_mask + 1; long remain = sample_count; while (remain) { long read_space = lastptr - readptr; long write_space = lastptr - writeptr; long to_process = MIN (MIN (read_space, remain), write_space); if (to_process == 0) return; // buffer not allocated. remain -= to_process; for (i=0; ilast_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDelay_n(LADSPA_Handle instance, LADSPA_Data gain) { ((Delay_n *)instance)->run_adding_gain = gain; } static void runAddingDelay_n(LADSPA_Handle instance, unsigned long sample_count) { Delay_n *plugin_data = (Delay_n *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long read_phase = write_phase - (long)delay_samples; LADSPA_Data *readptr = buffer + (read_phase & buffer_mask); LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask); LADSPA_Data *lastptr = buffer + buffer_mask + 1; long remain = sample_count; while (remain) { long read_space = lastptr - readptr; long write_space = lastptr - writeptr; long to_process = MIN (MIN (read_space, remain), write_space); if (to_process == 0) return; // buffer not allocated. remain -= to_process; for (i=0; ilast_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } static void activateDelay_l(LADSPA_Handle instance) { Delay_l *plugin_data = (Delay_l *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupDelay_l(LADSPA_Handle instance) { Delay_l *plugin_data = (Delay_l *)instance; free(plugin_data->buffer); free(instance); } static void connectPortDelay_l( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Delay_l *plugin; plugin = (Delay_l *)instance; switch (port) { case DELAY_L_IN: plugin->in = data; break; case DELAY_L_OUT: plugin->out = data; break; case DELAY_L_MAX_DELAY: plugin->max_delay = data; break; case DELAY_L_DELAY_TIME: plugin->delay_time = data; break; } } static LADSPA_Handle instantiateDelay_l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Delay_l *plugin_data = (Delay_l *)malloc(sizeof(Delay_l)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDelay_l(LADSPA_Handle instance, unsigned long sample_count) { Delay_l *plugin_data = (Delay_l *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDelay_l(LADSPA_Handle instance, LADSPA_Data gain) { ((Delay_l *)instance)->run_adding_gain = gain; } static void runAddingDelay_l(LADSPA_Handle instance, unsigned long sample_count) { Delay_l *plugin_data = (Delay_l *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } static void activateDelay_c(LADSPA_Handle instance) { Delay_c *plugin_data = (Delay_c *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) minsize = sample_rate * *plugin_data->max_delay; else if (plugin_data->delay_time) minsize = sample_rate * *plugin_data->delay_time; else minsize = sample_rate; /* 1 second default */ size = 1; while (size < minsize) size <<= 1; /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); if (buffer) buffer_mask = size - 1; else buffer_mask = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupDelay_c(LADSPA_Handle instance) { Delay_c *plugin_data = (Delay_c *)instance; free(plugin_data->buffer); free(instance); } static void connectPortDelay_c( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Delay_c *plugin; plugin = (Delay_c *)instance; switch (port) { case DELAY_C_IN: plugin->in = data; break; case DELAY_C_OUT: plugin->out = data; break; case DELAY_C_MAX_DELAY: plugin->max_delay = data; break; case DELAY_C_DELAY_TIME: plugin->delay_time = data; break; } } static LADSPA_Handle instantiateDelay_c( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Delay_c *plugin_data = (Delay_c *)malloc(sizeof(Delay_c)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask = 0; LADSPA_Data delay_samples = 0; LADSPA_Data last_delay_time = 0; unsigned int sample_rate = 0; long write_phase = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDelay_c(LADSPA_Handle instance, unsigned long sample_count) { Delay_c *plugin_data = (Delay_c *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDelay_c(LADSPA_Handle instance, LADSPA_Data gain) { ((Delay_c *)instance)->run_adding_gain = gain; } static void runAddingDelay_c(LADSPA_Handle instance, unsigned long sample_count) { Delay_c *plugin_data = (Delay_c *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long idelay_samples = (long)delay_samples; LADSPA_Data frac = delay_samples - idelay_samples; for (i=0; ilast_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif delay_nDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (delay_nDescriptor) { delay_nDescriptor->UniqueID = 1898; delay_nDescriptor->Label = "delay_n"; delay_nDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; delay_nDescriptor->Name = D_("Simple delay line, noninterpolating"); delay_nDescriptor->Maker = "Andy Wingo "; delay_nDescriptor->Copyright = "GPL"; delay_nDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); delay_nDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); delay_nDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); delay_nDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[DELAY_N_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DELAY_N_IN] = D_("Input"); port_range_hints[DELAY_N_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DELAY_N_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DELAY_N_OUT] = D_("Output"); port_range_hints[DELAY_N_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[DELAY_N_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAY_N_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[DELAY_N_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DELAY_N_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[DELAY_N_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAY_N_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[DELAY_N_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DELAY_N_DELAY_TIME].LowerBound = 0; delay_nDescriptor->activate = activateDelay_n; delay_nDescriptor->cleanup = cleanupDelay_n; delay_nDescriptor->connect_port = connectPortDelay_n; delay_nDescriptor->deactivate = NULL; delay_nDescriptor->instantiate = instantiateDelay_n; delay_nDescriptor->run = runDelay_n; delay_nDescriptor->run_adding = runAddingDelay_n; delay_nDescriptor->set_run_adding_gain = setRunAddingGainDelay_n; } delay_lDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (delay_lDescriptor) { delay_lDescriptor->UniqueID = 1899; delay_lDescriptor->Label = "delay_l"; delay_lDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; delay_lDescriptor->Name = D_("Simple delay line, linear interpolation"); delay_lDescriptor->Maker = "Andy Wingo "; delay_lDescriptor->Copyright = "GPL"; delay_lDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); delay_lDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); delay_lDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); delay_lDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[DELAY_L_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DELAY_L_IN] = D_("Input"); port_range_hints[DELAY_L_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DELAY_L_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DELAY_L_OUT] = D_("Output"); port_range_hints[DELAY_L_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[DELAY_L_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAY_L_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[DELAY_L_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DELAY_L_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[DELAY_L_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAY_L_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[DELAY_L_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DELAY_L_DELAY_TIME].LowerBound = 0; delay_lDescriptor->activate = activateDelay_l; delay_lDescriptor->cleanup = cleanupDelay_l; delay_lDescriptor->connect_port = connectPortDelay_l; delay_lDescriptor->deactivate = NULL; delay_lDescriptor->instantiate = instantiateDelay_l; delay_lDescriptor->run = runDelay_l; delay_lDescriptor->run_adding = runAddingDelay_l; delay_lDescriptor->set_run_adding_gain = setRunAddingGainDelay_l; } delay_cDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (delay_cDescriptor) { delay_cDescriptor->UniqueID = 1900; delay_cDescriptor->Label = "delay_c"; delay_cDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; delay_cDescriptor->Name = D_("Simple delay line, cubic spline interpolation"); delay_cDescriptor->Maker = "Andy Wingo "; delay_cDescriptor->Copyright = "GPL"; delay_cDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); delay_cDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); delay_cDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); delay_cDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[DELAY_C_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DELAY_C_IN] = D_("Input"); port_range_hints[DELAY_C_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DELAY_C_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DELAY_C_OUT] = D_("Output"); port_range_hints[DELAY_C_OUT].HintDescriptor = 0; /* Parameters for Max Delay (s) */ port_descriptors[DELAY_C_MAX_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAY_C_MAX_DELAY] = D_("Max Delay (s)"); port_range_hints[DELAY_C_MAX_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DELAY_C_MAX_DELAY].LowerBound = 0; /* Parameters for Delay Time (s) */ port_descriptors[DELAY_C_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAY_C_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[DELAY_C_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[DELAY_C_DELAY_TIME].LowerBound = 0; delay_cDescriptor->activate = activateDelay_c; delay_cDescriptor->cleanup = cleanupDelay_c; delay_cDescriptor->connect_port = connectPortDelay_c; delay_cDescriptor->deactivate = NULL; delay_cDescriptor->instantiate = instantiateDelay_c; delay_cDescriptor->run = runDelay_c; delay_cDescriptor->run_adding = runAddingDelay_c; delay_cDescriptor->set_run_adding_gain = setRunAddingGainDelay_c; } } void __attribute__((destructor)) swh_fini() { if (delay_nDescriptor) { free((LADSPA_PortDescriptor *)delay_nDescriptor->PortDescriptors); free((char **)delay_nDescriptor->PortNames); free((LADSPA_PortRangeHint *)delay_nDescriptor->PortRangeHints); free(delay_nDescriptor); } if (delay_lDescriptor) { free((LADSPA_PortDescriptor *)delay_lDescriptor->PortDescriptors); free((char **)delay_lDescriptor->PortNames); free((LADSPA_PortRangeHint *)delay_lDescriptor->PortRangeHints); free(delay_lDescriptor); } if (delay_cDescriptor) { free((LADSPA_PortDescriptor *)delay_cDescriptor->PortDescriptors); free((char **)delay_cDescriptor->PortNames); free((LADSPA_PortRangeHint *)delay_cDescriptor->PortRangeHints); free(delay_cDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/delayorama_1402.c000066400000000000000000000620131247673406200222340ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "delayorama_1402.xml" #include #define N_TAPS 128 typedef struct { unsigned int delay; float gain; } tap; #define DELAYORAMA_SEED 0 #define DELAYORAMA_GAIN 1 #define DELAYORAMA_FEEDBACK_PC 2 #define DELAYORAMA_TAP_COUNT 3 #define DELAYORAMA_FIRST_DELAY 4 #define DELAYORAMA_DELAY_RANGE 5 #define DELAYORAMA_DELAY_SCALE 6 #define DELAYORAMA_DELAY_RAND_PC 7 #define DELAYORAMA_GAIN_SCALE 8 #define DELAYORAMA_GAIN_RAND_PC 9 #define DELAYORAMA_WET 10 #define DELAYORAMA_INPUT 11 #define DELAYORAMA_OUTPUT 12 static LADSPA_Descriptor *delayoramaDescriptor = NULL; typedef struct { LADSPA_Data *seed; LADSPA_Data *gain; LADSPA_Data *feedback_pc; LADSPA_Data *tap_count; LADSPA_Data *first_delay; LADSPA_Data *delay_range; LADSPA_Data *delay_scale; LADSPA_Data *delay_rand_pc; LADSPA_Data *gain_scale; LADSPA_Data *gain_rand_pc; LADSPA_Data *wet; LADSPA_Data *input; LADSPA_Data *output; unsigned int active_set; LADSPA_Data *buffer; unsigned long buffer_pos; unsigned int buffer_size; float last_a_rand; float last_ampsc; float last_d_rand; float last_delaysc; unsigned int last_ntaps; LADSPA_Data last_out; float last_range; float last_seed; float last_start; unsigned int next_set; unsigned int sample_rate; tap ** taps; LADSPA_Data run_adding_gain; } Delayorama; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return delayoramaDescriptor; default: return NULL; } } static void activateDelayorama(LADSPA_Handle instance) { Delayorama *plugin_data = (Delayorama *)instance; unsigned int active_set = plugin_data->active_set; LADSPA_Data *buffer = plugin_data->buffer; unsigned long buffer_pos = plugin_data->buffer_pos; unsigned int buffer_size = plugin_data->buffer_size; float last_a_rand = plugin_data->last_a_rand; float last_ampsc = plugin_data->last_ampsc; float last_d_rand = plugin_data->last_d_rand; float last_delaysc = plugin_data->last_delaysc; unsigned int last_ntaps = plugin_data->last_ntaps; LADSPA_Data last_out = plugin_data->last_out; float last_range = plugin_data->last_range; float last_seed = plugin_data->last_seed; float last_start = plugin_data->last_start; unsigned int next_set = plugin_data->next_set; unsigned int sample_rate = plugin_data->sample_rate; tap **taps = plugin_data->taps; #line 52 "delayorama_1402.xml" memset(buffer, 0, buffer_size * sizeof(LADSPA_Data)); last_out = 0.0f; last_ampsc = 0.0f; last_delaysc = 0.0f; last_start = 0; last_range = 0; last_ntaps = 0; last_seed = 0; last_a_rand = 0; last_d_rand = 0; plugin_data->active_set = active_set; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->buffer_size = buffer_size; plugin_data->last_a_rand = last_a_rand; plugin_data->last_ampsc = last_ampsc; plugin_data->last_d_rand = last_d_rand; plugin_data->last_delaysc = last_delaysc; plugin_data->last_ntaps = last_ntaps; plugin_data->last_out = last_out; plugin_data->last_range = last_range; plugin_data->last_seed = last_seed; plugin_data->last_start = last_start; plugin_data->next_set = next_set; plugin_data->sample_rate = sample_rate; plugin_data->taps = taps; } static void cleanupDelayorama(LADSPA_Handle instance) { #line 66 "delayorama_1402.xml" Delayorama *plugin_data = (Delayorama *)instance; free(plugin_data->taps[0]); free(plugin_data->taps[1]); free(plugin_data->taps); free(plugin_data->buffer); free(instance); } static void connectPortDelayorama( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Delayorama *plugin; plugin = (Delayorama *)instance; switch (port) { case DELAYORAMA_SEED: plugin->seed = data; break; case DELAYORAMA_GAIN: plugin->gain = data; break; case DELAYORAMA_FEEDBACK_PC: plugin->feedback_pc = data; break; case DELAYORAMA_TAP_COUNT: plugin->tap_count = data; break; case DELAYORAMA_FIRST_DELAY: plugin->first_delay = data; break; case DELAYORAMA_DELAY_RANGE: plugin->delay_range = data; break; case DELAYORAMA_DELAY_SCALE: plugin->delay_scale = data; break; case DELAYORAMA_DELAY_RAND_PC: plugin->delay_rand_pc = data; break; case DELAYORAMA_GAIN_SCALE: plugin->gain_scale = data; break; case DELAYORAMA_GAIN_RAND_PC: plugin->gain_rand_pc = data; break; case DELAYORAMA_WET: plugin->wet = data; break; case DELAYORAMA_INPUT: plugin->input = data; break; case DELAYORAMA_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDelayorama( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Delayorama *plugin_data = (Delayorama *)malloc(sizeof(Delayorama)); unsigned int active_set; LADSPA_Data *buffer = NULL; unsigned long buffer_pos; unsigned int buffer_size; float last_a_rand; float last_ampsc; float last_d_rand; float last_delaysc; unsigned int last_ntaps; LADSPA_Data last_out; float last_range; float last_seed; float last_start; unsigned int next_set; unsigned int sample_rate; tap **taps = NULL; #line 25 "delayorama_1402.xml" sample_rate = s_rate; buffer_pos = 0; buffer_size = 6.0f * sample_rate; taps = malloc(2 * sizeof(tap *)); taps[0] = calloc(N_TAPS, sizeof(tap)); taps[1] = calloc(N_TAPS, sizeof(tap)); active_set = 0; next_set = 1; buffer = calloc(buffer_size, sizeof(LADSPA_Data)); last_out = 0.0f; last_ampsc = 0.0f; last_delaysc = 0.0f; last_start = 0; last_range = 0; last_ntaps = 0; last_seed = 0; last_a_rand = 0; last_d_rand = 0; plugin_data->active_set = active_set; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->buffer_size = buffer_size; plugin_data->last_a_rand = last_a_rand; plugin_data->last_ampsc = last_ampsc; plugin_data->last_d_rand = last_d_rand; plugin_data->last_delaysc = last_delaysc; plugin_data->last_ntaps = last_ntaps; plugin_data->last_out = last_out; plugin_data->last_range = last_range; plugin_data->last_seed = last_seed; plugin_data->last_start = last_start; plugin_data->next_set = next_set; plugin_data->sample_rate = sample_rate; plugin_data->taps = taps; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDelayorama(LADSPA_Handle instance, unsigned long sample_count) { Delayorama *plugin_data = (Delayorama *)instance; /* Random seed (float value) */ const LADSPA_Data seed = *(plugin_data->seed); /* Input gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Feedback (%) (float value) */ const LADSPA_Data feedback_pc = *(plugin_data->feedback_pc); /* Number of taps (float value) */ const LADSPA_Data tap_count = *(plugin_data->tap_count); /* First delay (s) (float value) */ const LADSPA_Data first_delay = *(plugin_data->first_delay); /* Delay range (s) (float value) */ const LADSPA_Data delay_range = *(plugin_data->delay_range); /* Delay change (float value) */ const LADSPA_Data delay_scale = *(plugin_data->delay_scale); /* Delay random (%) (float value) */ const LADSPA_Data delay_rand_pc = *(plugin_data->delay_rand_pc); /* Amplitude change (float value) */ const LADSPA_Data gain_scale = *(plugin_data->gain_scale); /* Amplitude random (%) (float value) */ const LADSPA_Data gain_rand_pc = *(plugin_data->gain_rand_pc); /* Dry/wet mix (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int active_set = plugin_data->active_set; LADSPA_Data * buffer = plugin_data->buffer; unsigned long buffer_pos = plugin_data->buffer_pos; unsigned int buffer_size = plugin_data->buffer_size; float last_a_rand = plugin_data->last_a_rand; float last_ampsc = plugin_data->last_ampsc; float last_d_rand = plugin_data->last_d_rand; float last_delaysc = plugin_data->last_delaysc; unsigned int last_ntaps = plugin_data->last_ntaps; LADSPA_Data last_out = plugin_data->last_out; float last_range = plugin_data->last_range; float last_seed = plugin_data->last_seed; float last_start = plugin_data->last_start; unsigned int next_set = plugin_data->next_set; unsigned int sample_rate = plugin_data->sample_rate; tap ** taps = plugin_data->taps; #line 73 "delayorama_1402.xml" unsigned long pos; float coef = DB_CO(gain); unsigned int i; unsigned int recalc = 0; unsigned int ntaps = LIMIT(f_round(tap_count), 2, N_TAPS); float range = f_clamp(delay_range * sample_rate, 0.0f, (float)(buffer_size-1)); LADSPA_Data out; float xfade = 0.0f; const float feedback = feedback_pc * 0.01f; const float gain_rand = gain_rand_pc * 0.01f; const float delay_rand = delay_rand_pc * 0.01f; if (ntaps != last_ntaps) { recalc = 1; plugin_data->last_ntaps = ntaps; } if (first_delay != last_start) { recalc = 1; plugin_data->last_start = first_delay; } if (range != last_range) { recalc = 1; plugin_data->last_range = range; } if (delay_scale != last_delaysc) { recalc = 1; plugin_data->last_delaysc = delay_scale; } if (gain_scale != last_ampsc) { recalc = 1; plugin_data->last_ampsc = gain_scale; } if (seed != last_seed) { recalc = 1; plugin_data->last_seed = seed; } if (gain_rand != last_a_rand) { recalc = 1; plugin_data->last_a_rand = gain_rand; } if (delay_rand != last_d_rand) { recalc = 1; plugin_data->last_d_rand = delay_rand; } if (recalc) { float delay_base = first_delay * sample_rate; float delay_fix; float gain, delay, delay_sum; float d_rand, g_rand; srand(f_round(seed)); if (delay_base + range > buffer_size-1) { delay_base = buffer_size - 1 - range; } if (gain_scale <= 1.0f) { gain = 1.0f; } else { gain = 1.0f / pow(gain_scale, ntaps-1); } if (delay_scale == 1.0f) { delay_fix = range / (ntaps - 1); } else { delay_fix = range * (delay_scale - 1.0f) / (pow(delay_scale, ntaps - 1) - 1.0f); } delay = 1.0f; delay_sum = 0.0f; for (i=0; i= buffer_size) { buffer_pos = 0; } } if (recalc) { plugin_data->active_set = next_set; plugin_data->next_set = active_set; } plugin_data->buffer_pos = buffer_pos; plugin_data->last_out = out; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDelayorama(LADSPA_Handle instance, LADSPA_Data gain) { ((Delayorama *)instance)->run_adding_gain = gain; } static void runAddingDelayorama(LADSPA_Handle instance, unsigned long sample_count) { Delayorama *plugin_data = (Delayorama *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Random seed (float value) */ const LADSPA_Data seed = *(plugin_data->seed); /* Input gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Feedback (%) (float value) */ const LADSPA_Data feedback_pc = *(plugin_data->feedback_pc); /* Number of taps (float value) */ const LADSPA_Data tap_count = *(plugin_data->tap_count); /* First delay (s) (float value) */ const LADSPA_Data first_delay = *(plugin_data->first_delay); /* Delay range (s) (float value) */ const LADSPA_Data delay_range = *(plugin_data->delay_range); /* Delay change (float value) */ const LADSPA_Data delay_scale = *(plugin_data->delay_scale); /* Delay random (%) (float value) */ const LADSPA_Data delay_rand_pc = *(plugin_data->delay_rand_pc); /* Amplitude change (float value) */ const LADSPA_Data gain_scale = *(plugin_data->gain_scale); /* Amplitude random (%) (float value) */ const LADSPA_Data gain_rand_pc = *(plugin_data->gain_rand_pc); /* Dry/wet mix (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int active_set = plugin_data->active_set; LADSPA_Data * buffer = plugin_data->buffer; unsigned long buffer_pos = plugin_data->buffer_pos; unsigned int buffer_size = plugin_data->buffer_size; float last_a_rand = plugin_data->last_a_rand; float last_ampsc = plugin_data->last_ampsc; float last_d_rand = plugin_data->last_d_rand; float last_delaysc = plugin_data->last_delaysc; unsigned int last_ntaps = plugin_data->last_ntaps; LADSPA_Data last_out = plugin_data->last_out; float last_range = plugin_data->last_range; float last_seed = plugin_data->last_seed; float last_start = plugin_data->last_start; unsigned int next_set = plugin_data->next_set; unsigned int sample_rate = plugin_data->sample_rate; tap ** taps = plugin_data->taps; #line 73 "delayorama_1402.xml" unsigned long pos; float coef = DB_CO(gain); unsigned int i; unsigned int recalc = 0; unsigned int ntaps = LIMIT(f_round(tap_count), 2, N_TAPS); float range = f_clamp(delay_range * sample_rate, 0.0f, (float)(buffer_size-1)); LADSPA_Data out; float xfade = 0.0f; const float feedback = feedback_pc * 0.01f; const float gain_rand = gain_rand_pc * 0.01f; const float delay_rand = delay_rand_pc * 0.01f; if (ntaps != last_ntaps) { recalc = 1; plugin_data->last_ntaps = ntaps; } if (first_delay != last_start) { recalc = 1; plugin_data->last_start = first_delay; } if (range != last_range) { recalc = 1; plugin_data->last_range = range; } if (delay_scale != last_delaysc) { recalc = 1; plugin_data->last_delaysc = delay_scale; } if (gain_scale != last_ampsc) { recalc = 1; plugin_data->last_ampsc = gain_scale; } if (seed != last_seed) { recalc = 1; plugin_data->last_seed = seed; } if (gain_rand != last_a_rand) { recalc = 1; plugin_data->last_a_rand = gain_rand; } if (delay_rand != last_d_rand) { recalc = 1; plugin_data->last_d_rand = delay_rand; } if (recalc) { float delay_base = first_delay * sample_rate; float delay_fix; float gain, delay, delay_sum; float d_rand, g_rand; srand(f_round(seed)); if (delay_base + range > buffer_size-1) { delay_base = buffer_size - 1 - range; } if (gain_scale <= 1.0f) { gain = 1.0f; } else { gain = 1.0f / pow(gain_scale, ntaps-1); } if (delay_scale == 1.0f) { delay_fix = range / (ntaps - 1); } else { delay_fix = range * (delay_scale - 1.0f) / (pow(delay_scale, ntaps - 1) - 1.0f); } delay = 1.0f; delay_sum = 0.0f; for (i=0; i= buffer_size) { buffer_pos = 0; } } if (recalc) { plugin_data->active_set = next_set; plugin_data->next_set = active_set; } plugin_data->buffer_pos = buffer_pos; plugin_data->last_out = out; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif delayoramaDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (delayoramaDescriptor) { delayoramaDescriptor->UniqueID = 1402; delayoramaDescriptor->Label = "delayorama"; delayoramaDescriptor->Properties = 0; delayoramaDescriptor->Name = D_("Delayorama"); delayoramaDescriptor->Maker = "Steve Harris "; delayoramaDescriptor->Copyright = "GPL"; delayoramaDescriptor->PortCount = 13; port_descriptors = (LADSPA_PortDescriptor *)calloc(13, sizeof(LADSPA_PortDescriptor)); delayoramaDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(13, sizeof(LADSPA_PortRangeHint)); delayoramaDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(13, sizeof(char*)); delayoramaDescriptor->PortNames = (const char **)port_names; /* Parameters for Random seed */ port_descriptors[DELAYORAMA_SEED] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_SEED] = D_("Random seed"); port_range_hints[DELAYORAMA_SEED].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[DELAYORAMA_SEED].LowerBound = 0; port_range_hints[DELAYORAMA_SEED].UpperBound = 1000; /* Parameters for Input gain (dB) */ port_descriptors[DELAYORAMA_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_GAIN] = D_("Input gain (dB)"); port_range_hints[DELAYORAMA_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DELAYORAMA_GAIN].LowerBound = -96; port_range_hints[DELAYORAMA_GAIN].UpperBound = +24; /* Parameters for Feedback (%) */ port_descriptors[DELAYORAMA_FEEDBACK_PC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_FEEDBACK_PC] = D_("Feedback (%)"); port_range_hints[DELAYORAMA_FEEDBACK_PC].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DELAYORAMA_FEEDBACK_PC].LowerBound = 0; port_range_hints[DELAYORAMA_FEEDBACK_PC].UpperBound = 100; /* Parameters for Number of taps */ port_descriptors[DELAYORAMA_TAP_COUNT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_TAP_COUNT] = D_("Number of taps"); port_range_hints[DELAYORAMA_TAP_COUNT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[DELAYORAMA_TAP_COUNT].LowerBound = 2; port_range_hints[DELAYORAMA_TAP_COUNT].UpperBound = N_TAPS; /* Parameters for First delay (s) */ port_descriptors[DELAYORAMA_FIRST_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_FIRST_DELAY] = D_("First delay (s)"); port_range_hints[DELAYORAMA_FIRST_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DELAYORAMA_FIRST_DELAY].LowerBound = 0; port_range_hints[DELAYORAMA_FIRST_DELAY].UpperBound = 5; /* Parameters for Delay range (s) */ port_descriptors[DELAYORAMA_DELAY_RANGE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_DELAY_RANGE] = D_("Delay range (s)"); port_range_hints[DELAYORAMA_DELAY_RANGE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[DELAYORAMA_DELAY_RANGE].LowerBound = 0.0001; port_range_hints[DELAYORAMA_DELAY_RANGE].UpperBound = 6; /* Parameters for Delay change */ port_descriptors[DELAYORAMA_DELAY_SCALE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_DELAY_SCALE] = D_("Delay change"); port_range_hints[DELAYORAMA_DELAY_SCALE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[DELAYORAMA_DELAY_SCALE].LowerBound = 0.2; port_range_hints[DELAYORAMA_DELAY_SCALE].UpperBound = 5; /* Parameters for Delay random (%) */ port_descriptors[DELAYORAMA_DELAY_RAND_PC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_DELAY_RAND_PC] = D_("Delay random (%)"); port_range_hints[DELAYORAMA_DELAY_RAND_PC].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DELAYORAMA_DELAY_RAND_PC].LowerBound = 0; port_range_hints[DELAYORAMA_DELAY_RAND_PC].UpperBound = 100; /* Parameters for Amplitude change */ port_descriptors[DELAYORAMA_GAIN_SCALE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_GAIN_SCALE] = D_("Amplitude change"); port_range_hints[DELAYORAMA_GAIN_SCALE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[DELAYORAMA_GAIN_SCALE].LowerBound = 0.2; port_range_hints[DELAYORAMA_GAIN_SCALE].UpperBound = 5; /* Parameters for Amplitude random (%) */ port_descriptors[DELAYORAMA_GAIN_RAND_PC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_GAIN_RAND_PC] = D_("Amplitude random (%)"); port_range_hints[DELAYORAMA_GAIN_RAND_PC].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DELAYORAMA_GAIN_RAND_PC].LowerBound = 0; port_range_hints[DELAYORAMA_GAIN_RAND_PC].UpperBound = 100; /* Parameters for Dry/wet mix */ port_descriptors[DELAYORAMA_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DELAYORAMA_WET] = D_("Dry/wet mix"); port_range_hints[DELAYORAMA_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[DELAYORAMA_WET].LowerBound = 0; port_range_hints[DELAYORAMA_WET].UpperBound = 1; /* Parameters for Input */ port_descriptors[DELAYORAMA_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DELAYORAMA_INPUT] = D_("Input"); port_range_hints[DELAYORAMA_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DELAYORAMA_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DELAYORAMA_OUTPUT] = D_("Output"); port_range_hints[DELAYORAMA_OUTPUT].HintDescriptor = 0; delayoramaDescriptor->activate = activateDelayorama; delayoramaDescriptor->cleanup = cleanupDelayorama; delayoramaDescriptor->connect_port = connectPortDelayorama; delayoramaDescriptor->deactivate = NULL; delayoramaDescriptor->instantiate = instantiateDelayorama; delayoramaDescriptor->run = runDelayorama; delayoramaDescriptor->run_adding = runAddingDelayorama; delayoramaDescriptor->set_run_adding_gain = setRunAddingGainDelayorama; } } void __attribute__((destructor)) swh_fini() { if (delayoramaDescriptor) { free((LADSPA_PortDescriptor *)delayoramaDescriptor->PortDescriptors); free((char **)delayoramaDescriptor->PortNames); free((LADSPA_PortRangeHint *)delayoramaDescriptor->PortRangeHints); free(delayoramaDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/diode_1185.c000066400000000000000000000167611247673406200212230ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define DIODE_MODE 0 #define DIODE_INPUT 1 #define DIODE_OUTPUT 2 static LADSPA_Descriptor *diodeDescriptor = NULL; typedef struct { LADSPA_Data *mode; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Diode; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return diodeDescriptor; default: return NULL; } } static void cleanupDiode(LADSPA_Handle instance) { free(instance); } static void connectPortDiode( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Diode *plugin; plugin = (Diode *)instance; switch (port) { case DIODE_MODE: plugin->mode = data; break; case DIODE_INPUT: plugin->input = data; break; case DIODE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDiode( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Diode *plugin_data = (Diode *)malloc(sizeof(Diode)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDiode(LADSPA_Handle instance, unsigned long sample_count) { Diode *plugin_data = (Diode *)instance; /* Mode (0 for none, 1 for half wave, 2 for full wave) (float value) */ const LADSPA_Data mode = *(plugin_data->mode); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "diode_1185.xml" unsigned long pos; if (mode >= 0.0f && mode < 1.0f) { for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], ((1.0f-mode) * input[pos]) + (mode * (input[pos] > 0.0f ? input[pos] : 0.0f))); } } else if (mode >= 1.0f && mode < 2.0f) { float fac = mode - 1.0f; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], ((1.0f-fac) * (input[pos] > 0 ? input[pos] : 0.0)) + (fac * fabs(input[pos]))); } } else if (mode >= 2) { float fac = mode < 3 ? mode - 2 : 1.0; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], (1.0-fac) * fabs(input[pos])); } } else { for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos]); } } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDiode(LADSPA_Handle instance, LADSPA_Data gain) { ((Diode *)instance)->run_adding_gain = gain; } static void runAddingDiode(LADSPA_Handle instance, unsigned long sample_count) { Diode *plugin_data = (Diode *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Mode (0 for none, 1 for half wave, 2 for full wave) (float value) */ const LADSPA_Data mode = *(plugin_data->mode); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "diode_1185.xml" unsigned long pos; if (mode >= 0.0f && mode < 1.0f) { for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], ((1.0f-mode) * input[pos]) + (mode * (input[pos] > 0.0f ? input[pos] : 0.0f))); } } else if (mode >= 1.0f && mode < 2.0f) { float fac = mode - 1.0f; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], ((1.0f-fac) * (input[pos] > 0 ? input[pos] : 0.0)) + (fac * fabs(input[pos]))); } } else if (mode >= 2) { float fac = mode < 3 ? mode - 2 : 1.0; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], (1.0-fac) * fabs(input[pos])); } } else { for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos]); } } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif diodeDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (diodeDescriptor) { diodeDescriptor->UniqueID = 1185; diodeDescriptor->Label = "diode"; diodeDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; diodeDescriptor->Name = D_("Diode Processor"); diodeDescriptor->Maker = "Steve Harris "; diodeDescriptor->Copyright = "GPL"; diodeDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); diodeDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); diodeDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); diodeDescriptor->PortNames = (const char **)port_names; /* Parameters for Mode (0 for none, 1 for half wave, 2 for full wave) */ port_descriptors[DIODE_MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DIODE_MODE] = D_("Mode (0 for none, 1 for half wave, 2 for full wave)"); port_range_hints[DIODE_MODE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DIODE_MODE].LowerBound = 0; port_range_hints[DIODE_MODE].UpperBound = 3; /* Parameters for Input */ port_descriptors[DIODE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DIODE_INPUT] = D_("Input"); port_range_hints[DIODE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DIODE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DIODE_OUTPUT] = D_("Output"); port_range_hints[DIODE_OUTPUT].HintDescriptor = 0; diodeDescriptor->activate = NULL; diodeDescriptor->cleanup = cleanupDiode; diodeDescriptor->connect_port = connectPortDiode; diodeDescriptor->deactivate = NULL; diodeDescriptor->instantiate = instantiateDiode; diodeDescriptor->run = runDiode; diodeDescriptor->run_adding = runAddingDiode; diodeDescriptor->set_run_adding_gain = setRunAddingGainDiode; } } void __attribute__((destructor)) swh_fini() { if (diodeDescriptor) { free((LADSPA_PortDescriptor *)diodeDescriptor->PortDescriptors); free((char **)diodeDescriptor->PortNames); free((LADSPA_PortRangeHint *)diodeDescriptor->PortRangeHints); free(diodeDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/divider_1186.c000066400000000000000000000217561247673406200215660ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define DIVIDER_DENOMINATOR 0 #define DIVIDER_INPUT 1 #define DIVIDER_OUTPUT 2 static LADSPA_Descriptor *dividerDescriptor = NULL; typedef struct { LADSPA_Data *denominator; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data amp; float count; LADSPA_Data lamp; LADSPA_Data last; LADSPA_Data out; int zeroxs; LADSPA_Data run_adding_gain; } Divider; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return dividerDescriptor; default: return NULL; } } static void cleanupDivider(LADSPA_Handle instance) { free(instance); } static void connectPortDivider( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Divider *plugin; plugin = (Divider *)instance; switch (port) { case DIVIDER_DENOMINATOR: plugin->denominator = data; break; case DIVIDER_INPUT: plugin->input = data; break; case DIVIDER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDivider( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Divider *plugin_data = (Divider *)malloc(sizeof(Divider)); LADSPA_Data amp; float count; LADSPA_Data lamp; LADSPA_Data last; LADSPA_Data out; int zeroxs; #line 16 "divider_1186.xml" out = 1.0f; amp = 0.0f; count = 0.0f; lamp = 0.0f; last = 0.0f; zeroxs = 0; plugin_data->amp = amp; plugin_data->count = count; plugin_data->lamp = lamp; plugin_data->last = last; plugin_data->out = out; plugin_data->zeroxs = zeroxs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDivider(LADSPA_Handle instance, unsigned long sample_count) { Divider *plugin_data = (Divider *)instance; /* Denominator (float value) */ const LADSPA_Data denominator = *(plugin_data->denominator); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data amp = plugin_data->amp; float count = plugin_data->count; LADSPA_Data lamp = plugin_data->lamp; LADSPA_Data last = plugin_data->last; LADSPA_Data out = plugin_data->out; int zeroxs = plugin_data->zeroxs; #line 25 "divider_1186.xml" /* Integer version of denominator */ int den = (int)denominator; unsigned long pos; for (pos = 0; pos < sample_count; pos++) { count += 1.0f; if ((input[pos] > 0.0f && last <= 0.0f) || (input[pos] < 0.0f && last >= 0.0)) { zeroxs++; if (den == 1) { out = out > 0.0f ? -1.0f : 1.0f; lamp = amp / count; zeroxs = 0; count = 0; amp = 0; } } amp += fabs(input[pos]); if (den > 1 && (zeroxs % den) == den-1) { out = out > 0.0f ? -1.0f : 1.0f; lamp = amp / count; zeroxs = 0; count = 0; amp = 0; } last = input[pos]; buffer_write(output[pos], out * lamp); } plugin_data->last = last; plugin_data->amp = amp; plugin_data->lamp = lamp; plugin_data->zeroxs = zeroxs; plugin_data->count = count; plugin_data->out = out; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDivider(LADSPA_Handle instance, LADSPA_Data gain) { ((Divider *)instance)->run_adding_gain = gain; } static void runAddingDivider(LADSPA_Handle instance, unsigned long sample_count) { Divider *plugin_data = (Divider *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Denominator (float value) */ const LADSPA_Data denominator = *(plugin_data->denominator); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data amp = plugin_data->amp; float count = plugin_data->count; LADSPA_Data lamp = plugin_data->lamp; LADSPA_Data last = plugin_data->last; LADSPA_Data out = plugin_data->out; int zeroxs = plugin_data->zeroxs; #line 25 "divider_1186.xml" /* Integer version of denominator */ int den = (int)denominator; unsigned long pos; for (pos = 0; pos < sample_count; pos++) { count += 1.0f; if ((input[pos] > 0.0f && last <= 0.0f) || (input[pos] < 0.0f && last >= 0.0)) { zeroxs++; if (den == 1) { out = out > 0.0f ? -1.0f : 1.0f; lamp = amp / count; zeroxs = 0; count = 0; amp = 0; } } amp += fabs(input[pos]); if (den > 1 && (zeroxs % den) == den-1) { out = out > 0.0f ? -1.0f : 1.0f; lamp = amp / count; zeroxs = 0; count = 0; amp = 0; } last = input[pos]; buffer_write(output[pos], out * lamp); } plugin_data->last = last; plugin_data->amp = amp; plugin_data->lamp = lamp; plugin_data->zeroxs = zeroxs; plugin_data->count = count; plugin_data->out = out; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif dividerDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (dividerDescriptor) { dividerDescriptor->UniqueID = 1186; dividerDescriptor->Label = "divider"; dividerDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; dividerDescriptor->Name = D_("Audio Divider (Suboctave Generator)"); dividerDescriptor->Maker = "Steve Harris "; dividerDescriptor->Copyright = "GPL"; dividerDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); dividerDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); dividerDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); dividerDescriptor->PortNames = (const char **)port_names; /* Parameters for Denominator */ port_descriptors[DIVIDER_DENOMINATOR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DIVIDER_DENOMINATOR] = D_("Denominator"); port_range_hints[DIVIDER_DENOMINATOR].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; port_range_hints[DIVIDER_DENOMINATOR].LowerBound = 1; port_range_hints[DIVIDER_DENOMINATOR].UpperBound = 8; /* Parameters for Input */ port_descriptors[DIVIDER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DIVIDER_INPUT] = D_("Input"); port_range_hints[DIVIDER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DIVIDER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DIVIDER_OUTPUT] = D_("Output"); port_range_hints[DIVIDER_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[DIVIDER_OUTPUT].LowerBound = -1; port_range_hints[DIVIDER_OUTPUT].UpperBound = +1; dividerDescriptor->activate = NULL; dividerDescriptor->cleanup = cleanupDivider; dividerDescriptor->connect_port = connectPortDivider; dividerDescriptor->deactivate = NULL; dividerDescriptor->instantiate = instantiateDivider; dividerDescriptor->run = runDivider; dividerDescriptor->run_adding = runAddingDivider; dividerDescriptor->set_run_adding_gain = setRunAddingGainDivider; } } void __attribute__((destructor)) swh_fini() { if (dividerDescriptor) { free((LADSPA_PortDescriptor *)dividerDescriptor->PortDescriptors); free((char **)dividerDescriptor->PortNames); free((LADSPA_PortRangeHint *)dividerDescriptor->PortRangeHints); free(dividerDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/dj_eq_1901.c000066400000000000000000000467361247673406200212220ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "dj_eq_1901.xml" #include "ladspa-util.h" #include "util/biquad.h" #define BANDS 3 #define PEAK_BW 0.3f /* Peak EQ bandwidth (octaves) */ #define SHELF_SLOPE 1.5f /* Shelf EQ slope (arb. units) */ #define DJ_EQ_MONO_LO 0 #define DJ_EQ_MONO_MID 1 #define DJ_EQ_MONO_HI 2 #define DJ_EQ_MONO_INPUT 3 #define DJ_EQ_MONO_OUTPUT 4 #define DJ_EQ_MONO_LATENCY 5 #define DJ_EQ_LO 0 #define DJ_EQ_MID 1 #define DJ_EQ_HI 2 #define DJ_EQ_LEFT_INPUT 3 #define DJ_EQ_RIGHT_INPUT 4 #define DJ_EQ_LEFT_OUTPUT 5 #define DJ_EQ_RIGHT_OUTPUT 6 #define DJ_EQ_LATENCY 7 static LADSPA_Descriptor *dj_eq_monoDescriptor = NULL; typedef struct { LADSPA_Data *lo; LADSPA_Data *mid; LADSPA_Data *hi; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; biquad * filters; float fs; LADSPA_Data run_adding_gain; } Dj_eq_mono; static LADSPA_Descriptor *dj_eqDescriptor = NULL; typedef struct { LADSPA_Data *lo; LADSPA_Data *mid; LADSPA_Data *hi; LADSPA_Data *left_input; LADSPA_Data *right_input; LADSPA_Data *left_output; LADSPA_Data *right_output; LADSPA_Data *latency; biquad * filters; float fs; LADSPA_Data run_adding_gain; } Dj_eq; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return dj_eq_monoDescriptor; case 1: return dj_eqDescriptor; default: return NULL; } } static void activateDj_eq_mono(LADSPA_Handle instance) { Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; biquad *filters = plugin_data->filters; float fs = plugin_data->fs; #line 33 "dj_eq_1901.xml" biquad_init(&filters[0]); eq_set_params(&filters[0], 100.0f, 0.0f, PEAK_BW, fs); biquad_init(&filters[1]); eq_set_params(&filters[1], 1000.0f, 0.0f, PEAK_BW, fs); biquad_init(&filters[2]); hs_set_params(&filters[2], 10000.0f, 0.0f, SHELF_SLOPE, fs); plugin_data->filters = filters; plugin_data->fs = fs; } static void cleanupDj_eq_mono(LADSPA_Handle instance) { Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; free(plugin_data->filters); free(instance); } static void connectPortDj_eq_mono( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Dj_eq_mono *plugin; plugin = (Dj_eq_mono *)instance; switch (port) { case DJ_EQ_MONO_LO: plugin->lo = data; break; case DJ_EQ_MONO_MID: plugin->mid = data; break; case DJ_EQ_MONO_HI: plugin->hi = data; break; case DJ_EQ_MONO_INPUT: plugin->input = data; break; case DJ_EQ_MONO_OUTPUT: plugin->output = data; break; case DJ_EQ_MONO_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateDj_eq_mono( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Dj_eq_mono *plugin_data = (Dj_eq_mono *)malloc(sizeof(Dj_eq_mono)); biquad *filters = NULL; float fs; #line 27 "dj_eq_1901.xml" fs = s_rate; filters = calloc(BANDS, sizeof(biquad)); plugin_data->filters = filters; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDj_eq_mono(LADSPA_Handle instance, unsigned long sample_count) { Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; /* Lo gain (dB) (float value) */ const LADSPA_Data lo = *(plugin_data->lo); /* Mid gain (dB) (float value) */ const LADSPA_Data mid = *(plugin_data->mid); /* Hi gain (dB) (float value) */ const LADSPA_Data hi = *(plugin_data->hi); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; #line 42 "dj_eq_1901.xml" unsigned long pos; float samp; eq_set_params(&filters[0], 100.0f, lo, PEAK_BW, fs); eq_set_params(&filters[1], 1000.0f, mid, PEAK_BW, fs); hs_set_params(&filters[2], 10000.0f, hi, SHELF_SLOPE, fs); for (pos = 0; pos < sample_count; pos++) { samp = biquad_run(&filters[0], input[pos]); samp = biquad_run(&filters[1], samp); samp = biquad_run(&filters[2], samp); buffer_write(output[pos], samp); } *(plugin_data->latency) = 3; //XXX is this right? } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDj_eq_mono(LADSPA_Handle instance, LADSPA_Data gain) { ((Dj_eq_mono *)instance)->run_adding_gain = gain; } static void runAddingDj_eq_mono(LADSPA_Handle instance, unsigned long sample_count) { Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Lo gain (dB) (float value) */ const LADSPA_Data lo = *(plugin_data->lo); /* Mid gain (dB) (float value) */ const LADSPA_Data mid = *(plugin_data->mid); /* Hi gain (dB) (float value) */ const LADSPA_Data hi = *(plugin_data->hi); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; #line 42 "dj_eq_1901.xml" unsigned long pos; float samp; eq_set_params(&filters[0], 100.0f, lo, PEAK_BW, fs); eq_set_params(&filters[1], 1000.0f, mid, PEAK_BW, fs); hs_set_params(&filters[2], 10000.0f, hi, SHELF_SLOPE, fs); for (pos = 0; pos < sample_count; pos++) { samp = biquad_run(&filters[0], input[pos]); samp = biquad_run(&filters[1], samp); samp = biquad_run(&filters[2], samp); buffer_write(output[pos], samp); } *(plugin_data->latency) = 3; //XXX is this right? } static void activateDj_eq(LADSPA_Handle instance) { Dj_eq *plugin_data = (Dj_eq *)instance; biquad *filters = plugin_data->filters; float fs = plugin_data->fs; #line 33 "dj_eq_1901.xml" int i; for (i=0; i<2; i++) { biquad_init(&filters[i*BANDS + 0]); eq_set_params(&filters[i*BANDS + 0], 100.0f, 0.0f, PEAK_BW, fs); biquad_init(&filters[i*BANDS + 1]); eq_set_params(&filters[i*BANDS + 1], 1000.0f, 0.0f, PEAK_BW, fs); biquad_init(&filters[i*BANDS + 2]); hs_set_params(&filters[i*BANDS + 2], 10000.0f, 0.0f, SHELF_SLOPE, fs); } plugin_data->filters = filters; plugin_data->fs = fs; } static void cleanupDj_eq(LADSPA_Handle instance) { Dj_eq *plugin_data = (Dj_eq *)instance; free(plugin_data->filters); free(instance); } static void connectPortDj_eq( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Dj_eq *plugin; plugin = (Dj_eq *)instance; switch (port) { case DJ_EQ_LO: plugin->lo = data; break; case DJ_EQ_MID: plugin->mid = data; break; case DJ_EQ_HI: plugin->hi = data; break; case DJ_EQ_LEFT_INPUT: plugin->left_input = data; break; case DJ_EQ_RIGHT_INPUT: plugin->right_input = data; break; case DJ_EQ_LEFT_OUTPUT: plugin->left_output = data; break; case DJ_EQ_RIGHT_OUTPUT: plugin->right_output = data; break; case DJ_EQ_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateDj_eq( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Dj_eq *plugin_data = (Dj_eq *)malloc(sizeof(Dj_eq)); biquad *filters = NULL; float fs; #line 27 "dj_eq_1901.xml" fs = s_rate; filters = calloc(BANDS * 2, sizeof(biquad)); plugin_data->filters = filters; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDj_eq(LADSPA_Handle instance, unsigned long sample_count) { Dj_eq *plugin_data = (Dj_eq *)instance; /* Lo gain (dB) (float value) */ const LADSPA_Data lo = *(plugin_data->lo); /* Mid gain (dB) (float value) */ const LADSPA_Data mid = *(plugin_data->mid); /* Hi gain (dB) (float value) */ const LADSPA_Data hi = *(plugin_data->hi); /* Input L (array of floats of length sample_count) */ const LADSPA_Data * const left_input = plugin_data->left_input; /* Input R (array of floats of length sample_count) */ const LADSPA_Data * const right_input = plugin_data->right_input; /* Output L (array of floats of length sample_count) */ LADSPA_Data * const left_output = plugin_data->left_output; /* Output R (array of floats of length sample_count) */ LADSPA_Data * const right_output = plugin_data->right_output; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; #line 42 "dj_eq_1901.xml" unsigned long pos; unsigned int i; float samp; for (i=0; i<2; i++) { eq_set_params(&filters[i*BANDS + 0], 100.0f, lo, PEAK_BW, fs); eq_set_params(&filters[i*BANDS + 1], 1000.0f, mid, PEAK_BW, fs); hs_set_params(&filters[i*BANDS + 2], 10000.0f, hi, SHELF_SLOPE, fs); } for (pos = 0; pos < sample_count; pos++) { samp = biquad_run(&filters[0], left_input[pos]); samp = biquad_run(&filters[1], samp); samp = biquad_run(&filters[2], samp); buffer_write(left_output[pos], samp); samp = biquad_run(&filters[3], right_input[pos]); samp = biquad_run(&filters[4], samp); samp = biquad_run(&filters[5], samp); buffer_write(right_output[pos], samp); } *(plugin_data->latency) = 3; //XXX is this right? } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDj_eq(LADSPA_Handle instance, LADSPA_Data gain) { ((Dj_eq *)instance)->run_adding_gain = gain; } static void runAddingDj_eq(LADSPA_Handle instance, unsigned long sample_count) { Dj_eq *plugin_data = (Dj_eq *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Lo gain (dB) (float value) */ const LADSPA_Data lo = *(plugin_data->lo); /* Mid gain (dB) (float value) */ const LADSPA_Data mid = *(plugin_data->mid); /* Hi gain (dB) (float value) */ const LADSPA_Data hi = *(plugin_data->hi); /* Input L (array of floats of length sample_count) */ const LADSPA_Data * const left_input = plugin_data->left_input; /* Input R (array of floats of length sample_count) */ const LADSPA_Data * const right_input = plugin_data->right_input; /* Output L (array of floats of length sample_count) */ LADSPA_Data * const left_output = plugin_data->left_output; /* Output R (array of floats of length sample_count) */ LADSPA_Data * const right_output = plugin_data->right_output; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; #line 42 "dj_eq_1901.xml" unsigned long pos; unsigned int i; float samp; for (i=0; i<2; i++) { eq_set_params(&filters[i*BANDS + 0], 100.0f, lo, PEAK_BW, fs); eq_set_params(&filters[i*BANDS + 1], 1000.0f, mid, PEAK_BW, fs); hs_set_params(&filters[i*BANDS + 2], 10000.0f, hi, SHELF_SLOPE, fs); } for (pos = 0; pos < sample_count; pos++) { samp = biquad_run(&filters[0], left_input[pos]); samp = biquad_run(&filters[1], samp); samp = biquad_run(&filters[2], samp); buffer_write(left_output[pos], samp); samp = biquad_run(&filters[3], right_input[pos]); samp = biquad_run(&filters[4], samp); samp = biquad_run(&filters[5], samp); buffer_write(right_output[pos], samp); } *(plugin_data->latency) = 3; //XXX is this right? } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif dj_eq_monoDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (dj_eq_monoDescriptor) { dj_eq_monoDescriptor->UniqueID = 1907; dj_eq_monoDescriptor->Label = "dj_eq_mono"; dj_eq_monoDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; dj_eq_monoDescriptor->Name = D_("DJ EQ (mono)"); dj_eq_monoDescriptor->Maker = "Steve Harris "; dj_eq_monoDescriptor->Copyright = "GPL"; dj_eq_monoDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); dj_eq_monoDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); dj_eq_monoDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); dj_eq_monoDescriptor->PortNames = (const char **)port_names; /* Parameters for Lo gain (dB) */ port_descriptors[DJ_EQ_MONO_LO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_MONO_LO] = D_("Lo gain (dB)"); port_range_hints[DJ_EQ_MONO_LO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJ_EQ_MONO_LO].LowerBound = -70; port_range_hints[DJ_EQ_MONO_LO].UpperBound = +6; /* Parameters for Mid gain (dB) */ port_descriptors[DJ_EQ_MONO_MID] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_MONO_MID] = D_("Mid gain (dB)"); port_range_hints[DJ_EQ_MONO_MID].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJ_EQ_MONO_MID].LowerBound = -70; port_range_hints[DJ_EQ_MONO_MID].UpperBound = +6; /* Parameters for Hi gain (dB) */ port_descriptors[DJ_EQ_MONO_HI] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_MONO_HI] = D_("Hi gain (dB)"); port_range_hints[DJ_EQ_MONO_HI].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJ_EQ_MONO_HI].LowerBound = -70; port_range_hints[DJ_EQ_MONO_HI].UpperBound = +6; /* Parameters for Input */ port_descriptors[DJ_EQ_MONO_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DJ_EQ_MONO_INPUT] = D_("Input"); port_range_hints[DJ_EQ_MONO_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DJ_EQ_MONO_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DJ_EQ_MONO_OUTPUT] = D_("Output"); port_range_hints[DJ_EQ_MONO_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[DJ_EQ_MONO_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_MONO_LATENCY] = D_("latency"); port_range_hints[DJ_EQ_MONO_LATENCY].HintDescriptor = 0; dj_eq_monoDescriptor->activate = activateDj_eq_mono; dj_eq_monoDescriptor->cleanup = cleanupDj_eq_mono; dj_eq_monoDescriptor->connect_port = connectPortDj_eq_mono; dj_eq_monoDescriptor->deactivate = NULL; dj_eq_monoDescriptor->instantiate = instantiateDj_eq_mono; dj_eq_monoDescriptor->run = runDj_eq_mono; dj_eq_monoDescriptor->run_adding = runAddingDj_eq_mono; dj_eq_monoDescriptor->set_run_adding_gain = setRunAddingGainDj_eq_mono; } dj_eqDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (dj_eqDescriptor) { dj_eqDescriptor->UniqueID = 1901; dj_eqDescriptor->Label = "dj_eq"; dj_eqDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; dj_eqDescriptor->Name = D_("DJ EQ"); dj_eqDescriptor->Maker = "Steve Harris "; dj_eqDescriptor->Copyright = "GPL"; dj_eqDescriptor->PortCount = 8; port_descriptors = (LADSPA_PortDescriptor *)calloc(8, sizeof(LADSPA_PortDescriptor)); dj_eqDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(8, sizeof(LADSPA_PortRangeHint)); dj_eqDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(8, sizeof(char*)); dj_eqDescriptor->PortNames = (const char **)port_names; /* Parameters for Lo gain (dB) */ port_descriptors[DJ_EQ_LO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_LO] = D_("Lo gain (dB)"); port_range_hints[DJ_EQ_LO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJ_EQ_LO].LowerBound = -70; port_range_hints[DJ_EQ_LO].UpperBound = +6; /* Parameters for Mid gain (dB) */ port_descriptors[DJ_EQ_MID] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_MID] = D_("Mid gain (dB)"); port_range_hints[DJ_EQ_MID].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJ_EQ_MID].LowerBound = -70; port_range_hints[DJ_EQ_MID].UpperBound = +6; /* Parameters for Hi gain (dB) */ port_descriptors[DJ_EQ_HI] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_HI] = D_("Hi gain (dB)"); port_range_hints[DJ_EQ_HI].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJ_EQ_HI].LowerBound = -70; port_range_hints[DJ_EQ_HI].UpperBound = +6; /* Parameters for Input L */ port_descriptors[DJ_EQ_LEFT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DJ_EQ_LEFT_INPUT] = D_("Input L"); port_range_hints[DJ_EQ_LEFT_INPUT].HintDescriptor = 0; /* Parameters for Input R */ port_descriptors[DJ_EQ_RIGHT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DJ_EQ_RIGHT_INPUT] = D_("Input R"); port_range_hints[DJ_EQ_RIGHT_INPUT].HintDescriptor = 0; /* Parameters for Output L */ port_descriptors[DJ_EQ_LEFT_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DJ_EQ_LEFT_OUTPUT] = D_("Output L"); port_range_hints[DJ_EQ_LEFT_OUTPUT].HintDescriptor = 0; /* Parameters for Output R */ port_descriptors[DJ_EQ_RIGHT_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DJ_EQ_RIGHT_OUTPUT] = D_("Output R"); port_range_hints[DJ_EQ_RIGHT_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[DJ_EQ_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[DJ_EQ_LATENCY] = D_("latency"); port_range_hints[DJ_EQ_LATENCY].HintDescriptor = 0; dj_eqDescriptor->activate = activateDj_eq; dj_eqDescriptor->cleanup = cleanupDj_eq; dj_eqDescriptor->connect_port = connectPortDj_eq; dj_eqDescriptor->deactivate = NULL; dj_eqDescriptor->instantiate = instantiateDj_eq; dj_eqDescriptor->run = runDj_eq; dj_eqDescriptor->run_adding = runAddingDj_eq; dj_eqDescriptor->set_run_adding_gain = setRunAddingGainDj_eq; } } void __attribute__((destructor)) swh_fini() { if (dj_eq_monoDescriptor) { free((LADSPA_PortDescriptor *)dj_eq_monoDescriptor->PortDescriptors); free((char **)dj_eq_monoDescriptor->PortNames); free((LADSPA_PortRangeHint *)dj_eq_monoDescriptor->PortRangeHints); free(dj_eq_monoDescriptor); } if (dj_eqDescriptor) { free((LADSPA_PortDescriptor *)dj_eqDescriptor->PortDescriptors); free((char **)dj_eqDescriptor->PortNames); free((LADSPA_PortRangeHint *)dj_eqDescriptor->PortRangeHints); free(dj_eqDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/dj_flanger_1438.c000066400000000000000000000312561247673406200222270ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "dj_flanger_1438.xml" #include #include "ladspa-util.h" #define DELAY_TIME 0.005f #define DJFLANGER_SYNC 0 #define DJFLANGER_PERIOD 1 #define DJFLANGER_DEPTH 2 #define DJFLANGER_FEEDBACK 3 #define DJFLANGER_INPUT 4 #define DJFLANGER_OUTPUT 5 static LADSPA_Descriptor *djFlangerDescriptor = NULL; typedef struct { LADSPA_Data *sync; LADSPA_Data *period; LADSPA_Data *depth; LADSPA_Data *feedback; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; unsigned int buffer_mask; unsigned int buffer_pos; float fs; unsigned int last_sync; float x; float y; LADSPA_Data run_adding_gain; } DjFlanger; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return djFlangerDescriptor; default: return NULL; } } static void activateDjFlanger(LADSPA_Handle instance) { DjFlanger *plugin_data = (DjFlanger *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; unsigned int last_sync = plugin_data->last_sync; float x = plugin_data->x; float y = plugin_data->y; #line 38 "dj_flanger_1438.xml" memset(buffer, 0, (buffer_mask + 1) * sizeof(LADSPA_Data)); last_sync = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->fs = fs; plugin_data->last_sync = last_sync; plugin_data->x = x; plugin_data->y = y; } static void cleanupDjFlanger(LADSPA_Handle instance) { #line 103 "dj_flanger_1438.xml" DjFlanger *plugin_data = (DjFlanger *)instance; free(plugin_data->buffer); free(instance); } static void connectPortDjFlanger( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { DjFlanger *plugin; plugin = (DjFlanger *)instance; switch (port) { case DJFLANGER_SYNC: plugin->sync = data; break; case DJFLANGER_PERIOD: plugin->period = data; break; case DJFLANGER_DEPTH: plugin->depth = data; break; case DJFLANGER_FEEDBACK: plugin->feedback = data; break; case DJFLANGER_INPUT: plugin->input = data; break; case DJFLANGER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDjFlanger( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { DjFlanger *plugin_data = (DjFlanger *)malloc(sizeof(DjFlanger)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_pos; float fs; unsigned int last_sync; float x; float y; #line 23 "dj_flanger_1438.xml" int buffer_size = 2048; fs = s_rate; while (buffer_size < fs * DELAY_TIME + 3.0f) { buffer_size *= 2; } buffer = calloc(buffer_size, sizeof(LADSPA_Data)); buffer_mask = buffer_size - 1; buffer_pos = 0; x = 0.5f; y = 0.0f; last_sync = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->fs = fs; plugin_data->last_sync = last_sync; plugin_data->x = x; plugin_data->y = y; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDjFlanger(LADSPA_Handle instance, unsigned long sample_count) { DjFlanger *plugin_data = (DjFlanger *)instance; /* LFO sync (float value) */ const LADSPA_Data sync = *(plugin_data->sync); /* LFO period (s) (float value) */ const LADSPA_Data period = *(plugin_data->period); /* LFO depth (ms) (float value) */ const LADSPA_Data depth = *(plugin_data->depth); /* Feedback (%) (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; unsigned int last_sync = plugin_data->last_sync; float x = plugin_data->x; float y = plugin_data->y; #line 43 "dj_flanger_1438.xml" unsigned long pos; const float omega = 6.2831852f / (period * fs); const float dr = 0.001f * fs * depth; float fb; float d; float dout, out; unsigned int dof; if (feedback > 99.0f) { fb = 0.99f; } else if (feedback < -99.0f) { fb = -0.99f; } else { fb = feedback * 0.01f; } if (sync > 0) { if (!last_sync) { x = 0.5f; y = 0.0f; } plugin_data->last_sync = 1; } else { plugin_data->last_sync = 0; } for (pos = 0; pos < sample_count; pos++) { /* Write input into delay line */ buffer[buffer_pos] = input[pos]; /* Calcuate delay */ d = (x + 0.5f) * dr; dof = f_round(d); //dout = buffer[(buffer_pos - f_round(d)) & buffer_mask]; dout = cube_interp(d - floor(d), buffer[(buffer_pos - dof - 3) & buffer_mask], buffer[(buffer_pos - dof - 2) & buffer_mask], buffer[(buffer_pos - dof - 1) & buffer_mask], buffer[(buffer_pos - dof) & buffer_mask]); /* Write output */ out = (buffer[buffer_pos] + dout) * 0.5f; buffer[buffer_pos] = input[pos] + out * fb; buffer_write(output[pos], out); /* Roll ringbuffer */ buffer_pos = (buffer_pos + 1) & buffer_mask; /* Run LFO */ x -= omega * y; y += omega * x; } plugin_data->x = x; plugin_data->y = y; plugin_data->buffer_pos = buffer_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDjFlanger(LADSPA_Handle instance, LADSPA_Data gain) { ((DjFlanger *)instance)->run_adding_gain = gain; } static void runAddingDjFlanger(LADSPA_Handle instance, unsigned long sample_count) { DjFlanger *plugin_data = (DjFlanger *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* LFO sync (float value) */ const LADSPA_Data sync = *(plugin_data->sync); /* LFO period (s) (float value) */ const LADSPA_Data period = *(plugin_data->period); /* LFO depth (ms) (float value) */ const LADSPA_Data depth = *(plugin_data->depth); /* Feedback (%) (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; unsigned int last_sync = plugin_data->last_sync; float x = plugin_data->x; float y = plugin_data->y; #line 43 "dj_flanger_1438.xml" unsigned long pos; const float omega = 6.2831852f / (period * fs); const float dr = 0.001f * fs * depth; float fb; float d; float dout, out; unsigned int dof; if (feedback > 99.0f) { fb = 0.99f; } else if (feedback < -99.0f) { fb = -0.99f; } else { fb = feedback * 0.01f; } if (sync > 0) { if (!last_sync) { x = 0.5f; y = 0.0f; } plugin_data->last_sync = 1; } else { plugin_data->last_sync = 0; } for (pos = 0; pos < sample_count; pos++) { /* Write input into delay line */ buffer[buffer_pos] = input[pos]; /* Calcuate delay */ d = (x + 0.5f) * dr; dof = f_round(d); //dout = buffer[(buffer_pos - f_round(d)) & buffer_mask]; dout = cube_interp(d - floor(d), buffer[(buffer_pos - dof - 3) & buffer_mask], buffer[(buffer_pos - dof - 2) & buffer_mask], buffer[(buffer_pos - dof - 1) & buffer_mask], buffer[(buffer_pos - dof) & buffer_mask]); /* Write output */ out = (buffer[buffer_pos] + dout) * 0.5f; buffer[buffer_pos] = input[pos] + out * fb; buffer_write(output[pos], out); /* Roll ringbuffer */ buffer_pos = (buffer_pos + 1) & buffer_mask; /* Run LFO */ x -= omega * y; y += omega * x; } plugin_data->x = x; plugin_data->y = y; plugin_data->buffer_pos = buffer_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif djFlangerDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (djFlangerDescriptor) { djFlangerDescriptor->UniqueID = 1438; djFlangerDescriptor->Label = "djFlanger"; djFlangerDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; djFlangerDescriptor->Name = D_("DJ flanger"); djFlangerDescriptor->Maker = "Steve Harris "; djFlangerDescriptor->Copyright = "GPL"; djFlangerDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); djFlangerDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); djFlangerDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); djFlangerDescriptor->PortNames = (const char **)port_names; /* Parameters for LFO sync */ port_descriptors[DJFLANGER_SYNC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJFLANGER_SYNC] = D_("LFO sync"); port_range_hints[DJFLANGER_SYNC].HintDescriptor = 0; /* Parameters for LFO period (s) */ port_descriptors[DJFLANGER_PERIOD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJFLANGER_PERIOD] = D_("LFO period (s)"); port_range_hints[DJFLANGER_PERIOD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[DJFLANGER_PERIOD].LowerBound = 0.1; port_range_hints[DJFLANGER_PERIOD].UpperBound = 32.0; /* Parameters for LFO depth (ms) */ port_descriptors[DJFLANGER_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJFLANGER_DEPTH] = D_("LFO depth (ms)"); port_range_hints[DJFLANGER_DEPTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[DJFLANGER_DEPTH].LowerBound = 1; port_range_hints[DJFLANGER_DEPTH].UpperBound = 5; /* Parameters for Feedback (%) */ port_descriptors[DJFLANGER_FEEDBACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DJFLANGER_FEEDBACK] = D_("Feedback (%)"); port_range_hints[DJFLANGER_FEEDBACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DJFLANGER_FEEDBACK].LowerBound = -100; port_range_hints[DJFLANGER_FEEDBACK].UpperBound = 100; /* Parameters for Input */ port_descriptors[DJFLANGER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DJFLANGER_INPUT] = D_("Input"); port_range_hints[DJFLANGER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DJFLANGER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DJFLANGER_OUTPUT] = D_("Output"); port_range_hints[DJFLANGER_OUTPUT].HintDescriptor = 0; djFlangerDescriptor->activate = activateDjFlanger; djFlangerDescriptor->cleanup = cleanupDjFlanger; djFlangerDescriptor->connect_port = connectPortDjFlanger; djFlangerDescriptor->deactivate = NULL; djFlangerDescriptor->instantiate = instantiateDjFlanger; djFlangerDescriptor->run = runDjFlanger; djFlangerDescriptor->run_adding = runAddingDjFlanger; djFlangerDescriptor->set_run_adding_gain = setRunAddingGainDjFlanger; } } void __attribute__((destructor)) swh_fini() { if (djFlangerDescriptor) { free((LADSPA_PortDescriptor *)djFlangerDescriptor->PortDescriptors); free((char **)djFlangerDescriptor->PortNames); free((LADSPA_PortRangeHint *)djFlangerDescriptor->PortRangeHints); free(djFlangerDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/dyson_compress_1403.c000066400000000000000000000620131247673406200231660ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "dyson_compress_1403.xml" /* * Copyright (c) 1996, John S. Dyson * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * * This code (easily) runs realtime on a P5-166 w/EDO, Triton-II on FreeBSD. * * More info/comments: dyson@freebsd.org * * This program provides compression of a stereo 16bit audio stream, * such as that contained by a 16Bit wav file. Extreme measures have * been taken to make the compression as subtile as possible. One * possible purpose for this code would be to master cassette tapes from * CD's for playback in automobiles where dynamic range needs to be * restricted. * * Suitably recoded for an embedded DSP, this would make a killer audio * compressor for broadcast or recording. When writing this code, I * ignored the issues of roundoff error or trucation -- Pentiums have * really nice FP processors :-). */ #include #define MAXLEVEL 0.9f #define NFILT 12 #define NEFILT 17 /* These filters should filter at least the lowest audio freq */ #define RLEVELSQ0FILTER .001 #define RLEVELSQ1FILTER .010 /* These are the attack time for the rms measurement */ #define RLEVELSQ0FFILTER .001 #define RLEVELSQEFILTER .001 #define RMASTERGAIN0FILTER .000003 #define RPEAKGAINFILTER .001 #define MAXFASTGAIN 3 #define MAXSLOWGAIN 9 #define FLOORLEVEL 0.06 float hardlimit(float value, float knee, float limit) { float ab = fabs(value); if (ab >= limit) { value = value > 0 ? limit : -limit; } return value; } #define DYSONCOMPRESS_PEAK_LIMIT 0 #define DYSONCOMPRESS_RELEASE_TIME 1 #define DYSONCOMPRESS_CFRATE 2 #define DYSONCOMPRESS_CRATE 3 #define DYSONCOMPRESS_INPUT 4 #define DYSONCOMPRESS_OUTPUT 5 static LADSPA_Descriptor *dysonCompressDescriptor = NULL; typedef struct { LADSPA_Data *peak_limit; LADSPA_Data *release_time; LADSPA_Data *cfrate; LADSPA_Data *crate; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *delay; float extra_maxlevel; float lastrgain; float maxgain; float mingain; float ndelay; unsigned int ndelayptr; int peaklimitdelay; float rgain; float rlevelsq0; float rlevelsq1; LADSPA_Data *rlevelsqe; LADSPA_Data *rlevelsqn; float rmastergain0; float rpeakgain0; float rpeakgain1; float rpeaklimitdelay; float sample_rate; LADSPA_Data run_adding_gain; } DysonCompress; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return dysonCompressDescriptor; default: return NULL; } } static void activateDysonCompress(LADSPA_Handle instance) { DysonCompress *plugin_data = (DysonCompress *)instance; LADSPA_Data *delay = plugin_data->delay; float extra_maxlevel = plugin_data->extra_maxlevel; float lastrgain = plugin_data->lastrgain; float maxgain = plugin_data->maxgain; float mingain = plugin_data->mingain; float ndelay = plugin_data->ndelay; unsigned int ndelayptr = plugin_data->ndelayptr; int peaklimitdelay = plugin_data->peaklimitdelay; float rgain = plugin_data->rgain; float rlevelsq0 = plugin_data->rlevelsq0; float rlevelsq1 = plugin_data->rlevelsq1; LADSPA_Data *rlevelsqe = plugin_data->rlevelsqe; LADSPA_Data *rlevelsqn = plugin_data->rlevelsqn; float rmastergain0 = plugin_data->rmastergain0; float rpeakgain0 = plugin_data->rpeakgain0; float rpeakgain1 = plugin_data->rpeakgain1; float rpeaklimitdelay = plugin_data->rpeaklimitdelay; float sample_rate = plugin_data->sample_rate; #line 105 "dyson_compress_1403.xml" unsigned int i; for (i=0; idelay = delay; plugin_data->extra_maxlevel = extra_maxlevel; plugin_data->lastrgain = lastrgain; plugin_data->maxgain = maxgain; plugin_data->mingain = mingain; plugin_data->ndelay = ndelay; plugin_data->ndelayptr = ndelayptr; plugin_data->peaklimitdelay = peaklimitdelay; plugin_data->rgain = rgain; plugin_data->rlevelsq0 = rlevelsq0; plugin_data->rlevelsq1 = rlevelsq1; plugin_data->rlevelsqe = rlevelsqe; plugin_data->rlevelsqn = rlevelsqn; plugin_data->rmastergain0 = rmastergain0; plugin_data->rpeakgain0 = rpeakgain0; plugin_data->rpeakgain1 = rpeakgain1; plugin_data->rpeaklimitdelay = rpeaklimitdelay; plugin_data->sample_rate = sample_rate; } static void cleanupDysonCompress(LADSPA_Handle instance) { #line 137 "dyson_compress_1403.xml" DysonCompress *plugin_data = (DysonCompress *)instance; free(plugin_data->delay); free(plugin_data->rlevelsqn); free(plugin_data->rlevelsqe); free(instance); } static void connectPortDysonCompress( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { DysonCompress *plugin; plugin = (DysonCompress *)instance; switch (port) { case DYSONCOMPRESS_PEAK_LIMIT: plugin->peak_limit = data; break; case DYSONCOMPRESS_RELEASE_TIME: plugin->release_time = data; break; case DYSONCOMPRESS_CFRATE: plugin->cfrate = data; break; case DYSONCOMPRESS_CRATE: plugin->crate = data; break; case DYSONCOMPRESS_INPUT: plugin->input = data; break; case DYSONCOMPRESS_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateDysonCompress( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { DysonCompress *plugin_data = (DysonCompress *)malloc(sizeof(DysonCompress)); LADSPA_Data *delay = NULL; float extra_maxlevel; float lastrgain; float maxgain; float mingain; float ndelay; unsigned int ndelayptr; int peaklimitdelay; float rgain; float rlevelsq0; float rlevelsq1; LADSPA_Data *rlevelsqe = NULL; LADSPA_Data *rlevelsqn = NULL; float rmastergain0; float rpeakgain0; float rpeakgain1; float rpeaklimitdelay; float sample_rate; #line 78 "dyson_compress_1403.xml" sample_rate = (float)s_rate; mingain = 10000; maxgain = 0; rpeaklimitdelay = 2500; rgain = rmastergain0 = 1.0; rlevelsq0 = 0; rlevelsq1 = 0; ndelay = (int)(1.0 / RLEVELSQ0FFILTER); delay = calloc(ndelay, sizeof(LADSPA_Data)); rlevelsqn = calloc(NFILT + 1, sizeof(float)); rlevelsqe = calloc(NEFILT + 1, sizeof(float)); rpeakgain0 = 1.0; rpeakgain1 = 1.0; rpeaklimitdelay = 0; ndelayptr = 0; lastrgain = 1.0; extra_maxlevel = 0.0f; peaklimitdelay = 0; plugin_data->delay = delay; plugin_data->extra_maxlevel = extra_maxlevel; plugin_data->lastrgain = lastrgain; plugin_data->maxgain = maxgain; plugin_data->mingain = mingain; plugin_data->ndelay = ndelay; plugin_data->ndelayptr = ndelayptr; plugin_data->peaklimitdelay = peaklimitdelay; plugin_data->rgain = rgain; plugin_data->rlevelsq0 = rlevelsq0; plugin_data->rlevelsq1 = rlevelsq1; plugin_data->rlevelsqe = rlevelsqe; plugin_data->rlevelsqn = rlevelsqn; plugin_data->rmastergain0 = rmastergain0; plugin_data->rpeakgain0 = rpeakgain0; plugin_data->rpeakgain1 = rpeakgain1; plugin_data->rpeaklimitdelay = rpeaklimitdelay; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runDysonCompress(LADSPA_Handle instance, unsigned long sample_count) { DysonCompress *plugin_data = (DysonCompress *)instance; /* Peak limit (dB) (float value) */ const LADSPA_Data peak_limit = *(plugin_data->peak_limit); /* Release time (s) (float value) */ const LADSPA_Data release_time = *(plugin_data->release_time); /* Fast compression ratio (float value) */ const LADSPA_Data cfrate = *(plugin_data->cfrate); /* Compression ratio (float value) */ const LADSPA_Data crate = *(plugin_data->crate); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * delay = plugin_data->delay; float extra_maxlevel = plugin_data->extra_maxlevel; float lastrgain = plugin_data->lastrgain; float maxgain = plugin_data->maxgain; float mingain = plugin_data->mingain; float ndelay = plugin_data->ndelay; unsigned int ndelayptr = plugin_data->ndelayptr; int peaklimitdelay = plugin_data->peaklimitdelay; float rgain = plugin_data->rgain; float rlevelsq0 = plugin_data->rlevelsq0; float rlevelsq1 = plugin_data->rlevelsq1; LADSPA_Data * rlevelsqe = plugin_data->rlevelsqe; LADSPA_Data * rlevelsqn = plugin_data->rlevelsqn; float rmastergain0 = plugin_data->rmastergain0; float rpeakgain0 = plugin_data->rpeakgain0; float rpeakgain1 = plugin_data->rpeakgain1; float rpeaklimitdelay = plugin_data->rpeaklimitdelay; float sample_rate = plugin_data->sample_rate; #line 143 "dyson_compress_1403.xml" unsigned long pos; float targetlevel = MAXLEVEL * DB_CO(peak_limit); float rgainfilter = 1.0f / (release_time * sample_rate); float fastgaincompressionratio = cfrate; float compressionratio = crate; float efilt; float levelsqe; float gain; float tgain; float d; float fastgain; float qgain; float tslowgain; float slowgain; float npeakgain; float new; float nrgain; float ngain; float ngsq; float tnrgain; float sqrtrpeakgain; float totalgain; unsigned int i; for (pos = 0; pos < sample_count; pos++) { // Ergh! this was originally meant to track a stereo signal float levelsq0 = 2.0f * (input[pos] * input[pos]); delay[ndelayptr] = input[pos]; ndelayptr++; if (ndelayptr >= ndelay) { ndelayptr = 0; } if (levelsq0 > rlevelsq0) { rlevelsq0 = (levelsq0 * RLEVELSQ0FFILTER) + rlevelsq0 * (1 - RLEVELSQ0FFILTER); } else { rlevelsq0 = (levelsq0 * RLEVELSQ0FILTER) + rlevelsq0 * (1 - RLEVELSQ0FILTER); } if (rlevelsq0 <= FLOORLEVEL * FLOORLEVEL) { goto skipagc; } if (rlevelsq0 > rlevelsq1) { rlevelsq1 = rlevelsq0; } else { rlevelsq1 = rlevelsq0 * RLEVELSQ1FILTER + rlevelsq1 * (1 - RLEVELSQ1FILTER); } rlevelsqn[0] = rlevelsq1; for(i = 0; i < NFILT-1; i++) { if (rlevelsqn[i] > rlevelsqn[i+1]) rlevelsqn[i+1] = rlevelsqn[i]; else rlevelsqn[i+1] = rlevelsqn[i] * RLEVELSQ1FILTER + rlevelsqn[i+1] * (1 - RLEVELSQ1FILTER); } efilt = RLEVELSQEFILTER; levelsqe = rlevelsqe[0] = rlevelsqn[NFILT-1]; for(i = 0; i < NEFILT-1; i++) { rlevelsqe[i+1] = rlevelsqe[i] * efilt + rlevelsqe[i+1] * (1.0 - efilt); if (rlevelsqe[i+1] > levelsqe) levelsqe = rlevelsqe[i+1]; efilt *= 1.0f / 1.5f; } gain = targetlevel / sqrt(levelsqe); if (compressionratio < 0.99f) { if (compressionratio == 0.50f) gain = sqrt(gain); else gain = f_exp(log(gain) * compressionratio); } if (gain < rgain) rgain = gain * RLEVELSQEFILTER/2 + rgain * (1 - RLEVELSQEFILTER/2); else rgain = gain * rgainfilter + rgain * (1 - rgainfilter); lastrgain = rgain; if ( gain < lastrgain) lastrgain = gain; skipagc:; tgain = lastrgain; d = delay[ndelayptr]; fastgain = tgain; if (fastgain > MAXFASTGAIN) fastgain = MAXFASTGAIN; if (fastgain < 0.0001) fastgain = 0.0001; qgain = f_exp(log(fastgain) * fastgaincompressionratio); tslowgain = tgain / qgain; if (tslowgain > MAXSLOWGAIN) tslowgain = MAXSLOWGAIN; if (tslowgain < rmastergain0) rmastergain0 = tslowgain; else rmastergain0 = tslowgain * RMASTERGAIN0FILTER + (1 - RMASTERGAIN0FILTER) * rmastergain0; slowgain = rmastergain0; npeakgain = slowgain * qgain; new = d * npeakgain; if (fabs(new) >= MAXLEVEL) nrgain = MAXLEVEL / fabs(new); else nrgain = 1.0; ngain = nrgain; ngsq = ngain * ngain; if (ngsq <= rpeakgain0) { rpeakgain0 = ngsq /* * 0.50 + rpeakgain0 * 0.50 */; rpeaklimitdelay = peaklimitdelay; } else if (rpeaklimitdelay == 0) { if (nrgain > 1.0) tnrgain = 1.0; else tnrgain = nrgain; rpeakgain0 = tnrgain * RPEAKGAINFILTER + (1.0 - RPEAKGAINFILTER) * rpeakgain0; } if (rpeakgain0 <= rpeakgain1) { rpeakgain1 = rpeakgain0; rpeaklimitdelay = peaklimitdelay; } else if (rpeaklimitdelay == 0) { rpeakgain1 = RPEAKGAINFILTER * rpeakgain0 + (1.0 - RPEAKGAINFILTER) * rpeakgain1; } else { --rpeaklimitdelay; } sqrtrpeakgain = sqrt(rpeakgain1); totalgain = npeakgain * sqrtrpeakgain; buffer_write(output[pos], new * sqrtrpeakgain); if (totalgain > maxgain) maxgain = totalgain; if (totalgain < mingain) mingain = totalgain; if (output[pos] > extra_maxlevel) extra_maxlevel = output[pos]; } plugin_data->ndelayptr = ndelayptr; plugin_data->rlevelsq0 = rlevelsq0; plugin_data->rlevelsq1 = rlevelsq1; plugin_data->mingain = mingain; plugin_data->maxgain = maxgain; plugin_data->rpeaklimitdelay = rpeaklimitdelay; plugin_data->rgain = rgain; plugin_data->rmastergain0 = rmastergain0; plugin_data->rpeakgain0 = rpeakgain0; plugin_data->rpeakgain1 = rpeakgain1; plugin_data->lastrgain = lastrgain; plugin_data->extra_maxlevel = extra_maxlevel; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainDysonCompress(LADSPA_Handle instance, LADSPA_Data gain) { ((DysonCompress *)instance)->run_adding_gain = gain; } static void runAddingDysonCompress(LADSPA_Handle instance, unsigned long sample_count) { DysonCompress *plugin_data = (DysonCompress *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Peak limit (dB) (float value) */ const LADSPA_Data peak_limit = *(plugin_data->peak_limit); /* Release time (s) (float value) */ const LADSPA_Data release_time = *(plugin_data->release_time); /* Fast compression ratio (float value) */ const LADSPA_Data cfrate = *(plugin_data->cfrate); /* Compression ratio (float value) */ const LADSPA_Data crate = *(plugin_data->crate); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * delay = plugin_data->delay; float extra_maxlevel = plugin_data->extra_maxlevel; float lastrgain = plugin_data->lastrgain; float maxgain = plugin_data->maxgain; float mingain = plugin_data->mingain; float ndelay = plugin_data->ndelay; unsigned int ndelayptr = plugin_data->ndelayptr; int peaklimitdelay = plugin_data->peaklimitdelay; float rgain = plugin_data->rgain; float rlevelsq0 = plugin_data->rlevelsq0; float rlevelsq1 = plugin_data->rlevelsq1; LADSPA_Data * rlevelsqe = plugin_data->rlevelsqe; LADSPA_Data * rlevelsqn = plugin_data->rlevelsqn; float rmastergain0 = plugin_data->rmastergain0; float rpeakgain0 = plugin_data->rpeakgain0; float rpeakgain1 = plugin_data->rpeakgain1; float rpeaklimitdelay = plugin_data->rpeaklimitdelay; float sample_rate = plugin_data->sample_rate; #line 143 "dyson_compress_1403.xml" unsigned long pos; float targetlevel = MAXLEVEL * DB_CO(peak_limit); float rgainfilter = 1.0f / (release_time * sample_rate); float fastgaincompressionratio = cfrate; float compressionratio = crate; float efilt; float levelsqe; float gain; float tgain; float d; float fastgain; float qgain; float tslowgain; float slowgain; float npeakgain; float new; float nrgain; float ngain; float ngsq; float tnrgain; float sqrtrpeakgain; float totalgain; unsigned int i; for (pos = 0; pos < sample_count; pos++) { // Ergh! this was originally meant to track a stereo signal float levelsq0 = 2.0f * (input[pos] * input[pos]); delay[ndelayptr] = input[pos]; ndelayptr++; if (ndelayptr >= ndelay) { ndelayptr = 0; } if (levelsq0 > rlevelsq0) { rlevelsq0 = (levelsq0 * RLEVELSQ0FFILTER) + rlevelsq0 * (1 - RLEVELSQ0FFILTER); } else { rlevelsq0 = (levelsq0 * RLEVELSQ0FILTER) + rlevelsq0 * (1 - RLEVELSQ0FILTER); } if (rlevelsq0 <= FLOORLEVEL * FLOORLEVEL) { goto skipagc; } if (rlevelsq0 > rlevelsq1) { rlevelsq1 = rlevelsq0; } else { rlevelsq1 = rlevelsq0 * RLEVELSQ1FILTER + rlevelsq1 * (1 - RLEVELSQ1FILTER); } rlevelsqn[0] = rlevelsq1; for(i = 0; i < NFILT-1; i++) { if (rlevelsqn[i] > rlevelsqn[i+1]) rlevelsqn[i+1] = rlevelsqn[i]; else rlevelsqn[i+1] = rlevelsqn[i] * RLEVELSQ1FILTER + rlevelsqn[i+1] * (1 - RLEVELSQ1FILTER); } efilt = RLEVELSQEFILTER; levelsqe = rlevelsqe[0] = rlevelsqn[NFILT-1]; for(i = 0; i < NEFILT-1; i++) { rlevelsqe[i+1] = rlevelsqe[i] * efilt + rlevelsqe[i+1] * (1.0 - efilt); if (rlevelsqe[i+1] > levelsqe) levelsqe = rlevelsqe[i+1]; efilt *= 1.0f / 1.5f; } gain = targetlevel / sqrt(levelsqe); if (compressionratio < 0.99f) { if (compressionratio == 0.50f) gain = sqrt(gain); else gain = f_exp(log(gain) * compressionratio); } if (gain < rgain) rgain = gain * RLEVELSQEFILTER/2 + rgain * (1 - RLEVELSQEFILTER/2); else rgain = gain * rgainfilter + rgain * (1 - rgainfilter); lastrgain = rgain; if ( gain < lastrgain) lastrgain = gain; skipagc:; tgain = lastrgain; d = delay[ndelayptr]; fastgain = tgain; if (fastgain > MAXFASTGAIN) fastgain = MAXFASTGAIN; if (fastgain < 0.0001) fastgain = 0.0001; qgain = f_exp(log(fastgain) * fastgaincompressionratio); tslowgain = tgain / qgain; if (tslowgain > MAXSLOWGAIN) tslowgain = MAXSLOWGAIN; if (tslowgain < rmastergain0) rmastergain0 = tslowgain; else rmastergain0 = tslowgain * RMASTERGAIN0FILTER + (1 - RMASTERGAIN0FILTER) * rmastergain0; slowgain = rmastergain0; npeakgain = slowgain * qgain; new = d * npeakgain; if (fabs(new) >= MAXLEVEL) nrgain = MAXLEVEL / fabs(new); else nrgain = 1.0; ngain = nrgain; ngsq = ngain * ngain; if (ngsq <= rpeakgain0) { rpeakgain0 = ngsq /* * 0.50 + rpeakgain0 * 0.50 */; rpeaklimitdelay = peaklimitdelay; } else if (rpeaklimitdelay == 0) { if (nrgain > 1.0) tnrgain = 1.0; else tnrgain = nrgain; rpeakgain0 = tnrgain * RPEAKGAINFILTER + (1.0 - RPEAKGAINFILTER) * rpeakgain0; } if (rpeakgain0 <= rpeakgain1) { rpeakgain1 = rpeakgain0; rpeaklimitdelay = peaklimitdelay; } else if (rpeaklimitdelay == 0) { rpeakgain1 = RPEAKGAINFILTER * rpeakgain0 + (1.0 - RPEAKGAINFILTER) * rpeakgain1; } else { --rpeaklimitdelay; } sqrtrpeakgain = sqrt(rpeakgain1); totalgain = npeakgain * sqrtrpeakgain; buffer_write(output[pos], new * sqrtrpeakgain); if (totalgain > maxgain) maxgain = totalgain; if (totalgain < mingain) mingain = totalgain; if (output[pos] > extra_maxlevel) extra_maxlevel = output[pos]; } plugin_data->ndelayptr = ndelayptr; plugin_data->rlevelsq0 = rlevelsq0; plugin_data->rlevelsq1 = rlevelsq1; plugin_data->mingain = mingain; plugin_data->maxgain = maxgain; plugin_data->rpeaklimitdelay = rpeaklimitdelay; plugin_data->rgain = rgain; plugin_data->rmastergain0 = rmastergain0; plugin_data->rpeakgain0 = rpeakgain0; plugin_data->rpeakgain1 = rpeakgain1; plugin_data->lastrgain = lastrgain; plugin_data->extra_maxlevel = extra_maxlevel; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif dysonCompressDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (dysonCompressDescriptor) { dysonCompressDescriptor->UniqueID = 1403; dysonCompressDescriptor->Label = "dysonCompress"; dysonCompressDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; dysonCompressDescriptor->Name = D_("Dyson compressor"); dysonCompressDescriptor->Maker = "Steve Harris "; dysonCompressDescriptor->Copyright = "GPL"; dysonCompressDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); dysonCompressDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); dysonCompressDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); dysonCompressDescriptor->PortNames = (const char **)port_names; /* Parameters for Peak limit (dB) */ port_descriptors[DYSONCOMPRESS_PEAK_LIMIT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DYSONCOMPRESS_PEAK_LIMIT] = D_("Peak limit (dB)"); port_range_hints[DYSONCOMPRESS_PEAK_LIMIT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[DYSONCOMPRESS_PEAK_LIMIT].LowerBound = -30; port_range_hints[DYSONCOMPRESS_PEAK_LIMIT].UpperBound = 0; /* Parameters for Release time (s) */ port_descriptors[DYSONCOMPRESS_RELEASE_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DYSONCOMPRESS_RELEASE_TIME] = D_("Release time (s)"); port_range_hints[DYSONCOMPRESS_RELEASE_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[DYSONCOMPRESS_RELEASE_TIME].LowerBound = 0; port_range_hints[DYSONCOMPRESS_RELEASE_TIME].UpperBound = 1; /* Parameters for Fast compression ratio */ port_descriptors[DYSONCOMPRESS_CFRATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DYSONCOMPRESS_CFRATE] = D_("Fast compression ratio"); port_range_hints[DYSONCOMPRESS_CFRATE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[DYSONCOMPRESS_CFRATE].LowerBound = 0; port_range_hints[DYSONCOMPRESS_CFRATE].UpperBound = 1; /* Parameters for Compression ratio */ port_descriptors[DYSONCOMPRESS_CRATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[DYSONCOMPRESS_CRATE] = D_("Compression ratio"); port_range_hints[DYSONCOMPRESS_CRATE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[DYSONCOMPRESS_CRATE].LowerBound = 0; port_range_hints[DYSONCOMPRESS_CRATE].UpperBound = 1; /* Parameters for Input */ port_descriptors[DYSONCOMPRESS_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[DYSONCOMPRESS_INPUT] = D_("Input"); port_range_hints[DYSONCOMPRESS_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[DYSONCOMPRESS_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[DYSONCOMPRESS_OUTPUT] = D_("Output"); port_range_hints[DYSONCOMPRESS_OUTPUT].HintDescriptor = 0; dysonCompressDescriptor->activate = activateDysonCompress; dysonCompressDescriptor->cleanup = cleanupDysonCompress; dysonCompressDescriptor->connect_port = connectPortDysonCompress; dysonCompressDescriptor->deactivate = NULL; dysonCompressDescriptor->instantiate = instantiateDysonCompress; dysonCompressDescriptor->run = runDysonCompress; dysonCompressDescriptor->run_adding = runAddingDysonCompress; dysonCompressDescriptor->set_run_adding_gain = setRunAddingGainDysonCompress; } } void __attribute__((destructor)) swh_fini() { if (dysonCompressDescriptor) { free((LADSPA_PortDescriptor *)dysonCompressDescriptor->PortDescriptors); free((char **)dysonCompressDescriptor->PortNames); free((LADSPA_PortRangeHint *)dysonCompressDescriptor->PortRangeHints); free(dysonCompressDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/fad_delay_1192.c000066400000000000000000000262761247673406200220470ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "ladspa-util.h" #define BASE_BUFFER 8 // Base buffer length (s) #define FADDELAY_DELAY 0 #define FADDELAY_FB_DB 1 #define FADDELAY_INPUT 2 #define FADDELAY_OUTPUT 3 static LADSPA_Descriptor *fadDelayDescriptor = NULL; typedef struct { LADSPA_Data *delay; LADSPA_Data *fb_db; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; unsigned long buffer_mask; unsigned long buffer_size; LADSPA_Data last_in; int last_phase; float phase; long sample_rate; LADSPA_Data run_adding_gain; } FadDelay; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return fadDelayDescriptor; default: return NULL; } } static void activateFadDelay(LADSPA_Handle instance) { FadDelay *plugin_data = (FadDelay *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned long buffer_mask = plugin_data->buffer_mask; unsigned long buffer_size = plugin_data->buffer_size; LADSPA_Data last_in = plugin_data->last_in; int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; long sample_rate = plugin_data->sample_rate; unsigned int i; for (i = 0; i < buffer_size; i++) { buffer[i] = 0; } phase = 0; last_phase = 0; last_in = 0.0f; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_size = buffer_size; plugin_data->last_in = last_in; plugin_data->last_phase = last_phase; plugin_data->phase = phase; plugin_data->sample_rate = sample_rate; } static void cleanupFadDelay(LADSPA_Handle instance) { FadDelay *plugin_data = (FadDelay *)instance; free(plugin_data->buffer); free(instance); } static void connectPortFadDelay( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { FadDelay *plugin; plugin = (FadDelay *)instance; switch (port) { case FADDELAY_DELAY: plugin->delay = data; break; case FADDELAY_FB_DB: plugin->fb_db = data; break; case FADDELAY_INPUT: plugin->input = data; break; case FADDELAY_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateFadDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { FadDelay *plugin_data = (FadDelay *)malloc(sizeof(FadDelay)); LADSPA_Data *buffer = NULL; unsigned long buffer_mask; unsigned long buffer_size; LADSPA_Data last_in; int last_phase; float phase; long sample_rate; unsigned int min_bs; sample_rate = s_rate; min_bs = BASE_BUFFER * s_rate; for (buffer_size = 4096; buffer_size < min_bs; buffer_size *= 2); buffer = calloc(buffer_size, sizeof(LADSPA_Data)); buffer_mask = buffer_size - 1; phase = 0; last_phase = 0; last_in = 0.0f; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_size = buffer_size; plugin_data->last_in = last_in; plugin_data->last_phase = last_phase; plugin_data->phase = phase; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFadDelay(LADSPA_Handle instance, unsigned long sample_count) { FadDelay *plugin_data = (FadDelay *)instance; /* Delay (seconds) (float value) */ const LADSPA_Data delay = *(plugin_data->delay); /* Feedback (dB) (float value) */ const LADSPA_Data fb_db = *(plugin_data->fb_db); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned long buffer_mask = plugin_data->buffer_mask; unsigned long buffer_size = plugin_data->buffer_size; LADSPA_Data last_in = plugin_data->last_in; int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; long sample_rate = plugin_data->sample_rate; unsigned long int pos; float increment = (float)buffer_size / ((float)sample_rate * f_max(fabs(delay), 0.01)); float lin_int, lin_inc; int track; int fph; LADSPA_Data out; const float fb = DB_CO(fb_db); for (pos = 0; pos < sample_count; pos++) { fph = f_round(floor(phase)); last_phase = fph; lin_int = phase - (float)fph; out = LIN_INTERP(lin_int, buffer[(fph+1) & buffer_mask], buffer[(fph+2) & buffer_mask]); phase += increment; lin_inc = 1.0f / (floor(phase) - last_phase + 1); lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; lin_int = 0.0f; for (track = last_phase; track < phase; track++) { lin_int += lin_inc; buffer[track % buffer_size] = out * fb + LIN_INTERP(lin_int, last_in, input[pos]); } last_in = input[pos]; buffer_write(output[pos], out); if (phase >= buffer_size) { phase -= buffer_size; } } // Store current phase in instance plugin_data->phase = phase; plugin_data->last_phase = last_phase; plugin_data->last_in = last_in; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFadDelay(LADSPA_Handle instance, LADSPA_Data gain) { ((FadDelay *)instance)->run_adding_gain = gain; } static void runAddingFadDelay(LADSPA_Handle instance, unsigned long sample_count) { FadDelay *plugin_data = (FadDelay *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Delay (seconds) (float value) */ const LADSPA_Data delay = *(plugin_data->delay); /* Feedback (dB) (float value) */ const LADSPA_Data fb_db = *(plugin_data->fb_db); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned long buffer_mask = plugin_data->buffer_mask; unsigned long buffer_size = plugin_data->buffer_size; LADSPA_Data last_in = plugin_data->last_in; int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; long sample_rate = plugin_data->sample_rate; unsigned long int pos; float increment = (float)buffer_size / ((float)sample_rate * f_max(fabs(delay), 0.01)); float lin_int, lin_inc; int track; int fph; LADSPA_Data out; const float fb = DB_CO(fb_db); for (pos = 0; pos < sample_count; pos++) { fph = f_round(floor(phase)); last_phase = fph; lin_int = phase - (float)fph; out = LIN_INTERP(lin_int, buffer[(fph+1) & buffer_mask], buffer[(fph+2) & buffer_mask]); phase += increment; lin_inc = 1.0f / (floor(phase) - last_phase + 1); lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; lin_int = 0.0f; for (track = last_phase; track < phase; track++) { lin_int += lin_inc; buffer[track % buffer_size] = out * fb + LIN_INTERP(lin_int, last_in, input[pos]); } last_in = input[pos]; buffer_write(output[pos], out); if (phase >= buffer_size) { phase -= buffer_size; } } // Store current phase in instance plugin_data->phase = phase; plugin_data->last_phase = last_phase; plugin_data->last_in = last_in; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif fadDelayDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (fadDelayDescriptor) { fadDelayDescriptor->UniqueID = 1192; fadDelayDescriptor->Label = "fadDelay"; fadDelayDescriptor->Properties = 0; fadDelayDescriptor->Name = D_("Fractionally Addressed Delay Line"); fadDelayDescriptor->Maker = "Steve Harris "; fadDelayDescriptor->Copyright = "GPL"; fadDelayDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); fadDelayDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); fadDelayDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); fadDelayDescriptor->PortNames = (const char **)port_names; /* Parameters for Delay (seconds) */ port_descriptors[FADDELAY_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FADDELAY_DELAY] = D_("Delay (seconds)"); port_range_hints[FADDELAY_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[FADDELAY_DELAY].LowerBound = 0.1; port_range_hints[FADDELAY_DELAY].UpperBound = 10; /* Parameters for Feedback (dB) */ port_descriptors[FADDELAY_FB_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FADDELAY_FB_DB] = D_("Feedback (dB)"); port_range_hints[FADDELAY_FB_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FADDELAY_FB_DB].LowerBound = -70; port_range_hints[FADDELAY_FB_DB].UpperBound = 0; /* Parameters for Input */ port_descriptors[FADDELAY_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FADDELAY_INPUT] = D_("Input"); port_range_hints[FADDELAY_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[FADDELAY_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FADDELAY_OUTPUT] = D_("Output"); port_range_hints[FADDELAY_OUTPUT].HintDescriptor = 0; fadDelayDescriptor->activate = activateFadDelay; fadDelayDescriptor->cleanup = cleanupFadDelay; fadDelayDescriptor->connect_port = connectPortFadDelay; fadDelayDescriptor->deactivate = NULL; fadDelayDescriptor->instantiate = instantiateFadDelay; fadDelayDescriptor->run = runFadDelay; fadDelayDescriptor->run_adding = runAddingFadDelay; fadDelayDescriptor->set_run_adding_gain = setRunAddingGainFadDelay; } } void __attribute__((destructor)) swh_fini() { if (fadDelayDescriptor) { free((LADSPA_PortDescriptor *)fadDelayDescriptor->PortDescriptors); free((char **)fadDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)fadDelayDescriptor->PortRangeHints); free(fadDelayDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c000066400000000000000000000514501247673406200246210ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "fast_lookahead_limiter_1913.xml" #include "ladspa-util.h" //#define DEBUG #define NUM_CHUNKS 16 #define BUFFER_TIME 0.0053 #ifdef DEBUG #include "stdio.h" #endif #define FASTLOOKAHEADLIMITER_INGAIN 0 #define FASTLOOKAHEADLIMITER_LIMIT 1 #define FASTLOOKAHEADLIMITER_RELEASE 2 #define FASTLOOKAHEADLIMITER_ATTENUATION 3 #define FASTLOOKAHEADLIMITER_IN_1 4 #define FASTLOOKAHEADLIMITER_IN_2 5 #define FASTLOOKAHEADLIMITER_OUT_1 6 #define FASTLOOKAHEADLIMITER_OUT_2 7 #define FASTLOOKAHEADLIMITER_LATENCY 8 static LADSPA_Descriptor *fastLookaheadLimiterDescriptor = NULL; typedef struct { LADSPA_Data *ingain; LADSPA_Data *limit; LADSPA_Data *release; LADSPA_Data *attenuation; LADSPA_Data *in_1; LADSPA_Data *in_2; LADSPA_Data *out_1; LADSPA_Data *out_2; LADSPA_Data *latency; float atten; float atten_lp; LADSPA_Data *buffer; unsigned int buffer_len; unsigned int buffer_pos; unsigned int chunk_num; unsigned int chunk_pos; unsigned int chunk_size; float * chunks; unsigned int delay; float delta; unsigned int fs; float peak; LADSPA_Data run_adding_gain; } FastLookaheadLimiter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return fastLookaheadLimiterDescriptor; default: return NULL; } } static void activateFastLookaheadLimiter(LADSPA_Handle instance) { FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; float atten = plugin_data->atten; float atten_lp = plugin_data->atten_lp; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_len = plugin_data->buffer_len; unsigned int buffer_pos = plugin_data->buffer_pos; unsigned int chunk_num = plugin_data->chunk_num; unsigned int chunk_pos = plugin_data->chunk_pos; unsigned int chunk_size = plugin_data->chunk_size; float *chunks = plugin_data->chunks; unsigned int delay = plugin_data->delay; float delta = plugin_data->delta; unsigned int fs = plugin_data->fs; float peak = plugin_data->peak; #line 56 "fast_lookahead_limiter_1913.xml" memset(buffer, 0, NUM_CHUNKS * sizeof(float)); chunk_pos = 0; chunk_num = 0; peak = 0.0f; atten = 1.0f; atten_lp = 1.0f; delta = 0.0f; plugin_data->atten = atten; plugin_data->atten_lp = atten_lp; plugin_data->buffer = buffer; plugin_data->buffer_len = buffer_len; plugin_data->buffer_pos = buffer_pos; plugin_data->chunk_num = chunk_num; plugin_data->chunk_pos = chunk_pos; plugin_data->chunk_size = chunk_size; plugin_data->chunks = chunks; plugin_data->delay = delay; plugin_data->delta = delta; plugin_data->fs = fs; plugin_data->peak = peak; } static void cleanupFastLookaheadLimiter(LADSPA_Handle instance) { #line 188 "fast_lookahead_limiter_1913.xml" FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; free(plugin_data->buffer); free(plugin_data->chunks); free(instance); } static void connectPortFastLookaheadLimiter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { FastLookaheadLimiter *plugin; plugin = (FastLookaheadLimiter *)instance; switch (port) { case FASTLOOKAHEADLIMITER_INGAIN: plugin->ingain = data; break; case FASTLOOKAHEADLIMITER_LIMIT: plugin->limit = data; break; case FASTLOOKAHEADLIMITER_RELEASE: plugin->release = data; break; case FASTLOOKAHEADLIMITER_ATTENUATION: plugin->attenuation = data; break; case FASTLOOKAHEADLIMITER_IN_1: plugin->in_1 = data; break; case FASTLOOKAHEADLIMITER_IN_2: plugin->in_2 = data; break; case FASTLOOKAHEADLIMITER_OUT_1: plugin->out_1 = data; break; case FASTLOOKAHEADLIMITER_OUT_2: plugin->out_2 = data; break; case FASTLOOKAHEADLIMITER_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateFastLookaheadLimiter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)malloc(sizeof(FastLookaheadLimiter)); float atten; float atten_lp; LADSPA_Data *buffer = NULL; unsigned int buffer_len; unsigned int buffer_pos; unsigned int chunk_num; unsigned int chunk_pos; unsigned int chunk_size; float *chunks = NULL; unsigned int delay; float delta; unsigned int fs; float peak; #line 31 "fast_lookahead_limiter_1913.xml" fs = s_rate; buffer_len = 128; buffer_pos = 0; /* Find size for power-of-two interleaved delay buffer */ while(buffer_len < fs * BUFFER_TIME * 2) { buffer_len *= 2; } buffer = calloc(buffer_len, sizeof(float)); delay = (int)(0.005 * fs); chunk_pos = 0; chunk_num = 0; /* find a chunk size (in smaples) thats roughly 0.5ms */ chunk_size = s_rate / 2000; chunks = calloc(NUM_CHUNKS, sizeof(float)); peak = 0.0f; atten = 1.0f; atten_lp = 1.0f; delta = 0.0f; plugin_data->atten = atten; plugin_data->atten_lp = atten_lp; plugin_data->buffer = buffer; plugin_data->buffer_len = buffer_len; plugin_data->buffer_pos = buffer_pos; plugin_data->chunk_num = chunk_num; plugin_data->chunk_pos = chunk_pos; plugin_data->chunk_size = chunk_size; plugin_data->chunks = chunks; plugin_data->delay = delay; plugin_data->delta = delta; plugin_data->fs = fs; plugin_data->peak = peak; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFastLookaheadLimiter(LADSPA_Handle instance, unsigned long sample_count) { FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; /* Input gain (dB) (float value) */ const LADSPA_Data ingain = *(plugin_data->ingain); /* Limit (dB) (float value) */ const LADSPA_Data limit = *(plugin_data->limit); /* Release time (s) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Input 1 (array of floats of length sample_count) */ const LADSPA_Data * const in_1 = plugin_data->in_1; /* Input 2 (array of floats of length sample_count) */ const LADSPA_Data * const in_2 = plugin_data->in_2; /* Output 1 (array of floats of length sample_count) */ LADSPA_Data * const out_1 = plugin_data->out_1; /* Output 2 (array of floats of length sample_count) */ LADSPA_Data * const out_2 = plugin_data->out_2; float atten = plugin_data->atten; float atten_lp = plugin_data->atten_lp; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_len = plugin_data->buffer_len; unsigned int buffer_pos = plugin_data->buffer_pos; unsigned int chunk_num = plugin_data->chunk_num; unsigned int chunk_pos = plugin_data->chunk_pos; unsigned int chunk_size = plugin_data->chunk_size; float * chunks = plugin_data->chunks; unsigned int delay = plugin_data->delay; float delta = plugin_data->delta; unsigned int fs = plugin_data->fs; float peak = plugin_data->peak; #line 67 "fast_lookahead_limiter_1913.xml" unsigned long pos; const float max = DB_CO(limit); const float trim = DB_CO(ingain); float sig; unsigned int i; #ifdef DEBUG float clip = 0.0, clipp = 0.0; int clipc = 0; #endif for (pos = 0; pos < sample_count; pos++) { if (chunk_pos++ == chunk_size) { /* we've got a full chunk */ delta = (1.0f - atten) / (fs * release); round_to_zero(&delta); for (i=0; i<10; i++) { const int p = (chunk_num - 9 + i) & (NUM_CHUNKS - 1); const float this_delta = (max / chunks[p] - atten) / ((float)(i+1) * fs * 0.0005f + 1.0f); if (this_delta < delta) { delta = this_delta; } } chunks[chunk_num++ & (NUM_CHUNKS - 1)] = peak; peak = 0.0f; chunk_pos = 0; } buffer[(buffer_pos * 2) & (buffer_len - 1)] = in_1[pos] * trim + 1.0e-30; buffer[(buffer_pos * 2 + 1) & (buffer_len - 1)] = in_2[pos] * trim + 1.0e-30; sig = fabs(in_1[pos]) > fabs(in_2[pos]) ? fabs(in_1[pos]) : fabs(in_2[pos]); sig += 1.0e-30; if (sig * trim > peak) { peak = sig * trim; } //round_to_zero(&peak); //round_to_zero(&sig); atten += delta; atten_lp = atten * 0.1f + atten_lp * 0.9f; //round_to_zero(&atten_lp); if (delta > 0.0f && atten > 1.0f) { atten = 1.0f; delta = 0.0f; } buffer_write(out_1[pos], buffer[(buffer_pos * 2 - delay * 2) & (buffer_len - 1)] * atten_lp); buffer_write(out_2[pos], buffer[(buffer_pos * 2 - delay * 2 + 1) & (buffer_len - 1)] * atten_lp); round_to_zero(&out_1[pos]); round_to_zero(&out_2[pos]); if (out_1[pos] < -max) { #ifdef DEBUG clip += 20.0*log10(out_1[pos] / -max); clipc++; if (fabs(out_1[pos] - max) > clipp) { clipp = fabs(out_1[pos] / -max); } #endif buffer_write(out_1[pos], -max); } else if (out_1[pos] > max) { #ifdef DEBUG clip += 20.0*log10(out_1[pos] / max); clipc++; if (fabs(out_1[pos] - max) > clipp) { clipp = fabs(out_1[pos] / max); } #endif buffer_write(out_1[pos], max); } if (out_2[pos] < -max) { #ifdef DEBUG clip += 20.0*log10(out_2[pos] / -max); clipc++; if (fabs(out_2[pos] - max) > clipp) { clipp = fabs(out_2[pos] / -max); } #endif buffer_write(out_2[pos], -max); } else if (out_2[pos] > max) { #ifdef DEBUG clip += 20.0*log10(out_2[pos] / max); clipc++; if (fabs(out_2[pos] - max) > clipp) { clipp = fabs(out_2[pos] / max); } #endif buffer_write(out_2[pos], max); } buffer_pos++; } #ifdef DEBUG if (clipc > 0) { printf("%d overs: %fdB avg, %fdB peak\n", clipc, clip/(float)clipc, 20.0*log10(clipp)); } #endif plugin_data->buffer_pos = buffer_pos; plugin_data->peak = peak; plugin_data->atten = atten; plugin_data->atten_lp = atten_lp; plugin_data->chunk_pos = chunk_pos; plugin_data->chunk_num = chunk_num; *(plugin_data->attenuation) = -CO_DB(atten); *(plugin_data->latency) = delay; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFastLookaheadLimiter(LADSPA_Handle instance, LADSPA_Data gain) { ((FastLookaheadLimiter *)instance)->run_adding_gain = gain; } static void runAddingFastLookaheadLimiter(LADSPA_Handle instance, unsigned long sample_count) { FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input gain (dB) (float value) */ const LADSPA_Data ingain = *(plugin_data->ingain); /* Limit (dB) (float value) */ const LADSPA_Data limit = *(plugin_data->limit); /* Release time (s) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Input 1 (array of floats of length sample_count) */ const LADSPA_Data * const in_1 = plugin_data->in_1; /* Input 2 (array of floats of length sample_count) */ const LADSPA_Data * const in_2 = plugin_data->in_2; /* Output 1 (array of floats of length sample_count) */ LADSPA_Data * const out_1 = plugin_data->out_1; /* Output 2 (array of floats of length sample_count) */ LADSPA_Data * const out_2 = plugin_data->out_2; float atten = plugin_data->atten; float atten_lp = plugin_data->atten_lp; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_len = plugin_data->buffer_len; unsigned int buffer_pos = plugin_data->buffer_pos; unsigned int chunk_num = plugin_data->chunk_num; unsigned int chunk_pos = plugin_data->chunk_pos; unsigned int chunk_size = plugin_data->chunk_size; float * chunks = plugin_data->chunks; unsigned int delay = plugin_data->delay; float delta = plugin_data->delta; unsigned int fs = plugin_data->fs; float peak = plugin_data->peak; #line 67 "fast_lookahead_limiter_1913.xml" unsigned long pos; const float max = DB_CO(limit); const float trim = DB_CO(ingain); float sig; unsigned int i; #ifdef DEBUG float clip = 0.0, clipp = 0.0; int clipc = 0; #endif for (pos = 0; pos < sample_count; pos++) { if (chunk_pos++ == chunk_size) { /* we've got a full chunk */ delta = (1.0f - atten) / (fs * release); round_to_zero(&delta); for (i=0; i<10; i++) { const int p = (chunk_num - 9 + i) & (NUM_CHUNKS - 1); const float this_delta = (max / chunks[p] - atten) / ((float)(i+1) * fs * 0.0005f + 1.0f); if (this_delta < delta) { delta = this_delta; } } chunks[chunk_num++ & (NUM_CHUNKS - 1)] = peak; peak = 0.0f; chunk_pos = 0; } buffer[(buffer_pos * 2) & (buffer_len - 1)] = in_1[pos] * trim + 1.0e-30; buffer[(buffer_pos * 2 + 1) & (buffer_len - 1)] = in_2[pos] * trim + 1.0e-30; sig = fabs(in_1[pos]) > fabs(in_2[pos]) ? fabs(in_1[pos]) : fabs(in_2[pos]); sig += 1.0e-30; if (sig * trim > peak) { peak = sig * trim; } //round_to_zero(&peak); //round_to_zero(&sig); atten += delta; atten_lp = atten * 0.1f + atten_lp * 0.9f; //round_to_zero(&atten_lp); if (delta > 0.0f && atten > 1.0f) { atten = 1.0f; delta = 0.0f; } buffer_write(out_1[pos], buffer[(buffer_pos * 2 - delay * 2) & (buffer_len - 1)] * atten_lp); buffer_write(out_2[pos], buffer[(buffer_pos * 2 - delay * 2 + 1) & (buffer_len - 1)] * atten_lp); round_to_zero(&out_1[pos]); round_to_zero(&out_2[pos]); if (out_1[pos] < -max) { #ifdef DEBUG clip += 20.0*log10(out_1[pos] / -max); clipc++; if (fabs(out_1[pos] - max) > clipp) { clipp = fabs(out_1[pos] / -max); } #endif buffer_write(out_1[pos], -max); } else if (out_1[pos] > max) { #ifdef DEBUG clip += 20.0*log10(out_1[pos] / max); clipc++; if (fabs(out_1[pos] - max) > clipp) { clipp = fabs(out_1[pos] / max); } #endif buffer_write(out_1[pos], max); } if (out_2[pos] < -max) { #ifdef DEBUG clip += 20.0*log10(out_2[pos] / -max); clipc++; if (fabs(out_2[pos] - max) > clipp) { clipp = fabs(out_2[pos] / -max); } #endif buffer_write(out_2[pos], -max); } else if (out_2[pos] > max) { #ifdef DEBUG clip += 20.0*log10(out_2[pos] / max); clipc++; if (fabs(out_2[pos] - max) > clipp) { clipp = fabs(out_2[pos] / max); } #endif buffer_write(out_2[pos], max); } buffer_pos++; } #ifdef DEBUG if (clipc > 0) { printf("%d overs: %fdB avg, %fdB peak\n", clipc, clip/(float)clipc, 20.0*log10(clipp)); } #endif plugin_data->buffer_pos = buffer_pos; plugin_data->peak = peak; plugin_data->atten = atten; plugin_data->atten_lp = atten_lp; plugin_data->chunk_pos = chunk_pos; plugin_data->chunk_num = chunk_num; *(plugin_data->attenuation) = -CO_DB(atten); *(plugin_data->latency) = delay; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif fastLookaheadLimiterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (fastLookaheadLimiterDescriptor) { fastLookaheadLimiterDescriptor->UniqueID = 1913; fastLookaheadLimiterDescriptor->Label = "fastLookaheadLimiter"; fastLookaheadLimiterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; fastLookaheadLimiterDescriptor->Name = D_("Fast Lookahead limiter"); fastLookaheadLimiterDescriptor->Maker = "Steve Harris "; fastLookaheadLimiterDescriptor->Copyright = "GPL"; fastLookaheadLimiterDescriptor->PortCount = 9; port_descriptors = (LADSPA_PortDescriptor *)calloc(9, sizeof(LADSPA_PortDescriptor)); fastLookaheadLimiterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(9, sizeof(LADSPA_PortRangeHint)); fastLookaheadLimiterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(9, sizeof(char*)); fastLookaheadLimiterDescriptor->PortNames = (const char **)port_names; /* Parameters for Input gain (dB) */ port_descriptors[FASTLOOKAHEADLIMITER_INGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FASTLOOKAHEADLIMITER_INGAIN] = D_("Input gain (dB)"); port_range_hints[FASTLOOKAHEADLIMITER_INGAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FASTLOOKAHEADLIMITER_INGAIN].LowerBound = -20; port_range_hints[FASTLOOKAHEADLIMITER_INGAIN].UpperBound = 20; /* Parameters for Limit (dB) */ port_descriptors[FASTLOOKAHEADLIMITER_LIMIT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FASTLOOKAHEADLIMITER_LIMIT] = D_("Limit (dB)"); port_range_hints[FASTLOOKAHEADLIMITER_LIMIT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FASTLOOKAHEADLIMITER_LIMIT].LowerBound = -20; port_range_hints[FASTLOOKAHEADLIMITER_LIMIT].UpperBound = 0; /* Parameters for Release time (s) */ port_descriptors[FASTLOOKAHEADLIMITER_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FASTLOOKAHEADLIMITER_RELEASE] = D_("Release time (s)"); port_range_hints[FASTLOOKAHEADLIMITER_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[FASTLOOKAHEADLIMITER_RELEASE].LowerBound = 0.01; port_range_hints[FASTLOOKAHEADLIMITER_RELEASE].UpperBound = 2.0; /* Parameters for Attenuation (dB) */ port_descriptors[FASTLOOKAHEADLIMITER_ATTENUATION] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[FASTLOOKAHEADLIMITER_ATTENUATION] = D_("Attenuation (dB)"); port_range_hints[FASTLOOKAHEADLIMITER_ATTENUATION].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[FASTLOOKAHEADLIMITER_ATTENUATION].LowerBound = 0; port_range_hints[FASTLOOKAHEADLIMITER_ATTENUATION].UpperBound = 70; /* Parameters for Input 1 */ port_descriptors[FASTLOOKAHEADLIMITER_IN_1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FASTLOOKAHEADLIMITER_IN_1] = D_("Input 1"); port_range_hints[FASTLOOKAHEADLIMITER_IN_1].HintDescriptor = 0; /* Parameters for Input 2 */ port_descriptors[FASTLOOKAHEADLIMITER_IN_2] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FASTLOOKAHEADLIMITER_IN_2] = D_("Input 2"); port_range_hints[FASTLOOKAHEADLIMITER_IN_2].HintDescriptor = 0; /* Parameters for Output 1 */ port_descriptors[FASTLOOKAHEADLIMITER_OUT_1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FASTLOOKAHEADLIMITER_OUT_1] = D_("Output 1"); port_range_hints[FASTLOOKAHEADLIMITER_OUT_1].HintDescriptor = 0; /* Parameters for Output 2 */ port_descriptors[FASTLOOKAHEADLIMITER_OUT_2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FASTLOOKAHEADLIMITER_OUT_2] = D_("Output 2"); port_range_hints[FASTLOOKAHEADLIMITER_OUT_2].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[FASTLOOKAHEADLIMITER_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[FASTLOOKAHEADLIMITER_LATENCY] = D_("latency"); port_range_hints[FASTLOOKAHEADLIMITER_LATENCY].HintDescriptor = 0; fastLookaheadLimiterDescriptor->activate = activateFastLookaheadLimiter; fastLookaheadLimiterDescriptor->cleanup = cleanupFastLookaheadLimiter; fastLookaheadLimiterDescriptor->connect_port = connectPortFastLookaheadLimiter; fastLookaheadLimiterDescriptor->deactivate = NULL; fastLookaheadLimiterDescriptor->instantiate = instantiateFastLookaheadLimiter; fastLookaheadLimiterDescriptor->run = runFastLookaheadLimiter; fastLookaheadLimiterDescriptor->run_adding = runAddingFastLookaheadLimiter; fastLookaheadLimiterDescriptor->set_run_adding_gain = setRunAddingGainFastLookaheadLimiter; } } void __attribute__((destructor)) swh_fini() { if (fastLookaheadLimiterDescriptor) { free((LADSPA_PortDescriptor *)fastLookaheadLimiterDescriptor->PortDescriptors); free((char **)fastLookaheadLimiterDescriptor->PortNames); free((LADSPA_PortRangeHint *)fastLookaheadLimiterDescriptor->PortRangeHints); free(fastLookaheadLimiterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/flanger_1191.c000066400000000000000000000416751247673406200215540ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "flanger_1191.xml" #include "ladspa-util.h" #define FLANGER_DELAY_BASE 0 #define FLANGER_DETUNE 1 #define FLANGER_LAW_FREQ 2 #define FLANGER_FEEDBACK 3 #define FLANGER_INPUT 4 #define FLANGER_OUTPUT 5 static LADSPA_Descriptor *flangerDescriptor = NULL; typedef struct { LADSPA_Data *delay_base; LADSPA_Data *detune; LADSPA_Data *law_freq; LADSPA_Data *feedback; LADSPA_Data *input; LADSPA_Data *output; long count; long delay_pos; long delay_size; LADSPA_Data *delay_tbl; float next_law_peak; int next_law_pos; long old_d_base; float prev_law_peak; int prev_law_pos; long sample_rate; LADSPA_Data run_adding_gain; } Flanger; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return flangerDescriptor; default: return NULL; } } static void activateFlanger(LADSPA_Handle instance) { Flanger *plugin_data = (Flanger *)instance; long count = plugin_data->count; long delay_pos = plugin_data->delay_pos; long delay_size = plugin_data->delay_size; LADSPA_Data *delay_tbl = plugin_data->delay_tbl; float next_law_peak = plugin_data->next_law_peak; int next_law_pos = plugin_data->next_law_pos; long old_d_base = plugin_data->old_d_base; float prev_law_peak = plugin_data->prev_law_peak; int prev_law_pos = plugin_data->prev_law_pos; long sample_rate = plugin_data->sample_rate; #line 39 "flanger_1191.xml" memset(delay_tbl, 0, sizeof(LADSPA_Data) * delay_size); delay_pos = 0; count = 0; old_d_base = 0; plugin_data->count = count; plugin_data->delay_pos = delay_pos; plugin_data->delay_size = delay_size; plugin_data->delay_tbl = delay_tbl; plugin_data->next_law_peak = next_law_peak; plugin_data->next_law_pos = next_law_pos; plugin_data->old_d_base = old_d_base; plugin_data->prev_law_peak = prev_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->sample_rate = sample_rate; } static void cleanupFlanger(LADSPA_Handle instance) { #line 46 "flanger_1191.xml" Flanger *plugin_data = (Flanger *)instance; free(plugin_data->delay_tbl); free(instance); } static void connectPortFlanger( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Flanger *plugin; plugin = (Flanger *)instance; switch (port) { case FLANGER_DELAY_BASE: plugin->delay_base = data; break; case FLANGER_DETUNE: plugin->detune = data; break; case FLANGER_LAW_FREQ: plugin->law_freq = data; break; case FLANGER_FEEDBACK: plugin->feedback = data; break; case FLANGER_INPUT: plugin->input = data; break; case FLANGER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateFlanger( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Flanger *plugin_data = (Flanger *)malloc(sizeof(Flanger)); long count; long delay_pos; long delay_size; LADSPA_Data *delay_tbl = NULL; float next_law_peak; int next_law_pos; long old_d_base; float prev_law_peak; int prev_law_pos; long sample_rate; #line 21 "flanger_1191.xml" int min_size; sample_rate = s_rate; prev_law_peak = 0.0f; next_law_peak = 1.0f; prev_law_pos = 0; next_law_pos = 10; min_size = sample_rate * 0.04f; for (delay_size = 1024; delay_size < min_size; delay_size *= 2); delay_tbl = malloc(sizeof(LADSPA_Data) * delay_size); delay_pos = 0; count = 0; old_d_base = 0; plugin_data->count = count; plugin_data->delay_pos = delay_pos; plugin_data->delay_size = delay_size; plugin_data->delay_tbl = delay_tbl; plugin_data->next_law_peak = next_law_peak; plugin_data->next_law_pos = next_law_pos; plugin_data->old_d_base = old_d_base; plugin_data->prev_law_peak = prev_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFlanger(LADSPA_Handle instance, unsigned long sample_count) { Flanger *plugin_data = (Flanger *)instance; /* Delay base (ms) (float value) */ const LADSPA_Data delay_base = *(plugin_data->delay_base); /* Max slowdown (ms) (float value) */ const LADSPA_Data detune = *(plugin_data->detune); /* LFO frequency (Hz) (float value) */ const LADSPA_Data law_freq = *(plugin_data->law_freq); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long count = plugin_data->count; long delay_pos = plugin_data->delay_pos; long delay_size = plugin_data->delay_size; LADSPA_Data * delay_tbl = plugin_data->delay_tbl; float next_law_peak = plugin_data->next_law_peak; int next_law_pos = plugin_data->next_law_pos; long old_d_base = plugin_data->old_d_base; float prev_law_peak = plugin_data->prev_law_peak; int prev_law_pos = plugin_data->prev_law_pos; long sample_rate = plugin_data->sample_rate; #line 50 "flanger_1191.xml" unsigned long pos; long d_base, new_d_base; LADSPA_Data out; float delay_depth; float dp; // float delay position float dp_frac; // fractional part long dp_idx; // integer delay index long law_p; // period of law float frac = 0.0f, step; // Portion the way through the block float law; /* law amplitude */ float n_ph, p_ph; const float fb = f_clamp(feedback, -0.999f, 0.999f); // Set law params law_p = (float)sample_rate / law_freq; if (law_p < 1) { law_p = 1; } // Calculate base delay size in samples new_d_base = (LIMIT(f_round(delay_base), 0, 25) * sample_rate) / 1000; // Calculate delay depth in samples delay_depth = f_clamp(detune * (float)sample_rate * 0.001f, 0.0f, delay_size - new_d_base - 1.0f); step = 1.0f/sample_count; for (pos = 0; pos < sample_count; pos++) { if (count % law_p == 0) { // Value for amplitude of law peak next_law_peak = (float)rand() / (float)RAND_MAX; next_law_pos = count + law_p; } else if (count % law_p == law_p / 2) { // Value for amplitude of law peak prev_law_peak = (float)rand() / (float)RAND_MAX; prev_law_pos = count + law_p; } // Calculate position in delay table d_base = LIN_INTERP(frac, old_d_base, new_d_base); n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; p_ph = n_ph + 0.5f; while (p_ph > 1.0f) { p_ph -= 1.0f; } law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + f_sin_sq(3.1415926f*n_ph)*next_law_peak; dp = (float)(delay_pos - d_base) - (delay_depth * law); // Get the integer part dp_idx = f_round(dp - 0.5f); // Get the fractional part dp_frac = dp - dp_idx; // Accumulate into output buffer out = cube_interp(dp_frac, delay_tbl[(dp_idx-1) & (delay_size-1)], delay_tbl[dp_idx & (delay_size-1)], delay_tbl[(dp_idx+1) & (delay_size-1)], delay_tbl[(dp_idx+2) & (delay_size-1)]); // Store new delayed value delay_tbl[delay_pos] = flush_to_zero(input[pos] + (fb * out)); // Sometimes the delay can pick up NaN values, I'm not sure why // and this is easier than fixing it if (isnan(delay_tbl[delay_pos])) { delay_tbl[delay_pos] = 0.0f; } out = f_clamp(delay_tbl[delay_pos] * 0.707f, -1.0, 1.0); buffer_write(output[pos], out); frac += step; delay_pos = (delay_pos + 1) & (delay_size-1); count++; } plugin_data->count = count; plugin_data->prev_law_peak = prev_law_peak; plugin_data->next_law_peak = next_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->next_law_pos = next_law_pos; plugin_data->delay_pos = delay_pos; plugin_data->old_d_base = new_d_base; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFlanger(LADSPA_Handle instance, LADSPA_Data gain) { ((Flanger *)instance)->run_adding_gain = gain; } static void runAddingFlanger(LADSPA_Handle instance, unsigned long sample_count) { Flanger *plugin_data = (Flanger *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Delay base (ms) (float value) */ const LADSPA_Data delay_base = *(plugin_data->delay_base); /* Max slowdown (ms) (float value) */ const LADSPA_Data detune = *(plugin_data->detune); /* LFO frequency (Hz) (float value) */ const LADSPA_Data law_freq = *(plugin_data->law_freq); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long count = plugin_data->count; long delay_pos = plugin_data->delay_pos; long delay_size = plugin_data->delay_size; LADSPA_Data * delay_tbl = plugin_data->delay_tbl; float next_law_peak = plugin_data->next_law_peak; int next_law_pos = plugin_data->next_law_pos; long old_d_base = plugin_data->old_d_base; float prev_law_peak = plugin_data->prev_law_peak; int prev_law_pos = plugin_data->prev_law_pos; long sample_rate = plugin_data->sample_rate; #line 50 "flanger_1191.xml" unsigned long pos; long d_base, new_d_base; LADSPA_Data out; float delay_depth; float dp; // float delay position float dp_frac; // fractional part long dp_idx; // integer delay index long law_p; // period of law float frac = 0.0f, step; // Portion the way through the block float law; /* law amplitude */ float n_ph, p_ph; const float fb = f_clamp(feedback, -0.999f, 0.999f); // Set law params law_p = (float)sample_rate / law_freq; if (law_p < 1) { law_p = 1; } // Calculate base delay size in samples new_d_base = (LIMIT(f_round(delay_base), 0, 25) * sample_rate) / 1000; // Calculate delay depth in samples delay_depth = f_clamp(detune * (float)sample_rate * 0.001f, 0.0f, delay_size - new_d_base - 1.0f); step = 1.0f/sample_count; for (pos = 0; pos < sample_count; pos++) { if (count % law_p == 0) { // Value for amplitude of law peak next_law_peak = (float)rand() / (float)RAND_MAX; next_law_pos = count + law_p; } else if (count % law_p == law_p / 2) { // Value for amplitude of law peak prev_law_peak = (float)rand() / (float)RAND_MAX; prev_law_pos = count + law_p; } // Calculate position in delay table d_base = LIN_INTERP(frac, old_d_base, new_d_base); n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; p_ph = n_ph + 0.5f; while (p_ph > 1.0f) { p_ph -= 1.0f; } law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + f_sin_sq(3.1415926f*n_ph)*next_law_peak; dp = (float)(delay_pos - d_base) - (delay_depth * law); // Get the integer part dp_idx = f_round(dp - 0.5f); // Get the fractional part dp_frac = dp - dp_idx; // Accumulate into output buffer out = cube_interp(dp_frac, delay_tbl[(dp_idx-1) & (delay_size-1)], delay_tbl[dp_idx & (delay_size-1)], delay_tbl[(dp_idx+1) & (delay_size-1)], delay_tbl[(dp_idx+2) & (delay_size-1)]); // Store new delayed value delay_tbl[delay_pos] = flush_to_zero(input[pos] + (fb * out)); // Sometimes the delay can pick up NaN values, I'm not sure why // and this is easier than fixing it if (isnan(delay_tbl[delay_pos])) { delay_tbl[delay_pos] = 0.0f; } out = f_clamp(delay_tbl[delay_pos] * 0.707f, -1.0, 1.0); buffer_write(output[pos], out); frac += step; delay_pos = (delay_pos + 1) & (delay_size-1); count++; } plugin_data->count = count; plugin_data->prev_law_peak = prev_law_peak; plugin_data->next_law_peak = next_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->next_law_pos = next_law_pos; plugin_data->delay_pos = delay_pos; plugin_data->old_d_base = new_d_base; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif flangerDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (flangerDescriptor) { flangerDescriptor->UniqueID = 1191; flangerDescriptor->Label = "flanger"; flangerDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; flangerDescriptor->Name = D_("Flanger"); flangerDescriptor->Maker = "Steve Harris "; flangerDescriptor->Copyright = "GPL"; flangerDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); flangerDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); flangerDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); flangerDescriptor->PortNames = (const char **)port_names; /* Parameters for Delay base (ms) */ port_descriptors[FLANGER_DELAY_BASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FLANGER_DELAY_BASE] = D_("Delay base (ms)"); port_range_hints[FLANGER_DELAY_BASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[FLANGER_DELAY_BASE].LowerBound = 0.1; port_range_hints[FLANGER_DELAY_BASE].UpperBound = 25; /* Parameters for Max slowdown (ms) */ port_descriptors[FLANGER_DETUNE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FLANGER_DETUNE] = D_("Max slowdown (ms)"); port_range_hints[FLANGER_DETUNE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[FLANGER_DETUNE].LowerBound = 0; port_range_hints[FLANGER_DETUNE].UpperBound = 10; /* Parameters for LFO frequency (Hz) */ port_descriptors[FLANGER_LAW_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FLANGER_LAW_FREQ] = D_("LFO frequency (Hz)"); port_range_hints[FLANGER_LAW_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_LOGARITHMIC; port_range_hints[FLANGER_LAW_FREQ].LowerBound = 0.05; port_range_hints[FLANGER_LAW_FREQ].UpperBound = 100; /* Parameters for Feedback */ port_descriptors[FLANGER_FEEDBACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FLANGER_FEEDBACK] = D_("Feedback"); port_range_hints[FLANGER_FEEDBACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FLANGER_FEEDBACK].LowerBound = -1; port_range_hints[FLANGER_FEEDBACK].UpperBound = 1; /* Parameters for Input */ port_descriptors[FLANGER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FLANGER_INPUT] = D_("Input"); port_range_hints[FLANGER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[FLANGER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FLANGER_OUTPUT] = D_("Output"); port_range_hints[FLANGER_OUTPUT].HintDescriptor = 0; flangerDescriptor->activate = activateFlanger; flangerDescriptor->cleanup = cleanupFlanger; flangerDescriptor->connect_port = connectPortFlanger; flangerDescriptor->deactivate = NULL; flangerDescriptor->instantiate = instantiateFlanger; flangerDescriptor->run = runFlanger; flangerDescriptor->run_adding = runAddingFlanger; flangerDescriptor->set_run_adding_gain = setRunAddingGainFlanger; } } void __attribute__((destructor)) swh_fini() { if (flangerDescriptor) { free((LADSPA_PortDescriptor *)flangerDescriptor->PortDescriptors); free((char **)flangerDescriptor->PortNames); free((LADSPA_PortRangeHint *)flangerDescriptor->PortRangeHints); free(flangerDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/foldover_1213.c000066400000000000000000000155531247673406200217450ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define FOLDOVER_DRIVE_P 0 #define FOLDOVER_PUSH 1 #define FOLDOVER_INPUT 2 #define FOLDOVER_OUTPUT 3 static LADSPA_Descriptor *foldoverDescriptor = NULL; typedef struct { LADSPA_Data *drive_p; LADSPA_Data *push; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Foldover; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return foldoverDescriptor; default: return NULL; } } static void cleanupFoldover(LADSPA_Handle instance) { free(instance); } static void connectPortFoldover( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Foldover *plugin; plugin = (Foldover *)instance; switch (port) { case FOLDOVER_DRIVE_P: plugin->drive_p = data; break; case FOLDOVER_PUSH: plugin->push = data; break; case FOLDOVER_INPUT: plugin->input = data; break; case FOLDOVER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateFoldover( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Foldover *plugin_data = (Foldover *)malloc(sizeof(Foldover)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFoldover(LADSPA_Handle instance, unsigned long sample_count) { Foldover *plugin_data = (Foldover *)instance; /* Drive (float value) */ const LADSPA_Data drive_p = *(plugin_data->drive_p); /* Skew (float value) */ const LADSPA_Data push = *(plugin_data->push); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 18 "foldover_1213.xml" unsigned long pos; float x; const float drive = drive_p + 1.0f; for (pos = 0; pos < sample_count; pos++) { x = input[pos] * drive + push; buffer_write(output[pos], 1.5f * x - 0.5f * x * x * x); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFoldover(LADSPA_Handle instance, LADSPA_Data gain) { ((Foldover *)instance)->run_adding_gain = gain; } static void runAddingFoldover(LADSPA_Handle instance, unsigned long sample_count) { Foldover *plugin_data = (Foldover *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Drive (float value) */ const LADSPA_Data drive_p = *(plugin_data->drive_p); /* Skew (float value) */ const LADSPA_Data push = *(plugin_data->push); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 18 "foldover_1213.xml" unsigned long pos; float x; const float drive = drive_p + 1.0f; for (pos = 0; pos < sample_count; pos++) { x = input[pos] * drive + push; buffer_write(output[pos], 1.5f * x - 0.5f * x * x * x); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif foldoverDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (foldoverDescriptor) { foldoverDescriptor->UniqueID = 1213; foldoverDescriptor->Label = "foldover"; foldoverDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; foldoverDescriptor->Name = D_("Foldover distortion"); foldoverDescriptor->Maker = "Steve Harris "; foldoverDescriptor->Copyright = "GPL"; foldoverDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); foldoverDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); foldoverDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); foldoverDescriptor->PortNames = (const char **)port_names; /* Parameters for Drive */ port_descriptors[FOLDOVER_DRIVE_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOLDOVER_DRIVE_P] = D_("Drive"); port_range_hints[FOLDOVER_DRIVE_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FOLDOVER_DRIVE_P].LowerBound = 0; port_range_hints[FOLDOVER_DRIVE_P].UpperBound = 1; /* Parameters for Skew */ port_descriptors[FOLDOVER_PUSH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOLDOVER_PUSH] = D_("Skew"); port_range_hints[FOLDOVER_PUSH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FOLDOVER_PUSH].LowerBound = 0; port_range_hints[FOLDOVER_PUSH].UpperBound = 1; /* Parameters for Input */ port_descriptors[FOLDOVER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FOLDOVER_INPUT] = D_("Input"); port_range_hints[FOLDOVER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[FOLDOVER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FOLDOVER_OUTPUT] = D_("Output"); port_range_hints[FOLDOVER_OUTPUT].HintDescriptor = 0; foldoverDescriptor->activate = NULL; foldoverDescriptor->cleanup = cleanupFoldover; foldoverDescriptor->connect_port = connectPortFoldover; foldoverDescriptor->deactivate = NULL; foldoverDescriptor->instantiate = instantiateFoldover; foldoverDescriptor->run = runFoldover; foldoverDescriptor->run_adding = runAddingFoldover; foldoverDescriptor->set_run_adding_gain = setRunAddingGainFoldover; } } void __attribute__((destructor)) swh_fini() { if (foldoverDescriptor) { free((LADSPA_PortDescriptor *)foldoverDescriptor->PortDescriptors); free((char **)foldoverDescriptor->PortNames); free((LADSPA_PortRangeHint *)foldoverDescriptor->PortRangeHints); free(foldoverDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/foverdrive_1196.c000066400000000000000000000147051247673406200223100ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define FOVERDRIVE_DRIVE 0 #define FOVERDRIVE_INPUT 1 #define FOVERDRIVE_OUTPUT 2 static LADSPA_Descriptor *foverdriveDescriptor = NULL; typedef struct { LADSPA_Data *drive; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Foverdrive; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return foverdriveDescriptor; default: return NULL; } } static void cleanupFoverdrive(LADSPA_Handle instance) { free(instance); } static void connectPortFoverdrive( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Foverdrive *plugin; plugin = (Foverdrive *)instance; switch (port) { case FOVERDRIVE_DRIVE: plugin->drive = data; break; case FOVERDRIVE_INPUT: plugin->input = data; break; case FOVERDRIVE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateFoverdrive( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Foverdrive *plugin_data = (Foverdrive *)malloc(sizeof(Foverdrive)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFoverdrive(LADSPA_Handle instance, unsigned long sample_count) { Foverdrive *plugin_data = (Foverdrive *)instance; /* Drive level (float value) */ const LADSPA_Data drive = *(plugin_data->drive); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 16 "foverdrive_1196.xml" unsigned long pos; const float drivem1 = drive - 1.0f; for (pos = 0; pos < sample_count; pos++) { LADSPA_Data x = input[pos]; const float fx = fabs(x); buffer_write(output[pos], x*(fx + drive)/(x*x + drivem1*fx + 1.0f)); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFoverdrive(LADSPA_Handle instance, LADSPA_Data gain) { ((Foverdrive *)instance)->run_adding_gain = gain; } static void runAddingFoverdrive(LADSPA_Handle instance, unsigned long sample_count) { Foverdrive *plugin_data = (Foverdrive *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Drive level (float value) */ const LADSPA_Data drive = *(plugin_data->drive); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 16 "foverdrive_1196.xml" unsigned long pos; const float drivem1 = drive - 1.0f; for (pos = 0; pos < sample_count; pos++) { LADSPA_Data x = input[pos]; const float fx = fabs(x); buffer_write(output[pos], x*(fx + drive)/(x*x + drivem1*fx + 1.0f)); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif foverdriveDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (foverdriveDescriptor) { foverdriveDescriptor->UniqueID = 1196; foverdriveDescriptor->Label = "foverdrive"; foverdriveDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; foverdriveDescriptor->Name = D_("Fast overdrive"); foverdriveDescriptor->Maker = "Steve Harris "; foverdriveDescriptor->Copyright = "GPL"; foverdriveDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); foverdriveDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); foverdriveDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); foverdriveDescriptor->PortNames = (const char **)port_names; /* Parameters for Drive level */ port_descriptors[FOVERDRIVE_DRIVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOVERDRIVE_DRIVE] = D_("Drive level"); port_range_hints[FOVERDRIVE_DRIVE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[FOVERDRIVE_DRIVE].LowerBound = 1; port_range_hints[FOVERDRIVE_DRIVE].UpperBound = 3; /* Parameters for Input */ port_descriptors[FOVERDRIVE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FOVERDRIVE_INPUT] = D_("Input"); port_range_hints[FOVERDRIVE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[FOVERDRIVE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FOVERDRIVE_OUTPUT] = D_("Output"); port_range_hints[FOVERDRIVE_OUTPUT].HintDescriptor = 0; foverdriveDescriptor->activate = NULL; foverdriveDescriptor->cleanup = cleanupFoverdrive; foverdriveDescriptor->connect_port = connectPortFoverdrive; foverdriveDescriptor->deactivate = NULL; foverdriveDescriptor->instantiate = instantiateFoverdrive; foverdriveDescriptor->run = runFoverdrive; foverdriveDescriptor->run_adding = runAddingFoverdrive; foverdriveDescriptor->set_run_adding_gain = setRunAddingGainFoverdrive; } } void __attribute__((destructor)) swh_fini() { if (foverdriveDescriptor) { free((LADSPA_PortDescriptor *)foverdriveDescriptor->PortDescriptors); free((char **)foverdriveDescriptor->PortNames); free((LADSPA_PortRangeHint *)foverdriveDescriptor->PortRangeHints); free(foverdriveDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/freq_tracker_1418.c000066400000000000000000000210051247673406200225710ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "freq_tracker_1418.xml" #include "ladspa-util.h" #define FREQTRACKER_SPEED 0 #define FREQTRACKER_INPUT 1 #define FREQTRACKER_FREQ 2 static LADSPA_Descriptor *freqTrackerDescriptor = NULL; typedef struct { LADSPA_Data *speed; LADSPA_Data *input; LADSPA_Data *freq; int cross_time; LADSPA_Data f; LADSPA_Data fo; float fs; LADSPA_Data last_amp; LADSPA_Data run_adding_gain; } FreqTracker; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return freqTrackerDescriptor; default: return NULL; } } static void activateFreqTracker(LADSPA_Handle instance) { FreqTracker *plugin_data = (FreqTracker *)instance; int cross_time = plugin_data->cross_time; LADSPA_Data f = plugin_data->f; LADSPA_Data fo = plugin_data->fo; float fs = plugin_data->fs; LADSPA_Data last_amp = plugin_data->last_amp; #line 27 "freq_tracker_1418.xml" cross_time = 0; f = 0.0f; fo = 0.0f; last_amp = 0.0f; plugin_data->cross_time = cross_time; plugin_data->f = f; plugin_data->fo = fo; plugin_data->fs = fs; plugin_data->last_amp = last_amp; } static void cleanupFreqTracker(LADSPA_Handle instance) { free(instance); } static void connectPortFreqTracker( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { FreqTracker *plugin; plugin = (FreqTracker *)instance; switch (port) { case FREQTRACKER_SPEED: plugin->speed = data; break; case FREQTRACKER_INPUT: plugin->input = data; break; case FREQTRACKER_FREQ: plugin->freq = data; break; } } static LADSPA_Handle instantiateFreqTracker( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { FreqTracker *plugin_data = (FreqTracker *)malloc(sizeof(FreqTracker)); int cross_time; LADSPA_Data f; LADSPA_Data fo; float fs; LADSPA_Data last_amp; #line 19 "freq_tracker_1418.xml" fs = s_rate; f = 0.0f; fo = 0.0f; cross_time = 0; last_amp = 0.0f; plugin_data->cross_time = cross_time; plugin_data->f = f; plugin_data->fo = fo; plugin_data->fs = fs; plugin_data->last_amp = last_amp; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFreqTracker(LADSPA_Handle instance, unsigned long sample_count) { FreqTracker *plugin_data = (FreqTracker *)instance; /* Tracking speed (float value) */ const LADSPA_Data speed = *(plugin_data->speed); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Frequency (Hz) (array of floats of length sample_count) */ LADSPA_Data * const freq = plugin_data->freq; int cross_time = plugin_data->cross_time; LADSPA_Data f = plugin_data->f; LADSPA_Data fo = plugin_data->fo; float fs = plugin_data->fs; LADSPA_Data last_amp = plugin_data->last_amp; #line 34 "freq_tracker_1418.xml" unsigned long pos; float xm1 = last_amp; const float damp_lp = (1.0f - speed) * 0.9f; const float damp_lpi = 1.0f - damp_lp; for (pos = 0; pos < sample_count; pos++) { if (input[pos] < 0.0f && xm1 > 0.0f) { if (cross_time > 3.0f) { f = fs / ((float)cross_time * 2.0f); } cross_time = 0; } xm1 = input[pos]; cross_time++; fo = fo * damp_lp + f * damp_lpi; fo = flush_to_zero(fo); buffer_write(freq[pos], fo); } plugin_data->last_amp = xm1; plugin_data->fo = fo; plugin_data->f = f; plugin_data->cross_time = cross_time; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFreqTracker(LADSPA_Handle instance, LADSPA_Data gain) { ((FreqTracker *)instance)->run_adding_gain = gain; } static void runAddingFreqTracker(LADSPA_Handle instance, unsigned long sample_count) { FreqTracker *plugin_data = (FreqTracker *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Tracking speed (float value) */ const LADSPA_Data speed = *(plugin_data->speed); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Frequency (Hz) (array of floats of length sample_count) */ LADSPA_Data * const freq = plugin_data->freq; int cross_time = plugin_data->cross_time; LADSPA_Data f = plugin_data->f; LADSPA_Data fo = plugin_data->fo; float fs = plugin_data->fs; LADSPA_Data last_amp = plugin_data->last_amp; #line 34 "freq_tracker_1418.xml" unsigned long pos; float xm1 = last_amp; const float damp_lp = (1.0f - speed) * 0.9f; const float damp_lpi = 1.0f - damp_lp; for (pos = 0; pos < sample_count; pos++) { if (input[pos] < 0.0f && xm1 > 0.0f) { if (cross_time > 3.0f) { f = fs / ((float)cross_time * 2.0f); } cross_time = 0; } xm1 = input[pos]; cross_time++; fo = fo * damp_lp + f * damp_lpi; fo = flush_to_zero(fo); buffer_write(freq[pos], fo); } plugin_data->last_amp = xm1; plugin_data->fo = fo; plugin_data->f = f; plugin_data->cross_time = cross_time; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif freqTrackerDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (freqTrackerDescriptor) { freqTrackerDescriptor->UniqueID = 1418; freqTrackerDescriptor->Label = "freqTracker"; freqTrackerDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; freqTrackerDescriptor->Name = D_("Frequency tracker"); freqTrackerDescriptor->Maker = "Steve Harris "; freqTrackerDescriptor->Copyright = "GPL"; freqTrackerDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); freqTrackerDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); freqTrackerDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); freqTrackerDescriptor->PortNames = (const char **)port_names; /* Parameters for Tracking speed */ port_descriptors[FREQTRACKER_SPEED] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FREQTRACKER_SPEED] = D_("Tracking speed"); port_range_hints[FREQTRACKER_SPEED].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[FREQTRACKER_SPEED].LowerBound = 0; port_range_hints[FREQTRACKER_SPEED].UpperBound = 1; /* Parameters for Input */ port_descriptors[FREQTRACKER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FREQTRACKER_INPUT] = D_("Input"); port_range_hints[FREQTRACKER_INPUT].HintDescriptor = 0; /* Parameters for Frequency (Hz) */ port_descriptors[FREQTRACKER_FREQ] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FREQTRACKER_FREQ] = D_("Frequency (Hz)"); port_range_hints[FREQTRACKER_FREQ].HintDescriptor = 0; freqTrackerDescriptor->activate = activateFreqTracker; freqTrackerDescriptor->cleanup = cleanupFreqTracker; freqTrackerDescriptor->connect_port = connectPortFreqTracker; freqTrackerDescriptor->deactivate = NULL; freqTrackerDescriptor->instantiate = instantiateFreqTracker; freqTrackerDescriptor->run = runFreqTracker; freqTrackerDescriptor->run_adding = runAddingFreqTracker; freqTrackerDescriptor->set_run_adding_gain = setRunAddingGainFreqTracker; } } void __attribute__((destructor)) swh_fini() { if (freqTrackerDescriptor) { free((LADSPA_PortDescriptor *)freqTrackerDescriptor->PortDescriptors); free((char **)freqTrackerDescriptor->PortNames); free((LADSPA_PortRangeHint *)freqTrackerDescriptor->PortRangeHints); free(freqTrackerDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/gate_1410.c000066400000000000000000000372021247673406200210370ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "gate_1410.xml" #include "ladspa-util.h" #include "util/biquad.h" #define ENV_TR 0.0001f #define CLOSED 1 #define OPENING 2 #define OPEN 3 #define CLOSING 4 #define GATE_LF_FC 0 #define GATE_HF_FC 1 #define GATE_THRESHOLD 2 #define GATE_ATTACK 3 #define GATE_HOLD 4 #define GATE_DECAY 5 #define GATE_RANGE 6 #define GATE_SELECT 7 #define GATE_INPUT 8 #define GATE_OUTPUT 9 static LADSPA_Descriptor *gateDescriptor = NULL; typedef struct { LADSPA_Data *lf_fc; LADSPA_Data *hf_fc; LADSPA_Data *threshold; LADSPA_Data *attack; LADSPA_Data *hold; LADSPA_Data *decay; LADSPA_Data *range; LADSPA_Data *select; LADSPA_Data *input; LADSPA_Data *output; float env; float fs; float gate; biquad * hf; int hold_count; biquad * lf; int state; LADSPA_Data run_adding_gain; } Gate; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return gateDescriptor; default: return NULL; } } static void activateGate(LADSPA_Handle instance) { Gate *plugin_data = (Gate *)instance; float env = plugin_data->env; float fs = plugin_data->fs; float gate = plugin_data->gate; biquad *hf = plugin_data->hf; int hold_count = plugin_data->hold_count; biquad *lf = plugin_data->lf; int state = plugin_data->state; #line 41 "gate_1410.xml" env = 0.0f; gate = 0.0f; state = CLOSED; biquad_init(lf); biquad_init(hf); plugin_data->env = env; plugin_data->fs = fs; plugin_data->gate = gate; plugin_data->hf = hf; plugin_data->hold_count = hold_count; plugin_data->lf = lf; plugin_data->state = state; } static void cleanupGate(LADSPA_Handle instance) { #line 49 "gate_1410.xml" Gate *plugin_data = (Gate *)instance; free(plugin_data->lf); free(plugin_data->hf); free(instance); } static void connectPortGate( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Gate *plugin; plugin = (Gate *)instance; switch (port) { case GATE_LF_FC: plugin->lf_fc = data; break; case GATE_HF_FC: plugin->hf_fc = data; break; case GATE_THRESHOLD: plugin->threshold = data; break; case GATE_ATTACK: plugin->attack = data; break; case GATE_HOLD: plugin->hold = data; break; case GATE_DECAY: plugin->decay = data; break; case GATE_RANGE: plugin->range = data; break; case GATE_SELECT: plugin->select = data; break; case GATE_INPUT: plugin->input = data; break; case GATE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateGate( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Gate *plugin_data = (Gate *)malloc(sizeof(Gate)); float env; float fs; float gate; biquad *hf = NULL; int hold_count; biquad *lf = NULL; int state; #line 28 "gate_1410.xml" fs = s_rate; env = 0.0f; gate = 0.0f; state = CLOSED; hold_count = 0; lf = malloc(sizeof(biquad)); hf = malloc(sizeof(biquad)); biquad_init(lf); biquad_init(hf); plugin_data->env = env; plugin_data->fs = fs; plugin_data->gate = gate; plugin_data->hf = hf; plugin_data->hold_count = hold_count; plugin_data->lf = lf; plugin_data->state = state; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runGate(LADSPA_Handle instance, unsigned long sample_count) { Gate *plugin_data = (Gate *)instance; /* LF key filter (Hz) (float value) */ const LADSPA_Data lf_fc = *(plugin_data->lf_fc); /* HF key filter (Hz) (float value) */ const LADSPA_Data hf_fc = *(plugin_data->hf_fc); /* Threshold (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Attack (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Hold (ms) (float value) */ const LADSPA_Data hold = *(plugin_data->hold); /* Decay (ms) (float value) */ const LADSPA_Data decay = *(plugin_data->decay); /* Range (dB) (float value) */ const LADSPA_Data range = *(plugin_data->range); /* Output select (-1 = key listen, 0 = gate, 1 = bypass) (float value) */ const LADSPA_Data select = *(plugin_data->select); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float env = plugin_data->env; float fs = plugin_data->fs; float gate = plugin_data->gate; biquad * hf = plugin_data->hf; int hold_count = plugin_data->hold_count; biquad * lf = plugin_data->lf; int state = plugin_data->state; #line 55 "gate_1410.xml" unsigned long pos; float cut = DB_CO(range); float t_level = DB_CO(threshold); float a_rate = 1000.0f / (attack * fs); float d_rate = 1000.0f / (decay * fs); float post_filter, apost_filter; int op = f_round(select); ls_set_params(lf, lf_fc, -40.0f, 0.6f, fs); hs_set_params(hf, hf_fc, -50.0f, 0.6f, fs); for (pos = 0; pos < sample_count; pos++) { post_filter = biquad_run(lf, input[pos]); post_filter = biquad_run(hf, post_filter); apost_filter = fabs(post_filter); if (apost_filter > env) { env = apost_filter; } else { env = apost_filter * ENV_TR + env * (1.0f - ENV_TR); } if (state == CLOSED) { if (env >= t_level) { state = OPENING; } } else if (state == OPENING) { gate += a_rate; if (gate >= 1.0f) { gate = 1.0f; state = OPEN; hold_count = f_round(hold * fs * 0.001f); plugin_data->hold_count = hold_count; } } else if (state == OPEN) { if (hold_count <= 0) { if (env < t_level) { state = CLOSING; } } else { hold_count--; } } else if (state == CLOSING) { gate -= d_rate; if (env >= t_level) { state = OPENING; } else if (gate <= 0.0f) { gate = 0.0f; state = CLOSED; } } if (op == 0) { buffer_write(output[pos], input[pos] * (cut * (1.0f - gate) + gate)); } else if (op == -1) { buffer_write(output[pos], post_filter); } else { buffer_write(output[pos], input[pos]); } } plugin_data->env = env; plugin_data->gate = gate; plugin_data->state = state; plugin_data->hold_count = hold_count; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainGate(LADSPA_Handle instance, LADSPA_Data gain) { ((Gate *)instance)->run_adding_gain = gain; } static void runAddingGate(LADSPA_Handle instance, unsigned long sample_count) { Gate *plugin_data = (Gate *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* LF key filter (Hz) (float value) */ const LADSPA_Data lf_fc = *(plugin_data->lf_fc); /* HF key filter (Hz) (float value) */ const LADSPA_Data hf_fc = *(plugin_data->hf_fc); /* Threshold (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Attack (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Hold (ms) (float value) */ const LADSPA_Data hold = *(plugin_data->hold); /* Decay (ms) (float value) */ const LADSPA_Data decay = *(plugin_data->decay); /* Range (dB) (float value) */ const LADSPA_Data range = *(plugin_data->range); /* Output select (-1 = key listen, 0 = gate, 1 = bypass) (float value) */ const LADSPA_Data select = *(plugin_data->select); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float env = plugin_data->env; float fs = plugin_data->fs; float gate = plugin_data->gate; biquad * hf = plugin_data->hf; int hold_count = plugin_data->hold_count; biquad * lf = plugin_data->lf; int state = plugin_data->state; #line 55 "gate_1410.xml" unsigned long pos; float cut = DB_CO(range); float t_level = DB_CO(threshold); float a_rate = 1000.0f / (attack * fs); float d_rate = 1000.0f / (decay * fs); float post_filter, apost_filter; int op = f_round(select); ls_set_params(lf, lf_fc, -40.0f, 0.6f, fs); hs_set_params(hf, hf_fc, -50.0f, 0.6f, fs); for (pos = 0; pos < sample_count; pos++) { post_filter = biquad_run(lf, input[pos]); post_filter = biquad_run(hf, post_filter); apost_filter = fabs(post_filter); if (apost_filter > env) { env = apost_filter; } else { env = apost_filter * ENV_TR + env * (1.0f - ENV_TR); } if (state == CLOSED) { if (env >= t_level) { state = OPENING; } } else if (state == OPENING) { gate += a_rate; if (gate >= 1.0f) { gate = 1.0f; state = OPEN; hold_count = f_round(hold * fs * 0.001f); plugin_data->hold_count = hold_count; } } else if (state == OPEN) { if (hold_count <= 0) { if (env < t_level) { state = CLOSING; } } else { hold_count--; } } else if (state == CLOSING) { gate -= d_rate; if (env >= t_level) { state = OPENING; } else if (gate <= 0.0f) { gate = 0.0f; state = CLOSED; } } if (op == 0) { buffer_write(output[pos], input[pos] * (cut * (1.0f - gate) + gate)); } else if (op == -1) { buffer_write(output[pos], post_filter); } else { buffer_write(output[pos], input[pos]); } } plugin_data->env = env; plugin_data->gate = gate; plugin_data->state = state; plugin_data->hold_count = hold_count; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif gateDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (gateDescriptor) { gateDescriptor->UniqueID = 1410; gateDescriptor->Label = "gate"; gateDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; gateDescriptor->Name = D_("Gate"); gateDescriptor->Maker = "Steve Harris "; gateDescriptor->Copyright = "GPL"; gateDescriptor->PortCount = 10; port_descriptors = (LADSPA_PortDescriptor *)calloc(10, sizeof(LADSPA_PortDescriptor)); gateDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(10, sizeof(LADSPA_PortRangeHint)); gateDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(10, sizeof(char*)); gateDescriptor->PortNames = (const char **)port_names; /* Parameters for LF key filter (Hz) */ port_descriptors[GATE_LF_FC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_LF_FC] = D_("LF key filter (Hz)"); port_range_hints[GATE_LF_FC].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[GATE_LF_FC].LowerBound = 0.0007f; port_range_hints[GATE_LF_FC].UpperBound = 0.1; /* Parameters for HF key filter (Hz) */ port_descriptors[GATE_HF_FC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_HF_FC] = D_("HF key filter (Hz)"); port_range_hints[GATE_HF_FC].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[GATE_HF_FC].LowerBound = 0.005f; port_range_hints[GATE_HF_FC].UpperBound = 0.49; /* Parameters for Threshold (dB) */ port_descriptors[GATE_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_THRESHOLD] = D_("Threshold (dB)"); port_range_hints[GATE_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[GATE_THRESHOLD].LowerBound = -70; port_range_hints[GATE_THRESHOLD].UpperBound = +20; /* Parameters for Attack (ms) */ port_descriptors[GATE_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_ATTACK] = D_("Attack (ms)"); port_range_hints[GATE_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[GATE_ATTACK].LowerBound = 0.01; port_range_hints[GATE_ATTACK].UpperBound = 1000; /* Parameters for Hold (ms) */ port_descriptors[GATE_HOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_HOLD] = D_("Hold (ms)"); port_range_hints[GATE_HOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[GATE_HOLD].LowerBound = 2; port_range_hints[GATE_HOLD].UpperBound = 2000; /* Parameters for Decay (ms) */ port_descriptors[GATE_DECAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_DECAY] = D_("Decay (ms)"); port_range_hints[GATE_DECAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GATE_DECAY].LowerBound = 2; port_range_hints[GATE_DECAY].UpperBound = 4000; /* Parameters for Range (dB) */ port_descriptors[GATE_RANGE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_RANGE] = D_("Range (dB)"); port_range_hints[GATE_RANGE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[GATE_RANGE].LowerBound = -90; port_range_hints[GATE_RANGE].UpperBound = 0; /* Parameters for Output select (-1 = key listen, 0 = gate, 1 = bypass) */ port_descriptors[GATE_SELECT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GATE_SELECT] = D_("Output select (-1 = key listen, 0 = gate, 1 = bypass)"); port_range_hints[GATE_SELECT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[GATE_SELECT].LowerBound = -1; port_range_hints[GATE_SELECT].UpperBound = 1; /* Parameters for Input */ port_descriptors[GATE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[GATE_INPUT] = D_("Input"); port_range_hints[GATE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[GATE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GATE_OUTPUT] = D_("Output"); port_range_hints[GATE_OUTPUT].HintDescriptor = 0; gateDescriptor->activate = activateGate; gateDescriptor->cleanup = cleanupGate; gateDescriptor->connect_port = connectPortGate; gateDescriptor->deactivate = NULL; gateDescriptor->instantiate = instantiateGate; gateDescriptor->run = runGate; gateDescriptor->run_adding = runAddingGate; gateDescriptor->set_run_adding_gain = setRunAddingGainGate; } } void __attribute__((destructor)) swh_fini() { if (gateDescriptor) { free((LADSPA_PortDescriptor *)gateDescriptor->PortDescriptors); free((char **)gateDescriptor->PortNames); free((LADSPA_PortRangeHint *)gateDescriptor->PortRangeHints); free(gateDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/giant_flange_1437.c000066400000000000000000000444351247673406200225540ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "giant_flange_1437.xml" #include #include "ladspa-util.h" #define INT_SCALE 16384.0f /* INT_SCALE reciprocal includes factor of two scaling */ #define INT_SCALE_R 0.000030517578125f #define MAX_AMP 1.0f #define CLIP 0.8f #define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP)) #define CLIP_B (MAX_AMP - 2.0f * CLIP) #define GIANTFLANGE_DELDOUBLE 0 #define GIANTFLANGE_FREQ1 1 #define GIANTFLANGE_DELAY1 2 #define GIANTFLANGE_FREQ2 3 #define GIANTFLANGE_DELAY2 4 #define GIANTFLANGE_FEEDBACK 5 #define GIANTFLANGE_WET 6 #define GIANTFLANGE_INPUT 7 #define GIANTFLANGE_OUTPUT 8 static LADSPA_Descriptor *giantFlangeDescriptor = NULL; typedef struct { LADSPA_Data *deldouble; LADSPA_Data *freq1; LADSPA_Data *delay1; LADSPA_Data *freq2; LADSPA_Data *delay2; LADSPA_Data *feedback; LADSPA_Data *wet; LADSPA_Data *input; LADSPA_Data *output; int16_t * buffer; unsigned int buffer_mask; unsigned int buffer_pos; float fs; float x1; float x2; float y1; float y2; LADSPA_Data run_adding_gain; } GiantFlange; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return giantFlangeDescriptor; default: return NULL; } } static void activateGiantFlange(LADSPA_Handle instance) { GiantFlange *plugin_data = (GiantFlange *)instance; int16_t *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; float x1 = plugin_data->x1; float x2 = plugin_data->x2; float y1 = plugin_data->y1; float y2 = plugin_data->y2; #line 51 "giant_flange_1437.xml" memset(buffer, 0, (buffer_mask + 1) * sizeof(int16_t)); plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->fs = fs; plugin_data->x1 = x1; plugin_data->x2 = x2; plugin_data->y1 = y1; plugin_data->y2 = y2; } static void cleanupGiantFlange(LADSPA_Handle instance) { #line 55 "giant_flange_1437.xml" GiantFlange *plugin_data = (GiantFlange *)instance; free(plugin_data->buffer); free(instance); } static void connectPortGiantFlange( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { GiantFlange *plugin; plugin = (GiantFlange *)instance; switch (port) { case GIANTFLANGE_DELDOUBLE: plugin->deldouble = data; break; case GIANTFLANGE_FREQ1: plugin->freq1 = data; break; case GIANTFLANGE_DELAY1: plugin->delay1 = data; break; case GIANTFLANGE_FREQ2: plugin->freq2 = data; break; case GIANTFLANGE_DELAY2: plugin->delay2 = data; break; case GIANTFLANGE_FEEDBACK: plugin->feedback = data; break; case GIANTFLANGE_WET: plugin->wet = data; break; case GIANTFLANGE_INPUT: plugin->input = data; break; case GIANTFLANGE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateGiantFlange( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { GiantFlange *plugin_data = (GiantFlange *)malloc(sizeof(GiantFlange)); int16_t *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_pos; float fs; float x1; float x2; float y1; float y2; #line 35 "giant_flange_1437.xml" int buffer_size = 32768; fs = s_rate; while (buffer_size < fs * 10.5f) { buffer_size *= 2; } buffer = calloc(buffer_size, sizeof(int16_t)); buffer_mask = buffer_size - 1; buffer_pos = 0; x1 = 0.5f; y1 = 0.0f; x2 = 0.5f; y2 = 0.0f; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->fs = fs; plugin_data->x1 = x1; plugin_data->x2 = x2; plugin_data->y1 = y1; plugin_data->y2 = y2; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runGiantFlange(LADSPA_Handle instance, unsigned long sample_count) { GiantFlange *plugin_data = (GiantFlange *)instance; /* Double delay (float value) */ const LADSPA_Data deldouble = *(plugin_data->deldouble); /* LFO frequency 1 (Hz) (float value) */ const LADSPA_Data freq1 = *(plugin_data->freq1); /* Delay 1 range (s) (float value) */ const LADSPA_Data delay1 = *(plugin_data->delay1); /* LFO frequency 2 (Hz) (float value) */ const LADSPA_Data freq2 = *(plugin_data->freq2); /* Delay 2 range (s) (float value) */ const LADSPA_Data delay2 = *(plugin_data->delay2); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Dry/Wet level (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; int16_t * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; float x1 = plugin_data->x1; float x2 = plugin_data->x2; float y1 = plugin_data->y1; float y2 = plugin_data->y2; #line 59 "giant_flange_1437.xml" unsigned long pos; const float omega1 = 6.2831852f * (freq1 / fs); const float omega2 = 6.2831852f * (freq2 / fs); float fb; float d1, d2; float d1out, d2out; float fbs; if (feedback > 99.0f) { fb = 0.99f; } else if (feedback < -99.0f) { fb = -0.99f; } else { fb = feedback * 0.01f; } if (f_round(deldouble)) { const float dr1 = delay1 * fs * 0.25f; const float dr2 = delay2 * fs * 0.25f; for (pos = 0; pos < sample_count; pos++) { /* Write input into delay line */ buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); /* Calcuate delays */ d1 = (x1 + 1.0f) * dr1; d2 = (y2 + 1.0f) * dr2; d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; /* Add feedback, must be done afterwards for case where delay = 0 */ fbs = input[pos] + (d1out + d2out) * fb; if(fbs < CLIP && fbs > -CLIP) { buffer[buffer_pos] = fbs * INT_SCALE; } else if (fbs > 0.0f) { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * INT_SCALE; } else { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * -INT_SCALE; } /* Write output */ buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); if (pos % 2) { buffer_pos = (buffer_pos + 1) & buffer_mask; } /* Run LFOs */ x1 -= omega1 * y1; y1 += omega1 * x1; x2 -= omega2 * y2; y2 += omega2 * x2; } } else { const float dr1 = delay1 * fs * 0.5f; const float dr2 = delay2 * fs * 0.5f; for (pos = 0; pos < sample_count; pos++) { /* Write input into delay line */ buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); /* Calcuate delays */ d1 = (x1 + 1.0f) * dr1; d2 = (y2 + 1.0f) * dr2; d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; /* Add feedback, must be done afterwards for case where delay = 0 */ fbs = input[pos] + (d1out + d2out) * fb; if(fbs < CLIP && fbs > -CLIP) { buffer[buffer_pos] = fbs * INT_SCALE; } else if (fbs > 0.0f) { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * INT_SCALE; } else { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * -INT_SCALE; } /* Write output */ buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); buffer_pos = (buffer_pos + 1) & buffer_mask; /* Run LFOs */ x1 -= omega1 * y1; y1 += omega1 * x1; x2 -= omega2 * y2; y2 += omega2 * x2; } } plugin_data->x1 = x1; plugin_data->y1 = y1; plugin_data->x2 = x2; plugin_data->y2 = y2; plugin_data->buffer_pos = buffer_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainGiantFlange(LADSPA_Handle instance, LADSPA_Data gain) { ((GiantFlange *)instance)->run_adding_gain = gain; } static void runAddingGiantFlange(LADSPA_Handle instance, unsigned long sample_count) { GiantFlange *plugin_data = (GiantFlange *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Double delay (float value) */ const LADSPA_Data deldouble = *(plugin_data->deldouble); /* LFO frequency 1 (Hz) (float value) */ const LADSPA_Data freq1 = *(plugin_data->freq1); /* Delay 1 range (s) (float value) */ const LADSPA_Data delay1 = *(plugin_data->delay1); /* LFO frequency 2 (Hz) (float value) */ const LADSPA_Data freq2 = *(plugin_data->freq2); /* Delay 2 range (s) (float value) */ const LADSPA_Data delay2 = *(plugin_data->delay2); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Dry/Wet level (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; int16_t * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; float x1 = plugin_data->x1; float x2 = plugin_data->x2; float y1 = plugin_data->y1; float y2 = plugin_data->y2; #line 59 "giant_flange_1437.xml" unsigned long pos; const float omega1 = 6.2831852f * (freq1 / fs); const float omega2 = 6.2831852f * (freq2 / fs); float fb; float d1, d2; float d1out, d2out; float fbs; if (feedback > 99.0f) { fb = 0.99f; } else if (feedback < -99.0f) { fb = -0.99f; } else { fb = feedback * 0.01f; } if (f_round(deldouble)) { const float dr1 = delay1 * fs * 0.25f; const float dr2 = delay2 * fs * 0.25f; for (pos = 0; pos < sample_count; pos++) { /* Write input into delay line */ buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); /* Calcuate delays */ d1 = (x1 + 1.0f) * dr1; d2 = (y2 + 1.0f) * dr2; d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; /* Add feedback, must be done afterwards for case where delay = 0 */ fbs = input[pos] + (d1out + d2out) * fb; if(fbs < CLIP && fbs > -CLIP) { buffer[buffer_pos] = fbs * INT_SCALE; } else if (fbs > 0.0f) { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * INT_SCALE; } else { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * -INT_SCALE; } /* Write output */ buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); if (pos % 2) { buffer_pos = (buffer_pos + 1) & buffer_mask; } /* Run LFOs */ x1 -= omega1 * y1; y1 += omega1 * x1; x2 -= omega2 * y2; y2 += omega2 * x2; } } else { const float dr1 = delay1 * fs * 0.5f; const float dr2 = delay2 * fs * 0.5f; for (pos = 0; pos < sample_count; pos++) { /* Write input into delay line */ buffer[buffer_pos] = f_round(input[pos] * INT_SCALE); /* Calcuate delays */ d1 = (x1 + 1.0f) * dr1; d2 = (y2 + 1.0f) * dr2; d1out = buffer[(buffer_pos - f_round(d1)) & buffer_mask] * INT_SCALE_R; d2out = buffer[(buffer_pos - f_round(d2)) & buffer_mask] * INT_SCALE_R; /* Add feedback, must be done afterwards for case where delay = 0 */ fbs = input[pos] + (d1out + d2out) * fb; if(fbs < CLIP && fbs > -CLIP) { buffer[buffer_pos] = fbs * INT_SCALE; } else if (fbs > 0.0f) { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B + fbs))) * INT_SCALE; } else { buffer[buffer_pos] = (MAX_AMP - (CLIP_A / (CLIP_B - fbs))) * -INT_SCALE; } /* Write output */ buffer_write(output[pos], LIN_INTERP(wet, input[pos], d1out + d2out)); buffer_pos = (buffer_pos + 1) & buffer_mask; /* Run LFOs */ x1 -= omega1 * y1; y1 += omega1 * x1; x2 -= omega2 * y2; y2 += omega2 * x2; } } plugin_data->x1 = x1; plugin_data->y1 = y1; plugin_data->x2 = x2; plugin_data->y2 = y2; plugin_data->buffer_pos = buffer_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif giantFlangeDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (giantFlangeDescriptor) { giantFlangeDescriptor->UniqueID = 1437; giantFlangeDescriptor->Label = "giantFlange"; giantFlangeDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; giantFlangeDescriptor->Name = D_("Giant flange"); giantFlangeDescriptor->Maker = "Steve Harris "; giantFlangeDescriptor->Copyright = "GPL"; giantFlangeDescriptor->PortCount = 9; port_descriptors = (LADSPA_PortDescriptor *)calloc(9, sizeof(LADSPA_PortDescriptor)); giantFlangeDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(9, sizeof(LADSPA_PortRangeHint)); giantFlangeDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(9, sizeof(char*)); giantFlangeDescriptor->PortNames = (const char **)port_names; /* Parameters for Double delay */ port_descriptors[GIANTFLANGE_DELDOUBLE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_DELDOUBLE] = D_("Double delay"); port_range_hints[GIANTFLANGE_DELDOUBLE].HintDescriptor = 0; /* Parameters for LFO frequency 1 (Hz) */ port_descriptors[GIANTFLANGE_FREQ1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_FREQ1] = D_("LFO frequency 1 (Hz)"); port_range_hints[GIANTFLANGE_FREQ1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[GIANTFLANGE_FREQ1].LowerBound = 0; port_range_hints[GIANTFLANGE_FREQ1].UpperBound = 30.0; /* Parameters for Delay 1 range (s) */ port_descriptors[GIANTFLANGE_DELAY1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_DELAY1] = D_("Delay 1 range (s)"); port_range_hints[GIANTFLANGE_DELAY1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[GIANTFLANGE_DELAY1].LowerBound = 0; port_range_hints[GIANTFLANGE_DELAY1].UpperBound = 10.5; /* Parameters for LFO frequency 2 (Hz) */ port_descriptors[GIANTFLANGE_FREQ2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_FREQ2] = D_("LFO frequency 2 (Hz)"); port_range_hints[GIANTFLANGE_FREQ2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[GIANTFLANGE_FREQ2].LowerBound = 0; port_range_hints[GIANTFLANGE_FREQ2].UpperBound = 30.0; /* Parameters for Delay 2 range (s) */ port_descriptors[GIANTFLANGE_DELAY2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_DELAY2] = D_("Delay 2 range (s)"); port_range_hints[GIANTFLANGE_DELAY2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[GIANTFLANGE_DELAY2].LowerBound = 0; port_range_hints[GIANTFLANGE_DELAY2].UpperBound = 10.5; /* Parameters for Feedback */ port_descriptors[GIANTFLANGE_FEEDBACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_FEEDBACK] = D_("Feedback"); port_range_hints[GIANTFLANGE_FEEDBACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[GIANTFLANGE_FEEDBACK].LowerBound = -100; port_range_hints[GIANTFLANGE_FEEDBACK].UpperBound = 100; /* Parameters for Dry/Wet level */ port_descriptors[GIANTFLANGE_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GIANTFLANGE_WET] = D_("Dry/Wet level"); port_range_hints[GIANTFLANGE_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[GIANTFLANGE_WET].LowerBound = 0; port_range_hints[GIANTFLANGE_WET].UpperBound = 1; /* Parameters for Input */ port_descriptors[GIANTFLANGE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[GIANTFLANGE_INPUT] = D_("Input"); port_range_hints[GIANTFLANGE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[GIANTFLANGE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GIANTFLANGE_OUTPUT] = D_("Output"); port_range_hints[GIANTFLANGE_OUTPUT].HintDescriptor = 0; giantFlangeDescriptor->activate = activateGiantFlange; giantFlangeDescriptor->cleanup = cleanupGiantFlange; giantFlangeDescriptor->connect_port = connectPortGiantFlange; giantFlangeDescriptor->deactivate = NULL; giantFlangeDescriptor->instantiate = instantiateGiantFlange; giantFlangeDescriptor->run = runGiantFlange; giantFlangeDescriptor->run_adding = runAddingGiantFlange; giantFlangeDescriptor->set_run_adding_gain = setRunAddingGainGiantFlange; } } void __attribute__((destructor)) swh_fini() { if (giantFlangeDescriptor) { free((LADSPA_PortDescriptor *)giantFlangeDescriptor->PortDescriptors); free((char **)giantFlangeDescriptor->PortNames); free((LADSPA_PortRangeHint *)giantFlangeDescriptor->PortRangeHints); free(giantFlangeDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/gong_1424.c000066400000000000000000000726101247673406200210600ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "gong_1424.xml" #include "util/waveguide_nl.h" #define RUN_WG(n, junct_a, junct_b) waveguide_nl_process(w[n], junct_a - out[n*2+1], junct_b - out[n*2], out+n*2, out+n*2+1) #define GONG_DAMP_I 0 #define GONG_DAMP_O 1 #define GONG_MICPOS 2 #define GONG_SCALE0 3 #define GONG_APA0 4 #define GONG_APB0 5 #define GONG_SCALE1 6 #define GONG_APA1 7 #define GONG_APB1 8 #define GONG_SCALE2 9 #define GONG_APA2 10 #define GONG_APB2 11 #define GONG_SCALE3 12 #define GONG_APA3 13 #define GONG_APB3 14 #define GONG_SCALE4 15 #define GONG_APA4 16 #define GONG_APB4 17 #define GONG_SCALE5 18 #define GONG_APA5 19 #define GONG_APB5 20 #define GONG_SCALE6 21 #define GONG_APA6 22 #define GONG_APB6 23 #define GONG_SCALE7 24 #define GONG_APA7 25 #define GONG_APB7 26 #define GONG_INPUT 27 #define GONG_OUTPUT 28 static LADSPA_Descriptor *gongDescriptor = NULL; typedef struct { LADSPA_Data *damp_i; LADSPA_Data *damp_o; LADSPA_Data *micpos; LADSPA_Data *scale0; LADSPA_Data *apa0; LADSPA_Data *apb0; LADSPA_Data *scale1; LADSPA_Data *apa1; LADSPA_Data *apb1; LADSPA_Data *scale2; LADSPA_Data *apa2; LADSPA_Data *apb2; LADSPA_Data *scale3; LADSPA_Data *apa3; LADSPA_Data *apb3; LADSPA_Data *scale4; LADSPA_Data *apa4; LADSPA_Data *apb4; LADSPA_Data *scale5; LADSPA_Data *apa5; LADSPA_Data *apb5; LADSPA_Data *scale6; LADSPA_Data *apa6; LADSPA_Data *apb6; LADSPA_Data *scale7; LADSPA_Data *apa7; LADSPA_Data *apb7; LADSPA_Data *input; LADSPA_Data *output; int maxsize_i; int maxsize_o; float * out; waveguide_nl **w; LADSPA_Data run_adding_gain; } Gong; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return gongDescriptor; default: return NULL; } } static void activateGong(LADSPA_Handle instance) { Gong *plugin_data = (Gong *)instance; int maxsize_i = plugin_data->maxsize_i; int maxsize_o = plugin_data->maxsize_o; float *out = plugin_data->out; waveguide_nl **w = plugin_data->w; #line 44 "gong_1424.xml" unsigned int i; for (i = 0; i < 8; i++) { waveguide_nl_reset(w[i]); } plugin_data->maxsize_i = maxsize_i; plugin_data->maxsize_o = maxsize_o; plugin_data->out = out; plugin_data->w = w; } static void cleanupGong(LADSPA_Handle instance) { #line 110 "gong_1424.xml" Gong *plugin_data = (Gong *)instance; unsigned int i; for (i = 0; i < 8; i++) { waveguide_nl_free(plugin_data->w[i]); } free(plugin_data->w); free(plugin_data->out); free(instance); } static void connectPortGong( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Gong *plugin; plugin = (Gong *)instance; switch (port) { case GONG_DAMP_I: plugin->damp_i = data; break; case GONG_DAMP_O: plugin->damp_o = data; break; case GONG_MICPOS: plugin->micpos = data; break; case GONG_SCALE0: plugin->scale0 = data; break; case GONG_APA0: plugin->apa0 = data; break; case GONG_APB0: plugin->apb0 = data; break; case GONG_SCALE1: plugin->scale1 = data; break; case GONG_APA1: plugin->apa1 = data; break; case GONG_APB1: plugin->apb1 = data; break; case GONG_SCALE2: plugin->scale2 = data; break; case GONG_APA2: plugin->apa2 = data; break; case GONG_APB2: plugin->apb2 = data; break; case GONG_SCALE3: plugin->scale3 = data; break; case GONG_APA3: plugin->apa3 = data; break; case GONG_APB3: plugin->apb3 = data; break; case GONG_SCALE4: plugin->scale4 = data; break; case GONG_APA4: plugin->apa4 = data; break; case GONG_APB4: plugin->apb4 = data; break; case GONG_SCALE5: plugin->scale5 = data; break; case GONG_APA5: plugin->apa5 = data; break; case GONG_APB5: plugin->apb5 = data; break; case GONG_SCALE6: plugin->scale6 = data; break; case GONG_APA6: plugin->apa6 = data; break; case GONG_APB6: plugin->apb6 = data; break; case GONG_SCALE7: plugin->scale7 = data; break; case GONG_APA7: plugin->apa7 = data; break; case GONG_APB7: plugin->apb7 = data; break; case GONG_INPUT: plugin->input = data; break; case GONG_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateGong( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Gong *plugin_data = (Gong *)malloc(sizeof(Gong)); int maxsize_i; int maxsize_o; float *out = NULL; waveguide_nl **w = NULL; #line 23 "gong_1424.xml" /* Max delay length for inner waveguides */ maxsize_i = (float)s_rate * 0.03643242f; /* Max delay length for outer waveguides */ maxsize_o = (float)s_rate * 0.05722782f; /* The waveguide structures */ w = malloc(8 * sizeof(waveguide_nl *)); w[0] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); w[1] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); w[2] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); w[3] = waveguide_nl_new(maxsize_i, 0.5, 0.0f, 0.0f); w[4] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); w[5] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); w[6] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); w[7] = waveguide_nl_new(maxsize_o, 0.5, 0.0f, 0.0f); /* Buffers to hold the currect deflections */ out = calloc(32, sizeof(float)); plugin_data->maxsize_i = maxsize_i; plugin_data->maxsize_o = maxsize_o; plugin_data->out = out; plugin_data->w = w; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runGong(LADSPA_Handle instance, unsigned long sample_count) { Gong *plugin_data = (Gong *)instance; /* Inner damping (float value) */ const LADSPA_Data damp_i = *(plugin_data->damp_i); /* Outer damping (float value) */ const LADSPA_Data damp_o = *(plugin_data->damp_o); /* Mic position (float value) */ const LADSPA_Data micpos = *(plugin_data->micpos); /* Inner size 1 (float value) */ const LADSPA_Data scale0 = *(plugin_data->scale0); /* Inner stiffness 1 + (float value) */ const LADSPA_Data apa0 = *(plugin_data->apa0); /* Inner stiffness 1 - (float value) */ const LADSPA_Data apb0 = *(plugin_data->apb0); /* Inner size 2 (float value) */ const LADSPA_Data scale1 = *(plugin_data->scale1); /* Inner stiffness 2 + (float value) */ const LADSPA_Data apa1 = *(plugin_data->apa1); /* Inner stiffness 2 - (float value) */ const LADSPA_Data apb1 = *(plugin_data->apb1); /* Inner size 3 (float value) */ const LADSPA_Data scale2 = *(plugin_data->scale2); /* Inner stiffness 3 + (float value) */ const LADSPA_Data apa2 = *(plugin_data->apa2); /* Inner stiffness 3 - (float value) */ const LADSPA_Data apb2 = *(plugin_data->apb2); /* Inner size 4 (float value) */ const LADSPA_Data scale3 = *(plugin_data->scale3); /* Inner stiffness 4 + (float value) */ const LADSPA_Data apa3 = *(plugin_data->apa3); /* Inner stiffness 4 - (float value) */ const LADSPA_Data apb3 = *(plugin_data->apb3); /* Outer size 1 (float value) */ const LADSPA_Data scale4 = *(plugin_data->scale4); /* Outer stiffness 1 + (float value) */ const LADSPA_Data apa4 = *(plugin_data->apa4); /* Outer stiffness 1 - (float value) */ const LADSPA_Data apb4 = *(plugin_data->apb4); /* Outer size 2 (float value) */ const LADSPA_Data scale5 = *(plugin_data->scale5); /* Outer stiffness 2 + (float value) */ const LADSPA_Data apa5 = *(plugin_data->apa5); /* Outer stiffness 2 - (float value) */ const LADSPA_Data apb5 = *(plugin_data->apb5); /* Outer size 3 (float value) */ const LADSPA_Data scale6 = *(plugin_data->scale6); /* Outer stiffness 3 + (float value) */ const LADSPA_Data apa6 = *(plugin_data->apa6); /* Outer stiffness 3 - (float value) */ const LADSPA_Data apb6 = *(plugin_data->apb6); /* Outer size 4 (float value) */ const LADSPA_Data scale7 = *(plugin_data->scale7); /* Outer stiffness 4 + (float value) */ const LADSPA_Data apa7 = *(plugin_data->apa7); /* Outer stiffness 4 - (float value) */ const LADSPA_Data apb7 = *(plugin_data->apb7); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; int maxsize_i = plugin_data->maxsize_i; int maxsize_o = plugin_data->maxsize_o; float * out = plugin_data->out; waveguide_nl ** w = plugin_data->w; #line 52 "gong_1424.xml" unsigned long pos; /* The a coef of the inner lowpass */ const float lpi = 1.0f - damp_i * 0.1423f; /* The a coef of the outer lowpass */ const float lpo = 1.0f - damp_o * 0.19543f; /* Set the parameters of the waveguides */ waveguide_nl_set_delay(w[0], maxsize_i * scale0); waveguide_nl_set_ap(w[0], apa0, apb0); waveguide_nl_set_delay(w[1], maxsize_i * scale1); waveguide_nl_set_ap(w[1], apa1, apb1); waveguide_nl_set_delay(w[2], maxsize_i * scale2); waveguide_nl_set_ap(w[2], apa2, apb2); waveguide_nl_set_delay(w[3], maxsize_i * scale3); waveguide_nl_set_ap(w[3], apa3, apb3); waveguide_nl_set_delay(w[4], maxsize_o * scale4); waveguide_nl_set_ap(w[4], apa4, apb4); waveguide_nl_set_delay(w[5], maxsize_o * scale5); waveguide_nl_set_ap(w[5], apa5, apb5); waveguide_nl_set_delay(w[6], maxsize_o * scale6); waveguide_nl_set_ap(w[6], apa6, apb6); waveguide_nl_set_delay(w[7], maxsize_o * scale7); waveguide_nl_set_ap(w[7], apa7, apb7); for (pos=0; pos<4; pos++) { waveguide_nl_set_fc(w[pos], lpi); } for (; pos<8; pos++) { waveguide_nl_set_fc(w[pos], lpo); } for (pos = 0; pos < sample_count; pos++) { /* Calcualte the deflections at the wavejunctions alpha is the centre, beta is north, gamma is east, delta is south and epsilon is west */ const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + input[pos]; const float beta = (out[1] + out[9] + out[14]) * 0.666666666666f; const float gamma = (out[3] + out[8] + out[11]) * 0.666666666666f; const float delta = (out[5] + out[10] + out[13]) * 0.666666666666f; const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666666f; /* Inject the energy at the junctions + reflections into the waveguides (the macro gives the reflection calcs) */ RUN_WG(0, beta, alpha); RUN_WG(1, gamma, alpha); RUN_WG(2, delta, alpha); RUN_WG(3, epsilon, alpha); RUN_WG(4, beta, gamma); RUN_WG(5, gamma, delta); RUN_WG(6, delta, epsilon); RUN_WG(7, epsilon, beta); buffer_write(output[pos], (1.0f - micpos) * alpha + micpos * delta); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainGong(LADSPA_Handle instance, LADSPA_Data gain) { ((Gong *)instance)->run_adding_gain = gain; } static void runAddingGong(LADSPA_Handle instance, unsigned long sample_count) { Gong *plugin_data = (Gong *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Inner damping (float value) */ const LADSPA_Data damp_i = *(plugin_data->damp_i); /* Outer damping (float value) */ const LADSPA_Data damp_o = *(plugin_data->damp_o); /* Mic position (float value) */ const LADSPA_Data micpos = *(plugin_data->micpos); /* Inner size 1 (float value) */ const LADSPA_Data scale0 = *(plugin_data->scale0); /* Inner stiffness 1 + (float value) */ const LADSPA_Data apa0 = *(plugin_data->apa0); /* Inner stiffness 1 - (float value) */ const LADSPA_Data apb0 = *(plugin_data->apb0); /* Inner size 2 (float value) */ const LADSPA_Data scale1 = *(plugin_data->scale1); /* Inner stiffness 2 + (float value) */ const LADSPA_Data apa1 = *(plugin_data->apa1); /* Inner stiffness 2 - (float value) */ const LADSPA_Data apb1 = *(plugin_data->apb1); /* Inner size 3 (float value) */ const LADSPA_Data scale2 = *(plugin_data->scale2); /* Inner stiffness 3 + (float value) */ const LADSPA_Data apa2 = *(plugin_data->apa2); /* Inner stiffness 3 - (float value) */ const LADSPA_Data apb2 = *(plugin_data->apb2); /* Inner size 4 (float value) */ const LADSPA_Data scale3 = *(plugin_data->scale3); /* Inner stiffness 4 + (float value) */ const LADSPA_Data apa3 = *(plugin_data->apa3); /* Inner stiffness 4 - (float value) */ const LADSPA_Data apb3 = *(plugin_data->apb3); /* Outer size 1 (float value) */ const LADSPA_Data scale4 = *(plugin_data->scale4); /* Outer stiffness 1 + (float value) */ const LADSPA_Data apa4 = *(plugin_data->apa4); /* Outer stiffness 1 - (float value) */ const LADSPA_Data apb4 = *(plugin_data->apb4); /* Outer size 2 (float value) */ const LADSPA_Data scale5 = *(plugin_data->scale5); /* Outer stiffness 2 + (float value) */ const LADSPA_Data apa5 = *(plugin_data->apa5); /* Outer stiffness 2 - (float value) */ const LADSPA_Data apb5 = *(plugin_data->apb5); /* Outer size 3 (float value) */ const LADSPA_Data scale6 = *(plugin_data->scale6); /* Outer stiffness 3 + (float value) */ const LADSPA_Data apa6 = *(plugin_data->apa6); /* Outer stiffness 3 - (float value) */ const LADSPA_Data apb6 = *(plugin_data->apb6); /* Outer size 4 (float value) */ const LADSPA_Data scale7 = *(plugin_data->scale7); /* Outer stiffness 4 + (float value) */ const LADSPA_Data apa7 = *(plugin_data->apa7); /* Outer stiffness 4 - (float value) */ const LADSPA_Data apb7 = *(plugin_data->apb7); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; int maxsize_i = plugin_data->maxsize_i; int maxsize_o = plugin_data->maxsize_o; float * out = plugin_data->out; waveguide_nl ** w = plugin_data->w; #line 52 "gong_1424.xml" unsigned long pos; /* The a coef of the inner lowpass */ const float lpi = 1.0f - damp_i * 0.1423f; /* The a coef of the outer lowpass */ const float lpo = 1.0f - damp_o * 0.19543f; /* Set the parameters of the waveguides */ waveguide_nl_set_delay(w[0], maxsize_i * scale0); waveguide_nl_set_ap(w[0], apa0, apb0); waveguide_nl_set_delay(w[1], maxsize_i * scale1); waveguide_nl_set_ap(w[1], apa1, apb1); waveguide_nl_set_delay(w[2], maxsize_i * scale2); waveguide_nl_set_ap(w[2], apa2, apb2); waveguide_nl_set_delay(w[3], maxsize_i * scale3); waveguide_nl_set_ap(w[3], apa3, apb3); waveguide_nl_set_delay(w[4], maxsize_o * scale4); waveguide_nl_set_ap(w[4], apa4, apb4); waveguide_nl_set_delay(w[5], maxsize_o * scale5); waveguide_nl_set_ap(w[5], apa5, apb5); waveguide_nl_set_delay(w[6], maxsize_o * scale6); waveguide_nl_set_ap(w[6], apa6, apb6); waveguide_nl_set_delay(w[7], maxsize_o * scale7); waveguide_nl_set_ap(w[7], apa7, apb7); for (pos=0; pos<4; pos++) { waveguide_nl_set_fc(w[pos], lpi); } for (; pos<8; pos++) { waveguide_nl_set_fc(w[pos], lpo); } for (pos = 0; pos < sample_count; pos++) { /* Calcualte the deflections at the wavejunctions alpha is the centre, beta is north, gamma is east, delta is south and epsilon is west */ const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + input[pos]; const float beta = (out[1] + out[9] + out[14]) * 0.666666666666f; const float gamma = (out[3] + out[8] + out[11]) * 0.666666666666f; const float delta = (out[5] + out[10] + out[13]) * 0.666666666666f; const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666666f; /* Inject the energy at the junctions + reflections into the waveguides (the macro gives the reflection calcs) */ RUN_WG(0, beta, alpha); RUN_WG(1, gamma, alpha); RUN_WG(2, delta, alpha); RUN_WG(3, epsilon, alpha); RUN_WG(4, beta, gamma); RUN_WG(5, gamma, delta); RUN_WG(6, delta, epsilon); RUN_WG(7, epsilon, beta); buffer_write(output[pos], (1.0f - micpos) * alpha + micpos * delta); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif gongDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (gongDescriptor) { gongDescriptor->UniqueID = 1424; gongDescriptor->Label = "gong"; gongDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; gongDescriptor->Name = D_("Gong model"); gongDescriptor->Maker = "Steve Harris "; gongDescriptor->Copyright = "GPL"; gongDescriptor->PortCount = 29; port_descriptors = (LADSPA_PortDescriptor *)calloc(29, sizeof(LADSPA_PortDescriptor)); gongDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(29, sizeof(LADSPA_PortRangeHint)); gongDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(29, sizeof(char*)); gongDescriptor->PortNames = (const char **)port_names; /* Parameters for Inner damping */ port_descriptors[GONG_DAMP_I] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_DAMP_I] = D_("Inner damping"); port_range_hints[GONG_DAMP_I].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_DAMP_I].LowerBound = 0; port_range_hints[GONG_DAMP_I].UpperBound = 1; /* Parameters for Outer damping */ port_descriptors[GONG_DAMP_O] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_DAMP_O] = D_("Outer damping"); port_range_hints[GONG_DAMP_O].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_DAMP_O].LowerBound = 0; port_range_hints[GONG_DAMP_O].UpperBound = 1; /* Parameters for Mic position */ port_descriptors[GONG_MICPOS] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_MICPOS] = D_("Mic position"); port_range_hints[GONG_MICPOS].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[GONG_MICPOS].LowerBound = 0; port_range_hints[GONG_MICPOS].UpperBound = 1; /* Parameters for Inner size 1 */ port_descriptors[GONG_SCALE0] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE0] = D_("Inner size 1"); port_range_hints[GONG_SCALE0].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE0].LowerBound = 0; port_range_hints[GONG_SCALE0].UpperBound = 1; /* Parameters for Inner stiffness 1 + */ port_descriptors[GONG_APA0] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA0] = D_("Inner stiffness 1 +"); port_range_hints[GONG_APA0].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA0].LowerBound = 0; port_range_hints[GONG_APA0].UpperBound = 1; /* Parameters for Inner stiffness 1 - */ port_descriptors[GONG_APB0] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB0] = D_("Inner stiffness 1 -"); port_range_hints[GONG_APB0].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB0].LowerBound = 0; port_range_hints[GONG_APB0].UpperBound = 1; /* Parameters for Inner size 2 */ port_descriptors[GONG_SCALE1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE1] = D_("Inner size 2"); port_range_hints[GONG_SCALE1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE1].LowerBound = 0; port_range_hints[GONG_SCALE1].UpperBound = 1; /* Parameters for Inner stiffness 2 + */ port_descriptors[GONG_APA1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA1] = D_("Inner stiffness 2 +"); port_range_hints[GONG_APA1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA1].LowerBound = 0; port_range_hints[GONG_APA1].UpperBound = 1; /* Parameters for Inner stiffness 2 - */ port_descriptors[GONG_APB1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB1] = D_("Inner stiffness 2 -"); port_range_hints[GONG_APB1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB1].LowerBound = 0; port_range_hints[GONG_APB1].UpperBound = 1; /* Parameters for Inner size 3 */ port_descriptors[GONG_SCALE2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE2] = D_("Inner size 3"); port_range_hints[GONG_SCALE2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE2].LowerBound = 0; port_range_hints[GONG_SCALE2].UpperBound = 1; /* Parameters for Inner stiffness 3 + */ port_descriptors[GONG_APA2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA2] = D_("Inner stiffness 3 +"); port_range_hints[GONG_APA2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA2].LowerBound = 0; port_range_hints[GONG_APA2].UpperBound = 1; /* Parameters for Inner stiffness 3 - */ port_descriptors[GONG_APB2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB2] = D_("Inner stiffness 3 -"); port_range_hints[GONG_APB2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB2].LowerBound = 0; port_range_hints[GONG_APB2].UpperBound = 1; /* Parameters for Inner size 4 */ port_descriptors[GONG_SCALE3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE3] = D_("Inner size 4"); port_range_hints[GONG_SCALE3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE3].LowerBound = 0; port_range_hints[GONG_SCALE3].UpperBound = 1; /* Parameters for Inner stiffness 4 + */ port_descriptors[GONG_APA3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA3] = D_("Inner stiffness 4 +"); port_range_hints[GONG_APA3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA3].LowerBound = 0; port_range_hints[GONG_APA3].UpperBound = 1; /* Parameters for Inner stiffness 4 - */ port_descriptors[GONG_APB3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB3] = D_("Inner stiffness 4 -"); port_range_hints[GONG_APB3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB3].LowerBound = 0; port_range_hints[GONG_APB3].UpperBound = 1; /* Parameters for Outer size 1 */ port_descriptors[GONG_SCALE4] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE4] = D_("Outer size 1"); port_range_hints[GONG_SCALE4].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE4].LowerBound = 0; port_range_hints[GONG_SCALE4].UpperBound = 1; /* Parameters for Outer stiffness 1 + */ port_descriptors[GONG_APA4] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA4] = D_("Outer stiffness 1 +"); port_range_hints[GONG_APA4].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA4].LowerBound = 0; port_range_hints[GONG_APA4].UpperBound = 1; /* Parameters for Outer stiffness 1 - */ port_descriptors[GONG_APB4] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB4] = D_("Outer stiffness 1 -"); port_range_hints[GONG_APB4].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB4].LowerBound = 0; port_range_hints[GONG_APB4].UpperBound = 1; /* Parameters for Outer size 2 */ port_descriptors[GONG_SCALE5] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE5] = D_("Outer size 2"); port_range_hints[GONG_SCALE5].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE5].LowerBound = 0; port_range_hints[GONG_SCALE5].UpperBound = 1; /* Parameters for Outer stiffness 2 + */ port_descriptors[GONG_APA5] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA5] = D_("Outer stiffness 2 +"); port_range_hints[GONG_APA5].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA5].LowerBound = 0; port_range_hints[GONG_APA5].UpperBound = 1; /* Parameters for Outer stiffness 2 - */ port_descriptors[GONG_APB5] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB5] = D_("Outer stiffness 2 -"); port_range_hints[GONG_APB5].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB5].LowerBound = 0; port_range_hints[GONG_APB5].UpperBound = 1; /* Parameters for Outer size 3 */ port_descriptors[GONG_SCALE6] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE6] = D_("Outer size 3"); port_range_hints[GONG_SCALE6].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE6].LowerBound = 0; port_range_hints[GONG_SCALE6].UpperBound = 1; /* Parameters for Outer stiffness 3 + */ port_descriptors[GONG_APA6] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA6] = D_("Outer stiffness 3 +"); port_range_hints[GONG_APA6].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA6].LowerBound = 0; port_range_hints[GONG_APA6].UpperBound = 1; /* Parameters for Outer stiffness 3 - */ port_descriptors[GONG_APB6] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB6] = D_("Outer stiffness 3 -"); port_range_hints[GONG_APB6].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB6].LowerBound = 0; port_range_hints[GONG_APB6].UpperBound = 1; /* Parameters for Outer size 4 */ port_descriptors[GONG_SCALE7] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_SCALE7] = D_("Outer size 4"); port_range_hints[GONG_SCALE7].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_SCALE7].LowerBound = 0; port_range_hints[GONG_SCALE7].UpperBound = 1; /* Parameters for Outer stiffness 4 + */ port_descriptors[GONG_APA7] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APA7] = D_("Outer stiffness 4 +"); port_range_hints[GONG_APA7].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APA7].LowerBound = 0; port_range_hints[GONG_APA7].UpperBound = 1; /* Parameters for Outer stiffness 4 - */ port_descriptors[GONG_APB7] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONG_APB7] = D_("Outer stiffness 4 -"); port_range_hints[GONG_APB7].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONG_APB7].LowerBound = 0; port_range_hints[GONG_APB7].UpperBound = 1; /* Parameters for Input */ port_descriptors[GONG_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[GONG_INPUT] = D_("Input"); port_range_hints[GONG_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[GONG_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GONG_OUTPUT] = D_("Output"); port_range_hints[GONG_OUTPUT].HintDescriptor = 0; gongDescriptor->activate = activateGong; gongDescriptor->cleanup = cleanupGong; gongDescriptor->connect_port = connectPortGong; gongDescriptor->deactivate = NULL; gongDescriptor->instantiate = instantiateGong; gongDescriptor->run = runGong; gongDescriptor->run_adding = runAddingGong; gongDescriptor->set_run_adding_gain = setRunAddingGainGong; } } void __attribute__((destructor)) swh_fini() { if (gongDescriptor) { free((LADSPA_PortDescriptor *)gongDescriptor->PortDescriptors); free((char **)gongDescriptor->PortNames); free((LADSPA_PortRangeHint *)gongDescriptor->PortRangeHints); free(gongDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/gong_beater_1439.c000066400000000000000000000262211247673406200224050ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "gong_beater_1439.xml" #include "ladspa-util.h" #define GONGBEATER_IMP_GAIN 0 #define GONGBEATER_STRIKE_GAIN 1 #define GONGBEATER_STRIKE_DURATION 2 #define GONGBEATER_INPUT 3 #define GONGBEATER_OUTPUT 4 static LADSPA_Descriptor *gongBeaterDescriptor = NULL; typedef struct { LADSPA_Data *imp_gain; LADSPA_Data *strike_gain; LADSPA_Data *strike_duration; LADSPA_Data *input; LADSPA_Data *output; float fs; float imp_level; unsigned int running; float x; float xm; float y; float ym; LADSPA_Data run_adding_gain; } GongBeater; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return gongBeaterDescriptor; default: return NULL; } } static void activateGongBeater(LADSPA_Handle instance) { GongBeater *plugin_data = (GongBeater *)instance; float fs = plugin_data->fs; float imp_level = plugin_data->imp_level; unsigned int running = plugin_data->running; float x = plugin_data->x; float xm = plugin_data->xm; float y = plugin_data->y; float ym = plugin_data->ym; #line 31 "gong_beater_1439.xml" running = 0; x = 0.5f; y = 0.0f; xm = 0.5f; ym = 0.0f; plugin_data->fs = fs; plugin_data->imp_level = imp_level; plugin_data->running = running; plugin_data->x = x; plugin_data->xm = xm; plugin_data->y = y; plugin_data->ym = ym; } static void cleanupGongBeater(LADSPA_Handle instance) { free(instance); } static void connectPortGongBeater( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { GongBeater *plugin; plugin = (GongBeater *)instance; switch (port) { case GONGBEATER_IMP_GAIN: plugin->imp_gain = data; break; case GONGBEATER_STRIKE_GAIN: plugin->strike_gain = data; break; case GONGBEATER_STRIKE_DURATION: plugin->strike_duration = data; break; case GONGBEATER_INPUT: plugin->input = data; break; case GONGBEATER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateGongBeater( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { GongBeater *plugin_data = (GongBeater *)malloc(sizeof(GongBeater)); float fs; float imp_level; unsigned int running; float x; float xm; float y; float ym; #line 21 "gong_beater_1439.xml" running = 0; x = 0.5f; y = 0.0f; xm = 0.5f; ym = 0.0f; fs = (float)s_rate; imp_level = 0.0f; plugin_data->fs = fs; plugin_data->imp_level = imp_level; plugin_data->running = running; plugin_data->x = x; plugin_data->xm = xm; plugin_data->y = y; plugin_data->ym = ym; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runGongBeater(LADSPA_Handle instance, unsigned long sample_count) { GongBeater *plugin_data = (GongBeater *)instance; /* Impulse gain (dB) (float value) */ const LADSPA_Data imp_gain = *(plugin_data->imp_gain); /* Strike gain (dB) (float value) */ const LADSPA_Data strike_gain = *(plugin_data->strike_gain); /* Strike duration (s) (float value) */ const LADSPA_Data strike_duration = *(plugin_data->strike_duration); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float fs = plugin_data->fs; float imp_level = plugin_data->imp_level; unsigned int running = plugin_data->running; float x = plugin_data->x; float xm = plugin_data->xm; float y = plugin_data->y; float ym = plugin_data->ym; #line 39 "gong_beater_1439.xml" unsigned long pos; const float imp_amp = DB_CO(imp_gain); const float strike_amp = DB_CO(strike_gain); const float omega = 6.2831852f / (strike_duration * fs); pos = 0; while (pos < sample_count) { for (; !running && pos < sample_count; pos++) { if (fabs(input[pos]) > 0.05f) { running = strike_duration * fs; imp_level = fabs(input[pos]); } buffer_write(output[pos], input[pos] * imp_amp); } for (; running && pos < sample_count; pos++, running--) { if (fabs(input[pos]) > imp_level) { imp_level = fabs(input[pos]); } x -= omega * y; y += omega * x; xm -= omega * 0.5f * ym; ym += omega * 0.5f * xm; buffer_write(output[pos], input[pos] * imp_amp + y * strike_amp * imp_level * 4.0f * ym); } } plugin_data->x = x; plugin_data->y = y; plugin_data->xm = xm; plugin_data->ym = ym; plugin_data->running = running; plugin_data->imp_level = imp_level; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainGongBeater(LADSPA_Handle instance, LADSPA_Data gain) { ((GongBeater *)instance)->run_adding_gain = gain; } static void runAddingGongBeater(LADSPA_Handle instance, unsigned long sample_count) { GongBeater *plugin_data = (GongBeater *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Impulse gain (dB) (float value) */ const LADSPA_Data imp_gain = *(plugin_data->imp_gain); /* Strike gain (dB) (float value) */ const LADSPA_Data strike_gain = *(plugin_data->strike_gain); /* Strike duration (s) (float value) */ const LADSPA_Data strike_duration = *(plugin_data->strike_duration); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float fs = plugin_data->fs; float imp_level = plugin_data->imp_level; unsigned int running = plugin_data->running; float x = plugin_data->x; float xm = plugin_data->xm; float y = plugin_data->y; float ym = plugin_data->ym; #line 39 "gong_beater_1439.xml" unsigned long pos; const float imp_amp = DB_CO(imp_gain); const float strike_amp = DB_CO(strike_gain); const float omega = 6.2831852f / (strike_duration * fs); pos = 0; while (pos < sample_count) { for (; !running && pos < sample_count; pos++) { if (fabs(input[pos]) > 0.05f) { running = strike_duration * fs; imp_level = fabs(input[pos]); } buffer_write(output[pos], input[pos] * imp_amp); } for (; running && pos < sample_count; pos++, running--) { if (fabs(input[pos]) > imp_level) { imp_level = fabs(input[pos]); } x -= omega * y; y += omega * x; xm -= omega * 0.5f * ym; ym += omega * 0.5f * xm; buffer_write(output[pos], input[pos] * imp_amp + y * strike_amp * imp_level * 4.0f * ym); } } plugin_data->x = x; plugin_data->y = y; plugin_data->xm = xm; plugin_data->ym = ym; plugin_data->running = running; plugin_data->imp_level = imp_level; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif gongBeaterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (gongBeaterDescriptor) { gongBeaterDescriptor->UniqueID = 1439; gongBeaterDescriptor->Label = "gongBeater"; gongBeaterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; gongBeaterDescriptor->Name = D_("Gong beater"); gongBeaterDescriptor->Maker = "Steve Harris "; gongBeaterDescriptor->Copyright = "GPL"; gongBeaterDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); gongBeaterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); gongBeaterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); gongBeaterDescriptor->PortNames = (const char **)port_names; /* Parameters for Impulse gain (dB) */ port_descriptors[GONGBEATER_IMP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONGBEATER_IMP_GAIN] = D_("Impulse gain (dB)"); port_range_hints[GONGBEATER_IMP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[GONGBEATER_IMP_GAIN].LowerBound = -70; port_range_hints[GONGBEATER_IMP_GAIN].UpperBound = 0; /* Parameters for Strike gain (dB) */ port_descriptors[GONGBEATER_STRIKE_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONGBEATER_STRIKE_GAIN] = D_("Strike gain (dB)"); port_range_hints[GONGBEATER_STRIKE_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[GONGBEATER_STRIKE_GAIN].LowerBound = -70; port_range_hints[GONGBEATER_STRIKE_GAIN].UpperBound = 0; /* Parameters for Strike duration (s) */ port_descriptors[GONGBEATER_STRIKE_DURATION] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GONGBEATER_STRIKE_DURATION] = D_("Strike duration (s)"); port_range_hints[GONGBEATER_STRIKE_DURATION].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GONGBEATER_STRIKE_DURATION].LowerBound = 0.001; port_range_hints[GONGBEATER_STRIKE_DURATION].UpperBound = 0.2; /* Parameters for Input */ port_descriptors[GONGBEATER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[GONGBEATER_INPUT] = D_("Input"); port_range_hints[GONGBEATER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[GONGBEATER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GONGBEATER_OUTPUT] = D_("Output"); port_range_hints[GONGBEATER_OUTPUT].HintDescriptor = 0; gongBeaterDescriptor->activate = activateGongBeater; gongBeaterDescriptor->cleanup = cleanupGongBeater; gongBeaterDescriptor->connect_port = connectPortGongBeater; gongBeaterDescriptor->deactivate = NULL; gongBeaterDescriptor->instantiate = instantiateGongBeater; gongBeaterDescriptor->run = runGongBeater; gongBeaterDescriptor->run_adding = runAddingGongBeater; gongBeaterDescriptor->set_run_adding_gain = setRunAddingGainGongBeater; } } void __attribute__((destructor)) swh_fini() { if (gongBeaterDescriptor) { free((LADSPA_PortDescriptor *)gongBeaterDescriptor->PortDescriptors); free((char **)gongBeaterDescriptor->PortNames); free((LADSPA_PortRangeHint *)gongBeaterDescriptor->PortRangeHints); free(gongBeaterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/000077500000000000000000000000001247673406200200705ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/gsm/COPYRIGHT000066400000000000000000000012621247673406200213640ustar00rootroot00000000000000Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, Technische Universitaet Berlin Any use of this software is permitted provided that this notice is not removed and that neither the authors nor the Technische Universitaet Berlin are deemed to have made any representations as to the suitability of this software for any purpose nor are held responsible for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. As a matter of courtesy, the authors request to be informed about uses this software has found, about bugs in this software, and about any improvements that may be of general interest. Berlin, 28.11.1994 Jutta Degener Carsten Bormann lmms-1.1.3/plugins/LadspaEffect/swh/gsm/README000066400000000000000000000026201247673406200207500ustar00rootroot00000000000000GSM 06.10 13 kbit/s RPE/LTP speech codec ---------------------------------------- All the file in this directory were written by Jutta Degener and Carsten Borman for The Communications and Operating Systems Research Group (KBS) at the Technische Universitaet Berlin. Their work was released under the following license which is assumed to be compatible with The GNU Lesser General Public License. ---------------------------------------------------------------------------- Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, Technische Universitaet Berlin Any use of this software is permitted provided that this notice is not removed and that neither the authors nor the Technische Universitaet Berlin are deemed to have made any representations as to the suitability of this software for any purpose nor are held responsible for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. As a matter of courtesy, the authors request to be informed about uses this software has found, about bugs in this software, and about any improvements that may be of general interest. Berlin, 28.11.1994 Jutta Degener (jutta@cs.tu-berlin.de) Carsten Bormann (cabo@cs.tu-berlin.de) ---------------------------------------------------------------------------- Jutta Degener and Carsten Bormann's work can be found on their homepage at: http://kbs.cs.tu-berlin.de/~jutta/toast.html lmms-1.1.3/plugins/LadspaEffect/swh/gsm/add.c000066400000000000000000000132351247673406200207700ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/add.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ /* * See private.h for the more commonly used macro versions. */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" #define saturate(x) \ ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) word gsm_add P2((a,b), word a, word b) { longword sum = (longword)a + (longword)b; return saturate(sum); } word gsm_sub P2((a,b), word a, word b) { longword diff = (longword)a - (longword)b; return saturate(diff); } word gsm_mult P2((a,b), word a, word b) { if (a == MIN_WORD && b == MIN_WORD) return MAX_WORD; else return SASR( (longword)a * (longword)b, 15 ); } word gsm_mult_r P2((a,b), word a, word b) { if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD; else { longword prod = (longword)a * (longword)b + 16384; prod >>= 15; return prod & 0xFFFF; } } word gsm_abs P1((a), word a) { return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a; } longword gsm_L_mult P2((a,b),word a, word b) { assert( a != MIN_WORD || b != MIN_WORD ); return ((longword)a * (longword)b) << 1; } longword gsm_L_add P2((a,b), longword a, longword b) { if (a < 0) { if (b >= 0) return a + b; else { ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1); return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2; } } else if (b <= 0) return a + b; else { ulongword A = (ulongword)a + (ulongword)b; return A > MAX_LONGWORD ? MAX_LONGWORD : A; } } longword gsm_L_sub P2((a,b), longword a, longword b) { if (a >= 0) { if (b >= 0) return a - b; else { /* a>=0, b<0 */ ulongword A = (ulongword)a + -(b + 1); return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1); } } else if (b <= 0) return a - b; else { /* a<0, b>0 */ ulongword A = (ulongword)-(a + 1) + b; return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1; } } static unsigned char const bitoff[ 256 ] = { 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 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, 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 }; word gsm_norm P1((a), longword a ) /* * the number of left shifts needed to normalize the 32 bit * variable L_var1 for positive values on the interval * * with minimum of * minimum of 1073741824 (01000000000000000000000000000000) and * maximum of 2147483647 (01111111111111111111111111111111) * * * and for negative values on the interval with * minimum of -2147483648 (-10000000000000000000000000000000) and * maximum of -1073741824 ( -1000000000000000000000000000000). * * in order to normalize the result, the following * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); * * (That's 'ffs', only from the left, not the right..) */ { assert(a != 0); if (a < 0) { if (a <= -1073741824) return 0; a = ~a; } return a & 0xffff0000 ? ( a & 0xff000000 ? -1 + bitoff[ 0xFF & (a >> 24) ] : 7 + bitoff[ 0xFF & (a >> 16) ] ) : ( a & 0xff00 ? 15 + bitoff[ 0xFF & (a >> 8) ] : 23 + bitoff[ 0xFF & a ] ); } longword gsm_L_asl (longword a, int n) { if (n >= 32) return 0; if (n <= -32) return -(a < 0); if (n < 0) return gsm_L_asr(a, -n); return a << n; } word gsm_asr (word a, int n) { if (n >= 16) return -(a < 0); if (n <= -16) return 0; if (n < 0) return a << -n; # ifdef SASR return a >> n; # else if (a >= 0) return a >> n; else return -(word)( -(uword)a >> n ); # endif } word gsm_asl (word a, int n) { if (n >= 16) return 0; if (n <= -16) return -(a < 0); if (n < 0) return gsm_asr(a, -n); return a << n; } longword gsm_L_asr (longword a, int n) { if (n >= 32) return -(a < 0); if (n <= -32) return 0; if (n < 0) return a << -n; # ifdef SASR return a >> n; # else if (a >= 0) return a >> n; else return -(longword)( -(ulongword)a >> n ); # endif } /* ** word gsm_asr (word a, int n) ** { ** if (n >= 16) return -(a < 0); ** if (n <= -16) return 0; ** if (n < 0) return a << -n; ** ** # ifdef SASR ** return a >> n; ** # else ** if (a >= 0) return a >> n; ** else return -(word)( -(uword)a >> n ); ** # endif ** } ** */ /* * (From p. 46, end of section 4.2.5) * * NOTE: The following lines gives [sic] one correct implementation * of the div(num, denum) arithmetic operation. Compute div * which is the integer division of num by denum: with denum * >= num > 0 */ word gsm_div P2((num,denum), word num, word denum) { longword L_num = num; longword L_denum = denum; word div = 0; int k = 15; /* The parameter num sometimes becomes zero. * Although this is explicitly guarded against in 4.2.5, * we assume that the result should then be zero as well. */ /* assert(num != 0); */ assert(num >= 0 && denum >= num); if (num == 0) return 0; while (k--) { div <<= 1; L_num <<= 1; if (L_num >= L_denum) { L_num -= L_denum; div++; } } return div; } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/code.c000066400000000000000000000047731247673406200211610ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/code.c,v 1.2 2003/03/07 23:26:13 swh Exp $ */ #include "config.h" #include #ifdef HAS_STDLIB_H #include #else # include "proto.h" extern char * memcpy P((char *, char *, int)); #endif #include "private.h" #include "gsm.h" #include "proto.h" /* * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER */ void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc), struct gsm_state * S, word * s, /* [0..159] samples IN */ /* * The RPE-LTD coder works on a frame by frame basis. The length of * the frame is equal to 160 samples. Some computations are done * once per frame to produce at the output of the coder the * LARc[1..8] parameters which are the coded LAR coefficients and * also to realize the inverse filtering operation for the entire * frame (160 samples of signal d[0..159]). These parts produce at * the output of the coder: */ word * LARc, /* [0..7] LAR coefficients OUT */ /* * Procedure 4.2.11 to 4.2.18 are to be executed four times per * frame. That means once for each sub-segment RPE-LTP analysis of * 40 samples. These parts produce at the output of the coder: */ word * Nc, /* [0..3] LTP lag OUT */ word * bc, /* [0..3] coded LTP gain OUT */ word * Mc, /* [0..3] RPE grid selection OUT */ word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ word * xMc /* [13*4] normalized RPE samples OUT */ ) { int k; word * dp = S->dp0 + 120; /* [ -120...-1 ] */ word * dpp = dp; /* [ 0...39 ] */ static word e[50]; word so[160]; Gsm_Preprocess (S, s, so); Gsm_LPC_Analysis (S, so, LARc); Gsm_Short_Term_Analysis_Filter (S, LARc, so); for (k = 0; k <= 3; k++, xMc += 13) { Gsm_Long_Term_Predictor ( S, so+k*40, /* d [0..39] IN */ dp, /* dp [-120..-1] IN */ e + 5, /* e [0..39] OUT */ dpp, /* dpp [0..39] OUT */ Nc++, bc++); Gsm_RPE_Encoding ( S, e + 5, /* e ][0..39][ IN/OUT */ xmaxc++, Mc++, xMc ); /* * Gsm_Update_of_reconstructed_short_time_residual_signal * ( dpp, e + 5, dp ); */ { register int i; register longword ltmp; for (i = 0; i <= 39; i++) dp[ i ] = GSM_ADD( e[5 + i], dpp[i] ); } dp += 40; dpp += 40; } (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160), 120 * sizeof(*S->dp0) ); } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/config.h000066400000000000000000000025561247673406200215160ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /*$Header: /home/cvs/giga/ladspa-swh/gsm/config.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ #ifndef CONFIG_H #define CONFIG_H //*efine SIGHANDLER_T int /* signal handlers are void */ //*efine HAS_SYSV_SIGNAL 1 /* sigs not blocked/reset? */ #define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */ //*efine HAS_LIMITS_H 1 /* /usr/include/limits.h */ #define HAS_FCNTL_H 1 /* /usr/include/fcntl.h */ //*efine HAS_ERRNO_DECL 1 /* errno.h declares errno */ #define HAS_FSTAT 1 /* fstat syscall */ #define HAS_FCHMOD 1 /* fchmod syscall */ #define HAS_CHMOD 1 /* chmod syscall */ #define HAS_FCHOWN 1 /* fchown syscall */ #define HAS_CHOWN 1 /* chown syscall */ //*efine HAS__FSETMODE 1 /* _fsetmode -- set file mode */ #define HAS_STRING_H 1 /* /usr/include/string.h */ //*efine HAS_STRINGS_H 1 /* /usr/include/strings.h */ #define HAS_UNISTD_H 1 /* /usr/include/unistd.h */ #define HAS_UTIME 1 /* POSIX utime(path, times) */ //*efine HAS_UTIMES 1 /* use utimes() syscall instead */ #define HAS_UTIME_H 1 /* UTIME header file */ //*efine HAS_UTIMBUF 1 /* struct utimbuf */ //*efine HAS_UTIMEUSEC 1 /* microseconds in utimbuf? */ #endif /* CONFIG_H */ lmms-1.1.3/plugins/LadspaEffect/swh/gsm/decode.c000066400000000000000000000030251247673406200214570ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/decode.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include #include "private.h" #include "gsm.h" #include "proto.h" /* * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER */ static void Postprocessing P2((S,s), struct gsm_state * S, register word * s) { register int k; register word msr = S->msr; register longword ltmp; /* for GSM_ADD */ register word tmp; for (k = 160; k--; s++) { tmp = GSM_MULT_R( msr, 28180 ); msr = GSM_ADD(*s, tmp); /* Deemphasis */ *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */ } S->msr = msr; } void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s), struct gsm_state * S, word * LARcr, /* [0..7] IN */ word * Ncr, /* [0..3] IN */ word * bcr, /* [0..3] IN */ word * Mcr, /* [0..3] IN */ word * xmaxcr, /* [0..3] IN */ word * xMcr, /* [0..13*4] IN */ word * s) /* [0..159] OUT */ { int j, k; word erp[40], wt[160]; word * drp = S->dp0 + 120; for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp ); Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ]; } Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); Postprocessing(S, s); } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/gsm.h000066400000000000000000000032041247673406200210260ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /*$Header: /home/cvs/giga/ladspa-swh/gsm/gsm.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ #ifndef GSM_H #define GSM_H #ifdef __cplusplus # define NeedFunctionPrototypes 1 #endif #if __STDC__ # define NeedFunctionPrototypes 1 #endif #ifdef _NO_PROTO # undef NeedFunctionPrototypes #endif #ifdef NeedFunctionPrototypes # include /* for FILE * */ #endif #undef GSM_P #if NeedFunctionPrototypes # define GSM_P( protos ) protos #else # define GSM_P( protos ) ( /* protos */ ) #endif /* * Interface */ typedef struct gsm_state * gsm; typedef short gsm_signal; /* signed 16 bit */ typedef unsigned char gsm_byte; typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ #define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ #define GSM_PATCHLEVEL 10 #define GSM_MINOR 0 #define GSM_MAJOR 1 #define GSM_OPT_VERBOSE 1 #define GSM_OPT_FAST 2 #define GSM_OPT_LTP_CUT 3 #define GSM_OPT_WAV49 4 #define GSM_OPT_FRAME_INDEX 5 #define GSM_OPT_FRAME_CHAIN 6 extern gsm gsm_create GSM_P((void)); extern void gsm_destroy GSM_P((gsm)); extern int gsm_print GSM_P((FILE *, gsm, gsm_byte *)); extern int gsm_option GSM_P((gsm, int, int *)); extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *)); extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *)); extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *)); extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *)); #undef GSM_P #endif /* GSM_H */ lmms-1.1.3/plugins/LadspaEffect/swh/gsm/gsm_create.c000066400000000000000000000013241247673406200223450ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ #include "config.h" #ifdef HAS_STRING_H #include #else # include "proto.h" extern char * memset P((char *, int, int)); #endif #ifdef HAS_STDLIB_H # include #else # ifdef HAS_MALLOC_H # include # else extern char * malloc(); # endif #endif #include #include "gsm.h" #include "private.h" #include "proto.h" gsm gsm_create P0() { gsm r; r = (gsm)malloc(sizeof(struct gsm_state)); if (!r) return r; memset((char *)r, 0, sizeof(*r)); r->nrp = 40; return r; } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/gsm_decode.c000066400000000000000000000246351247673406200223370ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_decode.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include "private.h" #include "gsm.h" #include "proto.h" int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target) { word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; #ifdef WAV49 if (s->wav_fmt) { uword sr = 0; s->frame_index = !s->frame_index; if (s->frame_index) { sr = *c++; LARc[0] = sr & 0x3f; sr >>= 6; sr |= (uword)*c++ << 2; LARc[1] = sr & 0x3f; sr >>= 6; sr |= (uword)*c++ << 4; LARc[2] = sr & 0x1f; sr >>= 5; LARc[3] = sr & 0x1f; sr >>= 5; sr |= (uword)*c++ << 2; LARc[4] = sr & 0xf; sr >>= 4; LARc[5] = sr & 0xf; sr >>= 4; sr |= (uword)*c++ << 2; /* 5 */ LARc[6] = sr & 0x7; sr >>= 3; LARc[7] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; Nc[0] = sr & 0x7f; sr >>= 7; bc[0] = sr & 0x3; sr >>= 2; Mc[0] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[0] = sr & 0x3f; sr >>= 6; xmc[0] = sr & 0x7; sr >>= 3; sr = *c++; xmc[1] = sr & 0x7; sr >>= 3; xmc[2] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[3] = sr & 0x7; sr >>= 3; xmc[4] = sr & 0x7; sr >>= 3; xmc[5] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; /* 10 */ xmc[6] = sr & 0x7; sr >>= 3; xmc[7] = sr & 0x7; sr >>= 3; xmc[8] = sr & 0x7; sr >>= 3; sr = *c++; xmc[9] = sr & 0x7; sr >>= 3; xmc[10] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[11] = sr & 0x7; sr >>= 3; xmc[12] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; Nc[1] = sr & 0x7f; sr >>= 7; bc[1] = sr & 0x3; sr >>= 2; Mc[1] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[1] = sr & 0x3f; sr >>= 6; xmc[13] = sr & 0x7; sr >>= 3; sr = *c++; /* 15 */ xmc[14] = sr & 0x7; sr >>= 3; xmc[15] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[16] = sr & 0x7; sr >>= 3; xmc[17] = sr & 0x7; sr >>= 3; xmc[18] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[19] = sr & 0x7; sr >>= 3; xmc[20] = sr & 0x7; sr >>= 3; xmc[21] = sr & 0x7; sr >>= 3; sr = *c++; xmc[22] = sr & 0x7; sr >>= 3; xmc[23] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[24] = sr & 0x7; sr >>= 3; xmc[25] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; /* 20 */ Nc[2] = sr & 0x7f; sr >>= 7; bc[2] = sr & 0x3; sr >>= 2; Mc[2] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[2] = sr & 0x3f; sr >>= 6; xmc[26] = sr & 0x7; sr >>= 3; sr = *c++; xmc[27] = sr & 0x7; sr >>= 3; xmc[28] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[29] = sr & 0x7; sr >>= 3; xmc[30] = sr & 0x7; sr >>= 3; xmc[31] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[32] = sr & 0x7; sr >>= 3; xmc[33] = sr & 0x7; sr >>= 3; xmc[34] = sr & 0x7; sr >>= 3; sr = *c++; /* 25 */ xmc[35] = sr & 0x7; sr >>= 3; xmc[36] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[37] = sr & 0x7; sr >>= 3; xmc[38] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 4; Nc[3] = sr & 0x7f; sr >>= 7; bc[3] = sr & 0x3; sr >>= 2; Mc[3] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 1; xmaxc[3] = sr & 0x3f; sr >>= 6; xmc[39] = sr & 0x7; sr >>= 3; sr = *c++; xmc[40] = sr & 0x7; sr >>= 3; xmc[41] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; /* 30 */ xmc[42] = sr & 0x7; sr >>= 3; xmc[43] = sr & 0x7; sr >>= 3; xmc[44] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[45] = sr & 0x7; sr >>= 3; xmc[46] = sr & 0x7; sr >>= 3; xmc[47] = sr & 0x7; sr >>= 3; sr = *c++; xmc[48] = sr & 0x7; sr >>= 3; xmc[49] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[50] = sr & 0x7; sr >>= 3; xmc[51] = sr & 0x7; sr >>= 3; s->frame_chain = sr & 0xf; } else { sr = s->frame_chain; sr |= (uword)*c++ << 4; /* 1 */ LARc[0] = sr & 0x3f; sr >>= 6; LARc[1] = sr & 0x3f; sr >>= 6; sr = *c++; LARc[2] = sr & 0x1f; sr >>= 5; sr |= (uword)*c++ << 3; LARc[3] = sr & 0x1f; sr >>= 5; LARc[4] = sr & 0xf; sr >>= 4; sr |= (uword)*c++ << 2; LARc[5] = sr & 0xf; sr >>= 4; LARc[6] = sr & 0x7; sr >>= 3; LARc[7] = sr & 0x7; sr >>= 3; sr = *c++; /* 5 */ Nc[0] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; bc[0] = sr & 0x3; sr >>= 2; Mc[0] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[0] = sr & 0x3f; sr >>= 6; xmc[0] = sr & 0x7; sr >>= 3; xmc[1] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[2] = sr & 0x7; sr >>= 3; xmc[3] = sr & 0x7; sr >>= 3; xmc[4] = sr & 0x7; sr >>= 3; sr = *c++; xmc[5] = sr & 0x7; sr >>= 3; xmc[6] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; /* 10 */ xmc[7] = sr & 0x7; sr >>= 3; xmc[8] = sr & 0x7; sr >>= 3; xmc[9] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[10] = sr & 0x7; sr >>= 3; xmc[11] = sr & 0x7; sr >>= 3; xmc[12] = sr & 0x7; sr >>= 3; sr = *c++; Nc[1] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; bc[1] = sr & 0x3; sr >>= 2; Mc[1] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[1] = sr & 0x3f; sr >>= 6; xmc[13] = sr & 0x7; sr >>= 3; xmc[14] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; /* 15 */ xmc[15] = sr & 0x7; sr >>= 3; xmc[16] = sr & 0x7; sr >>= 3; xmc[17] = sr & 0x7; sr >>= 3; sr = *c++; xmc[18] = sr & 0x7; sr >>= 3; xmc[19] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[20] = sr & 0x7; sr >>= 3; xmc[21] = sr & 0x7; sr >>= 3; xmc[22] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[23] = sr & 0x7; sr >>= 3; xmc[24] = sr & 0x7; sr >>= 3; xmc[25] = sr & 0x7; sr >>= 3; sr = *c++; Nc[2] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; /* 20 */ bc[2] = sr & 0x3; sr >>= 2; Mc[2] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[2] = sr & 0x3f; sr >>= 6; xmc[26] = sr & 0x7; sr >>= 3; xmc[27] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[28] = sr & 0x7; sr >>= 3; xmc[29] = sr & 0x7; sr >>= 3; xmc[30] = sr & 0x7; sr >>= 3; sr = *c++; xmc[31] = sr & 0x7; sr >>= 3; xmc[32] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[33] = sr & 0x7; sr >>= 3; xmc[34] = sr & 0x7; sr >>= 3; xmc[35] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; /* 25 */ xmc[36] = sr & 0x7; sr >>= 3; xmc[37] = sr & 0x7; sr >>= 3; xmc[38] = sr & 0x7; sr >>= 3; sr = *c++; Nc[3] = sr & 0x7f; sr >>= 7; sr |= (uword)*c++ << 1; bc[3] = sr & 0x3; sr >>= 2; Mc[3] = sr & 0x3; sr >>= 2; sr |= (uword)*c++ << 5; xmaxc[3] = sr & 0x3f; sr >>= 6; xmc[39] = sr & 0x7; sr >>= 3; xmc[40] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[41] = sr & 0x7; sr >>= 3; xmc[42] = sr & 0x7; sr >>= 3; xmc[43] = sr & 0x7; sr >>= 3; sr = *c++; /* 30 */ xmc[44] = sr & 0x7; sr >>= 3; xmc[45] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 2; xmc[46] = sr & 0x7; sr >>= 3; xmc[47] = sr & 0x7; sr >>= 3; xmc[48] = sr & 0x7; sr >>= 3; sr |= (uword)*c++ << 1; xmc[49] = sr & 0x7; sr >>= 3; xmc[50] = sr & 0x7; sr >>= 3; xmc[51] = sr & 0x7; sr >>= 3; } } else #endif { /* GSM_MAGIC = (*c >> 4) & 0xF; */ if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; LARc[0] = (*c++ & 0xF) << 2; /* 1 */ LARc[0] |= (*c >> 6) & 0x3; LARc[1] = *c++ & 0x3F; LARc[2] = (*c >> 3) & 0x1F; LARc[3] = (*c++ & 0x7) << 2; LARc[3] |= (*c >> 6) & 0x3; LARc[4] = (*c >> 2) & 0xF; LARc[5] = (*c++ & 0x3) << 2; LARc[5] |= (*c >> 6) & 0x3; LARc[6] = (*c >> 3) & 0x7; LARc[7] = *c++ & 0x7; Nc[0] = (*c >> 1) & 0x7F; bc[0] = (*c++ & 0x1) << 1; bc[0] |= (*c >> 7) & 0x1; Mc[0] = (*c >> 5) & 0x3; xmaxc[0] = (*c++ & 0x1F) << 1; xmaxc[0] |= (*c >> 7) & 0x1; xmc[0] = (*c >> 4) & 0x7; xmc[1] = (*c >> 1) & 0x7; xmc[2] = (*c++ & 0x1) << 2; xmc[2] |= (*c >> 6) & 0x3; xmc[3] = (*c >> 3) & 0x7; xmc[4] = *c++ & 0x7; xmc[5] = (*c >> 5) & 0x7; xmc[6] = (*c >> 2) & 0x7; xmc[7] = (*c++ & 0x3) << 1; /* 10 */ xmc[7] |= (*c >> 7) & 0x1; xmc[8] = (*c >> 4) & 0x7; xmc[9] = (*c >> 1) & 0x7; xmc[10] = (*c++ & 0x1) << 2; xmc[10] |= (*c >> 6) & 0x3; xmc[11] = (*c >> 3) & 0x7; xmc[12] = *c++ & 0x7; Nc[1] = (*c >> 1) & 0x7F; bc[1] = (*c++ & 0x1) << 1; bc[1] |= (*c >> 7) & 0x1; Mc[1] = (*c >> 5) & 0x3; xmaxc[1] = (*c++ & 0x1F) << 1; xmaxc[1] |= (*c >> 7) & 0x1; xmc[13] = (*c >> 4) & 0x7; xmc[14] = (*c >> 1) & 0x7; xmc[15] = (*c++ & 0x1) << 2; xmc[15] |= (*c >> 6) & 0x3; xmc[16] = (*c >> 3) & 0x7; xmc[17] = *c++ & 0x7; xmc[18] = (*c >> 5) & 0x7; xmc[19] = (*c >> 2) & 0x7; xmc[20] = (*c++ & 0x3) << 1; xmc[20] |= (*c >> 7) & 0x1; xmc[21] = (*c >> 4) & 0x7; xmc[22] = (*c >> 1) & 0x7; xmc[23] = (*c++ & 0x1) << 2; xmc[23] |= (*c >> 6) & 0x3; xmc[24] = (*c >> 3) & 0x7; xmc[25] = *c++ & 0x7; Nc[2] = (*c >> 1) & 0x7F; bc[2] = (*c++ & 0x1) << 1; /* 20 */ bc[2] |= (*c >> 7) & 0x1; Mc[2] = (*c >> 5) & 0x3; xmaxc[2] = (*c++ & 0x1F) << 1; xmaxc[2] |= (*c >> 7) & 0x1; xmc[26] = (*c >> 4) & 0x7; xmc[27] = (*c >> 1) & 0x7; xmc[28] = (*c++ & 0x1) << 2; xmc[28] |= (*c >> 6) & 0x3; xmc[29] = (*c >> 3) & 0x7; xmc[30] = *c++ & 0x7; xmc[31] = (*c >> 5) & 0x7; xmc[32] = (*c >> 2) & 0x7; xmc[33] = (*c++ & 0x3) << 1; xmc[33] |= (*c >> 7) & 0x1; xmc[34] = (*c >> 4) & 0x7; xmc[35] = (*c >> 1) & 0x7; xmc[36] = (*c++ & 0x1) << 2; xmc[36] |= (*c >> 6) & 0x3; xmc[37] = (*c >> 3) & 0x7; xmc[38] = *c++ & 0x7; Nc[3] = (*c >> 1) & 0x7F; bc[3] = (*c++ & 0x1) << 1; bc[3] |= (*c >> 7) & 0x1; Mc[3] = (*c >> 5) & 0x3; xmaxc[3] = (*c++ & 0x1F) << 1; xmaxc[3] |= (*c >> 7) & 0x1; xmc[39] = (*c >> 4) & 0x7; xmc[40] = (*c >> 1) & 0x7; xmc[41] = (*c++ & 0x1) << 2; xmc[41] |= (*c >> 6) & 0x3; xmc[42] = (*c >> 3) & 0x7; xmc[43] = *c++ & 0x7; /* 30 */ xmc[44] = (*c >> 5) & 0x7; xmc[45] = (*c >> 2) & 0x7; xmc[46] = (*c++ & 0x3) << 1; xmc[46] |= (*c >> 7) & 0x1; xmc[47] = (*c >> 4) & 0x7; xmc[48] = (*c >> 1) & 0x7; xmc[49] = (*c++ & 0x1) << 2; xmc[49] |= (*c >> 6) & 0x3; xmc[50] = (*c >> 3) & 0x7; xmc[51] = *c & 0x7; /* 33 */ } Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target); return 0; } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/gsm_destroy.c000066400000000000000000000010541247673406200225730ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_destroy.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include "gsm.h" #include "config.h" #include "proto.h" #ifdef HAS_STDLIB_H # include #else # ifdef HAS_MALLOC_H # include # else extern void free(); # endif #endif void gsm_destroy P1((S), gsm S) { if (S) free((char *)S); } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/gsm_encode.c000066400000000000000000000262251247673406200223460ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_encode.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include "private.h" #include "gsm.h" #include "proto.h" void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) { word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); /* variable size GSM_MAGIC 4 LARc[0] 6 LARc[1] 6 LARc[2] 5 LARc[3] 5 LARc[4] 4 LARc[5] 4 LARc[6] 3 LARc[7] 3 Nc[0] 7 bc[0] 2 Mc[0] 2 xmaxc[0] 6 xmc[0] 3 xmc[1] 3 xmc[2] 3 xmc[3] 3 xmc[4] 3 xmc[5] 3 xmc[6] 3 xmc[7] 3 xmc[8] 3 xmc[9] 3 xmc[10] 3 xmc[11] 3 xmc[12] 3 Nc[1] 7 bc[1] 2 Mc[1] 2 xmaxc[1] 6 xmc[13] 3 xmc[14] 3 xmc[15] 3 xmc[16] 3 xmc[17] 3 xmc[18] 3 xmc[19] 3 xmc[20] 3 xmc[21] 3 xmc[22] 3 xmc[23] 3 xmc[24] 3 xmc[25] 3 Nc[2] 7 bc[2] 2 Mc[2] 2 xmaxc[2] 6 xmc[26] 3 xmc[27] 3 xmc[28] 3 xmc[29] 3 xmc[30] 3 xmc[31] 3 xmc[32] 3 xmc[33] 3 xmc[34] 3 xmc[35] 3 xmc[36] 3 xmc[37] 3 xmc[38] 3 Nc[3] 7 bc[3] 2 Mc[3] 2 xmaxc[3] 6 xmc[39] 3 xmc[40] 3 xmc[41] 3 xmc[42] 3 xmc[43] 3 xmc[44] 3 xmc[45] 3 xmc[46] 3 xmc[47] 3 xmc[48] 3 xmc[49] 3 xmc[50] 3 xmc[51] 3 */ #ifdef WAV49 if (s->wav_fmt) { s->frame_index = !s->frame_index; if (s->frame_index) { uword sr; sr = 0; sr = sr >> 6 | LARc[0] << 10; sr = sr >> 6 | LARc[1] << 10; *c++ = sr >> 4; sr = sr >> 5 | LARc[2] << 11; *c++ = sr >> 7; sr = sr >> 5 | LARc[3] << 11; sr = sr >> 4 | LARc[4] << 12; *c++ = sr >> 6; sr = sr >> 4 | LARc[5] << 12; sr = sr >> 3 | LARc[6] << 13; *c++ = sr >> 7; sr = sr >> 3 | LARc[7] << 13; sr = sr >> 7 | Nc[0] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[0] << 14; sr = sr >> 2 | Mc[0] << 14; sr = sr >> 6 | xmaxc[0] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[0] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[1] << 13; sr = sr >> 3 | xmc[2] << 13; sr = sr >> 3 | xmc[3] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[4] << 13; sr = sr >> 3 | xmc[5] << 13; sr = sr >> 3 | xmc[6] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[7] << 13; sr = sr >> 3 | xmc[8] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[9] << 13; sr = sr >> 3 | xmc[10] << 13; sr = sr >> 3 | xmc[11] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[12] << 13; sr = sr >> 7 | Nc[1] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[1] << 14; sr = sr >> 2 | Mc[1] << 14; sr = sr >> 6 | xmaxc[1] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[13] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[14] << 13; sr = sr >> 3 | xmc[15] << 13; sr = sr >> 3 | xmc[16] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[17] << 13; sr = sr >> 3 | xmc[18] << 13; sr = sr >> 3 | xmc[19] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[20] << 13; sr = sr >> 3 | xmc[21] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[22] << 13; sr = sr >> 3 | xmc[23] << 13; sr = sr >> 3 | xmc[24] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[25] << 13; sr = sr >> 7 | Nc[2] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[2] << 14; sr = sr >> 2 | Mc[2] << 14; sr = sr >> 6 | xmaxc[2] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[26] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[27] << 13; sr = sr >> 3 | xmc[28] << 13; sr = sr >> 3 | xmc[29] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[30] << 13; sr = sr >> 3 | xmc[31] << 13; sr = sr >> 3 | xmc[32] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[33] << 13; sr = sr >> 3 | xmc[34] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[35] << 13; sr = sr >> 3 | xmc[36] << 13; sr = sr >> 3 | xmc[37] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[38] << 13; sr = sr >> 7 | Nc[3] << 9; *c++ = sr >> 5; sr = sr >> 2 | bc[3] << 14; sr = sr >> 2 | Mc[3] << 14; sr = sr >> 6 | xmaxc[3] << 10; *c++ = sr >> 3; sr = sr >> 3 | xmc[39] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[40] << 13; sr = sr >> 3 | xmc[41] << 13; sr = sr >> 3 | xmc[42] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[43] << 13; sr = sr >> 3 | xmc[44] << 13; sr = sr >> 3 | xmc[45] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[46] << 13; sr = sr >> 3 | xmc[47] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[48] << 13; sr = sr >> 3 | xmc[49] << 13; sr = sr >> 3 | xmc[50] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[51] << 13; sr = sr >> 4; *c = sr >> 8; s->frame_chain = *c; } else { uword sr; sr = 0; sr = sr >> 4 | s->frame_chain << 12; sr = sr >> 6 | LARc[0] << 10; *c++ = sr >> 6; sr = sr >> 6 | LARc[1] << 10; *c++ = sr >> 8; sr = sr >> 5 | LARc[2] << 11; sr = sr >> 5 | LARc[3] << 11; *c++ = sr >> 6; sr = sr >> 4 | LARc[4] << 12; sr = sr >> 4 | LARc[5] << 12; *c++ = sr >> 6; sr = sr >> 3 | LARc[6] << 13; sr = sr >> 3 | LARc[7] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[0] << 9; sr = sr >> 2 | bc[0] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[0] << 14; sr = sr >> 6 | xmaxc[0] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[0] << 13; sr = sr >> 3 | xmc[1] << 13; sr = sr >> 3 | xmc[2] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[3] << 13; sr = sr >> 3 | xmc[4] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[5] << 13; sr = sr >> 3 | xmc[6] << 13; sr = sr >> 3 | xmc[7] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[8] << 13; sr = sr >> 3 | xmc[9] << 13; sr = sr >> 3 | xmc[10] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[11] << 13; sr = sr >> 3 | xmc[12] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[1] << 9; sr = sr >> 2 | bc[1] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[1] << 14; sr = sr >> 6 | xmaxc[1] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[13] << 13; sr = sr >> 3 | xmc[14] << 13; sr = sr >> 3 | xmc[15] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[16] << 13; sr = sr >> 3 | xmc[17] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[18] << 13; sr = sr >> 3 | xmc[19] << 13; sr = sr >> 3 | xmc[20] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[21] << 13; sr = sr >> 3 | xmc[22] << 13; sr = sr >> 3 | xmc[23] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[24] << 13; sr = sr >> 3 | xmc[25] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[2] << 9; sr = sr >> 2 | bc[2] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[2] << 14; sr = sr >> 6 | xmaxc[2] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[26] << 13; sr = sr >> 3 | xmc[27] << 13; sr = sr >> 3 | xmc[28] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[29] << 13; sr = sr >> 3 | xmc[30] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[31] << 13; sr = sr >> 3 | xmc[32] << 13; sr = sr >> 3 | xmc[33] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[34] << 13; sr = sr >> 3 | xmc[35] << 13; sr = sr >> 3 | xmc[36] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[37] << 13; sr = sr >> 3 | xmc[38] << 13; *c++ = sr >> 8; sr = sr >> 7 | Nc[3] << 9; sr = sr >> 2 | bc[3] << 14; *c++ = sr >> 7; sr = sr >> 2 | Mc[3] << 14; sr = sr >> 6 | xmaxc[3] << 10; *c++ = sr >> 7; sr = sr >> 3 | xmc[39] << 13; sr = sr >> 3 | xmc[40] << 13; sr = sr >> 3 | xmc[41] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[42] << 13; sr = sr >> 3 | xmc[43] << 13; *c++ = sr >> 8; sr = sr >> 3 | xmc[44] << 13; sr = sr >> 3 | xmc[45] << 13; sr = sr >> 3 | xmc[46] << 13; *c++ = sr >> 7; sr = sr >> 3 | xmc[47] << 13; sr = sr >> 3 | xmc[48] << 13; sr = sr >> 3 | xmc[49] << 13; *c++ = sr >> 6; sr = sr >> 3 | xmc[50] << 13; sr = sr >> 3 | xmc[51] << 13; *c++ = sr >> 8; } } else #endif /* WAV49 */ { *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ | ((LARc[0] >> 2) & 0xF); *c++ = ((LARc[0] & 0x3) << 6) | (LARc[1] & 0x3F); *c++ = ((LARc[2] & 0x1F) << 3) | ((LARc[3] >> 2) & 0x7); *c++ = ((LARc[3] & 0x3) << 6) | ((LARc[4] & 0xF) << 2) | ((LARc[5] >> 2) & 0x3); *c++ = ((LARc[5] & 0x3) << 6) | ((LARc[6] & 0x7) << 3) | (LARc[7] & 0x7); *c++ = ((Nc[0] & 0x7F) << 1) | ((bc[0] >> 1) & 0x1); *c++ = ((bc[0] & 0x1) << 7) | ((Mc[0] & 0x3) << 5) | ((xmaxc[0] >> 1) & 0x1F); *c++ = ((xmaxc[0] & 0x1) << 7) | ((xmc[0] & 0x7) << 4) | ((xmc[1] & 0x7) << 1) | ((xmc[2] >> 2) & 0x1); *c++ = ((xmc[2] & 0x3) << 6) | ((xmc[3] & 0x7) << 3) | (xmc[4] & 0x7); *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ | ((xmc[6] & 0x7) << 2) | ((xmc[7] >> 1) & 0x3); *c++ = ((xmc[7] & 0x1) << 7) | ((xmc[8] & 0x7) << 4) | ((xmc[9] & 0x7) << 1) | ((xmc[10] >> 2) & 0x1); *c++ = ((xmc[10] & 0x3) << 6) | ((xmc[11] & 0x7) << 3) | (xmc[12] & 0x7); *c++ = ((Nc[1] & 0x7F) << 1) | ((bc[1] >> 1) & 0x1); *c++ = ((bc[1] & 0x1) << 7) | ((Mc[1] & 0x3) << 5) | ((xmaxc[1] >> 1) & 0x1F); *c++ = ((xmaxc[1] & 0x1) << 7) | ((xmc[13] & 0x7) << 4) | ((xmc[14] & 0x7) << 1) | ((xmc[15] >> 2) & 0x1); *c++ = ((xmc[15] & 0x3) << 6) | ((xmc[16] & 0x7) << 3) | (xmc[17] & 0x7); *c++ = ((xmc[18] & 0x7) << 5) | ((xmc[19] & 0x7) << 2) | ((xmc[20] >> 1) & 0x3); *c++ = ((xmc[20] & 0x1) << 7) | ((xmc[21] & 0x7) << 4) | ((xmc[22] & 0x7) << 1) | ((xmc[23] >> 2) & 0x1); *c++ = ((xmc[23] & 0x3) << 6) | ((xmc[24] & 0x7) << 3) | (xmc[25] & 0x7); *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ | ((bc[2] >> 1) & 0x1); *c++ = ((bc[2] & 0x1) << 7) | ((Mc[2] & 0x3) << 5) | ((xmaxc[2] >> 1) & 0x1F); *c++ = ((xmaxc[2] & 0x1) << 7) | ((xmc[26] & 0x7) << 4) | ((xmc[27] & 0x7) << 1) | ((xmc[28] >> 2) & 0x1); *c++ = ((xmc[28] & 0x3) << 6) | ((xmc[29] & 0x7) << 3) | (xmc[30] & 0x7); *c++ = ((xmc[31] & 0x7) << 5) | ((xmc[32] & 0x7) << 2) | ((xmc[33] >> 1) & 0x3); *c++ = ((xmc[33] & 0x1) << 7) | ((xmc[34] & 0x7) << 4) | ((xmc[35] & 0x7) << 1) | ((xmc[36] >> 2) & 0x1); *c++ = ((xmc[36] & 0x3) << 6) | ((xmc[37] & 0x7) << 3) | (xmc[38] & 0x7); *c++ = ((Nc[3] & 0x7F) << 1) | ((bc[3] >> 1) & 0x1); *c++ = ((bc[3] & 0x1) << 7) | ((Mc[3] & 0x3) << 5) | ((xmaxc[3] >> 1) & 0x1F); *c++ = ((xmaxc[3] & 0x1) << 7) | ((xmc[39] & 0x7) << 4) | ((xmc[40] & 0x7) << 1) | ((xmc[41] >> 2) & 0x1); *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ | ((xmc[42] & 0x7) << 3) | (xmc[43] & 0x7); *c++ = ((xmc[44] & 0x7) << 5) | ((xmc[45] & 0x7) << 2) | ((xmc[46] >> 1) & 0x3); *c++ = ((xmc[46] & 0x1) << 7) | ((xmc[47] & 0x7) << 4) | ((xmc[48] & 0x7) << 1) | ((xmc[49] >> 2) & 0x1); *c++ = ((xmc[49] & 0x3) << 6) | ((xmc[50] & 0x7) << 3) | (xmc[51] & 0x7); } } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/gsm_option.c000066400000000000000000000022501247673406200224110ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/gsm_option.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include "private.h" #include "gsm.h" #include "proto.h" int gsm_option P3((r, opt, val), gsm r, int opt, int * val) { int result = -1; switch (opt) { case GSM_OPT_LTP_CUT: #ifdef LTP_CUT result = r->ltp_cut; if (val) r->ltp_cut = *val; #endif break; case GSM_OPT_VERBOSE: #ifndef NDEBUG result = r->verbose; if (val) r->verbose = *val; #endif break; case GSM_OPT_FAST: #if defined(FAST) && defined(USE_FLOAT_MUL) result = r->fast; if (val) r->fast = !!*val; #endif break; case GSM_OPT_FRAME_CHAIN: #ifdef WAV49 result = r->frame_chain; if (val) r->frame_chain = *val; #endif break; case GSM_OPT_FRAME_INDEX: #ifdef WAV49 result = r->frame_index; if (val) r->frame_index = *val; #endif break; case GSM_OPT_WAV49: #ifdef WAV49 result = r->wav_fmt; if (val) r->wav_fmt = !!*val; #endif break; default: break; } return result; } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/long_term.c000066400000000000000000000560261247673406200222330ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/long_term.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION */ /* * This module computes the LTP gain (bc) and the LTP lag (Nc) * for the long term analysis filter. This is done by calculating a * maximum of the cross-correlation function between the current * sub-segment short term residual signal d[0..39] (output of * the short term analysis filter; for simplification the index * of this array begins at 0 and ends at 39 for each sub-segment of the * RPE-LTP analysis) and the previous reconstructed short term * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be * performed to avoid overflow. */ /* The next procedure exists in six versions. First two integer * version (if USE_FLOAT_MUL is not defined); then four floating * point versions, twice with proper scaling (USE_FLOAT_MUL defined), * once without (USE_FLOAT_MUL and FAST defined, and fast run-time * option used). Every pair has first a Cut version (see the -C * option to toast or the LTP_CUT option to gsm_option()), then the * uncut one. (For a detailed explanation of why this is altogether * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered * Harmful''.) */ #ifndef USE_FLOAT_MUL #ifdef LTP_CUT static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), struct gsm_state * st, register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; word wt[40]; longword L_result; longword L_max, L_power; word R, S, dmax, scal, best_k; word ltp_cut; register word temp, wt_k; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) { dmax = temp; best_k = k; } } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ wt_k = SASR(d[best_k], scal); for (lambda = 40; lambda <= 120; lambda++) { L_result = (longword)wt_k * dp[best_k - lambda]; if (L_result > L_max) { Nc = lambda; L_max = L_result; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #endif /* LTP_CUT */ static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; word wt[40]; longword L_max, L_power; word R, S, dmax, scal; register word temp; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) dmax = temp; } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); /* Initialization of a working array wt */ for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal ); /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda++) { # undef STEP # define STEP(k) (longword)wt[k] * dp[k - lambda] register longword L_result; L_result = STEP(0) ; L_result += STEP(1) ; L_result += STEP(2) ; L_result += STEP(3) ; L_result += STEP(4) ; L_result += STEP(5) ; L_result += STEP(6) ; L_result += STEP(7) ; L_result += STEP(8) ; L_result += STEP(9) ; L_result += STEP(10) ; L_result += STEP(11) ; L_result += STEP(12) ; L_result += STEP(13) ; L_result += STEP(14) ; L_result += STEP(15) ; L_result += STEP(16) ; L_result += STEP(17) ; L_result += STEP(18) ; L_result += STEP(19) ; L_result += STEP(20) ; L_result += STEP(21) ; L_result += STEP(22) ; L_result += STEP(23) ; L_result += STEP(24) ; L_result += STEP(25) ; L_result += STEP(26) ; L_result += STEP(27) ; L_result += STEP(28) ; L_result += STEP(29) ; L_result += STEP(30) ; L_result += STEP(31) ; L_result += STEP(32) ; L_result += STEP(33) ; L_result += STEP(34) ; L_result += STEP(35) ; L_result += STEP(36) ; L_result += STEP(37) ; L_result += STEP(38) ; L_result += STEP(39) ; if (L_result > L_max) { Nc = lambda; L_max = L_result; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #else /* USE_FLOAT_MUL */ #ifdef LTP_CUT static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), struct gsm_state * st, /* IN */ register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; word ltp_cut; float wt_float[40]; float dp_float_base[120], * dp_float = dp_float_base + 120; longword L_max, L_power; word R, S, dmax, scal; register word temp; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) dmax = temp; } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); ltp_cut = (longword)SASR(dmax, scal) * st->ltp_cut / 100; /* Initialization of a working array wt */ for (k = 0; k < 40; k++) { register word w = SASR( d[k], scal ); if (w < 0 ? w > -ltp_cut : w < ltp_cut) { wt_float[k] = 0.0; } else { wt_float[k] = w; } } for (k = -120; k < 0; k++) dp_float[k] = dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda += 9) { /* Calculate L_result for l = lambda .. lambda + 9. */ register float *lp = dp_float - lambda; register float W; register float a = lp[-8], b = lp[-7], c = lp[-6], d = lp[-5], e = lp[-4], f = lp[-3], g = lp[-2], h = lp[-1]; register float E; register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0; # undef STEP # define STEP(K, a, b, c, d, e, f, g, h) \ if ((W = wt_float[K]) != 0.0) { \ E = W * a; S8 += E; \ E = W * b; S7 += E; \ E = W * c; S6 += E; \ E = W * d; S5 += E; \ E = W * e; S4 += E; \ E = W * f; S3 += E; \ E = W * g; S2 += E; \ E = W * h; S1 += E; \ a = lp[K]; \ E = W * a; S0 += E; } else (a = lp[K]) # define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) # define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) # define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) # define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) # define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) # define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) # define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) # define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); if (S0 > L_max) { L_max = S0; Nc = lambda; } if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #endif /* LTP_CUT */ static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; float wt_float[40]; float dp_float_base[120], * dp_float = dp_float_base + 120; longword L_max, L_power; word R, S, dmax, scal; register word temp; /* Search of the optimum scaling of d[0..39]. */ dmax = 0; for (k = 0; k <= 39; k++) { temp = d[k]; temp = GSM_ABS( temp ); if (temp > dmax) dmax = temp; } temp = 0; if (dmax == 0) scal = 0; else { assert(dmax > 0); temp = gsm_norm( (longword)dmax << 16 ); } if (temp > 6) scal = 0; else scal = 6 - temp; assert(scal >= 0); /* Initialization of a working array wt */ for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal ); for (k = -120; k < 0; k++) dp_float[k] = dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda += 9) { /* Calculate L_result for l = lambda .. lambda + 9. */ register float *lp = dp_float - lambda; register float W; register float a = lp[-8], b = lp[-7], c = lp[-6], d = lp[-5], e = lp[-4], f = lp[-3], g = lp[-2], h = lp[-1]; register float E; register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0; # undef STEP # define STEP(K, a, b, c, d, e, f, g, h) \ W = wt_float[K]; \ E = W * a; S8 += E; \ E = W * b; S7 += E; \ E = W * c; S6 += E; \ E = W * d; S5 += E; \ E = W * e; S4 += E; \ E = W * f; S3 += E; \ E = W * g; S2 += E; \ E = W * h; S1 += E; \ a = lp[K]; \ E = W * a; S0 += E # define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) # define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) # define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) # define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) # define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) # define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) # define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) # define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); if (S0 > L_max) { L_max = S0; Nc = lambda; } if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } } *Nc_out = Nc; L_max <<= 1; /* Rescaling of L_max */ assert(scal <= 100 && scal >= -100); L_max = L_max >> (6 - scal); /* sub(6, scal) */ assert( Nc <= 120 && Nc >= 40); /* Compute the power of the reconstructed short term residual * signal dp[..] */ L_power = 0; for (k = 0; k <= 39; k++) { register longword L_temp; L_temp = SASR( dp[k - Nc], 3 ); L_power += L_temp * L_temp; } L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ if (L_max <= 0) { *bc_out = 0; return; } if (L_max >= L_power) { *bc_out = 3; return; } temp = gsm_norm( L_power ); R = SASR( L_max << temp, 16 ); S = SASR( L_power << temp, 16 ); /* Coding of the LTP gain */ /* Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; *bc_out = bc; } #ifdef FAST #ifdef LTP_CUT static void Cut_Fast_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), struct gsm_state * st, /* IN */ register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; register float wt_float; word Nc, bc; word wt_max, best_k, ltp_cut; float dp_float_base[120], * dp_float = dp_float_base + 120; register float L_result, L_max, L_power; wt_max = 0; for (k = 0; k < 40; ++k) { if ( d[k] > wt_max) wt_max = d[best_k = k]; else if (-d[k] > wt_max) wt_max = -d[best_k = k]; } assert(wt_max >= 0); wt_float = (float)wt_max; for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda++) { L_result = wt_float * dp_float[best_k - lambda]; if (L_result > L_max) { Nc = lambda; L_max = L_result; } } *Nc_out = Nc; if (L_max <= 0.) { *bc_out = 0; return; } /* Compute the power of the reconstructed short term residual * signal dp[..] */ dp_float -= Nc; L_power = 0; for (k = 0; k < 40; ++k) { register float f = dp_float[k]; L_power += f * f; } if (L_max >= L_power) { *bc_out = 3; return; } /* Coding of the LTP gain * Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ lambda = L_max / L_power * 32768.; for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; *bc_out = bc; } #endif /* LTP_CUT */ static void Fast_Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), register word * d, /* [0..39] IN */ register word * dp, /* [-120..-1] IN */ word * bc_out, /* OUT */ word * Nc_out /* OUT */ ) { register int k, lambda; word Nc, bc; float wt_float[40]; float dp_float_base[120], * dp_float = dp_float_base + 120; register float L_max, L_power; for (k = 0; k < 40; ++k) wt_float[k] = (float)d[k]; for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; Nc = 40; /* index for the maximum cross-correlation */ for (lambda = 40; lambda <= 120; lambda += 9) { /* Calculate L_result for l = lambda .. lambda + 9. */ register float *lp = dp_float - lambda; register float W; register float a = lp[-8], b = lp[-7], c = lp[-6], d = lp[-5], e = lp[-4], f = lp[-3], g = lp[-2], h = lp[-1]; register float E; register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0; # undef STEP # define STEP(K, a, b, c, d, e, f, g, h) \ W = wt_float[K]; \ E = W * a; S8 += E; \ E = W * b; S7 += E; \ E = W * c; S6 += E; \ E = W * d; S5 += E; \ E = W * e; S4 += E; \ E = W * f; S3 += E; \ E = W * g; S2 += E; \ E = W * h; S1 += E; \ a = lp[K]; \ E = W * a; S0 += E # define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) # define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) # define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) # define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) # define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) # define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) # define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) # define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); if (S0 > L_max) { L_max = S0; Nc = lambda; } if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } } *Nc_out = Nc; if (L_max <= 0.) { *bc_out = 0; return; } /* Compute the power of the reconstructed short term residual * signal dp[..] */ dp_float -= Nc; L_power = 0; for (k = 0; k < 40; ++k) { register float f = dp_float[k]; L_power += f * f; } if (L_max >= L_power) { *bc_out = 3; return; } /* Coding of the LTP gain * Table 4.3a must be used to obtain the level DLB[i] for the * quantization of the LTP gain b to get the coded version bc. */ lambda = L_max / L_power * 32768.; for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; *bc_out = bc; } #endif /* FAST */ #endif /* USE_FLOAT_MUL */ /* 4.2.12 */ static void Long_term_analysis_filtering P6((bc,Nc,dp,d,dpp,e), word bc, /* IN */ word Nc, /* IN */ register word * dp, /* previous d [-120..-1] IN */ register word * d, /* d [0..39] IN */ register word * dpp, /* estimate [0..39] OUT */ register word * e /* long term res. signal [0..39] OUT */ ) /* * In this part, we have to decode the bc parameter to compute * the samples of the estimate dpp[0..39]. The decoding of bc needs the * use of table 4.3b. The long term residual signal e[0..39] * is then calculated to be fed to the RPE encoding section. */ { register int k; register longword ltmp; # undef STEP # define STEP(BP) \ for (k = 0; k <= 39; k++) { \ dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \ e[k] = GSM_SUB( d[k], dpp[k] ); \ } switch (bc) { case 0: STEP( 3277 ); break; case 1: STEP( 11469 ); break; case 2: STEP( 21299 ); break; case 3: STEP( 32767 ); break; } } void Gsm_Long_Term_Predictor P7((S,d,dp,e,dpp,Nc,bc), /* 4x for 160 samples */ struct gsm_state * S, word * d, /* [0..39] residual signal IN */ word * dp, /* [-120..-1] d' IN */ word * e, /* [0..39] OUT */ word * dpp, /* [0..39] OUT */ word * Nc, /* correlation lag OUT */ word * bc /* gain factor OUT */ ) { assert( d ); assert( dp ); assert( e ); assert( dpp); assert( Nc ); assert( bc ); #if defined(FAST) && defined(USE_FLOAT_MUL) if (S->fast) #if defined (LTP_CUT) if (S->ltp_cut) Cut_Fast_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); else #endif /* LTP_CUT */ Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc ); else #endif /* FAST & USE_FLOAT_MUL */ #ifdef LTP_CUT if (S->ltp_cut) Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); else #endif Calculation_of_the_LTP_parameters(d, dp, bc, Nc); Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e ); } /* 4.3.2 */ void Gsm_Long_Term_Synthesis_Filtering P5((S,Ncr,bcr,erp,drp), struct gsm_state * S, word Ncr, word bcr, register word * erp, /* [0..39] IN */ register word * drp /* [-120..-1] IN, [-120..40] OUT */ ) /* * This procedure uses the bcr and Ncr parameter to realize the * long term synthesis filtering. The decoding of bcr needs * table 4.3b. */ { register longword ltmp; /* for ADD */ register int k; word brp, drpp, Nr; /* Check the limits of Nr. */ Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr; S->nrp = Nr; assert(Nr >= 40 && Nr <= 120); /* Decoding of the LTP gain bcr */ brp = gsm_QLB[ bcr ]; /* Computation of the reconstructed short term residual * signal drp[0..39] */ assert(brp != MIN_WORD); for (k = 0; k <= 39; k++) { drpp = GSM_MULT_R( brp, drp[ k - Nr ] ); drp[k] = GSM_ADD( erp[k], drpp ); } /* * Update of the reconstructed short term residual signal * drp[ -1..-120 ] */ for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ]; } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/lpc.c000066400000000000000000000156441247673406200210240ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/lpc.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" #undef P /* * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION */ /* 4.2.4 */ static void Autocorrelation P2((s, L_ACF), word * s, /* [0..159] IN/OUT */ longword * L_ACF) /* [0..8] OUT */ /* * The goal is to compute the array L_ACF[k]. The signal s[i] must * be scaled in order to avoid an overflow situation. */ { register int k, i; word temp, smax, scalauto; #ifdef USE_FLOAT_MUL float float_s[160]; #endif /* Dynamic scaling of the array s[0..159] */ /* Search for the maximum. */ smax = 0; for (k = 0; k <= 159; k++) { temp = GSM_ABS( s[k] ); if (temp > smax) smax = temp; } /* Computation of the scaling factor. */ if (smax == 0) scalauto = 0; else { assert(smax > 0); scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */ } /* Scaling of the array s[0...159] */ if (scalauto > 0) { # ifdef USE_FLOAT_MUL # define SCALE(n) \ case n: for (k = 0; k <= 159; k++) \ float_s[k] = (float) \ (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\ break; # else # define SCALE(n) \ case n: for (k = 0; k <= 159; k++) \ s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\ break; # endif /* USE_FLOAT_MUL */ switch (scalauto) { SCALE(1) SCALE(2) SCALE(3) SCALE(4) } # undef SCALE } # ifdef USE_FLOAT_MUL else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k]; # endif /* Compute the L_ACF[..]. */ { # ifdef USE_FLOAT_MUL register float * sp = float_s; register float sl = *sp; # define STEP(k) L_ACF[k] += (longword)(sl * sp[ -(k) ]); # else word * sp = s; word sl = *sp; # define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]); # endif # define NEXTI sl = *++sp for (k = 9; k--; L_ACF[k] = 0) ; STEP (0); NEXTI; STEP(0); STEP(1); NEXTI; STEP(0); STEP(1); STEP(2); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); for (i = 8; i <= 159; i++) { NEXTI; STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); STEP(8); } for (k = 9; k--; L_ACF[k] <<= 1) ; } /* Rescaling of the array s[0..159] */ if (scalauto > 0) { assert(scalauto <= 4); for (k = 160; k--; *s++ <<= scalauto) ; } } #if defined(USE_FLOAT_MUL) && defined(FAST) static void Fast_Autocorrelation P2((s, L_ACF), word * s, /* [0..159] IN/OUT */ longword * L_ACF) /* [0..8] OUT */ { register int k, i; float f_L_ACF[9]; float scale; float s_f[160]; register float *sf = s_f; for (i = 0; i < 160; ++i) sf[i] = s[i]; for (k = 0; k <= 8; k++) { register float L_temp2 = 0; register float *sfl = sf - k; for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i]; f_L_ACF[k] = L_temp2; } scale = MAX_LONGWORD / f_L_ACF[0]; for (k = 0; k <= 8; k++) { L_ACF[k] = f_L_ACF[k] * scale; } } #endif /* defined (USE_FLOAT_MUL) && defined (FAST) */ /* 4.2.5 */ static void Reflection_coefficients P2( (L_ACF, r), longword * L_ACF, /* 0...8 IN */ register word * r /* 0...7 OUT */ ) { register int i, m, n; register word temp; register longword ltmp; word ACF[9]; /* 0..8 */ word P[ 9]; /* 0..8 */ word K[ 9]; /* 2..8 */ /* Schur recursion with 16 bits arithmetic. */ if (L_ACF[0] == 0) { for (i = 8; i--; *r++ = 0) ; return; } assert( L_ACF[0] != 0 ); temp = gsm_norm( L_ACF[0] ); assert(temp >= 0 && temp < 32); /* ? overflow ? */ for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 ); /* Initialize array P[..] and K[..] for the recursion. */ for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ]; for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ]; /* Compute reflection coefficients */ for (n = 1; n <= 8; n++, r++) { temp = P[1]; temp = GSM_ABS(temp); if (P[0] < temp) { for (i = n; i <= 8; i++) *r++ = 0; return; } *r = gsm_div( temp, P[0] ); assert(*r >= 0); if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */ assert (*r != MIN_WORD); if (n == 8) return; /* Schur recursion */ temp = GSM_MULT_R( P[1], *r ); P[0] = GSM_ADD( P[0], temp ); for (m = 1; m <= 8 - n; m++) { temp = GSM_MULT_R( K[ m ], *r ); P[m] = GSM_ADD( P[ m+1 ], temp ); temp = GSM_MULT_R( P[ m+1 ], *r ); K[m] = GSM_ADD( K[ m ], temp ); } } } /* 4.2.6 */ static void Transformation_to_Log_Area_Ratios P1((r), register word * r /* 0..7 IN/OUT */ ) /* * The following scaling for r[..] and LAR[..] has been used: * * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1. * LAR[..] = integer( real_LAR[..] * 16384 ); * with -1.625 <= real_LAR <= 1.625 */ { register word temp; register int i; /* Computation of the LAR[0..7] from the r[0..7] */ for (i = 1; i <= 8; i++, r++) { temp = *r; temp = GSM_ABS(temp); assert(temp >= 0); if (temp < 22118) { temp >>= 1; } else if (temp < 31130) { assert( temp >= 11059 ); temp -= 11059; } else { assert( temp >= 26112 ); temp -= 26112; temp <<= 2; } *r = *r < 0 ? -temp : temp; assert( *r != MIN_WORD ); } } /* 4.2.7 */ static void Quantization_and_coding P1((LAR), register word * LAR /* [0..7] IN/OUT */ ) { register word temp; longword ltmp; /* This procedure needs four tables; the following equations * give the optimum scaling for the constants: * * A[0..7] = integer( real_A[0..7] * 1024 ) * B[0..7] = integer( real_B[0..7] * 512 ) * MAC[0..7] = maximum of the LARc[0..7] * MIC[0..7] = minimum of the LARc[0..7] */ # undef STEP # define STEP( A, B, MAC, MIC ) \ temp = GSM_MULT( A, *LAR ); \ temp = GSM_ADD( temp, B ); \ temp = GSM_ADD( temp, 256 ); \ temp = SASR( temp, 9 ); \ *LAR = temp>MAC ? MAC - MIC : (tempfast) Fast_Autocorrelation (s, L_ACF ); else #endif Autocorrelation (s, L_ACF ); Reflection_coefficients (L_ACF, LARc ); Transformation_to_Log_Area_Ratios (LARc); Quantization_and_coding (LARc); } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/preprocess.c000066400000000000000000000047041247673406200224260ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/preprocess.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* 4.2.0 .. 4.2.3 PREPROCESSING SECTION * * After A-law to linear conversion (or directly from the * Ato D converter) the following scaling is assumed for * input to the RPE-LTP algorithm: * * in: 0.1.....................12 * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.* * * Where S is the sign bit, v a valid bit, and * a "don't care" bit. * The original signal is called sop[..] * * out: 0.1................... 12 * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 */ void Gsm_Preprocess P3((S, s, so), struct gsm_state * S, word * s, word * so ) /* [0..159] IN/OUT */ { word z1 = S->z1; longword L_z2 = S->L_z2; word mp = S->mp; word s1; longword L_s2; longword L_temp; word msp, lsp; word SO; longword ltmp; /* for ADD */ ulongword utmp; /* for L_ADD */ register int k = 160; while (k--) { /* 4.2.1 Downscaling of the input signal */ SO = SASR( *s, 3 ) << 2; s++; assert (SO >= -0x4000); /* downscaled by */ assert (SO <= 0x3FFC); /* previous routine. */ /* 4.2.2 Offset compensation * * This part implements a high-pass filter and requires extended * arithmetic precision for the recursive part of this filter. * The input of this procedure is the array so[0...159] and the * output the array sof[ 0...159 ]. */ /* Compute the non-recursive part */ s1 = SO - z1; /* s1 = gsm_sub( *so, z1 ); */ z1 = SO; assert(s1 != MIN_WORD); /* Compute the recursive part */ L_s2 = s1; L_s2 <<= 15; /* Execution of a 31 bv 16 bits multiplication */ msp = SASR( L_z2, 15 ); lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */ L_s2 += GSM_MULT_R( lsp, 32735 ); L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ L_z2 = GSM_L_ADD( L_temp, L_s2 ); /* Compute sof[k] with rounding */ L_temp = GSM_L_ADD( L_z2, 16384 ); /* 4.2.3 Preemphasis */ msp = GSM_MULT_R( mp, -28180 ); mp = SASR( L_temp, 15 ); *so++ = GSM_ADD( mp, msp ); } S->z1 = z1; S->L_z2 = L_z2; S->mp = mp; } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/private.h000066400000000000000000000173401247673406200217200ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /*$Header: /home/cvs/giga/ladspa-swh/gsm/private.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ #ifndef PRIVATE_H #define PRIVATE_H /* Added by Erik de Castro Lopo */ #define NeedFunctionPrototypes 1 #define SASR #define USE_FLOAT_MUL #define FAST #define WAV49 /* Added by Erik de Castro Lopo */ typedef short word; /* 16 bit signed int */ typedef int longword; /* 32 bit signed int */ typedef unsigned short uword; /* unsigned word */ typedef unsigned int ulongword; /* unsigned longword */ struct gsm_state { word dp0[ 280 ]; word z1; /* preprocessing.c, Offset_com. */ longword L_z2; /* Offset_com. */ int mp; /* Preemphasis */ word u[8]; /* short_term_aly_filter.c */ word LARpp[2][8]; /* */ word j; /* */ word ltp_cut; /* long_term.c, LTP crosscorr. */ word nrp; /* 40 */ /* long_term.c, synthesis */ word v[9]; /* short_term.c, synthesis */ word msr; /* decoder.c, Postprocessing */ char verbose; /* only used if !NDEBUG */ char fast; /* only used if FAST */ char wav_fmt; /* only used if WAV49 defined */ unsigned char frame_index; /* odd/even chaining */ unsigned char frame_chain; /* half-byte to carry forward */ }; #define MIN_WORD (-32767 - 1) #define MAX_WORD 32767 #define MIN_LONGWORD (-2147483647 - 1) #define MAX_LONGWORD 2147483647 #ifdef SASR /* flag: >> is a signed arithmetic shift right */ #undef SASR #define SASR(x, by) ((x) >> (by)) #else #define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by)))) #endif /* SASR */ #include "proto.h" /* * Prototypes from add.c */ extern word gsm_mult (word a, word b); extern longword gsm_L_mult (word a, word b); extern word gsm_mult_r (word a, word b); extern word gsm_div (word num, word denum); extern word gsm_add (word a, word b ); extern longword gsm_L_add (longword a, longword b ); extern word gsm_sub (word a, word b); extern longword gsm_L_sub (longword a, longword b); extern word gsm_abs (word a); extern word gsm_norm (longword a ); extern longword gsm_L_asl (longword a, int n); extern word gsm_asl (word a, int n); extern longword gsm_L_asr (longword a, int n); extern word gsm_asr (word a, int n); /* * Inlined functions from add.h */ /* * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \ * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15)) */ #define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) # define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ (SASR( ((longword)(a) * (longword)(b)), 15 )) # define GSM_L_MULT(a, b) /* word a, word b */ \ (((longword)(a) * (longword)(b)) << 1) # define GSM_L_ADD(a, b) \ ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ : ((b) <= 0 ? (a) + (b) \ : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \ ? MAX_LONGWORD : utmp)) /* * # define GSM_ADD(a, b) \ * ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \ * ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) */ /* Nonportable, but faster: */ #define GSM_ADD(a, b) \ ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) # define GSM_SUB(a, b) \ ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) # define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) /* Use these if necessary: # define GSM_MULT_R(a, b) gsm_mult_r(a, b) # define GSM_MULT(a, b) gsm_mult(a, b) # define GSM_L_MULT(a, b) gsm_L_mult(a, b) # define GSM_L_ADD(a, b) gsm_L_add(a, b) # define GSM_ADD(a, b) gsm_add(a, b) # define GSM_SUB(a, b) gsm_sub(a, b) # define GSM_ABS(a) gsm_abs(a) */ /* * More prototypes from implementations.. */ extern void Gsm_Coder P(( struct gsm_state * S, word * s, /* [0..159] samples IN */ word * LARc, /* [0..7] LAR coefficients OUT */ word * Nc, /* [0..3] LTP lag OUT */ word * bc, /* [0..3] coded LTP gain OUT */ word * Mc, /* [0..3] RPE grid selection OUT */ word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ word * xMc /* [13*4] normalized RPE samples OUT */)); extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */ struct gsm_state * S, word * d, /* [0..39] residual signal IN */ word * dp, /* [-120..-1] d' IN */ word * e, /* [0..40] OUT */ word * dpp, /* [0..40] OUT */ word * Nc, /* correlation lag OUT */ word * bc /* gain factor OUT */)); extern void Gsm_LPC_Analysis P(( struct gsm_state * S, word * s, /* 0..159 signals IN/OUT */ word * LARc)); /* 0..7 LARc's OUT */ extern void Gsm_Preprocess P(( struct gsm_state * S, word * s, word * so)); extern void Gsm_Encoding P(( struct gsm_state * S, word * e, word * ep, word * xmaxc, word * Mc, word * xMc)); extern void Gsm_Short_Term_Analysis_Filter P(( struct gsm_state * S, word * LARc, /* coded log area ratio [0..7] IN */ word * d /* st res. signal [0..159] IN/OUT */)); extern void Gsm_Decoder P(( struct gsm_state * S, word * LARcr, /* [0..7] IN */ word * Ncr, /* [0..3] IN */ word * bcr, /* [0..3] IN */ word * Mcr, /* [0..3] IN */ word * xmaxcr, /* [0..3] IN */ word * xMcr, /* [0..13*4] IN */ word * s)); /* [0..159] OUT */ extern void Gsm_Decoding P(( struct gsm_state * S, word xmaxcr, word Mcr, word * xMcr, /* [0..12] IN */ word * erp)); /* [0..39] OUT */ extern void Gsm_Long_Term_Synthesis_Filtering P(( struct gsm_state* S, word Ncr, word bcr, word * erp, /* [0..39] IN */ word * drp)); /* [-120..-1] IN, [0..40] OUT */ void Gsm_RPE_Decoding P(( struct gsm_state *S, word xmaxcr, word Mcr, word * xMcr, /* [0..12], 3 bits IN */ word * erp)); /* [0..39] OUT */ void Gsm_RPE_Encoding P(( struct gsm_state * S, word * e, /* -5..-1][0..39][40..44 IN/OUT */ word * xmaxc, /* OUT */ word * Mc, /* OUT */ word * xMc)); /* [0..12] OUT */ extern void Gsm_Short_Term_Synthesis_Filter P(( struct gsm_state * S, word * LARcr, /* log area ratios [0..7] IN */ word * drp, /* received d [0...39] IN */ word * s)); /* signal s [0..159] OUT */ extern void Gsm_Update_of_reconstructed_short_time_residual_signal P(( word * dpp, /* [0...39] IN */ word * ep, /* [0...39] IN */ word * dp)); /* [-120...-1] IN/OUT */ /* * Tables from table.c */ #ifndef GSM_TABLE_C extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8]; extern word gsm_INVA[8]; extern word gsm_DLB[4], gsm_QLB[4]; extern word gsm_H[11]; extern word gsm_NRFAC[8]; extern word gsm_FAC[8]; #endif /* GSM_TABLE_C */ /* * Debugging */ #ifdef NDEBUG # define gsm_debug_words(a, b, c, d) /* nil */ # define gsm_debug_longwords(a, b, c, d) /* nil */ # define gsm_debug_word(a, b) /* nil */ # define gsm_debug_longword(a, b) /* nil */ #else /* !NDEBUG => DEBUG */ extern void gsm_debug_words P((char * name, int, int, word *)); extern void gsm_debug_longwords P((char * name, int, int, longword *)); extern void gsm_debug_longword P((char * name, longword)); extern void gsm_debug_word P((char * name, word)); #endif /* !NDEBUG */ #include "unproto.h" #endif /* PRIVATE_H */ lmms-1.1.3/plugins/LadspaEffect/swh/gsm/proto.h000066400000000000000000000031021247673406200214000ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /*$Header: /home/cvs/giga/ladspa-swh/gsm/proto.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ #ifndef PROTO_H #define PROTO_H /*#if __cplusplus*/ # define NeedFunctionPrototypes 1 /*#endif*/ #if __STDC__ # define NeedFunctionPrototypes 1 #endif #ifdef _NO_PROTO # undef NeedFunctionPrototypes #endif #undef P /* gnu stdio.h actually defines this... */ #undef P0 #undef P1 #undef P2 #undef P3 #undef P4 #undef P5 #undef P6 #undef P7 #undef P8 #if NeedFunctionPrototypes # define P( protos ) protos # define P0() (void) # define P1(x, a) (a) # define P2(x, a, b) (a, b) # define P3(x, a, b, c) (a, b, c) # define P4(x, a, b, c, d) (a, b, c, d) # define P5(x, a, b, c, d, e) (a, b, c, d, e) # define P6(x, a, b, c, d, e, f) (a, b, c, d, e, f) # define P7(x, a, b, c, d, e, f, g) (a, b, c, d, e, f, g) # define P8(x, a, b, c, d, e, f, g, h) (a, b, c, d, e, f, g, h) #else /* !NeedFunctionPrototypes */ # define P( protos ) ( /* protos */ ) # define P0() () # define P1(x, a) x a; # define P2(x, a, b) x a; b; # define P3(x, a, b, c) x a; b; c; # define P4(x, a, b, c, d) x a; b; c; d; # define P5(x, a, b, c, d, e) x a; b; c; d; e; # define P6(x, a, b, c, d, e, f) x a; b; c; d; e; f; # define P7(x, a, b, c, d, e, f, g) x a; b; c; d; e; f; g; # define P8(x, a, b, c, d, e, f, g, h) x a; b; c; d; e; f; g; h; #endif /* !NeedFunctionPrototypes */ #endif /* PROTO_H */ lmms-1.1.3/plugins/LadspaEffect/swh/gsm/rpe.c000066400000000000000000000254471247673406200210360ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/rpe.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* 4.2.13 .. 4.2.17 RPE ENCODING SECTION */ /* 4.2.13 */ static void Weighting_filter P2((e, x), register word * e, /* signal [-5..0.39.44] IN */ word * x /* signal [0..39] OUT */ ) /* * The coefficients of the weighting filter are stored in a table * (see table 4.4). The following scaling is used: * * H[0..10] = integer( real_H[ 0..10] * 8192 ); */ { /* word wt[ 50 ]; */ register longword L_result; register int k /* , i */ ; /* Initialization of a temporary working array wt[0...49] */ /* for (k = 0; k <= 4; k++) wt[k] = 0; * for (k = 5; k <= 44; k++) wt[k] = *e++; * for (k = 45; k <= 49; k++) wt[k] = 0; * * (e[-5..-1] and e[40..44] are allocated by the caller, * are initially zero and are not written anywhere.) */ e -= 5; /* Compute the signal x[0..39] */ for (k = 0; k <= 39; k++) { L_result = 8192 >> 1; /* for (i = 0; i <= 10; i++) { * L_temp = GSM_L_MULT( wt[k+i], gsm_H[i] ); * L_result = GSM_L_ADD( L_result, L_temp ); * } */ #undef STEP #define STEP( i, H ) (e[ k + i ] * (longword)H) /* Every one of these multiplications is done twice -- * but I don't see an elegant way to optimize this. * Do you? */ #ifdef STUPID_COMPILER L_result += STEP( 0, -134 ) ; L_result += STEP( 1, -374 ) ; /* + STEP( 2, 0 ) */ L_result += STEP( 3, 2054 ) ; L_result += STEP( 4, 5741 ) ; L_result += STEP( 5, 8192 ) ; L_result += STEP( 6, 5741 ) ; L_result += STEP( 7, 2054 ) ; /* + STEP( 8, 0 ) */ L_result += STEP( 9, -374 ) ; L_result += STEP( 10, -134 ) ; #else L_result += STEP( 0, -134 ) + STEP( 1, -374 ) /* + STEP( 2, 0 ) */ + STEP( 3, 2054 ) + STEP( 4, 5741 ) + STEP( 5, 8192 ) + STEP( 6, 5741 ) + STEP( 7, 2054 ) /* + STEP( 8, 0 ) */ + STEP( 9, -374 ) + STEP(10, -134 ) ; #endif /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *) * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) * * x[k] = SASR( L_result, 16 ); */ /* 2 adds vs. >>16 => 14, minus one shift to compensate for * those we lost when replacing L_MULT by '*'. */ L_result = SASR( L_result, 13 ); x[k] = ( L_result < MIN_WORD ? MIN_WORD : (L_result > MAX_WORD ? MAX_WORD : L_result )); } } /* 4.2.14 */ static void RPE_grid_selection P3((x,xM,Mc_out), word * x, /* [0..39] IN */ word * xM, /* [0..12] OUT */ word * Mc_out /* OUT */ ) /* * The signal x[0..39] is used to select the RPE grid which is * represented by Mc. */ { /* register word temp1; */ register int /* m, */ i; register longword L_result, L_temp; longword EM; /* xxx should be L_EM? */ word Mc; longword L_common_0_3; EM = 0; Mc = 0; /* for (m = 0; m <= 3; m++) { * L_result = 0; * * * for (i = 0; i <= 12; i++) { * * temp1 = SASR( x[m + 3*i], 2 ); * * assert(temp1 != MIN_WORD); * * L_temp = GSM_L_MULT( temp1, temp1 ); * L_result = GSM_L_ADD( L_temp, L_result ); * } * * if (L_result > EM) { * Mc = m; * EM = L_result; * } * } */ #undef STEP #define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \ L_result += L_temp * L_temp; /* common part of 0 and 3 */ L_result = 0; STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 ); STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 ); STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12); L_common_0_3 = L_result; /* i = 0 */ STEP( 0, 0 ); L_result <<= 1; /* implicit in L_MULT */ EM = L_result; /* i = 1 */ L_result = 0; STEP( 1, 0 ); STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 ); STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 ); STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12); L_result <<= 1; if (L_result > EM) { Mc = 1; EM = L_result; } /* i = 2 */ L_result = 0; STEP( 2, 0 ); STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 ); STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 ); STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12); L_result <<= 1; if (L_result > EM) { Mc = 2; EM = L_result; } /* i = 3 */ L_result = L_common_0_3; STEP( 3, 12 ); L_result <<= 1; if (L_result > EM) { Mc = 3; EM = L_result; } /**/ /* Down-sampling by a factor 3 to get the selected xM[0..12] * RPE sequence. */ for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i]; *Mc_out = Mc; } /* 4.12.15 */ static void APCM_quantization_xmaxc_to_exp_mant P3((xmaxc,exp_out,mant_out), word xmaxc, /* IN */ word * exp_out, /* OUT */ word * mant_out ) /* OUT */ { word exp, mant; /* Compute exponent and mantissa of the decoded version of xmaxc */ exp = 0; if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1; mant = xmaxc - (exp << 3); if (mant == 0) { exp = -4; mant = 7; } else { while (mant <= 7) { mant = mant << 1 | 1; exp--; } mant -= 8; } assert( exp >= -4 && exp <= 6 ); assert( mant >= 0 && mant <= 7 ); *exp_out = exp; *mant_out = mant; } static void APCM_quantization P5((xM,xMc,mant_out,exp_out,xmaxc_out), word * xM, /* [0..12] IN */ word * xMc, /* [0..12] OUT */ word * mant_out, /* OUT */ word * exp_out, /* OUT */ word * xmaxc_out /* OUT */ ) { int i, itest; word xmax, xmaxc, temp, temp1, temp2; word exp, mant; /* Find the maximum absolute value xmax of xM[0..12]. */ xmax = 0; for (i = 0; i <= 12; i++) { temp = xM[i]; temp = GSM_ABS(temp); if (temp > xmax) xmax = temp; } /* Qantizing and coding of xmax to get xmaxc. */ exp = 0; temp = SASR( xmax, 9 ); itest = 0; for (i = 0; i <= 5; i++) { itest |= (temp <= 0); temp = SASR( temp, 1 ); assert(exp <= 5); if (itest == 0) exp++; /* exp = add (exp, 1) */ } assert(exp <= 6 && exp >= 0); temp = exp + 5; assert(temp <= 11 && temp >= 0); xmaxc = gsm_add( SASR(xmax, temp), exp << 3 ); /* Quantizing and coding of the xM[0..12] RPE sequence * to get the xMc[0..12] */ APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant ); /* This computation uses the fact that the decoded version of xmaxc * can be calculated by using the exponent and the mantissa part of * xmaxc (logarithmic table). * So, this method avoids any division and uses only a scaling * of the RPE samples by a function of the exponent. A direct * multiplication by the inverse of the mantissa (NRFAC[0..7] * found in table 4.5) gives the 3 bit coded version xMc[0..12] * of the RPE samples. */ /* Direct computation of xMc[0..12] using table 4.5 */ assert( exp <= 4096 && exp >= -4096); assert( mant >= 0 && mant <= 7 ); temp1 = 6 - exp; /* normalization by the exponent */ temp2 = gsm_NRFAC[ mant ]; /* inverse mantissa */ for (i = 0; i <= 12; i++) { assert(temp1 >= 0 && temp1 < 16); temp = xM[i] << temp1; temp = GSM_MULT( temp, temp2 ); temp = SASR(temp, 12); xMc[i] = temp + 4; /* see note below */ } /* NOTE: This equation is used to make all the xMc[i] positive. */ *mant_out = mant; *exp_out = exp; *xmaxc_out = xmaxc; } /* 4.2.16 */ static void APCM_inverse_quantization P4((xMc,mant,exp,xMp), register word * xMc, /* [0..12] IN */ word mant, word exp, register word * xMp) /* [0..12] OUT */ /* * This part is for decoding the RPE sequence of coded xMc[0..12] * samples to obtain the xMp[0..12] array. Table 4.6 is used to get * the mantissa of xmaxc (FAC[0..7]). */ { int i; word temp, temp1, temp2, temp3; longword ltmp; assert( mant >= 0 && mant <= 7 ); temp1 = gsm_FAC[ mant ]; /* see 4.2-15 for mant */ temp2 = gsm_sub( 6, exp ); /* see 4.2-15 for exp */ temp3 = gsm_asl( 1, gsm_sub( temp2, 1 )); for (i = 13; i--;) { assert( *xMc <= 7 && *xMc >= 0 ); /* 3 bit unsigned */ /* temp = gsm_sub( *xMc++ << 1, 7 ); */ temp = (*xMc++ << 1) - 7; /* restore sign */ assert( temp <= 7 && temp >= -7 ); /* 4 bit signed */ temp <<= 12; /* 16 bit signed */ temp = GSM_MULT_R( temp1, temp ); temp = GSM_ADD( temp, temp3 ); *xMp++ = gsm_asr( temp, temp2 ); } } /* 4.2.17 */ static void RPE_grid_positioning P3((Mc,xMp,ep), word Mc, /* grid position IN */ register word * xMp, /* [0..12] IN */ register word * ep /* [0..39] OUT */ ) /* * This procedure computes the reconstructed long term residual signal * ep[0..39] for the LTP analysis filter. The inputs are the Mc * which is the grid position selection and the xMp[0..12] decoded * RPE samples which are upsampled by a factor of 3 by inserting zero * values. */ { int i = 13; assert(0 <= Mc && Mc <= 3); switch (Mc) { case 3: *ep++ = 0; case 2: do { *ep++ = 0; case 1: *ep++ = 0; case 0: *ep++ = *xMp++; } while (--i); } while (++Mc < 4) *ep++ = 0; /* int i, k; for (k = 0; k <= 39; k++) ep[k] = 0; for (i = 0; i <= 12; i++) { ep[ Mc + (3*i) ] = xMp[i]; } */ } /* 4.2.18 */ /* This procedure adds the reconstructed long term residual signal * ep[0..39] to the estimated signal dpp[0..39] from the long term * analysis filter to compute the reconstructed short term residual * signal dp[-40..-1]; also the reconstructed short term residual * array dp[-120..-41] is updated. */ #if 0 /* Has been inlined in code.c */ void Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp), word * dpp, /* [0...39] IN */ word * ep, /* [0...39] IN */ word * dp) /* [-120...-1] IN/OUT */ { int k; for (k = 0; k <= 79; k++) dp[ -120 + k ] = dp[ -80 + k ]; for (k = 0; k <= 39; k++) dp[ -40 + k ] = gsm_add( ep[k], dpp[k] ); } #endif /* Has been inlined in code.c */ void Gsm_RPE_Encoding P5((S,e,xmaxc,Mc,xMc), struct gsm_state * S, word * e, /* -5..-1][0..39][40..44 IN/OUT */ word * xmaxc, /* OUT */ word * Mc, /* OUT */ word * xMc) /* [0..12] OUT */ { word x[40]; word xM[13], xMp[13]; word mant, exp; Weighting_filter(e, x); RPE_grid_selection(x, xM, Mc); APCM_quantization( xM, xMc, &mant, &exp, xmaxc); APCM_inverse_quantization( xMc, mant, exp, xMp); RPE_grid_positioning( *Mc, xMp, e ); } void Gsm_RPE_Decoding P5((S, xmaxcr, Mcr, xMcr, erp), struct gsm_state * S, word xmaxcr, word Mcr, word * xMcr, /* [0..12], 3 bits IN */ word * erp /* [0..39] OUT */ ) { word exp, mant; word xMp[ 13 ]; APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant ); APCM_inverse_quantization( xMcr, mant, exp, xMp ); RPE_grid_positioning( Mcr, xMp, erp ); } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/short_term.c000066400000000000000000000242251247673406200224270ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/short_term.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ #include #include #include "private.h" #include "gsm.h" #include "proto.h" /* * SHORT TERM ANALYSIS FILTERING SECTION */ /* 4.2.8 */ static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp), word * LARc, /* coded log area ratio [0..7] IN */ word * LARpp) /* out: decoded .. */ { register word temp1 /* , temp2 */; register long ltmp; /* for GSM_ADD */ /* This procedure requires for efficient implementation * two tables. * * INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) * MIC[1..8] = minimum value of the LARc[1..8] */ /* Compute the LARpp[1..8] */ /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) { * * temp1 = GSM_ADD( *LARc, *MIC ) << 10; * temp2 = *B << 1; * temp1 = GSM_SUB( temp1, temp2 ); * * assert(*INVA != MIN_WORD); * * temp1 = GSM_MULT_R( *INVA, temp1 ); * *LARpp = GSM_ADD( temp1, temp1 ); * } */ #undef STEP #define STEP( B, MIC, INVA ) \ temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ temp1 = GSM_SUB( temp1, B << 1 ); \ temp1 = GSM_MULT_R( INVA, temp1 ); \ *LARpp++ = GSM_ADD( temp1, temp1 ); STEP( 0, -32, 13107 ); STEP( 0, -32, 13107 ); STEP( 2048, -16, 13107 ); STEP( -2560, -16, 13107 ); STEP( 94, -8, 19223 ); STEP( -1792, -8, 17476 ); STEP( -341, -4, 31454 ); STEP( -1144, -4, 29708 ); /* NOTE: the addition of *MIC is used to restore * the sign of *LARc. */ } /* 4.2.9 */ /* Computation of the quantized reflection coefficients */ /* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] */ /* * Within each frame of 160 analyzed speech samples the short term * analysis and synthesis filters operate with four different sets of * coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) * and the actual set of decoded LARs (LARpp(j)) * * (Initial value: LARpp(j-1)[1..8] = 0.) */ static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp), register word * LARpp_j_1, register word * LARpp_j, register word * LARp) { register int i; register longword ltmp; for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) { *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1)); } } static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp), register word * LARpp_j_1, register word * LARpp_j, register word * LARp) { register int i; register longword ltmp; for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 )); } } static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp), register word * LARpp_j_1, register word * LARpp_j, register word * LARp) { register int i; register longword ltmp; for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 )); } } static void Coefficients_40_159 P2((LARpp_j, LARp), register word * LARpp_j, register word * LARp) { register int i; for (i = 1; i <= 8; i++, LARp++, LARpp_j++) *LARp = *LARpp_j; } /* 4.2.9.2 */ static void LARp_to_rp P1((LARp), register word * LARp) /* [0..7] IN/OUT */ /* * The input of this procedure is the interpolated LARp[0..7] array. * The reflection coefficients, rp[i], are used in the analysis * filter and in the synthesis filter. */ { register int i; register word temp; register longword ltmp; for (i = 1; i <= 8; i++, LARp++) { /* temp = GSM_ABS( *LARp ); * * if (temp < 11059) temp <<= 1; * else if (temp < 20070) temp += 11059; * else temp = GSM_ADD( temp >> 2, 26112 ); * * *LARp = *LARp < 0 ? -temp : temp; */ if (*LARp < 0) { temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp); *LARp = - ((temp < 11059) ? temp << 1 : ((temp < 20070) ? temp + 11059 : GSM_ADD( temp >> 2, 26112 ))); } else { temp = *LARp; *LARp = (temp < 11059) ? temp << 1 : ((temp < 20070) ? temp + 11059 : GSM_ADD( temp >> 2, 26112 )); } } } /* 4.2.10 */ static void Short_term_analysis_filtering P4((S,rp,k_n,s), struct gsm_state * S, register word * rp, /* [0..7] IN */ register int k_n, /* k_end - k_start */ register word * s /* [0..n-1] IN/OUT */ ) /* * This procedure computes the short term residual signal d[..] to be fed * to the RPE-LTP loop from the s[..] signal and from the local rp[..] * array (quantized reflection coefficients). As the call of this * procedure can be done in many ways (see the interpolation of the LAR * coefficient), it is assumed that the computation begins with index * k_start (for arrays d[..] and s[..]) and stops with index k_end * (k_start and k_end are defined in 4.2.9.1). This procedure also * needs to keep the array u[0..7] in memory for each call. */ { register word * u = S->u; register int i; register word di, zzz, ui, sav, rpi; register longword ltmp; for (; k_n--; s++) { di = sav = *s; for (i = 0; i < 8; i++) { /* YYY */ ui = u[i]; rpi = rp[i]; u[i] = sav; zzz = GSM_MULT_R(rpi, di); sav = GSM_ADD( ui, zzz); zzz = GSM_MULT_R(rpi, ui); di = GSM_ADD( di, zzz ); } *s = di; } } #if defined(USE_FLOAT_MUL) && defined(FAST) static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s), struct gsm_state * S, register word * rp, /* [0..7] IN */ register int k_n, /* k_end - k_start */ register word * s /* [0..n-1] IN/OUT */ ) { register word * u = S->u; register int i; float uf[8], rpf[8]; register float scalef = 3.0517578125e-5; register float sav, di, temp; for (i = 0; i < 8; ++i) { uf[i] = u[i]; rpf[i] = rp[i] * scalef; } for (; k_n--; s++) { sav = di = *s; for (i = 0; i < 8; ++i) { register float rpfi = rpf[i]; register float ufi = uf[i]; uf[i] = sav; temp = rpfi * di + ufi; di += rpfi * ufi; sav = temp; } *s = di; } for (i = 0; i < 8; ++i) u[i] = uf[i]; } #endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */ static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), struct gsm_state * S, register word * rrp, /* [0..7] IN */ register int k, /* k_end - k_start */ register word * wt, /* [0..k-1] IN */ register word * sr /* [0..k-1] OUT */ ) { register word * v = S->v; register int i; register word sri, tmp1, tmp2; register longword ltmp; /* for GSM_ADD & GSM_SUB */ while (k--) { sri = *wt++; for (i = 8; i--;) { /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) ); */ tmp1 = rrp[i]; tmp2 = v[i]; tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD ? MAX_WORD : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2 + 16384) >> 15)) ; sri = GSM_SUB( sri, tmp2 ); /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) ); */ tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD ? MAX_WORD : 0x0FFFF & (( (longword)tmp1 * (longword)sri + 16384) >> 15)) ; v[i+1] = GSM_ADD( v[i], tmp1); } *sr++ = v[0] = sri; } } #if defined(FAST) && defined(USE_FLOAT_MUL) static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), struct gsm_state * S, register word * rrp, /* [0..7] IN */ register int k, /* k_end - k_start */ register word * wt, /* [0..k-1] IN */ register word * sr /* [0..k-1] OUT */ ) { register word * v = S->v; register int i; float va[9], rrpa[8]; register float scalef = 3.0517578125e-5, temp; for (i = 0; i < 8; ++i) { va[i] = v[i]; rrpa[i] = (float)rrp[i] * scalef; } while (k--) { register float sri = *wt++; for (i = 8; i--;) { sri -= rrpa[i] * va[i]; if (sri < -32768.) sri = -32768.; else if (sri > 32767.) sri = 32767.; temp = va[i] + rrpa[i] * sri; if (temp < -32768.) temp = -32768.; else if (temp > 32767.) temp = 32767.; va[i+1] = temp; } *sr++ = va[0] = sri; } for (i = 0; i < 9; ++i) v[i] = va[i]; } #endif /* defined(FAST) && defined(USE_FLOAT_MUL) */ void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s), struct gsm_state * S, word * LARc, /* coded log area ratio [0..7] IN */ word * s /* signal [0..159] IN/OUT */ ) { word * LARpp_j = S->LARpp[ S->j ]; word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; word LARp[8]; #undef FILTER #if defined(FAST) && defined(USE_FLOAT_MUL) # define FILTER (* (S->fast \ ? Fast_Short_term_analysis_filtering \ : Short_term_analysis_filtering )) #else # define FILTER Short_term_analysis_filtering #endif Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j ); Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); LARp_to_rp( LARp ); FILTER( S, LARp, 13, s); Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 14, s + 13); Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 13, s + 27); Coefficients_40_159( LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 120, s + 40); } void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s), struct gsm_state * S, word * LARcr, /* received log area ratios [0..7] IN */ word * wt, /* received d [0..159] IN */ word * s /* signal s [0..159] OUT */ ) { word * LARpp_j = S->LARpp[ S->j ]; word * LARpp_j_1 = S->LARpp[ S->j ^=1 ]; word LARp[8]; #undef FILTER #if defined(FAST) && defined(USE_FLOAT_MUL) # define FILTER (* (S->fast \ ? Fast_Short_term_synthesis_filtering \ : Short_term_synthesis_filtering )) #else # define FILTER Short_term_synthesis_filtering #endif Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j ); Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); LARp_to_rp( LARp ); FILTER( S, LARp, 13, wt, s ); Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 14, wt + 13, s + 13 ); Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); LARp_to_rp( LARp ); FILTER( S, LARp, 13, wt + 27, s + 27 ); Coefficients_40_159( LARpp_j, LARp ); LARp_to_rp( LARp ); FILTER(S, LARp, 120, wt + 40, s + 40); } lmms-1.1.3/plugins/LadspaEffect/swh/gsm/table.c000066400000000000000000000041261247673406200213260ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /* $Header: /home/cvs/giga/ladspa-swh/gsm/table.c,v 1.1 2001/06/10 21:36:51 swh Exp $ */ /* Most of these tables are inlined at their point of use. */ /* 4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP * CODER AND DECODER * * (Most of them inlined, so watch out.) */ #define GSM_TABLE_C #include "private.h" #include "gsm.h" /* Table 4.1 Quantization of the Log.-Area Ratios */ /* i 1 2 3 4 5 6 7 8 */ word gsm_A[8] = {20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036}; word gsm_B[8] = { 0, 0, 2048, -2560, 94, -1792, -341, -1144}; word gsm_MIC[8] = { -32, -32, -16, -16, -8, -8, -4, -4 }; word gsm_MAC[8] = { 31, 31, 15, 15, 7, 7, 3, 3 }; /* Table 4.2 Tabulation of 1/A[1..8] */ word gsm_INVA[8]={ 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708 }; /* Table 4.3a Decision level of the LTP gain quantizer */ /* bc 0 1 2 3 */ word gsm_DLB[4] = { 6554, 16384, 26214, 32767 }; /* Table 4.3b Quantization levels of the LTP gain quantizer */ /* bc 0 1 2 3 */ word gsm_QLB[4] = { 3277, 11469, 21299, 32767 }; /* Table 4.4 Coefficients of the weighting filter */ /* i 0 1 2 3 4 5 6 7 8 9 10 */ word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 }; /* Table 4.5 Normalized inverse mantissa used to compute xM/xmax */ /* i 0 1 2 3 4 5 6 7 */ word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; /* Table 4.6 Normalized direct mantissa used to compute xM/xmax */ /* i 0 1 2 3 4 5 6 7 */ word gsm_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; lmms-1.1.3/plugins/LadspaEffect/swh/gsm/unproto.h000066400000000000000000000007131247673406200217500ustar00rootroot00000000000000/* * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische * Universitaet Berlin. See the accompanying file "COPYRIGHT" for * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ /*$Header: /home/cvs/giga/ladspa-swh/gsm/unproto.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/ #ifdef PROTO_H /* sic */ #undef PROTO_H #undef P #undef P0 #undef P1 #undef P2 #undef P3 #undef P4 #undef P5 #undef P6 #undef P7 #undef P8 #endif /* PROTO_H */ lmms-1.1.3/plugins/LadspaEffect/swh/gsm_1215.c000066400000000000000000000320251247673406200207060ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "gsm_1215.xml" #include #include "ladspa-util.h" #include "gsm/gsm.h" #include "util/biquad.h" #define SCALE 32768.0f #define SCALE_R 0.0000305175f int bits[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; #define GSM_DRYWET 0 #define GSM_PASSES 1 #define GSM_ERROR 2 #define GSM_INPUT 3 #define GSM_OUTPUT 4 #define GSM_LATENCY 5 static LADSPA_Descriptor *gsmDescriptor = NULL; typedef struct { LADSPA_Data *drywet; LADSPA_Data *passes; LADSPA_Data *error; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; biquad * blf; int count; LADSPA_Data *dry; gsm_signal * dst; float fs; gsm handle; int resamp; float rsf; gsm_signal * src; LADSPA_Data run_adding_gain; } Gsm; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return gsmDescriptor; default: return NULL; } } static void activateGsm(LADSPA_Handle instance) { Gsm *plugin_data = (Gsm *)instance; biquad *blf = plugin_data->blf; int count = plugin_data->count; LADSPA_Data *dry = plugin_data->dry; gsm_signal *dst = plugin_data->dst; float fs = plugin_data->fs; gsm handle = plugin_data->handle; int resamp = plugin_data->resamp; float rsf = plugin_data->rsf; gsm_signal *src = plugin_data->src; #line 41 "gsm_1215.xml" count = 0; memset(src, 0, sizeof(gsm_signal) * 160); memset(dst, 0, sizeof(gsm_signal) * 163); memset(dry, 0, sizeof(LADSPA_Data) * 160 * resamp); handle = gsm_create(); biquad_init(blf); hs_set_params(blf, 3500.0f, -50.0f, 0.7f, fs); plugin_data->blf = blf; plugin_data->count = count; plugin_data->dry = dry; plugin_data->dst = dst; plugin_data->fs = fs; plugin_data->handle = handle; plugin_data->resamp = resamp; plugin_data->rsf = rsf; plugin_data->src = src; } static void cleanupGsm(LADSPA_Handle instance) { #line 51 "gsm_1215.xml" Gsm *plugin_data = (Gsm *)instance; free(plugin_data->src); free(plugin_data->dst); free(plugin_data->dry); free(plugin_data->blf); if (plugin_data->handle) { gsm_destroy(plugin_data->handle); } free(instance); } static void connectPortGsm( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Gsm *plugin; plugin = (Gsm *)instance; switch (port) { case GSM_DRYWET: plugin->drywet = data; break; case GSM_PASSES: plugin->passes = data; break; case GSM_ERROR: plugin->error = data; break; case GSM_INPUT: plugin->input = data; break; case GSM_OUTPUT: plugin->output = data; break; case GSM_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateGsm( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Gsm *plugin_data = (Gsm *)malloc(sizeof(Gsm)); biquad *blf = NULL; int count; LADSPA_Data *dry = NULL; gsm_signal *dst = NULL; float fs; gsm handle; int resamp; float rsf; gsm_signal *src = NULL; #line 27 "gsm_1215.xml" count = 0; resamp = s_rate / 8000; fs = s_rate; rsf = SCALE / (float)resamp; src = malloc(sizeof(gsm_signal) * 160); dst = malloc(sizeof(gsm_signal) * 163); dry = malloc(sizeof(LADSPA_Data) * 160 * resamp); handle = NULL; blf = malloc(sizeof(biquad)); biquad_init(blf); plugin_data->blf = blf; plugin_data->count = count; plugin_data->dry = dry; plugin_data->dst = dst; plugin_data->fs = fs; plugin_data->handle = handle; plugin_data->resamp = resamp; plugin_data->rsf = rsf; plugin_data->src = src; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runGsm(LADSPA_Handle instance, unsigned long sample_count) { Gsm *plugin_data = (Gsm *)instance; /* Dry/wet mix (float value) */ const LADSPA_Data drywet = *(plugin_data->drywet); /* Number of passes (float value) */ const LADSPA_Data passes = *(plugin_data->passes); /* Error rate (bits/block) (float value) */ const LADSPA_Data error = *(plugin_data->error); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * blf = plugin_data->blf; int count = plugin_data->count; LADSPA_Data * dry = plugin_data->dry; gsm_signal * dst = plugin_data->dst; gsm handle = plugin_data->handle; int resamp = plugin_data->resamp; float rsf = plugin_data->rsf; gsm_signal * src = plugin_data->src; #line 61 "gsm_1215.xml" unsigned long pos; gsm_frame frame; int samp; float part; int error_rate = f_round(error); int num_passes = f_round(passes); for (pos = 0; pos < sample_count; pos++) { // oversample into buffer down to aprox 8kHz, 13bit src[count / resamp] += f_round(biquad_run(blf, input[pos]) * rsf); // interpolate output, so it doesn't sound totaly awful samp = count / resamp; part = (float)count / (float)resamp - (float)samp; buffer_write(output[pos], cube_interp(part, dst[samp], dst[samp+1], dst[samp+2], dst[samp+3]) * SCALE_R * drywet + dry[count] * (1.0f - drywet)); // Maintain delayed, dry buffer. dry[count] = input[pos]; count++; // If we have a full, downsampled buffer then run the encode + // decode process. if (count >= 160 * resamp) { int i, j; gsm_signal *in; count = 0; dst[0] = dst[160]; dst[1] = dst[161]; dst[2] = dst[162]; in = src; for (j=0; jcount = count; *(plugin_data->latency) = 160 * resamp; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainGsm(LADSPA_Handle instance, LADSPA_Data gain) { ((Gsm *)instance)->run_adding_gain = gain; } static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) { Gsm *plugin_data = (Gsm *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Dry/wet mix (float value) */ const LADSPA_Data drywet = *(plugin_data->drywet); /* Number of passes (float value) */ const LADSPA_Data passes = *(plugin_data->passes); /* Error rate (bits/block) (float value) */ const LADSPA_Data error = *(plugin_data->error); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * blf = plugin_data->blf; int count = plugin_data->count; LADSPA_Data * dry = plugin_data->dry; gsm_signal * dst = plugin_data->dst; gsm handle = plugin_data->handle; int resamp = plugin_data->resamp; float rsf = plugin_data->rsf; gsm_signal * src = plugin_data->src; #line 61 "gsm_1215.xml" unsigned long pos; gsm_frame frame; int samp; float part; int error_rate = f_round(error); int num_passes = f_round(passes); for (pos = 0; pos < sample_count; pos++) { // oversample into buffer down to aprox 8kHz, 13bit src[count / resamp] += f_round(biquad_run(blf, input[pos]) * rsf); // interpolate output, so it doesn't sound totaly awful samp = count / resamp; part = (float)count / (float)resamp - (float)samp; buffer_write(output[pos], cube_interp(part, dst[samp], dst[samp+1], dst[samp+2], dst[samp+3]) * SCALE_R * drywet + dry[count] * (1.0f - drywet)); // Maintain delayed, dry buffer. dry[count] = input[pos]; count++; // If we have a full, downsampled buffer then run the encode + // decode process. if (count >= 160 * resamp) { int i, j; gsm_signal *in; count = 0; dst[0] = dst[160]; dst[1] = dst[161]; dst[2] = dst[162]; in = src; for (j=0; jcount = count; *(plugin_data->latency) = 160 * resamp; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif gsmDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (gsmDescriptor) { gsmDescriptor->UniqueID = 1215; gsmDescriptor->Label = "gsm"; gsmDescriptor->Properties = 0; gsmDescriptor->Name = D_("GSM simulator"); gsmDescriptor->Maker = "Steve Harris "; gsmDescriptor->Copyright = "GPL"; gsmDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); gsmDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); gsmDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); gsmDescriptor->PortNames = (const char **)port_names; /* Parameters for Dry/wet mix */ port_descriptors[GSM_DRYWET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GSM_DRYWET] = D_("Dry/wet mix"); port_range_hints[GSM_DRYWET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[GSM_DRYWET].LowerBound = 0; port_range_hints[GSM_DRYWET].UpperBound = 1; /* Parameters for Number of passes */ port_descriptors[GSM_PASSES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GSM_PASSES] = D_("Number of passes"); port_range_hints[GSM_PASSES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; port_range_hints[GSM_PASSES].LowerBound = 0; port_range_hints[GSM_PASSES].UpperBound = 10; /* Parameters for Error rate (bits/block) */ port_descriptors[GSM_ERROR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GSM_ERROR] = D_("Error rate (bits/block)"); port_range_hints[GSM_ERROR].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[GSM_ERROR].LowerBound = 0; port_range_hints[GSM_ERROR].UpperBound = 30; /* Parameters for Input */ port_descriptors[GSM_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[GSM_INPUT] = D_("Input"); port_range_hints[GSM_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[GSM_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GSM_OUTPUT] = D_("Output"); port_range_hints[GSM_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[GSM_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[GSM_LATENCY] = D_("latency"); port_range_hints[GSM_LATENCY].HintDescriptor = 0; gsmDescriptor->activate = activateGsm; gsmDescriptor->cleanup = cleanupGsm; gsmDescriptor->connect_port = connectPortGsm; gsmDescriptor->deactivate = NULL; gsmDescriptor->instantiate = instantiateGsm; gsmDescriptor->run = runGsm; gsmDescriptor->run_adding = runAddingGsm; gsmDescriptor->set_run_adding_gain = setRunAddingGainGsm; } } void __attribute__((destructor)) swh_fini() { if (gsmDescriptor) { free((LADSPA_PortDescriptor *)gsmDescriptor->PortDescriptors); free((char **)gsmDescriptor->PortNames); free((LADSPA_PortRangeHint *)gsmDescriptor->PortRangeHints); free(gsmDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/gverb/000077500000000000000000000000001247673406200204075ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/gverb/gverb.c000066400000000000000000000122671247673406200216700ustar00rootroot00000000000000/* Copyright (C) 1999 Juhana Sadeharju kouhia at nic.funet.fi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include "gverbdsp.h" #include "gverb.h" #include "../ladspa-util.h" ty_gverb *gverb_new(int srate, float maxroomsize, float roomsize, float revtime, float damping, float spread, float inputbandwidth, float earlylevel, float taillevel) { ty_gverb *p; float ga,gb,gt; int i,n; float r; float diffscale; int a,b,c,cc,d,dd,e; float spread1,spread2; p = (ty_gverb *)malloc(sizeof(ty_gverb)); p->rate = srate; p->fdndamping = damping; p->maxroomsize = maxroomsize; p->roomsize = roomsize; p->revtime = revtime; p->earlylevel = earlylevel; p->taillevel = taillevel; p->maxdelay = p->rate*p->maxroomsize/340.0; p->largestdelay = p->rate*p->roomsize/340.0; /* Input damper */ p->inputbandwidth = inputbandwidth; p->inputdamper = damper_make(1.0 - p->inputbandwidth); /* FDN section */ p->fdndels = (ty_fixeddelay **)calloc(FDNORDER, sizeof(ty_fixeddelay *)); for(i = 0; i < FDNORDER; i++) { p->fdndels[i] = fixeddelay_make((int)p->maxdelay+1000); } p->fdngains = (float *)calloc(FDNORDER, sizeof(float)); p->fdnlens = (int *)calloc(FDNORDER, sizeof(int)); p->fdndamps = (ty_damper **)calloc(FDNORDER, sizeof(ty_damper *)); for(i = 0; i < FDNORDER; i++) { p->fdndamps[i] = damper_make(p->fdndamping); } ga = 60.0; gt = p->revtime; ga = powf(10.0f,-ga/20.0f); n = p->rate*gt; p->alpha = pow((double)ga, 1.0/(double)n); gb = 0.0; for(i = 0; i < FDNORDER; i++) { if (i == 0) gb = 1.000000*p->largestdelay; if (i == 1) gb = 0.816490*p->largestdelay; if (i == 2) gb = 0.707100*p->largestdelay; if (i == 3) gb = 0.632450*p->largestdelay; #if 0 p->fdnlens[i] = nearest_prime((int)gb, 0.5); #else p->fdnlens[i] = f_round(gb); #endif p->fdngains[i] = -powf((float)p->alpha,p->fdnlens[i]); } p->d = (float *)calloc(FDNORDER, sizeof(float)); p->u = (float *)calloc(FDNORDER, sizeof(float)); p->f = (float *)calloc(FDNORDER, sizeof(float)); /* Diffuser section */ diffscale = (float)p->fdnlens[3]/(210+159+562+410); spread1 = spread; spread2 = 3.0*spread; b = 210; r = 0.125541; a = spread1*r; c = 210+159+a; cc = c-b; r = 0.854046; a = spread2*r; d = 210+159+562+a; dd = d-c; e = 1341-d; p->ldifs = (ty_diffuser **)calloc(4, sizeof(ty_diffuser *)); p->ldifs[0] = diffuser_make((int)(diffscale*b),0.75); p->ldifs[1] = diffuser_make((int)(diffscale*cc),0.75); p->ldifs[2] = diffuser_make((int)(diffscale*dd),0.625); p->ldifs[3] = diffuser_make((int)(diffscale*e),0.625); b = 210; r = -0.568366; a = spread1*r; c = 210+159+a; cc = c-b; r = -0.126815; a = spread2*r; d = 210+159+562+a; dd = d-c; e = 1341-d; p->rdifs = (ty_diffuser **)calloc(4, sizeof(ty_diffuser *)); p->rdifs[0] = diffuser_make((int)(diffscale*b),0.75); p->rdifs[1] = diffuser_make((int)(diffscale*cc),0.75); p->rdifs[2] = diffuser_make((int)(diffscale*dd),0.625); p->rdifs[3] = diffuser_make((int)(diffscale*e),0.625); /* Tapped delay section */ p->tapdelay = fixeddelay_make(44000); p->taps = (int *)calloc(FDNORDER, sizeof(int)); p->tapgains = (float *)calloc(FDNORDER, sizeof(float)); p->taps[0] = 5+0.410*p->largestdelay; p->taps[1] = 5+0.300*p->largestdelay; p->taps[2] = 5+0.155*p->largestdelay; p->taps[3] = 5+0.000*p->largestdelay; for(i = 0; i < FDNORDER; i++) { p->tapgains[i] = pow(p->alpha,(double)p->taps[i]); } return(p); } void gverb_free(ty_gverb *p) { int i; damper_free(p->inputdamper); for(i = 0; i < FDNORDER; i++) { fixeddelay_free(p->fdndels[i]); damper_free(p->fdndamps[i]); diffuser_free(p->ldifs[i]); diffuser_free(p->rdifs[i]); } free(p->fdndels); free(p->fdngains); free(p->fdnlens); free(p->fdndamps); free(p->d); free(p->u); free(p->f); free(p->ldifs); free(p->rdifs); free(p->taps); free(p->tapgains); fixeddelay_free(p->tapdelay); free(p); } void gverb_flush(ty_gverb *p) { int i; damper_flush(p->inputdamper); for(i = 0; i < FDNORDER; i++) { fixeddelay_flush(p->fdndels[i]); damper_flush(p->fdndamps[i]); diffuser_flush(p->ldifs[i]); diffuser_flush(p->rdifs[i]); } memset(p->d, 0, FDNORDER * sizeof(float)); memset(p->u, 0, FDNORDER * sizeof(float)); memset(p->f, 0, FDNORDER * sizeof(float)); fixeddelay_flush(p->tapdelay); } /* swh: other functions are now in the .h file for inlining */ lmms-1.1.3/plugins/LadspaEffect/swh/gverb/gverb.h000066400000000000000000000140311247673406200216640ustar00rootroot00000000000000/* Copyright (C) 1999 Juhana Sadeharju kouhia at nic.funet.fi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef GVERB_H #define GVERB_H #include #include #include #include "gverbdsp.h" #include "gverb.h" #include "../ladspa-util.h" #define FDNORDER 4 typedef struct { int rate; float inputbandwidth; float taillevel; float earlylevel; ty_damper *inputdamper; float maxroomsize; float roomsize; float revtime; float maxdelay; float largestdelay; ty_fixeddelay **fdndels; float *fdngains; int *fdnlens; ty_damper **fdndamps; float fdndamping; ty_diffuser **ldifs; ty_diffuser **rdifs; ty_fixeddelay *tapdelay; int *taps; float *tapgains; float *d; float *u; float *f; double alpha; } ty_gverb; ty_gverb *gverb_new(int, float, float, float, float, float, float, float, float); void gverb_free(ty_gverb *); void gverb_flush(ty_gverb *); static void gverb_do(ty_gverb *, float, float *, float *); static void gverb_set_roomsize(ty_gverb *, float); static void gverb_set_revtime(ty_gverb *, float); static void gverb_set_damping(ty_gverb *, float); static void gverb_set_inputbandwidth(ty_gverb *, float); static void gverb_set_earlylevel(ty_gverb *, float); static void gverb_set_taillevel(ty_gverb *, float); /* * This FDN reverb can be made smoother by setting matrix elements at the * diagonal and near of it to zero or nearly zero. By setting diagonals to zero * means we remove the effect of the parallel comb structure from the * reverberation. A comb generates uniform impulse stream to the reverberation * impulse response, and thus it is not good. By setting near diagonal elements * to zero means we remove delay sequences having consequtive delays of the * similar lenths, when the delays are in sorted in length with respect to * matrix element index. The matrix described here could be generated by * differencing Rocchesso's circulant matrix at max diffuse value and at low * diffuse value (approaching parallel combs). * * Example 1: * Set a(k,k), for all k, equal to 0. * * Example 2: * Set a(k,k), a(k,k-1) and a(k,k+1) equal to 0. * * Example 3: The transition to zero gains could be smooth as well. * a(k,k-1) and a(k,k+1) could be 0.3, and a(k,k-2) and a(k,k+2) could * be 0.5, say. */ static inline void gverb_fdnmatrix(float *a, float *b) { const float dl0 = a[0], dl1 = a[1], dl2 = a[2], dl3 = a[3]; b[0] = 0.5f*(+dl0 + dl1 - dl2 - dl3); b[1] = 0.5f*(+dl0 - dl1 - dl2 + dl3); b[2] = 0.5f*(-dl0 + dl1 - dl2 + dl3); b[3] = 0.5f*(+dl0 + dl1 + dl2 + dl3); } static inline void gverb_do(ty_gverb *p, float x, float *yl, float *yr) { float z; unsigned int i; float lsum,rsum,sum,sign; if (isnan(x) || fabsf(x) > 100000.0f) { x = 0.0f; } z = damper_do(p->inputdamper, x); z = diffuser_do(p->ldifs[0],z); for(i = 0; i < FDNORDER; i++) { p->u[i] = p->tapgains[i]*fixeddelay_read(p->tapdelay,p->taps[i]); } fixeddelay_write(p->tapdelay,z); for(i = 0; i < FDNORDER; i++) { p->d[i] = damper_do(p->fdndamps[i], p->fdngains[i]*fixeddelay_read(p->fdndels[i], p->fdnlens[i])); } sum = 0.0f; sign = 1.0f; for(i = 0; i < FDNORDER; i++) { sum += sign*(p->taillevel*p->d[i] + p->earlylevel*p->u[i]); sign = -sign; } sum += x*p->earlylevel; lsum = sum; rsum = sum; gverb_fdnmatrix(p->d,p->f); for(i = 0; i < FDNORDER; i++) { fixeddelay_write(p->fdndels[i],p->u[i]+p->f[i]); } lsum = diffuser_do(p->ldifs[1],lsum); lsum = diffuser_do(p->ldifs[2],lsum); lsum = diffuser_do(p->ldifs[3],lsum); rsum = diffuser_do(p->rdifs[1],rsum); rsum = diffuser_do(p->rdifs[2],rsum); rsum = diffuser_do(p->rdifs[3],rsum); *yl = lsum; *yr = rsum; } static inline void gverb_set_roomsize(ty_gverb *p, const float a) { unsigned int i; if (a <= 1.0 || isnan(a)) { p->roomsize = 1.0; } else { p->roomsize = a; } p->largestdelay = p->rate * p->roomsize * 0.00294f; p->fdnlens[0] = f_round(1.000000f*p->largestdelay); p->fdnlens[1] = f_round(0.816490f*p->largestdelay); p->fdnlens[2] = f_round(0.707100f*p->largestdelay); p->fdnlens[3] = f_round(0.632450f*p->largestdelay); for(i = 0; i < FDNORDER; i++) { p->fdngains[i] = -powf((float)p->alpha, p->fdnlens[i]); } p->taps[0] = 5+f_round(0.410f*p->largestdelay); p->taps[1] = 5+f_round(0.300f*p->largestdelay); p->taps[2] = 5+f_round(0.155f*p->largestdelay); p->taps[3] = 5+f_round(0.000f*p->largestdelay); for(i = 0; i < FDNORDER; i++) { p->tapgains[i] = powf((float)p->alpha, p->taps[i]); } } static inline void gverb_set_revtime(ty_gverb *p,float a) { float ga,gt; double n; unsigned int i; p->revtime = a; ga = 60.0; gt = p->revtime; ga = powf(10.0f,-ga/20.0f); n = p->rate*gt; p->alpha = (double)powf(ga,1.0f/n); for(i = 0; i < FDNORDER; i++) { p->fdngains[i] = -powf((float)p->alpha, p->fdnlens[i]); } } static inline void gverb_set_damping(ty_gverb *p,float a) { unsigned int i; p->fdndamping = a; for(i = 0; i < FDNORDER; i++) { damper_set(p->fdndamps[i],p->fdndamping); } } static inline void gverb_set_inputbandwidth(ty_gverb *p,float a) { p->inputbandwidth = a; damper_set(p->inputdamper,1.0 - p->inputbandwidth); } static inline void gverb_set_earlylevel(ty_gverb *p,float a) { p->earlylevel = a; } static inline void gverb_set_taillevel(ty_gverb *p,float a) { p->taillevel = a; } #endif lmms-1.1.3/plugins/LadspaEffect/swh/gverb/gverbdsp.c000066400000000000000000000052321247673406200223710ustar00rootroot00000000000000 /* Copyright (C) 1999 Juhana Sadeharju kouhia at nic.funet.fi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include "gverbdsp.h" #define TRUE 1 #define FALSE 0 ty_diffuser *diffuser_make(int size, float coeff) { ty_diffuser *p; int i; p = (ty_diffuser *)malloc(sizeof(ty_diffuser)); p->size = size; p->coeff = coeff; p->idx = 0; p->buf = (float *)malloc(size*sizeof(float)); for (i = 0; i < size; i++) p->buf[i] = 0.0; return(p); } void diffuser_free(ty_diffuser *p) { free(p->buf); free(p); } void diffuser_flush(ty_diffuser *p) { memset(p->buf, 0, p->size * sizeof(float)); } ty_damper *damper_make(float damping) { ty_damper *p; p = (ty_damper *)malloc(sizeof(ty_damper)); p->damping = damping; p->delay = 0.0f; return(p); } void damper_free(ty_damper *p) { free(p); } void damper_flush(ty_damper *p) { p->delay = 0.0f; } ty_fixeddelay *fixeddelay_make(int size) { ty_fixeddelay *p; int i; p = (ty_fixeddelay *)malloc(sizeof(ty_fixeddelay)); p->size = size; p->idx = 0; p->buf = (float *)malloc(size*sizeof(float)); for (i = 0; i < size; i++) p->buf[i] = 0.0; return(p); } void fixeddelay_free(ty_fixeddelay *p) { free(p->buf); free(p); } void fixeddelay_flush(ty_fixeddelay *p) { memset(p->buf, 0, p->size * sizeof(float)); } int isprime(int n) { unsigned int i; const unsigned int lim = (int)sqrtf((float)n); if (n == 2) return(TRUE); if ((n & 1) == 0) return(FALSE); for(i = 3; i <= lim; i += 2) if ((n % i) == 0) return(FALSE); return(TRUE); } int nearest_prime(int n, float rerror) /* relative error; new prime will be in range * [n-n*rerror, n+n*rerror]; */ { int bound,k; if (isprime(n)) return(n); /* assume n is large enough and n*rerror enough smaller than n */ bound = n*rerror; for(k = 1; k <= bound; k++) { if (isprime(n+k)) return(n+k); if (isprime(n-k)) return(n-k); } return(-1); } lmms-1.1.3/plugins/LadspaEffect/swh/gverb/gverbdsp.h000066400000000000000000000031411247673406200223730ustar00rootroot00000000000000 #ifndef GVERBDSP_H #define GVERBDSP_H #include "../ladspa-util.h" typedef struct { int size; int idx; float *buf; } ty_fixeddelay; typedef struct { int size; float coeff; int idx; float *buf; } ty_diffuser; typedef struct { float damping; float delay; } ty_damper; ty_diffuser *diffuser_make(int, float); void diffuser_free(ty_diffuser *); void diffuser_flush(ty_diffuser *); //float diffuser_do(ty_diffuser *, float); ty_damper *damper_make(float); void damper_free(ty_damper *); void damper_flush(ty_damper *); //void damper_set(ty_damper *, float); //float damper_do(ty_damper *, float); ty_fixeddelay *fixeddelay_make(int); void fixeddelay_free(ty_fixeddelay *); void fixeddelay_flush(ty_fixeddelay *); //float fixeddelay_read(ty_fixeddelay *, int); //void fixeddelay_write(ty_fixeddelay *, float); int isprime(int); int nearest_prime(int, float); static inline float diffuser_do(ty_diffuser *p, float x) { float y,w; w = x - p->buf[p->idx]*p->coeff; w = flush_to_zero(w); y = p->buf[p->idx] + w*p->coeff; p->buf[p->idx] = w; p->idx = (p->idx + 1) % p->size; return(y); } static inline float fixeddelay_read(ty_fixeddelay *p, int n) { int i; i = (p->idx - n + p->size) % p->size; return(p->buf[i]); } static inline void fixeddelay_write(ty_fixeddelay *p, float x) { p->buf[p->idx] = x; p->idx = (p->idx + 1) % p->size; } static inline void damper_set(ty_damper *p, float damping) { p->damping = damping; } static inline float damper_do(ty_damper *p, float x) { float y; y = x*(1.0-p->damping) + p->delay*p->damping; p->delay = y; return(y); } #endif lmms-1.1.3/plugins/LadspaEffect/swh/gverb_1216.c000066400000000000000000000307411247673406200212310ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "gverb_1216.xml" /* GVerb algorithm designed and implemented by Juhana Sadeharju. LADSPA implementation and GVerb speeds ups by Steve Harris. Comments and suggestions should be mailed to Juhana Sadeharju (kouhia at nic funet fi). */ #include "ladspa-util.h" #include "gverb/gverbdsp.h" #include "gverb/gverb.h" #define GVERB_ROOMSIZE 0 #define GVERB_REVTIME 1 #define GVERB_DAMPING 2 #define GVERB_INPUTBANDWIDTH 3 #define GVERB_DRYLEVEL 4 #define GVERB_EARLYLEVEL 5 #define GVERB_TAILLEVEL 6 #define GVERB_INPUT 7 #define GVERB_OUTL 8 #define GVERB_OUTR 9 static LADSPA_Descriptor *gverbDescriptor = NULL; typedef struct { LADSPA_Data *roomsize; LADSPA_Data *revtime; LADSPA_Data *damping; LADSPA_Data *inputbandwidth; LADSPA_Data *drylevel; LADSPA_Data *earlylevel; LADSPA_Data *taillevel; LADSPA_Data *input; LADSPA_Data *outl; LADSPA_Data *outr; ty_gverb * verb; LADSPA_Data run_adding_gain; } Gverb; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return gverbDescriptor; default: return NULL; } } static void activateGverb(LADSPA_Handle instance) { Gverb *plugin_data = (Gverb *)instance; ty_gverb *verb = plugin_data->verb; #line 54 "gverb_1216.xml" gverb_flush(plugin_data->verb); plugin_data->verb = verb; } static void cleanupGverb(LADSPA_Handle instance) { #line 58 "gverb_1216.xml" Gverb *plugin_data = (Gverb *)instance; gverb_free(plugin_data->verb); free(instance); } static void connectPortGverb( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Gverb *plugin; plugin = (Gverb *)instance; switch (port) { case GVERB_ROOMSIZE: plugin->roomsize = data; break; case GVERB_REVTIME: plugin->revtime = data; break; case GVERB_DAMPING: plugin->damping = data; break; case GVERB_INPUTBANDWIDTH: plugin->inputbandwidth = data; break; case GVERB_DRYLEVEL: plugin->drylevel = data; break; case GVERB_EARLYLEVEL: plugin->earlylevel = data; break; case GVERB_TAILLEVEL: plugin->taillevel = data; break; case GVERB_INPUT: plugin->input = data; break; case GVERB_OUTL: plugin->outl = data; break; case GVERB_OUTR: plugin->outr = data; break; } } static LADSPA_Handle instantiateGverb( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Gverb *plugin_data = (Gverb *)malloc(sizeof(Gverb)); ty_gverb *verb = NULL; #line 50 "gverb_1216.xml" verb = gverb_new(s_rate, 300.0f, 50.0f, 7.0f, 0.5f, 15.0f, 0.5f, 0.5f, 0.5f); plugin_data->verb = verb; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runGverb(LADSPA_Handle instance, unsigned long sample_count) { Gverb *plugin_data = (Gverb *)instance; /* Roomsize (m) (float value) */ const LADSPA_Data roomsize = *(plugin_data->roomsize); /* Reverb time (s) (float value) */ const LADSPA_Data revtime = *(plugin_data->revtime); /* Damping (float value) */ const LADSPA_Data damping = *(plugin_data->damping); /* Input bandwidth (float value) */ const LADSPA_Data inputbandwidth = *(plugin_data->inputbandwidth); /* Dry signal level (dB) (float value) */ const LADSPA_Data drylevel = *(plugin_data->drylevel); /* Early reflection level (dB) (float value) */ const LADSPA_Data earlylevel = *(plugin_data->earlylevel); /* Tail level (dB) (float value) */ const LADSPA_Data taillevel = *(plugin_data->taillevel); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const outl = plugin_data->outl; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const outr = plugin_data->outr; ty_gverb * verb = plugin_data->verb; #line 62 "gverb_1216.xml" unsigned long pos; float l, r; float dryc = DB_CO(drylevel); gverb_set_roomsize(verb, roomsize); gverb_set_revtime(verb, revtime); gverb_set_damping(verb, damping); gverb_set_inputbandwidth(verb, inputbandwidth); gverb_set_earlylevel(verb, DB_CO(earlylevel)); gverb_set_taillevel(verb, DB_CO(taillevel)); for (pos = 0; pos < sample_count; pos++) { gverb_do(verb, input[pos], &l, &r); buffer_write(outl[pos], l + input[pos] * dryc); buffer_write(outr[pos], r + input[pos] * dryc); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainGverb(LADSPA_Handle instance, LADSPA_Data gain) { ((Gverb *)instance)->run_adding_gain = gain; } static void runAddingGverb(LADSPA_Handle instance, unsigned long sample_count) { Gverb *plugin_data = (Gverb *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Roomsize (m) (float value) */ const LADSPA_Data roomsize = *(plugin_data->roomsize); /* Reverb time (s) (float value) */ const LADSPA_Data revtime = *(plugin_data->revtime); /* Damping (float value) */ const LADSPA_Data damping = *(plugin_data->damping); /* Input bandwidth (float value) */ const LADSPA_Data inputbandwidth = *(plugin_data->inputbandwidth); /* Dry signal level (dB) (float value) */ const LADSPA_Data drylevel = *(plugin_data->drylevel); /* Early reflection level (dB) (float value) */ const LADSPA_Data earlylevel = *(plugin_data->earlylevel); /* Tail level (dB) (float value) */ const LADSPA_Data taillevel = *(plugin_data->taillevel); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const outl = plugin_data->outl; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const outr = plugin_data->outr; ty_gverb * verb = plugin_data->verb; #line 62 "gverb_1216.xml" unsigned long pos; float l, r; float dryc = DB_CO(drylevel); gverb_set_roomsize(verb, roomsize); gverb_set_revtime(verb, revtime); gverb_set_damping(verb, damping); gverb_set_inputbandwidth(verb, inputbandwidth); gverb_set_earlylevel(verb, DB_CO(earlylevel)); gverb_set_taillevel(verb, DB_CO(taillevel)); for (pos = 0; pos < sample_count; pos++) { gverb_do(verb, input[pos], &l, &r); buffer_write(outl[pos], l + input[pos] * dryc); buffer_write(outr[pos], r + input[pos] * dryc); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif gverbDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (gverbDescriptor) { gverbDescriptor->UniqueID = 1216; gverbDescriptor->Label = "gverb"; gverbDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; gverbDescriptor->Name = D_("GVerb"); gverbDescriptor->Maker = "Juhana Sadeharju , LADSPAification by Steve Harris "; gverbDescriptor->Copyright = "GPL"; gverbDescriptor->PortCount = 10; port_descriptors = (LADSPA_PortDescriptor *)calloc(10, sizeof(LADSPA_PortDescriptor)); gverbDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(10, sizeof(LADSPA_PortRangeHint)); gverbDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(10, sizeof(char*)); gverbDescriptor->PortNames = (const char **)port_names; /* Parameters for Roomsize (m) */ port_descriptors[GVERB_ROOMSIZE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_ROOMSIZE] = D_("Roomsize (m)"); port_range_hints[GVERB_ROOMSIZE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[GVERB_ROOMSIZE].LowerBound = 1; port_range_hints[GVERB_ROOMSIZE].UpperBound = 300; /* Parameters for Reverb time (s) */ port_descriptors[GVERB_REVTIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_REVTIME] = D_("Reverb time (s)"); port_range_hints[GVERB_REVTIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[GVERB_REVTIME].LowerBound = 0.1; port_range_hints[GVERB_REVTIME].UpperBound = 30; /* Parameters for Damping */ port_descriptors[GVERB_DAMPING] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_DAMPING] = D_("Damping"); port_range_hints[GVERB_DAMPING].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[GVERB_DAMPING].LowerBound = 0; port_range_hints[GVERB_DAMPING].UpperBound = 1; /* Parameters for Input bandwidth */ port_descriptors[GVERB_INPUTBANDWIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_INPUTBANDWIDTH] = D_("Input bandwidth"); port_range_hints[GVERB_INPUTBANDWIDTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[GVERB_INPUTBANDWIDTH].LowerBound = 0; port_range_hints[GVERB_INPUTBANDWIDTH].UpperBound = 1; /* Parameters for Dry signal level (dB) */ port_descriptors[GVERB_DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_DRYLEVEL] = D_("Dry signal level (dB)"); port_range_hints[GVERB_DRYLEVEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[GVERB_DRYLEVEL].LowerBound = -70; port_range_hints[GVERB_DRYLEVEL].UpperBound = 0; /* Parameters for Early reflection level (dB) */ port_descriptors[GVERB_EARLYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_EARLYLEVEL] = D_("Early reflection level (dB)"); port_range_hints[GVERB_EARLYLEVEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[GVERB_EARLYLEVEL].LowerBound = -70; port_range_hints[GVERB_EARLYLEVEL].UpperBound = 0; /* Parameters for Tail level (dB) */ port_descriptors[GVERB_TAILLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[GVERB_TAILLEVEL] = D_("Tail level (dB)"); port_range_hints[GVERB_TAILLEVEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[GVERB_TAILLEVEL].LowerBound = -70; port_range_hints[GVERB_TAILLEVEL].UpperBound = 0; /* Parameters for Input */ port_descriptors[GVERB_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[GVERB_INPUT] = D_("Input"); port_range_hints[GVERB_INPUT].HintDescriptor = 0; /* Parameters for Left output */ port_descriptors[GVERB_OUTL] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GVERB_OUTL] = D_("Left output"); port_range_hints[GVERB_OUTL].HintDescriptor = 0; /* Parameters for Right output */ port_descriptors[GVERB_OUTR] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[GVERB_OUTR] = D_("Right output"); port_range_hints[GVERB_OUTR].HintDescriptor = 0; gverbDescriptor->activate = activateGverb; gverbDescriptor->cleanup = cleanupGverb; gverbDescriptor->connect_port = connectPortGverb; gverbDescriptor->deactivate = NULL; gverbDescriptor->instantiate = instantiateGverb; gverbDescriptor->run = runGverb; gverbDescriptor->run_adding = runAddingGverb; gverbDescriptor->set_run_adding_gain = setRunAddingGainGverb; } } void __attribute__((destructor)) swh_fini() { if (gverbDescriptor) { free((LADSPA_PortDescriptor *)gverbDescriptor->PortDescriptors); free((char **)gverbDescriptor->PortNames); free((LADSPA_PortRangeHint *)gverbDescriptor->PortRangeHints); free(gverbDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/hard_limiter_1413.c000066400000000000000000000204771247673406200225730ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "hard_limiter_1413.xml" #include #include "ladspa-util.h" #define HARDLIMITER_LIMIT_DB 0 #define HARDLIMITER_WET_GAIN 1 #define HARDLIMITER_RES_GAIN 2 #define HARDLIMITER_INPUT 3 #define HARDLIMITER_OUTPUT 4 static LADSPA_Descriptor *hardLimiterDescriptor = NULL; typedef struct { LADSPA_Data *limit_db; LADSPA_Data *wet_gain; LADSPA_Data *res_gain; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } HardLimiter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return hardLimiterDescriptor; default: return NULL; } } static void cleanupHardLimiter(LADSPA_Handle instance) { free(instance); } static void connectPortHardLimiter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { HardLimiter *plugin; plugin = (HardLimiter *)instance; switch (port) { case HARDLIMITER_LIMIT_DB: plugin->limit_db = data; break; case HARDLIMITER_WET_GAIN: plugin->wet_gain = data; break; case HARDLIMITER_RES_GAIN: plugin->res_gain = data; break; case HARDLIMITER_INPUT: plugin->input = data; break; case HARDLIMITER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateHardLimiter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { HardLimiter *plugin_data = (HardLimiter *)malloc(sizeof(HardLimiter)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runHardLimiter(LADSPA_Handle instance, unsigned long sample_count) { HardLimiter *plugin_data = (HardLimiter *)instance; /* dB limit (float value) */ const LADSPA_Data limit_db = *(plugin_data->limit_db); /* Wet level (float value) */ const LADSPA_Data wet_gain = *(plugin_data->wet_gain); /* Residue level (float value) */ const LADSPA_Data res_gain = *(plugin_data->res_gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 21 "hard_limiter_1413.xml" unsigned long i; for (i = 0; i < sample_count; i++) { float limit_g = pow(10, limit_db / 20); float sign = input[i] < 0.0 ? -1.0 : 1.0; float data = input[i] * sign; float residue = data > limit_g ? data - limit_g : 0.0; data -= residue; buffer_write(output[i], sign * (wet_gain * data + res_gain * residue)); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainHardLimiter(LADSPA_Handle instance, LADSPA_Data gain) { ((HardLimiter *)instance)->run_adding_gain = gain; } static void runAddingHardLimiter(LADSPA_Handle instance, unsigned long sample_count) { HardLimiter *plugin_data = (HardLimiter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* dB limit (float value) */ const LADSPA_Data limit_db = *(plugin_data->limit_db); /* Wet level (float value) */ const LADSPA_Data wet_gain = *(plugin_data->wet_gain); /* Residue level (float value) */ const LADSPA_Data res_gain = *(plugin_data->res_gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 21 "hard_limiter_1413.xml" unsigned long i; for (i = 0; i < sample_count; i++) { float limit_g = pow(10, limit_db / 20); float sign = input[i] < 0.0 ? -1.0 : 1.0; float data = input[i] * sign; float residue = data > limit_g ? data - limit_g : 0.0; data -= residue; buffer_write(output[i], sign * (wet_gain * data + res_gain * residue)); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif hardLimiterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (hardLimiterDescriptor) { hardLimiterDescriptor->UniqueID = 1413; hardLimiterDescriptor->Label = "hardLimiter"; hardLimiterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; hardLimiterDescriptor->Name = D_("Hard Limiter"); hardLimiterDescriptor->Maker = "Marcus Andersson"; hardLimiterDescriptor->Copyright = "GPL"; hardLimiterDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); hardLimiterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); hardLimiterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); hardLimiterDescriptor->PortNames = (const char **)port_names; /* Parameters for dB limit */ port_descriptors[HARDLIMITER_LIMIT_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARDLIMITER_LIMIT_DB] = D_("dB limit"); port_range_hints[HARDLIMITER_LIMIT_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARDLIMITER_LIMIT_DB].LowerBound = -50.0; port_range_hints[HARDLIMITER_LIMIT_DB].UpperBound = 0.0; /* Parameters for Wet level */ port_descriptors[HARDLIMITER_WET_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARDLIMITER_WET_GAIN] = D_("Wet level"); port_range_hints[HARDLIMITER_WET_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[HARDLIMITER_WET_GAIN].LowerBound = 0.0; port_range_hints[HARDLIMITER_WET_GAIN].UpperBound = 1.0; /* Parameters for Residue level */ port_descriptors[HARDLIMITER_RES_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARDLIMITER_RES_GAIN] = D_("Residue level"); port_range_hints[HARDLIMITER_RES_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARDLIMITER_RES_GAIN].LowerBound = 0.0; port_range_hints[HARDLIMITER_RES_GAIN].UpperBound = 1.0; /* Parameters for Input */ port_descriptors[HARDLIMITER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[HARDLIMITER_INPUT] = D_("Input"); port_range_hints[HARDLIMITER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[HARDLIMITER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[HARDLIMITER_OUTPUT] = D_("Output"); port_range_hints[HARDLIMITER_OUTPUT].HintDescriptor = 0; hardLimiterDescriptor->activate = NULL; hardLimiterDescriptor->cleanup = cleanupHardLimiter; hardLimiterDescriptor->connect_port = connectPortHardLimiter; hardLimiterDescriptor->deactivate = NULL; hardLimiterDescriptor->instantiate = instantiateHardLimiter; hardLimiterDescriptor->run = runHardLimiter; hardLimiterDescriptor->run_adding = runAddingHardLimiter; hardLimiterDescriptor->set_run_adding_gain = setRunAddingGainHardLimiter; } } void __attribute__((destructor)) swh_fini() { if (hardLimiterDescriptor) { free((LADSPA_PortDescriptor *)hardLimiterDescriptor->PortDescriptors); free((char **)hardLimiterDescriptor->PortNames); free((LADSPA_PortRangeHint *)hardLimiterDescriptor->PortRangeHints); free(hardLimiterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/harmonic_gen_1220.c000066400000000000000000000405511247673406200225500ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "harmonic_gen_1220.xml" #define HARMONICS 11 /* Calculate Chebychev coefficents from partial magnitudes, adapted from * example in Num. Rec. */ void chebpc(float c[], float d[]) { int k, j; float sv, dd[HARMONICS]; for (j = 0; j < HARMONICS; j++) { d[j] = dd[j] = 0.0; } d[0] = c[HARMONICS - 1]; for (j = HARMONICS - 2; j >= 1; j--) { for (k = HARMONICS - j; k >= 1; k--) { sv = d[k]; d[k] = 2.0 * d[k - 1] - dd[k]; dd[k] = sv; } sv = d[0]; d[0] = -dd[0] + c[j]; dd[0] = sv; } for (j = HARMONICS - 1; j >= 1; j--) { d[j] = d[j - 1] - dd[j]; } d[0] = -dd[0] + 0.5 * c[0]; } #define HARMONICGEN_MAG_1 0 #define HARMONICGEN_MAG_2 1 #define HARMONICGEN_MAG_3 2 #define HARMONICGEN_MAG_4 3 #define HARMONICGEN_MAG_5 4 #define HARMONICGEN_MAG_6 5 #define HARMONICGEN_MAG_7 6 #define HARMONICGEN_MAG_8 7 #define HARMONICGEN_MAG_9 8 #define HARMONICGEN_MAG_10 9 #define HARMONICGEN_INPUT 10 #define HARMONICGEN_OUTPUT 11 static LADSPA_Descriptor *harmonicGenDescriptor = NULL; typedef struct { LADSPA_Data *mag_1; LADSPA_Data *mag_2; LADSPA_Data *mag_3; LADSPA_Data *mag_4; LADSPA_Data *mag_5; LADSPA_Data *mag_6; LADSPA_Data *mag_7; LADSPA_Data *mag_8; LADSPA_Data *mag_9; LADSPA_Data *mag_10; LADSPA_Data *input; LADSPA_Data *output; float itm1; float otm1; LADSPA_Data run_adding_gain; } HarmonicGen; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return harmonicGenDescriptor; default: return NULL; } } static void activateHarmonicGen(LADSPA_Handle instance) { HarmonicGen *plugin_data = (HarmonicGen *)instance; float itm1 = plugin_data->itm1; float otm1 = plugin_data->otm1; #line 56 "harmonic_gen_1220.xml" itm1 = 0.0f; otm1 = 0.0f; plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } static void cleanupHarmonicGen(LADSPA_Handle instance) { free(instance); } static void connectPortHarmonicGen( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { HarmonicGen *plugin; plugin = (HarmonicGen *)instance; switch (port) { case HARMONICGEN_MAG_1: plugin->mag_1 = data; break; case HARMONICGEN_MAG_2: plugin->mag_2 = data; break; case HARMONICGEN_MAG_3: plugin->mag_3 = data; break; case HARMONICGEN_MAG_4: plugin->mag_4 = data; break; case HARMONICGEN_MAG_5: plugin->mag_5 = data; break; case HARMONICGEN_MAG_6: plugin->mag_6 = data; break; case HARMONICGEN_MAG_7: plugin->mag_7 = data; break; case HARMONICGEN_MAG_8: plugin->mag_8 = data; break; case HARMONICGEN_MAG_9: plugin->mag_9 = data; break; case HARMONICGEN_MAG_10: plugin->mag_10 = data; break; case HARMONICGEN_INPUT: plugin->input = data; break; case HARMONICGEN_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateHarmonicGen( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { HarmonicGen *plugin_data = (HarmonicGen *)malloc(sizeof(HarmonicGen)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runHarmonicGen(LADSPA_Handle instance, unsigned long sample_count) { HarmonicGen *plugin_data = (HarmonicGen *)instance; /* Fundamental magnitude (float value) */ const LADSPA_Data mag_1 = *(plugin_data->mag_1); /* 2nd harmonic magnitude (float value) */ const LADSPA_Data mag_2 = *(plugin_data->mag_2); /* 3rd harmonic magnitude (float value) */ const LADSPA_Data mag_3 = *(plugin_data->mag_3); /* 4th harmonic magnitude (float value) */ const LADSPA_Data mag_4 = *(plugin_data->mag_4); /* 5th harmonic magnitude (float value) */ const LADSPA_Data mag_5 = *(plugin_data->mag_5); /* 6th harmonic magnitude (float value) */ const LADSPA_Data mag_6 = *(plugin_data->mag_6); /* 7th harmonic magnitude (float value) */ const LADSPA_Data mag_7 = *(plugin_data->mag_7); /* 8th harmonic magnitude (float value) */ const LADSPA_Data mag_8 = *(plugin_data->mag_8); /* 9th harmonic magnitude (float value) */ const LADSPA_Data mag_9 = *(plugin_data->mag_9); /* 10th harmonic magnitude (float value) */ const LADSPA_Data mag_10 = *(plugin_data->mag_10); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float itm1 = plugin_data->itm1; float otm1 = plugin_data->otm1; #line 61 "harmonic_gen_1220.xml" unsigned long pos, i; float mag_fix; float mag[HARMONICS] = {0.0f, mag_1, mag_2, mag_3, mag_4, mag_5, mag_6, mag_7, mag_8, mag_9, mag_10}; float p[HARMONICS]; // Normalise magnitudes mag_fix = (fabs(mag_1) + fabs(mag_2) + fabs(mag_3) + fabs(mag_4) + fabs(mag_5) + fabs(mag_6) + fabs(mag_7) + fabs(mag_8) + fabs(mag_9) + fabs(mag_10)); if (mag_fix < 1.0f) { mag_fix = 1.0f; } else { mag_fix = 1.0f / mag_fix; } for (i=0; iitm1 = itm1; plugin_data->otm1 = otm1; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainHarmonicGen(LADSPA_Handle instance, LADSPA_Data gain) { ((HarmonicGen *)instance)->run_adding_gain = gain; } static void runAddingHarmonicGen(LADSPA_Handle instance, unsigned long sample_count) { HarmonicGen *plugin_data = (HarmonicGen *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Fundamental magnitude (float value) */ const LADSPA_Data mag_1 = *(plugin_data->mag_1); /* 2nd harmonic magnitude (float value) */ const LADSPA_Data mag_2 = *(plugin_data->mag_2); /* 3rd harmonic magnitude (float value) */ const LADSPA_Data mag_3 = *(plugin_data->mag_3); /* 4th harmonic magnitude (float value) */ const LADSPA_Data mag_4 = *(plugin_data->mag_4); /* 5th harmonic magnitude (float value) */ const LADSPA_Data mag_5 = *(plugin_data->mag_5); /* 6th harmonic magnitude (float value) */ const LADSPA_Data mag_6 = *(plugin_data->mag_6); /* 7th harmonic magnitude (float value) */ const LADSPA_Data mag_7 = *(plugin_data->mag_7); /* 8th harmonic magnitude (float value) */ const LADSPA_Data mag_8 = *(plugin_data->mag_8); /* 9th harmonic magnitude (float value) */ const LADSPA_Data mag_9 = *(plugin_data->mag_9); /* 10th harmonic magnitude (float value) */ const LADSPA_Data mag_10 = *(plugin_data->mag_10); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float itm1 = plugin_data->itm1; float otm1 = plugin_data->otm1; #line 61 "harmonic_gen_1220.xml" unsigned long pos, i; float mag_fix; float mag[HARMONICS] = {0.0f, mag_1, mag_2, mag_3, mag_4, mag_5, mag_6, mag_7, mag_8, mag_9, mag_10}; float p[HARMONICS]; // Normalise magnitudes mag_fix = (fabs(mag_1) + fabs(mag_2) + fabs(mag_3) + fabs(mag_4) + fabs(mag_5) + fabs(mag_6) + fabs(mag_7) + fabs(mag_8) + fabs(mag_9) + fabs(mag_10)); if (mag_fix < 1.0f) { mag_fix = 1.0f; } else { mag_fix = 1.0f / mag_fix; } for (i=0; iitm1 = itm1; plugin_data->otm1 = otm1; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif harmonicGenDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (harmonicGenDescriptor) { harmonicGenDescriptor->UniqueID = 1220; harmonicGenDescriptor->Label = "harmonicGen"; harmonicGenDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; harmonicGenDescriptor->Name = D_("Harmonic generator"); harmonicGenDescriptor->Maker = "Steve Harris "; harmonicGenDescriptor->Copyright = "GPL"; harmonicGenDescriptor->PortCount = 12; port_descriptors = (LADSPA_PortDescriptor *)calloc(12, sizeof(LADSPA_PortDescriptor)); harmonicGenDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(12, sizeof(LADSPA_PortRangeHint)); harmonicGenDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(12, sizeof(char*)); harmonicGenDescriptor->PortNames = (const char **)port_names; /* Parameters for Fundamental magnitude */ port_descriptors[HARMONICGEN_MAG_1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_1] = D_("Fundamental magnitude"); port_range_hints[HARMONICGEN_MAG_1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[HARMONICGEN_MAG_1].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_1].UpperBound = +1; /* Parameters for 2nd harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_2] = D_("2nd harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_2].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_2].UpperBound = +1; /* Parameters for 3rd harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_3] = D_("3rd harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_3].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_3].UpperBound = +1; /* Parameters for 4th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_4] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_4] = D_("4th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_4].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_4].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_4].UpperBound = +1; /* Parameters for 5th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_5] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_5] = D_("5th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_5].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_5].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_5].UpperBound = +1; /* Parameters for 6th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_6] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_6] = D_("6th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_6].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_6].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_6].UpperBound = +1; /* Parameters for 7th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_7] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_7] = D_("7th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_7].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_7].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_7].UpperBound = +1; /* Parameters for 8th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_8] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_8] = D_("8th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_8].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_8].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_8].UpperBound = +1; /* Parameters for 9th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_9] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_9] = D_("9th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_9].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_9].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_9].UpperBound = +1; /* Parameters for 10th harmonic magnitude */ port_descriptors[HARMONICGEN_MAG_10] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HARMONICGEN_MAG_10] = D_("10th harmonic magnitude"); port_range_hints[HARMONICGEN_MAG_10].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HARMONICGEN_MAG_10].LowerBound = -1; port_range_hints[HARMONICGEN_MAG_10].UpperBound = +1; /* Parameters for Input */ port_descriptors[HARMONICGEN_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[HARMONICGEN_INPUT] = D_("Input"); port_range_hints[HARMONICGEN_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[HARMONICGEN_INPUT].LowerBound = -1; port_range_hints[HARMONICGEN_INPUT].UpperBound = +1; /* Parameters for Output */ port_descriptors[HARMONICGEN_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[HARMONICGEN_OUTPUT] = D_("Output"); port_range_hints[HARMONICGEN_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[HARMONICGEN_OUTPUT].LowerBound = -1; port_range_hints[HARMONICGEN_OUTPUT].UpperBound = +1; harmonicGenDescriptor->activate = activateHarmonicGen; harmonicGenDescriptor->cleanup = cleanupHarmonicGen; harmonicGenDescriptor->connect_port = connectPortHarmonicGen; harmonicGenDescriptor->deactivate = NULL; harmonicGenDescriptor->instantiate = instantiateHarmonicGen; harmonicGenDescriptor->run = runHarmonicGen; harmonicGenDescriptor->run_adding = runAddingHarmonicGen; harmonicGenDescriptor->set_run_adding_gain = setRunAddingGainHarmonicGen; } } void __attribute__((destructor)) swh_fini() { if (harmonicGenDescriptor) { free((LADSPA_PortDescriptor *)harmonicGenDescriptor->PortDescriptors); free((char **)harmonicGenDescriptor->PortNames); free((LADSPA_PortRangeHint *)harmonicGenDescriptor->PortRangeHints); free(harmonicGenDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/hermes_filter_1200.c000066400000000000000000002106551247673406200227510ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "hermes_filter_1200.xml" #include "ladspa-util.h" #include "util/blo.h" // Return the value of the LDO's for given coeffs #define LFO(a,b) (a*lfo1 + b*lfo2) // Ampmod / ringmod two signals together with given depth #define RINGMOD(c,m,d) (c * ((d * 0.5f) * m + (2.0f - d))) // Stuff needed for the soft clipping code #define MAX_AMP 1.0f #define CLIP 0.8f #define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP)) #define CLIP_B (MAX_AMP - 2.0f * CLIP) // Constants to match filter types #define F_LP 1 #define F_HP 2 #define F_BP 3 #define F_BR 4 #define F_AP 5 // Number of filter oversamples #define F_R 3 // Magic number #define NOISE 23 LADSPA_Data *sin_tbl, *tri_tbl, *saw_tbl, *squ_tbl; int tbl_ref_count = 0; long sample_rate; /* Structure to hold parameters for SV filter */ typedef struct { float f; // 2.0*sin(PI*fs/(fc*r)); float q; // 2.0*cos(pow(q, 0.1)*PI*0.5); float qnrm; // sqrt(m/2.0f+0.01f); float h; // high pass output float b; // band pass output float l; // low pass output float p; // peaking output (allpass with resonance) float n; // notch output float *op; // pointer to output value } sv_filter; inline float soft_clip(float sc_in) { if ((sc_in < CLIP) && (sc_in > -CLIP)) { return sc_in; } else if (sc_in > 0.0f) { return MAX_AMP - (CLIP_A / (CLIP_B + sc_in)); } else { return -(MAX_AMP - (CLIP_A / (CLIP_B - sc_in))); } } /* Store data in SVF struct, takes the sampling frequency, cutoff frequency and Q, and fills in the structure passed */ inline void setup_svf(sv_filter *sv, float fs, float fc, float q, int t) { sv->f = 2.0f * sinf(M_PI * fc / (float)(fs * F_R)); sv->q = 2.0f * cosf(powf(q, 0.1f) * M_PI * 0.5f); sv->qnrm = sqrtf(sv->q*0.5f + 0.01f); switch(t) { case F_LP: sv->op = &(sv->l); break; case F_HP: sv->op = &(sv->h); break; case F_BP: sv->op = &(sv->b); break; case F_BR: sv->op = &(sv->n); break; default: sv->op = &(sv->p); } } /* Change the frequency of a running SVF */ inline void setup_f_svf(sv_filter *sv, const float fs, const float fc) { sv->f = 2.0f * sin(M_PI * fc / ((float)(fs * F_R))); } /* Run one sample through the SV filter. Filter is by andy@vellocet */ inline float run_svf(sv_filter *sv, float in) { float out; int i; in = sv->qnrm * in ; for (i=0; i < F_R; i++) { // only needed for pentium chips in = flush_to_zero(in); sv->l = flush_to_zero(sv->l); // very slight waveshape for extra stability sv->b = sv->b - sv->b * sv->b * sv->b * 0.001f; // regular state variable code here // the notch and peaking outputs are optional sv->h = in - sv->l - sv->q * sv->b; sv->b = sv->b + sv->f * sv->h; sv->l = sv->l + sv->f * sv->b; sv->n = sv->l + sv->h; sv->p = sv->l - sv->h; out = *(sv->op); in = out; } return out; } inline int wave_tbl(const float wave) { switch (f_round(wave)) { case 0: return BLO_SINE; break; case 1: return BLO_TRI; break; case 2: return BLO_SAW; break; case 3: return BLO_SQUARE; break; } return NOISE; } #define HERMESFILTER_LFO1_FREQ 0 #define HERMESFILTER_LFO1_WAVE 1 #define HERMESFILTER_LFO2_FREQ 2 #define HERMESFILTER_LFO2_WAVE 3 #define HERMESFILTER_OSC1_FREQ 4 #define HERMESFILTER_OSC1_WAVE 5 #define HERMESFILTER_OSC2_FREQ 6 #define HERMESFILTER_OSC2_WAVE 7 #define HERMESFILTER_RM1_DEPTH 8 #define HERMESFILTER_RM2_DEPTH 9 #define HERMESFILTER_RM3_DEPTH 10 #define HERMESFILTER_OSC1_GAIN_DB 11 #define HERMESFILTER_RM1_GAIN_DB 12 #define HERMESFILTER_OSC2_GAIN_DB 13 #define HERMESFILTER_RM2_GAIN_DB 14 #define HERMESFILTER_IN_GAIN_DB 15 #define HERMESFILTER_RM3_GAIN_DB 16 #define HERMESFILTER_XOVER_LFREQP 17 #define HERMESFILTER_XOVER_UFREQP 18 #define HERMESFILTER_DRIVE1 19 #define HERMESFILTER_DRIVE2 20 #define HERMESFILTER_DRIVE3 21 #define HERMESFILTER_FILT1_TYPE 22 #define HERMESFILTER_FILT1_FREQ 23 #define HERMESFILTER_FILT1_Q 24 #define HERMESFILTER_FILT1_RES 25 #define HERMESFILTER_FILT1_LFO1 26 #define HERMESFILTER_FILT1_LFO2 27 #define HERMESFILTER_FILT2_TYPE 28 #define HERMESFILTER_FILT2_FREQ 29 #define HERMESFILTER_FILT2_Q 30 #define HERMESFILTER_FILT2_RES 31 #define HERMESFILTER_FILT2_LFO1 32 #define HERMESFILTER_FILT2_LFO2 33 #define HERMESFILTER_FILT3_TYPE 34 #define HERMESFILTER_FILT3_FREQ 35 #define HERMESFILTER_FILT3_Q 36 #define HERMESFILTER_FILT3_RES 37 #define HERMESFILTER_FILT3_LFO1 38 #define HERMESFILTER_FILT3_LFO2 39 #define HERMESFILTER_DELA1_LENGTH 40 #define HERMESFILTER_DELA1_FB 41 #define HERMESFILTER_DELA1_WET 42 #define HERMESFILTER_DELA2_LENGTH 43 #define HERMESFILTER_DELA2_FB 44 #define HERMESFILTER_DELA2_WET 45 #define HERMESFILTER_DELA3_LENGTH 46 #define HERMESFILTER_DELA3_FB 47 #define HERMESFILTER_DELA3_WET 48 #define HERMESFILTER_BAND1_GAIN_DB 49 #define HERMESFILTER_BAND2_GAIN_DB 50 #define HERMESFILTER_BAND3_GAIN_DB 51 #define HERMESFILTER_INPUT 52 #define HERMESFILTER_OUTPUT 53 static LADSPA_Descriptor *hermesFilterDescriptor = NULL; typedef struct { LADSPA_Data *lfo1_freq; LADSPA_Data *lfo1_wave; LADSPA_Data *lfo2_freq; LADSPA_Data *lfo2_wave; LADSPA_Data *osc1_freq; LADSPA_Data *osc1_wave; LADSPA_Data *osc2_freq; LADSPA_Data *osc2_wave; LADSPA_Data *rm1_depth; LADSPA_Data *rm2_depth; LADSPA_Data *rm3_depth; LADSPA_Data *osc1_gain_db; LADSPA_Data *rm1_gain_db; LADSPA_Data *osc2_gain_db; LADSPA_Data *rm2_gain_db; LADSPA_Data *in_gain_db; LADSPA_Data *rm3_gain_db; LADSPA_Data *xover_lfreqp; LADSPA_Data *xover_ufreqp; LADSPA_Data *drive1; LADSPA_Data *drive2; LADSPA_Data *drive3; LADSPA_Data *filt1_type; LADSPA_Data *filt1_freq; LADSPA_Data *filt1_q; LADSPA_Data *filt1_res; LADSPA_Data *filt1_lfo1; LADSPA_Data *filt1_lfo2; LADSPA_Data *filt2_type; LADSPA_Data *filt2_freq; LADSPA_Data *filt2_q; LADSPA_Data *filt2_res; LADSPA_Data *filt2_lfo1; LADSPA_Data *filt2_lfo2; LADSPA_Data *filt3_type; LADSPA_Data *filt3_freq; LADSPA_Data *filt3_q; LADSPA_Data *filt3_res; LADSPA_Data *filt3_lfo1; LADSPA_Data *filt3_lfo2; LADSPA_Data *dela1_length; LADSPA_Data *dela1_fb; LADSPA_Data *dela1_wet; LADSPA_Data *dela2_length; LADSPA_Data *dela2_fb; LADSPA_Data *dela2_wet; LADSPA_Data *dela3_length; LADSPA_Data *dela3_fb; LADSPA_Data *dela3_wet; LADSPA_Data *band1_gain_db; LADSPA_Data *band2_gain_db; LADSPA_Data *band3_gain_db; LADSPA_Data *input; LADSPA_Data *output; long count; float ** dela_data; int * dela_pos; sv_filter ** filt_data; float lfo1; blo_h_osc * lfo1_d; float lfo1_phase; float lfo2; blo_h_osc * lfo2_d; float lfo2_phase; blo_h_osc * osc1_d; blo_h_osc * osc2_d; blo_h_tables *tables; sv_filter * xover_b1_data; sv_filter * xover_b2_data; LADSPA_Data run_adding_gain; } HermesFilter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return hermesFilterDescriptor; default: return NULL; } } static void activateHermesFilter(LADSPA_Handle instance) { HermesFilter *plugin_data = (HermesFilter *)instance; long count = plugin_data->count; float **dela_data = plugin_data->dela_data; int *dela_pos = plugin_data->dela_pos; sv_filter **filt_data = plugin_data->filt_data; float lfo1 = plugin_data->lfo1; blo_h_osc *lfo1_d = plugin_data->lfo1_d; float lfo1_phase = plugin_data->lfo1_phase; float lfo2 = plugin_data->lfo2; blo_h_osc *lfo2_d = plugin_data->lfo2_d; float lfo2_phase = plugin_data->lfo2_phase; blo_h_osc *osc1_d = plugin_data->osc1_d; blo_h_osc *osc2_d = plugin_data->osc2_d; blo_h_tables *tables = plugin_data->tables; sv_filter *xover_b1_data = plugin_data->xover_b1_data; sv_filter *xover_b2_data = plugin_data->xover_b2_data; #line 186 "hermes_filter_1200.xml" setup_svf(filt_data[0], 0, 0, 0, 0); setup_svf(filt_data[1], 0, 0, 0, 0); setup_svf(filt_data[2], 0, 0, 0, 0); setup_svf(xover_b1_data, sample_rate, 1000.0, 0.0, F_HP); setup_svf(xover_b2_data, sample_rate, 100.0, 0.0, F_LP); memset(dela_data[0], 0, sample_rate * 2 * sizeof(float)); memset(dela_data[1], 0, sample_rate * 2 * sizeof(float)); memset(dela_data[2], 0, sample_rate * 2 * sizeof(float)); dela_pos[0] = 0; dela_pos[1] = 0; dela_pos[2] = 0; /* osc1_d->ph.all = 0; osc2_d->ph.all = 0; lfo1_d->ph.all = 0; lfo2_d->ph.all = 0; */ count = 0; lfo1 = 0.0f; lfo2 = 0.0f; lfo1_phase = 0.0f; lfo2_phase = 0.0f; plugin_data->count = count; plugin_data->dela_data = dela_data; plugin_data->dela_pos = dela_pos; plugin_data->filt_data = filt_data; plugin_data->lfo1 = lfo1; plugin_data->lfo1_d = lfo1_d; plugin_data->lfo1_phase = lfo1_phase; plugin_data->lfo2 = lfo2; plugin_data->lfo2_d = lfo2_d; plugin_data->lfo2_phase = lfo2_phase; plugin_data->osc1_d = osc1_d; plugin_data->osc2_d = osc2_d; plugin_data->tables = tables; plugin_data->xover_b1_data = xover_b1_data; plugin_data->xover_b2_data = xover_b2_data; } static void cleanupHermesFilter(LADSPA_Handle instance) { #line 211 "hermes_filter_1200.xml" HermesFilter *plugin_data = (HermesFilter *)instance; free(plugin_data->filt_data[0]); free(plugin_data->filt_data[1]); free(plugin_data->filt_data[2]); free(plugin_data->dela_data[0]); free(plugin_data->dela_data[1]); free(plugin_data->dela_data[2]); free(plugin_data->filt_data); free(plugin_data->dela_data); free(plugin_data->dela_pos); free(plugin_data->xover_b1_data); free(plugin_data->xover_b2_data); blo_h_free(plugin_data->osc1_d); blo_h_free(plugin_data->osc2_d); blo_h_free(plugin_data->lfo1_d); blo_h_free(plugin_data->lfo2_d); blo_h_tables_free(plugin_data->tables); free(instance); } static void connectPortHermesFilter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { HermesFilter *plugin; plugin = (HermesFilter *)instance; switch (port) { case HERMESFILTER_LFO1_FREQ: plugin->lfo1_freq = data; break; case HERMESFILTER_LFO1_WAVE: plugin->lfo1_wave = data; break; case HERMESFILTER_LFO2_FREQ: plugin->lfo2_freq = data; break; case HERMESFILTER_LFO2_WAVE: plugin->lfo2_wave = data; break; case HERMESFILTER_OSC1_FREQ: plugin->osc1_freq = data; break; case HERMESFILTER_OSC1_WAVE: plugin->osc1_wave = data; break; case HERMESFILTER_OSC2_FREQ: plugin->osc2_freq = data; break; case HERMESFILTER_OSC2_WAVE: plugin->osc2_wave = data; break; case HERMESFILTER_RM1_DEPTH: plugin->rm1_depth = data; break; case HERMESFILTER_RM2_DEPTH: plugin->rm2_depth = data; break; case HERMESFILTER_RM3_DEPTH: plugin->rm3_depth = data; break; case HERMESFILTER_OSC1_GAIN_DB: plugin->osc1_gain_db = data; break; case HERMESFILTER_RM1_GAIN_DB: plugin->rm1_gain_db = data; break; case HERMESFILTER_OSC2_GAIN_DB: plugin->osc2_gain_db = data; break; case HERMESFILTER_RM2_GAIN_DB: plugin->rm2_gain_db = data; break; case HERMESFILTER_IN_GAIN_DB: plugin->in_gain_db = data; break; case HERMESFILTER_RM3_GAIN_DB: plugin->rm3_gain_db = data; break; case HERMESFILTER_XOVER_LFREQP: plugin->xover_lfreqp = data; break; case HERMESFILTER_XOVER_UFREQP: plugin->xover_ufreqp = data; break; case HERMESFILTER_DRIVE1: plugin->drive1 = data; break; case HERMESFILTER_DRIVE2: plugin->drive2 = data; break; case HERMESFILTER_DRIVE3: plugin->drive3 = data; break; case HERMESFILTER_FILT1_TYPE: plugin->filt1_type = data; break; case HERMESFILTER_FILT1_FREQ: plugin->filt1_freq = data; break; case HERMESFILTER_FILT1_Q: plugin->filt1_q = data; break; case HERMESFILTER_FILT1_RES: plugin->filt1_res = data; break; case HERMESFILTER_FILT1_LFO1: plugin->filt1_lfo1 = data; break; case HERMESFILTER_FILT1_LFO2: plugin->filt1_lfo2 = data; break; case HERMESFILTER_FILT2_TYPE: plugin->filt2_type = data; break; case HERMESFILTER_FILT2_FREQ: plugin->filt2_freq = data; break; case HERMESFILTER_FILT2_Q: plugin->filt2_q = data; break; case HERMESFILTER_FILT2_RES: plugin->filt2_res = data; break; case HERMESFILTER_FILT2_LFO1: plugin->filt2_lfo1 = data; break; case HERMESFILTER_FILT2_LFO2: plugin->filt2_lfo2 = data; break; case HERMESFILTER_FILT3_TYPE: plugin->filt3_type = data; break; case HERMESFILTER_FILT3_FREQ: plugin->filt3_freq = data; break; case HERMESFILTER_FILT3_Q: plugin->filt3_q = data; break; case HERMESFILTER_FILT3_RES: plugin->filt3_res = data; break; case HERMESFILTER_FILT3_LFO1: plugin->filt3_lfo1 = data; break; case HERMESFILTER_FILT3_LFO2: plugin->filt3_lfo2 = data; break; case HERMESFILTER_DELA1_LENGTH: plugin->dela1_length = data; break; case HERMESFILTER_DELA1_FB: plugin->dela1_fb = data; break; case HERMESFILTER_DELA1_WET: plugin->dela1_wet = data; break; case HERMESFILTER_DELA2_LENGTH: plugin->dela2_length = data; break; case HERMESFILTER_DELA2_FB: plugin->dela2_fb = data; break; case HERMESFILTER_DELA2_WET: plugin->dela2_wet = data; break; case HERMESFILTER_DELA3_LENGTH: plugin->dela3_length = data; break; case HERMESFILTER_DELA3_FB: plugin->dela3_fb = data; break; case HERMESFILTER_DELA3_WET: plugin->dela3_wet = data; break; case HERMESFILTER_BAND1_GAIN_DB: plugin->band1_gain_db = data; break; case HERMESFILTER_BAND2_GAIN_DB: plugin->band2_gain_db = data; break; case HERMESFILTER_BAND3_GAIN_DB: plugin->band3_gain_db = data; break; case HERMESFILTER_INPUT: plugin->input = data; break; case HERMESFILTER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateHermesFilter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { HermesFilter *plugin_data = (HermesFilter *)malloc(sizeof(HermesFilter)); long count; float **dela_data = NULL; int *dela_pos = NULL; sv_filter **filt_data = NULL; float lfo1; blo_h_osc *lfo1_d = NULL; float lfo1_phase; float lfo2; blo_h_osc *lfo2_d = NULL; float lfo2_phase; blo_h_osc *osc1_d = NULL; blo_h_osc *osc2_d = NULL; blo_h_tables *tables = NULL; sv_filter *xover_b1_data = NULL; sv_filter *xover_b2_data = NULL; #line 157 "hermes_filter_1200.xml" long i; sample_rate = s_rate; count = 0; tables = blo_h_tables_new(1024); osc1_d = blo_h_new(tables, BLO_SINE, (float)s_rate); osc2_d = blo_h_new(tables, BLO_SINE, (float)s_rate); lfo1_d = blo_h_new(tables, BLO_SINE, (float)s_rate); lfo2_d = blo_h_new(tables, BLO_SINE, (float)s_rate); xover_b1_data = calloc(1, sizeof(sv_filter)); xover_b2_data = calloc(1, sizeof(sv_filter)); dela_data = malloc(3 * sizeof(float)); dela_pos = malloc(3 * sizeof(int)); filt_data = malloc(3 * sizeof(sv_filter *)); for (i = 0; i < 3; i++) { dela_data[i] = malloc(sample_rate * 2 * sizeof(float)); dela_pos[i] = 0; filt_data[i] = calloc(1, sizeof(sv_filter)); } lfo1 = 0.0f; lfo2 = 0.0f; lfo1_phase = 0.0f; lfo2_phase = 0.0f; plugin_data->count = count; plugin_data->dela_data = dela_data; plugin_data->dela_pos = dela_pos; plugin_data->filt_data = filt_data; plugin_data->lfo1 = lfo1; plugin_data->lfo1_d = lfo1_d; plugin_data->lfo1_phase = lfo1_phase; plugin_data->lfo2 = lfo2; plugin_data->lfo2_d = lfo2_d; plugin_data->lfo2_phase = lfo2_phase; plugin_data->osc1_d = osc1_d; plugin_data->osc2_d = osc2_d; plugin_data->tables = tables; plugin_data->xover_b1_data = xover_b1_data; plugin_data->xover_b2_data = xover_b2_data; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count) { HermesFilter *plugin_data = (HermesFilter *)instance; /* LFO1 freq (Hz) (float value) */ const LADSPA_Data lfo1_freq = *(plugin_data->lfo1_freq); /* LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ const LADSPA_Data lfo1_wave = *(plugin_data->lfo1_wave); /* LFO2 freq (Hz) (float value) */ const LADSPA_Data lfo2_freq = *(plugin_data->lfo2_freq); /* LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ const LADSPA_Data lfo2_wave = *(plugin_data->lfo2_wave); /* Osc1 freq (Hz) (float value) */ const LADSPA_Data osc1_freq = *(plugin_data->osc1_freq); /* Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ const LADSPA_Data osc1_wave = *(plugin_data->osc1_wave); /* Osc2 freq (Hz) (float value) */ const LADSPA_Data osc2_freq = *(plugin_data->osc2_freq); /* Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ const LADSPA_Data osc2_wave = *(plugin_data->osc2_wave); /* Ringmod 1 depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data rm1_depth = *(plugin_data->rm1_depth); /* Ringmod 2 depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data rm2_depth = *(plugin_data->rm2_depth); /* Ringmod 3 depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data rm3_depth = *(plugin_data->rm3_depth); /* Osc1 gain (dB) (float value) */ const LADSPA_Data osc1_gain_db = *(plugin_data->osc1_gain_db); /* RM1 gain (dB) (float value) */ const LADSPA_Data rm1_gain_db = *(plugin_data->rm1_gain_db); /* Osc2 gain (dB) (float value) */ const LADSPA_Data osc2_gain_db = *(plugin_data->osc2_gain_db); /* RM2 gain (dB) (float value) */ const LADSPA_Data rm2_gain_db = *(plugin_data->rm2_gain_db); /* Input gain (dB) (float value) */ const LADSPA_Data in_gain_db = *(plugin_data->in_gain_db); /* RM3 gain (dB) (float value) */ const LADSPA_Data rm3_gain_db = *(plugin_data->rm3_gain_db); /* Xover lower freq (float value) */ const LADSPA_Data xover_lfreqp = *(plugin_data->xover_lfreqp); /* Xover upper freq (float value) */ const LADSPA_Data xover_ufreqp = *(plugin_data->xover_ufreqp); /* Dist1 drive (float value) */ const LADSPA_Data drive1 = *(plugin_data->drive1); /* Dist2 drive (float value) */ const LADSPA_Data drive2 = *(plugin_data->drive2); /* Dist3 drive (float value) */ const LADSPA_Data drive3 = *(plugin_data->drive3); /* Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt1_type = *(plugin_data->filt1_type); /* Filt1 freq (float value) */ const LADSPA_Data filt1_freq = *(plugin_data->filt1_freq); /* Filt1 q (float value) */ const LADSPA_Data filt1_q = *(plugin_data->filt1_q); /* Filt1 resonance (float value) */ const LADSPA_Data filt1_res = *(plugin_data->filt1_res); /* Filt1 LFO1 level (float value) */ const LADSPA_Data filt1_lfo1 = *(plugin_data->filt1_lfo1); /* Filt1 LFO2 level (float value) */ const LADSPA_Data filt1_lfo2 = *(plugin_data->filt1_lfo2); /* Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt2_type = *(plugin_data->filt2_type); /* Filt2 freq (float value) */ const LADSPA_Data filt2_freq = *(plugin_data->filt2_freq); /* Filt2 q (float value) */ const LADSPA_Data filt2_q = *(plugin_data->filt2_q); /* Filt2 resonance (float value) */ const LADSPA_Data filt2_res = *(plugin_data->filt2_res); /* Filt2 LFO1 level (float value) */ const LADSPA_Data filt2_lfo1 = *(plugin_data->filt2_lfo1); /* Filt2 LFO2 level (float value) */ const LADSPA_Data filt2_lfo2 = *(plugin_data->filt2_lfo2); /* Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt3_type = *(plugin_data->filt3_type); /* Filt3 freq (float value) */ const LADSPA_Data filt3_freq = *(plugin_data->filt3_freq); /* Filt3 q (float value) */ const LADSPA_Data filt3_q = *(plugin_data->filt3_q); /* Filt3 resonance (float value) */ const LADSPA_Data filt3_res = *(plugin_data->filt3_res); /* Filt3 LFO1 level (float value) */ const LADSPA_Data filt3_lfo1 = *(plugin_data->filt3_lfo1); /* Filt3 LFO2 level (float value) */ const LADSPA_Data filt3_lfo2 = *(plugin_data->filt3_lfo2); /* Delay1 length (s) (float value) */ const LADSPA_Data dela1_length = *(plugin_data->dela1_length); /* Delay1 feedback (float value) */ const LADSPA_Data dela1_fb = *(plugin_data->dela1_fb); /* Delay1 wetness (float value) */ const LADSPA_Data dela1_wet = *(plugin_data->dela1_wet); /* Delay2 length (s) (float value) */ const LADSPA_Data dela2_length = *(plugin_data->dela2_length); /* Delay2 feedback (float value) */ const LADSPA_Data dela2_fb = *(plugin_data->dela2_fb); /* Delay2 wetness (float value) */ const LADSPA_Data dela2_wet = *(plugin_data->dela2_wet); /* Delay3 length (s) (float value) */ const LADSPA_Data dela3_length = *(plugin_data->dela3_length); /* Delay3 feedback (float value) */ const LADSPA_Data dela3_fb = *(plugin_data->dela3_fb); /* Delay3 wetness (float value) */ const LADSPA_Data dela3_wet = *(plugin_data->dela3_wet); /* Band 1 gain (dB) (float value) */ const LADSPA_Data band1_gain_db = *(plugin_data->band1_gain_db); /* Band 2 gain (dB) (float value) */ const LADSPA_Data band2_gain_db = *(plugin_data->band2_gain_db); /* Band 3 gain (dB) (float value) */ const LADSPA_Data band3_gain_db = *(plugin_data->band3_gain_db); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long count = plugin_data->count; float ** dela_data = plugin_data->dela_data; int * dela_pos = plugin_data->dela_pos; sv_filter ** filt_data = plugin_data->filt_data; float lfo1 = plugin_data->lfo1; blo_h_osc * lfo1_d = plugin_data->lfo1_d; float lfo1_phase = plugin_data->lfo1_phase; float lfo2 = plugin_data->lfo2; blo_h_osc * lfo2_d = plugin_data->lfo2_d; float lfo2_phase = plugin_data->lfo2_phase; blo_h_osc * osc1_d = plugin_data->osc1_d; blo_h_osc * osc2_d = plugin_data->osc2_d; sv_filter * xover_b1_data = plugin_data->xover_b1_data; sv_filter * xover_b2_data = plugin_data->xover_b2_data; #line 231 "hermes_filter_1200.xml" unsigned long pos; int i; // dB gains converted to coefficients float osc1_gain, rm1_gain, osc2_gain, rm2_gain, in_gain, rm3_gain; // Output values for the oscilators etc. float osc1, osc2, in, rm1, rm2, rm3, mixer1; // Outputs from xover float xover[3], band_gain[3]; // Output values for disortions float dist[3]; // Stuff for distortions float drive[3]; // Stuff for filters float filt[3]; float filt_freq[3]; float filt_res[3]; float filt_lfo1[3]; float filt_lfo2[3]; int filt_t[3]; // Values for delays float dela[3], dela_wet[3], dela_fb[3]; int dela_offset[3]; // Output of mixer2 float mixer2; // X overs const float xover_ufreq = f_clamp(xover_ufreqp, 200.0f, (float)(sample_rate / 6)); const float xover_lfreq = f_clamp(xover_lfreqp, 0.0f, xover_ufreq); setup_f_svf(xover_b1_data, sample_rate, xover_ufreq); setup_f_svf(xover_b2_data, sample_rate, xover_lfreq); // Calculate delay offsets dela_offset[0] = dela1_length * sample_rate; dela_offset[1] = dela2_length * sample_rate; dela_offset[2] = dela3_length * sample_rate; for (i = 0; i < 3; i++) { if (dela_offset[i] > sample_rate * 2 || dela_offset[i] < 0) { dela_offset[i] = 0; } dela[i] = 0.0f; filt_t[i] = 0; } // Convert dB gains to coefficients osc1_gain = DB_CO(osc1_gain_db); osc2_gain = DB_CO(osc2_gain_db); in_gain = DB_CO(in_gain_db); rm1_gain = DB_CO(rm1_gain_db); rm2_gain = DB_CO(rm2_gain_db); rm3_gain = DB_CO(rm3_gain_db); band_gain[0] = DB_CO(band1_gain_db); band_gain[1] = DB_CO(band2_gain_db); band_gain[2] = DB_CO(band3_gain_db); osc1_d->wave = wave_tbl(osc1_wave); osc2_d->wave = wave_tbl(osc2_wave); lfo1_d->wave = wave_tbl(lfo1_wave); lfo2_d->wave = wave_tbl(lfo2_wave); blo_hd_set_freq(osc1_d, osc1_freq); blo_hd_set_freq(osc2_d, osc2_freq); blo_hd_set_freq(lfo1_d, lfo1_freq * 16); blo_hd_set_freq(lfo2_d, lfo2_freq * 16); #define SETUP_F(n,f,q,t) setup_svf(filt_data[n], sample_rate, f, q, (int)t) // Set filter stuff SETUP_F(0, filt1_freq, filt1_q, filt1_type); SETUP_F(1, filt2_freq, filt2_q, filt2_type); SETUP_F(2, filt3_freq, filt3_q, filt3_type); filt_freq[0] = filt1_freq; filt_freq[1] = filt2_freq; filt_freq[2] = filt3_freq; filt_res[0] = filt1_res; filt_res[1] = filt2_res; filt_res[2] = filt3_res; filt_lfo1[0] = filt1_lfo1; filt_lfo1[1] = filt2_lfo1; filt_lfo1[2] = filt3_lfo1; filt_lfo2[0] = filt1_lfo2; filt_lfo2[1] = filt2_lfo2; filt_lfo2[2] = filt3_lfo2; // Setup distortions drive[0] = drive1; drive[1] = drive2; drive[2] = drive3; // Setup delays dela_wet[0] = dela1_wet; dela_wet[1] = dela2_wet; dela_wet[2] = dela3_wet; dela_fb[0] = dela1_fb; dela_fb[1] = dela2_fb; dela_fb[2] = dela3_fb; for (pos = 0; pos < sample_count; pos++) { count++; // Count of number of samples processed // Calculate oscilator values for this sample if (osc1_d->wave == NOISE) { osc1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } else { osc1 = blo_hd_run_lin(osc1_d); } if (osc2_d->wave == NOISE) { osc2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } else { osc2 = blo_hd_run_lin(osc2_d); } // Calculate LFO values every 16 samples if ((count & 15) == 1) { // Calculate lfo values if (lfo1_d->wave == NOISE) { lfo1_phase += lfo1_freq; if (lfo1_phase >= sample_rate) { lfo1_phase -= sample_rate; lfo1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } } else { lfo1 = blo_hd_run_lin(lfo1_d); } if (lfo2_d->wave == NOISE) { lfo2_phase += lfo1_freq; if (lfo2_phase >= sample_rate) { lfo2_phase -= sample_rate; lfo2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } } else { lfo2 = blo_hd_run_lin(lfo2_d); } } in = input[pos]; rm1 = RINGMOD(osc2, osc1, rm1_depth); rm2 = RINGMOD(in, osc2, rm2_depth); rm3 = RINGMOD(osc1, in, rm3_depth); mixer1 = (osc1 * osc1_gain) + (osc2 * osc2_gain) + (in * in_gain) + (rm1 * rm1_gain) + (rm2 * rm2_gain) + (rm3 * rm3_gain); mixer1 = soft_clip(mixer1); // Higpass off the top band xover[0] = run_svf(xover_b1_data, mixer1); // Lowpass off the bottom band xover[2] = run_svf(xover_b2_data, mixer1); // The middle band is whats left xover[1] = mixer1 - xover[0] - xover[2]; mixer2 = 0.0f; for (i = 0; i < 3; i++) { dist[i] = xover[i]*(fabs(xover[i]) + drive1)/(xover[i]*xover[i] + (drive[i]-1)*fabs(xover[i]) + 1.0f); if (filt_t[i] == 0) { filt[i] = dist[i]; } else { if (count % 16 == 1) { setup_f_svf(filt_data[i], sample_rate, filt_freq[i]+LFO(filt_lfo1[i], filt_lfo2[i])); } filt[i] = run_svf(filt_data[i], dist[i] + (filt_res[i] * (filt_data[i])->b)); } dela[i] = (dela_data[i][dela_pos[i]] * dela_wet[i]) + filt[i]; dela_data[i][(dela_pos[i] + dela_offset[i]) % (2 * sample_rate)] = filt[i] + (dela[i] * dela_fb[i]); dela_pos[i] = (dela_pos[i] + 1) % (2 * sample_rate); mixer2 += band_gain[i] * dela[i]; } buffer_write(output[pos], soft_clip(mixer2)); } plugin_data->count = count; plugin_data->lfo1 = lfo1; plugin_data->lfo2 = lfo2; plugin_data->lfo1_phase = lfo1_phase; plugin_data->lfo2_phase = lfo2_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainHermesFilter(LADSPA_Handle instance, LADSPA_Data gain) { ((HermesFilter *)instance)->run_adding_gain = gain; } static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_count) { HermesFilter *plugin_data = (HermesFilter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* LFO1 freq (Hz) (float value) */ const LADSPA_Data lfo1_freq = *(plugin_data->lfo1_freq); /* LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ const LADSPA_Data lfo1_wave = *(plugin_data->lfo1_wave); /* LFO2 freq (Hz) (float value) */ const LADSPA_Data lfo2_freq = *(plugin_data->lfo2_freq); /* LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) (float value) */ const LADSPA_Data lfo2_wave = *(plugin_data->lfo2_wave); /* Osc1 freq (Hz) (float value) */ const LADSPA_Data osc1_freq = *(plugin_data->osc1_freq); /* Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ const LADSPA_Data osc1_wave = *(plugin_data->osc1_wave); /* Osc2 freq (Hz) (float value) */ const LADSPA_Data osc2_freq = *(plugin_data->osc2_freq); /* Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) (float value) */ const LADSPA_Data osc2_wave = *(plugin_data->osc2_wave); /* Ringmod 1 depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data rm1_depth = *(plugin_data->rm1_depth); /* Ringmod 2 depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data rm2_depth = *(plugin_data->rm2_depth); /* Ringmod 3 depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data rm3_depth = *(plugin_data->rm3_depth); /* Osc1 gain (dB) (float value) */ const LADSPA_Data osc1_gain_db = *(plugin_data->osc1_gain_db); /* RM1 gain (dB) (float value) */ const LADSPA_Data rm1_gain_db = *(plugin_data->rm1_gain_db); /* Osc2 gain (dB) (float value) */ const LADSPA_Data osc2_gain_db = *(plugin_data->osc2_gain_db); /* RM2 gain (dB) (float value) */ const LADSPA_Data rm2_gain_db = *(plugin_data->rm2_gain_db); /* Input gain (dB) (float value) */ const LADSPA_Data in_gain_db = *(plugin_data->in_gain_db); /* RM3 gain (dB) (float value) */ const LADSPA_Data rm3_gain_db = *(plugin_data->rm3_gain_db); /* Xover lower freq (float value) */ const LADSPA_Data xover_lfreqp = *(plugin_data->xover_lfreqp); /* Xover upper freq (float value) */ const LADSPA_Data xover_ufreqp = *(plugin_data->xover_ufreqp); /* Dist1 drive (float value) */ const LADSPA_Data drive1 = *(plugin_data->drive1); /* Dist2 drive (float value) */ const LADSPA_Data drive2 = *(plugin_data->drive2); /* Dist3 drive (float value) */ const LADSPA_Data drive3 = *(plugin_data->drive3); /* Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt1_type = *(plugin_data->filt1_type); /* Filt1 freq (float value) */ const LADSPA_Data filt1_freq = *(plugin_data->filt1_freq); /* Filt1 q (float value) */ const LADSPA_Data filt1_q = *(plugin_data->filt1_q); /* Filt1 resonance (float value) */ const LADSPA_Data filt1_res = *(plugin_data->filt1_res); /* Filt1 LFO1 level (float value) */ const LADSPA_Data filt1_lfo1 = *(plugin_data->filt1_lfo1); /* Filt1 LFO2 level (float value) */ const LADSPA_Data filt1_lfo2 = *(plugin_data->filt1_lfo2); /* Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt2_type = *(plugin_data->filt2_type); /* Filt2 freq (float value) */ const LADSPA_Data filt2_freq = *(plugin_data->filt2_freq); /* Filt2 q (float value) */ const LADSPA_Data filt2_q = *(plugin_data->filt2_q); /* Filt2 resonance (float value) */ const LADSPA_Data filt2_res = *(plugin_data->filt2_res); /* Filt2 LFO1 level (float value) */ const LADSPA_Data filt2_lfo1 = *(plugin_data->filt2_lfo1); /* Filt2 LFO2 level (float value) */ const LADSPA_Data filt2_lfo2 = *(plugin_data->filt2_lfo2); /* Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt3_type = *(plugin_data->filt3_type); /* Filt3 freq (float value) */ const LADSPA_Data filt3_freq = *(plugin_data->filt3_freq); /* Filt3 q (float value) */ const LADSPA_Data filt3_q = *(plugin_data->filt3_q); /* Filt3 resonance (float value) */ const LADSPA_Data filt3_res = *(plugin_data->filt3_res); /* Filt3 LFO1 level (float value) */ const LADSPA_Data filt3_lfo1 = *(plugin_data->filt3_lfo1); /* Filt3 LFO2 level (float value) */ const LADSPA_Data filt3_lfo2 = *(plugin_data->filt3_lfo2); /* Delay1 length (s) (float value) */ const LADSPA_Data dela1_length = *(plugin_data->dela1_length); /* Delay1 feedback (float value) */ const LADSPA_Data dela1_fb = *(plugin_data->dela1_fb); /* Delay1 wetness (float value) */ const LADSPA_Data dela1_wet = *(plugin_data->dela1_wet); /* Delay2 length (s) (float value) */ const LADSPA_Data dela2_length = *(plugin_data->dela2_length); /* Delay2 feedback (float value) */ const LADSPA_Data dela2_fb = *(plugin_data->dela2_fb); /* Delay2 wetness (float value) */ const LADSPA_Data dela2_wet = *(plugin_data->dela2_wet); /* Delay3 length (s) (float value) */ const LADSPA_Data dela3_length = *(plugin_data->dela3_length); /* Delay3 feedback (float value) */ const LADSPA_Data dela3_fb = *(plugin_data->dela3_fb); /* Delay3 wetness (float value) */ const LADSPA_Data dela3_wet = *(plugin_data->dela3_wet); /* Band 1 gain (dB) (float value) */ const LADSPA_Data band1_gain_db = *(plugin_data->band1_gain_db); /* Band 2 gain (dB) (float value) */ const LADSPA_Data band2_gain_db = *(plugin_data->band2_gain_db); /* Band 3 gain (dB) (float value) */ const LADSPA_Data band3_gain_db = *(plugin_data->band3_gain_db); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long count = plugin_data->count; float ** dela_data = plugin_data->dela_data; int * dela_pos = plugin_data->dela_pos; sv_filter ** filt_data = plugin_data->filt_data; float lfo1 = plugin_data->lfo1; blo_h_osc * lfo1_d = plugin_data->lfo1_d; float lfo1_phase = plugin_data->lfo1_phase; float lfo2 = plugin_data->lfo2; blo_h_osc * lfo2_d = plugin_data->lfo2_d; float lfo2_phase = plugin_data->lfo2_phase; blo_h_osc * osc1_d = plugin_data->osc1_d; blo_h_osc * osc2_d = plugin_data->osc2_d; sv_filter * xover_b1_data = plugin_data->xover_b1_data; sv_filter * xover_b2_data = plugin_data->xover_b2_data; #line 231 "hermes_filter_1200.xml" unsigned long pos; int i; // dB gains converted to coefficients float osc1_gain, rm1_gain, osc2_gain, rm2_gain, in_gain, rm3_gain; // Output values for the oscilators etc. float osc1, osc2, in, rm1, rm2, rm3, mixer1; // Outputs from xover float xover[3], band_gain[3]; // Output values for disortions float dist[3]; // Stuff for distortions float drive[3]; // Stuff for filters float filt[3]; float filt_freq[3]; float filt_res[3]; float filt_lfo1[3]; float filt_lfo2[3]; int filt_t[3]; // Values for delays float dela[3], dela_wet[3], dela_fb[3]; int dela_offset[3]; // Output of mixer2 float mixer2; // X overs const float xover_ufreq = f_clamp(xover_ufreqp, 200.0f, (float)(sample_rate / 6)); const float xover_lfreq = f_clamp(xover_lfreqp, 0.0f, xover_ufreq); setup_f_svf(xover_b1_data, sample_rate, xover_ufreq); setup_f_svf(xover_b2_data, sample_rate, xover_lfreq); // Calculate delay offsets dela_offset[0] = dela1_length * sample_rate; dela_offset[1] = dela2_length * sample_rate; dela_offset[2] = dela3_length * sample_rate; for (i = 0; i < 3; i++) { if (dela_offset[i] > sample_rate * 2 || dela_offset[i] < 0) { dela_offset[i] = 0; } dela[i] = 0.0f; filt_t[i] = 0; } // Convert dB gains to coefficients osc1_gain = DB_CO(osc1_gain_db); osc2_gain = DB_CO(osc2_gain_db); in_gain = DB_CO(in_gain_db); rm1_gain = DB_CO(rm1_gain_db); rm2_gain = DB_CO(rm2_gain_db); rm3_gain = DB_CO(rm3_gain_db); band_gain[0] = DB_CO(band1_gain_db); band_gain[1] = DB_CO(band2_gain_db); band_gain[2] = DB_CO(band3_gain_db); osc1_d->wave = wave_tbl(osc1_wave); osc2_d->wave = wave_tbl(osc2_wave); lfo1_d->wave = wave_tbl(lfo1_wave); lfo2_d->wave = wave_tbl(lfo2_wave); blo_hd_set_freq(osc1_d, osc1_freq); blo_hd_set_freq(osc2_d, osc2_freq); blo_hd_set_freq(lfo1_d, lfo1_freq * 16); blo_hd_set_freq(lfo2_d, lfo2_freq * 16); #define SETUP_F(n,f,q,t) setup_svf(filt_data[n], sample_rate, f, q, (int)t) // Set filter stuff SETUP_F(0, filt1_freq, filt1_q, filt1_type); SETUP_F(1, filt2_freq, filt2_q, filt2_type); SETUP_F(2, filt3_freq, filt3_q, filt3_type); filt_freq[0] = filt1_freq; filt_freq[1] = filt2_freq; filt_freq[2] = filt3_freq; filt_res[0] = filt1_res; filt_res[1] = filt2_res; filt_res[2] = filt3_res; filt_lfo1[0] = filt1_lfo1; filt_lfo1[1] = filt2_lfo1; filt_lfo1[2] = filt3_lfo1; filt_lfo2[0] = filt1_lfo2; filt_lfo2[1] = filt2_lfo2; filt_lfo2[2] = filt3_lfo2; // Setup distortions drive[0] = drive1; drive[1] = drive2; drive[2] = drive3; // Setup delays dela_wet[0] = dela1_wet; dela_wet[1] = dela2_wet; dela_wet[2] = dela3_wet; dela_fb[0] = dela1_fb; dela_fb[1] = dela2_fb; dela_fb[2] = dela3_fb; for (pos = 0; pos < sample_count; pos++) { count++; // Count of number of samples processed // Calculate oscilator values for this sample if (osc1_d->wave == NOISE) { osc1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } else { osc1 = blo_hd_run_lin(osc1_d); } if (osc2_d->wave == NOISE) { osc2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } else { osc2 = blo_hd_run_lin(osc2_d); } // Calculate LFO values every 16 samples if ((count & 15) == 1) { // Calculate lfo values if (lfo1_d->wave == NOISE) { lfo1_phase += lfo1_freq; if (lfo1_phase >= sample_rate) { lfo1_phase -= sample_rate; lfo1 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } } else { lfo1 = blo_hd_run_lin(lfo1_d); } if (lfo2_d->wave == NOISE) { lfo2_phase += lfo1_freq; if (lfo2_phase >= sample_rate) { lfo2_phase -= sample_rate; lfo2 = rand() * (0.5f/(float)RAND_MAX) - 1.0f; } } else { lfo2 = blo_hd_run_lin(lfo2_d); } } in = input[pos]; rm1 = RINGMOD(osc2, osc1, rm1_depth); rm2 = RINGMOD(in, osc2, rm2_depth); rm3 = RINGMOD(osc1, in, rm3_depth); mixer1 = (osc1 * osc1_gain) + (osc2 * osc2_gain) + (in * in_gain) + (rm1 * rm1_gain) + (rm2 * rm2_gain) + (rm3 * rm3_gain); mixer1 = soft_clip(mixer1); // Higpass off the top band xover[0] = run_svf(xover_b1_data, mixer1); // Lowpass off the bottom band xover[2] = run_svf(xover_b2_data, mixer1); // The middle band is whats left xover[1] = mixer1 - xover[0] - xover[2]; mixer2 = 0.0f; for (i = 0; i < 3; i++) { dist[i] = xover[i]*(fabs(xover[i]) + drive1)/(xover[i]*xover[i] + (drive[i]-1)*fabs(xover[i]) + 1.0f); if (filt_t[i] == 0) { filt[i] = dist[i]; } else { if (count % 16 == 1) { setup_f_svf(filt_data[i], sample_rate, filt_freq[i]+LFO(filt_lfo1[i], filt_lfo2[i])); } filt[i] = run_svf(filt_data[i], dist[i] + (filt_res[i] * (filt_data[i])->b)); } dela[i] = (dela_data[i][dela_pos[i]] * dela_wet[i]) + filt[i]; dela_data[i][(dela_pos[i] + dela_offset[i]) % (2 * sample_rate)] = filt[i] + (dela[i] * dela_fb[i]); dela_pos[i] = (dela_pos[i] + 1) % (2 * sample_rate); mixer2 += band_gain[i] * dela[i]; } buffer_write(output[pos], soft_clip(mixer2)); } plugin_data->count = count; plugin_data->lfo1 = lfo1; plugin_data->lfo2 = lfo2; plugin_data->lfo1_phase = lfo1_phase; plugin_data->lfo2_phase = lfo2_phase; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif hermesFilterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (hermesFilterDescriptor) { hermesFilterDescriptor->UniqueID = 1200; hermesFilterDescriptor->Label = "hermesFilter"; hermesFilterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; hermesFilterDescriptor->Name = D_("Hermes Filter"); hermesFilterDescriptor->Maker = "Steve Harris "; hermesFilterDescriptor->Copyright = "GPL"; hermesFilterDescriptor->PortCount = 54; port_descriptors = (LADSPA_PortDescriptor *)calloc(54, sizeof(LADSPA_PortDescriptor)); hermesFilterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(54, sizeof(LADSPA_PortRangeHint)); hermesFilterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(54, sizeof(char*)); hermesFilterDescriptor->PortNames = (const char **)port_names; /* Parameters for LFO1 freq (Hz) */ port_descriptors[HERMESFILTER_LFO1_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_LFO1_FREQ] = D_("LFO1 freq (Hz)"); port_range_hints[HERMESFILTER_LFO1_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[HERMESFILTER_LFO1_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_LFO1_FREQ].UpperBound = 1000; /* Parameters for LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) */ port_descriptors[HERMESFILTER_LFO1_WAVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_LFO1_WAVE] = D_("LFO1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h)"); port_range_hints[HERMESFILTER_LFO1_WAVE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_LFO1_WAVE].LowerBound = 0; port_range_hints[HERMESFILTER_LFO1_WAVE].UpperBound = 4; /* Parameters for LFO2 freq (Hz) */ port_descriptors[HERMESFILTER_LFO2_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_LFO2_FREQ] = D_("LFO2 freq (Hz)"); port_range_hints[HERMESFILTER_LFO2_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[HERMESFILTER_LFO2_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_LFO2_FREQ].UpperBound = 1000; /* Parameters for LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h) */ port_descriptors[HERMESFILTER_LFO2_WAVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_LFO2_WAVE] = D_("LFO2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = s&h)"); port_range_hints[HERMESFILTER_LFO2_WAVE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_LFO2_WAVE].LowerBound = 0; port_range_hints[HERMESFILTER_LFO2_WAVE].UpperBound = 4; /* Parameters for Osc1 freq (Hz) */ port_descriptors[HERMESFILTER_OSC1_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_OSC1_FREQ] = D_("Osc1 freq (Hz)"); port_range_hints[HERMESFILTER_OSC1_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[HERMESFILTER_OSC1_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_OSC1_FREQ].UpperBound = 4000; /* Parameters for Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) */ port_descriptors[HERMESFILTER_OSC1_WAVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_OSC1_WAVE] = D_("Osc1 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise)"); port_range_hints[HERMESFILTER_OSC1_WAVE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_OSC1_WAVE].LowerBound = 0; port_range_hints[HERMESFILTER_OSC1_WAVE].UpperBound = 4; /* Parameters for Osc2 freq (Hz) */ port_descriptors[HERMESFILTER_OSC2_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_OSC2_FREQ] = D_("Osc2 freq (Hz)"); port_range_hints[HERMESFILTER_OSC2_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[HERMESFILTER_OSC2_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_OSC2_FREQ].UpperBound = 4000; /* Parameters for Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise) */ port_descriptors[HERMESFILTER_OSC2_WAVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_OSC2_WAVE] = D_("Osc2 wave (0 = sin, 1 = tri, 2 = saw, 3 = squ, 4 = noise)"); port_range_hints[HERMESFILTER_OSC2_WAVE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_OSC2_WAVE].LowerBound = 0; port_range_hints[HERMESFILTER_OSC2_WAVE].UpperBound = 4; /* Parameters for Ringmod 1 depth (0=none, 1=AM, 2=RM) */ port_descriptors[HERMESFILTER_RM1_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_RM1_DEPTH] = D_("Ringmod 1 depth (0=none, 1=AM, 2=RM)"); port_range_hints[HERMESFILTER_RM1_DEPTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_RM1_DEPTH].LowerBound = 0; port_range_hints[HERMESFILTER_RM1_DEPTH].UpperBound = 2; /* Parameters for Ringmod 2 depth (0=none, 1=AM, 2=RM) */ port_descriptors[HERMESFILTER_RM2_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_RM2_DEPTH] = D_("Ringmod 2 depth (0=none, 1=AM, 2=RM)"); port_range_hints[HERMESFILTER_RM2_DEPTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_RM2_DEPTH].LowerBound = 0; port_range_hints[HERMESFILTER_RM2_DEPTH].UpperBound = 2; /* Parameters for Ringmod 3 depth (0=none, 1=AM, 2=RM) */ port_descriptors[HERMESFILTER_RM3_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_RM3_DEPTH] = D_("Ringmod 3 depth (0=none, 1=AM, 2=RM)"); port_range_hints[HERMESFILTER_RM3_DEPTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_RM3_DEPTH].LowerBound = 0; port_range_hints[HERMESFILTER_RM3_DEPTH].UpperBound = 2; /* Parameters for Osc1 gain (dB) */ port_descriptors[HERMESFILTER_OSC1_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_OSC1_GAIN_DB] = D_("Osc1 gain (dB)"); port_range_hints[HERMESFILTER_OSC1_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[HERMESFILTER_OSC1_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_OSC1_GAIN_DB].UpperBound = +20; /* Parameters for RM1 gain (dB) */ port_descriptors[HERMESFILTER_RM1_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_RM1_GAIN_DB] = D_("RM1 gain (dB)"); port_range_hints[HERMESFILTER_RM1_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[HERMESFILTER_RM1_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_RM1_GAIN_DB].UpperBound = +20; /* Parameters for Osc2 gain (dB) */ port_descriptors[HERMESFILTER_OSC2_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_OSC2_GAIN_DB] = D_("Osc2 gain (dB)"); port_range_hints[HERMESFILTER_OSC2_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[HERMESFILTER_OSC2_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_OSC2_GAIN_DB].UpperBound = +20; /* Parameters for RM2 gain (dB) */ port_descriptors[HERMESFILTER_RM2_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_RM2_GAIN_DB] = D_("RM2 gain (dB)"); port_range_hints[HERMESFILTER_RM2_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[HERMESFILTER_RM2_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_RM2_GAIN_DB].UpperBound = +20; /* Parameters for Input gain (dB) */ port_descriptors[HERMESFILTER_IN_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_IN_GAIN_DB] = D_("Input gain (dB)"); port_range_hints[HERMESFILTER_IN_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_IN_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_IN_GAIN_DB].UpperBound = +20; /* Parameters for RM3 gain (dB) */ port_descriptors[HERMESFILTER_RM3_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_RM3_GAIN_DB] = D_("RM3 gain (dB)"); port_range_hints[HERMESFILTER_RM3_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[HERMESFILTER_RM3_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_RM3_GAIN_DB].UpperBound = +20; /* Parameters for Xover lower freq */ port_descriptors[HERMESFILTER_XOVER_LFREQP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_XOVER_LFREQP] = D_("Xover lower freq"); port_range_hints[HERMESFILTER_XOVER_LFREQP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[HERMESFILTER_XOVER_LFREQP].LowerBound = 50; port_range_hints[HERMESFILTER_XOVER_LFREQP].UpperBound = 6000; /* Parameters for Xover upper freq */ port_descriptors[HERMESFILTER_XOVER_UFREQP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_XOVER_UFREQP] = D_("Xover upper freq"); port_range_hints[HERMESFILTER_XOVER_UFREQP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[HERMESFILTER_XOVER_UFREQP].LowerBound = 1000; port_range_hints[HERMESFILTER_XOVER_UFREQP].UpperBound = 10000; /* Parameters for Dist1 drive */ port_descriptors[HERMESFILTER_DRIVE1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DRIVE1] = D_("Dist1 drive"); port_range_hints[HERMESFILTER_DRIVE1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DRIVE1].LowerBound = 0; port_range_hints[HERMESFILTER_DRIVE1].UpperBound = 3; /* Parameters for Dist2 drive */ port_descriptors[HERMESFILTER_DRIVE2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DRIVE2] = D_("Dist2 drive"); port_range_hints[HERMESFILTER_DRIVE2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DRIVE2].LowerBound = 0; port_range_hints[HERMESFILTER_DRIVE2].UpperBound = 3; /* Parameters for Dist3 drive */ port_descriptors[HERMESFILTER_DRIVE3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DRIVE3] = D_("Dist3 drive"); port_range_hints[HERMESFILTER_DRIVE3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DRIVE3].LowerBound = 0; port_range_hints[HERMESFILTER_DRIVE3].UpperBound = 3; /* Parameters for Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ port_descriptors[HERMESFILTER_FILT1_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT1_TYPE] = D_("Filt1 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); port_range_hints[HERMESFILTER_FILT1_TYPE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT1_TYPE].LowerBound = 0; port_range_hints[HERMESFILTER_FILT1_TYPE].UpperBound = 5; /* Parameters for Filt1 freq */ port_descriptors[HERMESFILTER_FILT1_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT1_FREQ] = D_("Filt1 freq"); port_range_hints[HERMESFILTER_FILT1_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[HERMESFILTER_FILT1_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_FILT1_FREQ].UpperBound = 8000; /* Parameters for Filt1 q */ port_descriptors[HERMESFILTER_FILT1_Q] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT1_Q] = D_("Filt1 q"); port_range_hints[HERMESFILTER_FILT1_Q].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT1_Q].LowerBound = 0; port_range_hints[HERMESFILTER_FILT1_Q].UpperBound = 1; /* Parameters for Filt1 resonance */ port_descriptors[HERMESFILTER_FILT1_RES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT1_RES] = D_("Filt1 resonance"); port_range_hints[HERMESFILTER_FILT1_RES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT1_RES].LowerBound = 0; port_range_hints[HERMESFILTER_FILT1_RES].UpperBound = 1; /* Parameters for Filt1 LFO1 level */ port_descriptors[HERMESFILTER_FILT1_LFO1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT1_LFO1] = D_("Filt1 LFO1 level"); port_range_hints[HERMESFILTER_FILT1_LFO1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT1_LFO1].LowerBound = -500; port_range_hints[HERMESFILTER_FILT1_LFO1].UpperBound = 500; /* Parameters for Filt1 LFO2 level */ port_descriptors[HERMESFILTER_FILT1_LFO2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT1_LFO2] = D_("Filt1 LFO2 level"); port_range_hints[HERMESFILTER_FILT1_LFO2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT1_LFO2].LowerBound = -500; port_range_hints[HERMESFILTER_FILT1_LFO2].UpperBound = 500; /* Parameters for Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ port_descriptors[HERMESFILTER_FILT2_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT2_TYPE] = D_("Filt2 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); port_range_hints[HERMESFILTER_FILT2_TYPE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT2_TYPE].LowerBound = 0; port_range_hints[HERMESFILTER_FILT2_TYPE].UpperBound = 5; /* Parameters for Filt2 freq */ port_descriptors[HERMESFILTER_FILT2_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT2_FREQ] = D_("Filt2 freq"); port_range_hints[HERMESFILTER_FILT2_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[HERMESFILTER_FILT2_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_FILT2_FREQ].UpperBound = 8000; /* Parameters for Filt2 q */ port_descriptors[HERMESFILTER_FILT2_Q] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT2_Q] = D_("Filt2 q"); port_range_hints[HERMESFILTER_FILT2_Q].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT2_Q].LowerBound = 0; port_range_hints[HERMESFILTER_FILT2_Q].UpperBound = 1; /* Parameters for Filt2 resonance */ port_descriptors[HERMESFILTER_FILT2_RES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT2_RES] = D_("Filt2 resonance"); port_range_hints[HERMESFILTER_FILT2_RES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT2_RES].LowerBound = 0; port_range_hints[HERMESFILTER_FILT2_RES].UpperBound = 1; /* Parameters for Filt2 LFO1 level */ port_descriptors[HERMESFILTER_FILT2_LFO1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT2_LFO1] = D_("Filt2 LFO1 level"); port_range_hints[HERMESFILTER_FILT2_LFO1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT2_LFO1].LowerBound = -500; port_range_hints[HERMESFILTER_FILT2_LFO1].UpperBound = 500; /* Parameters for Filt2 LFO2 level */ port_descriptors[HERMESFILTER_FILT2_LFO2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT2_LFO2] = D_("Filt2 LFO2 level"); port_range_hints[HERMESFILTER_FILT2_LFO2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT2_LFO2].LowerBound = -500; port_range_hints[HERMESFILTER_FILT2_LFO2].UpperBound = 500; /* Parameters for Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ port_descriptors[HERMESFILTER_FILT3_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT3_TYPE] = D_("Filt3 type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); port_range_hints[HERMESFILTER_FILT3_TYPE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT3_TYPE].LowerBound = 0; port_range_hints[HERMESFILTER_FILT3_TYPE].UpperBound = 5; /* Parameters for Filt3 freq */ port_descriptors[HERMESFILTER_FILT3_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT3_FREQ] = D_("Filt3 freq"); port_range_hints[HERMESFILTER_FILT3_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[HERMESFILTER_FILT3_FREQ].LowerBound = 0; port_range_hints[HERMESFILTER_FILT3_FREQ].UpperBound = 8000; /* Parameters for Filt3 q */ port_descriptors[HERMESFILTER_FILT3_Q] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT3_Q] = D_("Filt3 q"); port_range_hints[HERMESFILTER_FILT3_Q].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT3_Q].LowerBound = 0; port_range_hints[HERMESFILTER_FILT3_Q].UpperBound = 1; /* Parameters for Filt3 resonance */ port_descriptors[HERMESFILTER_FILT3_RES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT3_RES] = D_("Filt3 resonance"); port_range_hints[HERMESFILTER_FILT3_RES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT3_RES].LowerBound = 0; port_range_hints[HERMESFILTER_FILT3_RES].UpperBound = 1; /* Parameters for Filt3 LFO1 level */ port_descriptors[HERMESFILTER_FILT3_LFO1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT3_LFO1] = D_("Filt3 LFO1 level"); port_range_hints[HERMESFILTER_FILT3_LFO1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT3_LFO1].LowerBound = -500; port_range_hints[HERMESFILTER_FILT3_LFO1].UpperBound = 500; /* Parameters for Filt3 LFO2 level */ port_descriptors[HERMESFILTER_FILT3_LFO2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_FILT3_LFO2] = D_("Filt3 LFO2 level"); port_range_hints[HERMESFILTER_FILT3_LFO2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_FILT3_LFO2].LowerBound = -500; port_range_hints[HERMESFILTER_FILT3_LFO2].UpperBound = 500; /* Parameters for Delay1 length (s) */ port_descriptors[HERMESFILTER_DELA1_LENGTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA1_LENGTH] = D_("Delay1 length (s)"); port_range_hints[HERMESFILTER_DELA1_LENGTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA1_LENGTH].LowerBound = 0; port_range_hints[HERMESFILTER_DELA1_LENGTH].UpperBound = 2; /* Parameters for Delay1 feedback */ port_descriptors[HERMESFILTER_DELA1_FB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA1_FB] = D_("Delay1 feedback"); port_range_hints[HERMESFILTER_DELA1_FB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA1_FB].LowerBound = 0; port_range_hints[HERMESFILTER_DELA1_FB].UpperBound = 1; /* Parameters for Delay1 wetness */ port_descriptors[HERMESFILTER_DELA1_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA1_WET] = D_("Delay1 wetness"); port_range_hints[HERMESFILTER_DELA1_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA1_WET].LowerBound = 0; port_range_hints[HERMESFILTER_DELA1_WET].UpperBound = 1; /* Parameters for Delay2 length (s) */ port_descriptors[HERMESFILTER_DELA2_LENGTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA2_LENGTH] = D_("Delay2 length (s)"); port_range_hints[HERMESFILTER_DELA2_LENGTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA2_LENGTH].LowerBound = 0; port_range_hints[HERMESFILTER_DELA2_LENGTH].UpperBound = 2; /* Parameters for Delay2 feedback */ port_descriptors[HERMESFILTER_DELA2_FB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA2_FB] = D_("Delay2 feedback"); port_range_hints[HERMESFILTER_DELA2_FB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA2_FB].LowerBound = 0; port_range_hints[HERMESFILTER_DELA2_FB].UpperBound = 1; /* Parameters for Delay2 wetness */ port_descriptors[HERMESFILTER_DELA2_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA2_WET] = D_("Delay2 wetness"); port_range_hints[HERMESFILTER_DELA2_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA2_WET].LowerBound = 0; port_range_hints[HERMESFILTER_DELA2_WET].UpperBound = 1; /* Parameters for Delay3 length (s) */ port_descriptors[HERMESFILTER_DELA3_LENGTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA3_LENGTH] = D_("Delay3 length (s)"); port_range_hints[HERMESFILTER_DELA3_LENGTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA3_LENGTH].LowerBound = 0; port_range_hints[HERMESFILTER_DELA3_LENGTH].UpperBound = 2; /* Parameters for Delay3 feedback */ port_descriptors[HERMESFILTER_DELA3_FB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA3_FB] = D_("Delay3 feedback"); port_range_hints[HERMESFILTER_DELA3_FB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA3_FB].LowerBound = 0; port_range_hints[HERMESFILTER_DELA3_FB].UpperBound = 1; /* Parameters for Delay3 wetness */ port_descriptors[HERMESFILTER_DELA3_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_DELA3_WET] = D_("Delay3 wetness"); port_range_hints[HERMESFILTER_DELA3_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_DELA3_WET].LowerBound = 0; port_range_hints[HERMESFILTER_DELA3_WET].UpperBound = 1; /* Parameters for Band 1 gain (dB) */ port_descriptors[HERMESFILTER_BAND1_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_BAND1_GAIN_DB] = D_("Band 1 gain (dB)"); port_range_hints[HERMESFILTER_BAND1_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_BAND1_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_BAND1_GAIN_DB].UpperBound = +20; /* Parameters for Band 2 gain (dB) */ port_descriptors[HERMESFILTER_BAND2_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_BAND2_GAIN_DB] = D_("Band 2 gain (dB)"); port_range_hints[HERMESFILTER_BAND2_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_BAND2_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_BAND2_GAIN_DB].UpperBound = +20; /* Parameters for Band 3 gain (dB) */ port_descriptors[HERMESFILTER_BAND3_GAIN_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HERMESFILTER_BAND3_GAIN_DB] = D_("Band 3 gain (dB)"); port_range_hints[HERMESFILTER_BAND3_GAIN_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[HERMESFILTER_BAND3_GAIN_DB].LowerBound = -70; port_range_hints[HERMESFILTER_BAND3_GAIN_DB].UpperBound = +20; /* Parameters for Input */ port_descriptors[HERMESFILTER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[HERMESFILTER_INPUT] = D_("Input"); port_range_hints[HERMESFILTER_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[HERMESFILTER_INPUT].LowerBound = -1; port_range_hints[HERMESFILTER_INPUT].UpperBound = +1; /* Parameters for Output */ port_descriptors[HERMESFILTER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[HERMESFILTER_OUTPUT] = D_("Output"); port_range_hints[HERMESFILTER_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[HERMESFILTER_OUTPUT].LowerBound = -1; port_range_hints[HERMESFILTER_OUTPUT].UpperBound = +1; hermesFilterDescriptor->activate = activateHermesFilter; hermesFilterDescriptor->cleanup = cleanupHermesFilter; hermesFilterDescriptor->connect_port = connectPortHermesFilter; hermesFilterDescriptor->deactivate = NULL; hermesFilterDescriptor->instantiate = instantiateHermesFilter; hermesFilterDescriptor->run = runHermesFilter; hermesFilterDescriptor->run_adding = runAddingHermesFilter; hermesFilterDescriptor->set_run_adding_gain = setRunAddingGainHermesFilter; } } void __attribute__((destructor)) swh_fini() { if (hermesFilterDescriptor) { free((LADSPA_PortDescriptor *)hermesFilterDescriptor->PortDescriptors); free((char **)hermesFilterDescriptor->PortNames); free((LADSPA_PortRangeHint *)hermesFilterDescriptor->PortRangeHints); free(hermesFilterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/highpass_iir_1890.c000066400000000000000000000205171247673406200226050ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "config.h" #include "util/iir.h" #define HIGHPASS_IIR_CUTOFF 0 #define HIGHPASS_IIR_STAGES 1 #define HIGHPASS_IIR_INPUT 2 #define HIGHPASS_IIR_OUTPUT 3 static LADSPA_Descriptor *highpass_iirDescriptor = NULL; typedef struct { LADSPA_Data *cutoff; LADSPA_Data *stages; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* gt; iirf_t* iirf; long sample_rate; LADSPA_Data run_adding_gain; } Highpass_iir; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return highpass_iirDescriptor; default: return NULL; } } static void activateHighpass_iir(LADSPA_Handle instance) { Highpass_iir *plugin_data = (Highpass_iir *)instance; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; gt = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); iirf = init_iirf_t(gt); chebyshev(iirf, gt, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, *(plugin_data->cutoff)/(float)sample_rate, 0.5f); plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; } static void cleanupHighpass_iir(LADSPA_Handle instance) { Highpass_iir *plugin_data = (Highpass_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortHighpass_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Highpass_iir *plugin; plugin = (Highpass_iir *)instance; switch (port) { case HIGHPASS_IIR_CUTOFF: plugin->cutoff = data; break; case HIGHPASS_IIR_STAGES: plugin->stages = data; break; case HIGHPASS_IIR_INPUT: plugin->input = data; break; case HIGHPASS_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateHighpass_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Highpass_iir *plugin_data = (Highpass_iir *)malloc(sizeof(Highpass_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; sample_rate = s_rate; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Highpass_iir *plugin_data = (Highpass_iir *)instance; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, cutoff/(float)sample_rate, 0.5f); iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainHighpass_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Highpass_iir *)instance)->run_adding_gain = gain; } static void runAddingHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Highpass_iir *plugin_data = (Highpass_iir *)instance; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, cutoff/(float)sample_rate, 0.5f); iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif highpass_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (highpass_iirDescriptor) { highpass_iirDescriptor->UniqueID = 1890; highpass_iirDescriptor->Label = "highpass_iir"; highpass_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; highpass_iirDescriptor->Name = D_("Glame Highpass Filter"); highpass_iirDescriptor->Maker = "Alexander Ehlert "; highpass_iirDescriptor->Copyright = "GPL"; highpass_iirDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); highpass_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); highpass_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); highpass_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Cutoff Frequency */ port_descriptors[HIGHPASS_IIR_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HIGHPASS_IIR_CUTOFF] = D_("Cutoff Frequency"); port_range_hints[HIGHPASS_IIR_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[HIGHPASS_IIR_CUTOFF].LowerBound = 0.0001; port_range_hints[HIGHPASS_IIR_CUTOFF].UpperBound = 0.45; /* Parameters for Stages(2 poles per stage) */ port_descriptors[HIGHPASS_IIR_STAGES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[HIGHPASS_IIR_STAGES] = D_("Stages(2 poles per stage)"); port_range_hints[HIGHPASS_IIR_STAGES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; port_range_hints[HIGHPASS_IIR_STAGES].LowerBound = 1.0; port_range_hints[HIGHPASS_IIR_STAGES].UpperBound = 10.0; /* Parameters for Input */ port_descriptors[HIGHPASS_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[HIGHPASS_IIR_INPUT] = D_("Input"); port_range_hints[HIGHPASS_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[HIGHPASS_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[HIGHPASS_IIR_OUTPUT] = D_("Output"); port_range_hints[HIGHPASS_IIR_OUTPUT].HintDescriptor = 0; highpass_iirDescriptor->activate = activateHighpass_iir; highpass_iirDescriptor->cleanup = cleanupHighpass_iir; highpass_iirDescriptor->connect_port = connectPortHighpass_iir; highpass_iirDescriptor->deactivate = NULL; highpass_iirDescriptor->instantiate = instantiateHighpass_iir; highpass_iirDescriptor->run = runHighpass_iir; highpass_iirDescriptor->run_adding = runAddingHighpass_iir; highpass_iirDescriptor->set_run_adding_gain = setRunAddingGainHighpass_iir; } } void __attribute__((destructor)) swh_fini() { if (highpass_iirDescriptor) { free((LADSPA_PortDescriptor *)highpass_iirDescriptor->PortDescriptors); free((char **)highpass_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)highpass_iirDescriptor->PortRangeHints); free(highpass_iirDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/hilbert_1440.c000066400000000000000000000223171247673406200215540ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "hilbert_1440.xml" #include "ladspa-util.h" #define D_SIZE 256 #define NZEROS 200 /* The non-zero taps of the Hilbert transformer */ static float xcoeffs[] = { +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, }; #define HILBERT_INPUT 0 #define HILBERT_OUTPUT0 1 #define HILBERT_OUTPUT90 2 #define HILBERT_LATENCY 3 static LADSPA_Descriptor *hilbertDescriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *output0; LADSPA_Data *output90; LADSPA_Data *latency; LADSPA_Data *delay; unsigned int dptr; LADSPA_Data run_adding_gain; } Hilbert; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return hilbertDescriptor; default: return NULL; } } static void cleanupHilbert(LADSPA_Handle instance) { #line 59 "hilbert_1440.xml" Hilbert *plugin_data = (Hilbert *)instance; free(plugin_data->delay); free(instance); } static void connectPortHilbert( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Hilbert *plugin; plugin = (Hilbert *)instance; switch (port) { case HILBERT_INPUT: plugin->input = data; break; case HILBERT_OUTPUT0: plugin->output0 = data; break; case HILBERT_OUTPUT90: plugin->output90 = data; break; case HILBERT_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateHilbert( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Hilbert *plugin_data = (Hilbert *)malloc(sizeof(Hilbert)); LADSPA_Data *delay = NULL; unsigned int dptr; #line 53 "hilbert_1440.xml" delay = calloc(D_SIZE, sizeof(LADSPA_Data)); dptr = 0; plugin_data->delay = delay; plugin_data->dptr = dptr; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runHilbert(LADSPA_Handle instance, unsigned long sample_count) { Hilbert *plugin_data = (Hilbert *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* 0deg output (array of floats of length sample_count) */ LADSPA_Data * const output0 = plugin_data->output0; /* 90deg output (array of floats of length sample_count) */ LADSPA_Data * const output90 = plugin_data->output90; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; #line 63 "hilbert_1440.xml" unsigned long pos; unsigned int i; float hilb; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = input[pos]; hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } buffer_write(output0[pos], delay[(dptr - 99) & (D_SIZE - 1)]); buffer_write(output90[pos], hilb); dptr = (dptr + 1) & (D_SIZE - 1); } plugin_data->dptr = dptr; *(plugin_data->latency) = 99; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainHilbert(LADSPA_Handle instance, LADSPA_Data gain) { ((Hilbert *)instance)->run_adding_gain = gain; } static void runAddingHilbert(LADSPA_Handle instance, unsigned long sample_count) { Hilbert *plugin_data = (Hilbert *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* 0deg output (array of floats of length sample_count) */ LADSPA_Data * const output0 = plugin_data->output0; /* 90deg output (array of floats of length sample_count) */ LADSPA_Data * const output90 = plugin_data->output90; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; #line 63 "hilbert_1440.xml" unsigned long pos; unsigned int i; float hilb; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = input[pos]; hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } buffer_write(output0[pos], delay[(dptr - 99) & (D_SIZE - 1)]); buffer_write(output90[pos], hilb); dptr = (dptr + 1) & (D_SIZE - 1); } plugin_data->dptr = dptr; *(plugin_data->latency) = 99; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif hilbertDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (hilbertDescriptor) { hilbertDescriptor->UniqueID = 1440; hilbertDescriptor->Label = "hilbert"; hilbertDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; hilbertDescriptor->Name = D_("Hilbert transformer"); hilbertDescriptor->Maker = "Steve Harris "; hilbertDescriptor->Copyright = "GPL"; hilbertDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); hilbertDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); hilbertDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); hilbertDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[HILBERT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[HILBERT_INPUT] = D_("Input"); port_range_hints[HILBERT_INPUT].HintDescriptor = 0; /* Parameters for 0deg output */ port_descriptors[HILBERT_OUTPUT0] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[HILBERT_OUTPUT0] = D_("0deg output"); port_range_hints[HILBERT_OUTPUT0].HintDescriptor = 0; /* Parameters for 90deg output */ port_descriptors[HILBERT_OUTPUT90] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[HILBERT_OUTPUT90] = D_("90deg output"); port_range_hints[HILBERT_OUTPUT90].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[HILBERT_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[HILBERT_LATENCY] = D_("latency"); port_range_hints[HILBERT_LATENCY].HintDescriptor = 0; hilbertDescriptor->activate = NULL; hilbertDescriptor->cleanup = cleanupHilbert; hilbertDescriptor->connect_port = connectPortHilbert; hilbertDescriptor->deactivate = NULL; hilbertDescriptor->instantiate = instantiateHilbert; hilbertDescriptor->run = runHilbert; hilbertDescriptor->run_adding = runAddingHilbert; hilbertDescriptor->set_run_adding_gain = setRunAddingGainHilbert; } } void __attribute__((destructor)) swh_fini() { if (hilbertDescriptor) { free((LADSPA_PortDescriptor *)hilbertDescriptor->PortDescriptors); free((char **)hilbertDescriptor->PortNames); free((LADSPA_PortRangeHint *)hilbertDescriptor->PortRangeHints); free(hilbertDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/imp_1199.c000066400000000000000000000411251247673406200207210ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "imp_1199.xml" #include #include "config.h" #ifdef FFTW3 #include typedef fftwf_plan fft_plan; typedef float fftw_real; #define local_malloc(s) fftwf_malloc(s) #define local_free(s) fftwf_free(s) #else #ifdef EXPLICIT_S #include #else #include #endif //EXPLICIT_S typedef rfftw_plan fft_plan; #define local_malloc(s) malloc(s) #define local_free(s) free(s) #endif //FFTW3 #include "ladspa-util.h" #define MAX_FFT_LENGTH 16384 #define SEG_LENGTH 128 #define IMP_LENGTH(a) (sizeof(a) / sizeof(float)) #define MK_IMP(i) impulse2freq(c, i, IMP_LENGTH(i), impulse_freq[c]); c++ inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out); #include "impulses/all.h" fft_plan plan_rc[IMPULSES], plan_cr[IMPULSES]; static fftw_real *real_in, *real_out, *comp_in, *comp_out; unsigned int fft_length[IMPULSES]; #ifdef __clang__ void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out) #else inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out) #endif { fftw_real impulse_time[MAX_FFT_LENGTH]; #ifdef FFTW3 fft_plan tmp_plan; #endif unsigned int i, fftl = 128; while (fftl < length+SEG_LENGTH) { fftl *= 2; } fft_length[id] = fftl; #ifdef FFTW3 plan_rc[id] = fftwf_plan_r2r_1d(fftl, real_in, comp_out, FFTW_R2HC, FFTW_MEASURE); plan_cr[id] = fftwf_plan_r2r_1d(fftl, comp_in, real_out, FFTW_HC2R, FFTW_MEASURE); tmp_plan = fftwf_plan_r2r_1d(fftl, impulse_time, out, FFTW_R2HC, FFTW_MEASURE); #else plan_rc[id] = rfftw_create_plan(fftl, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE); plan_cr[id] = rfftw_create_plan(fftl, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE); #endif for (i=0; i=last) impulse_time[i] = 0.0f; } #ifdef FFTW3 fftwf_execute(tmp_plan); fftwf_destroy_plan(tmp_plan); #else rfftw_one(plan_rc[id], impulse_time, out); #endif } #define IMP_IMPULSE 0 #define IMP_HIGH_LAT 1 #define IMP_GAIN 2 #define IMP_INPUT 3 #define IMP_OUTPUT 4 #define IMP_LATENCY 5 static LADSPA_Descriptor *impDescriptor = NULL; typedef struct { LADSPA_Data *impulse; LADSPA_Data *high_lat; LADSPA_Data *gain; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; fftw_real * block_freq; fftw_real * block_time; unsigned int count; fftw_real ** impulse_freq; unsigned long in_ptr; fftw_real * op; LADSPA_Data *opc; unsigned long out_ptr; LADSPA_Data *overlap; LADSPA_Data run_adding_gain; } Imp; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return impDescriptor; default: return NULL; } } static void activateImp(LADSPA_Handle instance) { Imp *plugin_data = (Imp *)instance; fftw_real *block_freq = plugin_data->block_freq; fftw_real *block_time = plugin_data->block_time; unsigned int count = plugin_data->count; fftw_real **impulse_freq = plugin_data->impulse_freq; unsigned long in_ptr = plugin_data->in_ptr; fftw_real *op = plugin_data->op; LADSPA_Data *opc = plugin_data->opc; unsigned long out_ptr = plugin_data->out_ptr; LADSPA_Data *overlap = plugin_data->overlap; #line 161 "imp_1199.xml" memset(block_time, 0, MAX_FFT_LENGTH * sizeof(fftw_real)); memset(block_freq, 0, MAX_FFT_LENGTH * sizeof(fftw_real)); memset(op, 0, MAX_FFT_LENGTH * sizeof(fftw_real)); memset(overlap, 0, (MAX_FFT_LENGTH - SEG_LENGTH) * sizeof(float)); memset(opc, 0, SEG_LENGTH * sizeof(LADSPA_Data)); in_ptr = 0; out_ptr = 0; count = 0; plugin_data->block_freq = block_freq; plugin_data->block_time = block_time; plugin_data->count = count; plugin_data->impulse_freq = impulse_freq; plugin_data->in_ptr = in_ptr; plugin_data->op = op; plugin_data->opc = opc; plugin_data->out_ptr = out_ptr; plugin_data->overlap = overlap; } static void cleanupImp(LADSPA_Handle instance) { #line 173 "imp_1199.xml" Imp *plugin_data = (Imp *)instance; local_free(plugin_data->block_time); local_free(plugin_data->block_freq); local_free(plugin_data->op); local_free(plugin_data->overlap); local_free(plugin_data->opc); unsigned int i; for (i=0; iimpulse_freq[i]); } local_free(plugin_data->impulse_freq); free(instance); } static void connectPortImp( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Imp *plugin; plugin = (Imp *)instance; switch (port) { case IMP_IMPULSE: plugin->impulse = data; break; case IMP_HIGH_LAT: plugin->high_lat = data; break; case IMP_GAIN: plugin->gain = data; break; case IMP_INPUT: plugin->input = data; break; case IMP_OUTPUT: plugin->output = data; break; case IMP_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateImp( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Imp *plugin_data = (Imp *)malloc(sizeof(Imp)); fftw_real *block_freq = NULL; fftw_real *block_time = NULL; unsigned int count; fftw_real **impulse_freq = NULL; unsigned long in_ptr; fftw_real *op = NULL; LADSPA_Data *opc = NULL; unsigned long out_ptr; LADSPA_Data *overlap = NULL; #line 135 "imp_1199.xml" unsigned int i; impulse_freq = local_malloc(IMPULSES * sizeof(fftw_real *)); for (i=0; iblock_freq = block_freq; plugin_data->block_time = block_time; plugin_data->count = count; plugin_data->impulse_freq = impulse_freq; plugin_data->in_ptr = in_ptr; plugin_data->op = op; plugin_data->opc = opc; plugin_data->out_ptr = out_ptr; plugin_data->overlap = overlap; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runImp(LADSPA_Handle instance, unsigned long sample_count) { Imp *plugin_data = (Imp *)instance; /* Impulse ID (float value) */ const LADSPA_Data impulse = *(plugin_data->impulse); /* High latency mode (float value) */ const LADSPA_Data high_lat = *(plugin_data->high_lat); /* Gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; fftw_real * block_freq = plugin_data->block_freq; fftw_real * block_time = plugin_data->block_time; unsigned int count = plugin_data->count; fftw_real ** impulse_freq = plugin_data->impulse_freq; unsigned long in_ptr = plugin_data->in_ptr; fftw_real * op = plugin_data->op; LADSPA_Data * opc = plugin_data->opc; unsigned long out_ptr = plugin_data->out_ptr; LADSPA_Data * overlap = plugin_data->overlap; #line 181 "imp_1199.xml" unsigned long i, pos, ipos, limit; unsigned int im; unsigned int len; fftw_real tmp; fftw_real *imp_freq; float coef; im = f_round(impulse) - 1; if (im >= IMPULSES) { im = 0; } coef = pow(10.0f, gain * 0.05f) / (float)fft_length[im]; imp_freq = impulse_freq[im]; for (pos = 0; pos < sample_count; pos += SEG_LENGTH) { limit = pos + SEG_LENGTH; for (ipos = pos; ipos < sample_count && iposcount = 1; out_ptr = 0; } } } for (ipos = pos; ipos < sample_count && iposin_ptr = in_ptr; plugin_data->out_ptr = out_ptr; *(plugin_data->latency) = SEG_LENGTH; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainImp(LADSPA_Handle instance, LADSPA_Data gain) { ((Imp *)instance)->run_adding_gain = gain; } static void runAddingImp(LADSPA_Handle instance, unsigned long sample_count) { Imp *plugin_data = (Imp *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Impulse ID (float value) */ const LADSPA_Data impulse = *(plugin_data->impulse); /* High latency mode (float value) */ const LADSPA_Data high_lat = *(plugin_data->high_lat); /* Gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; fftw_real * block_freq = plugin_data->block_freq; fftw_real * block_time = plugin_data->block_time; unsigned int count = plugin_data->count; fftw_real ** impulse_freq = plugin_data->impulse_freq; unsigned long in_ptr = plugin_data->in_ptr; fftw_real * op = plugin_data->op; LADSPA_Data * opc = plugin_data->opc; unsigned long out_ptr = plugin_data->out_ptr; LADSPA_Data * overlap = plugin_data->overlap; #line 181 "imp_1199.xml" unsigned long i, pos, ipos, limit; unsigned int im; unsigned int len; fftw_real tmp; fftw_real *imp_freq; float coef; im = f_round(impulse) - 1; if (im >= IMPULSES) { im = 0; } coef = pow(10.0f, gain * 0.05f) / (float)fft_length[im]; imp_freq = impulse_freq[im]; for (pos = 0; pos < sample_count; pos += SEG_LENGTH) { limit = pos + SEG_LENGTH; for (ipos = pos; ipos < sample_count && iposcount = 1; out_ptr = 0; } } } for (ipos = pos; ipos < sample_count && iposin_ptr = in_ptr; plugin_data->out_ptr = out_ptr; *(plugin_data->latency) = SEG_LENGTH; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif impDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (impDescriptor) { impDescriptor->UniqueID = 1199; impDescriptor->Label = "imp"; impDescriptor->Properties = 0; impDescriptor->Name = D_("Impulse convolver"); impDescriptor->Maker = "Steve Harris "; impDescriptor->Copyright = "GPL"; impDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); impDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); impDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); impDescriptor->PortNames = (const char **)port_names; /* Parameters for Impulse ID */ port_descriptors[IMP_IMPULSE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[IMP_IMPULSE] = D_("Impulse ID"); port_range_hints[IMP_IMPULSE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; port_range_hints[IMP_IMPULSE].LowerBound = 1; port_range_hints[IMP_IMPULSE].UpperBound = IMPULSES; /* Parameters for High latency mode */ port_descriptors[IMP_HIGH_LAT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[IMP_HIGH_LAT] = D_("High latency mode"); port_range_hints[IMP_HIGH_LAT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[IMP_HIGH_LAT].LowerBound = 0; port_range_hints[IMP_HIGH_LAT].UpperBound = 1; /* Parameters for Gain (dB) */ port_descriptors[IMP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[IMP_GAIN] = D_("Gain (dB)"); port_range_hints[IMP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[IMP_GAIN].LowerBound = -90; port_range_hints[IMP_GAIN].UpperBound = +24; /* Parameters for Input */ port_descriptors[IMP_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[IMP_INPUT] = D_("Input"); port_range_hints[IMP_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[IMP_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[IMP_OUTPUT] = D_("Output"); port_range_hints[IMP_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[IMP_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[IMP_LATENCY] = D_("latency"); port_range_hints[IMP_LATENCY].HintDescriptor = 0; impDescriptor->activate = activateImp; impDescriptor->cleanup = cleanupImp; impDescriptor->connect_port = connectPortImp; impDescriptor->deactivate = NULL; impDescriptor->instantiate = instantiateImp; impDescriptor->run = runImp; impDescriptor->run_adding = runAddingImp; impDescriptor->set_run_adding_gain = setRunAddingGainImp; } } void __attribute__((destructor)) swh_fini() { if (impDescriptor) { free((LADSPA_PortDescriptor *)impDescriptor->PortDescriptors); free((char **)impDescriptor->PortNames); free((LADSPA_PortRangeHint *)impDescriptor->PortRangeHints); free(impDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/impulse_1885.c000066400000000000000000000152111247673406200216110ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "impulse_1885.xml" #include "ladspa-util.h" #define LOG001 -6.9077552789f #define IMPULSE_FC_FREQUENCY 0 #define IMPULSE_FC_OUT 1 static LADSPA_Descriptor *impulse_fcDescriptor = NULL; typedef struct { LADSPA_Data *frequency; LADSPA_Data *out; float phase; LADSPA_Data sample_rate; LADSPA_Data run_adding_gain; } Impulse_fc; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return impulse_fcDescriptor; default: return NULL; } } static void activateImpulse_fc(LADSPA_Handle instance) { Impulse_fc *plugin_data = (Impulse_fc *)instance; float phase = plugin_data->phase; LADSPA_Data sample_rate = plugin_data->sample_rate; #line 29 "impulse_1885.xml" phase = 0.f; plugin_data->phase = phase; plugin_data->sample_rate = sample_rate; } static void cleanupImpulse_fc(LADSPA_Handle instance) { free(instance); } static void connectPortImpulse_fc( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Impulse_fc *plugin; plugin = (Impulse_fc *)instance; switch (port) { case IMPULSE_FC_FREQUENCY: plugin->frequency = data; break; case IMPULSE_FC_OUT: plugin->out = data; break; } } static LADSPA_Handle instantiateImpulse_fc( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Impulse_fc *plugin_data = (Impulse_fc *)malloc(sizeof(Impulse_fc)); float phase; LADSPA_Data sample_rate; #line 24 "impulse_1885.xml" sample_rate = s_rate; phase = 0.f; plugin_data->phase = phase; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runImpulse_fc(LADSPA_Handle instance, unsigned long sample_count) { Impulse_fc *plugin_data = (Impulse_fc *)instance; /* Frequency (Hz) (float value) */ const LADSPA_Data frequency = *(plugin_data->frequency); /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; float phase = plugin_data->phase; LADSPA_Data sample_rate = plugin_data->sample_rate; #line 33 "impulse_1885.xml" int i; float phase_step = frequency / sample_rate; for (i=0; i 1.f) { phase -= 1.f; buffer_write(out[i], 1.f); } else { buffer_write(out[i], 0.f); } phase += phase_step; } plugin_data->phase = phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainImpulse_fc(LADSPA_Handle instance, LADSPA_Data gain) { ((Impulse_fc *)instance)->run_adding_gain = gain; } static void runAddingImpulse_fc(LADSPA_Handle instance, unsigned long sample_count) { Impulse_fc *plugin_data = (Impulse_fc *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Frequency (Hz) (float value) */ const LADSPA_Data frequency = *(plugin_data->frequency); /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; float phase = plugin_data->phase; LADSPA_Data sample_rate = plugin_data->sample_rate; #line 33 "impulse_1885.xml" int i; float phase_step = frequency / sample_rate; for (i=0; i 1.f) { phase -= 1.f; buffer_write(out[i], 1.f); } else { buffer_write(out[i], 0.f); } phase += phase_step; } plugin_data->phase = phase; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif impulse_fcDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (impulse_fcDescriptor) { impulse_fcDescriptor->UniqueID = 1885; impulse_fcDescriptor->Label = "impulse_fc"; impulse_fcDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; impulse_fcDescriptor->Name = D_("Nonbandlimited single-sample impulses (Frequency: Control)"); impulse_fcDescriptor->Maker = "Andy Wingo "; impulse_fcDescriptor->Copyright = "GPL"; impulse_fcDescriptor->PortCount = 2; port_descriptors = (LADSPA_PortDescriptor *)calloc(2, sizeof(LADSPA_PortDescriptor)); impulse_fcDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(2, sizeof(LADSPA_PortRangeHint)); impulse_fcDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(2, sizeof(char*)); impulse_fcDescriptor->PortNames = (const char **)port_names; /* Parameters for Frequency (Hz) */ port_descriptors[IMPULSE_FC_FREQUENCY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[IMPULSE_FC_FREQUENCY] = D_("Frequency (Hz)"); port_range_hints[IMPULSE_FC_FREQUENCY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW; port_range_hints[IMPULSE_FC_FREQUENCY].LowerBound = 0; /* Parameters for Output */ port_descriptors[IMPULSE_FC_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[IMPULSE_FC_OUT] = D_("Output"); port_range_hints[IMPULSE_FC_OUT].HintDescriptor = 0; impulse_fcDescriptor->activate = activateImpulse_fc; impulse_fcDescriptor->cleanup = cleanupImpulse_fc; impulse_fcDescriptor->connect_port = connectPortImpulse_fc; impulse_fcDescriptor->deactivate = NULL; impulse_fcDescriptor->instantiate = instantiateImpulse_fc; impulse_fcDescriptor->run = runImpulse_fc; impulse_fcDescriptor->run_adding = runAddingImpulse_fc; impulse_fcDescriptor->set_run_adding_gain = setRunAddingGainImpulse_fc; } } void __attribute__((destructor)) swh_fini() { if (impulse_fcDescriptor) { free((LADSPA_PortDescriptor *)impulse_fcDescriptor->PortDescriptors); free((char **)impulse_fcDescriptor->PortNames); free((LADSPA_PortRangeHint *)impulse_fcDescriptor->PortRangeHints); free(impulse_fcDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/impulses/000077500000000000000000000000001247673406200211435ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/impulses/01-unit.h000066400000000000000000000000311247673406200225030ustar00rootroot00000000000000float unit[] = { 1.0f }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/02-steves-flat.h000066400000000000000000001035411247673406200237740ustar00rootroot00000000000000float steves_flat[] = { -0.0000747256300, +0.0004581413362, -0.0004988051100, +0.0080212860617, +0.0409775662455, +0.0272593302189, -0.0347729749807, +0.0206228755550, +0.0830415514680, +0.0981127192346, +0.1165879969154, +0.0534580725429, -0.0129770915478, -0.0194366926723, +0.0335325785381, +0.0388072508561, -0.0213017054305, -0.0292409720411, +0.0075425029238, +0.0147545640387, -0.0226343413216, -0.0257136599758, -0.0429779903773, -0.0507456071427, -0.0301750856554, -0.0044625067799, +0.0074273297400, -0.0128299178065, -0.0208570418077, -0.0048472053918, +0.0133211840459, -0.0247062189553, -0.0180474936312, +0.0028139734788, +0.0078072570979, +0.0109728907727, +0.0216466772225, +0.0407098426493, +0.0143495984063, -0.0056788739734, -0.0043740007291, -0.0220882416929, -0.0512888670834, -0.0431623827872, -0.0180879555998, -0.0222443669420, -0.0285499617727, -0.0158642771161, -0.0133201606034, -0.0127702266735, -0.0090371884921, -0.0166105820447, -0.0185939680423, -0.0080760329637, +0.0117406879686, +0.0131132236554, -0.0026151664027, -0.0020506304148, +0.0098572965115, +0.0150237291004, +0.0066948773059, -0.0022852435224, -0.0017129380290, +0.0013233096022, -0.0018295526796, -0.0109795215200, -0.0199344166820, -0.0208222303881, -0.0166376527884, -0.0175138915175, -0.0247779607485, -0.0277080299492, -0.0245018478174, -0.0221699872648, -0.0199550440689, -0.0164751994994, -0.0121488969008, -0.0113359097267, -0.0116449457557, -0.0095046272878, -0.0111194014401, -0.0032949332310, +0.0129679526493, +0.0263678263579, +0.0308535119214, +0.0248421204281, +0.0204144394813, +0.0190867045768, +0.0219311074160, +0.0156608429323, +0.0037536223253, -0.0030656247219, -0.0042825540871, -0.0021690468972, -0.0038422869371, -0.0138509230290, -0.0235538240496, -0.0229926610943, -0.0196150165079, -0.0135943131403, -0.0107564689746, -0.0127025354015, -0.0145724203168, -0.0171933814148, -0.0138159530484, -0.0098164597618, -0.0087455221354, -0.0064264473918, -0.0074598348126, -0.0121645223990, -0.0126989461487, -0.0097513631294, -0.0067988070496, -0.0041353226856, -0.0043423317074, -0.0043674564704, -0.0042041094728, -0.0019608702878, +0.0039238018742, +0.0101425627557, +0.0102753362455, -0.0001845221427, -0.0073682584377, -0.0037386166578, -0.0014888908730, -0.0020602161681, -0.0015174030822, +0.0007402363543, +0.0053005178150, +0.0095026236493, +0.0096782375272, +0.0012873738392, -0.0065135408053, -0.0044955596094, -0.0018158443313, -0.0040755883096, -0.0083392303543, -0.0100848320169, -0.0083145812745, -0.0083637785308, -0.0106060663470, -0.0145516776119, -0.0176741826058, -0.0173162520290, -0.0160623778742, -0.0133682911741, -0.0081434215284, -0.0041882245115, -0.0008310055067, +0.0048951197424, +0.0074982066542, +0.0052300877557, +0.0007194071608, -0.0022146981451, -0.0038053565623, -0.0023047321511, +0.0034375951826, +0.0083622505756, +0.0096198581294, +0.0133878518767, +0.0194724842890, +0.0199918879565, +0.0158011264643, +0.0082251094414, +0.0032514297690, +0.0029124112346, +0.0047323781608, +0.0047874710145, +0.0029745240314, +0.0026771350520, +0.0030138472406, +0.0034298400919, +0.0052113486892, +0.0017789716155, -0.0037898607956, -0.0057119988767, -0.0046561534051, -0.0026514913615, +0.0001813941596, +0.0039354200955, +0.0059624969456, +0.0080446810641, +0.0094737078283, +0.0084286012842, +0.0058381560351, +0.0058541130701, +0.0100478007400, +0.0152600575526, +0.0183627856252, +0.0187877732285, +0.0182146316856, +0.0176063327727, +0.0157871009940, +0.0123767495296, +0.0075541788029, +0.0102779164716, +0.0156277036143, +0.0113348574559, +0.0059646591451, +0.0026247377412, +0.0011803881862, +0.0007245676119, -0.0023045880036, -0.0055248676796, -0.0073599555901, -0.0046368665816, -0.0018872113446, +0.0023064763253, +0.0029218095961, +0.0000173408440, -0.0015071398404, +0.0007385642527, +0.0051101721475, +0.0005332994063, -0.0027207250036, +0.0007673215115, +0.0019155073337, +0.0005625467630, +0.0038801975091, +0.0080619786638, +0.0101137622527, +0.0115505873507, +0.0122711332709, +0.0097186562515, +0.0040092952600, +0.0020222767666, +0.0011850873676, -0.0003067729262, +0.0031021370713, +0.0066621848428, +0.0034938556252, +0.0013637715695, +0.0059936326252, +0.0090966634051, +0.0103580331862, +0.0138644439855, +0.0122683368259, +0.0051846238984, +0.0018034765478, +0.0035777345683, +0.0070538745683, +0.0106506364958, +0.0122065988102, +0.0037282525127, -0.0097867799637, -0.0191162978863, -0.0160759997340, -0.0059400965538, +0.0007624637690, +0.0021018313096, -0.0012120572080, -0.0009874334643, +0.0035154632092, +0.0026084779976, -0.0023815911511, -0.0018048459407, +0.0015878619710, +0.0115002657509, +0.0151442933688, +0.0055393400048, -0.0045969235417, -0.0052492592612, +0.0039214666977, +0.0093624266058, +0.0107736656711, +0.0118124874208, +0.0079349854547, +0.0072958103253, +0.0103136648428, +0.0080157508295, +0.0028874306179, -0.0016525261632, -0.0005321318174, -0.0001136019843, -0.0043761485139, -0.0086800795514, -0.0102800930859, -0.0076825846493, -0.0080295744946, -0.0099791869287, -0.0068291066784, +0.0014600182963, +0.0084357221294, +0.0083239508077, +0.0105090556433, +0.0209676743712, +0.0155793135804, -0.0057499238634, -0.0117800400073, -0.0010136537424, +0.0205021238960, +0.0214418880593, +0.0047571281427, -0.0013221275998, -0.0028140167231, +0.0035838463857, +0.0027972812950, -0.0005072953482, -0.0061055625079, -0.0190592302237, -0.0219839515828, -0.0133021999299, -0.0048697787582, -0.0140393515453, -0.0313880365732, -0.0322599220738, -0.0222278621487, -0.0185733694837, -0.0202459320339, -0.0219478572588, -0.0174627050375, -0.0110820962842, -0.0042020625901, +0.0016826095719, -0.0021050025357, -0.0088914418017, -0.0064301231318, +0.0049224643640, +0.0134595071826, +0.0118207758549, +0.0002952411935, -0.0065936863495, -0.0085117450798, -0.0083368951778, -0.0089617853724, -0.0143826512358, -0.0198868194547, -0.0229201985671, -0.0210879791753, -0.0166534224329, -0.0129672463313, -0.0137536816904, -0.0146976693507, -0.0094222618851, -0.0008786171499, +0.0055761983059, +0.0032591560302, -0.0042438795369, -0.0064698643664, -0.0012681158452, +0.0030560101391, -0.0009312883398, -0.0098521937195, -0.0142323206820, -0.0130993279178, -0.0097967404982, -0.0036743416602, -0.0035161983579, -0.0096935603180, -0.0169815290653, -0.0206942569819, -0.0170324560810, -0.0137159873386, -0.0152915824281, -0.0178534433942, -0.0172026788742, -0.0112864530073, -0.0078368071632, -0.0092339486856, -0.0084639172164, -0.0059688538138, -0.0063049894148, -0.0084049468174, -0.0051594558912, -0.0027000255417, -0.0042830874293, -0.0049426881403, -0.0025534139722, -0.0001873474172, -0.0033615578186, -0.0071660206711, -0.0086420104172, -0.0086939608742, -0.0076917667920, -0.0092880757570, -0.0133662731209, -0.0171444003785, -0.0175337981717, -0.0124645060181, -0.0072337119444, -0.0054154171185, -0.0091645132382, -0.0130219644039, -0.0103368580411, -0.0069447987896, -0.0041669772926, -0.0047664111874, -0.0075998588803, -0.0075558941487, -0.0055831173458, -0.0036531376868, -0.0052074999734, -0.0109020859323, -0.0157361883930, -0.0172222539903, -0.0132375501524, -0.0073726981560, -0.0039935544438, -0.0017452701258, -0.0045152500435, -0.0077802295985, -0.0073526761838, -0.0040718693253, -0.0033338384160, -0.0062312295671, -0.0082092388936, -0.0062941063410, -0.0002929348464, +0.0062345161112, +0.0112047939226, +0.0105847326421, +0.0061261034075, +0.0013483334619, -0.0012494920967, -0.0021418608380, -0.0017150569855, -0.0013053633422, -0.0042484057424, -0.0095094562007, -0.0152183559238, -0.0173283747630, -0.0166015008053, -0.0156999643362, -0.0152454122527, -0.0136559646687, -0.0100450619528, -0.0046197563736, -0.0007542329952, +0.0005524420822, +0.0011462686711, +0.0022597439782, +0.0067100415357, +0.0091015643918, +0.0071974014002, +0.0028650158114, -0.0008570528089, -0.0032883889734, -0.0042249530810, -0.0054351796264, -0.0063627778114, -0.0045259024813, -0.0001674119335, +0.0021612341487, -0.0010521841451, -0.0036361139661, -0.0042102357062, -0.0033228832696, -0.0043576544982, -0.0077593427473, -0.0134104973168, -0.0186017375466, -0.0169262632346, -0.0093301521681, -0.0030828070036, -0.0003904933071, +0.0013699122177, +0.0039354489250, +0.0071919814849, +0.0131733183990, +0.0198125118501, +0.0211508847787, +0.0178021271826, +0.0087791515526, -0.0019948024123, -0.0066499467920, +0.0002749885877, +0.0121399021499, +0.0178126931330, +0.0139416201088, +0.0038776172842, +0.0020008133289, +0.0095989280339, +0.0162674841596, +0.0141164411802, +0.0050923556203, -0.0037555250605, -0.0062519434426, +0.0001227985417, +0.0053736578307, +0.0025464228597, -0.0019400555103, +0.0007114070218, +0.0095546029359, +0.0180404160302, +0.0205341676989, +0.0131460314365, +0.0017651335357, -0.0021776524534, +0.0021499907086, +0.0080382809528, +0.0064767545768, -0.0005905400447, -0.0056409922297, -0.0057271342757, -0.0010248971826, +0.0001965295586, -0.0016733409420, -0.0041532112866, -0.0048168336892, -0.0004342274051, +0.0046055146832, +0.0059345901511, +0.0035574098888, +0.0035169479202, +0.0042726223821, +0.0035716804075, +0.0063788069202, +0.0102540601983, +0.0099536153108, +0.0069103044933, +0.0051097541221, +0.0102746875865, +0.0167526818247, +0.0172246468259, +0.0113766599879, +0.0052510322660, +0.0074379389347, +0.0136055854099, +0.0139783198489, +0.0088761622563, +0.0036880932527, +0.0014514559843, +0.0044967560266, +0.0082283815707, +0.0044520849758, -0.0028727564873, -0.0044896784256, +0.0009698043277, +0.0073500815441, +0.0074535356034, -0.0004922752660, -0.0079106102539, -0.0085194136820, -0.0001654659541, +0.0077844819250, +0.0062742429311, +0.0033696732757, +0.0047521694970, +0.0086698163096, +0.0097220581125, +0.0086553439843, +0.0097692084861, +0.0108593176179, +0.0076238737146, +0.0007481355913, -0.0043912118404, -0.0026930200145, +0.0024288280121, +0.0053480285538, +0.0054991375006, +0.0035035711100, +0.0035630171935, +0.0057042293712, +0.0101991259057, +0.0127147013797, +0.0076009976385, +0.0010203565623, -0.0001680461790, +0.0049075307703, +0.0106729792285, +0.0125028778597, +0.0112498685840, +0.0075985903894, +0.0056879119686, +0.0070147531644, +0.0077355441330, +0.0051466124232, +0.0038549430133, +0.0067380636457, +0.0126514786530, +0.0161628192684, +0.0139460886554, +0.0092421650459, +0.0056117016288, +0.0070535286167, +0.0114364808537, +0.0131186003265, +0.0097553271620, +0.0075059040859, +0.0059946560653, +0.0036953726590, +0.0036144487231, +0.0059943245284, +0.0052993790556, +0.0005088377170, -0.0016146876651, -0.0013390360024, -0.0022557511149, -0.0036896932805, -0.0032728643773, -0.0017285635272, +0.0000136218597, -0.0015652021161, -0.0027440191040, -0.0008943291354, +0.0010105690036, +0.0016489369117, +0.0001165425768, +0.0000480584970, +0.0023770649456, +0.0070233587195, +0.0107160646651, +0.0102371950387, +0.0077407045840, +0.0053095269807, +0.0051501151874, +0.0069093963688, +0.0080905052890, +0.0057846055502, +0.0027135609141, +0.0028974199819, +0.0049991071439, +0.0057285613277, +0.0039797740230, +0.0024058510339, +0.0023427868694, +0.0012131959674, -0.0003557972056, -0.0000877853168, +0.0006679323881, +0.0009092627304, -0.0021226028428, -0.0055329398924, -0.0054007429891, -0.0038617034921, -0.0017439439770, +0.0014234338730, +0.0027731223144, +0.0019790471826, +0.0000038054716, -0.0009416092406, -0.0005184378851, -0.0023182819371, -0.0036341824002, -0.0023393273495, -0.0012571462842, -0.0015296123047, -0.0029763979371, -0.0035542386614, -0.0026193754849, -0.0020068674885, -0.0022936184426, -0.0036060449722, -0.0044930658718, -0.0035938789940, -0.0034391231378, -0.0044602580919, -0.0044104410060, -0.0027260872588, -0.0023267577606, -0.0007445463386, +0.0014639246711, +0.0014658562358, +0.0000063856977, +0.0005639449855, +0.0039736477896, +0.0051974385369, +0.0026448029565, -0.0009916713761, -0.0021272587799, -0.0021297669323, -0.0028823566554, -0.0053606269722, -0.0089441994800, -0.0103258164075, -0.0078037543337, -0.0038114539661, -0.0041416939686, -0.0077367549649, -0.0093767691983, -0.0049238914160, +0.0003043656771, +0.0001129100798, -0.0036184848295, -0.0057568284885, -0.0027392046046, +0.0005968824982, +0.0009122033216, -0.0021714685623, -0.0062496226820, -0.0061561724002, -0.0004889166481, +0.0049314302866, +0.0043125510073, -0.0003473790411, -0.0025395470629, -0.0013720167594, -0.0005259190967, -0.0017093776070, -0.0045928297775, -0.0071139693120, -0.0087535366904, -0.0096900431391, -0.0110237601306, -0.0129355340653, -0.0138453445526, -0.0132649524329, -0.0104173783664, -0.0064308871088, -0.0045004317666, -0.0052939591415, -0.0071689756784, -0.0067878807328, -0.0048131867787, -0.0042411984099, -0.0051894528114, -0.0075691412261, -0.0084582810822, -0.0058850325296, -0.0035841923386, -0.0038244704099, -0.0069623558525, -0.0100728245998, -0.0098737292310, -0.0070272362648, -0.0038863525719, -0.0040507806687, -0.0070519862467, -0.0083977827279, -0.0079154247533, -0.0060595508936, -0.0045879864486, -0.0052839841923, -0.0070780912080, -0.0070135135030, -0.0030664607727, +0.0015887556808, +0.0033065946965, +0.0003601071911, -0.0035770426638, -0.0033092037509, +0.0005350435804, +0.0020688793821, -0.0000537234607, -0.0025886578307, -0.0040806622721, -0.0041601591560, -0.0025284045260, -0.0024950922334, -0.0062667617195, -0.0087170820000, -0.0056856632805, -0.0010811576239, -0.0014468432914, -0.0051189218501, -0.0076374379154, -0.0073133962189, -0.0039924733434, -0.0012206483495, -0.0015230248017, -0.0029420910314, -0.0042203980459, -0.0040218792624, -0.0029184509794, -0.0018115775901, -0.0014781231173, -0.0015003793615, +0.0012770529383, +0.0043077365091, +0.0045503065115, +0.0034476998646, +0.0026506408960, +0.0023141593422, +0.0018534954401, -0.0000894430036, -0.0026278657231, -0.0045251096747, -0.0036073422926, -0.0003843238307, +0.0026418335345, +0.0042104230967, +0.0029565201125, +0.0021220550859, +0.0029113445490, +0.0050072226010, +0.0053226587412, +0.0025999733446, -0.0009697466687, -0.0025950291137, -0.0010905704015, +0.0019591549432, +0.0038280884909, +0.0019455330834, -0.0007281568634, -0.0010698997703, +0.0009943813337, +0.0020717046566, +0.0005126287739, -0.0013075543712, -0.0017547982201, +0.0009649898295, +0.0055851930568, +0.0079210320580, +0.0063426261076, +0.0030034542660, +0.0025351650048, +0.0044688204039, +0.0048071470339, +0.0022986491620, -0.0005660495272, -0.0018098622455, -0.0006422886965, +0.0012945379287, +0.0020593224583, +0.0016145435187, +0.0012885414268, +0.0024348965865, +0.0049348321475, +0.0067883564172, +0.0056932165659, +0.0028044886288, +0.0007815055429, +0.0011305566856, +0.0014630453761, +0.0011665501076, +0.0015016910967, +0.0028065787545, +0.0054792596759, +0.0087719874631, +0.0120228406457, +0.0135962735357, +0.0137770046203, +0.0119019448392, +0.0096385683664, +0.0110317170266, +0.0123311415260, +0.0111144283809, +0.0085588377932, +0.0070326705937, +0.0070931257037, +0.0065731598646, +0.0063079300060, +0.0058184800157, +0.0048052875417, +0.0047790096058, +0.0061594012854, +0.0086919572358, +0.0103546024958, +0.0107134700254, +0.0092432029008, +0.0072884588464, +0.0054407869311, +0.0034426259021, +0.0034245066663, +0.0029076688089, +0.0023881786542, +0.0028031192346, +0.0037894139407, +0.0069190974389, +0.0097940449565, +0.0104857903724, +0.0087359652116, +0.0063516929335, +0.0061562733035, +0.0055411274232, +0.0037322597896, +0.0020101540326, +0.0019343328875, +0.0036089134909, +0.0060746718779, +0.0091017950254, +0.0082511711584, +0.0021507114426, -0.0019754146868, +0.0018929339661, +0.0086581836735, +0.0081004802370, +0.0025738972128, -0.0008139241270, -0.0007002356554, +0.0033556622201, +0.0075122321245, +0.0080494234897, +0.0048872493337, +0.0013343512358, +0.0040446976796, +0.0101389735042, +0.0143418721451, +0.0120999302805, +0.0055178477364, +0.0026746845586, +0.0037804768476, +0.0060732736554, +0.0071600962430, +0.0063961333495, +0.0057587023942, +0.0069891527170, +0.0104688963833, +0.0129541722285, +0.0110105130520, +0.0074211026046, +0.0051097685369, +0.0042494147690, +0.0028874306179, +0.0008414417255, +0.0000516189202, +0.0015505424002, +0.0032787311463, +0.0044769646904, +0.0063625327618, +0.0081126894595, +0.0083391438658, +0.0069201352950, +0.0052288769238, +0.0049338951935, +0.0061401288767, +0.0081555298476, +0.0084563639323, +0.0053476105296, +0.0018247093519, +0.0021899337497, +0.0060935118464, +0.0099533414317, +0.0101412798501, +0.0063866629129, +0.0023150818815, +0.0010860874401, +0.0030231735296, +0.0056132872418, +0.0057434228489, +0.0038067115405, +0.0022620935683, +0.0037833165369, +0.0069945726312, +0.0056246604135, +0.0002037368924, -0.0019557819117, +0.0014063957376, +0.0057861767485, +0.0071906985804, +0.0049572901971, +0.0027254097690, +0.0026091122430, +0.0057198548694, +0.0096820574148, +0.0101045368658, +0.0069566908888, +0.0011590112370, -0.0020920437509, -0.0021247506288, +0.0011814116276, +0.0054561673797, +0.0082199634063, +0.0076318306094, +0.0029954685405, -0.0022127809952, -0.0060975911971, -0.0073766766034, -0.0050588847654, -0.0033399790629, -0.0043015958609, -0.0041356253942, -0.0030925080738, -0.0009980138295, +0.0014213005030, +0.0031680120955, +0.0051382375018, +0.0060889423978, +0.0046977108888, +0.0025613708682, +0.0018127740073, +0.0020081359794, +0.0009294288476, -0.0002107135901, +0.0004109333047, +0.0015992783869, +0.0025257666421, +0.0015188733785, -0.0003108666917, -0.0030349935562, -0.0043888910798, -0.0044862044909, -0.0056074925466, -0.0063104381584, -0.0070704370193, -0.0069093675393, -0.0064474639758, -0.0065124885345, -0.0071510005889, -0.0079914909468, -0.0094096922963, -0.0099729021342, -0.0070438852044, -0.0025929389867, -0.0016253401028, -0.0030569038489, -0.0037136216264, -0.0020782200859, +0.0011658726179, +0.0029954541258, +0.0014782960931, -0.0035454168863, -0.0061423775647, -0.0038470005320, -0.0011946154619, -0.0008877992914, -0.0026542157328, -0.0032678624885, -0.0021232370883, -0.0000268401088, +0.0017074172128, +0.0015192914039, +0.0013691338259, +0.0000969674595, -0.0038607953676, -0.0051298049226, -0.0037118918658, -0.0034207156082, -0.0048109669202, -0.0055778704075, -0.0050492125236, -0.0040507806687, -0.0010503823120, +0.0023977499915, +0.0019033269407, -0.0019003142757, -0.0048720418609, -0.0051566450314, -0.0024253252479, -0.0004952446868, -0.0013819628791, -0.0023835659601, -0.0029509560520, -0.0012064931475, +0.0004683325054, +0.0002549666155, -0.0006755145030, -0.0016286843059, -0.0004755686675, +0.0021845138343, +0.0037515610278, +0.0034383447461, +0.0021229632104, -0.0003199191016, -0.0030101859154, -0.0036932681173, -0.0026251990097, -0.0021491834873, -0.0038137747267, -0.0054088152019, -0.0046503154655, -0.0026782593966, -0.0008273585961, -0.0004635035925, -0.0027871045405, -0.0059286801391, -0.0074347821221, -0.0057865227001, -0.0035256832080, -0.0035032684027, -0.0031558749468, -0.0022848543265, -0.0023997968742, -0.0024703710798, -0.0007829181802, +0.0004592656796, -0.0011415694909, -0.0038754406687, -0.0042796711536, -0.0046060047823, -0.0052900095224, -0.0044586292346, -0.0035621378984, -0.0029484767291, -0.0029673743567, -0.0025392443555, -0.0022078944232, -0.0026867496348, -0.0027547003712, -0.0025515688948, -0.0022191378634, -0.0026753332189, -0.0021186532249, -0.0008557122455, -0.0010612221415, -0.0030778051149, -0.0048290140822, -0.0046190788839, -0.0038990663071, -0.0025585888380, -0.0013334575272, -0.0023617998138, -0.0046174500266, -0.0053816723857, -0.0047013722140, -0.0042101348041, -0.0034755634135, -0.0017596559625, -0.0007275946917, -0.0002008107146, +0.0013827268561, +0.0026901082515, +0.0030221068440, +0.0026806666457, +0.0028967569069, +0.0038974951088, +0.0036616567545, +0.0020765912285, -0.0001378330387, -0.0014561984099, -0.0010542454426, -0.0009030788380, -0.0015282284970, -0.0024805766638, -0.0023634286723, -0.0015071830846, -0.0004817381451, -0.0000909565441, -0.0015917395163, -0.0027659293966, -0.0021020187001, -0.0011193132455, -0.0012485839722, -0.0016790779782, -0.0004732046626, +0.0028757403241, +0.0044769646904, +0.0041658961935, +0.0037679216735, +0.0041947687690, +0.0051953916542, +0.0055461148972, +0.0037587683603, +0.0002758967110, -0.0013863881814, -0.0002137550846, +0.0023300875490, +0.0026673330798, +0.0006402418150, -0.0010760115889, -0.0018001611753, -0.0012621625877, -0.0001944106034, +0.0010012427146, +0.0019943988017, +0.0022958383023, +0.0022132999226, +0.0026976327074, +0.0031392115925, +0.0039377985151, +0.0046998442588, +0.0052801066469, +0.0054009159649, +0.0038541934510, +0.0039433049178, +0.0060203718307, +0.0065066073507, +0.0048411368174, +0.0015419800883, -0.0008067600387, +0.0005492996856, +0.0026299414353, +0.0033266166675, +0.0020148387993, -0.0007572312455, -0.0009581428634, +0.0013949793229, +0.0030889332370, +0.0029678932842, +0.0020170586578, -0.0000780265877, -0.0011707736046, -0.0004250596771, +0.0017072730653, +0.0025711872551, +0.0000076253579, -0.0013139256542, +0.0000081587013, +0.0044425857110, +0.0080615750532, +0.0070084107110, +0.0052879626409, +0.0073393137884, +0.0092122546131, +0.0088441040375, +0.0068184542394, +0.0034810698162, +0.0040748964051, +0.0079912170677, +0.0119434590786, +0.0112605786808, +0.0051408898005, +0.0008626456989, +0.0000044108875, +0.0018431745393, +0.0047054803930, +0.0053481871161, +0.0032021604401, +0.0002677668392, -0.0017107037557, -0.0012368648489, -0.0011649356638, -0.0034584099613, -0.0036001782031, -0.0012919288730, -0.0003377644583, -0.0014651499178, -0.0017030783978, -0.0006543970169, +0.0002879762019, +0.0021887085030, +0.0052418357086, +0.0056273127122, +0.0031077011318, +0.0035685956699, +0.0067161965973, +0.0067470295683, +0.0052833355320, +0.0057989913869, +0.0078575498682, +0.0083648163869, +0.0075770837074, +0.0062297304426, +0.0029323178888, +0.0025319361197, +0.0040996175574, +0.0055590448525, +0.0094595670411, +0.0126728700181, +0.0100440529262, +0.0063612786856, +0.0058777531233, +0.0055040817304, +0.0007885399008, -0.0028604751923, -0.0020346301354, +0.0006546564800, +0.0011162573362, -0.0028205753954, -0.0044932244329, -0.0054969608851, -0.0053094837364, -0.0009529535828, +0.0021590719492, +0.0005345534813, -0.0011826512890, +0.0021510285647, +0.0064310168416, +0.0055308785949, +0.0017727588948, +0.0010098194414, +0.0037083746880, +0.0064332943579, +0.0057021392443, +0.0028010435236, +0.0019837175345, +0.0049146516143, +0.0085302390955, +0.0101661595635, +0.0081879484317, +0.0045285836094, +0.0029148473132, +0.0033690246155, +0.0059736971415, +0.0054985032551, +0.0029185518827, +0.0006962860363, +0.0018849338271, +0.0050919520085, +0.0048357457316, +0.0032076235985, +0.0055642917920, +0.0092209610713, +0.0081516667170, +0.0045814133615, -0.0001052558924, -0.0036940609238, -0.0011177852914, +0.0040940679117, +0.0046536740834, +0.0006280614208, -0.0013320593047, +0.0004906752382, -0.0005134071669, -0.0012806998489, +0.0006573520230, +0.0008897308573, +0.0005528601076, +0.0018375960629, +0.0021069917594, +0.0000977314365, +0.0018047162092, +0.0070357985768, +0.0086593224317, +0.0058038347146, +0.0027150023809, +0.0040623268162, +0.0093885459807, +0.0117805012769, +0.0098612461294, +0.0078271060931, +0.0074667394377, +0.0068778859081, +0.0064553199686, +0.0054319795707, +0.0016061397678, -0.0032690444909, -0.0051601045514, -0.0028359702600, -0.0006244865840, -0.0015503550097, -0.0022392751511, +0.0002094595151, +0.0036620027062, +0.0049601154716, +0.0023878903603, -0.0014587498053, -0.0026545184414, -0.0032621831100, -0.0029044687533, -0.0017744021669, -0.0024749981886, -0.0027128545949, -0.0010972011475, +0.0006625701318, +0.0005290903229, -0.0003213029093, +0.0003172523881, +0.0010285152636, -0.0005378976844, -0.0029964487388, -0.0033829491838, -0.0022598737098, -0.0014111669927, -0.0012192789565, -0.0013258754123, -0.0009644853156, -0.0015323799202, -0.0027946434111, -0.0020415635901, -0.0012803250677, -0.0021430860846, -0.0021094422527, -0.0017409601403, -0.0025211107050, -0.0036333175212, -0.0042878730992, -0.0037045259722, -0.0028295269033, -0.0024896434885, -0.0027795080121, -0.0046296448343, -0.0061291881451, -0.0070849814184, -0.0071450617461, -0.0058743945054, -0.0043933740411, -0.0029293772963, -0.0028740105635, -0.0040214324087, -0.0058031428102, -0.0060093590254, -0.0036428312007, -0.0007608781560, +0.0011561283035, +0.0004037115562, -0.0015397746445, -0.0026872397328, -0.0026414299238, -0.0018088388041, -0.0024139520762, -0.0035568188875, -0.0039857416953, -0.0034252706433, -0.0028839422684, -0.0042517643591, -0.0066552658041, -0.0076718313083, -0.0061797980387, -0.0027978578815, -0.0008907687134, -0.0024543708005, -0.0058142132745, -0.0079417747630, -0.0061119337896, -0.0047158445381, -0.0062481091415, -0.0085857643906, -0.0105078880556, -0.0100740930907, -0.0077852170726, -0.0057107880447, -0.0057628682334, -0.0072461229710, -0.0072934895647, -0.0054676414547, -0.0047329547473, -0.0063348566034, -0.0076989308815, -0.0071287011004, -0.0053808075054, -0.0029713239746, -0.0016836906723, -0.0018713984559, -0.0025371542285, -0.0015544343603, +0.0003901041112, +0.0000118920992, -0.0032592136880, -0.0056350966324, -0.0038027042636, -0.0004022556747, +0.0011369423821, -0.0007093457243, -0.0049737085018, -0.0077899018392, -0.0066428980193, -0.0048741752322, -0.0052199686602, -0.0073149818319, -0.0081908025357, -0.0076032607412, -0.0072567033362, -0.0067036125937, -0.0066689453216, -0.0061082003918, -0.0052906149383, -0.0039157584909, -0.0028012453289, -0.0039611502745, -0.0058281955006, -0.0055459851657, -0.0043841918984, -0.0039997383362, -0.0046870007908, -0.0051153614268, -0.0042438795369, -0.0029151644353, -0.0020310264692, -0.0021762686457, -0.0032332672890, -0.0047935828331, -0.0045325043990, -0.0035315643918, -0.0042793107872, -0.0055943319553, -0.0058948200871, -0.0053009070109, -0.0048205238440, -0.0038113242334, -0.0015755518464, +0.0004595828029, +0.0003215479589, -0.0021622720048, -0.0054096944970, -0.0068500656022, -0.0052460592056, -0.0016374051790, -0.0005417608150, -0.0014177544946, -0.0023037087098, -0.0010475282080, +0.0013461136046, +0.0023819226880, +0.0014698923422, -0.0010225043470, -0.0018161470399, -0.0010028859867, +0.0007229099250, +0.0020640792987, +0.0017642686566, +0.0011484308718, +0.0003239840375, +0.0003106216421, +0.0005080449105, +0.0005269281233, +0.0002412582684, -0.0005021781415, -0.0005523555949, -0.0012510200508, -0.0035050702358, -0.0054122458924, -0.0054369238005, -0.0038430509141, -0.0033699471548, -0.0039295965695, -0.0045771466203, -0.0049478630060, -0.0047697842189, -0.0036756389807, -0.0016000135345, -0.0008085186276, -0.0011065706808, +0.0002817346505, +0.0023111610919, +0.0034973151451, +0.0028689942600, +0.0008982499250, -0.0000219535369, -0.0003541251052, +0.0004929815840, +0.0016320717521, +0.0014637661100, +0.0014520902297, +0.0019098567848, +0.0033662425852, +0.0042354469577, +0.0045176572926, +0.0046223942576, +0.0035891653978, +0.0014096246227, -0.0004519430290, -0.0004662279637, +0.0010730709964, +0.0023721351306, +0.0019239110846, +0.0005069349819, -0.0010489408452, -0.0008821919867, +0.0023395435695, +0.0065296275732, +0.0071227478428, +0.0036543052745, +0.0005514186409, +0.0006263316614, +0.0025835117956, +0.0031195355732, +0.0027077518029, +0.0007961364293, -0.0020149829456, -0.0017861212902, +0.0015652453591, +0.0032082001850, +0.0024514446239, +0.0018557008839, +0.0035016251306, +0.0047309366941, +0.0034913618875, +0.0015764455550, -0.0000556117823, -0.0006048249794, -0.0000167786711, +0.0016657011681, +0.0031739221088, +0.0021161450726, +0.0012962388585, +0.0031905998779, +0.0047842421294, +0.0044332882515, +0.0048715373482, +0.0067858482648, +0.0073585717823, +0.0060907874752, +0.0052361563301, +0.0056625421560, +0.0057112781427, +0.0055786199698, +0.0049617299141, +0.0036091441258, +0.0018223165163, +0.0004653342539, +0.0004115387207, +0.0019849571959, +0.0032562875115, +0.0037392509033, +0.0038166432455, +0.0035702821850, +0.0027705420895, +0.0022551601137, +0.0028131374281, +0.0041858460907, +0.0041370092019, +0.0035052432116, +0.0045875107654, +0.0057061176929, +0.0081336916288, +0.0103184505127, +0.0104456022830, +0.0087169234377, +0.0065468675139, +0.0061459668174, +0.0056310605248, +0.0045202663470, +0.0039058267848, +0.0030250762648, +0.0018411709008, +0.0010014733495, +0.0015390539117, +0.0024990562660, +0.0027889496179, +0.0026068779698, +0.0028327269601, +0.0028903712092, +0.0027406172418, +0.0033766499746, +0.0034872681221, +0.0026820648682, +0.0007115223386, -0.0016852042116, -0.0015938296433, +0.0006516870593, +0.0025180259674, +0.0036139874534, +0.0033915403241, +0.0018413871197, +0.0009754260484, +0.0014144102926, +0.0030693581197, +0.0039772802854, +0.0034584820339, +0.0016045829843, -0.0008033870060, -0.0016275743761, -0.0003146865780, +0.0018860725852, +0.0039725666904, +0.0048708598585, +0.0046268051451, +0.0036899239154, +0.0031196508900, +0.0022871895018, +0.0015972315042, +0.0004982285224, -0.0003417717364, +0.0004924194123, +0.0017690110810, +0.0030292853482, +0.0028826737775, +0.0009529824123, -0.0014794492660, -0.0023717747630, -0.0010929632358, +0.0007350903180, +0.0004518421270, -0.0014590813434, -0.0027666933736, -0.0028125752563, -0.0019024332322, -0.0017323401705, -0.0031735473277, -0.0041915398839, -0.0036079044643, -0.0013763844027, +0.0005498041983, -0.0000257734232, -0.0014357728283, -0.0019112550073, -0.0013689464353, -0.0009183583845, -0.0013372774135, -0.0013229924788, -0.0002723362890, +0.0002510169976, +0.0005312525236, -0.0000553523180, -0.0012255349214, -0.0014278880048, -0.0007677107074, -0.0005120377727, -0.0010415317074, -0.0020583278464, -0.0022086872297, -0.0021272731947, -0.0024494842285, -0.0029081300786, -0.0032820897642, -0.0029915621669, -0.0019692019649, -0.0009035112781, -0.0009204485103, -0.0011844242926, -0.0011501029722, -0.0017737246771, -0.0020200136638, -0.0026528175103, -0.0036242506953, -0.0038688387521, -0.0032731815006, -0.0022627854728, -0.0019497854099, -0.0023965391596, -0.0036547665441, -0.0040688278307, -0.0038201604244, -0.0036714587279, -0.0029563759661, -0.0014739572781, +0.0004532115200, +0.0008079564559, -0.0006303965973, -0.0026696105961, -0.0048818294196, -0.0063380566590, -0.0063812429988, -0.0063158580726, -0.0064129840943, -0.0064989819927, -0.0053292606590, -0.0033192796022, -0.0024800433216, -0.0033668480012, -0.0046607949287, -0.0054964275429, -0.0054233019407, -0.0040425931378, -0.0026504246759, -0.0021486069008, -0.0020621477328, -0.0011171798755, +0.0010216971258, +0.0022364354619, +0.0017884564655, -0.0001448097364, -0.0022585908041, -0.0031739365236, -0.0035135172297, -0.0050673461741, -0.0060172294329, -0.0064332367001, -0.0065363448077, -0.0053445113761, -0.0043335964196, -0.0047003055284, -0.0051328031729, -0.0045949199033, -0.0036535557122, -0.0045797124305, -0.0067704245719, -0.0083307112866, -0.0088638088863, -0.0078616580484, -0.0061673293519, -0.0053339021814, -0.0054644558138, -0.0052421960750, -0.0038404851040, -0.0029712374873, -0.0039177909589, -0.0050570685175, -0.0052598684559, -0.0051042044752, -0.0055861155961, -0.0071543015478, -0.0084897915429, -0.0087608593410, -0.0064509090810, -0.0021723911004, -0.0013004911850, -0.0038964860822, -0.0065515522805, -0.0050643190943, -0.0010404361923, +0.0005490258065, -0.0009182574813, -0.0045209438368, -0.0059731637981, -0.0033365483724, -0.0007178071330, -0.0007913363458, -0.0032826807654, -0.0055908580218, -0.0059035842044, -0.0051865410484, -0.0048713355429, -0.0055233108960, -0.0067591378888, -0.0078800367473, -0.0089603583216, -0.0087173558779, -0.0066204976288, -0.0056189810351, -0.0051540648053, -0.0048854042576, -0.0051940799190, -0.0049613263035, -0.0031184977170, -0.0003840931959, +0.0002538278573, -0.0012115094510, -0.0014209401366, -0.0002817346505, +0.0004490456820, +0.0003253390157, -0.0000320005586, -0.0001438151245, -0.0009419119492, -0.0019514286820, -0.0027267647485, -0.0046419117158, -0.0063352025550, -0.0059981588295, -0.0049923322503, -0.0039264397582, -0.0035244291318, -0.0045467172600, -0.0055329398924, -0.0060490137727, -0.0061963460750, -0.0058135501995, -0.0057162079589, -0.0053102044704, -0.0054654792539, -0.0057007842660, -0.0048351259008, -0.0025973066312, -0.0006517158888, -0.0004654639867, -0.0016486918622, -0.0030242546300 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/03-stk-m1.h000066400000000000000000000550761247673406200226650ustar00rootroot00000000000000float stk_m1[] = { -0.0078354283852, -0.0305904437564, -0.0544448647061, -0.0654778659204, -0.0493025333033, +0.0057999367459, +0.0697043517155, +0.1049470287295, +0.1062267837260, +0.0866926526019, +0.0628288791663, +0.0440187979075, +0.0317299114731, +0.0240030835890, +0.0188275299251, +0.0151256208396, +0.0124967349496, +0.0107776923255, +0.0098134092201, +0.0094201860714, +0.0094193485363, +0.0096668404215, +0.0100590864450, +0.0105258731710, +0.0110197402272, +0.0115077445328, +0.0119674122026, +0.0123829696440, +0.0127452039602, +0.0130483919895, +0.0132901607131, +0.0134696725937, +0.0135874859906, +0.0136454155632, +0.0136451363841, +0.0135893006511, +0.0134801417939, +0.0133203120082, +0.0131127426721, +0.0128596672131, +0.0125634586499, +0.0122264900023, +0.0118511342892, +0.0114392061698, +0.0109927994859, +0.0105137288993, +0.0100040882482, +0.0094655526042, +0.0088999366311, +0.0083090549895, +0.0050828663466, -0.0031392244883, -0.0117486757190, -0.0161038628782, -0.0114075193923, +0.0062480185012, +0.0268223693279, +0.0378285693899, +0.0375009532272, +0.0302240217600, +0.0214935465773, +0.0144385621475, +0.0095493062037, +0.0061736173876, +0.0036425836194, +0.0015980186733, -0.0000926873162, -0.0014832762424, -0.0026241398525, -0.0035754411511, -0.0043959472447, -0.0051326997389, -0.0058197584309, -0.0064797367927, -0.0071275708829, -0.0077730319543, -0.0084232390621, -0.0090827986557, -0.0097539441651, -0.0104376527131, -0.0111346222482, -0.0118441548220, -0.0125656920796, -0.0132981173044, -0.0140398950152, -0.0147899084965, -0.0155469014438, -0.0163094779649, -0.0170759629871, -0.0178455189742, -0.0186167500340, -0.0193885394508, -0.0201599100995, -0.0209300244438, -0.0216973470023, -0.0224610402377, -0.0232202666148, -0.0239740490070, -0.0247215498806, -0.0254617921089, -0.0261943569227, -0.0269185463770, -0.0276336625258, -0.0283391470094, -0.0290338831148, -0.0297175916628, -0.0303895747073, -0.0310496926593, -0.0316973871593, -0.0323319602623, -0.0329527140222, -0.0335593692588, -0.0341516467951, -0.0347291278618, -0.0352913936909, -0.0358384442834, -0.0363698608700, -0.0368852246838, -0.0373842565457, -0.0378665376885, -0.0383317889321, -0.0387800102775, -0.0392109225445, -0.0396250840925, -0.0400219365644, -0.0404010611897, -0.0407623183806, -0.0411058477272, -0.0414313700492, -0.0417388853478, -0.0420285332119, -0.0423004532307, -0.0425546454040, -0.0427911097330, -0.0430097066265, -0.0432102964965, -0.0433928793431, -0.0435577343443, -0.0437051406792, -0.0438345399895, -0.0439469094016, -0.0440422489157, -0.0441206981206, -0.0441821174262, -0.0442265068337, -0.0442535871639, -0.0442643355433, -0.0442590311487, -0.0442373948021, -0.0442001244508, -0.0441470805035, -0.0440782629637, -0.0439940905960, -0.0438949821710, -0.0437810772752, -0.0436529342681, -0.0435106927389, -0.0433544922763, -0.0431844724707, -0.0430009124988, -0.0428038123618, -0.0425935908279, -0.0423702478970, -0.0421346211042, -0.0418865708618, -0.0416269347037, -0.0413561313993, -0.0410743005386, -0.0407815817084, -0.0404783936803, -0.0401644572717, -0.0398397724859, -0.0395057352143, -0.0391627642248, -0.0388107199297, -0.0384496023279, -0.0380796905984, -0.0377019618653, -0.0373165557201, -0.0369236117506, -0.0365231299567, -0.0361155291077, -0.0357010883806, -0.0352800869555, -0.0348528040094, -0.0344199374906, -0.0339820457564, -0.0335391288056, -0.0330910470504, -0.0326383588466, -0.0321813433735, -0.0317198610422, -0.0312544702084, -0.0307854500527, -0.0303132193431, -0.0298374988993, -0.0293588470796, -0.0288781014204, -0.0283949827424, -0.0279096306347, -0.0274230222237, -0.0269352970972, -0.0264460364883, -0.0259555195761, -0.0254644443056, -0.0249728106780, -0.0244806186932, -0.0239882871194, -0.0234960951347, -0.0230041823290, -0.0225128278794, -0.0220218921991, -0.0215317940539, -0.0210426730351, -0.0205549479087, -0.0200691770340, -0.0195846624625, -0.0191018229625, -0.0186206585351, -0.0181413087693, -0.0176640528431, -0.0171893095246, -0.0167174975820, -0.0162490357834, -0.0157830865937, -0.0153197896007, -0.0148592843946, -0.0144025480995, -0.0139493015386, -0.0134991259426, -0.0130521609016, -0.0126089647728, -0.0121695375550, -0.0117344376077, -0.0113032461604, -0.0108755444473, -0.0104517512354, -0.0100327040609, -0.0096185425129, -0.0092082894660, -0.0088023636885, -0.0084007651803, -0.0080036335304, -0.0076112479180, -0.0072233291639, -0.0068402960375, -0.0064628464836, -0.0060900033782, -0.0057206500047, -0.0053560426698, -0.0049970189075, -0.0046432995410, -0.0042943262108, -0.0039502385070, -0.0036108968407, -0.0032763012119, -0.0029474287459, -0.0026237210843, -0.0023050386393, -0.0019912418208, -0.0016823306300, -0.0013784446534, -0.0010793047155, -0.0007846316358, -0.0004954025398, -0.0002118966066, +0.0000671424684, +0.0003411563279, +0.0006102845597, +0.0008743875761, +0.0011338841440, +0.0013883554965, +0.0016373828642, +0.0018813850176, +0.0021211994895, +0.0023561283349, +0.0025856131967, +0.0028100728431, +0.0030304843981, +0.0032464290948, +0.0034576277541, +0.0036642199660, +0.0038667640867, +0.0040653997061, +0.0042595684672, +0.0044485724227, +0.0046328303407, +0.0048126214005, +0.0049886435480, +0.0051603384262, +0.0053277060351, +0.0054911651429, +0.0056502969813, +0.0058048223724, +0.0059557184403, +0.0061028455960, +0.0062457850726, +0.0063850952260, +0.0065207760562, +0.0066526879754, +0.0067805518033, +0.0069046467190, +0.0070251123126, +0.0071419485843, +0.0072554347108, +0.0073654311042, +0.0074723565328, +0.0075760714063, +0.0076760173677, +0.0077730319543, +0.0078669755749, +0.0079572898724, +0.0080448123829, +0.0081299618759, +0.0082119008138, +0.0082902104286, +0.0083655886686, +0.0084387334789, +0.0085089469122, +0.0085758102026, +0.0086400212951, +0.0087022781370, +0.0087621619602, +0.0088198123548, +0.0088743917834, +0.0089256210679, +0.0089740585667, +0.0090209605820, +0.0090661875258, +0.0091094602190, +0.0091503598934, +0.0091891657272, +0.0092253193642, +0.0092588208044, +0.0092902284040, +0.0093202401101, +0.0093485767447, +0.0093753778958, +0.0094005039766, +0.0094236758056, +0.0094450329731, +0.0094647150691, +0.0094824429133, +0.0094983560972, +0.0095127337986, +0.0095255760176, +0.0095370223431, +0.0095467935960, +0.0095551689555, +0.0095621484227, +0.0095675924063, +0.0095717800867, +0.0095747114625, +0.0095762469450, +0.0095765261241, +0.0095756885878, +0.0095738739262, +0.0095709425504, +0.0095667548700, +0.0095614504754, +0.0095551689555, +0.0095477707213, +0.0095392557717, +0.0095301824660, +0.0095201320340, +0.0095088252974, +0.0094966810258, +0.0094839783970, +0.0094704382319, +0.0094557813513, +0.0094402869356, +0.0094243737518, +0.0094079022108, +0.0093907327225, +0.0093727256991, +0.0093537415504, +0.0093340594543, +0.0093140981792, +0.0092935785480, +0.0092726401475, +0.0092517017482, +0.0092311821159, +0.0092098249485, +0.0091867927084, +0.0091626437541, +0.0091379364426, +0.0091129499520, +0.0090876842834, +0.0090621394356, +0.0090363154087, +0.0090100726148, +0.0089835506417, +0.0089567494895, +0.0089295295703, +0.0089020304719, +0.0088748105515, +0.0088484281674, +0.0088216270164, +0.0087935695609, +0.0087645349789, +0.0087349420410, +0.0087050699239, +0.0086751978068, +0.0086450465105, +0.0086148952155, +0.0085846043302, +0.0085543134450, +0.0085238829707, +0.0084938712646, +0.0084646970937, +0.0084353833349, +0.0084049528595, +0.0083736848501, +0.0083421376604, +0.0083104508817, +0.0082786245141, +0.0082469377365, +0.0082152509578, +0.0081835641792, +0.0081518774005, +0.0081208885691, +0.0080907372740, +0.0080605859778, +0.0080293179672, +0.0079974915995, +0.0079652464637, +0.0079330013279, +0.0079007561932, +0.0078685110574, +0.0078365450995, +0.0078047187319, +0.0077740090796, +0.0077442765515, +0.0077141252553, +0.0076828572459, +0.0076508912881, +0.0076186461522, +0.0075864010176, +0.0075542954707, +0.0075223295141, +0.0074905031464, +0.0074588163677, +0.0074279671253, +0.0073982345972, +0.0073683624801, +0.0073379320059, +0.0073072223525, +0.0072760939321, +0.0072448259215, +0.0072132787330, +0.0071818711323, +0.0071507427119, +0.0071196142904, +0.0070893234052, +0.0070602888244, +0.0070311146546, +0.0070012425375, +0.0069706724731, +0.0069402419988, +0.0069099511136, +0.0068797998185, +0.0068496485222, +0.0068193576370, +0.0067892063419, +0.0067597529930, +0.0067315559473, +0.0067033589028, +0.0066744639110, +0.0066448709719, +0.0066151384450, +0.0065855455059, +0.0065565109251, +0.0065276159333, +0.0064987209415, +0.0064696863607, +0.0064413497260, +0.0064142693958, +0.0063871890656, +0.0063591316101, +0.0063306553864, +0.0063018999836, +0.0062735633489, +0.0062456454824, +0.0062178672061, +0.0061899493396, +0.0061627294192, +0.0061366262143, +0.0061105230094, +0.0060835822681, +0.0060560831698, +0.0060283048934, +0.0060006662049, +0.0059734462857, +0.0059466451335, +0.0059201231604, +0.0058934615984, +0.0058673583934, +0.0058425114918, +0.0058175250012, +0.0057915613852, +0.0057651790023, +0.0057385174391, +0.0057118558770, +0.0056857526721, +0.0056600682354, +0.0056345233876, +0.0056089785398, +0.0055839920492, +0.0055601222728, +0.0055362524977, +0.0055114055960, +0.0054860003384, +0.0054604554906, +0.0054349106429, +0.0054097845632, +0.0053852168407, +0.0053607887073, +0.0053362209848, +0.0053123512084, +0.0052897377377, +0.0052669846756, +0.0052432544895, +0.0052189659461, +0.0051943982237, +0.0051698305012, +0.0051456815468, +0.0051220909496, +0.0050986399415, +0.0050750493443, +0.0050521566944, +0.0050303807588, +0.0050086048220, +0.0049858517611, +0.0049625403431, +0.0049389497459, +0.0049156383279, +0.0048928852658, +0.0048704113841, +0.0048476583232, +0.0048249052611, +0.0048028501475, +0.0047820513361, +0.0047612525258, +0.0047396161792, +0.0047172818864, +0.0046946684145, +0.0046724737108, +0.0046506977752, +0.0046290614286, +0.0046072854930, +0.0045855095574, +0.0045637336218, +0.0045427952213, +0.0045231131253, +0.0045034310293, +0.0044827718091, +0.0044615542307, +0.0044403366522, +0.0044193982518, +0.0043985994415, +0.0043776610422, +0.0043567226417, +0.0043356446522, +0.0043155437892, +0.0042966992295, +0.0042778546698, +0.0042581725738, +0.0042377925304, +0.0042174124883, +0.0041973116253, +0.0041774899391, +0.0041575286651, +0.0041372882119, +0.0041173269379, +0.0040980636101, +0.0040800565855, +0.0040621891511, +0.0040432050023, +0.0040236624953, +0.0040041199895, +0.0039849962506, +0.0039658725117, +0.0039466091838, +0.0039274854461, +0.0039082221183, +0.0038890983794, +0.0038709517670, +0.0038540614567, +0.0038371711475, +0.0038193037131, +0.0038010175105, +0.0037827313091, +0.0037644451066, +0.0037460193138, +0.0037274539333, +0.0037090281417, +0.0036906023489, +0.0036724557365, +0.0036552862482, +0.0036392334754, +0.0036233202916, +0.0036062903934, +0.0035888417260, +0.0035715326487, +0.0035540839824, +0.0035364957272, +0.0035189074707, +0.0035013192155, +0.0034837309590, +0.0034671198290, +0.0034519045913, +0.0034365497646, +0.0034203574028, +0.0034036066827, +0.0033869955527, +0.0033703844215, +0.0033533545234, +0.0033364642143, +0.0033195739052, +0.0033028231850, +0.0032862120550, +0.0032698801030, +0.0032543856874, +0.0032400079859, +0.0032260490527, +0.0032112525831, +0.0031958977564, +0.0031797053946, +0.0031632338536, +0.0031467623115, +0.0031305699496, +0.0031145171756, +0.0030987435820, +0.0030829699871, +0.0030685922857, +0.0030558896569, +0.0030433266171, +0.0030296468618, +0.0030148503934, +0.0029992163876, +0.0029834427939, +0.0029675296101, +0.0029518956042, +0.0029365407775, +0.0029213255410, +0.0029063894824, +0.0028924305492, +0.0028797279192, +0.0028671648794, +0.0028540434824, +0.0028400845492, +0.0028255672588, +0.0028106312002, +0.0027958347307, +0.0027810382623, +0.0027665209719, +0.0027521432705, +0.0027380447482, +0.0027247837611, +0.0027130582576, +0.0027017515211, +0.0026893280703, +0.0026756483162, +0.0026615497939, +0.0026473116815, +0.0026330735703, +0.0026191146370, +0.0026054348817, +0.0025917551276, +0.0025783545515, +0.0025657915117, +0.0025546243653, +0.0025435968080, +0.0025318713044, +0.0025193082646, +0.0025060472775, +0.0024926467026, +0.0024791065363, +0.0024657059614, +0.0024525845632, +0.0024396027553, +0.0024267605375, +0.0024140579075, +0.0024021928150, +0.0023921423829, +0.0023825107190, +0.0023716227506, +0.0023594784789, +0.0023466362611, +0.0023336544532, +0.0023206726452, +0.0023079700152, +0.0022954069754, +0.0022831231148, +0.0022709788431, +0.0022591137494, +0.0022482257822, +0.0022391524754, +0.0022299395796, +0.0022191912002, +0.0022073261077, +0.0021951818349, +0.0021828979742, +0.0021706141136, +0.0021587490199, +0.0021470235164, +0.0021355771909, +0.0021241308653, +0.0021139408443, +0.0021054258946, +0.0020967713560, +0.0020867209239, +0.0020755537775, +0.0020639678630, +0.0020522423595, +0.0020406564450, +0.0020293497084, +0.0020183221522, +0.0020074341838, +0.0019966858056, +0.0019863561944, +0.0019771432986, +0.0019693262963, +0.0019610905258, +0.0019513192728, +0.0019407104836, +0.0019296829262, +0.0019186553689, +0.0019077674005, +0.0018970190222, +0.0018865498220, +0.0018762202119, +0.0018660301909, +0.0018562589368, +0.0018470460410, +0.0018385310925, +0.0018309932681, +0.0018230366768, +0.0018138237799, +0.0018037733489, +0.0017934437377, +0.0017831141276, +0.0017729241066, +0.0017628736745, +0.0017529628314, +0.0017433311674, +0.0017339786827, +0.0017253241440, +0.0017173675515, +0.0017103880855, +0.0017029898513, +0.0016943353126, +0.0016848432377, +0.0016750719848, +0.0016653007307, +0.0016556690667, +0.0016461769930, +0.0016368245070, +0.0016280303794, +0.0016196550199, +0.0016114192494, +0.0016036022459, +0.0015969019578, +0.0015899224918, +0.0015818263103, +0.0015727530035, +0.0015635401077, +0.0015543272119, +0.0015452539052, +0.0015363201885, +0.0015275260609, +0.0015192902892, +0.0015114732869, +0.0015037958735, +0.0014956996932, +0.0014883014578, +0.0014821595269, +0.0014758780070, +0.0014683401838, +0.0014599648232, +0.0014511706956, +0.0014423765679, +0.0014338616183, +0.0014253466698, +0.0014171108993, +0.0014092938958, +0.0014020352506, +0.0013947766054, +0.0013879367283, +0.0013823531546, +0.0013763508138, +0.0013692317576, +0.0013612751663, +0.0013530393958, +0.0013446640351, +0.0013365678536, +0.0013286112623, +0.0013207942600, +0.0013133960246, +0.0013066957365, +0.0012998558595, +0.0012927368044, +0.0012863156944, +0.0012810112998, +0.0012755673162, +0.0012688670281, +0.0012614687939, +0.0012536517904, +0.0012458347881, +0.0012381573747, +0.0012307591405, +0.0012237796733, +0.0012172189754, +0.0012107978665, +0.0012040975785, +0.0011972577002, +0.0011909761803, +0.0011862301440, +0.0011812049274, +0.0011750629965, +0.0011682231194, +0.0011609644742, +0.0011535662400, +0.0011464471838, +0.0011394677178, +0.0011329070187, +0.0011269046780, +0.0011210419251, +0.0011148999953, +0.0011083392963, +0.0011017785972, +0.0010961950246, +0.0010918677553, +0.0010874008970, +0.0010818173232, +0.0010753962143, +0.0010685563372, +0.0010618560492, +0.0010554349391, +0.0010494325984, +0.0010437094356, +0.0010377070948, +0.0010315651639, +0.0010252836440, +0.0010191417131, +0.0010139769075, +0.0010100684063, +0.0010060203162, +0.0010008555105, +0.0009949927588, +0.0009885716499, +0.0009822901300, +0.0009761481991, +0.0009707042155, +0.0009653998208, +0.0009598162471, +0.0009540930843, +0.0009482303326, +0.0009425071698, +0.0009367840070, +0.0009320379696, +0.0009286878255, +0.0009250585035, +0.0009204520550, +0.0009148684824, +0.0009090057307, +0.0009031429778, +0.0008979781733, +0.0008929529567, +0.0008875089731, +0.0008820649895, +0.0008764814157, +0.0008710374321, +0.0008657330375, +0.0008612661792, +0.0008581952131, +0.0008551242482, +0.0008506573899, +0.0008454925843, +0.0008399090105, +0.0008343254379, +0.0008290210433, +0.0008244145948, +0.0008198081475, +0.0008149225199, +0.0008098973044, +0.0008047324988, +0.0007997072834, +0.0007948216569, +0.0007907735656, +0.0007879817799, +0.0007851899930, +0.0007812814918, +0.0007763958642, +0.0007710914696, +0.0007660662541, +0.0007617389848, +0.0007572721265, +0.0007526656780, +0.0007477800515, +0.0007428944251, +0.0007381483876, +0.0007334023501, +0.0007287959028, +0.0007251665796, +0.0007227935609, +0.0007204205422, +0.0007167912201, +0.0007121847717, +0.0007072991452, +0.0007025531077, +0.0006983654286, +0.0006943173372, +0.0006899900679, +0.0006855232096, +0.0006809167611, +0.0006764499028, +0.0006721226335, +0.0006676557752, +0.0006634680948, +0.0006601179508, +0.0006581637002, +0.0006560698607, +0.0006527197166, +0.0006488112155, +0.0006449027143, +0.0006408546230, +0.0006366669438, +0.0006320604953, +0.0006275936370, +0.0006232663677, +0.0006189390984, +0.0006148910070, +0.0006108429169, +0.0006069344157, +0.0006038634508, +0.0006023279672, +0.0006007924848, +0.0005977215199, +0.0005940921967, +0.0005903232857, +0.0005864147834, +0.0005822271042, +0.0005778998349, +0.0005735725656, +0.0005693848852, +0.0005653367951, +0.0005614282939, +0.0005576593817, +0.0005538904696, +0.0005502611464, +0.0005474693607, +0.0005460734672, +0.0005445379848, +0.0005420253759, +0.0005389544110, +0.0005356042670, +0.0005316957658, +0.0005275080855, +0.0005233204063, +0.0005194119040, +0.0005155034028, +0.0005117344906, +0.0005081051686, +0.0005047550246, +0.0005012652916, +0.0004977755585, +0.0004952629496, +0.0004941462354, +0.0004928899309, +0.0004906565023, +0.0004878647155, +0.0004846541604, +0.0004808852494, +0.0004769767471, +0.0004730682459, +0.0004692993337, +0.0004656700117, +0.0004621802787, +0.0004588301347, +0.0004554799906, +0.0004524090246, +0.0004491984707, +0.0004469650410, +0.0004459879157, +0.0004452899696, +0.0004437544859, +0.0004412418782, +0.0004377521452, +0.0004339832330, +0.0004300747319, +0.0004263058197, +0.0004226764977, +0.0004191867646, +0.0004159762096, +0.0004127656546, +0.0004096946897, +0.0004067633138, +0.0004036923478, +0.0004007609719, +0.0003988067213, +0.0003983879532, +0.0003982483642, +0.0003968524707, +0.0003940606838, +0.0003904313618, +0.0003868020386, +0.0003830331276, +0.0003795433934, +0.0003761932494, +0.0003731222845, +0.0003701909087, +0.0003671199438, +0.0003643281569, +0.0003615363700, +0.0003588841721, +0.0003569299215, +0.0003567903326, +0.0003569299215, +0.0003556736183, +0.0003530214204, +0.0003496712763, +0.0003460419543, +0.0003426918103, +0.0003393416663, +0.0003362707014, +0.0003333393244, +0.0003305475386, +0.0003277557518, +0.0003251035539, +0.0003225909461, +0.0003200783384, +0.0003175657307, +0.0003161698372, +0.0003165886054, +0.0003168677834, +0.0003153323009, +0.0003126801042, +0.0003093299602, +0.0003058402260, +0.0003026296721, +0.0002995587061, +0.0002966273302, +0.0002938355445, +0.0002913229356, +0.0002888103279, +0.0002862977201, +0.0002839247014, +0.0002815516827, +0.0002791786639, +0.0002780619496, +0.0002787598958, +0.0002791786639, +0.0002777827705, +0.0002751305738, +0.0002720596077, +0.0002688490539, +0.0002656384988, +0.0002628467119, +0.0002600549251, +0.0002575423173, +0.0002550297096, +0.0002527962799, +0.0002504232611, +0.0002483294215, +0.0002460959918, +0.0002441417412, +0.0002427458489, +0.0002421874906, +0.0002424666698, +0.0002423270808, +0.0002407915972, +0.0002382789895, +0.0002352080246, +0.0002322766487, +0.0002294848618, +0.0002268326651, +0.0002243200562, +0.0002219470375, +0.0002198531979, +0.0002176197681, +0.0002156655176, +0.0002135716780, +0.0002118966066, +0.0002106403021, +0.0002102215340, +0.0002107798911, +0.0002107798911, +0.0002093839977, +0.0002070109789, +0.0002042191932, +0.0002014274063, +0.0001986356194, +0.0001962626007, +0.0001938895820, +0.0001917957424, +0.0001897019016, +0.0001877476511, +0.0001859329906, +0.0001839787400, +0.0001825828466, +0.0001814661311, +0.0001803494169, +0.0001799306487, +0.0001813265422, +0.0001823036674, +0.0001811869532, +0.0001789535234, +0.0001761617365, +0.0001732303607, +0.0001704385749, +0.0001679259660, +0.0001656925375, +0.0001635986967, +0.0001616444461, +0.0001598297857, +0.0001580151241, +0.0001563400515, +0.0001549441581, +0.0001541066230, +0.0001532690867, +0.0001527107295, +0.0001534086756, +0.0001536878548, +0.0001525711393, +0.0001506168888, +0.0001481042810, +0.0001457312623, +0.0001434978337, +0.0001414039930, +0.0001393101534, +0.0001376350808, +0.0001358204204, +0.0001342849379, +0.0001327494543, +0.0001314931511, +0.0001307952037, +0.0001299576686, +0.0001288409532, +0.0001273054707, +0.0001264679344, +0.0001270262916, +0.0001275846499, +0.0001267471136, +0.0001249324520, +0.0001228386124, +0.0001206051827, +0.0001183717541, +0.0001165570925, +0.0001147424309, +0.0001130673595, +0.0001115318759, +0.0001101359824, +0.0001090192681, +0.0001087400902, +0.0001083213220, +0.0001073441967, +0.0001059483033, +0.0001042732307, +0.0001035752845, +0.0001042732307, +0.0001046919988, +0.0001039940527, +0.0001024585703, +0.0001005043185, +0.0000984104789, +0.0000964562283, +0.0000946415667, +0.0000929664953, +0.0000914310129, +0.0000900351194, +0.0000890579941, +0.0000884996370, +0.0000879412787, +0.0000871037436, +0.0000858474391, +0.0000844515457, +0.0000830556522, +0.0000826368841, +0.0000836140094, +0.0000843119567, +0.0000838931885, +0.0000824972951, +0.0000806826335, +0.0000787283829, +0.0000769137225, +0.0000752386499, +0.0000737031674, +0.0000724468630, +0.0000710509696, +0.0000702134344, +0.0000697946663, +0.0000693758981, +0.0000686779508, +0.0000675612365, +0.0000661653431, +0.0000650486288, +0.0000646298607, +0.0000657465749 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/04-fender-68-vibrolux-sm57.h000066400000000000000000002551571247673406200257130ustar00rootroot00000000000000float fender_68_vibrolux_sm57[] = { +0.0000000000000, +0.0000061913321, +0.0000061913321, +0.0000000000000, +0.0000000000000, -0.0000183742760, -0.0000730976633, -0.0000974635510, -0.0000671060515, -0.0000183742760, +0.0000487317755, +0.0001402037148, +0.0001461953265, +0.0001036548832, +0.0000427401638, -0.0000487317755, -0.0001036548832, -0.0000974635510, -0.0001523866587, -0.0002316756541, -0.0002133013781, -0.0001096464949, +0.0000183742760, +0.0002133013781, +0.0003475134811, +0.0002925903735, +0.0001523866587, +0.0000305572199, -0.0001096464949, -0.0001829438786, -0.0001523866587, -0.0000974635510, -0.0001158378270, -0.0000974635510, -0.0000243658878, +0.0000792889954, +0.0002438585980, +0.0003656880367, +0.0003047733174, +0.0001340123827, -0.0000609147194, -0.0002560415418, -0.0003413221490, -0.0002498502097, -0.0001280207709, -0.0001158378270, -0.0000792889954, +0.0000121829439, +0.0000730976633, +0.0002073097663, +0.0003656880367, +0.0003107649291, +0.0000852806071, -0.0001280207709, -0.0003535050929, -0.0004631515878, -0.0002863990413, -0.0000243658878, +0.0000792889954, +0.0001340123827, +0.0001951268224, +0.0002376672658, +0.0003596964250, +0.0004387857000, +0.0003229478730, +0.0000671060515, -0.0001951268224, -0.0005118833633, -0.0006582784102, -0.0003778709806, +0.0000609147194, +0.0002254843219, +0.0003291392051, +0.0003475134811, +0.0002254843219, +0.0001402037148, +0.0002804074296, +0.0001280207709, -0.0001705612143, -0.0005058917515, -0.0006339125225, -0.0008228480128, -0.0003778709806, +0.0000305572199, +0.0006764529658, +0.0005058917515, +0.0008715797883, -0.0002925903735, +0.0007070101857, -0.0001158378270, -0.0003535050929, +0.0006095466347, -0.0003596964250, -0.0009386858398, -0.0009508687837, -0.0001705612143, +0.0005546235271, +0.0012067106052, +0.0010239664470, +0.0011214299980, +0.0002254843219, +0.0001280207709, -0.0003656880367, -0.0002438585980, -0.0004449770322, -0.0004815258638, -0.0009690433393, -0.0013652885960, -0.0006826442980, +0.0009265028959, +0.0019320950669, +0.0019015378470, +0.0010970641102, -0.0001645696026, -0.0009203115638, -0.0006033553026, -0.0006460954663, -0.0010848811664, -0.0004693429199, -0.0004022368684, -0.0014933093669, -0.0022552426603, +0.0010726982225, +0.0125190732974, +0.0051258238466, -0.0314317954863, -0.0373013780707, +0.0362652286798, +0.1530511284202, +0.1628701817456, -0.0260621130417, -0.1997020171760, -0.1606942280807, -0.0844216097464, -0.0949780307569, -0.0449870181746, +0.0905592170961, +0.1607551428001, +0.1115320551228, +0.0124337926902, -0.0394711404034, -0.0241971240264, -0.0250015977631, -0.0405194727382, -0.0221551827442, +0.0141404034352, +0.0177485520272, -0.0056317155982, -0.0091364090274, +0.0046442979828, +0.0022184941082, -0.0105198721789, -0.0022246854404, +0.0198270421410, +0.0181142400639, -0.0172488516077, -0.0203023766727, +0.0083744757340, +0.0245628120631, +0.0209790293589, +0.0021881366087, -0.0257635310565, -0.0325044937088, -0.0036265228680, +0.0255624126223, +0.0260621130417, +0.0148352306771, +0.0107821050529, -0.0041751547833, -0.0144451767525, +0.0067531455962, +0.0327727181945, +0.0328336329139, +0.0142927900939, -0.0124337926902, -0.0314927102057, -0.0242458558019, -0.0071493908528, +0.0106113441182, +0.0287499500699, +0.0182666267226, -0.0132079089275, -0.0200403435191, -0.0085999600559, -0.0060461354104, +0.0020906730577, +0.0184799281007, +0.0230635110845, +0.0064789294987, -0.0109770321550, -0.0128665867785, -0.0016335130817, +0.0088254443779, +0.0131589774316, +0.0150728979429, +0.0108368284402, -0.0038703814659, -0.0179802276812, -0.0205034951069, -0.0130433393249, -0.0006948272419, +0.0103553025764, +0.0109770321550, +0.0042907928900, +0.0000792889954, -0.0025416417016, -0.0053818653885, -0.0022674256042, +0.0040531256241, +0.0073139604554, +0.0078625923707, +0.0063752746155, +0.0021697623327, -0.0027731176353, -0.0044859197124, -0.0048699820252, -0.0055220691033, -0.0016822448572, +0.0081733572998, +0.0157982824046, +0.0130980627122, +0.0014933093669, -0.0105260635111, -0.0152009187138, -0.0122508488117, -0.0048394248053, +0.0038703814659, +0.0091607749151, +0.0067287797084, +0.0008166566806, -0.0017126023567, +0.0003656880367, +0.0036081485920, +0.0039678450170, +0.0006948272419, -0.0029560615139, -0.0063083682844, -0.0069298981426, -0.0014202117036, +0.0067593369283, +0.0093618933493, +0.0052356700619, -0.0015114839225, -0.0080515278610, -0.0125799880168, -0.0111294188137, -0.0024319952067, +0.0069544637507, +0.0091913321350, +0.0040287597364, -0.0029500699021, -0.0063692830038, -0.0060217695227, -0.0054062312762, -0.0040409426802, +0.0001767525464, +0.0038092670262, +0.0035715997603, +0.0016760535251, +0.0001829438786, -0.0009265028959, -0.0026452965848, -0.0039800279609, -0.0031206311164, -0.0007741162373, -0.0000730976633, -0.0014383862592, -0.0025416417016, -0.0028158577991, -0.0033826642700, -0.0037727181945, -0.0035899740363, -0.0021332135011, +0.0012372678250, +0.0037970840823, +0.0031390053925, +0.0005851807470, -0.0024441781506, -0.0044371879369, -0.0038398242461, -0.0011823447174, +0.0011032554424, +0.0018040742960, +0.0008837627322, -0.0019992011184, -0.0053209506691, -0.0064607549431, -0.0041689634512, -0.0001767525464, +0.0021453964450, +0.0016700619133, +0.0013531056521, +0.0017737167965, +0.0013347313761, +0.0005180746954, -0.0003962452566, -0.0025050928700, -0.0039984022369, -0.0032668264430, -0.0018771719593, -0.0006033553026, +0.0008350309567, +0.0012800079888, +0.0000000000000, -0.0009021370082, -0.0011823447174, -0.0016029558618, -0.0013896544837, +0.0000792889954, +0.0001402037148, -0.0020417415618, -0.0033339324945, -0.0014080287597, +0.0013225484322, +0.0016395046934, -0.0002804074296, -0.0020539245057, -0.0022796085480, -0.0011154383863, +0.0001461953265, +0.0003413221490, -0.0006460954663, -0.0016456960256, -0.0007862991811, +0.0007375674056, +0.0013103654883, +0.0010667066107, +0.0001645696026, -0.0007375674056, +0.0001583782704, +0.0015785899740, +0.0014445775914, -0.0004022368684, -0.0019930097863, -0.0025903734771, -0.0014445775914, +0.0007741162373, +0.0012981825444, +0.0003962452566, +0.0001461953265, +0.0003535050929, +0.0006826442980, +0.0013958458159, +0.0018589974036, +0.0017004194128, +0.0003596964250, -0.0011032554424, -0.0006520870781, +0.0006582784102, +0.0002316756541, -0.0004875174755, +0.0005546235271, +0.0018955462353, +0.0017309766327, +0.0014627521470, +0.0014933093669, +0.0002073097663, -0.0016638705812, -0.0014383862592, -0.0002985819852, -0.0005851807470, -0.0007497503495, +0.0005302576393, +0.0020906730577, +0.0027183942481, +0.0021941282205, +0.0012007189934, +0.0007922907929, +0.0009324945077, +0.0009752346715, +0.0005851807470, -0.0002863990413, -0.0008715797883, -0.0006704613541, +0.0000061913321, -0.0000305572199, -0.0008288396245, -0.0008532055123, -0.0003107649291, -0.0003351308169, -0.0000305572199, +0.0013469143200, +0.0020906730577, +0.0019992011184, +0.0014383862592, +0.0003718793689, -0.0003291392051, -0.0001158378270, +0.0001158378270, -0.0000792889954, -0.0003291392051, +0.0001461953265, +0.0007679249051, +0.0007191931296, +0.0009508687837, +0.0011457958858, +0.0008472139005, +0.0005424405832, +0.0008837627322, +0.0015664070302, +0.0014080287597, +0.0004753345317, -0.0002438585980, -0.0009081286199, -0.0014993009786, -0.0014811264230, -0.0008837627322, -0.0004206111444, -0.0003535050929, -0.0002985819852, -0.0001340123827, +0.0002011184342, +0.0012190932694, +0.0021150389455, +0.0025232674256, +0.0025660075894, +0.0010483323347, -0.0008350309567, -0.0004327940883, +0.0003475134811, -0.0006155382465, -0.0017187936888, -0.0013165568205, -0.0000730976633, +0.0001523866587, -0.0002498502097, +0.0000730976633, +0.0011092470541, +0.0015969642500, +0.0005180746954, -0.0007010185740, -0.0004022368684, -0.0001218294388, -0.0002742160975, +0.0001889354903, +0.0011032554424, +0.0021819452766, +0.0022125024965, +0.0005789894148, -0.0009630517276, -0.0017493509087, -0.0021759536649, -0.0018162572399, -0.0000183742760, +0.0015542240863, +0.0007497503495, -0.0007313760735, -0.0007070101857, +0.0000305572199, +0.0005058917515, +0.0010299580587, +0.0011701617735, +0.0003535050929, -0.0007922907929, -0.0012434591572, -0.0010848811664, -0.0002863990413, +0.0008228480128, +0.0009324945077, -0.0004509686439, -0.0017737167965, -0.0014567605353, -0.0006704613541, -0.0006642700220, -0.0007679249051, -0.0004084282005, +0.0003351308169, +0.0006399041342, -0.0000061913321, -0.0004571599760, -0.0001036548832, +0.0002682244857, +0.0002682244857, +0.0001096464949, +0.0004084282005, +0.0003107649291, -0.0002376672658, -0.0000914719393, +0.0001340123827, -0.0001461953265, -0.0002498502097, -0.0000061913321, +0.0008837627322, +0.0017615338526, +0.0012678250449, +0.0001583782704, -0.0010910724985, -0.0022977831037, -0.0026940283603, -0.0022490513281, -0.0008593968444, +0.0007313760735, +0.0010177751148, +0.0004509686439, +0.0003778709806, +0.0009203115638, +0.0012129019373, +0.0006948272419, +0.0000243658878, -0.0002438585980, +0.0000000000000, +0.0002985819852, -0.0000609147194, -0.0005851807470, -0.0010788895546, -0.0014323946475, -0.0009508687837, +0.0002438585980, +0.0010117835031, +0.0011336129419, +0.0008653884562, +0.0005729978031, +0.0003596964250, -0.0001461953265, -0.0001829438786, +0.0005180746954, +0.0005668064709, -0.0000427401638, -0.0001767525464, -0.0000549231076, -0.0001461953265, -0.0001523866587, -0.0001402037148, +0.0000000000000, +0.0002620331536, +0.0002498502097, +0.0004449770322, +0.0009386858398, +0.0005851807470, -0.0003962452566, -0.0010970641102, -0.0017797084082, -0.0023221489914, -0.0019015378470, -0.0004997004194, +0.0009081286199, +0.0015664070302, +0.0017309766327, +0.0019442780108, +0.0017371679648, +0.0006520870781, -0.0000549231076, +0.0002133013781, +0.0006033553026, +0.0004997004194, +0.0002925903735, +0.0004997004194, +0.0009630517276, +0.0006217295786, -0.0002985819852, -0.0006582784102, -0.0006642700220, -0.0007191931296, -0.0004937088077, -0.0003962452566, -0.0005364489714, -0.0002620331536, +0.0002073097663, +0.0002682244857, +0.0002073097663, +0.0004266027561, +0.0009324945077, +0.0012616337128, +0.0011945276613, +0.0009630517276, +0.0012250848812, +0.0011945276613, +0.0000000000000, -0.0009996005592, -0.0008777711204, -0.0007313760735, -0.0004327940883, +0.0004875174755, +0.0007557419613, +0.0000305572199, -0.0006277211903, -0.0003840623128, +0.0002376672658, +0.0005486319153, +0.0002194927102, +0.0001583782704, +0.0005180746954, +0.0002073097663, -0.0003535050929, -0.0000365488316, +0.0004266027561, +0.0004631515878, +0.0005242660276, +0.0007010185740, +0.0009143199521, +0.0010423407230, +0.0006095466347, -0.0000730976633, -0.0005486319153, -0.0005546235271, -0.0001523866587, +0.0001705612143, +0.0001951268224, +0.0001461953265, +0.0000974635510, +0.0000487317755, +0.0001218294388, +0.0001829438786, +0.0004022368684, +0.0007191931296, +0.0007191931296, +0.0003413221490, +0.0000487317755, +0.0002073097663, +0.0005118833633, +0.0003656880367, -0.0002011184342, -0.0003900539245, +0.0000121829439, +0.0001829438786, -0.0002011184342, -0.0003413221490, +0.0000305572199, +0.0005242660276, +0.0004144198123, -0.0002620331536, -0.0005973636908, -0.0003229478730, +0.0002011184342, +0.0002620331536, +0.0000730976633, +0.0004815258638, +0.0012007189934, +0.0008410225684, -0.0002316756541, -0.0006217295786, +0.0001583782704, +0.0007191931296, +0.0002073097663, -0.0002376672658, -0.0000427401638, +0.0000549231076, +0.0000121829439, -0.0000365488316, +0.0000000000000, -0.0000365488316, -0.0001096464949, +0.0000121829439, -0.0000365488316, -0.0003778709806, -0.0003840623128, -0.0000061913321, +0.0005424405832, +0.0011092470541, +0.0012738166567, +0.0011579788296, +0.0008044737368, -0.0004631515878, -0.0020417415618, -0.0022977831037, -0.0015542240863, -0.0008593968444, +0.0000000000000, +0.0007922907929, +0.0008410225684, +0.0006033553026, +0.0003900539245, +0.0004997004194, +0.0008044737368, +0.0004084282005, -0.0006095466347, -0.0016395046934, -0.0019015378470, -0.0013774715398, -0.0002863990413, +0.0008837627322, +0.0012250848812, +0.0005911723587, -0.0000243658878, -0.0003535050929, -0.0002498502097, +0.0000914719393, +0.0000061913321, -0.0002863990413, -0.0003169562612, -0.0001096464949, +0.0000427401638, -0.0002742160975, -0.0012556421011, -0.0018468144598, -0.0010910724985, +0.0002985819852, +0.0013834631516, +0.0015725983623, +0.0008653884562, +0.0000730976633, -0.0003535050929, -0.0006642700220, -0.0008777711204, -0.0011457958858, -0.0012616337128, -0.0008044737368, -0.0001583782704, +0.0007313760735, +0.0011214299980, +0.0003596964250, -0.0006277211903, -0.0014140203715, -0.0019382863990, -0.0012800079888, +0.0001951268224, +0.0008288396245, +0.0005302576393, +0.0004327940883, +0.0001767525464, -0.0005608148592, -0.0007191931296, -0.0004449770322, -0.0004022368684, -0.0003778709806, -0.0002438585980, -0.0001461953265, -0.0001340123827, -0.0002560415418, -0.0003778709806, -0.0005180746954, -0.0006095466347, -0.0004084282005, -0.0001705612143, -0.0002376672658, -0.0002376672658, -0.0001036548832, -0.0001096464949, +0.0000609147194, +0.0000121829439, -0.0007132015179, -0.0014933093669, -0.0014933093669, -0.0009081286199, -0.0002863990413, +0.0002620331536, +0.0008106650689, +0.0008899540643, +0.0002498502097, -0.0002620331536, -0.0002073097663, +0.0001829438786, +0.0002620331536, -0.0001218294388, -0.0004449770322, -0.0003718793689, -0.0003047733174, -0.0002011184342, +0.0001158378270, +0.0004144198123, +0.0004449770322, +0.0002804074296, -0.0001218294388, -0.0005364489714, -0.0005424405832, -0.0004022368684, -0.0004327940883, -0.0003900539245, -0.0000183742760, +0.0003229478730, +0.0006460954663, +0.0007862991811, +0.0004753345317, +0.0002316756541, +0.0001218294388, -0.0002376672658, -0.0003351308169, -0.0000305572199, +0.0001036548832, -0.0000852806071, -0.0005118833633, -0.0005058917515, -0.0000121829439, +0.0003475134811, +0.0003475134811, +0.0003047733174, +0.0004022368684, +0.0003535050929, -0.0001280207709, -0.0006033553026, -0.0005364489714, -0.0002863990413, -0.0000730976633, +0.0002194927102, +0.0002742160975, +0.0000730976633, +0.0003413221490, +0.0006704613541, +0.0003718793689, -0.0004327940883, -0.0007801078490, -0.0002682244857, +0.0002194927102, +0.0002194927102, +0.0006460954663, +0.0012434591572, +0.0010177751148, +0.0001951268224, -0.0006217295786, -0.0009630517276, -0.0004387857000, +0.0003596964250, +0.0008106650689, +0.0008106650689, +0.0003718793689, -0.0001402037148, -0.0005546235271, -0.0007313760735, -0.0004875174755, -0.0001645696026, +0.0002194927102, +0.0008777711204, +0.0011579788296, +0.0005911723587, -0.0001889354903, -0.0004387857000, -0.0001340123827, +0.0000974635510, +0.0000487317755, +0.0002011184342, +0.0004631515878, +0.0002498502097, -0.0001705612143, -0.0002498502097, +0.0000792889954, +0.0003778709806, +0.0002073097663, -0.0000305572199, -0.0001280207709, -0.0003656880367, -0.0003656880367, +0.0000183742760, +0.0003656880367, +0.0002438585980, -0.0001096464949, -0.0002742160975, -0.0000792889954, +0.0001096464949, +0.0001402037148, +0.0001583782704, +0.0002925903735, +0.0005242660276, +0.0005486319153, +0.0000730976633, -0.0003778709806, -0.0001402037148, +0.0002376672658, +0.0001583782704, -0.0001889354903, -0.0002438585980, -0.0000914719393, -0.0002498502097, -0.0003778709806, -0.0001829438786, +0.0001218294388, +0.0002133013781, +0.0000730976633, +0.0000792889954, -0.0000183742760, -0.0004266027561, -0.0002682244857, +0.0002863990413, +0.0004875174755, +0.0004693429199, +0.0002254843219, -0.0000792889954, -0.0000121829439, +0.0000183742760, -0.0003169562612, -0.0007375674056, -0.0008350309567, -0.0004206111444, +0.0002438585980, +0.0007313760735, +0.0008106650689, +0.0006095466347, +0.0002925903735, -0.0003351308169, -0.0008593968444, -0.0007375674056, -0.0000852806071, +0.0006886359097, +0.0009690433393, +0.0005851807470, +0.0001829438786, -0.0001280207709, -0.0004206111444, -0.0004084282005, -0.0001096464949, +0.0001951268224, +0.0002194927102, +0.0000792889954, -0.0000792889954, -0.0002560415418, -0.0003229478730, -0.0001523866587, +0.0001096464949, +0.0003778709806, +0.0003778709806, -0.0002254843219, -0.0008593968444, -0.0008044737368, -0.0003107649291, +0.0000792889954, +0.0003291392051, +0.0003656880367, +0.0001583782704, -0.0000792889954, -0.0002254843219, -0.0001889354903, +0.0000671060515, +0.0002376672658, +0.0001158378270, +0.0000061913321, -0.0000365488316, -0.0000730976633, -0.0002011184342, -0.0006095466347, -0.0008899540643, -0.0007619332934, -0.0004327940883, +0.0000183742760, +0.0004509686439, +0.0004571599760, +0.0002925903735, +0.0002804074296, +0.0003047733174, +0.0001036548832, -0.0000427401638, -0.0000487317755, +0.0000061913321, +0.0000549231076, -0.0001583782704, -0.0002682244857, +0.0000792889954, +0.0002438585980, -0.0000305572199, -0.0003047733174, -0.0002133013781, -0.0000183742760, -0.0000487317755, -0.0002254843219, -0.0001280207709, +0.0000792889954, +0.0000000000000, -0.0001218294388, +0.0000549231076, +0.0001829438786, +0.0000549231076, -0.0000730976633, -0.0001829438786, -0.0002742160975, -0.0002804074296, -0.0000609147194, +0.0002133013781, +0.0002438585980, +0.0001829438786, +0.0001889354903, +0.0003778709806, +0.0004327940883, +0.0001829438786, +0.0000243658878, -0.0000549231076, -0.0002985819852, -0.0006217295786, -0.0007984821250, -0.0005118833633, +0.0000609147194, +0.0004631515878, +0.0005729978031, +0.0004387857000, +0.0003107649291, +0.0002376672658, +0.0001461953265, +0.0001218294388, +0.0002498502097, +0.0003596964250, +0.0004266027561, +0.0004387857000, +0.0002316756541, -0.0003475134811, -0.0009934092271, -0.0010483323347, -0.0002863990413, +0.0006095466347, +0.0009324945077, +0.0006217295786, +0.0001218294388, -0.0002376672658, -0.0002316756541, -0.0001218294388, -0.0001096464949, -0.0001829438786, -0.0001523866587, +0.0000427401638, +0.0002804074296, +0.0003778709806, +0.0002804074296, +0.0001767525464, +0.0001096464949, -0.0001583782704, -0.0003718793689, -0.0001158378270, +0.0001705612143, +0.0001889354903, +0.0000427401638, -0.0000914719393, -0.0001767525464, -0.0002254843219, -0.0000852806071, -0.0000730976633, -0.0002194927102, -0.0001402037148, +0.0000730976633, +0.0000852806071, -0.0000305572199, -0.0001705612143, -0.0000852806071, +0.0003107649291, +0.0008044737368, +0.0009690433393, +0.0007557419613, +0.0003535050929, -0.0000427401638, -0.0002316756541, -0.0003229478730, -0.0004449770322, -0.0002925903735, +0.0001583782704, +0.0003778709806, +0.0000671060515, -0.0002620331536, -0.0003107649291, -0.0002438585980, -0.0000974635510, +0.0002498502097, +0.0005364489714, +0.0004449770322, +0.0002376672658, +0.0002316756541, +0.0002133013781, -0.0000730976633, -0.0003351308169, -0.0001523866587, +0.0003596964250, +0.0005302576393, +0.0000549231076, -0.0002254843219, +0.0000305572199, +0.0000609147194, -0.0003718793689, -0.0005789894148, -0.0002742160975, +0.0001461953265, +0.0003169562612, +0.0002316756541, -0.0000792889954, -0.0003962452566, -0.0004022368684, +0.0000000000000, +0.0005058917515, +0.0006582784102, +0.0003047733174, -0.0004449770322, -0.0011457958858, -0.0008532055123, +0.0002804074296, +0.0010667066107, +0.0010239664470, +0.0006399041342, +0.0002742160975, -0.0002438585980, -0.0008593968444, -0.0011092470541, -0.0007375674056, -0.0001705612143, +0.0001523866587, +0.0003107649291, +0.0006095466347, +0.0008472139005, +0.0005911723587, -0.0001402037148, -0.0005302576393, -0.0001402037148, +0.0002682244857, +0.0000914719393, -0.0000792889954, +0.0001036548832, +0.0000974635510, +0.0000121829439, +0.0002863990413, +0.0006033553026, +0.0004693429199, +0.0000609147194, -0.0002742160975, -0.0003778709806, -0.0003351308169, -0.0001705612143, +0.0000487317755, +0.0002560415418, +0.0000914719393, -0.0005180746954, -0.0007435590174, -0.0003351308169, +0.0002194927102, +0.0006033553026, +0.0004937088077, +0.0000974635510, -0.0002254843219, -0.0004509686439, -0.0004571599760, -0.0001951268224, +0.0002560415418, +0.0005973636908, +0.0002985819852, -0.0002073097663, -0.0001158378270, +0.0002254843219, +0.0000792889954, -0.0005424405832, -0.0008288396245, -0.0004997004194, -0.0000852806071, +0.0003351308169, +0.0008166566806, +0.0010055921710, +0.0007010185740, +0.0001951268224, -0.0000305572199, -0.0002620331536, -0.0008593968444, -0.0010483323347, -0.0001705612143, +0.0009690433393, +0.0012616337128, +0.0005608148592, -0.0004144198123, -0.0009446774516, -0.0008044737368, -0.0005242660276, -0.0001036548832, +0.0004753345317, +0.0007191931296, +0.0006217295786, +0.0003475134811, -0.0004387857000, -0.0009996005592, -0.0007619332934, -0.0001889354903, +0.0003107649291, +0.0005546235271, +0.0005851807470, +0.0005668064709, +0.0003900539245, -0.0000427401638, -0.0005424405832, -0.0005973636908, -0.0001036548832, +0.0002073097663, +0.0000852806071, -0.0000792889954, -0.0002011184342, -0.0001889354903, +0.0001158378270, +0.0007801078490, +0.0011092470541, +0.0002438585980, -0.0012494507689, -0.0017187936888, -0.0007070101857, +0.0005302576393, +0.0009265028959, +0.0005608148592, +0.0001645696026, -0.0000974635510, -0.0001705612143, +0.0001461953265, +0.0006460954663, +0.0006704613541, -0.0000549231076, -0.0010299580587, -0.0016091471939, -0.0013896544837, -0.0005302576393, +0.0004753345317, +0.0009874176153, +0.0010726982225, +0.0009996005592, +0.0007497503495, +0.0001158378270, -0.0005486319153, -0.0009203115638, -0.0010055921710, -0.0006826442980, -0.0002316756541, +0.0000365488316, +0.0001767525464, +0.0001218294388, -0.0001829438786, -0.0003840623128, +0.0000183742760, +0.0007741162373, +0.0008532055123, +0.0001523866587, -0.0002985819852, -0.0002925903735, -0.0002376672658, -0.0001218294388, -0.0000671060515, -0.0003840623128, -0.0009446774516, -0.0011945276613, -0.0007801078490, +0.0001402037148, +0.0009690433393, +0.0011336129419, +0.0004693429199, -0.0003900539245, -0.0006642700220, -0.0005486319153, -0.0003900539245, +0.0000000000000, +0.0004144198123, +0.0005608148592, +0.0003169562612, -0.0002620331536, -0.0005364489714, -0.0001218294388, +0.0002925903735, +0.0005058917515, +0.0007070101857, +0.0007862991811, +0.0005789894148, +0.0000730976633, -0.0006460954663, -0.0009934092271, -0.0006886359097, -0.0003047733174, -0.0002742160975, -0.0003962452566, -0.0001705612143, +0.0003778709806, +0.0006582784102, +0.0006399041342, +0.0005789894148, +0.0002804074296, -0.0002498502097, -0.0007557419613, -0.0008350309567, -0.0002254843219, +0.0006704613541, +0.0011579788296, +0.0007862991811, -0.0001340123827, -0.0006277211903, -0.0004084282005, -0.0002133013781, -0.0003413221490, -0.0002985819852, +0.0001218294388, +0.0004206111444, +0.0004571599760, +0.0003413221490, -0.0000121829439, -0.0003718793689, -0.0004509686439, -0.0003962452566, -0.0002376672658, +0.0000000000000, +0.0002925903735, +0.0006582784102, +0.0008532055123, +0.0008593968444, +0.0007497503495, +0.0003413221490, -0.0005911723587, -0.0014811264230, -0.0011641701618, +0.0002925903735, +0.0014871180348, +0.0014080287597, +0.0003900539245, -0.0004327940883, -0.0006764529658, -0.0008837627322, -0.0009690433393, -0.0004875174755, +0.0003351308169, +0.0006217295786, +0.0002316756541, +0.0001645696026, +0.0008959456761, +0.0014749350909, +0.0010299580587, -0.0000487317755, -0.0008288396245, -0.0011885360495, -0.0012921909327, -0.0009934092271, -0.0002316756541, +0.0004875174755, +0.0006948272419, +0.0004144198123, +0.0000609147194, -0.0000427401638, -0.0000549231076, -0.0004815258638, -0.0011579788296, -0.0010055921710, -0.0000243658878, +0.0006277211903, +0.0004144198123, +0.0000609147194, +0.0000974635510, +0.0003475134811, +0.0004084282005, +0.0002011184342, +0.0000243658878, -0.0001705612143, -0.0003413221490, +0.0000671060515, +0.0004997004194, +0.0004631515878, +0.0002804074296, -0.0004022368684, -0.0015176752546, -0.0018955462353, -0.0012921909327, -0.0004144198123, +0.0004693429199, +0.0012129019373, +0.0015664070302, +0.0015969642500, +0.0012738166567, +0.0004571599760, -0.0002376672658, -0.0005668064709, -0.0009874176153, -0.0012556421011, -0.0008106650689, +0.0001218294388, +0.0006460954663, +0.0007497503495, +0.0009446774516, +0.0010970641102, +0.0005424405832, -0.0002804074296, -0.0010726982225, -0.0017797084082, -0.0017004194128, -0.0005608148592, +0.0008410225684, +0.0017493509087, +0.0017737167965, +0.0008350309567, -0.0002620331536, -0.0007679249051, -0.0005789894148, -0.0001645696026, -0.0001036548832, -0.0002863990413, +0.0000121829439, +0.0006155382465, +0.0009812262832, +0.0010299580587, +0.0006582784102, +0.0001829438786, -0.0000549231076, -0.0004815258638, -0.0009874176153, -0.0009021370082, -0.0005364489714, -0.0006095466347, -0.0007497503495, -0.0002133013781, +0.0004815258638, +0.0005789894148, +0.0007191931296, +0.0012800079888, +0.0015480327541, +0.0011823447174, +0.0003351308169, -0.0005180746954, -0.0010483323347, -0.0011214299980, -0.0006886359097, -0.0000549231076, +0.0003962452566, +0.0008410225684, +0.0010055921710, +0.0006399041342, +0.0000852806071, -0.0002376672658, -0.0007191931296, -0.0011519872179, -0.0007191931296, +0.0002498502097, +0.0008106650689, +0.0007375674056, +0.0002011184342, -0.0002742160975, -0.0002925903735, -0.0003107649291, -0.0004693429199, -0.0005302576393, -0.0002376672658, +0.0003413221490, +0.0007132015179, +0.0007132015179, +0.0004387857000, -0.0002620331536, -0.0009324945077, -0.0008593968444, -0.0004509686439, -0.0000549231076, +0.0006399041342, +0.0012067106052, +0.0008288396245, -0.0000730976633, -0.0007070101857, -0.0010117835031, -0.0009446774516, -0.0002925903735, +0.0005058917515, +0.0009265028959, +0.0008959456761, +0.0004693429199, +0.0000183742760, -0.0000792889954, +0.0000852806071, +0.0001951268224, +0.0000852806071, +0.0000061913321, +0.0002742160975, +0.0004084282005, +0.0000671060515, -0.0003413221490, -0.0006399041342, -0.0007557419613, -0.0004815258638, -0.0002863990413, -0.0004266027561, -0.0002011184342, +0.0005546235271, +0.0010970641102, +0.0010788895546, +0.0006704613541, +0.0001036548832, -0.0003351308169, -0.0005424405832, -0.0005180746954, -0.0002254843219, -0.0001036548832, -0.0003047733174, -0.0002742160975, +0.0000000000000, +0.0002985819852, +0.0004571599760, +0.0000609147194, -0.0004631515878, -0.0004631515878, -0.0003475134811, -0.0003778709806, -0.0003351308169, -0.0004084282005, -0.0006399041342, -0.0006642700220, -0.0002194927102, +0.0004815258638, +0.0008350309567, +0.0004937088077, -0.0001645696026, -0.0005729978031, -0.0006826442980, -0.0006339125225, -0.0002742160975, +0.0003596964250, +0.0006948272419, +0.0004084282005, +0.0000974635510, -0.0000183742760, -0.0003351308169, -0.0006277211903, -0.0005729978031, -0.0003291392051, -0.0001461953265, -0.0004266027561, -0.0007375674056, -0.0004266027561, -0.0000730976633, +0.0000000000000, +0.0002620331536, +0.0005851807470, +0.0004022368684, -0.0000121829439, -0.0002498502097, -0.0001280207709, +0.0001218294388, +0.0002682244857, +0.0004206111444, +0.0006095466347, +0.0002985819852, -0.0002560415418, -0.0003900539245, -0.0001705612143, +0.0001461953265, +0.0002073097663, -0.0000914719393, -0.0000792889954, +0.0003107649291, +0.0003291392051, +0.0000487317755, -0.0001340123827, -0.0001523866587, -0.0001829438786, -0.0002316756541, -0.0000730976633, +0.0001096464949, +0.0002682244857, +0.0004815258638, +0.0004327940883, -0.0000427401638, -0.0003413221490, -0.0000427401638, +0.0003596964250, +0.0002742160975, -0.0000365488316, +0.0000000000000, +0.0002254843219, +0.0000427401638, -0.0004875174755, -0.0006033553026, -0.0002560415418, +0.0000914719393, +0.0004144198123, +0.0005789894148, +0.0004875174755, +0.0003169562612, +0.0001951268224, +0.0000121829439, -0.0002011184342, -0.0001461953265, -0.0000183742760, -0.0001218294388, -0.0000609147194, +0.0004266027561, +0.0009386858398, +0.0011092470541, +0.0008288396245, +0.0001280207709, -0.0006642700220, -0.0010910724985, -0.0010605152786, -0.0008593968444, -0.0003718793689, +0.0005118833633, +0.0010726982225, +0.0007922907929, +0.0002804074296, +0.0000427401638, +0.0000121829439, -0.0000852806071, -0.0001829438786, +0.0000671060515, +0.0005364489714, +0.0008837627322, +0.0007801078490, +0.0002438585980, -0.0000792889954, -0.0000243658878, -0.0000974635510, -0.0003718793689, -0.0003778709806, -0.0001705612143, -0.0002133013781, -0.0002985819852, -0.0001767525464, -0.0000121829439, +0.0000549231076, +0.0000000000000, -0.0001218294388, -0.0000671060515, +0.0002316756541, +0.0006155382465, +0.0006642700220, +0.0001158378270, -0.0004206111444, -0.0004206111444, -0.0001889354903, -0.0001889354903, -0.0002804074296, -0.0001280207709, +0.0000852806071, +0.0000427401638, -0.0000305572199, +0.0001340123827, +0.0002011184342, -0.0000914719393, -0.0004266027561, -0.0004509686439, -0.0001340123827, +0.0003351308169, +0.0004206111444, -0.0000852806071, -0.0005486319153, -0.0006642700220, -0.0006704613541, -0.0003169562612, +0.0002804074296, +0.0004509686439, +0.0003229478730, +0.0002560415418, +0.0000792889954, -0.0001340123827, -0.0000914719393, +0.0001158378270, +0.0000974635510, +0.0000243658878, +0.0001645696026, +0.0001645696026, -0.0000549231076, -0.0001096464949, -0.0000487317755, -0.0002620331536, -0.0006764529658, -0.0007557419613, -0.0003413221490, +0.0000305572199, +0.0001705612143, +0.0004387857000, +0.0006764529658, +0.0006826442980, +0.0005424405832, +0.0003413221490, +0.0000487317755, -0.0003291392051, -0.0005973636908, -0.0004387857000, -0.0000914719393, -0.0000974635510, -0.0004144198123, -0.0003962452566, +0.0000000000000, +0.0002804074296, +0.0003229478730, +0.0003840623128, +0.0004693429199, +0.0002316756541, -0.0002804074296, -0.0005789894148, -0.0005118833633, -0.0001645696026, +0.0001767525464, +0.0001767525464, -0.0000121829439, +0.0000914719393, +0.0003107649291, +0.0001583782704, -0.0000305572199, -0.0000305572199, -0.0002133013781, -0.0003962452566, -0.0001583782704, +0.0002863990413, +0.0006095466347, +0.0006095466347, +0.0002863990413, -0.0002376672658, -0.0007010185740, -0.0007132015179, -0.0003475134811, -0.0001461953265, -0.0000792889954, +0.0002011184342, +0.0005851807470, +0.0005364489714, +0.0001705612143, +0.0000914719393, +0.0000974635510, -0.0001705612143, -0.0003840623128, -0.0002498502097, +0.0000671060515, +0.0002804074296, +0.0002073097663, -0.0000121829439, -0.0001767525464, -0.0002560415418, -0.0001889354903, +0.0000852806071, +0.0002498502097, +0.0002376672658, +0.0002498502097, +0.0000974635510, -0.0002438585980, -0.0004631515878, -0.0003475134811, -0.0000549231076, +0.0000427401638, -0.0000305572199, +0.0000974635510, +0.0003229478730, +0.0001645696026, -0.0003413221490, -0.0005118833633, -0.0002985819852, -0.0002985819852, -0.0002985819852, +0.0001889354903, +0.0006704613541, +0.0005364489714, -0.0000487317755, -0.0005118833633, -0.0005302576393, -0.0004144198123, -0.0005180746954, -0.0004327940883, +0.0000974635510, +0.0005242660276, +0.0004631515878, +0.0001340123827, -0.0000974635510, -0.0001340123827, -0.0000852806071, -0.0001523866587, -0.0001705612143, +0.0000852806071, +0.0004631515878, +0.0004144198123, +0.0000243658878, -0.0001829438786, -0.0000730976633, +0.0000609147194, -0.0000671060515, -0.0003047733174, -0.0001523866587, +0.0001889354903, +0.0001523866587, -0.0001218294388, -0.0002073097663, +0.0000121829439, +0.0002133013781, +0.0002316756541, +0.0002620331536, +0.0003475134811, +0.0003351308169, +0.0000427401638, -0.0003291392051, -0.0003656880367, -0.0001402037148, -0.0000305572199, +0.0000549231076, +0.0001705612143, +0.0001340123827, +0.0001036548832, +0.0000000000000, -0.0002316756541, -0.0002863990413, -0.0002316756541, -0.0003656880367, -0.0004327940883, +0.0000061913321, +0.0007253844618, +0.0010483323347, +0.0006704613541, +0.0000792889954, -0.0002133013781, -0.0002498502097, -0.0003107649291, -0.0002682244857, -0.0000914719393, -0.0001280207709, -0.0001767525464, +0.0000183742760, +0.0000852806071, +0.0000852806071, +0.0003107649291, +0.0004327940883, +0.0004266027561, +0.0003107649291, -0.0000974635510, -0.0004937088077, -0.0005424405832, -0.0003962452566, -0.0002498502097, +0.0001705612143, +0.0006704613541, +0.0005118833633, -0.0000183742760, -0.0002133013781, -0.0002742160975, -0.0003169562612, -0.0000549231076, +0.0003900539245, +0.0007070101857, +0.0006033553026, +0.0002073097663, -0.0000121829439, -0.0000914719393, -0.0002925903735, -0.0005058917515, -0.0003840623128, +0.0001583782704, +0.0006826442980, +0.0007862991811, +0.0005608148592, +0.0001705612143, -0.0002438585980, -0.0003962452566, -0.0002376672658, -0.0000487317755, +0.0000243658878, +0.0000365488316, -0.0000671060515, -0.0001280207709, +0.0000427401638, +0.0002925903735, +0.0004144198123, +0.0004084282005, +0.0000974635510, -0.0003413221490, -0.0003962452566, -0.0001036548832, +0.0000852806071, +0.0000852806071, +0.0001280207709, +0.0003656880367, +0.0005118833633, +0.0002742160975, -0.0000549231076, -0.0000914719393, -0.0000792889954, -0.0002560415418, -0.0002254843219, +0.0000914719393, +0.0001829438786, +0.0000061913321, -0.0000305572199, +0.0000487317755, +0.0000427401638, -0.0000549231076, -0.0000487317755, +0.0001461953265, +0.0001829438786, -0.0000243658878, -0.0000549231076, +0.0000305572199, -0.0001705612143, -0.0004144198123, -0.0003413221490, -0.0001889354903, -0.0001583782704, -0.0000243658878, +0.0002133013781, +0.0002742160975, +0.0002011184342, +0.0003047733174, +0.0003596964250, +0.0001645696026, -0.0000914719393, -0.0002620331536, -0.0003169562612, -0.0003229478730, -0.0002925903735, -0.0002316756541, -0.0001461953265, +0.0000549231076, +0.0003840623128, +0.0005424405832, +0.0004631515878, +0.0002376672658, -0.0000609147194, -0.0002560415418, -0.0002498502097, -0.0002985819852, -0.0003840623128, -0.0002133013781, +0.0000427401638, +0.0000549231076, -0.0000852806071, -0.0000671060515, +0.0002804074296, +0.0004997004194, +0.0001461953265, -0.0002073097663, -0.0000183742760, +0.0001889354903, -0.0001645696026, -0.0006826442980, -0.0007313760735, -0.0004509686439, -0.0002011184342, +0.0000183742760, +0.0002682244857, +0.0003169562612, +0.0001461953265, +0.0001523866587, +0.0003656880367, +0.0003962452566, +0.0002560415418, +0.0000671060515, -0.0001829438786, -0.0003413221490, -0.0003596964250, -0.0002925903735, -0.0002011184342, -0.0001158378270, -0.0000730976633, -0.0000549231076, -0.0000061913321, -0.0000121829439, -0.0001340123827, -0.0002073097663, -0.0000914719393, +0.0001951268224, +0.0003169562612, +0.0000549231076, -0.0001280207709, -0.0000671060515, -0.0000487317755, -0.0000730976633, -0.0000487317755, -0.0000792889954, -0.0001523866587, -0.0002073097663, -0.0002620331536, -0.0001096464949, +0.0002620331536, +0.0003962452566, +0.0001705612143, -0.0000549231076, -0.0002620331536, -0.0003840623128, -0.0003107649291, -0.0002133013781, -0.0002376672658, -0.0001158378270, +0.0002073097663, +0.0003229478730, +0.0000852806071, -0.0001523866587, -0.0002316756541, -0.0001889354903, -0.0000183742760, +0.0001767525464, +0.0002863990413, +0.0002254843219, +0.0000609147194, -0.0000243658878, +0.0000000000000, +0.0000305572199, +0.0000121829439, +0.0000000000000, -0.0000243658878, +0.0000305572199, +0.0002376672658, +0.0003718793689, +0.0001645696026, -0.0002498502097, -0.0005364489714, -0.0004937088077, -0.0002498502097, +0.0000549231076, +0.0003107649291, +0.0003718793689, +0.0003107649291, +0.0001951268224, +0.0001340123827, +0.0002133013781, +0.0002620331536, +0.0001705612143, +0.0000183742760, -0.0002254843219, -0.0004144198123, -0.0003656880367, -0.0001951268224, -0.0000365488316, +0.0000852806071, +0.0002804074296, +0.0004875174755, +0.0004753345317, +0.0002804074296, +0.0000609147194, -0.0001767525464, -0.0003169562612, -0.0002863990413, -0.0002194927102, -0.0001461953265, +0.0000000000000, +0.0001829438786, +0.0002804074296, +0.0002560415418, +0.0003047733174, +0.0004206111444, +0.0003047733174, +0.0000000000000, -0.0001461953265, -0.0000609147194, +0.0000730976633, +0.0002254843219, +0.0002742160975, +0.0000609147194, -0.0003351308169, -0.0006033553026, -0.0005424405832, -0.0002194927102, +0.0001583782704, +0.0004753345317, +0.0006582784102, +0.0006460954663, +0.0005118833633, +0.0002560415418, -0.0001645696026, -0.0005973636908, -0.0006582784102, -0.0003047733174, +0.0000671060515, +0.0002804074296, +0.0003718793689, +0.0004266027561, +0.0004631515878, +0.0003718793689, +0.0001218294388, -0.0001402037148, -0.0003107649291, -0.0004084282005, -0.0003962452566, -0.0002376672658, -0.0000974635510, -0.0000730976633, -0.0000061913321, +0.0001583782704, +0.0002376672658, +0.0002133013781, +0.0002254843219, +0.0002438585980, +0.0001158378270, -0.0002073097663, -0.0004266027561, -0.0002073097663, +0.0001645696026, +0.0002985819852, +0.0001951268224, -0.0000121829439, -0.0001402037148, -0.0001583782704, -0.0001218294388, +0.0000183742760, +0.0001583782704, +0.0000914719393, -0.0001158378270, -0.0002804074296, -0.0002620331536, -0.0000792889954, +0.0002316756541, +0.0004753345317, +0.0003351308169, -0.0000671060515, -0.0003718793689, -0.0004327940883, -0.0002376672658, +0.0000671060515, +0.0002742160975, +0.0002804074296, +0.0001645696026, +0.0000365488316, -0.0001036548832, -0.0003475134811, -0.0003900539245, -0.0000243658878, +0.0003229478730, +0.0002133013781, -0.0000792889954, -0.0001280207709, +0.0000061913321, +0.0000487317755, -0.0001218294388, -0.0003107649291, -0.0002254843219, -0.0000061913321, +0.0001340123827, +0.0002254843219, +0.0002438585980, +0.0001583782704, +0.0000121829439, -0.0000730976633, -0.0000305572199, -0.0000183742760, -0.0001705612143, -0.0003169562612, -0.0003229478730, -0.0001829438786, +0.0000000000000, +0.0000974635510, +0.0001158378270, +0.0000974635510, -0.0000243658878, -0.0000549231076, +0.0000487317755, +0.0000121829439, -0.0001280207709, -0.0001705612143, -0.0001096464949, +0.0000487317755, +0.0002438585980, +0.0002620331536, +0.0001096464949, -0.0000061913321, -0.0000609147194, -0.0000671060515, -0.0001340123827, -0.0003962452566, -0.0006642700220, -0.0005851807470, -0.0002682244857, +0.0000671060515, +0.0004022368684, +0.0005973636908, +0.0005424405832, +0.0004753345317, +0.0004144198123, +0.0001340123827, -0.0002254843219, -0.0003656880367, -0.0002863990413, -0.0000792889954, +0.0000609147194, -0.0000121829439, -0.0000914719393, -0.0000914719393, -0.0002498502097, -0.0003047733174, -0.0000792889954, +0.0001645696026, +0.0004084282005, +0.0005546235271, +0.0003656880367, +0.0000061913321, -0.0002804074296, -0.0004266027561, -0.0004449770322, -0.0004693429199, -0.0004206111444, -0.0000730976633, +0.0004327940883, +0.0005911723587, +0.0002863990413, -0.0000427401638, -0.0001951268224, -0.0002682244857, -0.0002438585980, -0.0000974635510, +0.0000427401638, +0.0000609147194, -0.0000183742760, -0.0000427401638, +0.0000183742760, -0.0000549231076, -0.0003351308169, -0.0004266027561, -0.0000549231076, +0.0003351308169, +0.0003718793689, +0.0002194927102, +0.0000609147194, -0.0000487317755, -0.0001036548832, -0.0001583782704, -0.0001583782704, -0.0000121829439, +0.0001829438786, +0.0001402037148, -0.0002133013781, -0.0005180746954, -0.0004937088077, -0.0001951268224, +0.0002560415418, +0.0004997004194, +0.0003291392051, +0.0000305572199, -0.0001402037148, -0.0001889354903, -0.0001218294388, -0.0000121829439, +0.0001340123827, +0.0003656880367, +0.0004327940883, +0.0002073097663, -0.0000183742760, -0.0001523866587, -0.0002925903735, -0.0003840623128, -0.0002863990413, -0.0000243658878, +0.0001829438786, +0.0001461953265, -0.0000609147194, -0.0001705612143, +0.0000487317755, +0.0002804074296, +0.0001461953265, -0.0000852806071, -0.0001645696026, -0.0001645696026, +0.0000183742760, +0.0003107649291, +0.0003107649291, -0.0000549231076, -0.0004815258638, -0.0005973636908, -0.0004327940883, -0.0002254843219, +0.0000549231076, +0.0004266027561, +0.0004266027561, -0.0000121829439, -0.0002925903735, -0.0001280207709, +0.0000671060515, +0.0000792889954, +0.0000549231076, +0.0002194927102, +0.0004387857000, +0.0002620331536, -0.0003169562612, -0.0005058917515, +0.0000671060515, +0.0006399041342, +0.0006217295786, +0.0003962452566, +0.0002863990413, +0.0001523866587, -0.0000974635510, -0.0002682244857, -0.0001583782704, -0.0000549231076, -0.0002620331536, -0.0005242660276, -0.0003718793689, +0.0002498502097, +0.0007984821250, +0.0007741162373, +0.0004753345317, +0.0003778709806, +0.0003291392051, -0.0000549231076, -0.0004937088077, -0.0004937088077, -0.0002254843219, -0.0000121829439, +0.0002254843219, +0.0004815258638, +0.0006399041342, +0.0006277211903, +0.0002985819852, -0.0001583782704, -0.0003291392051, -0.0004266027561, -0.0007010185740, -0.0008106650689, -0.0005302576393, -0.0001096464949, +0.0002073097663, +0.0004997004194, +0.0008044737368, +0.0007557419613, +0.0002438585980, -0.0001829438786, -0.0001829438786, -0.0000671060515, -0.0002194927102, -0.0004509686439, -0.0001705612143, +0.0004753345317, +0.0007435590174, +0.0003962452566, -0.0000121829439, -0.0001218294388, -0.0001158378270, -0.0001340123827, -0.0000487317755, -0.0000427401638, -0.0002560415418, -0.0004144198123, -0.0003229478730, -0.0000183742760, +0.0003475134811, +0.0004753345317, +0.0002560415418, -0.0000792889954, -0.0004084282005, -0.0005486319153, -0.0001402037148, +0.0006095466347, +0.0008350309567, +0.0003229478730, -0.0001951268224, -0.0003107649291, -0.0004022368684, -0.0005789894148, -0.0003656880367, +0.0004084282005, +0.0010423407230, +0.0008837627322, +0.0002682244857, -0.0001036548832, -0.0002925903735, -0.0005058917515, -0.0004937088077, +0.0000061913321, +0.0006033553026, +0.0007679249051, +0.0004022368684, -0.0001158378270, -0.0003900539245, -0.0002498502097, +0.0000243658878, +0.0001461953265, +0.0001645696026, +0.0002133013781, +0.0000974635510, -0.0002804074296, -0.0004571599760, -0.0001036548832, +0.0001705612143, -0.0000671060515, -0.0003291392051, -0.0001829438786, +0.0000671060515, +0.0000305572199, -0.0002925903735, -0.0004022368684, -0.0000792889954, +0.0001889354903, +0.0001461953265, -0.0000365488316, -0.0001523866587, -0.0000914719393, -0.0000121829439, -0.0001461953265, -0.0004084282005, -0.0004631515878, -0.0001767525464, +0.0000852806071, +0.0001583782704, +0.0000974635510, -0.0000061913321, -0.0002254843219, -0.0004815258638, -0.0002985819852, +0.0002316756541, +0.0005364489714, +0.0005118833633, +0.0002682244857, -0.0000792889954, -0.0003778709806, -0.0005118833633, -0.0002254843219, +0.0004266027561, +0.0007497503495, +0.0003900539245, -0.0002985819852, -0.0009021370082, -0.0012067106052, -0.0009568603954, -0.0002194927102, +0.0004753345317, +0.0007741162373, +0.0006704613541, +0.0002804074296, -0.0002438585980, -0.0008593968444, -0.0012067106052, -0.0008044737368, +0.0001523866587, +0.0010848811664, +0.0016638705812, +0.0017371679648, +0.0012067106052, +0.0001645696026, -0.0009386858398, -0.0015602156980, -0.0014933093669, -0.0008959456761, -0.0002011184342, +0.0003596964250, +0.0007435590174, +0.0008106650689, +0.0005302576393, +0.0001402037148, -0.0003351308169, -0.0009021370082, -0.0011154383863, -0.0005242660276, +0.0004084282005, +0.0008350309567, +0.0005911723587, +0.0001340123827, -0.0002742160975, -0.0003900539245, +0.0000121829439, +0.0005424405832, +0.0005546235271, +0.0001461953265, -0.0002073097663, -0.0002438585980, -0.0000914719393, +0.0000000000000, +0.0000427401638, +0.0000730976633, +0.0000121829439, -0.0000792889954, -0.0002073097663, -0.0003962452566, -0.0005729978031, -0.0005180746954, -0.0001523866587, +0.0003718793689, +0.0006642700220, +0.0005424405832, +0.0003047733174, +0.0001461953265, +0.0000121829439, -0.0000183742760, -0.0000243658878, -0.0000121829439, +0.0001158378270, +0.0001218294388, -0.0002376672658, -0.0006339125225, -0.0006339125225, -0.0002133013781, +0.0002742160975, +0.0005118833633, +0.0004693429199, +0.0001829438786, -0.0000549231076, +0.0000671060515, +0.0002863990413, +0.0002985819852, +0.0002316756541, +0.0003107649291, +0.0004693429199, +0.0001829438786, -0.0005546235271, -0.0009446774516, -0.0005973636908, +0.0000000000000, +0.0004144198123, +0.0006095466347, +0.0006886359097, +0.0005851807470, +0.0002376672658, -0.0001767525464, -0.0003229478730, -0.0001340123827, +0.0000061913321, -0.0001402037148, -0.0003169562612, -0.0002804074296, -0.0000183742760, +0.0002560415418, +0.0004022368684, +0.0003778709806, +0.0003169562612, +0.0002194927102, +0.0001218294388, +0.0001829438786, +0.0002560415418, +0.0000305572199, -0.0002804074296, -0.0003107649291, -0.0001340123827, +0.0000183742760, +0.0000914719393, +0.0000671060515, -0.0000243658878, -0.0000549231076, +0.0001402037148, +0.0003107649291, +0.0001829438786, -0.0000365488316, -0.0001523866587, -0.0002316756541, -0.0002682244857, -0.0002498502097, -0.0001889354903, -0.0000243658878, +0.0001705612143, +0.0003535050929, +0.0005242660276, +0.0006339125225, +0.0004206111444, -0.0000549231076, -0.0004266027561, -0.0004266027561, -0.0001523866587, +0.0001096464949, +0.0001583782704, +0.0001280207709, +0.0001767525464, +0.0002316756541, +0.0001705612143, +0.0001523866587, +0.0000852806071, -0.0001036548832, -0.0002133013781, -0.0001036548832, +0.0000427401638, +0.0001096464949, +0.0000243658878, -0.0002194927102, -0.0004266027561, -0.0004144198123, -0.0003291392051, -0.0001951268224, +0.0001096464949, +0.0004327940883, +0.0004937088077, +0.0002133013781, -0.0001767525464, -0.0004144198123, -0.0004144198123, -0.0002560415418, -0.0000243658878, +0.0001280207709, +0.0000974635510, -0.0000609147194, -0.0001705612143, -0.0001461953265, -0.0000914719393, +0.0000549231076, +0.0003778709806, +0.0005668064709, +0.0002254843219, -0.0004693429199, -0.0007375674056, -0.0003047733174, +0.0002438585980, +0.0004571599760, +0.0004206111444, +0.0002316756541, +0.0000000000000, -0.0002254843219, -0.0003351308169, -0.0002682244857, -0.0001402037148, -0.0000914719393, -0.0000609147194, -0.0000427401638, -0.0000305572199, -0.0000365488316, -0.0000852806071, -0.0001340123827, -0.0000609147194, +0.0000549231076, +0.0001889354903, +0.0002804074296, +0.0001645696026, -0.0000549231076, -0.0002011184342, -0.0003413221490, -0.0004449770322, -0.0002925903735, +0.0000305572199, +0.0003047733174, +0.0004022368684, +0.0003291392051, +0.0000974635510, -0.0002742160975, -0.0006217295786, -0.0006642700220, -0.0003778709806, -0.0000427401638, +0.0001402037148, +0.0002985819852, +0.0004022368684, +0.0002804074296, -0.0000852806071, -0.0004631515878, -0.0004449770322, +0.0000487317755, +0.0004571599760, +0.0004206111444, +0.0001829438786, +0.0000549231076, -0.0000061913321, -0.0001645696026, -0.0003229478730, -0.0002438585980, +0.0000549231076, +0.0003535050929, +0.0003718793689, +0.0000671060515, -0.0003107649291, -0.0004753345317, -0.0003169562612, -0.0000671060515, -0.0000121829439, -0.0001158378270, -0.0000974635510, +0.0001218294388, +0.0003047733174, +0.0002011184342, -0.0000183742760, -0.0000730976633, +0.0000671060515, +0.0002376672658, +0.0002194927102, -0.0000427401638, -0.0003656880367, -0.0004571599760, -0.0002194927102, +0.0000365488316, +0.0000549231076, -0.0000487317755, +0.0000000000000, +0.0002133013781, +0.0003778709806, +0.0004022368684, +0.0003596964250, +0.0002438585980, +0.0000549231076, -0.0001523866587, -0.0002620331536, -0.0002438585980, -0.0001461953265, -0.0000549231076, +0.0000365488316, +0.0001158378270, +0.0001829438786, +0.0002011184342, +0.0001523866587, +0.0000609147194, -0.0000609147194, -0.0001402037148, +0.0000061913321, +0.0002620331536, +0.0002682244857, -0.0000609147194, -0.0003962452566, -0.0003962452566, -0.0001705612143, +0.0000549231076, +0.0002254843219, +0.0003291392051, +0.0003351308169, +0.0001951268224, -0.0000487317755, -0.0002133013781, -0.0002194927102, -0.0001645696026, +0.0000121829439, +0.0003291392051, +0.0004144198123, +0.0002316756541, +0.0000305572199, -0.0000487317755, -0.0000974635510, -0.0001218294388, -0.0001767525464, -0.0001523866587, -0.0000061913321, +0.0000549231076, -0.0001036548832, -0.0002742160975, -0.0001767525464, +0.0001583782704, +0.0004266027561, +0.0004875174755, +0.0003047733174, -0.0001340123827, -0.0006217295786, -0.0007801078490, -0.0005364489714, -0.0000852806071, +0.0002863990413, +0.0004815258638, +0.0004327940883, +0.0002011184342, -0.0000183742760, -0.0001461953265, -0.0001889354903, -0.0001523866587, -0.0000183742760, +0.0001889354903, +0.0003778709806, +0.0002925903735, -0.0000852806071, -0.0004631515878, -0.0005546235271, -0.0004022368684, -0.0002194927102, -0.0000061913321, +0.0003229478730, +0.0005424405832, +0.0004387857000, +0.0001340123827, -0.0001767525464, -0.0004206111444, -0.0004753345317, -0.0003535050929, -0.0000914719393, +0.0002133013781, +0.0003656880367, +0.0002316756541, +0.0001280207709, +0.0002011184342, +0.0002133013781, +0.0000061913321, -0.0002498502097, -0.0003475134811, -0.0002133013781, -0.0000061913321, +0.0001158378270, +0.0001218294388, +0.0000000000000, -0.0003107649291, -0.0005424405832, -0.0003535050929, +0.0001340123827, +0.0004022368684, +0.0003413221490, +0.0002498502097, +0.0002254843219, +0.0000852806071, -0.0001951268224, -0.0003962452566, -0.0002133013781, +0.0001340123827, +0.0002498502097, +0.0001829438786, +0.0002133013781, +0.0003351308169, +0.0003656880367, +0.0001705612143, -0.0000914719393, -0.0001889354903, -0.0002133013781, -0.0002560415418, -0.0002254843219, -0.0000487317755, +0.0002254843219, +0.0004815258638, +0.0004631515878, +0.0002073097663, -0.0000427401638, -0.0001705612143, -0.0002011184342, -0.0001218294388, +0.0000609147194, +0.0002498502097, +0.0002194927102, +0.0000243658878, -0.0000852806071, +0.0000183742760, +0.0002073097663, +0.0001767525464, -0.0000974635510, -0.0002925903735, -0.0002620331536, -0.0001583782704, -0.0001096464949, -0.0000427401638, +0.0001280207709, +0.0002804074296, +0.0001951268224, +0.0000305572199, +0.0000427401638, +0.0001829438786, +0.0002011184342, +0.0000671060515, -0.0000121829439, +0.0000609147194, +0.0001889354903, +0.0001645696026, -0.0000121829439, -0.0001829438786, -0.0002498502097, -0.0002073097663, -0.0001340123827, -0.0001767525464, -0.0001829438786, -0.0000487317755, +0.0001340123827, +0.0002316756541, +0.0002073097663, +0.0000609147194, -0.0000365488316, -0.0000243658878, -0.0000183742760, -0.0000974635510, -0.0000609147194, +0.0000852806071, +0.0002498502097, +0.0002376672658, -0.0000183742760, -0.0002438585980, -0.0001461953265, +0.0000183742760, +0.0000609147194, +0.0000427401638, -0.0000427401638, -0.0002073097663, -0.0002133013781, +0.0000000000000, +0.0002742160975, +0.0003656880367, +0.0001767525464, -0.0000852806071, -0.0001583782704, -0.0000305572199, +0.0001340123827, +0.0002194927102, +0.0001280207709, -0.0000671060515, -0.0002682244857, -0.0002985819852, -0.0000487317755, +0.0002254843219, +0.0002376672658, +0.0001402037148, +0.0000792889954, -0.0000305572199, -0.0002133013781, -0.0003169562612, -0.0002254843219, +0.0000243658878, +0.0002682244857, +0.0003475134811, +0.0001280207709, -0.0002254843219, -0.0004084282005, -0.0003229478730, -0.0001951268224, -0.0000974635510, +0.0000000000000, +0.0000914719393, +0.0001096464949, +0.0000487317755, -0.0000549231076, -0.0001402037148, -0.0001645696026, -0.0000061913321, +0.0002254843219, +0.0002742160975, +0.0000792889954, -0.0001280207709, -0.0002560415418, -0.0002682244857, -0.0001461953265, +0.0000243658878, +0.0001340123827, +0.0001158378270, -0.0000305572199, -0.0001218294388, +0.0000487317755, +0.0002438585980, +0.0001523866587, -0.0001280207709, -0.0003351308169, -0.0004022368684, -0.0002985819852, -0.0000914719393, +0.0001645696026, +0.0003656880367, +0.0003718793689, +0.0001461953265, -0.0002194927102, -0.0004875174755, -0.0003840623128, -0.0000121829439, +0.0003169562612, +0.0004144198123, +0.0002498502097, -0.0000061913321, -0.0001096464949, -0.0000730976633, -0.0000671060515, -0.0001523866587, -0.0002254843219, -0.0001705612143, -0.0000061913321, +0.0000914719393, +0.0000974635510, +0.0000671060515, +0.0000305572199, +0.0000609147194, +0.0001461953265, +0.0001705612143, +0.0000974635510, -0.0000427401638, -0.0001583782704, -0.0001340123827, +0.0000121829439, +0.0001951268224, +0.0002560415418, +0.0001767525464, +0.0000487317755, -0.0000305572199, -0.0000730976633, -0.0000671060515, -0.0000792889954, -0.0001705612143, -0.0003291392051, -0.0003778709806, -0.0002194927102, +0.0000305572199, +0.0002682244857, +0.0004571599760, +0.0004327940883, +0.0001705612143, -0.0000609147194, -0.0001280207709, -0.0001461953265, -0.0001096464949, +0.0000061913321, +0.0001158378270, +0.0001889354903, +0.0002498502097, +0.0002011184342, +0.0000427401638, -0.0001036548832, -0.0001829438786, -0.0001829438786, -0.0001096464949, +0.0000183742760, +0.0000671060515, -0.0000792889954, -0.0002742160975, -0.0002560415418, -0.0000427401638, +0.0001583782704, +0.0002254843219, +0.0001829438786, +0.0000974635510, +0.0000671060515, +0.0001218294388, +0.0001705612143, +0.0000974635510, +0.0000000000000, -0.0001096464949, -0.0001951268224, -0.0001402037148, +0.0000487317755, +0.0001645696026, +0.0001705612143, +0.0000671060515, -0.0001583782704, -0.0003475134811, -0.0002498502097, +0.0000243658878, +0.0001705612143, +0.0001583782704, +0.0001705612143, +0.0001951268224, +0.0001583782704, +0.0000609147194, -0.0000305572199, -0.0001036548832, -0.0001889354903, -0.0002560415418, -0.0002073097663, -0.0000609147194, +0.0001158378270, +0.0003047733174, +0.0003169562612, +0.0000852806071, -0.0001829438786, -0.0003229478730, -0.0002742160975, +0.0000183742760, +0.0003229478730, +0.0003169562612, +0.0000914719393, +0.0000000000000, +0.0000000000000, -0.0000852806071, -0.0002133013781, -0.0001705612143, -0.0000487317755, -0.0000061913321, -0.0000183742760, +0.0000000000000, +0.0000974635510, +0.0002376672658, +0.0002620331536, +0.0000914719393, -0.0001340123827, -0.0002073097663, -0.0001096464949, +0.0000609147194, +0.0001829438786, +0.0001280207709, -0.0000609147194, -0.0002804074296, -0.0004449770322, -0.0004144198123, -0.0000914719393, +0.0003169562612, +0.0005242660276, +0.0004509686439, +0.0002376672658, +0.0000121829439, -0.0001767525464, -0.0002560415418, -0.0000671060515, +0.0001829438786, +0.0001767525464, -0.0000365488316, -0.0001036548832, +0.0000121829439, +0.0000609147194, -0.0000427401638, -0.0001158378270, -0.0000365488316, +0.0001523866587, +0.0003047733174, +0.0002804074296, +0.0001280207709, +0.0000243658878, +0.0000000000000, -0.0000549231076, -0.0001645696026, -0.0001523866587, -0.0000183742760, +0.0000427401638, -0.0000549231076, -0.0001705612143, -0.0001951268224, -0.0001280207709, +0.0000000000000, +0.0001096464949, +0.0000792889954, +0.0000061913321, +0.0000183742760, +0.0000549231076, +0.0000671060515, +0.0000852806071, +0.0000792889954, +0.0000427401638, +0.0000974635510, +0.0001645696026, +0.0000730976633, -0.0001889354903, -0.0003900539245, -0.0003169562612, -0.0000671060515, +0.0001280207709, +0.0002742160975, +0.0002985819852, +0.0001218294388, -0.0001583782704, -0.0002985819852, -0.0002073097663, +0.0000305572199, +0.0002073097663, +0.0002316756541, +0.0001829438786, +0.0000974635510, -0.0000914719393, -0.0002560415418, -0.0002011184342, -0.0000061913321, +0.0001461953265, +0.0002133013781, +0.0002194927102, +0.0001218294388, -0.0000974635510, -0.0002742160975, -0.0002438585980, -0.0000609147194, +0.0000792889954, +0.0000852806071, +0.0000305572199, +0.0000000000000, -0.0000427401638, -0.0001158378270, -0.0000792889954, +0.0000305572199, +0.0001218294388, +0.0001583782704, +0.0001951268224, +0.0001583782704, +0.0000000000000, -0.0001461953265, -0.0001829438786, -0.0002011184342, -0.0002133013781, -0.0001280207709, +0.0000305572199, +0.0000974635510, +0.0000121829439, -0.0000549231076, +0.0000183742760, +0.0001158378270, +0.0000852806071, +0.0000000000000, +0.0000671060515, +0.0001583782704, +0.0000183742760, -0.0002254843219, -0.0002863990413, -0.0001461953265, +0.0000427401638, +0.0001767525464, +0.0002438585980, +0.0002682244857, +0.0001705612143, -0.0000792889954, -0.0003351308169, -0.0004022368684, -0.0002560415418, +0.0000000000000, +0.0002011184342, +0.0002133013781, +0.0000427401638, -0.0001280207709, -0.0001829438786, -0.0000792889954, +0.0000671060515, +0.0001340123827, +0.0000852806071, +0.0000243658878, -0.0000305572199, -0.0000792889954, -0.0001036548832, -0.0000609147194, +0.0000487317755, +0.0001461953265, +0.0001036548832, -0.0000243658878, -0.0001461953265, -0.0001523866587, -0.0000730976633, +0.0000243658878, +0.0001280207709, +0.0002133013781, +0.0002011184342, +0.0001158378270, +0.0000427401638, -0.0000183742760, -0.0000852806071, -0.0000914719393, -0.0000305572199, +0.0000852806071, +0.0002011184342, +0.0001340123827, -0.0000549231076, -0.0001645696026, -0.0001461953265, -0.0002011184342, -0.0002985819852, -0.0002316756541, +0.0000061913321, +0.0001461953265, +0.0000792889954, -0.0000305572199, -0.0000609147194, -0.0000671060515, -0.0000792889954, -0.0000305572199, +0.0000852806071, +0.0000730976633, -0.0000671060515, -0.0001036548832, +0.0000609147194, +0.0001280207709, -0.0000427401638, -0.0002254843219, -0.0002011184342, -0.0001036548832, -0.0000427401638, -0.0000121829439, -0.0000365488316, -0.0000243658878, +0.0000914719393, +0.0002073097663, +0.0002011184342, +0.0000487317755, -0.0001523866587, -0.0002316756541, -0.0001951268224, -0.0000792889954, +0.0001036548832, +0.0002682244857, +0.0002804074296, +0.0002011184342, +0.0000427401638, -0.0001158378270, -0.0002073097663, -0.0001645696026, -0.0000427401638, +0.0000792889954, +0.0002194927102, +0.0003107649291, +0.0001402037148, -0.0002011184342, -0.0004206111444, -0.0003169562612, -0.0000487317755, +0.0001461953265, +0.0002254843219, +0.0002498502097, +0.0001767525464, +0.0000365488316, -0.0000487317755, +0.0000061913321, +0.0001523866587, +0.0001583782704, -0.0000730976633, -0.0002438585980, -0.0001096464949, +0.0000974635510, +0.0001402037148, +0.0001218294388, +0.0001280207709, +0.0000549231076, -0.0001829438786, -0.0004084282005, -0.0004144198123, -0.0002560415418, -0.0000243658878, +0.0001951268224, +0.0003596964250, +0.0003840623128, +0.0002560415418, +0.0000671060515, -0.0000427401638, -0.0001158378270, -0.0001158378270, -0.0000549231076, +0.0000061913321, +0.0000549231076, +0.0001096464949, +0.0000549231076, -0.0000609147194, -0.0001036548832, -0.0000852806071, -0.0000852806071, -0.0000852806071, -0.0000549231076, +0.0000487317755, +0.0002254843219, +0.0003047733174, +0.0001767525464, -0.0000487317755, -0.0002073097663, -0.0002073097663, -0.0000852806071, +0.0000914719393, +0.0002804074296, +0.0003656880367, +0.0002925903735, +0.0000609147194, -0.0002011184342, -0.0003107649291, -0.0001829438786, +0.0000121829439, +0.0001705612143, +0.0002620331536, +0.0002438585980, +0.0000549231076, -0.0001096464949, -0.0001340123827, -0.0000974635510, -0.0000730976633, -0.0000121829439, +0.0000183742760, -0.0000609147194, -0.0001402037148, -0.0000549231076, +0.0000792889954, +0.0000730976633, -0.0000852806071, -0.0001829438786, -0.0000730976633, +0.0001523866587, +0.0003169562612, +0.0003047733174, +0.0001036548832, -0.0001523866587, -0.0002682244857, -0.0002073097663, -0.0001158378270, -0.0001218294388, -0.0001402037148, -0.0000609147194, +0.0000730976633, +0.0001158378270, +0.0000487317755, +0.0000243658878, +0.0000671060515, +0.0000914719393, +0.0000914719393, +0.0000487317755, +0.0000305572199, +0.0000609147194, +0.0000609147194, +0.0000121829439, -0.0000061913321, -0.0000365488316, -0.0000974635510, -0.0001158378270, -0.0000061913321, +0.0000914719393, -0.0000121829439, -0.0002011184342, -0.0001461953265, +0.0000730976633, +0.0001889354903, +0.0001705612143, +0.0001461953265, +0.0000671060515, -0.0001096464949, -0.0002133013781, -0.0001218294388, +0.0000852806071, +0.0002316756541, +0.0002376672658, +0.0002316756541, +0.0003107649291, +0.0002742160975, +0.0000487317755, -0.0001951268224, -0.0002498502097, -0.0001523866587, -0.0001036548832, -0.0001461953265, -0.0000671060515, +0.0001218294388, +0.0002376672658, +0.0001280207709, -0.0000549231076, -0.0000914719393, +0.0000365488316, +0.0001461953265, +0.0000609147194, -0.0001583782704, -0.0002985819852, -0.0002254843219, -0.0000061913321, +0.0002011184342, +0.0002985819852, +0.0001951268224, -0.0000061913321, -0.0001158378270, -0.0000609147194, +0.0000487317755, +0.0001158378270, +0.0001096464949, +0.0000000000000, -0.0001645696026, -0.0002925903735, -0.0002925903735, -0.0001583782704, +0.0001402037148, +0.0004266027561, +0.0004509686439, +0.0001583782704, -0.0002073097663, -0.0004509686439, -0.0004631515878, -0.0002498502097, +0.0000914719393, +0.0004266027561, +0.0006277211903, +0.0004875174755, +0.0000427401638, -0.0003900539245, -0.0005364489714, -0.0004084282005, -0.0001218294388, +0.0001158378270, +0.0002376672658, +0.0002438585980, +0.0001705612143, +0.0000305572199, -0.0000792889954, -0.0001096464949, -0.0001461953265, -0.0002254843219, -0.0002620331536, -0.0001583782704, +0.0000549231076, +0.0002133013781, +0.0001889354903, +0.0000974635510, -0.0000061913321, -0.0001767525464, -0.0003107649291, -0.0002376672658, -0.0000852806071, +0.0000000000000, +0.0000609147194, +0.0001767525464, +0.0002073097663, +0.0001096464949, -0.0000427401638, -0.0001583782704, -0.0001951268224, -0.0000914719393, +0.0000852806071, +0.0002316756541, +0.0002316756541, +0.0001280207709, -0.0000121829439, -0.0001583782704, -0.0002804074296, -0.0002620331536, -0.0000427401638, +0.0002560415418, +0.0004266027561, +0.0003840623128, +0.0002438585980, +0.0000609147194, -0.0001705612143, -0.0003291392051, -0.0002863990413, -0.0001402037148, -0.0000243658878, +0.0000609147194, +0.0001767525464, +0.0002133013781, +0.0001096464949, -0.0000427401638, -0.0001340123827, -0.0001340123827, -0.0000852806071, -0.0000852806071, -0.0001158378270, -0.0000487317755, +0.0000365488316, -0.0000121829439, -0.0001523866587, -0.0001889354903, -0.0000487317755, +0.0001583782704, +0.0003107649291, +0.0003291392051, +0.0002073097663, -0.0000121829439, -0.0002560415418, -0.0003475134811, -0.0002073097663, +0.0000365488316, +0.0001829438786, +0.0001218294388, -0.0000243658878, -0.0000487317755, -0.0000121829439, +0.0000061913321, +0.0000121829439, +0.0000243658878, +0.0000000000000, -0.0000549231076, -0.0000974635510, -0.0000671060515, -0.0000365488316, -0.0000061913321, +0.0000914719393, +0.0001889354903, +0.0001340123827, +0.0000305572199, +0.0000365488316, +0.0001340123827, +0.0001280207709, -0.0000365488316, -0.0001951268224, -0.0001583782704, +0.0000243658878, +0.0002254843219, +0.0002863990413, +0.0002073097663, +0.0000974635510, -0.0000792889954, -0.0002682244857, -0.0002560415418, -0.0000305572199, +0.0001583782704, +0.0002316756541, +0.0002133013781, +0.0001583782704, +0.0000487317755, -0.0000730976633, -0.0001705612143, -0.0001096464949, +0.0000852806071, +0.0002925903735, +0.0003413221490, +0.0002316756541, +0.0000671060515, -0.0000671060515, -0.0001705612143, -0.0001705612143, -0.0001036548832, -0.0000427401638, -0.0000183742760, -0.0000183742760, -0.0000487317755, -0.0000427401638, +0.0000183742760, +0.0000792889954, +0.0000609147194, -0.0000365488316, -0.0002133013781, -0.0003047733174, -0.0001767525464, +0.0000305572199, +0.0002011184342, +0.0003229478730, +0.0003351308169, +0.0001951268224, +0.0000061913321, -0.0001340123827, -0.0001829438786, -0.0002073097663, -0.0002011184342, -0.0000974635510, +0.0000792889954, +0.0001829438786, +0.0002073097663, +0.0001645696026, +0.0000243658878, -0.0001889354903, -0.0003229478730, -0.0003291392051, -0.0002742160975, -0.0001645696026, +0.0000305572199, +0.0002376672658, +0.0003475134811, +0.0003596964250, +0.0002985819852, +0.0001583782704, -0.0000974635510, -0.0003718793689, -0.0004206111444, -0.0002316756541, +0.0000243658878, +0.0001951268224, +0.0002316756541, +0.0001889354903, +0.0001158378270, +0.0000061913321, -0.0001036548832, -0.0001218294388, -0.0000792889954, -0.0000852806071, -0.0000974635510, +0.0000243658878, +0.0001829438786, +0.0001461953265, -0.0000730976633, -0.0002133013781, -0.0002254843219, -0.0001645696026, -0.0000121829439, +0.0002011184342, +0.0003169562612, +0.0002560415418, +0.0000609147194, -0.0001036548832, -0.0001645696026, -0.0000974635510, +0.0000305572199, +0.0001096464949, +0.0000061913321, -0.0001889354903, -0.0002742160975, -0.0001461953265, +0.0000974635510, +0.0002985819852, +0.0003351308169, +0.0001767525464, -0.0000427401638, -0.0002073097663, -0.0002254843219, -0.0001402037148, -0.0000487317755, -0.0000365488316, -0.0000121829439, +0.0001036548832, +0.0002254843219, +0.0002316756541, +0.0001523866587, +0.0000609147194, +0.0000121829439, -0.0000852806071, -0.0002438585980, -0.0003535050929, -0.0002925903735, -0.0001402037148, -0.0000121829439, +0.0000852806071, +0.0001951268224, +0.0002985819852, +0.0002620331536, +0.0000792889954, -0.0000549231076, -0.0000730976633, -0.0000549231076, -0.0000609147194, -0.0000792889954, -0.0001096464949, -0.0001461953265, -0.0001523866587, -0.0000914719393, +0.0000061913321, +0.0000914719393, +0.0001645696026, +0.0001767525464, +0.0001340123827, +0.0000487317755, -0.0000487317755, -0.0000852806071, +0.0000000000000, +0.0000974635510, +0.0001218294388, +0.0000609147194, -0.0000365488316, -0.0001036548832, -0.0001036548832, -0.0001036548832, -0.0001280207709, -0.0001402037148, -0.0001218294388, -0.0000365488316, +0.0000914719393, +0.0001889354903, +0.0002376672658, +0.0002316756541, +0.0001280207709, +0.0000000000000, -0.0000792889954, -0.0000974635510, -0.0000914719393, -0.0000609147194, -0.0000061913321, +0.0000427401638, +0.0001158378270, +0.0001280207709, -0.0000121829439, -0.0001218294388, -0.0000671060515, +0.0000305572199, +0.0000730976633, +0.0000792889954, +0.0000730976633, +0.0000243658878, -0.0001036548832, -0.0001889354903, -0.0001461953265, -0.0000487317755, -0.0000121829439, -0.0000305572199, -0.0000487317755, +0.0000121829439, +0.0001523866587, +0.0002133013781, +0.0001218294388, +0.0000183742760, +0.0000000000000, -0.0000121829439, -0.0000121829439, +0.0000061913321, +0.0000000000000, -0.0000792889954, -0.0001951268224, -0.0002498502097, -0.0001402037148, +0.0000305572199, +0.0001036548832, +0.0000487317755, +0.0000243658878, +0.0001218294388, +0.0001889354903, +0.0000549231076, -0.0001340123827, -0.0001767525464, -0.0001402037148, -0.0001280207709, -0.0000730976633, +0.0000305572199, +0.0001218294388, +0.0001583782704, +0.0001645696026, +0.0001280207709, -0.0000061913321, -0.0001767525464, -0.0002620331536, -0.0002316756541, -0.0001645696026, -0.0000487317755, +0.0000974635510, +0.0002620331536, +0.0003351308169, +0.0002498502097, +0.0000427401638, -0.0001280207709, -0.0002133013781, -0.0002194927102, -0.0001523866587, +0.0000000000000, +0.0001340123827, +0.0001645696026, +0.0001158378270, +0.0001036548832, +0.0001218294388, +0.0001280207709, +0.0000792889954, -0.0000365488316, -0.0001583782704, -0.0001829438786, -0.0001036548832, +0.0000183742760, +0.0001218294388, +0.0001402037148, +0.0001096464949, +0.0000243658878, -0.0001096464949, -0.0002011184342, -0.0001705612143, -0.0000183742760, +0.0001645696026, +0.0002254843219, +0.0001340123827, -0.0000183742760, -0.0001767525464, -0.0002376672658, -0.0001218294388, +0.0001096464949, +0.0003535050929, +0.0004387857000, +0.0003047733174, +0.0000243658878, -0.0002376672658, -0.0004509686439, -0.0005242660276, -0.0003840623128, -0.0000914719393, +0.0001705612143, +0.0002742160975, +0.0001829438786, +0.0000487317755, +0.0000061913321, +0.0000183742760, +0.0000000000000, -0.0000061913321, +0.0000427401638, +0.0000852806071, +0.0000730976633, +0.0000305572199, -0.0000121829439, -0.0000427401638, -0.0000427401638, -0.0000487317755, -0.0000243658878, +0.0000487317755, +0.0001218294388, +0.0000671060515, -0.0000305572199, -0.0000792889954, -0.0000183742760, +0.0000365488316, +0.0000243658878, -0.0000305572199, -0.0000427401638, -0.0000061913321, +0.0000427401638, +0.0000730976633, +0.0001158378270, +0.0002073097663, +0.0002620331536, +0.0001889354903, +0.0000914719393, +0.0000549231076, -0.0000183742760, -0.0001402037148, -0.0001705612143, -0.0000730976633, +0.0000365488316, +0.0000914719393, +0.0001158378270, +0.0001583782704, +0.0001402037148, +0.0000487317755, -0.0000609147194, -0.0001218294388, -0.0001340123827, -0.0000852806071, -0.0000183742760, +0.0000671060515, +0.0001645696026, +0.0002133013781, +0.0001402037148, +0.0000243658878, -0.0000487317755, -0.0000609147194, -0.0000061913321, +0.0000852806071, +0.0001402037148, +0.0001158378270, +0.0000000000000, -0.0001340123827, -0.0001889354903, -0.0001280207709, -0.0000792889954, -0.0000852806071, -0.0000549231076, +0.0000305572199, +0.0001096464949, +0.0001218294388, +0.0000730976633, +0.0000061913321, -0.0000243658878, -0.0000671060515, -0.0000671060515, +0.0000183742760, +0.0001402037148, +0.0001523866587, +0.0000305572199, -0.0001158378270, -0.0001461953265, -0.0000671060515, +0.0000671060515, +0.0001767525464, +0.0001583782704, +0.0000183742760, -0.0001036548832, -0.0001829438786, -0.0002133013781, -0.0001889354903, -0.0000852806071, +0.0000792889954, +0.0002438585980, +0.0002985819852, +0.0001829438786, +0.0000121829439, -0.0000671060515, -0.0000792889954, -0.0000792889954, -0.0000730976633, -0.0000305572199, +0.0000487317755, +0.0000852806071, +0.0000487317755, +0.0000061913321, -0.0000061913321, -0.0000852806071, -0.0002376672658, -0.0003169562612, -0.0002498502097, -0.0001402037148, -0.0000609147194, +0.0000183742760, +0.0000609147194, +0.0000121829439, -0.0000487317755, -0.0000183742760, +0.0000852806071, +0.0001461953265, +0.0001036548832, +0.0000183742760, -0.0000427401638, -0.0000792889954, -0.0001096464949, -0.0001402037148, -0.0000914719393, +0.0000243658878, +0.0001218294388, +0.0000914719393, -0.0000427401638, -0.0001645696026, -0.0001829438786, -0.0000914719393, +0.0000609147194, +0.0001523866587, +0.0000974635510, +0.0000061913321, -0.0000852806071, -0.0001889354903, -0.0002376672658, -0.0001583782704, +0.0000000000000, +0.0001523866587, +0.0002073097663, +0.0001645696026, +0.0000671060515, +0.0000000000000, +0.0000000000000, +0.0000061913321, -0.0000305572199, -0.0000852806071, -0.0001158378270, -0.0001340123827, -0.0001096464949, -0.0000549231076, -0.0000121829439, +0.0000000000000, +0.0000243658878, +0.0000671060515, +0.0000852806071, +0.0000549231076, +0.0000305572199, +0.0000427401638, +0.0000549231076, +0.0000061913321, -0.0000792889954, -0.0001340123827, -0.0000974635510, +0.0000243658878, +0.0001583782704, +0.0001705612143, +0.0000730976633, +0.0000000000000, -0.0000183742760, -0.0000243658878, -0.0000305572199, -0.0000183742760, +0.0000061913321, +0.0000305572199, +0.0000061913321, -0.0000305572199, -0.0000609147194, -0.0000549231076, -0.0000243658878, +0.0000183742760, +0.0000243658878, +0.0000121829439, +0.0000487317755, +0.0001402037148, +0.0001218294388, -0.0000365488316, -0.0001767525464, -0.0001583782704, -0.0000365488316, +0.0000671060515, +0.0001280207709, +0.0001402037148, +0.0000671060515, -0.0000671060515, -0.0001645696026, -0.0001096464949, +0.0000365488316, +0.0001280207709, +0.0000671060515, -0.0000427401638, -0.0000792889954, -0.0000487317755, -0.0000061913321, +0.0000730976633, +0.0001461953265, +0.0001402037148, +0.0000671060515, +0.0000000000000, -0.0000427401638, -0.0000671060515, -0.0000730976633, -0.0000183742760, +0.0001036548832, +0.0001767525464, +0.0000974635510, -0.0000549231076, -0.0001523866587, -0.0001523866587, -0.0000792889954, +0.0000121829439, +0.0001158378270, +0.0001889354903, +0.0001889354903, +0.0000730976633, -0.0000609147194, -0.0001158378270, -0.0000609147194, +0.0000243658878, +0.0001218294388, +0.0001889354903, +0.0001767525464, +0.0000852806071, -0.0000365488316, -0.0001402037148, -0.0001523866587, -0.0000730976633, +0.0000183742760, +0.0001096464949, +0.0001951268224, +0.0002316756541, +0.0001645696026, +0.0000549231076, -0.0000305572199, -0.0000914719393, -0.0001280207709, -0.0001096464949, -0.0000365488316, +0.0000549231076, +0.0001158378270, +0.0001158378270, +0.0000609147194, +0.0000061913321, -0.0000487317755, -0.0000914719393, -0.0000365488316, +0.0000852806071, +0.0001523866587, +0.0000974635510, -0.0000243658878, -0.0001158378270, -0.0001280207709, -0.0001036548832, -0.0000305572199, +0.0000183742760, +0.0000000000000, -0.0000671060515, -0.0000792889954, -0.0000121829439, +0.0000792889954, +0.0001583782704, +0.0001767525464, +0.0001036548832, -0.0000061913321, -0.0000730976633, -0.0000487317755, +0.0000000000000, +0.0000365488316, +0.0000183742760, -0.0000243658878, -0.0000730976633, -0.0000792889954, -0.0000365488316, +0.0000243658878, +0.0000609147194, +0.0000121829439, -0.0000549231076, -0.0000792889954, -0.0000974635510, -0.0001218294388, -0.0000730976633, +0.0000183742760, +0.0000974635510, +0.0001218294388, +0.0001096464949, +0.0000730976633, +0.0000305572199, -0.0000243658878, -0.0000365488316, +0.0000061913321, +0.0000730976633, +0.0000852806071, +0.0000243658878, -0.0000427401638, -0.0000974635510, -0.0001280207709, -0.0000914719393, +0.0000000000000, +0.0000671060515, +0.0000852806071, +0.0000852806071, +0.0000609147194, -0.0000243658878, -0.0001036548832, -0.0000974635510, -0.0000243658878, +0.0000305572199, +0.0000427401638, +0.0000121829439, -0.0000121829439, -0.0000183742760, +0.0000549231076, +0.0001705612143, +0.0001889354903, +0.0000549231076, -0.0000914719393, -0.0001158378270, -0.0000792889954, -0.0001036548832, -0.0001218294388, -0.0000549231076, +0.0000183742760, +0.0000427401638, +0.0000183742760, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000487317755, -0.0000852806071, -0.0000852806071, -0.0000427401638, +0.0000365488316, +0.0001340123827, +0.0002011184342, +0.0001829438786, +0.0001158378270, +0.0000365488316, -0.0000730976633, -0.0002376672658, -0.0003291392051, -0.0002194927102, +0.0000000000000, +0.0001583782704, +0.0001951268224, +0.0001523866587, +0.0000609147194, -0.0000549231076, -0.0001523866587, -0.0001645696026, -0.0001096464949, -0.0000121829439, +0.0000792889954, +0.0001461953265, +0.0001523866587, +0.0000974635510, -0.0000243658878, -0.0001583782704, -0.0002073097663, -0.0001036548832, +0.0000671060515, +0.0001523866587, +0.0001461953265, +0.0001218294388, +0.0000974635510, +0.0000487317755, -0.0000243658878, -0.0000974635510, -0.0001158378270, -0.0000792889954, -0.0000305572199, +0.0000183742760, +0.0000549231076, +0.0000671060515, +0.0001158378270, +0.0001829438786, +0.0001767525464, +0.0000671060515, -0.0000792889954, -0.0001767525464, -0.0002011184342, -0.0001705612143, -0.0000730976633, +0.0000974635510, +0.0002376672658, +0.0002316756541, +0.0001523866587, +0.0000852806071, +0.0000365488316, -0.0000243658878, -0.0001158378270, -0.0001705612143, -0.0001340123827, -0.0000365488316, +0.0000061913321, +0.0000243658878, +0.0000730976633, +0.0000914719393, +0.0000243658878, -0.0000549231076, -0.0000914719393, -0.0000487317755, -0.0000061913321, -0.0000121829439, -0.0000427401638, -0.0000365488316, +0.0000000000000, +0.0000121829439, +0.0000000000000, -0.0000427401638, -0.0000792889954, -0.0000914719393, -0.0000671060515, -0.0000061913321, +0.0000365488316, +0.0000549231076, +0.0000427401638, +0.0000183742760, +0.0000000000000, -0.0000183742760, -0.0000243658878, -0.0000487317755, -0.0000730976633, -0.0000792889954, -0.0000427401638, +0.0000183742760, +0.0000427401638, +0.0000183742760, +0.0000000000000, -0.0000061913321, +0.0000000000000, +0.0000121829439, +0.0000000000000, -0.0000427401638, -0.0000243658878, +0.0000243658878, +0.0000487317755, +0.0000549231076, +0.0000549231076, +0.0000061913321, -0.0000549231076, -0.0000549231076, +0.0000365488316, +0.0001218294388, +0.0000792889954, -0.0000305572199, -0.0000852806071, -0.0000487317755, +0.0000061913321, +0.0000427401638, +0.0000671060515, +0.0001096464949, +0.0001096464949, +0.0000243658878, -0.0000974635510, -0.0001340123827, -0.0001036548832, -0.0000671060515, +0.0000000000000, +0.0001218294388, +0.0002620331536, +0.0003047733174, +0.0002133013781, +0.0000487317755, -0.0000974635510, -0.0002254843219, -0.0002863990413, -0.0002620331536, -0.0001645696026, -0.0000487317755, +0.0000852806071, +0.0002011184342, +0.0002376672658, +0.0001645696026, +0.0000549231076, +0.0000061913321, +0.0000121829439, -0.0000243658878, -0.0001158378270, -0.0001523866587, -0.0000609147194, +0.0000427401638, +0.0000852806071, +0.0000730976633, +0.0000487317755, +0.0000121829439, -0.0000243658878, -0.0000730976633, -0.0000974635510, -0.0000730976633, -0.0000243658878, +0.0000000000000, +0.0000243658878, +0.0000487317755, +0.0000305572199, +0.0000000000000, +0.0000121829439, +0.0000365488316, +0.0000183742760, +0.0000000000000, -0.0000183742760, +0.0000000000000, +0.0000427401638, +0.0000852806071, +0.0000974635510, +0.0000974635510, +0.0000609147194, -0.0000121829439, -0.0001218294388, -0.0001829438786, -0.0001583782704, -0.0000365488316, +0.0001218294388, +0.0002438585980, +0.0002194927102, +0.0000549231076, -0.0001280207709, -0.0002133013781, -0.0001280207709, +0.0000427401638, +0.0001829438786, +0.0002073097663, +0.0001705612143, +0.0001096464949, +0.0000305572199, -0.0000427401638, -0.0000730976633, -0.0000914719393, -0.0001036548832, -0.0000671060515, +0.0000305572199, +0.0001340123827, +0.0001705612143, +0.0000730976633, -0.0000609147194, -0.0000914719393, -0.0000061913321, +0.0000487317755, +0.0000243658878, -0.0000305572199, -0.0000671060515, -0.0000671060515, -0.0000183742760, +0.0000549231076, +0.0001096464949, +0.0001096464949, +0.0000549231076, -0.0000121829439, -0.0000671060515, -0.0000609147194, -0.0000183742760, +0.0000549231076, +0.0001096464949, +0.0001280207709, +0.0000609147194, -0.0000487317755, -0.0002073097663, -0.0003107649291, -0.0002682244857, -0.0000730976633, +0.0001158378270, +0.0002011184342, +0.0001767525464, +0.0001096464949, +0.0000183742760, -0.0001036548832, -0.0002133013781, -0.0001951268224, -0.0000549231076, +0.0000974635510, +0.0001829438786, +0.0001158378270, -0.0000487317755, -0.0001829438786, -0.0002254843219, -0.0001705612143, -0.0000183742760, +0.0001461953265, +0.0002254843219, +0.0001461953265, +0.0000183742760, -0.0000487317755, -0.0000671060515, -0.0000914719393, -0.0000852806071, -0.0000183742760, +0.0000487317755, +0.0000730976633, +0.0000609147194, +0.0000609147194, +0.0000487317755, -0.0000061913321, -0.0000730976633, -0.0000671060515, +0.0000183742760, +0.0000852806071, +0.0000609147194, +0.0000000000000, -0.0000305572199, -0.0000061913321, +0.0000183742760, +0.0000121829439, -0.0000121829439, +0.0000000000000, +0.0000365488316, +0.0000427401638, +0.0000061913321, -0.0000183742760, -0.0000305572199, -0.0000549231076, -0.0001036548832, -0.0001036548832, -0.0000061913321, +0.0001218294388, +0.0002011184342, +0.0001951268224, +0.0001280207709, +0.0000183742760, -0.0000914719393, -0.0001767525464, -0.0002073097663, -0.0001583782704, -0.0000427401638, +0.0000427401638, +0.0000487317755, +0.0000061913321, +0.0000183742760, +0.0000671060515, +0.0000730976633, +0.0000061913321, -0.0000243658878, +0.0000000000000, -0.0000061913321, -0.0000974635510, -0.0001705612143, -0.0001340123827, +0.0000000000000, +0.0000730976633, +0.0000305572199, -0.0000365488316, -0.0000671060515, -0.0000730976633, -0.0000730976633, -0.0000487317755, +0.0000549231076, +0.0002073097663, +0.0002742160975, +0.0002011184342, +0.0000061913321, -0.0001583782704, -0.0002073097663, -0.0001461953265, -0.0000730976633, -0.0000061913321, +0.0000365488316, +0.0000365488316, -0.0000121829439, -0.0000305572199, +0.0000365488316, +0.0001583782704, +0.0001889354903, +0.0001036548832, -0.0000305572199, -0.0001402037148, -0.0001829438786, -0.0001340123827, -0.0000061913321, +0.0001218294388, +0.0001767525464, +0.0001340123827, +0.0000549231076, +0.0000121829439, +0.0000061913321, -0.0000305572199, -0.0001096464949, -0.0001280207709, -0.0000183742760, +0.0000730976633, +0.0000671060515, +0.0000365488316, +0.0000914719393, +0.0001523866587, +0.0001096464949, -0.0000427401638, -0.0001951268224, -0.0002560415418, -0.0001889354903, -0.0000305572199, +0.0001583782704, +0.0002560415418, +0.0002133013781, +0.0001036548832, +0.0000000000000, -0.0000974635510, -0.0001402037148, -0.0001096464949, -0.0000243658878, +0.0000487317755, +0.0000852806071, +0.0000549231076, -0.0000305572199, -0.0000792889954, -0.0000549231076, +0.0000061913321, +0.0000671060515, +0.0000792889954, +0.0000000000000, -0.0000852806071, -0.0000852806071, +0.0000061913321, +0.0001158378270, +0.0001767525464, +0.0001645696026, +0.0000671060515, -0.0000914719393, -0.0001951268224, -0.0001340123827, +0.0000121829439, +0.0000852806071, +0.0000365488316, -0.0000365488316, -0.0000730976633, -0.0000427401638, +0.0000365488316, +0.0001340123827, +0.0001645696026, +0.0000914719393, -0.0000243658878, -0.0000852806071, -0.0000671060515, -0.0000183742760, +0.0000000000000, -0.0000305572199, -0.0000609147194, +0.0000061913321, +0.0000792889954, +0.0000671060515, -0.0000121829439, -0.0000305572199, +0.0000183742760, +0.0000487317755, +0.0000183742760, +0.0000000000000, -0.0000061913321, -0.0000365488316, -0.0000914719393, -0.0001340123827, -0.0001158378270, -0.0000487317755, +0.0000061913321, +0.0000365488316, +0.0000609147194, +0.0000852806071, +0.0001158378270, +0.0001158378270, +0.0000852806071, +0.0000000000000, -0.0000974635510, -0.0001158378270, -0.0000183742760, +0.0000609147194, +0.0000730976633, +0.0000609147194, +0.0000549231076, +0.0000365488316, -0.0000305572199, -0.0000914719393, -0.0000671060515, +0.0000121829439, +0.0000852806071, +0.0001461953265, +0.0001705612143, +0.0001340123827, +0.0000549231076, -0.0000121829439, -0.0000609147194, -0.0000792889954, -0.0000852806071, -0.0000730976633, -0.0000487317755, +0.0000243658878, +0.0001036548832, +0.0001280207709, +0.0001036548832, +0.0000487317755, -0.0000365488316, -0.0001218294388, -0.0001461953265, -0.0000914719393, +0.0000000000000, +0.0000792889954, +0.0001340123827, +0.0001036548832, +0.0000061913321, -0.0000427401638, -0.0000305572199, -0.0000365488316, -0.0000792889954, -0.0000974635510, -0.0000365488316, +0.0000305572199, +0.0000487317755, +0.0000121829439, +0.0000000000000, +0.0000000000000, +0.0000121829439, +0.0000000000000, -0.0000183742760, -0.0000427401638, -0.0000365488316, -0.0000243658878, -0.0000121829439, -0.0000121829439, -0.0000305572199, -0.0000121829439, +0.0000365488316, +0.0000730976633, +0.0000852806071, +0.0001096464949, +0.0001340123827, +0.0001158378270, +0.0000061913321, -0.0001280207709, -0.0001951268224, -0.0001280207709, -0.0000305572199, +0.0000365488316, +0.0000730976633, +0.0000974635510, +0.0000671060515, +0.0000000000000, -0.0000549231076, -0.0000427401638, +0.0000183742760, +0.0000852806071, +0.0000914719393, +0.0000549231076, +0.0000121829439, -0.0000305572199, -0.0000730976633, -0.0001036548832, -0.0000914719393, -0.0000365488316, +0.0000427401638, +0.0001036548832, +0.0001096464949, +0.0000609147194, +0.0000061913321, -0.0000183742760 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/05-fender-68-vibrolux-sm57-off.h000066400000000000000000003031571247673406200264560ustar00rootroot00000000000000float fender_68_vibrolux_sm57_off[] = { +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000058490566, +0.0000115094340, +0.0000115094340, +0.0000058490566, +0.0000000000000, +0.0000000000000, -0.0000173584906, -0.0000288679245, -0.0000173584906, -0.0000058490566, +0.0000000000000, +0.0000058490566, +0.0000230188679, +0.0000288679245, +0.0000173584906, +0.0000115094340, +0.0000115094340, +0.0000058490566, -0.0000115094340, -0.0000345283019, -0.0000230188679, +0.0000000000000, +0.0000058490566, +0.0000230188679, +0.0000518867925, +0.0000633962264, +0.0000288679245, -0.0000058490566, -0.0000173584906, -0.0000230188679, -0.0000690566038, -0.0001035849057, -0.0000749056604, -0.0000518867925, -0.0000288679245, +0.0000173584906, +0.0000979245283, +0.0001439622642, +0.0001209433962, +0.0000575471698, +0.0000288679245, +0.0000115094340, -0.0000518867925, -0.0000864150943, -0.0000633962264, -0.0000690566038, -0.0000749056604, -0.0000345283019, +0.0000460377358, +0.0001035849057, +0.0000749056604, +0.0000173584906, +0.0000000000000, -0.0000518867925, -0.0001266037736, -0.0001496226415, -0.0000864150943, -0.0000288679245, -0.0000058490566, +0.0000403773585, +0.0001496226415, +0.0002188679245, +0.0002073584906, +0.0001496226415, +0.0001094339623, -0.0000058490566, -0.0002073584906, -0.0002935849057, -0.0002360377358, -0.0001843396226, -0.0001728301887, -0.0000864150943, +0.0000518867925, +0.0001381132075, +0.0001324528302, +0.0001324528302, +0.0001611320755, +0.0000920754717, -0.0000690566038, -0.0001728301887, -0.0001324528302, -0.0000690566038, -0.0000345283019, +0.0000460377358, +0.0001843396226, +0.0002360377358, +0.0001496226415, +0.0000690566038, +0.0000518867925, -0.0000230188679, -0.0002188679245, -0.0003109433962, -0.0002820754717, -0.0002590566038, -0.0002360377358, -0.0000864150943, +0.0001669811321, +0.0003050943396, +0.0002705660377, +0.0002533962264, +0.0002649056604, +0.0001496226415, -0.0000575471698, -0.0001554716981, -0.0001094339623, -0.0001611320755, -0.0002764150943, -0.0001784905660, +0.0000575471698, +0.0001784905660, +0.0001439622642, +0.0001381132075, +0.0001324528302, -0.0000403773585, -0.0002764150943, -0.0002705660377, -0.0001843396226, -0.0001728301887, -0.0001784905660, +0.0000173584906, +0.0002590566038, +0.0003513207547, +0.0003684905660, +0.0004664150943, +0.0004145283019, +0.0001381132075, -0.0001843396226, -0.0003339622642, -0.0003800000000, -0.0003915094340, -0.0003743396226, -0.0002360377358, -0.0000345283019, +0.0001209433962, +0.0001611320755, +0.0003454716981, +0.0004088679245, +0.0002705660377, -0.0000173584906, -0.0002015094340, -0.0002935849057, -0.0002705660377, -0.0001669811321, +0.0000690566038, +0.0002245283019, +0.0003915094340, +0.0002994339623, +0.0002360377358, +0.0003513207547, +0.0002590566038, -0.0002820754717, -0.0005239622642, -0.0005930188679, -0.0006679245283, -0.0007083018868, -0.0003109433962, +0.0002073584906, +0.0006390566038, +0.0005584905660, +0.0005988679245, +0.0007139622642, +0.0007369811321, +0.0002820754717, +0.0000805660377, -0.0001554716981, -0.0006218867925, -0.0005700000000, -0.0014222641509, +0.0012494339623, -0.0011054716981, +0.0006505660377, +0.0012839622642, +0.0004720754717, -0.0003339622642, -0.0003109433962, -0.0004145283019, +0.0001209433962, -0.0005354716981, -0.0007945283019, -0.0006390566038, -0.0001150943396, +0.0014509433962, +0.0018311320755, +0.0025967924528, +0.0020843396226, +0.0011977358491, -0.0000058490566, -0.0001496226415, -0.0004490566038, -0.0015662264151, -0.0021937735849, -0.0020843396226, -0.0022167924528, -0.0020843396226, -0.0009788679245, +0.0102262264151, +0.0023666037736, -0.0383369811321, -0.0203432075472, +0.0619162264151, +0.1230203773585, +0.1472445283019, +0.0346230188679, -0.1634301886792, -0.1886618867925, -0.1050035849057, -0.0972762264151, -0.0602809433962, +0.0353083018868, +0.0883224528302, +0.1019000000000, +0.0746586792453, -0.0028962264151, -0.0535266037736, -0.0531984905660, -0.0456554716981, -0.0065986792453, +0.0382794339623, +0.0257441509434, +0.0106811320755, +0.0023320754717, -0.0163298113208, -0.0001150943396, +0.0238324528302, +0.0151435849057, +0.0106350943396, -0.0045200000000, -0.0224850943396, -0.0252490566038, -0.0104220754717, +0.0157769811321, +0.0307249056604, +0.0190418867925, -0.0186560377358, -0.0411700000000, -0.0182530188679, +0.0223181132075, +0.0430183018868, +0.0362698113208, +0.0010364150943, -0.0170898113208, -0.0084067924528, +0.0088039622642, +0.0251281132075, +0.0365405660377, +0.0253871698113, -0.0071975471698, -0.0337247169811, -0.0364311320755, -0.0246501886792, +0.0083318867925, +0.0403466037736, +0.0369377358491, +0.0125179245283, -0.0131167924528, -0.0334254716981, -0.0265156603774, -0.0011918867925, +0.0154603773585, +0.0179707547170, +0.0134277358491, +0.0044913207547, +0.0026660377358, +0.0049692452830, +0.0030516981132, +0.0074450943396, +0.0240858490566, +0.0263315094340, +0.0106350943396, -0.0040939622642, -0.0194735849057, -0.0261760377358, -0.0106811320755, +0.0057118867925, +0.0090862264151, +0.0086658490566, +0.0080728301887, +0.0015833962264, -0.0133241509434, -0.0236079245283, -0.0144469811321, +0.0055679245283, +0.0180226415094, +0.0169458490566, +0.0124430188679, +0.0145447169811, +0.0171647169811, +0.0096332075472, -0.0062013207547, -0.0143316981132, -0.0084124528302, +0.0010883018868, +0.0097311320755, +0.0186675471698, +0.0175966037736, +0.0010364150943, -0.0192260377358, -0.0258592452830, -0.0158805660377, -0.0031439622642, +0.0029366037736, +0.0032130188679, +0.0014739622642, +0.0000805660377, -0.0000864150943, +0.0035066037736, +0.0091841509434, +0.0091092452830, +0.0035815094340, -0.0011862264151, -0.0036390566038, -0.0035009433962, -0.0012264150943, +0.0026315094340, +0.0059422641509, +0.0035469811321, -0.0040709433962, -0.0078884905660, -0.0055796226415, -0.0055564150943, -0.0102090566038, -0.0132492452830, -0.0104796226415, -0.0024298113208, +0.0062935849057, +0.0110900000000, +0.0114815094340, +0.0079864150943, +0.0010133962264, -0.0070650943396, -0.0125639622642, -0.0127483018868, -0.0057696226415, +0.0039384905660, +0.0075315094340, +0.0040075471698, +0.0003166037736, -0.0011458490566, -0.0015258490566, -0.0009558490566, -0.0019116981132, -0.0037139622642, -0.0043300000000, -0.0059941509434, -0.0079230188679, -0.0079058490566, -0.0068692452830, -0.0040824528302, -0.0007658490566, +0.0014913207547, +0.0017964150943, -0.0001784905660, -0.0029481132075, -0.0048598113208, -0.0052224528302, -0.0040133962264, -0.0023722641509, +0.0000749056604, +0.0019922641509, +0.0024126415094, +0.0021822641509, +0.0009962264151, -0.0019577358491, -0.0046639622642, -0.0052743396226, -0.0051418867925, -0.0055047169811, -0.0046467924528, -0.0021650943396, +0.0000230188679, +0.0017447169811, +0.0016411320755, -0.0012322641509, -0.0043013207547, -0.0043300000000, -0.0013532075472, +0.0017447169811, +0.0026775471698, +0.0023952830189, +0.0009558490566, -0.0016467924528, -0.0041113207547, -0.0052513207547, -0.0047388679245, -0.0028445283019, -0.0008694339623, +0.0005873584906, +0.0011747169811, +0.0006737735849, +0.0007139622642, +0.0005009433962, -0.0008233962264, -0.0012667924528, -0.0005009433962, -0.0012552830189, -0.0025967924528, -0.0023320754717, -0.0016813207547, -0.0017447169811, -0.0010998113208, +0.0008003773585, +0.0025450943396, +0.0027120754717, +0.0005413207547, -0.0021420754717, -0.0028100000000, -0.0017101886792, -0.0013069811321, -0.0015373584906, -0.0011169811321, -0.0007830188679, -0.0012092452830, -0.0005584905660, +0.0016352830189, +0.0032994339623, +0.0032360377358, +0.0017273584906, -0.0003684905660, -0.0020211320755, -0.0031611320755, -0.0029711320755, -0.0011632075472, +0.0007773584906, +0.0015662264151, +0.0017907547170, +0.0018022641509, +0.0008637735849, -0.0005873584906, -0.0004490566038, +0.0012437735849, +0.0016756603774, +0.0007428301887, +0.0005009433962, +0.0011977358491, +0.0021650943396, +0.0024816981132, +0.0021016981132, +0.0013877358491, +0.0004605660377, -0.0004088679245, -0.0009098113208, -0.0008867924528, -0.0000749056604, +0.0009903773585, +0.0008694339623, -0.0000633962264, -0.0004664150943, +0.0006505660377, +0.0020728301887, +0.0021881132075, +0.0015662264151, +0.0012552830189, +0.0019058490566, +0.0025852830189, +0.0018771698113, +0.0006505660377, -0.0001324528302, -0.0009500000000, -0.0010249056604, -0.0001554716981, +0.0003224528302, +0.0003109433962, +0.0006275471698, +0.0009788679245, +0.0009328301887, +0.0016583018868, +0.0023262264151, +0.0011918867925, -0.0000403773585, +0.0000749056604, +0.0006275471698, +0.0013588679245, +0.0019692452830, +0.0014798113208, -0.0000518867925, -0.0012033962264, -0.0012667924528, -0.0009903773585, -0.0006564150943, +0.0001324528302, +0.0011977358491, +0.0018943396226, +0.0014913207547, +0.0008233962264, +0.0010998113208, +0.0009788679245, +0.0004030188679, -0.0004894339623, -0.0011284905660, -0.0004375471698, +0.0008292452830, +0.0014222641509, +0.0009788679245, +0.0004605660377, +0.0007024528302, +0.0002649056604, -0.0011054716981, -0.0011688679245, -0.0000864150943, +0.0006622641509, +0.0002015094340, -0.0007024528302, -0.0000920754717, +0.0007945283019, +0.0004835849057, +0.0001611320755, +0.0004779245283, +0.0012783018868, +0.0013588679245, -0.0003628301887, -0.0012724528302, -0.0003800000000, +0.0007773584906, +0.0012379245283, +0.0007139622642, +0.0005067924528, +0.0011688679245, +0.0007715094340, -0.0006737735849, -0.0008233962264, +0.0004779245283, +0.0007715094340, -0.0009328301887, -0.0025105660377, -0.0030171698113, -0.0023320754717, -0.0009730188679, -0.0000864150943, +0.0010479245283, +0.0016007547170, +0.0002533962264, -0.0005930188679, -0.0007600000000, -0.0000403773585, +0.0014107547170, +0.0013877358491, +0.0003743396226, +0.0005354716981, +0.0008349056604, +0.0000000000000, -0.0007313207547, -0.0009673584906, -0.0018656603774, -0.0028790566038, -0.0018311320755, +0.0001784905660, +0.0005988679245, -0.0001324528302, -0.0004720754717, +0.0000173584906, +0.0005988679245, +0.0007830188679, +0.0007945283019, +0.0007658490566, -0.0004433962264, -0.0014913207547, -0.0004720754717, +0.0006218867925, +0.0006045283019, +0.0005413207547, +0.0004318867925, -0.0004835849057, -0.0010998113208, -0.0000633962264, +0.0007083018868, -0.0008579245283, -0.0019866037736, -0.0010422641509, -0.0001728301887, +0.0004260377358, +0.0007888679245, +0.0007543396226, +0.0002820754717, -0.0004835849057, -0.0004720754717, +0.0000345283019, +0.0004260377358, +0.0008924528302, +0.0010939622642, +0.0005758490566, -0.0006103773585, -0.0015662264151, -0.0007428301887, +0.0004433962264, +0.0004490566038, +0.0005298113208, +0.0009500000000, +0.0006045283019, +0.0003743396226, +0.0004433962264, +0.0003858490566, +0.0005354716981, +0.0003283018868, -0.0005528301887, -0.0007313207547, -0.0003628301887, -0.0005298113208, -0.0006852830189, -0.0001843396226, +0.0006218867925, +0.0006737735849, +0.0002303773585, +0.0006333962264, +0.0012494339623, +0.0005528301887, -0.0008175471698, -0.0015143396226, -0.0007428301887, +0.0002015094340, +0.0002590566038, +0.0007254716981, +0.0022686792453, +0.0026716981132, +0.0013069811321, +0.0004720754717, +0.0008983018868, +0.0008118867925, -0.0002879245283, -0.0013358490566, -0.0010998113208, -0.0001035849057, +0.0002188679245, +0.0003339622642, +0.0011343396226, +0.0013933962264, +0.0008694339623, +0.0007945283019, +0.0009039622642, +0.0005643396226, -0.0001035849057, -0.0004952830189, -0.0001324528302, +0.0009500000000, +0.0015833962264, +0.0011458490566, +0.0002245283019, -0.0002245283019, -0.0002533962264, +0.0001209433962, +0.0011977358491, +0.0016583018868, +0.0009443396226, +0.0006103773585, +0.0006103773585, +0.0001439622642, -0.0002418867925, -0.0001843396226, +0.0000920754717, +0.0005643396226, +0.0013358490566, +0.0016641509434, +0.0011169811321, +0.0003454716981, -0.0004664150943, -0.0009039622642, -0.0004605660377, +0.0002935849057, +0.0010018867925, +0.0016467924528, +0.0013588679245, +0.0007543396226, +0.0003915094340, -0.0004088679245, -0.0012264150943, -0.0011400000000, -0.0005758490566, +0.0003858490566, +0.0014567924528, +0.0018196226415, +0.0016698113208, +0.0009328301887, -0.0003858490566, -0.0013762264151, -0.0015488679245, -0.0011228301887, -0.0000288679245, +0.0015662264151, +0.0023837735849, +0.0014222641509, +0.0004835849057, +0.0005815094340, +0.0004318867925, -0.0002418867925, -0.0003224528302, +0.0004318867925, +0.0012092452830, +0.0013069811321, +0.0010537735849, +0.0008522641509, +0.0003166037736, -0.0006967924528, -0.0010709433962, -0.0004260377358, -0.0002764150943, -0.0008983018868, -0.0009443396226, +0.0001209433962, +0.0009903773585, +0.0009154716981, +0.0006564150943, +0.0006909433962, +0.0009788679245, +0.0011400000000, +0.0009500000000, +0.0006794339623, -0.0000575471698, -0.0014222641509, -0.0018311320755, -0.0007313207547, +0.0003800000000, +0.0005183018868, +0.0004203773585, +0.0009384905660, +0.0012724528302, +0.0008522641509, +0.0007024528302, +0.0007773584906, -0.0000115094340, -0.0012898113208, -0.0014913207547, -0.0004549056604, +0.0004318867925, +0.0003858490566, -0.0001381132075, -0.0003398113208, -0.0000575471698, +0.0002649056604, +0.0006160377358, +0.0006794339623, +0.0001439622642, -0.0005067924528, -0.0009788679245, -0.0012898113208, -0.0013069811321, -0.0009673584906, -0.0001381132075, +0.0004835849057, +0.0001094339623, -0.0005354716981, -0.0007600000000, -0.0003224528302, +0.0004720754717, +0.0008983018868, +0.0010709433962, +0.0010594339623, -0.0000575471698, -0.0017503773585, -0.0023205660377, -0.0018137735849, -0.0009213207547, +0.0000920754717, +0.0008407547170, +0.0007945283019, +0.0000749056604, -0.0008407547170, -0.0010018867925, -0.0004375471698, -0.0001209433962, -0.0000230188679, +0.0000115094340, -0.0004894339623, -0.0009384905660, -0.0009788679245, -0.0005815094340, +0.0001554716981, +0.0004549056604, +0.0000000000000, -0.0005124528302, -0.0008233962264, -0.0011862264151, -0.0013703773585, -0.0009154716981, -0.0001209433962, +0.0004145283019, +0.0000230188679, -0.0012322641509, -0.0016179245283, -0.0010192452830, -0.0008292452830, -0.0003858490566, +0.0007484905660, +0.0015028301887, +0.0012724528302, +0.0000000000000, -0.0012839622642, -0.0016411320755, -0.0014971698113, -0.0011169811321, -0.0007830188679, -0.0006045283019, -0.0002705660377, +0.0000690566038, +0.0002303773585, +0.0001669811321, -0.0002360377358, -0.0007484905660, -0.0007945283019, -0.0003166037736, -0.0001209433962, -0.0005815094340, -0.0008694339623, -0.0006333962264, -0.0004088679245, -0.0004720754717, -0.0004203773585, -0.0002879245283, -0.0002418867925, -0.0000460377358, +0.0000288679245, -0.0002188679245, -0.0005988679245, -0.0008579245283, -0.0008118867925, -0.0005584905660, -0.0002994339623, -0.0001324528302, -0.0001784905660, -0.0003109433962, -0.0004894339623, -0.0006909433962, -0.0007024528302, -0.0008522641509, -0.0010824528302, -0.0007198113208, +0.0001324528302, +0.0009730188679, +0.0014164150943, +0.0013128301887, +0.0008752830189, +0.0000058490566, -0.0009213207547, -0.0012379245283, -0.0010939622642, -0.0009328301887, -0.0008809433962, -0.0007369811321, -0.0002418867925, +0.0002475471698, +0.0002820754717, +0.0002590566038, +0.0004952830189, +0.0004779245283, -0.0001843396226, -0.0007484905660, -0.0005124528302, +0.0000115094340, -0.0001669811321, -0.0006160377358, -0.0005067924528, +0.0000173584906, +0.0004664150943, +0.0005009433962, +0.0003454716981, +0.0004145283019, +0.0002533962264, -0.0005354716981, -0.0008924528302, -0.0003224528302, +0.0002879245283, +0.0004894339623, +0.0006967924528, +0.0007484905660, +0.0002015094340, -0.0005873584906, -0.0007198113208, -0.0002073584906, +0.0000000000000, -0.0001669811321, +0.0000115094340, +0.0006160377358, +0.0008809433962, +0.0006794339623, +0.0007543396226, +0.0008407547170, +0.0004433962264, -0.0002533962264, -0.0006275471698, -0.0005009433962, -0.0001381132075, -0.0001150943396, -0.0002073584906, -0.0001035849057, -0.0000749056604, -0.0003628301887, -0.0003973584906, +0.0001784905660, +0.0007600000000, +0.0010594339623, +0.0012149056604, +0.0011573584906, +0.0007254716981, -0.0001035849057, -0.0008233962264, -0.0009098113208, -0.0004549056604, -0.0001094339623, -0.0000173584906, +0.0001784905660, +0.0003684905660, +0.0003050943396, +0.0002935849057, +0.0003684905660, +0.0002303773585, -0.0002245283019, -0.0004835849057, -0.0002533962264, -0.0001094339623, -0.0000460377358, +0.0001900000000, +0.0003569811321, +0.0002705660377, +0.0001611320755, +0.0000173584906, -0.0002188679245, -0.0003743396226, -0.0003743396226, -0.0002188679245, -0.0000173584906, -0.0000805660377, -0.0003166037736, -0.0002649056604, +0.0001324528302, +0.0005930188679, +0.0007313207547, +0.0004664150943, +0.0005528301887, +0.0009098113208, +0.0006967924528, -0.0000058490566, -0.0007254716981, -0.0011400000000, -0.0010018867925, -0.0006333962264, -0.0002935849057, +0.0000345283019, +0.0002015094340, +0.0002994339623, +0.0006333962264, +0.0009962264151, +0.0011054716981, +0.0012379245283, +0.0012552830189, +0.0003628301887, -0.0006449056604, -0.0009039622642, -0.0009384905660, -0.0011054716981, -0.0009673584906, -0.0001496226415, +0.0007830188679, +0.0011573584906, +0.0011688679245, +0.0009098113208, +0.0002649056604, -0.0003858490566, -0.0007139622642, -0.0005413207547, +0.0000115094340, +0.0004952830189, +0.0004952830189, +0.0003109433962, +0.0003224528302, +0.0002245283019, -0.0002188679245, -0.0005873584906, -0.0003454716981, +0.0003800000000, +0.0007254716981, +0.0004952830189, +0.0002879245283, +0.0001843396226, +0.0001554716981, +0.0001728301887, +0.0001094339623, -0.0001611320755, -0.0003454716981, -0.0001784905660, +0.0000805660377, +0.0000920754717, -0.0001209433962, -0.0003050943396, -0.0002188679245, -0.0002764150943, -0.0004318867925, -0.0001554716981, +0.0003743396226, +0.0004952830189, -0.0000460377358, -0.0007024528302, -0.0006564150943, -0.0001958490566, +0.0000345283019, +0.0001958490566, +0.0005124528302, +0.0005584905660, +0.0000288679245, -0.0006909433962, -0.0008637735849, -0.0004605660377, +0.0000403773585, +0.0001843396226, +0.0001611320755, +0.0002705660377, +0.0000749056604, -0.0006564150943, -0.0008637735849, -0.0000633962264, +0.0005584905660, +0.0003109433962, -0.0001784905660, -0.0003858490566, -0.0003743396226, -0.0004433962264, -0.0005758490566, -0.0003858490566, +0.0001669811321, +0.0002533962264, +0.0000230188679, +0.0002130188679, +0.0001496226415, -0.0002879245283, -0.0000805660377, +0.0004664150943, +0.0004720754717, +0.0001324528302, -0.0002360377358, -0.0005239622642, -0.0005988679245, -0.0003283018868, +0.0001150943396, +0.0003973584906, +0.0004549056604, +0.0006045283019, +0.0007369811321, +0.0005469811321, +0.0002820754717, -0.0000288679245, -0.0003224528302, -0.0002820754717, +0.0000749056604, +0.0003224528302, +0.0004145283019, +0.0002820754717, +0.0001150943396, +0.0000058490566, -0.0001784905660, -0.0003858490566, -0.0002245283019, +0.0001324528302, +0.0003684905660, +0.0005413207547, +0.0007024528302, +0.0004203773585, -0.0002360377358, -0.0005413207547, -0.0002475471698, +0.0003050943396, +0.0006967924528, +0.0007313207547, +0.0003973584906, -0.0001900000000, -0.0006218867925, -0.0006045283019, -0.0002820754717, +0.0002590566038, +0.0005528301887, +0.0002879245283, -0.0000058490566, -0.0000575471698, -0.0000864150943, +0.0000230188679, +0.0002475471698, +0.0003283018868, +0.0002994339623, +0.0001324528302, -0.0002015094340, -0.0003339622642, -0.0001611320755, -0.0000403773585, +0.0000518867925, +0.0000690566038, -0.0001439622642, -0.0002418867925, -0.0002245283019, -0.0002533962264, -0.0001094339623, +0.0001209433962, +0.0004375471698, +0.0007139622642, +0.0003513207547, -0.0002533962264, -0.0003628301887, -0.0001728301887, +0.0000000000000, +0.0003454716981, +0.0004835849057, +0.0001958490566, -0.0001611320755, -0.0002245283019, -0.0000633962264, -0.0000345283019, -0.0001496226415, +0.0000403773585, +0.0003684905660, +0.0004433962264, +0.0003569811321, +0.0002649056604, +0.0001324528302, -0.0000864150943, -0.0002418867925, -0.0002649056604, -0.0002360377358, +0.0001266037736, +0.0005469811321, +0.0004260377358, +0.0000000000000, -0.0005124528302, -0.0008983018868, -0.0005815094340, +0.0000000000000, +0.0001843396226, +0.0001209433962, +0.0003224528302, +0.0006160377358, +0.0004203773585, -0.0001266037736, -0.0002590566038, -0.0002188679245, -0.0003915094340, -0.0003398113208, +0.0002705660377, +0.0007830188679, +0.0005528301887, -0.0003283018868, -0.0008983018868, -0.0007600000000, -0.0003050943396, +0.0000749056604, +0.0004720754717, +0.0007369811321, +0.0005584905660, -0.0001554716981, -0.0005815094340, -0.0002764150943, +0.0001439622642, +0.0002994339623, +0.0001958490566, -0.0000920754717, -0.0003109433962, -0.0004952830189, -0.0006679245283, -0.0002705660377, +0.0005700000000, +0.0012322641509, +0.0014624528302, +0.0006679245283, -0.0007715094340, -0.0014164150943, -0.0010077358491, -0.0003224528302, +0.0005584905660, +0.0013416981132, +0.0013358490566, +0.0004894339623, -0.0004835849057, -0.0010594339623, -0.0010307547170, -0.0004720754717, -0.0000575471698, +0.0000690566038, +0.0006333962264, +0.0011862264151, +0.0009788679245, +0.0003973584906, -0.0000690566038, -0.0004318867925, -0.0004664150943, -0.0003454716981, -0.0000115094340, +0.0007139622642, +0.0010767924528, +0.0004145283019, -0.0005815094340, -0.0011458490566, -0.0010594339623, -0.0007313207547, -0.0003628301887, +0.0002303773585, +0.0007600000000, +0.0008694339623, +0.0005413207547, +0.0001900000000, +0.0000230188679, -0.0002935849057, -0.0006045283019, -0.0002130188679, +0.0004203773585, +0.0005009433962, +0.0000979245283, -0.0000575471698, +0.0004203773585, +0.0006852830189, +0.0000288679245, -0.0005067924528, -0.0002820754717, -0.0000230188679, +0.0000173584906, +0.0000288679245, +0.0001496226415, +0.0001381132075, -0.0002590566038, -0.0004894339623, -0.0001958490566, +0.0002418867925, +0.0004952830189, +0.0003569811321, -0.0000575471698, -0.0001496226415, +0.0001266037736, +0.0001958490566, -0.0000749056604, -0.0001843396226, +0.0000000000000, +0.0001150943396, -0.0002705660377, -0.0005873584906, -0.0000345283019, +0.0006679245283, +0.0003569811321, -0.0001728301887, -0.0001035849057, +0.0002130188679, +0.0000518867925, -0.0002188679245, +0.0000575471698, +0.0006333962264, +0.0005700000000, +0.0000058490566, -0.0003398113208, -0.0003398113208, -0.0002418867925, -0.0002015094340, +0.0001209433962, +0.0007888679245, +0.0011343396226, +0.0009039622642, +0.0004549056604, -0.0004720754717, -0.0015028301887, -0.0014452830189, -0.0003398113208, +0.0005183018868, +0.0004952830189, -0.0000979245283, -0.0005413207547, -0.0000690566038, +0.0009328301887, +0.0011458490566, +0.0004088679245, -0.0002360377358, -0.0008233962264, -0.0013703773585, -0.0013877358491, -0.0011803773585, -0.0006794339623, +0.0003800000000, +0.0013933962264, +0.0016698113208, +0.0012667924528, +0.0003800000000, -0.0006794339623, -0.0012494339623, -0.0011632075472, -0.0010479245283, -0.0008118867925, -0.0001728301887, +0.0003050943396, +0.0005584905660, +0.0007369811321, +0.0005930188679, -0.0000920754717, -0.0009328301887, -0.0012207547170, -0.0008060377358, -0.0000979245283, +0.0006218867925, +0.0012494339623, +0.0013473584906, +0.0001784905660, -0.0015258490566, -0.0019866037736, -0.0012322641509, -0.0005815094340, -0.0002360377358, +0.0001728301887, +0.0007139622642, +0.0007658490566, +0.0003915094340, +0.0000805660377, -0.0003569811321, -0.0010709433962, -0.0012839622642, -0.0004203773585, +0.0008579245283, +0.0012092452830, +0.0006218867925, +0.0002130188679, -0.0001784905660, -0.0008407547170, -0.0009269811321, -0.0003454716981, -0.0000518867925, -0.0002188679245, -0.0002533962264, +0.0001669811321, +0.0005700000000, +0.0002418867925, -0.0000920754717, +0.0002649056604, +0.0005413207547, +0.0002360377358, +0.0000460377358, +0.0000288679245, -0.0003973584906, -0.0011169811321, -0.0015603773585, -0.0009558490566, +0.0002820754717, +0.0007773584906, +0.0003454716981, +0.0002820754717, +0.0006449056604, +0.0003339622642, -0.0004779245283, -0.0007600000000, -0.0007254716981, -0.0009098113208, -0.0006794339623, +0.0002303773585, +0.0009384905660, +0.0011458490566, +0.0014452830189, +0.0013473584906, +0.0005354716981, -0.0003743396226, -0.0015373584906, -0.0024298113208, -0.0020383018868, -0.0008118867925, +0.0004835849057, +0.0015086792453, +0.0018598113208, +0.0015086792453, +0.0006333962264, -0.0002418867925, -0.0003628301887, +0.0001669811321, +0.0006564150943, +0.0008924528302, +0.0009154716981, +0.0003915094340, -0.0005584905660, -0.0012149056604, -0.0013069811321, -0.0011228301887, -0.0011228301887, -0.0009039622642, +0.0001381132075, +0.0014337735849, +0.0017733962264, +0.0013473584906, +0.0008003773585, +0.0001958490566, -0.0003513207547, -0.0000749056604, +0.0007484905660, +0.0011169811321, +0.0008003773585, -0.0002015094340, -0.0016986792453, -0.0027407547170, -0.0029654716981, -0.0021937735849, -0.0006160377358, +0.0008637735849, +0.0014798113208, +0.0013762264151, +0.0008867924528, +0.0004375471698, +0.0004145283019, +0.0007658490566, +0.0010824528302, +0.0013473584906, +0.0012264150943, +0.0002649056604, -0.0009847169811, -0.0017733962264, -0.0019577358491, -0.0016813207547, -0.0008809433962, +0.0003109433962, +0.0009213207547, +0.0005298113208, +0.0000288679245, +0.0000230188679, +0.0002188679245, +0.0002475471698, +0.0001843396226, +0.0002015094340, +0.0003339622642, +0.0005298113208, +0.0005815094340, +0.0006909433962, +0.0005758490566, -0.0004664150943, -0.0016467924528, -0.0018137735849, -0.0012379245283, -0.0005183018868, +0.0004260377358, +0.0014164150943, +0.0019001886792, +0.0014279245283, +0.0002994339623, -0.0006737735849, -0.0008983018868, -0.0005067924528, -0.0001150943396, -0.0000403773585, +0.0000000000000, +0.0000805660377, +0.0000345283019, +0.0000805660377, +0.0001266037736, -0.0001324528302, +0.0001439622642, +0.0008867924528, +0.0008118867925, +0.0002935849057, +0.0006103773585, +0.0010133962264, +0.0005183018868, -0.0003858490566, -0.0006622641509, -0.0002820754717, +0.0000575471698, +0.0001900000000, +0.0004549056604, +0.0009098113208, +0.0011977358491, +0.0005873584906, -0.0007888679245, -0.0014107547170, -0.0004720754717, +0.0006390566038, +0.0009558490566, +0.0010537735849, +0.0012033962264, +0.0007198113208, -0.0003050943396, -0.0010767924528, -0.0009962264151, -0.0002475471698, +0.0005354716981, +0.0008924528302, +0.0006622641509, -0.0001324528302, -0.0010998113208, -0.0015432075472, -0.0010767924528, -0.0000805660377, +0.0008752830189, +0.0012033962264, +0.0006333962264, -0.0002073584906, -0.0006103773585, -0.0005183018868, +0.0000920754717, +0.0008809433962, +0.0011054716981, +0.0006449056604, -0.0001958490566, -0.0007198113208, -0.0004952830189, -0.0000749056604, +0.0001669811321, +0.0003050943396, +0.0004835849057, +0.0005873584906, +0.0001266037736, -0.0004145283019, -0.0002705660377, -0.0002245283019, -0.0006390566038, -0.0003858490566, +0.0004260377358, +0.0006737735849, +0.0004203773585, +0.0003050943396, +0.0002475471698, +0.0000115094340, -0.0001150943396, -0.0000518867925, -0.0001611320755, -0.0004549056604, -0.0005528301887, -0.0001611320755, +0.0002935849057, +0.0006679245283, +0.0011113207547, +0.0011054716981, +0.0002590566038, -0.0004088679245, -0.0003398113208, -0.0000920754717, -0.0000518867925, -0.0002188679245, -0.0005700000000, -0.0007369811321, -0.0004835849057, -0.0000288679245, +0.0003454716981, +0.0005873584906, +0.0006045283019, +0.0003858490566, +0.0000230188679, -0.0001381132075, -0.0001381132075, -0.0002245283019, -0.0003166037736, -0.0003628301887, -0.0003569811321, -0.0001554716981, -0.0001784905660, -0.0002245283019, +0.0001439622642, +0.0004433962264, +0.0002705660377, -0.0001900000000, -0.0006333962264, -0.0005930188679, -0.0004779245283, -0.0004894339623, -0.0000230188679, +0.0004664150943, +0.0000000000000, -0.0008579245283, -0.0010077358491, -0.0004952830189, +0.0000690566038, +0.0004664150943, +0.0005298113208, +0.0003166037736, +0.0000633962264, -0.0001035849057, -0.0001094339623, +0.0000345283019, +0.0000173584906, -0.0003858490566, -0.0007024528302, -0.0003166037736, +0.0001209433962, -0.0000058490566, -0.0002764150943, -0.0005239622642, -0.0006737735849, -0.0005930188679, -0.0002879245283, +0.0000345283019, +0.0003569811321, +0.0005643396226, +0.0004145283019, -0.0000864150943, -0.0002649056604, -0.0000345283019, -0.0000575471698, -0.0002303773585, -0.0000230188679, +0.0002820754717, +0.0002015094340, +0.0000288679245, -0.0000403773585, -0.0001900000000, -0.0005988679245, -0.0011054716981, -0.0009269811321, +0.0000805660377, +0.0008118867925, +0.0007600000000, +0.0005930188679, +0.0005124528302, +0.0002994339623, -0.0002130188679, -0.0005758490566, -0.0004549056604, -0.0000633962264, +0.0002879245283, +0.0007428301887, +0.0008407547170, +0.0003283018868, -0.0001958490566, -0.0004720754717, -0.0006160377358, -0.0002994339623, +0.0003513207547, +0.0009098113208, +0.0011284905660, +0.0006275471698, -0.0003915094340, -0.0010479245283, -0.0008694339623, -0.0004088679245, +0.0000000000000, +0.0006103773585, +0.0009213207547, +0.0006333962264, +0.0002360377358, -0.0001035849057, -0.0002879245283, -0.0001094339623, +0.0000518867925, +0.0000633962264, +0.0001784905660, +0.0002303773585, -0.0001266037736, -0.0005584905660, -0.0004260377358, -0.0000288679245, +0.0000633962264, +0.0000000000000, +0.0000518867925, +0.0002073584906, +0.0004145283019, +0.0005758490566, +0.0005930188679, +0.0007083018868, +0.0009615094340, +0.0006679245283, -0.0001611320755, -0.0006449056604, -0.0004490566038, -0.0001554716981, -0.0001439622642, -0.0002935849057, -0.0001150943396, +0.0003915094340, +0.0007715094340, +0.0007024528302, +0.0006333962264, +0.0005009433962, +0.0000000000000, -0.0004720754717, -0.0006275471698, -0.0005700000000, -0.0002590566038, +0.0000805660377, +0.0004260377358, +0.0003973584906, -0.0003684905660, -0.0009730188679, -0.0007254716981, -0.0002475471698, +0.0001094339623, +0.0004835849057, +0.0006679245283, +0.0003513207547, -0.0000749056604, -0.0001958490566, -0.0001035849057, -0.0001611320755, -0.0001669811321, +0.0000230188679, +0.0000115094340, -0.0003398113208, -0.0002303773585, +0.0002935849057, +0.0004664150943, +0.0002418867925, -0.0000575471698, -0.0002820754717, -0.0003513207547, -0.0003628301887, -0.0003398113208, -0.0003513207547, -0.0002245283019, +0.0000920754717, +0.0003454716981, +0.0004835849057, +0.0004720754717, +0.0000518867925, -0.0003743396226, -0.0004894339623, -0.0004720754717, -0.0004490566038, -0.0002360377358, +0.0001728301887, +0.0004952830189, +0.0002705660377, -0.0003973584906, -0.0006852830189, -0.0002764150943, +0.0002188679245, +0.0003109433962, -0.0001209433962, -0.0004952830189, -0.0003109433962, -0.0001150943396, -0.0001035849057, +0.0000749056604, +0.0002360377358, +0.0003973584906, +0.0006564150943, +0.0006852830189, +0.0004088679245, -0.0000920754717, -0.0006737735849, -0.0009558490566, -0.0006622641509, -0.0000690566038, +0.0003569811321, +0.0003339622642, -0.0000575471698, -0.0004260377358, -0.0002879245283, +0.0001324528302, +0.0001900000000, -0.0000920754717, -0.0001439622642, -0.0000173584906, -0.0000058490566, -0.0000403773585, +0.0001496226415, +0.0003569811321, +0.0002188679245, -0.0000460377358, -0.0002130188679, -0.0004145283019, -0.0004260377358, -0.0001843396226, +0.0000460377358, +0.0001496226415, +0.0002994339623, +0.0004894339623, +0.0004375471698, +0.0001958490566, +0.0003398113208, +0.0003800000000, -0.0001381132075, -0.0003858490566, -0.0000230188679, +0.0002649056604, +0.0002820754717, +0.0000690566038, +0.0000460377358, +0.0002764150943, +0.0000345283019, -0.0003973584906, -0.0002705660377, -0.0000173584906, -0.0000460377358, -0.0000288679245, +0.0001669811321, +0.0002820754717, +0.0002533962264, +0.0000979245283, -0.0000058490566, -0.0000288679245, -0.0000403773585, -0.0003800000000, -0.0009500000000, -0.0009730188679, -0.0003398113208, +0.0001209433962, +0.0001728301887, +0.0002015094340, +0.0003628301887, +0.0002705660377, -0.0002418867925, -0.0004605660377, -0.0001496226415, +0.0000518867925, +0.0000173584906, +0.0004145283019, +0.0009384905660, +0.0008349056604, +0.0001843396226, -0.0007313207547, -0.0013818867925, -0.0010998113208, -0.0005643396226, -0.0002073584906, +0.0004203773585, +0.0009903773585, +0.0006679245283, -0.0002935849057, -0.0008867924528, -0.0006909433962, -0.0001554716981, +0.0003973584906, +0.0007428301887, +0.0007658490566, +0.0004779245283, -0.0000460377358, -0.0004203773585, -0.0003800000000, -0.0003166037736, -0.0001728301887, +0.0000633962264, +0.0000979245283, +0.0000518867925, +0.0000288679245, -0.0002764150943, -0.0003915094340, -0.0001150943396, +0.0001900000000, +0.0004835849057, +0.0003800000000, -0.0002994339623, -0.0005067924528, -0.0000749056604, +0.0001439622642, +0.0000979245283, +0.0001381132075, -0.0000864150943, -0.0007083018868, -0.0009443396226, -0.0004779245283, +0.0002073584906, +0.0006218867925, +0.0004779245283, +0.0001784905660, +0.0001669811321, +0.0001958490566, +0.0000403773585, -0.0002015094340, -0.0003628301887, -0.0000345283019, +0.0003166037736, +0.0001035849057, -0.0002533962264, -0.0003109433962, -0.0003800000000, -0.0004375471698, -0.0001958490566, +0.0003454716981, +0.0008060377358, +0.0007888679245, +0.0003339622642, -0.0000979245283, -0.0002130188679, -0.0002303773585, -0.0004664150943, -0.0006103773585, -0.0000920754717, +0.0004835849057, +0.0003166037736, -0.0002360377358, -0.0001958490566, +0.0001900000000, +0.0000979245283, -0.0002935849057, -0.0002649056604, -0.0001035849057, -0.0001150943396, +0.0000000000000, +0.0003743396226, +0.0008175471698, +0.0010824528302, +0.0008060377358, +0.0002649056604, -0.0001094339623, -0.0004490566038, -0.0007600000000, -0.0004835849057, +0.0003050943396, +0.0007830188679, +0.0004605660377, -0.0001554716981, -0.0006160377358, -0.0007600000000, -0.0005298113208, -0.0000979245283, +0.0002879245283, +0.0005239622642, +0.0005354716981, +0.0006737735849, +0.0008809433962, +0.0007024528302, +0.0002188679245, -0.0001669811321, -0.0002303773585, -0.0001728301887, -0.0003513207547, -0.0003684905660, +0.0001381132075, +0.0006449056604, +0.0005298113208, +0.0000979245283, +0.0000345283019, +0.0002994339623, +0.0002820754717, -0.0000518867925, -0.0000403773585, +0.0004088679245, +0.0006218867925, +0.0004664150943, +0.0003858490566, +0.0002649056604, -0.0000058490566, -0.0002245283019, -0.0002994339623, -0.0003398113208, -0.0001784905660, +0.0002015094340, +0.0004490566038, +0.0003684905660, +0.0001843396226, -0.0000805660377, -0.0002245283019, -0.0000690566038, +0.0001439622642, +0.0002360377358, +0.0002935849057, +0.0001266037736, -0.0001324528302, -0.0002994339623, -0.0004720754717, -0.0006449056604, -0.0005124528302, -0.0002303773585, -0.0000345283019, +0.0002073584906, +0.0004490566038, +0.0003050943396, +0.0001439622642, +0.0000805660377, +0.0000345283019, +0.0000230188679, +0.0000058490566, -0.0000230188679, -0.0000690566038, -0.0003283018868, -0.0006390566038, -0.0005815094340, +0.0000173584906, +0.0005413207547, +0.0004490566038, +0.0001094339623, -0.0001439622642, -0.0003973584906, -0.0004375471698, -0.0002015094340, +0.0001669811321, +0.0005413207547, +0.0007083018868, +0.0004260377358, -0.0001094339623, -0.0005067924528, -0.0005815094340, -0.0004664150943, -0.0002705660377, -0.0000288679245, +0.0001728301887, +0.0003283018868, +0.0003569811321, +0.0001900000000, -0.0001381132075, -0.0003513207547, -0.0002764150943, -0.0001728301887, -0.0001958490566, +0.0000288679245, +0.0004375471698, +0.0005298113208, +0.0002705660377, +0.0000000000000, -0.0002820754717, -0.0004375471698, -0.0003109433962, -0.0000979245283, +0.0000690566038, +0.0002475471698, +0.0001150943396, -0.0001439622642, -0.0002475471698, -0.0002015094340, -0.0000920754717, -0.0001094339623, -0.0002994339623, -0.0003050943396, -0.0002590566038, -0.0004549056604, -0.0004605660377, +0.0000460377358, +0.0003800000000, +0.0002360377358, +0.0001554716981, +0.0001611320755, -0.0001150943396, -0.0004375471698, -0.0005183018868, -0.0001784905660, +0.0003454716981, +0.0005413207547, +0.0002590566038, -0.0000230188679, -0.0002475471698, -0.0004203773585, -0.0004260377358, -0.0004145283019, -0.0004549056604, -0.0002303773585, +0.0002015094340, +0.0004549056604, +0.0003283018868, +0.0000115094340, -0.0002188679245, -0.0003398113208, -0.0002879245283, +0.0000288679245, +0.0001611320755, -0.0000920754717, -0.0002994339623, -0.0003224528302, -0.0001266037736, +0.0002590566038, +0.0004088679245, +0.0002360377358, +0.0000460377358, -0.0000230188679, +0.0000288679245, -0.0000288679245, -0.0002820754717, -0.0002994339623, +0.0001900000000, +0.0005298113208, +0.0003224528302, -0.0000518867925, -0.0000173584906, +0.0001439622642, +0.0001150943396, -0.0000518867925, -0.0002245283019, -0.0002764150943, -0.0001035849057, -0.0001035849057, -0.0002073584906, +0.0001784905660, +0.0008060377358, +0.0008637735849, +0.0002188679245, -0.0005643396226, -0.0008233962264, -0.0006103773585, -0.0001496226415, +0.0003743396226, +0.0006852830189, +0.0005354716981, +0.0002705660377, +0.0000173584906, -0.0004030188679, -0.0007139622642, -0.0004779245283, +0.0000920754717, +0.0005298113208, +0.0006505660377, +0.0005183018868, +0.0002188679245, -0.0001150943396, -0.0002245283019, -0.0001554716981, -0.0002015094340, -0.0003166037736, -0.0002360377358, +0.0001266037736, +0.0004664150943, +0.0005239622642, +0.0004779245283, +0.0003398113208, -0.0000805660377, -0.0005413207547, -0.0006390566038, -0.0003513207547, +0.0001266037736, +0.0004835849057, +0.0005930188679, +0.0006333962264, +0.0005758490566, +0.0002360377358, -0.0001496226415, -0.0002245283019, +0.0000173584906, +0.0002360377358, +0.0003224528302, +0.0003166037736, +0.0002360377358, +0.0001094339623, +0.0001324528302, +0.0000864150943, +0.0001209433962, +0.0003569811321, +0.0003454716981, -0.0000058490566, -0.0000288679245, +0.0001209433962, +0.0001439622642, +0.0001611320755, +0.0002590566038, +0.0001900000000, +0.0000115094340, -0.0001496226415, -0.0001496226415, +0.0000288679245, +0.0002245283019, +0.0002015094340, +0.0000920754717, +0.0001381132075, +0.0002073584906, +0.0000749056604, -0.0000633962264, -0.0001094339623, -0.0000749056604, -0.0001324528302, -0.0002705660377, -0.0002303773585, -0.0000575471698, -0.0000979245283, -0.0000864150943, +0.0001266037736, +0.0002303773585, +0.0000518867925, -0.0002590566038, -0.0003743396226, -0.0000749056604, +0.0002649056604, +0.0002303773585, +0.0000864150943, +0.0000288679245, -0.0001784905660, -0.0004145283019, -0.0003166037736, +0.0000690566038, +0.0005469811321, +0.0007139622642, +0.0004490566038, -0.0000115094340, -0.0003050943396, -0.0004088679245, -0.0004664150943, -0.0003339622642, +0.0000575471698, +0.0001554716981, -0.0000345283019, -0.0000575471698, +0.0001094339623, +0.0000633962264, +0.0000058490566, +0.0001209433962, +0.0000230188679, -0.0003513207547, -0.0004203773585, -0.0002418867925, -0.0000518867925, +0.0001381132075, +0.0002303773585, +0.0001439622642, +0.0001669811321, +0.0001784905660, -0.0000115094340, -0.0002533962264, -0.0003339622642, -0.0004088679245, -0.0003513207547, -0.0000864150943, +0.0000288679245, -0.0001728301887, -0.0002705660377, -0.0001843396226, -0.0001554716981, -0.0002533962264, -0.0002764150943, -0.0000979245283, +0.0001554716981, +0.0003858490566, +0.0006045283019, +0.0004433962264, -0.0001439622642, -0.0005239622642, -0.0004433962264, -0.0004605660377, -0.0006333962264, -0.0004318867925, +0.0000288679245, +0.0002590566038, +0.0001381132075, -0.0000403773585, -0.0001094339623, -0.0001324528302, -0.0001266037736, -0.0000749056604, -0.0002590566038, -0.0004605660377, -0.0002994339623, +0.0001496226415, +0.0004835849057, +0.0003513207547, -0.0002073584906, -0.0005815094340, -0.0003858490566, +0.0001209433962, +0.0002994339623, +0.0000920754717, -0.0001035849057, -0.0000345283019, +0.0000058490566, -0.0000288679245, -0.0001669811321, -0.0003050943396, -0.0004260377358, -0.0003743396226, -0.0001439622642, +0.0001094339623, +0.0001381132075, +0.0000115094340, -0.0000864150943, -0.0000460377358, -0.0000173584906, -0.0000749056604, -0.0000518867925, +0.0001439622642, +0.0001611320755, -0.0001150943396, -0.0002994339623, -0.0001150943396, +0.0000805660377, +0.0001324528302, +0.0001209433962, +0.0000805660377, +0.0001209433962, +0.0001439622642, +0.0000000000000, -0.0002533962264, -0.0005183018868, -0.0006564150943, -0.0003800000000, +0.0001784905660, +0.0006218867925, +0.0007198113208, +0.0005354716981, +0.0000920754717, -0.0003858490566, -0.0005643396226, -0.0004318867925, -0.0002649056604, -0.0000058490566, +0.0002935849057, +0.0004260377358, +0.0001784905660, -0.0001900000000, -0.0003684905660, -0.0003800000000, -0.0004490566038, -0.0003569811321, -0.0001035849057, +0.0000805660377, +0.0002475471698, +0.0004605660377, +0.0003915094340, +0.0000115094340, -0.0004894339623, -0.0007083018868, -0.0004433962264, -0.0000173584906, +0.0003166037736, +0.0005873584906, +0.0005643396226, +0.0002303773585, -0.0002073584906, -0.0005413207547, -0.0005354716981, -0.0001958490566, -0.0000173584906, -0.0001496226415, -0.0001439622642, +0.0000115094340, +0.0000518867925, +0.0002820754717, +0.0005239622642, +0.0002590566038, -0.0002705660377, -0.0006737735849, -0.0008579245283, -0.0006390566038, -0.0000403773585, +0.0005988679245, +0.0009154716981, +0.0007313207547, +0.0002130188679, -0.0001958490566, -0.0002130188679, -0.0000633962264, +0.0002015094340, +0.0006160377358, +0.0008579245283, +0.0005815094340, +0.0000460377358, -0.0003569811321, -0.0004490566038, -0.0003454716981, -0.0000460377358, +0.0003743396226, +0.0005873584906, +0.0003398113208, +0.0000288679245, +0.0000805660377, +0.0004088679245, +0.0006103773585, +0.0006103773585, +0.0002994339623, -0.0002015094340, -0.0005700000000, -0.0005469811321, -0.0002073584906, +0.0002649056604, +0.0006333962264, +0.0008407547170, +0.0007600000000, +0.0002879245283, -0.0003339622642, -0.0006909433962, -0.0006045283019, -0.0001209433962, +0.0004490566038, +0.0007313207547, +0.0004952830189, -0.0000575471698, -0.0004145283019, -0.0002764150943, +0.0001611320755, +0.0005469811321, +0.0007484905660, +0.0006622641509, +0.0001900000000, -0.0003454716981, -0.0004952830189, -0.0001669811321, +0.0002820754717, +0.0002820754717, -0.0001669811321, -0.0003973584906, -0.0001669811321, -0.0000230188679, -0.0001094339623, +0.0000230188679, +0.0004779245283, +0.0007254716981, +0.0006218867925, +0.0003224528302, +0.0000058490566, -0.0002130188679, -0.0003050943396, -0.0003050943396, +0.0000000000000, +0.0003743396226, +0.0004203773585, +0.0001094339623, -0.0001843396226, -0.0003513207547, -0.0004260377358, -0.0004664150943, -0.0003283018868, +0.0000518867925, +0.0005584905660, +0.0008292452830, +0.0006103773585, +0.0001209433962, -0.0002649056604, -0.0006045283019, -0.0007600000000, -0.0005067924528, +0.0000288679245, +0.0003973584906, +0.0003628301887, +0.0001900000000, +0.0001843396226, +0.0003166037736, +0.0004894339623, +0.0006505660377, +0.0006160377358, +0.0003569811321, +0.0001035849057, +0.0000518867925, +0.0000173584906, -0.0003915094340, -0.0010652830189, -0.0011054716981, -0.0002303773585, +0.0006679245283, +0.0007428301887, +0.0003283018868, +0.0002533962264, +0.0005009433962, +0.0003858490566, +0.0000633962264, +0.0000345283019, -0.0000230188679, -0.0006218867925, -0.0011113207547, -0.0009443396226, -0.0004490566038, -0.0001209433962, -0.0001324528302, -0.0004779245283, -0.0007600000000, -0.0006275471698, -0.0000518867925, +0.0004894339623, +0.0006505660377, +0.0005009433962, +0.0001784905660, -0.0003569811321, -0.0007254716981, -0.0005413207547, +0.0001150943396, +0.0006045283019, +0.0005413207547, +0.0001496226415, -0.0001611320755, -0.0002879245283, -0.0002245283019, -0.0001324528302, -0.0001150943396, -0.0001554716981, -0.0002360377358, -0.0003513207547, -0.0002590566038, +0.0001728301887, +0.0005413207547, +0.0005528301887, +0.0001958490566, -0.0003339622642, -0.0007313207547, -0.0008175471698, -0.0007543396226, -0.0006275471698, -0.0003283018868, +0.0003398113208, +0.0008292452830, +0.0005528301887, -0.0001035849057, -0.0005758490566, -0.0005584905660, -0.0000805660377, +0.0002820754717, +0.0003973584906, +0.0003454716981, +0.0000403773585, -0.0004088679245, -0.0006564150943, -0.0004835849057, +0.0001035849057, +0.0007715094340, +0.0010998113208, +0.0008522641509, +0.0002590566038, -0.0003858490566, -0.0009213207547, -0.0012149056604, -0.0011113207547, -0.0006852830189, -0.0000749056604, +0.0005183018868, +0.0009903773585, +0.0010537735849, +0.0005815094340, -0.0001611320755, -0.0006333962264, -0.0008003773585, -0.0007543396226, -0.0004203773585, +0.0000345283019, +0.0003166037736, +0.0003339622642, +0.0002475471698, +0.0001439622642, +0.0000518867925, -0.0000403773585, -0.0001496226415, -0.0002245283019, -0.0000690566038, +0.0000633962264, -0.0000173584906, +0.0000115094340, +0.0003050943396, +0.0003166037736, +0.0001324528302, +0.0001843396226, +0.0003628301887, +0.0004433962264, +0.0004490566038, +0.0001439622642, -0.0004318867925, -0.0010364150943, -0.0012207547170, -0.0007024528302, +0.0001784905660, +0.0007945283019, +0.0012149056604, +0.0014107547170, +0.0008983018868, -0.0002073584906, -0.0010652830189, -0.0011977358491, -0.0008579245283, -0.0005239622642, -0.0001900000000, +0.0003166037736, +0.0007830188679, +0.0008233962264, +0.0004720754717, +0.0000000000000, -0.0002764150943, -0.0002590566038, -0.0001266037736, -0.0000749056604, +0.0000575471698, +0.0003628301887, +0.0005584905660, +0.0005584905660, +0.0003684905660, +0.0000115094340, -0.0003569811321, -0.0005469811321, -0.0004664150943, -0.0000920754717, +0.0003858490566, +0.0007484905660, +0.0007428301887, +0.0004779245283, +0.0001496226415, -0.0002130188679, -0.0005183018868, -0.0004375471698, +0.0000518867925, +0.0005239622642, +0.0005643396226, +0.0005067924528, +0.0006160377358, +0.0005067924528, +0.0000000000000, -0.0003973584906, -0.0005183018868, -0.0005815094340, -0.0005124528302, +0.0000288679245, +0.0006218867925, +0.0007658490566, +0.0004433962264, +0.0000633962264, -0.0001324528302, -0.0003050943396, -0.0005354716981, -0.0004318867925, +0.0000173584906, +0.0004203773585, +0.0004952830189, +0.0003224528302, +0.0002015094340, +0.0000633962264, -0.0001324528302, -0.0001094339623, +0.0000058490566, -0.0000403773585, -0.0000403773585, +0.0001439622642, +0.0003166037736, +0.0002764150943, +0.0002130188679, +0.0001784905660, +0.0000920754717, -0.0000864150943, -0.0002879245283, -0.0004030188679, -0.0002533962264, +0.0000000000000, +0.0004030188679, +0.0007830188679, +0.0008060377358, +0.0004835849057, +0.0000633962264, -0.0003800000000, -0.0007198113208, -0.0008407547170, -0.0007369811321, -0.0005354716981, -0.0001094339623, +0.0003743396226, +0.0005469811321, +0.0004664150943, +0.0004835849057, +0.0004145283019, +0.0000805660377, -0.0003915094340, -0.0006275471698, -0.0005354716981, -0.0002015094340, +0.0001266037736, +0.0001843396226, +0.0000173584906, -0.0001150943396, -0.0002705660377, -0.0003398113208, -0.0000345283019, +0.0003628301887, +0.0003339622642, -0.0000690566038, -0.0003339622642, -0.0002360377358, -0.0000230188679, +0.0000633962264, +0.0000864150943, +0.0000690566038, +0.0001266037736, +0.0003166037736, +0.0004203773585, +0.0001728301887, -0.0002475471698, -0.0006160377358, -0.0006794339623, -0.0005298113208, -0.0002879245283, -0.0000920754717, +0.0001150943396, +0.0003513207547, +0.0004894339623, +0.0004030188679, +0.0003743396226, +0.0003628301887, +0.0000403773585, -0.0004835849057, -0.0005528301887, -0.0001958490566, +0.0000345283019, -0.0000633962264, -0.0001150943396, -0.0000403773585, -0.0000575471698, -0.0001094339623, +0.0000460377358, +0.0002015094340, +0.0000575471698, -0.0001266037736, -0.0000920754717, -0.0000345283019, -0.0000864150943, -0.0002130188679, -0.0002935849057, -0.0002130188679, -0.0000518867925, +0.0000920754717, +0.0002590566038, +0.0002705660377, -0.0001035849057, -0.0005239622642, -0.0005067924528, -0.0001843396226, +0.0000690566038, +0.0003109433962, +0.0004260377358, +0.0003109433962, -0.0000460377358, -0.0003569811321, -0.0003973584906, -0.0002073584906, -0.0000518867925, +0.0000403773585, +0.0000805660377, +0.0001035849057, -0.0000345283019, -0.0002705660377, -0.0004720754717, -0.0005124528302, -0.0002994339623, +0.0000920754717, +0.0001496226415, +0.0000000000000, +0.0000805660377, +0.0002935849057, +0.0002188679245, +0.0001209433962, +0.0002130188679, +0.0002705660377, +0.0000403773585, -0.0003569811321, -0.0005988679245, -0.0002705660377, +0.0003628301887, +0.0006449056604, +0.0003224528302, -0.0001900000000, -0.0004894339623, -0.0005413207547, -0.0003973584906, +0.0000173584906, +0.0005469811321, +0.0006390566038, +0.0002303773585, -0.0001381132075, -0.0001728301887, -0.0000575471698, +0.0000460377358, +0.0000403773585, +0.0000000000000, +0.0000518867925, +0.0001035849057, -0.0000173584906, -0.0000920754717, +0.0000288679245, +0.0002705660377, +0.0004145283019, +0.0004664150943, +0.0003224528302, +0.0000460377358, -0.0003283018868, -0.0005988679245, -0.0005873584906, -0.0003224528302, +0.0000000000000, +0.0003684905660, +0.0005067924528, +0.0003050943396, +0.0000403773585, -0.0000518867925, -0.0000575471698, -0.0000345283019, -0.0001209433962, -0.0002245283019, -0.0001900000000, +0.0000173584906, +0.0002475471698, +0.0003569811321, +0.0002994339623, +0.0000749056604, -0.0001554716981, -0.0002533962264, -0.0002303773585, -0.0001150943396, +0.0000058490566, -0.0000115094340, -0.0000230188679, +0.0000805660377, +0.0001611320755, +0.0000749056604, -0.0001209433962, -0.0003166037736, -0.0002130188679, +0.0000690566038, +0.0002073584906, +0.0002188679245, +0.0002649056604, +0.0000460377358, -0.0002705660377, -0.0003915094340, -0.0003050943396, -0.0002188679245, -0.0001035849057, -0.0000345283019, -0.0000058490566, +0.0000230188679, +0.0001669811321, +0.0003109433962, +0.0003398113208, +0.0002188679245, +0.0000805660377, -0.0000690566038, -0.0003628301887, -0.0006218867925, -0.0005298113208, -0.0002073584906, +0.0001496226415, +0.0004952830189, +0.0006333962264, +0.0004318867925, -0.0000403773585, -0.0005528301887, -0.0007369811321, -0.0004260377358, +0.0000345283019, +0.0002879245283, +0.0004030188679, +0.0005009433962, +0.0003915094340, +0.0001209433962, -0.0001035849057, -0.0003224528302, -0.0005873584906, -0.0005758490566, -0.0002705660377, +0.0001669811321, +0.0005009433962, +0.0005584905660, +0.0003166037736, +0.0000805660377, -0.0000749056604, -0.0002015094340, -0.0002935849057, -0.0001611320755, +0.0001035849057, +0.0002533962264, +0.0001784905660, +0.0002188679245, +0.0004318867925, +0.0005067924528, +0.0003109433962, +0.0000575471698, -0.0002245283019, -0.0003973584906, -0.0002360377358, +0.0001381132075, +0.0003513207547, +0.0002533962264, -0.0000230188679, -0.0002705660377, -0.0003684905660, -0.0002475471698, +0.0000749056604, +0.0003283018868, +0.0002764150943, +0.0000173584906, -0.0001554716981, -0.0000864150943, +0.0001554716981, +0.0002764150943, +0.0002303773585, +0.0002073584906, +0.0002245283019, +0.0000518867925, -0.0002245283019, -0.0002879245283, +0.0000230188679, +0.0003398113208, +0.0003743396226, +0.0002073584906, +0.0001035849057, +0.0000000000000, -0.0001209433962, -0.0001728301887, +0.0000230188679, +0.0003166037736, +0.0004030188679, +0.0001439622642, -0.0001900000000, -0.0003454716981, -0.0003283018868, -0.0002418867925, -0.0001150943396, +0.0000690566038, +0.0002879245283, +0.0003858490566, +0.0002879245283, +0.0000518867925, -0.0001266037736, -0.0001324528302, -0.0000345283019, +0.0000864150943, +0.0001496226415, +0.0000115094340, -0.0002705660377, -0.0004549056604, -0.0003973584906, -0.0001150943396, +0.0001669811321, +0.0003224528302, +0.0003339622642, +0.0002015094340, -0.0000230188679, -0.0000979245283, -0.0000460377358, +0.0000173584906, +0.0000288679245, -0.0000403773585, -0.0001900000000, -0.0002303773585, -0.0001094339623, +0.0001381132075, +0.0002705660377, +0.0001266037736, -0.0001843396226, -0.0002015094340, +0.0000864150943, +0.0003800000000, +0.0004894339623, +0.0003858490566, +0.0001094339623, -0.0000979245283, -0.0001669811321, -0.0001554716981, -0.0001094339623, +0.0000115094340, +0.0001496226415, +0.0001150943396, -0.0001150943396, -0.0002820754717, -0.0002073584906, +0.0000058490566, +0.0001266037736, +0.0000230188679, -0.0000805660377, +0.0000288679245, +0.0002418867925, +0.0001900000000, -0.0000460377358, -0.0001958490566, -0.0001035849057, +0.0000058490566, -0.0000690566038, -0.0002764150943, -0.0003224528302, -0.0002073584906, -0.0000403773585, +0.0000000000000, -0.0000173584906, +0.0000575471698, +0.0001728301887, +0.0000805660377, -0.0000575471698, -0.0000979245283, -0.0001266037736, -0.0001958490566, -0.0001381132075, +0.0000000000000, +0.0000460377358, -0.0000749056604, -0.0002245283019, -0.0002475471698, -0.0001554716981, -0.0000749056604, -0.0000115094340, -0.0000230188679, -0.0000575471698, -0.0000403773585, +0.0000345283019, +0.0002073584906, +0.0003224528302, +0.0001209433962, -0.0001381132075, -0.0001035849057, -0.0000460377358, -0.0000979245283, -0.0000690566038, -0.0000115094340, -0.0000575471698, -0.0000749056604, -0.0001035849057, -0.0000979245283, -0.0000058490566, +0.0002130188679, +0.0003628301887, +0.0002705660377, +0.0000403773585, -0.0000173584906, -0.0000460377358, -0.0001554716981, -0.0002073584906, -0.0000173584906, +0.0002245283019, +0.0002879245283, +0.0000864150943, -0.0002015094340, -0.0004088679245, -0.0004318867925, -0.0002418867925, +0.0001150943396, +0.0004088679245, +0.0004720754717, +0.0002188679245, -0.0001843396226, -0.0004779245283, -0.0005239622642, -0.0002418867925, +0.0001900000000, +0.0003684905660, +0.0001843396226, -0.0001324528302, -0.0003454716981, -0.0002764150943, -0.0000749056604, +0.0000805660377, +0.0000518867925, -0.0000920754717, -0.0002015094340, -0.0000979245283, +0.0001611320755, +0.0004260377358, +0.0004088679245, +0.0001324528302, -0.0001381132075, -0.0001611320755, -0.0000749056604, +0.0000345283019, +0.0001150943396, +0.0001611320755, +0.0000230188679, -0.0002360377358, -0.0003339622642, -0.0001669811321, -0.0000115094340, +0.0000920754717, +0.0002418867925, +0.0003973584906, +0.0003398113208, +0.0000979245283, -0.0000920754717, -0.0001554716981, -0.0000633962264, +0.0001496226415, +0.0002245283019, +0.0000460377358, -0.0000805660377, -0.0001266037736, -0.0002015094340, -0.0002130188679, +0.0000288679245, +0.0003915094340, +0.0005930188679, +0.0003743396226, -0.0000633962264, -0.0003973584906, -0.0004720754717, -0.0003743396226, -0.0001784905660, -0.0000230188679, +0.0001843396226, +0.0003743396226, +0.0003569811321, +0.0001094339623, -0.0000979245283, -0.0001669811321, -0.0001439622642, -0.0001266037736, -0.0000690566038, -0.0000518867925, -0.0000173584906, +0.0000920754717, +0.0001554716981, +0.0000690566038, -0.0000058490566, -0.0000173584906, +0.0000230188679, +0.0000920754717, +0.0001669811321, +0.0002015094340, +0.0000805660377, -0.0001843396226, -0.0002649056604, -0.0000920754717, +0.0000173584906, +0.0001150943396, +0.0002360377358, +0.0002130188679, +0.0000749056604, +0.0000000000000, -0.0001324528302, -0.0002533962264, -0.0002015094340, +0.0000575471698, +0.0003050943396, +0.0003569811321, +0.0000979245283, -0.0001554716981, -0.0001496226415, +0.0000115094340, +0.0000749056604, +0.0001209433962, +0.0001843396226, +0.0000920754717, -0.0001843396226, -0.0003166037736, -0.0002188679245, -0.0000115094340, +0.0001209433962, +0.0002245283019, +0.0004088679245, +0.0005124528302, +0.0002303773585, -0.0001958490566, -0.0003283018868, -0.0002303773585, -0.0001728301887, -0.0000864150943, +0.0000749056604, +0.0001094339623, -0.0000173584906, -0.0001900000000, -0.0001209433962, +0.0001381132075, +0.0003283018868, +0.0003800000000, +0.0004549056604, +0.0004030188679, +0.0002130188679, -0.0000230188679, -0.0002073584906, -0.0003743396226, -0.0004145283019, -0.0002879245283, -0.0000115094340, +0.0001843396226, +0.0002245283019, +0.0001843396226, +0.0001843396226, +0.0001496226415, +0.0000979245283, -0.0000230188679, -0.0002130188679, -0.0003398113208, -0.0002764150943, -0.0001611320755, +0.0000000000000, +0.0001900000000, +0.0002649056604, +0.0000633962264, -0.0002475471698, -0.0003915094340, -0.0002130188679, +0.0000690566038, +0.0001611320755, +0.0001669811321, +0.0002303773585, +0.0001958490566, -0.0000518867925, -0.0002820754717, -0.0002303773585, +0.0000460377358, +0.0001266037736, -0.0000288679245, -0.0001439622642, -0.0000518867925, +0.0000575471698, +0.0001324528302, +0.0001496226415, +0.0001381132075, +0.0000058490566, -0.0001209433962, -0.0001150943396, +0.0000173584906, -0.0000058490566, -0.0001209433962, -0.0000575471698, +0.0001439622642, +0.0001728301887, +0.0000115094340, -0.0001496226415, -0.0001439622642, -0.0001381132075, -0.0002245283019, -0.0001728301887, +0.0000920754717, +0.0003166037736, +0.0003398113208, +0.0001958490566, -0.0000115094340, -0.0002245283019, -0.0003166037736, -0.0001784905660, -0.0000115094340, +0.0000230188679, +0.0000000000000, -0.0000058490566, -0.0000864150943, -0.0001843396226, -0.0001669811321, -0.0000115094340, +0.0000575471698, +0.0000979245283, +0.0000864150943, +0.0000000000000, -0.0001439622642, -0.0002188679245, -0.0002994339623, -0.0002820754717, -0.0000864150943, +0.0001958490566, +0.0002418867925, +0.0000920754717, +0.0000000000000, +0.0001094339623, +0.0002303773585, +0.0001611320755, -0.0000920754717, -0.0002649056604, -0.0002130188679, -0.0000690566038, -0.0000058490566, +0.0000345283019, +0.0000403773585, -0.0001209433962, -0.0003166037736, -0.0002533962264, +0.0000288679245, +0.0003109433962, +0.0004030188679, +0.0002303773585, +0.0000230188679, -0.0001094339623, -0.0002360377358, -0.0003513207547, -0.0002879245283, -0.0000749056604, +0.0002188679245, +0.0003684905660, +0.0003743396226, +0.0002705660377, +0.0000403773585, -0.0002590566038, -0.0002590566038, -0.0000864150943, -0.0000058490566, +0.0000230188679, +0.0001554716981, +0.0001728301887, +0.0001381132075, +0.0001381132075, +0.0000864150943, -0.0000633962264, -0.0001843396226, -0.0002188679245, -0.0001554716981, -0.0000920754717, -0.0000345283019, +0.0000749056604, +0.0002130188679, +0.0001784905660, +0.0000460377358, +0.0000000000000, -0.0000345283019, -0.0000805660377, -0.0000690566038, -0.0000633962264, -0.0001669811321, -0.0002705660377, -0.0003166037736, -0.0002360377358, -0.0000690566038, +0.0000864150943, +0.0001728301887, +0.0002303773585, +0.0001324528302, -0.0000460377358, -0.0001843396226, -0.0002015094340, -0.0001958490566, -0.0001381132075, -0.0000460377358, +0.0001035849057, +0.0001900000000, +0.0001669811321, +0.0000749056604, +0.0000633962264, +0.0000633962264, -0.0000230188679, -0.0001728301887, -0.0001439622642, -0.0000690566038, -0.0001439622642, -0.0002303773585, -0.0001324528302, +0.0000345283019, +0.0000920754717, +0.0000403773585, +0.0000000000000, +0.0000173584906, +0.0000345283019, +0.0000173584906, -0.0000173584906, -0.0000058490566, +0.0000460377358, +0.0001094339623, +0.0000979245283, +0.0000345283019, -0.0000460377358, -0.0000864150943, -0.0000403773585, +0.0001094339623, +0.0001900000000, +0.0001381132075, +0.0000230188679, -0.0000288679245, -0.0000575471698, -0.0000173584906, +0.0000518867925, +0.0001094339623, +0.0001209433962, +0.0000575471698, -0.0000979245283, -0.0001035849057, +0.0000690566038, +0.0001843396226, +0.0001554716981, +0.0000864150943, +0.0000633962264, +0.0000749056604, -0.0000403773585, -0.0002303773585, -0.0001784905660, +0.0000115094340, +0.0000864150943, +0.0000805660377, +0.0000864150943, +0.0000864150943, +0.0000920754717, +0.0000345283019, -0.0000173584906, +0.0000288679245, +0.0001209433962, +0.0001209433962, +0.0000633962264, -0.0000864150943, -0.0001784905660, -0.0000518867925, +0.0001669811321, +0.0002303773585, +0.0001728301887, +0.0001266037736, +0.0001209433962, +0.0000460377358, -0.0001035849057, -0.0002130188679, -0.0001611320755, -0.0000460377358, +0.0000749056604, +0.0002705660377, +0.0004664150943, +0.0004375471698, +0.0001496226415, -0.0001094339623, -0.0001784905660, -0.0001669811321, -0.0002073584906, -0.0002130188679, -0.0000920754717, +0.0001094339623, +0.0002130188679, +0.0002073584906, +0.0001554716981, +0.0000979245283, -0.0000173584906, -0.0001439622642, -0.0002073584906, -0.0000979245283, +0.0001209433962, +0.0003224528302, +0.0003684905660, +0.0002188679245, -0.0000690566038, -0.0003224528302, -0.0003973584906, -0.0002533962264, -0.0000575471698, +0.0000288679245, +0.0000115094340, +0.0000173584906, +0.0000345283019, +0.0000230188679, -0.0000345283019, -0.0000749056604, -0.0000115094340, +0.0000749056604, +0.0000575471698, -0.0000575471698, -0.0001784905660, -0.0002418867925, -0.0002188679245, -0.0000749056604, +0.0001784905660, +0.0003800000000, +0.0003743396226, +0.0001266037736, -0.0000864150943, -0.0001266037736, -0.0000979245283, -0.0001439622642, -0.0001439622642, -0.0001209433962, -0.0000979245283, -0.0000288679245, +0.0001784905660, +0.0003166037736, +0.0002303773585, -0.0000115094340, -0.0001381132075, -0.0000864150943, +0.0000000000000, -0.0000115094340, -0.0000173584906, +0.0000288679245, +0.0001035849057, +0.0000979245283, +0.0000115094340, -0.0000460377358, +0.0000230188679, +0.0001381132075, +0.0001150943396, +0.0000000000000, -0.0000288679245, +0.0000230188679, +0.0000518867925, +0.0000749056604, +0.0000230188679, -0.0000633962264, -0.0001669811321, -0.0002705660377, -0.0003050943396, -0.0001784905660, -0.0000288679245, +0.0000805660377, +0.0001900000000, +0.0003684905660, +0.0004433962264, +0.0002820754717, +0.0000518867925, -0.0000749056604, -0.0002649056604, -0.0004835849057, -0.0005183018868, -0.0002533962264, +0.0000575471698, +0.0001728301887, +0.0001209433962, +0.0000633962264, +0.0000000000000, -0.0000864150943, -0.0001150943396, -0.0000690566038, +0.0000403773585, +0.0002073584906, +0.0002935849057, +0.0002015094340, +0.0000749056604, +0.0000115094340, +0.0000058490566, -0.0000749056604, -0.0002475471698, -0.0003454716981, -0.0002188679245, -0.0000575471698, +0.0000000000000, +0.0000058490566, +0.0000920754717, +0.0001669811321, +0.0001209433962, -0.0000403773585, -0.0001381132075, -0.0000690566038, +0.0000518867925, +0.0000633962264, +0.0000115094340, -0.0000230188679, -0.0000288679245, +0.0000518867925, +0.0001958490566, +0.0002188679245, +0.0000518867925, -0.0001900000000, -0.0003050943396, -0.0002303773585, -0.0000633962264, +0.0000460377358, +0.0000575471698, +0.0001035849057, +0.0002475471698, +0.0002879245283, +0.0001094339623, -0.0000749056604, -0.0001784905660, -0.0001843396226, -0.0001324528302, -0.0000575471698, +0.0000000000000, +0.0001381132075, +0.0002015094340, +0.0000690566038, -0.0001094339623, -0.0001554716981, -0.0000920754717, +0.0000920754717, +0.0003050943396, +0.0004030188679, +0.0002705660377, -0.0000058490566, -0.0002590566038, -0.0003569811321, -0.0004145283019, -0.0004203773585, -0.0002015094340, +0.0002245283019, +0.0005239622642, +0.0005009433962, +0.0003454716981, +0.0001611320755, -0.0000690566038, -0.0002245283019, -0.0001784905660, -0.0001094339623, -0.0001035849057, -0.0001611320755, -0.0001381132075, +0.0000345283019, +0.0001958490566, +0.0000575471698, -0.0001900000000, -0.0002475471698, -0.0000518867925, +0.0000690566038, +0.0000403773585, -0.0000058490566, +0.0000058490566, -0.0000288679245, -0.0000979245283, -0.0001554716981, -0.0001324528302, +0.0000460377358, +0.0002879245283, +0.0003339622642, +0.0002130188679, +0.0000690566038, -0.0001094339623, -0.0002935849057, -0.0003454716981, -0.0002590566038, -0.0001496226415, -0.0000633962264, +0.0000288679245, +0.0001266037736, +0.0001900000000, +0.0002764150943, +0.0003166037736, +0.0002418867925, +0.0000000000000, -0.0003166037736, -0.0005354716981, -0.0004490566038, -0.0001035849057, +0.0003513207547, +0.0005700000000, +0.0004145283019, +0.0000633962264, -0.0001209433962, -0.0001439622642, -0.0001209433962, -0.0001035849057, +0.0000288679245, +0.0001728301887, +0.0002015094340, +0.0001554716981, +0.0001784905660, +0.0001611320755, -0.0000230188679, -0.0002188679245, -0.0002130188679, -0.0000920754717, +0.0000000000000, +0.0001266037736, +0.0003224528302, +0.0004260377358, +0.0002935849057, +0.0001035849057, -0.0000690566038, -0.0002015094340, -0.0002015094340, -0.0000345283019, +0.0000920754717, +0.0001496226415, +0.0001035849057, +0.0000345283019, -0.0000115094340, -0.0000058490566, -0.0000345283019, -0.0000288679245, +0.0000000000000, +0.0000230188679, -0.0000690566038, -0.0002188679245, -0.0002590566038, -0.0001150943396, +0.0000230188679, +0.0001439622642, +0.0002705660377, +0.0003398113208, +0.0002879245283, +0.0001958490566, +0.0000345283019, -0.0002130188679, -0.0004203773585, -0.0003628301887, -0.0001150943396, +0.0000403773585, +0.0000288679245, -0.0000173584906, -0.0000115094340, +0.0000749056604, +0.0002705660377, +0.0003743396226, +0.0002994339623, +0.0000345283019, -0.0002820754717, -0.0004835849057, -0.0003743396226, -0.0001094339623, +0.0001843396226, +0.0003454716981, +0.0002820754717, +0.0000633962264, -0.0000058490566, +0.0000633962264, +0.0000864150943, -0.0000345283019, -0.0000979245283, -0.0000864150943, -0.0001439622642, -0.0003166037736, -0.0003973584906, -0.0002820754717, -0.0000115094340, +0.0002073584906, +0.0002935849057, +0.0002935849057, +0.0001958490566, -0.0000403773585, -0.0002820754717, -0.0002303773585, +0.0000575471698, +0.0003109433962, +0.0003628301887, +0.0003283018868, +0.0002130188679, -0.0000173584906, -0.0002935849057, -0.0004088679245, -0.0003915094340, -0.0003454716981, -0.0002820754717, -0.0000920754717, +0.0001150943396, +0.0002935849057, +0.0003109433962, +0.0001266037736, -0.0000345283019, +0.0000230188679, +0.0000805660377, +0.0000575471698, +0.0000345283019, +0.0000000000000, -0.0001266037736, -0.0003283018868, -0.0003109433962, +0.0000979245283, +0.0005183018868, +0.0004952830189, +0.0001496226415, -0.0001266037736, -0.0002015094340, -0.0001900000000, -0.0001266037736, -0.0000518867925, -0.0000345283019, -0.0000633962264, -0.0000345283019, +0.0000058490566, -0.0000173584906, -0.0001728301887, -0.0002764150943, -0.0001728301887, +0.0000403773585, +0.0001784905660, +0.0002418867925, +0.0002303773585, +0.0001843396226, +0.0001035849057, +0.0000115094340, -0.0000749056604, -0.0001324528302, -0.0001669811321, -0.0002188679245, -0.0002360377358, -0.0001150943396, +0.0000518867925, +0.0001381132075, +0.0001266037736, +0.0000633962264, -0.0000403773585, -0.0001843396226, -0.0002649056604, -0.0002245283019, -0.0000749056604, +0.0000749056604, +0.0001728301887, +0.0001728301887, +0.0001324528302, +0.0000979245283, +0.0001324528302, +0.0001381132075, +0.0000575471698, -0.0000403773585, -0.0001035849057, -0.0001728301887, -0.0002073584906, -0.0001843396226, -0.0000805660377, +0.0000575471698, +0.0001035849057, +0.0000000000000, -0.0000864150943, -0.0000518867925, -0.0000633962264, -0.0002015094340, -0.0002073584906, +0.0001094339623, +0.0005067924528, +0.0006103773585, +0.0003513207547, -0.0000345283019, -0.0002994339623, -0.0003569811321, -0.0002533962264, -0.0000633962264, +0.0001150943396, +0.0002764150943, +0.0003513207547, +0.0002533962264, +0.0000230188679, -0.0001439622642, -0.0002418867925, -0.0002820754717, -0.0002533962264, -0.0000920754717, +0.0001209433962, +0.0002245283019, +0.0001209433962, -0.0000230188679, -0.0000633962264, +0.0000000000000, +0.0000230188679, -0.0000690566038, -0.0001728301887, -0.0001094339623, +0.0000345283019, +0.0001496226415, +0.0002533962264, +0.0002935849057, +0.0001669811321, -0.0001035849057, -0.0003398113208, -0.0003513207547, -0.0001784905660, +0.0000173584906, +0.0001728301887, +0.0001554716981, +0.0000000000000, -0.0001728301887, -0.0002073584906, -0.0001266037736, -0.0000058490566, +0.0000749056604, +0.0001669811321, +0.0001958490566, +0.0001324528302, +0.0000749056604, +0.0000864150943, +0.0000979245283, +0.0000000000000, -0.0001784905660, -0.0002303773585, -0.0000805660377, +0.0000749056604, +0.0001094339623, +0.0000920754717, +0.0001035849057, +0.0001035849057, +0.0000288679245, -0.0001150943396, -0.0002475471698, -0.0002590566038, -0.0000749056604, +0.0001554716981, +0.0002590566038, +0.0002418867925, +0.0002418867925, +0.0001900000000, +0.0000518867925, -0.0001209433962, -0.0001843396226, -0.0001035849057, -0.0000230188679, -0.0000115094340, +0.0000403773585, +0.0000864150943, +0.0000115094340, -0.0000575471698, +0.0000115094340, +0.0001784905660, +0.0002764150943, +0.0002188679245, +0.0000288679245, -0.0001728301887, -0.0002764150943, -0.0002188679245, -0.0000518867925, +0.0001209433962, +0.0002188679245, +0.0001843396226, -0.0000058490566, -0.0001900000000, -0.0002188679245, -0.0001381132075, -0.0000690566038, -0.0000115094340, +0.0000288679245, +0.0001150943396, +0.0001900000000, +0.0001611320755, -0.0000173584906, -0.0001728301887, -0.0001611320755, -0.0000575471698, -0.0000575471698, -0.0001381132075, -0.0002130188679, -0.0002360377358, -0.0001843396226, -0.0000575471698, +0.0000633962264, +0.0001784905660, +0.0002475471698, +0.0002764150943, +0.0002188679245, +0.0000230188679, -0.0001784905660, -0.0002360377358, -0.0000749056604, +0.0001094339623, +0.0001554716981, +0.0001381132075, +0.0002188679245, +0.0002418867925, +0.0000805660377, -0.0001496226415, -0.0002764150943, -0.0002820754717, -0.0001784905660, +0.0000000000000, +0.0002360377358, +0.0003800000000, +0.0003743396226, +0.0002649056604, +0.0001611320755, +0.0000460377358, -0.0001035849057, -0.0002130188679, -0.0001669811321, -0.0000230188679, +0.0001381132075, +0.0002475471698, +0.0002245283019, +0.0001035849057, -0.0000288679245, -0.0000633962264, +0.0000000000000, +0.0000633962264, +0.0000403773585, +0.0000230188679, +0.0000518867925, +0.0000920754717, +0.0000173584906, -0.0000864150943, -0.0001209433962, -0.0000864150943, -0.0000920754717, -0.0000979245283, -0.0000173584906, +0.0001496226415, +0.0002360377358, +0.0002073584906, +0.0001266037736, +0.0000864150943, +0.0000460377358, -0.0000115094340, -0.0000864150943, -0.0001266037736, -0.0001554716981, -0.0001381132075, -0.0000633962264, -0.0000173584906, -0.0000115094340, +0.0000000000000, +0.0000864150943, +0.0001324528302, +0.0000864150943, -0.0000288679245, -0.0001266037736, -0.0001209433962, +0.0000000000000, +0.0001150943396, +0.0001843396226, +0.0001266037736, -0.0000115094340, -0.0001728301887, -0.0002705660377, -0.0002073584906, +0.0000288679245, +0.0002245283019, +0.0002303773585, +0.0000749056604, -0.0000864150943, -0.0001784905660, -0.0001784905660, -0.0001209433962, -0.0000230188679, +0.0000864150943, +0.0001496226415, +0.0001209433962, +0.0000345283019, -0.0000345283019, -0.0000403773585, +0.0000230188679, +0.0000460377358, +0.0000115094340, +0.0000000000000, +0.0000173584906, +0.0000173584906, -0.0000230188679, -0.0001035849057, -0.0001611320755, -0.0001958490566, -0.0002303773585, -0.0002245283019, -0.0001035849057, -0.0000058490566, -0.0000115094340, -0.0000288679245, +0.0000058490566, +0.0000230188679, +0.0000173584906, -0.0000173584906, -0.0000864150943, -0.0001035849057, -0.0000403773585, +0.0000230188679, +0.0000460377358, +0.0000288679245, -0.0000403773585, -0.0001094339623, -0.0000345283019, +0.0001439622642, +0.0002188679245, +0.0001035849057, -0.0001094339623, -0.0002418867925, -0.0002590566038, -0.0001958490566, -0.0000518867925, +0.0001209433962, +0.0001900000000, +0.0001669811321, +0.0001094339623, +0.0000058490566, -0.0001209433962, -0.0001843396226, -0.0001611320755, -0.0000920754717, -0.0000173584906, +0.0000920754717, +0.0001843396226, +0.0001554716981, +0.0000173584906, -0.0000864150943, -0.0001611320755, -0.0001900000000, -0.0000805660377, +0.0001150943396, +0.0002303773585, +0.0001439622642, -0.0000345283019, -0.0001496226415, -0.0001209433962, -0.0000749056604, -0.0001094339623, -0.0001094339623, +0.0000575471698, +0.0002015094340, +0.0001669811321, +0.0000460377358, -0.0000058490566, -0.0000518867925, -0.0000460377358, +0.0000518867925, +0.0002015094340, +0.0002188679245, +0.0000749056604, -0.0000920754717, -0.0001728301887, -0.0001611320755, -0.0000749056604, +0.0000518867925, +0.0002073584906, +0.0002820754717, +0.0001554716981, -0.0001094339623, -0.0002590566038, -0.0001266037736, +0.0001035849057, +0.0001843396226, +0.0000920754717, -0.0000288679245, -0.0001324528302, -0.0001900000000, -0.0001324528302, +0.0000115094340, +0.0000864150943, +0.0000460377358, -0.0000058490566, -0.0000230188679, -0.0000979245283, -0.0001958490566, -0.0001900000000, -0.0000288679245, +0.0001669811321, +0.0002590566038, +0.0001611320755, -0.0000173584906, -0.0001381132075, -0.0001496226415, -0.0000749056604, +0.0000173584906, +0.0001094339623, +0.0001150943396, +0.0000000000000, -0.0001266037736, -0.0001324528302, -0.0000403773585, +0.0000230188679, +0.0000230188679, +0.0000864150943, +0.0002130188679, +0.0002475471698, +0.0001094339623, -0.0000575471698, -0.0001209433962, -0.0000805660377, -0.0000920754717, -0.0001324528302, -0.0000690566038, +0.0001094339623, +0.0002073584906, +0.0001209433962, +0.0000173584906, +0.0000460377358, +0.0001094339623, +0.0000864150943, +0.0000288679245, +0.0000979245283, +0.0002360377358, +0.0002245283019, +0.0000575471698, -0.0000690566038, -0.0000864150943, -0.0000749056604, -0.0000518867925, -0.0000115094340, +0.0000345283019, +0.0000690566038, +0.0000979245283, +0.0001266037736, +0.0001611320755, +0.0001496226415, +0.0001209433962, +0.0000690566038, -0.0000403773585, -0.0001784905660, -0.0002418867925, -0.0002188679245, -0.0000920754717, +0.0000690566038, +0.0001324528302, +0.0000920754717, +0.0000920754717, +0.0001209433962, +0.0000633962264, -0.0000230188679, -0.0000288679245, +0.0000403773585, +0.0000575471698, -0.0000345283019, -0.0001611320755, -0.0002130188679, -0.0001669811321, -0.0000633962264, +0.0000690566038, +0.0001784905660, +0.0001439622642, +0.0000058490566, -0.0000749056604, -0.0000115094340, +0.0001035849057, +0.0001496226415, +0.0001035849057, +0.0000115094340, -0.0000864150943, -0.0001611320755, -0.0001496226415, -0.0000345283019, +0.0000749056604, +0.0000979245283, +0.0000230188679, -0.0000518867925, -0.0000633962264, -0.0000403773585, -0.0000115094340, +0.0000345283019, +0.0001439622642, +0.0002188679245, +0.0001324528302, -0.0000633962264, -0.0002015094340, -0.0002303773585, -0.0001669811321, +0.0000000000000, +0.0002303773585, +0.0003628301887, +0.0002994339623, +0.0000749056604, -0.0001266037736, -0.0001900000000, -0.0000864150943, +0.0000288679245, +0.0000288679245, -0.0000345283019, -0.0000633962264, -0.0000575471698, -0.0000345283019, +0.0000115094340, +0.0000920754717, +0.0001439622642, +0.0000979245283, +0.0000000000000, -0.0000805660377, -0.0001209433962, -0.0000979245283, +0.0000000000000, +0.0000690566038, +0.0000575471698, +0.0000345283019, +0.0000460377358, +0.0000058490566, -0.0000864150943, -0.0001900000000, -0.0002015094340, -0.0000920754717, +0.0000518867925, +0.0000864150943, +0.0000058490566, -0.0001035849057, -0.0001381132075, -0.0000345283019, +0.0001209433962, +0.0001439622642, -0.0000058490566, -0.0001728301887, -0.0001958490566, -0.0001209433962, -0.0000403773585, +0.0000230188679, +0.0001094339623, +0.0001554716981, +0.0001035849057, -0.0000058490566, -0.0000518867925, -0.0000345283019, -0.0000460377358, -0.0000864150943, -0.0001035849057, -0.0000518867925, +0.0000230188679, +0.0000633962264, +0.0000690566038, +0.0000690566038, +0.0000690566038, +0.0000403773585, -0.0000230188679, -0.0000749056604, -0.0000979245283, -0.0001094339623, -0.0000805660377, -0.0000115094340, +0.0000518867925, +0.0000979245283, +0.0001209433962, +0.0000979245283, +0.0000345283019, -0.0000518867925, -0.0001266037736, -0.0001150943396, -0.0000173584906, +0.0000690566038, +0.0000920754717, +0.0000575471698, +0.0000000000000, -0.0000460377358, -0.0000690566038, -0.0000749056604, -0.0000230188679, +0.0000749056604, +0.0001439622642, +0.0001094339623, -0.0000058490566, -0.0001035849057, -0.0001094339623, -0.0000288679245, +0.0000633962264, +0.0001324528302, +0.0001381132075, +0.0001035849057, +0.0000805660377, +0.0000920754717, +0.0000575471698, -0.0000403773585, -0.0001611320755, -0.0002073584906, -0.0001900000000, -0.0000979245283, +0.0000173584906, +0.0001094339623, +0.0002130188679, +0.0003109433962, +0.0002475471698, +0.0000115094340, -0.0002188679245, -0.0003166037736, -0.0002764150943, -0.0001496226415, +0.0000000000000, +0.0001381132075, +0.0002533962264, +0.0002533962264, +0.0001324528302, -0.0000058490566, -0.0000864150943, -0.0001150943396, -0.0000979245283, -0.0000575471698, -0.0000288679245, -0.0000345283019, -0.0000460377358, -0.0000345283019, +0.0000000000000, +0.0000345283019, +0.0000403773585, +0.0000000000000, -0.0000345283019, -0.0000633962264, -0.0000518867925, -0.0000115094340, +0.0000173584906, +0.0000058490566, -0.0000115094340, -0.0000058490566, +0.0000403773585, +0.0000518867925, +0.0000000000000, -0.0000805660377, -0.0001381132075, -0.0000749056604, +0.0000749056604, +0.0001958490566, +0.0001784905660, +0.0000864150943, -0.0000058490566, -0.0000864150943, -0.0001209433962, -0.0000575471698, +0.0000058490566, +0.0000230188679, +0.0000288679245, +0.0000805660377, +0.0001209433962, +0.0001035849057, +0.0000288679245, -0.0000288679245, -0.0000345283019, -0.0000058490566, +0.0000000000000, +0.0000345283019, +0.0001150943396, +0.0001439622642, +0.0000460377358, -0.0000749056604, -0.0001439622642, -0.0001324528302, -0.0000979245283, -0.0000460377358, +0.0000173584906, +0.0000805660377, +0.0001381132075, +0.0001439622642, +0.0000864150943, +0.0000173584906, +0.0000058490566, +0.0000000000000, -0.0000058490566, -0.0000058490566, +0.0000058490566, -0.0000058490566, -0.0000403773585, -0.0000633962264, -0.0000288679245, +0.0000690566038, +0.0001669811321, +0.0001266037736, -0.0000115094340, -0.0001496226415, -0.0002130188679, -0.0002303773585, -0.0001266037736, +0.0000690566038, +0.0002303773585, +0.0002188679245, +0.0000575471698, -0.0000805660377, -0.0001266037736, -0.0001381132075, -0.0001266037736, -0.0000403773585, +0.0000749056604, +0.0001554716981, +0.0001496226415, +0.0001094339623, +0.0000690566038, +0.0000230188679, -0.0000575471698, -0.0001439622642, -0.0001554716981, -0.0000805660377, -0.0000058490566, +0.0000230188679, +0.0000633962264, +0.0001150943396, +0.0001209433962, +0.0000920754717, +0.0000749056604, +0.0000864150943, +0.0000518867925, +0.0000173584906, +0.0000288679245, +0.0000173584906, -0.0000403773585, -0.0000575471698, -0.0000058490566, +0.0000690566038, +0.0001266037736, +0.0001150943396, +0.0000575471698, +0.0000403773585, +0.0000575471698, +0.0000403773585, +0.0000288679245, +0.0000749056604, +0.0001209433962, +0.0000633962264, -0.0000749056604, -0.0001958490566, -0.0002130188679, -0.0001611320755, -0.0000920754717, -0.0000230188679, +0.0000864150943, +0.0001900000000, +0.0002303773585, +0.0001669811321, +0.0000518867925, -0.0000518867925, -0.0001266037736, -0.0002015094340, -0.0002533962264, -0.0002073584906, -0.0000805660377, +0.0000460377358, +0.0001496226415, +0.0002130188679, +0.0001728301887, +0.0000633962264, +0.0000000000000, -0.0000345283019, -0.0000920754717, -0.0001554716981, -0.0001784905660, -0.0001554716981, -0.0000805660377, +0.0000230188679, +0.0001150943396, +0.0001324528302, +0.0000749056604, +0.0000000000000, -0.0000749056604, -0.0001381132075, -0.0001439622642, -0.0000749056604, +0.0000288679245, +0.0000979245283, +0.0000575471698, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000749056604, -0.0001784905660, -0.0002130188679, -0.0001209433962, +0.0000230188679, +0.0001209433962, +0.0001094339623, +0.0000575471698, +0.0000115094340, -0.0000460377358, -0.0001094339623, -0.0001094339623, -0.0000058490566, +0.0001324528302, +0.0002188679245, +0.0002245283019, +0.0001728301887, +0.0000979245283, +0.0000115094340, -0.0000920754717, -0.0001843396226, -0.0001784905660, -0.0001266037736, -0.0001150943396, -0.0000690566038, +0.0000690566038, +0.0002015094340, +0.0001611320755, +0.0000173584906, -0.0000690566038, -0.0000690566038, -0.0000518867925, -0.0000460377358, +0.0000000000000, +0.0000805660377, +0.0001266037736, +0.0000805660377, +0.0000115094340, -0.0000288679245, -0.0000633962264, -0.0001150943396, -0.0001439622642, -0.0001035849057, +0.0000000000000, +0.0000920754717, +0.0001324528302, +0.0001035849057, +0.0000288679245, -0.0000403773585, -0.0000690566038, -0.0000403773585, +0.0000058490566, +0.0000058490566, -0.0000690566038, -0.0001324528302, -0.0000864150943, -0.0000230188679, -0.0000115094340, +0.0000000000000, +0.0000575471698, +0.0000920754717, +0.0000460377358, -0.0000058490566, +0.0000058490566, +0.0000460377358, +0.0000230188679, -0.0000288679245, -0.0000288679245, +0.0000345283019, +0.0000690566038, +0.0000403773585, -0.0000403773585, -0.0001554716981, -0.0002130188679, -0.0001496226415, +0.0000000000000, +0.0001324528302, +0.0001958490566, +0.0001669811321, +0.0000979245283, +0.0000575471698, +0.0000460377358, +0.0000230188679, +0.0000000000000, +0.0000000000000, +0.0000173584906, +0.0000288679245, -0.0000173584906, -0.0000979245283, -0.0001209433962, -0.0000805660377, -0.0000173584906, +0.0000633962264, +0.0001266037736, +0.0001496226415, +0.0001266037736, +0.0000864150943, +0.0000575471698, +0.0000403773585, +0.0000000000000, -0.0000575471698, -0.0000690566038, -0.0000115094340, +0.0000115094340, -0.0000115094340, -0.0000173584906, +0.0000345283019, +0.0000864150943, +0.0000805660377, +0.0000575471698, +0.0000575471698, +0.0000288679245, -0.0000749056604, -0.0001669811321, -0.0001094339623, +0.0000403773585, +0.0001209433962, +0.0000518867925, -0.0000575471698, -0.0001094339623, -0.0000920754717, -0.0000633962264, -0.0000288679245, +0.0000288679245, +0.0001150943396, +0.0001611320755, +0.0001150943396, +0.0000000000000, -0.0001324528302, -0.0002073584906, -0.0001439622642, +0.0000058490566, +0.0001266037736, +0.0001266037736, +0.0000518867925, -0.0000058490566, -0.0000518867925, -0.0000690566038, -0.0000460377358, +0.0000000000000, -0.0000173584906, -0.0000864150943, -0.0001150943396, -0.0000230188679, +0.0001266037736, +0.0002073584906, +0.0001611320755, +0.0000805660377, -0.0000173584906, -0.0001728301887, -0.0002879245283, -0.0002418867925, -0.0000575471698, +0.0000979245283, +0.0001554716981, +0.0001496226415, +0.0001266037736, +0.0000518867925, -0.0000518867925, -0.0000979245283, -0.0000403773585, +0.0000690566038, +0.0001324528302, +0.0001035849057, +0.0000288679245, -0.0000805660377, -0.0001958490566, -0.0002073584906, -0.0000575471698, +0.0001035849057, +0.0001266037736, +0.0000403773585, +0.0000115094340, +0.0000633962264, +0.0000690566038, +0.0000000000000, -0.0000575471698, -0.0000518867925, -0.0000345283019, -0.0000345283019, -0.0000345283019, -0.0000173584906, +0.0000000000000, +0.0000173584906, +0.0000460377358, +0.0000920754717, +0.0001209433962, +0.0000979245283, +0.0000345283019, -0.0000115094340, -0.0000173584906, -0.0000345283019, -0.0000575471698, -0.0000288679245, +0.0000403773585, +0.0000805660377, +0.0000518867925, -0.0000058490566, -0.0000460377358, -0.0000518867925, -0.0000288679245, +0.0000230188679, +0.0000805660377, +0.0000805660377, +0.0000173584906, -0.0000403773585, -0.0000518867925, -0.0000575471698, -0.0000805660377, -0.0000518867925, +0.0000690566038, +0.0001900000000, +0.0001728301887, +0.0000864150943, +0.0000345283019, +0.0000115094340, -0.0000403773585, -0.0001209433962, -0.0001381132075, -0.0000805660377, -0.0000115094340, +0.0000345283019, +0.0000749056604, +0.0001209433962, +0.0001324528302, +0.0000633962264, -0.0000575471698, -0.0001439622642, -0.0001209433962, -0.0000690566038, -0.0000345283019, +0.0000000000000, +0.0000460377358, +0.0000690566038, +0.0000805660377, +0.0000749056604, +0.0000518867925, +0.0000345283019, +0.0000000000000, -0.0000230188679, -0.0000518867925, -0.0000920754717, -0.0001381132075, -0.0001324528302, -0.0000518867925, +0.0000288679245, +0.0000749056604, +0.0000460377358, -0.0000173584906, -0.0000460377358, -0.0000230188679, +0.0000000000000, +0.0000000000000, -0.0000173584906, +0.0000000000000, +0.0000518867925, +0.0000690566038, +0.0000460377358, +0.0000460377358, +0.0000805660377, +0.0000979245283, +0.0000403773585, -0.0000633962264, -0.0001209433962, -0.0000805660377, +0.0000115094340, +0.0000805660377, +0.0000920754717, +0.0000749056604, +0.0000403773585, +0.0000058490566, -0.0000345283019, -0.0000864150943, -0.0001209433962, -0.0000805660377, +0.0000000000000, +0.0000518867925, +0.0000979245283, +0.0001266037736, +0.0001381132075, +0.0000979245283, +0.0000173584906, -0.0000805660377, -0.0001611320755, -0.0001669811321, -0.0000633962264, +0.0000518867925, +0.0001094339623, +0.0001035849057, +0.0000920754717, +0.0000633962264, -0.0000058490566, -0.0000920754717, -0.0001094339623, -0.0000403773585, +0.0000575471698, +0.0001266037736, +0.0001266037736, +0.0000345283019, -0.0000805660377, -0.0001381132075, -0.0000920754717, -0.0000058490566, +0.0000749056604, +0.0001439622642, +0.0001439622642, +0.0000749056604, +0.0000000000000, -0.0000115094340, +0.0000460377358, +0.0000979245283, +0.0000230188679, -0.0000864150943, -0.0001035849057, -0.0000403773585, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000173584906, +0.0000575471698, +0.0000633962264, +0.0000000000000, -0.0000979245283, -0.0001150943396, -0.0000345283019, +0.0000460377358, +0.0000345283019, -0.0000230188679, -0.0000345283019, -0.0000345283019, -0.0000690566038, -0.0001094339623, -0.0000979245283, -0.0000403773585, +0.0000000000000, +0.0000173584906, +0.0000173584906, -0.0000173584906, -0.0000690566038, -0.0000749056604, +0.0000000000000, +0.0001150943396, +0.0001554716981, +0.0000460377358, -0.0000920754717, -0.0001496226415, -0.0001324528302, -0.0000979245283, -0.0000690566038, -0.0000173584906, +0.0000403773585, +0.0001094339623, +0.0001439622642, +0.0001035849057, -0.0000173584906, -0.0001728301887, -0.0002418867925, -0.0001496226415, +0.0000230188679, +0.0001669811321, +0.0001958490566, +0.0001094339623, -0.0000460377358, -0.0002015094340, -0.0002764150943, -0.0001958490566, +0.0000173584906, +0.0002245283019, +0.0002820754717, +0.0002015094340, +0.0000690566038, -0.0000403773585, -0.0000979245283, -0.0001209433962, -0.0001324528302, -0.0001209433962, -0.0000403773585, +0.0000749056604, +0.0001728301887, +0.0001900000000, +0.0001209433962, +0.0000000000000, -0.0001035849057, -0.0000979245283, +0.0000000000000, +0.0000920754717, +0.0001324528302, +0.0001266037736, +0.0000864150943, +0.0000345283019, -0.0000288679245, -0.0001150943396, -0.0001439622642, -0.0000805660377, -0.0000173584906, -0.0000115094340, -0.0000115094340, +0.0000115094340, +0.0000345283019, +0.0000288679245, +0.0000173584906, +0.0000345283019, +0.0000288679245, -0.0000173584906, -0.0000690566038, -0.0000749056604, -0.0000575471698, -0.0000230188679, +0.0000403773585, +0.0001094339623, +0.0001094339623, +0.0000633962264, +0.0000230188679, +0.0000000000000, -0.0000173584906, -0.0000288679245, -0.0000288679245, -0.0000230188679, -0.0000058490566, +0.0000058490566, +0.0000000000000, -0.0000230188679, -0.0000345283019, -0.0000345283019, -0.0000115094340, +0.0000230188679, +0.0000633962264, +0.0000920754717, +0.0000920754717, +0.0000749056604, +0.0000633962264, +0.0000230188679, -0.0000173584906, -0.0000518867925, -0.0000690566038, -0.0000690566038, -0.0000749056604, -0.0000749056604, -0.0000518867925, +0.0000115094340, +0.0001035849057, +0.0001843396226, +0.0002073584906, +0.0001611320755, +0.0000690566038, -0.0000518867925, -0.0001843396226, -0.0002590566038, -0.0002188679245, -0.0000518867925, +0.0001150943396, +0.0001958490566, +0.0001843396226, +0.0001150943396, +0.0000288679245, -0.0000230188679, -0.0000690566038, -0.0000864150943, -0.0000288679245, +0.0000633962264, +0.0001209433962, +0.0001381132075, +0.0001209433962, +0.0000403773585, -0.0000633962264, -0.0001035849057, -0.0000575471698, -0.0000173584906, -0.0000345283019, -0.0000749056604, -0.0000518867925, +0.0000115094340, +0.0000575471698, +0.0000805660377, +0.0001035849057, +0.0000979245283, +0.0000575471698, +0.0000230188679, +0.0000058490566, -0.0000115094340, -0.0000518867925, -0.0000864150943, -0.0000979245283, -0.0000518867925, +0.0000058490566, +0.0000345283019, +0.0000345283019, +0.0000518867925, +0.0000460377358, +0.0000403773585, +0.0000460377358, +0.0000288679245, -0.0000230188679, -0.0000805660377, -0.0001035849057, -0.0000749056604, -0.0000403773585, -0.0000230188679, +0.0000115094340, +0.0000518867925, +0.0000403773585, +0.0000115094340, +0.0000058490566, +0.0000288679245, +0.0000460377358, +0.0000345283019, +0.0000058490566, -0.0000403773585, -0.0000920754717, -0.0001035849057, -0.0000749056604, -0.0000518867925, +0.0000000000000, +0.0000633962264, +0.0001150943396, +0.0000805660377, +0.0000000000000, -0.0000633962264, -0.0000805660377, -0.0000864150943, -0.0000690566038, -0.0000403773585, +0.0000000000000, +0.0000230188679, +0.0000288679245, +0.0000345283019, +0.0000575471698, +0.0000690566038, +0.0000230188679, -0.0000403773585, -0.0000979245283, -0.0001324528302, -0.0001381132075, -0.0000920754717, -0.0000230188679, +0.0000460377358, +0.0001035849057, +0.0001266037736, +0.0000864150943, +0.0000403773585, +0.0000000000000, -0.0000575471698, -0.0001266037736, -0.0001324528302, -0.0000460377358, +0.0000749056604, +0.0001728301887, +0.0001900000000, +0.0001381132075, +0.0000518867925, -0.0000403773585, -0.0001266037736, -0.0001324528302, -0.0000575471698, +0.0000288679245, +0.0000690566038, +0.0000749056604, +0.0000575471698, +0.0000460377358, +0.0000173584906, -0.0000230188679, -0.0000805660377, -0.0000979245283, -0.0000749056604, -0.0000058490566, +0.0000864150943, +0.0001381132075, +0.0001035849057, +0.0000518867925, +0.0000000000000, -0.0000518867925, -0.0001209433962, -0.0001496226415, -0.0000979245283, +0.0000000000000, +0.0000864150943, +0.0001324528302, +0.0001554716981, +0.0001439622642, +0.0000920754717, +0.0000000000000, -0.0000805660377, -0.0000864150943, -0.0000518867925, -0.0000518867925, -0.0000518867925, +0.0000000000000, +0.0000518867925, +0.0000288679245, -0.0000230188679, -0.0000230188679, +0.0000115094340, +0.0000403773585, +0.0000403773585, +0.0000345283019, +0.0000345283019, +0.0000403773585, +0.0000115094340, -0.0000173584906, -0.0000633962264, -0.0001150943396, -0.0001439622642, -0.0001035849057, -0.0000173584906, +0.0000690566038, +0.0001150943396, +0.0000864150943, +0.0000058490566, -0.0000633962264, -0.0000920754717, -0.0000690566038, -0.0000288679245, +0.0000173584906, +0.0000403773585, +0.0000288679245, -0.0000058490566, -0.0000518867925, -0.0000633962264, -0.0000115094340, +0.0000633962264, +0.0001381132075, +0.0001611320755, +0.0001094339623, +0.0000000000000, -0.0001381132075, -0.0002130188679, -0.0001496226415, +0.0000000000000, +0.0001381132075, +0.0001728301887, +0.0001209433962, +0.0000518867925, +0.0000000000000, -0.0000633962264, -0.0001324528302, -0.0001381132075, -0.0000749056604, +0.0000000000000, +0.0000518867925, +0.0000749056604, +0.0000805660377, +0.0000575471698, +0.0000000000000, -0.0000403773585, -0.0000460377358, -0.0000345283019, -0.0000288679245, -0.0000173584906, +0.0000460377358, +0.0001266037736, +0.0001324528302, +0.0000403773585, -0.0000288679245, -0.0000345283019, +0.0000000000000, +0.0000058490566, +0.0000000000000, -0.0000058490566, -0.0000230188679, -0.0000460377358, -0.0000403773585, +0.0000000000000, +0.0000575471698, +0.0000805660377, +0.0000518867925, +0.0000230188679, +0.0000115094340, +0.0000230188679, +0.0000173584906, +0.0000058490566, +0.0000058490566, +0.0000173584906, +0.0000288679245, +0.0000460377358, +0.0000288679245, -0.0000058490566, -0.0000403773585, -0.0000345283019, -0.0000058490566, +0.0000058490566, +0.0000173584906, +0.0000230188679, +0.0000115094340, +0.0000000000000, +0.0000000000000, +0.0000058490566, +0.0000288679245, +0.0000345283019, +0.0000460377358, +0.0000403773585, +0.0000173584906, +0.0000000000000, -0.0000058490566, -0.0000288679245, -0.0000518867925, -0.0000403773585, +0.0000000000000, +0.0000173584906, +0.0000288679245, +0.0000230188679, +0.0000288679245, +0.0000345283019, +0.0000230188679, +0.0000058490566, +0.0000000000000, -0.0000115094340, -0.0000345283019, -0.0000403773585, -0.0000288679245, +0.0000000000000, +0.0000173584906, +0.0000403773585, +0.0000345283019, +0.0000345283019, +0.0000173584906, +0.0000058490566, +0.0000000000000, +0.0000058490566, +0.0000058490566, +0.0000000000000, -0.0000173584906, -0.0000230188679, -0.0000115094340, +0.0000000000000, +0.0000115094340, +0.0000115094340, +0.0000058490566, -0.0000058490566, -0.0000230188679, -0.0000230188679, +0.0000000000000, +0.0000115094340, +0.0000230188679, +0.0000115094340, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000058490566, +0.0000058490566, +0.0000058490566, +0.0000058490566, +0.0000000000000, -0.0000058490566, -0.0000173584906, -0.0000173584906, -0.0000058490566, +0.0000000000000, +0.0000058490566, +0.0000115094340, +0.0000058490566, +0.0000058490566, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000058490566, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000058490566, +0.0000058490566, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/06-fender-68-vibrolux-at4050.h000066400000000000000000002554571247673406200260420ustar00rootroot00000000000000float fender_68_vibrolux_at4050[] = { +0.0000000000000, -0.0000082228117, -0.0000244031830, +0.0000000000000, +0.0000485411141, +0.0000485411141, +0.0000082228117, -0.0000082228117, +0.0000000000000, +0.0000405835544, +0.0000405835544, +0.0000000000000, -0.0000082228117, -0.0000567639257, -0.0001376657825, -0.0001294429708, +0.0000000000000, +0.0001376657825, +0.0001779840849, +0.0000809018568, -0.0000485411141, -0.0000729442971, -0.0000082228117, -0.0000809018568, -0.0001376657825, +0.0000729442971, +0.0003641909814, +0.0003156498674, -0.0000647214854, -0.0004450928382, -0.0003885941645, +0.0001132625995, +0.0005100795756, +0.0002832891247, -0.0002832891247, -0.0005100795756, -0.0002185676393, +0.0001132625995, +0.0003156498674, +0.0002591511936, -0.0000567639257, -0.0003724137931, -0.0004615384615, -0.0002185676393, +0.0004615384615, +0.0011413793103, +0.0008580901857, -0.0001456233422, -0.0007042440318, -0.0005503978780, -0.0002265251989, -0.0001214854111, -0.0002509283820, -0.0002994694960, +0.0001618037135, +0.0006312997347, +0.0001456233422, -0.0005100795756, -0.0001941644562, +0.0004938992042, +0.0006718832891, +0.0002103448276, -0.0005748010610, -0.0009228116711, -0.0002509283820, +0.0007042440318, +0.0009389920424, +0.0004938992042, +0.0000000000000, -0.0007366047745, -0.0012628647215, -0.0005989389920, +0.0006151193634, +0.0011819628647, +0.0006474801061, -0.0005989389920, -0.0014246684350, -0.0006798408488, +0.0008257294430, +0.0010119363395, +0.0001132625995, -0.0002591511936, -0.0000809018568, +0.0002915119363, +0.0006233421751, +0.0002429708223, -0.0003156498674, -0.0000970822281, +0.0000891246684, -0.0007204244032, -0.0013599469496, -0.0007366047745, +0.0002753315650, +0.0008904509284, +0.0012546419098, +0.0008742705570, -0.0001779840849, -0.0008257294430, -0.0009472148541, -0.0006151193634, +0.0006395225464, +0.0018700265252, +0.0009389920424, -0.0010360742706, -0.0016594164456, -0.0004127320955, +0.0013355437666, +0.0019588859416, +0.0002103448276, -0.0021856763926, -0.0021936339523, -0.0002103448276, +0.0008660477454, +0.0007610079576, +0.0007527851459, +0.0002509283820, -0.0005503978780, -0.0005100795756, -0.0003885941645, +0.0001132625995, +0.0015785145889, +0.0020236074271, +0.0004856763926, -0.0007851458886, -0.0005748010610, -0.0009957559682, -0.0018294429708, -0.0011169761273, +0.0001862068966, +0.0011737400531, +0.0011251989390, -0.0010604774536, -0.0025419098143, +0.0003318302387, +0.0043549071618, +0.0036750663130, -0.0003965517241, -0.0037156498674, -0.0040960212202, -0.0007610079576, +0.0039665782493, +0.0045087533156, +0.0013437665782, -0.0011413793103, -0.0022259946950, -0.0030679045093, -0.0015299734748, +0.0016026525199, +0.0022259946950, -0.0002753315650, -0.0022907161804, -0.0034482758621, -0.0005827586207, +0.0042336870027, +0.0048326259947, +0.0003318302387, -0.0006557029178, +0.0017000000000, +0.0019265251989, -0.0013437665782, -0.0021936339523, +0.0003156498674, +0.0074795755968, +0.0089042440318, -0.0048649867374, -0.0242846153846, -0.0174928381963, -0.0015541114058, +0.0344920424403, +0.0311408488064, -0.0519283819629, -0.0749501326260, +0.0397538461538, +0.2236769230769, +0.2119068965517, -0.1057673740053, -0.2652275862069, -0.1026750663130, -0.0213702917772, -0.0821870026525, -0.0352450928382, +0.0840488063660, +0.0248026525199, -0.0184482758621, +0.0613265251989, +0.0332132625995, -0.0287771883289, -0.0204474801061, -0.0253368700265, +0.0206013262599, +0.0287042440318, -0.0096084880637, -0.0008904509284, -0.0020318302387, -0.0093251989390, -0.0075525198939, -0.0052453580902, +0.0042901856764, +0.0016514588859, +0.0039259946950, +0.0060710875332, +0.0001053050398, +0.0083135278515, +0.0241469496021, +0.0221718832891, +0.0038450928382, -0.0323389920424, -0.0445864721485, +0.0038127320955, +0.0431697612732, +0.0243896551724, +0.0110819628647, +0.0172257294430, -0.0093172413793, -0.0178005305040, +0.0070021220159, +0.0309546419098, +0.0365644562334, +0.0222283819629, +0.0112275862069, -0.0119721485411, -0.0250374005305, -0.0311246684350, -0.0166511936340, +0.0101185676393, +0.0108145888594, -0.0145222811671, +0.0043145888594, +0.0244708222812, -0.0067753315650, -0.0299509283820, -0.0077466843501, +0.0253854111406, +0.0201562334218, +0.0094466843501, +0.0008498673740, -0.0031732095491, -0.0022745358090, +0.0009795755968, +0.0141175066313, +0.0250291777188, +0.0096005305040, -0.0124419098143, -0.0226413793103, -0.0237180371353, -0.0110575596817, +0.0044925729443, +0.0035456233422, -0.0108310344828, -0.0059334217507, +0.0018132625995, -0.0014408488064, +0.0024689655172, +0.0080543766578, +0.0093496021220, +0.0146193633952, +0.0227546419098, +0.0212732095491, +0.0039015915119, -0.0078114058355, -0.0043954907162, -0.0066782493369, -0.0080949602122, +0.0017403183024, +0.0110819628647, +0.0095923076923, -0.0003238726790, -0.0059984084881, -0.0082000000000, -0.0066376657825, +0.0003238726790, +0.0009633952255, -0.0013031830239, +0.0018374005305, +0.0011493368700, -0.0033917771883, -0.0011413793103, +0.0040798408488, +0.0046787798408, +0.0003076923077, -0.0032217506631, -0.0038206896552, +0.0030517241379, +0.0060307692308, +0.0033594164456, -0.0014246684350, -0.0057554376658, -0.0049379310345, -0.0082729442971, -0.0140363395225, -0.0044198938992, +0.0077628647215, +0.0059740053050, +0.0027278514589, -0.0024042440318, -0.0039583554377, +0.0032299734748, +0.0044763925729, -0.0022259946950, -0.0051644562334, -0.0028007957560, +0.0018862068966, +0.0011493368700, -0.0052374005305, -0.0065405835544, -0.0034647214854, -0.0013761273210, -0.0014005305040, +0.0002994694960, +0.0020641909814, +0.0012222811671, +0.0011169761273, -0.0008013262599, -0.0070183023873, -0.0067188328912, -0.0004127320955, +0.0019265251989, +0.0015055702918, +0.0025419098143, -0.0008095490716, -0.0046708222812, +0.0006474801061, +0.0067026525199, +0.0019103448276, -0.0037480106101, -0.0038774535809, -0.0031488063660, -0.0042740053050, -0.0030761273210, +0.0000000000000, -0.0021533156499, -0.0054559681698, -0.0030114058355, +0.0023395225464, +0.0005180371353, -0.0035294429708, +0.0003400530504, +0.0037559681698, +0.0007689655172, -0.0014976127321, -0.0019750663130, -0.0044602122016, -0.0028816976127, -0.0004856763926, -0.0062331564987, -0.0080625994695, -0.0011090185676, +0.0018050397878, +0.0000891246684, +0.0024122015915, +0.0022259946950, -0.0026307692308, -0.0017970822281, +0.0027846153846, -0.0007448275862, -0.0051482758621, -0.0030761273210, +0.0001941644562, -0.0018941644562, -0.0075363395225, -0.0048732095491, +0.0050997347480, +0.0066944297082, +0.0006636604775, +0.0001214854111, +0.0016190981432, +0.0003965517241, +0.0025742705570, +0.0043631299735, -0.0014328912467, -0.0041769230769, -0.0008660477454, -0.0012546419098, -0.0031488063660, +0.0003238726790, +0.0029708222812, +0.0005909814324, +0.0014732095491, +0.0032461538462, +0.0007851458886, -0.0000970822281, +0.0015055702918, +0.0013679045093, +0.0009228116711, +0.0007042440318, +0.0015217506631, +0.0013517241379, +0.0016432360743, +0.0036265251989, +0.0025742705570, -0.0024607427056, -0.0065729442971, -0.0049297082228, -0.0021533156499, -0.0015864721485, -0.0014084880637, +0.0014570291777, +0.0043793103448, +0.0032702917772, +0.0032135278515, +0.0039665782493, +0.0012222811671, -0.0011090185676, -0.0005424403183, -0.0000729442971, -0.0002023872679, +0.0000244031830, -0.0009633952255, -0.0029302387268, -0.0007448275862, +0.0018700265252, +0.0003400530504, +0.0002994694960, +0.0000244031830, -0.0008904509284, +0.0007448275862, +0.0021612732095, +0.0017241379310, -0.0000161803714, +0.0011493368700, +0.0039259946950, -0.0008822281167, -0.0050188328912, -0.0011657824934, +0.0010846153846, -0.0015541114058, -0.0002915119363, +0.0007366047745, -0.0002753315650, +0.0028978779841, +0.0050755968170, +0.0030517241379, +0.0003724137931, -0.0009472148541, -0.0002023872679, -0.0016270557029, -0.0040312997347, -0.0017000000000, -0.0013923076923, -0.0017888594164, +0.0012546419098, +0.0040877984085, +0.0058848806366, +0.0032785145889, -0.0024042440318, -0.0028251989390, +0.0005180371353, +0.0028655172414, +0.0010037135279, -0.0031084880637, -0.0018456233422, +0.0006474801061, +0.0014893899204, +0.0000082228117, -0.0050267904509, -0.0041039787798, +0.0022421750663, +0.0028816976127, +0.0011169761273, +0.0004533156499, +0.0020803713528, +0.0024851458886, -0.0005503978780, -0.0016026525199, -0.0012546419098, -0.0028899204244, -0.0001294429708, +0.0046222811671, +0.0021209549072, -0.0027522546419, -0.0032623342175, -0.0007689655172, +0.0020480106101, +0.0039421750663, +0.0005586206897, -0.0021533156499, +0.0022098143236, +0.0046708222812, -0.0005989389920, -0.0052129973475, -0.0032623342175, +0.0005909814324, +0.0013923076923, -0.0014167108753, -0.0027684350133, -0.0008822281167, -0.0009551724138, +0.0001376657825, +0.0048973474801, +0.0040312997347, -0.0013599469496, -0.0027360742706, +0.0007933687003, +0.0028413793103, -0.0002753315650, -0.0022180371353, -0.0014246684350, -0.0011657824934, -0.0014490716180, -0.0005748010610, +0.0009795755968, +0.0004289124668, -0.0008580901857, +0.0006636604775, +0.0002915119363, -0.0024607427056, -0.0005503978780, -0.0002347480106, -0.0021371352785, -0.0012061007958, -0.0014570291777, +0.0008742705570, +0.0038854111406, +0.0013193633952, +0.0000405835544, +0.0024527851459, +0.0008580901857, -0.0025742705570, -0.0035859416446, -0.0020641909814, -0.0006636604775, -0.0005586206897, +0.0005180371353, +0.0010928381963, +0.0002832891247, +0.0002185676393, +0.0004856763926, +0.0011169761273, +0.0027602122016, +0.0012061007958, -0.0003965517241, -0.0004533156499, -0.0004450928382, +0.0001214854111, -0.0013599469496, -0.0032299734748, -0.0008822281167, +0.0016917771883, +0.0013679045093, +0.0009875331565, +0.0008095490716, +0.0005018567639, -0.0012061007958, -0.0015379310345, +0.0004209549072, -0.0009551724138, -0.0030761273210, -0.0009145888594, +0.0027360742706, +0.0032623342175, +0.0005503978780, -0.0006151193634, -0.0002185676393, -0.0003156498674, -0.0005018567639, -0.0009228116711, -0.0005342175066, +0.0007204244032, +0.0013517241379, -0.0007204244032, -0.0016676392573, +0.0012952254642, +0.0015055702918, -0.0013114058355, -0.0011331564987, -0.0006233421751, -0.0019185676393, -0.0008419098143, +0.0014814323607, +0.0016026525199, +0.0006312997347, +0.0005586206897, -0.0009066312997, -0.0012222811671, -0.0005262599469, -0.0012384615385, +0.0003076923077, +0.0004209549072, -0.0014084880637, +0.0006233421751, +0.0021047745358, +0.0012952254642, +0.0004289124668, -0.0015785145889, -0.0008095490716, +0.0021371352785, +0.0021856763926, -0.0008984084881, -0.0018538461538, +0.0000405835544, +0.0000485411141, +0.0004938992042, +0.0007527851459, -0.0005748010610, -0.0001132625995, +0.0010442970822, +0.0003400530504, -0.0020803713528, -0.0024366047745, -0.0008498673740, -0.0008336870027, +0.0006312997347, +0.0014167108753, +0.0009551724138, +0.0030437665782, +0.0035456233422, +0.0019912466844, +0.0014328912467, -0.0002671087533, -0.0026307692308, -0.0031811671088, -0.0006962864721, +0.0011331564987, -0.0008175066313, -0.0017241379310, -0.0000891246684, +0.0013517241379, +0.0008984084881, +0.0000082228117, -0.0002671087533, -0.0017161803714, -0.0018212201592, +0.0004127320955, +0.0009310344828, +0.0018294429708, +0.0035374005305, +0.0016026525199, -0.0008822281167, +0.0005180371353, +0.0019103448276, +0.0010198938992, -0.0013275862069, -0.0033997347480, -0.0021774535809, -0.0008580901857, -0.0010766578249, +0.0018456233422, +0.0039907161804, +0.0012790450928, +0.0002023872679, +0.0014893899204, -0.0000891246684, -0.0008580901857, +0.0015623342175, +0.0007933687003, -0.0013517241379, -0.0010684350133, -0.0000891246684, +0.0003076923077, +0.0001456233422, -0.0005018567639, -0.0003156498674, +0.0018538461538, +0.0034564986737, +0.0026469496021, +0.0010442970822, +0.0006395225464, +0.0005827586207, +0.0007286472149, -0.0003076923077, -0.0012952254642, +0.0003562334218, +0.0011331564987, -0.0009228116711, -0.0011169761273, -0.0000567639257, -0.0004209549072, -0.0000485411141, +0.0001456233422, -0.0000809018568, +0.0000082228117, +0.0016026525199, +0.0032379310345, +0.0018456233422, -0.0005100795756, +0.0004209549072, +0.0013923076923, +0.0003238726790, -0.0006474801061, +0.0001053050398, +0.0003480106101, -0.0008984084881, -0.0001376657825, +0.0002347480106, -0.0014408488064, -0.0006312997347, +0.0011331564987, +0.0015217506631, +0.0027522546419, +0.0021936339523, -0.0000244031830, -0.0013437665782, -0.0013355437666, +0.0001214854111, +0.0003238726790, -0.0002753315650, -0.0004450928382, -0.0020480106101, -0.0031732095491, -0.0019832891247, +0.0010119363395, +0.0033188328912, +0.0030923076923, +0.0014084880637, +0.0006880636605, +0.0011737400531, +0.0005827586207, -0.0021127320955, -0.0025175066313, -0.0003480106101, +0.0003885941645, -0.0016917771883, -0.0020397877984, +0.0005180371353, -0.0003724137931, -0.0011169761273, +0.0014893899204, +0.0025498673740, +0.0009472148541, +0.0009310344828, +0.0014976127321, +0.0000970822281, -0.0019588859416, -0.0011981432361, +0.0001456233422, -0.0008095490716, -0.0019347480106, -0.0014814323607, -0.0004533156499, -0.0012628647215, -0.0013923076923, +0.0009875331565, +0.0022827586207, +0.0009713527851, -0.0000323607427, -0.0001214854111, -0.0003641909814, -0.0008336870027, -0.0016755968170, -0.0018132625995, -0.0001376657825, +0.0006312997347, -0.0018374005305, -0.0035212201592, -0.0021774535809, -0.0004450928382, -0.0006474801061, -0.0009957559682, +0.0008660477454, +0.0035212201592, +0.0031246684350, +0.0000161803714, -0.0029061007958, -0.0029384615385, +0.0003156498674, +0.0025984084881, +0.0007933687003, -0.0015702917772, -0.0020885941645, -0.0014814323607, -0.0015217506631, -0.0020559681698, -0.0012790450928, +0.0000970822281, +0.0012305039788, +0.0010198938992, +0.0001700265252, +0.0008175066313, +0.0010766578249, -0.0004371352785, -0.0011819628647, -0.0012061007958, -0.0013193633952, -0.0004615384615, +0.0012061007958, +0.0011657824934, +0.0005262599469, -0.0006233421751, -0.0021127320955, -0.0014328912467, -0.0005180371353, -0.0001053050398, +0.0009795755968, +0.0023880636605, +0.0027440318302, +0.0010281167109, -0.0004615384615, +0.0002429708223, -0.0002994694960, -0.0023636604775, -0.0025580901857, -0.0007933687003, +0.0011090185676, +0.0016026525199, +0.0003156498674, -0.0006798408488, -0.0000970822281, -0.0000647214854, +0.0005827586207, +0.0020318302387, +0.0017241379310, +0.0008498673740, -0.0004856763926, -0.0025984084881, -0.0023071618037, +0.0006557029178, +0.0005827586207, -0.0013031830239, -0.0000891246684, +0.0014167108753, -0.0004938992042, -0.0015217506631, +0.0005342175066, +0.0012222811671, -0.0000647214854, -0.0004938992042, -0.0006474801061, +0.0005989389920, +0.0031732095491, +0.0029787798408, +0.0005989389920, -0.0013031830239, -0.0005586206897, +0.0006798408488, -0.0006071618037, -0.0024931034483, -0.0013599469496, +0.0013843501326, +0.0019750663130, -0.0008904509284, -0.0021612732095, -0.0002347480106, +0.0013114058355, +0.0008336870027, +0.0001456233422, +0.0016352785146, +0.0019832891247, +0.0000567639257, -0.0004127320955, -0.0000161803714, -0.0011007957560, -0.0018538461538, -0.0010198938992, +0.0001376657825, +0.0008175066313, +0.0009875331565, +0.0013843501326, +0.0023960212202, +0.0027198938992, +0.0012870026525, -0.0003318302387, -0.0012061007958, -0.0015541114058, -0.0014246684350, -0.0015217506631, -0.0013275862069, -0.0002994694960, +0.0007124668435, +0.0007448275862, -0.0004938992042, -0.0010281167109, +0.0005827586207, +0.0013355437666, +0.0011737400531, +0.0011819628647, +0.0011251989390, +0.0019023872679, +0.0017323607427, +0.0000970822281, -0.0007042440318, -0.0009957559682, -0.0008904509284, -0.0003885941645, -0.0003803713528, -0.0002671087533, -0.0003400530504, +0.0004615384615, +0.0015623342175, +0.0014328912467, +0.0005262599469, +0.0001862068966, +0.0002671087533, -0.0001294429708, -0.0000161803714, +0.0008742705570, +0.0012790450928, +0.0007851458886, -0.0005018567639, -0.0010846153846, -0.0001053050398, +0.0008257294430, -0.0003318302387, -0.0022342175066, -0.0019671087533, +0.0000000000000, +0.0015702917772, +0.0014976127321, -0.0001941644562, -0.0013599469496, -0.0000970822281, +0.0011657824934, +0.0005424403183, -0.0008742705570, -0.0016755968170, -0.0005586206897, +0.0005503978780, -0.0001053050398, +0.0000485411141, +0.0004856763926, -0.0005989389920, -0.0003480106101, +0.0002994694960, -0.0004450928382, -0.0011413793103, -0.0012143236074, -0.0001294429708, +0.0010604774536, +0.0013275862069, +0.0005748010610, -0.0007851458886, -0.0014976127321, -0.0011737400531, +0.0000000000000, +0.0009472148541, -0.0001618037135, -0.0018212201592, -0.0016190981432, +0.0000647214854, +0.0017888594164, +0.0013193633952, -0.0003156498674, -0.0008175066313, +0.0003318302387, +0.0022098143236, +0.0030840848806, +0.0015137931034, -0.0008742705570, -0.0017485411141, -0.0013843501326, -0.0011169761273, -0.0012628647215, -0.0007610079576, +0.0002753315650, +0.0000809018568, -0.0013275862069, -0.0015217506631, -0.0000485411141, +0.0025904509284, +0.0029302387268, -0.0007448275862, -0.0032623342175, -0.0014732095491, +0.0006151193634, +0.0000161803714, -0.0018862068966, -0.0013599469496, +0.0013031830239, +0.0026389920424, +0.0018941644562, +0.0004127320955, -0.0010928381963, -0.0015864721485, -0.0004856763926, +0.0005180371353, -0.0001779840849, -0.0015055702918, -0.0011251989390, +0.0006798408488, +0.0020641909814, +0.0017241379310, +0.0000647214854, -0.0001779840849, +0.0007527851459, +0.0000809018568, -0.0014814323607, -0.0014976127321, -0.0007933687003, -0.0003885941645, +0.0007689655172, +0.0016270557029, +0.0009551724138, +0.0002832891247, -0.0000809018568, -0.0006233421751, -0.0006312997347, +0.0002753315650, +0.0005018567639, -0.0004371352785, -0.0005827586207, +0.0000244031830, +0.0002671087533, +0.0011331564987, +0.0010037135279, +0.0000244031830, -0.0008419098143, -0.0011007957560, -0.0000405835544, +0.0006557029178, -0.0007366047745, -0.0013517241379, +0.0003238726790, +0.0018779840849, +0.0013517241379, -0.0001214854111, -0.0005424403183, -0.0001700265252, -0.0000082228117, -0.0003965517241, -0.0008419098143, -0.0000970822281, +0.0006880636605, -0.0003400530504, -0.0011575596817, -0.0006636604775, -0.0006962864721, -0.0004777188329, +0.0006071618037, +0.0014814323607, +0.0008822281167, -0.0001941644562, -0.0000485411141, +0.0002347480106, -0.0001862068966, -0.0005989389920, +0.0002429708223, +0.0013031830239, +0.0006798408488, +0.0004127320955, +0.0009795755968, +0.0003724137931, -0.0007689655172, -0.0012143236074, -0.0007689655172, +0.0001779840849, +0.0007204244032, +0.0008984084881, +0.0000405835544, -0.0014005305040, -0.0017888594164, -0.0011575596817, -0.0003156498674, +0.0003885941645, +0.0006395225464, +0.0001941644562, -0.0001538461538, +0.0007610079576, +0.0017000000000, +0.0009795755968, -0.0000809018568, -0.0002915119363, -0.0006151193634, -0.0008580901857, -0.0001214854111, +0.0007124668435, +0.0001862068966, -0.0008498673740, -0.0008175066313, -0.0002753315650, +0.0000082228117, -0.0004694960212, -0.0013031830239, -0.0003641909814, +0.0010198938992, +0.0006474801061, -0.0001214854111, -0.0002429708223, +0.0001618037135, +0.0003156498674, -0.0008419098143, -0.0009472148541, +0.0004450928382, +0.0006312997347, +0.0003238726790, +0.0007610079576, +0.0008175066313, -0.0000809018568, -0.0006962864721, -0.0007286472149, -0.0007851458886, -0.0002753315650, +0.0004127320955, +0.0004450928382, +0.0006071618037, +0.0003724137931, -0.0006312997347, -0.0009310344828, +0.0001294429708, +0.0013843501326, +0.0012546419098, -0.0003885941645, -0.0010928381963, +0.0000567639257, +0.0010037135279, +0.0003641909814, -0.0002429708223, -0.0002832891247, -0.0004289124668, -0.0002671087533, +0.0006636604775, +0.0009145888594, -0.0002347480106, -0.0010522546419, -0.0002671087533, +0.0007448275862, +0.0001456233422, -0.0008904509284, -0.0009145888594, -0.0013114058355, -0.0014976127321, +0.0001214854111, +0.0018294429708, +0.0019671087533, +0.0008660477454, -0.0001779840849, +0.0000405835544, -0.0005180371353, -0.0020236074271, -0.0015864721485, -0.0002023872679, +0.0005586206897, +0.0017485411141, +0.0016432360743, +0.0001618037135, +0.0002265251989, +0.0009389920424, -0.0002753315650, -0.0020721485411, -0.0023557029178, -0.0009875331565, +0.0009633952255, +0.0011899204244, -0.0002671087533, -0.0005909814324, +0.0008742705570, +0.0015864721485, +0.0006395225464, +0.0002591511936, +0.0000161803714, -0.0001376657825, +0.0002347480106, +0.0005180371353, -0.0004450928382, -0.0009957559682, -0.0001941644562, -0.0002994694960, -0.0011899204244, -0.0000567639257, +0.0015946949602, +0.0018132625995, +0.0008336870027, -0.0002185676393, +0.0002103448276, -0.0003965517241, -0.0017485411141, -0.0003885941645, +0.0005018567639, -0.0003724137931, +0.0000082228117, +0.0013275862069, +0.0016594164456, +0.0004533156499, -0.0013843501326, -0.0026954907162, -0.0022018567639, +0.0002265251989, +0.0014893899204, +0.0011251989390, +0.0016026525199, +0.0020397877984, +0.0008580901857, -0.0005748010610, -0.0004047745358, +0.0002671087533, -0.0005909814324, -0.0012546419098, -0.0007204244032, -0.0006312997347, -0.0005586206897, +0.0009389920424, +0.0021127320955, +0.0006395225464, -0.0009875331565, -0.0009389920424, -0.0004127320955, +0.0002915119363, +0.0001618037135, -0.0001538461538, +0.0006718832891, +0.0005827586207, -0.0000161803714, -0.0003156498674, -0.0007042440318, -0.0000567639257, +0.0006718832891, +0.0001700265252, -0.0001376657825, +0.0006557029178, +0.0010198938992, +0.0003318302387, -0.0007851458886, -0.0016352785146, -0.0015946949602, -0.0007286472149, +0.0003480106101, +0.0003480106101, +0.0000323607427, +0.0008336870027, +0.0006880636605, -0.0000161803714, +0.0001941644562, +0.0002347480106, +0.0002915119363, -0.0006798408488, -0.0028655172414, -0.0028169761273, -0.0008580901857, +0.0004533156499, +0.0025984084881, +0.0053588859416, +0.0054559681698, +0.0013517241379, -0.0029952254642, -0.0041931034483, -0.0034970822281, -0.0035941644562, -0.0026145888594, -0.0001053050398, +0.0005180371353, +0.0011657824934, +0.0029302387268, +0.0029061007958, +0.0013355437666, -0.0002915119363, -0.0011819628647, -0.0008984084881, -0.0008257294430, -0.0008660477454, -0.0008498673740, +0.0000485411141, +0.0021371352785, +0.0022098143236, +0.0007124668435, -0.0010846153846, -0.0023395225464, -0.0013679045093, +0.0000647214854, +0.0003400530504, -0.0001456233422, -0.0014167108753, -0.0000161803714, +0.0023798408488, +0.0021694960212, +0.0008257294430, -0.0008336870027, -0.0017564986737, -0.0013923076923, -0.0018618037135, -0.0012222811671, +0.0007610079576, +0.0018862068966, +0.0025580901857, +0.0018294429708, +0.0002509283820, -0.0008175066313, -0.0011090185676, -0.0003724137931, -0.0005909814324, -0.0023395225464, -0.0020641909814, +0.0008336870027, +0.0018538461538, -0.0004856763926, -0.0014246684350, +0.0021289124668, +0.0035535809019, +0.0003238726790, -0.0014893899204, -0.0005827586207, -0.0001618037135, -0.0005342175066, -0.0018456233422, -0.0021450928382, -0.0009389920424, +0.0001779840849, +0.0017485411141, +0.0035535809019, +0.0037641909814, +0.0016432360743, -0.0009551724138, -0.0025419098143, -0.0026145888594, -0.0017970822281, -0.0012466843501, -0.0004450928382, +0.0011413793103, +0.0023071618037, +0.0028493368700, +0.0023474801061, +0.0006557029178, -0.0010604774536, -0.0023718832891, -0.0016676392573, +0.0000567639257, +0.0005018567639, +0.0000161803714, -0.0010846153846, -0.0012628647215, +0.0003238726790, +0.0013437665782, +0.0009310344828, +0.0005180371353, -0.0000567639257, -0.0009389920424, -0.0013679045093, -0.0006636604775, +0.0000567639257, -0.0002265251989, -0.0004533156499, -0.0001376657825, +0.0002429708223, +0.0000323607427, -0.0004694960212, -0.0001214854111, +0.0005342175066, +0.0011331564987, +0.0015541114058, +0.0013355437666, +0.0011090185676, +0.0010604774536, -0.0001294429708, -0.0009066312997, +0.0005665782493, +0.0012870026525, -0.0004856763926, -0.0009875331565, -0.0005665782493, -0.0022421750663, -0.0036750663130, -0.0033835543767, -0.0021047745358, +0.0000323607427, +0.0020559681698, +0.0035132625995, +0.0045169761273, +0.0036265251989, +0.0009228116711, -0.0003803713528, -0.0000082228117, -0.0006880636605, -0.0024527851459, -0.0023312997347, -0.0003238726790, +0.0008498673740, -0.0003562334218, -0.0010928381963, +0.0000567639257, +0.0000244031830, -0.0017323607427, -0.0014976127321, -0.0001538461538, +0.0005262599469, +0.0012143236074, +0.0011169761273, +0.0002671087533, +0.0005665782493, +0.0014084880637, +0.0013599469496, +0.0006962864721, +0.0000000000000, -0.0008580901857, -0.0012952254642, -0.0007933687003, -0.0016190981432, -0.0022907161804, -0.0000729442971, +0.0018700265252, +0.0012870026525, +0.0010846153846, +0.0020885941645, +0.0025175066313, +0.0011007957560, -0.0013355437666, -0.0022583554377, -0.0010037135279, -0.0004127320955, -0.0018618037135, -0.0021289124668, +0.0004127320955, +0.0025742705570, +0.0022018567639, -0.0015217506631, -0.0055045092838, -0.0016190981432, +0.0062331564987, +0.0057148541114, -0.0002429708223, -0.0020965517241, +0.0006962864721, +0.0024689655172, +0.0002265251989, -0.0018941644562, -0.0013517241379, -0.0010442970822, -0.0017000000000, -0.0007771883289, -0.0003803713528, -0.0031246684350, -0.0039421750663, -0.0010846153846, +0.0027684350133, +0.0067106100796, +0.0069615384615, +0.0039827586207, +0.0021936339523, +0.0004694960212, -0.0012870026525, -0.0019103448276, -0.0021612732095, -0.0013599469496, -0.0008904509284, -0.0018212201592, -0.0023151193634, -0.0014490716180, +0.0005342175066, +0.0012952254642, +0.0007366047745, +0.0005018567639, +0.0000082228117, +0.0006395225464, +0.0022989389920, +0.0020318302387, -0.0003885941645, -0.0035132625995, -0.0034482758621, -0.0009066312997, +0.0001456233422, +0.0009310344828, +0.0014570291777, +0.0008580901857, +0.0005100795756, +0.0004371352785, +0.0006151193634, +0.0001862068966, -0.0009228116711, -0.0012708222812, -0.0012466843501, +0.0002915119363, +0.0028090185676, +0.0021127320955, -0.0017079575597, -0.0033432360743, -0.0017241379310, -0.0004533156499, +0.0005586206897, +0.0022665782493, +0.0021694960212, +0.0011090185676, +0.0008660477454, -0.0005586206897, -0.0008904509284, +0.0005909814324, +0.0002023872679, -0.0025660477454, -0.0025336870027, +0.0014570291777, +0.0039098143236, +0.0017809018568, -0.0013923076923, -0.0023636604775, -0.0006636604775, +0.0007448275862, -0.0001941644562, -0.0015055702918, -0.0019185676393, -0.0010037135279, +0.0013517241379, +0.0033270557029, +0.0021209549072, -0.0007689655172, -0.0016026525199, -0.0001053050398, +0.0010928381963, +0.0004127320955, -0.0015541114058, -0.0015299734748, +0.0003562334218, +0.0010119363395, -0.0000485411141, -0.0011251989390, -0.0011899204244, -0.0002915119363, +0.0001862068966, -0.0004777188329, -0.0006798408488, -0.0000485411141, +0.0004289124668, -0.0000323607427, -0.0015785145889, -0.0016676392573, +0.0000970822281, +0.0011575596817, +0.0017970822281, +0.0032299734748, +0.0029787798408, -0.0002023872679, -0.0029302387268, -0.0018538461538, -0.0000244031830, +0.0001700265252, -0.0007204244032, -0.0016352785146, -0.0012870026525, -0.0003724137931, -0.0000647214854, -0.0004533156499, -0.0012708222812, -0.0010846153846, +0.0001456233422, +0.0011251989390, +0.0019265251989, +0.0015541114058, +0.0009389920424, +0.0016594164456, +0.0017564986737, -0.0001618037135, -0.0024769230769, -0.0036103448276, -0.0028737400531, -0.0005424403183, +0.0012305039788, +0.0014490716180, +0.0013114058355, +0.0004450928382, -0.0003965517241, +0.0004047745358, -0.0002265251989, -0.0025580901857, -0.0026389920424, -0.0008660477454, +0.0000082228117, +0.0010360742706, +0.0020156498674, +0.0009551724138, +0.0001456233422, +0.0010928381963, +0.0013843501326, +0.0008257294430, -0.0001941644562, -0.0010766578249, -0.0002671087533, +0.0009145888594, +0.0008013262599, -0.0001618037135, +0.0000647214854, +0.0014976127321, +0.0007851458886, -0.0012708222812, -0.0013275862069, -0.0008984084881, -0.0012628647215, -0.0008336870027, +0.0013679045093, +0.0035779840849, +0.0026631299735, +0.0002103448276, +0.0001456233422, +0.0005018567639, -0.0009713527851, -0.0022180371353, -0.0015055702918, +0.0006151193634, +0.0027116710875, +0.0031649867374, +0.0014167108753, -0.0009066312997, -0.0013923076923, -0.0005018567639, +0.0000647214854, -0.0000161803714, -0.0004694960212, -0.0003724137931, +0.0004127320955, +0.0008095490716, -0.0007610079576, -0.0030840848806, -0.0028251989390, -0.0007204244032, +0.0013275862069, +0.0026066312997, +0.0020803713528, +0.0010846153846, +0.0014893899204, +0.0007042440318, -0.0007610079576, +0.0000647214854, +0.0010604774536, -0.0007689655172, -0.0025013262599, -0.0016352785146, -0.0007771883289, -0.0001779840849, +0.0011981432361, +0.0017079575597, +0.0005989389920, -0.0013193633952, -0.0022342175066, -0.0008660477454, +0.0007527851459, +0.0011169761273, +0.0005586206897, -0.0002915119363, +0.0000729442971, +0.0010198938992, +0.0008336870027, -0.0006151193634, -0.0013517241379, -0.0002347480106, +0.0003965517241, -0.0006718832891, -0.0014814323607, -0.0007933687003, +0.0009957559682, +0.0015217506631, +0.0002753315650, +0.0000891246684, +0.0006312997347, +0.0007851458886, +0.0007610079576, -0.0012708222812, -0.0036103448276, -0.0026389920424, +0.0001214854111, +0.0015299734748, +0.0009472148541, +0.0000891246684, -0.0003724137931, -0.0008742705570, -0.0005909814324, +0.0002429708223, +0.0007527851459, +0.0007366047745, -0.0000485411141, +0.0002994694960, +0.0012790450928, +0.0003724137931, -0.0008175066313, -0.0013437665782, -0.0015946949602, -0.0007124668435, -0.0001376657825, -0.0001941644562, +0.0008175066313, +0.0016917771883, +0.0011331564987, -0.0001862068966, -0.0000891246684, +0.0011090185676, +0.0005342175066, -0.0008498673740, -0.0004938992042, +0.0002915119363, +0.0005586206897, +0.0008498673740, +0.0008013262599, +0.0001618037135, -0.0009389920424, -0.0017647214854, -0.0019427055703, -0.0014976127321, -0.0002994694960, +0.0005909814324, +0.0003724137931, +0.0008660477454, +0.0012466843501, -0.0000567639257, -0.0014814323607, -0.0010928381963, -0.0002753315650, -0.0008175066313, -0.0009310344828, +0.0009875331565, +0.0019750663130, +0.0005665782493, -0.0003400530504, -0.0002023872679, -0.0001294429708, -0.0004047745358, -0.0003641909814, -0.0002265251989, -0.0005180371353, -0.0000809018568, +0.0009633952255, +0.0008742705570, -0.0002591511936, -0.0005665782493, +0.0003238726790, +0.0014167108753, +0.0012870026525, +0.0003641909814, -0.0008336870027, -0.0012708222812, -0.0005503978780, -0.0005909814324, -0.0008580901857, +0.0003400530504, +0.0013679045093, +0.0005018567639, -0.0005018567639, -0.0004289124668, +0.0006798408488, +0.0010119363395, +0.0001456233422, -0.0006312997347, -0.0004615384615, +0.0000405835544, +0.0004209549072, +0.0010846153846, +0.0015541114058, +0.0003156498674, -0.0010928381963, -0.0004694960212, +0.0006880636605, +0.0003480106101, -0.0006557029178, -0.0005342175066, -0.0001132625995, +0.0001700265252, +0.0006880636605, +0.0004289124668, -0.0002591511936, -0.0001862068966, -0.0001294429708, -0.0003803713528, -0.0000244031830, +0.0005424403183, +0.0007851458886, +0.0007933687003, -0.0001376657825, -0.0010766578249, +0.0001941644562, +0.0012870026525, +0.0000809018568, -0.0011899204244, -0.0014652519894, -0.0011169761273, -0.0004371352785, +0.0002509283820, +0.0009145888594, +0.0007448275862, +0.0003724137931, +0.0001456233422, -0.0001700265252, +0.0001214854111, -0.0001456233422, -0.0010119363395, -0.0006233421751, -0.0003238726790, -0.0008013262599, -0.0012222811671, -0.0003885941645, +0.0012061007958, +0.0008419098143, -0.0007366047745, -0.0005503978780, +0.0006395225464, +0.0007933687003, -0.0002591511936, -0.0007933687003, +0.0000323607427, +0.0013517241379, +0.0016755968170, +0.0007366047745, -0.0003318302387, -0.0011007957560, -0.0011657824934, -0.0002832891247, +0.0001700265252, -0.0003400530504, -0.0006798408488, +0.0000000000000, +0.0008257294430, +0.0008013262599, +0.0007366047745, +0.0010846153846, +0.0003724137931, -0.0010522546419, -0.0008257294430, +0.0001862068966, +0.0000000000000, -0.0009795755968, -0.0008419098143, +0.0004209549072, +0.0015055702918, +0.0012305039788, +0.0002915119363, -0.0004615384615, -0.0007366047745, -0.0009145888594, -0.0009389920424, -0.0001618037135, +0.0009472148541, +0.0009551724138, +0.0002509283820, +0.0002832891247, +0.0001214854111, -0.0010684350133, -0.0007527851459, +0.0007771883289, +0.0003885941645, -0.0005180371353, -0.0002429708223, +0.0000161803714, -0.0004047745358, -0.0013355437666, -0.0014490716180, +0.0003318302387, +0.0024445623342, +0.0024769230769, +0.0012143236074, +0.0013114058355, +0.0017079575597, -0.0000244031830, -0.0018212201592, -0.0016755968170, -0.0009472148541, -0.0010604774536, -0.0013355437666, -0.0002671087533, +0.0009145888594, +0.0008419098143, +0.0009633952255, +0.0013843501326, +0.0008175066313, -0.0001376657825, -0.0005342175066, -0.0000405835544, +0.0008419098143, +0.0013275862069, +0.0010604774536, +0.0003238726790, -0.0002753315650, +0.0001538461538, +0.0007933687003, +0.0001700265252, -0.0011169761273, -0.0012790450928, -0.0003641909814, +0.0005827586207, +0.0005748010610, +0.0002347480106, +0.0004209549072, +0.0000809018568, -0.0006395225464, -0.0006395225464, -0.0002994694960, -0.0003480106101, -0.0007448275862, -0.0004777188329, +0.0007610079576, +0.0015137931034, +0.0009228116711, +0.0000485411141, -0.0002509283820, +0.0001053050398, +0.0005424403183, -0.0001618037135, -0.0013923076923, -0.0011007957560, -0.0008822281167, -0.0011413793103, -0.0001618037135, +0.0004938992042, +0.0005424403183, +0.0009875331565, +0.0012466843501, +0.0014005305040, +0.0005748010610, -0.0009389920424, -0.0011899204244, -0.0004450928382, -0.0002185676393, -0.0003724137931, -0.0000244031830, +0.0008013262599, +0.0008742705570, +0.0004289124668, +0.0003965517241, -0.0000161803714, -0.0005503978780, -0.0003076923077, +0.0002832891247, +0.0005665782493, -0.0001618037135, -0.0015299734748, -0.0015785145889, -0.0002832891247, +0.0007610079576, +0.0009633952255, +0.0005989389920, +0.0002347480106, +0.0004209549072, +0.0007851458886, +0.0004450928382, -0.0003318302387, -0.0010442970822, -0.0014084880637, -0.0010198938992, -0.0003641909814, -0.0001132625995, -0.0004533156499, -0.0007933687003, -0.0009472148541, -0.0006071618037, +0.0007610079576, +0.0017726790451, +0.0007366047745, -0.0001132625995, -0.0002509283820, -0.0007689655172, -0.0006071618037, +0.0004615384615, +0.0009310344828, +0.0002994694960, -0.0010522546419, -0.0016514588859, -0.0007771883289, -0.0000567639257, +0.0002509283820, +0.0007204244032, +0.0007527851459, +0.0006557029178, +0.0004450928382, -0.0004777188329, -0.0013437665782, -0.0009713527851, -0.0001214854111, +0.0007204244032, +0.0011657824934, +0.0004371352785, -0.0004533156499, -0.0001941644562, +0.0003238726790, +0.0004047745358, -0.0000729442971, -0.0004289124668, +0.0000485411141, +0.0002994694960, +0.0003400530504, +0.0003724137931, -0.0003641909814, -0.0008095490716, -0.0000161803714, +0.0006071618037, -0.0000161803714, -0.0012546419098, -0.0010360742706, +0.0004533156499, +0.0012628647215, +0.0011169761273, +0.0000567639257, -0.0007042440318, +0.0000567639257, +0.0007933687003, -0.0000161803714, -0.0012870026525, -0.0015055702918, -0.0005909814324, +0.0003641909814, +0.0003400530504, -0.0000405835544, +0.0004533156499, +0.0012384615385, +0.0008013262599, -0.0002347480106, -0.0010442970822, -0.0007366047745, -0.0001132625995, -0.0001538461538, -0.0003562334218, -0.0002103448276, -0.0002429708223, -0.0004533156499, -0.0003562334218, -0.0000567639257, -0.0001132625995, +0.0002265251989, +0.0008742705570, +0.0002265251989, -0.0006151193634, -0.0002429708223, +0.0005665782493, +0.0007286472149, +0.0001053050398, -0.0003238726790, -0.0003318302387, -0.0002915119363, -0.0000729442971, +0.0003400530504, +0.0004777188329, -0.0000244031830, -0.0005827586207, +0.0000244031830, +0.0007366047745, +0.0003400530504, -0.0006395225464, -0.0012870026525, -0.0006233421751, +0.0007042440318, +0.0013517241379, +0.0014408488064, +0.0011413793103, +0.0009713527851, +0.0008336870027, -0.0003641909814, -0.0018538461538, -0.0018700265252, -0.0005342175066, +0.0003076923077, +0.0002429708223, +0.0007286472149, +0.0015137931034, +0.0013517241379, +0.0007286472149, +0.0003400530504, +0.0004615384615, +0.0000647214854, -0.0009875331565, -0.0009472148541, +0.0001132625995, +0.0006880636605, +0.0001941644562, -0.0005424403183, -0.0005018567639, -0.0002103448276, +0.0000082228117, +0.0000567639257, +0.0000323607427, +0.0003965517241, +0.0006962864721, +0.0011575596817, +0.0016594164456, +0.0005989389920, -0.0008175066313, -0.0009633952255, -0.0004856763926, +0.0000323607427, -0.0000809018568, -0.0009713527851, -0.0010522546419, -0.0005180371353, -0.0000647214854, +0.0005424403183, +0.0007448275862, +0.0005342175066, +0.0007771883289, +0.0007042440318, -0.0003156498674, -0.0012466843501, -0.0009551724138, +0.0002023872679, +0.0003803713528, -0.0003480106101, -0.0002023872679, +0.0001294429708, -0.0002915119363, -0.0005262599469, -0.0004047745358, -0.0002994694960, -0.0000970822281, +0.0002915119363, +0.0005748010610, +0.0002265251989, +0.0000000000000, +0.0001214854111, -0.0001779840849, -0.0005503978780, -0.0001294429708, +0.0003724137931, +0.0005665782493, +0.0008498673740, +0.0007610079576, -0.0004127320955, -0.0014005305040, -0.0008257294430, -0.0000405835544, +0.0003156498674, +0.0004209549072, +0.0000809018568, -0.0002023872679, +0.0002429708223, +0.0009551724138, +0.0010037135279, +0.0000000000000, -0.0006233421751, -0.0004450928382, -0.0002023872679, -0.0003480106101, -0.0010442970822, -0.0007610079576, +0.0006636604775, +0.0010198938992, +0.0005424403183, +0.0003641909814, +0.0000891246684, -0.0004371352785, -0.0005989389920, -0.0004533156499, -0.0003641909814, -0.0003965517241, +0.0001053050398, +0.0010442970822, +0.0007933687003, -0.0003076923077, -0.0003238726790, +0.0002103448276, +0.0000244031830, -0.0004777188329, -0.0005586206897, -0.0005100795756, -0.0002509283820, +0.0004450928382, +0.0005503978780, -0.0001862068966, -0.0007933687003, -0.0007448275862, +0.0004209549072, +0.0017079575597, +0.0012546419098, -0.0004694960212, -0.0019347480106, -0.0018618037135, -0.0002832891247, +0.0010198938992, +0.0007933687003, -0.0000647214854, -0.0003480106101, +0.0003480106101, +0.0014005305040, +0.0014893899204, +0.0003076923077, -0.0010766578249, -0.0011090185676, +0.0000970822281, +0.0002591511936, -0.0007042440318, -0.0013355437666, -0.0011981432361, -0.0004371352785, +0.0003724137931, +0.0010928381963, +0.0017161803714, +0.0014490716180, +0.0005342175066, -0.0002591511936, -0.0004047745358, -0.0000809018568, +0.0000323607427, +0.0000809018568, -0.0004209549072, -0.0014490716180, -0.0009472148541, +0.0008742705570, +0.0015379310345, +0.0007124668435, +0.0000567639257, +0.0001862068966, +0.0004289124668, +0.0002509283820, -0.0003480106101, -0.0007610079576, -0.0005018567639, -0.0001456233422, -0.0002915119363, -0.0005748010610, -0.0001376657825, +0.0007204244032, +0.0008660477454, +0.0003400530504, -0.0005342175066, -0.0011657824934, -0.0004615384615, +0.0005586206897, +0.0003562334218, -0.0005424403183, -0.0003965517241, +0.0013599469496, +0.0018779840849, -0.0002023872679, -0.0017161803714, -0.0010604774536, -0.0000323607427, +0.0003318302387, +0.0000485411141, -0.0004615384615, -0.0005665782493, -0.0002429708223, -0.0001618037135, -0.0006557029178, -0.0008257294430, -0.0001779840849, +0.0006880636605, +0.0009389920424, +0.0002103448276, -0.0003480106101, +0.0002347480106, +0.0009957559682, +0.0004533156499, -0.0010846153846, -0.0019103448276, -0.0006880636605, +0.0010928381963, +0.0012061007958, +0.0001294429708, -0.0000082228117, +0.0003803713528, +0.0000082228117, -0.0004938992042, -0.0007689655172, -0.0009875331565, -0.0004450928382, +0.0007933687003, +0.0011090185676, +0.0002509283820, -0.0002429708223, -0.0000405835544, +0.0000405835544, +0.0001538461538, +0.0000323607427, -0.0002265251989, +0.0000970822281, +0.0004450928382, +0.0005262599469, +0.0004371352785, -0.0001700265252, -0.0005748010610, -0.0000082228117, +0.0003480106101, -0.0004777188329, -0.0011981432361, -0.0005909814324, +0.0003400530504, +0.0007610079576, +0.0007851458886, +0.0000000000000, -0.0010119363395, -0.0011737400531, +0.0000000000000, +0.0010604774536, +0.0006395225464, -0.0003076923077, -0.0005342175066, +0.0001214854111, +0.0005586206897, -0.0003885941645, -0.0011331564987, -0.0001700265252, +0.0007771883289, -0.0001618037135, -0.0016917771883, -0.0011981432361, +0.0008013262599, +0.0015217506631, +0.0008904509284, +0.0006636604775, +0.0006636604775, -0.0000323607427, -0.0007448275862, -0.0009633952255, -0.0013679045093, -0.0017564986737, -0.0006395225464, +0.0013843501326, +0.0021936339523, +0.0017970822281, +0.0010522546419, +0.0000567639257, -0.0004938992042, -0.0005342175066, -0.0005180371353, +0.0000405835544, +0.0006395225464, +0.0006880636605, +0.0002994694960, -0.0002591511936, -0.0004289124668, -0.0002591511936, -0.0002023872679, -0.0001779840849, -0.0001132625995, +0.0000000000000, +0.0003885941645, +0.0009713527851, +0.0008984084881, +0.0001779840849, +0.0000567639257, +0.0005586206897, +0.0006557029178, +0.0000000000000, -0.0007610079576, -0.0004938992042, +0.0002832891247, +0.0004450928382, +0.0001618037135, +0.0000244031830, -0.0003318302387, -0.0009145888594, -0.0009145888594, +0.0000891246684, +0.0009389920424, +0.0008257294430, +0.0005100795756, +0.0003480106101, +0.0004450928382, +0.0005180371353, -0.0001779840849, -0.0008013262599, -0.0007527851459, -0.0007124668435, -0.0005262599469, -0.0000647214854, +0.0000000000000, -0.0005503978780, -0.0011657824934, -0.0009713527851, +0.0000647214854, +0.0006962864721, +0.0006718832891, +0.0006962864721, +0.0010360742706, +0.0008984084881, +0.0002265251989, -0.0002347480106, -0.0001294429708, +0.0006151193634, +0.0006395225464, -0.0011575596817, -0.0019994694960, -0.0000647214854, +0.0022503978780, +0.0015946949602, -0.0013923076923, -0.0021612732095, +0.0006880636605, +0.0020721485411, +0.0000244031830, -0.0012305039788, +0.0001214854111, +0.0007204244032, -0.0000891246684, -0.0006395225464, -0.0006233421751, +0.0005827586207, +0.0011819628647, +0.0001456233422, -0.0002753315650, +0.0011169761273, +0.0010846153846, -0.0005586206897, -0.0009795755968, -0.0001294429708, +0.0005909814324, +0.0009633952255, +0.0005503978780, +0.0002832891247, +0.0010037135279, +0.0005342175066, -0.0010119363395, -0.0018862068966, -0.0019347480106, -0.0009875331565, +0.0006718832891, +0.0007851458886, +0.0001053050398, +0.0007689655172, +0.0010522546419, -0.0002185676393, -0.0011493368700, -0.0007610079576, -0.0001053050398, +0.0002671087533, +0.0002265251989, +0.0003400530504, +0.0003238726790, -0.0007042440318, -0.0018456233422, -0.0014652519894, +0.0002347480106, +0.0014570291777, +0.0012870026525, +0.0003803713528, -0.0006395225464, -0.0014490716180, -0.0014246684350, +0.0000970822281, +0.0011575596817, -0.0003724137931, -0.0019832891247, -0.0005180371353, +0.0010928381963, +0.0006474801061, -0.0003803713528, -0.0007527851459, -0.0004209549072, +0.0002103448276, +0.0009472148541, +0.0009145888594, +0.0001779840849, -0.0000891246684, -0.0010766578249, -0.0024931034483, -0.0016108753316, +0.0004371352785, +0.0007689655172, -0.0001214854111, -0.0000647214854, +0.0009145888594, +0.0008660477454, +0.0003885941645, +0.0008336870027, +0.0010442970822, -0.0002915119363, -0.0012790450928, -0.0002265251989, +0.0010522546419, +0.0011657824934, +0.0003641909814, -0.0002429708223, -0.0002509283820, -0.0000405835544, +0.0001053050398, -0.0004127320955, -0.0012628647215, -0.0010037135279, -0.0000485411141, +0.0009228116711, +0.0011575596817, +0.0002185676393, -0.0008336870027, -0.0013761273210, -0.0008984084881, +0.0002915119363, +0.0009310344828, +0.0010846153846, +0.0006962864721, -0.0003641909814, -0.0011493368700, -0.0014005305040, -0.0014005305040, -0.0013275862069, -0.0011575596817, +0.0000323607427, +0.0019185676393, +0.0021289124668, +0.0005665782493, -0.0003156498674, +0.0000970822281, +0.0006474801061, +0.0004938992042, -0.0002023872679, -0.0006880636605, -0.0008175066313, -0.0009066312997, -0.0007286472149, -0.0004127320955, +0.0000809018568, +0.0005503978780, +0.0010037135279, +0.0015217506631, +0.0012870026525, +0.0005342175066, +0.0003965517241, +0.0006312997347, +0.0002265251989, -0.0008013262599, -0.0015299734748, -0.0008419098143, +0.0003318302387, +0.0006151193634, -0.0000567639257, -0.0008175066313, -0.0005018567639, +0.0004047745358, +0.0005018567639, +0.0000891246684, +0.0000405835544, +0.0003724137931, +0.0011899204244, +0.0022342175066, +0.0019750663130, -0.0005424403183, -0.0025175066313, -0.0014408488064, -0.0004938992042, -0.0009875331565, -0.0008660477454, +0.0003076923077, +0.0012790450928, +0.0009795755968, +0.0002429708223, +0.0003238726790, +0.0003965517241, +0.0000567639257, +0.0000244031830, +0.0007042440318, +0.0010604774536, +0.0004209549072, +0.0000000000000, -0.0000485411141, -0.0005262599469, -0.0009389920424, -0.0008984084881, -0.0007448275862, -0.0006474801061, -0.0002994694960, +0.0003238726790, +0.0009875331565, +0.0018132625995, +0.0020480106101, +0.0008095490716, -0.0009310344828, -0.0015623342175, -0.0015055702918, -0.0013517241379, -0.0007771883289, +0.0000729442971, +0.0007448275862, +0.0013355437666, +0.0011981432361, +0.0007851458886, +0.0007124668435, +0.0000244031830, -0.0009551724138, -0.0011737400531, -0.0010360742706, -0.0006557029178, +0.0005100795756, +0.0020156498674, +0.0022342175066, +0.0003400530504, -0.0018862068966, -0.0019994694960, -0.0004371352785, +0.0006151193634, +0.0004289124668, -0.0000567639257, -0.0002265251989, +0.0005262599469, +0.0015623342175, +0.0011981432361, -0.0001618037135, -0.0008904509284, -0.0006395225464, +0.0001132625995, +0.0002347480106, -0.0001700265252, +0.0002265251989, +0.0009145888594, +0.0006962864721, -0.0003641909814, -0.0012384615385, -0.0009875331565, -0.0000405835544, +0.0003641909814, -0.0000970822281, -0.0009875331565, -0.0013843501326, -0.0002265251989, +0.0015217506631, +0.0012708222812, -0.0002671087533, -0.0007042440318, -0.0004615384615, -0.0000485411141, +0.0006636604775, +0.0008175066313, +0.0007610079576, +0.0006071618037, +0.0000082228117, -0.0005018567639, -0.0006557029178, -0.0006233421751, -0.0006798408488, -0.0008742705570, -0.0003803713528, +0.0005909814324, +0.0012305039788, +0.0010766578249, +0.0001294429708, -0.0008257294430, -0.0011413793103, -0.0008498673740, -0.0004777188329, -0.0004209549072, -0.0001618037135, +0.0004533156499, +0.0009145888594, +0.0009228116711, +0.0006474801061, +0.0001456233422, -0.0005342175066, -0.0011493368700, -0.0013517241379, -0.0005989389920, +0.0005018567639, +0.0008822281167, +0.0005342175066, -0.0000244031830, -0.0004371352785, -0.0003641909814, -0.0001538461538, -0.0001132625995, -0.0001538461538, +0.0001618037135, +0.0005424403183, +0.0003400530504, +0.0000244031830, +0.0004533156499, +0.0008257294430, +0.0002671087533, -0.0003562334218, -0.0000405835544, +0.0003562334218, -0.0005262599469, -0.0016676392573, -0.0011657824934, +0.0001700265252, +0.0010198938992, +0.0009472148541, +0.0004371352785, +0.0003076923077, +0.0002832891247, -0.0000485411141, -0.0000970822281, +0.0000000000000, -0.0001862068966, -0.0002994694960, -0.0002591511936, -0.0004777188329, -0.0006962864721, -0.0003156498674, +0.0003156498674, +0.0007124668435, +0.0007124668435, +0.0002023872679, -0.0001214854111, +0.0001376657825, +0.0000082228117, -0.0005748010610, -0.0004777188329, +0.0000405835544, +0.0002832891247, +0.0004371352785, +0.0004777188329, +0.0002671087533, -0.0004450928382, -0.0010766578249, -0.0009066312997, -0.0003400530504, +0.0002103448276, +0.0008984084881, +0.0009472148541, -0.0000891246684, -0.0009228116711, +0.0000000000000, +0.0011169761273, +0.0004777188329, -0.0006233421751, -0.0003562334218, +0.0005665782493, +0.0008175066313, +0.0001779840849, -0.0006071618037, -0.0007527851459, -0.0000970822281, +0.0003318302387, +0.0000000000000, -0.0002753315650, +0.0002915119363, +0.0008660477454, +0.0005018567639, -0.0004127320955, -0.0009472148541, -0.0009066312997, -0.0005748010610, -0.0002509283820, -0.0004209549072, -0.0005827586207, -0.0000567639257, +0.0006962864721, +0.0011007957560, +0.0010684350133, +0.0006557029178, +0.0004371352785, +0.0001456233422, -0.0003641909814, -0.0008013262599, -0.0012628647215, -0.0015055702918, -0.0007204244032, +0.0006880636605, +0.0016676392573, +0.0015946949602, +0.0007366047745, +0.0000000000000, -0.0002671087533, -0.0003885941645, -0.0002994694960, -0.0001618037135, -0.0000485411141, +0.0003400530504, +0.0005989389920, -0.0000161803714, -0.0006636604775, -0.0003724137931, +0.0000970822281, -0.0002832891247, -0.0007689655172, -0.0006880636605, -0.0006474801061, -0.0004450928382, +0.0003238726790, +0.0008984084881, +0.0007610079576, +0.0003724137931, +0.0003076923077, +0.0004615384615, +0.0000161803714, -0.0010360742706, -0.0014652519894, -0.0008013262599, +0.0000244031830, +0.0004209549072, +0.0004047745358, +0.0000970822281, -0.0001456233422, -0.0000891246684, +0.0003641909814, +0.0004856763926, -0.0004694960212, -0.0012305039788, -0.0005748010610, +0.0007366047745, +0.0013517241379, +0.0008822281167, +0.0000244031830, -0.0004450928382, -0.0004371352785, +0.0001294429708, +0.0004450928382, -0.0002994694960, -0.0014005305040, -0.0013114058355, +0.0000485411141, +0.0011899204244, +0.0011981432361, +0.0005018567639, -0.0002185676393, -0.0003965517241, -0.0002265251989, -0.0001941644562, -0.0002103448276, -0.0003400530504, -0.0000729442971, +0.0004127320955, +0.0004694960212, +0.0003641909814, +0.0001294429708, -0.0002023872679, -0.0004127320955, -0.0004777188329, -0.0002347480106, +0.0001538461538, +0.0004777188329, +0.0006395225464, +0.0001214854111, -0.0005665782493, -0.0006312997347, -0.0003724137931, -0.0002832891247, -0.0003400530504, +0.0001214854111, +0.0009633952255, +0.0014570291777, +0.0009551724138, -0.0002509283820, -0.0008660477454, -0.0005586206897, -0.0000891246684, +0.0002832891247, +0.0000891246684, -0.0003400530504, -0.0002429708223, +0.0003562334218, +0.0007771883289, +0.0003238726790, -0.0004856763926, -0.0005748010610, -0.0000082228117, +0.0006557029178, +0.0009875331565, +0.0007042440318, +0.0001700265252, -0.0001294429708, -0.0002185676393, -0.0004533156499, -0.0007771883289, -0.0007286472149, -0.0002429708223, +0.0005748010610, +0.0010442970822, +0.0006474801061, +0.0003965517241, +0.0005342175066, +0.0002671087533, -0.0004615384615, -0.0008822281167, -0.0005909814324, -0.0001132625995, +0.0000567639257, +0.0002671087533, +0.0005180371353, +0.0005909814324, +0.0005100795756, +0.0003724137931, -0.0000485411141, -0.0007448275862, -0.0012466843501, -0.0010198938992, +0.0000809018568, +0.0012466843501, +0.0014490716180, +0.0007933687003, -0.0000891246684, -0.0002753315650, +0.0000567639257, +0.0000809018568, -0.0001132625995, -0.0005180371353, -0.0007286472149, -0.0002023872679, +0.0002671087533, +0.0004289124668, +0.0004127320955, +0.0000323607427, -0.0000244031830, +0.0003724137931, +0.0003400530504, -0.0003238726790, -0.0007527851459, -0.0005424403183, -0.0001214854111, +0.0003076923077, +0.0004450928382, -0.0002509283820, -0.0006798408488, +0.0002347480106, +0.0009472148541, +0.0002429708223, -0.0006474801061, -0.0007042440318, -0.0001053050398, +0.0003641909814, +0.0002671087533, +0.0002023872679, +0.0005018567639, +0.0002429708223, -0.0002832891247, -0.0004615384615, -0.0005180371353, -0.0003641909814, +0.0002429708223, +0.0008095490716, +0.0007689655172, -0.0001132625995, -0.0007366047745, -0.0003076923077, +0.0000729442971, -0.0002832891247, -0.0007527851459, -0.0003803713528, +0.0006557029178, +0.0007286472149, -0.0001053050398, -0.0000567639257, +0.0005424403183, +0.0005180371353, +0.0000161803714, -0.0003400530504, -0.0003480106101, -0.0002185676393, -0.0001779840849, +0.0000244031830, +0.0003238726790, +0.0000647214854, -0.0006395225464, -0.0007366047745, -0.0002994694960, -0.0001456233422, -0.0002023872679, +0.0000082228117, +0.0002832891247, +0.0002671087533, +0.0000891246684, +0.0000000000000, -0.0000244031830, -0.0000485411141, -0.0002591511936, -0.0001538461538, +0.0003803713528, +0.0004938992042, +0.0000323607427, -0.0001862068966, +0.0001294429708, +0.0004777188329, +0.0004856763926, +0.0003803713528, -0.0001779840849, -0.0010360742706, -0.0010928381963, -0.0003803713528, +0.0001053050398, +0.0001214854111, +0.0000647214854, +0.0001618037135, +0.0002509283820, +0.0000485411141, -0.0002753315650, -0.0001779840849, +0.0002509283820, +0.0005018567639, +0.0004615384615, +0.0003318302387, +0.0001941644562, -0.0001862068966, -0.0005586206897, -0.0003724137931, +0.0000809018568, +0.0002265251989, +0.0003238726790, +0.0004047745358, +0.0003641909814, +0.0001376657825, -0.0002994694960, -0.0004533156499, +0.0000647214854, +0.0004127320955, +0.0000891246684, -0.0005503978780, -0.0009551724138, -0.0005018567639, +0.0003641909814, +0.0004938992042, +0.0000891246684, -0.0000244031830, +0.0002103448276, +0.0002185676393, -0.0003156498674, -0.0005503978780, -0.0000161803714, +0.0003803713528, +0.0002347480106, -0.0001214854111, -0.0002591511936, -0.0002185676393, -0.0003480106101, -0.0004127320955, -0.0002671087533, -0.0002103448276, -0.0002832891247, +0.0000244031830, +0.0006636604775, +0.0008580901857, +0.0003562334218, +0.0000405835544, +0.0002753315650, +0.0002753315650, -0.0003076923077, -0.0005989389920, -0.0003965517241, +0.0001376657825, +0.0008257294430, +0.0008498673740, +0.0002509283820, -0.0002023872679, -0.0004047745358, -0.0005503978780, -0.0005503978780, -0.0001053050398, +0.0003480106101, +0.0003076923077, +0.0000082228117, -0.0000567639257, +0.0003076923077, +0.0003803713528, -0.0003480106101, -0.0006233421751, +0.0001294429708, +0.0006071618037, +0.0001700265252, -0.0002591511936, +0.0001214854111, +0.0008336870027, +0.0007610079576, +0.0000000000000, -0.0004533156499, -0.0004209549072, -0.0003724137931, -0.0003562334218, -0.0002103448276, -0.0000809018568, +0.0000647214854, +0.0002671087533, +0.0002671087533, +0.0000485411141, +0.0000323607427, -0.0000647214854, -0.0005586206897, -0.0007124668435, -0.0000647214854, +0.0005665782493, +0.0007124668435, +0.0006880636605, +0.0004450928382, -0.0001376657825, -0.0003480106101, -0.0002103448276, -0.0003400530504, -0.0006151193634, -0.0003803713528, +0.0002832891247, +0.0005665782493, +0.0004289124668, +0.0003965517241, +0.0004209549072, +0.0002185676393, +0.0001376657825, +0.0001862068966, +0.0001053050398, -0.0001053050398, -0.0002185676393, -0.0003076923077, -0.0005424403183, -0.0008095490716, -0.0005586206897, +0.0002265251989, +0.0007933687003, +0.0005342175066, -0.0001941644562, -0.0005424403183, -0.0002429708223, +0.0000082228117, +0.0001376657825, +0.0003965517241, +0.0004450928382, -0.0001538461538, -0.0004938992042, +0.0000647214854, +0.0005018567639, -0.0001053050398, -0.0007851458886, -0.0005262599469, +0.0000729442971, +0.0002671087533, +0.0001538461538, +0.0000082228117, +0.0004047745358, +0.0008660477454, +0.0002429708223, -0.0005909814324, -0.0005586206897, -0.0000244031830, +0.0002915119363, +0.0000567639257, -0.0003400530504, -0.0002832891247, +0.0001053050398, +0.0004371352785, +0.0003400530504, -0.0000891246684, -0.0003724137931, -0.0001941644562, +0.0002023872679, +0.0003724137931, +0.0002671087533, +0.0003562334218, +0.0001618037135, -0.0003562334218, -0.0002185676393, +0.0004533156499, +0.0003562334218, -0.0004856763926, -0.0011493368700, -0.0007527851459, +0.0004209549072, +0.0010846153846, +0.0005342175066, -0.0002347480106, -0.0000891246684, +0.0005748010610, +0.0005665782493, -0.0001376657825, -0.0003724137931, +0.0002103448276, +0.0004694960212, -0.0000809018568, -0.0005018567639, -0.0003885941645, -0.0001294429708, +0.0001456233422, +0.0000891246684, -0.0004289124668, -0.0008984084881, -0.0006880636605, +0.0003480106101, +0.0012790450928, +0.0013679045093, +0.0006798408488, -0.0001214854111, -0.0003562334218, -0.0002994694960, -0.0006798408488, -0.0011169761273, -0.0010684350133, -0.0001214854111, +0.0010604774536, +0.0013923076923, +0.0008822281167, -0.0000244031830, -0.0007933687003, -0.0005989389920, +0.0000323607427, +0.0001779840849, -0.0001132625995, -0.0001941644562, +0.0002265251989, +0.0005989389920, +0.0004209549072, +0.0000244031830, -0.0003156498674, -0.0002994694960, -0.0002185676393, -0.0004371352785, -0.0005100795756, -0.0001862068966, +0.0001941644562, +0.0002994694960, +0.0002103448276, +0.0003238726790, +0.0004777188329, +0.0005586206897, +0.0006474801061, +0.0003076923077, -0.0000891246684, -0.0003641909814, -0.0004938992042, -0.0004694960212, -0.0003641909814, -0.0001618037135, -0.0001941644562, -0.0004777188329, -0.0001862068966, +0.0002347480106, +0.0003238726790, +0.0003076923077, +0.0002265251989, +0.0002023872679, +0.0002832891247, +0.0002023872679, -0.0000082228117, -0.0002671087533, -0.0003400530504, -0.0003562334218, -0.0004938992042, -0.0006474801061, -0.0005748010610, -0.0002671087533, +0.0000809018568, +0.0003238726790, +0.0004127320955, +0.0005180371353, +0.0006798408488, +0.0004694960212, -0.0000405835544, -0.0002429708223, -0.0000891246684, +0.0001700265252, -0.0001132625995, -0.0008498673740, -0.0008904509284, -0.0001700265252, +0.0003400530504, +0.0003562334218, +0.0000970822281, +0.0000323607427, +0.0001294429708, +0.0001214854111, -0.0001294429708, -0.0001294429708, +0.0003885941645, +0.0005909814324, +0.0001376657825, -0.0000161803714, +0.0000891246684, -0.0000405835544, -0.0003156498674, -0.0006962864721, -0.0010846153846, -0.0009145888594, -0.0001538461538, +0.0005827586207, +0.0006962864721, +0.0002591511936, +0.0000000000000, +0.0001862068966, +0.0004533156499, +0.0003076923077, -0.0001779840849, -0.0004856763926, -0.0003480106101, +0.0001294429708, +0.0004615384615, +0.0002429708223, +0.0000485411141, -0.0000323607427, -0.0004450928382, -0.0008822281167, -0.0007286472149, -0.0000405835544, +0.0005989389920, +0.0005989389920, -0.0000082228117, -0.0003641909814, +0.0000809018568, +0.0003400530504, -0.0000729442971, -0.0004615384615, -0.0003562334218, +0.0001862068966, +0.0007689655172, +0.0008013262599, +0.0003076923077, -0.0003480106101, -0.0009713527851, -0.0013031830239, -0.0009551724138, -0.0001214854111, +0.0003238726790, +0.0005827586207, +0.0009795755968, +0.0010198938992, +0.0007042440318, +0.0004533156499, +0.0002509283820, -0.0001214854111, -0.0005827586207, -0.0005424403183, -0.0002103448276, -0.0002103448276, -0.0003803713528, -0.0004371352785, -0.0002832891247, +0.0000082228117, +0.0002994694960, +0.0007042440318, +0.0007366047745, +0.0002265251989, -0.0000647214854, +0.0001132625995, +0.0001053050398, -0.0004371352785, -0.0008498673740, -0.0005342175066, +0.0000323607427, +0.0001294429708, -0.0001132625995, -0.0000405835544, +0.0002429708223, +0.0001618037135, -0.0000485411141, +0.0000000000000, +0.0002103448276, +0.0002429708223, -0.0001618037135, -0.0006798408488, -0.0005100795756, +0.0001941644562, +0.0008095490716, +0.0008336870027, +0.0001700265252, -0.0005424403183, -0.0004694960212, +0.0000323607427, +0.0000809018568, -0.0003641909814, -0.0007851458886, -0.0005909814324, +0.0004209549072, +0.0012061007958, +0.0008742705570, +0.0001618037135, -0.0000244031830, +0.0002265251989, +0.0003076923077, -0.0001376657825, -0.0005424403183, -0.0005100795756, -0.0002023872679, +0.0000000000000, +0.0000729442971, +0.0002671087533, +0.0006233421751, +0.0007366047745, +0.0002591511936, -0.0002753315650, -0.0002753315650, -0.0001294429708, -0.0002347480106, -0.0003400530504, -0.0002591511936, -0.0000891246684, -0.0000809018568, +0.0001376657825, +0.0004777188329, +0.0003400530504, +0.0000000000000, +0.0000000000000, +0.0001538461538, +0.0001456233422, -0.0002103448276, -0.0003480106101, -0.0001294429708, -0.0001376657825, -0.0004289124668, -0.0005989389920, -0.0003480106101, +0.0000647214854, +0.0003238726790, +0.0004047745358, +0.0002429708223, +0.0000891246684, +0.0001214854111, +0.0002915119363, +0.0003641909814, +0.0000082228117, -0.0002103448276, +0.0001132625995, +0.0001132625995, -0.0002429708223, -0.0002915119363, -0.0002832891247, -0.0003641909814, -0.0002347480106, +0.0001456233422, +0.0004777188329, +0.0004127320955, +0.0000809018568, +0.0002023872679, +0.0005586206897, +0.0002429708223, -0.0004615384615, -0.0005262599469, -0.0001862068966, +0.0000000000000, +0.0000161803714, +0.0000000000000, +0.0001214854111, +0.0006474801061, +0.0007851458886, +0.0001214854111, -0.0004856763926, -0.0004127320955, -0.0001538461538, -0.0001862068966, -0.0002509283820, +0.0000405835544, +0.0005100795756, +0.0007366047745, +0.0005503978780, +0.0003156498674, +0.0003076923077, -0.0001618037135, -0.0010766578249, -0.0013517241379, -0.0006395225464, +0.0001941644562, +0.0003562334218, +0.0001053050398, +0.0001700265252, +0.0002429708223, +0.0002832891247, +0.0004371352785, +0.0004371352785, -0.0000729442971, -0.0006636604775, -0.0004856763926, +0.0001456233422, +0.0001053050398, -0.0001779840849, +0.0000323607427, +0.0004047745358, +0.0001700265252, -0.0005586206897, -0.0006395225464, +0.0000809018568, +0.0002832891247, -0.0001538461538, -0.0001376657825, +0.0004047745358, +0.0005827586207, +0.0001779840849, -0.0002265251989, -0.0003400530504, -0.0003885941645, -0.0005018567639, -0.0004615384615, -0.0001618037135, +0.0000244031830, +0.0001941644562, +0.0005748010610, +0.0005748010610, +0.0000891246684, -0.0003480106101, -0.0002915119363, +0.0000970822281, +0.0002103448276, -0.0000891246684, -0.0003641909814, -0.0005018567639, -0.0003318302387, +0.0001456233422, +0.0004694960212, +0.0002265251989, -0.0000809018568, +0.0000323607427, +0.0003238726790, +0.0003076923077, +0.0000485411141, -0.0001214854111, -0.0000970822281, -0.0003238726790, -0.0004289124668, +0.0000647214854, +0.0005180371353, +0.0002753315650, -0.0002429708223, -0.0003562334218, -0.0001779840849, -0.0002671087533, -0.0003885941645, -0.0000161803714, +0.0006071618037, +0.0009066312997, +0.0006071618037, +0.0001294429708, -0.0003238726790, -0.0004371352785, -0.0002023872679, -0.0001376657825, -0.0003400530504, -0.0002509283820, +0.0000323607427, +0.0002509283820, +0.0005100795756, +0.0007124668435, +0.0005100795756, +0.0001618037135, -0.0000809018568, -0.0003724137931, -0.0006474801061, -0.0004047745358, +0.0002753315650, +0.0005503978780, +0.0001132625995, -0.0002591511936, -0.0002671087533, -0.0001456233422, -0.0001862068966, -0.0003965517241, -0.0005342175066, -0.0004371352785, -0.0000082228117, +0.0004533156499, +0.0006233421751, +0.0004127320955, +0.0000244031830, -0.0003480106101, -0.0005424403183, -0.0004450928382, -0.0004047745358, -0.0006151193634, -0.0003400530504, +0.0003885941645, +0.0007933687003, +0.0007933687003, +0.0005909814324, +0.0001941644562, +0.0000161803714, +0.0001294429708, +0.0000729442971, -0.0004209549072, -0.0008904509284, -0.0005909814324, +0.0002832891247, +0.0007366047745, +0.0003318302387, -0.0003885941645, -0.0005989389920, -0.0003318302387, -0.0001376657825, +0.0000729442971, +0.0004127320955, +0.0007204244032, +0.0007851458886, +0.0002591511936, -0.0003641909814, -0.0000567639257, +0.0005665782493, +0.0006071618037, +0.0003318302387, +0.0000485411141, -0.0004047745358, -0.0006557029178, -0.0006798408488, -0.0002832891247, +0.0005909814324, +0.0011007957560, +0.0007851458886, +0.0003400530504, +0.0001132625995, -0.0001618037135, -0.0006071618037, -0.0007851458886, -0.0003803713528, +0.0001862068966, +0.0003318302387, +0.0000729442971, -0.0003318302387, -0.0006557029178, -0.0004533156499, +0.0004694960212, +0.0014084880637, +0.0014490716180, +0.0006880636605, +0.0000244031830, -0.0001700265252, -0.0005424403183, -0.0010604774536, -0.0010037135279, -0.0002832891247, +0.0001538461538, +0.0000970822281, +0.0001618037135, +0.0003965517241, +0.0002591511936, -0.0000244031830, -0.0003076923077, -0.0006395225464, -0.0007286472149, -0.0004289124668, +0.0001862068966, +0.0009145888594, +0.0009795755968, +0.0004533156499, +0.0001941644562, +0.0002023872679, -0.0001214854111, -0.0006557029178, -0.0008498673740, -0.0004777188329, -0.0001294429708, -0.0001214854111, -0.0000891246684, +0.0000970822281, +0.0003885941645, +0.0004289124668, +0.0002023872679, +0.0000161803714, -0.0001779840849, -0.0004047745358, -0.0002103448276, +0.0001538461538, +0.0002753315650, +0.0002023872679, +0.0003156498674, +0.0005989389920, +0.0006071618037, +0.0001053050398, -0.0002994694960, -0.0002509283820, -0.0001214854111, -0.0003480106101, -0.0007204244032, -0.0007286472149, -0.0001053050398, +0.0004371352785, +0.0003562334218, +0.0000970822281, +0.0001053050398, +0.0003400530504, +0.0003724137931, -0.0000809018568, -0.0004694960212, -0.0003238726790, -0.0002023872679, -0.0002023872679, +0.0001538461538, +0.0004127320955, +0.0000000000000, -0.0004371352785, -0.0002753315650, +0.0002023872679, +0.0004209549072, +0.0002023872679, -0.0001779840849, -0.0001941644562, +0.0001214854111, +0.0003885941645, +0.0003803713528, +0.0002753315650, +0.0003156498674, +0.0002753315650, -0.0002509283820, -0.0006151193634, -0.0003724137931, +0.0000323607427, +0.0001941644562, +0.0000891246684, -0.0000323607427, -0.0000567639257, -0.0000485411141, +0.0001132625995, +0.0003238726790, +0.0003724137931, +0.0003562334218, +0.0001132625995, -0.0002103448276, -0.0001862068966, +0.0000729442971, -0.0001132625995, -0.0006395225464, -0.0006962864721, -0.0002509283820, +0.0000970822281, +0.0002429708223, +0.0003318302387, +0.0004047745358, +0.0002347480106, +0.0000647214854, -0.0000082228117, -0.0002994694960, -0.0004533156499, -0.0000970822281, +0.0002509283820, +0.0002429708223, -0.0000970822281, -0.0003803713528, -0.0002429708223, -0.0000323607427, -0.0001618037135, -0.0002591511936, +0.0001294429708, +0.0005748010610, +0.0004856763926, +0.0001618037135, -0.0001053050398, -0.0003318302387, -0.0003238726790, -0.0001941644562, -0.0001132625995, +0.0000000000000, +0.0001053050398, +0.0000485411141, -0.0000244031830, +0.0000891246684, +0.0003076923077, +0.0001941644562, -0.0001941644562, -0.0004856763926, -0.0003238726790, +0.0000647214854, +0.0002347480106, +0.0000891246684, -0.0001294429708, -0.0002023872679, +0.0000405835544, +0.0003965517241, +0.0006798408488, +0.0006233421751, +0.0000647214854, -0.0003885941645, -0.0003156498674, -0.0001618037135, -0.0003076923077, -0.0004694960212, -0.0003238726790, +0.0000082228117, +0.0003480106101, +0.0007042440318, +0.0007124668435, +0.0001941644562, -0.0003724137931, -0.0004450928382, -0.0001053050398, +0.0001294429708, -0.0002023872679, -0.0007527851459, -0.0006557029178, +0.0001700265252, +0.0008336870027, +0.0006718832891, +0.0000244031830, -0.0002915119363, -0.0000647214854, +0.0002915119363, +0.0001779840849, -0.0003238726790, -0.0004371352785, -0.0000567639257, +0.0000809018568, -0.0002103448276, -0.0004856763926, -0.0003562334218, -0.0000809018568, -0.0001294429708, -0.0002023872679, +0.0000567639257, +0.0003641909814, +0.0003803713528, +0.0003238726790, +0.0002429708223, -0.0000485411141, -0.0004047745358, -0.0003238726790, -0.0000485411141, +0.0000729442971, -0.0000082228117, -0.0002103448276, -0.0002671087533, -0.0000970822281, +0.0000323607427, +0.0001132625995, +0.0002185676393, +0.0003400530504, +0.0003318302387, +0.0003562334218, +0.0003562334218, -0.0000729442971, -0.0007042440318, -0.0007851458886, -0.0001538461538, +0.0004450928382, +0.0003238726790, -0.0000405835544, +0.0001538461538, +0.0005586206897, +0.0004209549072, -0.0001700265252, -0.0005748010610, -0.0005262599469, -0.0003562334218, -0.0001862068966, +0.0002429708223, +0.0007366047745, +0.0007610079576, +0.0001618037135, -0.0003238726790, -0.0002753315650, -0.0000323607427, +0.0000082228117, +0.0000405835544, +0.0000244031830, -0.0001294429708, -0.0001538461538, +0.0001132625995, +0.0001053050398, -0.0003156498674, -0.0004615384615, -0.0000647214854, +0.0002671087533, +0.0000970822281, -0.0001132625995, +0.0000809018568, +0.0003562334218, +0.0004047745358, +0.0003562334218, +0.0002347480106, +0.0000485411141, -0.0002671087533, -0.0004615384615, -0.0004047745358, -0.0003641909814, -0.0003724137931, -0.0000647214854, +0.0003318302387, +0.0004615384615, +0.0003480106101, +0.0004371352785, +0.0005989389920, +0.0004615384615, -0.0000647214854, -0.0006395225464, -0.0007204244032, -0.0004209549072, -0.0001941644562, +0.0000405835544, +0.0002429708223, +0.0003076923077, +0.0003965517241, +0.0003480106101, +0.0000729442971, -0.0001456233422, -0.0000891246684, +0.0001376657825, +0.0004371352785, +0.0005180371353, +0.0001618037135, -0.0002023872679, -0.0001779840849, -0.0002347480106, -0.0004289124668, -0.0004047745358, -0.0001941644562, -0.0000244031830, +0.0003156498674, +0.0007689655172, +0.0008257294430, +0.0003803713528, +0.0000729442971, +0.0000405835544, +0.0000485411141, -0.0000970822281, -0.0003724137931, -0.0004777188329, -0.0002591511936, +0.0000485411141, +0.0002265251989, +0.0001538461538, -0.0000891246684, -0.0002347480106, -0.0000567639257, +0.0002753315650, +0.0003641909814, +0.0003156498674, +0.0003724137931, +0.0003885941645, -0.0000082228117, -0.0005180371353, -0.0004938992042, -0.0000323607427, -0.0000405835544, -0.0004938992042, -0.0004856763926, +0.0001294429708, +0.0005586206897, +0.0005827586207, +0.0004615384615, +0.0001941644562, -0.0002023872679, -0.0003724137931, -0.0000970822281, +0.0003885941645, +0.0005342175066, +0.0000729442971, -0.0005748010610, -0.0007689655172, -0.0003965517241, -0.0000323607427, -0.0001376657825, -0.0004371352785, -0.0004209549072, -0.0000082228117, +0.0005100795756, +0.0007042440318, +0.0004127320955, +0.0000161803714, -0.0000567639257, -0.0002103448276, -0.0005262599469, -0.0005909814324, -0.0003400530504, -0.0001618037135, +0.0000000000000, +0.0003400530504, +0.0007527851459, +0.0007689655172, +0.0004615384615, -0.0000244031830, -0.0005665782493, -0.0007204244032, -0.0003965517241, -0.0000323607427, +0.0000485411141, +0.0000647214854, +0.0003400530504, +0.0005100795756, +0.0002832891247, +0.0000485411141, -0.0001941644562, -0.0004777188329, -0.0004371352785, -0.0000244031830, +0.0003724137931, +0.0005424403183, +0.0003076923077, -0.0001214854111, -0.0005262599469, -0.0006557029178, -0.0004450928382, -0.0000567639257, +0.0002023872679, +0.0002509283820, +0.0000647214854, -0.0001456233422, -0.0001618037135, +0.0000647214854, +0.0002185676393, +0.0000891246684, -0.0001376657825, -0.0002994694960, -0.0003318302387, -0.0000405835544, +0.0002347480106, +0.0000405835544, -0.0002429708223, -0.0001779840849, +0.0000485411141, +0.0001214854111, +0.0000567639257, -0.0000485411141, -0.0000647214854, +0.0000000000000, +0.0000000000000, -0.0001294429708, -0.0001618037135, -0.0000647214854, +0.0000970822281, +0.0002591511936, +0.0002671087533, +0.0000082228117, -0.0000891246684, -0.0000082228117, -0.0001132625995, -0.0002429708223, -0.0000323607427, +0.0002185676393, +0.0001132625995, -0.0001214854111, -0.0000809018568, -0.0000729442971, -0.0002915119363, -0.0001700265252, +0.0003156498674, +0.0004938992042, +0.0000970822281, -0.0002185676393, -0.0000405835544, +0.0001700265252, -0.0000567639257, -0.0002509283820, -0.0000970822281, -0.0000647214854, -0.0004371352785, -0.0005827586207, -0.0001294429708, +0.0005262599469, +0.0006557029178, +0.0003965517241, +0.0002591511936, +0.0002509283820, +0.0000000000000, -0.0004127320955, -0.0005262599469, -0.0002671087533, -0.0001779840849, -0.0001294429708, +0.0002185676393, +0.0004856763926, +0.0002429708223, -0.0002185676393, -0.0003238726790, -0.0000647214854, +0.0000970822281, -0.0000647214854, -0.0002185676393, +0.0000244031830, +0.0005665782493, +0.0006880636605, +0.0002591511936, -0.0001941644562, -0.0002185676393, +0.0000000000000, +0.0000567639257, +0.0000000000000, +0.0000729442971, +0.0001294429708, +0.0001376657825, +0.0002103448276, +0.0002265251989, -0.0000161803714, -0.0004127320955, -0.0006233421751, -0.0003885941645, +0.0000161803714, +0.0001941644562, +0.0002671087533, +0.0004289124668, +0.0004450928382, +0.0002591511936, -0.0000161803714, -0.0002509283820, -0.0002265251989, -0.0001538461538, -0.0001132625995, -0.0000161803714, +0.0000244031830, -0.0000485411141, -0.0000405835544, +0.0001214854111, +0.0002753315650, +0.0000729442971, -0.0002103448276, -0.0001618037135, +0.0001456233422, +0.0002103448276, +0.0000082228117, -0.0000970822281, +0.0000970822281, +0.0002429708223, +0.0000970822281, -0.0000809018568, +0.0000000000000, +0.0000567639257, -0.0000647214854, -0.0001538461538, +0.0000000000000, +0.0002591511936, +0.0003724137931, +0.0003318302387, +0.0001779840849, +0.0000000000000, -0.0001376657825, -0.0001376657825, -0.0000405835544, +0.0000000000000, -0.0002265251989, -0.0004694960212, -0.0003400530504, +0.0000567639257, +0.0002509283820, +0.0001456233422, +0.0000323607427, +0.0001618037135, +0.0002185676393, +0.0000809018568, -0.0000244031830, +0.0000161803714, +0.0000161803714, -0.0000485411141, -0.0000647214854, -0.0000647214854, -0.0001456233422, -0.0001132625995, +0.0000161803714, +0.0000000000000, -0.0000485411141, +0.0000082228117, +0.0001618037135, +0.0001862068966, +0.0000161803714, -0.0002753315650, -0.0003803713528, -0.0001376657825, +0.0002023872679, +0.0001700265252, -0.0001214854111, -0.0002185676393, -0.0000729442971, +0.0000405835544, +0.0001376657825, +0.0001132625995, +0.0000323607427, +0.0000729442971, +0.0000809018568, -0.0000891246684, -0.0002591511936, -0.0002023872679, +0.0000405835544, +0.0002185676393, +0.0001214854111, +0.0000000000000, +0.0000567639257, +0.0000970822281, +0.0000161803714, +0.0000244031830, +0.0000970822281, +0.0001456233422, +0.0000323607427, -0.0001779840849, -0.0002994694960, -0.0000891246684, +0.0000000000000, -0.0002591511936, -0.0003562334218, +0.0000485411141, +0.0003885941645, +0.0002915119363, +0.0000647214854, +0.0002103448276, +0.0006395225464, +0.0007124668435, +0.0000970822281, -0.0005342175066, -0.0004938992042, -0.0000891246684, -0.0001132625995, -0.0004371352785, -0.0002591511936, +0.0002994694960, +0.0004777188329, +0.0002185676393, +0.0000244031830, -0.0000485411141, -0.0000405835544, +0.0000323607427, +0.0001700265252, +0.0001700265252, +0.0000405835544, -0.0001700265252, -0.0004127320955, -0.0005100795756, -0.0002671087533, -0.0000082228117, +0.0000485411141, +0.0000323607427, +0.0000891246684, +0.0001214854111, +0.0001214854111, +0.0001456233422, +0.0001538461538, +0.0000567639257, -0.0000891246684, -0.0002429708223, -0.0003076923077, -0.0001376657825, +0.0001214854111, +0.0002103448276, +0.0000891246684, +0.0000323607427, -0.0000082228117, -0.0000161803714, +0.0000567639257, +0.0000405835544, +0.0000000000000, +0.0000891246684, +0.0000405835544, -0.0001132625995, -0.0001456233422, +0.0000000000000, +0.0000647214854, -0.0001456233422, -0.0004533156499, -0.0004209549072, +0.0000323607427, +0.0005586206897, +0.0006880636605, +0.0003965517241, +0.0000405835544, -0.0001618037135, -0.0001700265252, -0.0000970822281, -0.0000809018568, -0.0000891246684, -0.0000809018568, -0.0001294429708, -0.0001538461538, -0.0001053050398, +0.0001214854111, +0.0003965517241, +0.0004856763926, +0.0004047745358, +0.0002185676393, -0.0001538461538, -0.0003965517241, -0.0002915119363, -0.0000161803714, +0.0000567639257, -0.0000485411141, -0.0000161803714, +0.0001862068966, +0.0001779840849, -0.0000891246684, -0.0001779840849, +0.0000244031830, +0.0001941644562, +0.0001294429708, +0.0000161803714, -0.0000244031830, +0.0000647214854, +0.0002429708223, +0.0002591511936, -0.0000567639257, -0.0002265251989, -0.0000485411141, +0.0001132625995, -0.0000244031830, -0.0002429708223, -0.0002429708223, -0.0000161803714, +0.0000809018568, -0.0000244031830, -0.0002509283820, -0.0003238726790, -0.0001700265252, -0.0000244031830, -0.0000405835544, +0.0000405835544, +0.0002509283820, +0.0002753315650, +0.0000323607427, -0.0000485411141, +0.0001294429708, +0.0001538461538, +0.0000082228117, -0.0001294429708, -0.0002103448276, -0.0002103448276, -0.0001700265252, -0.0001456233422, -0.0000244031830, -0.0000082228117, +0.0000000000000, +0.0001376657825, +0.0002347480106, +0.0000809018568, +0.0000161803714, +0.0000729442971, +0.0000323607427, -0.0000405835544, +0.0000244031830, +0.0000000000000, -0.0001376657825, -0.0000891246684, +0.0000729442971, +0.0000000000000, -0.0002832891247, -0.0002753315650, +0.0000567639257, +0.0002915119363, +0.0001862068966, +0.0000244031830, -0.0000323607427, -0.0000405835544, -0.0000485411141, +0.0000000000000, +0.0000000000000, +0.0000244031830, +0.0001376657825, +0.0002994694960, +0.0003318302387, +0.0002509283820, +0.0000405835544, -0.0002185676393, -0.0002994694960, -0.0000082228117, +0.0002023872679, +0.0001053050398, -0.0001053050398, -0.0001700265252, -0.0000485411141, +0.0000567639257, -0.0000323607427, -0.0002347480106, -0.0001862068966, +0.0001456233422, +0.0004209549072, +0.0002671087533, -0.0000323607427, -0.0001132625995, +0.0000323607427, +0.0000405835544, -0.0001053050398, -0.0002023872679, -0.0001294429708, -0.0000809018568, -0.0000323607427, +0.0000323607427, +0.0000891246684, +0.0000729442971, +0.0001214854111, +0.0002103448276, +0.0002671087533, +0.0001618037135, -0.0000244031830, -0.0002509283820, -0.0003965517241, -0.0003480106101, -0.0000891246684, +0.0001862068966, +0.0003400530504, +0.0003885941645, +0.0003562334218, +0.0001700265252, -0.0001538461538, -0.0003400530504, -0.0002994694960, -0.0001538461538, -0.0000161803714, +0.0001700265252, +0.0002994694960, +0.0002994694960, +0.0000405835544, -0.0002671087533, -0.0003156498674, -0.0000567639257, +0.0001700265252, +0.0002103448276, +0.0000647214854, -0.0000485411141, -0.0000891246684, -0.0000082228117, +0.0001294429708, +0.0001941644562, +0.0002265251989, +0.0002994694960, +0.0002023872679, -0.0000082228117, -0.0001132625995, -0.0001132625995, -0.0000729442971, -0.0000970822281, -0.0000405835544, +0.0000891246684, +0.0001053050398, -0.0000485411141, -0.0001294429708, -0.0000405835544, +0.0000729442971, +0.0000809018568, +0.0001538461538, +0.0001456233422, +0.0000082228117, -0.0000082228117, +0.0001294429708, +0.0000647214854, -0.0001700265252, -0.0001456233422, +0.0001700265252, +0.0002429708223, -0.0000729442971, -0.0003238726790, -0.0002023872679, +0.0000082228117, +0.0000000000000, -0.0001376657825, -0.0002265251989, -0.0001862068966, -0.0000244031830, +0.0002185676393, +0.0002915119363, +0.0001053050398, -0.0000970822281, -0.0000405835544, +0.0001618037135, +0.0001538461538, -0.0001376657825, -0.0002832891247, -0.0000405835544, +0.0002429708223, +0.0001700265252, -0.0001376657825, -0.0003156498674, -0.0002429708223, -0.0001132625995, -0.0000405835544, -0.0000323607427, +0.0000567639257, +0.0002347480106, +0.0001618037135, -0.0001941644562, -0.0005665782493, -0.0004856763926, +0.0000082228117, +0.0003724137931, +0.0002915119363, +0.0001294429708, +0.0001053050398, +0.0001214854111, +0.0000485411141, +0.0000000000000, -0.0000729442971, -0.0002265251989, -0.0002753315650, -0.0000323607427, +0.0002265251989, +0.0002915119363, +0.0001862068966, +0.0000647214854, +0.0000485411141, +0.0000485411141, -0.0000161803714, -0.0001132625995, -0.0001700265252, -0.0001779840849, -0.0000405835544, +0.0001538461538, +0.0001941644562, +0.0001294429708, +0.0001941644562, +0.0001618037135, -0.0000970822281, -0.0002753315650, -0.0001779840849, -0.0000405835544, +0.0000405835544, -0.0000082228117, -0.0000405835544, +0.0000891246684, +0.0002429708223, +0.0002265251989, +0.0001456233422, -0.0000323607427, -0.0002832891247, -0.0002832891247, +0.0000000000000, +0.0003156498674, +0.0003238726790, +0.0000082228117, -0.0002509283820, -0.0002753315650, -0.0002753315650, -0.0002591511936, -0.0002023872679, -0.0000323607427, +0.0002023872679, +0.0004289124668, +0.0003400530504, -0.0000161803714, -0.0001941644562, +0.0000000000000, +0.0000809018568, -0.0000729442971, -0.0002509283820, -0.0002347480106, -0.0001294429708, -0.0000082228117, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000082228117, +0.0000082228117, +0.0000082228117, +0.0000000000000, +0.0000000000000, -0.0000244031830, -0.0000323607427, -0.0000082228117, +0.0000161803714, +0.0000244031830, +0.0000082228117, +0.0000244031830, +0.0000485411141, +0.0000244031830, -0.0000161803714, -0.0000405835544, +0.0000000000000, +0.0000323607427, +0.0000244031830, -0.0000082228117, -0.0000244031830, +0.0000000000000, +0.0000082228117, +0.0000244031830, +0.0000000000000, +0.0000000000000, +0.0000161803714, +0.0000405835544, +0.0000000000000, -0.0000729442971, -0.0000323607427, +0.0000970822281, +0.0001862068966, +0.0001132625995, +0.0000000000000, -0.0000405835544, -0.0000323607427, +0.0000000000000, +0.0000082228117, -0.0000323607427, -0.0000809018568, -0.0000405835544, +0.0000082228117, +0.0000405835544, +0.0000405835544, +0.0000323607427, +0.0000082228117, -0.0000082228117, -0.0000244031830, -0.0000082228117, +0.0000161803714, +0.0000485411141, +0.0000567639257, +0.0000323607427, +0.0000000000000, +0.0000082228117, +0.0000485411141, +0.0000244031830, -0.0000082228117, +0.0000000000000, -0.0000161803714, -0.0001294429708, -0.0001294429708, +0.0000000000000, +0.0000970822281, +0.0000729442971, +0.0000000000000, -0.0000485411141, -0.0000567639257, -0.0000729442971, -0.0001294429708, -0.0000970822281, +0.0000082228117, +0.0001294429708, +0.0001618037135, +0.0000891246684, -0.0000567639257, -0.0001456233422, -0.0001132625995, -0.0000323607427, -0.0000161803714, -0.0000244031830, +0.0000000000000, +0.0000970822281, +0.0001941644562, +0.0001376657825, -0.0000082228117, -0.0001214854111, -0.0001538461538, -0.0000970822281, +0.0000244031830, +0.0000729442971, +0.0000244031830, +0.0000000000000, +0.0000729442971, +0.0001294429708, +0.0000082228117, -0.0001456233422, -0.0001214854111, +0.0000161803714, +0.0001132625995, +0.0000000000000, -0.0001294429708, -0.0000891246684, +0.0000485411141, +0.0001456233422, +0.0001941644562, +0.0001779840849, +0.0000729442971, -0.0000405835544, -0.0000567639257, -0.0000161803714, -0.0000405835544, -0.0000809018568, +0.0000000000000, +0.0001456233422, +0.0000970822281, -0.0000647214854, -0.0001053050398, +0.0000485411141, +0.0001862068966, +0.0001376657825, -0.0000244031830, -0.0001214854111, -0.0001538461538, -0.0001376657825, -0.0001053050398, -0.0000082228117, +0.0000485411141, +0.0001376657825, +0.0002347480106, +0.0001779840849, -0.0000323607427, -0.0001214854111, -0.0000970822281, -0.0001700265252, -0.0001779840849, +0.0000000000000, +0.0001538461538, +0.0002185676393, +0.0002185676393, +0.0001294429708, -0.0000244031830, -0.0002509283820, -0.0004371352785, -0.0003803713528, -0.0001053050398, +0.0000809018568, +0.0001862068966, +0.0002023872679, +0.0001941644562, +0.0001132625995, -0.0000485411141, -0.0001862068966, -0.0001294429708, +0.0000000000000, +0.0001538461538, +0.0002347480106 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/07-fender-68-vibrolux-ui87.h000066400000000000000000002701151247673406200257060ustar00rootroot00000000000000float fender_68_vibrolux_ui87[] = { +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000065400844, +0.0000194092827, +0.0000128691983, +0.0000000000000, -0.0000194092827, +0.0000000000000, +0.0000128691983, +0.0000000000000, -0.0000128691983, -0.0000065400844, +0.0000000000000, +0.0000000000000, -0.0000128691983, +0.0000322784810, +0.0000708860759, +0.0000514767932, +0.0000000000000, -0.0000257383966, -0.0000065400844, +0.0000065400844, -0.0000065400844, -0.0000322784810, -0.0000257383966, -0.0000065400844, -0.0000322784810, -0.0000322784810, +0.0000194092827, +0.0000900843882, +0.0000837552743, +0.0000194092827, -0.0000257383966, +0.0000000000000, +0.0000128691983, -0.0000065400844, -0.0000708860759, -0.0000386075949, +0.0000322784810, +0.0000000000000, -0.0000643459916, +0.0000000000000, +0.0001094936709, +0.0001223628692, +0.0000000000000, -0.0000322784810, +0.0000194092827, +0.0000000000000, -0.0001158227848, -0.0001672995781, -0.0000580168776, +0.0000900843882, +0.0000257383966, -0.0000514767932, +0.0000194092827, +0.0001481012658, +0.0001223628692, +0.0000451476793, +0.0000451476793, +0.0000837552743, +0.0000000000000, -0.0002124472574, -0.0002962025316, -0.0001094936709, +0.0000837552743, +0.0000900843882, -0.0000386075949, -0.0000386075949, +0.0000966244726, +0.0001029535865, +0.0000257383966, +0.0001223628692, +0.0001932489451, +0.0000514767932, -0.0002704641350, -0.0004120253165, -0.0001672995781, +0.0001867088608, +0.0002253164557, +0.0000386075949, -0.0000322784810, +0.0000580168776, +0.0000837552743, -0.0000322784810, +0.0000451476793, +0.0002767932489, +0.0001094936709, -0.0004185654008, -0.0006888185654, -0.0002833333333, +0.0002189873418, +0.0003282700422, +0.0001029535865, +0.0000643459916, +0.0002124472574, +0.0001415611814, -0.0000643459916, +0.0001801687764, +0.0004700421941, +0.0001738396624, -0.0005343881857, -0.0007210970464, -0.0003991561181, +0.0000257383966, +0.0002381856540, +0.0001094936709, +0.0000708860759, +0.0002061181435, +0.0000643459916, -0.0000322784810, +0.0000772151899, +0.0004185654008, +0.0003348101266, -0.0003219409283, -0.0007597046414, -0.0003154008439, +0.0001738396624, +0.0003025316456, +0.0000643459916, +0.0001801687764, +0.0003670886076, +0.0001481012658, -0.0002253164557, -0.0002124472574, +0.0004185654008, +0.0003219409283, -0.0005795358650, -0.0007725738397, -0.0002896624473, +0.0001158227848, +0.0000708860759, +0.0000000000000, +0.0004314345992, +0.0007597046414, +0.0004892405063, +0.0001158227848, -0.0001544303797, +0.0002124472574, +0.0001995780591, -0.0004892405063, -0.0008434599156, -0.0004120253165, +0.0000451476793, -0.0002767932489, -0.0005215189873, +0.0001544303797, +0.0009400843882, +0.0009141350211, +0.0001995780591, -0.0004377637131, +0.0001352320675, +0.0002962025316, -0.0004506329114, -0.0005729957806, +0.0003605485232, +0.0005086497890, -0.0004700421941, -0.0009721518987, +0.0002575949367, +0.0014164556962, +0.0014873417722, +0.0000643459916, -0.0004314345992, -0.0004056962025, -0.0004506329114, -0.0011717299578, -0.0006630801688, +0.0005278481013, +0.0012360759494, -0.0012297468354, -0.0018027426160, +0.0000900843882, +0.0035860759494, +0.0036504219409, +0.0017770042194, -0.0007274261603, -0.0002704641350, -0.0008177215190, -0.0009978902954, -0.0018478902954, +0.0014356540084, +0.0023951476793, -0.0014485232068, -0.0087947257384, -0.0035088607595, +0.0029938818565, +0.0382048523207, -0.0170358649789, -0.0791267932489, -0.0187677215190, +0.1161018987342, +0.2109575949367, +0.0768926160338, -0.1636681434599, -0.1423253164557, -0.0362476793249, -0.1131016877637, -0.1276717299578, +0.0162373417722, +0.1233514767932, +0.0506244725738, +0.0418103375527, +0.0046871308017, +0.0040818565401, -0.0304725738397, -0.0581829113924, -0.0086531645570, +0.0347540084388, -0.0397565400844, -0.0239827004219, +0.0140419831224, -0.0147565400844, +0.0023500000000, +0.0165978902954, +0.0268476793249, +0.0005601265823, +0.0065219409283, -0.0127027426160, -0.0094386075949, -0.0036375527426, +0.0008755274262, +0.0146987341772, +0.0315542194093, +0.0068696202532, -0.0237573839662, -0.0308265822785, +0.0000708860759, +0.0435808016878, +0.0116597046414, -0.0014227848101, +0.0102175105485, +0.0030582278481, +0.0103850210970, +0.0295839662447, +0.0237122362869, +0.0107198312236, +0.0059232067511, +0.0065542194093, +0.0049639240506, -0.0121105485232, -0.0175894514768, -0.0126512658228, +0.0062774261603, +0.0028907172996, -0.0068504219409, +0.0145955696203, +0.0169327004219, -0.0029293248945, -0.0143510548523, -0.0012554852321, +0.0147694092827, +0.0110223628692, +0.0034959915612, +0.0069468354430, -0.0007405063291, -0.0051892405063, +0.0082088607595, +0.0120782700422, +0.0077774261603, -0.0025044303797, -0.0091037974684, -0.0043265822785, +0.0036183544304, -0.0032641350211, -0.0069856540084, -0.0007983122363, -0.0050605485232, -0.0077774261603, -0.0017704641350, +0.0045453586498, +0.0033864978903, +0.0017255274262, +0.0028972573840, +0.0074362869198, +0.0102820675105, +0.0064833333333, +0.0083054852321, +0.0126578059072, +0.0042814345992, -0.0046162447257, -0.0026075949367, +0.0031419831224, +0.0079770042194, +0.0061421940928, +0.0000065400844, -0.0034831223629, -0.0041398734177, -0.0053630801688, -0.0066508438819, -0.0029873417722, -0.0009850210970, +0.0007016877637, +0.0061356540084, +0.0073719409283, +0.0060841772152, +0.0016031645570, -0.0032449367089, -0.0050476793249, -0.0027105485232, -0.0027877637131, +0.0014164556962, +0.0061936708861, +0.0087753164557, +0.0023628691983, -0.0053373417722, -0.0070242616034, -0.0061421940928, -0.0072367088608, -0.0083504219409, -0.0071335443038, -0.0057430379747, -0.0002575949367, +0.0027040084388, +0.0021181434599, -0.0009272151899, +0.0005537974684, +0.0001801687764, +0.0009529535865, +0.0005601265823, -0.0015708860759, -0.0028135021097, -0.0067537974684, -0.0057301687764, -0.0010816455696, +0.0020280590717, +0.0009012658228, -0.0007082278481, +0.0006244725738, -0.0025172995781, -0.0088398734177, -0.0076358649789, -0.0044166666667, -0.0046677215190, -0.0033158227848, -0.0016094936709, -0.0012489451477, -0.0001867088608, +0.0020280590717, +0.0022276371308, +0.0016160337553, -0.0012554852321, -0.0034831223629, -0.0026782700422, +0.0005858649789, +0.0036054852321, -0.0007854430380, -0.0062065400844, -0.0047514767932, -0.0028715189873, -0.0028135021097, -0.0045196202532, -0.0019765822785, +0.0034508438819, +0.0025947257384, -0.0027943037975, -0.0043008438819, -0.0039660337553, -0.0067343881857, -0.0037407172996, +0.0013907172996, -0.0009335443038, -0.0010945147679, +0.0026976793249, +0.0003991561181, -0.0037407172996, -0.0050605485232, -0.0034508438819, -0.0031677215190, -0.0037470464135, -0.0020409282700, -0.0012554852321, +0.0009850210970, +0.0008626582278, -0.0014613924051, -0.0040689873418, -0.0055369198312, -0.0011139240506, +0.0024786919831, -0.0008305907173, -0.0010430379747, +0.0000900843882, -0.0011073839662, -0.0012426160338, -0.0000451476793, +0.0016869198312, +0.0000257383966, +0.0003734177215, +0.0018670886076, +0.0000000000000, -0.0007274261603, +0.0007854430380, +0.0004120253165, -0.0018864978903, -0.0012877637131, +0.0007016877637, +0.0026719409283, +0.0042299578059, +0.0026010548523, -0.0001544303797, +0.0007016877637, +0.0010236286920, +0.0013392405063, +0.0005215189873, +0.0007919831224, +0.0043137130802, +0.0029293248945, -0.0006567510549, +0.0001223628692, +0.0004185654008, -0.0010172995781, -0.0001995780591, -0.0007983122363, -0.0012489451477, +0.0026139240506, +0.0035926160338, +0.0009400843882, +0.0002061181435, -0.0005086497890, -0.0000772151899, +0.0006116033755, -0.0010493670886, -0.0010172995781, +0.0009529535865, +0.0015774261603, -0.0002124472574, -0.0004957805907, +0.0008883966245, +0.0023757383966, +0.0036246835443, +0.0017512658228, +0.0021118143460, +0.0031097046414, -0.0013006329114, -0.0032449367089, -0.0011845991561, -0.0003928270042, +0.0007533755274, +0.0008883966245, +0.0000708860759, +0.0000000000000, -0.0002061181435, -0.0010107594937, +0.0005407172996, +0.0021632911392, +0.0031548523207, +0.0039145569620, +0.0008434599156, -0.0010879746835, +0.0003282700422, +0.0009141350211, +0.0003090717300, +0.0001223628692, +0.0001158227848, +0.0006696202532, -0.0001415611814, -0.0000386075949, -0.0003670886076, -0.0005666666667, +0.0009592827004, +0.0007533755274, +0.0013841772152, +0.0025495780591, +0.0011717299578, +0.0003991561181, -0.0000257383966, -0.0010172995781, -0.0015902953586, -0.0015130801688, +0.0019637130802, +0.0021118143460, -0.0004829113924, +0.0009658227848, +0.0001801687764, -0.0009978902954, -0.0012940928270, -0.0029744725738, -0.0007082278481, +0.0030067510549, +0.0033930379747, +0.0022791139241, +0.0000194092827, -0.0016417721519, -0.0011459915612, -0.0005215189873, -0.0007405063291, -0.0014613924051, -0.0007274261603, +0.0005795358650, +0.0016740506329, +0.0017061181435, +0.0000322784810, -0.0008305907173, +0.0015516877637, +0.0017318565401, -0.0003411392405, +0.0009850210970, +0.0014164556962, +0.0000000000000, +0.0002447257384, -0.0011654008439, -0.0014356540084, -0.0004443037975, -0.0020086497890, -0.0016546413502, -0.0003862869198, -0.0006502109705, -0.0005215189873, -0.0004635021097, +0.0012489451477, +0.0023434599156, -0.0008949367089, -0.0004892405063, +0.0015966244726, +0.0008563291139, -0.0023305907173, -0.0039466244726, -0.0010687763713, +0.0013069620253, +0.0004892405063, -0.0006567510549, +0.0005086497890, +0.0010751054852, +0.0011588607595, -0.0001672995781, -0.0009400843882, -0.0012489451477, -0.0011073839662, +0.0003799578059, -0.0008755274262, -0.0024014767932, -0.0005987341772, +0.0006373417722, -0.0002575949367, +0.0000837552743, +0.0003476793249, +0.0004829113924, -0.0004314345992, -0.0006438818565, +0.0007274261603, -0.0004957805907, -0.0023628691983, -0.0027685654008, -0.0023242616034, +0.0006630801688, +0.0025624472574, +0.0014421940928, +0.0018928270042, +0.0024915611814, +0.0022662447257, +0.0011331223629, -0.0011267932489, -0.0016932489451, -0.0007016877637, -0.0012683544304, -0.0006696202532, -0.0000643459916, -0.0004377637131, +0.0000580168776, -0.0002704641350, -0.0005086497890, +0.0009206751055, +0.0010816455696, +0.0003670886076, -0.0001415611814, -0.0005149789030, -0.0003734177215, -0.0009915611814, +0.0005407172996, +0.0010687763713, -0.0013455696203, -0.0014099156118, +0.0000322784810, +0.0001995780591, -0.0002575949367, -0.0011010548523, -0.0010044303797, +0.0007082278481, +0.0008820675105, +0.0000128691983, -0.0000514767932, +0.0004892405063, +0.0011974683544, +0.0013135021097, +0.0002896624473, -0.0003991561181, +0.0001223628692, -0.0004635021097, -0.0018090717300, -0.0020474683544, -0.0019894514768, -0.0006630801688, +0.0015130801688, +0.0018219409283, +0.0005407172996, -0.0005795358650, -0.0002833333333, +0.0001867088608, -0.0003476793249, +0.0002962025316, +0.0007016877637, +0.0000900843882, -0.0006888185654, -0.0018478902954, -0.0013006329114, +0.0000580168776, +0.0014164556962, +0.0035540084388, +0.0032835443038, +0.0010751054852, -0.0009012658228, -0.0028586497890, -0.0024658227848, -0.0007919831224, -0.0002767932489, +0.0005537974684, +0.0010172995781, +0.0006824894515, -0.0005343881857, -0.0009206751055, +0.0008305907173, +0.0012940928270, +0.0004443037975, +0.0007082278481, +0.0002575949367, +0.0000772151899, +0.0002575949367, +0.0000643459916, +0.0008949367089, +0.0023563291139, +0.0011010548523, -0.0005729957806, +0.0008949367089, +0.0011073839662, -0.0011396624473, -0.0018219409283, -0.0020023206751, -0.0023242616034, -0.0004443037975, -0.0001223628692, -0.0000322784810, +0.0019122362869, +0.0023113924051, +0.0002639240506, -0.0006373417722, -0.0003734177215, -0.0009012658228, -0.0006888185654, +0.0006888185654, +0.0011396624473, +0.0002061181435, -0.0000128691983, +0.0005343881857, +0.0015516877637, +0.0027168776371, +0.0022018987342, -0.0000257383966, +0.0001158227848, +0.0000580168776, -0.0023886075949, -0.0024466244726, -0.0006759493671, +0.0001481012658, +0.0000128691983, +0.0003799578059, +0.0014679324895, +0.0018799578059, +0.0010430379747, +0.0007854430380, +0.0009658227848, +0.0005795358650, +0.0004763713080, +0.0005795358650, +0.0010622362869, +0.0021890295359, +0.0012618143460, +0.0003282700422, +0.0013778481013, +0.0009721518987, -0.0002381856540, +0.0002767932489, +0.0000580168776, -0.0011010548523, -0.0001672995781, +0.0012489451477, +0.0007468354430, +0.0000000000000, -0.0003476793249, -0.0000772151899, +0.0009915611814, +0.0008755274262, +0.0008305907173, +0.0016997890295, +0.0007082278481, -0.0004571729958, -0.0000128691983, +0.0011073839662, +0.0017447257384, +0.0004571729958, +0.0002318565401, +0.0007082278481, -0.0000128691983, +0.0006502109705, +0.0008111814346, -0.0003670886076, -0.0004056962025, +0.0002962025316, -0.0003025316456, -0.0007662447257, -0.0005215189873, -0.0007854430380, -0.0006244725738, +0.0004377637131, +0.0005086497890, +0.0008369198312, +0.0017447257384, +0.0007597046414, -0.0009915611814, -0.0018993670886, -0.0019829113924, -0.0006824894515, +0.0005729957806, +0.0010430379747, +0.0008434599156, +0.0012103375527, +0.0006824894515, -0.0008048523207, -0.0011202531646, -0.0014613924051, -0.0019251054852, -0.0010622362869, -0.0000514767932, +0.0008691983122, +0.0021696202532, +0.0014936708861, +0.0006888185654, -0.0002833333333, -0.0006759493671, -0.0009012658228, -0.0006244725738, +0.0001158227848, +0.0002575949367, -0.0004506329114, -0.0005021097046, +0.0001995780591, +0.0003734177215, +0.0000386075949, -0.0011267932489, -0.0016675105485, -0.0014744725738, -0.0008305907173, -0.0010044303797, -0.0001094936709, +0.0007082278481, -0.0009786919831, -0.0017447257384, -0.0001801687764, +0.0000837552743, -0.0012683544304, -0.0016289029536, -0.0009400843882, +0.0002447257384, +0.0001094936709, -0.0005343881857, -0.0006630801688, -0.0007725738397, -0.0013327004219, -0.0009206751055, +0.0003540084388, +0.0004314345992, -0.0004506329114, -0.0007854430380, -0.0011588607595, -0.0018993670886, -0.0014164556962, -0.0005215189873, +0.0000451476793, +0.0002639240506, +0.0000837552743, +0.0001352320675, -0.0006116033755, -0.0021567510549, -0.0021118143460, -0.0010559071730, -0.0000257383966, +0.0003282700422, +0.0003991561181, +0.0012103375527, +0.0007145569620, -0.0001286919831, +0.0004443037975, +0.0000643459916, -0.0011073839662, -0.0019508438819, -0.0021052742616, -0.0014485232068, -0.0002962025316, +0.0004571729958, -0.0000451476793, -0.0012812236287, -0.0012103375527, -0.0000194092827, +0.0012618143460, +0.0019056962025, +0.0019185654008, +0.0021504219409, +0.0014613924051, -0.0002189873418, -0.0011845991561, -0.0003605485232, +0.0002318565401, +0.0004892405063, +0.0005987341772, +0.0000451476793, -0.0010816455696, -0.0009272151899, -0.0004314345992, -0.0003670886076, +0.0000837552743, +0.0010751054852, +0.0009400843882, +0.0001223628692, +0.0001223628692, +0.0003862869198, +0.0009721518987, +0.0014808016878, +0.0009141350211, +0.0000643459916, -0.0009206751055, -0.0013327004219, -0.0007210970464, -0.0006630801688, -0.0003219409283, +0.0002833333333, +0.0001672995781, +0.0000194092827, -0.0006310126582, -0.0006567510549, +0.0011974683544, +0.0030902953586, +0.0025238396624, +0.0006888185654, -0.0005666666667, -0.0011396624473, -0.0014164556962, -0.0008048523207, -0.0001352320675, +0.0005795358650, +0.0013327004219, +0.0007145569620, -0.0004314345992, -0.0000900843882, +0.0015388185654, +0.0017383966245, +0.0007145569620, +0.0003862869198, -0.0001029535865, -0.0001481012658, +0.0000580168776, -0.0002962025316, +0.0000900843882, +0.0006567510549, -0.0001415611814, -0.0000580168776, +0.0003348101266, +0.0001932489451, +0.0006824894515, +0.0010559071730, +0.0004120253165, +0.0002767932489, +0.0000322784810, -0.0005666666667, -0.0009400843882, -0.0009335443038, +0.0000837552743, +0.0008626582278, +0.0003411392405, +0.0001672995781, +0.0011459915612, +0.0017189873418, +0.0012040084388, +0.0007210970464, -0.0002704641350, -0.0011267932489, -0.0011073839662, -0.0012297468354, -0.0009915611814, +0.0007597046414, +0.0021310126582, +0.0015322784810, +0.0007854430380, +0.0002189873418, -0.0003991561181, -0.0010172995781, -0.0010493670886, -0.0003799578059, +0.0007210970464, +0.0009335443038, +0.0004635021097, +0.0002253164557, +0.0001801687764, -0.0002189873418, -0.0003799578059, +0.0003476793249, +0.0007405063291, +0.0006759493671, +0.0008111814346, +0.0010687763713, +0.0001029535865, -0.0010493670886, -0.0006630801688, -0.0004314345992, -0.0007145569620, -0.0000966244726, +0.0004377637131, -0.0003219409283, +0.0000451476793, +0.0004763713080, -0.0006373417722, -0.0011588607595, -0.0003799578059, +0.0001672995781, +0.0001286919831, -0.0001481012658, +0.0000772151899, +0.0005021097046, +0.0000451476793, -0.0002253164557, +0.0001481012658, +0.0002381856540, +0.0001932489451, +0.0003348101266, -0.0003090717300, -0.0012812236287, -0.0011845991561, -0.0002704641350, -0.0003605485232, -0.0003991561181, +0.0000580168776, -0.0003282700422, -0.0007854430380, -0.0000643459916, +0.0004957805907, -0.0001029535865, -0.0007016877637, -0.0002447257384, -0.0002318565401, -0.0010430379747, -0.0002704641350, +0.0011845991561, +0.0016675105485, +0.0013907172996, +0.0005987341772, +0.0002575949367, +0.0003219409283, -0.0005666666667, -0.0007725738397, -0.0002575949367, -0.0005924050633, -0.0012232067511, -0.0012554852321, -0.0010816455696, +0.0001158227848, +0.0012232067511, +0.0009078059072, -0.0001481012658, -0.0001609704641, +0.0003928270042, +0.0000708860759, -0.0008305907173, -0.0009786919831, -0.0007533755274, -0.0007854430380, -0.0003862869198, +0.0000837552743, -0.0003154008439, -0.0005343881857, +0.0001932489451, +0.0008048523207, +0.0003605485232, -0.0001481012658, -0.0006502109705, -0.0007533755274, -0.0006953586498, -0.0002447257384, +0.0001672995781, +0.0003799578059, +0.0005729957806, +0.0004185654008, -0.0001801687764, +0.0000966244726, +0.0008305907173, +0.0006373417722, -0.0000322784810, +0.0000837552743, +0.0001867088608, -0.0005149789030, -0.0007405063291, -0.0004248945148, -0.0006310126582, -0.0000322784810, +0.0006244725738, +0.0003991561181, +0.0003991561181, +0.0010044303797, +0.0011073839662, +0.0008111814346, +0.0000900843882, -0.0005407172996, -0.0008111814346, -0.0005537974684, -0.0004377637131, -0.0003219409283, +0.0004443037975, +0.0009978902954, +0.0000514767932, -0.0007468354430, +0.0002510548523, +0.0013392405063, +0.0009978902954, +0.0004957805907, +0.0000966244726, +0.0001801687764, +0.0002639240506, -0.0000128691983, +0.0002124472574, +0.0007339662447, +0.0002061181435, -0.0000580168776, -0.0005858649789, -0.0016160337553, -0.0017383966245, -0.0003219409283, +0.0005021097046, +0.0002447257384, +0.0000514767932, -0.0003734177215, -0.0002767932489, +0.0002189873418, +0.0002189873418, -0.0000194092827, +0.0000386075949, +0.0003605485232, +0.0005666666667, +0.0006438818565, +0.0006116033755, +0.0005343881857, +0.0004377637131, +0.0006888185654, +0.0001801687764, -0.0004571729958, -0.0004506329114, -0.0000322784810, +0.0001094936709, -0.0001158227848, -0.0003540084388, -0.0003219409283, +0.0000708860759, +0.0000708860759, -0.0004248945148, -0.0002189873418, +0.0004443037975, -0.0001801687764, -0.0009786919831, -0.0004892405063, +0.0003862869198, +0.0001223628692, -0.0003219409283, +0.0001738396624, +0.0005795358650, +0.0004056962025, -0.0000194092827, -0.0004185654008, -0.0005472573840, -0.0002767932489, -0.0001672995781, -0.0004957805907, +0.0000065400844, +0.0004056962025, +0.0000128691983, -0.0005858649789, -0.0010751054852, -0.0012360759494, -0.0001867088608, +0.0005343881857, +0.0004763713080, +0.0003154008439, -0.0000257383966, -0.0004635021097, -0.0008434599156, -0.0003540084388, +0.0008111814346, +0.0009078059072, +0.0001544303797, -0.0004185654008, -0.0000966244726, +0.0001609704641, -0.0003025316456, -0.0005278481013, -0.0003219409283, -0.0007597046414, -0.0002447257384, +0.0000900843882, +0.0000386075949, +0.0005021097046, +0.0006310126582, +0.0001481012658, +0.0001932489451, +0.0004506329114, +0.0005278481013, +0.0003219409283, +0.0001415611814, -0.0002639240506, -0.0003090717300, -0.0001029535865, -0.0001672995781, -0.0003282700422, +0.0001738396624, +0.0000065400844, +0.0003025316456, +0.0006696202532, +0.0004120253165, +0.0003154008439, +0.0002253164557, -0.0002124472574, -0.0004829113924, -0.0006244725738, -0.0010687763713, -0.0015580168776, -0.0006310126582, +0.0008691983122, +0.0018928270042, +0.0014679324895, +0.0000772151899, -0.0001738396624, +0.0001932489451, -0.0011974683544, -0.0019637130802, -0.0011525316456, +0.0002381856540, +0.0005924050633, +0.0003605485232, +0.0002767932489, +0.0007533755274, +0.0011782700422, +0.0011845991561, +0.0000900843882, -0.0016417721519, -0.0021890295359, -0.0006759493671, +0.0000580168776, -0.0003411392405, -0.0003476793249, +0.0002124472574, +0.0008497890295, +0.0007662447257, +0.0006244725738, +0.0001158227848, -0.0002253164557, +0.0002833333333, -0.0004829113924, -0.0012618143460, -0.0003862869198, +0.0005086497890, +0.0011459915612, +0.0011139240506, -0.0003605485232, -0.0007210970464, -0.0003991561181, -0.0001801687764, +0.0002124472574, +0.0003928270042, -0.0004571729958, -0.0009850210970, +0.0002189873418, +0.0012103375527, +0.0007725738397, -0.0000772151899, -0.0004571729958, +0.0004571729958, +0.0008949367089, -0.0003991561181, -0.0011459915612, -0.0005472573840, -0.0002318565401, +0.0001672995781, +0.0009978902954, +0.0010879746835, +0.0007919831224, +0.0006630801688, +0.0003411392405, +0.0002061181435, +0.0005666666667, -0.0000514767932, -0.0013327004219, -0.0009721518987, +0.0001867088608, +0.0003154008439, -0.0000900843882, -0.0000900843882, +0.0005343881857, +0.0003219409283, -0.0005987341772, -0.0006116033755, +0.0008434599156, +0.0011073839662, +0.0002318565401, -0.0004056962025, -0.0005666666667, -0.0005729957806, -0.0003090717300, -0.0001995780591, +0.0000708860759, +0.0009658227848, +0.0014679324895, +0.0007662447257, +0.0000708860759, +0.0005278481013, +0.0000900843882, -0.0013392405063, -0.0009206751055, -0.0003928270042, -0.0008177215190, -0.0006824894515, +0.0003605485232, +0.0000837552743, +0.0000065400844, -0.0001481012658, +0.0003991561181, +0.0011267932489, +0.0011654008439, +0.0004571729958, -0.0007597046414, -0.0026204641350, -0.0024080168776, -0.0005987341772, +0.0008048523207, +0.0016094936709, +0.0017447257384, +0.0017575949367, +0.0012040084388, +0.0005729957806, -0.0012618143460, -0.0027491561181, -0.0021118143460, -0.0005924050633, -0.0001223628692, -0.0002767932489, -0.0000514767932, +0.0002767932489, +0.0001738396624, -0.0004635021097, +0.0005086497890, +0.0011073839662, +0.0009400843882, -0.0001094936709, -0.0006310126582, -0.0011073839662, -0.0014679324895, -0.0000322784810, +0.0011396624473, +0.0011459915612, +0.0006630801688, -0.0000322784810, +0.0001995780591, +0.0001801687764, -0.0001094936709, -0.0003282700422, -0.0006567510549, -0.0006116033755, +0.0000000000000, -0.0008177215190, -0.0013970464135, -0.0014164556962, -0.0003670886076, +0.0007791139241, +0.0011202531646, +0.0015130801688, +0.0011331223629, +0.0002253164557, -0.0002253164557, +0.0002896624473, +0.0008820675105, +0.0005021097046, -0.0004829113924, -0.0011525316456, -0.0015388185654, -0.0016352320675, -0.0008626582278, +0.0003219409283, +0.0008111814346, +0.0000065400844, -0.0004443037975, -0.0000966244726, +0.0008434599156, +0.0016031645570, +0.0008177215190, +0.0000900843882, -0.0000772151899, -0.0005537974684, -0.0007405063291, -0.0002510548523, -0.0005278481013, -0.0012554852321, -0.0007983122363, +0.0004120253165, +0.0011588607595, +0.0015388185654, +0.0008434599156, -0.0005537974684, -0.0009012658228, -0.0007725738397, +0.0001995780591, +0.0015322784810, +0.0005858649789, -0.0004185654008, +0.0004185654008, +0.0010301687764, +0.0006310126582, -0.0003219409283, -0.0008497890295, -0.0004443037975, +0.0000514767932, -0.0000451476793, -0.0002833333333, -0.0000772151899, +0.0002704641350, +0.0001609704641, -0.0005537974684, +0.0002318565401, +0.0018670886076, +0.0020345991561, -0.0004314345992, -0.0025559071730, -0.0023951476793, -0.0005215189873, +0.0003282700422, +0.0000000000000, -0.0007791139241, -0.0007919831224, -0.0001481012658, +0.0002704641350, +0.0006181434599, +0.0009978902954, +0.0007854430380, +0.0012877637131, +0.0020345991561, +0.0014164556962, +0.0002896624473, +0.0001481012658, +0.0005987341772, +0.0007082278481, -0.0004443037975, -0.0019571729958, -0.0021890295359, -0.0017641350211, -0.0024466244726, -0.0021438818565, -0.0007791139241, +0.0003605485232, +0.0010430379747, +0.0015902953586, +0.0021953586498, +0.0028907172996, +0.0027297468354, +0.0019122362869, +0.0008048523207, +0.0000386075949, -0.0012812236287, -0.0031097046414, -0.0034251054852, -0.0014293248945, +0.0003090717300, +0.0009464135021, +0.0000837552743, -0.0008177215190, -0.0011782700422, -0.0012940928270, -0.0007016877637, +0.0008305907173, +0.0018864978903, +0.0014485232068, +0.0001544303797, -0.0002962025316, +0.0001738396624, +0.0003862869198, +0.0006696202532, +0.0009335443038, +0.0007791139241, -0.0003154008439, -0.0015645569620, -0.0013198312236, -0.0011654008439, -0.0013263713080, -0.0002318565401, +0.0012168776371, +0.0018993670886, +0.0020151898734, +0.0011331223629, +0.0002061181435, -0.0002447257384, +0.0001223628692, +0.0009978902954, +0.0006824894515, -0.0008305907173, -0.0024143459916, -0.0026654008439, -0.0019508438819, -0.0004957805907, +0.0011654008439, +0.0017318565401, +0.0000194092827, -0.0015774261603, +0.0001932489451, +0.0039531645570, +0.0044938818565, +0.0007725738397, -0.0017962025316, -0.0022213080169, -0.0021181434599, -0.0005987341772, +0.0005215189873, +0.0001352320675, -0.0006116033755, -0.0016094936709, -0.0019251054852, -0.0003476793249, +0.0006373417722, +0.0007145569620, +0.0013649789030, +0.0031677215190, +0.0032320675105, +0.0024658227848, +0.0017704641350, +0.0001481012658, -0.0010044303797, -0.0008626582278, -0.0008691983122, -0.0003282700422, -0.0002253164557, -0.0015774261603, -0.0008305907173, +0.0007919831224, +0.0004635021097, +0.0001738396624, +0.0010301687764, +0.0012103375527, +0.0004829113924, +0.0000514767932, +0.0001672995781, +0.0005666666667, -0.0004377637131, -0.0018090717300, -0.0017833333333, -0.0011331223629, -0.0014808016878, -0.0007791139241, +0.0009272151899, +0.0026782700422, +0.0020474683544, -0.0002639240506, -0.0009850210970, -0.0005021097046, -0.0004506329114, -0.0004185654008, +0.0001286919831, +0.0015259493671, +0.0018864978903, +0.0008691983122, -0.0005537974684, -0.0020924050633, -0.0022147679325, -0.0012618143460, -0.0004185654008, +0.0010816455696, +0.0021310126582, +0.0005858649789, -0.0008434599156, -0.0001738396624, +0.0003282700422, +0.0000966244726, +0.0005149789030, +0.0012168776371, +0.0009658227848, +0.0000514767932, -0.0006696202532, -0.0008691983122, -0.0006373417722, -0.0002510548523, +0.0000194092827, +0.0000837552743, -0.0008883966245, -0.0017383966245, -0.0009012658228, -0.0000451476793, +0.0005278481013, +0.0018350210970, +0.0026525316456, +0.0015130801688, +0.0003282700422, -0.0004443037975, -0.0009915611814, -0.0016094936709, -0.0015451476793, -0.0001738396624, +0.0008434599156, +0.0003411392405, -0.0000900843882, -0.0004829113924, -0.0009141350211, -0.0007082278481, -0.0007919831224, -0.0010816455696, -0.0005278481013, +0.0007662447257, +0.0008563291139, -0.0003411392405, -0.0004248945148, -0.0003025316456, -0.0009850210970, -0.0007016877637, +0.0008369198312, +0.0013069620253, +0.0010301687764, +0.0010107594937, +0.0009400843882, -0.0006373417722, -0.0022276371308, -0.0018928270042, -0.0006502109705, +0.0000643459916, -0.0005278481013, -0.0011654008439, +0.0000194092827, +0.0011396624473, +0.0007791139241, -0.0003605485232, -0.0008949367089, -0.0006310126582, -0.0002575949367, +0.0004957805907, +0.0018542194093, +0.0021696202532, +0.0006630801688, -0.0022213080169, -0.0027748945148, -0.0005987341772, +0.0007983122363, +0.0007791139241, +0.0000000000000, -0.0003154008439, +0.0002381856540, +0.0001995780591, -0.0003734177215, -0.0008883966245, -0.0015388185654, -0.0013135021097, +0.0003734177215, +0.0011396624473, +0.0000772151899, -0.0007016877637, -0.0008369198312, -0.0009206751055, -0.0007468354430, -0.0001609704641, +0.0013392405063, +0.0024981012658, +0.0019765822785, +0.0008755274262, -0.0003282700422, -0.0010107594937, -0.0003670886076, +0.0006759493671, +0.0003670886076, -0.0000322784810, +0.0002767932489, +0.0001738396624, +0.0000386075949, +0.0000772151899, -0.0000128691983, -0.0000322784810, +0.0001094936709, +0.0003670886076, +0.0004635021097, +0.0006824894515, +0.0009529535865, +0.0004829113924, -0.0003025316456, -0.0006759493671, -0.0005086497890, -0.0000580168776, +0.0003734177215, +0.0014936708861, +0.0016031645570, +0.0007662447257, +0.0004443037975, +0.0004056962025, +0.0003670886076, +0.0004892405063, +0.0005021097046, -0.0000772151899, -0.0012360759494, -0.0009400843882, +0.0001672995781, -0.0002253164557, -0.0006244725738, +0.0001481012658, +0.0005215189873, +0.0003411392405, +0.0003991561181, +0.0002704641350, -0.0000514767932, +0.0003411392405, +0.0010044303797, +0.0010236286920, +0.0001352320675, -0.0004957805907, -0.0000514767932, +0.0005795358650, +0.0002253164557, -0.0003734177215, -0.0003605485232, +0.0001932489451, +0.0004763713080, +0.0003670886076, -0.0003605485232, -0.0011525316456, -0.0009464135021, +0.0000000000000, +0.0003605485232, -0.0001029535865, -0.0001609704641, +0.0000000000000, -0.0000322784810, +0.0000386075949, -0.0001672995781, -0.0009915611814, -0.0011654008439, -0.0010622362869, -0.0007405063291, -0.0004120253165, +0.0002381856540, +0.0010172995781, +0.0010044303797, -0.0000065400844, -0.0007725738397, -0.0005215189873, -0.0003154008439, -0.0003025316456, +0.0005278481013, +0.0007210970464, -0.0003476793249, -0.0009978902954, -0.0014550632911, -0.0016611814346, -0.0010364978903, -0.0004185654008, +0.0001415611814, +0.0003476793249, +0.0004957805907, +0.0008177215190, +0.0000257383966, -0.0010172995781, -0.0002833333333, +0.0003928270042, +0.0004120253165, +0.0005666666667, +0.0004377637131, +0.0000128691983, +0.0000514767932, +0.0004185654008, +0.0005601265823, -0.0001801687764, -0.0005924050633, +0.0000837552743, +0.0004763713080, +0.0000514767932, -0.0001867088608, -0.0003862869198, +0.0000194092827, +0.0006502109705, +0.0002447257384, +0.0004377637131, +0.0013327004219, +0.0010107594937, -0.0001223628692, -0.0012103375527, -0.0013521097046, -0.0011525316456, -0.0011588607595, -0.0002318565401, +0.0007533755274, +0.0006310126582, +0.0001995780591, +0.0000900843882, -0.0001738396624, -0.0006116033755, -0.0005537974684, -0.0001223628692, +0.0001867088608, +0.0004120253165, -0.0000514767932, -0.0007597046414, -0.0009592827004, -0.0009141350211, -0.0002962025316, +0.0003219409283, +0.0003090717300, +0.0003991561181, +0.0003476793249, -0.0002833333333, -0.0002575949367, +0.0005407172996, +0.0008626582278, +0.0007145569620, +0.0003411392405, -0.0001609704641, -0.0006438818565, -0.0001415611814, +0.0001801687764, -0.0002124472574, -0.0002767932489, -0.0000065400844, +0.0000708860759, +0.0007210970464, +0.0008497890295, +0.0004377637131, +0.0002639240506, +0.0001029535865, -0.0002962025316, -0.0007274261603, -0.0004314345992, +0.0006567510549, +0.0008434599156, +0.0000966244726, -0.0002318565401, -0.0000966244726, -0.0003154008439, -0.0000194092827, +0.0004763713080, +0.0003090717300, +0.0002896624473, +0.0006438818565, +0.0004120253165, +0.0000643459916, +0.0000451476793, +0.0000580168776, -0.0004248945148, -0.0004957805907, +0.0005666666667, +0.0008883966245, -0.0002639240506, -0.0003282700422, +0.0001158227848, +0.0001609704641, -0.0000451476793, +0.0000837552743, +0.0004571729958, +0.0001995780591, -0.0004957805907, -0.0003928270042, +0.0000000000000, +0.0001158227848, -0.0001867088608, -0.0004443037975, -0.0003282700422, -0.0003799578059, -0.0000966244726, +0.0003219409283, +0.0003348101266, +0.0000194092827, -0.0003282700422, -0.0003670886076, -0.0001223628692, +0.0000708860759, +0.0007210970464, +0.0008111814346, -0.0005343881857, -0.0015966244726, -0.0013263713080, -0.0008755274262, -0.0005858649789, -0.0000257383966, +0.0006630801688, +0.0007854430380, +0.0006502109705, +0.0005149789030, +0.0005149789030, +0.0001158227848, -0.0005086497890, -0.0006888185654, -0.0003862869198, -0.0004185654008, -0.0004443037975, -0.0002124472574, +0.0005086497890, +0.0006373417722, -0.0003540084388, -0.0002639240506, +0.0013778481013, +0.0015194092827, +0.0001609704641, -0.0004120253165, -0.0000128691983, -0.0002639240506, -0.0006888185654, -0.0006696202532, -0.0006244725738, -0.0010107594937, -0.0007405063291, +0.0003540084388, +0.0012940928270, +0.0010301687764, +0.0005021097046, -0.0000257383966, -0.0003991561181, -0.0002318565401, +0.0004892405063, +0.0007533755274, +0.0003411392405, -0.0004314345992, -0.0007339662447, +0.0001738396624, +0.0009978902954, +0.0008434599156, +0.0001029535865, -0.0009012658228, -0.0012746835443, -0.0010559071730, -0.0005666666667, +0.0003348101266, +0.0003670886076, -0.0001801687764, -0.0001158227848, +0.0001481012658, +0.0006310126582, +0.0008369198312, +0.0006759493671, +0.0009141350211, +0.0011588607595, +0.0008305907173, +0.0000000000000, -0.0003862869198, -0.0002318565401, -0.0002896624473, -0.0007210970464, -0.0006953586498, -0.0002833333333, +0.0003476793249, +0.0004571729958, +0.0000322784810, -0.0003282700422, -0.0001415611814, +0.0004957805907, +0.0011911392405, +0.0009915611814, +0.0004443037975, -0.0001544303797, -0.0000514767932, +0.0004377637131, +0.0001158227848, -0.0004248945148, +0.0003282700422, +0.0007016877637, +0.0001352320675, -0.0002253164557, +0.0003862869198, +0.0012877637131, +0.0011396624473, +0.0003282700422, +0.0000900843882, -0.0003411392405, -0.0006438818565, -0.0007533755274, -0.0009786919831, -0.0005924050633, +0.0002575949367, +0.0004700421941, +0.0003282700422, +0.0004314345992, +0.0005795358650, -0.0001223628692, -0.0009978902954, -0.0010044303797, -0.0002767932489, +0.0008369198312, +0.0011845991561, +0.0007016877637, +0.0001867088608, -0.0002896624473, -0.0001029535865, +0.0003154008439, -0.0001223628692, -0.0004829113924, -0.0003734177215, -0.0006116033755, -0.0007339662447, -0.0002189873418, -0.0000772151899, -0.0005407172996, -0.0001995780591, +0.0002124472574, +0.0000000000000, +0.0005278481013, +0.0013455696203, +0.0012168776371, +0.0003670886076, +0.0001029535865, +0.0003154008439, +0.0000322784810, -0.0005021097046, -0.0004892405063, -0.0004377637131, -0.0003348101266, -0.0004829113924, -0.0005407172996, -0.0004957805907, -0.0006567510549, -0.0005537974684, -0.0001352320675, +0.0005215189873, +0.0014485232068, +0.0007145569620, -0.0005666666667, -0.0007016877637, -0.0003605485232, -0.0002447257384, +0.0000386075949, -0.0000708860759, -0.0005407172996, -0.0006824894515, -0.0003025316456, -0.0004248945148, -0.0004443037975, -0.0002061181435, -0.0000837552743, -0.0002189873418, -0.0003025316456, -0.0000643459916, +0.0002189873418, +0.0001995780591, +0.0002510548523, +0.0002061181435, -0.0003411392405, -0.0012554852321, -0.0011717299578, -0.0005537974684, +0.0000322784810, +0.0009206751055, +0.0012554852321, +0.0007983122363, +0.0002061181435, -0.0003991561181, -0.0007597046414, -0.0006630801688, -0.0002833333333, +0.0000128691983, +0.0004700421941, +0.0005537974684, +0.0000772151899, -0.0001801687764, -0.0003154008439, -0.0004571729958, -0.0001544303797, +0.0000386075949, +0.0001223628692, +0.0005278481013, +0.0005472573840, +0.0003282700422, +0.0001738396624, +0.0000772151899, -0.0000128691983, +0.0002575949367, +0.0002318565401, -0.0000900843882, -0.0004957805907, -0.0005472573840, -0.0004248945148, -0.0001738396624, +0.0003282700422, +0.0006438818565, +0.0000000000000, -0.0002189873418, -0.0001932489451, -0.0005666666667, -0.0005343881857, +0.0001094936709, +0.0003928270042, +0.0001286919831, +0.0000322784810, +0.0004377637131, -0.0001094936709, -0.0005729957806, +0.0000386075949, +0.0005795358650, +0.0000643459916, -0.0003862869198, -0.0004635021097, -0.0005343881857, -0.0008820675105, -0.0009400843882, -0.0003991561181, +0.0000322784810, -0.0001801687764, -0.0001995780591, +0.0006116033755, +0.0012683544304, +0.0007725738397, -0.0001544303797, -0.0003862869198, -0.0000966244726, -0.0005278481013, -0.0008755274262, -0.0004571729958, +0.0000900843882, +0.0003928270042, +0.0002962025316, -0.0000772151899, +0.0001029535865, +0.0007405063291, +0.0007210970464, +0.0002381856540, -0.0005858649789, -0.0008820675105, -0.0004056962025, +0.0001158227848, +0.0004763713080, +0.0004571729958, -0.0002189873418, -0.0004185654008, +0.0000451476793, +0.0004377637131, +0.0004829113924, +0.0006116033755, +0.0008691983122, +0.0007339662447, -0.0000837552743, -0.0005666666667, -0.0004763713080, +0.0000772151899, +0.0006181434599, +0.0009721518987, +0.0006759493671, -0.0000322784810, -0.0002447257384, +0.0005343881857, +0.0007274261603, +0.0002639240506, -0.0000386075949, +0.0001094936709, +0.0001738396624, +0.0000257383966, -0.0000643459916, +0.0000643459916, -0.0000772151899, -0.0001352320675, -0.0001738396624, +0.0000128691983, +0.0002639240506, -0.0000643459916, -0.0007533755274, -0.0006116033755, +0.0004377637131, +0.0009915611814, +0.0006824894515, +0.0006373417722, +0.0006824894515, +0.0004957805907, +0.0001544303797, -0.0005021097046, -0.0008755274262, -0.0006181434599, -0.0005086497890, -0.0003670886076, +0.0000772151899, +0.0007405063291, +0.0011717299578, +0.0009141350211, +0.0002704641350, -0.0004185654008, -0.0009012658228, -0.0012040084388, -0.0010687763713, -0.0005086497890, +0.0001158227848, +0.0002124472574, +0.0001352320675, -0.0001995780591, -0.0002061181435, -0.0000257383966, -0.0000065400844, +0.0003025316456, +0.0008434599156, +0.0005086497890, +0.0001932489451, -0.0000772151899, -0.0004763713080, -0.0005858649789, -0.0006116033755, -0.0008177215190, -0.0002061181435, +0.0006373417722, +0.0009978902954, +0.0007210970464, +0.0003540084388, -0.0001672995781, -0.0004056962025, -0.0003025316456, +0.0000065400844, +0.0002381856540, +0.0001801687764, -0.0003219409283, -0.0002833333333, +0.0003540084388, +0.0003862869198, -0.0003928270042, -0.0008369198312, -0.0004763713080, -0.0000451476793, +0.0003282700422, +0.0009272151899, +0.0011459915612, +0.0009786919831, +0.0004892405063, -0.0005407172996, -0.0013455696203, -0.0013778481013, -0.0008434599156, -0.0000643459916, +0.0004700421941, +0.0008111814346, +0.0009592827004, +0.0008563291139, +0.0004185654008, -0.0003411392405, -0.0008626582278, -0.0009272151899, -0.0007210970464, -0.0005666666667, -0.0002896624473, +0.0000257383966, +0.0002510548523, +0.0003154008439, +0.0004443037975, +0.0003862869198, +0.0004829113924, +0.0003348101266, -0.0000708860759, -0.0004700421941, -0.0003348101266, -0.0000966244726, -0.0002189873418, -0.0006244725738, -0.0007983122363, -0.0007919831224, -0.0000065400844, +0.0008048523207, +0.0009721518987, +0.0005729957806, +0.0002704641350, +0.0002124472574, +0.0001867088608, -0.0002833333333, -0.0003282700422, +0.0000000000000, -0.0001223628692, -0.0006116033755, -0.0007725738397, -0.0005343881857, +0.0000837552743, +0.0004829113924, +0.0008820675105, +0.0008949367089, +0.0003090717300, +0.0000580168776, +0.0002447257384, +0.0001481012658, +0.0002189873418, +0.0001867088608, -0.0001995780591, -0.0005343881857, -0.0008949367089, -0.0010751054852, -0.0005278481013, +0.0002896624473, +0.0004892405063, +0.0005987341772, +0.0008240506329, +0.0006696202532, +0.0001544303797, -0.0001223628692, -0.0000837552743, +0.0003540084388, +0.0004957805907, -0.0000837552743, -0.0005666666667, -0.0001867088608, -0.0003799578059, -0.0005924050633, -0.0000322784810, -0.0001481012658, -0.0008177215190, -0.0003540084388, +0.0004763713080, +0.0008691983122, +0.0003862869198, -0.0003090717300, -0.0006438818565, -0.0005278481013, -0.0002575949367, +0.0001158227848, +0.0001672995781, +0.0001352320675, +0.0002124472574, +0.0001544303797, -0.0002510548523, -0.0004314345992, -0.0003090717300, -0.0000065400844, -0.0001672995781, -0.0003348101266, -0.0000514767932, +0.0002381856540, +0.0002061181435, +0.0001029535865, -0.0001867088608, -0.0006373417722, -0.0008883966245, -0.0003154008439, +0.0001995780591, +0.0002896624473, +0.0005343881857, +0.0004120253165, -0.0000386075949, -0.0001609704641, -0.0001223628692, -0.0001223628692, -0.0000580168776, +0.0000451476793, +0.0004248945148, +0.0004635021097, +0.0001672995781, -0.0002833333333, -0.0006181434599, -0.0007662447257, -0.0007983122363, -0.0004571729958, +0.0004314345992, +0.0009915611814, +0.0008949367089, +0.0005086497890, -0.0001352320675, -0.0008883966245, -0.0007468354430, -0.0001544303797, +0.0005343881857, +0.0007016877637, +0.0003476793249, +0.0000322784810, -0.0001223628692, -0.0006244725738, -0.0008177215190, -0.0006502109705, -0.0002447257384, +0.0001352320675, +0.0006116033755, +0.0007405063291, +0.0005472573840, -0.0000065400844, -0.0008369198312, -0.0015002109705, -0.0011782700422, -0.0002381856540, +0.0003670886076, +0.0002767932489, +0.0003862869198, +0.0005472573840, +0.0001352320675, -0.0004571729958, -0.0005858649789, -0.0001223628692, -0.0001801687764, -0.0006567510549, -0.0004120253165, +0.0002639240506, +0.0004829113924, +0.0002253164557, +0.0000837552743, +0.0001995780591, -0.0002124472574, -0.0008111814346, -0.0005149789030, +0.0006310126582, +0.0014808016878, +0.0013907172996, +0.0008369198312, +0.0002767932489, -0.0003219409283, -0.0003670886076, -0.0002061181435, -0.0003090717300, -0.0003154008439, +0.0001738396624, +0.0004892405063, +0.0004763713080, +0.0003025316456, -0.0000194092827, -0.0004120253165, -0.0000708860759, +0.0002896624473, +0.0005086497890, +0.0007854430380, +0.0009592827004, +0.0007983122363, +0.0007210970464, +0.0003154008439, -0.0000900843882, -0.0001801687764, -0.0000643459916, -0.0002124472574, -0.0001995780591, +0.0000837552743, +0.0004185654008, +0.0005924050633, +0.0003090717300, -0.0002639240506, -0.0004185654008, -0.0003928270042, -0.0003991561181, +0.0001286919831, +0.0009786919831, +0.0011331223629, +0.0008305907173, +0.0004635021097, -0.0001286919831, -0.0008369198312, -0.0011331223629, -0.0008883966245, -0.0003282700422, +0.0001481012658, +0.0000900843882, +0.0000194092827, +0.0002575949367, +0.0001094936709, -0.0002124472574, -0.0002189873418, -0.0005472573840, -0.0005021097046, +0.0003090717300, +0.0014035864979, +0.0016740506329, +0.0005795358650, -0.0005729957806, -0.0001932489451, +0.0000708860759, -0.0004829113924, -0.0009400843882, -0.0004700421941, +0.0006116033755, +0.0013907172996, +0.0007468354430, -0.0003862869198, -0.0009721518987, -0.0007662447257, -0.0000451476793, +0.0007339662447, +0.0007791139241, +0.0003090717300, -0.0001932489451, -0.0001544303797, -0.0004377637131, -0.0006181434599, +0.0005729957806, +0.0017833333333, +0.0013327004219, +0.0003928270042, +0.0002510548523, +0.0003154008439, +0.0000514767932, -0.0004892405063, -0.0004829113924, -0.0001609704641, -0.0005021097046, -0.0009141350211, -0.0000386075949, +0.0013135021097, +0.0011267932489, -0.0001481012658, -0.0006888185654, -0.0009078059072, -0.0007597046414, +0.0000194092827, +0.0002575949367, +0.0002189873418, +0.0006696202532, +0.0006953586498, -0.0000194092827, -0.0013135021097, -0.0018219409283, -0.0004506329114, +0.0009464135021, +0.0000194092827, -0.0012554852321, -0.0009464135021, +0.0000000000000, +0.0002189873418, +0.0000128691983, -0.0003219409283, -0.0003540084388, -0.0004763713080, -0.0003799578059, -0.0001801687764, -0.0000580168776, -0.0001223628692, +0.0000000000000, -0.0001158227848, -0.0002061181435, -0.0004957805907, -0.0004377637131, -0.0000966244726, +0.0003605485232, +0.0003348101266, -0.0007983122363, -0.0016223628692, -0.0008048523207, -0.0000128691983, +0.0001481012658, +0.0004571729958, +0.0000000000000, -0.0008755274262, -0.0009335443038, -0.0005987341772, -0.0008626582278, -0.0008177215190, +0.0000772151899, +0.0014873417722, +0.0019443037975, +0.0010236286920, -0.0003025316456, -0.0004763713080, -0.0000322784810, +0.0004248945148, +0.0008755274262, +0.0009335443038, +0.0005215189873, -0.0000257383966, -0.0007854430380, -0.0011010548523, -0.0005537974684, +0.0002510548523, +0.0003734177215, -0.0000386075949, -0.0002575949367, -0.0001995780591, +0.0000000000000, +0.0007339662447, +0.0010622362869, +0.0008177215190, +0.0001544303797, -0.0006567510549, -0.0010107594937, -0.0004829113924, +0.0000772151899, +0.0001609704641, -0.0000128691983, -0.0000580168776, -0.0002447257384, -0.0006310126582, -0.0008497890295, -0.0008177215190, -0.0003991561181, +0.0003540084388, +0.0005472573840, +0.0001801687764, +0.0002318565401, +0.0006696202532, +0.0005343881857, -0.0001544303797, -0.0006052742616, -0.0005729957806, -0.0004120253165, -0.0004120253165, -0.0003799578059, -0.0002510548523, +0.0002767932489, +0.0007145569620, +0.0010364978903, +0.0010816455696, +0.0006502109705, +0.0002061181435, +0.0000900843882, -0.0002510548523, -0.0001995780591, +0.0000257383966, -0.0001352320675, -0.0001286919831, +0.0002639240506, +0.0002447257384, -0.0000322784810, +0.0001286919831, +0.0002962025316, -0.0001609704641, +0.0000386075949, +0.0005278481013, +0.0004377637131, +0.0002381856540, +0.0002896624473, +0.0003799578059, +0.0008434599156, +0.0005086497890, -0.0004185654008, -0.0005086497890, +0.0000643459916, +0.0000000000000, -0.0004248945148, -0.0003991561181, -0.0002833333333, -0.0003799578059, -0.0003154008439, +0.0000128691983, +0.0003348101266, +0.0006888185654, +0.0009721518987, +0.0010751054852, +0.0009978902954, +0.0005537974684, -0.0000900843882, +0.0000065400844, +0.0001867088608, -0.0004185654008, -0.0008240506329, -0.0001867088608, +0.0002896624473, +0.0001158227848, -0.0004700421941, -0.0007725738397, -0.0004314345992, +0.0001223628692, +0.0000128691983, -0.0000580168776, +0.0003219409283, +0.0005795358650, +0.0001352320675, -0.0002447257384, -0.0003670886076, -0.0001094936709, +0.0002447257384, +0.0000514767932, -0.0000257383966, +0.0007016877637, +0.0008563291139, +0.0003411392405, +0.0001286919831, +0.0002510548523, +0.0002124472574, -0.0002704641350, -0.0012360759494, -0.0013198312236, -0.0001801687764, +0.0009335443038, +0.0010493670886, +0.0005149789030, -0.0000194092827, -0.0001738396624, -0.0003282700422, -0.0003605485232, +0.0004248945148, +0.0011267932489, +0.0010364978903, +0.0005987341772, +0.0002510548523, -0.0002575949367, -0.0004571729958, -0.0002447257384, -0.0001352320675, -0.0005472573840, -0.0006310126582, -0.0002447257384, +0.0000580168776, -0.0001481012658, -0.0001672995781, -0.0000386075949, -0.0001352320675, -0.0006373417722, -0.0007597046414, -0.0004443037975, -0.0000580168776, +0.0000386075949, +0.0002061181435, +0.0003282700422, +0.0006310126582, +0.0007662447257, +0.0002704641350, -0.0004443037975, -0.0005407172996, -0.0006696202532, -0.0008883966245, -0.0006567510549, +0.0000000000000, +0.0007016877637, +0.0010107594937, +0.0005472573840, -0.0002253164557, -0.0009658227848, -0.0013263713080, -0.0008949367089, +0.0001286919831, +0.0008755274262, +0.0010816455696, +0.0008883966245, +0.0001223628692, -0.0004377637131, -0.0003154008439, -0.0001415611814, -0.0003991561181, -0.0004571729958, -0.0004248945148, -0.0004314345992, -0.0003025316456, +0.0002510548523, +0.0005472573840, +0.0006502109705, +0.0002962025316, -0.0003670886076, -0.0005987341772, -0.0001223628692, +0.0001544303797, +0.0000386075949, -0.0004957805907, -0.0006824894515, -0.0004443037975, +0.0000322784810, +0.0003799578059, +0.0005472573840, +0.0004571729958, +0.0005407172996, +0.0003991561181, +0.0003282700422, +0.0001672995781, -0.0002510548523, -0.0005729957806, -0.0004506329114, -0.0001995780591, +0.0000386075949, +0.0000708860759, +0.0000386075949, -0.0000386075949, +0.0000580168776, +0.0000708860759, +0.0000900843882, +0.0006438818565, +0.0010430379747, +0.0006438818565, -0.0000580168776, -0.0004829113924, -0.0004635021097, -0.0002639240506, -0.0001867088608, -0.0001352320675, -0.0003411392405, -0.0004443037975, -0.0007082278481, -0.0005472573840, +0.0003411392405, +0.0010301687764, +0.0009012658228, +0.0003862869198, -0.0002318565401, -0.0002767932489, -0.0000643459916, +0.0001932489451, +0.0001932489451, -0.0001094936709, -0.0004506329114, -0.0003025316456, -0.0000065400844, +0.0002124472574, -0.0000708860759, -0.0001932489451, -0.0000451476793, +0.0003928270042, +0.0005666666667, +0.0001544303797, -0.0001801687764, +0.0003154008439, +0.0003799578059, -0.0002381856540, -0.0005795358650, -0.0004120253165, -0.0002704641350, -0.0000257383966, +0.0004314345992, +0.0006502109705, +0.0005021097046, +0.0002124472574, -0.0001995780591, -0.0005149789030, -0.0001481012658, +0.0003540084388, +0.0002896624473, -0.0001352320675, -0.0002896624473, -0.0003219409283, -0.0005987341772, -0.0008949367089, -0.0005924050633, -0.0000772151899, +0.0002447257384, +0.0004314345992, +0.0006310126582, +0.0003219409283, -0.0001544303797, -0.0003411392405, +0.0001932489451, +0.0004248945148, +0.0002767932489, -0.0000194092827, -0.0001352320675, -0.0004443037975, -0.0006630801688, -0.0004377637131, +0.0000708860759, +0.0002510548523, +0.0003411392405, +0.0001223628692, -0.0000322784810, +0.0001415611814, +0.0003799578059, +0.0004571729958, +0.0004185654008, +0.0000580168776, -0.0002639240506, -0.0004185654008, -0.0002061181435, -0.0001223628692, -0.0002189873418, +0.0000000000000, +0.0001801687764, +0.0002124472574, +0.0001672995781, +0.0000065400844, -0.0001158227848, -0.0001609704641, -0.0003670886076, -0.0001672995781, +0.0000643459916, -0.0001609704641, -0.0004248945148, -0.0001352320675, +0.0001158227848, +0.0001286919831, -0.0000643459916, -0.0000580168776, +0.0000772151899, -0.0000257383966, -0.0004443037975, -0.0003799578059, -0.0002318565401, +0.0001094936709, +0.0002962025316, +0.0000580168776, -0.0000900843882, +0.0001867088608, +0.0000580168776, -0.0002124472574, -0.0002189873418, +0.0000643459916, +0.0001481012658, +0.0002447257384, +0.0003090717300, +0.0000708860759, -0.0002124472574, -0.0003862869198, -0.0007210970464, -0.0006438818565, -0.0001094936709, -0.0000194092827, -0.0003605485232, -0.0003476793249, +0.0002767932489, +0.0007210970464, +0.0006052742616, +0.0002575949367, -0.0000065400844, -0.0003282700422, -0.0004957805907, -0.0003540084388, +0.0001544303797, +0.0005601265823, +0.0007210970464, +0.0004763713080, +0.0000966244726, -0.0001672995781, -0.0000386075949, -0.0000772151899, -0.0004056962025, -0.0007533755274, -0.0004377637131, +0.0001609704641, +0.0005472573840, +0.0004506329114, +0.0002575949367, -0.0000322784810, -0.0000580168776, +0.0002189873418, +0.0003476793249, -0.0001481012658, -0.0004377637131, -0.0003282700422, -0.0001029535865, +0.0000386075949, +0.0002833333333, +0.0005472573840, +0.0006438818565, +0.0005601265823, +0.0002896624473, -0.0001094936709, -0.0005021097046, -0.0003928270042, +0.0003605485232, +0.0007597046414, +0.0003411392405, +0.0000322784810, -0.0003411392405, -0.0007791139241, -0.0007082278481, -0.0001352320675, +0.0003928270042, +0.0008626582278, +0.0008691983122, +0.0007016877637, +0.0003991561181, +0.0000643459916, -0.0003540084388, -0.0003862869198, -0.0001867088608, +0.0001672995781, +0.0003219409283, +0.0001352320675, -0.0001029535865, -0.0001094936709, -0.0001544303797, -0.0000580168776, -0.0002575949367, -0.0003799578059, +0.0001672995781, +0.0007274261603, +0.0005924050633, +0.0004571729958, +0.0003540084388, -0.0000643459916, -0.0003670886076, -0.0000514767932, +0.0001286919831, +0.0000194092827, +0.0002639240506, +0.0004056962025, +0.0000580168776, -0.0001867088608, +0.0000000000000, +0.0002704641350, +0.0003090717300, +0.0000837552743, +0.0000514767932, -0.0000837552743, -0.0002510548523, -0.0003282700422, -0.0002704641350, -0.0003476793249, -0.0002381856540, -0.0000900843882, -0.0000257383966, -0.0001801687764, -0.0000065400844, +0.0003025316456, +0.0001738396624, -0.0003090717300, -0.0003862869198, -0.0003411392405, -0.0001672995781, +0.0002833333333, +0.0005149789030, +0.0003928270042, +0.0005601265823, +0.0005149789030, +0.0002639240506, -0.0001738396624, -0.0004892405063, -0.0004120253165, -0.0002767932489, -0.0005729957806, -0.0006373417722, -0.0003670886076, +0.0000065400844, +0.0002318565401, +0.0000966244726, +0.0000065400844, +0.0002447257384, +0.0004506329114, +0.0000772151899, -0.0001801687764, -0.0001029535865, +0.0000643459916, +0.0001544303797, +0.0001995780591, -0.0000451476793, -0.0001415611814, -0.0001672995781, -0.0001094936709, -0.0000708860759, -0.0000194092827, -0.0000772151899, +0.0000451476793, +0.0002704641350, +0.0003734177215, -0.0000900843882, -0.0003928270042, -0.0002447257384, +0.0000128691983, -0.0000772151899, -0.0003219409283, -0.0004635021097, -0.0002253164557, -0.0002061181435, -0.0001223628692, +0.0001672995781, +0.0002962025316, +0.0003154008439, +0.0004443037975, +0.0003348101266, +0.0002061181435, +0.0000966244726, -0.0001738396624, -0.0003154008439, -0.0000580168776, +0.0002510548523, +0.0001995780591, -0.0000322784810, -0.0001672995781, -0.0000514767932, -0.0001029535865, -0.0003862869198, -0.0004314345992, +0.0000257383966, +0.0001932489451, +0.0001481012658, +0.0000000000000, -0.0001544303797, -0.0002767932489, -0.0001609704641, -0.0000837552743, +0.0002381856540, +0.0004763713080, +0.0005795358650, +0.0004443037975, +0.0002189873418, -0.0000900843882, -0.0001738396624, -0.0002189873418, -0.0002381856540, -0.0002767932489, -0.0001609704641, -0.0001609704641, -0.0001029535865, -0.0001481012658, -0.0002896624473, -0.0001609704641, +0.0002767932489, +0.0003799578059, +0.0002253164557, -0.0000451476793, -0.0004248945148, -0.0003734177215, -0.0000386075949, +0.0000386075949, +0.0000194092827, +0.0000772151899, -0.0001738396624, -0.0004700421941, -0.0005407172996, -0.0002510548523, +0.0000772151899, +0.0001415611814, -0.0002253164557, -0.0002833333333, -0.0001029535865, +0.0000194092827, +0.0000514767932, +0.0004506329114, +0.0006244725738, +0.0004635021097, +0.0001352320675, -0.0001995780591, -0.0007274261603, -0.0008434599156, -0.0003991561181, +0.0002575949367, +0.0006373417722, +0.0007725738397, +0.0006052742616, +0.0002704641350, -0.0002061181435, -0.0002962025316, +0.0001672995781, +0.0006373417722, +0.0005537974684, +0.0001609704641, -0.0001609704641, -0.0002124472574, -0.0001995780591, -0.0004506329114, -0.0005278481013, -0.0003862869198, -0.0001481012658, +0.0002962025316, +0.0008497890295, +0.0007597046414, +0.0000643459916, -0.0004763713080, -0.0002704641350, +0.0000900843882, +0.0003282700422, +0.0003476793249, +0.0003348101266, +0.0002061181435, -0.0000451476793, -0.0003928270042, -0.0001672995781, +0.0001158227848, +0.0001481012658, -0.0000194092827, -0.0001544303797, -0.0003282700422, -0.0001481012658, +0.0001094936709, +0.0002767932489, +0.0001286919831, -0.0002896624473, -0.0003219409283, +0.0003025316456, +0.0003799578059, -0.0000386075949, -0.0002189873418, -0.0001415611814, +0.0001932489451, +0.0003090717300, +0.0000451476793, +0.0000900843882, +0.0001932489451, -0.0001352320675, -0.0002639240506, -0.0001415611814, +0.0001415611814, +0.0001801687764, +0.0000065400844, +0.0000451476793, +0.0004957805907, +0.0006052742616, +0.0003862869198, +0.0000643459916, -0.0001223628692, -0.0005278481013, -0.0006052742616, -0.0003025316456, -0.0000128691983, -0.0001223628692, -0.0001286919831, +0.0000000000000, +0.0001738396624, +0.0000580168776, +0.0000900843882, +0.0002189873418, +0.0001094936709, -0.0001738396624, -0.0000257383966, +0.0002447257384, +0.0001094936709, -0.0003605485232, -0.0004443037975, -0.0001029535865, +0.0001995780591, +0.0002061181435, +0.0000065400844, -0.0000966244726, -0.0001223628692, -0.0001738396624, -0.0001867088608, +0.0000065400844, +0.0000580168776, +0.0002124472574, +0.0004185654008, +0.0005537974684, +0.0003090717300, +0.0001352320675, +0.0000000000000, -0.0003025316456, -0.0007854430380, -0.0005215189873, -0.0000257383966, +0.0002124472574, +0.0001544303797, +0.0001094936709, +0.0000128691983, +0.0001672995781, +0.0001415611814, -0.0000194092827, -0.0002253164557, +0.0000128691983, +0.0003605485232, +0.0003090717300, -0.0001544303797, -0.0003476793249, -0.0003734177215, -0.0003348101266, -0.0001415611814, +0.0002189873418, +0.0005086497890, +0.0004120253165, +0.0002575949367, +0.0003154008439, +0.0002767932489, +0.0000194092827, +0.0000194092827, -0.0000386075949, -0.0001932489451, -0.0001672995781, +0.0001415611814, +0.0001415611814, +0.0000000000000, -0.0001094936709, +0.0001867088608, +0.0003025316456, +0.0001481012658, -0.0001867088608, -0.0001223628692, -0.0000194092827, -0.0000708860759, -0.0003348101266, -0.0001544303797, +0.0000000000000, -0.0000451476793, -0.0001995780591, -0.0000772151899, +0.0001738396624, +0.0004635021097, +0.0005601265823, +0.0006052742616, +0.0002124472574, -0.0003476793249, -0.0005666666667, -0.0003025316456, +0.0001223628692, +0.0003219409283, +0.0001158227848, -0.0000772151899, -0.0001481012658, -0.0001738396624, -0.0000966244726, -0.0000386075949, +0.0001738396624, +0.0002381856540, +0.0001094936709, -0.0002061181435, -0.0002510548523, -0.0002124472574, -0.0002767932489, -0.0002318565401, +0.0004314345992, +0.0006630801688, +0.0003090717300, -0.0001672995781, -0.0001415611814, -0.0000580168776, -0.0000065400844, -0.0001223628692, -0.0001094936709, -0.0001223628692, +0.0000643459916, +0.0000837552743, -0.0001029535865, -0.0003476793249, -0.0000708860759, +0.0002189873418, +0.0001932489451, +0.0000128691983, +0.0000065400844, +0.0000128691983, -0.0000065400844, -0.0000966244726, -0.0000772151899, -0.0000386075949, -0.0000708860759, -0.0001223628692, -0.0002381856540, -0.0001223628692, -0.0001223628692, -0.0004248945148, -0.0006116033755, -0.0000514767932, +0.0005924050633, +0.0008755274262, +0.0006116033755, +0.0001932489451, -0.0004120253165, -0.0006824894515, -0.0006759493671, -0.0003605485232, +0.0000322784810, +0.0003605485232, +0.0000386075949, -0.0002896624473, -0.0002318565401, +0.0000837552743, +0.0000708860759, +0.0000065400844, -0.0001415611814, -0.0000580168776, +0.0000708860759, +0.0001544303797, +0.0001158227848, +0.0001544303797, +0.0000708860759, -0.0000966244726, -0.0000708860759, +0.0000772151899, +0.0000000000000, -0.0000580168776, +0.0000386075949, -0.0000837552743, -0.0002253164557, -0.0002639240506, -0.0000772151899, +0.0000322784810, +0.0000837552743, -0.0000514767932, -0.0000772151899, -0.0000772151899, -0.0001158227848, -0.0002575949367, -0.0001867088608, -0.0001932489451, +0.0001158227848, +0.0004443037975, +0.0005215189873, +0.0003799578059, +0.0002510548523, -0.0001286919831, -0.0004248945148, -0.0005215189873, -0.0002318565401, -0.0000514767932, +0.0000257383966, -0.0000386075949, -0.0001029535865, -0.0000643459916, +0.0001609704641, +0.0002510548523, +0.0000900843882, -0.0001932489451, -0.0001867088608, +0.0000451476793, +0.0000000000000, -0.0001609704641, -0.0002639240506, -0.0002381856540, -0.0001544303797, +0.0000322784810, +0.0001158227848, +0.0000708860759, -0.0001544303797, -0.0001094936709, +0.0000451476793, +0.0002704641350, +0.0002253164557, +0.0001672995781, +0.0001672995781, +0.0002575949367, +0.0001481012658, +0.0000065400844, -0.0001352320675, -0.0000514767932, -0.0000065400844, +0.0000322784810, -0.0002189873418, -0.0004506329114, -0.0003282700422, -0.0000837552743, -0.0001415611814, -0.0001801687764, -0.0001544303797, -0.0000966244726, -0.0000257383966, +0.0000451476793, +0.0001672995781, +0.0002639240506, +0.0003154008439, +0.0002124472574, +0.0000128691983, -0.0001286919831, +0.0000194092827, +0.0001158227848, +0.0000451476793, -0.0000708860759, +0.0001094936709, +0.0002189873418, +0.0001738396624, +0.0000386075949, +0.0000257383966, -0.0001544303797, -0.0001609704641, -0.0000708860759, +0.0001932489451, +0.0002124472574, +0.0001286919831, +0.0000966244726, +0.0000772151899, -0.0001995780591, -0.0001801687764, +0.0000900843882, +0.0002447257384, +0.0001352320675, +0.0001867088608, +0.0003476793249, +0.0003670886076, +0.0003540084388, +0.0003090717300, +0.0001415611814, -0.0000386075949, -0.0001995780591, -0.0003540084388, -0.0002704641350, +0.0000257383966, +0.0003734177215, +0.0004185654008, +0.0003090717300, +0.0000128691983, -0.0003734177215, -0.0007983122363, -0.0006310126582, -0.0000451476793, +0.0004635021097, +0.0004056962025, +0.0002962025316, +0.0002318565401, +0.0002510548523, +0.0000386075949, -0.0001609704641, -0.0002253164557, +0.0000386075949, +0.0000900843882, -0.0000514767932, -0.0001995780591, -0.0002833333333, -0.0004829113924, -0.0004248945148, -0.0002381856540, -0.0000643459916, +0.0001352320675, +0.0003476793249, +0.0002962025316, +0.0000386075949, -0.0000128691983, +0.0001801687764, +0.0003605485232, +0.0003991561181, +0.0003799578059, +0.0000194092827, -0.0002833333333, -0.0005149789030, -0.0005021097046, -0.0002962025316, +0.0001352320675, +0.0002704641350, +0.0002896624473, +0.0001158227848, +0.0000194092827, -0.0001094936709, +0.0000514767932, +0.0003411392405, +0.0004571729958, +0.0001029535865, -0.0001995780591, -0.0003154008439, -0.0001738396624, -0.0000257383966, -0.0000128691983, -0.0000837552743, +0.0000386075949, +0.0000386075949, +0.0000194092827, +0.0000194092827, +0.0000451476793, +0.0001932489451, +0.0001995780591, +0.0000065400844, +0.0000386075949, +0.0002447257384, +0.0001995780591, +0.0000451476793, -0.0002189873418, -0.0003411392405, -0.0004185654008, -0.0002061181435, -0.0000065400844, +0.0000451476793, -0.0000643459916, -0.0000580168776, -0.0001995780591, +0.0000065400844, +0.0002253164557, +0.0001609704641, -0.0000386075949, +0.0000708860759, +0.0000514767932, -0.0000065400844, -0.0000772151899, +0.0000708860759, -0.0000257383966, -0.0003282700422, -0.0004185654008, -0.0001544303797, +0.0002189873418, +0.0005343881857, +0.0004892405063, +0.0002061181435, -0.0000065400844, -0.0001867088608, -0.0003928270042, -0.0004248945148, +0.0000065400844, +0.0002639240506, +0.0000966244726, -0.0000966244726, +0.0001544303797, +0.0003734177215, +0.0002962025316, -0.0000257383966, -0.0003605485232, -0.0007597046414, -0.0006244725738, -0.0000194092827, +0.0005666666667, +0.0003862869198, +0.0000386075949, -0.0002896624473, -0.0003540084388, -0.0001801687764, +0.0001352320675, +0.0001932489451, +0.0001867088608, +0.0000451476793, -0.0001158227848, -0.0003348101266, -0.0002575949367, -0.0000194092827, -0.0000643459916, -0.0000900843882, +0.0001544303797, +0.0002253164557, +0.0000000000000, -0.0000451476793, +0.0000000000000, -0.0000386075949, -0.0003154008439, -0.0004571729958, -0.0002189873418, +0.0002704641350, +0.0003670886076, +0.0001932489451, +0.0000194092827, +0.0001609704641, +0.0000837552743, -0.0001672995781, -0.0004443037975, -0.0003799578059, -0.0001672995781, +0.0001609704641, +0.0003348101266, +0.0004763713080, +0.0002896624473, +0.0001223628692, -0.0000194092827, -0.0001094936709, -0.0000065400844, +0.0003411392405, +0.0003025316456, -0.0001094936709, -0.0004957805907, -0.0004571729958, -0.0000837552743, +0.0002124472574, +0.0003540084388, +0.0003282700422, +0.0002253164557, +0.0000708860759, +0.0000257383966, -0.0001481012658, -0.0001415611814, -0.0000772151899, -0.0000643459916, -0.0002767932489, -0.0001544303797, -0.0000322784810, +0.0000580168776, +0.0000322784810, +0.0000128691983, -0.0002575949367, -0.0004056962025, -0.0004700421941, -0.0004377637131, -0.0004120253165, +0.0000451476793, +0.0005795358650, +0.0007016877637, +0.0002639240506, -0.0001352320675, -0.0003154008439, -0.0002381856540, -0.0002833333333, -0.0003348101266, -0.0000580168776, +0.0002962025316, +0.0003991561181, +0.0003605485232, +0.0002896624473, +0.0000194092827, -0.0001094936709, -0.0002639240506, -0.0004056962025, -0.0005729957806, -0.0003348101266, +0.0001286919831, +0.0006888185654, +0.0007339662447, +0.0004571729958, +0.0000643459916, +0.0001352320675, +0.0002510548523, +0.0003670886076, +0.0002962025316, +0.0003540084388, +0.0002061181435, -0.0002061181435, -0.0005987341772, -0.0002510548523, +0.0003411392405, +0.0007339662447, +0.0006953586498, +0.0005537974684, +0.0003670886076, +0.0000000000000, -0.0003670886076, -0.0002833333333, +0.0000000000000, -0.0000194092827, -0.0001867088608, -0.0000772151899, +0.0003476793249, +0.0006116033755, +0.0006052742616, +0.0001995780591, -0.0001158227848, -0.0004248945148, -0.0004957805907, -0.0003734177215, +0.0000966244726, +0.0002447257384, +0.0002253164557, +0.0000900843882, +0.0000708860759, -0.0001158227848, -0.0000837552743, -0.0001801687764, -0.0001544303797, -0.0000900843882, -0.0001286919831, -0.0003540084388, -0.0004056962025, -0.0003799578059, -0.0000643459916, +0.0003411392405, +0.0004571729958, +0.0003025316456, +0.0003540084388, +0.0003154008439, -0.0001352320675, -0.0004120253165, -0.0003090717300, -0.0001094936709, -0.0000128691983, -0.0002124472574, -0.0006696202532, -0.0006116033755, -0.0002704641350, +0.0003090717300, +0.0007082278481, +0.0006502109705, +0.0000708860759, -0.0002253164557, -0.0002767932489, -0.0001029535865, -0.0001544303797, -0.0000386075949, +0.0000966244726, +0.0003090717300, +0.0002896624473, +0.0002833333333, +0.0001801687764, +0.0000837552743, -0.0000900843882, +0.0000000000000, +0.0000322784810, -0.0000514767932, -0.0001609704641, -0.0002962025316, -0.0004185654008, -0.0002318565401, +0.0001158227848, +0.0002381856540, +0.0002639240506, +0.0001544303797, -0.0000451476793, -0.0001995780591, -0.0000837552743, -0.0001672995781, -0.0002124472574, -0.0003090717300, -0.0001286919831, +0.0001995780591, +0.0003991561181, +0.0001415611814, +0.0001609704641, +0.0001223628692, -0.0000322784810, -0.0001867088608, -0.0000065400844, +0.0000065400844, +0.0000386075949, +0.0000000000000, -0.0000837552743, -0.0001738396624, -0.0000451476793, +0.0000000000000, +0.0001352320675, +0.0002896624473, +0.0003025316456, +0.0001029535865, -0.0002381856540, -0.0004377637131, -0.0002447257384, +0.0001286919831, +0.0001932489451, +0.0001481012658, +0.0001672995781, +0.0003348101266, +0.0002124472574, -0.0000514767932, -0.0002962025316, -0.0001544303797, -0.0001286919831, -0.0002253164557, -0.0002767932489, +0.0000451476793, +0.0001801687764, +0.0001544303797, +0.0000000000000, +0.0000128691983, -0.0000386075949, -0.0001029535865, -0.0001481012658, +0.0000580168776, +0.0001352320675, +0.0001609704641, +0.0002124472574, +0.0002318565401, +0.0000194092827, -0.0001672995781, -0.0002061181435, -0.0001481012658, -0.0001481012658, -0.0002833333333, -0.0003025316456, -0.0001738396624, +0.0000837552743, +0.0001867088608, +0.0003476793249, +0.0004635021097, +0.0004443037975, +0.0000514767932, -0.0002896624473, -0.0004763713080, -0.0002767932489, -0.0001029535865, +0.0000000000000, -0.0000322784810, +0.0000837552743, +0.0001029535865, +0.0001223628692, +0.0000451476793, +0.0000451476793, +0.0000643459916, +0.0002639240506, +0.0002189873418, +0.0000322784810, -0.0000643459916, -0.0000772151899, -0.0001672995781, -0.0002767932489, -0.0001672995781, +0.0000772151899, +0.0001481012658, -0.0000194092827, -0.0000514767932, -0.0000708860759, -0.0000322784810, -0.0000322784810, +0.0001029535865, +0.0001609704641, +0.0002061181435, +0.0001094936709, +0.0000900843882, -0.0000580168776, -0.0001609704641, -0.0003154008439, -0.0003540084388, -0.0003090717300, +0.0000000000000, +0.0001609704641, +0.0002318565401, +0.0001672995781, +0.0001672995781, +0.0001738396624, +0.0001415611814, -0.0000580168776, -0.0002447257384, -0.0003540084388, -0.0003862869198, -0.0002833333333, -0.0000194092827, +0.0002767932489, +0.0003282700422, +0.0002381856540, +0.0000194092827, -0.0000514767932, -0.0001223628692, -0.0001609704641, -0.0002381856540, -0.0000257383966, +0.0002061181435, +0.0003219409283, +0.0000580168776, -0.0001544303797, -0.0003348101266, -0.0002767932489, -0.0003090717300, -0.0003476793249, -0.0003605485232, -0.0000900843882, +0.0001995780591, +0.0003411392405, +0.0001738396624, +0.0000000000000, -0.0001415611814, -0.0000643459916, +0.0001158227848, +0.0001995780591, +0.0001286919831, -0.0000708860759, -0.0001801687764, -0.0000128691983, +0.0001995780591, +0.0001094936709, +0.0000772151899, +0.0000451476793, +0.0000580168776, -0.0000322784810, -0.0000966244726, -0.0002896624473, -0.0002962025316, -0.0002962025316, -0.0000580168776, +0.0001352320675, +0.0003219409283, +0.0002767932489, +0.0002510548523, +0.0001932489451, +0.0001094936709, -0.0001867088608, -0.0002381856540, -0.0000643459916, +0.0002318565401, +0.0004056962025, +0.0003348101266, +0.0000643459916, -0.0001029535865, -0.0001995780591, -0.0003154008439, -0.0003540084388, -0.0002639240506, -0.0000257383966, +0.0000386075949, +0.0001094936709, +0.0001995780591, +0.0003154008439, +0.0000128691983, -0.0002510548523, -0.0002704641350, +0.0000000000000, +0.0000900843882, +0.0001801687764, +0.0000580168776, -0.0000065400844, -0.0001481012658, -0.0001738396624, -0.0000900843882, +0.0001094936709, +0.0001094936709, +0.0002962025316, +0.0004829113924, +0.0004829113924, +0.0002639240506, +0.0000000000000, -0.0002704641350, -0.0003605485232, -0.0003540084388, -0.0002575949367, +0.0000580168776, +0.0002124472574, +0.0001481012658, +0.0000257383966, +0.0001094936709, +0.0001995780591, +0.0003476793249, +0.0003090717300, +0.0002447257384, -0.0001029535865, -0.0002962025316, -0.0002833333333, +0.0000900843882, +0.0003154008439, +0.0003605485232, +0.0001544303797, +0.0000128691983, -0.0001609704641, -0.0000900843882, +0.0000257383966, +0.0002704641350, +0.0003348101266, +0.0002510548523, +0.0002447257384, +0.0003476793249, +0.0002447257384, -0.0000065400844, -0.0001672995781, -0.0001609704641, -0.0000580168776, -0.0000257383966, +0.0000708860759, +0.0001352320675, +0.0002189873418, +0.0002189873418, +0.0002510548523, +0.0000772151899, -0.0000065400844, -0.0000900843882, +0.0000257383966, -0.0000194092827, +0.0000900843882, +0.0002318565401, +0.0003411392405, +0.0000065400844, -0.0003025316456, -0.0004700421941, -0.0003025316456, -0.0001223628692, +0.0001672995781, +0.0002833333333, +0.0002318565401, +0.0001544303797, +0.0000772151899, -0.0002189873418, -0.0003862869198, -0.0001932489451, +0.0000322784810, +0.0000966244726, +0.0001352320675, +0.0003154008439, +0.0002704641350, -0.0000322784810, -0.0004506329114, -0.0004700421941, -0.0003219409283, -0.0000772151899, -0.0001094936709, -0.0001352320675, -0.0001995780591, -0.0001286919831, -0.0002510548523, -0.0002704641350, -0.0003411392405, -0.0002253164557, -0.0000837552743, +0.0001544303797, +0.0002767932489, +0.0004571729958, +0.0003670886076, +0.0001223628692, -0.0001094936709, -0.0001932489451, -0.0003348101266, -0.0003928270042, -0.0001932489451, +0.0000000000000, +0.0000772151899, +0.0001415611814, +0.0002510548523, +0.0001158227848, -0.0000837552743, -0.0003411392405, -0.0002833333333, -0.0000837552743, +0.0001158227848, -0.0000128691983, -0.0000451476793, -0.0000386075949, +0.0000837552743, +0.0000065400844, -0.0000065400844, -0.0001286919831, -0.0001286919831, -0.0001352320675, +0.0000128691983, +0.0000966244726, +0.0001801687764, +0.0001158227848, +0.0000065400844, -0.0002381856540, -0.0004056962025, -0.0003605485232, -0.0001481012658, +0.0000643459916, +0.0001286919831, +0.0001223628692, -0.0000386075949, -0.0002253164557, -0.0002896624473, +0.0000386075949, +0.0003411392405, +0.0005343881857, +0.0003862869198, +0.0001481012658, -0.0002575949367, -0.0004185654008, -0.0004248945148, -0.0002447257384, -0.0002189873418, +0.0000451476793, +0.0002704641350, +0.0003862869198, +0.0002124472574, +0.0000000000000, -0.0002253164557, -0.0001995780591, -0.0000966244726, +0.0000643459916, +0.0000900843882, -0.0000128691983, -0.0001738396624, -0.0001801687764, +0.0000322784810, +0.0001932489451, +0.0002381856540, +0.0001738396624, +0.0000580168776, -0.0002253164557, -0.0003025316456, -0.0002318565401, -0.0000580168776, -0.0000643459916, -0.0000837552743, -0.0002639240506, -0.0001867088608, -0.0001932489451, -0.0001415611814, +0.0000128691983, +0.0003090717300, +0.0004120253165, +0.0004377637131, +0.0001609704641, +0.0000000000000, -0.0001286919831, -0.0001995780591, -0.0001415611814, +0.0000257383966, +0.0000966244726, +0.0000451476793, +0.0000257383966, +0.0001352320675, +0.0001932489451, +0.0000580168776, -0.0000128691983, -0.0001481012658, -0.0001029535865, +0.0000065400844, +0.0000643459916, -0.0001352320675, -0.0001995780591, -0.0001867088608, +0.0001672995781, +0.0005021097046, +0.0006567510549, +0.0004700421941, +0.0003090717300, +0.0000708860759, -0.0000322784810, -0.0001738396624, -0.0000966244726, +0.0000451476793, +0.0001286919831, +0.0000322784810, -0.0000065400844, +0.0000257383966, +0.0000194092827, -0.0000580168776, -0.0000643459916, +0.0000837552743, +0.0002124472574, +0.0002253164557, +0.0000000000000, -0.0001158227848, -0.0002253164557, -0.0001415611814, -0.0000065400844, +0.0002510548523, +0.0002639240506, +0.0001415611814, -0.0001094936709, -0.0001672995781, -0.0002381856540, -0.0001286919831, -0.0000451476793, +0.0001286919831, +0.0001801687764, +0.0001672995781, -0.0000128691983, -0.0001352320675, -0.0002061181435, -0.0000966244726, +0.0000580168776, +0.0001415611814, +0.0000772151899, +0.0000065400844, +0.0000643459916, +0.0001158227848, +0.0001995780591, +0.0001352320675, +0.0000257383966, -0.0000708860759, +0.0000000000000, -0.0000257383966, +0.0000386075949, +0.0000451476793, +0.0000643459916, -0.0001158227848, -0.0000900843882, +0.0000194092827, +0.0001158227848, -0.0000837552743, -0.0001672995781, -0.0001544303797, +0.0000580168776, +0.0001672995781, +0.0001481012658, +0.0000000000000, -0.0000257383966, +0.0000128691983, +0.0001995780591, +0.0003090717300, +0.0001609704641, -0.0000708860759, -0.0002833333333, -0.0003282700422, -0.0001481012658, +0.0001352320675, +0.0001029535865, +0.0000643459916, -0.0000643459916, -0.0001867088608, -0.0003154008439, -0.0001352320675, +0.0000065400844, +0.0001801687764, +0.0001094936709, +0.0000386075949, -0.0001544303797, -0.0002833333333, -0.0002962025316, -0.0000837552743, -0.0000194092827, +0.0000966244726, +0.0002253164557, +0.0002639240506, +0.0001094936709, -0.0000772151899, -0.0002510548523, -0.0003154008439, -0.0002061181435, -0.0000708860759, +0.0000643459916, +0.0001223628692, +0.0001223628692, -0.0000194092827, -0.0000451476793, -0.0001094936709, -0.0000128691983, +0.0000322784810, +0.0001672995781, +0.0000900843882, -0.0000257383966, -0.0001995780591, -0.0000900843882, -0.0000128691983, +0.0000065400844, -0.0000837552743, +0.0000000000000, +0.0001481012658, +0.0003670886076, +0.0004443037975, +0.0003540084388, +0.0002061181435, +0.0001801687764, +0.0001867088608, +0.0000322784810, -0.0002833333333, -0.0005149789030, -0.0003734177215, -0.0001481012658, +0.0001158227848, +0.0001867088608, +0.0001223628692, +0.0000065400844, +0.0001932489451, +0.0002639240506, +0.0002510548523, +0.0001094936709, +0.0001609704641, +0.0001029535865, -0.0000580168776, -0.0003605485232, -0.0003476793249, -0.0002124472574, -0.0000194092827, +0.0000643459916, +0.0000451476793, -0.0001609704641, -0.0002447257384, -0.0002189873418, -0.0002253164557, -0.0001158227848, +0.0000966244726, +0.0003090717300, +0.0003928270042, +0.0004443037975, +0.0002639240506, -0.0000194092827, -0.0003154008439, -0.0002896624473, -0.0001544303797, +0.0000708860759, +0.0000000000000, -0.0001094936709, -0.0002510548523, -0.0001352320675, +0.0000322784810, +0.0002189873418, +0.0001223628692, +0.0000128691983, -0.0001158227848, -0.0001029535865, -0.0000772151899, -0.0000322784810, -0.0000194092827, +0.0000194092827, +0.0001094936709, +0.0001415611814, +0.0000257383966, -0.0001029535865, +0.0000065400844, +0.0000322784810, -0.0000065400844, -0.0000837552743, +0.0000322784810, +0.0001094936709, +0.0002447257384, +0.0001352320675, +0.0000643459916, -0.0000580168776, -0.0000966244726, -0.0001544303797, -0.0000386075949, -0.0000900843882, -0.0001352320675, -0.0001738396624, -0.0000194092827, +0.0001223628692, +0.0002447257384, +0.0001995780591, +0.0001094936709, +0.0000322784810, +0.0000194092827, +0.0000451476793, +0.0000708860759, +0.0000966244726, -0.0000322784810, -0.0001415611814, -0.0003605485232, -0.0003219409283, -0.0001415611814, +0.0000900843882, +0.0001609704641, +0.0003605485232, +0.0003154008439, +0.0002447257384, -0.0000065400844, -0.0002061181435, -0.0004443037975, -0.0003090717300, -0.0000257383966, +0.0002704641350, +0.0002061181435, +0.0000322784810, -0.0002124472574, -0.0003348101266, -0.0003476793249, -0.0001738396624, +0.0000386075949, +0.0001223628692, +0.0000900843882, +0.0000065400844, +0.0000194092827, +0.0000451476793, +0.0001481012658, +0.0000386075949, +0.0000128691983, -0.0000194092827, +0.0000000000000, -0.0001029535865, +0.0000128691983, +0.0000451476793, +0.0001544303797, +0.0001158227848, +0.0001609704641, +0.0000966244726, +0.0001029535865, -0.0000772151899, -0.0001544303797, -0.0002767932489, -0.0002061181435, -0.0000065400844, +0.0002381856540, +0.0002510548523, +0.0000772151899, -0.0001223628692, -0.0002253164557, -0.0001481012658, +0.0000128691983, +0.0001932489451, +0.0001352320675, +0.0000772151899, +0.0000386075949, +0.0001415611814, +0.0000194092827, -0.0000257383966, -0.0001158227848, -0.0001029535865, -0.0002381856540, -0.0000643459916, +0.0001223628692, +0.0003090717300, +0.0001932489451, +0.0001029535865, -0.0001094936709, -0.0000900843882, -0.0000514767932, +0.0000065400844, +0.0000000000000, +0.0000837552743, +0.0000451476793, -0.0001029535865, -0.0001932489451, -0.0001286919831, +0.0000065400844, +0.0000708860759, +0.0001415611814, +0.0001223628692, +0.0001415611814, -0.0000128691983, -0.0000451476793, -0.0000900843882, -0.0000257383966, -0.0001029535865, +0.0000128691983, +0.0000386075949, +0.0001544303797, +0.0001029535865, +0.0000966244726, -0.0000194092827, +0.0000194092827, -0.0000451476793, -0.0000643459916, -0.0000772151899, +0.0000900843882, +0.0002124472574, +0.0002510548523, +0.0001738396624, +0.0000386075949, -0.0001094936709, -0.0001738396624, -0.0000514767932, -0.0000065400844, +0.0000257383966, +0.0000708860759, +0.0001481012658, +0.0000194092827, +0.0001029535865, +0.0001158227848, +0.0001415611814, +0.0000900843882, +0.0001223628692, -0.0000643459916, -0.0001738396624, -0.0002061181435, +0.0000966244726, +0.0002447257384, +0.0001672995781, -0.0001223628692, -0.0001932489451, -0.0000643459916, +0.0001158227848, +0.0000966244726, +0.0000257383966, -0.0000643459916, -0.0000900843882, -0.0000194092827, +0.0000128691983, +0.0001094936709, +0.0001481012658, +0.0001672995781, +0.0000837552743, +0.0001286919831, +0.0000772151899, +0.0000643459916, +0.0000000000000, +0.0000580168776, -0.0001158227848, -0.0002510548523, -0.0002962025316, -0.0001415611814, -0.0000837552743, +0.0000580168776, +0.0000966244726, +0.0001352320675, +0.0001352320675, +0.0002253164557, +0.0001995780591, -0.0000322784810, -0.0002704641350, -0.0002575949367, -0.0000386075949, +0.0000900843882, +0.0001094936709, -0.0000451476793, -0.0001286919831, -0.0001609704641, -0.0001029535865, -0.0001158227848, +0.0000900843882, +0.0002318565401, +0.0002318565401, -0.0000194092827, -0.0001223628692, -0.0001094936709, +0.0000128691983, -0.0000900843882, -0.0001932489451, -0.0002767932489, -0.0001609704641, +0.0000000000000, +0.0001609704641, +0.0001029535865, -0.0000708860759, -0.0001801687764, -0.0001481012658, +0.0000000000000, +0.0000580168776, +0.0000772151899, +0.0000708860759, +0.0001223628692, -0.0000194092827, -0.0001672995781, -0.0003799578059, -0.0003670886076, -0.0002575949367, -0.0000194092827, +0.0000643459916, +0.0001867088608, +0.0001158227848, +0.0000514767932, -0.0000128691983, +0.0000000000000, -0.0000257383966, +0.0000772151899, +0.0000966244726, +0.0000322784810, +0.0000194092827, +0.0000386075949, +0.0000194092827, -0.0000194092827, -0.0000257383966, -0.0000386075949, +0.0000708860759, +0.0001223628692, +0.0002124472574, +0.0001544303797, +0.0001094936709, +0.0000000000000, +0.0000194092827, -0.0000708860759, -0.0000966244726, -0.0001286919831, +0.0000322784810, +0.0000966244726, +0.0001029535865, -0.0000580168776, -0.0000772151899, -0.0000643459916, -0.0000065400844, +0.0000322784810, +0.0001223628692, +0.0002124472574, +0.0002318565401, +0.0001094936709, -0.0001094936709, -0.0001609704641, -0.0001158227848, +0.0000386075949, +0.0001029535865, +0.0001286919831, +0.0000128691983, +0.0000000000000, -0.0000772151899, -0.0000257383966, -0.0000580168776, -0.0000514767932, -0.0001481012658, -0.0001158227848, -0.0001995780591, -0.0001609704641, -0.0001223628692, +0.0000514767932, +0.0001415611814, +0.0002189873418, +0.0001932489451, +0.0001158227848, -0.0000194092827, -0.0001415611814, -0.0002253164557, -0.0003025316456, -0.0002189873418, -0.0001029535865, +0.0000194092827, -0.0000322784810, -0.0000580168776, -0.0001481012658, -0.0000194092827, +0.0000966244726, +0.0002767932489, +0.0001352320675, +0.0000514767932, -0.0000708860759, -0.0001094936709, -0.0001995780591, -0.0000580168776, +0.0000322784810, +0.0001094936709, +0.0000708860759, +0.0000900843882, +0.0000257383966, +0.0000065400844, +0.0000643459916, +0.0000643459916, +0.0000257383966, +0.0000322784810, +0.0001223628692, +0.0001158227848, +0.0001801687764, +0.0001415611814, +0.0000580168776, -0.0002318565401, -0.0003025316456, -0.0002639240506, +0.0000386075949, +0.0001609704641, +0.0001738396624, +0.0000000000000, +0.0000451476793, +0.0001094936709, +0.0002189873418, +0.0000772151899, -0.0000580168776, -0.0001672995781, -0.0001544303797, -0.0000708860759, +0.0001415611814, +0.0003928270042, +0.0004829113924, +0.0003219409283, -0.0000257383966, -0.0002833333333, -0.0003605485232, -0.0001544303797, -0.0000514767932, +0.0000000000000, -0.0000643459916, -0.0000194092827, -0.0001029535865, -0.0000257383966, +0.0000065400844, +0.0001544303797, +0.0001352320675, +0.0001738396624, +0.0001029535865, +0.0002124472574, +0.0002833333333, +0.0002639240506, +0.0000837552743, -0.0000128691983, -0.0001223628692, -0.0001932489451, -0.0002253164557, -0.0002381856540, -0.0001672995781, -0.0001867088608, -0.0001544303797, -0.0000580168776, +0.0002061181435, +0.0002896624473, +0.0002704641350, +0.0000128691983, -0.0000966244726, -0.0002447257384, -0.0001995780591, -0.0002253164557, -0.0000837552743, -0.0000451476793, +0.0000257383966, -0.0000194092827, +0.0000708860759, +0.0001029535865, +0.0000451476793, -0.0001932489451, -0.0002318565401, -0.0000514767932, +0.0000900843882, +0.0001223628692, +0.0000451476793, -0.0000451476793, -0.0001609704641, -0.0001481012658, -0.0001481012658, -0.0000065400844, +0.0000065400844, +0.0001158227848, +0.0001609704641, +0.0002896624473, +0.0001867088608, +0.0001029535865, -0.0001158227848, -0.0002318565401, -0.0003670886076, -0.0001672995781, +0.0000772151899, +0.0003734177215, +0.0003799578059, +0.0001932489451, -0.0000257383966, -0.0000772151899, -0.0000580168776, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0001094936709, +0.0000643459916, +0.0000000000000, -0.0000257383966, +0.0000772151899, +0.0000000000000, +0.0000386075949, +0.0000322784810, +0.0001481012658, +0.0000966244726, +0.0000772151899, -0.0000708860759, -0.0000900843882, -0.0001801687764, -0.0000772151899, +0.0000000000000, +0.0000900843882, +0.0000322784810, +0.0000386075949, +0.0000128691983, -0.0000580168776, -0.0001029535865, -0.0000708860759, +0.0000194092827, +0.0000322784810, +0.0000322784810, -0.0000386075949, +0.0000065400844, +0.0000065400844, +0.0000772151899, -0.0000322784810, -0.0000386075949, -0.0000386075949, +0.0001094936709, +0.0000000000000, -0.0000643459916, -0.0001672995781, -0.0000580168776, -0.0000708860759, -0.0000514767932, -0.0000322784810, +0.0000966244726, +0.0000708860759, +0.0000194092827, +0.0000580168776, +0.0001223628692, +0.0000900843882, -0.0000128691983, -0.0000194092827, -0.0000837552743, -0.0001223628692, -0.0001672995781, -0.0000772151899, -0.0000451476793, +0.0001223628692, +0.0001544303797, +0.0002253164557, +0.0000837552743, -0.0000900843882, -0.0004185654008, -0.0004056962025, -0.0001738396624, +0.0002575949367, +0.0004314345992, +0.0004571729958, +0.0003025316456, +0.0001544303797, -0.0000386075949, -0.0001672995781, -0.0001223628692, +0.0000580168776, +0.0002061181435, +0.0000966244726, -0.0000128691983, -0.0001029535865, -0.0000772151899, -0.0001352320675, -0.0000708860759, -0.0000194092827, +0.0001544303797, +0.0001223628692, +0.0000772151899, -0.0001094936709, -0.0001415611814, -0.0001672995781, -0.0000643459916, -0.0000065400844, +0.0001352320675, +0.0001352320675, +0.0001223628692, +0.0000580168776, -0.0000065400844, -0.0000966244726, -0.0001029535865, +0.0000000000000, +0.0000772151899, +0.0000772151899, -0.0001029535865, -0.0001415611814, -0.0000772151899, +0.0000966244726, +0.0001094936709, +0.0001481012658, -0.0000065400844, -0.0001158227848, -0.0002447257384, -0.0001738396624, -0.0000900843882, +0.0001158227848, +0.0001481012658, +0.0001094936709, -0.0000194092827, -0.0000322784810, +0.0000000000000, +0.0000580168776, +0.0000966244726, +0.0001352320675, +0.0001609704641, +0.0000772151899, +0.0000000000000, -0.0000708860759, -0.0000257383966, -0.0000451476793, +0.0000000000000, -0.0000386075949, +0.0000065400844, -0.0000194092827, +0.0000708860759, +0.0001223628692, +0.0002124472574, +0.0000900843882, +0.0000000000000, -0.0001094936709, -0.0001352320675, -0.0001995780591, -0.0001801687764, -0.0001094936709, +0.0000128691983, +0.0000580168776, +0.0000322784810, +0.0000580168776, +0.0000580168776, +0.0000000000000, -0.0000900843882, -0.0000065400844, +0.0000000000000, +0.0000580168776, +0.0000580168776, +0.0000772151899, -0.0001094936709, -0.0001801687764, -0.0001801687764, -0.0000451476793, -0.0000065400844, +0.0000643459916, -0.0000257383966, -0.0001094936709, -0.0000966244726, +0.0000451476793, +0.0001094936709, +0.0000643459916, -0.0000451476793, -0.0001029535865, -0.0000580168776, -0.0000065400844, +0.0000966244726, +0.0000708860759, +0.0000000000000, -0.0001094936709, -0.0000643459916, -0.0000257383966, +0.0001029535865, +0.0000900843882, +0.0000580168776, -0.0000514767932, -0.0000451476793, -0.0000580168776, -0.0000128691983, -0.0000708860759, -0.0000514767932, +0.0000000000000, +0.0000900843882, +0.0000900843882, +0.0000514767932, +0.0000194092827, +0.0000257383966, +0.0000580168776, +0.0000257383966, +0.0000257383966, +0.0000322784810, +0.0000900843882, +0.0000065400844, -0.0000194092827, -0.0000708860759, +0.0000194092827, +0.0000257383966, +0.0000451476793, +0.0000065400844, +0.0000514767932, +0.0000257383966, +0.0000580168776, +0.0000257383966, +0.0000128691983, -0.0000257383966, -0.0000514767932, -0.0000643459916, -0.0000451476793, -0.0000451476793, -0.0000514767932, -0.0000128691983, +0.0000000000000, +0.0000257383966, +0.0000322784810, +0.0000900843882, +0.0000708860759, +0.0000643459916, -0.0000128691983, -0.0000065400844, -0.0000065400844, +0.0000128691983, -0.0000708860759, -0.0000772151899, -0.0000643459916, +0.0000000000000, +0.0000000000000, +0.0000194092827, +0.0000257383966, +0.0000580168776, +0.0000580168776, +0.0000514767932, +0.0000128691983, +0.0000000000000, +0.0000514767932, +0.0000514767932, +0.0000322784810, -0.0000128691983, -0.0000257383966, -0.0000386075949, -0.0000065400844, -0.0000065400844, +0.0000128691983, -0.0000128691983, -0.0000194092827, -0.0000451476793, +0.0000000000000, +0.0000386075949, +0.0000900843882, +0.0000514767932, +0.0000194092827, -0.0000128691983, -0.0000257383966, -0.0000322784810, -0.0000065400844, +0.0000065400844, +0.0000194092827, +0.0000322784810, +0.0000128691983, +0.0000000000000, -0.0000128691983, -0.0000194092827, -0.0000386075949, -0.0000128691983, -0.0000065400844, +0.0000128691983, +0.0000194092827, +0.0000386075949, +0.0000065400844, +0.0000000000000, -0.0000257383966, -0.0000257383966, -0.0000322784810, -0.0000065400844, +0.0000000000000, +0.0000000000000, -0.0000065400844, -0.0000065400844, +0.0000000000000, +0.0000065400844, +0.0000065400844, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000065400844, +0.0000000000000, +0.0000065400844, +0.0000000000000, +0.0000000000000, -0.0000065400844, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000065400844, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/08-fender-bassman-sm57.h000066400000000000000000001460701247673406200252270ustar00rootroot00000000000000float fender_bassman_sm57[] = { +0.0000000000000, +0.0000449579832, +0.0000128151261, -0.0001153361345, -0.0002693277311, -0.0003590336134, -0.0003655462185, -0.0002884453782, -0.0001602941176, +0.0000000000000, +0.0001153361345, +0.0001859243697, +0.0001924369748, +0.0001409663866, +0.0000640756303, -0.0000128151261, -0.0001153361345, -0.0001859243697, -0.0002308823529, -0.0002565126050, -0.0002500000000, -0.0002565126050, -0.0002756302521, -0.0002821428571, -0.0002756302521, -0.0002308823529, -0.0001281512605, +0.0000256302521, +0.0001924369748, +0.0003462184874, +0.0003334033613, +0.0002180672269, -0.0000449579832, -0.0003012605042, -0.0005256302521, -0.0006859243697, -0.0005962184874, -0.0003077731092, -0.0000256302521, +0.0001281512605, +0.0001537815126, +0.0000321428571, -0.0001665966387, -0.0004359243697, -0.0006987394958, -0.0009489495798, -0.0011348739496, -0.0012245798319, -0.0011861344538, -0.0010705882353, -0.0009745798319, -0.0008974789916, -0.0008974789916, -0.0009936974790, -0.0012630252101, -0.0016220588235, -0.0021157563025, -0.0025581932773, -0.0030710084034, -0.0041800420168, -0.0044046218487, -0.0047764705882, -0.0060266806723, -0.0043403361345, -0.0068535714286, -0.0092002100840, +0.0065073529412, +0.0229844537815, +0.0012758403361, -0.0708571428571, -0.1080808823529, -0.0428848739496, +0.0436991596639, +0.1150949579832, +0.1932865546218, +0.2100712184874, +0.1543701680672, +0.0668308823529, -0.0485075630252, -0.1251220588235, -0.1295138655462, -0.1012529411765, -0.0552651260504, -0.0291905462185, -0.0313831932773, -0.0201953781513, +0.0107388655462, +0.0452827731092, +0.0654846638655, +0.0629586134454, +0.0473151260504, +0.0160987394958, -0.0137264705882, -0.0213943277311, -0.0224073529412, -0.0183426470588, -0.0132905462185, -0.0229201680672, -0.0319537815126, -0.0224523109244, -0.0011605042017, +0.0215739495798, +0.0296264705882, +0.0185861344538, +0.0064497899160, -0.0021029411765, -0.0081678571429, -0.0119953781513, -0.0151369747899, -0.0166693277311, -0.0204006302521, -0.0228304621849, -0.0166052521008, -0.0114632352941, -0.0075012605042, +0.0034107142857, +0.0076165966387, +0.0018529411765, -0.0051289915966, -0.0087384453782, -0.0112453781513, -0.0142073529412, -0.0075460084034, +0.0063214285714, +0.0117647058824, +0.0099951680672, +0.0041800420168, -0.0043852941176, -0.0070266806723, -0.0033338235294, +0.0031863445378, +0.0085974789916, +0.0045840336134, -0.0054945378151, -0.0126686974790, -0.0120596638655, -0.0082512605042, -0.0073600840336, -0.0069241596639, -0.0072831932773, -0.0107004201681, -0.0084949579832, -0.0000897058824, +0.0078344537815, +0.0141048319328, +0.0115081932773, +0.0023207983193, -0.0059176470588, -0.0143163865546, -0.0163934873950, -0.0099630252101, -0.0062957983193, -0.0034044117647, +0.0000321428571, +0.0009233193277, +0.0023336134454, +0.0011092436975, -0.0018976890756, -0.0029619747899, -0.0069369747899, -0.0117006302521, -0.0120081932773, -0.0109441176471, -0.0083474789916, -0.0024042016807, +0.0054558823529, +0.0126237394958, +0.0138161764706, +0.0075397058824, -0.0015964285714, -0.0086871848739, -0.0100207983193, -0.0038147058824, +0.0052764705882, +0.0093861344538, +0.0071357142857, +0.0020323529412, -0.0052186974790, -0.0128352941176, -0.0163743697479, -0.0148676470588, -0.0108478991597, -0.0060586134454, -0.0013464285714, +0.0022632352941, +0.0046546218487, +0.0060523109244, +0.0058726890756, +0.0037890756303, +0.0010705882353, +0.0007886554622, +0.0030516806723, +0.0051995798319, +0.0066804621849, +0.0071035714286, +0.0062254201681, +0.0048724789916, +0.0021413865546, -0.0017502100840, -0.0046930672269, -0.0066548319328, -0.0078922268908, -0.0077897058824, -0.0068472689076, -0.0060073529412, -0.0053918067227, -0.0034684873950, +0.0000449579832, +0.0027504201681, +0.0043340336134, +0.0054174369748, +0.0042571428571, +0.0017117647059, +0.0009680672269, +0.0026542016807, +0.0052764705882, +0.0065779411765, +0.0069819327731, +0.0074434873950, +0.0061739495798, +0.0045006302521, +0.0039750000000, +0.0021348739496, -0.0001924369748, -0.0018273109244, -0.0021029411765, +0.0002180672269, +0.0023850840336, +0.0033338235294, +0.0053470588235, +0.0071997899160, +0.0073600840336, +0.0065201680672, +0.0050455882353, +0.0049109243697, +0.0052636554622, +0.0036672268908, +0.0017630252101, +0.0008655462185, +0.0005128151261, +0.0003268907563, -0.0004102941176, +0.0003525210084, +0.0031800420168, +0.0049046218487, +0.0054558823529, +0.0052252100840, +0.0039044117647, +0.0031415966387, +0.0030453781513, +0.0031672268908, +0.0038081932773, +0.0036159663866, +0.0025581932773, +0.0014361344538, -0.0002756302521, -0.0008718487395, +0.0008334033613, +0.0035262605042, +0.0061739495798, +0.0074884453782, +0.0069563025210, +0.0061292016807, +0.0055586134454, +0.0046546218487, +0.0036159663866, +0.0030388655462, +0.0029170168067, +0.0013142857143, -0.0019489495798, -0.0030260504202, -0.0006602941176, +0.0014745798319, +0.0015002100840, +0.0010321428571, +0.0010577731092, +0.0006539915966, +0.0003655462185, +0.0021861344538, +0.0053214285714, +0.0066420168067, +0.0049815126050, +0.0021157563025, +0.0001346638655, -0.0004680672269, -0.0006027310924, -0.0007052521008, -0.0001537815126, +0.0012758403361, +0.0029363445378, +0.0039556722689, +0.0034878151261, +0.0020836134454, +0.0002949579832, -0.0019617647059, -0.0032569327731, -0.0021092436975, +0.0010964285714, +0.0043531512605, +0.0055201680672, +0.0039878151261, +0.0008142857143, -0.0026478991597, -0.0042827731092, -0.0029491596639, +0.0000193277311, +0.0021991596639, +0.0025195378151, +0.0020516806723, +0.0016798319328, +0.0010577731092, +0.0000449579832, -0.0005642857143, -0.0009552521008, -0.0013079831933, -0.0008655462185, +0.0006411764706, +0.0025516806723, +0.0036800420168, +0.0029491596639, +0.0009361344538, -0.0011861344538, -0.0027310924370, -0.0031031512605, -0.0025451680672, -0.0024682773109, -0.0032184873950, -0.0037121848739, -0.0030838235294, -0.0018273109244, -0.0005449579832, +0.0006155462185, +0.0016411764706, +0.0014361344538, -0.0004487394958, -0.0026670168067, -0.0038787815126, -0.0032441176471, -0.0010705882353, +0.0009680672269, +0.0017502100840, +0.0010514705882, -0.0006283613445, -0.0018014705882, -0.0017758403361, -0.0006218487395, +0.0008334033613, +0.0014424369748, +0.0005705882353, -0.0013783613445, -0.0036672268908, -0.0051995798319, -0.0057189075630, -0.0058663865546, -0.0049880252101, -0.0023978991597, +0.0005834033613, +0.0025516806723, +0.0030773109244, +0.0025966386555, +0.0018657563025, +0.0001924369748, -0.0019233193277, -0.0025838235294, -0.0024876050420, -0.0024810924370, -0.0022054621849, -0.0018079831933, -0.0007180672269, +0.0004102941176, -0.0000897058824, -0.0013464285714, -0.0021991596639, -0.0027569327731, -0.0025838235294, -0.0025581932773, -0.0025132352941, -0.0021092436975, -0.0026478991597, -0.0036350840336, -0.0031544117647, -0.0016476890756, +0.0000000000000, +0.0012693277311, +0.0013592436975, +0.0007630252101, +0.0000193277311, -0.0007949579832, -0.0012823529412, -0.0012951680672, -0.0007949579832, +0.0001281512605, +0.0004231092437, +0.0001602941176, -0.0001474789916, -0.0009552521008, -0.0018014705882, -0.0023144957983, -0.0029235294118, -0.0032890756303, -0.0026542016807, -0.0015514705882, -0.0007693277311, -0.0003077731092, -0.0003205882353, -0.0006859243697, -0.0004424369748, +0.0007758403361, +0.0020579831933, +0.0022695378151, +0.0017823529412, +0.0018336134454, +0.0018014705882, +0.0010065126050, +0.0001537815126, -0.0004808823529, -0.0005705882353, +0.0003140756303, +0.0012117647059, +0.0016283613445, +0.0015323529412, +0.0005642857143, -0.0007693277311, -0.0021413865546, -0.0031544117647, -0.0030516806723, -0.0022760504202, -0.0009745798319, +0.0005834033613, +0.0009361344538, +0.0002308823529, -0.0003140756303, -0.0004168067227, +0.0002565126050, +0.0013848739496, +0.0022567226891, +0.0024235294118, +0.0015579831933, -0.0000962184874, -0.0015579831933, -0.0020773109244, -0.0013783613445, +0.0000962184874, +0.0016283613445, +0.0026926470588, +0.0030197478992, +0.0021285714286, +0.0002500000000, -0.0012630252101, -0.0014617647059, -0.0004231092437, +0.0008590336134, +0.0015707983193, +0.0013592436975, +0.0005449579832, -0.0003012605042, -0.0010130252101, -0.0013720588235, -0.0010386554622, -0.0000897058824, +0.0007565126050, +0.0010514705882, +0.0012245798319, +0.0014361344538, +0.0010899159664, +0.0005000000000, +0.0003911764706, +0.0006924369748, +0.0011668067227, +0.0014168067227, +0.0011989495798, +0.0005000000000, -0.0002949579832, -0.0005577731092, -0.0000449579832, +0.0008655462185, +0.0017567226891, +0.0020516806723, +0.0014552521008, -0.0000193277311, -0.0018014705882, -0.0025451680672, -0.0019361344538, -0.0006090336134, +0.0011155462185, +0.0023464285714, +0.0023722689076, +0.0015195378151, +0.0001474789916, -0.0011092436975, -0.0016989495798, -0.0015771008403, -0.0008527310924, +0.0000193277311, +0.0008077731092, +0.0016220588235, +0.0019105042017, +0.0015964285714, +0.0010642857143, +0.0006346638655, +0.0003397058824, -0.0002371848739, -0.0012245798319, -0.0020260504202, -0.0022888655462, -0.0017886554622, -0.0005834033613, +0.0008911764706, +0.0020388655462, +0.0023850840336, +0.0021029411765, +0.0015130252101, +0.0009424369748, +0.0005384453782, -0.0000193277311, -0.0008783613445, -0.0016411764706, -0.0016926470588, -0.0006411764706, +0.0005962184874, +0.0013911764706, +0.0018464285714, +0.0017886554622, +0.0011283613445, +0.0000897058824, -0.0009361344538, -0.0013464285714, -0.0010642857143, -0.0003268907563, +0.0005962184874, +0.0010386554622, +0.0006987394958, -0.0000512605042, -0.0008271008403, -0.0013976890756, -0.0016283613445, -0.0015386554622, -0.0012245798319, -0.0009680672269, -0.0008911764706, -0.0007821428571, -0.0006602941176, -0.0005065126050, -0.0000962184874, +0.0002180672269, +0.0003077731092, +0.0003462184874, +0.0003205882353, +0.0002565126050, +0.0000000000000, -0.0005128151261, -0.0009489495798, -0.0014873949580, -0.0019170168067, -0.0017502100840, -0.0012565126050, -0.0006731092437, -0.0002628151261, -0.0003525210084, -0.0008142857143, -0.0011733193277, -0.0010834033613, -0.0008142857143, -0.0006924369748, -0.0009233193277, -0.0016411764706, -0.0021798319328, -0.0020132352941, -0.0012502100840, +0.0000577731092, +0.0011924369748, +0.0014873949580, +0.0010386554622, +0.0001346638655, -0.0004871848739, -0.0007693277311, -0.0011411764706, -0.0014168067227, -0.0014939075630, -0.0013911764706, -0.0009617647059, -0.0008142857143, -0.0010321428571, -0.0010705882353, -0.0012630252101, -0.0017373949580, -0.0020516806723, -0.0021285714286, -0.0020323529412, -0.0018014705882, -0.0013464285714, -0.0005256302521, +0.0001537815126, +0.0003974789916, +0.0004359243697, +0.0001859243697, -0.0001346638655, -0.0001346638655, -0.0000065126050, +0.0000000000000, -0.0001281512605, -0.0003718487395, -0.0006218487395, -0.0007436974790, -0.0006796218487, -0.0003911764706, +0.0001409663866, +0.0007115546218, +0.0009102941176, +0.0005514705882, -0.0003397058824, -0.0010577731092, -0.0010642857143, -0.0009039915966, -0.0008399159664, -0.0006987394958, -0.0005193277311, -0.0004296218487, -0.0005642857143, -0.0006796218487, -0.0007052521008, -0.0007949579832, -0.0007308823529, -0.0005705882353, -0.0006283613445, -0.0006539915966, -0.0005193277311, -0.0004039915966, -0.0003140756303, -0.0001794117647, -0.0000768907563, +0.0000834033613, +0.0005128151261, +0.0007502100840, +0.0003462184874, -0.0003077731092, -0.0005514705882, -0.0003205882353, -0.0002884453782, -0.0005128151261, -0.0004039915966, -0.0001987394958, -0.0002565126050, -0.0005193277311, -0.0008846638655, -0.0009873949580, -0.0007436974790, -0.0005321428571, -0.0004424369748, -0.0005321428571, -0.0008077731092, -0.0010002100840, -0.0009680672269, -0.0006668067227, -0.0000640756303, +0.0005065126050, +0.0007436974790, +0.0006090336134, +0.0001731092437, -0.0001859243697, -0.0002371848739, -0.0000640756303, +0.0000962184874, +0.0001346638655, -0.0000449579832, -0.0002052521008, -0.0003783613445, -0.0006796218487, -0.0006987394958, -0.0002693277311, +0.0002821428571, +0.0006859243697, +0.0007308823529, +0.0005256302521, +0.0003012605042, -0.0001859243697, -0.0007502100840, -0.0007821428571, -0.0002180672269, +0.0003783613445, +0.0003911764706, +0.0000000000000, -0.0001153361345, +0.0000705882353, +0.0003140756303, +0.0004296218487, +0.0001924369748, -0.0000065126050, +0.0000962184874, +0.0002052521008, +0.0001602941176, -0.0000449579832, -0.0001474789916, +0.0001409663866, +0.0003655462185, +0.0003077731092, +0.0002500000000, +0.0001859243697, +0.0000000000000, -0.0002371848739, -0.0002693277311, +0.0000193277311, +0.0004168067227, +0.0007243697479, +0.0008271008403, +0.0006027310924, +0.0003974789916, +0.0003334033613, +0.0001474789916, +0.0001025210084, +0.0003655462185, +0.0006218487395, +0.0004936974790, -0.0000128151261, -0.0004871848739, -0.0005256302521, -0.0002565126050, +0.0001346638655, +0.0005193277311, +0.0008014705882, +0.0008974789916, +0.0007758403361, +0.0005065126050, +0.0003397058824, +0.0004296218487, +0.0007115546218, +0.0010449579832, +0.0011605042017, +0.0008462184874, +0.0002693277311, -0.0001474789916, -0.0000705882353, +0.0001859243697, +0.0002115546218, +0.0003525210084, +0.0007565126050, +0.0010514705882, +0.0010193277311, +0.0006796218487, +0.0004424369748, +0.0004552521008, +0.0004296218487, +0.0003268907563, +0.0001794117647, +0.0000065126050, +0.0000128151261, +0.0001794117647, +0.0005128151261, +0.0009680672269, +0.0012373949580, +0.0012502100840, +0.0010130252101, +0.0006283613445, +0.0003846638655, +0.0003397058824, +0.0003783613445, +0.0006796218487, +0.0011733193277, +0.0015964285714, +0.0016989495798, +0.0014939075630, +0.0012052521008, +0.0008846638655, +0.0006218487395, +0.0004296218487, +0.0001218487395, -0.0001731092437, -0.0002436974790, -0.0001346638655, +0.0001537815126, +0.0003974789916, +0.0003846638655, +0.0003846638655, +0.0004808823529, +0.0004487394958, +0.0002756302521, +0.0001537815126, +0.0002756302521, +0.0004487394958, +0.0004168067227, +0.0004168067227, +0.0004743697479, +0.0003655462185, +0.0001924369748, +0.0001409663866, +0.0003077731092, +0.0006346638655, +0.0010002100840, +0.0013079831933, +0.0012565126050, +0.0008399159664, +0.0003140756303, -0.0001474789916, -0.0003012605042, -0.0000834033613, +0.0003140756303, +0.0008205882353, +0.0010771008403, +0.0009361344538, +0.0006474789916, +0.0003012605042, -0.0001409663866, -0.0004359243697, -0.0002884453782, +0.0001665966387, +0.0005065126050, +0.0005834033613, +0.0002884453782, -0.0002565126050, -0.0007308823529, -0.0008911764706, -0.0005899159664, -0.0000449579832, +0.0003397058824, +0.0005962184874, +0.0008205882353, +0.0008718487395, +0.0006796218487, +0.0003655462185, +0.0002243697479, +0.0003268907563, +0.0004615546218, +0.0004743697479, +0.0003462184874, -0.0000256302521, -0.0004359243697, -0.0007180672269, -0.0008974789916, -0.0008205882353, -0.0004936974790, -0.0001025210084, +0.0002693277311, +0.0003718487395, +0.0001090336134, -0.0003268907563, -0.0006859243697, -0.0007052521008, -0.0004102941176, -0.0000512605042, +0.0002243697479, +0.0001987394958, -0.0002180672269, -0.0006027310924, -0.0005705882353, -0.0000577731092, +0.0005577731092, +0.0008590336134, +0.0006155462185, -0.0000834033613, -0.0006796218487, -0.0005384453782, +0.0002115546218, +0.0011027310924, +0.0015195378151, +0.0010642857143, +0.0000640756303, -0.0009424369748, -0.0016605042017, -0.0016542016807, -0.0009489495798, -0.0000256302521, +0.0006924369748, +0.0009424369748, +0.0007502100840, +0.0003140756303, -0.0003140756303, -0.0008974789916, -0.0010705882353, -0.0007243697479, -0.0002308823529, -0.0001409663866, -0.0001602941176, +0.0000705882353, +0.0001602941176, +0.0000834033613, +0.0001474789916, +0.0002884453782, +0.0002821428571, -0.0000897058824, -0.0006283613445, -0.0007373949580, -0.0002308823529, +0.0004680672269, +0.0007886554622, +0.0005771008403, +0.0000962184874, -0.0003718487395, -0.0005771008403, -0.0004039915966, -0.0000449579832, +0.0001281512605, -0.0000512605042, -0.0005065126050, -0.0009361344538, -0.0011027310924, -0.0008974789916, -0.0005128151261, -0.0002565126050, -0.0001474789916, -0.0000128151261, +0.0000962184874, +0.0000065126050, -0.0001409663866, -0.0000449579832, +0.0004487394958, +0.0010065126050, +0.0010386554622, +0.0005193277311, +0.0000256302521, +0.0000705882353, +0.0003718487395, +0.0004039915966, +0.0000834033613, -0.0002308823529, -0.0004296218487, -0.0005962184874, -0.0006155462185, -0.0001987394958, +0.0006218487395, +0.0014105042017, +0.0016605042017, +0.0013014705882, +0.0006924369748, +0.0001090336134, -0.0002243697479, -0.0001218487395, +0.0003525210084, +0.0007630252101, +0.0006796218487, +0.0001025210084, -0.0005065126050, -0.0006859243697, -0.0003974789916, -0.0000065126050, +0.0001987394958, +0.0003718487395, +0.0007693277311, +0.0012758403361, +0.0015386554622, +0.0014361344538, +0.0010321428571, +0.0003783613445, -0.0003205882353, -0.0007436974790, -0.0006859243697, -0.0002115546218, +0.0003590336134, +0.0006987394958, +0.0007052521008, +0.0005577731092, +0.0005128151261, +0.0006155462185, +0.0005834033613, +0.0002884453782, -0.0000128151261, -0.0000577731092, +0.0001987394958, +0.0004871848739, +0.0006155462185, +0.0006796218487, +0.0005834033613, +0.0002821428571, +0.0000193277311, -0.0001859243697, -0.0003974789916, -0.0004102941176, -0.0000768907563, +0.0004743697479, +0.0009361344538, +0.0011027310924, +0.0009680672269, +0.0006668067227, +0.0003205882353, +0.0000193277311, -0.0000640756303, +0.0000321428571, +0.0000962184874, +0.0002052521008, +0.0004424369748, +0.0006283613445, +0.0005962184874, +0.0005321428571, +0.0006411764706, +0.0007693277311, +0.0007565126050, +0.0006027310924, +0.0003397058824, +0.0000256302521, -0.0002628151261, -0.0003397058824, -0.0001409663866, +0.0000577731092, +0.0001346638655, +0.0000449579832, -0.0000768907563, -0.0000768907563, -0.0001153361345, -0.0000640756303, +0.0002628151261, +0.0006218487395, +0.0007693277311, +0.0006411764706, +0.0003846638655, +0.0001474789916, -0.0001090336134, -0.0002565126050, -0.0001409663866, +0.0001025210084, +0.0002436974790, +0.0002115546218, +0.0001346638655, +0.0000384453782, -0.0001409663866, -0.0003397058824, -0.0003974789916, -0.0003077731092, -0.0002371848739, -0.0001924369748, -0.0001731092437, -0.0001731092437, -0.0000705882353, +0.0000384453782, +0.0000193277311, -0.0000256302521, -0.0001409663866, -0.0003334033613, -0.0004552521008, -0.0004296218487, -0.0002436974790, -0.0000256302521, +0.0001474789916, +0.0002436974790, +0.0001346638655, -0.0000512605042, -0.0001987394958, -0.0003205882353, -0.0003205882353, -0.0002243697479, -0.0001474789916, -0.0000640756303, -0.0000640756303, -0.0002052521008, -0.0004102941176, -0.0005321428571, -0.0004424369748, -0.0002243697479, +0.0000449579832, +0.0002628151261, +0.0002371848739, +0.0000000000000, -0.0001987394958, -0.0002693277311, -0.0003012605042, -0.0003077731092, -0.0001859243697, -0.0000834033613, -0.0000962184874, -0.0000962184874, -0.0000193277311, +0.0000577731092, +0.0000321428571, -0.0000768907563, -0.0001794117647, -0.0002821428571, -0.0004102941176, -0.0004743697479, -0.0003846638655, -0.0001987394958, -0.0000256302521, +0.0000384453782, -0.0000705882353, -0.0003525210084, -0.0006027310924, -0.0006346638655, -0.0004102941176, -0.0000577731092, +0.0002693277311, +0.0004424369748, +0.0004168067227, +0.0002884453782, +0.0001025210084, -0.0001090336134, -0.0002756302521, -0.0004552521008, -0.0007180672269, -0.0008399159664, -0.0006731092437, -0.0002693277311, +0.0002243697479, +0.0005256302521, +0.0005321428571, +0.0002371848739, -0.0003268907563, -0.0008142857143, -0.0009233193277, -0.0006346638655, -0.0000897058824, +0.0003590336134, +0.0004168067227, +0.0001987394958, -0.0000577731092, -0.0001731092437, -0.0001409663866, -0.0001090336134, -0.0001153361345, -0.0002693277311, -0.0006924369748, -0.0009745798319, -0.0008205882353, -0.0004359243697, +0.0000000000000, +0.0002884453782, +0.0002180672269, -0.0000640756303, -0.0004231092437, -0.0007052521008, -0.0006731092437, -0.0005065126050, -0.0003077731092, -0.0001346638655, -0.0001409663866, -0.0001281512605, -0.0000128151261, +0.0000128151261, -0.0001090336134, -0.0004231092437, -0.0006731092437, -0.0006859243697, -0.0006474789916, -0.0005384453782, -0.0003397058824, -0.0001346638655, +0.0000321428571, +0.0001218487395, +0.0001859243697, +0.0002500000000, +0.0000640756303, -0.0003655462185, -0.0007565126050, -0.0008271008403, -0.0006346638655, -0.0003590336134, -0.0000962184874, +0.0000256302521, -0.0000128151261, -0.0001794117647, -0.0004424369748, -0.0006218487395, -0.0005321428571, -0.0002371848739, +0.0000705882353, +0.0001665966387, -0.0000321428571, -0.0003655462185, -0.0006090336134, -0.0006411764706, -0.0005065126050, -0.0003012605042, -0.0001346638655, -0.0001537815126, -0.0003525210084, -0.0006090336134, -0.0007180672269, -0.0005384453782, -0.0001409663866, +0.0002052521008, +0.0002821428571, +0.0001346638655, -0.0000768907563, -0.0003140756303, -0.0003974789916, -0.0002565126050, -0.0000768907563, +0.0000000000000, -0.0000962184874, -0.0002756302521, -0.0003974789916, -0.0004102941176, -0.0003846638655, -0.0004296218487, -0.0005000000000, -0.0005384453782, -0.0004936974790, -0.0002500000000, +0.0000768907563, +0.0002052521008, +0.0001602941176, +0.0000384453782, -0.0001602941176, -0.0004552521008, -0.0006859243697, -0.0006731092437, -0.0003462184874, +0.0000193277311, +0.0001346638655, +0.0000000000000, -0.0002436974790, -0.0005065126050, -0.0006090336134, -0.0005384453782, -0.0002821428571, +0.0000577731092, +0.0002500000000, +0.0002628151261, +0.0001859243697, +0.0000640756303, -0.0000577731092, -0.0002052521008, -0.0003783613445, -0.0004552521008, -0.0003655462185, -0.0001602941176, +0.0000256302521, +0.0001153361345, +0.0000705882353, -0.0000897058824, -0.0002565126050, -0.0003012605042, -0.0002436974790, -0.0000962184874, +0.0000512605042, +0.0001731092437, +0.0002115546218, +0.0000384453782, -0.0002243697479, -0.0004168067227, -0.0005193277311, -0.0004359243697, -0.0001602941176, +0.0001090336134, +0.0001859243697, +0.0000065126050, -0.0002693277311, -0.0004743697479, -0.0005065126050, -0.0002500000000, +0.0001537815126, +0.0003911764706, +0.0003590336134, +0.0001474789916, -0.0001474789916, -0.0003655462185, -0.0003077731092, -0.0000128151261, +0.0002500000000, +0.0003012605042, +0.0001346638655, -0.0000897058824, -0.0002308823529, -0.0002628151261, -0.0001731092437, -0.0000577731092, +0.0000000000000, -0.0000128151261, -0.0000962184874, -0.0001537815126, -0.0001090336134, -0.0000321428571, +0.0000321428571, +0.0000449579832, -0.0000897058824, -0.0002821428571, -0.0003462184874, -0.0002949579832, -0.0001794117647, +0.0000065126050, +0.0002500000000, +0.0004487394958, +0.0004936974790, +0.0004039915966, +0.0003462184874, +0.0003655462185, +0.0003655462185, +0.0003397058824, +0.0002243697479, +0.0000000000000, -0.0002436974790, -0.0003846638655, -0.0003718487395, -0.0002693277311, -0.0002052521008, -0.0001474789916, -0.0000449579832, -0.0000128151261, -0.0000834033613, -0.0001602941176, -0.0001859243697, -0.0001924369748, -0.0001924369748, -0.0001602941176, -0.0000705882353, +0.0000128151261, +0.0000128151261, -0.0000128151261, -0.0000449579832, -0.0000897058824, -0.0000834033613, -0.0000065126050, +0.0000449579832, +0.0000449579832, -0.0000321428571, -0.0001537815126, -0.0001859243697, -0.0000897058824, +0.0000705882353, +0.0001924369748, +0.0002308823529, +0.0001665966387, -0.0000256302521, -0.0002308823529, -0.0002308823529, -0.0000897058824, +0.0000256302521, +0.0000640756303, -0.0000065126050, -0.0001346638655, -0.0002052521008, -0.0002052521008, -0.0000321428571, +0.0002756302521, +0.0005000000000, +0.0004936974790, +0.0003077731092, +0.0000962184874, -0.0000449579832, -0.0001602941176, -0.0001924369748, -0.0000577731092, +0.0000577731092, +0.0001090336134, +0.0001859243697, +0.0002756302521, +0.0002756302521, +0.0002180672269, +0.0001987394958, +0.0002052521008, +0.0001153361345, +0.0000128151261, -0.0000193277311, -0.0000449579832, -0.0000256302521, +0.0000128151261, +0.0000384453782, +0.0000449579832, +0.0000705882353, +0.0001794117647, +0.0002565126050, +0.0002308823529, +0.0002180672269, +0.0002052521008, +0.0001537815126, +0.0001090336134, +0.0000768907563, +0.0001025210084, +0.0001602941176, +0.0001409663866, +0.0001346638655, +0.0001794117647, +0.0002308823529, +0.0002884453782, +0.0003397058824, +0.0003525210084, +0.0002949579832, +0.0001794117647, +0.0001346638655, +0.0001731092437, +0.0002052521008, +0.0002628151261, +0.0003268907563, +0.0002565126050, +0.0000577731092, -0.0000384453782, +0.0000000000000, +0.0001025210084, +0.0001665966387, +0.0001731092437, +0.0001090336134, +0.0000256302521, -0.0000065126050, +0.0000705882353, +0.0002052521008, +0.0002884453782, +0.0003334033613, +0.0002500000000, +0.0000449579832, -0.0000768907563, -0.0001090336134, -0.0001025210084, -0.0000128151261, +0.0001218487395, +0.0002115546218, +0.0002756302521, +0.0003590336134, +0.0004168067227, +0.0003590336134, +0.0002115546218, +0.0000834033613, +0.0000000000000, -0.0000321428571, +0.0000321428571, +0.0001474789916, +0.0001859243697, +0.0001218487395, -0.0000768907563, -0.0003077731092, -0.0003525210084, -0.0001924369748, +0.0000256302521, +0.0002628151261, +0.0004424369748, +0.0005256302521, +0.0005705882353, +0.0005514705882, +0.0004168067227, +0.0002180672269, -0.0000321428571, -0.0003077731092, -0.0004296218487, -0.0003525210084, -0.0001474789916, +0.0000705882353, +0.0002436974790, +0.0004039915966, +0.0005128151261, +0.0005577731092, +0.0005771008403, +0.0005128151261, +0.0003590336134, +0.0001474789916, -0.0000834033613, -0.0002693277311, -0.0003268907563, -0.0002756302521, -0.0001025210084, +0.0001025210084, +0.0002628151261, +0.0003911764706, +0.0004231092437, +0.0003077731092, +0.0002115546218, +0.0002436974790, +0.0003140756303, +0.0003846638655, +0.0003846638655, +0.0002565126050, +0.0000384453782, -0.0001153361345, -0.0001346638655, -0.0000384453782, +0.0001090336134, +0.0002436974790, +0.0002436974790, +0.0001731092437, +0.0001409663866, +0.0001409663866, +0.0001153361345, +0.0000577731092, +0.0000193277311, +0.0000000000000, -0.0000768907563, -0.0001218487395, -0.0000962184874, -0.0000256302521, +0.0000705882353, +0.0000577731092, -0.0000897058824, -0.0002628151261, -0.0003590336134, -0.0002628151261, +0.0000256302521, +0.0003590336134, +0.0006474789916, +0.0008077731092, +0.0006796218487, +0.0002371848739, -0.0003205882353, -0.0007052521008, -0.0007052521008, -0.0003846638655, +0.0000321428571, +0.0003655462185, +0.0005449579832, +0.0005193277311, +0.0003012605042, +0.0000897058824, +0.0000512605042, +0.0000897058824, +0.0000384453782, +0.0000000000000, +0.0000384453782, +0.0001281512605, +0.0002500000000, +0.0003525210084, +0.0003590336134, +0.0003462184874, +0.0002949579832, +0.0001218487395, -0.0000577731092, -0.0001409663866, -0.0000640756303, +0.0001218487395, +0.0002500000000, +0.0002308823529, +0.0001218487395, +0.0000577731092, +0.0000768907563, +0.0000834033613, +0.0000512605042, +0.0000512605042, +0.0001665966387, +0.0003012605042, +0.0003655462185, +0.0004039915966, +0.0004168067227, +0.0003974789916, +0.0003655462185, +0.0002693277311, +0.0001281512605, -0.0000065126050, -0.0001602941176, -0.0002436974790, -0.0002115546218, -0.0000256302521, +0.0002756302521, +0.0005193277311, +0.0005962184874, +0.0005449579832, +0.0003655462185, +0.0001409663866, -0.0000577731092, -0.0002180672269, -0.0002884453782, -0.0002436974790, -0.0001218487395, +0.0000640756303, +0.0003077731092, +0.0004871848739, +0.0004936974790, +0.0003462184874, +0.0001153361345, -0.0001409663866, -0.0003846638655, -0.0004871848739, -0.0003911764706, -0.0001665966387, +0.0000834033613, +0.0003077731092, +0.0004231092437, +0.0003590336134, +0.0001665966387, +0.0000193277311, -0.0000384453782, -0.0000768907563, -0.0001090336134, -0.0001281512605, -0.0000577731092, +0.0001218487395, +0.0002756302521, +0.0002693277311, +0.0001602941176, +0.0000128151261, -0.0001474789916, -0.0002693277311, -0.0002180672269, -0.0000384453782, +0.0001281512605, +0.0002756302521, +0.0003590336134, +0.0002565126050, +0.0000384453782, -0.0000768907563, +0.0000000000000, +0.0001537815126, +0.0001859243697, +0.0000768907563, -0.0000768907563, -0.0002052521008, -0.0001859243697, -0.0000256302521, +0.0001409663866, +0.0002243697479, +0.0001859243697, +0.0000768907563, +0.0000000000000, -0.0000128151261, +0.0000065126050, +0.0000640756303, +0.0000897058824, +0.0000705882353, +0.0000705882353, +0.0001281512605, +0.0001474789916, +0.0000768907563, -0.0000512605042, -0.0001409663866, -0.0001602941176, -0.0001346638655, -0.0000834033613, +0.0000000000000, +0.0000705882353, +0.0001346638655, +0.0002180672269, +0.0003077731092, +0.0003268907563, +0.0002371848739, +0.0000962184874, -0.0000065126050, -0.0000834033613, -0.0001537815126, -0.0001794117647, -0.0001153361345, +0.0000065126050, +0.0001665966387, +0.0002949579832, +0.0003718487395, +0.0003655462185, +0.0002756302521, +0.0001153361345, -0.0001218487395, -0.0003462184874, -0.0004231092437, -0.0003655462185, -0.0002115546218, -0.0000449579832, +0.0000384453782, +0.0000640756303, +0.0000193277311, -0.0000768907563, -0.0001731092437, -0.0001731092437, -0.0000768907563, +0.0000640756303, +0.0001537815126, +0.0002052521008, +0.0002115546218, +0.0000962184874, -0.0000897058824, -0.0002565126050, -0.0003268907563, -0.0002693277311, -0.0001794117647, -0.0001218487395, -0.0000384453782, +0.0000321428571, +0.0000897058824, +0.0001346638655, +0.0001025210084, -0.0000128151261, -0.0001731092437, -0.0003334033613, -0.0004424369748, -0.0004359243697, -0.0003012605042, -0.0000577731092, +0.0001665966387, +0.0002565126050, +0.0002628151261, +0.0002052521008, +0.0000321428571, -0.0001987394958, -0.0003974789916, -0.0004936974790, -0.0004359243697, -0.0002565126050, -0.0000321428571, +0.0001025210084, +0.0000640756303, -0.0000512605042, -0.0001924369748, -0.0003012605042, -0.0002884453782, -0.0001665966387, -0.0000256302521, +0.0000640756303, +0.0000640756303, +0.0000128151261, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000834033613, -0.0002371848739, -0.0003590336134, -0.0003911764706, -0.0003012605042, -0.0000834033613, +0.0001602941176, +0.0003012605042, +0.0002436974790, -0.0000193277311, -0.0003140756303, -0.0004102941176, -0.0002949579832, -0.0001090336134, +0.0000000000000, +0.0000000000000, -0.0000449579832, -0.0000768907563, -0.0001281512605, -0.0001859243697, -0.0001859243697, -0.0001474789916, -0.0001731092437, -0.0002436974790, -0.0002500000000, -0.0001537815126, -0.0000384453782, +0.0000384453782, +0.0000962184874, +0.0000834033613, -0.0000384453782, -0.0001794117647, -0.0002436974790, -0.0002436974790, -0.0002500000000, -0.0002180672269, -0.0001281512605, -0.0000449579832, -0.0000577731092, -0.0001153361345, -0.0001474789916, -0.0001474789916, -0.0001090336134, -0.0000384453782, +0.0000193277311, +0.0000512605042, +0.0000640756303, +0.0000384453782, -0.0000640756303, -0.0001859243697, -0.0002821428571, -0.0003397058824, -0.0003012605042, -0.0001602941176, +0.0000000000000, +0.0000897058824, +0.0000577731092, -0.0000256302521, -0.0001153361345, -0.0001474789916, -0.0001537815126, -0.0001474789916, -0.0001281512605, -0.0000640756303, -0.0000128151261, -0.0000384453782, -0.0001218487395, -0.0001665966387, -0.0001218487395, -0.0000512605042, -0.0000193277311, -0.0000128151261, +0.0000128151261, +0.0000512605042, +0.0000577731092, +0.0000577731092, +0.0000512605042, +0.0000384453782, +0.0000065126050, -0.0000768907563, -0.0002115546218, -0.0003268907563, -0.0003846638655, -0.0003268907563, -0.0001602941176, +0.0000256302521, +0.0001794117647, +0.0002500000000, +0.0001602941176, -0.0000321428571, -0.0001859243697, -0.0002243697479, -0.0001794117647, -0.0001409663866, -0.0001153361345, -0.0001218487395, -0.0001731092437, -0.0002115546218, -0.0001987394958, -0.0001731092437, -0.0001346638655, -0.0000640756303, +0.0000128151261, +0.0000384453782, +0.0000512605042, +0.0000768907563, +0.0000962184874, +0.0000449579832, -0.0000962184874, -0.0002821428571, -0.0004231092437, -0.0004871848739, -0.0004552521008, -0.0003268907563, -0.0002115546218, -0.0001281512605, -0.0000193277311, +0.0000640756303, +0.0000834033613, +0.0000321428571, -0.0000256302521, +0.0000065126050, +0.0000640756303, +0.0000705882353, +0.0000193277311, -0.0000321428571, -0.0000321428571, -0.0000065126050, -0.0000193277311, -0.0000384453782, -0.0000384453782, -0.0000321428571, -0.0000449579832, -0.0001218487395, -0.0002180672269, -0.0002821428571, -0.0002436974790, -0.0001281512605, -0.0000705882353, -0.0001090336134, -0.0001665966387, -0.0001602941176, -0.0000897058824, +0.0000000000000, +0.0001281512605, +0.0003140756303, +0.0003718487395, +0.0002371848739, +0.0000577731092, -0.0000962184874, -0.0001794117647, -0.0001537815126, -0.0000768907563, -0.0000193277311, -0.0000256302521, -0.0000512605042, -0.0000384453782, -0.0000256302521, -0.0000384453782, -0.0000512605042, -0.0000640756303, -0.0001218487395, -0.0001665966387, -0.0001537815126, -0.0001281512605, -0.0000834033613, +0.0000000000000, +0.0000705882353, +0.0001153361345, +0.0001537815126, +0.0001665966387, +0.0001731092437, +0.0001474789916, +0.0000834033613, +0.0000256302521, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000512605042, -0.0001218487395, -0.0001218487395, -0.0000834033613, -0.0000384453782, +0.0000000000000, +0.0000256302521, +0.0000577731092, +0.0000705882353, +0.0000449579832, -0.0000065126050, -0.0000834033613, -0.0001602941176, -0.0001602941176, -0.0001025210084, -0.0000449579832, +0.0000065126050, +0.0000193277311, +0.0000000000000, -0.0000065126050, -0.0000065126050, +0.0000000000000, +0.0000065126050, -0.0000321428571, -0.0001090336134, -0.0001537815126, -0.0001346638655, -0.0000384453782, +0.0000768907563, +0.0001346638655, +0.0001346638655, +0.0000962184874, +0.0000512605042, +0.0000577731092, +0.0000640756303, +0.0000512605042, +0.0000449579832, +0.0000193277311, +0.0000000000000, +0.0000128151261, +0.0000384453782, +0.0000897058824, +0.0001281512605, +0.0000705882353, -0.0000321428571, -0.0001090336134, -0.0001346638655, -0.0000897058824, +0.0000000000000, +0.0001090336134, +0.0001409663866, +0.0000705882353, -0.0000065126050, +0.0000000000000, +0.0001025210084, +0.0001987394958, +0.0002756302521, +0.0002884453782, +0.0001924369748, +0.0000256302521, -0.0000897058824, -0.0001665966387, -0.0002436974790, -0.0002500000000, -0.0001537815126, -0.0000193277311, +0.0000705882353, +0.0001090336134, +0.0001090336134, +0.0000897058824, +0.0000768907563, +0.0000834033613, +0.0000897058824, +0.0000962184874, +0.0001153361345, +0.0000897058824, +0.0000256302521, +0.0000000000000, -0.0000193277311, -0.0000897058824, -0.0001537815126, -0.0001346638655, -0.0000705882353, +0.0000065126050, +0.0000705882353, +0.0000768907563, +0.0000705882353, +0.0000640756303, +0.0000512605042, +0.0000768907563, +0.0001090336134, +0.0001090336134, +0.0000897058824, +0.0000834033613, +0.0000834033613, +0.0000256302521, -0.0000834033613, -0.0001409663866, -0.0001346638655, -0.0000897058824, -0.0000065126050, +0.0000897058824, +0.0001731092437, +0.0002115546218, +0.0001731092437, +0.0000897058824, +0.0000640756303, +0.0001025210084, +0.0001218487395, +0.0001090336134, +0.0001025210084, +0.0001090336134, +0.0000768907563, +0.0000449579832, +0.0000768907563, +0.0001474789916, +0.0001987394958, +0.0002115546218, +0.0001474789916, +0.0000449579832, +0.0000321428571, +0.0001025210084, +0.0001409663866, +0.0000705882353, -0.0000962184874, -0.0002243697479, -0.0002115546218, -0.0000834033613, +0.0001218487395, +0.0002693277311, +0.0002436974790, +0.0000962184874, -0.0000193277311, -0.0000449579832, -0.0000193277311, +0.0000065126050, +0.0000256302521, +0.0000193277311, -0.0000321428571, -0.0001090336134, -0.0001346638655, -0.0000897058824, -0.0000065126050, +0.0000449579832, +0.0000577731092, +0.0000449579832, +0.0000449579832, +0.0000577731092, +0.0000962184874, +0.0001537815126, +0.0001602941176, +0.0001409663866, +0.0001474789916, +0.0001924369748, +0.0002115546218, +0.0001794117647, +0.0001153361345, +0.0000193277311, -0.0000897058824, -0.0001537815126, -0.0001153361345, -0.0000128151261, +0.0000640756303, +0.0000640756303, +0.0000256302521, +0.0000065126050, +0.0000000000000, -0.0000321428571, -0.0001218487395, -0.0002243697479, -0.0002628151261, -0.0001859243697, +0.0000000000000, +0.0001924369748, +0.0002884453782, +0.0002693277311, +0.0001731092437, +0.0000256302521, -0.0000897058824, -0.0001537815126, -0.0001153361345, +0.0000065126050, +0.0001346638655, +0.0002180672269, +0.0002243697479, +0.0001859243697, +0.0001281512605, +0.0000640756303, -0.0000065126050, -0.0000962184874, -0.0001602941176, -0.0001602941176, -0.0000897058824, +0.0000256302521, +0.0001474789916, +0.0002308823529, +0.0002565126050, +0.0001924369748, +0.0000705882353, +0.0000000000000, +0.0000065126050, +0.0000577731092, +0.0001025210084, +0.0001218487395, +0.0001025210084, +0.0000512605042, -0.0000065126050, -0.0000128151261, +0.0000193277311, +0.0000128151261, -0.0000193277311, -0.0000256302521, +0.0000193277311, +0.0001346638655, +0.0002756302521, +0.0003462184874, +0.0003268907563, +0.0002308823529, +0.0000640756303, -0.0001090336134, -0.0001924369748, -0.0001153361345, +0.0000512605042, +0.0001924369748, +0.0002180672269, +0.0001537815126, +0.0000512605042, -0.0000065126050, +0.0000000000000, +0.0000834033613, +0.0002052521008, +0.0002821428571, +0.0002565126050, +0.0001602941176, +0.0000000000000, -0.0001218487395, -0.0001025210084, +0.0000256302521, +0.0001924369748, +0.0003012605042, +0.0003205882353, +0.0002884453782, +0.0002308823529, +0.0001731092437, +0.0001474789916, +0.0001474789916, +0.0001346638655, +0.0000768907563, -0.0000065126050, -0.0000768907563, -0.0000834033613, -0.0000449579832, +0.0000193277311, +0.0001025210084, +0.0001602941176, +0.0001474789916, +0.0000193277311, -0.0001474789916, -0.0002371848739, -0.0001924369748, -0.0000065126050, +0.0002180672269, +0.0003783613445, +0.0003783613445, +0.0002180672269, +0.0000321428571, -0.0000768907563, -0.0000834033613, -0.0000449579832, -0.0000321428571, -0.0000128151261, +0.0000193277311, +0.0000834033613, +0.0001731092437, +0.0002565126050, +0.0002756302521, +0.0001987394958, +0.0000577731092, -0.0000640756303, -0.0000962184874, -0.0000449579832, +0.0000512605042, +0.0001090336134, +0.0000768907563, +0.0000000000000, -0.0000577731092, -0.0000384453782, +0.0000256302521, +0.0000768907563, +0.0000834033613, +0.0000193277311, -0.0000834033613, -0.0001474789916, -0.0001153361345, +0.0000000000000, +0.0001025210084, +0.0001281512605, +0.0000834033613, +0.0000193277311, -0.0000128151261, +0.0000000000000, +0.0000193277311, +0.0000128151261, -0.0000321428571, -0.0001090336134, -0.0001474789916, -0.0001281512605, -0.0000768907563, -0.0000065126050, +0.0000768907563, +0.0001218487395, +0.0000705882353, -0.0000065126050, -0.0000834033613, -0.0001346638655, -0.0001665966387, -0.0001859243697, -0.0001987394958, -0.0001794117647, -0.0001153361345, -0.0000128151261, +0.0000321428571, +0.0000449579832, +0.0000321428571, +0.0000000000000, -0.0000065126050, -0.0000065126050, +0.0000000000000, +0.0000065126050, -0.0000193277311, -0.0001090336134, -0.0001859243697, -0.0002180672269, -0.0001665966387, -0.0000577731092, +0.0000256302521, +0.0000577731092, +0.0000384453782, -0.0000065126050, -0.0000577731092, -0.0000640756303, -0.0000321428571, +0.0000000000000, +0.0000193277311, +0.0000000000000, -0.0000577731092, -0.0001218487395, -0.0001218487395, -0.0000705882353, -0.0000128151261, +0.0000065126050, -0.0000256302521, -0.0000834033613, -0.0001409663866, -0.0001859243697, -0.0001987394958, -0.0001731092437, -0.0001281512605, -0.0000640756303, -0.0000065126050, +0.0000193277311, +0.0000065126050, -0.0000065126050, +0.0000000000000, +0.0000065126050, -0.0000193277311, -0.0000834033613, -0.0001474789916, -0.0001409663866, -0.0000449579832, +0.0000577731092, +0.0001153361345, +0.0001218487395, +0.0000768907563, +0.0000000000000, -0.0000834033613, -0.0000962184874, +0.0000000000000, +0.0000962184874, +0.0000834033613, +0.0000000000000, -0.0001025210084, -0.0001731092437, -0.0001409663866, -0.0000256302521, +0.0001025210084, +0.0002180672269, +0.0002693277311, +0.0002052521008, +0.0000705882353, -0.0000065126050, -0.0000128151261, -0.0000128151261, -0.0000128151261, +0.0000065126050, +0.0000256302521, +0.0000128151261, +0.0000193277311, +0.0000577731092, +0.0000705882353, +0.0000512605042, +0.0000256302521, +0.0000065126050, +0.0000193277311, +0.0000640756303, +0.0001537815126, +0.0002115546218, +0.0001602941176, +0.0000449579832, -0.0000640756303, -0.0001346638655, -0.0000962184874, +0.0000000000000, +0.0000193277311, -0.0000384453782, -0.0001474789916, -0.0001924369748, -0.0001090336134, +0.0000384453782, +0.0001859243697, +0.0002756302521, +0.0002628151261, +0.0001346638655, -0.0000128151261, -0.0001025210084, -0.0000768907563, -0.0000065126050, +0.0000321428571, +0.0000000000000, -0.0000512605042, -0.0000834033613, -0.0000640756303, -0.0000128151261, +0.0000449579832, +0.0000962184874, +0.0001090336134, +0.0000577731092, -0.0000128151261, -0.0000512605042, -0.0000256302521, +0.0000193277311, +0.0000512605042, +0.0000834033613, +0.0000962184874, +0.0000512605042, -0.0000512605042, -0.0001665966387, -0.0002052521008, -0.0001281512605, +0.0000321428571, +0.0002052521008, +0.0002500000000, +0.0001537815126, +0.0000000000000, -0.0001474789916, -0.0002371848739, -0.0001987394958, -0.0001025210084, -0.0000065126050, +0.0000321428571, +0.0000193277311, -0.0000193277311, -0.0000640756303, -0.0000768907563, -0.0000768907563, -0.0000640756303, -0.0000384453782, -0.0000128151261, -0.0000193277311, -0.0000193277311, -0.0000065126050, +0.0000000000000, -0.0000193277311, -0.0000128151261, +0.0000065126050, +0.0000193277311, +0.0000256302521, +0.0000256302521, +0.0000000000000, -0.0000512605042, -0.0001153361345, -0.0001602941176, -0.0001474789916, -0.0000897058824, +0.0000000000000, +0.0000962184874, +0.0001346638655, +0.0000834033613, -0.0000128151261, -0.0000897058824, -0.0000834033613, -0.0000193277311, +0.0000128151261, +0.0000321428571, +0.0000384453782, +0.0000000000000, -0.0000640756303, -0.0001025210084, -0.0000897058824, -0.0000640756303, -0.0000512605042, -0.0000512605042, -0.0000577731092, -0.0000768907563, -0.0000705882353, -0.0000256302521, +0.0000128151261, +0.0000256302521, +0.0000000000000, -0.0000321428571, -0.0000640756303, -0.0000897058824, -0.0001153361345, -0.0001346638655, -0.0001281512605, -0.0000640756303, +0.0000065126050, +0.0000384453782, +0.0000193277311, -0.0000256302521, -0.0001025210084, -0.0001409663866, -0.0001153361345, -0.0000640756303, -0.0000193277311, +0.0000128151261, +0.0000384453782, +0.0000193277311, -0.0000193277311, -0.0000640756303, -0.0000834033613, -0.0000834033613, -0.0000577731092, +0.0000065126050, +0.0001025210084, +0.0001537815126, +0.0001346638655, +0.0000640756303, -0.0000321428571, -0.0000897058824, -0.0000834033613, -0.0000512605042, -0.0000640756303, -0.0000962184874, -0.0001218487395, -0.0001153361345, -0.0000768907563, -0.0000193277311, +0.0000256302521, +0.0000193277311, -0.0000512605042, -0.0001218487395, -0.0001474789916, -0.0001090336134, -0.0000321428571, +0.0000256302521, +0.0000512605042, +0.0000384453782, +0.0000000000000, -0.0000449579832, -0.0000705882353, -0.0000768907563, -0.0000768907563, -0.0000897058824, -0.0000962184874, -0.0000640756303, +0.0000065126050, +0.0001153361345, +0.0001731092437, +0.0001409663866, +0.0000705882353, -0.0000193277311, -0.0001090336134, -0.0001474789916, -0.0001218487395, -0.0000449579832, +0.0000193277311, +0.0000321428571, +0.0000000000000, -0.0000321428571, -0.0000384453782, -0.0000128151261, +0.0000321428571, +0.0000577731092, +0.0000577731092, +0.0000000000000, -0.0000962184874, -0.0001731092437, -0.0001924369748, -0.0001346638655, -0.0000193277311, +0.0000834033613, +0.0001218487395, +0.0000577731092, -0.0000321428571, -0.0001153361345, -0.0001537815126, -0.0001218487395, -0.0000321428571, +0.0000640756303, +0.0001090336134, +0.0000577731092, -0.0000321428571, -0.0001090336134, -0.0001218487395, -0.0000897058824, -0.0000384453782, +0.0000321428571, +0.0000768907563, +0.0000449579832, +0.0000065126050, +0.0000000000000, -0.0000065126050, -0.0000128151261, -0.0000256302521, -0.0000577731092, -0.0001090336134, -0.0001602941176, -0.0001537815126, -0.0000834033613, +0.0000000000000, +0.0000705882353, +0.0001090336134, +0.0001218487395, +0.0001025210084, +0.0000384453782, -0.0000449579832, -0.0001474789916, -0.0002180672269, -0.0002436974790, -0.0001987394958, -0.0000897058824, +0.0000384453782, +0.0001346638655, +0.0001346638655, +0.0000449579832, -0.0000449579832, -0.0000449579832, +0.0000128151261, +0.0001025210084, +0.0001537815126, +0.0001281512605, +0.0000193277311, -0.0000962184874, -0.0001665966387, -0.0001537815126, -0.0000577731092, +0.0000640756303, +0.0001665966387, +0.0001987394958, +0.0001665966387, +0.0001090336134, +0.0000577731092, +0.0000128151261, -0.0000193277311, -0.0000321428571, -0.0000256302521, -0.0000321428571, -0.0000384453782, -0.0000128151261, +0.0000705882353, +0.0001665966387, +0.0001987394958, +0.0001025210084, -0.0000640756303, -0.0002115546218, -0.0002371848739, -0.0001474789916, +0.0000000000000, +0.0001090336134, +0.0001537815126, +0.0001281512605, +0.0000834033613, +0.0000577731092, +0.0000768907563, +0.0001025210084, +0.0000834033613, +0.0000321428571, -0.0000193277311, -0.0000256302521, -0.0000065126050, +0.0000193277311, +0.0000449579832, +0.0000384453782, +0.0000065126050, +0.0000000000000, +0.0000193277311, +0.0000384453782, +0.0000321428571, +0.0000000000000, -0.0000384453782, -0.0000449579832, -0.0000384453782, -0.0000065126050, +0.0000065126050, +0.0000065126050, -0.0000065126050, -0.0000256302521, -0.0000128151261, +0.0000065126050, +0.0000193277311, +0.0000193277311, +0.0000128151261, -0.0000065126050, -0.0000321428571, -0.0000640756303, -0.0000640756303, +0.0000000000000, +0.0001025210084, +0.0001794117647, +0.0001731092437, +0.0000897058824, -0.0000193277311, -0.0000962184874, -0.0001346638655, -0.0000768907563, +0.0000384453782, +0.0001537815126, +0.0001794117647, +0.0001346638655, +0.0000640756303, +0.0000321428571, +0.0000128151261, +0.0000000000000, -0.0000384453782, -0.0001025210084, -0.0001602941176, -0.0001602941176, -0.0001153361345, -0.0000256302521, +0.0000640756303, +0.0001281512605, +0.0001346638655, +0.0001090336134, +0.0000834033613, +0.0000768907563, +0.0000834033613, +0.0000577731092, +0.0000193277311, -0.0000256302521, -0.0000897058824, -0.0001090336134, -0.0000768907563, +0.0000065126050, +0.0001025210084, +0.0001474789916, +0.0001409663866, +0.0000897058824, -0.0000193277311, -0.0001153361345, -0.0001346638655, -0.0001090336134, -0.0000640756303, -0.0000065126050, +0.0000577731092, +0.0001281512605, +0.0001409663866, +0.0001218487395, +0.0001153361345, +0.0001281512605, +0.0001281512605, +0.0000962184874, +0.0000384453782, +0.0000000000000, -0.0000128151261, -0.0000065126050, +0.0000128151261, +0.0000512605042, +0.0000577731092, +0.0000449579832, +0.0000193277311, +0.0000128151261, +0.0000256302521, +0.0000512605042, +0.0000705882353, +0.0000640756303, +0.0000128151261, -0.0000256302521, -0.0000193277311, +0.0000065126050, +0.0000321428571, +0.0000512605042, +0.0000321428571, -0.0000384453782, -0.0001474789916, -0.0002371848739, -0.0002371848739, -0.0001409663866, +0.0000256302521, +0.0002115546218, +0.0003205882353, +0.0003077731092, +0.0002308823529, +0.0001025210084, -0.0000321428571, -0.0001346638655, -0.0001537815126, -0.0001025210084, -0.0000256302521, +0.0000512605042, +0.0001025210084, +0.0001090336134, +0.0000768907563, +0.0000193277311, -0.0000384453782, -0.0000640756303, -0.0000512605042, -0.0000065126050, +0.0000705882353, +0.0001602941176, +0.0002052521008, +0.0001474789916, +0.0000577731092, -0.0000128151261, -0.0000640756303, -0.0000834033613, -0.0000512605042, +0.0000000000000, +0.0000834033613, +0.0001090336134, +0.0000897058824, +0.0000321428571, -0.0000256302521, -0.0000768907563, -0.0000640756303, +0.0000000000000, +0.0000512605042, +0.0000834033613, +0.0000834033613, +0.0000512605042, +0.0000000000000, -0.0000193277311, -0.0000256302521, +0.0000000000000, +0.0000384453782, +0.0000768907563, +0.0000768907563, +0.0000384453782, +0.0000000000000, -0.0000321428571, -0.0000384453782, -0.0000256302521, -0.0000065126050, -0.0000065126050, -0.0000128151261, -0.0000321428571, -0.0000321428571, -0.0000193277311, +0.0000000000000, +0.0000193277311, +0.0000193277311, +0.0000128151261, +0.0000065126050, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/09-fender-bassman-sm57-off.h000066400000000000000000001373271247673406200260050ustar00rootroot00000000000000float fender_bassman_sm57_off[] = { +0.0000000000000, -0.0000430082256, -0.0000933019976, -0.0001003525264, -0.0000072855464, +0.0001433607521, +0.0002726204465, +0.0003370152761, +0.0002940070505, +0.0001576968273, -0.0000359576968, -0.0002366627497, -0.0003656874266, -0.0003586368978, -0.0002079905993, +0.0000359576968, +0.0003012925969, +0.0004806110458, +0.0004949471210, +0.0003299647474, +0.0000216216216, -0.0003156286722, -0.0005666274971, -0.0006383078731, -0.0005019976498, -0.0001863689777, +0.0001863689777, +0.0005092831962, +0.0006669800235, +0.0006169212691, +0.0003656874266, +0.0000000000000, -0.0003873090482, -0.0006742655699, -0.0007673325499, -0.0006526439483, -0.0003513513514, +0.0000143360752, +0.0003513513514, +0.0005306698002, +0.0005163337250, +0.0003156286722, +0.0000143360752, -0.0002726204465, -0.0004662749706, -0.0005092831962, -0.0003943595770, -0.0001936545241, +0.0000216216216, +0.0001793184489, +0.0002296122209, +0.0001649823737, +0.0000072855464, -0.0001720329025, -0.0003226792009, -0.0003943595770, -0.0003586368978, -0.0002079905993, +0.0000072855464, +0.0002509988249, +0.0004232667450, +0.0004589894242, +0.0003370152761, +0.0000573443008, -0.0002726204465, -0.0005736780259, -0.0007459459459, -0.0007459459459, -0.0005666274971, -0.0002940070505, -0.0000072855464, +0.0002007050529, +0.0003299647474, +0.0003513513514, +0.0003156286722, +0.0002152761457, +0.0000933019976, -0.0000789659224, -0.0002726204465, -0.0005019976498, -0.0006742655699, -0.0007673325499, -0.0007099882491, -0.0004232667450, -0.0003083431257, +0.0002869565217, +0.0004589894242, +0.0002296122209, +0.0002152761457, +0.0001863689777, -0.0001363102233, -0.0006239717979, -0.0010615746181, -0.0012766157462, -0.0012622796710, -0.0011189189189, -0.0008893066980, -0.0008749706228, -0.0009969447709, -0.0014345475911, -0.0019292596945, -0.0024385428907, -0.0026968272620, -0.0026752056404, -0.0023595769683, -0.0020296122209, -0.0019652173913, -0.0024242068155, -0.0032991774383, -0.0051066980024, -0.0045257344301, -0.0081546415981, -0.0166465334900, -0.0039661574618, +0.0215666274971, +0.0261856639248, -0.0202399529965, -0.1034658049354, -0.1210662749706, -0.0300441833137, +0.0768928319624, +0.1659710928320, +0.2350032902468, +0.2266836662750, +0.1336893066980, +0.0007243243243, -0.1124740305523, -0.1539793184489, -0.1287259694477, -0.0698928319624, -0.0160871915394, +0.0026681551116, +0.0083052878966, +0.0236035252644, +0.0398843713278, +0.0491292596945, +0.0443454759107, +0.0173278495887, -0.0154272620447, -0.0377471210341, -0.0380627497062, -0.0175287896592, +0.0042601645123, +0.0149396004700, +0.0137276145711, -0.0024528789659, -0.0160011750881, -0.0101055229142, -0.0045901292597, -0.0075236192714, -0.0086855464160, -0.0066126909518, -0.0025819036428, +0.0086065804935, +0.0185760282021, +0.0136556991774, -0.0019149236193, -0.0162878965922, -0.0242634547591, -0.0263146886016, -0.0233381903643, -0.0158792009401, -0.0041097532315, +0.0044467685076, +0.0059386603995, +0.0008032902468, -0.0064907168038, -0.0114037602820, -0.0178371327850, -0.0234028202115, -0.0192070505288, -0.0031915393655, +0.0126157461810, +0.0178014101058, +0.0142152761457, +0.0099334900118, +0.0054794359577, +0.0025388954172, +0.0040235017626, +0.0065913043478, +0.0047264394830, -0.0047981198590, -0.0182387779083, -0.0285882491187, -0.0299941245593, -0.0223125734430, -0.0112460634548, -0.0021515863690, +0.0062110458284, +0.0113964747356, +0.0107654524089, +0.0061896592244, -0.0007386603995, -0.0063546415981, -0.0092235017626, -0.0102491186839, -0.0102274970623, -0.0104211515864, -0.0081762632197, -0.0005236192714, +0.0060030552291, +0.0073945945946, +0.0050420681551, -0.0012049353702, -0.0071146886016, -0.0116333725029, -0.0146455934195, -0.0123003525264, -0.0065840188014, -0.0004446533490, +0.0060603995300, +0.0090512338425, +0.0065913043478, +0.0006599294947, -0.0062183313749, -0.0120277320799, -0.0167757931845, -0.0191856639248, -0.0157215041128, -0.0060820211516, +0.0057950646298, +0.0149325499412, +0.0182747356052, +0.0156495887192, +0.0074519388954, -0.0037654524089, -0.0128526439483, -0.0182387779083, -0.0192430082256, -0.0148462984724, -0.0067419506463, +0.0027971797885, +0.0110881316099, +0.0155205640423, +0.0145452408931, +0.0082839012926, +0.0005736780259, -0.0043534665100, -0.0052500587544, -0.0025245593420, +0.0032777908343, +0.0096178613396, +0.0129743830787, +0.0115327849589, +0.0072509988249, +0.0012766157462, -0.0044970622797, -0.0076096357227, -0.0088719153937, -0.0090942420682, -0.0079539365452, -0.0058667450059, -0.0030481786134, -0.0009396004700, +0.0000502937720, +0.0013412455934, +0.0020009400705, +0.0013913043478, -0.0002223266745, -0.0020942420682, -0.0025318448884, -0.0022376028202, -0.0021945945946, -0.0002940070505, +0.0020585193890, +0.0029764982374, +0.0032777908343, +0.0029478260870, +0.0017499412456, +0.0006383078731, +0.0004232667450, +0.0022018801410, +0.0053433607521, +0.0077459459459, +0.0082982373678, +0.0079466509988, +0.0075666274971, +0.0064907168038, +0.0036721504113, -0.0004733254994, -0.0045327849589, -0.0069786133960, -0.0068780258519, -0.0039374853114, -0.0003156286722, +0.0025819036428, +0.0060603995300, +0.0090585193890, +0.0100481786134, +0.0104284371328, +0.0109374853114, +0.0110737955347, +0.0100768507638, +0.0071363102233, +0.0036291421857, +0.0005880141011, -0.0005952996475, +0.0014559341951, +0.0050061104583, +0.0073873090482, +0.0075163337250, +0.0053504112808, +0.0033278495887, +0.0024745005875, +0.0017499412456, +0.0019365452409, +0.0024958871915, +0.0020871915394, +0.0017212690952, +0.0013196239718, +0.0007529964747, +0.0008606345476, +0.0008535840188, +0.0006669800235, +0.0009753231492, +0.0012265569918, +0.0015849588719, +0.0022376028202, +0.0025748531140, +0.0025962397180, +0.0031628672150, +0.0051424206816, +0.0069856639248, +0.0067130434783, +0.0047767332550, +0.0030195064630, +0.0018002350176, +0.0003299647474, -0.0019435957697, -0.0035287896592, -0.0030481786134, -0.0006239717979, +0.0029334900118, +0.0069139835488, +0.0096752056404, +0.0094745005875, +0.0055584018801, -0.0003156286722, -0.0046404230317, -0.0056230317274, -0.0028258519389, +0.0024455934195, +0.0070286721504, +0.0089292596945, +0.0074376028202, +0.0031271445358, -0.0009252643948, -0.0036578143361, -0.0055010575793, -0.0053074030552, -0.0032058754407, -0.0003943595770, +0.0023595769683, +0.0046474735605, +0.0064907168038, +0.0070286721504, +0.0054364277321, +0.0032202115159, +0.0012192714454, -0.0005019976498, -0.0010902467685, -0.0005236192714, -0.0002079905993, -0.0009179788484, -0.0022808460635, -0.0033924794360, -0.0033135135135, -0.0019938895417, -0.0003513513514, +0.0007316098707, +0.0009252643948, +0.0006383078731, +0.0009396004700, +0.0012192714454, +0.0010686251469, +0.0003226792009, -0.0010759106933, -0.0019722679201, -0.0023165687427, -0.0025675675676, -0.0024601645123, -0.0023381903643, -0.0019222091657, -0.0010542890717, -0.0002152761457, +0.0005880141011, +0.0007889541716, +0.0005306698002, +0.0003083431257, +0.0000430082256, -0.0001863689777, -0.0006096357227, -0.0013052878966, -0.0018359576968, -0.0022162162162, -0.0021588719154, -0.0013125734430, -0.0000072855464, +0.0009753231492, +0.0011116333725, +0.0004446533490, -0.0002796709753, -0.0009179788484, -0.0015992949471, -0.0020728554642, -0.0024815511163, -0.0026968272620, -0.0020441833137, -0.0009252643948, +0.0001506462985, +0.0009036427732, +0.0007172737955, +0.0000860164512, +0.0000072855464, +0.0003656874266, +0.0006383078731, -0.0000072855464, -0.0013913043478, -0.0026608695652, -0.0033995299647, -0.0029908343126, -0.0016925969448, -0.0003800235018, +0.0005880141011, +0.0011259694477, +0.0013913043478, +0.0008319623972, -0.0012839012926, -0.0038371327850, -0.0058166862515, -0.0068709753231, -0.0066773207991, -0.0048554641598, -0.0015349001175, +0.0019508813161, +0.0039518213866, +0.0039374853114, +0.0024888366627, +0.0004806110458, -0.0015922444183, -0.0030051703878, -0.0035717978848, -0.0033708578143, -0.0024745005875, -0.0016425381904, -0.0009969447709, -0.0004159811986, -0.0006886016451, -0.0016136310223, -0.0023668625147, -0.0027111633373, -0.0022735605170, -0.0010542890717, +0.0003586368978, +0.0014632197415, +0.0018145710928, +0.0014702702703, +0.0009539365452, +0.0003873090482, -0.0002007050529, -0.0004016451234, -0.0001793184489, +0.0001363102233, +0.0002653349001, -0.0000860164512, -0.0006669800235, -0.0006742655699, -0.0000789659224, +0.0007816686251, +0.0018289071680, +0.0023882491187, +0.0020009400705, +0.0011332549941, +0.0002366627497, -0.0003083431257, -0.0005092831962, -0.0009682726204, -0.0016925969448, -0.0024169212691, -0.0029118683901, -0.0027541715629, -0.0021085781434, -0.0014488836663, -0.0006169212691, +0.0005236192714, +0.0020225616921, +0.0030051703878, +0.0030408930670, +0.0024601645123, +0.0012839012926, -0.0000860164512, -0.0007172737955, -0.0004876615746, +0.0003729729730, +0.0013913043478, +0.0018216216216, +0.0016136310223, +0.0008176263220, -0.0003083431257, -0.0011905992949, -0.0011976498237, -0.0004089306698, +0.0002869565217, +0.0004806110458, +0.0005880141011, +0.0006455934195, +0.0004446533490, +0.0001649823737, +0.0000430082256, +0.0003873090482, +0.0010399529965, +0.0014488836663, +0.0014775558167, +0.0009252643948, -0.0003873090482, -0.0016712103408, -0.0022232667450, -0.0019508813161, -0.0006383078731, +0.0012552291422, +0.0029908343126, +0.0042314923619, +0.0041741480611, +0.0028329024677, +0.0010615746181, -0.0008679200940, -0.0021515863690, -0.0020942420682, -0.0011619271445, +0.0000573443008, +0.0009179788484, +0.0011546415981, +0.0009539365452, +0.0000573443008, -0.0012909518214, -0.0020728554642, -0.0020082256169, -0.0013052878966, -0.0001936545241, +0.0009323149236, +0.0014989424207, +0.0012408930670, +0.0006526439483, +0.0002079905993, -0.0000502937720, -0.0000716803760, +0.0000000000000, -0.0000789659224, -0.0005809635723, -0.0012909518214, -0.0014488836663, -0.0009609870740, -0.0001363102233, +0.0007316098707, +0.0013339600470, +0.0017285546416, +0.0018648648649, +0.0014702702703, +0.0006813160987, -0.0001003525264, -0.0004733254994, -0.0003943595770, -0.0001793184489, -0.0000933019976, -0.0001290246769, -0.0000860164512, -0.0000072855464, +0.0000000000000, +0.0001363102233, +0.0005593419506, +0.0009609870740, +0.0008535840188, +0.0001076380729, -0.0007459459459, -0.0013482961222, -0.0016136310223, -0.0011762632197, -0.0002079905993, +0.0006383078731, +0.0011259694477, +0.0012049353702, +0.0004876615746, -0.0007243243243, -0.0016352526439, -0.0018935370153, -0.0016279670975, -0.0011332549941, -0.0007243243243, -0.0003656874266, -0.0000143360752, +0.0001433607521, +0.0002439482961, +0.0003299647474, +0.0000286721504, -0.0006813160987, -0.0015992949471, -0.0023882491187, -0.0025175088132, -0.0021301997650, -0.0015349001175, -0.0006383078731, -0.0000216216216, +0.0001506462985, +0.0001793184489, -0.0001219741481, -0.0004733254994, -0.0006312573443, -0.0010112808461, -0.0016425381904, -0.0022665099882, -0.0024958871915, -0.0020512338425, -0.0012192714454, -0.0003156286722, +0.0003800235018, +0.0006383078731, +0.0004876615746, +0.0000000000000, -0.0005809635723, -0.0009396004700, -0.0009969447709, -0.0008462984724, -0.0006312573443, -0.0004733254994, -0.0004806110458, -0.0006383078731, -0.0007889541716, -0.0008893066980, -0.0009826086957, -0.0012336075206, -0.0016712103408, -0.0018792009401, -0.0018432432432, -0.0017212690952, -0.0013412455934, -0.0008606345476, -0.0007029377203, -0.0008319623972, -0.0009109283196, -0.0008606345476, -0.0011116333725, -0.0015349001175, -0.0016998824912, -0.0017642773208, -0.0017499412456, -0.0015562867215, -0.0010686251469, -0.0004662749706, -0.0001290246769, +0.0001506462985, +0.0004806110458, +0.0006813160987, +0.0008893066980, +0.0007529964747, +0.0002582843713, -0.0002796709753, -0.0009396004700, -0.0013482961222, -0.0012622796710, -0.0011116333725, -0.0008965922444, -0.0007243243243, -0.0008893066980, -0.0011475910693, -0.0013842538190, -0.0015492361927, -0.0013626321974, -0.0010183313749, -0.0007099882491, -0.0002223266745, +0.0002223266745, +0.0005809635723, +0.0007172737955, +0.0002582843713, -0.0007099882491, -0.0014632197415, -0.0016568742656, -0.0015562867215, -0.0013913043478, -0.0009826086957, -0.0003729729730, -0.0000430082256, +0.0000430082256, +0.0001290246769, +0.0001720329025, +0.0003729729730, +0.0007673325499, +0.0006526439483, +0.0000502937720, -0.0005809635723, -0.0010256169213, -0.0011259694477, -0.0012336075206, -0.0014056404230, -0.0015062279671, -0.0016209165687, -0.0015706227967, -0.0013052878966, -0.0011762632197, -0.0010615746181, -0.0009753231492, -0.0009682726204, -0.0007889541716, -0.0003299647474, +0.0001219741481, +0.0003656874266, +0.0005092831962, +0.0006383078731, +0.0004089306698, -0.0001363102233, -0.0005379553467, -0.0005736780259, -0.0004876615746, -0.0004949471210, -0.0004519388954, -0.0002509988249, +0.0000716803760, +0.0003729729730, +0.0004806110458, +0.0004303172738, +0.0002726204465, +0.0000646298472, -0.0001649823737, -0.0003083431257, -0.0002439482961, -0.0001219741481, -0.0000933019976, -0.0001793184489, -0.0003156286722, -0.0003586368978, -0.0003012925969, +0.0000359576968, +0.0008176263220, +0.0014775558167, +0.0015706227967, +0.0010472385429, +0.0002940070505, -0.0002439482961, -0.0005163337250, -0.0005736780259, -0.0001863689777, +0.0004519388954, +0.0010399529965, +0.0014559341951, +0.0015849588719, +0.0011762632197, +0.0003226792009, -0.0004519388954, -0.0008176263220, -0.0007029377203, -0.0002582843713, +0.0002582843713, +0.0006526439483, +0.0006383078731, +0.0003370152761, +0.0003156286722, +0.0004446533490, +0.0003083431257, -0.0000072855464, -0.0003083431257, -0.0004733254994, -0.0005092831962, -0.0002726204465, +0.0002796709753, +0.0007602820212, +0.0009753231492, +0.0010686251469, +0.0009826086957, +0.0009396004700, +0.0011833137485, +0.0012552291422, +0.0009179788484, +0.0003943595770, -0.0001793184489, -0.0005952996475, -0.0006669800235, -0.0003943595770, +0.0002152761457, +0.0009682726204, +0.0014918918919, +0.0017642773208, +0.0018289071680, +0.0016209165687, +0.0012622796710, +0.0009969447709, +0.0008606345476, +0.0007529964747, +0.0005880141011, +0.0004232667450, +0.0003443008226, +0.0002726204465, +0.0002509988249, +0.0003729729730, +0.0005092831962, +0.0006886016451, +0.0009896592244, +0.0011546415981, +0.0010183313749, +0.0007029377203, +0.0003800235018, +0.0003083431257, +0.0006455934195, +0.0011905992949, +0.0016568742656, +0.0016712103408, +0.0012622796710, +0.0008319623972, +0.0006023501763, +0.0005163337250, +0.0005092831962, +0.0005163337250, +0.0005809635723, +0.0006239717979, +0.0006813160987, +0.0007172737955, +0.0005736780259, +0.0004662749706, +0.0005952996475, +0.0007673325499, +0.0008392479436, +0.0008679200940, +0.0008606345476, +0.0007816686251, +0.0005163337250, +0.0001576968273, -0.0001720329025, -0.0003586368978, -0.0002366627497, +0.0000860164512, +0.0004016451234, +0.0006669800235, +0.0008822561692, +0.0009252643948, +0.0007960047004, +0.0007172737955, +0.0007386603995, +0.0008535840188, +0.0011045828437, +0.0012479435958, +0.0011403055229, +0.0009179788484, +0.0005593419506, +0.0002869565217, +0.0002152761457, +0.0001720329025, +0.0002582843713, +0.0004089306698, +0.0003943595770, +0.0002796709753, +0.0002582843713, +0.0003299647474, +0.0003299647474, +0.0003083431257, +0.0003513513514, +0.0003800235018, +0.0003729729730, +0.0003943595770, +0.0003729729730, +0.0003943595770, +0.0004806110458, +0.0005522914219, +0.0003586368978, -0.0001146886016, -0.0004806110458, -0.0004949471210, -0.0002509988249, +0.0001793184489, +0.0007029377203, +0.0010829612221, +0.0012049353702, +0.0009826086957, +0.0005666274971, +0.0002439482961, +0.0000286721504, -0.0000502937720, +0.0000072855464, +0.0000430082256, -0.0000646298472, -0.0002796709753, -0.0005163337250, -0.0006526439483, -0.0006669800235, -0.0005163337250, -0.0001793184489, +0.0001576968273, +0.0003873090482, +0.0004662749706, +0.0002869565217, -0.0000359576968, -0.0002439482961, -0.0003083431257, -0.0004446533490, -0.0006383078731, -0.0007889541716, -0.0007529964747, -0.0002653349001, +0.0005880141011, +0.0015205640423, +0.0021445358402, +0.0018862514689, +0.0006526439483, -0.0009396004700, -0.0020942420682, -0.0022735605170, -0.0015492361927, -0.0004016451234, +0.0006886016451, +0.0013626321974, +0.0013842538190, +0.0008822561692, +0.0001146886016, -0.0006742655699, -0.0011332549941, -0.0011546415981, -0.0009466509988, -0.0005163337250, +0.0000072855464, +0.0004303172738, +0.0007029377203, +0.0006886016451, +0.0003656874266, -0.0000430082256, -0.0004662749706, -0.0007243243243, -0.0007602820212, -0.0006599294947, -0.0003873090482, -0.0002007050529, -0.0002439482961, -0.0002079905993, -0.0001219741481, -0.0001290246769, +0.0000000000000, +0.0001363102233, +0.0001506462985, +0.0001720329025, +0.0000860164512, +0.0000646298472, +0.0002582843713, +0.0002007050529, -0.0001649823737, -0.0006312573443, -0.0010183313749, -0.0008965922444, -0.0005809635723, -0.0004303172738, -0.0001363102233, +0.0002582843713, +0.0005092831962, +0.0005379553467, +0.0003370152761, +0.0003083431257, +0.0003943595770, +0.0001003525264, -0.0002296122209, -0.0001290246769, +0.0002223266745, +0.0005163337250, +0.0006599294947, +0.0006312573443, +0.0004303172738, +0.0001146886016, -0.0003226792009, -0.0006239717979, -0.0002726204465, +0.0004376028202, +0.0008032902468, +0.0008965922444, +0.0009109283196, +0.0008319623972, +0.0006455934195, +0.0003083431257, -0.0001576968273, -0.0006239717979, -0.0007816686251, -0.0005236192714, -0.0000359576968, +0.0003083431257, +0.0004159811986, +0.0003729729730, +0.0003156286722, +0.0003083431257, +0.0003586368978, +0.0004016451234, +0.0004589894242, +0.0005809635723, +0.0007673325499, +0.0008535840188, +0.0006813160987, +0.0004089306698, +0.0001076380729, -0.0001219741481, -0.0000716803760, +0.0002509988249, +0.0006455934195, +0.0008535840188, +0.0009179788484, +0.0009396004700, +0.0006813160987, +0.0002509988249, +0.0000933019976, +0.0001863689777, +0.0003729729730, +0.0004806110458, +0.0003943595770, +0.0004232667450, +0.0005163337250, +0.0004589894242, +0.0003800235018, +0.0003226792009, +0.0001863689777, +0.0000430082256, -0.0000286721504, +0.0000573443008, +0.0002653349001, +0.0004376028202, +0.0007029377203, +0.0009609870740, +0.0010542890717, +0.0010615746181, +0.0009109283196, +0.0006239717979, +0.0002796709753, -0.0000933019976, -0.0002366627497, -0.0000789659224, +0.0001649823737, +0.0003943595770, +0.0003943595770, +0.0002653349001, +0.0001936545241, +0.0001793184489, +0.0002726204465, +0.0006169212691, +0.0009896592244, +0.0011332549941, +0.0009252643948, +0.0005019976498, +0.0002152761457, +0.0001576968273, +0.0001649823737, +0.0001219741481, +0.0000216216216, -0.0000646298472, -0.0000789659224, -0.0000072855464, +0.0001720329025, +0.0002940070505, +0.0002796709753, +0.0003083431257, +0.0004446533490, +0.0005666274971, +0.0005952996475, +0.0004519388954, +0.0001793184489, -0.0001433607521, -0.0004016451234, -0.0003443008226, -0.0000286721504, +0.0002509988249, +0.0003800235018, +0.0002869565217, +0.0000573443008, -0.0001720329025, -0.0003443008226, -0.0002940070505, -0.0000430082256, +0.0002439482961, +0.0005236192714, +0.0006813160987, +0.0006239717979, +0.0004232667450, +0.0001219741481, -0.0002869565217, -0.0006455934195, -0.0008032902468, -0.0007243243243, -0.0004662749706, -0.0001793184489, +0.0000000000000, +0.0000000000000, -0.0000860164512, -0.0001290246769, -0.0000716803760, +0.0000789659224, +0.0002296122209, +0.0001863689777, -0.0000716803760, -0.0004303172738, -0.0006096357227, -0.0005522914219, -0.0003656874266, -0.0001290246769, -0.0000216216216, -0.0001433607521, -0.0003156286722, -0.0003729729730, -0.0003226792009, -0.0003586368978, -0.0004589894242, -0.0004232667450, -0.0003012925969, -0.0001936545241, -0.0000933019976, -0.0001076380729, -0.0001863689777, -0.0002582843713, -0.0003443008226, -0.0003656874266, -0.0002869565217, -0.0002079905993, -0.0002296122209, -0.0003513513514, -0.0005163337250, -0.0005809635723, -0.0005019976498, -0.0002940070505, +0.0000216216216, +0.0002726204465, +0.0003083431257, +0.0002152761457, -0.0000216216216, -0.0003729729730, -0.0005809635723, -0.0006096357227, -0.0005092831962, -0.0003443008226, -0.0002653349001, -0.0002223266745, -0.0001649823737, -0.0001363102233, -0.0000789659224, -0.0000430082256, -0.0001146886016, -0.0001863689777, -0.0002439482961, -0.0002940070505, -0.0003513513514, -0.0004376028202, -0.0003656874266, -0.0001290246769, +0.0000072855464, +0.0000286721504, +0.0001076380729, +0.0001793184489, +0.0001506462985, -0.0000216216216, -0.0003586368978, -0.0006886016451, -0.0009539365452, -0.0009969447709, -0.0007099882491, -0.0003083431257, -0.0001146886016, -0.0002079905993, -0.0005306698002, -0.0007316098707, -0.0006599294947, -0.0005019976498, -0.0003370152761, -0.0002509988249, -0.0002940070505, -0.0003800235018, -0.0004662749706, -0.0004016451234, -0.0000860164512, +0.0002152761457, +0.0001649823737, -0.0002869565217, -0.0007386603995, -0.0008176263220, -0.0006383078731, -0.0003513513514, -0.0000573443008, +0.0000286721504, -0.0001936545241, -0.0005952996475, -0.0008103407756, -0.0007029377203, -0.0004376028202, -0.0001793184489, -0.0001433607521, -0.0003299647474, -0.0005092831962, -0.0005379553467, -0.0004016451234, -0.0002007050529, -0.0000573443008, +0.0000716803760, +0.0001219741481, -0.0000216216216, -0.0002653349001, -0.0004806110458, -0.0006742655699, -0.0008319623972, -0.0008103407756, -0.0005809635723, -0.0003586368978, -0.0001793184489, -0.0000143360752, +0.0000359576968, -0.0000286721504, -0.0002366627497, -0.0004589894242, -0.0005593419506, -0.0005880141011, -0.0005306698002, -0.0004733254994, -0.0005236192714, -0.0005019976498, -0.0003012925969, -0.0000143360752, +0.0002079905993, +0.0002079905993, -0.0000216216216, -0.0003513513514, -0.0006742655699, -0.0007960047004, -0.0006813160987, -0.0004159811986, -0.0000430082256, +0.0001649823737, +0.0001433607521, +0.0000143360752, -0.0003156286722, -0.0007673325499, -0.0009682726204, -0.0008749706228, -0.0006239717979, -0.0002940070505, +0.0000716803760, +0.0003513513514, +0.0003800235018, +0.0001793184489, -0.0001003525264, -0.0003370152761, -0.0004589894242, -0.0005736780259, -0.0006599294947, -0.0006023501763, -0.0005092831962, -0.0004949471210, -0.0005163337250, -0.0004876615746, -0.0003443008226, -0.0001506462985, +0.0000143360752, +0.0001649823737, +0.0002726204465, +0.0002509988249, +0.0000216216216, -0.0002366627497, -0.0003443008226, -0.0003586368978, -0.0003226792009, -0.0002079905993, -0.0001003525264, +0.0000000000000, +0.0000573443008, +0.0000000000000, -0.0000716803760, -0.0001003525264, -0.0001219741481, -0.0001363102233, -0.0001146886016, -0.0000573443008, -0.0000072855464, -0.0000216216216, -0.0000860164512, -0.0001863689777, -0.0002726204465, -0.0002152761457, -0.0001146886016, -0.0001363102233, -0.0002582843713, -0.0003226792009, -0.0002726204465, -0.0002079905993, -0.0002509988249, -0.0002869565217, -0.0002007050529, -0.0000716803760, +0.0001076380729, +0.0002869565217, +0.0003370152761, +0.0002296122209, -0.0000286721504, -0.0003012925969, -0.0003586368978, -0.0002796709753, -0.0001290246769, +0.0000359576968, +0.0000502937720, -0.0001146886016, -0.0003443008226, -0.0004806110458, -0.0004089306698, -0.0002152761457, -0.0000072855464, +0.0001076380729, +0.0000072855464, -0.0001936545241, -0.0003729729730, -0.0004446533490, -0.0003443008226, -0.0001433607521, +0.0000072855464, +0.0001003525264, +0.0001506462985, +0.0001649823737, +0.0001146886016, +0.0000646298472, +0.0000646298472, +0.0000860164512, +0.0001433607521, +0.0002509988249, +0.0003873090482, +0.0004876615746, +0.0004876615746, +0.0003443008226, +0.0000860164512, -0.0001720329025, -0.0003586368978, -0.0004733254994, -0.0004876615746, -0.0003226792009, -0.0000646298472, +0.0000573443008, +0.0000573443008, +0.0000430082256, +0.0000286721504, +0.0000502937720, +0.0001219741481, +0.0001649823737, +0.0001576968273, +0.0000789659224, -0.0000860164512, -0.0003012925969, -0.0004519388954, -0.0004159811986, -0.0002152761457, -0.0000216216216, +0.0000430082256, +0.0000359576968, -0.0000286721504, -0.0001433607521, -0.0002079905993, -0.0001649823737, -0.0000646298472, +0.0000216216216, +0.0000072855464, -0.0001003525264, -0.0002007050529, -0.0001720329025, -0.0000789659224, -0.0000143360752, +0.0000072855464, -0.0000072855464, -0.0000573443008, -0.0000359576968, +0.0000716803760, +0.0001649823737, +0.0001576968273, +0.0000286721504, -0.0001290246769, -0.0002726204465, -0.0003586368978, -0.0002653349001, -0.0000216216216, +0.0002007050529, +0.0003370152761, +0.0003299647474, +0.0001793184489, +0.0000000000000, -0.0001146886016, -0.0000860164512, +0.0000286721504, +0.0002079905993, +0.0003586368978, +0.0003656874266, +0.0002509988249, +0.0000933019976, +0.0000143360752, +0.0000646298472, +0.0001290246769, +0.0001720329025, +0.0001506462985, +0.0000143360752, -0.0000860164512, -0.0001290246769, -0.0001506462985, -0.0000860164512, +0.0000216216216, +0.0001433607521, +0.0002223266745, +0.0002079905993, +0.0002079905993, +0.0002366627497, +0.0001793184489, +0.0000933019976, +0.0000000000000, -0.0001146886016, -0.0001720329025, -0.0001363102233, +0.0000359576968, +0.0002940070505, +0.0004519388954, +0.0005163337250, +0.0005593419506, +0.0005593419506, +0.0005522914219, +0.0005092831962, +0.0003586368978, +0.0001863689777, +0.0000286721504, -0.0001219741481, -0.0002653349001, -0.0003370152761, -0.0002940070505, -0.0001793184489, -0.0000716803760, +0.0000716803760, +0.0002296122209, +0.0003299647474, +0.0003943595770, +0.0004232667450, +0.0004016451234, +0.0002869565217, +0.0001076380729, +0.0000143360752, +0.0000716803760, +0.0001649823737, +0.0002079905993, +0.0002152761457, +0.0002152761457, +0.0002653349001, +0.0003083431257, +0.0001936545241, -0.0000286721504, -0.0002296122209, -0.0003513513514, -0.0003656874266, -0.0002582843713, -0.0000502937720, +0.0001720329025, +0.0003226792009, +0.0003800235018, +0.0003513513514, +0.0002366627497, +0.0001076380729, -0.0000430082256, -0.0001720329025, -0.0000789659224, +0.0002152761457, +0.0005019976498, +0.0006455934195, +0.0005593419506, +0.0002869565217, -0.0000286721504, -0.0003226792009, -0.0003943595770, -0.0001363102233, +0.0002366627497, +0.0005522914219, +0.0006599294947, +0.0004662749706, +0.0000933019976, -0.0002366627497, -0.0003800235018, -0.0002366627497, +0.0000000000000, +0.0001506462985, +0.0002296122209, +0.0003226792009, +0.0004806110458, +0.0006383078731, +0.0006383078731, +0.0005019976498, +0.0002869565217, +0.0000789659224, +0.0000502937720, +0.0002366627497, +0.0005019976498, +0.0005809635723, +0.0003800235018, +0.0001433607521, +0.0000286721504, -0.0000430082256, -0.0000573443008, +0.0000716803760, +0.0002079905993, +0.0002439482961, +0.0001936545241, +0.0000573443008, -0.0001003525264, -0.0001576968273, -0.0000072855464, +0.0003370152761, +0.0007029377203, +0.0008392479436, +0.0007243243243, +0.0004519388954, +0.0000860164512, -0.0001936545241, -0.0003156286722, -0.0003299647474, -0.0002940070505, -0.0002007050529, -0.0000789659224, +0.0000573443008, +0.0001433607521, +0.0001506462985, +0.0001506462985, +0.0001649823737, +0.0001720329025, +0.0001076380729, +0.0000000000000, -0.0001363102233, -0.0002079905993, -0.0001506462985, +0.0000216216216, +0.0002007050529, +0.0002869565217, +0.0003226792009, +0.0003586368978, +0.0003370152761, +0.0002079905993, +0.0000646298472, +0.0000072855464, -0.0000143360752, -0.0001003525264, -0.0001506462985, -0.0000502937720, +0.0001219741481, +0.0002796709753, +0.0004232667450, +0.0005163337250, +0.0005163337250, +0.0004159811986, +0.0002366627497, +0.0001219741481, +0.0001146886016, +0.0001363102233, +0.0001649823737, +0.0002007050529, +0.0002079905993, +0.0001936545241, +0.0001863689777, +0.0001576968273, +0.0001146886016, +0.0000860164512, +0.0000789659224, +0.0001146886016, +0.0001793184489, +0.0002007050529, +0.0002726204465, +0.0004446533490, +0.0006096357227, +0.0006669800235, +0.0005092831962, +0.0001649823737, -0.0001720329025, -0.0003370152761, -0.0002223266745, +0.0001363102233, +0.0005306698002, +0.0007602820212, +0.0007243243243, +0.0004949471210, +0.0002439482961, +0.0000502937720, -0.0000789659224, -0.0001219741481, -0.0000573443008, +0.0000216216216, +0.0000860164512, +0.0001363102233, +0.0001936545241, +0.0002223266745, +0.0001936545241, +0.0001863689777, +0.0002366627497, +0.0002509988249, +0.0001793184489, +0.0000933019976, +0.0000286721504, +0.0000143360752, +0.0000502937720, +0.0001290246769, +0.0002509988249, +0.0003226792009, +0.0003083431257, +0.0002509988249, +0.0001649823737, +0.0001076380729, +0.0001076380729, +0.0001290246769, +0.0001506462985, +0.0002223266745, +0.0002796709753, +0.0002940070505, +0.0002439482961, +0.0001576968273, +0.0000502937720, -0.0000216216216, -0.0000573443008, -0.0000286721504, +0.0000860164512, +0.0002582843713, +0.0002869565217, +0.0001649823737, +0.0000716803760, +0.0000430082256, +0.0000646298472, +0.0000933019976, +0.0001363102233, +0.0002152761457, +0.0003083431257, +0.0003656874266, +0.0003299647474, +0.0001936545241, +0.0000573443008, -0.0000716803760, -0.0001649823737, -0.0001649823737, -0.0001363102233, -0.0001003525264, -0.0000216216216, +0.0000000000000, -0.0000502937720, -0.0001649823737, -0.0002726204465, -0.0002509988249, -0.0000933019976, +0.0000716803760, +0.0001720329025, +0.0002152761457, +0.0002007050529, +0.0001506462985, +0.0001219741481, +0.0001506462985, +0.0001506462985, +0.0001076380729, +0.0000359576968, -0.0000359576968, -0.0000573443008, -0.0000072855464, +0.0000359576968, +0.0000646298472, +0.0000359576968, -0.0000072855464, +0.0000143360752, +0.0000789659224, +0.0000860164512, +0.0000430082256, +0.0000716803760, +0.0001720329025, +0.0002726204465, +0.0002653349001, +0.0001363102233, -0.0000430082256, -0.0002007050529, -0.0002296122209, -0.0001003525264, +0.0000860164512, +0.0002439482961, +0.0002796709753, +0.0002079905993, +0.0001290246769, +0.0000716803760, +0.0000573443008, +0.0000286721504, -0.0000789659224, -0.0002007050529, -0.0002653349001, -0.0002366627497, -0.0000789659224, +0.0000573443008, +0.0000789659224, +0.0000143360752, -0.0001219741481, -0.0002223266745, -0.0001720329025, -0.0000286721504, +0.0001076380729, +0.0001576968273, +0.0000646298472, -0.0000933019976, -0.0002582843713, -0.0003586368978, -0.0003012925969, -0.0001433607521, +0.0000143360752, +0.0000430082256, -0.0000716803760, -0.0001793184489, -0.0002366627497, -0.0002439482961, -0.0001720329025, -0.0001290246769, -0.0001003525264, -0.0000286721504, -0.0000072855464, -0.0000286721504, -0.0000646298472, -0.0001506462985, -0.0002366627497, -0.0003012925969, -0.0003370152761, -0.0003513513514, -0.0003156286722, -0.0002007050529, -0.0000860164512, +0.0000143360752, +0.0001076380729, +0.0001003525264, -0.0000072855464, -0.0001506462985, -0.0002439482961, -0.0002152761457, -0.0001003525264, +0.0000286721504, +0.0001076380729, +0.0001290246769, +0.0000716803760, -0.0000716803760, -0.0002296122209, -0.0002940070505, -0.0003012925969, -0.0002223266745, -0.0000789659224, +0.0000143360752, +0.0000646298472, +0.0001076380729, +0.0001290246769, +0.0000789659224, -0.0000286721504, -0.0001506462985, -0.0002223266745, -0.0003012925969, -0.0003443008226, -0.0002869565217, -0.0002296122209, -0.0002152761457, -0.0002366627497, -0.0002796709753, -0.0002653349001, -0.0001863689777, -0.0001003525264, -0.0000216216216, +0.0000000000000, -0.0000072855464, -0.0000216216216, -0.0000933019976, -0.0001506462985, -0.0001863689777, -0.0002007050529, -0.0001936545241, -0.0001863689777, -0.0001936545241, -0.0001793184489, -0.0001076380729, +0.0000000000000, +0.0000789659224, +0.0000933019976, +0.0000502937720, -0.0000502937720, -0.0001720329025, -0.0002439482961, -0.0002940070505, -0.0002869565217, -0.0002007050529, -0.0001146886016, -0.0000646298472, -0.0000502937720, -0.0000072855464, +0.0001219741481, +0.0002152761457, +0.0001433607521, -0.0000286721504, -0.0002509988249, -0.0004016451234, -0.0004446533490, -0.0004232667450, -0.0003083431257, -0.0001576968273, -0.0000933019976, -0.0000646298472, -0.0000359576968, +0.0000072855464, +0.0000646298472, +0.0000000000000, -0.0001649823737, -0.0003083431257, -0.0003729729730, -0.0002940070505, -0.0001219741481, +0.0000216216216, +0.0001146886016, +0.0001076380729, -0.0000072855464, -0.0002079905993, -0.0004016451234, -0.0004446533490, -0.0003012925969, -0.0000716803760, +0.0000716803760, +0.0000789659224, +0.0000072855464, -0.0000646298472, -0.0001003525264, -0.0001433607521, -0.0001649823737, -0.0001433607521, -0.0001363102233, -0.0001720329025, -0.0002582843713, -0.0003083431257, -0.0002439482961, -0.0000933019976, +0.0000430082256, +0.0001433607521, +0.0001793184489, +0.0001290246769, +0.0000359576968, -0.0000286721504, -0.0000502937720, -0.0000860164512, -0.0001506462985, -0.0002296122209, -0.0002940070505, -0.0003226792009, -0.0003443008226, -0.0003156286722, -0.0002366627497, -0.0001433607521, -0.0000359576968, +0.0001076380729, +0.0002869565217, +0.0004159811986, +0.0003873090482, +0.0001936545241, -0.0000430082256, -0.0002296122209, -0.0002653349001, -0.0001863689777, -0.0000646298472, +0.0000573443008, +0.0000646298472, -0.0000860164512, -0.0002653349001, -0.0003299647474, -0.0002582843713, -0.0001290246769, -0.0000430082256, -0.0000359576968, -0.0001363102233, -0.0002940070505, -0.0003656874266, -0.0002796709753, -0.0001076380729, -0.0000143360752, -0.0000573443008, -0.0001649823737, -0.0002653349001, -0.0002582843713, -0.0001003525264, +0.0001076380729, +0.0002726204465, +0.0003226792009, +0.0002366627497, +0.0001219741481, +0.0000000000000, -0.0000860164512, -0.0001506462985, -0.0002582843713, -0.0003729729730, -0.0004376028202, -0.0004446533490, -0.0003513513514, -0.0002079905993, -0.0000573443008, +0.0001146886016, +0.0001793184489, +0.0000789659224, -0.0000502937720, -0.0001290246769, -0.0001363102233, -0.0000716803760, +0.0000000000000, +0.0000789659224, +0.0001506462985, +0.0001576968273, +0.0000646298472, -0.0000646298472, -0.0001363102233, -0.0001003525264, -0.0000216216216, +0.0000573443008, +0.0001219741481, +0.0001363102233, +0.0000860164512, -0.0000286721504, -0.0001576968273, -0.0002079905993, -0.0002296122209, -0.0002796709753, -0.0003226792009, -0.0002796709753, -0.0001863689777, -0.0000573443008, +0.0000716803760, +0.0001863689777, +0.0002439482961, +0.0002509988249, +0.0001793184489, +0.0000860164512, +0.0000143360752, -0.0000716803760, -0.0001793184489, -0.0001720329025, -0.0000646298472, +0.0000072855464, +0.0000072855464, -0.0000216216216, -0.0000789659224, -0.0001649823737, -0.0002296122209, -0.0002152761457, -0.0001003525264, +0.0001146886016, +0.0003513513514, +0.0004376028202, +0.0003513513514, +0.0001290246769, -0.0001576968273, -0.0003800235018, -0.0003943595770, -0.0002296122209, -0.0000072855464, +0.0001146886016, +0.0000573443008, -0.0001219741481, -0.0002940070505, -0.0003156286722, -0.0001720329025, +0.0000860164512, +0.0003299647474, +0.0004159811986, +0.0003370152761, +0.0002007050529, +0.0000933019976, +0.0000072855464, -0.0000716803760, -0.0001720329025, -0.0002653349001, -0.0002869565217, -0.0002296122209, -0.0001219741481, +0.0000072855464, +0.0001219741481, +0.0001936545241, +0.0001936545241, +0.0001076380729, +0.0000573443008, +0.0000716803760, +0.0001219741481, +0.0001793184489, +0.0001793184489, +0.0000933019976, -0.0000143360752, -0.0001219741481, -0.0001720329025, -0.0001076380729, -0.0000216216216, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000286721504, +0.0000286721504, +0.0000216216216, +0.0000072855464, -0.0000430082256, -0.0000646298472, +0.0000000000000, +0.0000933019976, +0.0001720329025, +0.0001863689777, +0.0001219741481, +0.0000000000000, -0.0001720329025, -0.0002869565217, -0.0002653349001, -0.0001076380729, +0.0001219741481, +0.0003443008226, +0.0004446533490, +0.0004016451234, +0.0002439482961, +0.0000286721504, -0.0001363102233, -0.0002439482961, -0.0002582843713, -0.0001720329025, -0.0000286721504, +0.0001219741481, +0.0002296122209, +0.0002439482961, +0.0001649823737, +0.0000359576968, -0.0000933019976, -0.0001793184489, -0.0001576968273, -0.0000716803760, +0.0000143360752, +0.0001003525264, +0.0001863689777, +0.0002439482961, +0.0003012925969, +0.0003370152761, +0.0003083431257, +0.0002079905993, +0.0000000000000, -0.0002007050529, -0.0003370152761, -0.0003873090482, -0.0003012925969, -0.0001219741481, +0.0000286721504, +0.0001146886016, +0.0001219741481, +0.0000573443008, +0.0000000000000, -0.0000359576968, +0.0000000000000, +0.0000716803760, +0.0001219741481, +0.0001720329025, +0.0001506462985, +0.0000573443008, -0.0000216216216, -0.0000860164512, -0.0001363102233, -0.0001433607521, -0.0001146886016, -0.0000430082256, +0.0000573443008, +0.0001649823737, +0.0002439482961, +0.0002296122209, +0.0001793184489, +0.0001649823737, +0.0001433607521, +0.0001146886016, +0.0000716803760, +0.0000143360752, +0.0000000000000, +0.0000430082256, +0.0001363102233, +0.0002582843713, +0.0003370152761, +0.0003299647474, +0.0002366627497, +0.0001146886016, -0.0000286721504, -0.0001506462985, -0.0001649823737, -0.0000573443008, +0.0000143360752, +0.0000143360752, -0.0000216216216, -0.0000359576968, +0.0000072855464, +0.0000933019976, +0.0001793184489, +0.0002509988249, +0.0002366627497, +0.0001363102233, +0.0000216216216, -0.0000573443008, -0.0001003525264, -0.0001076380729, -0.0000646298472, +0.0000000000000, +0.0000646298472, +0.0001146886016, +0.0001290246769, +0.0001146886016, +0.0000933019976, +0.0000716803760, +0.0000933019976, +0.0001506462985, +0.0001863689777, +0.0002152761457, +0.0002007050529, +0.0001433607521, +0.0000860164512, +0.0000000000000, -0.0000502937720, -0.0000359576968, -0.0000216216216, -0.0000359576968, -0.0000573443008, -0.0000933019976, -0.0000716803760, -0.0000502937720, -0.0000646298472, -0.0000646298472, -0.0000072855464, +0.0000933019976, +0.0002007050529, +0.0002582843713, +0.0002366627497, +0.0001863689777, +0.0001649823737, +0.0002079905993, +0.0002940070505, +0.0003943595770, +0.0004519388954, +0.0004159811986, +0.0002439482961, +0.0000072855464, -0.0001433607521, -0.0001290246769, +0.0000359576968, +0.0002223266745, +0.0002869565217, +0.0001936545241, +0.0000716803760, +0.0000143360752, +0.0000359576968, +0.0001003525264, +0.0001936545241, +0.0002726204465, +0.0002582843713, +0.0001793184489, +0.0001219741481, +0.0001290246769, +0.0001433607521, +0.0001649823737, +0.0001793184489, +0.0001433607521, +0.0001363102233, +0.0001936545241, +0.0002509988249, +0.0002796709753, +0.0002869565217, +0.0002940070505, +0.0002726204465, +0.0002152761457, +0.0001576968273, +0.0001363102233, +0.0001576968273, +0.0002223266745, +0.0002439482961, +0.0001793184489, +0.0000573443008, -0.0000716803760, -0.0001863689777, -0.0002079905993, -0.0001290246769, +0.0000000000000, +0.0001433607521, +0.0002509988249, +0.0002509988249, +0.0001363102233, +0.0000143360752, -0.0000143360752, +0.0000502937720, +0.0001506462985, +0.0002296122209, +0.0002079905993, +0.0000716803760, -0.0000646298472, -0.0000933019976, +0.0000000000000, +0.0001863689777, +0.0003226792009, +0.0003012925969, +0.0001793184489, +0.0000573443008, +0.0000000000000, -0.0000143360752, -0.0000286721504, -0.0000430082256, -0.0000646298472, -0.0000716803760, -0.0000646298472, -0.0000430082256, -0.0000359576968, -0.0000430082256, -0.0000716803760, -0.0001003525264, -0.0001003525264, -0.0000573443008, +0.0000286721504, +0.0001146886016, +0.0001003525264, -0.0000072855464, -0.0001146886016, -0.0001433607521, -0.0000573443008, +0.0001076380729, +0.0002653349001, +0.0003226792009, +0.0002439482961, +0.0000430082256, -0.0001146886016, -0.0001649823737, -0.0001506462985, -0.0001219741481, -0.0001290246769, -0.0001793184489, -0.0001793184489, -0.0000860164512, +0.0000143360752, +0.0000573443008, +0.0000143360752, -0.0000646298472, -0.0001219741481, -0.0001146886016, -0.0000430082256, +0.0000359576968, +0.0000716803760, +0.0000430082256, -0.0000286721504, -0.0001290246769, -0.0001863689777, -0.0001649823737, -0.0000789659224, +0.0000286721504, +0.0001219741481, +0.0001720329025, +0.0001793184489, +0.0001433607521, +0.0000789659224, +0.0000000000000, -0.0000573443008, -0.0000502937720, +0.0000000000000, +0.0000216216216, -0.0000143360752, -0.0001003525264, -0.0002007050529, -0.0002726204465, -0.0003083431257, -0.0003083431257, -0.0002223266745, -0.0000646298472, +0.0000646298472, +0.0001290246769, +0.0001003525264, +0.0000000000000, -0.0001219741481, -0.0002079905993, -0.0002007050529, -0.0001649823737, -0.0001506462985, -0.0001290246769, -0.0000789659224, -0.0000216216216, +0.0000000000000, +0.0000143360752, +0.0000286721504, +0.0000430082256, +0.0000573443008, +0.0000286721504, -0.0000286721504, -0.0000716803760, -0.0000789659224, -0.0000716803760, -0.0000860164512, -0.0001146886016, -0.0001076380729, -0.0000789659224, -0.0000860164512, -0.0001146886016, -0.0001219741481, -0.0000933019976, -0.0000072855464, +0.0001003525264, +0.0001576968273, +0.0001433607521, +0.0000716803760, -0.0000143360752, -0.0000646298472, -0.0000716803760, -0.0000789659224, -0.0000430082256, -0.0000143360752, +0.0000000000000, +0.0000430082256, +0.0001076380729, +0.0001936545241, +0.0002869565217, +0.0003370152761, +0.0003226792009, +0.0002223266745, +0.0000573443008, -0.0001003525264, -0.0002223266745, -0.0002366627497, -0.0001003525264, +0.0000860164512, +0.0002007050529, +0.0001936545241, +0.0001076380729, +0.0000573443008, +0.0000789659224, +0.0001290246769, +0.0001936545241, +0.0002079905993, +0.0001649823737, +0.0000860164512, -0.0000216216216, -0.0001219741481, -0.0001433607521, -0.0001146886016, -0.0000502937720, +0.0000286721504, +0.0001076380729, +0.0001506462985, +0.0001433607521, +0.0001076380729, +0.0000502937720, -0.0000216216216, -0.0000573443008, -0.0000573443008, -0.0000216216216, +0.0000216216216, +0.0000573443008, +0.0000502937720, +0.0000216216216, -0.0000359576968, -0.0000860164512, -0.0000933019976, -0.0000716803760, -0.0000072855464, +0.0000216216216, +0.0000143360752, -0.0000143360752, -0.0000573443008, -0.0000646298472, +0.0000072855464, +0.0000933019976, +0.0001003525264, +0.0000502937720, +0.0000000000000, -0.0000430082256, -0.0000933019976, -0.0001576968273, -0.0001793184489, -0.0001506462985, -0.0000716803760, +0.0000143360752, +0.0000860164512, +0.0001290246769, +0.0001146886016, +0.0000286721504, -0.0000573443008, -0.0001363102233, -0.0001720329025, -0.0001506462985, -0.0000860164512, -0.0000286721504, +0.0000000000000, -0.0000286721504, -0.0000933019976, -0.0001146886016, -0.0000646298472, +0.0000000000000, +0.0000430082256, +0.0000286721504, +0.0000000000000, -0.0000143360752, -0.0000286721504, -0.0000286721504, -0.0000286721504, -0.0000359576968, -0.0000216216216, +0.0000143360752, +0.0000430082256, +0.0000286721504, -0.0000072855464, -0.0000430082256, -0.0000716803760, -0.0000716803760, -0.0000502937720, -0.0000430082256, -0.0000860164512, -0.0001720329025, -0.0002152761457, -0.0001793184489, -0.0000716803760, +0.0000430082256, +0.0001219741481, +0.0001363102233, +0.0000716803760, -0.0000359576968, -0.0001290246769, -0.0001793184489, -0.0001936545241, -0.0001649823737, -0.0001219741481, -0.0000933019976, -0.0000716803760, -0.0000143360752, +0.0000502937720, +0.0001003525264, +0.0000933019976, +0.0000216216216, -0.0000716803760, -0.0001290246769, -0.0001290246769, -0.0000716803760, -0.0000359576968, -0.0000789659224, -0.0001793184489, -0.0002653349001, -0.0002796709753, -0.0002079905993, -0.0000789659224, +0.0000573443008, +0.0001506462985, +0.0001720329025, +0.0001576968273, +0.0001363102233, +0.0001003525264, +0.0000502937720, -0.0000286721504, -0.0001219741481, -0.0001649823737, -0.0001433607521, -0.0000860164512, -0.0000072855464, +0.0000430082256, +0.0000430082256, -0.0000143360752, -0.0000860164512, -0.0001290246769, -0.0001290246769, -0.0000789659224, -0.0000286721504, +0.0000000000000, -0.0000216216216, -0.0000860164512, -0.0001433607521, -0.0001793184489, -0.0001649823737, -0.0000933019976, -0.0000072855464, +0.0000573443008, +0.0001003525264, +0.0001003525264, +0.0000430082256, -0.0000430082256, -0.0001576968273, -0.0002366627497, -0.0002653349001, -0.0002079905993, -0.0000789659224, +0.0000789659224, +0.0002079905993, +0.0002366627497, +0.0001720329025, +0.0000430082256, -0.0001003525264, -0.0002223266745, -0.0002940070505, -0.0003012925969, -0.0002366627497, -0.0001076380729, +0.0000072855464, +0.0000933019976, +0.0001219741481, +0.0001076380729, +0.0000502937720, -0.0000430082256, -0.0001433607521, -0.0001649823737, -0.0001003525264, +0.0000000000000, +0.0000646298472, +0.0000789659224, +0.0000716803760, +0.0000573443008, +0.0000000000000, -0.0000646298472, -0.0001219741481, -0.0001506462985, -0.0001649823737, -0.0001576968273, -0.0001290246769, -0.0000789659224, -0.0000216216216, +0.0000216216216, +0.0000216216216, -0.0000072855464, -0.0000502937720, -0.0000646298472, -0.0000143360752, +0.0000286721504, +0.0000359576968, +0.0000000000000, -0.0000216216216, -0.0000502937720, -0.0000789659224, -0.0000789659224, -0.0000716803760, -0.0000286721504, +0.0000143360752, +0.0000716803760, +0.0000933019976, +0.0000789659224, +0.0000430082256, +0.0000000000000, -0.0000143360752, -0.0000286721504, -0.0000286721504, -0.0000216216216, -0.0000286721504, -0.0000286721504, -0.0000216216216, -0.0000072855464, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000143360752, -0.0000143360752, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/10-fender-bassman-at4050.h000066400000000000000000001674601247673406200253500ustar00rootroot00000000000000float fender_bassman_at4050[] = { +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000075609756, +0.0000075609756, +0.0000075609756, +0.0000000000000, +0.0000000000000, -0.0000148780488, -0.0000297560976, -0.0000297560976, -0.0000224390244, +0.0000000000000, +0.0000224390244, +0.0000595121951, +0.0000743902439, +0.0000670731707, +0.0000373170732, +0.0000000000000, -0.0000373170732, -0.0000743902439, -0.0000819512195, -0.0000521951220, -0.0000075609756, +0.0000297560976, +0.0000743902439, +0.0000968292683, +0.0000819512195, +0.0000521951220, +0.0000000000000, -0.0000224390244, -0.0000446341463, -0.0000373170732, -0.0000075609756, +0.0000224390244, +0.0000670731707, +0.0001117073171, +0.0001339024390, +0.0001414634146, +0.0001339024390, +0.0001265853659, +0.0001041463415, +0.0000743902439, +0.0000521951220, +0.0000224390244, +0.0000075609756, +0.0000000000000, +0.0000075609756, +0.0000297560976, +0.0000595121951, +0.0000968292683, +0.0001265853659, +0.0001414634146, +0.0001414634146, +0.0001190243902, +0.0000968292683, +0.0000743902439, +0.0000670731707, +0.0000670731707, +0.0000892682927, +0.0001117073171, +0.0001339024390, +0.0001339024390, +0.0001265853659, +0.0000968292683, +0.0000521951220, +0.0000000000000, -0.0000148780488, -0.0000148780488, +0.0000000000000, +0.0000297560976, +0.0000743902439, +0.0001117073171, +0.0001041463415, +0.0000670731707, -0.0000148780488, -0.0001339024390, -0.0002456097561, -0.0003200000000, -0.0003275609756, -0.0002456097561, -0.0000968292683, +0.0000819512195, +0.0002680487805, +0.0003943902439, +0.0004317073171, +0.0003573170732, +0.0002009756098, +0.0000075609756, -0.0001636585366, -0.0002680487805, -0.0002829268293, -0.0002158536585, -0.0001041463415, +0.0000000000000, +0.0000521951220, +0.0000446341463, -0.0000224390244, -0.0001190243902, -0.0001860975610, -0.0001860975610, -0.0000892682927, +0.0000743902439, +0.0002753658537, +0.0004392682927, +0.0005136585366, +0.0004690243902, +0.0003051219512, +0.0000670731707, -0.0001785365854, -0.0003573170732, -0.0004243902439, -0.0003573170732, -0.0001785365854, +0.0000521951220, +0.0002829268293, +0.0004392682927, +0.0004912195122, +0.0004317073171, +0.0003126829268, +0.0001712195122, +0.0000595121951, +0.0000000000000, -0.0000075609756, +0.0000075609756, +0.0000373170732, +0.0000521951220, +0.0000446341463, +0.0000224390244, +0.0000224390244, +0.0000595121951, +0.0001487804878, +0.0002829268293, +0.0004243902439, +0.0005285365854, +0.0005507317073, +0.0004614634146, +0.0002902439024, +0.0000670731707, -0.0001265853659, -0.0002531707317, -0.0002531707317, -0.0001414634146, +0.0000521951220, +0.0002680487805, +0.0004317073171, +0.0005060975610, +0.0004690243902, +0.0003497560976, +0.0001860975610, +0.0000297560976, -0.0000670731707, -0.0001117073171, -0.0001041463415, -0.0000743902439, -0.0000446341463, -0.0000297560976, -0.0000373170732, -0.0000521951220, -0.0000521951220, -0.0000297560976, +0.0000224390244, +0.0000892682927, +0.0001487804878, +0.0001934146341, +0.0002082926829, +0.0001785365854, +0.0001190243902, +0.0000148780488, -0.0001041463415, -0.0002604878049, -0.0004092682927, -0.0005285365854, -0.0005731707317, -0.0005434146341, -0.0004243902439, -0.0002382926829, -0.0000224390244, +0.0001487804878, +0.0002680487805, +0.0002902439024, +0.0002234146341, +0.0001117073171, +0.0000075609756, -0.0000373170732, -0.0000075609756, +0.0000819512195, +0.0001860975610, +0.0002307317073, +0.0001712195122, -0.0000148780488, -0.0003051219512, -0.0006102439024, -0.0008336585366, -0.0009007317073, -0.0007814634146, -0.0004987804878, -0.0001339024390, +0.0002158536585, +0.0004987804878, +0.0006848780488, +0.0007665853659, +0.0007814634146, +0.0007741463415, +0.0007295121951, +0.0006402439024, +0.0004763414634, +0.0002158536585, -0.0001117073171, -0.0004541463415, -0.0007219512195, -0.0008409756098, -0.0007517073171, -0.0004763414634, -0.0001041463415, +0.0002531707317, +0.0005060975610, +0.0005880487805, +0.0004987804878, +0.0003126829268, +0.0001117073171, +0.0000000000000, +0.0000297560976, +0.0001785365854, +0.0003870731707, +0.0005656097561, +0.0006402439024, +0.0005731707317, +0.0004019512195, +0.0001860975610, +0.0000000000000, -0.0001339024390, -0.0001860975610, -0.0001860975610, -0.0001712195122, -0.0001487804878, -0.0001487804878, -0.0001414634146, -0.0001041463415, -0.0000595121951, -0.0000297560976, -0.0000670731707, -0.0002082926829, -0.0004690243902, -0.0007814634146, -0.0010346341463, -0.0011017073171, -0.0008858536585, -0.0003721951220, +0.0003200000000, +0.0010121951220, +0.0015036585366, +0.0015929268293, +0.0012653658537, +0.0005656097561, -0.0003200000000, -0.0012058536585, -0.0018607317073, -0.0022553658537, -0.0023000000000, -0.0020765853659, -0.0017863414634, -0.0011834146341, -0.0007665853659, -0.0003573170732, +0.0001041463415, +0.0005060975610, +0.0006402439024, +0.0005804878049, +0.0002604878049, -0.0001563414634, -0.0006700000000, -0.0010197560976, -0.0011909756098, -0.0011017073171, -0.0008187804878, -0.0004541463415, -0.0002082926829, -0.0001860975610, -0.0005136585366, -0.0009526829268, -0.0014587804878, -0.0017343902439, -0.0017046341463, -0.0012429268293, -0.0006921951220, -0.0002456097561, -0.0001414634146, -0.0004690243902, -0.0011760975610, -0.0021734146341, -0.0030070731707, -0.0038109756098, -0.0043914634146, -0.0046446341463, -0.0060141463415, -0.0069968292683, -0.0061109756098, -0.0112765853659, -0.0028880487805, -0.0133160975610, -0.0158468292683, +0.0111129268293, +0.0523563414634, +0.0271829268293, -0.0940314634146, -0.1121929268293, -0.0270787804878, -0.0056346341463, +0.0788768292683, +0.2205675609756, +0.2438875609756, +0.2013341463415, +0.0987726829268, -0.0169558536585, -0.0634765853659, -0.1072729268293, -0.1181478048780, -0.0854714634146, -0.0759143902439, -0.0531675609756, -0.0438039024390, -0.0118051219512, +0.0427692682927, +0.0578568292683, +0.0620697560976, +0.0631565853659, +0.0263492682927, +0.0067734146341, +0.0035726829268, -0.0035280487805, +0.0041309756098, -0.0034239024390, -0.0248382926829, -0.0334651219512, -0.0292895121951, -0.0248382926829, -0.0094009756098, +0.0009526829268, +0.0068702439024, +0.0107182926829, +0.0067360975610, +0.0072795121951, +0.0015853658537, -0.0085970731707, -0.0055304878049, -0.0116785365854, -0.0262004878049, -0.0176853658537, -0.0189507317073, -0.0246968292683, -0.0144697560976, -0.0078900000000, -0.0042873170732, -0.0071158536585, -0.0094231707317, -0.0066841463415, -0.0096539024390, -0.0071678048780, +0.0035356097561, +0.0047041463415, +0.0074358536585, +0.0050241463415, +0.0031187804878, +0.0093934146341, +0.0041160975610, +0.0022851219512, +0.0048009756098, -0.0053741463415, -0.0188985365854, -0.0271607317073, -0.0242131707317, -0.0158914634146, -0.0160329268293, -0.0143953658537, -0.0037663414634, +0.0031409756098, +0.0113734146341, +0.0114775609756, +0.0096168292683, +0.0090882926829, -0.0007592682927, -0.0072573170732, -0.0109268292683, -0.0189953658537, -0.0182658536585, -0.0130407317073, -0.0115148780488, -0.0068329268293, -0.0076814634146, -0.0087534146341, -0.0070117073171, -0.0061853658537, -0.0031782926829, +0.0008485365854, -0.0012653658537, -0.0034314634146, -0.0052773170732, -0.0105768292683, -0.0125419512195, -0.0067809756098, +0.0012504878049, +0.0084629268293, +0.0103982926829, +0.0069073170732, +0.0015407317073, -0.0062821951220, -0.0092668292683, -0.0043170731707, +0.0008112195122, +0.0006251219512, -0.0027317073171, -0.0044512195122, -0.0069668292683, -0.0116860975610, -0.0127578048780, -0.0122963414634, -0.0119912195122, -0.0087012195122, -0.0048829268293, -0.0025680487805, -0.0023892682927, -0.0017641463415, +0.0001934146341, +0.0027019512195, +0.0068775609756, +0.0097358536585, +0.0112617073171, +0.0144548780488, +0.0131673170732, +0.0073019512195, +0.0018904878049, -0.0044809756098, -0.0090585365854, -0.0136882926829, -0.0167921951220, -0.0142241463415, -0.0103536585366, -0.0067063414634, -0.0028136585366, -0.0022329268293, -0.0010270731707, +0.0002531707317, +0.0000743902439, +0.0016673170732, +0.0036770731707, +0.0049348780488, +0.0060960975610, +0.0060663414634, +0.0067436585366, +0.0074582926829, +0.0059770731707, +0.0046968292683, +0.0042278048780, +0.0033792682927, +0.0030295121951, +0.0032378048780, +0.0029624390244, +0.0029848780488, +0.0042724390244, +0.0060812195122, +0.0066246341463, +0.0060068292683, +0.0058653658537, +0.0064458536585, +0.0062524390244, +0.0051434146341, +0.0028804878049, +0.0017195121951, +0.0030814634146, +0.0039375609756, +0.0037141463415, +0.0037960975610, +0.0044360975610, +0.0045626829268, +0.0029400000000, +0.0006251219512, -0.0016151219512, -0.0015929268293, +0.0024041463415, +0.0082621951220, +0.0125865853659, +0.0135914634146, +0.0116041463415, +0.0093041463415, +0.0064160975610, +0.0024563414634, -0.0001712195122, -0.0003795121951, -0.0000148780488, +0.0014736585366, +0.0040417073171, +0.0056346341463, +0.0076814634146, +0.0094380487805, +0.0103239024390, +0.0094456097561, +0.0069743902439, +0.0068107317073, +0.0081429268293, +0.0061258536585, +0.0040565853659, +0.0041682926829, +0.0057239024390, +0.0076143902439, +0.0057165853659, +0.0016895121951, -0.0002829268293, -0.0009007317073, +0.0006029268293, +0.0035951219512, +0.0057685365854, +0.0080612195122, +0.0092446341463, +0.0073985365854, +0.0045775609756, +0.0025158536585, +0.0005285365854, -0.0008187804878, -0.0009080487805, -0.0001934146341, +0.0021139024390, +0.0047934146341, +0.0066990243902, +0.0076814634146, +0.0064309756098, +0.0041012195122, +0.0027839024390, +0.0033717073171, +0.0041385365854, +0.0036026829268, +0.0042278048780, +0.0050092682927, +0.0030368292683, +0.0007295121951, -0.0008039024390, -0.0019873170732, -0.0030295121951, -0.0038631707317, -0.0035356097561, -0.0015556097561, +0.0016895121951, +0.0046743902439, +0.0056792682927, +0.0060217073171, +0.0066021951220, +0.0069221951220, +0.0057165853659, +0.0025231707317, -0.0009304878049, -0.0036100000000, -0.0051582926829, -0.0047041463415, -0.0021287804878, +0.0001712195122, +0.0007517073171, +0.0013621951220, +0.0018682926829, +0.0012131707317, +0.0010270731707, +0.0008336585366, -0.0002902439024, -0.0005804878049, -0.0003051219512, -0.0000075609756, +0.0004839024390, -0.0000373170732, -0.0007592682927, -0.0011239024390, -0.0013621951220, -0.0019575609756, -0.0033270731707, -0.0036992682927, -0.0025158536585, -0.0015853658537, -0.0010792682927, +0.0002680487805, +0.0010568292683, +0.0005209756098, +0.0000670731707, -0.0013324390244, -0.0026721951220, -0.0031409756098, -0.0039673170732, -0.0042053658537, -0.0045329268293, -0.0057165853659, -0.0054634146341, -0.0046446341463, -0.0027690243902, +0.0000968292683, +0.0020990243902, +0.0043692682927, +0.0052251219512, +0.0027763414634, -0.0006326829268, -0.0040268292683, -0.0065426829268, -0.0069446341463, -0.0065278048780, -0.0046743902439, -0.0016002439024, +0.0013546341463, +0.0024636585366, +0.0011612195122, -0.0008709756098, -0.0023670731707, -0.0038853658537, -0.0040641463415, -0.0028358536585, -0.0028285365854, -0.0025531707317, -0.0014812195122, -0.0007814634146, +0.0001712195122, +0.0005507317073, +0.0006178048780, -0.0002753658537, -0.0027912195122, -0.0035802439024, -0.0030665853659, -0.0034982926829, -0.0031858536585, -0.0026497560976, -0.0011760975610, +0.0012280487805, +0.0015929268293, +0.0013919512195, -0.0002531707317, -0.0025456097561, -0.0024934146341, -0.0028731707317, -0.0038780487805, -0.0035207317073, -0.0037217073171, -0.0029029268293, -0.0014514634146, -0.0019651219512, -0.0017195121951, -0.0009007317073, -0.0008187804878, -0.0000148780488, +0.0002009756098, -0.0005582926829, -0.0002158536585, -0.0000373170732, -0.0000521951220, +0.0005656097561, +0.0009900000000, +0.0013770731707, +0.0009824390244, +0.0008782926829, +0.0017863414634, +0.0013992682927, +0.0004912195122, -0.0002604878049, -0.0012802439024, -0.0018607317073, -0.0023819512195, -0.0020914634146, -0.0017119512195, -0.0021512195122, -0.0011017073171, +0.0007368292683, +0.0017268292683, +0.0022851219512, +0.0015482926829, +0.0003573170732, -0.0003943902439, -0.0010419512195, -0.0009229268293, -0.0008336585366, -0.0012653658537, -0.0012653658537, -0.0012802439024, -0.0011909756098, -0.0003721951220, +0.0005731707317, +0.0012429268293, +0.0016375609756, +0.0017268292683, +0.0018012195122, +0.0015036585366, +0.0008782926829, +0.0008260975610, +0.0006402439024, +0.0005285365854, +0.0012356097561, +0.0015185365854, +0.0010419512195, +0.0002753658537, -0.0007443902439, -0.0011017073171, -0.0009602439024, -0.0013770731707, -0.0018756097561, -0.0018012195122, -0.0013992682927, -0.0006997560976, -0.0000373170732, +0.0005953658537, +0.0013026829268, +0.0013175609756, +0.0012504878049, +0.0013843902439, +0.0007517073171, +0.0001041463415, -0.0004690243902, -0.0005880487805, +0.0007592682927, +0.0018607317073, +0.0023670731707, +0.0026424390244, +0.0021436585366, +0.0020319512195, +0.0016300000000, +0.0005656097561, -0.0000968292683, -0.0010868292683, -0.0013992682927, -0.0006402439024, +0.0003870731707, +0.0012504878049, +0.0011536585366, +0.0010719512195, +0.0007443902439, -0.0009229268293, -0.0014439024390, -0.0012356097561, -0.0019651219512, -0.0022478048780, -0.0017417073171, -0.0010197560976, -0.0005136585366, -0.0003275609756, +0.0001265853659, +0.0009602439024, +0.0014290243902, +0.0022256097561, +0.0031039024390, +0.0027465853659, +0.0021660975610, +0.0012951219512, -0.0002604878049, -0.0010792682927, -0.0013324390244, -0.0013397560976, -0.0008336585366, -0.0007517073171, -0.0007665853659, -0.0006624390244, -0.0009751219512, -0.0004541463415, +0.0003348780488, +0.0006029268293, +0.0010419512195, +0.0013621951220, +0.0011387804878, +0.0001117073171, -0.0012280487805, -0.0020914634146, -0.0022775609756, -0.0020617073171, -0.0015258536585, -0.0006251219512, +0.0001190243902, +0.0004317073171, +0.0004392682927, +0.0002009756098, -0.0003126829268, -0.0007295121951, -0.0007665853659, -0.0005953658537, -0.0002082926829, -0.0001712195122, -0.0004763414634, -0.0003275609756, -0.0004614634146, -0.0007592682927, -0.0006773170732, -0.0011834146341, -0.0018458536585, -0.0021660975610, -0.0021882926829, -0.0012729268293, -0.0007295121951, -0.0010495121951, -0.0010568292683, -0.0012878048780, -0.0013546341463, -0.0011314634146, -0.0013324390244, -0.0012802439024, -0.0012356097561, -0.0017939024390, -0.0021734146341, -0.0024414634146, -0.0023297560976, -0.0015334146341, -0.0006326829268, +0.0003721951220, +0.0010868292683, +0.0008931707317, +0.0008039024390, +0.0009973170732, +0.0004839024390, -0.0006848780488, -0.0017343902439, -0.0022180487805, -0.0027614634146, -0.0032378048780, -0.0031558536585, -0.0031707317073, -0.0027241463415, -0.0015258536585, -0.0007963414634, -0.0005434146341, -0.0010346341463, -0.0016524390244, -0.0015929268293, -0.0016821951220, -0.0018236585366, -0.0016448780488, -0.0019129268293, -0.0018534146341, -0.0014365853659, -0.0012951219512, -0.0009080487805, -0.0005507317073, -0.0004690243902, -0.0002680487805, -0.0002234146341, +0.0000743902439, +0.0005731707317, +0.0003573170732, -0.0001041463415, -0.0007368292683, -0.0011387804878, -0.0006178048780, -0.0002604878049, -0.0004392682927, -0.0005953658537, -0.0011612195122, -0.0014217073171, -0.0012131707317, -0.0015185365854, -0.0012356097561, -0.0005434146341, -0.0004392682927, -0.0002753658537, -0.0002009756098, -0.0002307317073, -0.0003870731707, -0.0007517073171, -0.0008634146341, -0.0011612195122, -0.0014887804878, -0.0006178048780, +0.0003573170732, +0.0004019512195, +0.0003497560976, -0.0000148780488, -0.0006773170732, -0.0007592682927, -0.0006326829268, -0.0007295121951, -0.0007741463415, -0.0006551219512, -0.0005209756098, -0.0004465853659, -0.0005285365854, -0.0003051219512, +0.0002009756098, +0.0001265853659, -0.0001712195122, -0.0006102439024, -0.0012207317073, -0.0013100000000, -0.0008485365854, -0.0004168292683, -0.0002234146341, -0.0006402439024, -0.0011090243902, -0.0016226829268, -0.0021363414634, -0.0019948780488, -0.0017790243902, -0.0015185365854, -0.0006624390244, +0.0000373170732, -0.0000075609756, -0.0002531707317, -0.0003573170732, -0.0003646341463, -0.0001563414634, +0.0002531707317, +0.0006848780488, +0.0010719512195, +0.0012504878049, +0.0010197560976, +0.0000670731707, -0.0010048780488, -0.0012729268293, -0.0010121951220, -0.0007517073171, -0.0004763414634, -0.0006848780488, -0.0009675609756, -0.0007814634146, -0.0004614634146, -0.0000148780488, +0.0000297560976, -0.0002680487805, -0.0003721951220, -0.0004541463415, -0.0007295121951, -0.0008409756098, -0.0004019512195, +0.0003348780488, +0.0003573170732, +0.0002829268293, +0.0006997560976, +0.0005656097561, +0.0000595121951, -0.0007517073171, -0.0015853658537, -0.0016970731707, -0.0010719512195, +0.0001487804878, +0.0010346341463, +0.0013992682927, +0.0018904878049, +0.0015036585366, +0.0004019512195, -0.0005434146341, -0.0010495121951, -0.0005656097561, -0.0000819512195, +0.0002604878049, +0.0008709756098, +0.0005060975610, -0.0001563414634, -0.0001041463415, -0.0000670731707, -0.0000743902439, +0.0002307317073, +0.0006624390244, +0.0008260975610, +0.0002307317073, -0.0001712195122, +0.0000075609756, -0.0000373170732, +0.0001117073171, +0.0007890243902, +0.0009973170732, +0.0008782926829, +0.0010121951220, +0.0011314634146, +0.0012653658537, +0.0016821951220, +0.0020468292683, +0.0018309756098, +0.0009602439024, +0.0000373170732, -0.0004092682927, -0.0004987804878, -0.0002531707317, -0.0001934146341, -0.0004763414634, -0.0002902439024, +0.0004243902439, +0.0009751219512, +0.0011909756098, +0.0010719512195, +0.0009751219512, +0.0009378048780, +0.0007963414634, +0.0005804878049, +0.0003275609756, +0.0006102439024, +0.0010941463415, +0.0011909756098, +0.0012878048780, +0.0012653658537, +0.0010719512195, +0.0012578048780, +0.0014217073171, +0.0014439024390, +0.0013026829268, +0.0010048780488, +0.0009304878049, +0.0010121951220, +0.0010792682927, +0.0013695121951, +0.0018980487805, +0.0024860975610, +0.0025231707317, +0.0015704878049, +0.0003573170732, -0.0002978048780, -0.0005434146341, -0.0007219512195, -0.0003275609756, +0.0001712195122, +0.0004614634146, +0.0008485365854, +0.0010792682927, +0.0012131707317, +0.0012578048780, +0.0010495121951, +0.0010568292683, +0.0010568292683, +0.0009751219512, +0.0009824390244, +0.0011165853659, +0.0015853658537, +0.0017939024390, +0.0016597560976, +0.0014587804878, +0.0009751219512, +0.0006624390244, +0.0007368292683, +0.0010643902439, +0.0016746341463, +0.0018087804878, +0.0016151219512, +0.0015185365854, +0.0009973170732, +0.0005136585366, +0.0005507317073, +0.0006251219512, +0.0007963414634, +0.0009824390244, +0.0006700000000, +0.0001190243902, -0.0004317073171, -0.0006326829268, -0.0002307317073, +0.0004019512195, +0.0010868292683, +0.0014736585366, +0.0013397560976, +0.0012429268293, +0.0011239024390, +0.0006624390244, +0.0002902439024, +0.0002680487805, +0.0006102439024, +0.0009675609756, +0.0011612195122, +0.0012729268293, +0.0014587804878, +0.0015109756098, +0.0010197560976, +0.0003200000000, +0.0000000000000, -0.0000743902439, +0.0001041463415, +0.0003870731707, +0.0002680487805, +0.0001636585366, +0.0002680487805, +0.0004690243902, +0.0008336585366, +0.0007814634146, +0.0003795121951, +0.0002829268293, +0.0003497560976, +0.0001636585366, -0.0001563414634, -0.0001712195122, +0.0000000000000, -0.0000670731707, -0.0003348780488, -0.0005358536585, -0.0002082926829, +0.0004614634146, +0.0007592682927, +0.0005582926829, +0.0002753658537, +0.0002307317073, +0.0001860975610, -0.0001860975610, -0.0005731707317, -0.0008112195122, -0.0005582926829, +0.0004912195122, +0.0013546341463, +0.0015407317073, +0.0010121951220, -0.0000670731707, -0.0010346341463, -0.0014663414634, -0.0015185365854, -0.0011536585366, -0.0004839024390, +0.0002531707317, +0.0007219512195, +0.0006624390244, +0.0006251219512, +0.0007592682927, +0.0006029268293, +0.0000968292683, -0.0005507317073, -0.0009602439024, -0.0006997560976, -0.0001265853659, +0.0002158536585, +0.0003573170732, +0.0004763414634, +0.0004839024390, +0.0002829268293, +0.0002382926829, +0.0001636585366, -0.0001414634146, -0.0000148780488, +0.0001860975610, -0.0003573170732, -0.0004763414634, -0.0003943902439, -0.0009080487805, -0.0008409756098, -0.0007219512195, -0.0003795121951, +0.0000148780488, -0.0002009756098, +0.0002234146341, +0.0001117073171, -0.0007517073171, -0.0004690243902, -0.0003721951220, -0.0009304878049, -0.0005804878049, -0.0004168292683, -0.0002829268293, +0.0001712195122, +0.0003348780488, +0.0004168292683, +0.0002978048780, +0.0007368292683, +0.0010419512195, +0.0004763414634, +0.0002009756098, +0.0001190243902, -0.0002829268293, +0.0000743902439, +0.0004392682927, +0.0001636585366, -0.0003200000000, -0.0007890243902, -0.0007146341463, -0.0001636585366, +0.0005285365854, +0.0012280487805, +0.0016821951220, +0.0014439024390, +0.0008039024390, +0.0001712195122, -0.0000819512195, -0.0002158536585, -0.0000148780488, +0.0006102439024, +0.0007368292683, +0.0006251219512, +0.0004690243902, -0.0000521951220, -0.0003051219512, -0.0001265853659, -0.0000670731707, +0.0003126829268, +0.0011463414634, +0.0016078048780, +0.0015334146341, +0.0011536585366, +0.0006551219512, +0.0002978048780, +0.0000595121951, -0.0000521951220, +0.0001785365854, +0.0004168292683, +0.0006102439024, +0.0008634146341, +0.0008709756098, +0.0010197560976, +0.0011982926829, +0.0008709756098, +0.0006402439024, +0.0005136585366, +0.0000670731707, -0.0001934146341, +0.0000000000000, +0.0003275609756, +0.0006102439024, +0.0007146341463, +0.0008634146341, +0.0010419512195, +0.0011387804878, +0.0010346341463, +0.0007741463415, +0.0004541463415, +0.0001041463415, -0.0001117073171, -0.0001860975610, -0.0001487804878, +0.0000000000000, +0.0002456097561, +0.0008409756098, +0.0013473170732, +0.0014290243902, +0.0014439024390, +0.0013324390244, +0.0010197560976, +0.0005434146341, +0.0002382926829, +0.0005582926829, +0.0010121951220, +0.0011165853659, +0.0011165853659, +0.0008560975610, +0.0005285365854, +0.0003721951220, +0.0003497560976, +0.0002978048780, +0.0002009756098, +0.0001563414634, +0.0002680487805, +0.0006251219512, +0.0008112195122, +0.0006773170732, +0.0005656097561, +0.0005136585366, +0.0003646341463, +0.0003348780488, +0.0003573170732, +0.0007741463415, +0.0012729268293, +0.0013175609756, +0.0011834146341, +0.0007741463415, +0.0002307317073, -0.0000224390244, -0.0002382926829, -0.0003721951220, -0.0001636585366, +0.0000000000000, -0.0000148780488, -0.0000892682927, -0.0002531707317, -0.0002753658537, -0.0001265853659, +0.0000000000000, +0.0001117073171, +0.0000000000000, -0.0002978048780, -0.0003573170732, -0.0003721951220, -0.0004541463415, -0.0002158536585, +0.0000595121951, +0.0002382926829, +0.0002082926829, +0.0000000000000, -0.0001414634146, -0.0001339024390, +0.0000521951220, +0.0001785365854, +0.0000373170732, -0.0001339024390, -0.0002753658537, -0.0004987804878, -0.0005209756098, -0.0004168292683, -0.0004317073171, -0.0004690243902, -0.0003424390244, -0.0001934146341, -0.0001339024390, -0.0000670731707, -0.0002158536585, -0.0005285365854, -0.0007665853659, -0.0006921951220, -0.0003348780488, +0.0000446341463, +0.0002680487805, +0.0003126829268, +0.0001636585366, -0.0002307317073, -0.0005358536585, -0.0005434146341, -0.0004019512195, -0.0003126829268, -0.0002978048780, -0.0005209756098, -0.0008782926829, -0.0009973170732, -0.0008560975610, -0.0006029268293, -0.0004392682927, -0.0002978048780, -0.0001339024390, -0.0000224390244, +0.0001041463415, +0.0001190243902, -0.0002978048780, -0.0006251219512, -0.0005358536585, -0.0001934146341, +0.0000743902439, +0.0001785365854, +0.0001860975610, +0.0000670731707, -0.0000968292683, -0.0002382926829, -0.0004019512195, -0.0004614634146, -0.0002009756098, +0.0001934146341, +0.0002902439024, +0.0000075609756, -0.0002158536585, -0.0004987804878, -0.0008112195122, -0.0008039024390, -0.0006624390244, -0.0004912195122, -0.0004243902439, -0.0006997560976, -0.0008187804878, -0.0006251219512, -0.0003646341463, -0.0000892682927, +0.0000224390244, +0.0000297560976, +0.0000595121951, -0.0000892682927, -0.0002829268293, -0.0004763414634, -0.0006029268293, -0.0003646341463, -0.0002531707317, -0.0003424390244, -0.0001636585366, -0.0001339024390, -0.0002082926829, -0.0002456097561, -0.0005656097561, -0.0007741463415, -0.0008409756098, -0.0008560975610, -0.0006773170732, -0.0007443902439, -0.0009007317073, -0.0005731707317, -0.0004168292683, -0.0004987804878, -0.0005358536585, -0.0006624390244, -0.0006326829268, -0.0005880487805, -0.0005731707317, -0.0004392682927, -0.0004987804878, -0.0006029268293, -0.0005656097561, -0.0006178048780, -0.0006624390244, -0.0005953658537, -0.0004614634146, -0.0002382926829, -0.0001487804878, -0.0002382926829, -0.0004465853659, -0.0006997560976, -0.0006551219512, -0.0004614634146, -0.0004690243902, -0.0005060975610, -0.0005434146341, -0.0006997560976, -0.0007741463415, -0.0006029268293, -0.0004465853659, -0.0005507317073, -0.0005582926829, -0.0005434146341, -0.0006102439024, -0.0005582926829, -0.0005582926829, -0.0007219512195, -0.0008112195122, -0.0008260975610, -0.0006326829268, -0.0003200000000, -0.0001117073171, -0.0000148780488, -0.0001487804878, -0.0002234146341, -0.0001487804878, -0.0002978048780, -0.0005285365854, -0.0007368292683, -0.0009304878049, -0.0009900000000, -0.0011165853659, -0.0010792682927, -0.0007146341463, -0.0005136585366, -0.0004839024390, -0.0004614634146, -0.0006997560976, -0.0008336585366, -0.0008112195122, -0.0006102439024, -0.0001414634146, +0.0000521951220, -0.0001117073171, -0.0002382926829, -0.0004317073171, -0.0007517073171, -0.0008336585366, -0.0007368292683, -0.0005434146341, -0.0004168292683, -0.0004092682927, -0.0004317073171, -0.0005880487805, -0.0007368292683, -0.0008260975610, -0.0009304878049, -0.0007665853659, -0.0004392682927, -0.0003870731707, -0.0004168292683, -0.0003870731707, -0.0004987804878, -0.0005804878049, -0.0005731707317, -0.0004839024390, -0.0003870731707, -0.0003870731707, -0.0004243902439, -0.0004912195122, -0.0006475609756, -0.0006624390244, -0.0006402439024, -0.0007295121951, -0.0006921951220, -0.0005582926829, -0.0003348780488, -0.0001265853659, -0.0000446341463, +0.0000595121951, +0.0001265853659, -0.0000670731707, -0.0003348780488, -0.0006178048780, -0.0007295121951, -0.0005953658537, -0.0005582926829, -0.0007368292683, -0.0009751219512, -0.0010419512195, -0.0008187804878, -0.0005880487805, -0.0004614634146, -0.0003646341463, -0.0004465853659, -0.0005582926829, -0.0005507317073, -0.0004092682927, -0.0001117073171, +0.0000224390244, -0.0001487804878, -0.0003870731707, -0.0006700000000, -0.0006773170732, -0.0003497560976, -0.0001339024390, -0.0000224390244, -0.0001636585366, -0.0004168292683, -0.0004317073171, -0.0003573170732, -0.0002829268293, -0.0000819512195, +0.0000373170732, -0.0000075609756, -0.0002234146341, -0.0004839024390, -0.0006251219512, -0.0008260975610, -0.0008336585366, -0.0006029268293, -0.0004019512195, -0.0002753658537, -0.0001712195122, -0.0001487804878, -0.0001636585366, -0.0001636585366, -0.0000743902439, +0.0000224390244, +0.0000892682927, +0.0002531707317, +0.0003275609756, +0.0002829268293, +0.0002158536585, +0.0000892682927, -0.0001190243902, -0.0004690243902, -0.0008409756098, -0.0010495121951, -0.0009751219512, -0.0006475609756, -0.0002082926829, +0.0002680487805, +0.0006178048780, +0.0005434146341, +0.0002604878049, -0.0000892682927, -0.0005060975610, -0.0007592682927, -0.0007963414634, -0.0006773170732, -0.0005358536585, -0.0004317073171, -0.0002307317073, -0.0000224390244, +0.0000521951220, +0.0002009756098, +0.0002753658537, +0.0001785365854, +0.0001860975610, +0.0001414634146, -0.0001563414634, -0.0003573170732, -0.0003721951220, -0.0004614634146, -0.0004317073171, -0.0001563414634, +0.0001487804878, +0.0004317073171, +0.0004839024390, +0.0003200000000, +0.0000595121951, -0.0003200000000, -0.0004912195122, -0.0003870731707, -0.0002604878049, -0.0000743902439, +0.0000595121951, +0.0000743902439, +0.0001563414634, +0.0002604878049, +0.0003573170732, +0.0003497560976, +0.0002158536585, +0.0001860975610, +0.0001265853659, +0.0000670731707, +0.0002604878049, +0.0005136585366, +0.0006326829268, +0.0005582926829, +0.0004168292683, +0.0003348780488, +0.0002456097561, +0.0002604878049, +0.0003573170732, +0.0003424390244, +0.0002082926829, +0.0000521951220, -0.0000595121951, -0.0000968292683, -0.0000595121951, +0.0000595121951, +0.0002531707317, +0.0003943902439, +0.0004019512195, +0.0003721951220, +0.0004168292683, +0.0003870731707, +0.0003348780488, +0.0003348780488, +0.0002531707317, +0.0002234146341, +0.0003870731707, +0.0005953658537, +0.0006997560976, +0.0006326829268, +0.0003943902439, +0.0001487804878, +0.0000521951220, +0.0001117073171, +0.0002009756098, +0.0002680487805, +0.0003275609756, +0.0004392682927, +0.0005731707317, +0.0006997560976, +0.0006251219512, +0.0003348780488, +0.0001265853659, +0.0001190243902, +0.0001487804878, +0.0001785365854, +0.0002082926829, +0.0002604878049, +0.0003943902439, +0.0005209756098, +0.0006029268293, +0.0005434146341, +0.0003721951220, +0.0002978048780, +0.0002604878049, +0.0002009756098, +0.0001636585366, +0.0001563414634, +0.0000819512195, +0.0000000000000, +0.0000595121951, +0.0001487804878, +0.0001041463415, +0.0000521951220, +0.0001487804878, +0.0003646341463, +0.0005582926829, +0.0005434146341, +0.0002829268293, -0.0000819512195, -0.0002753658537, -0.0001339024390, +0.0001414634146, +0.0003126829268, +0.0003870731707, +0.0004168292683, +0.0004019512195, +0.0003870731707, +0.0003573170732, +0.0003573170732, +0.0004392682927, +0.0004465853659, +0.0002456097561, +0.0000595121951, +0.0000075609756, -0.0000373170732, +0.0001414634146, +0.0004465853659, +0.0005582926829, +0.0005582926829, +0.0003721951220, +0.0001563414634, +0.0001563414634, +0.0002604878049, +0.0003573170732, +0.0004392682927, +0.0003721951220, +0.0003424390244, +0.0004839024390, +0.0005136585366, +0.0003424390244, +0.0001563414634, +0.0001265853659, +0.0002531707317, +0.0005731707317, +0.0008409756098, +0.0007890243902, +0.0005507317073, +0.0003573170732, +0.0001563414634, +0.0000075609756, -0.0000075609756, +0.0000819512195, +0.0003051219512, +0.0004465853659, +0.0004168292683, +0.0004839024390, +0.0006402439024, +0.0006402439024, +0.0004987804878, +0.0002978048780, +0.0000968292683, +0.0000595121951, +0.0001563414634, +0.0002531707317, +0.0002902439024, +0.0003424390244, +0.0003573170732, +0.0003126829268, +0.0002753658537, +0.0002009756098, +0.0002158536585, +0.0002456097561, +0.0001190243902, -0.0000148780488, -0.0001117073171, -0.0000892682927, +0.0001636585366, +0.0004019512195, +0.0005880487805, +0.0006700000000, +0.0004019512195, +0.0001712195122, +0.0001563414634, +0.0000595121951, -0.0000595121951, +0.0000000000000, +0.0001785365854, +0.0002978048780, +0.0002082926829, -0.0000148780488, -0.0001934146341, -0.0001636585366, +0.0001563414634, +0.0006475609756, +0.0010346341463, +0.0011239024390, +0.0010643902439, +0.0008858536585, +0.0005953658537, +0.0002902439024, +0.0000373170732, +0.0000595121951, +0.0002234146341, +0.0002753658537, +0.0003424390244, +0.0003795121951, +0.0002978048780, +0.0002158536585, +0.0001190243902, +0.0000819512195, +0.0001041463415, +0.0000224390244, +0.0000892682927, +0.0004168292683, +0.0006848780488, +0.0007295121951, +0.0004912195122, +0.0002082926829, +0.0002009756098, +0.0003646341463, +0.0005804878049, +0.0007741463415, +0.0006551219512, +0.0003424390244, +0.0002158536585, +0.0002456097561, +0.0003424390244, +0.0004690243902, +0.0005804878049, +0.0007368292683, +0.0008187804878, +0.0007295121951, +0.0005507317073, +0.0004168292683, +0.0003424390244, +0.0001636585366, +0.0000148780488, +0.0001414634146, +0.0003200000000, +0.0004243902439, +0.0006251219512, +0.0008336585366, +0.0007741463415, +0.0005060975610, +0.0003051219512, +0.0001712195122, +0.0000968292683, +0.0000373170732, +0.0000446341463, +0.0002158536585, +0.0003424390244, +0.0002382926829, +0.0000297560976, -0.0002082926829, -0.0002978048780, -0.0001785365854, -0.0000224390244, +0.0002009756098, +0.0003424390244, +0.0004168292683, +0.0006624390244, +0.0007741463415, +0.0005507317073, +0.0002829268293, +0.0000819512195, -0.0000373170732, -0.0001117073171, -0.0001339024390, -0.0000521951220, -0.0000224390244, -0.0000743902439, -0.0001190243902, -0.0000968292683, +0.0000670731707, +0.0003200000000, +0.0004019512195, +0.0003497560976, +0.0002604878049, +0.0001636585366, +0.0001041463415, +0.0000373170732, +0.0000075609756, +0.0000373170732, +0.0001339024390, +0.0003497560976, +0.0005804878049, +0.0006251219512, +0.0004317073171, +0.0001636585366, +0.0000297560976, -0.0000743902439, -0.0001487804878, -0.0000595121951, +0.0000892682927, +0.0002829268293, +0.0003424390244, +0.0002158536585, +0.0000968292683, -0.0000148780488, -0.0001339024390, -0.0000819512195, -0.0000224390244, -0.0000224390244, +0.0000968292683, +0.0002009756098, +0.0002307317073, +0.0003051219512, +0.0003943902439, +0.0004392682927, +0.0004317073171, +0.0003424390244, +0.0002829268293, +0.0000892682927, -0.0001041463415, -0.0000521951220, +0.0000000000000, +0.0000373170732, +0.0001636585366, +0.0002753658537, +0.0003943902439, +0.0004839024390, +0.0004392682927, +0.0002753658537, +0.0000968292683, +0.0001487804878, +0.0002753658537, +0.0001785365854, +0.0000148780488, -0.0001563414634, -0.0002456097561, -0.0002234146341, -0.0002753658537, -0.0002978048780, -0.0000892682927, +0.0001785365854, +0.0003126829268, +0.0003200000000, +0.0002456097561, +0.0001636585366, +0.0000595121951, +0.0000224390244, +0.0001265853659, +0.0001265853659, +0.0000373170732, +0.0000000000000, -0.0001041463415, -0.0002456097561, -0.0002753658537, -0.0003051219512, -0.0003051219512, -0.0001414634146, +0.0000743902439, +0.0002531707317, +0.0003573170732, +0.0002456097561, +0.0000075609756, -0.0001636585366, -0.0003943902439, -0.0005953658537, -0.0005507317073, -0.0002902439024, -0.0000148780488, +0.0001117073171, +0.0001785365854, +0.0002234146341, +0.0001339024390, -0.0000075609756, -0.0000446341463, -0.0000446341463, -0.0000670731707, -0.0001117073171, -0.0001563414634, -0.0002829268293, -0.0004019512195, -0.0003200000000, -0.0001860975610, -0.0001785365854, -0.0002604878049, -0.0002978048780, -0.0002978048780, -0.0003348780488, -0.0002753658537, -0.0000968292683, +0.0000000000000, +0.0000968292683, +0.0002531707317, +0.0002680487805, +0.0001117073171, -0.0001190243902, -0.0003275609756, -0.0004317073171, -0.0004392682927, -0.0003424390244, -0.0003200000000, -0.0003646341463, -0.0002978048780, -0.0002158536585, -0.0001636585366, -0.0001041463415, -0.0001414634146, -0.0002307317073, -0.0002382926829, -0.0003051219512, -0.0003721951220, -0.0003051219512, -0.0002382926829, -0.0001785365854, -0.0001117073171, -0.0000892682927, -0.0000968292683, -0.0001265853659, -0.0000819512195, -0.0000373170732, -0.0000670731707, -0.0000297560976, -0.0000819512195, -0.0003795121951, -0.0007070731707, -0.0009007317073, -0.0008858536585, -0.0006475609756, -0.0004690243902, -0.0002902439024, -0.0001414634146, -0.0001117073171, -0.0000075609756, +0.0000670731707, -0.0000148780488, -0.0001339024390, -0.0001860975610, -0.0001636585366, -0.0001785365854, -0.0002902439024, -0.0003051219512, -0.0002604878049, -0.0002829268293, -0.0002234146341, -0.0001041463415, -0.0001190243902, -0.0001041463415, -0.0000892682927, -0.0003126829268, -0.0005358536585, -0.0006326829268, -0.0006700000000, -0.0006326829268, -0.0005507317073, -0.0004541463415, -0.0004168292683, -0.0004392682927, -0.0003870731707, -0.0002456097561, -0.0000595121951, +0.0000892682927, +0.0000892682927, -0.0001041463415, -0.0004243902439, -0.0006178048780, -0.0006102439024, -0.0005136585366, -0.0003200000000, -0.0001339024390, -0.0001339024390, -0.0002307317073, -0.0002680487805, -0.0002829268293, -0.0003126829268, -0.0003646341463, -0.0004243902439, -0.0004987804878, -0.0005209756098, -0.0004243902439, -0.0003497560976, -0.0002680487805, -0.0000595121951, +0.0000743902439, +0.0000000000000, -0.0001265853659, -0.0002456097561, -0.0003348780488, -0.0004614634146, -0.0005804878049, -0.0005731707317, -0.0004392682927, -0.0003200000000, -0.0002978048780, -0.0002753658537, -0.0002234146341, -0.0001636585366, -0.0001785365854, -0.0002307317073, -0.0001636585366, -0.0000595121951, -0.0000595121951, -0.0000819512195, -0.0001190243902, -0.0002082926829, -0.0003200000000, -0.0005060975610, -0.0006251219512, -0.0005953658537, -0.0005953658537, -0.0005953658537, -0.0005434146341, -0.0004317073171, -0.0002456097561, -0.0001265853659, -0.0001414634146, -0.0002082926829, -0.0002978048780, -0.0003348780488, -0.0003051219512, -0.0001860975610, -0.0000743902439, -0.0000521951220, -0.0000670731707, -0.0000968292683, -0.0001712195122, -0.0002456097561, -0.0002902439024, -0.0003200000000, -0.0003348780488, -0.0002829268293, -0.0001860975610, -0.0001414634146, -0.0001563414634, -0.0002158536585, -0.0002978048780, -0.0003275609756, -0.0003795121951, -0.0004168292683, -0.0004092682927, -0.0003200000000, -0.0002009756098, -0.0001934146341, -0.0002382926829, -0.0002158536585, -0.0000595121951, +0.0000892682927, +0.0000595121951, +0.0000075609756, +0.0000373170732, +0.0000000000000, +0.0000000000000, +0.0000521951220, +0.0000670731707, +0.0000819512195, +0.0000000000000, +0.0000075609756, +0.0000670731707, -0.0000446341463, -0.0002382926829, -0.0004541463415, -0.0006102439024, -0.0005209756098, -0.0003051219512, -0.0001041463415, +0.0000892682927, +0.0002382926829, +0.0003200000000, +0.0002902439024, +0.0002082926829, +0.0000743902439, -0.0000968292683, -0.0002009756098, -0.0002307317073, -0.0002456097561, -0.0002307317073, -0.0001117073171, +0.0001117073171, +0.0002531707317, +0.0002382926829, +0.0001785365854, +0.0001265853659, +0.0000297560976, -0.0001414634146, -0.0002978048780, -0.0003497560976, -0.0002753658537, -0.0001785365854, -0.0001414634146, -0.0000670731707, +0.0000224390244, +0.0000521951220, +0.0001487804878, +0.0001487804878, +0.0000075609756, -0.0000595121951, -0.0001712195122, -0.0002158536585, -0.0001265853659, +0.0000000000000, +0.0002009756098, +0.0002902439024, +0.0001785365854, +0.0000595121951, -0.0000446341463, -0.0000892682927, -0.0001265853659, -0.0001487804878, +0.0000446341463, +0.0002753658537, +0.0003348780488, +0.0003051219512, +0.0001563414634, +0.0000224390244, -0.0000743902439, -0.0001487804878, -0.0000968292683, -0.0000373170732, +0.0000000000000, +0.0000373170732, -0.0000148780488, -0.0000743902439, -0.0000297560976, +0.0000743902439, +0.0001190243902, +0.0000297560976, -0.0000521951220, -0.0000446341463, -0.0000595121951, +0.0000075609756, +0.0001785365854, +0.0002604878049, +0.0002456097561, +0.0002829268293, +0.0003200000000, +0.0002082926829, +0.0000595121951, +0.0000148780488, +0.0000148780488, +0.0000000000000, +0.0000000000000, +0.0000148780488, +0.0000446341463, +0.0000148780488, +0.0000892682927, +0.0002307317073, +0.0002234146341, +0.0001414634146, +0.0000595121951, -0.0000446341463, -0.0001265853659, -0.0002456097561, -0.0003348780488, -0.0003275609756, -0.0002234146341, -0.0000446341463, +0.0001785365854, +0.0003424390244, +0.0003943902439, +0.0003795121951, +0.0003497560976, +0.0003348780488, +0.0002829268293, +0.0001265853659, +0.0000075609756, -0.0000670731707, -0.0002753658537, -0.0004614634146, -0.0005060975610, -0.0004541463415, -0.0002829268293, -0.0000446341463, +0.0001785365854, +0.0003795121951, +0.0004987804878, +0.0005060975610, +0.0003424390244, +0.0001487804878, +0.0000521951220, -0.0000297560976, -0.0000968292683, -0.0001041463415, -0.0001339024390, -0.0001487804878, -0.0001190243902, +0.0000000000000, +0.0002158536585, +0.0003721951220, +0.0004392682927, +0.0004465853659, +0.0003795121951, +0.0002382926829, +0.0001041463415, +0.0000743902439, +0.0000968292683, +0.0000521951220, -0.0000224390244, -0.0000521951220, +0.0000000000000, +0.0000819512195, +0.0001117073171, +0.0001117073171, +0.0000297560976, -0.0001041463415, -0.0001636585366, -0.0001265853659, -0.0000075609756, +0.0001712195122, +0.0002829268293, +0.0003275609756, +0.0003943902439, +0.0003348780488, +0.0002456097561, +0.0001785365854, +0.0000000000000, -0.0000968292683, -0.0000743902439, -0.0000224390244, +0.0000224390244, -0.0000373170732, -0.0001339024390, -0.0001339024390, -0.0000968292683, -0.0000819512195, -0.0000075609756, +0.0001190243902, +0.0002531707317, +0.0003275609756, +0.0002978048780, +0.0001860975610, +0.0001339024390, +0.0001265853659, +0.0001265853659, +0.0001117073171, +0.0000148780488, -0.0000075609756, +0.0000373170732, +0.0000075609756, +0.0000075609756, -0.0000148780488, -0.0001636585366, -0.0002604878049, -0.0002753658537, -0.0001041463415, +0.0001190243902, +0.0002382926829, +0.0002680487805, +0.0001934146341, +0.0001117073171, +0.0001414634146, +0.0001265853659, +0.0000521951220, +0.0000148780488, -0.0000521951220, -0.0000148780488, +0.0001265853659, +0.0002158536585, +0.0002680487805, +0.0003200000000, +0.0002829268293, +0.0001934146341, +0.0000297560976, -0.0001265853659, -0.0001117073171, +0.0000224390244, +0.0001860975610, +0.0002604878049, +0.0001860975610, +0.0001190243902, +0.0000892682927, +0.0000892682927, +0.0001190243902, +0.0001563414634, +0.0002680487805, +0.0003573170732, +0.0002604878049, +0.0001487804878, +0.0001636585366, +0.0002604878049, +0.0003721951220, +0.0004019512195, +0.0003646341463, +0.0002753658537, +0.0001563414634, +0.0000000000000, -0.0001339024390, -0.0001934146341, -0.0001487804878, +0.0000446341463, +0.0002753658537, +0.0003870731707, +0.0003943902439, +0.0003275609756, +0.0002456097561, +0.0002456097561, +0.0002009756098, +0.0000670731707, +0.0000075609756, +0.0000819512195, +0.0001934146341, +0.0003348780488, +0.0004317073171, +0.0004541463415, +0.0003870731707, +0.0002753658537, +0.0001860975610, +0.0001414634146, +0.0001712195122, +0.0002753658537, +0.0003943902439, +0.0005358536585, +0.0005804878049, +0.0004092682927, +0.0002158536585, +0.0000670731707, +0.0000373170732, +0.0001860975610, +0.0003573170732, +0.0005507317073, +0.0006773170732, +0.0006402439024, +0.0005804878049, +0.0005285365854, +0.0004317073171, +0.0002753658537, +0.0000743902439, -0.0001117073171, -0.0002009756098, -0.0001636585366, -0.0000373170732, +0.0000446341463, +0.0000670731707, +0.0001339024390, +0.0002307317073, +0.0002456097561, +0.0002234146341, +0.0002456097561, +0.0002753658537, +0.0003646341463, +0.0004092682927, +0.0003275609756, +0.0002531707317, +0.0001636585366, +0.0000743902439, +0.0000297560976, +0.0000075609756, +0.0000297560976, +0.0001117073171, +0.0001785365854, +0.0001636585366, +0.0000297560976, -0.0000892682927, -0.0000968292683, +0.0000000000000, +0.0001414634146, +0.0002456097561, +0.0003126829268, +0.0003424390244, +0.0003126829268, +0.0002307317073, +0.0001636585366, +0.0001712195122, +0.0001563414634, +0.0000075609756, -0.0001041463415, -0.0001190243902, -0.0000892682927, +0.0000148780488, +0.0001636585366, +0.0002680487805, +0.0003126829268, +0.0002978048780, +0.0002753658537, +0.0002009756098, +0.0000521951220, -0.0001041463415, -0.0002234146341, -0.0002680487805, -0.0002456097561, -0.0001563414634, -0.0000521951220, -0.0000224390244, -0.0000373170732, -0.0000373170732, -0.0000670731707, -0.0000819512195, -0.0000148780488, +0.0000446341463, +0.0000075609756, -0.0000743902439, -0.0001190243902, -0.0001563414634, -0.0002082926829, -0.0001785365854, -0.0000446341463, +0.0000595121951, +0.0000595121951, -0.0000373170732, -0.0001712195122, -0.0001934146341, -0.0001265853659, -0.0000743902439, -0.0000521951220, -0.0000670731707, -0.0000968292683, -0.0001414634146, -0.0001860975610, -0.0001339024390, -0.0000373170732, -0.0000446341463, -0.0001041463415, -0.0001414634146, -0.0001860975610, -0.0001785365854, -0.0001117073171, -0.0000521951220, -0.0000148780488, +0.0000000000000, -0.0000446341463, -0.0000521951220, -0.0000075609756, +0.0000373170732, +0.0000521951220, -0.0000224390244, -0.0001487804878, -0.0002680487805, -0.0003497560976, -0.0003424390244, -0.0002382926829, -0.0000670731707, +0.0000521951220, +0.0000743902439, +0.0000743902439, +0.0000297560976, -0.0000373170732, -0.0000670731707, -0.0000892682927, -0.0001041463415, -0.0000892682927, -0.0000446341463, +0.0000000000000, -0.0000670731707, -0.0002680487805, -0.0003943902439, -0.0004763414634, -0.0005285365854, -0.0003870731707, -0.0000892682927, +0.0001563414634, +0.0003275609756, +0.0004092682927, +0.0003795121951, +0.0002680487805, +0.0001117073171, -0.0000297560976, -0.0000968292683, -0.0000595121951, -0.0000670731707, -0.0001712195122, -0.0002456097561, -0.0002604878049, -0.0002082926829, -0.0000595121951, +0.0001190243902, +0.0002531707317, +0.0002531707317, +0.0000892682927, -0.0000595121951, -0.0001117073171, -0.0001117073171, +0.0000075609756, +0.0002009756098, +0.0002680487805, +0.0001563414634, +0.0000148780488, +0.0000000000000, +0.0000224390244, -0.0000446341463, -0.0000968292683, -0.0000819512195, -0.0000670731707, +0.0000446341463, +0.0001860975610, +0.0002158536585, +0.0002082926829, +0.0001563414634, +0.0000892682927, +0.0000670731707, +0.0000148780488, -0.0000373170732, -0.0000373170732, +0.0000224390244, +0.0001190243902, +0.0001339024390, +0.0001190243902, +0.0001636585366, +0.0001339024390, +0.0000373170732, -0.0000224390244, +0.0000000000000, +0.0000373170732, +0.0000000000000, -0.0000521951220, -0.0000297560976, -0.0000075609756, -0.0000373170732, -0.0000521951220, -0.0000373170732, -0.0000595121951, -0.0000819512195, -0.0000224390244, +0.0000224390244, +0.0000446341463, +0.0001265853659, +0.0002307317073, +0.0002604878049, +0.0002158536585, +0.0000968292683, -0.0000297560976, -0.0000968292683, -0.0001339024390, -0.0002009756098, -0.0002456097561, -0.0002082926829, -0.0000743902439, +0.0000446341463, +0.0000968292683, +0.0001339024390, +0.0001414634146, +0.0000892682927, +0.0000000000000, -0.0001339024390, -0.0002382926829, -0.0002382926829, -0.0002082926829, -0.0000819512195, +0.0000148780488, +0.0000000000000, +0.0000075609756, -0.0000075609756, -0.0000670731707, -0.0001190243902, -0.0002082926829, -0.0002158536585, -0.0001414634146, -0.0001041463415, -0.0000743902439, +0.0000148780488, +0.0000892682927, +0.0001190243902, +0.0001117073171, +0.0000373170732, -0.0001041463415, -0.0002382926829, -0.0002604878049, -0.0002680487805, -0.0002829268293, -0.0002456097561, -0.0001041463415, +0.0000521951220, +0.0002009756098, +0.0002680487805, +0.0002158536585, +0.0001041463415, -0.0000446341463, -0.0002307317073, -0.0003424390244, -0.0003943902439, -0.0003721951220, -0.0002680487805, -0.0001785365854, -0.0001414634146, -0.0001190243902, -0.0000446341463, +0.0000297560976, -0.0000075609756, -0.0001117073171, -0.0001860975610, -0.0002307317073, -0.0002531707317, -0.0002382926829, -0.0002382926829, -0.0002456097561, -0.0002009756098, -0.0001117073171, -0.0000521951220, -0.0000743902439, -0.0000892682927, -0.0000595121951, -0.0000595121951, -0.0001041463415, -0.0001117073171, -0.0001041463415, -0.0001339024390, -0.0001563414634, -0.0001487804878, -0.0001636585366, -0.0002456097561, -0.0003348780488, -0.0003348780488, -0.0002829268293, -0.0002234146341, -0.0001860975610, -0.0000819512195, +0.0001117073171, +0.0002604878049, +0.0002604878049, +0.0001563414634, +0.0000224390244, -0.0000148780488, +0.0000075609756, -0.0000297560976, -0.0001041463415, -0.0001563414634, -0.0001339024390, -0.0000595121951, -0.0000224390244, -0.0000446341463, -0.0000892682927, -0.0001339024390, -0.0001712195122, -0.0002307317073, -0.0002978048780, -0.0002456097561, -0.0001265853659, +0.0000000000000, +0.0000743902439, +0.0000819512195, +0.0000595121951, +0.0000000000000, -0.0000297560976, -0.0000224390244, -0.0000075609756, +0.0000000000000, -0.0000148780488, +0.0000000000000, +0.0000297560976, -0.0000075609756, -0.0000446341463, -0.0000373170732, -0.0000297560976, -0.0000373170732, -0.0001117073171, -0.0002307317073, -0.0002456097561, -0.0001785365854, -0.0000892682927, -0.0000224390244, +0.0000075609756, +0.0000595121951, +0.0000743902439, +0.0000297560976, -0.0000075609756, -0.0000446341463, -0.0000670731707, -0.0000670731707, -0.0000892682927, -0.0001190243902, -0.0001563414634, -0.0001487804878, -0.0000670731707, -0.0000446341463, -0.0000743902439, -0.0001041463415, -0.0001117073171, -0.0001117073171, -0.0001190243902, -0.0001265853659, -0.0001563414634, -0.0001860975610, -0.0001785365854, -0.0001785365854, -0.0001563414634, -0.0000595121951, +0.0000075609756, +0.0000000000000, -0.0000224390244, -0.0000148780488, +0.0000000000000, -0.0000297560976, -0.0000595121951, -0.0001117073171, -0.0001785365854, -0.0001712195122, -0.0001339024390, -0.0001041463415, -0.0000595121951, -0.0000075609756, +0.0000297560976, +0.0000297560976, -0.0000148780488, -0.0000373170732, +0.0000000000000, +0.0000446341463, +0.0000670731707, +0.0000373170732, +0.0000148780488, -0.0000521951220, -0.0001785365854, -0.0002382926829, -0.0002604878049, -0.0001860975610, -0.0000297560976, +0.0000968292683, +0.0001860975610, +0.0001860975610, +0.0000743902439, -0.0000148780488, -0.0000743902439, -0.0001414634146, -0.0001265853659, -0.0000743902439, -0.0000297560976, +0.0000075609756, +0.0000148780488, +0.0000075609756, +0.0000446341463, +0.0000968292683, +0.0001117073171, +0.0001041463415, +0.0000968292683, +0.0001265853659, +0.0001339024390, +0.0000743902439, +0.0000297560976, -0.0000224390244, -0.0000670731707, -0.0000373170732, +0.0000224390244, +0.0000446341463, +0.0000670731707, +0.0000670731707, +0.0000075609756, -0.0000892682927, -0.0001487804878, -0.0001041463415, +0.0000148780488, +0.0001190243902, +0.0001487804878, +0.0000968292683, +0.0000148780488, -0.0000148780488, -0.0000373170732, -0.0000446341463, -0.0000446341463, -0.0000743902439, -0.0000670731707, +0.0000000000000, +0.0000743902439, +0.0001190243902, +0.0001041463415, +0.0000446341463, +0.0000075609756, -0.0000148780488, -0.0000595121951, -0.0000819512195, -0.0000819512195, -0.0000892682927, -0.0000446341463, +0.0000224390244, +0.0000224390244, -0.0000297560976, -0.0000446341463, +0.0000148780488, +0.0001339024390, +0.0001636585366, +0.0001265853659, +0.0000521951220, -0.0000297560976, -0.0000819512195, -0.0001041463415, -0.0000892682927, -0.0000670731707, -0.0000819512195, -0.0001041463415, -0.0000595121951, -0.0000148780488, +0.0000446341463, +0.0001339024390, +0.0001414634146, +0.0000892682927, +0.0000446341463, -0.0000148780488, -0.0000595121951, -0.0000670731707, -0.0000224390244, +0.0000595121951, +0.0001117073171, +0.0000968292683, +0.0000743902439, +0.0000297560976, -0.0000148780488, +0.0000075609756, +0.0001041463415, +0.0001414634146, +0.0000819512195, +0.0000148780488, -0.0000075609756, -0.0000446341463, -0.0000595121951, -0.0000968292683, -0.0000819512195, -0.0000075609756, +0.0000373170732, +0.0000595121951, +0.0000892682927, +0.0001265853659, +0.0001487804878, +0.0001414634146, +0.0001414634146, +0.0001636585366, +0.0000819512195, -0.0000670731707, -0.0001636585366, -0.0001636585366, -0.0001339024390, -0.0000968292683, -0.0000148780488, +0.0000743902439, +0.0001414634146, +0.0001934146341, +0.0001636585366, +0.0000521951220, +0.0000000000000, -0.0000075609756, -0.0000075609756, +0.0000148780488, +0.0000892682927, +0.0001934146341, +0.0002382926829, +0.0001785365854, +0.0000670731707, +0.0000000000000, -0.0000595121951, -0.0000819512195, -0.0000075609756, +0.0001190243902, +0.0002531707317, +0.0003348780488, +0.0002829268293, +0.0002009756098, +0.0001339024390, +0.0000892682927, +0.0001041463415, +0.0000968292683, +0.0000446341463, +0.0000075609756, +0.0000000000000, -0.0000148780488, -0.0000297560976, -0.0000595121951, -0.0000670731707, -0.0000224390244, +0.0000743902439, +0.0001414634146, +0.0001563414634, +0.0001487804878, +0.0001041463415, +0.0000521951220, +0.0000000000000, -0.0000446341463, -0.0000892682927, -0.0001190243902, -0.0000968292683, -0.0000297560976, +0.0000373170732, +0.0001339024390, +0.0002082926829, +0.0001712195122, +0.0000968292683, +0.0000148780488, -0.0000521951220, -0.0000373170732, +0.0000297560976, +0.0000446341463, +0.0000521951220, +0.0000670731707, +0.0000743902439, +0.0000743902439, +0.0001041463415, +0.0001414634146, +0.0001712195122, +0.0001712195122, +0.0001487804878, +0.0001190243902, +0.0000446341463, -0.0000075609756, -0.0000075609756, -0.0000075609756, -0.0000075609756, +0.0000000000000, +0.0000075609756, +0.0000224390244, +0.0000224390244, +0.0000075609756, +0.0000373170732, +0.0001414634146, +0.0002753658537, +0.0003573170732, +0.0003051219512, +0.0001487804878, +0.0000000000000, -0.0000968292683, -0.0001117073171, -0.0000595121951, -0.0000148780488, +0.0000148780488, +0.0000595121951, +0.0000892682927, +0.0001041463415, +0.0001414634146, +0.0001860975610, +0.0001712195122, +0.0001117073171, +0.0000224390244, -0.0000373170732, -0.0000446341463, -0.0000297560976, -0.0000148780488, -0.0000075609756, -0.0000373170732, -0.0001117073171, -0.0001487804878, -0.0001117073171, -0.0000075609756, +0.0001190243902, +0.0002307317073, +0.0002829268293, +0.0002382926829, +0.0001414634146, +0.0000224390244, -0.0000373170732, -0.0000224390244, +0.0000521951220, +0.0000892682927, +0.0000670731707, +0.0000297560976, +0.0000148780488, +0.0000000000000, +0.0000075609756, +0.0000595121951, +0.0000743902439, +0.0000819512195, +0.0000968292683, +0.0000446341463, -0.0000224390244, -0.0000297560976, +0.0000670731707, +0.0001860975610, +0.0002158536585, +0.0001117073171, -0.0000297560976, -0.0001265853659, -0.0001487804878, -0.0001190243902, -0.0000446341463, +0.0000373170732, +0.0001190243902, +0.0001712195122, +0.0001712195122, +0.0001339024390, +0.0000373170732, -0.0000670731707, -0.0001339024390, -0.0001636585366, -0.0001563414634, -0.0000743902439, +0.0000297560976, +0.0001414634146, +0.0001860975610, +0.0001563414634, +0.0000968292683, +0.0000446341463, +0.0000148780488, +0.0000148780488, +0.0000224390244, +0.0000224390244, -0.0000075609756, -0.0000373170732, -0.0000521951220, -0.0000521951220, -0.0000148780488, +0.0000000000000, -0.0000373170732, -0.0001117073171, -0.0001414634146, -0.0000521951220, +0.0001265853659, +0.0002753658537, +0.0003051219512, +0.0002382926829, +0.0001117073171, -0.0000297560976, -0.0001117073171, -0.0000743902439, +0.0000148780488, +0.0001265853659, +0.0001712195122, +0.0001636585366, +0.0001563414634, +0.0000968292683, +0.0000373170732, +0.0000000000000, -0.0000595121951, -0.0001487804878, -0.0002082926829, -0.0002009756098, -0.0001414634146, -0.0000224390244, +0.0001190243902, +0.0001860975610, +0.0001636585366, +0.0001117073171, +0.0000521951220, +0.0000224390244, +0.0000075609756, +0.0000000000000, +0.0000000000000, -0.0000224390244, -0.0000670731707, -0.0000968292683, -0.0000670731707, +0.0000224390244, +0.0000892682927, +0.0000521951220, +0.0000075609756, +0.0000000000000, +0.0000075609756, +0.0000521951220, +0.0000595121951, +0.0000446341463, +0.0000075609756, -0.0000595121951, -0.0001265853659, -0.0001636585366, -0.0001636585366, -0.0001414634146, -0.0001041463415, -0.0000521951220, +0.0000148780488, +0.0000595121951, +0.0000670731707, +0.0000595121951, +0.0000670731707, +0.0001190243902, +0.0001712195122, +0.0001636585366, +0.0000595121951, -0.0000521951220, -0.0001265853659, -0.0001339024390, -0.0001414634146, -0.0001117073171, -0.0000446341463, +0.0000297560976, +0.0000743902439, +0.0000968292683, +0.0001041463415, +0.0001041463415, +0.0000670731707, +0.0000000000000, -0.0000743902439, -0.0001487804878, -0.0001563414634, -0.0001265853659, -0.0000595121951, +0.0000373170732, +0.0001339024390, +0.0001934146341, +0.0002082926829, +0.0001934146341, +0.0001712195122, +0.0001339024390, +0.0000743902439, +0.0000000000000, -0.0000968292683, -0.0001563414634, -0.0001487804878, -0.0001117073171, -0.0000521951220, +0.0000000000000, +0.0000521951220, +0.0000819512195, +0.0000968292683, +0.0001041463415, +0.0000819512195, +0.0000373170732, +0.0000075609756, +0.0000000000000, -0.0000224390244, -0.0000148780488, +0.0000000000000, +0.0000373170732, +0.0000743902439, +0.0001041463415, +0.0000892682927, +0.0000743902439, +0.0000521951220, +0.0000075609756, -0.0000148780488, -0.0000670731707, -0.0000743902439, -0.0000521951220, -0.0000224390244, +0.0000000000000, +0.0000224390244, +0.0000373170732, +0.0000446341463, +0.0000297560976, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000075609756, +0.0000297560976, +0.0000297560976, +0.0000224390244, +0.0000148780488, +0.0000148780488, +0.0000224390244, +0.0000148780488, +0.0000075609756, +0.0000000000000, +0.0000075609756, +0.0000148780488, +0.0000148780488, +0.0000075609756, +0.0000075609756, +0.0000000000000, -0.0000224390244, -0.0000297560976, -0.0000297560976, -0.0000148780488, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000075609756, -0.0000075609756, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000075609756, +0.0000148780488, +0.0000148780488, +0.0000075609756, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/11-fender-bassman-ui87.h000066400000000000000000001733051247673406200252230ustar00rootroot00000000000000float fender_bassman_ui87[] = { +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000062374245, +0.0000122736419, +0.0000122736419, +0.0000122736419, +0.0000062374245, +0.0000062374245, +0.0000062374245, +0.0000122736419, +0.0000122736419, +0.0000122736419, +0.0000000000000, -0.0000185110664, -0.0000307847082, -0.0000368209256, -0.0000185110664, +0.0000062374245, +0.0000430583501, +0.0000859154930, +0.0001044265594, +0.0000981891348, +0.0000798792757, +0.0000490945674, +0.0000185110664, +0.0000000000000, +0.0000000000000, -0.0000062374245, -0.0000245472837, -0.0000430583501, -0.0000613682093, -0.0000736418511, -0.0000553319920, -0.0000062374245, +0.0000676056338, +0.0001535211268, +0.0002211267606, +0.0002394366197, +0.0002088531187, +0.0001227364185, +0.0000000000000, -0.0001167002012, -0.0002026156942, -0.0002211267606, -0.0001657947686, -0.0000368209256, +0.0001289738431, +0.0002885311871, +0.0004052313883, +0.0004297786720, +0.0003561368209, +0.0002026156942, +0.0000122736419, -0.0001535211268, -0.0002517102616, -0.0002517102616, -0.0001535211268, +0.0000000000000, +0.0001535211268, +0.0002579476861, +0.0002762575453, +0.0002088531187, +0.0001044265594, +0.0000062374245, -0.0000307847082, -0.0000062374245, +0.0000736418511, +0.0001718309859, +0.0002394366197, +0.0002334004024, +0.0001657947686, +0.0000490945674, -0.0000613682093, -0.0001412474849, -0.0001657947686, -0.0001167002012, -0.0000307847082, +0.0000613682093, +0.0001472837022, +0.0001965794769, +0.0002088531187, +0.0001903420523, +0.0001472837022, +0.0000921529175, +0.0000368209256, +0.0000000000000, -0.0000245472837, -0.0000185110664, +0.0000122736419, +0.0000798792757, +0.0001595573441, +0.0002271629779, +0.0002639839034, +0.0002579476861, +0.0001965794769, +0.0001044265594, +0.0000000000000, -0.0000798792757, -0.0001289738431, -0.0001350100604, -0.0000981891348, -0.0000245472837, +0.0000553319920, +0.0001350100604, +0.0002026156942, +0.0002456740443, +0.0002702213280, +0.0002762575453, +0.0002762575453, +0.0002762575453, +0.0002639839034, +0.0002517102616, +0.0002026156942, +0.0001227364185, +0.0000062374245, -0.0001167002012, -0.0002334004024, -0.0003008048290, -0.0002947686117, -0.0002088531187, -0.0000676056338, +0.0000859154930, +0.0002088531187, +0.0002824949698, +0.0002947686117, +0.0002702213280, +0.0002334004024, +0.0002271629779, +0.0002517102616, +0.0002885311871, +0.0002947686117, +0.0002456740443, +0.0001167002012, -0.0000553319920, -0.0002517102616, -0.0003929577465, -0.0004482897384, -0.0003929577465, -0.0002517102616, -0.0000676056338, +0.0001044265594, +0.0002334004024, +0.0003008048290, +0.0003253521127, +0.0003315895372, +0.0003376257545, +0.0003623742455, +0.0003991951710, +0.0004114688129, +0.0003746478873, +0.0002639839034, +0.0000736418511, -0.0001780684105, -0.0004420523139, -0.0006569416499, -0.0007553319920, -0.0006937625755, -0.0004605633803, -0.0001104627767, +0.0002702213280, +0.0005832997988, +0.0007430583501, +0.0007185110664, +0.0005404426559, +0.0002885311871, +0.0000613682093, -0.0000676056338, -0.0000921529175, -0.0000613682093, -0.0000368209256, -0.0000676056338, -0.0001535211268, -0.0002639839034, -0.0003193158954, -0.0002824949698, -0.0001657947686, -0.0000185110664, +0.0000798792757, +0.0000859154930, +0.0000122736419, -0.0000676056338, -0.0000798792757, +0.0000307847082, +0.0002334004024, +0.0004114688129, +0.0004605633803, +0.0002947686117, -0.0000613682093, -0.0004788732394, -0.0007798792757, -0.0008104627767, -0.0005342052314, -0.0000430583501, +0.0004543259557, +0.0007859154930, +0.0007981891348, +0.0005404426559, +0.0001044265594, -0.0002947686117, -0.0006140845070, -0.0008044265594, -0.0007859154930, -0.0008595573441, -0.0009148893360, -0.0008472837022, -0.0006323943662, -0.0002456740443, +0.0002824949698, +0.0008350100604, +0.0012342052314, +0.0012955734406, +0.0009639839034, +0.0004114688129, -0.0002026156942, -0.0006509054326, -0.0008965794769, -0.0009026156942, -0.0008780684105, -0.0009026156942, -0.0010623742455, -0.0012096579477, -0.0012895372233, -0.0011175050302, -0.0007859154930, -0.0003008048290, +0.0000613682093, +0.0001657947686, +0.0000122736419, -0.0002579476861, -0.0005342052314, -0.0007062374245, -0.0005587525151, -0.0005404426559, -0.0005464788732, -0.0012404426559, -0.0020323943662, -0.0035307847082, -0.0047955734406, -0.0061158953722, -0.0070676056338, -0.0091921529175, -0.0070798792757, -0.0133553319920, -0.0027569416499, -0.0126613682093, -0.0237386317907, +0.0033772635815, +0.0536728370221, +0.0315122736419, -0.0922344064386, -0.1213824949698, -0.0277605633803, +0.0047034205231, +0.0728983903421, +0.1977993963783, +0.2011949698189, +0.1692529175050, +0.0937263581489, -0.0018665995976, -0.0412631790744, -0.0820597585513, -0.1030229376258, -0.0709150905433, -0.0684464788732, -0.0469000000000, -0.0155289738431, +0.0112859154930, +0.0516587525151, +0.0585728370221, +0.0543668008048, +0.0577255533199, +0.0324088531187, +0.0172543259557, +0.0068649899396, -0.0127780684105, -0.0118816901408, -0.0237446680080, -0.0326605633803, -0.0255869215292, -0.0184885311871, -0.0068034205231, -0.0002702213280, -0.0085044265594, -0.0060360160966, +0.0026955734406, +0.0037394366197, +0.0108561368209, +0.0087193158954, -0.0036167002012, -0.0076692152918, -0.0095237424547, -0.0186482897384, -0.0095543259557, -0.0116543259557, -0.0237877263581, -0.0116973843058, -0.0127167002012, -0.0158052313883, -0.0088114688129, -0.0080746478873, -0.0066253521127, -0.0051026156942, -0.0084430583501, +0.0024501006036, +0.0069018108652, +0.0081973843058, +0.0107639839034, +0.0045376257545, +0.0050720321932, +0.0026832997988, +0.0038991951710, +0.0074482897384, -0.0005464788732, -0.0069201207243, -0.0096404426559, -0.0163271629779, -0.0202323943662, -0.0166772635815, -0.0099657947686, -0.0006692152918, +0.0026772635815, +0.0057350100604, +0.0049122736419, +0.0019649899396, +0.0010315895372, +0.0005342052314, -0.0041877263581, -0.0106780684105, -0.0095665995976, -0.0106167002012, -0.0108684104628, -0.0095973843058, -0.0097509054326, -0.0118877263581, -0.0138649899396, -0.0116360160966, -0.0020877263581, +0.0010501006036, -0.0030702213280, -0.0049798792757, -0.0084981891348, -0.0078472837022, -0.0058211267606, -0.0040096579477, -0.0003684104628, +0.0004788732394, +0.0035368209256, +0.0064289738431, -0.0011665995976, -0.0066929577465, -0.0074665995976, -0.0091307847082, -0.0045130784708, -0.0005527162978, -0.0009824949698, -0.0028490945674, -0.0072026156942, -0.0101561368209, -0.0114026156942, -0.0127720321932, -0.0124281690141, -0.0128885311871, -0.0111386317907, -0.0069877263581, -0.0066253521127, -0.0049185110664, -0.0006263581489, +0.0023885311871, +0.0036289738431, +0.0033955734406, +0.0043780684105, +0.0052376257545, +0.0032911468813, +0.0036657947686, +0.0046851106640, +0.0035553319920, +0.0015903420523, -0.0024806841046, -0.0073193158954, -0.0122193158954, -0.0149517102616, -0.0131895372233, -0.0104446680080, -0.0078843058350, -0.0047955734406, -0.0020509054326, -0.0000307847082, -0.0006140845070, -0.0014490945674, +0.0001044265594, +0.0020631790744, +0.0039851106640, +0.0055201207243, +0.0051026156942, +0.0041263581489, +0.0020692152918, -0.0005955734406, -0.0006692152918, -0.0000122736419, +0.0001412474849, +0.0012895372233, +0.0025665995976, +0.0030762575453, +0.0025728370221, +0.0020323943662, +0.0030211267606, +0.0039851106640, +0.0052929577465, +0.0079211267606, +0.0073315895372, +0.0046788732394, +0.0027446680080, +0.0014798792757, +0.0016579476861, +0.0008044265594, -0.0001657947686, -0.0002211267606, -0.0013631790744, -0.0011114688129, -0.0005527162978, -0.0002271629779, +0.0025175050302, +0.0051517102616, +0.0066253521127, +0.0073561368209, +0.0066869215292, +0.0059684104628, +0.0059869215292, +0.0059746478873, +0.0047832997988, +0.0030271629779, +0.0005587525151, -0.0006509054326, +0.0007185110664, +0.0013814889336, +0.0034446680080, +0.0066623742455, +0.0072088531187, +0.0077245472837, +0.0084122736419, +0.0069323943662, +0.0049490945674, +0.0029535211268, +0.0023334004024, +0.0027201207243, +0.0037947686117, +0.0061342052314, +0.0077307847082, +0.0083569416499, +0.0071472837022, +0.0042553319920, +0.0030639839034, +0.0009517102616, -0.0014736418511, +0.0005772635815, +0.0030026156942, +0.0045684104628, +0.0062078470825, +0.0054342052314, +0.0036720321932, +0.0021921529175, +0.0009334004024, +0.0012955734406, +0.0015657947686, +0.0015350100604, +0.0019464788732, +0.0019527162978, +0.0030517102616, +0.0063307847082, +0.0081788732394, +0.0074665995976, +0.0066315895372, +0.0048692152918, +0.0015227364185, -0.0014676056338, -0.0026281690141, -0.0018851106640, -0.0005832997988, -0.0000490945674, -0.0005587525151, -0.0016334004024, -0.0020018108652, -0.0002148893360, +0.0017438631791, +0.0023271629779, +0.0031623742455, +0.0037394366197, +0.0021859154930, +0.0010869215292, +0.0014430583501, +0.0014490945674, +0.0016394366197, +0.0018665995976, +0.0019342052314, +0.0028062374245, +0.0042859154930, +0.0048569416499, +0.0037334004024, +0.0014185110664, -0.0001472837022, -0.0005464788732, -0.0001472837022, +0.0011237424547, +0.0017869215292, +0.0003991951710, -0.0015289738431, -0.0028490945674, -0.0028736418511, -0.0017070422535, +0.0000000000000, +0.0014859154930, +0.0020201207243, +0.0022350100604, +0.0027692152918, +0.0022657947686, +0.0002824949698, -0.0016579476861, -0.0028000000000, -0.0032297786720, -0.0022843058350, +0.0002702213280, +0.0010070422535, -0.0001412474849, -0.0006754527163, -0.0014553319920, -0.0036720321932, -0.0038991951710, -0.0029720321932, -0.0022843058350, -0.0009271629779, -0.0005832997988, -0.0004973843058, -0.0006140845070, -0.0014981891348, -0.0016885311871, -0.0011728370221, -0.0006386317907, +0.0007122736419, +0.0007185110664, -0.0000736418511, -0.0011114688129, -0.0025543259557, -0.0032543259557, -0.0035000000000, -0.0024253521127, -0.0001350100604, +0.0010561368209, +0.0016148893360, +0.0013263581489, -0.0004543259557, -0.0007859154930, -0.0009394366197, -0.0018175050302, -0.0017130784708, -0.0010070422535, -0.0000981891348, +0.0009088531187, +0.0012772635815, +0.0012219315895, +0.0004175050302, +0.0006018108652, +0.0008780684105, -0.0005034205231, -0.0011114688129, -0.0010684104628, -0.0014185110664, -0.0019404426559, -0.0031070422535, -0.0031376257545, -0.0022903420523, -0.0016271629779, +0.0001167002012, +0.0011851106640, -0.0000122736419, -0.0012710261569, -0.0020509054326, -0.0026649899396, -0.0027692152918, -0.0026342052314, -0.0021859154930, -0.0011728370221, -0.0000245472837, +0.0007676056338, +0.0011237424547, +0.0009088531187, +0.0009456740443, +0.0008535211268, -0.0006078470825, -0.0017315895372, -0.0017929577465, -0.0023885311871, -0.0025420523139, -0.0017070422535, -0.0001227364185, +0.0012404426559, +0.0015044265594, +0.0025605633803, +0.0035613682093, +0.0033156941650, +0.0027509054326, +0.0015289738431, +0.0003623742455, -0.0005342052314, -0.0012955734406, -0.0007921529175, -0.0001843058350, +0.0002271629779, +0.0008718309859, +0.0018175050302, +0.0029289738431, +0.0029412474849, +0.0022720321932, +0.0009394366197, -0.0008289738431, -0.0008104627767, -0.0005464788732, -0.0003315895372, +0.0005649899396, +0.0005219315895, -0.0000368209256, -0.0004237424547, -0.0005464788732, -0.0001289738431, -0.0003315895372, -0.0004297786720, +0.0007553319920, +0.0015044265594, +0.0023211267606, +0.0032114688129, +0.0035307847082, +0.0033772635815, +0.0020386317907, +0.0003929577465, -0.0003746478873, -0.0005895372233, -0.0003806841046, -0.0002026156942, -0.0002702213280, +0.0001780684105, +0.0004482897384, -0.0002639839034, -0.0009824949698, -0.0013446680080, -0.0014921529175, -0.0011114688129, -0.0004052313883, +0.0001412474849, +0.0004788732394, +0.0004605633803, +0.0008472837022, +0.0015903420523, +0.0019587525151, +0.0022472837022, +0.0030026156942, +0.0033281690141, +0.0028798792757, +0.0024253521127, +0.0014000000000, +0.0004851106640, +0.0005895372233, +0.0008044265594, +0.0012464788732, +0.0017070422535, +0.0019464788732, +0.0023702213280, +0.0017684104628, +0.0006631790744, +0.0002088531187, -0.0005464788732, -0.0005527162978, -0.0001595573441, -0.0003746478873, -0.0000613682093, -0.0004911468813, -0.0009026156942, -0.0002579476861, -0.0002271629779, +0.0000245472837, +0.0005527162978, +0.0007122736419, +0.0009088531187, +0.0007490945674, +0.0014613682093, +0.0026772635815, +0.0029044265594, +0.0026464788732, +0.0014798792757, +0.0000613682093, -0.0004237424547, -0.0004543259557, +0.0000000000000, +0.0004911468813, +0.0004851106640, +0.0005156941650, +0.0007981891348, +0.0010438631791, +0.0008227364185, +0.0008657947686, +0.0010193158954, +0.0007736418511, +0.0004788732394, -0.0001044265594, -0.0004665995976, -0.0009947686117, -0.0017684104628, -0.0022044265594, -0.0026096579477, -0.0020323943662, -0.0005034205231, +0.0007798792757, +0.0022720321932, +0.0033281690141, +0.0037211267606, +0.0033832997988, +0.0021307847082, +0.0012832997988, +0.0005281690141, -0.0002148893360, -0.0005772635815, -0.0009088531187, -0.0009211267606, -0.0008965794769, -0.0011237424547, -0.0007798792757, -0.0003070422535, -0.0000981891348, -0.0001780684105, +0.0001350100604, +0.0004360160966, -0.0005404426559, -0.0013569416499, -0.0016394366197, -0.0014553319920, -0.0008657947686, -0.0007859154930, -0.0009517102616, -0.0013018108652, -0.0023148893360, -0.0028490945674, -0.0027140845070, -0.0019281690141, -0.0002639839034, +0.0013877263581, +0.0024806841046, +0.0026587525151, +0.0019096579477, +0.0006263581489, -0.0006877263581, -0.0015843058350, -0.0021981891348, -0.0025788732394, -0.0026464788732, -0.0023088531187, -0.0014981891348, -0.0010130784708, -0.0003561368209, +0.0002947686117, +0.0000553319920, -0.0000430583501, -0.0002148893360, -0.0007307847082, -0.0009456740443, -0.0010315895372, -0.0011420523139, -0.0013569416499, -0.0019955734406, -0.0021921529175, -0.0018728370221, -0.0015412474849, -0.0005649899396, +0.0002334004024, +0.0001044265594, -0.0001104627767, -0.0000245472837, +0.0002026156942, +0.0009762575453, +0.0013877263581, +0.0014000000000, +0.0012710261569, +0.0004297786720, -0.0002088531187, -0.0003991951710, -0.0007185110664, -0.0005404426559, -0.0007798792757, -0.0013937625755, -0.0012772635815, -0.0014245472837, -0.0014245472837, -0.0008104627767, -0.0007245472837, -0.0005219315895, -0.0002211267606, +0.0001780684105, +0.0006754527163, +0.0000859154930, -0.0005587525151, -0.0009762575453, -0.0018728370221, -0.0021430583501, -0.0011360160966, -0.0002456740443, -0.0000613682093, +0.0000921529175, +0.0003561368209, +0.0000798792757, -0.0003070422535, -0.0008350100604, -0.0015412474849, -0.0016394366197, -0.0009947686117, -0.0004114688129, -0.0003869215292, -0.0009639839034, -0.0014307847082, -0.0014553319920, -0.0014368209256, -0.0009334004024, -0.0003008048290, -0.0004360160966, -0.0007122736419, -0.0009517102616, -0.0014921529175, -0.0017561368209, -0.0017070422535, -0.0014981891348, -0.0008780684105, -0.0006263581489, -0.0009762575453, -0.0012281690141, -0.0014430583501, -0.0016271629779, -0.0016271629779, -0.0016148893360, -0.0015657947686, -0.0014000000000, -0.0011973843058, -0.0008843058350, -0.0004360160966, -0.0001657947686, -0.0000245472837, +0.0001104627767, +0.0000000000000, -0.0002211267606, -0.0003561368209, -0.0002394366197, -0.0002026156942, -0.0004973843058, -0.0008412474849, -0.0011482897384, -0.0013263581489, -0.0013323943662, -0.0011175050302, -0.0005034205231, -0.0003070422535, -0.0006078470825, -0.0009639839034, -0.0013140845070, -0.0011360160966, -0.0009579476861, -0.0004114688129, +0.0003991951710, -0.0001227364185, -0.0010253521127, -0.0013018108652, -0.0014122736419, -0.0013569416499, -0.0013814889336, -0.0012034205231, -0.0009148893360, -0.0010869215292, -0.0010746478873, -0.0005587525151, -0.0003869215292, -0.0003253521127, -0.0000430583501, -0.0000798792757, -0.0003623742455, -0.0006078470825, -0.0008657947686, -0.0006018108652, -0.0002639839034, -0.0003315895372, -0.0003315895372, -0.0007062374245, -0.0009334004024, -0.0006201207243, -0.0007122736419, -0.0009762575453, -0.0010623742455, -0.0013754527163, -0.0015535211268, -0.0013569416499, -0.0006877263581, +0.0000676056338, +0.0001903420523, +0.0000122736419, -0.0001965794769, -0.0004114688129, -0.0005772635815, -0.0005649899396, -0.0004420523139, -0.0002026156942, +0.0001104627767, +0.0002211267606, +0.0001044265594, +0.0001289738431, +0.0002271629779, +0.0002762575453, +0.0000798792757, -0.0001965794769, -0.0004911468813, -0.0009517102616, -0.0009639839034, -0.0004665995976, +0.0001903420523, +0.0005219315895, +0.0002579476861, -0.0001535211268, -0.0001289738431, +0.0000553319920, +0.0000490945674, +0.0000430583501, -0.0000981891348, -0.0003070422535, -0.0002148893360, +0.0000245472837, +0.0004911468813, +0.0009394366197, +0.0008227364185, +0.0005955734406, +0.0004237424547, +0.0003561368209, +0.0004788732394, +0.0004482897384, +0.0002702213280, +0.0001903420523, +0.0000676056338, +0.0000553319920, +0.0000430583501, -0.0002148893360, -0.0005034205231, -0.0008657947686, -0.0010253521127, -0.0008167002012, -0.0004237424547, +0.0000368209256, +0.0004605633803, +0.0007185110664, +0.0006754527163, +0.0004728370221, +0.0005527162978, +0.0008472837022, +0.0008780684105, +0.0005527162978, +0.0000676056338, -0.0001657947686, +0.0000122736419, +0.0003991951710, +0.0007368209256, +0.0010130784708, +0.0011052313883, +0.0008843058350, +0.0007245472837, +0.0007368209256, +0.0009824949698, +0.0009579476861, +0.0006201207243, +0.0001412474849, -0.0004237424547, -0.0007185110664, -0.0003991951710, +0.0004543259557, +0.0012281690141, +0.0012219315895, +0.0007430583501, +0.0002456740443, -0.0003376257545, -0.0004973843058, -0.0001903420523, +0.0000430583501, +0.0001718309859, +0.0000245472837, -0.0003253521127, -0.0004911468813, -0.0003501006036, -0.0000981891348, +0.0000798792757, -0.0000185110664, -0.0003253521127, -0.0004543259557, -0.0004482897384, -0.0001843058350, +0.0004297786720, +0.0008657947686, +0.0008412474849, +0.0006509054326, +0.0003438631791, +0.0001595573441, -0.0000490945674, -0.0003130784708, -0.0002702213280, -0.0001718309859, -0.0005832997988, -0.0009885311871, -0.0009639839034, -0.0007798792757, -0.0002639839034, +0.0002947686117, +0.0003684104628, +0.0003193158954, +0.0000859154930, -0.0003929577465, -0.0005342052314, -0.0003561368209, -0.0002702213280, -0.0001843058350, -0.0002702213280, -0.0005527162978, -0.0005096579477, -0.0002579476861, -0.0000245472837, +0.0002517102616, +0.0001780684105, -0.0001044265594, -0.0001412474849, -0.0004237424547, -0.0005219315895, -0.0003070422535, -0.0003561368209, -0.0002211267606, +0.0000981891348, +0.0002088531187, +0.0002334004024, -0.0000921529175, -0.0004851106640, -0.0008104627767, -0.0013631790744, -0.0011851106640, -0.0006877263581, -0.0004420523139, +0.0000368209256, +0.0001289738431, -0.0001044265594, -0.0001535211268, -0.0003376257545, -0.0003008048290, -0.0002026156942, -0.0003130784708, -0.0002702213280, -0.0005034205231, -0.0007613682093, -0.0008595573441, -0.0011728370221, -0.0011360160966, -0.0006386317907, -0.0000185110664, +0.0005772635815, +0.0008227364185, +0.0009088531187, +0.0004973843058, -0.0000736418511, -0.0004420523139, -0.0010991951710, -0.0011360160966, -0.0004973843058, +0.0001104627767, +0.0002639839034, +0.0001903420523, +0.0004297786720, -0.0001718309859, -0.0006386317907, -0.0003315895372, -0.0002639839034, +0.0004175050302, +0.0008167002012, +0.0006018108652, +0.0006323943662, -0.0003130784708, -0.0012156941650, -0.0012710261569, -0.0018605633803, -0.0011851106640, -0.0002394366197, +0.0000122736419, +0.0008718309859, +0.0008167002012, -0.0003746478873, -0.0008104627767, -0.0008227364185, -0.0005219315895, +0.0000921529175, +0.0004175050302, +0.0007490945674, +0.0009271629779, +0.0009271629779, +0.0009885311871, +0.0008535211268, +0.0004420523139, +0.0001535211268, -0.0002702213280, -0.0003684104628, -0.0001289738431, -0.0001718309859, +0.0000613682093, +0.0003991951710, +0.0006201207243, +0.0008227364185, +0.0009088531187, +0.0008780684105, +0.0009947686117, +0.0008965794769, +0.0006814889336, +0.0007062374245, +0.0006386317907, +0.0008044265594, +0.0008903420523, +0.0008167002012, +0.0006877263581, +0.0006386317907, +0.0006814889336, +0.0007185110664, +0.0006446680080, +0.0006692152918, +0.0010070422535, +0.0013692152918, +0.0015472837022, +0.0014000000000, +0.0010561368209, +0.0007921529175, +0.0006386317907, +0.0003253521127, -0.0000613682093, -0.0002824949698, -0.0003376257545, +0.0000000000000, +0.0005404426559, +0.0007676056338, +0.0008903420523, +0.0012281690141, +0.0014122736419, +0.0012464788732, +0.0010193158954, +0.0007490945674, +0.0002702213280, +0.0000062374245, -0.0001167002012, +0.0000122736419, +0.0005772635815, +0.0010070422535, +0.0014553319920, +0.0015412474849, +0.0012096579477, +0.0010070422535, +0.0007921529175, +0.0008104627767, +0.0012772635815, +0.0016211267606, +0.0017929577465, +0.0015903420523, +0.0010684104628, +0.0007676056338, +0.0004911468813, +0.0003869215292, +0.0006446680080, +0.0007981891348, +0.0009088531187, +0.0011114688129, +0.0010929577465, +0.0007307847082, +0.0004605633803, +0.0003869215292, +0.0003623742455, +0.0006018108652, +0.0008780684105, +0.0010746478873, +0.0012404426559, +0.0013078470825, +0.0012895372233, +0.0010315895372, +0.0006201207243, +0.0001780684105, -0.0002517102616, -0.0003376257545, -0.0001167002012, +0.0001965794769, +0.0005649899396, +0.0006754527163, +0.0006692152918, +0.0005955734406, +0.0003869215292, +0.0002947686117, +0.0002762575453, +0.0004973843058, +0.0007430583501, +0.0007430583501, +0.0006569416499, +0.0002334004024, -0.0001595573441, -0.0001227364185, -0.0001227364185, -0.0000981891348, +0.0000000000000, +0.0000921529175, +0.0002639839034, +0.0004052313883, +0.0006140845070, +0.0007676056338, +0.0007490945674, +0.0008718309859, +0.0010253521127, +0.0009824949698, +0.0007185110664, +0.0003684104628, +0.0001227364185, -0.0000736418511, -0.0001780684105, -0.0001227364185, -0.0000798792757, +0.0000798792757, +0.0003623742455, +0.0004420523139, +0.0003193158954, +0.0004973843058, +0.0006263581489, +0.0005281690141, +0.0007122736419, +0.0007736418511, +0.0007368209256, +0.0008843058350, +0.0008167002012, +0.0005219315895, +0.0001412474849, -0.0002947686117, -0.0003746478873, -0.0004788732394, -0.0003991951710, +0.0000921529175, +0.0002824949698, +0.0003929577465, +0.0005832997988, +0.0005527162978, +0.0006631790744, +0.0007859154930, +0.0006631790744, +0.0006814889336, +0.0006386317907, +0.0004605633803, +0.0003008048290, +0.0001780684105, +0.0002088531187, +0.0003193158954, +0.0003929577465, +0.0004052313883, +0.0002762575453, +0.0001843058350, +0.0001167002012, +0.0001965794769, +0.0005772635815, +0.0009026156942, +0.0012034205231, +0.0012404426559, +0.0007368209256, +0.0001289738431, -0.0004665995976, -0.0006754527163, -0.0004052313883, -0.0000736418511, +0.0001595573441, +0.0001780684105, +0.0001289738431, +0.0002088531187, +0.0003561368209, +0.0005587525151, +0.0007490945674, +0.0009394366197, +0.0011911468813, +0.0011851106640, +0.0012464788732, +0.0012281690141, +0.0008104627767, +0.0003130784708, -0.0002394366197, -0.0007185110664, -0.0007553319920, -0.0006140845070, -0.0004665995976, -0.0001718309859, +0.0000613682093, +0.0002394366197, +0.0004728370221, +0.0006018108652, +0.0006263581489, +0.0006140845070, +0.0002394366197, -0.0000307847082, -0.0000798792757, -0.0003130784708, -0.0002271629779, +0.0000613682093, +0.0000981891348, +0.0000368209256, -0.0001965794769, -0.0004052313883, -0.0003070422535, -0.0000430583501, +0.0004543259557, +0.0008903420523, +0.0009639839034, +0.0010561368209, +0.0008718309859, +0.0003746478873, -0.0001289738431, -0.0006323943662, -0.0009088531187, -0.0010501006036, -0.0010991951710, -0.0007676056338, -0.0002271629779, +0.0001903420523, +0.0004175050302, +0.0004360160966, +0.0003438631791, +0.0002026156942, +0.0001167002012, +0.0000613682093, -0.0000062374245, -0.0000981891348, -0.0002271629779, -0.0003438631791, -0.0003130784708, -0.0003561368209, -0.0005219315895, -0.0003684104628, -0.0001412474849, -0.0001227364185, -0.0001227364185, -0.0001903420523, +0.0000000000000, +0.0003991951710, +0.0003991951710, +0.0003806841046, +0.0003315895372, -0.0000185110664, -0.0001903420523, -0.0002148893360, -0.0002088531187, -0.0000676056338, -0.0000307847082, -0.0001412474849, -0.0003070422535, -0.0004605633803, -0.0003253521127, +0.0000000000000, +0.0002148893360, +0.0003623742455, +0.0004665995976, +0.0003438631791, +0.0001289738431, -0.0000798792757, -0.0002762575453, -0.0003376257545, -0.0003070422535, -0.0002885311871, -0.0003806841046, -0.0007000000000, -0.0009148893360, -0.0008412474849, -0.0007185110664, -0.0004665995976, -0.0002211267606, -0.0001843058350, -0.0002148893360, -0.0001412474849, -0.0001350100604, -0.0002517102616, -0.0003991951710, -0.0005527162978, -0.0005955734406, -0.0006263581489, -0.0006692152918, -0.0006323943662, -0.0004973843058, -0.0002579476861, -0.0000307847082, +0.0000490945674, +0.0001595573441, +0.0003315895372, +0.0002947686117, +0.0001289738431, -0.0000122736419, -0.0002517102616, -0.0004297786720, -0.0004482897384, -0.0004175050302, -0.0002702213280, -0.0002211267606, -0.0003253521127, -0.0004114688129, -0.0004665995976, -0.0005527162978, -0.0005219315895, -0.0004851106640, -0.0005281690141, -0.0003746478873, -0.0000859154930, -0.0000676056338, -0.0002148893360, -0.0002148893360, -0.0002762575453, -0.0004052313883, -0.0002947686117, -0.0001718309859, -0.0002334004024, -0.0003193158954, -0.0004052313883, -0.0006386317907, -0.0007185110664, -0.0004482897384, -0.0002639839034, -0.0001535211268, -0.0000553319920, -0.0002026156942, -0.0004665995976, -0.0007062374245, -0.0008167002012, -0.0007613682093, -0.0009026156942, -0.0011973843058, -0.0012649899396, -0.0011360160966, -0.0007981891348, -0.0003623742455, -0.0001227364185, -0.0000921529175, -0.0002026156942, -0.0004297786720, -0.0005772635815, -0.0005034205231, -0.0003438631791, -0.0001472837022, +0.0000000000000, -0.0000430583501, -0.0001780684105, -0.0003684104628, -0.0005281690141, -0.0004728370221, -0.0004420523139, -0.0005649899396, -0.0006140845070, -0.0006446680080, -0.0006386317907, -0.0004851106640, -0.0003315895372, -0.0002517102616, -0.0002639839034, -0.0003991951710, -0.0005034205231, -0.0005342052314, -0.0004973843058, -0.0004175050302, -0.0003070422535, -0.0000736418511, +0.0000307847082, -0.0001412474849, -0.0003008048290, -0.0004114688129, -0.0004605633803, -0.0002885311871, -0.0001227364185, -0.0000676056338, -0.0001412474849, -0.0004543259557, -0.0006754527163, -0.0007307847082, -0.0008227364185, -0.0007859154930, -0.0006754527163, -0.0005156941650, -0.0003193158954, -0.0002456740443, -0.0002456740443, -0.0003070422535, -0.0004788732394, -0.0005955734406, -0.0005464788732, -0.0004665995976, -0.0003253521127, -0.0001843058350, -0.0002271629779, -0.0003315895372, -0.0004788732394, -0.0006754527163, -0.0007122736419, -0.0004973843058, -0.0003193158954, -0.0003130784708, -0.0003684104628, -0.0003991951710, -0.0002148893360, +0.0000676056338, +0.0002579476861, +0.0003623742455, +0.0002456740443, -0.0000430583501, -0.0002824949698, -0.0005281690141, -0.0007613682093, -0.0008350100604, -0.0007185110664, -0.0003561368209, +0.0000736418511, +0.0002334004024, +0.0001044265594, -0.0001350100604, -0.0003193158954, -0.0003193158954, -0.0002394366197, -0.0001289738431, -0.0000307847082, +0.0000000000000, +0.0000430583501, +0.0000798792757, -0.0000307847082, -0.0001472837022, -0.0001535211268, -0.0000859154930, -0.0000185110664, -0.0000062374245, +0.0000000000000, -0.0000245472837, -0.0000185110664, +0.0000553319920, +0.0001044265594, +0.0001350100604, +0.0001843058350, +0.0000368209256, -0.0003806841046, -0.0007921529175, -0.0009334004024, -0.0009211267606, -0.0007062374245, -0.0002148893360, +0.0002026156942, +0.0002517102616, +0.0000981891348, +0.0000062374245, -0.0000553319920, +0.0000122736419, +0.0003008048290, +0.0005342052314, +0.0005342052314, +0.0003130784708, -0.0000122736419, -0.0003561368209, -0.0006754527163, -0.0007798792757, -0.0006078470825, -0.0003130784708, -0.0000921529175, -0.0000676056338, -0.0001104627767, -0.0001535211268, -0.0001535211268, -0.0000185110664, +0.0000490945674, -0.0000307847082, -0.0001044265594, -0.0001535211268, -0.0001965794769, -0.0002271629779, -0.0002148893360, -0.0001843058350, -0.0002026156942, -0.0003008048290, -0.0004360160966, -0.0005219315895, -0.0004911468813, -0.0003684104628, -0.0002334004024, -0.0001350100604, -0.0001167002012, -0.0001843058350, -0.0001780684105, -0.0000553319920, -0.0000062374245, -0.0001227364185, -0.0003008048290, -0.0003008048290, -0.0001412474849, -0.0000185110664, +0.0000859154930, +0.0001044265594, -0.0000245472837, -0.0001535211268, -0.0003008048290, -0.0003746478873, -0.0002824949698, -0.0002026156942, -0.0001657947686, -0.0001535211268, -0.0001227364185, +0.0000307847082, +0.0001227364185, +0.0001227364185, +0.0001350100604, +0.0001044265594, +0.0000185110664, -0.0000676056338, -0.0000368209256, +0.0000921529175, +0.0000553319920, -0.0000676056338, -0.0001412474849, -0.0001227364185, +0.0000430583501, +0.0001350100604, +0.0001289738431, +0.0001104627767, -0.0000736418511, -0.0003315895372, -0.0003929577465, -0.0003746478873, -0.0002148893360, +0.0000676056338, +0.0002271629779, +0.0004052313883, +0.0004911468813, +0.0002762575453, -0.0000185110664, -0.0002824949698, -0.0004237424547, -0.0002947686117, -0.0003070422535, -0.0003253521127, -0.0001412474849, -0.0001412474849, -0.0002088531187, -0.0002211267606, -0.0001535211268, -0.0000307847082, -0.0001104627767, -0.0002947686117, -0.0003501006036, -0.0004052313883, -0.0001535211268, +0.0002639839034, +0.0004728370221, +0.0005096579477, +0.0002824949698, +0.0000185110664, +0.0000307847082, +0.0000798792757, +0.0002148893360, +0.0003929577465, +0.0001843058350, +0.0000062374245, +0.0001104627767, +0.0001289738431, +0.0001289738431, +0.0002271629779, +0.0001657947686, -0.0000553319920, -0.0002885311871, -0.0003684104628, -0.0003501006036, -0.0002148893360, +0.0001167002012, +0.0002517102616, +0.0000676056338, -0.0001472837022, -0.0001965794769, -0.0000736418511, +0.0001412474849, +0.0002579476861, +0.0002824949698, +0.0003070422535, +0.0002026156942, +0.0002334004024, +0.0004360160966, +0.0005281690141, +0.0005034205231, +0.0004114688129, +0.0001718309859, +0.0000736418511, -0.0000921529175, -0.0001595573441, +0.0000122736419, +0.0000553319920, +0.0001843058350, +0.0005219315895, +0.0007245472837, +0.0008412474849, +0.0008718309859, +0.0007307847082, +0.0005895372233, +0.0002885311871, -0.0000430583501, -0.0001718309859, -0.0001535211268, -0.0000490945674, +0.0001104627767, +0.0003315895372, +0.0004420523139, +0.0004360160966, +0.0005404426559, +0.0005710261569, +0.0004420523139, +0.0004482897384, +0.0004911468813, +0.0003929577465, +0.0003193158954, +0.0003008048290, +0.0002211267606, +0.0000490945674, -0.0000736418511, -0.0000122736419, +0.0000122736419, -0.0000062374245, +0.0000798792757, +0.0001289738431, +0.0000798792757, +0.0000676056338, +0.0000490945674, +0.0000245472837, +0.0000307847082, +0.0000122736419, +0.0001044265594, +0.0001718309859, +0.0001350100604, +0.0001350100604, +0.0001167002012, +0.0000981891348, +0.0001289738431, +0.0001167002012, +0.0001472837022, +0.0001843058350, +0.0000981891348, +0.0001535211268, +0.0003193158954, +0.0004482897384, +0.0006569416499, +0.0008903420523, +0.0008412474849, +0.0005034205231, +0.0001104627767, -0.0002088531187, -0.0003193158954, -0.0002148893360, -0.0000307847082, +0.0000981891348, +0.0001780684105, +0.0002334004024, +0.0003438631791, +0.0004482897384, +0.0005527162978, +0.0006446680080, +0.0006201207243, +0.0004360160966, +0.0001903420523, +0.0001227364185, +0.0001843058350, +0.0002456740443, +0.0003623742455, +0.0003991951710, +0.0003561368209, +0.0004114688129, +0.0004851106640, +0.0004543259557, +0.0003193158954, +0.0002885311871, +0.0003130784708, +0.0002211267606, +0.0002271629779, +0.0004052313883, +0.0005649899396, +0.0006078470825, +0.0005034205231, +0.0003253521127, +0.0001350100604, -0.0000430583501, -0.0000613682093, +0.0000185110664, +0.0000307847082, +0.0000798792757, +0.0002026156942, +0.0003315895372, +0.0004360160966, +0.0005342052314, +0.0004788732394, +0.0004052313883, +0.0002885311871, +0.0000613682093, +0.0000245472837, +0.0001044265594, +0.0001044265594, +0.0002026156942, +0.0002456740443, +0.0002762575453, +0.0005156941650, +0.0005832997988, +0.0005281690141, +0.0004728370221, +0.0003684104628, +0.0003008048290, +0.0002885311871, +0.0002885311871, +0.0003501006036, +0.0003376257545, +0.0001044265594, -0.0001167002012, -0.0001903420523, -0.0001595573441, -0.0000307847082, +0.0002517102616, +0.0004420523139, +0.0004543259557, +0.0003501006036, +0.0001104627767, -0.0000553319920, -0.0001780684105, -0.0001350100604, +0.0000859154930, +0.0002762575453, +0.0003193158954, +0.0002824949698, +0.0001535211268, +0.0000676056338, -0.0000122736419, -0.0000981891348, -0.0000430583501, +0.0000368209256, +0.0001104627767, +0.0001350100604, +0.0001044265594, -0.0000553319920, -0.0002211267606, -0.0002026156942, -0.0001167002012, -0.0000062374245, +0.0000921529175, +0.0001595573441, +0.0002334004024, +0.0003008048290, +0.0003315895372, +0.0003008048290, +0.0001595573441, +0.0000613682093, -0.0000122736419, -0.0001167002012, -0.0000798792757, -0.0000307847082, +0.0000062374245, +0.0000921529175, +0.0000859154930, +0.0000921529175, +0.0001965794769, +0.0003008048290, +0.0005034205231, +0.0006631790744, +0.0006018108652, +0.0004297786720, +0.0002271629779, +0.0001412474849, +0.0001718309859, +0.0001350100604, +0.0001104627767, +0.0001903420523, +0.0001472837022, +0.0000490945674, -0.0000122736419, +0.0000000000000, +0.0000062374245, -0.0000553319920, -0.0000736418511, -0.0000676056338, -0.0000613682093, -0.0000613682093, -0.0001227364185, -0.0001044265594, +0.0000122736419, +0.0002088531187, +0.0003623742455, +0.0003623742455, +0.0003623742455, +0.0003438631791, +0.0001595573441, +0.0000490945674, +0.0001044265594, +0.0002271629779, +0.0003376257545, +0.0003253521127, +0.0002579476861, +0.0001104627767, -0.0000613682093, -0.0001104627767, -0.0001167002012, -0.0001595573441, -0.0002517102616, -0.0004052313883, -0.0004420523139, -0.0003684104628, -0.0002702213280, -0.0000245472837, +0.0001595573441, +0.0001718309859, +0.0002271629779, +0.0002947686117, +0.0002885311871, +0.0002271629779, +0.0001595573441, +0.0001289738431, +0.0000000000000, -0.0001350100604, -0.0001412474849, -0.0001472837022, -0.0001044265594, +0.0000000000000, +0.0000490945674, +0.0000553319920, +0.0001350100604, +0.0002211267606, +0.0002334004024, +0.0001350100604, -0.0000798792757, -0.0003746478873, -0.0006754527163, -0.0008289738431, -0.0006323943662, -0.0002148893360, +0.0001289738431, +0.0003253521127, +0.0003376257545, +0.0002334004024, +0.0000981891348, -0.0000307847082, -0.0000553319920, -0.0000736418511, -0.0001227364185, -0.0000430583501, +0.0000430583501, +0.0000430583501, +0.0000122736419, -0.0001167002012, -0.0002824949698, -0.0003929577465, -0.0003806841046, -0.0001843058350, +0.0000185110664, +0.0001535211268, +0.0001289738431, -0.0001104627767, -0.0003438631791, -0.0003869215292, -0.0003193158954, -0.0001104627767, +0.0000122736419, -0.0000859154930, -0.0002762575453, -0.0004297786720, -0.0004728370221, -0.0005096579477, -0.0004728370221, -0.0002639839034, -0.0000859154930, -0.0000122736419, +0.0000676056338, +0.0000368209256, -0.0000981891348, -0.0001843058350, -0.0002579476861, -0.0003501006036, -0.0004175050302, -0.0003869215292, -0.0002885311871, -0.0002088531187, -0.0001657947686, -0.0001718309859, -0.0002517102616, -0.0003070422535, -0.0002639839034, -0.0001595573441, -0.0001044265594, -0.0000921529175, -0.0001780684105, -0.0003929577465, -0.0004911468813, -0.0004175050302, -0.0003315895372, -0.0001965794769, -0.0000921529175, -0.0000613682093, -0.0000490945674, -0.0001227364185, -0.0001350100604, -0.0001104627767, -0.0001289738431, +0.0000307847082, +0.0002088531187, +0.0002148893360, +0.0001965794769, +0.0001104627767, -0.0000062374245, -0.0001350100604, -0.0003684104628, -0.0005156941650, -0.0006078470825, -0.0006937625755, -0.0005587525151, -0.0003193158954, -0.0001472837022, +0.0000613682093, +0.0002088531187, +0.0002394366197, +0.0003130784708, +0.0002947686117, +0.0001780684105, +0.0000921529175, -0.0000553319920, -0.0002702213280, -0.0004237424547, -0.0004973843058, -0.0004237424547, -0.0002639839034, -0.0001412474849, +0.0000245472837, +0.0001718309859, +0.0002088531187, +0.0002271629779, +0.0002334004024, +0.0001965794769, +0.0000981891348, -0.0000368209256, -0.0001595573441, -0.0002885311871, -0.0003623742455, -0.0002579476861, -0.0001350100604, -0.0000736418511, -0.0000430583501, -0.0000859154930, -0.0001289738431, -0.0001167002012, -0.0000921529175, -0.0000798792757, -0.0000921529175, -0.0000736418511, -0.0000736418511, +0.0000000000000, +0.0001289738431, +0.0001595573441, +0.0001780684105, +0.0001535211268, +0.0000490945674, +0.0000490945674, +0.0001167002012, +0.0001167002012, -0.0000062374245, -0.0001412474849, -0.0001780684105, -0.0001718309859, -0.0000736418511, +0.0000000000000, -0.0000245472837, -0.0000185110664, -0.0001657947686, -0.0003806841046, -0.0004297786720, -0.0002947686117, -0.0000368209256, +0.0001718309859, +0.0002088531187, +0.0001595573441, +0.0000368209256, -0.0000185110664, -0.0000490945674, -0.0001780684105, -0.0001843058350, -0.0000859154930, -0.0001227364185, -0.0000676056338, +0.0001472837022, +0.0002947686117, +0.0003315895372, +0.0002456740443, +0.0000981891348, -0.0000921529175, -0.0003253521127, -0.0003869215292, -0.0003315895372, -0.0002456740443, -0.0000736418511, -0.0000122736419, +0.0000185110664, +0.0001044265594, +0.0000859154930, +0.0000981891348, +0.0000921529175, -0.0000613682093, -0.0002088531187, -0.0002824949698, -0.0003130784708, -0.0002702213280, -0.0002148893360, -0.0002148893360, -0.0002088531187, -0.0001903420523, -0.0001167002012, -0.0000062374245, -0.0000062374245, -0.0000490945674, -0.0000307847082, +0.0000000000000, +0.0000981891348, +0.0001718309859, +0.0001104627767, +0.0000430583501, -0.0000613682093, -0.0002211267606, -0.0003070422535, -0.0003315895372, -0.0002824949698, -0.0001227364185, -0.0000185110664, -0.0000062374245, -0.0000921529175, -0.0002148893360, -0.0002762575453, -0.0003376257545, -0.0003253521127, -0.0001843058350, -0.0000859154930, -0.0000245472837, +0.0000307847082, +0.0000245472837, +0.0000307847082, -0.0000122736419, -0.0000430583501, +0.0000185110664, +0.0000368209256, +0.0000921529175, +0.0001535211268, +0.0000981891348, +0.0000553319920, +0.0000245472837, -0.0000307847082, -0.0000185110664, -0.0000430583501, -0.0001167002012, -0.0001350100604, -0.0001595573441, -0.0002088531187, -0.0002211267606, -0.0002211267606, -0.0001780684105, -0.0001535211268, -0.0001412474849, -0.0001289738431, -0.0001227364185, -0.0001167002012, +0.0000062374245, +0.0002088531187, +0.0002579476861, +0.0001965794769, +0.0000062374245, -0.0002394366197, -0.0003929577465, -0.0004728370221, -0.0003869215292, -0.0001535211268, +0.0000430583501, +0.0002026156942, +0.0001903420523, -0.0000062374245, -0.0001227364185, -0.0002885311871, -0.0004605633803, -0.0004665995976, -0.0004360160966, -0.0003623742455, -0.0002211267606, -0.0001167002012, -0.0000245472837, +0.0000245472837, +0.0000368209256, +0.0000553319920, +0.0000430583501, +0.0000368209256, +0.0000859154930, +0.0001535211268, +0.0001472837022, +0.0000245472837, -0.0001104627767, -0.0002334004024, -0.0003376257545, -0.0003929577465, -0.0004360160966, -0.0004728370221, -0.0003929577465, -0.0001965794769, -0.0000245472837, +0.0000921529175, +0.0002026156942, +0.0002456740443, +0.0001657947686, +0.0000859154930, -0.0000490945674, -0.0001350100604, -0.0000798792757, +0.0000000000000, +0.0000368209256, -0.0000062374245, -0.0000921529175, -0.0001227364185, -0.0001167002012, -0.0000490945674, +0.0000368209256, +0.0000859154930, +0.0000859154930, +0.0000122736419, -0.0001350100604, -0.0002334004024, -0.0001657947686, +0.0000000000000, +0.0000736418511, +0.0001350100604, +0.0001535211268, +0.0000798792757, +0.0000736418511, +0.0001595573441, +0.0002211267606, +0.0001843058350, +0.0000430583501, -0.0000553319920, -0.0001044265594, -0.0000859154930, +0.0000368209256, +0.0001657947686, +0.0002517102616, +0.0002579476861, +0.0001535211268, +0.0000307847082, -0.0000798792757, -0.0001289738431, -0.0000736418511, -0.0000185110664, +0.0000122736419, +0.0000859154930, +0.0001167002012, +0.0001167002012, +0.0001965794769, +0.0003130784708, +0.0004665995976, +0.0005096579477, +0.0003991951710, +0.0002456740443, +0.0000859154930, +0.0000122736419, +0.0000553319920, +0.0000676056338, +0.0001167002012, +0.0002088531187, +0.0002517102616, +0.0002211267606, +0.0001350100604, +0.0001289738431, +0.0002271629779, +0.0003623742455, +0.0004420523139, +0.0003438631791, +0.0002088531187, +0.0001843058350, +0.0001965794769, +0.0002211267606, +0.0002026156942, +0.0000981891348, +0.0000613682093, +0.0000736418511, +0.0000307847082, -0.0000368209256, -0.0000613682093, +0.0000736418511, +0.0002947686117, +0.0003376257545, +0.0002148893360, +0.0000553319920, -0.0000613682093, -0.0001104627767, -0.0001780684105, -0.0002394366197, -0.0001595573441, -0.0000245472837, +0.0001104627767, +0.0002271629779, +0.0002271629779, +0.0002271629779, +0.0002456740443, +0.0001718309859, +0.0000490945674, -0.0000185110664, -0.0000307847082, +0.0000000000000, +0.0000921529175, +0.0002271629779, +0.0003561368209, +0.0004788732394, +0.0004851106640, +0.0002579476861, -0.0000981891348, -0.0003561368209, -0.0003806841046, -0.0002456740443, -0.0000245472837, +0.0002148893360, +0.0003253521127, +0.0002947686117, +0.0002334004024, +0.0002026156942, +0.0001718309859, +0.0001227364185, +0.0000553319920, -0.0000430583501, -0.0001412474849, -0.0001595573441, -0.0001227364185, -0.0000185110664, +0.0001167002012, +0.0002211267606, +0.0002271629779, +0.0001044265594, -0.0000368209256, -0.0001535211268, -0.0002639839034, -0.0002824949698, -0.0001780684105, -0.0000676056338, -0.0000430583501, -0.0001044265594, -0.0001044265594, -0.0000185110664, +0.0000736418511, +0.0001412474849, +0.0001780684105, +0.0001227364185, -0.0000185110664, -0.0001843058350, -0.0003253521127, -0.0004297786720, -0.0003684104628, -0.0002026156942, -0.0000921529175, -0.0000245472837, -0.0000245472837, -0.0001044265594, -0.0001595573441, -0.0001289738431, -0.0000490945674, +0.0000307847082, +0.0000921529175, +0.0001289738431, +0.0001167002012, +0.0000062374245, -0.0000553319920, -0.0000185110664, +0.0000122736419, +0.0000307847082, +0.0001044265594, +0.0000981891348, +0.0000430583501, +0.0000430583501, +0.0000185110664, +0.0000430583501, +0.0001289738431, +0.0000736418511, -0.0000859154930, -0.0002026156942, -0.0002579476861, -0.0002088531187, -0.0000553319920, +0.0000307847082, +0.0000490945674, -0.0000062374245, -0.0001472837022, -0.0001965794769, -0.0001289738431, -0.0000613682093, +0.0000490945674, +0.0001227364185, +0.0000921529175, +0.0001167002012, +0.0001289738431, +0.0000676056338, +0.0000553319920, +0.0000553319920, +0.0000307847082, +0.0000000000000, +0.0000062374245, +0.0000676056338, +0.0001167002012, +0.0001167002012, +0.0001289738431, +0.0001657947686, +0.0002088531187, +0.0001718309859, +0.0000798792757, +0.0000613682093, +0.0000307847082, +0.0000062374245, +0.0000613682093, +0.0001535211268, +0.0002211267606, +0.0002271629779, +0.0002026156942, +0.0001657947686, +0.0001227364185, +0.0001104627767, +0.0000859154930, +0.0000676056338, +0.0000613682093, +0.0000368209256, +0.0001227364185, +0.0002334004024, +0.0002702213280, +0.0003130784708, +0.0002702213280, +0.0002088531187, +0.0002026156942, +0.0001780684105, +0.0002271629779, +0.0003315895372, +0.0003376257545, +0.0003193158954, +0.0002456740443, +0.0001535211268, +0.0001289738431, +0.0000921529175, +0.0000245472837, +0.0000062374245, +0.0000430583501, +0.0000981891348, +0.0001535211268, +0.0001843058350, +0.0002148893360, +0.0002211267606, +0.0001535211268, +0.0000736418511, +0.0000490945674, +0.0000185110664, +0.0000185110664, +0.0000430583501, +0.0000430583501, +0.0000307847082, +0.0000245472837, +0.0000368209256, +0.0001104627767, +0.0002517102616, +0.0004114688129, +0.0005342052314, +0.0005649899396, +0.0005096579477, +0.0003315895372, +0.0001167002012, -0.0000122736419, -0.0000736418511, -0.0001167002012, -0.0001227364185, -0.0000859154930, -0.0000921529175, -0.0001044265594, -0.0000553319920, +0.0000185110664, +0.0001044265594, +0.0001903420523, +0.0002148893360, +0.0001780684105, +0.0001104627767, +0.0000430583501, +0.0000062374245, -0.0000062374245, +0.0000000000000, +0.0000245472837, -0.0000368209256, -0.0000676056338, -0.0000122736419, -0.0000245472837, -0.0000368209256, -0.0000062374245, -0.0000062374245, +0.0000245472837, +0.0000981891348, +0.0001595573441, +0.0001843058350, +0.0001289738431, +0.0000676056338, +0.0000000000000, -0.0001104627767, -0.0001595573441, -0.0001472837022, -0.0001167002012, -0.0000122736419, +0.0000553319920, +0.0000430583501, -0.0000122736419, -0.0000368209256, +0.0000000000000, +0.0000122736419, +0.0000000000000, +0.0000245472837, +0.0000490945674, +0.0001044265594, +0.0001595573441, +0.0001350100604, +0.0000307847082, -0.0000736418511, -0.0000859154930, -0.0000921529175, -0.0001044265594, -0.0000490945674, -0.0000368209256, -0.0000245472837, +0.0000000000000, -0.0000185110664, -0.0000859154930, -0.0001472837022, -0.0001780684105, -0.0001227364185, -0.0000185110664, +0.0000676056338, +0.0000798792757, -0.0000245472837, -0.0001780684105, -0.0002824949698, -0.0003193158954, -0.0002947686117, -0.0002517102616, -0.0002148893360, -0.0001657947686, -0.0001104627767, -0.0000245472837, +0.0000613682093, +0.0001472837022, +0.0001843058350, +0.0001535211268, +0.0000981891348, +0.0000307847082, -0.0000062374245, +0.0000062374245, +0.0000000000000, -0.0000062374245, +0.0000000000000, -0.0000798792757, -0.0001350100604, -0.0001227364185, -0.0001412474849, -0.0001657947686, -0.0001657947686, -0.0001227364185, -0.0000307847082, +0.0000490945674, +0.0000368209256, -0.0000122736419, -0.0000490945674, -0.0000307847082, +0.0000430583501, +0.0000921529175, +0.0000613682093, +0.0000245472837, +0.0000000000000, -0.0000122736419, -0.0000307847082, -0.0000676056338, -0.0000553319920, +0.0000000000000, +0.0000185110664, +0.0000245472837, -0.0000430583501, -0.0001412474849, -0.0001412474849, -0.0001044265594, -0.0000368209256, +0.0000613682093, +0.0001227364185, +0.0001227364185, +0.0000613682093, -0.0000307847082, -0.0001044265594, -0.0001535211268, -0.0001289738431, -0.0000553319920, +0.0000000000000, +0.0000859154930, +0.0002026156942, +0.0002702213280, +0.0002762575453, +0.0001595573441, -0.0000245472837, -0.0001412474849, -0.0001780684105, -0.0002026156942, -0.0001965794769, -0.0001412474849, -0.0000613682093, +0.0000490945674, +0.0001412474849, +0.0001535211268, +0.0001472837022, +0.0001167002012, +0.0000000000000, -0.0001044265594, -0.0001472837022, -0.0001535211268, -0.0000798792757, -0.0000062374245, +0.0000062374245, +0.0000185110664, +0.0000185110664, -0.0000368209256, -0.0000981891348, -0.0001289738431, -0.0001843058350, -0.0001780684105, -0.0001044265594, -0.0000430583501, +0.0000000000000, +0.0000122736419, -0.0000307847082, -0.0001104627767, -0.0001227364185, -0.0001104627767, -0.0000859154930, -0.0000245472837, -0.0000062374245, -0.0000185110664, -0.0000368209256, -0.0000245472837, +0.0000430583501, +0.0001657947686, +0.0002148893360, +0.0002334004024, +0.0001780684105, +0.0000553319920, -0.0000676056338, -0.0001843058350, -0.0003130784708, -0.0003869215292, -0.0003008048290, -0.0001227364185, +0.0000613682093, +0.0002088531187, +0.0002088531187, +0.0001289738431, +0.0000245472837, -0.0000859154930, -0.0001843058350, -0.0001843058350, -0.0001227364185, -0.0000676056338, -0.0000490945674, -0.0000245472837, +0.0000062374245, +0.0000062374245, +0.0000245472837, +0.0001289738431, +0.0002394366197, +0.0003130784708, +0.0003253521127, +0.0002702213280, +0.0001843058350, +0.0000490945674, -0.0000921529175, -0.0001965794769, -0.0002639839034, -0.0002211267606, -0.0000921529175, -0.0000185110664, +0.0000368209256, +0.0000859154930, +0.0000981891348, +0.0001104627767, +0.0001412474849, +0.0001595573441, +0.0001350100604, +0.0000245472837, -0.0000490945674, -0.0001104627767, -0.0001535211268, -0.0000981891348, -0.0000430583501, -0.0000613682093, -0.0000736418511, -0.0001289738431, -0.0001965794769, -0.0001965794769, -0.0000981891348, +0.0000122736419, +0.0000736418511, +0.0000981891348, +0.0001044265594, +0.0000798792757, +0.0000553319920, +0.0000430583501, +0.0000490945674, +0.0000245472837, -0.0000307847082, -0.0001227364185, -0.0002639839034, -0.0003253521127, -0.0002456740443, -0.0001903420523, -0.0001167002012, +0.0000062374245, +0.0001167002012, +0.0002026156942, +0.0002456740443, +0.0002394366197, +0.0002271629779, +0.0001535211268, +0.0000307847082, -0.0000676056338, -0.0001289738431, -0.0001412474849, -0.0001412474849, -0.0001780684105, -0.0002639839034, -0.0003070422535, -0.0002639839034, -0.0001903420523, -0.0000676056338, +0.0000798792757, +0.0001412474849, +0.0001412474849, +0.0000921529175, +0.0000122736419, -0.0000307847082, -0.0000368209256, -0.0000122736419, +0.0000368209256, -0.0000245472837, -0.0001843058350, -0.0002824949698, -0.0003008048290, -0.0002211267606, -0.0000613682093, +0.0000798792757, +0.0001843058350, +0.0001843058350, +0.0000921529175, -0.0000245472837, -0.0001535211268, -0.0002579476861, -0.0002456740443, -0.0001965794769, -0.0001472837022, -0.0001044265594, -0.0000798792757, -0.0000676056338, -0.0000307847082, +0.0000430583501, +0.0001104627767, +0.0001289738431, +0.0001167002012, +0.0000859154930, +0.0000490945674, +0.0000307847082, -0.0000490945674, -0.0001965794769, -0.0002762575453, -0.0002639839034, -0.0002026156942, -0.0000859154930, +0.0000245472837, +0.0000553319920, +0.0000122736419, +0.0000000000000, +0.0000000000000, -0.0000185110664, +0.0000000000000, +0.0000553319920, +0.0001104627767, +0.0001227364185, +0.0000798792757, +0.0000185110664, -0.0000736418511, -0.0001167002012, -0.0000553319920, -0.0000245472837, -0.0000613682093, -0.0000981891348, -0.0001412474849, -0.0001472837022, -0.0001044265594, -0.0000062374245, +0.0000921529175, +0.0001227364185, +0.0001472837022, +0.0001412474849, +0.0000307847082, -0.0000613682093, -0.0000921529175, -0.0000736418511, +0.0000000000000, +0.0000368209256, +0.0000490945674, +0.0000613682093, +0.0000490945674, +0.0000245472837, -0.0000368209256, -0.0001167002012, -0.0001104627767, -0.0000921529175, -0.0000613682093, -0.0000307847082, -0.0000430583501, -0.0000245472837, +0.0000185110664, +0.0000000000000, +0.0000062374245, +0.0000122736419, -0.0000185110664, -0.0000676056338, -0.0001227364185, -0.0001350100604, -0.0000736418511, +0.0000245472837, +0.0001535211268, +0.0001780684105, +0.0001044265594, +0.0000430583501, +0.0000122736419, +0.0000185110664, +0.0000490945674, +0.0000307847082, +0.0000000000000, -0.0000368209256, -0.0000798792757, -0.0000798792757, -0.0000676056338, -0.0000430583501, -0.0000122736419, +0.0000000000000, +0.0000307847082, +0.0000798792757, +0.0001104627767, +0.0001412474849, +0.0001472837022, +0.0001412474849, +0.0001595573441, +0.0001657947686, +0.0001044265594, +0.0000245472837, -0.0000245472837, -0.0000490945674, -0.0000613682093, -0.0000430583501, -0.0000122736419, +0.0000000000000, +0.0000122736419, +0.0000307847082, +0.0000368209256, +0.0000430583501, +0.0000553319920, +0.0000859154930, +0.0000736418511, +0.0000368209256, +0.0000307847082, +0.0000245472837, -0.0000122736419, -0.0000553319920, -0.0000921529175, -0.0001227364185, -0.0001595573441, -0.0001657947686, -0.0001227364185, -0.0000676056338, -0.0000368209256, +0.0000062374245, +0.0000490945674, +0.0000307847082, +0.0000245472837, +0.0000307847082, +0.0000062374245, +0.0000307847082, +0.0000676056338, +0.0000981891348, +0.0001227364185, +0.0001104627767, +0.0000676056338, +0.0000553319920, +0.0000798792757, +0.0001104627767, +0.0001472837022, +0.0001657947686, +0.0001044265594, -0.0000062374245, -0.0000430583501, -0.0000736418511, -0.0001350100604, -0.0001535211268, -0.0001227364185, -0.0000430583501, +0.0000000000000, +0.0000000000000, -0.0000062374245, -0.0000490945674, -0.0000859154930, -0.0000307847082, +0.0000490945674, +0.0001104627767, +0.0001412474849, +0.0001104627767, +0.0000553319920, +0.0000185110664, -0.0000062374245, -0.0000368209256, -0.0000185110664, +0.0000307847082, +0.0000490945674, -0.0000122736419, -0.0001104627767, -0.0002088531187, -0.0002456740443, -0.0001780684105, -0.0001044265594, -0.0000553319920, -0.0000245472837, -0.0000122736419, -0.0000062374245, -0.0000245472837, -0.0000676056338, -0.0000490945674, +0.0000062374245, +0.0000430583501, +0.0000368209256, +0.0000368209256, +0.0000676056338, +0.0000981891348, +0.0001289738431, +0.0001472837022, +0.0001044265594, +0.0000185110664, -0.0000736418511, -0.0001350100604, -0.0001535211268, -0.0001472837022, -0.0000921529175, +0.0000245472837, +0.0001227364185, +0.0001595573441, +0.0001289738431, +0.0000553319920, +0.0000000000000, -0.0000062374245, +0.0000185110664, +0.0000798792757, +0.0000736418511, +0.0000000000000, -0.0000859154930, -0.0001718309859, -0.0002211267606, -0.0002026156942, -0.0001167002012, -0.0000368209256, +0.0000000000000, +0.0000185110664, +0.0000185110664, +0.0000122736419, +0.0000490945674, +0.0000859154930, +0.0001044265594, +0.0001350100604, +0.0001167002012, +0.0000490945674, -0.0000062374245, -0.0000490945674, -0.0000736418511, -0.0001289738431, -0.0002148893360, -0.0002394366197, -0.0001903420523, -0.0001167002012, +0.0000000000000, +0.0001104627767, +0.0001535211268, +0.0001289738431, +0.0000921529175, +0.0000553319920, -0.0000062374245, -0.0000736418511, -0.0001104627767, -0.0001104627767, -0.0000981891348, -0.0000676056338, -0.0000430583501, -0.0000368209256, -0.0000430583501, -0.0000490945674, -0.0000676056338, -0.0000859154930, -0.0000859154930, -0.0000553319920, +0.0000062374245, +0.0001044265594, +0.0001903420523, +0.0001965794769, +0.0001535211268, +0.0000798792757, -0.0000062374245, -0.0000430583501, -0.0000245472837, +0.0000307847082, +0.0001104627767, +0.0001350100604, +0.0000736418511, +0.0000185110664, +0.0000000000000, +0.0000430583501, +0.0000921529175, +0.0001167002012, +0.0001167002012, +0.0000676056338, +0.0000062374245, -0.0000307847082, -0.0000798792757, -0.0000981891348, -0.0000613682093, +0.0000122736419, +0.0000798792757, +0.0000859154930, +0.0000676056338, +0.0000553319920, +0.0000368209256, +0.0000245472837, +0.0000185110664, +0.0000307847082, +0.0000245472837, -0.0000062374245, -0.0000307847082, +0.0000000000000, +0.0000736418511, +0.0001595573441, +0.0002026156942, +0.0001718309859, +0.0000553319920, -0.0000859154930, -0.0001412474849, -0.0001104627767, -0.0000368209256, +0.0000307847082, +0.0000859154930, +0.0001227364185, +0.0001535211268, +0.0001657947686, +0.0001535211268, +0.0001289738431, +0.0001044265594, +0.0000736418511, +0.0000430583501, +0.0000000000000, -0.0000185110664, +0.0000368209256, +0.0001350100604, +0.0001780684105, +0.0001535211268, +0.0000859154930, +0.0000553319920, +0.0001044265594, +0.0001535211268, +0.0001718309859, +0.0001535211268, +0.0001104627767, +0.0000490945674, -0.0000062374245, -0.0000245472837, -0.0000185110664, -0.0000122736419, -0.0000245472837, -0.0000490945674, -0.0000553319920, -0.0000307847082, +0.0000122736419, +0.0000798792757, +0.0001350100604, +0.0001289738431, +0.0001044265594, +0.0000736418511, +0.0000185110664, -0.0000307847082, -0.0000676056338, -0.0000736418511, +0.0000062374245, +0.0001104627767, +0.0001289738431, +0.0000921529175, +0.0000062374245, -0.0000676056338, -0.0001104627767, -0.0001350100604, -0.0001044265594, -0.0000307847082, +0.0000185110664, +0.0000490945674, +0.0000490945674, +0.0000245472837, +0.0000307847082, +0.0000676056338, +0.0000981891348, +0.0001167002012, +0.0001167002012, +0.0000981891348, +0.0000676056338, +0.0000490945674, +0.0000553319920, +0.0000676056338, +0.0000859154930, +0.0000981891348, +0.0000245472837, -0.0000430583501, -0.0000613682093, -0.0000490945674, -0.0000368209256, +0.0000000000000, +0.0000613682093, +0.0001167002012, +0.0001167002012, +0.0000921529175, +0.0000368209256, -0.0000307847082, -0.0000613682093, -0.0000307847082, +0.0000307847082, +0.0001227364185, +0.0002026156942, +0.0002517102616, +0.0002334004024, +0.0001595573441, +0.0000981891348, +0.0000490945674, +0.0000245472837, +0.0000185110664, -0.0000185110664, -0.0000921529175, -0.0001718309859, -0.0002394366197, -0.0002271629779, -0.0001535211268, -0.0000981891348, -0.0000245472837, +0.0000613682093, +0.0000981891348, +0.0001044265594, +0.0000921529175, +0.0000613682093, +0.0000307847082, +0.0000062374245, -0.0000185110664, -0.0000368209256, -0.0000368209256, -0.0000490945674, -0.0000981891348, -0.0001289738431, -0.0001350100604, -0.0000676056338, +0.0000122736419, +0.0000490945674, +0.0000613682093, +0.0000430583501, -0.0000430583501, -0.0001227364185, -0.0002026156942, -0.0002639839034, -0.0002334004024, -0.0001657947686, -0.0000921529175, -0.0000430583501, -0.0000490945674, -0.0000859154930, -0.0001167002012, -0.0001167002012, -0.0000613682093, -0.0000122736419, +0.0000122736419, +0.0000368209256, +0.0000430583501, +0.0000430583501, +0.0000185110664, -0.0000613682093, -0.0001412474849, -0.0001780684105, -0.0001595573441, -0.0000921529175, -0.0000245472837, +0.0000185110664, +0.0000553319920, +0.0000185110664, -0.0000553319920, -0.0001167002012, -0.0001780684105, -0.0001843058350, -0.0001167002012, -0.0000490945674, +0.0000000000000, +0.0000245472837, +0.0000307847082, +0.0000000000000, -0.0000859154930, -0.0001780684105, -0.0001965794769, -0.0001718309859, -0.0001227364185, -0.0000553319920, +0.0000062374245, +0.0000490945674, +0.0000676056338, +0.0000676056338, +0.0000307847082, +0.0000000000000, +0.0000245472837, +0.0000676056338, +0.0000676056338, +0.0000368209256, -0.0000307847082, -0.0000981891348, -0.0001657947686, -0.0002088531187, -0.0001718309859, -0.0001104627767, -0.0000798792757, -0.0000307847082, -0.0000307847082, -0.0000676056338, -0.0000736418511, -0.0000676056338, -0.0000430583501, +0.0000000000000, +0.0000368209256, +0.0000368209256, +0.0000000000000, -0.0000368209256, -0.0000368209256, -0.0000185110664, +0.0000122736419, +0.0000430583501, +0.0000185110664, +0.0000000000000, -0.0000185110664, -0.0000185110664, +0.0000000000000, +0.0000245472837, +0.0000430583501, +0.0000553319920, +0.0000368209256, +0.0000245472837, +0.0000185110664, +0.0000000000000, -0.0000122736419, -0.0000368209256, -0.0000553319920, -0.0000490945674, -0.0000245472837, +0.0000000000000, +0.0000245472837, +0.0000490945674, +0.0000490945674, +0.0000185110664, +0.0000000000000, -0.0000062374245, -0.0000122736419, -0.0000122736419, -0.0000062374245, -0.0000062374245, +0.0000000000000, +0.0000000000000, +0.0000062374245, +0.0000122736419, +0.0000122736419, +0.0000062374245, +0.0000062374245, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/12-fender-superchamp-sm57.h000066400000000000000000001456171247673406200257530ustar00rootroot00000000000000float fender_superchamp_sm57[] = { +0.0000000000000, -0.0000200000000, -0.0000530434783, -0.0000397826087, +0.0000265217391, +0.0000928260870, +0.0001658695652, +0.0001458695652, -0.0000067391304, -0.0001458695652, -0.0002786956522, -0.0004047826087, -0.0003647826087, -0.0002786956522, -0.0001856521739, +0.0000067391304, +0.0001128260870, +0.0001393478261, +0.0001856521739, +0.0001128260870, +0.0000265217391, +0.0000000000000, -0.0001326086957, -0.0002056521739, -0.0002056521739, -0.0002852173913, -0.0002654347826, -0.0002521739130, -0.0003317391304, -0.0003117391304, -0.0002919565217, -0.0002984782609, -0.0001458695652, +0.0000200000000, +0.0001458695652, +0.0003715217391, +0.0003250000000, +0.0001658695652, -0.0000465217391, -0.0003515217391, -0.0005904347826, -0.0006700000000, -0.0006236956522, -0.0003184782609, +0.0000200000000, +0.0000863043478, +0.0001060869565, +0.0000000000000, -0.0002919565217, -0.0004976086957, -0.0007297826087, -0.0010615217391, -0.0011610869565, -0.0012671739130, -0.0013269565217, -0.0011145652174, -0.0010747826087, -0.0010880434783, -0.0009752173913, -0.0011808695652, -0.0015058695652, -0.0017382608696, -0.0023950000000, -0.0028593478261, -0.0032308695652, -0.0046373913043, -0.0047965217391, -0.0050752173913, -0.0067404347826, -0.0047169565217, -0.0074436956522, -0.0103428260870, +0.0068532608696, +0.0241619565217, +0.0008426086957, -0.0764132608696, -0.1174660869565, -0.0463336956522, +0.0499626086957, +0.1274373913043, +0.2072806521739, +0.2173780434783, +0.1524086956522, +0.0598676086957, -0.0573863043478, -0.1283728260870, -0.1224352173913, -0.0873797826087, -0.0395069565217, -0.0204402173913, -0.0344052173913, -0.0300000000000, +0.0007495652174, +0.0409532608696, +0.0674969565217, +0.0662097826087, +0.0491002173913, +0.0154643478261, -0.0154313043478, -0.0201350000000, -0.0179323913043, -0.0123000000000, -0.0078747826087, -0.0214352173913, -0.0342726086957, -0.0254821739130, -0.0027134782609, +0.0226360869565, +0.0315126086957, +0.0181778260870, +0.0039473913043, -0.0051217391304, -0.0098850000000, -0.0113710869565, -0.0134476086957, -0.0153650000000, -0.0203339130435, -0.0242482608696, -0.0183239130435, -0.0129036956522, -0.0087771739130, +0.0026736956522, +0.0066541304348, +0.0001193478261, -0.0074967391304, -0.0111521739130, -0.0129500000000, -0.0151858695652, -0.0076558695652, +0.0070058695652, +0.0121739130435, +0.0095002173913, +0.0024280434783, -0.0069991304348, -0.0090026086957, -0.0039673913043, +0.0039141304348, +0.0099447826087, +0.0047767391304, -0.0068930434783, -0.0150397826087, -0.0140978260870, -0.0088500000000, -0.0071450000000, -0.0069526086957, -0.0080341304348, -0.0125586956522, -0.0104556521739, -0.0010680434783, +0.0076956521739, +0.0145886956522, +0.0114839130435, +0.0010017391304, -0.0077886956522, -0.0161410869565, -0.0173752173913, -0.0094869565217, -0.0054997826087, -0.0030782608696, -0.0004578260870, -0.0005571739130, +0.0007363043478, -0.0002454347826, -0.0030650000000, -0.0037019565217, -0.0076956521739, -0.0126847826087, -0.0129102173913, -0.0117956521739, -0.0090358695652, -0.0028128260870, +0.0051880434783, +0.0124591304348, +0.0133945652174, +0.0064286956522, -0.0032641304348, -0.0103163043478, -0.0108469565217, -0.0032971739130, +0.0067867391304, +0.0107341304348, +0.0073043478261, +0.0008558695652, -0.0071915217391, -0.0147147826087, -0.0174745652174, -0.0150795652174, -0.0105352173913, -0.0058247826087, -0.0016386956522, +0.0013865217391, +0.0034697826087, +0.0049293478261, +0.0050486956522, +0.0032441304348, +0.0007032608696, +0.0007032608696, +0.0033569565217, +0.0057917391304, +0.0073506521739, +0.0075565217391, +0.0063489130435, +0.0048495652174, +0.0020367391304, -0.0018641304348, -0.0047302173913, -0.0066741304348, -0.0078947826087, -0.0078019565217, -0.0069991304348, -0.0063158695652, -0.0058913043478, -0.0040734782609, -0.0003715217391, +0.0025078260870, +0.0041730434783, +0.0053339130435, +0.0040534782609, +0.0014130434783, +0.0008558695652, +0.0028926086957, +0.0059641304348, +0.0074569565217, +0.0076493478261, +0.0079013043478, +0.0064019565217, +0.0046506521739, +0.0043521739130, +0.0026139130435, +0.0002719565217, -0.0013932608696, -0.0017580434783, +0.0007165217391, +0.0030319565217, +0.0038943478261, +0.0058713043478, +0.0076758695652, +0.0077886956522, +0.0070256521739, +0.0055793478261, +0.0056058695652, +0.0062295652174, +0.0046639130435, +0.0026669565217, +0.0016519565217, +0.0012073913043, +0.0010547826087, +0.0002719565217, +0.0010017391304, +0.0039473913043, +0.0056989130435, +0.0061897826087, +0.0058380434783, +0.0043386956522, +0.0036091304348, +0.0037019565217, +0.0040204347826, +0.0048363043478, +0.0046041304348, +0.0033436956522, +0.0020432608696, +0.0001658695652, -0.0003980434783, +0.0015326086957, +0.0044450000000, +0.0072313043478, +0.0084386956522, +0.0076160869565, +0.0066143478261, +0.0060704347826, +0.0053604347826, +0.0045510869565, +0.0040800000000, +0.0039739130435, +0.0022091304348, -0.0013865217391, -0.0026006521739, -0.0000597826087, +0.0022889130435, +0.0023219565217, +0.0015856521739, +0.0013202173913, +0.0008093478261, +0.0005971739130, +0.0027134782609, +0.0061897826087, +0.0075963043478, +0.0056856521739, +0.0024347826087, +0.0002586956522, -0.0001791304348, +0.0000000000000, +0.0000663043478, +0.0005904347826, +0.0018908695652, +0.0034100000000, +0.0043719565217, +0.0037947826087, +0.0022756521739, +0.0004378260870, -0.0018576086957, -0.0030782608696, -0.0016982608696, +0.0017647826087, +0.0051680434783, +0.0061897826087, +0.0042260869565, +0.0006302173913, -0.0030184782609, -0.0044647826087, -0.0026271739130, +0.0007960869565, +0.0030517391304, +0.0030517391304, +0.0020965217391, +0.0014463043478, +0.0008756521739, +0.0000597826087, -0.0003450000000, -0.0006369565217, -0.0010482608696, -0.0006502173913, +0.0008756521739, +0.0028328260870, +0.0039871739130, +0.0031247826087, +0.0008823913043, -0.0013732608696, -0.0028793478261, -0.0030717391304, -0.0022954347826, -0.0022026086957, -0.0031645652174, -0.0039141304348, -0.0034100000000, -0.0020965217391, -0.0006634782609, +0.0005706521739, +0.0015921739130, +0.0012936956522, -0.0007763043478, -0.0031047826087, -0.0042658695652, -0.0034167391304, -0.0009354347826, +0.0012406521739, +0.0018773913043, +0.0008623913043, -0.0011410869565, -0.0023950000000, -0.0021495652174, -0.0006700000000, +0.0010217391304, +0.0016254347826, +0.0004908695652, -0.0017780434783, -0.0042591304348, -0.0057717391304, -0.0061034782609, -0.0060902173913, -0.0051747826087, -0.0025541304348, +0.0004113043478, +0.0023021739130, +0.0027200000000, +0.0021097826087, +0.0013732608696, -0.0001991304348, -0.0022356521739, -0.0027267391304, -0.0025010869565, -0.0024813043478, -0.0022621739130, -0.0020034782609, -0.0010017391304, +0.0001393478261, -0.0004313043478, -0.0017913043478, -0.0026802173913, -0.0032176086957, -0.0028991304348, -0.0027797826087, -0.0027332608696, -0.0023817391304, -0.0030517391304, -0.0041795652174, -0.0036819565217, -0.0020367391304, -0.0002123913043, +0.0011345652174, +0.0011145652174, +0.0003715217391, -0.0004510869565, -0.0012406521739, -0.0015789130435, -0.0014463043478, -0.0008558695652, +0.0000995652174, +0.0003250000000, -0.0000597826087, -0.0004578260870, -0.0013269565217, -0.0021560869565, -0.0026071739130, -0.0031910869565, -0.0035558695652, -0.0028991304348, -0.0017713043478, -0.0009884782609, -0.0005771739130, -0.0006634782609, -0.0010945652174, -0.0007960869565, +0.0005839130435, +0.0020500000000, +0.0023086956522, +0.0017382608696, +0.0017250000000, +0.0017050000000, +0.0009486956522, +0.0001458695652, -0.0004843478261, -0.0005506521739, +0.0004180434783, +0.0013600000000, +0.0017580434783, +0.0015789130435, +0.0004578260870, -0.0009619565217, -0.0023419565217, -0.0033171739130, -0.0030850000000, -0.0022091304348, -0.0008691304348, +0.0006832608696, +0.0008889130435, +0.0000132608696, -0.0006104347826, -0.0006700000000, +0.0002123913043, +0.0015591304348, +0.0025143478261, +0.0026336956522, +0.0015921739130, -0.0002454347826, -0.0017580434783, -0.0021826086957, -0.0012869565217, +0.0003715217391, +0.0019371739130, +0.0029058695652, +0.0030650000000, +0.0019969565217, +0.0000132608696, -0.0014595652174, -0.0014860869565, -0.0001856521739, +0.0012604347826, +0.0019306521739, +0.0015193478261, +0.0004710869565, -0.0004976086957, -0.0011543478261, -0.0013800000000, -0.0009089130435, +0.0001326086957, +0.0009686956522, +0.0011676086957, +0.0012471739130, +0.0014130434783, +0.0010747826087, +0.0005241304348, +0.0004776086957, +0.0008558695652, +0.0013997826087, +0.0016519565217, +0.0013732608696, +0.0005771739130, -0.0002984782609, -0.0005373913043, +0.0000663043478, +0.0010945652174, +0.0020500000000, +0.0022954347826, +0.0015458695652, -0.0000795652174, -0.0019636956522, -0.0026536956522, -0.0018443478261, -0.0003382608696, +0.0014793478261, +0.0026471739130, +0.0024547826087, +0.0014130434783, -0.0000597826087, -0.0012804347826, -0.0017050000000, -0.0014130434783, -0.0005904347826, +0.0002786956522, +0.0009619565217, +0.0016850000000, +0.0019041304348, +0.0015523913043, +0.0010350000000, +0.0006567391304, +0.0004245652174, -0.0001128260870, -0.0011410869565, -0.0020167391304, -0.0023154347826, -0.0017913043478, -0.0005108695652, +0.0010282608696, +0.0021628260870, +0.0024147826087, +0.0020432608696, +0.0014065217391, +0.0008823913043, +0.0006036956522, +0.0001193478261, -0.0007297826087, -0.0015523913043, -0.0016519565217, -0.0005639130435, +0.0007430434783, +0.0015458695652, +0.0019371739130, +0.0017780434783, +0.0010415217391, -0.0000067391304, -0.0010084782609, -0.0013202173913, -0.0009286956522, -0.0001260869565, +0.0008093478261, +0.0011808695652, +0.0006965217391, -0.0001723913043, -0.0009884782609, -0.0015193478261, -0.0016584782609, -0.0014926086957, -0.0011676086957, -0.0009554347826, -0.0009619565217, -0.0009154347826, -0.0008226086957, -0.0006502173913, -0.0001856521739, +0.0001723913043, +0.0002719565217, +0.0002919565217, +0.0002521739130, +0.0001923913043, -0.0000530434783, -0.0005839130435, -0.0010282608696, -0.0015921739130, -0.0020500000000, -0.0018641304348, -0.0013467391304, -0.0007430434783, -0.0003582608696, -0.0005173913043, -0.0010547826087, -0.0014595652174, -0.0013134782609, -0.0009554347826, -0.0007828260870, -0.0010282608696, -0.0018443478261, -0.0024745652174, -0.0022889130435, -0.0014330434783, +0.0000000000000, +0.0011941304348, +0.0014197826087, +0.0008426086957, -0.0001591304348, -0.0007828260870, -0.0009554347826, -0.0012141304348, -0.0014463043478, -0.0015458695652, -0.0015126086957, -0.0011210869565, -0.0010017391304, -0.0012604347826, -0.0013134782609, -0.0015193478261, -0.0020167391304, -0.0023219565217, -0.0023882608696, -0.0022689130435, -0.0020234782609, -0.0015656521739, -0.0007230434783, -0.0000265217391, +0.0001856521739, +0.0002056521739, -0.0000597826087, -0.0003782608696, -0.0003117391304, -0.0001128260870, -0.0000597826087, -0.0002056521739, -0.0004976086957, -0.0007895652174, -0.0009221739130, -0.0008358695652, -0.0005041304348, +0.0000730434783, +0.0006634782609, +0.0008426086957, +0.0004313043478, -0.0005306521739, -0.0012671739130, -0.0012073913043, -0.0009554347826, -0.0008358695652, -0.0007097826087, -0.0005971739130, -0.0005639130435, -0.0007297826087, -0.0008491304348, -0.0008491304348, -0.0009221739130, -0.0008358695652, -0.0006634782609, -0.0007363043478, -0.0007763043478, -0.0006434782609, -0.0005241304348, -0.0004245652174, -0.0002786956522, -0.0001723913043, +0.0000000000000, +0.0004510869565, +0.0007032608696, +0.0002852173913, -0.0004245652174, -0.0006767391304, -0.0003915217391, -0.0003117391304, -0.0005306521739, -0.0004378260870, -0.0002654347826, -0.0003515217391, -0.0006369565217, -0.0010217391304, -0.0011210869565, -0.0008426086957, -0.0005971739130, -0.0004976086957, -0.0006236956522, -0.0009486956522, -0.0011676086957, -0.0011278260870, -0.0007695652174, -0.0001060869565, +0.0004908695652, +0.0007097826087, +0.0005241304348, +0.0000332608696, -0.0003382608696, -0.0003317391304, -0.0000795652174, +0.0001326086957, +0.0001658695652, -0.0000730434783, -0.0002852173913, -0.0004843478261, -0.0007895652174, -0.0007763043478, -0.0002984782609, +0.0002984782609, +0.0007097826087, +0.0007230434783, +0.0004578260870, +0.0002189130435, -0.0002786956522, -0.0008226086957, -0.0008028260870, -0.0001723913043, +0.0004710869565, +0.0004578260870, -0.0000332608696, -0.0002123913043, -0.0000067391304, +0.0002919565217, +0.0004776086957, +0.0002321739130, -0.0000067391304, +0.0000795652174, +0.0002056521739, +0.0001791304348, -0.0000265217391, -0.0001458695652, +0.0001526086957, +0.0004047826087, +0.0003382608696, +0.0002719565217, +0.0001856521739, -0.0000132608696, -0.0002454347826, -0.0002654347826, +0.0000597826087, +0.0004908695652, +0.0008028260870, +0.0008889130435, +0.0006236956522, +0.0003847826087, +0.0003382608696, +0.0001791304348, +0.0001723913043, +0.0004643478261, +0.0007363043478, +0.0005771739130, +0.0000067391304, -0.0005108695652, -0.0005506521739, -0.0002189130435, +0.0002321739130, +0.0006369565217, +0.0008956521739, +0.0009419565217, +0.0007828260870, +0.0005041304348, +0.0003647826087, +0.0005108695652, +0.0008491304348, +0.0012206521739, +0.0013269565217, +0.0009554347826, +0.0003052173913, -0.0001326086957, -0.0000132608696, +0.0003117391304, +0.0003715217391, +0.0004976086957, +0.0008756521739, +0.0011478260870, +0.0011078260870, +0.0007430434783, +0.0004976086957, +0.0005506521739, +0.0005506521739, +0.0004710869565, +0.0003184782609, +0.0001060869565, +0.0000995652174, +0.0002719565217, +0.0006302173913, +0.0011145652174, +0.0013865217391, +0.0013800000000, +0.0011013043478, +0.0006900000000, +0.0004643478261, +0.0004643478261, +0.0005439130435, +0.0008889130435, +0.0013865217391, +0.0018045652174, +0.0018841304348, +0.0016386956522, +0.0013202173913, +0.0010150000000, +0.0007828260870, +0.0006236956522, +0.0003250000000, +0.0000000000000, -0.0000928260870, +0.0000000000000, +0.0003052173913, +0.0005506521739, +0.0005108695652, +0.0004776086957, +0.0005639130435, +0.0005439130435, +0.0003715217391, +0.0002586956522, +0.0004047826087, +0.0005904347826, +0.0005571739130, +0.0005439130435, +0.0005771739130, +0.0004578260870, +0.0002786956522, +0.0002256521739, +0.0004180434783, +0.0007695652174, +0.0011543478261, +0.0014660869565, +0.0013865217391, +0.0009221739130, +0.0003647826087, -0.0001060869565, -0.0002123913043, +0.0000597826087, +0.0005041304348, +0.0010150000000, +0.0012339130435, +0.0010217391304, +0.0006832608696, +0.0003250000000, -0.0000995652174, -0.0003647826087, -0.0001658695652, +0.0003317391304, +0.0006767391304, +0.0007097826087, +0.0003382608696, -0.0002786956522, -0.0007763043478, -0.0009021739130, -0.0005241304348, +0.0000730434783, +0.0004710869565, +0.0006832608696, +0.0008491304348, +0.0008691304348, +0.0006832608696, +0.0003782608696, +0.0002719565217, +0.0004245652174, +0.0005839130435, +0.0005971739130, +0.0004378260870, +0.0000000000000, -0.0004445652174, -0.0007363043478, -0.0009021739130, -0.0007960869565, -0.0004445652174, -0.0000597826087, +0.0003052173913, +0.0003647826087, +0.0000530434783, -0.0004113043478, -0.0007695652174, -0.0007495652174, -0.0003847826087, +0.0000067391304, +0.0002852173913, +0.0002056521739, -0.0002919565217, -0.0007165217391, -0.0006634782609, -0.0000730434783, +0.0006302173913, +0.0009486956522, +0.0006302173913, -0.0001658695652, -0.0008226086957, -0.0006302173913, +0.0002586956522, +0.0012671739130, +0.0016850000000, +0.0011210869565, -0.0000265217391, -0.0011278260870, -0.0018178260870, -0.0016917391304, -0.0008491304348, +0.0001260869565, +0.0008160869565, +0.0009486956522, +0.0006369565217, +0.0001458695652, -0.0004643478261, -0.0009884782609, -0.0010813043478, -0.0006634782609, -0.0001393478261, -0.0000928260870, -0.0001923913043, +0.0000000000000, +0.0000730434783, +0.0000200000000, +0.0001193478261, +0.0002852173913, +0.0002919565217, -0.0001128260870, -0.0006900000000, -0.0008028260870, -0.0002454347826, +0.0005306521739, +0.0008756521739, +0.0005971739130, +0.0000265217391, -0.0004976086957, -0.0006832608696, -0.0004180434783, +0.0000132608696, +0.0002056521739, -0.0000332608696, -0.0005839130435, -0.0010747826087, -0.0012273913043, -0.0009619565217, -0.0005108695652, -0.0002389130435, -0.0001723913043, -0.0000928260870, +0.0000000000000, -0.0000863043478, -0.0002256521739, -0.0000863043478, +0.0004578260870, +0.0010680434783, +0.0010945652174, +0.0005041304348, -0.0000332608696, +0.0000132608696, +0.0003980434783, +0.0004843478261, +0.0001526086957, -0.0002189130435, -0.0004776086957, -0.0006567391304, -0.0006502173913, -0.0001791304348, +0.0006965217391, +0.0015126086957, +0.0017382608696, +0.0013134782609, +0.0006369565217, +0.0000530434783, -0.0002256521739, -0.0000200000000, +0.0005439130435, +0.0009619565217, +0.0008160869565, +0.0001193478261, -0.0005771739130, -0.0007495652174, -0.0003715217391, +0.0000928260870, +0.0003317391304, +0.0004643478261, +0.0008093478261, +0.0013202173913, +0.0016121739130, +0.0015258695652, +0.0011145652174, +0.0004313043478, -0.0002852173913, -0.0006900000000, -0.0005839130435, -0.0000530434783, +0.0005373913043, +0.0008358695652, +0.0007630434783, +0.0005506521739, +0.0004908695652, +0.0006502173913, +0.0006767391304, +0.0003980434783, +0.0000663043478, +0.0000132608696, +0.0002919565217, +0.0006036956522, +0.0007363043478, +0.0007828260870, +0.0006567391304, +0.0003184782609, +0.0000530434783, -0.0001393478261, -0.0003382608696, -0.0003382608696, +0.0000132608696, +0.0005904347826, +0.0010547826087, +0.0011941304348, +0.0010150000000, +0.0006832608696, +0.0003382608696, +0.0000663043478, +0.0000200000000, +0.0001591304348, +0.0002321739130, +0.0003184782609, +0.0005306521739, +0.0006965217391, +0.0006567391304, +0.0005839130435, +0.0007097826087, +0.0008623913043, +0.0008623913043, +0.0007097826087, +0.0004245652174, +0.0000928260870, -0.0002056521739, -0.0002719565217, -0.0000465217391, +0.0001658695652, +0.0002321739130, +0.0000928260870, -0.0000663043478, -0.0000730434783, -0.0000995652174, -0.0000200000000, +0.0003382608696, +0.0007165217391, +0.0008558695652, +0.0006965217391, +0.0004047826087, +0.0001591304348, -0.0000863043478, -0.0002123913043, -0.0000597826087, +0.0001991304348, +0.0003317391304, +0.0002654347826, +0.0001393478261, +0.0000332608696, -0.0001526086957, -0.0003450000000, -0.0003847826087, -0.0002786956522, -0.0002056521739, -0.0001658695652, -0.0001723913043, -0.0001923913043, -0.0000863043478, +0.0000332608696, +0.0000132608696, -0.0000265217391, -0.0001526086957, -0.0003647826087, -0.0004843478261, -0.0004510869565, -0.0002454347826, -0.0000132608696, +0.0001526086957, +0.0002321739130, +0.0000995652174, -0.0001128260870, -0.0002521739130, -0.0003582608696, -0.0003382608696, -0.0002189130435, -0.0001393478261, -0.0000730434783, -0.0000928260870, -0.0002586956522, -0.0004843478261, -0.0005971739130, -0.0004908695652, -0.0002454347826, +0.0000465217391, +0.0002654347826, +0.0002123913043, -0.0000597826087, -0.0002852173913, -0.0003382608696, -0.0003382608696, -0.0003117391304, -0.0001791304348, -0.0000863043478, -0.0001260869565, -0.0001393478261, -0.0000663043478, +0.0000200000000, +0.0000067391304, -0.0001060869565, -0.0002189130435, -0.0003250000000, -0.0004578260870, -0.0005173913043, -0.0004180434783, -0.0002189130435, -0.0000465217391, +0.0000132608696, -0.0001260869565, -0.0004313043478, -0.0006965217391, -0.0007097826087, -0.0004445652174, -0.0000465217391, +0.0002852173913, +0.0004378260870, +0.0003782608696, +0.0002189130435, +0.0000397826087, -0.0001591304348, -0.0002984782609, -0.0004643478261, -0.0007430434783, -0.0008823913043, -0.0007165217391, -0.0002984782609, +0.0002189130435, +0.0005241304348, +0.0004976086957, +0.0001591304348, -0.0004445652174, -0.0009286956522, -0.0009952173913, -0.0006302173913, -0.0000332608696, +0.0004180434783, +0.0004245652174, +0.0001193478261, -0.0001791304348, -0.0002786956522, -0.0001856521739, -0.0000995652174, -0.0000928260870, -0.0002786956522, -0.0007563043478, -0.0010747826087, -0.0009021739130, -0.0004710869565, +0.0000000000000, +0.0002984782609, +0.0001723913043, -0.0001658695652, -0.0005639130435, -0.0008293478261, -0.0007430434783, -0.0005241304348, -0.0002984782609, -0.0001458695652, -0.0001991304348, -0.0002189130435, -0.0001060869565, -0.0000530434783, -0.0001658695652, -0.0004908695652, -0.0007563043478, -0.0007695652174, -0.0007165217391, -0.0005904347826, -0.0003847826087, -0.0001856521739, -0.0000265217391, +0.0000465217391, +0.0001060869565, +0.0001856521739, +0.0000067391304, -0.0004445652174, -0.0008491304348, -0.0009089130435, -0.0006767391304, -0.0003715217391, -0.0001060869565, -0.0000067391304, -0.0000928260870, -0.0002984782609, -0.0005706521739, -0.0007297826087, -0.0006036956522, -0.0002654347826, +0.0000730434783, +0.0001526086957, -0.0000995652174, -0.0004776086957, -0.0007363043478, -0.0007363043478, -0.0005506521739, -0.0003184782609, -0.0001526086957, -0.0002123913043, -0.0004578260870, -0.0007430434783, -0.0008491304348, -0.0006236956522, -0.0001658695652, +0.0001991304348, +0.0002586956522, +0.0000597826087, -0.0001856521739, -0.0004378260870, -0.0004843478261, -0.0002919565217, -0.0000730434783, +0.0000000000000, -0.0001326086957, -0.0003515217391, -0.0004976086957, -0.0004976086957, -0.0004378260870, -0.0004710869565, -0.0005571739130, -0.0006104347826, -0.0005771739130, -0.0003184782609, +0.0000332608696, +0.0001723913043, +0.0001060869565, -0.0000200000000, -0.0002521739130, -0.0005439130435, -0.0007563043478, -0.0007230434783, -0.0003647826087, +0.0000265217391, +0.0001193478261, -0.0000530434783, -0.0003515217391, -0.0006302173913, -0.0007165217391, -0.0005971739130, -0.0002984782609, +0.0000597826087, +0.0002389130435, +0.0002123913043, +0.0001060869565, -0.0000132608696, -0.0001260869565, -0.0002454347826, -0.0004113043478, -0.0004776086957, -0.0003915217391, -0.0001791304348, +0.0000067391304, +0.0000928260870, +0.0000265217391, -0.0001591304348, -0.0003317391304, -0.0003647826087, -0.0002786956522, -0.0000995652174, +0.0000597826087, +0.0001658695652, +0.0001856521739, -0.0000067391304, -0.0002919565217, -0.0004776086957, -0.0005706521739, -0.0004510869565, -0.0001526086957, +0.0001193478261, +0.0001791304348, -0.0000397826087, -0.0003515217391, -0.0005639130435, -0.0005706521739, -0.0002586956522, +0.0001856521739, +0.0004245652174, +0.0003515217391, +0.0000928260870, -0.0002321739130, -0.0004445652174, -0.0003382608696, +0.0000000000000, +0.0002984782609, +0.0003382608696, +0.0001128260870, -0.0001526086957, -0.0003052173913, -0.0003052173913, -0.0001723913043, -0.0000332608696, +0.0000132608696, -0.0000200000000, -0.0001393478261, -0.0002056521739, -0.0001458695652, -0.0000465217391, +0.0000332608696, +0.0000465217391, -0.0001060869565, -0.0003250000000, -0.0003915217391, -0.0003250000000, -0.0001856521739, +0.0000132608696, +0.0002654347826, +0.0004578260870, +0.0004908695652, +0.0003782608696, +0.0003317391304, +0.0003647826087, +0.0003915217391, +0.0003847826087, +0.0002654347826, +0.0000132608696, -0.0002389130435, -0.0003980434783, -0.0003715217391, -0.0002521739130, -0.0001856521739, -0.0001393478261, -0.0000530434783, -0.0000397826087, -0.0001193478261, -0.0001923913043, -0.0002123913043, -0.0002056521739, -0.0001923913043, -0.0001658695652, -0.0000730434783, +0.0000132608696, +0.0000067391304, -0.0000332608696, -0.0000663043478, -0.0001128260870, -0.0000928260870, -0.0000132608696, +0.0000397826087, +0.0000465217391, -0.0000465217391, -0.0001856521739, -0.0002123913043, -0.0001060869565, +0.0000730434783, +0.0002123913043, +0.0002389130435, +0.0001526086957, -0.0000530434783, -0.0002719565217, -0.0002586956522, -0.0000863043478, +0.0000465217391, +0.0000928260870, -0.0000132608696, -0.0001658695652, -0.0002454347826, -0.0002321739130, -0.0000332608696, +0.0003052173913, +0.0005373913043, +0.0005173913043, +0.0002984782609, +0.0000597826087, -0.0000730434783, -0.0001658695652, -0.0001723913043, -0.0000200000000, +0.0000995652174, +0.0001326086957, +0.0001923913043, +0.0002719565217, +0.0002719565217, +0.0002189130435, +0.0002123913043, +0.0002256521739, +0.0001393478261, +0.0000332608696, +0.0000000000000, -0.0000265217391, -0.0000067391304, +0.0000332608696, +0.0000597826087, +0.0000597826087, +0.0000795652174, +0.0001923913043, +0.0002786956522, +0.0002521739130, +0.0002454347826, +0.0002256521739, +0.0001723913043, +0.0001326086957, +0.0001060869565, +0.0001393478261, +0.0001991304348, +0.0001723913043, +0.0001658695652, +0.0002123913043, +0.0002586956522, +0.0003250000000, +0.0003847826087, +0.0003915217391, +0.0003382608696, +0.0002123913043, +0.0001591304348, +0.0002189130435, +0.0002586956522, +0.0003184782609, +0.0003915217391, +0.0003052173913, +0.0000863043478, -0.0000200000000, +0.0000265217391, +0.0001526086957, +0.0002321739130, +0.0002256521739, +0.0001393478261, +0.0000397826087, +0.0000000000000, +0.0000995652174, +0.0002521739130, +0.0003450000000, +0.0003847826087, +0.0002852173913, +0.0000597826087, -0.0000663043478, -0.0000863043478, -0.0000730434783, +0.0000332608696, +0.0001723913043, +0.0002586956522, +0.0003052173913, +0.0003847826087, +0.0004378260870, +0.0003847826087, +0.0002389130435, +0.0001128260870, +0.0000265217391, +0.0000000000000, +0.0000863043478, +0.0001991304348, +0.0002321739130, +0.0001458695652, -0.0000730434783, -0.0003250000000, -0.0003582608696, -0.0001723913043, +0.0000663043478, +0.0003184782609, +0.0004908695652, +0.0005506521739, +0.0005839130435, +0.0005639130435, +0.0004445652174, +0.0002521739130, +0.0000000000000, -0.0002786956522, -0.0003980434783, -0.0003184782609, -0.0000995652174, +0.0001193478261, +0.0002786956522, +0.0004180434783, +0.0005241304348, +0.0005706521739, +0.0005971739130, +0.0005506521739, +0.0003980434783, +0.0001923913043, -0.0000465217391, -0.0002389130435, -0.0002919565217, -0.0002321739130, -0.0000530434783, +0.0001526086957, +0.0002984782609, +0.0004113043478, +0.0004378260870, +0.0003052173913, +0.0002189130435, +0.0002719565217, +0.0003647826087, +0.0004578260870, +0.0004578260870, +0.0003052173913, +0.0000663043478, -0.0001060869565, -0.0001128260870, +0.0000000000000, +0.0001723913043, +0.0003052173913, +0.0002852173913, +0.0001856521739, +0.0001393478261, +0.0001526086957, +0.0001458695652, +0.0000928260870, +0.0000597826087, +0.0000265217391, -0.0000530434783, -0.0001060869565, -0.0000795652174, +0.0000000000000, +0.0000995652174, +0.0000795652174, -0.0000863043478, -0.0002786956522, -0.0003782608696, -0.0002654347826, +0.0000530434783, +0.0004047826087, +0.0007032608696, +0.0008491304348, +0.0006900000000, +0.0002123913043, -0.0003715217391, -0.0007430434783, -0.0006965217391, -0.0003184782609, +0.0001260869565, +0.0004445652174, +0.0005706521739, +0.0004908695652, +0.0002521739130, +0.0000397826087, +0.0000465217391, +0.0001326086957, +0.0000995652174, +0.0000397826087, +0.0000730434783, +0.0001458695652, +0.0002786956522, +0.0003847826087, +0.0003847826087, +0.0003715217391, +0.0003184782609, +0.0001393478261, -0.0000397826087, -0.0001193478261, -0.0000265217391, +0.0001723913043, +0.0003052173913, +0.0002719565217, +0.0001326086957, +0.0000530434783, +0.0000795652174, +0.0001128260870, +0.0000863043478, +0.0000928260870, +0.0002056521739, +0.0003382608696, +0.0004047826087, +0.0004445652174, +0.0004510869565, +0.0004313043478, +0.0004047826087, +0.0003117391304, +0.0001723913043, +0.0000265217391, -0.0001326086957, -0.0002123913043, -0.0001723913043, +0.0000132608696, +0.0003317391304, +0.0005771739130, +0.0006434782609, +0.0005706521739, +0.0003715217391, +0.0001458695652, -0.0000332608696, -0.0001856521739, -0.0002389130435, -0.0001856521739, -0.0000730434783, +0.0001060869565, +0.0003515217391, +0.0005173913043, +0.0005173913043, +0.0003515217391, +0.0001128260870, -0.0001458695652, -0.0003782608696, -0.0004710869565, -0.0003515217391, -0.0001193478261, +0.0001326086957, +0.0003382608696, +0.0004313043478, +0.0003450000000, +0.0001458695652, +0.0000000000000, -0.0000332608696, -0.0000530434783, -0.0000730434783, -0.0000928260870, -0.0000332608696, +0.0001458695652, +0.0002984782609, +0.0002852173913, +0.0001591304348, +0.0000000000000, -0.0001658695652, -0.0002786956522, -0.0002123913043, +0.0000000000000, +0.0001658695652, +0.0003117391304, +0.0003782608696, +0.0002521739130, +0.0000132608696, -0.0000995652174, +0.0000067391304, +0.0001923913043, +0.0002389130435, +0.0001060869565, -0.0000795652174, -0.0002256521739, -0.0002056521739, -0.0000132608696, +0.0001791304348, +0.0002586956522, +0.0001991304348, +0.0000663043478, -0.0000132608696, -0.0000200000000, +0.0000200000000, +0.0000928260870, +0.0001260869565, +0.0000863043478, +0.0000795652174, +0.0001326086957, +0.0001591304348, +0.0000863043478, -0.0000465217391, -0.0001458695652, -0.0001591304348, -0.0001260869565, -0.0000663043478, +0.0000132608696, +0.0000795652174, +0.0001393478261, +0.0002256521739, +0.0003184782609, +0.0003382608696, +0.0002521739130, +0.0001060869565, +0.0000000000000, -0.0000730434783, -0.0001393478261, -0.0001591304348, -0.0000928260870, +0.0000265217391, +0.0001856521739, +0.0003184782609, +0.0003847826087, +0.0003782608696, +0.0002786956522, +0.0001193478261, -0.0001260869565, -0.0003515217391, -0.0004180434783, -0.0003450000000, -0.0001856521739, -0.0000132608696, +0.0000465217391, +0.0000465217391, +0.0000000000000, -0.0001128260870, -0.0001991304348, -0.0001856521739, -0.0000663043478, +0.0000863043478, +0.0001723913043, +0.0002189130435, +0.0002123913043, +0.0000863043478, -0.0001128260870, -0.0002852173913, -0.0003450000000, -0.0002654347826, -0.0001723913043, -0.0001128260870, -0.0000465217391, +0.0000132608696, +0.0000663043478, +0.0001128260870, +0.0000863043478, -0.0000332608696, -0.0001923913043, -0.0003647826087, -0.0004710869565, -0.0004510869565, -0.0003052173913, -0.0000530434783, +0.0001723913043, +0.0002454347826, +0.0002389130435, +0.0001658695652, -0.0000067391304, -0.0002389130435, -0.0004245652174, -0.0005108695652, -0.0004445652174, -0.0002521739130, -0.0000265217391, +0.0000995652174, +0.0000332608696, -0.0001128260870, -0.0002586956522, -0.0003582608696, -0.0003184782609, -0.0001723913043, -0.0000200000000, +0.0000663043478, +0.0000397826087, -0.0000200000000, -0.0000397826087, -0.0000332608696, -0.0000200000000, -0.0000928260870, -0.0002586956522, -0.0003915217391, -0.0004245652174, -0.0003317391304, -0.0000928260870, +0.0001658695652, +0.0002984782609, +0.0002189130435, -0.0000730434783, -0.0003847826087, -0.0004643478261, -0.0003117391304, -0.0000928260870, +0.0000200000000, +0.0000000000000, -0.0000795652174, -0.0001326086957, -0.0001856521739, -0.0002256521739, -0.0002056521739, -0.0001591304348, -0.0001923913043, -0.0002786956522, -0.0002919565217, -0.0001923913043, -0.0000597826087, +0.0000200000000, +0.0000795652174, +0.0000597826087, -0.0000730434783, -0.0002256521739, -0.0002786956522, -0.0002719565217, -0.0002654347826, -0.0002321739130, -0.0001458695652, -0.0000730434783, -0.0000863043478, -0.0001591304348, -0.0001923913043, -0.0001856521739, -0.0001326086957, -0.0000530434783, +0.0000067391304, +0.0000397826087, +0.0000465217391, +0.0000132608696, -0.0000928260870, -0.0002189130435, -0.0003184782609, -0.0003715217391, -0.0003184782609, -0.0001723913043, +0.0000000000000, +0.0000795652174, +0.0000332608696, -0.0000730434783, -0.0001658695652, -0.0001923913043, -0.0001723913043, -0.0001591304348, -0.0001393478261, -0.0000730434783, -0.0000265217391, -0.0000663043478, -0.0001591304348, -0.0002056521739, -0.0001526086957, -0.0000663043478, -0.0000332608696, -0.0000265217391, +0.0000000000000, +0.0000265217391, +0.0000397826087, +0.0000465217391, +0.0000397826087, +0.0000332608696, +0.0000000000000, -0.0000928260870, -0.0002321739130, -0.0003582608696, -0.0004180434783, -0.0003515217391, -0.0001658695652, +0.0000265217391, +0.0001791304348, +0.0002389130435, +0.0001326086957, -0.0000730434783, -0.0002321739130, -0.0002454347826, -0.0001791304348, -0.0001260869565, -0.0001060869565, -0.0001326086957, -0.0002056521739, -0.0002521739130, -0.0002389130435, -0.0002056521739, -0.0001526086957, -0.0000795652174, +0.0000000000000, +0.0000200000000, +0.0000265217391, +0.0000530434783, +0.0000795652174, +0.0000265217391, -0.0001193478261, -0.0003117391304, -0.0004578260870, -0.0005241304348, -0.0004776086957, -0.0003450000000, -0.0002321739130, -0.0001526086957, -0.0000597826087, +0.0000200000000, +0.0000397826087, -0.0000067391304, -0.0000597826087, -0.0000132608696, +0.0000597826087, +0.0000663043478, +0.0000132608696, -0.0000530434783, -0.0000530434783, -0.0000200000000, -0.0000332608696, -0.0000465217391, -0.0000530434783, -0.0000530434783, -0.0000597826087, -0.0001393478261, -0.0002454347826, -0.0003117391304, -0.0002719565217, -0.0001393478261, -0.0000795652174, -0.0001326086957, -0.0001991304348, -0.0002056521739, -0.0001193478261, -0.0000132608696, +0.0001260869565, +0.0003250000000, +0.0003715217391, +0.0002321739130, +0.0000265217391, -0.0001260869565, -0.0001923913043, -0.0001458695652, -0.0000530434783, +0.0000000000000, -0.0000265217391, -0.0000730434783, -0.0000663043478, -0.0000530434783, -0.0000530434783, -0.0000597826087, -0.0000730434783, -0.0001326086957, -0.0001856521739, -0.0001723913043, -0.0001393478261, -0.0000928260870, +0.0000000000000, +0.0000663043478, +0.0001060869565, +0.0001458695652, +0.0001591304348, +0.0001723913043, +0.0001526086957, +0.0000863043478, +0.0000265217391, +0.0000000000000, +0.0000067391304, +0.0000067391304, -0.0000465217391, -0.0001260869565, -0.0001326086957, -0.0000928260870, -0.0000397826087, +0.0000000000000, +0.0000265217391, +0.0000530434783, +0.0000663043478, +0.0000397826087, -0.0000132608696, -0.0000928260870, -0.0001658695652, -0.0001658695652, -0.0000995652174, -0.0000332608696, +0.0000132608696, +0.0000200000000, -0.0000067391304, -0.0000200000000, -0.0000200000000, +0.0000000000000, +0.0000067391304, -0.0000332608696, -0.0001128260870, -0.0001723913043, -0.0001458695652, -0.0000397826087, +0.0000795652174, +0.0001393478261, +0.0001326086957, +0.0000795652174, +0.0000397826087, +0.0000530434783, +0.0000663043478, +0.0000597826087, +0.0000530434783, +0.0000200000000, +0.0000000000000, +0.0000132608696, +0.0000397826087, +0.0000995652174, +0.0001393478261, +0.0000795652174, -0.0000332608696, -0.0001260869565, -0.0001458695652, -0.0000863043478, +0.0000200000000, +0.0001260869565, +0.0001591304348, +0.0000663043478, -0.0000265217391, +0.0000000000000, +0.0001060869565, +0.0002256521739, +0.0003117391304, +0.0003184782609, +0.0001991304348, +0.0000265217391, -0.0000995652174, -0.0001658695652, -0.0002321739130, -0.0002321739130, -0.0001393478261, +0.0000000000000, +0.0000795652174, +0.0001060869565, +0.0000995652174, +0.0000730434783, +0.0000730434783, +0.0000863043478, +0.0001060869565, +0.0001193478261, +0.0001326086957, +0.0001060869565, +0.0000332608696, +0.0000000000000, -0.0000132608696, -0.0000795652174, -0.0001526086957, -0.0001326086957, -0.0000597826087, +0.0000132608696, +0.0000795652174, +0.0000795652174, +0.0000663043478, +0.0000530434783, +0.0000530434783, +0.0000863043478, +0.0001260869565, +0.0001260869565, +0.0000995652174, +0.0000928260870, +0.0000928260870, +0.0000332608696, -0.0000795652174, -0.0001393478261, -0.0001326086957, -0.0000863043478, +0.0000000000000, +0.0001060869565, +0.0001856521739, +0.0002189130435, +0.0001723913043, +0.0000863043478, +0.0000597826087, +0.0001193478261, +0.0001458695652, +0.0001326086957, +0.0001260869565, +0.0001260869565, +0.0000863043478, +0.0000597826087, +0.0000928260870, +0.0001723913043, +0.0002256521739, +0.0002321739130, +0.0001591304348, +0.0000530434783, +0.0000397826087, +0.0001260869565, +0.0001791304348, +0.0000995652174, -0.0000795652174, -0.0002256521739, -0.0002189130435, -0.0000663043478, +0.0001591304348, +0.0003117391304, +0.0002654347826, +0.0000863043478, -0.0000397826087, -0.0000597826087, +0.0000000000000, +0.0000397826087, +0.0000597826087, +0.0000397826087, -0.0000265217391, -0.0001128260870, -0.0001458695652, -0.0000928260870, +0.0000000000000, +0.0000597826087, +0.0000663043478, +0.0000465217391, +0.0000397826087, +0.0000530434783, +0.0001060869565, +0.0001658695652, +0.0001791304348, +0.0001526086957, +0.0001591304348, +0.0002056521739, +0.0002321739130, +0.0001991304348, +0.0001326086957, +0.0000265217391, -0.0000863043478, -0.0001526086957, -0.0000995652174, +0.0000000000000, +0.0000863043478, +0.0000795652174, +0.0000200000000, +0.0000000000000, +0.0000000000000, -0.0000332608696, -0.0001193478261, -0.0002256521739, -0.0002719565217, -0.0001856521739, +0.0000000000000, +0.0002123913043, +0.0003117391304, +0.0002719565217, +0.0001591304348, +0.0000067391304, -0.0001128260870, -0.0001526086957, -0.0000928260870, +0.0000332608696, +0.0001723913043, +0.0002389130435, +0.0002321739130, +0.0001791304348, +0.0001193478261, +0.0000597826087, +0.0000000000000, -0.0000863043478, -0.0001526086957, -0.0001526086957, -0.0000795652174, +0.0000397826087, +0.0001658695652, +0.0002454347826, +0.0002586956522, +0.0001923913043, +0.0000663043478, +0.0000000000000, +0.0000132608696, +0.0000863043478, +0.0001393478261, +0.0001526086957, +0.0001193478261, +0.0000530434783, -0.0000132608696, -0.0000067391304, +0.0000332608696, +0.0000332608696, -0.0000067391304, -0.0000132608696, +0.0000265217391, +0.0001526086957, +0.0002984782609, +0.0003782608696, +0.0003515217391, +0.0002454347826, +0.0000663043478, -0.0001128260870, -0.0001856521739, -0.0000928260870, +0.0000928260870, +0.0002389130435, +0.0002521739130, +0.0001591304348, +0.0000397826087, -0.0000200000000, +0.0000000000000, +0.0001128260870, +0.0002454347826, +0.0003250000000, +0.0002919565217, +0.0001723913043, +0.0000000000000, -0.0001260869565, -0.0000863043478, +0.0000597826087, +0.0002389130435, +0.0003515217391, +0.0003515217391, +0.0003052173913, +0.0002389130435, +0.0001791304348, +0.0001723913043, +0.0001856521739, +0.0001791304348, +0.0001193478261, +0.0000132608696, -0.0000597826087, -0.0000730434783, -0.0000265217391, +0.0000530434783, +0.0001326086957, +0.0001923913043, +0.0001658695652, +0.0000200000000, -0.0001591304348, -0.0002454347826, -0.0001856521739, +0.0000200000000, +0.0002654347826, +0.0004245652174, +0.0003980434783, +0.0002189130435, +0.0000067391304, -0.0000928260870, -0.0000730434783, -0.0000067391304, +0.0000067391304, +0.0000067391304, +0.0000332608696, +0.0000863043478, +0.0001791304348, +0.0002719565217, +0.0002984782609, +0.0002123913043, +0.0000597826087, -0.0000597826087, -0.0000928260870, -0.0000200000000, +0.0000863043478, +0.0001458695652, +0.0000928260870, +0.0000000000000, -0.0000663043478, -0.0000397826087, +0.0000397826087, +0.0001060869565, +0.0001060869565, +0.0000332608696, -0.0000863043478, -0.0001591304348, -0.0001193478261, +0.0000067391304, +0.0001326086957, +0.0001526086957, +0.0000928260870, +0.0000132608696, -0.0000265217391, -0.0000067391304, +0.0000332608696, +0.0000332608696, -0.0000265217391, -0.0001128260870, -0.0001591304348, -0.0001326086957, -0.0000730434783, +0.0000000000000, +0.0000863043478, +0.0001260869565, +0.0000597826087, -0.0000265217391, -0.0000995652174, -0.0001458695652, -0.0001658695652, -0.0001856521739, -0.0001991304348, -0.0001856521739, -0.0001260869565, -0.0000265217391, +0.0000265217391, +0.0000265217391, +0.0000132608696, -0.0000067391304, -0.0000200000000, -0.0000132608696, +0.0000000000000, +0.0000067391304, -0.0000200000000, -0.0001193478261, -0.0002056521739, -0.0002389130435, -0.0001856521739, -0.0000597826087, +0.0000265217391, +0.0000530434783, +0.0000200000000, -0.0000332608696, -0.0000863043478, -0.0000863043478, -0.0000397826087, +0.0000067391304, +0.0000200000000, +0.0000000000000, -0.0000730434783, -0.0001458695652, -0.0001393478261, -0.0000795652174, -0.0000132608696, +0.0000067391304, -0.0000332608696, -0.0001060869565, -0.0001723913043, -0.0002123913043, -0.0002123913043, -0.0001856521739, -0.0001393478261, -0.0000730434783, -0.0000200000000, +0.0000000000000, -0.0000132608696, -0.0000332608696, -0.0000200000000, +0.0000000000000, -0.0000265217391, -0.0000995652174, -0.0001658695652, -0.0001591304348, -0.0000597826087, +0.0000597826087, +0.0001193478261, +0.0001128260870, +0.0000597826087, -0.0000200000000, -0.0001060869565, -0.0001060869565, +0.0000067391304, +0.0001060869565, +0.0000928260870, +0.0000000000000, -0.0001326086957, -0.0001991304348, -0.0001591304348, -0.0000200000000, +0.0001193478261, +0.0002389130435, +0.0002786956522, +0.0001991304348, +0.0000465217391, -0.0000200000000, -0.0000132608696, +0.0000000000000, +0.0000067391304, +0.0000265217391, +0.0000332608696, +0.0000132608696, +0.0000200000000, +0.0000530434783, +0.0000730434783, +0.0000597826087, +0.0000332608696, +0.0000067391304, +0.0000200000000, +0.0000730434783, +0.0001658695652, +0.0002321739130, +0.0001723913043, +0.0000465217391, -0.0000730434783, -0.0001393478261, -0.0000863043478, +0.0000200000000, +0.0000465217391, -0.0000265217391, -0.0001591304348, -0.0002189130435, -0.0001193478261, +0.0000465217391, +0.0002056521739, +0.0003052173913, +0.0002719565217, +0.0001260869565, -0.0000332608696, -0.0001193478261, -0.0000730434783, +0.0000200000000, +0.0000597826087, +0.0000200000000, -0.0000530434783, -0.0000995652174, -0.0000730434783, -0.0000132608696, +0.0000530434783, +0.0001128260870, +0.0001128260870, +0.0000530434783, -0.0000200000000, -0.0000597826087, -0.0000265217391, +0.0000332608696, +0.0000730434783, +0.0000995652174, +0.0001060869565, +0.0000465217391, -0.0000597826087, -0.0001791304348, -0.0002189130435, -0.0001260869565, +0.0000530434783, +0.0002321739130, +0.0002654347826, +0.0001458695652, -0.0000200000000, -0.0001791304348, -0.0002586956522, -0.0001991304348, -0.0000795652174, +0.0000132608696, +0.0000397826087, +0.0000067391304, -0.0000465217391, -0.0000863043478, -0.0000995652174, -0.0000863043478, -0.0000597826087, -0.0000332608696, -0.0000132608696, -0.0000265217391, -0.0000332608696, -0.0000132608696, -0.0000067391304, -0.0000265217391, -0.0000200000000, +0.0000067391304, +0.0000200000000, +0.0000265217391, +0.0000200000000, +0.0000000000000, -0.0000597826087, -0.0001326086957, -0.0001723913043, -0.0001591304348, -0.0000928260870, +0.0000000000000, +0.0000995652174, +0.0001326086957, +0.0000730434783, -0.0000332608696, -0.0001128260870, -0.0000928260870, -0.0000132608696, +0.0000265217391, +0.0000465217391, +0.0000332608696, -0.0000132608696, -0.0000863043478, -0.0001193478261, -0.0000995652174, -0.0000663043478, -0.0000530434783, -0.0000530434783, -0.0000663043478, -0.0000928260870, -0.0000863043478, -0.0000332608696, +0.0000132608696, +0.0000200000000, +0.0000000000000, -0.0000465217391, -0.0000795652174, -0.0001060869565, -0.0001193478261, -0.0001393478261, -0.0001393478261, -0.0000730434783, +0.0000000000000, +0.0000265217391, +0.0000067391304, -0.0000465217391, -0.0001260869565, -0.0001591304348, -0.0001260869565, -0.0000663043478, -0.0000200000000, +0.0000067391304, +0.0000265217391, +0.0000067391304, -0.0000397826087, -0.0000795652174, -0.0000995652174, -0.0000928260870, -0.0000663043478, +0.0000067391304, +0.0001060869565, +0.0001526086957, +0.0001326086957, +0.0000465217391, -0.0000465217391, -0.0001060869565, -0.0000863043478, -0.0000465217391, -0.0000530434783, -0.0000995652174, -0.0001393478261, -0.0001393478261, -0.0000928260870, -0.0000265217391, +0.0000265217391, +0.0000067391304, -0.0000663043478, -0.0001458695652, -0.0001658695652, -0.0001193478261, -0.0000332608696, +0.0000332608696, +0.0000530434783, +0.0000265217391, -0.0000200000000, -0.0000663043478, -0.0000863043478, -0.0000863043478, -0.0000795652174, -0.0000928260870, -0.0000995652174, -0.0000795652174, +0.0000000000000, +0.0001128260870, +0.0001723913043, +0.0001393478261, +0.0000597826087, -0.0000332608696, -0.0001260869565, -0.0001591304348, -0.0001193478261, -0.0000332608696, +0.0000332608696, +0.0000265217391, -0.0000132608696, -0.0000530434783, -0.0000597826087, -0.0000200000000, +0.0000332608696, +0.0000663043478, +0.0000597826087, -0.0000067391304, -0.0001128260870, -0.0001923913043, -0.0002056521739, -0.0001393478261, -0.0000132608696, +0.0000928260870, +0.0001193478261, +0.0000465217391, -0.0000597826087, -0.0001458695652, -0.0001723913043, -0.0001260869565, -0.0000200000000, +0.0000795652174, +0.0001128260870, +0.0000465217391, -0.0000597826087, -0.0001393478261, -0.0001393478261, -0.0000863043478, -0.0000265217391, +0.0000397826087, +0.0000795652174, +0.0000332608696, +0.0000000000000, -0.0000132608696, -0.0000200000000, -0.0000132608696, -0.0000265217391, -0.0000597826087, -0.0001128260870, -0.0001723913043, -0.0001658695652, -0.0000928260870, +0.0000000000000, +0.0000730434783, +0.0001060869565, +0.0001128260870, +0.0000863043478, +0.0000265217391, -0.0000597826087, -0.0001526086957, -0.0002256521739, -0.0002454347826, -0.0001991304348, -0.0000863043478, +0.0000397826087, +0.0001326086957, +0.0001260869565, +0.0000200000000, -0.0000730434783, -0.0000663043478, +0.0000132608696, +0.0001193478261, +0.0001791304348, +0.0001326086957, +0.0000132608696, -0.0001128260870, -0.0001856521739, -0.0001591304348, -0.0000465217391, +0.0000795652174, +0.0001856521739, +0.0002056521739, +0.0001591304348, +0.0000928260870, +0.0000397826087, +0.0000067391304, -0.0000132608696, -0.0000132608696, -0.0000067391304, -0.0000200000000, -0.0000397826087, -0.0000067391304, +0.0000795652174, +0.0001791304348, +0.0002123913043, +0.0001060869565, -0.0000795652174, -0.0002256521739, -0.0002454347826, -0.0001393478261, +0.0000200000000, +0.0001393478261, +0.0001658695652, +0.0001260869565, +0.0000597826087, +0.0000397826087, +0.0000795652174, +0.0001128260870, +0.0001060869565, +0.0000465217391, -0.0000132608696, -0.0000265217391, +0.0000000000000, +0.0000332608696, +0.0000597826087, +0.0000465217391, +0.0000067391304, +0.0000000000000, +0.0000200000000, +0.0000397826087, +0.0000397826087, +0.0000000000000, -0.0000397826087, -0.0000465217391, -0.0000332608696, -0.0000067391304, +0.0000200000000, +0.0000067391304, -0.0000132608696, -0.0000332608696, -0.0000200000000, +0.0000067391304, +0.0000265217391, +0.0000200000000, +0.0000132608696, -0.0000067391304, -0.0000397826087, -0.0000663043478, -0.0000663043478, +0.0000000000000, +0.0001128260870, +0.0001923913043, +0.0001856521739, +0.0000863043478, -0.0000332608696, -0.0001128260870, -0.0001393478261, -0.0000663043478, +0.0000663043478, +0.0001723913043, +0.0001923913043, +0.0001260869565, +0.0000530434783, +0.0000200000000, +0.0000132608696, +0.0000132608696, -0.0000200000000, -0.0000995652174, -0.0001591304348, -0.0001658695652, -0.0001193478261, -0.0000265217391, +0.0000730434783, +0.0001326086957, +0.0001393478261, +0.0000995652174, +0.0000730434783, +0.0000795652174, +0.0000928260870, +0.0000730434783, +0.0000332608696, -0.0000200000000, -0.0000863043478, -0.0001060869565, -0.0000730434783, +0.0000132608696, +0.0001193478261, +0.0001591304348, +0.0001458695652, +0.0000795652174, -0.0000332608696, -0.0001260869565, -0.0001393478261, -0.0001060869565, -0.0000530434783, +0.0000000000000, +0.0000663043478, +0.0001326086957, +0.0001393478261, +0.0001128260870, +0.0001128260870, +0.0001326086957, +0.0001393478261, +0.0001128260870, +0.0000530434783, +0.0000000000000, -0.0000067391304, +0.0000000000000, +0.0000265217391, +0.0000663043478, +0.0000663043478, +0.0000465217391, +0.0000200000000, +0.0000132608696, +0.0000332608696, +0.0000597826087, +0.0000863043478, +0.0000795652174, +0.0000200000000, -0.0000265217391, -0.0000132608696, +0.0000200000000, +0.0000465217391, +0.0000663043478, +0.0000397826087, -0.0000397826087, -0.0001591304348, -0.0002521739130, -0.0002521739130, -0.0001393478261, +0.0000397826087, +0.0002321739130, +0.0003317391304, +0.0003117391304, +0.0002189130435, +0.0000863043478, -0.0000397826087, -0.0001326086957, -0.0001326086957, -0.0000795652174, +0.0000000000000, +0.0000663043478, +0.0001060869565, +0.0001060869565, +0.0000730434783, +0.0000067391304, -0.0000465217391, -0.0000597826087, -0.0000465217391, +0.0000000000000, +0.0000863043478, +0.0001723913043, +0.0002123913043, +0.0001526086957, +0.0000530434783, -0.0000200000000, -0.0000730434783, -0.0000795652174, -0.0000397826087, +0.0000200000000, +0.0000995652174, +0.0001260869565, +0.0000863043478, +0.0000265217391, -0.0000332608696, -0.0000730434783, -0.0000530434783, +0.0000000000000, +0.0000597826087, +0.0000795652174, +0.0000663043478, +0.0000332608696, +0.0000000000000, -0.0000132608696, -0.0000067391304, +0.0000000000000, +0.0000265217391, +0.0000397826087, +0.0000332608696, +0.0000132608696, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/13-fender-superchamp-sm57-off.h000066400000000000000000001452541247673406200265210ustar00rootroot00000000000000float fender_superchamp_sm57_off[] = { +0.0000000000000, +0.0000657422902, +0.0001240736314, +0.0000874970117, -0.0000437485059, -0.0002041596940, -0.0002918957686, -0.0002699019842, -0.0001458283529, +0.0000291656706, +0.0002115706431, +0.0003136504901, +0.0003136504901, +0.0001895768587, +0.0000000000000, -0.0001824049725, -0.0003064786039, -0.0003136504901, -0.0001969878078, -0.0000074109491, +0.0001969878078, +0.0003428161607, +0.0003719818312, +0.0002773129333, +0.0000874970117, -0.0001166626823, -0.0002918957686, -0.0003573989959, -0.0002918957686, -0.0001094907961, +0.0001094907961, +0.0003136504901, +0.0004305522352, +0.0004085584509, +0.0002773129333, +0.0000657422902, -0.0001458283529, -0.0003064786039, -0.0003573989959, -0.0002844848195, -0.0001240736314, +0.0000729141764, +0.0002553191489, +0.0003502271097, +0.0003428161607, +0.0002335644274, +0.0000729141764, -0.0000874970117, -0.0002041596940, -0.0002407363137, -0.0001824049725, -0.0000657422902, +0.0000657422902, +0.0001824049725, +0.0002335644274, +0.0002189815922, +0.0001532393019, +0.0000657422902, -0.0000145828353, -0.0000583313411, -0.0000583313411, -0.0000291656706, +0.0000074109491, +0.0000511594549, +0.0000803251255, +0.0000874970117, +0.0000874970117, +0.0000874970117, +0.0000949079608, +0.0001020798470, +0.0001020798470, +0.0000874970117, +0.0000437485059, -0.0000074109491, -0.0000583313411, -0.0000729141764, -0.0000365766197, +0.0000437485059, +0.0001678221372, +0.0002844848195, +0.0003428161607, +0.0003064786039, +0.0001749940234, -0.0000074109491, -0.0001895768587, -0.0002990676548, -0.0002918957686, -0.0001386564667, +0.0000874970117, +0.0003356442744, +0.0005034664117, +0.0005180492470, +0.0003573989959, +0.0000657422902, -0.0002407363137, -0.0004743007411, -0.0005326320822, -0.0003719818312, -0.0000437485059, +0.0003356442744, +0.0006492947645, +0.0007587855606, +0.0006201290940, +0.0002627300980, -0.0001895768587, -0.0005909634234, -0.0007879512312, -0.0007004542195, -0.0003428161607, +0.0001678221372, +0.0006638775998, +0.0009703562037, +0.0009849390390, +0.0006858713842, +0.0001678221372, -0.0003865646665, -0.0008097059527, -0.0009483624193, -0.0007513746115, -0.0002844848195, +0.0002918957686, +0.0008097059527, +0.0010798469998, +0.0010141047095, +0.0006421228783, +0.0000803251255, -0.0004668897920, -0.0008391106861, -0.0009046139135, -0.0006492947645, -0.0001604111881, +0.0003939756156, +0.0008242887880, +0.0009995218743, +0.0008536935214, +0.0004523069567, -0.0000657422902, -0.0005398039684, -0.0007951231174, -0.0007659574468, -0.0004597179058, +0.0000000000000, +0.0004743007411, +0.0007951231174, +0.0008608654076, +0.0006567057136, +0.0002553191489, -0.0002041596940, -0.0005835524743, -0.0007587855606, -0.0006784604351, -0.0003719818312, +0.0000511594549, +0.0004597179058, +0.0007296198900, +0.0007879512312, +0.0006275400430, +0.0003064786039, -0.0000657422902, -0.0003939756156, -0.0005835524743, -0.0005835524743, -0.0004159694000, -0.0001166626823, +0.0002115706431, +0.0004960554626, +0.0006638775998, +0.0006712885489, +0.0005180492470, +0.0002407363137, -0.0000803251255, -0.0003719818312, -0.0005617977528, -0.0005763805881, -0.0004159694000, -0.0001094907961, +0.0002627300980, +0.0006127181449, +0.0008242887880, +0.0008242887880, +0.0006055462587, +0.0002115706431, -0.0002481472627, -0.0006421228783, -0.0008391106861, -0.0007733683959, -0.0004305522352, +0.0000874970117, +0.0006421228783, +0.0010358594310, +0.0011307673918, +0.0008682763567, +0.0002918957686, -0.0004085584509, -0.0010212765957, -0.0013205833134, -0.0011745158977, -0.0005981353096, +0.0002189815922, +0.0010358594310, +0.0015467367918, +0.0015830743486, +0.0010798469998, +0.0001969878078, -0.0007733683959, -0.0015321539565, -0.0017946449916, -0.0014444178819, -0.0005689696390, +0.0005398039684, +0.0015393258427, +0.0020719579249, +0.0019187186230, +0.0011161845565, -0.0000949079608, -0.0013131723643, -0.0021157064308, -0.0022032034425, -0.0015175711212, -0.0002699019842, +0.0011090126703, +0.0021522830504, +0.0024731054267, +0.0019478842936, +0.0007222089410, -0.0007733683959, -0.0020353813053, -0.0026337556777, -0.0023346880230, -0.0012548410232, +0.0002553191489, +0.0016853932584, +0.0025608415013, +0.0025825962228, +0.0017437245996, +0.0003210614392, -0.0012110925173, -0.0023564427444, -0.0027504183600, -0.0022615347836, -0.0010578532154, +0.0004305522352, +0.0017291417643, +0.0024001912503, +0.0022397800622, +0.0013277551996, +0.0000000000000, -0.0012914176428, -0.0021231173799, -0.0022469519484, -0.0016633994741, -0.0005909634234, +0.0005835524743, +0.0014809945016, +0.0018238106622, +0.0015321539565, +0.0007222089410, -0.0003064786039, -0.0012328472388, -0.0017583074349, -0.0017437245996, -0.0011890987330, -0.0002918957686, +0.0006638775998, +0.0014006693760, +0.0016708104231, +0.0014006693760, +0.0006858713842, -0.0002481472627, -0.0011235955056, -0.0016925651446, -0.0018020559407, -0.0014518288310, -0.0007805402821, +0.0000145828353, +0.0007222089410, +0.0011890987330, +0.0013205833134, +0.0011307673918, +0.0006492947645, +0.0000074109491, -0.0006858713842, -0.0012694238585, -0.0016342338035, -0.0016196509682, -0.0012402581879, -0.0005252211332, +0.0003865646665, +0.0009337795840, +0.0015976571838, +0.0014080803251, +0.0004743007411, -0.0003719818312, -0.0011161845565, -0.0017874731054, -0.0021157064308, -0.0019333014583, -0.0011965096820, -0.0002041596940, +0.0006201290940, +0.0009629452546, +0.0004451350705, -0.0007076261057, -0.0023638536935, -0.0038448481951, -0.0047786277791, -0.0047274683242, -0.0037499402343, -0.0021377002152, -0.0005981353096, +0.0001458283529, -0.0004085584509, -0.0021522830504, -0.0053695912025, -0.0061647143199, -0.0108995935931, -0.0199244561320, -0.0062450394454, +0.0215075304805, +0.0279567296199, -0.0194135787712, -0.1062459956969, -0.1249813530959, -0.0293210614392, +0.0840016734401, +0.1751386564667, +0.2390482907005, +0.2214219459718, +0.1214501553909, -0.0119136983027, -0.1176930432704, -0.1462553191489, -0.1090621563471, -0.0459113076739, +0.0017071479799, +0.0067922543629, -0.0007805402821, +0.0085868993545, +0.0275847477887, +0.0442699019842, +0.0460133875209, +0.0215804446569, -0.0114979679656, -0.0345957446809, -0.0343841740378, -0.0125484102319, +0.0092216112838, +0.0175094429835, +0.0124754960555, -0.0068651685393, -0.0206538369591, -0.0117750418360, -0.0023638536935, -0.0031006454698, -0.0048735357399, -0.0052309347358, -0.0034872101363, +0.0066827635668, +0.0165902462348, +0.0116729619890, -0.0040781735596, -0.0182756394932, -0.0250313172364, -0.0251479799187, -0.0206758307435, -0.0131247908200, -0.0026191728425, +0.0038811857519, +0.0033193879990, -0.0031955534306, -0.0107317714559, -0.0146569447765, -0.0195158976811, -0.0236158259622, -0.0183923021755, -0.0017508964858, +0.0140368156825, +0.0181879034186, +0.0127673918240, +0.0069234998805, +0.0020719579249, +0.0000291656706, +0.0030203203443, +0.0068360028688, +0.0054790819986, -0.0043409036577, -0.0183777193402, -0.0289782452785, -0.0299923499880, -0.0216899354530, -0.0105933540521, -0.0025388477169, +0.0041876643557, +0.0079813530959, +0.0069600765001, +0.0031152283050, -0.0023638536935, -0.0062961989003, -0.0077989481234, -0.0082295003586, -0.0085943103036, -0.0100241453502, -0.0092799426249, -0.0027066698542, +0.0033779584031, +0.0048589529046, +0.0029548171169, -0.0025608415013, -0.0073832177863, -0.0107901027970, -0.0131322017691, -0.0108778388716, -0.0060846282572, -0.0013860865408, +0.0037133636146, +0.0057999043749, +0.0032684676070, -0.0018166387760, -0.0072079847000, -0.0113227348793, -0.0148611044705, -0.0170425531915, -0.0143287114511, -0.0060554625867, +0.0043263208224, +0.0121910112360, +0.0147736074588, +0.0122201769065, +0.0050267750418, -0.0044867320105, -0.0116875448243, -0.0157219698781, -0.0164370069328, -0.0129278030122, -0.0065369352140, +0.0011307673918, +0.0080396844370, +0.0120086062634, +0.0115562993067, +0.0065661008845, +0.0005180492470, -0.0028087497012, -0.0026555103992, +0.0001749940234, +0.0050922782692, +0.0098491513268, +0.0115562993067, +0.0089954578054, +0.0046108056419, -0.0004085584509, -0.0045378914655, -0.0059313889553, -0.0061063829787, -0.0062742051159, -0.0060626344729, -0.0054644991633, -0.0040927563949, -0.0029693999522, -0.0022689457327, -0.0005543868037, +0.0010212765957, +0.0015175711212, +0.0007951231174, -0.0006347119292, -0.0011090126703, -0.0012768348076, -0.0019916327994, -0.0008828591920, +0.0008900310782, +0.0015759024623, +0.0020719579249, +0.0022543628974, +0.0017437245996, +0.0013060004781, +0.0015393258427, +0.0034508725795, +0.0063908677982, +0.0082732488645, +0.0081274205116, +0.0071788190294, +0.0065878556060, +0.0057635668181, +0.0035092039206, -0.0000511594549, -0.0036332775520, -0.0057489839828, -0.0054716710495, -0.0025608415013, +0.0007076261057, +0.0029619890031, +0.0057344011475, +0.0082220894095, +0.0090903657662, +0.0097616543151, +0.0108778388716, +0.0117824527851, +0.0114688022950, +0.0089005498446, +0.0054133397083, +0.0021231173799, +0.0005763805881, +0.0022981114033, +0.0055300023906, +0.0075802055941, +0.0074195553431, +0.0051580205594, +0.0034726273010, +0.0033633755678, +0.0034434616304, +0.0041219220655, +0.0045670571360, +0.0034946210853, +0.0022323691131, +0.0010432703801, +0.0000949079608, +0.0003136504901, +0.0008171169017, +0.0013423380349, +0.0023272770739, +0.0030203203443, +0.0034580444657, +0.0037936887401, +0.0034726273010, +0.0026920870189, +0.0025971790581, +0.0043263208224, +0.0063908677982, +0.0066610088453, +0.0053987568731, +0.0042825723165, +0.0035749462109, +0.0022761176189, -0.0003136504901, -0.0026409275639, -0.0030203203443, -0.0012182644035, +0.0021522830504, +0.0063545302415, +0.0096155868994, +0.0099949796797, +0.0065369352140, +0.0009120248625, -0.0033122161128, -0.0043409036577, -0.0017654793211, +0.0030640688501, +0.0070109968922, +0.0083024145350, +0.0065149414296, +0.0024367678699, -0.0008462825723, -0.0025754243366, -0.0036696151088, -0.0033267989481, -0.0017217308152, +0.0001678221372, +0.0019916327994, +0.0036478603873, +0.0053695912025, +0.0062670332297, +0.0053184317475, +0.0038010996892, +0.0023638536935, +0.0009120248625, +0.0002773129333, +0.0004743007411, +0.0002041596940, -0.0011307673918, -0.0029619890031, -0.0041876643557, -0.0038010996892, -0.0018969639015, +0.0002844848195, +0.0016414056897, +0.0017145589290, +0.0010578532154, +0.0009775280899, +0.0009703562037, +0.0006784604351, -0.0001094907961, -0.0014809945016, -0.0022106143916, -0.0022909395171, -0.0022543628974, -0.0019552952426, -0.0018458044466, -0.0015976571838, -0.0009775280899, -0.0003939756156, +0.0002189815922, +0.0002918957686, +0.0000000000000, -0.0001532393019, -0.0002407363137, -0.0002627300980, -0.0004814726273, -0.0010798469998, -0.0015904852976, -0.0020282094191, -0.0020793688740, -0.0013569208702, -0.0001969878078, +0.0006347119292, +0.0006201290940, -0.0001240736314, -0.0007879512312, -0.0012036815683, -0.0015613196271, -0.0017728902701, -0.0020719579249, -0.0023710255797, -0.0019333014583, -0.0010944298350, -0.0002773129333, +0.0002627300980, -0.0000145828353, -0.0005689696390, -0.0003648099450, +0.0004011475018, +0.0010578532154, +0.0005617977528, -0.0009557733684, -0.0025680133875, -0.0036770260579, -0.0035237867559, -0.0023272770739, -0.0009849390390, +0.0001094907961, +0.0008536935214, +0.0013934974898, +0.0010724360507, -0.0009411905331, -0.0036041118814, -0.0058438919436, -0.0072008128138, -0.0072517332058, -0.0055591680612, -0.0021886206072, +0.0014664116663, +0.0036770260579, +0.0038156825245, +0.0024585225914, +0.0005034664117, -0.0015684915133, -0.0030568969639, -0.0037865168539, -0.0037865168539, -0.0030423141286, -0.0022397800622, -0.0014664116663, -0.0006421228783, -0.0006712885489, -0.0014518288310, -0.0022251972269, -0.0027358355247, -0.0025316758307, -0.0015321539565, -0.0002773129333, +0.0007659574468, +0.0011890987330, +0.0010432703801, +0.0008171169017, +0.0005398039684, +0.0001312455176, -0.0000511594549, +0.0000074109491, +0.0000729141764, -0.0000657422902, -0.0006055462587, -0.0012182644035, -0.0010798469998, -0.0001969878078, +0.0009483624193, +0.0021740377719, +0.0027286636385, +0.0021740377719, +0.0010798469998, +0.0000219937844, -0.0005617977528, -0.0006784604351, -0.0010358594310, -0.0016853932584, -0.0023856084150, -0.0028670810423, -0.0026775041836, -0.0020136265838, -0.0013715037055, -0.0006127181449, +0.0004305522352, +0.0018603872819, +0.0028161606503, +0.0028379153717, +0.0022543628974, +0.0010944298350, -0.0002041596940, -0.0006930432704, -0.0002918957686, +0.0007150370547, +0.0017800621563, +0.0021231173799, +0.0017363136505, +0.0007513746115, -0.0005034664117, -0.0014152522113, -0.0013497489840, -0.0004305522352, +0.0003793927803, +0.0006201290940, +0.0007442027253, +0.0008097059527, +0.0006347119292, +0.0003428161607, +0.0001604111881, +0.0004011475018, +0.0009557733684, +0.0012914176428, +0.0013131723643, +0.0008171169017, -0.0003719818312, -0.0014955773368, -0.0018823810662, -0.0015101601721, -0.0002041596940, +0.0015247430074, +0.0029985656228, +0.0039760937126, +0.0037427683481, +0.0024001912503, +0.0008171169017, -0.0007951231174, -0.0017291417643, -0.0014226631604, -0.0004377241214, +0.0005981353096, +0.0011090126703, +0.0009483624193, +0.0004888835764, -0.0004523069567, -0.0016559885250, -0.0021448721014, -0.0017583074349, -0.0008171169017, +0.0003428161607, +0.0013351661487, +0.0016196509682, +0.0010432703801, +0.0002481472627, -0.0002335644274, -0.0003502271097, -0.0001166626823, +0.0001824049725, +0.0002407363137, -0.0002553191489, -0.0010578532154, -0.0013497489840, -0.0009703562037, -0.0002261534784, +0.0005763805881, +0.0011307673918, +0.0015247430074, +0.0017217308152, +0.0014372459957, +0.0007805402821, +0.0000729141764, -0.0002553191489, -0.0001824049725, -0.0000365766197, -0.0000583313411, -0.0001969878078, -0.0002261534784, -0.0001312455176, -0.0000437485059, +0.0001824049725, +0.0006712885489, +0.0011090126703, +0.0009703562037, +0.0001458283529, -0.0007879512312, -0.0014226631604, -0.0016488166388, -0.0011381783409, -0.0001240736314, +0.0007222089410, +0.0011527611762, +0.0011527611762, +0.0003719818312, -0.0008462825723, -0.0016999760937, -0.0018603872819, -0.0015029882859, -0.0009849390390, -0.0006567057136, -0.0004231412862, -0.0001895768587, -0.0000803251255, +0.0000437485059, +0.0002041596940, -0.0000074109491, -0.0006784604351, -0.0015904852976, -0.0023930193641, -0.0025388477169, -0.0021740377719, -0.0016122400191, -0.0007805402821, -0.0002481472627, -0.0001240736314, -0.0000803251255, -0.0003210614392, -0.0005763805881, -0.0006421228783, -0.0009921109252, -0.0016708104231, -0.0024076021994, -0.0027286636385, -0.0023201051877, -0.0014592397801, -0.0004960554626, +0.0002335644274, +0.0005034664117, +0.0003428161607, -0.0001532393019, -0.0007367917762, -0.0010798469998, -0.0011381783409, -0.0009921109252, -0.0007951231174, -0.0006567057136, -0.0006638775998, -0.0007951231174, -0.0009046139135, -0.0009557733684, -0.0010286875448, -0.0013131723643, -0.0018238106622, -0.0021011235955, -0.0021085345446, -0.0019844609132, -0.0015613196271, -0.0010358594310, -0.0008608654076, -0.0009921109252, -0.0010798469998, -0.0010358594310, -0.0012985895290, -0.0017363136505, -0.0019261295721, -0.0020062156347, -0.0019844609132, -0.0017800621563, -0.0012622519723, -0.0006492947645, -0.0003136504901, -0.0000437485059, +0.0002627300980, +0.0004743007411, +0.0007004542195, +0.0005909634234, +0.0001020798470, -0.0004305522352, -0.0010944298350, -0.0014738226153, -0.0013497489840, -0.0011745158977, -0.0009629452546, -0.0008242887880, -0.0010358594310, -0.0013277551996, -0.0015759024623, -0.0017291417643, -0.0015101601721, -0.0011527611762, -0.0008536935214, -0.0004011475018, +0.0000291656706, +0.0004011475018, +0.0005689696390, +0.0001312455176, -0.0008242887880, -0.0015613196271, -0.0017363136505, -0.0016050681329, -0.0014444178819, -0.0010944298350, -0.0005472149175, -0.0002627300980, -0.0001749940234, -0.0000511594549, +0.0000437485059, +0.0003136504901, +0.0007587855606, +0.0006421228783, -0.0000219937844, -0.0007442027253, -0.0012182644035, -0.0012840066938, -0.0013205833134, -0.0014444178819, -0.0015247430074, -0.0016633994741, -0.0016342338035, -0.0013934974898, -0.0013060004781, -0.0012402581879, -0.0012110925173, -0.0012328472388, -0.0010358594310, -0.0005252211332, +0.0000074109491, +0.0002990676548, +0.0004668897920, +0.0005763805881, +0.0003210614392, -0.0002627300980, -0.0006858713842, -0.0007150370547, -0.0005909634234, -0.0005689696390, -0.0005180492470, -0.0003136504901, +0.0000145828353, +0.0003282333254, +0.0004305522352, +0.0003573989959, +0.0001749940234, -0.0000365766197, -0.0002773129333, -0.0003865646665, -0.0002844848195, -0.0001312455176, -0.0000803251255, -0.0001749940234, -0.0003428161607, -0.0003939756156, -0.0003356442744, +0.0000145828353, +0.0008242887880, +0.0014955773368, +0.0015684915133, +0.0009921109252, +0.0002041596940, -0.0003136504901, -0.0005106382979, -0.0004814726273, -0.0000437485059, +0.0005981353096, +0.0011453502271, +0.0015029882859, +0.0015759024623, +0.0011307673918, +0.0002627300980, -0.0004888835764, -0.0007951231174, -0.0006055462587, -0.0000949079608, +0.0004231412862, +0.0007805402821, +0.0006930432704, +0.0003282333254, +0.0002844848195, +0.0004377241214, +0.0003428161607, +0.0000219937844, -0.0002773129333, -0.0004597179058, -0.0004668897920, -0.0001895768587, +0.0004011475018, +0.0008828591920, +0.0010652641645, +0.0010944298350, +0.0009483624193, +0.0008974420273, +0.0011745158977, +0.0013131723643, +0.0010141047095, +0.0005034664117, -0.0000729141764, -0.0004814726273, -0.0005398039684, -0.0002553191489, +0.0003428161607, +0.0010578532154, +0.0015247430074, +0.0017508964858, +0.0018092278269, +0.0016342338035, +0.0013497489840, +0.0011599330624, +0.0010652641645, +0.0009775280899, +0.0007879512312, +0.0005689696390, +0.0004451350705, +0.0003502271097, +0.0003502271097, +0.0005034664117, +0.0006712885489, +0.0008682763567, +0.0011673440115, +0.0012985895290, +0.0011307673918, +0.0007733683959, +0.0004305522352, +0.0003865646665, +0.0007805402821, +0.0014006693760, +0.0019041357877, +0.0018969639015, +0.0014226631604, +0.0009411905331, +0.0006930432704, +0.0006421228783, +0.0006712885489, +0.0007004542195, +0.0007587855606, +0.0007951231174, +0.0008462825723, +0.0008900310782, +0.0007442027253, +0.0006201290940, +0.0007296198900, +0.0008900310782, +0.0009483624193, +0.0009775280899, +0.0009775280899, +0.0009120248625, +0.0006784604351, +0.0003356442744, +0.0000000000000, -0.0001969878078, -0.0000874970117, +0.0002115706431, +0.0005034664117, +0.0007367917762, +0.0009411905331, +0.0009849390390, +0.0008754482429, +0.0008391106861, +0.0008900310782, +0.0010212765957, +0.0012694238585, +0.0013860865408, +0.0012402581879, +0.0009775280899, +0.0006201290940, +0.0003793927803, +0.0003648099450, +0.0003573989959, +0.0004668897920, +0.0005981353096, +0.0005326320822, +0.0003648099450, +0.0003064786039, +0.0003719818312, +0.0003939756156, +0.0003865646665, +0.0004597179058, +0.0004960554626, +0.0004960554626, +0.0005180492470, +0.0004888835764, +0.0004960554626, +0.0005763805881, +0.0006421228783, +0.0004305522352, -0.0000657422902, -0.0004451350705, -0.0004451350705, -0.0001604111881, +0.0002918957686, +0.0008242887880, +0.0011819268468, +0.0012622519723, +0.0009995218743, +0.0005689696390, +0.0002627300980, +0.0000874970117, +0.0000365766197, +0.0001166626823, +0.0001312455176, +0.0000000000000, -0.0002335644274, -0.0004743007411, -0.0006055462587, -0.0005981353096, -0.0004377241214, -0.0001240736314, +0.0001749940234, +0.0003573989959, +0.0003939756156, +0.0002041596940, -0.0000949079608, -0.0002481472627, -0.0002481472627, -0.0003356442744, -0.0005252211332, -0.0007296198900, -0.0007587855606, -0.0003210614392, +0.0005252211332, +0.0014738226153, +0.0021085345446, +0.0018529763328, +0.0005981353096, -0.0009849390390, -0.0020939517093, -0.0021740377719, -0.0013643318193, -0.0002189815922, +0.0007733683959, +0.0012840066938, +0.0011673440115, +0.0006347119292, -0.0000511594549, -0.0007150370547, -0.0010286875448, -0.0009703562037, -0.0007659574468, -0.0004159694000, -0.0000074109491, +0.0003064786039, +0.0005326320822, +0.0005252211332, +0.0002627300980, -0.0000657422902, -0.0004231412862, -0.0006275400430, -0.0006492947645, -0.0005835524743, -0.0003793927803, -0.0002773129333, -0.0003793927803, -0.0003648099450, -0.0002481472627, -0.0001824049725, +0.0000145828353, +0.0001969878078, +0.0002115706431, +0.0002041596940, +0.0000583313411, +0.0000000000000, +0.0001749940234, +0.0001166626823, -0.0002261534784, -0.0006858713842, -0.0010506813292, -0.0008754482429, -0.0005180492470, -0.0003648099450, -0.0001094907961, +0.0002189815922, +0.0004159694000, +0.0004159694000, +0.0002115706431, +0.0002189815922, +0.0003648099450, +0.0001166626823, -0.0001969878078, -0.0000803251255, +0.0002773129333, +0.0005763805881, +0.0007004542195, +0.0006275400430, +0.0003865646665, +0.0000583313411, -0.0003793927803, -0.0006492947645, -0.0002407363137, +0.0005180492470, +0.0009046139135, +0.0009629452546, +0.0009337795840, +0.0008242887880, +0.0006492947645, +0.0003282333254, -0.0001240736314, -0.0005981353096, -0.0007587855606, -0.0004814726273, +0.0000219937844, +0.0003865646665, +0.0004888835764, +0.0004085584509, +0.0003282333254, +0.0003210614392, +0.0003793927803, +0.0004305522352, +0.0004743007411, +0.0005763805881, +0.0007733683959, +0.0008828591920, +0.0007442027253, +0.0005034664117, +0.0002189815922, -0.0000074109491, +0.0000291656706, +0.0003428161607, +0.0007076261057, +0.0008682763567, +0.0008974420273, +0.0009191967487, +0.0006858713842, +0.0003210614392, +0.0002261534784, +0.0003719818312, +0.0005689696390, +0.0006347119292, +0.0004668897920, +0.0004159694000, +0.0004814726273, +0.0004377241214, +0.0004159694000, +0.0004231412862, +0.0003282333254, +0.0002041596940, +0.0001166626823, +0.0001824049725, +0.0003502271097, +0.0004743007411, +0.0007076261057, +0.0009557733684, +0.0010652641645, +0.0011161845565, +0.0010141047095, +0.0007659574468, +0.0004305522352, +0.0000437485059, -0.0001094907961, +0.0000074109491, +0.0002407363137, +0.0004451350705, +0.0004231412862, +0.0002844848195, +0.0002335644274, +0.0002553191489, +0.0003939756156, +0.0007587855606, +0.0011235955056, +0.0012328472388, +0.0009629452546, +0.0004888835764, +0.0002041596940, +0.0002041596940, +0.0002844848195, +0.0002918957686, +0.0001824049725, +0.0000511594549, +0.0000000000000, +0.0000365766197, +0.0002115706431, +0.0003282333254, +0.0003064786039, +0.0003356442744, +0.0004814726273, +0.0006275400430, +0.0006784604351, +0.0005398039684, +0.0002553191489, -0.0000949079608, -0.0003573989959, -0.0002918957686, +0.0000365766197, +0.0003356442744, +0.0004523069567, +0.0003210614392, +0.0000583313411, -0.0001824049725, -0.0003356442744, -0.0002627300980, +0.0000145828353, +0.0003136504901, +0.0005763805881, +0.0007076261057, +0.0006275400430, +0.0004231412862, +0.0001240736314, -0.0002773129333, -0.0006127181449, -0.0007587855606, -0.0006712885489, -0.0004159694000, -0.0001386564667, +0.0000000000000, -0.0000291656706, -0.0001386564667, -0.0001824049725, -0.0001094907961, +0.0000729141764, +0.0002407363137, +0.0001969878078, -0.0000874970117, -0.0004668897920, -0.0006421228783, -0.0005617977528, -0.0003428161607, -0.0000949079608, -0.0000145828353, -0.0001824049725, -0.0003939756156, -0.0004523069567, -0.0003793927803, -0.0003865646665, -0.0004743007411, -0.0004377241214, -0.0003356442744, -0.0002335644274, -0.0001386564667, -0.0001604111881, -0.0002481472627, -0.0003210614392, -0.0004085584509, -0.0004085584509, -0.0003136504901, -0.0002335644274, -0.0002627300980, -0.0004011475018, -0.0005835524743, -0.0006567057136, -0.0005689696390, -0.0003356442744, +0.0000000000000, +0.0002481472627, +0.0002627300980, +0.0001386564667, -0.0001020798470, -0.0004523069567, -0.0006421228783, -0.0006421228783, -0.0005180492470, -0.0003502271097, -0.0002918957686, -0.0002699019842, -0.0002335644274, -0.0002115706431, -0.0001386564667, -0.0000949079608, -0.0001604111881, -0.0002407363137, -0.0002918957686, -0.0003428161607, -0.0003939756156, -0.0004743007411, -0.0003939756156, -0.0001532393019, -0.0000145828353, +0.0000000000000, +0.0000583313411, +0.0001166626823, +0.0000874970117, -0.0000803251255, -0.0004085584509, -0.0007442027253, -0.0009921109252, -0.0010212765957, -0.0007076261057, -0.0002990676548, -0.0001312455176, -0.0002773129333, -0.0006567057136, -0.0008754482429, -0.0007805402821, -0.0005689696390, -0.0003648099450, -0.0002773129333, -0.0003428161607, -0.0004523069567, -0.0005472149175, -0.0004814726273, -0.0001386564667, +0.0001678221372, +0.0001094907961, -0.0003865646665, -0.0008682763567, -0.0009337795840, -0.0006930432704, -0.0003428161607, -0.0000291656706, +0.0000145828353, -0.0002773129333, -0.0007367917762, -0.0009703562037, -0.0008242887880, -0.0005034664117, -0.0002041596940, -0.0001678221372, -0.0003939756156, -0.0005981353096, -0.0006275400430, -0.0004668897920, -0.0002481472627, -0.0001094907961, +0.0000000000000, +0.0000219937844, -0.0001386564667, -0.0003648099450, -0.0005472149175, -0.0007076261057, -0.0008391106861, -0.0008171169017, -0.0006055462587, -0.0004159694000, -0.0002699019842, -0.0001312455176, -0.0000874970117, -0.0001532393019, -0.0003282333254, -0.0005180492470, -0.0005909634234, -0.0005981353096, -0.0005472149175, -0.0005106382979, -0.0006055462587, -0.0006201290940, -0.0004231412862, -0.0001094907961, +0.0001458283529, +0.0001604111881, -0.0000657422902, -0.0004159694000, -0.0007442027253, -0.0008536935214, -0.0007296198900, -0.0004597179058, -0.0000874970117, +0.0001020798470, +0.0000583313411, -0.0000729141764, -0.0004011475018, -0.0008391106861, -0.0010212765957, -0.0008974420273, -0.0006421228783, -0.0003282333254, +0.0000074109491, +0.0002627300980, +0.0002699019842, +0.0000729141764, -0.0001895768587, -0.0003939756156, -0.0004814726273, -0.0005835524743, -0.0006784604351, -0.0006421228783, -0.0005689696390, -0.0005763805881, -0.0006055462587, -0.0005689696390, -0.0004159694000, -0.0002041596940, -0.0000219937844, +0.0001094907961, +0.0002041596940, +0.0001749940234, -0.0000437485059, -0.0003064786039, -0.0003939756156, -0.0003865646665, -0.0003282333254, -0.0002115706431, -0.0001240736314, -0.0000437485059, +0.0000000000000, -0.0000657422902, -0.0001386564667, -0.0001458283529, -0.0001604111881, -0.0001532393019, -0.0001312455176, -0.0000803251255, -0.0000365766197, -0.0000583313411, -0.0001312455176, -0.0002335644274, -0.0003136504901, -0.0002335644274, -0.0001166626823, -0.0001386564667, -0.0002773129333, -0.0003648099450, -0.0003210614392, -0.0002627300980, -0.0002990676548, -0.0003282333254, -0.0002407363137, -0.0000949079608, +0.0000949079608, +0.0002844848195, +0.0003282333254, +0.0001969878078, -0.0000874970117, -0.0003648099450, -0.0004085584509, -0.0002990676548, -0.0001094907961, +0.0000657422902, +0.0000657422902, -0.0001312455176, -0.0003939756156, -0.0005398039684, -0.0004523069567, -0.0002407363137, -0.0000219937844, +0.0000874970117, -0.0000219937844, -0.0002481472627, -0.0004231412862, -0.0004743007411, -0.0003502271097, -0.0001312455176, +0.0000074109491, +0.0000657422902, +0.0000949079608, +0.0000949079608, +0.0000583313411, +0.0000365766197, +0.0000583313411, +0.0001020798470, +0.0001604111881, +0.0002627300980, +0.0003865646665, +0.0004743007411, +0.0004668897920, +0.0003210614392, +0.0000657422902, -0.0001749940234, -0.0003502271097, -0.0004451350705, -0.0004451350705, -0.0002918957686, -0.0000511594549, +0.0000511594549, +0.0000219937844, +0.0000000000000, -0.0000074109491, +0.0000365766197, +0.0001312455176, +0.0001895768587, +0.0001824049725, +0.0000874970117, -0.0000949079608, -0.0003210614392, -0.0004743007411, -0.0004231412862, -0.0001969878078, +0.0000000000000, +0.0000583313411, +0.0000219937844, -0.0000657422902, -0.0001895768587, -0.0002553191489, -0.0001895768587, -0.0000657422902, +0.0000219937844, +0.0000074109491, -0.0001166626823, -0.0002261534784, -0.0001969878078, -0.0000949079608, -0.0000219937844, +0.0000000000000, -0.0000291656706, -0.0000874970117, -0.0000657422902, +0.0000583313411, +0.0001678221372, +0.0001604111881, +0.0000219937844, -0.0001532393019, -0.0003064786039, -0.0003865646665, -0.0002773129333, -0.0000145828353, +0.0002189815922, +0.0003502271097, +0.0003210614392, +0.0001458283529, -0.0000365766197, -0.0001386564667, -0.0000949079608, +0.0000437485059, +0.0002335644274, +0.0003793927803, +0.0003719818312, +0.0002407363137, +0.0000803251255, +0.0000145828353, +0.0000803251255, +0.0001604111881, +0.0002041596940, +0.0001678221372, +0.0000145828353, -0.0000949079608, -0.0001240736314, -0.0001312455176, -0.0000511594549, +0.0000511594549, +0.0001604111881, +0.0002335644274, +0.0001969878078, +0.0001969878078, +0.0002335644274, +0.0001895768587, +0.0001166626823, +0.0000291656706, -0.0000874970117, -0.0001532393019, -0.0001166626823, +0.0000583313411, +0.0003210614392, +0.0004743007411, +0.0005326320822, +0.0005689696390, +0.0005689696390, +0.0005763805881, +0.0005472149175, +0.0004011475018, +0.0002189815922, +0.0000583313411, -0.0000949079608, -0.0002335644274, -0.0002990676548, -0.0002407363137, -0.0001312455176, -0.0000219937844, +0.0001020798470, +0.0002335644274, +0.0003210614392, +0.0003793927803, +0.0004085584509, +0.0004011475018, +0.0003136504901, +0.0001458283529, +0.0000729141764, +0.0001386564667, +0.0002335644274, +0.0002699019842, +0.0002481472627, +0.0002189815922, +0.0002627300980, +0.0003064786039, +0.0002115706431, +0.0000000000000, -0.0001824049725, -0.0002990676548, -0.0003136504901, -0.0002115706431, -0.0000219937844, +0.0001749940234, +0.0003064786039, +0.0003502271097, +0.0003282333254, +0.0002261534784, +0.0001240736314, +0.0000000000000, -0.0001166626823, -0.0000219937844, +0.0002627300980, +0.0005398039684, +0.0006567057136, +0.0005398039684, +0.0002553191489, -0.0000511594549, -0.0003136504901, -0.0003356442744, -0.0000437485059, +0.0003428161607, +0.0006275400430, +0.0006858713842, +0.0004305522352, +0.0000219937844, -0.0002990676548, -0.0003865646665, -0.0001824049725, +0.0001094907961, +0.0002553191489, +0.0002918957686, +0.0003428161607, +0.0004743007411, +0.0006275400430, +0.0006421228783, +0.0005106382979, +0.0003064786039, +0.0001020798470, +0.0000949079608, +0.0003210614392, +0.0006055462587, +0.0006784604351, +0.0004377241214, +0.0001532393019, +0.0000219937844, -0.0000365766197, -0.0000219937844, +0.0001386564667, +0.0002773129333, +0.0002990676548, +0.0002335644274, +0.0000729141764, -0.0000874970117, -0.0001312455176, +0.0000291656706, +0.0004011475018, +0.0007659574468, +0.0008900310782, +0.0007442027253, +0.0004451350705, +0.0000729141764, -0.0001749940234, -0.0002553191489, -0.0002335644274, -0.0001969878078, -0.0001240736314, -0.0000365766197, +0.0000657422902, +0.0001386564667, +0.0001312455176, +0.0001312455176, +0.0001604111881, +0.0001824049725, +0.0001386564667, +0.0000291656706, -0.0000949079608, -0.0001678221372, -0.0001166626823, +0.0000583313411, +0.0002261534784, +0.0002918957686, +0.0003064786039, +0.0003356442744, +0.0003282333254, +0.0002189815922, +0.0000949079608, +0.0000511594549, +0.0000365766197, -0.0000511594549, -0.0001240736314, -0.0000437485059, +0.0001166626823, +0.0002699019842, +0.0004231412862, +0.0005252211332, +0.0005326320822, +0.0004523069567, +0.0002844848195, +0.0001678221372, +0.0001678221372, +0.0001895768587, +0.0002041596940, +0.0002189815922, +0.0002115706431, +0.0002041596940, +0.0002115706431, +0.0002041596940, +0.0001824049725, +0.0001604111881, +0.0001386564667, +0.0001604111881, +0.0002041596940, +0.0002041596940, +0.0002699019842, +0.0004523069567, +0.0006347119292, +0.0007150370547, +0.0005763805881, +0.0002261534784, -0.0001166626823, -0.0002844848195, -0.0001532393019, +0.0002115706431, +0.0005909634234, +0.0007951231174, +0.0007296198900, +0.0004743007411, +0.0002335644274, +0.0000874970117, +0.0000000000000, -0.0000074109491, +0.0000437485059, +0.0000949079608, +0.0001166626823, +0.0001386564667, +0.0001824049725, +0.0002189815922, +0.0002041596940, +0.0002261534784, +0.0002990676548, +0.0003210614392, +0.0002481472627, +0.0001458283529, +0.0000583313411, +0.0000291656706, +0.0000583313411, +0.0001458283529, +0.0002773129333, +0.0003573989959, +0.0003502271097, +0.0002918957686, +0.0002041596940, +0.0001532393019, +0.0001532393019, +0.0001678221372, +0.0001824049725, +0.0002481472627, +0.0002990676548, +0.0003064786039, +0.0002699019842, +0.0001895768587, +0.0000949079608, +0.0000219937844, +0.0000000000000, +0.0000145828353, +0.0001312455176, +0.0002990676548, +0.0003064786039, +0.0001678221372, +0.0000583313411, +0.0000437485059, +0.0000874970117, +0.0001458283529, +0.0001969878078, +0.0002699019842, +0.0003502271097, +0.0004011475018, +0.0003502271097, +0.0001969878078, +0.0000583313411, -0.0000583313411, -0.0001458283529, -0.0001312455176, -0.0000949079608, -0.0000511594549, +0.0000074109491, +0.0000219937844, -0.0000437485059, -0.0001749940234, -0.0002918957686, -0.0002699019842, -0.0000949079608, +0.0000803251255, +0.0001895768587, +0.0002189815922, +0.0002041596940, +0.0001532393019, +0.0001386564667, +0.0001678221372, +0.0001749940234, +0.0001240736314, +0.0000365766197, -0.0000511594549, -0.0000657422902, -0.0000074109491, +0.0000583313411, +0.0000949079608, +0.0000657422902, +0.0000074109491, +0.0000291656706, +0.0000874970117, +0.0000803251255, +0.0000291656706, +0.0000511594549, +0.0001604111881, +0.0002773129333, +0.0002844848195, +0.0001604111881, -0.0000219937844, -0.0001824049725, -0.0002041596940, -0.0000729141764, +0.0001094907961, +0.0002553191489, +0.0002699019842, +0.0001824049725, +0.0001020798470, +0.0000729141764, +0.0000874970117, +0.0000803251255, -0.0000291656706, -0.0001749940234, -0.0002627300980, -0.0002481472627, -0.0000949079608, +0.0000511594549, +0.0000729141764, +0.0000074109491, -0.0001312455176, -0.0002261534784, -0.0001604111881, +0.0000000000000, +0.0001386564667, +0.0001678221372, +0.0000437485059, -0.0001386564667, -0.0003064786039, -0.0003939756156, -0.0002990676548, -0.0001094907961, +0.0000511594549, +0.0000657422902, -0.0000874970117, -0.0002189815922, -0.0002918957686, -0.0002844848195, -0.0001969878078, -0.0001386564667, -0.0001094907961, -0.0000437485059, -0.0000219937844, -0.0000437485059, -0.0000803251255, -0.0001749940234, -0.0002627300980, -0.0003282333254, -0.0003648099450, -0.0003793927803, -0.0003428161607, -0.0002261534784, -0.0001020798470, +0.0000000000000, +0.0000803251255, +0.0000657422902, -0.0000437485059, -0.0001895768587, -0.0002844848195, -0.0002407363137, -0.0001094907961, +0.0000219937844, +0.0001020798470, +0.0001094907961, +0.0000365766197, -0.0001094907961, -0.0002627300980, -0.0003136504901, -0.0003064786039, -0.0002189815922, -0.0000803251255, +0.0000000000000, +0.0000365766197, +0.0000729141764, +0.0000874970117, +0.0000511594549, -0.0000511594549, -0.0001604111881, -0.0002261534784, -0.0003064786039, -0.0003428161607, -0.0002990676548, -0.0002481472627, -0.0002407363137, -0.0002699019842, -0.0003210614392, -0.0003064786039, -0.0002189815922, -0.0001166626823, -0.0000365766197, -0.0000219937844, -0.0000365766197, -0.0000583313411, -0.0001312455176, -0.0001895768587, -0.0002189815922, -0.0002261534784, -0.0002115706431, -0.0002041596940, -0.0002115706431, -0.0001969878078, -0.0001312455176, -0.0000219937844, +0.0000511594549, +0.0000583313411, +0.0000074109491, -0.0000949079608, -0.0002115706431, -0.0002699019842, -0.0003064786039, -0.0002918957686, -0.0001969878078, -0.0001166626823, -0.0000874970117, -0.0000874970117, -0.0000511594549, +0.0000803251255, +0.0001824049725, +0.0001166626823, -0.0000511594549, -0.0002699019842, -0.0004159694000, -0.0004451350705, -0.0004231412862, -0.0003064786039, -0.0001678221372, -0.0001240736314, -0.0001166626823, -0.0000949079608, -0.0000365766197, +0.0000365766197, -0.0000074109491, -0.0001749940234, -0.0003282333254, -0.0003939756156, -0.0003136504901, -0.0001386564667, +0.0000074109491, +0.0000874970117, +0.0000657422902, -0.0000583313411, -0.0002553191489, -0.0004377241214, -0.0004668897920, -0.0002990676548, -0.0000657422902, +0.0000657422902, +0.0000511594549, -0.0000437485059, -0.0001312455176, -0.0001532393019, -0.0001678221372, -0.0001678221372, -0.0001386564667, -0.0001312455176, -0.0001895768587, -0.0002844848195, -0.0003573989959, -0.0002844848195, -0.0001312455176, +0.0000219937844, +0.0001240736314, +0.0001532393019, +0.0001020798470, +0.0000074109491, -0.0000511594549, -0.0000657422902, -0.0000874970117, -0.0001604111881, -0.0002481472627, -0.0003210614392, -0.0003502271097, -0.0003719818312, -0.0003356442744, -0.0002481472627, -0.0001604111881, -0.0000511594549, +0.0000803251255, +0.0002553191489, +0.0003865646665, +0.0003573989959, +0.0001604111881, -0.0000803251255, -0.0002481472627, -0.0002627300980, -0.0001604111881, -0.0000291656706, +0.0000803251255, +0.0000583313411, -0.0001166626823, -0.0003136504901, -0.0003793927803, -0.0002844848195, -0.0001240736314, -0.0000365766197, -0.0000365766197, -0.0001604111881, -0.0003356442744, -0.0004085584509, -0.0003064786039, -0.0001094907961, -0.0000145828353, -0.0000729141764, -0.0002041596940, -0.0003210614392, -0.0003064786039, -0.0001240736314, +0.0001094907961, +0.0002773129333, +0.0003136504901, +0.0002115706431, +0.0000803251255, -0.0000291656706, -0.0001094907961, -0.0001604111881, -0.0002553191489, -0.0003793927803, -0.0004523069567, -0.0004668897920, -0.0003719818312, -0.0002189815922, -0.0000657422902, +0.0000949079608, +0.0001532393019, +0.0000365766197, -0.0001020798470, -0.0001824049725, -0.0001749940234, -0.0000803251255, +0.0000074109491, +0.0000949079608, +0.0001604111881, +0.0001532393019, +0.0000511594549, -0.0000874970117, -0.0001604111881, -0.0001240736314, -0.0000365766197, +0.0000511594549, +0.0001166626823, +0.0001240736314, +0.0000803251255, -0.0000291656706, -0.0001604111881, -0.0002041596940, -0.0002261534784, -0.0002844848195, -0.0003356442744, -0.0003136504901, -0.0002189815922, -0.0000803251255, +0.0000657422902, +0.0001824049725, +0.0002481472627, +0.0002481472627, +0.0001678221372, +0.0000657422902, +0.0000000000000, -0.0000949079608, -0.0001969878078, -0.0001824049725, -0.0000583313411, +0.0000291656706, +0.0000291656706, -0.0000074109491, -0.0000803251255, -0.0001824049725, -0.0002553191489, -0.0002481472627, -0.0001240736314, +0.0001020798470, +0.0003502271097, +0.0004377241214, +0.0003502271097, +0.0001166626823, -0.0001678221372, -0.0003793927803, -0.0003865646665, -0.0002041596940, +0.0000145828353, +0.0001240736314, +0.0000365766197, -0.0001678221372, -0.0003428161607, -0.0003428161607, -0.0001604111881, +0.0001240736314, +0.0003648099450, +0.0004231412862, +0.0003064786039, +0.0001458283529, +0.0000437485059, -0.0000074109491, -0.0000583313411, -0.0001386564667, -0.0002335644274, -0.0002627300980, -0.0002189815922, -0.0001166626823, +0.0000074109491, +0.0001094907961, +0.0001749940234, +0.0001678221372, +0.0000803251255, +0.0000365766197, +0.0000729141764, +0.0001386564667, +0.0002041596940, +0.0002041596940, +0.0001094907961, -0.0000145828353, -0.0001312455176, -0.0001749940234, -0.0001020798470, -0.0000145828353, +0.0000074109491, +0.0000000000000, -0.0000145828353, -0.0000074109491, +0.0000219937844, +0.0000437485059, +0.0000365766197, +0.0000145828353, -0.0000365766197, -0.0000657422902, -0.0000074109491, +0.0000874970117, +0.0001678221372, +0.0001895768587, +0.0001240736314, +0.0000000000000, -0.0001678221372, -0.0002773129333, -0.0002407363137, -0.0000803251255, +0.0001458283529, +0.0003502271097, +0.0004231412862, +0.0003648099450, +0.0002115706431, +0.0000074109491, -0.0001312455176, -0.0002041596940, -0.0002115706431, -0.0001240736314, +0.0000000000000, +0.0001240736314, +0.0002115706431, +0.0002041596940, +0.0001312455176, +0.0000145828353, -0.0000949079608, -0.0001532393019, -0.0001166626823, -0.0000219937844, +0.0000437485059, +0.0001094907961, +0.0001678221372, +0.0002115706431, +0.0002773129333, +0.0003282333254, +0.0003210614392, +0.0002335644274, +0.0000365766197, -0.0001678221372, -0.0003136504901, -0.0003648099450, -0.0002918957686, -0.0001166626823, +0.0000219937844, +0.0001020798470, +0.0000949079608, +0.0000365766197, -0.0000074109491, -0.0000219937844, +0.0000219937844, +0.0001020798470, +0.0001458283529, +0.0001749940234, +0.0001386564667, +0.0000291656706, -0.0000437485059, -0.0000874970117, -0.0001240736314, -0.0001166626823, -0.0000803251255, -0.0000145828353, +0.0000657422902, +0.0001604111881, +0.0002261534784, +0.0002041596940, +0.0001604111881, +0.0001458283529, +0.0001458283529, +0.0001386564667, +0.0001020798470, +0.0000511594549, +0.0000219937844, +0.0000583313411, +0.0001532393019, +0.0002699019842, +0.0003502271097, +0.0003282333254, +0.0002335644274, +0.0001166626823, -0.0000145828353, -0.0001312455176, -0.0001240736314, -0.0000145828353, +0.0000583313411, +0.0000437485059, -0.0000219937844, -0.0000437485059, +0.0000000000000, +0.0000874970117, +0.0001969878078, +0.0002699019842, +0.0002553191489, +0.0001532393019, +0.0000365766197, -0.0000437485059, -0.0000803251255, -0.0000803251255, -0.0000437485059, +0.0000145828353, +0.0000657422902, +0.0001094907961, +0.0001240736314, +0.0001094907961, +0.0001020798470, +0.0000949079608, +0.0001166626823, +0.0001824049725, +0.0002115706431, +0.0002261534784, +0.0002041596940, +0.0001386564667, +0.0000803251255, +0.0000074109491, -0.0000291656706, +0.0000000000000, +0.0000074109491, +0.0000000000000, -0.0000365766197, -0.0000803251255, -0.0000803251255, -0.0000583313411, -0.0000803251255, -0.0000803251255, -0.0000074109491, +0.0001020798470, +0.0002261534784, +0.0002844848195, +0.0002627300980, +0.0001969878078, +0.0001678221372, +0.0002115706431, +0.0003064786039, +0.0004085584509, +0.0004743007411, +0.0004377241214, +0.0002627300980, +0.0000219937844, -0.0001166626823, -0.0000874970117, +0.0000949079608, +0.0002773129333, +0.0003210614392, +0.0001969878078, +0.0000437485059, +0.0000000000000, +0.0000437485059, +0.0001458283529, +0.0002553191489, +0.0003356442744, +0.0003064786039, +0.0001969878078, +0.0001312455176, +0.0001386564667, +0.0001604111881, +0.0001969878078, +0.0002115706431, +0.0001749940234, +0.0001678221372, +0.0002261534784, +0.0002990676548, +0.0003282333254, +0.0003210614392, +0.0003210614392, +0.0002990676548, +0.0002335644274, +0.0001824049725, +0.0001604111881, +0.0001969878078, +0.0002699019842, +0.0002990676548, +0.0002335644274, +0.0000949079608, -0.0000437485059, -0.0001678221372, -0.0001895768587, -0.0001020798470, +0.0000291656706, +0.0001678221372, +0.0002699019842, +0.0002627300980, +0.0001458283529, +0.0000291656706, +0.0000000000000, +0.0000874970117, +0.0001969878078, +0.0002627300980, +0.0002335644274, +0.0000729141764, -0.0000729141764, -0.0000949079608, +0.0000219937844, +0.0002335644274, +0.0003793927803, +0.0003428161607, +0.0001895768587, +0.0000511594549, -0.0000074109491, -0.0000145828353, -0.0000074109491, -0.0000219937844, -0.0000365766197, -0.0000583313411, -0.0000437485059, -0.0000219937844, -0.0000145828353, -0.0000291656706, -0.0000657422902, -0.0001020798470, -0.0001094907961, -0.0000657422902, +0.0000291656706, +0.0001166626823, +0.0001020798470, +0.0000000000000, -0.0001166626823, -0.0001458283529, -0.0000511594549, +0.0001312455176, +0.0002844848195, +0.0003356442744, +0.0002335644274, +0.0000145828353, -0.0001458283529, -0.0001749940234, -0.0001312455176, -0.0000874970117, -0.0000949079608, -0.0001678221372, -0.0001895768587, -0.0001020798470, +0.0000000000000, +0.0000437485059, +0.0000000000000, -0.0000803251255, -0.0001386564667, -0.0001240736314, -0.0000365766197, +0.0000511594549, +0.0000874970117, +0.0000437485059, -0.0000365766197, -0.0001532393019, -0.0002115706431, -0.0001749940234, -0.0000803251255, +0.0000291656706, +0.0001240736314, +0.0001678221372, +0.0001678221372, +0.0001312455176, +0.0000729141764, +0.0000000000000, -0.0000583313411, -0.0000511594549, +0.0000000000000, +0.0000219937844, -0.0000145828353, -0.0001094907961, -0.0002115706431, -0.0002773129333, -0.0003064786039, -0.0002990676548, -0.0002115706431, -0.0000657422902, +0.0000511594549, +0.0001020798470, +0.0000583313411, -0.0000365766197, -0.0001532393019, -0.0002189815922, -0.0001895768587, -0.0001386564667, -0.0001386564667, -0.0001312455176, -0.0000949079608, -0.0000511594549, -0.0000291656706, -0.0000145828353, +0.0000000000000, +0.0000291656706, +0.0000511594549, +0.0000291656706, -0.0000291656706, -0.0000729141764, -0.0000874970117, -0.0000874970117, -0.0001094907961, -0.0001386564667, -0.0001312455176, -0.0000949079608, -0.0000949079608, -0.0001240736314, -0.0001240736314, -0.0000949079608, -0.0000074109491, +0.0000874970117, +0.0001386564667, +0.0001166626823, +0.0000437485059, -0.0000437485059, -0.0000729141764, -0.0000729141764, -0.0000657422902, -0.0000291656706, +0.0000000000000, +0.0000000000000, +0.0000291656706, +0.0000874970117, +0.0001824049725, +0.0002773129333, +0.0003356442744, +0.0003282333254, +0.0002261534784, +0.0000583313411, -0.0000949079608, -0.0002115706431, -0.0002189815922, -0.0000729141764, +0.0001166626823, +0.0002189815922, +0.0001969878078, +0.0000874970117, +0.0000291656706, +0.0000657422902, +0.0001386564667, +0.0002189815922, +0.0002407363137, +0.0001824049725, +0.0000949079608, -0.0000145828353, -0.0001166626823, -0.0001312455176, -0.0000874970117, -0.0000291656706, +0.0000437485059, +0.0001094907961, +0.0001458283529, +0.0001386564667, +0.0001094907961, +0.0000583313411, +0.0000000000000, -0.0000365766197, -0.0000365766197, -0.0000074109491, +0.0000291656706, +0.0000583313411, +0.0000511594549, +0.0000145828353, -0.0000365766197, -0.0000729141764, -0.0000803251255, -0.0000437485059, +0.0000000000000, +0.0000291656706, +0.0000074109491, -0.0000365766197, -0.0000874970117, -0.0000874970117, +0.0000074109491, +0.0001094907961, +0.0001312455176, +0.0000729141764, +0.0000000000000, -0.0000511594549, -0.0001020798470, -0.0001749940234, -0.0001969878078, -0.0001604111881, -0.0000729141764, +0.0000219937844, +0.0001020798470, +0.0001386564667, +0.0001166626823, +0.0000219937844, -0.0000729141764, -0.0001532393019, -0.0001969878078, -0.0001604111881, -0.0000874970117, -0.0000291656706, +0.0000000000000, -0.0000291656706, -0.0001020798470, -0.0001240736314, -0.0000729141764, +0.0000000000000, +0.0000291656706, +0.0000074109491, -0.0000219937844, -0.0000365766197, -0.0000365766197, -0.0000219937844, -0.0000145828353, -0.0000219937844, -0.0000145828353, +0.0000145828353, +0.0000291656706, +0.0000074109491, -0.0000291656706, -0.0000583313411, -0.0000803251255, -0.0000729141764, -0.0000437485059, -0.0000365766197, -0.0000874970117, -0.0001824049725, -0.0002335644274, -0.0001969878078, -0.0000803251255, +0.0000365766197, +0.0001166626823, +0.0001240736314, +0.0000511594549, -0.0000583313411, -0.0001458283529, -0.0001895768587, -0.0001895768587, -0.0001604111881, -0.0001166626823, -0.0001020798470, -0.0000874970117, -0.0000365766197, +0.0000291656706, +0.0000803251255, +0.0000729141764, +0.0000000000000, -0.0000874970117, -0.0001458283529, -0.0001312455176, -0.0000657422902, -0.0000291656706, -0.0000803251255, -0.0001969878078, -0.0002990676548, -0.0003136504901, -0.0002335644274, -0.0000874970117, +0.0000583313411, +0.0001532393019, +0.0001604111881, +0.0001386564667, +0.0001094907961, +0.0000803251255, +0.0000365766197, -0.0000365766197, -0.0001312455176, -0.0001749940234, -0.0001458283529, -0.0000803251255, +0.0000000000000, +0.0000583313411, +0.0000437485059, -0.0000291656706, -0.0001094907961, -0.0001604111881, -0.0001532393019, -0.0000949079608, -0.0000291656706, +0.0000000000000, -0.0000219937844, -0.0000874970117, -0.0001458283529, -0.0001824049725, -0.0001678221372, -0.0001020798470, -0.0000219937844, +0.0000365766197, +0.0000803251255, +0.0000729141764, +0.0000291656706, -0.0000511594549, -0.0001532393019, -0.0002261534784, -0.0002553191489, -0.0002115706431, -0.0000874970117, +0.0000657422902, +0.0001824049725, +0.0002115706431, +0.0001458283529, +0.0000219937844, -0.0001094907961, -0.0002189815922, -0.0002773129333, -0.0002918957686, -0.0002335644274, -0.0001094907961, +0.0000000000000, +0.0000437485059, +0.0000657422902, +0.0000511594549, +0.0000219937844, -0.0000219937844, -0.0000729141764, -0.0000657422902, -0.0000291656706, +0.0000000000000, +0.0000145828353, +0.0000145828353, +0.0000074109491, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/14-fender-superchamp-at4050.h000066400000000000000000001736151247673406200260760ustar00rootroot00000000000000float fender_superchamp_at4050[] = { -0.0001856447689, -0.0002525547445, -0.0002525547445, -0.0001632603406, -0.0000075425791, +0.0001484184915, +0.0002822384428, +0.0003340632603, +0.0002822384428, +0.0001484184915, -0.0000148418491, -0.0001781021898, -0.0002673965937, -0.0002598540146, -0.0001708029197, -0.0000296836983, +0.0001114355231, +0.0002153284672, +0.0002450121655, +0.0002004866180, +0.0001114355231, +0.0000000000000, -0.0000742092457, -0.0001114355231, -0.0000817518248, -0.0000148418491, +0.0000742092457, +0.0001559610706, +0.0002228710462, +0.0002598540146, +0.0002673965937, +0.0002598540146, +0.0002301703163, +0.0001929440389, +0.0001559610706, +0.0001114355231, +0.0000742092457, +0.0000445255474, +0.0000296836983, +0.0000372262774, +0.0000669099757, +0.0001187347932, +0.0001632603406, +0.0002004866180, +0.0002153284672, +0.0002077858881, +0.0001781021898, +0.0001484184915, +0.0001187347932, +0.0001114355231, +0.0001187347932, +0.0001411192214, +0.0001708029197, +0.0001856447689, +0.0001856447689, +0.0001632603406, +0.0001262773723, +0.0000742092457, +0.0000296836983, +0.0000000000000, +0.0000000000000, +0.0000148418491, +0.0000593673966, +0.0001038929440, +0.0001335766423, +0.0001262773723, +0.0000742092457, -0.0000075425791, -0.0001262773723, -0.0002377128954, -0.0003043795620, -0.0003043795620, -0.0002301703163, -0.0000817518248, +0.0000965936740, +0.0002673965937, +0.0003861313869, +0.0004158150852, +0.0003416058394, +0.0001929440389, +0.0000075425791, -0.0001484184915, -0.0002450121655, -0.0002525547445, -0.0001856447689, -0.0000817518248, +0.0000075425791, +0.0000445255474, +0.0000223844282, -0.0000445255474, -0.0001411192214, -0.0002004866180, -0.0001856447689, -0.0000817518248, +0.0000890510949, +0.0002822384428, +0.0004381995134, +0.0005048661800, +0.0004530413625, +0.0002895377129, +0.0000593673966, -0.0001708029197, -0.0003416058394, -0.0003934306569, -0.0003192214112, -0.0001411192214, +0.0000742092457, +0.0002822384428, +0.0004233576642, +0.0004603406326, +0.0004082725061, +0.0002970802920, +0.0001708029197, +0.0000742092457, +0.0000223844282, +0.0000223844282, +0.0000445255474, +0.0000669099757, +0.0000742092457, +0.0000520681265, +0.0000296836983, +0.0000223844282, +0.0000669099757, +0.0001632603406, +0.0003043795620, +0.0004454987835, +0.0005493917275, +0.0005642335766, +0.0004751824818, +0.0003043795620, +0.0000890510949, -0.0000965936740, -0.0002077858881, -0.0002004866180, -0.0000890510949, +0.0000965936740, +0.0002970802920, +0.0004454987835, +0.0005048661800, +0.0004603406326, +0.0003416058394, +0.0001929440389, +0.0000593673966, -0.0000223844282, -0.0000593673966, -0.0000520681265, -0.0000223844282, -0.0000075425791, -0.0000148418491, -0.0000296836983, -0.0000445255474, -0.0000445255474, -0.0000148418491, +0.0000372262774, +0.0001038929440, +0.0001632603406, +0.0002077858881, +0.0002153284672, +0.0001856447689, +0.0001262773723, +0.0000296836983, -0.0000965936740, -0.0002450121655, -0.0003934306569, -0.0005124087591, -0.0005642335766, -0.0005345498783, -0.0004233576642, -0.0002450121655, -0.0000445255474, +0.0001262773723, +0.0002301703163, +0.0002450121655, +0.0001856447689, +0.0000817518248, +0.0000000000000, -0.0000372262774, +0.0000000000000, +0.0000965936740, +0.0002004866180, +0.0002377128954, +0.0001632603406, -0.0000372262774, -0.0003340632603, -0.0006311435523, -0.0008389294404, -0.0008909975669, -0.0007647201946, -0.0004900243309, -0.0001411192214, +0.0001856447689, +0.0004454987835, +0.0006163017032, +0.0006980535280, +0.0007350364964, +0.0007425790754, +0.0007350364964, +0.0006608272506, +0.0005124087591, +0.0002525547445, -0.0000817518248, -0.0004233576642, -0.0006905109489, -0.0008019464720, -0.0007128953771, -0.0004454987835, -0.0000890510949, +0.0002450121655, +0.0004751824818, +0.0005345498783, +0.0004454987835, +0.0002673965937, +0.0000965936740, +0.0000223844282, +0.0000742092457, +0.0002377128954, +0.0004454987835, +0.0006087591241, +0.0006608272506, +0.0005790754258, +0.0004009732360, +0.0001929440389, +0.0000148418491, -0.0000890510949, -0.0001335766423, -0.0001335766423, -0.0001187347932, -0.0001187347932, -0.0001335766423, -0.0001335766423, -0.0001038929440, -0.0000520681265, -0.0000223844282, -0.0000593673966, -0.0002077858881, -0.0004751824818, -0.0007871046229, -0.0010394160584, -0.0010990267640, -0.0008688564477, -0.0003564476886, +0.0003267639903, +0.0009948905109, +0.0014479318735, +0.0015148418491, +0.0011732360097, +0.0004900243309, -0.0003637469586, -0.0011953771290, -0.0018043795620, -0.0021681265207, -0.0022053527981, -0.0020270072993, -0.0017968369830, -0.0012474452555, -0.0008909975669, -0.0005124087591, -0.0000593673966, +0.0003416058394, +0.0004975669100, +0.0004603406326, +0.0001632603406, -0.0002377128954, -0.0007277372263, -0.0010469586375, -0.0012029197080, -0.0010990267640, -0.0008316301703, -0.0004900243309, -0.0002895377129, -0.0003119221411, -0.0006683698297, -0.0011211678832, -0.0016111922141, -0.0018489051095, -0.0017819951338, -0.0012846715328, -0.0007425790754, -0.0003340632603, -0.0002895377129, -0.0006683698297, -0.0013958637470, -0.0023834549878, -0.0031705596107, -0.0039352798054, -0.0044849148418, -0.0047520681265, -0.0061927007299, -0.0072545012165, -0.0064377128954, -0.0117391727494, -0.0032077858881, -0.0139072992701, -0.0164839416058, +0.0107963503650, +0.0530009732360, +0.0273693430657, -0.0973666666667, -0.1174815085158, -0.0292255474453, -0.0016632603406, +0.0869343065693, +0.2263053527981, +0.2432941605839, +0.1944883211679, +0.0872090024331, -0.0263075425791, -0.0628097323601, -0.0949905109489, -0.0983318734793, -0.0663961070560, -0.0642503649635, -0.0502686131387, -0.0482192214112, -0.0187262773723, +0.0372892944039, +0.0546866180049, +0.0601218978102, +0.0607975669100, +0.0236715328467, +0.0058583941606, +0.0056727493917, +0.0018413625304, +0.0113233576642, +0.0026581508516, -0.0215182481752, -0.0327673965937, -0.0295447688564, -0.0244289537713, -0.0080637469586, +0.0019454987835, +0.0065712895377, +0.0089326034063, +0.0041581508516, +0.0051457420925, +0.0004900243309, -0.0086355231144, -0.0047744525547, -0.0107815085158, -0.0255798053528, -0.0173304136253, -0.0189936739659, -0.0248669099757, -0.0149321167883, -0.0088063260341, -0.0054574209246, -0.0088211678832, -0.0115907542579, -0.0088284671533, -0.0113827250608, -0.0082717761557, +0.0028513381995, +0.0040094890511, +0.0065043795620, +0.0035270072993, +0.0014255474453, +0.0080934306569, +0.0032892944039, +0.0018934306569, +0.0044552311436, -0.0059180048662, -0.0196768856448, -0.0281340632603, -0.0248372262774, -0.0158527980535, -0.0158900243309, -0.0149469586375, -0.0052941605839, +0.0010618004866, +0.0094299270073, +0.0096452554745, +0.0079153284672, +0.0075885644769, -0.0019527980535, -0.0079077858881, -0.0110931873479, -0.0188452554745, -0.0179391727494, -0.0128454987835, -0.0116798053528, -0.0075068126521, -0.0090958637470, -0.0106403892944, -0.0089771289538, -0.0078708029197, -0.0043883211679, -0.0000593673966, -0.0022350364964, -0.0046109489051, -0.0066454987835, -0.0118951338200, -0.0135435523114, -0.0073805352798, +0.0009727493917, +0.0081973236010, +0.0096304136253, +0.0054204379562, -0.0003637469586, -0.0080564476886, -0.0102839416058, -0.0043734793187, +0.0013737226277, +0.0010693430657, -0.0030963503650, -0.0056357664234, -0.0084126520681, -0.0128158150852, -0.0133727493917, -0.0125931873479, -0.0122440389294, -0.0091403892944, -0.0056282238443, -0.0035939172749, -0.0036309002433, -0.0030963503650, -0.0010245742092, +0.0017598540146, +0.0062593673966, +0.0092815085158, +0.0107963503650, +0.0139520681265, +0.0126377128954, +0.0068311435523, +0.0015369829684, -0.0046184914842, -0.0088284671533, -0.0132094890511, -0.0162610705596, -0.0138257907543, -0.0102245742092, -0.0069128953771, -0.0034379562044, -0.0032968369830, -0.0023017031630, -0.0009579075426, -0.0008389294404, +0.0011287104623, +0.0034155717762, +0.0048189781022, +0.0059922141119, +0.0058956204380, +0.0065564476886, +0.0073583941606, +0.0059773722628, +0.0047892944039, +0.0043734793187, +0.0035863746959, +0.0033041362530, +0.0035566909976, +0.0032596107056, +0.0032447688564, +0.0045145985401, +0.0063486618005, +0.0069277372263, +0.0062965936740, +0.0061406326034, +0.0067866180049, +0.0067345498783, +0.0057620437956, +0.0035343065693, +0.0023834549878, +0.0038313868613, +0.0047965936740, +0.0045961070560, +0.0045664233577, +0.0050715328467, +0.0051309002433, +0.0035046228710, +0.0012029197080, -0.0010245742092, -0.0009133819951, +0.0032671532847, +0.0092815085158, +0.0135732360097, +0.0142637469586, +0.0118654501217, +0.0093929440389, +0.0067124087591, +0.0032002433090, +0.0010024330900, +0.0010321167883, +0.0014107055961, +0.0027474452555, +0.0050564476886, +0.0063708029197, +0.0082270072993, +0.0099126520681, +0.0108260340633, +0.0100313868613, +0.0076406326034, +0.0076257907543, +0.0091924574209, +0.0073435523114, +0.0053017031630, +0.0053165450122, +0.0068386861314, +0.0087914841849, +0.0068386861314, +0.0026063260341, +0.0004454987835, -0.0001335766423, +0.0016335766423, +0.0048411192214, +0.0069871046229, +0.0090437956204, +0.0099126520681, +0.0078484184915, +0.0050119221411, +0.0031184914842, +0.0014107055961, +0.0003192214112, +0.0003340632603, +0.0009800486618, +0.0031408759124, +0.0056357664234, +0.0073583941606, +0.0081824817518, +0.0068014598540, +0.0044552311436, +0.0032523114355, +0.0040987834550, +0.0051233576642, +0.0046705596107, +0.0051902676399, +0.0057768856448, +0.0036457420925, +0.0012622871046, -0.0002746958637, -0.0013661800487, -0.0023017031630, -0.0031184914842, -0.0028661800487, -0.0010024330900, +0.0021608272506, +0.0050639902676, +0.0059328467153, +0.0061182481752, +0.0066454987835, +0.0070836982968, +0.0060737226277, +0.0030221411192, -0.0003934306569, -0.0030442822384, -0.0045145985401, -0.0039725060827, -0.0013810218978, +0.0007871046229, +0.0010693430657, +0.0013513381995, +0.0016484184915, +0.0010097323601, +0.0009875912409, +0.0009727493917, -0.0000372262774, -0.0002895377129, -0.0000223844282, +0.0002525547445, +0.0007277372263, +0.0001335766423, -0.0006683698297, -0.0010841849148, -0.0013216545012, -0.0018858880779, -0.0032596107056, -0.0036605839416, -0.0024948905109, -0.0015593673966, -0.0010766423358, +0.0001929440389, +0.0008836982968, +0.0002895377129, -0.0001708029197, -0.0015666666667, -0.0028289537713, -0.0032002433090, -0.0039725060827, -0.0041878345499, -0.0045812652068, -0.0058956204380, -0.0057323600973, -0.0049673965937, -0.0030739659367, -0.0001781021898, +0.0017671532847, +0.0039576642336, +0.0047150851582, +0.0021978102190, -0.0011880778589, -0.0044625304136, -0.0067345498783, -0.0068535279805, -0.0062965936740, -0.0044922141119, -0.0016335766423, +0.0010394160584, +0.0018934306569, +0.0004009732360, -0.0016929440389, -0.0030518248175, -0.0042992700730, -0.0041802919708, -0.0027919708029, -0.0028141119221, -0.0027026763990, -0.0018340632603, -0.0012399026764, -0.0002746958637, +0.0001411192214, +0.0002377128954, -0.0006535279805, -0.0031854014599, -0.0039352798054, -0.0033116788321, -0.0036236009732, -0.0032819951338, -0.0028437956204, -0.0014700729927, +0.0008836982968, +0.0011953771290, +0.0009652068127, -0.0007498783455, -0.0030369829684, -0.0028437956204, -0.0030369829684, -0.0039131386861, -0.0035639902676, -0.0038982968370, -0.0031781021898, -0.0017895377129, -0.0023537712895, -0.0021384428224, -0.0013440389294, -0.0012399026764, -0.0003637469586, -0.0001038929440, -0.0008688564477, -0.0005197080292, -0.0003192214112, -0.0002822384428, +0.0003861313869, +0.0008240875912, +0.0012102189781, +0.0007795620438, +0.0006608272506, +0.0016111922141, +0.0012698296837, +0.0004009732360, -0.0003564476886, -0.0013885644769, -0.0019306569343, -0.0024131386861, -0.0020790754258, -0.0017077858881, -0.0022053527981, -0.0012177615572, +0.0005866180049, +0.0015890510949, +0.0021459854015, +0.0013588807786, +0.0001262773723, -0.0005790754258, -0.0010990267640, -0.0008316301703, -0.0006756690998, -0.0011435523114, -0.0012399026764, -0.0013588807786, -0.0013068126521, -0.0004751824818, +0.0005048661800, +0.0011880778589, +0.0015518248175, +0.0015890510949, +0.0016557177616, +0.0014034063260, +0.0008389294404, +0.0008540145985, +0.0007201946472, +0.0006459854015, +0.0013588807786, +0.0016260340633, +0.0011138686131, +0.0002895377129, -0.0007647201946, -0.0010914841849, -0.0008761557178, -0.0012474452555, -0.0017598540146, -0.0017523114355, -0.0013958637470, -0.0007128953771, -0.0000520681265, +0.0005717761557, +0.0012474452555, +0.0012399026764, +0.0011656934307, +0.0013291970803, +0.0007425790754, +0.0001411192214, -0.0004082725061, -0.0004975669100, +0.0008985401460, +0.0020121654501, +0.0024873479319, +0.0026729927007, +0.0020790754258, +0.0019603406326, +0.0016260340633, +0.0006535279805, +0.0000593673966, -0.0009058394161, -0.0012102189781, -0.0004381995134, +0.0005866180049, +0.0014182481752, +0.0012326034063, +0.0010542579075, +0.0006832116788, -0.0009727493917, -0.0014107055961, -0.0011063260341, -0.0017746958637, -0.0020642335766, -0.0016260340633, -0.0009727493917, -0.0005124087591, -0.0003712895377, +0.0000445255474, +0.0008688564477, +0.0013588807786, +0.0021905109489, +0.0031036496350, +0.0027474452555, +0.0021608272506, +0.0012846715328, -0.0002377128954, -0.0009800486618, -0.0011656934307, -0.0011211678832, -0.0006236009732, -0.0006311435523, -0.0007574209246, -0.0007350364964, -0.0010841849148, -0.0005345498783, +0.0003043795620, +0.0006163017032, +0.0010542579075, +0.0013440389294, +0.0010990267640, +0.0000669099757, -0.0012698296837, -0.0020863746959, -0.0022053527981, -0.0019306569343, -0.0013885644769, -0.0005493917275, +0.0000965936740, +0.0003043795620, +0.0002525547445, +0.0000000000000, -0.0004751824818, -0.0008240875912, -0.0007944038929, -0.0005717761557, -0.0001781021898, -0.0001708029197, -0.0005345498783, -0.0004233576642, -0.0005717761557, -0.0008464720195, -0.0007425790754, -0.0012474452555, -0.0019231143552, -0.0022647201946, -0.0022868613139, -0.0013364963504, -0.0007944038929, -0.0011508515815, -0.0012326034063, -0.0015221411192, -0.0015815085158, -0.0013068126521, -0.0014627737226, -0.0013958637470, -0.0013810218978, -0.0019751824818, -0.0023834549878, -0.0026508515815, -0.0025245742092, -0.0017004866180, -0.0007795620438, +0.0002004866180, +0.0008613138686, +0.0006014598540, +0.0004900243309, +0.0007128953771, +0.0002822384428, -0.0008167883212, -0.0018413625304, -0.0023092457421, -0.0028364963504, -0.0033041362530, -0.0032374695864, -0.0033116788321, -0.0029180048662, -0.0017598540146, -0.0010618004866, -0.0008389294404, -0.0013885644769, -0.0020270072993, -0.0019306569343, -0.0019306569343, -0.0019900243309, -0.0017895377129, -0.0020939172749, -0.0020863746959, -0.0017004866180, -0.0015593673966, -0.0011656934307, -0.0008167883212, -0.0007425790754, -0.0005569343066, -0.0005048661800, -0.0001708029197, +0.0003489051095, +0.0001559610706, -0.0003043795620, -0.0009503649635, -0.0013440389294, -0.0007647201946, -0.0003489051095, -0.0005197080292, -0.0007277372263, -0.0013661800487, -0.0016408759124, -0.0014034063260, -0.0016632603406, -0.0013364963504, -0.0006535279805, -0.0005790754258, -0.0004454987835, -0.0003934306569, -0.0004306569343, -0.0005642335766, -0.0008985401460, -0.0009875912409, -0.0012622871046, -0.0015890510949, -0.0006980535280, +0.0002822384428, +0.0003192214112, +0.0002153284672, -0.0002153284672, -0.0008909975669, -0.0009206812652, -0.0007201946472, -0.0007574209246, -0.0007944038929, -0.0007201946472, -0.0006311435523, -0.0005717761557, -0.0006608272506, -0.0004233576642, +0.0000965936740, +0.0000372262774, -0.0002746958637, -0.0007277372263, -0.0013440389294, -0.0014107055961, -0.0008985401460, -0.0004306569343, -0.0002525547445, -0.0007277372263, -0.0012698296837, -0.0018116788321, -0.0022944038929, -0.0020939172749, -0.0018340632603, -0.0015742092457, -0.0007574209246, -0.0001038929440, -0.0002004866180, -0.0004900243309, -0.0006014598540, -0.0005642335766, -0.0002822384428, +0.0001856447689, +0.0006311435523, +0.0010024330900, +0.0011508515815, +0.0008909975669, -0.0000669099757, -0.0011360097324, -0.0013513381995, -0.0010172749392, -0.0006980535280, -0.0004306569343, -0.0007201946472, -0.0010990267640, -0.0009503649635, -0.0006014598540, -0.0000965936740, -0.0000148418491, -0.0003416058394, -0.0004827250608, -0.0005717761557, -0.0008167883212, -0.0008909975669, -0.0004233576642, +0.0003192214112, +0.0003267639903, +0.0002153284672, +0.0005939172749, +0.0004603406326, -0.0000148418491, -0.0008240875912, -0.0016408759124, -0.0017226277372, -0.0010542579075, +0.0002077858881, +0.0010766423358, +0.0013588807786, +0.0017598540146, +0.0013216545012, +0.0002377128954, -0.0006459854015, -0.0010618004866, -0.0004678832117, +0.0000669099757, +0.0003934306569, +0.0009282238443, +0.0004530413625, -0.0002746958637, -0.0002153284672, -0.0001038929440, -0.0000296836983, +0.0003043795620, +0.0007277372263, +0.0008540145985, +0.0002153284672, -0.0002153284672, -0.0000148418491, -0.0000148418491, +0.0001856447689, +0.0008836982968, +0.0010618004866, +0.0008985401460, +0.0010024330900, +0.0011287104623, +0.0012995133820, +0.0017598540146, +0.0021532846715, +0.0019379562044, +0.0010394160584, +0.0000890510949, -0.0003340632603, -0.0003637469586, -0.0000593673966, +0.0000075425791, -0.0003267639903, -0.0002228710462, +0.0004530413625, +0.0010172749392, +0.0012474452555, +0.0011211678832, +0.0010097323601, +0.0009727493917, +0.0008688564477, +0.0006980535280, +0.0004678832117, +0.0007574209246, +0.0012474452555, +0.0013364963504, +0.0014107055961, +0.0013513381995, +0.0011435523114, +0.0013513381995, +0.0015518248175, +0.0015963503650, +0.0014700729927, +0.0011508515815, +0.0010618004866, +0.0011583941606, +0.0012547445255, +0.0015666666667, +0.0021012165450, +0.0026805352798, +0.0026953771290, +0.0017153284672, +0.0004678832117, -0.0001632603406, -0.0003340632603, -0.0004306569343, -0.0000075425791, +0.0004454987835, +0.0006535279805, +0.0009579075426, +0.0011435523114, +0.0012698296837, +0.0013513381995, +0.0011656934307, +0.0012029197080, +0.0012250608273, +0.0011583941606, +0.0011732360097, +0.0012995133820, +0.0017819951338, +0.0019824817518, +0.0018340632603, +0.0016111922141, +0.0011138686131, +0.0008092457421, +0.0009206812652, +0.0012919708029, +0.0019306569343, +0.0020345498783, +0.0017968369830, +0.0016557177616, +0.0011211678832, +0.0006683698297, +0.0007574209246, +0.0008761557178, +0.0010693430657, +0.0012250608273, +0.0008613138686, +0.0002673965937, -0.0003119221411, -0.0004975669100, -0.0000445255474, +0.0006236009732, +0.0013143552311, +0.0016408759124, +0.0014330900243, +0.0012846715328, +0.0011732360097, +0.0007647201946, +0.0004530413625, +0.0004603406326, +0.0008240875912, +0.0011732360097, +0.0013440389294, +0.0014107055961, +0.0015666666667, +0.0016111922141, +0.0011287104623, +0.0004381995134, +0.0001335766423, +0.0000817518248, +0.0003043795620, +0.0005939172749, +0.0004381995134, +0.0002822384428, +0.0003416058394, +0.0005420924574, +0.0009282238443, +0.0008985401460, +0.0004827250608, +0.0003712895377, +0.0004381995134, +0.0002673965937, -0.0000372262774, -0.0000520681265, +0.0001114355231, +0.0000296836983, -0.0002450121655, -0.0004751824818, -0.0001632603406, +0.0005272506083, +0.0008389294404, +0.0006163017032, +0.0002822384428, +0.0002153284672, +0.0002004866180, -0.0001335766423, -0.0004975669100, -0.0007425790754, -0.0004975669100, +0.0005717761557, +0.0014403892944, +0.0015890510949, +0.0009875912409, -0.0001632603406, -0.0011211678832, -0.0014776155718, -0.0014255474453, -0.0009948905109, -0.0003340632603, +0.0003267639903, +0.0006980535280, +0.0005642335766, +0.0004975669100, +0.0006608272506, +0.0005717761557, +0.0001114355231, -0.0005197080292, -0.0009282238443, -0.0006535279805, -0.0000593673966, +0.0002895377129, +0.0003934306569, +0.0004454987835, +0.0004082725061, +0.0002077858881, +0.0002004866180, +0.0001632603406, -0.0001114355231, +0.0000148418491, +0.0002228710462, -0.0003340632603, -0.0004678832117, -0.0004009732360, -0.0009206812652, -0.0008389294404, -0.0007201946472, -0.0003785888078, +0.0000148418491, -0.0002301703163, +0.0001708029197, +0.0000372262774, -0.0008316301703, -0.0005197080292, -0.0004009732360, -0.0009282238443, -0.0005717761557, -0.0004306569343, -0.0003119221411, +0.0001262773723, +0.0002746958637, +0.0003489051095, +0.0002228710462, +0.0006756690998, +0.0010024330900, +0.0004530413625, +0.0001856447689, +0.0000965936740, -0.0002895377129, +0.0001038929440, +0.0004900243309, +0.0002077858881, -0.0003192214112, -0.0008389294404, -0.0007574209246, -0.0001632603406, +0.0005790754258, +0.0012919708029, +0.0017004866180, +0.0014034063260, +0.0007201946472, +0.0000965936740, -0.0000817518248, -0.0001262773723, +0.0001335766423, +0.0007647201946, +0.0008464720195, +0.0006683698297, +0.0004530413625, -0.0000890510949, -0.0003043795620, -0.0000742092457, +0.0000223844282, +0.0004233576642, +0.0012399026764, +0.0016705596107, +0.0015593673966, +0.0011508515815, +0.0006386861314, +0.0003267639903, +0.0001484184915, +0.0000890510949, +0.0003489051095, +0.0005717761557, +0.0007201946472, +0.0009355231144, +0.0009133819951, +0.0010542579075, +0.0012547445255, +0.0009430656934, +0.0007277372263, +0.0006087591241, +0.0001781021898, -0.0000742092457, +0.0001262773723, +0.0004678832117, +0.0007425790754, +0.0008240875912, +0.0009282238443, +0.0010914841849, +0.0011953771290, +0.0011138686131, +0.0008688564477, +0.0005569343066, +0.0002077858881, +0.0000075425791, -0.0000520681265, -0.0000075425791, +0.0001187347932, +0.0003564476886, +0.0009355231144, +0.0014182481752, +0.0014851581509, +0.0014924574209, +0.0013737226277, +0.0010841849148, +0.0006311435523, +0.0003712895377, +0.0007201946472, +0.0012029197080, +0.0012995133820, +0.0012622871046, +0.0009503649635, +0.0005939172749, +0.0004454987835, +0.0004678832117, +0.0004530413625, +0.0003637469586, +0.0003043795620, +0.0003861313869, +0.0007350364964, +0.0009206812652, +0.0007795620438, +0.0006535279805, +0.0005939172749, +0.0004603406326, +0.0004454987835, +0.0004827250608, +0.0009133819951, +0.0014107055961, +0.0014403892944, +0.0012771289538, +0.0008389294404, +0.0002895377129, +0.0000669099757, -0.0001038929440, -0.0002077858881, +0.0000000000000, +0.0001335766423, +0.0000742092457, -0.0000372262774, -0.0002301703163, -0.0002525547445, -0.0000817518248, +0.0000669099757, +0.0001781021898, +0.0000445255474, -0.0002746958637, -0.0003416058394, -0.0003564476886, -0.0004158150852, -0.0001632603406, +0.0001038929440, +0.0002673965937, +0.0002077858881, -0.0000223844282, -0.0001708029197, -0.0001559610706, +0.0000593673966, +0.0002153284672, +0.0000593673966, -0.0001335766423, -0.0002970802920, -0.0005272506083, -0.0005345498783, -0.0004082725061, -0.0004158150852, -0.0004678832117, -0.0003712895377, -0.0002377128954, -0.0001781021898, -0.0001038929440, -0.0002598540146, -0.0005717761557, -0.0008167883212, -0.0007277372263, -0.0003489051095, +0.0000445255474, +0.0002598540146, +0.0002673965937, +0.0000817518248, -0.0003267639903, -0.0006163017032, -0.0005866180049, -0.0004009732360, -0.0002970802920, -0.0002970802920, -0.0005642335766, -0.0009579075426, -0.0010914841849, -0.0009206812652, -0.0006386861314, -0.0004678832117, -0.0003416058394, -0.0002153284672, -0.0001262773723, +0.0000075425791, +0.0000372262774, -0.0003712895377, -0.0006905109489, -0.0005939172749, -0.0002228710462, +0.0000669099757, +0.0001559610706, +0.0001335766423, -0.0000075425791, -0.0001929440389, -0.0003119221411, -0.0004454987835, -0.0004900243309, -0.0002077858881, +0.0001856447689, +0.0002673965937, -0.0000372262774, -0.0002970802920, -0.0005866180049, -0.0008688564477, -0.0008240875912, -0.0006608272506, -0.0004900243309, -0.0004454987835, -0.0007647201946, -0.0009133819951, -0.0007201946472, -0.0004306569343, -0.0001262773723, -0.0000075425791, -0.0000223844282, -0.0000223844282, -0.0001781021898, -0.0003637469586, -0.0005345498783, -0.0006386861314, -0.0003861313869, -0.0002673965937, -0.0003712895377, -0.0002153284672, -0.0002077858881, -0.0002895377129, -0.0003192214112, -0.0006386861314, -0.0008389294404, -0.0008985401460, -0.0009058394161, -0.0007201946472, -0.0007944038929, -0.0009727493917, -0.0006608272506, -0.0005124087591, -0.0005866180049, -0.0006311435523, -0.0007647201946, -0.0007350364964, -0.0006832116788, -0.0006535279805, -0.0005124087591, -0.0005790754258, -0.0006980535280, -0.0006683698297, -0.0007277372263, -0.0007574209246, -0.0006905109489, -0.0005493917275, -0.0003267639903, -0.0002450121655, -0.0003416058394, -0.0005642335766, -0.0008240875912, -0.0007574209246, -0.0005420924574, -0.0005272506083, -0.0005717761557, -0.0006311435523, -0.0008092457421, -0.0008909975669, -0.0006980535280, -0.0005345498783, -0.0006311435523, -0.0006535279805, -0.0006608272506, -0.0007277372263, -0.0006608272506, -0.0006535279805, -0.0008167883212, -0.0009058394161, -0.0009282238443, -0.0007350364964, -0.0004082725061, -0.0002004866180, -0.0001114355231, -0.0002673965937, -0.0003489051095, -0.0002598540146, -0.0003934306569, -0.0006014598540, -0.0008092457421, -0.0010024330900, -0.0010618004866, -0.0011953771290, -0.0011583941606, -0.0007944038929, -0.0006087591241, -0.0005939172749, -0.0005939172749, -0.0008464720195, -0.0009800486618, -0.0009282238443, -0.0007053527981, -0.0002153284672, -0.0000148418491, -0.0002153284672, -0.0003712895377, -0.0005790754258, -0.0008761557178, -0.0009282238443, -0.0008019464720, -0.0005939172749, -0.0004827250608, -0.0004975669100, -0.0005493917275, -0.0007277372263, -0.0008688564477, -0.0009355231144, -0.0010245742092, -0.0008464720195, -0.0005197080292, -0.0004751824818, -0.0005197080292, -0.0005197080292, -0.0006311435523, -0.0006980535280, -0.0006756690998, -0.0005642335766, -0.0004603406326, -0.0004678832117, -0.0005197080292, -0.0006014598540, -0.0007647201946, -0.0007647201946, -0.0007350364964, -0.0008167883212, -0.0007795620438, -0.0006535279805, -0.0004306569343, -0.0002228710462, -0.0001484184915, -0.0000372262774, +0.0000148418491, -0.0001708029197, -0.0004306569343, -0.0007053527981, -0.0007944038929, -0.0006459854015, -0.0005939172749, -0.0007871046229, -0.0010542579075, -0.0011508515815, -0.0009206812652, -0.0006683698297, -0.0005420924574, -0.0004530413625, -0.0005569343066, -0.0006905109489, -0.0006756690998, -0.0005124087591, -0.0001856447689, -0.0000372262774, -0.0002228710462, -0.0004900243309, -0.0007871046229, -0.0007795620438, -0.0004082725061, -0.0001708029197, -0.0000593673966, -0.0002450121655, -0.0005345498783, -0.0005493917275, -0.0004530413625, -0.0003416058394, -0.0001187347932, -0.0000075425791, -0.0000742092457, -0.0003119221411, -0.0005790754258, -0.0007128953771, -0.0008909975669, -0.0008688564477, -0.0006311435523, -0.0004381995134, -0.0003267639903, -0.0002525547445, -0.0002450121655, -0.0002598540146, -0.0002525547445, -0.0001411192214, -0.0000223844282, +0.0000520681265, +0.0002153284672, +0.0002822384428, +0.0002377128954, +0.0001632603406, +0.0000372262774, -0.0001559610706, -0.0004975669100, -0.0008688564477, -0.0010766423358, -0.0009875912409, -0.0006535279805, -0.0002228710462, +0.0002377128954, +0.0005569343066, +0.0004530413625, +0.0001484184915, -0.0001929440389, -0.0005717761557, -0.0007722627737, -0.0007795620438, -0.0006459854015, -0.0005124087591, -0.0004454987835, -0.0002822384428, -0.0000965936740, -0.0000148418491, +0.0001335766423, +0.0002077858881, +0.0001262773723, +0.0001411192214, +0.0001038929440, -0.0001856447689, -0.0003785888078, -0.0003861313869, -0.0004678832117, -0.0004306569343, -0.0001632603406, +0.0001262773723, +0.0004082725061, +0.0004381995134, +0.0002598540146, +0.0000000000000, -0.0003712895377, -0.0005124087591, -0.0003712895377, -0.0002301703163, -0.0000445255474, +0.0000593673966, +0.0000445255474, +0.0001114355231, +0.0002153284672, +0.0003267639903, +0.0003340632603, +0.0002153284672, +0.0001781021898, +0.0001187347932, +0.0000742092457, +0.0002822384428, +0.0005420924574, +0.0006608272506, +0.0005717761557, +0.0004158150852, +0.0003340632603, +0.0002525547445, +0.0002895377129, +0.0004158150852, +0.0003934306569, +0.0002525547445, +0.0000742092457, -0.0000445255474, -0.0000669099757, -0.0000148418491, +0.0001114355231, +0.0002970802920, +0.0004306569343, +0.0004233576642, +0.0003785888078, +0.0004306569343, +0.0004082725061, +0.0003712895377, +0.0003861313869, +0.0003119221411, +0.0002746958637, +0.0004454987835, +0.0006535279805, +0.0007574209246, +0.0006756690998, +0.0004306569343, +0.0001781021898, +0.0000890510949, +0.0001708029197, +0.0002895377129, +0.0003564476886, +0.0003934306569, +0.0004900243309, +0.0006087591241, +0.0007350364964, +0.0006683698297, +0.0003785888078, +0.0001708029197, +0.0001708029197, +0.0002301703163, +0.0002673965937, +0.0002970802920, +0.0003340632603, +0.0004530413625, +0.0005717761557, +0.0006459854015, +0.0005939172749, +0.0004233576642, +0.0003416058394, +0.0003192214112, +0.0002746958637, +0.0002450121655, +0.0002377128954, +0.0001484184915, +0.0000593673966, +0.0001114355231, +0.0002004866180, +0.0001559610706, +0.0000965936740, +0.0001929440389, +0.0004082725061, +0.0006087591241, +0.0005939172749, +0.0003192214112, -0.0000593673966, -0.0002525547445, -0.0000817518248, +0.0002228710462, +0.0004009732360, +0.0004530413625, +0.0004454987835, +0.0004082725061, +0.0003934306569, +0.0003785888078, +0.0004009732360, +0.0004975669100, +0.0005124087591, +0.0002970802920, +0.0000965936740, +0.0000445255474, +0.0000075425791, +0.0002077858881, +0.0005124087591, +0.0006163017032, +0.0005939172749, +0.0003861313869, +0.0001632603406, +0.0001781021898, +0.0003119221411, +0.0004381995134, +0.0005197080292, +0.0004381995134, +0.0003861313869, +0.0005124087591, +0.0005569343066, +0.0003934306569, +0.0002153284672, +0.0001781021898, +0.0003192214112, +0.0006459854015, +0.0009206812652, +0.0008540145985, +0.0005939172749, +0.0003785888078, +0.0001929440389, +0.0000669099757, +0.0000742092457, +0.0001856447689, +0.0004009732360, +0.0005272506083, +0.0004751824818, +0.0005197080292, +0.0006756690998, +0.0006832116788, +0.0005569343066, +0.0003564476886, +0.0001559610706, +0.0001262773723, +0.0002377128954, +0.0003416058394, +0.0003785888078, +0.0004082725061, +0.0004009732360, +0.0003489051095, +0.0003192214112, +0.0002525547445, +0.0002746958637, +0.0003119221411, +0.0001856447689, +0.0000372262774, -0.0000593673966, -0.0000445255474, +0.0002228710462, +0.0004678832117, +0.0006459854015, +0.0007128953771, +0.0004233576642, +0.0001781021898, +0.0001781021898, +0.0001114355231, +0.0000075425791, +0.0000742092457, +0.0002450121655, +0.0003489051095, +0.0002450121655, +0.0000000000000, -0.0001856447689, -0.0001484184915, +0.0002004866180, +0.0007128953771, +0.0010990267640, +0.0011656934307, +0.0010766423358, +0.0008836982968, +0.0006014598540, +0.0003416058394, +0.0001187347932, +0.0001708029197, +0.0003416058394, +0.0003785888078, +0.0004158150852, +0.0004306569343, +0.0003340632603, +0.0002450121655, +0.0001559610706, +0.0001335766423, +0.0001632603406, +0.0000890510949, +0.0001559610706, +0.0004827250608, +0.0007425790754, +0.0007871046229, +0.0005345498783, +0.0002377128954, +0.0002301703163, +0.0004306569343, +0.0006756690998, +0.0008836982968, +0.0007425790754, +0.0003934306569, +0.0002450121655, +0.0002895377129, +0.0004233576642, +0.0005717761557, +0.0006832116788, +0.0008092457421, +0.0008761557178, +0.0007722627737, +0.0006014598540, +0.0004751824818, +0.0004233576642, +0.0002598540146, +0.0001187347932, +0.0002377128954, +0.0004158150852, +0.0005124087591, +0.0006980535280, +0.0009058394161, +0.0008240875912, +0.0005569343066, +0.0003489051095, +0.0002377128954, +0.0001929440389, +0.0001411192214, +0.0001484184915, +0.0003119221411, +0.0004233576642, +0.0003043795620, +0.0000742092457, -0.0001781021898, -0.0002525547445, -0.0001187347932, +0.0000445255474, +0.0002822384428, +0.0004009732360, +0.0004454987835, +0.0006756690998, +0.0007871046229, +0.0005717761557, +0.0003119221411, +0.0001262773723, +0.0000075425791, -0.0000372262774, -0.0000593673966, +0.0000148418491, +0.0000296836983, -0.0000445255474, -0.0001038929440, -0.0000890510949, +0.0000817518248, +0.0003489051095, +0.0004306569343, +0.0003712895377, +0.0002598540146, +0.0001708029197, +0.0001187347932, +0.0000742092457, +0.0000520681265, +0.0000890510949, +0.0001781021898, +0.0003861313869, +0.0006087591241, +0.0006459854015, +0.0004454987835, +0.0001708029197, +0.0000372262774, -0.0000445255474, -0.0000965936740, +0.0000000000000, +0.0001484184915, +0.0003267639903, +0.0003712895377, +0.0002228710462, +0.0000965936740, -0.0000075425791, -0.0001187347932, -0.0000445255474, +0.0000223844282, +0.0000148418491, +0.0001335766423, +0.0002228710462, +0.0002450121655, +0.0003192214112, +0.0004082725061, +0.0004603406326, +0.0004530413625, +0.0003637469586, +0.0003119221411, +0.0001187347932, -0.0000669099757, -0.0000148418491, +0.0000445255474, +0.0000890510949, +0.0002004866180, +0.0003043795620, +0.0004158150852, +0.0004975669100, +0.0004530413625, +0.0002895377129, +0.0001187347932, +0.0001781021898, +0.0003267639903, +0.0002377128954, +0.0000593673966, -0.0001262773723, -0.0002228710462, -0.0002004866180, -0.0002450121655, -0.0002598540146, -0.0000593673966, +0.0002004866180, +0.0003267639903, +0.0003267639903, +0.0002301703163, +0.0001559610706, +0.0000593673966, +0.0000445255474, +0.0001632603406, +0.0001708029197, +0.0000742092457, +0.0000223844282, -0.0000965936740, -0.0002377128954, -0.0002673965937, -0.0002895377129, -0.0002895377129, -0.0001262773723, +0.0000890510949, +0.0002598540146, +0.0003489051095, +0.0002228710462, -0.0000148418491, -0.0001856447689, -0.0004009732360, -0.0005790754258, -0.0005272506083, -0.0002598540146, +0.0000000000000, +0.0001114355231, +0.0001559610706, +0.0001781021898, +0.0000817518248, -0.0000445255474, -0.0000593673966, -0.0000445255474, -0.0000520681265, -0.0001038929440, -0.0001559610706, -0.0002895377129, -0.0004158150852, -0.0003416058394, -0.0001929440389, -0.0001856447689, -0.0002822384428, -0.0003267639903, -0.0003416058394, -0.0003712895377, -0.0003043795620, -0.0001187347932, -0.0000148418491, +0.0000742092457, +0.0002153284672, +0.0002301703163, +0.0000742092457, -0.0001559610706, -0.0003564476886, -0.0004530413625, -0.0004381995134, -0.0003340632603, -0.0003192214112, -0.0003861313869, -0.0003340632603, -0.0002673965937, -0.0002077858881, -0.0001484184915, -0.0001856447689, -0.0002746958637, -0.0002822384428, -0.0003416058394, -0.0004009732360, -0.0003340632603, -0.0002598540146, -0.0002077858881, -0.0001484184915, -0.0001262773723, -0.0001411192214, -0.0001708029197, -0.0001262773723, -0.0000669099757, -0.0000965936740, -0.0000593673966, -0.0001114355231, -0.0004233576642, -0.0007498783455, -0.0009503649635, -0.0009133819951, -0.0006608272506, -0.0004827250608, -0.0003267639903, -0.0002004866180, -0.0001929440389, -0.0000965936740, -0.0000075425791, -0.0000817518248, -0.0001856447689, -0.0002301703163, -0.0002004866180, -0.0002077858881, -0.0003192214112, -0.0003416058394, -0.0002970802920, -0.0003267639903, -0.0002673965937, -0.0001484184915, -0.0001708029197, -0.0001484184915, -0.0001411192214, -0.0003712895377, -0.0005866180049, -0.0006832116788, -0.0007053527981, -0.0006608272506, -0.0005790754258, -0.0004975669100, -0.0004751824818, -0.0005124087591, -0.0004678832117, -0.0003192214112, -0.0001187347932, +0.0000372262774, +0.0000372262774, -0.0001708029197, -0.0004975669100, -0.0006905109489, -0.0006608272506, -0.0005345498783, -0.0003340632603, -0.0001559610706, -0.0001929440389, -0.0003119221411, -0.0003637469586, -0.0003637469586, -0.0003785888078, -0.0004082725061, -0.0004678832117, -0.0005493917275, -0.0005790754258, -0.0004827250608, -0.0004009732360, -0.0003267639903, -0.0001187347932, +0.0000075425791, -0.0000593673966, -0.0002004866180, -0.0003192214112, -0.0004009732360, -0.0005048661800, -0.0006163017032, -0.0006087591241, -0.0004751824818, -0.0003637469586, -0.0003489051095, -0.0003416058394, -0.0003043795620, -0.0002377128954, -0.0002525547445, -0.0002895377129, -0.0002153284672, -0.0001114355231, -0.0001038929440, -0.0001262773723, -0.0001708029197, -0.0002598540146, -0.0003637469586, -0.0005569343066, -0.0006683698297, -0.0006386861314, -0.0006311435523, -0.0006386861314, -0.0006014598540, -0.0004975669100, -0.0003192214112, -0.0001929440389, -0.0002153284672, -0.0002895377129, -0.0003785888078, -0.0004082725061, -0.0003564476886, -0.0002228710462, -0.0001114355231, -0.0000965936740, -0.0001187347932, -0.0001632603406, -0.0002377128954, -0.0003043795620, -0.0003340632603, -0.0003564476886, -0.0003712895377, -0.0003192214112, -0.0002228710462, -0.0001929440389, -0.0002077858881, -0.0002746958637, -0.0003564476886, -0.0003785888078, -0.0004233576642, -0.0004530413625, -0.0004454987835, -0.0003637469586, -0.0002377128954, -0.0002377128954, -0.0002970802920, -0.0002746958637, -0.0001114355231, +0.0000445255474, +0.0000223844282, -0.0000223844282, -0.0000075425791, -0.0000445255474, -0.0000296836983, +0.0000296836983, +0.0000520681265, +0.0000593673966, -0.0000148418491, -0.0000148418491, +0.0000445255474, -0.0000669099757, -0.0002598540146, -0.0004751824818, -0.0006311435523, -0.0005345498783, -0.0003043795620, -0.0001038929440, +0.0000817518248, +0.0002004866180, +0.0002673965937, +0.0002377128954, +0.0001632603406, +0.0000445255474, -0.0001114355231, -0.0002004866180, -0.0002228710462, -0.0002301703163, -0.0002228710462, -0.0001114355231, +0.0001038929440, +0.0002377128954, +0.0002153284672, +0.0001411192214, +0.0000890510949, +0.0000000000000, -0.0001484184915, -0.0002970802920, -0.0003416058394, -0.0002673965937, -0.0001632603406, -0.0001411192214, -0.0000817518248, +0.0000000000000, +0.0000223844282, +0.0001262773723, +0.0001262773723, -0.0000075425791, -0.0000817518248, -0.0001781021898, -0.0002228710462, -0.0001187347932, +0.0000075425791, +0.0002077858881, +0.0002895377129, +0.0001559610706, +0.0000296836983, -0.0000742092457, -0.0001038929440, -0.0001187347932, -0.0001335766423, +0.0000669099757, +0.0002895377129, +0.0003416058394, +0.0002895377129, +0.0001335766423, +0.0000000000000, -0.0000817518248, -0.0001335766423, -0.0000669099757, -0.0000075425791, +0.0000223844282, +0.0000445255474, -0.0000223844282, -0.0000890510949, -0.0000372262774, +0.0000742092457, +0.0001335766423, +0.0000372262774, -0.0000593673966, -0.0000520681265, -0.0000593673966, +0.0000148418491, +0.0001929440389, +0.0002746958637, +0.0002525547445, +0.0002746958637, +0.0003192214112, +0.0002077858881, +0.0000669099757, +0.0000296836983, +0.0000296836983, +0.0000296836983, +0.0000296836983, +0.0000372262774, +0.0000593673966, +0.0000223844282, +0.0000890510949, +0.0002377128954, +0.0002377128954, +0.0001484184915, +0.0000669099757, -0.0000445255474, -0.0001187347932, -0.0002301703163, -0.0003119221411, -0.0003043795620, -0.0002004866180, -0.0000296836983, +0.0001856447689, +0.0003416058394, +0.0003861313869, +0.0003564476886, +0.0003340632603, +0.0003267639903, +0.0002970802920, +0.0001484184915, +0.0000372262774, -0.0000372262774, -0.0002450121655, -0.0004381995134, -0.0004900243309, -0.0004381995134, -0.0002673965937, -0.0000372262774, +0.0001781021898, +0.0003564476886, +0.0004678832117, +0.0004751824818, +0.0003192214112, +0.0001335766423, +0.0000520681265, -0.0000075425791, -0.0000593673966, -0.0000669099757, -0.0001038929440, -0.0001335766423, -0.0001114355231, +0.0000000000000, +0.0002153284672, +0.0003785888078, +0.0004381995134, +0.0004381995134, +0.0003712895377, +0.0002301703163, +0.0001114355231, +0.0000965936740, +0.0001335766423, +0.0000965936740, +0.0000075425791, -0.0000296836983, +0.0000075425791, +0.0000965936740, +0.0001262773723, +0.0001262773723, +0.0000445255474, -0.0001038929440, -0.0001559610706, -0.0001114355231, +0.0000075425791, +0.0002004866180, +0.0003043795620, +0.0003416058394, +0.0003934306569, +0.0003267639903, +0.0002525547445, +0.0001929440389, +0.0000223844282, -0.0000669099757, -0.0000445255474, +0.0000075425791, +0.0000520681265, -0.0000148418491, -0.0001335766423, -0.0001335766423, -0.0000965936740, -0.0000742092457, +0.0000000000000, +0.0001335766423, +0.0002673965937, +0.0003340632603, +0.0002970802920, +0.0001781021898, +0.0001335766423, +0.0001411192214, +0.0001484184915, +0.0001484184915, +0.0000445255474, +0.0000075425791, +0.0000520681265, +0.0000223844282, +0.0000296836983, -0.0000075425791, -0.0001559610706, -0.0002598540146, -0.0002673965937, -0.0000890510949, +0.0001411192214, +0.0002525547445, +0.0002746958637, +0.0001781021898, +0.0000890510949, +0.0001262773723, +0.0001335766423, +0.0000817518248, +0.0000372262774, -0.0000372262774, +0.0000000000000, +0.0001411192214, +0.0002301703163, +0.0002822384428, +0.0003267639903, +0.0002822384428, +0.0001929440389, +0.0000372262774, -0.0001187347932, -0.0000965936740, +0.0000520681265, +0.0002228710462, +0.0002895377129, +0.0002004866180, +0.0001114355231, +0.0000817518248, +0.0000965936740, +0.0001411192214, +0.0001929440389, +0.0002970802920, +0.0003861313869, +0.0002746958637, +0.0001632603406, +0.0001781021898, +0.0002895377129, +0.0004082725061, +0.0004454987835, +0.0003934306569, +0.0003043795620, +0.0001708029197, +0.0000148418491, -0.0001038929440, -0.0001559610706, -0.0000965936740, +0.0000965936740, +0.0003192214112, +0.0004233576642, +0.0004082725061, +0.0003267639903, +0.0002450121655, +0.0002598540146, +0.0002301703163, +0.0001114355231, +0.0000593673966, +0.0001262773723, +0.0002377128954, +0.0003785888078, +0.0004751824818, +0.0004751824818, +0.0004082725061, +0.0002895377129, +0.0002077858881, +0.0001781021898, +0.0002228710462, +0.0003340632603, +0.0004530413625, +0.0005866180049, +0.0006236009732, +0.0004381995134, +0.0002377128954, +0.0000965936740, +0.0000890510949, +0.0002525547445, +0.0004381995134, +0.0006236009732, +0.0007277372263, +0.0006683698297, +0.0006014598540, +0.0005569343066, +0.0004827250608, +0.0003416058394, +0.0001484184915, -0.0000445255474, -0.0001335766423, -0.0000965936740, +0.0000223844282, +0.0001114355231, +0.0001114355231, +0.0001632603406, +0.0002525547445, +0.0002673965937, +0.0002525547445, +0.0002746958637, +0.0003192214112, +0.0004158150852, +0.0004530413625, +0.0003785888078, +0.0002895377129, +0.0002004866180, +0.0001114355231, +0.0000742092457, +0.0000593673966, +0.0000817518248, +0.0001559610706, +0.0002153284672, +0.0001929440389, +0.0000445255474, -0.0000742092457, -0.0000817518248, +0.0000223844282, +0.0001856447689, +0.0002895377129, +0.0003416058394, +0.0003564476886, +0.0003192214112, +0.0002450121655, +0.0001781021898, +0.0002004866180, +0.0002004866180, +0.0000520681265, -0.0000669099757, -0.0000890510949, -0.0000593673966, +0.0000520681265, +0.0002004866180, +0.0002895377129, +0.0003267639903, +0.0003043795620, +0.0002746958637, +0.0002077858881, +0.0000742092457, -0.0000742092457, -0.0001856447689, -0.0002301703163, -0.0002077858881, -0.0001262773723, -0.0000296836983, -0.0000148418491, -0.0000372262774, -0.0000445255474, -0.0000742092457, -0.0000890510949, -0.0000075425791, +0.0000593673966, +0.0000148418491, -0.0000742092457, -0.0001187347932, -0.0001632603406, -0.0002077858881, -0.0001708029197, -0.0000372262774, +0.0000593673966, +0.0000520681265, -0.0000593673966, -0.0001929440389, -0.0002228710462, -0.0001335766423, -0.0000669099757, -0.0000520681265, -0.0000742092457, -0.0001187347932, -0.0001632603406, -0.0002077858881, -0.0001559610706, -0.0000445255474, -0.0000520681265, -0.0001187347932, -0.0001632603406, -0.0002153284672, -0.0002004866180, -0.0001262773723, -0.0000593673966, -0.0000223844282, -0.0000223844282, -0.0000742092457, -0.0000817518248, -0.0000296836983, +0.0000223844282, +0.0000445255474, -0.0000296836983, -0.0001708029197, -0.0002970802920, -0.0003712895377, -0.0003564476886, -0.0002450121655, -0.0000669099757, +0.0000445255474, +0.0000445255474, +0.0000372262774, -0.0000075425791, -0.0000742092457, -0.0000890510949, -0.0000965936740, -0.0001038929440, -0.0000890510949, -0.0000520681265, -0.0000075425791, -0.0000890510949, -0.0002895377129, -0.0004233576642, -0.0005048661800, -0.0005420924574, -0.0003934306569, -0.0000890510949, +0.0001484184915, +0.0003043795620, +0.0003712895377, +0.0003267639903, +0.0002228710462, +0.0000817518248, -0.0000372262774, -0.0000890510949, -0.0000445255474, -0.0000520681265, -0.0001632603406, -0.0002525547445, -0.0002746958637, -0.0002228710462, -0.0000669099757, +0.0001114355231, +0.0002450121655, +0.0002377128954, +0.0000593673966, -0.0000965936740, -0.0001335766423, -0.0001114355231, +0.0000296836983, +0.0002301703163, +0.0002895377129, +0.0001559610706, +0.0000000000000, -0.0000148418491, +0.0000148418491, -0.0000372262774, -0.0000742092457, -0.0000669099757, -0.0000593673966, +0.0000520681265, +0.0001856447689, +0.0002153284672, +0.0002077858881, +0.0001484184915, +0.0000817518248, +0.0000669099757, +0.0000223844282, -0.0000148418491, -0.0000148418491, +0.0000372262774, +0.0001335766423, +0.0001484184915, +0.0001262773723, +0.0001632603406, +0.0001335766423, +0.0000445255474, -0.0000148418491, +0.0000000000000, +0.0000520681265, +0.0000223844282, -0.0000372262774, -0.0000223844282, +0.0000000000000, -0.0000296836983, -0.0000445255474, -0.0000372262774, -0.0000520681265, -0.0000742092457, -0.0000148418491, +0.0000296836983, +0.0000520681265, +0.0001335766423, +0.0002301703163, +0.0002598540146, +0.0002153284672, +0.0000965936740, -0.0000372262774, -0.0000965936740, -0.0001187347932, -0.0001781021898, -0.0002301703163, -0.0002004866180, -0.0000669099757, +0.0000520681265, +0.0000965936740, +0.0001262773723, +0.0001262773723, +0.0000669099757, +0.0000000000000, -0.0001411192214, -0.0002301703163, -0.0002301703163, -0.0001929440389, -0.0000742092457, +0.0000148418491, +0.0000000000000, +0.0000000000000, -0.0000296836983, -0.0000890510949, -0.0001335766423, -0.0002153284672, -0.0002228710462, -0.0001411192214, -0.0001038929440, -0.0000742092457, +0.0000000000000, +0.0000742092457, +0.0000965936740, +0.0000890510949, +0.0000223844282, -0.0001262773723, -0.0002450121655, -0.0002673965937, -0.0002598540146, -0.0002746958637, -0.0002450121655, -0.0001187347932, +0.0000372262774, +0.0001781021898, +0.0002450121655, +0.0001856447689, +0.0000742092457, -0.0000742092457, -0.0002450121655, -0.0003489051095, -0.0003861313869, -0.0003637469586, -0.0002598540146, -0.0001856447689, -0.0001632603406, -0.0001484184915, -0.0000817518248, +0.0000000000000, -0.0000372262774, -0.0001411192214, -0.0002077858881, -0.0002525547445, -0.0002673965937, -0.0002525547445, -0.0002525547445, -0.0002598540146, -0.0002228710462, -0.0001335766423, -0.0000817518248, -0.0001038929440, -0.0001262773723, -0.0000965936740, -0.0000890510949, -0.0001335766423, -0.0001411192214, -0.0001262773723, -0.0001559610706, -0.0001781021898, -0.0001708029197, -0.0001929440389, -0.0002746958637, -0.0003637469586, -0.0003712895377, -0.0003119221411, -0.0002450121655, -0.0002153284672, -0.0001114355231, +0.0000817518248, +0.0002301703163, +0.0002301703163, +0.0001187347932, -0.0000148418491, -0.0000445255474, +0.0000000000000, -0.0000223844282, -0.0001038929440, -0.0001632603406, -0.0001484184915, -0.0000742092457, -0.0000372262774, -0.0000593673966, -0.0001038929440, -0.0001632603406, -0.0001929440389, -0.0002525547445, -0.0003119221411, -0.0002598540146, -0.0001335766423, +0.0000000000000, +0.0000593673966, +0.0000593673966, +0.0000296836983, -0.0000296836983, -0.0000520681265, -0.0000296836983, -0.0000148418491, +0.0000000000000, -0.0000148418491, -0.0000075425791, +0.0000148418491, -0.0000223844282, -0.0000593673966, -0.0000520681265, -0.0000445255474, -0.0000445255474, -0.0001187347932, -0.0002450121655, -0.0002598540146, -0.0001929440389, -0.0000965936740, -0.0000223844282, +0.0000000000000, +0.0000445255474, +0.0000520681265, +0.0000075425791, -0.0000296836983, -0.0000593673966, -0.0000669099757, -0.0000742092457, -0.0000890510949, -0.0001262773723, -0.0001632603406, -0.0001559610706, -0.0000817518248, -0.0000520681265, -0.0000890510949, -0.0001262773723, -0.0001262773723, -0.0001335766423, -0.0001335766423, -0.0001411192214, -0.0001708029197, -0.0002004866180, -0.0001929440389, -0.0001929440389, -0.0001708029197, -0.0000742092457, +0.0000000000000, -0.0000148418491, -0.0000520681265, -0.0000372262774, -0.0000223844282, -0.0000445255474, -0.0000742092457, -0.0001187347932, -0.0001929440389, -0.0001856447689, -0.0001411192214, -0.0001187347932, -0.0000742092457, -0.0000223844282, +0.0000075425791, +0.0000075425791, -0.0000372262774, -0.0000593673966, -0.0000148418491, +0.0000372262774, +0.0000593673966, +0.0000296836983, +0.0000000000000, -0.0000669099757, -0.0001929440389, -0.0002525547445, -0.0002673965937, -0.0001856447689, -0.0000223844282, +0.0000965936740, +0.0001708029197, +0.0001632603406, +0.0000445255474, -0.0000445255474, -0.0000965936740, -0.0001484184915, -0.0001187347932, -0.0000593673966, -0.0000223844282, +0.0000075425791, +0.0000000000000, -0.0000075425791, +0.0000296836983, +0.0000890510949, +0.0001114355231, +0.0001038929440, +0.0000890510949, +0.0001187347932, +0.0001335766423, +0.0000817518248, +0.0000296836983, -0.0000148418491, -0.0000593673966, -0.0000296836983, +0.0000372262774, +0.0000593673966, +0.0000669099757, +0.0000669099757, +0.0000000000000, -0.0000965936740, -0.0001559610706, -0.0001038929440, +0.0000223844282, +0.0001335766423, +0.0001632603406, +0.0000965936740, +0.0000000000000, -0.0000296836983, -0.0000372262774, -0.0000372262774, -0.0000296836983, -0.0000593673966, -0.0000593673966, +0.0000000000000, +0.0000742092457, +0.0001187347932, +0.0001038929440, +0.0000445255474, +0.0000000000000, -0.0000223844282, -0.0000520681265, -0.0000742092457, -0.0000742092457, -0.0000817518248, -0.0000372262774, +0.0000223844282, +0.0000148418491, -0.0000372262774, -0.0000520681265, +0.0000075425791, +0.0001335766423, +0.0001708029197, +0.0001262773723, +0.0000445255474, -0.0000372262774, -0.0000890510949, -0.0000965936740, -0.0000817518248, -0.0000520681265, -0.0000742092457, -0.0001038929440, -0.0000669099757, -0.0000223844282, +0.0000445255474, +0.0001335766423, +0.0001411192214, +0.0000817518248, +0.0000296836983, -0.0000223844282, -0.0000593673966, -0.0000593673966, -0.0000148418491, +0.0000742092457, +0.0001187347932, +0.0000965936740, +0.0000669099757, +0.0000148418491, -0.0000223844282, +0.0000075425791, +0.0001114355231, +0.0001559610706, +0.0000890510949, +0.0000148418491, -0.0000148418491, -0.0000445255474, -0.0000593673966, -0.0000817518248, -0.0000742092457, +0.0000000000000, +0.0000445255474, +0.0000593673966, +0.0000890510949, +0.0001187347932, +0.0001484184915, +0.0001411192214, +0.0001484184915, +0.0001708029197, +0.0000890510949, -0.0000593673966, -0.0001632603406, -0.0001559610706, -0.0001187347932, -0.0000817518248, -0.0000075425791, +0.0000742092457, +0.0001335766423, +0.0001856447689, +0.0001559610706, +0.0000445255474, -0.0000075425791, -0.0000075425791, +0.0000000000000, +0.0000296836983, +0.0001038929440, +0.0002077858881, +0.0002450121655, +0.0001781021898, +0.0000669099757, +0.0000000000000, -0.0000593673966, -0.0000669099757, +0.0000075425791, +0.0001411192214, +0.0002746958637, +0.0003416058394, +0.0002822384428, +0.0001929440389, +0.0001262773723, +0.0000965936740, +0.0001335766423, +0.0001335766423, +0.0000742092457, +0.0000372262774, +0.0000075425791, +0.0000000000000, -0.0000148418491, -0.0000445255474, -0.0000520681265, -0.0000075425791, +0.0000817518248, +0.0001559610706, +0.0001632603406, +0.0001559610706, +0.0001114355231, +0.0000520681265, +0.0000075425791, -0.0000296836983, -0.0000669099757, -0.0000965936740, -0.0000817518248, -0.0000148418491, +0.0000445255474, +0.0001411192214, +0.0002077858881, +0.0001708029197, +0.0000890510949, +0.0000075425791, -0.0000520681265, -0.0000223844282, +0.0000520681265, +0.0000669099757, +0.0000669099757, +0.0000742092457, +0.0000669099757, +0.0000742092457, +0.0001114355231, +0.0001559610706, +0.0001856447689, +0.0001856447689, +0.0001559610706, +0.0001262773723, +0.0000520681265, +0.0000000000000, +0.0000000000000, +0.0000075425791, +0.0000075425791, +0.0000148418491, +0.0000223844282, +0.0000296836983, +0.0000296836983, +0.0000148418491, +0.0000445255474, +0.0001559610706, +0.0002895377129, +0.0003785888078, +0.0003192214112, +0.0001484184915, -0.0000075425791, -0.0000890510949, -0.0000890510949, -0.0000223844282, +0.0000148418491, +0.0000372262774, +0.0000742092457, +0.0000890510949, +0.0000965936740, +0.0001484184915, +0.0001929440389, +0.0001856447689, +0.0001262773723, +0.0000296836983, -0.0000296836983, -0.0000296836983, -0.0000148418491, +0.0000000000000, +0.0000075425791, -0.0000296836983, -0.0001038929440, -0.0001484184915, -0.0001038929440, +0.0000000000000, +0.0001335766423, +0.0002450121655, +0.0002822384428, +0.0002301703163, +0.0001262773723, +0.0000148418491, -0.0000372262774, +0.0000000000000, +0.0000817518248, +0.0001187347932, +0.0000817518248, +0.0000372262774, +0.0000075425791, -0.0000075425791, +0.0000148418491, +0.0000669099757, +0.0000890510949, +0.0000965936740, +0.0000965936740, +0.0000445255474, -0.0000148418491, -0.0000223844282, +0.0000742092457, +0.0002077858881, +0.0002377128954, +0.0001187347932, -0.0000372262774, -0.0001335766423, -0.0001411192214, -0.0000965936740, -0.0000148418491, +0.0000593673966, +0.0001335766423, +0.0001708029197, +0.0001632603406, +0.0001187347932, +0.0000296836983, -0.0000669099757, -0.0001262773723, -0.0001484184915, -0.0001335766423, -0.0000593673966, +0.0000445255474, +0.0001484184915, +0.0001856447689, +0.0001484184915, +0.0000817518248, +0.0000372262774, +0.0000148418491, +0.0000223844282, +0.0000445255474, +0.0000372262774, +0.0000000000000, -0.0000296836983, -0.0000520681265, -0.0000445255474, -0.0000148418491, +0.0000075425791, -0.0000372262774, -0.0001187347932, -0.0001484184915, -0.0000520681265, +0.0001262773723, +0.0002822384428, +0.0003119221411, +0.0002301703163, +0.0000965936740, -0.0000372262774, -0.0001114355231, -0.0000593673966, +0.0000445255474, +0.0001559610706, +0.0001856447689, +0.0001632603406, +0.0001484184915, +0.0000890510949, +0.0000372262774, +0.0000148418491, -0.0000445255474, -0.0001335766423, -0.0001929440389, -0.0001929440389, -0.0001262773723, -0.0000148418491, +0.0001262773723, +0.0001856447689, +0.0001559610706, +0.0000965936740, +0.0000445255474, +0.0000148418491, +0.0000148418491, +0.0000223844282, +0.0000223844282, -0.0000075425791, -0.0000669099757, -0.0000965936740, -0.0000669099757, +0.0000223844282, +0.0000965936740, +0.0000520681265, +0.0000000000000, -0.0000075425791, +0.0000075425791, +0.0000593673966, +0.0000742092457, +0.0000593673966, +0.0000148418491, -0.0000669099757, -0.0001484184915, -0.0001781021898, -0.0001781021898, -0.0001484184915, -0.0001187347932, -0.0000593673966, +0.0000148418491, +0.0000593673966, +0.0000669099757, +0.0000593673966, +0.0000669099757, +0.0001335766423, +0.0002153284672, +0.0002004866180, +0.0000742092457, -0.0000742092457, -0.0001632603406, -0.0001708029197, -0.0001632603406, -0.0001335766423, -0.0000445255474, +0.0000445255474, +0.0000890510949, +0.0001114355231, +0.0001187347932, +0.0001262773723, +0.0000890510949, +0.0000075425791, -0.0001114355231, -0.0002077858881, -0.0002228710462, -0.0001781021898, -0.0000817518248, +0.0000669099757, +0.0001929440389, +0.0002822384428, +0.0002970802920, +0.0002746958637, +0.0002525547445, +0.0002077858881, +0.0001262773723, +0.0000075425791, -0.0001484184915, -0.0002377128954, -0.0002301703163, -0.0001632603406, -0.0000742092457, +0.0000148418491, +0.0000890510949, +0.0001262773723, +0.0001559610706, +0.0001708029197, +0.0001411192214, +0.0000742092457, +0.0000223844282, +0.0000000000000, -0.0000372262774, -0.0000296836983, +0.0000223844282, +0.0000890510949, +0.0001708029197, +0.0002153284672, +0.0001929440389, +0.0001484184915, +0.0001038929440, +0.0000372262774, -0.0000445255474, -0.0001411192214, -0.0001708029197, -0.0001187347932, -0.0000593673966, +0.0000000000000, +0.0000593673966, +0.0000965936740, +0.0001114355231, +0.0000742092457, +0.0000148418491, -0.0000075425791, -0.0000075425791, +0.0000372262774, +0.0001114355231, +0.0001187347932, +0.0000817518248, +0.0000445255474, +0.0000520681265, +0.0000817518248, +0.0000742092457, +0.0000445255474, +0.0000296836983, +0.0000445255474, +0.0000742092457, +0.0000817518248, +0.0000593673966, +0.0000296836983, -0.0000445255474, -0.0001262773723, -0.0001632603406, -0.0001411192214, -0.0000817518248, -0.0000075425791, -0.0000075425791, -0.0000372262774, -0.0000742092457, -0.0001038929440, -0.0000965936740, -0.0000593673966, -0.0000148418491, +0.0000000000000, +0.0000075425791, -0.0000075425791, -0.0000223844282, +0.0000000000000, +0.0000445255474, +0.0001038929440, +0.0001411192214, +0.0001411192214, +0.0001038929440, +0.0000520681265, +0.0000445255474, +0.0000372262774, +0.0000000000000, -0.0000075425791, -0.0000075425791, -0.0000520681265, -0.0001114355231, -0.0001335766423, -0.0001038929440, -0.0000223844282, +0.0000520681265, +0.0000817518248, +0.0000890510949, +0.0000742092457, +0.0000669099757, +0.0000669099757, +0.0000223844282, -0.0000445255474, -0.0001038929440, -0.0000890510949, -0.0000075425791, +0.0000223844282, +0.0000223844282, +0.0000520681265, +0.0000520681265, +0.0000223844282, +0.0000148418491, -0.0000075425791, -0.0000593673966, -0.0000890510949, -0.0000890510949, -0.0000890510949, -0.0001187347932, -0.0001038929440, -0.0000520681265, -0.0000296836983, -0.0000296836983, -0.0000148418491, +0.0000148418491, +0.0000372262774, +0.0000075425791, +0.0000000000000, -0.0000296836983, -0.0001038929440, -0.0001632603406, -0.0001929440389, -0.0001335766423, -0.0000296836983, +0.0000000000000, +0.0000000000000, -0.0000372262774, -0.0000593673966, -0.0000593673966, -0.0000593673966, -0.0000669099757, -0.0000593673966, -0.0000520681265, -0.0000520681265, -0.0001038929440, -0.0001708029197, -0.0002153284672, -0.0002377128954, -0.0002377128954, -0.0001929440389, -0.0001187347932, -0.0000669099757, -0.0000669099757, -0.0000817518248, -0.0000890510949, -0.0001038929440, -0.0001187347932, -0.0001187347932, -0.0001114355231, -0.0000965936740, -0.0000742092457, -0.0000890510949, -0.0001262773723, -0.0001484184915, -0.0001411192214, -0.0001262773723, -0.0001114355231, -0.0001262773723, -0.0001632603406, -0.0001632603406, -0.0001484184915, -0.0001335766423, -0.0001038929440, -0.0000817518248, -0.0000669099757, -0.0000520681265, -0.0000372262774, -0.0000520681265, -0.0001187347932, -0.0001708029197, -0.0001632603406, -0.0001856447689, -0.0002301703163, -0.0002228710462, -0.0001632603406, -0.0000742092457, +0.0000223844282, +0.0000593673966, +0.0000669099757, +0.0000372262774, -0.0000223844282, -0.0000445255474, -0.0000742092457, -0.0001708029197, -0.0002228710462, -0.0002525547445, -0.0002746958637, -0.0002228710462, -0.0001559610706, -0.0000593673966, +0.0000296836983, +0.0000223844282, -0.0000148418491, -0.0000593673966, -0.0000742092457, -0.0000148418491, +0.0000445255474, +0.0000593673966, +0.0000223844282, -0.0000669099757, -0.0001484184915, -0.0001708029197, -0.0001856447689, -0.0001632603406, -0.0001262773723, -0.0000817518248, -0.0000372262774, -0.0000372262774, -0.0000372262774, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/15-fender-superchamp-ui87.h000066400000000000000000001664261247673406200257600ustar00rootroot00000000000000float fender_superchamp_ui87[] = { +0.0000000000000, +0.0000000000000, -0.0000124489796, -0.0000124489796, +0.0000000000000, +0.0000373469388, +0.0001120408163, +0.0001869387755, +0.0002428571429, +0.0002055102041, +0.0001183673469, +0.0000000000000, -0.0001120408163, -0.0001869387755, -0.0002055102041, -0.0001432653061, -0.0000124489796, +0.0001369387755, +0.0002926530612, +0.0003985714286, +0.0004173469388, +0.0003487755102, +0.0001993877551, +0.0000124489796, -0.0001369387755, -0.0002242857143, -0.0002179591837, -0.0001183673469, +0.0000312244898, +0.0001742857143, +0.0002616326531, +0.0002616326531, +0.0001930612245, +0.0000934693878, +0.0000063265306, -0.0000187755102, +0.0000187755102, +0.0001059183673, +0.0002055102041, +0.0002553061224, +0.0002428571429, +0.0001681632653, +0.0000497959184, -0.0000561224490, -0.0001308163265, -0.0001369387755, -0.0000871428571, -0.0000063265306, +0.0000810204082, +0.0001557142857, +0.0001993877551, +0.0002055102041, +0.0001869387755, +0.0001493877551, +0.0000995918367, +0.0000497959184, +0.0000124489796, +0.0000000000000, +0.0000000000000, +0.0000312244898, +0.0000995918367, +0.0001742857143, +0.0002367346939, +0.0002740816327, +0.0002616326531, +0.0002055102041, +0.0001120408163, +0.0000124489796, -0.0000622448980, -0.0001059183673, -0.0001059183673, -0.0000685714286, -0.0000063265306, +0.0000685714286, +0.0001432653061, +0.0002055102041, +0.0002491836735, +0.0002740816327, +0.0002865306122, +0.0002926530612, +0.0002926530612, +0.0002926530612, +0.0002740816327, +0.0002304081633, +0.0001493877551, +0.0000312244898, -0.0000934693878, -0.0002118367347, -0.0002802040816, -0.0002740816327, -0.0001806122449, -0.0000436734694, +0.0000995918367, +0.0002118367347, +0.0002740816327, +0.0002802040816, +0.0002616326531, +0.0002367346939, +0.0002428571429, +0.0002802040816, +0.0003175510204, +0.0003300000000, +0.0002740816327, +0.0001432653061, -0.0000436734694, -0.0002367346939, -0.0003800000000, -0.0004234693878, -0.0003675510204, -0.0002242857143, -0.0000497959184, +0.0001059183673, +0.0002179591837, +0.0002802040816, +0.0003051020408, +0.0003175510204, +0.0003363265306, +0.0003800000000, +0.0004234693878, +0.0004422448980, +0.0004048979592, +0.0002865306122, +0.0000934693878, -0.0001618367347, -0.0004234693878, -0.0006353061224, -0.0007287755102, -0.0006602040816, -0.0004359183673, -0.0000934693878, +0.0002677551020, +0.0005606122449, +0.0007100000000, +0.0006787755102, +0.0005044897959, +0.0002677551020, +0.0000746938776, -0.0000312244898, -0.0000312244898, +0.0000000000000, +0.0000124489796, -0.0000373469388, -0.0001493877551, -0.0002740816327, -0.0003363265306, -0.0002865306122, -0.0001557142857, -0.0000124489796, +0.0000810204082, +0.0000746938776, -0.0000063265306, -0.0000934693878, -0.0000934693878, +0.0000312244898, +0.0002491836735, +0.0004359183673, +0.0004732653061, +0.0002926530612, -0.0000810204082, -0.0005044897959, -0.0007910204082, -0.0007910204082, -0.0004920408163, +0.0000000000000, +0.0004857142857, +0.0007785714286, +0.0007473469388, +0.0004608163265, +0.0000312244898, -0.0003363265306, -0.0006040816327, -0.0007597959184, -0.0007224489796, -0.0008159183673, -0.0009030612245, -0.0008718367347, -0.0006787755102, -0.0002926530612, +0.0002428571429, +0.0007971428571, +0.0011957142857, +0.0012330612245, +0.0008969387755, +0.0003424489796, -0.0002367346939, -0.0006414285714, -0.0008344897959, -0.0008159183673, -0.0008034693878, -0.0008718367347, -0.0010900000000, -0.0012891836735, -0.0013826530612, -0.0012020408163, -0.0008532653061, -0.0003551020408, +0.0000000000000, +0.0000746938776, -0.0000995918367, -0.0003861224490, -0.0006477551020, -0.0007785714286, -0.0005855102041, -0.0005481632653, -0.0005667346939, -0.0013140816327, -0.0021548979592, -0.0037057142857, -0.0049824489796, -0.0062904081633, -0.0072308163265, -0.0094044897959, -0.0072993877551, -0.0138075510204, -0.0030330612245, -0.0133281632653, -0.0246942857143, +0.0027902040816, +0.0544459183673, +0.0320932653061, -0.0956757142857, -0.1275697959184, -0.0306608163265, +0.0084016326531, +0.0812826530612, +0.2040691836735, +0.2002326530612, +0.1623100000000, +0.0831573469388, -0.0095226530612, -0.0398534693878, -0.0714795918367, -0.0870561224490, -0.0555295918367, -0.0589487755102, -0.0438457142857, -0.0178744897959, +0.0066951020408, +0.0477008163265, +0.0553800000000, +0.0518300000000, +0.0558471428571, +0.0315763265306, +0.0187216326531, +0.0105006122449, -0.0076106122449, -0.0059104081633, -0.0186220408163, -0.0288795918367, -0.0231995918367, -0.0170836734694, -0.0058044897959, +0.0000124489796, -0.0093920408163, -0.0076606122449, +0.0011832653061, +0.0031202040816, +0.0112291836735, +0.0091677551020, -0.0036495918367, -0.0080467346939, -0.0097344897959, -0.0183230612245, -0.0085075510204, -0.0107993877551, -0.0236853061224, -0.0122320408163, -0.0138761224490, -0.0169279591837, -0.0099463265306, -0.0093857142857, -0.0079469387755, -0.0065581632653, -0.0100644897959, +0.0011397959184, +0.0058481632653, +0.0073989795918, +0.0098340816327, +0.0032261224490, +0.0038426530612, +0.0017438775510, +0.0035936734694, +0.0075981632653, -0.0005293877551, -0.0072993877551, -0.0104008163265, -0.0171022448980, -0.0207083673469, -0.0168781632653, -0.0100459183673, -0.0008283673469, +0.0019742857143, +0.0043908163265, +0.0030704081633, +0.0001557142857, -0.0002367346939, -0.0000124489796, -0.0042538775510, -0.0106873469388, -0.0096534693878, -0.0108181632653, -0.0110673469388, -0.0099463265306, -0.0104008163265, -0.0128920408163, -0.0151528571429, -0.0129357142857, -0.0030579591837, +0.0002677551020, -0.0040793877551, -0.0064895918367, -0.0103324489796, -0.0093295918367, -0.0066826530612, -0.0044218367347, -0.0007473469388, -0.0002677551020, +0.0024600000000, +0.0052067346939, -0.0024851020408, -0.0079593877551, -0.0085387755102, -0.0097906122449, -0.0046585714286, -0.0005916326531, -0.0013577551020, -0.0038116326531, -0.0086881632653, -0.0116714285714, -0.0125432653061, -0.0134587755102, -0.0128671428571, -0.0134714285714, -0.0120014285714, -0.0080777551020, -0.0079034693878, -0.0062716326531, -0.0019806122449, +0.0011334693878, +0.0024912244898, +0.0022669387755, +0.0032946938776, +0.0043222448980, +0.0025722448980, +0.0031575510204, +0.0043161224490, +0.0032697959184, +0.0012891836735, -0.0029210204082, -0.0078597959184, -0.0127614285714, -0.0153771428571, -0.0134028571429, -0.0105689795918, -0.0081587755102, -0.0054432653061, -0.0031140816327, -0.0013140816327, -0.0019244897959, -0.0026095918367, -0.0007661224490, +0.0015259183673, +0.0037244897959, +0.0053312244898, +0.0048018367347, +0.0036932653061, +0.0015881632653, -0.0009777551020, -0.0008283673469, +0.0000436734694, +0.0002989795918, +0.0013826530612, +0.0024787755102, +0.0028336734694, +0.0022483673469, +0.0017126530612, +0.0028336734694, +0.0039859183673, +0.0054681632653, +0.0081900000000, +0.0075546938776, +0.0047957142857, +0.0027963265306, +0.0016442857143, +0.0021051020408, +0.0014636734694, +0.0005106122449, +0.0003175510204, -0.0010026530612, -0.0008344897959, -0.0002865306122, +0.0000622448980, +0.0028648979592, +0.0055118367347, +0.0069442857143, +0.0075920408163, +0.0068383673469, +0.0061532653061, +0.0063463265306, +0.0065644897959, +0.0055306122449, +0.0037804081633, +0.0012144897959, -0.0000561224490, +0.0013826530612, +0.0021236734694, +0.0042163265306, +0.0073428571429, +0.0076979591837, +0.0080716326531, +0.0087069387755, +0.0072930612245, +0.0054744897959, +0.0036310204082, +0.0031763265306, +0.0037057142857, +0.0048579591837, +0.0071810204082, +0.0086444897959, +0.0091055102041, +0.0077228571429, +0.0047395918367, +0.0036371428571, +0.0017126530612, -0.0005230612245, +0.0016816326531, +0.0041291836735, +0.0056177551020, +0.0070438775510, +0.0059665306122, +0.0040295918367, +0.0025597959184, +0.0014885714286, +0.0021175510204, +0.0025473469388, +0.0024975510204, +0.0027589795918, +0.0025722448980, +0.0035873469388, +0.0069257142857, +0.0088563265306, +0.0081089795918, +0.0071622448980, +0.0053063265306, +0.0019930612245, -0.0008408163265, -0.0018185714286, -0.0009218367347, +0.0004173469388, +0.0007910204082, -0.0000248979592, -0.0014200000000, -0.0019244897959, -0.0000373469388, +0.0021175510204, +0.0027902040816, +0.0035500000000, +0.0039734693878, +0.0023106122449, +0.0012269387755, +0.0017065306122, +0.0018808163265, +0.0021861224490, +0.0023791836735, +0.0023355102041, +0.0031202040816, +0.0045775510204, +0.0051755102041, +0.0040232653061, +0.0016318367347, +0.0000312244898, -0.0002677551020, +0.0003051020408, +0.0017126530612, +0.0023355102041, +0.0007412244898, -0.0014263265306, -0.0028587755102, -0.0027902040816, -0.0014263265306, +0.0004234693878, +0.0018746938776, +0.0022171428571, +0.0022295918367, +0.0026842857143, +0.0022359183673, +0.0003487755102, -0.0015134693878, -0.0026032653061, -0.0029708163265, -0.0019557142857, +0.0006165306122, +0.0012393877551, -0.0001369387755, -0.0008842857143, -0.0017438775510, -0.0038863265306, -0.0039424489796, -0.0028836734694, -0.0021424489796, -0.0008408163265, -0.0006663265306, -0.0007412244898, -0.0009467346939, -0.0018310204082, -0.0019306122449, -0.0013016326531, -0.0006851020408, +0.0006975510204, +0.0006289795918, -0.0002677551020, -0.0014012244898, -0.0028587755102, -0.0034753061224, -0.0036122448980, -0.0024475510204, -0.0001244897959, +0.0009840816327, +0.0013951020408, +0.0009467346939, -0.0009218367347, -0.0011771428571, -0.0011522448980, -0.0018559183673, -0.0016816326531, -0.0010026530612, -0.0001493877551, +0.0007971428571, +0.0011024489796, +0.0009965306122, +0.0001681632653, +0.0003985714286, +0.0007661224490, -0.0005418367347, -0.0011273469388, -0.0011024489796, -0.0014512244898, -0.0019681632653, -0.0031824489796, -0.0032510204082, -0.0024040816327, -0.0017189795918, +0.0000436734694, +0.0010587755102, -0.0002491836735, -0.0016130612245, -0.0024102040816, -0.0029085714286, -0.0028463265306, -0.0026157142857, -0.0021922448980, -0.0012642857143, -0.0002118367347, +0.0005169387755, +0.0008344897959, +0.0005979591837, +0.0006663265306, +0.0006353061224, -0.0007722448980, -0.0018559183673, -0.0018871428571, -0.0024538775510, -0.0025846938776, -0.0017624489796, -0.0001993877551, +0.0011210204082, +0.0013140816327, +0.0023044897959, +0.0033008163265, +0.0031140816327, +0.0026281632653, +0.0014512244898, +0.0003487755102, -0.0004732653061, -0.0011522448980, -0.0005916326531, +0.0000124489796, +0.0003736734694, +0.0009218367347, +0.0017875510204, +0.0028836734694, +0.0029022448980, +0.0022483673469, +0.0009155102041, -0.0008220408163, -0.0006975510204, -0.0003114285714, -0.0000124489796, +0.0008593877551, +0.0006912244898, -0.0000063265306, -0.0004732653061, -0.0005855102041, -0.0000746938776, -0.0002118367347, -0.0002989795918, +0.0008657142857, +0.0015881632653, +0.0024040816327, +0.0032822448980, +0.0035873469388, +0.0034379591837, +0.0020863265306, +0.0004608163265, -0.0002367346939, -0.0003424489796, -0.0000373469388, +0.0001308163265, -0.0000248979592, +0.0003051020408, +0.0004920408163, -0.0002616326531, -0.0009902040816, -0.0013328571429, -0.0014324489796, -0.0009965306122, -0.0002616326531, +0.0002553061224, +0.0005293877551, +0.0004359183673, +0.0008034693878, +0.0015757142857, +0.0020055102041, +0.0023355102041, +0.0031140816327, +0.0034379591837, +0.0029832653061, +0.0025285714286, +0.0015071428571, +0.0006353061224, +0.0008095918367, +0.0010900000000, +0.0015569387755, +0.0019806122449, +0.0021424489796, +0.0024975510204, +0.0018622448980, +0.0007597959184, +0.0003424489796, -0.0003612244898, -0.0002865306122, +0.0001369387755, -0.0000934693878, +0.0001557142857, -0.0003612244898, -0.0008283673469, -0.0001742857143, -0.0001120408163, +0.0001681632653, +0.0006851020408, +0.0008159183673, +0.0009902040816, +0.0008034693878, +0.0015383673469, +0.0028087755102, +0.0030704081633, +0.0028026530612, +0.0015632653061, +0.0001059183673, -0.0003363265306, -0.0002553061224, +0.0002926530612, +0.0008034693878, +0.0006975510204, +0.0006104081633, +0.0008095918367, +0.0010651020408, +0.0008842857143, +0.0009716326531, +0.0011459183673, +0.0009030612245, +0.0006165306122, +0.0000124489796, -0.0003487755102, -0.0008718367347, -0.0016442857143, -0.0020863265306, -0.0025224489796, -0.0019430612245, -0.0004110204082, +0.0008532653061, +0.0023106122449, +0.0032883673469, +0.0036185714286, +0.0032697959184, +0.0020428571429, +0.0012955102041, +0.0006602040816, +0.0000248979592, -0.0002865306122, -0.0006414285714, -0.0007224489796, -0.0007785714286, -0.0010712244898, -0.0007597959184, -0.0003051020408, -0.0000934693878, -0.0001930612245, +0.0001120408163, +0.0004173469388, -0.0005667346939, -0.0013887755102, -0.0016628571429, -0.0014324489796, -0.0007785714286, -0.0007036734694, -0.0009404081633, -0.0013887755102, -0.0024787755102, -0.0030081632653, -0.0028275510204, -0.0019742857143, -0.0002616326531, +0.0013638775510, +0.0023728571429, +0.0024414285714, +0.0016130612245, +0.0003363265306, -0.0008842857143, -0.0016318367347, -0.0021175510204, -0.0024475510204, -0.0025597959184, -0.0023169387755, -0.0015881632653, -0.0011771428571, -0.0005606122449, +0.0000622448980, -0.0001869387755, -0.0002802040816, -0.0004297959184, -0.0008969387755, -0.0010524489796, -0.0011024489796, -0.0011957142857, -0.0014263265306, -0.0021112244898, -0.0023418367347, -0.0020304081633, -0.0016877551020, -0.0006851020408, +0.0000934693878, -0.0000871428571, -0.0003612244898, -0.0002989795918, -0.0000063265306, +0.0008593877551, +0.0013328571429, +0.0013514285714, +0.0011832653061, +0.0002926530612, -0.0003363265306, -0.0004732653061, -0.0007224489796, -0.0004920408163, -0.0007536734694, -0.0014263265306, -0.0013638775510, -0.0015383673469, -0.0015259183673, -0.0008906122449, -0.0007971428571, -0.0006165306122, -0.0003424489796, +0.0000497959184, +0.0005667346939, -0.0000124489796, -0.0006663265306, -0.0010836734694, -0.0019681632653, -0.0021922448980, -0.0011334693878, -0.0002179591837, -0.0000746938776, -0.0000124489796, +0.0001557142857, -0.0001369387755, -0.0004920408163, -0.0009653061224, -0.0016318367347, -0.0016940816327, -0.0010214285714, -0.0004297959184, -0.0004359183673, -0.0011024489796, -0.0016442857143, -0.0016691836735, -0.0016006122449, -0.0010214285714, -0.0003551020408, -0.0005357142857, -0.0008718367347, -0.0011708163265, -0.0017189795918, -0.0019306122449, -0.0018310204082, -0.0015881632653, -0.0009653061224, -0.0007536734694, -0.0011708163265, -0.0014761224490, -0.0017002040816, -0.0018497959184, -0.0018000000000, -0.0017624489796, -0.0017189795918, -0.0015881632653, -0.0014075510204, -0.0011085714286, -0.0006602040816, -0.0003861224490, -0.0002428571429, -0.0000995918367, -0.0002118367347, -0.0004173469388, -0.0005357142857, -0.0003800000000, -0.0003238775510, -0.0006104081633, -0.0009716326531, -0.0013016326531, -0.0014822448980, -0.0014697959184, -0.0012393877551, -0.0006165306122, -0.0004359183673, -0.0007785714286, -0.0011708163265, -0.0015383673469, -0.0013204081633, -0.0010775510204, -0.0004857142857, +0.0003300000000, -0.0002553061224, -0.0012206122449, -0.0015383673469, -0.0016006122449, -0.0014636734694, -0.0014387755102, -0.0012706122449, -0.0010338775510, -0.0012642857143, -0.0012830612245, -0.0007597959184, -0.0005667346939, -0.0004795918367, -0.0001930612245, -0.0002428571429, -0.0005293877551, -0.0007722448980, -0.0010214285714, -0.0007163265306, -0.0003487755102, -0.0004110204082, -0.0004422448980, -0.0008593877551, -0.0011024489796, -0.0007661224490, -0.0008220408163, -0.0010712244898, -0.0011771428571, -0.0015195918367, -0.0017065306122, -0.0014946938776, -0.0008034693878, -0.0000187755102, +0.0000810204082, -0.0001493877551, -0.0004048979592, -0.0006165306122, -0.0007287755102, -0.0006538775510, -0.0004920408163, -0.0002491836735, +0.0000436734694, +0.0001244897959, -0.0000063265306, +0.0000000000000, +0.0001183673469, +0.0001930612245, +0.0000187755102, -0.0002553061224, -0.0005542857143, -0.0010214285714, -0.0010214285714, -0.0004981632653, +0.0001869387755, +0.0005106122449, +0.0001869387755, -0.0002802040816, -0.0002616326531, -0.0000187755102, +0.0000312244898, +0.0000622448980, -0.0000934693878, -0.0003363265306, -0.0002616326531, +0.0000000000000, +0.0004920408163, +0.0009591836735, +0.0008159183673, +0.0005542857143, +0.0003612244898, +0.0003238775510, +0.0004981632653, +0.0005044897959, +0.0003363265306, +0.0002304081633, +0.0000934693878, +0.0000746938776, +0.0000685714286, -0.0001869387755, -0.0004795918367, -0.0008593877551, -0.0010214285714, -0.0008034693878, -0.0003924489796, +0.0000685714286, +0.0004732653061, +0.0006912244898, +0.0006228571429, +0.0004110204082, +0.0005169387755, +0.0008593877551, +0.0009342857143, +0.0006165306122, +0.0001059183673, -0.0001493877551, +0.0000497959184, +0.0004732653061, +0.0008344897959, +0.0010900000000, +0.0011397959184, +0.0008781632653, +0.0007100000000, +0.0007536734694, +0.0010524489796, +0.0010712244898, +0.0007287755102, +0.0002179591837, -0.0003675510204, -0.0006602040816, -0.0002989795918, +0.0006040816327, +0.0013887755102, +0.0013265306122, +0.0007597959184, +0.0001993877551, -0.0003736734694, -0.0004546938776, -0.0000561224490, +0.0002179591837, +0.0003300000000, +0.0001059183673, -0.0003238775510, -0.0005106122449, -0.0003487755102, -0.0000436734694, +0.0001557142857, +0.0000312244898, -0.0003175510204, -0.0004732653061, -0.0004671428571, -0.0001681632653, +0.0004857142857, +0.0009218367347, +0.0008657142857, +0.0006228571429, +0.0002926530612, +0.0001244897959, -0.0000312244898, -0.0002553061224, -0.0001993877551, -0.0001120408163, -0.0005542857143, -0.0009965306122, -0.0009902040816, -0.0008034693878, -0.0002553061224, +0.0003114285714, +0.0003612244898, +0.0002677551020, +0.0000000000000, -0.0004795918367, -0.0005791836735, -0.0003487755102, -0.0002242857143, -0.0001369387755, -0.0002616326531, -0.0005916326531, -0.0005730612245, -0.0003114285714, -0.0000436734694, +0.0002491836735, +0.0001493877551, -0.0001618367347, -0.0002179591837, -0.0004920408163, -0.0005542857143, -0.0003114285714, -0.0003487755102, -0.0002242857143, +0.0000685714286, +0.0001681632653, +0.0001806122449, -0.0001557142857, -0.0005542857143, -0.0008718367347, -0.0014075510204, -0.0012020408163, -0.0006851020408, -0.0004359183673, +0.0000187755102, +0.0000497959184, -0.0002242857143, -0.0002865306122, -0.0004483673469, -0.0003612244898, -0.0002242857143, -0.0003300000000, -0.0002989795918, -0.0005542857143, -0.0008344897959, -0.0009404081633, -0.0012457142857, -0.0011957142857, -0.0006851020408, -0.0000622448980, +0.0005293877551, +0.0007412244898, +0.0007910204082, +0.0003551020408, -0.0001993877551, -0.0005293877551, -0.0011397959184, -0.0011210204082, -0.0004546938776, +0.0001557142857, +0.0002677551020, +0.0001183673469, +0.0003051020408, -0.0003114285714, -0.0007412244898, -0.0003861224490, -0.0002677551020, +0.0004546938776, +0.0008469387755, +0.0005855102041, +0.0005606122449, -0.0004173469388, -0.0013079591837, -0.0013079591837, -0.0018497959184, -0.0011210204082, -0.0001742857143, +0.0000312244898, +0.0008283673469, +0.0006851020408, -0.0005542857143, -0.0009777551020, -0.0009218367347, -0.0005106122449, +0.0001742857143, +0.0004857142857, +0.0007536734694, +0.0008532653061, +0.0008283673469, +0.0009030612245, +0.0008159183673, +0.0004483673469, +0.0001742857143, -0.0002428571429, -0.0003300000000, -0.0000810204082, -0.0001183673469, +0.0001059183673, +0.0004110204082, +0.0006165306122, +0.0008159183673, +0.0008969387755, +0.0008781632653, +0.0010089795918, +0.0009342857143, +0.0007348979592, +0.0007785714286, +0.0007224489796, +0.0009030612245, +0.0009902040816, +0.0009155102041, +0.0007722448980, +0.0007163265306, +0.0007661224490, +0.0008220408163, +0.0007536734694, +0.0007846938776, +0.0011148979592, +0.0014885714286, +0.0016753061224, +0.0015195918367, +0.0011522448980, +0.0008906122449, +0.0007597959184, +0.0004795918367, +0.0001059183673, -0.0001120408163, -0.0001869387755, +0.0001493877551, +0.0006851020408, +0.0008969387755, +0.0009840816327, +0.0012955102041, +0.0014761224490, +0.0013265306122, +0.0011210204082, +0.0008657142857, +0.0004048979592, +0.0001557142857, +0.0000373469388, +0.0001869387755, +0.0007473469388, +0.0011646938776, +0.0015818367347, +0.0016318367347, +0.0012642857143, +0.0010587755102, +0.0008718367347, +0.0009528571429, +0.0014697959184, +0.0018373469388, +0.0019930612245, +0.0017438775510, +0.0011771428571, +0.0008718367347, +0.0006289795918, +0.0005791836735, +0.0008781632653, +0.0010275510204, +0.0011085714286, +0.0012706122449, +0.0012206122449, +0.0008469387755, +0.0005791836735, +0.0005293877551, +0.0005357142857, +0.0008034693878, +0.0010836734694, +0.0012581632653, +0.0013951020408, +0.0014387755102, +0.0014200000000, +0.0011646938776, +0.0007661224490, +0.0003363265306, -0.0000871428571, -0.0001557142857, +0.0000685714286, +0.0003924489796, +0.0007348979592, +0.0008034693878, +0.0007473469388, +0.0006477551020, +0.0004483673469, +0.0003800000000, +0.0003924489796, +0.0006353061224, +0.0008906122449, +0.0008718367347, +0.0007597959184, +0.0003051020408, -0.0000995918367, -0.0000436734694, -0.0000063265306, +0.0000312244898, +0.0001183673469, +0.0001742857143, +0.0003175510204, +0.0004483673469, +0.0006602040816, +0.0008159183673, +0.0008034693878, +0.0009342857143, +0.0010961224490, +0.0010587755102, +0.0008034693878, +0.0004483673469, +0.0002055102041, +0.0000124489796, -0.0000685714286, -0.0000063265306, +0.0000187755102, +0.0001681632653, +0.0004234693878, +0.0004857142857, +0.0003487755102, +0.0005293877551, +0.0006663265306, +0.0005855102041, +0.0007846938776, +0.0008532653061, +0.0008159183673, +0.0009653061224, +0.0008969387755, +0.0006040816327, +0.0002179591837, -0.0002242857143, -0.0002926530612, -0.0003800000000, -0.0002865306122, +0.0001930612245, +0.0003551020408, +0.0004359183673, +0.0005979591837, +0.0005542857143, +0.0006787755102, +0.0008283673469, +0.0007224489796, +0.0007597959184, +0.0007163265306, +0.0005418367347, +0.0003800000000, +0.0002553061224, +0.0002989795918, +0.0004173469388, +0.0004857142857, +0.0004857142857, +0.0003363265306, +0.0002304081633, +0.0001618367347, +0.0002553061224, +0.0006538775510, +0.0009902040816, +0.0012955102041, +0.0013079591837, +0.0007785714286, +0.0001493877551, -0.0004359183673, -0.0005916326531, -0.0002740816327, +0.0000810204082, +0.0002989795918, +0.0002491836735, +0.0001369387755, +0.0001869387755, +0.0003612244898, +0.0006040816327, +0.0008159183673, +0.0010089795918, +0.0012581632653, +0.0012457142857, +0.0013016326531, +0.0012955102041, +0.0008842857143, +0.0004048979592, -0.0001493877551, -0.0006228571429, -0.0006353061224, -0.0004795918367, -0.0003424489796, -0.0000810204082, +0.0001059183673, +0.0002428571429, +0.0004671428571, +0.0005979591837, +0.0006414285714, +0.0006414285714, +0.0002802040816, +0.0000063265306, -0.0000248979592, -0.0002428571429, -0.0001369387755, +0.0001432653061, +0.0001618367347, +0.0000685714286, -0.0001930612245, -0.0004234693878, -0.0003114285714, -0.0000187755102, +0.0005106122449, +0.0009404081633, +0.0009902040816, +0.0010524489796, +0.0008469387755, +0.0003612244898, -0.0001183673469, -0.0005916326531, -0.0008344897959, -0.0009591836735, -0.0010214285714, -0.0007100000000, -0.0001993877551, +0.0001869387755, +0.0003861224490, +0.0003675510204, +0.0002677551020, +0.0001432653061, +0.0000934693878, +0.0000746938776, +0.0000312244898, -0.0000622448980, -0.0001993877551, -0.0003300000000, -0.0003051020408, -0.0003551020408, -0.0005293877551, -0.0003736734694, -0.0001557142857, -0.0001432653061, -0.0001493877551, -0.0002367346939, -0.0000312244898, +0.0003736734694, +0.0003924489796, +0.0003675510204, +0.0003051020408, -0.0000497959184, -0.0002179591837, -0.0002179591837, -0.0001869387755, -0.0000373469388, -0.0000124489796, -0.0001493877551, -0.0003424489796, -0.0005044897959, -0.0003551020408, +0.0000000000000, +0.0002242857143, +0.0003675510204, +0.0004483673469, +0.0002989795918, +0.0000871428571, -0.0001120408163, -0.0002802040816, -0.0003175510204, -0.0002740816327, -0.0002616326531, -0.0003736734694, -0.0007224489796, -0.0009591836735, -0.0008842857143, -0.0007473469388, -0.0004795918367, -0.0002367346939, -0.0002242857143, -0.0002865306122, -0.0002242857143, -0.0002118367347, -0.0003051020408, -0.0004422448980, -0.0005979591837, -0.0006353061224, -0.0006602040816, -0.0007100000000, -0.0006787755102, -0.0005481632653, -0.0003175510204, -0.0000995918367, -0.0000187755102, +0.0000810204082, +0.0002491836735, +0.0002179591837, +0.0000622448980, -0.0000685714286, -0.0002989795918, -0.0004608163265, -0.0004732653061, -0.0004297959184, -0.0002865306122, -0.0002491836735, -0.0003800000000, -0.0004795918367, -0.0005418367347, -0.0006165306122, -0.0005730612245, -0.0005293877551, -0.0005730612245, -0.0004297959184, -0.0001432653061, -0.0001244897959, -0.0002802040816, -0.0002865306122, -0.0003487755102, -0.0004671428571, -0.0003424489796, -0.0002055102041, -0.0002677551020, -0.0003675510204, -0.0004671428571, -0.0007100000000, -0.0007846938776, -0.0004981632653, -0.0002989795918, -0.0001930612245, -0.0001183673469, -0.0002926530612, -0.0005667346939, -0.0007971428571, -0.0008906122449, -0.0008095918367, -0.0009404081633, -0.0012518367347, -0.0013453061224, -0.0012330612245, -0.0008906122449, -0.0004422448980, -0.0002118367347, -0.0002055102041, -0.0003487755102, -0.0005791836735, -0.0007100000000, -0.0005979591837, -0.0003985714286, -0.0001869387755, -0.0000497959184, -0.0001244897959, -0.0002865306122, -0.0004857142857, -0.0006289795918, -0.0005542857143, -0.0004981632653, -0.0006228571429, -0.0006851020408, -0.0007348979592, -0.0007348979592, -0.0005791836735, -0.0004110204082, -0.0003363265306, -0.0003551020408, -0.0004981632653, -0.0006040816327, -0.0006289795918, -0.0005730612245, -0.0004795918367, -0.0003675510204, -0.0001369387755, -0.0000312244898, -0.0002304081633, -0.0003985714286, -0.0005106122449, -0.0005357142857, -0.0003424489796, -0.0001557142857, -0.0001059183673, -0.0001993877551, -0.0005418367347, -0.0007722448980, -0.0008159183673, -0.0008842857143, -0.0008283673469, -0.0007163265306, -0.0005791836735, -0.0003924489796, -0.0003363265306, -0.0003487755102, -0.0004110204082, -0.0005791836735, -0.0006787755102, -0.0006165306122, -0.0005230612245, -0.0003800000000, -0.0002428571429, -0.0003051020408, -0.0004234693878, -0.0005855102041, -0.0007722448980, -0.0007910204082, -0.0005606122449, -0.0003736734694, -0.0003736734694, -0.0004483673469, -0.0005044897959, -0.0003175510204, -0.0000063265306, +0.0001993877551, +0.0003051020408, +0.0001742857143, -0.0001244897959, -0.0003675510204, -0.0005916326531, -0.0007971428571, -0.0008532653061, -0.0007348979592, -0.0003736734694, +0.0000373469388, +0.0001806122449, +0.0000187755102, -0.0002491836735, -0.0004297959184, -0.0003924489796, -0.0002677551020, -0.0001308163265, -0.0000373469388, -0.0000187755102, +0.0000000000000, +0.0000187755102, -0.0000871428571, -0.0001930612245, -0.0001869387755, -0.0001059183673, -0.0000373469388, -0.0000248979592, -0.0000248979592, -0.0000622448980, -0.0000497959184, +0.0000248979592, +0.0000871428571, +0.0001183673469, +0.0001681632653, +0.0000187755102, -0.0004110204082, -0.0008283673469, -0.0009653061224, -0.0009279591837, -0.0006975510204, -0.0001993877551, +0.0001993877551, +0.0002055102041, +0.0000124489796, -0.0000934693878, -0.0001369387755, -0.0000124489796, +0.0003114285714, +0.0005606122449, +0.0005418367347, +0.0002926530612, -0.0000561224490, -0.0003985714286, -0.0006975510204, -0.0007661224490, -0.0005730612245, -0.0002802040816, -0.0000810204082, -0.0000995918367, -0.0001806122449, -0.0002304081633, -0.0002179591837, -0.0000497959184, +0.0000373469388, -0.0000373469388, -0.0001183673469, -0.0001869387755, -0.0002242857143, -0.0002491836735, -0.0002242857143, -0.0001930612245, -0.0002179591837, -0.0003300000000, -0.0004732653061, -0.0005667346939, -0.0005293877551, -0.0003985714286, -0.0002553061224, -0.0001681632653, -0.0001618367347, -0.0002428571429, -0.0002428571429, -0.0001059183673, -0.0000373469388, -0.0001557142857, -0.0003363265306, -0.0003424489796, -0.0001806122449, -0.0000436734694, +0.0000685714286, +0.0000746938776, -0.0000685714286, -0.0002055102041, -0.0003551020408, -0.0004110204082, -0.0002989795918, -0.0002118367347, -0.0001742857143, -0.0001806122449, -0.0001681632653, -0.0000063265306, +0.0000810204082, +0.0000934693878, +0.0001059183673, +0.0000746938776, +0.0000000000000, -0.0000934693878, -0.0000497959184, +0.0000934693878, +0.0000561224490, -0.0000685714286, -0.0001618367347, -0.0001493877551, +0.0000312244898, +0.0001308163265, +0.0001308163265, +0.0000995918367, -0.0000934693878, -0.0003612244898, -0.0004173469388, -0.0003800000000, -0.0001993877551, +0.0000871428571, +0.0002367346939, +0.0003924489796, +0.0004608163265, +0.0002367346939, -0.0000561224490, -0.0003051020408, -0.0004234693878, -0.0002677551020, -0.0002677551020, -0.0002989795918, -0.0001432653061, -0.0001618367347, -0.0002428571429, -0.0002616326531, -0.0001869387755, -0.0000497959184, -0.0001244897959, -0.0003114285714, -0.0003800000000, -0.0004359183673, -0.0001681632653, +0.0002677551020, +0.0004732653061, +0.0004981632653, +0.0002367346939, -0.0000373469388, -0.0000063265306, +0.0000746938776, +0.0002491836735, +0.0004359183673, +0.0001993877551, +0.0000000000000, +0.0000871428571, +0.0001183673469, +0.0001369387755, +0.0002553061224, +0.0001869387755, -0.0000561224490, -0.0002989795918, -0.0003736734694, -0.0003424489796, -0.0001869387755, +0.0001493877551, +0.0002740816327, +0.0000622448980, -0.0001806122449, -0.0002367346939, -0.0000871428571, +0.0001681632653, +0.0002926530612, +0.0003051020408, +0.0003051020408, +0.0001869387755, +0.0002242857143, +0.0004422448980, +0.0005542857143, +0.0005418367347, +0.0004359183673, +0.0001806122449, +0.0000810204082, -0.0000685714286, -0.0001244897959, +0.0000622448980, +0.0001059183673, +0.0002242857143, +0.0005418367347, +0.0007412244898, +0.0008593877551, +0.0008842857143, +0.0007412244898, +0.0006165306122, +0.0003300000000, +0.0000063265306, -0.0000995918367, -0.0000685714286, +0.0000312244898, +0.0001869387755, +0.0003985714286, +0.0004795918367, +0.0004546938776, +0.0005542857143, +0.0005979591837, +0.0004795918367, +0.0004981632653, +0.0005542857143, +0.0004608163265, +0.0003924489796, +0.0003675510204, +0.0002865306122, +0.0001120408163, -0.0000124489796, +0.0000373469388, +0.0000685714286, +0.0000497959184, +0.0001308163265, +0.0001681632653, +0.0001120408163, +0.0000934693878, +0.0000746938776, +0.0000561224490, +0.0000685714286, +0.0000497959184, +0.0001432653061, +0.0002055102041, +0.0001681632653, +0.0001618367347, +0.0001369387755, +0.0001244897959, +0.0001557142857, +0.0001493877551, +0.0001806122449, +0.0002118367347, +0.0001183673469, +0.0001742857143, +0.0003487755102, +0.0004795918367, +0.0006912244898, +0.0009279591837, +0.0008718367347, +0.0005169387755, +0.0001244897959, -0.0001869387755, -0.0002677551020, -0.0001369387755, +0.0000561224490, +0.0001742857143, +0.0002242857143, +0.0002428571429, +0.0003363265306, +0.0004546938776, +0.0005791836735, +0.0006851020408, +0.0006663265306, +0.0004732653061, +0.0002304081633, +0.0001681632653, +0.0002428571429, +0.0003300000000, +0.0004483673469, +0.0004671428571, +0.0003985714286, +0.0004483673469, +0.0005230612245, +0.0004981632653, +0.0003675510204, +0.0003424489796, +0.0003675510204, +0.0002865306122, +0.0002926530612, +0.0004732653061, +0.0006353061224, +0.0006726530612, +0.0005606122449, +0.0003675510204, +0.0001806122449, +0.0000063265306, +0.0000000000000, +0.0000995918367, +0.0001183673469, +0.0001493877551, +0.0002553061224, +0.0003675510204, +0.0004732653061, +0.0005730612245, +0.0005169387755, +0.0004483673469, +0.0003300000000, +0.0001120408163, +0.0000810204082, +0.0001742857143, +0.0001806122449, +0.0002740816327, +0.0002989795918, +0.0003175510204, +0.0005542857143, +0.0006228571429, +0.0005730612245, +0.0005169387755, +0.0004048979592, +0.0003487755102, +0.0003487755102, +0.0003612244898, +0.0004234693878, +0.0004048979592, +0.0001618367347, -0.0000746938776, -0.0001493877551, -0.0001120408163, +0.0000312244898, +0.0003175510204, +0.0004981632653, +0.0004920408163, +0.0003612244898, +0.0001120408163, -0.0000436734694, -0.0001432653061, -0.0000746938776, +0.0001618367347, +0.0003424489796, +0.0003736734694, +0.0003051020408, +0.0001557142857, +0.0000746938776, +0.0000000000000, -0.0000622448980, +0.0000000000000, +0.0000871428571, +0.0001493877551, +0.0001618367347, +0.0001183673469, -0.0000497959184, -0.0002179591837, -0.0001930612245, -0.0000871428571, +0.0000187755102, +0.0001183673469, +0.0001742857143, +0.0002304081633, +0.0002926530612, +0.0003300000000, +0.0003051020408, +0.0001681632653, +0.0000746938776, +0.0000000000000, -0.0000934693878, -0.0000497959184, +0.0000000000000, +0.0000373469388, +0.0001059183673, +0.0000934693878, +0.0000871428571, +0.0001993877551, +0.0003051020408, +0.0005169387755, +0.0006912244898, +0.0006228571429, +0.0004422448980, +0.0002367346939, +0.0001618367347, +0.0002179591837, +0.0001930612245, +0.0001742857143, +0.0002428571429, +0.0001869387755, +0.0000685714286, +0.0000000000000, +0.0000187755102, +0.0000373469388, -0.0000187755102, -0.0000436734694, -0.0000436734694, -0.0000373469388, -0.0000436734694, -0.0001059183673, -0.0000871428571, +0.0000312244898, +0.0002304081633, +0.0003861224490, +0.0003800000000, +0.0003736734694, +0.0003487755102, +0.0001618367347, +0.0000622448980, +0.0001308163265, +0.0002677551020, +0.0003861224490, +0.0003675510204, +0.0002740816327, +0.0001120408163, -0.0000561224490, -0.0000934693878, -0.0000810204082, -0.0001244897959, -0.0002179591837, -0.0003861224490, -0.0004422448980, -0.0003675510204, -0.0002616326531, -0.0000124489796, +0.0001681632653, +0.0001681632653, +0.0002118367347, +0.0002740816327, +0.0002740816327, +0.0002242857143, +0.0001681632653, +0.0001493877551, +0.0000124489796, -0.0001183673469, -0.0001308163265, -0.0001369387755, -0.0000871428571, +0.0000124489796, +0.0000561224490, +0.0000497959184, +0.0001244897959, +0.0002118367347, +0.0002304081633, +0.0001369387755, -0.0000810204082, -0.0003800000000, -0.0006851020408, -0.0008283673469, -0.0006104081633, -0.0001806122449, +0.0001557142857, +0.0003238775510, +0.0002926530612, +0.0001681632653, +0.0000312244898, -0.0000622448980, -0.0000561224490, -0.0000561224490, -0.0000934693878, -0.0000248979592, +0.0000436734694, +0.0000373469388, +0.0000000000000, -0.0001369387755, -0.0003051020408, -0.0004110204082, -0.0003924489796, -0.0001806122449, +0.0000248979592, +0.0001493877551, +0.0001059183673, -0.0001557142857, -0.0003924489796, -0.0004234693878, -0.0003300000000, -0.0000934693878, +0.0000312244898, -0.0000871428571, -0.0003175510204, -0.0004857142857, -0.0005230612245, -0.0005357142857, -0.0004795918367, -0.0002677551020, -0.0001059183673, -0.0000497959184, +0.0000187755102, -0.0000187755102, -0.0001557142857, -0.0002304081633, -0.0002926530612, -0.0003736734694, -0.0004359183673, -0.0004048979592, -0.0003114285714, -0.0002367346939, -0.0002055102041, -0.0002242857143, -0.0003051020408, -0.0003675510204, -0.0003175510204, -0.0001930612245, -0.0001308163265, -0.0001244897959, -0.0002179591837, -0.0004483673469, -0.0005418367347, -0.0004608163265, -0.0003612244898, -0.0002179591837, -0.0001244897959, -0.0001059183673, -0.0001120408163, -0.0001869387755, -0.0001930612245, -0.0001557142857, -0.0001557142857, +0.0000063265306, +0.0001930612245, +0.0001869387755, +0.0001618367347, +0.0000685714286, -0.0000497959184, -0.0001618367347, -0.0003861224490, -0.0005293877551, -0.0006228571429, -0.0007036734694, -0.0005730612245, -0.0003363265306, -0.0001742857143, +0.0000187755102, +0.0001557142857, +0.0001806122449, +0.0002553061224, +0.0002491836735, +0.0001493877551, +0.0000746938776, -0.0000622448980, -0.0002740816327, -0.0004297959184, -0.0004981632653, -0.0004234693878, -0.0002677551020, -0.0001557142857, +0.0000000000000, +0.0001308163265, +0.0001618367347, +0.0001806122449, +0.0001993877551, +0.0001681632653, +0.0000871428571, -0.0000436734694, -0.0001618367347, -0.0002865306122, -0.0003612244898, -0.0002553061224, -0.0001308163265, -0.0000746938776, -0.0000622448980, -0.0001183673469, -0.0001618367347, -0.0001493877551, -0.0001120408163, -0.0000871428571, -0.0000995918367, -0.0000871428571, -0.0000871428571, -0.0000124489796, +0.0001183673469, +0.0001493877551, +0.0001681632653, +0.0001369387755, +0.0000312244898, +0.0000373469388, +0.0001120408163, +0.0001244897959, +0.0000000000000, -0.0001432653061, -0.0001869387755, -0.0001742857143, -0.0000685714286, +0.0000000000000, -0.0000248979592, -0.0000312244898, -0.0001869387755, -0.0004048979592, -0.0004483673469, -0.0002989795918, -0.0000248979592, +0.0001869387755, +0.0002055102041, +0.0001308163265, +0.0000000000000, -0.0000561224490, -0.0000685714286, -0.0001742857143, -0.0001681632653, -0.0000746938776, -0.0001183673469, -0.0000685714286, +0.0001369387755, +0.0002865306122, +0.0003238775510, +0.0002304081633, +0.0000746938776, -0.0001120408163, -0.0003424489796, -0.0003800000000, -0.0003114285714, -0.0002179591837, -0.0000561224490, -0.0000124489796, +0.0000000000000, +0.0000685714286, +0.0000561224490, +0.0000746938776, +0.0000810204082, -0.0000685714286, -0.0002118367347, -0.0002926530612, -0.0003175510204, -0.0002616326531, -0.0002118367347, -0.0002179591837, -0.0002304081633, -0.0002179591837, -0.0001432653061, -0.0000312244898, -0.0000248979592, -0.0000746938776, -0.0000561224490, -0.0000187755102, +0.0000810204082, +0.0001618367347, +0.0000995918367, +0.0000248979592, -0.0000810204082, -0.0002428571429, -0.0003238775510, -0.0003363265306, -0.0002802040816, -0.0001244897959, -0.0000248979592, -0.0000312244898, -0.0001308163265, -0.0002616326531, -0.0003175510204, -0.0003675510204, -0.0003363265306, -0.0001869387755, -0.0000934693878, -0.0000373469388, +0.0000063265306, -0.0000063265306, +0.0000000000000, -0.0000436734694, -0.0000622448980, +0.0000000000000, +0.0000312244898, +0.0000871428571, +0.0001432653061, +0.0000871428571, +0.0000373469388, +0.0000063265306, -0.0000436734694, -0.0000248979592, -0.0000436734694, -0.0001183673469, -0.0001369387755, -0.0001681632653, -0.0002179591837, -0.0002304081633, -0.0002304081633, -0.0001869387755, -0.0001618367347, -0.0001557142857, -0.0001493877551, -0.0001432653061, -0.0001369387755, +0.0000000000000, +0.0001993877551, +0.0002491836735, +0.0001806122449, -0.0000124489796, -0.0002740816327, -0.0004173469388, -0.0004795918367, -0.0003800000000, -0.0001308163265, +0.0000497959184, +0.0001930612245, +0.0001493877551, -0.0000622448980, -0.0001742857143, -0.0003300000000, -0.0004732653061, -0.0004608163265, -0.0004297959184, -0.0003612244898, -0.0002367346939, -0.0001432653061, -0.0000622448980, -0.0000124489796, +0.0000000000000, +0.0000187755102, +0.0000063265306, +0.0000124489796, +0.0000685714286, +0.0001432653061, +0.0001432653061, +0.0000063265306, -0.0001308163265, -0.0002553061224, -0.0003551020408, -0.0003985714286, -0.0004422448980, -0.0004857142857, -0.0004110204082, -0.0002242857143, -0.0000561224490, +0.0000561224490, +0.0001681632653, +0.0002055102041, +0.0001244897959, +0.0000497959184, -0.0000746938776, -0.0001432653061, -0.0000746938776, +0.0000063265306, +0.0000436734694, -0.0000063265306, -0.0001120408163, -0.0001493877551, -0.0001432653061, -0.0000622448980, +0.0000312244898, +0.0000810204082, +0.0000746938776, +0.0000000000000, -0.0001618367347, -0.0002553061224, -0.0001742857143, +0.0000000000000, +0.0000871428571, +0.0001432653061, +0.0001432653061, +0.0000561224490, +0.0000497959184, +0.0001493877551, +0.0002304081633, +0.0001993877551, +0.0000497959184, -0.0000622448980, -0.0001120408163, -0.0000810204082, +0.0000561224490, +0.0001869387755, +0.0002616326531, +0.0002616326531, +0.0001432653061, +0.0000124489796, -0.0000871428571, -0.0001244897959, -0.0000497959184, +0.0000000000000, +0.0000312244898, +0.0000995918367, +0.0001183673469, +0.0001120408163, +0.0001930612245, +0.0003175510204, +0.0004857142857, +0.0005293877551, +0.0004173469388, +0.0002553061224, +0.0000995918367, +0.0000312244898, +0.0000934693878, +0.0001183673469, +0.0001618367347, +0.0002428571429, +0.0002740816327, +0.0002367346939, +0.0001432653061, +0.0001432653061, +0.0002553061224, +0.0003985714286, +0.0004857142857, +0.0003800000000, +0.0002304081633, +0.0002055102041, +0.0002242857143, +0.0002677551020, +0.0002553061224, +0.0001432653061, +0.0000995918367, +0.0001059183673, +0.0000622448980, +0.0000000000000, -0.0000312244898, +0.0001059183673, +0.0003363265306, +0.0003736734694, +0.0002367346939, +0.0000685714286, -0.0000561224490, -0.0000934693878, -0.0001432653061, -0.0001993877551, -0.0001183673469, +0.0000063265306, +0.0001308163265, +0.0002367346939, +0.0002304081633, +0.0002242857143, +0.0002428571429, +0.0001806122449, +0.0000685714286, +0.0000000000000, -0.0000063265306, +0.0000312244898, +0.0001244897959, +0.0002553061224, +0.0003736734694, +0.0004920408163, +0.0004920408163, +0.0002553061224, -0.0000995918367, -0.0003551020408, -0.0003612244898, -0.0001930612245, +0.0000312244898, +0.0002616326531, +0.0003424489796, +0.0002865306122, +0.0002118367347, +0.0001869387755, +0.0001742857143, +0.0001493877551, +0.0000934693878, -0.0000063265306, -0.0001183673469, -0.0001369387755, -0.0001059183673, +0.0000000000000, +0.0001369387755, +0.0002367346939, +0.0002367346939, +0.0000995918367, -0.0000497959184, -0.0001557142857, -0.0002553061224, -0.0002616326531, -0.0001493877551, -0.0000373469388, -0.0000312244898, -0.0001120408163, -0.0001183673469, -0.0000373469388, +0.0000622448980, +0.0001432653061, +0.0001806122449, +0.0001183673469, -0.0000312244898, -0.0001930612245, -0.0003300000000, -0.0004234693878, -0.0003612244898, -0.0001869387755, -0.0000810204082, -0.0000312244898, -0.0000497959184, -0.0001493877551, -0.0001993877551, -0.0001618367347, -0.0000622448980, +0.0000312244898, +0.0000934693878, +0.0001183673469, +0.0000934693878, -0.0000124489796, -0.0000810204082, -0.0000248979592, +0.0000124489796, +0.0000373469388, +0.0001059183673, +0.0000934693878, +0.0000312244898, +0.0000312244898, +0.0000063265306, +0.0000373469388, +0.0001369387755, +0.0000746938776, -0.0000934693878, -0.0002118367347, -0.0002677551020, -0.0002055102041, -0.0000436734694, +0.0000436734694, +0.0000561224490, -0.0000187755102, -0.0001742857143, -0.0002242857143, -0.0001432653061, -0.0000561224490, +0.0000622448980, +0.0001308163265, +0.0000810204082, +0.0000934693878, +0.0001059183673, +0.0000561224490, +0.0000497959184, +0.0000622448980, +0.0000373469388, +0.0000063265306, +0.0000063265306, +0.0000685714286, +0.0001183673469, +0.0001183673469, +0.0001308163265, +0.0001618367347, +0.0002118367347, +0.0001742857143, +0.0000871428571, +0.0000622448980, +0.0000373469388, +0.0000248979592, +0.0000810204082, +0.0001681632653, +0.0002367346939, +0.0002428571429, +0.0002055102041, +0.0001742857143, +0.0001308163265, +0.0001308163265, +0.0001059183673, +0.0000934693878, +0.0000871428571, +0.0000622448980, +0.0001432653061, +0.0002553061224, +0.0002926530612, +0.0003363265306, +0.0002865306122, +0.0002179591837, +0.0002242857143, +0.0001993877551, +0.0002616326531, +0.0003675510204, +0.0003800000000, +0.0003551020408, +0.0002740816327, +0.0001742857143, +0.0001557142857, +0.0001308163265, +0.0000685714286, +0.0000436734694, +0.0000810204082, +0.0001369387755, +0.0001869387755, +0.0002118367347, +0.0002367346939, +0.0002428571429, +0.0001742857143, +0.0000995918367, +0.0000746938776, +0.0000497959184, +0.0000561224490, +0.0000810204082, +0.0000746938776, +0.0000561224490, +0.0000436734694, +0.0000561224490, +0.0001308163265, +0.0002802040816, +0.0004422448980, +0.0005606122449, +0.0005855102041, +0.0005230612245, +0.0003487755102, +0.0001369387755, +0.0000124489796, -0.0000312244898, -0.0000622448980, -0.0000685714286, -0.0000373469388, -0.0000622448980, -0.0000871428571, -0.0000436734694, +0.0000312244898, +0.0001183673469, +0.0002055102041, +0.0002242857143, +0.0001869387755, +0.0001183673469, +0.0000497959184, +0.0000248979592, +0.0000187755102, +0.0000312244898, +0.0000497959184, -0.0000187755102, -0.0000561224490, -0.0000063265306, -0.0000124489796, -0.0000312244898, +0.0000000000000, +0.0000000000000, +0.0000312244898, +0.0001059183673, +0.0001681632653, +0.0001869387755, +0.0001308163265, +0.0000685714286, +0.0000063265306, -0.0000995918367, -0.0001493877551, -0.0001308163265, -0.0000995918367, +0.0000000000000, +0.0000685714286, +0.0000436734694, -0.0000187755102, -0.0000497959184, -0.0000124489796, +0.0000124489796, +0.0000124489796, +0.0000312244898, +0.0000561224490, +0.0001059183673, +0.0001618367347, +0.0001369387755, +0.0000312244898, -0.0000746938776, -0.0000871428571, -0.0000871428571, -0.0000871428571, -0.0000373469388, -0.0000312244898, -0.0000248979592, -0.0000063265306, -0.0000248979592, -0.0000934693878, -0.0001557142857, -0.0001806122449, -0.0001244897959, -0.0000124489796, +0.0000746938776, +0.0000746938776, -0.0000436734694, -0.0001993877551, -0.0003051020408, -0.0003300000000, -0.0002926530612, -0.0002428571429, -0.0002118367347, -0.0001806122449, -0.0001308163265, -0.0000561224490, +0.0000373469388, +0.0001308163265, +0.0001618367347, +0.0001308163265, +0.0000746938776, +0.0000124489796, -0.0000124489796, +0.0000063265306, +0.0000063265306, +0.0000000000000, -0.0000063265306, -0.0000871428571, -0.0001493877551, -0.0001369387755, -0.0001493877551, -0.0001681632653, -0.0001681632653, -0.0001369387755, -0.0000436734694, +0.0000373469388, +0.0000248979592, -0.0000248979592, -0.0000685714286, -0.0000436734694, +0.0000373469388, +0.0000934693878, +0.0000622448980, +0.0000187755102, -0.0000063265306, -0.0000187755102, -0.0000373469388, -0.0000685714286, -0.0000561224490, +0.0000000000000, +0.0000187755102, +0.0000187755102, -0.0000497959184, -0.0001557142857, -0.0001557142857, -0.0001120408163, -0.0000373469388, +0.0000685714286, +0.0001183673469, +0.0001120408163, +0.0000436734694, -0.0000497959184, -0.0001183673469, -0.0001557142857, -0.0001244897959, -0.0000436734694, +0.0000063265306, +0.0000871428571, +0.0001930612245, +0.0002616326531, +0.0002677551020, +0.0001493877551, -0.0000373469388, -0.0001493877551, -0.0001681632653, -0.0001869387755, -0.0001742857143, -0.0001308163265, -0.0000561224490, +0.0000436734694, +0.0001308163265, +0.0001432653061, +0.0001369387755, +0.0000995918367, -0.0000063265306, -0.0001059183673, -0.0001432653061, -0.0001432653061, -0.0000622448980, +0.0000000000000, +0.0000124489796, +0.0000124489796, +0.0000000000000, -0.0000561224490, -0.0001120408163, -0.0001369387755, -0.0001869387755, -0.0001806122449, -0.0001059183673, -0.0000436734694, -0.0000063265306, +0.0000000000000, -0.0000497959184, -0.0001308163265, -0.0001369387755, -0.0001183673469, -0.0000871428571, -0.0000248979592, -0.0000124489796, -0.0000312244898, -0.0000561224490, -0.0000436734694, +0.0000312244898, +0.0001618367347, +0.0002179591837, +0.0002304081633, +0.0001681632653, +0.0000373469388, -0.0000810204082, -0.0001869387755, -0.0003114285714, -0.0003736734694, -0.0002926530612, -0.0001120408163, +0.0000685714286, +0.0001993877551, +0.0001869387755, +0.0000934693878, +0.0000000000000, -0.0001120408163, -0.0001930612245, -0.0001742857143, -0.0001059183673, -0.0000497959184, -0.0000436734694, -0.0000373469388, -0.0000063265306, -0.0000063265306, +0.0000124489796, +0.0001244897959, +0.0002367346939, +0.0003114285714, +0.0003238775510, +0.0002677551020, +0.0001806122449, +0.0000436734694, -0.0000871428571, -0.0001806122449, -0.0002428571429, -0.0002055102041, -0.0000746938776, -0.0000063265306, +0.0000373469388, +0.0000746938776, +0.0000810204082, +0.0000995918367, +0.0001308163265, +0.0001618367347, +0.0001432653061, +0.0000312244898, -0.0000436734694, -0.0001059183673, -0.0001432653061, -0.0000871428571, -0.0000248979592, -0.0000497959184, -0.0000746938776, -0.0001369387755, -0.0002118367347, -0.0002118367347, -0.0000995918367, +0.0000187755102, +0.0000746938776, +0.0000934693878, +0.0000871428571, +0.0000622448980, +0.0000373469388, +0.0000373469388, +0.0000497959184, +0.0000312244898, -0.0000248979592, -0.0001244897959, -0.0002677551020, -0.0003300000000, -0.0002428571429, -0.0001869387755, -0.0001120408163, +0.0000000000000, +0.0000995918367, +0.0001806122449, +0.0002242857143, +0.0002242857143, +0.0002118367347, +0.0001493877551, +0.0000312244898, -0.0000622448980, -0.0001183673469, -0.0001308163265, -0.0001244897959, -0.0001681632653, -0.0002677551020, -0.0003175510204, -0.0002802040816, -0.0002055102041, -0.0000746938776, +0.0000746938776, +0.0001308163265, +0.0001183673469, +0.0000685714286, -0.0000063265306, -0.0000436734694, -0.0000373469388, +0.0000000000000, +0.0000497959184, -0.0000187755102, -0.0001930612245, -0.0002989795918, -0.0003175510204, -0.0002304081633, -0.0000622448980, +0.0000810204082, +0.0001742857143, +0.0001618367347, +0.0000561224490, -0.0000561224490, -0.0001806122449, -0.0002616326531, -0.0002428571429, -0.0001869387755, -0.0001369387755, -0.0001059183673, -0.0000995918367, -0.0000934693878, -0.0000561224490, +0.0000187755102, +0.0000934693878, +0.0001183673469, +0.0001059183673, +0.0000746938776, +0.0000373469388, +0.0000187755102, -0.0000561224490, -0.0001993877551, -0.0002802040816, -0.0002677551020, -0.0002055102041, -0.0000810204082, +0.0000248979592, +0.0000373469388, -0.0000124489796, -0.0000312244898, -0.0000248979592, -0.0000312244898, +0.0000000000000, +0.0000622448980, +0.0001120408163, +0.0001183673469, +0.0000746938776, +0.0000063265306, -0.0000810204082, -0.0001244897959, -0.0000497959184, -0.0000187755102, -0.0000561224490, -0.0001059183673, -0.0001493877551, -0.0001618367347, -0.0001120408163, -0.0000124489796, +0.0000871428571, +0.0001244897959, +0.0001369387755, +0.0001244897959, +0.0000124489796, -0.0000746938776, -0.0000995918367, -0.0000622448980, +0.0000063265306, +0.0000497959184, +0.0000497959184, +0.0000497959184, +0.0000373469388, +0.0000124489796, -0.0000436734694, -0.0001183673469, -0.0001120408163, -0.0000871428571, -0.0000561224490, -0.0000248979592, -0.0000497959184, -0.0000373469388, +0.0000063265306, -0.0000063265306, +0.0000000000000, +0.0000124489796, -0.0000187755102, -0.0000746938776, -0.0001244897959, -0.0001369387755, -0.0000746938776, +0.0000248979592, +0.0001557142857, +0.0001806122449, +0.0000871428571, +0.0000248979592, +0.0000000000000, +0.0000187755102, +0.0000622448980, +0.0000436734694, +0.0000063265306, -0.0000373469388, -0.0000871428571, -0.0000810204082, -0.0000685714286, -0.0000436734694, -0.0000063265306, +0.0000000000000, +0.0000248979592, +0.0000746938776, +0.0001059183673, +0.0001369387755, +0.0001493877551, +0.0001432653061, +0.0001618367347, +0.0001681632653, +0.0001120408163, +0.0000312244898, -0.0000187755102, -0.0000436734694, -0.0000497959184, -0.0000248979592, +0.0000000000000, +0.0000063265306, +0.0000124489796, +0.0000248979592, +0.0000373469388, +0.0000436734694, +0.0000561224490, +0.0000934693878, +0.0000810204082, +0.0000436734694, +0.0000312244898, +0.0000312244898, +0.0000000000000, -0.0000497959184, -0.0000810204082, -0.0001183673469, -0.0001557142857, -0.0001618367347, -0.0001244897959, -0.0000685714286, -0.0000373469388, +0.0000000000000, +0.0000436734694, +0.0000248979592, +0.0000124489796, +0.0000187755102, +0.0000000000000, +0.0000312244898, +0.0000746938776, +0.0001059183673, +0.0001308163265, +0.0001059183673, +0.0000622448980, +0.0000497959184, +0.0000810204082, +0.0001183673469, +0.0001618367347, +0.0001742857143, +0.0001120408163, -0.0000063265306, -0.0000436734694, -0.0000685714286, -0.0001244897959, -0.0001432653061, -0.0001059183673, -0.0000373469388, +0.0000000000000, +0.0000000000000, -0.0000124489796, -0.0000561224490, -0.0000934693878, -0.0000312244898, +0.0000561224490, +0.0001183673469, +0.0001493877551, +0.0001120408163, +0.0000497959184, +0.0000124489796, -0.0000063265306, -0.0000248979592, -0.0000063265306, +0.0000436734694, +0.0000561224490, -0.0000063265306, -0.0001183673469, -0.0002179591837, -0.0002491836735, -0.0001742857143, -0.0000934693878, -0.0000436734694, -0.0000248979592, -0.0000248979592, -0.0000248979592, -0.0000436734694, -0.0000746938776, -0.0000497959184, +0.0000063265306, +0.0000436734694, +0.0000373469388, +0.0000312244898, +0.0000561224490, +0.0000934693878, +0.0001308163265, +0.0001493877551, +0.0000995918367, +0.0000187755102, -0.0000810204082, -0.0001369387755, -0.0001493877551, -0.0001432653061, -0.0000810204082, +0.0000312244898, +0.0001244897959, +0.0001493877551, +0.0001120408163, +0.0000373469388, -0.0000063265306, -0.0000124489796, +0.0000248979592, +0.0000934693878, +0.0000871428571, +0.0000000000000, -0.0000934693878, -0.0001806122449, -0.0002242857143, -0.0001930612245, -0.0001059183673, -0.0000248979592, +0.0000000000000, +0.0000063265306, +0.0000000000000, +0.0000000000000, +0.0000373469388, +0.0000810204082, +0.0001059183673, +0.0001369387755, +0.0001183673469, +0.0000436734694, -0.0000063265306, -0.0000497959184, -0.0000685714286, -0.0001183673469, -0.0002055102041, -0.0002428571429, -0.0001930612245, -0.0001183673469, +0.0000000000000, +0.0001059183673, +0.0001432653061, +0.0001120408163, +0.0000746938776, +0.0000373469388, -0.0000124489796, -0.0000746938776, -0.0001059183673, -0.0001059183673, -0.0000871428571, -0.0000685714286, -0.0000497959184, -0.0000436734694, -0.0000561224490, -0.0000622448980, -0.0000746938776, -0.0000934693878, -0.0000934693878, -0.0000622448980, +0.0000000000000, +0.0001059183673, +0.0001869387755, +0.0001930612245, +0.0001432653061, +0.0000685714286, -0.0000124489796, -0.0000436734694, -0.0000124489796, +0.0000497959184, +0.0001244897959, +0.0001432653061, +0.0000685714286, +0.0000063265306, -0.0000063265306, +0.0000373469388, +0.0000995918367, +0.0001369387755, +0.0001244897959, +0.0000685714286, +0.0000063265306, -0.0000312244898, -0.0000746938776, -0.0000871428571, -0.0000436734694, +0.0000248979592, +0.0000871428571, +0.0000871428571, +0.0000622448980, +0.0000497959184, +0.0000373469388, +0.0000248979592, +0.0000312244898, +0.0000373469388, +0.0000373469388, +0.0000000000000, -0.0000248979592, +0.0000000000000, +0.0000810204082, +0.0001681632653, +0.0002118367347, +0.0001742857143, +0.0000561224490, -0.0000934693878, -0.0001432653061, -0.0000995918367, -0.0000124489796, +0.0000497959184, +0.0000995918367, +0.0001244897959, +0.0001493877551, +0.0001557142857, +0.0001493877551, +0.0001308163265, +0.0001120408163, +0.0000871428571, +0.0000561224490, +0.0000124489796, +0.0000000000000, +0.0000561224490, +0.0001493877551, +0.0001993877551, +0.0001681632653, +0.0000871428571, +0.0000561224490, +0.0001120408163, +0.0001742857143, +0.0001993877551, +0.0001742857143, +0.0001244897959, +0.0000561224490, +0.0000000000000, -0.0000063265306, +0.0000000000000, +0.0000000000000, -0.0000063265306, -0.0000373469388, -0.0000436734694, -0.0000248979592, +0.0000248979592, +0.0000934693878, +0.0001493877551, +0.0001369387755, +0.0001059183673, +0.0000810204082, +0.0000248979592, -0.0000187755102, -0.0000561224490, -0.0000622448980, +0.0000187755102, +0.0001244897959, +0.0001432653061, +0.0000934693878, +0.0000000000000, -0.0000746938776, -0.0001120408163, -0.0001308163265, -0.0000871428571, -0.0000124489796, +0.0000312244898, +0.0000497959184, +0.0000436734694, +0.0000124489796, +0.0000248979592, +0.0000622448980, +0.0000995918367, +0.0001244897959, +0.0001244897959, +0.0001059183673, +0.0000685714286, +0.0000561224490, +0.0000622448980, +0.0000746938776, +0.0000934693878, +0.0001059183673, +0.0000312244898, -0.0000436734694, -0.0000561224490, -0.0000436734694, -0.0000248979592, +0.0000124489796, +0.0000685714286, +0.0001244897959, +0.0001183673469, +0.0000934693878, +0.0000312244898, -0.0000312244898, -0.0000561224490, -0.0000187755102, +0.0000497959184, +0.0001432653061, +0.0002118367347, +0.0002553061224, +0.0002367346939, +0.0001557142857, +0.0000995918367, +0.0000561224490, +0.0000436734694, +0.0000436734694, +0.0000000000000, -0.0000746938776, -0.0001618367347, -0.0002367346939, -0.0002242857143, -0.0001493877551, -0.0000871428571, -0.0000187755102, +0.0000561224490, +0.0000871428571, +0.0000934693878, +0.0000810204082, +0.0000561224490, +0.0000312244898, +0.0000124489796, -0.0000063265306, -0.0000248979592, -0.0000312244898, -0.0000436734694, -0.0000934693878, -0.0001308163265, -0.0001369387755, -0.0000746938776, +0.0000124489796, +0.0000436734694, +0.0000561224490, +0.0000312244898, -0.0000561224490, -0.0001308163265, -0.0002118367347, -0.0002677551020, -0.0002304081633, -0.0001618367347, -0.0000934693878, -0.0000497959184, -0.0000685714286, -0.0001120408163, -0.0001432653061, -0.0001369387755, -0.0000685714286, -0.0000187755102 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/16-marshall-jcm2000-sm57.h000066400000000000000000002572141247673406200252200ustar00rootroot00000000000000float marshall_jcm2000_sm57[] = { +0.0000000000000, -0.0000060311284, -0.0000178988327, -0.0000356031128, -0.0000416342412, -0.0000712062257, -0.0000949416342, -0.0000653696498, -0.0002138132296, +0.0000118677043, +0.0000060311284, -0.0004215953307, -0.0001424124514, +0.0001484435798, +0.0000653696498, -0.0001068093385, -0.0002315175097, -0.0002256809339, -0.0001840466926, -0.0001365758755, -0.0000949416342, -0.0001009727626, -0.0001128404669, -0.0001247081712, -0.0001840466926, -0.0001603112840, -0.0001959143969, -0.0001840466926, -0.0001782101167, -0.0001782101167, -0.0001840466926, -0.0002077821012, -0.0002196498054, -0.0002494163424, -0.0002433852140, -0.0002671206226, -0.0002494163424, -0.0002731517510, -0.0002494163424, -0.0002433852140, -0.0002256809339, -0.0002433852140, -0.0003027237354, -0.0003503891051, -0.0003799610895, -0.0004867704280, -0.0004690661479, -0.0004392996109, -0.0002968871595, +0.0008073929961, +0.0002731517510, +0.0017040856031, +0.0059373540856, -0.0068457198444, -0.0352317120623, -0.0352910505837, +0.0115599221790, +0.0720013618677, +0.1071202334630, +0.0965577821012, +0.0392276264591, -0.0504490272374, -0.1408558365759, -0.1945346303502, -0.1865371595331, -0.1197844357977, -0.0299772373541, +0.0433243190661, +0.0822727626459, +0.0901040856031, +0.0776178988327, +0.0520817120623, +0.0231019455253, +0.0037404669261, -0.0043935797665, -0.0072077821012, -0.0082171206226, -0.0070951361868, -0.0022620622568, +0.0053850194553, +0.0119694552529, +0.0103546692607, +0.0006649805447, -0.0104198443580, -0.0168025291829, -0.0156743190661, -0.0098737354086, +0.0008252918288, +0.0175624513619, +0.0316931906615, +0.0357245136187, +0.0299178988327, +0.0180789883268, +0.0072850194553, +0.0024223735409, +0.0049280155642, +0.0127472762646, +0.0196167315175, +0.0183758754864, +0.0108651750973, +0.0062519455253, +0.0042926070039, -0.0001365758755, -0.0039719844358, -0.0036394941634, -0.0006470817121, +0.0060797665370, +0.0174852140078, +0.0276498054475, +0.0299595330739, +0.0247287937743, +0.0167194552529, +0.0101408560311, +0.0065546692607, +0.0052900778210, +0.0042511673152, +0.0001900778210, -0.0058066147860, -0.0098856031128, -0.0103190661479, -0.0061747081712, +0.0010212062257, +0.0067626459144, +0.0094046692607, +0.0107642023346, +0.0107048638132, +0.0093749027237, +0.0098202334630, +0.0111145914397, +0.0093215953307, +0.0052782101167, +0.0023570038911, +0.0018939688716, +0.0027490272374, +0.0044173151751, +0.0067863813230, +0.0075463035019, +0.0046488326848, -0.0008608949416, -0.0058422178988, -0.0085912451362, -0.0095826848249, -0.0087040856031, -0.0064894941634, -0.0042986381323, -0.0022799610895, +0.0003978599222, +0.0043996108949, +0.0083241245136, +0.0107583657588, +0.0113698443580, +0.0091315175097, +0.0039601167315, -0.0024640077821, -0.0082350194553, -0.0118330739300, -0.0131332684825, -0.0135369649805, -0.0141544747082, -0.0146768482490, -0.0144690661479, -0.0132875486381, -0.0097015564202, -0.0031052529183, +0.0040017509728, +0.0086743190661, +0.0093392996109, +0.0058303501946, -0.0002612840467, -0.0065904669261, -0.0118507782101, -0.0155556420233, -0.0173723735409, -0.0165947470817, -0.0128957198444, -0.0075819066148, -0.0028379377432, +0.0000060311284, +0.0006708171206, -0.0002138132296, -0.0006649805447, +0.0006056420233, +0.0024579766537, +0.0028202334630, +0.0007480544747, -0.0030338521401, -0.0070474708171, -0.0104614785992, -0.0125394941634, -0.0125157587549, -0.0111799610895, -0.0104258754864, -0.0109126459144, -0.0117260700389, -0.0118626459144, -0.0111620622568, -0.0097608949416, -0.0077599221790, -0.0059313229572, -0.0049754863813, -0.0048270428016, -0.0048507782101, -0.0043105058366, -0.0030933852140, -0.0022501945525, -0.0029507782101, -0.0052605058366, -0.0082289883268, -0.0106038910506, -0.0114054474708, -0.0100340466926, -0.0066854085603, -0.0024521400778, +0.0006470817121, +0.0009856031128, -0.0010686770428, -0.0040671206226, -0.0067566147860, -0.0078015564202, -0.0064182879377, -0.0035682879377, -0.0007778210117, +0.0009856031128, +0.0014011673152, +0.0005344357977, -0.0015614785992, -0.0044470817121, -0.0067447470817, -0.0073799610895, -0.0066556420233, -0.0057770428016, -0.0053317120623, -0.0050287937743, -0.0047142023346, -0.0043163424125, -0.0036276264591, -0.0025470817121, -0.0017159533074, -0.0020365758755, -0.0036692607004, -0.0059610894942, -0.0078964980545, -0.0090186770428, -0.0097490272374, -0.0102536964981, -0.0100754863813, -0.0088464980545, -0.0066616731518, -0.0042332684825, -0.0021492217899, -0.0005165369650, +0.0007243190661, +0.0016326848249, +0.0022501945525, +0.0025649805447, +0.0026243190661, +0.0025531128405, +0.0025412451362, +0.0028379377432, +0.0033902723735, +0.0038710116732, +0.0038889105058, +0.0031585603113, +0.0018227626459, +0.0002612840467, -0.0013655642023, -0.0028558365759, -0.0038354085603, -0.0040610894942, -0.0034852140078, -0.0024758754864, -0.0014428015564, -0.0008311284047, -0.0009202334630, -0.0012408560311, -0.0011459143969, -0.0006768482490, -0.0001840466926, +0.0001424124514, +0.0003680933852, +0.0004630350195, +0.0002138132296, -0.0002077821012, -0.0002019455253, +0.0003741245136, +0.0009737354086, +0.0010212062257, +0.0004097276265, -0.0005463035019, -0.0013299610895, -0.0013180933852, -0.0000772373541, +0.0022501945525, +0.0050110894942, +0.0071721789883, +0.0077124513619, +0.0062579766537, +0.0033188715953, +0.0000356031128, -0.0022443579767, -0.0025470817121, -0.0007778210117, +0.0022443579767, +0.0052723735409, +0.0069466926070, +0.0068219844358, +0.0054503891051, +0.0036038910506, +0.0019533073930, +0.0009143968872, +0.0005344357977, +0.0008371595331, +0.0016326848249, +0.0024877431907, +0.0031822957198, +0.0036038910506, +0.0037346303502, +0.0036455252918, +0.0035029182879, +0.0036336575875, +0.0041027237354, +0.0045836575875, +0.0048745136187, +0.0049931906615, +0.0050883268482, +0.0055215953307, +0.0066437743191, +0.0081103112840, +0.0089474708171, +0.0085793774319, +0.0071426070039, +0.0053375486381, +0.0039126459144, +0.0031585603113, +0.0031348249027, +0.0039424124514, +0.0053079766537, +0.0064834630350, +0.0068931906615, +0.0063766536965, +0.0050050583658, +0.0033011673152, +0.0019118677043, +0.0010865758755, +0.0006412451362, +0.0004809338521, +0.0009143968872, +0.0020305447471, +0.0035029182879, +0.0049754863813, +0.0060085603113, +0.0063112840467, +0.0059729571984, +0.0052070038911, +0.0043935797665, +0.0039601167315, +0.0040431906615, +0.0044173151751, +0.0046073929961, +0.0044410505837, +0.0040552529183, +0.0035743190661, +0.0029982490272, +0.0024223735409, +0.0020484435798, +0.0019533073930, +0.0020898832685, +0.0023095330739, +0.0024105058366, +0.0024521400778, +0.0027964980545, +0.0036038910506, +0.0045478599222, +0.0052128404669, +0.0053612840467, +0.0049813229572, +0.0046013618677, +0.0047498054475, +0.0052782101167, +0.0058245136187, +0.0060322957198, +0.0057591439689, +0.0052307392996, +0.0047081712062, +0.0042867704280, +0.0041085603113, +0.0042867704280, +0.0048270428016, +0.0055334630350, +0.0060678988327, +0.0060797665370, +0.0055334630350, +0.0047616731518, +0.0041085603113, +0.0037642023346, +0.0038058365759, +0.0040075875486, +0.0038058365759, +0.0028737354086, +0.0015675097276, +0.0005581712062, +0.0002968871595, +0.0007422178988, +0.0015496108949, +0.0024579766537, +0.0031941634241, +0.0032180933852, +0.0021433852140, +0.0001365758755, -0.0020542801556, -0.0034198443580, -0.0033486381323, -0.0019414396887, +0.0000772373541, +0.0018583657588, +0.0029924124514, +0.0035266536965, +0.0035861867704, +0.0032357976654, +0.0025233463035, +0.0015079766537, +0.0005877431907, +0.0003799610895, +0.0008252918288, +0.0013062256809, +0.0015793774319, +0.0016980544747, +0.0016268482490, +0.0014428015564, +0.0015852140078, +0.0022680933852, +0.0031822957198, +0.0037702334630, +0.0035624513619, +0.0024996108949, +0.0009914396887, -0.0004392996109, -0.0014011673152, -0.0017692607004, -0.0015852140078, -0.0008192607004, +0.0003385214008, +0.0013299610895, +0.0017040856031, +0.0013834630350, +0.0004630350195, -0.0007066147860, -0.0015793774319, -0.0018702334630, -0.0016208171206, -0.0009262645914, +0.0000535019455, +0.0010628404669, +0.0017990272374, +0.0020126459144, +0.0017692607004, +0.0014723735409, +0.0013655642023, +0.0012645914397, +0.0009618677043, +0.0004809338521, -0.0001247081712, -0.0008964980545, -0.0016268482490, -0.0019651750973, -0.0017573929961, -0.0012645914397, -0.0009381322957, -0.0011221789883, -0.0017692607004, -0.0024461089494, -0.0026894941634, -0.0022976653696, -0.0014130350195, -0.0003503891051, +0.0004571984436, +0.0005758754864, +0.0000060311284, -0.0008015564202, -0.0015258754864, -0.0021077821012, -0.0025352140078, -0.0027192607004, -0.0026599221790, -0.0024579766537, -0.0022443579767, -0.0022145914397, -0.0022680933852, -0.0022324902724, -0.0022501945525, -0.0024640077821, -0.0027490272374, -0.0029924124514, -0.0032951361868, -0.0037346303502, -0.0041027237354, -0.0039898832685, -0.0033544747082, -0.0026599221790, -0.0023451361868, -0.0025173151751, -0.0030933852140, -0.0037464980545, -0.0039482490272, -0.0034733463035, -0.0026599221790, -0.0019593385214, -0.0015258754864, -0.0014486381323, -0.0018346303502, -0.0025649805447, -0.0032239299611, -0.0033070038911, -0.0026657587549, -0.0016031128405, -0.0007184824903, -0.0005225680934, -0.0010628404669, -0.0021433852140, -0.0034317120623, -0.0043756809339, -0.0045599221790, -0.0040908560311, -0.0034673151751, -0.0031171206226, -0.0030992217899, -0.0032418287938, -0.0034910505837, -0.0037879377432, -0.0039898832685, -0.0041322957198, -0.0044352140078, -0.0048270428016, -0.0050764591440, -0.0050466926070, -0.0047081712062, -0.0041383268482, -0.0035801556420, -0.0031822957198, -0.0028914396887, -0.0026955252918, -0.0025887159533, -0.0024758754864, -0.0023392996109, -0.0022443579767, -0.0023095330739, -0.0025470817121, -0.0028260700389, -0.0029568093385, -0.0029389105058, -0.0028202334630, -0.0026538910506, -0.0025531128405, -0.0026243190661, -0.0028795719844, -0.0032180933852, -0.0034435797665, -0.0034079766537, -0.0031941634241, -0.0030042801556, -0.0029924124514, -0.0031466926070, -0.0034140077821, -0.0037346303502, -0.0039542801556, -0.0039424124514, -0.0037048638132, -0.0033961089494, -0.0031171206226, -0.0027667315175, -0.0022443579767, -0.0016208171206, -0.0010330739300, -0.0006470817121, -0.0005581712062, -0.0007184824903, -0.0010628404669, -0.0015793774319, -0.0019889105058, -0.0019533073930, -0.0015258754864, -0.0009083657588, -0.0002196498054, +0.0003145914397, +0.0005521400778, +0.0003859922179, -0.0002138132296, -0.0010924124514, -0.0019058365759, -0.0023451361868, -0.0023392996109, -0.0019295719844, -0.0012645914397, -0.0005996108949, -0.0002138132296, -0.0001305447471, -0.0002019455253, -0.0003324902724, -0.0004334630350, -0.0003741245136, -0.0001900778210, -0.0000178988327, +0.0000237354086, -0.0000535019455, -0.0001186770428, -0.0001128404669, +0.0000000000000, +0.0002552529183, +0.0006352140078, +0.0010093385214, +0.0011754863813, +0.0009618677043, +0.0004571984436, -0.0001484435798, -0.0007955252918, -0.0013357976654, -0.0014902723735, -0.0011815175097, -0.0005937743191, +0.0000356031128, +0.0004392996109, +0.0004274319066, +0.0000356031128, -0.0004334630350, -0.0007066147860, -0.0007480544747, -0.0007243190661, -0.0007955252918, -0.0009439688716, -0.0011459143969, -0.0013774319066, -0.0014784046693, -0.0012350194553, -0.0007124513619, -0.0001424124514, +0.0003206225681, +0.0005758754864, +0.0005877431907, +0.0004334630350, +0.0002433852140, +0.0002552529183, +0.0005640077821, +0.0009143968872, +0.0011696498054, +0.0013597276265, +0.0014486381323, +0.0013357976654, +0.0010330739300, +0.0007778210117, +0.0007243190661, +0.0009143968872, +0.0012289883268, +0.0014309338521, +0.0014249027237, +0.0013180933852, +0.0011398832685, +0.0008727626459, +0.0006412451362, +0.0005700389105, +0.0006352140078, +0.0006056420233, +0.0004511673152, +0.0004155642023, +0.0005640077821, +0.0006947470817, +0.0007361867704, +0.0007480544747, +0.0006293774319, +0.0003324902724, +0.0000178988327, -0.0001782101167, -0.0001900778210, -0.0000297665370, +0.0001840466926, +0.0004334630350, +0.0006947470817, +0.0008846303502, +0.0008550583658, +0.0005640077821, +0.0000891050584, -0.0003978599222, -0.0007896887160, -0.0009381322957, -0.0006768482490, -0.0000474708171, +0.0005877431907, +0.0008608949416, +0.0007243190661, +0.0003622568093, -0.0001424124514, -0.0007005836576, -0.0009914396887, -0.0007599221790, -0.0001424124514, +0.0005284046693, +0.0010330739300, +0.0013180933852, +0.0013536964981, +0.0011280155642, +0.0008192607004, +0.0006947470817, +0.0007955252918, +0.0009381322957, +0.0009856031128, +0.0008906614786, +0.0006056420233, +0.0002256809339, +0.0000356031128, +0.0001721789883, +0.0004809338521, +0.0006708171206, +0.0006233463035, +0.0004274319066, +0.0002375486381, +0.0001247081712, +0.0000891050584, +0.0001186770428, +0.0001186770428, +0.0000593385214, +0.0000712062257, +0.0002612840467, +0.0006589494163, +0.0011280155642, +0.0014486381323, +0.0015079766537, +0.0012943579767, +0.0008846303502, +0.0004928015564, +0.0003978599222, +0.0007778210117, +0.0014902723735, +0.0021373540856, +0.0023809338521, +0.0020780155642, +0.0014071984436, +0.0007540856031, +0.0004453307393, +0.0005700389105, +0.0009321011673, +0.0012171206226, +0.0011459143969, +0.0007303501946, +0.0002138132296, -0.0001365758755, -0.0002315175097, -0.0000593385214, +0.0002552529183, +0.0004986381323, +0.0004928015564, +0.0003027237354, +0.0001186770428, +0.0000474708171, +0.0001424124514, +0.0003503891051, +0.0005463035019, +0.0006887159533, +0.0007955252918, +0.0008727626459, +0.0009262645914, +0.0009558365759, +0.0010330739300, +0.0011875486381, +0.0013418287938, +0.0013774319066, +0.0012527237354, +0.0009856031128, +0.0006589494163, +0.0004749027237, +0.0005877431907, +0.0009677042802, +0.0014486381323, +0.0019712062257, +0.0024579766537, +0.0027785992218, +0.0028142023346, +0.0025768482490, +0.0022027237354, +0.0018404669261, +0.0016149805447, +0.0015258754864, +0.0015198443580, +0.0015675097276, +0.0015852140078, +0.0014784046693, +0.0012468871595, +0.0009143968872, +0.0005640077821, +0.0002671206226, +0.0001247081712, +0.0002196498054, +0.0004928015564, +0.0008192607004, +0.0010865758755, +0.0012527237354, +0.0012527237354, +0.0011280155642, +0.0010033073930, +0.0009618677043, +0.0009914396887, +0.0010153696498, +0.0009974708171, +0.0008429961089, +0.0005463035019, +0.0002552529183, +0.0001068093385, +0.0001603112840, +0.0004155642023, +0.0007778210117, +0.0011042801556, +0.0013239299611, +0.0013953307393, +0.0013001945525, +0.0010924124514, +0.0008550583658, +0.0006293774319, +0.0004986381323, +0.0004334630350, +0.0003087548638, +0.0000593385214, -0.0002494163424, -0.0004867704280, -0.0004867704280, -0.0001959143969, +0.0002494163424, +0.0006828793774, +0.0010272373541, +0.0012052529183, +0.0011517509728, +0.0009143968872, +0.0005996108949, +0.0002968871595, +0.0001365758755, +0.0001959143969, +0.0004215953307, +0.0006470817121, +0.0007717898833, +0.0007896887160, +0.0007361867704, +0.0006470817121, +0.0005937743191, +0.0005700389105, +0.0005344357977, +0.0004809338521, +0.0004334630350, +0.0003562256809, +0.0003145914397, +0.0003562256809, +0.0004155642023, +0.0003918287938, +0.0003264591440, +0.0002850194553, +0.0002850194553, +0.0002850194553, +0.0002196498054, +0.0000712062257, -0.0000830739300, -0.0001900778210, -0.0002256809339, -0.0001959143969, -0.0001305447471, -0.0000416342412, +0.0000891050584, +0.0002552529183, +0.0003443579767, +0.0002850194553, +0.0000830739300, -0.0001424124514, -0.0002789883268, -0.0002850194553, -0.0002256809339, -0.0001128404669, -0.0000060311284, +0.0000237354086, +0.0000000000000, -0.0000712062257, -0.0001782101167, -0.0002375486381, -0.0002968871595, -0.0004867704280, -0.0007599221790, -0.0009321011673, -0.0008964980545, -0.0006470817121, -0.0002789883268, +0.0000000000000, +0.0000000000000, -0.0002612840467, -0.0006887159533, -0.0010984435798, -0.0013418287938, -0.0013299610895, -0.0011103112840, -0.0008015564202, -0.0005402723735, -0.0003918287938, -0.0003145914397, -0.0002908560311, -0.0002494163424, -0.0001305447471, +0.0000000000000, +0.0000000000000, -0.0001247081712, -0.0002731517510, -0.0003264591440, -0.0002494163424, -0.0000178988327, +0.0002315175097, +0.0003264591440, +0.0002196498054, -0.0000416342412, -0.0003918287938, -0.0007361867704, -0.0009262645914, -0.0009143968872, -0.0008134241245, -0.0007422178988, -0.0007361867704, -0.0008134241245, -0.0008550583658, -0.0007659533074, -0.0005996108949, -0.0004215953307, -0.0003324902724, -0.0004036964981, -0.0006056420233, -0.0008073929961, -0.0009677042802, -0.0010449416342, -0.0009856031128, -0.0008429961089, -0.0007243190661, -0.0006828793774, -0.0007778210117, -0.0009025291829, -0.0008727626459, -0.0006649805447, -0.0003918287938, -0.0002138132296, -0.0002375486381, -0.0004334630350, -0.0006887159533, -0.0009262645914, -0.0010984435798, -0.0011815175097, -0.0010865758755, -0.0007778210117, -0.0003680933852, -0.0000297665370, +0.0001009727626, -0.0000118677043, -0.0003027237354, -0.0005344357977, -0.0005640077821, -0.0004928015564, -0.0004036964981, -0.0003087548638, -0.0001959143969, +0.0000000000000, +0.0003027237354, +0.0005937743191, +0.0007480544747, +0.0007717898833, +0.0007066147860, +0.0006412451362, +0.0006412451362, +0.0006589494163, +0.0005463035019, +0.0002908560311, +0.0000356031128, -0.0000712062257, -0.0000297665370, +0.0000891050584, +0.0001959143969, +0.0001900778210, +0.0000237354086, -0.0002019455253, -0.0003859922179, -0.0004571984436, -0.0003206225681, -0.0000237354086, +0.0002612840467, +0.0004392996109, +0.0004928015564, +0.0004392996109, +0.0003027237354, +0.0001365758755, +0.0000237354086, -0.0000297665370, -0.0001186770428, -0.0002433852140, -0.0002731517510, -0.0001900778210, -0.0001068093385, -0.0000891050584, -0.0000712062257, +0.0000593385214, +0.0003264591440, +0.0005877431907, +0.0006470817121, +0.0004392996109, +0.0000416342412, -0.0004036964981, -0.0007778210117, -0.0009677042802, -0.0009677042802, -0.0008015564202, -0.0005581712062, -0.0004274319066, -0.0005225680934, -0.0008192607004, -0.0011994163424, -0.0014902723735, -0.0015733463035, -0.0014486381323, -0.0011994163424, -0.0008669260700, -0.0005521400778, -0.0002671206226, +0.0000830739300, +0.0003918287938, +0.0004571984436, +0.0002612840467, -0.0000535019455, -0.0002968871595, -0.0003443579767, -0.0002908560311, -0.0002433852140, -0.0002019455253, -0.0001661478599, -0.0002138132296, -0.0002968871595, -0.0002552529183, -0.0000237354086, +0.0003978599222, +0.0008727626459, +0.0011517509728, +0.0011875486381, +0.0010153696498, +0.0006352140078, +0.0000772373541, -0.0004453307393, -0.0007124513619, -0.0006828793774, -0.0004334630350, +0.0000000000000, +0.0004274319066, +0.0005819066148, +0.0002968871595, -0.0002850194553, -0.0008608949416, -0.0011577821012, -0.0010984435798, -0.0007659533074, -0.0002789883268, +0.0002019455253, +0.0005284046693, +0.0006175097276, +0.0004630350195, +0.0001247081712, -0.0004097276265, -0.0010330739300, -0.0014605058366, -0.0014605058366, -0.0010924124514, -0.0005463035019, +0.0000060311284, +0.0004630350195, +0.0007243190661, +0.0007422178988, +0.0005521400778, +0.0002494163424, -0.0000297665370, -0.0002138132296, -0.0003385214008, -0.0004453307393, -0.0004986381323, -0.0005225680934, -0.0005107003891, -0.0004036964981, -0.0001603112840, +0.0001603112840, +0.0003918287938, +0.0003027237354, -0.0001128404669, -0.0006175097276, -0.0009381322957, -0.0009439688716, -0.0006114785992, -0.0000237354086, +0.0006352140078, +0.0010984435798, +0.0012052529183, +0.0010449416342, +0.0008192607004, +0.0007066147860, +0.0007124513619, +0.0005819066148, +0.0001068093385, -0.0006828793774, -0.0015198443580, -0.0019949416342, -0.0018821011673, -0.0013062256809, -0.0004749027237, +0.0003206225681, +0.0008311284047, +0.0009500000000, +0.0007717898833, +0.0004867704280, +0.0002552529183, +0.0001068093385, +0.0000772373541, +0.0002494163424, +0.0006056420233, +0.0009618677043, +0.0011042801556, +0.0009618677043, +0.0006233463035, +0.0002552529183, -0.0000535019455, -0.0003562256809, -0.0006887159533, -0.0009677042802, -0.0010805447471, -0.0010330739300, -0.0008608949416, -0.0005107003891, -0.0000297665370, +0.0004571984436, +0.0008252918288, +0.0009262645914, +0.0007836575875, +0.0006233463035, +0.0006175097276, +0.0007124513619, +0.0007066147860, +0.0004986381323, +0.0000891050584, -0.0004334630350, -0.0008192607004, -0.0008311284047, -0.0004274319066, +0.0002375486381, +0.0008371595331, +0.0011280155642, +0.0011517509728, +0.0009914396887, +0.0006589494163, +0.0001900778210, -0.0003264591440, -0.0007955252918, -0.0012171206226, -0.0015556420233, -0.0016505836576, -0.0014071984436, -0.0008964980545, -0.0001603112840, +0.0008073929961, +0.0019770428016, +0.0032060311284, +0.0042688715953, +0.0049161478599, +0.0048151750973, +0.0038116731518, +0.0021789883268, +0.0005107003891, -0.0008015564202, -0.0016564202335, -0.0019712062257, -0.0018346303502, -0.0015140077821, -0.0011161478599, -0.0006531128405, -0.0002375486381, +0.0000830739300, +0.0003799610895, +0.0006887159533, +0.0009618677043, +0.0011340466926, +0.0011815175097, +0.0010509727626, +0.0006828793774, +0.0001900778210, -0.0001068093385, +0.0001186770428, +0.0007717898833, +0.0012824902724, +0.0012527237354, +0.0007480544747, +0.0000118677043, -0.0007480544747, -0.0014011673152, -0.0018108949416, -0.0019414396887, -0.0018464980545, -0.0015319066148, -0.0010212062257, -0.0004274319066, +0.0000772373541, +0.0004690661479, +0.0007422178988, +0.0008608949416, +0.0008015564202, +0.0004274319066, -0.0002850194553, -0.0011221789883, -0.0017515564202, -0.0019533073930, -0.0016149805447, -0.0008964980545, -0.0001247081712, +0.0004334630350, +0.0006352140078, +0.0005165369650, +0.0003087548638, +0.0002731517510, +0.0005165369650, +0.0008964980545, +0.0012408560311, +0.0013655642023, +0.0010747081712, +0.0003385214008, -0.0006114785992, -0.0014665369650, -0.0020365758755, -0.0022145914397, -0.0019889105058, -0.0014546692607, -0.0007243190661, +0.0000712062257, +0.0007659533074, +0.0011815175097, +0.0012171206226, +0.0009795719844, +0.0006947470817, +0.0004867704280, +0.0003859922179, +0.0004215953307, +0.0005996108949, +0.0008550583658, +0.0010686770428, +0.0011280155642, +0.0009500000000, +0.0005996108949, +0.0002138132296, -0.0000297665370, -0.0000416342412, +0.0000178988327, -0.0000356031128, -0.0001840466926, -0.0002375486381, -0.0000060311284, +0.0005640077821, +0.0013180933852, +0.0019058365759, +0.0020186770428, +0.0016268482490, +0.0010033073930, +0.0004215953307, +0.0001009727626, +0.0002077821012, +0.0006470817121, +0.0010924124514, +0.0012231517510, +0.0008669260700, +0.0001782101167, -0.0004630350195, -0.0007896887160, -0.0007422178988, -0.0003799610895, +0.0001959143969, +0.0007659533074, +0.0009974708171, +0.0007659533074, +0.0002196498054, -0.0003443579767, -0.0008015564202, -0.0011398832685, -0.0012943579767, -0.0012408560311, -0.0010449416342, -0.0007717898833, -0.0005225680934, -0.0003087548638, +0.0000060311284, +0.0004334630350, +0.0008429961089, +0.0011696498054, +0.0013239299611, +0.0012171206226, +0.0008608949416, +0.0003622568093, -0.0000653696498, -0.0002789883268, -0.0003859922179, -0.0005344357977, -0.0007599221790, -0.0010212062257, -0.0012645914397, -0.0013953307393, -0.0013834630350, -0.0013299610895, -0.0012764591440, -0.0011696498054, -0.0010033073930, -0.0008311284047, -0.0007480544747, -0.0007303501946, -0.0006293774319, -0.0004097276265, -0.0001484435798, +0.0000830739300, +0.0002552529183, +0.0003324902724, +0.0002671206226, +0.0000653696498, -0.0001424124514, -0.0002552529183, -0.0002433852140, -0.0001128404669, +0.0000891050584, +0.0003264591440, +0.0005107003891, +0.0005344357977, +0.0003324902724, +0.0000118677043, -0.0002433852140, -0.0003799610895, -0.0004215953307, -0.0003503891051, -0.0001186770428, +0.0002494163424, +0.0006412451362, +0.0008846303502, +0.0008550583658, +0.0005521400778, +0.0001365758755, -0.0002196498054, -0.0004215953307, -0.0004453307393, -0.0002850194553, +0.0000535019455, +0.0005284046693, +0.0009262645914, +0.0010391050584, +0.0007836575875, +0.0002552529183, -0.0002968871595, -0.0006233463035, -0.0006114785992, -0.0003799610895, -0.0001186770428, +0.0000356031128, +0.0000178988327, -0.0001186770428, -0.0003443579767, -0.0006293774319, -0.0008550583658, -0.0008964980545, -0.0007124513619, -0.0003264591440, +0.0000830739300, +0.0003680933852, +0.0004749027237, +0.0003978599222, +0.0001959143969, +0.0000416342412, +0.0000772373541, +0.0003264591440, +0.0006768482490, +0.0009321011673, +0.0009618677043, +0.0007361867704, +0.0002671206226, -0.0002968871595, -0.0008073929961, -0.0011577821012, -0.0013239299611, -0.0013001945525, -0.0011280155642, -0.0007836575875, -0.0002671206226, +0.0003385214008, +0.0008846303502, +0.0011517509728, +0.0010391050584, +0.0006293774319, +0.0000178988327, -0.0006768482490, -0.0012706225681, -0.0015793774319, -0.0014784046693, -0.0009677042802, -0.0002968871595, +0.0002019455253, +0.0004453307393, +0.0004155642023, +0.0001247081712, -0.0002850194553, -0.0006768482490, -0.0009202334630, -0.0009025291829, -0.0006649805447, -0.0003741245136, -0.0001186770428, +0.0000653696498, +0.0001603112840, +0.0000772373541, -0.0001661478599, -0.0004036964981, -0.0005046692607, -0.0005463035019, -0.0005996108949, -0.0005700389105, -0.0004334630350, -0.0002789883268, -0.0002315175097, -0.0003087548638, -0.0003918287938, -0.0004036964981, -0.0004334630350, -0.0005463035019, -0.0006589494163, -0.0007303501946, -0.0007778210117, -0.0007480544747, -0.0005877431907, -0.0003680933852, -0.0002138132296, -0.0001305447471, -0.0001365758755, -0.0002494163424, -0.0004690661479, -0.0007066147860, -0.0008964980545, -0.0009795719844, -0.0009025291829, -0.0006352140078, -0.0002315175097, +0.0001782101167, +0.0004749027237, +0.0005521400778, +0.0004215953307, +0.0001603112840, -0.0001365758755, -0.0003859922179, -0.0004749027237, -0.0004215953307, -0.0002731517510, -0.0000712062257, +0.0001365758755, +0.0003264591440, +0.0004749027237, +0.0005581712062, +0.0005402723735, +0.0003859922179, +0.0000891050584, -0.0002196498054, -0.0004867704280, -0.0006352140078, -0.0005819066148, -0.0002850194553, +0.0001128404669, +0.0004630350195, +0.0007422178988, +0.0008846303502, +0.0008192607004, +0.0006412451362, +0.0004392996109, +0.0002908560311, +0.0002375486381, +0.0002375486381, +0.0002315175097, +0.0002196498054, +0.0001900778210, +0.0001247081712, +0.0000891050584, +0.0001247081712, +0.0001959143969, +0.0002671206226, +0.0002968871595, +0.0001959143969, +0.0000000000000, -0.0002375486381, -0.0004334630350, -0.0004215953307, -0.0002019455253, +0.0000000000000, +0.0000891050584, +0.0001365758755, +0.0001424124514, +0.0000830739300, -0.0000593385214, -0.0002196498054, -0.0002612840467, -0.0001782101167, -0.0000474708171, +0.0000653696498, +0.0001603112840, +0.0002789883268, +0.0005107003891, +0.0008192607004, +0.0011577821012, +0.0014367704280, +0.0015496108949, +0.0014309338521, +0.0011696498054, +0.0008906614786, +0.0006531128405, +0.0004511673152, +0.0002789883268, +0.0001661478599, +0.0001484435798, +0.0001542801556, +0.0001484435798, +0.0001782101167, +0.0002612840467, +0.0003859922179, +0.0005284046693, +0.0005996108949, +0.0004690661479, +0.0001603112840, -0.0001424124514, -0.0003027237354, -0.0002671206226, -0.0000891050584, +0.0001424124514, +0.0003741245136, +0.0005225680934, +0.0005521400778, +0.0005463035019, +0.0005284046693, +0.0004274319066, +0.0002731517510, +0.0001247081712, -0.0000060311284, -0.0000830739300, -0.0000772373541, -0.0000237354086, +0.0001009727626, +0.0004036964981, +0.0008252918288, +0.0011042801556, +0.0010984435798, +0.0008429961089, +0.0004630350195, +0.0001247081712, -0.0000772373541, -0.0001186770428, -0.0000712062257, -0.0000297665370, -0.0000178988327, -0.0000356031128, -0.0000772373541, -0.0001305447471, -0.0001840466926, -0.0002671206226, -0.0004097276265, -0.0005344357977, -0.0005937743191, -0.0006352140078, -0.0006828793774, -0.0007184824903, -0.0006828793774, -0.0005225680934, -0.0002494163424, +0.0000060311284, +0.0002019455253, +0.0003324902724, +0.0003264591440, +0.0001424124514, -0.0001782101167, -0.0005700389105, -0.0008311284047, -0.0008371595331, -0.0006233463035, -0.0003145914397, -0.0000178988327, +0.0001661478599, +0.0001840466926, +0.0000118677043, -0.0002494163424, -0.0004809338521, -0.0006175097276, -0.0006056420233, -0.0004215953307, -0.0001900778210, -0.0000416342412, -0.0000653696498, -0.0002850194553, -0.0005758754864, -0.0007243190661, -0.0006768482490, -0.0005344357977, -0.0003443579767, -0.0001186770428, +0.0000830739300, +0.0001900778210, +0.0001782101167, +0.0000712062257, -0.0000416342412, -0.0001247081712, -0.0001424124514, -0.0000949416342, -0.0000237354086, +0.0000237354086, +0.0000891050584, +0.0001484435798, +0.0001782101167, +0.0001840466926, +0.0001542801556, +0.0001009727626, +0.0000356031128, -0.0000593385214, -0.0001840466926, -0.0002433852140, -0.0002256809339, -0.0000830739300, +0.0002433852140, +0.0006233463035, +0.0008311284047, +0.0008311284047, +0.0006708171206, +0.0004334630350, +0.0002375486381, +0.0001365758755, +0.0001542801556, +0.0002671206226, +0.0003622568093, +0.0003443579767, +0.0002256809339, +0.0000237354086, -0.0001959143969, -0.0003799610895, -0.0004571984436, -0.0004036964981, -0.0002494163424, -0.0001128404669, -0.0000593385214, -0.0000772373541, -0.0001484435798, -0.0002552529183, -0.0003206225681, -0.0002789883268, -0.0001840466926, -0.0000535019455, +0.0001128404669, +0.0002494163424, +0.0003206225681, +0.0003443579767, +0.0003145914397, +0.0002552529183, +0.0001900778210, +0.0001186770428, +0.0000593385214, +0.0000772373541, +0.0001661478599, +0.0002612840467, +0.0003385214008, +0.0003385214008, +0.0002433852140, +0.0001603112840, +0.0002256809339, +0.0004511673152, +0.0007243190661, +0.0008846303502, +0.0008134241245, +0.0005344357977, +0.0001959143969, -0.0000653696498, -0.0001186770428, +0.0000356031128, +0.0002552529183, +0.0003978599222, +0.0004215953307, +0.0003680933852, +0.0002433852140, +0.0000891050584, -0.0000653696498, -0.0001840466926, -0.0002138132296, -0.0001721789883, -0.0001128404669, -0.0001128404669, -0.0001603112840, -0.0002433852140, -0.0003503891051, -0.0004155642023, -0.0003145914397, -0.0000356031128, +0.0003206225681, +0.0005937743191, +0.0006708171206, +0.0005284046693, +0.0002077821012, -0.0001068093385, -0.0002671206226, -0.0002196498054, -0.0000178988327, +0.0002256809339, +0.0003978599222, +0.0004392996109, +0.0003918287938, +0.0002494163424, +0.0000000000000, -0.0002908560311, -0.0005225680934, -0.0005937743191, -0.0004867704280, -0.0002612840467, -0.0000535019455, +0.0001186770428, +0.0002552529183, +0.0003145914397, +0.0003324902724, +0.0003443579767, +0.0002850194553, +0.0001661478599, +0.0000891050584, +0.0000830739300, +0.0001068093385, +0.0001305447471, +0.0001542801556, +0.0001782101167, +0.0002612840467, +0.0004215953307, +0.0006293774319, +0.0008134241245, +0.0009381322957, +0.0009618677043, +0.0008134241245, +0.0004809338521, +0.0000356031128, -0.0003799610895, -0.0006649805447, -0.0006947470817, -0.0004392996109, -0.0000535019455, +0.0002375486381, +0.0003622568093, +0.0003443579767, +0.0001721789883, -0.0001186770428, -0.0004274319066, -0.0005758754864, -0.0004690661479, -0.0001721789883, +0.0001128404669, +0.0002138132296, +0.0001128404669, -0.0001305447471, -0.0004453307393, -0.0007124513619, -0.0007896887160, -0.0006589494163, -0.0003799610895, -0.0000712062257, +0.0001484435798, +0.0002077821012, +0.0000535019455, -0.0002375486381, -0.0005402723735, -0.0007422178988, -0.0008311284047, -0.0008015564202, -0.0006589494163, -0.0004453307393, -0.0002196498054, -0.0000237354086, +0.0000830739300, +0.0000474708171, -0.0000891050584, -0.0002552529183, -0.0003978599222, -0.0004809338521, -0.0004392996109, -0.0003206225681, -0.0002196498054, -0.0001959143969, -0.0002968871595, -0.0004928015564, -0.0007243190661, -0.0008846303502, -0.0008669260700, -0.0006887159533, -0.0004453307393, -0.0002019455253, -0.0000593385214, -0.0000772373541, -0.0001959143969, -0.0003027237354, -0.0003918287938, -0.0004453307393, -0.0004511673152, -0.0004392996109, -0.0004392996109, -0.0004334630350, -0.0004036964981, -0.0003324902724, -0.0002138132296, -0.0000118677043, +0.0002612840467, +0.0005046692607, +0.0005640077821, +0.0004453307393, +0.0002256809339, -0.0000297665370, -0.0002494163424, -0.0003443579767, -0.0003145914397, -0.0002138132296, -0.0001128404669, -0.0000474708171, -0.0000474708171, -0.0000593385214, -0.0000118677043, +0.0001009727626, +0.0002494163424, +0.0004097276265, +0.0005463035019, +0.0005877431907, +0.0004809338521, +0.0002494163424, -0.0000297665370, -0.0002375486381, -0.0003264591440, -0.0003385214008, -0.0003087548638, -0.0002612840467, -0.0002256809339, -0.0002315175097, -0.0002671206226, -0.0002671206226, -0.0001840466926, -0.0000593385214, +0.0000297665370, +0.0000535019455, -0.0000356031128, -0.0002375486381, -0.0004215953307, -0.0005046692607, -0.0004749027237, -0.0003622568093, -0.0002433852140, -0.0002196498054, -0.0002789883268, -0.0003443579767, -0.0003324902724, -0.0001900778210, +0.0000830739300, +0.0004097276265, +0.0006708171206, +0.0007778210117, +0.0006708171206, +0.0003680933852, +0.0000237354086, -0.0001721789883, -0.0001484435798, +0.0000593385214, +0.0003562256809, +0.0006175097276, +0.0007717898833, +0.0008311284047, +0.0008192607004, +0.0007124513619, +0.0005284046693, +0.0003503891051, +0.0002494163424, +0.0001959143969, +0.0001542801556, +0.0001365758755, +0.0001603112840, +0.0002019455253, +0.0002375486381, +0.0002789883268, +0.0003264591440, +0.0003206225681, +0.0002196498054, +0.0000356031128, -0.0001661478599, -0.0002908560311, -0.0003145914397, -0.0002789883268, -0.0002077821012, -0.0001186770428, -0.0000593385214, -0.0000772373541, -0.0001305447471, -0.0001542801556, -0.0001542801556, -0.0001721789883, -0.0001959143969, -0.0002138132296, -0.0002612840467, -0.0003324902724, -0.0003918287938, -0.0003680933852, -0.0002494163424, -0.0000949416342, +0.0000297665370, +0.0001305447471, +0.0001900778210, +0.0001721789883, +0.0000949416342, +0.0000118677043, -0.0000297665370, +0.0000000000000, +0.0000772373541, +0.0001484435798, +0.0002375486381, +0.0003918287938, +0.0005402723735, +0.0005819066148, +0.0005046692607, +0.0003680933852, +0.0002375486381, +0.0001128404669, +0.0000178988327, -0.0000178988327, +0.0000237354086, +0.0001305447471, +0.0002612840467, +0.0003562256809, +0.0004036964981, +0.0003680933852, +0.0002375486381, +0.0001068093385, +0.0000356031128, +0.0000474708171, +0.0001247081712, +0.0002433852140, +0.0003087548638, +0.0002908560311, +0.0002019455253, +0.0000593385214, -0.0000712062257, -0.0001424124514, -0.0001186770428, -0.0000416342412, +0.0000653696498, +0.0001603112840, +0.0001721789883, +0.0001247081712, +0.0000712062257, +0.0000060311284, -0.0000772373541, -0.0001603112840, -0.0001840466926, -0.0001782101167, -0.0001424124514, -0.0000535019455, +0.0000949416342, +0.0002494163424, +0.0003264591440, +0.0003324902724, +0.0002908560311, +0.0002077821012, +0.0001247081712, +0.0000712062257, +0.0000653696498, +0.0000891050584, +0.0000593385214, -0.0000356031128, -0.0001661478599, -0.0002433852140, -0.0002552529183, -0.0002138132296, -0.0001186770428, +0.0000000000000, +0.0001128404669, +0.0002315175097, +0.0002908560311, +0.0002908560311, +0.0002433852140, +0.0001603112840, +0.0000474708171, -0.0000535019455, -0.0001186770428, -0.0001484435798, -0.0001365758755, -0.0000830739300, -0.0000356031128, +0.0000000000000, +0.0000237354086, +0.0000891050584, +0.0001603112840, +0.0001900778210, +0.0001603112840, +0.0000772373541, -0.0000356031128, -0.0002019455253, -0.0003859922179, -0.0005225680934, -0.0005284046693, -0.0003622568093, -0.0000891050584, +0.0001424124514, +0.0002494163424, +0.0001840466926, -0.0000297665370, -0.0003027237354, -0.0005107003891, -0.0006175097276, -0.0006293774319, -0.0005165369650, -0.0002671206226, +0.0000416342412, +0.0003324902724, +0.0005521400778, +0.0006233463035, +0.0004809338521, +0.0001959143969, -0.0001365758755, -0.0004274319066, -0.0006233463035, -0.0006828793774, -0.0005996108949, -0.0004097276265, -0.0002375486381, -0.0001959143969, -0.0002433852140, -0.0002552529183, -0.0001721789883, -0.0000118677043, +0.0001782101167, +0.0003622568093, +0.0004749027237, +0.0004392996109, +0.0002850194553, +0.0000830739300, -0.0001247081712, -0.0002494163424, -0.0001959143969, +0.0000060311284, +0.0002731517510, +0.0005107003891, +0.0005877431907, +0.0004630350195, +0.0002315175097, -0.0000237354086, -0.0002433852140, -0.0003680933852, -0.0003680933852, -0.0002433852140, -0.0000712062257, +0.0000356031128, +0.0000653696498, +0.0000060311284, -0.0001128404669, -0.0002552529183, -0.0004036964981, -0.0005284046693, -0.0005937743191, -0.0006293774319, -0.0005937743191, -0.0004511673152, -0.0002433852140, -0.0000535019455, +0.0000772373541, +0.0001661478599, +0.0001959143969, +0.0001424124514, +0.0000356031128, -0.0000653696498, -0.0001603112840, -0.0001900778210, -0.0001186770428, +0.0000000000000, +0.0001365758755, +0.0002375486381, +0.0002494163424, +0.0001365758755, -0.0000416342412, -0.0002494163424, -0.0003859922179, -0.0003741245136, -0.0001661478599, +0.0001603112840, +0.0004571984436, +0.0005877431907, +0.0005165369650, +0.0002789883268, +0.0000178988327, -0.0001305447471, -0.0001186770428, +0.0000356031128, +0.0002671206226, +0.0004334630350, +0.0004334630350, +0.0002850194553, +0.0000474708171, -0.0002019455253, -0.0003918287938, -0.0004511673152, -0.0003918287938, -0.0002968871595, -0.0001840466926, -0.0000474708171, +0.0001305447471, +0.0003324902724, +0.0004571984436, +0.0004690661479, +0.0003918287938, +0.0002552529183, +0.0000535019455, -0.0002138132296, -0.0004690661479, -0.0005819066148, -0.0005046692607, -0.0002375486381, +0.0001484435798, +0.0004986381323, +0.0006947470817, +0.0007124513619, +0.0005402723735, +0.0001900778210, -0.0002612840467, -0.0007717898833, -0.0012645914397, -0.0015675097276, -0.0014367704280, -0.0007540856031, +0.0003978599222, +0.0016922178988, +0.0026182879377, +0.0027192607004, +0.0018583657588, +0.0003027237354, -0.0013597276265, -0.0024877431907, -0.0026717898833, -0.0019237354086, -0.0006352140078, +0.0006531128405, +0.0015140077821, +0.0016743190661, +0.0011696498054, +0.0002789883268, -0.0006352140078, -0.0013180933852, -0.0016326848249, -0.0015496108949, -0.0011103112840, -0.0003562256809, +0.0005165369650, +0.0011994163424, +0.0014902723735, +0.0013536964981, +0.0008371595331, +0.0001186770428, -0.0005521400778, -0.0009321011673, -0.0009202334630, -0.0005700389105, -0.0000416342412, +0.0004215953307, +0.0006293774319, +0.0005284046693, +0.0002731517510, +0.0000474708171, -0.0000535019455, -0.0000712062257, -0.0000356031128, -0.0000118677043, -0.0000237354086, -0.0000712062257, -0.0001009727626, -0.0000474708171, +0.0001186770428, +0.0003859922179, +0.0006470817121, +0.0007480544747, +0.0006233463035, +0.0003680933852, +0.0001128404669, -0.0000653696498, -0.0001661478599, -0.0002138132296, -0.0002138132296, -0.0001365758755, -0.0000118677043, +0.0000593385214, +0.0000178988327, -0.0000949416342, -0.0001365758755, +0.0000060311284, +0.0003324902724, +0.0007303501946, +0.0010153696498, +0.0009677042802, +0.0005640077821, +0.0000297665370, -0.0003918287938, -0.0005402723735, -0.0003799610895, +0.0000000000000, +0.0004453307393, +0.0008134241245, +0.0009381322957, +0.0007659533074, +0.0004155642023, +0.0000653696498, -0.0001542801556, -0.0002196498054, -0.0001721789883, -0.0001128404669, -0.0000772373541, -0.0000416342412, +0.0000118677043, +0.0000891050584, +0.0001840466926, +0.0002315175097, +0.0002138132296, +0.0001484435798, +0.0000535019455, -0.0000535019455, -0.0001128404669, -0.0000891050584, +0.0000118677043, +0.0001782101167, +0.0003562256809, +0.0004690661479, +0.0004392996109, +0.0002552529183, +0.0000297665370, -0.0001424124514, -0.0002196498054, -0.0002256809339, -0.0001661478599, -0.0000535019455, +0.0001068093385, +0.0003443579767, +0.0006114785992, +0.0008015564202, +0.0008429961089, +0.0006947470817, +0.0003859922179, +0.0000356031128, -0.0002256809339, -0.0003087548638, -0.0002256809339, -0.0000772373541, +0.0000297665370, +0.0000830739300, +0.0001009727626, +0.0000772373541, +0.0000237354086, +0.0000000000000, +0.0000830739300, +0.0002315175097, +0.0003443579767, +0.0003978599222, +0.0003918287938, +0.0002789883268, +0.0000593385214, -0.0001305447471, -0.0001424124514, +0.0000356031128, +0.0002850194553, +0.0004809338521, +0.0005402723735, +0.0003741245136, +0.0000060311284, -0.0004215953307, -0.0007659533074, -0.0008371595331, -0.0005284046693, +0.0000593385214, +0.0007243190661, +0.0011815175097, +0.0012350194553, +0.0009381322957, +0.0004867704280, +0.0000356031128, -0.0003206225681, -0.0005344357977, -0.0006114785992, -0.0005344357977, -0.0003324902724, -0.0001186770428, +0.0000297665370, +0.0001661478599, +0.0002731517510, +0.0002850194553, +0.0002375486381, +0.0001900778210, +0.0001186770428, +0.0000000000000, -0.0001186770428, -0.0002256809339, -0.0003324902724, -0.0004690661479, -0.0005937743191, -0.0006056420233, -0.0004928015564, -0.0002494163424, +0.0000593385214, +0.0003027237354, +0.0003503891051, +0.0001959143969, -0.0000772373541, -0.0003680933852, -0.0005521400778, -0.0005640077821, -0.0003918287938, -0.0000830739300, +0.0002315175097, +0.0004274319066, +0.0004749027237, +0.0004334630350, +0.0003680933852, +0.0002908560311, +0.0002494163424, +0.0002731517510, +0.0002671206226, +0.0001840466926, +0.0001009727626, +0.0000772373541, +0.0000949416342, +0.0001128404669, +0.0001186770428, +0.0001484435798, +0.0002375486381, +0.0003562256809, +0.0004511673152, +0.0004690661479, +0.0003503891051, +0.0000891050584, -0.0002789883268, -0.0007480544747, -0.0011517509728, -0.0013001945525, -0.0011636186770, -0.0008490272374, -0.0005107003891, -0.0002671206226, -0.0001782101167, -0.0002433852140, -0.0004155642023, -0.0006175097276, -0.0007717898833, -0.0008429961089, -0.0008490272374, -0.0007955252918, -0.0006768482490, -0.0004928015564, -0.0002908560311, -0.0001365758755, -0.0000297665370, +0.0000653696498, +0.0001424124514, +0.0001603112840, +0.0001247081712, +0.0000535019455, -0.0000593385214, -0.0002196498054, -0.0003859922179, -0.0004749027237, -0.0004453307393, -0.0002789883268, +0.0000000000000, +0.0003324902724, +0.0005700389105, +0.0006412451362, +0.0006114785992, +0.0005107003891, +0.0004215953307, +0.0003859922179, +0.0003562256809, +0.0002789883268, +0.0001721789883, +0.0000712062257, +0.0000118677043, -0.0000178988327, -0.0000535019455, -0.0000830739300, -0.0000653696498, +0.0000118677043, +0.0000712062257, +0.0000178988327, -0.0001661478599, -0.0003859922179, -0.0005463035019, -0.0006056420233, -0.0005107003891, -0.0002375486381, +0.0001068093385, +0.0003622568093, +0.0004392996109, +0.0003741245136, +0.0003027237354, +0.0003087548638, +0.0003622568093, +0.0003859922179, +0.0003503891051, +0.0002789883268, +0.0001247081712, -0.0001247081712, -0.0003741245136, -0.0005046692607, -0.0004630350195, -0.0003027237354, -0.0001186770428, +0.0000474708171, +0.0002196498054, +0.0003918287938, +0.0005402723735, +0.0006470817121, +0.0006708171206, +0.0005758754864, +0.0003859922179, +0.0001542801556, -0.0000712062257, -0.0002789883268, -0.0003859922179, -0.0003385214008, -0.0001721789883, -0.0000060311284, +0.0000653696498, +0.0000178988327, -0.0001009727626, -0.0002315175097, -0.0002433852140, -0.0001305447471, +0.0000178988327, +0.0001424124514, +0.0001900778210, +0.0001484435798, +0.0000237354086, -0.0001247081712, -0.0002433852140, -0.0002968871595, -0.0002968871595, -0.0002433852140, -0.0001603112840, -0.0001128404669, -0.0001247081712, -0.0001721789883, -0.0002196498054, -0.0002552529183, -0.0002731517510, -0.0002552529183, -0.0001959143969, -0.0001068093385, -0.0000356031128, -0.0000178988327, -0.0000237354086, -0.0000535019455, -0.0000949416342, -0.0001542801556, -0.0002256809339, -0.0003264591440, -0.0004392996109, -0.0005344357977, -0.0005758754864, -0.0005640077821, -0.0004809338521, -0.0003324902724, -0.0001603112840, +0.0000000000000, +0.0001542801556, +0.0002850194553, +0.0003799610895, +0.0003918287938, +0.0003027237354, +0.0001840466926, +0.0001186770428, +0.0001186770428, +0.0001068093385, +0.0000416342412, -0.0000416342412, -0.0001128404669, -0.0001424124514, -0.0000949416342, +0.0000118677043, +0.0001247081712, +0.0001484435798, +0.0000297665370, -0.0001424124514, -0.0003027237354, -0.0003741245136, -0.0003145914397, -0.0001365758755, +0.0000237354086, +0.0000593385214, -0.0000653696498, -0.0003443579767, -0.0006649805447, -0.0009143968872, -0.0009914396887, -0.0009025291829, -0.0007066147860, -0.0004749027237, -0.0002494163424, -0.0000891050584, -0.0000653696498, -0.0001542801556, -0.0002731517510, -0.0003443579767, -0.0003562256809, -0.0003562256809, -0.0003741245136, -0.0004097276265, -0.0004097276265, -0.0003264591440, -0.0001603112840, +0.0000593385214, +0.0002850194553, +0.0004571984436, +0.0005284046693, +0.0004867704280, +0.0003622568093, +0.0002196498054, +0.0001305447471, +0.0001186770428, +0.0001721789883, +0.0002612840467, +0.0003443579767, +0.0003503891051, +0.0002612840467, +0.0001661478599, +0.0001721789883, +0.0002908560311, +0.0004453307393, +0.0005284046693, +0.0004928015564, +0.0003622568093, +0.0001900778210, +0.0000118677043, -0.0001305447471, -0.0002375486381, -0.0003264591440, -0.0003859922179, -0.0003799610895, -0.0003087548638, -0.0002019455253, -0.0000830739300, +0.0000118677043, +0.0000653696498, +0.0000653696498, +0.0000237354086, -0.0000593385214, -0.0001900778210, -0.0003087548638, -0.0003562256809, -0.0002850194553, -0.0001186770428, +0.0000830739300, +0.0002494163424, +0.0002671206226, +0.0001128404669, -0.0001484435798, -0.0004334630350, -0.0006589494163, -0.0007659533074, -0.0007480544747, -0.0006352140078, -0.0004571984436, -0.0002256809339, +0.0000178988327, +0.0002077821012, +0.0003264591440, +0.0003918287938, +0.0003978599222, +0.0003324902724, +0.0001959143969, +0.0000000000000, -0.0002019455253, -0.0003264591440, -0.0002908560311, -0.0001128404669, +0.0001009727626, +0.0002850194553, +0.0003859922179, +0.0004215953307, +0.0004334630350, +0.0004809338521, +0.0005758754864, +0.0006531128405, +0.0006470817121, +0.0005344357977, +0.0003859922179, +0.0002731517510, +0.0001959143969, +0.0001484435798, +0.0001603112840, +0.0002256809339, +0.0002671206226, +0.0002433852140, +0.0001542801556, +0.0000653696498, +0.0000535019455, +0.0001305447471, +0.0002138132296, +0.0002315175097, +0.0001721789883, +0.0000416342412, -0.0000772373541, -0.0001068093385, -0.0000237354086, +0.0001068093385, +0.0002612840467, +0.0003978599222, +0.0004392996109, +0.0003443579767, +0.0001424124514, -0.0001128404669, -0.0003562256809, -0.0005107003891, -0.0005344357977, -0.0004097276265, -0.0001721789883, +0.0000830739300, +0.0003027237354, +0.0004334630350, +0.0004809338521, +0.0004630350195, +0.0003799610895, +0.0002612840467, +0.0001305447471, +0.0000416342412, -0.0000118677043, -0.0000653696498, -0.0001009727626, -0.0000535019455, +0.0000712062257, +0.0001959143969, +0.0002196498054, +0.0001247081712, -0.0000356031128, -0.0001782101167, -0.0002196498054, -0.0001661478599, -0.0000653696498, +0.0000772373541, +0.0002494163424, +0.0003799610895, +0.0004274319066, +0.0003622568093, +0.0001840466926, -0.0000178988327, -0.0001661478599, -0.0002315175097, -0.0002019455253, -0.0001068093385, +0.0000000000000, +0.0001068093385, +0.0001603112840, +0.0001424124514, +0.0000772373541, +0.0000000000000, -0.0000593385214, -0.0000949416342, -0.0000772373541, +0.0000000000000, +0.0001186770428, +0.0002077821012, +0.0002196498054, +0.0001484435798, +0.0000474708171, -0.0000178988327, -0.0000416342412, -0.0000118677043, +0.0000535019455, +0.0001186770428, +0.0001424124514, +0.0001009727626, +0.0000178988327, -0.0000416342412, -0.0000474708171, +0.0000118677043, +0.0001186770428, +0.0002138132296, +0.0002256809339, +0.0001424124514, +0.0000000000000, -0.0001603112840, -0.0002850194553, -0.0003562256809, -0.0003562256809, -0.0003027237354, -0.0001959143969, -0.0000416342412, +0.0001186770428, +0.0002612840467, +0.0003385214008, +0.0003918287938, +0.0004392996109, +0.0004690661479, +0.0004334630350, +0.0003443579767, +0.0002494163424, +0.0002077821012, +0.0002077821012, +0.0002138132296, +0.0001782101167, +0.0000891050584, -0.0000237354086, -0.0000891050584, -0.0000416342412, +0.0001128404669, +0.0002850194553, +0.0003622568093, +0.0002731517510, +0.0000416342412, -0.0002375486381, -0.0004511673152, -0.0004690661479, -0.0002433852140, +0.0001068093385, +0.0004097276265, +0.0005107003891, +0.0004036964981, +0.0001484435798, -0.0001247081712, -0.0003324902724, -0.0003978599222, -0.0003206225681, -0.0001603112840, -0.0000060311284, +0.0000712062257, +0.0001128404669, +0.0001661478599, +0.0002671206226, +0.0004036964981, +0.0005046692607, +0.0004867704280, +0.0003087548638, +0.0000297665370, -0.0002433852140, -0.0004215953307, -0.0004453307393, -0.0003503891051, -0.0002077821012, -0.0000772373541, +0.0000237354086, +0.0000830739300, +0.0000949416342, +0.0000772373541, +0.0000712062257, +0.0000949416342, +0.0001009727626, +0.0000416342412, -0.0000712062257, -0.0002077821012, -0.0003324902724, -0.0003918287938, -0.0003622568093, -0.0002552529183, -0.0001484435798, -0.0000949416342, -0.0001009727626, -0.0001484435798, -0.0002315175097, -0.0003443579767, -0.0004690661479, -0.0005640077821, -0.0005521400778, -0.0004215953307, -0.0001721789883, +0.0001068093385, +0.0003443579767, +0.0004867704280, +0.0005344357977, +0.0004928015564, +0.0003859922179, +0.0002077821012, +0.0000118677043, -0.0001424124514, -0.0002433852140, -0.0002850194553, -0.0002850194553, -0.0002552529183, -0.0002019455253, -0.0001186770428, -0.0000356031128, +0.0000000000000, -0.0000474708171, -0.0001721789883, -0.0003206225681, -0.0003978599222, -0.0003562256809, -0.0001900778210, +0.0000297665370, +0.0002315175097, +0.0003206225681, +0.0002789883268, +0.0001424124514, -0.0000178988327, -0.0001128404669, -0.0001009727626, +0.0000000000000, +0.0001186770428, +0.0002196498054, +0.0002671206226, +0.0002671206226, +0.0002077821012, +0.0000712062257, -0.0000772373541, -0.0001542801556, -0.0001128404669, +0.0000297665370, +0.0002077821012, +0.0003264591440, +0.0003145914397, +0.0001721789883, -0.0000237354086, -0.0001840466926, -0.0002433852140, -0.0002196498054, -0.0001542801556, -0.0000772373541, -0.0000118677043, +0.0000118677043, +0.0000178988327, +0.0000060311284, +0.0000000000000, +0.0000000000000, -0.0000237354086, -0.0000474708171, -0.0000474708171, -0.0000653696498, -0.0001186770428, -0.0001900778210, -0.0002671206226, -0.0003385214008, -0.0003680933852, -0.0003562256809, -0.0003027237354, -0.0002375486381, -0.0001603112840, -0.0000949416342, -0.0000593385214, -0.0000593385214, -0.0000653696498, -0.0000297665370, +0.0000356031128, +0.0000949416342, +0.0001128404669, +0.0000949416342, +0.0000712062257, +0.0000891050584, +0.0001484435798, +0.0002256809339, +0.0002908560311, +0.0002908560311, +0.0002196498054, +0.0000891050584, -0.0000653696498, -0.0001900778210, -0.0002196498054, -0.0001365758755, +0.0000118677043, +0.0001782101167, +0.0002789883268, +0.0002612840467, +0.0001186770428, -0.0000949416342, -0.0002671206226, -0.0003264591440, -0.0003027237354, -0.0002256809339, -0.0001247081712, -0.0000178988327, +0.0000416342412, +0.0000593385214, +0.0000535019455, +0.0000474708171, +0.0000474708171, +0.0000416342412, +0.0000000000000, -0.0000535019455, -0.0001009727626, -0.0001365758755, -0.0001603112840, -0.0001424124514, -0.0000653696498, +0.0000474708171, +0.0001661478599, +0.0002375486381, +0.0002256809339, +0.0001661478599, +0.0001186770428, +0.0000891050584, +0.0000474708171, -0.0000060311284, -0.0000830739300, -0.0001542801556, -0.0001840466926, -0.0001484435798, -0.0000356031128, +0.0000891050584, +0.0001721789883, +0.0001840466926, +0.0001247081712, +0.0000060311284, -0.0001305447471, -0.0002612840467, -0.0003264591440, -0.0003385214008, -0.0002908560311, -0.0001840466926, -0.0000474708171, +0.0001068093385, +0.0002433852140, +0.0003145914397, +0.0003027237354, +0.0002315175097, +0.0001009727626, -0.0000535019455, -0.0001782101167, -0.0002077821012, -0.0001424124514, -0.0000178988327, +0.0001068093385, +0.0001721789883, +0.0001484435798, +0.0000593385214, +0.0000000000000, +0.0000178988327, +0.0000949416342, +0.0001603112840, +0.0001840466926, +0.0001840466926, +0.0001782101167, +0.0001603112840, +0.0001305447471, +0.0000891050584, +0.0000593385214, +0.0000237354086, -0.0000356031128, -0.0001365758755, -0.0002433852140, -0.0003145914397, -0.0003385214008, -0.0003206225681, -0.0002552529183, -0.0001661478599, -0.0000891050584, -0.0000416342412, -0.0000178988327, +0.0000060311284, +0.0000416342412, +0.0000772373541, +0.0000891050584, +0.0000593385214, +0.0000000000000, -0.0000474708171, -0.0000593385214, -0.0000356031128, -0.0000178988327, -0.0000474708171, -0.0001365758755, -0.0002671206226, -0.0004215953307, -0.0005107003891, -0.0004630350195, -0.0002612840467, +0.0000237354086, +0.0002968871595, +0.0004571984436, +0.0004571984436, +0.0003145914397, +0.0001068093385, -0.0000593385214, -0.0001484435798, -0.0001247081712, -0.0000593385214, -0.0000060311284, -0.0000060311284, -0.0000593385214, -0.0001186770428, -0.0001424124514, -0.0000891050584, +0.0000356031128, +0.0002077821012, +0.0003443579767, +0.0004036964981, +0.0003741245136, +0.0002908560311, +0.0001721789883, +0.0000535019455, +0.0000060311284, +0.0000772373541, +0.0002077821012, +0.0003324902724, +0.0004097276265, +0.0003918287938, +0.0002789883268, +0.0001186770428, -0.0000118677043, -0.0000593385214, +0.0000060311284, +0.0001365758755, +0.0002612840467, +0.0003206225681, +0.0002908560311, +0.0001900778210, +0.0000593385214, -0.0000060311284, +0.0000000000000, +0.0000535019455, +0.0001128404669, +0.0001542801556, +0.0001603112840, +0.0001305447471, +0.0000772373541, +0.0000060311284, -0.0000416342412, -0.0000891050584, -0.0001484435798, -0.0001959143969, -0.0001900778210, -0.0001009727626, +0.0000474708171, +0.0002375486381, +0.0004334630350, +0.0005758754864, +0.0005937743191, +0.0004690661479, +0.0002433852140, +0.0000178988327, -0.0001247081712, -0.0001424124514, -0.0000416342412, +0.0000949416342, +0.0001900778210, +0.0001782101167, +0.0000653696498, -0.0000830739300, -0.0001840466926, -0.0001959143969, -0.0001128404669, +0.0000178988327, +0.0001424124514, +0.0001959143969, +0.0001840466926, +0.0001365758755, +0.0000949416342, +0.0000653696498, +0.0000356031128, +0.0000060311284, -0.0000297665370, -0.0000593385214, -0.0000653696498, -0.0000535019455, -0.0000356031128, -0.0000118677043, +0.0000000000000, -0.0000118677043, -0.0000535019455, -0.0001305447471, -0.0002315175097, -0.0003145914397, -0.0003562256809, -0.0003027237354, -0.0001365758755, +0.0000712062257, +0.0002315175097, +0.0002850194553, +0.0002375486381, +0.0001365758755, +0.0000535019455, +0.0000118677043, +0.0000060311284, -0.0000060311284, -0.0000949416342, -0.0002196498054, -0.0003145914397, -0.0002968871595, -0.0001721789883, +0.0000178988327, +0.0002019455253, +0.0002968871595, +0.0002494163424, +0.0000891050584, -0.0000949416342, -0.0002375486381, -0.0003027237354, -0.0002789883268, -0.0001900778210, -0.0000949416342, -0.0000416342412, -0.0000535019455, -0.0001128404669, -0.0001721789883, -0.0002077821012, -0.0002077821012, -0.0001542801556, -0.0000535019455, +0.0000593385214, +0.0001305447471, +0.0001603112840, +0.0001721789883, +0.0001782101167, +0.0001542801556, +0.0001128404669, +0.0000474708171, -0.0000416342412, -0.0001365758755, -0.0002315175097, -0.0002908560311, -0.0003324902724, -0.0003443579767, -0.0003087548638, -0.0002196498054, -0.0000891050584, +0.0000416342412, +0.0001484435798, +0.0001900778210, +0.0001484435798, +0.0000474708171, -0.0000237354086, -0.0000474708171, -0.0000237354086, +0.0000000000000, -0.0000060311284, -0.0000535019455, -0.0001186770428, -0.0001603112840, -0.0001900778210, -0.0001840466926, -0.0001603112840, -0.0001365758755, -0.0001305447471, -0.0001484435798, -0.0001959143969, -0.0002612840467, -0.0002968871595, -0.0002671206226, -0.0001661478599, -0.0000297665370, +0.0000712062257, +0.0001009727626, +0.0000474708171, -0.0000653696498, -0.0001840466926, -0.0002433852140, -0.0001900778210, -0.0000178988327, +0.0002019455253, +0.0003562256809, +0.0003562256809, +0.0001900778210, -0.0000712062257, -0.0003027237354, -0.0003978599222, -0.0003087548638, -0.0000830739300, +0.0001661478599, +0.0003385214008, +0.0003741245136, +0.0002850194553, +0.0001128404669, -0.0000712062257, -0.0002315175097, -0.0003206225681, -0.0003206225681, -0.0002077821012, +0.0000000000000, +0.0002196498054, +0.0004097276265, +0.0005046692607, +0.0005107003891, +0.0004155642023, +0.0002375486381, +0.0000297665370, -0.0001068093385, -0.0001247081712, -0.0000178988327, +0.0001424124514, +0.0002315175097, +0.0001840466926, +0.0000356031128, -0.0001305447471, -0.0002671206226, -0.0003385214008, -0.0003443579767, -0.0002968871595, -0.0002315175097, -0.0001484435798, -0.0000535019455, +0.0000297665370, +0.0001068093385, +0.0001840466926, +0.0002494163424, +0.0002552529183, +0.0001782101167, +0.0000356031128, -0.0001009727626, -0.0001900778210, -0.0002019455253, -0.0001305447471, -0.0000237354086, +0.0000653696498, +0.0001128404669, +0.0001009727626, +0.0000653696498, +0.0000297665370, +0.0000060311284, -0.0000118677043, -0.0000356031128, -0.0000593385214, -0.0000712062257, -0.0000712062257, -0.0000772373541, -0.0000830739300, -0.0000712062257, -0.0000356031128, +0.0000000000000, +0.0000118677043, +0.0000060311284, +0.0000000000000, -0.0000118677043, -0.0000178988327, +0.0000000000000, +0.0000891050584, +0.0002315175097, +0.0003799610895, +0.0004334630350, +0.0003622568093, +0.0001542801556, -0.0001128404669, -0.0003443579767, -0.0004215953307, -0.0003027237354, -0.0000653696498, +0.0001721789883, +0.0002968871595, +0.0002789883268, +0.0001542801556, +0.0000060311284, -0.0000949416342, -0.0001128404669, -0.0000356031128, +0.0000772373541, +0.0001900778210, +0.0002433852140, +0.0002375486381, +0.0001900778210, +0.0001247081712, +0.0000653696498, +0.0000297665370, +0.0000178988327, +0.0000000000000, -0.0000237354086, -0.0000891050584, -0.0001721789883, -0.0002433852140, -0.0002908560311, -0.0002731517510, -0.0001782101167, -0.0000118677043, +0.0001840466926, +0.0003799610895, +0.0004928015564, +0.0004690661479, +0.0003087548638, +0.0000712062257, -0.0001424124514, -0.0002375486381, -0.0001782101167, -0.0000178988327, +0.0001603112840, +0.0002968871595, +0.0003680933852, +0.0003385214008, +0.0002196498054, +0.0000830739300, +0.0000000000000, +0.0000000000000, +0.0000237354086, +0.0000474708171, +0.0000474708171, +0.0000356031128, +0.0000237354086, +0.0000000000000, -0.0000593385214, -0.0001661478599, -0.0002789883268, -0.0003622568093, -0.0003622568093, -0.0002731517510, -0.0001128404669, +0.0000712062257, +0.0002256809339, +0.0002968871595, +0.0002789883268, +0.0001721789883, +0.0000297665370, -0.0001068093385, -0.0002019455253, -0.0002494163424, -0.0002315175097, -0.0001661478599, -0.0000712062257, +0.0000060311284, +0.0000593385214, +0.0000653696498, +0.0000297665370, +0.0000000000000, -0.0000237354086, -0.0000416342412, -0.0000416342412, -0.0000237354086, +0.0000118677043, +0.0000712062257, +0.0001603112840, +0.0002612840467, +0.0003145914397, +0.0002671206226, +0.0001424124514, +0.0000178988327, -0.0000416342412, -0.0000237354086, +0.0000712062257, +0.0002138132296, +0.0003324902724, +0.0003562256809, +0.0002612840467, +0.0001068093385, -0.0000474708171, -0.0001721789883, -0.0002138132296, -0.0001365758755, +0.0000118677043, +0.0001603112840, +0.0002375486381, +0.0002494163424, +0.0001959143969, +0.0000891050584, -0.0000178988327, -0.0000891050584, -0.0001186770428, -0.0001424124514, -0.0001603112840, -0.0001424124514, -0.0001009727626, -0.0000593385214, -0.0000474708171, -0.0000416342412, -0.0000356031128, -0.0000297665370, -0.0000237354086, +0.0000000000000, +0.0000474708171, +0.0001068093385, +0.0001365758755, +0.0001365758755, +0.0001009727626, +0.0000297665370, -0.0000535019455, -0.0001365758755, -0.0002019455253, -0.0002315175097, -0.0002196498054, -0.0001661478599, -0.0000830739300, -0.0000474708171, -0.0000772373541, -0.0001661478599, -0.0002850194553, -0.0003918287938, -0.0004215953307, -0.0003324902724, -0.0001484435798, +0.0000356031128, +0.0001840466926, +0.0002552529183, +0.0002612840467, +0.0002077821012, +0.0001365758755, +0.0000474708171, -0.0000297665370, -0.0001247081712, -0.0001959143969, -0.0001959143969, -0.0001305447471, -0.0000416342412, +0.0000297665370, +0.0000593385214, +0.0000060311284, -0.0001186770428, -0.0002731517510, -0.0003918287938, -0.0004274319066, -0.0003443579767, -0.0001484435798, +0.0000830739300, +0.0002731517510, +0.0003562256809, +0.0003087548638, +0.0001542801556, -0.0000356031128, -0.0001959143969, -0.0002552529183, -0.0002019455253, -0.0000416342412, +0.0001484435798, +0.0003027237354, +0.0003443579767, +0.0002612840467, +0.0000891050584, -0.0000830739300, -0.0001782101167, -0.0001900778210, -0.0001484435798, -0.0000653696498, +0.0000178988327, +0.0000593385214, +0.0000416342412, +0.0000000000000, -0.0000416342412, -0.0000830739300, -0.0001247081712, -0.0001721789883, -0.0002256809339, -0.0002612840467, -0.0002375486381, -0.0001305447471, +0.0000237354086, +0.0001721789883, +0.0002494163424, +0.0002375486381, +0.0001484435798, +0.0000237354086, -0.0000891050584, -0.0001721789883, -0.0002315175097, -0.0002731517510, -0.0003027237354, -0.0002850194553, -0.0002138132296, -0.0001247081712, -0.0000474708171, -0.0000060311284, -0.0000118677043, -0.0000712062257, -0.0001484435798, -0.0001900778210, -0.0001840466926, -0.0001484435798, -0.0000712062257, +0.0000297665370, +0.0001186770428, +0.0001542801556, +0.0001365758755, +0.0000891050584, +0.0000535019455, +0.0000474708171, +0.0000535019455, +0.0000772373541, +0.0001128404669, +0.0001305447471, +0.0001068093385, +0.0000060311284, -0.0001305447471, -0.0002552529183, -0.0003145914397, -0.0003087548638, -0.0002196498054, -0.0000712062257, +0.0000772373541, +0.0001721789883, +0.0002077821012, +0.0001959143969, +0.0001721789883, +0.0001542801556, +0.0001424124514, +0.0001365758755, +0.0001484435798, +0.0001661478599, +0.0001782101167, +0.0001424124514, +0.0000712062257, -0.0000297665370, -0.0001365758755, -0.0002315175097, -0.0002731517510, -0.0002433852140, -0.0001603112840, -0.0000653696498, +0.0000000000000, +0.0000297665370, +0.0000237354086, -0.0000178988327, -0.0000772373541, -0.0001186770428, -0.0001128404669, -0.0000772373541, -0.0000297665370, +0.0000178988327, +0.0000712062257, +0.0001128404669, +0.0001424124514, +0.0001661478599, +0.0001840466926, +0.0001959143969, +0.0001840466926, +0.0001424124514, +0.0000593385214, -0.0000237354086, -0.0000830739300, -0.0001009727626, -0.0000891050584, -0.0000593385214, -0.0000356031128, -0.0000118677043, +0.0000118677043, +0.0000653696498, +0.0001365758755, +0.0002077821012, +0.0002552529183, +0.0002256809339, +0.0001305447471, +0.0000060311284, -0.0000830739300, -0.0001305447471, -0.0001305447471, -0.0000949416342, -0.0000118677043, +0.0001068093385, +0.0002196498054, +0.0002671206226, +0.0002433852140, +0.0001782101167, +0.0001068093385, +0.0000653696498, +0.0000474708171, +0.0000535019455, +0.0000535019455, +0.0000297665370, -0.0000118677043, -0.0000593385214, -0.0000891050584, -0.0001186770428, -0.0001424124514, -0.0001484435798, -0.0001247081712, -0.0000772373541, -0.0000297665370, -0.0000178988327, -0.0000178988327, -0.0000060311284, +0.0000178988327, +0.0000535019455, +0.0000772373541, +0.0001009727626, +0.0001186770428, +0.0001186770428, +0.0000949416342, +0.0000653696498, +0.0000474708171, +0.0000356031128, +0.0000178988327, -0.0000060311284, -0.0000297665370, -0.0000118677043, +0.0000356031128, +0.0000949416342, +0.0001424124514, +0.0001603112840, +0.0001305447471, +0.0000535019455, -0.0000474708171, -0.0001186770428, -0.0001247081712, -0.0000653696498, +0.0000237354086, +0.0001186770428, +0.0001840466926, +0.0001959143969, +0.0001721789883, +0.0001365758755, +0.0000949416342, +0.0000772373541, +0.0000712062257, +0.0000535019455, -0.0000060311284, -0.0000830739300, -0.0001365758755, -0.0001424124514, -0.0001068093385, -0.0000772373541, -0.0000653696498, -0.0000593385214, -0.0000535019455, -0.0000474708171, -0.0000237354086, +0.0000000000000, +0.0000416342412, +0.0000772373541, +0.0001009727626, +0.0001186770428, +0.0001186770428, +0.0000949416342, +0.0000653696498, +0.0000356031128, +0.0000297665370, +0.0000474708171, +0.0000712062257, +0.0000830739300, +0.0000830739300, +0.0000653696498, +0.0000474708171, +0.0000535019455, +0.0000891050584, +0.0001365758755, +0.0001840466926, +0.0001900778210, +0.0001603112840, +0.0001186770428, +0.0000891050584, +0.0000772373541, +0.0000949416342, +0.0001305447471, +0.0001661478599, +0.0001900778210, +0.0001900778210, +0.0001661478599, +0.0001305447471, +0.0000891050584, +0.0000535019455, +0.0000237354086, +0.0000118677043, +0.0000178988327, +0.0000356031128, +0.0000712062257, +0.0001009727626, +0.0001068093385, +0.0000830739300, +0.0000474708171, +0.0000297665370, +0.0000178988327, +0.0000000000000, -0.0000535019455, -0.0001247081712, -0.0001900778210, -0.0002315175097, -0.0002433852140, -0.0002196498054, -0.0001424124514, -0.0000237354086, +0.0000830739300, +0.0001603112840, +0.0002077821012, +0.0001900778210, +0.0001068093385, +0.0000060311284, -0.0000712062257, -0.0000830739300, -0.0000474708171, +0.0000060311284, +0.0000712062257, +0.0001186770428, +0.0001186770428, +0.0000593385214, -0.0000237354086, -0.0001128404669, -0.0001603112840, -0.0001840466926, -0.0001840466926, -0.0001542801556, -0.0000891050584, -0.0000178988327, +0.0000237354086, +0.0000474708171, +0.0000474708171, +0.0000356031128, +0.0000237354086, +0.0000000000000, -0.0000060311284, -0.0000118677043, -0.0000178988327, -0.0000118677043, +0.0000237354086, +0.0001068093385, +0.0002138132296, +0.0002908560311, +0.0003027237354, +0.0002552529183, +0.0001840466926, +0.0001068093385, +0.0000535019455, +0.0000118677043, +0.0000000000000, -0.0000060311284, -0.0000118677043, -0.0000356031128, -0.0000593385214, -0.0000653696498, -0.0000474708171, -0.0000118677043, +0.0000297665370, +0.0000712062257, +0.0000949416342, +0.0000949416342, +0.0000593385214, +0.0000178988327, -0.0000178988327, -0.0000593385214, -0.0000891050584, -0.0001128404669, -0.0001247081712, -0.0001542801556, -0.0001959143969, -0.0002256809339, -0.0002375486381, -0.0002256809339, -0.0002138132296, -0.0001959143969, -0.0001840466926, -0.0001603112840, -0.0001305447471, -0.0000949416342, -0.0000772373541, -0.0000653696498, -0.0000535019455, -0.0000297665370, -0.0000060311284, -0.0000178988327, -0.0000593385214, -0.0001305447471, -0.0001959143969, -0.0002196498054, -0.0002077821012, -0.0001661478599, -0.0001128404669, -0.0000593385214, -0.0000297665370, -0.0000297665370, -0.0000593385214, -0.0000949416342, -0.0000949416342, -0.0000474708171, +0.0000297665370, +0.0001009727626, +0.0001365758755, +0.0001247081712, +0.0000949416342, +0.0000712062257, +0.0000593385214, +0.0000535019455, +0.0000474708171, +0.0000356031128, +0.0000297665370, +0.0000237354086, +0.0000000000000, -0.0000416342412, -0.0000949416342, -0.0001186770428, -0.0001068093385, -0.0000830739300, -0.0000416342412, +0.0000118677043, +0.0000830739300, +0.0001424124514, +0.0001484435798, +0.0000949416342, +0.0000000000000, -0.0001305447471, -0.0002494163424, -0.0003264591440, -0.0003443579767, -0.0003027237354, -0.0002315175097, -0.0001424124514, -0.0000474708171, +0.0000356031128, +0.0000830739300, +0.0000772373541, +0.0000356031128, +0.0000000000000, -0.0000416342412, -0.0000593385214, -0.0000653696498, -0.0000712062257, -0.0000891050584, -0.0001009727626, -0.0000830739300, -0.0000297665370, +0.0000535019455, +0.0001484435798, +0.0001959143969, +0.0001721789883, +0.0000830739300, -0.0000416342412, -0.0001484435798, -0.0001959143969, -0.0001603112840, -0.0000772373541, +0.0000000000000, +0.0000416342412, +0.0000178988327, -0.0000474708171, -0.0001186770428, -0.0001186770428, -0.0000356031128, +0.0001305447471, +0.0003087548638, +0.0004215953307, +0.0004215953307, +0.0003027237354, +0.0001305447471, -0.0000297665370, -0.0001365758755, -0.0001603112840, -0.0001068093385, -0.0000178988327, +0.0000593385214, +0.0001068093385, +0.0001068093385, +0.0000891050584, +0.0000535019455, +0.0000237354086, +0.0000060311284, +0.0000118677043, +0.0000356031128, +0.0000653696498, +0.0001009727626, +0.0001365758755, +0.0001542801556, +0.0001305447471, +0.0000712062257, -0.0000118677043, -0.0000949416342, -0.0001305447471, -0.0001186770428, -0.0000653696498, +0.0000060311284, +0.0000772373541, +0.0001186770428, +0.0001305447471, +0.0001068093385, +0.0000653696498, +0.0000356031128, +0.0000297665370, +0.0000416342412, +0.0000593385214, +0.0000593385214, +0.0000237354086, -0.0000237354086, -0.0000772373541, -0.0001186770428, -0.0001365758755, -0.0001365758755, -0.0001128404669, -0.0000653696498, +0.0000000000000, +0.0000474708171, +0.0000772373541, +0.0000712062257, +0.0000535019455, +0.0000416342412, +0.0000416342412, +0.0000535019455, +0.0000593385214, +0.0000416342412, +0.0000237354086, +0.0000178988327, +0.0000416342412, +0.0000772373541, +0.0000949416342, +0.0000830739300, +0.0000474708171, -0.0000060311284, -0.0000535019455, -0.0000653696498, -0.0000535019455, -0.0000178988327, +0.0000060311284, +0.0000118677043, +0.0000000000000, -0.0000297665370, -0.0000593385214, -0.0000593385214, -0.0000237354086, +0.0000474708171, +0.0001424124514, +0.0002138132296, +0.0002315175097, +0.0001840466926, +0.0001009727626, +0.0000000000000, -0.0000772373541, -0.0001247081712, -0.0001128404669, -0.0000653696498, -0.0000118677043, +0.0000000000000, -0.0000178988327, -0.0000416342412, -0.0000593385214, -0.0000535019455, -0.0000356031128, +0.0000000000000, +0.0000593385214, +0.0001365758755, +0.0001840466926, +0.0002019455253, +0.0001840466926, +0.0001484435798, +0.0000830739300, +0.0000178988327, -0.0000178988327, -0.0000118677043, +0.0000416342412, +0.0001247081712, +0.0002077821012, +0.0002552529183, +0.0002433852140, +0.0001603112840, +0.0000297665370, -0.0001009727626, -0.0001959143969, -0.0002315175097, -0.0002256809339, -0.0002077821012, -0.0001782101167, -0.0001424124514, -0.0000830739300, +0.0000000000000, +0.0000830739300, +0.0001424124514, +0.0001484435798, +0.0001068093385, +0.0000416342412, -0.0000118677043, -0.0000416342412, -0.0000356031128, -0.0000060311284, +0.0000356031128, +0.0000593385214, +0.0000535019455, +0.0000178988327, -0.0000297665370, -0.0000593385214, -0.0000712062257, -0.0000593385214, -0.0000356031128, +0.0000000000000, +0.0000416342412, +0.0000772373541, +0.0001009727626, +0.0001068093385, +0.0000949416342, +0.0000474708171, -0.0000118677043, -0.0000712062257, -0.0001128404669, -0.0001128404669, -0.0000653696498, +0.0000118677043, +0.0001068093385, +0.0001721789883, +0.0001782101167, +0.0001305447471, +0.0000653696498, +0.0000118677043, +0.0000000000000, +0.0000237354086, +0.0000772373541, +0.0001247081712, +0.0001247081712, +0.0000772373541, +0.0000118677043, -0.0000356031128, -0.0000772373541, -0.0000891050584, -0.0000830739300, -0.0000712062257, -0.0000653696498, -0.0000653696498, -0.0000772373541, -0.0000830739300, -0.0000772373541, -0.0000712062257, -0.0000712062257, -0.0000712062257, -0.0000653696498, -0.0000593385214, -0.0000416342412, +0.0000000000000, +0.0000593385214, +0.0001128404669, +0.0001247081712, +0.0000772373541, +0.0000060311284, -0.0000772373541, -0.0001484435798, -0.0001721789883, -0.0001484435798, -0.0001009727626, -0.0000712062257, -0.0000653696498, -0.0001009727626, -0.0001542801556, -0.0002077821012, -0.0002256809339, -0.0001900778210, -0.0001247081712, -0.0000593385214, -0.0000237354086, -0.0000237354086, -0.0000535019455, -0.0000772373541, -0.0000712062257, -0.0000593385214, -0.0000474708171, -0.0000535019455, -0.0000772373541, -0.0001068093385, -0.0001305447471, -0.0001247081712, -0.0000891050584, -0.0000356031128, +0.0000297665370, +0.0001068093385, +0.0001603112840, +0.0001782101167, +0.0001305447471, +0.0000535019455, -0.0000237354086, -0.0000712062257, -0.0000712062257, -0.0000297665370, +0.0000237354086, +0.0000474708171, +0.0000356031128, -0.0000118677043, -0.0000593385214, -0.0000653696498, -0.0000237354086, +0.0000474708171, +0.0001068093385, +0.0001247081712, +0.0000830739300, +0.0000000000000, -0.0000949416342, -0.0001542801556, -0.0001542801556, -0.0001068093385, -0.0000416342412, +0.0000000000000, +0.0000060311284, -0.0000118677043, -0.0000712062257, -0.0001305447471, -0.0001661478599, -0.0001840466926, -0.0001900778210, -0.0001900778210, -0.0001782101167, -0.0001484435798, -0.0000949416342, -0.0000474708171, +0.0000000000000, +0.0000416342412, +0.0000474708171, +0.0000237354086, -0.0000060311284, -0.0000356031128, -0.0000593385214, -0.0000830739300, -0.0001009727626, -0.0001009727626, -0.0000891050584, -0.0000772373541, -0.0000891050584, -0.0001068093385, -0.0001068093385, -0.0000712062257, -0.0000060311284, +0.0000474708171, +0.0000772373541, +0.0000712062257, +0.0000474708171, +0.0000060311284, -0.0000356031128, -0.0000772373541, -0.0001009727626, -0.0000949416342, -0.0000593385214, -0.0000118677043, +0.0000356031128, +0.0000653696498, +0.0000593385214, +0.0000237354086, +0.0000000000000, -0.0000060311284, +0.0000060311284, +0.0000474708171, +0.0001068093385, +0.0001661478599, +0.0001959143969, +0.0001840466926, +0.0001484435798, +0.0001009727626, +0.0000535019455, +0.0000237354086, +0.0000000000000, -0.0000060311284, -0.0000178988327, -0.0000297665370, -0.0000535019455, -0.0000712062257, -0.0000772373541, -0.0000772373541, -0.0000653696498, -0.0000653696498, -0.0000830739300, -0.0000830739300, -0.0000535019455, +0.0000060311284, +0.0001009727626, +0.0001840466926, +0.0002375486381, +0.0002315175097, +0.0001484435798, +0.0000356031128, -0.0000653696498, -0.0001365758755, -0.0001484435798, -0.0001247081712, -0.0000593385214, +0.0000000000000, +0.0000535019455, +0.0000772373541, +0.0000949416342, +0.0000949416342, +0.0000712062257, +0.0000237354086, -0.0000237354086, -0.0000653696498, -0.0000830739300, -0.0000712062257, -0.0000416342412, +0.0000000000000, +0.0000356031128, +0.0000593385214, +0.0000772373541, +0.0001009727626, +0.0001247081712, +0.0001365758755, +0.0001128404669, +0.0000474708171, -0.0000297665370, -0.0001128404669, -0.0001721789883, -0.0001900778210, -0.0001603112840, -0.0000949416342, -0.0000237354086, +0.0000356031128, +0.0000830739300, +0.0001009727626, +0.0000891050584, +0.0000712062257, +0.0000772373541, +0.0001068093385, +0.0001247081712, +0.0001186770428, +0.0000712062257, +0.0000118677043, -0.0000297665370, -0.0000416342412, -0.0000178988327, +0.0000118677043, +0.0000535019455, +0.0000949416342, +0.0001186770428, +0.0001247081712, +0.0001186770428, +0.0001009727626, +0.0000653696498, +0.0000237354086, -0.0000118677043, -0.0000237354086, +0.0000000000000, +0.0000474708171, +0.0000891050584, +0.0001009727626, +0.0000830739300, +0.0000356031128, -0.0000237354086, -0.0000772373541, -0.0000891050584, -0.0000593385214, +0.0000060311284, +0.0000830739300, +0.0001424124514, +0.0001782101167, +0.0001840466926, +0.0001721789883, +0.0001305447471, +0.0000830739300, +0.0000237354086, -0.0000178988327, -0.0000474708171, -0.0000653696498, -0.0000772373541, -0.0000830739300, -0.0000653696498, -0.0000356031128, +0.0000118677043, +0.0000593385214, +0.0000891050584, +0.0001068093385, +0.0001247081712, +0.0001365758755, +0.0001424124514, +0.0001305447471, +0.0000891050584, +0.0000356031128, -0.0000060311284, -0.0000297665370, -0.0000297665370, -0.0000118677043, +0.0000000000000, +0.0000118677043, +0.0000060311284, +0.0000000000000, +0.0000118677043, +0.0000593385214, +0.0001247081712, +0.0001840466926, +0.0002138132296, +0.0002138132296, +0.0001840466926, +0.0001365758755, +0.0001068093385, +0.0001068093385, +0.0001305447471, +0.0001603112840, +0.0001721789883, +0.0001424124514, +0.0000772373541, -0.0000178988327, -0.0001247081712, -0.0001840466926, -0.0001661478599, -0.0000830739300, +0.0000297665370, +0.0001542801556, +0.0002433852140, +0.0002731517510, +0.0002433852140, +0.0001840466926, +0.0001186770428, +0.0000712062257, +0.0000178988327, -0.0000297665370, -0.0000772373541, -0.0001009727626, -0.0000949416342, -0.0000593385214, -0.0000118677043, +0.0000237354086, +0.0000356031128, +0.0000178988327, -0.0000118677043, -0.0000416342412, -0.0000474708171, -0.0000178988327, +0.0000237354086, +0.0000653696498, +0.0000712062257, +0.0000593385214, +0.0000474708171, +0.0000416342412, +0.0000356031128, +0.0000178988327, +0.0000000000000, -0.0000237354086, -0.0000416342412, -0.0000474708171, -0.0000356031128, -0.0000178988327, +0.0000000000000, +0.0000178988327, +0.0000118677043, -0.0000118677043, -0.0000535019455, -0.0000891050584, -0.0000949416342, -0.0000593385214, +0.0000178988327, +0.0001365758755, +0.0002433852140, +0.0002850194553, +0.0002552529183, +0.0001782101167, +0.0000891050584, +0.0000060311284, -0.0000474708171, -0.0000830739300, -0.0000830739300, -0.0000474708171, +0.0000000000000, +0.0000535019455, +0.0001068093385, +0.0001247081712, +0.0001068093385, +0.0000535019455, +0.0000000000000, -0.0000356031128, -0.0000416342412, -0.0000297665370, +0.0000000000000, +0.0000237354086, +0.0000535019455, +0.0000772373541, +0.0000772373541, +0.0000593385214, +0.0000416342412, +0.0000237354086, +0.0000000000000, -0.0000297665370, -0.0000772373541, -0.0001128404669, -0.0001247081712, -0.0001186770428, -0.0000830739300, -0.0000297665370, +0.0000000000000, +0.0000000000000, -0.0000237354086, -0.0000830739300, -0.0001484435798, -0.0001782101167, -0.0001603112840, -0.0000891050584, +0.0000000000000, +0.0000593385214, +0.0000653696498, +0.0000297665370, -0.0000297665370, -0.0000830739300, -0.0001068093385, -0.0000891050584, -0.0000297665370, +0.0000356031128, +0.0000891050584, +0.0000891050584, +0.0000474708171, -0.0000118677043, -0.0000712062257, -0.0000891050584, -0.0000830739300, -0.0000712062257, -0.0000653696498, -0.0000712062257, -0.0000891050584, -0.0001068093385, -0.0000949416342, -0.0000356031128, +0.0000237354086, +0.0000593385214, +0.0000416342412, -0.0000178988327, -0.0000891050584, -0.0001424124514, -0.0001542801556, -0.0001128404669, -0.0000237354086, +0.0000772373541, +0.0001603112840, +0.0002019455253, +0.0001840466926, +0.0001068093385, +0.0000000000000, -0.0000891050584, -0.0001365758755, -0.0001365758755, -0.0001068093385, -0.0000653696498, -0.0000356031128, -0.0000237354086, -0.0000297665370, -0.0000237354086, -0.0000060311284, +0.0000237354086, +0.0000653696498, +0.0001068093385, +0.0001305447471, +0.0001068093385, +0.0000416342412, -0.0000237354086, -0.0000830739300, -0.0001128404669, -0.0000949416342, -0.0000356031128, +0.0000297665370, +0.0001009727626, +0.0001484435798, +0.0001484435798, +0.0001068093385, +0.0000356031128, -0.0000356031128, -0.0000949416342, -0.0001305447471, -0.0001305447471, -0.0001068093385, -0.0000772373541, -0.0000535019455, -0.0000297665370, +0.0000000000000, +0.0000237354086, +0.0000178988327, -0.0000118677043, -0.0000653696498, -0.0001128404669, -0.0001424124514, -0.0001424124514, -0.0001009727626, -0.0000178988327, +0.0000830739300, +0.0001661478599, +0.0002077821012, +0.0001840466926, +0.0001009727626, -0.0000237354086, -0.0001424124514, -0.0002138132296, -0.0002315175097, -0.0002019455253, -0.0001542801556, -0.0001009727626, -0.0000535019455, -0.0000060311284, +0.0000237354086, +0.0000416342412, +0.0000535019455, +0.0000416342412, +0.0000237354086, +0.0000000000000, -0.0000297665370, -0.0000416342412, -0.0000356031128, -0.0000178988327, -0.0000060311284, -0.0000118677043, -0.0000416342412, -0.0000593385214, -0.0000535019455, -0.0000178988327, +0.0000237354086, +0.0000593385214, +0.0000653696498, +0.0000356031128, -0.0000178988327, -0.0000830739300, -0.0001186770428, -0.0001247081712, -0.0001068093385, -0.0000712062257, -0.0000416342412, -0.0000118677043, +0.0000000000000, +0.0000118677043, +0.0000237354086, +0.0000356031128, +0.0000593385214, +0.0000772373541, +0.0000830739300, +0.0000593385214, +0.0000000000000, -0.0000772373541, -0.0001542801556, -0.0001840466926, -0.0001484435798, -0.0000653696498, +0.0000178988327, +0.0000891050584, +0.0001186770428, +0.0001128404669, +0.0000653696498, +0.0000000000000, -0.0000712062257, -0.0001068093385, -0.0001068093385, -0.0000891050584, -0.0000653696498, -0.0000593385214, -0.0000593385214, -0.0000653696498, -0.0000653696498, -0.0000474708171, -0.0000237354086, -0.0000060311284, +0.0000060311284, +0.0000000000000, -0.0000237354086, -0.0000772373541, -0.0001247081712, -0.0001542801556, -0.0001365758755, -0.0000653696498, +0.0000297665370, +0.0001128404669, +0.0001542801556, +0.0001365758755, +0.0000891050584, +0.0000474708171, +0.0000237354086, +0.0000000000000, -0.0000178988327, -0.0000237354086, -0.0000178988327, +0.0000060311284, +0.0000416342412, +0.0000949416342, +0.0001365758755, +0.0001484435798, +0.0001305447471, +0.0000891050584, +0.0000474708171, +0.0000000000000, -0.0000356031128, -0.0000474708171, -0.0000356031128, +0.0000000000000, +0.0000416342412, +0.0001009727626, +0.0001484435798, +0.0001782101167, +0.0001603112840, +0.0001128404669, +0.0000416342412, -0.0000060311284, -0.0000356031128, -0.0000237354086, -0.0000060311284, -0.0000118677043, -0.0000416342412, -0.0000830739300, -0.0001068093385, -0.0001009727626, -0.0000593385214, +0.0000060311284, +0.0000891050584, +0.0001484435798, +0.0001603112840, +0.0001305447471, +0.0000535019455, -0.0000535019455, -0.0001542801556, -0.0002077821012, -0.0001840466926, -0.0001068093385, -0.0000060311284, +0.0000593385214, +0.0000891050584, +0.0000891050584, +0.0000653696498, +0.0000416342412, +0.0000297665370, +0.0000237354086, +0.0000118677043, +0.0000000000000, -0.0000178988327, -0.0000416342412, -0.0000535019455, -0.0000416342412, -0.0000060311284, +0.0000356031128, +0.0000772373541, +0.0000712062257, +0.0000297665370, -0.0000297665370, -0.0000712062257, -0.0000772373541, -0.0000474708171, +0.0000000000000, +0.0000416342412, +0.0000653696498, +0.0000593385214, +0.0000356031128, +0.0000237354086, +0.0000118677043, +0.0000060311284, -0.0000118677043, -0.0000297665370, -0.0000416342412, -0.0000474708171, -0.0000416342412, -0.0000297665370, -0.0000297665370, -0.0000297665370, -0.0000356031128, -0.0000416342412, -0.0000237354086, +0.0000178988327, +0.0000891050584, +0.0001484435798, +0.0001721789883, +0.0001305447471, +0.0000356031128, -0.0000712062257, -0.0001603112840, -0.0001782101167, -0.0001186770428, +0.0000000000000, +0.0001305447471, +0.0002138132296, +0.0002256809339, +0.0001661478599, +0.0000653696498, -0.0000474708171, -0.0001424124514, -0.0001959143969, -0.0001959143969, -0.0001542801556, -0.0000949416342, -0.0000297665370, +0.0000237354086, +0.0000712062257, +0.0000891050584, +0.0000772373541, +0.0000416342412, -0.0000237354086, -0.0001128404669, -0.0001959143969, -0.0002375486381, -0.0002196498054, -0.0001305447471, -0.0000178988327, +0.0000830739300, +0.0001365758755, +0.0001186770428, +0.0000593385214, -0.0000118677043, -0.0000535019455, -0.0000416342412, +0.0000178988327, +0.0000949416342, +0.0001365758755, +0.0001128404669, +0.0000297665370, -0.0000653696498, -0.0001603112840, -0.0001900778210, -0.0001661478599, -0.0000949416342, -0.0000178988327, +0.0000237354086, +0.0000416342412, +0.0000356031128, +0.0000237354086, +0.0000060311284, +0.0000060311284, +0.0000118677043, +0.0000118677043, +0.0000118677043, +0.0000060311284, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/17-marshall-jcm2000-sm57-off.h000066400000000000000000003054021247673406200257620ustar00rootroot00000000000000float marshall_jcm2000_sm57_off[] = { +0.0000000000000, -0.0000263793103, -0.0000684482759, -0.0000946551724, -0.0001579310345, -0.0001789655172, -0.0002000000000, -0.0001894827586, -0.0002000000000, -0.0002051724138, -0.0001946551724, -0.0002210344828, -0.0001946551724, -0.0002472413793, -0.0002105172414, -0.0002893103448, -0.0002315517241, -0.0003105172414, -0.0002315517241, -0.0003105172414, -0.0002472413793, -0.0003051724138, -0.0003367241379, -0.0001684482759, -0.0006734482759, +0.0000631034483, -0.0002000000000, -0.0010996551724, -0.0003105172414, +0.0001684482759, -0.0000789655172, -0.0004787931034, -0.0007629310345, -0.0007470689655, -0.0006367241379, -0.0005367241379, -0.0003841379310, -0.0004525862069, -0.0003787931034, -0.0004367241379, -0.0004946551724, -0.0004577586207, -0.0005734482759, -0.0005629310345, -0.0006682758621, -0.0007524137931, -0.0007313793103, -0.0007103448276, -0.0005156896552, -0.0002472413793, +0.0002262068966, -0.0001262068966, -0.0031832758621, -0.0043934482759, -0.0014522413793, -0.0059403448276, -0.0157375862069, -0.0040777586207, +0.0346217241379, +0.0692696551724, +0.0783565517241, +0.0612034482759, +0.0107443103448, -0.0608246551724, -0.1221439655172, -0.1615853448276, -0.1723979310345, -0.1466053448276, -0.0943098275862, -0.0352425862069, +0.0136277586207, +0.0395570689655, +0.0450344827586, +0.0405041379310, +0.0266396551724, +0.0094236206897, +0.0041936206897, +0.0126122413793, +0.0275605172414, +0.0389310344828, +0.0339429310345, +0.0154903448276, -0.0024834482759, -0.0138434482759, -0.0174529310345, -0.0073768965517, +0.0138486206897, +0.0317436206897, +0.0383468965517, +0.0365422413793, +0.0338798275862, +0.0332536206897, +0.0303544827586, +0.0269396551724, +0.0240615517241, +0.0170529310345, +0.0119701724138, +0.0168110344828, +0.0295651724138, +0.0424982758621, +0.0459079310345, +0.0374998275862, +0.0234037931034, +0.0070874137931, -0.0074874137931, -0.0145643103448, -0.0140591379310, -0.0082924137931, +0.0015889655172, +0.0138329310345, +0.0257768965517, +0.0342850000000, +0.0367684482759, +0.0339165517241, +0.0279603448276, +0.0196417241379, +0.0083924137931, -0.0026150000000, -0.0071243103448, -0.0039620689655, +0.0021310344828, +0.0059824137931, +0.0057351724138, +0.0023256896552, -0.0005208620690, +0.0014258620690, +0.0087081034483, +0.0179053448276, +0.0251348275862, +0.0274184482759, +0.0245824137931, +0.0205887931034, +0.0176581034483, +0.0133856896552, +0.0078293103448, +0.0046250000000, +0.0036725862069, +0.0027939655172, +0.0003315517241, -0.0035515517241, -0.0055774137931, -0.0041987931034, -0.0015679310345, +0.0019836206897, +0.0057772413793, +0.0054563793103, +0.0007998275862, -0.0033674137931, -0.0036884482759, +0.0008103448276, +0.0102496551724, +0.0214727586207, +0.0293600000000, +0.0309753448276, +0.0257346551724, +0.0155693103448, +0.0040936206897, -0.0074505172414, -0.0180053448276, -0.0232091379310, -0.0215727586207, -0.0168162068966, -0.0119439655172, -0.0080082758621, -0.0061403448276, -0.0060087931034, -0.0058615517241, -0.0043144827586, -0.0015574137931, +0.0006787931034, +0.0001210344828, -0.0041513793103, -0.0111284482759, -0.0185789655172, -0.0234196551724, -0.0241982758621, -0.0220463793103, -0.0192313793103, -0.0175950000000, -0.0178001724138, -0.0188051724138, -0.0187210344828, -0.0161796551724, -0.0114651724138, -0.0065455172414, -0.0037146551724, -0.0039305172414, -0.0067560344828, -0.0110863793103, -0.0148220689655, -0.0171372413793, -0.0186525862069, -0.0190577586207, -0.0181212068966, -0.0170741379310, -0.0173529310345, -0.0191260344828, -0.0207624137931, -0.0205362068966, -0.0177737931034, -0.0127594827586, -0.0066296551724, -0.0008998275862, +0.0028360344828, +0.0036831034483, +0.0014048275862, -0.0035305172414, -0.0099393103448, -0.0162479310345, -0.0210255172414, -0.0236932758621, -0.0246824137931, -0.0242825862069, -0.0224041379310, -0.0190156896552, -0.0144222413793, -0.0098550000000, -0.0072715517241, -0.0082555172414, -0.0123858620690, -0.0173581034483, -0.0202520689655, -0.0195155172414, -0.0154167241379, -0.0100075862069, -0.0061087931034, -0.0048460344828, -0.0059718965517, -0.0090079310345, -0.0125912068966, -0.0149746551724, -0.0154955172414, -0.0144063793103, -0.0125017241379, -0.0104391379310, -0.0085765517241, -0.0071768965517, -0.0065086206897, -0.0062665517241, -0.0057562068966, -0.0050932758621, -0.0052617241379, -0.0068137931034, -0.0094289655172, -0.0129436206897, -0.0168636206897, -0.0201258620690, -0.0219831034483, -0.0221884482759, -0.0204836206897, -0.0168898275862, -0.0118860344828, -0.0066927586207, -0.0029201724138, -0.0010365517241, -0.0003946551724, -0.0002841379310, -0.0001210344828, +0.0005734482759, +0.0014784482759, +0.0022362068966, +0.0026150000000, +0.0021046551724, +0.0003420689655, -0.0026150000000, -0.0060298275862, -0.0080924137931, -0.0075610344828, -0.0049617241379, -0.0013153448276, +0.0021046551724, +0.0039515517241, +0.0037305172414, +0.0019889655172, -0.0004313793103, -0.0028412068966, -0.0045144827586, -0.0046091379310, -0.0032253448276, -0.0016468965517, -0.0011206896552, -0.0022625862069, -0.0046513793103, -0.0067243103448, -0.0072768965517, -0.0063613793103, -0.0040462068966, -0.0005472413793, +0.0029939655172, +0.0056720689655, +0.0073348275862, +0.0076820689655, +0.0068558620690, +0.0057931034483, +0.0053194827586, +0.0055089655172, +0.0060929310345, +0.0067875862069, +0.0072032758621, +0.0073979310345, +0.0076662068966, +0.0079556896552, +0.0081398275862, +0.0083186206897, +0.0084134482759, +0.0080398275862, +0.0071505172414, +0.0063244827586, +0.0060456896552, +0.0062982758621, +0.0069558620690, +0.0077556896552, +0.0083660344828, +0.0087553448276, +0.0088343103448, +0.0076346551724, +0.0045934482759, +0.0008050000000, -0.0018679310345, -0.0022520689655, -0.0007944827586, +0.0009208620690, +0.0018468965517, +0.0019100000000, +0.0015627586207, +0.0016153448276, +0.0028412068966, +0.0056667241379, +0.0096813793103, +0.0133908620690, +0.0155534482759, +0.0160058620690, +0.0149377586207, +0.0126753448276, +0.0102760344828, +0.0092551724138, +0.0102234482759, +0.0124227586207, +0.0144589655172, +0.0155324137931, +0.0156218965517, +0.0146063793103, +0.0124753448276, +0.0103286206897, +0.0094867241379, +0.0098655172414, +0.0105443103448, +0.0106968965517, +0.0102181034483, +0.0094762068966, +0.0088027586207, +0.0086817241379, +0.0095498275862, +0.0112967241379, +0.0131593103448, +0.0141012068966, +0.0134329310345, +0.0114651724138, +0.0091500000000, +0.0074136206897, +0.0068191379310, +0.0076505172414, +0.0094182758621, +0.0108653448276, +0.0108548275862, +0.0093289655172, +0.0071715517241, +0.0051617241379, +0.0039410344828, +0.0041777586207, +0.0057562068966, +0.0075451724138, +0.0085344827586, +0.0084450000000, +0.0079608620690, +0.0080818965517, +0.0087974137931, +0.0094920689655, +0.0100498275862, +0.0104970689655, +0.0106653448276, +0.0106232758621, +0.0105127586207, +0.0104286206897, +0.0103444827586, +0.0101760344828, +0.0099287931034, +0.0097129310345, +0.0096182758621, +0.0097446551724, +0.0099760344828, +0.0102496551724, +0.0105232758621, +0.0104496551724, +0.0099444827586, +0.0094077586207, +0.0090868965517, +0.0086553448276, +0.0075610344828, +0.0058405172414, +0.0043250000000, +0.0037463793103, +0.0041724137931, +0.0053194827586, +0.0067875862069, +0.0080977586207, +0.0086237931034, +0.0078977586207, +0.0059087931034, +0.0033358620690, +0.0011101724138, -0.0000894827586, -0.0001420689655, +0.0006893103448, +0.0019784482759, +0.0032306896552, +0.0043829310345, +0.0057036206897, +0.0071979310345, +0.0083818965517, +0.0087291379310, +0.0080660344828, +0.0065506896552, +0.0046565517241, +0.0032306896552, +0.0030781034483, +0.0042724137931, +0.0059982758621, +0.0073610344828, +0.0077713793103, +0.0069822413793, +0.0052143103448, +0.0029991379310, +0.0009996551724, -0.0001156896552, +0.0002000000000, +0.0020046551724, +0.0043567241379, +0.0059718965517, +0.0061139655172, +0.0046250000000, +0.0019520689655, -0.0009839655172, -0.0031727586207, -0.0039725862069, -0.0031622413793, -0.0012155172414, +0.0006787931034, +0.0013363793103, +0.0005262068966, -0.0008575862069, -0.0016205172414, -0.0010575862069, +0.0006103448276, +0.0024518965517, +0.0034148275862, +0.0030044827586, +0.0013891379310, -0.0005367241379, -0.0016627586207, -0.0015048275862, -0.0005418965517, +0.0004841379310, +0.0010050000000, +0.0007577586207, -0.0000263793103, -0.0009313793103, -0.0016100000000, -0.0018468965517, -0.0016205172414, -0.0013312068966, -0.0014889655172, -0.0023046551724, -0.0034463793103, -0.0041777586207, -0.0038777586207, -0.0024677586207, -0.0004682758621, +0.0012312068966, +0.0017889655172, +0.0009944827586, -0.0008050000000, -0.0027675862069, -0.0038936206897, -0.0036884482759, -0.0024413793103, -0.0008050000000, +0.0004841379310, +0.0010417241379, +0.0007470689655, -0.0004787931034, -0.0023518965517, -0.0041936206897, -0.0054668965517, -0.0060246551724, -0.0059351724138, -0.0053668965517, -0.0047039655172, -0.0044039655172, -0.0047196551724, -0.0055300000000, -0.0063560344828, -0.0067927586207, -0.0068558620690, -0.0065875862069, -0.0058667241379, -0.0046565517241, -0.0033622413793, -0.0026729310345, -0.0030306896552, -0.0042251724138, -0.0056931034483, -0.0068243103448, -0.0071453448276, -0.0065350000000, -0.0053774137931, -0.0043724137931, -0.0039356896552, -0.0039094827586, -0.0040777586207, -0.0043618965517, -0.0047301724138, -0.0052248275862, -0.0056984482759, -0.0060667241379, -0.0064981034483, -0.0070558620690, -0.0074874137931, -0.0076556896552, -0.0077136206897, -0.0079293103448, -0.0084660344828, -0.0092762068966, -0.0102550000000, -0.0111600000000, -0.0114651724138, -0.0109863793103, -0.0101129310345, -0.0093079310345, -0.0088868965517, -0.0090658620690, -0.0097708620690, -0.0104758620690, -0.0105391379310, -0.0095498275862, -0.0076977586207, -0.0055720689655, -0.0038305172414, -0.0030886206897, -0.0034779310345, -0.0044250000000, -0.0052089655172, -0.0054353448276, -0.0051774137931, -0.0048881034483, -0.0049143103448, -0.0052512068966, -0.0056089655172, -0.0056667241379, -0.0053458620690, -0.0047722413793, -0.0042198275862, -0.0040303448276, -0.0044618965517, -0.0054931034483, -0.0068717241379, -0.0081344827586, -0.0088396551724, -0.0087186206897, -0.0078031034483, -0.0063403448276, -0.0048406896552, -0.0038989655172, -0.0038094827586, -0.0044093103448, -0.0051512068966, -0.0054774137931, -0.0052143103448, -0.0047565517241, -0.0044618965517, -0.0044355172414, -0.0046250000000, -0.0048512068966, -0.0048512068966, -0.0046618965517, -0.0044250000000, -0.0040303448276, -0.0033989655172, -0.0028096551724, -0.0026308620690, -0.0029255172414, -0.0035305172414, -0.0040462068966, -0.0041356896552, -0.0037831034483, -0.0031991379310, -0.0027624137931, -0.0028518965517, -0.0033832758621, -0.0040831034483, -0.0047881034483, -0.0051932758621, -0.0050091379310, -0.0043724137931, -0.0037410344828, -0.0034937931034, -0.0037200000000, -0.0040356896552, -0.0037831034483, -0.0025677586207, -0.0005682758621, +0.0016468965517, +0.0031991379310, +0.0033306896552, +0.0020046551724, -0.0002105172414, -0.0024939655172, -0.0039672413793, -0.0041724137931, -0.0033568965517, -0.0020677586207, -0.0008155172414, +0.0000000000000, +0.0002000000000, +0.0000525862069, -0.0000053448276, +0.0000736206897, +0.0001631034483, +0.0001631034483, -0.0000736206897, -0.0007418965517, -0.0017048275862, -0.0025729310345, -0.0029517241379, -0.0026834482759, -0.0019362068966, -0.0011627586207, -0.0006313793103, -0.0002787931034, +0.0000000000000, +0.0001210344828, +0.0000105172414, -0.0002736206897, -0.0006472413793, -0.0010260344828, -0.0012312068966, -0.0010629310345, -0.0004472413793, +0.0007893103448, +0.0026570689655, +0.0045460344828, +0.0055351724138, +0.0052248275862, +0.0038567241379, +0.0021467241379, +0.0009418965517, +0.0005208620690, +0.0006472413793, +0.0010524137931, +0.0013312068966, +0.0010575862069, +0.0003577586207, -0.0002577586207, -0.0004208620690, -0.0000736206897, +0.0005944827586, +0.0011943103448, +0.0013627586207, +0.0010524137931, +0.0003420689655, -0.0005208620690, -0.0011837931034, -0.0014206896552, -0.0012575862069, -0.0008681034483, -0.0006103448276, -0.0006944827586, -0.0009944827586, -0.0012312068966, -0.0012681034483, -0.0010786206897, -0.0006893103448, -0.0002841379310, -0.0001315517241, -0.0003736206897, -0.0008944827586, -0.0013837931034, -0.0014101724138, -0.0008365517241, +0.0002156896552, +0.0016258620690, +0.0030360344828, +0.0039094827586, +0.0039620689655, +0.0032727586207, +0.0021415517241, +0.0010206896552, +0.0003156896552, +0.0002420689655, +0.0007839655172, +0.0017415517241, +0.0027518965517, +0.0033937931034, +0.0034517241379, +0.0030727586207, +0.0025360344828, +0.0021572413793, +0.0021256896552, +0.0023308620690, +0.0024362068966, +0.0020782758621, +0.0012522413793, +0.0003367241379, -0.0001789655172, -0.0001051724138, +0.0003420689655, +0.0007998275862, +0.0010575862069, +0.0010312068966, +0.0007734482759, +0.0004472413793, +0.0003210344828, +0.0006418965517, +0.0013048275862, +0.0019889655172, +0.0024624137931, +0.0026413793103, +0.0025413793103, +0.0023467241379, +0.0022572413793, +0.0023362068966, +0.0024624137931, +0.0024887931034, +0.0024413793103, +0.0023834482759, +0.0022993103448, +0.0021887931034, +0.0019889655172, +0.0015363793103, +0.0009524137931, +0.0004946551724, +0.0004313793103, +0.0008103448276, +0.0013627586207, +0.0017153448276, +0.0017310344828, +0.0014679310345, +0.0011365517241, +0.0009103448276, +0.0007787931034, +0.0007524137931, +0.0007787931034, +0.0006208620690, +0.0001894827586, -0.0002315517241, -0.0003420689655, +0.0000105172414, +0.0007944827586, +0.0017100000000, +0.0023677586207, +0.0025308620690, +0.0022362068966, +0.0017520689655, +0.0015206896552, +0.0016889655172, +0.0019679310345, +0.0020625862069, +0.0019784482759, +0.0018310344828, +0.0017784482759, +0.0019731034483, +0.0025782758621, +0.0035725862069, +0.0046565517241, +0.0054194827586, +0.0056456896552, +0.0054720689655, +0.0051248275862, +0.0048039655172, +0.0045513793103, +0.0043567241379, +0.0042462068966, +0.0041513793103, +0.0039777586207, +0.0037515517241, +0.0035884482759, +0.0034253448276, +0.0030937931034, +0.0025150000000, +0.0018153448276, +0.0012155172414, +0.0009155172414, +0.0008260344828, +0.0008629310345, +0.0010470689655, +0.0012575862069, +0.0013312068966, +0.0013048275862, +0.0013206896552, +0.0013786206897, +0.0013627586207, +0.0012732758621, +0.0011996551724, +0.0011101724138, +0.0009734482759, +0.0008891379310, +0.0009944827586, +0.0013258620690, +0.0017468965517, +0.0020362068966, +0.0020887931034, +0.0019994827586, +0.0019256896552, +0.0019625862069, +0.0020782758621, +0.0021731034483, +0.0021993103448, +0.0021677586207, +0.0020782758621, +0.0018625862069, +0.0015574137931, +0.0014153448276, +0.0015574137931, +0.0018153448276, +0.0019574137931, +0.0019205172414, +0.0017836206897, +0.0015837931034, +0.0014206896552, +0.0014627586207, +0.0016889655172, +0.0018994827586, +0.0019625862069, +0.0017625862069, +0.0013312068966, +0.0009208620690, +0.0007365517241, +0.0007524137931, +0.0008839655172, +0.0009996551724, +0.0010839655172, +0.0012206896552, +0.0014312068966, +0.0016889655172, +0.0019625862069, +0.0021467241379, +0.0021782758621, +0.0020415517241, +0.0017415517241, +0.0013837931034, +0.0010470689655, +0.0007893103448, +0.0007155172414, +0.0009365517241, +0.0014468965517, +0.0020625862069, +0.0025360344828, +0.0025993103448, +0.0021310344828, +0.0013101724138, +0.0004787931034, -0.0000946551724, -0.0002577586207, -0.0000946551724, +0.0000631034483, -0.0000158620690, -0.0002893103448, -0.0005577586207, -0.0006629310345, -0.0005103448276, -0.0002315517241, -0.0002262068966, -0.0006944827586, -0.0012732758621, -0.0014363793103, -0.0010417241379, -0.0003367241379, +0.0003682758621, +0.0008998275862, +0.0011050000000, +0.0009313793103, +0.0005103448276, +0.0001105172414, -0.0001841379310, -0.0003682758621, -0.0004787931034, -0.0006103448276, -0.0008050000000, -0.0010050000000, -0.0011837931034, -0.0011837931034, -0.0009103448276, -0.0005367241379, -0.0003105172414, -0.0003946551724, -0.0007682758621, -0.0011312068966, -0.0011365517241, -0.0007155172414, -0.0000420689655, +0.0005313793103, +0.0007050000000, +0.0003787931034, -0.0002472413793, -0.0009260344828, -0.0014732758621, -0.0016889655172, -0.0014468965517, -0.0009470689655, -0.0006839655172, -0.0009524137931, -0.0015837931034, -0.0020941379310, -0.0020572413793, -0.0013837931034, -0.0003946551724, +0.0005418965517, +0.0011522413793, +0.0011837931034, +0.0005629310345, -0.0003998275862, -0.0012050000000, -0.0015627586207, -0.0014574137931, -0.0010575862069, -0.0006103448276, -0.0003682758621, -0.0004841379310, -0.0008944827586, -0.0013522413793, -0.0016837931034, -0.0017889655172, -0.0017100000000, -0.0015679310345, -0.0014574137931, -0.0014312068966, -0.0014889655172, -0.0014837931034, -0.0012260344828, -0.0007313793103, -0.0003262068966, -0.0003156896552, -0.0008103448276, -0.0017153448276, -0.0028044827586, -0.0037146551724, -0.0039672413793, -0.0034094827586, -0.0023993103448, -0.0014627586207, -0.0008629310345, -0.0006682758621, -0.0008998275862, -0.0014153448276, -0.0018731034483, -0.0019468965517, -0.0016627586207, -0.0011891379310, -0.0006577586207, -0.0002631034483, -0.0000946551724, -0.0000579310345, -0.0000684482759, -0.0001315517241, -0.0002893103448, -0.0005156896552, -0.0006524137931, -0.0005524137931, -0.0002051724138, +0.0002841379310, +0.0007313793103, +0.0010050000000, +0.0011365517241, +0.0010944827586, +0.0008260344828, +0.0003472413793, -0.0002577586207, -0.0008050000000, -0.0010365517241, -0.0008470689655, -0.0003841379310, -0.0000158620690, -0.0000474137931, -0.0004577586207, -0.0010206896552, -0.0013681034483, -0.0012891379310, -0.0008470689655, -0.0002051724138, +0.0004262068966, +0.0009050000000, +0.0011786206897, +0.0012786206897, +0.0011312068966, +0.0006367241379, -0.0000789655172, -0.0006787931034, -0.0010050000000, -0.0010101724138, -0.0006998275862, -0.0002420689655, +0.0001315517241, +0.0003367241379, +0.0004208620690, +0.0004418965517, +0.0003787931034, +0.0000841379310, -0.0004525862069, -0.0011417241379, -0.0018153448276, -0.0023046551724, -0.0024729310345, -0.0022993103448, -0.0018205172414, -0.0011470689655, -0.0005524137931, -0.0003000000000, -0.0004841379310, -0.0011522413793, -0.0022625862069, -0.0034884482759, -0.0043618965517, -0.0044355172414, -0.0035043103448, -0.0018258620690, +0.0000263793103, +0.0015784482759, +0.0023677586207, +0.0021993103448, +0.0014784482759, +0.0007470689655, +0.0001946551724, -0.0002472413793, -0.0005629310345, -0.0006208620690, -0.0003420689655, +0.0001420689655, +0.0005944827586, +0.0008208620690, +0.0007418965517, +0.0004313793103, +0.0001789655172, +0.0002156896552, +0.0004313793103, +0.0006998275862, +0.0009629310345, +0.0011627586207, +0.0011417241379, +0.0008470689655, +0.0004262068966, +0.0000000000000, -0.0005051724138, -0.0011260344828, -0.0016468965517, -0.0018415517241, -0.0017310344828, -0.0014574137931, -0.0011206896552, -0.0008313793103, -0.0006524137931, -0.0005629310345, -0.0004577586207, -0.0002946551724, -0.0002156896552, -0.0003631034483, -0.0007682758621, -0.0012681034483, -0.0016415517241, -0.0017310344828, -0.0014417241379, -0.0007944827586, -0.0000158620690, +0.0005629310345, +0.0008681034483, +0.0010206896552, +0.0010206896552, +0.0007524137931, +0.0002946551724, -0.0001051724138, -0.0003105172414, -0.0003577586207, -0.0003787931034, -0.0005051724138, -0.0007893103448, -0.0010734482759, -0.0010260344828, -0.0004631034483, +0.0005367241379, +0.0016048275862, +0.0022413793103, +0.0020887931034, +0.0011996551724, +0.0000263793103, -0.0008891379310, -0.0012996551724, -0.0012417241379, -0.0008575862069, -0.0003105172414, +0.0002210344828, +0.0006682758621, +0.0011050000000, +0.0016468965517, +0.0022941379310, +0.0028412068966, +0.0030044827586, +0.0025939655172, +0.0015679310345, +0.0001210344828, -0.0012681034483, -0.0020836206897, -0.0021100000000, -0.0014468965517, -0.0003893103448, +0.0006156896552, +0.0011417241379, +0.0010260344828, +0.0005682758621, +0.0002156896552, +0.0001210344828, +0.0002367241379, +0.0005313793103, +0.0008681034483, +0.0010944827586, +0.0009996551724, +0.0003577586207, -0.0007629310345, -0.0018889655172, -0.0026518965517, -0.0029727586207, -0.0028096551724, -0.0021256896552, -0.0010417241379, +0.0001210344828, +0.0011155172414, +0.0016784482759, +0.0017363793103, +0.0014468965517, +0.0010470689655, +0.0007839655172, +0.0008681034483, +0.0012837931034, +0.0018363793103, +0.0023098275862, +0.0025360344828, +0.0023782758621, +0.0018100000000, +0.0010575862069, +0.0004631034483, +0.0001789655172, +0.0001367241379, +0.0001946551724, +0.0002262068966, +0.0002105172414, +0.0001579310345, +0.0001579310345, +0.0004262068966, +0.0011365517241, +0.0021887931034, +0.0030991379310, +0.0031465517241, +0.0020046551724, +0.0001262068966, -0.0015048275862, -0.0020362068966, -0.0012470689655, +0.0004736206897, +0.0024308620690, +0.0038094827586, +0.0039936206897, +0.0029622413793, +0.0013627586207, +0.0000684482759, -0.0002946551724, +0.0002367241379, +0.0011786206897, +0.0020887931034, +0.0024993103448, +0.0019046551724, +0.0005051724138, -0.0008524137931, -0.0014574137931, -0.0011522413793, -0.0002262068966, +0.0008839655172, +0.0017258620690, +0.0018994827586, +0.0013837931034, +0.0006103448276, +0.0003105172414, +0.0009629310345, +0.0022677586207, +0.0033358620690, +0.0034622413793, +0.0025255172414, +0.0008155172414, -0.0011470689655, -0.0027255172414, -0.0035253448276, -0.0032622413793, -0.0020205172414, -0.0006472413793, -0.0000263793103, -0.0001946551724, -0.0008103448276, -0.0016943103448, -0.0024782758621, -0.0025729310345, -0.0018836206897, -0.0009944827586, -0.0003998275862, -0.0000736206897, +0.0002051724138, +0.0004208620690, +0.0004631034483, +0.0003998275862, +0.0004787931034, +0.0006577586207, +0.0005472413793, -0.0000263793103, -0.0007998275862, -0.0013048275862, -0.0011786206897, -0.0004682758621, +0.0005156896552, +0.0013943103448, +0.0015732758621, +0.0007524137931, -0.0004893103448, -0.0012470689655, -0.0011050000000, -0.0001105172414, +0.0012365517241, +0.0021572413793, +0.0022677586207, +0.0015889655172, +0.0002420689655, -0.0013627586207, -0.0025098275862, -0.0026675862069, -0.0019100000000, -0.0008103448276, +0.0001051724138, +0.0006734482759, +0.0009260344828, +0.0009629310345, +0.0008891379310, +0.0007524137931, +0.0005944827586, +0.0004367241379, +0.0001894827586, -0.0001684482759, -0.0005262068966, -0.0008103448276, -0.0010260344828, -0.0011050000000, -0.0009786206897, -0.0006734482759, -0.0002787931034, +0.0001684482759, +0.0008418965517, +0.0017836206897, +0.0028044827586, +0.0037251724138, +0.0043093103448, +0.0043408620690, +0.0037725862069, +0.0026729310345, +0.0013732758621, +0.0002682758621, -0.0005367241379, -0.0009418965517, -0.0008575862069, -0.0005367241379, -0.0003105172414, -0.0004156896552, -0.0009103448276, -0.0016258620690, -0.0023572413793, -0.0028201724138, -0.0027150000000, -0.0019256896552, -0.0007103448276, +0.0004736206897, +0.0012050000000, +0.0012943103448, +0.0009260344828, +0.0002946551724, -0.0004631034483, -0.0011417241379, -0.0016048275862, -0.0019151724138, -0.0021625862069, -0.0023203448276, -0.0021415517241, -0.0013101724138, +0.0001156896552, +0.0017205172414, +0.0029781034483, +0.0035410344828, +0.0033358620690, +0.0024834482759, +0.0010891379310, -0.0005418965517, -0.0019100000000, -0.0027413793103, -0.0031622413793, -0.0033201724138, -0.0033253448276, -0.0031412068966, -0.0026993103448, -0.0020994827586, -0.0014889655172, -0.0009629310345, -0.0006682758621, -0.0006682758621, -0.0009103448276, -0.0012837931034, -0.0014732758621, -0.0012943103448, -0.0009681034483, -0.0006051724138, -0.0001367241379, +0.0002525862069, +0.0002472413793, -0.0002315517241, -0.0010050000000, -0.0017363793103, -0.0021677586207, -0.0022256896552, -0.0018836206897, -0.0011206896552, -0.0002156896552, +0.0004367241379, +0.0006944827586, +0.0007524137931, +0.0008313793103, +0.0009365517241, +0.0010206896552, +0.0010524137931, +0.0010575862069, +0.0010260344828, +0.0009155172414, +0.0007734482759, +0.0005734482759, +0.0001841379310, -0.0003998275862, -0.0010681034483, -0.0015574137931, -0.0015943103448, -0.0011837931034, -0.0005998275862, -0.0000789655172, +0.0003472413793, +0.0007313793103, +0.0010206896552, +0.0010839655172, +0.0008681034483, +0.0004418965517, -0.0000105172414, -0.0003893103448, -0.0007577586207, -0.0011522413793, -0.0013522413793, -0.0011522413793, -0.0006262068966, -0.0000525862069, +0.0003472413793, +0.0006367241379, +0.0007734482759, +0.0006156896552, +0.0003051724138, +0.0001420689655, +0.0001894827586, +0.0003841379310, +0.0005944827586, +0.0005682758621, +0.0002156896552, -0.0003736206897, -0.0010944827586, -0.0016627586207, -0.0018363793103, -0.0017468965517, -0.0015784482759, -0.0012681034483, -0.0008155172414, -0.0003367241379, -0.0000474137931, -0.0001315517241, -0.0004841379310, -0.0008629310345, -0.0011101724138, -0.0010417241379, -0.0005839655172, -0.0000210344828, +0.0002946551724, +0.0002577586207, -0.0000841379310, -0.0006208620690, -0.0012155172414, -0.0017100000000, -0.0019889655172, -0.0019046551724, -0.0013996551724, -0.0006208620690, +0.0001579310345, +0.0007577586207, +0.0010734482759, +0.0010417241379, +0.0007418965517, +0.0003472413793, +0.0001000000000, +0.0000158620690, +0.0000105172414, +0.0001315517241, +0.0002367241379, +0.0000263793103, -0.0005156896552, -0.0011312068966, -0.0016522413793, -0.0019836206897, -0.0021151724138, -0.0020151724138, -0.0016679310345, -0.0012837931034, -0.0010891379310, -0.0009944827586, -0.0007577586207, -0.0003420689655, +0.0000736206897, +0.0002631034483, +0.0001315517241, -0.0001894827586, -0.0005734482759, -0.0009524137931, -0.0013048275862, -0.0015522413793, -0.0016153448276, -0.0014522413793, -0.0010524137931, -0.0004156896552, +0.0003156896552, +0.0009260344828, +0.0011943103448, +0.0010312068966, +0.0006208620690, +0.0002577586207, +0.0002156896552, +0.0005051724138, +0.0008891379310, +0.0012206896552, +0.0014101724138, +0.0012891379310, +0.0008260344828, +0.0001894827586, -0.0004208620690, -0.0009839655172, -0.0015994827586, -0.0020941379310, -0.0020941379310, -0.0016048275862, -0.0009681034483, -0.0004525862069, -0.0001156896552, +0.0001156896552, +0.0003105172414, +0.0004418965517, +0.0004577586207, +0.0003577586207, +0.0001367241379, -0.0001946551724, -0.0006051724138, -0.0009208620690, -0.0008891379310, -0.0003525862069, +0.0005577586207, +0.0014837931034, +0.0019941379310, +0.0018994827586, +0.0013101724138, +0.0005682758621, +0.0001315517241, +0.0002631034483, +0.0008418965517, +0.0014837931034, +0.0018363793103, +0.0017520689655, +0.0012996551724, +0.0006313793103, +0.0000053448276, -0.0003525862069, -0.0005051724138, -0.0006156896552, -0.0007470689655, -0.0008998275862, -0.0010155172414, -0.0009629310345, -0.0007734482759, -0.0005418965517, -0.0002841379310, -0.0000736206897, -0.0000105172414, -0.0000105172414, +0.0000525862069, +0.0002577586207, +0.0006682758621, +0.0012575862069, +0.0017415517241, +0.0017994827586, +0.0015101724138, +0.0011470689655, +0.0009155172414, +0.0009786206897, +0.0014153448276, +0.0020205172414, +0.0024834482759, +0.0026413793103, +0.0025098275862, +0.0022887931034, +0.0020941379310, +0.0019046551724, +0.0017574137931, +0.0016732758621, +0.0015784482759, +0.0013837931034, +0.0010944827586, +0.0008734482759, +0.0008524137931, +0.0009575862069, +0.0009734482759, +0.0007418965517, +0.0003105172414, -0.0001631034483, -0.0005472413793, -0.0007208620690, -0.0005998275862, -0.0002315517241, +0.0002000000000, +0.0005156896552, +0.0006367241379, +0.0006103448276, +0.0005472413793, +0.0005103448276, +0.0004577586207, +0.0004525862069, +0.0005524137931, +0.0007155172414, +0.0008944827586, +0.0011365517241, +0.0013312068966, +0.0013681034483, +0.0012522413793, +0.0010734482759, +0.0009365517241, +0.0008470689655, +0.0007103448276, +0.0005051724138, +0.0003315517241, +0.0002893103448, +0.0004103448276, +0.0005524137931, +0.0005944827586, +0.0005524137931, +0.0004313793103, +0.0001736206897, -0.0001841379310, -0.0004525862069, -0.0005156896552, -0.0004631034483, -0.0003051724138, -0.0000263793103, +0.0002682758621, +0.0005787931034, +0.0008681034483, +0.0008786206897, +0.0005682758621, +0.0002841379310, +0.0002000000000, +0.0001736206897, +0.0001156896552, +0.0000263793103, -0.0000579310345, -0.0001051724138, -0.0001000000000, -0.0000579310345, +0.0000315517241, +0.0001789655172, +0.0002841379310, +0.0002105172414, -0.0000789655172, -0.0004525862069, -0.0007524137931, -0.0009208620690, -0.0009260344828, -0.0008155172414, -0.0006998275862, -0.0005156896552, -0.0002105172414, +0.0001262068966, +0.0003631034483, +0.0004313793103, +0.0003000000000, -0.0000368965517, -0.0005682758621, -0.0011206896552, -0.0014574137931, -0.0014468965517, -0.0010312068966, -0.0003682758621, +0.0002262068966, +0.0005472413793, +0.0005367241379, +0.0002156896552, -0.0002472413793, -0.0005893103448, -0.0005998275862, -0.0003210344828, +0.0001051724138, +0.0005418965517, +0.0007998275862, +0.0008208620690, +0.0007787931034, +0.0008944827586, +0.0011312068966, +0.0012943103448, +0.0013153448276, +0.0011891379310, +0.0008839655172, +0.0004472413793, +0.0000315517241, -0.0001631034483, -0.0000579310345, +0.0002736206897, +0.0005998275862, +0.0007155172414, +0.0005577586207, +0.0002105172414, -0.0001579310345, -0.0003787931034, -0.0003946551724, -0.0003156896552, -0.0001684482759, +0.0000000000000, +0.0001051724138, +0.0002000000000, +0.0003367241379, +0.0004156896552, +0.0004051724138, +0.0003736206897, +0.0003367241379, +0.0002472413793, +0.0000684482759, -0.0001841379310, -0.0004208620690, -0.0004893103448, -0.0003472413793, -0.0000841379310, +0.0001631034483, +0.0003420689655, +0.0004156896552, +0.0003736206897, +0.0002841379310, +0.0002210344828, +0.0001894827586, +0.0001841379310, +0.0001684482759, +0.0001525862069, +0.0002000000000, +0.0003577586207, +0.0005472413793, +0.0006629310345, +0.0006313793103, +0.0005051724138, +0.0003631034483, +0.0002156896552, +0.0000789655172, +0.0000525862069, +0.0001262068966, +0.0001420689655, +0.0000158620690, -0.0001631034483, -0.0002736206897, -0.0002525862069, -0.0001000000000, +0.0001525862069, +0.0003787931034, +0.0003367241379, -0.0000158620690, -0.0005734482759, -0.0011575862069, -0.0014889655172, -0.0013417241379, -0.0008260344828, -0.0002315517241, +0.0002787931034, +0.0006051724138, +0.0006944827586, +0.0006313793103, +0.0005577586207, +0.0005418965517, +0.0005682758621, +0.0004998275862, +0.0002631034483, -0.0000525862069, -0.0002893103448, -0.0003315517241, -0.0001631034483, +0.0001946551724, +0.0005524137931, +0.0006787931034, +0.0005367241379, +0.0002525862069, -0.0000789655172, -0.0003577586207, -0.0004525862069, -0.0003367241379, -0.0001631034483, -0.0000474137931, -0.0000684482759, -0.0002315517241, -0.0004472413793, -0.0006103448276, -0.0007260344828, -0.0007787931034, -0.0007418965517, -0.0005998275862, -0.0002787931034, +0.0001946551724, +0.0006893103448, +0.0010155172414, +0.0011155172414, +0.0010101724138, +0.0006998275862, +0.0001736206897, -0.0004156896552, -0.0008208620690, -0.0008418965517, -0.0005156896552, -0.0001210344828, +0.0000946551724, +0.0001736206897, +0.0001789655172, +0.0001472413793, +0.0001367241379, +0.0001789655172, +0.0002210344828, +0.0001894827586, +0.0000368965517, -0.0002262068966, -0.0005367241379, -0.0008208620690, -0.0011417241379, -0.0014732758621, -0.0016468965517, -0.0015101724138, -0.0010996551724, -0.0006682758621, -0.0004262068966, -0.0003998275862, -0.0004787931034, -0.0005839655172, -0.0007577586207, -0.0009996551724, -0.0012050000000, -0.0013101724138, -0.0013153448276, -0.0011732758621, -0.0008470689655, -0.0004367241379, -0.0000946551724, +0.0001210344828, +0.0001841379310, +0.0000000000000, -0.0004156896552, -0.0008839655172, -0.0011417241379, -0.0010629310345, -0.0008050000000, -0.0006051724138, -0.0005418965517, -0.0005472413793, -0.0005472413793, -0.0004998275862, -0.0004262068966, -0.0003946551724, -0.0004841379310, -0.0007260344828, -0.0010312068966, -0.0013153448276, -0.0014943103448, -0.0014784482759, -0.0012260344828, -0.0008629310345, -0.0005472413793, -0.0003682758621, -0.0003420689655, -0.0004103448276, -0.0004946551724, -0.0005313793103, -0.0005472413793, -0.0006103448276, -0.0007208620690, -0.0008050000000, -0.0007682758621, -0.0006418965517, -0.0005629310345, -0.0005893103448, -0.0006524137931, -0.0007313793103, -0.0008103448276, -0.0008313793103, -0.0007524137931, -0.0005998275862, -0.0003998275862, -0.0002315517241, -0.0001684482759, -0.0002472413793, -0.0004262068966, -0.0005524137931, -0.0005577586207, -0.0004787931034, -0.0004262068966, -0.0004787931034, -0.0005682758621, -0.0005418965517, -0.0003946551724, -0.0002156896552, -0.0001000000000, -0.0001367241379, -0.0003998275862, -0.0008944827586, -0.0014206896552, -0.0017048275862, -0.0016415517241, -0.0012627586207, -0.0006682758621, -0.0000525862069, +0.0003841379310, +0.0005208620690, +0.0003315517241, -0.0000474137931, -0.0004103448276, -0.0006313793103, -0.0007944827586, -0.0009734482759, -0.0010734482759, -0.0009786206897, -0.0007208620690, -0.0003105172414, +0.0001525862069, +0.0004367241379, +0.0003893103448, +0.0001000000000, -0.0002420689655, -0.0004998275862, -0.0005472413793, -0.0003000000000, +0.0002210344828, +0.0008155172414, +0.0011312068966, +0.0010155172414, +0.0005893103448, +0.0000158620690, -0.0005734482759, -0.0009839655172, -0.0009891379310, -0.0005787931034, +0.0000053448276, +0.0005208620690, +0.0008103448276, +0.0008260344828, +0.0005524137931, +0.0001631034483, -0.0001210344828, -0.0001525862069, +0.0000946551724, +0.0005734482759, +0.0011101724138, +0.0014889655172, +0.0015153448276, +0.0011417241379, +0.0004577586207, -0.0003105172414, -0.0007944827586, -0.0007629310345, -0.0003315517241, +0.0002156896552, +0.0006998275862, +0.0010524137931, +0.0011522413793, +0.0009260344828, +0.0004841379310, +0.0000841379310, -0.0001210344828, -0.0001367241379, -0.0000263793103, +0.0001367241379, +0.0002736206897, +0.0003367241379, +0.0003210344828, +0.0002210344828, +0.0001472413793, +0.0001579310345, +0.0001631034483, +0.0000579310345, -0.0001210344828, -0.0002367241379, -0.0002051724138, -0.0000525862069, +0.0001262068966, +0.0002631034483, +0.0003631034483, +0.0004367241379, +0.0004472413793, +0.0003736206897, +0.0003000000000, +0.0003525862069, +0.0005103448276, +0.0006262068966, +0.0006208620690, +0.0005472413793, +0.0003946551724, +0.0001789655172, +0.0000420689655, +0.0001315517241, +0.0003577586207, +0.0005367241379, +0.0005734482759, +0.0005367241379, +0.0005472413793, +0.0005893103448, +0.0005998275862, +0.0005524137931, +0.0004682758621, +0.0003105172414, +0.0001156896552, +0.0000053448276, +0.0000894827586, +0.0002893103448, +0.0004262068966, +0.0004367241379, +0.0003156896552, +0.0001525862069, +0.0000053448276, -0.0001315517241, -0.0002525862069, -0.0002787931034, -0.0001579310345, +0.0001051724138, +0.0004525862069, +0.0007313793103, +0.0008786206897, +0.0009050000000, +0.0008155172414, +0.0005998275862, +0.0003210344828, +0.0000894827586, -0.0000841379310, -0.0002051724138, -0.0002156896552, -0.0001210344828, +0.0000000000000, +0.0001210344828, +0.0002420689655, +0.0003472413793, +0.0004736206897, +0.0006103448276, +0.0006472413793, +0.0004682758621, +0.0001156896552, -0.0002105172414, -0.0003841379310, -0.0003787931034, -0.0002682758621, -0.0001420689655, -0.0000263793103, +0.0000263793103, -0.0000053448276, -0.0001420689655, -0.0002946551724, -0.0003577586207, -0.0002946551724, -0.0001210344828, +0.0001525862069, +0.0004682758621, +0.0007208620690, +0.0007998275862, +0.0006629310345, +0.0003893103448, +0.0001262068966, -0.0000105172414, +0.0000210344828, +0.0002051724138, +0.0003998275862, +0.0004998275862, +0.0004736206897, +0.0002946551724, -0.0000158620690, -0.0003577586207, -0.0005682758621, -0.0005682758621, -0.0003631034483, -0.0000105172414, +0.0003525862069, +0.0005629310345, +0.0005682758621, +0.0004156896552, +0.0001946551724, -0.0000579310345, -0.0003210344828, -0.0005208620690, -0.0005893103448, -0.0005577586207, -0.0004893103448, -0.0003998275862, -0.0003000000000, -0.0002051724138, -0.0001367241379, -0.0000841379310, +0.0000000000000, +0.0001525862069, +0.0003787931034, +0.0006262068966, +0.0007787931034, +0.0007313793103, +0.0004787931034, +0.0001051724138, -0.0001684482759, -0.0001420689655, +0.0001631034483, +0.0005262068966, +0.0007577586207, +0.0007629310345, +0.0005208620690, +0.0001105172414, -0.0002946551724, -0.0005313793103, -0.0004893103448, -0.0002105172414, +0.0001420689655, +0.0004262068966, +0.0005629310345, +0.0005156896552, +0.0002946551724, +0.0000105172414, -0.0001841379310, -0.0002420689655, -0.0002367241379, -0.0002682758621, -0.0003156896552, -0.0002841379310, -0.0001579310345, +0.0000525862069, +0.0003420689655, +0.0005998275862, +0.0005944827586, +0.0002262068966, -0.0003156896552, -0.0007208620690, -0.0007998275862, -0.0005208620690, +0.0000579310345, +0.0007734482759, +0.0012996551724, +0.0013786206897, +0.0010260344828, +0.0004472413793, -0.0001105172414, -0.0004841379310, -0.0005787931034, -0.0004051724138, -0.0000525862069, +0.0002946551724, +0.0004893103448, +0.0005262068966, +0.0004787931034, +0.0003525862069, +0.0002000000000, +0.0000894827586, +0.0000105172414, -0.0000525862069, -0.0000158620690, +0.0001631034483, +0.0004156896552, +0.0006629310345, +0.0008839655172, +0.0010629310345, +0.0011101724138, +0.0009629310345, +0.0006208620690, +0.0001472413793, -0.0003525862069, -0.0007893103448, -0.0010312068966, -0.0009524137931, -0.0005893103448, -0.0001367241379, +0.0002736206897, +0.0006367241379, +0.0008944827586, +0.0009470689655, +0.0007893103448, +0.0005629310345, +0.0003787931034, +0.0002472413793, +0.0002051724138, +0.0002893103448, +0.0004208620690, +0.0004525862069, +0.0003893103448, +0.0003631034483, +0.0004156896552, +0.0004893103448, +0.0005472413793, +0.0006208620690, +0.0006156896552, +0.0003946551724, -0.0000631034483, -0.0006787931034, -0.0012155172414, -0.0014206896552, -0.0011206896552, -0.0002682758621, +0.0009470689655, +0.0020467241379, +0.0024046551724, +0.0017468965517, +0.0003262068966, -0.0013101724138, -0.0024782758621, -0.0024834482759, -0.0011365517241, +0.0009418965517, +0.0027308620690, +0.0033937931034, +0.0027255172414, +0.0010365517241, -0.0010996551724, -0.0028939655172, -0.0035463793103, -0.0028360344828, -0.0013101724138, +0.0001631034483, +0.0009681034483, +0.0009734482759, +0.0004367241379, -0.0002736206897, -0.0008734482759, -0.0010734482759, -0.0007893103448, -0.0002472413793, +0.0002000000000, +0.0003631034483, +0.0002210344828, -0.0001210344828, -0.0005103448276, -0.0007787931034, -0.0008365517241, -0.0007208620690, -0.0005629310345, -0.0004893103448, -0.0005051724138, -0.0004946551724, -0.0003736206897, -0.0002000000000, -0.0000474137931, +0.0001051724138, +0.0003156896552, +0.0005262068966, +0.0006418965517, +0.0005944827586, +0.0003367241379, -0.0000894827586, -0.0004631034483, -0.0005998275862, -0.0004682758621, -0.0000946551724, +0.0003736206897, +0.0007734482759, +0.0009575862069, +0.0008629310345, +0.0005262068966, +0.0000841379310, -0.0002682758621, -0.0003736206897, -0.0001894827586, +0.0001210344828, +0.0003420689655, +0.0004631034483, +0.0004841379310, +0.0003367241379, +0.0000053448276, -0.0003051724138, -0.0004313793103, -0.0003841379310, -0.0002631034483, -0.0001420689655, -0.0000684482759, -0.0000736206897, -0.0001525862069, -0.0002841379310, -0.0003262068966, -0.0001051724138, +0.0003262068966, +0.0007998275862, +0.0011470689655, +0.0011996551724, +0.0007944827586, +0.0001156896552, -0.0004313793103, -0.0005524137931, -0.0002736206897, +0.0001367241379, +0.0003736206897, +0.0003315517241, +0.0001105172414, -0.0001210344828, -0.0002156896552, -0.0001156896552, +0.0001472413793, +0.0004946551724, +0.0007365517241, +0.0006418965517, +0.0001472413793, -0.0005524137931, -0.0011365517241, -0.0013206896552, -0.0009629310345, -0.0002051724138, +0.0005629310345, +0.0009891379310, +0.0009470689655, +0.0005682758621, +0.0001105172414, -0.0001472413793, -0.0000158620690, +0.0004631034483, +0.0010101724138, +0.0013837931034, +0.0014784482759, +0.0013312068966, +0.0010470689655, +0.0007050000000, +0.0003367241379, +0.0000210344828, -0.0001472413793, -0.0002262068966, -0.0002420689655, -0.0001367241379, +0.0001420689655, +0.0005367241379, +0.0008786206897, +0.0010786206897, +0.0011101724138, +0.0009313793103, +0.0005682758621, +0.0001946551724, -0.0000053448276, -0.0000315517241, +0.0000263793103, +0.0000894827586, +0.0000841379310, -0.0000579310345, -0.0003105172414, -0.0005472413793, -0.0006103448276, -0.0004103448276, -0.0000789655172, +0.0001841379310, +0.0003315517241, +0.0003787931034, +0.0003367241379, +0.0003051724138, +0.0004103448276, +0.0005313793103, +0.0004998275862, +0.0002893103448, -0.0000579310345, -0.0004893103448, -0.0008944827586, -0.0011050000000, -0.0009050000000, -0.0003051724138, +0.0003893103448, +0.0009365517241, +0.0011996551724, +0.0010681034483, +0.0005893103448, +0.0000420689655, -0.0002736206897, -0.0002631034483, -0.0000579310345, +0.0001156896552, +0.0001736206897, +0.0000894827586, -0.0001789655172, -0.0005524137931, -0.0008260344828, -0.0008629310345, -0.0006734482759, -0.0003420689655, +0.0000368965517, +0.0003946551724, +0.0005839655172, +0.0005787931034, +0.0004998275862, +0.0004208620690, +0.0002946551724, +0.0001525862069, +0.0001105172414, +0.0001472413793, +0.0001262068966, -0.0000053448276, -0.0002105172414, -0.0003736206897, -0.0004525862069, -0.0004682758621, -0.0004313793103, -0.0003315517241, -0.0001684482759, +0.0000736206897, +0.0004367241379, +0.0007998275862, +0.0009944827586, +0.0009208620690, +0.0006262068966, +0.0002051724138, -0.0002472413793, -0.0006524137931, -0.0008734482759, -0.0008418965517, -0.0006524137931, -0.0004208620690, -0.0002420689655, -0.0001946551724, -0.0003841379310, -0.0008050000000, -0.0012575862069, -0.0015417241379, -0.0015784482759, -0.0012996551724, -0.0007524137931, -0.0001631034483, +0.0002631034483, +0.0004577586207, +0.0004208620690, +0.0001631034483, -0.0002631034483, -0.0007524137931, -0.0011732758621, -0.0014679310345, -0.0016100000000, -0.0015837931034, -0.0014784482759, -0.0013837931034, -0.0012943103448, -0.0010944827586, -0.0007260344828, -0.0002682758621, +0.0001315517241, +0.0004262068966, +0.0005944827586, +0.0005682758621, +0.0003946551724, +0.0002210344828, +0.0001894827586, +0.0002736206897, +0.0003577586207, +0.0003787931034, +0.0003315517241, +0.0002315517241, +0.0000315517241, -0.0002262068966, -0.0003787931034, -0.0002787931034, -0.0000105172414, +0.0002472413793, +0.0003787931034, +0.0003051724138, +0.0000315517241, -0.0002946551724, -0.0005103448276, -0.0004525862069, -0.0001156896552, +0.0002841379310, +0.0005208620690, +0.0005262068966, +0.0004051724138, +0.0002210344828, +0.0000105172414, -0.0001841379310, -0.0003367241379, -0.0003420689655, -0.0001579310345, +0.0000631034483, +0.0001105172414, -0.0001367241379, -0.0005893103448, -0.0009839655172, -0.0010839655172, -0.0007787931034, -0.0001315517241, +0.0005577586207, +0.0009575862069, +0.0009050000000, +0.0004631034483, -0.0001525862069, -0.0006839655172, -0.0009155172414, -0.0007629310345, -0.0002787931034, +0.0003262068966, +0.0008208620690, +0.0010470689655, +0.0009839655172, +0.0006839655172, +0.0002893103448, -0.0000420689655, -0.0002631034483, -0.0003420689655, -0.0003000000000, -0.0002051724138, -0.0001684482759, -0.0002262068966, -0.0003682758621, -0.0005524137931, -0.0007208620690, -0.0008103448276, -0.0007734482759, -0.0005682758621, -0.0001841379310, +0.0002682758621, +0.0005577586207, +0.0005524137931, +0.0003051724138, -0.0000368965517, -0.0003367241379, -0.0005051724138, -0.0005367241379, -0.0004841379310, -0.0004367241379, -0.0004313793103, -0.0003998275862, -0.0003262068966, -0.0002315517241, -0.0001156896552, +0.0000263793103, +0.0000841379310, -0.0000525862069, -0.0003682758621, -0.0006944827586, -0.0008944827586, -0.0009524137931, -0.0009103448276, -0.0007208620690, -0.0004156896552, -0.0001894827586, -0.0001841379310, -0.0003577586207, -0.0005472413793, -0.0006577586207, -0.0006577586207, -0.0005156896552, -0.0002736206897, -0.0000474137931, +0.0000315517241, -0.0000579310345, -0.0002051724138, -0.0002946551724, -0.0002787931034, -0.0001684482759, +0.0000105172414, +0.0001525862069, +0.0001262068966, -0.0000525862069, -0.0002420689655, -0.0003156896552, -0.0002210344828, +0.0000053448276, +0.0002210344828, +0.0002841379310, +0.0001156896552, -0.0002315517241, -0.0006103448276, -0.0008365517241, -0.0008418965517, -0.0006682758621, -0.0003841379310, -0.0001105172414, -0.0000158620690, -0.0001789655172, -0.0005418965517, -0.0009313793103, -0.0011206896552, -0.0010312068966, -0.0007839655172, -0.0005682758621, -0.0004841379310, -0.0005208620690, -0.0005944827586, -0.0006051724138, -0.0005367241379, -0.0004051724138, -0.0002577586207, -0.0001210344828, -0.0000210344828, +0.0000053448276, -0.0000420689655, -0.0001367241379, -0.0001894827586, -0.0001684482759, -0.0000841379310, +0.0000210344828, +0.0001051724138, +0.0001105172414, +0.0000631034483, +0.0000368965517, +0.0001000000000, +0.0002893103448, +0.0005472413793, +0.0007577586207, +0.0008103448276, +0.0006787931034, +0.0004367241379, +0.0001789655172, -0.0000158620690, -0.0001367241379, -0.0002105172414, -0.0002841379310, -0.0003893103448, -0.0004736206897, -0.0004841379310, -0.0004156896552, -0.0003367241379, -0.0002787931034, -0.0002682758621, -0.0002736206897, -0.0002946551724, -0.0003525862069, -0.0004262068966, -0.0004156896552, -0.0002736206897, -0.0000579310345, +0.0001579310345, +0.0003841379310, +0.0005839655172, +0.0006472413793, +0.0005156896552, +0.0002736206897, +0.0000368965517, -0.0002156896552, -0.0005367241379, -0.0008470689655, -0.0010260344828, -0.0009629310345, -0.0006367241379, -0.0001105172414, +0.0004262068966, +0.0007682758621, +0.0008050000000, +0.0006051724138, +0.0003210344828, +0.0000946551724, -0.0000105172414, +0.0000105172414, +0.0001579310345, +0.0003631034483, +0.0004998275862, +0.0004946551724, +0.0003841379310, +0.0002682758621, +0.0002367241379, +0.0002420689655, +0.0001789655172, -0.0000158620690, -0.0002946551724, -0.0005208620690, -0.0005313793103, -0.0002367241379, +0.0002420689655, +0.0006734482759, +0.0009260344828, +0.0009313793103, +0.0007155172414, +0.0003946551724, +0.0001262068966, +0.0000263793103, +0.0001156896552, +0.0002841379310, +0.0003893103448, +0.0004156896552, +0.0004472413793, +0.0004946551724, +0.0005262068966, +0.0005472413793, +0.0005787931034, +0.0005787931034, +0.0004472413793, +0.0002000000000, +0.0000158620690, +0.0000525862069, +0.0002946551724, +0.0005577586207, +0.0006839655172, +0.0005839655172, +0.0002367241379, -0.0002472413793, -0.0006577586207, -0.0007734482759, -0.0004946551724, +0.0000579310345, +0.0006577586207, +0.0010629310345, +0.0011732758621, +0.0010470689655, +0.0007787931034, +0.0004631034483, +0.0002156896552, +0.0001315517241, +0.0002051724138, +0.0003682758621, +0.0005472413793, +0.0006629310345, +0.0006944827586, +0.0006682758621, +0.0006208620690, +0.0005051724138, +0.0003000000000, +0.0000789655172, -0.0000263793103, +0.0000053448276, +0.0001736206897, +0.0003998275862, +0.0005734482759, +0.0006313793103, +0.0005577586207, +0.0004051724138, +0.0002736206897, +0.0002472413793, +0.0002893103448, +0.0003156896552, +0.0002787931034, +0.0001841379310, +0.0001210344828, +0.0001315517241, +0.0001894827586, +0.0002315517241, +0.0002577586207, +0.0002525862069, +0.0001789655172, +0.0000315517241, -0.0001105172414, -0.0001525862069, -0.0000631034483, +0.0000946551724, +0.0002472413793, +0.0002946551724, +0.0002315517241, +0.0001367241379, +0.0000841379310, +0.0000789655172, +0.0001000000000, +0.0001262068966, +0.0001051724138, +0.0000315517241, -0.0000525862069, -0.0000525862069, +0.0000684482759, +0.0003156896552, +0.0006313793103, +0.0008839655172, +0.0009524137931, +0.0008208620690, +0.0005629310345, +0.0002682758621, +0.0000263793103, -0.0000631034483, +0.0000000000000, +0.0001525862069, +0.0002841379310, +0.0003262068966, +0.0003156896552, +0.0003367241379, +0.0003525862069, +0.0003105172414, +0.0002420689655, +0.0002051724138, +0.0002210344828, +0.0002577586207, +0.0003000000000, +0.0003525862069, +0.0004631034483, +0.0006472413793, +0.0008575862069, +0.0009944827586, +0.0010101724138, +0.0009260344828, +0.0007629310345, +0.0005262068966, +0.0002472413793, +0.0000000000000, -0.0001841379310, -0.0002893103448, -0.0003000000000, -0.0002105172414, -0.0000105172414, +0.0002787931034, +0.0006262068966, +0.0009260344828, +0.0010524137931, +0.0009470689655, +0.0006682758621, +0.0003051724138, -0.0000420689655, -0.0002787931034, -0.0003577586207, -0.0003262068966, -0.0002631034483, -0.0002262068966, -0.0002210344828, -0.0002367241379, -0.0002525862069, -0.0002420689655, -0.0001579310345, +0.0000000000000, +0.0001472413793, +0.0001684482759, +0.0000420689655, -0.0001000000000, -0.0002210344828, -0.0003210344828, -0.0003736206897, -0.0003315517241, -0.0001684482759, +0.0000736206897, +0.0003210344828, +0.0004841379310, +0.0005577586207, +0.0005472413793, +0.0004525862069, +0.0002736206897, +0.0000579310345, -0.0001000000000, -0.0001210344828, -0.0000420689655, +0.0000525862069, +0.0001579310345, +0.0002577586207, +0.0002631034483, +0.0001210344828, -0.0001210344828, -0.0003631034483, -0.0005103448276, -0.0005577586207, -0.0005472413793, -0.0004946551724, -0.0004208620690, -0.0003051724138, -0.0001684482759, -0.0000210344828, +0.0001105172414, +0.0001684482759, +0.0000946551724, -0.0000789655172, -0.0002315517241, -0.0002736206897, -0.0002210344828, -0.0001367241379, -0.0000525862069, +0.0000474137931, +0.0001472413793, +0.0002000000000, +0.0001736206897, +0.0000631034483, -0.0001210344828, -0.0003420689655, -0.0004998275862, -0.0005418965517, -0.0005208620690, -0.0004631034483, -0.0003525862069, -0.0001736206897, +0.0000420689655, +0.0002105172414, +0.0002210344828, +0.0000368965517, -0.0002736206897, -0.0005629310345, -0.0007260344828, -0.0007208620690, -0.0005524137931, -0.0002787931034, +0.0000368965517, +0.0002946551724, +0.0003893103448, +0.0002787931034, +0.0000420689655, -0.0002262068966, -0.0004208620690, -0.0004682758621, -0.0004051724138, -0.0002682758621, -0.0000789655172, +0.0001210344828, +0.0002841379310, +0.0003893103448, +0.0004577586207, +0.0004418965517, +0.0003210344828, +0.0001525862069, +0.0000210344828, -0.0000158620690, +0.0000000000000, +0.0000420689655, +0.0001262068966, +0.0002051724138, +0.0001579310345, +0.0000000000000, -0.0001631034483, -0.0002315517241, -0.0002156896552, -0.0001894827586, -0.0001367241379, -0.0000420689655, +0.0000210344828, -0.0000368965517, -0.0002156896552, -0.0004262068966, -0.0005893103448, -0.0006577586207, -0.0006262068966, -0.0004998275862, -0.0003262068966, -0.0001684482759, -0.0000736206897, -0.0000210344828, +0.0000315517241, +0.0000946551724, +0.0001000000000, +0.0000000000000, -0.0001315517241, -0.0002472413793, -0.0003210344828, -0.0003682758621, -0.0003577586207, -0.0002631034483, -0.0001736206897, -0.0001525862069, -0.0001946551724, -0.0002787931034, -0.0003787931034, -0.0004103448276, -0.0003787931034, -0.0003315517241, -0.0002841379310, -0.0002841379310, -0.0003682758621, -0.0004893103448, -0.0005262068966, -0.0003998275862, -0.0001736206897, +0.0000315517241, +0.0001367241379, +0.0001156896552, -0.0000053448276, -0.0001789655172, -0.0003736206897, -0.0005524137931, -0.0006577586207, -0.0006577586207, -0.0005998275862, -0.0005313793103, -0.0004577586207, -0.0003577586207, -0.0002051724138, -0.0000210344828, +0.0001472413793, +0.0002736206897, +0.0003000000000, +0.0002315517241, +0.0001105172414, -0.0000263793103, -0.0001472413793, -0.0002051724138, -0.0001841379310, -0.0001262068966, -0.0000736206897, -0.0000579310345, -0.0000684482759, -0.0001051724138, -0.0001789655172, -0.0002787931034, -0.0003577586207, -0.0003736206897, -0.0003156896552, -0.0001894827586, -0.0000105172414, +0.0001631034483, +0.0002525862069, +0.0002000000000, +0.0000684482759, -0.0000368965517, -0.0001000000000, -0.0000946551724, +0.0000210344828, +0.0002105172414, +0.0003156896552, +0.0002577586207, +0.0000789655172, -0.0001105172414, -0.0002682758621, -0.0003525862069, -0.0003420689655, -0.0002525862069, -0.0001684482759, -0.0001789655172, -0.0002946551724, -0.0004051724138, -0.0004262068966, -0.0003262068966, -0.0001156896552, +0.0001262068966, +0.0003000000000, +0.0003156896552, +0.0001684482759, -0.0000579310345, -0.0002631034483, -0.0003105172414, -0.0001525862069, +0.0000789655172, +0.0002262068966, +0.0002156896552, +0.0001000000000, -0.0000474137931, -0.0001841379310, -0.0002631034483, -0.0002315517241, -0.0001051724138, +0.0000210344828, +0.0001000000000, +0.0001156896552, +0.0000789655172, -0.0000263793103, -0.0001894827586, -0.0003315517241, -0.0003893103448, -0.0003367241379, -0.0002051724138, -0.0000420689655, +0.0000579310345, +0.0000579310345, -0.0000105172414, -0.0001156896552, -0.0002262068966, -0.0003262068966, -0.0003525862069, -0.0002525862069, -0.0000420689655, +0.0002000000000, +0.0003841379310, +0.0004736206897, +0.0004156896552, +0.0001525862069, -0.0002210344828, -0.0005472413793, -0.0007103448276, -0.0007103448276, -0.0005944827586, -0.0003998275862, -0.0001579310345, +0.0000525862069, +0.0001579310345, +0.0000946551724, -0.0000841379310, -0.0002841379310, -0.0003841379310, -0.0003420689655, -0.0001472413793, +0.0001789655172, +0.0005577586207, +0.0008524137931, +0.0009418965517, +0.0007839655172, +0.0004208620690, -0.0000158620690, -0.0003525862069, -0.0004577586207, -0.0003577586207, -0.0001472413793, +0.0000789655172, +0.0002631034483, +0.0003420689655, +0.0003420689655, +0.0003262068966, +0.0003472413793, +0.0003841379310, +0.0003893103448, +0.0003156896552, +0.0001841379310, +0.0000946551724, +0.0001156896552, +0.0002367241379, +0.0004103448276, +0.0005524137931, +0.0005787931034, +0.0004472413793, +0.0002210344828, +0.0000158620690, -0.0000631034483, -0.0000053448276, +0.0001525862069, +0.0003210344828, +0.0004103448276, +0.0003736206897, +0.0002156896552, +0.0000000000000, -0.0002262068966, -0.0004208620690, -0.0004998275862, -0.0004313793103, -0.0002525862069, -0.0000210344828, +0.0001946551724, +0.0003315517241, +0.0003315517241, +0.0001841379310, +0.0000000000000, -0.0001262068966, -0.0001367241379, -0.0000525862069, +0.0000789655172, +0.0002051724138, +0.0003262068966, +0.0004103448276, +0.0004367241379, +0.0004262068966, +0.0004156896552, +0.0003631034483, +0.0002420689655, +0.0000789655172, -0.0000684482759, -0.0001789655172, -0.0002577586207, -0.0002841379310, -0.0001841379310, +0.0000105172414, +0.0002051724138, +0.0003262068966, +0.0003577586207, +0.0003000000000, +0.0001736206897, +0.0000420689655, -0.0000263793103, -0.0000105172414, +0.0000474137931, +0.0000525862069, -0.0000158620690, -0.0000894827586, -0.0000894827586, +0.0000000000000, +0.0001579310345, +0.0002893103448, +0.0002893103448, +0.0001631034483, -0.0000210344828, -0.0001946551724, -0.0003051724138, -0.0003262068966, -0.0002682758621, -0.0001841379310, -0.0001315517241, -0.0001367241379, -0.0001789655172, -0.0002051724138, -0.0002000000000, -0.0001472413793, -0.0000579310345, +0.0000158620690, +0.0000000000000, -0.0001315517241, -0.0003577586207, -0.0005944827586, -0.0007524137931, -0.0007893103448, -0.0007103448276, -0.0005262068966, -0.0002682758621, +0.0000053448276, +0.0002525862069, +0.0004051724138, +0.0003998275862, +0.0002315517241, -0.0000420689655, -0.0003472413793, -0.0005944827586, -0.0006944827586, -0.0006051724138, -0.0003525862069, -0.0000525862069, +0.0002105172414, +0.0003736206897, +0.0003998275862, +0.0002787931034, +0.0000684482759, -0.0001156896552, -0.0001841379310, -0.0001051724138, +0.0000684482759, +0.0002367241379, +0.0002787931034, +0.0001684482759, -0.0000158620690, -0.0001789655172, -0.0002315517241, -0.0001367241379, +0.0000579310345, +0.0002577586207, +0.0003472413793, +0.0002841379310, +0.0001105172414, -0.0001051724138, -0.0003156896552, -0.0004103448276, -0.0003472413793, -0.0001420689655, +0.0000841379310, +0.0001946551724, +0.0001315517241, -0.0000263793103, -0.0002420689655, -0.0004577586207, -0.0006103448276, -0.0006524137931, -0.0005944827586, -0.0004736206897, -0.0003315517241, -0.0002000000000, -0.0000841379310, +0.0000210344828, +0.0001105172414, +0.0001894827586, +0.0002472413793, +0.0002577586207, +0.0002262068966, +0.0001946551724, +0.0002156896552, +0.0002893103448, +0.0003420689655, +0.0003105172414, +0.0001631034483, -0.0000579310345, -0.0003156896552, -0.0005524137931, -0.0007260344828, -0.0007470689655, -0.0005682758621, -0.0002577586207, +0.0000894827586, +0.0004156896552, +0.0006418965517, +0.0007050000000, +0.0005839655172, +0.0003105172414, -0.0000263793103, -0.0002893103448, -0.0003472413793, -0.0001841379310, +0.0001210344828, +0.0004313793103, +0.0006208620690, +0.0006208620690, +0.0004367241379, +0.0001525862069, -0.0001105172414, -0.0002787931034, -0.0003156896552, -0.0002051724138, +0.0000000000000, +0.0002000000000, +0.0003367241379, +0.0003893103448, +0.0003946551724, +0.0003631034483, +0.0003210344828, +0.0002367241379, +0.0000894827586, -0.0000841379310, -0.0002051724138, -0.0002156896552, -0.0001367241379, -0.0000158620690, +0.0001105172414, +0.0001841379310, +0.0001579310345, +0.0000684482759, +0.0000053448276, +0.0000105172414, +0.0000684482759, +0.0001684482759, +0.0002736206897, +0.0003472413793, +0.0003525862069, +0.0002893103448, +0.0002000000000, +0.0001367241379, +0.0001051724138, +0.0000789655172, +0.0000158620690, -0.0001210344828, -0.0003156896552, -0.0004787931034, -0.0004946551724, -0.0002841379310, +0.0001105172414, +0.0005418965517, +0.0008470689655, +0.0009155172414, +0.0007208620690, +0.0003682758621, +0.0000579310345, -0.0000736206897, -0.0000263793103, +0.0001000000000, +0.0002210344828, +0.0003051724138, +0.0003420689655, +0.0002946551724, +0.0001841379310, +0.0000525862069, -0.0000894827586, -0.0002420689655, -0.0003420689655, -0.0002787931034, -0.0000315517241, +0.0003367241379, +0.0006893103448, +0.0009050000000, +0.0008944827586, +0.0006787931034, +0.0003472413793, +0.0000158620690, -0.0002262068966, -0.0003210344828, -0.0002472413793, -0.0000315517241, +0.0002577586207, +0.0005524137931, +0.0007682758621, +0.0008786206897, +0.0008944827586, +0.0008524137931, +0.0007682758621, +0.0006682758621, +0.0005313793103, +0.0003682758621, +0.0001841379310, +0.0000105172414, -0.0000946551724, -0.0001315517241, -0.0001051724138, +0.0000000000000, +0.0001841379310, +0.0004051724138, +0.0005682758621, +0.0006103448276, +0.0004946551724, +0.0002841379310, +0.0000579310345, -0.0000946551724, -0.0001579310345, -0.0000841379310, +0.0000894827586, +0.0002631034483, +0.0003315517241, +0.0002946551724, +0.0002210344828, +0.0001367241379, +0.0000210344828, -0.0001156896552, -0.0002262068966, -0.0002682758621, -0.0002472413793, -0.0002000000000, -0.0001472413793, -0.0000736206897, +0.0000105172414, +0.0000946551724, +0.0001315517241, +0.0001156896552, +0.0000263793103, -0.0001210344828, -0.0002841379310, -0.0003841379310, -0.0003841379310, -0.0002787931034, -0.0001051724138, +0.0000474137931, +0.0001210344828, +0.0000946551724, +0.0000000000000, -0.0000579310345, -0.0000368965517, +0.0000368965517, +0.0001525862069, +0.0002577586207, +0.0002841379310, +0.0001841379310, +0.0000158620690, -0.0001579310345, -0.0002787931034, -0.0003420689655, -0.0003210344828, -0.0002000000000, +0.0000053448276, +0.0002156896552, +0.0003472413793, +0.0003893103448, +0.0003841379310, +0.0003631034483, +0.0003525862069, +0.0003787931034, +0.0004525862069, +0.0005472413793, +0.0006103448276, +0.0006103448276, +0.0005472413793, +0.0004472413793, +0.0003000000000, +0.0001367241379, -0.0000053448276, -0.0001000000000, -0.0001841379310, -0.0002841379310, -0.0003946551724, -0.0004736206897, -0.0004631034483, -0.0003525862069, -0.0001894827586, -0.0000420689655, +0.0000525862069, +0.0001262068966, +0.0002000000000, +0.0002787931034, +0.0003210344828, +0.0002893103448, +0.0001684482759, -0.0000105172414, -0.0002156896552, -0.0003631034483, -0.0004208620690, -0.0003841379310, -0.0002841379310, -0.0001736206897, -0.0001051724138, -0.0000684482759, -0.0000579310345, -0.0000841379310, -0.0001789655172, -0.0003420689655, -0.0004998275862, -0.0005734482759, -0.0005262068966, -0.0003787931034, -0.0001736206897, +0.0000105172414, +0.0000841379310, -0.0000053448276, -0.0002156896552, -0.0004051724138, -0.0004787931034, -0.0003946551724, -0.0001894827586, +0.0000315517241, +0.0001525862069, +0.0001525862069, +0.0000684482759, -0.0000263793103, -0.0001051724138, -0.0001579310345, -0.0001894827586, -0.0002262068966, -0.0002631034483, -0.0002525862069, -0.0001631034483, -0.0000474137931, +0.0000105172414, -0.0000158620690, -0.0001367241379, -0.0003105172414, -0.0004787931034, -0.0005629310345, -0.0004946551724, -0.0002787931034, +0.0000263793103, +0.0003420689655, +0.0005893103448, +0.0006682758621, +0.0005577586207, +0.0003210344828, +0.0000736206897, -0.0001210344828, -0.0002525862069, -0.0003105172414, -0.0003051724138, -0.0002577586207, -0.0002051724138, -0.0001684482759, -0.0001367241379, -0.0000946551724, -0.0000474137931, -0.0000368965517, -0.0000684482759, -0.0001262068966, -0.0001736206897, -0.0002051724138, -0.0002262068966, -0.0002367241379, -0.0002051724138, -0.0001210344828, -0.0000210344828, +0.0000368965517, +0.0000105172414, -0.0001000000000, -0.0002631034483, -0.0004262068966, -0.0005103448276, -0.0004525862069, -0.0002631034483, -0.0000315517241, +0.0001210344828, +0.0001631034483, +0.0001210344828, +0.0000420689655, -0.0000210344828, -0.0000684482759, -0.0001051724138, -0.0001525862069, -0.0002210344828, -0.0002577586207, -0.0002577586207, -0.0002420689655, -0.0002210344828, -0.0001946551724, -0.0001789655172, -0.0001894827586, -0.0002156896552, -0.0002000000000, -0.0001051724138, +0.0000525862069, +0.0001946551724, +0.0002420689655, +0.0001684482759, +0.0000053448276, -0.0002000000000, -0.0004156896552, -0.0005629310345, -0.0006262068966, -0.0005944827586, -0.0004841379310, -0.0003315517241, -0.0001946551724, -0.0001051724138, -0.0000894827586, -0.0001420689655, -0.0002420689655, -0.0002841379310, -0.0002156896552, -0.0000631034483, +0.0000736206897, +0.0001105172414, +0.0000105172414, -0.0001472413793, -0.0002525862069, -0.0002315517241, -0.0001051724138, +0.0000579310345, +0.0001684482759, +0.0001472413793, +0.0000000000000, -0.0002367241379, -0.0004418965517, -0.0004841379310, -0.0003420689655, -0.0000946551724, +0.0001315517241, +0.0002420689655, +0.0002156896552, +0.0001210344828, +0.0000420689655, +0.0000315517241, +0.0000736206897, +0.0001315517241, +0.0001472413793, +0.0000841379310, -0.0000210344828, -0.0001262068966, -0.0001684482759, -0.0001367241379, -0.0000525862069, +0.0000210344828, +0.0000525862069, +0.0000315517241, -0.0000105172414, -0.0000368965517, +0.0000000000000, +0.0000894827586, +0.0001841379310, +0.0002105172414, +0.0001525862069, +0.0000315517241, -0.0001051724138, -0.0002156896552, -0.0002631034483, -0.0002367241379, -0.0001579310345, -0.0000736206897, -0.0000368965517, -0.0000525862069, -0.0000579310345, +0.0000000000000, +0.0000946551724, +0.0001472413793, +0.0001472413793, +0.0001210344828, +0.0000841379310, +0.0000315517241, -0.0000210344828, -0.0000894827586, -0.0001684482759, -0.0002210344828, -0.0002262068966, -0.0001579310345, -0.0000474137931, +0.0000474137931, +0.0000894827586, +0.0000579310345, +0.0000000000000, -0.0000368965517, -0.0000315517241, +0.0000000000000, +0.0000474137931, +0.0001051724138, +0.0001472413793, +0.0001736206897, +0.0001946551724, +0.0002000000000, +0.0001684482759, +0.0001051724138, +0.0000315517241, +0.0000000000000, +0.0000368965517, +0.0001156896552, +0.0001736206897, +0.0001789655172, +0.0001315517241, +0.0000420689655, -0.0000579310345, -0.0001525862069, -0.0002105172414, -0.0002051724138, -0.0001420689655, -0.0000368965517, +0.0000789655172, +0.0001946551724, +0.0002631034483, +0.0002525862069, +0.0001684482759, +0.0000525862069, -0.0000631034483, -0.0001684482759, -0.0002051724138, -0.0001262068966, +0.0000263793103, +0.0002051724138, +0.0003210344828, +0.0003156896552, +0.0001631034483, -0.0000579310345, -0.0002841379310, -0.0004313793103, -0.0004682758621, -0.0004367241379, -0.0003946551724, -0.0003315517241, -0.0002210344828, -0.0000946551724, +0.0000000000000, +0.0000315517241, +0.0000525862069, +0.0000631034483, +0.0000684482759, +0.0000579310345, +0.0000474137931, +0.0000263793103, -0.0000105172414, -0.0000368965517, -0.0000263793103, -0.0000053448276, -0.0000105172414, -0.0000684482759, -0.0001156896552, -0.0001156896552, -0.0000684482759, -0.0000105172414, +0.0000368965517, +0.0000946551724, +0.0001631034483, +0.0002525862069, +0.0003631034483, +0.0004631034483, +0.0004946551724, +0.0004262068966, +0.0002682758621, +0.0000841379310, -0.0000210344828, -0.0000158620690, +0.0000841379310, +0.0002051724138, +0.0002787931034, +0.0002893103448, +0.0002420689655, +0.0001262068966, +0.0000000000000, -0.0000736206897, -0.0000315517241, +0.0001315517241, +0.0003525862069, +0.0005262068966, +0.0005893103448, +0.0004998275862, +0.0003000000000, +0.0000579310345, -0.0001315517241, -0.0002315517241, -0.0002420689655, -0.0002210344828, -0.0001894827586, -0.0001472413793, -0.0001051724138, -0.0000789655172, -0.0000684482759, -0.0000631034483, -0.0000579310345, -0.0000525862069, -0.0000631034483, -0.0000789655172, -0.0000474137931, +0.0000525862069, +0.0001841379310, +0.0002893103448, +0.0003210344828, +0.0002525862069, +0.0001105172414, -0.0000474137931, -0.0001841379310, -0.0002736206897, -0.0003000000000, -0.0002367241379, -0.0001000000000, +0.0000684482759, +0.0002000000000, +0.0002262068966, +0.0001684482759, +0.0000736206897, +0.0000000000000, -0.0000368965517, -0.0000579310345, -0.0000474137931, +0.0000053448276, +0.0000946551724, +0.0001841379310, +0.0002682758621, +0.0003000000000, +0.0002525862069, +0.0001472413793, +0.0000420689655, -0.0000053448276, -0.0000053448276, +0.0000263793103, +0.0000789655172, +0.0001156896552, +0.0001051724138, +0.0000263793103, -0.0000474137931, -0.0000736206897, -0.0000210344828, +0.0000894827586, +0.0002315517241, +0.0003262068966, +0.0003262068966, +0.0002472413793, +0.0001631034483, +0.0001367241379, +0.0001367241379, +0.0001367241379, +0.0001315517241, +0.0001105172414, +0.0000579310345, +0.0000000000000, -0.0000210344828, +0.0000158620690, +0.0001105172414, +0.0002000000000, +0.0002156896552, +0.0001472413793, +0.0000158620690, -0.0001000000000, -0.0001420689655, -0.0001000000000, -0.0000263793103, +0.0000210344828, +0.0000053448276, -0.0000684482759, -0.0001736206897, -0.0002736206897, -0.0003315517241, -0.0003367241379, -0.0003156896552, -0.0002631034483, -0.0001684482759, -0.0000474137931, +0.0000315517241, +0.0000263793103, -0.0000315517241, -0.0001156896552, -0.0001894827586, -0.0002420689655, -0.0002736206897, -0.0002787931034, -0.0002420689655, -0.0001631034483, -0.0000579310345, +0.0000315517241, +0.0000946551724, +0.0001000000000, +0.0000420689655, -0.0000579310345, -0.0001525862069, -0.0001894827586, -0.0001472413793, -0.0000315517241, +0.0001000000000, +0.0001894827586, +0.0001789655172, +0.0000894827586, +0.0000000000000, -0.0000315517241, -0.0000263793103, +0.0000000000000, +0.0000368965517, +0.0000631034483, +0.0000946551724, +0.0001472413793, +0.0002315517241, +0.0002893103448, +0.0002841379310, +0.0002367241379, +0.0001684482759, +0.0000894827586, +0.0000105172414, -0.0000263793103, -0.0000263793103, -0.0000053448276, +0.0000000000000, +0.0000000000000, -0.0000158620690, -0.0000210344828, -0.0000105172414, +0.0000158620690, +0.0000684482759, +0.0001262068966, +0.0001525862069, +0.0001472413793, +0.0001420689655, +0.0001684482759, +0.0001894827586, +0.0001631034483, +0.0000946551724, +0.0000000000000, -0.0000894827586, -0.0001472413793, -0.0001684482759, -0.0001631034483, -0.0001579310345, -0.0001579310345, -0.0001579310345, -0.0001736206897, -0.0001684482759, -0.0001315517241, -0.0000474137931, +0.0000684482759, +0.0001736206897, +0.0002210344828, +0.0002156896552, +0.0001579310345, +0.0000736206897, +0.0000000000000, -0.0000158620690, +0.0000000000000, +0.0000474137931, +0.0001000000000, +0.0001367241379, +0.0001472413793, +0.0001525862069, +0.0001736206897, +0.0002156896552, +0.0002682758621, +0.0003051724138, +0.0002893103448, +0.0002210344828, +0.0001210344828, +0.0000525862069, +0.0000420689655, +0.0000894827586, +0.0001579310345, +0.0001894827586, +0.0001420689655, +0.0000525862069, -0.0000263793103, -0.0000789655172, -0.0000946551724, -0.0000684482759, -0.0000105172414, +0.0000420689655, +0.0000789655172, +0.0000789655172, +0.0000368965517, -0.0000053448276, -0.0000158620690, +0.0000420689655, +0.0001315517241, +0.0001789655172, +0.0001472413793, +0.0000368965517, -0.0001000000000, -0.0002156896552, -0.0002472413793, -0.0001789655172, -0.0000631034483, +0.0000158620690, +0.0000105172414, -0.0000631034483, -0.0001472413793, -0.0001789655172, -0.0001262068966, +0.0000000000000, +0.0001367241379, +0.0002367241379, +0.0002472413793, +0.0001631034483, +0.0000263793103, -0.0000841379310, -0.0001525862069, -0.0001684482759, -0.0001367241379, -0.0000631034483, +0.0000105172414, +0.0000474137931, +0.0000474137931, +0.0000420689655, +0.0000684482759, +0.0001000000000, +0.0001000000000, +0.0000631034483, +0.0000158620690, +0.0000000000000, +0.0000105172414, +0.0000631034483, +0.0001420689655, +0.0002420689655, +0.0002946551724, +0.0002682758621, +0.0001946551724, +0.0001105172414, +0.0000420689655, -0.0000053448276, -0.0000158620690, -0.0000210344828, -0.0000579310345, -0.0001051724138, -0.0001156896552, -0.0000684482759, +0.0000263793103, +0.0001631034483, +0.0003000000000, +0.0004103448276, +0.0004682758621, +0.0004472413793, +0.0003631034483, +0.0002577586207, +0.0001579310345, +0.0000474137931, -0.0000684482759, -0.0001631034483, -0.0001841379310, -0.0001262068966, -0.0000105172414, +0.0001262068966, +0.0002472413793, +0.0002946551724, +0.0002472413793, +0.0001472413793, +0.0000315517241, -0.0000263793103, +0.0000000000000, +0.0001051724138, +0.0002525862069, +0.0003420689655, +0.0003051724138, +0.0001789655172, +0.0000684482759, +0.0000368965517, +0.0000894827586, +0.0001841379310, +0.0002577586207, +0.0002736206897, +0.0002105172414, +0.0000684482759, -0.0001472413793, -0.0003787931034, -0.0005208620690, -0.0005208620690, -0.0003787931034, -0.0001367241379, +0.0001210344828, +0.0003000000000, +0.0003472413793, +0.0002787931034, +0.0001684482759, +0.0000684482759, -0.0000053448276, -0.0000946551724, -0.0001946551724, -0.0002893103448, -0.0003472413793, -0.0003525862069, -0.0002946551724, -0.0001841379310, -0.0000579310345, +0.0000263793103, +0.0000525862069, +0.0000368965517, +0.0000000000000, -0.0000210344828, -0.0000158620690, +0.0000210344828, +0.0000946551724, +0.0001472413793, +0.0001579310345, +0.0001156896552, +0.0000158620690, -0.0000894827586, -0.0001841379310, -0.0002315517241, -0.0001946551724, -0.0000684482759, +0.0001051724138, +0.0002682758621, +0.0003577586207, +0.0003525862069, +0.0002577586207, +0.0001210344828, +0.0000000000000, -0.0000736206897, -0.0001210344828, -0.0001420689655, -0.0001367241379, -0.0001000000000, -0.0000315517241, +0.0000420689655, +0.0001051724138, +0.0001262068966, +0.0001000000000, +0.0000263793103, -0.0000525862069, -0.0001105172414, -0.0001367241379, -0.0001472413793, -0.0001579310345, -0.0002000000000, -0.0002577586207, -0.0002893103448, -0.0002631034483, -0.0001789655172, -0.0000631034483, +0.0000579310345, +0.0001420689655, +0.0001315517241, +0.0000315517241, -0.0001000000000, -0.0002000000000, -0.0002315517241, -0.0002051724138, -0.0001525862069, -0.0000894827586, -0.0000579310345, -0.0000946551724, -0.0001946551724, -0.0003051724138, -0.0003577586207, -0.0003000000000, -0.0001420689655, +0.0000315517241, +0.0001367241379, +0.0000946551724, -0.0000736206897, -0.0002682758621, -0.0003736206897, -0.0003472413793, -0.0002262068966, -0.0000684482759, +0.0000525862069, +0.0001156896552, +0.0001156896552, +0.0000631034483, +0.0000053448276, -0.0000315517241, -0.0000579310345, -0.0000684482759, -0.0000579310345, -0.0000263793103, +0.0000105172414, +0.0000736206897, +0.0001262068966, +0.0001420689655, +0.0001156896552, +0.0000579310345, -0.0000105172414, -0.0000946551724, -0.0001631034483, -0.0001894827586, -0.0001684482759, -0.0001000000000, -0.0000315517241, -0.0000105172414, -0.0000474137931, -0.0001105172414, -0.0001420689655, -0.0001156896552, -0.0000525862069, +0.0000210344828, +0.0000789655172, +0.0000789655172, +0.0000105172414, -0.0001051724138, -0.0002105172414, -0.0002736206897, -0.0003051724138, -0.0003315517241, -0.0003577586207, -0.0003631034483, -0.0003577586207, -0.0003210344828, -0.0002682758621, -0.0002000000000, -0.0001472413793, -0.0001105172414, -0.0001051724138, -0.0001262068966, -0.0001684482759, -0.0002156896552, -0.0002631034483, -0.0002787931034, -0.0002525862069, -0.0002105172414, -0.0001841379310, -0.0001789655172, -0.0002051724138, -0.0002262068966, -0.0002051724138, -0.0001420689655, -0.0000525862069, +0.0000053448276, +0.0000158620690, -0.0000158620690, -0.0000631034483, -0.0001210344828, -0.0001946551724, -0.0002577586207, -0.0002736206897, -0.0002367241379, -0.0001579310345, -0.0000525862069, +0.0000263793103, +0.0000525862069, -0.0000158620690, -0.0001631034483, -0.0003210344828, -0.0004208620690, -0.0004472413793, -0.0004051724138, -0.0003156896552, -0.0002210344828, -0.0001156896552, -0.0000105172414, +0.0000789655172, +0.0001315517241, +0.0001262068966, +0.0001051724138, +0.0001105172414, +0.0001472413793, +0.0001841379310, +0.0001789655172, +0.0001051724138, +0.0000000000000, -0.0001105172414, -0.0001894827586, -0.0002156896552, -0.0001841379310, -0.0001156896552, -0.0000368965517, +0.0000210344828, +0.0000474137931, +0.0000315517241, -0.0000210344828, -0.0001000000000, -0.0001789655172, -0.0002420689655, -0.0002841379310, -0.0003051724138, -0.0002787931034, -0.0001946551724, -0.0000579310345, +0.0000736206897, +0.0001210344828, +0.0000684482759, -0.0000210344828, -0.0001000000000, -0.0001315517241, -0.0001051724138, -0.0000525862069, -0.0000158620690, -0.0000315517241, -0.0000894827586, -0.0001525862069, -0.0001736206897, -0.0001262068966, -0.0000263793103, +0.0000946551724, +0.0001894827586, +0.0001946551724, +0.0001051724138, -0.0000210344828, -0.0001315517241, -0.0001894827586, -0.0001736206897, -0.0001051724138, -0.0000263793103, +0.0000105172414, +0.0000158620690, -0.0000105172414, -0.0000736206897, -0.0001579310345, -0.0002472413793, -0.0003000000000, -0.0003051724138, -0.0002367241379, -0.0001315517241, -0.0000210344828, +0.0000368965517, +0.0000525862069, +0.0000315517241, +0.0000158620690, +0.0000210344828, +0.0000684482759, +0.0001315517241, +0.0002000000000, +0.0002156896552, +0.0001579310345, +0.0000631034483, +0.0000000000000, -0.0000263793103, -0.0000263793103, -0.0000053448276, +0.0000474137931, +0.0001156896552, +0.0001631034483, +0.0001736206897, +0.0001420689655, +0.0000894827586, +0.0000315517241, +0.0000053448276, +0.0000474137931, +0.0001525862069, +0.0002946551724, +0.0003998275862, +0.0004313793103, +0.0003420689655, +0.0001736206897, -0.0000053448276, -0.0001315517241, -0.0001736206897, -0.0001472413793, -0.0000684482759, +0.0000210344828, +0.0000841379310, +0.0000736206897, +0.0000210344828, -0.0000210344828, -0.0000368965517, -0.0000105172414, +0.0000525862069, +0.0001420689655, +0.0002156896552, +0.0002525862069, +0.0002472413793, +0.0002210344828, +0.0002051724138, +0.0001946551724, +0.0001684482759, +0.0001156896552, +0.0000420689655, -0.0000210344828, -0.0000579310345, -0.0000631034483, -0.0000263793103, +0.0000474137931, +0.0001262068966, +0.0001789655172, +0.0001946551724, +0.0001841379310, +0.0001894827586, +0.0002262068966, +0.0002893103448, +0.0003315517241, +0.0003525862069, +0.0003472413793, +0.0003210344828, +0.0002787931034, +0.0002210344828, +0.0001789655172, +0.0001472413793, +0.0001315517241, +0.0001105172414, +0.0000841379310, +0.0000368965517, -0.0000158620690, -0.0000631034483, -0.0000474137931, +0.0000420689655, +0.0001841379310, +0.0003105172414, +0.0003525862069, +0.0003051724138, +0.0001894827586, +0.0000736206897, +0.0000000000000, +0.0000000000000, +0.0000631034483, +0.0001579310345, +0.0002262068966, +0.0002420689655, +0.0002105172414, +0.0001684482759, +0.0001262068966, +0.0001051724138, +0.0001105172414, +0.0001262068966, +0.0001472413793, +0.0001525862069, +0.0001156896552, +0.0000684482759, +0.0000368965517, +0.0000525862069, +0.0001156896552, +0.0002000000000, +0.0002682758621, +0.0003105172414, +0.0003210344828, +0.0002946551724, +0.0002472413793, +0.0002000000000, +0.0001789655172, +0.0001631034483, +0.0001367241379, +0.0000841379310, +0.0000210344828, -0.0000053448276, +0.0000053448276, +0.0000684482759, +0.0001579310345, +0.0002525862069, +0.0003156896552, +0.0003315517241, +0.0003051724138, +0.0002315517241, +0.0001420689655, +0.0000420689655, -0.0000474137931, -0.0001210344828, -0.0001579310345, -0.0001367241379, -0.0000684482759, +0.0000263793103, +0.0001315517241, +0.0002105172414, +0.0002315517241, +0.0001789655172, +0.0000841379310, +0.0000000000000, -0.0000684482759, -0.0000946551724, -0.0000684482759, -0.0000105172414, +0.0000210344828, +0.0000158620690, -0.0000158620690, -0.0000579310345, -0.0000736206897, -0.0000525862069, +0.0000105172414, +0.0001105172414, +0.0002156896552, +0.0002841379310, +0.0002787931034, +0.0002000000000, +0.0000789655172, -0.0000368965517, -0.0001210344828, -0.0001736206897, -0.0002210344828, -0.0002420689655, -0.0002156896552, -0.0001472413793, -0.0000579310345, +0.0000263793103, +0.0000946551724, +0.0001210344828, +0.0001105172414, +0.0000789655172, +0.0000474137931, +0.0000315517241, +0.0000315517241, +0.0000263793103, +0.0000053448276, -0.0000474137931, -0.0001262068966, -0.0001946551724, -0.0002156896552, -0.0001789655172, -0.0000894827586, +0.0000105172414, +0.0000894827586, +0.0001105172414, +0.0000736206897, +0.0000210344828, -0.0000105172414, -0.0000105172414, +0.0000210344828, +0.0000631034483, +0.0000894827586, +0.0000736206897, +0.0000053448276, -0.0000894827586, -0.0001472413793, -0.0001315517241, -0.0000525862069, +0.0000474137931, +0.0001367241379, +0.0001894827586, +0.0001841379310, +0.0001051724138, -0.0000210344828, -0.0001315517241, -0.0001841379310, -0.0001736206897, -0.0001315517241, -0.0000736206897, -0.0000158620690, +0.0000263793103, +0.0000631034483, +0.0001000000000, +0.0001420689655, +0.0001736206897, +0.0001579310345, +0.0000894827586, -0.0000263793103, -0.0001525862069, -0.0002472413793, -0.0002682758621, -0.0002156896552, -0.0001315517241, -0.0000368965517, +0.0000263793103, +0.0000684482759, +0.0000841379310, +0.0001000000000, +0.0001210344828, +0.0001684482759, +0.0002051724138, +0.0002156896552, +0.0001841379310, +0.0001105172414, +0.0000105172414, -0.0000684482759, -0.0001156896552, -0.0001051724138, -0.0000368965517, +0.0000525862069, +0.0001579310345, +0.0002420689655, +0.0002631034483, +0.0002105172414, +0.0000946551724, -0.0000525862069, -0.0001789655172, -0.0002367241379, -0.0001894827586, -0.0000736206897, +0.0000474137931, +0.0001000000000, +0.0000736206897, -0.0000053448276, -0.0000946551724, -0.0001684482759, -0.0001946551724, -0.0001736206897, -0.0001315517241, -0.0000841379310, -0.0000315517241, +0.0000210344828, +0.0000631034483, +0.0000736206897, +0.0000420689655, -0.0000105172414, -0.0000579310345, -0.0000946551724, -0.0001315517241, -0.0001841379310, -0.0002262068966, -0.0002420689655, -0.0002210344828, -0.0001684482759, -0.0000841379310, +0.0000158620690, +0.0001262068966, +0.0001894827586, +0.0001736206897, +0.0001000000000, +0.0000105172414, -0.0000368965517, -0.0000579310345, -0.0000525862069, -0.0000263793103, -0.0000105172414, -0.0000105172414, -0.0000315517241, -0.0000631034483, -0.0000894827586, -0.0000946551724, -0.0000684482759, -0.0000158620690, +0.0000210344828, +0.0000210344828, -0.0000263793103, -0.0000894827586, -0.0001156896552, -0.0001051724138, -0.0000684482759, -0.0000158620690, +0.0000368965517, +0.0000789655172, +0.0000841379310, +0.0000631034483, +0.0000210344828, -0.0000210344828, -0.0000684482759, -0.0001051724138, -0.0001210344828, -0.0001156896552, -0.0001105172414, -0.0001051724138, -0.0001000000000, -0.0000894827586, -0.0000684482759, -0.0000474137931, -0.0000263793103, +0.0000000000000, +0.0000263793103, +0.0000841379310, +0.0001472413793, +0.0001789655172, +0.0001684482759, +0.0001210344828, +0.0000684482759, +0.0000210344828, -0.0000158620690, -0.0000579310345, -0.0001262068966, -0.0002051724138, -0.0002631034483, -0.0002472413793, -0.0001420689655, +0.0000263793103, +0.0002000000000, +0.0003156896552, +0.0003367241379, +0.0002472413793, +0.0000946551724, -0.0000631034483, -0.0001684482759, -0.0001841379310, -0.0001262068966, -0.0000368965517, +0.0000474137931, +0.0001105172414, +0.0001315517241, +0.0001105172414, +0.0000474137931, -0.0000315517241, -0.0001051724138, -0.0001420689655, -0.0001210344828, -0.0000579310345, +0.0000105172414, +0.0000579310345, +0.0000736206897, +0.0000631034483, +0.0000420689655, +0.0000315517241, +0.0000525862069, +0.0000946551724, +0.0001367241379, +0.0001315517241, +0.0000789655172, +0.0000053448276, -0.0000579310345, -0.0000841379310, -0.0000684482759, -0.0000158620690, +0.0000420689655, +0.0000841379310, +0.0001000000000, +0.0000946551724, +0.0000684482759, +0.0000315517241, +0.0000053448276, -0.0000105172414, -0.0000315517241, -0.0000474137931, -0.0000631034483, -0.0000579310345, -0.0000210344828, +0.0000263793103, +0.0000736206897, +0.0000789655172, +0.0000631034483, +0.0000053448276, -0.0000736206897, -0.0001579310345, -0.0002000000000, -0.0001736206897, -0.0001210344828, -0.0000684482759, -0.0000210344828, +0.0000420689655, +0.0001156896552, +0.0001684482759, +0.0001736206897, +0.0001156896552, +0.0000210344828, -0.0000841379310, -0.0001736206897, -0.0002210344828, -0.0002262068966, -0.0002105172414, -0.0001789655172, -0.0001472413793, -0.0001156896552, -0.0000946551724, -0.0000789655172, -0.0000684482759, -0.0000525862069, -0.0000263793103, +0.0000105172414, +0.0000631034483, +0.0001105172414, +0.0001420689655, +0.0001579310345, +0.0001420689655, +0.0000841379310, -0.0000053448276, -0.0001051724138, -0.0001841379310, -0.0002156896552, -0.0001894827586, -0.0001210344828, -0.0000368965517, +0.0000263793103, +0.0000525862069, +0.0000315517241, -0.0000315517241, -0.0001156896552, -0.0001789655172, -0.0001841379310, -0.0001315517241, -0.0000579310345, +0.0000105172414, +0.0000579310345, +0.0000894827586, +0.0001000000000, +0.0001000000000, +0.0000841379310, +0.0000684482759, +0.0000368965517, -0.0000158620690, -0.0000894827586, -0.0001525862069, -0.0001631034483, -0.0001051724138, +0.0000000000000, +0.0001051724138, +0.0001631034483, +0.0001420689655, +0.0000474137931, -0.0000684482759, -0.0001525862069, -0.0001631034483, -0.0001051724138, -0.0000315517241, +0.0000000000000, -0.0000158620690, -0.0000894827586, -0.0001894827586, -0.0002682758621, -0.0003051724138, -0.0002893103448, -0.0002262068966, -0.0001472413793, -0.0000579310345, +0.0000263793103, +0.0000789655172, +0.0000789655172, +0.0000420689655, -0.0000105172414, -0.0000684482759, -0.0001262068966, -0.0001736206897, -0.0001946551724, -0.0001736206897, -0.0001156896552, -0.0000525862069, -0.0000053448276, +0.0000000000000, -0.0000053448276, -0.0000420689655, -0.0000894827586, -0.0001472413793, -0.0001946551724, -0.0002000000000, -0.0001472413793, -0.0000525862069, +0.0000315517241, +0.0000894827586, +0.0000946551724, +0.0000525862069, +0.0000000000000, -0.0000263793103, -0.0000263793103, -0.0000158620690, -0.0000053448276, -0.0000158620690, -0.0000158620690, +0.0000000000000, +0.0000263793103, +0.0000474137931, +0.0000684482759, +0.0000789655172, +0.0000684482759, +0.0000105172414, -0.0000841379310, -0.0001841379310, -0.0002472413793, -0.0002420689655, -0.0001841379310, -0.0001105172414, -0.0000525862069, -0.0000420689655, -0.0000684482759, -0.0001000000000, -0.0001156896552, -0.0001051724138, -0.0000579310345, +0.0000158620690, +0.0000946551724, +0.0001210344828, +0.0000736206897, -0.0000368965517, -0.0001736206897, -0.0002577586207, -0.0002682758621, -0.0002210344828, -0.0001525862069, -0.0000946551724, -0.0000525862069, -0.0000368965517, -0.0000368965517, -0.0000579310345, -0.0000684482759, -0.0000579310345, -0.0000210344828, +0.0000210344828, +0.0000631034483, +0.0000736206897, +0.0000525862069, +0.0000105172414, -0.0000368965517, -0.0000789655172, -0.0001105172414, -0.0001156896552, -0.0000841379310, -0.0000315517241, +0.0000263793103, +0.0000684482759, +0.0000684482759, +0.0000105172414, -0.0000579310345, -0.0001156896552, -0.0001210344828, -0.0000946551724, -0.0000525862069, +0.0000000000000, +0.0000684482759, +0.0001156896552, +0.0001000000000, +0.0000210344828, -0.0000841379310, -0.0001631034483, -0.0001841379310, -0.0001472413793, -0.0000579310345, +0.0000368965517, +0.0001105172414, +0.0001315517241, +0.0000789655172, -0.0000105172414, -0.0001262068966, -0.0002210344828, -0.0002577586207, -0.0002000000000, -0.0000736206897, +0.0000736206897, +0.0001841379310, +0.0002210344828, +0.0001684482759, +0.0000525862069, -0.0000684482759, -0.0001789655172, -0.0002315517241, -0.0002367241379, -0.0002105172414, -0.0001684482759, -0.0001315517241, -0.0000894827586, -0.0000525862069, -0.0000105172414, +0.0000315517241, +0.0000736206897, +0.0000894827586, +0.0000631034483, +0.0000053448276, -0.0000474137931, -0.0000631034483, -0.0000263793103, +0.0000420689655, +0.0001210344828, +0.0001789655172, +0.0001894827586, +0.0001420689655, +0.0000525862069, -0.0000420689655, -0.0001156896552, -0.0001367241379, -0.0000894827586, +0.0000000000000, +0.0000946551724, +0.0001525862069, +0.0001684482759, +0.0001367241379, +0.0000736206897, -0.0000053448276, -0.0000789655172, -0.0001156896552, -0.0000789655172, +0.0000158620690, +0.0001367241379, +0.0002156896552, +0.0002262068966, +0.0001525862069, +0.0000368965517, -0.0000579310345, -0.0001000000000, -0.0000736206897, +0.0000000000000, +0.0000841379310, +0.0001315517241, +0.0001315517241, +0.0000894827586, +0.0000368965517, -0.0000053448276, -0.0000053448276, +0.0000420689655, +0.0001262068966, +0.0001841379310, +0.0001736206897, +0.0000946551724, -0.0000158620690, -0.0001051724138, -0.0001315517241, -0.0000894827586, -0.0000158620690, +0.0000684482759, +0.0001420689655, +0.0001736206897, +0.0001789655172, +0.0001525862069, +0.0001156896552, +0.0000736206897, +0.0000368965517, +0.0000158620690, +0.0000315517241, +0.0000789655172, +0.0001262068966, +0.0001420689655, +0.0001262068966, +0.0000789655172, +0.0000210344828, -0.0000263793103, -0.0000420689655, -0.0000368965517, -0.0000263793103, -0.0000420689655, -0.0000684482759, -0.0000631034483, -0.0000158620690, +0.0000736206897, +0.0001684482759, +0.0002315517241, +0.0002315517241, +0.0001894827586, +0.0001210344828, +0.0000631034483, +0.0000315517241, +0.0000474137931, +0.0001000000000, +0.0001579310345, +0.0001894827586, +0.0001736206897, +0.0001367241379, +0.0000841379310, +0.0000368965517, +0.0000000000000, -0.0000053448276, +0.0000158620690, +0.0000474137931, +0.0000684482759, +0.0000631034483, +0.0000315517241, +0.0000053448276, +0.0000053448276, +0.0000474137931, +0.0001210344828, +0.0002000000000, +0.0002631034483, +0.0003000000000, +0.0003210344828, +0.0003367241379, +0.0003367241379, +0.0003262068966, +0.0003051724138, +0.0002577586207, +0.0002105172414, +0.0001684482759, +0.0001525862069, +0.0001684482759, +0.0002051724138, +0.0002315517241, +0.0002000000000, +0.0001262068966, +0.0000420689655, -0.0000158620690, -0.0000263793103, +0.0000105172414, +0.0000841379310, +0.0001579310345, +0.0002105172414, +0.0002210344828, +0.0001946551724, +0.0001525862069, +0.0001105172414, +0.0000894827586, +0.0000894827586, +0.0001156896552, +0.0001525862069, +0.0001894827586, +0.0002105172414, +0.0002051724138, +0.0001684482759, +0.0000946551724, +0.0000000000000, -0.0001105172414, -0.0001736206897, -0.0001736206897, -0.0000841379310, +0.0000631034483, +0.0002210344828, +0.0003156896552, +0.0003210344828, +0.0002367241379, +0.0001156896552, +0.0000053448276, -0.0000525862069, -0.0000579310345, -0.0000263793103, +0.0000105172414, +0.0000315517241, +0.0000315517241, +0.0000105172414, -0.0000053448276, -0.0000210344828, -0.0000105172414, +0.0000053448276, +0.0000368965517, +0.0000579310345, +0.0000684482759, +0.0000736206897, +0.0000841379310, +0.0001000000000, +0.0001156896552, +0.0001156896552, +0.0000946551724, +0.0000579310345, +0.0000210344828, +0.0000000000000, -0.0000105172414, -0.0000053448276, +0.0000053448276, +0.0000210344828, +0.0000368965517, +0.0000368965517, +0.0000315517241, +0.0000420689655, +0.0000736206897, +0.0001105172414, +0.0001472413793, +0.0001736206897, +0.0001894827586, +0.0001946551724, +0.0002000000000, +0.0001946551724, +0.0001789655172, +0.0001579310345, +0.0001262068966, +0.0000946551724, +0.0000631034483, +0.0000315517241, +0.0000000000000, -0.0000105172414, +0.0000000000000, +0.0000368965517, +0.0000894827586, +0.0001472413793, +0.0001789655172, +0.0001841379310, +0.0001631034483, +0.0001315517241, +0.0000946551724, +0.0000474137931, +0.0000000000000, -0.0000525862069, -0.0000841379310, -0.0000894827586, -0.0000684482759, -0.0000263793103, +0.0000210344828, +0.0000736206897, +0.0001156896552, +0.0001315517241, +0.0001156896552, +0.0000684482759, +0.0000210344828, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000158620690, +0.0000105172414, -0.0000158620690, -0.0000684482759, -0.0001105172414, -0.0001315517241, -0.0001105172414, -0.0000579310345, +0.0000053448276, +0.0000579310345, +0.0000789655172, +0.0000736206897, +0.0000525862069, +0.0000263793103, +0.0000000000000, -0.0000263793103, -0.0000315517241, -0.0000053448276, +0.0000263793103, +0.0000474137931, +0.0000368965517, +0.0000000000000, -0.0000525862069, -0.0000894827586, -0.0001051724138, -0.0000841379310, -0.0000368965517, +0.0000315517241, +0.0001051724138, +0.0001684482759, +0.0002051724138, +0.0002156896552, +0.0002051724138, +0.0001684482759, +0.0001051724138, +0.0000210344828, -0.0000579310345, -0.0001105172414, -0.0001105172414, -0.0000736206897, -0.0000210344828, +0.0000158620690, +0.0000158620690, -0.0000053448276, -0.0000368965517, -0.0000525862069, -0.0000631034483, -0.0000684482759, -0.0000684482759, -0.0000631034483, -0.0000579310345, -0.0000579310345, -0.0000474137931, -0.0000420689655, -0.0000315517241, -0.0000315517241, -0.0000368965517, -0.0000579310345, -0.0000946551724, -0.0001420689655, -0.0001841379310, -0.0001946551724, -0.0001684482759, -0.0001051724138, -0.0000315517241, +0.0000210344828, +0.0000420689655, +0.0000263793103, -0.0000053448276, -0.0000420689655, -0.0000474137931, -0.0000210344828, +0.0000263793103, +0.0000789655172, +0.0000841379310, +0.0000315517241, -0.0000631034483, -0.0001631034483, -0.0002262068966, -0.0002367241379, -0.0002051724138, -0.0001472413793, -0.0000684482759, -0.0000053448276, +0.0000315517241, +0.0000315517241, +0.0000000000000, -0.0000368965517, -0.0000631034483, -0.0000631034483, -0.0000474137931, -0.0000263793103, -0.0000053448276, +0.0000000000000, -0.0000105172414, -0.0000474137931, -0.0000946551724, -0.0001367241379, -0.0001631034483, -0.0001684482759, -0.0001525862069, -0.0001210344828, -0.0000841379310, -0.0000420689655, +0.0000000000000, +0.0000315517241, +0.0000579310345, +0.0000631034483, +0.0000368965517, -0.0000053448276, -0.0000736206897, -0.0001367241379, -0.0001841379310, -0.0002105172414, -0.0002105172414, -0.0002105172414, -0.0002105172414, -0.0002262068966, -0.0002367241379, -0.0002367241379, -0.0002156896552, -0.0001736206897, -0.0001262068966, -0.0000894827586, -0.0000736206897, -0.0000684482759, -0.0000684482759, -0.0000684482759, -0.0000789655172, -0.0001051724138, -0.0001420689655, -0.0001736206897, -0.0001736206897, -0.0001472413793, -0.0001156896552, -0.0001105172414, -0.0001262068966, -0.0001579310345, -0.0001789655172, -0.0001684482759, -0.0001156896552, -0.0000368965517, +0.0000263793103, +0.0000631034483, +0.0000368965517, -0.0000263793103, -0.0000946551724, -0.0001472413793, -0.0001789655172, -0.0002051724138, -0.0002262068966, -0.0002315517241, -0.0002156896552, -0.0001894827586, -0.0001525862069, -0.0001105172414, -0.0000789655172, -0.0000631034483, -0.0000684482759, -0.0000946551724, -0.0001262068966, -0.0001367241379, -0.0001156896552, -0.0000631034483, +0.0000053448276, +0.0000579310345, +0.0000736206897, +0.0000210344828, -0.0000579310345, -0.0001525862069, -0.0002156896552, -0.0002315517241, -0.0001946551724, -0.0001262068966, -0.0000631034483, -0.0000315517241, -0.0000368965517, -0.0000631034483, -0.0001051724138, -0.0001262068966, -0.0001156896552, -0.0000736206897, -0.0000105172414, +0.0000525862069, +0.0000946551724, +0.0000894827586, +0.0000420689655, -0.0000263793103, -0.0000894827586, -0.0001262068966, -0.0001262068966, -0.0001000000000, -0.0000789655172, -0.0000684482759, -0.0000841379310, -0.0001105172414, -0.0001210344828, -0.0001156896552, -0.0001105172414, -0.0001156896552, -0.0001367241379, -0.0001579310345, -0.0001631034483, -0.0001420689655, -0.0000894827586, -0.0000263793103, +0.0000315517241, +0.0000579310345, +0.0000263793103, -0.0000420689655, -0.0001210344828, -0.0001789655172, -0.0002000000000, -0.0001736206897, -0.0001051724138, -0.0000158620690, +0.0000525862069, +0.0001000000000, +0.0000946551724, +0.0000525862069, -0.0000105172414, -0.0000789655172, -0.0001105172414, -0.0000946551724, -0.0000474137931, +0.0000210344828, +0.0001000000000, +0.0001579310345, +0.0001841379310, +0.0001789655172, +0.0001420689655, +0.0000841379310, +0.0000420689655, +0.0000053448276, -0.0000158620690, -0.0000315517241, -0.0000420689655, -0.0000315517241, -0.0000158620690, +0.0000000000000, +0.0000315517241, +0.0000579310345, +0.0000894827586, +0.0001051724138, +0.0001105172414, +0.0001051724138, +0.0000841379310, +0.0000420689655, +0.0000000000000, -0.0000105172414, -0.0000105172414, +0.0000000000000, +0.0000053448276, +0.0000210344828, +0.0000315517241, +0.0000263793103, +0.0000053448276, -0.0000053448276, -0.0000263793103, -0.0000368965517, -0.0000368965517, -0.0000210344828, -0.0000053448276, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/18-marshall-plexi-sm57.h000066400000000000000000003200631247673406200252610ustar00rootroot00000000000000float marshall_plexi_sm57[] = { +0.0000000000000, +0.0000000000000, -0.0000201754386, -0.0000401315789, -0.0000469298246, -0.0000401315789, -0.0000067982456, +0.0000133771930, +0.0000335526316, +0.0000401315789, +0.0000201754386, +0.0000000000000, -0.0000469298246, -0.0001004385965, -0.0001605263158, -0.0002208333333, -0.0002677631579, -0.0002945175439, -0.0002677631579, -0.0001940789474, -0.0000736842105, +0.0000535087719, +0.0001739035088, +0.0002276315789, +0.0001872807018, +0.0000469298246, -0.0001539473684, -0.0003614035088, -0.0004951754386, -0.0004951754386, -0.0003412280702, -0.0001070175439, +0.0001271929825, +0.0002743421053, +0.0002743421053, +0.0001405701754, -0.0000469298246, -0.0002074561404, -0.0002677631579, -0.0002008771930, -0.0000668859649, +0.0000535087719, +0.0001004385965, +0.0000401315789, -0.0000936403509, -0.0002410087719, -0.0003144736842, -0.0002877192982, -0.0001539473684, +0.0000267543860, +0.0001940789474, +0.0003010964912, +0.0003144736842, +0.0002475877193, +0.0001405701754, +0.0000067982456, -0.0000936403509, -0.0001739035088, -0.0002008771930, -0.0001673245614, -0.0000802631579, +0.0000335526316, +0.0001673245614, +0.0002677631579, +0.0003010964912, +0.0002609649123, +0.0001539473684, +0.0000267543860, -0.0000668859649, -0.0001138157895, -0.0000736842105, +0.0000067982456, +0.0001138157895, +0.0002074561404, +0.0002475877193, +0.0002410087719, +0.0001940789474, +0.0001271929825, +0.0000802631579, +0.0000668859649, +0.0001004385965, +0.0001673245614, +0.0002543859649, +0.0003212719298, +0.0003346491228, +0.0002811403509, +0.0001807017544, +0.0000535087719, -0.0000469298246, -0.0000936403509, -0.0000936403509, -0.0000469298246, +0.0000000000000, +0.0000267543860, +0.0000469298246, +0.0000802631579, +0.0001739035088, +0.0003278508772, +0.0005287280702, +0.0006960526316, +0.0007361842105, +0.0005890350877, +0.0002677631579, -0.0001405701754, -0.0005019736842, -0.0006892543860, -0.0006157894737, -0.0003278508772, +0.0000535087719, +0.0003815789474, +0.0005421052632, +0.0004951754386, +0.0003078947368, +0.0001004385965, -0.0000067982456, +0.0000000000000, +0.0001070175439, +0.0002208333333, +0.0002543859649, +0.0001673245614, +0.0000067982456, -0.0001471491228, -0.0002410087719, -0.0002276315789, -0.0001673245614, -0.0001070175439, -0.0001004385965, -0.0001471491228, -0.0001807017544, -0.0001337719298, +0.0000267543860, +0.0002609649123, +0.0004618421053, +0.0005085526316, +0.0003480263158, +0.0000000000000, -0.0003815789474, -0.0006491228070, -0.0006892543860, -0.0004752192982, -0.0001271929825, +0.0001940789474, +0.0003480263158, +0.0002743421053, +0.0000201754386, -0.0002811403509, -0.0004951754386, -0.0005421052632, -0.0004149122807, -0.0002008771930, +0.0000133771930, +0.0001539473684, +0.0002008771930, +0.0001673245614, +0.0000936403509, +0.0000000000000, -0.0000936403509, -0.0002008771930, -0.0002945175439, -0.0003614035088, -0.0003614035088, -0.0002811403509, -0.0001271929825, +0.0000335526316, +0.0001471491228, +0.0001605263158, +0.0000535087719, -0.0001203947368, -0.0003078947368, -0.0004282894737, -0.0004416666667, -0.0003412280702, -0.0001673245614, +0.0000201754386, +0.0001739035088, +0.0002609649123, +0.0002743421053, +0.0002142543860, +0.0001203947368, +0.0000067982456, -0.0000802631579, -0.0001203947368, -0.0001138157895, -0.0000603070175, +0.0000067982456, +0.0000668859649, +0.0000870614035, +0.0000401315789, -0.0000469298246, -0.0001739035088, -0.0002945175439, -0.0003679824561, -0.0003614035088, -0.0002609649123, -0.0000668859649, +0.0001807017544, +0.0004550438596, +0.0006692982456, +0.0007831140351, +0.0007495614035, +0.0005890350877, +0.0003480263158, +0.0001004385965, -0.0000870614035, -0.0001872807018, -0.0002008771930, -0.0001739035088, -0.0001405701754, -0.0001337719298, -0.0001271929825, -0.0001138157895, -0.0000535087719, +0.0000401315789, +0.0001539473684, +0.0002475877193, +0.0003010964912, +0.0003212719298, +0.0003278508772, +0.0003747807018, +0.0004550438596, +0.0005554824561, +0.0006157894737, +0.0005822368421, +0.0004416666667, +0.0002142543860, -0.0000335526316, -0.0002410087719, -0.0003614035088, -0.0004015350877, -0.0003815789474, -0.0003346491228, -0.0002811403509, -0.0001872807018, -0.0000469298246, +0.0001405701754, +0.0003614035088, +0.0005421052632, +0.0006291666667, +0.0005822368421, +0.0004550438596, +0.0003010964912, +0.0001940789474, +0.0001605263158, +0.0001539473684, +0.0000936403509, -0.0000802631579, -0.0003815789474, -0.0007361842105, -0.0009837719298, -0.0009971491228, -0.0007293859649, -0.0002410087719, +0.0002877192982, +0.0006960526316, +0.0008298245614, +0.0007160087719, +0.0004350877193, +0.0001605263158, +0.0000000000000, -0.0000668859649, -0.0001203947368, -0.0003010964912, -0.0006692982456, -0.0011578947368, -0.0015861842105, -0.0017131578947, -0.0013787280702, -0.0006089912281, +0.0003815789474, +0.0013050438596, +0.0018403508772, +0.0018403508772, +0.0013317982456, +0.0005085526316, -0.0003747807018, -0.0011243421053, -0.0016396929825, -0.0019208333333, -0.0019877192982, -0.0018671052632, -0.0015392543860, -0.0009905701754, -0.0002677631579, +0.0004752192982, +0.0010708333333, +0.0013519736842, +0.0012649122807, +0.0009368421053, +0.0005421052632, +0.0002609649123, +0.0001271929825, +0.0000335526316, -0.0002074561404, -0.0007561403509, -0.0015594298246, -0.0023690789474, -0.0028309210526, -0.0026234649123, -0.0016664473684, -0.0001807017544, +0.0013921052632, +0.0025432017544, +0.0029447368421, +0.0025096491228, +0.0014723684211, +0.0002008771930, -0.0008366228070, -0.0014054824561, -0.0013451754386, -0.0008366228070, -0.0000335526316, +0.0006491228070, +0.0009638157895, +0.0009771929825, -0.0002208333333, -0.0003747807018, -0.0018203947368, -0.0026234649123, -0.0020278508772, -0.0007427631579, +0.0005620614035, +0.0019074561404, +0.0027774122807, +0.0033061403509, +0.0032660087719, +0.0029513157895, +0.0025631578947, +0.0018804824561, +0.0012515350877, +0.0000401315789, -0.0012114035088, -0.0025765350877, -0.0033596491228, -0.0033260964912, -0.0022085526316, -0.0005085526316, +0.0012714912281, +0.0023824561404, +0.0026234649123, +0.0020478070175, +0.0013116228070, +0.0009234649123, +0.0012848684211, +0.0022017543860, +0.0032993421053, +0.0040289473684, +0.0041962719298, +0.0037811403509, +0.0030383771930, +0.0020210526316, +0.0007697368421, -0.0008901315789, -0.0027171052632, -0.0043567982456, -0.0048721491228, -0.0037276315789, -0.0013787280702, +0.0010907894737, +0.0026567982456, +0.0004618421053, -0.0032725877193, -0.0044706140351, -0.0067861842105, -0.0001271929825, +0.0271712719298, +0.0275728070175, -0.0296006578947, -0.0846192982456, -0.0746208333333, -0.0039885964912, +0.0946513157895, +0.1792372807018, +0.2192848684211, +0.1940410087719, +0.1078554824561, -0.0104469298246, -0.1053458333333, -0.1385471491228, -0.1215015350877, -0.0807109649123, -0.0396394736842, -0.0055480263158, +0.0227945175439, +0.0308320175439, +0.0169989035088, +0.0033127192982, -0.0035870614035, +0.0024627192982, +0.0147032894737, +0.0147100877193, +0.0049993421053, -0.0009100877193, -0.0007361842105, +0.0010975877193, +0.0006826754386, -0.0076293859649, -0.0168649122807, -0.0225267543860, -0.0285232456140, -0.0296407894737, -0.0201508771930, -0.0106745614035, -0.0066991228070, -0.0105473684211, -0.0177015350877, -0.0207063596491, -0.0222993421053, -0.0246482456140, -0.0224396929825, -0.0147635964912, -0.0121870614035, -0.0134853070175, -0.0078903508772, -0.0003679824561, -0.0027973684211, -0.0111361842105, -0.0187789473684, -0.0254714912281, -0.0287574561404, -0.0222791666667, -0.0128896929825, -0.0096839912281, -0.0100653508772, -0.0087804824561, -0.0072679824561, -0.0048252192982, +0.0017535087719, +0.0089478070175, +0.0076763157895, -0.0018002192982, -0.0115510964912, -0.0170791666667, -0.0174739035088, -0.0151315789474, -0.0128962719298, -0.0119526315789, -0.0100519736842, -0.0080576754386, -0.0094497807018, -0.0108820175439, -0.0089410087719, -0.0087067982456, -0.0113035087719, -0.0136458333333, -0.0124614035088, -0.0068396929825, +0.0027640350877, +0.0127826754386, +0.0181098684211, +0.0168449561404, +0.0106410087719, +0.0020813596491, -0.0060633771930, -0.0099315789474, -0.0070940789474, -0.0025765350877, -0.0031120614035, -0.0061504385965, -0.0072747807018, -0.0056684210526, -0.0032324561404, +0.0008565789474, +0.0069600877193, +0.0118991228070, +0.0136725877193, +0.0125951754386, +0.0103934210526, +0.0097039473684, +0.0108015350877, +0.0102394736842, +0.0058625000000, -0.0002677631579, -0.0058024122807, -0.0105206140351, -0.0120866228070, -0.0085730263158, -0.0012381578947, +0.0067392543860, +0.0123342105263, +0.0142280701754, +0.0129030701754, +0.0103063596491, +0.0075155701754, +0.0038682017544, +0.0003480263158, -0.0020679824561, -0.0028175438596, -0.0016462719298, +0.0000133771930, +0.0010907894737, +0.0022552631579, +0.0034800438596, +0.0043701754386, +0.0056282894737, +0.0083186403509, +0.0116916666667, +0.0143353070175, +0.0156938596491, +0.0157271929825, +0.0141010964912, +0.0116247807018, +0.0105339912281, +0.0110089912281, +0.0118188596491, +0.0125282894737, +0.0120464912281, +0.0097175438596, +0.0064179824561, +0.0037677631579, +0.0029245614035, +0.0033394736842, +0.0041962719298, +0.0047515350877, +0.0046578947368, +0.0051532894737, +0.0066254385965, +0.0073015350877, +0.0069000000000, +0.0068328947368, +0.0066589912281, +0.0056217105263, +0.0046712719298, +0.0042497807018, +0.0036339912281, +0.0029982456140, +0.0025631578947, +0.0028508771930, +0.0041157894737, +0.0055682017544, +0.0060232456140, +0.0053339912281, +0.0038750000000, +0.0027907894737, +0.0030182017544, +0.0045508771930, +0.0066188596491, +0.0081513157895, +0.0085932017544, +0.0082719298246, +0.0078100877193, +0.0078302631579, +0.0089478070175, +0.0107078947368, +0.0119326754386, +0.0115712719298, +0.0098311403509, +0.0078234649123, +0.0072278508772, +0.0083789473684, +0.0102864035088, +0.0114039473684, +0.0113703947368, +0.0105741228070, +0.0096171052632, +0.0091083333333, +0.0087872807018, +0.0075557017544, +0.0048118421053, +0.0009771929825, -0.0025298245614, -0.0040622807018, -0.0036072368421, -0.0030048245614, -0.0032392543860, -0.0034131578947, -0.0034063596491, -0.0035671052632, -0.0034265350877, -0.0023690789474, -0.0007293859649, +0.0011175438596, +0.0030853070175, +0.0047785087719, +0.0058223684211, +0.0063578947368, +0.0066456140351, +0.0064114035088, +0.0054475877193, +0.0039885964912, +0.0027572368421, +0.0024225877193, +0.0028175438596, +0.0035537280702, +0.0044037280702, +0.0050796052632, +0.0056618421053, +0.0061905701754, +0.0059697368421, +0.0053940789474, +0.0052133771930, +0.0047048245614, +0.0033864035088, +0.0019475877193, +0.0004550438596, -0.0008500000000, -0.0009837719298, +0.0000000000000, +0.0011041666667, +0.0014456140351, +0.0005085526316, -0.0013853070175, -0.0032859649123, -0.0049122807018, -0.0056550438596, -0.0048519736842, -0.0031120614035, -0.0012982456140, +0.0006291666667, +0.0020010964912, +0.0016328947368, -0.0005554824561, -0.0033730263158, -0.0052000000000, -0.0053405701754, -0.0042497807018, -0.0029245614035, -0.0018002192982, -0.0010975877193, -0.0012381578947, -0.0024427631579, -0.0038081140351, -0.0044304824561, -0.0040622807018, -0.0035403508772, -0.0035201754386, -0.0036607456140, -0.0034131578947, -0.0032793859649, -0.0036741228070, -0.0044370614035, -0.0051666666667, -0.0056015350877, -0.0057622807018, -0.0066254385965, -0.0084526315789, -0.0099449561404, -0.0099717105263, -0.0086600877193, -0.0061837719298, -0.0029513157895, -0.0002743421053, +0.0004282894737, -0.0011041666667, -0.0035938596491, -0.0057956140351, -0.0069600877193, -0.0065451754386, -0.0048118421053, -0.0028375000000, -0.0012114035088, -0.0004885964912, -0.0004951754386, -0.0010506578947, -0.0018872807018, -0.0025699561404, -0.0032526315789, -0.0042765350877, -0.0050528508772, -0.0053004385965, -0.0054743421053, -0.0056817982456, -0.0054743421053, -0.0047984649123, -0.0041157894737, -0.0037745614035, -0.0038616228070, -0.0037879385965, -0.0030986842105, -0.0022085526316, -0.0016263157895, -0.0014589912281, -0.0014589912281, -0.0012515350877, -0.0012848684211, -0.0020745614035, -0.0031587719298, -0.0037076754386, -0.0039686403509, -0.0044103070175, -0.0049456140351, -0.0054208333333, -0.0058758771930, -0.0062506578947, -0.0064381578947, -0.0062774122807, -0.0061771929825, -0.0067326754386, -0.0075155701754, -0.0076092105263, -0.0070135964912, -0.0064984649123, -0.0062910087719, -0.0063912280702, -0.0069333333333, -0.0077497807018, -0.0081379385965, -0.0076629385965, -0.0065719298246, -0.0054342105263, -0.0045375000000, -0.0040824561404, -0.0042364035088, -0.0048721491228, -0.0056951754386, -0.0061236842105, -0.0055144736842, -0.0037142543860, -0.0014456140351, +0.0000736842105, +0.0002208333333, -0.0005822368421, -0.0016061403509, -0.0024493421053, -0.0027706140351, -0.0021015350877, -0.0003212719298, +0.0018471491228, +0.0034399122807, +0.0036607456140, +0.0021684210526, -0.0005219298246, -0.0033127192982, -0.0048385964912, -0.0045574561404, -0.0037142543860, -0.0037811403509, -0.0044236842105, -0.0045910087719, -0.0039752192982, -0.0027973684211, -0.0017333333333, -0.0015861842105, -0.0023491228070, -0.0032324561404, -0.0038750000000, -0.0044438596491, -0.0047984649123, -0.0046311403509, -0.0041092105263, -0.0036004385965, -0.0031923245614, -0.0028778508772, -0.0024493421053, -0.0016730263158, -0.0009100877193, -0.0005353070175, -0.0005287280702, -0.0009570175439, -0.0015258771930, -0.0017668859649, -0.0015526315789, -0.0009771929825, -0.0004951754386, -0.0007228070175, -0.0013250000000, -0.0017868421053, -0.0022486842105, -0.0026032894737, -0.0024828947368, -0.0021015350877, -0.0021015350877, -0.0026903508772, -0.0033929824561, -0.0035135964912, -0.0029046052632, -0.0020879385965, -0.0015460526316, -0.0013653508772, -0.0011578947368, -0.0006960526316, -0.0002609649123, -0.0001673245614, -0.0001539473684, +0.0000469298246, +0.0002811403509, +0.0003679824561, +0.0003144736842, +0.0003346491228, +0.0005890350877, +0.0004885964912, -0.0003679824561, -0.0012649122807, -0.0013921052632, -0.0006758771930, +0.0003010964912, +0.0009905701754, +0.0014589912281, +0.0016396929825, +0.0012381578947, +0.0005287280702, +0.0002074561404, +0.0006625000000, +0.0016798245614, +0.0028912280702, +0.0039083333333, +0.0044370614035, +0.0043500000000, +0.0039686403509, +0.0038013157895, +0.0039017543860, +0.0038348684211, +0.0034131578947, +0.0030585526316, +0.0030383771930, +0.0032190789474, +0.0035135964912, +0.0038548245614, +0.0038414473684, +0.0033997807018, +0.0029581140351, +0.0026300438596, +0.0023423245614, +0.0018938596491, +0.0011175438596, +0.0003881578947, +0.0002475877193, +0.0003480263158, +0.0002410087719, +0.0002008771930, +0.0005822368421, +0.0011846491228, +0.0016932017544, +0.0020611842105, +0.0022151315789, +0.0020879385965, +0.0019877192982, +0.0022620614035, +0.0028710526316, +0.0034197368421, +0.0034131578947, +0.0030585526316, +0.0028912280702, +0.0030986842105, +0.0036407894737, +0.0043434210526, +0.0048653508772, +0.0049925438596, +0.0048587719298, +0.0047182017544, +0.0045173245614, +0.0042429824561, +0.0042364035088, +0.0044304824561, +0.0043835526316, +0.0039686403509, +0.0033864035088, +0.0027304824561, +0.0021282894737, +0.0017868421053, +0.0018938596491, +0.0023557017544, +0.0029046052632, +0.0032256578947, +0.0030986842105, +0.0027572368421, +0.0026971491228, +0.0030449561404, +0.0035938596491, +0.0041493421053, +0.0045107456140, +0.0044638157895, +0.0041760964912, +0.0040355263158, +0.0040423245614, +0.0042096491228, +0.0045574561404, +0.0047449561404, +0.0044839912281, +0.0040690789474, +0.0038750000000, +0.0042162280702, +0.0048320175439, +0.0051732456140, +0.0050260964912, +0.0044839912281, +0.0035804824561, +0.0025497807018, +0.0018872807018, +0.0017199561404, +0.0017267543860, +0.0014923245614, +0.0012114035088, +0.0011912280702, +0.0013853070175, +0.0015660087719, +0.0019140350877, +0.0023625000000, +0.0026502192982, +0.0024962719298, +0.0016596491228, +0.0004350877193, -0.0005756578947, -0.0008699561404, -0.0002074561404, +0.0010105263158, +0.0019407894737, +0.0020679824561, +0.0014789473684, +0.0007896929825, +0.0004817982456, +0.0006291666667, +0.0010173245614, +0.0013519736842, +0.0012381578947, +0.0005756578947, -0.0001673245614, -0.0004817982456, -0.0003815789474, -0.0001070175439, +0.0001940789474, +0.0002743421053, +0.0000603070175, -0.0003346491228, -0.0006223684211, -0.0005756578947, -0.0001138157895, +0.0004083333333, +0.0005287280702, +0.0000802631579, -0.0005486842105, -0.0008967105263, -0.0007427631579, -0.0002074561404, +0.0004951754386, +0.0012247807018, +0.0016798245614, +0.0015125000000, +0.0008967105263, +0.0004282894737, +0.0003278508772, +0.0004618421053, +0.0008164473684, +0.0012313596491, +0.0015460526316, +0.0018537280702, +0.0022552631579, +0.0027171052632, +0.0029046052632, +0.0023625000000, +0.0012581140351, +0.0002074561404, -0.0005486842105, -0.0010708333333, -0.0012515350877, -0.0009638157895, -0.0002410087719, +0.0005287280702, +0.0009368421053, +0.0008833333333, +0.0004618421053, -0.0002142543860, -0.0009168859649, -0.0013986842105, -0.0017734649123, -0.0021214912281, -0.0022888157895, -0.0020879385965, -0.0017333333333, -0.0014254385965, -0.0012916666667, -0.0013050438596, -0.0013116228070, -0.0011510964912, -0.0007896929825, -0.0003679824561, -0.0001807017544, -0.0004149122807, -0.0009570175439, -0.0015728070175, -0.0019407894737, -0.0018070175439, -0.0012581140351, -0.0006758771930, -0.0003010964912, -0.0002342105263, -0.0003144736842, -0.0003546052632, -0.0004083333333, -0.0004817982456, -0.0002342105263, +0.0003212719298, +0.0008565789474, +0.0009771929825, +0.0006223684211, +0.0002543859649, +0.0003078947368, +0.0006559210526, +0.0009638157895, +0.0010239035088, +0.0008298245614, +0.0004885964912, +0.0000936403509, -0.0001539473684, -0.0002074561404, -0.0001004385965, +0.0000535087719, +0.0001872807018, +0.0001539473684, -0.0000067982456, -0.0000802631579, +0.0000936403509, +0.0003346491228, +0.0003144736842, -0.0001203947368, -0.0008699561404, -0.0016396929825, -0.0021081140351, -0.0020478070175, -0.0014923245614, -0.0006425438596, +0.0002208333333, +0.0008633771930, +0.0010574561404, +0.0008500000000, +0.0005890350877, +0.0005756578947, +0.0006960526316, +0.0007293859649, +0.0007561403509, +0.0009035087719, +0.0010239035088, +0.0009302631579, +0.0006692982456, +0.0004484649123, +0.0002276315789, -0.0000201754386, -0.0002276315789, -0.0003546052632, -0.0004416666667, -0.0006223684211, -0.0009638157895, -0.0014120614035, -0.0018537280702, -0.0021149122807, -0.0021883771930, -0.0021684210526, -0.0021883771930, -0.0021482456140, -0.0019541666667, -0.0018203947368, -0.0018002192982, -0.0015057017544, -0.0008232456140, -0.0001004385965, +0.0003480263158, +0.0005486842105, +0.0004817982456, +0.0000870614035, -0.0003679824561, -0.0004684210526, -0.0000335526316, +0.0007293859649, +0.0014254385965, +0.0017936403509, +0.0016864035088, +0.0011778508772, +0.0005219298246, +0.0000133771930, -0.0001940789474, -0.0001739035088, -0.0000870614035, -0.0001673245614, -0.0005688596491, -0.0010440789474, -0.0012447368421, -0.0011778508772, -0.0011377192982, -0.0012381578947, -0.0013585526316, -0.0014857456140, -0.0015526315789, -0.0013184210526, -0.0007896929825, -0.0002677631579, -0.0000668859649, -0.0003747807018, -0.0010708333333, -0.0018671052632, -0.0024359649123, -0.0026769736842, -0.0027105263158, -0.0026434210526, -0.0025230263158, -0.0023089912281, -0.0019609649123, -0.0015526315789, -0.0011846491228, -0.0009905701754, -0.0009771929825, -0.0010506578947, -0.0012381578947, -0.0014521929825, -0.0015258771930, -0.0012848684211, -0.0007561403509, -0.0002877192982, -0.0002208333333, -0.0006223684211, -0.0013317982456, -0.0020947368421, -0.0025096491228, -0.0023625000000, -0.0019609649123, -0.0016061403509, -0.0012447368421, -0.0009436403509, -0.0009436403509, -0.0011309210526, -0.0012247807018, -0.0011644736842, -0.0011712719298, -0.0013116228070, -0.0015326754386, -0.0017131578947, -0.0018269736842, -0.0018403508772, -0.0015861842105, -0.0009638157895, -0.0001739035088, +0.0004083333333, +0.0005756578947, +0.0003144736842, -0.0001271929825, -0.0005554824561, -0.0007561403509, -0.0007228070175, -0.0006223684211, -0.0005688596491, -0.0005085526316, -0.0005019736842, -0.0005688596491, -0.0006491228070, -0.0007561403509, -0.0009302631579, -0.0011846491228, -0.0015190789474, -0.0018471491228, -0.0020611842105, -0.0020611842105, -0.0018002192982, -0.0013787280702, -0.0010372807018, -0.0008366228070, -0.0007964912281, -0.0008967105263, -0.0009771929825, -0.0009436403509, -0.0009703947368, -0.0010574561404, -0.0010372807018, -0.0008833333333, -0.0006960526316, -0.0005353070175, -0.0004217105263, -0.0003949561404, -0.0004083333333, -0.0004484649123, -0.0004817982456, -0.0002410087719, +0.0003412280702, +0.0008699561404, +0.0009302631579, +0.0006157894737, +0.0003078947368, +0.0000335526316, -0.0003679824561, -0.0006491228070, -0.0004951754386, -0.0001471491228, +0.0001539473684, +0.0004350877193, +0.0007094298246, +0.0009234649123, +0.0010774122807, +0.0011912280702, +0.0011309210526, +0.0009168859649, +0.0005756578947, +0.0001203947368, -0.0002543859649, -0.0003412280702, +0.0000201754386, +0.0007361842105, +0.0013116228070, +0.0014120614035, +0.0011243421053, +0.0006892543860, +0.0003881578947, +0.0003881578947, +0.0006223684211, +0.0008098684211, +0.0007697368421, +0.0006491228070, +0.0005620614035, +0.0006024122807, +0.0008366228070, +0.0011778508772, +0.0014655701754, +0.0016530701754, +0.0016664473684, +0.0015190789474, +0.0012447368421, +0.0010173245614, +0.0008565789474, +0.0006892543860, +0.0005019736842, +0.0002877192982, -0.0000201754386, -0.0003346491228, -0.0003949561404, -0.0001070175439, +0.0003010964912, +0.0005421052632, +0.0005756578947, +0.0004618421053, +0.0002945175439, +0.0001807017544, +0.0001471491228, +0.0002609649123, +0.0006425438596, +0.0011712719298, +0.0014120614035, +0.0011578947368, +0.0007228070175, +0.0003881578947, +0.0003078947368, +0.0005890350877, +0.0010039473684, +0.0012848684211, +0.0013585526316, +0.0013519736842, +0.0013519736842, +0.0013184210526, +0.0011778508772, +0.0009638157895, +0.0007427631579, +0.0005956140351, +0.0005085526316, +0.0004684210526, +0.0005287280702, +0.0007293859649, +0.0010574561404, +0.0012515350877, +0.0010774122807, +0.0007763157895, +0.0005822368421, +0.0004149122807, +0.0003881578947, +0.0005956140351, +0.0008699561404, +0.0009638157895, +0.0007228070175, +0.0003078947368, +0.0000401315789, -0.0001070175439, -0.0003480263158, -0.0005756578947, -0.0005688596491, -0.0003078947368, +0.0000067982456, +0.0001271929825, +0.0000067982456, -0.0001271929825, -0.0000335526316, +0.0002142543860, +0.0003278508772, +0.0000267543860, -0.0006625000000, -0.0014054824561, -0.0016864035088, -0.0014054824561, -0.0008565789474, -0.0004282894737, -0.0004083333333, -0.0007495614035, -0.0010239035088, -0.0008901315789, -0.0004416666667, +0.0000000000000, +0.0002074561404, +0.0002342105263, +0.0002342105263, +0.0001739035088, +0.0000535087719, -0.0000736842105, -0.0002543859649, -0.0004817982456, -0.0006223684211, -0.0006692982456, -0.0006425438596, -0.0005486842105, -0.0004416666667, -0.0004217105263, -0.0003480263158, -0.0002074561404, -0.0001337719298, -0.0001337719298, -0.0003078947368, -0.0007697368421, -0.0011912280702, -0.0012581140351, -0.0011243421053, -0.0008967105263, -0.0005756578947, -0.0002609649123, +0.0000133771930, +0.0001337719298, +0.0000067982456, -0.0000870614035, +0.0000736842105, +0.0004083333333, +0.0006960526316, +0.0007495614035, +0.0006024122807, +0.0004484649123, +0.0004484649123, +0.0006892543860, +0.0011041666667, +0.0015057017544, +0.0018471491228, +0.0020478070175, +0.0018872807018, +0.0013519736842, +0.0008432017544, +0.0006491228070, +0.0007427631579, +0.0008833333333, +0.0008232456140, +0.0004817982456, -0.0001940789474, -0.0010239035088, -0.0014322368421, -0.0010239035088, +0.0000201754386, +0.0012247807018, +0.0021081140351, +0.0024160087719, +0.0020344298246, +0.0010173245614, -0.0003010964912, -0.0014054824561, -0.0017467105263, -0.0013184210526, -0.0006157894737, +0.0000000000000, +0.0004951754386, +0.0007763157895, +0.0007361842105, +0.0004618421053, +0.0002276315789, +0.0001138157895, +0.0000000000000, -0.0002475877193, -0.0006357456140, -0.0008432017544, -0.0005085526316, +0.0001605263158, +0.0006089912281, +0.0006089912281, +0.0003949561404, +0.0002342105263, +0.0000936403509, -0.0000870614035, -0.0001807017544, -0.0000067982456, +0.0003010964912, +0.0006559210526, +0.0009771929825, +0.0011578947368, +0.0011712719298, +0.0010842105263, +0.0008432017544, +0.0005822368421, +0.0003346491228, +0.0000802631579, -0.0001337719298, -0.0002677631579, -0.0003212719298, -0.0001807017544, +0.0000870614035, +0.0003480263158, +0.0004684210526, +0.0005554824561, +0.0007228070175, +0.0007361842105, +0.0005353070175, +0.0003881578947, +0.0002677631579, -0.0001138157895, -0.0005620614035, -0.0006491228070, -0.0002743421053, +0.0003480263158, +0.0008699561404, +0.0010239035088, +0.0007697368421, +0.0001872807018, -0.0004149122807, -0.0007427631579, -0.0007561403509, -0.0004416666667, -0.0000668859649, -0.0000469298246, -0.0003614035088, -0.0006758771930, -0.0007896929825, -0.0005956140351, +0.0000000000000, +0.0007361842105, +0.0012114035088, +0.0012714912281, +0.0008967105263, +0.0001605263158, -0.0006491228070, -0.0011712719298, -0.0012247807018, -0.0008232456140, -0.0002743421053, +0.0000335526316, +0.0001004385965, +0.0001138157895, +0.0000603070175, -0.0001471491228, -0.0003346491228, -0.0002208333333, +0.0000802631579, +0.0002410087719, +0.0000802631579, -0.0002543859649, -0.0004149122807, -0.0001673245614, +0.0004015350877, +0.0009502192982, +0.0011445175439, +0.0008967105263, +0.0002342105263, -0.0005019736842, -0.0008901315789, -0.0008164473684, -0.0005153508772, -0.0000936403509, +0.0002342105263, +0.0003212719298, +0.0001872807018, +0.0000335526316, +0.0001337719298, +0.0005153508772, +0.0010173245614, +0.0014655701754, +0.0015728070175, +0.0011175438596, +0.0002276315789, -0.0008164473684, -0.0015660087719, -0.0016997807018, -0.0012714912281, -0.0006357456140, +0.0000000000000, +0.0007361842105, +0.0015728070175, +0.0021616228070, +0.0024160087719, +0.0022151315789, +0.0013184210526, -0.0003010964912, -0.0022151315789, -0.0040289473684, -0.0054543859649, -0.0061771929825, -0.0060164473684, -0.0050662280702, -0.0034532894737, -0.0014655701754, +0.0004282894737, +0.0018739035088, +0.0025230263158, +0.0023690789474, +0.0016932017544, +0.0008901315789, +0.0002743421053, -0.0000535087719, -0.0001070175439, +0.0000401315789, +0.0002410087719, +0.0003278508772, +0.0001138157895, -0.0005219298246, -0.0015125000000, -0.0024962719298, -0.0030651315789, -0.0029780701754, -0.0020412280702, -0.0004083333333, +0.0010975877193, +0.0015728070175, +0.0010774122807, +0.0004885964912, +0.0003679824561, +0.0004550438596, +0.0004885964912, +0.0006491228070, +0.0009638157895, +0.0011041666667, +0.0008232456140, +0.0001940789474, -0.0004083333333, -0.0005956140351, -0.0003881578947, -0.0001271929825, +0.0000201754386, +0.0000535087719, -0.0000936403509, -0.0002074561404, +0.0001539473684, +0.0011846491228, +0.0024293859649, +0.0029646929825, +0.0024627192982, +0.0013787280702, +0.0002142543860, -0.0005756578947, -0.0007896929825, -0.0006559210526, -0.0004282894737, -0.0003010964912, -0.0005219298246, -0.0009905701754, -0.0012247807018, -0.0009638157895, -0.0002208333333, +0.0008767543860, +0.0020010964912, +0.0027706140351, +0.0028844298246, +0.0022085526316, +0.0010372807018, -0.0002543859649, -0.0013787280702, -0.0019743421053, -0.0019274122807, -0.0014188596491, -0.0006559210526, +0.0000936403509, +0.0005890350877, +0.0007361842105, +0.0006625000000, +0.0005085526316, +0.0002475877193, -0.0002208333333, -0.0009771929825, -0.0018002192982, -0.0022686403509, -0.0021883771930, -0.0015660087719, -0.0006357456140, +0.0001807017544, +0.0007831140351, +0.0010708333333, +0.0008432017544, +0.0000936403509, -0.0010440789474, -0.0021817982456, -0.0028107456140, -0.0027438596491, -0.0020210526316, -0.0008500000000, +0.0002609649123, +0.0007160087719, +0.0004083333333, -0.0002677631579, -0.0009570175439, -0.0014254385965, -0.0015258771930, -0.0012782894737, -0.0007361842105, -0.0002074561404, -0.0000267543860, -0.0001872807018, -0.0004618421053, -0.0006826754386, -0.0005822368421, -0.0003144736842, -0.0000401315789, +0.0003881578947, +0.0010307017544, +0.0016263157895, +0.0019877192982, +0.0020010964912, +0.0016730263158, +0.0011846491228, +0.0006491228070, -0.0000668859649, -0.0010173245614, -0.0019743421053, -0.0027105263158, -0.0030250000000, -0.0026769736842, -0.0015190789474, +0.0000335526316, +0.0011980263158, +0.0015927631579, +0.0015190789474, +0.0013116228070, +0.0010640350877, +0.0009100877193, +0.0010574561404, +0.0014589912281, +0.0017734649123, +0.0017535087719, +0.0013853070175, +0.0009638157895, +0.0006892543860, +0.0005486842105, +0.0004618421053, +0.0002877192982, +0.0000401315789, -0.0001070175439, -0.0001405701754, -0.0002008771930, -0.0002475877193, -0.0001471491228, +0.0000133771930, +0.0000469298246, -0.0001138157895, -0.0004752192982, -0.0007561403509, -0.0006157894737, -0.0000668859649, +0.0005085526316, +0.0006826754386, +0.0002743421053, -0.0004282894737, -0.0009703947368, -0.0010708333333, -0.0006157894737, +0.0001539473684, +0.0007763157895, +0.0008432017544, +0.0004217105263, -0.0000335526316, -0.0002410087719, -0.0003144736842, -0.0003212719298, -0.0001605263158, +0.0000133771930, -0.0000335526316, -0.0002677631579, -0.0005890350877, -0.0008901315789, -0.0010307017544, -0.0010173245614, -0.0009168859649, -0.0008232456140, -0.0006024122807, -0.0000535087719, +0.0006692982456, +0.0012179824561, +0.0014521929825, +0.0013921052632, +0.0011175438596, +0.0006692982456, +0.0001807017544, -0.0001673245614, -0.0003346491228, -0.0004083333333, -0.0004618421053, -0.0004885964912, -0.0004885964912, -0.0005153508772, -0.0005085526316, -0.0003546052632, -0.0001539473684, -0.0002208333333, -0.0005822368421, -0.0009502192982, -0.0010239035088, -0.0007293859649, -0.0003679824561, -0.0002475877193, -0.0002410087719, -0.0001539473684, +0.0000133771930, +0.0002543859649, +0.0005153508772, +0.0007026315789, +0.0007629385965, +0.0006960526316, +0.0006024122807, +0.0004217105263, -0.0000067982456, -0.0006024122807, -0.0009837719298, -0.0008767543860, -0.0003546052632, +0.0003679824561, +0.0010907894737, +0.0015190789474, +0.0014188596491, +0.0010372807018, +0.0006625000000, +0.0003412280702, +0.0000802631579, -0.0001605263158, -0.0003815789474, -0.0004282894737, -0.0001539473684, +0.0003747807018, +0.0010307017544, +0.0016664473684, +0.0020478070175, +0.0020679824561, +0.0017600877193, +0.0011578947368, +0.0003747807018, -0.0003144736842, -0.0007094298246, -0.0007160087719, -0.0003815789474, +0.0000668859649, +0.0005219298246, +0.0008366228070, +0.0008232456140, +0.0006024122807, +0.0004149122807, +0.0003815789474, +0.0005620614035, +0.0008366228070, +0.0009703947368, +0.0009168859649, +0.0007629385965, +0.0006491228070, +0.0007160087719, +0.0009302631579, +0.0011175438596, +0.0011778508772, +0.0009837719298, +0.0005287280702, +0.0000401315789, -0.0002342105263, -0.0001872807018, +0.0001539473684, +0.0006692982456, +0.0010907894737, +0.0011578947368, +0.0009168859649, +0.0005688596491, +0.0002074561404, -0.0000936403509, -0.0002208333333, -0.0001138157895, +0.0001004385965, +0.0002342105263, +0.0001673245614, -0.0000133771930, -0.0001739035088, -0.0001739035088, -0.0000267543860, +0.0001070175439, +0.0001872807018, +0.0001605263158, +0.0000201754386, -0.0001940789474, -0.0004752192982, -0.0006892543860, -0.0006960526316, -0.0004752192982, -0.0001605263158, +0.0001070175439, +0.0002543859649, +0.0001940789474, -0.0000668859649, -0.0004484649123, -0.0007094298246, -0.0006425438596, -0.0004217105263, -0.0003078947368, -0.0002276315789, -0.0000870614035, -0.0000133771930, -0.0001004385965, -0.0003546052632, -0.0006089912281, -0.0006559210526, -0.0004282894737, -0.0000067982456, +0.0003546052632, +0.0004484649123, +0.0003278508772, +0.0001004385965, -0.0001739035088, -0.0003815789474, -0.0003679824561, -0.0001271929825, +0.0002543859649, +0.0006692982456, +0.0010239035088, +0.0011309210526, +0.0009302631579, +0.0006024122807, +0.0002811403509, +0.0000000000000, -0.0002074561404, -0.0004015350877, -0.0005956140351, -0.0007697368421, -0.0008767543860, -0.0007964912281, -0.0006024122807, -0.0004752192982, -0.0005219298246, -0.0007561403509, -0.0011377192982, -0.0015594298246, -0.0018471491228, -0.0018471491228, -0.0015660087719, -0.0010574561404, -0.0004015350877, +0.0001138157895, +0.0002276315789, -0.0000067982456, -0.0003412280702, -0.0005688596491, -0.0006357456140, -0.0005956140351, -0.0005219298246, -0.0004684210526, -0.0004752192982, -0.0004885964912, -0.0004416666667, -0.0004083333333, -0.0004618421053, -0.0004752192982, -0.0004015350877, -0.0004149122807, -0.0005822368421, -0.0007561403509, -0.0007629385965, -0.0006089912281, -0.0003614035088, -0.0000936403509, -0.0000870614035, -0.0004083333333, -0.0007697368421, -0.0009100877193, -0.0007561403509, -0.0004416666667, -0.0002877192982, -0.0004149122807, -0.0006758771930, -0.0008967105263, -0.0010842105263, -0.0011309210526, -0.0009234649123, -0.0004550438596, +0.0000736842105, +0.0004618421053, +0.0005756578947, +0.0005421052632, +0.0004484649123, +0.0003412280702, +0.0003546052632, +0.0005287280702, +0.0007896929825, +0.0011309210526, +0.0014723684211, +0.0017065789474, +0.0017535087719, +0.0015125000000, +0.0010173245614, +0.0005019736842, +0.0001539473684, -0.0000067982456, -0.0000668859649, -0.0000603070175, +0.0000401315789, +0.0002475877193, +0.0004752192982, +0.0006826754386, +0.0008633771930, +0.0009168859649, +0.0007160087719, +0.0004015350877, +0.0002074561404, +0.0002609649123, +0.0004416666667, +0.0005620614035, +0.0004885964912, +0.0003346491228, +0.0002475877193, +0.0002276315789, +0.0001539473684, +0.0000603070175, +0.0000936403509, +0.0003144736842, +0.0005756578947, +0.0007697368421, +0.0008030701754, +0.0007094298246, +0.0006157894737, +0.0006089912281, +0.0006157894737, +0.0005353070175, +0.0002945175439, -0.0000736842105, -0.0004484649123, -0.0006425438596, -0.0005486842105, -0.0002410087719, +0.0000870614035, +0.0003144736842, +0.0003412280702, +0.0002410087719, +0.0001271929825, +0.0000736842105, +0.0001337719298, +0.0002276315789, +0.0002945175439, +0.0004282894737, +0.0006291666667, +0.0006960526316, +0.0005554824561, +0.0002142543860, -0.0002074561404, -0.0005486842105, -0.0007160087719, -0.0007629385965, -0.0006357456140, -0.0003278508772, +0.0000201754386, +0.0002743421053, +0.0004350877193, +0.0004484649123, +0.0002410087719, -0.0001539473684, -0.0005287280702, -0.0006625000000, -0.0005019736842, -0.0001271929825, +0.0003212719298, +0.0005956140351, +0.0006157894737, +0.0005085526316, +0.0004817982456, +0.0005486842105, +0.0006692982456, +0.0008565789474, +0.0010372807018, +0.0011377192982, +0.0010907894737, +0.0008164473684, +0.0004282894737, +0.0000870614035, -0.0002276315789, -0.0006024122807, -0.0009168859649, -0.0010307017544, -0.0009368421053, -0.0007427631579, -0.0005486842105, -0.0004282894737, -0.0003480263158, -0.0003480263158, -0.0004885964912, -0.0006024122807, -0.0005287280702, -0.0004083333333, -0.0003546052632, -0.0003480263158, -0.0003144736842, -0.0001405701754, +0.0000469298246, +0.0000067982456, -0.0002342105263, -0.0004618421053, -0.0005421052632, -0.0005019736842, -0.0004951754386, -0.0005890350877, -0.0006223684211, -0.0005085526316, -0.0003346491228, -0.0001940789474, -0.0000469298246, +0.0001539473684, +0.0002945175439, +0.0002208333333, +0.0000267543860, -0.0001004385965, -0.0000401315789, +0.0001337719298, +0.0001807017544, +0.0000267543860, -0.0001673245614, -0.0002677631579, -0.0002945175439, -0.0002342105263, -0.0001807017544, -0.0002342105263, -0.0004350877193, -0.0006157894737, -0.0006357456140, -0.0004484649123, -0.0003144736842, -0.0003679824561, -0.0005153508772, -0.0005688596491, -0.0004618421053, -0.0001872807018, +0.0000870614035, +0.0002609649123, +0.0003144736842, +0.0003010964912, +0.0002475877193, +0.0002074561404, +0.0002074561404, +0.0003212719298, +0.0005287280702, +0.0007763157895, +0.0009436403509, +0.0009971491228, +0.0008901315789, +0.0005688596491, +0.0000736842105, -0.0003747807018, -0.0006559210526, -0.0007896929825, -0.0007697368421, -0.0006692982456, -0.0006223684211, -0.0006892543860, -0.0007697368421, -0.0007228070175, -0.0005756578947, -0.0003949561404, -0.0003078947368, -0.0004416666667, -0.0007228070175, -0.0008833333333, -0.0007561403509, -0.0004618421053, -0.0001739035088, +0.0000469298246, +0.0002543859649, +0.0003614035088, +0.0002609649123, -0.0000201754386, -0.0003010964912, -0.0004484649123, -0.0004550438596, -0.0003949561404, -0.0003010964912, -0.0002008771930, -0.0001203947368, -0.0001605263158, -0.0003412280702, -0.0005890350877, -0.0006892543860, -0.0004885964912, -0.0000802631579, +0.0003078947368, +0.0005421052632, +0.0005554824561, +0.0004015350877, +0.0001203947368, -0.0001605263158, -0.0002609649123, -0.0000802631579, +0.0003078947368, +0.0007561403509, +0.0010307017544, +0.0010640350877, +0.0008833333333, +0.0006089912281, +0.0003815789474, +0.0002609649123, +0.0001605263158, +0.0000469298246, -0.0000401315789, -0.0000267543860, +0.0001271929825, +0.0004217105263, +0.0007896929825, +0.0011041666667, +0.0012114035088, +0.0010975877193, +0.0008432017544, +0.0005085526316, +0.0002142543860, +0.0001605263158, +0.0003815789474, +0.0007293859649, +0.0009638157895, +0.0009905701754, +0.0008633771930, +0.0006223684211, +0.0003546052632, +0.0001539473684, +0.0000335526316, -0.0000267543860, -0.0000603070175, -0.0000870614035, -0.0000603070175, -0.0000201754386, -0.0000133771930, -0.0000201754386, -0.0000603070175, -0.0001337719298, -0.0001807017544, -0.0002074561404, -0.0002945175439, -0.0003881578947, -0.0003815789474, -0.0001807017544, +0.0001539473684, +0.0004083333333, +0.0004550438596, +0.0003881578947, +0.0002877192982, +0.0001605263158, +0.0000603070175, -0.0000401315789, -0.0001605263158, -0.0002743421053, -0.0004350877193, -0.0006223684211, -0.0007160087719, -0.0006291666667, -0.0003881578947, -0.0001203947368, +0.0001070175439, +0.0003010964912, +0.0004951754386, +0.0006425438596, +0.0006692982456, +0.0005085526316, +0.0001872807018, -0.0001004385965, -0.0002008771930, -0.0001203947368, +0.0000802631579, +0.0003546052632, +0.0006223684211, +0.0007831140351, +0.0008098684211, +0.0007763157895, +0.0007293859649, +0.0006692982456, +0.0005421052632, +0.0004083333333, +0.0003144736842, +0.0002008771930, +0.0000469298246, -0.0001203947368, -0.0002877192982, -0.0003815789474, -0.0003412280702, -0.0002543859649, -0.0002543859649, -0.0003480263158, -0.0004817982456, -0.0006024122807, -0.0006559210526, -0.0006892543860, -0.0007094298246, -0.0006223684211, -0.0004416666667, -0.0003212719298, -0.0003546052632, -0.0004885964912, -0.0006491228070, -0.0007964912281, -0.0008901315789, -0.0008432017544, -0.0005822368421, -0.0002074561404, +0.0000469298246, +0.0000736842105, -0.0001070175439, -0.0003747807018, -0.0006625000000, -0.0008298245614, -0.0006892543860, -0.0002945175439, +0.0000802631579, +0.0002142543860, +0.0000535087719, -0.0001940789474, -0.0003747807018, -0.0004550438596, -0.0004217105263, -0.0002342105263, +0.0000401315789, +0.0003278508772, +0.0005019736842, +0.0004752192982, +0.0003614035088, +0.0002877192982, +0.0002008771930, +0.0000469298246, -0.0000802631579, -0.0001337719298, -0.0000936403509, -0.0000401315789, +0.0000000000000, +0.0000267543860, +0.0000000000000, -0.0000936403509, -0.0001539473684, -0.0001070175439, +0.0000668859649, +0.0003412280702, +0.0005956140351, +0.0006758771930, +0.0005019736842, +0.0001203947368, -0.0002677631579, -0.0005421052632, -0.0006826754386, -0.0007293859649, -0.0006758771930, -0.0005956140351, -0.0005085526316, -0.0004083333333, -0.0002677631579, -0.0001138157895, -0.0000401315789, -0.0000668859649, -0.0001070175439, -0.0001203947368, -0.0000535087719, +0.0000401315789, +0.0001004385965, +0.0000802631579, -0.0000603070175, -0.0002811403509, -0.0003679824561, -0.0002677631579, -0.0001203947368, +0.0000000000000, +0.0001070175439, +0.0002008771930, +0.0001807017544, +0.0000469298246, -0.0000603070175, -0.0000870614035, -0.0001138157895, -0.0001405701754, -0.0000802631579, +0.0000668859649, +0.0001739035088, +0.0001004385965, -0.0000870614035, -0.0002475877193, -0.0003278508772, -0.0003010964912, -0.0001605263158, +0.0000000000000, +0.0000267543860, -0.0000736842105, -0.0002208333333, -0.0003412280702, -0.0003144736842, -0.0000870614035, +0.0002008771930, +0.0003815789474, +0.0004752192982, +0.0005019736842, +0.0005287280702, +0.0006291666667, +0.0006960526316, +0.0006223684211, +0.0004618421053, +0.0002743421053, +0.0000201754386, -0.0002677631579, -0.0005085526316, -0.0005153508772, -0.0003212719298, -0.0000936403509, +0.0000201754386, +0.0000603070175, +0.0000870614035, +0.0001203947368, +0.0001070175439, +0.0000802631579, +0.0001004385965, +0.0001605263158, +0.0002276315789, +0.0002677631579, +0.0002074561404, +0.0001138157895, +0.0000936403509, +0.0001872807018, +0.0002945175439, +0.0002609649123, +0.0000401315789, -0.0002342105263, -0.0004752192982, -0.0005756578947, -0.0004149122807, -0.0000335526316, +0.0003480263158, +0.0005688596491, +0.0006223684211, +0.0006625000000, +0.0007361842105, +0.0007763157895, +0.0006960526316, +0.0005019736842, +0.0002609649123, +0.0000335526316, -0.0001405701754, -0.0002208333333, -0.0001203947368, +0.0001271929825, +0.0002945175439, +0.0002142543860, +0.0000335526316, -0.0000802631579, -0.0001004385965, +0.0000469298246, +0.0003010964912, +0.0005153508772, +0.0006559210526, +0.0006559210526, +0.0004817982456, +0.0002008771930, -0.0000603070175, -0.0002743421053, -0.0004350877193, -0.0005153508772, -0.0004684210526, -0.0003747807018, -0.0002743421053, -0.0001337719298, +0.0000335526316, +0.0001739035088, +0.0002945175439, +0.0003881578947, +0.0004282894737, +0.0004282894737, +0.0004217105263, +0.0003278508772, +0.0001070175439, -0.0000936403509, -0.0001471491228, -0.0000736842105, +0.0000335526316, +0.0001539473684, +0.0003278508772, +0.0004684210526, +0.0003815789474, +0.0000936403509, -0.0000802631579, +0.0000201754386, +0.0002276315789, +0.0002811403509, +0.0002008771930, +0.0002208333333, +0.0003546052632, +0.0004149122807, +0.0004149122807, +0.0004752192982, +0.0005688596491, +0.0004752192982, +0.0000469298246, -0.0004550438596, -0.0006223684211, -0.0004217105263, -0.0000936403509, +0.0001807017544, +0.0003614035088, +0.0004015350877, +0.0003144736842, +0.0001203947368, -0.0000870614035, -0.0002008771930, -0.0001271929825, +0.0001070175439, +0.0004484649123, +0.0007561403509, +0.0007964912281, +0.0004684210526, -0.0000469298246, -0.0004416666667, -0.0004951754386, -0.0002342105263, +0.0001138157895, +0.0003815789474, +0.0003881578947, +0.0000870614035, -0.0003679824561, -0.0007094298246, -0.0007427631579, -0.0004684210526, -0.0000335526316, +0.0004015350877, +0.0007361842105, +0.0008967105263, +0.0007361842105, +0.0002677631579, -0.0002410087719, -0.0004885964912, -0.0005153508772, -0.0004684210526, -0.0003480263158, -0.0001471491228, -0.0000201754386, -0.0000603070175, -0.0001337719298, -0.0000067982456, +0.0003614035088, +0.0006625000000, +0.0006357456140, +0.0005085526316, +0.0003881578947, +0.0001940789474, +0.0000133771930, -0.0000133771930, +0.0000133771930, -0.0000067982456, -0.0002276315789, -0.0005219298246, -0.0005421052632, -0.0001940789474, +0.0002743421053, +0.0006826754386, +0.0011175438596, +0.0016864035088, +0.0020344298246, +0.0015793859649, +0.0002475877193, -0.0013653508772, -0.0025631578947, -0.0028844298246, -0.0022151315789, -0.0008030701754, +0.0008232456140, +0.0019809210526, +0.0021015350877, +0.0011912280702, -0.0002008771930, -0.0013853070175, -0.0018403508772, -0.0014991228070, -0.0005620614035, +0.0004817982456, +0.0011445175439, +0.0012714912281, +0.0012046052632, +0.0011445175439, +0.0009638157895, +0.0004817982456, -0.0002677631579, -0.0010506578947, -0.0014723684211, -0.0013787280702, -0.0008500000000, -0.0000668859649, +0.0007293859649, +0.0011712719298, +0.0010440789474, +0.0004752192982, -0.0002677631579, -0.0009100877193, -0.0011644736842, -0.0009035087719, -0.0002142543860, +0.0005085526316, +0.0008699561404, +0.0007361842105, +0.0003010964912, -0.0001405701754, -0.0004350877193, -0.0004951754386, -0.0003346491228, -0.0002208333333, -0.0004484649123, -0.0009168859649, -0.0011980263158, -0.0010105263158, -0.0004752192982, +0.0001739035088, +0.0008633771930, +0.0014589912281, +0.0016530701754, +0.0013250000000, +0.0007094298246, +0.0000936403509, -0.0004217105263, -0.0006826754386, -0.0005353070175, -0.0001337719298, +0.0001070175439, -0.0000267543860, -0.0004752192982, -0.0009703947368, -0.0012782894737, -0.0012782894737, -0.0009368421053, -0.0003078947368, +0.0003078947368, +0.0005890350877, +0.0004015350877, -0.0001337719298, -0.0007427631579, -0.0010774122807, -0.0009638157895, -0.0005085526316, -0.0000335526316, +0.0002008771930, +0.0001337719298, -0.0000870614035, -0.0002811403509, -0.0003346491228, -0.0002543859649, -0.0001673245614, -0.0002074561404, -0.0003212719298, -0.0003881578947, -0.0002743421053, -0.0000201754386, +0.0001471491228, +0.0001605263158, +0.0001337719298, +0.0001807017544, +0.0002410087719, +0.0002208333333, +0.0000201754386, -0.0002945175439, -0.0004752192982, -0.0003278508772, -0.0000067982456, +0.0002475877193, +0.0003815789474, +0.0004350877193, +0.0003546052632, +0.0001271929825, -0.0001203947368, -0.0002945175439, -0.0004684210526, -0.0007094298246, -0.0009368421053, -0.0009570175439, -0.0007094298246, -0.0003546052632, -0.0000603070175, +0.0000936403509, +0.0000267543860, -0.0003078947368, -0.0008098684211, -0.0012381578947, -0.0013317982456, -0.0010506578947, -0.0006625000000, -0.0004015350877, -0.0002543859649, -0.0001138157895, -0.0000067982456, +0.0000267543860, +0.0000335526316, -0.0000469298246, -0.0002208333333, -0.0003278508772, -0.0003278508772, -0.0003412280702, -0.0004550438596, -0.0006024122807, -0.0005620614035, -0.0001872807018, +0.0003546052632, +0.0007561403509, +0.0007629385965, +0.0003614035088, -0.0002475877193, -0.0008098684211, -0.0011309210526, -0.0011578947368, -0.0008901315789, -0.0003815789474, +0.0002276315789, +0.0007094298246, +0.0009035087719, +0.0007896929825, +0.0004618421053, +0.0000870614035, -0.0001271929825, -0.0001337719298, -0.0000469298246, -0.0000736842105, -0.0002811403509, -0.0005153508772, -0.0005620614035, -0.0004015350877, -0.0001872807018, -0.0000535087719, +0.0000067982456, +0.0000603070175, +0.0001138157895, +0.0001539473684, +0.0002276315789, +0.0003546052632, +0.0005153508772, +0.0006024122807, +0.0005688596491, +0.0004416666667, +0.0002543859649, +0.0000603070175, +0.0000133771930, +0.0000936403509, +0.0001940789474, +0.0001872807018, +0.0000067982456, -0.0002743421053, -0.0004951754386, -0.0005353070175, -0.0004217105263, -0.0003144736842, -0.0002543859649, -0.0001940789474, -0.0001605263158, -0.0002410087719, -0.0004618421053, -0.0006425438596, -0.0005956140351, -0.0003881578947, -0.0001807017544, -0.0000401315789, +0.0000736842105, +0.0002208333333, +0.0002677631579, +0.0001673245614, +0.0000469298246, +0.0000335526316, +0.0001471491228, +0.0003747807018, +0.0006357456140, +0.0009771929825, +0.0013451754386, +0.0016129385965, +0.0016730263158, +0.0014589912281, +0.0009771929825, +0.0004484649123, +0.0001271929825, +0.0000802631579, +0.0002543859649, +0.0005756578947, +0.0009436403509, +0.0012046052632, +0.0012313596491, +0.0010708333333, +0.0008500000000, +0.0005421052632, +0.0001471491228, -0.0002008771930, -0.0003881578947, -0.0003815789474, -0.0002677631579, -0.0001271929825, +0.0000401315789, +0.0002074561404, +0.0003546052632, +0.0004951754386, +0.0006223684211, +0.0006960526316, +0.0007293859649, +0.0006960526316, +0.0005822368421, +0.0003278508772, -0.0000668859649, -0.0005287280702, -0.0009100877193, -0.0010574561404, -0.0009502192982, -0.0007629385965, -0.0006758771930, -0.0007228070175, -0.0008164473684, -0.0008901315789, -0.0008967105263, -0.0008098684211, -0.0006157894737, -0.0003346491228, +0.0000000000000, +0.0003480263158, +0.0005756578947, +0.0005554824561, +0.0003346491228, +0.0001004385965, +0.0000535087719, +0.0001940789474, +0.0003212719298, +0.0002208333333, -0.0001004385965, -0.0004951754386, -0.0007561403509, -0.0008298245614, -0.0007561403509, -0.0005890350877, -0.0003747807018, -0.0001138157895, +0.0001337719298, +0.0003278508772, +0.0004350877193, +0.0004618421053, +0.0004282894737, +0.0003278508772, +0.0002074561404, +0.0001138157895, +0.0000267543860, -0.0001004385965, -0.0003144736842, -0.0005153508772, -0.0006157894737, -0.0006692982456, -0.0007160087719, -0.0007026315789, -0.0006089912281, -0.0005019736842, -0.0004015350877, -0.0002543859649, -0.0000936403509, +0.0000000000000, -0.0000603070175, -0.0002208333333, -0.0003747807018, -0.0004752192982, -0.0004885964912, -0.0003679824561, -0.0001605263158, +0.0000668859649, +0.0002543859649, +0.0004083333333, +0.0006089912281, +0.0008500000000, +0.0010239035088, +0.0010440789474, +0.0009302631579, +0.0008232456140, +0.0007896929825, +0.0007763157895, +0.0007495614035, +0.0007561403509, +0.0007763157895, +0.0006892543860, +0.0004484649123, +0.0001070175439, -0.0001070175439, -0.0000335526316, +0.0002609649123, +0.0004885964912, +0.0004752192982, +0.0003078947368, +0.0000870614035, -0.0001405701754, -0.0002811403509, -0.0003010964912, -0.0002743421053, -0.0002945175439, -0.0003010964912, -0.0002543859649, -0.0002142543860, -0.0002609649123, -0.0003212719298, -0.0002677631579, -0.0000668859649, +0.0002142543860, +0.0004282894737, +0.0004752192982, +0.0003480263158, +0.0001203947368, -0.0000535087719, -0.0001405701754, -0.0001539473684, -0.0001004385965, +0.0000067982456, +0.0001004385965, +0.0001471491228, +0.0001337719298, +0.0000335526316, -0.0001138157895, -0.0002276315789, -0.0002743421053, -0.0002609649123, -0.0001138157895, +0.0002475877193, +0.0007629385965, +0.0011846491228, +0.0013050438596, +0.0010842105263, +0.0006758771930, +0.0003010964912, +0.0001739035088, +0.0003278508772, +0.0005890350877, +0.0007896929825, +0.0008833333333, +0.0008565789474, +0.0007361842105, +0.0005421052632, +0.0003212719298, +0.0001203947368, +0.0000067982456, +0.0000469298246, +0.0002475877193, +0.0004885964912, +0.0006357456140, +0.0005890350877, +0.0003679824561, +0.0000469298246, -0.0002410087719, -0.0003747807018, -0.0002609649123, -0.0000067982456, +0.0001807017544, +0.0001807017544, -0.0000401315789, -0.0004350877193, -0.0008164473684, -0.0009703947368, -0.0008098684211, -0.0004550438596, -0.0001337719298, -0.0000133771930, -0.0001471491228, -0.0004817982456, -0.0008366228070, -0.0009905701754, -0.0008901315789, -0.0006291666667, -0.0003614035088, -0.0002342105263, -0.0002342105263, -0.0002475877193, -0.0002074561404, -0.0000668859649, +0.0001471491228, +0.0003480263158, +0.0004817982456, +0.0005688596491, +0.0005421052632, +0.0003614035088, +0.0001004385965, -0.0001004385965, -0.0001337719298, +0.0000267543860, +0.0002543859649, +0.0004149122807, +0.0004752192982, +0.0004684210526, +0.0004350877193, +0.0003881578947, +0.0002811403509, +0.0001539473684, -0.0000067982456, -0.0001807017544, -0.0002743421053, -0.0001405701754, +0.0002008771930, +0.0005956140351, +0.0008500000000, +0.0008901315789, +0.0007293859649, +0.0004684210526, +0.0001872807018, -0.0000267543860, -0.0001271929825, -0.0001271929825, -0.0001138157895, -0.0001605263158, -0.0003212719298, -0.0005085526316, -0.0005353070175, -0.0003278508772, +0.0000000000000, +0.0002677631579, +0.0003346491228, +0.0001739035088, -0.0001807017544, -0.0005756578947, -0.0007964912281, -0.0007629385965, -0.0005822368421, -0.0004217105263, -0.0003747807018, -0.0004149122807, -0.0004350877193, -0.0003815789474, -0.0002475877193, -0.0000736842105, +0.0000736842105, +0.0001070175439, -0.0000668859649, -0.0003949561404, -0.0006758771930, -0.0007361842105, -0.0004951754386, -0.0000802631579, +0.0003010964912, +0.0004282894737, +0.0002008771930, -0.0002609649123, -0.0006425438596, -0.0007427631579, -0.0005890350877, -0.0002945175439, +0.0000000000000, +0.0001872807018, +0.0001872807018, +0.0000936403509, +0.0000335526316, +0.0000802631579, +0.0001471491228, +0.0001539473684, +0.0001004385965, +0.0000535087719, +0.0001004385965, +0.0001940789474, +0.0002410087719, +0.0002208333333, +0.0001739035088, +0.0000603070175, -0.0001203947368, -0.0003078947368, -0.0004350877193, -0.0004350877193, -0.0003144736842, -0.0001673245614, -0.0000603070175, -0.0000133771930, -0.0000802631579, -0.0002410087719, -0.0004350877193, -0.0005219298246, -0.0004484649123, -0.0002677631579, -0.0000870614035, +0.0000267543860, +0.0000668859649, +0.0000535087719, +0.0000000000000, -0.0001539473684, -0.0003815789474, -0.0005554824561, -0.0005688596491, -0.0004083333333, -0.0001539473684, +0.0001203947368, +0.0003747807018, +0.0005554824561, +0.0005756578947, +0.0004484649123, +0.0002475877193, +0.0000668859649, -0.0000535087719, -0.0000870614035, -0.0000133771930, +0.0001004385965, +0.0002008771930, +0.0001872807018, +0.0000668859649, -0.0000201754386, +0.0000000000000, +0.0000802631579, +0.0001739035088, +0.0002811403509, +0.0003747807018, +0.0003881578947, +0.0002811403509, +0.0001004385965, -0.0000668859649, -0.0002142543860, -0.0002811403509, -0.0002609649123, -0.0001940789474, -0.0001004385965, -0.0000401315789, -0.0001138157895, -0.0003010964912, -0.0004618421053, -0.0005353070175, -0.0005421052632, -0.0004817982456, -0.0003412280702, -0.0001004385965, +0.0001405701754, +0.0003078947368, +0.0003881578947, +0.0003815789474, +0.0002877192982, +0.0001004385965, -0.0000870614035, -0.0001673245614, -0.0001070175439, -0.0000067982456, -0.0000067982456, -0.0001471491228, -0.0003546052632, -0.0004885964912, -0.0005019736842, -0.0004083333333, -0.0002410087719, -0.0000335526316, +0.0001271929825, +0.0002142543860, +0.0002276315789, +0.0001539473684, -0.0000335526316, -0.0002945175439, -0.0004885964912, -0.0005287280702, -0.0003278508772, +0.0000401315789, +0.0003815789474, +0.0004684210526, +0.0002877192982, -0.0000201754386, -0.0002945175439, -0.0004484649123, -0.0004350877193, -0.0003078947368, -0.0001405701754, -0.0000469298246, -0.0000535087719, -0.0001337719298, -0.0002410087719, -0.0002743421053, -0.0001605263158, +0.0000267543860, +0.0001940789474, +0.0002609649123, +0.0001940789474, +0.0000469298246, -0.0000802631579, -0.0001337719298, -0.0000870614035, +0.0000535087719, +0.0002475877193, +0.0004217105263, +0.0005287280702, +0.0005219298246, +0.0003949561404, +0.0002276315789, +0.0000936403509, +0.0000133771930, +0.0000000000000, +0.0000267543860, +0.0000603070175, +0.0000668859649, +0.0000603070175, +0.0000401315789, +0.0000067982456, +0.0000067982456, +0.0000736842105, +0.0002410087719, +0.0004416666667, +0.0006425438596, +0.0007763157895, +0.0008164473684, +0.0007495614035, +0.0005822368421, +0.0002945175439, -0.0000201754386, -0.0002142543860, -0.0002074561404, -0.0001004385965, -0.0000067982456, +0.0000469298246, +0.0000870614035, +0.0001203947368, +0.0001271929825, +0.0001070175439, +0.0001203947368, +0.0001539473684, +0.0001807017544, +0.0002142543860, +0.0002811403509, +0.0003212719298, +0.0003346491228, +0.0003212719298, +0.0003010964912, +0.0002811403509, +0.0002677631579, +0.0002276315789, +0.0001673245614, +0.0001337719298, +0.0001405701754, +0.0001605263158, +0.0001673245614, +0.0001337719298, +0.0000802631579, +0.0000201754386, -0.0000335526316, -0.0000668859649, -0.0000736842105, -0.0000736842105, -0.0001070175439, -0.0001471491228, -0.0001271929825, -0.0000603070175, -0.0000469298246, -0.0000736842105, -0.0000535087719, +0.0000067982456, +0.0000335526316, -0.0000335526316, -0.0001605263158, -0.0002811403509, -0.0003815789474, -0.0004149122807, -0.0003412280702, -0.0001605263158, +0.0000603070175, +0.0002342105263, +0.0003614035088, +0.0004282894737, +0.0003747807018, +0.0001739035088, -0.0000736842105, -0.0002677631579, -0.0003412280702, -0.0003346491228, -0.0002677631579, -0.0001539473684, +0.0000401315789, +0.0002945175439, +0.0005019736842, +0.0005620614035, +0.0004618421053, +0.0002609649123, +0.0000535087719, -0.0001070175439, -0.0001673245614, -0.0000936403509, +0.0000936403509, +0.0003278508772, +0.0005153508772, +0.0006024122807, +0.0005620614035, +0.0004217105263, +0.0002074561404, -0.0000067982456, -0.0001070175439, -0.0000603070175, +0.0000133771930, +0.0000267543860, -0.0000267543860, -0.0000936403509, -0.0001138157895, -0.0000870614035, -0.0000802631579, -0.0001271929825, -0.0001739035088, -0.0001673245614, -0.0001203947368, -0.0000936403509, -0.0001271929825, -0.0001807017544, -0.0002008771930, -0.0001739035088, -0.0001405701754, -0.0001203947368, -0.0000936403509, -0.0000133771930, +0.0001673245614, +0.0003546052632, +0.0004217105263, +0.0003078947368, +0.0000736842105, -0.0001872807018, -0.0003949561404, -0.0004817982456, -0.0004282894737, -0.0002475877193, -0.0000067982456, +0.0002208333333, +0.0003949561404, +0.0005019736842, +0.0004885964912, +0.0003747807018, +0.0002208333333, +0.0000603070175, -0.0000802631579, -0.0002074561404, -0.0002743421053, -0.0002945175439, -0.0003144736842, -0.0003278508772, -0.0003010964912, -0.0002008771930, -0.0000936403509, -0.0000401315789, -0.0000335526316, -0.0000802631579, -0.0001807017544, -0.0002877192982, -0.0003278508772, -0.0002475877193, -0.0000133771930, +0.0003010964912, +0.0005822368421, +0.0007361842105, +0.0006892543860, +0.0003881578947, -0.0000335526316, -0.0003614035088, -0.0004484649123, -0.0003480263158, -0.0001605263158, +0.0000469298246, +0.0002342105263, +0.0003144736842, +0.0002410087719, +0.0000469298246, -0.0001739035088, -0.0003212719298, -0.0003679824561, -0.0003412280702, -0.0002609649123, -0.0001405701754, -0.0000936403509, -0.0001605263158, -0.0002543859649, -0.0002609649123, -0.0001138157895, +0.0001070175439, +0.0003078947368, +0.0003747807018, +0.0002811403509, +0.0000668859649, -0.0001807017544, -0.0004282894737, -0.0006425438596, -0.0007964912281, -0.0007964912281, -0.0006157894737, -0.0003144736842, +0.0000000000000, +0.0002677631579, +0.0004550438596, +0.0005153508772, +0.0004484649123, +0.0003346491228, +0.0002276315789, +0.0001203947368, +0.0000000000000, -0.0001605263158, -0.0002677631579, -0.0002811403509, -0.0002008771930, -0.0000335526316, +0.0002008771930, +0.0004217105263, +0.0005688596491, +0.0006089912281, +0.0005219298246, +0.0003412280702, +0.0001405701754, +0.0000000000000, -0.0000201754386, +0.0000535087719, +0.0002276315789, +0.0004282894737, +0.0005353070175, +0.0004885964912, +0.0002877192982, +0.0000067982456, -0.0002342105263, -0.0003679824561, -0.0003815789474, -0.0002811403509, -0.0001070175439, +0.0000469298246, +0.0000936403509, +0.0000335526316, -0.0000535087719, -0.0001070175439, -0.0000802631579, +0.0000133771930, +0.0000936403509, +0.0000870614035, -0.0000133771930, -0.0001872807018, -0.0003949561404, -0.0005486842105, -0.0005688596491, -0.0004885964912, -0.0004282894737, -0.0004282894737, -0.0004752192982, -0.0005353070175, -0.0006024122807, -0.0006758771930, -0.0007026315789, -0.0006291666667, -0.0004416666667, -0.0002208333333, -0.0000469298246, +0.0000000000000, -0.0000535087719, -0.0001605263158, -0.0002342105263, -0.0002475877193, -0.0001673245614, +0.0000000000000, +0.0001337719298, +0.0001605263158, +0.0000736842105, -0.0000469298246, -0.0001739035088, -0.0002677631579, -0.0002945175439, -0.0002945175439, -0.0003078947368, -0.0003614035088, -0.0003614035088, -0.0002945175439, -0.0001539473684, -0.0000335526316, +0.0000133771930, -0.0000133771930, -0.0000736842105, -0.0001739035088, -0.0003010964912, -0.0004282894737, -0.0004684210526, -0.0003881578947, -0.0002410087719, -0.0000401315789, +0.0001807017544, +0.0003679824561, +0.0004149122807, +0.0003212719298, +0.0001605263158, +0.0000000000000, -0.0001203947368, -0.0001337719298, -0.0000401315789, +0.0000603070175, +0.0000870614035, +0.0000401315789, -0.0000267543860, -0.0000870614035, -0.0001138157895, -0.0001004385965, -0.0000802631579, -0.0000668859649, -0.0000401315789, +0.0000736842105, +0.0002543859649, +0.0003949561404, +0.0003815789474, +0.0002142543860, +0.0000000000000, -0.0001605263158, -0.0002543859649, -0.0002811403509, -0.0002342105263, -0.0001271929825, -0.0000133771930, +0.0000469298246, +0.0000401315789, -0.0000201754386, -0.0001337719298, -0.0002276315789, -0.0002475877193, -0.0002008771930, -0.0000736842105, +0.0001405701754, +0.0003614035088, +0.0004752192982, +0.0004951754386, +0.0004684210526, +0.0004350877193, +0.0003679824561, +0.0002877192982, +0.0002543859649, +0.0002945175439, +0.0003480263158, +0.0003278508772, +0.0002208333333, +0.0001203947368, +0.0000802631579, +0.0000668859649, +0.0000401315789, +0.0000335526316, +0.0000603070175, +0.0001004385965, +0.0001539473684, +0.0001807017544, +0.0001673245614, +0.0001203947368, +0.0000870614035, +0.0001004385965, +0.0001203947368, +0.0000870614035, -0.0000335526316, -0.0001872807018, -0.0003144736842, -0.0004217105263, -0.0004550438596, -0.0003546052632, -0.0001739035088, +0.0000000000000, +0.0001405701754, +0.0002342105263, +0.0002475877193, +0.0002008771930, +0.0001605263158, +0.0001807017544, +0.0002945175439, +0.0004484649123, +0.0005085526316, +0.0004149122807, +0.0002276315789, +0.0000133771930, -0.0001471491228, -0.0002074561404, -0.0001471491228, -0.0000401315789, +0.0001070175439, +0.0002743421053, +0.0003747807018, +0.0003614035088, +0.0002677631579, +0.0001673245614, +0.0001004385965, +0.0000802631579, +0.0000802631579, +0.0000802631579, +0.0001070175439, +0.0001271929825, +0.0001203947368, +0.0001271929825, +0.0001605263158, +0.0002276315789, +0.0002877192982, +0.0003144736842, +0.0002743421053, +0.0001539473684, -0.0000267543860, -0.0001940789474, -0.0002342105263, -0.0001539473684, -0.0000603070175, -0.0000267543860, -0.0000335526316, -0.0000535087719, -0.0001004385965, -0.0001807017544, -0.0002142543860, -0.0001138157895, +0.0000603070175, +0.0002410087719, +0.0003949561404, +0.0004951754386, +0.0004817982456, +0.0003278508772, +0.0000736842105, -0.0000936403509, -0.0001138157895, +0.0000000000000, +0.0002008771930, +0.0004282894737, +0.0005287280702, +0.0004350877193, +0.0002342105263, +0.0000133771930, -0.0001673245614, -0.0002877192982, -0.0003412280702, -0.0003346491228, -0.0002743421053, -0.0001337719298, +0.0000201754386, +0.0001203947368, +0.0001070175439, +0.0000000000000, -0.0001271929825, -0.0001673245614, -0.0000603070175, +0.0001471491228, +0.0003614035088, +0.0004282894737, +0.0002945175439, +0.0000535087719, -0.0001337719298, -0.0001872807018, -0.0001070175439, -0.0000067982456, +0.0000335526316, -0.0000201754386, -0.0001673245614, -0.0003346491228, -0.0004149122807, -0.0003346491228, -0.0001271929825, +0.0000802631579, +0.0002208333333, +0.0002475877193, +0.0001739035088, +0.0000401315789, -0.0000936403509, -0.0001405701754, -0.0000401315789, +0.0001471491228, +0.0003010964912, +0.0003144736842, +0.0001940789474, +0.0000469298246, +0.0000000000000, +0.0000802631579, +0.0002342105263, +0.0002945175439, +0.0002008771930, +0.0000401315789, -0.0001070175439, -0.0001872807018, -0.0001271929825, +0.0000535087719, +0.0002609649123, +0.0003747807018, +0.0003212719298, +0.0001337719298, -0.0001138157895, -0.0003346491228, -0.0004282894737, -0.0003546052632, -0.0001337719298, +0.0001203947368, +0.0003144736842, +0.0003881578947, +0.0003679824561, +0.0002811403509, +0.0001337719298, -0.0000335526316, -0.0001673245614, -0.0002342105263, -0.0002475877193, -0.0002543859649, -0.0002743421053, -0.0002945175439, -0.0002342105263, -0.0000870614035, +0.0000469298246, +0.0000535087719, -0.0000201754386, -0.0001004385965, -0.0001940789474, -0.0003010964912, -0.0003546052632, -0.0003144736842, -0.0001940789474, -0.0000401315789, +0.0001138157895, +0.0002342105263, +0.0002609649123, +0.0001872807018, +0.0000668859649, -0.0000603070175, -0.0001471491228, -0.0002008771930, -0.0002609649123, -0.0003346491228, -0.0003480263158, -0.0002410087719, -0.0000736842105, +0.0000535087719, +0.0001070175439, +0.0001138157895, +0.0000870614035, +0.0000133771930, -0.0001004385965, -0.0002276315789, -0.0003078947368, -0.0003480263158, -0.0003614035088, -0.0002945175439, -0.0001605263158, -0.0000133771930, +0.0000870614035, +0.0000870614035, +0.0000133771930, -0.0000335526316, -0.0000335526316, +0.0000067982456, +0.0001138157895, +0.0002811403509, +0.0004015350877, +0.0003815789474, +0.0002008771930, -0.0000469298246, -0.0002410087719, -0.0002877192982, -0.0001807017544, +0.0000133771930, +0.0002008771930, +0.0002945175439, +0.0003144736842, +0.0002743421053, +0.0001605263158, +0.0000201754386, -0.0000603070175, -0.0000802631579, -0.0000802631579, -0.0001070175439, -0.0001271929825, -0.0001405701754, -0.0001807017544, -0.0002609649123, -0.0003346491228, -0.0003480263158, -0.0002811403509, -0.0001872807018, -0.0001203947368, -0.0000603070175, +0.0000000000000, +0.0000535087719, +0.0000870614035, +0.0000936403509, +0.0001070175439, +0.0001271929825, +0.0000870614035, -0.0000267543860, -0.0001539473684, -0.0002609649123, -0.0003480263158, -0.0003881578947, -0.0003346491228, -0.0001739035088, +0.0000133771930, +0.0001405701754, +0.0000936403509, -0.0000802631579, -0.0003212719298, -0.0005019736842, -0.0005421052632, -0.0004416666667, -0.0002543859649, -0.0000535087719, +0.0000936403509, +0.0001539473684, +0.0001337719298, +0.0000870614035, +0.0000802631579, +0.0001004385965, +0.0000936403509, +0.0000603070175, +0.0000201754386, +0.0000133771930, +0.0000267543860, +0.0000067982456, -0.0000802631579, -0.0002276315789, -0.0003412280702, -0.0003546052632, -0.0002609649123, -0.0001337719298, +0.0000133771930, +0.0001940789474, +0.0003480263158, +0.0004350877193, +0.0004282894737, +0.0003412280702, +0.0001807017544, +0.0000335526316, -0.0000067982456, +0.0000802631579, +0.0002811403509, +0.0004951754386, +0.0006089912281, +0.0006223684211, +0.0005554824561, +0.0004083333333, +0.0001807017544, -0.0000736842105, -0.0002811403509, -0.0003881578947, -0.0003815789474, -0.0002811403509, -0.0001004385965, +0.0000802631579, +0.0001940789474, +0.0001605263158, +0.0000000000000, -0.0001673245614, -0.0002410087719, -0.0002074561404, -0.0001203947368, -0.0000267543860, +0.0000668859649, +0.0001405701754, +0.0001673245614, +0.0001673245614, +0.0001605263158, +0.0001138157895, +0.0000401315789, -0.0000067982456, -0.0000201754386, -0.0000469298246, -0.0001070175439, -0.0001739035088, -0.0002142543860, -0.0002074561404, -0.0001739035088, -0.0001673245614, -0.0001940789474, -0.0002475877193, -0.0003212719298, -0.0003614035088, -0.0002877192982, -0.0000802631579, +0.0001739035088, +0.0003881578947, +0.0004550438596, +0.0003815789474, +0.0002543859649, +0.0001539473684, +0.0001203947368, +0.0001739035088, +0.0003010964912, +0.0004282894737, +0.0005019736842, +0.0005019736842, +0.0004350877193, +0.0002945175439, +0.0001271929825, +0.0000000000000, -0.0000335526316, -0.0000067982456, +0.0000133771930, +0.0000133771930, +0.0000201754386, +0.0000133771930, +0.0000000000000, +0.0000133771930, +0.0000870614035, +0.0001673245614, +0.0002142543860, +0.0001940789474, +0.0001471491228, +0.0001271929825, +0.0001605263158, +0.0002475877193, +0.0003412280702, +0.0004015350877, +0.0003881578947, +0.0003144736842, +0.0002342105263, +0.0001605263158, +0.0000736842105, -0.0000335526316, -0.0001271929825, -0.0001673245614, -0.0001337719298, -0.0000603070175, -0.0000067982456, -0.0000067982456, -0.0000469298246, -0.0001070175439, -0.0001673245614, -0.0001807017544, -0.0001271929825, -0.0000335526316, +0.0000535087719, +0.0001405701754, +0.0001940789474, +0.0002142543860, +0.0002074561404, +0.0001605263158, +0.0000936403509, +0.0000067982456, -0.0000936403509, -0.0001539473684, -0.0001807017544, -0.0001872807018, -0.0001673245614, -0.0001070175439, -0.0000133771930, +0.0000870614035, +0.0001605263158, +0.0001940789474, +0.0001673245614, +0.0000603070175, -0.0001004385965, -0.0002342105263, -0.0002342105263, -0.0001070175439, +0.0000603070175, +0.0001807017544, +0.0002142543860, +0.0001807017544, +0.0001138157895, +0.0000870614035, +0.0001070175439, +0.0001605263158, +0.0002008771930, +0.0001739035088, +0.0000802631579, -0.0000401315789, -0.0001673245614, -0.0002475877193, -0.0002609649123, -0.0002142543860, -0.0001337719298, -0.0000736842105, -0.0000535087719, -0.0000603070175, -0.0000802631579, -0.0001004385965, -0.0001004385965, -0.0000603070175, +0.0000067982456, +0.0000870614035, +0.0001070175439, +0.0000668859649, -0.0000067982456, -0.0001004385965, -0.0001739035088, -0.0001872807018, -0.0001739035088, -0.0001539473684, -0.0001138157895, -0.0000267543860, +0.0001070175439, +0.0002475877193, +0.0003412280702, +0.0003546052632, +0.0002677631579, +0.0001337719298, +0.0000201754386, -0.0000335526316, -0.0000201754386, +0.0000133771930, +0.0000133771930, -0.0000535087719, -0.0001605263158, -0.0002475877193, -0.0002877192982, -0.0002945175439, -0.0002543859649, -0.0001337719298, +0.0000133771930, +0.0001471491228, +0.0001940789474, +0.0001673245614, +0.0000936403509, +0.0000000000000, -0.0001070175439, -0.0001940789474, -0.0001940789474, -0.0001004385965, -0.0000067982456, +0.0000000000000, -0.0000736842105, -0.0001739035088, -0.0002543859649, -0.0003010964912, -0.0003078947368, -0.0002276315789, -0.0001203947368, -0.0000603070175, -0.0000535087719, -0.0000401315789, +0.0000000000000, +0.0000401315789, +0.0000668859649, +0.0000802631579, +0.0000936403509, +0.0001203947368, +0.0001739035088, +0.0002609649123, +0.0003412280702, +0.0003546052632, +0.0002877192982, +0.0001673245614, +0.0000067982456, -0.0001138157895, -0.0001271929825, -0.0000267543860, +0.0001004385965, +0.0002008771930, +0.0002475877193, +0.0002342105263, +0.0001739035088, +0.0000936403509, +0.0000535087719, +0.0000668859649, +0.0000936403509, +0.0000870614035, +0.0000401315789, +0.0000000000000, -0.0000067982456, +0.0000067982456, +0.0000000000000, -0.0000267543860, -0.0000469298246, -0.0000335526316, -0.0000201754386, -0.0000267543860, -0.0000535087719, -0.0000870614035, -0.0000936403509, -0.0000870614035, -0.0000603070175, +0.0000067982456, +0.0000936403509, +0.0001337719298, +0.0000802631579, -0.0000201754386, -0.0001203947368, -0.0002475877193, -0.0003881578947, -0.0004752192982, -0.0004416666667, -0.0003212719298, -0.0001940789474, -0.0000936403509, -0.0000469298246, -0.0000535087719, -0.0001070175439, -0.0001605263158, -0.0001872807018, -0.0002008771930, -0.0001673245614, -0.0000936403509, +0.0000000000000, +0.0000603070175, +0.0000802631579, +0.0000535087719, -0.0000133771930, -0.0001337719298, -0.0002410087719, -0.0002677631579, -0.0002543859649, -0.0002410087719, -0.0002074561404, -0.0001271929825, -0.0000133771930, +0.0001004385965, +0.0001739035088, +0.0001807017544, +0.0001203947368, +0.0000201754386, -0.0000736842105, -0.0001138157895, -0.0000870614035, -0.0000201754386, +0.0000201754386, +0.0000067982456, -0.0000668859649, -0.0001673245614, -0.0002342105263, -0.0002543859649, -0.0002342105263, -0.0001739035088, -0.0001203947368, -0.0000870614035, -0.0001203947368, -0.0001872807018, -0.0002276315789, -0.0001807017544, -0.0000936403509, -0.0000201754386, -0.0000067982456, -0.0000335526316, -0.0000335526316, -0.0000067982456, +0.0000335526316, +0.0001004385965, +0.0001872807018, +0.0002543859649, +0.0002811403509, +0.0002410087719, +0.0001405701754, +0.0000201754386, -0.0000736842105, -0.0000870614035, +0.0000000000000, +0.0001138157895, +0.0001539473684, +0.0000335526316, -0.0001739035088, -0.0003815789474, -0.0005219298246, -0.0005620614035, -0.0004817982456, -0.0003078947368, -0.0001405701754, -0.0000469298246, -0.0000603070175, -0.0001337719298, -0.0001940789474, -0.0001739035088, -0.0000668859649, +0.0000936403509, +0.0002276315789, +0.0002543859649, +0.0001539473684, +0.0000267543860, -0.0000335526316, -0.0000401315789, -0.0000335526316, -0.0000469298246, -0.0000469298246, -0.0000067982456, +0.0000335526316, +0.0000668859649, +0.0000936403509, +0.0001271929825, +0.0001605263158, +0.0001739035088, +0.0001739035088, +0.0001471491228, +0.0000870614035, +0.0000267543860, +0.0000133771930, +0.0000603070175, +0.0001539473684, +0.0002811403509, +0.0003949561404, +0.0004416666667, +0.0004015350877, +0.0002743421053, +0.0001203947368, +0.0000000000000, -0.0000267543860, +0.0000469298246, +0.0001605263158, +0.0002410087719, +0.0002743421053, +0.0002743421053, +0.0002208333333, +0.0001138157895, +0.0000133771930, -0.0000469298246, -0.0000603070175, -0.0000401315789, +0.0000000000000, +0.0000267543860, +0.0000201754386, -0.0000201754386, -0.0000936403509, -0.0001203947368, -0.0001138157895, -0.0001070175439, -0.0001337719298, -0.0001872807018, -0.0002342105263, -0.0002410087719, -0.0001940789474, -0.0001203947368, -0.0000469298246, +0.0000000000000, +0.0000133771930, +0.0000067982456, -0.0000267543860, -0.0000736842105, -0.0001070175439, -0.0001138157895, -0.0001004385965, -0.0000736842105, -0.0000133771930, +0.0000870614035, +0.0002142543860, +0.0002877192982, +0.0002609649123, +0.0001807017544, +0.0001070175439, +0.0000802631579, +0.0001271929825, +0.0002410087719, +0.0003480263158, +0.0003614035088, +0.0002475877193, +0.0000802631579, -0.0000802631579, -0.0002142543860, -0.0002877192982, -0.0002543859649, -0.0001070175439, +0.0000870614035, +0.0002543859649, +0.0003278508772, +0.0002743421053, +0.0001405701754, +0.0000133771930, -0.0000469298246, -0.0000401315789, -0.0000201754386, -0.0000469298246, -0.0001271929825, -0.0002074561404, -0.0002475877193, -0.0002074561404, -0.0000870614035, +0.0000535087719, +0.0001539473684, +0.0001673245614, +0.0001271929825, +0.0000668859649, +0.0000067982456, -0.0000067982456, +0.0000335526316, +0.0001271929825, +0.0001673245614, +0.0001070175439, -0.0000267543860, -0.0001605263158, -0.0002208333333, -0.0001940789474, -0.0001203947368, -0.0000401315789, +0.0000201754386, +0.0000469298246, +0.0000267543860, -0.0000201754386, -0.0000603070175, -0.0000335526316, +0.0000535087719, +0.0001605263158, +0.0002410087719, +0.0002342105263, +0.0001471491228, +0.0000267543860, -0.0000736842105, -0.0001539473684, -0.0002008771930, -0.0002008771930, -0.0001673245614, -0.0001070175439, -0.0000401315789, +0.0000335526316, +0.0001471491228, +0.0002543859649, +0.0003078947368, +0.0002945175439, +0.0002208333333, +0.0000936403509, -0.0000133771930, -0.0000736842105, -0.0000736842105, -0.0000267543860, +0.0000335526316, +0.0001138157895, +0.0001673245614, +0.0001739035088, +0.0001471491228, +0.0001070175439, +0.0000603070175, +0.0000267543860, +0.0000267543860, +0.0000603070175, +0.0001337719298, +0.0002008771930, +0.0002142543860, +0.0001271929825, -0.0000335526316, -0.0001807017544, -0.0002342105263, -0.0001539473684, +0.0000000000000, +0.0001337719298, +0.0001739035088, +0.0001138157895, +0.0000000000000, -0.0000936403509, -0.0001405701754, -0.0001337719298, -0.0000936403509, -0.0000401315789, -0.0000133771930, -0.0000067982456, +0.0000000000000, +0.0000401315789, +0.0000870614035, +0.0001070175439, +0.0000802631579, +0.0000335526316, -0.0000267543860, -0.0000736842105, -0.0000802631579, -0.0000335526316, -0.0000067982456, -0.0000267543860, -0.0000668859649, -0.0000802631579, -0.0000469298246, +0.0000133771930, +0.0000870614035, +0.0001539473684, +0.0002008771930, +0.0002410087719, +0.0002276315789, +0.0001605263158, +0.0000535087719, -0.0000535087719, -0.0001539473684, -0.0002008771930, -0.0001807017544, -0.0001070175439, -0.0000267543860, +0.0000000000000, -0.0000201754386, -0.0000936403509, -0.0001807017544, -0.0002609649123, -0.0003412280702, -0.0003815789474, -0.0003346491228, -0.0002208333333, -0.0001138157895, -0.0000535087719, -0.0000535087719, -0.0000936403509, -0.0001405701754, -0.0001271929825, -0.0000603070175, +0.0000000000000, +0.0000201754386, +0.0000133771930, +0.0000469298246, +0.0001271929825, +0.0002208333333, +0.0002743421053, +0.0002543859649, +0.0001940789474, +0.0001138157895, +0.0000335526316, -0.0000133771930, -0.0000133771930, +0.0000267543860, +0.0000802631579, +0.0001070175439, +0.0001004385965, +0.0001004385965, +0.0001138157895, +0.0001271929825, +0.0001004385965, +0.0000401315789, -0.0000267543860, -0.0000802631579, -0.0000936403509, -0.0000469298246, +0.0000469298246, +0.0001471491228, +0.0002208333333, +0.0002142543860, +0.0001004385965, -0.0000535087719, -0.0001940789474, -0.0002677631579, -0.0002410087719, -0.0001271929825, +0.0000335526316, +0.0001940789474, +0.0002543859649, +0.0001872807018, +0.0000469298246, -0.0001004385965, -0.0002074561404, -0.0002475877193, -0.0002410087719, -0.0002208333333, -0.0001739035088, -0.0000870614035, +0.0000133771930, +0.0001138157895, +0.0001539473684, +0.0001203947368, +0.0000603070175, +0.0000067982456, -0.0000133771930, +0.0000067982456, +0.0000335526316, +0.0000469298246, +0.0000469298246, +0.0000603070175, +0.0000736842105, +0.0000469298246, -0.0000267543860, -0.0001203947368, -0.0001807017544, -0.0001739035088, -0.0001070175439, +0.0000000000000, +0.0001203947368, +0.0001940789474, +0.0002142543860, +0.0001739035088, +0.0000870614035, +0.0000000000000, -0.0000603070175, -0.0000668859649, -0.0000267543860, +0.0000201754386, +0.0000535087719, +0.0000535087719, +0.0000668859649, +0.0001138157895, +0.0001539473684, +0.0001673245614, +0.0001405701754, +0.0001203947368, +0.0001203947368, +0.0001405701754, +0.0001739035088, +0.0002074561404, +0.0002276315789, +0.0002142543860, +0.0001807017544, +0.0001605263158, +0.0001471491228, +0.0001004385965, +0.0000335526316, -0.0000267543860, -0.0000802631579, -0.0001004385965, -0.0000870614035, -0.0000267543860, +0.0000335526316, +0.0000535087719, +0.0000201754386, -0.0000535087719, -0.0001673245614, -0.0002609649123, -0.0003010964912, -0.0002877192982, -0.0002276315789, -0.0001539473684, -0.0000736842105, -0.0000067982456, +0.0000469298246, +0.0000870614035, +0.0000802631579, +0.0000201754386, -0.0000603070175, -0.0001539473684, -0.0002142543860, -0.0002208333333, -0.0001471491228, -0.0000267543860, +0.0000870614035, +0.0001337719298, +0.0000870614035, -0.0000201754386, -0.0001337719298, -0.0002074561404, -0.0001940789474, -0.0000870614035, +0.0000736842105, +0.0001940789474, +0.0002142543860, +0.0001405701754, +0.0000469298246, -0.0000067982456, +0.0000000000000, +0.0000335526316, +0.0000936403509, +0.0001739035088, +0.0002276315789, +0.0002342105263, +0.0001872807018, +0.0001405701754, +0.0000936403509, +0.0000469298246, +0.0000133771930, +0.0000067982456, +0.0000401315789, +0.0000736842105, +0.0000802631579, +0.0000870614035, +0.0000936403509, +0.0001337719298, +0.0001872807018, +0.0002475877193, +0.0002811403509, +0.0002543859649, +0.0001739035088, +0.0000535087719, -0.0000401315789, -0.0000736842105, -0.0000267543860, +0.0000603070175, +0.0001471491228, +0.0001673245614, +0.0001203947368, +0.0000469298246, -0.0000133771930, -0.0000535087719, -0.0000603070175, -0.0000603070175, -0.0000736842105, -0.0001070175439, -0.0001138157895, -0.0000603070175, +0.0000267543860, +0.0001138157895, +0.0001471491228, +0.0001203947368, +0.0000335526316, -0.0000668859649, -0.0001605263158, -0.0002342105263, -0.0002475877193, -0.0001739035088, -0.0000267543860, +0.0001070175439, +0.0001739035088, +0.0001539473684, +0.0000469298246, -0.0000668859649, -0.0001605263158, -0.0002008771930, -0.0001872807018, -0.0001203947368, -0.0000469298246, +0.0000000000000, +0.0000000000000, -0.0000201754386, -0.0000401315789, -0.0000535087719, -0.0000802631579, -0.0001337719298, -0.0001872807018, -0.0002342105263, -0.0002677631579, -0.0002543859649, -0.0002008771930, -0.0001138157895, -0.0000201754386, +0.0000267543860, +0.0000535087719, +0.0000535087719, +0.0000469298246, +0.0000603070175, +0.0000870614035, +0.0001271929825, +0.0001070175439, +0.0000267543860, -0.0000469298246, -0.0000603070175, +0.0000133771930, +0.0001070175439, +0.0001539473684, +0.0001138157895, +0.0000133771930, -0.0000802631579, -0.0001337719298, -0.0001138157895, -0.0000401315789, +0.0000401315789, +0.0000936403509, +0.0001070175439, +0.0000936403509, +0.0000603070175, +0.0000401315789, +0.0000401315789, +0.0000335526316, +0.0000067982456, -0.0000469298246, -0.0001271929825, -0.0002008771930, -0.0002475877193, -0.0002543859649, -0.0002342105263, -0.0001940789474, -0.0001405701754, -0.0001070175439, -0.0001004385965, -0.0000936403509, -0.0000603070175, -0.0000267543860, -0.0000067982456, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000133771930, -0.0000201754386, +0.0000000000000, +0.0000469298246, +0.0000802631579, +0.0000668859649, +0.0000401315789, +0.0000267543860, +0.0000668859649, +0.0001337719298, +0.0002074561404, +0.0002342105263, +0.0001872807018, +0.0000736842105, -0.0000267543860, -0.0000870614035, -0.0000603070175, +0.0000469298246, +0.0001739035088, +0.0002475877193, +0.0002074561404, +0.0000603070175, -0.0001405701754, -0.0003278508772, -0.0004282894737, -0.0003949561404, -0.0002410087719, -0.0000335526316, +0.0001337719298, +0.0002276315789, +0.0002543859649, +0.0002475877193, +0.0002208333333, +0.0002008771930, +0.0001807017544, +0.0001673245614, +0.0001539473684, +0.0001203947368, +0.0000603070175, -0.0000335526316, -0.0001337719298, -0.0002008771930, -0.0002208333333, -0.0002008771930, -0.0001539473684, -0.0001004385965, -0.0000401315789, +0.0000000000000, +0.0000133771930, +0.0000000000000, -0.0000469298246, -0.0001004385965, -0.0001271929825, -0.0001070175439, -0.0000535087719, -0.0000267543860, -0.0000668859649, -0.0001539473684, -0.0002342105263, -0.0002677631579, -0.0002276315789, -0.0001203947368, -0.0000067982456, +0.0000535087719, +0.0000335526316, -0.0000335526316, -0.0000802631579, -0.0000469298246, +0.0000603070175, +0.0001872807018, +0.0002410087719, +0.0001940789474, +0.0000603070175, -0.0001004385965, -0.0002410087719, -0.0003212719298, -0.0003346491228, -0.0003010964912, -0.0002475877193, -0.0001872807018, -0.0001271929825, -0.0000736842105, -0.0000067982456, +0.0000535087719, +0.0001271929825, +0.0001872807018, +0.0002008771930, +0.0001872807018, +0.0001337719298, +0.0000267543860, -0.0000936403509, -0.0001940789474, -0.0002410087719, -0.0002276315789, -0.0001807017544, -0.0001405701754, -0.0001070175439, -0.0000736842105, -0.0000335526316, +0.0000000000000, +0.0000668859649, +0.0001405701754, +0.0002008771930, +0.0002074561404, +0.0001605263158, +0.0000802631579, +0.0000133771930, -0.0000201754386, -0.0000335526316, -0.0000201754386, +0.0000000000000, +0.0000067982456, +0.0000000000000, -0.0000401315789, -0.0000603070175, -0.0000335526316, +0.0000267543860, +0.0000870614035, +0.0000870614035, +0.0000335526316, -0.0000603070175, -0.0001605263158, -0.0002074561404, -0.0001539473684, -0.0000067982456, +0.0001471491228, +0.0002410087719, +0.0002410087719, +0.0001539473684, +0.0000267543860, -0.0001004385965, -0.0001872807018, -0.0002074561404, -0.0001539473684, -0.0000535087719, +0.0000201754386, +0.0000603070175, +0.0000535087719, +0.0000401315789, +0.0000401315789, +0.0000335526316, +0.0000401315789, +0.0000469298246, +0.0000802631579, +0.0001070175439, +0.0001070175439, +0.0000736842105, +0.0000267543860, -0.0000067982456, -0.0000401315789, -0.0000668859649, -0.0000736842105, -0.0000469298246, +0.0000000000000, +0.0000870614035, +0.0001673245614, +0.0002142543860, +0.0002142543860, +0.0001673245614, +0.0001271929825, +0.0001070175439, +0.0001138157895, +0.0001271929825, +0.0001203947368, +0.0000668859649, +0.0000000000000, -0.0000736842105, -0.0001271929825, -0.0001004385965, -0.0000335526316, +0.0000335526316, +0.0000668859649, +0.0000668859649, +0.0000401315789, +0.0000267543860, +0.0000201754386, +0.0000267543860, +0.0000335526316, +0.0000335526316, +0.0000535087719, +0.0001070175439, +0.0001739035088, +0.0002208333333, +0.0002276315789, +0.0001940789474, +0.0001138157895, +0.0000133771930, -0.0000335526316, -0.0000133771930, +0.0000469298246, +0.0001138157895, +0.0001739035088, +0.0002142543860, +0.0002074561404, +0.0001471491228, +0.0000469298246, -0.0000401315789, -0.0001203947368, -0.0001872807018, -0.0002342105263, -0.0002410087719, -0.0002142543860, -0.0001807017544, -0.0001337719298, -0.0000603070175, +0.0000067982456, +0.0000535087719, +0.0000401315789, -0.0000133771930, -0.0000736842105, -0.0001004385965, -0.0001004385965, -0.0000870614035, -0.0000736842105, -0.0001004385965, -0.0001539473684, -0.0002074561404, -0.0002208333333, -0.0001807017544, -0.0000870614035, +0.0000000000000, +0.0000736842105, +0.0000802631579, +0.0000401315789, -0.0000267543860, -0.0000936403509, -0.0001405701754, -0.0001539473684, -0.0001337719298, -0.0001070175439, -0.0000802631579, -0.0000401315789, -0.0000067982456, +0.0000201754386, +0.0000267543860, +0.0000133771930, -0.0000067982456, -0.0000267543860, -0.0000401315789, -0.0000401315789, -0.0000267543860, +0.0000133771930, +0.0000736842105, +0.0001271929825, +0.0001471491228, +0.0001471491228, +0.0001337719298, +0.0000802631579, -0.0000067982456, -0.0001337719298, -0.0002475877193, -0.0002677631579, -0.0001539473684, +0.0000335526316, +0.0002074561404, +0.0003010964912, +0.0003010964912, +0.0002410087719, +0.0001673245614, +0.0001138157895, +0.0001004385965, +0.0001004385965, +0.0000802631579, +0.0000067982456, -0.0000802631579, -0.0001203947368, -0.0000870614035, +0.0000000000000, +0.0001004385965, +0.0001471491228, +0.0001337719298, +0.0000668859649, +0.0000000000000, -0.0000401315789, -0.0000401315789, -0.0000133771930, +0.0000067982456, +0.0000067982456, -0.0000335526316, -0.0001004385965, -0.0001271929825, -0.0000668859649, +0.0000401315789, +0.0001605263158, +0.0002410087719, +0.0002543859649, +0.0001807017544, +0.0000469298246, -0.0000736842105, -0.0001271929825, -0.0000736842105, +0.0000201754386, +0.0001138157895, +0.0001539473684, +0.0001271929825, +0.0000535087719, -0.0000067982456, -0.0000067982456, +0.0000603070175, +0.0001539473684, +0.0001872807018, +0.0001405701754, +0.0000401315789, -0.0000802631579, -0.0001872807018, -0.0002475877193, -0.0002276315789, -0.0001539473684, -0.0000603070175, +0.0000067982456, +0.0000668859649, +0.0001271929825, +0.0001872807018, +0.0002276315789, +0.0002543859649, +0.0002677631579, +0.0002342105263, +0.0001471491228, +0.0000267543860, -0.0000668859649, -0.0001138157895, -0.0001070175439, -0.0000401315789, +0.0000469298246, +0.0001471491228, +0.0001940789474, +0.0001739035088, +0.0000936403509, +0.0000133771930, -0.0000267543860, -0.0000335526316, -0.0000401315789, -0.0000870614035, -0.0001539473684, -0.0002142543860, -0.0002276315789, -0.0001872807018, -0.0001203947368, -0.0000201754386, +0.0000535087719, +0.0000736842105, +0.0000201754386, -0.0000802631579, -0.0001739035088, -0.0002074561404, -0.0001673245614, -0.0000936403509, -0.0000401315789, -0.0000201754386, -0.0000401315789, -0.0000668859649, -0.0000802631579, -0.0000802631579, -0.0000870614035, -0.0001203947368, -0.0001539473684, -0.0001872807018, -0.0002074561404, -0.0002208333333, -0.0002342105263, -0.0002208333333, -0.0001605263158, -0.0000603070175, +0.0000668859649, +0.0001872807018, +0.0002677631579, +0.0002945175439, +0.0002811403509, +0.0002410087719, +0.0001605263158, +0.0000603070175, -0.0000335526316, -0.0001004385965, -0.0001203947368, -0.0000870614035, -0.0000133771930, +0.0000668859649, +0.0001471491228, +0.0002008771930, +0.0002276315789, +0.0002074561404, +0.0001471491228, +0.0000535087719, -0.0000401315789, -0.0001203947368, -0.0001471491228, -0.0001203947368, -0.0000603070175, +0.0000201754386, +0.0000936403509, +0.0001337719298, +0.0001138157895, +0.0000668859649, +0.0000401315789, +0.0000469298246, +0.0000535087719, +0.0000401315789, +0.0000201754386, +0.0000267543860, +0.0000668859649, +0.0000936403509, +0.0000870614035, +0.0000603070175, +0.0000201754386, -0.0000201754386, -0.0000469298246, -0.0000535087719, -0.0000133771930, +0.0000401315789, +0.0000668859649, +0.0000335526316, -0.0000267543860, -0.0000870614035, -0.0001138157895, -0.0000936403509, -0.0000201754386, +0.0000603070175, +0.0001337719298, +0.0001673245614, +0.0001539473684, +0.0001138157895, +0.0000401315789, -0.0000401315789, -0.0001203947368, -0.0001471491228, -0.0001203947368, -0.0000736842105, -0.0000401315789, -0.0000201754386, +0.0000000000000, +0.0000401315789, +0.0000802631579, +0.0001070175439, +0.0000802631579, +0.0000133771930, -0.0000535087719, -0.0000870614035, -0.0000736842105, -0.0000067982456, +0.0000668859649, +0.0001271929825, +0.0001471491228, +0.0001203947368, +0.0000736842105, +0.0000133771930, -0.0000201754386, -0.0000267543860, +0.0000201754386, +0.0001271929825, +0.0002208333333, +0.0002410087719, +0.0001739035088, +0.0000936403509, +0.0000335526316, +0.0000067982456, +0.0000000000000, -0.0000067982456, -0.0000267543860, -0.0000535087719, -0.0000802631579, -0.0000936403509, -0.0001070175439, -0.0001070175439, -0.0000936403509, -0.0000870614035, -0.0000870614035, -0.0000802631579, -0.0000736842105, -0.0000603070175, -0.0000267543860, +0.0000133771930, +0.0000802631579, +0.0001471491228, +0.0002142543860, +0.0002475877193, +0.0002342105263, +0.0001539473684, +0.0000335526316, -0.0000603070175, -0.0001138157895, -0.0000936403509, -0.0000133771930, +0.0000668859649, +0.0000936403509, +0.0000401315789, -0.0000603070175, -0.0001337719298, -0.0001271929825, -0.0000469298246, +0.0000603070175, +0.0001605263158, +0.0002008771930, +0.0001739035088, +0.0000870614035, -0.0000133771930, -0.0001138157895, -0.0001471491228, -0.0001203947368, -0.0000469298246, +0.0000000000000, +0.0000201754386, -0.0000067982456, -0.0000535087719, -0.0000870614035, -0.0001070175439, -0.0000936403509, -0.0000603070175, -0.0000067982456, +0.0000469298246, +0.0000870614035, +0.0001004385965, +0.0001070175439, +0.0001138157895, +0.0001271929825, +0.0001337719298, +0.0001471491228, +0.0001405701754, +0.0001070175439, +0.0000668859649, +0.0000401315789, +0.0000469298246, +0.0000936403509, +0.0001337719298, +0.0001673245614, +0.0001739035088, +0.0001471491228, +0.0001004385965, +0.0000535087719, +0.0000201754386, +0.0000133771930, +0.0000133771930, +0.0000201754386, +0.0000335526316, +0.0000469298246, +0.0000603070175, +0.0000736842105, +0.0000736842105, +0.0000668859649, +0.0000469298246, +0.0000000000000, -0.0000469298246, -0.0000870614035, -0.0000870614035, -0.0000469298246, +0.0000133771930, +0.0000736842105, +0.0001070175439, +0.0001004385965, +0.0000736842105, +0.0000469298246, +0.0000401315789, +0.0000401315789, +0.0000469298246, +0.0000535087719, +0.0000335526316, +0.0000067982456, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000067982456, +0.0000000000000, +0.0000133771930, +0.0000469298246, +0.0000802631579, +0.0001070175439, +0.0001070175439, +0.0000802631579, +0.0000267543860, -0.0000201754386, -0.0000469298246, -0.0000335526316, +0.0000000000000, +0.0000335526316, +0.0000603070175, +0.0000603070175, +0.0000469298246, +0.0000133771930, -0.0000201754386, -0.0000668859649, -0.0000870614035, -0.0000870614035, -0.0000668859649, -0.0000469298246, -0.0000335526316, -0.0000201754386, +0.0000000000000, +0.0000067982456, +0.0000201754386, +0.0000469298246, +0.0000802631579, +0.0001070175439, +0.0001070175439, +0.0000736842105, +0.0000267543860, -0.0000267543860, -0.0000802631579, -0.0000870614035, -0.0000401315789, +0.0000201754386, +0.0000736842105, +0.0000936403509, +0.0000802631579, +0.0000469298246, +0.0000267543860, +0.0000335526316, +0.0000535087719, +0.0000469298246, +0.0000067982456, -0.0000535087719, -0.0001203947368, -0.0001471491228, -0.0001138157895, -0.0000401315789, +0.0000335526316, +0.0000870614035, +0.0001004385965, +0.0000668859649, +0.0000000000000, -0.0000603070175, -0.0000936403509, -0.0000603070175, +0.0000000000000, +0.0000335526316, +0.0000067982456, -0.0000736842105, -0.0001872807018, -0.0002609649123, -0.0002743421053, -0.0002208333333, -0.0001405701754, -0.0000603070175, -0.0000133771930, -0.0000067982456, -0.0000335526316, -0.0000603070175, -0.0000736842105, -0.0000802631579, -0.0000870614035, -0.0001004385965, -0.0001203947368, -0.0001605263158, -0.0001940789474, -0.0002074561404, -0.0001872807018, -0.0001271929825, -0.0000535087719, +0.0000067982456, +0.0000469298246, +0.0000335526316, -0.0000133771930, -0.0000870614035, -0.0001605263158, -0.0002074561404, -0.0002142543860, -0.0001807017544, -0.0001004385965, -0.0000133771930, +0.0000535087719, +0.0000936403509, +0.0000870614035, +0.0000335526316, -0.0000133771930, -0.0000469298246, -0.0000401315789, +0.0000000000000, +0.0000469298246, +0.0000870614035, +0.0000936403509, +0.0000736842105, +0.0000535087719, +0.0000335526316, +0.0000133771930, +0.0000067982456, +0.0000000000000, -0.0000067982456, -0.0000335526316, -0.0000668859649, -0.0000936403509, -0.0001138157895, -0.0001138157895, -0.0001070175439, -0.0001004385965, -0.0000870614035, -0.0000736842105, -0.0000668859649, -0.0000535087719, -0.0000535087719, -0.0000535087719, -0.0000535087719, -0.0000535087719, -0.0000668859649, -0.0000668859649, -0.0000603070175, -0.0000668859649, -0.0001070175439, -0.0001673245614, -0.0002208333333, -0.0002410087719, -0.0002276315789, -0.0001940789474, -0.0001539473684, -0.0001004385965, -0.0000535087719, -0.0000335526316, -0.0000469298246, -0.0000870614035, -0.0001271929825, -0.0001405701754, -0.0001271929825, -0.0000870614035, -0.0000267543860, +0.0000335526316, +0.0000870614035, +0.0001138157895, +0.0001070175439, +0.0000668859649, +0.0000133771930, -0.0000335526316, -0.0000668859649, -0.0000802631579, -0.0000668859649, -0.0000401315789, -0.0000133771930, +0.0000000000000, +0.0000067982456, -0.0000067982456, -0.0000401315789, -0.0000736842105, -0.0000870614035, -0.0000870614035, -0.0000736842105, -0.0000603070175, -0.0000535087719, -0.0000401315789, -0.0000267543860, -0.0000267543860, -0.0000133771930, +0.0000000000000, +0.0000133771930, +0.0000267543860, +0.0000469298246, +0.0000469298246, +0.0000201754386, -0.0000201754386, -0.0000469298246, -0.0000535087719, -0.0000335526316, +0.0000000000000, +0.0000335526316, +0.0000736842105, +0.0000668859649, +0.0000201754386, -0.0000469298246, -0.0001070175439, -0.0001337719298, -0.0001138157895, -0.0000469298246, +0.0000668859649, +0.0001739035088, +0.0002342105263, +0.0002208333333, +0.0001539473684, +0.0000603070175, -0.0000335526316, -0.0000936403509, -0.0001138157895, -0.0001070175439, -0.0000736842105, -0.0000201754386, +0.0000133771930, +0.0000133771930, -0.0000133771930, -0.0000736842105, -0.0001203947368, -0.0001271929825, -0.0001070175439, -0.0000668859649, -0.0000267543860, +0.0000000000000, +0.0000000000000, -0.0000267543860, -0.0000469298246, -0.0000469298246, -0.0000267543860, +0.0000067982456, +0.0000469298246, +0.0000668859649, +0.0000603070175, +0.0000133771930, -0.0000267543860, -0.0000469298246, -0.0000401315789, -0.0000133771930, -0.0000067982456, -0.0000067982456, -0.0000201754386, -0.0000267543860, -0.0000201754386, +0.0000000000000, +0.0000335526316, +0.0000535087719, +0.0000469298246, +0.0000000000000, -0.0000535087719, -0.0000802631579, -0.0000535087719, +0.0000000000000, +0.0000736842105, +0.0001203947368, +0.0001271929825, +0.0000936403509, +0.0000603070175, +0.0000469298246, +0.0000469298246, +0.0000603070175, +0.0000603070175, +0.0000603070175, +0.0000469298246, +0.0000133771930, -0.0000133771930, -0.0000267543860, +0.0000000000000, +0.0000668859649, +0.0001203947368, +0.0001271929825, +0.0000936403509, +0.0000668859649, +0.0000469298246, +0.0000401315789, +0.0000401315789, +0.0000267543860, +0.0000000000000, -0.0000267543860, -0.0000469298246, -0.0000401315789, +0.0000000000000, +0.0000736842105, +0.0001471491228, +0.0001673245614, +0.0001203947368, +0.0000401315789, -0.0000267543860, -0.0000736842105, -0.0000802631579, -0.0000736842105, -0.0000535087719, -0.0000201754386, +0.0000201754386, +0.0000535087719, +0.0000668859649, +0.0000469298246, +0.0000201754386, -0.0000067982456, -0.0000201754386, -0.0000267543860, -0.0000201754386, +0.0000067982456, +0.0000535087719, +0.0000936403509, +0.0001070175439, +0.0000936403509, +0.0000469298246, +0.0000000000000, -0.0000133771930, +0.0000000000000, +0.0000401315789, +0.0000668859649, +0.0000603070175, +0.0000267543860, +0.0000000000000, -0.0000067982456, +0.0000000000000, +0.0000201754386, +0.0000535087719, +0.0000802631579, +0.0000870614035, +0.0000802631579, +0.0000401315789, +0.0000000000000, -0.0000335526316, -0.0000133771930, +0.0000401315789, +0.0001203947368, +0.0001872807018, +0.0002008771930, +0.0001739035088, +0.0001203947368, +0.0000668859649, +0.0000401315789, +0.0000401315789, +0.0000603070175, +0.0000668859649, +0.0000469298246, +0.0000000000000, -0.0000535087719, -0.0000802631579, -0.0000535087719, +0.0000067982456, +0.0001004385965, +0.0001673245614, +0.0002008771930, +0.0001739035088, +0.0001203947368, +0.0000668859649, +0.0000335526316, +0.0000067982456, +0.0000000000000, +0.0000000000000, -0.0000067982456, -0.0000267543860, -0.0000401315789, -0.0000469298246, -0.0000267543860, +0.0000000000000, +0.0000335526316, +0.0000603070175, +0.0000603070175, +0.0000401315789, +0.0000000000000, -0.0000201754386, -0.0000133771930, +0.0000133771930, +0.0000335526316, +0.0000267543860, +0.0000000000000, -0.0000133771930, -0.0000267543860, -0.0000133771930, +0.0000000000000, +0.0000335526316, +0.0000603070175, +0.0000870614035, +0.0001004385965, +0.0001070175439, +0.0000936403509, +0.0000668859649, +0.0000267543860, +0.0000000000000, -0.0000201754386, -0.0000267543860, -0.0000133771930, +0.0000067982456, +0.0000535087719, +0.0001070175439, +0.0001539473684, +0.0001673245614, +0.0001539473684, +0.0001271929825, +0.0001004385965, +0.0000668859649, +0.0000335526316, +0.0000000000000, -0.0000267543860, -0.0000469298246, -0.0000603070175, -0.0000469298246, -0.0000067982456, +0.0000469298246, +0.0001004385965, +0.0001271929825, +0.0001203947368, +0.0000802631579, +0.0000267543860, -0.0000067982456, -0.0000267543860, -0.0000067982456, +0.0000133771930, +0.0000335526316, +0.0000267543860, +0.0000000000000, -0.0000133771930, -0.0000067982456, +0.0000201754386, +0.0000603070175, +0.0000802631579, +0.0000802631579, +0.0000469298246, -0.0000067982456, -0.0000936403509, -0.0001673245614, -0.0002008771930, -0.0001673245614, -0.0000870614035, +0.0000000000000, +0.0000469298246, +0.0000668859649, +0.0000335526316, +0.0000000000000, -0.0000401315789, -0.0000469298246, -0.0000267543860, -0.0000067982456, +0.0000000000000, +0.0000067982456, +0.0000267543860, +0.0000469298246, +0.0000603070175, +0.0000603070175, +0.0000401315789, +0.0000201754386, +0.0000000000000, -0.0000133771930, -0.0000267543860, -0.0000201754386, -0.0000067982456, +0.0000000000000, +0.0000133771930, +0.0000267543860, +0.0000335526316, +0.0000267543860, +0.0000201754386, +0.0000201754386, +0.0000201754386, +0.0000267543860, +0.0000201754386, +0.0000133771930, +0.0000067982456, +0.0000067982456, +0.0000067982456, +0.0000067982456, +0.0000067982456, +0.0000133771930, +0.0000201754386, +0.0000201754386, +0.0000133771930, +0.0000000000000, -0.0000067982456, -0.0000201754386, -0.0000267543860, -0.0000201754386, -0.0000133771930, -0.0000067982456, -0.0000067982456, -0.0000133771930, -0.0000201754386, -0.0000267543860, -0.0000335526316, -0.0000267543860, -0.0000133771930, +0.0000000000000, +0.0000000000000, +0.0000067982456, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/19-marshall-plexi-sm57-off.h000066400000000000000000003141671247673406200260420ustar00rootroot00000000000000float marshall_plexi_sm57_off[] = { +0.0000000000000, +0.0000239215686, +0.0000478431373, +0.0000778431373, +0.0001076470588, +0.0001376470588, +0.0001615686275, +0.0002094117647, +0.0002333333333, +0.0002572549020, +0.0002452941176, +0.0002872549020, +0.0002752941176, +0.0003170588235, +0.0002811764706, +0.0003470588235, +0.0002872549020, +0.0003770588235, +0.0002811764706, +0.0004188235294, +0.0002692156863, +0.0004905882353, +0.0001974509804, +0.0006162745098, +0.0000180392157, +0.0008137254902, +0.0001017647059, +0.0000956862745, +0.0014421568627, -0.0002452941176, +0.0000419607843, +0.0004727450980, +0.0010531372549, +0.0006641176471, +0.0007180392157, +0.0001256862745, +0.0004547058824, -0.0000239215686, +0.0004666666667, +0.0001376470588, +0.0004188235294, +0.0003650980392, +0.0003770588235, +0.0004368627451, +0.0004368627451, +0.0003949019608, +0.0003829411765, +0.0004009803922, +0.0003709803922, +0.0002094117647, +0.0001915686275, +0.0001915686275, +0.0002572549020, +0.0005864705882, +0.0011309803922, +0.0018609803922, +0.0011488235294, -0.0056607843137, -0.0101545098039, -0.0078807843137, -0.0183823529412, -0.0470031372549, -0.0563917647059, -0.0222119607843, +0.0368545098039, +0.1011209803922, +0.1648068627451, +0.1960664705882, +0.1808735294118, +0.1334815686275, +0.0625250980392, -0.0097476470588, -0.0588629411765, -0.0769221568627, -0.0688021568627, -0.0461294117647, -0.0298594117647, -0.0227745098039, -0.0156837254902, -0.0146245098039, -0.0251021568627, -0.0281060784314, -0.0170658823529, +0.0061933333333, +0.0285727450980, +0.0305474509804, +0.0142654901961, -0.0073841176471, -0.0306552941176, -0.0475117647059, -0.0517123529412, -0.0441427450980, -0.0331862745098, -0.0291174509804, -0.0298174509804, -0.0287223529412, -0.0231754901961, -0.0191064705882, -0.0147621568627, -0.0120274509804, -0.0188311764706, -0.0317203921569, -0.0380452941176, -0.0333358823529, -0.0184960784314, -0.0019686274510, +0.0121711764706, +0.0229539215686, +0.0218649019608, +0.0108307843137, -0.0035064705882, -0.0196209803922, -0.0345986274510, -0.0420245098039, -0.0393378431373, -0.0290096078431, -0.0167847058824, -0.0053315686275, +0.0032311764706, +0.0068454901961, +0.0050982352941, -0.0015498039216, -0.0085449019608, -0.0101486274510, -0.0048409803922, +0.0039074509804, +0.0068694117647, -0.0014062745098, -0.0196688235294, -0.0371596078431, -0.0437956862745, -0.0393976470588, -0.0289139215686, -0.0154382352941, -0.0057803921569, -0.0027945098039, -0.0026329411765, -0.0011129411765, +0.0003650980392, +0.0009752941176, +0.0025790196078, +0.0051580392157, +0.0072403921569, +0.0056427450980, -0.0009513725490, -0.0085209803922, -0.0126917647059, -0.0135174509804, -0.0101425490196, -0.0046435294118, -0.0030576470588, -0.0096758823529, -0.0203988235294, -0.0300927450980, -0.0358133333333, -0.0338205882353, -0.0228762745098, -0.0070668627451, +0.0105974509804, +0.0254672549020, +0.0334915686275, +0.0334615686275, +0.0239294117647, +0.0085090196078, -0.0017174509804, -0.0033749019608, -0.0009872549020, +0.0034527450980, +0.0064564705882, +0.0043621568627, -0.0001017647059, -0.0029260784314, -0.0019268627451, +0.0042903921569, +0.0142952941176, +0.0240011764706, +0.0293149019608, +0.0287582352941, +0.0230737254902, +0.0155460784314, +0.0104956862745, +0.0088621568627, +0.0085807843137, +0.0083054901961, +0.0063309803922, +0.0029978431373, +0.0004966666667, +0.0002811764706, +0.0035962745098, +0.0102623529412, +0.0165094117647, +0.0206203921569, +0.0220803921569, +0.0202911764706, +0.0162282352941, +0.0117882352941, +0.0085270588235, +0.0085688235294, +0.0115966666667, +0.0149296078431, +0.0155221568627, +0.0120813725490, +0.0054992156863, -0.0015617647059, -0.0062531372549, -0.0066780392157, -0.0032911764706, +0.0024294117647, +0.0083952941176, +0.0131286274510, +0.0168145098039, +0.0197107843137, +0.0216315686275, +0.0227386274510, +0.0227745098039, +0.0207700000000, +0.0158392156863, +0.0090835294118, +0.0037519607843, +0.0021362745098, +0.0046852941176, +0.0109803921569, +0.0183164705882, +0.0218050980392, +0.0192619607843, +0.0120274509804, +0.0039013725490, -0.0009215686275, -0.0005745098039, +0.0032072549020, +0.0085509803922, +0.0132182352941, +0.0148039215686, +0.0124882352941, +0.0084909803922, +0.0053256862745, +0.0041049019608, +0.0044460784314, +0.0055768627451, +0.0063368627451, +0.0058103921569, +0.0048409803922, +0.0048768627451, +0.0061035294118, +0.0093527450980, +0.0147560784314, +0.0196988235294, +0.0223496078431, +0.0226068627451, +0.0207339215686, +0.0178437254902, +0.0141158823529, +0.0087843137255, +0.0027525490196, -0.0019805882353, -0.0044998039216, -0.0048050980392, -0.0038954901961, -0.0026866666667, -0.0018070588235, -0.0014121568627, -0.0010592156863, -0.0006821568627, -0.0003709803922, +0.0004307843137, +0.0022798039216, +0.0049786274510, +0.0077550980392, +0.0090835294118, +0.0075098039216, +0.0030996078431, -0.0020464705882, -0.0056307843137, -0.0064984313725, -0.0044878431373, -0.0004249019608, +0.0037039215686, +0.0063190196078, +0.0074258823529, +0.0075874509804, +0.0068635294118, +0.0054513725490, +0.0042425490196, +0.0040629411765, +0.0049786274510, +0.0060615686275, +0.0059358823529, +0.0047570588235, +0.0029500000000, +0.0002513725490, -0.0030456862745, -0.0058941176471, -0.0077192156863, -0.0083594117647, -0.0075994117647, -0.0055829411765, -0.0035423529412, -0.0025250980392, -0.0023156862745, -0.0026209803922, -0.0035603921569, -0.0050682352941, -0.0065941176471, -0.0077490196078, -0.0078927450980, -0.0067258823529, -0.0050562745098, -0.0039613725490, -0.0038774509804, -0.0046913725490, -0.0058223529412, -0.0066600000000, -0.0065223529412, -0.0055529411765, -0.0039133333333, -0.0019805882353, -0.0006582352941, +0.0001915686275, +0.0020464705882, +0.0048349019608, +0.0065523529412, +0.0060556862745, +0.0042964705882, +0.0025790196078, +0.0010472549020, -0.0004966666667, -0.0021482352941, -0.0035543137255, -0.0049725490196, -0.0068994117647, -0.0093227450980, -0.0113752941176, -0.0119796078431, -0.0112915686275, -0.0105554901961, -0.0101127450980, -0.0097117647059, -0.0098733333333, -0.0106392156863, -0.0113513725490, -0.0113154901961, -0.0103400000000, -0.0090535294118, -0.0077609803922, -0.0064564705882, -0.0055111764706, -0.0052000000000, -0.0058701960784, -0.0073062745098, -0.0082158823529, -0.0079464705882, -0.0070429411765, -0.0061992156863, -0.0059658823529, -0.0066839215686, -0.0082098039216, -0.0097954901961, -0.0100947058824, -0.0086764705882, -0.0063727450980, -0.0044998039216, -0.0038715686275, -0.0042845098039, -0.0052178431373, -0.0066121568627, -0.0075098039216, -0.0066480392157, -0.0042066666667, -0.0014001960784, +0.0005025490196, +0.0009096078431, -0.0001137254902, -0.0021182352941, -0.0042186274510, -0.0057445098039, -0.0065941176471, -0.0065701960784, -0.0062650980392, -0.0064386274510, -0.0069592156863, -0.0073660784314, -0.0073182352941, -0.0067617647059, -0.0062411764706, -0.0063368627451, -0.0073001960784, -0.0090894117647, -0.0107290196078, -0.0110341176471, -0.0098015686275, -0.0079047058824, -0.0063847058824, -0.0059060784314, -0.0063429411765, -0.0070429411765, -0.0072345098039, -0.0068396078431, -0.0061694117647, -0.0055649019608, -0.0051880392157, -0.0047033333333, -0.0038415686275, -0.0031774509804, -0.0034945098039, -0.0045058823529, -0.0052956862745, -0.0055170588235, -0.0049366666667, -0.0034825490196, -0.0014660784314, +0.0005505882353, +0.0020645098039, +0.0023935294118, +0.0012925490196, -0.0008617647059, -0.0031654901961, -0.0045298039216, -0.0044400000000, -0.0035962745098, -0.0033449019608, -0.0044280392157, -0.0063129411765, -0.0076174509804, -0.0072403921569, -0.0053854901961, -0.0031056862745, -0.0013703921569, -0.0011129411765, -0.0026986274510, -0.0052417647059, -0.0071386274510, -0.0072045098039, -0.0052956862745, -0.0026568627451, -0.0004786274510, +0.0008617647059, +0.0008198039216, -0.0014541176471, -0.0051282352941, -0.0078449019608, -0.0077670588235, -0.0048170588235, -0.0004488235294, +0.0036441176471, +0.0061574509804, +0.0064266666667, +0.0045656862745, +0.0015976470588, -0.0010650980392, -0.0021660784314, -0.0014780392157, +0.0000658823529, +0.0011727450980, +0.0011607843137, +0.0001137254902, -0.0015078431373, -0.0031894117647, -0.0039911764706, -0.0031952941176, -0.0013643137255, +0.0000837254902, +0.0003050980392, -0.0005025490196, -0.0017113725490, -0.0025072549020, -0.0024235294118, -0.0014958823529, -0.0001554901961, +0.0009154901961, +0.0012625490196, +0.0012505882353, +0.0010472549020, +0.0006701960784, +0.0004666666667, +0.0008376470588, +0.0013284313725, +0.0012925490196, +0.0004488235294, -0.0009694117647, -0.0025011764706, -0.0033629411765, -0.0029858823529, -0.0013943137255, +0.0007898039216, +0.0023576470588, +0.0026090196078, +0.0018370588235, +0.0004786274510, -0.0012745098039, -0.0026029411765, -0.0026688235294, -0.0015976470588, +0.0000478431373, +0.0018490196078, +0.0032792156863, +0.0041349019608, +0.0045476470588, +0.0045715686275, +0.0042305882353, +0.0037458823529, +0.0031713725490, +0.0028901960784, +0.0031474509804, +0.0035784313725, +0.0037998039216, +0.0038774509804, +0.0038954901961, +0.0036382352941, +0.0027047058824, +0.0014062745098, +0.0009813725490, +0.0020284313725, +0.0038774509804, +0.0054152941176, +0.0060735294118, +0.0055050980392, +0.0038356862745, +0.0016874509804, +0.0000060784314, -0.0005803921569, -0.0000898039216, +0.0011429411765, +0.0028482352941, +0.0044160784314, +0.0053496078431, +0.0056188235294, +0.0054272549020, +0.0052478431373, +0.0054213725490, +0.0059600000000, +0.0065582352941, +0.0069472549020, +0.0072943137255, +0.0077011764706, +0.0081439215686, +0.0085449019608, +0.0089039215686, +0.0089458823529, +0.0084192156863, +0.0076294117647, +0.0072225490196, +0.0071327450980, +0.0069770588235, +0.0065403921569, +0.0058941176471, +0.0048409803922, +0.0034586274510, +0.0020645098039, +0.0010950980392, +0.0010592156863, +0.0019447058824, +0.0031713725490, +0.0041766666667, +0.0044400000000, +0.0037339215686, +0.0026149019608, +0.0018909803922, +0.0021243137255, +0.0030098039216, +0.0036860784314, +0.0035903921569, +0.0032372549020, +0.0031176470588, +0.0033688235294, +0.0039133333333, +0.0046076470588, +0.0053615686275, +0.0061933333333, +0.0067796078431, +0.0066839215686, +0.0058880392157, +0.0044700000000, +0.0027705882353, +0.0015198039216, +0.0013343137255, +0.0021243137255, +0.0032672549020, +0.0041647058824, +0.0042186274510, +0.0033688235294, +0.0023156862745, +0.0017711764706, +0.0018729411765, +0.0026507843137, +0.0036023529412, +0.0038954901961, +0.0033270588235, +0.0024354901961, +0.0015078431373, +0.0005564705882, -0.0000956862745, +0.0001196078431, +0.0011009803922, +0.0021301960784, +0.0028482352941, +0.0031654901961, +0.0030278431373, +0.0025970588235, +0.0022619607843, +0.0024294117647, +0.0029441176471, +0.0033988235294, +0.0036082352941, +0.0033988235294, +0.0026507843137, +0.0016874509804, +0.0010233333333, +0.0010352941176, +0.0015317647059, +0.0018968627451, +0.0014421568627, -0.0001315686275, -0.0023876470588, -0.0042784313725, -0.0049905882353, -0.0041886274510, -0.0020764705882, +0.0006223529412, +0.0027945098039, +0.0035723529412, +0.0027586274510, +0.0008796078431, -0.0009335294118, -0.0019268627451, -0.0021301960784, -0.0019447058824, -0.0016454901961, -0.0014121568627, -0.0011907843137, -0.0008556862745, -0.0001974509804, +0.0008556862745, +0.0021721568627, +0.0033807843137, +0.0040031372549, +0.0036501960784, +0.0022319607843, +0.0002633333333, -0.0014001960784, -0.0020403921569, -0.0015976470588, -0.0005266666667, +0.0007719607843, +0.0019088235294, +0.0022319607843, +0.0016754901961, +0.0006162745098, -0.0006162745098, -0.0018790196078, -0.0031235294118, -0.0042845098039, -0.0051700000000, -0.0055290196078, -0.0050264705882, -0.0037158823529, -0.0021062745098, -0.0007360784314, +0.0000478431373, +0.0002154901961, -0.0000300000000, -0.0003111764706, -0.0005205882353, -0.0006882352941, -0.0005984313725, -0.0002872549020, -0.0000898039216, -0.0001076470588, -0.0004009803922, -0.0008317647059, -0.0010472549020, -0.0008137254902, -0.0002213725490, +0.0005984313725, +0.0013462745098, +0.0018370588235, +0.0022619607843, +0.0025670588235, +0.0023696078431, +0.0017892156863, +0.0011009803922, +0.0005625490196, +0.0005147058824, +0.0011190196078, +0.0020525490196, +0.0027047058824, +0.0026329411765, +0.0017592156863, +0.0003770588235, -0.0008796078431, -0.0015078431373, -0.0017950980392, -0.0021362745098, -0.0023815686275, -0.0023754901961, -0.0022500000000, -0.0020943137255, -0.0018729411765, -0.0014301960784, -0.0006760784314, +0.0000478431373, +0.0002633333333, -0.0003650980392, -0.0017711764706, -0.0033509803922, -0.0042545098039, -0.0040450980392, -0.0028721568627, -0.0012925490196, +0.0000000000000, +0.0005386274510, +0.0004307843137, +0.0001017647059, -0.0000419607843, +0.0002333333333, +0.0007241176471, +0.0010111764706, +0.0008915686275, +0.0003111764706, -0.0004905882353, -0.0010831372549, -0.0012745098039, -0.0010531372549, -0.0004427450980, +0.0001315686275, +0.0001735294118, -0.0003111764706, -0.0010770588235, -0.0018729411765, -0.0022319607843, -0.0019327450980, -0.0012925490196, -0.0007060784314, -0.0003829411765, -0.0003290196078, -0.0005386274510, -0.0010292156863, -0.0015976470588, -0.0020045098039, -0.0020045098039, -0.0014001960784, -0.0004488235294, +0.0001496078431, +0.0002931372549, +0.0003709803922, +0.0004786274510, +0.0003770588235, +0.0000598039216, -0.0003531372549, -0.0007001960784, -0.0008017647059, -0.0004966666667, +0.0000180392157, +0.0004666666667, +0.0008676470588, +0.0013164705882, +0.0016215686275, +0.0015678431373, +0.0011429411765, +0.0004068627451, -0.0003890196078, -0.0009454901961, -0.0011070588235, -0.0008556862745, -0.0004368627451, -0.0001915686275, -0.0002274509804, -0.0003949019608, -0.0005684313725, -0.0008017647059, -0.0011907843137, -0.0016215686275, -0.0020703921569, -0.0025370588235, -0.0030698039216, -0.0036680392157, -0.0041588235294, -0.0043203921569, -0.0042545098039, -0.0042245098039, -0.0043860784314, -0.0045417647059, -0.0044219607843, -0.0038835294118, -0.0029619607843, -0.0018429411765, -0.0009394117647, -0.0005386274510, -0.0007300000000, -0.0012686274510, -0.0017772549020, -0.0018370588235, -0.0012984313725, -0.0005266666667, -0.0001554901961, -0.0004786274510, -0.0012505882353, -0.0019566666667, -0.0021900000000, -0.0018070588235, -0.0010292156863, -0.0003170588235, +0.0000478431373, +0.0000717647059, -0.0002872549020, -0.0007778431373, -0.0009752941176, -0.0008737254902, -0.0007180392157, -0.0005984313725, -0.0007898039216, -0.0014719607843, -0.0023935294118, -0.0031296078431, -0.0032731372549, -0.0026627450980, -0.0015856862745, -0.0005505882353, +0.0000060784314, +0.0000300000000, -0.0001854901961, -0.0004847058824, -0.0009335294118, -0.0014541176471, -0.0020045098039, -0.0024354901961, -0.0024833333333, -0.0021301960784, -0.0015917647059, -0.0009633333333, -0.0002572549020, +0.0004905882353, +0.0010770588235, +0.0012505882353, +0.0009813725490, +0.0005205882353, +0.0001615686275, -0.0001076470588, -0.0003231372549, -0.0003050980392, -0.0001017647059, +0.0000000000000, -0.0001974509804, -0.0006760784314, -0.0011907843137, -0.0016335294118, -0.0020464705882, -0.0021182352941, -0.0017472549020, -0.0012266666667, -0.0008915686275, -0.0009035294118, -0.0012147058824, -0.0016813725490, -0.0020403921569, -0.0020703921569, -0.0017113725490, -0.0012447058824, -0.0009633333333, -0.0008437254902, -0.0007180392157, -0.0005745098039, -0.0003050980392, +0.0002094117647, +0.0008676470588, +0.0012386274510, +0.0011368627451, +0.0006641176471, +0.0000898039216, -0.0003411764706, -0.0004786274510, -0.0003231372549, +0.0001915686275, +0.0008556862745, +0.0013103921569, +0.0013223529412, +0.0009154901961, +0.0003949019608, +0.0000837254902, +0.0000000000000, +0.0000956862745, +0.0002213725490, +0.0001915686275, +0.0000180392157, -0.0002035294118, -0.0004607843137, -0.0005325490196, -0.0002154901961, +0.0003231372549, +0.0008078431373, +0.0010890196078, +0.0011607843137, +0.0010233333333, +0.0007658823529, +0.0006641176471, +0.0009096078431, +0.0014600000000, +0.0019088235294, +0.0020584313725, +0.0017831372549, +0.0009933333333, -0.0000239215686, -0.0006941176471, -0.0006521568627, +0.0002274509804, +0.0015617647059, +0.0026329411765, +0.0030398039216, +0.0027825490196, +0.0020764705882, +0.0011429411765, +0.0002692156863, -0.0001554901961, -0.0000539215686, +0.0003650980392, +0.0008256862745, +0.0010950980392, +0.0008796078431, +0.0002333333333, -0.0005205882353, -0.0009454901961, -0.0007600000000, -0.0001137254902, +0.0005803921569, +0.0011129411765, +0.0012447058824, +0.0008317647059, +0.0001435294118, -0.0004188235294, -0.0006343137255, -0.0002333333333, +0.0007241176471, +0.0017054901961, +0.0021960784314, +0.0021123529412, +0.0015798039216, +0.0008796078431, +0.0001735294118, -0.0003650980392, -0.0005564705882, -0.0004188235294, -0.0002692156863, -0.0001854901961, +0.0000717647059, +0.0006521568627, +0.0013582352941, +0.0020225490196, +0.0023996078431, +0.0022798039216, +0.0016694117647, +0.0008198039216, +0.0001615686275, +0.0001137254902, +0.0007539215686, +0.0017652941176, +0.0025790196078, +0.0027225490196, +0.0020884313725, +0.0010052941176, -0.0000239215686, -0.0006343137255, -0.0007539215686, -0.0006701960784, -0.0005984313725, -0.0005325490196, -0.0005147058824, -0.0005564705882, -0.0006701960784, -0.0008796078431, -0.0010770588235, -0.0011368627451, -0.0011309803922, -0.0011607843137, -0.0013882352941, -0.0016994117647, -0.0017892156863, -0.0013403921569, -0.0002931372549, +0.0010411764706, +0.0021362745098, +0.0026388235294, +0.0025072549020, +0.0019268627451, +0.0011788235294, +0.0004488235294, -0.0001017647059, -0.0004666666667, -0.0006343137255, -0.0005386274510, -0.0002394117647, +0.0000119607843, +0.0000658823529, -0.0001796078431, -0.0006941176471, -0.0011249019608, -0.0011668627451, -0.0007419607843, +0.0002035294118, +0.0014480392157, +0.0022500000000, +0.0020525490196, +0.0009813725490, -0.0005386274510, -0.0020645098039, -0.0030337254902, -0.0029619607843, -0.0018070588235, -0.0000478431373, +0.0014241176471, +0.0020584313725, +0.0019149019608, +0.0013045098039, +0.0004905882353, -0.0000898039216, -0.0002452941176, +0.0000837254902, +0.0007778431373, +0.0015737254902, +0.0022500000000, +0.0028362745098, +0.0032850980392, +0.0035245098039, +0.0034586274510, +0.0029260784314, +0.0018011764706, +0.0004307843137, -0.0006882352941, -0.0011070588235, -0.0007658823529, -0.0001315686275, +0.0002633333333, +0.0003890196078, +0.0003949019608, +0.0004905882353, +0.0005325490196, +0.0003770588235, +0.0000717647059, -0.0001915686275, -0.0003590196078, -0.0003650980392, -0.0004068627451, -0.0007060784314, -0.0012805882353, -0.0018909803922, -0.0021362745098, -0.0017831372549, -0.0010950980392, -0.0003949019608, +0.0000717647059, +0.0003411764706, +0.0004727450980, +0.0005864705882, +0.0007958823529, +0.0012088235294, +0.0017592156863, +0.0020884313725, +0.0019327450980, +0.0014719607843, +0.0009454901961, +0.0004786274510, +0.0001315686275, +0.0001315686275, +0.0005325490196, +0.0010650980392, +0.0015258823529, +0.0019268627451, +0.0021900000000, +0.0022798039216, +0.0020703921569, +0.0014062745098, +0.0004307843137, -0.0004368627451, -0.0009694117647, -0.0011968627451, -0.0012207843137, -0.0012805882353, -0.0014062745098, -0.0012207843137, -0.0005564705882, +0.0003290196078, +0.0011668627451, +0.0017711764706, +0.0018729411765, +0.0014182352941, +0.0005386274510, -0.0005266666667, -0.0014719607843, -0.0020943137255, -0.0023156862745, -0.0020345098039, -0.0012984313725, -0.0003170588235, +0.0005684313725, +0.0012386274510, +0.0016635294118, +0.0015198039216, +0.0007658823529, -0.0002035294118, -0.0011368627451, -0.0019149019608, -0.0023396078431, -0.0022978431373, -0.0018729411765, -0.0012505882353, -0.0005923529412, +0.0000778431373, +0.0006223529412, +0.0008376470588, +0.0008017647059, +0.0007300000000, +0.0005025490196, -0.0000060784314, -0.0007839215686, -0.0016215686275, -0.0021182352941, -0.0018909803922, -0.0009215686275, +0.0004129411765, +0.0016276470588, +0.0023337254902, +0.0023515686275, +0.0018490196078, +0.0011009803922, +0.0003411764706, -0.0001796078431, -0.0003411764706, -0.0000837254902, +0.0003890196078, +0.0008796078431, +0.0011309803922, +0.0008796078431, +0.0001554901961, -0.0005025490196, -0.0007658823529, -0.0006401960784, -0.0003770588235, -0.0002633333333, -0.0004727450980, -0.0010233333333, -0.0017831372549, -0.0024594117647, -0.0026688235294, -0.0021182352941, -0.0010411764706, +0.0000539215686, +0.0008137254902, +0.0010411764706, +0.0007539215686, +0.0001974509804, -0.0003890196078, -0.0007719607843, -0.0010292156863, -0.0014062745098, -0.0019986274510, -0.0026090196078, -0.0028123529412, -0.0020823529412, -0.0005864705882, +0.0010711764706, +0.0020045098039, +0.0014780392157, -0.0004427450980, -0.0026927450980, -0.0042066666667, -0.0044700000000, -0.0034466666667, -0.0016037254902, +0.0002752941176, +0.0015558823529, +0.0019268627451, +0.0014301960784, +0.0003111764706, -0.0009574509804, -0.0018309803922, -0.0019447058824, -0.0011727450980, +0.0003050980392, +0.0014719607843, +0.0013643137255, +0.0001554901961, -0.0014241176471, -0.0027525490196, -0.0031415686275, -0.0024054901961, -0.0009454901961, +0.0005266666667, +0.0010831372549, +0.0002872549020, -0.0009633333333, -0.0015856862745, -0.0010890196078, +0.0004307843137, +0.0022619607843, +0.0034466666667, +0.0034766666667, +0.0024413725490, +0.0008676470588, -0.0006282352941, -0.0013284313725, -0.0007658823529, +0.0005505882353, +0.0017174509804, +0.0022558823529, +0.0021721568627, +0.0016994117647, +0.0011309803922, +0.0008078431373, +0.0010770588235, +0.0016933333333, +0.0019805882353, +0.0015378431373, +0.0004607843137, -0.0007300000000, -0.0015976470588, -0.0018370588235, -0.0010770588235, +0.0005864705882, +0.0021601960784, +0.0023876470588, +0.0009813725490, -0.0011249019608, -0.0027764705882, -0.0033509803922, -0.0027347058824, -0.0013284313725, +0.0001017647059, +0.0008617647059, +0.0005147058824, -0.0005803921569, -0.0015258823529, -0.0016156862745, -0.0009335294118, -0.0000539215686, +0.0005745098039, +0.0007958823529, +0.0003770588235, -0.0005684313725, -0.0015498039216, -0.0020943137255, -0.0019686274510, -0.0012386274510, -0.0001796078431, +0.0008556862745, +0.0016933333333, +0.0020403921569, +0.0018011764706, +0.0013582352941, +0.0010472549020, +0.0007539215686, +0.0004068627451, -0.0001196078431, -0.0007658823529, -0.0013643137255, -0.0018490196078, -0.0022439215686, -0.0024652941176, -0.0025192156863, -0.0023876470588, -0.0022678431373, -0.0022439215686, -0.0023456862745, -0.0025370588235, -0.0026927450980, -0.0025550980392, -0.0020225490196, -0.0012147058824, -0.0004847058824, -0.0002154901961, -0.0005325490196, -0.0011249019608, -0.0014062745098, -0.0010052941176, +0.0000837254902, +0.0014600000000, +0.0024772549020, +0.0026747058824, +0.0020464705882, +0.0009335294118, -0.0001376470588, -0.0006103921569, -0.0002394117647, +0.0005684313725, +0.0012925490196, +0.0018131372549, +0.0021301960784, +0.0022978431373, +0.0024533333333, +0.0025131372549, +0.0022558823529, +0.0016037254902, +0.0004607843137, -0.0010352941176, -0.0024115686275, -0.0033090196078, -0.0037339215686, -0.0035843137255, -0.0027347058824, -0.0014660784314, -0.0000898039216, +0.0012625490196, +0.0024833333333, +0.0034107843137, +0.0038356862745, +0.0035603921569, +0.0026149019608, +0.0014062745098, +0.0004188235294, -0.0001496078431, -0.0003829411765, -0.0002633333333, +0.0002692156863, +0.0009872549020, +0.0016096078431, +0.0020345098039, +0.0023396078431, +0.0024652941176, +0.0023876470588, +0.0020884313725, +0.0015678431373, +0.0009035294118, +0.0003470588235, +0.0001017647059, +0.0002872549020, +0.0007839215686, +0.0011968627451, +0.0010770588235, +0.0004488235294, -0.0004009803922, -0.0011309803922, -0.0014541176471, -0.0012984313725, -0.0008556862745, -0.0004666666667, -0.0004607843137, -0.0007778431373, -0.0010770588235, -0.0010352941176, -0.0007958823529, -0.0005745098039, -0.0002394117647, +0.0003350980392, +0.0009872549020, +0.0014480392157, +0.0013762745098, +0.0007060784314, -0.0002154901961, -0.0009274509804, -0.0012447058824, -0.0012386274510, -0.0010111764706, -0.0007180392157, -0.0004547058824, -0.0001256862745, +0.0003411764706, +0.0007839215686, +0.0010472549020, +0.0012027450980, +0.0011070588235, +0.0007241176471, +0.0003231372549, -0.0000300000000, -0.0003111764706, -0.0003949019608, -0.0003890196078, -0.0003411764706, -0.0002035294118, -0.0002154901961, -0.0005564705882, -0.0009872549020, -0.0011847058824, -0.0009872549020, -0.0004129411765, +0.0004249019608, +0.0013343137255, +0.0020584313725, +0.0023996078431, +0.0020943137255, +0.0011190196078, +0.0000000000000, -0.0008317647059, -0.0011788235294, -0.0010292156863, -0.0005086274510, +0.0002692156863, +0.0010592156863, +0.0015678431373, +0.0017352941176, +0.0015737254902, +0.0010233333333, +0.0003470588235, -0.0000300000000, +0.0000717647059, +0.0005625490196, +0.0012327450980, +0.0018909803922, +0.0022739215686, +0.0022260784314, +0.0017831372549, +0.0009872549020, +0.0000180392157, -0.0007480392157, -0.0011968627451, -0.0013103921569, -0.0010831372549, -0.0008256862745, -0.0007241176471, -0.0007121568627, -0.0007958823529, -0.0008676470588, -0.0005923529412, -0.0000358823529, +0.0004488235294, +0.0007719607843, +0.0010650980392, +0.0013045098039, +0.0013762745098, +0.0012088235294, +0.0008915686275, +0.0005266666667, +0.0000239215686, -0.0006343137255, -0.0011009803922, -0.0011488235294, -0.0007839215686, -0.0001076470588, +0.0007778431373, +0.0016694117647, +0.0022917647059, +0.0024054901961, +0.0019566666667, +0.0011907843137, +0.0005684313725, +0.0003350980392, +0.0003770588235, +0.0004188235294, +0.0002692156863, -0.0000837254902, -0.0004547058824, -0.0006462745098, -0.0006103921569, -0.0003829411765, -0.0000837254902, +0.0000000000000, -0.0003470588235, -0.0011249019608, -0.0019088235294, -0.0021482352941, -0.0017113725490, -0.0007241176471, +0.0006043137255, +0.0018370588235, +0.0024772549020, +0.0023576470588, +0.0015976470588, +0.0005564705882, -0.0003770588235, -0.0009513725490, -0.0010292156863, -0.0006462745098, +0.0000119607843, +0.0007001960784, +0.0011309803922, +0.0013403921569, +0.0014719607843, +0.0015439215686, +0.0016037254902, +0.0016813725490, +0.0014900000000, +0.0009215686275, +0.0000956862745, -0.0008017647059, -0.0015078431373, -0.0016994117647, -0.0013523529412, -0.0008198039216, -0.0004129411765, -0.0001796078431, -0.0002452941176, -0.0006882352941, -0.0012566666667, -0.0015976470588, -0.0014719607843, -0.0008078431373, +0.0001017647059, +0.0007958823529, +0.0009035294118, +0.0005505882353, +0.0001974509804, +0.0002633333333, +0.0007001960784, +0.0011309803922, +0.0013164705882, +0.0012566666667, +0.0009394117647, +0.0004727450980, +0.0000119607843, -0.0002633333333, -0.0002633333333, -0.0001076470588, +0.0000239215686, +0.0000300000000, -0.0001674509804, -0.0005325490196, -0.0008796078431, -0.0009933333333, -0.0008017647059, -0.0005325490196, -0.0005745098039, -0.0010831372549, -0.0017472549020, -0.0022500000000, -0.0024952941176, -0.0024772549020, -0.0023037254902, -0.0022439215686, -0.0022798039216, -0.0021841176471, -0.0018968627451, -0.0014780392157, -0.0009096078431, -0.0003590196078, -0.0001196078431, -0.0003709803922, -0.0008437254902, -0.0011488235294, -0.0010411764706, -0.0005745098039, +0.0000419607843, +0.0005505882353, +0.0006701960784, +0.0004009803922, -0.0000478431373, -0.0004129411765, -0.0004427450980, -0.0001554901961, +0.0001554901961, +0.0002333333333, +0.0000180392157, -0.0003170588235, -0.0005984313725, -0.0007719607843, -0.0008198039216, -0.0007778431373, -0.0007180392157, -0.0006582352941, -0.0005803921569, -0.0005803921569, -0.0006521568627, -0.0006941176471, -0.0006223529412, -0.0005025490196, -0.0004188235294, -0.0003829411765, -0.0003350980392, -0.0001796078431, +0.0001376470588, +0.0004368627451, +0.0005684313725, +0.0005205882353, +0.0003531372549, +0.0000898039216, -0.0001615686275, -0.0003650980392, -0.0005025490196, -0.0005266666667, -0.0003470588235, +0.0000358823529, +0.0004009803922, +0.0005325490196, +0.0005386274510, +0.0004966666667, +0.0003531372549, +0.0001376470588, -0.0001615686275, -0.0005445098039, -0.0007839215686, -0.0007480392157, -0.0004249019608, +0.0001017647059, +0.0007241176471, +0.0012447058824, +0.0014541176471, +0.0012505882353, +0.0006941176471, -0.0000358823529, -0.0006701960784, -0.0009215686275, -0.0007480392157, -0.0002154901961, +0.0004427450980, +0.0010531372549, +0.0013523529412, +0.0012088235294, +0.0008556862745, +0.0006223529412, +0.0005325490196, +0.0005205882353, +0.0005325490196, +0.0005745098039, +0.0006103921569, +0.0005505882353, +0.0003590196078, +0.0001315686275, +0.0000778431373, +0.0003770588235, +0.0008198039216, +0.0011070588235, +0.0011190196078, +0.0009154901961, +0.0006941176471, +0.0004009803922, -0.0000239215686, -0.0004368627451, -0.0007300000000, -0.0008976470588, -0.0008676470588, -0.0006641176471, -0.0004368627451, -0.0002692156863, -0.0002513725490, -0.0003890196078, -0.0005684313725, -0.0006223529412, -0.0006401960784, -0.0007060784314, -0.0007600000000, -0.0006401960784, -0.0004307843137, -0.0002274509804, -0.0000717647059, +0.0000837254902, +0.0003231372549, +0.0006760784314, +0.0009752941176, +0.0009394117647, +0.0006043137255, +0.0002931372549, +0.0000539215686, -0.0002213725490, -0.0004488235294, -0.0004966666667, -0.0004966666667, -0.0004488235294, -0.0003170588235, -0.0001554901961, +0.0000419607843, +0.0002572549020, +0.0002154901961, -0.0000778431373, -0.0003590196078, -0.0004847058824, -0.0004905882353, -0.0002811764706, +0.0001615686275, +0.0006641176471, +0.0009096078431, +0.0007719607843, +0.0003949019608, +0.0000060784314, -0.0002633333333, -0.0004368627451, -0.0006462745098, -0.0009933333333, -0.0013643137255, -0.0015617647059, -0.0014360784314, -0.0009274509804, -0.0002692156863, +0.0001615686275, +0.0003050980392, +0.0002394117647, -0.0000180392157, -0.0003650980392, -0.0006223529412, -0.0007898039216, -0.0007658823529, -0.0004607843137, +0.0000419607843, +0.0004666666667, +0.0005625490196, +0.0003411764706, +0.0000358823529, -0.0001735294118, -0.0001974509804, -0.0000778431373, +0.0001017647059, +0.0001674509804, +0.0000956862745, +0.0000180392157, +0.0000180392157, +0.0000180392157, -0.0000119607843, -0.0000898039216, -0.0001915686275, -0.0003650980392, -0.0006223529412, -0.0008617647059, -0.0008737254902, -0.0006162745098, -0.0001915686275, +0.0002154901961, +0.0004427450980, +0.0003650980392, +0.0000598039216, -0.0003290196078, -0.0006462745098, -0.0007419607843, -0.0006043137255, -0.0003531372549, -0.0001196078431, -0.0000119607843, -0.0000837254902, -0.0002992156863, -0.0005086274510, -0.0004249019608, -0.0000180392157, +0.0003829411765, +0.0004786274510, +0.0001915686275, -0.0003949019608, -0.0010233333333, -0.0014001960784, -0.0014600000000, -0.0011968627451, -0.0007001960784, -0.0002333333333, +0.0001315686275, +0.0004607843137, +0.0007539215686, +0.0009335294118, +0.0009513725490, +0.0007241176471, +0.0002692156863, -0.0003050980392, -0.0008617647059, -0.0012984313725, -0.0014719607843, -0.0013223529412, -0.0009574509804, -0.0005803921569, -0.0002213725490, +0.0002035294118, +0.0007180392157, +0.0011309803922, +0.0012805882353, +0.0011070588235, +0.0006821568627, +0.0002274509804, -0.0000180392157, +0.0000239215686, +0.0003111764706, +0.0006582352941, +0.0009096078431, +0.0010352941176, +0.0011190196078, +0.0012447058824, +0.0013403921569, +0.0012505882353, +0.0009633333333, +0.0006162745098, +0.0002992156863, +0.0000717647059, +0.0000539215686, +0.0002394117647, +0.0005205882353, +0.0007480392157, +0.0008437254902, +0.0007839215686, +0.0005684313725, +0.0002274509804, -0.0000358823529, -0.0000778431373, +0.0001137254902, +0.0004068627451, +0.0006462745098, +0.0008496078431, +0.0010650980392, +0.0011788235294, +0.0012327450980, +0.0013403921569, +0.0014241176471, +0.0013164705882, +0.0010233333333, +0.0006760784314, +0.0002931372549, -0.0001496078431, -0.0005684313725, -0.0007719607843, -0.0006462745098, -0.0002513725490, +0.0001796078431, +0.0005086274510, +0.0007360784314, +0.0008078431373, +0.0006103921569, +0.0002752941176, +0.0000060784314, -0.0001376470588, -0.0002094117647, -0.0002213725490, -0.0001674509804, -0.0000837254902, -0.0000539215686, -0.0001196078431, -0.0002513725490, -0.0002394117647, +0.0000300000000, +0.0003350980392, +0.0004666666667, +0.0004607843137, +0.0003770588235, +0.0003290196078, +0.0003650980392, +0.0004368627451, +0.0004905882353, +0.0004666666667, +0.0003111764706, +0.0000956862745, -0.0001256862745, -0.0002572549020, -0.0001854901961, +0.0000837254902, +0.0005564705882, +0.0011788235294, +0.0016994117647, +0.0018729411765, +0.0016515686275, +0.0011488235294, +0.0005205882353, -0.0000658823529, -0.0004188235294, -0.0004068627451, +0.0000000000000, +0.0006043137255, +0.0010770588235, +0.0012984313725, +0.0013343137255, +0.0011907843137, +0.0008856862745, +0.0006043137255, +0.0005205882353, +0.0005505882353, +0.0005564705882, +0.0004607843137, +0.0002811764706, +0.0000898039216, -0.0000717647059, -0.0002752941176, -0.0004427450980, -0.0004607843137, -0.0003590196078, -0.0002633333333, -0.0002752941176, -0.0003650980392, -0.0004368627451, -0.0003829411765, -0.0001496078431, +0.0001615686275, +0.0003650980392, +0.0003650980392, +0.0001674509804, -0.0002094117647, -0.0006941176471, -0.0010650980392, -0.0011668627451, -0.0010890196078, -0.0009694117647, -0.0008256862745, -0.0006401960784, -0.0004786274510, -0.0003770588235, -0.0002872549020, -0.0000658823529, +0.0002394117647, +0.0004307843137, +0.0003350980392, +0.0000060784314, -0.0003829411765, -0.0006582352941, -0.0007658823529, -0.0007060784314, -0.0004905882353, -0.0001796078431, +0.0001615686275, +0.0004427450980, +0.0006223529412, +0.0006641176471, +0.0005625490196, +0.0003590196078, +0.0001735294118, +0.0000478431373, -0.0001196078431, -0.0004307843137, -0.0007060784314, -0.0007060784314, -0.0003770588235, +0.0000778431373, +0.0005625490196, +0.0010292156863, +0.0013703921569, +0.0013762745098, +0.0010531372549, +0.0005505882353, +0.0000358823529, -0.0004068627451, -0.0007600000000, -0.0009933333333, -0.0010233333333, -0.0007600000000, -0.0001854901961, +0.0004427450980, +0.0008376470588, +0.0008737254902, +0.0006343137255, +0.0001674509804, -0.0003890196078, -0.0008556862745, -0.0011309803922, -0.0012266666667, -0.0011129411765, -0.0008496078431, -0.0005625490196, -0.0003531372549, -0.0002992156863, -0.0003709803922, -0.0004607843137, -0.0004666666667, -0.0004488235294, -0.0004905882353, -0.0005864705882, -0.0007241176471, -0.0009035294118, -0.0010531372549, -0.0011549019608, -0.0011727450980, -0.0010531372549, -0.0008437254902, -0.0005564705882, -0.0001796078431, +0.0001256862745, +0.0001496078431, -0.0001256862745, -0.0005325490196, -0.0009154901961, -0.0011249019608, -0.0010770588235, -0.0008256862745, -0.0003890196078, +0.0002811764706, +0.0009274509804, +0.0011847058824, +0.0009694117647, +0.0004547058824, -0.0000478431373, -0.0003111764706, -0.0004249019608, -0.0004905882353, -0.0004905882353, -0.0004009803922, -0.0003170588235, -0.0002452941176, -0.0001735294118, -0.0000956862745, -0.0000717647059, -0.0000539215686, +0.0000119607843, +0.0002992156863, +0.0007480392157, +0.0010831372549, +0.0010770588235, +0.0007898039216, +0.0003111764706, -0.0001915686275, -0.0005386274510, -0.0006462745098, -0.0004547058824, +0.0000060784314, +0.0004847058824, +0.0007419607843, +0.0007719607843, +0.0006701960784, +0.0004547058824, +0.0001076470588, -0.0003290196078, -0.0006582352941, -0.0007360784314, -0.0005745098039, -0.0002752941176, +0.0000898039216, +0.0004009803922, +0.0005147058824, +0.0003829411765, +0.0001196078431, -0.0001196078431, -0.0002692156863, -0.0003111764706, -0.0002572549020, -0.0001017647059, +0.0001315686275, +0.0003890196078, +0.0005745098039, +0.0005803921569, +0.0003590196078, +0.0001196078431, +0.0000358823529, +0.0001196078431, +0.0002992156863, +0.0004847058824, +0.0005505882353, +0.0004427450980, +0.0001315686275, -0.0002452941176, -0.0006043137255, -0.0008556862745, -0.0009813725490, -0.0008915686275, -0.0005266666667, +0.0000778431373, +0.0007539215686, +0.0013284313725, +0.0015798039216, +0.0013762745098, +0.0008017647059, +0.0001615686275, -0.0002333333333, -0.0002692156863, -0.0000717647059, +0.0002274509804, +0.0005564705882, +0.0008437254902, +0.0009154901961, +0.0006821568627, +0.0002274509804, -0.0001915686275, -0.0004666666667, -0.0005625490196, -0.0004427450980, -0.0000956862745, +0.0002992156863, +0.0005923529412, +0.0006821568627, +0.0006103921569, +0.0005025490196, +0.0004427450980, +0.0003770588235, +0.0002811764706, +0.0001674509804, +0.0000598039216, +0.0000000000000, +0.0000239215686, +0.0001376470588, +0.0002811764706, +0.0003231372549, +0.0001615686275, -0.0001376470588, -0.0004488235294, -0.0006401960784, -0.0006701960784, -0.0005025490196, -0.0001376470588, +0.0002452941176, +0.0003770588235, +0.0001735294118, -0.0003170588235, -0.0009215686275, -0.0013703921569, -0.0014719607843, -0.0011847058824, -0.0006821568627, -0.0002572549020, -0.0000717647059, -0.0001256862745, -0.0003290196078, -0.0005625490196, -0.0007241176471, -0.0008317647059, -0.0007658823529, -0.0004547058824, -0.0000119607843, +0.0002513725490, +0.0002154901961, -0.0000658823529, -0.0003890196078, -0.0005386274510, -0.0004009803922, -0.0001017647059, +0.0001974509804, +0.0003890196078, +0.0003650980392, +0.0000778431373, -0.0003350980392, -0.0006941176471, -0.0008198039216, -0.0006701960784, -0.0003350980392, +0.0000539215686, +0.0004786274510, +0.0008017647059, +0.0008437254902, +0.0005803921569, +0.0001915686275, -0.0001496078431, -0.0004307843137, -0.0007360784314, -0.0010052941176, -0.0009992156863, -0.0006821568627, -0.0001496078431, +0.0005325490196, +0.0012686274510, +0.0017413725490, +0.0016933333333, +0.0010950980392, +0.0000956862745, -0.0010172549020, -0.0018668627451, -0.0020464705882, -0.0013703921569, -0.0000358823529, +0.0014958823529, +0.0025731372549, +0.0026568627451, +0.0014360784314, -0.0008676470588, -0.0032970588235, -0.0045117647059, -0.0038894117647, -0.0018070588235, +0.0008017647059, +0.0030996078431, +0.0043143137255, +0.0040211764706, +0.0023754901961, +0.0002692156863, -0.0012147058824, -0.0014480392157, -0.0006462745098, +0.0004727450980, +0.0012327450980, +0.0012984313725, +0.0006882352941, -0.0002692156863, -0.0010711764706, -0.0012147058824, -0.0006821568627, +0.0000837254902, +0.0006343137255, +0.0008496078431, +0.0008676470588, +0.0007539215686, +0.0003949019608, +0.0000000000000, -0.0000539215686, +0.0002811764706, +0.0006882352941, +0.0008137254902, +0.0005564705882, +0.0001196078431, -0.0002811764706, -0.0005864705882, -0.0006821568627, -0.0004727450980, -0.0000060784314, +0.0005445098039, +0.0009872549020, +0.0011788235294, +0.0011070588235, +0.0007180392157, +0.0000598039216, -0.0006282352941, -0.0010650980392, -0.0011129411765, -0.0008676470588, -0.0005803921569, -0.0003290196078, -0.0000898039216, +0.0000778431373, +0.0000898039216, -0.0000060784314, -0.0001137254902, -0.0001674509804, -0.0002154901961, -0.0001796078431, +0.0000478431373, +0.0004905882353, +0.0008915686275, +0.0009274509804, +0.0005325490196, -0.0000180392157, -0.0005325490196, -0.0008496078431, -0.0009154901961, -0.0007600000000, -0.0005325490196, -0.0003890196078, -0.0004427450980, -0.0006462745098, -0.0008496078431, -0.0008796078431, -0.0006941176471, -0.0003709803922, -0.0000119607843, +0.0002094117647, +0.0002811764706, +0.0003050980392, +0.0003350980392, +0.0003590196078, +0.0004009803922, +0.0004068627451, +0.0002633333333, -0.0000358823529, -0.0003531372549, -0.0005325490196, -0.0004727450980, -0.0001496078431, +0.0003890196078, +0.0008796078431, +0.0009454901961, +0.0004727450980, -0.0002094117647, -0.0006582352941, -0.0006462745098, -0.0003170588235, +0.0000598039216, +0.0002213725490, +0.0000358823529, -0.0004488235294, -0.0010292156863, -0.0014062745098, -0.0013882352941, -0.0011009803922, -0.0007241176471, -0.0003411764706, -0.0000478431373, +0.0000956862745, +0.0001435294118, +0.0001315686275, +0.0000717647059, -0.0000239215686, -0.0000539215686, +0.0000778431373, +0.0002394117647, +0.0001974509804, -0.0000837254902, -0.0004488235294, -0.0006821568627, -0.0007001960784, -0.0004847058824, -0.0001554901961, +0.0000956862745, +0.0001674509804, +0.0001435294118, +0.0000898039216, +0.0000598039216, +0.0001137254902, +0.0002513725490, +0.0002992156863, +0.0000658823529, -0.0004607843137, -0.0010411764706, -0.0013403921569, -0.0012984313725, -0.0010352941176, -0.0006582352941, -0.0002035294118, +0.0001674509804, +0.0003650980392, +0.0003949019608, +0.0003949019608, +0.0004009803922, +0.0003650980392, +0.0001854901961, -0.0000778431373, -0.0004009803922, -0.0006941176471, -0.0008617647059, -0.0008256862745, -0.0005984313725, -0.0002452941176, +0.0001017647059, +0.0003350980392, +0.0003290196078, +0.0000898039216, -0.0001854901961, -0.0003290196078, -0.0003231372549, -0.0001915686275, +0.0000000000000, +0.0001915686275, +0.0002992156863, +0.0002094117647, -0.0000478431373, -0.0003050980392, -0.0004188235294, -0.0004068627451, -0.0003170588235, -0.0002452941176, -0.0002333333333, -0.0002394117647, -0.0002094117647, -0.0001735294118, -0.0001915686275, -0.0002872549020, -0.0003411764706, -0.0002572549020, -0.0000539215686, +0.0002094117647, +0.0004786274510, +0.0005984313725, +0.0005445098039, +0.0004427450980, +0.0004727450980, +0.0005505882353, +0.0004905882353, +0.0002213725490, -0.0000898039216, -0.0003411764706, -0.0004786274510, -0.0004188235294, -0.0001315686275, +0.0002633333333, +0.0006043137255, +0.0007121568627, +0.0005803921569, +0.0003231372549, +0.0001196078431, +0.0001137254902, +0.0004607843137, +0.0010711764706, +0.0015737254902, +0.0015558823529, +0.0010233333333, +0.0002692156863, -0.0004009803922, -0.0007719607843, -0.0006882352941, -0.0002094117647, +0.0004368627451, +0.0009813725490, +0.0012566666667, +0.0013164705882, +0.0012925490196, +0.0012447058824, +0.0012088235294, +0.0011368627451, +0.0009752941176, +0.0007300000000, +0.0004666666667, +0.0002035294118, +0.0000060784314, +0.0000000000000, +0.0001435294118, +0.0002692156863, +0.0001915686275, -0.0001615686275, -0.0005923529412, -0.0007839215686, -0.0007180392157, -0.0005564705882, -0.0004009803922, -0.0002692156863, -0.0001854901961, -0.0001554901961, -0.0001915686275, -0.0002572549020, -0.0002394117647, -0.0000778431373, +0.0001137254902, +0.0002394117647, +0.0002213725490, +0.0000717647059, -0.0001796078431, -0.0005445098039, -0.0009215686275, -0.0011249019608, -0.0010950980392, -0.0008376470588, -0.0004249019608, +0.0000000000000, +0.0002752941176, +0.0003590196078, +0.0002572549020, +0.0000598039216, -0.0000478431373, +0.0000539215686, +0.0003290196078, +0.0006282352941, +0.0008556862745, +0.0009096078431, +0.0007060784314, +0.0002752941176, -0.0002154901961, -0.0005266666667, -0.0004905882353, -0.0001796078431, +0.0001674509804, +0.0003829411765, +0.0003350980392, -0.0000658823529, -0.0007121568627, -0.0013403921569, -0.0016515686275, -0.0015078431373, -0.0010472549020, -0.0005745098039, -0.0001435294118, +0.0002633333333, +0.0005684313725, +0.0007539215686, +0.0008676470588, +0.0009096078431, +0.0008856862745, +0.0007360784314, +0.0004188235294, +0.0000000000000, -0.0003709803922, -0.0005445098039, -0.0004368627451, -0.0001735294118, +0.0001076470588, +0.0003709803922, +0.0005086274510, +0.0004068627451, +0.0000837254902, -0.0002872549020, -0.0004666666667, -0.0003531372549, -0.0000837254902, +0.0001615686275, +0.0002513725490, +0.0000956862745, -0.0002872549020, -0.0007060784314, -0.0009096078431, -0.0007658823529, -0.0004547058824, -0.0002394117647, -0.0001735294118, -0.0001137254902, +0.0000539215686, +0.0003050980392, +0.0005325490196, +0.0007060784314, +0.0008078431373, +0.0007839215686, +0.0005984313725, +0.0003231372549, +0.0000658823529, -0.0000419607843, -0.0000060784314, +0.0001076470588, +0.0002333333333, +0.0003709803922, +0.0004607843137, +0.0004905882353, +0.0004547058824, +0.0003829411765, +0.0003350980392, +0.0003531372549, +0.0003650980392, +0.0003350980392, +0.0002872549020, +0.0002274509804, +0.0000898039216, -0.0001017647059, -0.0001974509804, -0.0001196078431, +0.0000119607843, +0.0000837254902, +0.0000180392157, -0.0000658823529, -0.0000717647059, -0.0000419607843, -0.0000119607843, +0.0000956862745, +0.0002931372549, +0.0004607843137, +0.0005684313725, +0.0006401960784, +0.0006882352941, +0.0006941176471, +0.0007241176471, +0.0007898039216, +0.0008137254902, +0.0007180392157, +0.0005564705882, +0.0004068627451, +0.0003470588235, +0.0003590196078, +0.0003890196078, +0.0003829411765, +0.0003770588235, +0.0003111764706, +0.0001735294118, +0.0000598039216, +0.0001017647059, +0.0001974509804, +0.0002154901961, +0.0001554901961, +0.0001017647059, +0.0000000000000, -0.0002035294118, -0.0003829411765, -0.0003770588235, -0.0002154901961, -0.0000837254902, -0.0002094117647, -0.0005445098039, -0.0008737254902, -0.0010352941176, -0.0010233333333, -0.0008437254902, -0.0005325490196, -0.0001554901961, +0.0002154901961, +0.0005386274510, +0.0007600000000, +0.0008737254902, +0.0009215686275, +0.0008976470588, +0.0008376470588, +0.0007658823529, +0.0007241176471, +0.0006760784314, +0.0005803921569, +0.0004188235294, +0.0003050980392, +0.0003050980392, +0.0003770588235, +0.0004427450980, +0.0004966666667, +0.0005205882353, +0.0005564705882, +0.0005564705882, +0.0005205882353, +0.0004727450980, +0.0004307843137, +0.0003829411765, +0.0003890196078, +0.0003949019608, +0.0003650980392, +0.0003290196078, +0.0003470588235, +0.0003350980392, +0.0002213725490, +0.0000000000000, -0.0002394117647, -0.0004009803922, -0.0004129411765, -0.0003111764706, -0.0001854901961, -0.0001137254902, -0.0001376470588, -0.0002452941176, -0.0003829411765, -0.0004666666667, -0.0004847058824, -0.0004488235294, -0.0003231372549, -0.0001796078431, -0.0001435294118, -0.0002154901961, -0.0002633333333, -0.0002274509804, -0.0001315686275, -0.0000598039216, -0.0000658823529, -0.0001496078431, -0.0003290196078, -0.0005445098039, -0.0006882352941, -0.0007001960784, -0.0006103921569, -0.0004488235294, -0.0002931372549, -0.0001735294118, -0.0001315686275, -0.0002035294118, -0.0003709803922, -0.0005205882353, -0.0006282352941, -0.0006701960784, -0.0006223529412, -0.0005147058824, -0.0004188235294, -0.0003231372549, -0.0001915686275, -0.0000358823529, +0.0000539215686, +0.0000898039216, +0.0001137254902, +0.0002213725490, +0.0004368627451, +0.0006582352941, +0.0007658823529, +0.0007600000000, +0.0006582352941, +0.0004966666667, +0.0002513725490, -0.0001017647059, -0.0005147058824, -0.0007898039216, -0.0008256862745, -0.0005984313725, -0.0001915686275, +0.0001796078431, +0.0003949019608, +0.0004307843137, +0.0002752941176, +0.0000300000000, -0.0001674509804, -0.0003111764706, -0.0003770588235, -0.0003290196078, -0.0001554901961, +0.0000358823529, +0.0001315686275, +0.0000300000000, -0.0002213725490, -0.0004786274510, -0.0005923529412, -0.0006103921569, -0.0006103921569, -0.0005984313725, -0.0005325490196, -0.0004068627451, -0.0002633333333, -0.0001915686275, -0.0001915686275, -0.0001735294118, -0.0000478431373, +0.0001435294118, +0.0002811764706, +0.0002752941176, +0.0001854901961, +0.0001256862745, +0.0001376470588, +0.0001435294118, +0.0000956862745, -0.0000180392157, -0.0000956862745, -0.0001137254902, -0.0001615686275, -0.0002872549020, -0.0004068627451, -0.0004068627451, -0.0003111764706, -0.0002035294118, -0.0001256862745, -0.0000717647059, -0.0000300000000, -0.0000119607843, -0.0000119607843, -0.0000060784314, -0.0000180392157, -0.0001376470588, -0.0004068627451, -0.0007001960784, -0.0008796078431, -0.0008856862745, -0.0007480392157, -0.0004847058824, -0.0001554901961, +0.0001854901961, +0.0003890196078, +0.0003231372549, +0.0000778431373, -0.0001435294118, -0.0002692156863, -0.0002692156863, -0.0001915686275, -0.0001196078431, -0.0001256862745, -0.0001915686275, -0.0002752941176, -0.0003531372549, -0.0004666666667, -0.0005923529412, -0.0006582352941, -0.0006521568627, -0.0006582352941, -0.0007241176471, -0.0007958823529, -0.0007958823529, -0.0006882352941, -0.0004786274510, -0.0002213725490, -0.0000539215686, -0.0000658823529, -0.0001854901961, -0.0002333333333, -0.0000956862745, +0.0001496078431, +0.0002572549020, +0.0001076470588, -0.0001974509804, -0.0005025490196, -0.0006821568627, -0.0006462745098, -0.0004249019608, -0.0001076470588, +0.0001796078431, +0.0003290196078, +0.0002931372549, +0.0001256862745, -0.0001017647059, -0.0002692156863, -0.0002452941176, +0.0000358823529, +0.0004905882353, +0.0009274509804, +0.0011488235294, +0.0010890196078, +0.0007600000000, +0.0002452941176, -0.0002692156863, -0.0005984313725, -0.0006103921569, -0.0003170588235, +0.0000837254902, +0.0003770588235, +0.0004307843137, +0.0002572549020, -0.0000419607843, -0.0003709803922, -0.0006401960784, -0.0007778431373, -0.0007600000000, -0.0005923529412, -0.0003290196078, -0.0000300000000, +0.0002572549020, +0.0005025490196, +0.0006343137255, +0.0006043137255, +0.0004427450980, +0.0001615686275, -0.0001496078431, -0.0003350980392, -0.0002333333333, +0.0001017647059, +0.0004966666667, +0.0007839215686, +0.0008437254902, +0.0006343137255, +0.0002154901961, -0.0002035294118, -0.0004009803922, -0.0003111764706, -0.0000239215686, +0.0002692156863, +0.0004249019608, +0.0003590196078, +0.0001554901961, -0.0000778431373, -0.0002213725490, -0.0002394117647, -0.0001796078431, -0.0000658823529, +0.0000956862745, +0.0002692156863, +0.0003231372549, +0.0002452941176, +0.0001554901961, +0.0001376470588, +0.0001554901961, +0.0001076470588, -0.0000180392157, -0.0001554901961, -0.0002872549020, -0.0004249019608, -0.0005147058824, -0.0005025490196, -0.0003890196078, -0.0001915686275, +0.0000717647059, +0.0004009803922, +0.0006821568627, +0.0008137254902, +0.0007480392157, +0.0005325490196, +0.0002513725490, +0.0000180392157, -0.0001615686275, -0.0003411764706, -0.0004905882353, -0.0005445098039, -0.0005025490196, -0.0003650980392, -0.0001256862745, +0.0001974509804, +0.0004966666667, +0.0005984313725, +0.0004068627451, -0.0000180392157, -0.0005025490196, -0.0008317647059, -0.0008437254902, -0.0005564705882, -0.0001315686275, +0.0002572549020, +0.0005086274510, +0.0004966666667, +0.0002692156863, -0.0000060784314, -0.0001974509804, -0.0002333333333, -0.0001315686275, +0.0000180392157, +0.0001435294118, +0.0002154901961, +0.0002811764706, +0.0003709803922, +0.0004666666667, +0.0005205882353, +0.0005684313725, +0.0006223529412, +0.0006582352941, +0.0006462745098, +0.0005684313725, +0.0004249019608, +0.0002811764706, +0.0001615686275, +0.0000956862745, +0.0001017647059, +0.0001796078431, +0.0002633333333, +0.0002811764706, +0.0002394117647, +0.0001854901961, +0.0001435294118, +0.0001196078431, +0.0001017647059, +0.0000717647059, +0.0000239215686, -0.0000658823529, -0.0001974509804, -0.0002992156863, -0.0002872549020, -0.0001674509804, +0.0000300000000, +0.0002633333333, +0.0004488235294, +0.0004847058824, +0.0003829411765, +0.0002035294118, +0.0000060784314, -0.0001854901961, -0.0003111764706, -0.0002931372549, -0.0001196078431, +0.0001196078431, +0.0003590196078, +0.0005505882353, +0.0006701960784, +0.0006882352941, +0.0006103921569, +0.0004368627451, +0.0002154901961, -0.0000300000000, -0.0002633333333, -0.0004307843137, -0.0004547058824, -0.0002931372549, -0.0000239215686, +0.0001974509804, +0.0002633333333, +0.0002333333333, +0.0001854901961, +0.0001256862745, +0.0000060784314, -0.0001196078431, -0.0001854901961, -0.0001674509804, -0.0001315686275, -0.0001017647059, -0.0000358823529, +0.0001315686275, +0.0003770588235, +0.0006223529412, +0.0007658823529, +0.0007180392157, +0.0004129411765, -0.0000539215686, -0.0005025490196, -0.0007360784314, -0.0006821568627, -0.0003531372549, +0.0000956862745, +0.0004607843137, +0.0006282352941, +0.0006282352941, +0.0004607843137, +0.0002035294118, -0.0000358823529, -0.0001496078431, -0.0001076470588, +0.0000358823529, +0.0001854901961, +0.0002752941176, +0.0002633333333, +0.0001256862745, -0.0000898039216, -0.0002992156863, -0.0004188235294, -0.0004547058824, -0.0004427450980, -0.0003709803922, -0.0002274509804, -0.0001256862745, -0.0001435294118, -0.0001915686275, -0.0001376470588, +0.0000119607843, +0.0001915686275, +0.0002811764706, +0.0002274509804, +0.0000717647059, -0.0000419607843, -0.0001017647059, -0.0001137254902, -0.0001137254902, -0.0001076470588, -0.0001256862745, -0.0001376470588, -0.0001315686275, -0.0000717647059, +0.0000717647059, +0.0002931372549, +0.0004966666667, +0.0006043137255, +0.0005984313725, +0.0005025490196, +0.0003590196078, +0.0002154901961, +0.0001496078431, +0.0001915686275, +0.0002872549020, +0.0003531372549, +0.0003111764706, +0.0001376470588, -0.0000598039216, -0.0001974509804, -0.0002872549020, -0.0003770588235, -0.0004547058824, -0.0004727450980, -0.0003709803922, -0.0001435294118, +0.0001554901961, +0.0004607843137, +0.0007300000000, +0.0008856862745, +0.0008737254902, +0.0006941176471, +0.0004068627451, +0.0000598039216, -0.0002333333333, -0.0003829411765, -0.0003350980392, -0.0002154901961, -0.0001554901961, -0.0001674509804, -0.0001915686275, -0.0001915686275, -0.0001615686275, -0.0001137254902, -0.0000956862745, -0.0001435294118, -0.0002572549020, -0.0003829411765, -0.0004307843137, -0.0003650980392, -0.0002154901961, -0.0000717647059, +0.0000119607843, +0.0000060784314, -0.0001196078431, -0.0003111764706, -0.0004847058824, -0.0005684313725, -0.0005803921569, -0.0005386274510, -0.0004249019608, -0.0002213725490, -0.0000119607843, +0.0001196078431, +0.0001554901961, +0.0001017647059, -0.0000358823529, -0.0002452941176, -0.0004547058824, -0.0006043137255, -0.0006821568627, -0.0006462745098, -0.0005147058824, -0.0003350980392, -0.0001735294118, -0.0000419607843, +0.0000898039216, +0.0002811764706, +0.0004786274510, +0.0005564705882, +0.0004427450980, +0.0002035294118, -0.0000419607843, -0.0002452941176, -0.0003290196078, -0.0002513725490, -0.0000419607843, +0.0002213725490, +0.0004727450980, +0.0005625490196, +0.0004307843137, +0.0001076470588, -0.0002452941176, -0.0004786274510, -0.0004666666667, -0.0002572549020, +0.0000239215686, +0.0002213725490, +0.0002274509804, +0.0000539215686, -0.0001076470588, -0.0001376470588, +0.0000180392157, +0.0002394117647, +0.0003890196078, +0.0003590196078, +0.0000956862745, -0.0003470588235, -0.0007480392157, -0.0008856862745, -0.0007001960784, -0.0003290196078, +0.0000358823529, +0.0002633333333, +0.0003111764706, +0.0001615686275, -0.0000956862745, -0.0003531372549, -0.0005025490196, -0.0005147058824, -0.0004009803922, -0.0002692156863, -0.0001915686275, -0.0001554901961, -0.0001256862745, -0.0000778431373, +0.0000119607843, +0.0001256862745, +0.0001615686275, +0.0000837254902, -0.0000778431373, -0.0002452941176, -0.0002931372549, -0.0001554901961, +0.0000778431373, +0.0003709803922, +0.0006162745098, +0.0007180392157, +0.0005864705882, +0.0003050980392, +0.0000300000000, -0.0000837254902, -0.0000300000000, +0.0001796078431, +0.0004666666667, +0.0006821568627, +0.0007121568627, +0.0005864705882, +0.0003350980392, +0.0000239215686, -0.0002274509804, -0.0002513725490, -0.0000239215686, +0.0003111764706, +0.0006223529412, +0.0008198039216, +0.0008317647059, +0.0006462745098, +0.0003231372549, +0.0000000000000, -0.0002035294118, -0.0002811764706, -0.0002572549020, -0.0001854901961, -0.0001017647059, -0.0000358823529, -0.0000119607843, -0.0000539215686, -0.0001315686275, -0.0002035294118, -0.0002452941176, -0.0002274509804, -0.0001376470588, -0.0000119607843, +0.0001315686275, +0.0002633333333, +0.0003350980392, +0.0002872549020, +0.0001435294118, -0.0000300000000, -0.0001615686275, -0.0001854901961, -0.0001017647059, +0.0000300000000, +0.0001735294118, +0.0002633333333, +0.0002452941176, +0.0001554901961, +0.0000300000000, -0.0001196078431, -0.0002811764706, -0.0003411764706, -0.0002035294118, +0.0001315686275, +0.0005984313725, +0.0010172549020, +0.0012027450980, +0.0010650980392, +0.0006343137255, +0.0000419607843, -0.0005266666667, -0.0008737254902, -0.0009154901961, -0.0006760784314, -0.0002811764706, +0.0001615686275, +0.0005205882353, +0.0006701960784, +0.0005445098039, +0.0002154901961, -0.0001315686275, -0.0002992156863, -0.0002633333333, -0.0001076470588, +0.0000598039216, +0.0002333333333, +0.0003829411765, +0.0005205882353, +0.0005803921569, +0.0005086274510, +0.0002811764706, -0.0000300000000, -0.0003470588235, -0.0005625490196, -0.0005984313725, -0.0004666666667, -0.0002633333333, -0.0001137254902, -0.0000956862745, -0.0001854901961, -0.0002872549020, -0.0003231372549, -0.0002633333333, -0.0001376470588, +0.0000119607843, +0.0001435294118, +0.0002035294118, +0.0001854901961, +0.0001196078431, +0.0000180392157, -0.0000539215686, -0.0001017647059, -0.0001435294118, -0.0002213725490, -0.0003231372549, -0.0004786274510, -0.0006103921569, -0.0006162745098, -0.0003949019608, +0.0000000000000, +0.0004427450980, +0.0007658823529, +0.0008617647059, +0.0006882352941, +0.0003411764706, -0.0000478431373, -0.0003470588235, -0.0004368627451, -0.0002931372549, -0.0000239215686, +0.0001974509804, +0.0002572549020, +0.0001256862745, -0.0001137254902, -0.0003890196078, -0.0005564705882, -0.0005025490196, -0.0002154901961, +0.0001915686275, +0.0005803921569, +0.0007658823529, +0.0006882352941, +0.0004129411765, +0.0000837254902, -0.0001735294118, -0.0002872549020, -0.0002931372549, -0.0002274509804, -0.0001554901961, -0.0000956862745, -0.0000478431373, +0.0000239215686, +0.0000898039216, +0.0001256862745, +0.0000898039216, -0.0000060784314, -0.0001256862745, -0.0001915686275, -0.0001735294118, -0.0000837254902, +0.0000300000000, +0.0001615686275, +0.0002752941176, +0.0002931372549, +0.0001496078431, -0.0001554901961, -0.0005445098039, -0.0008256862745, -0.0008317647059, -0.0005684313725, -0.0001496078431, +0.0002394117647, +0.0004905882353, +0.0005266666667, +0.0003949019608, +0.0001796078431, -0.0000060784314, -0.0001256862745, -0.0001554901961, -0.0001554901961, -0.0001796078431, -0.0002452941176, -0.0003290196078, -0.0004249019608, -0.0005266666667, -0.0005984313725, -0.0005505882353, -0.0003829411765, -0.0001915686275, -0.0000778431373, -0.0000060784314, +0.0000180392157, +0.0000060784314, -0.0000358823529, -0.0001137254902, -0.0002333333333, -0.0003590196078, -0.0004368627451, -0.0004188235294, -0.0002872549020, -0.0001137254902, +0.0000419607843, +0.0001137254902, +0.0000717647059, -0.0000658823529, -0.0002572549020, -0.0004129411765, -0.0004488235294, -0.0003770588235, -0.0002333333333, -0.0000658823529, +0.0001017647059, +0.0002452941176, +0.0003170588235, +0.0002394117647, +0.0000539215686, -0.0001315686275, -0.0002035294118, -0.0001376470588, -0.0000119607843, +0.0000778431373, +0.0001674509804, +0.0002513725490, +0.0003231372549, +0.0003470588235, +0.0003411764706, +0.0002992156863, +0.0002094117647, +0.0000598039216, -0.0001196078431, -0.0002633333333, -0.0002992156863, -0.0002394117647, -0.0001735294118, -0.0001196078431, -0.0000898039216, -0.0000598039216, -0.0000239215686, +0.0000478431373, +0.0001496078431, +0.0002692156863, +0.0003470588235, +0.0003231372549, +0.0001435294118, -0.0000956862745, -0.0003050980392, -0.0004188235294, -0.0004188235294, -0.0003290196078, -0.0002213725490, -0.0001376470588, -0.0001017647059, -0.0000898039216, -0.0001256862745, -0.0002154901961, -0.0003350980392, -0.0004129411765, -0.0004488235294, -0.0004188235294, -0.0003531372549, -0.0002633333333, -0.0000898039216, +0.0001256862745, +0.0003290196078, +0.0004068627451, +0.0003170588235, +0.0000598039216, -0.0002633333333, -0.0005325490196, -0.0006282352941, -0.0005564705882, -0.0003709803922, -0.0001796078431, +0.0000000000000, +0.0001615686275, +0.0003350980392, +0.0004786274510, +0.0005386274510, +0.0004727450980, +0.0003231372549, +0.0001076470588, -0.0000837254902, -0.0002274509804, -0.0002752941176, -0.0002872549020, -0.0002931372549, -0.0002811764706, -0.0001735294118, +0.0000419607843, +0.0003170588235, +0.0005445098039, +0.0006462745098, +0.0006103921569, +0.0004368627451, +0.0001796078431, -0.0000478431373, -0.0001435294118, -0.0000778431373, +0.0001137254902, +0.0003411764706, +0.0005445098039, +0.0006462745098, +0.0006521568627, +0.0005505882353, +0.0004009803922, +0.0002513725490, +0.0001315686275, +0.0000358823529, -0.0000239215686, -0.0000658823529, -0.0000717647059, -0.0000717647059, -0.0000478431373, -0.0000358823529, +0.0000000000000, +0.0000837254902, +0.0002274509804, +0.0003829411765, +0.0005086274510, +0.0005505882353, +0.0004786274510, +0.0002872549020, +0.0000000000000, -0.0003231372549, -0.0006043137255, -0.0007778431373, -0.0008256862745, -0.0007121568627, -0.0004666666667, -0.0001554901961, +0.0000956862745, +0.0002213725490, +0.0002154901961, +0.0001496078431, +0.0000898039216, +0.0000539215686, +0.0000000000000, -0.0000300000000, -0.0000060784314, +0.0000956862745, +0.0002154901961, +0.0002752941176, +0.0002274509804, +0.0000956862745, -0.0000358823529, -0.0000898039216, -0.0000837254902, -0.0000358823529, -0.0000239215686, -0.0000478431373, -0.0000539215686, +0.0000180392157, +0.0001735294118, +0.0003470588235, +0.0004607843137, +0.0004847058824, +0.0004068627451, +0.0002333333333, +0.0000358823529, -0.0001554901961, -0.0002872549020, -0.0003111764706, -0.0001974509804, +0.0000119607843, +0.0002452941176, +0.0003949019608, +0.0004068627451, +0.0002513725490, +0.0000180392157, -0.0001854901961, -0.0002513725490, -0.0001674509804, +0.0000419607843, +0.0002752941176, +0.0004188235294, +0.0003590196078, +0.0001615686275, -0.0000956862745, -0.0003170588235, -0.0004188235294, -0.0003411764706, -0.0001376470588, +0.0001076470588, +0.0003290196078, +0.0004666666667, +0.0004786274510, +0.0004068627451, +0.0003290196078, +0.0002752941176, +0.0002394117647, +0.0001796078431, +0.0000478431373, -0.0001315686275, -0.0002692156863, -0.0002692156863, -0.0000956862745, +0.0001735294118, +0.0004488235294, +0.0005864705882, +0.0005266666667, +0.0002692156863, -0.0000300000000, -0.0002931372549, -0.0004068627451, -0.0003829411765, -0.0002452941176, -0.0000300000000, +0.0001854901961, +0.0002992156863, +0.0002572549020, +0.0001376470588, +0.0000539215686, +0.0000419607843, +0.0000778431373, +0.0001435294118, +0.0002333333333, +0.0002931372549, +0.0002931372549, +0.0002213725490, +0.0000658823529, -0.0001376470588, -0.0003231372549, -0.0003890196078, -0.0003350980392, -0.0001796078431, +0.0000119607843, +0.0002154901961, +0.0003231372549, +0.0003470588235, +0.0002992156863, +0.0002274509804, +0.0001315686275, +0.0000358823529, -0.0000598039216, -0.0001674509804, -0.0003111764706, -0.0004009803922, -0.0003650980392, -0.0001735294118, +0.0000658823529, +0.0002992156863, +0.0004427450980, +0.0004666666667, +0.0003111764706, +0.0000358823529, -0.0002452941176, -0.0004249019608, -0.0004427450980, -0.0002872549020, -0.0000419607843, +0.0001554901961, +0.0002333333333, +0.0001915686275, +0.0000898039216, -0.0000119607843, -0.0000419607843, -0.0000060784314, +0.0000539215686, +0.0000837254902, +0.0000300000000, -0.0000956862745, -0.0002094117647, -0.0002931372549, -0.0003231372549, -0.0003050980392, -0.0001974509804, -0.0000358823529, +0.0001496078431, +0.0002811764706, +0.0003290196078, +0.0002931372549, +0.0001974509804, +0.0000419607843, -0.0001196078431, -0.0002752941176, -0.0003770588235, -0.0004427450980, -0.0004188235294, -0.0002931372549, -0.0000837254902, +0.0001076470588, +0.0002452941176, +0.0003231372549, +0.0003350980392, +0.0002752941176, +0.0001496078431, +0.0000239215686, -0.0000837254902, -0.0001496078431, -0.0001796078431, -0.0001615686275, -0.0001256862745, -0.0000658823529, +0.0000000000000, +0.0001076470588, +0.0002154901961, +0.0002931372549, +0.0002992156863, +0.0002394117647, +0.0001076470588, -0.0000180392157, -0.0001137254902, -0.0001435294118, -0.0001256862745, -0.0000837254902, -0.0000658823529, -0.0000419607843, -0.0000060784314, +0.0000598039216, +0.0001615686275, +0.0002872549020, +0.0003890196078, +0.0004188235294, +0.0003470588235, +0.0001796078431, -0.0000180392157, -0.0001735294118, -0.0001854901961, -0.0000717647059, +0.0000837254902, +0.0002094117647, +0.0002931372549, +0.0003231372549, +0.0002811764706, +0.0001674509804, +0.0000239215686, -0.0001076470588, -0.0001974509804, -0.0002513725490, -0.0002394117647, -0.0001735294118, -0.0000778431373, -0.0000180392157, +0.0000119607843, +0.0000180392157, +0.0000060784314, -0.0000717647059, -0.0002094117647, -0.0003650980392, -0.0004905882353, -0.0005325490196, -0.0004847058824, -0.0003770588235, -0.0002154901961, -0.0000419607843, +0.0000658823529, +0.0000717647059, +0.0000000000000, -0.0000898039216, -0.0001435294118, -0.0001137254902, -0.0000419607843, +0.0000180392157, +0.0000000000000, -0.0001017647059, -0.0002752941176, -0.0004188235294, -0.0004786274510, -0.0004129411765, -0.0002274509804, +0.0000300000000, +0.0002333333333, +0.0003050980392, +0.0002452941176, +0.0001315686275, +0.0000119607843, -0.0000539215686, -0.0000956862745, -0.0001076470588, -0.0001196078431, -0.0001256862745, -0.0001076470588, -0.0000419607843, +0.0000419607843, +0.0001315686275, +0.0002094117647, +0.0002333333333, +0.0001615686275, +0.0000060784314, -0.0001854901961, -0.0003411764706, -0.0003590196078, -0.0002692156863, -0.0001196078431, +0.0000180392157, +0.0001496078431, +0.0002333333333, +0.0002931372549, +0.0003411764706, +0.0003650980392, +0.0003231372549, +0.0002213725490, +0.0000478431373, -0.0001137254902, -0.0002452941176, -0.0003050980392, -0.0003231372549, -0.0002931372549, -0.0002035294118, -0.0000658823529, +0.0000658823529, +0.0001315686275, +0.0001137254902, +0.0000119607843, -0.0000956862745, -0.0001854901961, -0.0002154901961, -0.0002094117647, -0.0001796078431, -0.0001554901961, -0.0001376470588, -0.0001137254902, -0.0000778431373, -0.0000478431373, -0.0000180392157, -0.0000119607843, -0.0000239215686, -0.0000539215686, -0.0000717647059, -0.0000898039216, -0.0001076470588, -0.0001376470588, -0.0001735294118, -0.0002154901961, -0.0002154901961, -0.0001735294118, -0.0001017647059, -0.0000598039216, -0.0000778431373, -0.0001256862745, -0.0001496078431, -0.0001315686275, -0.0000837254902, -0.0000180392157, +0.0000060784314, -0.0000060784314, -0.0000419607843, -0.0000717647059, -0.0000778431373, -0.0000119607843, +0.0000837254902, +0.0002094117647, +0.0003350980392, +0.0004249019608, +0.0004368627451, +0.0003890196078, +0.0003231372549, +0.0002692156863, +0.0001974509804, +0.0001137254902, -0.0000060784314, -0.0001315686275, -0.0002094117647, -0.0001915686275, -0.0000837254902, +0.0000717647059, +0.0002394117647, +0.0003949019608, +0.0004905882353, +0.0004905882353, +0.0004068627451, +0.0002811764706, +0.0001796078431, +0.0001256862745, +0.0001196078431, +0.0001076470588, +0.0000658823529, -0.0000358823529, -0.0001496078431, -0.0001915686275, -0.0001196078431, +0.0000239215686, +0.0001796078431, +0.0002692156863, +0.0002752941176, +0.0001735294118, +0.0000180392157, -0.0001435294118, -0.0002811764706, -0.0003650980392, -0.0003411764706, -0.0002035294118, -0.0000180392157, +0.0001435294118, +0.0002274509804, +0.0002094117647, +0.0001076470588, +0.0000119607843, -0.0000358823529, -0.0000300000000, +0.0000000000000, +0.0000658823529, +0.0001315686275, +0.0002035294118, +0.0002154901961, +0.0001496078431, +0.0000119607843, -0.0000956862745, -0.0001615686275, -0.0001496078431, -0.0000778431373, +0.0000239215686, +0.0000898039216, +0.0000837254902, +0.0000000000000, -0.0000956862745, -0.0001615686275, -0.0001674509804, -0.0001196078431, -0.0000180392157, +0.0001196078431, +0.0002692156863, +0.0003709803922, +0.0003829411765, +0.0003411764706, +0.0002811764706, +0.0002394117647, +0.0001674509804, +0.0000180392157, -0.0001615686275, -0.0003170588235, -0.0004129411765, -0.0004249019608, -0.0003411764706, -0.0001735294118, +0.0000060784314, +0.0001496078431, +0.0001915686275, +0.0001256862745, -0.0000419607843, -0.0002094117647, -0.0003050980392, -0.0002752941176, -0.0001915686275, -0.0001196078431, -0.0001435294118, -0.0002394117647, -0.0003709803922, -0.0004307843137, -0.0003709803922, -0.0002035294118, -0.0000060784314, +0.0001554901961, +0.0002333333333, +0.0002035294118, +0.0001137254902, +0.0000180392157, +0.0000000000000, +0.0000060784314, +0.0000300000000, +0.0000180392157, +0.0000000000000, -0.0000239215686, +0.0000060784314, +0.0000898039216, +0.0002154901961, +0.0002692156863, +0.0002274509804, +0.0000778431373, -0.0000778431373, -0.0002035294118, -0.0002333333333, -0.0001735294118, -0.0000239215686, +0.0001615686275, +0.0003411764706, +0.0004368627451, +0.0003890196078, +0.0002154901961, +0.0000300000000, -0.0000717647059, -0.0000419607843, +0.0000837254902, +0.0002213725490, +0.0002811764706, +0.0002333333333, +0.0000956862745, -0.0000598039216, -0.0001735294118, -0.0002452941176, -0.0002513725490, -0.0001974509804, -0.0000898039216, -0.0000119607843, +0.0000358823529, +0.0000598039216, +0.0000837254902, +0.0000658823529, +0.0000119607843, -0.0000837254902, -0.0001674509804, -0.0002035294118, -0.0001796078431, -0.0001137254902, -0.0000119607843, +0.0000478431373, +0.0000419607843, -0.0000119607843, -0.0000837254902, -0.0001315686275, -0.0001554901961, -0.0001554901961, -0.0001196078431, -0.0000358823529, +0.0000478431373, +0.0001076470588, +0.0000898039216, +0.0000300000000, -0.0000300000000, -0.0000658823529, -0.0000778431373, -0.0000778431373, -0.0001196078431, -0.0001674509804, -0.0001974509804, -0.0001735294118, -0.0001256862745, -0.0000239215686, +0.0000598039216, +0.0001315686275, +0.0001496078431, +0.0001256862745, +0.0000419607843, -0.0000598039216, -0.0001735294118, -0.0002572549020, -0.0002811764706, -0.0002094117647, -0.0000837254902, +0.0000180392157, +0.0000539215686, +0.0000119607843, -0.0000658823529, -0.0001735294118, -0.0002931372549, -0.0003770588235, -0.0003290196078, -0.0001674509804, +0.0000539215686, +0.0002213725490, +0.0002811764706, +0.0002154901961, +0.0000658823529, -0.0001076470588, -0.0002333333333, -0.0002513725490, -0.0001376470588, +0.0000300000000, +0.0001854901961, +0.0002213725490, +0.0001137254902, -0.0001017647059, -0.0003350980392, -0.0004666666667, -0.0004249019608, -0.0002274509804, +0.0000358823529, +0.0002633333333, +0.0003650980392, +0.0003290196078, +0.0001615686275, -0.0000239215686, -0.0001496078431, -0.0001496078431, -0.0000658823529, +0.0000300000000, +0.0000837254902, +0.0000898039216, +0.0000539215686, +0.0000478431373, +0.0000539215686, +0.0000717647059, +0.0000837254902, +0.0001076470588, +0.0001017647059, +0.0000539215686, +0.0000000000000, -0.0000119607843, -0.0000180392157, -0.0000239215686, +0.0000000000000, +0.0000239215686, +0.0000060784314, -0.0000717647059, -0.0001854901961, -0.0002992156863, -0.0003650980392, -0.0003650980392, -0.0002992156863, -0.0001735294118, -0.0000300000000, +0.0000598039216, +0.0001017647059, +0.0000898039216, +0.0000658823529, +0.0000419607843, +0.0000478431373, +0.0000539215686, +0.0000478431373, +0.0000000000000, -0.0000358823529, -0.0000419607843, +0.0000060784314, +0.0000598039216, +0.0000778431373, +0.0000239215686, -0.0000658823529, -0.0001615686275, -0.0002035294118, -0.0001674509804, -0.0000300000000, +0.0001554901961, +0.0003411764706, +0.0004547058824, +0.0004666666667, +0.0003890196078, +0.0002452941176, +0.0001076470588, +0.0000000000000, -0.0000358823529, -0.0000300000000, +0.0000180392157, +0.0000478431373, +0.0000419607843, +0.0000000000000, -0.0000419607843, -0.0000598039216, -0.0000180392157, +0.0000598039216, +0.0001496078431, +0.0001915686275, +0.0001854901961, +0.0001496078431, +0.0001196078431, +0.0000956862745, +0.0000598039216, +0.0000000000000, -0.0000837254902, -0.0002154901961, -0.0003650980392, -0.0004607843137, -0.0004727450980, -0.0003650980392, -0.0001915686275, -0.0000119607843, +0.0000956862745, +0.0001137254902, +0.0000358823529, -0.0000598039216, -0.0001435294118, -0.0001315686275, -0.0000419607843, +0.0000778431373, +0.0001615686275, +0.0001435294118, +0.0000119607843, -0.0001496078431, -0.0002513725490, -0.0002452941176, -0.0001974509804, -0.0001554901961, -0.0001435294118, -0.0001615686275, -0.0001915686275, -0.0001854901961, -0.0001256862745, +0.0000000000000, +0.0001435294118, +0.0002633333333, +0.0003170588235, +0.0003170588235, +0.0002931372549, +0.0002333333333, +0.0001435294118, +0.0000478431373, +0.0000000000000, -0.0000180392157, +0.0000119607843, +0.0000717647059, +0.0001615686275, +0.0002274509804, +0.0002452941176, +0.0002094117647, +0.0001615686275, +0.0001256862745, +0.0001137254902, +0.0001137254902, +0.0001554901961, +0.0002513725490, +0.0003531372549, +0.0004129411765, +0.0004188235294, +0.0004068627451, +0.0003709803922, +0.0003170588235, +0.0002333333333, +0.0001435294118, +0.0000358823529, -0.0000358823529, -0.0000898039216, -0.0000778431373, -0.0000239215686, +0.0000658823529, +0.0001674509804, +0.0002452941176, +0.0002633333333, +0.0002513725490, +0.0002094117647, +0.0001796078431, +0.0001554901961, +0.0001554901961, +0.0001796078431, +0.0002154901961, +0.0002213725490, +0.0001796078431, +0.0001017647059, +0.0000180392157, -0.0000300000000, -0.0000358823529, +0.0000239215686, +0.0001196078431, +0.0001974509804, +0.0002154901961, +0.0001735294118, +0.0000778431373, -0.0000419607843, -0.0001496078431, -0.0002094117647, -0.0002094117647, -0.0001615686275, -0.0000898039216, -0.0000060784314, +0.0000358823529, +0.0000539215686, +0.0000300000000, +0.0000000000000, -0.0000478431373, -0.0000717647059, -0.0000478431373, +0.0000239215686, +0.0001137254902, +0.0001915686275, +0.0002274509804, +0.0002154901961, +0.0001854901961, +0.0001496078431, +0.0001315686275, +0.0001017647059, +0.0000539215686, +0.0000000000000, -0.0000119607843, +0.0000300000000, +0.0001256862745, +0.0002274509804, +0.0003111764706, +0.0003350980392, +0.0003050980392, +0.0002035294118, +0.0000956862745, +0.0000300000000, +0.0000478431373, +0.0000956862745, +0.0001137254902, +0.0000778431373, -0.0000119607843, -0.0001435294118, -0.0002394117647, -0.0002394117647, -0.0001256862745, +0.0000658823529, +0.0002572549020, +0.0003829411765, +0.0003890196078, +0.0002752941176, +0.0000837254902, -0.0000898039216, -0.0001674509804, -0.0000837254902, +0.0001017647059, +0.0002992156863, +0.0003709803922, +0.0002752941176, +0.0000658823529, -0.0001196078431, -0.0002274509804, -0.0001974509804, -0.0000598039216, +0.0001315686275, +0.0002872549020, +0.0003411764706, +0.0002692156863, +0.0000898039216, -0.0001076470588, -0.0002513725490, -0.0002572549020, -0.0001256862745, +0.0000539215686, +0.0001674509804, +0.0001435294118, +0.0000000000000, -0.0001854901961, -0.0003170588235, -0.0003411764706, -0.0002752941176, -0.0001315686275, +0.0000239215686, +0.0001376470588, +0.0001315686275, +0.0000300000000, -0.0001256862745, -0.0002333333333, -0.0002513725490, -0.0001796078431, -0.0000598039216, +0.0000658823529, +0.0001674509804, +0.0002333333333, +0.0002692156863, +0.0002992156863, +0.0002931372549, +0.0002394117647, +0.0001315686275, +0.0000000000000, -0.0001076470588, -0.0001974509804, -0.0002274509804, -0.0002035294118, -0.0001076470588, +0.0000000000000, +0.0000956862745, +0.0001256862745, +0.0001076470588, +0.0000119607843, -0.0000898039216, -0.0001435294118, -0.0001137254902, -0.0000419607843, +0.0000000000000, +0.0000000000000, -0.0000300000000, -0.0000837254902, -0.0001554901961, -0.0002274509804, -0.0002633333333, -0.0002513725490, -0.0002333333333, -0.0002274509804, -0.0002213725490, -0.0001974509804, -0.0001615686275, -0.0001137254902, -0.0000778431373, -0.0000539215686, -0.0000658823529, -0.0001137254902, -0.0001974509804, -0.0002692156863, -0.0003170588235, -0.0002931372549, -0.0002274509804, -0.0001376470588, -0.0000956862745, -0.0000898039216, -0.0001196078431, -0.0001137254902, -0.0000837254902, -0.0000300000000, +0.0000300000000, +0.0001137254902, +0.0001796078431, +0.0001915686275, +0.0001376470588, +0.0000419607843, -0.0000598039216, -0.0001376470588, -0.0001974509804, -0.0002274509804, -0.0002274509804, -0.0001915686275, -0.0001256862745, -0.0000717647059, -0.0000239215686, +0.0000000000000, +0.0000060784314, -0.0000119607843, -0.0000239215686, -0.0000119607843, +0.0000419607843, +0.0001076470588, +0.0001554901961, +0.0001435294118, +0.0000598039216, -0.0001076470588, -0.0003050980392, -0.0004307843137, -0.0004068627451, -0.0002513725490, -0.0000419607843, +0.0001496078431, +0.0002633333333, +0.0002692156863, +0.0001796078431, +0.0000419607843, -0.0001076470588, -0.0002452941176, -0.0003650980392, -0.0004427450980, -0.0004786274510, -0.0004427450980, -0.0003411764706, -0.0001974509804, -0.0000778431373, -0.0000060784314, +0.0000000000000, -0.0000180392157, -0.0000539215686, -0.0000837254902, -0.0000956862745, -0.0000658823529, -0.0000060784314, +0.0000539215686, +0.0000778431373, +0.0000539215686, +0.0000000000000, -0.0000658823529, -0.0001435294118, -0.0001974509804, -0.0002094117647, -0.0001915686275, -0.0001435294118, -0.0000837254902, +0.0000000000000, +0.0000837254902, +0.0001496078431, +0.0001496078431, +0.0000598039216, -0.0000956862745, -0.0002572549020, -0.0003770588235, -0.0003890196078, -0.0002931372549, -0.0001076470588, +0.0000598039216, +0.0001615686275, +0.0001674509804, +0.0000898039216, +0.0000060784314, -0.0000060784314, +0.0000478431373, +0.0001196078431, +0.0001674509804, +0.0001735294118, +0.0001435294118, +0.0001017647059, +0.0000478431373, +0.0000000000000, -0.0000539215686, -0.0001137254902, -0.0001615686275, -0.0001674509804, -0.0001076470588, +0.0000000000000, +0.0001435294118, +0.0002752941176, +0.0003650980392, +0.0003770588235, +0.0002992156863, +0.0001315686275, -0.0000478431373, -0.0001674509804, -0.0001796078431, -0.0001196078431, -0.0000598039216, -0.0000300000000, -0.0000358823529, -0.0000598039216, -0.0000419607843, +0.0000358823529, +0.0001315686275, +0.0001854901961, +0.0001435294118, +0.0000239215686, -0.0001196078431, -0.0002452941176, -0.0003111764706, -0.0002992156863, -0.0002154901961, -0.0000717647059, +0.0000598039216, +0.0001496078431, +0.0001615686275, +0.0001017647059, +0.0000119607843, -0.0000658823529, -0.0001256862745, -0.0001674509804, -0.0001974509804, -0.0001854901961, -0.0001076470588, +0.0000180392157, +0.0001376470588, +0.0002274509804, +0.0002811764706, +0.0002752941176, +0.0002094117647, +0.0001017647059, -0.0000180392157, -0.0001376470588, -0.0002154901961, -0.0002154901961, -0.0001196078431, +0.0000060784314, +0.0001017647059, +0.0001256862745, +0.0000898039216, +0.0000239215686, -0.0000239215686, -0.0000478431373, -0.0000239215686, +0.0000119607843, +0.0000300000000, +0.0000119607843, -0.0000180392157, -0.0000478431373, -0.0000717647059, -0.0000717647059, -0.0000539215686, -0.0000180392157, +0.0000000000000, +0.0000060784314, +0.0000060784314, -0.0000060784314, -0.0000598039216, -0.0001315686275, -0.0001854901961, -0.0001854901961, -0.0001256862745, -0.0000358823529, +0.0000239215686, +0.0000598039216, +0.0000778431373, +0.0000658823529, +0.0000598039216, +0.0000598039216, +0.0000837254902, +0.0000837254902, +0.0000539215686, -0.0000119607843, -0.0000898039216, -0.0001256862745, -0.0000717647059, +0.0000598039216, +0.0002333333333, +0.0003709803922, +0.0004188235294, +0.0003470588235, +0.0001796078431, -0.0000239215686, -0.0002035294118, -0.0002872549020, -0.0002513725490, -0.0001315686275, +0.0000239215686, +0.0001315686275, +0.0001735294118, +0.0001554901961, +0.0001137254902, +0.0000778431373, +0.0000598039216, +0.0000300000000, -0.0000358823529, -0.0001196078431, -0.0001796078431, -0.0001674509804, -0.0000898039216, +0.0000300000000, +0.0001554901961, +0.0002333333333, +0.0002333333333, +0.0001854901961, +0.0001196078431, +0.0000778431373, +0.0000658823529, +0.0000898039216, +0.0001315686275, +0.0001674509804, +0.0001554901961, +0.0000956862745, +0.0000060784314, -0.0000898039216, -0.0001435294118, -0.0001137254902, +0.0000000000000, +0.0001615686275, +0.0003111764706, +0.0003949019608, +0.0003829411765, +0.0002811764706, +0.0001376470588, +0.0000000000000, -0.0000837254902, -0.0000956862745, -0.0000658823529, -0.0000419607843, -0.0000358823529, -0.0000478431373, -0.0000478431373, -0.0000300000000, +0.0000119607843, +0.0000717647059, +0.0001376470588, +0.0001854901961, +0.0001974509804, +0.0001674509804, +0.0001017647059, +0.0000000000000, -0.0000898039216, -0.0001435294118, -0.0001554901961, -0.0001196078431, -0.0000717647059, -0.0000239215686, +0.0000180392157, +0.0000358823529, +0.0000358823529, +0.0000300000000, +0.0000180392157, +0.0000119607843, -0.0000180392157, -0.0000717647059, -0.0001137254902, -0.0001196078431, -0.0000898039216, -0.0000180392157, +0.0000658823529, +0.0001615686275, +0.0002094117647, +0.0001915686275, +0.0000898039216, -0.0000478431373, -0.0001735294118, -0.0002274509804, -0.0002154901961, -0.0001796078431, -0.0001615686275, -0.0001735294118, -0.0002035294118, -0.0002154901961, -0.0001435294118, -0.0000060784314, +0.0001674509804, +0.0002992156863, +0.0003531372549, +0.0002752941176, +0.0001137254902, -0.0000898039216, -0.0002452941176, -0.0003111764706, -0.0002692156863, -0.0001554901961, +0.0000060784314, +0.0001496078431, +0.0002274509804, +0.0001974509804, +0.0000898039216, -0.0000478431373, -0.0001615686275, -0.0002213725490, -0.0002094117647, -0.0001376470588, -0.0000239215686, +0.0000778431373, +0.0001615686275, +0.0001974509804, +0.0001796078431, +0.0001256862745, +0.0000598039216, +0.0000119607843, -0.0000239215686, -0.0000658823529, -0.0001256862745, -0.0001735294118, -0.0001735294118, -0.0000956862745, +0.0000180392157, +0.0001315686275, +0.0001915686275, +0.0001974509804, +0.0001554901961, +0.0001076470588, +0.0000778431373, +0.0000778431373, +0.0000837254902, +0.0000717647059, +0.0000239215686, -0.0000419607843, -0.0001376470588, -0.0002035294118, -0.0002094117647, -0.0001435294118, -0.0000358823529, +0.0000658823529, +0.0001435294118, +0.0001674509804, +0.0001315686275, +0.0000478431373, -0.0000478431373, -0.0001196078431, -0.0001196078431, -0.0000539215686, +0.0000539215686, +0.0001435294118, +0.0001735294118, +0.0001315686275, +0.0000598039216, +0.0000000000000, -0.0000180392157, -0.0000119607843, +0.0000000000000, +0.0000180392157, +0.0000478431373, +0.0000778431373, +0.0001137254902, +0.0001376470588, +0.0001496078431, +0.0001496078431, +0.0001076470588, +0.0000419607843, -0.0000239215686, -0.0000956862745, -0.0001735294118, -0.0002274509804, -0.0002274509804, -0.0001615686275, -0.0000778431373, -0.0000239215686, -0.0000119607843, -0.0000119607843, -0.0000180392157, -0.0000119607843, +0.0000060784314, +0.0000478431373, +0.0001017647059, +0.0001435294118, +0.0001554901961, +0.0001196078431, +0.0000419607843, -0.0000300000000, -0.0000658823529, -0.0000478431373, +0.0000000000000, +0.0000658823529, +0.0001256862745, +0.0001554901961, +0.0001554901961, +0.0001196078431, +0.0000539215686, +0.0000000000000, -0.0000239215686, -0.0000060784314, +0.0000180392157, +0.0000358823529, +0.0000358823529, +0.0000300000000, +0.0000478431373, +0.0001017647059, +0.0001915686275, +0.0002572549020, +0.0002633333333, +0.0001854901961, +0.0000598039216, -0.0000478431373, -0.0001256862745, -0.0001554901961, -0.0001554901961, -0.0001315686275, -0.0000898039216, -0.0000539215686, -0.0000300000000, -0.0000300000000, -0.0000478431373, -0.0000837254902, -0.0001076470588, -0.0000956862745, -0.0000598039216, -0.0000358823529, -0.0000419607843, -0.0000837254902, -0.0001256862745, -0.0001376470588, -0.0001017647059, -0.0000358823529, +0.0000419607843, +0.0001137254902, +0.0001674509804, +0.0001735294118, +0.0001376470588, +0.0000898039216, +0.0000539215686, +0.0000300000000, +0.0000180392157, +0.0000119607843, +0.0000180392157, +0.0000358823529, +0.0000778431373, +0.0001496078431, +0.0002452941176, +0.0003350980392, +0.0003709803922, +0.0003231372549, +0.0001735294118, +0.0000000000000, -0.0001554901961, -0.0002035294118, -0.0001256862745, +0.0000478431373, +0.0002633333333, +0.0004188235294, +0.0004188235294, +0.0002692156863, +0.0000300000000, -0.0001854901961, -0.0002931372549, -0.0002692156863, -0.0001496078431, -0.0000060784314, +0.0000956862745, +0.0001196078431, +0.0000717647059, -0.0000060784314, -0.0000658823529, -0.0000717647059, -0.0000358823529, +0.0000060784314, +0.0000598039216, +0.0000717647059, +0.0000419607843, -0.0000300000000, -0.0000956862745, -0.0001315686275, -0.0001137254902, -0.0000658823529, -0.0000180392157, +0.0000239215686, +0.0000658823529, +0.0001017647059, +0.0001137254902, +0.0000898039216, +0.0000300000000, -0.0000358823529, -0.0001137254902, -0.0001435294118, -0.0001076470588, -0.0000060784314, +0.0001076470588, +0.0001915686275, +0.0001915686275, +0.0001137254902, -0.0000119607843, -0.0001376470588, -0.0002213725490, -0.0002154901961, -0.0001256862745, +0.0000000000000, +0.0001196078431, +0.0001915686275, +0.0001974509804, +0.0001615686275, +0.0001196078431, +0.0000956862745, +0.0001137254902, +0.0001615686275, +0.0002035294118, +0.0002035294118, +0.0001674509804, +0.0001076470588, +0.0000358823529, -0.0000239215686, -0.0000539215686, -0.0000419607843, +0.0000060784314, +0.0000539215686, +0.0000717647059, +0.0000539215686, +0.0000300000000, +0.0000239215686, +0.0000419607843, +0.0000539215686, +0.0000717647059, +0.0000717647059, +0.0000598039216, +0.0000239215686, +0.0000000000000, -0.0000060784314, +0.0000239215686, +0.0000717647059, +0.0001137254902, +0.0001196078431, +0.0001017647059, +0.0000658823529, +0.0000239215686, +0.0000060784314, +0.0000119607843, +0.0000300000000, +0.0000419607843, +0.0000358823529, +0.0000060784314, -0.0000419607843, -0.0001196078431, -0.0001854901961, -0.0002154901961, -0.0001854901961, -0.0001076470588, +0.0000060784314, +0.0001256862745, +0.0002154901961, +0.0002452941176, +0.0002213725490, +0.0001435294118, +0.0000419607843, -0.0000539215686, -0.0001137254902, -0.0001196078431, -0.0000898039216, -0.0000300000000, +0.0000300000000, +0.0000778431373, +0.0001076470588, +0.0001196078431, +0.0001076470588, +0.0000717647059, +0.0000119607843, -0.0000300000000, -0.0000778431373, -0.0001076470588, -0.0001256862745, -0.0001196078431, -0.0000778431373, -0.0000060784314, +0.0000419607843, +0.0000658823529, +0.0000358823529, -0.0000239215686, -0.0000898039216, -0.0001256862745, -0.0001076470588, -0.0000419607843, +0.0000419607843, +0.0001076470588, +0.0001376470588, +0.0001256862745, +0.0000898039216, +0.0000300000000, -0.0000300000000, -0.0000658823529, -0.0000658823529, -0.0000478431373, -0.0000358823529, -0.0000300000000, -0.0000180392157, -0.0000180392157, -0.0000119607843, -0.0000180392157, -0.0000239215686, -0.0000358823529, -0.0000539215686, -0.0000837254902, -0.0001196078431, -0.0001256862745, -0.0000837254902, -0.0000119607843, +0.0000598039216, +0.0001076470588, +0.0001256862745, +0.0001076470588, +0.0000539215686, -0.0000119607843, -0.0001017647059, -0.0001735294118, -0.0002274509804, -0.0002333333333, -0.0001974509804, -0.0001615686275, -0.0001496078431, -0.0001615686275, -0.0001854901961, -0.0001915686275, -0.0001735294118, -0.0001315686275, -0.0001076470588, -0.0001076470588, -0.0001315686275, -0.0001735294118, -0.0001974509804, -0.0001974509804, -0.0001496078431, -0.0000837254902, -0.0000419607843, -0.0000478431373, -0.0000956862745, -0.0001735294118, -0.0002333333333, -0.0002452941176, -0.0001915686275, -0.0000837254902, +0.0000358823529, +0.0001196078431, +0.0001554901961, +0.0001196078431, +0.0000419607843, -0.0000598039216, -0.0001554901961, -0.0001974509804, -0.0001854901961, -0.0001376470588, -0.0000778431373, -0.0000539215686, -0.0000658823529, -0.0000717647059, -0.0000658823529, -0.0000300000000, +0.0000119607843, +0.0000539215686, +0.0000778431373, +0.0000717647059, +0.0000358823529, -0.0000119607843, -0.0000358823529, -0.0000060784314, +0.0000419607843, +0.0000778431373, +0.0000598039216, -0.0000060784314, -0.0001017647059, -0.0001915686275, -0.0002274509804, -0.0001854901961, -0.0000778431373, +0.0000419607843, +0.0001496078431, +0.0002094117647, +0.0002154901961, +0.0001796078431, +0.0001076470588, +0.0000060784314, -0.0000898039216, -0.0001674509804, -0.0002035294118, -0.0001796078431, -0.0001137254902, -0.0000358823529, +0.0000119607843, +0.0000180392157, -0.0000119607843, -0.0000539215686, -0.0000717647059, -0.0000598039216, -0.0000180392157, +0.0000300000000, +0.0000598039216, +0.0000478431373, +0.0000000000000, -0.0000658823529, -0.0001315686275, -0.0001796078431, -0.0001974509804, -0.0001854901961, -0.0001615686275, -0.0001315686275, -0.0001076470588, -0.0000778431373, -0.0000598039216, -0.0000419607843, -0.0000060784314, +0.0000180392157, +0.0000300000000, +0.0000000000000, -0.0000598039216, -0.0001435294118, -0.0002035294118, -0.0002213725490, -0.0001854901961, -0.0000898039216, +0.0000000000000, +0.0000419607843, +0.0000300000000, -0.0000119607843, -0.0000658823529, -0.0000778431373, -0.0000478431373, +0.0000119607843, +0.0000658823529, +0.0000717647059, +0.0000239215686, -0.0000598039216, -0.0001256862745, -0.0001435294118, -0.0001137254902, -0.0000598039216, +0.0000000000000, +0.0000658823529, +0.0001076470588, +0.0001196078431, +0.0001076470588, +0.0000837254902, +0.0000658823529, +0.0000539215686, +0.0000239215686, -0.0000060784314, -0.0000419607843, -0.0000598039216, -0.0000598039216, -0.0000300000000, +0.0000000000000, +0.0000180392157, +0.0000358823529, +0.0000300000000, +0.0000180392157, +0.0000180392157, +0.0000300000000, +0.0000478431373, +0.0000717647059, +0.0000837254902, +0.0000778431373, +0.0000419607843, +0.0000000000000, -0.0000239215686, -0.0000239215686, +0.0000000000000, +0.0000119607843, +0.0000119607843, -0.0000180392157, -0.0000658823529, -0.0001017647059, -0.0001137254902, -0.0001137254902, -0.0000956862745, -0.0000658823529, -0.0000300000000, -0.0000119607843, -0.0000239215686, -0.0000658823529, -0.0001196078431, -0.0001435294118, -0.0001196078431, -0.0000478431373, +0.0000478431373, +0.0001376470588, +0.0001974509804, +0.0001915686275, +0.0001376470588, +0.0000478431373, -0.0000419607843, -0.0001137254902, -0.0001554901961, -0.0001735294118, -0.0001674509804, -0.0001256862745, -0.0000717647059, -0.0000239215686, +0.0000000000000, +0.0000060784314, +0.0000119607843, +0.0000180392157, +0.0000358823529, +0.0000717647059, +0.0001196078431, +0.0001615686275, +0.0001554901961, +0.0001076470588, +0.0000300000000, -0.0000419607843, -0.0000898039216, -0.0000956862745, -0.0000837254902, -0.0000478431373, +0.0000000000000, +0.0000239215686, +0.0000358823529, +0.0000180392157, -0.0000060784314, -0.0000358823529, -0.0000539215686, -0.0000419607843, +0.0000180392157, +0.0001076470588, +0.0001974509804, +0.0002452941176, +0.0002274509804, +0.0001376470588, +0.0000060784314, -0.0001256862745, -0.0002154901961, -0.0002274509804, -0.0001496078431, -0.0000300000000, +0.0000956862745, +0.0001796078431, +0.0001915686275, +0.0001435294118, +0.0000778431373, +0.0000180392157, -0.0000119607843, -0.0000060784314, +0.0000119607843, +0.0000358823529, +0.0000300000000, +0.0000000000000, -0.0000419607843, -0.0000598039216, -0.0000478431373, -0.0000239215686, +0.0000000000000, +0.0000358823529, +0.0000539215686, +0.0000419607843, +0.0000119607843, -0.0000180392157, -0.0000180392157, +0.0000358823529, +0.0001256862745, +0.0002154901961, +0.0002394117647, +0.0002094117647, +0.0001376470588, +0.0000717647059, +0.0000239215686, +0.0000060784314, +0.0000239215686, +0.0000658823529, +0.0000778431373, +0.0000478431373, +0.0000000000000, -0.0000180392157, +0.0000060784314, +0.0000837254902, +0.0001615686275, +0.0002094117647, +0.0001915686275, +0.0001315686275, +0.0000717647059, +0.0000539215686, +0.0000837254902, +0.0001376470588, +0.0001796078431, +0.0001854901961, +0.0001376470588, +0.0000419607843, -0.0000539215686, -0.0001196078431, -0.0001256862745, -0.0000898039216, -0.0000239215686, +0.0000358823529, +0.0000956862745, +0.0001496078431, +0.0002035294118, +0.0002333333333, +0.0002394117647, +0.0001854901961, +0.0000956862745, -0.0000060784314, -0.0000778431373, -0.0001017647059, -0.0000837254902, -0.0000478431373, -0.0000060784314, +0.0000300000000, +0.0000539215686, +0.0000898039216, +0.0001196078431, +0.0001674509804, +0.0001974509804, +0.0002154901961, +0.0002094117647, +0.0001796078431, +0.0001376470588, +0.0001017647059, +0.0000717647059, +0.0000598039216, +0.0000478431373, +0.0000300000000, +0.0000060784314, -0.0000180392157, -0.0000478431373, -0.0000658823529, -0.0000539215686, -0.0000119607843, +0.0000419607843, +0.0000778431373, +0.0000717647059, +0.0000358823529, +0.0000000000000, -0.0000239215686, -0.0000119607843, +0.0000239215686, +0.0000778431373, +0.0001256862745, +0.0001496078431, +0.0001615686275, +0.0001554901961, +0.0001376470588, +0.0001137254902, +0.0000778431373, +0.0000539215686, +0.0000598039216, +0.0000778431373, +0.0001076470588, +0.0001256862745, +0.0001256862745, +0.0001017647059, +0.0000598039216, +0.0000000000000, -0.0000478431373, -0.0000837254902, -0.0000956862745, -0.0000717647059, -0.0000180392157, +0.0000419607843, +0.0000956862745, +0.0001256862745, +0.0001196078431, +0.0000898039216, +0.0000419607843, +0.0000000000000, -0.0000358823529, -0.0000658823529, -0.0000898039216, -0.0001076470588, -0.0001196078431, -0.0001076470588, -0.0000778431373, -0.0000419607843, -0.0000060784314, +0.0000000000000, -0.0000119607843, -0.0000717647059, -0.0001554901961, -0.0002094117647, -0.0002035294118, -0.0001256862745, -0.0000119607843, +0.0001076470588, +0.0001915686275, +0.0002154901961, +0.0001496078431, +0.0000119607843, -0.0001137254902, -0.0001854901961, -0.0001674509804, -0.0000898039216, +0.0000000000000, +0.0000598039216, +0.0000658823529, +0.0000119607843, -0.0000539215686, -0.0001017647059, -0.0000956862745, -0.0000539215686, -0.0000119607843, +0.0000000000000, +0.0000000000000, -0.0000119607843, -0.0000060784314, +0.0000180392157, +0.0000598039216, +0.0000837254902, +0.0000898039216, +0.0000658823529, +0.0000239215686, -0.0000239215686, -0.0000419607843, -0.0000239215686, +0.0000419607843, +0.0001256862745, +0.0001854901961, +0.0002035294118, +0.0001615686275, +0.0000837254902, +0.0000060784314, -0.0000358823529, -0.0000358823529, -0.0000060784314, +0.0000300000000, +0.0000598039216, +0.0000778431373, +0.0000837254902, +0.0000717647059, +0.0000478431373, +0.0000119607843, -0.0000478431373, -0.0001196078431, -0.0001796078431, -0.0001974509804, -0.0001496078431, -0.0000539215686, +0.0000478431373, +0.0001256862745, +0.0001554901961, +0.0001315686275, +0.0000717647059, +0.0000119607843, -0.0000358823529, -0.0000539215686, -0.0000478431373, -0.0000358823529, -0.0000180392157, -0.0000119607843, -0.0000239215686, -0.0000419607843, -0.0000419607843, -0.0000300000000, -0.0000239215686, -0.0000358823529, -0.0000539215686, -0.0000658823529, -0.0000478431373, +0.0000000000000, +0.0000598039216, +0.0001017647059, +0.0001137254902, +0.0000837254902, +0.0000239215686, -0.0000239215686, -0.0000539215686, -0.0000539215686, -0.0000239215686, +0.0000119607843, +0.0000598039216, +0.0000658823529, +0.0000358823529, -0.0000119607843, -0.0000539215686, -0.0000717647059, -0.0000598039216, -0.0000180392157, +0.0000239215686, +0.0000658823529, +0.0001017647059, +0.0001435294118, +0.0001735294118, +0.0001674509804, +0.0001256862745, +0.0000539215686, -0.0000300000000, -0.0001256862745, -0.0001974509804, -0.0002094117647, -0.0001674509804, -0.0000717647059, +0.0000358823529, +0.0001376470588, +0.0001915686275, +0.0001915686275, +0.0001496078431, +0.0000837254902, +0.0000300000000, +0.0000060784314, +0.0000180392157, +0.0000478431373, +0.0000658823529, +0.0000658823529, +0.0000358823529, +0.0000000000000, -0.0000358823529, -0.0000419607843, +0.0000000000000, +0.0000717647059, +0.0001315686275, +0.0001256862745, +0.0000539215686, -0.0000478431373, -0.0001376470588, -0.0001615686275, -0.0001076470588, -0.0000119607843, +0.0000717647059, +0.0001256862745, +0.0001137254902, +0.0000478431373, -0.0000300000000, -0.0000778431373, -0.0000837254902, -0.0000478431373, +0.0000000000000, +0.0000239215686, +0.0000239215686, -0.0000060784314, -0.0000598039216, -0.0001137254902, -0.0001435294118, -0.0001435294118, -0.0001137254902, -0.0000898039216, -0.0000778431373, -0.0000837254902, -0.0000956862745, -0.0000898039216, -0.0000598039216, -0.0000060784314, +0.0000539215686, +0.0000956862745, +0.0000898039216, +0.0000300000000, -0.0000539215686, -0.0001315686275, -0.0001615686275, -0.0001435294118, -0.0000898039216, -0.0000300000000, +0.0000239215686, +0.0000539215686, +0.0000300000000, -0.0000300000000, -0.0001196078431, -0.0001854901961, -0.0002154901961, -0.0001796078431, -0.0000837254902, +0.0000478431373, +0.0001615686275, +0.0002154901961, +0.0002035294118, +0.0001615686275, +0.0000837254902, +0.0000000000000, -0.0000717647059, -0.0001315686275, -0.0001615686275, -0.0001615686275, -0.0001315686275, -0.0000898039216, -0.0000358823529, +0.0000000000000, +0.0000180392157, +0.0000239215686, +0.0000060784314, -0.0000358823529, -0.0000717647059, -0.0001017647059, -0.0001017647059, -0.0000837254902, -0.0000539215686, -0.0000300000000, -0.0000119607843, +0.0000000000000, +0.0000180392157, +0.0000358823529, +0.0000539215686, +0.0000478431373, +0.0000180392157, -0.0000180392157, -0.0000598039216, -0.0000837254902, -0.0000658823529, +0.0000000000000, +0.0000956862745, +0.0001974509804, +0.0002513725490, +0.0002274509804, +0.0001315686275, +0.0000180392157, -0.0000658823529, -0.0001137254902, -0.0001196078431, -0.0000837254902, -0.0000300000000, +0.0000000000000, +0.0000000000000, -0.0000119607843, -0.0000239215686, -0.0000300000000, -0.0000119607843, +0.0000000000000, +0.0000060784314, +0.0000119607843, +0.0000060784314, +0.0000000000000 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/20-matchless-chieftain-sm57.h000066400000000000000000002014371247673406200262460ustar00rootroot00000000000000float matchless_chieftain_sm57[] = { -0.0001573195876, -0.0001321649485, -0.0001509278351, -0.0001950515464, -0.0001698969072, -0.0002014432990, -0.0002391752577, -0.0002076288660, -0.0002391752577, -0.0002579381443, -0.0002265979381, -0.0002705154639, -0.0002830927835, -0.0002579381443, -0.0003082474227, -0.0003082474227, -0.0002830927835, -0.0003397938144, -0.0003208247423, -0.0003020618557, -0.0003587628866, -0.0003272164948, -0.0003146391753, -0.0003523711340, -0.0003020618557, -0.0003020618557, -0.0003334020619, -0.0002830927835, -0.0002894845361, -0.0003082474227, -0.0002517525773, -0.0002705154639, -0.0002643298969, -0.0001950515464, -0.0002202061856, -0.0002014432990, -0.0001383505155, -0.0001760824742, -0.0001383505155, -0.0000754639175, -0.0001006185567, -0.0000377319588, +0.0000125773196, +0.0000000000000, +0.0000818556701, +0.0001257731959, +0.0001070103093, +0.0001950515464, +0.0002140206186, +0.0002014432990, +0.0003082474227, +0.0003272164948, +0.0003397938144, +0.0004655670103, +0.0004845360825, +0.0005284536082, +0.0006480412371, +0.0006480412371, +0.0006983505155, +0.0007991752577, +0.0007802061856, +0.0008556701031, +0.0009439175258, +0.0009187628866, +0.0010193814433, +0.0011012371134, +0.0010886597938, +0.0011954639175, +0.0012521649485, +0.0012331958763, +0.0013527835052, +0.0013843298969, +0.0013717525773, +0.0014975257732, +0.0014975257732, +0.0015101030928, +0.0016360824742, +0.0016045360825, +0.0016235051546, +0.0017303092784, +0.0016738144330, +0.0017115463918, +0.0017934020619, +0.0016989690722, +0.0017303092784, +0.0017618556701, +0.0016360824742, +0.0016863917526, +0.0016674226804, +0.0015352577320, +0.0016486597938, +0.0015919587629, +0.0014597938144, +0.0016360824742, +0.0014787628866, +0.0012270103093, +0.0014220618557, +0.0012837113402, +0.0009061855670, +0.0009690721649, +0.0008934020619, +0.0006921649485, +0.0007488659794, +0.0005600000000, +0.0003523711340, +0.0003713402062, +0.0001131958763, -0.0000441237113, -0.0000189690722, -0.0003020618557, -0.0004152577320, -0.0003964948454, -0.0007173195876, -0.0008117525773, -0.0008369072165, -0.0012521649485, -0.0013402061856, -0.0013653608247, -0.0018185567010, -0.0018311340206, -0.0017744329897, -0.0024098969072, -0.0025484536082, -0.0020701030928, -0.0023847422680, -0.0031336082474, -0.0036746391753, -0.0041340206186, -0.0032280412371, -0.0027496907216, -0.0086958762887, -0.0155482474227, -0.0044989690722, +0.0278622680412, +0.0582853608247, +0.0601542268041, +0.0219851546392, -0.0483373195876, -0.1271859793814, -0.1883847422680, -0.2061604123711, -0.1617053608247, -0.0701967010309, +0.0274721649485, +0.1021426804124, +0.1359385567010, +0.1240461855670, +0.0918358762887, +0.0611546391753, +0.0284158762887, +0.0013340206186, -0.0083121649485, -0.0133647422680, -0.0195878350515, -0.0178385567010, -0.0133585567010, -0.0077331958763, +0.0091426804124, +0.0264402061856, +0.0247412371134, +0.0079849484536, -0.0106024742268, -0.0259492783505, -0.0365393814433, -0.0389618556701, -0.0265030927835, +0.0010632989691, +0.0284915463918, +0.0412585567010, +0.0431461855670, +0.0453861855670, +0.0480793814433, +0.0433412371134, +0.0286298969072, +0.0059274226804, -0.0206261855670, -0.0408494845361, -0.0479534020619, -0.0436117525773, -0.0271134020619, -0.0034608247423, +0.0123327835052, +0.0190216494845, +0.0234639175258, +0.0194872164948, +0.0082303092784, +0.0028441237113, -0.0001321649485, -0.0086078350515, -0.0130249484536, -0.0089540206186, -0.0065377319588, -0.0087148453608, -0.0100740206186, -0.0096649484536, -0.0076074226804, +0.0001195876289, +0.0136354639175, +0.0243321649485, +0.0259808247423, +0.0218152577320, +0.0170144329897, +0.0146358762887, +0.0146169072165, +0.0114835051546, +0.0035550515464, -0.0016925773196, -0.0007865979381, +0.0015855670103, +0.0029637113402, +0.0048136082474, +0.0070410309278, +0.0062292783505, -0.0002643298969, -0.0088973195876, -0.0142080412371, -0.0154160824742, -0.0135472164948, -0.0094131958763, -0.0039074226804, +0.0038193814433, +0.0134214432990, +0.0221865979381, +0.0295925773196, +0.0346138144330, +0.0342678350515, +0.0294290721649, +0.0230863917526, +0.0158125773196, +0.0073430927835, -0.0029888659794, -0.0141764948454, -0.0219412371134, -0.0246909278351, -0.0238352577320, -0.0186441237113, -0.0088531958763, +0.0035804123711, +0.0170270103093, +0.0276672164948, +0.0298756701031, +0.0225138144330, +0.0096901030928, -0.0035488659794, -0.0138053608247, -0.0193991752577, -0.0193991752577, -0.0140191752577, -0.0056756701031, +0.0020952577320, +0.0071103092784, +0.0101117525773, +0.0125531958763, +0.0132453608247, +0.0109863917526, +0.0065942268041, -0.0000944329897, -0.0080414432990, -0.0124649484536, -0.0111876288660, -0.0065439175258, -0.0002517525773, +0.0061286597938, +0.0101305154639, +0.0114709278351, +0.0108981443299, +0.0073241237113, +0.0010068041237, -0.0043919587629, -0.0062608247423, -0.0056063917526, -0.0037816494845, -0.0011577319588, +0.0014849484536, +0.0035676288660, +0.0043919587629, +0.0026616494845, -0.0009439175258, -0.0048828865979, -0.0094195876289, -0.0130375257732, -0.0122950515464, -0.0076325773196, -0.0019317525773, +0.0032909278351, +0.0062672164948, +0.0053420618557, +0.0010129896907, -0.0047632989691, -0.0089350515464, -0.0093818556701, -0.0074249484536, -0.0054303092784, -0.0045934020619, -0.0050338144330, -0.0054428865979, -0.0047507216495, -0.0035929896907, -0.0026239175258, -0.0018185567010, -0.0013150515464, -0.0011325773196, -0.0009061855670, -0.0002014432990, +0.0004216494845, -0.0004152577320, -0.0026552577320, -0.0051721649485, -0.0071039175258, -0.0071290721649, -0.0057762886598, -0.0055119587629, -0.0056944329897, -0.0046752577320, -0.0042723711340, -0.0049583505155, -0.0044422680412, -0.0025610309278, -0.0003523711340, +0.0014030927835, +0.0010319587629, -0.0018247422680, -0.0056692783505, -0.0094383505155, -0.0117791752577, -0.0109925773196, -0.0073367010309, -0.0031523711340, -0.0010129896907, -0.0014410309278, -0.0031649484536, -0.0055309278351, -0.0070913402062, -0.0053800000000, -0.0010319587629, +0.0026490721649, +0.0037123711340, +0.0018624742268, -0.0019569072165, -0.0060783505155, -0.0091426804124, -0.0097907216495, -0.0079282474227, -0.0055686597938, -0.0035488659794, -0.0013276288660, +0.0001131958763, -0.0002643298969, -0.0016612371134, -0.0023721649485, -0.0014723711340, -0.0001383505155, +0.0001006185567, -0.0002453608247, -0.0008620618557, -0.0019569072165, -0.0022338144330, -0.0009061855670, +0.0011451546392, +0.0035047422680, +0.0051534020619, +0.0041591752577, +0.0004026804124, -0.0044296907216, -0.0082618556701, -0.0090546391753, -0.0066068041237, -0.0027496907216, +0.0004655670103, +0.0018311340206, +0.0012585567010, -0.0006103092784, -0.0031775257732, -0.0054742268041, -0.0064684536082, -0.0057070103093, -0.0032531958763, -0.0002579381443, +0.0017241237113, +0.0026678350515, +0.0031397938144, +0.0029259793814, +0.0018311340206, +0.0002391752577, -0.0013088659794, -0.0027183505155, -0.0043919587629, -0.0056882474227, -0.0052791752577, -0.0040962886598, -0.0038068041237, -0.0035550515464, -0.0021016494845, -0.0004719587629, +0.0001509278351, +0.0005284536082, +0.0018121649485, +0.0036558762887, +0.0045179381443, +0.0035865979381, +0.0015981443299, -0.0002643298969, -0.0017744329897, -0.0031272164948, -0.0036872164948, -0.0029447422680, -0.0017554639175, -0.0007550515464, +0.0003649484536, +0.0014975257732, +0.0022086597938, +0.0023344329897, +0.0019569072165, +0.0017177319588, +0.0018814432990, +0.0015352577320, +0.0003839175258, -0.0008556701031, -0.0018059793814, -0.0020449484536, -0.0013402061856, -0.0002327835052, +0.0013340206186, +0.0038193814433, +0.0063049484536, +0.0075319587629, +0.0072550515464, +0.0057575257732, +0.0034356701031, +0.0010381443299, -0.0005284536082, -0.0009690721649, -0.0006606185567, +0.0001447422680, +0.0012521649485, +0.0017870103093, +0.0013843298969, +0.0005663917526, -0.0003587628866, -0.0011515463918, -0.0011138144330, +0.0000000000000, +0.0016925773196, +0.0029762886598, +0.0030265979381, +0.0024476288660, +0.0024224742268, +0.0031084536082, +0.0038760824742, +0.0042158762887, +0.0041969072165, +0.0040334020619, +0.0030265979381, +0.0008369072165, -0.0009439175258, -0.0011200000000, -0.0004907216495, +0.0003775257732, +0.0019379381443, +0.0036810309278, +0.0043668041237, +0.0039012371134, +0.0033663917526, +0.0032468041237, +0.0031587628866, +0.0030140206186, +0.0030202061856, +0.0033412371134, +0.0041591752577, +0.0050527835052, +0.0053358762887, +0.0051408247423, +0.0048197938144, +0.0043606185567, +0.0037249484536, +0.0028063917526, +0.0019253608247, +0.0018498969072, +0.0022715463918, +0.0022715463918, +0.0018121649485, +0.0010822680412, +0.0002956701031, +0.0000000000000, -0.0001257731959, -0.0007362886598, -0.0012962886598, -0.0011451546392, -0.0004090721649, +0.0005851546392, +0.0014472164948, +0.0018624742268, +0.0019758762887, +0.0021268041237, +0.0026804123711, +0.0034230927835, +0.0035362886598, +0.0028628865979, +0.0019443298969, +0.0012457731959, +0.0010068041237, +0.0009752577320, +0.0008872164948, +0.0013527835052, +0.0026490721649, +0.0038948453608, +0.0042346391753, +0.0034105154639, +0.0019379381443, +0.0009942268041, +0.0006857731959, +0.0001447422680, -0.0005158762887, -0.0005284536082, +0.0001573195876, +0.0009375257732, +0.0012395876289, +0.0012711340206, +0.0016360824742, +0.0022148453608, +0.0026678350515, +0.0029888659794, +0.0028189690722, +0.0018750515464, +0.0007614432990, +0.0002643298969, +0.0006480412371, +0.0013969072165, +0.0016486597938, +0.0013591752577, +0.0009816494845, +0.0004655670103, -0.0001760824742, -0.0005915463918, -0.0005977319588, -0.0001509278351, +0.0005915463918, +0.0012395876289, +0.0016422680412, +0.0018688659794, +0.0017618556701, +0.0013214432990, +0.0008243298969, +0.0002579381443, -0.0004655670103, -0.0012206185567, -0.0016548453608, -0.0015290721649, -0.0009313402062, -0.0001195876289, +0.0007109278351, +0.0015290721649, +0.0021709278351, +0.0023154639175, +0.0017806185567, +0.0006795876289, -0.0006354639175, -0.0016360824742, -0.0018814432990, -0.0016045360825, -0.0013024742268, -0.0010632989691, -0.0008117525773, -0.0004026804124, +0.0001698969072, +0.0004845360825, +0.0002894845361, +0.0001070103093, +0.0001321649485, -0.0000754639175, -0.0007109278351, -0.0014030927835, -0.0016989690722, -0.0014030927835, -0.0008053608247, -0.0002705154639, +0.0000315463918, +0.0000692783505, -0.0000503092784, -0.0001131958763, -0.0001824742268, -0.0003964948454, -0.0005725773196, -0.0005474226804, -0.0004719587629, -0.0004907216495, -0.0005977319588, -0.0007740206186, -0.0008872164948, -0.0007047422680, -0.0003208247423, -0.0002014432990, -0.0005412371134, -0.0011074226804, -0.0015101030928, -0.0014346391753, -0.0010068041237, -0.0006983505155, -0.0004278350515, +0.0001760824742, +0.0009375257732, +0.0012647422680, +0.0009564948454, +0.0002830927835, -0.0002705154639, -0.0005222680412, -0.0006167010309, -0.0006670103093, -0.0007927835052, -0.0010571134021, -0.0011641237113, -0.0009249484536, -0.0007614432990, -0.0011325773196, -0.0018373195876, -0.0022967010309, -0.0021268041237, -0.0014849484536, -0.0007802061856, -0.0002076288660, +0.0002956701031, +0.0007550515464, +0.0009123711340, +0.0004719587629, -0.0003649484536, -0.0011263917526, -0.0015729896907, -0.0017870103093, -0.0019758762887, -0.0023092783505, -0.0026931958763, -0.0028692783505, -0.0026804123711, -0.0021835051546, -0.0017241237113, -0.0015542268041, -0.0013779381443, -0.0009878350515, -0.0006606185567, -0.0005851546392, -0.0006480412371, -0.0007740206186, -0.0006731958763, -0.0001257731959, +0.0003839175258, +0.0003208247423, -0.0001950515464, -0.0007362886598, -0.0011074226804, -0.0013717525773, -0.0015290721649, -0.0015164948454, -0.0012837113402, -0.0010068041237, -0.0009690721649, -0.0013150515464, -0.0018059793814, -0.0020639175258, -0.0019694845361, -0.0016989690722, -0.0014536082474, -0.0013024742268, -0.0012018556701, -0.0010129896907, -0.0005663917526, +0.0000441237113, +0.0005915463918, +0.0009626804124, +0.0011325773196, +0.0009816494845, +0.0004278350515, -0.0005158762887, -0.0016800000000, -0.0025294845361, -0.0027119587629, -0.0024098969072, -0.0018940206186, -0.0013465979381, -0.0009878350515, -0.0007991752577, -0.0005284536082, -0.0002014432990, +0.0000125773196, +0.0001509278351, +0.0002014432990, +0.0001447422680, +0.0000000000000, -0.0002956701031, -0.0008430927835, -0.0013653608247, -0.0015101030928, -0.0013088659794, -0.0010571134021, -0.0008808247423, -0.0007109278351, -0.0005725773196, -0.0004090721649, -0.0001509278351, +0.0000441237113, +0.0000944329897, +0.0000754639175, +0.0000315463918, +0.0000063917526, +0.0000189690722, -0.0001447422680, -0.0004655670103, -0.0004593814433, -0.0001195876289, +0.0000754639175, +0.0001006185567, +0.0001383505155, +0.0002579381443, +0.0004845360825, +0.0005600000000, +0.0002956701031, -0.0000315463918, -0.0001888659794, -0.0001635051546, +0.0000754639175, +0.0004468041237, +0.0006480412371, +0.0006228865979, +0.0004529896907, +0.0001573195876, -0.0001698969072, -0.0005915463918, -0.0009942268041, -0.0010255670103, -0.0007298969072, -0.0004593814433, -0.0003523711340, -0.0004468041237, -0.0006670103093, -0.0006354639175, -0.0002894845361, +0.0001131958763, +0.0005474226804, +0.0010255670103, +0.0014661855670, +0.0018059793814, +0.0018311340206, +0.0014156701031, +0.0008179381443, +0.0003523711340, +0.0002076288660, +0.0003713402062, +0.0005412371134, +0.0006983505155, +0.0010948453608, +0.0015039175258, +0.0015668041237, +0.0013591752577, +0.0009690721649, +0.0004907216495, +0.0002140206186, +0.0002327835052, +0.0004152577320, +0.0006103092784, +0.0005977319588, +0.0003775257732, +0.0001950515464, +0.0001447422680, +0.0001383505155, +0.0001383505155, +0.0001321649485, +0.0002265979381, +0.0004152577320, +0.0003587628866, +0.0000315463918, -0.0001131958763, +0.0000692783505, +0.0002327835052, +0.0001131958763, -0.0000818556701, -0.0001447422680, -0.0000377319588, +0.0001888659794, +0.0004404123711, +0.0004781443299, +0.0002956701031, +0.0001321649485, +0.0000944329897, +0.0001760824742, +0.0003587628866, +0.0005284536082, +0.0005789690722, +0.0005977319588, +0.0006041237113, +0.0004781443299, +0.0002643298969, +0.0002643298969, +0.0005915463918, +0.0010445360825, +0.0014661855670, +0.0017051546392, +0.0016296907216, +0.0013905154639, +0.0011767010309, +0.0008934020619, +0.0005348453608, +0.0002894845361, +0.0001195876289, +0.0000000000000, -0.0000628865979, -0.0001888659794, -0.0003208247423, -0.0002517525773, +0.0000503092784, +0.0005663917526, +0.0010886597938, +0.0013088659794, +0.0012647422680, +0.0011325773196, +0.0008556701031, +0.0005096907216, +0.0002579381443, +0.0000377319588, -0.0001573195876, -0.0001824742268, +0.0000000000000, +0.0003272164948, +0.0007298969072, +0.0010445360825, +0.0013150515464, +0.0015855670103, +0.0016296907216, +0.0013024742268, +0.0007802061856, +0.0003334020619, +0.0000189690722, -0.0002830927835, -0.0006606185567, -0.0009439175258, -0.0009626804124, -0.0007614432990, -0.0004655670103, -0.0000503092784, +0.0004026804124, +0.0007047422680, +0.0007927835052, +0.0007991752577, +0.0006292783505, +0.0002517525773, -0.0000628865979, -0.0002391752577, -0.0003146391753, -0.0001824742268, +0.0000377319588, +0.0001257731959, +0.0002202061856, +0.0004152577320, +0.0004468041237, +0.0003272164948, +0.0001824742268, -0.0000189690722, -0.0001760824742, -0.0001195876289, +0.0000000000000, +0.0000189690722, -0.0000189690722, -0.0001383505155, -0.0002643298969, -0.0003587628866, -0.0005158762887, -0.0007550515464, -0.0008494845361, -0.0005977319588, -0.0000567010309, +0.0005474226804, +0.0010571134021, +0.0014536082474, +0.0016800000000, +0.0014661855670, +0.0006731958763, -0.0004216494845, -0.0014346391753, -0.0020575257732, -0.0020513402062, -0.0014472164948, -0.0004845360825, +0.0006292783505, +0.0016171134021, +0.0021016494845, +0.0020197938144, +0.0015604123711, +0.0008053608247, +0.0000000000000, -0.0005977319588, -0.0009942268041, -0.0012144329897, -0.0012018556701, -0.0009564948454, -0.0004468041237, +0.0001888659794, +0.0006921649485, +0.0009123711340, +0.0008620618557, +0.0005284536082, +0.0000628865979, -0.0003334020619, -0.0006041237113, -0.0007424742268, -0.0007676288660, -0.0007047422680, -0.0005663917526, -0.0004907216495, -0.0005600000000, -0.0005977319588, -0.0004719587629, -0.0002579381443, -0.0001321649485, -0.0001888659794, -0.0004090721649, -0.0007047422680, -0.0009187628866, -0.0008808247423, -0.0005663917526, -0.0001321649485, +0.0003587628866, +0.0007927835052, +0.0009313402062, +0.0007550515464, +0.0003775257732, -0.0000818556701, -0.0004593814433, -0.0006041237113, -0.0005851546392, -0.0005474226804, -0.0005725773196, -0.0006983505155, -0.0008243298969, -0.0007991752577, -0.0005915463918, -0.0003334020619, -0.0000818556701, +0.0002643298969, +0.0006480412371, +0.0007109278351, +0.0004216494845, +0.0001070103093, -0.0000063917526, +0.0000377319588, +0.0002014432990, +0.0003459793814, +0.0004090721649, +0.0003964948454, +0.0003587628866, +0.0003713402062, +0.0002517525773, -0.0001131958763, -0.0004845360825, -0.0006731958763, -0.0007424742268, -0.0006544329897, -0.0003459793814, +0.0000628865979, +0.0004655670103, +0.0006795876289, +0.0005474226804, +0.0001131958763, -0.0004655670103, -0.0010319587629, -0.0012331958763, -0.0009690721649, -0.0004655670103, -0.0000125773196, +0.0002140206186, +0.0002076288660, -0.0000944329897, -0.0006983505155, -0.0012898969072, -0.0015542268041, -0.0014787628866, -0.0011325773196, -0.0005789690722, +0.0000063917526, +0.0005158762887, +0.0008494845361, +0.0009061855670, +0.0007173195876, +0.0003146391753, -0.0003397938144, -0.0010822680412, -0.0016235051546, -0.0018562886598, -0.0017428865979, -0.0013024742268, -0.0006480412371, +0.0000944329897, +0.0006921649485, +0.0008682474227, +0.0006167010309, +0.0001383505155, -0.0003713402062, -0.0008179381443, -0.0010696907216, -0.0010068041237, -0.0006480412371, -0.0000880412371, +0.0005725773196, +0.0011641237113, +0.0014410309278, +0.0013150515464, +0.0008243298969, +0.0001509278351, -0.0004468041237, -0.0009249484536, -0.0012962886598, -0.0014597938144, -0.0014094845361, -0.0012144329897, -0.0009690721649, -0.0007991752577, -0.0006544329897, -0.0004404123711, -0.0002517525773, -0.0001383505155, +0.0000000000000, +0.0001321649485, +0.0001509278351, +0.0001509278351, +0.0002076288660, +0.0002830927835, +0.0003775257732, +0.0004468041237, +0.0005032989691, +0.0005538144330, +0.0004593814433, +0.0001509278351, -0.0002391752577, -0.0005725773196, -0.0006670103093, -0.0004781443299, -0.0001824742268, +0.0000125773196, +0.0001321649485, +0.0002453608247, +0.0002517525773, +0.0000189690722, -0.0003272164948, -0.0005725773196, -0.0006544329897, -0.0005348453608, -0.0002076288660, +0.0001006185567, +0.0002140206186, +0.0001321649485, -0.0001321649485, -0.0004971134021, -0.0007614432990, -0.0008243298969, -0.0006480412371, -0.0002769072165, +0.0000628865979, +0.0002327835052, +0.0002643298969, +0.0001824742268, +0.0000567010309, -0.0000189690722, -0.0000818556701, -0.0001131958763, -0.0001447422680, -0.0002076288660, -0.0002956701031, -0.0003082474227, -0.0002327835052, -0.0000818556701, +0.0001509278351, +0.0004593814433, +0.0007109278351, +0.0007424742268, +0.0005032989691, +0.0001760824742, +0.0000000000000, -0.0000754639175, -0.0001698969072, -0.0001760824742, -0.0000818556701, -0.0001070103093, -0.0002265979381, -0.0002327835052, -0.0002265979381, -0.0003146391753, -0.0004152577320, -0.0005348453608, -0.0006795876289, -0.0007676288660, -0.0008494845361, -0.0008808247423, -0.0007109278351, -0.0004529896907, -0.0002014432990, +0.0000315463918, +0.0001760824742, +0.0002579381443, +0.0004404123711, +0.0006167010309, +0.0006480412371, +0.0005222680412, +0.0001573195876, -0.0003272164948, -0.0007173195876, -0.0009249484536, -0.0008808247423, -0.0005474226804, -0.0000880412371, +0.0004278350515, +0.0008808247423, +0.0010381443299, +0.0009564948454, +0.0008117525773, +0.0006354639175, +0.0004719587629, +0.0003082474227, +0.0001131958763, -0.0000441237113, -0.0002327835052, -0.0003713402062, -0.0002579381443, +0.0000251546392, +0.0003587628866, +0.0007298969072, +0.0009249484536, +0.0007298969072, +0.0003020618557, -0.0001888659794, -0.0005977319588, -0.0006103092784, -0.0003020618557, +0.0001006185567, +0.0006041237113, +0.0010004123711, +0.0010068041237, +0.0007047422680, +0.0003272164948, +0.0000000000000, -0.0002327835052, -0.0004090721649, -0.0005032989691, -0.0004719587629, -0.0004216494845, -0.0004468041237, -0.0005348453608, -0.0006103092784, -0.0005474226804, -0.0003459793814, -0.0001257731959, +0.0001195876289, +0.0003713402062, +0.0004971134021, +0.0005096907216, +0.0003901030928, +0.0001321649485, -0.0000315463918, -0.0000251546392, +0.0000125773196, +0.0000251546392, +0.0000000000000, -0.0000251546392, -0.0000251546392, -0.0000189690722, -0.0001257731959, -0.0003587628866, -0.0005851546392, -0.0006480412371, -0.0004971134021, -0.0002265979381, +0.0000315463918, +0.0002705154639, +0.0004907216495, +0.0006606185567, +0.0007298969072, +0.0006983505155, +0.0005158762887, +0.0002014432990, -0.0000063917526, +0.0000000000000, +0.0000692783505, +0.0001070103093, +0.0001070103093, +0.0000000000000, -0.0001888659794, -0.0003964948454, -0.0005600000000, -0.0005096907216, -0.0001760824742, +0.0002265979381, +0.0006354639175, +0.0009752577320, +0.0011263917526, +0.0010948453608, +0.0009187628866, +0.0005663917526, +0.0001383505155, -0.0002014432990, -0.0004152577320, -0.0003964948454, -0.0001509278351, +0.0001509278351, +0.0003459793814, +0.0002956701031, +0.0001070103093, -0.0000377319588, -0.0002327835052, -0.0004529896907, -0.0004907216495, -0.0003459793814, -0.0000880412371, +0.0002769072165, +0.0005977319588, +0.0007740206186, +0.0009061855670, +0.0009187628866, +0.0008053608247, +0.0006670103093, +0.0003839175258, -0.0000567010309, -0.0004216494845, -0.0006292783505, -0.0007047422680, -0.0005725773196, -0.0002830927835, +0.0000441237113, +0.0004026804124, +0.0007047422680, +0.0008430927835, +0.0007614432990, +0.0005412371134, +0.0003459793814, +0.0002076288660, +0.0000754639175, -0.0000189690722, -0.0000692783505, -0.0000441237113, +0.0000567010309, +0.0002265979381, +0.0003775257732, +0.0005032989691, +0.0005096907216, +0.0004026804124, +0.0003146391753, +0.0002643298969, +0.0002453608247, +0.0002894845361, +0.0003523711340, +0.0003713402062, +0.0003459793814, +0.0002705154639, +0.0001698969072, +0.0000754639175, +0.0000377319588, +0.0001070103093, +0.0001950515464, +0.0002076288660, +0.0001760824742, +0.0001131958763, +0.0000441237113, +0.0001131958763, +0.0002014432990, +0.0001950515464, +0.0002453608247, +0.0003459793814, +0.0002769072165, +0.0000251546392, -0.0002705154639, -0.0005158762887, -0.0005538144330, -0.0004090721649, -0.0001824742268, +0.0001195876289, +0.0004026804124, +0.0004404123711, +0.0002453608247, -0.0000251546392, -0.0002391752577, -0.0003020618557, -0.0002956701031, -0.0002517525773, -0.0001006185567, +0.0000818556701, +0.0002140206186, +0.0002265979381, +0.0001635051546, +0.0001509278351, +0.0002014432990, +0.0001383505155, +0.0000251546392, +0.0000251546392, +0.0000628865979, -0.0000125773196, -0.0001824742268, -0.0002956701031, -0.0002014432990, +0.0000628865979, +0.0002956701031, +0.0003649484536, +0.0003587628866, +0.0003334020619, +0.0002391752577, +0.0000503092784, -0.0001635051546, -0.0003649484536, -0.0004090721649, -0.0002830927835, -0.0001321649485, -0.0000063917526, +0.0001383505155, +0.0002076288660, +0.0000818556701, -0.0000441237113, -0.0000944329897, -0.0001131958763, -0.0001006185567, -0.0000377319588, +0.0000000000000, +0.0000063917526, +0.0000189690722, -0.0000125773196, -0.0001006185567, -0.0001321649485, -0.0000628865979, +0.0000818556701, +0.0002202061856, +0.0002956701031, +0.0003208247423, +0.0002643298969, +0.0001760824742, +0.0001760824742, +0.0002327835052, +0.0003334020619, +0.0004971134021, +0.0005789690722, +0.0005158762887, +0.0004090721649, +0.0002391752577, +0.0000125773196, -0.0000944329897, -0.0000692783505, -0.0000441237113, -0.0000754639175, -0.0001195876289, -0.0001006185567, +0.0000125773196, +0.0002014432990, +0.0003146391753, +0.0003020618557, +0.0002643298969, +0.0001698969072, -0.0000315463918, -0.0001950515464, -0.0001383505155, +0.0000251546392, +0.0001195876289, +0.0000441237113, -0.0001321649485, -0.0002769072165, -0.0004026804124, -0.0006167010309, -0.0008053608247, -0.0007740206186, -0.0005915463918, -0.0003649484536, -0.0001131958763, +0.0001070103093, +0.0002327835052, +0.0001321649485, -0.0000818556701, -0.0001509278351, +0.0000189690722, +0.0003020618557, +0.0005789690722, +0.0007676288660, +0.0008053608247, +0.0007237113402, +0.0005348453608, +0.0003146391753, +0.0001950515464, +0.0002140206186, +0.0003334020619, +0.0004907216495, +0.0005977319588, +0.0006167010309, +0.0005348453608, +0.0003587628866, +0.0001950515464, +0.0001509278351, +0.0001509278351, +0.0001070103093, +0.0000754639175, +0.0000880412371, +0.0001383505155, +0.0001824742268, +0.0002014432990, +0.0002327835052, +0.0001698969072, -0.0000818556701, -0.0003964948454, -0.0006041237113, -0.0006041237113, -0.0003397938144, -0.0000503092784, +0.0000125773196, +0.0000000000000, -0.0000315463918, -0.0002014432990, -0.0004152577320, -0.0005977319588, -0.0007614432990, -0.0008053608247, -0.0006857731959, -0.0004845360825, -0.0002391752577, -0.0001131958763, -0.0001760824742, -0.0002956701031, -0.0003713402062, -0.0003146391753, -0.0000628865979, +0.0001760824742, +0.0002327835052, +0.0002076288660, +0.0002014432990, +0.0001383505155, +0.0000125773196, -0.0001131958763, -0.0001888659794, -0.0001447422680, -0.0000692783505, -0.0000880412371, -0.0001824742268, -0.0002956701031, -0.0003649484536, -0.0003272164948, -0.0002643298969, -0.0002391752577, -0.0002014432990, -0.0001698969072, -0.0002579381443, -0.0003901030928, -0.0004404123711, -0.0003901030928, -0.0002140206186, +0.0000063917526, +0.0001195876289, +0.0001195876289, +0.0001321649485, +0.0001383505155, +0.0001383505155, +0.0001573195876, +0.0000692783505, -0.0001635051546, -0.0003649484536, -0.0004719587629, -0.0005789690722, -0.0005915463918, -0.0004468041237, -0.0002453608247, -0.0000567010309, +0.0000377319588, +0.0000189690722, -0.0000754639175, -0.0002517525773, -0.0003901030928, -0.0004152577320, -0.0003587628866, -0.0001888659794, +0.0001006185567, +0.0002830927835, +0.0002327835052, +0.0000944329897, -0.0000692783505, -0.0002579381443, -0.0003587628866, -0.0003459793814, -0.0002643298969, -0.0001131958763, +0.0000944329897, +0.0003082474227, +0.0004529896907, +0.0005096907216, +0.0004781443299, +0.0003713402062, +0.0002327835052, +0.0001573195876, +0.0001383505155, +0.0001824742268, +0.0002830927835, +0.0003713402062, +0.0004026804124, +0.0004278350515, +0.0004593814433, +0.0004719587629, +0.0004468041237, +0.0003713402062, +0.0002956701031, +0.0002453608247, +0.0001195876289, -0.0000315463918, -0.0001447422680, -0.0001760824742, -0.0000692783505, +0.0001698969072, +0.0003775257732, +0.0004719587629, +0.0004529896907, +0.0002643298969, +0.0000000000000, -0.0001824742268, -0.0002579381443, -0.0002076288660, -0.0000125773196, +0.0002453608247, +0.0005032989691, +0.0006041237113, +0.0005096907216, +0.0003272164948, +0.0001131958763, -0.0000692783505, -0.0002202061856, -0.0003964948454, -0.0005915463918, -0.0006857731959, -0.0006731958763, -0.0005284536082, -0.0002643298969, -0.0000063917526, +0.0001573195876, +0.0002830927835, +0.0002769072165, +0.0001888659794, +0.0002202061856, +0.0003397938144, +0.0004152577320, +0.0004593814433, +0.0004529896907, +0.0003649484536, +0.0001888659794, +0.0000125773196, -0.0000063917526, +0.0000944329897, +0.0001888659794, +0.0002453608247, +0.0002769072165, +0.0002014432990, +0.0000000000000, -0.0002830927835, -0.0004971134021, -0.0004971134021, -0.0003082474227, -0.0000567010309, +0.0001573195876, +0.0002453608247, +0.0001635051546, +0.0000251546392, -0.0000818556701, -0.0001698969072, -0.0001824742268, -0.0001509278351, -0.0000441237113, +0.0001698969072, +0.0003713402062, +0.0003649484536, +0.0001950515464, -0.0000315463918, -0.0002705154639, -0.0004593814433, -0.0005663917526, -0.0005474226804, -0.0004026804124, -0.0002202061856, -0.0001070103093, -0.0000441237113, -0.0000315463918, -0.0000818556701, -0.0001760824742, -0.0002076288660, -0.0001195876289, +0.0000125773196, +0.0001509278351, +0.0002643298969, +0.0002705154639, +0.0001698969072, +0.0001070103093, +0.0001006185567, +0.0001195876289, +0.0001573195876, +0.0001573195876, +0.0000628865979, -0.0000818556701, -0.0002643298969, -0.0004468041237, -0.0005096907216, -0.0003649484536, -0.0000818556701, +0.0001635051546, +0.0003082474227, +0.0002956701031, +0.0000692783505, -0.0002830927835, -0.0005915463918, -0.0007173195876, -0.0006103092784, -0.0002894845361, +0.0001509278351, +0.0005725773196, +0.0007740206186, +0.0006731958763, +0.0003839175258, +0.0000315463918, -0.0003397938144, -0.0006606185567, -0.0007991752577, -0.0007237113402, -0.0004404123711, -0.0000692783505, +0.0002076288660, +0.0003839175258, +0.0004907216495, +0.0004781443299, +0.0003459793814, +0.0001824742268, +0.0000251546392, -0.0000944329897, -0.0001257731959, -0.0000063917526, +0.0001509278351, +0.0001950515464, +0.0000628865979, -0.0001509278351, -0.0003334020619, -0.0003713402062, -0.0002140206186, +0.0000000000000, +0.0001509278351, +0.0002579381443, +0.0002956701031, +0.0001950515464, +0.0000441237113, +0.0000000000000, +0.0000503092784, +0.0001635051546, +0.0002391752577, +0.0002579381443, +0.0002202061856, +0.0001257731959, +0.0000503092784, +0.0000754639175, +0.0001383505155, +0.0001635051546, +0.0001635051546, +0.0001321649485, +0.0000441237113, -0.0000692783505, -0.0001573195876, -0.0001383505155, -0.0000125773196, +0.0001447422680, +0.0003397938144, +0.0005222680412, +0.0006292783505, +0.0005851546392, +0.0004152577320, +0.0002705154639, +0.0001824742268, +0.0000628865979, -0.0000251546392, -0.0000377319588, -0.0000944329897, -0.0002391752577, -0.0002894845361, -0.0002014432990, -0.0000818556701, +0.0000000000000, +0.0000503092784, +0.0001006185567, +0.0001698969072, +0.0002202061856, +0.0002453608247, +0.0003082474227, +0.0004152577320, +0.0004781443299, +0.0004152577320, +0.0002517525773, +0.0000692783505, -0.0001321649485, -0.0003082474227, -0.0002956701031, -0.0001321649485, +0.0000000000000, +0.0000818556701, +0.0000880412371, +0.0000000000000, -0.0001195876289, -0.0002140206186, -0.0002769072165, -0.0002643298969, -0.0002517525773, -0.0002956701031, -0.0003082474227, -0.0002327835052, -0.0000944329897, +0.0000503092784, +0.0001509278351, +0.0001573195876, +0.0001006185567, -0.0000441237113, -0.0003146391753, -0.0005851546392, -0.0007298969072, -0.0006544329897, -0.0004655670103, -0.0003334020619, -0.0002327835052, -0.0000818556701, +0.0000315463918, +0.0001131958763, +0.0001950515464, +0.0002517525773, +0.0003082474227, +0.0003901030928, +0.0003901030928, +0.0001950515464, -0.0001006185567, -0.0003272164948, -0.0003397938144, -0.0001698969072, +0.0000503092784, +0.0002202061856, +0.0002579381443, +0.0001573195876, +0.0000000000000, -0.0001509278351, -0.0002391752577, -0.0002391752577, -0.0001698969072, -0.0000315463918, +0.0000944329897, +0.0000880412371, -0.0000628865979, -0.0002830927835, -0.0004719587629, -0.0005412371134, -0.0004781443299, -0.0002956701031, -0.0000692783505, +0.0000125773196, -0.0000503092784, -0.0001383505155, -0.0002265979381, -0.0003839175258, -0.0004845360825, -0.0004719587629, -0.0004468041237, -0.0003713402062, -0.0002705154639, -0.0002076288660, -0.0001131958763, +0.0000063917526, +0.0000818556701, +0.0001257731959, +0.0001447422680, +0.0000692783505, -0.0000315463918, -0.0001321649485, -0.0002014432990, -0.0002140206186, -0.0001573195876, -0.0000944329897, -0.0000063917526, +0.0000754639175, +0.0001195876289, +0.0000880412371, +0.0000189690722, +0.0000063917526, +0.0000441237113, +0.0000692783505, +0.0000880412371, +0.0001447422680, +0.0002076288660, +0.0002705154639, +0.0003272164948, +0.0002705154639, +0.0001070103093, -0.0000441237113, -0.0001509278351, -0.0002014432990, -0.0002265979381, -0.0002202061856, -0.0001070103093, +0.0000692783505, +0.0001509278351, +0.0000628865979, -0.0000692783505, -0.0001698969072, -0.0001888659794, -0.0001257731959, +0.0000251546392, +0.0002391752577, +0.0003839175258, +0.0004090721649, +0.0003459793814, +0.0002453608247, +0.0001447422680, +0.0000441237113, -0.0000441237113, -0.0001383505155, -0.0002705154639, -0.0003901030928, -0.0004026804124, -0.0002579381443, -0.0000063917526, +0.0002453608247, +0.0003713402062, +0.0003020618557, +0.0001573195876, +0.0000377319588, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000315463918, +0.0000880412371, +0.0001447422680, +0.0002265979381, +0.0003334020619, +0.0003775257732, +0.0002956701031, +0.0001447422680, +0.0000063917526, -0.0000628865979, -0.0001257731959, -0.0002076288660, -0.0001888659794, -0.0000189690722, +0.0001321649485, +0.0002014432990, +0.0001950515464, +0.0000818556701, -0.0000628865979, -0.0001321649485, -0.0000818556701, +0.0000000000000, +0.0001131958763, +0.0002327835052, +0.0002956701031, +0.0002643298969, +0.0001509278351, +0.0000189690722, -0.0000125773196, +0.0000251546392, +0.0000692783505, +0.0000628865979, +0.0000315463918, +0.0000000000000, -0.0000251546392, -0.0000189690722, +0.0000189690722, +0.0001195876289, +0.0002830927835, +0.0004152577320, +0.0004216494845, +0.0002830927835, +0.0000692783505, -0.0001447422680, -0.0003082474227, -0.0003649484536, -0.0003020618557, -0.0001257731959, +0.0000628865979, +0.0002327835052, +0.0003334020619, +0.0002769072165, +0.0000754639175, -0.0001383505155, -0.0002956701031, -0.0003523711340, -0.0002830927835, -0.0001321649485, +0.0000000000000, +0.0000567010309, +0.0000251546392, -0.0001573195876, -0.0004216494845, -0.0005725773196, -0.0005725773196, -0.0004468041237, -0.0002014432990, +0.0000567010309, +0.0001888659794, +0.0001383505155, +0.0000000000000, -0.0000880412371, -0.0000628865979, +0.0000503092784, +0.0002076288660, +0.0003523711340, +0.0003964948454, +0.0002894845361, +0.0001131958763, -0.0000628865979, -0.0002076288660, -0.0002014432990, -0.0000628865979, +0.0000628865979, +0.0001321649485, +0.0001006185567, -0.0000441237113, -0.0002140206186, -0.0002956701031, -0.0002579381443, -0.0001195876289, +0.0000377319588, +0.0001509278351, +0.0001824742268, +0.0001573195876, +0.0001006185567, +0.0000441237113, +0.0000063917526, +0.0000125773196, +0.0000251546392, -0.0000189690722, -0.0001321649485, -0.0002076288660, -0.0002076288660, -0.0001573195876, -0.0000628865979, +0.0000063917526, +0.0000315463918, +0.0000000000000, -0.0000377319588, -0.0000377319588, +0.0000000000000, +0.0000503092784, +0.0001321649485, +0.0002140206186, +0.0002265979381, +0.0001383505155, +0.0000503092784, +0.0000125773196, +0.0000125773196, +0.0000251546392, +0.0000377319588, +0.0000315463918, -0.0000189690722, -0.0000944329897, -0.0000818556701, +0.0000000000000, +0.0000441237113, +0.0000628865979, +0.0001006185567, +0.0001760824742, +0.0002517525773, +0.0002517525773, +0.0001888659794, +0.0001635051546, +0.0001698969072, +0.0001257731959, +0.0000628865979, +0.0000189690722, -0.0000503092784, -0.0001509278351, -0.0002076288660, -0.0001824742268, -0.0001006185567, -0.0000251546392, +0.0000315463918, +0.0000628865979, +0.0000315463918, -0.0000441237113, -0.0001257731959, -0.0001573195876, -0.0000880412371, +0.0000628865979, +0.0002517525773, +0.0003901030928, +0.0004593814433, +0.0004719587629, +0.0004529896907, +0.0004216494845, +0.0003587628866, +0.0002327835052, +0.0000818556701, -0.0000125773196, -0.0000567010309, -0.0001195876289, -0.0001573195876, -0.0001257731959, -0.0000567010309, +0.0000125773196, +0.0001321649485, +0.0002014432990, +0.0001447422680, +0.0000377319588, -0.0000377319588, -0.0001195876289, -0.0002014432990, -0.0002453608247, -0.0002265979381, -0.0001383505155, -0.0000063917526, +0.0000818556701, +0.0001195876289, +0.0001070103093, +0.0000818556701, +0.0000692783505, +0.0000189690722, -0.0000628865979, -0.0001070103093, -0.0000944329897, -0.0000754639175, -0.0000628865979, -0.0000567010309, -0.0000189690722, +0.0000441237113, +0.0000880412371, +0.0000189690722, -0.0001257731959, -0.0002769072165, -0.0003459793814, -0.0003082474227, -0.0001888659794, -0.0000189690722, +0.0001006185567, +0.0001447422680, +0.0001509278351, +0.0001509278351, +0.0001447422680, +0.0002014432990, +0.0004026804124, +0.0006103092784, +0.0006921649485, +0.0006480412371, +0.0004655670103, +0.0001760824742, -0.0000692783505, -0.0001888659794, -0.0001950515464, -0.0001509278351, -0.0001006185567, -0.0000628865979, -0.0000315463918, -0.0000251546392, -0.0000628865979, -0.0001257731959, -0.0002014432990, -0.0002956701031, -0.0004278350515, -0.0005600000000, -0.0005915463918, -0.0005158762887, -0.0004026804124, -0.0002769072165, -0.0001321649485, -0.0000315463918, +0.0000000000000, +0.0000063917526, +0.0000189690722, +0.0000818556701, +0.0001950515464, +0.0003082474227, +0.0003713402062, +0.0003459793814, +0.0002391752577, +0.0000441237113, -0.0002014432990, -0.0004152577320, -0.0004845360825, -0.0004152577320, -0.0002579381443, -0.0000251546392, +0.0001698969072, +0.0002769072165, +0.0002830927835, +0.0001257731959, -0.0001195876289, -0.0003208247423, -0.0004026804124, -0.0003649484536, -0.0001635051546, +0.0000944329897, +0.0002894845361, +0.0003523711340, +0.0002830927835, +0.0000944329897, -0.0000880412371, -0.0002014432990, -0.0002327835052, -0.0002140206186, -0.0001950515464, -0.0001950515464, -0.0002140206186, -0.0002202061856, -0.0001824742268, -0.0001131958763, -0.0000503092784, -0.0000063917526, +0.0000251546392, +0.0000628865979, +0.0000944329897, +0.0001195876289, +0.0001321649485, +0.0001573195876, +0.0002014432990, +0.0002517525773, +0.0002705154639, +0.0002705154639, +0.0002202061856, +0.0001195876289, +0.0000000000000, -0.0000944329897, -0.0001321649485, -0.0000944329897, +0.0000251546392, +0.0001698969072, +0.0002265979381, +0.0001635051546, +0.0000125773196, -0.0001635051546, -0.0003397938144, -0.0004404123711, -0.0004655670103, -0.0004468041237, -0.0004026804124, -0.0003334020619, -0.0002327835052, -0.0000944329897, +0.0000628865979, +0.0002014432990, +0.0002579381443, +0.0002391752577, +0.0001760824742, +0.0000377319588, -0.0001131958763, -0.0002140206186, -0.0002769072165, -0.0003208247423, -0.0003082474227, -0.0002705154639, -0.0002327835052, -0.0001888659794, -0.0001635051546, -0.0002140206186, -0.0003020618557, -0.0003587628866, -0.0003397938144, -0.0003020618557, -0.0002327835052, -0.0001131958763, +0.0000063917526, +0.0000944329897, +0.0001447422680, +0.0001509278351, +0.0001006185567, +0.0000251546392, -0.0000377319588, -0.0001070103093, -0.0001195876289, -0.0000567010309, +0.0000000000000, +0.0000251546392, +0.0000125773196, -0.0000377319588, -0.0001321649485, -0.0002076288660, -0.0002327835052, -0.0002140206186, -0.0001698969072, -0.0001070103093, -0.0000063917526, +0.0000754639175, +0.0001573195876, +0.0002265979381, +0.0002453608247, +0.0001824742268, +0.0000503092784, -0.0000880412371, -0.0002140206186, -0.0003082474227, -0.0003334020619, -0.0002202061856, -0.0000503092784, +0.0000315463918, +0.0000503092784, +0.0000251546392, +0.0000189690722, +0.0000628865979, +0.0000944329897, +0.0000000000000, -0.0001509278351, -0.0003334020619, -0.0004971134021, -0.0005915463918, -0.0005600000000, -0.0004404123711, -0.0002391752577, -0.0000063917526, +0.0001383505155, +0.0002202061856, +0.0002769072165, +0.0003082474227, +0.0002830927835, +0.0001950515464, +0.0001195876289, +0.0000692783505, +0.0000503092784, +0.0000692783505, +0.0000880412371, +0.0000880412371, +0.0001195876289, +0.0001824742268, +0.0002202061856, +0.0002453608247, +0.0002643298969, +0.0002453608247, +0.0001635051546, +0.0000567010309, -0.0000189690722, -0.0000754639175, -0.0001195876289, -0.0001383505155, -0.0000818556701, +0.0000944329897, +0.0003146391753, +0.0004278350515, +0.0003649484536, +0.0002076288660, +0.0000628865979, -0.0000315463918, -0.0000880412371, -0.0001195876289, -0.0001573195876, -0.0001509278351, -0.0001195876289, -0.0001195876289, -0.0001131958763, -0.0000567010309, +0.0000063917526, +0.0000818556701, +0.0001635051546, +0.0002202061856, +0.0002327835052, +0.0002140206186, +0.0001509278351, +0.0000567010309, -0.0000125773196, -0.0000377319588, +0.0000377319588, +0.0001824742268, +0.0002769072165, +0.0003020618557, +0.0002956701031, +0.0002643298969, +0.0002202061856, +0.0002076288660, +0.0002327835052, +0.0002517525773, +0.0002453608247, +0.0001888659794, +0.0000567010309, -0.0001257731959, -0.0002830927835, -0.0003082474227, -0.0001950515464, +0.0000377319588, +0.0003649484536, +0.0006544329897, +0.0008179381443, +0.0007927835052, +0.0006103092784, +0.0003901030928, +0.0001950515464, +0.0000441237113, -0.0000567010309, -0.0001447422680, -0.0001824742268, -0.0001698969072, -0.0001383505155, -0.0000692783505, +0.0000441237113, +0.0001573195876, +0.0002202061856, +0.0002391752577, +0.0002076288660, +0.0001131958763, +0.0000251546392, +0.0000000000000, +0.0000377319588, +0.0000944329897, +0.0001509278351, +0.0002327835052, +0.0003146391753, +0.0003397938144, +0.0003208247423, +0.0003082474227, +0.0002327835052, +0.0000880412371, -0.0000567010309, -0.0001698969072, -0.0002140206186, -0.0001824742268, -0.0000944329897, +0.0000315463918, +0.0001635051546, +0.0002453608247, +0.0003020618557, +0.0003523711340, +0.0003713402062, +0.0003901030928, +0.0004152577320, +0.0004593814433, +0.0004529896907, +0.0003272164948, +0.0001257731959, -0.0000189690722, -0.0001509278351, -0.0002453608247, -0.0002202061856, -0.0000944329897, +0.0000189690722, +0.0000880412371, +0.0000567010309, -0.0000503092784, -0.0001383505155, -0.0001635051546, -0.0001447422680, -0.0000692783505, +0.0000000000000, +0.0000377319588, +0.0001195876289, +0.0002140206186, +0.0002579381443, +0.0002956701031, +0.0003397938144, +0.0003775257732, +0.0003964948454, +0.0003713402062, +0.0003146391753, +0.0002830927835, +0.0003082474227, +0.0003649484536, +0.0004404123711, +0.0004845360825, +0.0003964948454, +0.0002202061856, +0.0000628865979, -0.0000754639175, -0.0002265979381, -0.0002769072165, -0.0002014432990, -0.0000692783505, +0.0000567010309, +0.0001509278351, +0.0001447422680, +0.0000628865979, -0.0000315463918, -0.0001321649485, -0.0001447422680, -0.0000377319588, +0.0000818556701, +0.0001321649485, +0.0000754639175, -0.0000880412371, -0.0002894845361, -0.0004152577320, -0.0004468041237, -0.0004090721649, -0.0003334020619, -0.0002327835052, -0.0000944329897, +0.0000754639175, +0.0002140206186, +0.0002643298969, +0.0002769072165, +0.0002643298969, +0.0002014432990, +0.0001006185567, +0.0000125773196, -0.0000818556701, -0.0002391752577, -0.0003713402062, -0.0004090721649, -0.0003272164948, -0.0001195876289, +0.0001321649485, +0.0003334020619, +0.0004404123711, +0.0004719587629, +0.0004152577320, +0.0002894845361, +0.0001383505155, -0.0000189690722, -0.0001321649485, -0.0001195876289, -0.0000503092784, +0.0000125773196, +0.0001006185567, +0.0001950515464, +0.0002517525773, +0.0002579381443, +0.0001698969072, +0.0000000000000, -0.0002391752577, -0.0004781443299, -0.0006292783505, -0.0006731958763, -0.0005474226804, -0.0002202061856, +0.0001698969072, +0.0004593814433, +0.0005851546392, +0.0005348453608, +0.0003587628866, +0.0001509278351, -0.0000125773196, -0.0001006185567, -0.0000628865979, -0.0000377319588, -0.0001383505155, -0.0002705154639, -0.0003775257732, -0.0004593814433, -0.0004593814433, -0.0003587628866, -0.0002265979381, -0.0001635051546, -0.0002705154639, -0.0004907216495, -0.0006480412371, -0.0006670103093, -0.0005284536082, -0.0002327835052, +0.0001006185567, +0.0003523711340, +0.0004845360825, +0.0004845360825, +0.0003334020619, +0.0001383505155, -0.0000063917526, -0.0001257731959, -0.0002076288660, -0.0002327835052, -0.0002140206186, -0.0002076288660, -0.0002265979381, -0.0002265979381, -0.0002140206186, -0.0002202061856, -0.0002391752577, -0.0002517525773, -0.0002517525773, -0.0002453608247, -0.0002517525773, -0.0002327835052, -0.0001321649485, +0.0000063917526, +0.0001447422680, +0.0002517525773, +0.0002830927835, +0.0002265979381, +0.0001573195876, +0.0001195876289, +0.0000754639175, +0.0000125773196, -0.0000377319588, -0.0001070103093, -0.0001888659794, -0.0002579381443, -0.0002830927835, -0.0002517525773, -0.0002076288660, -0.0001760824742, -0.0001509278351, -0.0001509278351, -0.0002140206186, -0.0003082474227, -0.0003839175258, -0.0003839175258, -0.0003020618557, -0.0001573195876, +0.0000125773196, +0.0002076288660, +0.0003649484536, +0.0004278350515, +0.0003649484536, +0.0002076288660, +0.0000441237113, -0.0000754639175, -0.0001383505155, -0.0001195876289, -0.0000567010309, -0.0000063917526, +0.0000000000000, -0.0000189690722, -0.0000503092784, -0.0000567010309, -0.0000567010309, -0.0000818556701, -0.0001257731959, -0.0002140206186, -0.0003020618557, -0.0003208247423, -0.0002769072165, -0.0002076288660, -0.0001006185567, +0.0000000000000, +0.0000503092784, +0.0000503092784, +0.0000315463918, +0.0000125773196, +0.0000503092784, +0.0001006185567, +0.0001257731959, +0.0001698969072, +0.0002391752577, +0.0002705154639, +0.0002517525773, +0.0002140206186, +0.0001195876289, -0.0000503092784, -0.0002769072165, -0.0004468041237, -0.0005538144330, -0.0005915463918, -0.0004971134021, -0.0003208247423, -0.0002076288660, -0.0001888659794, -0.0001635051546, -0.0000880412371, +0.0000628865979, +0.0002894845361, +0.0005032989691, +0.0006228865979, +0.0005915463918, +0.0004278350515, +0.0002643298969, +0.0002140206186, +0.0002705154639, +0.0003523711340, +0.0003964948454, +0.0003713402062, +0.0002517525773, +0.0000628865979, -0.0001006185567, -0.0002327835052, -0.0003146391753, -0.0003459793814, -0.0003208247423, -0.0002705154639, -0.0001950515464, -0.0000880412371, -0.0000063917526, +0.0000251546392, +0.0000441237113, +0.0000628865979, +0.0000377319588, -0.0000315463918, -0.0001195876289, -0.0001447422680, -0.0001195876289, -0.0000692783505, +0.0000125773196, +0.0001573195876, +0.0002705154639, +0.0003020618557, +0.0002643298969, +0.0002014432990, +0.0001573195876, +0.0001195876289, +0.0001195876289, +0.0002076288660, +0.0003272164948, +0.0003649484536, +0.0003020618557, +0.0002076288660, +0.0001195876289, +0.0000251546392, -0.0000754639175, -0.0001888659794, -0.0002769072165, -0.0003208247423, -0.0003146391753, -0.0002391752577, -0.0001070103093, +0.0000754639175, +0.0002956701031, +0.0004655670103, +0.0005412371134, +0.0005096907216, +0.0004090721649, +0.0003082474227, +0.0002140206186, +0.0001321649485, +0.0000818556701, +0.0000441237113, -0.0000377319588, -0.0001635051546, -0.0002265979381, -0.0001888659794, -0.0001195876289, -0.0000628865979, -0.0000251546392, +0.0000189690722, +0.0000441237113, +0.0000377319588, +0.0000441237113, +0.0000818556701, +0.0000944329897, +0.0000628865979, +0.0000189690722, +0.0000000000000, +0.0000251546392, +0.0000818556701, +0.0001321649485, +0.0002140206186, +0.0002769072165, +0.0002643298969, +0.0001509278351, +0.0000000000000, -0.0001070103093, -0.0001888659794, -0.0002453608247, -0.0003020618557, -0.0003082474227, -0.0002140206186, -0.0000692783505, +0.0000125773196, +0.0000692783505, +0.0001447422680, +0.0001824742268, +0.0001383505155, +0.0000000000000, -0.0001509278351, -0.0003082474227, -0.0003901030928, -0.0003587628866, -0.0002076288660, +0.0000063917526, +0.0002265979381, +0.0003523711340, +0.0003839175258, +0.0003397938144, +0.0002265979381, +0.0000754639175, +0.0000000000000, +0.0000063917526, +0.0000441237113, +0.0000377319588, +0.0000251546392, +0.0000000000000, -0.0000567010309, -0.0001006185567, -0.0000880412371, -0.0000754639175, -0.0000692783505, -0.0000125773196, +0.0000880412371, +0.0001950515464, +0.0002391752577, +0.0002076288660, +0.0001698969072, +0.0001383505155, +0.0000628865979, -0.0000503092784, -0.0001383505155, -0.0001760824742, -0.0001950515464, -0.0002140206186, -0.0002014432990, -0.0001195876289, +0.0000000000000, +0.0000692783505, +0.0000880412371, +0.0000944329897, +0.0001006185567, +0.0000567010309, -0.0000315463918, -0.0001131958763, -0.0001321649485, -0.0000880412371, +0.0000000000000, +0.0000944329897, +0.0001573195876, +0.0001447422680, +0.0000692783505, -0.0000441237113, -0.0001698969072, -0.0002140206186, -0.0001760824742, -0.0000944329897, -0.0000189690722, +0.0000189690722, +0.0000251546392, +0.0000000000000, -0.0000377319588, -0.0000692783505, -0.0000567010309, +0.0000000000000, +0.0000503092784, +0.0000880412371, +0.0000944329897, +0.0000503092784, -0.0000377319588, -0.0001321649485, -0.0001760824742, -0.0001383505155, -0.0000441237113, +0.0000441237113, +0.0001070103093, +0.0001383505155, +0.0001257731959, +0.0000880412371, +0.0000567010309, +0.0000377319588, +0.0000125773196, +0.0000000000000, -0.0000063917526, -0.0000251546392, -0.0000692783505, -0.0001257731959, -0.0001760824742, -0.0001888659794, -0.0001635051546, -0.0001321649485, -0.0001006185567, -0.0000754639175, -0.0000503092784, -0.0000189690722, +0.0000000000000, +0.0000063917526, +0.0000567010309, +0.0001635051546, +0.0002643298969, +0.0003146391753, +0.0003272164948, +0.0003020618557, +0.0002391752577, +0.0001698969072, +0.0001070103093, +0.0000692783505, +0.0000377319588, +0.0000125773196, +0.0000000000000, -0.0000189690722, -0.0000441237113, -0.0000628865979, -0.0000754639175, -0.0001195876289, -0.0001760824742, -0.0001888659794, -0.0001447422680, -0.0000567010309, +0.0000503092784, +0.0001760824742, +0.0002265979381, +0.0001573195876, +0.0000189690722, -0.0001195876289, -0.0002327835052, -0.0002769072165, -0.0002453608247, -0.0001888659794, -0.0001509278351, -0.0001447422680, -0.0001573195876, -0.0001635051546, -0.0001573195876, -0.0001509278351, -0.0001321649485, -0.0000628865979, +0.0000000000000, +0.0000251546392, +0.0000628865979, +0.0001131958763, +0.0001635051546, +0.0001888659794, +0.0001698969072, +0.0000818556701, -0.0000503092784, -0.0002202061856, -0.0003587628866, -0.0003964948454, -0.0003020618557, -0.0001447422680, +0.0000000000000, +0.0001131958763, +0.0001824742268, +0.0001824742268, +0.0001257731959, +0.0000754639175, +0.0000189690722, -0.0000125773196, -0.0000503092784, -0.0000692783505, -0.0000754639175, -0.0000754639175, -0.0000944329897, -0.0001257731959, -0.0001257731959, -0.0001131958763, -0.0001131958763, -0.0000944329897, -0.0000567010309, -0.0000315463918, -0.0000125773196, +0.0000000000000, -0.0000125773196, -0.0000251546392, -0.0000315463918, -0.0000189690722, +0.0000251546392, +0.0000944329897, +0.0001573195876, +0.0001698969072, +0.0001195876289, +0.0000000000000, -0.0001321649485, -0.0002517525773, -0.0003020618557, -0.0002517525773, -0.0001573195876, -0.0000818556701, -0.0000315463918, +0.0000063917526, +0.0000251546392, +0.0000189690722, +0.0000125773196, +0.0000567010309, +0.0001257731959, +0.0001698969072, +0.0001760824742, +0.0001383505155, +0.0000503092784, -0.0000628865979, -0.0001888659794, -0.0002579381443, -0.0002453608247, -0.0001321649485, +0.0000315463918, +0.0002140206186, +0.0003146391753, +0.0003334020619, +0.0002956701031, +0.0002202061856, +0.0001195876289, +0.0000503092784, +0.0000315463918, +0.0000189690722, +0.0000125773196, +0.0000125773196, +0.0000189690722, +0.0000251546392, +0.0000125773196, +0.0000000000000, +0.0000063917526, +0.0000251546392, +0.0000567010309, +0.0000944329897, +0.0001257731959, +0.0001195876289, +0.0000692783505, -0.0000189690722, -0.0001573195876, -0.0002453608247, -0.0002579381443, -0.0002140206186, -0.0001447422680, -0.0000818556701, -0.0000441237113, +0.0000000000000, +0.0000189690722, +0.0000441237113, +0.0000628865979, +0.0000818556701, +0.0001006185567, +0.0001321649485, +0.0001509278351, +0.0001447422680, +0.0001257731959, +0.0000880412371, +0.0000189690722, -0.0000567010309, -0.0001131958763, -0.0001131958763, -0.0000692783505, +0.0000000000000, +0.0000818556701, +0.0001573195876, +0.0001760824742, +0.0001698969072, +0.0001509278351, +0.0001257731959, +0.0001070103093, +0.0000818556701, +0.0000628865979, +0.0000692783505, +0.0000754639175, +0.0000692783505, +0.0000503092784, +0.0000000000000, -0.0000692783505, -0.0001131958763, -0.0001131958763, -0.0000944329897, -0.0000818556701, -0.0000944329897, -0.0001195876289, -0.0001257731959, -0.0001195876289, -0.0000692783505, +0.0000000000000, +0.0000628865979, +0.0000692783505, +0.0000189690722, -0.0000377319588, -0.0001070103093, -0.0001509278351, -0.0001321649485, -0.0000063917526, +0.0001573195876, +0.0002830927835, +0.0002769072165, +0.0001447422680, -0.0000441237113, -0.0002265979381, -0.0003082474227, -0.0002830927835, -0.0001760824742, -0.0000315463918, +0.0000944329897, +0.0002014432990, +0.0002327835052, +0.0001888659794, +0.0001447422680, +0.0001257731959, +0.0001321649485, +0.0001195876289, +0.0000692783505, +0.0000189690722, -0.0000063917526, -0.0000503092784, -0.0000944329897, -0.0000754639175, +0.0000000000000, +0.0000818556701, +0.0001383505155, +0.0001698969072, +0.0001447422680, +0.0000441237113, -0.0001006185567, -0.0002076288660, -0.0001950515464, -0.0000818556701, +0.0000567010309, +0.0002014432990, +0.0002956701031, +0.0003146391753, +0.0002265979381, +0.0000818556701, -0.0000189690722, -0.0000944329897, -0.0001447422680, -0.0001635051546, -0.0001573195876, -0.0001257731959, -0.0000628865979, -0.0000189690722, +0.0000000000000, +0.0000063917526, +0.0000000000000, -0.0000503092784, -0.0001070103093, -0.0001006185567, -0.0000692783505, -0.0000251546392, +0.0000315463918, +0.0000880412371, +0.0001257731959, +0.0001447422680, +0.0001257731959, +0.0000754639175, +0.0000315463918, +0.0000125773196, +0.0000189690722, +0.0000377319588, +0.0000503092784, +0.0000441237113, +0.0000441237113, +0.0000503092784, +0.0000944329897, +0.0001635051546, +0.0002453608247, +0.0002830927835, +0.0002643298969, +0.0001824742268, +0.0000754639175, +0.0000063917526, +0.0000000000000, +0.0000315463918, +0.0001006185567, +0.0001760824742, +0.0002202061856, +0.0002014432990, +0.0001383505155, +0.0000628865979, +0.0000251546392, +0.0000441237113, +0.0000692783505, +0.0000628865979, +0.0000125773196, -0.0000628865979, -0.0001824742268, -0.0002453608247, -0.0002014432990, -0.0000880412371, +0.0000567010309, +0.0002076288660, +0.0002956701031, +0.0002769072165, +0.0001698969072, +0.0000125773196, -0.0000944329897, -0.0001321649485, -0.0001131958763, -0.0000692783505, -0.0000063917526, +0.0000692783505, +0.0001509278351, +0.0001888659794, +0.0002140206186, +0.0002265979381, +0.0002327835052, +0.0002140206186, +0.0001760824742, +0.0001070103093, +0.0000125773196, -0.0000628865979, -0.0001447422680, -0.0001698969072, -0.0001321649485, -0.0000441237113, +0.0000377319588, +0.0001006185567, +0.0001195876289, +0.0000818556701, +0.0000251546392, +0.0000000000000, +0.0000000000000, +0.0000125773196, +0.0000125773196, +0.0000063917526, +0.0000000000000, +0.0000000000000, -0.0000063917526, -0.0000063917526, -0.0000063917526, +0.0000063917526, +0.0000441237113, +0.0000880412371, +0.0001195876289, +0.0001321649485, +0.0000944329897, +0.0000315463918, +0.0000000000000, -0.0000251546392, -0.0000567010309, -0.0000628865979, -0.0000315463918, +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000125773196, +0.0000251546392, +0.0000503092784, +0.0000628865979, +0.0000315463918, -0.0000063917526, -0.0000315463918, -0.0000503092784, -0.0000441237113, -0.0000125773196, +0.0000189690722, +0.0000754639175, +0.0001195876289, +0.0001070103093, +0.0000503092784, +0.0000063917526, -0.0000315463918, -0.0000754639175, -0.0001131958763, -0.0001006185567, -0.0000251546392, +0.0000628865979, +0.0001383505155, +0.0001635051546, +0.0001131958763, +0.0000000000000, -0.0001195876289, -0.0001888659794, -0.0002140206186, -0.0001888659794, -0.0001257731959, -0.0000377319588, +0.0000189690722, +0.0000251546392, +0.0000000000000, +0.0000000000000, +0.0000189690722, +0.0000567010309, +0.0000754639175, +0.0000692783505, +0.0000441237113, +0.0000000000000, -0.0000315463918, -0.0000377319588, +0.0000000000000, +0.0000441237113, +0.0000692783505, +0.0000567010309, +0.0000000000000, -0.0000944329897, -0.0001950515464, -0.0002579381443, -0.0002453608247, -0.0001573195876, -0.0000251546392, +0.0001070103093, +0.0002265979381, +0.0002517525773, +0.0001824742268, +0.0000818556701, +0.0000000000000, -0.0000441237113, -0.0000567010309, -0.0000189690722, +0.0000251546392, +0.0000628865979, +0.0000441237113, +0.0000063917526, -0.0000251546392, -0.0000503092784, -0.0000567010309, -0.0000628865979, -0.0000628865979, -0.0000628865979, -0.0000692783505, -0.0000880412371, -0.0000880412371, -0.0000628865979, -0.0000315463918, +0.0000000000000, +0.0000251546392, +0.0000441237113, +0.0000377319588, +0.0000251546392, +0.0000315463918, +0.0000441237113, +0.0000251546392, +0.0000000000000, -0.0000189690722, -0.0000377319588, -0.0000503092784, -0.0000503092784, -0.0000315463918, +0.0000000000000, +0.0000503092784, +0.0000692783505, +0.0000818556701, +0.0000880412371, +0.0000880412371, +0.0000567010309, +0.0000000000000, -0.0001006185567, -0.0001760824742, -0.0002014432990, -0.0001573195876, -0.0000567010309, +0.0000315463918, +0.0000818556701, +0.0000818556701, +0.0000189690722, -0.0000692783505, -0.0001635051546, -0.0002453608247, -0.0002830927835, -0.0002517525773, -0.0001573195876, -0.0000503092784, +0.0000189690722, +0.0000692783505, +0.0000944329897, +0.0001006185567, +0.0000818556701, +0.0000441237113, +0.0000000000000, -0.0000189690722, -0.0000251546392, -0.0000377319588, -0.0000628865979, -0.0000754639175, -0.0000692783505, -0.0000377319588, +0.0000063917526, +0.0000818556701, +0.0001447422680, +0.0001698969072, +0.0001257731959, +0.0000189690722, -0.0000818556701, -0.0001509278351, -0.0001635051546, -0.0001131958763, -0.0000377319588, +0.0000189690722, +0.0000441237113, +0.0000125773196, -0.0000628865979, -0.0001509278351, -0.0001950515464, -0.0002014432990, -0.0001698969072, -0.0001131958763, -0.0000567010309, -0.0000377319588, -0.0000628865979, -0.0000944329897, -0.0000880412371, -0.0000441237113, +0.0000000000000, +0.0000441237113, +0.0000692783505, +0.0000315463918, -0.0000567010309, -0.0001824742268, -0.0002769072165, -0.0003082474227, -0.0002769072165, -0.0001888659794, -0.0000692783505, +0.0000063917526, +0.0000628865979, +0.0000692783505, +0.0000189690722, -0.0000503092784, -0.0001006185567, -0.0001321649485, -0.0001195876289, -0.0000818556701, -0.0000189690722, +0.0000189690722, +0.0000315463918, +0.0000000000000, -0.0000441237113, -0.0001006185567, -0.0001509278351, -0.0001760824742, -0.0001635051546, -0.0001447422680, -0.0001321649485, -0.0001257731959, -0.0001131958763, -0.0000818556701, -0.0000377319588, +0.0000000000000, +0.0000251546392, +0.0000441237113, +0.0000441237113, +0.0000441237113, +0.0000567010309, +0.0000880412371, +0.0001006185567, +0.0000754639175, +0.0000063917526, -0.0000754639175, -0.0001888659794, -0.0002769072165, -0.0003082474227, -0.0002769072165, -0.0002076288660, -0.0001070103093, -0.0000189690722, +0.0000063917526, +0.0000000000000, -0.0000315463918, -0.0000628865979, -0.0000692783505, -0.0000880412371, -0.0001006185567, -0.0001006185567, -0.0001070103093, -0.0001131958763, -0.0000880412371, -0.0000503092784, -0.0000063917526, +0.0000377319588, +0.0000818556701, +0.0000880412371, +0.0000503092784, -0.0000377319588, -0.0001447422680, -0.0002014432990, -0.0002140206186, -0.0001888659794, -0.0001257731959, -0.0000315463918, +0.0000315463918, +0.0000754639175, +0.0000944329897, +0.0000818556701, +0.0000567010309, +0.0000189690722, +0.0000000000000, +0.0000000000000, +0.0000000000000, -0.0000125773196, -0.0000251546392, -0.0000251546392, -0.0000251546392, +0.0000000000000, +0.0000315463918, +0.0000944329897, +0.0001573195876, +0.0002076288660, +0.0002202061856, +0.0001950515464, +0.0001383505155, +0.0000692783505, -0.0000063917526, -0.0001006185567, -0.0001573195876, -0.0001509278351, -0.0001070103093, -0.0000315463918, +0.0000251546392, +0.0000818556701, +0.0001070103093, +0.0000944329897, +0.0000818556701, +0.0000754639175, +0.0000628865979, +0.0000441237113, +0.0000567010309, +0.0001070103093, +0.0001573195876, +0.0001698969072, +0.0001383505155, +0.0001070103093, +0.0000818556701, +0.0000628865979, +0.0000692783505, +0.0001131958763, +0.0001321649485, +0.0001257731959, +0.0000880412371, +0.0000441237113, +0.0000125773196, +0.0000000000000, -0.0000063917526, +0.0000189690722, +0.0000880412371, +0.0001383505155, +0.0001573195876, +0.0001573195876, +0.0001447422680, +0.0001257731959, +0.0000880412371, +0.0000628865979, +0.0000567010309, +0.0000567010309, +0.0000315463918, +0.0000000000000, -0.0000125773196, -0.0000251546392, -0.0000189690722, +0.0000000000000, +0.0000503092784, +0.0001447422680, +0.0002076288660, +0.0002265979381, +0.0002076288660, +0.0001509278351, +0.0000567010309, -0.0000377319588, -0.0001131958763, -0.0001195876289, -0.0000503092784, +0.0000251546392, +0.0000880412371, +0.0001195876289, +0.0001195876289, +0.0001070103093, +0.0000754639175, +0.0000125773196, -0.0000063917526, +0.0000000000000, +0.0000251546392, +0.0000567010309, +0.0000754639175, +0.0000880412371, +0.0001195876289, +0.0001257731959, +0.0000944329897, +0.0000377319588, +0.0000000000000, -0.0000503092784, -0.0000692783505, -0.0000377319588, +0.0000000000000, +0.0000063917526, +0.0000125773196, +0.0000000000000, -0.0000251546392, -0.0000567010309, -0.0000441237113, +0.0000063917526, +0.0001006185567, +0.0001888659794, +0.0002517525773, +0.0002769072165, +0.0002769072165, +0.0002579381443, +0.0002265979381, +0.0002014432990, +0.0002014432990, +0.0001824742268, +0.0001195876289, +0.0000503092784, +0.0000000000000, -0.0000441237113, -0.0000754639175, -0.0000944329897, -0.0000944329897, -0.0000628865979, -0.0000315463918, -0.0000125773196, +0.0000000000000, +0.0000063917526, +0.0000125773196, +0.0000251546392, +0.0000441237113, +0.0000944329897, +0.0001509278351, +0.0001760824742, +0.0001888659794, +0.0001760824742 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/21-matchless-chieftain-sm57-off.h000066400000000000000000002145011247673406200270130ustar00rootroot00000000000000float matchless_chieftain_sm57_off[] = { +0.0001511926606, +0.0001566972477, +0.0001566972477, +0.0001566972477, +0.0001623853211, +0.0001680733945, +0.0001680733945, +0.0001792660550, +0.0001847706422, +0.0001904587156, +0.0001904587156, +0.0002016513761, +0.0002071559633, +0.0002128440367, +0.0002128440367, +0.0002183486239, +0.0002240366972, +0.0002240366972, +0.0002183486239, +0.0002240366972, +0.0002183486239, +0.0002183486239, +0.0002128440367, +0.0002071559633, +0.0002071559633, +0.0002071559633, +0.0002016513761, +0.0002016513761, +0.0001959633028, +0.0002016513761, +0.0001904587156, +0.0001847706422, +0.0001735779817, +0.0001680733945, +0.0001511926606, +0.0001343119266, +0.0001119266055, +0.0001007339450, +0.0000840366972, +0.0000671559633, +0.0000504587156, +0.0000447706422, +0.0000280733945, +0.0000168807339, +0.0000000000000, -0.0000056880734, -0.0000223853211, -0.0000447706422, -0.0000728440367, -0.0000895412844, -0.0001176146789, -0.0001400000000, -0.0001623853211, -0.0001792660550, -0.0001959633028, -0.0002183486239, -0.0002519266055, -0.0002800000000, -0.0003135779817, -0.0003359633028, -0.0003640366972, -0.0003752293578, -0.0003919266055, -0.0003976146789, -0.0004143119266, -0.0004255045872, -0.0004535779817, -0.0004759633028, -0.0005040366972, -0.0005207339450, -0.0005431192661, -0.0005488073394, -0.0005543119266, -0.0005600000000, -0.0005711926606, -0.0005711926606, -0.0005823853211, -0.0005823853211, -0.0005935779817, -0.0005935779817, -0.0005878899083, -0.0005766972477, -0.0005655045872, -0.0005431192661, -0.0005264220183, -0.0004928440367, -0.0004759633028, -0.0004423853211, -0.0004143119266, -0.0003752293578, -0.0003471559633, -0.0003135779817, -0.0002855045872, -0.0002464220183, -0.0002183486239, -0.0001680733945, -0.0001176146789, -0.0000504587156, +0.0000000000000, +0.0000671559633, +0.0001400000000, +0.0002240366972, +0.0002911926606, +0.0003695412844, +0.0004366972477, +0.0005152293578, +0.0005878899083, +0.0006776146789, +0.0007559633028, +0.0008566972477, +0.0009462385321, +0.0010414678899, +0.0011200000000, +0.0012207339450, +0.0013102752294, +0.0014166972477, +0.0015119266055, +0.0016350458716, +0.0017469724771, +0.0018645871560, +0.0019543119266, +0.0020605504587, +0.0021333944954, +0.0022229357798, +0.0022845871560, +0.0023741284404, +0.0024526605505, +0.0025590825688, +0.0026374311927, +0.0027438532110, +0.0028165137615, +0.0029117431193, +0.0029622018349, +0.0030405504587, +0.0030741284404, +0.0031300917431, +0.0031245871560, +0.0031581651376, +0.0031357798165, +0.0031693577982, +0.0031245871560, +0.0031469724771, +0.0030853211009, +0.0031188990826, +0.0030181651376, +0.0030462385321, +0.0028893577982, +0.0029117431193, +0.0026877064220, +0.0027381651376, +0.0024022018349, +0.0025365137615, +0.0020045871560, +0.0023910091743, +0.0015007339450, +0.0020381651376, +0.0017302752294, +0.0006383486239, +0.0018143119266, +0.0010471559633, +0.0006271559633, +0.0001343119266, +0.0002464220183, -0.0001007339450, +0.0000335779817, -0.0005319266055, -0.0003695412844, -0.0010638532110, -0.0009855045872, -0.0015231192661, -0.0017302752294, -0.0020831192661, -0.0023741284404, -0.0027157798165, -0.0032422018349, -0.0031805504587, -0.0028838532110, -0.0042948623853, -0.0065458715596, -0.0058963302752, -0.0033486238532, -0.0035500917431, -0.0062546788991, -0.0036229357798, +0.0045915596330, -0.0037796330275, -0.0148332110092, +0.0062939449541, +0.0453620183486, +0.0444772477064, -0.0210823853211, -0.1025390825688, -0.1561379816514, -0.1834581651376, -0.1786370642202, -0.1175234862385, -0.0273089908257, +0.0380882568807, +0.0621383486239, +0.0517398165138, +0.0079344954128, -0.0153651376147, -0.0025365137615, +0.0080409174312, +0.0194640366972, +0.0423157798165, +0.0483130275229, +0.0478985321101, +0.0450484403670, +0.0363803669725, +0.0385754128440, +0.0512247706422, +0.0413807339450, +0.0109190825688, -0.0123022018349, -0.0354060550459, -0.0486992660550, -0.0297335779817, -0.0066522935780, +0.0166587155963, +0.0411455045872, +0.0406135779817, +0.0217933944954, +0.0147603669725, +0.0076154128440, +0.0044460550459, +0.0064618348624, -0.0014110091743, -0.0078337614679, -0.0050732110092, -0.0054708256881, -0.0038972477064, +0.0035053211009, +0.0110255045872, +0.0144077064220, +0.0082704587156, -0.0021278899083, -0.0137972477064, -0.0202759633028, -0.0287201834862, -0.0369739449541, -0.0291344954128, -0.0102583486239, +0.0031300917431, +0.0146541284404, +0.0231710091743, +0.0217262385321, +0.0112719266055, -0.0047651376147, -0.0217095412844, -0.0217319266055, -0.0040484403670, +0.0149508256881, +0.0281880733945, +0.0348124770642, +0.0330150458716, +0.0294033027523, +0.0264858715596, +0.0249236697248, +0.0283056880734, +0.0272137614679, +0.0197271559633, +0.0163282568807, +0.0146372477064, +0.0056275229358, -0.0078001834862, -0.0206623853211, -0.0273034862385, -0.0254163302752, -0.0177561467890, -0.0075201834862, -0.0004816513761, +0.0034829357798, +0.0069434862385, +0.0131310091743, +0.0231038532110, +0.0330093577982, +0.0376011009174, +0.0372818348624, +0.0350812844037, +0.0268946788991, +0.0153203669725, +0.0105216513761, +0.0106840366972, +0.0090376146789, +0.0049724770642, -0.0021390825688, -0.0073130275229, -0.0081249541284, -0.0070611009174, -0.0028500917431, +0.0037741284404, +0.0076770642202, +0.0027326605505, -0.0067194495413, -0.0106390825688, -0.0062099082569, +0.0037908256881, +0.0157963302752, +0.0250860550459, +0.0274434862385, +0.0209143119266, +0.0104935779817, +0.0026822018349, +0.0008455045872, +0.0024022018349, +0.0045691743119, +0.0081025688073, +0.0110647706422, +0.0081025688073, -0.0010807339450, -0.0102247706422, -0.0139877064220, -0.0103928440367, -0.0014614678899, +0.0057508256881, +0.0056051376147, +0.0013159633028, -0.0022117431193, -0.0035836697248, -0.0042165137615, -0.0023069724771, +0.0010919266055, +0.0036733944954, +0.0046924770642, +0.0043565137615, +0.0043172477064, +0.0030517431193, +0.0019543119266, +0.0032588990826, +0.0056499082569, +0.0081473394495, +0.0092111926606, +0.0074809174312, +0.0040484403670, -0.0010695412844, -0.0050284403670, -0.0063387155963, -0.0086737614679, -0.0156115596330, -0.0231093577982, -0.0256515596330, -0.0242067889908, -0.0206400000000, -0.0132486238532, -0.0043229357798, +0.0022733944954, +0.0057170642202, +0.0077442201835, +0.0064842201835, +0.0000000000000, -0.0069546788991, -0.0097321100917, -0.0090711926606, -0.0064563302752, -0.0045300917431, -0.0037012844037, -0.0018422018349, -0.0013719266055, -0.0040429357798, -0.0066746788991, -0.0081080733945, -0.0087297247706, -0.0079568807339, -0.0082313761468, -0.0101183486239, -0.0127669724771, -0.0147996330275, -0.0142341284404, -0.0116807339450, -0.0080521100917, -0.0045803669725, -0.0023014678899, -0.0022622018349, -0.0033541284404, -0.0044629357798, -0.0058739449541, -0.0064058715596, -0.0053979816514, -0.0051179816514, -0.0066522935780, -0.0100400000000, -0.0153372477064, -0.0197271559633, -0.0206176146789, -0.0191673394495, -0.0171849541284, -0.0126269724771, -0.0075034862385, -0.0052972477064, -0.0057955963303, -0.0068651376147, -0.0068539449541, -0.0048267889908, -0.0024581651376, -0.0015510091743, -0.0019766972477, -0.0029845871560, -0.0040988990826, -0.0050899082569, -0.0054372477064, -0.0047260550459, -0.0032086238532, -0.0015902752294, -0.0006159633028, -0.0011983486239, -0.0027438532110, -0.0054203669725, -0.0088192660550, -0.0107231192661, -0.0102135779817, -0.0074642201835, -0.0048267889908, -0.0028500917431, -0.0011535779817, -0.0005990825688, -0.0001400000000, +0.0017190825688, +0.0025981651376, +0.0030012844037, +0.0039812844037, +0.0029845871560, -0.0003247706422, -0.0033653211009, -0.0052915596330, -0.0050675229358, -0.0016686238532, +0.0033598165138, +0.0067754128440, +0.0059579816514, +0.0009071559633, -0.0062379816514, -0.0126717431193, -0.0168154128440, -0.0179689908257, -0.0153875229358, -0.0094464220183, -0.0030012844037, +0.0021950458716, +0.0054875229358, +0.0063106422018, +0.0038245871560, +0.0002576146789, -0.0025590825688, -0.0042779816514, -0.0040708256881, -0.0024693577982, -0.0015902752294, -0.0025198165138, -0.0032365137615, -0.0027438532110, -0.0019766972477, -0.0027269724771, -0.0046027522936, -0.0061091743119, -0.0061818348624, -0.0060979816514, -0.0063554128440, -0.0066466055046, -0.0063946788991, -0.0053196330275, -0.0047203669725, -0.0052579816514, -0.0050115596330, -0.0027662385321, -0.0000728440367, +0.0020045871560, +0.0039420183486, +0.0058682568807, +0.0071673394495, +0.0073522935780, +0.0067977981651, +0.0070049541284, +0.0076937614679, +0.0067642201835, +0.0047091743119, +0.0037405504587, +0.0030069724771, +0.0013607339450, -0.0001735779817, -0.0007447706422, +0.0000111926606, +0.0021669724771, +0.0046308256881, +0.0067082568807, +0.0085337614679, +0.0101183486239, +0.0103816513761, +0.0087576146789, +0.0058851376147, +0.0026765137615, +0.0004590825688, +0.0001792660550, +0.0017245871560, +0.0046588990826, +0.0072625688073, +0.0080185321101, +0.0072122935780, +0.0051796330275, +0.0026374311927, +0.0004088073394, -0.0012710091743, -0.0020719266055, -0.0020493577982, -0.0010919266055, +0.0007055045872, +0.0019374311927, +0.0015455045872, +0.0007055045872, +0.0002743119266, -0.0005878899083, -0.0019990825688, -0.0025141284404, -0.0014055045872, +0.0014333944954, +0.0052467889908, +0.0086344954128, +0.0106000000000, +0.0114678899083, +0.0109862385321, +0.0086737614679, +0.0056108256881, +0.0038805504587, +0.0036060550459, +0.0044179816514, +0.0054875229358, +0.0052691743119, +0.0040765137615, +0.0029733944954, +0.0023910091743, +0.0027717431193, +0.0043677064220, +0.0060755963303, +0.0067642201835, +0.0061315596330, +0.0049667889908, +0.0035612844037, +0.0025141284404, +0.0024974311927, +0.0036229357798, +0.0050675229358, +0.0058515596330, +0.0055827522936, +0.0049891743119, +0.0047091743119, +0.0047539449541, +0.0048603669725, +0.0049836697248, +0.0054427522936, +0.0061763302752, +0.0069546788991, +0.0075873394495, +0.0075818348624, +0.0067139449541, +0.0052579816514, +0.0034772477064, +0.0016910091743, +0.0000504587156, -0.0013495412844, -0.0019655045872, -0.0014447706422, -0.0001680733945, +0.0005488073394, +0.0006047706422, +0.0010638532110, +0.0017245871560, +0.0019150458716, +0.0024302752294, +0.0038412844037, +0.0055546788991, +0.0065346788991, +0.0062267889908, +0.0052860550459, +0.0042108256881, +0.0032645871560, +0.0025814678899, +0.0024526605505, +0.0027550458716, +0.0027605504587, +0.0019543119266, +0.0009071559633, +0.0004590825688, +0.0001847706422, -0.0004647706422, -0.0008400000000, +0.0001119266055, +0.0018814678899, +0.0033877064220, +0.0039588990826, +0.0039141284404, +0.0034717431193, +0.0024693577982, +0.0014390825688, +0.0010750458716, +0.0010638532110, +0.0009462385321, +0.0008288073394, +0.0008231192661, +0.0011423853211, +0.0013886238532, +0.0009350458716, +0.0000616513761, -0.0003192660550, -0.0006214678899, -0.0012150458716, -0.0017807339450, -0.0020045871560, -0.0019150458716, -0.0016014678899, -0.0011590825688, -0.0004423853211, +0.0008511926606, +0.0016183486239, +0.0012655045872, +0.0004200000000, -0.0004590825688, -0.0011535779817, -0.0013719266055, -0.0009743119266, +0.0001400000000, +0.0012935779817, +0.0015510091743, +0.0012823853211, +0.0008455045872, +0.0002016513761, -0.0003695412844, -0.0004143119266, -0.0001455045872, -0.0003752293578, -0.0012710091743, -0.0022343119266, -0.0029229357798, -0.0033598165138, -0.0037741284404, -0.0042667889908, -0.0040036697248, -0.0033765137615, -0.0031412844037, -0.0029005504587, -0.0020943119266, -0.0007671559633, +0.0003304587156, +0.0006552293578, +0.0006776146789, +0.0009855045872, +0.0012150458716, +0.0010638532110, +0.0008511926606, +0.0004871559633, -0.0004702752294, -0.0015790825688, -0.0021390825688, -0.0021166972477, -0.0018366972477, -0.0012431192661, -0.0004535779817, +0.0001400000000, +0.0004647706422, +0.0001511926606, -0.0004928440367, -0.0009911926606, -0.0013102752294, -0.0013607339450, -0.0011926605505, -0.0012710091743, -0.0014726605505, -0.0014222018349, -0.0013271559633, -0.0013998165138, -0.0012319266055, -0.0009519266055, -0.0009688073394, -0.0012095412844, -0.0015007339450, -0.0015902752294, -0.0017695412844, -0.0020550458716, -0.0022062385321, -0.0020998165138, -0.0017190825688, -0.0013383486239, -0.0009966972477, -0.0007335779817, -0.0009631192661, -0.0016071559633, -0.0022005504587, -0.0023629357798, -0.0020102752294, -0.0013886238532, -0.0004200000000, +0.0006159633028, +0.0013886238532, +0.0017022018349, +0.0012262385321, +0.0000000000000, -0.0012095412844, -0.0020381651376, -0.0024302752294, -0.0025253211009, -0.0025814678899, -0.0028277064220, -0.0034100917431, -0.0040317431193, -0.0044067889908, -0.0043508256881, -0.0037405504587, -0.0028726605505, -0.0021726605505, -0.0018814678899, -0.0022902752294, -0.0029341284404, -0.0030069724771, -0.0025198165138, -0.0016631192661, -0.0005095412844, +0.0005040366972, +0.0011031192661, +0.0011647706422, +0.0006888073394, -0.0000671559633, -0.0008511926606, -0.0014278899083, -0.0017974311927, -0.0020214678899, -0.0021222018349, -0.0022845871560, -0.0024693577982, -0.0025422018349, -0.0024974311927, -0.0024414678899, -0.0023181651376, -0.0019150458716, -0.0010247706422, -0.0000783486239, +0.0007559633028, +0.0014222018349, +0.0018143119266, +0.0020943119266, +0.0020998165138, +0.0014838532110, +0.0005264220183, -0.0001735779817, -0.0005488073394, -0.0009126605505, -0.0012823853211, -0.0014055045872, -0.0015790825688, -0.0018086238532, -0.0017919266055, -0.0016238532110, -0.0015343119266, -0.0017357798165, -0.0020886238532, -0.0023069724771, -0.0023966972477, -0.0024750458716, -0.0024078899083, -0.0018086238532, -0.0005095412844, +0.0007390825688, +0.0012990825688, +0.0013271559633, +0.0011871559633, +0.0007278899083, +0.0000447706422, -0.0004590825688, -0.0006495412844, -0.0007447706422, -0.0010862385321, -0.0016350458716, -0.0021445871560, -0.0025310091743, -0.0024581651376, -0.0017245871560, -0.0004535779817, +0.0006831192661, +0.0010359633028, +0.0007111926606, +0.0001511926606, -0.0005600000000, -0.0012374311927, -0.0014278899083, -0.0011143119266, -0.0005935779817, -0.0001847706422, -0.0000111926606, +0.0002855045872, +0.0008231192661, +0.0013886238532, +0.0018422018349, +0.0021838532110, +0.0021893577982, +0.0020045871560, +0.0016126605505, +0.0012262385321, +0.0010414678899, +0.0008064220183, +0.0004200000000, +0.0003640366972, +0.0006047706422, +0.0008176146789, +0.0008064220183, +0.0005207339450, +0.0005431192661, +0.0011759633028, +0.0016574311927, +0.0013943119266, +0.0008566972477, +0.0004535779817, +0.0001176146789, -0.0000056880734, +0.0001680733945, +0.0004759633028, +0.0009576146789, +0.0013550458716, +0.0011031192661, +0.0007111926606, +0.0004983486239, +0.0002464220183, +0.0001400000000, +0.0004255045872, +0.0007055045872, +0.0008959633028, +0.0007055045872, +0.0002688073394, -0.0000895412844, -0.0008847706422, -0.0017583486239, -0.0014447706422, -0.0006943119266, -0.0002743119266, +0.0002800000000, +0.0005376146789, +0.0004816513761, +0.0004871559633, +0.0002576146789, +0.0001064220183, +0.0003135779817, +0.0004423853211, +0.0006102752294, +0.0009407339450, +0.0014166972477, +0.0020269724771, +0.0022622018349, +0.0022455045872, +0.0022229357798, +0.0019038532110, +0.0012878899083, +0.0004816513761, -0.0002407339450, -0.0006383486239, -0.0010359633028, -0.0012598165138, -0.0008623853211, -0.0000280733945, +0.0008847706422, +0.0015286238532, +0.0016407339450, +0.0017583486239, +0.0020102752294, +0.0022229357798, +0.0024581651376, +0.0025814678899, +0.0025926605505, +0.0024862385321, +0.0021502752294, +0.0017862385321, +0.0016126605505, +0.0013998165138, +0.0012543119266, +0.0012543119266, +0.0011423853211, +0.0008847706422, +0.0004590825688, +0.0000000000000, -0.0001959633028, -0.0000840366972, +0.0000335779817, +0.0003471559633, +0.0009014678899, +0.0015174311927, +0.0019543119266, +0.0020774311927, +0.0019766972477, +0.0017638532110, +0.0013047706422, +0.0007950458716, +0.0004143119266, -0.0000111926606, -0.0004200000000, -0.0004816513761, -0.0003528440367, -0.0002966972477, -0.0004759633028, -0.0008455045872, -0.0010695412844, -0.0009350458716, -0.0005095412844, +0.0000280733945, +0.0005823853211, +0.0011311926606, +0.0014838532110, +0.0014447706422, +0.0011647706422, +0.0007111926606, +0.0003416513761, +0.0002016513761, +0.0001735779817, +0.0003640366972, +0.0008064220183, +0.0011086238532, +0.0012935779817, +0.0013495412844, +0.0010974311927, +0.0007111926606, +0.0004871559633, +0.0003135779817, +0.0002911926606, +0.0003416513761, +0.0002352293578, +0.0000783486239, +0.0001288073394, +0.0004478899083, +0.0008678899083, +0.0011926605505, +0.0015007339450, +0.0014333944954, +0.0008902752294, +0.0000559633028, -0.0008064220183, -0.0014838532110, -0.0016407339450, -0.0014559633028, -0.0009462385321, -0.0002295412844, +0.0005040366972, +0.0011143119266, +0.0014110091743, +0.0012935779817, +0.0010414678899, +0.0006664220183, +0.0002911926606, +0.0000335779817, -0.0000280733945, +0.0001511926606, +0.0005431192661, +0.0008400000000, +0.0009743119266, +0.0009462385321, +0.0007223853211, +0.0000504587156, -0.0007783486239, -0.0014166972477, -0.0017695412844, -0.0017414678899, -0.0013271559633, -0.0009576146789, -0.0007335779817, -0.0006552293578, -0.0007223853211, -0.0007614678899, -0.0005095412844, -0.0000616513761, +0.0004759633028, +0.0009014678899, +0.0010078899083, +0.0009631192661, +0.0008231192661, +0.0004759633028, +0.0000616513761, -0.0001288073394, -0.0001007339450, -0.0001288073394, -0.0003640366972, -0.0008959633028, -0.0013495412844, -0.0015343119266, -0.0013719266055, -0.0009743119266, -0.0004816513761, -0.0001007339450, +0.0000447706422, -0.0001904587156, -0.0005600000000, -0.0006495412844, -0.0003078899083, +0.0001735779817, +0.0007502752294, +0.0012095412844, +0.0013159633028, +0.0009183486239, +0.0003078899083, -0.0000504587156, -0.0000168807339, -0.0000447706422, -0.0002911926606, -0.0004535779817, -0.0004928440367, -0.0006214678899, -0.0007390825688, -0.0007838532110, -0.0006664220183, -0.0004702752294, -0.0002352293578, +0.0000111926606, +0.0002016513761, +0.0000895412844, -0.0001792660550, -0.0005655045872, -0.0008847706422, -0.0009462385321, -0.0008623853211, -0.0008007339450, -0.0005823853211, -0.0004143119266, -0.0003247706422, -0.0002407339450, -0.0001231192661, +0.0000840366972, +0.0003078899083, +0.0003192660550, +0.0002183486239, +0.0000447706422, -0.0001904587156, -0.0004702752294, -0.0006943119266, -0.0009183486239, -0.0011255045872, -0.0013774311927, -0.0017190825688, -0.0019766972477, -0.0019990825688, -0.0017078899083, -0.0010807339450, -0.0003528440367, +0.0002295412844, +0.0005264220183, +0.0004366972477, +0.0000783486239, -0.0003192660550, -0.0006495412844, -0.0007950458716, -0.0007447706422, -0.0005431192661, -0.0003528440367, -0.0003752293578, -0.0005319266055, -0.0007726605505, -0.0012486238532, -0.0017245871560, -0.0018086238532, -0.0015231192661, -0.0010919266055, -0.0006383486239, -0.0002855045872, -0.0000447706422, +0.0000840366972, +0.0000168807339, -0.0001176146789, -0.0001623853211, -0.0001566972477, -0.0001735779817, -0.0001343119266, -0.0002016513761, -0.0003023853211, -0.0004535779817, -0.0006719266055, -0.0007559633028, -0.0006495412844, -0.0004366972477, -0.0001959633028, -0.0001007339450, -0.0001064220183, -0.0001959633028, -0.0004647706422, -0.0009350458716, -0.0013662385321, -0.0016462385321, -0.0017750458716, -0.0017078899083, -0.0013326605505, -0.0007895412844, -0.0002295412844, +0.0001176146789, +0.0003192660550, +0.0002352293578, +0.0000056880734, -0.0002128440367, -0.0003359633028, -0.0004311926606, -0.0004928440367, -0.0006607339450, -0.0009295412844, -0.0011423853211, -0.0011423853211, -0.0012486238532, -0.0015286238532, -0.0018757798165, -0.0020214678899, -0.0020550458716, -0.0019262385321, -0.0015959633028, -0.0010078899083, -0.0003023853211, +0.0005152293578, +0.0012431192661, +0.0015845871560, +0.0014390825688, +0.0009238532110, +0.0001623853211, -0.0004478899083, -0.0007950458716, -0.0008455045872, -0.0008064220183, -0.0008176146789, -0.0009183486239, -0.0012319266055, -0.0015959633028, -0.0015622018349, -0.0014166972477, -0.0012710091743, -0.0010695412844, -0.0009126605505, -0.0009631192661, -0.0008902752294, -0.0004928440367, +0.0001959633028, +0.0006495412844, +0.0007726605505, +0.0006102752294, +0.0004143119266, +0.0001288073394, -0.0000335779817, -0.0000952293578, +0.0000000000000, +0.0002911926606, +0.0006776146789, +0.0006552293578, +0.0001400000000, -0.0007614678899, -0.0016910091743, -0.0022678899083, -0.0024750458716, -0.0024805504587, -0.0022678899083, -0.0020269724771, -0.0016574311927, -0.0011143119266, -0.0005207339450, +0.0002576146789, +0.0013326605505, +0.0021950458716, +0.0025310091743, +0.0020662385321, +0.0007447706422, -0.0009238532110, -0.0022957798165, -0.0029286238532, -0.0026262385321, -0.0015231192661, +0.0000783486239, +0.0016407339450, +0.0024750458716, +0.0022622018349, +0.0013326605505, +0.0002352293578, -0.0005376146789, -0.0010247706422, -0.0012823853211, -0.0012766972477, -0.0011366972477, -0.0009743119266, -0.0006888073394, -0.0002464220183, +0.0001847706422, +0.0006719266055, +0.0011031192661, +0.0013214678899, +0.0012766972477, +0.0010471559633, +0.0007614678899, +0.0005152293578, +0.0003078899083, +0.0002352293578, +0.0002855045872, +0.0004031192661, +0.0006271559633, +0.0008511926606, +0.0008288073394, +0.0005040366972, +0.0000056880734, -0.0005040366972, -0.0009295412844, -0.0010526605505, -0.0008735779817, -0.0004759633028, +0.0000111926606, +0.0005655045872, +0.0008847706422, +0.0008902752294, +0.0006383486239, +0.0002071559633, -0.0001176146789, -0.0001735779817, -0.0001511926606, -0.0000168807339, +0.0002855045872, +0.0005431192661, +0.0005431192661, +0.0002855045872, -0.0001792660550, -0.0005655045872, -0.0009519266055, -0.0013438532110, -0.0014559633028, -0.0010919266055, -0.0005823853211, -0.0000671559633, +0.0004088073394, +0.0009014678899, +0.0013214678899, +0.0017638532110, +0.0019319266055, +0.0017862385321, +0.0014278899083, +0.0009350458716, +0.0001904587156, -0.0005543119266, -0.0010359633028, -0.0009462385321, -0.0005990825688, -0.0001959633028, +0.0001119266055, +0.0004200000000, +0.0006552293578, +0.0009350458716, +0.0011871559633, +0.0014895412844, +0.0016295412844, +0.0013550458716, +0.0006495412844, -0.0000728440367, -0.0006214678899, -0.0007390825688, -0.0003919266055, +0.0002911926606, +0.0010302752294, +0.0017078899083, +0.0020045871560, +0.0018702752294, +0.0014950458716, +0.0010919266055, +0.0005264220183, -0.0000895412844, -0.0007502752294, -0.0012431192661, -0.0012655045872, -0.0007559633028, +0.0000000000000, +0.0009743119266, +0.0018702752294, +0.0024526605505, +0.0026093577982, +0.0021950458716, +0.0012655045872, +0.0002966972477, -0.0005152293578, -0.0009855045872, -0.0009462385321, -0.0005711926606, -0.0000783486239, +0.0004366972477, +0.0007950458716, +0.0011311926606, +0.0015845871560, +0.0019319266055, +0.0019262385321, +0.0015902752294, +0.0009462385321, +0.0001400000000, -0.0006495412844, -0.0010862385321, -0.0009014678899, -0.0002407339450, +0.0004702752294, +0.0010190825688, +0.0012543119266, +0.0011926605505, +0.0008735779817, +0.0004143119266, +0.0000000000000, -0.0003023853211, -0.0004200000000, -0.0001623853211, +0.0002576146789, +0.0005600000000, +0.0006607339450, +0.0004983486239, +0.0001735779817, +0.0000504587156, +0.0002128440367, +0.0004702752294, +0.0007166972477, +0.0008735779817, +0.0009183486239, +0.0007559633028, +0.0003864220183, +0.0000447706422, -0.0001735779817, -0.0004983486239, -0.0006664220183, -0.0005823853211, -0.0002128440367, +0.0002911926606, +0.0008343119266, +0.0013438532110, +0.0017357798165, +0.0016966972477, +0.0012710091743, +0.0005543119266, -0.0001847706422, -0.0007950458716, -0.0010695412844, -0.0010583486239, -0.0007335779817, -0.0002240366972, +0.0002295412844, +0.0004647706422, +0.0006214678899, +0.0006943119266, +0.0006607339450, +0.0004983486239, +0.0003471559633, +0.0001288073394, -0.0001007339450, -0.0003023853211, -0.0002519266055, -0.0001343119266, -0.0000280733945, +0.0000447706422, +0.0001959633028, +0.0003359633028, +0.0004590825688, +0.0002855045872, +0.0000000000000, -0.0001792660550, -0.0002576146789, -0.0002800000000, -0.0002407339450, -0.0002183486239, -0.0001007339450, +0.0000280733945, +0.0002016513761, +0.0002743119266, +0.0002295412844, +0.0001623853211, +0.0001288073394, +0.0000447706422, -0.0000335779817, -0.0001847706422, -0.0003359633028, -0.0002576146789, +0.0000000000000, +0.0001735779817, +0.0002240366972, +0.0001792660550, +0.0000559633028, -0.0001511926606, -0.0004088073394, -0.0005543119266, -0.0003976146789, -0.0000952293578, +0.0001400000000, +0.0001511926606, +0.0000671559633, -0.0000056880734, -0.0001119266055, -0.0002352293578, -0.0002688073394, -0.0002464220183, -0.0001792660550, -0.0000559633028, +0.0000280733945, +0.0000728440367, +0.0002183486239, +0.0004928440367, +0.0006159633028, +0.0005823853211, +0.0005990825688, +0.0006102752294, +0.0004143119266, +0.0002407339450, +0.0002016513761, +0.0002071559633, +0.0002631192661, +0.0004088073394, +0.0004478899083, +0.0002352293578, -0.0001231192661, -0.0004590825688, -0.0007447706422, -0.0007335779817, -0.0002911926606, +0.0002240366972, +0.0004816513761, +0.0005823853211, +0.0004423853211, -0.0000335779817, -0.0005543119266, -0.0007111926606, -0.0006102752294, -0.0003583486239, -0.0000335779817, +0.0001455045872, +0.0000783486239, -0.0000280733945, -0.0002407339450, -0.0003807339450, -0.0002295412844, +0.0002855045872, +0.0008623853211, +0.0012598165138, +0.0013383486239, +0.0011478899083, +0.0007390825688, +0.0002016513761, -0.0002128440367, -0.0000952293578, +0.0002743119266, +0.0006383486239, +0.0010526605505, +0.0012766972477, +0.0010414678899, +0.0006552293578, +0.0003023853211, -0.0000392660550, -0.0002743119266, -0.0001735779817, +0.0001176146789, +0.0003247706422, +0.0004647706422, +0.0007223853211, +0.0007278899083, +0.0005040366972, +0.0002240366972, +0.0001455045872, +0.0001959633028, +0.0001455045872, +0.0002071559633, +0.0002855045872, -0.0001735779817, -0.0007223853211, -0.0008176146789, -0.0007671559633, -0.0006888073394, -0.0004590825688, -0.0003416513761, -0.0003976146789, -0.0003976146789, -0.0004590825688, -0.0008007339450, -0.0012543119266, -0.0014166972477, -0.0013438532110, -0.0013159633028, -0.0009911926606, -0.0002128440367, +0.0005040366972, +0.0010359633028, +0.0013998165138, +0.0012655045872, +0.0006047706422, -0.0001623853211, -0.0008064220183, -0.0011702752294, -0.0012598165138, -0.0008847706422, -0.0000056880734, +0.0007166972477, +0.0008902752294, +0.0006831192661, +0.0002407339450, -0.0001566972477, -0.0006159633028, -0.0009966972477, -0.0011086238532, -0.0009966972477, -0.0008566972477, -0.0004311926606, +0.0000000000000, +0.0002966972477, +0.0006102752294, +0.0007000000000, +0.0004702752294, +0.0003528440367, +0.0002911926606, +0.0001792660550, -0.0001064220183, -0.0007671559633, -0.0013998165138, -0.0016798165138, -0.0016519266055, -0.0011926605505, -0.0003807339450, +0.0003304587156, +0.0007111926606, +0.0007278899083, +0.0003359633028, -0.0002519266055, -0.0008959633028, -0.0012710091743, -0.0011702752294, -0.0006888073394, -0.0002688073394, +0.0000447706422, +0.0002407339450, +0.0002407339450, +0.0000447706422, -0.0000504587156, +0.0000280733945, +0.0002631192661, +0.0004088073394, +0.0005990825688, +0.0007055045872, +0.0005935779817, +0.0004088073394, +0.0002183486239, +0.0000000000000, -0.0003640366972, -0.0007726605505, -0.0009295412844, -0.0008176146789, -0.0006271559633, -0.0004816513761, -0.0003416513761, -0.0002352293578, -0.0001847706422, -0.0002183486239, -0.0001680733945, -0.0000111926606, +0.0000895412844, +0.0000952293578, +0.0000559633028, -0.0000447706422, -0.0001400000000, -0.0000223853211, +0.0003023853211, +0.0006719266055, +0.0009911926606, +0.0013102752294, +0.0015062385321, +0.0015062385321, +0.0013047706422, +0.0009911926606, +0.0008678899083, +0.0008119266055, +0.0004647706422, +0.0001119266055, -0.0001288073394, -0.0003864220183, -0.0005543119266, -0.0004647706422, -0.0000840366972, +0.0004478899083, +0.0008623853211, +0.0010414678899, +0.0008176146789, +0.0003192660550, -0.0000840366972, -0.0001735779817, +0.0000000000000, +0.0003192660550, +0.0005990825688, +0.0008176146789, +0.0009743119266, +0.0010247706422, +0.0009519266055, +0.0007783486239, +0.0004200000000, -0.0000728440367, -0.0005711926606, -0.0009183486239, -0.0011535779817, -0.0012319266055, -0.0011478899083, -0.0008343119266, -0.0003807339450, +0.0000335779817, +0.0003583486239, +0.0006943119266, +0.0007447706422, +0.0004759633028, +0.0000671559633, -0.0002519266055, -0.0005319266055, -0.0006831192661, -0.0006495412844, -0.0003752293578, -0.0000335779817, +0.0003304587156, +0.0005878899083, +0.0006271559633, +0.0005040366972, +0.0003192660550, +0.0000504587156, -0.0001288073394, -0.0002631192661, -0.0003864220183, -0.0004590825688, -0.0004478899083, -0.0003471559633, -0.0001680733945, +0.0000000000000, +0.0001623853211, +0.0002464220183, +0.0001792660550, +0.0001288073394, +0.0001680733945, +0.0002688073394, +0.0004816513761, +0.0007166972477, +0.0007000000000, +0.0006159633028, +0.0007111926606, +0.0007783486239, +0.0007838532110, +0.0008511926606, +0.0006607339450, +0.0001007339450, -0.0004366972477, -0.0008007339450, -0.0009743119266, -0.0009071559633, -0.0005711926606, -0.0000671559633, +0.0002800000000, +0.0004816513761, +0.0006440366972, +0.0007166972477, +0.0005878899083, +0.0003304587156, +0.0000168807339, -0.0001623853211, -0.0003528440367, -0.0005319266055, -0.0005655045872, -0.0004478899083, -0.0003304587156, -0.0001455045872, -0.0000335779817, -0.0000223853211, -0.0001064220183, -0.0002295412844, -0.0003359633028, -0.0003192660550, -0.0002183486239, -0.0000559633028, -0.0000840366972, -0.0003471559633, -0.0006326605505, -0.0006440366972, -0.0003807339450, -0.0000280733945, +0.0001511926606, +0.0001680733945, +0.0000728440367, +0.0000000000000, -0.0000223853211, +0.0000895412844, +0.0003583486239, +0.0006719266055, +0.0007223853211, +0.0004983486239, +0.0001735779817, -0.0001119266055, -0.0003807339450, -0.0003416513761, +0.0000783486239, +0.0005990825688, +0.0008511926606, +0.0008176146789, +0.0005935779817, +0.0004088073394, +0.0003304587156, +0.0003192660550, +0.0003695412844, +0.0004200000000, +0.0002183486239, -0.0002071559633, -0.0006383486239, -0.0009576146789, -0.0011366972477, -0.0010359633028, -0.0006776146789, -0.0002183486239, +0.0002688073394, +0.0007000000000, +0.0009183486239, +0.0009238532110, +0.0008511926606, +0.0007726605505, +0.0006440366972, +0.0003192660550, -0.0000728440367, -0.0003359633028, -0.0003695412844, -0.0003023853211, -0.0001680733945, +0.0000559633028, +0.0004311926606, +0.0006831192661, +0.0006719266055, +0.0005040366972, +0.0003416513761, +0.0002183486239, +0.0001566972477, +0.0000616513761, +0.0000000000000, -0.0000952293578, -0.0002464220183, -0.0003135779817, -0.0001007339450, +0.0001847706422, +0.0005319266055, +0.0008735779817, +0.0011255045872, +0.0011255045872, +0.0008623853211, +0.0003247706422, -0.0002240366972, -0.0007726605505, -0.0011031192661, -0.0010919266055, -0.0007838532110, -0.0003135779817, +0.0001288073394, +0.0003583486239, +0.0004816513761, +0.0004031192661, +0.0001343119266, -0.0001119266055, -0.0001680733945, -0.0001511926606, -0.0000783486239, -0.0001119266055, -0.0002464220183, -0.0003135779817, -0.0002576146789, -0.0002071559633, -0.0000504587156, +0.0001792660550, +0.0005095412844, +0.0007335779817, +0.0006664220183, +0.0003192660550, -0.0001007339450, -0.0004983486239, -0.0007950458716, -0.0009183486239, -0.0008566972477, -0.0008231192661, -0.0008678899083, -0.0008455045872, -0.0007111926606, -0.0005264220183, -0.0002071559633, +0.0001064220183, +0.0002352293578, +0.0001847706422, +0.0000559633028, -0.0001904587156, -0.0005264220183, -0.0007000000000, -0.0005207339450, -0.0001680733945, +0.0000111926606, +0.0000168807339, -0.0000392660550, -0.0000671559633, -0.0000952293578, -0.0000895412844, +0.0000280733945, +0.0002519266055, +0.0002855045872, +0.0000559633028, -0.0003192660550, -0.0006440366972, -0.0007335779817, -0.0006383486239, -0.0004983486239, -0.0002407339450, +0.0000392660550, +0.0001400000000, +0.0000111926606, -0.0001119266055, -0.0002128440367, -0.0001904587156, -0.0001680733945, -0.0001680733945, -0.0001959633028, -0.0002576146789, -0.0004366972477, -0.0005655045872, -0.0005878899083, -0.0004702752294, -0.0002800000000, -0.0001176146789, -0.0000952293578, -0.0001119266055, -0.0002631192661, -0.0005152293578, -0.0008231192661, -0.0010807339450, -0.0012543119266, -0.0013102752294, -0.0010807339450, -0.0004759633028, +0.0001847706422, +0.0007783486239, +0.0010695412844, +0.0010414678899, +0.0007559633028, +0.0002464220183, -0.0002352293578, -0.0004366972477, -0.0003583486239, -0.0000952293578, +0.0000952293578, +0.0001455045872, +0.0001288073394, +0.0000000000000, -0.0002800000000, -0.0004255045872, -0.0003135779817, -0.0002128440367, -0.0002911926606, -0.0005488073394, -0.0008119266055, -0.0007895412844, -0.0005264220183, -0.0002631192661, +0.0000000000000, +0.0003135779817, +0.0005207339450, +0.0004702752294, +0.0002743119266, +0.0000504587156, -0.0001566972477, -0.0002519266055, -0.0001231192661, +0.0000335779817, +0.0000728440367, -0.0000223853211, -0.0002519266055, -0.0004535779817, -0.0004647706422, -0.0003807339450, -0.0001064220183, +0.0003359633028, +0.0007223853211, +0.0008343119266, +0.0007166972477, +0.0004816513761, +0.0002743119266, +0.0001400000000, +0.0000783486239, +0.0000728440367, +0.0001735779817, +0.0002743119266, +0.0002576146789, +0.0001288073394, +0.0000000000000, -0.0000616513761, -0.0000504587156, +0.0000335779817, +0.0002071559633, +0.0003416513761, +0.0003919266055, +0.0002631192661, +0.0000111926606, -0.0001735779817, -0.0003135779817, -0.0003752293578, -0.0002352293578, -0.0000223853211, +0.0001119266055, +0.0001959633028, +0.0001566972477, +0.0000223853211, -0.0000392660550, +0.0000000000000, +0.0001288073394, +0.0003078899083, +0.0004647706422, +0.0005543119266, +0.0004590825688, +0.0002352293578, +0.0000559633028, +0.0000000000000, -0.0000056880734, -0.0000559633028, -0.0001176146789, -0.0001566972477, -0.0002855045872, -0.0003976146789, -0.0003416513761, -0.0001511926606, +0.0000280733945, +0.0002016513761, +0.0003247706422, +0.0004366972477, +0.0004759633028, +0.0003919266055, +0.0002128440367, +0.0000783486239, +0.0000504587156, +0.0001176146789, +0.0001959633028, +0.0002688073394, +0.0002800000000, +0.0002631192661, +0.0001792660550, -0.0000280733945, -0.0003078899083, -0.0004478899083, -0.0004816513761, -0.0004200000000, -0.0002352293578, -0.0000168807339, +0.0001343119266, +0.0002576146789, +0.0003416513761, +0.0003192660550, +0.0002128440367, +0.0000559633028, -0.0001455045872, -0.0003023853211, -0.0003023853211, -0.0002352293578, -0.0001511926606, -0.0000895412844, -0.0000168807339, +0.0000335779817, -0.0000447706422, -0.0002743119266, -0.0004088073394, -0.0004200000000, -0.0004200000000, -0.0004759633028, -0.0004871559633, -0.0004311926606, -0.0003078899083, -0.0001904587156, -0.0000335779817, +0.0001566972477, +0.0003976146789, +0.0005711926606, +0.0005655045872, +0.0002855045872, -0.0000392660550, -0.0002464220183, -0.0002800000000, -0.0001792660550, -0.0000056880734, +0.0000783486239, +0.0001680733945, +0.0003023853211, +0.0004031192661, +0.0002911926606, +0.0000504587156, -0.0002855045872, -0.0006552293578, -0.0008400000000, -0.0007278899083, -0.0004255045872, -0.0000447706422, +0.0002295412844, +0.0003583486239, +0.0003247706422, +0.0002240366972, +0.0000504587156, -0.0001904587156, -0.0004983486239, -0.0007559633028, -0.0009800000000, -0.0010471559633, -0.0008511926606, -0.0004759633028, -0.0001231192661, +0.0001455045872, +0.0002631192661, +0.0002128440367, +0.0001792660550, +0.0001959633028, +0.0001680733945, +0.0001176146789, +0.0002071559633, +0.0004535779817, +0.0007000000000, +0.0008119266055, +0.0008007339450, +0.0006664220183, +0.0004702752294, +0.0001904587156, -0.0000895412844, -0.0003247706422, -0.0003471559633, -0.0002183486239, -0.0000056880734, +0.0002071559633, +0.0004816513761, +0.0006719266055, +0.0007335779817, +0.0006271559633, +0.0004255045872, +0.0001566972477, -0.0000952293578, -0.0002295412844, -0.0001511926606, -0.0000447706422, +0.0000000000000, +0.0000504587156, +0.0002464220183, +0.0004088073394, +0.0004590825688, +0.0003528440367, +0.0001455045872, -0.0001400000000, -0.0004200000000, -0.0006102752294, -0.0005823853211, -0.0003864220183, -0.0001119266055, +0.0001231192661, +0.0003078899083, +0.0002855045872, +0.0001231192661, -0.0000616513761, -0.0002071559633, -0.0002855045872, -0.0002071559633, -0.0000559633028, +0.0001176146789, +0.0002519266055, +0.0002911926606, +0.0002352293578, +0.0001792660550, +0.0001623853211, +0.0001735779817, +0.0001119266055, -0.0000335779817, -0.0002016513761, -0.0002800000000, -0.0002407339450, -0.0001176146789, +0.0000000000000, +0.0001231192661, +0.0001735779817, +0.0001064220183, +0.0000616513761, +0.0001231192661, +0.0001735779817, +0.0001231192661, +0.0000840366972, +0.0001735779817, +0.0002464220183, +0.0001959633028, +0.0001680733945, +0.0002183486239, +0.0002911926606, +0.0002519266055, +0.0001680733945, +0.0000504587156, -0.0000280733945, -0.0001566972477, -0.0002688073394, -0.0003192660550, -0.0001231192661, +0.0001343119266, +0.0002966972477, +0.0003078899083, +0.0003752293578, +0.0004759633028, +0.0005600000000, +0.0004590825688, +0.0002464220183, -0.0000056880734, -0.0002240366972, -0.0004478899083, -0.0005488073394, -0.0005431192661, -0.0004031192661, -0.0002631192661, -0.0001176146789, -0.0000280733945, -0.0000392660550, -0.0001959633028, -0.0002855045872, -0.0002743119266, -0.0001904587156, -0.0001343119266, -0.0000616513761, +0.0000447706422, +0.0002016513761, +0.0002240366972, +0.0001288073394, -0.0000223853211, -0.0002071559633, -0.0003919266055, -0.0005095412844, -0.0005655045872, -0.0005264220183, -0.0004143119266, -0.0002688073394, -0.0001064220183, +0.0000000000000, +0.0000168807339, -0.0000223853211, -0.0000728440367, -0.0000783486239, -0.0000392660550, -0.0000223853211, +0.0000840366972, +0.0002631192661, +0.0003807339450, +0.0003583486239, +0.0002352293578, +0.0000223853211, -0.0001680733945, -0.0004031192661, -0.0005711926606, -0.0005600000000, -0.0003135779817, +0.0000000000000, +0.0003528440367, +0.0005878899083, +0.0006214678899, +0.0004590825688, +0.0001959633028, -0.0001400000000, -0.0003583486239, -0.0004200000000, -0.0002688073394, -0.0001288073394, -0.0000335779817, +0.0000168807339, +0.0000504587156, -0.0000559633028, -0.0001288073394, -0.0001288073394, -0.0000223853211, +0.0000559633028, +0.0001623853211, +0.0002352293578, +0.0003247706422, +0.0002855045872, +0.0001623853211, +0.0000168807339, -0.0000447706422, -0.0000616513761, -0.0000168807339, -0.0000168807339, -0.0000559633028, -0.0001735779817, -0.0003192660550, -0.0004255045872, -0.0003864220183, -0.0002128440367, +0.0000111926606, +0.0001511926606, +0.0001566972477, +0.0000728440367, -0.0000392660550, -0.0001119266055, -0.0000280733945, +0.0001343119266, +0.0003416513761, +0.0005207339450, +0.0005376146789, +0.0004816513761, +0.0003919266055, +0.0001847706422, -0.0001400000000, -0.0004031192661, -0.0005319266055, -0.0004871559633, -0.0003807339450, -0.0002519266055, -0.0001400000000, +0.0000111926606, +0.0001176146789, +0.0001511926606, +0.0001343119266, +0.0001007339450, -0.0000559633028, -0.0002855045872, -0.0005319266055, -0.0006607339450, -0.0006943119266, -0.0006271559633, -0.0005264220183, -0.0003304587156, -0.0001566972477, -0.0000056880734, +0.0000000000000, -0.0001119266055, -0.0003247706422, -0.0003752293578, -0.0003135779817, -0.0001400000000, +0.0000168807339, +0.0001400000000, +0.0000504587156, -0.0001623853211, -0.0004647706422, -0.0006719266055, -0.0007614678899, -0.0007000000000, -0.0005264220183, -0.0002855045872, -0.0001288073394, -0.0000783486239, -0.0001288073394, -0.0002295412844, -0.0002407339450, -0.0001288073394, +0.0000000000000, +0.0001064220183, +0.0000895412844, +0.0000000000000, -0.0000392660550, -0.0000111926606, +0.0000168807339, +0.0000559633028, +0.0000840366972, +0.0000000000000, -0.0001680733945, -0.0004255045872, -0.0006383486239, -0.0007447706422, -0.0006607339450, -0.0004478899083, -0.0001792660550, -0.0000447706422, -0.0000559633028, -0.0001735779817, -0.0002519266055, -0.0002519266055, -0.0001511926606, -0.0000447706422, +0.0000952293578, +0.0001959633028, +0.0003078899083, +0.0003416513761, +0.0002966972477, +0.0001288073394, -0.0000223853211, -0.0001455045872, -0.0001623853211, -0.0001847706422, -0.0001904587156, -0.0002240366972, -0.0002631192661, -0.0002631192661, -0.0001511926606, -0.0000616513761, +0.0000447706422, +0.0001511926606, +0.0002183486239, +0.0002631192661, +0.0003471559633, +0.0004366972477, +0.0005152293578, +0.0005488073394, +0.0005376146789, +0.0004423853211, +0.0003528440367, +0.0003078899083, +0.0002240366972, +0.0001566972477, +0.0001455045872, +0.0000895412844, +0.0000000000000, -0.0000447706422, -0.0000840366972, -0.0000952293578, -0.0000335779817, +0.0001343119266, +0.0003640366972, +0.0005152293578, +0.0004928440367, +0.0003976146789, +0.0002407339450, +0.0000728440367, -0.0000728440367, -0.0001735779817, -0.0002240366972, -0.0001231192661, +0.0000056880734, +0.0001343119266, +0.0002016513761, +0.0003192660550, +0.0003807339450, +0.0004366972477, +0.0005152293578, +0.0005878899083, +0.0005376146789, +0.0004983486239, +0.0004200000000, +0.0003192660550, +0.0002183486239, +0.0002295412844, +0.0003247706422, +0.0005152293578, +0.0006831192661, +0.0008119266055, +0.0008176146789, +0.0007111926606, +0.0005152293578, +0.0003247706422, +0.0001623853211, +0.0000840366972, +0.0001119266055, +0.0002240366972, +0.0003192660550, +0.0003864220183, +0.0003807339450, +0.0003304587156, +0.0003135779817, +0.0003471559633, +0.0003695412844, +0.0004088073394, +0.0004478899083, +0.0003864220183, +0.0002071559633, -0.0000056880734, -0.0002016513761, -0.0003192660550, -0.0003135779817, -0.0001959633028, +0.0000223853211, +0.0001735779817, +0.0002128440367, +0.0002183486239, +0.0002240366972, +0.0002128440367, +0.0002743119266, +0.0002855045872, +0.0002966972477, +0.0003304587156, +0.0004478899083, +0.0005207339450, +0.0005655045872, +0.0005376146789, +0.0006047706422, +0.0007614678899, +0.0009014678899, +0.0008343119266, +0.0006326605505, +0.0003359633028, +0.0000000000000, -0.0002911926606, -0.0003864220183, -0.0002911926606, -0.0000111926606, +0.0003023853211, +0.0005711926606, +0.0006888073394, +0.0006719266055, +0.0005711926606, +0.0005264220183, +0.0004871559633, +0.0004478899083, +0.0003752293578, +0.0002800000000, +0.0001623853211, +0.0000895412844, +0.0000952293578, +0.0002407339450, +0.0004759633028, +0.0006214678899, +0.0006440366972, +0.0005766972477, +0.0004535779817, +0.0002576146789, +0.0000111926606, -0.0001792660550, -0.0002911926606, -0.0003864220183, -0.0004311926606, -0.0003864220183, -0.0001904587156, +0.0000783486239, +0.0003528440367, +0.0005376146789, +0.0006495412844, +0.0005431192661, +0.0002631192661, -0.0000559633028, -0.0002688073394, -0.0003471559633, -0.0001566972477, +0.0001847706422, +0.0005600000000, +0.0007838532110, +0.0007895412844, +0.0005600000000, +0.0003078899083, +0.0000559633028, -0.0001400000000, -0.0003864220183, -0.0006383486239, -0.0007838532110, -0.0007335779817, -0.0006047706422, -0.0003752293578, -0.0000728440367, +0.0003135779817, +0.0007223853211, +0.0009295412844, +0.0008511926606, +0.0006326605505, +0.0002743119266, -0.0001511926606, -0.0005600000000, -0.0008678899083, -0.0009519266055, -0.0007278899083, -0.0003695412844, -0.0000840366972, +0.0000504587156, +0.0001119266055, +0.0000952293578, +0.0000783486239, +0.0001119266055, +0.0001064220183, +0.0001176146789, +0.0002016513761, +0.0003078899083, +0.0003752293578, +0.0004816513761, +0.0005711926606, +0.0006214678899, +0.0004928440367, +0.0002183486239, -0.0001455045872, -0.0005878899083, -0.0011031192661, -0.0014783486239, -0.0015510091743, -0.0011871559633, -0.0006047706422, -0.0001400000000, +0.0000895412844, +0.0003247706422, +0.0005095412844, +0.0005600000000, +0.0004478899083, +0.0003023853211, +0.0001735779817, +0.0000895412844, -0.0000056880734, -0.0001566972477, -0.0003583486239, -0.0004647706422, -0.0004311926606, -0.0001735779817, +0.0001455045872, +0.0003192660550, +0.0002240366972, -0.0000280733945, -0.0004031192661, -0.0007055045872, -0.0007223853211, -0.0004366972477, +0.0000056880734, +0.0004031192661, +0.0004647706422, +0.0000783486239, -0.0003976146789, -0.0006943119266, -0.0007223853211, -0.0006159633028, -0.0004871559633, -0.0003752293578, -0.0002743119266, -0.0003304587156, -0.0004816513761, -0.0004647706422, -0.0002631192661, -0.0000952293578, -0.0001064220183, -0.0002855045872, -0.0004535779817, -0.0004928440367, -0.0003528440367, -0.0001847706422, -0.0001904587156, -0.0003752293578, -0.0005878899083, -0.0008288073394, -0.0010862385321, -0.0012543119266, -0.0012095412844, -0.0009519266055, -0.0005152293578, -0.0000504587156, +0.0002855045872, +0.0004590825688, +0.0004928440367, +0.0004702752294, +0.0004366972477, +0.0003304587156, +0.0001455045872, -0.0000280733945, -0.0001847706422, -0.0003359633028, -0.0004983486239, -0.0005823853211, -0.0004816513761, -0.0001680733945, +0.0000728440367, +0.0001288073394, +0.0000000000000, -0.0001511926606, -0.0002743119266, -0.0002631192661, -0.0001007339450, +0.0001904587156, +0.0004535779817, +0.0004759633028, +0.0002407339450, -0.0001176146789, -0.0004535779817, -0.0005766972477, -0.0005543119266, -0.0003976146789, -0.0001623853211, +0.0000616513761, +0.0002240366972, +0.0002240366972, +0.0000392660550, -0.0000559633028, +0.0000000000000, +0.0000671559633, +0.0001007339450, +0.0001735779817, +0.0002407339450, +0.0001847706422, +0.0000056880734, -0.0002240366972, -0.0004423853211, -0.0005319266055, -0.0004871559633, -0.0003864220183, -0.0001847706422, +0.0000616513761, +0.0002352293578, +0.0002295412844, +0.0001400000000, +0.0000335779817, +0.0000000000000, +0.0000392660550, +0.0001959633028, +0.0003640366972, +0.0004423853211, +0.0003304587156, +0.0001511926606, -0.0000671559633, -0.0002911926606, -0.0004816513761, -0.0005766972477, -0.0005935779817, -0.0004816513761, -0.0002966972477, -0.0000280733945, +0.0001231192661, +0.0001735779817, +0.0001288073394, +0.0000000000000, -0.0002743119266, -0.0004143119266, -0.0003247706422, -0.0001343119266, +0.0000280733945, +0.0002295412844, +0.0003304587156, +0.0003023853211, +0.0001511926606, -0.0000056880734, -0.0000671559633, +0.0000335779817, +0.0001959633028, +0.0002966972477, +0.0003023853211, +0.0002016513761, +0.0000671559633, -0.0000223853211, +0.0000000000000, +0.0001680733945, +0.0004200000000, +0.0006047706422, +0.0006607339450, +0.0005431192661, +0.0002911926606, -0.0000111926606, -0.0002240366972, -0.0003135779817, -0.0002183486239, +0.0000000000000, +0.0002743119266, +0.0003919266055, +0.0002911926606, +0.0000616513761, +0.0000000000000, +0.0000000000000, +0.0001007339450, +0.0002183486239, +0.0003078899083, +0.0002743119266, +0.0001511926606, -0.0000335779817, -0.0000728440367, +0.0000111926606, +0.0001792660550, +0.0002352293578, +0.0002407339450, +0.0001847706422, +0.0000783486239, -0.0000728440367, -0.0000783486239, +0.0000671559633, +0.0003640366972, +0.0006831192661, +0.0009407339450, +0.0010135779817, +0.0008790825688, +0.0006214678899, +0.0003864220183, +0.0001680733945, +0.0000111926606, -0.0000280733945, -0.0000783486239, -0.0002128440367, -0.0003807339450, -0.0004702752294, -0.0004871559633, -0.0004255045872, -0.0002911926606, -0.0000783486239, +0.0001288073394, +0.0003752293578, +0.0005040366972, +0.0005040366972, +0.0003192660550, +0.0000840366972, -0.0001623853211, -0.0002743119266, -0.0002576146789, -0.0000335779817, +0.0002183486239, +0.0004535779817, +0.0005207339450, +0.0005319266055, +0.0004366972477, +0.0002855045872, +0.0000559633028, -0.0000559633028, -0.0001064220183, -0.0000895412844, -0.0001119266055, -0.0000447706422, +0.0000952293578, +0.0003135779817, +0.0003752293578, +0.0003023853211, +0.0001231192661, -0.0000392660550, -0.0001680733945, -0.0001511926606, -0.0000671559633, -0.0000056880734, -0.0000111926606, -0.0000504587156, -0.0001400000000, -0.0002128440367, -0.0002071559633, -0.0001400000000, -0.0000840366972, -0.0000559633028, -0.0000728440367, -0.0001792660550, -0.0003416513761, -0.0005711926606, -0.0007502752294, -0.0008007339450, -0.0006831192661, -0.0004983486239, -0.0002576146789, -0.0000895412844, -0.0000056880734, -0.0000447706422, -0.0000952293578, -0.0001680733945, -0.0001064220183, +0.0000223853211, +0.0002016513761, +0.0002966972477, +0.0003976146789, +0.0004423853211, +0.0004928440367, +0.0004647706422, +0.0004535779817, +0.0004200000000, +0.0003416513761, +0.0001288073394, -0.0000504587156, -0.0002071559633, -0.0002855045872, -0.0003471559633, -0.0002519266055, -0.0000671559633, +0.0001343119266, +0.0003023853211, +0.0004088073394, +0.0003192660550, +0.0001343119266, -0.0000671559633, -0.0002295412844, -0.0003023853211, -0.0002631192661, -0.0001566972477, -0.0000223853211, +0.0000895412844, +0.0001400000000, +0.0001119266055, +0.0000000000000, -0.0001511926606, -0.0003135779817, -0.0004031192661, -0.0003807339450, -0.0002519266055, -0.0001288073394, +0.0000447706422, +0.0002071559633, +0.0002407339450, +0.0000671559633, -0.0001231192661, -0.0002631192661, -0.0002743119266, -0.0002743119266, -0.0002071559633, -0.0001623853211, -0.0001904587156, -0.0003192660550, -0.0003976146789, -0.0004535779817, -0.0003640366972, -0.0001566972477, +0.0001007339450, +0.0002240366972, +0.0002071559633, +0.0000728440367, +0.0000000000000, -0.0000223853211, +0.0000111926606, +0.0000840366972, +0.0002407339450, +0.0003583486239, +0.0003640366972, +0.0002240366972, +0.0000895412844, +0.0000280733945, +0.0000056880734, -0.0000392660550, -0.0001176146789, -0.0001792660550, -0.0001959633028, -0.0001400000000, -0.0000392660550, +0.0000280733945, +0.0000671559633, +0.0001343119266, +0.0002128440367, +0.0003078899083, +0.0003583486239, +0.0003640366972, +0.0002407339450, +0.0001343119266, +0.0000728440367, +0.0000392660550, -0.0000056880734, -0.0000168807339, -0.0000447706422, -0.0000559633028, -0.0000728440367, -0.0000392660550, +0.0000000000000, +0.0000840366972, +0.0001511926606, +0.0002128440367, +0.0001904587156, +0.0001343119266, +0.0000000000000, -0.0001792660550, -0.0003528440367, -0.0003976146789, -0.0003528440367, -0.0002576146789, -0.0001735779817, -0.0001343119266, -0.0001400000000, -0.0001288073394, -0.0000840366972, +0.0000111926606, +0.0001847706422, +0.0003304587156, +0.0003416513761, +0.0002016513761, -0.0000056880734, -0.0002016513761, -0.0003078899083, -0.0003416513761, -0.0002631192661, -0.0001343119266, -0.0000447706422, -0.0001007339450, -0.0002519266055, -0.0004478899083, -0.0005823853211, -0.0005935779817, -0.0004200000000, -0.0001847706422, +0.0000504587156, +0.0002183486239, +0.0003416513761, +0.0003471559633, +0.0002519266055, +0.0000783486239, -0.0000616513761, -0.0002407339450, -0.0003583486239, -0.0003807339450, -0.0002743119266, -0.0001176146789, +0.0000000000000, +0.0000223853211, +0.0000447706422, +0.0000559633028, +0.0000392660550, +0.0000280733945, +0.0000056880734, -0.0000447706422, -0.0001400000000, -0.0002631192661, -0.0004143119266, -0.0005152293578, -0.0005319266055, -0.0004702752294, -0.0003864220183, -0.0003304587156, -0.0002966972477, -0.0002295412844, -0.0001343119266, +0.0000056880734, +0.0001455045872, +0.0001792660550, +0.0000223853211, -0.0002128440367, -0.0004255045872, -0.0004647706422, -0.0003976146789, -0.0001904587156, +0.0000952293578, +0.0004031192661, +0.0005376146789, +0.0005264220183, +0.0003807339450, +0.0002071559633, +0.0000447706422, -0.0000559633028, -0.0001176146789, -0.0000952293578, -0.0001064220183, -0.0001400000000, -0.0001623853211, -0.0001566972477, -0.0000895412844, +0.0000447706422, +0.0002016513761, +0.0003247706422, +0.0003528440367, +0.0002519266055, +0.0000671559633, -0.0001064220183, -0.0001792660550, -0.0000895412844, +0.0000671559633, +0.0001959633028, +0.0002800000000, +0.0002855045872, +0.0002295412844, +0.0001176146789, +0.0000223853211, +0.0000056880734, +0.0000952293578, +0.0001566972477, +0.0001511926606, +0.0000111926606, -0.0001455045872, -0.0002631192661, -0.0002464220183, -0.0001623853211, +0.0000223853211, +0.0002911926606, +0.0005878899083, +0.0007783486239, +0.0008064220183, +0.0006047706422, +0.0002576146789, -0.0000895412844, -0.0002966972477, -0.0003135779817, -0.0001511926606, +0.0000280733945, +0.0001566972477, +0.0001959633028, +0.0001904587156, +0.0001680733945, +0.0001847706422, +0.0002352293578, +0.0002519266055, +0.0002071559633, +0.0001007339450, +0.0000000000000, -0.0000616513761, -0.0000335779817, +0.0000335779817, +0.0001680733945, +0.0003023853211, +0.0004031192661, +0.0004088073394, +0.0003192660550, +0.0001176146789, -0.0000392660550, -0.0001400000000, -0.0001455045872, -0.0001119266055, -0.0000616513761, -0.0000616513761, -0.0000616513761, -0.0000392660550, +0.0000447706422, +0.0001904587156, +0.0003807339450, +0.0004647706422, +0.0003752293578, +0.0001231192661, -0.0001176146789, -0.0002855045872, -0.0003304587156, -0.0002800000000, -0.0001343119266, +0.0000056880734, +0.0001007339450, +0.0001288073394, +0.0001400000000, +0.0001680733945, +0.0002071559633, +0.0002519266055, +0.0002855045872, +0.0002966972477, +0.0002464220183, +0.0001231192661, -0.0000559633028, -0.0001400000000, -0.0000671559633, +0.0000504587156, +0.0001623853211, +0.0002576146789, +0.0002576146789, +0.0001959633028, +0.0001288073394, +0.0001064220183, +0.0001566972477, +0.0002688073394, +0.0003247706422, +0.0003078899083, +0.0001904587156, +0.0000447706422, -0.0000728440367, -0.0000616513761, +0.0000392660550, +0.0001847706422, +0.0002631192661, +0.0002855045872, +0.0002016513761, +0.0000616513761, -0.0000392660550, -0.0000895412844, -0.0000616513761, +0.0000223853211, +0.0000895412844, +0.0001176146789, +0.0001343119266, +0.0001735779817, +0.0002071559633, +0.0002128440367, +0.0002240366972, +0.0002240366972, +0.0002183486239, +0.0001792660550, +0.0000783486239, -0.0001119266055, -0.0003135779817, -0.0004366972477, -0.0004088073394, -0.0002295412844, +0.0000223853211, +0.0002128440367, +0.0002800000000, +0.0001792660550, +0.0000056880734, -0.0001792660550, -0.0002966972477, -0.0003135779817, -0.0002183486239, -0.0001064220183, -0.0000111926606, -0.0000168807339, -0.0000616513761, -0.0001176146789, -0.0001231192661, -0.0000504587156, +0.0000504587156, +0.0001231192661, +0.0001959633028, +0.0002464220183, +0.0002407339450, +0.0002240366972, +0.0002688073394, +0.0003416513761, +0.0003807339450, +0.0003864220183, +0.0003583486239, +0.0002855045872, +0.0001623853211, +0.0000728440367, +0.0000223853211, +0.0000000000000, -0.0000168807339, -0.0000392660550, -0.0000728440367, -0.0000616513761, -0.0000056880734, +0.0001176146789, +0.0002576146789, +0.0004031192661, +0.0005040366972, +0.0005431192661, +0.0004702752294, +0.0002966972477, +0.0000280733945, -0.0001847706422, -0.0003416513761, -0.0003640366972, -0.0002966972477, -0.0001511926606, -0.0000335779817, +0.0000000000000, +0.0000000000000, -0.0000111926606, +0.0000000000000, +0.0000504587156, +0.0000840366972, +0.0000840366972, +0.0000671559633, +0.0000280733945, -0.0000223853211, -0.0000895412844, -0.0001064220183, -0.0000895412844, -0.0000504587156, -0.0000056880734, +0.0000392660550, +0.0000616513761, +0.0000616513761, +0.0000895412844, +0.0001904587156, +0.0002743119266, +0.0003135779817, +0.0002800000000, +0.0002295412844, +0.0001343119266, +0.0000335779817, -0.0000616513761, -0.0000840366972, -0.0000504587156, +0.0000000000000, -0.0000168807339, -0.0000783486239, -0.0001792660550, -0.0002519266055, -0.0002966972477, -0.0002519266055, -0.0001511926606, -0.0000447706422, +0.0000056880734, +0.0000616513761, +0.0000559633028, +0.0000000000000, -0.0000447706422, -0.0001231192661, -0.0002183486239, -0.0003359633028, -0.0004143119266, -0.0004088073394, -0.0002688073394, -0.0000671559633, +0.0001231192661, +0.0002464220183, +0.0002576146789, +0.0001007339450, -0.0001119266055, -0.0003247706422, -0.0003640366972, -0.0002352293578, +0.0000000000000, +0.0001959633028, +0.0003192660550, +0.0002855045872, +0.0001566972477, -0.0000168807339, -0.0001792660550, -0.0002911926606, -0.0002743119266, -0.0001959633028, -0.0000783486239, -0.0000056880734, +0.0000000000000, -0.0000616513761, -0.0001847706422, -0.0002911926606, -0.0002855045872, -0.0001959633028, -0.0000616513761, +0.0000392660550, +0.0001007339450, +0.0000952293578, +0.0000728440367, +0.0000840366972, +0.0000728440367, +0.0000168807339, -0.0000840366972, -0.0002016513761, -0.0003023853211, -0.0003471559633, -0.0003528440367, -0.0002464220183, -0.0000671559633, +0.0001231192661, +0.0002183486239, +0.0002352293578, +0.0001566972477, +0.0000111926606, -0.0001792660550, -0.0003078899083, -0.0003752293578, -0.0003528440367, -0.0002743119266, -0.0001400000000, -0.0000616513761, -0.0000280733945, -0.0000616513761, -0.0000895412844, -0.0001064220183, -0.0000895412844, -0.0000728440367, -0.0000559633028, -0.0000728440367, -0.0001343119266, -0.0001847706422, -0.0001231192661, -0.0000111926606, +0.0000840366972, +0.0001847706422, +0.0002688073394, +0.0002966972477, +0.0002407339450, +0.0001231192661, +0.0000056880734, -0.0000447706422, -0.0001064220183, -0.0001176146789, -0.0001064220183, -0.0000559633028, -0.0000335779817, -0.0000056880734, -0.0000168807339, +0.0000000000000, +0.0000000000000, +0.0000335779817, +0.0000280733945, +0.0000000000000, -0.0000840366972, -0.0001400000000, -0.0002071559633, -0.0002352293578, -0.0002071559633, -0.0000559633028, +0.0001064220183, +0.0002688073394, +0.0003304587156, +0.0003304587156, +0.0002352293578, +0.0000952293578, -0.0000335779817, -0.0001176146789, -0.0001343119266, -0.0001231192661, -0.0001231192661, -0.0001511926606, -0.0001847706422, -0.0001847706422, -0.0001064220183, +0.0000168807339, +0.0001735779817, +0.0002576146789, +0.0002688073394, +0.0001680733945, +0.0000223853211, -0.0001007339450, -0.0001566972477, -0.0001566972477, -0.0000840366972, +0.0000000000000, +0.0000783486239, +0.0001064220183, +0.0001400000000, +0.0001511926606, +0.0001735779817, +0.0001623853211, +0.0001792660550, +0.0001623853211, +0.0001176146789, +0.0000168807339, -0.0000447706422, -0.0001007339450, -0.0000895412844, -0.0000728440367, -0.0000447706422, +0.0000000000000, +0.0000504587156, +0.0001064220183, +0.0001511926606, +0.0001904587156, +0.0002295412844, +0.0002407339450, +0.0001792660550, +0.0000671559633, -0.0000168807339, -0.0000783486239, -0.0001566972477, -0.0002071559633, -0.0002407339450, -0.0002071559633, -0.0001176146789, +0.0000168807339, +0.0001064220183, +0.0001288073394, +0.0000447706422, -0.0000559633028, -0.0001904587156, -0.0002464220183, -0.0002352293578, -0.0001343119266, +0.0000000000000, +0.0001288073394, +0.0001735779817, +0.0001455045872, +0.0000447706422, -0.0000616513761, -0.0002016513761, -0.0002407339450, -0.0002183486239, -0.0001680733945, -0.0001343119266, -0.0000840366972, -0.0000280733945, +0.0000111926606, +0.0000392660550, +0.0000168807339, +0.0000000000000, -0.0000168807339, -0.0000447706422, -0.0000895412844, -0.0001007339450, -0.0001119266055, -0.0001007339450, -0.0000952293578, -0.0000616513761, -0.0000559633028, -0.0000559633028, -0.0001455045872, -0.0002295412844, -0.0002911926606, -0.0003192660550, -0.0003695412844, -0.0003471559633, -0.0002519266055, -0.0000616513761, +0.0000783486239, +0.0001904587156, +0.0001959633028, +0.0001400000000, +0.0000111926606, -0.0001119266055, -0.0002576146789, -0.0002966972477, -0.0002016513761, -0.0000392660550, +0.0000559633028, +0.0000783486239, +0.0000056880734, -0.0000783486239, -0.0001566972477, -0.0001735779817, -0.0001343119266, -0.0000840366972, -0.0000671559633, -0.0001176146789, -0.0001566972477, -0.0001792660550, -0.0001735779817, -0.0001959633028, -0.0001735779817, -0.0001007339450, +0.0000056880734, +0.0000616513761, +0.0000447706422, -0.0000168807339, -0.0000783486239, -0.0001847706422, -0.0002743119266, -0.0003023853211, -0.0002071559633, -0.0000895412844, +0.0000168807339, +0.0000783486239, +0.0000895412844, +0.0000504587156, +0.0000168807339, -0.0000335779817, -0.0000559633028, -0.0000728440367, -0.0001119266055, -0.0001792660550, -0.0002519266055, -0.0003359633028, -0.0003864220183, -0.0003471559633, -0.0002295412844, -0.0000783486239, +0.0000223853211, +0.0000728440367, +0.0000223853211, -0.0000671559633, -0.0001792660550, -0.0002071559633, -0.0001623853211, -0.0000111926606, +0.0001288073394, +0.0002295412844, +0.0002128440367, +0.0001288073394, +0.0000000000000, -0.0000840366972, -0.0000952293578, -0.0000392660550, -0.0000111926606, -0.0000335779817, -0.0001231192661, -0.0001847706422, -0.0002183486239, -0.0001735779817, -0.0000840366972, +0.0000392660550, +0.0001566972477, +0.0001904587156, +0.0001511926606, +0.0001231192661, +0.0000840366972, +0.0000335779817, -0.0000056880734, -0.0000671559633, -0.0001176146789, -0.0001400000000, -0.0001288073394, -0.0000840366972, +0.0000000000000, +0.0001064220183, +0.0002519266055, +0.0003807339450, +0.0004590825688, +0.0004535779817, +0.0004088073394, +0.0003247706422, +0.0001959633028, +0.0000504587156, +0.0000111926606, +0.0000616513761, +0.0001566972477, +0.0001904587156, +0.0002128440367, +0.0002295412844, +0.0002295412844, +0.0001847706422, +0.0001511926606, +0.0001566972477, +0.0002016513761, +0.0002464220183, +0.0002464220183, +0.0002071559633, +0.0001680733945, +0.0001288073394, +0.0000840366972, +0.0000559633028, +0.0000504587156, +0.0000504587156, +0.0000111926606, -0.0000280733945, -0.0000728440367, -0.0001119266055, -0.0001623853211, -0.0001904587156, -0.0002016513761, -0.0001623853211, -0.0001007339450, -0.0000056880734, +0.0000671559633, +0.0001400000000, +0.0001735779817, +0.0001792660550, +0.0001400000000, +0.0000671559633, +0.0000000000000, -0.0000504587156, -0.0000728440367, -0.0000223853211, +0.0000447706422, +0.0001231192661, +0.0001792660550, +0.0002016513761, +0.0001343119266, +0.0000111926606, -0.0000559633028, -0.0000559633028, +0.0000000000000, +0.0000392660550, +0.0000559633028, +0.0000111926606, -0.0000504587156, -0.0001231192661, -0.0001007339450, +0.0000168807339, +0.0002128440367, +0.0003640366972, +0.0004143119266, +0.0003359633028, +0.0001680733945, +0.0000111926606, -0.0000392660550, -0.0000392660550, +0.0000000000000, +0.0000392660550, +0.0000671559633, +0.0000616513761, +0.0000335779817, +0.0000000000000, +0.0000000000000, +0.0000447706422, +0.0001007339450, +0.0001511926606, +0.0001847706422, +0.0002128440367, +0.0002016513761, +0.0001959633028, +0.0001959633028, +0.0002240366972, +0.0002128440367, +0.0001623853211, +0.0000504587156, -0.0000447706422, -0.0001064220183, -0.0000671559633, +0.0000000000000, +0.0001119266055, +0.0001680733945, +0.0001904587156, +0.0001623853211, +0.0001064220183, +0.0000168807339, -0.0000223853211, -0.0000392660550, +0.0000000000000, +0.0000559633028, +0.0000952293578, +0.0001119266055, +0.0001288073394, +0.0001511926606, +0.0001566972477, +0.0001400000000, +0.0001231192661, +0.0001455045872, +0.0001566972477, +0.0001680733945, +0.0001792660550, +0.0002352293578, +0.0002688073394, +0.0002800000000, +0.0001959633028, +0.0000783486239, -0.0000280733945, -0.0000783486239, -0.0001007339450, -0.0000616513761, -0.0000559633028, -0.0000616513761, -0.0001176146789, -0.0001455045872, -0.0001288073394, -0.0000168807339, +0.0001007339450, +0.0002519266055, +0.0002688073394, +0.0001735779817, -0.0000056880734, -0.0001959633028, -0.0003192660550, -0.0003078899083, -0.0002240366972, -0.0000895412844, +0.0000392660550, +0.0001623853211, +0.0002352293578, +0.0002295412844, +0.0001792660550, +0.0000895412844, +0.0000223853211, +0.0000056880734, +0.0000840366972, +0.0002071559633, +0.0003528440367, +0.0004311926606, +0.0004702752294, +0.0003919266055, +0.0002519266055, +0.0000783486239, -0.0000111926606, -0.0001119266055, -0.0001400000000, -0.0001566972477, -0.0000895412844, -0.0000168807339, +0.0000671559633, +0.0001064220183, +0.0001566972477, +0.0001455045872, +0.0001231192661, +0.0000616513761, +0.0000447706422, +0.0000280733945, +0.0000392660550, +0.0000223853211, +0.0000056880734, +0.0000000000000, -0.0000168807339, -0.0000335779817, -0.0000280733945, +0.0000000000000, +0.0000056880734, +0.0000000000000, -0.0000559633028, -0.0001343119266, -0.0002240366972, -0.0002800000000, -0.0002966972477, -0.0002128440367, -0.0000895412844, +0.0000616513761, +0.0001566972477, +0.0002016513761, +0.0001511926606, +0.0001007339450, +0.0000000000000, -0.0000447706422, -0.0001176146789, -0.0001288073394, -0.0001176146789, -0.0000392660550, +0.0000056880734, +0.0000895412844, +0.0001064220183, +0.0001064220183, +0.0000335779817, -0.0000447706422, -0.0001680733945, -0.0002016513761, -0.0001511926606, -0.0000168807339, +0.0001064220183, +0.0002240366972, +0.0002352293578, +0.0001566972477, +0.0000335779817, -0.0000728440367, -0.0001119266055, -0.0000447706422, +0.0000504587156, +0.0001007339450, +0.0001119266055, +0.0000728440367, +0.0000335779817, -0.0000111926606, -0.0000223853211, -0.0000168807339, +0.0000335779817, +0.0000559633028, +0.0000616513761, +0.0000000000000, -0.0000504587156, -0.0001511926606, -0.0001904587156, -0.0002128440367, -0.0001343119266, -0.0000504587156, +0.0000504587156, +0.0001119266055, +0.0001064220183, +0.0000000000000, -0.0000895412844, -0.0001343119266, -0.0000952293578, -0.0000223853211, +0.0000671559633, +0.0001680733945, +0.0002071559633, +0.0001680733945, +0.0000952293578, +0.0000504587156, +0.0000223853211, +0.0000447706422, +0.0000504587156, +0.0000392660550, -0.0000111926606, -0.0000840366972, -0.0001623853211, -0.0001455045872, -0.0000783486239, +0.0000223853211, +0.0001119266055, +0.0001680733945, +0.0001176146789, +0.0000111926606, -0.0001064220183, -0.0001455045872, -0.0001343119266, -0.0000392660550, +0.0000559633028, +0.0001735779817, +0.0002576146789, +0.0003416513761, +0.0003695412844, +0.0003528440367, +0.0002800000000, +0.0001680733945, +0.0000000000000, -0.0001623853211, -0.0002800000000, -0.0003078899083, -0.0002352293578, -0.0001176146789, +0.0000000000000, +0.0000447706422, +0.0000559633028, +0.0000000000000, -0.0000223853211, -0.0000335779817, +0.0000000000000, +0.0000335779817, +0.0000671559633, +0.0000223853211, -0.0000223853211, -0.0000952293578, -0.0001455045872, -0.0001623853211, -0.0000504587156, +0.0001064220183, +0.0002855045872, +0.0004031192661, +0.0004647706422, +0.0003807339450, +0.0002071559633, +0.0000168807339, -0.0001007339450, -0.0001623853211, -0.0001119266055, -0.0000335779817, -0.0000056880734, -0.0000335779817, -0.0000840366972, -0.0000671559633, +0.0000168807339, +0.0001680733945, +0.0002911926606, +0.0003583486239, +0.0003416513761, +0.0002631192661, +0.0001400000000, +0.0000223853211, -0.0000168807339, +0.0000168807339, +0.0001288073394, +0.0002576146789, +0.0002855045872, +0.0002128440367, +0.0000447706422, -0.0001119266055, -0.0002576146789, -0.0003359633028, -0.0003471559633, -0.0002855045872, -0.0002128440367, -0.0001792660550, -0.0001680733945, -0.0001566972477, -0.0001288073394, -0.0000783486239 }; lmms-1.1.3/plugins/LadspaEffect/swh/impulses/all.h000066400000000000000000000034611247673406200220700ustar00rootroot00000000000000/* Generated file, do not edit */ #define IMPULSES 21 #include "impulses/01-unit.h" #include "impulses/02-steves-flat.h" #include "impulses/03-stk-m1.h" #include "impulses/04-fender-68-vibrolux-sm57.h" #include "impulses/05-fender-68-vibrolux-sm57-off.h" #include "impulses/06-fender-68-vibrolux-at4050.h" #include "impulses/07-fender-68-vibrolux-ui87.h" #include "impulses/08-fender-bassman-sm57.h" #include "impulses/09-fender-bassman-sm57-off.h" #include "impulses/10-fender-bassman-at4050.h" #include "impulses/11-fender-bassman-ui87.h" #include "impulses/12-fender-superchamp-sm57.h" #include "impulses/13-fender-superchamp-sm57-off.h" #include "impulses/14-fender-superchamp-at4050.h" #include "impulses/15-fender-superchamp-ui87.h" #include "impulses/16-marshall-jcm2000-sm57.h" #include "impulses/17-marshall-jcm2000-sm57-off.h" #include "impulses/18-marshall-plexi-sm57.h" #include "impulses/19-marshall-plexi-sm57-off.h" #include "impulses/20-matchless-chieftain-sm57.h" #include "impulses/21-matchless-chieftain-sm57-off.h" #ifdef __clang__ void mk_imps(fftw_real **impulse_freq) #else inline void mk_imps(fftw_real **impulse_freq) #endif { int c = 0; MK_IMP(unit); MK_IMP(steves_flat); MK_IMP(stk_m1); MK_IMP(fender_68_vibrolux_sm57); MK_IMP(fender_68_vibrolux_sm57_off); MK_IMP(fender_68_vibrolux_at4050); MK_IMP(fender_68_vibrolux_ui87); MK_IMP(fender_bassman_sm57); MK_IMP(fender_bassman_sm57_off); MK_IMP(fender_bassman_at4050); MK_IMP(fender_bassman_ui87); MK_IMP(fender_superchamp_sm57); MK_IMP(fender_superchamp_sm57_off); MK_IMP(fender_superchamp_at4050); MK_IMP(fender_superchamp_ui87); MK_IMP(marshall_jcm2000_sm57); MK_IMP(marshall_jcm2000_sm57_off); MK_IMP(marshall_plexi_sm57); MK_IMP(marshall_plexi_sm57_off); MK_IMP(matchless_chieftain_sm57); MK_IMP(matchless_chieftain_sm57_off); }; lmms-1.1.3/plugins/LadspaEffect/swh/inv_1429.c000066400000000000000000000120571247673406200207260ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define INV_INPUT 0 #define INV_OUTPUT 1 static LADSPA_Descriptor *invDescriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Inv; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return invDescriptor; default: return NULL; } } static void cleanupInv(LADSPA_Handle instance) { free(instance); } static void connectPortInv( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Inv *plugin; plugin = (Inv *)instance; switch (port) { case INV_INPUT: plugin->input = data; break; case INV_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateInv( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Inv *plugin_data = (Inv *)malloc(sizeof(Inv)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runInv(LADSPA_Handle instance, unsigned long sample_count) { Inv *plugin_data = (Inv *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "inv_1429.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], -input[pos]); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainInv(LADSPA_Handle instance, LADSPA_Data gain) { ((Inv *)instance)->run_adding_gain = gain; } static void runAddingInv(LADSPA_Handle instance, unsigned long sample_count) { Inv *plugin_data = (Inv *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "inv_1429.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], -input[pos]); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif invDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (invDescriptor) { invDescriptor->UniqueID = 1429; invDescriptor->Label = "inv"; invDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; invDescriptor->Name = D_("Inverter"); invDescriptor->Maker = "Steve Harris "; invDescriptor->Copyright = "GPL"; invDescriptor->PortCount = 2; port_descriptors = (LADSPA_PortDescriptor *)calloc(2, sizeof(LADSPA_PortDescriptor)); invDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(2, sizeof(LADSPA_PortRangeHint)); invDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(2, sizeof(char*)); invDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[INV_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[INV_INPUT] = D_("Input"); port_range_hints[INV_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[INV_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[INV_OUTPUT] = D_("Output"); port_range_hints[INV_OUTPUT].HintDescriptor = 0; invDescriptor->activate = NULL; invDescriptor->cleanup = cleanupInv; invDescriptor->connect_port = connectPortInv; invDescriptor->deactivate = NULL; invDescriptor->instantiate = instantiateInv; invDescriptor->run = runInv; invDescriptor->run_adding = runAddingInv; invDescriptor->set_run_adding_gain = setRunAddingGainInv; } } void __attribute__((destructor)) swh_fini() { if (invDescriptor) { free((LADSPA_PortDescriptor *)invDescriptor->PortDescriptors); free((char **)invDescriptor->PortNames); free((LADSPA_PortRangeHint *)invDescriptor->PortRangeHints); free(invDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/karaoke_1409.c000066400000000000000000000165161247673406200215510ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define KARAOKE_GAIN 0 #define KARAOKE_LIN 1 #define KARAOKE_RIN 2 #define KARAOKE_LOUT 3 #define KARAOKE_ROUT 4 static LADSPA_Descriptor *karaokeDescriptor = NULL; typedef struct { LADSPA_Data *gain; LADSPA_Data *lin; LADSPA_Data *rin; LADSPA_Data *lout; LADSPA_Data *rout; LADSPA_Data run_adding_gain; } Karaoke; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return karaokeDescriptor; default: return NULL; } } static void cleanupKaraoke(LADSPA_Handle instance) { free(instance); } static void connectPortKaraoke( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Karaoke *plugin; plugin = (Karaoke *)instance; switch (port) { case KARAOKE_GAIN: plugin->gain = data; break; case KARAOKE_LIN: plugin->lin = data; break; case KARAOKE_RIN: plugin->rin = data; break; case KARAOKE_LOUT: plugin->lout = data; break; case KARAOKE_ROUT: plugin->rout = data; break; } } static LADSPA_Handle instantiateKaraoke( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Karaoke *plugin_data = (Karaoke *)malloc(sizeof(Karaoke)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runKaraoke(LADSPA_Handle instance, unsigned long sample_count) { Karaoke *plugin_data = (Karaoke *)instance; /* Vocal volume (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Left in (array of floats of length sample_count) */ const LADSPA_Data * const lin = plugin_data->lin; /* Right in (array of floats of length sample_count) */ const LADSPA_Data * const rin = plugin_data->rin; /* Left out (array of floats of length sample_count) */ LADSPA_Data * const lout = plugin_data->lout; /* Right out (array of floats of length sample_count) */ LADSPA_Data * const rout = plugin_data->rout; #line 17 "karaoke_1409.xml" unsigned long pos; float coef = pow(10.0f, gain * 0.05f) * 0.5f; float m, s; for (pos = 0; pos < sample_count; pos++) { m = lin[pos] + rin[pos]; s = lin[pos] - rin[pos]; buffer_write(lout[pos], m * coef + s * 0.5f); buffer_write(rout[pos], m * coef - s * 0.5f); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainKaraoke(LADSPA_Handle instance, LADSPA_Data gain) { ((Karaoke *)instance)->run_adding_gain = gain; } static void runAddingKaraoke(LADSPA_Handle instance, unsigned long sample_count) { Karaoke *plugin_data = (Karaoke *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Vocal volume (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Left in (array of floats of length sample_count) */ const LADSPA_Data * const lin = plugin_data->lin; /* Right in (array of floats of length sample_count) */ const LADSPA_Data * const rin = plugin_data->rin; /* Left out (array of floats of length sample_count) */ LADSPA_Data * const lout = plugin_data->lout; /* Right out (array of floats of length sample_count) */ LADSPA_Data * const rout = plugin_data->rout; #line 17 "karaoke_1409.xml" unsigned long pos; float coef = pow(10.0f, gain * 0.05f) * 0.5f; float m, s; for (pos = 0; pos < sample_count; pos++) { m = lin[pos] + rin[pos]; s = lin[pos] - rin[pos]; buffer_write(lout[pos], m * coef + s * 0.5f); buffer_write(rout[pos], m * coef - s * 0.5f); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif karaokeDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (karaokeDescriptor) { karaokeDescriptor->UniqueID = 1409; karaokeDescriptor->Label = "karaoke"; karaokeDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; karaokeDescriptor->Name = D_("Karaoke"); karaokeDescriptor->Maker = "Steve Harris "; karaokeDescriptor->Copyright = "GPL"; karaokeDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); karaokeDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); karaokeDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); karaokeDescriptor->PortNames = (const char **)port_names; /* Parameters for Vocal volume (dB) */ port_descriptors[KARAOKE_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[KARAOKE_GAIN] = D_("Vocal volume (dB)"); port_range_hints[KARAOKE_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[KARAOKE_GAIN].LowerBound = -70; port_range_hints[KARAOKE_GAIN].UpperBound = 0; /* Parameters for Left in */ port_descriptors[KARAOKE_LIN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[KARAOKE_LIN] = D_("Left in"); port_range_hints[KARAOKE_LIN].HintDescriptor = 0; /* Parameters for Right in */ port_descriptors[KARAOKE_RIN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[KARAOKE_RIN] = D_("Right in"); port_range_hints[KARAOKE_RIN].HintDescriptor = 0; /* Parameters for Left out */ port_descriptors[KARAOKE_LOUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[KARAOKE_LOUT] = D_("Left out"); port_range_hints[KARAOKE_LOUT].HintDescriptor = 0; /* Parameters for Right out */ port_descriptors[KARAOKE_ROUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[KARAOKE_ROUT] = D_("Right out"); port_range_hints[KARAOKE_ROUT].HintDescriptor = 0; karaokeDescriptor->activate = NULL; karaokeDescriptor->cleanup = cleanupKaraoke; karaokeDescriptor->connect_port = connectPortKaraoke; karaokeDescriptor->deactivate = NULL; karaokeDescriptor->instantiate = instantiateKaraoke; karaokeDescriptor->run = runKaraoke; karaokeDescriptor->run_adding = runAddingKaraoke; karaokeDescriptor->set_run_adding_gain = setRunAddingGainKaraoke; } } void __attribute__((destructor)) swh_fini() { if (karaokeDescriptor) { free((LADSPA_PortDescriptor *)karaokeDescriptor->PortDescriptors); free((char **)karaokeDescriptor->PortNames); free((LADSPA_PortRangeHint *)karaokeDescriptor->PortRangeHints); free(karaokeDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/ladspa-util.c000066400000000000000000000004571247673406200216730ustar00rootroot00000000000000/* truncate: Truncates a float down to an int without worrying about the stack and crap like that. */ //static const float _truncate_half = 0.5f; int truncate(float flt) { int i; i = flt; /* asm ( "flds 8(%ebp)\n" "\tfsubs _truncate_half\n" "\tfistpl -4(%ebp)\n" ); */ return i; } lmms-1.1.3/plugins/LadspaEffect/swh/ladspa-util.h000066400000000000000000000115151247673406200216750ustar00rootroot00000000000000/* Some misc util functions for audio DSP work, written by Steve Harris, * December 2000 * * steve@plugin.org.uk */ #ifndef LADSPA_UTIL_H #define LADSPA_UTIL_H #include #include #include "config.h" // 16.16 fixpoint typedef union { int32_t all; struct { #ifdef WORDS_BIGENDIAN int16_t in; uint16_t fr; #else uint16_t fr; int16_t in; #endif } part; } fixp16; // 32.32 fixpoint typedef union { int64_t all; struct { #ifdef WORDS_BIGENDIAN int32_t in; uint32_t fr; #else uint32_t fr; int32_t in; #endif } part; } fixp32; /* 32 bit "pointer cast" union */ typedef union { float f; int32_t i; } ls_pcast32; // Sometimes it doesn't get defined, even though it eists and C99 is declared long int lrintf (float x); // 1.0 / ln(2) #define LN2R 1.442695041f /* detet floating point denormal numbers by comparing them to the smallest * normal, crap, but reliable */ #define DN_CHECK(x, l) if (fabs(x) < 1e-38) printf("DN: "l"\n") // Denormalise floats, only actually needed for PIII and recent PowerPC //#define FLUSH_TO_ZERO(fv) (((*(unsigned int*)&(fv))&0x7f800000)==0)?0.0f:(fv) static inline float flush_to_zero(float f) { ls_pcast32 v; v.f = f; // original: return (v.i & 0x7f800000) == 0 ? 0.0f : f; // version from Tim Blechmann return (v.i & 0x7f800000) < 0x08000000 ? 0.0f : f; } static inline void round_to_zero(volatile float *f) { *f += 1e-18; *f -= 1e-18; } /* A set of branchless clipping operations from Laurent de Soras */ static inline float f_max(float x, float a) { x -= a; x += fabs(x); x *= 0.5; x += a; return x; } static inline float f_min(float x, float b) { x = b - x; x += fabs(x); x *= 0.5; x = b - x; return x; } static inline float f_clamp(float x, float a, float b) { const float x1 = fabs(x - a); const float x2 = fabs(x - b); x = x1 + a + b; x -= x2; x *= 0.5; return x; } // Limit a value to be l<=v<=u #define LIMIT(v,l,u) ((v)<(l)?(l):((v)>(u)?(u):(v))) // Truncate-to-zero modulo (ANSI C doesn't specify) will only work // if -m < v < 2m #define MOD(v,m) (v<0?v+m:(v>=m?v-m:v)) // Truncate-to-zero modulo (ANSI C doesn't specify) will only work // if v > -m and v < m #define NEG_MOD(v,m) ((v)<0?((v)+(m)):(v)) // Convert a value in dB's to a coefficent #define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g) * 0.05f) : 0.0f) #define CO_DB(v) (20.0f * log10f(v)) // Linearly interpolate [ = a * (1 - f) + b * f] #define LIN_INTERP(f,a,b) ((a) + (f) * ((b) - (a))) // Cubic interpolation function static inline float cube_interp(const float fr, const float inm1, const float in, const float inp1, const float inp2) { return in + 0.5f * fr * (inp1 - inm1 + fr * (4.0f * inp1 + 2.0f * inm1 - 5.0f * in - inp2 + fr * (3.0f * (in - inp1) - inm1 + inp2))); } /* fast sin^2 aproxiamtion, adapted from jan AT rpgfan's posting to the * music-dsp list */ static inline float f_sin_sq(float angle) { const float asqr = angle * angle; float result = -2.39e-08f; result *= asqr; result += 2.7526e-06f; result *= asqr; result -= 1.98409e-04f; result *= asqr; result += 8.3333315e-03f; result *= asqr; result -= 1.666666664e-01f; result *= asqr; result += 1.0f; result *= angle; return result * result; } #ifdef HAVE_LRINTF #define f_round(f) lrintf(f) #else // Round float to int using IEEE int* hack static inline int f_round(float f) { ls_pcast32 p; p.f = f; p.f += (3<<22); return p.i - 0x4b400000; } #endif // Truncate float to int static inline int f_trunc(float f) { return f_round(floorf(f)); } /* Andrew Simper's pow(2, x) aproximation from the music-dsp list */ #if 0 /* original */ static inline float f_pow2(float x) { long *px = (long*)(&x); // store address of float as long pointer const float tx = (x-0.5f) + (3<<22); // temporary value for truncation const long lx = *((long*)&tx) - 0x4b400000; // integer power of 2 const float dx = x-(float)(lx); // float remainder of power of 2 x = 1.0f + dx*(0.6960656421638072f + // cubic apporoximation of 2^x dx*(0.224494337302845f + // for x in the range [0, 1] dx*(0.07944023841053369f))); *px += (lx<<23); // add integer power of 2 to exponent return x; } #else /* union version */ static inline float f_pow2(float x) { ls_pcast32 *px, tx, lx; float dx; px = (ls_pcast32 *)&x; // store address of float as long pointer tx.f = (x-0.5f) + (3<<22); // temporary value for truncation lx.i = tx.i - 0x4b400000; // integer power of 2 dx = x - (float)lx.i; // float remainder of power of 2 x = 1.0f + dx * (0.6960656421638072f + // cubic apporoximation of 2^x dx * (0.224494337302845f + // for x in the range [0, 1] dx * (0.07944023841053369f))); (*px).i += (lx.i << 23); // add integer power of 2 to exponent return (*px).f; } #endif /* Fast exponentiation function, y = e^x */ #define f_exp(x) f_pow2(x * LN2R) #endif lmms-1.1.3/plugins/LadspaEffect/swh/latency_1914.c000066400000000000000000000166151247673406200215740ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "latency_1914.xml" #include "ladspa-util.h" #define ARTIFICIALLATENCY_DELAY 0 #define ARTIFICIALLATENCY_INPUT 1 #define ARTIFICIALLATENCY_OUTPUT 2 #define ARTIFICIALLATENCY_LATENCY 3 static LADSPA_Descriptor *artificialLatencyDescriptor = NULL; typedef struct { LADSPA_Data *delay; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; float fs; LADSPA_Data run_adding_gain; } ArtificialLatency; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return artificialLatencyDescriptor; default: return NULL; } } static void cleanupArtificialLatency(LADSPA_Handle instance) { free(instance); } static void connectPortArtificialLatency( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { ArtificialLatency *plugin; plugin = (ArtificialLatency *)instance; switch (port) { case ARTIFICIALLATENCY_DELAY: plugin->delay = data; break; case ARTIFICIALLATENCY_INPUT: plugin->input = data; break; case ARTIFICIALLATENCY_OUTPUT: plugin->output = data; break; case ARTIFICIALLATENCY_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateArtificialLatency( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { ArtificialLatency *plugin_data = (ArtificialLatency *)malloc(sizeof(ArtificialLatency)); float fs; #line 21 "latency_1914.xml" fs = s_rate; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runArtificialLatency(LADSPA_Handle instance, unsigned long sample_count) { ArtificialLatency *plugin_data = (ArtificialLatency *)instance; /* Delay (ms) (float value) */ const LADSPA_Data delay = *(plugin_data->delay); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float fs = plugin_data->fs; #line 25 "latency_1914.xml" unsigned long pos; const int delay_fr = f_round(delay * 0.001 * fs); if (input != output) { for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos]); } } *(plugin_data->latency) = (float)delay_fr; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainArtificialLatency(LADSPA_Handle instance, LADSPA_Data gain) { ((ArtificialLatency *)instance)->run_adding_gain = gain; } static void runAddingArtificialLatency(LADSPA_Handle instance, unsigned long sample_count) { ArtificialLatency *plugin_data = (ArtificialLatency *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Delay (ms) (float value) */ const LADSPA_Data delay = *(plugin_data->delay); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float fs = plugin_data->fs; #line 25 "latency_1914.xml" unsigned long pos; const int delay_fr = f_round(delay * 0.001 * fs); if (input != output) { for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos]); } } *(plugin_data->latency) = (float)delay_fr; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif artificialLatencyDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (artificialLatencyDescriptor) { artificialLatencyDescriptor->UniqueID = 1914; artificialLatencyDescriptor->Label = "artificialLatency"; artificialLatencyDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; artificialLatencyDescriptor->Name = D_("Artificial latency"); artificialLatencyDescriptor->Maker = "Steve Harris "; artificialLatencyDescriptor->Copyright = "GPL"; artificialLatencyDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); artificialLatencyDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); artificialLatencyDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); artificialLatencyDescriptor->PortNames = (const char **)port_names; /* Parameters for Delay (ms) */ port_descriptors[ARTIFICIALLATENCY_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[ARTIFICIALLATENCY_DELAY] = D_("Delay (ms)"); port_range_hints[ARTIFICIALLATENCY_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[ARTIFICIALLATENCY_DELAY].LowerBound = 0; port_range_hints[ARTIFICIALLATENCY_DELAY].UpperBound = 10000; /* Parameters for Input */ port_descriptors[ARTIFICIALLATENCY_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[ARTIFICIALLATENCY_INPUT] = D_("Input"); port_range_hints[ARTIFICIALLATENCY_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[ARTIFICIALLATENCY_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[ARTIFICIALLATENCY_OUTPUT] = D_("Output"); port_range_hints[ARTIFICIALLATENCY_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[ARTIFICIALLATENCY_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[ARTIFICIALLATENCY_LATENCY] = D_("latency"); port_range_hints[ARTIFICIALLATENCY_LATENCY].HintDescriptor = 0; artificialLatencyDescriptor->activate = NULL; artificialLatencyDescriptor->cleanup = cleanupArtificialLatency; artificialLatencyDescriptor->connect_port = connectPortArtificialLatency; artificialLatencyDescriptor->deactivate = NULL; artificialLatencyDescriptor->instantiate = instantiateArtificialLatency; artificialLatencyDescriptor->run = runArtificialLatency; artificialLatencyDescriptor->run_adding = runAddingArtificialLatency; artificialLatencyDescriptor->set_run_adding_gain = setRunAddingGainArtificialLatency; } } void __attribute__((destructor)) swh_fini() { if (artificialLatencyDescriptor) { free((LADSPA_PortDescriptor *)artificialLatencyDescriptor->PortDescriptors); free((char **)artificialLatencyDescriptor->PortNames); free((LADSPA_PortRangeHint *)artificialLatencyDescriptor->PortRangeHints); free(artificialLatencyDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/lcr_delay_1436.c000066400000000000000000000534631247673406200220740ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "lcr_delay_1436.xml" #include "ladspa-util.h" #include "util/biquad.h" #define LCRDELAY_LDEL 0 #define LCRDELAY_LLEV 1 #define LCRDELAY_CDEL 2 #define LCRDELAY_CLEV 3 #define LCRDELAY_RDEL 4 #define LCRDELAY_RLEV 5 #define LCRDELAY_FEEDBACK 6 #define LCRDELAY_HIGH_D 7 #define LCRDELAY_LOW_D 8 #define LCRDELAY_SPREAD 9 #define LCRDELAY_WET 10 #define LCRDELAY_IN_L 11 #define LCRDELAY_IN_R 12 #define LCRDELAY_OUT_L 13 #define LCRDELAY_OUT_R 14 static LADSPA_Descriptor *lcrDelayDescriptor = NULL; typedef struct { LADSPA_Data *ldel; LADSPA_Data *llev; LADSPA_Data *cdel; LADSPA_Data *clev; LADSPA_Data *rdel; LADSPA_Data *rlev; LADSPA_Data *feedback; LADSPA_Data *high_d; LADSPA_Data *low_d; LADSPA_Data *spread; LADSPA_Data *wet; LADSPA_Data *in_l; LADSPA_Data *in_r; LADSPA_Data *out_l; LADSPA_Data *out_r; LADSPA_Data *buffer; unsigned int buffer_mask; unsigned int buffer_pos; biquad * filters; float fs; float last_cd; float last_cl; float last_ld; float last_ll; float last_rd; float last_rl; LADSPA_Data run_adding_gain; } LcrDelay; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return lcrDelayDescriptor; default: return NULL; } } static void activateLcrDelay(LADSPA_Handle instance) { LcrDelay *plugin_data = (LcrDelay *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; biquad *filters = plugin_data->filters; float fs = plugin_data->fs; float last_cd = plugin_data->last_cd; float last_cl = plugin_data->last_cl; float last_ld = plugin_data->last_ld; float last_ll = plugin_data->last_ll; float last_rd = plugin_data->last_rd; float last_rl = plugin_data->last_rl; #line 41 "lcr_delay_1436.xml" memset(buffer, 0, (buffer_mask + 1) * sizeof(LADSPA_Data)); last_ll = 0.0f; last_cl = 0.0f; last_rl = 0.0f; last_ld = 0.0f; last_cd = 0.0f; last_rd = 0.0f; biquad_init(filters); biquad_init(filters + 1); plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->filters = filters; plugin_data->fs = fs; plugin_data->last_cd = last_cd; plugin_data->last_cl = last_cl; plugin_data->last_ld = last_ld; plugin_data->last_ll = last_ll; plugin_data->last_rd = last_rd; plugin_data->last_rl = last_rl; } static void cleanupLcrDelay(LADSPA_Handle instance) { #line 53 "lcr_delay_1436.xml" LcrDelay *plugin_data = (LcrDelay *)instance; free(plugin_data->filters); free(plugin_data->buffer); free(instance); } static void connectPortLcrDelay( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { LcrDelay *plugin; plugin = (LcrDelay *)instance; switch (port) { case LCRDELAY_LDEL: plugin->ldel = data; break; case LCRDELAY_LLEV: plugin->llev = data; break; case LCRDELAY_CDEL: plugin->cdel = data; break; case LCRDELAY_CLEV: plugin->clev = data; break; case LCRDELAY_RDEL: plugin->rdel = data; break; case LCRDELAY_RLEV: plugin->rlev = data; break; case LCRDELAY_FEEDBACK: plugin->feedback = data; break; case LCRDELAY_HIGH_D: plugin->high_d = data; break; case LCRDELAY_LOW_D: plugin->low_d = data; break; case LCRDELAY_SPREAD: plugin->spread = data; break; case LCRDELAY_WET: plugin->wet = data; break; case LCRDELAY_IN_L: plugin->in_l = data; break; case LCRDELAY_IN_R: plugin->in_r = data; break; case LCRDELAY_OUT_L: plugin->out_l = data; break; case LCRDELAY_OUT_R: plugin->out_r = data; break; } } static LADSPA_Handle instantiateLcrDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { LcrDelay *plugin_data = (LcrDelay *)malloc(sizeof(LcrDelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_pos; biquad *filters = NULL; float fs; float last_cd; float last_cl; float last_ld; float last_ll; float last_rd; float last_rl; #line 21 "lcr_delay_1436.xml" int buffer_size = 32768; fs = s_rate; while (buffer_size < fs * 2.7f) { buffer_size *= 2; } buffer = calloc(buffer_size, sizeof(LADSPA_Data)); buffer_mask = buffer_size - 1; buffer_pos = 0; last_ll = 0.0f; last_cl = 0.0f; last_rl = 0.0f; last_ld = 0.0f; last_cd = 0.0f; last_rd = 0.0f; filters = malloc(2 * sizeof(biquad)); plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->filters = filters; plugin_data->fs = fs; plugin_data->last_cd = last_cd; plugin_data->last_cl = last_cl; plugin_data->last_ld = last_ld; plugin_data->last_ll = last_ll; plugin_data->last_rd = last_rd; plugin_data->last_rl = last_rl; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runLcrDelay(LADSPA_Handle instance, unsigned long sample_count) { LcrDelay *plugin_data = (LcrDelay *)instance; /* L delay (ms) (float value) */ const LADSPA_Data ldel = *(plugin_data->ldel); /* L level (float value) */ const LADSPA_Data llev = *(plugin_data->llev); /* C delay (ms) (float value) */ const LADSPA_Data cdel = *(plugin_data->cdel); /* C level (float value) */ const LADSPA_Data clev = *(plugin_data->clev); /* R delay (ms) (float value) */ const LADSPA_Data rdel = *(plugin_data->rdel); /* R level (float value) */ const LADSPA_Data rlev = *(plugin_data->rlev); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* High damp (%) (float value) */ const LADSPA_Data high_d = *(plugin_data->high_d); /* Low damp (%) (float value) */ const LADSPA_Data low_d = *(plugin_data->low_d); /* Spread (float value) */ const LADSPA_Data spread = *(plugin_data->spread); /* Dry/Wet level (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* L input (array of floats of length sample_count) */ const LADSPA_Data * const in_l = plugin_data->in_l; /* R input (array of floats of length sample_count) */ const LADSPA_Data * const in_r = plugin_data->in_r; /* L output (array of floats of length sample_count) */ LADSPA_Data * const out_l = plugin_data->out_l; /* R output (array of floats of length sample_count) */ LADSPA_Data * const out_r = plugin_data->out_r; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; float last_cd = plugin_data->last_cd; float last_cl = plugin_data->last_cl; float last_ld = plugin_data->last_ld; float last_ll = plugin_data->last_ll; float last_rd = plugin_data->last_rd; float last_rl = plugin_data->last_rl; #line 58 "lcr_delay_1436.xml" unsigned long pos; const float sc_r = 1.0f / (float)sample_count; const float spr_t = 0.5f + spread * 0.01f; const float spr_o = 0.5f - spread * 0.01f; float fb = feedback * 0.01f; float ll, cl, rl, ld, cd, rd; float ll_d, cl_d, rl_d, ld_d, cd_d, rd_d; float left, right; float fbs; /* Feedback signal */ if (fb < -0.99f) { fb = -0.99f; } else if (fb > 0.99f) { fb = 0.99f; } ls_set_params(filters, fs * 0.0001f * powf(2.0f, low_d * 0.12f), -0.5f * low_d, 0.5f, fs); hs_set_params(filters + 1, fs * (0.41f - 0.0001f * powf(2.0f, high_d * 0.12f)), -70.0f, 0.9f, fs); ll = last_ll; /* Start value of Left Level */ ll_d = (llev * 0.01f - last_ll) * sc_r; /* Delta for Left Level */ cl = last_cl; cl_d = (clev * 0.01f - last_cl) * sc_r; rl = last_rl; rl_d = (rlev * 0.01f - last_rl) * sc_r; ld = last_ld; ld_d = (ldel * fs * 0.001f - last_ld) * sc_r; cd = last_cd; cd_d = (cdel * fs * 0.001f - last_cd) * sc_r; rd = last_rd; rd_d = (rdel * fs * 0.001f - last_rd) * sc_r; for (pos = 0; pos < sample_count; pos++) { /* Increment linear interpolators */ ll += ll_d; rl += rl_d; cl += cl_d; ld += ld_d; rd += rd_d; cd += cd_d; /* Write input into delay line */ buffer[buffer_pos] = in_l[pos] + in_r[pos]; /* Add feedback, must be done afterwards for case where C delay = 0 */ fbs = buffer[(buffer_pos - f_round(cd)) & buffer_mask] * fb; fbs = flush_to_zero(fbs); fbs = biquad_run(filters, fbs); fbs = biquad_run(filters + 1, fbs); buffer[buffer_pos] += fbs; /* Outputs from left and right delay beffers + centre mix */ left = buffer[(buffer_pos - f_round(ld)) & buffer_mask] * ll + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; right = buffer[(buffer_pos - f_round(rd)) & buffer_mask] * rl + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; /* Left and right channel outs */ buffer_write(out_l[pos], in_l[pos] * (1.0f - wet) + (left * spr_t + right * spr_o) * wet); buffer_write(out_r[pos], in_r[pos] * (1.0f - wet) + (left * spr_o + right * spr_t) * wet); buffer_pos = (buffer_pos + 1) & buffer_mask; } plugin_data->last_ll = ll; plugin_data->last_cl = cl; plugin_data->last_rl = rl; plugin_data->last_ld = ld; plugin_data->last_cd = cd; plugin_data->last_rd = rd; plugin_data->buffer_pos = buffer_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainLcrDelay(LADSPA_Handle instance, LADSPA_Data gain) { ((LcrDelay *)instance)->run_adding_gain = gain; } static void runAddingLcrDelay(LADSPA_Handle instance, unsigned long sample_count) { LcrDelay *plugin_data = (LcrDelay *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* L delay (ms) (float value) */ const LADSPA_Data ldel = *(plugin_data->ldel); /* L level (float value) */ const LADSPA_Data llev = *(plugin_data->llev); /* C delay (ms) (float value) */ const LADSPA_Data cdel = *(plugin_data->cdel); /* C level (float value) */ const LADSPA_Data clev = *(plugin_data->clev); /* R delay (ms) (float value) */ const LADSPA_Data rdel = *(plugin_data->rdel); /* R level (float value) */ const LADSPA_Data rlev = *(plugin_data->rlev); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* High damp (%) (float value) */ const LADSPA_Data high_d = *(plugin_data->high_d); /* Low damp (%) (float value) */ const LADSPA_Data low_d = *(plugin_data->low_d); /* Spread (float value) */ const LADSPA_Data spread = *(plugin_data->spread); /* Dry/Wet level (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* L input (array of floats of length sample_count) */ const LADSPA_Data * const in_l = plugin_data->in_l; /* R input (array of floats of length sample_count) */ const LADSPA_Data * const in_r = plugin_data->in_r; /* L output (array of floats of length sample_count) */ LADSPA_Data * const out_l = plugin_data->out_l; /* R output (array of floats of length sample_count) */ LADSPA_Data * const out_r = plugin_data->out_r; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; float last_cd = plugin_data->last_cd; float last_cl = plugin_data->last_cl; float last_ld = plugin_data->last_ld; float last_ll = plugin_data->last_ll; float last_rd = plugin_data->last_rd; float last_rl = plugin_data->last_rl; #line 58 "lcr_delay_1436.xml" unsigned long pos; const float sc_r = 1.0f / (float)sample_count; const float spr_t = 0.5f + spread * 0.01f; const float spr_o = 0.5f - spread * 0.01f; float fb = feedback * 0.01f; float ll, cl, rl, ld, cd, rd; float ll_d, cl_d, rl_d, ld_d, cd_d, rd_d; float left, right; float fbs; /* Feedback signal */ if (fb < -0.99f) { fb = -0.99f; } else if (fb > 0.99f) { fb = 0.99f; } ls_set_params(filters, fs * 0.0001f * powf(2.0f, low_d * 0.12f), -0.5f * low_d, 0.5f, fs); hs_set_params(filters + 1, fs * (0.41f - 0.0001f * powf(2.0f, high_d * 0.12f)), -70.0f, 0.9f, fs); ll = last_ll; /* Start value of Left Level */ ll_d = (llev * 0.01f - last_ll) * sc_r; /* Delta for Left Level */ cl = last_cl; cl_d = (clev * 0.01f - last_cl) * sc_r; rl = last_rl; rl_d = (rlev * 0.01f - last_rl) * sc_r; ld = last_ld; ld_d = (ldel * fs * 0.001f - last_ld) * sc_r; cd = last_cd; cd_d = (cdel * fs * 0.001f - last_cd) * sc_r; rd = last_rd; rd_d = (rdel * fs * 0.001f - last_rd) * sc_r; for (pos = 0; pos < sample_count; pos++) { /* Increment linear interpolators */ ll += ll_d; rl += rl_d; cl += cl_d; ld += ld_d; rd += rd_d; cd += cd_d; /* Write input into delay line */ buffer[buffer_pos] = in_l[pos] + in_r[pos]; /* Add feedback, must be done afterwards for case where C delay = 0 */ fbs = buffer[(buffer_pos - f_round(cd)) & buffer_mask] * fb; fbs = flush_to_zero(fbs); fbs = biquad_run(filters, fbs); fbs = biquad_run(filters + 1, fbs); buffer[buffer_pos] += fbs; /* Outputs from left and right delay beffers + centre mix */ left = buffer[(buffer_pos - f_round(ld)) & buffer_mask] * ll + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; right = buffer[(buffer_pos - f_round(rd)) & buffer_mask] * rl + buffer[(buffer_pos - f_round(cd)) & buffer_mask] * cl; /* Left and right channel outs */ buffer_write(out_l[pos], in_l[pos] * (1.0f - wet) + (left * spr_t + right * spr_o) * wet); buffer_write(out_r[pos], in_r[pos] * (1.0f - wet) + (left * spr_o + right * spr_t) * wet); buffer_pos = (buffer_pos + 1) & buffer_mask; } plugin_data->last_ll = ll; plugin_data->last_cl = cl; plugin_data->last_rl = rl; plugin_data->last_ld = ld; plugin_data->last_cd = cd; plugin_data->last_rd = rd; plugin_data->buffer_pos = buffer_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif lcrDelayDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (lcrDelayDescriptor) { lcrDelayDescriptor->UniqueID = 1436; lcrDelayDescriptor->Label = "lcrDelay"; lcrDelayDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; lcrDelayDescriptor->Name = D_("L/C/R Delay"); lcrDelayDescriptor->Maker = "Steve Harris "; lcrDelayDescriptor->Copyright = "GPL"; lcrDelayDescriptor->PortCount = 15; port_descriptors = (LADSPA_PortDescriptor *)calloc(15, sizeof(LADSPA_PortDescriptor)); lcrDelayDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(15, sizeof(LADSPA_PortRangeHint)); lcrDelayDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(15, sizeof(char*)); lcrDelayDescriptor->PortNames = (const char **)port_names; /* Parameters for L delay (ms) */ port_descriptors[LCRDELAY_LDEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_LDEL] = D_("L delay (ms)"); port_range_hints[LCRDELAY_LDEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[LCRDELAY_LDEL].LowerBound = 0; port_range_hints[LCRDELAY_LDEL].UpperBound = 2700; /* Parameters for L level */ port_descriptors[LCRDELAY_LLEV] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_LLEV] = D_("L level"); port_range_hints[LCRDELAY_LLEV].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LCRDELAY_LLEV].LowerBound = 0; port_range_hints[LCRDELAY_LLEV].UpperBound = 50; /* Parameters for C delay (ms) */ port_descriptors[LCRDELAY_CDEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_CDEL] = D_("C delay (ms)"); port_range_hints[LCRDELAY_CDEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[LCRDELAY_CDEL].LowerBound = 0; port_range_hints[LCRDELAY_CDEL].UpperBound = 2700; /* Parameters for C level */ port_descriptors[LCRDELAY_CLEV] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_CLEV] = D_("C level"); port_range_hints[LCRDELAY_CLEV].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LCRDELAY_CLEV].LowerBound = 0; port_range_hints[LCRDELAY_CLEV].UpperBound = 50; /* Parameters for R delay (ms) */ port_descriptors[LCRDELAY_RDEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_RDEL] = D_("R delay (ms)"); port_range_hints[LCRDELAY_RDEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[LCRDELAY_RDEL].LowerBound = 0; port_range_hints[LCRDELAY_RDEL].UpperBound = 2700; /* Parameters for R level */ port_descriptors[LCRDELAY_RLEV] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_RLEV] = D_("R level"); port_range_hints[LCRDELAY_RLEV].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LCRDELAY_RLEV].LowerBound = 0; port_range_hints[LCRDELAY_RLEV].UpperBound = 50; /* Parameters for Feedback */ port_descriptors[LCRDELAY_FEEDBACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_FEEDBACK] = D_("Feedback"); port_range_hints[LCRDELAY_FEEDBACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[LCRDELAY_FEEDBACK].LowerBound = -100; port_range_hints[LCRDELAY_FEEDBACK].UpperBound = 100; /* Parameters for High damp (%) */ port_descriptors[LCRDELAY_HIGH_D] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_HIGH_D] = D_("High damp (%)"); port_range_hints[LCRDELAY_HIGH_D].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LCRDELAY_HIGH_D].LowerBound = 0; port_range_hints[LCRDELAY_HIGH_D].UpperBound = 100; /* Parameters for Low damp (%) */ port_descriptors[LCRDELAY_LOW_D] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_LOW_D] = D_("Low damp (%)"); port_range_hints[LCRDELAY_LOW_D].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LCRDELAY_LOW_D].LowerBound = 0; port_range_hints[LCRDELAY_LOW_D].UpperBound = 100; /* Parameters for Spread */ port_descriptors[LCRDELAY_SPREAD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_SPREAD] = D_("Spread"); port_range_hints[LCRDELAY_SPREAD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LCRDELAY_SPREAD].LowerBound = 0; port_range_hints[LCRDELAY_SPREAD].UpperBound = 50; /* Parameters for Dry/Wet level */ port_descriptors[LCRDELAY_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LCRDELAY_WET] = D_("Dry/Wet level"); port_range_hints[LCRDELAY_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[LCRDELAY_WET].LowerBound = 0; port_range_hints[LCRDELAY_WET].UpperBound = 1; /* Parameters for L input */ port_descriptors[LCRDELAY_IN_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[LCRDELAY_IN_L] = D_("L input"); port_range_hints[LCRDELAY_IN_L].HintDescriptor = 0; /* Parameters for R input */ port_descriptors[LCRDELAY_IN_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[LCRDELAY_IN_R] = D_("R input"); port_range_hints[LCRDELAY_IN_R].HintDescriptor = 0; /* Parameters for L output */ port_descriptors[LCRDELAY_OUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[LCRDELAY_OUT_L] = D_("L output"); port_range_hints[LCRDELAY_OUT_L].HintDescriptor = 0; /* Parameters for R output */ port_descriptors[LCRDELAY_OUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[LCRDELAY_OUT_R] = D_("R output"); port_range_hints[LCRDELAY_OUT_R].HintDescriptor = 0; lcrDelayDescriptor->activate = activateLcrDelay; lcrDelayDescriptor->cleanup = cleanupLcrDelay; lcrDelayDescriptor->connect_port = connectPortLcrDelay; lcrDelayDescriptor->deactivate = NULL; lcrDelayDescriptor->instantiate = instantiateLcrDelay; lcrDelayDescriptor->run = runLcrDelay; lcrDelayDescriptor->run_adding = runAddingLcrDelay; lcrDelayDescriptor->set_run_adding_gain = setRunAddingGainLcrDelay; } } void __attribute__((destructor)) swh_fini() { if (lcrDelayDescriptor) { free((LADSPA_PortDescriptor *)lcrDelayDescriptor->PortDescriptors); free((char **)lcrDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)lcrDelayDescriptor->PortRangeHints); free(lcrDelayDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/lowpass_iir_1891.c000066400000000000000000000204451247673406200224700ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "config.h" #include "util/iir.h" #include "ladspa-util.h" #define LOWPASS_IIR_CUTOFF 0 #define LOWPASS_IIR_STAGES 1 #define LOWPASS_IIR_INPUT 2 #define LOWPASS_IIR_OUTPUT 3 static LADSPA_Descriptor *lowpass_iirDescriptor = NULL; typedef struct { LADSPA_Data *cutoff; LADSPA_Data *stages; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* gt; iirf_t* iirf; long sample_rate; LADSPA_Data run_adding_gain; } Lowpass_iir; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return lowpass_iirDescriptor; default: return NULL; } } static void activateLowpass_iir(LADSPA_Handle instance) { Lowpass_iir *plugin_data = (Lowpass_iir *)instance; iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; gt = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); iirf = init_iirf_t(gt); chebyshev(iirf, gt, 2*CLAMP(f_round(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, *(plugin_data->cutoff)/(float)sample_rate, 0.5f); plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; } static void cleanupLowpass_iir(LADSPA_Handle instance) { Lowpass_iir *plugin_data = (Lowpass_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); free(instance); } static void connectPortLowpass_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Lowpass_iir *plugin; plugin = (Lowpass_iir *)instance; switch (port) { case LOWPASS_IIR_CUTOFF: plugin->cutoff = data; break; case LOWPASS_IIR_STAGES: plugin->stages = data; break; case LOWPASS_IIR_INPUT: plugin->input = data; break; case LOWPASS_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateLowpass_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Lowpass_iir *plugin_data = (Lowpass_iir *)malloc(sizeof(Lowpass_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; sample_rate = s_rate; plugin_data->gt = gt; plugin_data->iirf = iirf; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Lowpass_iir *plugin_data = (Lowpass_iir *)instance; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, cutoff/(float)sample_rate, 0.5f); iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainLowpass_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Lowpass_iir *)instance)->run_adding_gain = gain; } static void runAddingLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Lowpass_iir *plugin_data = (Lowpass_iir *)instance; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* gt = plugin_data->gt; iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; chebyshev(iirf, gt, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, cutoff/(float)sample_rate, 0.5f); iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif lowpass_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (lowpass_iirDescriptor) { lowpass_iirDescriptor->UniqueID = 1891; lowpass_iirDescriptor->Label = "lowpass_iir"; lowpass_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; lowpass_iirDescriptor->Name = D_("Glame Lowpass Filter"); lowpass_iirDescriptor->Maker = "Alexander Ehlert "; lowpass_iirDescriptor->Copyright = "GPL"; lowpass_iirDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); lowpass_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); lowpass_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); lowpass_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Cutoff Frequency */ port_descriptors[LOWPASS_IIR_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LOWPASS_IIR_CUTOFF] = D_("Cutoff Frequency"); port_range_hints[LOWPASS_IIR_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[LOWPASS_IIR_CUTOFF].LowerBound = 0.0001; port_range_hints[LOWPASS_IIR_CUTOFF].UpperBound = 0.45; /* Parameters for Stages(2 poles per stage) */ port_descriptors[LOWPASS_IIR_STAGES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LOWPASS_IIR_STAGES] = D_("Stages(2 poles per stage)"); port_range_hints[LOWPASS_IIR_STAGES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; port_range_hints[LOWPASS_IIR_STAGES].LowerBound = 1.0; port_range_hints[LOWPASS_IIR_STAGES].UpperBound = 10.0; /* Parameters for Input */ port_descriptors[LOWPASS_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[LOWPASS_IIR_INPUT] = D_("Input"); port_range_hints[LOWPASS_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[LOWPASS_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[LOWPASS_IIR_OUTPUT] = D_("Output"); port_range_hints[LOWPASS_IIR_OUTPUT].HintDescriptor = 0; lowpass_iirDescriptor->activate = activateLowpass_iir; lowpass_iirDescriptor->cleanup = cleanupLowpass_iir; lowpass_iirDescriptor->connect_port = connectPortLowpass_iir; lowpass_iirDescriptor->deactivate = NULL; lowpass_iirDescriptor->instantiate = instantiateLowpass_iir; lowpass_iirDescriptor->run = runLowpass_iir; lowpass_iirDescriptor->run_adding = runAddingLowpass_iir; lowpass_iirDescriptor->set_run_adding_gain = setRunAddingGainLowpass_iir; } } void __attribute__((destructor)) swh_fini() { if (lowpass_iirDescriptor) { free((LADSPA_PortDescriptor *)lowpass_iirDescriptor->PortDescriptors); free((char **)lowpass_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)lowpass_iirDescriptor->PortRangeHints); free(lowpass_iirDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/ls_filter_1908.c000066400000000000000000000211371247673406200221160ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "ls_filter_1908.xml" #include "ladspa-util.h" #include "util/ls_filter.h" #define LSFILTER_TYPE 0 #define LSFILTER_CUTOFF 1 #define LSFILTER_RESONANCE 2 #define LSFILTER_INPUT 3 #define LSFILTER_OUTPUT 4 static LADSPA_Descriptor *lsFilterDescriptor = NULL; typedef struct { LADSPA_Data *type; LADSPA_Data *cutoff; LADSPA_Data *resonance; LADSPA_Data *input; LADSPA_Data *output; ls_filt * filt; float fs; LADSPA_Data run_adding_gain; } LsFilter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return lsFilterDescriptor; default: return NULL; } } static void activateLsFilter(LADSPA_Handle instance) { LsFilter *plugin_data = (LsFilter *)instance; ls_filt *filt = plugin_data->filt; float fs = plugin_data->fs; #line 26 "ls_filter_1908.xml" ls_filt_init(filt); plugin_data->filt = filt; plugin_data->fs = fs; } static void cleanupLsFilter(LADSPA_Handle instance) { #line 42 "ls_filter_1908.xml" LsFilter *plugin_data = (LsFilter *)instance; free(plugin_data->filt); free(instance); } static void connectPortLsFilter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { LsFilter *plugin; plugin = (LsFilter *)instance; switch (port) { case LSFILTER_TYPE: plugin->type = data; break; case LSFILTER_CUTOFF: plugin->cutoff = data; break; case LSFILTER_RESONANCE: plugin->resonance = data; break; case LSFILTER_INPUT: plugin->input = data; break; case LSFILTER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateLsFilter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { LsFilter *plugin_data = (LsFilter *)malloc(sizeof(LsFilter)); ls_filt *filt = NULL; float fs; #line 21 "ls_filter_1908.xml" filt = malloc(sizeof(ls_filt)); fs = s_rate; plugin_data->filt = filt; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runLsFilter(LADSPA_Handle instance, unsigned long sample_count) { LsFilter *plugin_data = (LsFilter *)instance; /* Filter type (0=LP, 1=BP, 2=HP) (float value) */ const LADSPA_Data type = *(plugin_data->type); /* Cutoff frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; ls_filt * filt = plugin_data->filt; float fs = plugin_data->fs; #line 30 "ls_filter_1908.xml" unsigned long pos; const ls_filt_type t = (ls_filt_type)f_round(type); ls_filt_setup(filt, t, cutoff, resonance, fs); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], ls_filt_run(filt, input[pos])); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainLsFilter(LADSPA_Handle instance, LADSPA_Data gain) { ((LsFilter *)instance)->run_adding_gain = gain; } static void runAddingLsFilter(LADSPA_Handle instance, unsigned long sample_count) { LsFilter *plugin_data = (LsFilter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Filter type (0=LP, 1=BP, 2=HP) (float value) */ const LADSPA_Data type = *(plugin_data->type); /* Cutoff frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Resonance (float value) */ const LADSPA_Data resonance = *(plugin_data->resonance); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; ls_filt * filt = plugin_data->filt; float fs = plugin_data->fs; #line 30 "ls_filter_1908.xml" unsigned long pos; const ls_filt_type t = (ls_filt_type)f_round(type); ls_filt_setup(filt, t, cutoff, resonance, fs); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], ls_filt_run(filt, input[pos])); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif lsFilterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (lsFilterDescriptor) { lsFilterDescriptor->UniqueID = 1908; lsFilterDescriptor->Label = "lsFilter"; lsFilterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; lsFilterDescriptor->Name = D_("LS Filter"); lsFilterDescriptor->Maker = "Steve Harris "; lsFilterDescriptor->Copyright = "GPL"; lsFilterDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); lsFilterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); lsFilterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); lsFilterDescriptor->PortNames = (const char **)port_names; /* Parameters for Filter type (0=LP, 1=BP, 2=HP) */ port_descriptors[LSFILTER_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LSFILTER_TYPE] = D_("Filter type (0=LP, 1=BP, 2=HP)"); port_range_hints[LSFILTER_TYPE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0 | LADSPA_HINT_INTEGER; port_range_hints[LSFILTER_TYPE].LowerBound = 0; port_range_hints[LSFILTER_TYPE].UpperBound = 2; /* Parameters for Cutoff frequency (Hz) */ port_descriptors[LSFILTER_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LSFILTER_CUTOFF] = D_("Cutoff frequency (Hz)"); port_range_hints[LSFILTER_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE; port_range_hints[LSFILTER_CUTOFF].LowerBound = 0.002; port_range_hints[LSFILTER_CUTOFF].UpperBound = 0.5; /* Parameters for Resonance */ port_descriptors[LSFILTER_RESONANCE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LSFILTER_RESONANCE] = D_("Resonance"); port_range_hints[LSFILTER_RESONANCE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[LSFILTER_RESONANCE].LowerBound = 0.0; port_range_hints[LSFILTER_RESONANCE].UpperBound = 1.0; /* Parameters for Input */ port_descriptors[LSFILTER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[LSFILTER_INPUT] = D_("Input"); port_range_hints[LSFILTER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[LSFILTER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[LSFILTER_OUTPUT] = D_("Output"); port_range_hints[LSFILTER_OUTPUT].HintDescriptor = 0; lsFilterDescriptor->activate = activateLsFilter; lsFilterDescriptor->cleanup = cleanupLsFilter; lsFilterDescriptor->connect_port = connectPortLsFilter; lsFilterDescriptor->deactivate = NULL; lsFilterDescriptor->instantiate = instantiateLsFilter; lsFilterDescriptor->run = runLsFilter; lsFilterDescriptor->run_adding = runAddingLsFilter; lsFilterDescriptor->set_run_adding_gain = setRunAddingGainLsFilter; } } void __attribute__((destructor)) swh_fini() { if (lsFilterDescriptor) { free((LADSPA_PortDescriptor *)lsFilterDescriptor->PortDescriptors); free((char **)lsFilterDescriptor->PortNames); free((LADSPA_PortRangeHint *)lsFilterDescriptor->PortRangeHints); free(lsFilterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/matrix_ms_st_1421.c000066400000000000000000000164541247673406200226400ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define MATRIXMSST_WIDTH 0 #define MATRIXMSST_MID 1 #define MATRIXMSST_SIDE 2 #define MATRIXMSST_LEFT 3 #define MATRIXMSST_RIGHT 4 static LADSPA_Descriptor *matrixMSStDescriptor = NULL; typedef struct { LADSPA_Data *width; LADSPA_Data *mid; LADSPA_Data *side; LADSPA_Data *left; LADSPA_Data *right; LADSPA_Data run_adding_gain; } MatrixMSSt; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return matrixMSStDescriptor; default: return NULL; } } static void cleanupMatrixMSSt(LADSPA_Handle instance) { free(instance); } static void connectPortMatrixMSSt( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { MatrixMSSt *plugin; plugin = (MatrixMSSt *)instance; switch (port) { case MATRIXMSST_WIDTH: plugin->width = data; break; case MATRIXMSST_MID: plugin->mid = data; break; case MATRIXMSST_SIDE: plugin->side = data; break; case MATRIXMSST_LEFT: plugin->left = data; break; case MATRIXMSST_RIGHT: plugin->right = data; break; } } static LADSPA_Handle instantiateMatrixMSSt( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { MatrixMSSt *plugin_data = (MatrixMSSt *)malloc(sizeof(MatrixMSSt)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runMatrixMSSt(LADSPA_Handle instance, unsigned long sample_count) { MatrixMSSt *plugin_data = (MatrixMSSt *)instance; /* Width (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Mid (array of floats of length sample_count) */ const LADSPA_Data * const mid = plugin_data->mid; /* Side (array of floats of length sample_count) */ const LADSPA_Data * const side = plugin_data->side; /* Left (array of floats of length sample_count) */ LADSPA_Data * const left = plugin_data->left; /* Right (array of floats of length sample_count) */ LADSPA_Data * const right = plugin_data->right; #line 16 "matrix_ms_st_1421.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { buffer_write(left[pos], mid[pos] + side[pos] * width); buffer_write(right[pos], mid[pos] - side[pos] * width); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainMatrixMSSt(LADSPA_Handle instance, LADSPA_Data gain) { ((MatrixMSSt *)instance)->run_adding_gain = gain; } static void runAddingMatrixMSSt(LADSPA_Handle instance, unsigned long sample_count) { MatrixMSSt *plugin_data = (MatrixMSSt *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Width (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Mid (array of floats of length sample_count) */ const LADSPA_Data * const mid = plugin_data->mid; /* Side (array of floats of length sample_count) */ const LADSPA_Data * const side = plugin_data->side; /* Left (array of floats of length sample_count) */ LADSPA_Data * const left = plugin_data->left; /* Right (array of floats of length sample_count) */ LADSPA_Data * const right = plugin_data->right; #line 16 "matrix_ms_st_1421.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { buffer_write(left[pos], mid[pos] + side[pos] * width); buffer_write(right[pos], mid[pos] - side[pos] * width); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif matrixMSStDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (matrixMSStDescriptor) { matrixMSStDescriptor->UniqueID = 1421; matrixMSStDescriptor->Label = "matrixMSSt"; matrixMSStDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; matrixMSStDescriptor->Name = D_("Matrix: MS to Stereo"); matrixMSStDescriptor->Maker = "Steve Harris "; matrixMSStDescriptor->Copyright = "GPL"; matrixMSStDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); matrixMSStDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); matrixMSStDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); matrixMSStDescriptor->PortNames = (const char **)port_names; /* Parameters for Width */ port_descriptors[MATRIXMSST_WIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MATRIXMSST_WIDTH] = D_("Width"); port_range_hints[MATRIXMSST_WIDTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[MATRIXMSST_WIDTH].LowerBound = 0; port_range_hints[MATRIXMSST_WIDTH].UpperBound = 2; /* Parameters for Mid */ port_descriptors[MATRIXMSST_MID] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MATRIXMSST_MID] = D_("Mid"); port_range_hints[MATRIXMSST_MID].HintDescriptor = 0; /* Parameters for Side */ port_descriptors[MATRIXMSST_SIDE] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MATRIXMSST_SIDE] = D_("Side"); port_range_hints[MATRIXMSST_SIDE].HintDescriptor = 0; /* Parameters for Left */ port_descriptors[MATRIXMSST_LEFT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MATRIXMSST_LEFT] = D_("Left"); port_range_hints[MATRIXMSST_LEFT].HintDescriptor = 0; /* Parameters for Right */ port_descriptors[MATRIXMSST_RIGHT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MATRIXMSST_RIGHT] = D_("Right"); port_range_hints[MATRIXMSST_RIGHT].HintDescriptor = 0; matrixMSStDescriptor->activate = NULL; matrixMSStDescriptor->cleanup = cleanupMatrixMSSt; matrixMSStDescriptor->connect_port = connectPortMatrixMSSt; matrixMSStDescriptor->deactivate = NULL; matrixMSStDescriptor->instantiate = instantiateMatrixMSSt; matrixMSStDescriptor->run = runMatrixMSSt; matrixMSStDescriptor->run_adding = runAddingMatrixMSSt; matrixMSStDescriptor->set_run_adding_gain = setRunAddingGainMatrixMSSt; } } void __attribute__((destructor)) swh_fini() { if (matrixMSStDescriptor) { free((LADSPA_PortDescriptor *)matrixMSStDescriptor->PortDescriptors); free((char **)matrixMSStDescriptor->PortNames); free((LADSPA_PortRangeHint *)matrixMSStDescriptor->PortRangeHints); free(matrixMSStDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c000066400000000000000000000335251247673406200240320ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "matrix_spatialiser_1422.xml" /* thanks to Steve Harris for walking me through my first plugin ! */ #include "ladspa-util.h" /* we use sin/cos panning and start at pi/4. this is the correction factor to bring the signal back to unity gain in neutral position. it should be 1/x : sin(x) = cos(x) (~1.41421...). but since we are using an approximation of sin/cos, we take its equal gain point, which leads to 1.3333... */ #define EQUALGAINPOINT_OFFSET 128.0f #define EQUALGAINPOINT_TO_UNITY 4.0f / 3.0f #define BITSPERCYCLE 10 /* resolution of the width parameter for */ #define BITSPERQUARTER (BITSPERCYCLE-2) /* one cycle (0-2pi) */ /* borrowed code: http://www.dspguru.com/comp.dsp/tricks/alg/sincos.htm i'm using a constant of 0.75, which makes the calculations simpler and does not yield discontinuities. author: Olli Niemitalo (oniemita@mail.student.oulu.fi) */ static inline void sin_cos_approx(int phasein, float *vsin, float *vcos) { // Modulo phase into quarter, convert to float 0..1 float modphase = (phasein & ((1<current_m_gain; LADSPA_Data current_s_gain = plugin_data->current_s_gain; #line 94 "matrix_spatialiser_1422.xml" sin_cos_approx(EQUALGAINPOINT_OFFSET, ¤t_s_gain, ¤t_m_gain); current_m_gain *= EQUALGAINPOINT_TO_UNITY; /* normalize the neutral */ current_s_gain *= EQUALGAINPOINT_TO_UNITY; /* setting to unity gain. */ plugin_data->current_m_gain = current_m_gain; plugin_data->current_s_gain = current_s_gain; } static void cleanupMatrixSpatialiser(LADSPA_Handle instance) { free(instance); } static void connectPortMatrixSpatialiser( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { MatrixSpatialiser *plugin; plugin = (MatrixSpatialiser *)instance; switch (port) { case MATRIXSPATIALISER_I_LEFT: plugin->i_left = data; break; case MATRIXSPATIALISER_I_RIGHT: plugin->i_right = data; break; case MATRIXSPATIALISER_WIDTH: plugin->width = data; break; case MATRIXSPATIALISER_O_LEFT: plugin->o_left = data; break; case MATRIXSPATIALISER_O_RIGHT: plugin->o_right = data; break; } } static LADSPA_Handle instantiateMatrixSpatialiser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)malloc(sizeof(MatrixSpatialiser)); LADSPA_Data current_m_gain; LADSPA_Data current_s_gain; #line 89 "matrix_spatialiser_1422.xml" current_m_gain = 0.0f; current_s_gain = 0.0f; plugin_data->current_m_gain = current_m_gain; plugin_data->current_s_gain = current_s_gain; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runMatrixSpatialiser(LADSPA_Handle instance, unsigned long sample_count) { MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)instance; /* Input L (array of floats of length sample_count) */ const LADSPA_Data * const i_left = plugin_data->i_left; /* Input R (array of floats of length sample_count) */ const LADSPA_Data * const i_right = plugin_data->i_right; /* Width (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Output L (array of floats of length sample_count) */ LADSPA_Data * const o_left = plugin_data->o_left; /* Output R (array of floats of length sample_count) */ LADSPA_Data * const o_right = plugin_data->o_right; LADSPA_Data current_m_gain = plugin_data->current_m_gain; LADSPA_Data current_s_gain = plugin_data->current_s_gain; #line 100 "matrix_spatialiser_1422.xml" unsigned long pos; LADSPA_Data mid, side; LADSPA_Data m_gain, s_gain; int width_ = f_round(width + EQUALGAINPOINT_OFFSET); /* smoothen the gain changes. to spread the curve over the entire buffer length (i.e.#sample_count samples), make lp dependent on sample_count. */ const float lp = 7.0f / (float) sample_count; /* value found by experiment */ const float lp_i = 1.0f - lp; /* do approximately the same as s_gain = sin(width); m_gain = cos(width); but a lot faster: */ sin_cos_approx(width_, &s_gain, &m_gain); m_gain *= EQUALGAINPOINT_TO_UNITY; /* normalize the neutral */ s_gain *= EQUALGAINPOINT_TO_UNITY; /* setting to unity gain. */ #ifdef DEBUG /* do a "hardware bypass" if width == 0 */ /* no smoothing here */ if (width_ == 128) { for (pos = 0; pos < sample_count; pos++) { buffer_write(o_left[pos], i_left[pos]); buffer_write(o_right[pos], i_right[pos]); } } else #endif for (pos = 0; pos < sample_count; pos++) { current_m_gain = current_m_gain * lp_i + m_gain * lp; current_s_gain = current_s_gain * lp_i + s_gain * lp; mid = (i_left[pos] + i_right[pos]) * 0.5f * current_m_gain; side = (i_left[pos] - i_right[pos]) * 0.5f * current_s_gain; buffer_write(o_left[pos], mid + side); buffer_write(o_right[pos], mid - side); } plugin_data->current_m_gain = current_m_gain; plugin_data->current_s_gain = current_s_gain; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainMatrixSpatialiser(LADSPA_Handle instance, LADSPA_Data gain) { ((MatrixSpatialiser *)instance)->run_adding_gain = gain; } static void runAddingMatrixSpatialiser(LADSPA_Handle instance, unsigned long sample_count) { MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input L (array of floats of length sample_count) */ const LADSPA_Data * const i_left = plugin_data->i_left; /* Input R (array of floats of length sample_count) */ const LADSPA_Data * const i_right = plugin_data->i_right; /* Width (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Output L (array of floats of length sample_count) */ LADSPA_Data * const o_left = plugin_data->o_left; /* Output R (array of floats of length sample_count) */ LADSPA_Data * const o_right = plugin_data->o_right; LADSPA_Data current_m_gain = plugin_data->current_m_gain; LADSPA_Data current_s_gain = plugin_data->current_s_gain; #line 100 "matrix_spatialiser_1422.xml" unsigned long pos; LADSPA_Data mid, side; LADSPA_Data m_gain, s_gain; int width_ = f_round(width + EQUALGAINPOINT_OFFSET); /* smoothen the gain changes. to spread the curve over the entire buffer length (i.e.#sample_count samples), make lp dependent on sample_count. */ const float lp = 7.0f / (float) sample_count; /* value found by experiment */ const float lp_i = 1.0f - lp; /* do approximately the same as s_gain = sin(width); m_gain = cos(width); but a lot faster: */ sin_cos_approx(width_, &s_gain, &m_gain); m_gain *= EQUALGAINPOINT_TO_UNITY; /* normalize the neutral */ s_gain *= EQUALGAINPOINT_TO_UNITY; /* setting to unity gain. */ #ifdef DEBUG /* do a "hardware bypass" if width == 0 */ /* no smoothing here */ if (width_ == 128) { for (pos = 0; pos < sample_count; pos++) { buffer_write(o_left[pos], i_left[pos]); buffer_write(o_right[pos], i_right[pos]); } } else #endif for (pos = 0; pos < sample_count; pos++) { current_m_gain = current_m_gain * lp_i + m_gain * lp; current_s_gain = current_s_gain * lp_i + s_gain * lp; mid = (i_left[pos] + i_right[pos]) * 0.5f * current_m_gain; side = (i_left[pos] - i_right[pos]) * 0.5f * current_s_gain; buffer_write(o_left[pos], mid + side); buffer_write(o_right[pos], mid - side); } plugin_data->current_m_gain = current_m_gain; plugin_data->current_s_gain = current_s_gain; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif matrixSpatialiserDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (matrixSpatialiserDescriptor) { matrixSpatialiserDescriptor->UniqueID = 1422; matrixSpatialiserDescriptor->Label = "matrixSpatialiser"; matrixSpatialiserDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; matrixSpatialiserDescriptor->Name = D_("Matrix Spatialiser"); matrixSpatialiserDescriptor->Maker = "Joern Nettingsmeier "; matrixSpatialiserDescriptor->Copyright = "GPL"; matrixSpatialiserDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); matrixSpatialiserDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); matrixSpatialiserDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); matrixSpatialiserDescriptor->PortNames = (const char **)port_names; /* Parameters for Input L */ port_descriptors[MATRIXSPATIALISER_I_LEFT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSPATIALISER_I_LEFT] = D_("Input L"); port_range_hints[MATRIXSPATIALISER_I_LEFT].HintDescriptor = 0; /* Parameters for Input R */ port_descriptors[MATRIXSPATIALISER_I_RIGHT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSPATIALISER_I_RIGHT] = D_("Input R"); port_range_hints[MATRIXSPATIALISER_I_RIGHT].HintDescriptor = 0; /* Parameters for Width */ port_descriptors[MATRIXSPATIALISER_WIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MATRIXSPATIALISER_WIDTH] = D_("Width"); port_range_hints[MATRIXSPATIALISER_WIDTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[MATRIXSPATIALISER_WIDTH].LowerBound = -512; port_range_hints[MATRIXSPATIALISER_WIDTH].UpperBound = 512; /* Parameters for Output L */ port_descriptors[MATRIXSPATIALISER_O_LEFT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSPATIALISER_O_LEFT] = D_("Output L"); port_range_hints[MATRIXSPATIALISER_O_LEFT].HintDescriptor = 0; /* Parameters for Output R */ port_descriptors[MATRIXSPATIALISER_O_RIGHT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSPATIALISER_O_RIGHT] = D_("Output R"); port_range_hints[MATRIXSPATIALISER_O_RIGHT].HintDescriptor = 0; matrixSpatialiserDescriptor->activate = activateMatrixSpatialiser; matrixSpatialiserDescriptor->cleanup = cleanupMatrixSpatialiser; matrixSpatialiserDescriptor->connect_port = connectPortMatrixSpatialiser; matrixSpatialiserDescriptor->deactivate = NULL; matrixSpatialiserDescriptor->instantiate = instantiateMatrixSpatialiser; matrixSpatialiserDescriptor->run = runMatrixSpatialiser; matrixSpatialiserDescriptor->run_adding = runAddingMatrixSpatialiser; matrixSpatialiserDescriptor->set_run_adding_gain = setRunAddingGainMatrixSpatialiser; } } void __attribute__((destructor)) swh_fini() { if (matrixSpatialiserDescriptor) { free((LADSPA_PortDescriptor *)matrixSpatialiserDescriptor->PortDescriptors); free((char **)matrixSpatialiserDescriptor->PortNames); free((LADSPA_PortRangeHint *)matrixSpatialiserDescriptor->PortRangeHints); free(matrixSpatialiserDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/matrix_st_ms_1420.c000066400000000000000000000152111247673406200226250ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define MATRIXSTMS_LEFT 0 #define MATRIXSTMS_RIGHT 1 #define MATRIXSTMS_MID 2 #define MATRIXSTMS_SIDE 3 static LADSPA_Descriptor *matrixStMSDescriptor = NULL; typedef struct { LADSPA_Data *left; LADSPA_Data *right; LADSPA_Data *mid; LADSPA_Data *side; LADSPA_Data run_adding_gain; } MatrixStMS; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return matrixStMSDescriptor; default: return NULL; } } static void cleanupMatrixStMS(LADSPA_Handle instance) { free(instance); } static void connectPortMatrixStMS( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { MatrixStMS *plugin; plugin = (MatrixStMS *)instance; switch (port) { case MATRIXSTMS_LEFT: plugin->left = data; break; case MATRIXSTMS_RIGHT: plugin->right = data; break; case MATRIXSTMS_MID: plugin->mid = data; break; case MATRIXSTMS_SIDE: plugin->side = data; break; } } static LADSPA_Handle instantiateMatrixStMS( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { MatrixStMS *plugin_data = (MatrixStMS *)malloc(sizeof(MatrixStMS)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runMatrixStMS(LADSPA_Handle instance, unsigned long sample_count) { MatrixStMS *plugin_data = (MatrixStMS *)instance; /* Left (array of floats of length sample_count) */ const LADSPA_Data * const left = plugin_data->left; /* Right (array of floats of length sample_count) */ const LADSPA_Data * const right = plugin_data->right; /* Mid (array of floats of length sample_count) */ LADSPA_Data * const mid = plugin_data->mid; /* Side (array of floats of length sample_count) */ LADSPA_Data * const side = plugin_data->side; #line 16 "matrix_st_ms_1420.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { buffer_write(mid[pos], (left[pos] + right[pos]) * 0.5); buffer_write(side[pos], (left[pos] - right[pos]) * 0.5); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainMatrixStMS(LADSPA_Handle instance, LADSPA_Data gain) { ((MatrixStMS *)instance)->run_adding_gain = gain; } static void runAddingMatrixStMS(LADSPA_Handle instance, unsigned long sample_count) { MatrixStMS *plugin_data = (MatrixStMS *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Left (array of floats of length sample_count) */ const LADSPA_Data * const left = plugin_data->left; /* Right (array of floats of length sample_count) */ const LADSPA_Data * const right = plugin_data->right; /* Mid (array of floats of length sample_count) */ LADSPA_Data * const mid = plugin_data->mid; /* Side (array of floats of length sample_count) */ LADSPA_Data * const side = plugin_data->side; #line 16 "matrix_st_ms_1420.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { buffer_write(mid[pos], (left[pos] + right[pos]) * 0.5); buffer_write(side[pos], (left[pos] - right[pos]) * 0.5); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif matrixStMSDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (matrixStMSDescriptor) { matrixStMSDescriptor->UniqueID = 1420; matrixStMSDescriptor->Label = "matrixStMS"; matrixStMSDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; matrixStMSDescriptor->Name = D_("Matrix: Stereo to MS"); matrixStMSDescriptor->Maker = "Steve Harris "; matrixStMSDescriptor->Copyright = "GPL"; matrixStMSDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); matrixStMSDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); matrixStMSDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); matrixStMSDescriptor->PortNames = (const char **)port_names; /* Parameters for Left */ port_descriptors[MATRIXSTMS_LEFT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSTMS_LEFT] = D_("Left"); port_range_hints[MATRIXSTMS_LEFT].HintDescriptor = 0; /* Parameters for Right */ port_descriptors[MATRIXSTMS_RIGHT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSTMS_RIGHT] = D_("Right"); port_range_hints[MATRIXSTMS_RIGHT].HintDescriptor = 0; /* Parameters for Mid */ port_descriptors[MATRIXSTMS_MID] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSTMS_MID] = D_("Mid"); port_range_hints[MATRIXSTMS_MID].HintDescriptor = 0; /* Parameters for Side */ port_descriptors[MATRIXSTMS_SIDE] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MATRIXSTMS_SIDE] = D_("Side"); port_range_hints[MATRIXSTMS_SIDE].HintDescriptor = 0; matrixStMSDescriptor->activate = NULL; matrixStMSDescriptor->cleanup = cleanupMatrixStMS; matrixStMSDescriptor->connect_port = connectPortMatrixStMS; matrixStMSDescriptor->deactivate = NULL; matrixStMSDescriptor->instantiate = instantiateMatrixStMS; matrixStMSDescriptor->run = runMatrixStMS; matrixStMSDescriptor->run_adding = runAddingMatrixStMS; matrixStMSDescriptor->set_run_adding_gain = setRunAddingGainMatrixStMS; } } void __attribute__((destructor)) swh_fini() { if (matrixStMSDescriptor) { free((LADSPA_PortDescriptor *)matrixStMSDescriptor->PortDescriptors); free((char **)matrixStMSDescriptor->PortNames); free((LADSPA_PortRangeHint *)matrixStMSDescriptor->PortRangeHints); free(matrixStMSDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/mbeq_1197.c000066400000000000000000000643621247673406200210660ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "mbeq_1197.xml" #include "config.h" #ifdef FFTW3 #include typedef fftwf_plan fft_plan; typedef float fftw_real; #else #ifdef EXPLICIT_S #include #else #include #endif //EXPLICIT_S typedef rfftw_plan fft_plan; #endif //FFTW3 #include "ladspa-util.h" #define FFT_LENGTH 1024 #define OVER_SAMP 4 #define BANDS 15 float bands[BANDS] = { 50.00f, 100.00f, 155.56f, 220.00f, 311.13f, 440.00f, 622.25f, 880.00f, 1244.51f, 1760.00f, 2489.02f, 3519.95, 4978.04f, 9956.08f, 19912.16f }; #define MBEQ_BAND_1 0 #define MBEQ_BAND_2 1 #define MBEQ_BAND_3 2 #define MBEQ_BAND_4 3 #define MBEQ_BAND_5 4 #define MBEQ_BAND_6 5 #define MBEQ_BAND_7 6 #define MBEQ_BAND_8 7 #define MBEQ_BAND_9 8 #define MBEQ_BAND_10 9 #define MBEQ_BAND_11 10 #define MBEQ_BAND_12 11 #define MBEQ_BAND_13 12 #define MBEQ_BAND_14 13 #define MBEQ_BAND_15 14 #define MBEQ_INPUT 15 #define MBEQ_OUTPUT 16 #define MBEQ_LATENCY 17 static LADSPA_Descriptor *mbeqDescriptor = NULL; typedef struct { LADSPA_Data *band_1; LADSPA_Data *band_2; LADSPA_Data *band_3; LADSPA_Data *band_4; LADSPA_Data *band_5; LADSPA_Data *band_6; LADSPA_Data *band_7; LADSPA_Data *band_8; LADSPA_Data *band_9; LADSPA_Data *band_10; LADSPA_Data *band_11; LADSPA_Data *band_12; LADSPA_Data *band_13; LADSPA_Data *band_14; LADSPA_Data *band_15; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; int * bin_base; float * bin_delta; fftw_real * comp; float * db_table; long fifo_pos; LADSPA_Data *in_fifo; LADSPA_Data *out_accum; LADSPA_Data *out_fifo; fft_plan plan_cr; fft_plan plan_rc; fftw_real * real; float * window; LADSPA_Data run_adding_gain; } Mbeq; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return mbeqDescriptor; default: return NULL; } } static void activateMbeq(LADSPA_Handle instance) { Mbeq *plugin_data = (Mbeq *)instance; int *bin_base = plugin_data->bin_base; float *bin_delta = plugin_data->bin_delta; fftw_real *comp = plugin_data->comp; float *db_table = plugin_data->db_table; long fifo_pos = plugin_data->fifo_pos; LADSPA_Data *in_fifo = plugin_data->in_fifo; LADSPA_Data *out_accum = plugin_data->out_accum; LADSPA_Data *out_fifo = plugin_data->out_fifo; fft_plan plan_cr = plugin_data->plan_cr; fft_plan plan_rc = plugin_data->plan_rc; fftw_real *real = plugin_data->real; float *window = plugin_data->window; #line 109 "mbeq_1197.xml" fifo_pos = 0; plugin_data->bin_base = bin_base; plugin_data->bin_delta = bin_delta; plugin_data->comp = comp; plugin_data->db_table = db_table; plugin_data->fifo_pos = fifo_pos; plugin_data->in_fifo = in_fifo; plugin_data->out_accum = out_accum; plugin_data->out_fifo = out_fifo; plugin_data->plan_cr = plan_cr; plugin_data->plan_rc = plan_rc; plugin_data->real = real; plugin_data->window = window; } static void cleanupMbeq(LADSPA_Handle instance) { #line 113 "mbeq_1197.xml" Mbeq *plugin_data = (Mbeq *)instance; free(plugin_data->in_fifo); free(plugin_data->out_fifo); free(plugin_data->out_accum); free(plugin_data->real); free(plugin_data->comp); free(plugin_data->window); free(plugin_data->bin_base); free(plugin_data->bin_delta); free(plugin_data->db_table); free(instance); } static void connectPortMbeq( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Mbeq *plugin; plugin = (Mbeq *)instance; switch (port) { case MBEQ_BAND_1: plugin->band_1 = data; break; case MBEQ_BAND_2: plugin->band_2 = data; break; case MBEQ_BAND_3: plugin->band_3 = data; break; case MBEQ_BAND_4: plugin->band_4 = data; break; case MBEQ_BAND_5: plugin->band_5 = data; break; case MBEQ_BAND_6: plugin->band_6 = data; break; case MBEQ_BAND_7: plugin->band_7 = data; break; case MBEQ_BAND_8: plugin->band_8 = data; break; case MBEQ_BAND_9: plugin->band_9 = data; break; case MBEQ_BAND_10: plugin->band_10 = data; break; case MBEQ_BAND_11: plugin->band_11 = data; break; case MBEQ_BAND_12: plugin->band_12 = data; break; case MBEQ_BAND_13: plugin->band_13 = data; break; case MBEQ_BAND_14: plugin->band_14 = data; break; case MBEQ_BAND_15: plugin->band_15 = data; break; case MBEQ_INPUT: plugin->input = data; break; case MBEQ_OUTPUT: plugin->output = data; break; case MBEQ_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiateMbeq( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Mbeq *plugin_data = (Mbeq *)malloc(sizeof(Mbeq)); int *bin_base = NULL; float *bin_delta = NULL; fftw_real *comp = NULL; float *db_table = NULL; long fifo_pos; LADSPA_Data *in_fifo = NULL; LADSPA_Data *out_accum = NULL; LADSPA_Data *out_fifo = NULL; fft_plan plan_cr; fft_plan plan_rc; fftw_real *real = NULL; float *window = NULL; #line 51 "mbeq_1197.xml" int i, bin; float last_bin, next_bin; float db; float hz_per_bin = (float)s_rate / (float)FFT_LENGTH; in_fifo = calloc(FFT_LENGTH, sizeof(LADSPA_Data)); out_fifo = calloc(FFT_LENGTH, sizeof(LADSPA_Data)); out_accum = calloc(FFT_LENGTH * 2, sizeof(LADSPA_Data)); real = calloc(FFT_LENGTH, sizeof(fftw_real)); comp = calloc(FFT_LENGTH, sizeof(fftw_real)); window = calloc(FFT_LENGTH, sizeof(float)); bin_base = calloc(FFT_LENGTH/2, sizeof(int)); bin_delta = calloc(FFT_LENGTH/2, sizeof(float)); fifo_pos = 0; #ifdef FFTW3 plan_rc = fftwf_plan_r2r_1d(FFT_LENGTH, real, comp, FFTW_R2HC, FFTW_MEASURE); plan_cr = fftwf_plan_r2r_1d(FFT_LENGTH, comp, real, FFTW_HC2R, FFTW_MEASURE); #else plan_rc = rfftw_create_plan(FFT_LENGTH, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE); plan_cr = rfftw_create_plan(FFT_LENGTH, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE); #endif // Create raised cosine window table for (i=0; i < FFT_LENGTH; i++) { window[i] = -0.5f*cos(2.0f*M_PI*(double)i/(double)FFT_LENGTH)+0.5f; window[i] *= 2.0f; } // Create db->coeffiecnt lookup table db_table = malloc(1000 * sizeof(float)); for (i=0; i < 1000; i++) { db = ((float)i/10) - 70; db_table[i] = pow(10.0f, db/20.0f); } // Create FFT bin -> band + delta tables bin = 0; while (bin <= bands[0]/hz_per_bin) { bin_base[bin] = 0; bin_delta[bin++] = 0.0f; } for (i = 1; i < BANDS-1 && bin < (FFT_LENGTH/2)-1 && bands[i+1] < s_rate/2; i++) { last_bin = bin; next_bin = (bands[i+1])/hz_per_bin; while (bin <= next_bin) { bin_base[bin] = i; bin_delta[bin] = (float)(bin - last_bin) / (float)(next_bin - last_bin); bin++; } } for (; bin < (FFT_LENGTH/2); bin++) { bin_base[bin] = BANDS-1; bin_delta[bin] = 0.0f; } plugin_data->bin_base = bin_base; plugin_data->bin_delta = bin_delta; plugin_data->comp = comp; plugin_data->db_table = db_table; plugin_data->fifo_pos = fifo_pos; plugin_data->in_fifo = in_fifo; plugin_data->out_accum = out_accum; plugin_data->out_fifo = out_fifo; plugin_data->plan_cr = plan_cr; plugin_data->plan_rc = plan_rc; plugin_data->real = real; plugin_data->window = window; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runMbeq(LADSPA_Handle instance, unsigned long sample_count) { Mbeq *plugin_data = (Mbeq *)instance; /* 50Hz gain (low shelving) (float value) */ const LADSPA_Data band_1 = *(plugin_data->band_1); /* 100Hz gain (float value) */ const LADSPA_Data band_2 = *(plugin_data->band_2); /* 156Hz gain (float value) */ const LADSPA_Data band_3 = *(plugin_data->band_3); /* 220Hz gain (float value) */ const LADSPA_Data band_4 = *(plugin_data->band_4); /* 311Hz gain (float value) */ const LADSPA_Data band_5 = *(plugin_data->band_5); /* 440Hz gain (float value) */ const LADSPA_Data band_6 = *(plugin_data->band_6); /* 622Hz gain (float value) */ const LADSPA_Data band_7 = *(plugin_data->band_7); /* 880Hz gain (float value) */ const LADSPA_Data band_8 = *(plugin_data->band_8); /* 1250Hz gain (float value) */ const LADSPA_Data band_9 = *(plugin_data->band_9); /* 1750Hz gain (float value) */ const LADSPA_Data band_10 = *(plugin_data->band_10); /* 2500Hz gain (float value) */ const LADSPA_Data band_11 = *(plugin_data->band_11); /* 3500Hz gain (float value) */ const LADSPA_Data band_12 = *(plugin_data->band_12); /* 5000Hz gain (float value) */ const LADSPA_Data band_13 = *(plugin_data->band_13); /* 10000Hz gain (float value) */ const LADSPA_Data band_14 = *(plugin_data->band_14); /* 20000Hz gain (float value) */ const LADSPA_Data band_15 = *(plugin_data->band_15); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; int * bin_base = plugin_data->bin_base; float * bin_delta = plugin_data->bin_delta; fftw_real * comp = plugin_data->comp; float * db_table = plugin_data->db_table; long fifo_pos = plugin_data->fifo_pos; LADSPA_Data * in_fifo = plugin_data->in_fifo; LADSPA_Data * out_accum = plugin_data->out_accum; LADSPA_Data * out_fifo = plugin_data->out_fifo; fft_plan plan_cr = plugin_data->plan_cr; fft_plan plan_rc = plugin_data->plan_rc; fftw_real * real = plugin_data->real; float * window = plugin_data->window; #line 125 "mbeq_1197.xml" int i, bin, gain_idx; float gains[BANDS + 1] = { band_1, band_2, band_3, band_4, band_5, band_6, band_7, band_8, band_9, band_10, band_11, band_12, band_13, band_14, band_15, 0.0f }; float coefs[FFT_LENGTH / 2]; unsigned long pos; int step_size = FFT_LENGTH / OVER_SAMP; int fft_latency = FFT_LENGTH - step_size; // Convert gains from dB to co-efficents for (i = 0; i < BANDS; i++) { gain_idx = (int)((gains[i] * 10) + 700); gains[i] = db_table[LIMIT(gain_idx, 0, 999)]; } // Calculate coefficients for each bin of FFT coefs[0] = 0.0f; for (bin=1; bin < (FFT_LENGTH/2-1); bin++) { coefs[bin] = ((1.0f-bin_delta[bin]) * gains[bin_base[bin]]) + (bin_delta[bin] * gains[bin_base[bin]+1]); } if (fifo_pos == 0) { fifo_pos = fft_latency; } for (pos = 0; pos < sample_count; pos++) { in_fifo[fifo_pos] = input[pos]; buffer_write(output[pos], out_fifo[fifo_pos-fft_latency]); fifo_pos++; // If the FIFO is full if (fifo_pos >= FFT_LENGTH) { fifo_pos = fft_latency; // Window input FIFO for (i=0; i < FFT_LENGTH; i++) { real[i] = in_fifo[i] * window[i]; } // Run the real->complex transform #ifdef FFTW3 fftwf_execute(plan_rc); #else rfftw_one(plan_rc, real, comp); #endif // Multiply the bins magnitudes by the coeficients comp[0] *= coefs[0]; for (i = 1; i < FFT_LENGTH/2; i++) { comp[i] *= coefs[i]; comp[FFT_LENGTH-i] *= coefs[i]; } // Run the complex->real transform #ifdef FFTW3 fftwf_execute(plan_cr); #else rfftw_one(plan_cr, comp, real); #endif // Window into the output accumulator for (i = 0; i < FFT_LENGTH; i++) { out_accum[i] += 0.9186162f * window[i] * real[i]/(FFT_LENGTH * OVER_SAMP); } for (i = 0; i < step_size; i++) { out_fifo[i] = out_accum[i]; } // Shift output accumulator memmove(out_accum, out_accum + step_size, FFT_LENGTH*sizeof(LADSPA_Data)); // Shift input fifo for (i = 0; i < fft_latency; i++) { in_fifo[i] = in_fifo[i+step_size]; } } } // Store the fifo_position plugin_data->fifo_pos = fifo_pos; *(plugin_data->latency) = fft_latency; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainMbeq(LADSPA_Handle instance, LADSPA_Data gain) { ((Mbeq *)instance)->run_adding_gain = gain; } static void runAddingMbeq(LADSPA_Handle instance, unsigned long sample_count) { Mbeq *plugin_data = (Mbeq *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* 50Hz gain (low shelving) (float value) */ const LADSPA_Data band_1 = *(plugin_data->band_1); /* 100Hz gain (float value) */ const LADSPA_Data band_2 = *(plugin_data->band_2); /* 156Hz gain (float value) */ const LADSPA_Data band_3 = *(plugin_data->band_3); /* 220Hz gain (float value) */ const LADSPA_Data band_4 = *(plugin_data->band_4); /* 311Hz gain (float value) */ const LADSPA_Data band_5 = *(plugin_data->band_5); /* 440Hz gain (float value) */ const LADSPA_Data band_6 = *(plugin_data->band_6); /* 622Hz gain (float value) */ const LADSPA_Data band_7 = *(plugin_data->band_7); /* 880Hz gain (float value) */ const LADSPA_Data band_8 = *(plugin_data->band_8); /* 1250Hz gain (float value) */ const LADSPA_Data band_9 = *(plugin_data->band_9); /* 1750Hz gain (float value) */ const LADSPA_Data band_10 = *(plugin_data->band_10); /* 2500Hz gain (float value) */ const LADSPA_Data band_11 = *(plugin_data->band_11); /* 3500Hz gain (float value) */ const LADSPA_Data band_12 = *(plugin_data->band_12); /* 5000Hz gain (float value) */ const LADSPA_Data band_13 = *(plugin_data->band_13); /* 10000Hz gain (float value) */ const LADSPA_Data band_14 = *(plugin_data->band_14); /* 20000Hz gain (float value) */ const LADSPA_Data band_15 = *(plugin_data->band_15); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; int * bin_base = plugin_data->bin_base; float * bin_delta = plugin_data->bin_delta; fftw_real * comp = plugin_data->comp; float * db_table = plugin_data->db_table; long fifo_pos = plugin_data->fifo_pos; LADSPA_Data * in_fifo = plugin_data->in_fifo; LADSPA_Data * out_accum = plugin_data->out_accum; LADSPA_Data * out_fifo = plugin_data->out_fifo; fft_plan plan_cr = plugin_data->plan_cr; fft_plan plan_rc = plugin_data->plan_rc; fftw_real * real = plugin_data->real; float * window = plugin_data->window; #line 125 "mbeq_1197.xml" int i, bin, gain_idx; float gains[BANDS + 1] = { band_1, band_2, band_3, band_4, band_5, band_6, band_7, band_8, band_9, band_10, band_11, band_12, band_13, band_14, band_15, 0.0f }; float coefs[FFT_LENGTH / 2]; unsigned long pos; int step_size = FFT_LENGTH / OVER_SAMP; int fft_latency = FFT_LENGTH - step_size; // Convert gains from dB to co-efficents for (i = 0; i < BANDS; i++) { gain_idx = (int)((gains[i] * 10) + 700); gains[i] = db_table[LIMIT(gain_idx, 0, 999)]; } // Calculate coefficients for each bin of FFT coefs[0] = 0.0f; for (bin=1; bin < (FFT_LENGTH/2-1); bin++) { coefs[bin] = ((1.0f-bin_delta[bin]) * gains[bin_base[bin]]) + (bin_delta[bin] * gains[bin_base[bin]+1]); } if (fifo_pos == 0) { fifo_pos = fft_latency; } for (pos = 0; pos < sample_count; pos++) { in_fifo[fifo_pos] = input[pos]; buffer_write(output[pos], out_fifo[fifo_pos-fft_latency]); fifo_pos++; // If the FIFO is full if (fifo_pos >= FFT_LENGTH) { fifo_pos = fft_latency; // Window input FIFO for (i=0; i < FFT_LENGTH; i++) { real[i] = in_fifo[i] * window[i]; } // Run the real->complex transform #ifdef FFTW3 fftwf_execute(plan_rc); #else rfftw_one(plan_rc, real, comp); #endif // Multiply the bins magnitudes by the coeficients comp[0] *= coefs[0]; for (i = 1; i < FFT_LENGTH/2; i++) { comp[i] *= coefs[i]; comp[FFT_LENGTH-i] *= coefs[i]; } // Run the complex->real transform #ifdef FFTW3 fftwf_execute(plan_cr); #else rfftw_one(plan_cr, comp, real); #endif // Window into the output accumulator for (i = 0; i < FFT_LENGTH; i++) { out_accum[i] += 0.9186162f * window[i] * real[i]/(FFT_LENGTH * OVER_SAMP); } for (i = 0; i < step_size; i++) { out_fifo[i] = out_accum[i]; } // Shift output accumulator memmove(out_accum, out_accum + step_size, FFT_LENGTH*sizeof(LADSPA_Data)); // Shift input fifo for (i = 0; i < fft_latency; i++) { in_fifo[i] = in_fifo[i+step_size]; } } } // Store the fifo_position plugin_data->fifo_pos = fifo_pos; *(plugin_data->latency) = fft_latency; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif mbeqDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (mbeqDescriptor) { mbeqDescriptor->UniqueID = 1197; mbeqDescriptor->Label = "mbeq"; mbeqDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mbeqDescriptor->Name = D_("Multiband EQ"); mbeqDescriptor->Maker = "Steve Harris "; mbeqDescriptor->Copyright = "GPL"; mbeqDescriptor->PortCount = 18; port_descriptors = (LADSPA_PortDescriptor *)calloc(18, sizeof(LADSPA_PortDescriptor)); mbeqDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(18, sizeof(LADSPA_PortRangeHint)); mbeqDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(18, sizeof(char*)); mbeqDescriptor->PortNames = (const char **)port_names; /* Parameters for 50Hz gain (low shelving) */ port_descriptors[MBEQ_BAND_1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_1] = D_("50Hz gain (low shelving)"); port_range_hints[MBEQ_BAND_1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_1].LowerBound = -70; port_range_hints[MBEQ_BAND_1].UpperBound = +30; /* Parameters for 100Hz gain */ port_descriptors[MBEQ_BAND_2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_2] = D_("100Hz gain"); port_range_hints[MBEQ_BAND_2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_2].LowerBound = -70; port_range_hints[MBEQ_BAND_2].UpperBound = +30; /* Parameters for 156Hz gain */ port_descriptors[MBEQ_BAND_3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_3] = D_("156Hz gain"); port_range_hints[MBEQ_BAND_3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_3].LowerBound = -70; port_range_hints[MBEQ_BAND_3].UpperBound = +30; /* Parameters for 220Hz gain */ port_descriptors[MBEQ_BAND_4] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_4] = D_("220Hz gain"); port_range_hints[MBEQ_BAND_4].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_4].LowerBound = -70; port_range_hints[MBEQ_BAND_4].UpperBound = +30; /* Parameters for 311Hz gain */ port_descriptors[MBEQ_BAND_5] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_5] = D_("311Hz gain"); port_range_hints[MBEQ_BAND_5].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_5].LowerBound = -70; port_range_hints[MBEQ_BAND_5].UpperBound = +30; /* Parameters for 440Hz gain */ port_descriptors[MBEQ_BAND_6] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_6] = D_("440Hz gain"); port_range_hints[MBEQ_BAND_6].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_6].LowerBound = -70; port_range_hints[MBEQ_BAND_6].UpperBound = +30; /* Parameters for 622Hz gain */ port_descriptors[MBEQ_BAND_7] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_7] = D_("622Hz gain"); port_range_hints[MBEQ_BAND_7].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_7].LowerBound = -70; port_range_hints[MBEQ_BAND_7].UpperBound = +30; /* Parameters for 880Hz gain */ port_descriptors[MBEQ_BAND_8] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_8] = D_("880Hz gain"); port_range_hints[MBEQ_BAND_8].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_8].LowerBound = -70; port_range_hints[MBEQ_BAND_8].UpperBound = +30; /* Parameters for 1250Hz gain */ port_descriptors[MBEQ_BAND_9] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_9] = D_("1250Hz gain"); port_range_hints[MBEQ_BAND_9].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_9].LowerBound = -70; port_range_hints[MBEQ_BAND_9].UpperBound = +30; /* Parameters for 1750Hz gain */ port_descriptors[MBEQ_BAND_10] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_10] = D_("1750Hz gain"); port_range_hints[MBEQ_BAND_10].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_10].LowerBound = -70; port_range_hints[MBEQ_BAND_10].UpperBound = +30; /* Parameters for 2500Hz gain */ port_descriptors[MBEQ_BAND_11] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_11] = D_("2500Hz gain"); port_range_hints[MBEQ_BAND_11].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_11].LowerBound = -70; port_range_hints[MBEQ_BAND_11].UpperBound = +30; /* Parameters for 3500Hz gain */ port_descriptors[MBEQ_BAND_12] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_12] = D_("3500Hz gain"); port_range_hints[MBEQ_BAND_12].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_12].LowerBound = -70; port_range_hints[MBEQ_BAND_12].UpperBound = +30; /* Parameters for 5000Hz gain */ port_descriptors[MBEQ_BAND_13] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_13] = D_("5000Hz gain"); port_range_hints[MBEQ_BAND_13].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_13].LowerBound = -70; port_range_hints[MBEQ_BAND_13].UpperBound = +30; /* Parameters for 10000Hz gain */ port_descriptors[MBEQ_BAND_14] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_14] = D_("10000Hz gain"); port_range_hints[MBEQ_BAND_14].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_14].LowerBound = -70; port_range_hints[MBEQ_BAND_14].UpperBound = +30; /* Parameters for 20000Hz gain */ port_descriptors[MBEQ_BAND_15] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_BAND_15] = D_("20000Hz gain"); port_range_hints[MBEQ_BAND_15].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MBEQ_BAND_15].LowerBound = -70; port_range_hints[MBEQ_BAND_15].UpperBound = +30; /* Parameters for Input */ port_descriptors[MBEQ_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MBEQ_INPUT] = D_("Input"); port_range_hints[MBEQ_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[MBEQ_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MBEQ_OUTPUT] = D_("Output"); port_range_hints[MBEQ_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[MBEQ_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[MBEQ_LATENCY] = D_("latency"); port_range_hints[MBEQ_LATENCY].HintDescriptor = 0; mbeqDescriptor->activate = activateMbeq; mbeqDescriptor->cleanup = cleanupMbeq; mbeqDescriptor->connect_port = connectPortMbeq; mbeqDescriptor->deactivate = NULL; mbeqDescriptor->instantiate = instantiateMbeq; mbeqDescriptor->run = runMbeq; mbeqDescriptor->run_adding = runAddingMbeq; mbeqDescriptor->set_run_adding_gain = setRunAddingGainMbeq; } } void __attribute__((destructor)) swh_fini() { if (mbeqDescriptor) { free((LADSPA_PortDescriptor *)mbeqDescriptor->PortDescriptors); free((char **)mbeqDescriptor->PortNames); free((LADSPA_PortRangeHint *)mbeqDescriptor->PortRangeHints); free(mbeqDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/mod_delay_1419.c000066400000000000000000000216741247673406200220730ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "mod_delay_1419.xml" #include "ladspa-util.h" #define MODDELAY_BASE 0 #define MODDELAY_DELAY 1 #define MODDELAY_INPUT 2 #define MODDELAY_OUTPUT 3 static LADSPA_Descriptor *modDelayDescriptor = NULL; typedef struct { LADSPA_Data *base; LADSPA_Data *delay; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; unsigned int buffer_mask; float fs; unsigned int write_ptr; LADSPA_Data run_adding_gain; } ModDelay; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return modDelayDescriptor; default: return NULL; } } static void activateModDelay(LADSPA_Handle instance) { ModDelay *plugin_data = (ModDelay *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; float fs = plugin_data->fs; unsigned int write_ptr = plugin_data->write_ptr; #line 33 "mod_delay_1419.xml" memset(buffer, 0, buffer_mask + 1); write_ptr = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->fs = fs; plugin_data->write_ptr = write_ptr; } static void cleanupModDelay(LADSPA_Handle instance) { #line 38 "mod_delay_1419.xml" ModDelay *plugin_data = (ModDelay *)instance; free(plugin_data->buffer); free(instance); } static void connectPortModDelay( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { ModDelay *plugin; plugin = (ModDelay *)instance; switch (port) { case MODDELAY_BASE: plugin->base = data; break; case MODDELAY_DELAY: plugin->delay = data; break; case MODDELAY_INPUT: plugin->input = data; break; case MODDELAY_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateModDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { ModDelay *plugin_data = (ModDelay *)malloc(sizeof(ModDelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; float fs; unsigned int write_ptr; #line 21 "mod_delay_1419.xml" unsigned int size = 32768; fs = s_rate; while (size < 2.7f * fs) { size *= 2; } buffer = calloc(size, sizeof(LADSPA_Data)); buffer_mask = size - 1; write_ptr = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->fs = fs; plugin_data->write_ptr = write_ptr; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runModDelay(LADSPA_Handle instance, unsigned long sample_count) { ModDelay *plugin_data = (ModDelay *)instance; /* Base delay (s) (float value) */ const LADSPA_Data base = *(plugin_data->base); /* Delay (s) (array of floats of length sample_count) */ const LADSPA_Data * const delay = plugin_data->delay; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; float fs = plugin_data->fs; unsigned int write_ptr = plugin_data->write_ptr; #line 42 "mod_delay_1419.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { float tmp; const float rpf = modff((base + delay[pos]) * fs, &tmp); const int rp = write_ptr - 4 - f_round(tmp); buffer[write_ptr++] = input[pos]; write_ptr &= buffer_mask; buffer_write(output[pos], cube_interp(rpf, buffer[(rp - 1) & buffer_mask], buffer[rp & buffer_mask], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); } plugin_data->write_ptr = write_ptr; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainModDelay(LADSPA_Handle instance, LADSPA_Data gain) { ((ModDelay *)instance)->run_adding_gain = gain; } static void runAddingModDelay(LADSPA_Handle instance, unsigned long sample_count) { ModDelay *plugin_data = (ModDelay *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Base delay (s) (float value) */ const LADSPA_Data base = *(plugin_data->base); /* Delay (s) (array of floats of length sample_count) */ const LADSPA_Data * const delay = plugin_data->delay; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; float fs = plugin_data->fs; unsigned int write_ptr = plugin_data->write_ptr; #line 42 "mod_delay_1419.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { float tmp; const float rpf = modff((base + delay[pos]) * fs, &tmp); const int rp = write_ptr - 4 - f_round(tmp); buffer[write_ptr++] = input[pos]; write_ptr &= buffer_mask; buffer_write(output[pos], cube_interp(rpf, buffer[(rp - 1) & buffer_mask], buffer[rp & buffer_mask], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); } plugin_data->write_ptr = write_ptr; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif modDelayDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (modDelayDescriptor) { modDelayDescriptor->UniqueID = 1419; modDelayDescriptor->Label = "modDelay"; modDelayDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; modDelayDescriptor->Name = D_("Modulatable delay"); modDelayDescriptor->Maker = "Steve Harris "; modDelayDescriptor->Copyright = "GPL"; modDelayDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); modDelayDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); modDelayDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); modDelayDescriptor->PortNames = (const char **)port_names; /* Parameters for Base delay (s) */ port_descriptors[MODDELAY_BASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MODDELAY_BASE] = D_("Base delay (s)"); port_range_hints[MODDELAY_BASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[MODDELAY_BASE].LowerBound = 0; port_range_hints[MODDELAY_BASE].UpperBound = 1; /* Parameters for Delay (s) */ port_descriptors[MODDELAY_DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MODDELAY_DELAY] = D_("Delay (s)"); port_range_hints[MODDELAY_DELAY].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MODDELAY_DELAY].LowerBound = 0; port_range_hints[MODDELAY_DELAY].UpperBound = 1.7; /* Parameters for Input */ port_descriptors[MODDELAY_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MODDELAY_INPUT] = D_("Input"); port_range_hints[MODDELAY_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[MODDELAY_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MODDELAY_OUTPUT] = D_("Output"); port_range_hints[MODDELAY_OUTPUT].HintDescriptor = 0; modDelayDescriptor->activate = activateModDelay; modDelayDescriptor->cleanup = cleanupModDelay; modDelayDescriptor->connect_port = connectPortModDelay; modDelayDescriptor->deactivate = NULL; modDelayDescriptor->instantiate = instantiateModDelay; modDelayDescriptor->run = runModDelay; modDelayDescriptor->run_adding = runAddingModDelay; modDelayDescriptor->set_run_adding_gain = setRunAddingGainModDelay; } } void __attribute__((destructor)) swh_fini() { if (modDelayDescriptor) { free((LADSPA_PortDescriptor *)modDelayDescriptor->PortDescriptors); free((char **)modDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)modDelayDescriptor->PortRangeHints); free(modDelayDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/multivoice_chorus_1201.c000066400000000000000000000552661247673406200236720ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "multivoice_chorus_1201.xml" #include "ladspa-util.h" #define MAX_LAWS 7 #define MULTIVOICECHORUS_VOICES 0 #define MULTIVOICECHORUS_DELAY_BASE 1 #define MULTIVOICECHORUS_VOICE_SPREAD 2 #define MULTIVOICECHORUS_DETUNE 3 #define MULTIVOICECHORUS_LAW_FREQ 4 #define MULTIVOICECHORUS_ATTENDB 5 #define MULTIVOICECHORUS_INPUT 6 #define MULTIVOICECHORUS_OUTPUT 7 static LADSPA_Descriptor *multivoiceChorusDescriptor = NULL; typedef struct { LADSPA_Data *voices; LADSPA_Data *delay_base; LADSPA_Data *voice_spread; LADSPA_Data *detune; LADSPA_Data *law_freq; LADSPA_Data *attendb; LADSPA_Data *input; LADSPA_Data *output; long count; unsigned int delay_mask; unsigned int delay_pos; unsigned int delay_size; float * delay_tbl; float * dp_curr; float * dp_targ; int last_law_p; int law_pos; int law_roll; int max_law_p; float * next_peak_amp; unsigned int *next_peak_pos; float * prev_peak_amp; unsigned int *prev_peak_pos; long sample_rate; LADSPA_Data run_adding_gain; } MultivoiceChorus; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return multivoiceChorusDescriptor; default: return NULL; } } static void activateMultivoiceChorus(LADSPA_Handle instance) { MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; long count = plugin_data->count; unsigned int delay_mask = plugin_data->delay_mask; unsigned int delay_pos = plugin_data->delay_pos; unsigned int delay_size = plugin_data->delay_size; float *delay_tbl = plugin_data->delay_tbl; float *dp_curr = plugin_data->dp_curr; float *dp_targ = plugin_data->dp_targ; int last_law_p = plugin_data->last_law_p; int law_pos = plugin_data->law_pos; int law_roll = plugin_data->law_roll; int max_law_p = plugin_data->max_law_p; float *next_peak_amp = plugin_data->next_peak_amp; unsigned int *next_peak_pos = plugin_data->next_peak_pos; float *prev_peak_amp = plugin_data->prev_peak_amp; unsigned int *prev_peak_pos = plugin_data->prev_peak_pos; long sample_rate = plugin_data->sample_rate; #line 46 "multivoice_chorus_1201.xml" memset(delay_tbl, 0, sizeof(float) * delay_size); memset(prev_peak_pos, 0, sizeof(unsigned int) * MAX_LAWS); memset(next_peak_pos, 0, sizeof(unsigned int) * MAX_LAWS); memset(prev_peak_amp, 0, sizeof(float) * MAX_LAWS); memset(next_peak_amp, 0, sizeof(float) * MAX_LAWS); memset(dp_targ, 0, sizeof(float) * MAX_LAWS); memset(dp_curr, 0, sizeof(float) * MAX_LAWS); plugin_data->count = count; plugin_data->delay_mask = delay_mask; plugin_data->delay_pos = delay_pos; plugin_data->delay_size = delay_size; plugin_data->delay_tbl = delay_tbl; plugin_data->dp_curr = dp_curr; plugin_data->dp_targ = dp_targ; plugin_data->last_law_p = last_law_p; plugin_data->law_pos = law_pos; plugin_data->law_roll = law_roll; plugin_data->max_law_p = max_law_p; plugin_data->next_peak_amp = next_peak_amp; plugin_data->next_peak_pos = next_peak_pos; plugin_data->prev_peak_amp = prev_peak_amp; plugin_data->prev_peak_pos = prev_peak_pos; plugin_data->sample_rate = sample_rate; } static void cleanupMultivoiceChorus(LADSPA_Handle instance) { #line 56 "multivoice_chorus_1201.xml" MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; free(plugin_data->delay_tbl); free(plugin_data->prev_peak_pos); free(plugin_data->next_peak_pos); free(plugin_data->prev_peak_amp); free(plugin_data->next_peak_amp); free(plugin_data->dp_targ); free(plugin_data->dp_curr); free(instance); } static void connectPortMultivoiceChorus( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { MultivoiceChorus *plugin; plugin = (MultivoiceChorus *)instance; switch (port) { case MULTIVOICECHORUS_VOICES: plugin->voices = data; break; case MULTIVOICECHORUS_DELAY_BASE: plugin->delay_base = data; break; case MULTIVOICECHORUS_VOICE_SPREAD: plugin->voice_spread = data; break; case MULTIVOICECHORUS_DETUNE: plugin->detune = data; break; case MULTIVOICECHORUS_LAW_FREQ: plugin->law_freq = data; break; case MULTIVOICECHORUS_ATTENDB: plugin->attendb = data; break; case MULTIVOICECHORUS_INPUT: plugin->input = data; break; case MULTIVOICECHORUS_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateMultivoiceChorus( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { MultivoiceChorus *plugin_data = (MultivoiceChorus *)malloc(sizeof(MultivoiceChorus)); long count; unsigned int delay_mask; unsigned int delay_pos; unsigned int delay_size; float *delay_tbl = NULL; float *dp_curr = NULL; float *dp_targ = NULL; int last_law_p; int law_pos; int law_roll; int max_law_p; float *next_peak_amp = NULL; unsigned int *next_peak_pos = NULL; float *prev_peak_amp = NULL; unsigned int *prev_peak_pos = NULL; long sample_rate; #line 20 "multivoice_chorus_1201.xml" int min_size; sample_rate = s_rate; max_law_p = s_rate/2; last_law_p = -1; law_pos = 0; law_roll = 0; min_size = sample_rate / 10; for (delay_size = 1024; delay_size < min_size; delay_size *= 2); delay_mask = delay_size - 1; delay_tbl = calloc(sizeof(float), delay_size); delay_pos = 0; prev_peak_pos = malloc(sizeof(unsigned int) * MAX_LAWS); next_peak_pos = malloc(sizeof(unsigned int) * MAX_LAWS); prev_peak_amp = malloc(sizeof(float) * MAX_LAWS); next_peak_amp = malloc(sizeof(float) * MAX_LAWS); dp_targ = malloc(sizeof(float) * MAX_LAWS); dp_curr = malloc(sizeof(float) * MAX_LAWS); count = 0; plugin_data->count = count; plugin_data->delay_mask = delay_mask; plugin_data->delay_pos = delay_pos; plugin_data->delay_size = delay_size; plugin_data->delay_tbl = delay_tbl; plugin_data->dp_curr = dp_curr; plugin_data->dp_targ = dp_targ; plugin_data->last_law_p = last_law_p; plugin_data->law_pos = law_pos; plugin_data->law_roll = law_roll; plugin_data->max_law_p = max_law_p; plugin_data->next_peak_amp = next_peak_amp; plugin_data->next_peak_pos = next_peak_pos; plugin_data->prev_peak_amp = prev_peak_amp; plugin_data->prev_peak_pos = prev_peak_pos; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runMultivoiceChorus(LADSPA_Handle instance, unsigned long sample_count) { MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; /* Number of voices (float value) */ const LADSPA_Data voices = *(plugin_data->voices); /* Delay base (ms) (float value) */ const LADSPA_Data delay_base = *(plugin_data->delay_base); /* Voice separation (ms) (float value) */ const LADSPA_Data voice_spread = *(plugin_data->voice_spread); /* Detune (%) (float value) */ const LADSPA_Data detune = *(plugin_data->detune); /* LFO frequency (Hz) (float value) */ const LADSPA_Data law_freq = *(plugin_data->law_freq); /* Output attenuation (dB) (float value) */ const LADSPA_Data attendb = *(plugin_data->attendb); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long count = plugin_data->count; unsigned int delay_mask = plugin_data->delay_mask; unsigned int delay_pos = plugin_data->delay_pos; unsigned int delay_size = plugin_data->delay_size; float * delay_tbl = plugin_data->delay_tbl; float * dp_curr = plugin_data->dp_curr; float * dp_targ = plugin_data->dp_targ; int last_law_p = plugin_data->last_law_p; int law_pos = plugin_data->law_pos; int law_roll = plugin_data->law_roll; int max_law_p = plugin_data->max_law_p; float * next_peak_amp = plugin_data->next_peak_amp; unsigned int * next_peak_pos = plugin_data->next_peak_pos; float * prev_peak_amp = plugin_data->prev_peak_amp; unsigned int * prev_peak_pos = plugin_data->prev_peak_pos; long sample_rate = plugin_data->sample_rate; #line 66 "multivoice_chorus_1201.xml" unsigned long pos; int d_base, t; LADSPA_Data out; float delay_depth; float dp; // float delay position float dp_frac; // fractional part int dp_idx; // Integer delay index int laws, law_separation, base_offset; int law_p; // Period of law float atten; // Attenuation // Set law params laws = LIMIT(f_round(voices) - 1, 0, 7); law_p = LIMIT(f_round(sample_rate/f_clamp(law_freq, 0.0001f, 1000.0f)), 1, max_law_p); if (laws > 0) { law_separation = law_p / laws; } else { law_separation = 0; } // Calculate voice spread in samples base_offset = (f_clamp(voice_spread, 0.0f, 2.0f) * sample_rate) / 1000; // Calculate base delay size in samples d_base = (f_clamp(delay_base, 5.0f, 40.0f) * sample_rate) / 1000; // Calculate delay depth in samples delay_depth = f_clamp((law_p * f_clamp(detune, 0.0f, 10.0f)) / (100.0f * M_PI), 0.0f, delay_size - d_base - 1 - (base_offset * laws)); // Calculate output attenuation atten = DB_CO(f_clamp(attendb, -100.0, 24.0)); for (pos = 0; pos < sample_count; pos++) { // N times per law 'frequency' splurge a new set of windowed data // into one of the N law buffers. Keeps the laws out of phase. if (laws > 0 && (count % law_separation) == 0) { next_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; next_peak_pos[law_roll] = count + law_p; } if (laws > 0 && (count % law_separation) == law_separation/2) { prev_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; prev_peak_pos[law_roll] = count + law_p; // Pick the next law to be changed law_roll = (law_roll + 1) % laws; } out = input[pos]; if (count % 16 < laws) { unsigned int t = count % 16; // Calculate sinus phases float n_ph = (float)(law_p - abs(next_peak_pos[t] - count))/law_p; float p_ph = n_ph + 0.5f; if (p_ph > 1.0f) { p_ph -= 1.0f; } dp_targ[t] = f_sin_sq(3.1415926f*p_ph)*prev_peak_amp[t] + f_sin_sq(3.1415926f*n_ph)*next_peak_amp[t]; } for (t=0; tcount = count; plugin_data->law_pos = law_pos; plugin_data->last_law_p = last_law_p; plugin_data->law_roll = law_roll; plugin_data->delay_pos = delay_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainMultivoiceChorus(LADSPA_Handle instance, LADSPA_Data gain) { ((MultivoiceChorus *)instance)->run_adding_gain = gain; } static void runAddingMultivoiceChorus(LADSPA_Handle instance, unsigned long sample_count) { MultivoiceChorus *plugin_data = (MultivoiceChorus *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Number of voices (float value) */ const LADSPA_Data voices = *(plugin_data->voices); /* Delay base (ms) (float value) */ const LADSPA_Data delay_base = *(plugin_data->delay_base); /* Voice separation (ms) (float value) */ const LADSPA_Data voice_spread = *(plugin_data->voice_spread); /* Detune (%) (float value) */ const LADSPA_Data detune = *(plugin_data->detune); /* LFO frequency (Hz) (float value) */ const LADSPA_Data law_freq = *(plugin_data->law_freq); /* Output attenuation (dB) (float value) */ const LADSPA_Data attendb = *(plugin_data->attendb); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; long count = plugin_data->count; unsigned int delay_mask = plugin_data->delay_mask; unsigned int delay_pos = plugin_data->delay_pos; unsigned int delay_size = plugin_data->delay_size; float * delay_tbl = plugin_data->delay_tbl; float * dp_curr = plugin_data->dp_curr; float * dp_targ = plugin_data->dp_targ; int last_law_p = plugin_data->last_law_p; int law_pos = plugin_data->law_pos; int law_roll = plugin_data->law_roll; int max_law_p = plugin_data->max_law_p; float * next_peak_amp = plugin_data->next_peak_amp; unsigned int * next_peak_pos = plugin_data->next_peak_pos; float * prev_peak_amp = plugin_data->prev_peak_amp; unsigned int * prev_peak_pos = plugin_data->prev_peak_pos; long sample_rate = plugin_data->sample_rate; #line 66 "multivoice_chorus_1201.xml" unsigned long pos; int d_base, t; LADSPA_Data out; float delay_depth; float dp; // float delay position float dp_frac; // fractional part int dp_idx; // Integer delay index int laws, law_separation, base_offset; int law_p; // Period of law float atten; // Attenuation // Set law params laws = LIMIT(f_round(voices) - 1, 0, 7); law_p = LIMIT(f_round(sample_rate/f_clamp(law_freq, 0.0001f, 1000.0f)), 1, max_law_p); if (laws > 0) { law_separation = law_p / laws; } else { law_separation = 0; } // Calculate voice spread in samples base_offset = (f_clamp(voice_spread, 0.0f, 2.0f) * sample_rate) / 1000; // Calculate base delay size in samples d_base = (f_clamp(delay_base, 5.0f, 40.0f) * sample_rate) / 1000; // Calculate delay depth in samples delay_depth = f_clamp((law_p * f_clamp(detune, 0.0f, 10.0f)) / (100.0f * M_PI), 0.0f, delay_size - d_base - 1 - (base_offset * laws)); // Calculate output attenuation atten = DB_CO(f_clamp(attendb, -100.0, 24.0)); for (pos = 0; pos < sample_count; pos++) { // N times per law 'frequency' splurge a new set of windowed data // into one of the N law buffers. Keeps the laws out of phase. if (laws > 0 && (count % law_separation) == 0) { next_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; next_peak_pos[law_roll] = count + law_p; } if (laws > 0 && (count % law_separation) == law_separation/2) { prev_peak_amp[law_roll] = (float)rand() / (float)RAND_MAX; prev_peak_pos[law_roll] = count + law_p; // Pick the next law to be changed law_roll = (law_roll + 1) % laws; } out = input[pos]; if (count % 16 < laws) { unsigned int t = count % 16; // Calculate sinus phases float n_ph = (float)(law_p - abs(next_peak_pos[t] - count))/law_p; float p_ph = n_ph + 0.5f; if (p_ph > 1.0f) { p_ph -= 1.0f; } dp_targ[t] = f_sin_sq(3.1415926f*p_ph)*prev_peak_amp[t] + f_sin_sq(3.1415926f*n_ph)*next_peak_amp[t]; } for (t=0; tcount = count; plugin_data->law_pos = law_pos; plugin_data->last_law_p = last_law_p; plugin_data->law_roll = law_roll; plugin_data->delay_pos = delay_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif multivoiceChorusDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (multivoiceChorusDescriptor) { multivoiceChorusDescriptor->UniqueID = 1201; multivoiceChorusDescriptor->Label = "multivoiceChorus"; multivoiceChorusDescriptor->Properties = 0; multivoiceChorusDescriptor->Name = D_("Multivoice Chorus"); multivoiceChorusDescriptor->Maker = "Steve Harris "; multivoiceChorusDescriptor->Copyright = "GPL"; multivoiceChorusDescriptor->PortCount = 8; port_descriptors = (LADSPA_PortDescriptor *)calloc(8, sizeof(LADSPA_PortDescriptor)); multivoiceChorusDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(8, sizeof(LADSPA_PortRangeHint)); multivoiceChorusDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(8, sizeof(char*)); multivoiceChorusDescriptor->PortNames = (const char **)port_names; /* Parameters for Number of voices */ port_descriptors[MULTIVOICECHORUS_VOICES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MULTIVOICECHORUS_VOICES] = D_("Number of voices"); port_range_hints[MULTIVOICECHORUS_VOICES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; port_range_hints[MULTIVOICECHORUS_VOICES].LowerBound = 1; port_range_hints[MULTIVOICECHORUS_VOICES].UpperBound = 8; /* Parameters for Delay base (ms) */ port_descriptors[MULTIVOICECHORUS_DELAY_BASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MULTIVOICECHORUS_DELAY_BASE] = D_("Delay base (ms)"); port_range_hints[MULTIVOICECHORUS_DELAY_BASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[MULTIVOICECHORUS_DELAY_BASE].LowerBound = 10; port_range_hints[MULTIVOICECHORUS_DELAY_BASE].UpperBound = 40; /* Parameters for Voice separation (ms) */ port_descriptors[MULTIVOICECHORUS_VOICE_SPREAD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MULTIVOICECHORUS_VOICE_SPREAD] = D_("Voice separation (ms)"); port_range_hints[MULTIVOICECHORUS_VOICE_SPREAD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[MULTIVOICECHORUS_VOICE_SPREAD].LowerBound = 0; port_range_hints[MULTIVOICECHORUS_VOICE_SPREAD].UpperBound = 2; /* Parameters for Detune (%) */ port_descriptors[MULTIVOICECHORUS_DETUNE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MULTIVOICECHORUS_DETUNE] = D_("Detune (%)"); port_range_hints[MULTIVOICECHORUS_DETUNE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[MULTIVOICECHORUS_DETUNE].LowerBound = 0; port_range_hints[MULTIVOICECHORUS_DETUNE].UpperBound = 5; /* Parameters for LFO frequency (Hz) */ port_descriptors[MULTIVOICECHORUS_LAW_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MULTIVOICECHORUS_LAW_FREQ] = D_("LFO frequency (Hz)"); port_range_hints[MULTIVOICECHORUS_LAW_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[MULTIVOICECHORUS_LAW_FREQ].LowerBound = 2; port_range_hints[MULTIVOICECHORUS_LAW_FREQ].UpperBound = 30; /* Parameters for Output attenuation (dB) */ port_descriptors[MULTIVOICECHORUS_ATTENDB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[MULTIVOICECHORUS_ATTENDB] = D_("Output attenuation (dB)"); port_range_hints[MULTIVOICECHORUS_ATTENDB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[MULTIVOICECHORUS_ATTENDB].LowerBound = -20; port_range_hints[MULTIVOICECHORUS_ATTENDB].UpperBound = 0; /* Parameters for Input */ port_descriptors[MULTIVOICECHORUS_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[MULTIVOICECHORUS_INPUT] = D_("Input"); port_range_hints[MULTIVOICECHORUS_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[MULTIVOICECHORUS_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[MULTIVOICECHORUS_OUTPUT] = D_("Output"); port_range_hints[MULTIVOICECHORUS_OUTPUT].HintDescriptor = 0; multivoiceChorusDescriptor->activate = activateMultivoiceChorus; multivoiceChorusDescriptor->cleanup = cleanupMultivoiceChorus; multivoiceChorusDescriptor->connect_port = connectPortMultivoiceChorus; multivoiceChorusDescriptor->deactivate = NULL; multivoiceChorusDescriptor->instantiate = instantiateMultivoiceChorus; multivoiceChorusDescriptor->run = runMultivoiceChorus; multivoiceChorusDescriptor->run_adding = runAddingMultivoiceChorus; multivoiceChorusDescriptor->set_run_adding_gain = setRunAddingGainMultivoiceChorus; } } void __attribute__((destructor)) swh_fini() { if (multivoiceChorusDescriptor) { free((LADSPA_PortDescriptor *)multivoiceChorusDescriptor->PortDescriptors); free((char **)multivoiceChorusDescriptor->PortNames); free((LADSPA_PortRangeHint *)multivoiceChorusDescriptor->PortRangeHints); free(multivoiceChorusDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/notch_iir_1894.c000066400000000000000000000252701247673406200221170ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "config.h" #include "util/iir.h" #define NOTCH_IIR_CENTER 0 #define NOTCH_IIR_WIDTH 1 #define NOTCH_IIR_STAGES 2 #define NOTCH_IIR_INPUT 3 #define NOTCH_IIR_OUTPUT 4 static LADSPA_Descriptor *notch_iirDescriptor = NULL; typedef struct { LADSPA_Data *center; LADSPA_Data *width; LADSPA_Data *stages; LADSPA_Data *input; LADSPA_Data *output; iir_stage_t* first; iirf_t* iirf1; iirf_t* iirf2; float lfc; long sample_rate; iir_stage_t* second; float ufc; LADSPA_Data run_adding_gain; } Notch_iir; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return notch_iirDescriptor; default: return NULL; } } static void activateNotch_iir(LADSPA_Handle instance) { Notch_iir *plugin_data = (Notch_iir *)instance; iir_stage_t*first = plugin_data->first; iirf_t*iirf1 = plugin_data->iirf1; iirf_t*iirf2 = plugin_data->iirf2; float lfc = plugin_data->lfc; long sample_rate = plugin_data->sample_rate; iir_stage_t*second = plugin_data->second; float ufc = plugin_data->ufc; ufc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate; lfc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate; first = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); second = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); iirf1 = init_iirf_t(first); iirf2 = init_iirf_t(second); chebyshev(iirf1, first, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); chebyshev(iirf2, second, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); plugin_data->first = first; plugin_data->iirf1 = iirf1; plugin_data->iirf2 = iirf2; plugin_data->lfc = lfc; plugin_data->sample_rate = sample_rate; plugin_data->second = second; plugin_data->ufc = ufc; } static void cleanupNotch_iir(LADSPA_Handle instance) { Notch_iir *plugin_data = (Notch_iir *)instance; free_iirf_t(plugin_data->iirf1, plugin_data->first); free_iirf_t(plugin_data->iirf2, plugin_data->second); free_iir_stage(plugin_data->first); free_iir_stage(plugin_data->second); free(instance); } static void connectPortNotch_iir( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Notch_iir *plugin; plugin = (Notch_iir *)instance; switch (port) { case NOTCH_IIR_CENTER: plugin->center = data; break; case NOTCH_IIR_WIDTH: plugin->width = data; break; case NOTCH_IIR_STAGES: plugin->stages = data; break; case NOTCH_IIR_INPUT: plugin->input = data; break; case NOTCH_IIR_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateNotch_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Notch_iir *plugin_data = (Notch_iir *)malloc(sizeof(Notch_iir)); iir_stage_t*first = NULL; iirf_t*iirf1 = NULL; iirf_t*iirf2 = NULL; float lfc; long sample_rate; iir_stage_t*second = NULL; float ufc; sample_rate = s_rate; ufc = lfc = 0.0f; plugin_data->first = first; plugin_data->iirf1 = iirf1; plugin_data->iirf2 = iirf2; plugin_data->lfc = lfc; plugin_data->sample_rate = sample_rate; plugin_data->second = second; plugin_data->ufc = ufc; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { Notch_iir *plugin_data = (Notch_iir *)instance; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); /* Bandwidth (Hz) (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* first = plugin_data->first; iirf_t* iirf1 = plugin_data->iirf1; iirf_t* iirf2 = plugin_data->iirf2; float lfc = plugin_data->lfc; long sample_rate = plugin_data->sample_rate; iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; ufc = (center - width*0.5f)/(float)sample_rate; lfc = (center + width*0.5f)/(float)sample_rate; chebyshev(iirf1, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); chebyshev(iirf2, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); iir_process_buffer_ns_5(iirf1, first, input, output, sample_count, RUN_ADDING); iir_process_buffer_ns_5(iirf2, second, input, output, sample_count, 1); /* add to first buffer */ } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainNotch_iir(LADSPA_Handle instance, LADSPA_Data gain) { ((Notch_iir *)instance)->run_adding_gain = gain; } static void runAddingNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { Notch_iir *plugin_data = (Notch_iir *)instance; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); /* Bandwidth (Hz) (float value) */ const LADSPA_Data width = *(plugin_data->width); /* Stages(2 poles per stage) (float value) */ const LADSPA_Data stages = *(plugin_data->stages); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; iir_stage_t* first = plugin_data->first; iirf_t* iirf1 = plugin_data->iirf1; iirf_t* iirf2 = plugin_data->iirf2; float lfc = plugin_data->lfc; long sample_rate = plugin_data->sample_rate; iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; ufc = (center - width*0.5f)/(float)sample_rate; lfc = (center + width*0.5f)/(float)sample_rate; chebyshev(iirf1, first, 2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS, ufc, 0.5f); chebyshev(iirf2, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f); iir_process_buffer_ns_5(iirf1, first, input, output, sample_count, RUN_ADDING); iir_process_buffer_ns_5(iirf2, second, input, output, sample_count, 1); /* add to first buffer */ } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif notch_iirDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (notch_iirDescriptor) { notch_iirDescriptor->UniqueID = 1894; notch_iirDescriptor->Label = "notch_iir"; notch_iirDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; notch_iirDescriptor->Name = D_("Mag's Notch Filter"); notch_iirDescriptor->Maker = "Alexander Ehlert "; notch_iirDescriptor->Copyright = "GPL"; notch_iirDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); notch_iirDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); notch_iirDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); notch_iirDescriptor->PortNames = (const char **)port_names; /* Parameters for Center Frequency (Hz) */ port_descriptors[NOTCH_IIR_CENTER] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[NOTCH_IIR_CENTER] = D_("Center Frequency (Hz)"); port_range_hints[NOTCH_IIR_CENTER].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[NOTCH_IIR_CENTER].LowerBound = 0.0001; port_range_hints[NOTCH_IIR_CENTER].UpperBound = 0.45; /* Parameters for Bandwidth (Hz) */ port_descriptors[NOTCH_IIR_WIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[NOTCH_IIR_WIDTH] = D_("Bandwidth (Hz)"); port_range_hints[NOTCH_IIR_WIDTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[NOTCH_IIR_WIDTH].LowerBound = 0.0001; port_range_hints[NOTCH_IIR_WIDTH].UpperBound = 0.45; /* Parameters for Stages(2 poles per stage) */ port_descriptors[NOTCH_IIR_STAGES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[NOTCH_IIR_STAGES] = D_("Stages(2 poles per stage)"); port_range_hints[NOTCH_IIR_STAGES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1 | LADSPA_HINT_INTEGER; port_range_hints[NOTCH_IIR_STAGES].LowerBound = 1.0; port_range_hints[NOTCH_IIR_STAGES].UpperBound = 10.0; /* Parameters for Input */ port_descriptors[NOTCH_IIR_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[NOTCH_IIR_INPUT] = D_("Input"); port_range_hints[NOTCH_IIR_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[NOTCH_IIR_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[NOTCH_IIR_OUTPUT] = D_("Output"); port_range_hints[NOTCH_IIR_OUTPUT].HintDescriptor = 0; notch_iirDescriptor->activate = activateNotch_iir; notch_iirDescriptor->cleanup = cleanupNotch_iir; notch_iirDescriptor->connect_port = connectPortNotch_iir; notch_iirDescriptor->deactivate = NULL; notch_iirDescriptor->instantiate = instantiateNotch_iir; notch_iirDescriptor->run = runNotch_iir; notch_iirDescriptor->run_adding = runAddingNotch_iir; notch_iirDescriptor->set_run_adding_gain = setRunAddingGainNotch_iir; } } void __attribute__((destructor)) swh_fini() { if (notch_iirDescriptor) { free((LADSPA_PortDescriptor *)notch_iirDescriptor->PortDescriptors); free((char **)notch_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)notch_iirDescriptor->PortRangeHints); free(notch_iirDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/phasers_1217.c000066400000000000000000001133701247673406200215720ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "phasers_1217.xml" #include "ladspa-util.h" #define LFO_SIZE 4096 typedef struct { float a1; float zm1; } allpass; inline static float ap_run(allpass *a, float x) { float y = x * -(a->a1) + a->zm1; a->zm1 = y * a->a1 + x; return y; } inline static void ap_set_delay(allpass *a, float d) { a->a1 = (1.0f - d) / (1.0f + d); } inline static void ap_clear(allpass *a) { a->a1 = 0.0f; a->zm1 = 0.0f; } typedef struct { float ga; float gr; float env; } envelope; inline static float env_run(envelope *e, float in) { float env_lvl = e->env; in = fabs(in); if (env_lvl < in) { env_lvl = e->ga * (env_lvl - in) + in; } else { env_lvl = e->gr * (env_lvl - in) + in; } e->env = env_lvl; return env_lvl; } // Set attack time in samples inline static void env_set_attack(envelope *e, float a) { e->ga = f_exp(-1.0f/a); } // Set release time in samples inline static void env_set_release(envelope *e, float r) { e->gr = f_exp(-1.0f/r); } #define LFOPHASER_LFO_RATE 0 #define LFOPHASER_LFO_DEPTH 1 #define LFOPHASER_FB 2 #define LFOPHASER_SPREAD 3 #define LFOPHASER_INPUT 4 #define LFOPHASER_OUTPUT 5 #define FOURBYFOURPOLE_F0 0 #define FOURBYFOURPOLE_FB0 1 #define FOURBYFOURPOLE_F1 2 #define FOURBYFOURPOLE_FB1 3 #define FOURBYFOURPOLE_F2 4 #define FOURBYFOURPOLE_FB2 5 #define FOURBYFOURPOLE_F3 6 #define FOURBYFOURPOLE_FB3 7 #define FOURBYFOURPOLE_INPUT 8 #define FOURBYFOURPOLE_OUTPUT 9 #define AUTOPHASER_ATTACK_P 0 #define AUTOPHASER_DECAY_P 1 #define AUTOPHASER_DEPTH_P 2 #define AUTOPHASER_FB 3 #define AUTOPHASER_SPREAD 4 #define AUTOPHASER_INPUT 5 #define AUTOPHASER_OUTPUT 6 static LADSPA_Descriptor *lfoPhaserDescriptor = NULL; typedef struct { LADSPA_Data *lfo_rate; LADSPA_Data *lfo_depth; LADSPA_Data *fb; LADSPA_Data *spread; LADSPA_Data *input; LADSPA_Data *output; allpass * ap; int count; float f_per_lv; int lfo_pos; float * lfo_tbl; float ym1; LADSPA_Data run_adding_gain; } LfoPhaser; static LADSPA_Descriptor *fourByFourPoleDescriptor = NULL; typedef struct { LADSPA_Data *f0; LADSPA_Data *fb0; LADSPA_Data *f1; LADSPA_Data *fb1; LADSPA_Data *f2; LADSPA_Data *fb2; LADSPA_Data *f3; LADSPA_Data *fb3; LADSPA_Data *input; LADSPA_Data *output; allpass * ap; float sr_r_2; float y0; float y1; float y2; float y3; LADSPA_Data run_adding_gain; } FourByFourPole; static LADSPA_Descriptor *autoPhaserDescriptor = NULL; typedef struct { LADSPA_Data *attack_p; LADSPA_Data *decay_p; LADSPA_Data *depth_p; LADSPA_Data *fb; LADSPA_Data *spread; LADSPA_Data *input; LADSPA_Data *output; allpass * ap; envelope * env; float sample_rate; float ym1; LADSPA_Data run_adding_gain; } AutoPhaser; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return lfoPhaserDescriptor; case 1: return fourByFourPoleDescriptor; case 2: return autoPhaserDescriptor; default: return NULL; } } static void activateLfoPhaser(LADSPA_Handle instance) { LfoPhaser *plugin_data = (LfoPhaser *)instance; allpass *ap = plugin_data->ap; int count = plugin_data->count; float f_per_lv = plugin_data->f_per_lv; int lfo_pos = plugin_data->lfo_pos; float *lfo_tbl = plugin_data->lfo_tbl; float ym1 = plugin_data->ym1; #line 100 "phasers_1217.xml" ap_clear(ap); ap_clear(ap+1); ap_clear(ap+2); ap_clear(ap+3); ap_clear(ap+4); ap_clear(ap+5); plugin_data->ap = ap; plugin_data->count = count; plugin_data->f_per_lv = f_per_lv; plugin_data->lfo_pos = lfo_pos; plugin_data->lfo_tbl = lfo_tbl; plugin_data->ym1 = ym1; } static void cleanupLfoPhaser(LADSPA_Handle instance) { #line 109 "phasers_1217.xml" LfoPhaser *plugin_data = (LfoPhaser *)instance; free(plugin_data->ap); free(plugin_data->lfo_tbl); free(instance); } static void connectPortLfoPhaser( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { LfoPhaser *plugin; plugin = (LfoPhaser *)instance; switch (port) { case LFOPHASER_LFO_RATE: plugin->lfo_rate = data; break; case LFOPHASER_LFO_DEPTH: plugin->lfo_depth = data; break; case LFOPHASER_FB: plugin->fb = data; break; case LFOPHASER_SPREAD: plugin->spread = data; break; case LFOPHASER_INPUT: plugin->input = data; break; case LFOPHASER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateLfoPhaser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { LfoPhaser *plugin_data = (LfoPhaser *)malloc(sizeof(LfoPhaser)); allpass *ap = NULL; int count; float f_per_lv; int lfo_pos; float *lfo_tbl = NULL; float ym1; #line 80 "phasers_1217.xml" unsigned int i; float p; ap = calloc(6, sizeof(allpass)); ym1 = 0.0f; lfo_tbl = malloc(sizeof(float) * LFO_SIZE); p = 0.0f; for (i=0; iap = ap; plugin_data->count = count; plugin_data->f_per_lv = f_per_lv; plugin_data->lfo_pos = lfo_pos; plugin_data->lfo_tbl = lfo_tbl; plugin_data->ym1 = ym1; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runLfoPhaser(LADSPA_Handle instance, unsigned long sample_count) { LfoPhaser *plugin_data = (LfoPhaser *)instance; /* LFO rate (Hz) (float value) */ const LADSPA_Data lfo_rate = *(plugin_data->lfo_rate); /* LFO depth (float value) */ const LADSPA_Data lfo_depth = *(plugin_data->lfo_depth); /* Feedback (float value) */ const LADSPA_Data fb = *(plugin_data->fb); /* Spread (octaves) (float value) */ const LADSPA_Data spread = *(plugin_data->spread); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; allpass * ap = plugin_data->ap; int count = plugin_data->count; float f_per_lv = plugin_data->f_per_lv; int lfo_pos = plugin_data->lfo_pos; float * lfo_tbl = plugin_data->lfo_tbl; float ym1 = plugin_data->ym1; #line 114 "phasers_1217.xml" unsigned long pos; unsigned int mod; float y, d, ofs; mod = f_round(f_per_lv / lfo_rate); if (mod < 1) { mod=1; } d = lfo_tbl[lfo_pos]; for (pos = 0; pos < sample_count; pos++) { // Get new value for LFO if needed if (++count % mod == 0) { lfo_pos++; lfo_pos &= 0x7FF; count = 0; d = lfo_tbl[lfo_pos] * lfo_depth; ap_set_delay(ap, d); ofs = spread * 0.01562f; ap_set_delay(ap+1, d+ofs); ofs *= 2.0f; ap_set_delay(ap+2, d+ofs); ofs *= 2.0f; ap_set_delay(ap+3, d+ofs); ofs *= 2.0f; ap_set_delay(ap+4, d+ofs); ofs *= 2.0f; ap_set_delay(ap+5, d+ofs); } //Run in series, doesn't quite sound as nice y = ap_run(ap, input[pos] + ym1 * fb); y = ap_run(ap+1, y); y = ap_run(ap+2, y); y = ap_run(ap+3, y); y = ap_run(ap+4, y); y = ap_run(ap+5, y); buffer_write(output[pos], y); ym1 = y; } plugin_data->ym1 = ym1; plugin_data->count = count; plugin_data->lfo_pos = lfo_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainLfoPhaser(LADSPA_Handle instance, LADSPA_Data gain) { ((LfoPhaser *)instance)->run_adding_gain = gain; } static void runAddingLfoPhaser(LADSPA_Handle instance, unsigned long sample_count) { LfoPhaser *plugin_data = (LfoPhaser *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* LFO rate (Hz) (float value) */ const LADSPA_Data lfo_rate = *(plugin_data->lfo_rate); /* LFO depth (float value) */ const LADSPA_Data lfo_depth = *(plugin_data->lfo_depth); /* Feedback (float value) */ const LADSPA_Data fb = *(plugin_data->fb); /* Spread (octaves) (float value) */ const LADSPA_Data spread = *(plugin_data->spread); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; allpass * ap = plugin_data->ap; int count = plugin_data->count; float f_per_lv = plugin_data->f_per_lv; int lfo_pos = plugin_data->lfo_pos; float * lfo_tbl = plugin_data->lfo_tbl; float ym1 = plugin_data->ym1; #line 114 "phasers_1217.xml" unsigned long pos; unsigned int mod; float y, d, ofs; mod = f_round(f_per_lv / lfo_rate); if (mod < 1) { mod=1; } d = lfo_tbl[lfo_pos]; for (pos = 0; pos < sample_count; pos++) { // Get new value for LFO if needed if (++count % mod == 0) { lfo_pos++; lfo_pos &= 0x7FF; count = 0; d = lfo_tbl[lfo_pos] * lfo_depth; ap_set_delay(ap, d); ofs = spread * 0.01562f; ap_set_delay(ap+1, d+ofs); ofs *= 2.0f; ap_set_delay(ap+2, d+ofs); ofs *= 2.0f; ap_set_delay(ap+3, d+ofs); ofs *= 2.0f; ap_set_delay(ap+4, d+ofs); ofs *= 2.0f; ap_set_delay(ap+5, d+ofs); } //Run in series, doesn't quite sound as nice y = ap_run(ap, input[pos] + ym1 * fb); y = ap_run(ap+1, y); y = ap_run(ap+2, y); y = ap_run(ap+3, y); y = ap_run(ap+4, y); y = ap_run(ap+5, y); buffer_write(output[pos], y); ym1 = y; } plugin_data->ym1 = ym1; plugin_data->count = count; plugin_data->lfo_pos = lfo_pos; } static void activateFourByFourPole(LADSPA_Handle instance) { FourByFourPole *plugin_data = (FourByFourPole *)instance; allpass *ap = plugin_data->ap; float sr_r_2 = plugin_data->sr_r_2; float y0 = plugin_data->y0; float y1 = plugin_data->y1; float y2 = plugin_data->y2; float y3 = plugin_data->y3; #line 100 "phasers_1217.xml" ap_clear(ap); ap_clear(ap+1); ap_clear(ap+2); ap_clear(ap+3); ap_clear(ap+4); ap_clear(ap+5); ap_clear(ap+6); ap_clear(ap+7); ap_clear(ap+8); ap_clear(ap+9); ap_clear(ap+10); ap_clear(ap+11); ap_clear(ap+12); ap_clear(ap+13); ap_clear(ap+14); ap_clear(ap+15); plugin_data->ap = ap; plugin_data->sr_r_2 = sr_r_2; plugin_data->y0 = y0; plugin_data->y1 = y1; plugin_data->y2 = y2; plugin_data->y3 = y3; } static void cleanupFourByFourPole(LADSPA_Handle instance) { #line 109 "phasers_1217.xml" FourByFourPole *plugin_data = (FourByFourPole *)instance; free(plugin_data->ap); free(instance); } static void connectPortFourByFourPole( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { FourByFourPole *plugin; plugin = (FourByFourPole *)instance; switch (port) { case FOURBYFOURPOLE_F0: plugin->f0 = data; break; case FOURBYFOURPOLE_FB0: plugin->fb0 = data; break; case FOURBYFOURPOLE_F1: plugin->f1 = data; break; case FOURBYFOURPOLE_FB1: plugin->fb1 = data; break; case FOURBYFOURPOLE_F2: plugin->f2 = data; break; case FOURBYFOURPOLE_FB2: plugin->fb2 = data; break; case FOURBYFOURPOLE_F3: plugin->f3 = data; break; case FOURBYFOURPOLE_FB3: plugin->fb3 = data; break; case FOURBYFOURPOLE_INPUT: plugin->input = data; break; case FOURBYFOURPOLE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateFourByFourPole( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { FourByFourPole *plugin_data = (FourByFourPole *)malloc(sizeof(FourByFourPole)); allpass *ap = NULL; float sr_r_2; float y0; float y1; float y2; float y3; #line 80 "phasers_1217.xml" ap = calloc(16, sizeof(allpass)); y0 = 0.0f; y1 = 0.0f; y2 = 0.0f; y3 = 0.0f; sr_r_2 = 1.0f / s_rate; plugin_data->ap = ap; plugin_data->sr_r_2 = sr_r_2; plugin_data->y0 = y0; plugin_data->y1 = y1; plugin_data->y2 = y2; plugin_data->y3 = y3; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runFourByFourPole(LADSPA_Handle instance, unsigned long sample_count) { FourByFourPole *plugin_data = (FourByFourPole *)instance; /* Frequency 1 (float value) */ const LADSPA_Data f0 = *(plugin_data->f0); /* Feedback 1 (float value) */ const LADSPA_Data fb0 = *(plugin_data->fb0); /* Frequency 2 (float value) */ const LADSPA_Data f1 = *(plugin_data->f1); /* Feedback 2 (float value) */ const LADSPA_Data fb1 = *(plugin_data->fb1); /* Frequency 3 (float value) */ const LADSPA_Data f2 = *(plugin_data->f2); /* Feedback 3 (float value) */ const LADSPA_Data fb2 = *(plugin_data->fb2); /* Frequency 4 (float value) */ const LADSPA_Data f3 = *(plugin_data->f3); /* Feedback 4 (float value) */ const LADSPA_Data fb3 = *(plugin_data->fb3); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; allpass * ap = plugin_data->ap; float sr_r_2 = plugin_data->sr_r_2; float y0 = plugin_data->y0; float y1 = plugin_data->y1; float y2 = plugin_data->y2; float y3 = plugin_data->y3; #line 114 "phasers_1217.xml" unsigned long pos; ap_set_delay(ap, f0 * sr_r_2); ap_set_delay(ap+1, f0 * sr_r_2); ap_set_delay(ap+2, f0 * sr_r_2); ap_set_delay(ap+3, f0 * sr_r_2); ap_set_delay(ap+4, f1 * sr_r_2); ap_set_delay(ap+5, f1 * sr_r_2); ap_set_delay(ap+6, f1 * sr_r_2); ap_set_delay(ap+7, f1 * sr_r_2); ap_set_delay(ap+8, f2 * sr_r_2); ap_set_delay(ap+9, f2 * sr_r_2); ap_set_delay(ap+10, f2 * sr_r_2); ap_set_delay(ap+11, f2 * sr_r_2); ap_set_delay(ap+12, f3 * sr_r_2); ap_set_delay(ap+13, f3 * sr_r_2); ap_set_delay(ap+14, f3 * sr_r_2); ap_set_delay(ap+15, f3 * sr_r_2); for (pos = 0; pos < sample_count; pos++) { y0 = ap_run(ap, input[pos] + y0 * fb0); y0 = ap_run(ap+1, y0); y0 = ap_run(ap+2, y0); y0 = ap_run(ap+3, y0); y1 = ap_run(ap+4, y0 + y1 * fb1); y1 = ap_run(ap+5, y1); y1 = ap_run(ap+6, y1); y1 = ap_run(ap+7, y1); y2 = ap_run(ap+8, y1 + y2 * fb2); y2 = ap_run(ap+9, y2); y2 = ap_run(ap+10, y2); y2 = ap_run(ap+11, y2); y3 = ap_run(ap+12, y2 + y3 * fb3); y3 = ap_run(ap+13, y3); y3 = ap_run(ap+14, y3); y3 = ap_run(ap+15, y3); buffer_write(output[pos], y3); } plugin_data->y0 = y0; plugin_data->y1 = y1; plugin_data->y2 = y2; plugin_data->y3 = y3; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainFourByFourPole(LADSPA_Handle instance, LADSPA_Data gain) { ((FourByFourPole *)instance)->run_adding_gain = gain; } static void runAddingFourByFourPole(LADSPA_Handle instance, unsigned long sample_count) { FourByFourPole *plugin_data = (FourByFourPole *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Frequency 1 (float value) */ const LADSPA_Data f0 = *(plugin_data->f0); /* Feedback 1 (float value) */ const LADSPA_Data fb0 = *(plugin_data->fb0); /* Frequency 2 (float value) */ const LADSPA_Data f1 = *(plugin_data->f1); /* Feedback 2 (float value) */ const LADSPA_Data fb1 = *(plugin_data->fb1); /* Frequency 3 (float value) */ const LADSPA_Data f2 = *(plugin_data->f2); /* Feedback 3 (float value) */ const LADSPA_Data fb2 = *(plugin_data->fb2); /* Frequency 4 (float value) */ const LADSPA_Data f3 = *(plugin_data->f3); /* Feedback 4 (float value) */ const LADSPA_Data fb3 = *(plugin_data->fb3); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; allpass * ap = plugin_data->ap; float sr_r_2 = plugin_data->sr_r_2; float y0 = plugin_data->y0; float y1 = plugin_data->y1; float y2 = plugin_data->y2; float y3 = plugin_data->y3; #line 114 "phasers_1217.xml" unsigned long pos; ap_set_delay(ap, f0 * sr_r_2); ap_set_delay(ap+1, f0 * sr_r_2); ap_set_delay(ap+2, f0 * sr_r_2); ap_set_delay(ap+3, f0 * sr_r_2); ap_set_delay(ap+4, f1 * sr_r_2); ap_set_delay(ap+5, f1 * sr_r_2); ap_set_delay(ap+6, f1 * sr_r_2); ap_set_delay(ap+7, f1 * sr_r_2); ap_set_delay(ap+8, f2 * sr_r_2); ap_set_delay(ap+9, f2 * sr_r_2); ap_set_delay(ap+10, f2 * sr_r_2); ap_set_delay(ap+11, f2 * sr_r_2); ap_set_delay(ap+12, f3 * sr_r_2); ap_set_delay(ap+13, f3 * sr_r_2); ap_set_delay(ap+14, f3 * sr_r_2); ap_set_delay(ap+15, f3 * sr_r_2); for (pos = 0; pos < sample_count; pos++) { y0 = ap_run(ap, input[pos] + y0 * fb0); y0 = ap_run(ap+1, y0); y0 = ap_run(ap+2, y0); y0 = ap_run(ap+3, y0); y1 = ap_run(ap+4, y0 + y1 * fb1); y1 = ap_run(ap+5, y1); y1 = ap_run(ap+6, y1); y1 = ap_run(ap+7, y1); y2 = ap_run(ap+8, y1 + y2 * fb2); y2 = ap_run(ap+9, y2); y2 = ap_run(ap+10, y2); y2 = ap_run(ap+11, y2); y3 = ap_run(ap+12, y2 + y3 * fb3); y3 = ap_run(ap+13, y3); y3 = ap_run(ap+14, y3); y3 = ap_run(ap+15, y3); buffer_write(output[pos], y3); } plugin_data->y0 = y0; plugin_data->y1 = y1; plugin_data->y2 = y2; plugin_data->y3 = y3; } static void activateAutoPhaser(LADSPA_Handle instance) { AutoPhaser *plugin_data = (AutoPhaser *)instance; allpass *ap = plugin_data->ap; envelope *env = plugin_data->env; float sample_rate = plugin_data->sample_rate; float ym1 = plugin_data->ym1; #line 100 "phasers_1217.xml" ap_clear(ap); ap_clear(ap+1); ap_clear(ap+2); ap_clear(ap+3); ap_clear(ap+4); ap_clear(ap+5); plugin_data->ap = ap; plugin_data->env = env; plugin_data->sample_rate = sample_rate; plugin_data->ym1 = ym1; } static void cleanupAutoPhaser(LADSPA_Handle instance) { #line 109 "phasers_1217.xml" AutoPhaser *plugin_data = (AutoPhaser *)instance; free(plugin_data->ap); free(plugin_data->env); free(instance); } static void connectPortAutoPhaser( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { AutoPhaser *plugin; plugin = (AutoPhaser *)instance; switch (port) { case AUTOPHASER_ATTACK_P: plugin->attack_p = data; break; case AUTOPHASER_DECAY_P: plugin->decay_p = data; break; case AUTOPHASER_DEPTH_P: plugin->depth_p = data; break; case AUTOPHASER_FB: plugin->fb = data; break; case AUTOPHASER_SPREAD: plugin->spread = data; break; case AUTOPHASER_INPUT: plugin->input = data; break; case AUTOPHASER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateAutoPhaser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { AutoPhaser *plugin_data = (AutoPhaser *)malloc(sizeof(AutoPhaser)); allpass *ap = NULL; envelope *env = NULL; float sample_rate; float ym1; #line 80 "phasers_1217.xml" ap = calloc(6, sizeof(allpass)); env = calloc(1, sizeof(envelope)); ym1 = 0.0f; sample_rate = (float)s_rate; plugin_data->ap = ap; plugin_data->env = env; plugin_data->sample_rate = sample_rate; plugin_data->ym1 = ym1; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runAutoPhaser(LADSPA_Handle instance, unsigned long sample_count) { AutoPhaser *plugin_data = (AutoPhaser *)instance; /* Attack time (s) (float value) */ const LADSPA_Data attack_p = *(plugin_data->attack_p); /* Decay time (s) (float value) */ const LADSPA_Data decay_p = *(plugin_data->decay_p); /* Modulation depth (float value) */ const LADSPA_Data depth_p = *(plugin_data->depth_p); /* Feedback (float value) */ const LADSPA_Data fb = *(plugin_data->fb); /* Spread (octaves) (float value) */ const LADSPA_Data spread = *(plugin_data->spread); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; allpass * ap = plugin_data->ap; envelope * env = plugin_data->env; float sample_rate = plugin_data->sample_rate; float ym1 = plugin_data->ym1; #line 114 "phasers_1217.xml" unsigned long pos; float y, d, ofs; float attack = attack_p; float decay = decay_p; const float depth = depth_p * 0.5f; if (attack < 0.01f) { attack = 0.01f; } if (decay < 0.01f) { decay = 0.01f; } env_set_attack(env, attack * sample_rate * 0.25f); env_set_release(env, decay * sample_rate * 0.25f); for (pos = 0; pos < sample_count; pos++) { if (pos % 4 == 0) { d = env_run(env, input[pos]) * depth; ap_set_delay(ap, d); ofs = spread * 0.01562f; ap_set_delay(ap+1, d+ofs); ofs *= 2.0f; ap_set_delay(ap+2, d+ofs); ofs *= 2.0f; ap_set_delay(ap+3, d+ofs); ofs *= 2.0f; ap_set_delay(ap+4, d+ofs); ofs *= 2.0f; ap_set_delay(ap+5, d+ofs); } //Run allpass filters in series y = ap_run(ap, input[pos] + ym1 * fb); y = ap_run(ap+1, y); y = ap_run(ap+2, y); y = ap_run(ap+3, y); y = ap_run(ap+4, y); y = ap_run(ap+5, y); buffer_write(output[pos], y); ym1 = y; } plugin_data->ym1 = ym1; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainAutoPhaser(LADSPA_Handle instance, LADSPA_Data gain) { ((AutoPhaser *)instance)->run_adding_gain = gain; } static void runAddingAutoPhaser(LADSPA_Handle instance, unsigned long sample_count) { AutoPhaser *plugin_data = (AutoPhaser *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Attack time (s) (float value) */ const LADSPA_Data attack_p = *(plugin_data->attack_p); /* Decay time (s) (float value) */ const LADSPA_Data decay_p = *(plugin_data->decay_p); /* Modulation depth (float value) */ const LADSPA_Data depth_p = *(plugin_data->depth_p); /* Feedback (float value) */ const LADSPA_Data fb = *(plugin_data->fb); /* Spread (octaves) (float value) */ const LADSPA_Data spread = *(plugin_data->spread); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; allpass * ap = plugin_data->ap; envelope * env = plugin_data->env; float sample_rate = plugin_data->sample_rate; float ym1 = plugin_data->ym1; #line 114 "phasers_1217.xml" unsigned long pos; float y, d, ofs; float attack = attack_p; float decay = decay_p; const float depth = depth_p * 0.5f; if (attack < 0.01f) { attack = 0.01f; } if (decay < 0.01f) { decay = 0.01f; } env_set_attack(env, attack * sample_rate * 0.25f); env_set_release(env, decay * sample_rate * 0.25f); for (pos = 0; pos < sample_count; pos++) { if (pos % 4 == 0) { d = env_run(env, input[pos]) * depth; ap_set_delay(ap, d); ofs = spread * 0.01562f; ap_set_delay(ap+1, d+ofs); ofs *= 2.0f; ap_set_delay(ap+2, d+ofs); ofs *= 2.0f; ap_set_delay(ap+3, d+ofs); ofs *= 2.0f; ap_set_delay(ap+4, d+ofs); ofs *= 2.0f; ap_set_delay(ap+5, d+ofs); } //Run allpass filters in series y = ap_run(ap, input[pos] + ym1 * fb); y = ap_run(ap+1, y); y = ap_run(ap+2, y); y = ap_run(ap+3, y); y = ap_run(ap+4, y); y = ap_run(ap+5, y); buffer_write(output[pos], y); ym1 = y; } plugin_data->ym1 = ym1; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif lfoPhaserDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (lfoPhaserDescriptor) { lfoPhaserDescriptor->UniqueID = 1217; lfoPhaserDescriptor->Label = "lfoPhaser"; lfoPhaserDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; lfoPhaserDescriptor->Name = D_("LFO Phaser"); lfoPhaserDescriptor->Maker = "Steve Harris "; lfoPhaserDescriptor->Copyright = "GPL"; lfoPhaserDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); lfoPhaserDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); lfoPhaserDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); lfoPhaserDescriptor->PortNames = (const char **)port_names; /* Parameters for LFO rate (Hz) */ port_descriptors[LFOPHASER_LFO_RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LFOPHASER_LFO_RATE] = D_("LFO rate (Hz)"); port_range_hints[LFOPHASER_LFO_RATE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[LFOPHASER_LFO_RATE].LowerBound = 0; port_range_hints[LFOPHASER_LFO_RATE].UpperBound = 100; /* Parameters for LFO depth */ port_descriptors[LFOPHASER_LFO_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LFOPHASER_LFO_DEPTH] = D_("LFO depth"); port_range_hints[LFOPHASER_LFO_DEPTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[LFOPHASER_LFO_DEPTH].LowerBound = 0; port_range_hints[LFOPHASER_LFO_DEPTH].UpperBound = 1; /* Parameters for Feedback */ port_descriptors[LFOPHASER_FB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LFOPHASER_FB] = D_("Feedback"); port_range_hints[LFOPHASER_FB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[LFOPHASER_FB].LowerBound = -1; port_range_hints[LFOPHASER_FB].UpperBound = 1; /* Parameters for Spread (octaves) */ port_descriptors[LFOPHASER_SPREAD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[LFOPHASER_SPREAD] = D_("Spread (octaves)"); port_range_hints[LFOPHASER_SPREAD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[LFOPHASER_SPREAD].LowerBound = 0; port_range_hints[LFOPHASER_SPREAD].UpperBound = 2; /* Parameters for Input */ port_descriptors[LFOPHASER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[LFOPHASER_INPUT] = D_("Input"); port_range_hints[LFOPHASER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[LFOPHASER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[LFOPHASER_OUTPUT] = D_("Output"); port_range_hints[LFOPHASER_OUTPUT].HintDescriptor = 0; lfoPhaserDescriptor->activate = activateLfoPhaser; lfoPhaserDescriptor->cleanup = cleanupLfoPhaser; lfoPhaserDescriptor->connect_port = connectPortLfoPhaser; lfoPhaserDescriptor->deactivate = NULL; lfoPhaserDescriptor->instantiate = instantiateLfoPhaser; lfoPhaserDescriptor->run = runLfoPhaser; lfoPhaserDescriptor->run_adding = runAddingLfoPhaser; lfoPhaserDescriptor->set_run_adding_gain = setRunAddingGainLfoPhaser; } fourByFourPoleDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (fourByFourPoleDescriptor) { fourByFourPoleDescriptor->UniqueID = 1218; fourByFourPoleDescriptor->Label = "fourByFourPole"; fourByFourPoleDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; fourByFourPoleDescriptor->Name = D_("4 x 4 pole allpass"); fourByFourPoleDescriptor->Maker = "Steve Harris "; fourByFourPoleDescriptor->Copyright = "GPL"; fourByFourPoleDescriptor->PortCount = 10; port_descriptors = (LADSPA_PortDescriptor *)calloc(10, sizeof(LADSPA_PortDescriptor)); fourByFourPoleDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(10, sizeof(LADSPA_PortRangeHint)); fourByFourPoleDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(10, sizeof(char*)); fourByFourPoleDescriptor->PortNames = (const char **)port_names; /* Parameters for Frequency 1 */ port_descriptors[FOURBYFOURPOLE_F0] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_F0] = D_("Frequency 1"); port_range_hints[FOURBYFOURPOLE_F0].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[FOURBYFOURPOLE_F0].LowerBound = 1; port_range_hints[FOURBYFOURPOLE_F0].UpperBound = 20000; /* Parameters for Feedback 1 */ port_descriptors[FOURBYFOURPOLE_FB0] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_FB0] = D_("Feedback 1"); port_range_hints[FOURBYFOURPOLE_FB0].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FOURBYFOURPOLE_FB0].LowerBound = -1; port_range_hints[FOURBYFOURPOLE_FB0].UpperBound = 1; /* Parameters for Frequency 2 */ port_descriptors[FOURBYFOURPOLE_F1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_F1] = D_("Frequency 2"); port_range_hints[FOURBYFOURPOLE_F1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[FOURBYFOURPOLE_F1].LowerBound = 1; port_range_hints[FOURBYFOURPOLE_F1].UpperBound = 20000; /* Parameters for Feedback 2 */ port_descriptors[FOURBYFOURPOLE_FB1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_FB1] = D_("Feedback 2"); port_range_hints[FOURBYFOURPOLE_FB1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FOURBYFOURPOLE_FB1].LowerBound = -1; port_range_hints[FOURBYFOURPOLE_FB1].UpperBound = 1; /* Parameters for Frequency 3 */ port_descriptors[FOURBYFOURPOLE_F2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_F2] = D_("Frequency 3"); port_range_hints[FOURBYFOURPOLE_F2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[FOURBYFOURPOLE_F2].LowerBound = 1; port_range_hints[FOURBYFOURPOLE_F2].UpperBound = 20000; /* Parameters for Feedback 3 */ port_descriptors[FOURBYFOURPOLE_FB2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_FB2] = D_("Feedback 3"); port_range_hints[FOURBYFOURPOLE_FB2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FOURBYFOURPOLE_FB2].LowerBound = -1; port_range_hints[FOURBYFOURPOLE_FB2].UpperBound = 1; /* Parameters for Frequency 4 */ port_descriptors[FOURBYFOURPOLE_F3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_F3] = D_("Frequency 4"); port_range_hints[FOURBYFOURPOLE_F3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[FOURBYFOURPOLE_F3].LowerBound = 1; port_range_hints[FOURBYFOURPOLE_F3].UpperBound = 20000; /* Parameters for Feedback 4 */ port_descriptors[FOURBYFOURPOLE_FB3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[FOURBYFOURPOLE_FB3] = D_("Feedback 4"); port_range_hints[FOURBYFOURPOLE_FB3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[FOURBYFOURPOLE_FB3].LowerBound = -1; port_range_hints[FOURBYFOURPOLE_FB3].UpperBound = 1; /* Parameters for Input */ port_descriptors[FOURBYFOURPOLE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[FOURBYFOURPOLE_INPUT] = D_("Input"); port_range_hints[FOURBYFOURPOLE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[FOURBYFOURPOLE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[FOURBYFOURPOLE_OUTPUT] = D_("Output"); port_range_hints[FOURBYFOURPOLE_OUTPUT].HintDescriptor = 0; fourByFourPoleDescriptor->activate = activateFourByFourPole; fourByFourPoleDescriptor->cleanup = cleanupFourByFourPole; fourByFourPoleDescriptor->connect_port = connectPortFourByFourPole; fourByFourPoleDescriptor->deactivate = NULL; fourByFourPoleDescriptor->instantiate = instantiateFourByFourPole; fourByFourPoleDescriptor->run = runFourByFourPole; fourByFourPoleDescriptor->run_adding = runAddingFourByFourPole; fourByFourPoleDescriptor->set_run_adding_gain = setRunAddingGainFourByFourPole; } autoPhaserDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (autoPhaserDescriptor) { autoPhaserDescriptor->UniqueID = 1219; autoPhaserDescriptor->Label = "autoPhaser"; autoPhaserDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; autoPhaserDescriptor->Name = D_("Auto phaser"); autoPhaserDescriptor->Maker = "Steve Harris "; autoPhaserDescriptor->Copyright = "GPL"; autoPhaserDescriptor->PortCount = 7; port_descriptors = (LADSPA_PortDescriptor *)calloc(7, sizeof(LADSPA_PortDescriptor)); autoPhaserDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(7, sizeof(LADSPA_PortRangeHint)); autoPhaserDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(7, sizeof(char*)); autoPhaserDescriptor->PortNames = (const char **)port_names; /* Parameters for Attack time (s) */ port_descriptors[AUTOPHASER_ATTACK_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AUTOPHASER_ATTACK_P] = D_("Attack time (s)"); port_range_hints[AUTOPHASER_ATTACK_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[AUTOPHASER_ATTACK_P].LowerBound = 0; port_range_hints[AUTOPHASER_ATTACK_P].UpperBound = 1; /* Parameters for Decay time (s) */ port_descriptors[AUTOPHASER_DECAY_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AUTOPHASER_DECAY_P] = D_("Decay time (s)"); port_range_hints[AUTOPHASER_DECAY_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[AUTOPHASER_DECAY_P].LowerBound = 0; port_range_hints[AUTOPHASER_DECAY_P].UpperBound = 1; /* Parameters for Modulation depth */ port_descriptors[AUTOPHASER_DEPTH_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AUTOPHASER_DEPTH_P] = D_("Modulation depth"); port_range_hints[AUTOPHASER_DEPTH_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[AUTOPHASER_DEPTH_P].LowerBound = 0; port_range_hints[AUTOPHASER_DEPTH_P].UpperBound = 1; /* Parameters for Feedback */ port_descriptors[AUTOPHASER_FB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AUTOPHASER_FB] = D_("Feedback"); port_range_hints[AUTOPHASER_FB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[AUTOPHASER_FB].LowerBound = -1; port_range_hints[AUTOPHASER_FB].UpperBound = 1; /* Parameters for Spread (octaves) */ port_descriptors[AUTOPHASER_SPREAD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[AUTOPHASER_SPREAD] = D_("Spread (octaves)"); port_range_hints[AUTOPHASER_SPREAD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[AUTOPHASER_SPREAD].LowerBound = 0; port_range_hints[AUTOPHASER_SPREAD].UpperBound = 2; /* Parameters for Input */ port_descriptors[AUTOPHASER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[AUTOPHASER_INPUT] = D_("Input"); port_range_hints[AUTOPHASER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[AUTOPHASER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[AUTOPHASER_OUTPUT] = D_("Output"); port_range_hints[AUTOPHASER_OUTPUT].HintDescriptor = 0; autoPhaserDescriptor->activate = activateAutoPhaser; autoPhaserDescriptor->cleanup = cleanupAutoPhaser; autoPhaserDescriptor->connect_port = connectPortAutoPhaser; autoPhaserDescriptor->deactivate = NULL; autoPhaserDescriptor->instantiate = instantiateAutoPhaser; autoPhaserDescriptor->run = runAutoPhaser; autoPhaserDescriptor->run_adding = runAddingAutoPhaser; autoPhaserDescriptor->set_run_adding_gain = setRunAddingGainAutoPhaser; } } void __attribute__((destructor)) swh_fini() { if (lfoPhaserDescriptor) { free((LADSPA_PortDescriptor *)lfoPhaserDescriptor->PortDescriptors); free((char **)lfoPhaserDescriptor->PortNames); free((LADSPA_PortRangeHint *)lfoPhaserDescriptor->PortRangeHints); free(lfoPhaserDescriptor); } if (fourByFourPoleDescriptor) { free((LADSPA_PortDescriptor *)fourByFourPoleDescriptor->PortDescriptors); free((char **)fourByFourPoleDescriptor->PortNames); free((LADSPA_PortRangeHint *)fourByFourPoleDescriptor->PortRangeHints); free(fourByFourPoleDescriptor); } if (autoPhaserDescriptor) { free((LADSPA_PortDescriptor *)autoPhaserDescriptor->PortDescriptors); free((char **)autoPhaserDescriptor->PortNames); free((LADSPA_PortRangeHint *)autoPhaserDescriptor->PortRangeHints); free(autoPhaserDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/pitch_scale_1193.c000066400000000000000000000241071247673406200224050ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "pitch_scale_1193.xml" #include "util/pitchscale.h" #define FRAME_LENGTH 2048 #define OVER_SAMP 4 #define PITCHSCALE_MULT 0 #define PITCHSCALE_INPUT 1 #define PITCHSCALE_OUTPUT 2 #define PITCHSCALE_LATENCY 3 static LADSPA_Descriptor *pitchScaleDescriptor = NULL; typedef struct { LADSPA_Data *mult; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; sbuffers * buffers; long sample_rate; LADSPA_Data run_adding_gain; } PitchScale; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return pitchScaleDescriptor; default: return NULL; } } static void activatePitchScale(LADSPA_Handle instance) { PitchScale *plugin_data = (PitchScale *)instance; sbuffers *buffers = plugin_data->buffers; long sample_rate = plugin_data->sample_rate; #line 68 "pitch_scale_1193.xml" memset(buffers->gInFIFO, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gOutFIFO, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gLastPhase, 0, FRAME_LENGTH*sizeof(float)/2); memset(buffers->gSumPhase, 0, FRAME_LENGTH*sizeof(float)/2); memset(buffers->gOutputAccum, 0, 2*FRAME_LENGTH*sizeof(float)); memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float)); buffers->gRover = 0; /* do one run to make sure the plans are set up */ pitch_scale(buffers, 1.0, FRAME_LENGTH, 4, FRAME_LENGTH, sample_rate, buffers->gInFIFO, buffers->gOutFIFO, 0, 0.0f); plugin_data->buffers = buffers; plugin_data->sample_rate = sample_rate; } static void cleanupPitchScale(LADSPA_Handle instance) { #line 83 "pitch_scale_1193.xml" PitchScale *plugin_data = (PitchScale *)instance; free (plugin_data->buffers->gInFIFO); free (plugin_data->buffers->gOutFIFO); free (plugin_data->buffers->gLastPhase); free (plugin_data->buffers->gSumPhase); free (plugin_data->buffers->gOutputAccum); free (plugin_data->buffers->gAnaFreq); free (plugin_data->buffers->gAnaMagn); free (plugin_data->buffers->gSynFreq); free (plugin_data->buffers->gSynMagn); free (plugin_data->buffers->gWindow); free (plugin_data->buffers); free(instance); } static void connectPortPitchScale( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { PitchScale *plugin; plugin = (PitchScale *)instance; switch (port) { case PITCHSCALE_MULT: plugin->mult = data; break; case PITCHSCALE_INPUT: plugin->input = data; break; case PITCHSCALE_OUTPUT: plugin->output = data; break; case PITCHSCALE_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiatePitchScale( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { PitchScale *plugin_data = (PitchScale *)malloc(sizeof(PitchScale)); sbuffers *buffers = NULL; long sample_rate; #line 30 "pitch_scale_1193.xml" int i; float arg; buffers = malloc(sizeof(sbuffers)); sample_rate = s_rate; buffers->gInFIFO = malloc(FRAME_LENGTH * sizeof(float)); buffers->gOutFIFO = malloc(FRAME_LENGTH * sizeof(float)); buffers->gLastPhase = malloc(FRAME_LENGTH * sizeof(float)); buffers->gSumPhase = malloc(FRAME_LENGTH * sizeof(float)); buffers->gOutputAccum = malloc(2*FRAME_LENGTH * sizeof(float)); buffers->gAnaFreq = malloc(FRAME_LENGTH * sizeof(float)); buffers->gAnaMagn = malloc(FRAME_LENGTH * sizeof(float)); buffers->gSynFreq = malloc(FRAME_LENGTH * sizeof(float)); buffers->gSynMagn = malloc(FRAME_LENGTH * sizeof(float)); buffers->gWindow = malloc(FRAME_LENGTH * sizeof(float)); /* if (aplan == NULL) { #ifdef FFTW3 aplan = fftwf_plan_r2r_1d(FRAME_LENGTH, ps_in, ps_out, FFTW_R2HC, FFTW_MEASURE); splan = fftwf_plan_r2r_1d(FRAME_LENGTH, ps_in, ps_out, FFTW_HC2R, FFTW_MEASURE); #else aplan = rfftw_create_plan(FRAME_LENGTH, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE); splan = rfftw_create_plan(FRAME_LENGTH, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE); #endif } */ arg = 2.0f * M_PI / (float)(FRAME_LENGTH-1); for (i=0; i < FRAME_LENGTH; i++) { // Blackman-Harris buffers->gWindow[i] = 0.35875f - 0.48829f * cos(arg * (float)i) + 0.14128f * cos(2.0f * arg * (float)i) - 0.01168f * cos(3.0f * arg * (float)i); // Gain correction buffers->gWindow[i] *= 0.761f; } plugin_data->buffers = buffers; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runPitchScale(LADSPA_Handle instance, unsigned long sample_count) { PitchScale *plugin_data = (PitchScale *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Pitch co-efficient (float value) */ const LADSPA_Data mult = *(plugin_data->mult); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; sbuffers * buffers = plugin_data->buffers; long sample_rate = plugin_data->sample_rate; #line 23 "pitch_scale_1193.xml" pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH / OVER_SAMP); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainPitchScale(LADSPA_Handle instance, LADSPA_Data gain) { ((PitchScale *)instance)->run_adding_gain = gain; } static void runAddingPitchScale(LADSPA_Handle instance, unsigned long sample_count) { PitchScale *plugin_data = (PitchScale *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Pitch co-efficient (float value) */ const LADSPA_Data mult = *(plugin_data->mult); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; sbuffers * buffers = plugin_data->buffers; long sample_rate = plugin_data->sample_rate; #line 23 "pitch_scale_1193.xml" pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH / OVER_SAMP); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif pitchScaleDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (pitchScaleDescriptor) { pitchScaleDescriptor->UniqueID = 1193; pitchScaleDescriptor->Label = "pitchScale"; pitchScaleDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; pitchScaleDescriptor->Name = D_("Pitch Scaler"); pitchScaleDescriptor->Maker = "Steve Harris "; pitchScaleDescriptor->Copyright = "GPL"; pitchScaleDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); pitchScaleDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); pitchScaleDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); pitchScaleDescriptor->PortNames = (const char **)port_names; /* Parameters for Pitch co-efficient */ port_descriptors[PITCHSCALE_MULT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[PITCHSCALE_MULT] = D_("Pitch co-efficient"); port_range_hints[PITCHSCALE_MULT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[PITCHSCALE_MULT].LowerBound = 0.5; port_range_hints[PITCHSCALE_MULT].UpperBound = 2; /* Parameters for Input */ port_descriptors[PITCHSCALE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[PITCHSCALE_INPUT] = D_("Input"); port_range_hints[PITCHSCALE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[PITCHSCALE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[PITCHSCALE_OUTPUT] = D_("Output"); port_range_hints[PITCHSCALE_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[PITCHSCALE_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[PITCHSCALE_LATENCY] = D_("latency"); port_range_hints[PITCHSCALE_LATENCY].HintDescriptor = 0; pitchScaleDescriptor->activate = activatePitchScale; pitchScaleDescriptor->cleanup = cleanupPitchScale; pitchScaleDescriptor->connect_port = connectPortPitchScale; pitchScaleDescriptor->deactivate = NULL; pitchScaleDescriptor->instantiate = instantiatePitchScale; pitchScaleDescriptor->run = runPitchScale; pitchScaleDescriptor->run_adding = runAddingPitchScale; pitchScaleDescriptor->set_run_adding_gain = setRunAddingGainPitchScale; } } void __attribute__((destructor)) swh_fini() { if (pitchScaleDescriptor) { free((LADSPA_PortDescriptor *)pitchScaleDescriptor->PortDescriptors); free((char **)pitchScaleDescriptor->PortNames); free((LADSPA_PortRangeHint *)pitchScaleDescriptor->PortRangeHints); free(pitchScaleDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/pitch_scale_1194.c000066400000000000000000000234371247673406200224130ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "pitch_scale_1194.xml" #include "util/pitchscale.h" #define FRAME_LENGTH 4096 #define OVER_SAMP 16 #define PITCHSCALEHQ_MULT 0 #define PITCHSCALEHQ_INPUT 1 #define PITCHSCALEHQ_OUTPUT 2 #define PITCHSCALEHQ_LATENCY 3 static LADSPA_Descriptor *pitchScaleHQDescriptor = NULL; typedef struct { LADSPA_Data *mult; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *latency; sbuffers * buffers; long sample_rate; LADSPA_Data run_adding_gain; } PitchScaleHQ; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return pitchScaleHQDescriptor; default: return NULL; } } static void activatePitchScaleHQ(LADSPA_Handle instance) { PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; sbuffers *buffers = plugin_data->buffers; long sample_rate = plugin_data->sample_rate; #line 57 "pitch_scale_1194.xml" memset(buffers->gInFIFO, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gOutFIFO, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gLastPhase, 0, FRAME_LENGTH*sizeof(float)/2); memset(buffers->gSumPhase, 0, FRAME_LENGTH*sizeof(float)/2); memset(buffers->gOutputAccum, 0, 2*FRAME_LENGTH*sizeof(float)); memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float)); buffers->gRover = 0; pitch_scale(buffers, 1.0, FRAME_LENGTH, 16, FRAME_LENGTH, sample_rate, buffers->gInFIFO, buffers->gOutFIFO, 0, 0.0f); plugin_data->buffers = buffers; plugin_data->sample_rate = sample_rate; } static void cleanupPitchScaleHQ(LADSPA_Handle instance) { #line 69 "pitch_scale_1194.xml" PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; free (plugin_data->buffers->gInFIFO); free (plugin_data->buffers->gOutFIFO); free (plugin_data->buffers->gLastPhase); free (plugin_data->buffers->gSumPhase); free (plugin_data->buffers->gOutputAccum); free (plugin_data->buffers->gAnaFreq); free (plugin_data->buffers->gAnaMagn); free (plugin_data->buffers->gSynFreq); free (plugin_data->buffers->gSynMagn); free (plugin_data->buffers->gWindow); free (plugin_data->buffers); free(instance); } static void connectPortPitchScaleHQ( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { PitchScaleHQ *plugin; plugin = (PitchScaleHQ *)instance; switch (port) { case PITCHSCALEHQ_MULT: plugin->mult = data; break; case PITCHSCALEHQ_INPUT: plugin->input = data; break; case PITCHSCALEHQ_OUTPUT: plugin->output = data; break; case PITCHSCALEHQ_LATENCY: plugin->latency = data; break; } } static LADSPA_Handle instantiatePitchScaleHQ( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { PitchScaleHQ *plugin_data = (PitchScaleHQ *)malloc(sizeof(PitchScaleHQ)); sbuffers *buffers = NULL; long sample_rate; #line 29 "pitch_scale_1194.xml" int i; float arg; buffers = malloc(sizeof(sbuffers)); sample_rate = s_rate; buffers->gInFIFO = malloc(FRAME_LENGTH * sizeof(float)); buffers->gOutFIFO = malloc(FRAME_LENGTH * sizeof(float)); buffers->gLastPhase = malloc(FRAME_LENGTH * sizeof(float)); buffers->gSumPhase = malloc(FRAME_LENGTH * sizeof(float)); buffers->gOutputAccum = malloc(2*FRAME_LENGTH * sizeof(float)); buffers->gAnaFreq = malloc(FRAME_LENGTH * sizeof(float)); buffers->gAnaMagn = malloc(FRAME_LENGTH * sizeof(float)); buffers->gSynFreq = malloc(FRAME_LENGTH * sizeof(float)); buffers->gSynMagn = malloc(FRAME_LENGTH * sizeof(float)); buffers->gWindow = malloc(FRAME_LENGTH * sizeof(float)); arg = 2.0f * M_PI / (float)(FRAME_LENGTH-1); for (i=0; i < FRAME_LENGTH; i++) { // Blackman-Harris buffers->gWindow[i] = 0.35875f - 0.48829f * cos(arg * (float)i) + 0.14128f * cos(2.0f * arg * (float)i) - 0.01168f * cos(3.0f * arg * (float)i); // Gain correction buffers->gWindow[i] *= 0.761f; } plugin_data->buffers = buffers; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runPitchScaleHQ(LADSPA_Handle instance, unsigned long sample_count) { PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Pitch co-efficient (float value) */ const LADSPA_Data mult = *(plugin_data->mult); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; sbuffers * buffers = plugin_data->buffers; long sample_rate = plugin_data->sample_rate; #line 23 "pitch_scale_1194.xml" pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH / OVER_SAMP); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainPitchScaleHQ(LADSPA_Handle instance, LADSPA_Data gain) { ((PitchScaleHQ *)instance)->run_adding_gain = gain; } static void runAddingPitchScaleHQ(LADSPA_Handle instance, unsigned long sample_count) { PitchScaleHQ *plugin_data = (PitchScaleHQ *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Pitch co-efficient (float value) */ const LADSPA_Data mult = *(plugin_data->mult); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; sbuffers * buffers = plugin_data->buffers; long sample_rate = plugin_data->sample_rate; #line 23 "pitch_scale_1194.xml" pitch_scale(buffers, mult, FRAME_LENGTH, OVER_SAMP, sample_count, sample_rate, input, output, RUN_ADDING, run_adding_gain); *(plugin_data->latency) = FRAME_LENGTH - (FRAME_LENGTH / OVER_SAMP); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif pitchScaleHQDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (pitchScaleHQDescriptor) { pitchScaleHQDescriptor->UniqueID = 1194; pitchScaleHQDescriptor->Label = "pitchScaleHQ"; pitchScaleHQDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; pitchScaleHQDescriptor->Name = D_("Higher Quality Pitch Scaler"); pitchScaleHQDescriptor->Maker = "Steve Harris "; pitchScaleHQDescriptor->Copyright = "GPL"; pitchScaleHQDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); pitchScaleHQDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); pitchScaleHQDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); pitchScaleHQDescriptor->PortNames = (const char **)port_names; /* Parameters for Pitch co-efficient */ port_descriptors[PITCHSCALEHQ_MULT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[PITCHSCALEHQ_MULT] = D_("Pitch co-efficient"); port_range_hints[PITCHSCALEHQ_MULT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[PITCHSCALEHQ_MULT].LowerBound = 0.5; port_range_hints[PITCHSCALEHQ_MULT].UpperBound = 2; /* Parameters for Input */ port_descriptors[PITCHSCALEHQ_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[PITCHSCALEHQ_INPUT] = D_("Input"); port_range_hints[PITCHSCALEHQ_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[PITCHSCALEHQ_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[PITCHSCALEHQ_OUTPUT] = D_("Output"); port_range_hints[PITCHSCALEHQ_OUTPUT].HintDescriptor = 0; /* Parameters for latency */ port_descriptors[PITCHSCALEHQ_LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[PITCHSCALEHQ_LATENCY] = D_("latency"); port_range_hints[PITCHSCALEHQ_LATENCY].HintDescriptor = 0; pitchScaleHQDescriptor->activate = activatePitchScaleHQ; pitchScaleHQDescriptor->cleanup = cleanupPitchScaleHQ; pitchScaleHQDescriptor->connect_port = connectPortPitchScaleHQ; pitchScaleHQDescriptor->deactivate = NULL; pitchScaleHQDescriptor->instantiate = instantiatePitchScaleHQ; pitchScaleHQDescriptor->run = runPitchScaleHQ; pitchScaleHQDescriptor->run_adding = runAddingPitchScaleHQ; pitchScaleHQDescriptor->set_run_adding_gain = setRunAddingGainPitchScaleHQ; } } void __attribute__((destructor)) swh_fini() { if (pitchScaleHQDescriptor) { free((LADSPA_PortDescriptor *)pitchScaleHQDescriptor->PortDescriptors); free((char **)pitchScaleHQDescriptor->PortNames); free((LADSPA_PortRangeHint *)pitchScaleHQDescriptor->PortRangeHints); free(pitchScaleHQDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/plate_1423.c000066400000000000000000000264341247673406200212350ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "plate_1423.xml" #include "util/waveguide_nl.h" #define LP_INNER 0.96f #define LP_OUTER 0.983f #define RUN_WG(n, junct_a, junct_b) waveguide_nl_process_lin(w[n], junct_a - out[n*2+1], junct_b - out[n*2], out+n*2, out+n*2+1) #define PLATE_TIME 0 #define PLATE_DAMPING 1 #define PLATE_WET 2 #define PLATE_INPUT 3 #define PLATE_OUTPUTL 4 #define PLATE_OUTPUTR 5 static LADSPA_Descriptor *plateDescriptor = NULL; typedef struct { LADSPA_Data *time; LADSPA_Data *damping; LADSPA_Data *wet; LADSPA_Data *input; LADSPA_Data *outputl; LADSPA_Data *outputr; float * out; waveguide_nl **w; LADSPA_Data run_adding_gain; } Plate; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return plateDescriptor; default: return NULL; } } static void activatePlate(LADSPA_Handle instance) { Plate *plugin_data = (Plate *)instance; float *out = plugin_data->out; waveguide_nl **w = plugin_data->w; #line 40 "plate_1423.xml" unsigned int i; for (i = 0; i < 8; i++) { waveguide_nl_reset(w[i]); } plugin_data->out = out; plugin_data->w = w; } static void cleanupPlate(LADSPA_Handle instance) { #line 85 "plate_1423.xml" Plate *plugin_data = (Plate *)instance; unsigned int i; for (i = 0; i < 8; i++) { waveguide_nl_free(plugin_data->w[i]); } free(plugin_data->w); free(plugin_data->out); free(instance); } static void connectPortPlate( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Plate *plugin; plugin = (Plate *)instance; switch (port) { case PLATE_TIME: plugin->time = data; break; case PLATE_DAMPING: plugin->damping = data; break; case PLATE_WET: plugin->wet = data; break; case PLATE_INPUT: plugin->input = data; break; case PLATE_OUTPUTL: plugin->outputl = data; break; case PLATE_OUTPUTR: plugin->outputr = data; break; } } static LADSPA_Handle instantiatePlate( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Plate *plugin_data = (Plate *)malloc(sizeof(Plate)); float *out = NULL; waveguide_nl **w = NULL; #line 26 "plate_1423.xml" w = malloc(8 * sizeof(waveguide_nl *)); w[0] = waveguide_nl_new(2389, LP_INNER, 0.04f, 0.0f); w[1] = waveguide_nl_new(4742, LP_INNER, 0.17f, 0.0f); w[2] = waveguide_nl_new(4623, LP_INNER, 0.52f, 0.0f); w[3] = waveguide_nl_new(2142, LP_INNER, 0.48f, 0.0f); w[4] = waveguide_nl_new(5597, LP_OUTER, 0.32f, 0.0f); w[5] = waveguide_nl_new(3692, LP_OUTER, 0.89f, 0.0f); w[6] = waveguide_nl_new(5611, LP_OUTER, 0.28f, 0.0f); w[7] = waveguide_nl_new(3703, LP_OUTER, 0.29f, 0.0f); out = calloc(32, sizeof(float)); plugin_data->out = out; plugin_data->w = w; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runPlate(LADSPA_Handle instance, unsigned long sample_count) { Plate *plugin_data = (Plate *)instance; /* Reverb time (float value) */ const LADSPA_Data time = *(plugin_data->time); /* Damping (float value) */ const LADSPA_Data damping = *(plugin_data->damping); /* Dry/wet mix (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const outputl = plugin_data->outputl; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const outputr = plugin_data->outputr; float * out = plugin_data->out; waveguide_nl ** w = plugin_data->w; #line 48 "plate_1423.xml" unsigned long pos; const float scale = powf(time * 0.117647f, 1.34f); const float lpscale = 1.0f - damping * 0.93; for (pos=0; pos<8; pos++) { waveguide_nl_set_delay(w[pos], w[pos]->size * scale); } for (pos=0; pos<4; pos++) { waveguide_nl_set_fc(w[pos], LP_INNER * lpscale); } for (; pos<8; pos++) { waveguide_nl_set_fc(w[pos], LP_OUTER * lpscale); } for (pos = 0; pos < sample_count; pos++) { const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + input[pos]; const float beta = (out[1] + out[9] + out[14]) * 0.666666666f; const float gamma = (out[3] + out[8] + out[11]) * 0.666666666f; const float delta = (out[5] + out[10] + out[13]) * 0.666666666f; const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666f; RUN_WG(0, beta, alpha); RUN_WG(1, gamma, alpha); RUN_WG(2, delta, alpha); RUN_WG(3, epsilon, alpha); RUN_WG(4, beta, gamma); RUN_WG(5, gamma, delta); RUN_WG(6, delta, epsilon); RUN_WG(7, epsilon, beta); buffer_write(outputl[pos], beta * wet + input[pos] * (1.0f - wet)); buffer_write(outputr[pos], gamma * wet + input[pos] * (1.0f - wet)); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainPlate(LADSPA_Handle instance, LADSPA_Data gain) { ((Plate *)instance)->run_adding_gain = gain; } static void runAddingPlate(LADSPA_Handle instance, unsigned long sample_count) { Plate *plugin_data = (Plate *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Reverb time (float value) */ const LADSPA_Data time = *(plugin_data->time); /* Damping (float value) */ const LADSPA_Data damping = *(plugin_data->damping); /* Dry/wet mix (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const outputl = plugin_data->outputl; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const outputr = plugin_data->outputr; float * out = plugin_data->out; waveguide_nl ** w = plugin_data->w; #line 48 "plate_1423.xml" unsigned long pos; const float scale = powf(time * 0.117647f, 1.34f); const float lpscale = 1.0f - damping * 0.93; for (pos=0; pos<8; pos++) { waveguide_nl_set_delay(w[pos], w[pos]->size * scale); } for (pos=0; pos<4; pos++) { waveguide_nl_set_fc(w[pos], LP_INNER * lpscale); } for (; pos<8; pos++) { waveguide_nl_set_fc(w[pos], LP_OUTER * lpscale); } for (pos = 0; pos < sample_count; pos++) { const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f + input[pos]; const float beta = (out[1] + out[9] + out[14]) * 0.666666666f; const float gamma = (out[3] + out[8] + out[11]) * 0.666666666f; const float delta = (out[5] + out[10] + out[13]) * 0.666666666f; const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666f; RUN_WG(0, beta, alpha); RUN_WG(1, gamma, alpha); RUN_WG(2, delta, alpha); RUN_WG(3, epsilon, alpha); RUN_WG(4, beta, gamma); RUN_WG(5, gamma, delta); RUN_WG(6, delta, epsilon); RUN_WG(7, epsilon, beta); buffer_write(outputl[pos], beta * wet + input[pos] * (1.0f - wet)); buffer_write(outputr[pos], gamma * wet + input[pos] * (1.0f - wet)); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif plateDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (plateDescriptor) { plateDescriptor->UniqueID = 1423; plateDescriptor->Label = "plate"; plateDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; plateDescriptor->Name = D_("Plate reverb"); plateDescriptor->Maker = "Steve Harris "; plateDescriptor->Copyright = "GPL"; plateDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); plateDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); plateDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); plateDescriptor->PortNames = (const char **)port_names; /* Parameters for Reverb time */ port_descriptors[PLATE_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[PLATE_TIME] = D_("Reverb time"); port_range_hints[PLATE_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[PLATE_TIME].LowerBound = 0.01; port_range_hints[PLATE_TIME].UpperBound = 8.5; /* Parameters for Damping */ port_descriptors[PLATE_DAMPING] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[PLATE_DAMPING] = D_("Damping"); port_range_hints[PLATE_DAMPING].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[PLATE_DAMPING].LowerBound = 0; port_range_hints[PLATE_DAMPING].UpperBound = 1; /* Parameters for Dry/wet mix */ port_descriptors[PLATE_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[PLATE_WET] = D_("Dry/wet mix"); port_range_hints[PLATE_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[PLATE_WET].LowerBound = 0; port_range_hints[PLATE_WET].UpperBound = 1; /* Parameters for Input */ port_descriptors[PLATE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[PLATE_INPUT] = D_("Input"); port_range_hints[PLATE_INPUT].HintDescriptor = 0; /* Parameters for Left output */ port_descriptors[PLATE_OUTPUTL] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[PLATE_OUTPUTL] = D_("Left output"); port_range_hints[PLATE_OUTPUTL].HintDescriptor = 0; /* Parameters for Right output */ port_descriptors[PLATE_OUTPUTR] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[PLATE_OUTPUTR] = D_("Right output"); port_range_hints[PLATE_OUTPUTR].HintDescriptor = 0; plateDescriptor->activate = activatePlate; plateDescriptor->cleanup = cleanupPlate; plateDescriptor->connect_port = connectPortPlate; plateDescriptor->deactivate = NULL; plateDescriptor->instantiate = instantiatePlate; plateDescriptor->run = runPlate; plateDescriptor->run_adding = runAddingPlate; plateDescriptor->set_run_adding_gain = setRunAddingGainPlate; } } void __attribute__((destructor)) swh_fini() { if (plateDescriptor) { free((LADSPA_PortDescriptor *)plateDescriptor->PortDescriptors); free((char **)plateDescriptor->PortNames); free((LADSPA_PortRangeHint *)plateDescriptor->PortRangeHints); free(plateDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/pointer_cast_1910.c000066400000000000000000000226711247673406200226220ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "pointer_cast_1910.xml" #include #include "ladspa-util.h" #include "util/biquad.h" typedef union { LADSPA_Data fp; int in; } pcast; #define POINTERCASTDISTORTION_CUTOFF 0 #define POINTERCASTDISTORTION_WET 1 #define POINTERCASTDISTORTION_INPUT 2 #define POINTERCASTDISTORTION_OUTPUT 3 static LADSPA_Descriptor *pointerCastDistortionDescriptor = NULL; typedef struct { LADSPA_Data *cutoff; LADSPA_Data *wet; LADSPA_Data *input; LADSPA_Data *output; biquad * filt; float fs; LADSPA_Data run_adding_gain; } PointerCastDistortion; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return pointerCastDistortionDescriptor; default: return NULL; } } static void activatePointerCastDistortion(LADSPA_Handle instance) { PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; biquad *filt = plugin_data->filt; float fs = plugin_data->fs; #line 36 "pointer_cast_1910.xml" biquad_init(filt); plugin_data->filt = filt; plugin_data->fs = fs; } static void cleanupPointerCastDistortion(LADSPA_Handle instance) { #line 59 "pointer_cast_1910.xml" PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; free(plugin_data->filt); free(instance); } static void connectPortPointerCastDistortion( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { PointerCastDistortion *plugin; plugin = (PointerCastDistortion *)instance; switch (port) { case POINTERCASTDISTORTION_CUTOFF: plugin->cutoff = data; break; case POINTERCASTDISTORTION_WET: plugin->wet = data; break; case POINTERCASTDISTORTION_INPUT: plugin->input = data; break; case POINTERCASTDISTORTION_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiatePointerCastDistortion( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { PointerCastDistortion *plugin_data = (PointerCastDistortion *)malloc(sizeof(PointerCastDistortion)); biquad *filt = NULL; float fs; #line 31 "pointer_cast_1910.xml" filt = malloc(sizeof(biquad)); fs = s_rate; plugin_data->filt = filt; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runPointerCastDistortion(LADSPA_Handle instance, unsigned long sample_count) { PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; /* Effect cutoff freq (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Dry/wet mix (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filt = plugin_data->filt; float fs = plugin_data->fs; #line 40 "pointer_cast_1910.xml" unsigned long pos; const float filt_scale = cutoff < 50.0f ? cutoff / 50.0f : 1.0f; lp_set_params(filt, cutoff, 1.0f, fs); for (pos = 0; pos < sample_count; pos++) { pcast val; float sign, filt_val, dist_val; filt_val = biquad_run(filt, input[pos]) * filt_scale; sign = filt_val < 0.0f ? -1.0f : 1.0f; val.fp = fabs(filt_val); dist_val = sign * (LADSPA_Data)val.in / (LADSPA_Data)INT_MAX + (input[pos] - filt_val); buffer_write(output[pos], LIN_INTERP(wet, input[pos], dist_val)); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainPointerCastDistortion(LADSPA_Handle instance, LADSPA_Data gain) { ((PointerCastDistortion *)instance)->run_adding_gain = gain; } static void runAddingPointerCastDistortion(LADSPA_Handle instance, unsigned long sample_count) { PointerCastDistortion *plugin_data = (PointerCastDistortion *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Effect cutoff freq (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); /* Dry/wet mix (float value) */ const LADSPA_Data wet = *(plugin_data->wet); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filt = plugin_data->filt; float fs = plugin_data->fs; #line 40 "pointer_cast_1910.xml" unsigned long pos; const float filt_scale = cutoff < 50.0f ? cutoff / 50.0f : 1.0f; lp_set_params(filt, cutoff, 1.0f, fs); for (pos = 0; pos < sample_count; pos++) { pcast val; float sign, filt_val, dist_val; filt_val = biquad_run(filt, input[pos]) * filt_scale; sign = filt_val < 0.0f ? -1.0f : 1.0f; val.fp = fabs(filt_val); dist_val = sign * (LADSPA_Data)val.in / (LADSPA_Data)INT_MAX + (input[pos] - filt_val); buffer_write(output[pos], LIN_INTERP(wet, input[pos], dist_val)); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif pointerCastDistortionDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (pointerCastDistortionDescriptor) { pointerCastDistortionDescriptor->UniqueID = 1910; pointerCastDistortionDescriptor->Label = "pointerCastDistortion"; pointerCastDistortionDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; pointerCastDistortionDescriptor->Name = D_("Pointer cast distortion"); pointerCastDistortionDescriptor->Maker = "Steve Harris "; pointerCastDistortionDescriptor->Copyright = "GPL"; pointerCastDistortionDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); pointerCastDistortionDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); pointerCastDistortionDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); pointerCastDistortionDescriptor->PortNames = (const char **)port_names; /* Parameters for Effect cutoff freq (Hz) */ port_descriptors[POINTERCASTDISTORTION_CUTOFF] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[POINTERCASTDISTORTION_CUTOFF] = D_("Effect cutoff freq (Hz)"); port_range_hints[POINTERCASTDISTORTION_CUTOFF].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[POINTERCASTDISTORTION_CUTOFF].LowerBound = 0.0001; port_range_hints[POINTERCASTDISTORTION_CUTOFF].UpperBound = 0.3; /* Parameters for Dry/wet mix */ port_descriptors[POINTERCASTDISTORTION_WET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[POINTERCASTDISTORTION_WET] = D_("Dry/wet mix"); port_range_hints[POINTERCASTDISTORTION_WET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[POINTERCASTDISTORTION_WET].LowerBound = 0; port_range_hints[POINTERCASTDISTORTION_WET].UpperBound = 1; /* Parameters for Input */ port_descriptors[POINTERCASTDISTORTION_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[POINTERCASTDISTORTION_INPUT] = D_("Input"); port_range_hints[POINTERCASTDISTORTION_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[POINTERCASTDISTORTION_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[POINTERCASTDISTORTION_OUTPUT] = D_("Output"); port_range_hints[POINTERCASTDISTORTION_OUTPUT].HintDescriptor = 0; pointerCastDistortionDescriptor->activate = activatePointerCastDistortion; pointerCastDistortionDescriptor->cleanup = cleanupPointerCastDistortion; pointerCastDistortionDescriptor->connect_port = connectPortPointerCastDistortion; pointerCastDistortionDescriptor->deactivate = NULL; pointerCastDistortionDescriptor->instantiate = instantiatePointerCastDistortion; pointerCastDistortionDescriptor->run = runPointerCastDistortion; pointerCastDistortionDescriptor->run_adding = runAddingPointerCastDistortion; pointerCastDistortionDescriptor->set_run_adding_gain = setRunAddingGainPointerCastDistortion; } } void __attribute__((destructor)) swh_fini() { if (pointerCastDistortionDescriptor) { free((LADSPA_PortDescriptor *)pointerCastDistortionDescriptor->PortDescriptors); free((char **)pointerCastDistortionDescriptor->PortNames); free((LADSPA_PortRangeHint *)pointerCastDistortionDescriptor->PortRangeHints); free(pointerCastDistortionDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/rate_shifter_1417.c000066400000000000000000000217111247673406200226030ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "rate_shifter_1417.xml" #include "ladspa-util.h" #define RATESHIFTER_RATE 0 #define RATESHIFTER_INPUT 1 #define RATESHIFTER_OUTPUT 2 static LADSPA_Descriptor *rateShifterDescriptor = NULL; typedef struct { LADSPA_Data *rate; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; unsigned int buffer_mask; fixp32 read_ptr; unsigned int write_ptr; LADSPA_Data run_adding_gain; } RateShifter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return rateShifterDescriptor; default: return NULL; } } static void activateRateShifter(LADSPA_Handle instance) { RateShifter *plugin_data = (RateShifter *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; fixp32 read_ptr = plugin_data->read_ptr; unsigned int write_ptr = plugin_data->write_ptr; #line 36 "rate_shifter_1417.xml" memset(buffer, 0, buffer_mask + 1); read_ptr.all = 0; write_ptr = (buffer_mask + 1) / 2; write_ptr = 0; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->read_ptr = read_ptr; plugin_data->write_ptr = write_ptr; } static void cleanupRateShifter(LADSPA_Handle instance) { #line 43 "rate_shifter_1417.xml" RateShifter *plugin_data = (RateShifter *)instance; free(plugin_data->buffer); free(instance); } static void connectPortRateShifter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { RateShifter *plugin; plugin = (RateShifter *)instance; switch (port) { case RATESHIFTER_RATE: plugin->rate = data; break; case RATESHIFTER_INPUT: plugin->input = data; break; case RATESHIFTER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateRateShifter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { RateShifter *plugin_data = (RateShifter *)malloc(sizeof(RateShifter)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; fixp32 read_ptr; unsigned int write_ptr; #line 23 "rate_shifter_1417.xml" unsigned int size = 32768; const float fs = s_rate; while (size < 2.7f * fs) { size *= 2; } buffer = calloc(size, sizeof(LADSPA_Data)); buffer_mask = size - 1; read_ptr.all = 0; write_ptr = size / 2; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->read_ptr = read_ptr; plugin_data->write_ptr = write_ptr; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runRateShifter(LADSPA_Handle instance, unsigned long sample_count) { RateShifter *plugin_data = (RateShifter *)instance; /* Rate (float value) */ const LADSPA_Data rate = *(plugin_data->rate); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; fixp32 read_ptr = plugin_data->read_ptr; unsigned int write_ptr = plugin_data->write_ptr; #line 47 "rate_shifter_1417.xml" unsigned long pos; fixp32 read_inc; read_inc.all = (long long)(rate * 4294967296.0f); for (pos = 0; pos < sample_count; pos++) { const unsigned int rp = read_ptr.part.in; /* Do write pointer stuff */ buffer[write_ptr] = input[pos]; write_ptr = (write_ptr + 1) & buffer_mask; /* And now read pointer */ buffer_write(output[pos], cube_interp((float)read_ptr.part.fr / 4294967296.0f, buffer[(rp - 1) & buffer_mask], buffer[rp], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); read_ptr.all += read_inc.all; read_ptr.part.in &= buffer_mask; } plugin_data->read_ptr.all = read_ptr.all; plugin_data->write_ptr = write_ptr; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainRateShifter(LADSPA_Handle instance, LADSPA_Data gain) { ((RateShifter *)instance)->run_adding_gain = gain; } static void runAddingRateShifter(LADSPA_Handle instance, unsigned long sample_count) { RateShifter *plugin_data = (RateShifter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Rate (float value) */ const LADSPA_Data rate = *(plugin_data->rate); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; fixp32 read_ptr = plugin_data->read_ptr; unsigned int write_ptr = plugin_data->write_ptr; #line 47 "rate_shifter_1417.xml" unsigned long pos; fixp32 read_inc; read_inc.all = (long long)(rate * 4294967296.0f); for (pos = 0; pos < sample_count; pos++) { const unsigned int rp = read_ptr.part.in; /* Do write pointer stuff */ buffer[write_ptr] = input[pos]; write_ptr = (write_ptr + 1) & buffer_mask; /* And now read pointer */ buffer_write(output[pos], cube_interp((float)read_ptr.part.fr / 4294967296.0f, buffer[(rp - 1) & buffer_mask], buffer[rp], buffer[(rp + 1) & buffer_mask], buffer[(rp + 2) & buffer_mask])); read_ptr.all += read_inc.all; read_ptr.part.in &= buffer_mask; } plugin_data->read_ptr.all = read_ptr.all; plugin_data->write_ptr = write_ptr; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif rateShifterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (rateShifterDescriptor) { rateShifterDescriptor->UniqueID = 1417; rateShifterDescriptor->Label = "rateShifter"; rateShifterDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; rateShifterDescriptor->Name = D_("Rate shifter"); rateShifterDescriptor->Maker = "Steve Harris "; rateShifterDescriptor->Copyright = "GPL"; rateShifterDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); rateShifterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); rateShifterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); rateShifterDescriptor->PortNames = (const char **)port_names; /* Parameters for Rate */ port_descriptors[RATESHIFTER_RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RATESHIFTER_RATE] = D_("Rate"); port_range_hints[RATESHIFTER_RATE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[RATESHIFTER_RATE].LowerBound = -4; port_range_hints[RATESHIFTER_RATE].UpperBound = 4; /* Parameters for Input */ port_descriptors[RATESHIFTER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[RATESHIFTER_INPUT] = D_("Input"); port_range_hints[RATESHIFTER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[RATESHIFTER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[RATESHIFTER_OUTPUT] = D_("Output"); port_range_hints[RATESHIFTER_OUTPUT].HintDescriptor = 0; rateShifterDescriptor->activate = activateRateShifter; rateShifterDescriptor->cleanup = cleanupRateShifter; rateShifterDescriptor->connect_port = connectPortRateShifter; rateShifterDescriptor->deactivate = NULL; rateShifterDescriptor->instantiate = instantiateRateShifter; rateShifterDescriptor->run = runRateShifter; rateShifterDescriptor->run_adding = runAddingRateShifter; rateShifterDescriptor->set_run_adding_gain = setRunAddingGainRateShifter; } } void __attribute__((destructor)) swh_fini() { if (rateShifterDescriptor) { free((LADSPA_PortDescriptor *)rateShifterDescriptor->PortDescriptors); free((char **)rateShifterDescriptor->PortNames); free((LADSPA_PortRangeHint *)rateShifterDescriptor->PortRangeHints); free(rateShifterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/retro_flange_1208.c000066400000000000000000000447541247673406200226050ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "retro_flange_1208.xml" #include "ladspa-util.h" #define BASE_BUFFER 0.001 // Base buffer length (s) inline LADSPA_Data sat(LADSPA_Data x, float q, float dist) { if (x == q) { return 1.0f / dist + q / (1.0f - f_exp(dist * q)); } return ((x - q) / (1.0f - f_exp(-dist * (x - q))) + q / (1.0f - f_exp(dist * q))); } #define RETROFLANGE_DELAY_DEPTH_AVG 0 #define RETROFLANGE_LAW_FREQ 1 #define RETROFLANGE_INPUT 2 #define RETROFLANGE_OUTPUT 3 static LADSPA_Descriptor *retroFlangeDescriptor = NULL; typedef struct { LADSPA_Data *delay_depth_avg; LADSPA_Data *law_freq; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; long buffer_size; long count; LADSPA_Data *delay_line; int delay_line_length; int delay_pos; LADSPA_Data last_in; int last_law_p; int last_phase; int max_law_p; float next_law_peak; int next_law_pos; float phase; float prev_law_peak; int prev_law_pos; long sample_rate; LADSPA_Data z0; LADSPA_Data z1; LADSPA_Data z2; LADSPA_Data run_adding_gain; } RetroFlange; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return retroFlangeDescriptor; default: return NULL; } } static void activateRetroFlange(LADSPA_Handle instance) { RetroFlange *plugin_data = (RetroFlange *)instance; LADSPA_Data *buffer = plugin_data->buffer; long buffer_size = plugin_data->buffer_size; long count = plugin_data->count; LADSPA_Data *delay_line = plugin_data->delay_line; int delay_line_length = plugin_data->delay_line_length; int delay_pos = plugin_data->delay_pos; LADSPA_Data last_in = plugin_data->last_in; int last_law_p = plugin_data->last_law_p; int last_phase = plugin_data->last_phase; int max_law_p = plugin_data->max_law_p; float next_law_peak = plugin_data->next_law_peak; int next_law_pos = plugin_data->next_law_pos; float phase = plugin_data->phase; float prev_law_peak = plugin_data->prev_law_peak; int prev_law_pos = plugin_data->prev_law_pos; long sample_rate = plugin_data->sample_rate; LADSPA_Data z0 = plugin_data->z0; LADSPA_Data z1 = plugin_data->z1; LADSPA_Data z2 = plugin_data->z2; #line 57 "retro_flange_1208.xml" memset(delay_line, 0, sizeof(float) * delay_line_length); memset(buffer, 0, sizeof(LADSPA_Data) * buffer_size); z0 = 0.0f; z1 = 0.0f; z2 = 0.0f; prev_law_peak = 0.0f; next_law_peak = 1.0f; prev_law_pos = 0; next_law_pos = 10; plugin_data->buffer = buffer; plugin_data->buffer_size = buffer_size; plugin_data->count = count; plugin_data->delay_line = delay_line; plugin_data->delay_line_length = delay_line_length; plugin_data->delay_pos = delay_pos; plugin_data->last_in = last_in; plugin_data->last_law_p = last_law_p; plugin_data->last_phase = last_phase; plugin_data->max_law_p = max_law_p; plugin_data->next_law_peak = next_law_peak; plugin_data->next_law_pos = next_law_pos; plugin_data->phase = phase; plugin_data->prev_law_peak = prev_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->sample_rate = sample_rate; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; } static void cleanupRetroFlange(LADSPA_Handle instance) { #line 70 "retro_flange_1208.xml" RetroFlange *plugin_data = (RetroFlange *)instance; free(plugin_data->delay_line); free(plugin_data->buffer); free(instance); } static void connectPortRetroFlange( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { RetroFlange *plugin; plugin = (RetroFlange *)instance; switch (port) { case RETROFLANGE_DELAY_DEPTH_AVG: plugin->delay_depth_avg = data; break; case RETROFLANGE_LAW_FREQ: plugin->law_freq = data; break; case RETROFLANGE_INPUT: plugin->input = data; break; case RETROFLANGE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateRetroFlange( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { RetroFlange *plugin_data = (RetroFlange *)malloc(sizeof(RetroFlange)); LADSPA_Data *buffer = NULL; long buffer_size; long count; LADSPA_Data *delay_line = NULL; int delay_line_length; int delay_pos; LADSPA_Data last_in; int last_law_p; int last_phase; int max_law_p; float next_law_peak; int next_law_pos; float phase; float prev_law_peak; int prev_law_pos; long sample_rate; LADSPA_Data z0; LADSPA_Data z1; LADSPA_Data z2; #line 32 "retro_flange_1208.xml" sample_rate = s_rate; buffer_size = BASE_BUFFER * s_rate; buffer = calloc(buffer_size, sizeof(LADSPA_Data)); phase = 0; last_phase = 0; last_in = 0.0f; max_law_p = s_rate*2; last_law_p = -1; delay_line_length = sample_rate * 0.01f; delay_line = calloc(sizeof(float), delay_line_length); delay_pos = 0; count = 0; prev_law_peak = 0.0f; next_law_peak = 1.0f; prev_law_pos = 0; next_law_pos = 10; z0 = 0.0f; z1 = 0.0f; z2 = 0.0f; plugin_data->buffer = buffer; plugin_data->buffer_size = buffer_size; plugin_data->count = count; plugin_data->delay_line = delay_line; plugin_data->delay_line_length = delay_line_length; plugin_data->delay_pos = delay_pos; plugin_data->last_in = last_in; plugin_data->last_law_p = last_law_p; plugin_data->last_phase = last_phase; plugin_data->max_law_p = max_law_p; plugin_data->next_law_peak = next_law_peak; plugin_data->next_law_pos = next_law_pos; plugin_data->phase = phase; plugin_data->prev_law_peak = prev_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->sample_rate = sample_rate; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runRetroFlange(LADSPA_Handle instance, unsigned long sample_count) { RetroFlange *plugin_data = (RetroFlange *)instance; /* Average stall (ms) (float value) */ const LADSPA_Data delay_depth_avg = *(plugin_data->delay_depth_avg); /* Flange frequency (Hz) (float value) */ const LADSPA_Data law_freq = *(plugin_data->law_freq); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; long buffer_size = plugin_data->buffer_size; long count = plugin_data->count; LADSPA_Data * delay_line = plugin_data->delay_line; int delay_line_length = plugin_data->delay_line_length; int delay_pos = plugin_data->delay_pos; LADSPA_Data last_in = plugin_data->last_in; int last_law_p = plugin_data->last_law_p; int last_phase = plugin_data->last_phase; int max_law_p = plugin_data->max_law_p; float next_law_peak = plugin_data->next_law_peak; int next_law_pos = plugin_data->next_law_pos; float phase = plugin_data->phase; float prev_law_peak = plugin_data->prev_law_peak; int prev_law_pos = plugin_data->prev_law_pos; long sample_rate = plugin_data->sample_rate; LADSPA_Data z0 = plugin_data->z0; LADSPA_Data z1 = plugin_data->z1; LADSPA_Data z2 = plugin_data->z2; #line 75 "retro_flange_1208.xml" long int pos; int law_p = f_trunc(LIMIT(sample_rate / f_clamp(law_freq, 0.0001f, 100.0f), 1, max_law_p)); float increment; float lin_int, lin_inc; int track; int fph; LADSPA_Data out = 0.0f; const float dda_c = f_clamp(delay_depth_avg, 0.0f, 10.0f); int dl_used = (dda_c * sample_rate) / 1000; float inc_base = 1000.0f * (float)BASE_BUFFER; const float delay_depth = 2.0f * dda_c; float n_ph, p_ph, law; for (pos = 0; pos < sample_count; pos++) { // Write into the delay line delay_line[delay_pos] = input[pos]; z0 = delay_line[MOD(delay_pos - dl_used, delay_line_length)] + 0.12919609397f*z1 - 0.31050847f*z2; out = sat(z0*0.20466966f + z1*0.40933933f + z2*0.40933933f, -0.23f, 3.3f); z2 = z1; z1 = z0; delay_pos = (delay_pos + 1) % delay_line_length; if ((count++ % law_p) == 0) { // Value for amplitude of law peak next_law_peak = (float)rand() / (float)RAND_MAX; next_law_pos = count + law_p; } else if (count % law_p == law_p / 2) { // Value for amplitude of law peak prev_law_peak = (float)rand() / (float)RAND_MAX; prev_law_pos = count + law_p; } n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; p_ph = n_ph + 0.5f; if (p_ph > 1.0f) { p_ph -= 1.0f; } law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + f_sin_sq(3.1415926f*n_ph)*next_law_peak; increment = inc_base / (delay_depth * law + 0.2); fph = f_trunc(phase); last_phase = fph; lin_int = phase - (float)fph; out += LIN_INTERP(lin_int, buffer[(fph+1) % buffer_size], buffer[(fph+2) % buffer_size]); phase += increment; lin_inc = 1.0f / (floor(phase) - last_phase + 1); lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; lin_int = 0.0f; for (track = last_phase; track < phase; track++) { lin_int += lin_inc; buffer[track % buffer_size] = LIN_INTERP(lin_int, last_in, input[pos]); } last_in = input[pos]; buffer_write(output[pos], out * 0.707f); if (phase >= buffer_size) { phase -= buffer_size; } } // Store current phase in instance plugin_data->phase = phase; plugin_data->prev_law_peak = prev_law_peak; plugin_data->next_law_peak = next_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->next_law_pos = next_law_pos; plugin_data->last_phase = last_phase; plugin_data->last_in = last_in; plugin_data->count = count; plugin_data->last_law_p = last_law_p; plugin_data->delay_pos = delay_pos; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainRetroFlange(LADSPA_Handle instance, LADSPA_Data gain) { ((RetroFlange *)instance)->run_adding_gain = gain; } static void runAddingRetroFlange(LADSPA_Handle instance, unsigned long sample_count) { RetroFlange *plugin_data = (RetroFlange *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Average stall (ms) (float value) */ const LADSPA_Data delay_depth_avg = *(plugin_data->delay_depth_avg); /* Flange frequency (Hz) (float value) */ const LADSPA_Data law_freq = *(plugin_data->law_freq); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; long buffer_size = plugin_data->buffer_size; long count = plugin_data->count; LADSPA_Data * delay_line = plugin_data->delay_line; int delay_line_length = plugin_data->delay_line_length; int delay_pos = plugin_data->delay_pos; LADSPA_Data last_in = plugin_data->last_in; int last_law_p = plugin_data->last_law_p; int last_phase = plugin_data->last_phase; int max_law_p = plugin_data->max_law_p; float next_law_peak = plugin_data->next_law_peak; int next_law_pos = plugin_data->next_law_pos; float phase = plugin_data->phase; float prev_law_peak = plugin_data->prev_law_peak; int prev_law_pos = plugin_data->prev_law_pos; long sample_rate = plugin_data->sample_rate; LADSPA_Data z0 = plugin_data->z0; LADSPA_Data z1 = plugin_data->z1; LADSPA_Data z2 = plugin_data->z2; #line 75 "retro_flange_1208.xml" long int pos; int law_p = f_trunc(LIMIT(sample_rate / f_clamp(law_freq, 0.0001f, 100.0f), 1, max_law_p)); float increment; float lin_int, lin_inc; int track; int fph; LADSPA_Data out = 0.0f; const float dda_c = f_clamp(delay_depth_avg, 0.0f, 10.0f); int dl_used = (dda_c * sample_rate) / 1000; float inc_base = 1000.0f * (float)BASE_BUFFER; const float delay_depth = 2.0f * dda_c; float n_ph, p_ph, law; for (pos = 0; pos < sample_count; pos++) { // Write into the delay line delay_line[delay_pos] = input[pos]; z0 = delay_line[MOD(delay_pos - dl_used, delay_line_length)] + 0.12919609397f*z1 - 0.31050847f*z2; out = sat(z0*0.20466966f + z1*0.40933933f + z2*0.40933933f, -0.23f, 3.3f); z2 = z1; z1 = z0; delay_pos = (delay_pos + 1) % delay_line_length; if ((count++ % law_p) == 0) { // Value for amplitude of law peak next_law_peak = (float)rand() / (float)RAND_MAX; next_law_pos = count + law_p; } else if (count % law_p == law_p / 2) { // Value for amplitude of law peak prev_law_peak = (float)rand() / (float)RAND_MAX; prev_law_pos = count + law_p; } n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p; p_ph = n_ph + 0.5f; if (p_ph > 1.0f) { p_ph -= 1.0f; } law = f_sin_sq(3.1415926f*p_ph)*prev_law_peak + f_sin_sq(3.1415926f*n_ph)*next_law_peak; increment = inc_base / (delay_depth * law + 0.2); fph = f_trunc(phase); last_phase = fph; lin_int = phase - (float)fph; out += LIN_INTERP(lin_int, buffer[(fph+1) % buffer_size], buffer[(fph+2) % buffer_size]); phase += increment; lin_inc = 1.0f / (floor(phase) - last_phase + 1); lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; lin_int = 0.0f; for (track = last_phase; track < phase; track++) { lin_int += lin_inc; buffer[track % buffer_size] = LIN_INTERP(lin_int, last_in, input[pos]); } last_in = input[pos]; buffer_write(output[pos], out * 0.707f); if (phase >= buffer_size) { phase -= buffer_size; } } // Store current phase in instance plugin_data->phase = phase; plugin_data->prev_law_peak = prev_law_peak; plugin_data->next_law_peak = next_law_peak; plugin_data->prev_law_pos = prev_law_pos; plugin_data->next_law_pos = next_law_pos; plugin_data->last_phase = last_phase; plugin_data->last_in = last_in; plugin_data->count = count; plugin_data->last_law_p = last_law_p; plugin_data->delay_pos = delay_pos; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif retroFlangeDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (retroFlangeDescriptor) { retroFlangeDescriptor->UniqueID = 1208; retroFlangeDescriptor->Label = "retroFlange"; retroFlangeDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; retroFlangeDescriptor->Name = D_("Retro Flanger"); retroFlangeDescriptor->Maker = "Steve Harris "; retroFlangeDescriptor->Copyright = "GPL"; retroFlangeDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); retroFlangeDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); retroFlangeDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); retroFlangeDescriptor->PortNames = (const char **)port_names; /* Parameters for Average stall (ms) */ port_descriptors[RETROFLANGE_DELAY_DEPTH_AVG] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RETROFLANGE_DELAY_DEPTH_AVG] = D_("Average stall (ms)"); port_range_hints[RETROFLANGE_DELAY_DEPTH_AVG].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[RETROFLANGE_DELAY_DEPTH_AVG].LowerBound = 0; port_range_hints[RETROFLANGE_DELAY_DEPTH_AVG].UpperBound = 10; /* Parameters for Flange frequency (Hz) */ port_descriptors[RETROFLANGE_LAW_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RETROFLANGE_LAW_FREQ] = D_("Flange frequency (Hz)"); port_range_hints[RETROFLANGE_LAW_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[RETROFLANGE_LAW_FREQ].LowerBound = 0.5; port_range_hints[RETROFLANGE_LAW_FREQ].UpperBound = 8; /* Parameters for Input */ port_descriptors[RETROFLANGE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[RETROFLANGE_INPUT] = D_("Input"); port_range_hints[RETROFLANGE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[RETROFLANGE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[RETROFLANGE_OUTPUT] = D_("Output"); port_range_hints[RETROFLANGE_OUTPUT].HintDescriptor = 0; retroFlangeDescriptor->activate = activateRetroFlange; retroFlangeDescriptor->cleanup = cleanupRetroFlange; retroFlangeDescriptor->connect_port = connectPortRetroFlange; retroFlangeDescriptor->deactivate = NULL; retroFlangeDescriptor->instantiate = instantiateRetroFlange; retroFlangeDescriptor->run = runRetroFlange; retroFlangeDescriptor->run_adding = runAddingRetroFlange; retroFlangeDescriptor->set_run_adding_gain = setRunAddingGainRetroFlange; } } void __attribute__((destructor)) swh_fini() { if (retroFlangeDescriptor) { free((LADSPA_PortDescriptor *)retroFlangeDescriptor->PortDescriptors); free((char **)retroFlangeDescriptor->PortNames); free((LADSPA_PortRangeHint *)retroFlangeDescriptor->PortRangeHints); free(retroFlangeDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/revdelay_1605.c000066400000000000000000000401611247673406200217360ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #include "ladspa-util.h" #include #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define CALC_DELAY(delaytime) \ (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_size + 1))) #define REVDELAY_IN 0 #define REVDELAY_OUT 1 #define REVDELAY_DELAY_TIME 2 #define REVDELAY_DRY_LEVEL 3 #define REVDELAY_WET_LEVEL 4 #define REVDELAY_FEEDBACK 5 #define REVDELAY_XFADE_SAMP 6 static LADSPA_Descriptor *revdelayDescriptor = NULL; typedef struct { LADSPA_Data *in; LADSPA_Data *out; LADSPA_Data *delay_time; LADSPA_Data *dry_level; LADSPA_Data *wet_level; LADSPA_Data *feedback; LADSPA_Data *xfade_samp; LADSPA_Data *buffer; unsigned int buffer_size; LADSPA_Data delay_samples; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; LADSPA_Data run_adding_gain; } Revdelay; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return revdelayDescriptor; default: return NULL; } } static void activateRevdelay(LADSPA_Handle instance) { Revdelay *plugin_data = (Revdelay *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; unsigned int size; size = sample_rate * 5 * 2; /* 5 second maximum */ /* calloc sets the buffer to zero. */ buffer = calloc(size, sizeof(LADSPA_Data)); buffer_size = size; write_phase = 0; delay_samples = 0; plugin_data->buffer = buffer; plugin_data->buffer_size = buffer_size; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; } static void cleanupRevdelay(LADSPA_Handle instance) { Revdelay *plugin_data = (Revdelay *)instance; free(plugin_data->buffer); free(instance); } static void connectPortRevdelay( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Revdelay *plugin; plugin = (Revdelay *)instance; switch (port) { case REVDELAY_IN: plugin->in = data; break; case REVDELAY_OUT: plugin->out = data; break; case REVDELAY_DELAY_TIME: plugin->delay_time = data; break; case REVDELAY_DRY_LEVEL: plugin->dry_level = data; break; case REVDELAY_WET_LEVEL: plugin->wet_level = data; break; case REVDELAY_FEEDBACK: plugin->feedback = data; break; case REVDELAY_XFADE_SAMP: plugin->xfade_samp = data; break; } } static LADSPA_Handle instantiateRevdelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Revdelay *plugin_data = (Revdelay *)malloc(sizeof(Revdelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_size; LADSPA_Data delay_samples; LADSPA_Data last_delay_time; unsigned int sample_rate; long write_phase; sample_rate = s_rate; buffer_size = 0; delay_samples = 0; last_delay_time = 0; write_phase = 0; plugin_data->buffer = buffer; plugin_data->buffer_size = buffer_size; plugin_data->delay_samples = delay_samples; plugin_data->last_delay_time = last_delay_time; plugin_data->sample_rate = sample_rate; plugin_data->write_phase = write_phase; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runRevdelay(LADSPA_Handle instance, unsigned long sample_count) { Revdelay *plugin_data = (Revdelay *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Dry Level (dB) (float value) */ const LADSPA_Data dry_level = *(plugin_data->dry_level); /* Wet Level (dB) (float value) */ const LADSPA_Data wet_level = *(plugin_data->wet_level); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Crossfade samples (float value) */ const LADSPA_Data xfade_samp = *(plugin_data->xfade_samp); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; int i; unsigned long delay2; float dry = DB_CO(dry_level); float wet = DB_CO(wet_level); float fadescale; unsigned long xfadesamp = xfade_samp; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long idelay_samples = (long)delay_samples; delay2 = idelay_samples * 2; if (xfadesamp > idelay_samples) { /* force it to half */ xfadesamp = idelay_samples / 2; } for (i=0; i (idelay_samples - xfadesamp)) { fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfadesamp); } else { fadescale = 1.0; } buffer[write_phase] = fadescale * (insamp + (feedback * read)); buffer[write_phase] = flush_to_zero(buffer[write_phase]); buffer_write(out[i], read); write_phase = (write_phase + 1) % delay2; } } else { float next_delay_samples = CALC_DELAY (delay_time); float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; for (i=0; i (idelay_samples - xfade_samp)) { fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfade_samp); } else { fadescale = 1.0; } buffer[write_phase] = fadescale * (insamp + (feedback * read)); buffer[write_phase] = flush_to_zero(buffer[write_phase]); buffer_write(out[i], read); } plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainRevdelay(LADSPA_Handle instance, LADSPA_Data gain) { ((Revdelay *)instance)->run_adding_gain = gain; } static void runAddingRevdelay(LADSPA_Handle instance, unsigned long sample_count) { Revdelay *plugin_data = (Revdelay *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const in = plugin_data->in; /* Output (array of floats of length sample_count) */ LADSPA_Data * const out = plugin_data->out; /* Delay Time (s) (float value) */ const LADSPA_Data delay_time = *(plugin_data->delay_time); /* Dry Level (dB) (float value) */ const LADSPA_Data dry_level = *(plugin_data->dry_level); /* Wet Level (dB) (float value) */ const LADSPA_Data wet_level = *(plugin_data->wet_level); /* Feedback (float value) */ const LADSPA_Data feedback = *(plugin_data->feedback); /* Crossfade samples (float value) */ const LADSPA_Data xfade_samp = *(plugin_data->xfade_samp); LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data delay_samples = plugin_data->delay_samples; LADSPA_Data last_delay_time = plugin_data->last_delay_time; unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; int i; unsigned long delay2; float dry = DB_CO(dry_level); float wet = DB_CO(wet_level); float fadescale; unsigned long xfadesamp = xfade_samp; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time); } if (delay_time == last_delay_time) { long idelay_samples = (long)delay_samples; delay2 = idelay_samples * 2; if (xfadesamp > idelay_samples) { /* force it to half */ xfadesamp = idelay_samples / 2; } for (i=0; i (idelay_samples - xfadesamp)) { fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfadesamp); } else { fadescale = 1.0; } buffer[write_phase] = fadescale * (insamp + (feedback * read)); buffer[write_phase] = flush_to_zero(buffer[write_phase]); buffer_write(out[i], read); write_phase = (write_phase + 1) % delay2; } } else { float next_delay_samples = CALC_DELAY (delay_time); float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count; for (i=0; i (idelay_samples - xfade_samp)) { fadescale = (idelay_samples - (write_phase % idelay_samples)) / (1.0 * xfade_samp); } else { fadescale = 1.0; } buffer[write_phase] = fadescale * (insamp + (feedback * read)); buffer[write_phase] = flush_to_zero(buffer[write_phase]); buffer_write(out[i], read); } plugin_data->last_delay_time = delay_time; plugin_data->delay_samples = delay_samples; } plugin_data->write_phase = write_phase; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif revdelayDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (revdelayDescriptor) { revdelayDescriptor->UniqueID = 1605; revdelayDescriptor->Label = "revdelay"; revdelayDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; revdelayDescriptor->Name = D_("Reverse Delay (5s max)"); revdelayDescriptor->Maker = "Jesse Chappell "; revdelayDescriptor->Copyright = "GPL"; revdelayDescriptor->PortCount = 7; port_descriptors = (LADSPA_PortDescriptor *)calloc(7, sizeof(LADSPA_PortDescriptor)); revdelayDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(7, sizeof(LADSPA_PortRangeHint)); revdelayDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(7, sizeof(char*)); revdelayDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[REVDELAY_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[REVDELAY_IN] = D_("Input"); port_range_hints[REVDELAY_IN].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[REVDELAY_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[REVDELAY_OUT] = D_("Output"); port_range_hints[REVDELAY_OUT].HintDescriptor = 0; /* Parameters for Delay Time (s) */ port_descriptors[REVDELAY_DELAY_TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[REVDELAY_DELAY_TIME] = D_("Delay Time (s)"); port_range_hints[REVDELAY_DELAY_TIME].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[REVDELAY_DELAY_TIME].LowerBound = 0; port_range_hints[REVDELAY_DELAY_TIME].UpperBound = 5.0; /* Parameters for Dry Level (dB) */ port_descriptors[REVDELAY_DRY_LEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[REVDELAY_DRY_LEVEL] = D_("Dry Level (dB)"); port_range_hints[REVDELAY_DRY_LEVEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[REVDELAY_DRY_LEVEL].LowerBound = -70; port_range_hints[REVDELAY_DRY_LEVEL].UpperBound = 0; /* Parameters for Wet Level (dB) */ port_descriptors[REVDELAY_WET_LEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[REVDELAY_WET_LEVEL] = D_("Wet Level (dB)"); port_range_hints[REVDELAY_WET_LEVEL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[REVDELAY_WET_LEVEL].LowerBound = -70; port_range_hints[REVDELAY_WET_LEVEL].UpperBound = 0; /* Parameters for Feedback */ port_descriptors[REVDELAY_FEEDBACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[REVDELAY_FEEDBACK] = D_("Feedback"); port_range_hints[REVDELAY_FEEDBACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[REVDELAY_FEEDBACK].LowerBound = 0; port_range_hints[REVDELAY_FEEDBACK].UpperBound = 1; /* Parameters for Crossfade samples */ port_descriptors[REVDELAY_XFADE_SAMP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[REVDELAY_XFADE_SAMP] = D_("Crossfade samples"); port_range_hints[REVDELAY_XFADE_SAMP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_INTEGER; port_range_hints[REVDELAY_XFADE_SAMP].LowerBound = 0; port_range_hints[REVDELAY_XFADE_SAMP].UpperBound = 5000; revdelayDescriptor->activate = activateRevdelay; revdelayDescriptor->cleanup = cleanupRevdelay; revdelayDescriptor->connect_port = connectPortRevdelay; revdelayDescriptor->deactivate = NULL; revdelayDescriptor->instantiate = instantiateRevdelay; revdelayDescriptor->run = runRevdelay; revdelayDescriptor->run_adding = runAddingRevdelay; revdelayDescriptor->set_run_adding_gain = setRunAddingGainRevdelay; } } void __attribute__((destructor)) swh_fini() { if (revdelayDescriptor) { free((LADSPA_PortDescriptor *)revdelayDescriptor->PortDescriptors); free((char **)revdelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)revdelayDescriptor->PortRangeHints); free(revdelayDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/ringmod_1188.c000066400000000000000000000457551247673406200216060ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "ringmod_1188.xml" #include "ladspa-util.h" int refcount; LADSPA_Data *sin_tbl, *tri_tbl, *saw_tbl, *squ_tbl; long sample_rate; #define RINGMOD_2I1O_DEPTH 0 #define RINGMOD_2I1O_INPUT 1 #define RINGMOD_2I1O_MODULATOR 2 #define RINGMOD_2I1O_OUTPUT 3 #define RINGMOD_1I1O1L_DEPTHP 0 #define RINGMOD_1I1O1L_FREQ 1 #define RINGMOD_1I1O1L_SIN 2 #define RINGMOD_1I1O1L_TRI 3 #define RINGMOD_1I1O1L_SAW 4 #define RINGMOD_1I1O1L_SQU 5 #define RINGMOD_1I1O1L_INPUT 6 #define RINGMOD_1I1O1L_OUTPUT 7 static LADSPA_Descriptor *ringmod_2i1oDescriptor = NULL; typedef struct { LADSPA_Data *depth; LADSPA_Data *input; LADSPA_Data *modulator; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Ringmod_2i1o; static LADSPA_Descriptor *ringmod_1i1o1lDescriptor = NULL; typedef struct { LADSPA_Data *depthp; LADSPA_Data *freq; LADSPA_Data *sin; LADSPA_Data *tri; LADSPA_Data *saw; LADSPA_Data *squ; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data offset; LADSPA_Data run_adding_gain; } Ringmod_1i1o1l; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return ringmod_2i1oDescriptor; case 1: return ringmod_1i1o1lDescriptor; default: return NULL; } } static void cleanupRingmod_2i1o(LADSPA_Handle instance) { free(instance); } static void connectPortRingmod_2i1o( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Ringmod_2i1o *plugin; plugin = (Ringmod_2i1o *)instance; switch (port) { case RINGMOD_2I1O_DEPTH: plugin->depth = data; break; case RINGMOD_2I1O_INPUT: plugin->input = data; break; case RINGMOD_2I1O_MODULATOR: plugin->modulator = data; break; case RINGMOD_2I1O_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateRingmod_2i1o( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)malloc(sizeof(Ringmod_2i1o)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runRingmod_2i1o(LADSPA_Handle instance, unsigned long sample_count) { Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)instance; /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data depth = *(plugin_data->depth); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Modulator (array of floats of length sample_count) */ const LADSPA_Data * const modulator = plugin_data->modulator; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 24 "ringmod_1188.xml" unsigned long pos; float tmpa = depth * 0.5f; float tmpb = 2.0f - depth; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos] * (tmpa * modulator[pos] + tmpb)); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainRingmod_2i1o(LADSPA_Handle instance, LADSPA_Data gain) { ((Ringmod_2i1o *)instance)->run_adding_gain = gain; } static void runAddingRingmod_2i1o(LADSPA_Handle instance, unsigned long sample_count) { Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data depth = *(plugin_data->depth); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Modulator (array of floats of length sample_count) */ const LADSPA_Data * const modulator = plugin_data->modulator; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 24 "ringmod_1188.xml" unsigned long pos; float tmpa = depth * 0.5f; float tmpb = 2.0f - depth; for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], input[pos] * (tmpa * modulator[pos] + tmpb)); } } static void activateRingmod_1i1o1l(LADSPA_Handle instance) { Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; LADSPA_Data offset = plugin_data->offset; #line 89 "ringmod_1188.xml" offset = 0; plugin_data->offset = offset; } static void cleanupRingmod_1i1o1l(LADSPA_Handle instance) { #line 93 "ringmod_1188.xml" if (--refcount == 0) { free(sin_tbl); free(tri_tbl); free(squ_tbl); free(saw_tbl); } free(instance); } static void connectPortRingmod_1i1o1l( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Ringmod_1i1o1l *plugin; plugin = (Ringmod_1i1o1l *)instance; switch (port) { case RINGMOD_1I1O1L_DEPTHP: plugin->depthp = data; break; case RINGMOD_1I1O1L_FREQ: plugin->freq = data; break; case RINGMOD_1I1O1L_SIN: plugin->sin = data; break; case RINGMOD_1I1O1L_TRI: plugin->tri = data; break; case RINGMOD_1I1O1L_SAW: plugin->saw = data; break; case RINGMOD_1I1O1L_SQU: plugin->squ = data; break; case RINGMOD_1I1O1L_INPUT: plugin->input = data; break; case RINGMOD_1I1O1L_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateRingmod_1i1o1l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)malloc(sizeof(Ringmod_1i1o1l)); LADSPA_Data offset; #line 59 "ringmod_1188.xml" long i; sample_rate = s_rate; if (refcount++ == 0) { sin_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); for (i = 0; i < sample_rate; i++) { sin_tbl[i] = sin(i * 2 * M_PI / sample_rate); } tri_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); for (i = 0; i < sample_rate; i++) { tri_tbl[i] = acos(cos(i * 2 * M_PI / sample_rate)) / M_PI * 2 - 1; } squ_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); for (i = 0; i < sample_rate; i++) { squ_tbl[i] = (i < sample_rate/2) ? 1 : -1; } saw_tbl = malloc(sizeof(LADSPA_Data) * sample_rate); for (i = 0; i < sample_rate; i++) { saw_tbl[i] = ((2.0 * i) - (float)sample_rate) / (float)sample_rate; } } offset = 0; plugin_data->offset = offset; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runRingmod_1i1o1l(LADSPA_Handle instance, unsigned long sample_count) { Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data depthp = *(plugin_data->depthp); /* Frequency (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Sine level (float value) */ const LADSPA_Data sin = *(plugin_data->sin); /* Triangle level (float value) */ const LADSPA_Data tri = *(plugin_data->tri); /* Sawtooth level (float value) */ const LADSPA_Data saw = *(plugin_data->saw); /* Square level (float value) */ const LADSPA_Data squ = *(plugin_data->squ); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data offset = plugin_data->offset; #line 24 "ringmod_1188.xml" LADSPA_Data scale = fabs(sin) + fabs(tri) + fabs(saw) + fabs(squ); int o; unsigned long pos; // Rescale to more useful value const float depth = depthp * 0.5f; if (scale == 0.0) { scale = 1.0; } for (pos = 0; pos < sample_count; pos++) { o = f_round(offset); buffer_write(output[pos], input[pos] * (depth * (((sin / scale) * sin_tbl[o]) + ((tri / scale) * tri_tbl[o]) + ((saw / scale) * saw_tbl[o]) + ((squ / scale) * squ_tbl[o])) + (1.0f - depth))); offset += freq; if (offset > sample_rate) { offset -= sample_rate; } } plugin_data->offset = offset; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainRingmod_1i1o1l(LADSPA_Handle instance, LADSPA_Data gain) { ((Ringmod_1i1o1l *)instance)->run_adding_gain = gain; } static void runAddingRingmod_1i1o1l(LADSPA_Handle instance, unsigned long sample_count) { Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Modulation depth (0=none, 1=AM, 2=RM) (float value) */ const LADSPA_Data depthp = *(plugin_data->depthp); /* Frequency (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Sine level (float value) */ const LADSPA_Data sin = *(plugin_data->sin); /* Triangle level (float value) */ const LADSPA_Data tri = *(plugin_data->tri); /* Sawtooth level (float value) */ const LADSPA_Data saw = *(plugin_data->saw); /* Square level (float value) */ const LADSPA_Data squ = *(plugin_data->squ); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data offset = plugin_data->offset; #line 24 "ringmod_1188.xml" LADSPA_Data scale = fabs(sin) + fabs(tri) + fabs(saw) + fabs(squ); int o; unsigned long pos; // Rescale to more useful value const float depth = depthp * 0.5f; if (scale == 0.0) { scale = 1.0; } for (pos = 0; pos < sample_count; pos++) { o = f_round(offset); buffer_write(output[pos], input[pos] * (depth * (((sin / scale) * sin_tbl[o]) + ((tri / scale) * tri_tbl[o]) + ((saw / scale) * saw_tbl[o]) + ((squ / scale) * squ_tbl[o])) + (1.0f - depth))); offset += freq; if (offset > sample_rate) { offset -= sample_rate; } } plugin_data->offset = offset; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif ringmod_2i1oDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (ringmod_2i1oDescriptor) { ringmod_2i1oDescriptor->UniqueID = 1188; ringmod_2i1oDescriptor->Label = "ringmod_2i1o"; ringmod_2i1oDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; ringmod_2i1oDescriptor->Name = D_("Ringmod with two inputs"); ringmod_2i1oDescriptor->Maker = "Steve Harris "; ringmod_2i1oDescriptor->Copyright = "GPL"; ringmod_2i1oDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); ringmod_2i1oDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); ringmod_2i1oDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); ringmod_2i1oDescriptor->PortNames = (const char **)port_names; /* Parameters for Modulation depth (0=none, 1=AM, 2=RM) */ port_descriptors[RINGMOD_2I1O_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_2I1O_DEPTH] = D_("Modulation depth (0=none, 1=AM, 2=RM)"); port_range_hints[RINGMOD_2I1O_DEPTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[RINGMOD_2I1O_DEPTH].LowerBound = 0; port_range_hints[RINGMOD_2I1O_DEPTH].UpperBound = 2; /* Parameters for Input */ port_descriptors[RINGMOD_2I1O_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[RINGMOD_2I1O_INPUT] = D_("Input"); port_range_hints[RINGMOD_2I1O_INPUT].HintDescriptor = 0; /* Parameters for Modulator */ port_descriptors[RINGMOD_2I1O_MODULATOR] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[RINGMOD_2I1O_MODULATOR] = D_("Modulator"); port_range_hints[RINGMOD_2I1O_MODULATOR].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[RINGMOD_2I1O_MODULATOR].LowerBound = -1; port_range_hints[RINGMOD_2I1O_MODULATOR].UpperBound = +1; /* Parameters for Output */ port_descriptors[RINGMOD_2I1O_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[RINGMOD_2I1O_OUTPUT] = D_("Output"); port_range_hints[RINGMOD_2I1O_OUTPUT].HintDescriptor = 0; ringmod_2i1oDescriptor->activate = NULL; ringmod_2i1oDescriptor->cleanup = cleanupRingmod_2i1o; ringmod_2i1oDescriptor->connect_port = connectPortRingmod_2i1o; ringmod_2i1oDescriptor->deactivate = NULL; ringmod_2i1oDescriptor->instantiate = instantiateRingmod_2i1o; ringmod_2i1oDescriptor->run = runRingmod_2i1o; ringmod_2i1oDescriptor->run_adding = runAddingRingmod_2i1o; ringmod_2i1oDescriptor->set_run_adding_gain = setRunAddingGainRingmod_2i1o; } ringmod_1i1o1lDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (ringmod_1i1o1lDescriptor) { ringmod_1i1o1lDescriptor->UniqueID = 1189; ringmod_1i1o1lDescriptor->Label = "ringmod_1i1o1l"; ringmod_1i1o1lDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; ringmod_1i1o1lDescriptor->Name = D_("Ringmod with LFO"); ringmod_1i1o1lDescriptor->Maker = "Steve Harris "; ringmod_1i1o1lDescriptor->Copyright = "GPL"; ringmod_1i1o1lDescriptor->PortCount = 8; port_descriptors = (LADSPA_PortDescriptor *)calloc(8, sizeof(LADSPA_PortDescriptor)); ringmod_1i1o1lDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(8, sizeof(LADSPA_PortRangeHint)); ringmod_1i1o1lDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(8, sizeof(char*)); ringmod_1i1o1lDescriptor->PortNames = (const char **)port_names; /* Parameters for Modulation depth (0=none, 1=AM, 2=RM) */ port_descriptors[RINGMOD_1I1O1L_DEPTHP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_1I1O1L_DEPTHP] = D_("Modulation depth (0=none, 1=AM, 2=RM)"); port_range_hints[RINGMOD_1I1O1L_DEPTHP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[RINGMOD_1I1O1L_DEPTHP].LowerBound = 0; port_range_hints[RINGMOD_1I1O1L_DEPTHP].UpperBound = 2; /* Parameters for Frequency (Hz) */ port_descriptors[RINGMOD_1I1O1L_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_1I1O1L_FREQ] = D_("Frequency (Hz)"); port_range_hints[RINGMOD_1I1O1L_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[RINGMOD_1I1O1L_FREQ].LowerBound = 1; port_range_hints[RINGMOD_1I1O1L_FREQ].UpperBound = 1000; /* Parameters for Sine level */ port_descriptors[RINGMOD_1I1O1L_SIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_1I1O1L_SIN] = D_("Sine level"); port_range_hints[RINGMOD_1I1O1L_SIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[RINGMOD_1I1O1L_SIN].LowerBound = -1; port_range_hints[RINGMOD_1I1O1L_SIN].UpperBound = +1; /* Parameters for Triangle level */ port_descriptors[RINGMOD_1I1O1L_TRI] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_1I1O1L_TRI] = D_("Triangle level"); port_range_hints[RINGMOD_1I1O1L_TRI].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[RINGMOD_1I1O1L_TRI].LowerBound = -1; port_range_hints[RINGMOD_1I1O1L_TRI].UpperBound = +1; /* Parameters for Sawtooth level */ port_descriptors[RINGMOD_1I1O1L_SAW] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_1I1O1L_SAW] = D_("Sawtooth level"); port_range_hints[RINGMOD_1I1O1L_SAW].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[RINGMOD_1I1O1L_SAW].LowerBound = -1; port_range_hints[RINGMOD_1I1O1L_SAW].UpperBound = +1; /* Parameters for Square level */ port_descriptors[RINGMOD_1I1O1L_SQU] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[RINGMOD_1I1O1L_SQU] = D_("Square level"); port_range_hints[RINGMOD_1I1O1L_SQU].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[RINGMOD_1I1O1L_SQU].LowerBound = -1; port_range_hints[RINGMOD_1I1O1L_SQU].UpperBound = +1; /* Parameters for Input */ port_descriptors[RINGMOD_1I1O1L_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[RINGMOD_1I1O1L_INPUT] = D_("Input"); port_range_hints[RINGMOD_1I1O1L_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[RINGMOD_1I1O1L_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[RINGMOD_1I1O1L_OUTPUT] = D_("Output"); port_range_hints[RINGMOD_1I1O1L_OUTPUT].HintDescriptor = 0; ringmod_1i1o1lDescriptor->activate = activateRingmod_1i1o1l; ringmod_1i1o1lDescriptor->cleanup = cleanupRingmod_1i1o1l; ringmod_1i1o1lDescriptor->connect_port = connectPortRingmod_1i1o1l; ringmod_1i1o1lDescriptor->deactivate = NULL; ringmod_1i1o1lDescriptor->instantiate = instantiateRingmod_1i1o1l; ringmod_1i1o1lDescriptor->run = runRingmod_1i1o1l; ringmod_1i1o1lDescriptor->run_adding = runAddingRingmod_1i1o1l; ringmod_1i1o1lDescriptor->set_run_adding_gain = setRunAddingGainRingmod_1i1o1l; } } void __attribute__((destructor)) swh_fini() { if (ringmod_2i1oDescriptor) { free((LADSPA_PortDescriptor *)ringmod_2i1oDescriptor->PortDescriptors); free((char **)ringmod_2i1oDescriptor->PortNames); free((LADSPA_PortRangeHint *)ringmod_2i1oDescriptor->PortRangeHints); free(ringmod_2i1oDescriptor); } if (ringmod_1i1o1lDescriptor) { free((LADSPA_PortDescriptor *)ringmod_1i1o1lDescriptor->PortDescriptors); free((char **)ringmod_1i1o1lDescriptor->PortNames); free((LADSPA_PortRangeHint *)ringmod_1i1o1lDescriptor->PortRangeHints); free(ringmod_1i1o1lDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/satan_maximiser_1408.c000066400000000000000000000235051247673406200233130ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "satan_maximiser_1408.xml" #include #include "ladspa-util.h" #define BUFFER_SIZE 16 #define BUFFER_MASK 15 #define SATANMAXIMISER_ENV_TIME_P 0 #define SATANMAXIMISER_KNEE_POINT 1 #define SATANMAXIMISER_INPUT 2 #define SATANMAXIMISER_OUTPUT 3 static LADSPA_Descriptor *satanMaximiserDescriptor = NULL; typedef struct { LADSPA_Data *env_time_p; LADSPA_Data *knee_point; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; unsigned int buffer_pos; float env; LADSPA_Data run_adding_gain; } SatanMaximiser; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return satanMaximiserDescriptor; default: return NULL; } } static void activateSatanMaximiser(LADSPA_Handle instance) { SatanMaximiser *plugin_data = (SatanMaximiser *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_pos = plugin_data->buffer_pos; float env = plugin_data->env; #line 33 "satan_maximiser_1408.xml" env = 0.0f; memset(buffer, 0, sizeof(LADSPA_Data) * BUFFER_SIZE); buffer_pos = 0; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->env = env; } static void cleanupSatanMaximiser(LADSPA_Handle instance) { #line 39 "satan_maximiser_1408.xml" SatanMaximiser *plugin_data = (SatanMaximiser *)instance; free(plugin_data->buffer); free(instance); } static void connectPortSatanMaximiser( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { SatanMaximiser *plugin; plugin = (SatanMaximiser *)instance; switch (port) { case SATANMAXIMISER_ENV_TIME_P: plugin->env_time_p = data; break; case SATANMAXIMISER_KNEE_POINT: plugin->knee_point = data; break; case SATANMAXIMISER_INPUT: plugin->input = data; break; case SATANMAXIMISER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSatanMaximiser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { SatanMaximiser *plugin_data = (SatanMaximiser *)malloc(sizeof(SatanMaximiser)); LADSPA_Data *buffer = NULL; unsigned int buffer_pos; float env; #line 27 "satan_maximiser_1408.xml" env = 0.0f; buffer = malloc(sizeof(LADSPA_Data) * BUFFER_SIZE); buffer_pos = 0; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->env = env; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSatanMaximiser(LADSPA_Handle instance, unsigned long sample_count) { SatanMaximiser *plugin_data = (SatanMaximiser *)instance; /* Decay time (samples) (float value) */ const LADSPA_Data env_time_p = *(plugin_data->env_time_p); /* Knee point (dB) (float value) */ const LADSPA_Data knee_point = *(plugin_data->knee_point); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_pos = plugin_data->buffer_pos; float env = plugin_data->env; #line 43 "satan_maximiser_1408.xml" unsigned long pos; int delay; float env_tr, env_sc, knee; float env_time = env_time_p; if (env_time < 2.0f) { env_time = 2.0f; } knee = DB_CO(knee_point); delay = f_round(env_time * 0.5f); env_tr = 1.0f / env_time; for (pos = 0; pos < sample_count; pos++) { if (fabs(input[pos]) > env) { env = fabs(input[pos]); } else { env = fabs(input[pos]) * env_tr + env * (1.0f - env_tr); } if (env <= knee) { env_sc = 1.0f / knee; } else { env_sc = 1.0f / env; } buffer[buffer_pos] = input[pos]; buffer_write(output[pos], buffer[(buffer_pos - delay) & BUFFER_MASK] * env_sc); buffer_pos = (buffer_pos + 1) & BUFFER_MASK; } plugin_data->env = env; plugin_data->buffer_pos = buffer_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSatanMaximiser(LADSPA_Handle instance, LADSPA_Data gain) { ((SatanMaximiser *)instance)->run_adding_gain = gain; } static void runAddingSatanMaximiser(LADSPA_Handle instance, unsigned long sample_count) { SatanMaximiser *plugin_data = (SatanMaximiser *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Decay time (samples) (float value) */ const LADSPA_Data env_time_p = *(plugin_data->env_time_p); /* Knee point (dB) (float value) */ const LADSPA_Data knee_point = *(plugin_data->knee_point); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_pos = plugin_data->buffer_pos; float env = plugin_data->env; #line 43 "satan_maximiser_1408.xml" unsigned long pos; int delay; float env_tr, env_sc, knee; float env_time = env_time_p; if (env_time < 2.0f) { env_time = 2.0f; } knee = DB_CO(knee_point); delay = f_round(env_time * 0.5f); env_tr = 1.0f / env_time; for (pos = 0; pos < sample_count; pos++) { if (fabs(input[pos]) > env) { env = fabs(input[pos]); } else { env = fabs(input[pos]) * env_tr + env * (1.0f - env_tr); } if (env <= knee) { env_sc = 1.0f / knee; } else { env_sc = 1.0f / env; } buffer[buffer_pos] = input[pos]; buffer_write(output[pos], buffer[(buffer_pos - delay) & BUFFER_MASK] * env_sc); buffer_pos = (buffer_pos + 1) & BUFFER_MASK; } plugin_data->env = env; plugin_data->buffer_pos = buffer_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif satanMaximiserDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (satanMaximiserDescriptor) { satanMaximiserDescriptor->UniqueID = 1408; satanMaximiserDescriptor->Label = "satanMaximiser"; satanMaximiserDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; satanMaximiserDescriptor->Name = D_("Barry's Satan Maximiser"); satanMaximiserDescriptor->Maker = "Steve Harris "; satanMaximiserDescriptor->Copyright = "GPL"; satanMaximiserDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); satanMaximiserDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); satanMaximiserDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); satanMaximiserDescriptor->PortNames = (const char **)port_names; /* Parameters for Decay time (samples) */ port_descriptors[SATANMAXIMISER_ENV_TIME_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SATANMAXIMISER_ENV_TIME_P] = D_("Decay time (samples)"); port_range_hints[SATANMAXIMISER_ENV_TIME_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SATANMAXIMISER_ENV_TIME_P].LowerBound = 2; port_range_hints[SATANMAXIMISER_ENV_TIME_P].UpperBound = 30; /* Parameters for Knee point (dB) */ port_descriptors[SATANMAXIMISER_KNEE_POINT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SATANMAXIMISER_KNEE_POINT] = D_("Knee point (dB)"); port_range_hints[SATANMAXIMISER_KNEE_POINT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SATANMAXIMISER_KNEE_POINT].LowerBound = -90; port_range_hints[SATANMAXIMISER_KNEE_POINT].UpperBound = 0; /* Parameters for Input */ port_descriptors[SATANMAXIMISER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SATANMAXIMISER_INPUT] = D_("Input"); port_range_hints[SATANMAXIMISER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[SATANMAXIMISER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SATANMAXIMISER_OUTPUT] = D_("Output"); port_range_hints[SATANMAXIMISER_OUTPUT].HintDescriptor = 0; satanMaximiserDescriptor->activate = activateSatanMaximiser; satanMaximiserDescriptor->cleanup = cleanupSatanMaximiser; satanMaximiserDescriptor->connect_port = connectPortSatanMaximiser; satanMaximiserDescriptor->deactivate = NULL; satanMaximiserDescriptor->instantiate = instantiateSatanMaximiser; satanMaximiserDescriptor->run = runSatanMaximiser; satanMaximiserDescriptor->run_adding = runAddingSatanMaximiser; satanMaximiserDescriptor->set_run_adding_gain = setRunAddingGainSatanMaximiser; } } void __attribute__((destructor)) swh_fini() { if (satanMaximiserDescriptor) { free((LADSPA_PortDescriptor *)satanMaximiserDescriptor->PortDescriptors); free((char **)satanMaximiserDescriptor->PortNames); free((LADSPA_PortRangeHint *)satanMaximiserDescriptor->PortRangeHints); free(satanMaximiserDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sc1_1425.c000066400000000000000000000316401247673406200206130ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "sc1_1425.xml" #include "util/db.h" #include "util/rms.h" #define A_TBL 256 #define SC1_ATTACK 0 #define SC1_RELEASE 1 #define SC1_THRESHOLD 2 #define SC1_RATIO 3 #define SC1_KNEE 4 #define SC1_MAKEUP_GAIN 5 #define SC1_INPUT 6 #define SC1_OUTPUT 7 static LADSPA_Descriptor *sc1Descriptor = NULL; typedef struct { LADSPA_Data *attack; LADSPA_Data *release; LADSPA_Data *threshold; LADSPA_Data *ratio; LADSPA_Data *knee; LADSPA_Data *makeup_gain; LADSPA_Data *input; LADSPA_Data *output; float amp; float * as; unsigned int count; float env; float gain; float gain_t; rms_env * rms; float sum; LADSPA_Data run_adding_gain; } Sc1; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sc1Descriptor; default: return NULL; } } static void cleanupSc1(LADSPA_Handle instance) { #line 45 "sc1_1425.xml" Sc1 *plugin_data = (Sc1 *)instance; rms_env_free(plugin_data->rms); free(plugin_data->as); free(instance); } static void connectPortSc1( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Sc1 *plugin; plugin = (Sc1 *)instance; switch (port) { case SC1_ATTACK: plugin->attack = data; break; case SC1_RELEASE: plugin->release = data; break; case SC1_THRESHOLD: plugin->threshold = data; break; case SC1_RATIO: plugin->ratio = data; break; case SC1_KNEE: plugin->knee = data; break; case SC1_MAKEUP_GAIN: plugin->makeup_gain = data; break; case SC1_INPUT: plugin->input = data; break; case SC1_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSc1( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Sc1 *plugin_data = (Sc1 *)malloc(sizeof(Sc1)); float amp; float *as = NULL; unsigned int count; float env; float gain; float gain_t; rms_env *rms = NULL; float sum; #line 24 "sc1_1425.xml" unsigned int i; float sample_rate = (float)s_rate; rms = rms_env_new(); sum = 0.0f; amp = 0.0f; gain = 0.0f; gain_t = 0.0f; env = 0.0f; count = 0; as = malloc(A_TBL * sizeof(float)); as[0] = 1.0f; for (i=1; iamp = amp; plugin_data->as = as; plugin_data->count = count; plugin_data->env = env; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->rms = rms; plugin_data->sum = sum; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSc1(LADSPA_Handle instance, unsigned long sample_count) { Sc1 *plugin_data = (Sc1 *)instance; /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 50 "sc1_1425.xml" unsigned long pos; const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { sum += input[pos] * input[pos]; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } if (count++ % 4 == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(output[pos], input[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->count = count; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSc1(LADSPA_Handle instance, LADSPA_Data gain) { ((Sc1 *)instance)->run_adding_gain = gain; } static void runAddingSc1(LADSPA_Handle instance, unsigned long sample_count) { Sc1 *plugin_data = (Sc1 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 50 "sc1_1425.xml" unsigned long pos; const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { sum += input[pos] * input[pos]; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } if (count++ % 4 == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(output[pos], input[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->count = count; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sc1Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sc1Descriptor) { sc1Descriptor->UniqueID = 1425; sc1Descriptor->Label = "sc1"; sc1Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sc1Descriptor->Name = D_("SC1"); sc1Descriptor->Maker = "Steve Harris "; sc1Descriptor->Copyright = "GPL"; sc1Descriptor->PortCount = 8; port_descriptors = (LADSPA_PortDescriptor *)calloc(8, sizeof(LADSPA_PortDescriptor)); sc1Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(8, sizeof(LADSPA_PortRangeHint)); sc1Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(8, sizeof(char*)); sc1Descriptor->PortNames = (const char **)port_names; /* Parameters for Attack time (ms) */ port_descriptors[SC1_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC1_ATTACK] = D_("Attack time (ms)"); port_range_hints[SC1_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC1_ATTACK].LowerBound = 2; port_range_hints[SC1_ATTACK].UpperBound = 400; /* Parameters for Release time (ms) */ port_descriptors[SC1_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC1_RELEASE] = D_("Release time (ms)"); port_range_hints[SC1_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[SC1_RELEASE].LowerBound = 2; port_range_hints[SC1_RELEASE].UpperBound = 800; /* Parameters for Threshold level (dB) */ port_descriptors[SC1_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC1_THRESHOLD] = D_("Threshold level (dB)"); port_range_hints[SC1_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SC1_THRESHOLD].LowerBound = -30; port_range_hints[SC1_THRESHOLD].UpperBound = 0; /* Parameters for Ratio (1:n) */ port_descriptors[SC1_RATIO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC1_RATIO] = D_("Ratio (1:n)"); port_range_hints[SC1_RATIO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SC1_RATIO].LowerBound = 1; port_range_hints[SC1_RATIO].UpperBound = 10; /* Parameters for Knee radius (dB) */ port_descriptors[SC1_KNEE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC1_KNEE] = D_("Knee radius (dB)"); port_range_hints[SC1_KNEE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC1_KNEE].LowerBound = 1; port_range_hints[SC1_KNEE].UpperBound = 10; /* Parameters for Makeup gain (dB) */ port_descriptors[SC1_MAKEUP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC1_MAKEUP_GAIN] = D_("Makeup gain (dB)"); port_range_hints[SC1_MAKEUP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SC1_MAKEUP_GAIN].LowerBound = 0; port_range_hints[SC1_MAKEUP_GAIN].UpperBound = +24; /* Parameters for Input */ port_descriptors[SC1_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC1_INPUT] = D_("Input"); port_range_hints[SC1_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[SC1_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC1_OUTPUT] = D_("Output"); port_range_hints[SC1_OUTPUT].HintDescriptor = 0; sc1Descriptor->activate = NULL; sc1Descriptor->cleanup = cleanupSc1; sc1Descriptor->connect_port = connectPortSc1; sc1Descriptor->deactivate = NULL; sc1Descriptor->instantiate = instantiateSc1; sc1Descriptor->run = runSc1; sc1Descriptor->run_adding = runAddingSc1; sc1Descriptor->set_run_adding_gain = setRunAddingGainSc1; } } void __attribute__((destructor)) swh_fini() { if (sc1Descriptor) { free((LADSPA_PortDescriptor *)sc1Descriptor->PortDescriptors); free((char **)sc1Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc1Descriptor->PortRangeHints); free(sc1Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sc2_1426.c000066400000000000000000000327701247673406200206220ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "sc2_1426.xml" #include "util/db.h" #include "util/rms.h" #define A_TBL 256 #define SC2_ATTACK 0 #define SC2_RELEASE 1 #define SC2_THRESHOLD 2 #define SC2_RATIO 3 #define SC2_KNEE 4 #define SC2_MAKEUP_GAIN 5 #define SC2_SIDECHAIN 6 #define SC2_INPUT 7 #define SC2_OUTPUT 8 static LADSPA_Descriptor *sc2Descriptor = NULL; typedef struct { LADSPA_Data *attack; LADSPA_Data *release; LADSPA_Data *threshold; LADSPA_Data *ratio; LADSPA_Data *knee; LADSPA_Data *makeup_gain; LADSPA_Data *sidechain; LADSPA_Data *input; LADSPA_Data *output; float amp; float * as; unsigned int count; float env; float gain; float gain_t; rms_env * rms; float sum; LADSPA_Data run_adding_gain; } Sc2; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sc2Descriptor; default: return NULL; } } static void cleanupSc2(LADSPA_Handle instance) { #line 44 "sc2_1426.xml" Sc2 *plugin_data = (Sc2 *)instance; rms_env_free(plugin_data->rms); free(plugin_data->as); free(instance); } static void connectPortSc2( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Sc2 *plugin; plugin = (Sc2 *)instance; switch (port) { case SC2_ATTACK: plugin->attack = data; break; case SC2_RELEASE: plugin->release = data; break; case SC2_THRESHOLD: plugin->threshold = data; break; case SC2_RATIO: plugin->ratio = data; break; case SC2_KNEE: plugin->knee = data; break; case SC2_MAKEUP_GAIN: plugin->makeup_gain = data; break; case SC2_SIDECHAIN: plugin->sidechain = data; break; case SC2_INPUT: plugin->input = data; break; case SC2_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSc2( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Sc2 *plugin_data = (Sc2 *)malloc(sizeof(Sc2)); float amp; float *as = NULL; unsigned int count; float env; float gain; float gain_t; rms_env *rms = NULL; float sum; #line 23 "sc2_1426.xml" unsigned int i; float sample_rate = (float)s_rate; rms = rms_env_new(); sum = 0.0f; amp = 0.0f; gain = 0.0f; gain_t = 0.0f; env = 0.0f; count = 0; as = malloc(A_TBL * sizeof(float)); as[0] = 1.0f; for (i=1; iamp = amp; plugin_data->as = as; plugin_data->count = count; plugin_data->env = env; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->rms = rms; plugin_data->sum = sum; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSc2(LADSPA_Handle instance, unsigned long sample_count) { Sc2 *plugin_data = (Sc2 *)instance; /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Sidechain (array of floats of length sample_count) */ const LADSPA_Data * const sidechain = plugin_data->sidechain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 49 "sc2_1426.xml" unsigned long pos; const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { sum += sidechain[pos] * sidechain[pos]; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } if (count++ % 4 == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(output[pos], input[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->count = count; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSc2(LADSPA_Handle instance, LADSPA_Data gain) { ((Sc2 *)instance)->run_adding_gain = gain; } static void runAddingSc2(LADSPA_Handle instance, unsigned long sample_count) { Sc2 *plugin_data = (Sc2 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Sidechain (array of floats of length sample_count) */ const LADSPA_Data * const sidechain = plugin_data->sidechain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 49 "sc2_1426.xml" unsigned long pos; const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { sum += sidechain[pos] * sidechain[pos]; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } if (count++ % 4 == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(output[pos], input[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->count = count; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sc2Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sc2Descriptor) { sc2Descriptor->UniqueID = 1426; sc2Descriptor->Label = "sc2"; sc2Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sc2Descriptor->Name = D_("SC2"); sc2Descriptor->Maker = "Steve Harris "; sc2Descriptor->Copyright = "GPL"; sc2Descriptor->PortCount = 9; port_descriptors = (LADSPA_PortDescriptor *)calloc(9, sizeof(LADSPA_PortDescriptor)); sc2Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(9, sizeof(LADSPA_PortRangeHint)); sc2Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(9, sizeof(char*)); sc2Descriptor->PortNames = (const char **)port_names; /* Parameters for Attack time (ms) */ port_descriptors[SC2_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC2_ATTACK] = D_("Attack time (ms)"); port_range_hints[SC2_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC2_ATTACK].LowerBound = 2; port_range_hints[SC2_ATTACK].UpperBound = 400; /* Parameters for Release time (ms) */ port_descriptors[SC2_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC2_RELEASE] = D_("Release time (ms)"); port_range_hints[SC2_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[SC2_RELEASE].LowerBound = 2; port_range_hints[SC2_RELEASE].UpperBound = 800; /* Parameters for Threshold level (dB) */ port_descriptors[SC2_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC2_THRESHOLD] = D_("Threshold level (dB)"); port_range_hints[SC2_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SC2_THRESHOLD].LowerBound = -30; port_range_hints[SC2_THRESHOLD].UpperBound = 0; /* Parameters for Ratio (1:n) */ port_descriptors[SC2_RATIO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC2_RATIO] = D_("Ratio (1:n)"); port_range_hints[SC2_RATIO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SC2_RATIO].LowerBound = 1; port_range_hints[SC2_RATIO].UpperBound = 10; /* Parameters for Knee radius (dB) */ port_descriptors[SC2_KNEE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC2_KNEE] = D_("Knee radius (dB)"); port_range_hints[SC2_KNEE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC2_KNEE].LowerBound = 1; port_range_hints[SC2_KNEE].UpperBound = 10; /* Parameters for Makeup gain (dB) */ port_descriptors[SC2_MAKEUP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC2_MAKEUP_GAIN] = D_("Makeup gain (dB)"); port_range_hints[SC2_MAKEUP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SC2_MAKEUP_GAIN].LowerBound = 0; port_range_hints[SC2_MAKEUP_GAIN].UpperBound = +24; /* Parameters for Sidechain */ port_descriptors[SC2_SIDECHAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC2_SIDECHAIN] = D_("Sidechain"); port_range_hints[SC2_SIDECHAIN].HintDescriptor = 0; /* Parameters for Input */ port_descriptors[SC2_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC2_INPUT] = D_("Input"); port_range_hints[SC2_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[SC2_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC2_OUTPUT] = D_("Output"); port_range_hints[SC2_OUTPUT].HintDescriptor = 0; sc2Descriptor->activate = NULL; sc2Descriptor->cleanup = cleanupSc2; sc2Descriptor->connect_port = connectPortSc2; sc2Descriptor->deactivate = NULL; sc2Descriptor->instantiate = instantiateSc2; sc2Descriptor->run = runSc2; sc2Descriptor->run_adding = runAddingSc2; sc2Descriptor->set_run_adding_gain = setRunAddingGainSc2; } } void __attribute__((destructor)) swh_fini() { if (sc2Descriptor) { free((LADSPA_PortDescriptor *)sc2Descriptor->PortDescriptors); free((char **)sc2Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc2Descriptor->PortRangeHints); free(sc2Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sc3_1427.c000066400000000000000000000400721247673406200206160ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "sc3_1427.xml" #include "util/db.h" #include "util/rms.h" #define A_TBL 256 #define SC3_ATTACK 0 #define SC3_RELEASE 1 #define SC3_THRESHOLD 2 #define SC3_RATIO 3 #define SC3_KNEE 4 #define SC3_MAKEUP_GAIN 5 #define SC3_CHAIN_BAL 6 #define SC3_SIDECHAIN 7 #define SC3_LEFT_IN 8 #define SC3_RIGHT_IN 9 #define SC3_LEFT_OUT 10 #define SC3_RIGHT_OUT 11 static LADSPA_Descriptor *sc3Descriptor = NULL; typedef struct { LADSPA_Data *attack; LADSPA_Data *release; LADSPA_Data *threshold; LADSPA_Data *ratio; LADSPA_Data *knee; LADSPA_Data *makeup_gain; LADSPA_Data *chain_bal; LADSPA_Data *sidechain; LADSPA_Data *left_in; LADSPA_Data *right_in; LADSPA_Data *left_out; LADSPA_Data *right_out; float amp; float * as; unsigned int count; float env; float gain; float gain_t; rms_env * rms; float sum; LADSPA_Data run_adding_gain; } Sc3; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sc3Descriptor; default: return NULL; } } static void cleanupSc3(LADSPA_Handle instance) { #line 44 "sc3_1427.xml" Sc3 *plugin_data = (Sc3 *)instance; rms_env_free(plugin_data->rms); free(plugin_data->as); free(instance); } static void connectPortSc3( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Sc3 *plugin; plugin = (Sc3 *)instance; switch (port) { case SC3_ATTACK: plugin->attack = data; break; case SC3_RELEASE: plugin->release = data; break; case SC3_THRESHOLD: plugin->threshold = data; break; case SC3_RATIO: plugin->ratio = data; break; case SC3_KNEE: plugin->knee = data; break; case SC3_MAKEUP_GAIN: plugin->makeup_gain = data; break; case SC3_CHAIN_BAL: plugin->chain_bal = data; break; case SC3_SIDECHAIN: plugin->sidechain = data; break; case SC3_LEFT_IN: plugin->left_in = data; break; case SC3_RIGHT_IN: plugin->right_in = data; break; case SC3_LEFT_OUT: plugin->left_out = data; break; case SC3_RIGHT_OUT: plugin->right_out = data; break; } } static LADSPA_Handle instantiateSc3( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Sc3 *plugin_data = (Sc3 *)malloc(sizeof(Sc3)); float amp; float *as = NULL; unsigned int count; float env; float gain; float gain_t; rms_env *rms = NULL; float sum; #line 23 "sc3_1427.xml" unsigned int i; float sample_rate = (float)s_rate; rms = rms_env_new(); sum = 0.0f; amp = 0.0f; gain = 0.0f; gain_t = 0.0f; env = 0.0f; count = 0; as = malloc(A_TBL * sizeof(float)); as[0] = 1.0f; for (i=1; iamp = amp; plugin_data->as = as; plugin_data->count = count; plugin_data->env = env; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->rms = rms; plugin_data->sum = sum; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSc3(LADSPA_Handle instance, unsigned long sample_count) { Sc3 *plugin_data = (Sc3 *)instance; /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Chain balance (float value) */ const LADSPA_Data chain_bal = *(plugin_data->chain_bal); /* Sidechain (array of floats of length sample_count) */ const LADSPA_Data * const sidechain = plugin_data->sidechain; /* Left input (array of floats of length sample_count) */ const LADSPA_Data * const left_in = plugin_data->left_in; /* Right input (array of floats of length sample_count) */ const LADSPA_Data * const right_in = plugin_data->right_in; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const left_out = plugin_data->left_out; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const right_out = plugin_data->right_out; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 49 "sc3_1427.xml" unsigned long pos; const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float chain_bali = 1.0f - chain_bal; const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float lev_in = chain_bali * (left_in[pos] + right_in[pos]) * 0.5f + chain_bal * sidechain[pos]; sum += lev_in * lev_in; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } if (count++ % 4 == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (isnan(env)) { // This can happen sometimes, but I dont know why env = 0.0f; } else if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(left_out[pos], left_in[pos] * gain * mug); buffer_write(right_out[pos], right_in[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->count = count; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSc3(LADSPA_Handle instance, LADSPA_Data gain) { ((Sc3 *)instance)->run_adding_gain = gain; } static void runAddingSc3(LADSPA_Handle instance, unsigned long sample_count) { Sc3 *plugin_data = (Sc3 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Chain balance (float value) */ const LADSPA_Data chain_bal = *(plugin_data->chain_bal); /* Sidechain (array of floats of length sample_count) */ const LADSPA_Data * const sidechain = plugin_data->sidechain; /* Left input (array of floats of length sample_count) */ const LADSPA_Data * const left_in = plugin_data->left_in; /* Right input (array of floats of length sample_count) */ const LADSPA_Data * const right_in = plugin_data->right_in; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const left_out = plugin_data->left_out; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const right_out = plugin_data->right_out; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 49 "sc3_1427.xml" unsigned long pos; const float ga = as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float chain_bali = 1.0f - chain_bal; const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float lev_in = chain_bali * (left_in[pos] + right_in[pos]) * 0.5f + chain_bal * sidechain[pos]; sum += lev_in * lev_in; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } if (count++ % 4 == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (isnan(env)) { // This can happen sometimes, but I dont know why env = 0.0f; } else if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(left_out[pos], left_in[pos] * gain * mug); buffer_write(right_out[pos], right_in[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->count = count; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sc3Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sc3Descriptor) { sc3Descriptor->UniqueID = 1427; sc3Descriptor->Label = "sc3"; sc3Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sc3Descriptor->Name = D_("SC3"); sc3Descriptor->Maker = "Steve Harris "; sc3Descriptor->Copyright = "GPL"; sc3Descriptor->PortCount = 12; port_descriptors = (LADSPA_PortDescriptor *)calloc(12, sizeof(LADSPA_PortDescriptor)); sc3Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(12, sizeof(LADSPA_PortRangeHint)); sc3Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(12, sizeof(char*)); sc3Descriptor->PortNames = (const char **)port_names; /* Parameters for Attack time (ms) */ port_descriptors[SC3_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_ATTACK] = D_("Attack time (ms)"); port_range_hints[SC3_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC3_ATTACK].LowerBound = 2; port_range_hints[SC3_ATTACK].UpperBound = 400; /* Parameters for Release time (ms) */ port_descriptors[SC3_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_RELEASE] = D_("Release time (ms)"); port_range_hints[SC3_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[SC3_RELEASE].LowerBound = 2; port_range_hints[SC3_RELEASE].UpperBound = 800; /* Parameters for Threshold level (dB) */ port_descriptors[SC3_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_THRESHOLD] = D_("Threshold level (dB)"); port_range_hints[SC3_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SC3_THRESHOLD].LowerBound = -30; port_range_hints[SC3_THRESHOLD].UpperBound = 0; /* Parameters for Ratio (1:n) */ port_descriptors[SC3_RATIO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_RATIO] = D_("Ratio (1:n)"); port_range_hints[SC3_RATIO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SC3_RATIO].LowerBound = 1; port_range_hints[SC3_RATIO].UpperBound = 10; /* Parameters for Knee radius (dB) */ port_descriptors[SC3_KNEE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_KNEE] = D_("Knee radius (dB)"); port_range_hints[SC3_KNEE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC3_KNEE].LowerBound = 1; port_range_hints[SC3_KNEE].UpperBound = 10; /* Parameters for Makeup gain (dB) */ port_descriptors[SC3_MAKEUP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_MAKEUP_GAIN] = D_("Makeup gain (dB)"); port_range_hints[SC3_MAKEUP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SC3_MAKEUP_GAIN].LowerBound = 0; port_range_hints[SC3_MAKEUP_GAIN].UpperBound = +24; /* Parameters for Chain balance */ port_descriptors[SC3_CHAIN_BAL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC3_CHAIN_BAL] = D_("Chain balance"); port_range_hints[SC3_CHAIN_BAL].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SC3_CHAIN_BAL].LowerBound = 0; port_range_hints[SC3_CHAIN_BAL].UpperBound = 1; /* Parameters for Sidechain */ port_descriptors[SC3_SIDECHAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC3_SIDECHAIN] = D_("Sidechain"); port_range_hints[SC3_SIDECHAIN].HintDescriptor = 0; /* Parameters for Left input */ port_descriptors[SC3_LEFT_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC3_LEFT_IN] = D_("Left input"); port_range_hints[SC3_LEFT_IN].HintDescriptor = 0; /* Parameters for Right input */ port_descriptors[SC3_RIGHT_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC3_RIGHT_IN] = D_("Right input"); port_range_hints[SC3_RIGHT_IN].HintDescriptor = 0; /* Parameters for Left output */ port_descriptors[SC3_LEFT_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC3_LEFT_OUT] = D_("Left output"); port_range_hints[SC3_LEFT_OUT].HintDescriptor = 0; /* Parameters for Right output */ port_descriptors[SC3_RIGHT_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC3_RIGHT_OUT] = D_("Right output"); port_range_hints[SC3_RIGHT_OUT].HintDescriptor = 0; sc3Descriptor->activate = NULL; sc3Descriptor->cleanup = cleanupSc3; sc3Descriptor->connect_port = connectPortSc3; sc3Descriptor->deactivate = NULL; sc3Descriptor->instantiate = instantiateSc3; sc3Descriptor->run = runSc3; sc3Descriptor->run_adding = runAddingSc3; sc3Descriptor->set_run_adding_gain = setRunAddingGainSc3; } } void __attribute__((destructor)) swh_fini() { if (sc3Descriptor) { free((LADSPA_PortDescriptor *)sc3Descriptor->PortDescriptors); free((char **)sc3Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc3Descriptor->PortRangeHints); free(sc3Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sc4_1882.c000066400000000000000000000431661247673406200206330ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "sc4_1882.xml" #include "util/db.h" #include "util/rms.h" #define A_TBL 256 #define SC4_RMS_PEAK 0 #define SC4_ATTACK 1 #define SC4_RELEASE 2 #define SC4_THRESHOLD 3 #define SC4_RATIO 4 #define SC4_KNEE 5 #define SC4_MAKEUP_GAIN 6 #define SC4_AMPLITUDE 7 #define SC4_GAIN_RED 8 #define SC4_LEFT_IN 9 #define SC4_RIGHT_IN 10 #define SC4_LEFT_OUT 11 #define SC4_RIGHT_OUT 12 static LADSPA_Descriptor *sc4Descriptor = NULL; typedef struct { LADSPA_Data *rms_peak; LADSPA_Data *attack; LADSPA_Data *release; LADSPA_Data *threshold; LADSPA_Data *ratio; LADSPA_Data *knee; LADSPA_Data *makeup_gain; LADSPA_Data *amplitude; LADSPA_Data *gain_red; LADSPA_Data *left_in; LADSPA_Data *right_in; LADSPA_Data *left_out; LADSPA_Data *right_out; float amp; float * as; unsigned int count; float env; float env_peak; float env_rms; float gain; float gain_t; rms_env * rms; float sum; LADSPA_Data run_adding_gain; } Sc4; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sc4Descriptor; default: return NULL; } } static void cleanupSc4(LADSPA_Handle instance) { #line 46 "sc4_1882.xml" Sc4 *plugin_data = (Sc4 *)instance; rms_env_free(plugin_data->rms); free(plugin_data->as); free(instance); } static void connectPortSc4( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Sc4 *plugin; plugin = (Sc4 *)instance; switch (port) { case SC4_RMS_PEAK: plugin->rms_peak = data; break; case SC4_ATTACK: plugin->attack = data; break; case SC4_RELEASE: plugin->release = data; break; case SC4_THRESHOLD: plugin->threshold = data; break; case SC4_RATIO: plugin->ratio = data; break; case SC4_KNEE: plugin->knee = data; break; case SC4_MAKEUP_GAIN: plugin->makeup_gain = data; break; case SC4_AMPLITUDE: plugin->amplitude = data; break; case SC4_GAIN_RED: plugin->gain_red = data; break; case SC4_LEFT_IN: plugin->left_in = data; break; case SC4_RIGHT_IN: plugin->right_in = data; break; case SC4_LEFT_OUT: plugin->left_out = data; break; case SC4_RIGHT_OUT: plugin->right_out = data; break; } } static LADSPA_Handle instantiateSc4( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Sc4 *plugin_data = (Sc4 *)malloc(sizeof(Sc4)); float amp; float *as = NULL; unsigned int count; float env; float env_peak; float env_rms; float gain; float gain_t; rms_env *rms = NULL; float sum; #line 23 "sc4_1882.xml" unsigned int i; float sample_rate = (float)s_rate; rms = rms_env_new(); sum = 0.0f; amp = 0.0f; gain = 0.0f; gain_t = 0.0f; env = 0.0f; env_rms = 0.0f; env_peak = 0.0f; count = 0; as = malloc(A_TBL * sizeof(float)); as[0] = 1.0f; for (i=1; iamp = amp; plugin_data->as = as; plugin_data->count = count; plugin_data->env = env; plugin_data->env_peak = env_peak; plugin_data->env_rms = env_rms; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->rms = rms; plugin_data->sum = sum; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSc4(LADSPA_Handle instance, unsigned long sample_count) { Sc4 *plugin_data = (Sc4 *)instance; /* RMS/peak (float value) */ const LADSPA_Data rms_peak = *(plugin_data->rms_peak); /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Left input (array of floats of length sample_count) */ const LADSPA_Data * const left_in = plugin_data->left_in; /* Right input (array of floats of length sample_count) */ const LADSPA_Data * const right_in = plugin_data->right_in; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const left_out = plugin_data->left_out; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const right_out = plugin_data->right_out; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float env_peak = plugin_data->env_peak; float env_rms = plugin_data->env_rms; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 51 "sc4_1882.xml" unsigned long pos; const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float la = fabs(left_in[pos]); const float ra = fabs(right_in[pos]); const float lev_in = f_max(la, ra); sum += lev_in * lev_in; if (amp > env_rms) { env_rms = env_rms * ga + amp * (1.0f - ga); } else { env_rms = env_rms * gr + amp * (1.0f - gr); } round_to_zero(&env_rms); if (lev_in > env_peak) { env_peak = env_peak * ga + lev_in * (1.0f - ga); } else { env_peak = env_peak * gr + lev_in * (1.0f - gr); } round_to_zero(&env_peak); if ((count++ & 3) == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (isnan(env_rms)) { // This can happen sometimes, but I don't know why env_rms = 0.0f; } env = LIN_INTERP(rms_peak, env_rms, env_peak); if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(left_out[pos], left_in[pos] * gain * mug); buffer_write(right_out[pos], right_in[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->env_rms = env_rms; plugin_data->env_peak = env_peak; plugin_data->count = count; *(plugin_data->amplitude) = lin2db(env); *(plugin_data->gain_red) = lin2db(gain); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSc4(LADSPA_Handle instance, LADSPA_Data gain) { ((Sc4 *)instance)->run_adding_gain = gain; } static void runAddingSc4(LADSPA_Handle instance, unsigned long sample_count) { Sc4 *plugin_data = (Sc4 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* RMS/peak (float value) */ const LADSPA_Data rms_peak = *(plugin_data->rms_peak); /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Left input (array of floats of length sample_count) */ const LADSPA_Data * const left_in = plugin_data->left_in; /* Right input (array of floats of length sample_count) */ const LADSPA_Data * const right_in = plugin_data->right_in; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const left_out = plugin_data->left_out; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const right_out = plugin_data->right_out; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float env_peak = plugin_data->env_peak; float env_rms = plugin_data->env_rms; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 51 "sc4_1882.xml" unsigned long pos; const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float la = fabs(left_in[pos]); const float ra = fabs(right_in[pos]); const float lev_in = f_max(la, ra); sum += lev_in * lev_in; if (amp > env_rms) { env_rms = env_rms * ga + amp * (1.0f - ga); } else { env_rms = env_rms * gr + amp * (1.0f - gr); } round_to_zero(&env_rms); if (lev_in > env_peak) { env_peak = env_peak * ga + lev_in * (1.0f - ga); } else { env_peak = env_peak * gr + lev_in * (1.0f - gr); } round_to_zero(&env_peak); if ((count++ & 3) == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (isnan(env_rms)) { // This can happen sometimes, but I don't know why env_rms = 0.0f; } env = LIN_INTERP(rms_peak, env_rms, env_peak); if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(left_out[pos], left_in[pos] * gain * mug); buffer_write(right_out[pos], right_in[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->env_rms = env_rms; plugin_data->env_peak = env_peak; plugin_data->count = count; *(plugin_data->amplitude) = lin2db(env); *(plugin_data->gain_red) = lin2db(gain); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sc4Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sc4Descriptor) { sc4Descriptor->UniqueID = 1882; sc4Descriptor->Label = "sc4"; sc4Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sc4Descriptor->Name = D_("SC4"); sc4Descriptor->Maker = "Steve Harris "; sc4Descriptor->Copyright = "GPL"; sc4Descriptor->PortCount = 13; port_descriptors = (LADSPA_PortDescriptor *)calloc(13, sizeof(LADSPA_PortDescriptor)); sc4Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(13, sizeof(LADSPA_PortRangeHint)); sc4Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(13, sizeof(char*)); sc4Descriptor->PortNames = (const char **)port_names; /* Parameters for RMS/peak */ port_descriptors[SC4_RMS_PEAK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_RMS_PEAK] = D_("RMS/peak"); port_range_hints[SC4_RMS_PEAK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[SC4_RMS_PEAK].LowerBound = 0; port_range_hints[SC4_RMS_PEAK].UpperBound = 1; /* Parameters for Attack time (ms) */ port_descriptors[SC4_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_ATTACK] = D_("Attack time (ms)"); port_range_hints[SC4_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC4_ATTACK].LowerBound = 1.5; port_range_hints[SC4_ATTACK].UpperBound = 400; /* Parameters for Release time (ms) */ port_descriptors[SC4_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_RELEASE] = D_("Release time (ms)"); port_range_hints[SC4_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[SC4_RELEASE].LowerBound = 2; port_range_hints[SC4_RELEASE].UpperBound = 800; /* Parameters for Threshold level (dB) */ port_descriptors[SC4_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_THRESHOLD] = D_("Threshold level (dB)"); port_range_hints[SC4_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SC4_THRESHOLD].LowerBound = -30; port_range_hints[SC4_THRESHOLD].UpperBound = 0; /* Parameters for Ratio (1:n) */ port_descriptors[SC4_RATIO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_RATIO] = D_("Ratio (1:n)"); port_range_hints[SC4_RATIO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SC4_RATIO].LowerBound = 1; port_range_hints[SC4_RATIO].UpperBound = 20; /* Parameters for Knee radius (dB) */ port_descriptors[SC4_KNEE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_KNEE] = D_("Knee radius (dB)"); port_range_hints[SC4_KNEE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC4_KNEE].LowerBound = 1; port_range_hints[SC4_KNEE].UpperBound = 10; /* Parameters for Makeup gain (dB) */ port_descriptors[SC4_MAKEUP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4_MAKEUP_GAIN] = D_("Makeup gain (dB)"); port_range_hints[SC4_MAKEUP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SC4_MAKEUP_GAIN].LowerBound = 0; port_range_hints[SC4_MAKEUP_GAIN].UpperBound = +24; /* Parameters for Amplitude (dB) */ port_descriptors[SC4_AMPLITUDE] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[SC4_AMPLITUDE] = D_("Amplitude (dB)"); port_range_hints[SC4_AMPLITUDE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SC4_AMPLITUDE].LowerBound = -40; port_range_hints[SC4_AMPLITUDE].UpperBound = +12; /* Parameters for Gain reduction (dB) */ port_descriptors[SC4_GAIN_RED] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[SC4_GAIN_RED] = D_("Gain reduction (dB)"); port_range_hints[SC4_GAIN_RED].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SC4_GAIN_RED].LowerBound = -24; port_range_hints[SC4_GAIN_RED].UpperBound = 0; /* Parameters for Left input */ port_descriptors[SC4_LEFT_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC4_LEFT_IN] = D_("Left input"); port_range_hints[SC4_LEFT_IN].HintDescriptor = 0; /* Parameters for Right input */ port_descriptors[SC4_RIGHT_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC4_RIGHT_IN] = D_("Right input"); port_range_hints[SC4_RIGHT_IN].HintDescriptor = 0; /* Parameters for Left output */ port_descriptors[SC4_LEFT_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC4_LEFT_OUT] = D_("Left output"); port_range_hints[SC4_LEFT_OUT].HintDescriptor = 0; /* Parameters for Right output */ port_descriptors[SC4_RIGHT_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC4_RIGHT_OUT] = D_("Right output"); port_range_hints[SC4_RIGHT_OUT].HintDescriptor = 0; sc4Descriptor->activate = NULL; sc4Descriptor->cleanup = cleanupSc4; sc4Descriptor->connect_port = connectPortSc4; sc4Descriptor->deactivate = NULL; sc4Descriptor->instantiate = instantiateSc4; sc4Descriptor->run = runSc4; sc4Descriptor->run_adding = runAddingSc4; sc4Descriptor->set_run_adding_gain = setRunAddingGainSc4; } } void __attribute__((destructor)) swh_fini() { if (sc4Descriptor) { free((LADSPA_PortDescriptor *)sc4Descriptor->PortDescriptors); free((char **)sc4Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc4Descriptor->PortRangeHints); free(sc4Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sc4m_1916.c000066400000000000000000000400201247673406200207700ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "sc4m_1916.xml" #include "util/db.h" #include "util/rms.h" #define A_TBL 256 #define SC4M_RMS_PEAK 0 #define SC4M_ATTACK 1 #define SC4M_RELEASE 2 #define SC4M_THRESHOLD 3 #define SC4M_RATIO 4 #define SC4M_KNEE 5 #define SC4M_MAKEUP_GAIN 6 #define SC4M_AMPLITUDE 7 #define SC4M_GAIN_RED 8 #define SC4M_INPUT 9 #define SC4M_OUTPUT 10 static LADSPA_Descriptor *sc4mDescriptor = NULL; typedef struct { LADSPA_Data *rms_peak; LADSPA_Data *attack; LADSPA_Data *release; LADSPA_Data *threshold; LADSPA_Data *ratio; LADSPA_Data *knee; LADSPA_Data *makeup_gain; LADSPA_Data *amplitude; LADSPA_Data *gain_red; LADSPA_Data *input; LADSPA_Data *output; float amp; float * as; unsigned int count; float env; float env_peak; float env_rms; float gain; float gain_t; rms_env * rms; float sum; LADSPA_Data run_adding_gain; } Sc4m; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sc4mDescriptor; default: return NULL; } } static void cleanupSc4m(LADSPA_Handle instance) { #line 46 "sc4m_1916.xml" Sc4m *plugin_data = (Sc4m *)instance; rms_env_free(plugin_data->rms); free(plugin_data->as); free(instance); } static void connectPortSc4m( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Sc4m *plugin; plugin = (Sc4m *)instance; switch (port) { case SC4M_RMS_PEAK: plugin->rms_peak = data; break; case SC4M_ATTACK: plugin->attack = data; break; case SC4M_RELEASE: plugin->release = data; break; case SC4M_THRESHOLD: plugin->threshold = data; break; case SC4M_RATIO: plugin->ratio = data; break; case SC4M_KNEE: plugin->knee = data; break; case SC4M_MAKEUP_GAIN: plugin->makeup_gain = data; break; case SC4M_AMPLITUDE: plugin->amplitude = data; break; case SC4M_GAIN_RED: plugin->gain_red = data; break; case SC4M_INPUT: plugin->input = data; break; case SC4M_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSc4m( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Sc4m *plugin_data = (Sc4m *)malloc(sizeof(Sc4m)); float amp; float *as = NULL; unsigned int count; float env; float env_peak; float env_rms; float gain; float gain_t; rms_env *rms = NULL; float sum; #line 23 "sc4m_1916.xml" unsigned int i; float sample_rate = (float)s_rate; rms = rms_env_new(); sum = 0.0f; amp = 0.0f; gain = 0.0f; gain_t = 0.0f; env = 0.0f; env_rms = 0.0f; env_peak = 0.0f; count = 0; as = malloc(A_TBL * sizeof(float)); as[0] = 1.0f; for (i=1; iamp = amp; plugin_data->as = as; plugin_data->count = count; plugin_data->env = env; plugin_data->env_peak = env_peak; plugin_data->env_rms = env_rms; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->rms = rms; plugin_data->sum = sum; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSc4m(LADSPA_Handle instance, unsigned long sample_count) { Sc4m *plugin_data = (Sc4m *)instance; /* RMS/peak (float value) */ const LADSPA_Data rms_peak = *(plugin_data->rms_peak); /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float env_peak = plugin_data->env_peak; float env_rms = plugin_data->env_rms; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 51 "sc4m_1916.xml" unsigned long pos; const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float lev_in = input[pos]; sum += lev_in * lev_in; if (amp > env_rms) { env_rms = env_rms * ga + amp * (1.0f - ga); } else { env_rms = env_rms * gr + amp * (1.0f - gr); } round_to_zero(&env_rms); if (lev_in > env_peak) { env_peak = env_peak * ga + lev_in * (1.0f - ga); } else { env_peak = env_peak * gr + lev_in * (1.0f - gr); } round_to_zero(&env_peak); if ((count++ & 3) == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; env = LIN_INTERP(rms_peak, env_rms, env_peak); if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(output[pos], input[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->env_rms = env_rms; plugin_data->env_peak = env_peak; plugin_data->count = count; *(plugin_data->amplitude) = lin2db(env); *(plugin_data->gain_red) = lin2db(gain); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSc4m(LADSPA_Handle instance, LADSPA_Data gain) { ((Sc4m *)instance)->run_adding_gain = gain; } static void runAddingSc4m(LADSPA_Handle instance, unsigned long sample_count) { Sc4m *plugin_data = (Sc4m *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* RMS/peak (float value) */ const LADSPA_Data rms_peak = *(plugin_data->rms_peak); /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Makeup gain (dB) (float value) */ const LADSPA_Data makeup_gain = *(plugin_data->makeup_gain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float env_peak = plugin_data->env_peak; float env_rms = plugin_data->env_rms; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 51 "sc4m_1916.xml" unsigned long pos; const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = (ratio - 1.0f) / ratio; const float mug = db2lin(makeup_gain); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float lev_in = input[pos]; sum += lev_in * lev_in; if (amp > env_rms) { env_rms = env_rms * ga + amp * (1.0f - ga); } else { env_rms = env_rms * gr + amp * (1.0f - gr); } round_to_zero(&env_rms); if (lev_in > env_peak) { env_peak = env_peak * ga + lev_in * (1.0f - ga); } else { env_peak = env_peak * gr + lev_in * (1.0f - gr); } round_to_zero(&env_peak); if ((count++ & 3) == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; env = LIN_INTERP(rms_peak, env_rms, env_peak); if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(output[pos], input[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->env_rms = env_rms; plugin_data->env_peak = env_peak; plugin_data->count = count; *(plugin_data->amplitude) = lin2db(env); *(plugin_data->gain_red) = lin2db(gain); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sc4mDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sc4mDescriptor) { sc4mDescriptor->UniqueID = 1916; sc4mDescriptor->Label = "sc4m"; sc4mDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sc4mDescriptor->Name = D_("SC4 mono"); sc4mDescriptor->Maker = "Steve Harris "; sc4mDescriptor->Copyright = "GPL"; sc4mDescriptor->PortCount = 11; port_descriptors = (LADSPA_PortDescriptor *)calloc(11, sizeof(LADSPA_PortDescriptor)); sc4mDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(11, sizeof(LADSPA_PortRangeHint)); sc4mDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(11, sizeof(char*)); sc4mDescriptor->PortNames = (const char **)port_names; /* Parameters for RMS/peak */ port_descriptors[SC4M_RMS_PEAK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_RMS_PEAK] = D_("RMS/peak"); port_range_hints[SC4M_RMS_PEAK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[SC4M_RMS_PEAK].LowerBound = 0; port_range_hints[SC4M_RMS_PEAK].UpperBound = 1; /* Parameters for Attack time (ms) */ port_descriptors[SC4M_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_ATTACK] = D_("Attack time (ms)"); port_range_hints[SC4M_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC4M_ATTACK].LowerBound = 1.5; port_range_hints[SC4M_ATTACK].UpperBound = 400; /* Parameters for Release time (ms) */ port_descriptors[SC4M_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_RELEASE] = D_("Release time (ms)"); port_range_hints[SC4M_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[SC4M_RELEASE].LowerBound = 2; port_range_hints[SC4M_RELEASE].UpperBound = 800; /* Parameters for Threshold level (dB) */ port_descriptors[SC4M_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_THRESHOLD] = D_("Threshold level (dB)"); port_range_hints[SC4M_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SC4M_THRESHOLD].LowerBound = -30; port_range_hints[SC4M_THRESHOLD].UpperBound = 0; /* Parameters for Ratio (1:n) */ port_descriptors[SC4M_RATIO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_RATIO] = D_("Ratio (1:n)"); port_range_hints[SC4M_RATIO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SC4M_RATIO].LowerBound = 1; port_range_hints[SC4M_RATIO].UpperBound = 20; /* Parameters for Knee radius (dB) */ port_descriptors[SC4M_KNEE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_KNEE] = D_("Knee radius (dB)"); port_range_hints[SC4M_KNEE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SC4M_KNEE].LowerBound = 1; port_range_hints[SC4M_KNEE].UpperBound = 10; /* Parameters for Makeup gain (dB) */ port_descriptors[SC4M_MAKEUP_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SC4M_MAKEUP_GAIN] = D_("Makeup gain (dB)"); port_range_hints[SC4M_MAKEUP_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SC4M_MAKEUP_GAIN].LowerBound = 0; port_range_hints[SC4M_MAKEUP_GAIN].UpperBound = +24; /* Parameters for Amplitude (dB) */ port_descriptors[SC4M_AMPLITUDE] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[SC4M_AMPLITUDE] = D_("Amplitude (dB)"); port_range_hints[SC4M_AMPLITUDE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SC4M_AMPLITUDE].LowerBound = -40; port_range_hints[SC4M_AMPLITUDE].UpperBound = +12; /* Parameters for Gain reduction (dB) */ port_descriptors[SC4M_GAIN_RED] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[SC4M_GAIN_RED] = D_("Gain reduction (dB)"); port_range_hints[SC4M_GAIN_RED].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SC4M_GAIN_RED].LowerBound = -24; port_range_hints[SC4M_GAIN_RED].UpperBound = 0; /* Parameters for Input */ port_descriptors[SC4M_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SC4M_INPUT] = D_("Input"); port_range_hints[SC4M_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[SC4M_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SC4M_OUTPUT] = D_("Output"); port_range_hints[SC4M_OUTPUT].HintDescriptor = 0; sc4mDescriptor->activate = NULL; sc4mDescriptor->cleanup = cleanupSc4m; sc4mDescriptor->connect_port = connectPortSc4m; sc4mDescriptor->deactivate = NULL; sc4mDescriptor->instantiate = instantiateSc4m; sc4mDescriptor->run = runSc4m; sc4mDescriptor->run_adding = runAddingSc4m; sc4mDescriptor->set_run_adding_gain = setRunAddingGainSc4m; } } void __attribute__((destructor)) swh_fini() { if (sc4mDescriptor) { free((LADSPA_PortDescriptor *)sc4mDescriptor->PortDescriptors); free((char **)sc4mDescriptor->PortNames); free((LADSPA_PortRangeHint *)sc4mDescriptor->PortRangeHints); free(sc4mDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/se4_1883.c000066400000000000000000000430041247673406200206250ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "se4_1883.xml" #include "util/db.h" #include "util/rms.h" #define A_TBL 256 #define SE4_RMS_PEAK 0 #define SE4_ATTACK 1 #define SE4_RELEASE 2 #define SE4_THRESHOLD 3 #define SE4_RATIO 4 #define SE4_KNEE 5 #define SE4_ATTENUATION 6 #define SE4_AMPLITUDE 7 #define SE4_GAIN_EXP 8 #define SE4_LEFT_IN 9 #define SE4_RIGHT_IN 10 #define SE4_LEFT_OUT 11 #define SE4_RIGHT_OUT 12 static LADSPA_Descriptor *se4Descriptor = NULL; typedef struct { LADSPA_Data *rms_peak; LADSPA_Data *attack; LADSPA_Data *release; LADSPA_Data *threshold; LADSPA_Data *ratio; LADSPA_Data *knee; LADSPA_Data *attenuation; LADSPA_Data *amplitude; LADSPA_Data *gain_exp; LADSPA_Data *left_in; LADSPA_Data *right_in; LADSPA_Data *left_out; LADSPA_Data *right_out; float amp; float * as; unsigned int count; float env; float env_peak; float env_rms; float gain; float gain_t; rms_env * rms; float sum; LADSPA_Data run_adding_gain; } Se4; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return se4Descriptor; default: return NULL; } } static void cleanupSe4(LADSPA_Handle instance) { #line 46 "se4_1883.xml" Se4 *plugin_data = (Se4 *)instance; rms_env_free(plugin_data->rms); free(plugin_data->as); free(instance); } static void connectPortSe4( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Se4 *plugin; plugin = (Se4 *)instance; switch (port) { case SE4_RMS_PEAK: plugin->rms_peak = data; break; case SE4_ATTACK: plugin->attack = data; break; case SE4_RELEASE: plugin->release = data; break; case SE4_THRESHOLD: plugin->threshold = data; break; case SE4_RATIO: plugin->ratio = data; break; case SE4_KNEE: plugin->knee = data; break; case SE4_ATTENUATION: plugin->attenuation = data; break; case SE4_AMPLITUDE: plugin->amplitude = data; break; case SE4_GAIN_EXP: plugin->gain_exp = data; break; case SE4_LEFT_IN: plugin->left_in = data; break; case SE4_RIGHT_IN: plugin->right_in = data; break; case SE4_LEFT_OUT: plugin->left_out = data; break; case SE4_RIGHT_OUT: plugin->right_out = data; break; } } static LADSPA_Handle instantiateSe4( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Se4 *plugin_data = (Se4 *)malloc(sizeof(Se4)); float amp; float *as = NULL; unsigned int count; float env; float env_peak; float env_rms; float gain; float gain_t; rms_env *rms = NULL; float sum; #line 23 "se4_1883.xml" unsigned int i; float sample_rate = (float)s_rate; rms = rms_env_new(); sum = 0.0f; amp = 0.0f; gain = 0.0f; gain_t = 0.0f; env = 0.0f; env_rms = 0.0f; env_peak = 0.0f; count = 0; as = malloc(A_TBL * sizeof(float)); as[0] = 1.0f; for (i=1; iamp = amp; plugin_data->as = as; plugin_data->count = count; plugin_data->env = env; plugin_data->env_peak = env_peak; plugin_data->env_rms = env_rms; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->rms = rms; plugin_data->sum = sum; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSe4(LADSPA_Handle instance, unsigned long sample_count) { Se4 *plugin_data = (Se4 *)instance; /* RMS/peak (float value) */ const LADSPA_Data rms_peak = *(plugin_data->rms_peak); /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Attenuation (dB) (float value) */ const LADSPA_Data attenuation = *(plugin_data->attenuation); /* Left input (array of floats of length sample_count) */ const LADSPA_Data * const left_in = plugin_data->left_in; /* Right input (array of floats of length sample_count) */ const LADSPA_Data * const right_in = plugin_data->right_in; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const left_out = plugin_data->left_out; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const right_out = plugin_data->right_out; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float env_peak = plugin_data->env_peak; float env_rms = plugin_data->env_rms; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 51 "se4_1883.xml" unsigned long pos; const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = ratio / (ratio - 1.0f); const float mug = db2lin(attenuation); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float la = fabs(left_in[pos]); const float ra = fabs(right_in[pos]); const float lev_in = f_max(la, ra); sum += lev_in * lev_in; if (amp > env_rms) { env_rms = env_rms * ga + amp * (1.0f - ga); } else { env_rms = env_rms * gr + amp * (1.0f - gr); } if (lev_in > env_peak) { env_peak = env_peak * ga + lev_in * (1.0f - ga); } else { env_peak = env_peak * gr + lev_in * (1.0f - gr); } if ((count++ & 3) == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (isnan(env_rms)) { // This can happen sometimes, but I don't know why env_rms = 0.0f; } env = LIN_INTERP(rms_peak, env_rms, env_peak); if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(left_out[pos], left_in[pos] * gain * mug); buffer_write(right_out[pos], right_in[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->env_rms = env_rms; plugin_data->env_peak = env_peak; plugin_data->count = count; *(plugin_data->amplitude) = lin2db(env); *(plugin_data->gain_exp) = lin2db(gain); } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSe4(LADSPA_Handle instance, LADSPA_Data gain) { ((Se4 *)instance)->run_adding_gain = gain; } static void runAddingSe4(LADSPA_Handle instance, unsigned long sample_count) { Se4 *plugin_data = (Se4 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* RMS/peak (float value) */ const LADSPA_Data rms_peak = *(plugin_data->rms_peak); /* Attack time (ms) (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Release time (ms) (float value) */ const LADSPA_Data release = *(plugin_data->release); /* Threshold level (dB) (float value) */ const LADSPA_Data threshold = *(plugin_data->threshold); /* Ratio (1:n) (float value) */ const LADSPA_Data ratio = *(plugin_data->ratio); /* Knee radius (dB) (float value) */ const LADSPA_Data knee = *(plugin_data->knee); /* Attenuation (dB) (float value) */ const LADSPA_Data attenuation = *(plugin_data->attenuation); /* Left input (array of floats of length sample_count) */ const LADSPA_Data * const left_in = plugin_data->left_in; /* Right input (array of floats of length sample_count) */ const LADSPA_Data * const right_in = plugin_data->right_in; /* Left output (array of floats of length sample_count) */ LADSPA_Data * const left_out = plugin_data->left_out; /* Right output (array of floats of length sample_count) */ LADSPA_Data * const right_out = plugin_data->right_out; float amp = plugin_data->amp; float * as = plugin_data->as; unsigned int count = plugin_data->count; float env = plugin_data->env; float env_peak = plugin_data->env_peak; float env_rms = plugin_data->env_rms; float gain = plugin_data->gain; float gain_t = plugin_data->gain_t; rms_env * rms = plugin_data->rms; float sum = plugin_data->sum; #line 51 "se4_1883.xml" unsigned long pos; const float ga = attack < 2.0f ? 0.0f : as[f_round(attack * 0.001f * (float)(A_TBL-1))]; const float gr = as[f_round(release * 0.001f * (float)(A_TBL-1))]; const float rs = ratio / (ratio - 1.0f); const float mug = db2lin(attenuation); const float knee_min = db2lin(threshold - knee); const float knee_max = db2lin(threshold + knee); const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; for (pos = 0; pos < sample_count; pos++) { const float la = fabs(left_in[pos]); const float ra = fabs(right_in[pos]); const float lev_in = f_max(la, ra); sum += lev_in * lev_in; if (amp > env_rms) { env_rms = env_rms * ga + amp * (1.0f - ga); } else { env_rms = env_rms * gr + amp * (1.0f - gr); } if (lev_in > env_peak) { env_peak = env_peak * ga + lev_in * (1.0f - ga); } else { env_peak = env_peak * gr + lev_in * (1.0f - gr); } if ((count++ & 3) == 3) { amp = rms_env_process(rms, sum * 0.25f); sum = 0.0f; if (isnan(env_rms)) { // This can happen sometimes, but I don't know why env_rms = 0.0f; } env = LIN_INTERP(rms_peak, env_rms, env_peak); if (env <= knee_min) { gain_t = 1.0f; } else if (env < knee_max) { const float x = -(threshold - knee - lin2db(env)) / knee; gain_t = db2lin(-knee * rs * x * x * 0.25f); } else { gain_t = db2lin((threshold - lin2db(env)) * rs); } } gain = gain * ef_a + gain_t * ef_ai; buffer_write(left_out[pos], left_in[pos] * gain * mug); buffer_write(right_out[pos], right_in[pos] * gain * mug); } plugin_data->sum = sum; plugin_data->amp = amp; plugin_data->gain = gain; plugin_data->gain_t = gain_t; plugin_data->env = env; plugin_data->env_rms = env_rms; plugin_data->env_peak = env_peak; plugin_data->count = count; *(plugin_data->amplitude) = lin2db(env); *(plugin_data->gain_exp) = lin2db(gain); } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif se4Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (se4Descriptor) { se4Descriptor->UniqueID = 1883; se4Descriptor->Label = "se4"; se4Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; se4Descriptor->Name = D_("SE4"); se4Descriptor->Maker = "Steve Harris "; se4Descriptor->Copyright = "GPL"; se4Descriptor->PortCount = 13; port_descriptors = (LADSPA_PortDescriptor *)calloc(13, sizeof(LADSPA_PortDescriptor)); se4Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(13, sizeof(LADSPA_PortRangeHint)); se4Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(13, sizeof(char*)); se4Descriptor->PortNames = (const char **)port_names; /* Parameters for RMS/peak */ port_descriptors[SE4_RMS_PEAK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_RMS_PEAK] = D_("RMS/peak"); port_range_hints[SE4_RMS_PEAK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[SE4_RMS_PEAK].LowerBound = 0; port_range_hints[SE4_RMS_PEAK].UpperBound = 1; /* Parameters for Attack time (ms) */ port_descriptors[SE4_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_ATTACK] = D_("Attack time (ms)"); port_range_hints[SE4_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SE4_ATTACK].LowerBound = 1.5; port_range_hints[SE4_ATTACK].UpperBound = 400; /* Parameters for Release time (ms) */ port_descriptors[SE4_RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_RELEASE] = D_("Release time (ms)"); port_range_hints[SE4_RELEASE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[SE4_RELEASE].LowerBound = 2; port_range_hints[SE4_RELEASE].UpperBound = 800; /* Parameters for Threshold level (dB) */ port_descriptors[SE4_THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_THRESHOLD] = D_("Threshold level (dB)"); port_range_hints[SE4_THRESHOLD].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SE4_THRESHOLD].LowerBound = -30; port_range_hints[SE4_THRESHOLD].UpperBound = 0; /* Parameters for Ratio (1:n) */ port_descriptors[SE4_RATIO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_RATIO] = D_("Ratio (1:n)"); port_range_hints[SE4_RATIO].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SE4_RATIO].LowerBound = 1; port_range_hints[SE4_RATIO].UpperBound = 20; /* Parameters for Knee radius (dB) */ port_descriptors[SE4_KNEE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_KNEE] = D_("Knee radius (dB)"); port_range_hints[SE4_KNEE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SE4_KNEE].LowerBound = 1; port_range_hints[SE4_KNEE].UpperBound = 10; /* Parameters for Attenuation (dB) */ port_descriptors[SE4_ATTENUATION] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SE4_ATTENUATION] = D_("Attenuation (dB)"); port_range_hints[SE4_ATTENUATION].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SE4_ATTENUATION].LowerBound = -24; port_range_hints[SE4_ATTENUATION].UpperBound = 0; /* Parameters for Amplitude (dB) */ port_descriptors[SE4_AMPLITUDE] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[SE4_AMPLITUDE] = D_("Amplitude (dB)"); port_range_hints[SE4_AMPLITUDE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SE4_AMPLITUDE].LowerBound = -40; port_range_hints[SE4_AMPLITUDE].UpperBound = +12; /* Parameters for Gain expansion (dB) */ port_descriptors[SE4_GAIN_EXP] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_names[SE4_GAIN_EXP] = D_("Gain expansion (dB)"); port_range_hints[SE4_GAIN_EXP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SE4_GAIN_EXP].LowerBound = 0; port_range_hints[SE4_GAIN_EXP].UpperBound = +24; /* Parameters for Left input */ port_descriptors[SE4_LEFT_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SE4_LEFT_IN] = D_("Left input"); port_range_hints[SE4_LEFT_IN].HintDescriptor = 0; /* Parameters for Right input */ port_descriptors[SE4_RIGHT_IN] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SE4_RIGHT_IN] = D_("Right input"); port_range_hints[SE4_RIGHT_IN].HintDescriptor = 0; /* Parameters for Left output */ port_descriptors[SE4_LEFT_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SE4_LEFT_OUT] = D_("Left output"); port_range_hints[SE4_LEFT_OUT].HintDescriptor = 0; /* Parameters for Right output */ port_descriptors[SE4_RIGHT_OUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SE4_RIGHT_OUT] = D_("Right output"); port_range_hints[SE4_RIGHT_OUT].HintDescriptor = 0; se4Descriptor->activate = NULL; se4Descriptor->cleanup = cleanupSe4; se4Descriptor->connect_port = connectPortSe4; se4Descriptor->deactivate = NULL; se4Descriptor->instantiate = instantiateSe4; se4Descriptor->run = runSe4; se4Descriptor->run_adding = runAddingSe4; se4Descriptor->set_run_adding_gain = setRunAddingGainSe4; } } void __attribute__((destructor)) swh_fini() { if (se4Descriptor) { free((LADSPA_PortDescriptor *)se4Descriptor->PortDescriptors); free((char **)se4Descriptor->PortNames); free((LADSPA_PortRangeHint *)se4Descriptor->PortRangeHints); free(se4Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/shaper_1187.c000066400000000000000000000155441247673406200214210ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define SHAPER_SHAPEP 0 #define SHAPER_INPUT 1 #define SHAPER_OUTPUT 2 static LADSPA_Descriptor *shaperDescriptor = NULL; typedef struct { LADSPA_Data *shapep; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } Shaper; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return shaperDescriptor; default: return NULL; } } static void cleanupShaper(LADSPA_Handle instance) { free(instance); } static void connectPortShaper( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Shaper *plugin; plugin = (Shaper *)instance; switch (port) { case SHAPER_SHAPEP: plugin->shapep = data; break; case SHAPER_INPUT: plugin->input = data; break; case SHAPER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateShaper( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Shaper *plugin_data = (Shaper *)malloc(sizeof(Shaper)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runShaper(LADSPA_Handle instance, unsigned long sample_count) { Shaper *plugin_data = (Shaper *)instance; /* Waveshape (float value) */ const LADSPA_Data shapep = *(plugin_data->shapep); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "shaper_1187.xml" int pos; float shape = 0.0f; if (shapep < 1.0f && shapep > -1.0f) { shape = 1.0f; } else if (shape < 0) { shape = -1.0f / shape; } else { shape = shapep; } for (pos = 0; pos < sample_count; pos++) { if (input[pos] < 0.0f) { buffer_write(output[pos], -pow(-input[pos], shape)); } else { buffer_write(output[pos], pow(input[pos], shape)); } } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainShaper(LADSPA_Handle instance, LADSPA_Data gain) { ((Shaper *)instance)->run_adding_gain = gain; } static void runAddingShaper(LADSPA_Handle instance, unsigned long sample_count) { Shaper *plugin_data = (Shaper *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Waveshape (float value) */ const LADSPA_Data shapep = *(plugin_data->shapep); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 17 "shaper_1187.xml" int pos; float shape = 0.0f; if (shapep < 1.0f && shapep > -1.0f) { shape = 1.0f; } else if (shape < 0) { shape = -1.0f / shape; } else { shape = shapep; } for (pos = 0; pos < sample_count; pos++) { if (input[pos] < 0.0f) { buffer_write(output[pos], -pow(-input[pos], shape)); } else { buffer_write(output[pos], pow(input[pos], shape)); } } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif shaperDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (shaperDescriptor) { shaperDescriptor->UniqueID = 1187; shaperDescriptor->Label = "shaper"; shaperDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; shaperDescriptor->Name = D_("Wave shaper"); shaperDescriptor->Maker = "Steve Harris "; shaperDescriptor->Copyright = "GPL"; shaperDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); shaperDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); shaperDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); shaperDescriptor->PortNames = (const char **)port_names; /* Parameters for Waveshape */ port_descriptors[SHAPER_SHAPEP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SHAPER_SHAPEP] = D_("Waveshape"); port_range_hints[SHAPER_SHAPEP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SHAPER_SHAPEP].LowerBound = -10; port_range_hints[SHAPER_SHAPEP].UpperBound = +10; /* Parameters for Input */ port_descriptors[SHAPER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SHAPER_INPUT] = D_("Input"); port_range_hints[SHAPER_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SHAPER_INPUT].LowerBound = -1; port_range_hints[SHAPER_INPUT].UpperBound = +1; /* Parameters for Output */ port_descriptors[SHAPER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SHAPER_OUTPUT] = D_("Output"); port_range_hints[SHAPER_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SHAPER_OUTPUT].LowerBound = -1; port_range_hints[SHAPER_OUTPUT].UpperBound = +1; shaperDescriptor->activate = NULL; shaperDescriptor->cleanup = cleanupShaper; shaperDescriptor->connect_port = connectPortShaper; shaperDescriptor->deactivate = NULL; shaperDescriptor->instantiate = instantiateShaper; shaperDescriptor->run = runShaper; shaperDescriptor->run_adding = runAddingShaper; shaperDescriptor->set_run_adding_gain = setRunAddingGainShaper; } } void __attribute__((destructor)) swh_fini() { if (shaperDescriptor) { free((LADSPA_PortDescriptor *)shaperDescriptor->PortDescriptors); free((char **)shaperDescriptor->PortNames); free((LADSPA_PortRangeHint *)shaperDescriptor->PortRangeHints); free(shaperDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sifter_1210.c000066400000000000000000000275011247673406200214120ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "sifter_1210.xml" #include "ladspa-util.h" #define MAX_BSIZE 1000 inline int partition(LADSPA_Data array[], int left, int right); #ifdef __clang__ void q_sort(LADSPA_Data array[], int left, int right) { #else inline void q_sort(LADSPA_Data array[], int left, int right) { #endif float pivot = partition(array, left, right); if (left < pivot) { q_sort(array, left, pivot-1); } if (right > pivot) { q_sort(array, pivot+1, right); } } inline int partition(LADSPA_Data array[], int left, int right) { float pivot = array[left]; while (left < right) { while (array[right] >= pivot && left < right) { right--; } if (left != right) { array[left] = array[right]; left++; } while (array[left] <= pivot && left < right) { left++; } if (left != right) { array[right] = array[left]; right--; } } array[left] = pivot; return left; } #define SIFTER_SIZE 0 #define SIFTER_INPUT 1 #define SIFTER_OUTPUT 2 static LADSPA_Descriptor *sifterDescriptor = NULL; typedef struct { LADSPA_Data *size; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *b1; long b1ptr; LADSPA_Data *b2; long b2ptr; LADSPA_Data *ob; LADSPA_Data *rc; LADSPA_Data run_adding_gain; } Sifter; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sifterDescriptor; default: return NULL; } } static void activateSifter(LADSPA_Handle instance) { Sifter *plugin_data = (Sifter *)instance; LADSPA_Data *b1 = plugin_data->b1; long b1ptr = plugin_data->b1ptr; LADSPA_Data *b2 = plugin_data->b2; long b2ptr = plugin_data->b2ptr; LADSPA_Data *ob = plugin_data->ob; LADSPA_Data *rc = plugin_data->rc; #line 84 "sifter_1210.xml" b1ptr = 0; b2ptr = 0; memset(b1, 0, MAX_BSIZE * sizeof(LADSPA_Data)); memset(b2, 0, MAX_BSIZE * sizeof(LADSPA_Data)); memset(ob, 0, MAX_BSIZE * sizeof(LADSPA_Data)); plugin_data->b1 = b1; plugin_data->b1ptr = b1ptr; plugin_data->b2 = b2; plugin_data->b2ptr = b2ptr; plugin_data->ob = ob; plugin_data->rc = rc; } static void cleanupSifter(LADSPA_Handle instance) { #line 92 "sifter_1210.xml" Sifter *plugin_data = (Sifter *)instance; free(plugin_data->b1); free(plugin_data->b2); free(plugin_data->ob); free(plugin_data->rc); free(instance); } static void connectPortSifter( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Sifter *plugin; plugin = (Sifter *)instance; switch (port) { case SIFTER_SIZE: plugin->size = data; break; case SIFTER_INPUT: plugin->input = data; break; case SIFTER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSifter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Sifter *plugin_data = (Sifter *)malloc(sizeof(Sifter)); LADSPA_Data *b1 = NULL; long b1ptr; LADSPA_Data *b2 = NULL; long b2ptr; LADSPA_Data *ob = NULL; LADSPA_Data *rc = NULL; #line 60 "sifter_1210.xml" long i; float scla = (float)MAX_BSIZE * 0.5f; float sclb = (float)MAX_BSIZE; b1 = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); b2 = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); ob = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); rc = (LADSPA_Data *)calloc(MAX_BSIZE, sizeof(LADSPA_Data)); // Calculate raised cosine table, to build windowing function from rc[0] = cos(((0.0f - scla) / sclb) * M_PI); rc[0] *= rc[0]; for (i=1; ib1 = b1; plugin_data->b1ptr = b1ptr; plugin_data->b2 = b2; plugin_data->b2ptr = b2ptr; plugin_data->ob = ob; plugin_data->rc = rc; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSifter(LADSPA_Handle instance, unsigned long sample_count) { Sifter *plugin_data = (Sifter *)instance; /* Sift size (float value) */ const LADSPA_Data size = *(plugin_data->size); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * b1 = plugin_data->b1; long b1ptr = plugin_data->b1ptr; LADSPA_Data * b2 = plugin_data->b2; long b2ptr = plugin_data->b2ptr; LADSPA_Data * ob = plugin_data->ob; LADSPA_Data * rc = plugin_data->rc; #line 99 "sifter_1210.xml" unsigned long pos, i; long bsize = f_round(LIMIT(size, 1, MAX_BSIZE)); for (pos = 0; pos < sample_count; pos++) { if (b1ptr >= bsize) { float wstep = (float)MAX_BSIZE / (float)b1ptr, wpos = 0.0f; q_sort(b1, 0, b1ptr); for (i=0; i= bsize) { float wstep = (float)MAX_BSIZE / (float)b2ptr, wpos = 0.0f; int offset = (b2ptr+1)/2; q_sort(b2, 0, b2ptr); for (i=0; ib1ptr = b1ptr; plugin_data->b2ptr = b2ptr; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSifter(LADSPA_Handle instance, LADSPA_Data gain) { ((Sifter *)instance)->run_adding_gain = gain; } static void runAddingSifter(LADSPA_Handle instance, unsigned long sample_count) { Sifter *plugin_data = (Sifter *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Sift size (float value) */ const LADSPA_Data size = *(plugin_data->size); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * b1 = plugin_data->b1; long b1ptr = plugin_data->b1ptr; LADSPA_Data * b2 = plugin_data->b2; long b2ptr = plugin_data->b2ptr; LADSPA_Data * ob = plugin_data->ob; LADSPA_Data * rc = plugin_data->rc; #line 99 "sifter_1210.xml" unsigned long pos, i; long bsize = f_round(LIMIT(size, 1, MAX_BSIZE)); for (pos = 0; pos < sample_count; pos++) { if (b1ptr >= bsize) { float wstep = (float)MAX_BSIZE / (float)b1ptr, wpos = 0.0f; q_sort(b1, 0, b1ptr); for (i=0; i= bsize) { float wstep = (float)MAX_BSIZE / (float)b2ptr, wpos = 0.0f; int offset = (b2ptr+1)/2; q_sort(b2, 0, b2ptr); for (i=0; ib1ptr = b1ptr; plugin_data->b2ptr = b2ptr; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sifterDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sifterDescriptor) { sifterDescriptor->UniqueID = 1210; sifterDescriptor->Label = "sifter"; sifterDescriptor->Properties = 0; sifterDescriptor->Name = D_("Signal sifter"); sifterDescriptor->Maker = "Steve Harris "; sifterDescriptor->Copyright = "GPL"; sifterDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); sifterDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); sifterDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); sifterDescriptor->PortNames = (const char **)port_names; /* Parameters for Sift size */ port_descriptors[SIFTER_SIZE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SIFTER_SIZE] = D_("Sift size"); port_range_hints[SIFTER_SIZE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SIFTER_SIZE].LowerBound = 1; port_range_hints[SIFTER_SIZE].UpperBound = MAX_BSIZE; /* Parameters for Input */ port_descriptors[SIFTER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SIFTER_INPUT] = D_("Input"); port_range_hints[SIFTER_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[SIFTER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SIFTER_OUTPUT] = D_("Output"); port_range_hints[SIFTER_OUTPUT].HintDescriptor = 0; sifterDescriptor->activate = activateSifter; sifterDescriptor->cleanup = cleanupSifter; sifterDescriptor->connect_port = connectPortSifter; sifterDescriptor->deactivate = NULL; sifterDescriptor->instantiate = instantiateSifter; sifterDescriptor->run = runSifter; sifterDescriptor->run_adding = runAddingSifter; sifterDescriptor->set_run_adding_gain = setRunAddingGainSifter; } } void __attribute__((destructor)) swh_fini() { if (sifterDescriptor) { free((LADSPA_PortDescriptor *)sifterDescriptor->PortDescriptors); free((char **)sifterDescriptor->PortNames); free((LADSPA_PortRangeHint *)sifterDescriptor->PortRangeHints); free(sifterDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sin_cos_1881.c000066400000000000000000000176171247673406200216000ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "sin_cos_1881.xml" #include "ladspa-util.h" #define SINCOS_FREQ 0 #define SINCOS_PITCH 1 #define SINCOS_SINE 2 #define SINCOS_COSINE 3 static LADSPA_Descriptor *sinCosDescriptor = NULL; typedef struct { LADSPA_Data *freq; LADSPA_Data *pitch; LADSPA_Data *sine; LADSPA_Data *cosine; float fs; double last_om; double phi; LADSPA_Data run_adding_gain; } SinCos; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sinCosDescriptor; default: return NULL; } } static void cleanupSinCos(LADSPA_Handle instance) { free(instance); } static void connectPortSinCos( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { SinCos *plugin; plugin = (SinCos *)instance; switch (port) { case SINCOS_FREQ: plugin->freq = data; break; case SINCOS_PITCH: plugin->pitch = data; break; case SINCOS_SINE: plugin->sine = data; break; case SINCOS_COSINE: plugin->cosine = data; break; } } static LADSPA_Handle instantiateSinCos( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { SinCos *plugin_data = (SinCos *)malloc(sizeof(SinCos)); float fs; double last_om; double phi; #line 21 "sin_cos_1881.xml" fs = (float)s_rate; phi = 0.0; last_om = 0.0; plugin_data->fs = fs; plugin_data->last_om = last_om; plugin_data->phi = phi; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSinCos(LADSPA_Handle instance, unsigned long sample_count) { SinCos *plugin_data = (SinCos *)instance; /* Base frequency (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Pitch offset (float value) */ const LADSPA_Data pitch = *(plugin_data->pitch); /* Sine output (array of floats of length sample_count) */ LADSPA_Data * const sine = plugin_data->sine; /* Cosine output (array of floats of length sample_count) */ LADSPA_Data * const cosine = plugin_data->cosine; float fs = plugin_data->fs; double last_om = plugin_data->last_om; double phi = plugin_data->phi; #line 27 "sin_cos_1881.xml" unsigned long pos; const double target_om = 2.0 * M_PI * f_clamp(freq, 0.0f, 0.5f) * pow(2.0, f_clamp(pitch, 0.0f, 16.0f)) / fs; const double om_d = (target_om - last_om) / (double)sample_count; double om = last_om; for (pos = 0; pos < sample_count; pos++) { buffer_write(sine[pos], sin(phi)); buffer_write(cosine[pos], cos(phi)); om += om_d; phi += om; } while (phi > 2.0 * M_PI) { phi -= 2.0 * M_PI; } plugin_data->phi = phi; plugin_data->last_om = target_om; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSinCos(LADSPA_Handle instance, LADSPA_Data gain) { ((SinCos *)instance)->run_adding_gain = gain; } static void runAddingSinCos(LADSPA_Handle instance, unsigned long sample_count) { SinCos *plugin_data = (SinCos *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Base frequency (Hz) (float value) */ const LADSPA_Data freq = *(plugin_data->freq); /* Pitch offset (float value) */ const LADSPA_Data pitch = *(plugin_data->pitch); /* Sine output (array of floats of length sample_count) */ LADSPA_Data * const sine = plugin_data->sine; /* Cosine output (array of floats of length sample_count) */ LADSPA_Data * const cosine = plugin_data->cosine; float fs = plugin_data->fs; double last_om = plugin_data->last_om; double phi = plugin_data->phi; #line 27 "sin_cos_1881.xml" unsigned long pos; const double target_om = 2.0 * M_PI * f_clamp(freq, 0.0f, 0.5f) * pow(2.0, f_clamp(pitch, 0.0f, 16.0f)) / fs; const double om_d = (target_om - last_om) / (double)sample_count; double om = last_om; for (pos = 0; pos < sample_count; pos++) { buffer_write(sine[pos], sin(phi)); buffer_write(cosine[pos], cos(phi)); om += om_d; phi += om; } while (phi > 2.0 * M_PI) { phi -= 2.0 * M_PI; } plugin_data->phi = phi; plugin_data->last_om = target_om; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sinCosDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sinCosDescriptor) { sinCosDescriptor->UniqueID = 1881; sinCosDescriptor->Label = "sinCos"; sinCosDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sinCosDescriptor->Name = D_("Sine + cosine oscillator"); sinCosDescriptor->Maker = "Steve Harris "; sinCosDescriptor->Copyright = "GPL"; sinCosDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); sinCosDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); sinCosDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); sinCosDescriptor->PortNames = (const char **)port_names; /* Parameters for Base frequency (Hz) */ port_descriptors[SINCOS_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SINCOS_FREQ] = D_("Base frequency (Hz)"); port_range_hints[SINCOS_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440 | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC; port_range_hints[SINCOS_FREQ].LowerBound = 0.000001; port_range_hints[SINCOS_FREQ].UpperBound = 0.5; /* Parameters for Pitch offset */ port_descriptors[SINCOS_PITCH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SINCOS_PITCH] = D_("Pitch offset"); port_range_hints[SINCOS_PITCH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SINCOS_PITCH].LowerBound = 0; port_range_hints[SINCOS_PITCH].UpperBound = 8; /* Parameters for Sine output */ port_descriptors[SINCOS_SINE] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SINCOS_SINE] = D_("Sine output"); port_range_hints[SINCOS_SINE].HintDescriptor = 0; /* Parameters for Cosine output */ port_descriptors[SINCOS_COSINE] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SINCOS_COSINE] = D_("Cosine output"); port_range_hints[SINCOS_COSINE].HintDescriptor = 0; sinCosDescriptor->activate = NULL; sinCosDescriptor->cleanup = cleanupSinCos; sinCosDescriptor->connect_port = connectPortSinCos; sinCosDescriptor->deactivate = NULL; sinCosDescriptor->instantiate = instantiateSinCos; sinCosDescriptor->run = runSinCos; sinCosDescriptor->run_adding = runAddingSinCos; sinCosDescriptor->set_run_adding_gain = setRunAddingGainSinCos; } } void __attribute__((destructor)) swh_fini() { if (sinCosDescriptor) { free((LADSPA_PortDescriptor *)sinCosDescriptor->PortDescriptors); free((char **)sinCosDescriptor->PortNames); free((LADSPA_PortRangeHint *)sinCosDescriptor->PortRangeHints); free(sinCosDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/single_para_1203.c000066400000000000000000000214201247673406200223760ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "single_para_1203.xml" #include "util/biquad.h" #define SINGLEPARA_GAIN 0 #define SINGLEPARA_FC 1 #define SINGLEPARA_BW 2 #define SINGLEPARA_INPUT 3 #define SINGLEPARA_OUTPUT 4 static LADSPA_Descriptor *singleParaDescriptor = NULL; typedef struct { LADSPA_Data *gain; LADSPA_Data *fc; LADSPA_Data *bw; LADSPA_Data *input; LADSPA_Data *output; biquad * filter; float fs; LADSPA_Data run_adding_gain; } SinglePara; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return singleParaDescriptor; default: return NULL; } } static void activateSinglePara(LADSPA_Handle instance) { SinglePara *plugin_data = (SinglePara *)instance; biquad *filter = plugin_data->filter; float fs = plugin_data->fs; #line 26 "single_para_1203.xml" biquad_init(filter); plugin_data->filter = filter; plugin_data->fs = fs; } static void cleanupSinglePara(LADSPA_Handle instance) { #line 30 "single_para_1203.xml" SinglePara *plugin_data = (SinglePara *)instance; free(plugin_data->filter); free(instance); } static void connectPortSinglePara( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { SinglePara *plugin; plugin = (SinglePara *)instance; switch (port) { case SINGLEPARA_GAIN: plugin->gain = data; break; case SINGLEPARA_FC: plugin->fc = data; break; case SINGLEPARA_BW: plugin->bw = data; break; case SINGLEPARA_INPUT: plugin->input = data; break; case SINGLEPARA_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSinglePara( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { SinglePara *plugin_data = (SinglePara *)malloc(sizeof(SinglePara)); biquad *filter = NULL; float fs; #line 20 "single_para_1203.xml" fs = (float)s_rate; filter = malloc(sizeof(biquad)); biquad_init(filter); plugin_data->filter = filter; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSinglePara(LADSPA_Handle instance, unsigned long sample_count) { SinglePara *plugin_data = (SinglePara *)instance; /* Gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Frequency (Hz) (float value) */ const LADSPA_Data fc = *(plugin_data->fc); /* Bandwidth (octaves) (float value) */ const LADSPA_Data bw = *(plugin_data->bw); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filter = plugin_data->filter; float fs = plugin_data->fs; #line 34 "single_para_1203.xml" unsigned long pos; eq_set_params(filter, fc, gain, bw, fs); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], biquad_run(filter, input[pos])); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSinglePara(LADSPA_Handle instance, LADSPA_Data gain) { ((SinglePara *)instance)->run_adding_gain = gain; } static void runAddingSinglePara(LADSPA_Handle instance, unsigned long sample_count) { SinglePara *plugin_data = (SinglePara *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Gain (dB) (float value) */ const LADSPA_Data gain = *(plugin_data->gain); /* Frequency (Hz) (float value) */ const LADSPA_Data fc = *(plugin_data->fc); /* Bandwidth (octaves) (float value) */ const LADSPA_Data bw = *(plugin_data->bw); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filter = plugin_data->filter; float fs = plugin_data->fs; #line 34 "single_para_1203.xml" unsigned long pos; eq_set_params(filter, fc, gain, bw, fs); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], biquad_run(filter, input[pos])); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif singleParaDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (singleParaDescriptor) { singleParaDescriptor->UniqueID = 1203; singleParaDescriptor->Label = "singlePara"; singleParaDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; singleParaDescriptor->Name = D_("Single band parametric"); singleParaDescriptor->Maker = "Steve Harris "; singleParaDescriptor->Copyright = "GPL"; singleParaDescriptor->PortCount = 5; port_descriptors = (LADSPA_PortDescriptor *)calloc(5, sizeof(LADSPA_PortDescriptor)); singleParaDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(5, sizeof(LADSPA_PortRangeHint)); singleParaDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(5, sizeof(char*)); singleParaDescriptor->PortNames = (const char **)port_names; /* Parameters for Gain (dB) */ port_descriptors[SINGLEPARA_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SINGLEPARA_GAIN] = D_("Gain (dB)"); port_range_hints[SINGLEPARA_GAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SINGLEPARA_GAIN].LowerBound = -70; port_range_hints[SINGLEPARA_GAIN].UpperBound = +30; /* Parameters for Frequency (Hz) */ port_descriptors[SINGLEPARA_FC] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SINGLEPARA_FC] = D_("Frequency (Hz)"); port_range_hints[SINGLEPARA_FC].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_440; port_range_hints[SINGLEPARA_FC].LowerBound = 0; port_range_hints[SINGLEPARA_FC].UpperBound = 0.4; /* Parameters for Bandwidth (octaves) */ port_descriptors[SINGLEPARA_BW] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SINGLEPARA_BW] = D_("Bandwidth (octaves)"); port_range_hints[SINGLEPARA_BW].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[SINGLEPARA_BW].LowerBound = 0; port_range_hints[SINGLEPARA_BW].UpperBound = 4; /* Parameters for Input */ port_descriptors[SINGLEPARA_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SINGLEPARA_INPUT] = D_("Input"); port_range_hints[SINGLEPARA_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SINGLEPARA_INPUT].LowerBound = -1.0; port_range_hints[SINGLEPARA_INPUT].UpperBound = +1.0; /* Parameters for Output */ port_descriptors[SINGLEPARA_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SINGLEPARA_OUTPUT] = D_("Output"); port_range_hints[SINGLEPARA_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SINGLEPARA_OUTPUT].LowerBound = -1.0; port_range_hints[SINGLEPARA_OUTPUT].UpperBound = +1.0; singleParaDescriptor->activate = activateSinglePara; singleParaDescriptor->cleanup = cleanupSinglePara; singleParaDescriptor->connect_port = connectPortSinglePara; singleParaDescriptor->deactivate = NULL; singleParaDescriptor->instantiate = instantiateSinglePara; singleParaDescriptor->run = runSinglePara; singleParaDescriptor->run_adding = runAddingSinglePara; singleParaDescriptor->set_run_adding_gain = setRunAddingGainSinglePara; } } void __attribute__((destructor)) swh_fini() { if (singleParaDescriptor) { free((LADSPA_PortDescriptor *)singleParaDescriptor->PortDescriptors); free((char **)singleParaDescriptor->PortNames); free((LADSPA_PortRangeHint *)singleParaDescriptor->PortRangeHints); free(singleParaDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c000066400000000000000000000161031247673406200237150ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define SINUSWAVEWRAPPER_WRAP 0 #define SINUSWAVEWRAPPER_INPUT 1 #define SINUSWAVEWRAPPER_OUTPUT 2 static LADSPA_Descriptor *sinusWavewrapperDescriptor = NULL; typedef struct { LADSPA_Data *wrap; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data run_adding_gain; } SinusWavewrapper; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return sinusWavewrapperDescriptor; default: return NULL; } } static void cleanupSinusWavewrapper(LADSPA_Handle instance) { free(instance); } static void connectPortSinusWavewrapper( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { SinusWavewrapper *plugin; plugin = (SinusWavewrapper *)instance; switch (port) { case SINUSWAVEWRAPPER_WRAP: plugin->wrap = data; break; case SINUSWAVEWRAPPER_INPUT: plugin->input = data; break; case SINUSWAVEWRAPPER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSinusWavewrapper( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { SinusWavewrapper *plugin_data = (SinusWavewrapper *)malloc(sizeof(SinusWavewrapper)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSinusWavewrapper(LADSPA_Handle instance, unsigned long sample_count) { SinusWavewrapper *plugin_data = (SinusWavewrapper *)instance; /* Wrap degree (float value) */ const LADSPA_Data wrap = *(plugin_data->wrap); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 16 "sinus_wavewrapper_1198.xml" float coef = wrap * M_PI; unsigned long pos; if (coef < 0.05f) { coef = 0.05f; } for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], sin(input[pos] * coef)); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSinusWavewrapper(LADSPA_Handle instance, LADSPA_Data gain) { ((SinusWavewrapper *)instance)->run_adding_gain = gain; } static void runAddingSinusWavewrapper(LADSPA_Handle instance, unsigned long sample_count) { SinusWavewrapper *plugin_data = (SinusWavewrapper *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Wrap degree (float value) */ const LADSPA_Data wrap = *(plugin_data->wrap); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; #line 16 "sinus_wavewrapper_1198.xml" float coef = wrap * M_PI; unsigned long pos; if (coef < 0.05f) { coef = 0.05f; } for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], sin(input[pos] * coef)); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif sinusWavewrapperDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (sinusWavewrapperDescriptor) { sinusWavewrapperDescriptor->UniqueID = 1198; sinusWavewrapperDescriptor->Label = "sinusWavewrapper"; sinusWavewrapperDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; sinusWavewrapperDescriptor->Name = D_("Sinus wavewrapper"); sinusWavewrapperDescriptor->Maker = "Steve Harris "; sinusWavewrapperDescriptor->Copyright = "GPL"; sinusWavewrapperDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); sinusWavewrapperDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); sinusWavewrapperDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); sinusWavewrapperDescriptor->PortNames = (const char **)port_names; /* Parameters for Wrap degree */ port_descriptors[SINUSWAVEWRAPPER_WRAP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SINUSWAVEWRAPPER_WRAP] = D_("Wrap degree"); port_range_hints[SINUSWAVEWRAPPER_WRAP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SINUSWAVEWRAPPER_WRAP].LowerBound = 0; port_range_hints[SINUSWAVEWRAPPER_WRAP].UpperBound = 10; /* Parameters for Input */ port_descriptors[SINUSWAVEWRAPPER_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SINUSWAVEWRAPPER_INPUT] = D_("Input"); port_range_hints[SINUSWAVEWRAPPER_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SINUSWAVEWRAPPER_INPUT].LowerBound = -1; port_range_hints[SINUSWAVEWRAPPER_INPUT].UpperBound = +1; /* Parameters for Output */ port_descriptors[SINUSWAVEWRAPPER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SINUSWAVEWRAPPER_OUTPUT] = D_("Output"); port_range_hints[SINUSWAVEWRAPPER_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SINUSWAVEWRAPPER_OUTPUT].LowerBound = -1; port_range_hints[SINUSWAVEWRAPPER_OUTPUT].UpperBound = +1; sinusWavewrapperDescriptor->activate = NULL; sinusWavewrapperDescriptor->cleanup = cleanupSinusWavewrapper; sinusWavewrapperDescriptor->connect_port = connectPortSinusWavewrapper; sinusWavewrapperDescriptor->deactivate = NULL; sinusWavewrapperDescriptor->instantiate = instantiateSinusWavewrapper; sinusWavewrapperDescriptor->run = runSinusWavewrapper; sinusWavewrapperDescriptor->run_adding = runAddingSinusWavewrapper; sinusWavewrapperDescriptor->set_run_adding_gain = setRunAddingGainSinusWavewrapper; } } void __attribute__((destructor)) swh_fini() { if (sinusWavewrapperDescriptor) { free((LADSPA_PortDescriptor *)sinusWavewrapperDescriptor->PortDescriptors); free((char **)sinusWavewrapperDescriptor->PortNames); free((LADSPA_PortRangeHint *)sinusWavewrapperDescriptor->PortRangeHints); free(sinusWavewrapperDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/smooth_decimate_1414.c000066400000000000000000000231271247673406200232700ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "smooth_decimate_1414.xml" #include "ladspa-util.h" #define SMOOTHDECIMATE_RATE 0 #define SMOOTHDECIMATE_SMOOTH 1 #define SMOOTHDECIMATE_INPUT 2 #define SMOOTHDECIMATE_OUTPUT 3 static LADSPA_Descriptor *smoothDecimateDescriptor = NULL; typedef struct { LADSPA_Data *rate; LADSPA_Data *smooth; LADSPA_Data *input; LADSPA_Data *output; float accum; float * buffer; int buffer_pos; float fs; LADSPA_Data run_adding_gain; } SmoothDecimate; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return smoothDecimateDescriptor; default: return NULL; } } static void activateSmoothDecimate(LADSPA_Handle instance) { SmoothDecimate *plugin_data = (SmoothDecimate *)instance; float accum = plugin_data->accum; float *buffer = plugin_data->buffer; int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; #line 26 "smooth_decimate_1414.xml" buffer_pos = 0; accum = 0.0f; plugin_data->accum = accum; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->fs = fs; } static void cleanupSmoothDecimate(LADSPA_Handle instance) { #line 55 "smooth_decimate_1414.xml" SmoothDecimate *plugin_data = (SmoothDecimate *)instance; free(plugin_data->buffer); free(instance); } static void connectPortSmoothDecimate( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { SmoothDecimate *plugin; plugin = (SmoothDecimate *)instance; switch (port) { case SMOOTHDECIMATE_RATE: plugin->rate = data; break; case SMOOTHDECIMATE_SMOOTH: plugin->smooth = data; break; case SMOOTHDECIMATE_INPUT: plugin->input = data; break; case SMOOTHDECIMATE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateSmoothDecimate( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { SmoothDecimate *plugin_data = (SmoothDecimate *)malloc(sizeof(SmoothDecimate)); float accum; float *buffer = NULL; int buffer_pos; float fs; #line 19 "smooth_decimate_1414.xml" buffer = calloc(8, sizeof(float)); buffer_pos = 0; accum = 0.0f; fs = (float)s_rate; plugin_data->accum = accum; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSmoothDecimate(LADSPA_Handle instance, unsigned long sample_count) { SmoothDecimate *plugin_data = (SmoothDecimate *)instance; /* Resample rate (float value) */ const LADSPA_Data rate = *(plugin_data->rate); /* Smoothing (float value) */ const LADSPA_Data smooth = *(plugin_data->smooth); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float accum = plugin_data->accum; float * buffer = plugin_data->buffer; int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; #line 31 "smooth_decimate_1414.xml" unsigned long pos; float smoothed; float inc = (rate / fs); inc = f_clamp(inc, 0.0f, 1.0f); for (pos = 0; pos < sample_count; pos++) { accum += inc; if (accum >= 1.0f) { accum -= 1.0f; buffer_pos = (buffer_pos + 1) & 7; buffer[buffer_pos] = input[pos]; } smoothed = cube_interp(accum, buffer[(buffer_pos - 3) & 7], buffer[(buffer_pos - 2) & 7], buffer[(buffer_pos - 1) & 7], buffer[buffer_pos]); buffer_write(output[pos], LIN_INTERP(smooth, buffer[(buffer_pos - 3) & 7], smoothed)); } plugin_data->accum = accum; plugin_data->buffer_pos = buffer_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSmoothDecimate(LADSPA_Handle instance, LADSPA_Data gain) { ((SmoothDecimate *)instance)->run_adding_gain = gain; } static void runAddingSmoothDecimate(LADSPA_Handle instance, unsigned long sample_count) { SmoothDecimate *plugin_data = (SmoothDecimate *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Resample rate (float value) */ const LADSPA_Data rate = *(plugin_data->rate); /* Smoothing (float value) */ const LADSPA_Data smooth = *(plugin_data->smooth); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float accum = plugin_data->accum; float * buffer = plugin_data->buffer; int buffer_pos = plugin_data->buffer_pos; float fs = plugin_data->fs; #line 31 "smooth_decimate_1414.xml" unsigned long pos; float smoothed; float inc = (rate / fs); inc = f_clamp(inc, 0.0f, 1.0f); for (pos = 0; pos < sample_count; pos++) { accum += inc; if (accum >= 1.0f) { accum -= 1.0f; buffer_pos = (buffer_pos + 1) & 7; buffer[buffer_pos] = input[pos]; } smoothed = cube_interp(accum, buffer[(buffer_pos - 3) & 7], buffer[(buffer_pos - 2) & 7], buffer[(buffer_pos - 1) & 7], buffer[buffer_pos]); buffer_write(output[pos], LIN_INTERP(smooth, buffer[(buffer_pos - 3) & 7], smoothed)); } plugin_data->accum = accum; plugin_data->buffer_pos = buffer_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif smoothDecimateDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (smoothDecimateDescriptor) { smoothDecimateDescriptor->UniqueID = 1414; smoothDecimateDescriptor->Label = "smoothDecimate"; smoothDecimateDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; smoothDecimateDescriptor->Name = D_("Smooth Decimator"); smoothDecimateDescriptor->Maker = "Steve Harris "; smoothDecimateDescriptor->Copyright = "GPL"; smoothDecimateDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); smoothDecimateDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); smoothDecimateDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); smoothDecimateDescriptor->PortNames = (const char **)port_names; /* Parameters for Resample rate */ port_descriptors[SMOOTHDECIMATE_RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SMOOTHDECIMATE_RATE] = D_("Resample rate"); port_range_hints[SMOOTHDECIMATE_RATE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SMOOTHDECIMATE_RATE].LowerBound = 0; port_range_hints[SMOOTHDECIMATE_RATE].UpperBound = 1; /* Parameters for Smoothing */ port_descriptors[SMOOTHDECIMATE_SMOOTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SMOOTHDECIMATE_SMOOTH] = D_("Smoothing"); port_range_hints[SMOOTHDECIMATE_SMOOTH].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[SMOOTHDECIMATE_SMOOTH].LowerBound = 0; port_range_hints[SMOOTHDECIMATE_SMOOTH].UpperBound = 1; /* Parameters for Input */ port_descriptors[SMOOTHDECIMATE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SMOOTHDECIMATE_INPUT] = D_("Input"); port_range_hints[SMOOTHDECIMATE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[SMOOTHDECIMATE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SMOOTHDECIMATE_OUTPUT] = D_("Output"); port_range_hints[SMOOTHDECIMATE_OUTPUT].HintDescriptor = 0; smoothDecimateDescriptor->activate = activateSmoothDecimate; smoothDecimateDescriptor->cleanup = cleanupSmoothDecimate; smoothDecimateDescriptor->connect_port = connectPortSmoothDecimate; smoothDecimateDescriptor->deactivate = NULL; smoothDecimateDescriptor->instantiate = instantiateSmoothDecimate; smoothDecimateDescriptor->run = runSmoothDecimate; smoothDecimateDescriptor->run_adding = runAddingSmoothDecimate; smoothDecimateDescriptor->set_run_adding_gain = setRunAddingGainSmoothDecimate; } } void __attribute__((destructor)) swh_fini() { if (smoothDecimateDescriptor) { free((LADSPA_PortDescriptor *)smoothDecimateDescriptor->PortDescriptors); free((char **)smoothDecimateDescriptor->PortNames); free((LADSPA_PortRangeHint *)smoothDecimateDescriptor->PortRangeHints); free(smoothDecimateDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/split_1406.c000066400000000000000000000144501247673406200212570ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define SPLIT_INPUT 0 #define SPLIT_OUT2 1 #define SPLIT_OUT1 2 static LADSPA_Descriptor *splitDescriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *out2; LADSPA_Data *out1; LADSPA_Data run_adding_gain; } Split; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return splitDescriptor; default: return NULL; } } static void cleanupSplit(LADSPA_Handle instance) { free(instance); } static void connectPortSplit( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Split *plugin; plugin = (Split *)instance; switch (port) { case SPLIT_INPUT: plugin->input = data; break; case SPLIT_OUT2: plugin->out2 = data; break; case SPLIT_OUT1: plugin->out1 = data; break; } } static LADSPA_Handle instantiateSplit( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Split *plugin_data = (Split *)malloc(sizeof(Split)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSplit(LADSPA_Handle instance, unsigned long sample_count) { Split *plugin_data = (Split *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output 1 (array of floats of length sample_count) */ LADSPA_Data * const out2 = plugin_data->out2; /* Output 2 (array of floats of length sample_count) */ LADSPA_Data * const out1 = plugin_data->out1; #line 16 "split_1406.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { const LADSPA_Data in = input[pos]; buffer_write(out1[pos], in); buffer_write(out2[pos], in); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSplit(LADSPA_Handle instance, LADSPA_Data gain) { ((Split *)instance)->run_adding_gain = gain; } static void runAddingSplit(LADSPA_Handle instance, unsigned long sample_count) { Split *plugin_data = (Split *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output 1 (array of floats of length sample_count) */ LADSPA_Data * const out2 = plugin_data->out2; /* Output 2 (array of floats of length sample_count) */ LADSPA_Data * const out1 = plugin_data->out1; #line 16 "split_1406.xml" unsigned long pos; for (pos = 0; pos < sample_count; pos++) { const LADSPA_Data in = input[pos]; buffer_write(out1[pos], in); buffer_write(out2[pos], in); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif splitDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (splitDescriptor) { splitDescriptor->UniqueID = 1406; splitDescriptor->Label = "split"; splitDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; splitDescriptor->Name = D_("Mono to Stereo splitter"); splitDescriptor->Maker = "Frank Neumann "; splitDescriptor->Copyright = "GPL"; splitDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); splitDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); splitDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); splitDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[SPLIT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SPLIT_INPUT] = D_("Input"); port_range_hints[SPLIT_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SPLIT_INPUT].LowerBound = -1; port_range_hints[SPLIT_INPUT].UpperBound = +1; /* Parameters for Output 1 */ port_descriptors[SPLIT_OUT2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SPLIT_OUT2] = D_("Output 1"); port_range_hints[SPLIT_OUT2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SPLIT_OUT2].LowerBound = -1; port_range_hints[SPLIT_OUT2].UpperBound = +1; /* Parameters for Output 2 */ port_descriptors[SPLIT_OUT1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SPLIT_OUT1] = D_("Output 2"); port_range_hints[SPLIT_OUT1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SPLIT_OUT1].LowerBound = -1; port_range_hints[SPLIT_OUT1].UpperBound = +1; splitDescriptor->activate = NULL; splitDescriptor->cleanup = cleanupSplit; splitDescriptor->connect_port = connectPortSplit; splitDescriptor->deactivate = NULL; splitDescriptor->instantiate = instantiateSplit; splitDescriptor->run = runSplit; splitDescriptor->run_adding = runAddingSplit; splitDescriptor->set_run_adding_gain = setRunAddingGainSplit; } } void __attribute__((destructor)) swh_fini() { if (splitDescriptor) { free((LADSPA_PortDescriptor *)splitDescriptor->PortDescriptors); free((char **)splitDescriptor->PortNames); free((LADSPA_PortRangeHint *)splitDescriptor->PortRangeHints); free(splitDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/step_muxer_1212.c000066400000000000000000000357071247673406200223220ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "step_muxer_1212.xml" #define FADE_IN 1 #define STABLE 2 #define FADE_OUT 3 #define STEPMUXER_XFADET 0 #define STEPMUXER_CLOCK 1 #define STEPMUXER_INPUT0 2 #define STEPMUXER_INPUT1 3 #define STEPMUXER_INPUT2 4 #define STEPMUXER_INPUT3 5 #define STEPMUXER_INPUT4 6 #define STEPMUXER_INPUT5 7 #define STEPMUXER_INPUT6 8 #define STEPMUXER_INPUT7 9 #define STEPMUXER_OUTPUT 10 static LADSPA_Descriptor *stepMuxerDescriptor = NULL; typedef struct { LADSPA_Data *xfadet; LADSPA_Data *clock; LADSPA_Data *input0; LADSPA_Data *input1; LADSPA_Data *input2; LADSPA_Data *input3; LADSPA_Data *input4; LADSPA_Data *input5; LADSPA_Data *input6; LADSPA_Data *input7; LADSPA_Data *output; float * ch_gain; int * ch_state; int current_ch; LADSPA_Data last_clock; float sample_rate; LADSPA_Data run_adding_gain; } StepMuxer; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return stepMuxerDescriptor; default: return NULL; } } static void activateStepMuxer(LADSPA_Handle instance) { StepMuxer *plugin_data = (StepMuxer *)instance; float *ch_gain = plugin_data->ch_gain; int *ch_state = plugin_data->ch_state; int current_ch = plugin_data->current_ch; LADSPA_Data last_clock = plugin_data->last_clock; float sample_rate = plugin_data->sample_rate; #line 31 "step_muxer_1212.xml" int i; ch_state[0] = STABLE; ch_gain[0] = 1.0f; for (i = 1; i < 8; i++) { ch_state[i] = STABLE; ch_gain[i] = 0.0f; } current_ch = 0; last_clock = 0.0f; plugin_data->ch_gain = ch_gain; plugin_data->ch_state = ch_state; plugin_data->current_ch = current_ch; plugin_data->last_clock = last_clock; plugin_data->sample_rate = sample_rate; } static void cleanupStepMuxer(LADSPA_Handle instance) { #line 45 "step_muxer_1212.xml" StepMuxer *plugin_data = (StepMuxer *)instance; free(plugin_data->ch_state); free(plugin_data->ch_gain); free(instance); } static void connectPortStepMuxer( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { StepMuxer *plugin; plugin = (StepMuxer *)instance; switch (port) { case STEPMUXER_XFADET: plugin->xfadet = data; break; case STEPMUXER_CLOCK: plugin->clock = data; break; case STEPMUXER_INPUT0: plugin->input0 = data; break; case STEPMUXER_INPUT1: plugin->input1 = data; break; case STEPMUXER_INPUT2: plugin->input2 = data; break; case STEPMUXER_INPUT3: plugin->input3 = data; break; case STEPMUXER_INPUT4: plugin->input4 = data; break; case STEPMUXER_INPUT5: plugin->input5 = data; break; case STEPMUXER_INPUT6: plugin->input6 = data; break; case STEPMUXER_INPUT7: plugin->input7 = data; break; case STEPMUXER_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateStepMuxer( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { StepMuxer *plugin_data = (StepMuxer *)malloc(sizeof(StepMuxer)); float *ch_gain = NULL; int *ch_state = NULL; int current_ch; LADSPA_Data last_clock; float sample_rate; #line 23 "step_muxer_1212.xml" sample_rate = s_rate; ch_state = malloc(sizeof(int) * 8); ch_gain = malloc(sizeof(float) * 8); current_ch = 0; last_clock = 0.0f; plugin_data->ch_gain = ch_gain; plugin_data->ch_state = ch_state; plugin_data->current_ch = current_ch; plugin_data->last_clock = last_clock; plugin_data->sample_rate = sample_rate; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runStepMuxer(LADSPA_Handle instance, unsigned long sample_count) { StepMuxer *plugin_data = (StepMuxer *)instance; /* Crossfade time (in ms) (float value) */ const LADSPA_Data xfadet = *(plugin_data->xfadet); /* Clock (array of floats of length sample_count) */ const LADSPA_Data * const clock = plugin_data->clock; /* Input 1 (array of floats of length sample_count) */ const LADSPA_Data * const input0 = plugin_data->input0; /* Input 2 (array of floats of length sample_count) */ const LADSPA_Data * const input1 = plugin_data->input1; /* Input 3 (array of floats of length sample_count) */ const LADSPA_Data * const input2 = plugin_data->input2; /* Input 4 (array of floats of length sample_count) */ const LADSPA_Data * const input3 = plugin_data->input3; /* Input 5 (array of floats of length sample_count) */ const LADSPA_Data * const input4 = plugin_data->input4; /* Input 6 (array of floats of length sample_count) */ const LADSPA_Data * const input5 = plugin_data->input5; /* Input 7 (array of floats of length sample_count) */ const LADSPA_Data * const input6 = plugin_data->input6; /* Input 8 (array of floats of length sample_count) */ const LADSPA_Data * const input7 = plugin_data->input7; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float * ch_gain = plugin_data->ch_gain; int * ch_state = plugin_data->ch_state; int current_ch = plugin_data->current_ch; LADSPA_Data last_clock = plugin_data->last_clock; float sample_rate = plugin_data->sample_rate; #line 50 "step_muxer_1212.xml" unsigned long pos; float fade_inc = 1.0f / (xfadet * sample_rate * 1000.0f); float accum; int ch; for (pos = 0; pos < sample_count; pos++) { // Calculate output value for this sample accum = 0.0f; accum += input0[pos] * ch_gain[0]; accum += input1[pos] * ch_gain[1]; accum += input2[pos] * ch_gain[2]; accum += input3[pos] * ch_gain[3]; accum += input4[pos] * ch_gain[4]; accum += input5[pos] * ch_gain[5]; accum += input6[pos] * ch_gain[6]; accum += input7[pos] * ch_gain[7]; buffer_write(output[pos], accum); // Run crossfades for (ch = 0; ch < 8; ch++) { // Channel is still being faded in if (ch_state[ch] == FADE_IN) { ch_gain[ch] += fade_inc; if (ch_gain[ch] >= 1.0f) { ch_gain[ch] = 1.0f; ch_state[ch] = STABLE; } // Channel is still being faded out } else if (ch_state[ch] == FADE_OUT) { ch_gain[ch] -= fade_inc; if (ch_gain[ch] <= 0.0f) { ch_gain[ch] = 0.0f; ch_state[ch] = STABLE; } } } // Check for clock signal if (last_clock <= 0.0f && clock[pos] > 0.0f) { ch_state[current_ch] = FADE_OUT; current_ch = (current_ch + 1) % 8; ch_state[current_ch] = FADE_IN; } } // Save state data plugin_data->current_ch = current_ch; plugin_data->last_clock = last_clock; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainStepMuxer(LADSPA_Handle instance, LADSPA_Data gain) { ((StepMuxer *)instance)->run_adding_gain = gain; } static void runAddingStepMuxer(LADSPA_Handle instance, unsigned long sample_count) { StepMuxer *plugin_data = (StepMuxer *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Crossfade time (in ms) (float value) */ const LADSPA_Data xfadet = *(plugin_data->xfadet); /* Clock (array of floats of length sample_count) */ const LADSPA_Data * const clock = plugin_data->clock; /* Input 1 (array of floats of length sample_count) */ const LADSPA_Data * const input0 = plugin_data->input0; /* Input 2 (array of floats of length sample_count) */ const LADSPA_Data * const input1 = plugin_data->input1; /* Input 3 (array of floats of length sample_count) */ const LADSPA_Data * const input2 = plugin_data->input2; /* Input 4 (array of floats of length sample_count) */ const LADSPA_Data * const input3 = plugin_data->input3; /* Input 5 (array of floats of length sample_count) */ const LADSPA_Data * const input4 = plugin_data->input4; /* Input 6 (array of floats of length sample_count) */ const LADSPA_Data * const input5 = plugin_data->input5; /* Input 7 (array of floats of length sample_count) */ const LADSPA_Data * const input6 = plugin_data->input6; /* Input 8 (array of floats of length sample_count) */ const LADSPA_Data * const input7 = plugin_data->input7; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float * ch_gain = plugin_data->ch_gain; int * ch_state = plugin_data->ch_state; int current_ch = plugin_data->current_ch; LADSPA_Data last_clock = plugin_data->last_clock; float sample_rate = plugin_data->sample_rate; #line 50 "step_muxer_1212.xml" unsigned long pos; float fade_inc = 1.0f / (xfadet * sample_rate * 1000.0f); float accum; int ch; for (pos = 0; pos < sample_count; pos++) { // Calculate output value for this sample accum = 0.0f; accum += input0[pos] * ch_gain[0]; accum += input1[pos] * ch_gain[1]; accum += input2[pos] * ch_gain[2]; accum += input3[pos] * ch_gain[3]; accum += input4[pos] * ch_gain[4]; accum += input5[pos] * ch_gain[5]; accum += input6[pos] * ch_gain[6]; accum += input7[pos] * ch_gain[7]; buffer_write(output[pos], accum); // Run crossfades for (ch = 0; ch < 8; ch++) { // Channel is still being faded in if (ch_state[ch] == FADE_IN) { ch_gain[ch] += fade_inc; if (ch_gain[ch] >= 1.0f) { ch_gain[ch] = 1.0f; ch_state[ch] = STABLE; } // Channel is still being faded out } else if (ch_state[ch] == FADE_OUT) { ch_gain[ch] -= fade_inc; if (ch_gain[ch] <= 0.0f) { ch_gain[ch] = 0.0f; ch_state[ch] = STABLE; } } } // Check for clock signal if (last_clock <= 0.0f && clock[pos] > 0.0f) { ch_state[current_ch] = FADE_OUT; current_ch = (current_ch + 1) % 8; ch_state[current_ch] = FADE_IN; } } // Save state data plugin_data->current_ch = current_ch; plugin_data->last_clock = last_clock; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif stepMuxerDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (stepMuxerDescriptor) { stepMuxerDescriptor->UniqueID = 1212; stepMuxerDescriptor->Label = "stepMuxer"; stepMuxerDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; stepMuxerDescriptor->Name = D_("Step Demuxer"); stepMuxerDescriptor->Maker = "Steve Harris "; stepMuxerDescriptor->Copyright = "GPL"; stepMuxerDescriptor->PortCount = 11; port_descriptors = (LADSPA_PortDescriptor *)calloc(11, sizeof(LADSPA_PortDescriptor)); stepMuxerDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(11, sizeof(LADSPA_PortRangeHint)); stepMuxerDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(11, sizeof(char*)); stepMuxerDescriptor->PortNames = (const char **)port_names; /* Parameters for Crossfade time (in ms) */ port_descriptors[STEPMUXER_XFADET] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[STEPMUXER_XFADET] = D_("Crossfade time (in ms)"); port_range_hints[STEPMUXER_XFADET].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[STEPMUXER_XFADET].LowerBound = 0; port_range_hints[STEPMUXER_XFADET].UpperBound = 100; /* Parameters for Clock */ port_descriptors[STEPMUXER_CLOCK] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_CLOCK] = D_("Clock"); port_range_hints[STEPMUXER_CLOCK].HintDescriptor = 0; /* Parameters for Input 1 */ port_descriptors[STEPMUXER_INPUT0] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT0] = D_("Input 1"); port_range_hints[STEPMUXER_INPUT0].HintDescriptor = 0; /* Parameters for Input 2 */ port_descriptors[STEPMUXER_INPUT1] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT1] = D_("Input 2"); port_range_hints[STEPMUXER_INPUT1].HintDescriptor = 0; /* Parameters for Input 3 */ port_descriptors[STEPMUXER_INPUT2] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT2] = D_("Input 3"); port_range_hints[STEPMUXER_INPUT2].HintDescriptor = 0; /* Parameters for Input 4 */ port_descriptors[STEPMUXER_INPUT3] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT3] = D_("Input 4"); port_range_hints[STEPMUXER_INPUT3].HintDescriptor = 0; /* Parameters for Input 5 */ port_descriptors[STEPMUXER_INPUT4] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT4] = D_("Input 5"); port_range_hints[STEPMUXER_INPUT4].HintDescriptor = 0; /* Parameters for Input 6 */ port_descriptors[STEPMUXER_INPUT5] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT5] = D_("Input 6"); port_range_hints[STEPMUXER_INPUT5].HintDescriptor = 0; /* Parameters for Input 7 */ port_descriptors[STEPMUXER_INPUT6] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT6] = D_("Input 7"); port_range_hints[STEPMUXER_INPUT6].HintDescriptor = 0; /* Parameters for Input 8 */ port_descriptors[STEPMUXER_INPUT7] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_INPUT7] = D_("Input 8"); port_range_hints[STEPMUXER_INPUT7].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[STEPMUXER_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[STEPMUXER_OUTPUT] = D_("Output"); port_range_hints[STEPMUXER_OUTPUT].HintDescriptor = 0; stepMuxerDescriptor->activate = activateStepMuxer; stepMuxerDescriptor->cleanup = cleanupStepMuxer; stepMuxerDescriptor->connect_port = connectPortStepMuxer; stepMuxerDescriptor->deactivate = NULL; stepMuxerDescriptor->instantiate = instantiateStepMuxer; stepMuxerDescriptor->run = runStepMuxer; stepMuxerDescriptor->run_adding = runAddingStepMuxer; stepMuxerDescriptor->set_run_adding_gain = setRunAddingGainStepMuxer; } } void __attribute__((destructor)) swh_fini() { if (stepMuxerDescriptor) { free((LADSPA_PortDescriptor *)stepMuxerDescriptor->PortDescriptors); free((char **)stepMuxerDescriptor->PortNames); free((LADSPA_PortRangeHint *)stepMuxerDescriptor->PortRangeHints); free(stepMuxerDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/surround_encoder_1401.c000066400000000000000000000307151247673406200235010ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "surround_encoder_1401.xml" #include "ladspa-util.h" #define D_SIZE 256 #define NZEROS 200 /* The non-zero taps of the Hilbert transformer */ static float xcoeffs[] = { +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f, +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f, +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f, +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f, +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f, +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f, +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f, +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f, +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f, +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f, +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f, +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f, +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f, -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f, -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f, -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f, -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f, -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f, -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f, -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f, -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f, -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f, -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f, -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f, -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f, }; #define SURROUNDENCODER_L 0 #define SURROUNDENCODER_R 1 #define SURROUNDENCODER_C 2 #define SURROUNDENCODER_S 3 #define SURROUNDENCODER_LT 4 #define SURROUNDENCODER_RT 5 static LADSPA_Descriptor *surroundEncoderDescriptor = NULL; typedef struct { LADSPA_Data *l; LADSPA_Data *r; LADSPA_Data *c; LADSPA_Data *s; LADSPA_Data *lt; LADSPA_Data *rt; LADSPA_Data *buffer; unsigned int buffer_pos; unsigned int buffer_size; LADSPA_Data *delay; unsigned int dptr; LADSPA_Data run_adding_gain; } SurroundEncoder; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return surroundEncoderDescriptor; default: return NULL; } } static void activateSurroundEncoder(LADSPA_Handle instance) { SurroundEncoder *plugin_data = (SurroundEncoder *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_pos = plugin_data->buffer_pos; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data *delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; #line 75 "surround_encoder_1401.xml" memset(buffer, 0, buffer_size * sizeof(LADSPA_Data)); plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->buffer_size = buffer_size; plugin_data->delay = delay; plugin_data->dptr = dptr; } static void cleanupSurroundEncoder(LADSPA_Handle instance) { #line 79 "surround_encoder_1401.xml" SurroundEncoder *plugin_data = (SurroundEncoder *)instance; free(plugin_data->buffer); free(plugin_data->delay); free(instance); } static void connectPortSurroundEncoder( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { SurroundEncoder *plugin; plugin = (SurroundEncoder *)instance; switch (port) { case SURROUNDENCODER_L: plugin->l = data; break; case SURROUNDENCODER_R: plugin->r = data; break; case SURROUNDENCODER_C: plugin->c = data; break; case SURROUNDENCODER_S: plugin->s = data; break; case SURROUNDENCODER_LT: plugin->lt = data; break; case SURROUNDENCODER_RT: plugin->rt = data; break; } } static LADSPA_Handle instantiateSurroundEncoder( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { SurroundEncoder *plugin_data = (SurroundEncoder *)malloc(sizeof(SurroundEncoder)); LADSPA_Data *buffer = NULL; unsigned int buffer_pos; unsigned int buffer_size; LADSPA_Data *delay = NULL; unsigned int dptr; #line 65 "surround_encoder_1401.xml" buffer_size = (int)(0.0072f * s_rate); buffer_pos = 0; buffer = calloc(buffer_size, sizeof(LADSPA_Data)); delay = calloc(D_SIZE, sizeof(LADSPA_Data)); dptr = 0; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->buffer_size = buffer_size; plugin_data->delay = delay; plugin_data->dptr = dptr; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSurroundEncoder(LADSPA_Handle instance, unsigned long sample_count) { SurroundEncoder *plugin_data = (SurroundEncoder *)instance; /* L (array of floats of length sample_count) */ const LADSPA_Data * const l = plugin_data->l; /* R (array of floats of length sample_count) */ const LADSPA_Data * const r = plugin_data->r; /* C (array of floats of length sample_count) */ const LADSPA_Data * const c = plugin_data->c; /* S (array of floats of length sample_count) */ const LADSPA_Data * const s = plugin_data->s; /* Lt (array of floats of length sample_count) */ LADSPA_Data * const lt = plugin_data->lt; /* Rt (array of floats of length sample_count) */ LADSPA_Data * const rt = plugin_data->rt; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_pos = plugin_data->buffer_pos; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; #line 85 "surround_encoder_1401.xml" unsigned long pos; LADSPA_Data s_delayed; unsigned int i; float hilb; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = s[pos]; hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } dptr = (dptr + 1) & (D_SIZE - 1); s_delayed = buffer[buffer_pos]; buffer[buffer_pos++] = hilb; buffer_pos %= buffer_size; buffer_write(lt[pos], l[pos] + c[pos] * 0.707946f - s_delayed * 0.707946f); buffer_write(rt[pos], r[pos] + c[pos] * 0.707946f + s_delayed * 0.707946f); } plugin_data->dptr = dptr; plugin_data->buffer_pos = buffer_pos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSurroundEncoder(LADSPA_Handle instance, LADSPA_Data gain) { ((SurroundEncoder *)instance)->run_adding_gain = gain; } static void runAddingSurroundEncoder(LADSPA_Handle instance, unsigned long sample_count) { SurroundEncoder *plugin_data = (SurroundEncoder *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* L (array of floats of length sample_count) */ const LADSPA_Data * const l = plugin_data->l; /* R (array of floats of length sample_count) */ const LADSPA_Data * const r = plugin_data->r; /* C (array of floats of length sample_count) */ const LADSPA_Data * const c = plugin_data->c; /* S (array of floats of length sample_count) */ const LADSPA_Data * const s = plugin_data->s; /* Lt (array of floats of length sample_count) */ LADSPA_Data * const lt = plugin_data->lt; /* Rt (array of floats of length sample_count) */ LADSPA_Data * const rt = plugin_data->rt; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_pos = plugin_data->buffer_pos; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data * delay = plugin_data->delay; unsigned int dptr = plugin_data->dptr; #line 85 "surround_encoder_1401.xml" unsigned long pos; LADSPA_Data s_delayed; unsigned int i; float hilb; for (pos = 0; pos < sample_count; pos++) { delay[dptr] = s[pos]; hilb = 0.0f; for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } dptr = (dptr + 1) & (D_SIZE - 1); s_delayed = buffer[buffer_pos]; buffer[buffer_pos++] = hilb; buffer_pos %= buffer_size; buffer_write(lt[pos], l[pos] + c[pos] * 0.707946f - s_delayed * 0.707946f); buffer_write(rt[pos], r[pos] + c[pos] * 0.707946f + s_delayed * 0.707946f); } plugin_data->dptr = dptr; plugin_data->buffer_pos = buffer_pos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif surroundEncoderDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (surroundEncoderDescriptor) { surroundEncoderDescriptor->UniqueID = 1401; surroundEncoderDescriptor->Label = "surroundEncoder"; surroundEncoderDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; surroundEncoderDescriptor->Name = D_("Surround matrix encoder"); surroundEncoderDescriptor->Maker = "Steve Harris "; surroundEncoderDescriptor->Copyright = "GPL"; surroundEncoderDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); surroundEncoderDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); surroundEncoderDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); surroundEncoderDescriptor->PortNames = (const char **)port_names; /* Parameters for L */ port_descriptors[SURROUNDENCODER_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SURROUNDENCODER_L] = D_("L"); port_range_hints[SURROUNDENCODER_L].HintDescriptor = 0; /* Parameters for R */ port_descriptors[SURROUNDENCODER_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SURROUNDENCODER_R] = D_("R"); port_range_hints[SURROUNDENCODER_R].HintDescriptor = 0; /* Parameters for C */ port_descriptors[SURROUNDENCODER_C] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SURROUNDENCODER_C] = D_("C"); port_range_hints[SURROUNDENCODER_C].HintDescriptor = 0; /* Parameters for S */ port_descriptors[SURROUNDENCODER_S] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SURROUNDENCODER_S] = D_("S"); port_range_hints[SURROUNDENCODER_S].HintDescriptor = 0; /* Parameters for Lt */ port_descriptors[SURROUNDENCODER_LT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SURROUNDENCODER_LT] = D_("Lt"); port_range_hints[SURROUNDENCODER_LT].HintDescriptor = 0; /* Parameters for Rt */ port_descriptors[SURROUNDENCODER_RT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SURROUNDENCODER_RT] = D_("Rt"); port_range_hints[SURROUNDENCODER_RT].HintDescriptor = 0; surroundEncoderDescriptor->activate = activateSurroundEncoder; surroundEncoderDescriptor->cleanup = cleanupSurroundEncoder; surroundEncoderDescriptor->connect_port = connectPortSurroundEncoder; surroundEncoderDescriptor->deactivate = NULL; surroundEncoderDescriptor->instantiate = instantiateSurroundEncoder; surroundEncoderDescriptor->run = runSurroundEncoder; surroundEncoderDescriptor->run_adding = runAddingSurroundEncoder; surroundEncoderDescriptor->set_run_adding_gain = setRunAddingGainSurroundEncoder; } } void __attribute__((destructor)) swh_fini() { if (surroundEncoderDescriptor) { free((LADSPA_PortDescriptor *)surroundEncoderDescriptor->PortDescriptors); free((char **)surroundEncoderDescriptor->PortNames); free((LADSPA_PortRangeHint *)surroundEncoderDescriptor->PortRangeHints); free(surroundEncoderDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/svf_1214.c000066400000000000000000000267051247673406200207250ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 9 "svf_1214.xml" #include "ladspa-util.h" // Constants to match filter types #define F_LP 1 #define F_HP 2 #define F_BP 3 #define F_BR 4 #define F_AP 5 // Number of filter oversamples #define F_R 3 /* Structure to hold parameters for SV filter */ typedef struct { float f; // 2.0*sin(PI*fs/(fc*r)); float q; // 2.0*cos(pow(q, 0.1)*PI*0.5); float qnrm; // sqrt(m/2.0f+0.01f); float h; // high pass output float b; // band pass output float l; // low pass output float p; // peaking output (allpass with resonance) float n; // notch output float *op; // pointer to output value } sv_filter; /* Store data in SVF struct, takes the sampling frequency, cutoff frequency and Q, and fills in the structure passed */ static inline void setup_svf(sv_filter *sv, float fs, float fc, float q, int t) { sv->f = 2.0f * sin(M_PI * fc / (float)(fs * F_R)); sv->q = 2.0f * cos(pow(q, 0.1f) * M_PI * 0.5f); sv->qnrm = sqrt(sv->q/2.0+0.01); switch(t) { case F_LP: sv->op = &(sv->l); break; case F_HP: sv->op = &(sv->h); break; case F_BP: sv->op = &(sv->b); break; case F_BR: sv->op = &(sv->n); break; default: sv->op = &(sv->p); } } /* Run one sample through the SV filter. Filter is by andy@vellocet */ static inline float run_svf(sv_filter *sv, float in) { float out; int i; in = sv->qnrm * in ; for (i=0; i < F_R; i++) { // very slight waveshape for extra stability sv->b = flush_to_zero(sv->b - sv->b * sv->b * sv->b * 0.001f); // regular state variable code here // the notch and peaking outputs are optional sv->h = flush_to_zero(in - sv->l - sv->q * sv->b); sv->b = sv->b + sv->f * sv->h; sv->l = flush_to_zero(sv->l + sv->f * sv->b); sv->n = sv->l + sv->h; sv->p = sv->l - sv->h; out = *(sv->op); in = out; } return out; } #define SVF_INPUT 0 #define SVF_OUTPUT 1 #define SVF_FILT_TYPE 2 #define SVF_FILT_FREQ 3 #define SVF_FILT_Q 4 #define SVF_FILT_RES 5 static LADSPA_Descriptor *svfDescriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *filt_type; LADSPA_Data *filt_freq; LADSPA_Data *filt_q; LADSPA_Data *filt_res; int sample_rate; sv_filter * svf; LADSPA_Data run_adding_gain; } Svf; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return svfDescriptor; default: return NULL; } } static void activateSvf(LADSPA_Handle instance) { Svf *plugin_data = (Svf *)instance; int sample_rate = plugin_data->sample_rate; sv_filter *svf = plugin_data->svf; #line 100 "svf_1214.xml" setup_svf(svf, 0, 0, 0, 0); plugin_data->sample_rate = sample_rate; plugin_data->svf = svf; } static void cleanupSvf(LADSPA_Handle instance) { #line 104 "svf_1214.xml" Svf *plugin_data = (Svf *)instance; free(plugin_data->svf); free(instance); } static void connectPortSvf( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Svf *plugin; plugin = (Svf *)instance; switch (port) { case SVF_INPUT: plugin->input = data; break; case SVF_OUTPUT: plugin->output = data; break; case SVF_FILT_TYPE: plugin->filt_type = data; break; case SVF_FILT_FREQ: plugin->filt_freq = data; break; case SVF_FILT_Q: plugin->filt_q = data; break; case SVF_FILT_RES: plugin->filt_res = data; break; } } static LADSPA_Handle instantiateSvf( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Svf *plugin_data = (Svf *)malloc(sizeof(Svf)); int sample_rate; sv_filter *svf = NULL; #line 94 "svf_1214.xml" sample_rate = s_rate; svf = calloc(1, sizeof(sv_filter)); plugin_data->sample_rate = sample_rate; plugin_data->svf = svf; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runSvf(LADSPA_Handle instance, unsigned long sample_count) { Svf *plugin_data = (Svf *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; /* Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt_type = *(plugin_data->filt_type); /* Filter freq (float value) */ const LADSPA_Data filt_freq = *(plugin_data->filt_freq); /* Filter Q (float value) */ const LADSPA_Data filt_q = *(plugin_data->filt_q); /* Filter resonance (float value) */ const LADSPA_Data filt_res = *(plugin_data->filt_res); int sample_rate = plugin_data->sample_rate; sv_filter * svf = plugin_data->svf; #line 108 "svf_1214.xml" long int pos; setup_svf(svf, sample_rate, filt_freq, filt_q, f_round(filt_type)); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], run_svf(svf, input[pos] + (svf->b * filt_res))); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainSvf(LADSPA_Handle instance, LADSPA_Data gain) { ((Svf *)instance)->run_adding_gain = gain; } static void runAddingSvf(LADSPA_Handle instance, unsigned long sample_count) { Svf *plugin_data = (Svf *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; /* Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) (float value) */ const LADSPA_Data filt_type = *(plugin_data->filt_type); /* Filter freq (float value) */ const LADSPA_Data filt_freq = *(plugin_data->filt_freq); /* Filter Q (float value) */ const LADSPA_Data filt_q = *(plugin_data->filt_q); /* Filter resonance (float value) */ const LADSPA_Data filt_res = *(plugin_data->filt_res); int sample_rate = plugin_data->sample_rate; sv_filter * svf = plugin_data->svf; #line 108 "svf_1214.xml" long int pos; setup_svf(svf, sample_rate, filt_freq, filt_q, f_round(filt_type)); for (pos = 0; pos < sample_count; pos++) { buffer_write(output[pos], run_svf(svf, input[pos] + (svf->b * filt_res))); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif svfDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (svfDescriptor) { svfDescriptor->UniqueID = 1214; svfDescriptor->Label = "svf"; svfDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; svfDescriptor->Name = D_("State Variable Filter"); svfDescriptor->Maker = "Steve Harris "; svfDescriptor->Copyright = "GPL"; svfDescriptor->PortCount = 6; port_descriptors = (LADSPA_PortDescriptor *)calloc(6, sizeof(LADSPA_PortDescriptor)); svfDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(6, sizeof(LADSPA_PortRangeHint)); svfDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(6, sizeof(char*)); svfDescriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[SVF_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[SVF_INPUT] = D_("Input"); port_range_hints[SVF_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SVF_INPUT].LowerBound = -1; port_range_hints[SVF_INPUT].UpperBound = 1; /* Parameters for Output */ port_descriptors[SVF_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[SVF_OUTPUT] = D_("Output"); port_range_hints[SVF_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[SVF_OUTPUT].LowerBound = -1; port_range_hints[SVF_OUTPUT].UpperBound = 1; /* Parameters for Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP) */ port_descriptors[SVF_FILT_TYPE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SVF_FILT_TYPE] = D_("Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)"); port_range_hints[SVF_FILT_TYPE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0; port_range_hints[SVF_FILT_TYPE].LowerBound = 0; port_range_hints[SVF_FILT_TYPE].UpperBound = 5; /* Parameters for Filter freq */ port_descriptors[SVF_FILT_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SVF_FILT_FREQ] = D_("Filter freq"); port_range_hints[SVF_FILT_FREQ].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_440; port_range_hints[SVF_FILT_FREQ].LowerBound = 0; port_range_hints[SVF_FILT_FREQ].UpperBound = 6000; /* Parameters for Filter Q */ port_descriptors[SVF_FILT_Q] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SVF_FILT_Q] = D_("Filter Q"); port_range_hints[SVF_FILT_Q].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[SVF_FILT_Q].LowerBound = 0; port_range_hints[SVF_FILT_Q].UpperBound = 1; /* Parameters for Filter resonance */ port_descriptors[SVF_FILT_RES] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[SVF_FILT_RES] = D_("Filter resonance"); port_range_hints[SVF_FILT_RES].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[SVF_FILT_RES].LowerBound = 0; port_range_hints[SVF_FILT_RES].UpperBound = 1; svfDescriptor->activate = activateSvf; svfDescriptor->cleanup = cleanupSvf; svfDescriptor->connect_port = connectPortSvf; svfDescriptor->deactivate = NULL; svfDescriptor->instantiate = instantiateSvf; svfDescriptor->run = runSvf; svfDescriptor->run_adding = runAddingSvf; svfDescriptor->set_run_adding_gain = setRunAddingGainSvf; } } void __attribute__((destructor)) swh_fini() { if (svfDescriptor) { free((LADSPA_PortDescriptor *)svfDescriptor->PortDescriptors); free((char **)svfDescriptor->PortNames); free((LADSPA_PortRangeHint *)svfDescriptor->PortRangeHints); free(svfDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/tape_delay_1211.c000066400000000000000000000474541247673406200222370ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 8 "tape_delay_1211.xml" #include "ladspa-util.h" #define BASE_BUFFER 8 // Tape length (inches) #define TAPEDELAY_SPEED 0 #define TAPEDELAY_DA_DB 1 #define TAPEDELAY_T1D 2 #define TAPEDELAY_T1A_DB 3 #define TAPEDELAY_T2D 4 #define TAPEDELAY_T2A_DB 5 #define TAPEDELAY_T3D 6 #define TAPEDELAY_T3A_DB 7 #define TAPEDELAY_T4D 8 #define TAPEDELAY_T4A_DB 9 #define TAPEDELAY_INPUT 10 #define TAPEDELAY_OUTPUT 11 static LADSPA_Descriptor *tapeDelayDescriptor = NULL; typedef struct { LADSPA_Data *speed; LADSPA_Data *da_db; LADSPA_Data *t1d; LADSPA_Data *t1a_db; LADSPA_Data *t2d; LADSPA_Data *t2a_db; LADSPA_Data *t3d; LADSPA_Data *t3a_db; LADSPA_Data *t4d; LADSPA_Data *t4a_db; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data *buffer; unsigned int buffer_mask; unsigned int buffer_size; LADSPA_Data last2_in; LADSPA_Data last3_in; LADSPA_Data last_in; unsigned int last_phase; float phase; int sample_rate; LADSPA_Data z0; LADSPA_Data z1; LADSPA_Data z2; LADSPA_Data run_adding_gain; } TapeDelay; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return tapeDelayDescriptor; default: return NULL; } } static void activateTapeDelay(LADSPA_Handle instance) { TapeDelay *plugin_data = (TapeDelay *)instance; LADSPA_Data *buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data last2_in = plugin_data->last2_in; LADSPA_Data last3_in = plugin_data->last3_in; LADSPA_Data last_in = plugin_data->last_in; unsigned int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; int sample_rate = plugin_data->sample_rate; LADSPA_Data z0 = plugin_data->z0; LADSPA_Data z1 = plugin_data->z1; LADSPA_Data z2 = plugin_data->z2; #line 38 "tape_delay_1211.xml" int i; for (i = 0; i < buffer_size; i++) { buffer[i] = 0; } phase = 0; last_phase = 0; last_in = 0.0f; last2_in = 0.0f; last3_in = 0.0f; z0 = 0.0f; z1 = 0.0f; z2 = 0.0f; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_size = buffer_size; plugin_data->last2_in = last2_in; plugin_data->last3_in = last3_in; plugin_data->last_in = last_in; plugin_data->last_phase = last_phase; plugin_data->phase = phase; plugin_data->sample_rate = sample_rate; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; } static void cleanupTapeDelay(LADSPA_Handle instance) { #line 55 "tape_delay_1211.xml" TapeDelay *plugin_data = (TapeDelay *)instance; free(plugin_data->buffer); free(instance); } static void connectPortTapeDelay( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { TapeDelay *plugin; plugin = (TapeDelay *)instance; switch (port) { case TAPEDELAY_SPEED: plugin->speed = data; break; case TAPEDELAY_DA_DB: plugin->da_db = data; break; case TAPEDELAY_T1D: plugin->t1d = data; break; case TAPEDELAY_T1A_DB: plugin->t1a_db = data; break; case TAPEDELAY_T2D: plugin->t2d = data; break; case TAPEDELAY_T2A_DB: plugin->t2a_db = data; break; case TAPEDELAY_T3D: plugin->t3d = data; break; case TAPEDELAY_T3A_DB: plugin->t3a_db = data; break; case TAPEDELAY_T4D: plugin->t4d = data; break; case TAPEDELAY_T4A_DB: plugin->t4a_db = data; break; case TAPEDELAY_INPUT: plugin->input = data; break; case TAPEDELAY_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateTapeDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { TapeDelay *plugin_data = (TapeDelay *)malloc(sizeof(TapeDelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_size; LADSPA_Data last2_in; LADSPA_Data last3_in; LADSPA_Data last_in; unsigned int last_phase; float phase; int sample_rate; LADSPA_Data z0; LADSPA_Data z1; LADSPA_Data z2; #line 21 "tape_delay_1211.xml" unsigned int mbs = BASE_BUFFER * s_rate; sample_rate = s_rate; for (buffer_size = 4096; buffer_size < mbs; buffer_size *= 2); buffer = malloc(buffer_size * sizeof(LADSPA_Data)); buffer_mask = buffer_size - 1; phase = 0; last_phase = 0; last_in = 0.0f; last2_in = 0.0f; last3_in = 0.0f; z0 = 0.0f; z1 = 0.0f; z2 = 0.0f; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_size = buffer_size; plugin_data->last2_in = last2_in; plugin_data->last3_in = last3_in; plugin_data->last_in = last_in; plugin_data->last_phase = last_phase; plugin_data->phase = phase; plugin_data->sample_rate = sample_rate; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runTapeDelay(LADSPA_Handle instance, unsigned long sample_count) { TapeDelay *plugin_data = (TapeDelay *)instance; /* Tape speed (inches/sec, 1=normal) (float value) */ const LADSPA_Data speed = *(plugin_data->speed); /* Dry level (dB) (float value) */ const LADSPA_Data da_db = *(plugin_data->da_db); /* Tap 1 distance (inches) (float value) */ const LADSPA_Data t1d = *(plugin_data->t1d); /* Tap 1 level (dB) (float value) */ const LADSPA_Data t1a_db = *(plugin_data->t1a_db); /* Tap 2 distance (inches) (float value) */ const LADSPA_Data t2d = *(plugin_data->t2d); /* Tap 2 level (dB) (float value) */ const LADSPA_Data t2a_db = *(plugin_data->t2a_db); /* Tap 3 distance (inches) (float value) */ const LADSPA_Data t3d = *(plugin_data->t3d); /* Tap 3 level (dB) (float value) */ const LADSPA_Data t3a_db = *(plugin_data->t3a_db); /* Tap 4 distance (inches) (float value) */ const LADSPA_Data t4d = *(plugin_data->t4d); /* Tap 4 level (dB) (float value) */ const LADSPA_Data t4a_db = *(plugin_data->t4a_db); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data last2_in = plugin_data->last2_in; LADSPA_Data last3_in = plugin_data->last3_in; LADSPA_Data last_in = plugin_data->last_in; unsigned int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; int sample_rate = plugin_data->sample_rate; LADSPA_Data z0 = plugin_data->z0; LADSPA_Data z1 = plugin_data->z1; LADSPA_Data z2 = plugin_data->z2; #line 59 "tape_delay_1211.xml" unsigned int pos; float increment = f_clamp(speed, 0.0f, 40.0f); float lin_int, lin_inc; unsigned int track; unsigned int fph; LADSPA_Data out; const float da = DB_CO(da_db); const float t1a = DB_CO(t1a_db); const float t2a = DB_CO(t2a_db); const float t3a = DB_CO(t3a_db); const float t4a = DB_CO(t4a_db); const unsigned int t1d_s = f_round(t1d * sample_rate); const unsigned int t2d_s = f_round(t2d * sample_rate); const unsigned int t3d_s = f_round(t3d * sample_rate); const unsigned int t4d_s = f_round(t4d * sample_rate); for (pos = 0; pos < sample_count; pos++) { fph = f_trunc(phase); last_phase = fph; lin_int = phase - (float)fph; out = buffer[(unsigned int)(fph - t1d_s) & buffer_mask] * t1a; out += buffer[(unsigned int)(fph - t2d_s) & buffer_mask] * t2a; out += buffer[(unsigned int)(fph - t3d_s) & buffer_mask] * t3a; out += buffer[(unsigned int)(fph - t4d_s) & buffer_mask] * t4a; phase += increment; lin_inc = 1.0f / (floor(phase) - last_phase + 1); lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; lin_int = 0.0f; for (track = last_phase; track < phase; track++) { lin_int += lin_inc; buffer[track & buffer_mask] = cube_interp(lin_int, last3_in, last2_in, last_in, input[pos]); } last3_in = last2_in; last2_in = last_in; last_in = input[pos]; out += input[pos] * da; buffer_write(output[pos], out); if (phase >= buffer_size) { phase -= buffer_size; } } // Store current phase in instance plugin_data->phase = phase; plugin_data->last_phase = last_phase; plugin_data->last_in = last_in; plugin_data->last2_in = last2_in; plugin_data->last3_in = last3_in; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainTapeDelay(LADSPA_Handle instance, LADSPA_Data gain) { ((TapeDelay *)instance)->run_adding_gain = gain; } static void runAddingTapeDelay(LADSPA_Handle instance, unsigned long sample_count) { TapeDelay *plugin_data = (TapeDelay *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Tape speed (inches/sec, 1=normal) (float value) */ const LADSPA_Data speed = *(plugin_data->speed); /* Dry level (dB) (float value) */ const LADSPA_Data da_db = *(plugin_data->da_db); /* Tap 1 distance (inches) (float value) */ const LADSPA_Data t1d = *(plugin_data->t1d); /* Tap 1 level (dB) (float value) */ const LADSPA_Data t1a_db = *(plugin_data->t1a_db); /* Tap 2 distance (inches) (float value) */ const LADSPA_Data t2d = *(plugin_data->t2d); /* Tap 2 level (dB) (float value) */ const LADSPA_Data t2a_db = *(plugin_data->t2a_db); /* Tap 3 distance (inches) (float value) */ const LADSPA_Data t3d = *(plugin_data->t3d); /* Tap 3 level (dB) (float value) */ const LADSPA_Data t3a_db = *(plugin_data->t3a_db); /* Tap 4 distance (inches) (float value) */ const LADSPA_Data t4d = *(plugin_data->t4d); /* Tap 4 level (dB) (float value) */ const LADSPA_Data t4a_db = *(plugin_data->t4a_db); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data * buffer = plugin_data->buffer; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_size = plugin_data->buffer_size; LADSPA_Data last2_in = plugin_data->last2_in; LADSPA_Data last3_in = plugin_data->last3_in; LADSPA_Data last_in = plugin_data->last_in; unsigned int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; int sample_rate = plugin_data->sample_rate; LADSPA_Data z0 = plugin_data->z0; LADSPA_Data z1 = plugin_data->z1; LADSPA_Data z2 = plugin_data->z2; #line 59 "tape_delay_1211.xml" unsigned int pos; float increment = f_clamp(speed, 0.0f, 40.0f); float lin_int, lin_inc; unsigned int track; unsigned int fph; LADSPA_Data out; const float da = DB_CO(da_db); const float t1a = DB_CO(t1a_db); const float t2a = DB_CO(t2a_db); const float t3a = DB_CO(t3a_db); const float t4a = DB_CO(t4a_db); const unsigned int t1d_s = f_round(t1d * sample_rate); const unsigned int t2d_s = f_round(t2d * sample_rate); const unsigned int t3d_s = f_round(t3d * sample_rate); const unsigned int t4d_s = f_round(t4d * sample_rate); for (pos = 0; pos < sample_count; pos++) { fph = f_trunc(phase); last_phase = fph; lin_int = phase - (float)fph; out = buffer[(unsigned int)(fph - t1d_s) & buffer_mask] * t1a; out += buffer[(unsigned int)(fph - t2d_s) & buffer_mask] * t2a; out += buffer[(unsigned int)(fph - t3d_s) & buffer_mask] * t3a; out += buffer[(unsigned int)(fph - t4d_s) & buffer_mask] * t4a; phase += increment; lin_inc = 1.0f / (floor(phase) - last_phase + 1); lin_inc = lin_inc > 1.0f ? 1.0f : lin_inc; lin_int = 0.0f; for (track = last_phase; track < phase; track++) { lin_int += lin_inc; buffer[track & buffer_mask] = cube_interp(lin_int, last3_in, last2_in, last_in, input[pos]); } last3_in = last2_in; last2_in = last_in; last_in = input[pos]; out += input[pos] * da; buffer_write(output[pos], out); if (phase >= buffer_size) { phase -= buffer_size; } } // Store current phase in instance plugin_data->phase = phase; plugin_data->last_phase = last_phase; plugin_data->last_in = last_in; plugin_data->last2_in = last2_in; plugin_data->last3_in = last3_in; plugin_data->z0 = z0; plugin_data->z1 = z1; plugin_data->z2 = z2; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif tapeDelayDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (tapeDelayDescriptor) { tapeDelayDescriptor->UniqueID = 1211; tapeDelayDescriptor->Label = "tapeDelay"; tapeDelayDescriptor->Properties = 0; tapeDelayDescriptor->Name = D_("Tape Delay Simulation"); tapeDelayDescriptor->Maker = "Steve Harris "; tapeDelayDescriptor->Copyright = "GPL"; tapeDelayDescriptor->PortCount = 12; port_descriptors = (LADSPA_PortDescriptor *)calloc(12, sizeof(LADSPA_PortDescriptor)); tapeDelayDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(12, sizeof(LADSPA_PortRangeHint)); tapeDelayDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(12, sizeof(char*)); tapeDelayDescriptor->PortNames = (const char **)port_names; /* Parameters for Tape speed (inches/sec, 1=normal) */ port_descriptors[TAPEDELAY_SPEED] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_SPEED] = D_("Tape speed (inches/sec, 1=normal)"); port_range_hints[TAPEDELAY_SPEED].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[TAPEDELAY_SPEED].LowerBound = 0; port_range_hints[TAPEDELAY_SPEED].UpperBound = 10; /* Parameters for Dry level (dB) */ port_descriptors[TAPEDELAY_DA_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_DA_DB] = D_("Dry level (dB)"); port_range_hints[TAPEDELAY_DA_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[TAPEDELAY_DA_DB].LowerBound = -90; port_range_hints[TAPEDELAY_DA_DB].UpperBound = 0; /* Parameters for Tap 1 distance (inches) */ port_descriptors[TAPEDELAY_T1D] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T1D] = D_("Tap 1 distance (inches)"); port_range_hints[TAPEDELAY_T1D].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TAPEDELAY_T1D].LowerBound = 0; port_range_hints[TAPEDELAY_T1D].UpperBound = 4; /* Parameters for Tap 1 level (dB) */ port_descriptors[TAPEDELAY_T1A_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T1A_DB] = D_("Tap 1 level (dB)"); port_range_hints[TAPEDELAY_T1A_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TAPEDELAY_T1A_DB].LowerBound = -90; port_range_hints[TAPEDELAY_T1A_DB].UpperBound = 0; /* Parameters for Tap 2 distance (inches) */ port_descriptors[TAPEDELAY_T2D] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T2D] = D_("Tap 2 distance (inches)"); port_range_hints[TAPEDELAY_T2D].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[TAPEDELAY_T2D].LowerBound = 0; port_range_hints[TAPEDELAY_T2D].UpperBound = 4; /* Parameters for Tap 2 level (dB) */ port_descriptors[TAPEDELAY_T2A_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T2A_DB] = D_("Tap 2 level (dB)"); port_range_hints[TAPEDELAY_T2A_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[TAPEDELAY_T2A_DB].LowerBound = -90; port_range_hints[TAPEDELAY_T2A_DB].UpperBound = 0; /* Parameters for Tap 3 distance (inches) */ port_descriptors[TAPEDELAY_T3D] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T3D] = D_("Tap 3 distance (inches)"); port_range_hints[TAPEDELAY_T3D].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[TAPEDELAY_T3D].LowerBound = 0; port_range_hints[TAPEDELAY_T3D].UpperBound = 4; /* Parameters for Tap 3 level (dB) */ port_descriptors[TAPEDELAY_T3A_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T3A_DB] = D_("Tap 3 level (dB)"); port_range_hints[TAPEDELAY_T3A_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[TAPEDELAY_T3A_DB].LowerBound = -90; port_range_hints[TAPEDELAY_T3A_DB].UpperBound = 0; /* Parameters for Tap 4 distance (inches) */ port_descriptors[TAPEDELAY_T4D] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T4D] = D_("Tap 4 distance (inches)"); port_range_hints[TAPEDELAY_T4D].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[TAPEDELAY_T4D].LowerBound = 0; port_range_hints[TAPEDELAY_T4D].UpperBound = 4; /* Parameters for Tap 4 level (dB) */ port_descriptors[TAPEDELAY_T4A_DB] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TAPEDELAY_T4A_DB] = D_("Tap 4 level (dB)"); port_range_hints[TAPEDELAY_T4A_DB].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[TAPEDELAY_T4A_DB].LowerBound = -90; port_range_hints[TAPEDELAY_T4A_DB].UpperBound = 0; /* Parameters for Input */ port_descriptors[TAPEDELAY_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[TAPEDELAY_INPUT] = D_("Input"); port_range_hints[TAPEDELAY_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[TAPEDELAY_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[TAPEDELAY_OUTPUT] = D_("Output"); port_range_hints[TAPEDELAY_OUTPUT].HintDescriptor = 0; tapeDelayDescriptor->activate = activateTapeDelay; tapeDelayDescriptor->cleanup = cleanupTapeDelay; tapeDelayDescriptor->connect_port = connectPortTapeDelay; tapeDelayDescriptor->deactivate = NULL; tapeDelayDescriptor->instantiate = instantiateTapeDelay; tapeDelayDescriptor->run = runTapeDelay; tapeDelayDescriptor->run_adding = runAddingTapeDelay; tapeDelayDescriptor->set_run_adding_gain = setRunAddingGainTapeDelay; } } void __attribute__((destructor)) swh_fini() { if (tapeDelayDescriptor) { free((LADSPA_PortDescriptor *)tapeDelayDescriptor->PortDescriptors); free((char **)tapeDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)tapeDelayDescriptor->PortRangeHints); free(tapeDelayDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/transient_1206.c000066400000000000000000000352071247673406200221340ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "transient_1206.xml" #include "ladspa-util.h" #define BUFFER_SIZE 10240 #define SSTAB 0.00001f #define ASTAB 0.02f #define TRANSIENT_ATTACK 0 #define TRANSIENT_SUSTAIN 1 #define TRANSIENT_INPUT 2 #define TRANSIENT_OUTPUT 3 static LADSPA_Descriptor *transientDescriptor = NULL; typedef struct { LADSPA_Data *attack; LADSPA_Data *sustain; LADSPA_Data *input; LADSPA_Data *output; float * buffer; int buffer_pos; long count; float fast_buffer_sum; float fast_track; float medi_buffer_sum; float medi_track; int sample_rate; float slow_buffer_sum; float slow_track; LADSPA_Data run_adding_gain; } Transient; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return transientDescriptor; default: return NULL; } } static void activateTransient(LADSPA_Handle instance) { Transient *plugin_data = (Transient *)instance; float *buffer = plugin_data->buffer; int buffer_pos = plugin_data->buffer_pos; long count = plugin_data->count; float fast_buffer_sum = plugin_data->fast_buffer_sum; float fast_track = plugin_data->fast_track; float medi_buffer_sum = plugin_data->medi_buffer_sum; float medi_track = plugin_data->medi_track; int sample_rate = plugin_data->sample_rate; float slow_buffer_sum = plugin_data->slow_buffer_sum; float slow_track = plugin_data->slow_track; #line 36 "transient_1206.xml" memset(buffer, '\0', BUFFER_SIZE * sizeof(float)); fast_buffer_sum = 0.1; medi_buffer_sum = 0.1; slow_buffer_sum = 0.1; buffer_pos = 0; fast_track = 0.1; medi_track = 0.1; slow_track = 0.1; count = 0; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->count = count; plugin_data->fast_buffer_sum = fast_buffer_sum; plugin_data->fast_track = fast_track; plugin_data->medi_buffer_sum = medi_buffer_sum; plugin_data->medi_track = medi_track; plugin_data->sample_rate = sample_rate; plugin_data->slow_buffer_sum = slow_buffer_sum; plugin_data->slow_track = slow_track; } static void cleanupTransient(LADSPA_Handle instance) { #line 49 "transient_1206.xml" Transient *plugin_data = (Transient *)instance; free(plugin_data->buffer); free(instance); } static void connectPortTransient( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Transient *plugin; plugin = (Transient *)instance; switch (port) { case TRANSIENT_ATTACK: plugin->attack = data; break; case TRANSIENT_SUSTAIN: plugin->sustain = data; break; case TRANSIENT_INPUT: plugin->input = data; break; case TRANSIENT_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateTransient( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Transient *plugin_data = (Transient *)malloc(sizeof(Transient)); float *buffer = NULL; int buffer_pos; long count; float fast_buffer_sum; float fast_track; float medi_buffer_sum; float medi_track; int sample_rate; float slow_buffer_sum; float slow_track; #line 23 "transient_1206.xml" buffer = calloc(BUFFER_SIZE, sizeof(float)); fast_buffer_sum = 0.1; medi_buffer_sum = 0.1; slow_buffer_sum = 0.1; buffer_pos = 0; fast_track = 0.0; medi_track = 0.0; slow_track = 0.0; count = 0; sample_rate = s_rate; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->count = count; plugin_data->fast_buffer_sum = fast_buffer_sum; plugin_data->fast_track = fast_track; plugin_data->medi_buffer_sum = medi_buffer_sum; plugin_data->medi_track = medi_track; plugin_data->sample_rate = sample_rate; plugin_data->slow_buffer_sum = slow_buffer_sum; plugin_data->slow_track = slow_track; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runTransient(LADSPA_Handle instance, unsigned long sample_count) { Transient *plugin_data = (Transient *)instance; /* Attack speed (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Sustain time (float value) */ const LADSPA_Data sustain = *(plugin_data->sustain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float * buffer = plugin_data->buffer; int buffer_pos = plugin_data->buffer_pos; long count = plugin_data->count; float fast_buffer_sum = plugin_data->fast_buffer_sum; float fast_track = plugin_data->fast_track; float medi_buffer_sum = plugin_data->medi_buffer_sum; float medi_track = plugin_data->medi_track; int sample_rate = plugin_data->sample_rate; float slow_buffer_sum = plugin_data->slow_buffer_sum; float slow_track = plugin_data->slow_track; #line 53 "transient_1206.xml" unsigned long pos; const int fast_sum_size = (2 * sample_rate) / 1000; const int medi_sum_size = (25 * sample_rate) / 1000; const int slow_sum_size = (100 * sample_rate) / 1000; const float fast_track_lag = 1.5f / fast_sum_size; const float medi_track_lag = 1.0f / medi_sum_size; const float slow_track_lag = 1.3f / slow_sum_size; float ratio; LADSPA_Data in; for (pos = 0; pos < sample_count; pos++) { in = input[pos]; buffer[buffer_pos] = fabs(in); fast_buffer_sum += buffer[buffer_pos]; medi_buffer_sum += buffer[buffer_pos]; slow_buffer_sum += buffer[buffer_pos]; fast_buffer_sum -= buffer[MOD(buffer_pos - fast_sum_size, BUFFER_SIZE)]; medi_buffer_sum -= buffer[MOD(buffer_pos - medi_sum_size, BUFFER_SIZE)]; slow_buffer_sum -= buffer[MOD(buffer_pos - slow_sum_size, BUFFER_SIZE)]; if (count++ > slow_sum_size) { fast_track += (fast_buffer_sum/fast_sum_size - fast_track) * fast_track_lag; medi_track += (medi_buffer_sum/medi_sum_size - medi_track) * medi_track_lag; slow_track += (slow_buffer_sum/slow_sum_size - slow_track) * slow_track_lag; } // Attack ratio = (fast_track + ASTAB) / (medi_track + ASTAB); if (ratio * attack > 1.0f) { in *= ratio * attack; } else if (ratio * attack < -1.0f) { in /= ratio * -attack; } // Sustain ratio = (slow_track + SSTAB) / (medi_track + SSTAB); if (ratio * sustain > 1.0f) { in *= ratio * sustain; } else if (ratio * sustain < -1.0f) { in /= ratio * -sustain; } buffer_write(output[pos], in); buffer_pos = (buffer_pos + 1) % BUFFER_SIZE; } plugin_data->count = count; plugin_data->fast_track = fast_track; plugin_data->medi_track = medi_track; plugin_data->slow_track = slow_track; plugin_data->buffer_pos = buffer_pos; plugin_data->fast_buffer_sum = fast_buffer_sum; plugin_data->medi_buffer_sum = medi_buffer_sum; plugin_data->slow_buffer_sum = slow_buffer_sum; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainTransient(LADSPA_Handle instance, LADSPA_Data gain) { ((Transient *)instance)->run_adding_gain = gain; } static void runAddingTransient(LADSPA_Handle instance, unsigned long sample_count) { Transient *plugin_data = (Transient *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Attack speed (float value) */ const LADSPA_Data attack = *(plugin_data->attack); /* Sustain time (float value) */ const LADSPA_Data sustain = *(plugin_data->sustain); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; float * buffer = plugin_data->buffer; int buffer_pos = plugin_data->buffer_pos; long count = plugin_data->count; float fast_buffer_sum = plugin_data->fast_buffer_sum; float fast_track = plugin_data->fast_track; float medi_buffer_sum = plugin_data->medi_buffer_sum; float medi_track = plugin_data->medi_track; int sample_rate = plugin_data->sample_rate; float slow_buffer_sum = plugin_data->slow_buffer_sum; float slow_track = plugin_data->slow_track; #line 53 "transient_1206.xml" unsigned long pos; const int fast_sum_size = (2 * sample_rate) / 1000; const int medi_sum_size = (25 * sample_rate) / 1000; const int slow_sum_size = (100 * sample_rate) / 1000; const float fast_track_lag = 1.5f / fast_sum_size; const float medi_track_lag = 1.0f / medi_sum_size; const float slow_track_lag = 1.3f / slow_sum_size; float ratio; LADSPA_Data in; for (pos = 0; pos < sample_count; pos++) { in = input[pos]; buffer[buffer_pos] = fabs(in); fast_buffer_sum += buffer[buffer_pos]; medi_buffer_sum += buffer[buffer_pos]; slow_buffer_sum += buffer[buffer_pos]; fast_buffer_sum -= buffer[MOD(buffer_pos - fast_sum_size, BUFFER_SIZE)]; medi_buffer_sum -= buffer[MOD(buffer_pos - medi_sum_size, BUFFER_SIZE)]; slow_buffer_sum -= buffer[MOD(buffer_pos - slow_sum_size, BUFFER_SIZE)]; if (count++ > slow_sum_size) { fast_track += (fast_buffer_sum/fast_sum_size - fast_track) * fast_track_lag; medi_track += (medi_buffer_sum/medi_sum_size - medi_track) * medi_track_lag; slow_track += (slow_buffer_sum/slow_sum_size - slow_track) * slow_track_lag; } // Attack ratio = (fast_track + ASTAB) / (medi_track + ASTAB); if (ratio * attack > 1.0f) { in *= ratio * attack; } else if (ratio * attack < -1.0f) { in /= ratio * -attack; } // Sustain ratio = (slow_track + SSTAB) / (medi_track + SSTAB); if (ratio * sustain > 1.0f) { in *= ratio * sustain; } else if (ratio * sustain < -1.0f) { in /= ratio * -sustain; } buffer_write(output[pos], in); buffer_pos = (buffer_pos + 1) % BUFFER_SIZE; } plugin_data->count = count; plugin_data->fast_track = fast_track; plugin_data->medi_track = medi_track; plugin_data->slow_track = slow_track; plugin_data->buffer_pos = buffer_pos; plugin_data->fast_buffer_sum = fast_buffer_sum; plugin_data->medi_buffer_sum = medi_buffer_sum; plugin_data->slow_buffer_sum = slow_buffer_sum; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif transientDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (transientDescriptor) { transientDescriptor->UniqueID = 1206; transientDescriptor->Label = "transient"; transientDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; transientDescriptor->Name = D_("Transient mangler"); transientDescriptor->Maker = "Steve Harris "; transientDescriptor->Copyright = "GPL"; transientDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); transientDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); transientDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); transientDescriptor->PortNames = (const char **)port_names; /* Parameters for Attack speed */ port_descriptors[TRANSIENT_ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRANSIENT_ATTACK] = D_("Attack speed"); port_range_hints[TRANSIENT_ATTACK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRANSIENT_ATTACK].LowerBound = -1; port_range_hints[TRANSIENT_ATTACK].UpperBound = 1; /* Parameters for Sustain time */ port_descriptors[TRANSIENT_SUSTAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRANSIENT_SUSTAIN] = D_("Sustain time"); port_range_hints[TRANSIENT_SUSTAIN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRANSIENT_SUSTAIN].LowerBound = -1; port_range_hints[TRANSIENT_SUSTAIN].UpperBound = 1; /* Parameters for Input */ port_descriptors[TRANSIENT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[TRANSIENT_INPUT] = D_("Input"); port_range_hints[TRANSIENT_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[TRANSIENT_INPUT].LowerBound = -1.0; port_range_hints[TRANSIENT_INPUT].UpperBound = 1.0; /* Parameters for Output */ port_descriptors[TRANSIENT_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[TRANSIENT_OUTPUT] = D_("Output"); port_range_hints[TRANSIENT_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[TRANSIENT_OUTPUT].LowerBound = -1.0; port_range_hints[TRANSIENT_OUTPUT].UpperBound = 1.0; transientDescriptor->activate = activateTransient; transientDescriptor->cleanup = cleanupTransient; transientDescriptor->connect_port = connectPortTransient; transientDescriptor->deactivate = NULL; transientDescriptor->instantiate = instantiateTransient; transientDescriptor->run = runTransient; transientDescriptor->run_adding = runAddingTransient; transientDescriptor->set_run_adding_gain = setRunAddingGainTransient; } } void __attribute__((destructor)) swh_fini() { if (transientDescriptor) { free((LADSPA_PortDescriptor *)transientDescriptor->PortDescriptors); free((char **)transientDescriptor->PortNames); free((LADSPA_PortRangeHint *)transientDescriptor->PortRangeHints); free(transientDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/triple_para_1204.c000066400000000000000000000460521247673406200224250ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "triple_para_1204.xml" #include "util/biquad.h" #define TRIPLEPARA_GAIN_L 0 #define TRIPLEPARA_FC_L 1 #define TRIPLEPARA_BW_L 2 #define TRIPLEPARA_GAIN_1 3 #define TRIPLEPARA_FC_1 4 #define TRIPLEPARA_BW_1 5 #define TRIPLEPARA_GAIN_2 6 #define TRIPLEPARA_FC_2 7 #define TRIPLEPARA_BW_2 8 #define TRIPLEPARA_GAIN_3 9 #define TRIPLEPARA_FC_3 10 #define TRIPLEPARA_BW_3 11 #define TRIPLEPARA_GAIN_H 12 #define TRIPLEPARA_FC_H 13 #define TRIPLEPARA_BW_H 14 #define TRIPLEPARA_INPUT 15 #define TRIPLEPARA_OUTPUT 16 static LADSPA_Descriptor *tripleParaDescriptor = NULL; typedef struct { LADSPA_Data *gain_L; LADSPA_Data *fc_L; LADSPA_Data *bw_L; LADSPA_Data *gain_1; LADSPA_Data *fc_1; LADSPA_Data *bw_1; LADSPA_Data *gain_2; LADSPA_Data *fc_2; LADSPA_Data *bw_2; LADSPA_Data *gain_3; LADSPA_Data *fc_3; LADSPA_Data *bw_3; LADSPA_Data *gain_H; LADSPA_Data *fc_H; LADSPA_Data *bw_H; LADSPA_Data *input; LADSPA_Data *output; biquad * filters; float fs; LADSPA_Data run_adding_gain; } TriplePara; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return tripleParaDescriptor; default: return NULL; } } static void activateTriplePara(LADSPA_Handle instance) { TriplePara *plugin_data = (TriplePara *)instance; biquad *filters = plugin_data->filters; float fs = plugin_data->fs; #line 32 "triple_para_1204.xml" biquad_init(&filters[0]); biquad_init(&filters[1]); biquad_init(&filters[2]); biquad_init(&filters[3]); biquad_init(&filters[4]); plugin_data->filters = filters; plugin_data->fs = fs; } static void cleanupTriplePara(LADSPA_Handle instance) { #line 68 "triple_para_1204.xml" TriplePara *plugin_data = (TriplePara *)instance; free(plugin_data->filters); free(instance); } static void connectPortTriplePara( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { TriplePara *plugin; plugin = (TriplePara *)instance; switch (port) { case TRIPLEPARA_GAIN_L: plugin->gain_L = data; break; case TRIPLEPARA_FC_L: plugin->fc_L = data; break; case TRIPLEPARA_BW_L: plugin->bw_L = data; break; case TRIPLEPARA_GAIN_1: plugin->gain_1 = data; break; case TRIPLEPARA_FC_1: plugin->fc_1 = data; break; case TRIPLEPARA_BW_1: plugin->bw_1 = data; break; case TRIPLEPARA_GAIN_2: plugin->gain_2 = data; break; case TRIPLEPARA_FC_2: plugin->fc_2 = data; break; case TRIPLEPARA_BW_2: plugin->bw_2 = data; break; case TRIPLEPARA_GAIN_3: plugin->gain_3 = data; break; case TRIPLEPARA_FC_3: plugin->fc_3 = data; break; case TRIPLEPARA_BW_3: plugin->bw_3 = data; break; case TRIPLEPARA_GAIN_H: plugin->gain_H = data; break; case TRIPLEPARA_FC_H: plugin->fc_H = data; break; case TRIPLEPARA_BW_H: plugin->bw_H = data; break; case TRIPLEPARA_INPUT: plugin->input = data; break; case TRIPLEPARA_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateTriplePara( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { TriplePara *plugin_data = (TriplePara *)malloc(sizeof(TriplePara)); biquad *filters = NULL; float fs; #line 21 "triple_para_1204.xml" fs = s_rate; filters = calloc(5, sizeof(biquad)); biquad_init(&filters[0]); biquad_init(&filters[1]); biquad_init(&filters[2]); biquad_init(&filters[3]); biquad_init(&filters[4]); plugin_data->filters = filters; plugin_data->fs = fs; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runTriplePara(LADSPA_Handle instance, unsigned long sample_count) { TriplePara *plugin_data = (TriplePara *)instance; /* Low-shelving gain (dB) (float value) */ const LADSPA_Data gain_L = *(plugin_data->gain_L); /* Low-shelving frequency (Hz) (float value) */ const LADSPA_Data fc_L = *(plugin_data->fc_L); /* Low-shelving slope (float value) */ const LADSPA_Data bw_L = *(plugin_data->bw_L); /* Band 1 gain (dB) (float value) */ const LADSPA_Data gain_1 = *(plugin_data->gain_1); /* Band 1 frequency (Hz) (float value) */ const LADSPA_Data fc_1 = *(plugin_data->fc_1); /* Band 1 bandwidth (octaves) (float value) */ const LADSPA_Data bw_1 = *(plugin_data->bw_1); /* Band 2 gain (dB) (float value) */ const LADSPA_Data gain_2 = *(plugin_data->gain_2); /* Band 2 frequency (Hz) (float value) */ const LADSPA_Data fc_2 = *(plugin_data->fc_2); /* Band 2 bandwidth (octaves) (float value) */ const LADSPA_Data bw_2 = *(plugin_data->bw_2); /* Band 3 gain (dB) (float value) */ const LADSPA_Data gain_3 = *(plugin_data->gain_3); /* Band 3 frequency (Hz) (float value) */ const LADSPA_Data fc_3 = *(plugin_data->fc_3); /* Band 3 bandwidth (octaves) (float value) */ const LADSPA_Data bw_3 = *(plugin_data->bw_3); /* High-shelving gain (dB) (float value) */ const LADSPA_Data gain_H = *(plugin_data->gain_H); /* High-shelving frequency (Hz) (float value) */ const LADSPA_Data fc_H = *(plugin_data->fc_H); /* High-shelving slope (float value) */ const LADSPA_Data bw_H = *(plugin_data->bw_H); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; #line 40 "triple_para_1204.xml" unsigned long pos; float in; ls_set_params(&filters[0], fc_L, gain_L, bw_L, fs); eq_set_params(&filters[1], fc_1, gain_1, bw_1, fs); eq_set_params(&filters[2], fc_2, gain_2, bw_2, fs); eq_set_params(&filters[3], fc_3, gain_3, bw_3, fs); hs_set_params(&filters[4], fc_H, gain_H, bw_H, fs); for (pos = 0; pos < sample_count; pos++) { in = biquad_run(&filters[0], input[pos]); in = biquad_run(&filters[1], in); in = biquad_run(&filters[2], in); in = biquad_run(&filters[3], in); in = biquad_run(&filters[4], in); buffer_write(output[pos], in); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainTriplePara(LADSPA_Handle instance, LADSPA_Data gain) { ((TriplePara *)instance)->run_adding_gain = gain; } static void runAddingTriplePara(LADSPA_Handle instance, unsigned long sample_count) { TriplePara *plugin_data = (TriplePara *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Low-shelving gain (dB) (float value) */ const LADSPA_Data gain_L = *(plugin_data->gain_L); /* Low-shelving frequency (Hz) (float value) */ const LADSPA_Data fc_L = *(plugin_data->fc_L); /* Low-shelving slope (float value) */ const LADSPA_Data bw_L = *(plugin_data->bw_L); /* Band 1 gain (dB) (float value) */ const LADSPA_Data gain_1 = *(plugin_data->gain_1); /* Band 1 frequency (Hz) (float value) */ const LADSPA_Data fc_1 = *(plugin_data->fc_1); /* Band 1 bandwidth (octaves) (float value) */ const LADSPA_Data bw_1 = *(plugin_data->bw_1); /* Band 2 gain (dB) (float value) */ const LADSPA_Data gain_2 = *(plugin_data->gain_2); /* Band 2 frequency (Hz) (float value) */ const LADSPA_Data fc_2 = *(plugin_data->fc_2); /* Band 2 bandwidth (octaves) (float value) */ const LADSPA_Data bw_2 = *(plugin_data->bw_2); /* Band 3 gain (dB) (float value) */ const LADSPA_Data gain_3 = *(plugin_data->gain_3); /* Band 3 frequency (Hz) (float value) */ const LADSPA_Data fc_3 = *(plugin_data->fc_3); /* Band 3 bandwidth (octaves) (float value) */ const LADSPA_Data bw_3 = *(plugin_data->bw_3); /* High-shelving gain (dB) (float value) */ const LADSPA_Data gain_H = *(plugin_data->gain_H); /* High-shelving frequency (Hz) (float value) */ const LADSPA_Data fc_H = *(plugin_data->fc_H); /* High-shelving slope (float value) */ const LADSPA_Data bw_H = *(plugin_data->bw_H); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; biquad * filters = plugin_data->filters; float fs = plugin_data->fs; #line 40 "triple_para_1204.xml" unsigned long pos; float in; ls_set_params(&filters[0], fc_L, gain_L, bw_L, fs); eq_set_params(&filters[1], fc_1, gain_1, bw_1, fs); eq_set_params(&filters[2], fc_2, gain_2, bw_2, fs); eq_set_params(&filters[3], fc_3, gain_3, bw_3, fs); hs_set_params(&filters[4], fc_H, gain_H, bw_H, fs); for (pos = 0; pos < sample_count; pos++) { in = biquad_run(&filters[0], input[pos]); in = biquad_run(&filters[1], in); in = biquad_run(&filters[2], in); in = biquad_run(&filters[3], in); in = biquad_run(&filters[4], in); buffer_write(output[pos], in); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif tripleParaDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (tripleParaDescriptor) { tripleParaDescriptor->UniqueID = 1204; tripleParaDescriptor->Label = "triplePara"; tripleParaDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; tripleParaDescriptor->Name = D_("Triple band parametric with shelves"); tripleParaDescriptor->Maker = "Steve Harris "; tripleParaDescriptor->Copyright = "GPL"; tripleParaDescriptor->PortCount = 17; port_descriptors = (LADSPA_PortDescriptor *)calloc(17, sizeof(LADSPA_PortDescriptor)); tripleParaDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(17, sizeof(LADSPA_PortRangeHint)); tripleParaDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(17, sizeof(char*)); tripleParaDescriptor->PortNames = (const char **)port_names; /* Parameters for Low-shelving gain (dB) */ port_descriptors[TRIPLEPARA_GAIN_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_GAIN_L] = D_("Low-shelving gain (dB)"); port_range_hints[TRIPLEPARA_GAIN_L].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRIPLEPARA_GAIN_L].LowerBound = -70; port_range_hints[TRIPLEPARA_GAIN_L].UpperBound = +30; /* Parameters for Low-shelving frequency (Hz) */ port_descriptors[TRIPLEPARA_FC_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_FC_L] = D_("Low-shelving frequency (Hz)"); port_range_hints[TRIPLEPARA_FC_L].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[TRIPLEPARA_FC_L].LowerBound = 0.0001; port_range_hints[TRIPLEPARA_FC_L].UpperBound = 0.49; /* Parameters for Low-shelving slope */ port_descriptors[TRIPLEPARA_BW_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_BW_L] = D_("Low-shelving slope"); port_range_hints[TRIPLEPARA_BW_L].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[TRIPLEPARA_BW_L].LowerBound = 0; port_range_hints[TRIPLEPARA_BW_L].UpperBound = 1; /* Parameters for Band 1 gain (dB) */ port_descriptors[TRIPLEPARA_GAIN_1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_GAIN_1] = D_("Band 1 gain (dB)"); port_range_hints[TRIPLEPARA_GAIN_1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRIPLEPARA_GAIN_1].LowerBound = -70; port_range_hints[TRIPLEPARA_GAIN_1].UpperBound = +30; /* Parameters for Band 1 frequency (Hz) */ port_descriptors[TRIPLEPARA_FC_1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_FC_1] = D_("Band 1 frequency (Hz)"); port_range_hints[TRIPLEPARA_FC_1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[TRIPLEPARA_FC_1].LowerBound = 0.0001; port_range_hints[TRIPLEPARA_FC_1].UpperBound = 0.49; /* Parameters for Band 1 bandwidth (octaves) */ port_descriptors[TRIPLEPARA_BW_1] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_BW_1] = D_("Band 1 bandwidth (octaves)"); port_range_hints[TRIPLEPARA_BW_1].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[TRIPLEPARA_BW_1].LowerBound = 0; port_range_hints[TRIPLEPARA_BW_1].UpperBound = 4; /* Parameters for Band 2 gain (dB) */ port_descriptors[TRIPLEPARA_GAIN_2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_GAIN_2] = D_("Band 2 gain (dB)"); port_range_hints[TRIPLEPARA_GAIN_2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRIPLEPARA_GAIN_2].LowerBound = -70; port_range_hints[TRIPLEPARA_GAIN_2].UpperBound = +30; /* Parameters for Band 2 frequency (Hz) */ port_descriptors[TRIPLEPARA_FC_2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_FC_2] = D_("Band 2 frequency (Hz)"); port_range_hints[TRIPLEPARA_FC_2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[TRIPLEPARA_FC_2].LowerBound = 0.0001; port_range_hints[TRIPLEPARA_FC_2].UpperBound = 0.49; /* Parameters for Band 2 bandwidth (octaves) */ port_descriptors[TRIPLEPARA_BW_2] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_BW_2] = D_("Band 2 bandwidth (octaves)"); port_range_hints[TRIPLEPARA_BW_2].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[TRIPLEPARA_BW_2].LowerBound = 0; port_range_hints[TRIPLEPARA_BW_2].UpperBound = 4; /* Parameters for Band 3 gain (dB) */ port_descriptors[TRIPLEPARA_GAIN_3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_GAIN_3] = D_("Band 3 gain (dB)"); port_range_hints[TRIPLEPARA_GAIN_3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRIPLEPARA_GAIN_3].LowerBound = -70; port_range_hints[TRIPLEPARA_GAIN_3].UpperBound = +30; /* Parameters for Band 3 frequency (Hz) */ port_descriptors[TRIPLEPARA_FC_3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_FC_3] = D_("Band 3 frequency (Hz)"); port_range_hints[TRIPLEPARA_FC_3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_HIGH; port_range_hints[TRIPLEPARA_FC_3].LowerBound = 0.0001; port_range_hints[TRIPLEPARA_FC_3].UpperBound = 0.49; /* Parameters for Band 3 bandwidth (octaves) */ port_descriptors[TRIPLEPARA_BW_3] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_BW_3] = D_("Band 3 bandwidth (octaves)"); port_range_hints[TRIPLEPARA_BW_3].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[TRIPLEPARA_BW_3].LowerBound = 0; port_range_hints[TRIPLEPARA_BW_3].UpperBound = 4; /* Parameters for High-shelving gain (dB) */ port_descriptors[TRIPLEPARA_GAIN_H] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_GAIN_H] = D_("High-shelving gain (dB)"); port_range_hints[TRIPLEPARA_GAIN_H].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[TRIPLEPARA_GAIN_H].LowerBound = -70; port_range_hints[TRIPLEPARA_GAIN_H].UpperBound = +30; /* Parameters for High-shelving frequency (Hz) */ port_descriptors[TRIPLEPARA_FC_H] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_FC_H] = D_("High-shelving frequency (Hz)"); port_range_hints[TRIPLEPARA_FC_H].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[TRIPLEPARA_FC_H].LowerBound = 0.0001; port_range_hints[TRIPLEPARA_FC_H].UpperBound = 0.49; /* Parameters for High-shelving slope */ port_descriptors[TRIPLEPARA_BW_H] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[TRIPLEPARA_BW_H] = D_("High-shelving slope"); port_range_hints[TRIPLEPARA_BW_H].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[TRIPLEPARA_BW_H].LowerBound = 0; port_range_hints[TRIPLEPARA_BW_H].UpperBound = 1; /* Parameters for Input */ port_descriptors[TRIPLEPARA_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[TRIPLEPARA_INPUT] = D_("Input"); port_range_hints[TRIPLEPARA_INPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[TRIPLEPARA_INPUT].LowerBound = -1.0; port_range_hints[TRIPLEPARA_INPUT].UpperBound = +1.0; /* Parameters for Output */ port_descriptors[TRIPLEPARA_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[TRIPLEPARA_OUTPUT] = D_("Output"); port_range_hints[TRIPLEPARA_OUTPUT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; port_range_hints[TRIPLEPARA_OUTPUT].LowerBound = -1.0; port_range_hints[TRIPLEPARA_OUTPUT].UpperBound = +1.0; tripleParaDescriptor->activate = activateTriplePara; tripleParaDescriptor->cleanup = cleanupTriplePara; tripleParaDescriptor->connect_port = connectPortTriplePara; tripleParaDescriptor->deactivate = NULL; tripleParaDescriptor->instantiate = instantiateTriplePara; tripleParaDescriptor->run = runTriplePara; tripleParaDescriptor->run_adding = runAddingTriplePara; tripleParaDescriptor->set_run_adding_gain = setRunAddingGainTriplePara; } } void __attribute__((destructor)) swh_fini() { if (tripleParaDescriptor) { free((LADSPA_PortDescriptor *)tripleParaDescriptor->PortDescriptors); free((char **)tripleParaDescriptor->PortNames); free((LADSPA_PortRangeHint *)tripleParaDescriptor->PortRangeHints); free(tripleParaDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/util/000077500000000000000000000000001247673406200202575ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/swh/util/biquad.h000066400000000000000000000105321247673406200216760ustar00rootroot00000000000000#ifndef BIQUAD_H #define BIQUAD_H #define LN_2_2 0.34657359f // ln(2)/2 #include "ladspa-util.h" #ifndef LIMIT #define LIMIT(v,l,u) (vu?u:v)) #endif #ifndef BIQUAD_TYPE #define BIQUAD_TYPE float #endif typedef BIQUAD_TYPE bq_t; /* Biquad filter (adapted from lisp code by Eli Brandt, http://www.cs.cmu.edu/~eli/) */ typedef struct { bq_t a1; bq_t a2; bq_t b0; bq_t b1; bq_t b2; bq_t x1; bq_t x2; bq_t y1; bq_t y2; } biquad; static inline void biquad_init(biquad *f) { f->x1 = 0.0f; f->x2 = 0.0f; f->y1 = 0.0f; f->y2 = 0.0f; } static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, bq_t fs); static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0f, fs/2.0f) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t J = pow(10.0f, gain * 0.025f); bq_t g = sw * sinhf(LN_2_2 * LIMIT(bw, 0.0001f, 4.0f) * w / sw); bq_t a0r = 1.0f / (1.0f + (g / J)); f->b0 = (1.0f + (g * J)) * a0r; f->b1 = (-2.0f * cw) * a0r; f->b2 = (1.0f - (g * J)) * a0r; f->a1 = -(f->b1); f->a2 = ((g / J) - 1.0f) * a0r; } static inline void ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs); static inline void ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t A = powf(10.0f, gain * 0.025f); bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - 1.0f) * (A - 1.0))); bq_t apc = cw * (A + 1.0f); bq_t amc = cw * (A - 1.0f); bq_t bs = b * sw; bq_t a0r = 1.0f / (A + 1.0f + amc + bs); f->b0 = a0r * A * (A + 1.0f - amc + bs); f->b1 = a0r * 2.0f * A * (A - 1.0f - apc); f->b2 = a0r * A * (A + 1.0f - amc - bs); f->a1 = a0r * 2.0f * (A - 1.0f + apc); f->a2 = a0r * (-A - 1.0f - amc + bs); } static inline void hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs); static inline void hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t A = powf(10.0f, gain * 0.025f); bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - 1.0f) * (A - 1.0f))); bq_t apc = cw * (A + 1.0f); bq_t amc = cw * (A - 1.0f); bq_t bs = b * sw; bq_t a0r = 1.0f / (A + 1.0f - amc + bs); f->b0 = a0r * A * (A + 1.0f + amc + bs); f->b1 = a0r * -2.0f * A * (A - 1.0f + apc); f->b2 = a0r * A * (A + 1.0f + amc - bs); f->a1 = a0r * -2.0f * (A - 1.0f - apc); f->a2 = a0r * (-A - 1.0f + amc + bs); } static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); f->b0 = a0r * (1.0 - cs) * 0.5; f->b1 = a0r * (1.0 - cs); f->b2 = a0r * (1.0 - cs) * 0.5; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline void hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); f->b0 = a0r * (1.0 + cs) * 0.5; f->b1 = a0r * -(1.0 + cs); f->b2 = a0r * (1.0 + cs) * 0.5; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline void bp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); f->b0 = a0r * alpha; f->b1 = 0.0; f->b2 = a0r * -alpha; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline bq_t biquad_run(biquad *f, const bq_t x) { bq_t y; y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + f->a1 * f->y1 + f->a2 * f->y2; y = flush_to_zero(y); f->x2 = f->x1; f->x1 = x; f->y2 = f->y1; f->y1 = y; return y; } static inline bq_t biquad_run_fb(biquad *f, bq_t x, const bq_t fb) { bq_t y; x += f->y1 * fb * 0.98; y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + f->a1 * f->y1 + f->a2 * f->y2; y = flush_to_zero(y); f->x2 = f->x1; f->x1 = x; f->y2 = f->y1; f->y1 = y; return y; } #endif lmms-1.1.3/plugins/LadspaEffect/swh/util/blo.c000066400000000000000000000165601247673406200212070ustar00rootroot00000000000000/* Copyright (C) 2002 Steve Harris This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #ifndef WIN32 #include #endif #include "blo.h" /* Create the lookup tables needed to generate the bandlimited signals, we * create sin tables (As well as the usual sin, square, saw), which is almost * completely pointless, but doesn't cost much ram. * * Memory use is roughly 8 * table_size * num_of_harmonics, eg. 2048 point * tables with 64 harmonics costs ~1Meg. The oscilators will be accurate down * to sample_rate / (2 * number_of_harmonics) Hz, below that they will sound a * bit soft. */ blo_h_tables *blo_h_tables_new(int table_size) { blo_h_tables *this; float *all_tables = NULL; float *table; float table_size_f = table_size; float max; unsigned int table_count = 0; int i; unsigned int h; size_t all_tables_size = sizeof(float) * (table_size + BLO_TABLE_WR) * (BLO_N_HARMONICS - 1) * 2; #ifndef WIN32 int shm_fd; #endif char shm_path[128]; this = malloc(sizeof(blo_h_tables)); this->alloc_size = all_tables_size; this->table_size = table_size; this->table_mask = table_size - 1; this->store_type = BLO_MMAP; snprintf(shm_path, 128, "/blo-1-%dx%dx%d.tbl", BLO_N_WAVES, BLO_N_HARMONICS, table_size + BLO_TABLE_WR); #ifndef WIN32 if ((shm_fd = shm_open(shm_path, O_RDONLY, 0)) > 0) { /* There is an existing SHM segment that matches what we want */ all_tables = mmap(0, all_tables_size, PROT_READ, MAP_SHARED, shm_fd, 0); close(shm_fd); this->alloc_space = all_tables; /* Map the pointers to the correct places in SHM */ /* The zero harmonics tables (trivial) */ table = BLO_NEXT_TABLE; for (i=0; ih_tables[i][0] = table; } /* The 1st harmonic table (trivial) */ table = BLO_NEXT_TABLE; for (i=0; ih_tables[i][1] = table; } /* The sin 2nd+ harmonics sine tables (trivial) */ for (h=2; hh_tables[BLO_SINE][h] = table; } /* The tri 2nd+ harmonics tables */ table = this->h_tables[BLO_TRI][1]; for (h=2; hh_tables[BLO_TRI][h] = table; } else { /* Odd harmonic add sin(hp)/h^2 */ table = BLO_NEXT_TABLE; this->h_tables[BLO_TRI][h] = table; } } /* The square 2nd+ harmonics tables */ table = this->h_tables[BLO_SQUARE][1]; for (h=2; hh_tables[BLO_SQUARE][h] = table; } else { /* Odd harmonic add sin(hp)/h */ table = BLO_NEXT_TABLE; this->h_tables[BLO_SQUARE][h] = table; } } /* The saw 2nd+ harmonics tables */ for (h=2; hh_tables[BLO_SAW][h] = table; } return this; } else if ((shm_fd = shm_open(shm_path, O_CREAT | O_RDWR, 0644)) > 0) { /* There is no existing SHM segment, but we can make one */ int err = ftruncate(shm_fd, all_tables_size); if (!err) { all_tables = mmap(0, all_tables_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); } close(shm_fd); } #endif /* Fallback case, can't map a SHM segment, just malloc it and suffer */ if (!all_tables) { all_tables = malloc(all_tables_size); this->store_type = BLO_MALLOC; } this->alloc_space = all_tables; /* Calculate the harmonic amplitudes and place the index pointers */ /* Make a zero harmonics table (trivial) */ table = BLO_NEXT_TABLE; for (i=0; ih_tables[i][0] = table; } /* Make a 1st harmonic table (trivial) */ table = BLO_NEXT_TABLE; for (i=0; ih_tables[i][1] = table; } /* Make the sin 2nd+ harmonics tables (trivial) */ for (h=2; hh_tables[BLO_SINE][h] = table; } /* Make the tri 2nd+ harmonics tables */ table = this->h_tables[BLO_TRI][1]; for (h=2; hh_tables[BLO_TRI][h] = table; } else { float sign = 1.0f; if (h % 4 == 3) { sign = -1.0f; } /* Odd harmonic add sin(hp)/h^2 */ table = BLO_NEXT_TABLE; this->h_tables[BLO_TRI][h] = table; for (i=0; ih_tables[BLO_TRI][h - 1][i] + sign * BLO_SIN_GEN((float)i * (float)h) / ((float)h * (float) h); } } } /* Make the square 2nd+ harmonics tables */ table = this->h_tables[BLO_SQUARE][1]; for (h=2; hh_tables[BLO_SQUARE][h] = table; } else { /* Odd harmonic add sin(hp)/h */ table = BLO_NEXT_TABLE; this->h_tables[BLO_SQUARE][h] = table; for (i=0; ih_tables[BLO_SQUARE][h - 1][i] + BLO_SIN_GEN((float)i * (float)h) / (float)h; } } } /* Make the saw 2nd+ harmonics tables */ for (h=2; hh_tables[BLO_SAW][h] = table; for (i=0; ih_tables[BLO_SAW][h - 1][i] + BLO_SIN_GEN((float)i * (float)h) / (float)h; } } /* Normalise table levels */ for (h=1; h max) { max = fabs(table[i]); } } max = 1.0f / max; for (i=0; istore_type == BLO_MMAP) { #ifndef WIN32 munmap(tables->alloc_space, tables->alloc_size); #endif } else { free(tables->alloc_space); } free(tables); } blo_h_osc *blo_h_new(blo_h_tables *tables, unsigned int wave, float sample_rate) { blo_h_osc *this = malloc(sizeof(blo_h_osc)); this->tables = tables; this->wave = wave; this->sample_rate = sample_rate; this->nyquist = sample_rate * 0.49f; this->ph.all = 0; this->ph_coef = ((float)(tables->table_size) * 65536.0f) / sample_rate; this->ph_mask = tables->table_size * 65536 - 1; this->table_mask = tables->table_mask; this->table_size = tables->table_size; this->table = tables->h_tables[0][0]; this->table_b = tables->h_tables[0][0]; return this; } void blo_h_free(blo_h_osc *osc) { free(osc); } lmms-1.1.3/plugins/LadspaEffect/swh/util/blo.h000066400000000000000000000135071247673406200212120ustar00rootroot00000000000000/* Copyright (C) 2002 Steve Harris This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include "ladspa-util.h" #define BLO_N_WAVES 4 #define BLO_SINE 0 #define BLO_TRI 1 #define BLO_SQUARE 2 #define BLO_SAW 3 #define BLO_MMAP 0 #define BLO_MALLOC 1 #ifndef BLO_N_HARMONICS #define BLO_N_HARMONICS 64 #endif /* The wraparaound off the end of the basic wavetable, used by the * interpolators. */ #define BLO_TABLE_WR 4 #define BLO_SIN_GEN(phase) sin((phase) * 2.0f * (float)M_PI / table_size_f) #define BLO_NEXT_TABLE (all_tables + (table_count++ * (table_size + BLO_TABLE_WR))) typedef struct { float *h_tables[BLO_N_WAVES][BLO_N_HARMONICS]; float *alloc_space; size_t alloc_size; int table_size; int table_mask; int store_type; } blo_h_tables; typedef union { int all; struct { unsigned short fr; short in; } part; } blo_fixp; typedef struct { blo_h_tables *tables; float sample_rate; float nyquist; unsigned int wave; blo_fixp ph; blo_fixp om; float ph_coef; int ph_mask; int table_mask; int table_size; int topbit; float *table; float *table_b; float xfade; } blo_h_osc; blo_h_tables *blo_h_tables_new(int table_size); void blo_h_tables_free(blo_h_tables *tables); blo_h_osc *blo_h_new(blo_h_tables *tables, unsigned int wave, float sample_rate); void blo_h_free(blo_h_osc *osc); /* Set frequency for static oscilator, less cycles, but won't modulate as well * You can't use blo_osc_hd_run_* until you've called the _hd version of this * function. */ static inline void blo_hs_set_freq(blo_h_osc *this, const float f) { unsigned int tab_num; const float ff = fabs(f) + 0.00001f; // Prevent div by zero // This needs to be a cast, no idea why this->om.all = (int)(f * this->ph_coef); tab_num = f_round(this->nyquist / ff - 0.5f); if (tab_num >= BLO_N_HARMONICS) { tab_num = BLO_N_HARMONICS - 1; } this->table_b = this->tables->h_tables[this->wave][tab_num]; } /* Set frequency for dynamic oscilator, can only used with _hd run calls. */ static inline void blo_hd_set_freq(blo_h_osc *this, const float f) { int tab_num; const float ff = fabs(f) + 0.00001f; // Prevent div by zero this->om.all = f_round(f * this->ph_coef); tab_num = abs(f_round(this->nyquist / ff - 0.5f)); if (tab_num >= BLO_N_HARMONICS) { tab_num = BLO_N_HARMONICS - 1; } else if (tab_num < 0) { tab_num = 0; } this->table = this->tables->h_tables[this->wave][tab_num]; this->xfade = this->nyquist / ff - tab_num; if (this->xfade > 1.0f) { this->xfade = 1.0f; } if (--tab_num < 0) { tab_num = 0; } this->table_b = this->tables->h_tables[this->wave][tab_num]; } /* Run static oscilator, returns amplitude for current phase and advances the * phase. Uses linear interpoation */ static inline float blo_hs_run_lin(blo_h_osc *this) { const float frac = (float)(this->ph.part.fr) * 0.00001525878f; const int idx = this->ph.part.in; this->ph.all += this->om.all; this->ph.all &= this->ph_mask; if (this->topbit != (this->ph.all & this->table_size)) { this->topbit = this->ph.all & this->table_size; this->table = this->table_b; } return this->table[idx] * (1.0f - frac) + this->table[idx+1] * frac; } /* Run static oscilator, returns amplitude for current phase and advances the * phase. Uses cubic interpoation */ static inline float blo_hs_run_cub(blo_h_osc *this) { const float frac = (float)(this->ph.part.fr) * 0.00001525878f; const int idx = this->ph.part.in; float *t = this->table; this->ph.all += this->om.all; this->ph.all &= this->ph_mask; if (this->topbit != (this->ph.all & this->table_size)) { this->topbit = this->ph.all & this->table_size; this->table = this->table_b; t = this->table_b; } return cube_interp(frac, t[idx], t[idx+1], t[idx+2], t[idx+3]); } /* Run dynamic oscilator, returns amplitude for current phase and advances the * phase, ensures harmonics won't suddently pop into existence, takes more * cycles and has slightly less high frequency partials than the static * version */ static inline float blo_hd_run_lin(blo_h_osc * const this) { float low, high; const float frac = (float)(this->ph.part.fr) * 0.00001525878f; const int idx = this->ph.part.in; this->ph.all += this->om.all; this->ph.all &= this->ph_mask; low = LIN_INTERP(frac, this->table_b[idx], this->table_b[idx+1]); high = LIN_INTERP(frac, this->table[idx], this->table[idx+1]); return LIN_INTERP(this->xfade, low, high); } /* Run dynamic oscilator, returns amplitude for current phase and advances the * phase, ensures harmonics won't suddently pop into existence, takes more * cycles and has slightly less high frequency partials than the static * version. This one uses cubic interpolation. */ static inline float blo_hd_run_cub(blo_h_osc * const this) { float low, high; const float frac = (float)(this->ph.part.fr) * 0.00001525878f; const int idx = this->ph.part.in; const float *tl = this->table_b; const float *th = this->table; this->ph.all += this->om.all; this->ph.all &= this->ph_mask; low = cube_interp(frac, tl[idx], tl[idx+1], tl[idx+2], tl[idx+3]); high = cube_interp(frac, th[idx], th[idx+1], th[idx+2], th[idx+3]); return LIN_INTERP(this->xfade, low, high); } lmms-1.1.3/plugins/LadspaEffect/swh/util/buffer.h000066400000000000000000000004451247673406200217040ustar00rootroot00000000000000#ifndef _BUFFER_H #define _BUFFER_H /* substract buffer b from a, save in c * * this could be sped up by vector operations */ static inline void buffer_sub(const float* a, const float *b, float *c, int cnt) { int i; float *h; h = c; for(i=0;i #include #include "db.h" float db_data[DB_TABLE_SIZE]; float lin_data[LIN_TABLE_SIZE]; void db_init() { unsigned int i; for (i=0; i LIN_TABLE_SIZE - 3) { return lin_data[LIN_TABLE_SIZE - 2]; } return cube_interp(ofs, lin_data[base-1], lin_data[base], lin_data[base+1], lin_data[base+2]); } static inline float f_db2lin_lerp(float db) { float scale = (db - DB_MIN) * (float)LIN_TABLE_SIZE / (DB_MAX - DB_MIN); int base = f_round(scale - 0.5f); float ofs = scale - base; if (base < 1) { return 0.0f; } else if (base > LIN_TABLE_SIZE - 3) { return lin_data[LIN_TABLE_SIZE - 2]; } return (1.0f - ofs) * lin_data[base] + ofs * lin_data[base+1]; } static inline float f_lin2db_cube(float lin) { float scale = (lin - LIN_MIN) * (float)DB_TABLE_SIZE / (LIN_MAX - LIN_MIN); int base = f_round(scale - 0.5f); float ofs = scale - base; if (base < 2) { return db_data[2] * scale * 0.5f - 23 * (2.0f - scale); } else if (base > DB_TABLE_SIZE - 3) { return db_data[DB_TABLE_SIZE - 2]; } return cube_interp(ofs, db_data[base-1], db_data[base], db_data[base+1], db_data[base+2]); } static inline float f_lin2db_lerp(float lin) { float scale = (lin - LIN_MIN) * (float)DB_TABLE_SIZE / (LIN_MAX - LIN_MIN); int base = f_round(scale - 0.5f); float ofs = scale - base; if (base < 2) { return db_data[2] * scale * 0.5f - 23.0f * (2.0f - scale); } else if (base > DB_TABLE_SIZE - 2) { return db_data[DB_TABLE_SIZE - 1]; } return (1.0f - ofs) * db_data[base] + ofs * db_data[base+1]; } #endif lmms-1.1.3/plugins/LadspaEffect/swh/util/iir.c000066400000000000000000000136201247673406200212100ustar00rootroot00000000000000/* * iir.c * Copyright (C) 2000-2003 Alexander Ehlert * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * A port of my glame lowpass/highpass/bandpass filters due to public demand in #lad * Try out the original at glame.sourceforge.net ;-) */ #include #include "../config.h" #include #include #include "iir.h" /* To get better filter accuracy I decided to compute the single * stages of the filter seperatly and apply them one by one * to the sample data. According to the DSPGUIDE chapter 20 pp339 * filters are more stable when applied in stages. * Who doesn't like that can still combine * all stages to one stage by just convoluting the single stages. * But in the moment it's up to the user that he knows what he's doing. * float accuracy can't be enough for certain parameters. */ #define DPRINTF(x) /* (hopefully) generic description of an iir filter */ iir_stage_t *init_iir_stage(int mode, int nstages, int na, int nb){ iir_stage_t *dum=NULL; int i; if ((dum=ALLOCN(1,iir_stage_t))){ dum->mode=mode; dum->nstages=0; dum->availst=nstages; dum->na=na; dum->nb=nb; dum->fc=-1.0; dum->coeff=(gliirt **)malloc(nstages*sizeof(gliirt *)); for(i=0;icoeff[i]=(gliirt *)malloc((na+nb)*sizeof(gliirt)); } return dum; } /* be sure to combine stages with some na, nb count! */ void combine_iir_stages(int mode, iir_stage_t* gt, iir_stage_t *first, iir_stage_t *second, int upf, int ups){ int stages, i, j, cnt; if ( (upf==-1) && (ups==-1)) return; stages = first->nstages + second->nstages; gt->nstages = stages; cnt = first->na + first->nb; /* copy coefficients */ if (upf!=-1) for(i=0; instages; i++) for(j=0; jcoeff[i][j]=first->coeff[i][j]; if (ups!=-1) for(i=first->nstages; icoeff[i][j]=second->coeff[i-first->nstages][j]; } void free_iir_stage(iir_stage_t *gt){ int i; for(i=0;iavailst;i++) if (gt->coeff[i]) free(gt->coeff[i]); if (gt->coeff) free(gt->coeff); if (gt) free(gt); } /* center: frequency already normalized between 0 and 0.5 of sampling * bandwidth given in octaves between lower and upper -3dB point */ void calc_2polebandpass(iirf_t* iirf, iir_stage_t* gt, float fc, float bw, long sample_rate) { double omega, alpha, bandwidth, center, gain; int i; if ( (gt->fc==fc) && (gt->bw==bw) ) return; /*reset_iirf_t(iirf, gt, 1);*/ gt->fc = fc; gt->bw = bw; gt->nstages = 1; fc = CLAMP(fc, 0.0, (float)sample_rate*0.45f); /* if i go all the way up to 0.5 it doesn't work */ center = fc/(float)sample_rate; /* bandwidth is given in octaves */ bandwidth = log((fc+bw*0.5)/MAX(fc-bw*0.5,0.01))/log(2.0); omega = 2.0*M_PI*center; alpha = sin(omega)*sinh(log(2.0)/2.0*bandwidth*omega/sin(omega)); gt->coeff[0][0] = alpha; gt->coeff[0][1] = 0.0; gt->coeff[0][2] = -alpha; gt->coeff[0][3] = 2.0 * cos(omega); gt->coeff[0][4] = alpha - 1.0; gain = 1.0 + alpha; for(i=0;i<5;i++) gt->coeff[0][i]/=gain; } /* chebyshev calculates coefficients for a chebyshev filter * a,b coefficients * n number of poles(2,4,6,...) * m 0..lowpass, 1..highpass * fc cutoff frequency in percent of samplerate * pr percent ripple in passband (0.5 is optimal) * * Code from DSPGUIDE Chapter 20, pp341 * online version http://www.dspguide.com */ #define chebtype double int chebyshev_stage(iir_stage_t *gt, int n){ chebtype h,rp,ip,es,kx,vx,t,w,m,d,k,gain; chebtype x[3], y[2], a[3], b[2]; int res=-1,i; if (n>gt->availst) goto _error; if (gt->na+gt->nb!=5) goto _error; h=M_PI/((chebtype)gt->np*2.0)+n*M_PI/(chebtype)gt->np; rp=-cos(h); ip=sin(h); if(gt->ppr>0.0) { h=100.0/(100.0-gt->ppr); es=sqrt(h*h-1.0); h=1.0/es; vx=1.0/(chebtype)gt->np*log(h+sqrt(h*h+1.0)); kx=1.0/(chebtype)gt->np*log(h+sqrt(h*h-1.0)); kx=(exp(kx)+exp(-kx))/2.0; h=exp(vx); rp*=(h-1.0/h)*0.5/kx; ip*=(h+1.0/h)*0.5/kx; } t=2.0*tan(0.5); w=2.0*M_PI*gt->fc; m=rp*rp+ip*ip; d=4.0-4.0*rp*t+m*t*t; x[0]=t*t/d; x[1]=2*x[0]; x[2]=x[0]; y[0]=(8.0-2.0*m*t*t)/d; y[1]=(-4.0-4.0*rp*t-m*t*t)/d; if (gt->mode==IIR_STAGE_HIGHPASS) k=-cos(w*0.5+0.5)/cos(w*0.5-0.5); else k=sin(0.5-w*0.5)/sin(0.5+w*0.5); d=1+y[0]*k-y[1]*k*k; a[0]=(x[0]-x[1]*k+x[2]*k*k)/d; a[1]=(-2.0*x[0]*k+x[1]+x[1]*k*k-2.0*x[2]*k)/d; a[2]=(x[0]*k*k-x[1]*k+x[2])/d; b[0]=(2.0*k+y[0]+y[0]*k*k-2.0*y[1]*k)/d; b[1]=(-k*k-y[0]*k+y[1])/d; if(gt->mode==IIR_STAGE_HIGHPASS){ a[1]=-a[1]; b[0]=-b[0]; } if(gt->mode==IIR_STAGE_HIGHPASS) gain=(a[0]-a[1]+a[2])/(1.0+b[0]-b[1]); else gain=(a[0]+a[1]+a[2])/(1.0-b[0]-b[1]); for(i=0;i<3;i++) a[i]/=gain; gt->coeff[n][0]=(gliirt)(a[0]); gt->coeff[n][1]=(gliirt)(a[1]); gt->coeff[n][2]=(gliirt)(a[2]); gt->coeff[n][3]=(gliirt)(b[0]); gt->coeff[n][4]=(gliirt)(b[1]); res=0; _error: return res; } int chebyshev(iirf_t* iirf, iir_stage_t* gt, int n, int mode, float fc, float pr){ int i; if ( (gt->fc==fc) && (gt->np==n) && (gt->ppr=pr) ) return -1; if (n%2!=0) return -1; if ((mode!=IIR_STAGE_HIGHPASS) && (mode!=IIR_STAGE_LOWPASS)) return -1; fc=CLAMP(fc, 0.0001f, 0.4999f); if ((n/2)>gt->nstages) reset_iirf_t(iirf,gt,n/2); gt->ppr=pr; gt->fc=fc; gt->np=n; gt->nstages=n/2; for(i=0;i /* header file for IIR framework */ typedef struct iir_stage iir_stage_t; typedef struct iirf iirf_t; // defines this to float if your brave and you'll see what happens.. #define gliirt float #define CLAMP(x,mi,ma) ( (x < mi) ? mi : ( (x>ma) ? ma : x)) #ifndef MIN #define MIN(a, b) ((a)<(b)?(a):(b)) #endif #ifndef MAX #define MAX(a, b) ((a)>(b)?(a):(b)) #endif /* alloc zeroed mem, malloc/calloc syntax. */ #define ALLOC(type) (type *)calloc(1, sizeof(type)) #define ALLOCN(n, type) (n == 0 ? NULL : (type *)calloc((n), sizeof(type))) /* supported filter modes by lib */ #define IIR_STAGE_LOWPASS 0 #define IIR_STAGE_HIGHPASS 1 #define IIR_STAGE_BANDPASS 2 #define IIR_STAGE_BANDPASS_A 3 struct iir_stage { int np; /* Number of poles */ int mode; /* Filter mode low/high/bandpass... */ int availst; /* Number of allocated stages */ int nstages; /* Number of active filterstages */ int na; /* number of a coefficients per stage */ int nb; /* number of b coefficients per stage */ gliirt fc; /* cutoff/center frequency */ gliirt bw; /* bandwidth for bandpass */ gliirt ppr; /* percent of ripple in passband */ gliirt spr; /* percent of ripple in stopband */ gliirt **coeff; /* Actual filter coefficients */ }; struct iirf { gliirt *iring; gliirt *oring; int ipos; int opos; }; // allocate ringbuffers for iir calculation static inline iirf_t* init_iirf_t(iir_stage_t* gt) { int i; iirf_t* iirf=ALLOCN(gt->availst,iirf_t); for(i=0;iavailst;i++){ iirf[i].iring=ALLOCN(gt->na,gliirt); iirf[i].oring=ALLOCN(gt->nb+1,gliirt); iirf[i].ipos=0; iirf[i].opos=0; } return iirf; }; static inline void free_iirf_t(iirf_t* iirf, iir_stage_t* gt) { int i; for(i=0;iavailst;i++){ if (iirf[i].iring) free(iirf[i].iring); if (iirf[i].oring) free(iirf[i].oring); } if (iirf) free(iirf); }; static inline void reset_iirf_t(iirf_t* iirf, iir_stage_t* gt, int n) { int i; for(i=0;ina); memset(iirf[i].oring, 0, sizeof(gliirt)*(gt->nb+1)); } }; iir_stage_t *init_iir_stage(int mode, int nstages, int na, int nb); void combine_iir_stages(int mode, iir_stage_t* gt, iir_stage_t *first, iir_stage_t *second, int upf, int ups); void free_iir_stage(iir_stage_t *gt); void calc_2polebandpass(iirf_t* iirf, iir_stage_t* gt, float fc, float bw, long sample_rate); // for chebyshev we need iir stages with na=3, nb=2 // na are the forward coefficients // nb are the recursive coefficients int chebyshev(iirf_t* iirf, iir_stage_t* gt, int n, int mode, float fc, float pr); /* calculate butterworth coefficients * coefficient calculation taken from http://musicdsp.org/showArchiveComment.php?ArchiveID=38 * mode = 0 -> lowpass * mode !=0 -> highpass * * f -> cutoff frequency * r -> resonance */ static inline void butterworth_stage(iir_stage_t *gt, int mode, float f, float r, long sample_rate) { float c, a1, a2, a3, b1, b2; /* lowpass coefficients */ if (mode==0) { c = 1.0f / tan(M_PI * f / sample_rate ) ; a1 = 1.0f / ( 1.0f + r * c + c * c); a2 = 2.0f * a1; a3 = a1; b1 = -2.0f * ( 1.0f - c*c) * a1; b2 = -( 1.0f - r * c + c * c) * a1; } else { /* highpass coefficients */ c = tan(M_PI * f / sample_rate ); a1 = 1.0f / ( 1.0f + r * c + c * c); a2 = -2.0f*a1; a3 = a1; b1 = -2.0f * ( c*c - 1.0f) * a1; b2 = -( 1.0f - r * c + c * c) * a1; } gt->fc = f; gt->nstages = 1; gt->coeff[0][0] = a1; gt->coeff[0][1] = a2; gt->coeff[0][2] = a3; gt->coeff[0][3] = b1; gt->coeff[0][4] = b2; }; /* process function */ static inline void iir_process_buffer(iirf_t* iirf, iir_stage_t* gt, const float *indata, float *outdata, const long numSampsToProcess, int add) { long pos; int i,nb,nt,j,z,ipos,opos; if(gt->nstages==0) { if (indata==outdata) return; memcpy(outdata, indata, numSampsToProcess*sizeof(float)); return; } nb=gt->nb+1; nt=gt->na+gt->nb; ipos = iirf[0].ipos; opos = iirf[0].opos; if (add==0) for(pos=0; posnstages;i++){ if (i>0) iirf[i].iring[ipos]=iirf[i-1].oring[opos]; iirf[i].oring[opos]=0.0; /* y[n]=a0*x[n]+a1*x[n-1]+... */ z=ipos; for(j=0;jna;j++){ if(z==-1) z=gt->na-1; iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].iring[z--]; } /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ z=opos-1; for(j=gt->na;jnb; iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].oring[z--]; } } /* No matter if we process it in place */ outdata[pos]=(float)iirf[gt->nstages-1].oring[opos]; /* Adjust ringbuffers */ ipos++; if (ipos==gt->na) ipos=0; opos++; if (opos==nb) opos=0; } else for(pos=0; posnstages;i++){ if (i>0) iirf[i].iring[ipos]=iirf[i-1].oring[opos]; iirf[i].oring[opos]=0.0; /* y[n]=a0*x[n]+a1*x[n-1]+... */ z=ipos; for(j=0;jna;j++){ if(z==-1) z=gt->na-1; iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].iring[z--]; } /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ z=opos-1; for(j=gt->na;jnb; iirf[i].oring[opos]+=gt->coeff[i][j]*iirf[i].oring[z--]; } } /* Now it matters if we process it in place */ outdata[pos]+=(float)iirf[gt->nstages-1].oring[opos]; /* Adjust ringbuffers */ ipos++; if (ipos==gt->na) ipos=0; opos++; if (opos==nb) opos=0; } iirf[0].ipos = ipos; iirf[0].opos = opos; }; /* process function for 3a and 2b coeffs */ static inline void iir_process_buffer_1s_5(iirf_t* iirf, iir_stage_t* gt, const float *indata, float *outdata, const long numSampsToProcess, int add) { long pos; if (add==0) for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + gt->coeff[0][1]*iirf[0].iring[1] + gt->coeff[0][2]*iirf[0].iring[0] + gt->coeff[0][3]*iirf[0].oring[1] + gt->coeff[0][4]*iirf[0].oring[0]); outdata[pos]=(float)iirf[0].oring[2]; } else for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + gt->coeff[0][1]*iirf[0].iring[1] + gt->coeff[0][2]*iirf[0].iring[0] + gt->coeff[0][3]*iirf[0].oring[1] + gt->coeff[0][4]*iirf[0].oring[0]); } }; /* process function */ static inline void iir_process_buffer_ns_5(iirf_t* iirf, iir_stage_t* gt, const float *indata, float *outdata, const long numSampsToProcess, int add) { long pos; int i; if (add==0) for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + gt->coeff[0][1]*iirf[0].iring[1] + gt->coeff[0][2]*iirf[0].iring[0] + gt->coeff[0][3]*iirf[0].oring[1] + gt->coeff[0][4]*iirf[0].oring[0]); for(i=1;instages;i++){ iirf[i].iring[0]=iirf[i].iring[1]; iirf[i].iring[1]=iirf[i].iring[2]; iirf[i].iring[2]=iirf[i-1].oring[2]; iirf[i].oring[0]=iirf[i].oring[1]; iirf[i].oring[1]=iirf[i].oring[2]; /* y[n]=a0*x[n]+a1*x[n-1]+... */ /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ iirf[i].oring[2] = flush_to_zero(gt->coeff[i][0]*iirf[i].iring[2] + gt->coeff[i][1]*iirf[i].iring[1] + gt->coeff[i][2]*iirf[i].iring[0] + gt->coeff[i][3]*iirf[i].oring[1] + gt->coeff[i][4]*iirf[i].oring[0]); } /* No matter if we process it in place */ outdata[pos]=(float)iirf[gt->nstages-1].oring[2]; } else for(pos=0; poscoeff[0][0]*iirf[0].iring[2] + gt->coeff[0][1]*iirf[0].iring[1] + gt->coeff[0][2]*iirf[0].iring[0] + gt->coeff[0][3]*iirf[0].oring[1] + gt->coeff[0][4]*iirf[0].oring[0]); for(i=1;instages;i++){ iirf[i].iring[0]=iirf[i].iring[1]; iirf[i].iring[1]=iirf[i].iring[2]; iirf[i].iring[2]=iirf[i-1].oring[2]; iirf[i].oring[0]=iirf[i].oring[1]; iirf[i].oring[1]=iirf[i].oring[2]; /* y[n]=a0*x[n]+a1*x[n-1]+... */ /* y[n]=y[n]+b1*y[n-1]+b2*y[n-2]+... */ iirf[i].oring[2] = flush_to_zero( gt->coeff[i][0]*iirf[i].iring[2] + gt->coeff[i][1]*iirf[i].iring[1] + gt->coeff[i][2]*iirf[i].iring[0] + gt->coeff[i][3]*iirf[i].oring[1] + gt->coeff[i][4]*iirf[i].oring[0]); } /* No matter if we process it in place */ outdata[pos]+=(float)iirf[gt->nstages-1].oring[2]; } }; #endif lmms-1.1.3/plugins/LadspaEffect/swh/util/ls_filter.h000066400000000000000000000026001247673406200224110ustar00rootroot00000000000000#ifndef LS_FILTER_H #define LS_FILTER_H #include #define FILT_MIDI_2_FREQ(m) (m * 80.0f + 10.0f) #define FILT_MIDI_2_RESO(m) (m * 0.00787f) #define LSF_BW 0.9 #define LSF_FB 0.9f typedef struct { biquad filt; biquad bp_filt; bq_t scale; bq_t resonance; } ls_filt; typedef enum { LS_FILT_TYPE_LP = 0, LS_FILT_TYPE_BP = 1, LS_FILT_TYPE_HP = 2 } ls_filt_type; static inline void ls_filt_init(ls_filt *f) { biquad_init(&(f->filt)); biquad_init(&(f->bp_filt)); } static inline void ls_filt_setup(ls_filt *f, ls_filt_type t, bq_t cutoff, bq_t resonance, bq_t fs) { bp_set_params(&(f->bp_filt), cutoff, 0.7, fs); switch(t) { case LS_FILT_TYPE_LP: lp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs); break; case LS_FILT_TYPE_BP: bp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs); break; case LS_FILT_TYPE_HP: hp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs); break; default: /* oops, its not a known type - should really happen, but lets make the output silent just in case */ lp_set_params(&(f->filt), 1.0, 1.0, fs); break; } f->scale = 1.0f - resonance * 0.7f; f->resonance = resonance; } static inline bq_t ls_filt_run(ls_filt *f, bq_t in) { return biquad_run(&(f->filt), in) * f->scale + biquad_run_fb(&(f->bp_filt), in, f->resonance * LSF_FB) * f->resonance; } #endif lmms-1.1.3/plugins/LadspaEffect/swh/util/pitchscale.c000066400000000000000000000243071247673406200225500ustar00rootroot00000000000000/**************************************************************************** * * NAME: smsPitchScale.cp * VERSION: 1.01 * HOME URL: http://www.dspdimension.com * KNOWN BUGS: none * * SYNOPSIS: Routine for doing pitch scaling while maintaining * duration using the Short Time Fourier Transform. * * DESCRIPTION: The routine takes a pitchScale factor value which is between 0.5 * (one octave down) and 2. (one octave up). A value of exactly 1 does not change * the pitch. numSampsToProcess tells the routine how many samples in indata[0... * numSampsToProcess-1] should be pitch scaled and moved to outdata[0 ... * numSampsToProcess-1]. The two buffers can be identical (ie. it can process the * data in-place). fftFrameLength defines the FFT frame size used for the * processing. Typical values are 1024, 2048 and 4096. It may be any value <= * MAX_FFT_FRAME_LENGTH but it MUST be a power of 2. osamp is the STFT * oversampling factor which also determines the overlap between adjacent STFT * frames. It should at least be 4 for moderate scaling ratios. A value of 32 is * recommended for best quality. sampleRate takes the sample rate for the signal * in unit Hz, ie. 44100 for 44.1 kHz audio. The data passed to the routine in * indata[] should be in the range [-1.0, 1.0), which is also the output range * for the data. * * COPYRIGHT 1999 Stephan M. Sprenger * * The Wide Open License (WOL) * * Permission to use, copy, modify, distribute and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice and this license appear in all source copies. * THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF * ANY KIND. See http://www.dspguru.com/wol.htm for more information. * *****************************************************************************/ #include #include "../config.h" #include #include "pitchscale.h" static float ps_in[MAX_FRAME_LENGTH*2], ps_out[MAX_FRAME_LENGTH*2]; static fft_plan aplan = NULL, splan = NULL; void pitch_scale(sbuffers *buffers, const double pitchScale, const long fftFrameLength, const long osamp, const long numSampsToProcess, const double sampleRate, const float *indata, float *outdata, const int adding, const float gain) { /* Routine smsPitchScale(). See top of file for explanation Purpose: doing pitch scaling while maintaining duration using the Short Time Fourier Transform. Author: (c)1999 Stephan M. Sprenger */ double magn, phase, tmp; double freqPerBin, expct; long i,k, qpd, index, inFifoLatency, stepSize, fftFrameSize2; double phaseArr[MAX_FRAME_LENGTH]; float ri[16]; float *gInFIFO = buffers->gInFIFO; float *gOutFIFO = buffers->gOutFIFO; float *gLastPhase = buffers->gLastPhase; float *gSumPhase = buffers->gSumPhase; float *gOutputAccum = buffers->gOutputAccum; float *gAnaFreq = buffers->gAnaFreq; float *gAnaMagn = buffers->gAnaMagn; float *gSynFreq = buffers->gSynFreq; float *gSynMagn = buffers->gSynMagn; float *gWindow = buffers->gWindow; long gRover = buffers->gRover; if (aplan == NULL) { int i; for (i=0; i= fftFrameLength) { gRover = inFifoLatency; /* do windowing and store */ for (k = 0; k < fftFrameLength; k++) { ps_in[k] = gInFIFO[k] * gWindow[k]; } /* As long as we have not yet collected enough data just read in */ /* ***************** ANALYSIS ******************* */ /* do transform */ #ifdef FFTW3 fftwf_execute(aplan); #else rfftw_one(aplan, ps_in, ps_out); #endif /* this is the analysis step */ /* Hard math first, we can 3dnow this */ for (k = 1; k <= fftFrameSize2; k+=8) { float *mb = &gAnaMagn[k]; ri[0] = ps_out[k]; ri[2] = ps_out[k+1]; ri[4] = ps_out[k+2]; ri[6] = ps_out[k+3]; ri[8] = ps_out[k+4]; ri[10] = ps_out[k+5]; ri[12] = ps_out[k+6]; ri[14] = ps_out[k+7]; ri[1] = ps_out[fftFrameLength - k]; ri[3] = ps_out[fftFrameLength - (k + 1)]; ri[5] = ps_out[fftFrameLength - (k + 2)]; ri[7] = ps_out[fftFrameLength - (k + 3)]; ri[9] = ps_out[fftFrameLength - (k + 4)]; ri[11] = ps_out[fftFrameLength - (k + 5)]; ri[13] = ps_out[fftFrameLength - (k + 6)]; ri[15] = ps_out[fftFrameLength - (k + 7)]; /* compute magnitude and phase. */ #ifdef ACCEL_3DNOW #warning Using processor specific 3DNow! accelerations __asm__ __volatile__ ( " \n\ femms \n\ movq (%%eax), %%mm0 \n\ movq 8(%%eax), %%mm1 \n\ movq 16(%%eax), %%mm2 \n\ movq 24(%%eax), %%mm3 \n\ movq 32(%%eax), %%mm4 \n\ movq 40(%%eax), %%mm5 \n\ movq 48(%%eax), %%mm6 \n\ movq 56(%%eax), %%mm7 \n\ # do the squares and add \n\ pfmul %%mm0, %%mm0 \n\ pfacc %%mm0, %%mm0 \n\ pfmul %%mm1, %%mm1 \n\ pfacc %%mm1, %%mm1 \n\ pfmul %%mm2, %%mm2 \n\ pfacc %%mm2, %%mm2 \n\ pfmul %%mm3, %%mm3 \n\ pfacc %%mm3, %%mm3 \n\ pfmul %%mm4, %%mm4 \n\ pfacc %%mm4, %%mm4 \n\ pfmul %%mm5, %%mm5 \n\ pfacc %%mm5, %%mm5 \n\ pfmul %%mm6, %%mm6 \n\ pfacc %%mm6, %%mm6 \n\ pfmul %%mm7, %%mm7 \n\ pfacc %%mm7, %%mm7 \n\ # Recip square roots. \n\ pfrsqrt %%mm0, %%mm0 \n\ pfrsqrt %%mm1, %%mm1 \n\ pfrsqrt %%mm2, %%mm2 \n\ pfrsqrt %%mm3, %%mm3 \n\ pfrsqrt %%mm4, %%mm4 \n\ pfrsqrt %%mm5, %%mm5 \n\ pfrsqrt %%mm6, %%mm6 \n\ pfrsqrt %%mm7, %%mm7 \n\ pfrcp %%mm0, %%mm0 \n\ pfrcp %%mm1, %%mm1 \n\ pfrcp %%mm2, %%mm2 \n\ pfrcp %%mm3, %%mm3 \n\ pfrcp %%mm4, %%mm4 \n\ pfrcp %%mm5, %%mm5 \n\ pfrcp %%mm6, %%mm6 \n\ pfrcp %%mm7, %%mm7 \n\ # ship em out \n\ movd %%mm0, (%%edx) \n\ movd %%mm1, 4(%%edx) \n\ movd %%mm2, 8(%%edx) \n\ movd %%mm3, 12(%%edx) \n\ movd %%mm4, 16(%%edx) \n\ movd %%mm5, 20(%%edx) \n\ movd %%mm6, 24(%%edx) \n\ movd %%mm7, 28(%%edx) \n\ femms \n\ " : : "a" (ri), "d" (mb) : "memory"); #else mb[0] = sqrt(ri[0]*ri[0]+ ri[1]*ri[1]); mb[1] = sqrt(ri[2]*ri[2] + ri[3]*ri[3]); mb[2] = sqrt(ri[4]*ri[4] + ri[5]*ri[5]); mb[3] = sqrt(ri[6]*ri[6] + ri[7]*ri[7]); #endif phaseArr[k] = atan2(ri[1], ri[0]); phaseArr[k+1] = atan2(ri[3], ri[2]); phaseArr[k+2] = atan2(ri[5], ri[4]); phaseArr[k+3] = atan2(ri[7], ri[6]); phaseArr[k+4] = atan2(ri[9], ri[8]); phaseArr[k+5] = atan2(ri[11], ri[10]); phaseArr[k+6] = atan2(ri[13], ri[12]); phaseArr[k+7] = atan2(ri[15], ri[14]); } for (k = 1; k <= fftFrameSize2; k++) { /* compute phase difference */ tmp = phaseArr[k] - gLastPhase[k]; gLastPhase[k] = phaseArr[k]; /* subtract expected phase difference */ tmp -= (double)k*expct; /* map delta phase into +/- Pi interval */ qpd = tmp/M_PI; if (qpd >= 0) qpd += qpd&1; else qpd -= qpd&1; tmp -= M_PI*(double)qpd; /* get deviation from bin frequency from the +/- Pi interval */ tmp = osamp*tmp/(2.0f*M_PI); /* compute the k-th partials' true frequency */ tmp = (double)k*freqPerBin + tmp*freqPerBin; /* store magnitude and true frequency in analysis arrays */ gAnaFreq[k] = tmp; } /* ***************** PROCESSING ******************* */ /* this does the actual pitch scaling */ memset(gSynMagn, 0, fftFrameLength*sizeof(float)); memset(gSynFreq, 0, fftFrameLength*sizeof(float)); for (k = 0; k <= fftFrameSize2; k++) { index = k/pitchScale; if (index <= fftFrameSize2) { /* new bin overrides existing if magnitude is higher */ if (gAnaMagn[index] > gSynMagn[k]) { gSynMagn[k] = gAnaMagn[index]; gSynFreq[k] = gAnaFreq[index] * pitchScale; } /* fill empty bins with nearest neighbour */ if ((gSynFreq[k] == 0.) && (k > 0)) { gSynFreq[k] = gSynFreq[k-1]; gSynMagn[k] = gSynMagn[k-1]; } } } /* ***************** SYNTHESIS ******************* */ /* this is the synthesis step */ for (k = 1; k <= fftFrameSize2; k++) { /* get magnitude and true frequency from synthesis arrays */ magn = gSynMagn[k]; tmp = gSynFreq[k]; /* subtract bin mid frequency */ tmp -= (double)k*freqPerBin; /* get bin deviation from freq deviation */ tmp /= freqPerBin; /* take osamp into account */ tmp = 2.*M_PI*tmp/osamp; /* add the overlap phase advance back in */ tmp += (double)k*expct; /* accumulate delta phase to get bin phase */ gSumPhase[k] += tmp; phase = gSumPhase[k]; ps_in[k] = magn*cosf(phase); ps_in[fftFrameLength - k] = magn*sinf(phase); } /* do inverse transform */ #ifdef FFTW3 fftwf_execute(splan); #else rfftw_one(splan, ps_in, ps_out); #endif /* do windowing and add to output accumulator */ for(k=0; k < fftFrameLength; k++) { gOutputAccum[k] += 2.0f*gWindow[k]*ps_out[k]/(fftFrameSize2*osamp); } for (k = 0; k < stepSize; k++) gOutFIFO[k] = gOutputAccum[k]; /* shift accumulator */ memmove(gOutputAccum, gOutputAccum+stepSize, fftFrameLength*sizeof(float)); /* move input FIFO */ for (k = 0; k < inFifoLatency; k++) gInFIFO[k] = gInFIFO[k+stepSize]; } } buffers->gRover = gRover; } lmms-1.1.3/plugins/LadspaEffect/swh/util/pitchscale.h000066400000000000000000000015021247673406200225450ustar00rootroot00000000000000#ifndef PITCHSCALE_H #define PITCHSCALE_H #include #ifdef FFTW3 #include typedef fftwf_plan fft_plan; typedef float fftw_real; #else #ifdef EXPLICIT_S #include #else #include #endif //EXPLICIT_S typedef rfftw_plan fft_plan; #endif //FFTW3 typedef struct { float *gInFIFO; float *gOutFIFO; float *gLastPhase; float *gSumPhase; float *gOutputAccum; float *gAnaFreq; float *gAnaMagn; float *gSynFreq; float *gSynMagn; float *gWindow; long gRover; } sbuffers; #define MAX_FRAME_LENGTH 4096 #define true 1 #define false 0 void pitch_scale(sbuffers *buffers, const double pitchScale, const long fftFrameLength, const long osamp, const long numSampsToProcess, const double sampleRate, const float *indata, float *outdata, const int adding, const float gain); #endif lmms-1.1.3/plugins/LadspaEffect/swh/util/rms.c000066400000000000000000000005021247673406200212210ustar00rootroot00000000000000#include #include "rms.h" rms_env *rms_env_new() { rms_env *new = (rms_env *)calloc(1, sizeof(rms_env)); return new; } void rms_env_reset(rms_env *r) { unsigned int i; for (i=0; ibuffer[i] = 0.0f; } r->pos = 0; r->sum = 0.0f; } void rms_env_free(rms_env *r) { free(r); } lmms-1.1.3/plugins/LadspaEffect/swh/util/rms.h000066400000000000000000000011341247673406200212300ustar00rootroot00000000000000#ifndef _RMS_H #define _RMS_H #include #define RMS_BUF_SIZE 64 typedef struct { float buffer[RMS_BUF_SIZE]; unsigned int pos; float sum; } rms_env; rms_env *rms_env_new(); static inline float rms_env_process(rms_env *r, float x); void rms_env_reset(rms_env *r); void rms_env_free(rms_env *r); inline static float rms_env_process(rms_env *r, const float x) { r->sum -= r->buffer[r->pos]; r->sum += x; if (r->sum < 1.0e-6) { r->sum = 0.0f; } r->buffer[r->pos] = x; r->pos = (r->pos + 1) & (RMS_BUF_SIZE - 1); return sqrt(r->sum / (float)RMS_BUF_SIZE); } #endif lmms-1.1.3/plugins/LadspaEffect/swh/util/waveguide_nl.h000066400000000000000000000060731247673406200231070ustar00rootroot00000000000000#ifndef WAVEGUIDE_NL_H #define WAVEGUIDE_NL_H #include #include typedef struct { int size; float *buffer[2]; int ptr; int delay; float fc; float lp[2]; float a1a; float a1b; float zm1[2]; } waveguide_nl; waveguide_nl *waveguide_nl_new(int size, float fc, float da, float db) { waveguide_nl *wg = malloc(sizeof(waveguide_nl)); wg->size = size; wg->delay = size; wg->buffer[0] = calloc(size, sizeof(float)); wg->buffer[1] = calloc(size, sizeof(float)); wg->ptr = 0; wg->fc = fc; wg->lp[0] = 0.0f; wg->lp[1] = 0.0f; wg->zm1[0] = 0.0f; wg->zm1[1] = 0.0f; wg->a1a = (1.0f - da) / (1.0f + da); wg->a1b = (1.0f - db) / (1.0f + db); return wg; } inline void waveguide_nl_reset(waveguide_nl *wg) { memset(wg->buffer[0], 0, wg->size * sizeof(float)); memset(wg->buffer[1], 0, wg->size * sizeof(float)); wg->lp[0] = 0.0f; wg->lp[1] = 0.0f; wg->zm1[0] = 0.0f; wg->zm1[1] = 0.0f; } inline void waveguide_nl_free(waveguide_nl *wg) { if (!wg) { return; } free(wg->buffer[0]); free(wg->buffer[1]); free(wg); } inline void waveguide_nl_set_delay(waveguide_nl *wg, int delay) { if (delay > wg->size) { wg->delay = wg->size; } else if (delay < 1) { wg->delay = 1; } else { wg->delay = delay; } } inline void waveguide_nl_set_fc(waveguide_nl *wg, float fc) { wg->fc = fc; } inline void waveguide_nl_set_ap(waveguide_nl *wg, float da, float db) { wg->a1a = (1.0f - da) / (1.0f + da); wg->a1b = (1.0f - db) / (1.0f + db); } inline void waveguide_nl_process_lin(waveguide_nl *wg, float in0, float in1, float *out0, float *out1) { float tmp; *out0 = wg->buffer[0][(wg->ptr + wg->delay) % wg->size]; *out0 = wg->lp[0] * (wg->fc - 1.0f) + wg->fc * *out0; wg->lp[0] = *out0; tmp = *out0 * -(wg->a1a) + wg->zm1[0]; wg->zm1[0] = tmp * wg->a1a + *out0; *out0 = tmp; *out1 = wg->buffer[1][(wg->ptr + wg->delay) % wg->size]; *out1 = wg->lp[1] * (wg->fc - 1.0f) + wg->fc * *out1; wg->lp[1] = *out1; tmp = *out1 * -(wg->a1a) + wg->zm1[1]; wg->zm1[1] = tmp * wg->a1a + *out1; *out1 = tmp; wg->buffer[0][wg->ptr] = in0; wg->buffer[1][wg->ptr] = in1; wg->ptr--; if (wg->ptr < 0) { wg->ptr += wg->size; } } inline void waveguide_nl_process(waveguide_nl *wg, float in0, float in1, float *out0, float *out1) { float tmp; float a1; float b; *out0 = wg->buffer[0][(wg->ptr + wg->delay) % wg->size]; *out0 = wg->lp[0] * (wg->fc - 1.0f) + wg->fc * *out0; wg->lp[0] = *out0; b = (*out0 + 1.0) * 6.0f; if (b > 1.0f) { b = 1.0f; } if (b < 0.0f) { b = 0.0f; } a1 = b * wg->a1a + (1.0f - b) * wg->a1b; tmp = *out0 * -a1 + wg->zm1[0]; wg->zm1[0] = tmp * a1 + *out0; *out0 = tmp; *out1 = wg->buffer[1][(wg->ptr + wg->delay) % wg->size]; *out1 = wg->lp[1] * (wg->fc - 1.0f) + wg->fc * *out1; wg->lp[1] = *out1; b = (*out1 + 1.0) * 6.0f; if (b > 1.0f) { b = 1.0f; } if (b < 0.0f) { b = 0.0f; } a1 = b * wg->a1a + (1.0f - b) * wg->a1b; tmp = *out1 * -a1 + wg->zm1[1]; wg->zm1[1] = tmp * a1 + *out1; *out1 = tmp; wg->buffer[0][wg->ptr] = in0; wg->buffer[1][wg->ptr] = in1; wg->ptr--; if (wg->ptr < 0) { wg->ptr += wg->size; } } #endif lmms-1.1.3/plugins/LadspaEffect/swh/valve_1209.c000066400000000000000000000223051247673406200212400ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "valve_1209.xml" #include "ladspa-util.h" #define VALVE_Q_P 0 #define VALVE_DIST_P 1 #define VALVE_INPUT 2 #define VALVE_OUTPUT 3 static LADSPA_Descriptor *valveDescriptor = NULL; typedef struct { LADSPA_Data *q_p; LADSPA_Data *dist_p; LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data itm1; LADSPA_Data otm1; LADSPA_Data run_adding_gain; } Valve; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return valveDescriptor; default: return NULL; } } static void activateValve(LADSPA_Handle instance) { Valve *plugin_data = (Valve *)instance; LADSPA_Data itm1 = plugin_data->itm1; LADSPA_Data otm1 = plugin_data->otm1; #line 21 "valve_1209.xml" itm1 = 0.0f; otm1 = 0.0f; plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } static void cleanupValve(LADSPA_Handle instance) { free(instance); } static void connectPortValve( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Valve *plugin; plugin = (Valve *)instance; switch (port) { case VALVE_Q_P: plugin->q_p = data; break; case VALVE_DIST_P: plugin->dist_p = data; break; case VALVE_INPUT: plugin->input = data; break; case VALVE_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateValve( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Valve *plugin_data = (Valve *)malloc(sizeof(Valve)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runValve(LADSPA_Handle instance, unsigned long sample_count) { Valve *plugin_data = (Valve *)instance; /* Distortion level (float value) */ const LADSPA_Data q_p = *(plugin_data->q_p); /* Distortion character (float value) */ const LADSPA_Data dist_p = *(plugin_data->dist_p); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data itm1 = plugin_data->itm1; LADSPA_Data otm1 = plugin_data->otm1; #line 26 "valve_1209.xml" unsigned long pos; LADSPA_Data fx; const float q = q_p - 0.999f; const float dist = dist_p * 40.0f + 0.1f; if (q == 0.0f) { for (pos = 0; pos < sample_count; pos++) { if (input[pos] == q) { fx = 1.0f / dist; } else { fx = input[pos] / (1.0f - f_exp(-dist * input[pos])); } otm1 = 0.999f * otm1 + fx - itm1; round_to_zero(&otm1); itm1 = fx; buffer_write(output[pos], otm1); } } else { for (pos = 0; pos < sample_count; pos++) { if (input[pos] == q) { fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); } else { fx = (input[pos] - q) / (1.0f - f_exp(-dist * (input[pos] - q))) + q / (1.0f - f_exp(dist * q)); } otm1 = 0.999f * otm1 + fx - itm1; round_to_zero(&otm1); itm1 = fx; buffer_write(output[pos], otm1); } } plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainValve(LADSPA_Handle instance, LADSPA_Data gain) { ((Valve *)instance)->run_adding_gain = gain; } static void runAddingValve(LADSPA_Handle instance, unsigned long sample_count) { Valve *plugin_data = (Valve *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Distortion level (float value) */ const LADSPA_Data q_p = *(plugin_data->q_p); /* Distortion character (float value) */ const LADSPA_Data dist_p = *(plugin_data->dist_p); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data itm1 = plugin_data->itm1; LADSPA_Data otm1 = plugin_data->otm1; #line 26 "valve_1209.xml" unsigned long pos; LADSPA_Data fx; const float q = q_p - 0.999f; const float dist = dist_p * 40.0f + 0.1f; if (q == 0.0f) { for (pos = 0; pos < sample_count; pos++) { if (input[pos] == q) { fx = 1.0f / dist; } else { fx = input[pos] / (1.0f - f_exp(-dist * input[pos])); } otm1 = 0.999f * otm1 + fx - itm1; round_to_zero(&otm1); itm1 = fx; buffer_write(output[pos], otm1); } } else { for (pos = 0; pos < sample_count; pos++) { if (input[pos] == q) { fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); } else { fx = (input[pos] - q) / (1.0f - f_exp(-dist * (input[pos] - q))) + q / (1.0f - f_exp(dist * q)); } otm1 = 0.999f * otm1 + fx - itm1; round_to_zero(&otm1); itm1 = fx; buffer_write(output[pos], otm1); } } plugin_data->itm1 = itm1; plugin_data->otm1 = otm1; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif valveDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (valveDescriptor) { valveDescriptor->UniqueID = 1209; valveDescriptor->Label = "valve"; valveDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; valveDescriptor->Name = D_("Valve saturation"); valveDescriptor->Maker = "Steve Harris "; valveDescriptor->Copyright = "GPL"; valveDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); valveDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); valveDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); valveDescriptor->PortNames = (const char **)port_names; /* Parameters for Distortion level */ port_descriptors[VALVE_Q_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VALVE_Q_P] = D_("Distortion level"); port_range_hints[VALVE_Q_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VALVE_Q_P].LowerBound = 0; port_range_hints[VALVE_Q_P].UpperBound = 1; /* Parameters for Distortion character */ port_descriptors[VALVE_DIST_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VALVE_DIST_P] = D_("Distortion character"); port_range_hints[VALVE_DIST_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VALVE_DIST_P].LowerBound = 0; port_range_hints[VALVE_DIST_P].UpperBound = 1; /* Parameters for Input */ port_descriptors[VALVE_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[VALVE_INPUT] = D_("Input"); port_range_hints[VALVE_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[VALVE_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[VALVE_OUTPUT] = D_("Output"); port_range_hints[VALVE_OUTPUT].HintDescriptor = 0; valveDescriptor->activate = activateValve; valveDescriptor->cleanup = cleanupValve; valveDescriptor->connect_port = connectPortValve; valveDescriptor->deactivate = NULL; valveDescriptor->instantiate = instantiateValve; valveDescriptor->run = runValve; valveDescriptor->run_adding = runAddingValve; valveDescriptor->set_run_adding_gain = setRunAddingGainValve; } } void __attribute__((destructor)) swh_fini() { if (valveDescriptor) { free((LADSPA_PortDescriptor *)valveDescriptor->PortDescriptors); free((char **)valveDescriptor->PortNames); free((LADSPA_PortRangeHint *)valveDescriptor->PortRangeHints); free(valveDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/valve_rect_1405.c000066400000000000000000000247601247673406200222620ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "valve_rect_1405.xml" #include "ladspa-util.h" #define VALVERECT_SAG 0 #define VALVERECT_DIST_P 1 #define VALVERECT_INPUT 2 #define VALVERECT_OUTPUT 3 static LADSPA_Descriptor *valveRectDescriptor = NULL; typedef struct { LADSPA_Data *sag; LADSPA_Data *dist_p; LADSPA_Data *input; LADSPA_Data *output; unsigned int apos; float * avg; int avg_size; float avg_sizer; float avgs; float lp1tm1; float lp2tm1; LADSPA_Data run_adding_gain; } ValveRect; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return valveRectDescriptor; default: return NULL; } } static void activateValveRect(LADSPA_Handle instance) { ValveRect *plugin_data = (ValveRect *)instance; unsigned int apos = plugin_data->apos; float *avg = plugin_data->avg; int avg_size = plugin_data->avg_size; float avg_sizer = plugin_data->avg_sizer; float avgs = plugin_data->avgs; float lp1tm1 = plugin_data->lp1tm1; float lp2tm1 = plugin_data->lp2tm1; #line 36 "valve_rect_1405.xml" memset(avg, 0, avg_size * sizeof(float)); avgs = 0.0f; apos = 0; lp1tm1 = 0.0f; lp2tm1 = 0.0f; plugin_data->apos = apos; plugin_data->avg = avg; plugin_data->avg_size = avg_size; plugin_data->avg_sizer = avg_sizer; plugin_data->avgs = avgs; plugin_data->lp1tm1 = lp1tm1; plugin_data->lp2tm1 = lp2tm1; } static void cleanupValveRect(LADSPA_Handle instance) { #line 44 "valve_rect_1405.xml" ValveRect *plugin_data = (ValveRect *)instance; free(plugin_data->avg); free(instance); } static void connectPortValveRect( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { ValveRect *plugin; plugin = (ValveRect *)instance; switch (port) { case VALVERECT_SAG: plugin->sag = data; break; case VALVERECT_DIST_P: plugin->dist_p = data; break; case VALVERECT_INPUT: plugin->input = data; break; case VALVERECT_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateValveRect( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { ValveRect *plugin_data = (ValveRect *)malloc(sizeof(ValveRect)); unsigned int apos; float *avg = NULL; int avg_size; float avg_sizer; float avgs; float lp1tm1; float lp2tm1; #line 19 "valve_rect_1405.xml" // Number of samples in averaging buffer avg_size = s_rate / 9; // Reciprocal of obove avg_sizer = 9.0f / (float)s_rate; // Averaging buffer avg = calloc(avg_size, sizeof(float)); // Sum of samples in averaging buffer avgs = 0.0f; // Position in averaging buffer apos = 0; // Last value in lowpass 1 lp1tm1 = 0.0f; // Last value in lowpass 2 lp2tm1 = 0.0f; plugin_data->apos = apos; plugin_data->avg = avg; plugin_data->avg_size = avg_size; plugin_data->avg_sizer = avg_sizer; plugin_data->avgs = avgs; plugin_data->lp1tm1 = lp1tm1; plugin_data->lp2tm1 = lp2tm1; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runValveRect(LADSPA_Handle instance, unsigned long sample_count) { ValveRect *plugin_data = (ValveRect *)instance; /* Sag level (float value) */ const LADSPA_Data sag = *(plugin_data->sag); /* Distortion (float value) */ const LADSPA_Data dist_p = *(plugin_data->dist_p); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int apos = plugin_data->apos; float * avg = plugin_data->avg; int avg_size = plugin_data->avg_size; float avg_sizer = plugin_data->avg_sizer; float avgs = plugin_data->avgs; float lp1tm1 = plugin_data->lp1tm1; float lp2tm1 = plugin_data->lp2tm1; #line 48 "valve_rect_1405.xml" unsigned long pos; float q, x, fx; const float dist = dist_p * 40.0f + 0.1f; for (pos = 0; pos < sample_count; pos++) { x = fabs(input[pos]); if (x > lp1tm1) { lp1tm1 = x; } else { lp1tm1 = 0.9999f * lp1tm1 + 0.0001f * x; } avgs -= avg[apos]; avgs += lp1tm1; avg[apos++] = lp1tm1; apos %= avg_size; lp2tm1 = 0.999f * lp2tm1 + avgs*avg_sizer * 0.001f; q = lp1tm1 * sag - lp2tm1 * 1.02f - 1.0f; if (q > -0.01f) { q = -0.01f; } else if (q < -1.0f) { q = -1.0f; } if (input[pos] == q) { fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); } else { fx = (input[pos] - q) / (1.0f - f_exp(-dist * (input[pos] - q))) + q / (1.0f - f_exp(dist * q)); } buffer_write(output[pos], fx); } plugin_data->lp1tm1 = lp1tm1; plugin_data->lp2tm1 = lp2tm1; plugin_data->avgs = avgs; plugin_data->apos = apos; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainValveRect(LADSPA_Handle instance, LADSPA_Data gain) { ((ValveRect *)instance)->run_adding_gain = gain; } static void runAddingValveRect(LADSPA_Handle instance, unsigned long sample_count) { ValveRect *plugin_data = (ValveRect *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Sag level (float value) */ const LADSPA_Data sag = *(plugin_data->sag); /* Distortion (float value) */ const LADSPA_Data dist_p = *(plugin_data->dist_p); /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; unsigned int apos = plugin_data->apos; float * avg = plugin_data->avg; int avg_size = plugin_data->avg_size; float avg_sizer = plugin_data->avg_sizer; float avgs = plugin_data->avgs; float lp1tm1 = plugin_data->lp1tm1; float lp2tm1 = plugin_data->lp2tm1; #line 48 "valve_rect_1405.xml" unsigned long pos; float q, x, fx; const float dist = dist_p * 40.0f + 0.1f; for (pos = 0; pos < sample_count; pos++) { x = fabs(input[pos]); if (x > lp1tm1) { lp1tm1 = x; } else { lp1tm1 = 0.9999f * lp1tm1 + 0.0001f * x; } avgs -= avg[apos]; avgs += lp1tm1; avg[apos++] = lp1tm1; apos %= avg_size; lp2tm1 = 0.999f * lp2tm1 + avgs*avg_sizer * 0.001f; q = lp1tm1 * sag - lp2tm1 * 1.02f - 1.0f; if (q > -0.01f) { q = -0.01f; } else if (q < -1.0f) { q = -1.0f; } if (input[pos] == q) { fx = 1.0f / dist + q / (1.0f - f_exp(dist * q)); } else { fx = (input[pos] - q) / (1.0f - f_exp(-dist * (input[pos] - q))) + q / (1.0f - f_exp(dist * q)); } buffer_write(output[pos], fx); } plugin_data->lp1tm1 = lp1tm1; plugin_data->lp2tm1 = lp2tm1; plugin_data->avgs = avgs; plugin_data->apos = apos; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif valveRectDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (valveRectDescriptor) { valveRectDescriptor->UniqueID = 1405; valveRectDescriptor->Label = "valveRect"; valveRectDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; valveRectDescriptor->Name = D_("Valve rectifier"); valveRectDescriptor->Maker = "Steve Harris "; valveRectDescriptor->Copyright = "GPL"; valveRectDescriptor->PortCount = 4; port_descriptors = (LADSPA_PortDescriptor *)calloc(4, sizeof(LADSPA_PortDescriptor)); valveRectDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(4, sizeof(LADSPA_PortRangeHint)); valveRectDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(4, sizeof(char*)); valveRectDescriptor->PortNames = (const char **)port_names; /* Parameters for Sag level */ port_descriptors[VALVERECT_SAG] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VALVERECT_SAG] = D_("Sag level"); port_range_hints[VALVERECT_SAG].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VALVERECT_SAG].LowerBound = 0; port_range_hints[VALVERECT_SAG].UpperBound = 1; /* Parameters for Distortion */ port_descriptors[VALVERECT_DIST_P] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VALVERECT_DIST_P] = D_("Distortion"); port_range_hints[VALVERECT_DIST_P].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VALVERECT_DIST_P].LowerBound = 0; port_range_hints[VALVERECT_DIST_P].UpperBound = 1; /* Parameters for Input */ port_descriptors[VALVERECT_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[VALVERECT_INPUT] = D_("Input"); port_range_hints[VALVERECT_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[VALVERECT_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[VALVERECT_OUTPUT] = D_("Output"); port_range_hints[VALVERECT_OUTPUT].HintDescriptor = 0; valveRectDescriptor->activate = activateValveRect; valveRectDescriptor->cleanup = cleanupValveRect; valveRectDescriptor->connect_port = connectPortValveRect; valveRectDescriptor->deactivate = NULL; valveRectDescriptor->instantiate = instantiateValveRect; valveRectDescriptor->run = runValveRect; valveRectDescriptor->run_adding = runAddingValveRect; valveRectDescriptor->set_run_adding_gain = setRunAddingGainValveRect; } } void __attribute__((destructor)) swh_fini() { if (valveRectDescriptor) { free((LADSPA_PortDescriptor *)valveRectDescriptor->PortDescriptors); free((char **)valveRectDescriptor->PortNames); free((LADSPA_PortRangeHint *)valveRectDescriptor->PortRangeHints); free(valveRectDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/vocoder_1337.c000066400000000000000000000347501247673406200215750ustar00rootroot00000000000000/* vocoder.c Version 0.3 LADSPA Unique ID: 1337 Version 0.31 Added stereo output, renamed input/output ports, added, added a control for stereo balance Version 0.3 Added support for changing bands in real time 2003-12-09 Version 0.2 Adapted to LADSPA by Josh Green 15.6.2001 (for the LinuxTag 2001!) Original program can be found at: http://www.sirlab.de/linux/ Author: Achim Settelmeier Adapted to LMMS by Hexasoft (hexasoft.corp@free.fr) Licence: GPL 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 . */ /* not familiar with WINDOWS stuff. Saw this in other sources, it should be needed */ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif /*****************************************************************************/ /* general includes */ #include #include #include #include /*****************************************************************************/ /* LADSPA headers */ #include /*****************************************************************************/ #define LADSPA_UNIQUE_ID 1337 #define MAX_BANDS 16 /* max 16 bandsn should be increased */ #define AMPLIFIER 16.0 struct bandpass { LADSPA_Data c, f, att; LADSPA_Data freq; LADSPA_Data low1, low2; LADSPA_Data mid1, mid2; LADSPA_Data high1, high2; LADSPA_Data y; }; struct bands_out{ LADSPA_Data decay; LADSPA_Data oldval; LADSPA_Data level; /* 0.0 - 1.0 level of this output band */ }; const LADSPA_Data decay_table[] = { 1/100.0, 1/100.0, 1/100.0, 1/100.0, 1/125.0, 1/125.0, 1/125.0, 1/166.0, 1/166.0, 1/166.0, 1/200.0, 1/200.0, 1/200.0, 1/250.0, 1/250.0, 1/250.0 }; /* The port numbers for the plugin: */ #define PORT_FORMANT 0 /* the track to "vocodify */ #define PORT_CARRIER 1 /* the track to control 1st track */ #define PORT_OUTPUT 2 /* left output */ #define PORT_OUTPUT2 3 /* right output */ #define CTRL_BANDCOUNT 4 /* selected # of bands to use */ #define CTRL_PAN 5 /* stereo balance for outputs */ #define CTRL_BAND1LVL 6 /* start of bands level */ #define PORT_COUNT 6 + MAX_BANDS /* bands level */ /* useful macros */ #undef CLAMP #define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) /* Instance data for the vocoder plugin */ typedef struct { LADSPA_Data SampleRate; int num_bands; /* current number of bands */ float mainvol; /* main volume */ struct bandpass bands_formant[MAX_BANDS]; /* one structure per band */ struct bandpass bands_carrier[MAX_BANDS]; /* one structure per band */ struct bands_out bands_out[MAX_BANDS]; /* one structure per band */ /* Ports */ LADSPA_Data * portFormant; /* Formant signal port data location */ LADSPA_Data * portCarrier; /* Carrier signal port data location */ LADSPA_Data * portOutput; /* Output audio port data location */ LADSPA_Data * portOutput2; /* Output audio port data location (copy of previous one) */ LADSPA_Data * ctrlPan; /* PAN for output */ LADSPA_Data * ctrlBandCount; /* Band count control */ LADSPA_Data * ctrlBandLevels[MAX_BANDS]; /* level controls for each band */ } VocoderInstance; /*****************************************************************************/ /* Construct a new plugin instance. */ LADSPA_Handle instantiateVocoder(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { VocoderInstance * vocoder; vocoder = (VocoderInstance *)malloc(sizeof(VocoderInstance)); if (vocoder == NULL) return NULL; vocoder->SampleRate = (LADSPA_Data)SampleRate; vocoder->num_bands = -1; return vocoder; } /*****************************************************************************/ /* Initialise and activate a plugin instance. */ void activateVocoder(LADSPA_Handle Instance) { VocoderInstance *vocoder = (VocoderInstance *)Instance; int i; vocoder->mainvol = 1.0 * AMPLIFIER; for (i = 0; i < MAX_BANDS; i++) vocoder->bands_out[i].oldval = 0.0; } /*****************************************************************************/ /* Connect a port to a data location. */ void connectPortToVocoder(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { VocoderInstance * vocoder; vocoder = (VocoderInstance *)Instance; switch (Port) { case PORT_FORMANT: /* formant port? */ vocoder->portFormant = DataLocation; break; case PORT_CARRIER: /* carrier port? */ vocoder->portCarrier = DataLocation; break; case PORT_OUTPUT: /* output port? */ vocoder->portOutput = DataLocation; break; case PORT_OUTPUT2: /* output port? */ vocoder->portOutput2 = DataLocation; break; case CTRL_BANDCOUNT: /* band count control? */ vocoder->ctrlBandCount = DataLocation; break; case CTRL_PAN: /* Pan control? */ vocoder->ctrlPan = DataLocation; break; default: /* a band level control? */ if (Port >= CTRL_BAND1LVL && Port < CTRL_BAND1LVL + MAX_BANDS) vocoder->ctrlBandLevels[Port - CTRL_BAND1LVL] = DataLocation; break; } } /*****************************************************************************/ // vocoder_do_bandpasses /*fold00*/ void vocoder_do_bandpasses(struct bandpass *bands, LADSPA_Data sample, VocoderInstance *vocoder) { int i; for (i=0; i < vocoder->num_bands; i++) { bands[i].high1 = sample - bands[i].f * bands[i].mid1 - bands[i].low1; bands[i].mid1 += bands[i].high1 * bands[i].c; bands[i].low1 += bands[i].mid1; bands[i].high2 = bands[i].low1 - bands[i].f * bands[i].mid2 - bands[i].low2; bands[i].mid2 += bands[i].high2 * bands[i].c; bands[i].low2 += bands[i].mid2; bands[i].y = bands[i].high2 * bands[i].att; } } /* Run a vocoder instance for a block of SampleCount samples. */ void runVocoder(LADSPA_Handle Instance, unsigned long SampleCount) { VocoderInstance *vocoder = (VocoderInstance *)Instance; int i, j, numbands, pan; float a; LADSPA_Data x, c; float fl, fr; numbands = (int)(*vocoder->ctrlBandCount); if (numbands < 1 || numbands > MAX_BANDS) numbands = MAX_BANDS; /* initialize bandpass information if num_bands control has changed, or on first run */ if (vocoder->num_bands != numbands) { vocoder->num_bands = numbands; for(i=0; i < numbands; i++) { memset(&vocoder->bands_formant[i], 0, sizeof(struct bandpass)); a = 16.0 * i/(double)numbands; // stretch existing bands if (a < 4.0) vocoder->bands_formant[i].freq = 150 + 420 * a / 4.0; else vocoder->bands_formant[i].freq = 600 * pow (1.23, a - 4.0); c = vocoder->bands_formant[i].freq * 2 * M_PI / vocoder->SampleRate; vocoder->bands_formant[i].c = c * c; vocoder->bands_formant[i].f = 0.4/c; vocoder->bands_formant[i].att = 1/(6.0 + ((exp (vocoder->bands_formant[i].freq / vocoder->SampleRate) - 1) * 10)); memcpy(&vocoder->bands_carrier[i], &vocoder->bands_formant[i], sizeof(struct bandpass)); vocoder->bands_out[i].decay = decay_table[(int)a]; vocoder->bands_out[i].level = CLAMP (*vocoder->ctrlBandLevels[i], 0.0, 1.0); } } else /* get current values of band level controls */ { for (i = 0; i < numbands; i++) vocoder->bands_out[i].level = CLAMP (*vocoder->ctrlBandLevels[i], 0.0, 1.0); } for (i=0; i < SampleCount; i++) { vocoder_do_bandpasses (vocoder->bands_carrier, vocoder->portCarrier[i], vocoder); vocoder_do_bandpasses (vocoder->bands_formant, vocoder->portFormant[i], vocoder); vocoder->portOutput[i] = 0.0; vocoder->portOutput2[i] = 0.0; for (j=0; j < numbands; j++) { vocoder->bands_out[j].oldval = vocoder->bands_out[j].oldval + (fabs (vocoder->bands_formant[j].y) - vocoder->bands_out[j].oldval) * vocoder->bands_out[j].decay; x = vocoder->bands_carrier[j].y * vocoder->bands_out[j].oldval; vocoder->portOutput[i] += x * vocoder->bands_out[j].level; vocoder->portOutput2[i] += x * vocoder->bands_out[j].level; } /* treat paning + main volume */ pan = (int)(*vocoder->ctrlPan); fl = fr = 1.; if (pan != 0) { /* no paning, don't compute useless values */ if (pan > 0) { /* reduce left */ fl = (100.-pan)/100.; } else { fr = (100.+pan)/100.; } } /* apply volume and paning */ vocoder->portOutput[i] *= vocoder->mainvol * fl; vocoder->portOutput2[i] *= vocoder->mainvol * fr; } } /*****************************************************************************/ /* Throw away a vocoder instance. */ void cleanupVocoder(LADSPA_Handle Instance) { VocoderInstance * Vocoder; Vocoder = (VocoderInstance *)Instance; free(Vocoder); } /*****************************************************************************/ LADSPA_Descriptor * g_psDescriptor = NULL; /*****************************************************************************/ /* __attribute__((constructor)) swh_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) swh_init() { char ** pcPortNames; LADSPA_PortDescriptor * piPortDescriptors; LADSPA_PortRangeHint * psPortRangeHints; int i; g_psDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (g_psDescriptor) { g_psDescriptor->UniqueID = LADSPA_UNIQUE_ID; g_psDescriptor->Label = strdup("vocoder-lmms"); g_psDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; g_psDescriptor->Name = strdup("Vocoder for LMMS"); g_psDescriptor->Maker = strdup("Achim Settelmeier (adapted to LADSPA by Josh Green, adapted to LMMS by Hexasoft)"); g_psDescriptor->Copyright = strdup("GPL"); g_psDescriptor->PortCount = PORT_COUNT; piPortDescriptors = (LADSPA_PortDescriptor *)calloc(PORT_COUNT, sizeof(LADSPA_PortDescriptor)); g_psDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)piPortDescriptors; piPortDescriptors[PORT_FORMANT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[PORT_CARRIER] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; piPortDescriptors[PORT_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; piPortDescriptors[PORT_OUTPUT2] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; piPortDescriptors[CTRL_BANDCOUNT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; piPortDescriptors[CTRL_PAN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; pcPortNames = (char **)calloc(PORT_COUNT, sizeof(char *)); g_psDescriptor->PortNames = (const char **)pcPortNames; pcPortNames[PORT_FORMANT] = strdup("Formant-in"); pcPortNames[PORT_CARRIER] = strdup("Carrier-in"); pcPortNames[PORT_OUTPUT] = strdup("Output-out"); pcPortNames[PORT_OUTPUT2] = strdup("Output2-out"); pcPortNames[CTRL_BANDCOUNT] = strdup("Number of bands"); pcPortNames[CTRL_PAN] = strdup("Left/Right"); psPortRangeHints = ((LADSPA_PortRangeHint *) calloc(PORT_COUNT, sizeof(LADSPA_PortRangeHint))); g_psDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)psPortRangeHints; psPortRangeHints[PORT_FORMANT].HintDescriptor = 0; psPortRangeHints[PORT_CARRIER].HintDescriptor = 0; psPortRangeHints[PORT_OUTPUT].HintDescriptor = 0; psPortRangeHints[PORT_OUTPUT2].HintDescriptor = 0; psPortRangeHints[CTRL_BANDCOUNT].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER; psPortRangeHints[CTRL_BANDCOUNT].LowerBound = 1; psPortRangeHints[CTRL_BANDCOUNT].UpperBound = MAX_BANDS; psPortRangeHints[CTRL_PAN].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER; psPortRangeHints[CTRL_PAN].LowerBound = -100; psPortRangeHints[CTRL_PAN].UpperBound = +100; for (i=CTRL_BAND1LVL; i < CTRL_BAND1LVL + MAX_BANDS; i++) { piPortDescriptors[i] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; pcPortNames[i] = malloc (sizeof ("Band 99 Level")); sprintf(pcPortNames[i], "Band %d Level", i - CTRL_BAND1LVL + 1); psPortRangeHints[i].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; psPortRangeHints[i].LowerBound = 0; psPortRangeHints[i].UpperBound = 1; } g_psDescriptor->instantiate = instantiateVocoder; g_psDescriptor->connect_port = connectPortToVocoder; g_psDescriptor->activate = activateVocoder; g_psDescriptor->run = runVocoder; g_psDescriptor->run_adding = NULL; g_psDescriptor->set_run_adding_gain = NULL; g_psDescriptor->deactivate = NULL; g_psDescriptor->cleanup = cleanupVocoder; } } /*****************************************************************************/ /* __attribute__((destructor)) swh_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) swh_fini() { long lIndex; if (g_psDescriptor) { free((char *)g_psDescriptor->Label); free((char *)g_psDescriptor->Name); free((char *)g_psDescriptor->Maker); free((char *)g_psDescriptor->Copyright); free((LADSPA_PortDescriptor *)g_psDescriptor->PortDescriptors); for (lIndex = 0; lIndex < g_psDescriptor->PortCount; lIndex++) free((char *)(g_psDescriptor->PortNames[lIndex])); free((char **)g_psDescriptor->PortNames); free((LADSPA_PortRangeHint *)g_psDescriptor->PortRangeHints); free(g_psDescriptor); } } /*****************************************************************************/ /* Return a descriptor of the requested plugin type. Only one plugin type is available in this library. */ _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif if (Index == 0) return g_psDescriptor; else return NULL; } /*****************************************************************************/ /* EOF */ lmms-1.1.3/plugins/LadspaEffect/swh/vynil_1905.c000066400000000000000000000541221247673406200212710ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "vynil_1905.xml" #include #include #include "ladspa-util.h" #include "util/biquad.h" #define BUF_LEN 0.1 #define CLICK_BUF_SIZE 4096 #define df(x) ((sinf(x) + 1.0f) * 0.5f) inline static float noise(); inline static float noise() { static unsigned int randSeed = 23; randSeed = (randSeed * 196314165) + 907633515; return randSeed / (float)INT_MAX - 1.0f; } #define VYNIL_YEAR 0 #define VYNIL_RPM 1 #define VYNIL_WARP 2 #define VYNIL_CLICK 3 #define VYNIL_WEAR 4 #define VYNIL_IN_L 5 #define VYNIL_IN_R 6 #define VYNIL_OUT_L 7 #define VYNIL_OUT_R 8 static LADSPA_Descriptor *vynilDescriptor = NULL; typedef struct { LADSPA_Data *year; LADSPA_Data *rpm; LADSPA_Data *warp; LADSPA_Data *click; LADSPA_Data *wear; LADSPA_Data *in_l; LADSPA_Data *in_r; LADSPA_Data *out_l; LADSPA_Data *out_r; LADSPA_Data *buffer_m; unsigned int buffer_mask; unsigned int buffer_pos; LADSPA_Data *buffer_s; LADSPA_Data *click_buffer; fixp16 click_buffer_omega; fixp16 click_buffer_pos; float click_gain; float def; float def_target; float fs; biquad * highp; biquad * lowp_m; biquad * lowp_s; biquad * noise_filt; float phi; unsigned int sample_cnt; LADSPA_Data run_adding_gain; } Vynil; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return vynilDescriptor; default: return NULL; } } static void activateVynil(LADSPA_Handle instance) { Vynil *plugin_data = (Vynil *)instance; LADSPA_Data *buffer_m = plugin_data->buffer_m; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; LADSPA_Data *buffer_s = plugin_data->buffer_s; LADSPA_Data *click_buffer = plugin_data->click_buffer; fixp16 click_buffer_omega = plugin_data->click_buffer_omega; fixp16 click_buffer_pos = plugin_data->click_buffer_pos; float click_gain = plugin_data->click_gain; float def = plugin_data->def; float def_target = plugin_data->def_target; float fs = plugin_data->fs; biquad *highp = plugin_data->highp; biquad *lowp_m = plugin_data->lowp_m; biquad *lowp_s = plugin_data->lowp_s; biquad *noise_filt = plugin_data->noise_filt; float phi = plugin_data->phi; unsigned int sample_cnt = plugin_data->sample_cnt; #line 75 "vynil_1905.xml" memset(buffer_m, 0, sizeof(LADSPA_Data) * (buffer_mask + 1)); memset(buffer_s, 0, sizeof(LADSPA_Data) * (buffer_mask + 1)); buffer_pos = 0; click_buffer_pos.all = 0; click_buffer_omega.all = 0; click_gain = 0; phi = 0.0f; lp_set_params(lowp_m, 16000.0, 0.5, fs); lp_set_params(lowp_s, 16000.0, 0.5, fs); lp_set_params(highp, 10.0, 0.5, fs); lp_set_params(noise_filt, 1000.0, 0.5, fs); plugin_data->buffer_m = buffer_m; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->buffer_s = buffer_s; plugin_data->click_buffer = click_buffer; plugin_data->click_buffer_omega = click_buffer_omega; plugin_data->click_buffer_pos = click_buffer_pos; plugin_data->click_gain = click_gain; plugin_data->def = def; plugin_data->def_target = def_target; plugin_data->fs = fs; plugin_data->highp = highp; plugin_data->lowp_m = lowp_m; plugin_data->lowp_s = lowp_s; plugin_data->noise_filt = noise_filt; plugin_data->phi = phi; plugin_data->sample_cnt = sample_cnt; } static void cleanupVynil(LADSPA_Handle instance) { #line 179 "vynil_1905.xml" Vynil *plugin_data = (Vynil *)instance; free(plugin_data->buffer_m); free(plugin_data->buffer_s); free(plugin_data->click_buffer); free(plugin_data->highp); free(plugin_data->lowp_m); free(plugin_data->lowp_s); free(plugin_data->noise_filt); free(instance); } static void connectPortVynil( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Vynil *plugin; plugin = (Vynil *)instance; switch (port) { case VYNIL_YEAR: plugin->year = data; break; case VYNIL_RPM: plugin->rpm = data; break; case VYNIL_WARP: plugin->warp = data; break; case VYNIL_CLICK: plugin->click = data; break; case VYNIL_WEAR: plugin->wear = data; break; case VYNIL_IN_L: plugin->in_l = data; break; case VYNIL_IN_R: plugin->in_r = data; break; case VYNIL_OUT_L: plugin->out_l = data; break; case VYNIL_OUT_R: plugin->out_r = data; break; } } static LADSPA_Handle instantiateVynil( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Vynil *plugin_data = (Vynil *)malloc(sizeof(Vynil)); LADSPA_Data *buffer_m = NULL; unsigned int buffer_mask; unsigned int buffer_pos; LADSPA_Data *buffer_s = NULL; LADSPA_Data *click_buffer = NULL; fixp16 click_buffer_omega; fixp16 click_buffer_pos; float click_gain; float def; float def_target; float fs; biquad *highp = NULL; biquad *lowp_m = NULL; biquad *lowp_s = NULL; biquad *noise_filt = NULL; float phi; unsigned int sample_cnt; #line 37 "vynil_1905.xml" unsigned int i; unsigned int buffer_size; fs = (float)s_rate; buffer_size = 4096; while (buffer_size < s_rate * BUF_LEN) { buffer_size *= 2; } buffer_m = malloc(sizeof(LADSPA_Data) * buffer_size); buffer_s = malloc(sizeof(LADSPA_Data) * buffer_size); buffer_mask = buffer_size - 1; buffer_pos = 0; click_gain = 0; phi = 0.0f; /* Angular phase */ click_buffer = malloc(sizeof(LADSPA_Data) * CLICK_BUF_SIZE); for (i=0; ibuffer_m = buffer_m; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_pos = buffer_pos; plugin_data->buffer_s = buffer_s; plugin_data->click_buffer = click_buffer; plugin_data->click_buffer_omega = click_buffer_omega; plugin_data->click_buffer_pos = click_buffer_pos; plugin_data->click_gain = click_gain; plugin_data->def = def; plugin_data->def_target = def_target; plugin_data->fs = fs; plugin_data->highp = highp; plugin_data->lowp_m = lowp_m; plugin_data->lowp_s = lowp_s; plugin_data->noise_filt = noise_filt; plugin_data->phi = phi; plugin_data->sample_cnt = sample_cnt; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runVynil(LADSPA_Handle instance, unsigned long sample_count) { Vynil *plugin_data = (Vynil *)instance; /* Year (float value) */ const LADSPA_Data year = *(plugin_data->year); /* RPM (float value) */ const LADSPA_Data rpm = *(plugin_data->rpm); /* Surface warping (float value) */ const LADSPA_Data warp = *(plugin_data->warp); /* Crackle (float value) */ const LADSPA_Data click = *(plugin_data->click); /* Wear (float value) */ const LADSPA_Data wear = *(plugin_data->wear); /* Input L (array of floats of length sample_count) */ const LADSPA_Data * const in_l = plugin_data->in_l; /* Input R (array of floats of length sample_count) */ const LADSPA_Data * const in_r = plugin_data->in_r; /* Output L (array of floats of length sample_count) */ LADSPA_Data * const out_l = plugin_data->out_l; /* Output R (array of floats of length sample_count) */ LADSPA_Data * const out_r = plugin_data->out_r; LADSPA_Data * buffer_m = plugin_data->buffer_m; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; LADSPA_Data * buffer_s = plugin_data->buffer_s; LADSPA_Data * click_buffer = plugin_data->click_buffer; fixp16 click_buffer_omega = plugin_data->click_buffer_omega; fixp16 click_buffer_pos = plugin_data->click_buffer_pos; float click_gain = plugin_data->click_gain; float def = plugin_data->def; float def_target = plugin_data->def_target; float fs = plugin_data->fs; biquad * highp = plugin_data->highp; biquad * lowp_m = plugin_data->lowp_m; biquad * lowp_s = plugin_data->lowp_s; biquad * noise_filt = plugin_data->noise_filt; float phi = plugin_data->phi; unsigned int sample_cnt = plugin_data->sample_cnt; #line 90 "vynil_1905.xml" unsigned long pos; float deflec = def; float deflec_target = def_target; float src_m, src_s; /* angular velocity of platter * 16 */ const float omega = 960.0f / (rpm * fs); const float age = (2000 - year) * 0.01f; const unsigned int click_prob = (age*age*(float)RAND_MAX)/10 + click * 0.02 * RAND_MAX; const float noise_amp = (click + wear * 0.3f) * 0.12f + (1993.0f - year) * 0.0031f; const float bandwidth = (year - 1880.0f) * (rpm * 1.9f); const float noise_bandwidth = bandwidth * (0.25 - wear * 0.02) + click * 200.0 + 300.0; const float stereo = f_clamp((year - 1940.0f) * 0.02f, 0.0f, 1.0f); const float wrap_gain = age * 3.1f + 0.05f; const float wrap_bias = age * 0.1f; lp_set_params(lowp_m, bandwidth * (1.0 - wear * 0.86), 2.0, fs); lp_set_params(lowp_s, bandwidth * (1.0 - wear * 0.89), 2.0, fs); hp_set_params(highp, (2000-year) * 8.0, 1.5, fs); lp_set_params(noise_filt, noise_bandwidth, 4.0 + wear * 2.0, fs); for (pos = 0; pos < sample_count; pos++) { unsigned int o1, o2; float ofs; if ((sample_cnt & 15) == 0) { const float ang = phi * 2.0f * M_PI; const float w = warp * (2000.0f - year) * 0.01f; deflec_target = w*df(ang)*0.5f + w*w*df(2.0f*ang)*0.31f + w*w*w*df(3.0f*ang)*0.129f; phi += omega; while (phi > 1.0f) { phi -= 1.0f; } if ((unsigned int)rand() < click_prob) { click_buffer_omega.all = ((rand() >> 6) + 1000) * rpm; click_gain = noise_amp * 5.0f * noise(); } } deflec = deflec * 0.1f + deflec_target * 0.9f; /* matrix into mid_side representation (this is roughly what stereo * LPs do) */ buffer_m[buffer_pos] = in_l[pos] + in_r[pos]; buffer_s[buffer_pos] = in_l[pos] - in_r[pos]; /* cacluate the effects of the surface warping */ ofs = fs * 0.009f * deflec; o1 = f_round(floorf(ofs)); o2 = f_round(ceilf(ofs)); ofs -= o1; src_m = LIN_INTERP(ofs, buffer_m[(buffer_pos - o1 - 1) & buffer_mask], buffer_m[(buffer_pos - o2 - 1) & buffer_mask]); src_s = LIN_INTERP(ofs, buffer_s[(buffer_pos - o1 - 1) & buffer_mask], buffer_s[(buffer_pos - o2 - 1) & buffer_mask]); src_m = biquad_run(lowp_m, src_m + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain); /* waveshaper */ src_m = LIN_INTERP(age, src_m, sinf(src_m * wrap_gain + wrap_bias)); /* output highpass */ src_m = biquad_run(highp, src_m) + biquad_run(noise_filt, noise()) * noise_amp + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain * 0.5f; /* stereo seperation filter */ src_s = biquad_run(lowp_s, src_s) * stereo; buffer_write(out_l[pos], (src_s + src_m) * 0.5f); buffer_write(out_r[pos], (src_m - src_s) * 0.5f); /* roll buffer indexes */ buffer_pos = (buffer_pos + 1) & buffer_mask; click_buffer_pos.all += click_buffer_omega.all; if (click_buffer_pos.part.in >= CLICK_BUF_SIZE) { click_buffer_pos.all = 0; click_buffer_omega.all = 0; } sample_cnt++; } plugin_data->buffer_pos = buffer_pos; plugin_data->click_buffer_pos = click_buffer_pos; plugin_data->click_buffer_omega = click_buffer_omega; plugin_data->click_gain = click_gain; plugin_data->sample_cnt = sample_cnt; plugin_data->def_target = deflec_target; plugin_data->def = deflec; plugin_data->phi = phi; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainVynil(LADSPA_Handle instance, LADSPA_Data gain) { ((Vynil *)instance)->run_adding_gain = gain; } static void runAddingVynil(LADSPA_Handle instance, unsigned long sample_count) { Vynil *plugin_data = (Vynil *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Year (float value) */ const LADSPA_Data year = *(plugin_data->year); /* RPM (float value) */ const LADSPA_Data rpm = *(plugin_data->rpm); /* Surface warping (float value) */ const LADSPA_Data warp = *(plugin_data->warp); /* Crackle (float value) */ const LADSPA_Data click = *(plugin_data->click); /* Wear (float value) */ const LADSPA_Data wear = *(plugin_data->wear); /* Input L (array of floats of length sample_count) */ const LADSPA_Data * const in_l = plugin_data->in_l; /* Input R (array of floats of length sample_count) */ const LADSPA_Data * const in_r = plugin_data->in_r; /* Output L (array of floats of length sample_count) */ LADSPA_Data * const out_l = plugin_data->out_l; /* Output R (array of floats of length sample_count) */ LADSPA_Data * const out_r = plugin_data->out_r; LADSPA_Data * buffer_m = plugin_data->buffer_m; unsigned int buffer_mask = plugin_data->buffer_mask; unsigned int buffer_pos = plugin_data->buffer_pos; LADSPA_Data * buffer_s = plugin_data->buffer_s; LADSPA_Data * click_buffer = plugin_data->click_buffer; fixp16 click_buffer_omega = plugin_data->click_buffer_omega; fixp16 click_buffer_pos = plugin_data->click_buffer_pos; float click_gain = plugin_data->click_gain; float def = plugin_data->def; float def_target = plugin_data->def_target; float fs = plugin_data->fs; biquad * highp = plugin_data->highp; biquad * lowp_m = plugin_data->lowp_m; biquad * lowp_s = plugin_data->lowp_s; biquad * noise_filt = plugin_data->noise_filt; float phi = plugin_data->phi; unsigned int sample_cnt = plugin_data->sample_cnt; #line 90 "vynil_1905.xml" unsigned long pos; float deflec = def; float deflec_target = def_target; float src_m, src_s; /* angular velocity of platter * 16 */ const float omega = 960.0f / (rpm * fs); const float age = (2000 - year) * 0.01f; const unsigned int click_prob = (age*age*(float)RAND_MAX)/10 + click * 0.02 * RAND_MAX; const float noise_amp = (click + wear * 0.3f) * 0.12f + (1993.0f - year) * 0.0031f; const float bandwidth = (year - 1880.0f) * (rpm * 1.9f); const float noise_bandwidth = bandwidth * (0.25 - wear * 0.02) + click * 200.0 + 300.0; const float stereo = f_clamp((year - 1940.0f) * 0.02f, 0.0f, 1.0f); const float wrap_gain = age * 3.1f + 0.05f; const float wrap_bias = age * 0.1f; lp_set_params(lowp_m, bandwidth * (1.0 - wear * 0.86), 2.0, fs); lp_set_params(lowp_s, bandwidth * (1.0 - wear * 0.89), 2.0, fs); hp_set_params(highp, (2000-year) * 8.0, 1.5, fs); lp_set_params(noise_filt, noise_bandwidth, 4.0 + wear * 2.0, fs); for (pos = 0; pos < sample_count; pos++) { unsigned int o1, o2; float ofs; if ((sample_cnt & 15) == 0) { const float ang = phi * 2.0f * M_PI; const float w = warp * (2000.0f - year) * 0.01f; deflec_target = w*df(ang)*0.5f + w*w*df(2.0f*ang)*0.31f + w*w*w*df(3.0f*ang)*0.129f; phi += omega; while (phi > 1.0f) { phi -= 1.0f; } if ((unsigned int)rand() < click_prob) { click_buffer_omega.all = ((rand() >> 6) + 1000) * rpm; click_gain = noise_amp * 5.0f * noise(); } } deflec = deflec * 0.1f + deflec_target * 0.9f; /* matrix into mid_side representation (this is roughly what stereo * LPs do) */ buffer_m[buffer_pos] = in_l[pos] + in_r[pos]; buffer_s[buffer_pos] = in_l[pos] - in_r[pos]; /* cacluate the effects of the surface warping */ ofs = fs * 0.009f * deflec; o1 = f_round(floorf(ofs)); o2 = f_round(ceilf(ofs)); ofs -= o1; src_m = LIN_INTERP(ofs, buffer_m[(buffer_pos - o1 - 1) & buffer_mask], buffer_m[(buffer_pos - o2 - 1) & buffer_mask]); src_s = LIN_INTERP(ofs, buffer_s[(buffer_pos - o1 - 1) & buffer_mask], buffer_s[(buffer_pos - o2 - 1) & buffer_mask]); src_m = biquad_run(lowp_m, src_m + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain); /* waveshaper */ src_m = LIN_INTERP(age, src_m, sinf(src_m * wrap_gain + wrap_bias)); /* output highpass */ src_m = biquad_run(highp, src_m) + biquad_run(noise_filt, noise()) * noise_amp + click_buffer[click_buffer_pos.part.in & (CLICK_BUF_SIZE - 1)] * click_gain * 0.5f; /* stereo seperation filter */ src_s = biquad_run(lowp_s, src_s) * stereo; buffer_write(out_l[pos], (src_s + src_m) * 0.5f); buffer_write(out_r[pos], (src_m - src_s) * 0.5f); /* roll buffer indexes */ buffer_pos = (buffer_pos + 1) & buffer_mask; click_buffer_pos.all += click_buffer_omega.all; if (click_buffer_pos.part.in >= CLICK_BUF_SIZE) { click_buffer_pos.all = 0; click_buffer_omega.all = 0; } sample_cnt++; } plugin_data->buffer_pos = buffer_pos; plugin_data->click_buffer_pos = click_buffer_pos; plugin_data->click_buffer_omega = click_buffer_omega; plugin_data->click_gain = click_gain; plugin_data->sample_cnt = sample_cnt; plugin_data->def_target = deflec_target; plugin_data->def = deflec; plugin_data->phi = phi; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif vynilDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (vynilDescriptor) { vynilDescriptor->UniqueID = 1905; vynilDescriptor->Label = "vynil"; vynilDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; vynilDescriptor->Name = D_("VyNil (Vinyl Effect)"); vynilDescriptor->Maker = "Steve Harris "; vynilDescriptor->Copyright = "GPL"; vynilDescriptor->PortCount = 9; port_descriptors = (LADSPA_PortDescriptor *)calloc(9, sizeof(LADSPA_PortDescriptor)); vynilDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(9, sizeof(LADSPA_PortRangeHint)); vynilDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(9, sizeof(char*)); vynilDescriptor->PortNames = (const char **)port_names; /* Parameters for Year */ port_descriptors[VYNIL_YEAR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VYNIL_YEAR] = D_("Year"); port_range_hints[VYNIL_YEAR].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM; port_range_hints[VYNIL_YEAR].LowerBound = 1900; port_range_hints[VYNIL_YEAR].UpperBound = 1990; /* Parameters for RPM */ port_descriptors[VYNIL_RPM] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VYNIL_RPM] = D_("RPM"); port_range_hints[VYNIL_RPM].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM; port_range_hints[VYNIL_RPM].LowerBound = 33; port_range_hints[VYNIL_RPM].UpperBound = 78; /* Parameters for Surface warping */ port_descriptors[VYNIL_WARP] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VYNIL_WARP] = D_("Surface warping"); port_range_hints[VYNIL_WARP].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VYNIL_WARP].LowerBound = 0.0; port_range_hints[VYNIL_WARP].UpperBound = 1.0; /* Parameters for Crackle */ port_descriptors[VYNIL_CLICK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VYNIL_CLICK] = D_("Crackle"); port_range_hints[VYNIL_CLICK].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VYNIL_CLICK].LowerBound = 0.0; port_range_hints[VYNIL_CLICK].UpperBound = 1.0; /* Parameters for Wear */ port_descriptors[VYNIL_WEAR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[VYNIL_WEAR] = D_("Wear"); port_range_hints[VYNIL_WEAR].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[VYNIL_WEAR].LowerBound = 0.0; port_range_hints[VYNIL_WEAR].UpperBound = 1.0; /* Parameters for Input L */ port_descriptors[VYNIL_IN_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[VYNIL_IN_L] = D_("Input L"); port_range_hints[VYNIL_IN_L].HintDescriptor = 0; /* Parameters for Input R */ port_descriptors[VYNIL_IN_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[VYNIL_IN_R] = D_("Input R"); port_range_hints[VYNIL_IN_R].HintDescriptor = 0; /* Parameters for Output L */ port_descriptors[VYNIL_OUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[VYNIL_OUT_L] = D_("Output L"); port_range_hints[VYNIL_OUT_L].HintDescriptor = 0; /* Parameters for Output R */ port_descriptors[VYNIL_OUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[VYNIL_OUT_R] = D_("Output R"); port_range_hints[VYNIL_OUT_R].HintDescriptor = 0; vynilDescriptor->activate = activateVynil; vynilDescriptor->cleanup = cleanupVynil; vynilDescriptor->connect_port = connectPortVynil; vynilDescriptor->deactivate = NULL; vynilDescriptor->instantiate = instantiateVynil; vynilDescriptor->run = runVynil; vynilDescriptor->run_adding = runAddingVynil; vynilDescriptor->set_run_adding_gain = setRunAddingGainVynil; } } void __attribute__((destructor)) swh_fini() { if (vynilDescriptor) { free((LADSPA_PortDescriptor *)vynilDescriptor->PortDescriptors); free((char **)vynilDescriptor->PortNames); free((LADSPA_PortRangeHint *)vynilDescriptor->PortRangeHints); free(vynilDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/wave_terrain_1412.c000066400000000000000000000141641247673406200226110ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define WAVETERRAIN_XB 0 #define WAVETERRAIN_YB 1 #define WAVETERRAIN_ZB 2 static LADSPA_Descriptor *waveTerrainDescriptor = NULL; typedef struct { LADSPA_Data *xb; LADSPA_Data *yb; LADSPA_Data *zb; LADSPA_Data run_adding_gain; } WaveTerrain; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return waveTerrainDescriptor; default: return NULL; } } static void cleanupWaveTerrain(LADSPA_Handle instance) { free(instance); } static void connectPortWaveTerrain( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { WaveTerrain *plugin; plugin = (WaveTerrain *)instance; switch (port) { case WAVETERRAIN_XB: plugin->xb = data; break; case WAVETERRAIN_YB: plugin->yb = data; break; case WAVETERRAIN_ZB: plugin->zb = data; break; } } static LADSPA_Handle instantiateWaveTerrain( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { WaveTerrain *plugin_data = (WaveTerrain *)malloc(sizeof(WaveTerrain)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runWaveTerrain(LADSPA_Handle instance, unsigned long sample_count) { WaveTerrain *plugin_data = (WaveTerrain *)instance; /* x (array of floats of length sample_count) */ const LADSPA_Data * const xb = plugin_data->xb; /* y (array of floats of length sample_count) */ const LADSPA_Data * const yb = plugin_data->yb; /* z (array of floats of length sample_count) */ LADSPA_Data * const zb = plugin_data->zb; #line 18 "wave_terrain_1412.xml" unsigned long pos; float x, y; for (pos = 0; pos < sample_count; pos++) { x = xb[pos]; y = yb[pos]; buffer_write(zb[pos], (x - y) * (x - 1.0f) * (x + 1.0f) * (y - 1.0f) * (y + 1.0f) ); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainWaveTerrain(LADSPA_Handle instance, LADSPA_Data gain) { ((WaveTerrain *)instance)->run_adding_gain = gain; } static void runAddingWaveTerrain(LADSPA_Handle instance, unsigned long sample_count) { WaveTerrain *plugin_data = (WaveTerrain *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* x (array of floats of length sample_count) */ const LADSPA_Data * const xb = plugin_data->xb; /* y (array of floats of length sample_count) */ const LADSPA_Data * const yb = plugin_data->yb; /* z (array of floats of length sample_count) */ LADSPA_Data * const zb = plugin_data->zb; #line 18 "wave_terrain_1412.xml" unsigned long pos; float x, y; for (pos = 0; pos < sample_count; pos++) { x = xb[pos]; y = yb[pos]; buffer_write(zb[pos], (x - y) * (x - 1.0f) * (x + 1.0f) * (y - 1.0f) * (y + 1.0f) ); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif waveTerrainDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (waveTerrainDescriptor) { waveTerrainDescriptor->UniqueID = 1412; waveTerrainDescriptor->Label = "waveTerrain"; waveTerrainDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; waveTerrainDescriptor->Name = D_("Wave Terrain Oscillator"); waveTerrainDescriptor->Maker = "Steve Harris "; waveTerrainDescriptor->Copyright = "GPL"; waveTerrainDescriptor->PortCount = 3; port_descriptors = (LADSPA_PortDescriptor *)calloc(3, sizeof(LADSPA_PortDescriptor)); waveTerrainDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(3, sizeof(LADSPA_PortRangeHint)); waveTerrainDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(3, sizeof(char*)); waveTerrainDescriptor->PortNames = (const char **)port_names; /* Parameters for x */ port_descriptors[WAVETERRAIN_XB] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[WAVETERRAIN_XB] = D_("x"); port_range_hints[WAVETERRAIN_XB].HintDescriptor = 0; /* Parameters for y */ port_descriptors[WAVETERRAIN_YB] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[WAVETERRAIN_YB] = D_("y"); port_range_hints[WAVETERRAIN_YB].HintDescriptor = 0; /* Parameters for z */ port_descriptors[WAVETERRAIN_ZB] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[WAVETERRAIN_ZB] = D_("z"); port_range_hints[WAVETERRAIN_ZB].HintDescriptor = 0; waveTerrainDescriptor->activate = NULL; waveTerrainDescriptor->cleanup = cleanupWaveTerrain; waveTerrainDescriptor->connect_port = connectPortWaveTerrain; waveTerrainDescriptor->deactivate = NULL; waveTerrainDescriptor->instantiate = instantiateWaveTerrain; waveTerrainDescriptor->run = runWaveTerrain; waveTerrainDescriptor->run_adding = runAddingWaveTerrain; waveTerrainDescriptor->set_run_adding_gain = setRunAddingGainWaveTerrain; } } void __attribute__((destructor)) swh_fini() { if (waveTerrainDescriptor) { free((LADSPA_PortDescriptor *)waveTerrainDescriptor->PortDescriptors); free((char **)waveTerrainDescriptor->PortNames); free((LADSPA_PortRangeHint *)waveTerrainDescriptor->PortRangeHints); free(waveTerrainDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/xfade_1915.c000066400000000000000000000427501247673406200212240ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #line 10 "xfade_1915.xml" #include "ladspa-util.h" #define XFADE_XFADE 0 #define XFADE_INPUTLA 1 #define XFADE_INPUTRA 2 #define XFADE_INPUTLB 3 #define XFADE_INPUTRB 4 #define XFADE_OUTPUTL 5 #define XFADE_OUTPUTR 6 #define XFADE4_XFADE 0 #define XFADE4_INPUTLA 1 #define XFADE4_INPUTRA 2 #define XFADE4_INPUTLB 3 #define XFADE4_INPUTRB 4 #define XFADE4_OUTPUTLA 5 #define XFADE4_OUTPUTRA 6 #define XFADE4_OUTPUTLB 7 #define XFADE4_OUTPUTRB 8 static LADSPA_Descriptor *xfadeDescriptor = NULL; typedef struct { LADSPA_Data *xfade; LADSPA_Data *inputLA; LADSPA_Data *inputRA; LADSPA_Data *inputLB; LADSPA_Data *inputRB; LADSPA_Data *outputL; LADSPA_Data *outputR; LADSPA_Data run_adding_gain; } Xfade; static LADSPA_Descriptor *xfade4Descriptor = NULL; typedef struct { LADSPA_Data *xfade; LADSPA_Data *inputLA; LADSPA_Data *inputRA; LADSPA_Data *inputLB; LADSPA_Data *inputRB; LADSPA_Data *outputLA; LADSPA_Data *outputRA; LADSPA_Data *outputLB; LADSPA_Data *outputRB; LADSPA_Data run_adding_gain; } Xfade4; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return xfadeDescriptor; case 1: return xfade4Descriptor; default: return NULL; } } static void cleanupXfade(LADSPA_Handle instance) { free(instance); } static void connectPortXfade( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Xfade *plugin; plugin = (Xfade *)instance; switch (port) { case XFADE_XFADE: plugin->xfade = data; break; case XFADE_INPUTLA: plugin->inputLA = data; break; case XFADE_INPUTRA: plugin->inputRA = data; break; case XFADE_INPUTLB: plugin->inputLB = data; break; case XFADE_INPUTRB: plugin->inputRB = data; break; case XFADE_OUTPUTL: plugin->outputL = data; break; case XFADE_OUTPUTR: plugin->outputR = data; break; } } static LADSPA_Handle instantiateXfade( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Xfade *plugin_data = (Xfade *)malloc(sizeof(Xfade)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runXfade(LADSPA_Handle instance, unsigned long sample_count) { Xfade *plugin_data = (Xfade *)instance; /* Crossfade (float value) */ const LADSPA_Data xfade = *(plugin_data->xfade); /* Input A left (array of floats of length sample_count) */ const LADSPA_Data * const inputLA = plugin_data->inputLA; /* Input A right (array of floats of length sample_count) */ const LADSPA_Data * const inputRA = plugin_data->inputRA; /* Input B left (array of floats of length sample_count) */ const LADSPA_Data * const inputLB = plugin_data->inputLB; /* Input B right (array of floats of length sample_count) */ const LADSPA_Data * const inputRB = plugin_data->inputRB; /* Output left (array of floats of length sample_count) */ LADSPA_Data * const outputL = plugin_data->outputL; /* Output right (array of floats of length sample_count) */ LADSPA_Data * const outputR = plugin_data->outputR; #line 19 "xfade_1915.xml" unsigned long pos; const float coefB = (xfade + 1.0f) * 0.5f; const float coefA = 1.0f - coefB; for (pos = 0; pos < sample_count; pos++) { buffer_write(outputL[pos], inputLA[pos] * coefA + inputLB[pos] * coefB); buffer_write(outputR[pos], inputRA[pos] * coefA + inputRB[pos] * coefB); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainXfade(LADSPA_Handle instance, LADSPA_Data gain) { ((Xfade *)instance)->run_adding_gain = gain; } static void runAddingXfade(LADSPA_Handle instance, unsigned long sample_count) { Xfade *plugin_data = (Xfade *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Crossfade (float value) */ const LADSPA_Data xfade = *(plugin_data->xfade); /* Input A left (array of floats of length sample_count) */ const LADSPA_Data * const inputLA = plugin_data->inputLA; /* Input A right (array of floats of length sample_count) */ const LADSPA_Data * const inputRA = plugin_data->inputRA; /* Input B left (array of floats of length sample_count) */ const LADSPA_Data * const inputLB = plugin_data->inputLB; /* Input B right (array of floats of length sample_count) */ const LADSPA_Data * const inputRB = plugin_data->inputRB; /* Output left (array of floats of length sample_count) */ LADSPA_Data * const outputL = plugin_data->outputL; /* Output right (array of floats of length sample_count) */ LADSPA_Data * const outputR = plugin_data->outputR; #line 19 "xfade_1915.xml" unsigned long pos; const float coefB = (xfade + 1.0f) * 0.5f; const float coefA = 1.0f - coefB; for (pos = 0; pos < sample_count; pos++) { buffer_write(outputL[pos], inputLA[pos] * coefA + inputLB[pos] * coefB); buffer_write(outputR[pos], inputRA[pos] * coefA + inputRB[pos] * coefB); } } static void cleanupXfade4(LADSPA_Handle instance) { free(instance); } static void connectPortXfade4( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Xfade4 *plugin; plugin = (Xfade4 *)instance; switch (port) { case XFADE4_XFADE: plugin->xfade = data; break; case XFADE4_INPUTLA: plugin->inputLA = data; break; case XFADE4_INPUTRA: plugin->inputRA = data; break; case XFADE4_INPUTLB: plugin->inputLB = data; break; case XFADE4_INPUTRB: plugin->inputRB = data; break; case XFADE4_OUTPUTLA: plugin->outputLA = data; break; case XFADE4_OUTPUTRA: plugin->outputRA = data; break; case XFADE4_OUTPUTLB: plugin->outputLB = data; break; case XFADE4_OUTPUTRB: plugin->outputRB = data; break; } } static LADSPA_Handle instantiateXfade4( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Xfade4 *plugin_data = (Xfade4 *)malloc(sizeof(Xfade4)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runXfade4(LADSPA_Handle instance, unsigned long sample_count) { Xfade4 *plugin_data = (Xfade4 *)instance; /* Crossfade (float value) */ const LADSPA_Data xfade = *(plugin_data->xfade); /* Input A left (array of floats of length sample_count) */ const LADSPA_Data * const inputLA = plugin_data->inputLA; /* Input A right (array of floats of length sample_count) */ const LADSPA_Data * const inputRA = plugin_data->inputRA; /* Input B left (array of floats of length sample_count) */ const LADSPA_Data * const inputLB = plugin_data->inputLB; /* Input B right (array of floats of length sample_count) */ const LADSPA_Data * const inputRB = plugin_data->inputRB; /* Output A left (array of floats of length sample_count) */ LADSPA_Data * const outputLA = plugin_data->outputLA; /* Output A right (array of floats of length sample_count) */ LADSPA_Data * const outputRA = plugin_data->outputRA; /* Output B left (array of floats of length sample_count) */ LADSPA_Data * const outputLB = plugin_data->outputLB; /* Output B right (array of floats of length sample_count) */ LADSPA_Data * const outputRB = plugin_data->outputRB; #line 19 "xfade_1915.xml" unsigned long pos; const float coefB = (xfade + 1.0f) * 0.5f; const float coefA = 1.0f - coefB; for (pos = 0; pos < sample_count; pos++) { buffer_write(outputLA[pos], inputLA[pos] * coefA); buffer_write(outputRA[pos], inputRA[pos] * coefA); buffer_write(outputLB[pos], inputLB[pos] * coefB); buffer_write(outputRB[pos], inputRB[pos] * coefB); } } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainXfade4(LADSPA_Handle instance, LADSPA_Data gain) { ((Xfade4 *)instance)->run_adding_gain = gain; } static void runAddingXfade4(LADSPA_Handle instance, unsigned long sample_count) { Xfade4 *plugin_data = (Xfade4 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Crossfade (float value) */ const LADSPA_Data xfade = *(plugin_data->xfade); /* Input A left (array of floats of length sample_count) */ const LADSPA_Data * const inputLA = plugin_data->inputLA; /* Input A right (array of floats of length sample_count) */ const LADSPA_Data * const inputRA = plugin_data->inputRA; /* Input B left (array of floats of length sample_count) */ const LADSPA_Data * const inputLB = plugin_data->inputLB; /* Input B right (array of floats of length sample_count) */ const LADSPA_Data * const inputRB = plugin_data->inputRB; /* Output A left (array of floats of length sample_count) */ LADSPA_Data * const outputLA = plugin_data->outputLA; /* Output A right (array of floats of length sample_count) */ LADSPA_Data * const outputRA = plugin_data->outputRA; /* Output B left (array of floats of length sample_count) */ LADSPA_Data * const outputLB = plugin_data->outputLB; /* Output B right (array of floats of length sample_count) */ LADSPA_Data * const outputRB = plugin_data->outputRB; #line 19 "xfade_1915.xml" unsigned long pos; const float coefB = (xfade + 1.0f) * 0.5f; const float coefA = 1.0f - coefB; for (pos = 0; pos < sample_count; pos++) { buffer_write(outputLA[pos], inputLA[pos] * coefA); buffer_write(outputRA[pos], inputRA[pos] * coefA); buffer_write(outputLB[pos], inputLB[pos] * coefB); buffer_write(outputRB[pos], inputRB[pos] * coefB); } } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif xfadeDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (xfadeDescriptor) { xfadeDescriptor->UniqueID = 1915; xfadeDescriptor->Label = "xfade"; xfadeDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; xfadeDescriptor->Name = D_("Crossfade"); xfadeDescriptor->Maker = "Steve Harris "; xfadeDescriptor->Copyright = "GPL"; xfadeDescriptor->PortCount = 7; port_descriptors = (LADSPA_PortDescriptor *)calloc(7, sizeof(LADSPA_PortDescriptor)); xfadeDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(7, sizeof(LADSPA_PortRangeHint)); xfadeDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(7, sizeof(char*)); xfadeDescriptor->PortNames = (const char **)port_names; /* Parameters for Crossfade */ port_descriptors[XFADE_XFADE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[XFADE_XFADE] = D_("Crossfade"); port_range_hints[XFADE_XFADE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[XFADE_XFADE].LowerBound = -1; port_range_hints[XFADE_XFADE].UpperBound = 1; /* Parameters for Input A left */ port_descriptors[XFADE_INPUTLA] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE_INPUTLA] = D_("Input A left"); port_range_hints[XFADE_INPUTLA].HintDescriptor = 0; /* Parameters for Input A right */ port_descriptors[XFADE_INPUTRA] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE_INPUTRA] = D_("Input A right"); port_range_hints[XFADE_INPUTRA].HintDescriptor = 0; /* Parameters for Input B left */ port_descriptors[XFADE_INPUTLB] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE_INPUTLB] = D_("Input B left"); port_range_hints[XFADE_INPUTLB].HintDescriptor = 0; /* Parameters for Input B right */ port_descriptors[XFADE_INPUTRB] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE_INPUTRB] = D_("Input B right"); port_range_hints[XFADE_INPUTRB].HintDescriptor = 0; /* Parameters for Output left */ port_descriptors[XFADE_OUTPUTL] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[XFADE_OUTPUTL] = D_("Output left"); port_range_hints[XFADE_OUTPUTL].HintDescriptor = 0; /* Parameters for Output right */ port_descriptors[XFADE_OUTPUTR] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[XFADE_OUTPUTR] = D_("Output right"); port_range_hints[XFADE_OUTPUTR].HintDescriptor = 0; xfadeDescriptor->activate = NULL; xfadeDescriptor->cleanup = cleanupXfade; xfadeDescriptor->connect_port = connectPortXfade; xfadeDescriptor->deactivate = NULL; xfadeDescriptor->instantiate = instantiateXfade; xfadeDescriptor->run = runXfade; xfadeDescriptor->run_adding = runAddingXfade; xfadeDescriptor->set_run_adding_gain = setRunAddingGainXfade; } xfade4Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (xfade4Descriptor) { xfade4Descriptor->UniqueID = 1917; xfade4Descriptor->Label = "xfade4"; xfade4Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; xfade4Descriptor->Name = D_("Crossfade (4 outs)"); xfade4Descriptor->Maker = "Steve Harris "; xfade4Descriptor->Copyright = "GPL"; xfade4Descriptor->PortCount = 9; port_descriptors = (LADSPA_PortDescriptor *)calloc(9, sizeof(LADSPA_PortDescriptor)); xfade4Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(9, sizeof(LADSPA_PortRangeHint)); xfade4Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(9, sizeof(char*)); xfade4Descriptor->PortNames = (const char **)port_names; /* Parameters for Crossfade */ port_descriptors[XFADE4_XFADE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[XFADE4_XFADE] = D_("Crossfade"); port_range_hints[XFADE4_XFADE].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[XFADE4_XFADE].LowerBound = -1; port_range_hints[XFADE4_XFADE].UpperBound = 1; /* Parameters for Input A left */ port_descriptors[XFADE4_INPUTLA] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_INPUTLA] = D_("Input A left"); port_range_hints[XFADE4_INPUTLA].HintDescriptor = 0; /* Parameters for Input A right */ port_descriptors[XFADE4_INPUTRA] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_INPUTRA] = D_("Input A right"); port_range_hints[XFADE4_INPUTRA].HintDescriptor = 0; /* Parameters for Input B left */ port_descriptors[XFADE4_INPUTLB] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_INPUTLB] = D_("Input B left"); port_range_hints[XFADE4_INPUTLB].HintDescriptor = 0; /* Parameters for Input B right */ port_descriptors[XFADE4_INPUTRB] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_INPUTRB] = D_("Input B right"); port_range_hints[XFADE4_INPUTRB].HintDescriptor = 0; /* Parameters for Output A left */ port_descriptors[XFADE4_OUTPUTLA] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_OUTPUTLA] = D_("Output A left"); port_range_hints[XFADE4_OUTPUTLA].HintDescriptor = 0; /* Parameters for Output A right */ port_descriptors[XFADE4_OUTPUTRA] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_OUTPUTRA] = D_("Output A right"); port_range_hints[XFADE4_OUTPUTRA].HintDescriptor = 0; /* Parameters for Output B left */ port_descriptors[XFADE4_OUTPUTLB] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_OUTPUTLB] = D_("Output B left"); port_range_hints[XFADE4_OUTPUTLB].HintDescriptor = 0; /* Parameters for Output B right */ port_descriptors[XFADE4_OUTPUTRB] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[XFADE4_OUTPUTRB] = D_("Output B right"); port_range_hints[XFADE4_OUTPUTRB].HintDescriptor = 0; xfade4Descriptor->activate = NULL; xfade4Descriptor->cleanup = cleanupXfade4; xfade4Descriptor->connect_port = connectPortXfade4; xfade4Descriptor->deactivate = NULL; xfade4Descriptor->instantiate = instantiateXfade4; xfade4Descriptor->run = runXfade4; xfade4Descriptor->run_adding = runAddingXfade4; xfade4Descriptor->set_run_adding_gain = setRunAddingGainXfade4; } } void __attribute__((destructor)) swh_fini() { if (xfadeDescriptor) { free((LADSPA_PortDescriptor *)xfadeDescriptor->PortDescriptors); free((char **)xfadeDescriptor->PortNames); free((LADSPA_PortRangeHint *)xfadeDescriptor->PortRangeHints); free(xfadeDescriptor); } if (xfade4Descriptor) { free((LADSPA_PortDescriptor *)xfade4Descriptor->PortDescriptors); free((char **)xfade4Descriptor->PortNames); free((LADSPA_PortRangeHint *)xfade4Descriptor->PortRangeHints); free(xfade4Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/swh/zm1_1428.c000066400000000000000000000130041247673406200206310ustar00rootroot00000000000000#include #include #ifndef WIN32 #include "config.h" #endif #ifdef ENABLE_NLS #include #endif #define _ISOC9X_SOURCE 1 #define _ISOC99_SOURCE 1 #define __USE_ISOC99 1 #define __USE_ISOC9X 1 #include #include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif #define ZM1_INPUT 0 #define ZM1_OUTPUT 1 static LADSPA_Descriptor *zm1Descriptor = NULL; typedef struct { LADSPA_Data *input; LADSPA_Data *output; LADSPA_Data xm1; LADSPA_Data run_adding_gain; } Zm1; _WINDOWS_DLL_EXPORT_ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { swh_init(); bIsFirstTime = 0; } #endif switch (index) { case 0: return zm1Descriptor; default: return NULL; } } static void activateZm1(LADSPA_Handle instance) { Zm1 *plugin_data = (Zm1 *)instance; LADSPA_Data xm1 = plugin_data->xm1; #line 21 "zm1_1428.xml" xm1 = 0.0f; plugin_data->xm1 = xm1; } static void cleanupZm1(LADSPA_Handle instance) { free(instance); } static void connectPortZm1( LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { Zm1 *plugin; plugin = (Zm1 *)instance; switch (port) { case ZM1_INPUT: plugin->input = data; break; case ZM1_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiateZm1( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { Zm1 *plugin_data = (Zm1 *)malloc(sizeof(Zm1)); LADSPA_Data xm1; #line 17 "zm1_1428.xml" xm1 = 0.0f; plugin_data->xm1 = xm1; return (LADSPA_Handle)plugin_data; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b = v) #define RUN_ADDING 0 #define RUN_REPLACING 1 static void runZm1(LADSPA_Handle instance, unsigned long sample_count) { Zm1 *plugin_data = (Zm1 *)instance; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data xm1 = plugin_data->xm1; #line 25 "zm1_1428.xml" unsigned long pos; LADSPA_Data tmp; for (pos = 0; pos < sample_count; pos++) { tmp = input[pos]; buffer_write(output[pos], xm1); xm1 = tmp; } plugin_data->xm1 = xm1; } #undef buffer_write #undef RUN_ADDING #undef RUN_REPLACING #define buffer_write(b, v) (b += (v) * run_adding_gain) #define RUN_ADDING 1 #define RUN_REPLACING 0 static void setRunAddingGainZm1(LADSPA_Handle instance, LADSPA_Data gain) { ((Zm1 *)instance)->run_adding_gain = gain; } static void runAddingZm1(LADSPA_Handle instance, unsigned long sample_count) { Zm1 *plugin_data = (Zm1 *)instance; LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Input (array of floats of length sample_count) */ const LADSPA_Data * const input = plugin_data->input; /* Output (array of floats of length sample_count) */ LADSPA_Data * const output = plugin_data->output; LADSPA_Data xm1 = plugin_data->xm1; #line 25 "zm1_1428.xml" unsigned long pos; LADSPA_Data tmp; for (pos = 0; pos < sample_count; pos++) { tmp = input[pos]; buffer_write(output[pos], xm1); xm1 = tmp; } plugin_data->xm1 = xm1; } void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; #ifdef ENABLE_NLS #define D_(s) dgettext(PACKAGE, s) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); #else #define D_(s) (s) #endif zm1Descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (zm1Descriptor) { zm1Descriptor->UniqueID = 1428; zm1Descriptor->Label = "zm1"; zm1Descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; zm1Descriptor->Name = D_("z-1"); zm1Descriptor->Maker = "Steve Harris "; zm1Descriptor->Copyright = "GPL"; zm1Descriptor->PortCount = 2; port_descriptors = (LADSPA_PortDescriptor *)calloc(2, sizeof(LADSPA_PortDescriptor)); zm1Descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(2, sizeof(LADSPA_PortRangeHint)); zm1Descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(2, sizeof(char*)); zm1Descriptor->PortNames = (const char **)port_names; /* Parameters for Input */ port_descriptors[ZM1_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[ZM1_INPUT] = D_("Input"); port_range_hints[ZM1_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[ZM1_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[ZM1_OUTPUT] = D_("Output"); port_range_hints[ZM1_OUTPUT].HintDescriptor = 0; zm1Descriptor->activate = activateZm1; zm1Descriptor->cleanup = cleanupZm1; zm1Descriptor->connect_port = connectPortZm1; zm1Descriptor->deactivate = NULL; zm1Descriptor->instantiate = instantiateZm1; zm1Descriptor->run = runZm1; zm1Descriptor->run_adding = runAddingZm1; zm1Descriptor->set_run_adding_gain = setRunAddingGainZm1; } } void __attribute__((destructor)) swh_fini() { if (zm1Descriptor) { free((LADSPA_PortDescriptor *)zm1Descriptor->PortDescriptors); free((char **)zm1Descriptor->PortNames); free((LADSPA_PortRangeHint *)zm1Descriptor->PortRangeHints); free(zm1Descriptor); } } lmms-1.1.3/plugins/LadspaEffect/tap/000077500000000000000000000000001247673406200172655ustar00rootroot00000000000000lmms-1.1.3/plugins/LadspaEffect/tap/CMakeLists.txt000066400000000000000000000021341247673406200220250ustar00rootroot00000000000000INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") FILE(GLOB PLUGIN_SOURCES *.c) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wno-write-strings -fomit-frame-pointer -fno-strict-aliasing -fstrength-reduce -funroll-loops -ffast-math") FOREACH(_item ${PLUGIN_SOURCES}) GET_FILENAME_COMPONENT(_plugin "${_item}" NAME_WE) ADD_LIBRARY("${_plugin}" MODULE "${_item}") INSTALL(TARGETS "${_plugin}" LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES PREFIX "") IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET "${_plugin}" POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/${_plugin}.dll\"") ENDIF(LMMS_BUILD_WIN32) IF(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Bsymbolic -lm") ELSE(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined -Wl,-Bsymbolic -lm") ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_LINUX) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") ENDIF(LMMS_BUILD_LINUX) ENDFOREACH(_item ${PLUGIN_SOURCES}) lmms-1.1.3/plugins/LadspaEffect/tap/COPYING000066400000000000000000000431101247673406200203170ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. lmms-1.1.3/plugins/LadspaEffect/tap/CREDITS000066400000000000000000000056451247673406200203170ustar00rootroot00000000000000The author would like to thank the following people for their help, support, comments, suggestions, patches etc. If you discover yourself in the following list and would like to remain nameless instead, please write to the author. In no particular order: Anand Kumria constantly maintains a Debian package of this software. As the author of the lrdf library, Steve Harris was kind enough to take a look at the RDF file describing these plugins. Alexander Koenig discovered that the AutoPanner (and Tremolo) didn't work at very small frequency values, and sent a patch that became the base of the solution. Forrest Cook suggested implementing an AutoPanner as a new TAP-plugin. Nick Lamb suggested using his Demolition [http://www.ecs.soton.ac.uk/~njl98r/code/ladspa/] program to sanity-check the TAP-plugins. Demolition proved essential, a must for any LADSPA plugin developer. It revealed bugs and LADSPA non-conformancies too many to mention in the TAP-plugins code, which could be fixed easily this way. Linium discovered a bug in EQ and EQ-BW: the plugins reinitialized themselves on each transport stop, which resulted in the effect disappearing after every STOP->PLAY. As a main Ardour developer, Taybin Rutkin implemented using RDF metadata to generate drop-down lists in LADSPA plugin GUIs in Ardour. This made it much easier to create good-looking and easy to use plugins; in particular TAP Reverberator and TAP Dynamics are among the "big winners". Luke Yelavich sent a patch that cleaned up the Makefile a bit by introducing the variables CFLAGS and LDFLAGS. Jan Depner suggested implementing some kind of doubler plugin, and he gave me useful pointers about the Midpoint Displacement Algorithm with which a semi-random series of numbers following a fractal pattern can be generated. Without him, the TAP Fractal Doubler would have never been written. He also helped a lot with the CPU runaway problems in TAP Reverberator, by reporting the problem and trying out my solutions. Maarten Maathuis contributed the Bauer stereophonic-to-binaural DSP plugin. NOTE: this plugin only existed in CVS between releases 0.7.0 and 0.7.1; it has been agreed to be removed from TAP-plugins and released separately. Damon Chaplin tracked down issues that caused problems on 64-bit machines, found uninitialised variables via Valgrind, and also pinned down long lurking denormal issues. Thanks! And, of course, special thanks to the Ardour [http://ardour.org] and JACK [http://jackit.sf.net] development teams for their tireless efforts in creating one of the best Linux audio engineering platforms (and besides that, the recommended host for these plugins). TAP-plugins aims to be a very small contribution to this effort. lmms-1.1.3/plugins/LadspaEffect/tap/README000066400000000000000000000033611247673406200201500ustar00rootroot00000000000000TAP-plugins (Tom's Audio Processing plugins) -------------------------------------------- AUTHOR: Tom Szilagyi WEBPAGE: http://tap-plugins.sf.net Welcome! TAP-plugins is a bunch of LADSPA plugins for audio processing. It runs on the GNU/Linux operating system, and possibly other UNIX-like operating systems. LADSPA stands for Linux Audio Developers Simple Plugin API. Learn more about LADSPA at http://www.ladspa.org You need a LADSPA-aware host program to use these plugins. I recommend using Ardour, which is a professional multichannel hard disc recorder and digital audio workstation for Linux. These plugins were developed and tested using Ardour, but they should work with any LADSPA-capable host. Learn more about Ardour at http://ardour.org Installation and usage of the plugins is very simple. Please take a moment to edit the top of the Makefile if you wish to install the plugins in a directory other than /usr/local/lib/ladspa (the default place for plugins). A destination directory for RDF metadata is also set there (defaults to /usr/local/share/ladspa/rdf) which you may also want to change. Then run "make" and (as root) "make install". No special packages are needed to compile these plugins, so there is no ./configure script. A thorough manual is provided in html format. It is identical to the project website. There is no need to save that manually, though: it is provided as a separate package called tap-plugins-doc. After downloading and untarring it, just open index.html with your favorite Any Browser to view it. Questions, comments, suggestions, bugreports and fixes are always welcome at: Have fun, turn up the volume and kick the shit out of your neighbours! lmms-1.1.3/plugins/LadspaEffect/tap/tap_autopan.c000066400000000000000000000235601247673406200217520ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi Patches were received from: Alexander Koenig This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_autopan.c,v 1.6 2004/02/21 17:33:36 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_STEREO 2146 /* The port numbers for the plugin: */ #define CONTROL_FREQ 0 #define CONTROL_DEPTH 1 #define CONTROL_GAIN 2 #define INPUT_L 3 #define INPUT_R 4 #define OUTPUT_L 5 #define OUTPUT_R 6 /* Total number of ports */ #define PORTCOUNT_STEREO 7 /* cosine table for fast computations */ LADSPA_Data cos_table[1024]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * freq; LADSPA_Data * depth; LADSPA_Data * gain; LADSPA_Data * input_L; LADSPA_Data * input_R; LADSPA_Data * output_L; LADSPA_Data * output_R; unsigned long SampleRate; LADSPA_Data Phase; LADSPA_Data run_adding_gain; } AutoPan; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_AutoPan(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(AutoPan))) != NULL) { ((AutoPan *)ptr)->SampleRate = SampleRate; ((AutoPan *)ptr)->run_adding_gain = 1.0; return ptr; } return NULL; } void activate_AutoPan(LADSPA_Handle Instance) { AutoPan * ptr; ptr = (AutoPan *)Instance; ptr->Phase = 0.0f; } /* Connect a port to a data location. */ void connect_port_AutoPan(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { AutoPan * ptr; ptr = (AutoPan *)Instance; switch (Port) { case CONTROL_FREQ: ptr->freq = DataLocation; break; case CONTROL_DEPTH: ptr->depth = DataLocation; break; case CONTROL_GAIN: ptr->gain = DataLocation; break; case INPUT_L: ptr->input_L = DataLocation; break; case INPUT_R: ptr->input_R = DataLocation; break; case OUTPUT_L: ptr->output_L = DataLocation; break; case OUTPUT_R: ptr->output_R = DataLocation; break; } } void run_AutoPan(LADSPA_Handle Instance, unsigned long SampleCount) { AutoPan * ptr = (AutoPan *)Instance; LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,20.0f); LADSPA_Data depth = LIMIT(*(ptr->depth),0.0f,100.0f); LADSPA_Data gain = db2lin(LIMIT(*(ptr->gain),-70.0f,20.0f)); unsigned long sample_index; LADSPA_Data phase_L = 0; LADSPA_Data phase_R = 0; for (sample_index = 0; sample_index < SampleCount; sample_index++) { phase_L = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; while (phase_L >= 1024.0f) phase_L -= 1024.0f; phase_R = phase_L + 512.0f; while (phase_R >= 1024.0f) phase_R -= 1024.0f; *(output_L++) = *(input_L++) * gain * (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_L]); *(output_R++) = *(input_R++) * gain * (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_R]); } ptr->Phase = phase_L; while (ptr->Phase >= 1024.0f) ptr->Phase -= 1024.0f; } void set_run_adding_gain_AutoPan(LADSPA_Handle Instance, LADSPA_Data gain) { AutoPan * ptr; ptr = (AutoPan *)Instance; ptr->run_adding_gain = gain; } void run_adding_AutoPan(LADSPA_Handle Instance, unsigned long SampleCount) { AutoPan * ptr = (AutoPan *)Instance; LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,20.0f); LADSPA_Data depth = LIMIT(*(ptr->depth),0.0f,100.0f); LADSPA_Data gain = db2lin(LIMIT(*(ptr->gain),-70.0f,20.0f)); unsigned long sample_index; LADSPA_Data phase_L = 0; LADSPA_Data phase_R = 0; for (sample_index = 0; sample_index < SampleCount; sample_index++) { phase_L = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; while (phase_L >= 1024.0f) phase_L -= 1024.0f; phase_R = phase_L + 512.0f; while (phase_R >= 1024.0f) phase_R -= 1024.0f; *(output_L++) += *(input_L++) * gain * ptr->run_adding_gain * (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_L]); *(output_R++) += *(input_R++) * gain * ptr->run_adding_gain * (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase_R]); } ptr->Phase = phase_L; while (ptr->Phase >= 1024.0f) ptr->Phase -= 1024.0f; } /* Throw away an AutoPan effect instance. */ void cleanup_AutoPan(LADSPA_Handle Instance) { free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { int i; char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < 1024; i++) cos_table[i] = cosf(i * M_PI / 512.0f); mono_descriptor->UniqueID = ID_STEREO; mono_descriptor->Label = strdup("tap_autopan"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP AutoPanner"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[CONTROL_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[CONTROL_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[CONTROL_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[CONTROL_FREQ] = strdup("Frequency [Hz]"); port_names[CONTROL_DEPTH] = strdup("Depth [%]"); port_names[CONTROL_GAIN] = strdup("Gain [dB]"); port_names[INPUT_L] = strdup("Input L"); port_names[INPUT_R] = strdup("Input R"); port_names[OUTPUT_L] = strdup("Output L"); port_names[OUTPUT_R] = strdup("Output R"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[CONTROL_FREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[CONTROL_DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[CONTROL_GAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[CONTROL_FREQ].LowerBound = 0; port_range_hints[CONTROL_FREQ].UpperBound = 20; port_range_hints[CONTROL_DEPTH].LowerBound = 0; port_range_hints[CONTROL_DEPTH].UpperBound = 100; port_range_hints[CONTROL_GAIN].LowerBound = -70; port_range_hints[CONTROL_GAIN].UpperBound = 20; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_AutoPan; mono_descriptor->connect_port = connect_port_AutoPan; mono_descriptor->activate = activate_AutoPan; mono_descriptor->run = run_AutoPan; mono_descriptor->run_adding = run_adding_AutoPan; mono_descriptor->set_run_adding_gain = set_run_adding_gain_AutoPan; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_AutoPan; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_chorusflanger.c000066400000000000000000000416151247673406200231460ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_chorusflanger.c,v 1.3 2004/08/17 09:15:21 tszilagyi Exp $ */ #include #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_STEREO 2159 /* The port numbers for the plugin: */ #define FREQ 0 #define PHASE 1 #define DEPTH 2 #define DELAY 3 #define CONTOUR 4 #define DRYLEVEL 5 #define WETLEVEL 6 #define INPUT_L 7 #define INPUT_R 8 #define OUTPUT_L 9 #define OUTPUT_R 10 /* Total number of ports */ #define PORTCOUNT_STEREO 11 /* * Largest buffer lengths needed (at 192 kHz). * These are summed up to determine the size of *one* buffer per channel. */ #define DEPTH_BUFLEN 450 #define DELAY_BUFLEN 19200 /* Max. frequency setting */ #define MAX_FREQ 5.0f /* bandwidth of highpass filters (in octaves) */ #define HP_BW 1 /* cosine table for fast computations */ #define COS_TABLE_SIZE 1024 LADSPA_Data cos_table[COS_TABLE_SIZE]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * freq; LADSPA_Data * phase; LADSPA_Data * depth; LADSPA_Data * delay; LADSPA_Data * contour; LADSPA_Data * drylevel; LADSPA_Data * wetlevel; LADSPA_Data * input_L; LADSPA_Data * input_R; LADSPA_Data * output_L; LADSPA_Data * output_R; LADSPA_Data * ring_L; unsigned long buflen_L; unsigned long pos_L; LADSPA_Data * ring_R; unsigned long buflen_R; unsigned long pos_R; biquad highpass_L; biquad highpass_R; float cm_phase; float dm_phase; unsigned long sample_rate; LADSPA_Data run_adding_gain; } ChorusFlanger; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_ChorusFlanger(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(ChorusFlanger))) != NULL) { ((ChorusFlanger *)ptr)->sample_rate = sample_rate; ((ChorusFlanger *)ptr)->run_adding_gain = 1.0f; if ((((ChorusFlanger *)ptr)->ring_L = calloc((DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000, sizeof(LADSPA_Data))) == NULL) return NULL; ((ChorusFlanger *)ptr)->buflen_L = (DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000; ((ChorusFlanger *)ptr)->pos_L = 0; if ((((ChorusFlanger *)ptr)->ring_R = calloc((DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000, sizeof(LADSPA_Data))) == NULL) return NULL; ((ChorusFlanger *)ptr)->buflen_R = (DEPTH_BUFLEN + DELAY_BUFLEN) * sample_rate / 192000; ((ChorusFlanger *)ptr)->pos_R = 0; ((ChorusFlanger *)ptr)->cm_phase = 0.0f; ((ChorusFlanger *)ptr)->dm_phase = 0.0f; return ptr; } return NULL; } void activate_ChorusFlanger(LADSPA_Handle Instance) { ChorusFlanger * ptr = (ChorusFlanger *)Instance; unsigned long i; for (i = 0; i < (DEPTH_BUFLEN + DELAY_BUFLEN) * ptr->sample_rate / 192000; i++) { ptr->ring_L[i] = 0.0f; ptr->ring_R[i] = 0.0f; } biquad_init(&ptr->highpass_L); biquad_init(&ptr->highpass_R); } /* Connect a port to a data location. */ void connect_port_ChorusFlanger(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * data) { ChorusFlanger * ptr = (ChorusFlanger *)Instance; switch (Port) { case FREQ: ptr->freq = data; break; case PHASE: ptr->phase = data; break; case DEPTH: ptr->depth = data; break; case DELAY: ptr->delay = data; break; case CONTOUR: ptr->contour = data; break; case DRYLEVEL: ptr->drylevel = data; break; case WETLEVEL: ptr->wetlevel = data; break; case INPUT_L: ptr->input_L = data; break; case INPUT_R: ptr->input_R = data; break; case OUTPUT_L: ptr->output_L = data; break; case OUTPUT_R: ptr->output_R = data; break; } } void run_ChorusFlanger(LADSPA_Handle Instance, unsigned long SampleCount) { ChorusFlanger * ptr = (ChorusFlanger *)Instance; LADSPA_Data freq = LIMIT(*(ptr->freq), 0.0f, MAX_FREQ); LADSPA_Data phase = LIMIT(*(ptr->phase), 0.0f, 180.0f) / 180.0f; LADSPA_Data depth = 100.0f * ptr->sample_rate / 44100.0f * LIMIT(*(ptr->depth),0.0f,100.0f) / 100.0f; LADSPA_Data delay = LIMIT(*(ptr->delay),0.0f,100.0f); LADSPA_Data contour = LIMIT(*(ptr->contour), 20.0f, 20000.0f); LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in_L = 0.0f; LADSPA_Data in_R = 0.0f; LADSPA_Data d_L = 0.0f; LADSPA_Data d_R = 0.0f; LADSPA_Data f_L = 0.0f; LADSPA_Data f_R = 0.0f; LADSPA_Data out_L = 0.0f; LADSPA_Data out_R = 0.0f; float phase_L = 0.0f; float phase_R = 0.0f; float fpos_L = 0.0f; float fpos_R = 0.0f; float n_L = 0.0f; float n_R = 0.0f; float rem_L = 0.0f; float rem_R = 0.0f; float s_a_L, s_a_R, s_b_L, s_b_R; float d_pos = 0.0f; if (delay < 1.0f) delay = 1.0f; delay = 100.0f - delay; hp_set_params(&ptr->highpass_L, contour, HP_BW, ptr->sample_rate); hp_set_params(&ptr->highpass_R, contour, HP_BW, ptr->sample_rate); for (sample_index = 0; sample_index < sample_count; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); ptr->cm_phase += freq / ptr->sample_rate * COS_TABLE_SIZE; while (ptr->cm_phase >= COS_TABLE_SIZE) ptr->cm_phase -= COS_TABLE_SIZE; ptr->dm_phase = phase * COS_TABLE_SIZE / 2.0f; phase_L = ptr->cm_phase; phase_R = ptr->cm_phase + ptr->dm_phase; while (phase_R >= COS_TABLE_SIZE) phase_R -= COS_TABLE_SIZE; d_pos = delay * ptr->sample_rate / 1000.0f; fpos_L = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_L]); fpos_R = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_R]); n_L = floorf(fpos_L); n_R = floorf(fpos_R); rem_L = fpos_L - n_L; rem_R = fpos_R - n_R; s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n_L); s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n_L + 1); s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n_R); s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n_R + 1); d_L = ((1 - rem_L) * s_a_L + rem_L * s_b_L); d_R = ((1 - rem_R) * s_a_R + rem_R * s_b_R); f_L = biquad_run(&ptr->highpass_L, d_L); f_R = biquad_run(&ptr->highpass_R, d_R); out_L = drylevel * in_L + wetlevel * f_L; out_R = drylevel * in_R + wetlevel * f_R; *(output_L++) = out_L; *(output_R++) = out_R; } } void set_run_adding_gain_ChorusFlanger(LADSPA_Handle Instance, LADSPA_Data gain) { ChorusFlanger * ptr = (ChorusFlanger *)Instance; ptr->run_adding_gain = gain; } void run_adding_ChorusFlanger(LADSPA_Handle Instance, unsigned long SampleCount) { ChorusFlanger * ptr = (ChorusFlanger *)Instance; LADSPA_Data freq = LIMIT(*(ptr->freq), 0.0f, MAX_FREQ); LADSPA_Data phase = LIMIT(*(ptr->phase), 0.0f, 180.0f) / 180.0f; LADSPA_Data depth = 100.0f * ptr->sample_rate / 44100.0f * LIMIT(*(ptr->depth),0.0f,100.0f) / 100.0f; LADSPA_Data delay = LIMIT(*(ptr->delay),0.0f,100.0f); LADSPA_Data contour = LIMIT(*(ptr->contour), 20.0f, 20000.0f); LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in_L = 0.0f; LADSPA_Data in_R = 0.0f; LADSPA_Data d_L = 0.0f; LADSPA_Data d_R = 0.0f; LADSPA_Data f_L = 0.0f; LADSPA_Data f_R = 0.0f; LADSPA_Data out_L = 0.0f; LADSPA_Data out_R = 0.0f; float phase_L = 0.0f; float phase_R = 0.0f; float fpos_L = 0.0f; float fpos_R = 0.0f; float n_L = 0.0f; float n_R = 0.0f; float rem_L = 0.0f; float rem_R = 0.0f; float s_a_L, s_a_R, s_b_L, s_b_R; float d_pos = 0.0f; if (delay < 1.0f) delay = 1.0f; delay = 100.0f - delay; hp_set_params(&ptr->highpass_L, contour, HP_BW, ptr->sample_rate); hp_set_params(&ptr->highpass_R, contour, HP_BW, ptr->sample_rate); for (sample_index = 0; sample_index < sample_count; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); ptr->cm_phase += freq / ptr->sample_rate * COS_TABLE_SIZE; while (ptr->cm_phase >= COS_TABLE_SIZE) ptr->cm_phase -= COS_TABLE_SIZE; ptr->dm_phase = phase * COS_TABLE_SIZE / 2.0f; phase_L = ptr->cm_phase; phase_R = ptr->cm_phase + ptr->dm_phase; while (phase_R >= COS_TABLE_SIZE) phase_R -= COS_TABLE_SIZE; d_pos = delay * ptr->sample_rate / 1000.0f; fpos_L = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_L]); fpos_R = d_pos + depth * (0.5f + 0.5f * cos_table[(unsigned long)phase_R]); n_L = floorf(fpos_L); n_R = floorf(fpos_R); rem_L = fpos_L - n_L; rem_R = fpos_R - n_R; s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n_L); s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n_L + 1); s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n_R); s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n_R + 1); d_L = ((1 - rem_L) * s_a_L + rem_L * s_b_L); d_R = ((1 - rem_R) * s_a_R + rem_R * s_b_R); f_L = biquad_run(&ptr->highpass_L, d_L); f_R = biquad_run(&ptr->highpass_R, d_R); out_L = drylevel * in_L + wetlevel * f_L; out_R = drylevel * in_R + wetlevel * f_R; *(output_L++) += ptr->run_adding_gain * out_L; *(output_R++) += ptr->run_adding_gain * out_R; } } /* Throw away a ChorusFlanger effect instance. */ void cleanup_ChorusFlanger(LADSPA_Handle Instance) { ChorusFlanger * ptr = (ChorusFlanger *)Instance; free(ptr->ring_L); free(ptr->ring_R); free(Instance); } LADSPA_Descriptor * stereo_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; int i; if ((stereo_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < COS_TABLE_SIZE; i++) cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); stereo_descriptor->UniqueID = ID_STEREO; stereo_descriptor->Label = strdup("tap_chorusflanger"); stereo_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; stereo_descriptor->Name = strdup("TAP Chorus/Flanger"); stereo_descriptor->Maker = strdup("Tom Szilagyi"); stereo_descriptor->Copyright = strdup("GPL"); stereo_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[PHASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DELAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[CONTOUR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); stereo_descriptor->PortNames = (const char **)port_names; port_names[FREQ] = strdup("Frequency [Hz]"); port_names[PHASE] = strdup("L/R Phase Shift [deg]"); port_names[DEPTH] = strdup("Depth [%]"); port_names[DELAY] = strdup("Delay [ms]"); port_names[CONTOUR] = strdup("Contour [Hz]"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[WETLEVEL] = strdup("Wet Level [dB]"); port_names[INPUT_L] = strdup("Input_L"); port_names[INPUT_R] = strdup("Input_R"); port_names[OUTPUT_L] = strdup("Output_L"); port_names[OUTPUT_R] = strdup("Output_R"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[FREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[PHASE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_HIGH); port_range_hints[DELAY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[CONTOUR].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_100); port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[WETLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[FREQ].LowerBound = 0.0f; port_range_hints[FREQ].UpperBound = MAX_FREQ; port_range_hints[PHASE].LowerBound = 0.0f; port_range_hints[PHASE].UpperBound = 180.0f; port_range_hints[DEPTH].LowerBound = 0.0f; port_range_hints[DEPTH].UpperBound = 100.0f; port_range_hints[DELAY].LowerBound = 0.0f; port_range_hints[DELAY].UpperBound = 100.0f; port_range_hints[CONTOUR].LowerBound = 20.0f; port_range_hints[CONTOUR].UpperBound = 20000.0f; port_range_hints[DRYLEVEL].LowerBound = -90.0f; port_range_hints[DRYLEVEL].UpperBound = +20.0f; port_range_hints[WETLEVEL].LowerBound = -90.0f; port_range_hints[WETLEVEL].UpperBound = +20.0f; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; stereo_descriptor->instantiate = instantiate_ChorusFlanger; stereo_descriptor->connect_port = connect_port_ChorusFlanger; stereo_descriptor->activate = activate_ChorusFlanger; stereo_descriptor->run = run_ChorusFlanger; stereo_descriptor->run_adding = run_adding_ChorusFlanger; stereo_descriptor->set_run_adding_gain = set_run_adding_gain_ChorusFlanger; stereo_descriptor->deactivate = NULL; stereo_descriptor->cleanup = cleanup_ChorusFlanger; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return stereo_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_deesser.c000066400000000000000000000307631247673406200217400ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_deesser.c,v 1.7 2004/05/01 16:15:06 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2147 /* The port numbers for the plugin: */ #define THRESHOLD 0 #define FREQ 1 #define SIDECHAIN 2 #define MONITOR 3 #define ATTENUAT 4 #define INPUT 5 #define OUTPUT 6 /* Total number of ports */ #define PORTCOUNT_MONO 7 /* Bandwidth of sidechain lowpass/highpass filters */ #define SIDECH_BW 0.3f /* Used to hold 10 ms gain data, enough for sample rates up to 192 kHz */ #define RINGBUF_SIZE 2000 /* 4 digits precision from 1.000 to 9.999 */ LADSPA_Data log10_table[9000]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * threshold; LADSPA_Data * audiomode; LADSPA_Data * freq; LADSPA_Data * sidechain; LADSPA_Data * monitor; LADSPA_Data * attenuat; LADSPA_Data * input; LADSPA_Data * output; biquad sidech_lo_filter; biquad sidech_hi_filter; LADSPA_Data * ringbuffer; unsigned long buflen; unsigned long pos; LADSPA_Data sum; LADSPA_Data old_freq; unsigned long sample_rate; LADSPA_Data run_adding_gain; } DeEsser; /* fast linear to decibel conversion using log10_table[] */ LADSPA_Data fast_lin2db(LADSPA_Data lin) { unsigned long k; int exp = 0; LADSPA_Data mant = ABS(lin); /* sanity checks */ if (mant == 0.0f) return(-1.0f/0.0f); /* -inf */ if (mant == 1.0f/0.0f) /* +inf */ return(mant); while (mant < 1.0f) { mant *= 10; exp --; } while (mant >= 10.0f) { mant /= 10; exp ++; } k = (mant - 0.999999f) * 1000.0f; return 20.0f * (log10_table[k] + exp); } /* Construct a new plugin instance. */ LADSPA_Handle instantiate_DeEsser(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(DeEsser))) != NULL) { ((DeEsser *)ptr)->sample_rate = SampleRate; ((DeEsser *)ptr)->run_adding_gain = 1.0f; /* init filters */ biquad_init(&((DeEsser *)ptr)->sidech_lo_filter); biquad_init(&((DeEsser *)ptr)->sidech_hi_filter); /* alloc mem for ringbuffer */ if ((((DeEsser *)ptr)->ringbuffer = calloc(RINGBUF_SIZE, sizeof(LADSPA_Data))) == NULL) return NULL; /* 10 ms attenuation data is stored */ ((DeEsser *)ptr)->buflen = ((DeEsser *)ptr)->sample_rate / 100; ((DeEsser *)ptr)->pos = 0; ((DeEsser *)ptr)->sum = 0.0f; ((DeEsser *)ptr)->old_freq = 0; return ptr; } return NULL; } void activate_DeEsser(LADSPA_Handle Instance) { DeEsser * ptr = (DeEsser *)Instance; unsigned long i; for (i = 0; i < RINGBUF_SIZE; i++) ptr->ringbuffer[i] = 0.0f; } /* Connect a port to a data location. */ void connect_port_DeEsser(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { DeEsser * ptr; ptr = (DeEsser *)Instance; switch (Port) { case THRESHOLD: ptr->threshold = DataLocation; break; case FREQ: ptr->freq = DataLocation; break; case SIDECHAIN: ptr->sidechain = DataLocation; break; case MONITOR: ptr->monitor = DataLocation; break; case ATTENUAT: ptr->attenuat = DataLocation; *(ptr->attenuat) = 0.0f; break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_DeEsser(LADSPA_Handle Instance, unsigned long SampleCount) { DeEsser * ptr = (DeEsser *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data threshold = LIMIT(*(ptr->threshold),-50.0f,10.0f); LADSPA_Data freq = LIMIT(*(ptr->freq),2000.0f,16000.0f); LADSPA_Data sidechain = LIMIT(*(ptr->sidechain),0.0f,1.0f); LADSPA_Data monitor = LIMIT(*(ptr->monitor),0.0f,1.0f); unsigned long sample_index; LADSPA_Data in = 0; LADSPA_Data out = 0; LADSPA_Data sidech = 0; LADSPA_Data ampl_db = 0.0f; LADSPA_Data attn = 0.0f; LADSPA_Data max_attn = 0.0f; if (ptr->old_freq != freq) { lp_set_params(&ptr->sidech_lo_filter, freq, SIDECH_BW, ptr->sample_rate); hp_set_params(&ptr->sidech_hi_filter, freq, SIDECH_BW, ptr->sample_rate); ptr->old_freq = freq; } for (sample_index = 0; sample_index < SampleCount; sample_index++) { in = *(input++); /* process sidechain filters */ sidech = biquad_run(&ptr->sidech_hi_filter, in); if (sidechain > 0.1f) sidech = biquad_run(&ptr->sidech_lo_filter, sidech); ampl_db = fast_lin2db(sidech); if (ampl_db <= threshold) attn = 0.0f; else attn = -0.5f * (ampl_db - threshold); ptr->sum += attn; ptr->sum -= push_buffer(attn, ptr->ringbuffer, ptr->buflen, &ptr->pos); if (-1.0f * ptr->sum > max_attn) max_attn = -0.01f * ptr->sum; in *= db2lin(ptr->sum / 100.0f); /* output selector */ if (monitor > 0.1f) out = sidech; else out = in; *(output++) = out; *(ptr->attenuat) = LIMIT(max_attn,0,10); } } void set_run_adding_gain_DeEsser(LADSPA_Handle Instance, LADSPA_Data gain) { DeEsser * ptr = (DeEsser *)Instance; ptr->run_adding_gain = gain; } void run_adding_DeEsser(LADSPA_Handle Instance, unsigned long SampleCount) { DeEsser * ptr = (DeEsser *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data threshold = LIMIT(*(ptr->threshold),-50.0f,10.0f); LADSPA_Data freq = LIMIT(*(ptr->freq),2000.0f,16000.0f); LADSPA_Data sidechain = LIMIT(*(ptr->sidechain),0.0f,1.0f); LADSPA_Data monitor = LIMIT(*(ptr->monitor),0.0f,1.0f); unsigned long sample_index; LADSPA_Data in = 0; LADSPA_Data out = 0; LADSPA_Data sidech = 0; LADSPA_Data ampl_db = 0.0f; LADSPA_Data attn = 0.0f; LADSPA_Data max_attn = 0.0f; if (ptr->old_freq != freq) { lp_set_params(&ptr->sidech_lo_filter, freq, SIDECH_BW, ptr->sample_rate); hp_set_params(&ptr->sidech_hi_filter, freq, SIDECH_BW, ptr->sample_rate); ptr->old_freq = freq; } for (sample_index = 0; sample_index < SampleCount; sample_index++) { in = *(input++); /* process sidechain filters */ sidech = biquad_run(&ptr->sidech_hi_filter, in); if (sidechain > 0.1f) sidech = biquad_run(&ptr->sidech_lo_filter, sidech); ampl_db = 20.0f * log10f(sidech); if (ampl_db <= threshold) attn = 0.0f; else attn = -0.5f * (ampl_db - threshold); ptr->sum += attn; ptr->sum -= push_buffer(attn, ptr->ringbuffer, ptr->buflen, &ptr->pos); if (-1.0f * ptr->sum > max_attn) max_attn = -0.01f * ptr->sum; in *= db2lin(ptr->sum / 100.0f); /* output selector */ if (monitor > 0.1f) out = sidech; else out = in; *(output++) += ptr->run_adding_gain * out; *(ptr->attenuat) = LIMIT(max_attn,0,10); } } /* Throw away a DeEsser effect instance. */ void cleanup_DeEsser(LADSPA_Handle Instance) { DeEsser * ptr = (DeEsser *)Instance; free(ptr->ringbuffer); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { int i; char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); /* compute the log10 table */ for (i = 0; i < 9000; i++) log10_table[i] = log10f(1.0f + i / 1000.0f); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_deesser"); mono_descriptor->Properties = 0; mono_descriptor->Name = strdup("TAP DeEsser"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[THRESHOLD] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[SIDECHAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MONITOR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[ATTENUAT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[THRESHOLD] = strdup("Threshold Level [dB]"); port_names[FREQ] = strdup("Frequency [Hz]"); port_names[SIDECHAIN] = strdup("Sidechain Filter"); port_names[MONITOR] = strdup("Monitor"); port_names[ATTENUAT] = strdup("Attenuation [dB]"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[THRESHOLD].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[FREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[SIDECHAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); port_range_hints[MONITOR].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); port_range_hints[ATTENUAT].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[THRESHOLD].LowerBound = -50; port_range_hints[THRESHOLD].UpperBound = 10; port_range_hints[FREQ].LowerBound = 2000; port_range_hints[FREQ].UpperBound = 16000; port_range_hints[SIDECHAIN].LowerBound = 0.0f; port_range_hints[SIDECHAIN].UpperBound = 1.01f; port_range_hints[MONITOR].LowerBound = 0.0f; port_range_hints[MONITOR].UpperBound = 1.01f; port_range_hints[ATTENUAT].LowerBound = 0.0f; port_range_hints[ATTENUAT].UpperBound = 10.0f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_DeEsser; mono_descriptor->connect_port = connect_port_DeEsser; mono_descriptor->activate = activate_DeEsser; mono_descriptor->run = run_DeEsser; mono_descriptor->run_adding = run_adding_DeEsser; mono_descriptor->set_run_adding_gain = set_run_adding_gain_DeEsser; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_DeEsser; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_doubler.c000066400000000000000000000522571247673406200217440ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_doubler.c,v 1.4 2004/08/13 18:34:31 tszilagyi Exp $ */ #include #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_STEREO 2156 /* The port numbers for the plugin: */ #define TIME 0 #define PITCH 1 #define DRYLEVEL 2 #define DRYPOSL 3 #define DRYPOSR 4 #define WETLEVEL 5 #define WETPOSL 6 #define WETPOSR 7 #define INPUT_L 8 #define INPUT_R 9 #define OUTPUT_L 10 #define OUTPUT_R 11 /* Total number of ports */ #define PORTCOUNT_STEREO 12 /* Number of pink noise samples to be generated at once */ #define NOISE_LEN 1024 /* * Largest buffer length needed (at 192 kHz). */ #define BUFLEN 11520 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * time; LADSPA_Data * pitch; LADSPA_Data * drylevel; LADSPA_Data * dryposl; LADSPA_Data * dryposr; LADSPA_Data * wetlevel; LADSPA_Data * wetposl; LADSPA_Data * wetposr; LADSPA_Data * input_L; LADSPA_Data * input_R; LADSPA_Data * output_L; LADSPA_Data * output_R; LADSPA_Data old_time; LADSPA_Data old_pitch; LADSPA_Data * ring_L; unsigned long buflen_L; unsigned long pos_L; LADSPA_Data * ring_R; unsigned long buflen_R; unsigned long pos_R; LADSPA_Data * ring_pnoise; unsigned long buflen_pnoise; unsigned long pos_pnoise; LADSPA_Data * ring_dnoise; unsigned long buflen_dnoise; unsigned long pos_dnoise; float delay; float d_delay; float p_delay; unsigned long n_delay; float pitchmod; float d_pitch; float p_pitch; unsigned long n_pitch; unsigned long p_stretch; unsigned long d_stretch; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Doubler; /* generate fractal pattern using Midpoint Displacement Method * v: buffer of floats to output fractal pattern to * N: length of v, MUST be integer power of 2 (ie 128, 256, ...) * H: Hurst constant, between 0 and 0.9999 (fractal dimension) */ void fractal(LADSPA_Data * v, int N, float H) { int l = N; int k; float r = 1.0f; int c; v[0] = 0; while (l > 1) { k = N / l; for (c = 0; c < k; c++) { v[c*l + l/2] = (v[c*l] + v[((c+1) * l) % N]) / 2.0f + 2.0f * r * (rand() - (float)RAND_MAX/2.0f) / (float)RAND_MAX; v[c*l + l/2] = LIMIT(v[c*l + l/2], -1.0f, 1.0f); } l /= 2; r /= powf(2, H); } } /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Doubler(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Doubler))) != NULL) { ((Doubler *)ptr)->sample_rate = sample_rate; ((Doubler *)ptr)->run_adding_gain = 1.0f; if ((((Doubler *)ptr)->ring_L = calloc(BUFLEN * sample_rate / 192000, sizeof(LADSPA_Data))) == NULL) return NULL; ((Doubler *)ptr)->buflen_L = BUFLEN * sample_rate / 192000; ((Doubler *)ptr)->pos_L = 0; if ((((Doubler *)ptr)->ring_R = calloc(BUFLEN * sample_rate / 192000, sizeof(LADSPA_Data))) == NULL) return NULL; ((Doubler *)ptr)->buflen_R = BUFLEN * sample_rate / 192000; ((Doubler *)ptr)->pos_R = 0; if ((((Doubler *)ptr)->ring_pnoise = calloc(NOISE_LEN, sizeof(LADSPA_Data))) == NULL) return NULL; ((Doubler *)ptr)->buflen_pnoise = NOISE_LEN; ((Doubler *)ptr)->pos_pnoise = 0; if ((((Doubler *)ptr)->ring_dnoise = calloc(NOISE_LEN, sizeof(LADSPA_Data))) == NULL) return NULL; ((Doubler *)ptr)->buflen_dnoise = NOISE_LEN; ((Doubler *)ptr)->pos_dnoise = 0; ((Doubler *)ptr)->d_stretch = sample_rate / 10; ((Doubler *)ptr)->p_stretch = sample_rate / 1000; ((Doubler *)ptr)->delay = 0.0f; ((Doubler *)ptr)->d_delay = 0.0f; ((Doubler *)ptr)->p_delay = 0.0f; ((Doubler *)ptr)->n_delay = ((Doubler *)ptr)->d_stretch; ((Doubler *)ptr)->pitchmod = 0.0f; ((Doubler *)ptr)->d_pitch = 0.0f; ((Doubler *)ptr)->p_pitch = 0.0f; ((Doubler *)ptr)->n_pitch = ((Doubler *)ptr)->p_stretch; return ptr; } return NULL; } void activate_Doubler(LADSPA_Handle Instance) { Doubler * ptr = (Doubler *)Instance; unsigned long i; for (i = 0; i < BUFLEN * ptr->sample_rate / 192000; i++) { ptr->ring_L[i] = 0.0f; ptr->ring_R[i] = 0.0f; } ptr->old_time = -1.0f; ptr->old_pitch = -1.0f; } /* Connect a port to a data location. */ void connect_port_Doubler(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * data) { Doubler * ptr = (Doubler *)Instance; switch (Port) { case TIME: ptr->time = data; break; case PITCH: ptr->pitch = data; break; case DRYLEVEL: ptr->drylevel = data; break; case DRYPOSL: ptr->dryposl = data; break; case DRYPOSR: ptr->dryposr = data; break; case WETLEVEL: ptr->wetlevel = data; break; case WETPOSL: ptr->wetposl = data; break; case WETPOSR: ptr->wetposr = data; break; case INPUT_L: ptr->input_L = data; break; case INPUT_R: ptr->input_R = data; break; case OUTPUT_L: ptr->output_L = data; break; case OUTPUT_R: ptr->output_R = data; break; } } void run_Doubler(LADSPA_Handle Instance, unsigned long SampleCount) { Doubler * ptr = (Doubler *)Instance; LADSPA_Data pitch = LIMIT(*(ptr->pitch),0.0f,1.0f) + 0.75f; LADSPA_Data depth = LIMIT(((1.0f - LIMIT(*(ptr->pitch),0.0f,1.0f)) * 1.75f + 0.25f) * ptr->sample_rate / 6000.0f / M_PI, 0, ptr->buflen_L / 2); LADSPA_Data time = LIMIT(*(ptr->time), 0.0f, 1.0f) + 0.5f; LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data dryposl = 1.0f - LIMIT(*(ptr->dryposl), 0.0f, 1.0f); LADSPA_Data dryposr = LIMIT(*(ptr->dryposr), 0.0f, 1.0f); LADSPA_Data wetposl = 1.0f - LIMIT(*(ptr->wetposl), 0.0f, 1.0f); LADSPA_Data wetposr = LIMIT(*(ptr->wetposr), 0.0f, 1.0f); LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in_L = 0.0f; LADSPA_Data in_R = 0.0f; LADSPA_Data out_L = 0.0f; LADSPA_Data out_R = 0.0f; LADSPA_Data fpos = 0.0f; LADSPA_Data n = 0.0f; LADSPA_Data rem = 0.0f; LADSPA_Data s_a_L, s_a_R, s_b_L, s_b_R; LADSPA_Data prev_p_pitch = 0.0f; LADSPA_Data prev_p_delay = 0.0f; LADSPA_Data delay; LADSPA_Data drystream_L = 0.0f; LADSPA_Data drystream_R = 0.0f; LADSPA_Data wetstream_L = 0.0f; LADSPA_Data wetstream_R = 0.0f; if (ptr->old_pitch != pitch) { ptr->pitchmod = ptr->p_pitch; prev_p_pitch = ptr->p_pitch; fractal(ptr->ring_pnoise, NOISE_LEN, pitch); ptr->pos_pnoise = 0; ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, ptr->buflen_pnoise, &(ptr->pos_pnoise)); ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); ptr->n_pitch = 0; ptr->old_pitch = pitch; } if (ptr->old_time != time) { ptr->delay = ptr->p_delay; prev_p_delay = ptr->p_delay; fractal(ptr->ring_dnoise, NOISE_LEN, time); ptr->pos_dnoise = 0; ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, ptr->buflen_dnoise, &(ptr->pos_dnoise)); ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); ptr->n_delay = 0; ptr->old_time = time; } for (sample_index = 0; sample_index < sample_count; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); if (ptr->n_pitch < ptr->p_stretch) { ptr->pitchmod += ptr->d_pitch; ptr->n_pitch++; } else { ptr->pitchmod = ptr->p_pitch; prev_p_pitch = ptr->p_pitch; if (!ptr->pos_pnoise) { fractal(ptr->ring_pnoise, NOISE_LEN, pitch); } ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, ptr->buflen_pnoise, &(ptr->pos_pnoise)); ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); ptr->n_pitch = 0; } if (ptr->n_delay < ptr->d_stretch) { ptr->delay += ptr->d_delay; ptr->n_delay++; } else { ptr->delay = ptr->p_delay; prev_p_delay = ptr->p_delay; if (!ptr->pos_dnoise) { fractal(ptr->ring_dnoise, NOISE_LEN, time); } ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, ptr->buflen_dnoise, &(ptr->pos_dnoise)); ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); ptr->n_delay = 0; } delay = (12.5f * ptr->delay + 37.5f) * ptr->sample_rate / 1000.0f; fpos = ptr->buflen_L - depth * (1.0f - ptr->pitchmod) - delay - 1.0f; n = floorf(fpos); rem = fpos - n; s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n); s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n + 1); s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n); s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n + 1); drystream_L = drylevel * in_L; drystream_R = drylevel * in_R; wetstream_L = wetlevel * ((1 - rem) * s_a_L + rem * s_b_L); wetstream_R = wetlevel * ((1 - rem) * s_a_R + rem * s_b_R); out_L = dryposl * drystream_L + (1.0f - dryposr) * drystream_R + wetposl * wetstream_L + (1.0f - wetposr) * wetstream_R; out_R = (1.0f - dryposl) * drystream_L + dryposr * drystream_R + (1.0f - wetposl) * wetstream_L + wetposr * wetstream_R; *(output_L++) = out_L; *(output_R++) = out_R; } } void set_run_adding_gain_Doubler(LADSPA_Handle Instance, LADSPA_Data gain) { Doubler * ptr = (Doubler *)Instance; ptr->run_adding_gain = gain; } void run_adding_Doubler(LADSPA_Handle Instance, unsigned long SampleCount) { Doubler * ptr = (Doubler *)Instance; LADSPA_Data pitch = LIMIT(*(ptr->pitch),0.0f,1.0f) + 0.75f; LADSPA_Data depth = LIMIT(((1.0f - LIMIT(*(ptr->pitch),0.0f,1.0f)) * 1.75f + 0.25f) * ptr->sample_rate / 6000.0f / M_PI, 0, ptr->buflen_L / 2); LADSPA_Data time = LIMIT(*(ptr->time), 0.0f, 1.0f) + 0.5f; LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data dryposl = 1.0f - LIMIT(*(ptr->dryposl), 0.0f, 1.0f); LADSPA_Data dryposr = LIMIT(*(ptr->dryposr), 0.0f, 1.0f); LADSPA_Data wetposl = 1.0f - LIMIT(*(ptr->wetposl), 0.0f, 1.0f); LADSPA_Data wetposr = LIMIT(*(ptr->wetposr), 0.0f, 1.0f); LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in_L = 0.0f; LADSPA_Data in_R = 0.0f; LADSPA_Data out_L = 0.0f; LADSPA_Data out_R = 0.0f; LADSPA_Data fpos = 0.0f; LADSPA_Data n = 0.0f; LADSPA_Data rem = 0.0f; LADSPA_Data s_a_L, s_a_R, s_b_L, s_b_R; LADSPA_Data prev_p_pitch = 0.0f; LADSPA_Data prev_p_delay = 0.0f; LADSPA_Data delay; LADSPA_Data drystream_L = 0.0f; LADSPA_Data drystream_R = 0.0f; LADSPA_Data wetstream_L = 0.0f; LADSPA_Data wetstream_R = 0.0f; if (ptr->old_pitch != pitch) { ptr->pitchmod = ptr->p_pitch; prev_p_pitch = ptr->p_pitch; fractal(ptr->ring_pnoise, NOISE_LEN, pitch); ptr->pos_pnoise = 0; ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, ptr->buflen_pnoise, &(ptr->pos_pnoise)); ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); ptr->n_pitch = 0; ptr->old_pitch = pitch; } if (ptr->old_time != time) { ptr->delay = ptr->p_delay; prev_p_delay = ptr->p_delay; fractal(ptr->ring_dnoise, NOISE_LEN, time); ptr->pos_dnoise = 0; ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, ptr->buflen_dnoise, &(ptr->pos_dnoise)); ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); ptr->n_delay = 0; ptr->old_time = time; } for (sample_index = 0; sample_index < sample_count; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); push_buffer(in_L, ptr->ring_L, ptr->buflen_L, &(ptr->pos_L)); push_buffer(in_R, ptr->ring_R, ptr->buflen_R, &(ptr->pos_R)); if (ptr->n_pitch < ptr->p_stretch) { ptr->pitchmod += ptr->d_pitch; ptr->n_pitch++; } else { ptr->pitchmod = ptr->p_pitch; prev_p_pitch = ptr->p_pitch; if (!ptr->pos_pnoise) { fractal(ptr->ring_pnoise, NOISE_LEN, pitch); } ptr->p_pitch = push_buffer(0.0f, ptr->ring_pnoise, ptr->buflen_pnoise, &(ptr->pos_pnoise)); ptr->d_pitch = (ptr->p_pitch - prev_p_pitch) / (float)(ptr->p_stretch); ptr->n_pitch = 0; } if (ptr->n_delay < ptr->d_stretch) { ptr->delay += ptr->d_delay; ptr->n_delay++; } else { ptr->delay = ptr->p_delay; prev_p_delay = ptr->p_delay; if (!ptr->pos_dnoise) { fractal(ptr->ring_dnoise, NOISE_LEN, time); } ptr->p_delay = push_buffer(0.0f, ptr->ring_dnoise, ptr->buflen_dnoise, &(ptr->pos_dnoise)); ptr->d_delay = (ptr->p_delay - prev_p_delay) / (float)(ptr->d_stretch); ptr->n_delay = 0; } delay = (12.5f * ptr->delay + 37.5f) * ptr->sample_rate / 1000.0f; fpos = ptr->buflen_L - depth * (1.0f - ptr->pitchmod) - delay - 1.0f; n = floorf(fpos); rem = fpos - n; s_a_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n); s_b_L = read_buffer(ptr->ring_L, ptr->buflen_L, ptr->pos_L, (unsigned long) n + 1); s_a_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n); s_b_R = read_buffer(ptr->ring_R, ptr->buflen_R, ptr->pos_R, (unsigned long) n + 1); drystream_L = drylevel * in_L; drystream_R = drylevel * in_R; wetstream_L = wetlevel * ((1 - rem) * s_a_L + rem * s_b_L); wetstream_R = wetlevel * ((1 - rem) * s_a_R + rem * s_b_R); out_L = dryposl * drystream_L + (1.0f - dryposr) * drystream_R + wetposl * wetstream_L + (1.0f - wetposr) * wetstream_R; out_R = (1.0f - dryposl) * drystream_L + dryposr * drystream_R + (1.0f - wetposl) * wetstream_L + wetposr * wetstream_R; *(output_L++) += ptr->run_adding_gain * out_L; *(output_R++) += ptr->run_adding_gain * out_R; } } /* Throw away a Doubler effect instance. */ void cleanup_Doubler(LADSPA_Handle Instance) { Doubler * ptr = (Doubler *)Instance; free(ptr->ring_L); free(ptr->ring_R); free(ptr->ring_pnoise); free(ptr->ring_dnoise); free(Instance); } LADSPA_Descriptor * stereo_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((stereo_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); stereo_descriptor->UniqueID = ID_STEREO; stereo_descriptor->Label = strdup("tap_doubler"); stereo_descriptor->Properties = 0; stereo_descriptor->Name = strdup("TAP Fractal Doubler"); stereo_descriptor->Maker = strdup("Tom Szilagyi"); stereo_descriptor->Copyright = strdup("GPL"); stereo_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[TIME] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[PITCH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYPOSL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYPOSR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETPOSL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETPOSR] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); stereo_descriptor->PortNames = (const char **)port_names; port_names[TIME] = strdup("Time Tracking"); port_names[PITCH] = strdup("Pitch Tracking"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[DRYPOSL] = strdup("Dry Left Position"); port_names[DRYPOSR] = strdup("Dry Right Position"); port_names[WETLEVEL] = strdup("Wet Level [dB]"); port_names[WETPOSL] = strdup("Wet Left Position"); port_names[WETPOSR] = strdup("Wet Right Position"); port_names[INPUT_L] = strdup("Input_L"); port_names[INPUT_R] = strdup("Input_R"); port_names[OUTPUT_L] = strdup("Output_L"); port_names[OUTPUT_R] = strdup("Output_R"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[TIME].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[PITCH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[DRYPOSL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM); port_range_hints[DRYPOSR].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[WETLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[WETPOSL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM); port_range_hints[WETPOSR].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[TIME].LowerBound = 0.0f; port_range_hints[TIME].UpperBound = 1.0f; port_range_hints[PITCH].LowerBound = 0.0f; port_range_hints[PITCH].UpperBound = 1.0f; port_range_hints[DRYLEVEL].LowerBound = -90.0f; port_range_hints[DRYLEVEL].UpperBound = +20.0f; port_range_hints[DRYPOSL].LowerBound = 0.0f; port_range_hints[DRYPOSL].UpperBound = 1.0f; port_range_hints[DRYPOSR].LowerBound = 0.0f; port_range_hints[DRYPOSR].UpperBound = 1.0f; port_range_hints[WETLEVEL].LowerBound = -90.0f; port_range_hints[WETLEVEL].UpperBound = +20.0f; port_range_hints[WETPOSL].LowerBound = 0.0f; port_range_hints[WETPOSL].UpperBound = 1.0f; port_range_hints[WETPOSR].LowerBound = 0.0f; port_range_hints[WETPOSR].UpperBound = 1.0f; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; stereo_descriptor->instantiate = instantiate_Doubler; stereo_descriptor->connect_port = connect_port_Doubler; stereo_descriptor->activate = activate_Doubler; stereo_descriptor->run = run_Doubler; stereo_descriptor->run_adding = run_adding_Doubler; stereo_descriptor->set_run_adding_gain = set_run_adding_gain_Doubler; stereo_descriptor->deactivate = NULL; stereo_descriptor->cleanup = cleanup_Doubler; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return stereo_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_dynamics_m.c000066400000000000000000000421101247673406200224160ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_dynamics_m.c,v 1.2 2004/06/15 14:50:55 tszilagyi Exp $ */ #include #include #include #include #include #include #include "tap_utils.h" /* ***** VERY IMPORTANT! ***** * * If you enable this, the plugin will use float arithmetics in DSP * calculations. This usually yields lower average CPU usage, but * occasionaly may result in high CPU peaks which cause trouble to you * and your JACK server. The default is to use fixpoint arithmetics * (with the following #define commented out). But (depending on the * processor on which you run the code) you may find floating point * mode usable. */ /*#define DYN_CALC_FLOAT*/ typedef signed int sample; /* coefficient for float to sample (signed int) conversion */ #define F2S 2147483 #ifdef DYN_CALC_FLOAT typedef LADSPA_Data dyn_t; typedef float rms_t; #else typedef sample dyn_t; typedef int64_t rms_t; #endif /* The Unique ID of the plugin: */ #define ID_MONO 2152 /* The port numbers for the plugin: */ #define ATTACK 0 #define RELEASE 1 #define OFFSGAIN 2 #define MUGAIN 3 #define RMSENV 4 #define MODGAIN 5 #define MODE 6 #define INPUT 7 #define OUTPUT 8 /* Total number of ports */ #define PORTCOUNT_MONO 9 #define TABSIZE 256 #define RMSSIZE 64 typedef struct { rms_t buffer[RMSSIZE]; unsigned int pos; rms_t sum; } rms_env; /* max. number of breakpoints on in/out dB graph */ #define MAX_POINTS 20 typedef struct { LADSPA_Data x; LADSPA_Data y; } GRAPH_POINT; typedef struct { unsigned long num_points; GRAPH_POINT points[MAX_POINTS]; } DYNAMICS_DATA; #include "tap_dynamics_presets.h" /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * attack; LADSPA_Data * release; LADSPA_Data * offsgain; LADSPA_Data * mugain; LADSPA_Data * rmsenv; LADSPA_Data * modgain; LADSPA_Data * mode; LADSPA_Data * input; LADSPA_Data * output; unsigned long sample_rate; float * as; unsigned long count; dyn_t amp; dyn_t env; float gain; float gain_out; rms_env * rms; rms_t sum; DYNAMICS_DATA graph; LADSPA_Data run_adding_gain; } Dynamics; /* RMS envelope stuff, grabbed without a second thought from Steve Harris's swh-plugins, util/rms.c */ /* Adapted, though, to be able to use fixed-point arithmetics as well. */ rms_env * rms_env_new(void) { rms_env * new = (rms_env *)calloc(1, sizeof(rms_env)); return new; } void rms_env_reset(rms_env *r) { unsigned int i; for (i = 0; i < RMSSIZE; i++) { r->buffer[i] = 0.0f; } r->pos = 0; r->sum = 0.0f; } inline static dyn_t rms_env_process(rms_env *r, const rms_t x) { r->sum -= r->buffer[r->pos]; r->sum += x; r->buffer[r->pos] = x; r->pos = (r->pos + 1) & (RMSSIZE - 1); #ifdef DYN_CALC_FLOAT return sqrt(r->sum / (float)RMSSIZE); #else return sqrt(r->sum / RMSSIZE); #endif } inline LADSPA_Data get_table_gain(int mode, LADSPA_Data level) { LADSPA_Data x1 = -80.0f; LADSPA_Data y1 = -80.0f; LADSPA_Data x2 = 0.0f; LADSPA_Data y2 = 0.0f; unsigned int i = 0; if (level <= -80.0f) return get_table_gain(mode, -79.9f); while (i < dyn_data[mode].num_points && dyn_data[mode].points[i].x < level) { x1 = dyn_data[mode].points[i].x; y1 = dyn_data[mode].points[i].y; i++; } if (i < dyn_data[mode].num_points) { x2 = dyn_data[mode].points[i].x; y2 = dyn_data[mode].points[i].y; } else return 0.0f; return y1 + ((level - x1) * (y2 - y1) / (x2 - x1)) - level; } /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Dynamics(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; float * as = NULL; unsigned int count = 0; dyn_t amp = 0.0f; dyn_t env = 0.0f; float gain = 0.0f; float gain_out = 0.0f; rms_env * rms = NULL; rms_t sum = 0; int i; if ((ptr = malloc(sizeof(Dynamics))) == NULL) return NULL; ((Dynamics *)ptr)->sample_rate = sample_rate; ((Dynamics *)ptr)->run_adding_gain = 1.0; if ((rms = rms_env_new()) == NULL) return NULL; if ((as = malloc(TABSIZE * sizeof(float))) == NULL) return NULL; as[0] = 1.0f; for (i = 1; i < TABSIZE; i++) { as[i] = expf(-1.0f / (sample_rate * (float)i / (float)TABSIZE)); } ((Dynamics *)ptr)->as = as; ((Dynamics *)ptr)->count = count; ((Dynamics *)ptr)->amp = amp; ((Dynamics *)ptr)->env = env; ((Dynamics *)ptr)->gain = gain; ((Dynamics *)ptr)->gain_out = gain_out; ((Dynamics *)ptr)->rms = rms; ((Dynamics *)ptr)->sum = sum; return ptr; } /* Connect a port to a data location. */ void connect_port_Dynamics(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Dynamics * ptr = (Dynamics *)Instance; switch (Port) { case ATTACK: ptr->attack = DataLocation; break; case RELEASE: ptr->release = DataLocation; break; case OFFSGAIN: ptr->offsgain = DataLocation; break; case MUGAIN: ptr->mugain = DataLocation; break; case RMSENV: ptr->rmsenv = DataLocation; *(ptr->rmsenv) = -60.0f; break; case MODGAIN: ptr->modgain = DataLocation; *(ptr->modgain) = 0.0f; break; case MODE: ptr->mode = DataLocation; break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_Dynamics(LADSPA_Handle Instance, unsigned long sample_count) { Dynamics * ptr = (Dynamics *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); unsigned long sample_index; dyn_t amp = ptr->amp; dyn_t env = ptr->env; float * as = ptr->as; unsigned int count = ptr->count; float gain = ptr->gain; float gain_out = ptr->gain_out; rms_env * rms = ptr->rms; rms_t sum = ptr->sum; const float ga = as[(unsigned int)(attack * 0.001f * (float)(TABSIZE-1))]; const float gr = as[(unsigned int)(release * 0.001f * (float)(TABSIZE-1))]; const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; float level = 0.0f; float adjust = 0.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { #ifdef DYN_CALC_FLOAT sum += input[sample_index] * input[sample_index]; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } #else sum += (rms_t)(input[sample_index] * F2S * input[sample_index] * F2S); if (amp) { if (amp > env) { env = (double)env * ga + (double)amp * (1.0f - ga); } else { env = (double)env * gr + (double)amp * (1.0f - gr); } } else env = 0; #endif if (count++ % 4 == 3) { #ifdef DYN_CALC_FLOAT amp = rms_env_process(rms, sum / 4); #else if (sum) amp = rms_env_process(rms, sum / 4); else amp = 0; #endif #ifdef DYN_CALC_FLOAT if (isnan(amp)) amp = 0.0f; #endif sum = 0; /* set gain_out according to the difference between the envelope volume level (env) and the corresponding output level (from graph) */ #ifdef DYN_CALC_FLOAT level = 20 * log10f(2 * env); #else level = 20 * log10f(2 * (double)env / (double)F2S); #endif adjust = get_table_gain(mode, level + offsgain); gain_out = db2lin(adjust); } gain = gain * ef_a + gain_out * ef_ai; output[sample_index] = input[sample_index] * gain * mugain; } ptr->sum = sum; ptr->amp = amp; ptr->gain = gain; ptr->gain_out = gain_out; ptr->env = env; ptr->count = count; *(ptr->rmsenv) = LIMIT(level, -60.0f, 20.0f); *(ptr->modgain) = LIMIT(adjust, -60.0f, 20.0f); } void set_run_adding_gain_Dynamics(LADSPA_Handle Instance, LADSPA_Data gain) { Dynamics * ptr = (Dynamics *)Instance; ptr->run_adding_gain = gain; } void run_adding_Dynamics(LADSPA_Handle Instance, unsigned long sample_count) { Dynamics * ptr = (Dynamics *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); unsigned long sample_index; dyn_t amp = ptr->amp; dyn_t env = ptr->env; float * as = ptr->as; unsigned int count = ptr->count; float gain = ptr->gain; float gain_out = ptr->gain_out; rms_env * rms = ptr->rms; rms_t sum = ptr->sum; const float ga = as[(unsigned int)(attack * 0.001f * (float)(TABSIZE-1))]; const float gr = as[(unsigned int)(release * 0.001f * (float)(TABSIZE-1))]; const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; float level = 0.0f; float adjust = 0.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { #ifdef DYN_CALC_FLOAT sum += input[sample_index] * input[sample_index]; if (amp > env) { env = env * ga + amp * (1.0f - ga); } else { env = env * gr + amp * (1.0f - gr); } #else sum += (rms_t)(input[sample_index] * F2S * input[sample_index] * F2S); if (amp) { if (amp > env) { env = (double)env * ga + (double)amp * (1.0f - ga); } else { env = (double)env * gr + (double)amp * (1.0f - gr); } } else env = 0; #endif if (count++ % 4 == 3) { #ifdef DYN_CALC_FLOAT amp = rms_env_process(rms, sum / 4); #else if (sum) amp = rms_env_process(rms, sum / 4); else amp = 0; #endif #ifdef DYN_CALC_FLOAT if (isnan(amp)) amp = 0.0f; #endif sum = 0; /* set gain_out according to the difference between the envelope volume level (env) and the corresponding output level (from graph) */ #ifdef DYN_CALC_FLOAT level = 20 * log10f(2 * env); #else level = 20 * log10f(2 * (double)env / (double)F2S); #endif adjust = get_table_gain(mode, level + offsgain); gain_out = db2lin(adjust); } gain = gain * ef_a + gain_out * ef_ai; output[sample_index] += ptr->run_adding_gain * input[sample_index] * gain * mugain; } ptr->sum = sum; ptr->amp = amp; ptr->gain = gain; ptr->gain_out = gain_out; ptr->env = env; ptr->count = count; *(ptr->rmsenv) = LIMIT(level, -60.0f, 20.0f); *(ptr->modgain) = LIMIT(adjust, -60.0f, 20.0f); } /* Throw away a Dynamics effect instance. */ void cleanup_Dynamics(LADSPA_Handle Instance) { Dynamics * ptr = (Dynamics *)Instance; free(ptr->rms); free(ptr->as); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_dynamics_m"); mono_descriptor->Properties = 0; mono_descriptor->Name = strdup("TAP Dynamics (M)"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[OFFSGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MUGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[RMSENV] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[MODGAIN] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[ATTACK] = strdup("Attack [ms]"); port_names[RELEASE] = strdup("Release [ms]"); port_names[OFFSGAIN] = strdup("Offset Gain [dB]"); port_names[MUGAIN] = strdup("Makeup Gain [dB]"); port_names[MODE] = strdup("Function"); port_names[RMSENV] = strdup("Envelope Volume [dB]"); port_names[MODGAIN] = strdup("Gain Adjustment [dB]"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[ATTACK].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[RELEASE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[OFFSGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[MUGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[RMSENV].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[MODGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[MODE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); port_range_hints[ATTACK].LowerBound = 4.0f; port_range_hints[ATTACK].UpperBound = 500.0f; port_range_hints[RELEASE].LowerBound = 4.0f; port_range_hints[RELEASE].UpperBound = 1000.0f; port_range_hints[OFFSGAIN].LowerBound = -20.0f; port_range_hints[OFFSGAIN].UpperBound = 20.0f; port_range_hints[MUGAIN].LowerBound = -20.0f; port_range_hints[MUGAIN].UpperBound = 20.0f; port_range_hints[RMSENV].LowerBound = -60.0f; port_range_hints[RMSENV].UpperBound = 20.0f; port_range_hints[MODGAIN].LowerBound = -60.0f; port_range_hints[MODGAIN].UpperBound = 20.0f; port_range_hints[MODE].LowerBound = 0; port_range_hints[MODE].UpperBound = NUM_MODES - 0.9f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Dynamics; mono_descriptor->connect_port = connect_port_Dynamics; mono_descriptor->activate = NULL; mono_descriptor->run = run_Dynamics; mono_descriptor->run_adding = run_adding_Dynamics; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Dynamics; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Dynamics; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_dynamics_presets.h000066400000000000000000000064721247673406200236670ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_dynamics_presets.h,v 1.1 2004/05/01 16:15:06 tszilagyi Exp $ */ /* Number of dynamics presets */ #define NUM_MODES 15 /* Dynamics presets data */ DYNAMICS_DATA dyn_data[NUM_MODES] = { { /* 2:1 compression starting at -6 dB */ 4, { {-80.0f, -80.0f}, {-6.0f, -6.0f}, {0.0f, -3.8f}, {20.0f, 3.5f}, }, }, { /* 2:1 compression starting at -9 dB */ 4, { {-80.0f, -80.0f}, {-9.0f, -9.0f}, {0.0f, -5.3f}, {20.0f, 2.9f}, }, }, { /* 2:1 compression starting at -12 dB */ 4, { {-80.0f, -80.0f}, {-12.0f, -12.0f}, {0.0f, -6.8f}, {20.0f, 1.9f}, }, }, { /* 2:1 compression starting at -18 dB */ 4, { {-80.0f, -80.0f}, {-18.0f, -18.0f}, {0.0f, -9.8f}, {20.0f, -0.7f}, }, }, { /* 2.5:1 compression starting at -12 dB */ 4, { {-80.0f, -80.0f}, {-12.0f, -12.0f}, {0.0f, -7.5f}, {20.0f, 0.0f}, }, }, { /* 3:1 compression starting at -12 dB */ 4, { {-80.0f, -80.0f}, {-12.0f, -12.0f}, {0.0f, -9.0f}, {20.0f, -4.0f}, }, }, { /* 3:1 compression starting at -15 dB */ 4, { {-80.0f, -80.0f}, {-15.0f, -15.0f}, {0.0f, -10.8f}, {20.0f, -5.2f}, }, }, { /* Compressor/Gate */ 5, { {-80.0f, -105.0f}, {-62.0f, -80.0f}, {-15.4f, -15.4f}, {0.0f, -12.0f}, {20.0f, -7.6f}, }, }, { /* Expander */ 8, { {-80.0f, -169.0f}, {-54.0f, -80.0f}, {-49.5f, -64.6f}, {-41.1f, -41.1f}, {-25.8f, -15.0f}, {-10.8f, -4.5f}, {0.0f, 0.0f}, {20.0f, 8.3f}, }, }, { /* Hard limiter at -6 dB */ 3, { {-80.0f, -80.0f}, {-6.0f, -6.0f}, {20.0f, -6.0f}, }, }, { /* Hard limiter at -12 dB */ 3, { {-80.0f, -80.0f}, {-12.0f, -12.0f}, {20.0f, -12.0f}, }, }, { /* Hard noise gate at -35 dB */ 4, { {-80.0f, -115.0f}, {-35.1f, -80.0f}, {-35.0f, -35.0f}, {20.0f, 20.0f}, }, }, { /* Soft limiter */ 5, { {-80.0f, -80.0f}, {-12.4f, -12.4f}, {-6.0f, -8.0f}, {0.0f, -6.8f}, {20.0f, -2.8f}, }, }, { /* Soft knee comp/gate (-24 dB threshold) */ 8, { {-80.0f, -113.7f}, {-46.3f, -80.0f}, {-42.0f, -56.8f}, {-33.6f, -36.3f}, {-24.0f, -24.0f}, {-11.1f, -15.4f}, {0.0f, -12.0f}, {20.0f, -5.8f}, }, }, { /* Soft noise gate below -36 dB */ 7, { {-80.0f, -104.0f}, {-56.0f, -80.0f}, {-51.8f, -67.2f}, {-44.7f, -49.3f}, {-34.0f, -34.0f}, {0.0f, 0.0f}, {20.0f, 20.0f}, }, }, /* You can add your own presets here. * Please read the docs about the format. */ }; lmms-1.1.3/plugins/LadspaEffect/tap/tap_dynamics_st.c000066400000000000000000000612701247673406200226200ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_dynamics_st.c,v 1.2 2004/06/15 14:50:55 tszilagyi Exp $ */ #include #include #include #include #include #include #include "tap_utils.h" /* ***** VERY IMPORTANT! ***** * * If you enable this, the plugin will use float arithmetics in DSP * calculations. This usually yields lower average CPU usage, but * occasionaly may result in high CPU peaks which cause trouble to you * and your JACK server. The default is to use fixpoint arithmetics * (with the following #define commented out). But (depending on the * processor on which you run the code) you may find floating point * mode usable. */ /*#define DYN_CALC_FLOAT*/ typedef signed int sample; /* coefficient for float to sample (signed int) conversion */ /* this allows for about 60 dB headroom above 0dB, if 0 dB is equivalent to 1.0f */ /* As 2^31 equals more than 180 dB, about 120 dB dynamics remains below 0 dB */ #define F2S 2147483 #ifdef DYN_CALC_FLOAT typedef LADSPA_Data dyn_t; typedef float rms_t; #else typedef sample dyn_t; typedef int64_t rms_t; #endif /* The Unique ID of the plugin: */ #define ID_STEREO 2153 /* The port numbers for the plugin: */ #define ATTACK 0 #define RELEASE 1 #define OFFSGAIN 2 #define MUGAIN 3 #define RMSENV_L 4 #define RMSENV_R 5 #define MODGAIN_L 6 #define MODGAIN_R 7 #define STEREO 8 #define MODE 9 #define INPUT_L 10 #define INPUT_R 11 #define OUTPUT_L 12 #define OUTPUT_R 13 /* Total number of ports */ #define PORTCOUNT_STEREO 14 #define TABSIZE 256 #define RMSSIZE 64 typedef struct { rms_t buffer[RMSSIZE]; unsigned int pos; rms_t sum; } rms_env; /* max. number of breakpoints on in/out dB graph */ #define MAX_POINTS 20 typedef struct { LADSPA_Data x; LADSPA_Data y; } GRAPH_POINT; typedef struct { unsigned long num_points; GRAPH_POINT points[MAX_POINTS]; } DYNAMICS_DATA; #include "tap_dynamics_presets.h" /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * attack; LADSPA_Data * release; LADSPA_Data * offsgain; LADSPA_Data * mugain; LADSPA_Data * rmsenv_L; LADSPA_Data * rmsenv_R; LADSPA_Data * modgain_L; LADSPA_Data * modgain_R; LADSPA_Data * stereo; LADSPA_Data * mode; LADSPA_Data * input_L; LADSPA_Data * output_L; LADSPA_Data * input_R; LADSPA_Data * output_R; unsigned long sample_rate; float * as; unsigned long count; dyn_t amp_L; dyn_t amp_R; dyn_t env_L; dyn_t env_R; float gain_L; float gain_R; float gain_out_L; float gain_out_R; rms_env * rms_L; rms_env * rms_R; rms_t sum_L; rms_t sum_R; DYNAMICS_DATA graph; LADSPA_Data run_adding_gain; } Dynamics; /* RMS envelope stuff, grabbed without a second thought from Steve Harris's swh-plugins, util/rms.c */ /* Adapted, though, to be able to use fixed-point arithmetics as well. */ rms_env * rms_env_new(void) { rms_env * new = (rms_env *)calloc(1, sizeof(rms_env)); return new; } void rms_env_reset(rms_env *r) { unsigned int i; for (i = 0; i < RMSSIZE; i++) { r->buffer[i] = 0.0f; } r->pos = 0; r->sum = 0.0f; } inline static dyn_t rms_env_process(rms_env *r, const rms_t x) { r->sum -= r->buffer[r->pos]; r->sum += x; r->buffer[r->pos] = x; r->pos = (r->pos + 1) & (RMSSIZE - 1); #ifdef DYN_CALC_FLOAT return sqrt(r->sum / (float)RMSSIZE); #else return sqrt(r->sum / RMSSIZE); #endif } inline LADSPA_Data get_table_gain(int mode, LADSPA_Data level) { LADSPA_Data x1 = -80.0f; LADSPA_Data y1 = -80.0f; LADSPA_Data x2 = 0.0f; LADSPA_Data y2 = 0.0f; unsigned int i = 0; if (level <= -80.0f) return get_table_gain(mode, -79.9f); while (i < dyn_data[mode].num_points && dyn_data[mode].points[i].x < level) { x1 = dyn_data[mode].points[i].x; y1 = dyn_data[mode].points[i].y; i++; } if (i < dyn_data[mode].num_points) { x2 = dyn_data[mode].points[i].x; y2 = dyn_data[mode].points[i].y; } else return 0.0f; return y1 + ((level - x1) * (y2 - y1) / (x2 - x1)) - level; } /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Dynamics(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; float * as = NULL; unsigned int count = 0; dyn_t amp_L = 0.0f; dyn_t amp_R = 0.0f; dyn_t env_L = 0.0f; dyn_t env_R = 0.0f; float gain_L = 0.0f; float gain_R = 0.0f; float gain_out_L = 0.0f; float gain_out_R = 0.0f; rms_env * rms_L = NULL; rms_env * rms_R = NULL; rms_t sum_L = 0.0f; rms_t sum_R = 0.0f; int i; if ((ptr = malloc(sizeof(Dynamics))) == NULL) return NULL; ((Dynamics *)ptr)->sample_rate = sample_rate; ((Dynamics *)ptr)->run_adding_gain = 1.0; if ((rms_L = rms_env_new()) == NULL) return NULL; if ((rms_R = rms_env_new()) == NULL) return NULL; if ((as = malloc(TABSIZE * sizeof(float))) == NULL) return NULL; as[0] = 1.0f; for (i = 1; i < TABSIZE; i++) { as[i] = expf(-1.0f / (sample_rate * (float)i / (float)TABSIZE)); } ((Dynamics *)ptr)->as = as; ((Dynamics *)ptr)->count = count; ((Dynamics *)ptr)->amp_L = amp_L; ((Dynamics *)ptr)->amp_R = amp_R; ((Dynamics *)ptr)->env_L = env_L; ((Dynamics *)ptr)->env_R = env_R; ((Dynamics *)ptr)->gain_L = gain_L; ((Dynamics *)ptr)->gain_R = gain_R; ((Dynamics *)ptr)->gain_out_L = gain_out_L; ((Dynamics *)ptr)->gain_out_R = gain_out_R; ((Dynamics *)ptr)->rms_L = rms_L; ((Dynamics *)ptr)->rms_R = rms_R; ((Dynamics *)ptr)->sum_L = sum_L; ((Dynamics *)ptr)->sum_R = sum_R; return ptr; } /* Connect a port to a data location. */ void connect_port_Dynamics(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Dynamics * ptr = (Dynamics *)Instance; switch (Port) { case ATTACK: ptr->attack = DataLocation; break; case RELEASE: ptr->release = DataLocation; break; case OFFSGAIN: ptr->offsgain = DataLocation; break; case MUGAIN: ptr->mugain = DataLocation; break; case RMSENV_L: ptr->rmsenv_L = DataLocation; *(ptr->rmsenv_L) = -60.0f; break; case RMSENV_R: ptr->rmsenv_R = DataLocation; *(ptr->rmsenv_R) = -60.0f; break; case MODGAIN_L: ptr->modgain_L = DataLocation; *(ptr->modgain_L) = 0.0f; break; case MODGAIN_R: ptr->modgain_R = DataLocation; *(ptr->modgain_R) = 0.0f; break; case STEREO: ptr->stereo = DataLocation; break; case MODE: ptr->mode = DataLocation; break; case INPUT_L: ptr->input_L = DataLocation; break; case OUTPUT_L: ptr->output_L = DataLocation; break; case INPUT_R: ptr->input_R = DataLocation; break; case OUTPUT_R: ptr->output_R = DataLocation; break; } } void run_Dynamics(LADSPA_Handle Instance, unsigned long sample_count) { Dynamics * ptr = (Dynamics *)Instance; LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_R = ptr->output_R; const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); const int stereo = LIMIT(*(ptr->stereo), 0, 2); const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); unsigned long sample_index; dyn_t amp_L = ptr->amp_L; dyn_t amp_R = ptr->amp_R; dyn_t env_L = ptr->env_L; dyn_t env_R = ptr->env_R; float * as = ptr->as; unsigned int count = ptr->count; float gain_L = ptr->gain_L; float gain_R = ptr->gain_R; float gain_out_L = ptr->gain_out_L; float gain_out_R = ptr->gain_out_R; rms_env * rms_L = ptr->rms_L; rms_env * rms_R = ptr->rms_R; rms_t sum_L = ptr->sum_L; rms_t sum_R = ptr->sum_R; const float ga = as[(unsigned int)(attack * 0.001f * (LADSPA_Data)(TABSIZE-1))]; const float gr = as[(unsigned int)(release * 0.001f * (LADSPA_Data)(TABSIZE-1))]; const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; float level_L = 0.0f; float level_R = 0.0f; float adjust_L = 0.0f; float adjust_R = 0.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { #ifdef DYN_CALC_FLOAT sum_L += input_L[sample_index] * input_L[sample_index]; sum_R += input_R[sample_index] * input_R[sample_index]; if (amp_L > env_L) { env_L = env_L * ga + amp_L * (1.0f - ga); } else { env_L = env_L * gr + amp_L * (1.0f - gr); } if (amp_R > env_R) { env_R = env_R * ga + amp_R * (1.0f - ga); } else { env_R = env_R * gr + amp_R * (1.0f - gr); } #else sum_L += (rms_t)(input_L[sample_index] * F2S) * (rms_t)(input_L[sample_index] * F2S); sum_R += (rms_t)(input_R[sample_index] * F2S) * (rms_t)(input_R[sample_index] * F2S); if (amp_L) { if (amp_L > env_L) { env_L = (double)env_L * ga + (double)amp_L * (1.0f - ga); } else { env_L = (double)env_L * gr + (double)amp_L * (1.0f - gr); } } else env_L = 0; if (amp_R) { if (amp_R > env_R) { env_R = (double)env_R * ga + (double)amp_R * (1.0f - ga); } else { env_R = (double)env_R * gr + (double)amp_R * (1.0f - gr); } } else env_R = 0; #endif if (count++ % 4 == 3) { #ifdef DYN_CALC_FLOAT amp_L = rms_env_process(rms_L, sum_L * 0.25f); amp_R = rms_env_process(rms_R, sum_R * 0.25f); #else if (sum_L) amp_L = rms_env_process(rms_L, sum_L * 0.25f); else amp_L = 0; if (sum_R) amp_R = rms_env_process(rms_R, sum_R * 0.25f); else amp_R = 0; #endif #ifdef DYN_CALC_FLOAT if (isnan(amp_L)) amp_L = 0.0f; if (isnan(amp_R)) amp_R = 0.0f; #endif sum_L = sum_R = 0; /* set gain_out according to the difference between the envelope volume level (env) and the corresponding output level (from graph) */ #ifdef DYN_CALC_FLOAT level_L = 20 * log10f(2 * env_L); level_R = 20 * log10f(2 * env_R); #else level_L = 20 * log10f(2 * (double)env_L / (double)F2S); level_R = 20 * log10f(2 * (double)env_R / (double)F2S); #endif adjust_L = get_table_gain(mode, level_L + offsgain); adjust_R = get_table_gain(mode, level_R + offsgain); /* set gains according to stereo mode */ switch (stereo) { case 0: gain_out_L = db2lin(adjust_L); gain_out_R = db2lin(adjust_R); break; case 1: adjust_L = adjust_R = (adjust_L + adjust_R) / 2.0f; gain_out_L = gain_out_R = db2lin(adjust_L); break; case 2: adjust_L = adjust_R = (adjust_L > adjust_R) ? adjust_L : adjust_R; gain_out_L = gain_out_R = db2lin(adjust_L); break; } } gain_L = gain_L * ef_a + gain_out_L * ef_ai; gain_R = gain_R * ef_a + gain_out_R * ef_ai; output_L[sample_index] = input_L[sample_index] * gain_L * mugain; output_R[sample_index] = input_R[sample_index] * gain_R * mugain; } ptr->sum_L = sum_L; ptr->sum_R = sum_R; ptr->amp_L = amp_L; ptr->amp_R = amp_R; ptr->gain_L = gain_L; ptr->gain_R = gain_R; ptr->gain_out_L = gain_out_L; ptr->gain_out_R = gain_out_R; ptr->env_L = env_L; ptr->env_R = env_R; ptr->count = count; *(ptr->rmsenv_L) = LIMIT(level_L, -60.0f, 20.0f); *(ptr->rmsenv_R) = LIMIT(level_R, -60.0f, 20.0f); *(ptr->modgain_L) = LIMIT(adjust_L, -60.0f, 20.0f); *(ptr->modgain_R) = LIMIT(adjust_R, -60.0f, 20.0f); } void set_run_adding_gain_Dynamics(LADSPA_Handle Instance, LADSPA_Data gain) { Dynamics * ptr = (Dynamics *)Instance; ptr->run_adding_gain = gain; } void run_adding_Dynamics(LADSPA_Handle Instance, unsigned long sample_count) { Dynamics * ptr = (Dynamics *)Instance; LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_R = ptr->output_R; const float attack = LIMIT(*(ptr->attack), 4.0f, 500.0f); const float release = LIMIT(*(ptr->release), 4.0f, 1000.0f); const float offsgain = LIMIT(*(ptr->offsgain), -20.0f, 20.0f); const float mugain = db2lin(LIMIT(*(ptr->mugain), -20.0f, 20.0f)); const int stereo = LIMIT(*(ptr->stereo), 0, 2); const int mode = LIMIT(*(ptr->mode), 0, NUM_MODES-1); unsigned long sample_index; dyn_t amp_L = ptr->amp_L; dyn_t amp_R = ptr->amp_R; dyn_t env_L = ptr->env_L; dyn_t env_R = ptr->env_R; float * as = ptr->as; unsigned int count = ptr->count; float gain_L = ptr->gain_L; float gain_R = ptr->gain_R; float gain_out_L = ptr->gain_out_L; float gain_out_R = ptr->gain_out_R; rms_env * rms_L = ptr->rms_L; rms_env * rms_R = ptr->rms_R; rms_t sum_L = ptr->sum_L; rms_t sum_R = ptr->sum_R; const float ga = as[(unsigned int)(attack * 0.001f * (LADSPA_Data)(TABSIZE-1))]; const float gr = as[(unsigned int)(release * 0.001f * (LADSPA_Data)(TABSIZE-1))]; const float ef_a = ga * 0.25f; const float ef_ai = 1.0f - ef_a; float level_L = 0.0f; float level_R = 0.0f; float adjust_L = 0.0f; float adjust_R = 0.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { #ifdef DYN_CALC_FLOAT sum_L += input_L[sample_index] * input_L[sample_index]; sum_R += input_R[sample_index] * input_R[sample_index]; if (amp_L > env_L) { env_L = env_L * ga + amp_L * (1.0f - ga); } else { env_L = env_L * gr + amp_L * (1.0f - gr); } if (amp_R > env_R) { env_R = env_R * ga + amp_R * (1.0f - ga); } else { env_R = env_R * gr + amp_R * (1.0f - gr); } #else sum_L += (rms_t)(input_L[sample_index] * F2S) * (rms_t)(input_L[sample_index] * F2S); sum_R += (rms_t)(input_R[sample_index] * F2S) * (rms_t)(input_R[sample_index] * F2S); if (amp_L) { if (amp_L > env_L) { env_L = (double)env_L * ga + (double)amp_L * (1.0f - ga); } else { env_L = (double)env_L * gr + (double)amp_L * (1.0f - gr); } } else env_L = 0; if (amp_R) { if (amp_R > env_R) { env_R = (double)env_R * ga + (double)amp_R * (1.0f - ga); } else { env_R = (double)env_R * gr + (double)amp_R * (1.0f - gr); } } else env_R = 0; #endif if (count++ % 4 == 3) { #ifdef DYN_CALC_FLOAT amp_L = rms_env_process(rms_L, sum_L * 0.25f); amp_R = rms_env_process(rms_R, sum_R * 0.25f); #else if (sum_L) amp_L = rms_env_process(rms_L, sum_L * 0.25f); else amp_L = 0; if (sum_R) amp_R = rms_env_process(rms_R, sum_R * 0.25f); else amp_R = 0; #endif #ifdef DYN_CALC_FLOAT if (isnan(amp_L)) amp_L = 0.0f; if (isnan(amp_R)) amp_R = 0.0f; #endif sum_L = sum_R = 0; /* set gain_out according to the difference between the envelope volume level (env) and the corresponding output level (from graph) */ #ifdef DYN_CALC_FLOAT level_L = 20 * log10f(2 * env_L); level_R = 20 * log10f(2 * env_R); #else level_L = 20 * log10f(2 * (double)env_L / (double)F2S); level_R = 20 * log10f(2 * (double)env_R / (double)F2S); #endif adjust_L = get_table_gain(mode, level_L + offsgain); adjust_R = get_table_gain(mode, level_R + offsgain); /* set gains according to stereo mode */ switch (stereo) { case 0: gain_out_L = db2lin(adjust_L); gain_out_R = db2lin(adjust_R); break; case 1: adjust_L = adjust_R = (adjust_L + adjust_R) / 2.0f; gain_out_L = gain_out_R = db2lin(adjust_L); break; case 2: adjust_L = adjust_R = (adjust_L > adjust_R) ? adjust_L : adjust_R; gain_out_L = gain_out_R = db2lin(adjust_L); break; } } gain_L = gain_L * ef_a + gain_out_L * ef_ai; gain_R = gain_R * ef_a + gain_out_R * ef_ai; output_L[sample_index] += ptr->run_adding_gain * input_L[sample_index] * gain_L * mugain; output_R[sample_index] += ptr->run_adding_gain * input_R[sample_index] * gain_R * mugain; } ptr->sum_L = sum_L; ptr->sum_R = sum_R; ptr->amp_L = amp_L; ptr->amp_R = amp_R; ptr->gain_L = gain_L; ptr->gain_R = gain_R; ptr->gain_out_L = gain_out_L; ptr->gain_out_R = gain_out_R; ptr->env_L = env_L; ptr->env_R = env_R; ptr->count = count; *(ptr->rmsenv_L) = LIMIT(level_L, -60.0f, 20.0f); *(ptr->rmsenv_R) = LIMIT(level_R, -60.0f, 20.0f); *(ptr->modgain_L) = LIMIT(adjust_L, -60.0f, 20.0f); *(ptr->modgain_R) = LIMIT(adjust_R, -60.0f, 20.0f); } /* Throw away a Dynamics effect instance. */ void cleanup_Dynamics(LADSPA_Handle Instance) { Dynamics * ptr = (Dynamics *)Instance; free(ptr->rms_L); free(ptr->rms_R); free(ptr->as); free(Instance); } LADSPA_Descriptor * stereo_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((stereo_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); stereo_descriptor->UniqueID = ID_STEREO; stereo_descriptor->Label = strdup("tap_dynamics_st"); stereo_descriptor->Properties = 0; stereo_descriptor->Name = strdup("TAP Dynamics (St)"); stereo_descriptor->Maker = strdup("Tom Szilagyi"); stereo_descriptor->Copyright = strdup("GPL"); stereo_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[ATTACK] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[RELEASE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[OFFSGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MUGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[STEREO] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[RMSENV_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[RMSENV_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[MODGAIN_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[MODGAIN_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); stereo_descriptor->PortNames = (const char **)port_names; port_names[ATTACK] = strdup("Attack [ms]"); port_names[RELEASE] = strdup("Release [ms]"); port_names[OFFSGAIN] = strdup("Offset Gain [dB]"); port_names[MUGAIN] = strdup("Makeup Gain [dB]"); port_names[STEREO] = strdup("Stereo Mode"); port_names[MODE] = strdup("Function"); port_names[RMSENV_L] = strdup("Envelope Volume (L) [dB]"); port_names[RMSENV_R] = strdup("Envelope Volume (R) [dB]"); port_names[MODGAIN_L] = strdup("Gain Adjustment (L) [dB]"); port_names[MODGAIN_R] = strdup("Gain Adjustment (R) [dB]"); port_names[INPUT_L] = strdup("Input Left"); port_names[INPUT_R] = strdup("Input Right"); port_names[OUTPUT_L] = strdup("Output Left"); port_names[OUTPUT_R] = strdup("Output Right"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[ATTACK].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[RELEASE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[OFFSGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[MUGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[RMSENV_L].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[RMSENV_R].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[MODGAIN_L].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[MODGAIN_R].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[STEREO].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); port_range_hints[MODE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); port_range_hints[ATTACK].LowerBound = 4.0f; port_range_hints[ATTACK].UpperBound = 500.0f; port_range_hints[RELEASE].LowerBound = 4.0f; port_range_hints[RELEASE].UpperBound = 1000.0f; port_range_hints[OFFSGAIN].LowerBound = -20.0f; port_range_hints[OFFSGAIN].UpperBound = 20.0f; port_range_hints[MUGAIN].LowerBound = -20.0f; port_range_hints[MUGAIN].UpperBound = 20.0f; port_range_hints[RMSENV_L].LowerBound = -60.0f; port_range_hints[RMSENV_L].UpperBound = 20.0f; port_range_hints[RMSENV_R].LowerBound = -60.0f; port_range_hints[RMSENV_R].UpperBound = 20.0f; port_range_hints[MODGAIN_L].LowerBound = -60.0f; port_range_hints[MODGAIN_L].UpperBound = 20.0f; port_range_hints[MODGAIN_R].LowerBound = -60.0f; port_range_hints[MODGAIN_R].UpperBound = 20.0f; port_range_hints[STEREO].LowerBound = 0; port_range_hints[STEREO].UpperBound = 2.1f; port_range_hints[MODE].LowerBound = 0; port_range_hints[MODE].UpperBound = NUM_MODES - 0.9f; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; stereo_descriptor->instantiate = instantiate_Dynamics; stereo_descriptor->connect_port = connect_port_Dynamics; stereo_descriptor->activate = NULL; stereo_descriptor->run = run_Dynamics; stereo_descriptor->run_adding = run_adding_Dynamics; stereo_descriptor->set_run_adding_gain = set_run_adding_gain_Dynamics; stereo_descriptor->deactivate = NULL; stereo_descriptor->cleanup = cleanup_Dynamics; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return stereo_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_echo.c000066400000000000000000000405661247673406200212260ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_echo.c,v 1.7 2004/12/06 09:32:41 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_STEREO 2143 /* The port numbers for the plugin: */ #define DELAYTIME_L 0 #define FEEDBACK_L 1 #define DELAYTIME_R 2 #define FEEDBACK_R 3 #define STRENGTH_L 4 #define STRENGTH_R 5 #define DRYLEVEL 6 #define MODE 7 #define HAAS 8 #define REV_OUTCH 9 #define INPUT_L 10 #define OUTPUT_L 11 #define INPUT_R 12 #define OUTPUT_R 13 /* Total number of ports */ #define PORTCOUNT_STEREO 14 /* Maximum delay (ms) */ #define MAX_DELAY 2000 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * delaytime_L; LADSPA_Data * delaytime_R; LADSPA_Data * feedback_L; LADSPA_Data * feedback_R; LADSPA_Data * strength_L; LADSPA_Data * strength_R; LADSPA_Data * drylevel; LADSPA_Data * mode; LADSPA_Data * haas; LADSPA_Data * rev_outch; LADSPA_Data * input_L; LADSPA_Data * output_L; LADSPA_Data * input_R; LADSPA_Data * output_R; unsigned long sample_rate; LADSPA_Data mpx_out_L; LADSPA_Data mpx_out_R; LADSPA_Data * ringbuffer_L; LADSPA_Data * ringbuffer_R; unsigned long * buffer_pos_L; unsigned long * buffer_pos_R; LADSPA_Data run_adding_gain; } Echo; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Echo(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Echo))) != NULL) { ((Echo *)ptr)->sample_rate = SampleRate; ((Echo *)ptr)->run_adding_gain = 1.0f; /* allocate memory for ringbuffers and related dynamic vars */ if ((((Echo *)ptr)->ringbuffer_L = calloc(MAX_DELAY * ((Echo *)ptr)->sample_rate / 1000, sizeof(LADSPA_Data))) == NULL) exit(1); if ((((Echo *)ptr)->ringbuffer_R = calloc(MAX_DELAY * ((Echo *)ptr)->sample_rate / 1000, sizeof(LADSPA_Data))) == NULL) exit(1); if ((((Echo *)ptr)->buffer_pos_L = calloc(1, sizeof(unsigned long))) == NULL) exit(1); if ((((Echo *)ptr)->buffer_pos_R = calloc(1, sizeof(unsigned long))) == NULL) exit(1); *(((Echo *)ptr)->buffer_pos_L) = 0; *(((Echo *)ptr)->buffer_pos_R) = 0; return ptr; } return NULL; } /* activate a plugin instance */ void activate_Echo(LADSPA_Handle Instance) { Echo * ptr = (Echo *)Instance; unsigned int i; ptr->mpx_out_L = 0; ptr->mpx_out_R = 0; *(ptr->buffer_pos_L) = 0; *(ptr->buffer_pos_R) = 0; for (i = 0; i < MAX_DELAY * ptr->sample_rate / 1000; i++) { ptr->ringbuffer_L[i] = 0.0f; ptr->ringbuffer_R[i] = 0.0f; } } /* Connect a port to a data location. */ void connect_port_Echo(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Echo * ptr; ptr = (Echo *)Instance; switch (Port) { case DELAYTIME_L: ptr->delaytime_L = DataLocation; break; case DELAYTIME_R: ptr->delaytime_R = DataLocation; break; case FEEDBACK_L: ptr->feedback_L = DataLocation; break; case FEEDBACK_R: ptr->feedback_R = DataLocation; break; case STRENGTH_L: ptr->strength_L = DataLocation; break; case STRENGTH_R: ptr->strength_R = DataLocation; break; case MODE: ptr->mode = DataLocation; break; case HAAS: ptr->haas = DataLocation; break; case REV_OUTCH: ptr->rev_outch = DataLocation; break; case DRYLEVEL: ptr->drylevel = DataLocation; break; case INPUT_L: ptr->input_L = DataLocation; break; case OUTPUT_L: ptr->output_L = DataLocation; break; case INPUT_R: ptr->input_R = DataLocation; break; case OUTPUT_R: ptr->output_R = DataLocation; break; } } #define EPS 0.00000001f static inline float M(float x) { if ((x > EPS) || (x < -EPS)) return x; else return 0.0f; } void run_Echo(LADSPA_Handle Instance, unsigned long SampleCount) { Echo * ptr; unsigned long sample_index; LADSPA_Data delaytime_L; LADSPA_Data delaytime_R; LADSPA_Data feedback_L; LADSPA_Data feedback_R; LADSPA_Data strength_L; LADSPA_Data strength_R; LADSPA_Data drylevel; LADSPA_Data mode; LADSPA_Data haas; LADSPA_Data rev_outch; LADSPA_Data * input_L; LADSPA_Data * output_L; LADSPA_Data * input_R; LADSPA_Data * output_R; unsigned long sample_rate; unsigned long buflen_L; unsigned long buflen_R; LADSPA_Data out_L = 0; LADSPA_Data out_R = 0; LADSPA_Data in_L = 0; LADSPA_Data in_R = 0; ptr = (Echo *)Instance; delaytime_L = LIMIT(*(ptr->delaytime_L),0.0f,2000.0f); delaytime_R = LIMIT(*(ptr->delaytime_R),0.0f,2000.0f); feedback_L = LIMIT(*(ptr->feedback_L) / 100.0, 0.0f, 100.0f); feedback_R = LIMIT(*(ptr->feedback_R) / 100.0, 0.0f, 100.0f); strength_L = db2lin(LIMIT(*(ptr->strength_L),-70.0f,10.0f)); strength_R = db2lin(LIMIT(*(ptr->strength_R),-70.0f,10.0f)); drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); mode = LIMIT(*(ptr->mode),-2.0f,2.0f); haas = LIMIT(*(ptr->haas),-2.0f,2.0f); rev_outch = LIMIT(*(ptr->rev_outch),-2.0f,2.0f); input_L = ptr->input_L; output_L = ptr->output_L; input_R = ptr->input_R; output_R = ptr->output_R; sample_rate = ptr->sample_rate; buflen_L = delaytime_L * sample_rate / 1000; buflen_R = delaytime_R * sample_rate / 1000; for (sample_index = 0; sample_index < SampleCount; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); out_L = in_L * drylevel + ptr->mpx_out_L * strength_L; out_R = in_R * drylevel + ptr->mpx_out_R * strength_R; if (haas > 0.0f) in_R = 0.0f; if (mode <= 0.0f) { ptr->mpx_out_L = M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); ptr->mpx_out_R = M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); } else { ptr->mpx_out_R = M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); ptr->mpx_out_L = M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); } if (rev_outch <= 0.0f) { *(output_L++) = out_L; *(output_R++) = out_R; } else { *(output_L++) = out_R; *(output_R++) = out_L; } } } void set_run_adding_gain(LADSPA_Handle Instance, LADSPA_Data gain){ Echo * ptr; ptr = (Echo *)Instance; ptr->run_adding_gain = gain; } void run_adding_gain_Echo(LADSPA_Handle Instance, unsigned long SampleCount) { Echo * ptr; unsigned long sample_index; LADSPA_Data delaytime_L; LADSPA_Data delaytime_R; LADSPA_Data feedback_L; LADSPA_Data feedback_R; LADSPA_Data strength_L; LADSPA_Data strength_R; LADSPA_Data drylevel; LADSPA_Data mode; LADSPA_Data haas; LADSPA_Data rev_outch; LADSPA_Data * input_L; LADSPA_Data * output_L; LADSPA_Data * input_R; LADSPA_Data * output_R; unsigned long sample_rate; unsigned long buflen_L; unsigned long buflen_R; LADSPA_Data out_L = 0; LADSPA_Data out_R = 0; LADSPA_Data in_L = 0; LADSPA_Data in_R = 0; ptr = (Echo *)Instance; delaytime_L = LIMIT(*(ptr->delaytime_L),0.0f,2000.0f); delaytime_R = LIMIT(*(ptr->delaytime_R),0.0f,2000.0f); feedback_L = LIMIT(*(ptr->feedback_L) / 100.0, 0.0f, 100.0f); feedback_R = LIMIT(*(ptr->feedback_R) / 100.0, 0.0f, 100.0f); strength_L = db2lin(LIMIT(*(ptr->strength_L),-70.0f,10.0f)); strength_R = db2lin(LIMIT(*(ptr->strength_R),-70.0f,10.0f)); drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); mode = LIMIT(*(ptr->mode),-2.0f,2.0f); haas = LIMIT(*(ptr->haas),-2.0f,2.0f); rev_outch = LIMIT(*(ptr->rev_outch),-2.0f,2.0f); input_L = ptr->input_L; output_L = ptr->output_L; input_R = ptr->input_R; output_R = ptr->output_R; sample_rate = ptr->sample_rate; buflen_L = delaytime_L * sample_rate / 1000; buflen_R = delaytime_R * sample_rate / 1000; for (sample_index = 0; sample_index < SampleCount; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); out_L = in_L * drylevel + ptr->mpx_out_L * strength_L; out_R = in_R * drylevel + ptr->mpx_out_R * strength_R; if (haas > 0.0f) in_R = 0.0f; if (mode <= 0.0f) { ptr->mpx_out_L = M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); ptr->mpx_out_R = M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); } else { ptr->mpx_out_R = M(push_buffer(in_L + ptr->mpx_out_L * feedback_L, ptr->ringbuffer_L, buflen_L, ptr->buffer_pos_L)); ptr->mpx_out_L = M(push_buffer(in_R + ptr->mpx_out_R * feedback_R, ptr->ringbuffer_R, buflen_R, ptr->buffer_pos_R)); } if (rev_outch <= 0.0f) { *(output_L++) += out_L * ptr->run_adding_gain; *(output_R++) += out_R * ptr->run_adding_gain; } else { *(output_L++) += out_R * ptr->run_adding_gain; *(output_R++) += out_L * ptr->run_adding_gain; } } } /* Throw away an Echo effect instance. */ void cleanup_Echo(LADSPA_Handle Instance) { Echo * ptr = (Echo *)Instance; free(ptr->ringbuffer_L); free(ptr->ringbuffer_R); free(ptr->buffer_pos_L); free(ptr->buffer_pos_R); free(Instance); } LADSPA_Descriptor * stereo_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((stereo_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); /* init the stereo Echo */ stereo_descriptor->UniqueID = ID_STEREO; stereo_descriptor->Label = strdup("tap_stereo_echo"); stereo_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; stereo_descriptor->Name = strdup("TAP Stereo Echo"); stereo_descriptor->Maker = strdup("Tom Szilagyi"); stereo_descriptor->Copyright = strdup("GPL"); stereo_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[DELAYTIME_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DELAYTIME_R] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[FEEDBACK_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[FEEDBACK_R] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[STRENGTH_L] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[STRENGTH_R] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[HAAS] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[REV_OUTCH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); stereo_descriptor->PortNames = (const char **)port_names; port_names[DELAYTIME_L] = strdup("L Delay [ms]"); port_names[DELAYTIME_R] = strdup("R/Haas Delay [ms]"); port_names[FEEDBACK_L] = strdup("L Feedback [%]"); port_names[FEEDBACK_R] = strdup("R/Haas Feedback [%]"); port_names[STRENGTH_L] = strdup("L Echo Level [dB]"); port_names[STRENGTH_R] = strdup("R Echo Level [dB]"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[MODE] = strdup("Cross Mode"); port_names[HAAS] = strdup("Haas Effect"); port_names[REV_OUTCH] = strdup("Swap Outputs"); port_names[INPUT_L] = strdup("Input Left"); port_names[OUTPUT_L] = strdup("Output Left"); port_names[INPUT_R] = strdup("Input Right"); port_names[OUTPUT_R] = strdup("Output Right"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[DELAYTIME_L].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_100); port_range_hints[DELAYTIME_L].LowerBound = 0; port_range_hints[DELAYTIME_L].UpperBound = MAX_DELAY; port_range_hints[DELAYTIME_R].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_100); port_range_hints[DELAYTIME_R].LowerBound = 0; port_range_hints[DELAYTIME_R].UpperBound = MAX_DELAY; port_range_hints[FEEDBACK_L].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[FEEDBACK_L].LowerBound = 0; port_range_hints[FEEDBACK_L].UpperBound = 100; port_range_hints[FEEDBACK_R].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[FEEDBACK_R].LowerBound = 0; port_range_hints[FEEDBACK_R].UpperBound = 100; port_range_hints[STRENGTH_L].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[STRENGTH_L].LowerBound = -70; port_range_hints[STRENGTH_L].UpperBound = 10; port_range_hints[STRENGTH_R].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[STRENGTH_R].LowerBound = -70; port_range_hints[STRENGTH_R].UpperBound = 10; port_range_hints[MODE].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_0); port_range_hints[HAAS].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_0); port_range_hints[REV_OUTCH].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_0); port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[DRYLEVEL].LowerBound = -70; port_range_hints[DRYLEVEL].UpperBound = 10; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; stereo_descriptor->instantiate = instantiate_Echo; stereo_descriptor->connect_port = connect_port_Echo; stereo_descriptor->activate = activate_Echo; stereo_descriptor->run = run_Echo; stereo_descriptor->run_adding = run_adding_gain_Echo; stereo_descriptor->set_run_adding_gain = set_run_adding_gain; stereo_descriptor->deactivate = NULL; stereo_descriptor->cleanup = cleanup_Echo; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return stereo_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_eq.c000066400000000000000000000502371247673406200207110ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_eq.c,v 1.7 2006/08/09 12:03:24 tszilagyi Exp $ */ /* Please note that this plugin was inspired by and its code based upon Steve Harris's "DJ EQ" plugin (no. 1901). While I give him credit for his excellent work, I reserve myself to be blamed for any bugs or malfunction. */ #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin */ #define ID_MONO 2141 /* Bandwidth of EQ filters in octaves */ #define BWIDTH 1.0f /* Port numbers */ #define EQ_CH0G 0 #define EQ_CH1G 1 #define EQ_CH2G 2 #define EQ_CH3G 3 #define EQ_CH4G 4 #define EQ_CH5G 5 #define EQ_CH6G 6 #define EQ_CH7G 7 #define EQ_CH0F 8 #define EQ_CH1F 9 #define EQ_CH2F 10 #define EQ_CH3F 11 #define EQ_CH4F 12 #define EQ_CH5F 13 #define EQ_CH6F 14 #define EQ_CH7F 15 #define EQ_INPUT 16 #define EQ_OUTPUT 17 /* Total number of ports */ #define PORTCOUNT_MONO 18 static LADSPA_Descriptor *eqDescriptor = NULL; typedef struct { LADSPA_Data *ch0f; LADSPA_Data *ch0g; LADSPA_Data *ch1f; LADSPA_Data *ch1g; LADSPA_Data *ch2f; LADSPA_Data *ch2g; LADSPA_Data *ch3f; LADSPA_Data *ch3g; LADSPA_Data *ch4f; LADSPA_Data *ch4g; LADSPA_Data *ch5f; LADSPA_Data *ch5g; LADSPA_Data *ch6f; LADSPA_Data *ch6g; LADSPA_Data *ch7f; LADSPA_Data *ch7g; LADSPA_Data *input; LADSPA_Data *output; biquad * filters; float fs; LADSPA_Data old_ch0f; LADSPA_Data old_ch0g; LADSPA_Data old_ch1f; LADSPA_Data old_ch1g; LADSPA_Data old_ch2f; LADSPA_Data old_ch2g; LADSPA_Data old_ch3f; LADSPA_Data old_ch3g; LADSPA_Data old_ch4f; LADSPA_Data old_ch4g; LADSPA_Data old_ch5f; LADSPA_Data old_ch5g; LADSPA_Data old_ch6f; LADSPA_Data old_ch6g; LADSPA_Data old_ch7f; LADSPA_Data old_ch7g; LADSPA_Data run_adding_gain; } eq; const LADSPA_Descriptor * ladspa_descriptor(unsigned long index) { switch (index) { case 0: return eqDescriptor; default: return NULL; } } static void activate_eq(LADSPA_Handle instance) { eq *ptr = (eq *)instance; biquad *filters = ptr->filters; biquad_init(&filters[0]); biquad_init(&filters[1]); biquad_init(&filters[2]); biquad_init(&filters[3]); biquad_init(&filters[4]); biquad_init(&filters[5]); biquad_init(&filters[6]); biquad_init(&filters[7]); } static void cleanup_eq(LADSPA_Handle instance) { eq *plugin_data = (eq *)instance; free(plugin_data->filters); free(instance); } static void connectPort_eq(LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { eq *plugin; plugin = (eq *)instance; switch (port) { case EQ_CH0F: plugin->ch0f = data; break; case EQ_CH0G: plugin->ch0g = data; break; case EQ_CH1F: plugin->ch1f = data; break; case EQ_CH1G: plugin->ch1g = data; break; case EQ_CH2F: plugin->ch2f = data; break; case EQ_CH2G: plugin->ch2g = data; break; case EQ_CH3F: plugin->ch3f = data; break; case EQ_CH3G: plugin->ch3g = data; break; case EQ_CH4F: plugin->ch4f = data; break; case EQ_CH4G: plugin->ch4g = data; break; case EQ_CH5F: plugin->ch5f = data; break; case EQ_CH5G: plugin->ch5g = data; break; case EQ_CH6F: plugin->ch6f = data; break; case EQ_CH6G: plugin->ch6g = data; break; case EQ_CH7F: plugin->ch7f = data; break; case EQ_CH7G: plugin->ch7g = data; break; case EQ_INPUT: plugin->input = data; break; case EQ_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiate_eq(const LADSPA_Descriptor *descriptor, unsigned long s_rate) { eq *ptr = (eq *)malloc(sizeof(eq)); biquad *filters = NULL; float fs; fs = s_rate; memset(ptr, 0, sizeof(eq)); filters = calloc(8, sizeof(biquad)); ptr->filters = filters; ptr->fs = fs; ptr->run_adding_gain = 1.0f; ptr->old_ch0f = 100.0f; ptr->old_ch0g = 0; ptr->old_ch1f = 200.0f; ptr->old_ch1g = 0; ptr->old_ch2f = 400.0f; ptr->old_ch2g = 0; ptr->old_ch3f = 1000.0f; ptr->old_ch3g = 0; ptr->old_ch4f = 3000.0f; ptr->old_ch4g = 0; ptr->old_ch5f = 6000.0f; ptr->old_ch5g = 0; ptr->old_ch6f = 12000.0f; ptr->old_ch6g = 0; ptr->old_ch7f = 15000.0f; ptr->old_ch7g = 0; eq_set_params(&filters[0], 100.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[1], 200.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[2], 400.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[3], 1000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[4], 3000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[5], 6000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[6], 12000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[7], 15000.0f, 0.0f, BWIDTH, fs); return (LADSPA_Handle)ptr; } static void run_eq(LADSPA_Handle instance, unsigned long sample_count) { eq * ptr = (eq *)instance; const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); const LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; biquad * filters = ptr->filters; float fs = ptr->fs; unsigned long pos; float samp; if ((ch0f != ptr->old_ch0f) || (ch0g != ptr->old_ch0g)) { ptr->old_ch0f = ch0f; ptr->old_ch0g = ch0g; eq_set_params(&filters[0], ch0f, ch0g, BWIDTH, fs); } if ((ch1f != ptr->old_ch1f) || (ch1g != ptr->old_ch1g)) { ptr->old_ch1f = ch1f; ptr->old_ch1g = ch1g; eq_set_params(&filters[1], ch1f, ch1g, BWIDTH, fs); } if ((ch2f != ptr->old_ch2f) || (ch2g != ptr->old_ch2g)) { ptr->old_ch2f = ch2f; ptr->old_ch2g = ch2g; eq_set_params(&filters[2], ch2f, ch2g, BWIDTH, fs); } if ((ch3f != ptr->old_ch3f) || (ch3g != ptr->old_ch3g)) { ptr->old_ch3f = ch3f; ptr->old_ch3g = ch3g; eq_set_params(&filters[3], ch3f, ch3g, BWIDTH, fs); } if ((ch4f != ptr->old_ch4f) || (ch4g != ptr->old_ch4g)) { ptr->old_ch4f = ch4f; ptr->old_ch4g = ch4g; eq_set_params(&filters[4], ch4f, ch4g, BWIDTH, fs); } if ((ch5f != ptr->old_ch5f) || (ch5g != ptr->old_ch5g)) { ptr->old_ch5f = ch5f; ptr->old_ch5g = ch5g; eq_set_params(&filters[5], ch5f, ch5g, BWIDTH, fs); } if ((ch6f != ptr->old_ch6f) || (ch6g != ptr->old_ch6g)) { ptr->old_ch6f = ch6f; ptr->old_ch6g = ch6g; eq_set_params(&filters[6], ch6f, ch6g, BWIDTH, fs); } if ((ch7f != ptr->old_ch7f) || (ch7g != ptr->old_ch7g)) { ptr->old_ch7f = ch7f; ptr->old_ch7g = ch7g; eq_set_params(&filters[7], ch7f, ch7g, BWIDTH, fs); } for (pos = 0; pos < sample_count; pos++) { samp = input[pos]; if (ch0g != 0.0f) samp = biquad_run(&filters[0], samp); if (ch1g != 0.0f) samp = biquad_run(&filters[1], samp); if (ch2g != 0.0f) samp = biquad_run(&filters[2], samp); if (ch3g != 0.0f) samp = biquad_run(&filters[3], samp); if (ch4g != 0.0f) samp = biquad_run(&filters[4], samp); if (ch5g != 0.0f) samp = biquad_run(&filters[5], samp); if (ch6g != 0.0f) samp = biquad_run(&filters[6], samp); if (ch7g != 0.0f) samp = biquad_run(&filters[7], samp); output[pos] = samp; } } void set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data gain) { eq * ptr = (eq *)instance; ptr->run_adding_gain = gain; } static void run_adding_eq(LADSPA_Handle instance, unsigned long sample_count) { eq * ptr = (eq *)instance; const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); const LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; biquad * filters = ptr->filters; float fs = ptr->fs; unsigned long pos; float samp; if ((ch0f != ptr->old_ch0f) || (ch0g != ptr->old_ch0g)) { ptr->old_ch0f = ch0f; ptr->old_ch0g = ch0g; eq_set_params(&filters[0], ch0f, ch0g, BWIDTH, fs); } if ((ch1f != ptr->old_ch1f) || (ch1g != ptr->old_ch1g)) { ptr->old_ch1f = ch1f; ptr->old_ch1g = ch1g; eq_set_params(&filters[1], ch1f, ch1g, BWIDTH, fs); } if ((ch2f != ptr->old_ch2f) || (ch2g != ptr->old_ch2g)) { ptr->old_ch2f = ch2f; ptr->old_ch2g = ch2g; eq_set_params(&filters[2], ch2f, ch2g, BWIDTH, fs); } if ((ch3f != ptr->old_ch3f) || (ch3g != ptr->old_ch3g)) { ptr->old_ch3f = ch3f; ptr->old_ch3g = ch3g; eq_set_params(&filters[3], ch3f, ch3g, BWIDTH, fs); } if ((ch4f != ptr->old_ch4f) || (ch4g != ptr->old_ch4g)) { ptr->old_ch4f = ch4f; ptr->old_ch4g = ch4g; eq_set_params(&filters[4], ch4f, ch4g, BWIDTH, fs); } if ((ch5f != ptr->old_ch5f) || (ch5g != ptr->old_ch5g)) { ptr->old_ch5f = ch5f; ptr->old_ch5g = ch5g; eq_set_params(&filters[5], ch5f, ch5g, BWIDTH, fs); } if ((ch6f != ptr->old_ch6f) || (ch6g != ptr->old_ch6g)) { ptr->old_ch6f = ch6f; ptr->old_ch6g = ch6g; eq_set_params(&filters[6], ch6f, ch6g, BWIDTH, fs); } if ((ch7f != ptr->old_ch7f) || (ch7g != ptr->old_ch7g)) { ptr->old_ch7f = ch7f; ptr->old_ch7g = ch7g; eq_set_params(&filters[7], ch7f, ch7g, BWIDTH, fs); } for (pos = 0; pos < sample_count; pos++) { samp = input[pos]; if (ch0g != 0.0f) samp = biquad_run(&filters[0], samp); if (ch1g != 0.0f) samp = biquad_run(&filters[1], samp); if (ch2g != 0.0f) samp = biquad_run(&filters[2], samp); if (ch3g != 0.0f) samp = biquad_run(&filters[3], samp); if (ch4g != 0.0f) samp = biquad_run(&filters[4], samp); if (ch5g != 0.0f) samp = biquad_run(&filters[5], samp); if (ch6g != 0.0f) samp = biquad_run(&filters[6], samp); if (ch7g != 0.0f) samp = biquad_run(&filters[7], samp); output[pos] += ptr->run_adding_gain * samp; } } void __attribute__((constructor)) tap_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; eqDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (eqDescriptor) { eqDescriptor->UniqueID = ID_MONO; eqDescriptor->Label = "tap_equalizer"; eqDescriptor->Properties = 0; eqDescriptor->Name = "TAP Equalizer"; eqDescriptor->Maker = "Tom Szilagyi"; eqDescriptor->Copyright = "GPL"; eqDescriptor->PortCount = PORTCOUNT_MONO; port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor)); eqDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)); eqDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char*)); eqDescriptor->PortNames = (const char **)port_names; /* Parameters for CH0 freq [Hz] */ port_descriptors[EQ_CH0F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH0F] = "Band 1 Freq [Hz]"; port_range_hints[EQ_CH0F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH0F].LowerBound = 40; port_range_hints[EQ_CH0F].UpperBound = 280; /* Parameters for CH0 gain [dB] */ port_descriptors[EQ_CH0G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH0G] = "Band 1 Gain [dB]"; port_range_hints[EQ_CH0G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH0G].LowerBound = -50; port_range_hints[EQ_CH0G].UpperBound = +20; /* Parameters for CH1 freq [Hz] */ port_descriptors[EQ_CH1F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH1F] = "Band 2 Freq [Hz]"; port_range_hints[EQ_CH1F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH1F].LowerBound = 100; port_range_hints[EQ_CH1F].UpperBound = 500; /* Parameters for CH1 gain [dB] */ port_descriptors[EQ_CH1G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH1G] = "Band 2 Gain [dB]"; port_range_hints[EQ_CH1G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH1G].LowerBound = -50; port_range_hints[EQ_CH1G].UpperBound = +20; /* Parameters for CH2 freq [Hz] */ port_descriptors[EQ_CH2F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH2F] = "Band 3 Freq [Hz]"; port_range_hints[EQ_CH2F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH2F].LowerBound = 200; port_range_hints[EQ_CH2F].UpperBound = 1000; /* Parameters for CH2 gain [dB] */ port_descriptors[EQ_CH2G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH2G] = "Band 3 Gain [dB]"; port_range_hints[EQ_CH2G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH2G].LowerBound = -50; port_range_hints[EQ_CH2G].UpperBound = +20; /* Parameters for CH3 freq [Hz] */ port_descriptors[EQ_CH3F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH3F] = "Band 4 Freq [Hz]"; port_range_hints[EQ_CH3F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH3F].LowerBound = 400; port_range_hints[EQ_CH3F].UpperBound = 2800; /* Parameters for CH3 gain [dB] */ port_descriptors[EQ_CH3G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH3G] = "Band 4 Gain [dB]"; port_range_hints[EQ_CH3G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH3G].LowerBound = -50; port_range_hints[EQ_CH3G].UpperBound = +20; /* Parameters for CH4 freq [Hz] */ port_descriptors[EQ_CH4F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH4F] = "Band 5 Freq [Hz]"; port_range_hints[EQ_CH4F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH4F].LowerBound = 1000; port_range_hints[EQ_CH4F].UpperBound = 5000; /* Parameters for CH4 gain [dB] */ port_descriptors[EQ_CH4G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH4G] = "Band 5 Gain [dB]"; port_range_hints[EQ_CH4G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH4G].LowerBound = -50; port_range_hints[EQ_CH4G].UpperBound = +20; /* Parameters for CH5 freq [Hz] */ port_descriptors[EQ_CH5F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH5F] = "Band 6 Freq [Hz]"; port_range_hints[EQ_CH5F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH5F].LowerBound = 3000; port_range_hints[EQ_CH5F].UpperBound = 9000; /* Parameters for CH5 gain [dB] */ port_descriptors[EQ_CH5G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH5G] = "Band 6 Gain [dB]"; port_range_hints[EQ_CH5G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH5G].LowerBound = -50; port_range_hints[EQ_CH5G].UpperBound = +20; /* Parameters for CH6 freq [Hz] */ port_descriptors[EQ_CH6F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH6F] = "Band 7 Freq [Hz]"; port_range_hints[EQ_CH6F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH6F].LowerBound = 6000; port_range_hints[EQ_CH6F].UpperBound = 18000; /* Parameters for CH6 gain [dB] */ port_descriptors[EQ_CH6G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH6G] = "Band 7 Gain [dB]"; port_range_hints[EQ_CH6G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH6G].LowerBound = -50; port_range_hints[EQ_CH6G].UpperBound = +20; /* Parameters for CH7 freq [Hz] */ port_descriptors[EQ_CH7F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH7F] = "Band 8 Freq [Hz]"; port_range_hints[EQ_CH7F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH7F].LowerBound = 10000; port_range_hints[EQ_CH7F].UpperBound = 20000; /* Parameters for CH7 gain [dB] */ port_descriptors[EQ_CH7G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH7G] = "Band 8 Gain [dB]"; port_range_hints[EQ_CH7G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH7G].LowerBound = -50; port_range_hints[EQ_CH7G].UpperBound = +20; /* Parameters for Input */ port_descriptors[EQ_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[EQ_INPUT] = "Input"; port_range_hints[EQ_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[EQ_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[EQ_OUTPUT] = "Output"; port_range_hints[EQ_OUTPUT].HintDescriptor = 0; eqDescriptor->activate = activate_eq; eqDescriptor->cleanup = cleanup_eq; eqDescriptor->connect_port = connectPort_eq; eqDescriptor->deactivate = NULL; eqDescriptor->instantiate = instantiate_eq; eqDescriptor->run = run_eq; eqDescriptor->run_adding = run_adding_eq; eqDescriptor->set_run_adding_gain = set_run_adding_gain; } } void __attribute__((destructor)) tap_fini() { if (eqDescriptor) { free((LADSPA_PortDescriptor *)eqDescriptor->PortDescriptors); free((char **)eqDescriptor->PortNames); free((LADSPA_PortRangeHint *)eqDescriptor->PortRangeHints); free(eqDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_eqbw.c000066400000000000000000000643301247673406200212410ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_eqbw.c,v 1.5 2006/08/09 12:03:24 tszilagyi Exp $ */ /* This plugin is identical to TAP Equalizer (2141), but it has * separate user controls for setting the bandwidth of every filter. */ #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin */ #define ID_MONO 2151 /* Default bandwidth of EQ filters in octaves */ #define BWIDTH 1.0f /* Port numbers */ #define EQ_CH0G 0 #define EQ_CH1G 1 #define EQ_CH2G 2 #define EQ_CH3G 3 #define EQ_CH4G 4 #define EQ_CH5G 5 #define EQ_CH6G 6 #define EQ_CH7G 7 #define EQ_CH0F 8 #define EQ_CH1F 9 #define EQ_CH2F 10 #define EQ_CH3F 11 #define EQ_CH4F 12 #define EQ_CH5F 13 #define EQ_CH6F 14 #define EQ_CH7F 15 #define EQ_CH0B 16 #define EQ_CH1B 17 #define EQ_CH2B 18 #define EQ_CH3B 19 #define EQ_CH4B 20 #define EQ_CH5B 21 #define EQ_CH6B 22 #define EQ_CH7B 23 #define EQ_INPUT 24 #define EQ_OUTPUT 25 /* Total number of ports */ #define PORTCOUNT_MONO 26 static LADSPA_Descriptor *eqDescriptor = NULL; typedef struct { LADSPA_Data *ch0f; LADSPA_Data *ch0g; LADSPA_Data *ch0b; LADSPA_Data *ch1f; LADSPA_Data *ch1g; LADSPA_Data *ch1b; LADSPA_Data *ch2f; LADSPA_Data *ch2g; LADSPA_Data *ch2b; LADSPA_Data *ch3f; LADSPA_Data *ch3g; LADSPA_Data *ch3b; LADSPA_Data *ch4f; LADSPA_Data *ch4g; LADSPA_Data *ch4b; LADSPA_Data *ch5f; LADSPA_Data *ch5g; LADSPA_Data *ch5b; LADSPA_Data *ch6f; LADSPA_Data *ch6g; LADSPA_Data *ch6b; LADSPA_Data *ch7f; LADSPA_Data *ch7g; LADSPA_Data *ch7b; LADSPA_Data *input; LADSPA_Data *output; biquad * filters; float fs; LADSPA_Data old_ch0f; LADSPA_Data old_ch0g; LADSPA_Data old_ch0b; LADSPA_Data old_ch1f; LADSPA_Data old_ch1g; LADSPA_Data old_ch1b; LADSPA_Data old_ch2f; LADSPA_Data old_ch2g; LADSPA_Data old_ch2b; LADSPA_Data old_ch3f; LADSPA_Data old_ch3g; LADSPA_Data old_ch3b; LADSPA_Data old_ch4f; LADSPA_Data old_ch4g; LADSPA_Data old_ch4b; LADSPA_Data old_ch5f; LADSPA_Data old_ch5g; LADSPA_Data old_ch5b; LADSPA_Data old_ch6f; LADSPA_Data old_ch6g; LADSPA_Data old_ch6b; LADSPA_Data old_ch7f; LADSPA_Data old_ch7g; LADSPA_Data old_ch7b; LADSPA_Data run_adding_gain; } eq; const LADSPA_Descriptor * ladspa_descriptor(unsigned long index) { switch (index) { case 0: return eqDescriptor; default: return NULL; } } static void activate_eq(LADSPA_Handle instance) { eq *ptr = (eq *)instance; biquad *filters = ptr->filters; biquad_init(&filters[0]); biquad_init(&filters[1]); biquad_init(&filters[2]); biquad_init(&filters[3]); biquad_init(&filters[4]); biquad_init(&filters[5]); biquad_init(&filters[6]); biquad_init(&filters[7]); } static void cleanup_eq(LADSPA_Handle instance) { eq *plugin_data = (eq *)instance; free(plugin_data->filters); free(instance); } static void connectPort_eq(LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { eq *plugin; plugin = (eq *)instance; switch (port) { case EQ_CH0F: plugin->ch0f = data; break; case EQ_CH0G: plugin->ch0g = data; break; case EQ_CH0B: plugin->ch0b = data; break; case EQ_CH1F: plugin->ch1f = data; break; case EQ_CH1G: plugin->ch1g = data; break; case EQ_CH1B: plugin->ch1b = data; break; case EQ_CH2F: plugin->ch2f = data; break; case EQ_CH2G: plugin->ch2g = data; break; case EQ_CH2B: plugin->ch2b = data; break; case EQ_CH3F: plugin->ch3f = data; break; case EQ_CH3G: plugin->ch3g = data; break; case EQ_CH3B: plugin->ch3b = data; break; case EQ_CH4F: plugin->ch4f = data; break; case EQ_CH4G: plugin->ch4g = data; break; case EQ_CH4B: plugin->ch4b = data; break; case EQ_CH5F: plugin->ch5f = data; break; case EQ_CH5G: plugin->ch5g = data; break; case EQ_CH5B: plugin->ch5b = data; break; case EQ_CH6F: plugin->ch6f = data; break; case EQ_CH6G: plugin->ch6g = data; break; case EQ_CH6B: plugin->ch6b = data; break; case EQ_CH7F: plugin->ch7f = data; break; case EQ_CH7G: plugin->ch7g = data; break; case EQ_CH7B: plugin->ch7b = data; break; case EQ_INPUT: plugin->input = data; break; case EQ_OUTPUT: plugin->output = data; break; } } static LADSPA_Handle instantiate_eq(const LADSPA_Descriptor *descriptor, unsigned long s_rate) { eq *ptr = (eq *)malloc(sizeof(eq)); biquad *filters = NULL; float fs; fs = s_rate; memset(ptr, 0, sizeof(eq)); filters = calloc(8, sizeof(biquad)); ptr->filters = filters; ptr->fs = fs; ptr->run_adding_gain = 1.0f; ptr->old_ch0f = 100.0f; ptr->old_ch0g = 0.0f; ptr->old_ch0b = BWIDTH; ptr->old_ch1f = 200.0f; ptr->old_ch1g = 0.0f; ptr->old_ch1b = BWIDTH; ptr->old_ch2f = 400.0f; ptr->old_ch2g = 0.0f; ptr->old_ch2b = BWIDTH; ptr->old_ch3f = 1000.0f; ptr->old_ch3g = 0.0f; ptr->old_ch3b = BWIDTH; ptr->old_ch4f = 3000.0f; ptr->old_ch4g = 0.0f; ptr->old_ch4b = BWIDTH; ptr->old_ch5f = 6000.0f; ptr->old_ch5g = 0.0f; ptr->old_ch5b = BWIDTH; ptr->old_ch6f = 12000.0f; ptr->old_ch6g = 0.0f; ptr->old_ch6b = BWIDTH; ptr->old_ch7f = 15000.0f; ptr->old_ch7g = 0.0f; ptr->old_ch7b = BWIDTH; eq_set_params(&filters[0], 100.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[1], 200.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[2], 400.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[3], 1000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[4], 3000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[5], 6000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[6], 12000.0f, 0.0f, BWIDTH, fs); eq_set_params(&filters[7], 15000.0f, 0.0f, BWIDTH, fs); return (LADSPA_Handle)ptr; } static void run_eq(LADSPA_Handle instance, unsigned long sample_count) { eq * ptr = (eq *)instance; const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); const LADSPA_Data ch0b = LIMIT(*(ptr->ch0b),0.1f,5.0f); const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); const LADSPA_Data ch1b = LIMIT(*(ptr->ch1b),0.1f,5.0f); const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); const LADSPA_Data ch2b = LIMIT(*(ptr->ch2b),0.1f,5.0f); const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); const LADSPA_Data ch3b = LIMIT(*(ptr->ch3b),0.1f,5.0f); const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); const LADSPA_Data ch4b = LIMIT(*(ptr->ch4b),0.1f,5.0f); const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); const LADSPA_Data ch5b = LIMIT(*(ptr->ch5b),0.1f,5.0f); const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); const LADSPA_Data ch6b = LIMIT(*(ptr->ch6b),0.1f,5.0f); const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); const LADSPA_Data ch7b = LIMIT(*(ptr->ch7b),0.1f,5.0f); const LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; biquad * filters = ptr->filters; float fs = ptr->fs; unsigned long pos; float samp; if ((ch0f != ptr->old_ch0f) || (ch0g != ptr->old_ch0g) || (ch0b != ptr->old_ch0b)) { ptr->old_ch0f = ch0f; ptr->old_ch0g = ch0g; ptr->old_ch0b = ch0b; eq_set_params(&filters[0], ch0f, ch0g, ch0b, fs); } if ((ch1f != ptr->old_ch1f) || (ch1g != ptr->old_ch1g) || (ch1b != ptr->old_ch1b)) { ptr->old_ch1f = ch1f; ptr->old_ch1g = ch1g; ptr->old_ch1b = ch1b; eq_set_params(&filters[1], ch1f, ch1g, ch1b, fs); } if ((ch2f != ptr->old_ch2f) || (ch2g != ptr->old_ch2g) || (ch2b != ptr->old_ch2b)) { ptr->old_ch2f = ch2f; ptr->old_ch2g = ch2g; ptr->old_ch2b = ch2b; eq_set_params(&filters[2], ch2f, ch2g, ch2b, fs); } if ((ch3f != ptr->old_ch3f) || (ch3g != ptr->old_ch3g) || (ch3b != ptr->old_ch3b)) { ptr->old_ch3f = ch3f; ptr->old_ch3g = ch3g; ptr->old_ch3b = ch3b; eq_set_params(&filters[3], ch3f, ch3g, ch3b, fs); } if ((ch4f != ptr->old_ch4f) || (ch4g != ptr->old_ch4g) || (ch4b != ptr->old_ch4b)) { ptr->old_ch4f = ch4f; ptr->old_ch4g = ch4g; ptr->old_ch4b = ch4b; eq_set_params(&filters[4], ch4f, ch4g, ch4b, fs); } if ((ch5f != ptr->old_ch5f) || (ch5g != ptr->old_ch5g) || (ch5b != ptr->old_ch5b)) { ptr->old_ch5f = ch5f; ptr->old_ch5g = ch5g; ptr->old_ch5b = ch5b; eq_set_params(&filters[5], ch5f, ch5g, ch5b, fs); } if ((ch6f != ptr->old_ch6f) || (ch6g != ptr->old_ch6g) || (ch6b != ptr->old_ch6b)) { ptr->old_ch6f = ch6f; ptr->old_ch6g = ch6g; ptr->old_ch6b = ch6b; eq_set_params(&filters[6], ch6f, ch6g, ch6b, fs); } if ((ch7f != ptr->old_ch7f) || (ch7g != ptr->old_ch7g) || (ch7b != ptr->old_ch7b)) { ptr->old_ch7f = ch7f; ptr->old_ch7g = ch7g; ptr->old_ch7b = ch7b; eq_set_params(&filters[7], ch7f, ch7g, ch7b, fs); } for (pos = 0; pos < sample_count; pos++) { samp = input[pos]; if (ch0g != 0.0f) samp = biquad_run(&filters[0], samp); if (ch1g != 0.0f) samp = biquad_run(&filters[1], samp); if (ch2g != 0.0f) samp = biquad_run(&filters[2], samp); if (ch3g != 0.0f) samp = biquad_run(&filters[3], samp); if (ch4g != 0.0f) samp = biquad_run(&filters[4], samp); if (ch5g != 0.0f) samp = biquad_run(&filters[5], samp); if (ch6g != 0.0f) samp = biquad_run(&filters[6], samp); if (ch7g != 0.0f) samp = biquad_run(&filters[7], samp); output[pos] = samp; } } void set_run_adding_gain(LADSPA_Handle instance, LADSPA_Data gain) { eq * ptr = (eq *)instance; ptr->run_adding_gain = gain; } static void run_adding_eq(LADSPA_Handle instance, unsigned long sample_count) { eq * ptr = (eq *)instance; const LADSPA_Data ch0f = LIMIT(*(ptr->ch0f),40.0f,280.0f); const LADSPA_Data ch0g = LIMIT(*(ptr->ch0g),-50.0f,20.0f); const LADSPA_Data ch0b = LIMIT(*(ptr->ch0b),0.1f,5.0f); const LADSPA_Data ch1f = LIMIT(*(ptr->ch1f),100.0f,500.0f); const LADSPA_Data ch1g = LIMIT(*(ptr->ch1g),-50.0f,20.0f); const LADSPA_Data ch1b = LIMIT(*(ptr->ch1b),0.1f,5.0f); const LADSPA_Data ch2f = LIMIT(*(ptr->ch2f),200.0f,1000.0f); const LADSPA_Data ch2g = LIMIT(*(ptr->ch2g),-50.0f,20.0f); const LADSPA_Data ch2b = LIMIT(*(ptr->ch2b),0.1f,5.0f); const LADSPA_Data ch3f = LIMIT(*(ptr->ch3f),400.0f,2800.0f); const LADSPA_Data ch3g = LIMIT(*(ptr->ch3g),-50.0f,20.0f); const LADSPA_Data ch3b = LIMIT(*(ptr->ch3b),0.1f,5.0f); const LADSPA_Data ch4f = LIMIT(*(ptr->ch4f),1000.0f,5000.0f); const LADSPA_Data ch4g = LIMIT(*(ptr->ch4g),-50.0f,20.0f); const LADSPA_Data ch4b = LIMIT(*(ptr->ch4b),0.1f,5.0f); const LADSPA_Data ch5f = LIMIT(*(ptr->ch5f),3000.0f,9000.0f); const LADSPA_Data ch5g = LIMIT(*(ptr->ch5g),-50.0f,20.0f); const LADSPA_Data ch5b = LIMIT(*(ptr->ch5b),0.1f,5.0f); const LADSPA_Data ch6f = LIMIT(*(ptr->ch6f),6000.0f,18000.0f); const LADSPA_Data ch6g = LIMIT(*(ptr->ch6g),-50.0f,20.0f); const LADSPA_Data ch6b = LIMIT(*(ptr->ch6b),0.1f,5.0f); const LADSPA_Data ch7f = LIMIT(*(ptr->ch7f),10000.0f,20000.0f); const LADSPA_Data ch7g = LIMIT(*(ptr->ch7g),-50.0f,20.0f); const LADSPA_Data ch7b = LIMIT(*(ptr->ch7b),0.1f,5.0f); const LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; biquad * filters = ptr->filters; float fs = ptr->fs; unsigned long pos; float samp; if ((ch0f != ptr->old_ch0f) || (ch0g != ptr->old_ch0g) || (ch0b != ptr->old_ch0b)) { ptr->old_ch0f = ch0f; ptr->old_ch0g = ch0g; ptr->old_ch0b = ch0b; eq_set_params(&filters[0], ch0f, ch0g, ch0b, fs); } if ((ch1f != ptr->old_ch1f) || (ch1g != ptr->old_ch1g) || (ch1b != ptr->old_ch1b)) { ptr->old_ch1f = ch1f; ptr->old_ch1g = ch1g; ptr->old_ch1b = ch1b; eq_set_params(&filters[1], ch1f, ch1g, ch1b, fs); } if ((ch2f != ptr->old_ch2f) || (ch2g != ptr->old_ch2g) || (ch2b != ptr->old_ch2b)) { ptr->old_ch2f = ch2f; ptr->old_ch2g = ch2g; ptr->old_ch2b = ch2b; eq_set_params(&filters[2], ch2f, ch2g, ch2b, fs); } if ((ch3f != ptr->old_ch3f) || (ch3g != ptr->old_ch3g) || (ch3b != ptr->old_ch3b)) { ptr->old_ch3f = ch3f; ptr->old_ch3g = ch3g; ptr->old_ch3b = ch3b; eq_set_params(&filters[3], ch3f, ch3g, ch3b, fs); } if ((ch4f != ptr->old_ch4f) || (ch4g != ptr->old_ch4g) || (ch4b != ptr->old_ch4b)) { ptr->old_ch4f = ch4f; ptr->old_ch4g = ch4g; ptr->old_ch4b = ch4b; eq_set_params(&filters[4], ch4f, ch4g, ch4b, fs); } if ((ch5f != ptr->old_ch5f) || (ch5g != ptr->old_ch5g) || (ch5b != ptr->old_ch5b)) { ptr->old_ch5f = ch5f; ptr->old_ch5g = ch5g; ptr->old_ch5b = ch5b; eq_set_params(&filters[5], ch5f, ch5g, ch5b, fs); } if ((ch6f != ptr->old_ch6f) || (ch6g != ptr->old_ch6g) || (ch6b != ptr->old_ch6b)) { ptr->old_ch6f = ch6f; ptr->old_ch6g = ch6g; ptr->old_ch6b = ch6b; eq_set_params(&filters[6], ch6f, ch6g, ch6b, fs); } if ((ch7f != ptr->old_ch7f) || (ch7g != ptr->old_ch7g) || (ch7b != ptr->old_ch7b)) { ptr->old_ch7f = ch7f; ptr->old_ch7g = ch7g; ptr->old_ch7b = ch7b; eq_set_params(&filters[7], ch7f, ch7g, ch7b, fs); } for (pos = 0; pos < sample_count; pos++) { samp = input[pos]; if (ch0g != 0.0f) samp = biquad_run(&filters[0], samp); if (ch1g != 0.0f) samp = biquad_run(&filters[1], samp); if (ch2g != 0.0f) samp = biquad_run(&filters[2], samp); if (ch3g != 0.0f) samp = biquad_run(&filters[3], samp); if (ch4g != 0.0f) samp = biquad_run(&filters[4], samp); if (ch5g != 0.0f) samp = biquad_run(&filters[5], samp); if (ch6g != 0.0f) samp = biquad_run(&filters[6], samp); if (ch7g != 0.0f) samp = biquad_run(&filters[7], samp); output[pos] += ptr->run_adding_gain * samp; } } void __attribute__((constructor)) tap_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; eqDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); if (eqDescriptor) { eqDescriptor->UniqueID = ID_MONO; eqDescriptor->Label = "tap_equalizer_bw"; eqDescriptor->Properties = 0; eqDescriptor->Name = "TAP Equalizer/BW"; eqDescriptor->Maker = "Tom Szilagyi"; eqDescriptor->Copyright = "GPL"; eqDescriptor->PortCount = PORTCOUNT_MONO; port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor)); eqDescriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_range_hints = (LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)); eqDescriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char*)); eqDescriptor->PortNames = (const char **)port_names; /* Parameters for CH0 freq [Hz] */ port_descriptors[EQ_CH0F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH0F] = "Band 1 Freq [Hz]"; port_range_hints[EQ_CH0F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH0F].LowerBound = 40; port_range_hints[EQ_CH0F].UpperBound = 280; /* Parameters for CH0 gain [dB] */ port_descriptors[EQ_CH0G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH0G] = "Band 1 Gain [dB]"; port_range_hints[EQ_CH0G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH0G].LowerBound = -50; port_range_hints[EQ_CH0G].UpperBound = +20; /* Parameters for CH0 bandwidth [octaves] */ port_descriptors[EQ_CH0B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH0B] = "Band 1 Bandwidth [octaves]"; port_range_hints[EQ_CH0B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH0B].LowerBound = 0.1f; port_range_hints[EQ_CH0B].UpperBound = 5.0f; /* Parameters for CH1 freq [Hz] */ port_descriptors[EQ_CH1F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH1F] = "Band 2 Freq [Hz]"; port_range_hints[EQ_CH1F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH1F].LowerBound = 100; port_range_hints[EQ_CH1F].UpperBound = 500; /* Parameters for CH1 gain [dB] */ port_descriptors[EQ_CH1G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH1G] = "Band 2 Gain [dB]"; port_range_hints[EQ_CH1G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH1G].LowerBound = -50; port_range_hints[EQ_CH1G].UpperBound = +20; /* Parameters for CH1 bandwidth [octaves] */ port_descriptors[EQ_CH1B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH1B] = "Band 2 Bandwidth [octaves]"; port_range_hints[EQ_CH1B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH1B].LowerBound = 0.1f; port_range_hints[EQ_CH1B].UpperBound = 5.0f; /* Parameters for CH2 freq [Hz] */ port_descriptors[EQ_CH2F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH2F] = "Band 3 Freq [Hz]"; port_range_hints[EQ_CH2F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH2F].LowerBound = 200; port_range_hints[EQ_CH2F].UpperBound = 1000; /* Parameters for CH2 gain [dB] */ port_descriptors[EQ_CH2G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH2G] = "Band 3 Gain [dB]"; port_range_hints[EQ_CH2G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH2G].LowerBound = -50; port_range_hints[EQ_CH2G].UpperBound = +20; /* Parameters for CH2 bandwidth [octaves] */ port_descriptors[EQ_CH2B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH2B] = "Band 3 Bandwidth [octaves]"; port_range_hints[EQ_CH2B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH2B].LowerBound = 0.1f; port_range_hints[EQ_CH2B].UpperBound = 5.0f; /* Parameters for CH3 freq [Hz] */ port_descriptors[EQ_CH3F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH3F] = "Band 4 Freq [Hz]"; port_range_hints[EQ_CH3F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW; port_range_hints[EQ_CH3F].LowerBound = 400; port_range_hints[EQ_CH3F].UpperBound = 2800; /* Parameters for CH3 gain [dB] */ port_descriptors[EQ_CH3G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH3G] = "Band 4 Gain [dB]"; port_range_hints[EQ_CH3G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH3G].LowerBound = -50; port_range_hints[EQ_CH3G].UpperBound = +20; /* Parameters for CH3 bandwidth [octaves] */ port_descriptors[EQ_CH3B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH3B] = "Band 4 Bandwidth [octaves]"; port_range_hints[EQ_CH3B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH3B].LowerBound = 0.1f; port_range_hints[EQ_CH3B].UpperBound = 5.0f; /* Parameters for CH4 freq [Hz] */ port_descriptors[EQ_CH4F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH4F] = "Band 5 Freq [Hz]"; port_range_hints[EQ_CH4F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH4F].LowerBound = 1000; port_range_hints[EQ_CH4F].UpperBound = 5000; /* Parameters for CH4 gain [dB] */ port_descriptors[EQ_CH4G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH4G] = "Band 5 Gain [dB]"; port_range_hints[EQ_CH4G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH4G].LowerBound = -50; port_range_hints[EQ_CH4G].UpperBound = +20; /* Parameters for CH4 bandwidth [octaves] */ port_descriptors[EQ_CH4B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH4B] = "Band 5 Bandwidth [octaves]"; port_range_hints[EQ_CH4B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH4B].LowerBound = 0.1f; port_range_hints[EQ_CH4B].UpperBound = 5.0f; /* Parameters for CH5 freq [Hz] */ port_descriptors[EQ_CH5F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH5F] = "Band 6 Freq [Hz]"; port_range_hints[EQ_CH5F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH5F].LowerBound = 3000; port_range_hints[EQ_CH5F].UpperBound = 9000; /* Parameters for CH5 gain [dB] */ port_descriptors[EQ_CH5G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH5G] = "Band 6 Gain [dB]"; port_range_hints[EQ_CH5G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH5G].LowerBound = -50; port_range_hints[EQ_CH5G].UpperBound = +20; /* Parameters for CH5 bandwidth [octaves] */ port_descriptors[EQ_CH5B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH5B] = "Band 6 Bandwidth [octaves]"; port_range_hints[EQ_CH5B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH5B].LowerBound = 0.1f; port_range_hints[EQ_CH5B].UpperBound = 5.0f; /* Parameters for CH6 freq [Hz] */ port_descriptors[EQ_CH6F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH6F] = "Band 7 Freq [Hz]"; port_range_hints[EQ_CH6F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH6F].LowerBound = 6000; port_range_hints[EQ_CH6F].UpperBound = 18000; /* Parameters for CH6 gain [dB] */ port_descriptors[EQ_CH6G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH6G] = "Band 7 Gain [dB]"; port_range_hints[EQ_CH6G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH6G].LowerBound = -50; port_range_hints[EQ_CH6G].UpperBound = +20; /* Parameters for CH6 bandwidth [octaves] */ port_descriptors[EQ_CH6B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH6B] = "Band 7 Bandwidth [octaves]"; port_range_hints[EQ_CH6B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH6B].LowerBound = 0.1f; port_range_hints[EQ_CH6B].UpperBound = 5.0f; /* Parameters for CH7 freq [Hz] */ port_descriptors[EQ_CH7F] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH7F] = "Band 8 Freq [Hz]"; port_range_hints[EQ_CH7F].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE; port_range_hints[EQ_CH7F].LowerBound = 10000; port_range_hints[EQ_CH7F].UpperBound = 20000; /* Parameters for CH7 gain [dB] */ port_descriptors[EQ_CH7G] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH7G] = "Band 8 Gain [dB]"; port_range_hints[EQ_CH7G].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; port_range_hints[EQ_CH7G].LowerBound = -50; port_range_hints[EQ_CH7G].UpperBound = +20; /* Parameters for CH7 bandwidth [octaves] */ port_descriptors[EQ_CH7B] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_names[EQ_CH7B] = "Band 8 Bandwidth [octaves]"; port_range_hints[EQ_CH7B].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_1; port_range_hints[EQ_CH7B].LowerBound = 0.1f; port_range_hints[EQ_CH7B].UpperBound = 5.0f; /* Parameters for Input */ port_descriptors[EQ_INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_names[EQ_INPUT] = "Input"; port_range_hints[EQ_INPUT].HintDescriptor = 0; /* Parameters for Output */ port_descriptors[EQ_OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_names[EQ_OUTPUT] = "Output"; port_range_hints[EQ_OUTPUT].HintDescriptor = 0; eqDescriptor->activate = activate_eq; eqDescriptor->cleanup = cleanup_eq; eqDescriptor->connect_port = connectPort_eq; eqDescriptor->deactivate = NULL; eqDescriptor->instantiate = instantiate_eq; eqDescriptor->run = run_eq; eqDescriptor->run_adding = run_adding_eq; eqDescriptor->set_run_adding_gain = set_run_adding_gain; } } void __attribute__((destructor)) tap_fini() { if (eqDescriptor) { free((LADSPA_PortDescriptor *)eqDescriptor->PortDescriptors); free((char **)eqDescriptor->PortNames); free((LADSPA_PortRangeHint *)eqDescriptor->PortRangeHints); free(eqDescriptor); } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_limiter.c000066400000000000000000000303171247673406200217460ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_limiter.c,v 1.5 2004/02/21 17:33:36 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2145 /* The port numbers for the plugin: */ #define LIMIT_VOL 0 #define OUT_VOL 1 #define LATENCY 2 #define INPUT 3 #define OUTPUT 4 /* Total number of ports */ #define PORTCOUNT_MONO 5 /* Size of a ringbuffer that must be large enough to hold audio * between two zero-crosses in any case (or you'll hear * distortion). 40 Hz sound at 192kHz yields a half-period of 2400 * samples, so this should be enough. */ #define RINGBUF_SIZE 2500 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * limit_vol; LADSPA_Data * out_vol; LADSPA_Data * latency; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data * ringbuffer; unsigned long buflen; unsigned long pos; unsigned long ready_num; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Limiter; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Limiter(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Limiter))) != NULL) { ((Limiter *)ptr)->sample_rate = sample_rate; ((Limiter *)ptr)->run_adding_gain = 1.0f; if ((((Limiter *)ptr)->ringbuffer = calloc(RINGBUF_SIZE, sizeof(LADSPA_Data))) == NULL) return NULL; /* 80 Hz is the lowest frequency with which zero-crosses were * observed to occur (this corresponds to 40 Hz signal frequency). */ ((Limiter *)ptr)->buflen = ((Limiter *)ptr)->sample_rate / 80; ((Limiter *)ptr)->pos = 0; ((Limiter *)ptr)->ready_num = 0; return ptr; } return NULL; } void activate_Limiter(LADSPA_Handle Instance) { Limiter * ptr = (Limiter *)Instance; unsigned long i; for (i = 0; i < RINGBUF_SIZE; i++) ptr->ringbuffer[i] = 0.0f; } /* Connect a port to a data location. */ void connect_port_Limiter(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Limiter * ptr = (Limiter *)Instance; switch (Port) { case LIMIT_VOL: ptr->limit_vol = DataLocation; break; case OUT_VOL: ptr->out_vol = DataLocation; break; case LATENCY: ptr->latency = DataLocation; *(ptr->latency) = ptr->buflen; /* IS THIS LEGAL? */ break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_Limiter(LADSPA_Handle Instance, unsigned long SampleCount) { Limiter * ptr = (Limiter *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data limit_vol = db2lin(LIMIT(*(ptr->limit_vol),-30.0f,20.0f)); LADSPA_Data out_vol = db2lin(LIMIT(*(ptr->out_vol),-30.0f,20.0f)); unsigned long sample_index; unsigned long sample_count = SampleCount; unsigned long index_offs = 0; unsigned long i; LADSPA_Data max_value = 0; LADSPA_Data section_gain = 0; unsigned long run_length; unsigned long total_length = 0; while (total_length < sample_count) { run_length = ptr->buflen; if (total_length + run_length > sample_count) run_length = sample_count - total_length; while (ptr->ready_num < run_length) { if (read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->ready_num) >= 0.0f) { index_offs = 0; while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->ready_num + index_offs) >= 0.0f) && (ptr->ready_num + index_offs < run_length)) { index_offs++; } } else { index_offs = 0; while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->ready_num + index_offs) <= 0.0f) && (ptr->ready_num + index_offs < run_length)) { index_offs++; } } /* search for max value in scanned halfcycle */ max_value = 0; for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { if (fabs(read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, i)) > max_value) max_value = fabs(read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, i)); } section_gain = limit_vol / max_value; if (max_value > limit_vol) for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { write_buffer(read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, i) * section_gain, ptr->ringbuffer, ptr->buflen, ptr->pos, i); } ptr->ready_num += index_offs; } /* push run_length values out of ringbuffer, feed with input */ for (sample_index = 0; sample_index < run_length; sample_index++) { *(output++) = out_vol * push_buffer(*(input++), ptr->ringbuffer, ptr->buflen, &(ptr->pos)); } ptr->ready_num -= run_length; total_length += run_length; } *(ptr->latency) = ptr->buflen; } void set_run_adding_gain_Limiter(LADSPA_Handle Instance, LADSPA_Data gain) { Limiter * ptr = (Limiter *)Instance; ptr->run_adding_gain = gain; } void run_adding_Limiter(LADSPA_Handle Instance, unsigned long SampleCount) { Limiter * ptr = (Limiter *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data limit_vol = db2lin(LIMIT(*(ptr->limit_vol),-30.0f,20.0f)); LADSPA_Data out_vol = db2lin(LIMIT(*(ptr->out_vol),-30.0f,20.0f)); unsigned long sample_index; unsigned long sample_count = SampleCount; unsigned long index_offs = 0; unsigned long i; LADSPA_Data max_value = 0; LADSPA_Data section_gain = 0; unsigned long run_length; unsigned long total_length = 0; while (total_length < sample_count) { run_length = ptr->buflen; if (total_length + run_length > sample_count) run_length = sample_count - total_length; while (ptr->ready_num < run_length) { if (read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->ready_num) >= 0.0f) { index_offs = 0; while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->ready_num + index_offs) >= 0.0f) && (ptr->ready_num + index_offs < run_length)) { index_offs++; } } else { index_offs = 0; while ((read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->ready_num + index_offs) <= 0.0f) && (ptr->ready_num + index_offs < run_length)) { index_offs++; } } /* search for max value in scanned halfcycle */ max_value = 0; for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { if (fabs(read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, i)) > max_value) max_value = fabs(read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, i)); } section_gain = limit_vol / max_value; if (max_value > limit_vol) for (i = ptr->ready_num; i < ptr->ready_num + index_offs; i++) { write_buffer(read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, i) * section_gain, ptr->ringbuffer, ptr->buflen, ptr->pos, i); } ptr->ready_num += index_offs; } /* push run_length values out of ringbuffer, feed with input */ for (sample_index = 0; sample_index < run_length; sample_index++) { *(output++) += ptr->run_adding_gain * out_vol * push_buffer(*(input++), ptr->ringbuffer, ptr->buflen, &(ptr->pos)); } ptr->ready_num -= run_length; total_length += run_length; } *(ptr->latency) = ptr->buflen; } /* Throw away a Limiter effect instance. */ void cleanup_Limiter(LADSPA_Handle Instance) { Limiter * ptr = (Limiter *)Instance; free(ptr->ringbuffer); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_limiter"); mono_descriptor->Properties = 0; mono_descriptor->Name = strdup("TAP Scaling Limiter"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[LIMIT_VOL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[OUT_VOL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[LIMIT_VOL] = strdup("Limit Level [dB]"); port_names[OUT_VOL] = strdup("Output Volume [dB]"); port_names[LATENCY] = strdup("latency"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[LIMIT_VOL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[OUT_VOL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[LATENCY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[LIMIT_VOL].LowerBound = -30; port_range_hints[LIMIT_VOL].UpperBound = +20; port_range_hints[OUT_VOL].LowerBound = -30; port_range_hints[OUT_VOL].UpperBound = +20; port_range_hints[LATENCY].LowerBound = 0; port_range_hints[LATENCY].UpperBound = RINGBUF_SIZE + 0.1f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Limiter; mono_descriptor->connect_port = connect_port_Limiter; mono_descriptor->activate = activate_Limiter; mono_descriptor->run = run_Limiter; mono_descriptor->run_adding = run_adding_Limiter; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Limiter; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Limiter; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_pinknoise.c000066400000000000000000000217451247673406200223050ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_pinknoise.c,v 1.2 2004/08/13 18:34:31 tszilagyi Exp $ */ #include #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2155 /* The port numbers for the plugin: */ #define HURST 0 #define SIGNAL 1 #define NOISE 2 #define INPUT 3 #define OUTPUT 4 /* Total number of ports */ #define PORTCOUNT_MONO 5 #define NOISE_LEN 1024 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * hurst; LADSPA_Data * signal; LADSPA_Data * noise; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data * ring; unsigned long buflen; unsigned long pos; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Pinknoise; /* generate fractal pattern using Midpoint Displacement Method * v: buffer of floats to output fractal pattern to * N: length of v, MUST be integer power of 2 (ie 128, 256, ...) * H: Hurst constant, between 0 and 0.9999 (fractal dimension) */ void fractal(LADSPA_Data * v, int N, float H) { int l = N; int k; float r = 2.0f * H*H + 0.3f; int c; v[0] = 0; while (l > 1) { k = N / l; for (c = 0; c < k; c++) { v[c*l + l/2] = (v[c*l] + v[((c+1) * l) % N]) / 2.0f + 2.0f * r * (rand() - (float)RAND_MAX/2.0f) / (float)RAND_MAX; v[c*l + l/2] = LIMIT(v[c*l + l/2], -1.0f, 1.0f); } l /= 2; r /= powf(2, H); } } /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Pinknoise(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Pinknoise))) != NULL) { ((Pinknoise *)ptr)->sample_rate = SampleRate; ((Pinknoise *)ptr)->run_adding_gain = 1.0; if ((((Pinknoise *)ptr)->ring = calloc(NOISE_LEN, sizeof(LADSPA_Data))) == NULL) return NULL; ((Pinknoise *)ptr)->buflen = NOISE_LEN; ((Pinknoise *)ptr)->pos = 0; return ptr; } return NULL; } /* Connect a port to a data location. */ void connect_port_Pinknoise(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * data) { Pinknoise * ptr; ptr = (Pinknoise *)Instance; switch (Port) { case HURST: ptr->hurst = data; break; case SIGNAL: ptr->signal = data; break; case NOISE: ptr->noise = data; break; case INPUT: ptr->input = data; break; case OUTPUT: ptr->output = data; break; } } void run_Pinknoise(LADSPA_Handle Instance, unsigned long SampleCount) { Pinknoise * ptr = (Pinknoise *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data hurst = LIMIT(*(ptr->hurst), 0.0f, 1.0f); LADSPA_Data signal = db2lin(LIMIT(*(ptr->signal), -90.0f, 20.0f)); LADSPA_Data noise = db2lin(LIMIT(*(ptr->noise), -90.0f, 20.0f)); unsigned long sample_index; for (sample_index = 0; sample_index < SampleCount; sample_index++) { if (!ptr->pos) fractal(ptr->ring, NOISE_LEN, hurst); *(output++) = signal * *(input++) + noise * push_buffer(0.0f, ptr->ring, ptr->buflen, &(ptr->pos)); } } void set_run_adding_gain_Pinknoise(LADSPA_Handle Instance, LADSPA_Data gain) { Pinknoise * ptr; ptr = (Pinknoise *)Instance; ptr->run_adding_gain = gain; } void run_adding_Pinknoise(LADSPA_Handle Instance, unsigned long SampleCount) { Pinknoise * ptr = (Pinknoise *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data hurst = LIMIT(*(ptr->hurst), 0.0f, 1.0f); LADSPA_Data signal = db2lin(LIMIT(*(ptr->signal), -90.0f, 20.0f)); LADSPA_Data noise = db2lin(LIMIT(*(ptr->noise), -90.0f, 20.0f)); unsigned long sample_index; for (sample_index = 0; sample_index < SampleCount; sample_index++) { if (!ptr->pos) fractal(ptr->ring, NOISE_LEN, hurst); *(output++) += ptr->run_adding_gain * (signal * *(input++) + noise * push_buffer(0.0f, ptr->ring, ptr->buflen, &(ptr->pos))); } } /* Throw away a Pinknoise effect instance. */ void cleanup_Pinknoise(LADSPA_Handle Instance) { Pinknoise * ptr = (Pinknoise *)Instance; free(ptr->ring); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); /* initialize RNG */ // srand(time(0)); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_pinknoise"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP Pink/Fractal Noise"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[HURST] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[SIGNAL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[NOISE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[HURST] = strdup("Fractal Dimension"); port_names[SIGNAL] = strdup("Signal Level [dB]"); port_names[NOISE] = strdup("Noise Level [dB]"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[HURST].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[SIGNAL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[NOISE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM); port_range_hints[HURST].LowerBound = 0.0f; port_range_hints[HURST].UpperBound = 1.0f; port_range_hints[SIGNAL].LowerBound = -90.0f; port_range_hints[SIGNAL].UpperBound = 20.0f; port_range_hints[NOISE].LowerBound = -90.0f; port_range_hints[NOISE].UpperBound = 20.0f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Pinknoise; mono_descriptor->connect_port = connect_port_Pinknoise; mono_descriptor->activate = NULL; mono_descriptor->run = run_Pinknoise; mono_descriptor->run_adding = run_adding_Pinknoise; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Pinknoise; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Pinknoise; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_pitch.c000066400000000000000000000373401247673406200214130ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_pitch.c,v 1.2 2004/02/21 17:33:36 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2150 /* The port numbers for the plugin: */ #define SEMITONE 0 #define RATE 1 #define DRYLEVEL 2 #define WETLEVEL 3 #define LATENCY 4 #define INPUT 5 #define OUTPUT 6 /* Total number of ports */ #define PORTCOUNT_MONO 7 /* depth of phase mod (yes, this is a magic number) */ #define PM_DEPTH 3681.0f /* another magic number, derived from the above one */ #define PM_BUFLEN 16027 /* frequency of the modulation signal (Hz) */ #define PM_FREQ 6.0f #define COS_TABLE_SIZE 1024 LADSPA_Data cos_table[COS_TABLE_SIZE]; /* \sqrt{12}{2} used for key frequency computing */ #define ROOT_12_2 1.059463094f /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * rate; LADSPA_Data * semitone; LADSPA_Data * drylevel; LADSPA_Data * wetlevel; LADSPA_Data * latency; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data * ringbuffer; unsigned long buflen; unsigned long pos; LADSPA_Data phase; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Pitch; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Pitch(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Pitch))) != NULL) { ((Pitch *)ptr)->sample_rate = sample_rate; ((Pitch *)ptr)->run_adding_gain = 1.0f; if ((((Pitch *)ptr)->ringbuffer = calloc(2 * PM_BUFLEN, sizeof(LADSPA_Data))) == NULL) return NULL; ((Pitch *)ptr)->buflen = 2 * PM_BUFLEN * sample_rate / 192000; ((Pitch *)ptr)->pos = 0; return ptr; } return NULL; } void activate_Pitch(LADSPA_Handle Instance) { Pitch * ptr = (Pitch *)Instance; unsigned long i; for (i = 0; i < ptr->buflen; i++) ptr->ringbuffer[i] = 0.0f; ptr->phase = 0.0f; } /* Connect a port to a data location. */ void connect_port_Pitch(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Pitch * ptr = (Pitch *)Instance; switch (Port) { case RATE: ptr->rate = DataLocation; break; case SEMITONE: ptr->semitone = DataLocation; break; case DRYLEVEL: ptr->drylevel = DataLocation; break; case WETLEVEL: ptr->wetlevel = DataLocation; break; case LATENCY: ptr->latency = DataLocation; *(ptr->latency) = ptr->buflen / 2; /* IS THIS LEGAL? */ break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_Pitch(LADSPA_Handle Instance, unsigned long SampleCount) { Pitch * ptr = (Pitch *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data buflen = ptr->buflen / 2.0f; LADSPA_Data semitone = LIMIT(*(ptr->semitone),-12.0f,12.0f); LADSPA_Data rate; LADSPA_Data r; LADSPA_Data depth; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data sign = 1.0f; LADSPA_Data phase_0 = 0.0f; LADSPA_Data phase_am_0 = 0.0f; LADSPA_Data phase_1 = 0.0f; LADSPA_Data phase_am_1 = 0.0f; LADSPA_Data phase_2 = 0.0f; LADSPA_Data phase_am_2 = 0.0f; LADSPA_Data fpos_0 = 0.0f, fpos_1 = 0.0f, fpos_2 = 0.0f; LADSPA_Data n_0 = 0.0f, n_1 = 0.0f, n_2 = 0.0f; LADSPA_Data rem_0 = 0.0f, rem_1 = 0.0f, rem_2 = 0.0f; LADSPA_Data sa_0, sb_0, sa_1, sb_1, sa_2, sb_2; if (semitone == 0.0f) rate = LIMIT(*(ptr->rate),-50.0f,100.0f); else rate = 100.0f * (powf(ROOT_12_2,semitone) - 1.0f); r = -1.0f * ABS(rate); depth = buflen * LIMIT(ABS(r) / 100.0f, 0.0f, 1.0f); if (rate > 0.0f) sign = -1.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); phase_0 = COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate + ptr->phase; while (phase_0 >= COS_TABLE_SIZE) phase_0 -= COS_TABLE_SIZE; phase_am_0 = phase_0 + COS_TABLE_SIZE/2; while (phase_am_0 >= COS_TABLE_SIZE) phase_am_0 -= COS_TABLE_SIZE; phase_1 = phase_0 + COS_TABLE_SIZE/3.0f; while (phase_1 >= COS_TABLE_SIZE) phase_1 -= COS_TABLE_SIZE; phase_am_1 = phase_1 + COS_TABLE_SIZE/2; while (phase_am_1 >= COS_TABLE_SIZE) phase_am_1 -= COS_TABLE_SIZE; phase_2 = phase_0 + 2.0f*COS_TABLE_SIZE/3.0f; while (phase_2 >= COS_TABLE_SIZE) phase_2 -= COS_TABLE_SIZE; phase_am_2 = phase_2 + COS_TABLE_SIZE/2; while (phase_am_2 >= COS_TABLE_SIZE) phase_am_2 -= COS_TABLE_SIZE; push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); fpos_0 = depth * (1.0f - sign * (2.0f * phase_0 / COS_TABLE_SIZE - 1.0f)); n_0 = floorf(fpos_0); rem_0 = fpos_0 - n_0; fpos_1 = depth * (1.0f - sign * (2.0f * phase_1 / COS_TABLE_SIZE - 1.0f)); n_1 = floorf(fpos_1); rem_1 = fpos_1 - n_1; fpos_2 = depth * (1.0f - sign * (2.0f * phase_2 / COS_TABLE_SIZE - 1.0f)); n_2 = floorf(fpos_2); rem_2 = fpos_2 - n_2; sa_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0); sb_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0 + 1); sa_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1); sb_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1 + 1); sa_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2); sb_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2 + 1); *(output++) = wetlevel * ((1.0f + cos_table[(unsigned long) phase_am_0]) * ((1 - rem_0) * sa_0 + rem_0 * sb_0) + (1.0f + cos_table[(unsigned long) phase_am_1]) * ((1 - rem_1) * sa_1 + rem_1 * sb_1) + (1.0f + cos_table[(unsigned long) phase_am_2]) * ((1 - rem_2) * sa_2 + rem_2 * sb_2)) + drylevel * read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) depth); } ptr->phase += COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate; while (ptr->phase >= COS_TABLE_SIZE) ptr->phase -= COS_TABLE_SIZE; *(ptr->latency) = buflen - (unsigned long) depth; } void set_run_adding_gain_Pitch(LADSPA_Handle Instance, LADSPA_Data gain) { Pitch * ptr = (Pitch *)Instance; ptr->run_adding_gain = gain; } void run_adding_Pitch(LADSPA_Handle Instance, unsigned long SampleCount) { Pitch * ptr = (Pitch *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data buflen = ptr->buflen / 2.0f; LADSPA_Data semitone = LIMIT(*(ptr->semitone),-12.0f,12.0f); LADSPA_Data rate; LADSPA_Data r; LADSPA_Data depth; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data sign = 1.0f; LADSPA_Data phase_0 = 0.0f; LADSPA_Data phase_am_0 = 0.0f; LADSPA_Data phase_1 = 0.0f; LADSPA_Data phase_am_1 = 0.0f; LADSPA_Data phase_2 = 0.0f; LADSPA_Data phase_am_2 = 0.0f; LADSPA_Data fpos_0 = 0.0f, fpos_1 = 0.0f, fpos_2 = 0.0f; LADSPA_Data n_0 = 0.0f, n_1 = 0.0f, n_2 = 0.0f; LADSPA_Data rem_0 = 0.0f, rem_1 = 0.0f, rem_2 = 0.0f; LADSPA_Data sa_0, sb_0, sa_1, sb_1, sa_2, sb_2; if (semitone == 0.0f) rate = LIMIT(*(ptr->rate),-50.0f,100.0f); else rate = 100.0f * (powf(ROOT_12_2,semitone) - 1.0f); r = -1.0f * ABS(rate); depth = buflen * LIMIT(ABS(r) / 100.0f, 0.0f, 1.0f); if (rate > 0.0f) sign = -1.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); phase_0 = COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate + ptr->phase; while (phase_0 >= COS_TABLE_SIZE) phase_0 -= COS_TABLE_SIZE; phase_am_0 = phase_0 + COS_TABLE_SIZE/2; while (phase_am_0 >= COS_TABLE_SIZE) phase_am_0 -= COS_TABLE_SIZE; phase_1 = phase_0 + COS_TABLE_SIZE/3.0f; while (phase_1 >= COS_TABLE_SIZE) phase_1 -= COS_TABLE_SIZE; phase_am_1 = phase_1 + COS_TABLE_SIZE/2; while (phase_am_1 >= COS_TABLE_SIZE) phase_am_1 -= COS_TABLE_SIZE; phase_2 = phase_0 + 2.0f*COS_TABLE_SIZE/3.0f; while (phase_2 >= COS_TABLE_SIZE) phase_2 -= COS_TABLE_SIZE; phase_am_2 = phase_2 + COS_TABLE_SIZE/2; while (phase_am_2 >= COS_TABLE_SIZE) phase_am_2 -= COS_TABLE_SIZE; push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); fpos_0 = depth * (1.0f - sign * (2.0f * phase_0 / COS_TABLE_SIZE - 1.0f)); n_0 = floorf(fpos_0); rem_0 = fpos_0 - n_0; fpos_1 = depth * (1.0f - sign * (2.0f * phase_1 / COS_TABLE_SIZE - 1.0f)); n_1 = floorf(fpos_1); rem_1 = fpos_1 - n_1; fpos_2 = depth * (1.0f - sign * (2.0f * phase_2 / COS_TABLE_SIZE - 1.0f)); n_2 = floorf(fpos_2); rem_2 = fpos_2 - n_2; sa_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0); sb_0 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_0 + 1); sa_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1); sb_1 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_1 + 1); sa_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2); sb_2 = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n_2 + 1); *(output++) += ptr->run_adding_gain * wetlevel * ((1.0f + cos_table[(unsigned long) phase_am_0]) * ((1 - rem_0) * sa_0 + rem_0 * sb_0) + (1.0f + cos_table[(unsigned long) phase_am_1]) * ((1 - rem_1) * sa_1 + rem_1 * sb_1) + (1.0f + cos_table[(unsigned long) phase_am_2]) * ((1 - rem_2) * sa_2 + rem_2 * sb_2)) + drylevel * read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) depth); } ptr->phase += COS_TABLE_SIZE * PM_FREQ * sample_index / ptr->sample_rate; while (ptr->phase >= COS_TABLE_SIZE) ptr->phase -= COS_TABLE_SIZE; *(ptr->latency) = buflen - (unsigned long) depth; } /* Throw away a Pitch effect instance. */ void cleanup_Pitch(LADSPA_Handle Instance) { Pitch * ptr = (Pitch *)Instance; free(ptr->ringbuffer); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { int i; char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < COS_TABLE_SIZE; i++) cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_pitch"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP Pitch Shifter"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[RATE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[SEMITONE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[SEMITONE] = strdup("Semitone Shift"); port_names[RATE] = strdup("Rate Shift [%]"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[WETLEVEL] = strdup("Wet Level [dB]"); port_names[LATENCY] = strdup("latency"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[RATE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[SEMITONE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM); port_range_hints[WETLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[LATENCY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[RATE].LowerBound = -50.0f; port_range_hints[RATE].UpperBound = 100.0f; port_range_hints[SEMITONE].LowerBound = -12.0f; port_range_hints[SEMITONE].UpperBound = 12.0f; port_range_hints[DRYLEVEL].LowerBound = -90.0f; port_range_hints[DRYLEVEL].UpperBound = 20.0f; port_range_hints[WETLEVEL].LowerBound = -90.0f; port_range_hints[WETLEVEL].UpperBound = 20.0f; port_range_hints[LATENCY].LowerBound = 0; port_range_hints[LATENCY].UpperBound = PM_BUFLEN; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Pitch; mono_descriptor->connect_port = connect_port_Pitch; mono_descriptor->activate = activate_Pitch; mono_descriptor->run = run_Pitch; mono_descriptor->run_adding = run_adding_Pitch; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Pitch; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Pitch; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_reflector.c000066400000000000000000000343571247673406200222760ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_reflector.c,v 1.1 2004/06/18 20:12:41 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2154 /* The port numbers for the plugin: */ #define FRAGMENT 0 #define DRYLEVEL 1 #define WETLEVEL 2 #define INPUT 3 #define OUTPUT 4 /* Total number of ports */ #define PORTCOUNT_MONO 5 /* minimum & maximum fragment length [ms] */ #define MIN_FRAGMENT_LEN 20 #define MAX_FRAGMENT_LEN 1600 /* in kHz */ #define MAX_SAMPLE_RATE 192 #define COS_TABLE_SIZE 1024 LADSPA_Data cos_table[COS_TABLE_SIZE]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * fragment; LADSPA_Data * drylevel; LADSPA_Data * wetlevel; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data * ring0; unsigned long buflen0; unsigned long pos0; LADSPA_Data * ring1; unsigned long buflen1; unsigned long pos1; LADSPA_Data * delay1; unsigned long delay_buflen1; unsigned long delay_pos1; LADSPA_Data * ring2; unsigned long buflen2; unsigned long pos2; LADSPA_Data * delay2; unsigned long delay_buflen2; unsigned long delay_pos2; unsigned long fragment_pos; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Reflector; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Reflector(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Reflector))) != NULL) { ((Reflector *)ptr)->sample_rate = sample_rate; ((Reflector *)ptr)->run_adding_gain = 1.0f; if ((((Reflector *)ptr)->ring0 = calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) return NULL; ((Reflector *)ptr)->buflen0 = 2 * MAX_FRAGMENT_LEN * sample_rate / 1000; ((Reflector *)ptr)->pos0 = 0; if ((((Reflector *)ptr)->ring1 = calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) return NULL; ((Reflector *)ptr)->buflen1 = 2 * MAX_FRAGMENT_LEN * sample_rate / 1000; ((Reflector *)ptr)->pos1 = 0; if ((((Reflector *)ptr)->delay1 = calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) return NULL; ((Reflector *)ptr)->delay_buflen1 = 2 * MAX_FRAGMENT_LEN * sample_rate / 3000; ((Reflector *)ptr)->pos1 = 0; if ((((Reflector *)ptr)->ring2 = calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) return NULL; ((Reflector *)ptr)->buflen2 = 2 * MAX_FRAGMENT_LEN * sample_rate / 1000; ((Reflector *)ptr)->pos2 = 0; if ((((Reflector *)ptr)->delay2 = calloc(2 * MAX_FRAGMENT_LEN * MAX_SAMPLE_RATE, sizeof(LADSPA_Data))) == NULL) return NULL; ((Reflector *)ptr)->delay_buflen2 = 4 * MAX_FRAGMENT_LEN * sample_rate / 3000; ((Reflector *)ptr)->pos2 = 0; return ptr; } return NULL; } void activate_Reflector(LADSPA_Handle Instance) { Reflector * ptr = (Reflector *)Instance; unsigned long i; for (i = 0; i < ptr->buflen0; i++) ptr->ring0[i] = 0.0f; ptr->pos0 = 0; for (i = 0; i < ptr->buflen1; i++) ptr->ring1[i] = 0.0f; ptr->pos1 = 0; for (i = 0; i < ptr->buflen2; i++) ptr->ring2[i] = 0.0f; ptr->pos2 = 0; for (i = 0; i < ptr->delay_buflen1; i++) ptr->delay1[i] = 0.0f; ptr->delay_pos1 = 0; for (i = 0; i < ptr->delay_buflen2; i++) ptr->delay2[i] = 0.0f; ptr->delay_pos2 = 0; ptr->fragment_pos = 0; } /* Connect a port to a data location. */ void connect_port_Reflector(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Reflector * ptr = (Reflector *)Instance; switch (Port) { case FRAGMENT: ptr->fragment = DataLocation; break; case DRYLEVEL: ptr->drylevel = DataLocation; break; case WETLEVEL: ptr->wetlevel = DataLocation; break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_Reflector(LADSPA_Handle Instance, unsigned long SampleCount) { Reflector * ptr = (Reflector *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data fragment = LIMIT(*(ptr->fragment),(float)MIN_FRAGMENT_LEN,(float)MAX_FRAGMENT_LEN); unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data in1 = 0.0f; LADSPA_Data in2 = 0.0f; LADSPA_Data out_0 = 0.0f; LADSPA_Data out_1 = 0.0f; LADSPA_Data out_2 = 0.0f; unsigned long fragment_pos1 = 0; unsigned long fragment_pos2 = 0; unsigned long arg_0 = 0; LADSPA_Data am_0 = 0.0f; unsigned long arg_1 = 0; LADSPA_Data am_1 = 0.0f; unsigned long arg_2 = 0; LADSPA_Data am_2 = 0.0f; ptr->buflen0 = 2 * fragment * ptr->sample_rate / 1000.0f; ptr->buflen1 = ptr->buflen0; ptr->buflen2 = ptr->buflen0; ptr->delay_buflen1 = ptr->buflen0 / 3; ptr->delay_buflen2 = 2 * ptr->buflen0 / 3; for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); in1 = push_buffer(in, ptr->delay1, ptr->delay_buflen1, &(ptr->delay_pos1)); in2 = push_buffer(in, ptr->delay2, ptr->delay_buflen2, &(ptr->delay_pos2)); push_buffer(in2, ptr->ring0, ptr->buflen0, &(ptr->pos0)); push_buffer(in1, ptr->ring1, ptr->buflen1, &(ptr->pos1)); push_buffer(in, ptr->ring2, ptr->buflen2, &(ptr->pos2)); fragment_pos1 = (ptr->fragment_pos + ptr->buflen0 / 3) % ptr->buflen0; fragment_pos2 = (ptr->fragment_pos + 2 * ptr->buflen1 / 3) % ptr->buflen1; out_0 = read_buffer(ptr->ring0, ptr->buflen0, ptr->pos0, ptr->buflen0 - ptr->fragment_pos - 1); out_1 = read_buffer(ptr->ring1, ptr->buflen1, ptr->pos1, ptr->buflen1 - fragment_pos1 - 1); out_2 = read_buffer(ptr->ring2, ptr->buflen2, ptr->pos2, ptr->buflen2 - fragment_pos2 - 1); ptr->fragment_pos += 2; if (ptr->fragment_pos >= ptr->buflen0) ptr->fragment_pos = 0; arg_0 = (float)ptr->fragment_pos / (float)ptr->buflen0 * COS_TABLE_SIZE; am_0 = 1.0f - cos_table[arg_0]; arg_1 = (float)fragment_pos1 / (float)ptr->buflen1 * COS_TABLE_SIZE; am_1 = 1.0f - cos_table[arg_1]; arg_2 = (float)fragment_pos2 / (float)ptr->buflen2 * COS_TABLE_SIZE; am_2 = 1.0f - cos_table[arg_2]; *(output++) = drylevel * in + wetlevel * (am_0 * out_0 + am_1 * out_1 + am_2 * out_2); } } void set_run_adding_gain_Reflector(LADSPA_Handle Instance, LADSPA_Data gain) { Reflector * ptr = (Reflector *)Instance; ptr->run_adding_gain = gain; } void run_adding_Reflector(LADSPA_Handle Instance, unsigned long SampleCount) { Reflector * ptr = (Reflector *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = 0.333333f * db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data fragment = LIMIT(*(ptr->fragment),(float)MIN_FRAGMENT_LEN,(float)MAX_FRAGMENT_LEN); unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data in1 = 0.0f; LADSPA_Data in2 = 0.0f; LADSPA_Data out_0 = 0.0f; LADSPA_Data out_1 = 0.0f; LADSPA_Data out_2 = 0.0f; unsigned long fragment_pos1 = 0; unsigned long fragment_pos2 = 0; unsigned long arg_0 = 0; LADSPA_Data am_0 = 0.0f; unsigned long arg_1 = 0; LADSPA_Data am_1 = 0.0f; unsigned long arg_2 = 0; LADSPA_Data am_2 = 0.0f; ptr->buflen0 = 2 * fragment * ptr->sample_rate / 1000.0f; ptr->buflen1 = ptr->buflen0; ptr->buflen2 = ptr->buflen0; ptr->delay_buflen1 = ptr->buflen0 / 3; ptr->delay_buflen2 = 2 * ptr->buflen0 / 3; for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); in1 = push_buffer(in, ptr->delay1, ptr->delay_buflen1, &(ptr->delay_pos1)); in2 = push_buffer(in, ptr->delay2, ptr->delay_buflen2, &(ptr->delay_pos2)); push_buffer(in2, ptr->ring0, ptr->buflen0, &(ptr->pos0)); push_buffer(in1, ptr->ring1, ptr->buflen1, &(ptr->pos1)); push_buffer(in, ptr->ring2, ptr->buflen2, &(ptr->pos2)); fragment_pos1 = (ptr->fragment_pos + ptr->buflen0 / 3) % ptr->buflen0; fragment_pos2 = (ptr->fragment_pos + 2 * ptr->buflen1 / 3) % ptr->buflen1; out_0 = read_buffer(ptr->ring0, ptr->buflen0, ptr->pos0, ptr->buflen0 - ptr->fragment_pos - 1); out_1 = read_buffer(ptr->ring1, ptr->buflen1, ptr->pos1, ptr->buflen1 - fragment_pos1 - 1); out_2 = read_buffer(ptr->ring2, ptr->buflen2, ptr->pos2, ptr->buflen2 - fragment_pos2 - 1); ptr->fragment_pos += 2; if (ptr->fragment_pos >= ptr->buflen0) ptr->fragment_pos = 0; arg_0 = (float)ptr->fragment_pos / (float)ptr->buflen0 * COS_TABLE_SIZE; am_0 = 1.0f - cos_table[arg_0]; arg_1 = (float)fragment_pos1 / (float)ptr->buflen1 * COS_TABLE_SIZE; am_1 = 1.0f - cos_table[arg_1]; arg_2 = (float)fragment_pos2 / (float)ptr->buflen2 * COS_TABLE_SIZE; am_2 = 1.0f - cos_table[arg_2]; *(output++) += ptr->run_adding_gain * (drylevel * in + wetlevel * (am_0 * out_0 + am_1 * out_1 + am_2 * out_2)); } } /* Throw away a Reflector effect instance. */ void cleanup_Reflector(LADSPA_Handle Instance) { Reflector * ptr = (Reflector *)Instance; free(ptr->ring0); free(ptr->ring1); free(ptr->ring2); free(ptr->delay1); free(ptr->delay2); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { int i; char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < COS_TABLE_SIZE; i++) cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_reflector"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP Reflector"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[FRAGMENT] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[FRAGMENT] = strdup("Fragment Length [ms]"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[WETLEVEL] = strdup("Wet Level [dB]"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[FRAGMENT].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM); port_range_hints[WETLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[FRAGMENT].LowerBound = (float)MIN_FRAGMENT_LEN; port_range_hints[FRAGMENT].UpperBound = (float)MAX_FRAGMENT_LEN; port_range_hints[DRYLEVEL].LowerBound = -90.0f; port_range_hints[DRYLEVEL].UpperBound = 20.0f; port_range_hints[WETLEVEL].LowerBound = -90.0f; port_range_hints[WETLEVEL].UpperBound = 20.0f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Reflector; mono_descriptor->connect_port = connect_port_Reflector; mono_descriptor->activate = activate_Reflector; mono_descriptor->run = run_Reflector; mono_descriptor->run_adding = run_adding_Reflector; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Reflector; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Reflector; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_reverb.c000066400000000000000000000602751247673406200215740ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_reverb.c,v 1.13 2004/06/15 14:50:55 tszilagyi Exp $ */ #include #include #include #include #include /* ***** VERY IMPORTANT! ***** * * If you enable this, the plugin will use float arithmetics in DSP * calculations. This usually yields lower average CPU usage, but * occasionaly may result in high CPU peaks which cause trouble to you * and your JACK server. The default is to use fixpoint arithmetics * (with the following #define commented out). But (depending on the * processor on which you run the code) you may find floating point * mode usable. */ /* #define REVERB_CALC_FLOAT */ #ifndef REVERB_CALC_FLOAT typedef signed int sample; #endif #ifndef REVERB_CALC_FLOAT typedef sample rev_t; #else typedef LADSPA_Data rev_t; #endif #include "tap_reverb_presets.h" #ifdef REVERB_CALC_FLOAT #define DENORM(x) (((unsigned char)(((*(unsigned int*)&(x))&0x7f800000)>>23))<103)?0.0f:(x) #else /* coefficient for float to sample (signed int) conversion */ /* this allows for about 60 dB headroom above 0dB, if 0 dB is equivalent to 1.0f */ /* As 2^31 equals more than 180 dB, about 120 dB dynamics remains below 0 dB */ #define F2S 2147483 #endif /* load plugin data from reverb_data[] into an instance */ void load_plugin_data(LADSPA_Handle Instance) { Reverb * ptr = (Reverb *)Instance; unsigned long m; unsigned int i; m = LIMIT(*(ptr->mode),0,NUM_MODES-1); /* load combs data */ ptr->num_combs = 2 * reverb_data[m].num_combs; for (i = 0; i < reverb_data[m].num_combs; i++) { ((COMB_FILTER *)(ptr->combs + 2*i))->buflen = reverb_data[m].combs[i].delay * ptr->sample_rate; ((COMB_FILTER *)(ptr->combs + 2*i))->feedback = reverb_data[m].combs[i].feedback; ((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp = LIMIT(reverb_data[m].combs[i].freq_resp * powf(ptr->sample_rate / 44100.0f, 0.8f), 0.0f, 1.0f); ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen = ((COMB_FILTER *)(ptr->combs + 2*i))->buflen; ((COMB_FILTER *)(ptr->combs + 2*i+1))->feedback = ((COMB_FILTER *)(ptr->combs + 2*i))->feedback; ((COMB_FILTER *)(ptr->combs + 2*i+1))->feedback = ((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp; /* set initial values: */ *(((COMB_FILTER *)(ptr->combs + 2*i))->buffer_pos) = 0; *(((COMB_FILTER *)(ptr->combs + 2*i+1))->buffer_pos) = 0; ((COMB_FILTER *)(ptr->combs + 2*i))->last_out = 0; ((COMB_FILTER *)(ptr->combs + 2*i+1))->last_out = 0; lp_set_params(((COMB_FILTER *)(ptr->combs + 2*i))->filter, 2000.0f + 13000.0f * (1 - reverb_data[m].combs[i].freq_resp) * ptr->sample_rate / 44100.0f, BANDPASS_BWIDTH, ptr->sample_rate); lp_set_params(((COMB_FILTER *)(ptr->combs + 2*i+1))->filter, 2000.0f + 13000.0f * (1 - reverb_data[m].combs[i].freq_resp) * ptr->sample_rate / 44100.0f, BANDPASS_BWIDTH, ptr->sample_rate); } /* load allps data */ ptr->num_allps = 2 * reverb_data[m].num_allps; for (i = 0; i < reverb_data[m].num_allps; i++) { ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = reverb_data[m].allps[i].delay * ptr->sample_rate; ((ALLP_FILTER *)(ptr->allps + 2*i))->feedback = reverb_data[m].allps[i].feedback; ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen; ((ALLP_FILTER *)(ptr->allps + 2*i+1))->feedback = ((ALLP_FILTER *)(ptr->allps + 2*i))->feedback; /* set initial values: */ *(((ALLP_FILTER *)(ptr->allps + 2*i))->buffer_pos) = 0; *(((ALLP_FILTER *)(ptr->allps + 2*i+1))->buffer_pos) = 0; ((ALLP_FILTER *)(ptr->allps + 2*i))->last_out = 0; ((ALLP_FILTER *)(ptr->allps + 2*i+1))->last_out = 0; } /* init bandpass filters */ lp_set_params((biquad *)(ptr->low_pass), reverb_data[m].bandpass_high, BANDPASS_BWIDTH, ptr->sample_rate); hp_set_params((biquad *)(ptr->high_pass), reverb_data[m].bandpass_low, BANDPASS_BWIDTH, ptr->sample_rate); lp_set_params((biquad *)(ptr->low_pass + 1), reverb_data[m].bandpass_high, BANDPASS_BWIDTH, ptr->sample_rate); hp_set_params((biquad *)(ptr->high_pass + 1), reverb_data[m].bandpass_low, BANDPASS_BWIDTH, ptr->sample_rate); } /* push a sample into a comb filter and return the sample falling out */ rev_t comb_run(rev_t insample, COMB_FILTER * comb) { rev_t outsample; rev_t pushin; pushin = comb->fb_gain * insample + biquad_run(comb->filter, comb->fb_gain * comb->last_out); #ifdef REVERB_CALC_FLOAT pushin = DENORM(pushin); #endif outsample = push_buffer(pushin, comb->ringbuffer, comb->buflen, comb->buffer_pos); #ifdef REVERB_CALC_FLOAT outsample = DENORM(outsample); #endif comb->last_out = outsample; return outsample; } /* push a sample into an allpass filter and return the sample falling out */ rev_t allp_run(rev_t insample, ALLP_FILTER * allp) { rev_t outsample; rev_t pushin; pushin = allp->in_gain * allp->fb_gain * insample + allp->fb_gain * allp->last_out; #ifdef REVERB_CALC_FLOAT pushin = DENORM(pushin); #endif outsample = push_buffer(pushin, allp->ringbuffer, allp->buflen, allp->buffer_pos); #ifdef REVERB_CALC_FLOAT outsample = DENORM(outsample); #endif allp->last_out = outsample; return outsample; } /* compute user-input-dependent reverberator coefficients */ void comp_coeffs(LADSPA_Handle Instance) { Reverb * ptr = (Reverb *)Instance; unsigned int i; if (*(ptr->mode) != ptr->old_mode) load_plugin_data(Instance); for (i = 0; i < ptr->num_combs / 2; i++) { ((COMB_FILTER *)(ptr->combs + 2*i))->fb_gain = powf(0.001f, 1000.0f * ((COMB_FILTER *)(ptr->combs + 2*i))->buflen * (1 + FR_R_COMP * ((COMB_FILTER *)(ptr->combs + 2*i))->freq_resp) / powf(((COMB_FILTER *)(ptr->combs + 2*i))->feedback/100.0f, 0.89f) / *(ptr->decay) / ptr->sample_rate); ((COMB_FILTER *)(ptr->combs + 2*i+1))->fb_gain = ((COMB_FILTER *)(ptr->combs + 2*i))->fb_gain; if (*(ptr->stereo_enh) > 0.0f) { if (i % 2 == 0) ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen = ENH_STEREO_RATIO * ((COMB_FILTER *)(ptr->combs + 2*i))->buflen; else ((COMB_FILTER *)(ptr->combs + 2*i))->buflen = ENH_STEREO_RATIO * ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen; } else { if (i % 2 == 0) ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen = ((COMB_FILTER *)(ptr->combs + 2*i))->buflen; else ((COMB_FILTER *)(ptr->combs + 2*i))->buflen = ((COMB_FILTER *)(ptr->combs + 2*i+1))->buflen; } } for (i = 0; i < ptr->num_allps / 2; i++) { ((ALLP_FILTER *)(ptr->allps + 2*i))->fb_gain = powf(0.001f, 11000.0f * ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen / powf(((ALLP_FILTER *)(ptr->allps + 2*i))->feedback/100.0f, 0.88f) / *(ptr->decay) / ptr->sample_rate); ((ALLP_FILTER *)(ptr->allps + 2*i+1))->fb_gain = ((ALLP_FILTER *)(ptr->allps + 2*i))->fb_gain; ((ALLP_FILTER *)(ptr->allps + 2*i))->in_gain = -0.06f / (((ALLP_FILTER *)(ptr->allps + 2 * i))->feedback/100.0f) / powf((*(ptr->decay) + 3500.0f) / 10000.0f, 1.5f); ((ALLP_FILTER *)(ptr->allps + 2*i+1))->in_gain = ((ALLP_FILTER *)(ptr->allps + 2*i))->in_gain; if (*(ptr->stereo_enh) > 0.0f) { if (i % 2 == 0) ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = ENH_STEREO_RATIO * ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen; else ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = ENH_STEREO_RATIO * ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen; } else { if (i % 2 == 0) ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen = ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen; else ((ALLP_FILTER *)(ptr->allps + 2*i))->buflen = ((ALLP_FILTER *)(ptr->allps + 2*i+1))->buflen; } } } /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Reverb(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { unsigned long i; LADSPA_Handle * p; Reverb * ptr = NULL; if ((p = malloc(sizeof(Reverb))) != NULL) { ((Reverb *)p)->sample_rate = SampleRate; ((Reverb *)p)->run_adding_gain = 1.0f; ptr = (Reverb *)p; /* allocate memory for comb/allpass filters and other dynamic vars */ if ((ptr->combs = calloc(2 * MAX_COMBS, sizeof(COMB_FILTER))) == NULL) return NULL; for (i = 0; i < 2 * MAX_COMBS; i++) { if ((((COMB_FILTER *)(ptr->combs + i))->ringbuffer = calloc((unsigned long)MAX_COMB_DELAY * ptr->sample_rate / 1000, sizeof(LADSPA_Data))) == NULL) return NULL; if ((((COMB_FILTER *)(ptr->combs + i))->buffer_pos = calloc(1, sizeof(unsigned long))) == NULL) return NULL; if ((((COMB_FILTER *)(ptr->combs + i))->filter = calloc(1, sizeof(biquad))) == NULL) return NULL; } if ((ptr->allps = calloc(2 * MAX_ALLPS, sizeof(ALLP_FILTER))) == NULL) return NULL; for (i = 0; i < 2 * MAX_ALLPS; i++) { if ((((ALLP_FILTER *)(ptr->allps + i))->ringbuffer = calloc((unsigned long)MAX_ALLP_DELAY * ptr->sample_rate / 1000, sizeof(LADSPA_Data))) == NULL) return NULL; if ((((ALLP_FILTER *)(ptr->allps + i))->buffer_pos = calloc(1, sizeof(unsigned long))) == NULL) return NULL; } if ((ptr->low_pass = calloc(2, sizeof(biquad))) == NULL) return NULL; if ((ptr->high_pass = calloc(2, sizeof(biquad))) == NULL) return NULL; return p; } return NULL; } /* activate a plugin instance */ void activate_Reverb(LADSPA_Handle Instance) { Reverb * ptr = (Reverb *)Instance; unsigned long i,j; for (i = 0; i < 2 * MAX_COMBS; i++) { for (j = 0; j < (unsigned long)MAX_COMB_DELAY * ptr->sample_rate / 1000; j++) ((COMB_FILTER *)(ptr->combs + i))->ringbuffer[j] = 0.0f; *(((COMB_FILTER *)(ptr->combs + i))->buffer_pos) = 0; ((COMB_FILTER *)(ptr->combs + i))->last_out = 0; biquad_init(((COMB_FILTER *)(ptr->combs + i))->filter); } for (i = 0; i < 2 * MAX_ALLPS; i++) { for (j = 0; j < (unsigned long)MAX_ALLP_DELAY * ptr->sample_rate / 1000; j++) ((ALLP_FILTER *)(ptr->allps + i))->ringbuffer[j] = 0.0f; *(((ALLP_FILTER *)(ptr->allps + i))->buffer_pos) = 0; ((ALLP_FILTER *)(ptr->allps + i))->last_out = 0; } biquad_init(ptr->low_pass); biquad_init((biquad *)(ptr->low_pass + 1)); biquad_init(ptr->high_pass); biquad_init((biquad *)(ptr->high_pass + 1)); ptr->old_decay = -10.0f; ptr->old_stereo_enh = -10.0f; ptr->old_mode = -10.0f; } /* Connect a port to a data location. */ void connect_port_Reverb(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Reverb * ptr = (Reverb *)Instance; switch (Port) { case DECAY: ptr->decay = DataLocation; break; case DRYLEVEL: ptr->drylevel = DataLocation; break; case WETLEVEL: ptr->wetlevel = DataLocation; break; case COMBS_EN: ptr->combs_en = DataLocation; break; case ALLPS_EN: ptr->allps_en = DataLocation; break; case BANDPASS_EN: ptr->bandpass_en = DataLocation; break; case STEREO_ENH: ptr->stereo_enh = DataLocation; break; case MODE: ptr->mode = DataLocation; break; case INPUT_L: ptr->input_L = DataLocation; break; case OUTPUT_L: ptr->output_L = DataLocation; break; case INPUT_R: ptr->input_R = DataLocation; break; case OUTPUT_R: ptr->output_R = DataLocation; break; } } void run_Reverb(LADSPA_Handle Instance, unsigned long SampleCount) { Reverb * ptr = (Reverb *)Instance; unsigned long sample_index; unsigned int i; LADSPA_Data decay = LIMIT(*(ptr->decay),0.0f,10000.0f); LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-70.0f,10.0f)); LADSPA_Data combs_en = LIMIT(*(ptr->combs_en),-2.0f,2.0f); LADSPA_Data allps_en = LIMIT(*(ptr->allps_en),-2.0f,2.0f); LADSPA_Data bandpass_en = LIMIT(*(ptr->bandpass_en),-2.0f,2.0f); LADSPA_Data stereo_enh = LIMIT(*(ptr->stereo_enh),-2.0f,2.0f); LADSPA_Data mode = LIMIT(*(ptr->mode),0,NUM_MODES-1); LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_R = ptr->output_R; rev_t out_L = 0; rev_t out_R = 0; rev_t in_L = 0; rev_t in_R = 0; rev_t combs_out_L = 0; rev_t combs_out_R = 0; /* see if the user changed any control since last run */ if ((ptr->old_decay != decay) || (ptr->old_stereo_enh != stereo_enh) || (ptr->old_mode != mode)) { /* re-compute reverberator coefficients */ comp_coeffs(Instance); /* save new values */ ptr->old_decay = decay; ptr->old_stereo_enh = stereo_enh; ptr->old_mode = mode; } for (sample_index = 0; sample_index < SampleCount; sample_index++) { #ifdef REVERB_CALC_FLOAT in_L = *(input_L++); in_R = *(input_R++); #else in_L = (sample)((float)F2S * *(input_L++)); in_R = (sample)((float)F2S * *(input_R++)); #endif combs_out_L = in_L; combs_out_R = in_R; /* process comb filters */ if (combs_en > 0.0f) { for (i = 0; i < ptr->num_combs / 2; i++) { combs_out_L += comb_run(in_L, ((COMB_FILTER *)(ptr->combs + 2*i))); combs_out_R += comb_run(in_R, ((COMB_FILTER *)(ptr->combs + 2*i+1))); } } /* process allpass filters */ if (allps_en > 0.0f) { for (i = 0; i < ptr->num_allps / 2; i++) { combs_out_L += allp_run(combs_out_L, ((ALLP_FILTER *)(ptr->allps + 2*i))); combs_out_R += allp_run(combs_out_R, ((ALLP_FILTER *)(ptr->allps + 2*i+1))); } } /* process bandpass filters */ if (bandpass_en > 0.0f) { combs_out_L = biquad_run(((biquad *)(ptr->low_pass)), combs_out_L); combs_out_L = biquad_run(((biquad *)(ptr->high_pass)), combs_out_L); combs_out_R = biquad_run(((biquad *)(ptr->low_pass + 1)), combs_out_R); combs_out_R = biquad_run(((biquad *)(ptr->high_pass + 1)), combs_out_R); } #ifdef REVERB_CALC_FLOAT out_L = in_L * drylevel + combs_out_L * wetlevel; out_R = in_R * drylevel + combs_out_R * wetlevel; *(output_L++) = out_L; *(output_R++) = out_R; #else out_L = (sample)((float)in_L * drylevel + (float)combs_out_L * wetlevel); out_R = (sample)((float)in_R * drylevel + (float)combs_out_R * wetlevel); *(output_L++) = (float)out_L / (float)F2S; *(output_R++) = (float)out_R / (float)F2S; #endif } } void set_run_adding_gain(LADSPA_Handle Instance, LADSPA_Data gain){ Reverb * ptr; ptr = (Reverb *)Instance; ptr->run_adding_gain = gain; } void run_adding_gain_Reverb(LADSPA_Handle Instance, unsigned long SampleCount) { Reverb * ptr = (Reverb *)Instance; unsigned long sample_index; unsigned int i; LADSPA_Data decay = LIMIT(*(ptr->decay),0.0f,10000.0f); LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-70.0f,10.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-70.0f,10.0f)); LADSPA_Data combs_en = LIMIT(*(ptr->combs_en),-2.0f,2.0f); LADSPA_Data allps_en = LIMIT(*(ptr->allps_en),-2.0f,2.0f); LADSPA_Data bandpass_en = LIMIT(*(ptr->bandpass_en),-2.0f,2.0f); LADSPA_Data stereo_enh = LIMIT(*(ptr->stereo_enh),-2.0f,2.0f); LADSPA_Data mode = LIMIT(*(ptr->mode),0,NUM_MODES-1); LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_R = ptr->output_R; rev_t out_L = 0; rev_t out_R = 0; rev_t in_L = 0; rev_t in_R = 0; rev_t combs_out_L = 0; rev_t combs_out_R = 0; /* see if the user changed any control since last run */ if ((ptr->old_decay != decay) || (ptr->old_stereo_enh != stereo_enh) || (ptr->old_mode != mode)) { /* re-compute reverberator coefficients */ comp_coeffs(Instance); /* save new values */ ptr->old_decay = decay; ptr->old_stereo_enh = stereo_enh; ptr->old_mode = mode; } for (sample_index = 0; sample_index < SampleCount; sample_index++) { #ifdef REVERB_CALC_FLOAT in_L = *(input_L++); in_R = *(input_R++); #else in_L = (sample)((float)F2S * *(input_L++)); in_R = (sample)((float)F2S * *(input_R++)); #endif combs_out_L = in_L; combs_out_R = in_R; /* process comb filters */ if (combs_en > 0.0f) { for (i = 0; i < ptr->num_combs / 2; i++) { combs_out_L += comb_run(in_L, ((COMB_FILTER *)(ptr->combs + 2*i))); combs_out_R += comb_run(in_R, ((COMB_FILTER *)(ptr->combs + 2*i+1))); } } /* process allpass filters */ if (allps_en > 0.0f) { for (i = 0; i < ptr->num_allps / 2; i++) { combs_out_L += allp_run(combs_out_L, ((ALLP_FILTER *)(ptr->allps + 2*i))); combs_out_R += allp_run(combs_out_R, ((ALLP_FILTER *)(ptr->allps + 2*i+1))); } } /* process bandpass filters */ if (bandpass_en > 0.0f) { combs_out_L = biquad_run(((biquad *)(ptr->low_pass)), combs_out_L); combs_out_L = biquad_run(((biquad *)(ptr->high_pass)), combs_out_L); combs_out_R = biquad_run(((biquad *)(ptr->low_pass + 1)), combs_out_R); combs_out_R = biquad_run(((biquad *)(ptr->high_pass + 1)), combs_out_R); } #ifdef REVERB_CALC_FLOAT out_L = in_L * drylevel + combs_out_L * wetlevel; out_R = in_R * drylevel + combs_out_R * wetlevel; *(output_L++) += out_L * ptr->run_adding_gain; *(output_R++) += out_R * ptr->run_adding_gain; #else out_L = (sample)((float)in_L * drylevel + (float)combs_out_L * wetlevel); out_R = (sample)((float)in_R * drylevel + (float)combs_out_R * wetlevel); *(output_L++) += (float)out_L * ptr->run_adding_gain / (float)F2S; *(output_R++) += (float)out_R * ptr->run_adding_gain / (float)F2S; #endif } } /* Throw away a Reverb effect instance. */ void cleanup_Reverb(LADSPA_Handle Instance) { int i; Reverb * ptr = (Reverb *)Instance; /* free memory allocated for comb/allpass filters & co. in instantiate_Reverb() */ for (i = 0; i < 2 * MAX_COMBS; i++) { free(((COMB_FILTER *)(ptr->combs + i))->ringbuffer); free(((COMB_FILTER *)(ptr->combs + i))->buffer_pos); free(((COMB_FILTER *)(ptr->combs + i))->filter); } for (i = 0; i < 2 * MAX_ALLPS; i++) { free(((ALLP_FILTER *)(ptr->allps + i))->ringbuffer); free(((ALLP_FILTER *)(ptr->allps + i))->buffer_pos); } free(ptr->combs); free(ptr->allps); free(ptr->low_pass); free(ptr->high_pass); free(Instance); } LADSPA_Descriptor * stereo_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((stereo_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); /* init the stereo Reverb */ stereo_descriptor->UniqueID = ID_STEREO; stereo_descriptor->Label = strdup("tap_reverb"); stereo_descriptor->Properties = 0; stereo_descriptor->Name = strdup("TAP Reverberator"); stereo_descriptor->Maker = strdup("Tom Szilagyi"); stereo_descriptor->Copyright = strdup("GPL"); stereo_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[DECAY] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[COMBS_EN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[ALLPS_EN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[BANDPASS_EN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[STEREO_ENH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[MODE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); stereo_descriptor->PortNames = (const char **)port_names; port_names[DECAY] = strdup("Decay [ms]"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[WETLEVEL] = strdup("Wet Level [dB]"); port_names[COMBS_EN] = strdup("Comb Filters"); port_names[ALLPS_EN] = strdup("Allpass Filters"); port_names[BANDPASS_EN] = strdup("Bandpass Filter"); port_names[STEREO_ENH] = strdup("Enhanced Stereo"); port_names[MODE] = strdup("Reverb Type"); port_names[INPUT_L] = strdup("Input Left"); port_names[OUTPUT_L] = strdup("Output Left"); port_names[INPUT_R] = strdup("Input Right"); port_names[OUTPUT_R] = strdup("Output Right"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[DECAY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[DECAY].LowerBound = 0; port_range_hints[DECAY].UpperBound = MAX_DECAY; port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[DRYLEVEL].LowerBound = -70.0f; port_range_hints[DRYLEVEL].UpperBound = +10.0f; port_range_hints[WETLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[WETLEVEL].LowerBound = -70.0f; port_range_hints[WETLEVEL].UpperBound = +10.0f; port_range_hints[COMBS_EN].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_1); port_range_hints[ALLPS_EN].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_1); port_range_hints[BANDPASS_EN].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_1); port_range_hints[STEREO_ENH].HintDescriptor = (LADSPA_HINT_TOGGLED | LADSPA_HINT_DEFAULT_1); port_range_hints[MODE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0); port_range_hints[MODE].LowerBound = 0; port_range_hints[MODE].UpperBound = NUM_MODES - 0.9f; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; stereo_descriptor->instantiate = instantiate_Reverb; stereo_descriptor->connect_port = connect_port_Reverb; stereo_descriptor->activate = activate_Reverb; stereo_descriptor->run = run_Reverb; stereo_descriptor->run_adding = run_adding_gain_Reverb; stereo_descriptor->set_run_adding_gain = set_run_adding_gain; stereo_descriptor->deactivate = NULL; stereo_descriptor->cleanup = cleanup_Reverb; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return stereo_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_reverb.h000066400000000000000000000163571247673406200216030ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_reverb.h,v 1.10 2004/06/14 16:43:55 tszilagyi Exp $ */ #ifndef _ISOC99_SOURCE #define _ISOC99_SOURCE #endif #include /* The Unique ID of the plugin: */ #define ID_STEREO 2142 /* The port numbers for the plugin: */ #define DECAY 0 #define DRYLEVEL 1 #define WETLEVEL 2 #define COMBS_EN 3 /* comb filters on/off */ #define ALLPS_EN 4 /* allpass filters on/off */ #define BANDPASS_EN 5 /* bandpass filters on/off */ #define STEREO_ENH 6 /* stereo enhanced mode on/off */ #define MODE 7 #define INPUT_L 8 #define OUTPUT_L 9 #define INPUT_R 10 #define OUTPUT_R 11 /* Total number of ports */ #define PORTCOUNT_STEREO 12 /* Global constants (times in ms, bwidth in octaves) */ #define MAX_COMBS 20 #define MAX_ALLPS 20 #define MAX_DECAY 10000.0f #define MAX_COMB_DELAY 250.0f #define MAX_ALLP_DELAY 20.0f #define BANDPASS_BWIDTH 1.5f #define FREQ_RESP_BWIDTH 3.0f #define ENH_STEREO_RATIO 0.998f /* compensation ratio of freq_resp in fb_gain calc */ #define FR_R_COMP 0.75f #ifndef M_PI #define M_PI 3.14159265358979323846264338327 #endif /* push a sample into a ringbuffer and return the sample falling out */ static inline rev_t push_buffer(rev_t insample, rev_t * buffer, unsigned long buflen, unsigned long * pos) { rev_t outsample; outsample = buffer[*pos]; buffer[(*pos)++] = insample; if (*pos >= buflen) *pos = 0; return outsample; } /* read a value from a ringbuffer. * n == 0 returns the oldest sample from the buffer. * n == buflen-1 returns the sample written to the buffer * at the last push_buffer call. * n must not exceed buflen-1, or your computer will explode. */ static inline rev_t read_buffer(rev_t * buffer, unsigned long buflen, unsigned long pos, unsigned long n) { while (n + pos >= buflen) n -= buflen; return buffer[n + pos]; } /* overwrites a value in a ringbuffer, but pos stays the same. * n == 0 overwrites the oldest sample pushed in the buffer. * n == buflen-1 overwrites the sample written to the buffer * at the last push_buffer call. * n must not exceed buflen-1, or your computer... you know. */ static inline void write_buffer(rev_t insample, rev_t * buffer, unsigned long buflen, unsigned long pos, unsigned long n) { while (n + pos >= buflen) n -= buflen; buffer[n + pos] = insample; } #define db2lin(x) ((x) > -90.0f ? powf(10.0f, (x) * 0.05f) : 0.0f) #define ABS(x) (x)>0.0f?(x):-1.0f*(x) #define LN_2_2 0.34657359f #define LIMIT(v,l,u) ((v)<(l)?(l):((v)>(u)?(u):(v))) #define BIQUAD_TYPE float typedef BIQUAD_TYPE bq_t; typedef struct { bq_t a1; bq_t a2; bq_t b0; bq_t b1; bq_t b2; rev_t x1; rev_t x2; rev_t y1; rev_t y2; } biquad; static inline void biquad_init(biquad *f) { f->x1 = 0.0f; f->x2 = 0.0f; f->y1 = 0.0f; f->y2 = 0.0f; } static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0f, fs/2.0f) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t J = pow(10.0f, gain * 0.025f); bq_t g = sw * sinhf(LN_2_2 * LIMIT(bw, 0.0001f, 4.0f) * w / sw); bq_t a0r = 1.0f / (1.0f + (g / J)); f->b0 = (1.0f + (g * J)) * a0r; f->b1 = (-2.0f * cw) * a0r; f->b2 = (1.0f - (g * J)) * a0r; f->a1 = -(f->b1); f->a2 = ((g / J) - 1.0f) * a0r; } static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); f->b0 = a0r * (1.0 - cs) * 0.5; f->b1 = a0r * (1.0 - cs); f->b2 = a0r * (1.0 - cs) * 0.5; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline void hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); f->b0 = a0r * (1.0 + cs) * 0.5; f->b1 = a0r * -(1.0 + cs); f->b2 = a0r * (1.0 + cs) * 0.5; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline rev_t biquad_run(biquad *f, rev_t x) { union { rev_t y; uint32_t y_int; } u; u.y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + f->a1 * f->y1 + f->a2 * f->y2; #ifdef REVERB_CALC_FLOAT if ((u.y_int & 0x7f800000) == 0) u.y = 0.0f; #endif f->x2 = f->x1; f->x1 = x; f->y2 = f->y1; f->y1 = u.y; return u.y; } typedef struct { float feedback; float fb_gain; float freq_resp; rev_t * ringbuffer; unsigned long buflen; unsigned long * buffer_pos; biquad * filter; rev_t last_out; } COMB_FILTER; typedef struct { float feedback; float fb_gain; float in_gain; rev_t * ringbuffer; unsigned long buflen; unsigned long * buffer_pos; rev_t last_out; } ALLP_FILTER; /* The structure used to hold port connection information and state */ typedef struct { unsigned long num_combs; /* total number of comb filters */ unsigned long num_allps; /* total number of allpass filters */ COMB_FILTER * combs; ALLP_FILTER * allps; biquad * low_pass; /* ptr to 2 low-pass filters */ biquad * high_pass; /* ptr to 2 high-pass filters */ unsigned long sample_rate; LADSPA_Data * decay; LADSPA_Data * drylevel; LADSPA_Data * wetlevel; LADSPA_Data * combs_en; /* on/off */ LADSPA_Data * allps_en; /* on/off */ LADSPA_Data * bandpass_en; /* on/off */ LADSPA_Data * stereo_enh; /* on/off */ LADSPA_Data * mode; LADSPA_Data * input_L; LADSPA_Data * output_L; LADSPA_Data * input_R; LADSPA_Data * output_R; LADSPA_Data old_decay; LADSPA_Data old_stereo_enh; LADSPA_Data old_mode; LADSPA_Data run_adding_gain; } Reverb; typedef struct { LADSPA_Data delay; LADSPA_Data feedback; LADSPA_Data freq_resp; } COMB_DATA; typedef struct { LADSPA_Data delay; LADSPA_Data feedback; } ALLP_DATA; typedef struct { unsigned long num_combs; unsigned long num_allps; COMB_DATA combs[MAX_COMBS]; ALLP_DATA allps[MAX_ALLPS]; LADSPA_Data bandpass_low; LADSPA_Data bandpass_high; } REVERB_DATA; lmms-1.1.3/plugins/LadspaEffect/tap/tap_reverb_presets.h000066400000000000000000000734321247673406200233450ustar00rootroot00000000000000/* Copyright (C) 2004 Tom Szilagyi This file is the output of TAP Reverb Editor, and is part of TAP Reverberator. Please use TAP Reverb Editor to re-generate this file, rather than editing by hand. Visit http://tap-plugins.sf.net for more info. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "tap_reverb.h" /* Number of reverb presets */ #define NUM_MODES 43 /* Reverb Type data */ REVERB_DATA reverb_data[NUM_MODES] = { { 5, 5, { {0.1015f, 70.22f, 0.4845f}, {0.1042f, 80.76f, 0.4000f}, {0.1108f, 65.25f, 0.4000f}, {0.1309f, 80.00f, 0.5342f}, {0.1386f, 52.84f, 0.4000f}, }, { {0.0067f, 65.00f}, {0.0061f, 65.00f}, {0.0059f, 65.00f}, {0.0055f, 65.00f}, {0.0101f, 80.00f}, }, 400.0f, 10000.0f, }, { 5, 5, { {0.1077f, 70.22f, 0.4845f}, {0.1124f, 80.76f, 0.4000f}, {0.1185f, 65.25f, 0.4000f}, {0.1866f, 80.00f, 0.5342f}, {0.1943f, 52.84f, 0.4000f}, }, { {0.0067f, 65.00f}, {0.0061f, 65.00f}, {0.0059f, 65.00f}, {0.0055f, 65.00f}, {0.0101f, 80.00f}, }, 400.0f, 10000.0f, }, { 6, 4, { {0.0251f, 64.80f, 0.2026f}, {0.0306f, 70.48f, 0.2731f}, {0.0350f, 67.40f, 0.5727f}, {0.0405f, 72.69f, 0.3128f}, {0.0449f, 61.23f, 0.7225f}, {0.0515f, 67.84f, 0.6167f}, }, { {0.0056f, 75.00f}, {0.0051f, 90.00f}, {0.0048f, 85.00f}, {0.0044f, 70.00f}, }, 80.0f, 15000.0f, }, { 6, 8, { {0.0251f, 64.80f, 0.2026f}, {0.0306f, 70.48f, 0.2731f}, {0.0350f, 67.40f, 0.5727f}, {0.0405f, 72.69f, 0.3128f}, {0.0449f, 61.23f, 0.7225f}, {0.0515f, 67.84f, 0.6167f}, }, { {0.0056f, 75.00f}, {0.0051f, 90.00f}, {0.0048f, 85.00f}, {0.0044f, 70.00f}, {0.0014f, 45.51f}, {0.0015f, 77.95f}, {0.0017f, 65.47f}, {0.0019f, 57.57f}, }, 80.0f, 15000.0f, }, { 8, 11, { {0.0251f, 64.80f, 0.2026f}, {0.0306f, 70.48f, 0.2731f}, {0.0350f, 67.40f, 0.5727f}, {0.0405f, 72.69f, 0.3128f}, {0.0449f, 61.23f, 0.7225f}, {0.0515f, 67.84f, 0.6167f}, {0.0800f, 53.77f, 0.7048f}, {0.0899f, 45.48f, 0.6960f}, }, { {0.0056f, 75.00f}, {0.0051f, 90.00f}, {0.0048f, 85.00f}, {0.0044f, 70.00f}, {0.0014f, 45.51f}, {0.0015f, 77.95f}, {0.0017f, 65.47f}, {0.0019f, 57.57f}, {0.0071f, 60.00f}, {0.0111f, 80.00f}, {0.0126f, 70.00f}, }, 80.0f, 15000.0f, }, { 8, 4, { {0.2236f, 62.93f, 0.3416f}, {0.2329f, 75.14f, 0.3602f}, {0.2390f, 70.34f, 0.2687f}, {0.2438f, 82.99f, 0.5093f}, {0.2499f, 89.97f, 0.2467f}, {0.2282f, 60.75f, 0.3416f}, {0.1392f, 55.00f, 0.3744f}, {0.1348f, 75.00f, 0.2467f}, }, { {0.0167f, 75.00f}, {0.0163f, 65.00f}, {0.0158f, 85.00f}, {0.0155f, 80.00f}, }, 100.0f, 6500.0f, }, { 10, 7, { {0.2236f, 62.93f, 0.3416f}, {0.2329f, 75.14f, 0.3602f}, {0.2390f, 70.34f, 0.2687f}, {0.2438f, 82.99f, 0.5093f}, {0.2499f, 89.97f, 0.2467f}, {0.2282f, 60.75f, 0.3416f}, {0.2352f, 52.90f, 0.3106f}, {0.1392f, 55.00f, 0.3744f}, {0.1469f, 68.00f, 0.5771f}, {0.1348f, 75.00f, 0.2467f}, }, { {0.0167f, 75.00f}, {0.0163f, 65.00f}, {0.0158f, 85.00f}, {0.0155f, 80.00f}, {0.0064f, 85.00f}, {0.0068f, 75.00f}, {0.0072f, 65.00f}, }, 100.0f, 6500.0f, }, { 5, 7, { {0.0520f, 70.22f, 0.4720f}, {0.0598f, 80.76f, 0.4000f}, {0.0644f, 65.25f, 0.4000f}, {0.0737f, 80.00f, 0.6957f}, {0.0845f, 52.84f, 0.7205f}, }, { {0.0049f, 67.11f}, {0.0069f, 59.05f}, {0.0073f, 87.59f}, {0.0079f, 59.67f}, {0.0085f, 65.87f}, {0.0095f, 75.18f}, {0.0100f, 71.46f}, }, 400.0f, 10000.0f, }, { 5, 4, { {0.0280f, 82.20f, 0.4720f}, {0.0303f, 80.20f, 0.5652f}, {0.0325f, 77.30f, 0.6211f}, {0.0389f, 75.30f, 0.5217f}, {0.0415f, 59.67f, 0.6522f}, }, { {0.0067f, 65.00f}, {0.0061f, 65.00f}, {0.0059f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 10000.0f, }, { 5, 5, { {0.0280f, 82.20f, 0.4720f}, {0.0303f, 80.20f, 0.5652f}, {0.0325f, 77.30f, 0.6211f}, {0.0389f, 75.30f, 0.5217f}, {0.0415f, 59.67f, 0.6522f}, }, { {0.0067f, 75.00f}, {0.0061f, 65.00f}, {0.0059f, 65.00f}, {0.0055f, 65.00f}, {0.0071f, 75.00f}, }, 200.0f, 15000.0f, }, { 6, 5, { {0.1015f, 70.22f, 0.4845f}, {0.1042f, 80.76f, 0.4000f}, {0.1108f, 65.25f, 0.4000f}, {0.1309f, 80.00f, 0.5342f}, {0.1386f, 52.84f, 0.4000f}, {0.0520f, 72.08f, 0.4000f}, }, { {0.0067f, 65.00f}, {0.0061f, 65.00f}, {0.0059f, 65.00f}, {0.0055f, 65.00f}, {0.0101f, 80.00f}, }, 400.0f, 10000.0f, }, { 7, 4, { {0.0536f, 82.20f, 0.3416f}, {0.0629f, 52.84f, 0.3602f}, {0.0690f, 77.30f, 0.3168f}, {0.0738f, 75.30f, 0.5093f}, {0.0799f, 59.67f, 0.3106f}, {0.1634f, 80.00f, 0.5652f}, {0.1680f, 80.00f, 0.5714f}, }, { {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0063f, 71.46f}, {0.0069f, 80.00f}, }, 600.0f, 18000.0f, }, { 7, 7, { {0.0536f, 82.20f, 0.3416f}, {0.0629f, 52.84f, 0.3602f}, {0.0690f, 77.30f, 0.3168f}, {0.0738f, 75.30f, 0.5093f}, {0.0799f, 59.67f, 0.3106f}, {0.1634f, 80.00f, 0.5652f}, {0.1680f, 80.00f, 0.5714f}, }, { {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0063f, 71.46f}, {0.0069f, 80.00f}, {0.0121f, 80.00f}, {0.0127f, 66.49f}, {0.0137f, 88.21f}, }, 600.0f, 18000.0f, }, { 5, 4, { {0.0536f, 82.20f, 0.4783f}, {0.0629f, 52.84f, 0.4348f}, {0.0690f, 77.30f, 0.5000f}, {0.0738f, 75.30f, 0.4500f}, {0.0799f, 59.67f, 0.4500f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 8000.0f, }, { 5, 4, { {0.0536f, 82.20f, 0.4000f}, {0.0629f, 52.84f, 0.4348f}, {0.0690f, 77.30f, 0.5000f}, {0.0738f, 75.30f, 0.4500f}, {0.0799f, 59.67f, 0.4500f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 8000.0f, }, { 5, 4, { {0.0586f, 82.20f, 0.4000f}, {0.0679f, 52.84f, 0.4348f}, {0.0740f, 77.30f, 0.5000f}, {0.0788f, 75.30f, 0.4500f}, {0.0849f, 59.67f, 0.4500f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 8000.0f, }, { 5, 7, { {0.0586f, 82.20f, 0.4000f}, {0.0679f, 52.84f, 0.4348f}, {0.0740f, 77.30f, 0.5000f}, {0.0788f, 75.30f, 0.4500f}, {0.0849f, 59.67f, 0.4500f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0141f, 80.00f}, {0.0133f, 57.19f}, {0.0151f, 65.25f}, }, 100.0f, 8000.0f, }, { 5, 4, { {0.0506f, 82.20f, 0.3416f}, {0.0599f, 52.84f, 0.3602f}, {0.0660f, 77.30f, 0.3168f}, {0.0708f, 75.30f, 0.5093f}, {0.0769f, 59.67f, 0.3106f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 8000.0f, }, { 5, 4, { {0.0536f, 82.20f, 0.3416f}, {0.0629f, 52.84f, 0.3602f}, {0.0690f, 77.30f, 0.3168f}, {0.0738f, 75.30f, 0.5093f}, {0.0799f, 59.67f, 0.3106f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 8000.0f, }, { 7, 4, { {0.0536f, 82.20f, 0.3416f}, {0.0629f, 52.84f, 0.3602f}, {0.0690f, 77.30f, 0.3168f}, {0.0738f, 75.30f, 0.5093f}, {0.0799f, 59.67f, 0.3106f}, {0.0582f, 77.66f, 0.3416f}, {0.0652f, 68.35f, 0.3106f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 8000.0f, }, { 7, 6, { {0.0536f, 82.20f, 0.3416f}, {0.0629f, 52.84f, 0.3602f}, {0.0690f, 77.30f, 0.3168f}, {0.0738f, 75.30f, 0.5093f}, {0.0799f, 59.67f, 0.3106f}, {0.0582f, 77.66f, 0.3416f}, {0.0652f, 68.35f, 0.3106f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0126f, 70.84f}, {0.0138f, 86.35f}, }, 100.0f, 8000.0f, }, { 4, 4, { {0.0752f, 61.53f, 0.4000f}, {0.0536f, 28.64f, 0.4000f}, {0.0907f, 85.11f, 0.4000f}, {0.0660f, 47.88f, 0.4000f}, }, { {0.0039f, 80.00f}, {0.0043f, 70.84f}, {0.0045f, 58.43f}, {0.0049f, 43.53f}, }, 50.0f, 10000.0f, }, { 4, 4, { {0.1742f, 47.26f, 0.4783f}, {0.1526f, 23.06f, 0.1863f}, {0.2021f, 72.08f, 0.4000f}, {0.2175f, 90.07f, 0.4000f}, }, { {0.0039f, 80.00f}, {0.0043f, 70.84f}, {0.0045f, 58.43f}, {0.0049f, 43.53f}, }, 50.0f, 10000.0f, }, { 4, 2, { {0.0969f, 52.22f, 0.6149f}, {0.0984f, 54.70f, 0.6025f}, {0.1000f, 80.00f, 0.5217f}, {0.1015f, 53.46f, 0.2671f}, }, { {0.0017f, 46.64f}, {0.0021f, 47.88f}, }, 100.0f, 13000.0f, }, { 4, 2, { {0.1526f, 52.22f, 0.6149f}, {0.1541f, 65.87f, 0.6025f}, {0.1557f, 80.00f, 0.5217f}, {0.1572f, 53.46f, 0.2671f}, }, { {0.0075f, 46.64f}, {0.0078f, 47.88f}, }, 100.0f, 13000.0f, }, { 4, 2, { {0.2082f, 52.22f, 0.6149f}, {0.2098f, 54.70f, 0.6025f}, {0.2113f, 80.00f, 0.5217f}, {0.2129f, 53.46f, 0.2671f}, }, { {0.0075f, 46.64f}, {0.0078f, 47.88f}, }, 100.0f, 13000.0f, }, { 6, 4, { {0.0536f, 82.20f, 0.4000f}, {0.0629f, 75.80f, 0.5901f}, {0.0690f, 77.30f, 0.5000f}, {0.0738f, 75.30f, 0.4500f}, {0.0799f, 59.67f, 0.4500f}, {0.1170f, 74.56f, 0.4783f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 13000.0f, }, { 6, 4, { {0.0536f, 82.20f, 0.4000f}, {0.0629f, 75.80f, 0.5901f}, {0.0690f, 77.30f, 0.5000f}, {0.0738f, 75.30f, 0.4500f}, {0.0799f, 59.67f, 0.4500f}, {0.1727f, 74.56f, 0.5590f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 13000.0f, }, { 6, 4, { {0.0814f, 82.20f, 0.4000f}, {0.0892f, 75.80f, 0.5901f}, {0.0953f, 77.30f, 0.5000f}, {0.1046f, 75.30f, 0.5714f}, {0.1108f, 59.67f, 0.4500f}, {0.1912f, 39.81f, 0.6832f}, }, { {0.0073f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 100.0f, 13000.0f, }, { 6, 6, { {0.0814f, 82.20f, 0.4000f}, {0.0892f, 75.80f, 0.5901f}, {0.0953f, 77.30f, 0.5000f}, {0.1046f, 75.30f, 0.5714f}, {0.1108f, 59.67f, 0.4500f}, {0.1912f, 39.81f, 0.6832f}, }, { {0.0073f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0164f, 66.49f}, {0.0181f, 56.57f}, }, 100.0f, 13000.0f, }, { 5, 4, { {0.1170f, 82.20f, 0.5466f}, {0.1232f, 75.18f, 0.4907f}, {0.1309f, 69.60f, 0.6335f}, {0.1417f, 49.74f, 0.6957f}, {0.1526f, 59.67f, 0.5528f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 1000.0f, 10000.0f, }, { 5, 6, { {0.1170f, 82.20f, 0.5466f}, {0.1232f, 75.18f, 0.4907f}, {0.1309f, 69.60f, 0.6335f}, {0.1417f, 49.74f, 0.6957f}, {0.1526f, 59.67f, 0.5528f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0143f, 56.57f}, {0.0153f, 66.49f}, }, 1000.0f, 10000.0f, }, { 6, 4, { {0.1170f, 82.20f, 0.6398f}, {0.1232f, 75.18f, 0.7453f}, {0.1309f, 69.60f, 0.6398f}, {0.1417f, 49.74f, 0.6957f}, {0.1526f, 59.67f, 0.7205f}, {0.1634f, 84.49f, 0.7453f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 2000.0f, 15000.0f, }, { 6, 6, { {0.1170f, 82.20f, 0.6398f}, {0.1232f, 75.18f, 0.7453f}, {0.1309f, 69.60f, 0.6398f}, {0.1417f, 49.74f, 0.6957f}, {0.1526f, 59.67f, 0.7205f}, {0.1634f, 84.49f, 0.7453f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0128f, 80.00f}, {0.0136f, 88.83f}, }, 2000.0f, 15000.0f, }, { 5, 4, { {0.0506f, 82.20f, 0.6832f}, {0.0599f, 73.94f, 0.6832f}, {0.0660f, 61.53f, 0.7453f}, {0.0708f, 75.30f, 0.7702f}, {0.0769f, 59.67f, 0.8012f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 1000.0f, 7000.0f, }, { 5, 4, { {0.0536f, 82.20f, 0.6832f}, {0.0629f, 73.94f, 0.6832f}, {0.0690f, 61.53f, 0.7453f}, {0.0738f, 75.30f, 0.7702f}, {0.0799f, 59.67f, 0.8012f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 1000.0f, 7000.0f, }, { 5, 4, { {0.0586f, 82.20f, 0.6832f}, {0.0679f, 73.94f, 0.6832f}, {0.0740f, 61.53f, 0.7453f}, {0.0788f, 75.30f, 0.7702f}, {0.0849f, 59.67f, 0.8012f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, }, 1000.0f, 7000.0f, }, { 5, 7, { {0.0586f, 82.20f, 0.6832f}, {0.0679f, 73.94f, 0.6832f}, {0.0740f, 61.53f, 0.7453f}, {0.0788f, 75.30f, 0.7702f}, {0.0849f, 59.67f, 0.8012f}, }, { {0.0067f, 65.00f}, {0.0063f, 65.00f}, {0.0058f, 65.00f}, {0.0055f, 65.00f}, {0.0122f, 80.00f}, {0.0138f, 65.25f}, {0.0143f, 75.00f}, }, 1000.0f, 7000.0f, }, { 5, 4, { {0.0505f, 70.22f, 0.4720f}, {0.0582f, 80.76f, 0.4000f}, {0.0629f, 65.25f, 0.4000f}, {0.0892f, 80.00f, 0.6957f}, {0.0953f, 52.84f, 0.7205f}, }, { {0.0044f, 65.00f}, {0.0037f, 67.11f}, {0.0057f, 80.00f}, {0.0060f, 56.57f}, }, 400.0f, 10000.0f, }, { 5, 6, { {0.0505f, 70.22f, 0.4720f}, {0.0582f, 80.76f, 0.4000f}, {0.0629f, 65.25f, 0.4000f}, {0.0892f, 80.00f, 0.6957f}, {0.0953f, 52.84f, 0.7205f}, }, { {0.0044f, 65.00f}, {0.0037f, 67.11f}, {0.0057f, 80.00f}, {0.0060f, 56.57f}, {0.0142f, 80.00f}, {0.0151f, 59.67f}, }, 400.0f, 10000.0f, }, { 5, 4, { {0.2051f, 52.84f, 0.7826f}, {0.2082f, 68.35f, 0.7019f}, {0.2113f, 80.00f, 0.6832f}, {0.2206f, 83.25f, 0.7081f}, {0.2237f, 67.73f, 0.5280f}, }, { {0.0067f, 65.00f}, {0.0061f, 65.00f}, {0.0059f, 65.00f}, {0.0055f, 65.00f}, }, 400.0f, 10000.0f, }, { 6, 5, { {0.0280f, 82.20f, 0.4720f}, {0.0304f, 80.20f, 0.5652f}, {0.0329f, 77.30f, 0.6211f}, {0.0389f, 75.30f, 0.5217f}, {0.0415f, 59.67f, 0.6522f}, {0.0768f, 80.00f, 0.7702f}, }, { {0.0057f, 65.00f}, {0.0062f, 65.00f}, {0.0066f, 77.04f}, {0.0050f, 65.00f}, {0.0038f, 56.57f}, }, 100.0f, 10000.0f, }, { 6, 7, { {0.0280f, 82.20f, 0.4720f}, {0.0304f, 80.20f, 0.5652f}, {0.0329f, 77.30f, 0.6211f}, {0.0389f, 75.30f, 0.5217f}, {0.0415f, 59.67f, 0.6522f}, {0.0768f, 80.00f, 0.7702f}, }, { {0.0057f, 65.00f}, {0.0062f, 65.00f}, {0.0137f, 77.04f}, {0.0050f, 65.00f}, {0.0038f, 56.57f}, {0.0147f, 60.91f}, {0.0164f, 52.84f}, }, 100.0f, 10000.0f, }, }; lmms-1.1.3/plugins/LadspaEffect/tap/tap_rotspeak.c000066400000000000000000000612501247673406200221310ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_rotspeak.c,v 1.3 2004/02/21 17:33:36 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_STEREO 2149 /* The port numbers for the plugin: */ #define BASSFREQ 0 #define HORNFREQ 1 #define STWIDTH 2 #define HRBAL 3 #define LATENCY 4 #define INPUT_L 5 #define INPUT_R 6 #define OUTPUT_L 7 #define OUTPUT_R 8 /* Total number of ports */ #define PORTCOUNT_STEREO 9 /* * This has to be bigger than 0.3f * sample_rate / (2*PI) for any sample rate. * At 192 kHz 9168 is needed so this should be enough. */ #define PM_DEPTH 9200 /* maximum phase mod freq */ #define PM_FREQ 30.0f /* splitting input signals into low and high freq components */ #define SPLIT_FREQ 1000.0f #define SPLIT_BW 1.0f /* approx. sound velocity in air [m/s] */ #define C_AIR 340.0f /* coefficient between rotating frequency and pitch mod depth (aka. Doppler effect) */ #define FREQ_PITCH 1.6f /* cosine table for fast computations */ LADSPA_Data cos_table[1024]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * hornfreq; LADSPA_Data * bassfreq; LADSPA_Data * stwidth; LADSPA_Data * hrbal; LADSPA_Data * latency; LADSPA_Data * input_L; LADSPA_Data * input_R; LADSPA_Data * output_L; LADSPA_Data * output_R; LADSPA_Data * ringbuffer_h_L; unsigned long buflen_h_L; unsigned long pos_h_L; LADSPA_Data * ringbuffer_h_R; unsigned long buflen_h_R; unsigned long pos_h_R; LADSPA_Data * ringbuffer_b_L; unsigned long buflen_b_L; unsigned long pos_b_L; LADSPA_Data * ringbuffer_b_R; unsigned long buflen_b_R; unsigned long pos_b_R; biquad * eq_filter_L; biquad * lp_filter_L; biquad * hp_filter_L; biquad * eq_filter_R; biquad * lp_filter_R; biquad * hp_filter_R; unsigned long sample_rate; LADSPA_Data phase_h; LADSPA_Data phase_b; LADSPA_Data run_adding_gain; } RotSpkr; void cleanup_RotSpkr(LADSPA_Handle Instance); /* Construct a new plugin instance. */ LADSPA_Handle instantiate_RotSpkr(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = calloc(1, sizeof(RotSpkr))) != NULL) { RotSpkr* rotSpeak = (RotSpkr*)ptr; rotSpeak->sample_rate = sample_rate; rotSpeak->run_adding_gain = 1.0; if ((rotSpeak->ringbuffer_h_L = calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->ringbuffer_h_R = calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } rotSpeak->buflen_h_L = ceil(0.3f * sample_rate / M_PI); rotSpeak->buflen_h_R = ceil(0.3f * sample_rate / M_PI); rotSpeak->pos_h_L = 0; rotSpeak->pos_h_R = 0; if ((rotSpeak->ringbuffer_b_L = calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->ringbuffer_b_R = calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } rotSpeak->buflen_b_L = ceil(0.3f * sample_rate / M_PI); rotSpeak->buflen_b_R = ceil(0.3f * sample_rate / M_PI); rotSpeak->pos_b_L = 0; rotSpeak->pos_b_R = 0; if ((rotSpeak->eq_filter_L = calloc(1, sizeof(biquad))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->lp_filter_L = calloc(1, sizeof(biquad))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->hp_filter_L = calloc(1, sizeof(biquad))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->eq_filter_R = calloc(1, sizeof(biquad))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->lp_filter_R = calloc(1, sizeof(biquad))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } if ((rotSpeak->hp_filter_R = calloc(1, sizeof(biquad))) == NULL) { cleanup_RotSpkr((LADSPA_Handle)rotSpeak); return NULL; } return ptr; } return NULL; } void activate_RotSpkr(LADSPA_Handle Instance) { int i; RotSpkr * ptr; ptr = (RotSpkr *)Instance; for (i = 0; i < 2 * PM_DEPTH; i++) { ptr->ringbuffer_h_L[i] = 0.0f; ptr->ringbuffer_h_R[i] = 0.0f; ptr->ringbuffer_b_L[i] = 0.0f; ptr->ringbuffer_b_R[i] = 0.0f; } ptr->phase_h = 0.0f; ptr->phase_b = 0.0f; biquad_init(ptr->eq_filter_L); biquad_init(ptr->lp_filter_L); biquad_init(ptr->hp_filter_L); biquad_init(ptr->eq_filter_R); biquad_init(ptr->lp_filter_R); biquad_init(ptr->hp_filter_R); eq_set_params(ptr->eq_filter_L, SPLIT_FREQ, +8.0f, SPLIT_BW, ptr->sample_rate); eq_set_params(ptr->eq_filter_R, SPLIT_FREQ, +8.0f, SPLIT_BW, ptr->sample_rate); lp_set_params(ptr->lp_filter_L, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); lp_set_params(ptr->lp_filter_R, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); hp_set_params(ptr->hp_filter_L, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); hp_set_params(ptr->hp_filter_R, SPLIT_FREQ, SPLIT_BW, ptr->sample_rate); } /* Connect a port to a data location. */ void connect_port_RotSpkr(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { RotSpkr * ptr; ptr = (RotSpkr *)Instance; switch (Port) { case HORNFREQ: ptr->hornfreq = DataLocation; break; case BASSFREQ: ptr->bassfreq = DataLocation; break; case STWIDTH: ptr->stwidth = DataLocation; break; case HRBAL: ptr->hrbal = DataLocation; break; case LATENCY: ptr->latency = DataLocation; *(ptr->latency) = ptr->buflen_h_L / 2; /* IS THIS LEGAL? YES, ONLY IF DataLocation points to valid memory location on stack/heap*/ break; case INPUT_L: ptr->input_L = DataLocation; break; case INPUT_R: ptr->input_R = DataLocation; break; case OUTPUT_L: ptr->output_L = DataLocation; break; case OUTPUT_R: ptr->output_R = DataLocation; break; } } void run_RotSpkr(LADSPA_Handle Instance, unsigned long SampleCount) { RotSpkr * ptr = (RotSpkr *)Instance; LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; LADSPA_Data freq_h = LIMIT(*(ptr->hornfreq),0.0f,PM_FREQ); LADSPA_Data freq_b = LIMIT(*(ptr->bassfreq),0.0f,PM_FREQ); LADSPA_Data stwidth = LIMIT(*(ptr->stwidth),0.0f,100.0f); LADSPA_Data hrbal = LIMIT(*(ptr->hrbal),0.0f,1.0f); LADSPA_Data pmdepth_h = LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_h/C_AIR) * ptr->sample_rate / 200.0f / M_PI / freq_h, 0, ptr->buflen_h_L / 2); LADSPA_Data pmdepth_b = LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_b/C_AIR) * ptr->sample_rate / 200.0f / M_PI / freq_b, 0, ptr->buflen_b_L / 2); unsigned long sample_index; LADSPA_Data in_L = 0.0f, in_R = 0.0f; LADSPA_Data lo_L = 0.0f, lo_R = 0.0f; LADSPA_Data hi_L = 0.0f, hi_R = 0.0f; LADSPA_Data phase_h_L = 0.0f, phase_b_L = 0.0f; LADSPA_Data phase_h_R = 0.0f, phase_b_R = 0.0f; LADSPA_Data phase_pm_h_L = 0.0f, phase_pm_b_L = 0.0f; LADSPA_Data phase_pm_h_R = 0.0f, phase_pm_b_R = 0.0f; LADSPA_Data pm_h_L = 0.0f, pm_b_L = 0.0f; LADSPA_Data pm_h_R = 0.0f, pm_b_R = 0.0f; LADSPA_Data fpos_h_L = 0.0f, fpos_b_L = 0.0f, fpos_h_R = 0.0f, fpos_b_R = 0.0f; LADSPA_Data n_h_L = 0.0f, n_b_L = 0.0f, n_h_R = 0.0f, n_b_R = 0.0f; LADSPA_Data rem_h_L = 0.0f, rem_b_L = 0.0f, rem_h_R = 0.0f, rem_b_R = 0.0f; LADSPA_Data sa_h_L = 0.0f, sa_b_L = 0.0f, sb_h_L = 0.0f, sb_b_L = 0.0f; LADSPA_Data sa_h_R = 0.0f, sa_b_R = 0.0f, sb_h_R = 0.0f, sb_b_R = 0.0f; for (sample_index = 0; sample_index < SampleCount; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); in_L = biquad_run(ptr->eq_filter_L, in_L); in_R = biquad_run(ptr->eq_filter_R, in_R); lo_L = biquad_run(ptr->lp_filter_L, in_L); lo_R = biquad_run(ptr->lp_filter_R, in_R); hi_L = biquad_run(ptr->hp_filter_L, in_L); hi_R = biquad_run(ptr->hp_filter_R, in_R); phase_h_L = 1024.0f * freq_h * sample_index / ptr->sample_rate + ptr->phase_h; while (phase_h_L >= 1024.0f) phase_h_L -= 1024.0f; phase_pm_h_L = phase_h_L + 256.0f; while (phase_pm_h_L >= 1024.0f) phase_pm_h_L -= 1024.0f; phase_h_R = phase_h_L + 512.0f; while (phase_h_R >= 1024.0f) phase_h_R -= 1024.0f; phase_pm_h_R = phase_h_R + 256.0f; while (phase_pm_h_R >= 1024.0f) phase_pm_h_R -= 1024.0f; phase_b_L = 1024.0f * freq_b * sample_index / ptr->sample_rate + ptr->phase_b; while (phase_b_L >= 1024.0f) phase_b_L -= 1024.0f; phase_pm_b_L = phase_b_L + 256.0f; while (phase_pm_b_L >= 1024.0f) phase_pm_b_L -= 1024.0f; phase_b_R = phase_b_L + 512.0f; while (phase_b_R >= 1024.0f) phase_b_R -= 1024.0f; phase_pm_b_R = phase_b_R + 256.0f; while (phase_pm_b_R >= 1024.0f) phase_pm_b_R -= 1024.0f; push_buffer(hi_L, ptr->ringbuffer_h_L, ptr->buflen_h_L, &(ptr->pos_h_L)); push_buffer(hi_R, ptr->ringbuffer_h_R, ptr->buflen_h_R, &(ptr->pos_h_R)); push_buffer(lo_L, ptr->ringbuffer_b_L, ptr->buflen_b_L, &(ptr->pos_b_L)); push_buffer(lo_R, ptr->ringbuffer_b_R, ptr->buflen_b_R, &(ptr->pos_b_R)); fpos_h_L = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_L]); n_h_L = floorf(fpos_h_L); rem_h_L = fpos_h_L - n_h_L; sa_h_L = read_buffer(ptr->ringbuffer_h_L, ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L); sb_h_L = read_buffer(ptr->ringbuffer_h_L, ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L + 1); pm_h_L = (1 - rem_h_L) * sa_h_L + rem_h_L * sb_h_L; fpos_h_R = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_R]); n_h_R = floorf(fpos_h_R); rem_h_R = fpos_h_R - n_h_R; sa_h_R = read_buffer(ptr->ringbuffer_h_R, ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R); sb_h_R = read_buffer(ptr->ringbuffer_h_R, ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R + 1); pm_h_R = (1 - rem_h_R) * sa_h_R + rem_h_R * sb_h_R; fpos_b_L = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_L]); n_b_L = floorf(fpos_b_L); rem_b_L = fpos_b_L - n_b_L; sa_b_L = read_buffer(ptr->ringbuffer_b_L, ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L); sb_b_L = read_buffer(ptr->ringbuffer_b_L, ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L + 1); pm_b_L = (1 - rem_b_L) * sa_b_L + rem_b_L * sb_b_L; fpos_b_R = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_R]); n_b_R = floorf(fpos_b_R); rem_b_R = fpos_b_R - n_b_R; sa_b_R = read_buffer(ptr->ringbuffer_b_R, ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R); sb_b_R = read_buffer(ptr->ringbuffer_b_R, ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R + 1); pm_b_R = (1 - rem_b_R) * sa_b_R + rem_b_R * sb_b_R; *(output_L++) = hrbal * pm_h_L * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_h_L]) + (1.0f - hrbal) * pm_b_L * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_b_L]); *(output_R++) = hrbal * pm_h_R * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_h_R]) + (1.0f - hrbal) * pm_b_R * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_b_R]); } ptr->phase_h += 1024.0f * freq_h * sample_index / ptr->sample_rate; while (ptr->phase_h >= 1024.0f) ptr->phase_h -= 1024.0f; ptr->phase_b += 1024.0f * freq_b * sample_index / ptr->sample_rate; while (ptr->phase_b >= 1024.0f) ptr->phase_b -= 1024.0f; *(ptr->latency) = ptr->buflen_h_L / 2; } void set_run_adding_gain_RotSpkr(LADSPA_Handle Instance, LADSPA_Data gain) { RotSpkr * ptr = (RotSpkr *)Instance; ptr->run_adding_gain = gain; } void run_adding_RotSpkr(LADSPA_Handle Instance, unsigned long SampleCount) { RotSpkr * ptr = (RotSpkr *)Instance; LADSPA_Data * input_L = ptr->input_L; LADSPA_Data * input_R = ptr->input_R; LADSPA_Data * output_L = ptr->output_L; LADSPA_Data * output_R = ptr->output_R; LADSPA_Data freq_h = LIMIT(*(ptr->hornfreq),0.0f,PM_FREQ); LADSPA_Data freq_b = LIMIT(*(ptr->bassfreq),0.0f,PM_FREQ); LADSPA_Data stwidth = LIMIT(*(ptr->stwidth),0.0f,100.0f); LADSPA_Data hrbal = LIMIT(*(ptr->hrbal),0.0f,1.0f); LADSPA_Data pmdepth_h = LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_h/C_AIR) * ptr->sample_rate / 200.0f / M_PI / freq_h, 0, ptr->buflen_h_L / 2); LADSPA_Data pmdepth_b = LIMIT(1.0f/(1.0f+FREQ_PITCH*freq_b/C_AIR) * ptr->sample_rate / 200.0f / M_PI / freq_b, 0, ptr->buflen_b_L / 2); unsigned long sample_index; LADSPA_Data in_L = 0.0f, in_R = 0.0f; LADSPA_Data lo_L = 0.0f, lo_R = 0.0f; LADSPA_Data hi_L = 0.0f, hi_R = 0.0f; LADSPA_Data phase_h_L = 0.0f, phase_b_L = 0.0f; LADSPA_Data phase_h_R = 0.0f, phase_b_R = 0.0f; LADSPA_Data phase_pm_h_L = 0.0f, phase_pm_b_L = 0.0f; LADSPA_Data phase_pm_h_R = 0.0f, phase_pm_b_R = 0.0f; LADSPA_Data pm_h_L = 0.0f, pm_b_L = 0.0f; LADSPA_Data pm_h_R = 0.0f, pm_b_R = 0.0f; LADSPA_Data fpos_h_L = 0.0f, fpos_b_L = 0.0f, fpos_h_R = 0.0f, fpos_b_R = 0.0f; LADSPA_Data n_h_L = 0.0f, n_b_L = 0.0f, n_h_R = 0.0f, n_b_R = 0.0f; LADSPA_Data rem_h_L = 0.0f, rem_b_L = 0.0f, rem_h_R = 0.0f, rem_b_R = 0.0f; LADSPA_Data sa_h_L = 0.0f, sa_b_L = 0.0f, sb_h_L = 0.0f, sb_b_L = 0.0f; LADSPA_Data sa_h_R = 0.0f, sa_b_R = 0.0f, sb_h_R = 0.0f, sb_b_R = 0.0f; for (sample_index = 0; sample_index < SampleCount; sample_index++) { in_L = *(input_L++); in_R = *(input_R++); in_L = biquad_run(ptr->eq_filter_L, in_L); in_R = biquad_run(ptr->eq_filter_R, in_R); lo_L = biquad_run(ptr->lp_filter_L, in_L); lo_R = biquad_run(ptr->lp_filter_R, in_R); hi_L = biquad_run(ptr->hp_filter_L, in_L); hi_R = biquad_run(ptr->hp_filter_R, in_R); phase_h_L = 1024.0f * freq_h * sample_index / ptr->sample_rate + ptr->phase_h; while (phase_h_L >= 1024.0f) phase_h_L -= 1024.0f; phase_pm_h_L = phase_h_L + 256.0f; while (phase_pm_h_L >= 1024.0f) phase_pm_h_L -= 1024.0f; phase_h_R = phase_h_L + 512.0f; while (phase_h_R >= 1024.0f) phase_h_R -= 1024.0f; phase_pm_h_R = phase_h_R + 256.0f; while (phase_pm_h_R >= 1024.0f) phase_pm_h_R -= 1024.0f; phase_b_L = 1024.0f * freq_b * sample_index / ptr->sample_rate + ptr->phase_b; while (phase_b_L >= 1024.0f) phase_b_L -= 1024.0f; phase_pm_b_L = phase_b_L + 256.0f; while (phase_pm_b_L >= 1024.0f) phase_pm_b_L -= 1024.0f; phase_b_R = phase_b_L + 512.0f; while (phase_b_R >= 1024.0f) phase_b_R -= 1024.0f; phase_pm_b_R = phase_b_R + 256.0f; while (phase_pm_b_R >= 1024.0f) phase_pm_b_R -= 1024.0f; push_buffer(hi_L, ptr->ringbuffer_h_L, ptr->buflen_h_L, &(ptr->pos_h_L)); push_buffer(hi_R, ptr->ringbuffer_h_R, ptr->buflen_h_R, &(ptr->pos_h_R)); push_buffer(lo_L, ptr->ringbuffer_b_L, ptr->buflen_b_L, &(ptr->pos_b_L)); push_buffer(lo_R, ptr->ringbuffer_b_R, ptr->buflen_b_R, &(ptr->pos_b_R)); fpos_h_L = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_L]); n_h_L = floorf(fpos_h_L); rem_h_L = fpos_h_L - n_h_L; sa_h_L = read_buffer(ptr->ringbuffer_h_L, ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L); sb_h_L = read_buffer(ptr->ringbuffer_h_L, ptr->buflen_h_L, ptr->pos_h_L, (unsigned long) n_h_L + 1); pm_h_L = (1 - rem_h_L) * sa_h_L + rem_h_L * sb_h_L; fpos_h_R = pmdepth_h * (1.0f - cos_table[(unsigned long) phase_pm_h_R]); n_h_R = floorf(fpos_h_R); rem_h_R = fpos_h_R - n_h_R; sa_h_R = read_buffer(ptr->ringbuffer_h_R, ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R); sb_h_R = read_buffer(ptr->ringbuffer_h_R, ptr->buflen_h_R, ptr->pos_h_R, (unsigned long) n_h_R + 1); pm_h_R = (1 - rem_h_R) * sa_h_R + rem_h_R * sb_h_R; fpos_b_L = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_L]); n_b_L = floorf(fpos_b_L); rem_b_L = fpos_b_L - n_b_L; sa_b_L = read_buffer(ptr->ringbuffer_b_L, ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L); sb_b_L = read_buffer(ptr->ringbuffer_b_L, ptr->buflen_b_L, ptr->pos_b_L, (unsigned long) n_b_L + 1); pm_b_L = (1 - rem_b_L) * sa_b_L + rem_b_L * sb_b_L; fpos_b_R = pmdepth_b * (1.0f - cos_table[(unsigned long) phase_pm_b_R]); n_b_R = floorf(fpos_b_R); rem_b_R = fpos_b_R - n_b_R; sa_b_R = read_buffer(ptr->ringbuffer_b_R, ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R); sb_b_R = read_buffer(ptr->ringbuffer_b_R, ptr->buflen_b_R, ptr->pos_b_R, (unsigned long) n_b_R + 1); pm_b_R = (1 - rem_b_R) * sa_b_R + rem_b_R * sb_b_R; *(output_L++) += ptr->run_adding_gain * hrbal * pm_h_L * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_h_L]) + (1.0f - hrbal) * pm_b_L * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_b_L]); *(output_R++) += ptr->run_adding_gain * hrbal * pm_h_R * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_h_R]) + (1.0f - hrbal) * pm_b_R * (1.0f + 0.5f * stwidth/100.0f * cos_table[(unsigned long) phase_b_R]); } ptr->phase_h += 1024.0f * freq_h * sample_index / ptr->sample_rate; while (ptr->phase_h >= 1024.0f) ptr->phase_h -= 1024.0f; ptr->phase_b += 1024.0f * freq_b * sample_index / ptr->sample_rate; while (ptr->phase_b >= 1024.0f) ptr->phase_b -= 1024.0f; *(ptr->latency) = ptr->buflen_h_L / 2; } /* Throw away an RotSpkr effect instance. This function should be called only when RotSpkr was allocated with calloc. */ void cleanup_RotSpkr(LADSPA_Handle Instance) { RotSpkr * ptr = (RotSpkr *)Instance; if (!ptr) return; if (ptr->ringbuffer_h_L) free(ptr->ringbuffer_h_L); if (ptr->ringbuffer_h_R) free(ptr->ringbuffer_h_R); if (ptr->ringbuffer_b_L) free(ptr->ringbuffer_b_L); if (ptr->ringbuffer_b_R) free(ptr->ringbuffer_b_R); if (ptr->eq_filter_L) free(ptr->eq_filter_L); if (ptr->eq_filter_R) free(ptr->eq_filter_R); if (ptr->lp_filter_L) free(ptr->lp_filter_L); if (ptr->lp_filter_R) free(ptr->lp_filter_R); if (ptr->hp_filter_L) free(ptr->hp_filter_L); if (ptr->hp_filter_R) free(ptr->hp_filter_R); if (Instance) free(Instance); } LADSPA_Descriptor * stereo_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { int i; char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((stereo_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < 1024; i++) cos_table[i] = cosf(i * M_PI / 512.0f); stereo_descriptor->UniqueID = ID_STEREO; stereo_descriptor->Label = strdup("tap_rotspeak"); stereo_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; stereo_descriptor->Name = strdup("TAP Rotary Speaker"); stereo_descriptor->Maker = strdup("Tom Szilagyi"); stereo_descriptor->Copyright = strdup("GPL"); stereo_descriptor->PortCount = PORTCOUNT_STEREO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); stereo_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[HORNFREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[BASSFREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[STWIDTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[HRBAL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_L] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[INPUT_R] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_L] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_R] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_STEREO, sizeof(char *))) == NULL) exit(1); stereo_descriptor->PortNames = (const char **)port_names; port_names[HORNFREQ] = strdup("Horn Frequency [Hz]"); port_names[BASSFREQ] = strdup("Rotor Frequency [Hz]"); port_names[STWIDTH] = strdup("Mic Distance [%]"); port_names[HRBAL] = strdup("Rotor/Horn Mix"); port_names[LATENCY] = strdup("latency"); port_names[INPUT_L] = strdup("Input L"); port_names[INPUT_R] = strdup("Input R"); port_names[OUTPUT_L] = strdup("Output L"); port_names[OUTPUT_R] = strdup("Output R"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_STEREO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); stereo_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[HORNFREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[BASSFREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[STWIDTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[HRBAL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE); port_range_hints[LATENCY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[HORNFREQ].LowerBound = 0; port_range_hints[HORNFREQ].UpperBound = PM_FREQ; port_range_hints[BASSFREQ].LowerBound = 0; port_range_hints[BASSFREQ].UpperBound = PM_FREQ; port_range_hints[STWIDTH].LowerBound = 0; port_range_hints[STWIDTH].UpperBound = 100.0f; port_range_hints[HRBAL].LowerBound = 0; port_range_hints[HRBAL].UpperBound = 1.0f; port_range_hints[LATENCY].LowerBound = 0; port_range_hints[LATENCY].UpperBound = PM_DEPTH; port_range_hints[INPUT_L].HintDescriptor = 0; port_range_hints[INPUT_R].HintDescriptor = 0; port_range_hints[OUTPUT_L].HintDescriptor = 0; port_range_hints[OUTPUT_R].HintDescriptor = 0; stereo_descriptor->instantiate = instantiate_RotSpkr; stereo_descriptor->connect_port = connect_port_RotSpkr; stereo_descriptor->activate = activate_RotSpkr; stereo_descriptor->run = run_RotSpkr; stereo_descriptor->run_adding = run_adding_RotSpkr; stereo_descriptor->set_run_adding_gain = set_run_adding_gain_RotSpkr; stereo_descriptor->deactivate = NULL; stereo_descriptor->cleanup = cleanup_RotSpkr; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return stereo_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_sigmoid.c000066400000000000000000000216061247673406200217350ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_sigmoid.c,v 1.3 2005/08/30 11:19:14 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2157 /* The port numbers for the plugin: */ #define PREGAIN 0 #define POSTGAIN 1 #define INPUT 2 #define OUTPUT 3 /* Total number of ports */ #define PORTCOUNT_MONO 4 /* The closer this is to 1.0, the slower the input parameter interpolation will be. */ #define INTERP 0.99f /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * pregain; LADSPA_Data * postgain; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data pregain_i; LADSPA_Data postgain_i; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Sigmoid; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Sigmoid(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Sigmoid))) != NULL) { ((Sigmoid *)ptr)->sample_rate = sample_rate; ((Sigmoid *)ptr)->run_adding_gain = 1.0f; return ptr; } return NULL; } /* Connect a port to a data location. */ void connect_port_Sigmoid(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Sigmoid * ptr = (Sigmoid *)Instance; switch (Port) { case PREGAIN: ptr->pregain = DataLocation; ptr->pregain_i = db2lin(LIMIT(*DataLocation,-90.0f,20.0f)); break; case POSTGAIN: ptr->postgain = DataLocation; ptr->postgain_i = db2lin(LIMIT(*DataLocation,-90.0f,20.0f)); break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_Sigmoid(LADSPA_Handle Instance, unsigned long SampleCount) { Sigmoid * ptr = (Sigmoid *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data pregain = db2lin(LIMIT(*(ptr->pregain),-90.0f,20.0f)); LADSPA_Data postgain = db2lin(LIMIT(*(ptr->postgain),-90.0f,20.0f)); LADSPA_Data pregain_i = ptr->pregain_i; LADSPA_Data postgain_i = ptr->postgain_i; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data out = 0.0f; if ((pregain_i != pregain) || (postgain_i != postgain)) { for (sample_index = 0; sample_index < sample_count; sample_index++) { pregain_i = pregain_i * INTERP + pregain * (1.0f - INTERP); postgain_i = postgain_i * INTERP + postgain * (1.0f - INTERP); in = *(input++) * pregain_i; out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; *(output++) = out * postgain_i; } ptr->pregain_i = pregain_i; ptr->postgain_i = postgain_i; } else { for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++) * pregain_i; out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; *(output++) = out * postgain_i; } ptr->pregain_i = pregain_i; ptr->postgain_i = postgain_i; } } void set_run_adding_gain_Sigmoid(LADSPA_Handle Instance, LADSPA_Data gain) { Sigmoid * ptr = (Sigmoid *)Instance; ptr->run_adding_gain = gain; } void run_adding_Sigmoid(LADSPA_Handle Instance, unsigned long SampleCount) { Sigmoid * ptr = (Sigmoid *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data pregain = db2lin(LIMIT(*(ptr->pregain),-90.0f,20.0f)); LADSPA_Data postgain = db2lin(LIMIT(*(ptr->postgain),-90.0f,20.0f)); LADSPA_Data pregain_i = ptr->pregain_i; LADSPA_Data postgain_i = ptr->postgain_i; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data out = 0.0f; if ((pregain_i != pregain) || (postgain_i != postgain)) { for (sample_index = 0; sample_index < sample_count; sample_index++) { pregain_i = pregain_i * INTERP + pregain * (1.0f - INTERP); postgain_i = postgain_i * INTERP + postgain * (1.0f - INTERP); in = *(input++) * pregain_i; out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; *(output++) = out * postgain_i * ptr->run_adding_gain; } ptr->pregain_i = pregain_i; ptr->postgain_i = postgain_i; } else { for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++) * pregain_i; out = 2.0f / (1.0f + exp(-5.0*in)) - 1.0f; *(output++) = out * postgain_i * ptr->run_adding_gain; } } } /* Throw away a Sigmoid effect instance. */ void cleanup_Sigmoid(LADSPA_Handle Instance) { free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_sigmoid"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP Sigmoid Booster"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[PREGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[POSTGAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[PREGAIN] = strdup("Pre Gain [dB]"); port_names[POSTGAIN] = strdup("Post Gain [dB]"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[PREGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[POSTGAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[PREGAIN].LowerBound = -90.0f; port_range_hints[PREGAIN].UpperBound = 20.0f; port_range_hints[POSTGAIN].LowerBound = -90.0f; port_range_hints[POSTGAIN].UpperBound = 20.0f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Sigmoid; mono_descriptor->connect_port = connect_port_Sigmoid; mono_descriptor->activate = NULL; mono_descriptor->run = run_Sigmoid; mono_descriptor->run_adding = run_adding_Sigmoid; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Sigmoid; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Sigmoid; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_tremolo.c000066400000000000000000000214751247673406200217670ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_tremolo.c,v 1.6 2004/02/21 17:33:36 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2144 /* The port numbers for the plugin: */ #define CONTROL_FREQ 0 #define CONTROL_DEPTH 1 #define CONTROL_GAIN 2 #define INPUT_0 3 #define OUTPUT_0 4 /* Total number of ports */ #define PORTCOUNT_MONO 5 /* cosine table for fast computations */ LADSPA_Data cos_table[1024]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * Control_Freq; LADSPA_Data * Control_Depth; LADSPA_Data * Control_Gain; LADSPA_Data * InputBuffer_1; LADSPA_Data * OutputBuffer_1; unsigned long SampleRate; LADSPA_Data Phase; LADSPA_Data run_adding_gain; } Tremolo; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Tremolo(const LADSPA_Descriptor * Descriptor, unsigned long SampleRate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Tremolo))) != NULL) { ((Tremolo *)ptr)->SampleRate = SampleRate; ((Tremolo *)ptr)->run_adding_gain = 1.0; return ptr; } return NULL; } void activate_Tremolo(LADSPA_Handle Instance) { Tremolo * ptr; ptr = (Tremolo *)Instance; ptr->Phase = 0.0f; } /* Connect a port to a data location. */ void connect_port_Tremolo(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Tremolo * ptr; ptr = (Tremolo *)Instance; switch (Port) { case CONTROL_FREQ: ptr->Control_Freq = DataLocation; break; case CONTROL_DEPTH: ptr->Control_Depth = DataLocation; break; case CONTROL_GAIN: ptr->Control_Gain = DataLocation; break; case INPUT_0: ptr->InputBuffer_1 = DataLocation; break; case OUTPUT_0: ptr->OutputBuffer_1 = DataLocation; break; } } void run_Tremolo(LADSPA_Handle Instance, unsigned long SampleCount) { LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data freq; LADSPA_Data depth; LADSPA_Data gain; Tremolo * ptr; unsigned long sample_index; LADSPA_Data phase = 0.0f; ptr = (Tremolo *)Instance; input = ptr->InputBuffer_1; output = ptr->OutputBuffer_1; freq = LIMIT(*(ptr->Control_Freq),0.0f,20.0f); depth = LIMIT(*(ptr->Control_Depth),0.0f,100.0f); gain = db2lin(LIMIT(*(ptr->Control_Gain),-70.0f,20.0f)); for (sample_index = 0; sample_index < SampleCount; sample_index++) { phase = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; while (phase >= 1024.0f) phase -= 1024.0f; *(output++) = *(input++) * gain * (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase]); } ptr->Phase = phase; while (ptr->Phase >= 1024.0f) ptr->Phase -= 1024.0f; } void set_run_adding_gain_Tremolo(LADSPA_Handle Instance, LADSPA_Data gain) { Tremolo * ptr; ptr = (Tremolo *)Instance; ptr->run_adding_gain = gain; } void run_adding_Tremolo(LADSPA_Handle Instance, unsigned long SampleCount) { LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data freq; LADSPA_Data depth; LADSPA_Data gain; Tremolo * ptr; unsigned long sample_index; LADSPA_Data phase = 0.0f; ptr = (Tremolo *)Instance; input = ptr->InputBuffer_1; output = ptr->OutputBuffer_1; freq = LIMIT(*(ptr->Control_Freq),0.0f,20.0f); depth = LIMIT(*(ptr->Control_Depth),0.0f,100.0f); gain = db2lin(LIMIT(*(ptr->Control_Gain),-70.0f,20.0f)); for (sample_index = 0; sample_index < SampleCount; sample_index++) { phase = 1024.0f * freq * sample_index / ptr->SampleRate + ptr->Phase; while (phase >= 1024.0f) phase -= 1024.0f; *(output++) += *(input++) * ptr->run_adding_gain * gain * (1 - 0.5*depth/100 + 0.5 * depth/100 * cos_table[(unsigned long) phase]); } ptr->Phase = phase; while (ptr->Phase >= 1024.0f) ptr->Phase -= 1024.0f; } /* Throw away a Tremolo effect instance. */ void cleanup_Tremolo(LADSPA_Handle Instance) { free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; int i; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < 1024; i++) cos_table[i] = cosf(i * M_PI / 512.0f); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_tremolo"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP Tremolo"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[CONTROL_FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[CONTROL_DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[CONTROL_GAIN] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT_0] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT_0] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[CONTROL_FREQ] = strdup("Frequency [Hz]"); port_names[CONTROL_DEPTH] = strdup("Depth [%]"); port_names[CONTROL_GAIN] = strdup("Gain [dB]"); port_names[INPUT_0] = strdup("Input_0"); port_names[OUTPUT_0] = strdup("Output_0"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[CONTROL_FREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[CONTROL_DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[CONTROL_GAIN].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[CONTROL_FREQ].LowerBound = 0; port_range_hints[CONTROL_FREQ].UpperBound = 20; port_range_hints[CONTROL_DEPTH].LowerBound = 0; port_range_hints[CONTROL_DEPTH].UpperBound = 100; port_range_hints[CONTROL_GAIN].LowerBound = -70; port_range_hints[CONTROL_GAIN].UpperBound = 20; port_range_hints[INPUT_0].HintDescriptor = 0; port_range_hints[OUTPUT_0].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Tremolo; mono_descriptor->connect_port = connect_port_Tremolo; mono_descriptor->activate = activate_Tremolo; mono_descriptor->run = run_Tremolo; mono_descriptor->run_adding = run_adding_Tremolo; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Tremolo; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Tremolo; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_tubewarmth.c000066400000000000000000000276071247673406200224730ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_tubewarmth.c,v 1.1 2004/08/02 18:14:50 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2158 /* The port numbers for the plugin: */ #define DRIVE 0 #define BLEND 1 #define INPUT 2 #define OUTPUT 3 /* Total number of ports */ #define PORTCOUNT_MONO 4 /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * drive; LADSPA_Data * blend; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data prev_med; LADSPA_Data prev_out; LADSPA_Data rdrive; LADSPA_Data rbdr; LADSPA_Data kpa; LADSPA_Data kpb; LADSPA_Data kna; LADSPA_Data knb; LADSPA_Data ap; LADSPA_Data an; LADSPA_Data imr; LADSPA_Data kc; LADSPA_Data srct; LADSPA_Data sq; LADSPA_Data pwrq; LADSPA_Data prev_drive; LADSPA_Data prev_blend; unsigned long sample_rate; LADSPA_Data run_adding_gain; } TubeWarmth; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_TubeWarmth(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(TubeWarmth))) != NULL) { ((TubeWarmth *)ptr)->sample_rate = sample_rate; ((TubeWarmth *)ptr)->run_adding_gain = 1.0f; ((TubeWarmth *)ptr)->prev_med = 0.0f; ((TubeWarmth *)ptr)->prev_out = 0.0f; ((TubeWarmth *)ptr)->rdrive = 0.0f; ((TubeWarmth *)ptr)->rbdr = 0.0f; ((TubeWarmth *)ptr)->kpa = 0.0f; ((TubeWarmth *)ptr)->kpb = 0.0f; ((TubeWarmth *)ptr)->kna = 0.0f; ((TubeWarmth *)ptr)->knb = 0.0f; ((TubeWarmth *)ptr)->ap = 0.0f; ((TubeWarmth *)ptr)->an = 0.0f; ((TubeWarmth *)ptr)->imr = 0.0f; ((TubeWarmth *)ptr)->kc = 0.0f; ((TubeWarmth *)ptr)->srct = 0.0f; ((TubeWarmth *)ptr)->sq = 0.0f; ((TubeWarmth *)ptr)->pwrq = 0.0f; /* These are out of band to force param recalc upon first run() */ ((TubeWarmth *)ptr)->prev_drive = -1.0f; ((TubeWarmth *)ptr)->prev_blend = -11.0f; return ptr; } return NULL; } /* Connect a port to a data location. */ void connect_port_TubeWarmth(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { TubeWarmth * ptr = (TubeWarmth *)Instance; switch (Port) { case DRIVE: ptr->drive = DataLocation; break; case BLEND: ptr->blend = DataLocation; break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } #define EPS 0.000000001f static inline float M(float x) { if ((x > EPS) || (x < -EPS)) return x; else return 0.0f; } static inline float D(float x) { if (x > EPS) return sqrt(x); else if (x < -EPS) return sqrt(-x); else return 0.0f; } void run_TubeWarmth(LADSPA_Handle Instance, unsigned long SampleCount) { TubeWarmth * ptr = (TubeWarmth *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data drive = LIMIT(*(ptr->drive),0.1f,10.0f); LADSPA_Data blend = LIMIT(*(ptr->blend),-10.0f,10.0f); unsigned long sample_index; unsigned long sample_count = SampleCount; unsigned long sample_rate = ptr->sample_rate; LADSPA_Data rdrive = ptr->rdrive; LADSPA_Data rbdr = ptr->rbdr; LADSPA_Data kpa = ptr->kpa; LADSPA_Data kpb = ptr->kpb; LADSPA_Data kna = ptr->kna; LADSPA_Data knb = ptr->knb; LADSPA_Data ap = ptr->ap; LADSPA_Data an = ptr->an; LADSPA_Data imr = ptr->imr; LADSPA_Data kc = ptr->kc; LADSPA_Data srct = ptr->srct; LADSPA_Data sq = ptr->sq; LADSPA_Data pwrq = ptr->pwrq; LADSPA_Data prev_med; LADSPA_Data prev_out; LADSPA_Data in; LADSPA_Data med; LADSPA_Data out; if ((ptr->prev_drive != drive) || (ptr->prev_blend != blend)) { rdrive = 12.0f / drive; rbdr = rdrive / (10.5f - blend) * 780.0f / 33.0f; kpa = D(2.0f * (rdrive*rdrive) - 1.0f) + 1.0f; kpb = (2.0f - kpa) / 2.0f; ap = ((rdrive*rdrive) - kpa + 1.0f) / 2.0f; kc = kpa / D(2.0f * D(2.0f * (rdrive*rdrive) - 1.0f) - 2.0f * rdrive*rdrive); srct = (0.1f * sample_rate) / (0.1f * sample_rate + 1.0f); sq = kc*kc + 1.0f; knb = -1.0f * rbdr / D(sq); kna = 2.0f * kc * rbdr / D(sq); an = rbdr*rbdr / sq; imr = 2.0f * knb + D(2.0f * kna + 4.0f * an - 1.0f); pwrq = 2.0f / (imr + 1.0f); ptr->prev_drive = drive; ptr->prev_blend = blend; } for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); prev_med = ptr->prev_med; prev_out = ptr->prev_out; if (in >= 0.0f) { med = (D(ap + in * (kpa - in)) + kpb) * pwrq; } else { med = (D(an - in * (kna + in)) + knb) * pwrq * -1.0f; } out = srct * (med - prev_med + prev_out); if (out < -1.0f) out = -1.0f; *(output++) = out; ptr->prev_med = M(med); ptr->prev_out = M(out); } ptr->rdrive = rdrive; ptr->rbdr = rbdr; ptr->kpa = kpa; ptr->kpb = kpb; ptr->kna = kna; ptr->knb = knb; ptr->ap = ap; ptr->an = an; ptr->imr = imr; ptr->kc = kc; ptr->srct = srct; ptr->sq = sq; ptr->pwrq = pwrq; } void set_run_adding_gain_TubeWarmth(LADSPA_Handle Instance, LADSPA_Data gain) { TubeWarmth * ptr = (TubeWarmth *)Instance; ptr->run_adding_gain = gain; } void run_adding_TubeWarmth(LADSPA_Handle Instance, unsigned long SampleCount) { TubeWarmth * ptr = (TubeWarmth *)Instance; LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; LADSPA_Data drive = LIMIT(*(ptr->drive),0.1f,10.0f); LADSPA_Data blend = LIMIT(*(ptr->blend),-10.0f,10.0f); unsigned long sample_index; unsigned long sample_count = SampleCount; unsigned long sample_rate = ptr->sample_rate; LADSPA_Data rdrive = ptr->rdrive; LADSPA_Data rbdr = ptr->rbdr; LADSPA_Data kpa = ptr->kpa; LADSPA_Data kpb = ptr->kpb; LADSPA_Data kna = ptr->kna; LADSPA_Data knb = ptr->knb; LADSPA_Data ap = ptr->ap; LADSPA_Data an = ptr->an; LADSPA_Data imr = ptr->imr; LADSPA_Data kc = ptr->kc; LADSPA_Data srct = ptr->srct; LADSPA_Data sq = ptr->sq; LADSPA_Data pwrq = ptr->pwrq; LADSPA_Data prev_med; LADSPA_Data prev_out; LADSPA_Data in; LADSPA_Data med; LADSPA_Data out; if ((ptr->prev_drive != drive) || (ptr->prev_blend != blend)) { rdrive = 12.0f / drive; rbdr = rdrive / (10.5f - blend) * 780.0f / 33.0f; kpa = D(2.0f * (rdrive*rdrive) - 1.0f) + 1.0f; kpb = (2.0f - kpa) / 2.0f; ap = ((rdrive*rdrive) - kpa + 1.0f) / 2.0f; kc = kpa / D(2.0f * D(2.0f * (rdrive*rdrive) - 1.0f) - 2.0f * rdrive*rdrive); srct = (0.1f * sample_rate) / (0.1f * sample_rate + 1.0f); sq = kc*kc + 1.0f; knb = -1.0f * rbdr / D(sq); kna = 2.0f * kc * rbdr / D(sq); an = rbdr*rbdr / sq; imr = 2.0f * knb + D(2.0f * kna + 4.0f * an - 1.0f); pwrq = 2.0f / (imr + 1.0f); ptr->prev_drive = drive; ptr->prev_blend = blend; } for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); prev_med = ptr->prev_med; prev_out = ptr->prev_out; if (in >= 0.0f) { med = (D(ap + in * (kpa - in)) + kpb) * pwrq; } else { med = (D(an - in * (kna + in)) + knb) * pwrq * -1.0f; } out = srct * (med - prev_med + prev_out); if (out < -1.0f) out = -1.0f; *(output++) += out * ptr->run_adding_gain; ptr->prev_med = M(med); ptr->prev_out = M(out); } ptr->rdrive = rdrive; ptr->rbdr = rbdr; ptr->kpa = kpa; ptr->kpb = kpb; ptr->kna = kna; ptr->knb = knb; ptr->ap = ap; ptr->an = an; ptr->imr = imr; ptr->kc = kc; ptr->srct = srct; ptr->sq = sq; ptr->pwrq = pwrq; } /* Throw away a TubeWarmth effect instance. */ void cleanup_TubeWarmth(LADSPA_Handle Instance) { free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_tubewarmth"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP TubeWarmth"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[DRIVE] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[BLEND] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[DRIVE] = strdup("Drive"); port_names[BLEND] = strdup("Tape--Tube Blend"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[DRIVE].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW); port_range_hints[BLEND].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[DRIVE].LowerBound = 0.1f; port_range_hints[DRIVE].UpperBound = 10.0f; port_range_hints[BLEND].LowerBound = -10.0f; port_range_hints[BLEND].UpperBound = 10.0f; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_TubeWarmth; mono_descriptor->connect_port = connect_port_TubeWarmth; mono_descriptor->activate = NULL; mono_descriptor->run = run_TubeWarmth; mono_descriptor->run_adding = run_adding_TubeWarmth; mono_descriptor->set_run_adding_gain = set_run_adding_gain_TubeWarmth; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_TubeWarmth; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/LadspaEffect/tap/tap_utils.h000066400000000000000000000146621247673406200214530ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_utils.h,v 1.5 2004/02/21 17:33:36 tszilagyi Exp $ */ #ifndef _ISOC99_SOURCE #define _ISOC99_SOURCE #endif #include #ifndef M_PI #define M_PI 3.14159265358979323846264338327 #endif /* push a sample into a ringbuffer and return the sample falling out */ static inline LADSPA_Data push_buffer(LADSPA_Data insample, LADSPA_Data * buffer, unsigned long buflen, unsigned long * pos) { LADSPA_Data outsample; outsample = buffer[*pos]; buffer[(*pos)++] = insample; if (*pos >= buflen) *pos = 0; return outsample; } /* read a value from a ringbuffer. * n == 0 returns the oldest sample from the buffer. * n == buflen-1 returns the sample written to the buffer * at the last push_buffer call. * n must not exceed buflen-1, or your computer will explode. */ static inline LADSPA_Data read_buffer(LADSPA_Data * buffer, unsigned long buflen, unsigned long pos, unsigned long n) { while (n + pos >= buflen) n -= buflen; return buffer[n + pos]; } /* overwrites a value in a ringbuffer, but pos stays the same. * n == 0 overwrites the oldest sample pushed in the buffer. * n == buflen-1 overwrites the sample written to the buffer * at the last push_buffer call. * n must not exceed buflen-1, or your computer... you know. */ static inline void write_buffer(LADSPA_Data insample, LADSPA_Data * buffer, unsigned long buflen, unsigned long pos, unsigned long n) { while (n + pos >= buflen) n -= buflen; buffer[n + pos] = insample; } /* Please note that the majority of the definitions and helper functions below have been derived from the source code of Steve Harris's SWH plugins (particularly from the "biquad.h" file). While I give him credit for his excellent work, I reserve myself to be blamed for any bugs or malfunction. */ #define db2lin(x) ((x) > -90.0f ? powf(10.0f, (x) * 0.05f) : 0.0f) #define ABS(x) (x)>0.0f?(x):-1.0f*(x) #define LN_2_2 0.34657359f #define LIMIT(v,l,u) ((v)<(l)?(l):((v)>(u)?(u):(v))) #define BIQUAD_TYPE float typedef BIQUAD_TYPE bq_t; /* Biquad filter (adapted from lisp code by Eli Brandt, http://www.cs.cmu.edu/~eli/) */ /* The prev. comment has been preserved from Steve Harris's biquad.h */ typedef struct { bq_t a1; bq_t a2; bq_t b0; bq_t b1; bq_t b2; bq_t x1; bq_t x2; bq_t y1; bq_t y2; } biquad; static inline void biquad_init(biquad *f) { f->x1 = 0.0f; f->x2 = 0.0f; f->y1 = 0.0f; f->y2 = 0.0f; } static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0f, fs/2.0f) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t J = pow(10.0f, gain * 0.025f); bq_t g = sw * sinhf(LN_2_2 * LIMIT(bw, 0.0001f, 4.0f) * w / sw); bq_t a0r = 1.0f / (1.0f + (g / J)); f->b0 = (1.0f + (g * J)) * a0r; f->b1 = (-2.0f * cw) * a0r; f->b2 = (1.0f - (g * J)) * a0r; f->a1 = -(f->b1); f->a2 = ((g / J) - 1.0f) * a0r; } static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); #if 0 b0 = (1 - cs) /2; b1 = 1 - cs; b2 = (1 - cs) /2; a0 = 1 + alpha; a1 = -2 * cs; a2 = 1 - alpha; #endif f->b0 = a0r * (1.0 - cs) * 0.5; f->b1 = a0r * (1.0 - cs); f->b2 = a0r * (1.0 - cs) * 0.5; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline void hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs) { bq_t omega = 2.0 * M_PI * fc/fs; bq_t sn = sin(omega); bq_t cs = cos(omega); bq_t alpha = sn * sinh(M_LN2 / 2.0 * bw * omega / sn); const float a0r = 1.0 / (1.0 + alpha); #if 0 b0 = (1 + cs) /2; b1 = -(1 + cs); b2 = (1 + cs) /2; a0 = 1 + alpha; a1 = -2 * cs; a2 = 1 - alpha; #endif f->b0 = a0r * (1.0 + cs) * 0.5; f->b1 = a0r * -(1.0 + cs); f->b2 = a0r * (1.0 + cs) * 0.5; f->a1 = a0r * (2.0 * cs); f->a2 = a0r * (alpha - 1.0); } static inline void ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t A = powf(10.0f, gain * 0.025f); bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - 1.0f) * (A - 1.0))); bq_t apc = cw * (A + 1.0f); bq_t amc = cw * (A - 1.0f); bq_t bs = b * sw; bq_t a0r = 1.0f / (A + 1.0f + amc + bs); f->b0 = a0r * A * (A + 1.0f - amc + bs); f->b1 = a0r * 2.0f * A * (A - 1.0f - apc); f->b2 = a0r * A * (A + 1.0f - amc - bs); f->a1 = a0r * 2.0f * (A - 1.0f + apc); f->a2 = a0r * (-A - 1.0f - amc + bs); } static inline void hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope, bq_t fs) { bq_t w = 2.0f * M_PI * LIMIT(fc, 1.0, fs/2.0) / fs; bq_t cw = cosf(w); bq_t sw = sinf(w); bq_t A = powf(10.0f, gain * 0.025f); bq_t b = sqrt(((1.0f + A * A) / LIMIT(slope, 0.0001f, 1.0f)) - ((A - 1.0f) * (A - 1.0f))); bq_t apc = cw * (A + 1.0f); bq_t amc = cw * (A - 1.0f); bq_t bs = b * sw; bq_t a0r = 1.0f / (A + 1.0f - amc + bs); f->b0 = a0r * A * (A + 1.0f + amc + bs); f->b1 = a0r * -2.0f * A * (A - 1.0f + apc); f->b2 = a0r * A * (A + 1.0f + amc - bs); f->a1 = a0r * -2.0f * (A - 1.0f - apc); f->a2 = a0r * (-A - 1.0f + amc + bs); } static inline bq_t biquad_run(biquad *f, bq_t x) { union { bq_t y; uint32_t y_int; } u; u.y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 + f->a1 * f->y1 + f->a2 * f->y2; if ((u.y_int & 0x7f800000) == 0) u.y = 0.0f; f->x2 = f->x1; f->x1 = x; f->y2 = f->y1; f->y1 = u.y; return u.y; } lmms-1.1.3/plugins/LadspaEffect/tap/tap_vibrato.c000066400000000000000000000273711247673406200217550ustar00rootroot00000000000000/* -*- linux-c -*- Copyright (C) 2004 Tom Szilagyi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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., 675 Mass Ave, Cambridge, MA 02139, USA. $Id: tap_vibrato.c,v 1.3 2004/02/21 17:33:36 tszilagyi Exp $ */ #include #include #include #include #include #include "tap_utils.h" /* The Unique ID of the plugin: */ #define ID_MONO 2148 /* The port numbers for the plugin: */ #define FREQ 0 #define DEPTH 1 #define DRYLEVEL 2 #define WETLEVEL 3 #define LATENCY 4 #define INPUT 5 #define OUTPUT 6 /* Total number of ports */ #define PORTCOUNT_MONO 7 /* * This has to be bigger than 0.2f * sample_rate / (2*PI) for any sample rate. * At 192 kHz 6238 is needed so this should be enough. */ #define PM_DEPTH 6300 #define PM_FREQ 30.0f #define COS_TABLE_SIZE 1024 LADSPA_Data cos_table[COS_TABLE_SIZE]; /* The structure used to hold port connection information and state */ typedef struct { LADSPA_Data * depth; LADSPA_Data * freq; LADSPA_Data * drylevel; LADSPA_Data * wetlevel; LADSPA_Data * latency; LADSPA_Data * input; LADSPA_Data * output; LADSPA_Data * ringbuffer; unsigned long buflen; unsigned long pos; LADSPA_Data phase; unsigned long sample_rate; LADSPA_Data run_adding_gain; } Vibrato; /* Construct a new plugin instance. */ LADSPA_Handle instantiate_Vibrato(const LADSPA_Descriptor * Descriptor, unsigned long sample_rate) { LADSPA_Handle * ptr; if ((ptr = malloc(sizeof(Vibrato))) != NULL) { ((Vibrato *)ptr)->sample_rate = sample_rate; ((Vibrato *)ptr)->run_adding_gain = 1.0f; if ((((Vibrato *)ptr)->ringbuffer = calloc(2 * PM_DEPTH, sizeof(LADSPA_Data))) == NULL) { free(ptr); return NULL; } ((Vibrato *)ptr)->buflen = ceil(0.2f * sample_rate / M_PI); ((Vibrato *)ptr)->pos = 0; return ptr; } return NULL; } void activate_Vibrato(LADSPA_Handle Instance) { Vibrato * ptr = (Vibrato *)Instance; unsigned long i; for (i = 0; i < 2 * PM_DEPTH; i++) ptr->ringbuffer[i] = 0.0f; ptr->phase = 0.0f; } /* Connect a port to a data location. */ void connect_port_Vibrato(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation) { Vibrato * ptr = (Vibrato *)Instance; switch (Port) { case DEPTH: ptr->depth = DataLocation; break; case FREQ: ptr->freq = DataLocation; break; case DRYLEVEL: ptr->drylevel = DataLocation; break; case WETLEVEL: ptr->wetlevel = DataLocation; break; case LATENCY: ptr->latency = DataLocation; *(ptr->latency) = ptr->buflen / 2; /* IS THIS LEGAL? */ break; case INPUT: ptr->input = DataLocation; break; case OUTPUT: ptr->output = DataLocation; break; } } void run_Vibrato(LADSPA_Handle Instance, unsigned long SampleCount) { Vibrato * ptr = (Vibrato *)Instance; LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,PM_FREQ); LADSPA_Data depth = LIMIT(LIMIT(*(ptr->depth),0.0f,20.0f) * ptr->sample_rate / 200.0f / M_PI / freq, 0, ptr->buflen / 2); LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data phase = 0.0f; LADSPA_Data fpos = 0.0f; LADSPA_Data n = 0.0f; LADSPA_Data rem = 0.0f; LADSPA_Data s_a, s_b; if (freq == 0.0f) depth = 0.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); phase = COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate + ptr->phase; while (phase >= COS_TABLE_SIZE) phase -= COS_TABLE_SIZE; push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); fpos = depth * (1.0f - cos_table[(unsigned long) phase]); n = floorf(fpos); rem = fpos - n; s_a = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n); s_b = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n + 1); *(output++) = wetlevel * ((1 - rem) * s_a + rem * s_b) + drylevel * read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->buflen / 2); } ptr->phase += COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate; while (ptr->phase >= COS_TABLE_SIZE) ptr->phase -= COS_TABLE_SIZE; *(ptr->latency) = ptr->buflen / 2; } void set_run_adding_gain_Vibrato(LADSPA_Handle Instance, LADSPA_Data gain) { Vibrato * ptr = (Vibrato *)Instance; ptr->run_adding_gain = gain; } void run_adding_Vibrato(LADSPA_Handle Instance, unsigned long SampleCount) { Vibrato * ptr = (Vibrato *)Instance; LADSPA_Data freq = LIMIT(*(ptr->freq),0.0f,PM_FREQ); LADSPA_Data depth = LIMIT(LIMIT(*(ptr->depth),0.0f,20.0f) * ptr->sample_rate / 200.0f / M_PI / freq, 0, ptr->buflen / 2); LADSPA_Data drylevel = db2lin(LIMIT(*(ptr->drylevel),-90.0f,20.0f)); LADSPA_Data wetlevel = db2lin(LIMIT(*(ptr->wetlevel),-90.0f,20.0f)); LADSPA_Data * input = ptr->input; LADSPA_Data * output = ptr->output; unsigned long sample_index; unsigned long sample_count = SampleCount; LADSPA_Data in = 0.0f; LADSPA_Data phase = 0.0f; LADSPA_Data fpos = 0.0f; LADSPA_Data n = 0.0f; LADSPA_Data rem = 0.0f; LADSPA_Data s_a, s_b; if (freq == 0.0f) depth = 0.0f; for (sample_index = 0; sample_index < sample_count; sample_index++) { in = *(input++); phase = COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate + ptr->phase; while (phase >= COS_TABLE_SIZE) phase -= COS_TABLE_SIZE; push_buffer(in, ptr->ringbuffer, ptr->buflen, &(ptr->pos)); fpos = depth * (1.0f - cos_table[(unsigned long) phase]); n = floorf(fpos); rem = fpos - n; s_a = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n); s_b = read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, (unsigned long) n + 1); *(output++) += ptr->run_adding_gain * wetlevel * ((1 - rem) * s_a + rem * s_b) + drylevel * read_buffer(ptr->ringbuffer, ptr->buflen, ptr->pos, ptr->buflen / 2); } ptr->phase += COS_TABLE_SIZE * freq * sample_index / ptr->sample_rate; while (ptr->phase >= COS_TABLE_SIZE) ptr->phase -= COS_TABLE_SIZE; *(ptr->latency) = ptr->buflen / 2; } /* Throw away a Vibrato effect instance. */ void cleanup_Vibrato(LADSPA_Handle Instance) { Vibrato * ptr = (Vibrato *)Instance; free(ptr->ringbuffer); free(Instance); } LADSPA_Descriptor * mono_descriptor = NULL; /* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void __attribute__((constructor)) tap_init() { int i; char ** port_names; LADSPA_PortDescriptor * port_descriptors; LADSPA_PortRangeHint * port_range_hints; if ((mono_descriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor))) == NULL) exit(1); for (i = 0; i < COS_TABLE_SIZE; i++) cos_table[i] = cosf(i * 2.0f * M_PI / COS_TABLE_SIZE); mono_descriptor->UniqueID = ID_MONO; mono_descriptor->Label = strdup("tap_vibrato"); mono_descriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE; mono_descriptor->Name = strdup("TAP Vibrato"); mono_descriptor->Maker = strdup("Tom Szilagyi"); mono_descriptor->Copyright = strdup("GPL"); mono_descriptor->PortCount = PORTCOUNT_MONO; if ((port_descriptors = (LADSPA_PortDescriptor *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortDescriptor))) == NULL) exit(1); mono_descriptor->PortDescriptors = (const LADSPA_PortDescriptor *)port_descriptors; port_descriptors[DEPTH] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[FREQ] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[DRYLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[WETLEVEL] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; port_descriptors[LATENCY] = LADSPA_PORT_OUTPUT | LADSPA_PORT_CONTROL; port_descriptors[INPUT] = LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; port_descriptors[OUTPUT] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; if ((port_names = (char **)calloc(PORTCOUNT_MONO, sizeof(char *))) == NULL) exit(1); mono_descriptor->PortNames = (const char **)port_names; port_names[FREQ] = strdup("Frequency [Hz]"); port_names[DEPTH] = strdup("Depth [%]"); port_names[DRYLEVEL] = strdup("Dry Level [dB]"); port_names[WETLEVEL] = strdup("Wet Level [dB]"); port_names[LATENCY] = strdup("latency"); port_names[INPUT] = strdup("Input"); port_names[OUTPUT] = strdup("Output"); if ((port_range_hints = ((LADSPA_PortRangeHint *)calloc(PORTCOUNT_MONO, sizeof(LADSPA_PortRangeHint)))) == NULL) exit(1); mono_descriptor->PortRangeHints = (const LADSPA_PortRangeHint *)port_range_hints; port_range_hints[DEPTH].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[FREQ].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[DRYLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM); port_range_hints[WETLEVEL].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0); port_range_hints[LATENCY].HintDescriptor = (LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM); port_range_hints[DEPTH].LowerBound = 0; port_range_hints[DEPTH].UpperBound = 20.0f; port_range_hints[FREQ].LowerBound = 0; port_range_hints[FREQ].UpperBound = PM_FREQ; port_range_hints[DRYLEVEL].LowerBound = -90.0f; port_range_hints[DRYLEVEL].UpperBound = +20.0f; port_range_hints[WETLEVEL].LowerBound = -90.0f; port_range_hints[WETLEVEL].UpperBound = +20.0f; port_range_hints[LATENCY].LowerBound = 0; port_range_hints[LATENCY].UpperBound = PM_DEPTH; port_range_hints[INPUT].HintDescriptor = 0; port_range_hints[OUTPUT].HintDescriptor = 0; mono_descriptor->instantiate = instantiate_Vibrato; mono_descriptor->connect_port = connect_port_Vibrato; mono_descriptor->activate = activate_Vibrato; mono_descriptor->run = run_Vibrato; mono_descriptor->run_adding = run_adding_Vibrato; mono_descriptor->set_run_adding_gain = set_run_adding_gain_Vibrato; mono_descriptor->deactivate = NULL; mono_descriptor->cleanup = cleanup_Vibrato; } void delete_descriptor(LADSPA_Descriptor * descriptor) { unsigned long index; if (descriptor) { free((char *)descriptor->Label); free((char *)descriptor->Name); free((char *)descriptor->Maker); free((char *)descriptor->Copyright); free((LADSPA_PortDescriptor *)descriptor->PortDescriptors); for (index = 0; index < descriptor->PortCount; index++) free((char *)(descriptor->PortNames[index])); free((char **)descriptor->PortNames); free((LADSPA_PortRangeHint *)descriptor->PortRangeHints); free(descriptor); } } /* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void __attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } /* Return a descriptor of the requested plugin type. */ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { switch (Index) { case 0: return mono_descriptor; default: return NULL; } } lmms-1.1.3/plugins/MidiImport/000077500000000000000000000000001247673406200162355ustar00rootroot00000000000000lmms-1.1.3/plugins/MidiImport/CMakeLists.txt000066400000000000000000000005731247673406200210020ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(midiimport MidiImport.cpp MidiImport.h portsmf/allegro.cpp portsmf/allegro.h portsmf/allegrosmfwr.cpp portsmf/allegrord.cpp portsmf/allegrowr.cpp portsmf/allegrosmfrd.cpp portsmf/mfmidi.cpp portsmf/mfmidi.h portsmf/strparse.cpp portsmf/strparse.h portsmf/algrd_internal.h portsmf/algsmfrd_internal.h portsmf/trace.h MOCFILES MidiImport.h) lmms-1.1.3/plugins/MidiImport/MidiImport.cpp000066400000000000000000000305531247673406200210240ustar00rootroot00000000000000/* * MidiImport.cpp - support for importing MIDI files * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include "MidiImport.h" #include "TrackContainer.h" #include "InstrumentTrack.h" #include "AutomationTrack.h" #include "AutomationPattern.h" #include "config_mgr.h" #include "Pattern.h" #include "Instrument.h" #include "MainWindow.h" #include "MidiTime.h" #include "debug.h" #include "embed.h" #include "song.h" #include "portsmf/allegro.h" #define makeID(_c0, _c1, _c2, _c3) \ ( 0 | \ ( ( _c0 ) | ( ( _c1 ) << 8 ) | ( ( _c2 ) << 16 ) | ( ( _c3 ) << 24 ) ) ) extern "C" { Plugin::Descriptor PLUGIN_EXPORT midiimport_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "MIDI Import", QT_TRANSLATE_NOOP( "pluginBrowser", "Filter for importing MIDI-files into LMMS" ), "Tobias Doerffel ", 0x0100, Plugin::ImportFilter, NULL, NULL, NULL } ; } MidiImport::MidiImport( const QString & _file ) : ImportFilter( _file, &midiimport_plugin_descriptor ), m_events(), m_timingDivision( 0 ) { } MidiImport::~MidiImport() { } bool MidiImport::tryImport( TrackContainer* tc ) { if( openFile() == false ) { return false; } #ifdef LMMS_HAVE_FLUIDSYNTH if( engine::hasGUI() && configManager::inst()->defaultSoundfont().isEmpty() ) { QMessageBox::information( engine::mainWindow(), tr( "Setup incomplete" ), tr( "You do not have set up a default soundfont in " "the settings dialog (Edit->Settings). " "Therefore no sound will be played back after " "importing this MIDI file. You should download " "a General MIDI soundfont, specify it in " "settings dialog and try again." ) ); } #else if( engine::hasGUI() ) { QMessageBox::information( engine::mainWindow(), tr( "Setup incomplete" ), tr( "You did not compile LMMS with support for " "SoundFont2 player, which is used to add default " "sound to imported MIDI files. " "Therefore no sound will be played back after " "importing this MIDI file." ) ); } #endif switch( readID() ) { case makeID( 'M', 'T', 'h', 'd' ): printf( "MidiImport::tryImport(): found MThd\n"); return readSMF( tc ); case makeID( 'R', 'I', 'F', 'F' ): printf( "MidiImport::tryImport(): found RIFF\n"); return readRIFF( tc ); default: printf( "MidiImport::tryImport(): not a Standard MIDI " "file\n" ); return false; } } class smfMidiCC { public: smfMidiCC() : at( NULL ), ap( NULL ), lastPos( 0 ) { } AutomationTrack * at; AutomationPattern * ap; MidiTime lastPos; smfMidiCC & create( TrackContainer* tc ) { if( !at ) { at = dynamic_cast( track::create( track::AutomationTrack, tc ) ); } return *this; } void clear() { at = NULL; ap = NULL; lastPos = 0; } smfMidiCC & putValue( MidiTime time, AutomatableModel * objModel, float value ) { if( !ap || time > lastPos + DefaultTicksPerTact ) { MidiTime pPos = MidiTime( time.getTact(), 0 ); ap = dynamic_cast( at->createTCO(0) ); ap->movePosition( pPos ); } ap->addObject( objModel ); lastPos = time; time = time - ap->startPosition(); ap->putValue( time, value, false ); ap->changeLength( MidiTime( time.getTact() + 1, 0 ) ); return *this; } }; class smfMidiChannel { public: smfMidiChannel() : it( NULL ), p( NULL ), it_inst( NULL ), isSF2( false ), hasNotes( false ), lastEnd( 0 ) { } InstrumentTrack * it; Pattern* p; Instrument * it_inst; bool isSF2; bool hasNotes; MidiTime lastEnd; smfMidiChannel * create( TrackContainer* tc ) { if( !it ) { it = dynamic_cast( track::create( track::InstrumentTrack, tc ) ); #ifdef LMMS_HAVE_FLUIDSYNTH it_inst = it->loadInstrument( "sf2player" ); if( it_inst ) { isSF2 = true; it_inst->loadFile( configManager::inst()->defaultSoundfont() ); it_inst->childModel( "bank" )->setValue( 0 ); it_inst->childModel( "patch" )->setValue( 0 ); } else { it_inst = it->loadInstrument( "patman" ); } #else it_inst = it->loadInstrument( "patman" ); #endif lastEnd = 0; } return this; } void addNote( note & n ) { if( !p || n.pos() > lastEnd + DefaultTicksPerTact ) { MidiTime pPos = MidiTime( n.pos().getTact(), 0 ); p = dynamic_cast( it->createTCO( 0 ) ); p->movePosition( pPos ); } hasNotes = true; lastEnd = n.pos() + n.length(); n.setPos( n.pos( p->startPosition() ) ); p->addNote( n, false ); } }; bool MidiImport::readSMF( TrackContainer* tc ) { QString filename = file().fileName(); closeFile(); const int preTrackSteps = 2; QProgressDialog pd( TrackContainer::tr( "Importing MIDI-file..." ), TrackContainer::tr( "Cancel" ), 0, preTrackSteps, engine::mainWindow() ); pd.setWindowTitle( TrackContainer::tr( "Please wait..." ) ); pd.setWindowModality(Qt::WindowModal); pd.setMinimumDuration( 0 ); pd.setValue( 0 ); Alg_seq_ptr seq = new Alg_seq(filename.toLocal8Bit(), true); seq->convert_to_beats(); pd.setMaximum( seq->tracks() + preTrackSteps ); pd.setValue( 1 ); // 128 CC + Pitch Bend smfMidiCC ccs[129]; smfMidiChannel chs[256]; MeterModel & timeSigMM = engine::getSong()->getTimeSigModel(); AutomationPattern * timeSigNumeratorPat = AutomationPattern::globalAutomationPattern( &timeSigMM.numeratorModel() ); AutomationPattern * timeSigDenominatorPat = AutomationPattern::globalAutomationPattern( &timeSigMM.denominatorModel() ); // TODO: adjust these to Time.Sig changes double beatsPerTact = 4; double ticksPerBeat = DefaultTicksPerTact / beatsPerTact; // Time-sig changes Alg_time_sigs * timeSigs = &seq->time_sig; for( int s = 0; s < timeSigs->length(); ++s ) { Alg_time_sig timeSig = (*timeSigs)[s]; // Initial timeSig, set song-default value if(/* timeSig.beat == 0*/ true ) { // TODO set song-global default value printf("Another timesig at %f\n", timeSig.beat); timeSigNumeratorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.num ); timeSigDenominatorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.den ); } else { } } pd.setValue( 2 ); // Tempo stuff AutomationPattern * tap = tc->tempoAutomationPattern(); if( tap ) { tap->clear(); Alg_time_map * timeMap = seq->get_time_map(); Alg_beats & beats = timeMap->beats; for( int i = 0; i < beats.len - 1; i++ ) { Alg_beat_ptr b = &(beats[i]); double tempo = ( beats[i + 1].beat - b->beat ) / ( beats[i + 1].time - beats[i].time ); tap->putValue( b->beat * ticksPerBeat, tempo * 60.0 ); } if( timeMap->last_tempo_flag ) { Alg_beat_ptr b = &( beats[beats.len - 1] ); tap->putValue( b->beat * ticksPerBeat, timeMap->last_tempo * 60.0 ); } } // Song events for( int e = 0; e < seq->length(); ++e ) { Alg_event_ptr evt = (*seq)[e]; if( evt->is_update() ) { printf("Unhandled SONG update: %d %f %s\n", evt->get_type_code(), evt->time, evt->get_attribute() ); } } // Tracks for( int t = 0; t < seq->tracks(); ++t ) { Alg_track_ptr trk = seq->track( t ); pd.setValue( t + preTrackSteps ); for( int c = 0; c < 129; c++ ) { ccs[c].clear(); } // Now look at events for( int e = 0; e < trk->length(); ++e ) { Alg_event_ptr evt = (*trk)[e]; if( evt->chan == -1 ) { printf("MISSING GLOBAL THINGY\n"); printf(" %d %d %f %s\n", (int) evt->chan, evt->get_type_code(), evt->time, evt->get_attribute() ); // Global stuff } else if( evt->is_note() && evt->chan < 256 ) { smfMidiChannel * ch = chs[evt->chan].create( tc ); Alg_note_ptr noteEvt = dynamic_cast( evt ); note n( noteEvt->get_duration() * ticksPerBeat, noteEvt->get_start_time() * ticksPerBeat, noteEvt->get_identifier() - 12, noteEvt->get_loud()); ch->addNote( n ); } else if( evt->is_update() ) { smfMidiChannel * ch = chs[evt->chan].create( tc ); double time = evt->time*ticksPerBeat; QString update( evt->get_attribute() ); if( update == "programi" ) { long prog = evt->get_integer_value(); if( ch->isSF2 ) { ch->it_inst->childModel( "bank" )->setValue( 0 ); ch->it_inst->childModel( "patch" )->setValue( prog ); } else { const QString num = QString::number( prog ); const QString filter = QString().fill( '0', 3 - num.length() ) + num + "*.pat"; const QString dir = "/usr/share/midi/" "freepats/Tone_000/"; const QStringList files = QDir( dir ). entryList( QStringList( filter ) ); if( ch->it_inst && !files.empty() ) { ch->it_inst->loadFile( dir+files.front() ); } } } else if( update == "tracknames" ) { QString trackName( evt->get_string_value() ); ch->it->setName( trackName ); //ch.p->setName( trackName ); } else if( update.startsWith( "control" ) || update == "bendr" ) { int ccid = update.mid( 7, update.length()-8 ).toInt(); if( update == "bendr" ) { ccid = 128; } if( ccid <= 128 ) { double cc = evt->get_real_value(); AutomatableModel * objModel = NULL; switch( ccid ) { case 0: if( ch->isSF2 && ch->it_inst ) { objModel = ch->it_inst->childModel( "bank" ); printf("BANK SELECT %f %d\n", cc, (int)(cc*127.0)); cc *= 127.0f; } break; case 7: objModel = ch->it->volumeModel(); cc *= 100.0f; break; case 10: objModel = ch->it->panningModel(); cc = cc * 200.f - 100.0f; break; case 128: objModel = ch->it->pitchModel(); cc = cc * 100.0f; break; } if( objModel ) { if( time == 0 && objModel ) { objModel->setInitValue( cc ); } else { ccs[ccid].create( tc ); ccs[ccid].putValue( time, objModel, cc ); } } } } else { printf("Unhandled update: %d %d %f %s\n", (int) evt->chan, evt->get_type_code(), evt->time, evt->get_attribute() ); } } } } delete seq; for( int c=0; c < 256; ++c ) { if( !chs[c].hasNotes && chs[c].it ) { printf(" Should remove empty track\n"); // must delete trackView first - but where is it? //tc->removeTrack( chs[c].it ); //it->deleteLater(); } } return true; } bool MidiImport::readRIFF( TrackContainer* tc ) { // skip file length skip( 4 ); // check file type ("RMID" = RIFF MIDI) if( readID() != makeID( 'R', 'M', 'I', 'D' ) ) { invalid_format: qWarning( "MidiImport::readRIFF(): invalid file format" ); return false; } // search for "data" chunk while( 1 ) { const int id = readID(); const int len = read32LE(); if( file().atEnd() ) { data_not_found: qWarning( "MidiImport::readRIFF(): data chunk not found" ); return false; } if( id == makeID( 'd', 'a', 't', 'a' ) ) { break; } if( len < 0 ) { goto data_not_found; } skip( ( len + 1 ) & ~1 ); } // the "data" chunk must contain data in SMF format if( readID() != makeID( 'M', 'T', 'h', 'd' ) ) { goto invalid_format; } return readSMF( tc ); } void MidiImport::error() { printf( "MidiImport::readTrack(): invalid MIDI data (offset %#x)\n", (unsigned int) file().pos() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new MidiImport( QString::fromUtf8( static_cast( _data ) ) ); } } #include "moc_MidiImport.cxx" lmms-1.1.3/plugins/MidiImport/MidiImport.h000066400000000000000000000050301247673406200204610ustar00rootroot00000000000000/* * MidiImport.h - support for importing MIDI-files * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MIDI_IMPORT_H #define _MIDI_IMPORT_H #include #include #include #include "MidiEvent.h" #include "ImportFilter.h" class MidiImport : public ImportFilter { Q_OBJECT public: MidiImport( const QString & _file ); virtual ~MidiImport(); virtual PluginView * instantiateView( QWidget * ) { return( NULL ); } private: virtual bool tryImport( TrackContainer* tc ); bool readSMF( TrackContainer* tc ); bool readRIFF( TrackContainer* tc ); bool readTrack( int _track_end, QString & _track_name ); void error( void ); inline int readInt( int _bytes ) { int c, value = 0; do { c = readByte(); if( c == -1 ) { return( -1 ); } value = ( value << 8 ) | c; } while( --_bytes ); return( value ); } inline int read32LE() { int value = readByte(); value |= readByte() << 8; value |= readByte() << 16; value |= readByte() << 24; return value; } inline int readVar() { int c = readByte(); int value = c & 0x7f; if( c & 0x80 ) { c = readByte(); value = ( value << 7 ) | ( c & 0x7f ); if( c & 0x80 ) { c = readByte(); value = ( value << 7 ) | ( c & 0x7f ); if( c & 0x80 ) { c = readByte(); value = ( value << 7 ) | c; if( c & 0x80 ) { return -1; } } } } return( !file().atEnd() ? value : -1 ); } inline int readID() { return read32LE(); } inline void skip( int _bytes ) { while( _bytes > 0 ) { readByte(); --_bytes; } } typedef QVector > EventVector; EventVector m_events; int m_timingDivision; } ; #endif lmms-1.1.3/plugins/MidiImport/portsmf/000077500000000000000000000000001247673406200177275ustar00rootroot00000000000000lmms-1.1.3/plugins/MidiImport/portsmf/README.txt000066400000000000000000000024041247673406200214250ustar00rootroot00000000000000portsmf README.txt 14 Jun 2008 Roger B. Dannenberg Portsmf is "Port Standard MIDI File", a cross-platform, C++ library for reading and writing Standard MIDI Files. License information: free and open source, see license.txt for details Features: - input and output of Standard MIDI Files - data structures, classes, etc. for representing music data in memory o sequence structure consisting of multiple tracks o track structure consisting of multiple events o events contain note and control data o extensible attribute-value property lists o tempo track and time signature representation - input and output of a text-based representation: Allegro files - extensive editing operations on sequences and tracks - conversion to/from binary buffers for archiving, undo/redo, etc. Portsmf is a relatively small number of about 9 files, so there is currently no support for building/maintaining Portsmf as a separate library. (Contributions are welcome.) For now, it is suggested that you simply compile these files along with your application sources. There is a test program in portsmf_test and makefiles to build it as an example. You might want to browse through portsmf_test/allegro_test.cpp for examples that use and exercise most of the portsmf functions. lmms-1.1.3/plugins/MidiImport/portsmf/algrd_internal.h000066400000000000000000000002131247673406200230610ustar00rootroot00000000000000/* algread_internal.h -- interface between allegro.cpp and allegrord.cpp */ Alg_error alg_read(std::istream &file, Alg_seq_ptr new_seq); lmms-1.1.3/plugins/MidiImport/portsmf/algsmfrd_internal.h000066400000000000000000000002161247673406200235720ustar00rootroot00000000000000/* algsmfrd_internal.h -- interface from allegrosmfrd.cpp to allegro.cpp */ Alg_error alg_smf_read(std::istream &file, Alg_seq_ptr new_seq); lmms-1.1.3/plugins/MidiImport/portsmf/allegro.cpp000066400000000000000000002507751247673406200221000ustar00rootroot00000000000000// Allegro: music representation system, with // extensible in-memory sequence structure // upward compatible with MIDI // implementations in C++ and Serpent // external, text-based representation // compatible with Aura // /* CHANGE LOG: 04 apr 03 -- fixed bug in add_track that caused infinite loop */ #include "debug.h" #include "stdlib.h" #include "stdio.h" #include "string.h" #include "memory.h" #include #include using namespace std; #include "allegro.h" #include "algrd_internal.h" #include "algsmfrd_internal.h" // #include "trace.h" -- only needed for debugging #include "math.h" #define STREQL(x, y) (strcmp(x, y) == 0) #define MAX(x, y) ((x) > (y) ? (x) : (y)) // 4311 is type cast ponter to long warning // 4996 is warning against strcpy // 4267 is size_t to long warning //#pragma warning(disable: 4311 4996 4267) Alg_atoms symbol_table; Serial_buffer Alg_track::ser_buf; // declare the static variable bool within(double d1, double d2, double epsilon) { d1 -= d2; return d1 < epsilon && d1 > -epsilon; } char *heapify(const char *s) { char *h = new char[strlen(s) + 1]; strcpy(h, s); return h; } void Alg_atoms::expand() { maxlen = (maxlen + 5); // extra growth for small sizes maxlen += (maxlen >> 2); // add 25% char **new_atoms = new Alg_attribute[maxlen]; // now do copy memcpy(new_atoms, atoms, len * sizeof(Alg_attribute)); if (atoms) delete[] atoms; atoms = new_atoms; } // insert_new -- insert an attribute name and type // // attributes are stored as a string consisting of the type // (a char) followed by the attribute name. This makes it // easy to retrieve the type or the name or both. // Alg_attribute Alg_atoms::insert_new(const char *name, char attr_type) { if (len == maxlen) expand(); char *h = new char[strlen(name) + 2]; strcpy(h + 1, name); *h = attr_type; atoms[len++] = h; return h; } Alg_attribute Alg_atoms::insert_attribute(Alg_attribute attr) { for (int i = 0; i < len; i++) { if (STREQL(attr, atoms[i])) { return atoms[i]; } } return insert_new(attr + 1, attr[0]); } Alg_attribute Alg_atoms::insert_string(const char *name) { char attr_type = name[strlen(name) - 1]; for (int i = 0; i < len; i++) { if (attr_type == atoms[i][0] && STREQL(name, atoms[i] + 1)) { return atoms[i]; } } return insert_new(name, attr_type); } void Alg_parameter::copy(Alg_parameter_ptr parm) { *this = *parm; // copy all fields // if the value is a string, copy the string if (attr_type() == 's') { s = heapify(s); } } void Alg_parameter::show() { switch (attr[0]) { case 'r': printf("%s:%g", attr_name(), r); break; case 's': printf("%s:%s", attr_name(), s); break; case 'i': printf("%s:%d", attr_name(), (int) i); break; case 'l': printf("%s:%s", attr_name(), (l ? "t" : "f")); break; case 'a': printf("%s:%s", attr_name(), a); break; } } Alg_parameter::~Alg_parameter() { if (attr_type() == 's' && s) { delete[] s; } } void Alg_parameters::insert_real(Alg_parameters **list, char *name, double r) { Alg_parameters_ptr a = new Alg_parameters(*list); *list = a; a->parm.set_attr(symbol_table.insert_string(name)); a->parm.r = r; assert(a->parm.attr_type() == 'r'); } void Alg_parameters::insert_string(Alg_parameters **list, char *name, char *s) { Alg_parameters_ptr a = new Alg_parameters(*list); *list = a; a->parm.set_attr(symbol_table.insert_string(name)); // string is deleted when parameter is deleted a->parm.s = heapify(s); assert(a->parm.attr_type() == 's'); } void Alg_parameters::insert_integer(Alg_parameters **list, char *name, long i) { Alg_parameters_ptr a = new Alg_parameters(*list); *list = a; a->parm.set_attr(symbol_table.insert_string(name)); a->parm.i = i; assert(a->parm.attr_type() == 'i'); } void Alg_parameters::insert_logical(Alg_parameters **list, char *name, bool l) { Alg_parameters_ptr a = new Alg_parameters(*list); *list = a; a->parm.set_attr(symbol_table.insert_string(name)); a->parm.l = l; assert(a->parm.attr_type() == 'l'); } void Alg_parameters::insert_atom(Alg_parameters **list, char *name, char *s) { Alg_parameters_ptr a = new Alg_parameters(*list); *list = a; a->parm.set_attr(symbol_table.insert_string(name)); a->parm.a = symbol_table.insert_string(s); assert(a->parm.attr_type() == 'a'); } Alg_parameters *Alg_parameters::remove_key(Alg_parameters **list, const char *name) { while (*list) { if (STREQL((*list)->parm.attr_name(), name)) { Alg_parameters_ptr p = *list; *list = p->next; p->next = NULL; return p; // caller should free this pointer } list = &((*list)->next); } return NULL; } Alg_parameter_ptr Alg_parameters::find(Alg_attribute *attr) { assert(attr); Alg_parameters_ptr temp = this; while (temp) { if (temp->parm.attr == *attr) { return &(temp->parm); } } return NULL; } int Alg_event::get_type_code() { if (!is_note()) { const char* attr = get_attribute(); if (STREQL(attr, "gate")) // volume change return ALG_GATE; if (STREQL(attr, "bend")) // pitch bend return ALG_BEND; if (strncmp(attr, "control", 7) == 0) // control change // note that midi control changes have attributes of the form // "control" where n is the decimal number (as a character string) // of the midi controller, e.g. control2 is the breath controller. // We don't check for decimal numbers in the range 0-127, so any // attribute that begins with "control" is an ALG_CONTROL: return ALG_CONTROL; if (STREQL(attr, "program")) // program change return ALG_PROGRAM; if (STREQL(attr, "pressure")) // pressure change return ALG_PRESSURE; if (STREQL(attr, "keysig")) // key signature return ALG_KEYSIG; if (STREQL(attr, "timesig_num")) // time signature numerator return ALG_TIMESIG_NUM; if (STREQL(attr, "timesig_den")) // time signature denominator return ALG_TIMESIG_DEN; return ALG_OTHER; } return ALG_NOTE; // it is a note } void Alg_event::set_parameter(Alg_parameter_ptr new_parameter) { Alg_parameter_ptr parm; if (is_note()) { Alg_note_ptr note = (Alg_note_ptr) this; parm = note->parameters->find(&(new_parameter->attr)); if (!parm) { note->parameters = new Alg_parameters(note->parameters); parm = &(note->parameters->parm); } } else { // update Alg_update_ptr update = (Alg_update_ptr) this; parm = &(update->parameter); } parm->copy(new_parameter); // copy entire parameter } void Alg_event::set_string_value(char *a, char *value) { assert(a); // must be non-null Alg_attribute attr = symbol_table.insert_string(a); assert(attr[0] == 's'); Alg_parameter parm; parm.set_attr(attr); parm.s = value; set_parameter(&parm); parm.s = NULL; // do this to prevent string from being freed } void Alg_event::set_real_value(char *a, double value) { assert(a); // must be non-null // attr is like a, but it has the type code prefixed for // fast lookup, and it is a unique string in symbol_table // e.g. a="attackr" -> attr="rattackr" Alg_attribute attr = symbol_table.insert_string(a); assert(attr[0] == 'r'); Alg_parameter parm; parm.set_attr(attr); parm.r = value; set_parameter(&parm); // since type is 'r' we don't have to NULL the string } void Alg_event::set_logical_value(char *a, bool value) { assert(a); // must be non-null Alg_attribute attr = symbol_table.insert_string(a); assert(attr[0] == 'l'); Alg_parameter parm; parm.set_attr(attr); parm.l = value; set_parameter(&parm); // since type is 'l' we don't have to NULL the string } void Alg_event::set_integer_value(char *a, long value) { assert(a); // must be non-null Alg_attribute attr = symbol_table.insert_string(a); assert(attr[0] == 'i'); Alg_parameter parm; parm.set_attr(attr); parm.i = value; set_parameter(&parm); // since tpye is 'i' we don't have to NULL the string } void Alg_event::set_atom_value(char *a, char *value) { assert(a); // must be non-null Alg_attribute attr = symbol_table.insert_string(a); assert(attr[0] == 'a'); Alg_parameter parm; parm.set_attr(attr); parm.a = value; set_parameter(&parm); /* since type is 'a' we don't have to null the string */ } float Alg_event::get_pitch() { assert(is_note()); Alg_note* note = (Alg_note *) this; return note->pitch; } float Alg_event::get_loud() { assert(is_note()); Alg_note* note = (Alg_note *) this; return note->loud; } double Alg_event::get_start_time() { assert(is_note()); Alg_note* note = (Alg_note *) this; return note->time; } double Alg_event::get_end_time() { assert(is_note()); Alg_note* note = (Alg_note *) this; return note->time + note->dur; } double Alg_event::get_duration() { assert(is_note()); Alg_note* note = (Alg_note *) this; return note->dur; } void Alg_event::set_pitch(float p) { assert(is_note()); Alg_note* note = (Alg_note *) this; note->pitch = p; } void Alg_event::set_loud(float l) { assert(is_note()); Alg_note *note = (Alg_note *) this; note->loud = l; } void Alg_event::set_duration(double d) { assert(is_note()); Alg_note* note = (Alg_note *) this; note->dur = d; } bool Alg_event::has_attribute(char *a) { assert(is_note()); assert(a); // must be non-null Alg_note* note = (Alg_note *) this; Alg_attribute attr = symbol_table.insert_string(a); Alg_parameter_ptr parm = note->parameters->find(&attr); return parm != NULL; } char Alg_event::get_attribute_type(char *a) { assert(is_note()); assert(a); return a[strlen(a) - 1]; } char *Alg_event::get_string_value(char *a, char *value) { assert(is_note()); assert(a); // must be non-null Alg_note* note = (Alg_note *) this; Alg_attribute attr = symbol_table.insert_string(a); assert(a[0] == 's'); // must be of type string Alg_parameter_ptr parm = note->parameters->find(&attr); if (parm) return parm->s; return value; } double Alg_event::get_real_value(char *a, double value) { assert(is_note()); assert(a); Alg_note* note = (Alg_note *) this; Alg_attribute attr = symbol_table.insert_string(a); assert(a[0] == 'r'); // must be of type real Alg_parameter_ptr parm = note->parameters->find(&attr); if (parm) return parm->r; return value; } bool Alg_event::get_logical_value(char *a, bool value) { assert(is_note()); assert(a); Alg_note* note = (Alg_note *) this; Alg_attribute attr = symbol_table.insert_string(a); assert(a[0] == 'l'); // must be of type logical Alg_parameter_ptr parm = note->parameters->find(&attr); if (parm) return parm->l; return value; } long Alg_event::get_integer_value(char *a, long value) { assert(is_note()); assert(a); Alg_note* note = (Alg_note *) this; Alg_attribute attr = symbol_table.insert_string(a); assert(a[0] == 'i'); // must be of type integer Alg_parameter_ptr parm = note->parameters->find(&attr); if (parm) return parm->i; return value; } char *Alg_event::get_atom_value(char *a, char *value) { assert(is_note()); assert(a); Alg_note* note = (Alg_note *) this; Alg_attribute attr = symbol_table.insert_string(a); assert(a[0] == 'a'); // must be of type atom Alg_parameter_ptr parm = note->parameters->find(&attr); if (parm) return parm->a; // if default is a string, convert to an atom (unique // string in symbol table) and return it return (value == NULL ? NULL : symbol_table.insert_string(value)); } void Alg_event::delete_attribute(char *a) { assert(is_note()); Alg_note* note = (Alg_note *) this; Alg_parameters::remove_key(&(note->parameters), a); } const char *Alg_event::get_attribute() // Note: this returns a string, not an Alg_attribute { assert(is_update()); Alg_update* update = (Alg_update *) this; return update->parameter.attr_name(); } char Alg_event::get_update_type() { assert(is_update()); Alg_update* update = (Alg_update *) this; return update->parameter.attr_type(); } char *Alg_event::get_string_value() { assert(is_update()); Alg_update* update = (Alg_update *) this; assert(get_update_type() == 's'); return update->parameter.attr_name(); } double Alg_event::get_real_value() { assert(is_update()); Alg_update* update = (Alg_update *) this; assert(get_update_type() == 'r'); return update->parameter.r; } bool Alg_event::get_logical_value() { assert(is_update()); Alg_update* update = (Alg_update *) this; assert(get_update_type() == 'l'); return update->parameter.l; } long Alg_event::get_integer_value() { assert(is_update()); Alg_update* update = (Alg_update *) this; assert(get_update_type() == 'i'); return update->parameter.i; } char *Alg_event::get_atom_value() { assert(is_update()); Alg_update* update = (Alg_update *) this; assert(get_update_type() == 'a'); return update->parameter.a; } bool Alg_event::overlap(double t, double len, bool all) { // event starts within region if (time >= t && time <= t + len - ALG_EPS) return true; if (all && is_note()) { double dur = ((Alg_note_ptr) this)->dur; // note ends within region if (time < t && time + dur - ALG_EPS > t) return true; } // does not overlap return false; } Alg_note::Alg_note(Alg_note_ptr note) { *this = *note; // copy all fields // parameters is now a shared pointer. We need to copy the // parameters Alg_parameters_ptr next_param_ptr = parameters; while (next_param_ptr) { Alg_parameters_ptr new_params = new Alg_parameters(next_param_ptr->next); new_params->parm.copy(&(next_param_ptr->parm)); // copy the attribute and value next_param_ptr = new_params->next; } } Alg_note::~Alg_note() { while (parameters) { Alg_parameters_ptr to_delete = parameters; parameters = parameters->next; delete to_delete; } } void Alg_note::show() { printf("Alg_note: time %g, chan %d, dur %g, key %d, " "pitch %g, loud %g, attributes ", time, (int) chan, dur, (int) key, pitch, loud); Alg_parameters_ptr parms = parameters; while (parms) { parms->parm.show(); printf(" "); parms = parms->next; } printf("\n"); } Alg_update::Alg_update(Alg_update_ptr update) { *this = *update; // copy all fields // parameter requires careful copy to possibly duplicate string value: this->parameter.copy(&(update->parameter)); } void Alg_update::show() { printf("Alg_update: "); parameter.show(); printf("\n"); } void Alg_events::expand() { maxlen = (maxlen + 5); // extra growth for small sizes maxlen += (maxlen >> 2); // add 25% Alg_event_ptr *new_events = new Alg_event_ptr[maxlen]; // now do copy memcpy(new_events, events, len * sizeof(Alg_event_ptr)); if (events) delete[] events; events = new_events; } void Alg_events::insert(Alg_event_ptr event) { if (maxlen <= len) { expand(); } // Note: if the new event is the last one, the assignment // events[i] = event; (below) will never execute, so just // in case, we do the assignment here. events[len] will // be replaced during the memmove() operation below if // this is not the last event. events[len] = event; len++; // find insertion point: (this could be a binary search) for (int i = 0; i < len; i++) { if (events[i]->time > event->time) { // insert event at i memmove(&events[i + 1], &events[i], sizeof(Alg_event_ptr) * (len - i - 1)); events[i] = event; return; } } } Alg_event_ptr Alg_events::uninsert(long index) { assert(0 <= index && index < len); Alg_event_ptr event = events[index]; memmove(events + index, events + index + 1, sizeof(Alg_event_ptr) * (len - index - 1)); len--; return event; } void Alg_events::append(Alg_event_ptr event) { if (maxlen <= len) { expand(); } events[len++] = event; // keep track of last note_off time if (event->is_note()) { Alg_note_ptr note = (Alg_note_ptr) event; double note_off = note->time + note->dur; if (note_off > last_note_off) last_note_off = note_off; } } Alg_events::~Alg_events() { // individual events are not deleted, only the array if (events) { delete[] events; } } Alg_event_list::Alg_event_list(Alg_track *owner) { events_owner = owner; sequence_number = owner->sequence_number; beat_dur = 0.0; real_dur = 0.0; type = 'e'; } Alg_event_ptr &Alg_event_list::operator [](int i) { assert(i >= 0 && i < len); return events[i]; } Alg_event_list::~Alg_event_list() { // note that the events contained in the list are not destroyed } void Alg_event_list::set_start_time(Alg_event *event, double t) { // For Alg_event_list, find the owner and do the update there // For Alg_track, change the time and move the event to the right place // For Alg_seq, find the track and do the update there long index = 0, i; Alg_track_ptr track_ptr = Alg_track_ptr(); if (type == 'e') { // this is an Alg_event_list // make sure the owner has not changed its event set assert(events_owner && sequence_number == events_owner->sequence_number); // do the update on the owner events_owner->set_start_time(event, t); return; } else if (type == 't') { // this is an Alg_track // find the event in the track track_ptr = (Alg_track_ptr) this; // this should be a binary search since events are in time order // probably there should be member function to do the search for (index = 0; index < length(); index++) { if ((*track_ptr)[index] == event) goto found_event; } } else { // type == 's', an Alg_seq Alg_seq_ptr seq = (Alg_seq_ptr) this; for (i = 0; i < seq->tracks(); i++) { track_ptr = seq->track(i); // if you implemented binary search, you could call it // instead of this loop too. for (index = 0; index < track_ptr->length(); index++) { if ((*track_ptr)[index] == event) goto found_event; } } } assert(false); // event not found seq or track! found_event: // at this point, track[index] == event // we could be clever and figure out exactly what notes to move // but it is simpler to just remove the event and reinsert it: track_ptr->uninsert(index); event->time = t; track_ptr->insert(event); } void Alg_beats::expand() { maxlen = (maxlen + 5); // extra growth for small sizes maxlen += (maxlen >> 2); // add 25% Alg_beat_ptr new_beats = new Alg_beat[maxlen]; // now do copy memcpy(new_beats, beats, len * sizeof(Alg_beat)); if (beats) delete[] beats; beats = new_beats; } void Alg_beats::insert(long i, Alg_beat_ptr beat) { assert(i >= 0 && i <= len); if (maxlen <= len) { expand(); } memmove(&beats[i + 1], &beats[i], sizeof(Alg_beat) * (len - i)); memcpy(&beats[i], beat, sizeof(Alg_beat)); len++; } Alg_time_map::Alg_time_map(Alg_time_map *map) { refcount = 0; assert(map->beats[0].beat == 0 && map->beats[0].time == 0); assert(map->beats.len > 0); // new_beats[0] = map->beats[0]; // this is commented because // both new_beats[0] and map->beats[0] should be (0, 0) for (int i = 1; i < map->beats.len; i++) { beats.insert(i, &map->beats[i]); } last_tempo = map->last_tempo; last_tempo_flag = map->last_tempo_flag; } void Alg_time_map::show() { printf("Alg_time_map: "); for (int i = 0; i < beats.len; i++) { Alg_beat &b = beats[i]; printf("(%g, %g) ", b.time, b.beat); } printf("last tempo: %g\n", last_tempo); } long Alg_time_map::locate_time(double time) { int i = 0; while ((i < beats.len) && (time > beats[i].time)) { i++; } return i; } long Alg_time_map::locate_beat(double beat) { int i = 0; while ((i < beats.len) && (beat > beats[i].beat)) { i++; } return i; } double Alg_time_map::beat_to_time(double beat) { Alg_beat_ptr mbi; Alg_beat_ptr mbi1; if (beat <= 0) { return beat; } int i = locate_beat(beat); if (i == beats.len) { if (last_tempo_flag) { return beats[i - 1].time + (beat - beats[i - 1].beat) / last_tempo; } else if (i == 1) { return beat * 60.0 / ALG_DEFAULT_BPM; // so we use that as default allegro tempo too } else { mbi = &beats[i - 2]; mbi1 = &beats[i - 1]; } } else { mbi = &beats[i - 1]; mbi1 = &beats[i]; } // whether w extrapolate or interpolate, the math is the same double time_dif = mbi1->time - mbi->time; double beat_dif = mbi1->beat - mbi->beat; return mbi->time + (beat - mbi->beat) * time_dif / beat_dif; } double Alg_time_map::time_to_beat(double time) { Alg_beat_ptr mbi; Alg_beat_ptr mbi1; if (time <= 0.0) return time; int i = locate_time(time); if (i == beats.len) { if (last_tempo_flag) { return beats[i - 1].beat + (time - beats[i - 1].time) * last_tempo; } else if (i == 1) { return time * (ALG_DEFAULT_BPM / 60.0); } else { mbi = &beats[i - 2]; mbi1 = &beats[i - 1]; } } else { mbi = &beats[i - 1]; mbi1 = & beats[i]; } double time_dif = mbi1->time - mbi->time; double beat_dif = mbi1->beat - mbi->beat; return mbi->beat + (time - mbi->time) * beat_dif / time_dif; } void Alg_time_map::insert_beat(double time, double beat) { int i = locate_time(time); // i is insertion point if (i < beats.len && within(beats[i].time, time, 0.000001)) { // replace beat if time is already in the map beats[i].beat = beat; } else { Alg_beat point; point.beat = beat; point.time = time; beats.insert(i, &point); } // beats[i] contains new beat // make sure we didn't generate a zero tempo. // if so, space beats by one microbeat as necessary long j = i; if (j == 0) j = 1; // do not adjust beats[0] while (j < beats.len && beats[j - 1].beat + 0.000001 >= beats[j].beat) { beats[j].beat = beats[j - 1].beat + 0.000001; j++; } } bool Alg_time_map::insert_tempo(double tempo, double beat) { tempo = tempo / 60.0; // convert to beats per second // change the tempo at the given beat until the next beat event if (beat < 0) return false; double time = beat_to_time(beat); long i = locate_time(time); if (i >= beats.len || !within(beats[i].time, time, 0.000001)) { insert_beat(time, beat); } // now i is index of beat where tempo will change if (i == beats.len - 1) { last_tempo = tempo; // printf("last_tempo to %g\n", last_tempo); last_tempo_flag = true; } else { // adjust all future beats // compute the difference in beats double diff = beats[i + 1].beat - beats[i].beat; // convert beat difference to seconds at new tempo diff = diff / tempo; // figure out old time difference: double old_diff = beats[i + 1].time - time; // compute difference too diff = diff - old_diff; // apply new_diff to score and beats while (i < beats.len) { beats[i].time = beats[i].time + diff; i++; } } return true; } bool Alg_time_map::set_tempo(double tempo, double start_beat, double end_beat) { if (start_beat >= end_beat) return false; // algorithm: insert a beat event if necessary at start_beat // and at end_beat // delete intervening map elements // change the tempo insert_beat(beat_to_time(start_beat), start_beat); insert_beat(beat_to_time(end_beat), end_beat); long start_x = locate_beat(start_beat) + 1; long stop_x = locate_beat(end_beat); while (stop_x < beats.len) { beats[start_x] = beats[stop_x]; start_x++; stop_x++; } beats.len = start_x; // truncate the map to new length return insert_tempo(tempo, start_beat); } void Alg_time_map::trim(double start, double end, bool units_are_seconds) { // extract the time map from start to end and shift to time zero // start and end are time in seconds if units_are_seconds is true int i = 0; // index into beats int start_index; // index of first breakpoint after start int count = 1; double initial_beat = start; double final_beat = end; if (units_are_seconds) { initial_beat = time_to_beat(start); final_beat = time_to_beat(end); } else { start = beat_to_time(initial_beat); end = beat_to_time(final_beat); } while (i < length() && beats[i].time < start) i++; // now i is index into beats of the first breakpoint after start // beats[0] is (0,0) and remains that way // copy beats[start_index] to beats[1], etc. // skip any beats at or near (start,initial_beat), using count // to keep track of how many entries there are start_index = i; while (i < length() && beats[i].time < end) { if (beats[i].time - start > ALG_EPS && beats[i].beat - initial_beat > ALG_EPS) { beats[i].time = beats[i].time - start; beats[i].beat = beats[i].beat - initial_beat; beats[i - start_index + 1] = beats[i]; count = count + 1; } else { start_index = start_index + 1; } i = i + 1; } // set last tempo data // we last examined beats[i-1] and copied it to // beats[i - start_index]. Next tempo should come // from beats[i] and store in beats[i - start_index + 1] // case 1: there is at least one breakpoint beyond end // => interpolate to put a breakpoint at end // case 2: no more breakpoints => set last tempo data if (i < length()) { // we know beats[i].time >= end, so case 1 applies beats[i - start_index + 1].time = end - start; beats[i - start_index + 1].beat = final_beat - initial_beat; count = count + 1; } // else we'll just use stored last tempo (if any) beats.len = count; } void Alg_time_map::cut(double start, double len, bool units_are_seconds) { // remove portion of time map from start to start + len, // shifting the tail left by len. start and len are in whatever // units the score is in. If you cut the time_map as well as cut // the tracks of the sequence, then sequences will preserve the // association between tempo changes and events double end = start + len; double initial_beat = start; double final_beat = end; int i = 0; if (units_are_seconds) { initial_beat = time_to_beat(start); final_beat = time_to_beat(end); } else { start = beat_to_time(initial_beat); end = beat_to_time(final_beat); len = end - start; } double beat_len = final_beat - initial_beat; while (i < length() && beats[i].time < start - ALG_EPS) { i = i + 1; } // if no beats exist at or after start, just return; nothing to cut if (i == length()) return; // now i is index into beats of the first breakpoint on or // after start, insert (start, initial_beat) in map if (i < length() && within(beats[i].time, start, ALG_EPS)) { // perterb time map slightly (within alg_eps) to place // break point exactly at the start time beats[i].time = start; beats[i].beat = initial_beat; } else { Alg_beat point(start, initial_beat); beats.insert(i, &point); } // now, we're correct up to beats[i] and beats[i] happens at start. // find first beat after end so we can start shifting from there i = i + 1; int start_index = i; while (i < length() && beats[i].time < end + ALG_EPS) i++; // now beats[i] is the next point to be included in beats // but from i onward, we must shift by (-len, -beat_len) while (i < length()) { Alg_beat &b = beats[i]; b.time = b.time - len; b.beat = b.beat - beat_len; beats[start_index] = b; i = i + 1; start_index = start_index + 1; } beats.len = start_index; } void Alg_time_map::paste(double beat, Alg_track *tr) { // insert a given time map at a given time and dur (in beats) Alg_time_map_ptr from_map = tr->get_time_map(); // printf("time map paste\nfrom map\n"); // from_map->show(); // printf("to map\n"); // show(); Alg_beats &from = from_map->beats; double time = beat_to_time(beat); // Locate the point at which dur occurs double dur = tr->get_beat_dur(); double tr_end_time = from_map->beat_to_time(dur); // add offset to make room for insert int i = locate_beat(beat); while (i < length()) { beats[i].beat += dur; beats[i].time += tr_end_time; i++; } // printf("after opening up\n"); // show(); // insert point at beginning and end of paste insert_beat(time, beat); // printf("after beginning point insert\n"); // show(); // insert_beat(time + tr_end_time, beat + dur); // printf("after ending point insert\n"); // show(); int j = from_map->locate_beat(dur); for (i = 0; i < j; i++) { insert_beat(from[i].time + time, // shift by time from[i].beat + beat); // and beat } // printf("after inserts\n"); show(); } void Alg_time_map::insert_time(double start, double len) { // find time,beat pair that determines tempo at start // compute beat offset = (delta beat / delta time) * len // add len,beat offset to each following Alg_beat // show(); int i = locate_time(start); // start <= beats[i].time if (beats[i].time == start) i++; // start < beats[i].time // case 1: between beats if (i > 0 && i < length()) { double beat_offset = len * (beats[i].beat - beats[i-1].beat) / (beats[i].time - beats[i-1].time); while (i < length()) { beats[i].beat += beat_offset; beats[i].time += len; i++; } } // otherwise, last tempo is in effect; nothing to do // printf("time_map AFTER INSERT\n"); // show(); } void Alg_time_map::insert_beats(double start, double len) { int i = locate_beat(start); // start <= beats[i].beat if (beats[i].beat == start) i++; if (i > 0 && i < length()) { double time_offset = len * (beats[i].time - beats[i-1].time) / (beats[i].beat - beats[i-1].beat); while (i < length()) { beats[i].time += time_offset; beats[i].beat += len; i++; } } // otherwise, last tempo is in effect; nothing to do // printf("time_map AFTER INSERT\n"); // show(); } Alg_track::Alg_track(Alg_time_map *map, bool seconds) { type = 't'; time_map = NULL; units_are_seconds = seconds; set_time_map(map); } Alg_event_ptr Alg_track::copy_event(Alg_event_ptr event) { Alg_event *new_event; if (event->is_note()) { new_event = new Alg_note((Alg_note_ptr) event); } else { // update new_event = new Alg_update((Alg_update_ptr) event); } return new_event; } Alg_track::Alg_track(Alg_track &track) { type = 't'; time_map = NULL; for (int i = 0; i < track.length(); i++) { append(copy_event(track.events[i])); } set_time_map(track.time_map); units_are_seconds = track.units_are_seconds; } Alg_track::Alg_track(Alg_event_list_ref event_list, Alg_time_map_ptr map, bool units_are_seconds) { type = 't'; time_map = NULL; for (int i = 0; i < event_list.length(); i++) { append(copy_event(event_list[i])); } set_time_map(map); this->units_are_seconds = units_are_seconds; } void Alg_track::serialize(void **buffer, long *bytes) { // first determine whether this is a seq or a track. // if it is a seq, then we will write the time map and a set of tracks // if it is a track, we just write the track data and not the time map // // The code will align doubles on ALIGN boundaries, and longs and // floats are aligned to multiples of 4 bytes. // // The format for a seq is: // 'ALGS' -- indicates that this is a sequence // long length of all seq data in bytes starting with 'ALGS' // long channel_offset_per_track // long units_are_seconds // time_map: // double last_tempo // long last_tempo_flag // long len -- number of tempo changes // for each tempo change (Alg_beat): // double time // double beat // time_sigs: // long len -- number of time_sigs // long pad // for each time signature: // double beat // double num // double den // tracks: // long len -- number of tracks // long pad // for each track: // 'ALGT' -- indicates this is a track // long length of all track data in bytes starting with 'ALGT' // long units_are_seconds // double beat_dur // double real_dur // long len -- number of events // for each event: // long selected // long type // long key // long channel // double time // if this is a note: // double pitch // double dur // double loud // long len -- number of parameters // for each parameter: // char attribute[] with zero pad to ALIGN // one of the following, depending on type: // double r // char s[] terminated by zero // long i // long l // char a[] terminated by zero // zero pad to ALIGN // else if this is an update // (same representation as parameter above) // zero pad to ALIGN // // The format for a track is given within the Seq format above assert(get_type() == 't'); ser_buf.init_for_write(); serialize_track(); *buffer = ser_buf.to_heap(bytes); } void Alg_seq::serialize(void **buffer, long *bytes) { assert(get_type() == 's'); ser_buf.init_for_write(); serialize_seq(); *buffer = ser_buf.to_heap(bytes); } void Serial_buffer::check_buffer(long needed) { if (len < (ptr - buffer) + needed) { // do we need more space? long new_len = len * 2; // exponential growth is important // initially, length is zero, so bump new_len to a starting value if (new_len == 0) new_len = 1024; // make sure new_len is as big as needed if (needed > new_len) new_len = needed; char *new_buffer = new char[new_len]; // allocate space memcpy(new_buffer, buffer, len); // copy from old buffer ptr = new_buffer + (ptr - buffer); // relocate ptr to new buffer delete buffer; // free old buffer buffer = new_buffer; // update buffer information len = new_len; } } void Alg_seq::serialize_seq() { int i; // loop counters // we can easily compute how much buffer space we need until we // get to tracks, so expand at least that much long needed = 48 + 16 * time_map->beats.len + 24 * time_sig.length(); ser_buf.check_buffer(needed); ser_buf.set_char('A'); ser_buf.set_char('L'); ser_buf.set_char('G'); ser_buf.set_char('S'); long length_offset = ser_buf.get_posn(); ser_buf.set_int32(0); // leave room to come back and write length ser_buf.set_int32(channel_offset_per_track); ser_buf.set_int32(units_are_seconds); ser_buf.set_double(time_map->last_tempo); ser_buf.set_int32(time_map->last_tempo_flag); ser_buf.set_int32(time_map->beats.len); for (i = 0; i < time_map->beats.len; i++) { ser_buf.set_double(time_map->beats[i].time); ser_buf.set_double(time_map->beats[i].beat); } ser_buf.set_int32(time_sig.length()); ser_buf.pad(); for (i = 0; i < time_sig.length(); i++) { ser_buf.set_double(time_sig[i].beat); ser_buf.set_double(time_sig[i].num); ser_buf.set_double(time_sig[i].den); } ser_buf.set_int32(tracks()); ser_buf.pad(); for (i = 0; i < tracks(); i++) { track(i)->serialize_track(); } // do not include ALGS, include padding at end ser_buf.store_long(length_offset, ser_buf.get_posn() - length_offset); } void Alg_track::serialize_track() { // to simplify the code, copy from parameter addresses to locals int j; ser_buf.check_buffer(32); ser_buf.set_char('A'); ser_buf.set_char('L'); ser_buf.set_char('G'); ser_buf.set_char('T'); long length_offset = ser_buf.get_posn(); // save location for track length ser_buf.set_int32(0); // room to write track length ser_buf.set_int32(units_are_seconds); ser_buf.set_double(beat_dur); ser_buf.set_double(real_dur); ser_buf.set_int32(len); for (j = 0; j < len; j++) { ser_buf.check_buffer(24); Alg_event *event = (*this)[j]; ser_buf.set_int32(event->get_selected()); ser_buf.set_int32(event->get_type()); ser_buf.set_int32(event->get_identifier()); ser_buf.set_int32(event->chan); ser_buf.set_double(event->time); if (event->is_note()) { ser_buf.check_buffer(20); Alg_note *note = (Alg_note *) event; ser_buf.set_float(note->pitch); ser_buf.set_float(note->loud); ser_buf.set_double(note->dur); long parm_num_offset = ser_buf.get_posn(); long parm_num = 0; ser_buf.set_int32(0); // placeholder for no. parameters Alg_parameters_ptr parms = note->parameters; while (parms) { serialize_parameter(&(parms->parm)); parms = parms->next; parm_num++; } ser_buf.store_long(parm_num_offset, parm_num); } else { assert(event->is_update()); Alg_update *update = (Alg_update *) event; serialize_parameter(&(update->parameter)); } ser_buf.check_buffer(7); // maximum padding possible ser_buf.pad(); } // write length, not including ALGT, including padding at end ser_buf.store_long(length_offset, ser_buf.get_posn() - length_offset); } void Alg_track::serialize_parameter(Alg_parameter *parm) { // add eight to account for name + zero end-of-string and the // possibility of adding 7 padding bytes long len = strlen(parm->attr_name()) + 8; ser_buf.check_buffer(len); ser_buf.set_string(parm->attr_name()); ser_buf.pad(); switch (parm->attr_type()) { case 'r': ser_buf.check_buffer(8); ser_buf.set_double(parm->r); break; case 's': ser_buf.check_buffer(strlen(parm->s) + 1); ser_buf.set_string(parm->s); break; case 'i': ser_buf.check_buffer(4); ser_buf.set_int32(parm->i); break; case 'l': ser_buf.check_buffer(4); ser_buf.set_int32(parm->l); break; case 'a': ser_buf.check_buffer(strlen(parm->a) + 1); ser_buf.set_string(parm->a); break; } } Alg_track *Alg_track::unserialize(void *buffer, long len) { assert(len > 8); ser_buf.init_for_read(buffer, len); bool alg = ser_buf.get_char() == 'A' && ser_buf.get_char() == 'L' && ser_buf.get_char() == 'G'; assert(alg); char c = ser_buf.get_char(); if (c == 'S') { Alg_seq *seq = new Alg_seq; seq->unserialize_seq(); return seq; } else { assert(c == 'T'); Alg_track *track = new Alg_track; track->unserialize_track(); return track; } } void Alg_seq::unserialize_seq() { ser_buf.check_input_buffer(28); long len = ser_buf.get_int32(); assert(ser_buf.get_len() >= len); channel_offset_per_track = ser_buf.get_int32(); units_are_seconds = (bool) ser_buf.get_int32(); time_map = new Alg_time_map(); time_map->last_tempo = ser_buf.get_double(); time_map->last_tempo_flag = (bool) ser_buf.get_int32(); long beats = ser_buf.get_int32(); ser_buf.check_input_buffer(beats * 16 + 4); int i; for (i = 0; i < beats; i++) { double time = ser_buf.get_double(); double beat = ser_buf.get_double(); time_map->insert_beat(time, beat); // printf("time_map: %g, %g\n", time, beat); } long time_sig_len = ser_buf.get_int32(); ser_buf.get_pad(); ser_buf.check_input_buffer(time_sig_len * 24 + 8); for (i = 0; i < time_sig_len; i++) { double beat = ser_buf.get_double(); double num = ser_buf.get_double(); double den = ser_buf.get_double(); time_sig.insert(beat, num, den); } long tracks_num = ser_buf.get_int32(); ser_buf.get_pad(); add_track(tracks_num - 1); // create tracks_num tracks for (i = 0; i < tracks_num; i++) { track(i)->unserialize_track(); } // assume seq started at beginning of buffer. len measures // bytes after 'ALGS' header, so add 4 bytes and compare to // current buffer position -- they should agree assert(ser_buf.get_posn() == len + 4); } void Alg_track::unserialize_track() { ser_buf.check_input_buffer(32); assert(ser_buf.get_char() == 'A'); assert(ser_buf.get_char() == 'L'); assert(ser_buf.get_char() == 'G'); assert(ser_buf.get_char() == 'T'); long offset = ser_buf.get_posn(); // stored length does not include 'ALGT' long bytes = ser_buf.get_int32(); assert(bytes <= ser_buf.get_len() - offset); units_are_seconds = (bool) ser_buf.get_int32(); beat_dur = ser_buf.get_double(); real_dur = ser_buf.get_double(); int event_count = ser_buf.get_int32(); for (int i = 0; i < event_count; i++) { ser_buf.check_input_buffer(24); long selected = ser_buf.get_int32(); char type = (char) ser_buf.get_int32(); long key = ser_buf.get_int32(); long channel = ser_buf.get_int32(); double time = ser_buf.get_double(); if (type == 'n') { ser_buf.check_input_buffer(20); float pitch = ser_buf.get_float(); float loud = ser_buf.get_float(); double dur = ser_buf.get_double(); Alg_note *note = create_note(time, channel, key, pitch, loud, dur); note->set_selected(selected); long param_num = ser_buf.get_int32(); int j; // this builds a list of parameters in the correct order // (although order shouldn't matter) Alg_parameters_ptr *list = ¬e->parameters; for (j = 0; j < param_num; j++) { *list = new Alg_parameters(NULL); unserialize_parameter(&((*list)->parm)); list = &((*list)->next); } append(note); } else { assert(type == 'u'); Alg_update *update = create_update(time, channel, key); update->set_selected(selected); unserialize_parameter(&(update->parameter)); append(update); } ser_buf.get_pad(); } assert(offset + bytes == ser_buf.get_posn()); } void Alg_track::unserialize_parameter(Alg_parameter_ptr parm_ptr) { char *attr = ser_buf.get_string(); parm_ptr->attr = symbol_table.insert_string(attr); switch (parm_ptr->attr_type()) { case 'r': ser_buf.check_input_buffer(8); parm_ptr->r = ser_buf.get_double(); break; case 's': parm_ptr->s = heapify(ser_buf.get_string()); break; case 'i': ser_buf.check_input_buffer(4); parm_ptr->i = ser_buf.get_int32(); break; case 'l': ser_buf.check_input_buffer(4); parm_ptr->l = (bool) ser_buf.get_int32(); break; case 'a': parm_ptr->a = symbol_table.insert_attribute(ser_buf.get_string()); break; } } void Alg_track::set_time_map(Alg_time_map *map) { if (time_map) time_map->dereference(); if (map == NULL) { time_map = new Alg_time_map(); // new default map time_map->reference(); } else { time_map = map; time_map->reference(); } } void Alg_track::convert_to_beats() // modify all times and durations in notes to beats { if (units_are_seconds) { units_are_seconds = false; long i; for (i = 0; i < length(); i++) { Alg_event_ptr e = events[i]; double beat = time_map->time_to_beat(e->time); if (e->is_note()) { Alg_note_ptr n = (Alg_note_ptr) e; n->dur = time_map->time_to_beat(n->time + n->dur) - beat; } e->time = beat; } } } void Alg_track::convert_to_seconds() // modify all times and durations in notes to seconds { if (!units_are_seconds) { last_note_off = time_map->beat_to_time(last_note_off); units_are_seconds = true; long i; for (i = 0; i < length(); i++) { Alg_event_ptr e = events[i]; double time = time_map->beat_to_time(e->time); if (e->is_note()) { Alg_note_ptr n = (Alg_note_ptr) e; n->dur = time_map->beat_to_time(n->time + n->dur) - time; } e->time = time; } } } void Alg_track::set_dur(double duration) { // set beat_dur and real_dur if (units_are_seconds) { set_real_dur(duration); set_beat_dur(time_map->time_to_beat(duration)); } else { set_beat_dur(duration); set_real_dur(time_map->beat_to_time(duration)); } } Alg_note *Alg_track::create_note(double time, int channel, int identifier, float pitch, float loudness, double duration) { Alg_note *note = new Alg_note(); note->time = time; note->chan = channel; note->set_identifier(identifier); note->pitch = pitch; note->loud = loudness; note->dur = duration; return note; } Alg_update *Alg_track::create_update(double time, int channel, int identifier) { Alg_update *update = new Alg_update(); update->time = time; update->chan = channel; update->set_identifier(identifier); return update; } Alg_track_ptr Alg_track::cut(double t, double len, bool all) { // since we are translating notes in time, do not copy or use old timemap Alg_track_ptr track = new Alg_track(); track->units_are_seconds = units_are_seconds; if (units_are_seconds) { track->set_real_dur(len); track->set_beat_dur(time_map->time_to_beat(t + len) - time_map->time_to_beat(t)); } else { track->set_beat_dur(len); track->set_real_dur(time_map->beat_to_time(t + len) - time_map->beat_to_time(t)); } int i; int new_len = 0; int change = 0; for (i = 0; i < length(); i++) { Alg_event_ptr event = events[i]; if (event->overlap(t, len, all)) { event->time -= t; track->append(event); change = 1; } else { // if we're not cutting this event, move it to // eliminate the gaps in events left by cut events events[new_len] = event; // adjust times of events after t + len if (event->time > t + len - ALG_EPS) { event->time -= len; change = 1; } new_len++; } } // Alg_event_lists based on this track become invalid sequence_number += change; this->len = new_len; // adjust length since we removed events return track; } Alg_track_ptr Alg_track::copy(double t, double len, bool all) { // since we are translating notes in time, do not copy or use old timemap Alg_track_ptr track = new Alg_track(); track->units_are_seconds = units_are_seconds; if (units_are_seconds) { track->set_real_dur(len); track->set_beat_dur(time_map->time_to_beat(t + len) - time_map->time_to_beat(t)); } else { track->set_beat_dur(len); track->set_real_dur(time_map->beat_to_time(t + len) - time_map->beat_to_time(t)); } int i; for (i = 0; i < length(); i++) { Alg_event_ptr event = events[i]; if (event->overlap(t, len, all)) { Alg_event_ptr new_event = copy_event(event); new_event->time -= t; track->append(new_event); } } return track; } void Alg_track::paste(double t, Alg_event_list *seq) { assert(get_type() == 't'); // seq can be an Alg_event_list, an Alg_track, or an Alg_seq // if it is an Alg_event_list, units_are_seconds must match bool prev_units_are_seconds = false; if (seq->get_type() == 'e') { assert(seq->get_owner()->get_units_are_seconds() == units_are_seconds); } else { // make it match Alg_track_ptr tr = (Alg_track_ptr) seq; prev_units_are_seconds = tr->get_units_are_seconds(); if (units_are_seconds) tr->convert_to_seconds(); else tr->convert_to_beats(); } double dur = (units_are_seconds ? seq->get_real_dur() : seq->get_beat_dur()); // Note: in the worst case, seq may contain notes // that start almost anytime up to it's duration, // so the simplest algorithm is simply a sequence // of inserts. If this turns out to be too slow, // we can do a merge sort in the case that seq // is an Alg_track (if it's an Alg_event_list, we // are not guaranteed that the events are in time // order, but currently, only a true seq is allowed) int i; for (i = 0; i < length(); i++) { if (events[i]->time > t - ALG_EPS) { events[i]->time += dur; } } for (i = 0; i < seq->length(); i++) { Alg_event *new_event = copy_event((*seq)[i]); new_event->time += t; insert(new_event); } // restore track units to what they were before if (seq->get_type() != 'e') { Alg_track_ptr tr = (Alg_track_ptr) seq; if (prev_units_are_seconds) tr->convert_to_seconds(); else tr->convert_to_beats(); } } void Alg_track::merge(double t, Alg_event_list_ptr seq) { Alg_event_list_ref s = *seq; for (int i = 0; i < s.length(); i++) { Alg_event *new_event; if (s[i]->is_note()) { new_event = new Alg_note((Alg_note_ptr) s[i]); } else { new_event = new Alg_update((Alg_update_ptr) s[i]); } new_event->time += t; insert(new_event); } } void Alg_track::clear(double t, double len, bool all) { int i; int move_to = 0; for (i = 0; i < length(); i++) { Alg_event_ptr event = events[i]; if (event->overlap(t, len, all)) { delete events[i]; } else { // if we're not clearing this event, move it to // eliminate the gaps in events left by cleared events events[move_to] = event; // adjust times of events after t + len. This test is based // on the one in Alg_event::overlap() for consistency. if (event->time > t + len - ALG_EPS && event->time > t) event->time -= len; move_to++; } } if (move_to != this->len) { // we cleared at least one note sequence_number++; // Alg_event_lists based on this track become invalid } this->len = move_to; // adjust length since we removed events } void Alg_track::silence(double t, double len, bool all) { int i; int move_to = 0; for (i = 0; i < length(); i++) { Alg_event_ptr event = events[i]; if (event->overlap(t, len, all)) { delete events[i]; } else { // if we're not clearing this event, move it to // eliminate the gaps in events left by cleared events events[move_to] = event; move_to++; } } if (move_to != this->len) { // we cleared at least one note sequence_number++; // Alg_event_lists based on this track become invalid } this->len = move_to; // adjust length since we removed events } void Alg_track::insert_silence(double t, double len) { int i; for (i = 0; i < length(); i++) { Alg_event_ptr event = events[i]; if (event->time > t - ALG_EPS) event->time += len; } } Alg_event_list *Alg_track::find(double t, double len, bool all, long channel_mask, long event_type_mask) { int i; Alg_event_list *list = new Alg_event_list(this); if (units_are_seconds) { // t and len are seconds list->set_real_dur(len); list->set_beat_dur(get_time_map()->time_to_beat(t + len) - get_time_map()->time_to_beat(t)); } else { // t and len are beats list->set_real_dur(get_time_map()->beat_to_time(t + len) - get_time_map()->beat_to_time(t)); list->set_beat_dur(len); } for (i = 0; i < length(); i++) { Alg_event_ptr event = events[i]; if (event->overlap(t, len, all)) { if ((channel_mask == 0 || (event->chan < 32 && (channel_mask & (1 << event->chan)))) && ((event_type_mask == 0 || (event_type_mask & (1 << event->get_type_code()))))) { list->append(event); } } } return list; } void Alg_time_sigs::expand() { maxlen = (maxlen + 5); // extra growth for small sizes maxlen += (maxlen >> 2); // add 25% Alg_time_sig_ptr new_time_sigs = new Alg_time_sig[maxlen]; // now do copy memcpy(new_time_sigs, time_sigs, len * sizeof(Alg_time_sig)); if (time_sigs) delete[] time_sigs; time_sigs = new_time_sigs; } void Alg_time_sigs::insert(double beat, double num, double den) { // find insertion point: for (int i = 0; i < len; i++) { if (within(time_sigs[i].beat, beat, ALG_EPS)) { // overwrite location i with new info time_sigs[i].beat = beat; time_sigs[i].num = num; time_sigs[i].den = den; return; } else if (time_sigs[i].beat > beat) { if ((i > 0 && // check if redundant with prev. time sig time_sigs[i - 1].num == num && time_sigs[i - 1].den == den && within(fmod(beat - time_sigs[i - 1].beat, 4 * time_sigs[i-1].num / time_sigs[i-1].den), 0, ALG_EPS)) || // check if redundant with implied initial 4/4 time sig: (i == 0 && num == 4 && den == 4 && within(fmod(beat, 4), 0, ALG_EPS))) { return; // redundant inserts are ignored here } // make room for new event if (maxlen <= len) expand(); len++; // insert new event at i memmove(&time_sigs[i + 1], &time_sigs[i], sizeof(Alg_time_sig) * (len - i)); time_sigs[i].beat = beat; time_sigs[i].num = num; time_sigs[i].den = den; return; } } // if we fall out of loop, then this goes at end if (maxlen <= len) expand(); time_sigs[len].beat = beat; time_sigs[len].num = num; time_sigs[len].den = den; len++; } void Alg_time_sigs::show() { printf("Alg_time_sig: "); for (int i = 0; i < len; i++) { printf("(%g: %g/%g) ", time_sigs[i].beat, time_sigs[i].num, time_sigs[i].den); } printf("\n"); } int Alg_time_sigs::find_beat(double beat) { // index where you would insert a new time signature at beat int i = 0; while (i < len && time_sigs[i].beat < beat - ALG_EPS) i++; return i; } void Alg_time_sigs::cut(double start, double end) { // remove time_sig's from start to start+len -- these must be // in beats (not seconds) // now rewrite time_sig[]: copy from i_in to i_out (more or less) int i_in = 0; int i_out = 0; // first, figure out where to begin cut region i_in = find_beat(start); i_out = i_in; // scan to end of cut region while (i_in < len && time_sigs[i_in].beat < end) { i_in = i_in + 1; } // change time_sig at start if necessary // there's a time_sig that was skipped if i_in > i_out. // if that's true and the next time change is at end, we're // ok because it will be copied, but if the next time change // is after end, then maybe we should insert a time change // corresponding to what's in effect at end. We can skip this // insert if it corresponds to whatever is in effect at start if (i_in > i_out && i_in < len && time_sigs[i_in].beat > end + ALG_EPS && (i_out == 0 || time_sigs[i_out - 1].num != time_sigs[i_in - 1].num || time_sigs[i_out - 1].den != time_sigs[i_in - 1].den)) { time_sigs[i_out] = time_sigs[i_in - 1]; time_sigs[i_out].beat = start; } // scan from end to len(time_sig) while (i_in < length()) { Alg_time_sig &ts = time_sigs[i_in]; ts.beat = ts.beat - (end - start); time_sigs[i_out] = ts; i_in = i_in + 1; i_out = i_out + 1; } len = i_out; } void Alg_time_sigs::trim(double start, double end) { // remove time_sig's not in [start, start+end) // units must be in beats (not seconds) // copy from i_in to i_out as we scan time_sig array int i_in = 0; int i_out = 0; // first, skip time signatures up to start i_in = find_beat(start); // put time_sig at start if necessary // if 0 < i_in < len, then the time sig at i_in is either // at start or after start. // If after start, then insert time sig at i_in-1 at 0. // Otherwise, we'll pick up time sig at i_in below. // If 0 == i_in < len, then the time sig at i_in is either // at start or after start. // If after start, then time sig at 0 is 4/4, but that's the // default, so do nothing. // Otherwise, we'll pick up time sig at i_in below. // If 0 < i_in == len, then insert time_sig at i_in-1 at start // If 0 == i_in == len, then 4/4 default applies and we're done. // // So the conditions for inserting time_sig[in_i-1] at 0 are: // (0 < i_in < len and time_sig[i] > start+ALG_EPS) OR // (0 < i_in == len) // We can rewrite this to // (0 < i_in) && ((i_in < len && time_sig[i_in].beat > start + ALG_EPS) || // (i_in == len))) // if (0 < i_in && ((i_in < len && time_sigs[i_in].beat > start + ALG_EPS) || (i_in == len))) { time_sigs[0] = time_sigs[i_in - 1]; time_sigs[0].beat = 0.0; i_out = 1; } // scan to end of cut region while (i_in < len && time_sigs[i_in].beat < end - ALG_EPS) { Alg_time_sig &ts = time_sigs[i_in]; ts.beat = ts.beat - start; time_sigs[i_out] = ts; i_in++; i_out++; } len = i_out; } void Alg_time_sigs::paste(double start, Alg_seq *seq) { // printf("time_sig::insert before paste\n"); // show(); Alg_time_sigs &from = seq->time_sig; // printf("time_sig::insert from\n"); from.show(); // insert time signatures from seq into this time_sigs at start if (len == 0 && from.len == 0) { return; // default applies } int i = find_beat(start); // remember the time signature at the splice point double num_after_splice = 4; double den_after_splice = 4; // default // three cases: // 1) time sig at splice is at i-1 // for this, we must have len>0 & i>0 // two sub-cases: // A) i < len && time_sig[i].beat > start // B) i == len // 2) time_sig at splice is at i // for this, i < len && time_sig[i].beat ~= start // 3) time_sig at splice is default 4/4 if (len > 0 && i > 0 && ((i < len && time_sigs[i].beat > start + ALG_EPS) || (i == len))) { num_after_splice = time_sigs[i-1].num; den_after_splice = time_sigs[i-1].den; } else if (i < len && time_sigs[i].beat <= start + ALG_EPS) { num_after_splice = time_sigs[i].num; den_after_splice = time_sigs[i].den; } // i is where insert will go, time_sig[i].beat > start // begin by adding duration to time_sig's at i and above // move time signatures forward by duration of seq double dur = seq->get_beat_dur(); while (i < len) { time_sigs[i].beat += dur; i++; } //printf("time_sig::insert after making space\n"); //show(); // now insert initial time_signature at start. This may create // an extra measure if seq does not begin on a measure boundary insert(start, 4, 4); // in case seq uses default starting signature //printf("time_sig::insert after 4/4 at start\n"); //show(); // insert time signatures from seq offset by start for (i = 0; i < from.length(); i++) { insert(start + from[i].beat, from[i].num, from[i].den); } //printf("time_sig::insert after pasting in sigs\n"); //show(); // now insert time signature at end of splice insert(start + dur, num_after_splice, den_after_splice); //printf("time_sig::insert after sig at end of splice\n"); //show(); } void Alg_time_sigs::insert_beats(double beat, double len) { int i; // find the time_sig entry in effect at t for (i = 0; i < len; i++) { if (time_sigs[i].beat < beat + ALG_EPS) { break; } } // now, increase beat times by len for (; i < len; i++) { time_sigs[i].beat += len; } } Alg_tracks::~Alg_tracks() { // Alg_events objects (track data) are not deleted, only the array if (tracks) { delete[] tracks; } } void Alg_tracks::expand_to(int new_max) { maxlen = new_max; Alg_track_ptr *new_tracks = new Alg_track_ptr[maxlen]; // now do copy memcpy(new_tracks, tracks, len * sizeof(Alg_track_ptr)); if (tracks) { delete[] tracks; } tracks = new_tracks; } void Alg_tracks::expand() { maxlen = (maxlen + 5); // extra growth for small sizes maxlen += (maxlen >> 2); // add 25% expand_to(maxlen); } void Alg_tracks::append(Alg_track_ptr track) { if (maxlen <= len) { expand(); } tracks[len] = track; len++; } void Alg_tracks::add_track(int track_num, Alg_time_map_ptr time_map, bool seconds) // Create a new track at index track_num. // If track already exists, this call does nothing. // If highest previous track is not at track_num-1, then // create tracks at len, len+1, ..., track_num. { assert(track_num >= 0); if (track_num == maxlen) { // use eponential growth to insert tracks sequentially expand(); } else if (track_num > maxlen) { // grow to exact size for random inserts expand_to(track_num + 1); } if (track_num < len) return; // don't add if already there while (len <= track_num) { tracks[len] = new Alg_track(time_map, seconds); //printf("allocated track at %d (%x, this %x) = %x\n", len, // &(tracks[len]), this, tracks[len]); len++; } } void Alg_tracks::reset() { // all track events are incorporated into the seq, // so all we need to delete are the arrays of pointers for (int i = 0; i < len; i++) { delete tracks[i]; } if (tracks) delete [] tracks; tracks = NULL; len = 0; maxlen = 0; // Modified by Ning Hu Nov.19 2002 } Alg_seq::Alg_seq(const char *filename, bool smf) { basic_initialization(); ifstream inf(filename, smf ? ios::binary | ios::in : ios::in); if (inf.fail()) { error = alg_error_open; return; } if (smf) { error = alg_smf_read(inf, this); } else { error = alg_read(inf, this); } inf.close(); } Alg_seq::Alg_seq(istream &file, bool smf) { basic_initialization(); if (smf) { error = alg_smf_read(file, this); } else { error = alg_read(file, this); } } void Alg_seq::seq_from_track(Alg_track_ref tr) { type = 's'; // copy everything set_beat_dur(tr.get_beat_dur()); set_real_dur(tr.get_real_dur()); // copy time_map set_time_map(new Alg_time_map(tr.get_time_map())); units_are_seconds = tr.get_units_are_seconds(); if (tr.get_type() == 's') { Alg_seq_ref s = *(tr.to_alg_seq()); channel_offset_per_track = s.channel_offset_per_track; add_track(s.tracks() - 1); // copy each track for (int i = 0; i < tracks(); i++) { Alg_track_ref from_track = *(s.track(i)); Alg_track_ref to_track = *(track(i)); to_track.set_beat_dur(from_track.get_beat_dur()); to_track.set_real_dur(from_track.get_real_dur()); if (from_track.get_units_are_seconds()) to_track.convert_to_seconds(); for (int j = 0; j < from_track.length(); j++) { Alg_event_ptr event = copy_event(from_track[j]); to_track.append(event); } } } else if (tr.get_type() == 't') { add_track(0); channel_offset_per_track = 0; Alg_track_ptr to_track = track(0); to_track->set_beat_dur(tr.get_beat_dur()); to_track->set_real_dur(tr.get_real_dur()); for (int j = 0; j < tr.length(); j++) { Alg_event_ptr event = copy_event(tr[j]); to_track->append(event); } } else { assert(false); // expected track or sequence } } int Alg_seq::tracks() { return track_list.length(); } Alg_track_ptr Alg_seq::track(int i) { assert(0 <= i && i < track_list.length()); return &(track_list[i]); } #pragma GCC diagnostic ignored "-Wreturn-type" // ok not to return a value here Alg_event_ptr &Alg_seq::operator[](int i) { int ntracks = track_list.length(); int tr = 0; while (tr < ntracks) { Alg_track *a_track = track(tr); if (a_track && i < a_track->length()) { return (*a_track)[i]; } else if (a_track) { i -= a_track->length(); } tr++; } assert(false); // out of bounds } void Alg_seq::convert_to_beats() { if (!units_are_seconds) return; for (int i = 0; i < tracks(); i++) { track(i)->convert_to_beats(); } // note that the Alg_seq inherits units_are_seconds from an // empty track. Each track also has a (redundant) field called // units are seconds. These should always be consistent. units_are_seconds = false; } void Alg_seq::convert_to_seconds() { if (units_are_seconds) return; //printf("convert_to_seconds, tracks %d\n", tracks()); //printf("last_tempo of seq: %g on map %x\n", // get_time_map()->last_tempo, get_time_map()); for (int i = 0; i < tracks(); i++) { //printf("last_tempo of track %d: %g on %x\n", i, // track(i)->get_time_map()->last_tempo, // track(i)->get_time_map()); track(i)->convert_to_seconds(); } // update our copy of last_note_off (which may or may not be valid) last_note_off = time_map->beat_to_time(last_note_off); // note that the Alg_seq inherits units_are_seconds from an // empty track. Each track also has a (redundant) field called // units are seconds. These should always be consistent. units_are_seconds = true; } Alg_track_ptr Alg_seq::cut_from_track(int track_num, double start, double dur, bool all) { assert(track_num >= 0 && track_num < tracks()); Alg_track_ptr tr = track(track_num); return tr->cut(start, dur, all); } void Alg_seq::copy_time_sigs_to(Alg_seq *dest) { // copy time signatures for (int i = 0; i < time_sig.length(); i++) { dest->time_sig.insert(time_sig[i].beat, time_sig[i].num, time_sig[i].den); } } void Alg_seq::set_time_map(Alg_time_map *map) { Alg_track::set_time_map(map); for (int i = 0; i < tracks(); i++) { track(i)->set_time_map(map); } } Alg_seq_ptr Alg_seq::cut(double start, double len, bool all) // return sequence from start to start+len and modify this // sequence by removing that time-span { // fix parameters to fall within existing sequence if (start > get_dur()) return NULL; // nothing to cut if (start < 0) start = 0; // can't start before sequence starts if (start + len > get_dur()) // can't cut after end: len = get_dur() - start; Alg_seq_ptr result = new Alg_seq(); Alg_time_map_ptr map = new Alg_time_map(get_time_map()); result->set_time_map(map); copy_time_sigs_to(result); result->units_are_seconds = units_are_seconds; result->track_list.reset(); for (int i = 0; i < tracks(); i++) { Alg_track_ptr cut_track = cut_from_track(i, start, len, all); result->track_list.append(cut_track); // initially, result->last_note_off is zero. We want to know the // maximum over all cut_tracks, so compute that here: result->last_note_off = MAX(result->last_note_off, cut_track->last_note_off); // since we're moving to a new sequence, change the track's time_map result->track_list[i].set_time_map(map); } // put units in beats to match time_sig's. Note that we need // two different end times. For result, we want the time of the // last note off, but for cutting out the time signatures in this, // we use len. double ts_start = start; double ts_end = start + len; double ts_last_note_off = start + result->last_note_off; if (units_are_seconds) { ts_start = time_map->time_to_beat(ts_start); ts_end = time_map->time_to_beat(ts_end); ts_last_note_off = time_map->time_to_beat(ts_last_note_off); } // result is shifted from start to 0 and has length len, but // time_sig and time_map are copies from this. Adjust time_sig, // time_map, and duration fields in result. The time_sig and // time_map data is retained out to last_note_off so that we have // information for the entire duration of all the notes, even though // this might extend beyond the duration of the track. (Warning: // no info is retained for notes with negative times.) result->time_sig.trim(ts_start, ts_last_note_off); result->time_map->trim(start, start + result->last_note_off, result->units_are_seconds); // even though there might be notes sticking out beyond len, the // track duration is len, not last_note_off. (Warning: if all is // true, there may also be notes at negative offsets. These times // cannot be mapped between beat and time representations, so there // may be subtle bugs or unexpected behaviors in that case.) result->set_dur(len); // we sliced out a portion of each track, so now we need to // slice out the corresponding sections of time_sig and time_map // as well as to adjust the duration. time_sig.cut(ts_start, ts_end); time_map->cut(start, len, units_are_seconds); set_dur(get_dur() - len); return result; } void Alg_seq::insert_silence_in_track(int track_num, double t, double len) { Alg_track_ptr tr = track(track_num); tr->insert_silence(t, len); } void Alg_seq::insert_silence(double t, double len) { for (int i = 0; i < tracks(); i++) { insert_silence_in_track(i, t, len); } double t_beats = t; double len_beats = len; // insert into time_sig array; use time_sig_paste, // which requires us to build a simple time_sig array if (units_are_seconds) { time_map->insert_time(t, len); t_beats = time_map->time_to_beat(t); len_beats = time_map->time_to_beat(t + len) - t_beats; } else { time_map->insert_beats(t_beats, len_beats); } if (time_sig.length() > 0) { time_sig.insert_beats(t_beats, len_beats); } } Alg_track_ptr Alg_seq::copy_track(int track_num, double t, double len, bool all) { return track_list[track_num].copy(t, len, all); } Alg_seq *Alg_seq::copy(double start, double len, bool all) { // fix parameters to fall within existing sequence if (start > get_dur()) return NULL; // nothing to copy if (start < 0) start = 0; // can't copy before sequence starts if (start + len > get_dur()) // can't copy after end: len = get_dur() - start; // return (new) sequence from start to start + len Alg_seq_ptr result = new Alg_seq(); Alg_time_map_ptr map = new Alg_time_map(get_time_map()); result->set_time_map(map); copy_time_sigs_to(result); result->units_are_seconds = units_are_seconds; result->track_list.reset(); for (int i = 0; i < tracks(); i++) { Alg_track_ptr copy = copy_track(i, start, len, all); result->track_list.append(copy); result->last_note_off = MAX(result->last_note_off, copy->last_note_off); // since we're copying to a new seq, change the track's time_map result->track_list[i].set_time_map(map); } // put units in beats to match time_sig's. Note that we need // two different end times. For result, we want the time of the // last note off, but for cutting out the time signatures in this, // we use len. double ts_start = start; double ts_end = start + len; double ts_last_note_off = start + result->last_note_off; if (units_are_seconds) { ts_start = time_map->time_to_beat(ts_start); ts_end = time_map->time_to_beat(ts_end); ts_last_note_off = time_map->time_to_beat(ts_last_note_off); } result->time_sig.trim(ts_start, ts_last_note_off); result->time_map->trim(start, start + result->last_note_off, units_are_seconds); result->set_dur(len); return result; } void Alg_seq::paste(double start, Alg_seq *seq) { // insert seq at time; open up space for it // to manipulate time map, we need units as beats // save original form so we can convert back if necessary bool units_should_be_seconds = units_are_seconds; bool seq_units_should_be_seconds = seq->get_units_are_seconds(); if (units_are_seconds) { start = time_map->time_to_beat(start); convert_to_beats(); } seq->convert_to_beats(); // do a paste on each track int i; for (i = 0; i < seq->tracks(); i++) { if (i >= tracks()) { add_track(i); } track(i)->paste(start, seq->track(i)); } // make sure all tracks were opened up for an insert, even if // there is nothing to insert while (i < tracks()) { track(i)->insert_silence(start, seq->get_dur()); i++; } // paste in tempo track time_map->paste(start, seq); // paste in time signatures time_sig.paste(start, seq); set_dur(get_beat_dur() + seq->get_dur()); assert(!seq->units_are_seconds && !units_are_seconds); if (units_should_be_seconds) { convert_to_seconds(); } if (seq_units_should_be_seconds) { seq->convert_to_seconds(); } } void Alg_seq::merge(double t, Alg_event_list_ptr seq) { // seq must be an Alg_seq: assert(seq->get_type() == 's'); Alg_seq_ptr s = (Alg_seq_ptr) seq; for (int i = 0; i < s->tracks(); i++) { if (tracks() <= i) add_track(i); track(i)->merge(t, s->track(i)); } } void Alg_seq::silence_track(int track_num, double start, double len, bool all) { // remove events in [time, time + len) and close gap Alg_track_ptr tr = track(track_num); tr->silence(start, len, all); } void Alg_seq::silence(double t, double len, bool all) { for (int i = 0; i < tracks(); i++) { silence_track(i, t, len, all); } } void Alg_seq::clear_track(int track_num, double start, double len, bool all) { // remove events in [time, time + len) and close gap Alg_track_ptr tr = track(track_num); tr->clear(start, len, all); } void Alg_seq::clear(double start, double len, bool all) { // Fix parameters to fall within existing sequence if (start > get_dur()) return; // nothing to cut if (start < 0) start = 0; // can't start before sequence starts if (start + len > get_dur()) // can't cut after end: len = get_dur() - start; for (int i = 0; i < tracks(); i++) clear_track(i, start, len, all); // Put units in beats to match time_sig's. double ts_start = start; double ts_end = start + len; if (units_are_seconds) { ts_start = time_map->time_to_beat(ts_start); ts_end = time_map->time_to_beat(ts_end); } // we sliced out a portion of each track, so now we need to // slice out the corresponding sections of time_sig and time_map // as well as to adjust the duration. time_sig.cut(ts_start, ts_end); time_map->cut(start, len, units_are_seconds); set_dur(get_dur() - len); } Alg_event_list_ptr Alg_seq::find_in_track(int track_num, double t, double len, bool all, long channel_mask, long event_type_mask) { return track(track_num)->find(t, len, all, channel_mask, event_type_mask); } Alg_seq::~Alg_seq() { int i, j; // Tracks does not delete Alg_events elements for (j = 0; j < track_list.length(); j++) { Alg_track ¬es = track_list[j]; // Alg_events does not delete notes for (i = 0; i < notes.length(); i++) { Alg_event_ptr event = notes[i]; delete event; } } } long Alg_seq::seek_time(double time, int track_num) // find index of first score event after time { long i; Alg_events ¬es = track_list[track_num]; for (i = 0; i < notes.length(); i++) { if (notes[i]->time > time) { break; } } return i; } bool Alg_seq::insert_beat(double time, double beat) // insert a time,beat pair // return true or false (false indicates an error, no update) // it is an error to imply a negative tempo or to insert at // a negative time { if (time < 0 || beat < 0) return false; if (time == 0.0 && beat > 0) time = 0.000001; // avoid infinite tempo, offset time by 1us if (time == 0.0 && beat == 0.0) return true; // (0,0) is already in the map! convert_to_beats(); // beats are invariant when changing tempo time_map->insert_beat(time, beat); return true; } bool Alg_seq::insert_tempo(double bpm, double beat) { double bps = bpm / 60.0; // convert to beats per second // change the tempo at the given beat until the next beat event if (beat < 0) return false; convert_to_beats(); // beats are invariant when changing tempo double time = time_map->beat_to_time(beat); long i = time_map->locate_time(time); if (i >= time_map->beats.len || !within(time_map->beats[i].time, time, 0.000001)) { insert_beat(time, beat); } // now i is index of beat where tempo will change if (i == time_map->beats.len - 1) { time_map->last_tempo = bps; time_map->last_tempo_flag = true; } else { // adjust all future beats // compute the difference in beats double diff = time_map->beats[i + 1].beat - time_map->beats[i].beat; // convert beat difference to seconds at new tempo diff = diff / bps; // figure out old time difference: double old_diff = time_map->beats[i + 1].time - time; // compute difference too diff = diff - old_diff; // apply new_diff to score and beats while (i < time_map->beats.len) { time_map->beats[i].time = time_map->beats[i].time + diff; i++; } } return true; } void Alg_seq::add_event(Alg_event_ptr event, int track_num) // add_event puts an event in a given track (track_num). // The track must exist. The time and duration of the // event are interpreted according to whether the Alg_seq // is currently in beats or seconds (see convert_to_beats()) { track_list[track_num].insert(event); /* if (event->is_note()) { Alg_note_ptr n = (Alg_note_ptr) event; trace("note %d at %g for %g\n", n->get_identifier(), n->time, n->dur); } */ } bool Alg_seq::set_tempo(double bpm, double start_beat, double end_beat) // set tempo from start_beat to end_beat { // this is an optimization, the test is repeated in Alg_time_seq::set_tempo() if (start_beat >= end_beat) return false; bool units_should_be_seconds = units_are_seconds; convert_to_beats(); bool result = time_map->set_tempo(bpm, start_beat, end_beat); if (units_should_be_seconds) convert_to_seconds(); return result; } void Alg_seq::set_time_sig(double beat, double num, double den) { time_sig.insert(beat, num, den); } void Alg_seq::beat_to_measure(double beat, long *measure, double *m_beat, double *num, double *den) { // return [measure, beat, num, den] double m = 0; // measure number double bpm; int tsx; bpm = 4; // assume 4/4 if no time signature double prev_beat = 0; double prev_num = 4; double prev_den = 4; if (beat < 0) beat = 0; // negative measures treated as zero for (tsx = 0; tsx < time_sig.length(); tsx++) { if (time_sig[tsx].beat <= beat) { // round m up to an integer (but allow for a small // numerical inaccuracy) m = m + (long) (0.99 + (time_sig[tsx].beat - prev_beat) / bpm); bpm = time_sig[tsx].num * 4 / time_sig[tsx].den; prev_beat = time_sig[tsx].beat; prev_num = time_sig[tsx].num; prev_den = time_sig[tsx].den; } else { m = m + (beat - prev_beat) / bpm; *measure = (long) m; *m_beat = (m - *measure) * bpm; *num = prev_num; *den = prev_den; return; } } // if we didn't return yet, compute after last time signature Alg_time_sig initial(0, 4, 4); Alg_time_sig &prev = initial; if (tsx > 0) { // use last time signature prev = time_sig[time_sig.length() - 1]; } bpm = prev.num * 4 / prev.den; m = m + (beat - prev.beat) / bpm; *measure = (long) m; *m_beat = (m - *measure) * bpm; *num = prev.num; *den = prev.den; } /* void Alg_seq::set_events(Alg_event_ptr *events, long len, long max) { convert_to_seconds(); // because notes are in seconds notes.set_events(events, len, max); } */ void Alg_seq::iteration_begin() { // keep an array of indexes into tracks current = new long[track_list.length()]; int i; for (i = 0; i < track_list.length(); i++) { current[i] = 0; } } Alg_event_ptr Alg_seq::iteration_next() // return the next event in time from any track { long cur; // a track index // find lowest next time of any track: double next = 1000000.0; int i, track = 0; for (i = 0; i < track_list.length(); i++) { Alg_track &tr = track_list[i]; cur = current[i]; if (cur < tr.length() && tr[cur]->time < next) { next = tr[cur]->time; track = i; } } if (next < 1000000.0) { return track_list[track][current[track]++]; } else { return NULL; } } void Alg_seq::iteration_end() { delete[] current; } void Alg_seq::merge_tracks() { long sum = 0; long i; for (i = 0; i < track_list.length(); i++) { sum = sum + track(i)->length(); } // preallocate array for efficiency: Alg_event_ptr *notes = new Alg_event_ptr[sum]; iteration_begin(); long notes_index = 0; Alg_event_ptr event; while (( event = iteration_next() )) { notes[notes_index++] = event; } track_list.reset(); // don't need them any more add_track(0); track(0)->set_events(notes, sum, sum); iteration_end(); } // sr_letter_to_type = {"i": 'Integer', "r": 'Real', "s": 'String', // "l": 'Logical', "a": 'Symbol'} lmms-1.1.3/plugins/MidiImport/portsmf/allegro.h000066400000000000000000001136231247673406200215330ustar00rootroot00000000000000// Portsmf (also known as Allegro): // music representation system, with // extensible in-memory sequence structure // upward compatible with MIDI // implementations in C++ and Serpent // external, text-based representation // compatible with Aura // // SERIALBUFFER CLASS // // The Serial_buffer class is defined to support serialization and // unserialization. A Serial_buffer is just a block of memory with // a length and a read/write pointer. When writing, it can expand. // // SERIALIZATION // // The Alg_track class has static members: // ser_buf -- a Serial_buffer // When objects are serialized, they are first written to // ser_buf, which is expanded whenever necessary. Then, when // the length is known, new memory is allocated and the data // is copied to a correctly-sized buffer and returned to caller. // The "external" (callable from outside the library) // serialization functions are: // Alg_track::serialize() // Alg_seq::serialize() // The "internal" serialization functions to be called from within // the library are: // Alg_track::serialize_track(bool text) // Alg_seq::serialize_seq(bool text) // Alg_track::serialize_parameter( // Alg_parameter *parm, bool text) // These internal serialize functions append data to ser_buf The text // flag says to write an ascii representation as opposed to binary. // // UNSERIALIZATION: // // The Alg_track class has a static member: // unserialize(char *buffer, long len) // that will unserialize anything -- an Alg_track or an Alg_seq. // No other function should be called from outside the library. // Internal unserialize functions are: // Alg_seq::unserialize_seq() // Alg_track::unserialize_track() // Alg_track::unserialize_parameter(Alg_parameter_ptr parm_ptr) // Just as serialization uses ser_buf for output, unserialization uses // unser_buf for reading. unser_buf is another static member of Alg_track. #ifndef __ALLEGRO__ #define __ALLEGRO__ #include "debug.h" #include "lmmsconfig.h" #define ALG_EPS 0.000001 // epsilon #define ALG_DEFAULT_BPM 100.0 // default tempo // are d1 and d2 within epsilon of each other? bool within(double d1, double d2, double epsilon); char *heapify(const char *s); // put a string on the heap // Alg_attribute is an atom in the symbol table // with the special addition that the last // character is prefixed to the string; thus, // the attribute 'tempor' (a real) is stored // as 'rtempor'. To get the string name, just // use attribute+1. typedef char *Alg_attribute; #define alg_attr_name(a) ((a) + 1) #define alg_attr_type(a) (*(a)) // Alg_atoms is a symbol table of Alg_attributes and other // unique strings class Alg_atoms { public: Alg_atoms() { maxlen = len = 0; atoms = NULL; } // insert/lookup an atttribute Alg_attribute insert_attribute(Alg_attribute attr); // insert/lookup attribute by name (without prefixed type) Alg_attribute insert_string(const char *name); private: long maxlen; long len; char **atoms; // insert an Attriubute not in table after moving attr to heap Alg_attribute insert_new(const char *name, char attr_type); void expand(); // make more space }; extern Alg_atoms symbol_table; // an attribute/value pair. Since Alg_attribute names imply type, // we try to keep attributes and values packaged together as // Alg_parameter class typedef class Alg_parameter { public: ~Alg_parameter(); Alg_attribute attr; union { double r;// real char *s; // string long i; // integer bool l; // logical char *a; // symbol (atom) }; // anonymous union void copy(Alg_parameter *); // copy from another parameter char attr_type() { return alg_attr_type(attr); } char *attr_name() { return alg_attr_name(attr); } void set_attr(Alg_attribute a) { attr = a; } void show(); } *Alg_parameter_ptr; // a list of attribute/value pairs typedef class Alg_parameters { public: class Alg_parameters *next; Alg_parameter parm; Alg_parameters(Alg_parameters *list) { next = list; } //~Alg_parameters() { } // each of these routines takes address of pointer to the list // insertion is performed without checking whether or not a // parameter already exists with this attribute. See find() and // remove_key() to assist in checking for and removing existing // parameters. // Note also that these insert_* methods convert name to an // attribute. If you have already done the symbol table lookup/insert // you can do these operations faster (in which case we should add // another set of functions that take attributes as arguments.) static void insert_real(Alg_parameters **list, char *name, double r); // insert string will copy string to heap static void insert_string(Alg_parameters **list, char *name, char *s); static void insert_integer(Alg_parameters **list, char *name, long i); static void insert_logical(Alg_parameters **list, char *name, bool l); static void insert_atom(Alg_parameters **list, char *name, char *s); static Alg_parameters *remove_key(Alg_parameters **list, const char *name); // find an attribute/value pair Alg_parameter_ptr find(Alg_attribute *attr); } *Alg_parameters_ptr; // these are type codes associated with certain attributes // see Alg_track::find() where these are bit positions in event_type_mask #define ALG_NOTE 0 // This is a note, not an update #define ALG_GATE 1 // "gate" #define ALG_BEND 2 // "bend" #define ALG_CONTROL 3 // "control" #define ALG_PROGRAM 4 // "program" #define ALG_PRESSURE 5 // "pressure" #define ALG_KEYSIG 6 // "keysig" #define ALG_TIMESIG_NUM 7 // "timesig_num" #define ALG_TIMESIG_DEN 8 // "timesig_den" #define ALG_OTHER 9 // any other value // abstract superclass of Alg_note and Alg_update: typedef class Alg_event { protected: bool selected; char type; // 'e' event, 'n' note, 'u' update long key; // note identifier static const char* description; // static buffer for debugging (in Alg_event) public: double time; long chan; virtual void show() = 0; // Note: there is no Alg_event() because Alg_event is an abstract class. bool is_note() { return (type == 'n'); } // tell whether an Alg_event is a note bool is_update() { return (type == 'u'); } // tell whether an Alg_event is a parameter update char get_type() { return type; } // return 'n' for note, 'u' for update int get_type_code(); // 1 = volume change, 2 = pitch bend, // 3 = control change, 4 = program change, // 5 = pressure change, 6 = key signature, // 7 = time sig numerator, 8 = time sig denominator bool get_selected() { return selected; } void set_selected(bool b) { selected = b; } // Note: notes are identified by a (channel, identifier) pair. // For midi, the identifier is the key number (pitch). The identifier // does not have to represent pitch; it's main purpose is to identify // notes so that they can be named by subsequent update events. long get_identifier() { return key; } // get MIDI key or note identifier of note or update void set_identifier(long i) { key = i; } // set the identifier // In all of these set_ methods, strings are owned by the caller and // copied as necessary by the callee. For notes, an attribute/value // pair is added to the parameters list. For updates, the single // attribute/value parameter pair is overwritten. In all cases, the // attribute (first argument) must agree in type with the second arg. // The last letter of the attribute implies the type (see below). void set_parameter(Alg_parameter_ptr new_parameter); void set_string_value(char *attr, char *value); void set_real_value(char *attr, double value); void set_logical_value(char *attr, bool value); void set_integer_value(char *attr, long value); void set_atom_value(char *attr, char *atom); // Some note methods. These fail (via assert()) if this is not a note: // float get_pitch();// get pitch in steps -- use this even for MIDI float get_loud(); // get loudness (MIDI velocity) // times are in seconds or beats, depending upon the units_are_seconds // flag in the containing sequence double get_start_time(); // get start time in seconds or beats double get_end_time(); // get end time in seconds or beats double get_duration(); // get duration in seconds or beats void set_pitch(float); void set_loud(float); void set_duration(double); // Notes have lists of attribute values. Attributes are converted // to/from strings in this API to avoid explicit use of Alg_attribute // types. Attribute names end with a type designation: 's', 'r', 'l', // 'i', or 'a'. // bool has_attribute(char *attr); // test if note has attribute/value pair char get_attribute_type(char *attr); // get the associated type: // 's' = string, // 'r' = real (double), 'l' = logical (bool), 'i' = integer (long), // 'a' = atom (char *), a unique string stored in Alg_seq char *get_string_value(char *attr, char *value = NULL); // get the string value double get_real_value(char *attr, double value = 0.0); // get the real value bool get_logical_value(char *attr, bool value = false); // get the logical value long get_integer_value(char *attr, long value = 0); // get the integer value char *get_atom_value(char *attr, char *value = NULL); // get the atom value void delete_attribute(char *attr); // delete an attribute/value pair // (ignore if no matching attribute/value pair exists) // Some attribute/value methods. These fail if this is not an update. // Attributes are converted to/from strings to avoid explicit use // of Alg_attribute types. // const char *get_attribute(); // get the update's attribute (string) char get_update_type(); // get the update's type: 's' = string, // 'r' = real (double), 'l' = logical (bool), 'i' = integer (long), // 'a' = atom (char *), a unique string stored in Alg_seq char *get_string_value(); // get the update's string value // Notes: Caller does not own the return value. Do not modify. // Do not use after underlying Alg_seq is modified. double get_real_value(); // get the update's real value bool get_logical_value(); // get the update's logical value long get_integer_value(); // get the update's integer value char *get_atom_value(); // get the update's atom value // Notes: Caller does not own the return value. Do not modify. // The return value's lifetime is forever. // Auxiliary function to aid in editing tracks // Returns true if the event overlaps the given region bool overlap(double t, double len, bool all); const char *GetDescription(); // computes a text description of this event // the result is in a static buffer, not thread-safe, just for debugging. Alg_event() { selected = false; } virtual ~Alg_event() {} } *Alg_event_ptr; typedef class Alg_note : public Alg_event { public: virtual ~Alg_note(); Alg_note(Alg_note *); // copy constructor float pitch; // pitch in semitones (69 = A440) float loud; // dynamic corresponding to MIDI velocity double dur; // duration in seconds (normally to release point) Alg_parameters_ptr parameters; // attribute/value pair list Alg_note() { type = 'n'; parameters = NULL; } void show(); } *Alg_note_ptr; typedef class Alg_update : public Alg_event { public: virtual ~Alg_update() {}; Alg_update(Alg_update *); // copy constructor Alg_parameter parameter; // an update contains one attr/value pair Alg_update() { type = 'u'; } void show(); } *Alg_update_ptr; // a sequence of Alg_event objects typedef class Alg_events { private: long maxlen; void expand(); protected: long len; Alg_event_ptr *events; // events is array of pointers public: // sometimes, it is nice to have the time of the last note-off. // In the current implementation, // this field is set by append to indicate the time of the // last note-off in the current unit, so it should be correct after // creating a new track and adding notes to it. It is *not* // updated after uninsert(), so use it with care. double last_note_off; virtual int length() { return len; } Alg_event_ptr &operator[](int i) { assert(i >= 0 && i < len); return events[i]; } Alg_events() { maxlen = len = 0; events = NULL; last_note_off = 0; } // destructor deletes the events array, but not the // events themselves ~Alg_events(); void set_events(Alg_event_ptr *e, long l, long m) { if (events) delete [] events; events = e; len = l; maxlen = m; } // for use by Alg_track and Alg_seq void insert(Alg_event_ptr event); void append(Alg_event_ptr event); Alg_event_ptr uninsert(long index); } *Alg_events_ptr; class Alg_track; typedef class Alg_event_list : public Alg_events { protected: char type; // 'e' Alg_event_list, 't' Alg_track, 's' Alg_seq static const char *last_error_message; Alg_track *events_owner; // if this is an Alg_event_list, // the events are owned by an Alg_track or an Alg_seq static int sequences; // to keep track of sequence numbers int sequence_number; // this sequence number is incremented // whenever an edit is performed on an Alg_track or Alg_seq. // When an Alg_event_list is created to contain pointers to // a subset of an Alg_track or Alg_seq (the events_owner), // the Alg_event_list gets a copy of the events_owner's // sequence_number. If the events_owner is edited, the pointers // in this Alg_event_list will become invalid. This is detected // (for debugging) as differing sequence_numbers. // every event list, track, and seq has a duration. // Usually the duration is set when the list is constructed, e.g. // when you extract from 10 to 15 seconds, the duration is 5 secs. // The duration does not tell you when is the last note-off. // duration is recorded in both beats and seconds: double beat_dur; double real_dur; public: // the client should not create one of these, but these are // returned from various track and seq operations. An // Alg_event_list "knows" the Alg_track or Alg_seq that "owns" // the events. All events in an Alg_event_list must belong // to the same Alg_track or Alg_seq structure. // When applied to an Alg_seq, events are enumerated track // by track with increasing indices. This operation is not // particularly fast on an Alg_seq. virtual Alg_event_ptr &operator[](int i); Alg_event_list() { sequence_number = 0; beat_dur = 0.0; real_dur = 0.0; events_owner = NULL; type = 'e'; } Alg_event_list(Alg_track *owner); char get_type() { return type; } Alg_track *get_owner() { return events_owner; } // The destructor does not free events because they are owned // by a track or seq structure. virtual ~Alg_event_list(); // Returns the duration of the sequence in beats or seconds double get_beat_dur() { return beat_dur; } void set_beat_dur(double d) { beat_dur = d; } double get_real_dur() { return real_dur; } void set_real_dur(double d) { real_dur = d; } // Events are stored in time order, so when you change the time of // an event, you must adjust the position. When you call set_start_time // on an Alg_event_list, the Alg_event_list is not modified, but the // Alg_track that "owns" the event is modified. If the owner is an // Alg_seq, this may require searching the seq for the track containing // the event. This will mean a logN search of every track in the seq // (but if this turns out to be a problem, we can store each event's // track owner in the Alg_event_list.) virtual void set_start_time(Alg_event *event, double); // get text description of run-time errors detected, clear error const char *get_last_error_message() { return last_error_message; } // Implementation hint: keep a sequence number on each Alg_track that is // incremented anytime there is a structural change. (This behavior is // inherited by Alg_seq as well.) Copy the sequence number to any // Alg_event_list object when it is created. Whenever you access an // Alg_event_list, using operator[], assert that the Alg_event_list sequence // number matches the Alg_seq sequence number. This will guarantee that you // do not try to retain pointers to events beyond the point where the events // may no longer exist. } *Alg_event_list_ptr, &Alg_event_list_ref; // Alg_beat is used to contruct a tempo map typedef class Alg_beat { public: Alg_beat(double t, double b) { time = t; beat = b; } Alg_beat() {}; double time; double beat; } *Alg_beat_ptr; // Alg_beats is a list of Alg_beat objects used in Alg_seq typedef class Alg_beats { private: long maxlen; void expand(); public: long len; Alg_beat_ptr beats; Alg_beat &operator[](int i) { assert(i >= 0 && i < len); return beats[i]; } Alg_beats() { maxlen = len = 0; beats = NULL; expand(); beats[0].time = 0; beats[0].beat = 0; len = 1; } ~Alg_beats() { if (beats) delete[] beats; } void insert(long i, Alg_beat_ptr beat); } *Alg_beats_ptr; typedef class Alg_time_map { private: int refcount; public: Alg_beats beats; // array of Alg_beat double last_tempo; bool last_tempo_flag; Alg_time_map() { last_tempo = ALG_DEFAULT_BPM / 60.0; // note: this value ignored until // last_tempo_flag is set; nevertheless, the default // tempo is 100. last_tempo_flag = true; refcount = 0; } Alg_time_map(Alg_time_map *map); // copy constructor long length() { return beats.len; } void show(); long locate_time(double time); long locate_beat(double beat); double beat_to_time(double beat); double time_to_beat(double time); // Time map manipulations: it is prefered to call the corresponding // methods in Alg_seq. If you manipulate an Alg_time_map directly, // you should take care to convert all tracks that use the time map // to beats or seconds as appropriate: Normally if you insert a beat // you want tracks to be in time units and if you insert a tempo change // you want tracks to be in beat units. void insert_beat(double time, double beat); // add a point to the map bool insert_tempo(double tempo, double beat); // insert a tempo change // set the tempo over a region bool set_tempo(double tempo, double start_beat, double end_beat); void cut(double start, double len, bool units_are_seconds); void trim(double start, double end, bool units_are_seconds); void paste(double start, Alg_track *tr); // insert a span of time. If start is at a tempo change, then // the span of time runs at the changed tempo void insert_time(double start, double len); // insert a span of beats. If start is at a tempo change, the // tempo change takes effect before the inserted beats void insert_beats(double start, double len); void dereference() { if (--refcount <= 0) delete this; } void reference() { refcount++; } } *Alg_time_map_ptr; typedef class Serial_buffer { private: char *buffer; char *ptr; long len; public: Serial_buffer() { buffer = NULL; ptr = NULL; len = 0; } void init_for_write() { ptr = buffer; } long get_posn() { return (long) (ptr - buffer); } long get_len() { return len; } // store_long writes a long at a given offset void store_long(long offset, long value) { assert(offset <= get_posn() - 4); long *loc = (long *) (buffer + offset); *loc = value; } void check_buffer(long needed); void set_string(char *s) { char *fence = buffer + len; assert(ptr < fence); while ((*ptr++ = *s++)) assert(ptr < fence); // assert((char *)(((long) (ptr + 7)) & ~7) <= fence); pad(); } void set_int32(long v) { *((long *) ptr) = v; ptr += 4; } void set_double(double v) { *((double *) ptr) = v; ptr += 8; } void set_float(float v) { *((float *) ptr) = v; ptr += 4; } void set_char(char v) { *ptr++ = v; } #ifdef LMMS_BUILD_WIN64 void pad() { while (((long long) ptr) & 7) set_char(0); } #else void pad() { while (((long) ptr) & 7) set_char(0); } #endif void *to_heap(long *len) { *len = get_posn(); char *newbuf = new char[*len]; memcpy(newbuf, buffer, *len); return newbuf; } void init_for_read(void *buf, long n) { buffer = (char *) buf; ptr = (char *) buf; len = n; } char get_char() { return *ptr++; } long get_int32() { long i = *((long *) ptr); ptr += 4; return i; } float get_float() { float f = *((float *) ptr); ptr += 4; return f; } double get_double() { double d = *((double *) ptr); ptr += sizeof(double); return d; } char *get_string() { char *s = ptr; char *fence = buffer + len; assert(ptr < fence); while (*ptr++) assert(ptr < fence); get_pad(); return s; } #ifdef LMMS_BUILD_WIN64 void get_pad() { while (((long long) ptr) & 7) ptr++; } #else void get_pad() { while (((long) ptr) & 7) ptr++; } #endif void check_input_buffer(long needed) { assert(get_posn() + needed <= len); } } *Serial_buffer_ptr; typedef class Alg_seq *Alg_seq_ptr; typedef class Alg_track : public Alg_event_list { protected: Alg_time_map *time_map; bool units_are_seconds; char *get_string(char **p, long *b); long get_int32(char **p, long *b); double get_double(char **p, long *b); float get_float(char **p, long *b); static Serial_buffer ser_buf; void serialize_parameter(Alg_parameter *parm); // *buffer_ptr points to binary data, bytes_ptr points to how many // bytes have been used so far, len is length of binary data void unserialize_parameter(Alg_parameter_ptr parm_ptr); public: void serialize_track(); void unserialize_track(); virtual Alg_event_ptr &operator[](int i) { assert(i >= 0 && i < len); return events[i]; } Alg_track() { units_are_seconds = false; time_map = NULL; set_time_map(NULL); type = 't'; } // initialize empty track with a time map Alg_track(Alg_time_map *map, bool seconds); Alg_event_ptr copy_event(Alg_event_ptr event); // make a complete copy Alg_track(Alg_track &track); // copy constructor, does not copy time_map // copy constructor: event_list is copied, map is installed and referenced Alg_track(Alg_event_list_ref event_list, Alg_time_map_ptr map, bool units_are_seconds); virtual ~Alg_track() { set_time_map(NULL); } // Returns a buffer containing a serialization of the // file. It will be an ASCII representation unless text is true. // *buffer gets a newly allocated buffer pointer. The caller must free it. // *len gets the length of the serialized track virtual void serialize(void **buffer, long *bytes); // Try to read from a memory buffer. Automatically guess // whether it's MIDI or text. static Alg_track *unserialize(void *buffer, long len); // If the track is really an Alg_seq and you need to access an // Alg_seq method, coerce to an Alg_seq with this function: Alg_seq_ptr to_alg_seq() { return (get_type() == 's' ? (Alg_seq_ptr) this : NULL); } // Are we using beats or seconds? bool get_units_are_seconds() { return units_are_seconds; } // Change units virtual void convert_to_beats(); virtual void convert_to_seconds(); void set_dur(double dur); double get_dur() { return (units_are_seconds ? real_dur : beat_dur); } // Every Alg_track may have an associated time_map. If no map is // specified, or if you set_time_map(NULL), then the behavior // should be as if there is a constant tempo of 100 beats/minute // (this constant is determined by ALG_DEFAULT_BPM). // Recommendation: create a static global tempo map object. When // any operation that needs a tempo map gets NULL, use the global // tempo map. (Exception: any operation that would modify the // tempo map should raise an error -- you don't want to change the // default tempo map.) virtual void set_time_map(Alg_time_map *map); Alg_time_map *get_time_map() { return time_map; } // Methods to create events. The returned event is owned by the caller. // Use delete to get rid of it unless you call add() -- see below. // Alg_note *create_note(double time, int channel, int identifier, float pitch, float loudness, double duration); // Note: after create_update(), caller should use set_*_value() to // initialize the attribute/value pair: Alg_update *create_update(double time, int channel, int identifier); // Adds a new event - it is automatically inserted into the // correct order in the sequence based on its timestamp. // The ownership passes from the caller to this Alg_seq. The // event is not copied. virtual void add(Alg_event *event) { insert(event); } // // Editing regions // // Deletes the notes that start within the given region // and returns them in a new sequence. The start times // of the notes in the returned sequence are shifted // by -t. The notes after the region get shifted over // to fill the gap. In an Alg_seq, the tempo track is edited // in a similar way // and the cut tempo information is retained in the new seq. // ONLY NOTES THAT START WITHIN THE REGION ARE CUT unless // "all" is true in which case all notes that intersect // the region are copied. CUT NOTES // MAY EXTEND BEYOND THE DURATION OF THE RESULTING SEQ. // The return type is the same as this (may be Alg_seq). // All times including len are interpreted according to // units_are_seconds in the track. virtual Alg_track *cut(double t, double len, bool all); // Like cut() but doesn't remove the notes from the original // sequence. The Alg_events are copied, not shared. ONLY EVENTS // THAT START WITHIN THE REGION ARE COPIED unless "all" is true // in which case all notes that intersect the region are // copied. COPIED NOTES MAY // EXTEND BEYOND THE DURATION OF THE RESULTING SEQ. // The return type is the same as this (may be Alg_seq). virtual Alg_track *copy(double t, double len, bool all); // Inserts a sequence in the middle, shifting some notes // over by the duration of the seq, which is first converted // to the same units (seconds or beats) as this. (This makes // a differece because the pasted data may change the tempo, // and notes that overlap the borders will then experience // a tempo change.) // THE SEQ PARAMETER IS NOT MODIFIED, AND Alg_event's ARE // COPIED, NOT SHARED. // The type of seq must be Alg_seq if seq is an Alg_seq, or // Alg_track if seq is an Alg_track or an Alg_event_list. virtual void paste(double t, Alg_event_list *seq); // Shifts notes // Merges two sequences with a certain offset. The offset is // interpreted as either beats or seconds according to the // current units of this, and seq is converted to the same // units as this. Except for a possible conversion to beats // or seconds, the tempo track of seq (if any) is ignored. // (There is no way to merge tempo tracks.) // THE SEQ PARAMETER IS NOT MODIFIED, AND Alg_event's ARE // COPIED, NOT SHARED. // The type of seq must be Alg_seq if seq is an Alg_seq, or // Alg_track if seq is an Alg_track or an Alg_event_list. virtual void merge(double t, Alg_event_list_ptr seq); // Deletes and shifts notes to fill the gap. The tempo track // is also modified accordingly. ONLY EVENTS THAT START WITHIN // THE REGION ARE DELETED unless "all" is true, in which case // all notes that intersect the region are cleared. // NOTES THAT EXTEND FROM BEFORE THE // REGION INTO THE REGION RETAIN THEIR DURATION IN EITHER // BEATS OR SECONDS ACCORDING TO THE CURRENT UNITS OF this. virtual void clear(double t, double len, bool all); // Deletes notes but doesn't shift. If the "all" argument // is true, deletes all notes that intersect the range at all, // not just those that start within it. The tempo track is // not affected. virtual void silence(double t, double len, bool all); // Simply shifts notes past time t over by len, which is given // in either beats or seconds according to the units of this. // The resulting interveal (t, t+len) may in fact contain notes // that begin before t. The durations of notes are not changed. // If this is an Alg_seq, the tempo track is expanded at t also. virtual void insert_silence(double t, double len); // // Accessing for screen display // // A useful generic function to retrieve only certain // types of events. The masks should be bit-masks defined // somewhere else. Part of the mask allows us to search for // selected events. If this is an Alg_seq, search all tracks // (otherwise, call track[i].find()) // If channel_mask == 0, accept ALL channels virtual Alg_event_list *find(double t, double len, bool all, long channel_mask, long event_type_mask); // // MIDI playback // // See Alg_iterator } *Alg_track_ptr, &Alg_track_ref; // Alg_time_sig represents a single time signature; // although not recommended, time_signatures may have arbitrary // floating point values, e.g. 4.5 beats per measure typedef class Alg_time_sig { public: double beat; // when does this take effect? double num; // what is the "numerator" (top number?) double den; // what is the "denominator" (bottom number?) Alg_time_sig(double b, double n, double d) { beat = b; num = n; den = d; } Alg_time_sig() { beat = 0; num = 0; den = 0; } void beat_to_measure(double beat, double *measure, double *m_beat, double *num, double *den); } *Alg_time_sig_ptr; // Alg_time_sigs is a dynamic array of time signatures // // The default (empty) time_sigs has 4/4 time at beat 0. // Each time_sig object in time_sigs represents the beginning // of a measure. If there is a beat missing, e.g. in the first // measure, you can represent this by inserting another // time_sig at the next measure beginning. Each time_sig implies // an infinite sequence of full measures until the next time_sig. // If you insert a time_sig and one already exist near the same // beat, the old one is replaced, thus re-barring every measure // until the next time_sig. class Alg_time_sigs { private: long maxlen; void expand(); // make more space long len; Alg_time_sig_ptr time_sigs; public: Alg_time_sigs() { maxlen = len = 0; time_sigs = NULL; } Alg_time_sig &operator[](int i) { // fetch a time signature assert(i >= 0 && i < len); return time_sigs[i]; } ~Alg_time_sigs() { if (time_sigs) delete[] time_sigs; } void show(); long length() { return len; } int find_beat(double beat); void insert(double beat, double num, double den); void cut(double start, double end); // remove from start to end void trim(double start, double end); // retain just start to end void paste(double start, Alg_seq *seq); void insert_beats(double beat, double len); // insert len beats at beat }; // a sequence of Alg_events objects typedef class Alg_tracks { private: long maxlen; void expand(); void expand_to(int new_max); long len; public: Alg_track_ptr *tracks; // tracks is array of pointers Alg_track &operator[](int i) { assert(i >= 0 && i < len); return *tracks[i]; } long length() { return len; } Alg_tracks() { maxlen = len = 0; tracks = NULL; } ~Alg_tracks(); // Append a track to tracks. This Alg_tracks becomes the owner of track. void append(Alg_track_ptr track); void add_track(int track_num, Alg_time_map_ptr time_map, bool seconds); void reset(); } *Alg_tracks_ptr; typedef enum { alg_no_error = 0, // no error reading Allegro or MIDI file alg_error_open = -800, // could not open Allegro or MIDI file alg_error_syntax // something found in the file that could not be parsed; // generally you should ignore syntax errors or look at the printed error messages // because there are some things in standard midi files that we do not handle; // (maybe we should only set alg_error_syntax when there is a real problem with // the file as opposed to when there is some warning message for the user) } Alg_error; // An Alg_seq is an array of Alg_events, each a sequence of Alg_event, // with a tempo map and a sequence of time signatures // typedef class Alg_seq : public Alg_track { protected: long *current; // array of indexes used by iteration methods void serialize_seq(); Alg_error error; // error code set by file readers // an internal function used for writing Allegro track names Alg_event_ptr write_track_name(std::ostream &file, int n, Alg_events &events); public: int channel_offset_per_track; // used to encode track_num into channel Alg_tracks track_list; // array of Alg_events Alg_time_sigs time_sig; int beat_x; void basic_initialization() { error = alg_no_error; units_are_seconds = true; type = 's'; channel_offset_per_track = 0; add_track(0); // default is one empty track } Alg_seq() { basic_initialization(); } // copy constructor -- if track is an Alg_seq, make a copy; if // track is just an Alg_track, the track becomes track 0 Alg_seq(Alg_track_ref track) { seq_from_track(track); } Alg_seq(Alg_track_ptr track) { seq_from_track(*track); } void seq_from_track(Alg_track_ref tr); Alg_seq(std::istream &file, bool smf); // create from file Alg_seq(const char *filename, bool smf); // create from filename ~Alg_seq(); int get_read_error() { return error; } void serialize(void **buffer, long *bytes); void copy_time_sigs_to(Alg_seq *dest); // a utility function void set_time_map(Alg_time_map *map); // encode sequence structure into contiguous, moveable memory block // address of newly allocated memory is assigned to *buffer, which must // be freed by caller; the length of data is assigned to *len void unserialize_seq(); // write an ascii representation to file void write(std::ostream &file, bool in_secs); // returns true on success bool write(const char *filename); void smf_write(std::ofstream &file); bool smf_write(const char *filename); // Returns the number of tracks int tracks(); // create a track void add_track(int track_num) { track_list.add_track(track_num, get_time_map(), units_are_seconds); } // Return a particular track. This Alg_seq owns the track, so the // caller must not delete the result. Alg_track_ptr track(int); virtual Alg_event_ptr &operator[](int i); virtual void convert_to_seconds(); virtual void convert_to_beats(); Alg_track_ptr cut_from_track(int track_num, double start, double dur, bool all); Alg_seq *cut(double t, double len, bool all); void insert_silence_in_track(int track_num, double t, double len); void insert_silence(double t, double len); Alg_track_ptr copy_track(int track_num, double t, double len, bool all); Alg_seq *copy(double start, double len, bool all); void paste(double start, Alg_seq *seq); virtual void clear(double t, double len, bool all); virtual void merge(double t, Alg_event_list_ptr seq); virtual void silence(double t, double len, bool all); void clear_track(int track_num, double start, double len, bool all); void silence_track(int track_num, double start, double len, bool all); Alg_event_list_ptr find_in_track(int track_num, double t, double len, bool all, long channel_mask, long event_type_mask); // find index of first score event after time long seek_time(double time, int track_num); bool insert_beat(double time, double beat); // warning: insert_tempo may change representation from seconds to beats bool insert_tempo(double bpm, double beat); // add_event takes a pointer to an event on the heap. The event is not // copied, and this Alg_seq becomes the owner and freer of the event. void add_event(Alg_event_ptr event, int track_num); void add(Alg_event_ptr event) { assert(false); } // call add_event instead // warning: set_tempo may change representation from seconds to beats bool set_tempo(double bpm, double start_beat, double end_beat); void set_time_sig(double beat, double num, double den); void beat_to_measure(double beat, long *measure, double *m_beat, double *num, double *den); // void set_events(Alg_event_ptr *events, long len, long max); void merge_tracks(); // move all track data into one track void iteration_begin(); // prepare to enumerate events in order Alg_event_ptr iteration_next(); // return next event (or NULL) void iteration_end(); // clean up after enumerating events } *Alg_seq_ptr, &Alg_seq_ref; // see Alg_seq::Alg_seq() constructors that read from files // the following are for internal library implementation and are // moved to *_internal.h header files. //Alg_seq_ptr alg_read(std::istream &file, Alg_seq_ptr new_seq); //Alg_seq_ptr alg_smf_read(std::istream &file, Alg_seq_ptr new_seq); #endif lmms-1.1.3/plugins/MidiImport/portsmf/allegrord.cpp000066400000000000000000000624331247673406200224160ustar00rootroot00000000000000#include "debug.h" #include "stdlib.h" #include "string.h" #include "ctype.h" #include "trace.h" #include #include #include #include "strparse.h" #include "allegro.h" #include "algrd_internal.h" using namespace std; #define streql(s1, s2) (strcmp(s1, s2) == 0) #define field_max 80 class Alg_reader { public: istream *file; string input_line; int line_no; String_parse line_parser; bool line_parser_flag; string field; bool error_flag; Alg_seq_ptr seq; double tsnum; double tsden; Alg_reader(istream *a_file, Alg_seq_ptr new_seq); void readline(); Alg_parameters_ptr process_attributes(Alg_parameters_ptr attributes, double time); bool parse(); long parse_chan(string &field); long parse_int(string &field); int find_real_in(string &field, int n); double parse_real(string &field); void parse_error(string &field, long offset, const char *message); double parse_dur(string &field, double base); double parse_after_dur(double dur, string &field, int n, double base); double parse_loud(string &field); long parse_key(string &field); double parse_pitch(string &field); long parse_after_key(int key, string &field, int n); long find_int_in(string &field, int n); bool parse_attribute(string &field, Alg_parameter_ptr parm); bool parse_val(Alg_parameter_ptr param, string &s, int i); bool check_type(char type_char, Alg_parameter_ptr param); }; double Alg_reader::parse_pitch(string &field) { if (isdigit(field[1])) { int last = find_real_in(field, 1); string real_string = field.substr(1, last - 1); return atof(real_string.c_str()); } else { return (double) parse_key(field); } } // it is the responsibility of the caller to delete // the seq Alg_reader::Alg_reader(istream *a_file, Alg_seq_ptr new_seq) { file = a_file; // save the file line_parser_flag = false; line_no = 0; tsnum = 4; // default time signature tsden = 4; seq = new_seq; } Alg_error alg_read(istream &file, Alg_seq_ptr new_seq) // read a sequence from allegro file { assert(new_seq); Alg_reader alg_reader(&file, new_seq); bool err = alg_reader.parse(); return (err ? alg_error_syntax : alg_no_error); } void Alg_reader::readline() { // a word about memory management: this Alg_reader has a // member variable input_line that holds a line of input // it is reused for each line. input_line is parsed by // line_parser, which holds a reference to input_line line_parser_flag = false; if (getline(*file, input_line)) { line_parser.init(&input_line); line_parser_flag = true; error_flag = false; } } Alg_parameters_ptr Alg_reader::process_attributes( Alg_parameters_ptr attributes, double time) { // print "process_attributes:", attributes bool ts_flag = false; if (attributes) { Alg_parameters_ptr a; bool in_seconds = seq->get_units_are_seconds(); if ((a = Alg_parameters::remove_key(&attributes, "tempor"))) { double tempo = a->parm.r; seq->insert_tempo(tempo, seq->get_time_map()->time_to_beat(time)); } if ((a = Alg_parameters::remove_key(&attributes, "beatr"))) { double beat = a->parm.r; seq->insert_beat(time, beat); } if ((a = Alg_parameters::remove_key(&attributes, "timesig_numr"))) { tsnum = a->parm.r; ts_flag = true; } if ((a = Alg_parameters::remove_key(&attributes, "timesig_denr"))) { tsden = a->parm.r; ts_flag = true; } if (ts_flag) { seq->set_time_sig(seq->get_time_map()->time_to_beat(time), tsnum, tsden); } if (in_seconds) seq->convert_to_seconds(); } return attributes; // in case it was modified } bool Alg_reader::parse() { int voice = 0; int key = 60; double loud = 100.0; double pitch = 60.0; double dur = 1.0; double time = 0.0; int track_num = 0; seq->convert_to_seconds(); //seq->set_real_dur(0.0); // just in case it's not initialized already readline(); bool valid = false; // ignore blank lines while (line_parser_flag) { bool time_flag = false; bool next_flag = false; double next; bool voice_flag = false; bool loud_flag = false; bool dur_flag = false; bool new_pitch_flag = false; // "P" syntax or "A"-"G" syntax double new_pitch = 0.0; bool new_key_flag = false; // "K" syntax int new_key = 0; Alg_parameters_ptr attributes = NULL; if (line_parser.peek() == '#') { // look for #track line_parser.get_nonspace_quoted(field); if (streql(field.c_str(), "#track")) { line_parser.get_nonspace_quoted(field); // number field.insert(0, " "); // need char at beginning because // parse_int ignores the first character of the argument track_num = parse_int(field); seq->add_track(track_num); } // maybe we have a sequence or track name line_parser.get_remainder(field); // if there is a non-space character after #track n then // use it as sequence or track name. Note that because we // skip over spaces, a sequence or track name cannot begin // with leading blanks. Another decision is that the name // must be at time zero if (field.length() > 0) { // insert the field as sequence name or track name Alg_update_ptr update = new Alg_update; update->chan = -1; update->time = 0; update->set_identifier(-1); // sequence name is whatever is on track 0 // other tracks have track names const char *attr = (track_num == 0 ? "seqnames" : "tracknames"); update->parameter.set_attr(symbol_table.insert_string(attr)); update->parameter.s = heapify(field.c_str()); seq->add_event(update, track_num); } } else { // we must have a track to insert into if (seq->tracks() == 0) seq->add_track(0); line_parser.get_nonspace_quoted(field); char pk = line_parser.peek(); // attributes are parsed as two adjacent nonspace_quoted tokens // so we have to conditionally call get_nonspace_quoted() again if (pk && !isspace(pk)) { string field2; line_parser.get_nonspace_quoted(field2); field.append(field2); } while (field[0]) { char first = toupper(field[0]); if (strchr("ABCDEFGKLPUSIQHW-", first)) { valid = true; // it's a note or event } if (first == 'V') { if (voice_flag) { parse_error(field, 0, "Voice specified twice"); } else { voice = parse_chan(field); } voice_flag = true; } else if (first == 'T') { if (time_flag) { parse_error(field, 0, "Time specified twice"); } else { time = parse_dur(field, 0.0); } time_flag = true; } else if (first == 'N') { if (next_flag) { parse_error(field, 0, "Next specified twice"); } else { next = parse_dur(field, time); } next_flag = true; } else if (first == 'K') { if (new_key_flag) { parse_error(field, 0, "Key specified twice"); } else { new_key = parse_key(field); new_key_flag = true; } } else if (first == 'L') { if (loud_flag) { parse_error(field, 0, "Loudness specified twice"); } else { loud = parse_loud(field); } loud_flag = true; } else if (first == 'P') { if (new_pitch_flag) { parse_error(field, 0, "Pitch specified twice"); } else { new_pitch = parse_pitch(field); new_pitch_flag = true; } } else if (first == 'U') { if (dur_flag) { parse_error(field, 0, "Dur specified twice"); } else { dur = parse_dur(field, time); dur_flag = true; } } else if (strchr("SIQHW", first)) { if (dur_flag) { parse_error(field, 0, "Dur specified twice"); } else { // prepend 'U' to field, copy EOS too field.insert(0, 1, 'U'); dur = parse_dur(field, time); dur_flag = true; } } else if (strchr("ABCDEFG", first)) { if (new_pitch_flag) { parse_error(field, 0, "Pitch specified twice"); } else { // prepend 'P' to field field.insert(0, 1, 'P'); new_pitch = parse_pitch(field); new_pitch_flag = true; } } else if (first == '-') { Alg_parameter parm; if (parse_attribute(field, &parm)) { // enter attribute-value pair attributes = new Alg_parameters(attributes); attributes->parm = parm; parm.s = NULL; // protect string from deletion by destructor } } else { parse_error(field, 0, "Unknown field"); } if (error_flag) { field[0] = 0; // exit the loop } else { line_parser.get_nonspace_quoted(field); pk = line_parser.peek(); // attributes are parsed as two adjacent nonspace_quoted // tokens so we have to conditionally call // get_nonspace_quoted() again if (pk && !isspace(pk)) { string field2; line_parser.get_nonspace_quoted(field2); field.append(field2); } } } // a case analysis: // Key < 128 implies pitch unless pitch is explicitly given // Pitch implies Key unless key is explicitly given, // Pitch is rounded to nearest integer to determine the Key // if necessary, so MIDI files will lose the pitch fraction // A-G is a Pitch specification (therefore it implies Key) // K60 P60 -- both are specified, use 'em // K60 P60 C4 -- overconstrained, an error // K60 C4 -- OK, but K60 is already implied by C4 // K60 -- OK, pitch is 60 // C4 P60 -- over constrained // P60 -- OK, key is 60 // P60.1 -- OK, key is 60 // C4 -- OK, key is 60, pitch is 60 // -- OK, key and pitch from before // K200 P60 -- ok, pitch is 60 // K200 with neither P60 nor C4 uses // pitch from before // figure out what the key/instance is: if (new_key_flag) { // it was directly specified key = new_key; } else if (new_pitch_flag) { // pitch was specified, but key was not; get key from pitch key = (int) (new_pitch + 0.5); // round to integer key number } if (new_pitch_flag) { pitch = new_pitch; } else if (key < 128 && new_key_flag) { // no explicit pitch, but key < 128, so it implies pitch pitch = key; new_pitch_flag = true; } // now we've acquired new parameters // if (it is a note, then enter the note if (valid) { // change tempo or beat attributes = process_attributes(attributes, time); // if there's a duration or pitch, make a note: if (new_pitch_flag || dur_flag) { Alg_note_ptr note_ptr = new Alg_note; note_ptr->chan = voice; note_ptr->time = time; note_ptr->dur = dur; note_ptr->set_identifier(key); note_ptr->pitch = pitch; note_ptr->loud = loud; note_ptr->parameters = attributes; seq->add_event(note_ptr, track_num); // sort later if (seq->get_real_dur() < (time + dur)) seq->set_real_dur(time + dur); } else { int update_key = -1; // key must appear explicitly; otherwise // update applies to channel if (new_key_flag) { update_key = key; } if (loud_flag) { Alg_update_ptr new_upd = new Alg_update; new_upd->chan = voice; new_upd->time = time; new_upd->set_identifier(update_key); new_upd->parameter.set_attr(symbol_table.insert_string("loudr")); new_upd->parameter.r = pitch; seq->add_event(new_upd, track_num); if (seq->get_real_dur() < time) seq->set_real_dur(time); } if (attributes) { while (attributes) { Alg_update_ptr new_upd = new Alg_update; new_upd->chan = voice; new_upd->time = time; new_upd->set_identifier(update_key); new_upd->parameter = attributes->parm; seq->add_event(new_upd, track_num); Alg_parameters_ptr p = attributes; attributes = attributes->next; p->parm.s = NULL; // so we don't delete the string delete p; } } } if (next_flag) { time = time + next; } else if (dur_flag || new_pitch_flag) { // a note: incr by dur time = time + dur; } } } readline(); } if (!error_flag) { // why not convert even if there was an error? -RBD seq->convert_to_seconds(); // make sure format is correct } // real_dur is valid, translate to beat_dur seq->set_beat_dur((seq->get_time_map())->time_to_beat(seq->get_real_dur())); return error_flag; } long Alg_reader::parse_chan(string &field) { const char *int_string = field.c_str() + 1; const char *msg = "Integer or - expected"; const char *p = int_string; char c; // check that all chars in int_string are digits or '-': while ((c = *p++)) { if (!isdigit(c) && c != '-') { parse_error(field, p - field.c_str() - 1, msg); return 0; } } p--; // p now points to end-of-string character if (p - int_string == 0) { // bad: string length is zero parse_error(field, 1, msg); return 0; } if (p - int_string == 1 && int_string[0] == '-') { // special case: entire string is "-", interpret as -1 return -1; } return atoi(int_string); } long Alg_reader::parse_int(string &field) { const char *int_string = field.c_str() + 1; const char *msg = "Integer expected"; const char *p = int_string; char c; // check that all chars in int_string are digits: while ((c = *p++)) { if (!isdigit(c)) { parse_error(field, p - field.c_str() - 1, msg); return 0; } } p--; // p now points to end-of-string character if (p - int_string == 0) { // bad: string length is zero parse_error(field, 1, msg); return 0; } return atoi(int_string); } int Alg_reader::find_real_in(string &field, int n) { // scans from offset n to the end of a real constant bool decimal = false; int len = field.length(); for (int i = n; i < len; i++) { char c = field[i]; if (!isdigit(c)) { if (c == '.' && !decimal) { decimal = true; } else { return i; } } } return field.length(); } double Alg_reader::parse_real(string &field) { const char *msg = "Real expected"; int last = find_real_in(field, 1); string real_string = field.substr(1, last - 1); if (last <= 1 || last < (int) field.length()) { parse_error(field, 1, msg); return 0; } return atof(real_string.c_str()); } void Alg_reader::parse_error(string &field, long offset, const char *message) { int position = line_parser.pos - field.length() + offset; error_flag = true; puts(line_parser.str->c_str()); for (int i = 0; i < position; i++) { putc(' ', stdout); } putc('^', stdout); printf(" %s\n", message); } double duration_lookup[] = { 0.25, 0.5, 1.0, 2.0, 4.0 }; double Alg_reader::parse_dur(string &field, double base) { const char *msg = "Duration expected"; const char *durs = "SIQHW"; const char *p; int last; double dur; if (field.length() < 2) { // fall through to error message return -1; } else if (isdigit(field[1])) { last = find_real_in(field, 1); string real_string = field.substr(1, last - 1); dur = atof(real_string.c_str()); // convert dur from seconds to beats dur = seq->get_time_map()->time_to_beat(base + dur) - seq->get_time_map()->time_to_beat(base); } else if ((p = strchr(durs, toupper(field[1])))) { dur = duration_lookup[p - durs]; last = 2; } else { parse_error(field, 1, msg); return 0; } dur = parse_after_dur(dur, field, last, base); dur = seq->get_time_map()->beat_to_time( seq->get_time_map()->time_to_beat(base) + dur) - base; return dur; } double Alg_reader::parse_after_dur(double dur, string &field, int n, double base) { if ((int) field.length() == n) { return dur; } if (toupper(field[n]) == 'T') { return parse_after_dur(dur * 2/3, field, n + 1, base); } if (field[n] == '.') { return parse_after_dur(dur * 1.5, field, n + 1, base); } if (isdigit(field[n])) { int last = find_real_in(field, n); string a_string = field.substr(n, last - n); double f = atof(a_string.c_str()); return parse_after_dur(dur * f, field, last, base); } if (field[n] == '+') { string a_string = field.substr(n + 1); return dur + parse_dur( a_string, seq->get_time_map()->beat_to_time( seq->get_time_map()->time_to_beat(base) + dur)); } parse_error(field, n, "Unexpected character in duration"); return dur; } struct loud_lookup_struct { const char *str; int val; } loud_lookup[] = { {"FFF", 127}, {"FF", 120}, {"F", 110}, {"MF", 100}, {"MP", 90}, {"P", 80}, {"PP", 70}, {"PPP", 60}, {NULL, 0} }; double Alg_reader::parse_loud(string &field) { const char *msg = "Loudness expected"; if (isdigit(field[1])) { return parse_int(field); } else { string dyn = field.substr(1); transform(dyn.begin(), dyn.end(), dyn.begin(), ::toupper); for (int i = 0; loud_lookup[i].str; i++) { if (streql(loud_lookup[i].str, dyn.c_str())) { return (double) loud_lookup[i].val; } } } parse_error(field, 1, msg); return 100.0; } int key_lookup[] = {21, 23, 12, 14, 16, 17, 19}; // the field can be K or K[A-G] or P[A-G] // (this can be called from parse_pitch() to handle [A-G]) // Notice that the routine ignores the first character: K or P // long Alg_reader::parse_key(string &field) { const char *msg = "Pitch expected"; const char *pitches = "ABCDEFG"; const char *p; if (isdigit(field[1])) { // This routine would not have been called if field = "P" // so it must be "K" so must be an integer. return parse_int(field); } else if ((p = strchr(pitches, toupper(field[1])))) { long key = key_lookup[p - pitches]; key = parse_after_key(key, field, 2); return key; } parse_error(field, 1, msg); return 0; } long Alg_reader::parse_after_key(int key, string &field, int n) { if ((int) field.length() == n) { return key; } char c = toupper(field[n]); if (c == 'S') { return parse_after_key(key + 1, field, n + 1); } if (c == 'F') { return parse_after_key(key - 1, field, n + 1); } if (isdigit(field[n])) { int last = find_int_in(field, n); string octave = field.substr(n, last - n); int oct = atoi(octave.c_str()); return parse_after_key(key + oct * 12, field, last); } parse_error(field, n, "Unexpected character in pitch"); return key; } long Alg_reader::find_int_in(string &field, int n) { while ((int) field.length() > n && isdigit(field[n])) { n = n + 1; } return n; } bool Alg_reader::parse_attribute(string &field, Alg_parameter_ptr param) { int i = 1; while (i < (int) field.length()) { if (field[i] == ':') { string attr = field.substr(1, i - 1); char type_char = field[i - 1]; if (strchr("iarsl", type_char)) { param->set_attr(symbol_table.insert_string(attr.c_str())); parse_val(param, field, i + 1); } else { parse_error(field, 0, "attribute needs to end with typecode: i,a,r,s, or l"); } return !error_flag; } i = i + 1; } return false; } bool Alg_reader::parse_val(Alg_parameter_ptr param, string &s, int i) { int len = (int) s.length(); if (i >= len) { return false; } if (s[i] == '"') { if (!check_type('s', param)) { return false; } // note: (len - i) includes 2 quote characters but no EOS character // so total memory to allocate is (len - i) - 1 char *r = new char[(len - i) - 1]; strncpy(r, s.c_str() + i + 1, (len - i) - 2); r[(len - i) - 2] = 0; // terminate the string param->s = r; } else if (s[i] == '\'') { if (!check_type('a', param)) { return false; } string r = s.substr(i + 1, len - i - 2); param->a = symbol_table.insert_string(r.c_str()); } else if (param->attr_type() == 'l') { if (streql(s.c_str() + i, "true") || streql(s.c_str() + i, "t")) { param->l = true; } else if (streql(s.c_str() + i, "false") || streql(s.c_str() + i, "nil")) { param->l = false; } else return false; } else if (isdigit(s[i]) || s[i] == '-' || s[i] == '.') { int pos = i; bool period = false; if (s[pos] == '-') { pos++; } while (pos < len) { if (isdigit(s[pos])) { ; } else if (!period && s[pos] == '.') { period = true; } else { parse_error(s, pos, "Unexpected char in number"); return false; } pos = pos + 1; } string r = s.substr(i, len - i); if (period) { if (!check_type('r', param)) { return false; } param->r = atof(r.c_str()); } else { if (param->attr_type() == 'r') { param->r = atoi(r.c_str()); } else if (!check_type('i', param)) { return false; } else { param->i = atoi(r.c_str()); } } } else { parse_error(s, i, "invalid value"); return false; } return true; } bool Alg_reader::check_type(char type_char, Alg_parameter_ptr param) { return param->attr_type() == type_char; } //duration_lookup = {"S": 0.5, "I": 0.5, "Q": 1, "H": 2, "W": 4} //key_lookup = {"C": 12, "D": 14, "E": 16, "F": 17, "G": 19, "A": 21, "B": 23} /* def test(): reader = Alg_reader(open("data\\test.gro", "r")) reader.parse() score = reader->seq.notes print "score:", score reader = nil */ lmms-1.1.3/plugins/MidiImport/portsmf/allegroserial.cpp000066400000000000000000000001201247673406200232510ustar00rootroot00000000000000// allegroserial.cpp -- convert track to memory buffer and back to structure lmms-1.1.3/plugins/MidiImport/portsmf/allegrosmfrd.cpp000066400000000000000000000300151247673406200231130ustar00rootroot00000000000000// midifile reader #include "stdlib.h" #include "stdio.h" #include "string.h" #include "debug.h" #include #include #include "allegro.h" #include "algsmfrd_internal.h" #include "mfmidi.h" #include "trace.h" using namespace std; typedef class Alg_pending { public: Alg_note_ptr note; class Alg_pending *next; Alg_pending(Alg_note_ptr n, class Alg_pending *list) { note = n; next = list; } } *Alg_pending_ptr; class Alg_midifile_reader: public Midifile_reader { public: istream *file; Alg_seq_ptr seq; int divisions; Alg_pending_ptr pending; Alg_track_ptr track; int track_number; // the number of the (current) track // chan is actual_channel + channel_offset_per_track * track_num + // channel_offset_per_track * port long channel_offset_per_track; // used to encode track number into channel // default is 0, set this to 0 to merge all tracks to 16 channels long channel_offset_per_port; // used to encode port number into channel // default is 16, set to 0 to ignore port prefix meta events // while reading, this is channel_offset_per_track * track_num int channel_offset; Alg_midifile_reader(istream &f, Alg_seq_ptr new_seq) { file = &f; pending = NULL; seq = new_seq; channel_offset_per_track = 0; channel_offset_per_port = 16; track_number = -1; // no tracks started yet, 1st will be #0 meta_channel = -1; port = 0; } // delete destroys the seq member as well, so set it to NULL if you // copied the pointer elsewhere ~Alg_midifile_reader(); // the following is used to load the Alg_seq from the file: bool parse(); void set_nomerge(bool flag) { Mf_nomerge = flag; } void set_skipinit(bool flag) { Mf_skipinit = flag; } long get_currtime() { return Mf_currtime; } protected: int meta_channel; // the channel for meta events, set by MIDI chan prefix int port; // value from the portprefix meta event double get_time(); void update(int chan, int key, Alg_parameter_ptr param); void *Mf_malloc(size_t size) { return malloc(size); } void Mf_free(void *obj, size_t size) { free(obj); } /* Methods to be called while processing the MIDI file. */ void Mf_starttrack(); void Mf_endtrack(); int Mf_getc(); void Mf_chanprefix(int chan); void Mf_portprefix(int port); void Mf_eot(); void Mf_error(const char *); void Mf_header(int,int,int); void Mf_on(int,int,int); void Mf_off(int,int,int); void Mf_pressure(int,int,int); void Mf_controller(int,int,int); void Mf_pitchbend(int,int,int); void Mf_program(int,int); void Mf_chanpressure(int,int); void binary_msg(int len, char *msg, const char *attr_string); void Mf_sysex(int,char*); void Mf_arbitrary(int,char*); void Mf_metamisc(int,int,char*); void Mf_seqnum(int); void Mf_smpte(int,int,int,int,int); void Mf_timesig(int,int,int,int); void Mf_tempo(int); void Mf_keysig(int,int); void Mf_sqspecific(int,char*); void Mf_text(int,int,char*); }; Alg_midifile_reader::~Alg_midifile_reader() { while (pending) { Alg_pending_ptr to_be_freed = pending; pending = pending->next; delete to_be_freed; } finalize(); // free Mf reader memory } bool Alg_midifile_reader::parse() { channel_offset = 0; seq->convert_to_beats(); midifile(); seq->set_real_dur(seq->get_time_map()->beat_to_time(seq->get_beat_dur())); return midifile_error != 0; } void Alg_midifile_reader::Mf_starttrack() { // printf("starting new track\n"); // create a new track that will share the sequence time map // since time is in beats, the seconds parameter is false track_number++; seq->add_track(track_number); // make sure track exists track = seq->track(track_number); // keep pointer to current track meta_channel = -1; port = 0; } void Alg_midifile_reader::Mf_endtrack() { // note: track is already part of seq, so do not add it here // printf("finished track, length %d number %d\n", track->len, track_num / 100); channel_offset += seq->channel_offset_per_track; track = NULL; double now = get_time(); if (seq->get_beat_dur() < now) seq->set_beat_dur(now); meta_channel = -1; port = 0; } int Alg_midifile_reader::Mf_getc() { return file->get(); } void Alg_midifile_reader::Mf_chanprefix(int chan) { meta_channel = chan; } void Alg_midifile_reader::Mf_portprefix(int p) { port = p; } void Alg_midifile_reader::Mf_eot() { meta_channel = -1; port = 0; } void Alg_midifile_reader::Mf_error(const char *msg) { fprintf(stdout, "Midifile reader error: %s\n", msg); } void Alg_midifile_reader::Mf_header(int format, int ntrks, int division) { if (format > 1) { char msg[80]; sprintf(msg, "file format %d not implemented", format); Mf_error(msg); } divisions = division; } double Alg_midifile_reader::get_time() { double beat = ((double) get_currtime()) / divisions; return beat; } void Alg_midifile_reader::Mf_on(int chan, int key, int vel) { assert(!seq->get_units_are_seconds()); if (vel == 0) { Mf_off(chan, key, vel); return; } Alg_note_ptr note = new Alg_note(); pending = new Alg_pending(note, pending); /* trace("on: %d at %g\n", key, get_time()); */ note->time = get_time(); note->chan = chan + channel_offset + port * channel_offset_per_port; note->dur = 0; note->set_identifier(key); note->pitch = (float) key; note->loud = (float) vel; track->append(note); meta_channel = -1; } void Alg_midifile_reader::Mf_off(int chan, int key, int vel) { double time = get_time(); Alg_pending_ptr *p = &pending; while (*p) { if ((*p)->note->get_identifier() == key && (*p)->note->chan == chan + channel_offset + port * channel_offset_per_port) { (*p)->note->dur = time - (*p)->note->time; // trace("updated %d dur %g\n", (*p)->note->key, (*p)->note->dur); Alg_pending_ptr to_be_freed = *p; *p = to_be_freed->next; delete to_be_freed; } else { p = &((*p)->next); } } meta_channel = -1; } void Alg_midifile_reader::update(int chan, int key, Alg_parameter_ptr param) { Alg_update_ptr update = new Alg_update; update->time = get_time(); update->chan = chan; if (chan != -1) { update->chan = chan + channel_offset + port * channel_offset_per_port; } update->set_identifier(key); update->parameter = *param; // prevent the destructor from destroying the string twice! // the new Update takes the string from param if (param->attr_type() == 's') param->s = NULL; track->append(update); } void Alg_midifile_reader::Mf_pressure(int chan, int key, int val) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("pressurer")); parameter.r = val / 127.0; update(chan, key, ¶meter); meta_channel = -1; } void Alg_midifile_reader::Mf_controller(int chan, int control, int val) { Alg_parameter parameter; char name[32]; sprintf(name, "control%dr", control); parameter.set_attr(symbol_table.insert_string(name)); parameter.r = val / 127.0; update(chan, -1, ¶meter); meta_channel = -1; } void Alg_midifile_reader::Mf_pitchbend(int chan, int c1, int c2) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("bendr")); parameter.r = ((c2 << 7) + c1) / 8192.0 - 1.0; update(chan, -1, ¶meter); meta_channel = -1; } void Alg_midifile_reader::Mf_program(int chan, int program) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("programi")); parameter.i = program; update(chan, -1, ¶meter); meta_channel = -1; } void Alg_midifile_reader::Mf_chanpressure(int chan, int val) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("pressurer")); parameter.r = val / 127.0; update(chan, -1, ¶meter); meta_channel = -1; } void Alg_midifile_reader::binary_msg(int len, char *msg, const char *attr_string) { Alg_parameter parameter; char *hexstr = new char[len * 2 + 1]; for (int i = 0; i < len; i++) { sprintf(hexstr + 2 * i, "%02x", (0xFF & msg[i])); } parameter.s = hexstr; parameter.set_attr(symbol_table.insert_string(attr_string)); update(meta_channel, -1, ¶meter); } void Alg_midifile_reader::Mf_sysex(int len, char *msg) { // sysex messages become updates with attribute sysexs and a hex string binary_msg(len, msg, "sysexs"); } void Alg_midifile_reader::Mf_arbitrary(int len, char *msg) { Mf_error("arbitrary data ignored"); } void Alg_midifile_reader::Mf_metamisc(int type, int len, char *msg) { char text[128]; sprintf(text, "metamsic data, type 0x%x, ignored", type); Mf_error(text); } void Alg_midifile_reader::Mf_seqnum(int n) { Mf_error("seqnum data ignored"); } static const char *fpsstr[4] = {"24", "25", "29.97", "30"}; void Alg_midifile_reader::Mf_smpte(int hours, int mins, int secs, int frames, int subframes) { // string will look like "24fps:01h:27m:07s:19.00f" // 30fps (drop frame) is notated as "29.97fps" char text[32]; int fps = (hours >> 6) & 3; hours &= 0x1F; sprintf(text, "%sfps:%02dh:%02dm:%02ds:%02d.%02df", fpsstr[fps], hours, mins, secs, frames, subframes); Alg_parameter smpteoffset; smpteoffset.s = heapify(text); smpteoffset.set_attr(symbol_table.insert_string("smpteoffsets")); update(meta_channel, -1, &smpteoffset); // Mf_error("SMPTE data ignored"); } void Alg_midifile_reader::Mf_timesig(int i1, int i2, int i3, int i4) { seq->set_time_sig(get_currtime() / divisions, i1, 1 << i2); } void Alg_midifile_reader::Mf_tempo(int tempo) { double beat = get_currtime(); beat = beat / divisions; // convert to quarters // 6000000 us/min / n us/beat => beat / min double bpm = 60000000.0 / tempo; seq->insert_tempo(bpm, beat); } void Alg_midifile_reader::Mf_keysig(int key, int mode) { Alg_parameter key_parm; key_parm.set_attr(symbol_table.insert_string("keysigi")); // use 0 for C major, 1 for G, -1 for F, etc., that is, // the number of sharps, where flats are negative sharps key_parm.i = key; //<<<---- fix this // use -1 to mean "all channels" update(meta_channel, -1, &key_parm); Alg_parameter mode_parm; mode_parm.set_attr(symbol_table.insert_string("modea")); mode_parm.a = (mode == 0 ? symbol_table.insert_string("major") : symbol_table.insert_string("minor")); update(meta_channel, -1, &mode_parm); } void Alg_midifile_reader::Mf_sqspecific(int len, char *msg) { // sequencer specific messages become updates with attribute sqspecifics // and a hex string for the value binary_msg(len, msg, "sqspecifics"); } char *heapify2(int len, char *s) { char *h = new char[len + 1]; memcpy(h, s, len); h[len] = 0; return h; } void Alg_midifile_reader::Mf_text(int type, int len, char *msg) { Alg_parameter text; text.s = heapify2(len, msg); const char *attr = "miscs"; if (type == 1) attr = "texts"; else if (type == 2) attr = "copyrights"; else if (type == 3) attr = (track_number == 0 ? "seqnames" : "tracknames"); else if (type == 4) attr = "instruments"; else if (type == 5) attr = "lyrics"; else if (type == 6) attr = "markers"; else if (type == 7) attr = "cues"; text.set_attr(symbol_table.insert_string(attr)); update(meta_channel, -1, &text); } // parse file into a seq. Alg_error alg_smf_read(istream &file, Alg_seq_ptr new_seq) { assert(new_seq); Alg_midifile_reader ar(file, new_seq); bool err = ar.parse(); ar.seq->set_real_dur(ar.seq->get_time_map()-> beat_to_time(ar.seq->get_beat_dur())); return (err ? alg_error_syntax : alg_no_error); } lmms-1.1.3/plugins/MidiImport/portsmf/allegrosmfwr.cpp000066400000000000000000000511621247673406200231440ustar00rootroot00000000000000// allegrosmfwr.cpp -- Allegro Standard Midi File Write #include #include #include #include #include #include #include using namespace std; #include "allegro.h" // event_queue is a list element that keeps track of pending // things to write to a track, including note-ons, note-offs, // updates, tempo changes, and time signatures // class event_queue{ public: char type;//'n' for note, 'o' for off, 's' for time signature, // 'c' for tempo changes double time; long index; //of the event in mSeq->notes class event_queue *next; event_queue(char t, double when, long x, class event_queue *n) { type = t; time = when; index = x; next = n; } }; class Alg_smf_write { public: Alg_smf_write(Alg_seq_ptr seq); ~Alg_smf_write(); long channels_per_track; // used to encode track number into chan field // chan is actual_channel + channels_per_track * track_number // default is 100, set this to 0 to merge all tracks to 16 channels void write(ofstream &file /* , midiFileFormat = 1 */); private: long previous_divs; // time in ticks of most recently written event void write_track(int i); void write_tempo(int divs, int tempo); void write_tempo_change(int i); void write_time_signature(int i); void write_note(Alg_note_ptr note, bool on); void write_update(Alg_update_ptr update); void write_text(Alg_update_ptr update, char type); void write_binary(int type_byte, char *msg); void write_midi_channel_prefix(Alg_update_ptr update); void write_smpteoffset(Alg_update_ptr update, char *s); void write_data(int data); int to_midi_channel(int channel); int to_track(int channel); ostream *out_file; Alg_seq_ptr seq; int num_tracks; // number of tracks not counting tempo track int division; // divisions per quarter note, default = 120 int initial_tempo; int timesig_num; // numerator of time signature int timesig_den; // denominator of time signature double timesig_when; // time of time signature int keysig; // number of sharps (+) or flats (-), -99 for undefined char keysig_mode; // 'M' or 'm' for major/minor double keysig_when; // time of key signature void write_delta(double event_time); void write_varinum(int num); void write_16bit(int num); void write_24bit(int num); void write_32bit(int num); }; #define ROUND(x) (int) ((x)+0.5) Alg_smf_write::Alg_smf_write(Alg_seq_ptr a_seq) { out_file = NULL; // at 100bpm (a nominal tempo value), we would like a division // to represent 1ms of time. So // d ticks/beat * 100 beats/min = 60,000 ms/min * 1 tick/ms // solving for d, d = 600 division = 600; // divisions per quarter note timesig_num = timesig_den = 0; // initially undefined keysig = -99; keysig_mode = 0; initial_tempo = 500000; seq = a_seq; previous_divs = 0; // used to compute deltas for midifile } Alg_smf_write::~Alg_smf_write() { } // sorting is quite subtle due to rounding // For example, suppose times from a MIDI file are exact, but in // decimal round to TW0.4167 Q0.3333. Since the time in whole notes // rounded up, this note will start late. Even though the duration // rounded down, the amount is 1/4 as much because units are quarter // notes. Therefore, the total roundup is 0.0001 beats. This is // enough to cause the note to sort later in the queue, perhaps // coming after a new note-on on the same pitch, and resulting in // a turning on-off, on-off into on, on, off, off if data is moved // to Allegro (ascii) format with rounding and then back to SMF. // // The solution here is to consider things that round to the same // tick to be simultaneous. Then, be sure to deal with note-offs // before note-ons. We're going to do that by using event_queue // times that are rounded to the nearest tick time. Except note-offs // are going to go in with times that are 1/4 tick earlier so they // get scheduled first, but still end up on the same tick. // event_queue* push(event_queue *queue, event_queue *event) { // printf("push: %.6g, %c, %d\n", event->time, event->type, event->index); if (queue == NULL) { event->next = NULL; return event; } event_queue *marker1 = NULL; event_queue *marker2 = queue; while (marker2 != NULL && marker2->time <= event->time) { marker1 = marker2; marker2 = marker2->next; } event->next = marker2; if (marker1 != NULL) { marker1->next=event; return queue; } else return event; } void print_queue(event_queue *q) { printf("Printing queue. . .\n"); event_queue *q2=q; while (q2) { printf("%c at %f ;", q2->type, q2->time); q2 = q2->next; } printf("\nDone printing.\n"); } void Alg_smf_write::write_note(Alg_note_ptr note, bool on) { double event_time = (on ? note->time : note->time + note->dur); write_delta(event_time); //printf("deltaDivisions: %d, beats elapsed: %g, on? %c\n", deltaDivisions, note->time, on); char chan = (note->chan & 15); int pitch = int(note->pitch + 0.5); if (pitch < 0) { pitch = pitch % 12; } else if (pitch > 127) { pitch = (pitch % 12) + 120; // put pitch in 10th octave if (pitch > 127) pitch -= 12; // or 9th octave } out_file->put(0x90 + chan); out_file->put(pitch); if (on) { int vel = (int) note->loud; if (vel <= 0) vel = 1; write_data(vel); } else out_file->put(0); // note-off indicated by velocty zero } void Alg_smf_write::write_midi_channel_prefix(Alg_update_ptr update) { if (update->chan >= 0) { // write MIDI Channel Prefix write_delta(update->time); out_file->put(0xFF); // Meta Event out_file->put(0x20); // Type code for MIDI Channel Prefix out_file->put(1); // length out_file->put(to_midi_channel(update->chan)); // one thing odd about the Std MIDI File spec is that once // you turn on MIDI Channel Prefix, there seems to be no // way to cancel it unless a non-Meta event shows up. We // don't do any analysis to avoid assigning channels to // meta events. } } void Alg_smf_write::write_text(Alg_update_ptr update, char type) { write_midi_channel_prefix(update); write_delta(update->time); out_file->put(0xFF); out_file->put(type); out_file->put((char) strlen(update->parameter.s)); *out_file << update->parameter.s; } void Alg_smf_write::write_smpteoffset(Alg_update_ptr update, char *s) { write_midi_channel_prefix(update); write_delta(update->time); out_file->put(0xFF); // meta event out_file->put(0x54); // smpte offset type code out_file->put(5); // length for (int i = 0; i < 5; i++) *out_file << s[i]; } // write_data - limit data to the range of [0...127] and write it void Alg_smf_write::write_data(int data) { if (data < 0) data = 0; else if (data > 0x7F) data = 0x7F; out_file->put(data); } int Alg_smf_write::to_midi_channel(int channel) { // allegro track number is stored as multiple of 100 // also mask off all but 4 channel bits just in case if (channels_per_track > 0) channel %= channels_per_track; return channel & 0xF; } int Alg_smf_write::to_track(int channel) { if (channel == -1) return 0; return channel / channels_per_track; } static char hex_to_nibble(char c) { if (isalpha(c)) { return 10 + (toupper(c) - 'A'); } else { return c - '0'; } } static char hex_to_char(char *s) { return (hex_to_nibble(s[0]) << 4) + hex_to_nibble(s[1]); } void Alg_smf_write::write_binary(int type_byte, char *msg) { int len = strlen(msg) / 2; out_file->put(type_byte); write_varinum(len); for (int i = 0; i < len; i++) { out_file->put(hex_to_char(msg)); msg += 2; } } void Alg_smf_write::write_update(Alg_update_ptr update) { char *name = update->parameter.attr_name(); /****Non-Meta Events****/ if (!strcmp(name, "pressurer")) { write_delta(update->time); if (update->get_identifier() < 0) { // channel pressure message out_file->put(0xD0 + to_midi_channel(update->chan)); write_data((int)(update->parameter.r * 127)); } else { // just 1 key -- poly pressure out_file->put(0xA0 + to_midi_channel(update->chan)); write_data(update->get_identifier()); write_data((int)(update->parameter.r * 127)); } } else if (!strcmp(name, "programi")) { write_delta(update->time); out_file->put(0xC0 + to_midi_channel(update->chan)); write_data(update->parameter.i); } else if (!strcmp(name, "bendr")) { int temp = ROUND(0x2000 * (update->parameter.r + 1)); if (temp > 0x3fff) temp = 0x3fff; // 14 bits maximum if (temp < 0) temp = 0; int c1 = temp & 0x7F; // low 7 bits int c2 = temp >> 7; // high 7 bits write_delta(update->time); out_file->put(0xE0 + to_midi_channel(update->chan)); write_data(c1); write_data(c2); } else if (!strncmp(name, "control", 7) && update->parameter.attr_type() == 'r') { int ctrlnum = atoi(name + 7); int val = ROUND(update->parameter.r * 127); write_delta(update->time); out_file->put(0xB0 + to_midi_channel(update->chan)); write_data(ctrlnum); write_data(val); } else if (!strcmp(name, "sysexs") && update->parameter.attr_type() == 's') { char *s = update->parameter.s; if (s[0] && s[1] && toupper(s[0]) == 'F' && s[1] == '0') { s += 2; // skip the initial "F0" byte in message: it is implied } write_delta(update->time); write_binary(0xF0, s); } else if (!strcmp(name, "sqspecifics") && update->parameter.attr_type() == 's') { char *s = update->parameter.s; write_delta(update->time); out_file->put(0xFF); write_binary(0x7F, s); /****Text Events****/ } else if (!strcmp(name, "texts")) { write_text(update, 0x01); } else if (!strcmp(name, "copyrights")) { write_text(update, 0x02); } else if (!strcmp(name, "seqnames") || !strcmp(name, "tracknames")) { write_text(update, 0x03); } else if (!strcmp(name, "instruments")) { write_text(update, 0x04); } else if (!strcmp(name, "lyrics")) { write_text(update, 0x05); } else if (!strcmp(name, "markers")) { write_text(update, 0x06); } else if (!strcmp(name, "cues")) { write_text(update, 0x07); } else if (!strcmp(name, "miscs")) { write_text(update, 0x08); /****Other Events****/ } else if (!strcmp(name, "smpteoffsets")) { #define decimal(p) (((p)[0] - '0') * 10 + ((p)[1] - '0')) // smpteoffset is specified as "24fps:00h:10m:00s:11.00f" // the following simple parser does not reject all badly // formatted strings, but it should parse good strings ok char *s = update->parameter.s; int len = strlen(s); char smpteoffset[5]; if (len < 24) return; // not long enough, must be bad format int fps = 0; if (s[0] == '2') { if (s[1] == '4') fps = 0; else if (s[1] == '5') fps = 1; else if (s[1] == '9') { fps = 2; if (len != 27) return; // not right length s += 3; // cancel effect of longer string } } else fps = 3; s += 6; int hours = decimal(s); s += 4; int mins = decimal(s); s += 4; int secs = decimal(s); s += 4; int frames = decimal(s); s += 3; int subframes = decimal(s); smpteoffset[0] = (fps << 6) + hours; smpteoffset[1] = mins; smpteoffset[2] = secs; smpteoffset[3] = frames; smpteoffset[4] = subframes; write_smpteoffset(update, smpteoffset); // key signature is special because it takes two events in the Alg_seq // structure to make one midi file event. When we encounter one or // the other event, we'll just record it in the Alg_smf_write object. // After both events are seen, we write the data. (See below.) } else if (!strcmp(name, "keysigi")) { keysig = update->parameter.i; keysig_when = update->time; } else if (!strcmp(name, "modea")) { if (!strcmp(alg_attr_name(update->parameter.a), "major")) keysig_mode = 'M'; else keysig_mode = 'm'; keysig_when = update->time; } if (keysig != -99 && keysig_mode) { // write when both are defined write_delta(keysig_when); out_file->put(0xFF); out_file->put(0x59); out_file->put(2); // mask off high bits so that this value appears to be positive // i.e. -1 -> 0xFF (otherwise, write_data will clip -1 to 0) out_file->put(keysig & 0xFF); out_file->put(keysig_mode == 'm'); keysig = -99; keysig_mode = false; } //printf("Update: %s, key: %g\n", update->parameter.attr_name(), update->key); } // see notes on event_queue::push, TICK_TIME converts from beat to // the number of the nearest tick. The second parameter is an offset in // quarter ticks. By scheduling with -1, note-offs should get dispatched // first. Note that TICK_TIME only determines the order of events, so // it is ok to change units from beats to ticks, saving a divide. #define TICK_TIME(t, o) (ROUND((t) * division) + 0.25 * (o)) void Alg_smf_write::write_track(int i) { int j = 0; // note index Alg_events ¬es = seq->track_list[i]; event_queue *pending = NULL; if (notes.length() > 0) { pending = new event_queue('n', TICK_TIME(notes[j]->time, 0), 0, NULL); } if (i == 0) { // track 0 may have tempo and timesig info if (seq->get_time_map()->last_tempo_flag || seq->get_time_map()->beats.len > 0) { pending = push(pending, new event_queue('c', 0.0, 0, NULL)); } if (seq->time_sig.length() > 0) { pending = push(pending, new event_queue('s', TICK_TIME(seq->time_sig[0].beat, 0), 0, NULL)); } } while (pending) { event_queue *current = pending; pending = pending->next; if (current->type == 'n') { Alg_note_ptr n = (Alg_note_ptr) notes[current->index]; if (n->is_note()) { write_note(n, true); pending = push(pending, new event_queue('o', TICK_TIME(n->time + n->dur, -1), current->index, NULL)); } else if (n->is_update()) { Alg_update_ptr u = (Alg_update_ptr) n; write_update(u); } int next = current->index + 1; if (next < notes.length()) { current->time = TICK_TIME(notes[next]->time, 0); current->index = next; pending = push(pending, current); } } else if (current->type == 'o') { //note-off Alg_note_ptr n = (Alg_note_ptr) notes[current->index]; write_note(n, false); delete current; } else if (current->type == 'c') { // tempo change write_tempo_change(current->index); current->index++; // -R if (current->index < seq->get_time_map()->beats.len) { current->time = TICK_TIME(seq->get_time_map()-> beats[current->index].beat, 0); pending = push(pending, current); } else { delete current; } } else if (current->type == 's') { // time sig write_time_signature(current->index); current->index++; if (current->index < seq->time_sig.length()) { current->time = TICK_TIME(seq->time_sig[current->index].beat, 0); pending = push(pending, current); } else { delete current; } } } } void Alg_smf_write::write_tempo(int divs, int tempo) { // printf("Inserting tempo %f after %f clocks.\n", tempo, delta); write_varinum(divs - previous_divs); previous_divs = divs; out_file->put(0xFF); out_file->put(0x51); out_file->put(0x03); write_24bit((int)tempo); } void Alg_smf_write::write_tempo_change(int i) // i is index of tempo map { // extract tempo map Alg_beats &b = seq->get_time_map()->beats; double tempo; long divs; if (i < seq->get_time_map()->beats.len - 1) { tempo = 1000000 * ((b[i+1].time - b[i].time) / (b[i+1].beat - b[i].beat)); divs = ROUND(b[i].beat * division); write_tempo(divs, ROUND(tempo)); } else if (seq->get_time_map()->last_tempo_flag) { // write the final tempo divs = ROUND(division * b[i].beat); tempo = (1000000.0 / seq->get_time_map()->last_tempo); write_tempo(divs, ROUND(tempo)); } } void Alg_smf_write::write_time_signature(int i) { Alg_time_sigs &ts = seq->time_sig; // write the time signature long divs = ROUND(ts[i].beat * division); write_varinum(divs - previous_divs); out_file->put(0xFF); out_file->put(0x58); // time signature out_file->put(4); // length of message out_file->put(ROUND(ts[i].num)); int den = ROUND(ts[i].den); int den_byte = 0; while (den > 1) { // compute the log2 of denominator den_byte++; den >>= 1; } out_file->put(den_byte); out_file->put(24); // clocks per quarter out_file->put(8); // 32nd notes per 24 clocks } void Alg_smf_write::write(ofstream &file) { int track_len_offset; int track_end_offset; int track_len; out_file = &file; // Header file << "MThd"; write_32bit(6); // chunk length write_16bit(1); // format 1 MIDI file write_16bit(seq->tracks()); // number of tracks write_16bit(division); // divisions per quarter note // write_ all tracks seq->convert_to_beats(); int i; for (i = 0; i < seq->tracks(); i++) { previous_divs = 0; *out_file << "MTrk"; track_len_offset = out_file->tellp(); write_32bit(0); // track len placeholder write_track(i); // End of track event write_varinum(0); // delta time out_file->put(0xFF); out_file->put(0x2F); out_file->put(0x00); // Go back and write in the length of the track track_end_offset = out_file->tellp(); track_len = track_end_offset - track_len_offset - 4; out_file->seekp(track_len_offset); write_32bit(track_len); out_file->seekp(track_end_offset); } } void Alg_smf_write::write_16bit(int num) { out_file->put((num & 0xFF00) >> 8); out_file->put(num & 0xFF); } void Alg_smf_write::write_24bit(int num) { out_file->put((num & 0xFF0000) >> 16); out_file->put((num & 0xFF00) >> 8); out_file->put((num & 0xFF)); } void Alg_smf_write::write_32bit(int num) { out_file->put((num & 0xFF000000) >> 24); out_file->put((num & 0xFF0000) >> 16); out_file->put((num & 0xFF00) >> 8); out_file->put((num & 0xFF)); } void Alg_smf_write::write_delta(double event_time) { // divisions is ideal absolute time in divisions long divisions = ROUND(division * event_time); long delta_divs = divisions - previous_divs; write_varinum(delta_divs); previous_divs = divisions; } void Alg_smf_write::write_varinum(int value) { if(value<0) value=0;//this line should not have to be here! int buffer; buffer = value & 0x7f; while ((value >>= 7) > 0) { buffer <<= 8; buffer |= 0x80; buffer += (value & 0x7f); } for(;;) { out_file->put(buffer); if (buffer & 0x80) buffer >>= 8; else break; } } void Alg_seq::smf_write(ofstream &file) { Alg_smf_write writer(this); writer.write(file); } bool Alg_seq::smf_write(const char *filename) { ofstream outf(filename, ios::binary | ios::out); if (outf.fail()) return false; smf_write(outf); outf.close(); return true; } lmms-1.1.3/plugins/MidiImport/portsmf/allegrowr.cpp000066400000000000000000000141611247673406200224340ustar00rootroot00000000000000// allegrowr.cpp -- write sequence to an Allegro file (text) #include "debug.h" #include "stdlib.h" #include #include #include #include #include #include "memory.h" using namespace std; #include "strparse.h" #include "allegro.h" // Note about precision: %g prints 6 significant digits. For 1ms precision, // the maximum magnitude is 999.999, i.e. 1000s < 17minutes. For anything // over 1000s, time in seconds will be printed with 10ms precision, which // is not good. Therefore, times and durations are printed as %.4d, which // gives 100us precision. // The following define allows you to change this decision: /* #define TIMFMT "%.4d" */ #define TIMPREC 4 #define TIMFMT fixed << setprecision(TIMPREC) #define GFMT resetiosflags(ios::floatfield) << setprecision(6) void parameter_print(ostream &file, Alg_parameter_ptr p) { file << " -" << p->attr_name() << ":"; switch (p->attr_type()) { case 'a': file << "'" << alg_attr_name(p->a) << "'"; break; case 'i': file << p->i; break; case 'l': file << (p->l ? "true" : "false"); break; case 'r': file << p->r; break; case 's': { string str; string_escape(str, p->s, "\""); file << str; break; } } } Alg_event_ptr Alg_seq::write_track_name(ostream &file, int n, Alg_events &events) // write #track // if we write the name on the "#track" line, then we do *not* want // to write again as an update: "-seqnames:"Jordu", so if we do // find a name and write it, return a pointer to it so the track // writer knows what update (if any) to skip { Alg_event_ptr e = NULL; file << "#track " << n; const char *attr = symbol_table.insert_string( n == 0 ? "seqnames" : "tracknames"); // search for name in events with timestamp of 0 for (int i = 0; i < events.length(); i++) { e = events[i]; if (e->time > 0) break; if (e->is_update()) { Alg_update_ptr u = (Alg_update_ptr) e; if (u->parameter.attr == attr) { file << " " << u->parameter.s; break; } } } file << endl; return e; } void Alg_seq::write(ostream &file, bool in_secs) { int i, j; if (in_secs) convert_to_seconds(); else convert_to_beats(); Alg_event_ptr update_to_skip = write_track_name(file, 0, track_list[0]); Alg_beats &beats = time_map->beats; for (i = 0; i < beats.len - 1; i++) { Alg_beat_ptr b = &(beats[i]); if (in_secs) { file << "T" << TIMFMT << b->time; } else { file << "TW" << TIMFMT << b->beat / 4; } double tempo = (beats[i + 1].beat - b->beat) / (beats[i + 1].time - beats[i].time); file << " -tempor:" << GFMT << tempo * 60 << "\n"; } if (time_map->last_tempo_flag) { // we have final tempo: Alg_beat_ptr b = &(beats[beats.len - 1]); if (in_secs) { file << "T" << TIMFMT << b->time; } else { file << "TW" << TIMFMT << b->beat / 4; } file << " -tempor:" << GFMT << time_map->last_tempo * 60.0 << "\n"; } // write the time signatures for (i = 0; i < time_sig.length(); i++) { Alg_time_sig &ts = time_sig[i]; double time = ts.beat; if (in_secs) { file << "T" << TIMFMT << time << " V- -timesig_numr:" << GFMT << ts.num << "\n"; file << "T" << TIMFMT << time << " V- -timesig_denr:" << GFMT << ts.den << "\n"; } else { double wholes = ts.beat / 4; file << "TW" << TIMFMT << wholes << " V- -timesig_numr:" << GFMT << ts.num << "\n"; file << "TW" << TIMFMT << wholes << " V- -timesig_denr:" << GFMT << ts.den << "\n"; } } for (j = 0; j < track_list.length(); j++) { Alg_events ¬es = track_list[j]; if (j != 0) update_to_skip = write_track_name(file, j, notes); // now write the notes at beat positions for (i = 0; i < notes.length(); i++) { Alg_event_ptr e = notes[i]; // if we already wrote this event as a track or sequence name, // do not write it again if (e == update_to_skip) continue; double start = e->time; if (in_secs) { file << "T" << TIMFMT << start; } else { file << "TW" << TIMFMT << start / 4; } // write the channel as Vn or V- if (e->chan == -1) file << " V-"; else file << " V" << e->chan; // write the note or update data if (e->is_note()) { Alg_note_ptr n = (Alg_note_ptr) e; double dur = n->dur; file << " K" << n->get_identifier() << " P" << GFMT << n->pitch; if (in_secs) { file << " U" << TIMFMT << dur; } else { file << " Q" << TIMFMT << dur; } file << " L" << GFMT << n->loud; Alg_parameters_ptr p = n->parameters; while (p) { parameter_print(file, &(p->parm)); p = p->next; } } else { // an update assert(e->is_update()); Alg_update_ptr u = (Alg_update_ptr) e; if (u->get_identifier() != -1) { file << " K" << u->get_identifier(); } parameter_print(file, &(u->parameter)); } file << "\n"; } } } bool Alg_seq::write(const char *filename) { ofstream file(filename); if (file.fail()) return false; write(file, units_are_seconds); file.close(); return true; } lmms-1.1.3/plugins/MidiImport/portsmf/license.txt000066400000000000000000000034731247673406200221210ustar00rootroot00000000000000/* * Portsmf: Portable Standard MIDI File Library * * license.txt -- a copy of the Portsmf copyright notice and license information * * Latest version available at: http://sourceforge.net/projects/portmedia * * Copyright (c) 1999-2000 Ross Bencina and Phil Burk * Copyright (c) 2001-2006 Roger B. Dannenberg * * 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 Portsmf license; however, * the PortMusic 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. */ lmms-1.1.3/plugins/MidiImport/portsmf/mfmidi.cpp000066400000000000000000000275161247673406200217130ustar00rootroot00000000000000/* * Read a Standard MIDI File. Externally-assigned function pointers are * called upon recognizing things in the file. See midifile(3). */ /***************************************************************************** * Change Log * Date | who : Change *-----------+----------------------------------------------------------------- * 2-Mar-92 | GWL : created changelog; MIDIFILE_ERROR to satisfy compiler *****************************************************************************/ #include "stdio.h" #include "mfmidi.h" #include "string.h" #define MIDIFILE_ERROR -1 /* public stuff */ extern int abort_flag; void Midifile_reader::midifile() { int ntrks; midifile_error = 0; ntrks = readheader(); if (midifile_error) return; if (ntrks <= 0) { mferror("No tracks!"); /* no need to return since midifile_error is set */ } while (ntrks-- > 0 && !midifile_error) readtrack(); } int Midifile_reader::readmt(const char *s, int skip) /* read through the "MThd" or "MTrk" header string */ /* if skip == 1, we attempt to skip initial garbage. */ { int nread = 0; char b[4]; char buff[32]; int c; const char *errmsg = "expecting "; retry: while ( nread<4 ) { c = Mf_getc(); if ( c == EOF ) { errmsg = "EOF while expecting "; goto err; } b[nread++] = c; } /* See if we found the 4 characters we're looking for */ if ( s[0]==b[0] && s[1]==b[1] && s[2]==b[2] && s[3]==b[3] ) return(0); if ( skip ) { /* If we are supposed to skip initial garbage, */ /* try again with the next character. */ b[0]=b[1]; b[1]=b[2]; b[2]=b[3]; nread = 3; goto retry; } err: (void) strcpy(buff,errmsg); (void) strcat(buff,s); mferror(buff); return(0); } int Midifile_reader::egetc() /* read a single character and abort on EOF */ { int c = Mf_getc(); if ( c == EOF ) { mferror("premature EOF"); return EOF; } Mf_toberead--; return(c); } int Midifile_reader::readheader() /* read a header chunk */ { int format, ntrks, division; if ( readmt("MThd",Mf_skipinit) == EOF ) return(0); Mf_toberead = read32bit(); if (midifile_error) return MIDIFILE_ERROR; format = read16bit(); if (midifile_error) return MIDIFILE_ERROR; ntrks = read16bit(); if (midifile_error) return MIDIFILE_ERROR; division = read16bit(); if (midifile_error) return MIDIFILE_ERROR; Mf_header(format,ntrks,division); /* flush any extra stuff, in case the length of header is not 6 */ while ( Mf_toberead > 0 && !midifile_error) (void) egetc(); return(ntrks); } void Midifile_reader::readtrack() /* read a track chunk */ { /* This array is indexed by the high half of a status byte. It's */ /* value is either the number of bytes needed (1 or 2) for a channel */ /* message, or 0 (meaning it's not a channel message). */ static int chantype[] = { 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 through 0x70 */ 2, 2, 2, 2, 1, 1, 2, 0 /* 0x80 through 0xf0 */ }; long lookfor, lng; int c, c1, type; int sysexcontinue = 0; /* 1 if last message was an unfinished sysex */ int running = 0; /* 1 when running status used */ int status = 0; /* (possibly running) status byte */ int needed; if ( readmt("MTrk",0) == EOF ) return; Mf_toberead = read32bit(); if (midifile_error) return; Mf_currtime = 0L; Mf_starttrack(); while ( Mf_toberead > 0 ) { Mf_currtime += readvarinum(); /* delta time */ if (midifile_error) return; c = egetc(); if (midifile_error) return; if ( sysexcontinue && c != 0xf7 ) { mferror("didn't find expected continuation of a sysex"); return; } if ( (c & 0x80) == 0 ) { /* running status? */ if ( status == 0 ) { mferror("unexpected running status"); return; } running = 1; } else { status = c; running = 0; } needed = chantype[ (status>>4) & 0xf ]; if ( needed ) { /* ie. is it a channel message? */ if ( running ) c1 = c; else { c1 = egetc(); if (midifile_error) return; } chanmessage( status, c1, (needed>1) ? egetc() : 0 ); if (midifile_error) return; continue;; } switch ( c ) { case 0xff: /* meta event */ type = egetc(); if (midifile_error) return; /* watch out - Don't combine the next 2 statements */ lng = readvarinum(); if (midifile_error) return; lookfor = Mf_toberead - lng; msginit(); while ( Mf_toberead > lookfor ) { char c = egetc(); if (midifile_error) return; msgadd(c); } metaevent(type); break; case 0xf0: /* start of system exclusive */ /* watch out - Don't combine the next 2 statements */ lng = readvarinum(); if (midifile_error) return; lookfor = Mf_toberead - lng; msginit(); msgadd(0xf0); while ( Mf_toberead > lookfor ) { c = egetc(); if (midifile_error) return; msgadd(c); } if ( c==0xf7 || Mf_nomerge==0 ) sysex(); else sysexcontinue = 1; /* merge into next msg */ break; case 0xf7: /* sysex continuation or arbitrary stuff */ /* watch out - Don't combine the next 2 statements */ lng = readvarinum(); if (midifile_error) return; lookfor = Mf_toberead - lng; if ( ! sysexcontinue ) msginit(); while ( Mf_toberead > lookfor ) { c = egetc(); if (midifile_error) return; msgadd(c); } if ( ! sysexcontinue ) { Mf_arbitrary(msgleng(), msg()); } else if ( c == 0xf7 ) { sysex(); sysexcontinue = 0; } break; default: badbyte(c); break; } } Mf_endtrack(); return; } void Midifile_reader::badbyte(int c) { char buff[32]; (void) sprintf(buff,"unexpected byte: 0x%02x",c); mferror(buff); } void Midifile_reader::metaevent(int type) { int leng = msgleng(); char *m = msg(); switch ( type ) { case 0x00: Mf_seqnum(to16bit(m[0],m[1])); break; case 0x01: /* Text event */ case 0x02: /* Copyright notice */ case 0x03: /* Sequence/Track name */ case 0x04: /* Instrument name */ case 0x05: /* Lyric */ case 0x06: /* Marker */ case 0x07: /* Cue point */ case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: /* These are all text events */ Mf_text(type,leng,m); break; case 0x20: Mf_chanprefix(m[0]); break; case 0x21: Mf_portprefix(m[0]); break; case 0x2f: /* End of Track */ Mf_eot(); break; case 0x51: /* Set tempo */ Mf_tempo(to32bit(0,m[0],m[1],m[2])); break; case 0x54: Mf_smpte(m[0],m[1],m[2],m[3],m[4]); break; case 0x58: Mf_timesig(m[0],m[1],m[2],m[3]); break; case 0x59: Mf_keysig(m[0],m[1]); break; case 0x7f: Mf_sqspecific(leng,m); break; default: Mf_metamisc(type,leng,m); } } void Midifile_reader::sysex() { Mf_sysex(msgleng(), msg()); } void Midifile_reader::chanmessage(int status, int c1, int c2) { int chan = status & 0xf; switch ( status & 0xf0 ) { case NOTEOFF: Mf_off(chan,c1,c2); break; case NOTEON: Mf_on(chan,c1,c2); break; case PRESSURE: Mf_pressure(chan,c1,c2); break; case CONTROLLER: Mf_controller(chan,c1,c2); break; case PITCHBEND: Mf_pitchbend(chan,c1,c2); break; case PROGRAM: Mf_program(chan,c1); break; case CHANPRESSURE: Mf_chanpressure(chan,c1); break; } } /* readvarinum - read a varying-length number, and return the */ /* number of characters it took. */ long Midifile_reader::readvarinum() { long value; int c; c = egetc(); if (midifile_error) return 0; value = (long) c; if ( c & 0x80 ) { value &= 0x7f; do { c = egetc(); if (midifile_error) return 0; value = (value << 7) + (c & 0x7f); } while (c & 0x80); } return (value); } long Midifile_reader::to32bit(int c1, int c2, int c3, int c4) { long value = 0L; value = (c1 & 0xff); value = (value<<8) + (c2 & 0xff); value = (value<<8) + (c3 & 0xff); value = (value<<8) + (c4 & 0xff); return (value); } int Midifile_reader::to16bit(int c1, int c2) { return ((c1 & 0xff ) << 8) + (c2 & 0xff); } long Midifile_reader::read32bit() { int c1, c2, c3, c4; c1 = egetc(); if (midifile_error) return 0; c2 = egetc(); if (midifile_error) return 0; c3 = egetc(); if (midifile_error) return 0; c4 = egetc(); if (midifile_error) return 0; return to32bit(c1,c2,c3,c4); } int Midifile_reader::read16bit() { int c1, c2; c1 = egetc(); if (midifile_error) return 0; c2 = egetc(); if (midifile_error) return 0; return to16bit(c1,c2); } void Midifile_reader::mferror(const char *s) { Mf_error(s); midifile_error = 1; } /* The code below allows collection of a system exclusive message of */ /* arbitrary length. The Msgbuff is expanded as necessary. The only */ /* visible data/routines are msginit(), msgadd(), msg(), msgleng(). */ #define MSGINCREMENT 128 Midifile_reader::Midifile_reader() { Mf_nomerge = 0; Mf_currtime = 0L; Mf_skipinit = 0; Mf_toberead = 0; Msgbuff = 0; /* message buffer */ Msgsize = 0; /* Size of currently allocated Msg */ Msgindex = 0; /* index of next available location in Msg */ } void Midifile_reader::finalize() { if (Msgbuff) Mf_free(Msgbuff, Msgsize); Msgbuff = NULL; } void Midifile_reader::msginit() { Msgindex = 0; } char *Midifile_reader::msg() { return(Msgbuff); } int Midifile_reader::msgleng() { return(Msgindex); } void Midifile_reader::msgadd(int c) { /* If necessary, allocate larger message buffer. */ if ( Msgindex >= Msgsize ) msgenlarge(); Msgbuff[Msgindex++] = c; } void Midifile_reader::msgenlarge() { char *newmess; char *oldmess = Msgbuff; int oldleng = Msgsize; Msgsize += MSGINCREMENT; newmess = (char *) Mf_malloc((sizeof(char) * Msgsize) ); /* copy old message into larger new one */ if ( oldmess != 0 ) { register char *p = newmess; register char *q = oldmess; register char *endq = &oldmess[oldleng]; for ( ; q!=endq ; p++,q++ ) *p = *q; Mf_free(oldmess, oldleng); } Msgbuff = newmess; } lmms-1.1.3/plugins/MidiImport/portsmf/mfmidi.h000066400000000000000000000062741247673406200213560ustar00rootroot00000000000000#define NOTEOFF 0x80 #define NOTEON 0x90 #define PRESSURE 0xa0 #define CONTROLLER 0xb0 #define PITCHBEND 0xe0 #define PROGRAM 0xc0 #define CHANPRESSURE 0xd0 /* These are the strings used in keynote to identify Standard MIDI File */ /* meta text messages. */ #define METATEXT "Text Event" #define METACOPYRIGHT "Copyright Notice" #define METASEQUENCE "Sequence/Track Name" #define METAINSTRUMENT "Instrument Name" #define METALYRIC "Lyric" #define METAMARKER "Marker" #define METACUE "Cue Point" #define METAUNRECOGNIZED "Unrecognized" class Midifile_reader { public: void midifile(); int Mf_nomerge; /* 1 => continue'ed system exclusives are */ /* not collapsed. */ long Mf_currtime; /* current time in delta-time units */ int Mf_skipinit; /* 1 if initial garbage should be skipped */ Midifile_reader(); // call finalize() when done or you may leak memory. void finalize(); /* clean up before deletion */ // Note: rather than finalize, we should have ~Midifile_reader(), // but at least VC++ complains that there is no Mf_free(), even // though Mf_free is declared as virtual and this is an abstract // class. I don't understand this, so finalize() is a workaround. -RBD protected: int midifile_error; virtual void *Mf_malloc(size_t size) = 0; /* malloc() */ virtual void Mf_free(void *obj, size_t size) = 0; /* free() */ /* Methods to be called while processing the MIDI file. */ virtual void Mf_starttrack() = 0; virtual void Mf_endtrack() = 0; virtual int Mf_getc() = 0; virtual void Mf_chanprefix(int) = 0; virtual void Mf_portprefix(int) = 0; virtual void Mf_eot() = 0; virtual void Mf_error(const char *) = 0; virtual void Mf_header(int,int,int) = 0; virtual void Mf_on(int,int,int) = 0; virtual void Mf_off(int,int,int) = 0; virtual void Mf_pressure(int,int,int) = 0; virtual void Mf_controller(int,int,int) = 0; virtual void Mf_pitchbend(int,int,int) = 0; virtual void Mf_program(int,int) = 0; virtual void Mf_chanpressure(int,int) = 0; virtual void Mf_sysex(int,char*) = 0; virtual void Mf_arbitrary(int,char*) = 0; virtual void Mf_metamisc(int,int,char*) = 0; virtual void Mf_seqnum(int) = 0; virtual void Mf_smpte(int,int,int,int,int) = 0; virtual void Mf_timesig(int,int,int,int) = 0; virtual void Mf_tempo(int) = 0; virtual void Mf_keysig(int,int) = 0; virtual void Mf_sqspecific(int,char*) = 0; virtual void Mf_text(int,int,char*) = 0; private: long Mf_toberead; long readvarinum(); long read32bit(); int read16bit(); void msgenlarge(); char *msg(); int readheader(); void readtrack(); void sysex(); void msginit(); int egetc(); int msgleng(); int readmt(const char *, int); long to32bit(int,int,int,int); int to16bit(int,int); void mferror(const char *); void badbyte(int); void metaevent(int); void msgadd(int); void chanmessage(int,int,int); char *Msgbuff; long Msgsize; long Msgindex; }; lmms-1.1.3/plugins/MidiImport/portsmf/strparse.cpp000066400000000000000000000040471247673406200223030ustar00rootroot00000000000000#include #include // #include -- for debugging (cout) #include "ctype.h" using namespace std; #include "strparse.h" void String_parse::skip_space() { while ((*str)[pos] && isspace((*str)[pos])) { pos = pos + 1; } } char String_parse::peek() { return (*str)[pos]; } void String_parse::get_nonspace_quoted(string &field) { field.clear(); skip_space(); bool quoted = false; if ((*str)[pos] == '"') { quoted = true; field.append(1, '"'); pos = pos + 1; } while ((*str)[pos] && (quoted || !isspace((*str)[pos]))) { if ((*str)[pos] == '"') { if (quoted) { field.append(1, '"'); pos = pos + 1; } return; } if ((*str)[pos] == '\\') { pos = pos + 1; } if ((*str)[pos]) { field.append(1, (*str)[pos]); pos = pos + 1; } } } char *escape_chars[] = { (char *) "\\n", (char *)"\\t", (char *)"\\\\", (char *)"\\r", (char *) "\\\""}; void string_escape(string &result, char *str, const char *quote) { int length = (int) strlen(str); if (quote[0]) { result.append(1, quote[0]); } for (int i = 0; i < length; i++) { if (!isalnum((unsigned char) str[i])) { char *chars = (char *)"\n\t\\\r\""; char *special = strchr(chars, str[i]); if (special) { result.append(escape_chars[special - chars]); } else { result.append(1, str[i]); } } else { result.append(1, str[i]); } } result.append(1, quote[0]); } void String_parse::get_remainder(std::string &field) { field.clear(); skip_space(); int len = str->length() - pos; if ((*str)[len - 1] == '\n') { // if str ends in newline, len--; // reduce length to ignore newline } field.insert(0, *str, pos, len); } lmms-1.1.3/plugins/MidiImport/portsmf/strparse.h000066400000000000000000000007471247673406200217530ustar00rootroot00000000000000// strparse.h -- header for String_parse class class String_parse { public: int pos; std::string *str; void init(std::string *s) { str = s; pos = 0; } void skip_space(); char peek(); void get_nonspace_quoted(std::string &field); // get the remaining characters, skipping initial spaces and final return void get_remainder(std::string &field); }; void string_escape(std::string &result, char *s, const char *quote); lmms-1.1.3/plugins/MidiImport/portsmf/trace.cpp000066400000000000000000000011471247673406200215340ustar00rootroot00000000000000// trace.cpp -- debugging print function // // (I think this was created to provide a generic print function // for use in non-command-line Windows applications where printf // does not work. Currently, it is not used, but kept around for // possible debugging needs. -RBD) #include "stdarg.h" #include "stdio.h" #include "crtdbg.h" void trace(char *format, ...) { char msg[256]; va_list args; va_start(args, format); _vsnprintf(msg, 256, format, args); va_end(args); #ifdef _DEBUG _CrtDbgReport(_CRT_WARN, NULL, NULL, NULL, msg); #else printf(msg); #endif } lmms-1.1.3/plugins/MidiImport/portsmf/trace.h000066400000000000000000000000421247673406200211720ustar00rootroot00000000000000void trace(char *format, ...); lmms-1.1.3/plugins/SpectrumAnalyzer/000077500000000000000000000000001247673406200174705ustar00rootroot00000000000000lmms-1.1.3/plugins/SpectrumAnalyzer/CMakeLists.txt000066400000000000000000000007121247673406200222300ustar00rootroot00000000000000INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) BUILD_PLUGIN(spectrumanalyzer SpectrumAnalyzer.cpp SpectrumAnalyzerControls.cpp SpectrumAnalyzerControlDialog.cpp SpectrumAnalyzer.h SpectrumAnalyzerControls.h SpectrumAnalyzerControlDialog.h MOCFILES SpectrumAnalyzerControlDialog.h SpectrumAnalyzerControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp000066400000000000000000000075121247673406200235110ustar00rootroot00000000000000/* * SpectrumAnalyzer.cpp - spectrum analyzer effect plugin * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "SpectrumAnalyzer.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT spectrumanalyzer_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Spectrum Analyzer", QT_TRANSLATE_NOOP( "pluginBrowser", "Graphical spectrum analyzer plugin" ), "Tobias Doerffel ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } SpectrumAnalyzer::SpectrumAnalyzer( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &spectrumanalyzer_plugin_descriptor, _parent, _key ), m_saControls( this ), m_framesFilledUp( 0 ), m_energy( 0 ) { memset( m_buffer, 0, sizeof( m_buffer ) ); m_specBuf = (fftwf_complex *) fftwf_malloc( ( FFT_BUFFER_SIZE + 1 ) * sizeof( fftwf_complex ) ); m_fftPlan = fftwf_plan_dft_r2c_1d( FFT_BUFFER_SIZE*2, m_buffer, m_specBuf, FFTW_MEASURE ); } SpectrumAnalyzer::~SpectrumAnalyzer() { fftwf_destroy_plan( m_fftPlan ); fftwf_free( m_specBuf ); } bool SpectrumAnalyzer::processAudioBuffer( sampleFrame* _buf, const fpp_t _frames ) { if( !isEnabled() || !isRunning () ) { return false; } if( !m_saControls.isViewVisible() ) { return true; } fpp_t f = 0; if( _frames > FFT_BUFFER_SIZE ) { m_framesFilledUp = 0; f = _frames - FFT_BUFFER_SIZE; } const int cm = m_saControls.m_channelMode.value(); switch( cm ) { case MergeChannels: for( ; f < _frames; ++f ) { m_buffer[m_framesFilledUp] = ( _buf[f][0] + _buf[f][1] ) * 0.5; ++m_framesFilledUp; } break; case LeftChannel: for( ; f < _frames; ++f ) { m_buffer[m_framesFilledUp] = _buf[f][0]; ++m_framesFilledUp; } break; case RightChannel: for( ; f < _frames; ++f ) { m_buffer[m_framesFilledUp] = _buf[f][1]; ++m_framesFilledUp; } break; } if( m_framesFilledUp < FFT_BUFFER_SIZE ) { return isRunning(); } // hanming( m_buffer, FFT_BUFFER_SIZE, HAMMING ); const sample_rate_t sr = engine::mixer()->processingSampleRate(); const int LOWEST_FREQ = 0; const int HIGHEST_FREQ = sr / 2; fftwf_execute( m_fftPlan ); absspec( m_specBuf, m_absSpecBuf, FFT_BUFFER_SIZE+1 ); if( m_saControls.m_linearSpec.value() ) { compressbands( m_absSpecBuf, m_bands, FFT_BUFFER_SIZE+1, MAX_BANDS, (int)(LOWEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(sr/2)), (int)(HIGHEST_FREQ*(FFT_BUFFER_SIZE+1)/(float)(sr/2))); m_energy = maximum( m_bands, MAX_BANDS ) / maximum( m_buffer, FFT_BUFFER_SIZE ); } else { calc13octaveband31( m_absSpecBuf, m_bands, FFT_BUFFER_SIZE+1, sr/2.0 ); m_energy = signalpower( m_buffer, FFT_BUFFER_SIZE ) / maximum( m_buffer, FFT_BUFFER_SIZE ); } m_framesFilledUp = 0; checkGate( 0 ); return isRunning(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) { return new SpectrumAnalyzer( parent, static_cast( data ) ); } } lmms-1.1.3/plugins/SpectrumAnalyzer/SpectrumAnalyzer.h000066400000000000000000000034571247673406200231620ustar00rootroot00000000000000/* * SpectrumAnalyzer.h - spectrum anaylzer effect plugin * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SPECTRUM_ANALYZER_H #define _SPECTRUM_ANALYZER_H #include "Effect.h" #include "fft_helpers.h" #include "SpectrumAnalyzerControls.h" const int MAX_BANDS = 249; class SpectrumAnalyzer : public Effect { public: enum ChannelModes { MergeChannels, LeftChannel, RightChannel } ; SpectrumAnalyzer( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~SpectrumAnalyzer(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return( &m_saControls ); } private: SpectrumAnalyzerControls m_saControls; fftwf_plan m_fftPlan; fftwf_complex * m_specBuf; float m_absSpecBuf[FFT_BUFFER_SIZE+1]; float m_buffer[FFT_BUFFER_SIZE*2]; int m_framesFilledUp; float m_bands[MAX_BANDS]; float m_energy; friend class SpectrumAnalyzerControls; friend class SpectrumView; } ; #endif lmms-1.1.3/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp000066400000000000000000000117531247673406200261740ustar00rootroot00000000000000/* * SpectrumAnalyzerControlDialog.cpp - view for spectrum analyzer * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "SpectrumAnalyzer.h" #include "MainWindow.h" #include "led_checkbox.h" #include "embed.h" static inline void darken( QImage& img, int x, int y, int w, int h ) { int imgWidth = img.width(); QRgb * base = ( (QRgb *) img.bits() ) + y*imgWidth + x; for( int y = 0; y < h; ++y ) { QRgb * d = base + y*imgWidth; for( int x = 0; x < w; ++x ) { // shift each color component by 1 bit and set alpha // to 0xff d[x] = ( ( d[x] >> 1 ) & 0x7f7f7f7f ) | 0xff000000; } } } class SpectrumView : public QWidget { public: SpectrumView( SpectrumAnalyzer* s, QWidget * _parent ) : QWidget( _parent ), m_sa( s ), m_backgroundPlain( PLUGIN_NAME::getIconPixmap( "spectrum_background_plain" ).toImage() ), m_background( PLUGIN_NAME::getIconPixmap( "spectrum_background" ).toImage() ) { setFixedSize( 249, 151 ); connect( engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); setAttribute( Qt::WA_OpaquePaintEvent, true ); } virtual ~SpectrumView() { } virtual void paintEvent( QPaintEvent* event ) { QPainter p( this ); QImage i = m_sa->m_saControls.m_linearSpec.value() ? m_backgroundPlain : m_background; const float e = m_sa->m_energy; if( e <= 0 ) { darken( i, 0, 0, i.width(), i.height() ); p.drawImage( 0, 0, i ); return; } const bool lin_y = m_sa->m_saControls.m_linearYAxis.value(); float * b = m_sa->m_bands; const int LOWER_Y = -60; // dB int h; const int fh = height(); if( m_sa->m_saControls.m_linearSpec.value() ) { if( lin_y ) { for( int x = 0; x < MAX_BANDS; ++x, ++b ) { h = fh * 2.0 / 3.0 * (*b / e ); if( h < 0 ) h = 0; else if( h >= fh ) continue; darken( i, x, 0, 1, fh-h ); } } else { for( int x = 0; x < MAX_BANDS; ++x, ++b ) { h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); if( h < 0 ) h = 0; else if( h >= fh ) continue; darken( i, x, 0, 1, fh-h ); } } } else { if( lin_y ) { for( int x = 0; x < 31; ++x, ++b ) { h = fh * 2.0 / 3.0 * ( 1.2 * *b / e ); if( h < 0 ) h = 0; else if( h >= fh ) continue; else h = ( h / 3 ) * 3; darken( i, x*8, 0, 8, fh-h ); } } else { for( int x = 0; x < 31; ++x, ++b ) { h = (int)( fh * 2.0 / 3.0 * (20*(log10( *b / e ) ) - LOWER_Y ) / (-LOWER_Y ) ); if( h < 0 ) h = 0; else if( h >= fh ) continue; else h = ( h / 3 ) * 3; darken( i, x*8, 0, 8, fh-h ); } } darken( i, 31*8, 0, 1, fh ); } p.drawImage( 0, 0, i ); } private: SpectrumAnalyzer * m_sa; QImage m_backgroundPlain; QImage m_background; } ; SpectrumAnalyzerControlDialog::SpectrumAnalyzerControlDialog( SpectrumAnalyzerControls* controls ) : EffectControlDialog( controls ), m_controls( controls ), m_logXAxis( PLUGIN_NAME::getIconPixmap( "log_x_axis" ) ), m_logYAxis( PLUGIN_NAME::getIconPixmap( "log_y_axis" ) ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "background" ) ); setFixedSize( 280, 243 ); setPalette( pal ); /* QVBoxLayout * l = new QVBoxLayout( this );*/ SpectrumView* v = new SpectrumView( controls->m_effect, this ); v->move( 27, 30 ); ledCheckBox * lin_spec = new ledCheckBox( tr( "Linear spectrum" ), this ); lin_spec->move( 24, 204 ); lin_spec->setModel( &controls->m_linearSpec ); ledCheckBox * lin_y = new ledCheckBox( tr( "Linear Y axis" ), this ); lin_y->move( 24, 220 ); lin_y->setModel( &controls->m_linearYAxis ); connect( &controls->m_linearSpec, SIGNAL( dataChanged() ), this, SLOT( update() ) ); connect( &controls->m_linearYAxis, SIGNAL( dataChanged() ), this, SLOT( update() ) ); /* l->addWidget( v ); l->addWidget( lin_spec ); l->addWidget( lin_y );*/ } void SpectrumAnalyzerControlDialog::paintEvent( QPaintEvent * ) { QPainter p( this ); if( !m_controls->m_linearSpec.value() ) { p.drawPixmap( 25, 183, m_logXAxis ); } if( !m_controls->m_linearYAxis.value() ) { p.drawPixmap( 3, 47, m_logYAxis); } } #include "moc_SpectrumAnalyzerControlDialog.cxx" lmms-1.1.3/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.h000066400000000000000000000026611247673406200256370ustar00rootroot00000000000000/* * SpectrumAnalyzerControlDialog.h - view for spectrum analyzer * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SPECTRUM_ANALYZER_CONTROL_DIALOG_H #define _SPECTRUM_ANALYZER_CONTROL_DIALOG_H #include "EffectControlDialog.h" class SpectrumAnalyzerControls; class SpectrumAnalyzerControlDialog : public EffectControlDialog { Q_OBJECT public: SpectrumAnalyzerControlDialog( SpectrumAnalyzerControls* controls ); virtual ~SpectrumAnalyzerControlDialog() { } private: virtual void paintEvent( QPaintEvent* event ); SpectrumAnalyzerControls* m_controls; QPixmap m_logXAxis; QPixmap m_logYAxis; } ; #endif lmms-1.1.3/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.cpp000066400000000000000000000031621247673406200252320ustar00rootroot00000000000000/* * SpectrumAnalyzerControls.cpp - controls for spectrum analyzer * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "SpectrumAnalyzer.h" #include "SpectrumAnalyzerControls.h" SpectrumAnalyzerControls::SpectrumAnalyzerControls( SpectrumAnalyzer* effect ) : EffectControls( effect ), m_effect( effect ), m_linearSpec( false, this, tr( "Linear spectrum" ) ), m_linearYAxis( false, this, tr( "Linear Y axis" ) ), m_channelMode( SpectrumAnalyzer::MergeChannels, SpectrumAnalyzer::MergeChannels, SpectrumAnalyzer::RightChannel, this, tr( "Channel mode" ) ) { } void SpectrumAnalyzerControls::loadSettings( const QDomElement & _this ) { } void SpectrumAnalyzerControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { } #include "moc_SpectrumAnalyzerControls.cxx" lmms-1.1.3/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.h000066400000000000000000000035641247673406200247050ustar00rootroot00000000000000/* * SpectrumAnalyzerControls.h - controls for spectrum-analyzer * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef SPECTRUM_ANALYZER_CONTROLS_H #define SPECTRUM_ANALYZER_CONTROLS_H #include "EffectControls.h" #include "SpectrumAnalyzerControlDialog.h" #include "knob.h" class SpectrumAnalyzer; class SpectrumAnalyzerControls : public EffectControls { Q_OBJECT public: SpectrumAnalyzerControls( SpectrumAnalyzer* effect ); virtual ~SpectrumAnalyzerControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "spectrumanaylzercontrols"; } virtual int controlCount() { return 1; } virtual EffectControlDialog * createView() { return new SpectrumAnalyzerControlDialog( this ); } private: SpectrumAnalyzer* m_effect; BoolModel m_linearSpec; BoolModel m_linearYAxis; IntModel m_channelMode; friend class SpectrumAnalyzer; friend class SpectrumAnalyzerControlDialog; friend class SpectrumView; } ; #endif lmms-1.1.3/plugins/SpectrumAnalyzer/background.png000066400000000000000000000352531247673406200223250ustar00rootroot00000000000000PNG  IHDRjKsRGB pHYs  tIME* rJtEXtCommentCreated with GIMPWPLTE !!!"""###$$$%%$%%%&&%&&&''&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>=>>>??>???@@?@@@AA@AAABAABBABBBCCBCCCDCCDDCDDDEDDEEDEEEFEDFFEFFFGFFGGFGGGHGGHHGHHHIIHIIIJJHJJIJJJKKJKKKLLJLLKLLLMMLMMMNNLNNMNNNOOMOONOOOPPOPPPQQPQQQRRQRRRSSRSSSTTRTTSTTTUUSUUTUUUVVVWWUWWVWWWXXWXXXYYWYYXYYYZZY[[Y[[[\\[\\\]][]]\]]]^^]^^^__]__^___``_```aa_aa`aaabb`bbabbbccaccbcccddbddcdddeeceedeeeffdfffggeggfggghhfhhghhhiigiihiiijjhjjijjjkkikkjkkklljllklllmmkmmlmmmnnlnnmnnnoomoonoooppoppprrprrrsss6g8IDAT ]t E"x%P4Jj/U{-{{GNŽ=EG2F0 4#~Wy=SC Scc&j4prPX]X {eg{,cYdhN&9wg # fv4 @0JyMT4pp ƢkXava291@aԩ;qf9PueG*N  kN'sr93ΚMيYְ;8tk.eJh.5Df5fcPݣJur]Wfg1nsYfsI38,`ց9ݫgΞԮ`ԝХv. $qL:4Nݒ.CjaR T=r:]L4;pq:NcƹJFYhJv& 80 8aM'Np8,s'aQpt198B=BsSڋʬI]T'`P2 p37q885^pvEBSPBBw&0Pif=p<24̚T*pԚNqv*Eh#L|=,G8*LtGhh`,]_̿HEYF\,8,;,cdXppqn 8tyYP`'̚1\9uaXfԅ|s]^kfMjeG7.<Ik˟{p/\}m}/Ksy_= į|64_^ג_x>z+^|庋'O5ŋOq3~躜7٭UrdH&cuٝ88Nbu„c8*'7≻73Qxl\|Ɵ+\Ûp5[O;ݛ?rq ]6Q}]./?7/?6˧]]ϽwξŽ6O6_bQ̼cK'7O_֯G)o{N~cXo}7˧\?zU~_y=2{^'`]0pٝl(PvG֤k u]>1#-7▛=1G{oE싻n\QC.w.xy\/ٛ6n\z֝}w]??/}}_wzy7]گvcvy]V1ZrbVaɄ.]hIwvi@ؗ|^~W1yo[nF'r4xnc[]7f{OQ{^s/o9]xuwUz^u>n=?7?G#ssKwRKA*#8&]CYDŽkR;Q e2ˁ~܏1h:]q=|r&/7Gr[yx{<~<ǣwozCom7[|zyMn掔`^ 4(,t1 EZ'k7Leڱcj蚘[G)[qvany|]>56&ܔw/ޙW~%/nx+x//nq^7rwɭ^0*dI*h0`5}w:&?.w+t5yۅ۸G.V;9+A pۍKwvqk1-^>\-Gv"h5R@F3@ YZ'GtW}vϝoz<@7ޟzo}6/vCyO=~pǿw|w~w\]]{o%q{^'?z?C v (X0TEIX䐊{ɫ^v?~_;owݟ~Kw]\>9wNOp~wßo*?>qv?իp[W]=~7'xq4i^uНtw4@@ UU쮙#J PY>o? /̯|^~׽)oxw^ w\n#;~??CNO{7u<[/?µW}|~xe^,;P4q8f֡Q ` Iѝ5GPtL]aw]Ď٥LqӉ,#*ӕ: ?YX; d^ Q{N %(pB`ZHG^'\V ˘ {E!y83N lkt8F!Y h -"(! MQJ(D!f輒",(>F %P((P(!B !* 0!r?J( A @TEJ*@PQB@&(Ah(Hi@2!IYGak4E(4J  DA"h#* РD( 0rH%a %hEfBB+@Q@PR)q, (@)Am(h,P@CRQyhh" % )EAX@Q0vkر`j (P(Qc5H8T 4"PB4Xf/]HAxy5˄@x&@R `E!@@*U(4hPf@`^QIA3T) *Qm*B&t@E ϼ 4(4 J) %4X @ %0,(P@Q˼%3"@@(@  "FeRP0@1PE`Y` v, JQfءF v!ʼBw傠AT %D)( DP3 R k (,`B`3 ((hЀP@@! @ %(Hq? @Q$  @BS @H TJ+)P 0( TH"(@@@)΃ H J(%@@b E@A@)B<h@)P@ Ah(@ @QX @yPASqR B J*@ @T@y3@ @PBP* P@ 4B Je^ hPQ)H%(E ((e^b @T"E %A"*@(Bavex 2|evv@ (J%` 0x*(@ @("Eh X;Ƭvu?2#<@(@@ X` 4P  34Ph Q,vca *% y; ,0X@ÀcT84fƎ`@X `g  Q i H`'0 ['!X Bb݀Ź,`Su pp p=\\p s{r.8{p p1%fp\|s%8 ?p8r6Y @p.{7 ,õ 6B a6\8=?r.rЀDpp%344 i )$L[0`eX4d44cd< dL 4`Nb1`08kb0a` `f@0e!lY @@  04 `7O`&0h Y 0`A"&Ok 6-` Lp 0O4Ȑ' 0L,0 0C0k`-& aZ, YXL``Ђ@ e, OM d Y\ d0Y~'.(`@14 0`4 `<}bc 7b Z  n@`&Pf$3Af e@ zK'&ր 0Ab1`2`Y 00 0 db X21#H00@ hUh1Y`d`,& ?`@kzĄ hF,Xa  ˢ ?ҏ&ô/ 4b`2 30 AN!t@i&h00 , p!0 C0Ā!`@#d00`xU?` 0_1DD`dK`,XL_ -bIȠ2MKc  "#0`uXXZdde0 b,2" D@B6/X b a  , `d̀\`b`B` a YpAXp|FL L0`0FM&&Y  `xhck `XFh 4d\! 52C/_&@@f@tA` X@ˌ@/ӟ H$0 d `2 @Le /O0 '&XLk0,,`F`dxI?6Ol " L !0Hɴ@1&`Ȱ`44Bhb`X Ć.2 20B ПB0X jր@2F@2 }, /F, 0`D--`d`26րĐLȀaE{ QAV:w@04V&`ġ~32`3MF҂1@C` d2 aȃ#[A L0h`0@mmc$d Y6NC`b4 h # |nh@_3d)f sc0@ h @ 4-& <0g&` ddjn &߀& ` d``ba @Si X0bo4h@҂ -A& `ao21 0@>`4  0 ,F1& HDsdC0a@mF00(#F,LFM`à`1@6a $2 0LÝÄ` Y 0 FXȈ `1,`0`x7f,',A`@idA0! `12ƃK  ',` C i@` L 0`pЋPl,bXX@2!C Z  8KaL`q"&`& @&  00)hG0䏁`424d0e!0#@mF)2  V 4`Tۨ>Ddzi  bLbb"&FXC!02nN@di #  L 5`&L @0`$b8 ,o 0hB C22& ``dXn67'22,0@d` ꅄdXA`X& @M40dd bZ㮾% `&@@@13X\&@d ` ae`` 3e ,A 0!` Y@2d1 d@d2MC}A 0hbM4  ,h#MA dpWODi: `@  @`|OwA 9` ` C `0 Z @Fz d2ĔdC@LX&`b 0Y@Y F@~# @ 0 k2a!k0 A`b ! `21!bh )``h AL1,F0&L l@Ak0`aY 4 44 ,`ˌ1 &I A,ki @0 0 @`p#2B[@020 l@2" vgh2,@`S[&021i ,wz d2Yd20@ 0` `$0n=&S e M hkY@ `#0tD',"@!F #1j 02h S#&4@ fАdeS`Ȧ? B XF 0` =#e$L , 0``0  D&؝ bb 0`2DL `G 4CdF L@F`4,40FbA20Ād8FV@ 4`` 0 PO ]1d F0M@,,dрidhC`Ă/2\&&`0"@0`A)F,``##@02aA @=  @hhBfOQP:迶j|$xoe$@Kf``  - `2 EI @ 0! Z&'`3!$$4 @aa1, 00`Cv_3Ųlh&@,X4#@Ú E_ ; !00 & h 40[3 `"d,a X@m0@CX@C  \ `Lo!#0cMȊ! `50@ 73BJ 3,$kn% c` Ad`,%XYC FP3G0 Xd4A#$ c0L!b0 "0`f10da d&b, a@m2ALТ1`}XmjlMML)ht)2k0 0 5 2CYDa`1DFdP64b2-0b eD0fB0 0ؔ b0HXM` `hЇfX"0B# 2`4&@3C A X&d,^d10  1!3ֲq$ 0 &d2 @PA2h76YLC` `M"-l@d2, X l0! }X` !0 c,J L) Ұ(f,2&@5؀zoQfAڄ bh`bL S X,hh,6Xf!g02 f !MMYfa#рei3 h de "C zĚ`0 bD "0 1Xd4b@ Q 땄&1L@bm ``j@6€F  CL٤iF`vY0А! `4@h k4 bFih`1(jeِiЌDp(„lYL@ hL0! SF & . @1 $ bXe01@  F31@h##X2 !C4l0` `bHh`X]2ad f@@hf 2`2#0-S1aKL Ѐ f3+7 a 0 , i`@" 46`0 h 0 0("B e, fM4Q`02@p`[14F0$;0d`L ` b&А,FJ2lVl2FCFf`FdFB1Z ƈ@ Ȁ!45[ ̆X 6(4F,lѨ1,̘ء"`  #@ H  (b%Af  a@ b LFC11@#ؠjX,1CƂ-Kh $a"0 Mv2@d[Y,E4f ڱ`abDd# C L3#aZ&00 3K&hb4`aFbX`02 4dX f2056\aLL0aP@fȐ C1F31!&L&h4X%@l 2@L aj  C0A k0lu˰2g 6S`6a`hML!0"1 #@ A4X@`3=0 7&&IPC10@"hX0-X`! 1^12 `@b@ `DȒ1M&dFAA ()2  (mX@)pkX1!d0HFCC`ь! M030(" #0 X$ 1c(F5d4A0qc@bAa%v/ɀ@1  `h6LvLX Fh2@ XL`1d,W`  cAC X ld0@Ҡ  MP20 5& @&`3YHЀL`f` #2Y!g# i01d̴!0`i"غb0` X&k1_CvЈ& e@D ɴ #  `M 1X̄V3'd jV-``Q ",L LL1  Y0d,f Y&²0X,`4H  280& 21h1"}1d1` d66 @ @` A 9&`( `L0e4z!sDlb0 ! f6:2e` , b;~` 0Y4l pHV f  L `@51"A0#Mh`" L 2 #D @h@ л10ck$q1AơJH`LŀA AH abA`  a_"w! MMa a ̔Lj)&,`G#tdYX+tb0b2 C0`4i#F* v*L"*qG1Mh/ `р@b#06& ,G0!!0bh@$F `h`@h^(`Of$,C00d I`4FdXm= dhL$f/0 05243 @f# &0ȘfJ `aH `F`,`F``3LC0`VX 61## d`H`@helKiL@XLK`d c`0а% p‰5IENDB`lmms-1.1.3/plugins/SpectrumAnalyzer/log_x_axis.png000066400000000000000000000024151247673406200223340ustar00rootroot00000000000000PNG  IHDR uq pHYs  tIME&LeStEXtCommentCreated with GIMPWPLTE333LLL%%%{{{BBB&&&ǽiiiaaaQQQHHH999dddQQQ666666```555333<<<]]]eYtRNS&(,112244CEFVZZ]``ccfgggggiiijjkkkloqqz{}~bKGDv>IDATHW[AE/ L.fP0(90:19a.~TO_㹷NM} /_TwwWgVe)Ib `t$pѸdP`Z}$hUSd*޺Χi8IKGϏ 7l$pTfl&⠲KSd*TUE$>;[T?$w~UKSYo_" [Th&[1z\YWϛc`*On/.,ݜeu8pJ2V̩5t1ɇ@ptEAs~s k3 \$6z5.:j)Y&[1m#O~B񙘫swEbs,>:)I?MbO-aU L~}c "1_Q_UTboP#\+H "&Sz,"R" |Q__sEpXF&Sor #⸣tIENDB`lmms-1.1.3/plugins/SpectrumAnalyzer/log_y_axis.png000066400000000000000000000013361247673406200223360ustar00rootroot00000000000000PNG  IHDR{CP pHYs  tIME',ztEXtCommentCreated with GIMPWPLTE???///rrr MMM666444EEE!!!***///uuu2@MNtRNS 5Hpqqrrsuux{'bKGDU3IDATHRCQDэ w$h6+ @Tb^=Ujߞd:>Lۇ,df4mI.@n%Pۨ,vSilm²'wu{Iߨꀠ Ruu旱JJc/j] r3VPwf;z+6-ێl$'6Wׅqc)f ]dOԗIENDB`lmms-1.1.3/plugins/SpectrumAnalyzer/logo.png000066400000000000000000000062311247673406200211400ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/SpectrumAnalyzer/spectrum_background.png000066400000000000000000000027631247673406200242470ustar00rootroot00000000000000PNG  IHDRXjsRGB pHYs  tIME ɈIDATx]U{_ɴIQ'i2K|+ kUPtADDDAP A ZDDtKzRKIǷlR;\{f/ ǃuɇ\f2 Cˠp<+PK}80x[\z.p<+l>l-jMp<+ٜl}80x[\զMp<+ps6 WsNp<+ټl>l-jS&}8̕lAe>l-jgMp<+Hqs6 WSp<+٢l+|80\&x0Wx0gmqU;Vlǃ-vǃ9oD>Jvu>l-jGx0Wl}80x[\\ɖgÇ{Ix[\`dgˇ Ub_p<+lpS럚ǃSϺ>Cs޽ɡG|8t}8eox0צǃ\>89Op< $r}{a` ܧ|8W,s}wwν` 7?t3>{Q|8̵}^x09woǃz]s휮->Z=7= pZ5[}89wdx0t`Fs홪MsZ>/1}8p\+>v~ڴ$pZzEZ3}8 ǁ\OǃƳǃާ\s-^V.>p\'Ͽs-ZV\}85O+Qtl_|858_}8_ǃMc7ds53<\'Ճ{ǃ揦%ǃk4 :g=p^FVgs5uv]|85wiZ&p<-Į`9Wyǃ90x[\g~,>dY.p<X`t`9 #܎`X%paA`C^F]H\KZMYPXRWUUXTZS]R_PbOdNgLiKlJnIqGsFvEyD{B~A@>=<;]98754320/.-+*)'&%$"!   #'*-147;>AEHKORVY\`cfjmptwz~~B#IDATx A1,,!1[Ѣ?QVɷ:Je] IENDB`lmms-1.1.3/plugins/VstEffect/000077500000000000000000000000001247673406200160515ustar00rootroot00000000000000lmms-1.1.3/plugins/VstEffect/CMakeLists.txt000066400000000000000000000011201247673406200206030ustar00rootroot00000000000000IF(LMMS_SUPPORT_VST) INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../vst_base") LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../vst_base") LINK_LIBRARIES(vstbase) BUILD_PLUGIN(vsteffect VstEffect.cpp VstEffectControls.cpp VstEffectControlDialog.cpp VstSubPluginFeatures.cpp VstEffect.h VstEffectControls.h VstEffectControlDialog.h VstSubPluginFeatures.h MOCFILES VstEffectControlDialog.h VstEffectControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") SET_TARGET_PROPERTIES(vsteffect PROPERTIES COMPILE_FLAGS "-Wno-attributes") ENDIF(LMMS_SUPPORT_VST) lmms-1.1.3/plugins/VstEffect/VstEffect.cpp000066400000000000000000000101031247673406200204410ustar00rootroot00000000000000/* * VstEffect.cpp - class for handling VST effect plugins * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "VstEffect.h" #include "song.h" #include "text_float.h" #include "VstSubPluginFeatures.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT vsteffect_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "VST", QT_TRANSLATE_NOOP( "pluginBrowser", "plugin for using arbitrary VST effects inside LMMS." ), "Tobias Doerffel ", 0x0200, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, new VstSubPluginFeatures( Plugin::Effect ) } ; } VstEffect::VstEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &vsteffect_plugin_descriptor, _parent, _key ), m_plugin( NULL ), m_pluginMutex(), m_key( *_key ), m_vstControls( this ) { if( !m_key.attributes["file"].isEmpty() ) { openPlugin( m_key.attributes["file"] ); } setDisplayName( m_key.attributes["file"].section( ".dll", 0, 0 ).isEmpty() ? m_key.name : m_key.attributes["file"].section( ".dll", 0, 0 ) ); } VstEffect::~VstEffect() { closePlugin(); } bool VstEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { if( !isEnabled() || !isRunning () ) { return false; } if( m_plugin ) { const float d = dryLevel(); #ifdef __GNUC__ sampleFrame buf[_frames]; #else sampleFrame * buf = new sampleFrame[_frames]; #endif memcpy( buf, _buf, sizeof( sampleFrame ) * _frames ); m_pluginMutex.lock(); m_plugin->process( buf, buf ); m_pluginMutex.unlock(); double out_sum = 0.0; const float w = wetLevel(); for( fpp_t f = 0; f < _frames; ++f ) { _buf[f][0] = w*buf[f][0] + d*_buf[f][0]; _buf[f][1] = w*buf[f][1] + d*_buf[f][1]; } for( fpp_t f = 0; f < _frames; ++f ) { out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; } #ifndef __GNUC__ delete[] buf; #endif checkGate( out_sum / _frames ); } return isRunning(); } void VstEffect::openPlugin( const QString & _plugin ) { textFloat * tf = textFloat::displayMessage( VstPlugin::tr( "Loading plugin" ), VstPlugin::tr( "Please wait while loading VST plugin..." ), PLUGIN_NAME::getIconPixmap( "logo", 24, 24 ), 0 ); m_pluginMutex.lock(); m_plugin = new VstPlugin( _plugin ); if( m_plugin->failed() ) { m_pluginMutex.unlock(); closePlugin(); delete tf; QMessageBox::information( NULL, VstPlugin::tr( "Failed loading VST plugin" ), VstPlugin::tr( "The VST plugin %1 could not be loaded for some reason." ).arg( _plugin ), QMessageBox::Ok ); return; } VstPlugin::connect( engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), m_plugin, SLOT( setTempo( bpm_t ) ) ); m_plugin->setTempo( engine::getSong()->getTempo() ); m_pluginMutex.unlock(); delete tf; m_key.attributes["file"] = _plugin; } void VstEffect::closePlugin() { m_pluginMutex.lock(); if( m_plugin && m_plugin->pluginWidget() != NULL ) { delete m_plugin->pluginWidget(); } delete m_plugin; m_plugin = NULL; m_pluginMutex.unlock(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return new VstEffect( _parent, static_cast( _data ) ); } } lmms-1.1.3/plugins/VstEffect/VstEffect.h000066400000000000000000000034031247673406200201130ustar00rootroot00000000000000/* * VstEffect.h - class for handling VST effect plugins * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VST_EFFECT_H #define _VST_EFFECT_H #include #include "Effect.h" #include "VstPlugin.h" #include "VstEffectControlDialog.h" #include "VstEffectControls.h" class VstEffect : public Effect { public: VstEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~VstEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return &m_vstControls; } virtual inline QString publicName() const { return m_plugin->name(); } private: void openPlugin( const QString & _plugin ); void closePlugin(); VstPlugin * m_plugin; QMutex m_pluginMutex; EffectKey m_key; VstEffectControls m_vstControls; friend class VstEffectControls; friend class VstEffectControlDialog; friend class manageVSTEffectView; } ; #endif lmms-1.1.3/plugins/VstEffect/VstEffectControlDialog.cpp000066400000000000000000000215411247673406200231320ustar00rootroot00000000000000/* * VstEffectControlDialog.cpp - dialog for displaying VST-effect GUI * * Copyright (c) 2006-2011 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "VstEffectControlDialog.h" #include "VstEffect.h" #include "pixmap_button.h" #include "embed.h" #include "tooltip.h" #include #include #include "gui_templates.h" #include #include VstEffectControlDialog::VstEffectControlDialog( VstEffectControls * _ctl ) : EffectControlDialog( _ctl ), m_pluginWidget( NULL ), m_plugin( NULL ), tbLabel( NULL ) { QGridLayout * l = new QGridLayout( this ); l->setContentsMargins( 10, 10, 10, 10 ); l->setVerticalSpacing( 2 ); l->setHorizontalSpacing( 2 ); if( _ctl != NULL && _ctl->m_effect != NULL && _ctl->m_effect->m_plugin != NULL ) { m_plugin = _ctl->m_effect->m_plugin; m_plugin->showEditor( NULL, true ); m_pluginWidget = m_plugin->pluginWidget(); #ifdef LMMS_BUILD_WIN32 if( !m_pluginWidget ) { m_pluginWidget = m_plugin->pluginWidget( false ); } #endif } if( m_pluginWidget ) { setWindowTitle( m_pluginWidget->windowTitle() ); setMinimumWidth( 250 ); QPushButton * btn = new QPushButton( tr( "Show/hide" ) ); btn->setCheckable( true ); connect( btn, SIGNAL( toggled( bool ) ), m_pluginWidget, SLOT( setVisible( bool ) ) ); emit btn->click(); btn->setMinimumWidth( 78 ); btn->setMaximumWidth( 78 ); btn->setMinimumHeight( 24 ); btn->setMaximumHeight( 24 ); m_managePluginButton = new pixmapButton( this, "" ); m_managePluginButton->setCheckable( false ); m_managePluginButton->setCursor( Qt::PointingHandCursor ); m_managePluginButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "track_op_menu" ) ); m_managePluginButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "track_op_menu" ) ); connect( m_managePluginButton, SIGNAL( clicked() ), _ctl, SLOT( managePlugin() ) ); toolTip::add( m_managePluginButton, tr( "Control VST-plugin from LMMS host" ) ); m_managePluginButton->setWhatsThis( tr( "Click here, if you want to control VST-plugin from host." ) ); m_managePluginButton->setMinimumWidth( 21 ); m_managePluginButton->setMaximumWidth( 21 ); m_managePluginButton->setMinimumHeight( 21 ); m_managePluginButton->setMaximumHeight( 21 ); m_openPresetButton = new pixmapButton( this, "" ); m_openPresetButton->setCheckable( false ); m_openPresetButton->setCursor( Qt::PointingHandCursor ); m_openPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-up-press" ) ); m_openPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-up" ) ); connect( m_openPresetButton, SIGNAL( clicked() ), _ctl, SLOT( openPreset() ) ); toolTip::add( m_openPresetButton, tr( "Open VST-plugin preset" ) ); m_openPresetButton->setWhatsThis( tr( "Click here, if you want to open another *.fxp, *.fxb VST-plugin preset." ) ); m_openPresetButton->setMinimumWidth( 16 ); m_openPresetButton->setMaximumWidth( 16 ); m_openPresetButton->setMinimumHeight( 16 ); m_openPresetButton->setMaximumHeight( 16 ); m_rolLPresetButton = new pixmapButton( this, "" ); m_rolLPresetButton->setCheckable( false ); m_rolLPresetButton->setCursor( Qt::PointingHandCursor ); m_rolLPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-left-press" ) ); m_rolLPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-left" ) ); connect( m_rolLPresetButton, SIGNAL( clicked() ), _ctl, SLOT( rolrPreset() ) ); connect( m_rolLPresetButton, SIGNAL( clicked() ), this, SLOT( update() ) ); toolTip::add( m_rolLPresetButton, tr( "Previous (-)" ) ); m_rolLPresetButton->setShortcut( Qt::Key_Minus ); m_rolLPresetButton->setWhatsThis( tr( "Click here, if you want to switch to another VST-plugin preset program." ) ); m_rolLPresetButton->setMinimumWidth( 16 ); m_rolLPresetButton->setMaximumWidth( 16 ); m_rolLPresetButton->setMinimumHeight( 16 ); m_rolLPresetButton->setMaximumHeight( 16 ); m_rolRPresetButton = new pixmapButton( this, "" ); m_rolRPresetButton->setCheckable( false ); m_rolRPresetButton->setCursor( Qt::PointingHandCursor ); m_rolRPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-right-press" ) ); m_rolRPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-right" ) ); connect( m_rolRPresetButton, SIGNAL( clicked() ), _ctl, SLOT( rollPreset() ) ); connect( m_rolRPresetButton, SIGNAL( clicked() ), this, SLOT( update() ) ); toolTip::add( m_rolRPresetButton, tr( "Next (+)" ) ); m_rolRPresetButton->setShortcut( Qt::Key_Plus ); m_rolRPresetButton->setWhatsThis( tr( "Click here, if you want to switch to another VST-plugin preset program." ) ); m_rolRPresetButton->setMinimumWidth( 16 ); m_rolRPresetButton->setMaximumWidth( 16 ); m_rolRPresetButton->setMinimumHeight( 16 ); m_rolRPresetButton->setMaximumHeight( 16 ); _ctl->m_selPresetButton = new QPushButton( tr( "" ), this ); _ctl->m_selPresetButton->setCheckable( false ); _ctl->m_selPresetButton->setCursor( Qt::PointingHandCursor ); _ctl->m_selPresetButton->setIcon( PLUGIN_NAME::getIconPixmap( "stepper-down" ) ); _ctl->m_selPresetButton->setWhatsThis( tr( "Click here to select presets that are currently loaded in VST." ) ); _ctl->m_selPresetButton->setMenu(_ctl->menu); _ctl->m_selPresetButton->setMinimumWidth( 16 ); _ctl->m_selPresetButton->setMaximumWidth( 16 ); _ctl->m_selPresetButton->setMinimumHeight( 16 ); _ctl->m_selPresetButton->setMaximumHeight( 16 ); m_savePresetButton = new pixmapButton( this, "" ); m_savePresetButton->setCheckable( false ); m_savePresetButton->setCursor( Qt::PointingHandCursor ); m_savePresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "project_save", 21, 21 ) ); m_savePresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "project_save", 21, 21 ) ); connect( m_savePresetButton, SIGNAL( clicked() ), _ctl, SLOT( savePreset() ) ); toolTip::add( m_savePresetButton, tr( "Save preset" ) ); m_savePresetButton->setWhatsThis( tr( "Click here, if you want to save current VST-plugin preset program." ) ); m_savePresetButton->setMinimumWidth( 21 ); m_savePresetButton->setMaximumWidth( 21 ); m_savePresetButton->setMinimumHeight( 21 ); m_savePresetButton->setMaximumHeight( 21 ); int newSize = m_pluginWidget->width() + 20; newSize = (newSize < 250) ? 250 : newSize; QWidget* resize = new QWidget(this); resize->resize( newSize, 10 ); QWidget* space0 = new QWidget(this); space0->resize(8, 10); QWidget* space1 = new QWidget(this); space1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QFont f( "Arial", 10 ); l->addItem( new QSpacerItem( newSize - 20, 30, QSizePolicy::Fixed, QSizePolicy::Fixed ), 1, 0 ); l->addWidget( resize, 2, 0, 1, 1, Qt::AlignCenter ); l->addWidget( m_pluginWidget, 3, 0, 1, 1, Qt::AlignCenter ); l->setRowStretch( 5, 1 ); l->setColumnStretch( 1, 1 ); QToolBar * tb = new QToolBar( this ); tb->resize( newSize , 32 ); tb->addWidget(space0); tb->addWidget( m_rolLPresetButton ); tb->addWidget( m_rolRPresetButton ); tb->addWidget( _ctl->m_selPresetButton ); tb->addWidget( m_openPresetButton ); tb->addWidget( m_savePresetButton ); tb->addWidget( m_managePluginButton ); tb->addWidget( btn ); tb->addWidget(space1); tbLabel = new QLabel( tr( "Effect by: " ), this ); tbLabel->setFont( pointSize<7>( f ) ); tbLabel->setTextFormat(Qt::RichText); tbLabel->setAlignment( Qt::AlignTop | Qt::AlignLeft ); tb->addWidget( tbLabel ); } } void VstEffectControlDialog::paintEvent( QPaintEvent * ) { if( m_plugin != NULL && tbLabel != NULL ) { tbLabel->setText( tr( "Effect by: " ) + m_plugin->vendorString() + tr( "       
" ) + m_plugin->currentProgramName() ); } } VstEffectControlDialog::~VstEffectControlDialog() { //delete m_pluginWidget; } #include "moc_VstEffectControlDialog.cxx" lmms-1.1.3/plugins/VstEffect/VstEffectControlDialog.h000066400000000000000000000033401247673406200225740ustar00rootroot00000000000000/* * VstEffectControlDialog.h - dialog for displaying GUI of VST-effect-plugin * * Copyright (c) 2006-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VST_EFFECT_CONTROL_DIALOG_H #define _VST_EFFECT_CONTROL_DIALOG_H #include "EffectControlDialog.h" #include "VstPlugin.h" #include #include #include class VstEffectControls; class pixmapButton; class QPixmap; class QPushButton; class pixmapButton; class VstEffectControlDialog : public EffectControlDialog { Q_OBJECT public: VstEffectControlDialog( VstEffectControls * _controls ); virtual ~VstEffectControlDialog(); protected: virtual void paintEvent( QPaintEvent * _pe ); private: QWidget * m_pluginWidget; pixmapButton * m_openPresetButton; pixmapButton * m_rolLPresetButton; pixmapButton * m_rolRPresetButton; pixmapButton * m_managePluginButton; pixmapButton * m_savePresetButton; VstPlugin * m_plugin; QLabel * tbLabel; } ; #endif lmms-1.1.3/plugins/VstEffect/VstEffectControls.cpp000066400000000000000000000323451247673406200222010ustar00rootroot00000000000000/* * VstEffectControls.cpp - controls for VST effect plugins * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "VstEffectControls.h" #include "VstEffect.h" #include "MainWindow.h" #include #include VstEffectControls::VstEffectControls( VstEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_subWindow( NULL ), knobFModel( NULL ), vstKnobs( NULL ), ctrHandle( NULL ), lastPosInMenu (0) // m_presetLabel ( NULL ) { menu = new QMenu; connect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); } VstEffectControls::~VstEffectControls() { delete ctrHandle; ctrHandle = NULL; } void VstEffectControls::loadSettings( const QDomElement & _this ) { //m_effect->closePlugin(); //m_effect->openPlugin( _this.attribute( "plugin" ) ); m_effect->m_pluginMutex.lock(); if( m_effect->m_plugin != NULL ) { m_effect->m_plugin->loadSettings( _this ); const QMap & dump = m_effect->m_plugin->parameterDump(); paramCount = dump.size(); char paramStr[35]; vstKnobs = new knob *[ paramCount ]; knobFModel = new FloatModel *[ paramCount ]; QStringList s_dumpValues; QWidget * widget = new QWidget(); for( int i = 0; i < paramCount; i++ ) { sprintf( paramStr, "param%d", i ); s_dumpValues = dump[ paramStr ].split( ":" ); vstKnobs[i] = new knob( knobBright_26, widget, s_dumpValues.at( 1 ) ); vstKnobs[i]->setHintText( s_dumpValues.at( 1 ) + ":", "" ); vstKnobs[i]->setLabel( s_dumpValues.at( 1 ).left( 15 ) ); knobFModel[i] = new FloatModel( 0.0f, 0.0f, 1.0f, 0.01f, this, QString::number(i) ); knobFModel[i]->loadSettings( _this, paramStr ); if( !( knobFModel[ i ]->isAutomated() || knobFModel[ i ]->controllerConnection() ) ) { knobFModel[ i ]->setValue( (s_dumpValues.at( 2 ) ).toFloat() ); knobFModel[ i ]->setInitValue( (s_dumpValues.at( 2 ) ).toFloat() ); } connect( knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) ); vstKnobs[i]->setModel( knobFModel[i] ); } } m_effect->m_pluginMutex.unlock(); } void VstEffectControls::setParameter( void ) { Model *action = qobject_cast(sender()); int knobUNID = action->displayName().toInt(); if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->setParam( knobUNID, knobFModel[knobUNID]->value() ); } } void VstEffectControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "plugin", m_effect->m_key.attributes["file"] ); m_effect->m_pluginMutex.lock(); if( m_effect->m_plugin != NULL ) { m_effect->m_plugin->saveSettings( _doc, _this ); if (knobFModel != NULL) { const QMap & dump = m_effect->m_plugin->parameterDump(); paramCount = dump.size(); char paramStr[35]; for( int i = 0; i < paramCount; i++ ) { if (knobFModel[i]->isAutomated() || knobFModel[i]->controllerConnection()) { sprintf( paramStr, "param%d", i); knobFModel[i]->saveSettings( _doc, _this, paramStr ); } } } } m_effect->m_pluginMutex.unlock(); } int VstEffectControls::controlCount() { return m_effect->m_plugin != NULL && m_effect->m_plugin->hasEditor() ? 1 : 0; } void VstEffectControls::managePlugin( void ) { if ( m_effect->m_plugin != NULL && m_subWindow == NULL ) { manageVSTEffectView * tt = new manageVSTEffectView( m_effect, this); ctrHandle = (QObject *)tt; } else if (m_subWindow != NULL) { if (m_subWindow->widget()->isVisible() == FALSE) { m_scrollArea->show(); m_subWindow->show(); } else { m_scrollArea->hide(); m_subWindow->hide(); } } } void VstEffectControls::savePreset( void ) { if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->savePreset( ); /* bool converted; QString str = m_vi->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; QWidget::update();*/ } } void VstEffectControls::updateMenu( void ) { // get all presets - if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->loadProgramNames(); ///QWidget::update(); QString str = m_effect->m_plugin->allProgramNames(); QStringList list1 = str.split("|"); QMenu * to_menu = m_selPresetButton->menu(); to_menu->clear(); QAction *presetActions[list1.size()]; for (int i = 0; i < list1.size(); i++) { presetActions[i] = new QAction(this); connect(presetActions[i], SIGNAL(triggered()), this, SLOT(selPreset())); presetActions[i]->setText(QString("%1. %2").arg(QString::number(i+1), list1.at(i))); presetActions[i]->setData(i); if (i == lastPosInMenu) { presetActions[i]->setIcon(embed::getIconPixmap( "sample_file", 16, 16 )); } else presetActions[i]->setIcon(embed::getIconPixmap( "edit_copy", 16, 16 )); to_menu->addAction( presetActions[i] ); } } } void VstEffectControls::openPreset( void ) { if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->openPreset( ); bool converted; QString str = m_effect->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; //QWidget::update(); } } void VstEffectControls::rollPreset( void ) { if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->rotateProgram( 1 ); bool converted; QString str = m_effect->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; //QWidget::update(); } } void VstEffectControls::rolrPreset( void ) { if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->rotateProgram( -1 ); bool converted; QString str = m_effect->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; //QWidget::update(); } } void VstEffectControls::selPreset( void ) { QAction *action = qobject_cast(sender()); if (action) if ( m_effect->m_plugin != NULL ) { lastPosInMenu = action->data().toInt(); m_effect->m_plugin->setProgram( lastPosInMenu ); //QWidget::update(); } } void VstEffectControls::paintEvent( QPaintEvent * ) { } manageVSTEffectView::manageVSTEffectView( VstEffect * _eff, VstEffectControls * m_vi ) : m_effect( _eff ) { m_vi2 = m_vi; widget = new QWidget(); m_vi->m_scrollArea = new QScrollArea( widget ); l = new QGridLayout( widget ); m_vi->m_subWindow = engine::mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); m_vi->m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); m_vi->m_subWindow->setFixedSize( 960, 300); m_vi->m_subWindow->setWidget(m_vi->m_scrollArea); m_vi->m_subWindow->setWindowTitle( _eff->m_plugin->name() + tr( " - VST parameter control" ) ); m_vi->m_subWindow->setWindowIcon( PLUGIN_NAME::getIconPixmap( "logo" ) ); //m_vi->m_subWindow->setAttribute(Qt::WA_DeleteOnClose); l->setContentsMargins( 20, 10, 10, 10 ); l->setVerticalSpacing( 10 ); l->setHorizontalSpacing( 23 ); m_syncButton = new QPushButton( tr( "VST Sync" ), widget ); connect( m_syncButton, SIGNAL( clicked() ), this, SLOT( syncPlugin() ) ); m_syncButton->setWhatsThis( tr( "Click here if you want to synchronize all parameters with VST plugin." ) ); l->addWidget( m_syncButton, 0, 0, 1, 2, Qt::AlignLeft ); m_displayAutomatedOnly = new QPushButton( tr( "Automated" ), widget ); connect( m_displayAutomatedOnly, SIGNAL( clicked() ), this, SLOT( displayAutomatedOnly() ) ); m_displayAutomatedOnly->setWhatsThis( tr( "Click here if you want to display automated parameters only." ) ); l->addWidget( m_displayAutomatedOnly, 0, 1, 1, 2, Qt::AlignLeft ); m_closeButton = new QPushButton( tr( " Close " ), widget ); connect( m_closeButton, SIGNAL( clicked() ), this, SLOT( closeWindow() ) ); m_closeButton->setWhatsThis( tr( "Close VST effect knob-controller window." ) ); l->addWidget( m_closeButton, 0, 2, 1, 7, Qt::AlignLeft ); for( int i = 0; i < 10; i++ ) { l->addItem( new QSpacerItem( 68, 45, QSizePolicy::Fixed, QSizePolicy::Fixed ), 0, i ); } const QMap & dump = m_effect->m_plugin->parameterDump(); m_vi->paramCount = dump.size(); bool isVstKnobs = true; if (m_vi->vstKnobs == NULL) { m_vi->vstKnobs = new knob *[ m_vi->paramCount ]; isVstKnobs = false; } if (m_vi->knobFModel == NULL) { m_vi->knobFModel = new FloatModel *[ m_vi->paramCount ]; } char paramStr[35]; QStringList s_dumpValues; if (isVstKnobs == false) { for( int i = 0; i < m_vi->paramCount; i++ ) { sprintf( paramStr, "param%d", i); s_dumpValues = dump[ paramStr ].split( ":" ); m_vi->vstKnobs[ i ] = new knob( knobBright_26, widget, s_dumpValues.at( 1 ) ); m_vi->vstKnobs[ i ]->setHintText( s_dumpValues.at( 1 ) + ":", "" ); m_vi->vstKnobs[ i ]->setLabel( s_dumpValues.at( 1 ).left( 15 ) ); sprintf( paramStr, "%d", i); m_vi->knobFModel[ i ] = new FloatModel( ( s_dumpValues.at( 2 ) ).toFloat(), 0.0f, 1.0f, 0.01f, _eff, tr( paramStr ) ); connect( m_vi->knobFModel[ i ], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) ); m_vi->vstKnobs[ i ] ->setModel( m_vi->knobFModel[ i ] ); } } int i = 0; for( int lrow = 1; lrow < ( int( m_vi->paramCount / 10 ) + 1 ) + 1; lrow++ ) { for( int lcolumn = 0; lcolumn < 10; lcolumn++ ) { if( i < m_vi->paramCount ) { l->addWidget( m_vi->vstKnobs[i], lrow, lcolumn, Qt::AlignCenter ); } i++; } } l->setRowStretch( ( int( m_vi->paramCount / 10 ) + 1 ), 1 ); l->setColumnStretch( 10, 1 ); widget->setLayout(l); widget->setAutoFillBackground(true); m_vi->m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_vi->m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_vi->m_scrollArea->setPalette( QApplication::palette( m_vi->m_scrollArea ) ); m_vi->m_scrollArea->setMinimumHeight( 64 ); m_vi->m_scrollArea->setWidget( widget ); m_vi->m_subWindow->show(); } void manageVSTEffectView::closeWindow() { m_vi2->m_subWindow->hide(); } void manageVSTEffectView::syncPlugin( void ) { char paramStr[35]; QStringList s_dumpValues; const QMap & dump = m_effect->m_plugin->parameterDump(); float f_value; for( int i = 0; i < m_vi2->paramCount; i++ ) { // only not automated knobs are synced from VST // those auto-setted values are not jurnaled, tracked for undo / redo if( !( m_vi2->knobFModel[ i ]->isAutomated() || m_vi2->knobFModel[ i ]->controllerConnection() ) ) { sprintf( paramStr, "param%d", i ); s_dumpValues = dump[ paramStr ].split( ":" ); f_value = ( s_dumpValues.at( 2 ) ).toFloat(); m_vi2->knobFModel[ i ]->setAutomatedValue( f_value ); m_vi2->knobFModel[ i ]->setInitValue( f_value ); } } } void manageVSTEffectView::displayAutomatedOnly( void ) { bool isAuto = QString::compare( m_displayAutomatedOnly->text(), tr( "Automated" ) ) == 0; for( int i = 0; i< m_vi2->paramCount; i++ ) { if( !( m_vi2->knobFModel[ i ]->isAutomated() || m_vi2->knobFModel[ i ]->controllerConnection() ) ) { if( m_vi2->vstKnobs[ i ]->isVisible() == true && isAuto ) { m_vi2->vstKnobs[ i ]->hide(); m_displayAutomatedOnly->setText( "All" ); } else { m_vi2->vstKnobs[ i ]->show(); m_displayAutomatedOnly->setText( "Automated" ); } } } } void manageVSTEffectView::setParameter( void ) { Model *action = qobject_cast(sender()); int knobUNID = action->displayName().toInt(); if ( m_effect->m_plugin != NULL ) { m_effect->m_plugin->setParam( knobUNID, m_vi2->knobFModel[knobUNID]->value() ); } } manageVSTEffectView::~manageVSTEffectView() { if( m_vi2->knobFModel != NULL ) { for( int i = 0; i < m_vi2->paramCount; i++ ) { delete m_vi2->knobFModel[ i ]; delete m_vi2->vstKnobs[ i ]; } } if( m_vi2->vstKnobs != NULL ) { delete [] m_vi2->vstKnobs; m_vi2->vstKnobs = NULL; } if( m_vi2->knobFModel != NULL ) { delete [] m_vi2->knobFModel; m_vi2->knobFModel = NULL; } if( m_vi2->m_scrollArea != NULL ) { delete m_vi2->m_scrollArea; m_vi2->m_scrollArea = NULL; } if( m_vi2->m_subWindow != NULL ) { m_vi2->m_subWindow->setAttribute( Qt::WA_DeleteOnClose ); m_vi2->m_subWindow->close(); if( m_vi2->m_subWindow != NULL ) { delete m_vi2->m_subWindow; } m_vi2->m_subWindow = NULL; } //delete m_vi2->m_subWindow; //m_vi2->m_subWindow = NULL; } #include "moc_VstEffectControls.cxx" lmms-1.1.3/plugins/VstEffect/VstEffectControls.h000066400000000000000000000056211247673406200216430ustar00rootroot00000000000000/* * VstEffectControls.h - controls for VST effect plugins * * Copyright (c) 2008-2011 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VST_EFFECT_CONTROLS_H #define _VST_EFFECT_CONTROLS_H #include "EffectControls.h" #include "VstEffectControlDialog.h" #include #include "embed.h" #include #include #include #include "knob.h" #include #include #include class VstEffect; class VstEffectControls : public EffectControls { Q_OBJECT public: VstEffectControls( VstEffect * _eff ); virtual ~VstEffectControls(); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "vsteffectcontrols"; } virtual int controlCount(); virtual EffectControlDialog * createView() { return new VstEffectControlDialog( this ); } protected slots: void updateMenu( void ); void managePlugin( void ); void openPreset( void ); void savePreset( void ); void rollPreset( void ); void rolrPreset( void ); void selPreset( void ); void setParameter( void ); protected: virtual void paintEvent( QPaintEvent * _pe ); private: VstEffect * m_effect; QPushButton * m_selPresetButton; QMenu *menu; QMdiSubWindow * m_subWindow; QScrollArea * m_scrollArea; FloatModel ** knobFModel; knob ** vstKnobs; int paramCount; QObject * ctrHandle; int lastPosInMenu; // QLabel * m_presetLabel; friend class VstEffectControlDialog; friend class manageVSTEffectView; } ; class manageVSTEffectView : public QObject { Q_OBJECT public: manageVSTEffectView( VstEffect * _eff, VstEffectControls * m_vi ); virtual ~manageVSTEffectView(); protected slots: void syncPlugin( void ); void displayAutomatedOnly( void ); void setParameter( void ); void closeWindow(); private: // static QPixmap * s_artwork; VstEffectControls * m_vi2; VstEffect * m_effect; QWidget *widget; QGridLayout * l; QPushButton * m_syncButton; QPushButton * m_displayAutomatedOnly; QPushButton * m_closeButton; } ; #endif lmms-1.1.3/plugins/VstEffect/VstSubPluginFeatures.cpp000066400000000000000000000037221247673406200226650ustar00rootroot00000000000000/* * VstSubPluginFeatures.cpp - derivation from * Plugin::Descriptor::SubPluginFeatures for * hosting VST-plugins * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "VstSubPluginFeatures.h" #include "config_mgr.h" VstSubPluginFeatures::VstSubPluginFeatures( Plugin::PluginTypes _type ) : SubPluginFeatures( _type ) { } void VstSubPluginFeatures::fillDescriptionWidget( QWidget * _parent, const Key * _key ) const { new QLabel( QWidget::tr( "Name: " ) + _key->name, _parent ); new QLabel( QWidget::tr( "File: " ) + _key->attributes["file"], _parent ); } void VstSubPluginFeatures::listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const { QStringList dlls = QDir( configManager::inst()->vstDir() ). entryList( QStringList() << "*.dll", QDir::Files, QDir::Name ); // TODO: eval m_type for( QStringList::ConstIterator it = dlls.begin(); it != dlls.end(); ++it ) { EffectKey::AttributeMap am; am["file"] = *it; _kl.push_back( Key( _desc, QFileInfo( *it ).baseName(), am ) ); } } lmms-1.1.3/plugins/VstEffect/VstSubPluginFeatures.h000066400000000000000000000027051247673406200223320ustar00rootroot00000000000000/* * VstSubPluginFeatures.h - derivation from * Plugin::Descriptor::SubPluginFeatures for * hosting VST-plugins * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VST_SUBPLUGIN_FEATURES_H #define _VST_SUBPLUGIN_FEATURES_H #include "Effect.h" class VstSubPluginFeatures : public Plugin::Descriptor::SubPluginFeatures { public: VstSubPluginFeatures( Plugin::PluginTypes _type ); virtual void fillDescriptionWidget( QWidget * _parent, const Key * _key ) const; virtual void listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const; } ; #endif lmms-1.1.3/plugins/VstEffect/logo.png000066400000000000000000000062311247673406200175210ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/audio_file_processor/000077500000000000000000000000001247673406200203575ustar00rootroot00000000000000lmms-1.1.3/plugins/audio_file_processor/CMakeLists.txt000066400000000000000000000002761247673406200231240ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(audiofileprocessor audio_file_processor.cpp audio_file_processor.h MOCFILES audio_file_processor.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/audio_file_processor/artwork.png000066400000000000000000007516231247673406200225740ustar00rootroot00000000000000PNG  IHDRZ=bKGDCҿ pHYs  tIME /9"Z IDATx ~???                 !!!             (((                FFF               @@@    7       ڵ2  &   CCC   ,Y!8            C-E   ??? I                 ǔ  K   ˗    e./0,]&i l@:E `<^9y  X=@# 4u  p5   `52 w? p;Q o=*x   *( IDAT -($"$    &!   ?6.J  -($ 4.)R Z;61Q  +'" .*&  !      ""    ($  \, "! 7eR6g(  C<7m  Aq,  *'"           f2-      1<,    !  883w   1! [Y(   C@<899   #" "         #     `6Z7(  &|93vEg gL*T+ Z 5kJ <6 83- S  Z0/. 7   @<9         U3     69  ?;?<;  f/!     /' /nP:3,$i  <8               99:  pB          kWHv;   r%  g>_3  =72      ٹ ɐϡԭ            A/!?93-              _M>5        !   A)  R7!           +   Ķó  "         eP.-  [        Z34   YJ  $    L'$  +        h4 d     :1)  !aH+  IDAT           C/ EB     .  %$# F)F)      !,           T1+% l-                               730       p< B'                                             %%%    c<       !                   -&!$               0$ .      71   && $   g              I            )       A  @ ~     x         Ƥ                 N  <    > 7  x + Y A8w #3  ,[$  3t ֹ         LF  \A  9Q  : ]9 ~]+ b=.Xx   R_    +>*<  еݯ         p1    h   +b!%E IDAT  pU 7,-@-         3Fݶ           > q6%AO { n#   A   Q O E x (?atf!   0 =-Yy  M5 e${         o6?"I S g :e    [#$   ^  ~  A    !           As* 4 G   F;4 ;'  */4:A       (%  L4 >05 AZ   #CY  g ]Y  7`           -%2   " # y        &     4     6  I&                       #Ќ                       )          "[B  ٹݻ8~     ˪     P(  !6%  #., ,(     a IDAT :s d   2 i .  ~      :s6m  ˔ X>,'RPv jƄ FQu-m   NZ}   r  -\I^ t  ע Bt@D Ǘ *ULs$  ۱%a ˊ $$$  (Ke< /_    &'5Y !NOX   HLAԩ   [WW !  /'6^   Kjg   'AY ʹg 2$Ļ  #fAB     /<  *Se0+    1D  UJ_     4EK ص  E-,     $%1W        / P   Yu (7 6A)| I7) g3r qu}I:?Ag,l 9zq >]47 Y ;D =RΎ -X{ Nz.-b| P1.{5M .!H  Y'& Yy      + - #!"'L5TL} $ u :=ID(U E*- <v .2}- N /QD<q!Z%  G $ 0_S@IcD  Ao G3"2x +^1/ADS\@G%6v %  (J3Q  ;y     G -  'C Ia! 3mc  3,Eo) :  +C%*  (.o0@ 7U( 9<7 7P )^#%$        N>z: % x9  #}8q4)$ -cv $&X.DA& D   p?  3  /I g!FS7s  #Cv V=vI<,Y۩  M iAa^+              3W{]#': !qP R  D{    6  , , 2 (          , n= * Ȕ 7Ի POYWP6  k6 ^Ki$; Ҫ M `9G'  Ǟ)+ p9 #0dw IDAT )           5_8<B|  é$    ܽi‹ ͔Ҷ9$ + h4 H\VML' CVE0 ( %ѹ" ]#d"1J         m<k: w     Һ  οٷ   Ԩ$Bt4   F :V%Z0  6 4R5T     d:  Ш    У  {$ &4  )(VjEp S}] !1CA?Bv O  `8  1!f]%`2         в      Uʤ 3|-B X &@G+ HGIs.S 2R  >?U#+ t<Fi&!M-B-#)M>( m~ e05;   "      ݤp   `<`( 0@fӝ #S&  g$7 v= {'#  Y "8" sJ >m" #_w[k&  / 8:<@ R& *#WZ Ae  %"@  %<     ͤ %u@H:h $GtP}K! R 14H E' $ sM, Y  (  4 'N9,b:oR3  q0!a2 $xO0,&" ԸOj%.("r< !4aǏ  )U,   F]U    h  PfLd=mk Ѥ =./&\=!\*&t  ˣ= h! 3$3$ 2+&pM. J8(J8(  j ٿ "fF,4/* ڶ#N9-"8/*A<7|Z;2,( Ҿ U_G0#,H   (U - * _T-(     3.*  a]%X   ֪.V3+"꿙 #F41   ,%!   ~9!   N Ŭ 51,'q㺖 й( /n`S/h83 1+' Ǜ  .)%z@%nJ*(  > .M) c; ]D6 IDAT &!Q+Q+b   G& A   Ŝ E=!"-  ɢ"B$%%1!  j   +-/ Ǩ  u%&&$ 繋  ˜N}**%,  Ƙ  .X ZZZ2e  7|T1      S$Z*  5g!> ז[.=K-` ޷Ь -.[  ś 1EJΧ  "40d   ߠj %8%K  Ý  .S6̪  /J)K۴   H~ أu+Z; メ  PPP H~Z(  ! U &4  * .+  !4    / *  4 *    *   $5 &  & (0   \\\ Jc7cA"     1&Y                 NS$=%                       B{`/5                         +++5%?b9M.        ӯ                  Bd>                           $ q9      ( IDAT                  4J #                              !hN'                      &5                                                                                               Q IDAT           ~#@ &5                 0*&                  =J> f׹             %%% kA<72{ ୁ             ### >a:    @:6ܿ              $$$ %Q- F@<N 겂               ### #Q,ID@N 쵄                &&&$j@  83/a        AR IDAT   ===XXX  7C: @;7 D|             ***"""%%%. JA/  4/,mst             $$$$$$   T0! 200/+' pz Ùà          &&&((( ::: )R' +#X>7׳Ӽ           HHH@@@  -R !  ү               8 1                    ɪ$                                 IDAT  )))               &&&           '''!!!                                              $$$ ===       GGG===         #R% IDAT                 gE@ IDAT   ''' ~ ;;;444JJJ 333 ###WWWaaa!!!111                           555             à~ IDAT                                            ӎ IDAT       h IDAT JJ IDAT  ~ qqqRRR333OOOONN999OOO :::BBB))):::ZZZ::: IDATllluuu<<<GGG___677 +++GGG;;;pppNNN===HHHUUU===HHHlllvvvnnn>>><<<uuu>>><<<AAApppJJJ~~~KKKBBB+++aaaJJJ ooosss tttKKKBBBDDDKKK ***mmmYYYxxxmmmJJJCCCKKKhhhhhhqqq^^^EEE^^^ ...::: IDAT 777                  666                                                                             DA/ IDAT                                                                                                                  1 IDAT                ~                                                                       !!!        -; IDAT  112         ...         SSS                        %                                                                                                                                                                Y IDAT                                                                                                                                                                                                                                           Σ݈ IDAT                                                                             F IDAT                                         ~                                           ʃ IDAT                                                                                %;                     '  &   #  "                             /                      IDAT                                                                                      O IDAT                                                                                                    Kh IDAT   KJ                                                                                            8 IDAT                                                                                                        KLK   "              IDAT333                                            """     F$"IENDB`lmms-1.1.3/plugins/audio_file_processor/audio_file_processor.cpp000066400000000000000000000774311247673406200252760ustar00rootroot00000000000000/* * audio_file_processor.cpp - instrument for using audio-files * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "audio_file_processor.h" #include "engine.h" #include "song.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" #include "interpolation.h" #include "gui_templates.h" #include "tooltip.h" #include "string_pair_drag.h" #include "DataFile.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT audiofileprocessor_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "AudioFileProcessor", QT_TRANSLATE_NOOP( "pluginBrowser", "Simple sampler with various settings for " "using samples (e.g. drums) in an " "instrument-track" ), "Tobias Doerffel ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), "wav,ogg,ds,spx,au,voc,aif,aiff,flac,raw", NULL } ; } audioFileProcessor::audioFileProcessor( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &audiofileprocessor_plugin_descriptor ), m_sampleBuffer(), m_ampModel( 100, 0, 500, 1, this, tr( "Amplify" ) ), m_startPointModel( 0, 0, 1, 0.0000001f, this, tr( "Start of sample" ) ), m_endPointModel( 1, 0, 1, 0.0000001f, this, tr( "End of sample" ) ), m_loopPointModel( 0, 0, 1, 0.0000001f, this, tr( "Loopback point" ) ), m_reverseModel( false, this, tr( "Reverse sample" ) ), m_loopModel( 0, 0, 2, this, tr( "Loop mode" ) ), m_stutterModel( false, this, tr( "Stutter" ) ), m_interpolationModel( this, tr( "Interpolation mode" ) ), m_nextPlayStartPoint( 0 ), m_nextPlayBackwards( false ) { connect( &m_reverseModel, SIGNAL( dataChanged() ), this, SLOT( reverseModelChanged() ) ); connect( &m_ampModel, SIGNAL( dataChanged() ), this, SLOT( ampModelChanged() ) ); connect( &m_startPointModel, SIGNAL( dataChanged() ), this, SLOT( startPointChanged() ) ); connect( &m_endPointModel, SIGNAL( dataChanged() ), this, SLOT( endPointChanged() ) ); connect( &m_loopPointModel, SIGNAL( dataChanged() ), this, SLOT( loopPointChanged() ) ); connect( &m_stutterModel, SIGNAL( dataChanged() ), this, SLOT( stutterModelChanged() ) ); //interpolation modes m_interpolationModel.addItem( tr( "None" ) ); m_interpolationModel.addItem( tr( "Linear" ) ); m_interpolationModel.addItem( tr( "Sinc" ) ); m_interpolationModel.setValue( 1 ); pointChanged(); } audioFileProcessor::~audioFileProcessor() { } void audioFileProcessor::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { const fpp_t frames = _n->framesLeftForCurrentPeriod(); // Magic key - a frequency < 20 (say, the bottom piano note if using // a A4 base tuning) restarts the start point. The note is not actually // played. if( m_stutterModel.value() == true && _n->frequency() < 20.0 ) { m_nextPlayStartPoint = m_sampleBuffer.startFrame(); m_nextPlayBackwards = false; return; } if( !_n->m_pluginData ) { if( m_stutterModel.value() == true && m_nextPlayStartPoint >= m_sampleBuffer.endFrame() ) { // Restart playing the note if in stutter mode, not in loop mode, // and we're at the end of the sample. m_nextPlayStartPoint = m_sampleBuffer.startFrame(); m_nextPlayBackwards = false; } // set interpolation mode for libsamplerate int srcmode = SRC_LINEAR; switch( m_interpolationModel.value() ) { case 0: srcmode = SRC_ZERO_ORDER_HOLD; break; case 1: srcmode = SRC_LINEAR; break; case 2: srcmode = SRC_SINC_MEDIUM_QUALITY; break; } _n->m_pluginData = new handleState( _n->hasDetuningInfo(), srcmode ); ((handleState *)_n->m_pluginData)->setFrameIndex( m_nextPlayStartPoint ); ((handleState *)_n->m_pluginData)->setBackwards( m_nextPlayBackwards ); // debug code /* qDebug( "frames %d", m_sampleBuffer.frames() ); qDebug( "startframe %d", m_sampleBuffer.startFrame() ); qDebug( "nextPlayStartPoint %d", m_nextPlayStartPoint );*/ } if( ! _n->isFinished() ) { if( m_sampleBuffer.play( _working_buffer, (handleState *)_n->m_pluginData, frames, _n->frequency(), static_cast( m_loopModel.value() ) ) ) { applyRelease( _working_buffer, _n ); instrumentTrack()->processAudioBuffer( _working_buffer, frames,_n ); emit isPlaying( ((handleState *)_n->m_pluginData)->frameIndex() ); } else { emit isPlaying( 0 ); } } else { emit isPlaying( 0 ); } if( m_stutterModel.value() == true ) { m_nextPlayStartPoint = ((handleState *)_n->m_pluginData)->frameIndex(); m_nextPlayBackwards = ((handleState *)_n->m_pluginData)->isBackwards(); } } void audioFileProcessor::deleteNotePluginData( NotePlayHandle * _n ) { delete (handleState *)_n->m_pluginData; } void audioFileProcessor::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "src", m_sampleBuffer.audioFile() ); if( m_sampleBuffer.audioFile() == "" ) { QString s; _this.setAttribute( "sampledata", m_sampleBuffer.toBase64( s ) ); } m_reverseModel.saveSettings( _doc, _this, "reversed" ); m_loopModel.saveSettings( _doc, _this, "looped" ); m_ampModel.saveSettings( _doc, _this, "amp" ); m_startPointModel.saveSettings( _doc, _this, "sframe" ); m_endPointModel.saveSettings( _doc, _this, "eframe" ); m_loopPointModel.saveSettings( _doc, _this, "lframe" ); m_stutterModel.saveSettings( _doc, _this, "stutter" ); m_interpolationModel.saveSettings( _doc, _this, "interp" ); } void audioFileProcessor::loadSettings( const QDomElement & _this ) { if( _this.attribute( "src" ) != "" ) { setAudioFile( _this.attribute( "src" ), FALSE ); } else if( _this.attribute( "sampledata" ) != "" ) { m_sampleBuffer.loadFromBase64( _this.attribute( "srcdata" ) ); } m_loopModel.loadSettings( _this, "looped" ); m_ampModel.loadSettings( _this, "amp" ); m_endPointModel.loadSettings( _this, "eframe" ); // compat code for not having a separate loopback point if( _this.hasAttribute( "lframe" ) ) { m_loopPointModel.loadSettings( _this, "lframe" ); m_startPointModel.loadSettings( _this, "sframe" ); } else { m_loopPointModel.loadSettings( _this, "sframe" ); m_startPointModel.setValue( m_loopPointModel.value() ); } m_reverseModel.loadSettings( _this, "reversed" ); m_stutterModel.loadSettings( _this, "stutter" ); if( _this.hasAttribute( "interp" ) ) { m_interpolationModel.loadSettings( _this, "interp" ); } else { m_interpolationModel.setValue( 1 ); //linear by default } pointChanged(); } void audioFileProcessor::loadFile( const QString & _file ) { setAudioFile( _file ); } QString audioFileProcessor::nodeName( void ) const { return audiofileprocessor_plugin_descriptor.name; } int audioFileProcessor::getBeatLen( NotePlayHandle * _n ) const { const float freq_factor = BaseFreq / _n->frequency() * engine::mixer()->processingSampleRate() / engine::mixer()->baseSampleRate(); return static_cast( floorf( ( m_sampleBuffer.endFrame() - m_sampleBuffer.startFrame() ) * freq_factor ) ); } PluginView * audioFileProcessor::instantiateView( QWidget * _parent ) { return new AudioFileProcessorView( this, _parent ); } void audioFileProcessor::setAudioFile( const QString & _audio_file, bool _rename ) { // is current channel-name equal to previous-filename?? if( _rename && ( instrumentTrack()->name() == QFileInfo( m_sampleBuffer.audioFile() ).fileName() || m_sampleBuffer.audioFile().isEmpty() ) ) { // then set it to new one instrumentTrack()->setName( QFileInfo( _audio_file).fileName() ); } // else we don't touch the track-name, because the user named it self m_sampleBuffer.setAudioFile( _audio_file ); loopPointChanged(); } void audioFileProcessor::reverseModelChanged( void ) { m_sampleBuffer.setReversed( m_reverseModel.value() ); m_nextPlayStartPoint = m_sampleBuffer.startFrame(); m_nextPlayBackwards = false; } void audioFileProcessor::ampModelChanged( void ) { m_sampleBuffer.setAmplification( m_ampModel.value() / 100.0f ); } void audioFileProcessor::stutterModelChanged() { m_nextPlayStartPoint = m_sampleBuffer.startFrame(); m_nextPlayBackwards = false; } void audioFileProcessor::startPointChanged( void ) { // check if start is over end and swap values if so if( m_startPointModel.value() > m_endPointModel.value() ) { float tmp = m_endPointModel.value(); m_endPointModel.setValue( m_startPointModel.value() ); m_startPointModel.setValue( tmp ); } // nudge loop point with end if( m_loopPointModel.value() >= m_endPointModel.value() ) { m_loopPointModel.setValue( qMax( m_endPointModel.value() - 0.001f, 0.0f ) ); } // nudge loop point with start if( m_loopPointModel.value() < m_startPointModel.value() ) { m_loopPointModel.setValue( m_startPointModel.value() ); } // check if start & end overlap and nudge end up if so if( m_startPointModel.value() == m_endPointModel.value() ) { m_endPointModel.setValue( qMin( m_endPointModel.value() + 0.001f, 1.0f ) ); } pointChanged(); } void audioFileProcessor::endPointChanged( void ) { // same as start, for now startPointChanged(); } void audioFileProcessor::loopPointChanged( void ) { // check that loop point is between start-end points and not overlapping with endpoint // ...and move start/end points ahead if loop point is moved over them if( m_loopPointModel.value() >= m_endPointModel.value() ) { m_endPointModel.setValue( m_loopPointModel.value() + 0.001f ); if( m_endPointModel.value() == 1.0f ) { m_loopPointModel.setValue( 1.0f - 0.001f ); } } // nudge start point with loop if( m_loopPointModel.value() < m_startPointModel.value() ) { m_startPointModel.setValue( m_loopPointModel.value() ); } pointChanged(); } void audioFileProcessor::pointChanged( void ) { const f_cnt_t f_start = static_cast( m_startPointModel.value() * ( m_sampleBuffer.frames()-1 ) ); const f_cnt_t f_end = static_cast( m_endPointModel.value() * ( m_sampleBuffer.frames()-1 ) ); const f_cnt_t f_loop = static_cast( m_loopPointModel.value() * ( m_sampleBuffer.frames()-1 ) ); m_nextPlayStartPoint = f_start; m_nextPlayBackwards = false; m_sampleBuffer.setAllPointFrames( f_start, f_end, f_loop, f_end ); emit dataChanged(); } QPixmap * AudioFileProcessorView::s_artwork = NULL; AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { if( s_artwork == NULL ) { s_artwork = new QPixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) ); } m_openAudioFileButton = new pixmapButton( this ); m_openAudioFileButton->setCursor( QCursor( Qt::PointingHandCursor ) ); m_openAudioFileButton->move( 227, 72 ); m_openAudioFileButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file" ) ); m_openAudioFileButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file" ) ); connect( m_openAudioFileButton, SIGNAL( clicked() ), this, SLOT( openAudioFile() ) ); toolTip::add( m_openAudioFileButton, tr( "Open other sample" ) ); m_openAudioFileButton->setWhatsThis( tr( "Click here, if you want to open another audio-file. " "A dialog will appear where you can select your file. " "Settings like looping-mode, start and end-points, " "amplify-value, and so on are not reset. So, it may not " "sound like the original sample.") ); m_reverseButton = new pixmapButton( this ); m_reverseButton->setCheckable( TRUE ); m_reverseButton->move( 164, 105 ); m_reverseButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "reverse_on" ) ); m_reverseButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "reverse_off" ) ); toolTip::add( m_reverseButton, tr( "Reverse sample" ) ); m_reverseButton->setWhatsThis( tr( "If you enable this button, the whole sample is reversed. " "This is useful for cool effects, e.g. a reversed " "crash." ) ); // loop button group pixmapButton * m_loopOffButton = new pixmapButton( this ); m_loopOffButton->setCheckable( TRUE ); m_loopOffButton->move( 190, 105 ); m_loopOffButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_off_on" ) ); m_loopOffButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_off_off" ) ); toolTip::add( m_loopOffButton, tr( "Disable loop" ) ); m_loopOffButton->setWhatsThis( tr( "This button disables looping. " "The sample plays only once from start to end. " ) ); pixmapButton * m_loopOnButton = new pixmapButton( this ); m_loopOnButton->setCheckable( TRUE ); m_loopOnButton->move( 190, 124 ); m_loopOnButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_on_on" ) ); m_loopOnButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_on_off" ) ); toolTip::add( m_loopOnButton, tr( "Enable loop" ) ); m_loopOnButton->setWhatsThis( tr( "This button enables forwards-looping. " "The sample loops between the end point and the loop point." ) ); pixmapButton * m_loopPingPongButton = new pixmapButton( this ); m_loopPingPongButton->setCheckable( TRUE ); m_loopPingPongButton->move( 216, 124 ); m_loopPingPongButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_pingpong_on" ) ); m_loopPingPongButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_pingpong_off" ) ); toolTip::add( m_loopPingPongButton, tr( "Enable loop" ) ); m_loopPingPongButton->setWhatsThis( tr( "This button enables ping-pong-looping. " "The sample loops backwards and forwards between the end point " "and the loop point." ) ); m_loopGroup = new automatableButtonGroup( this ); m_loopGroup->addButton( m_loopOffButton ); m_loopGroup->addButton( m_loopOnButton ); m_loopGroup->addButton( m_loopPingPongButton ); m_stutterButton = new pixmapButton( this ); m_stutterButton->setCheckable( true ); m_stutterButton->move( 164, 124 ); m_stutterButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stutter_on" ) ); m_stutterButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stutter_off" ) ); toolTip::add( m_stutterButton, tr( "Continue sample playback across notes" ) ); m_stutterButton->setWhatsThis( tr( "Enabling this option makes the sample continue playing " "across different notes - if you change pitch, or the note " "length stops before the end of the sample, then the next " "note played will continue where it left off. To reset the " "playback to the start of the sample, insert a note at the bottom " "of the keyboard (< 20 Hz)") ); m_ampKnob = new knob( knobBright_26, this ); m_ampKnob->setVolumeKnob( TRUE ); m_ampKnob->move( 5, 108 ); m_ampKnob->setHintText( tr( "Amplify:" )+" ", "%" ); m_ampKnob->setWhatsThis( tr( "With this knob you can set the amplify ratio. When you " "set a value of 100% your sample isn't changed. " "Otherwise it will be amplified up or down (your " "actual sample-file isn't touched!)" ) ); m_startKnob = new AudioFileProcessorWaveView::knob( this ); m_startKnob->move( 45, 108 ); m_startKnob->setHintText( tr( "Startpoint:" )+" ", "" ); m_startKnob->setWhatsThis( tr( "With this knob you can set the point where " "AudioFileProcessor should begin playing your sample. " ) ); m_endKnob = new AudioFileProcessorWaveView::knob( this ); m_endKnob->move( 125, 108 ); m_endKnob->setHintText( tr( "Endpoint:" )+" ", "" ); m_endKnob->setWhatsThis( tr( "With this knob you can set the point where " "AudioFileProcessor should stop playing your sample. " ) ); m_loopKnob = new AudioFileProcessorWaveView::knob( this ); m_loopKnob->move( 85, 108 ); m_loopKnob->setHintText( tr( "Loopback point:" )+" ", "" ); m_loopKnob->setWhatsThis( tr( "With this knob you can set the point where " "the loop starts. " ) ); // interpolation selector m_interpBox = new comboBox( this ); m_interpBox->setGeometry( 142, 62, 82, 22 ); m_interpBox->setFont( pointSize<8>( m_interpBox->font() ) ); // wavegraph m_waveView = 0; newWaveView(); connect( castModel(), SIGNAL( isPlaying( f_cnt_t ) ), m_waveView, SLOT( isPlaying( f_cnt_t ) ) ); qRegisterMetaType( "f_cnt_t" ); setAcceptDrops( TRUE ); } AudioFileProcessorView::~AudioFileProcessorView() { } void AudioFileProcessorView::dragEnterEvent( QDragEnterEvent * _dee ) { if( _dee->mimeData()->hasFormat( stringPairDrag::mimeType() ) ) { QString txt = _dee->mimeData()->data( stringPairDrag::mimeType() ); if( txt.section( ':', 0, 0 ) == QString( "tco_%1" ).arg( track::SampleTrack ) ) { _dee->acceptProposedAction(); } else if( txt.section( ':', 0, 0 ) == "samplefile" ) { _dee->acceptProposedAction(); } else { _dee->ignore(); } } else { _dee->ignore(); } } void AudioFileProcessorView::newWaveView() { if ( m_waveView ) { delete m_waveView; m_waveView = 0; } m_waveView = new AudioFileProcessorWaveView( this, 245, 75, castModel()->m_sampleBuffer ); m_waveView->move( 2, 172 ); m_waveView->setKnobs( dynamic_cast( m_startKnob ), dynamic_cast( m_endKnob ), dynamic_cast( m_loopKnob ) ); m_waveView->show(); } void AudioFileProcessorView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == "samplefile" ) { castModel()->setAudioFile( value ); _de->accept(); newWaveView(); return; } else if( type == QString( "tco_%1" ).arg( track::SampleTrack ) ) { DataFile dataFile( value.toUtf8() ); castModel()->setAudioFile( dataFile.content().firstChild().toElement().attribute( "src" ) ); _de->accept(); return; } _de->ignore(); } void AudioFileProcessorView::paintEvent( QPaintEvent * ) { QPainter p( this ); p.drawPixmap( 0, 0, *s_artwork ); audioFileProcessor * a = castModel(); QString file_name = ""; int idx = a->m_sampleBuffer.audioFile().length(); p.setFont( pointSize<8>( font() ) ); QFontMetrics fm( p.font() ); // simple algorithm for creating a text from the filename that // matches in the white rectangle while( idx > 0 && fm.size( Qt::TextSingleLine, file_name + "..." ).width() < 210 ) { file_name = a->m_sampleBuffer.audioFile()[--idx] + file_name; } if( idx > 0 ) { file_name = "..." + file_name; } p.setPen( QColor( 255, 255, 255 ) ); p.drawText( 8, 99, file_name ); } void AudioFileProcessorView::sampleUpdated( void ) { newWaveView(); m_waveView->update(); update(); } void AudioFileProcessorView::openAudioFile( void ) { QString af = castModel()->m_sampleBuffer. openAudioFile(); if( af != "" ) { castModel()->setAudioFile( af ); engine::getSong()->setModified(); newWaveView(); } } void AudioFileProcessorView::modelChanged( void ) { audioFileProcessor * a = castModel(); connect( &a->m_sampleBuffer, SIGNAL( sampleUpdated() ), this, SLOT( sampleUpdated() ) ); m_ampKnob->setModel( &a->m_ampModel ); m_startKnob->setModel( &a->m_startPointModel ); m_endKnob->setModel( &a->m_endPointModel ); m_loopKnob->setModel( &a->m_loopPointModel ); m_reverseButton->setModel( &a->m_reverseModel ); m_loopGroup->setModel( &a->m_loopModel ); m_stutterButton->setModel( &a->m_stutterModel ); m_interpBox->setModel( &a->m_interpolationModel ); sampleUpdated(); } AudioFileProcessorWaveView::AudioFileProcessorWaveView( QWidget * _parent, int _w, int _h, SampleBuffer& buf ) : QWidget( _parent ), m_sampleBuffer( buf ), m_graph( QPixmap( _w - 2 * s_padding, _h - 2 * s_padding ) ), m_from( 0 ), m_to( m_sampleBuffer.frames() ), m_last_from( 0 ), m_last_to( 0 ), m_last_amp( 0 ), m_startKnob( 0 ), m_endKnob( 0 ), m_loopKnob( 0 ), m_isDragging( false ), m_reversed( false ), m_framesPlayed( 0 ), m_animation(configManager::inst()->value("ui", "animateafp").toInt()) { setFixedSize( _w, _h ); setMouseTracking( true ); if( m_sampleBuffer.frames() > 1 ) { const f_cnt_t marging = ( m_sampleBuffer.endFrame() - m_sampleBuffer.startFrame() ) * 0.1; m_from = qMax( 0, m_sampleBuffer.startFrame() - marging ); m_to = qMin( m_sampleBuffer.endFrame() + marging, m_sampleBuffer.frames() ); } m_graph.fill( Qt::transparent ); update(); } void AudioFileProcessorWaveView::isPlaying( f_cnt_t _current_frame ) { m_framesPlayed = _current_frame; update(); } void AudioFileProcessorWaveView::enterEvent( QEvent * _e ) { QApplication::setOverrideCursor( Qt::OpenHandCursor ); } void AudioFileProcessorWaveView::leaveEvent( QEvent * _e ) { while( QApplication::overrideCursor() ) { QApplication::restoreOverrideCursor(); } } void AudioFileProcessorWaveView::mousePressEvent( QMouseEvent * _me ) { m_isDragging = true; m_draggingLastPoint = _me->pos(); const int x = _me->x(); const int start_dist = qAbs( m_startFrameX - x ); const int end_dist = qAbs( m_endFrameX - x ); const int loop_dist = qAbs( m_loopFrameX - x ); draggingType dt = sample_loop; int md = loop_dist; if( start_dist < loop_dist ) { dt = sample_start; md = start_dist; } else if( end_dist < loop_dist ) { dt = sample_end; md = end_dist; } if( md < 4 ) { m_draggingType = dt; } else { m_draggingType = wave; QApplication::setOverrideCursor( Qt::ClosedHandCursor ); } } void AudioFileProcessorWaveView::mouseReleaseEvent( QMouseEvent * _me ) { m_isDragging = false; if( m_draggingType == wave ) { QApplication::restoreOverrideCursor(); } } void AudioFileProcessorWaveView::mouseMoveEvent( QMouseEvent * _me ) { if( ! m_isDragging ) { const bool is_size_cursor = QApplication::overrideCursor()->shape() == Qt::SizeHorCursor; if( isCloseTo( _me->x(), m_startFrameX ) || isCloseTo( _me->x(), m_endFrameX ) || isCloseTo( _me->x(), m_loopFrameX ) ) { if( ! is_size_cursor ) { QApplication::setOverrideCursor( Qt::SizeHorCursor ); } } else if( is_size_cursor ) { QApplication::restoreOverrideCursor(); } return; } const int step = _me->x() - m_draggingLastPoint.x(); switch( m_draggingType ) { case sample_start: slideSamplePointByPx( start, step ); break; case sample_end: slideSamplePointByPx( end, step ); break; case sample_loop: slideSamplePointByPx( loop, step ); break; case wave: default: if( qAbs( _me->y() - m_draggingLastPoint.y() ) < 2 * qAbs( _me->x() - m_draggingLastPoint.x() ) ) { slide( step ); } else { zoom( _me->y() < m_draggingLastPoint.y() ); } } m_draggingLastPoint = _me->pos(); update(); } void AudioFileProcessorWaveView::wheelEvent( QWheelEvent * _we ) { zoom( _we->delta() > 0 ); update(); } void AudioFileProcessorWaveView::paintEvent( QPaintEvent * _pe ) { QPainter p( this ); p.drawPixmap( s_padding, s_padding, m_graph ); const QRect graph_rect( s_padding, s_padding, width() - 2 * s_padding, height() - 2 * s_padding ); const f_cnt_t frames = m_to - m_from; m_startFrameX = graph_rect.x() + ( m_sampleBuffer.startFrame() - m_from ) * double( graph_rect.width() ) / frames; m_endFrameX = graph_rect.x() + ( m_sampleBuffer.endFrame() - m_from ) * double( graph_rect.width() ) / frames; m_loopFrameX = graph_rect.x() + ( m_sampleBuffer.loopStartFrame() - m_from ) * double( graph_rect.width() ) / frames; const int played_width_px = ( m_framesPlayed - m_from ) * double( graph_rect.width() ) / frames; // loop point line p.setPen( QColor( 0x7F, 0xFF, 0xFF ) ); //TODO: put into a qproperty p.drawLine( m_loopFrameX, graph_rect.y(), m_loopFrameX, graph_rect.height() + graph_rect.y() ); // start/end lines p.setPen( QColor( 0xFF, 0xFF, 0xFF ) ); //TODO: put into a qproperty p.drawLine( m_startFrameX, graph_rect.y(), m_startFrameX, graph_rect.height() + graph_rect.y() ); p.drawLine( m_endFrameX, graph_rect.y(), m_endFrameX, graph_rect.height() + graph_rect.y() ); if( m_endFrameX - m_startFrameX > 2 ) { p.fillRect( m_startFrameX + 1, graph_rect.y(), m_endFrameX - m_startFrameX - 1, graph_rect.height() + graph_rect.y(), QColor( 95, 175, 255, 50 ) //TODO: put into a qproperty ); if( m_endFrameX - m_loopFrameX > 2 ) p.fillRect( m_loopFrameX + 1, graph_rect.y(), m_endFrameX - m_loopFrameX - 1, graph_rect.height() + graph_rect.y(), QColor( 95, 205, 255, 65 ) //TODO: put into a qproperty ); if( m_framesPlayed && m_animation) { QLinearGradient g( m_startFrameX, 0, played_width_px, 0 ); const QColor c( 0, 120, 255, 180 ); //TODO: put into a qproperty g.setColorAt( 0, Qt::transparent ); g.setColorAt( 0.8, c ); g.setColorAt( 1, c ); p.fillRect( m_startFrameX + 1, graph_rect.y(), played_width_px - ( m_startFrameX + 1 ), graph_rect.height() + graph_rect.y(), g ); p.setPen( QColor( 255, 255, 255 ) ); //TODO: put into a qproperty p.drawLine( played_width_px, graph_rect.y(), played_width_px, graph_rect.height() + graph_rect.y() ); m_framesPlayed = 0; } } QLinearGradient g( 0, 0, width() * 0.7, 0 ); const QColor c( 16, 111, 170, 180 ); g.setColorAt( 0, c ); g.setColorAt( 0.4, c ); g.setColorAt( 1, Qt::transparent ); p.fillRect( s_padding, s_padding, m_graph.width(), 14, g ); p.setPen( QColor( 255, 255, 255 ) ); p.setFont( pointSize<8>( font() ) ); QString length_text; const int length = m_sampleBuffer.sampleLength(); if( length > 20000 ) { length_text = QString::number( length / 1000 ) + "s"; } else if( length > 2000 ) { length_text = QString::number( ( length / 100 ) / 10.0 ) + "s"; } else { length_text = QString::number( length ) + "ms"; } p.drawText( s_padding + 2, s_padding + 10, tr( "Sample length:" ) + " " + length_text ); } void AudioFileProcessorWaveView::updateGraph() { if( m_to == 1 ) { m_to = m_sampleBuffer.frames() * 0.7; slideSamplePointToFrames( end, m_to * 0.7 ); } if( m_from > m_sampleBuffer.startFrame() ) { m_from = m_sampleBuffer.startFrame(); } if( m_to < m_sampleBuffer.endFrame() ) { m_to = m_sampleBuffer.endFrame(); } if( m_sampleBuffer.reversed() != m_reversed ) { reverse(); } else if( m_last_from == m_from && m_last_to == m_to && m_sampleBuffer.amplification() == m_last_amp ) { return; } m_last_from = m_from; m_last_to = m_to; m_last_amp = m_sampleBuffer.amplification(); m_graph.fill( Qt::transparent ); QPainter p( &m_graph ); p.setPen( QColor( 255, 255, 255 ) ); m_sampleBuffer.visualize( p, QRect( 0, 0, m_graph.width(), m_graph.height() ), m_from, m_to ); } void AudioFileProcessorWaveView::zoom( const bool _out ) { const f_cnt_t start = m_sampleBuffer.startFrame(); const f_cnt_t end = m_sampleBuffer.endFrame(); const f_cnt_t frames = m_sampleBuffer.frames(); const f_cnt_t d_from = start - m_from; const f_cnt_t d_to = m_to - end; const f_cnt_t step = qMax( 1, qMax( d_from, d_to ) / 10 ); const f_cnt_t step_from = ( _out ? - step : step ); const f_cnt_t step_to = ( _out ? step : - step ); const double comp_ratio = double( qMin( d_from, d_to ) ) / qMax( 1, qMax( d_from, d_to ) ); f_cnt_t new_from; f_cnt_t new_to; if( ( _out && d_from < d_to ) || ( ! _out && d_to < d_from ) ) { new_from = qBound( 0, m_from + step_from, start ); new_to = qBound( end, m_to + f_cnt_t( step_to * ( new_from == m_from ? 1 : comp_ratio ) ), frames ); } else { new_to = qBound( end, m_to + step_to, frames ); new_from = qBound( 0, m_from + f_cnt_t( step_from * ( new_to == m_to ? 1 : comp_ratio ) ), start ); } if( double( new_to - new_from ) / m_sampleBuffer.sampleRate() > 0.05 ) { m_from = new_from; m_to = new_to; } } void AudioFileProcessorWaveView::slide( int _px ) { const double fact = qAbs( double( _px ) / width() ); f_cnt_t step = ( m_to - m_from ) * fact; if( _px > 0 ) { step = -step; } f_cnt_t step_from = qBound( 0, m_from + step, m_sampleBuffer.frames() ) - m_from; f_cnt_t step_to = qBound( m_from + 1, m_to + step, m_sampleBuffer.frames() ) - m_to; step = qAbs( step_from ) < qAbs( step_to ) ? step_from : step_to; m_from += step; m_to += step; slideSampleByFrames( step ); } void AudioFileProcessorWaveView::setKnobs( knob * _start, knob * _end, knob * _loop ) { m_startKnob = _start; m_endKnob = _end; m_loopKnob = _loop; m_startKnob->setWaveView( this ); m_startKnob->setRelatedKnob( m_endKnob ); m_endKnob->setWaveView( this ); m_endKnob->setRelatedKnob( m_startKnob ); m_loopKnob->setWaveView( this ); } void AudioFileProcessorWaveView::slideSamplePointByPx( knobType _point, int _px ) { slideSamplePointByFrames( _point, f_cnt_t( ( double( _px ) / width() ) * ( m_to - m_from ) ) ); } void AudioFileProcessorWaveView::slideSamplePointByFrames( knobType _point, f_cnt_t _frames, bool _slide_to ) { knob * a_knob = m_startKnob; switch( _point ) { case end: a_knob = m_endKnob; break; case loop: a_knob = m_loopKnob; break; case start: break; } if( a_knob == NULL ) { return; } else { const double v = static_cast( _frames ) / m_sampleBuffer.frames(); if( _slide_to ) { a_knob->slideTo( v ); } else { a_knob->slideBy( v ); } } } void AudioFileProcessorWaveView::slideSampleByFrames( f_cnt_t _frames ) { if( m_sampleBuffer.frames() <= 1 ) { return; } const double v = static_cast( _frames ) / m_sampleBuffer.frames(); if( m_startKnob ) { m_startKnob->slideBy( v, false ); } if( m_endKnob ) { m_endKnob->slideBy( v, false ); } if( m_loopKnob ) { m_loopKnob->slideBy( v, false ); } } void AudioFileProcessorWaveView::reverse() { slideSampleByFrames( m_sampleBuffer.frames() - m_sampleBuffer.endFrame() - m_sampleBuffer.startFrame() ); const f_cnt_t from = m_from; m_from = m_sampleBuffer.frames() - m_to; m_to = m_sampleBuffer.frames() - from; m_reversed = ! m_reversed; } void AudioFileProcessorWaveView::knob::slideTo( double _v, bool _check_bound ) { if( _check_bound && ! checkBound( _v ) ) { return; } model()->setValue( _v ); emit sliderMoved( model()->value() ); } float AudioFileProcessorWaveView::knob::getValue( const QPoint & _p ) { const double dec_fact = ! m_waveView ? 1 : double( m_waveView->m_to - m_waveView->m_from ) / m_waveView->m_sampleBuffer.frames(); const float inc = ::knob::getValue( _p ) * dec_fact; return inc; } bool AudioFileProcessorWaveView::knob::checkBound( double _v ) const { if( ! m_relatedKnob || ! m_waveView ) { return true; } if( ( m_relatedKnob->model()->value() - _v > 0 ) != ( m_relatedKnob->model()->value() - model()->value() >= 0 ) ) return false; const double d1 = qAbs( m_relatedKnob->model()->value() - model()->value() ) * ( m_waveView->m_sampleBuffer.frames() ) / m_waveView->m_sampleBuffer.sampleRate(); const double d2 = qAbs( m_relatedKnob->model()->value() - _v ) * ( m_waveView->m_sampleBuffer.frames() ) / m_waveView->m_sampleBuffer.sampleRate(); return d1 < d2 || d2 > 0.005; } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new audioFileProcessor( static_cast( _data ) ); } } #include "moc_audio_file_processor.cxx" lmms-1.1.3/plugins/audio_file_processor/audio_file_processor.h000066400000000000000000000137311247673406200247340ustar00rootroot00000000000000/* * audio_file_processor.h - declaration of class audioFileProcessor * (instrument-plugin for using audio-files) * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef AUDIO_FILE_PROCESSOR_H #define AUDIO_FILE_PROCESSOR_H #include #include "Instrument.h" #include "InstrumentView.h" #include "SampleBuffer.h" #include "knob.h" #include "pixmap_button.h" #include "automatable_button.h" #include "combobox.h" class audioFileProcessor : public Instrument { Q_OBJECT public: audioFileProcessor( InstrumentTrack * _instrument_track ); virtual ~audioFileProcessor(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual void loadFile( const QString & _file ); virtual QString nodeName() const; virtual int getBeatLen( NotePlayHandle * _n ) const; virtual f_cnt_t desiredReleaseFrames() const { return 128; } virtual PluginView * instantiateView( QWidget * _parent ); public slots: void setAudioFile( const QString & _audio_file, bool _rename = true ); private slots: void reverseModelChanged(); void ampModelChanged(); void loopPointChanged(); void startPointChanged(); void endPointChanged(); void pointChanged(); void stutterModelChanged(); signals: void isPlaying( f_cnt_t _current_frame ); private: typedef SampleBuffer::handleState handleState; SampleBuffer m_sampleBuffer; FloatModel m_ampModel; FloatModel m_startPointModel; FloatModel m_endPointModel; FloatModel m_loopPointModel; BoolModel m_reverseModel; IntModel m_loopModel; BoolModel m_stutterModel; ComboBoxModel m_interpolationModel; f_cnt_t m_nextPlayStartPoint; bool m_nextPlayBackwards; friend class AudioFileProcessorView; } ; class AudioFileProcessorWaveView; class AudioFileProcessorView : public InstrumentView { Q_OBJECT public: AudioFileProcessorView( Instrument * _instrument, QWidget * _parent ); virtual ~AudioFileProcessorView(); void newWaveView(); protected slots: void sampleUpdated(); void openAudioFile(); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void paintEvent( QPaintEvent * ); private: virtual void modelChanged(); static QPixmap * s_artwork; AudioFileProcessorWaveView * m_waveView; knob * m_ampKnob; knob * m_startKnob; knob * m_endKnob; knob * m_loopKnob; pixmapButton * m_openAudioFileButton; pixmapButton * m_reverseButton; automatableButtonGroup * m_loopGroup; pixmapButton * m_stutterButton; comboBox * m_interpBox; } ; class AudioFileProcessorWaveView : public QWidget { Q_OBJECT protected: virtual void enterEvent( QEvent * _e ); virtual void leaveEvent( QEvent * _e ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void wheelEvent( QWheelEvent * _we ); virtual void paintEvent( QPaintEvent * _pe ); public: enum knobType { start, end, loop } ; class knob : public ::knob { const AudioFileProcessorWaveView * m_waveView; const knob * m_relatedKnob; public: knob( QWidget * _parent ) : ::knob( knobBright_26, _parent ), m_waveView( 0 ), m_relatedKnob( 0 ) { setFixedSize( 37, 47 ); } void setWaveView( const AudioFileProcessorWaveView * _wv ) { m_waveView = _wv; } void setRelatedKnob( const knob * _knob ) { m_relatedKnob = _knob; } void slideBy( double _v, bool _check_bound = true ) { slideTo( model()->value() + _v, _check_bound ); } void slideTo( double _v, bool _check_bound = true ); protected: float getValue( const QPoint & _p ); private: bool checkBound( double _v ) const; } ; public slots: void update() { updateGraph(); QWidget::update(); } void isPlaying( f_cnt_t _current_frame ); private: static const int s_padding = 2; enum draggingType { wave, sample_start, sample_end, sample_loop } ; SampleBuffer& m_sampleBuffer; QPixmap m_graph; f_cnt_t m_from; f_cnt_t m_to; f_cnt_t m_last_from; f_cnt_t m_last_to; float m_last_amp; knob * m_startKnob; knob * m_endKnob; knob * m_loopKnob; f_cnt_t m_startFrameX; f_cnt_t m_endFrameX; f_cnt_t m_loopFrameX; bool m_isDragging; QPoint m_draggingLastPoint; draggingType m_draggingType; bool m_reversed; f_cnt_t m_framesPlayed; bool m_animation; public: AudioFileProcessorWaveView( QWidget * _parent, int _w, int _h, SampleBuffer& buf ); void setKnobs( knob * _start, knob * _end, knob * _loop ); private: void zoom( const bool _out = false ); void slide( int _px ); void slideSamplePointByPx( knobType _point, int _px ); void slideSamplePointByFrames( knobType _point, f_cnt_t _frames, bool _slide_to = false ); void slideSampleByFrames( f_cnt_t _frames ); void slideSamplePointToFrames( knobType _point, f_cnt_t _frames ) { slideSamplePointByFrames( _point, _frames, true ); } void updateGraph(); void reverse(); static bool isCloseTo( int _a, int _b ) { return qAbs( _a - _b ) < 4; } } ; #endif lmms-1.1.3/plugins/audio_file_processor/logo.png000066400000000000000000000061341247673406200220310ustar00rootroot00000000000000PNG  IHDR00WbKGDC pHYs  tIME20iTXtCommentCreated with GIMPd.e IDATh޽kYϺ}(#ZF-X{K/Z/h4~F&~h6MMlEJm- a̜۾wJg=0u1a@f|Hx\77:+hBT 9hǐW@= Ehڿc7gV|!?_T I .7;l6z-!>@;9ē Y} -BL0`6޷֠8g@a9+u g ض^>jAS5-E@=UbzDT3*eRZ>))xg1҄D݆M!c;@Uqn0[b5blRW("S"5¸PUbL!"r3G;~l<76SJ Y@5H CužveA\Awqycilr7zz86Fڐr @Vȼ}iȈ1Q~q0Ϟlzmf@7 xg m#[:P[{LAw X+ҡ[yg  6CD6$3yql#-r̓91B)=t;|kbaaP+TȴmHSXFKv!j z9)%ٽ][p֠5yI+IOsж5оTETFfEz-Ӌsgc\+(]7֛3վtZ0kBL]au_.7V.wifmFMSF/l \,)%rgu0~ my j_J bRˠPM1(Ͻךa [KRN3l#h^Ij !%:3go*Hx.Pk "`R5-l_֪&ie2ߵ͂0i"q)s?3E{YzOP*]* i6D2线S~V p?\/~ϹaO9Ojh'L7qwGtPt*L@9BJ6E .[|uޑx͏Kmk߿\a?z͑cuiڮhVu ^ͻ6QIBBigΆ5bĈS‰|߱zv%Iʰ}xI҄D9*[{8gY2_0$E6b!i *7cvѫ[<}1)MAAJJ6Txg2AALka\5 e/Ҍ7?ym.Skr:!*!&zg\TM`aP/3Qd"ZP*2mƄwqҦ֬k>{礕aeFQ0\/Yö>EֹKtz/Ĕ1R7&D<41ls}=YNh@wi#pּHx.UC IݢCH}sQN\$DjG<*EɲdrvC|J]ƤLQMF&rbeHBL]~@jupdROH ss:iDVuC"I6>0@6 nz"aeސ{1"F0FƩJq]B1Q5QE"s l>t`M9:ZjG>D.Qk2oi@u: 3Eb"ĸ|u}̤n10LƉKLpәà)n  ''&LIv=& FR7WOkPaE;&bO^9Sx%?*7gRxK5mE ]CJ"Cc !DFSwYU/CŹ>2' ]| <'~x4%=ak M !$㚺ܥn1Fڰ"DE0(3J̕H^c_Z9RnTԯv婭fʿziRĚ]OZFUCUUeUy3ߝkrms{97y˴1sl__uxR *!*seQ5Ihv$*seF9ʋyvm]DhmhcO_ڌ<*g8~rxh졣H bAQMi4)\{ i􉷊^[d@(ZuZP4A,ݯ|א/H<+_,_}oyd\$ˈv%+ߝ}29/zxMm$]^S #cm~#?wڼ.^y9֟{wq\׮VOɩy&}\J)G .A, ),23>4%.mN82  |Q<6U_b/.458  .458U_b.ZegAZegA%*,*᪟%*,*=%fU`b.U`b.㦛VadJ"#*))"#*VadJZ\q n nq]ZZ 3 e e3 ZZ 3\U_bU_b]3ZZZZ[rbIENDB`lmms-1.1.3/plugins/audio_file_processor/loop_off_on.png000066400000000000000000000066001247673406200233660ustar00rootroot00000000000000PNG  IHDR.$bKGDCҿ pHYs  tIME )& IDATH  ZC4 c1  !7 {O#l #        ,  nO "wZ+" z]-#nO " ( B;-  B;-( OF2 OF14/# $   #4/$ v +3, %<$;3,  !^S?   ^S?! !]7!ܼۼ8"]!  /C=/ }pU󊝼 3  .䱼 PF15/$ 3 -   4!0>    '  Zl܏&IENDB`lmms-1.1.3/plugins/audio_file_processor/loop_on_off.png000066400000000000000000000031311247673406200233620ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIMEk{iTXtCommentCreated with GIMPd.eIDAT8MZZC""" \ru,𞫊ZTZZZnZFZZZʵ`X 6JNX/ u  Z}/{uZST.DTSZ$$$7#$7 6,f6Ӱ<PTT&>VZUɵZO %35[cZ ib{QDDDZldª{{{І$& ZZZ c\IENDB`lmms-1.1.3/plugins/audio_file_processor/loop_on_on.png000066400000000000000000000031311247673406200232240ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIME3& iTXtCommentCreated with GIMPd.eIDAT8MZR7 ǮZ7OӼ '$ * ɫ{N  .4϶ |K *rE @E. ;+ Su|Q  #( .R;$Q '8Z8Z4U&@ 36$A/ 0 !:(+  ./ 1D1ōQ;sFaJ 3#  ݞ[%3519  iJ+mO.3U k 5U4, Z|h8%IENDB`lmms-1.1.3/plugins/audio_file_processor/loop_pingpong_off.png000066400000000000000000000030601247673406200245700ustar00rootroot00000000000000PNG  IHDR[bKGD\QJ pHYs  tIME !IDAT8MZ  ^a Z)Wnv7} ^+HR",:{zyDh7;-1 ))- 27Oz"< /XD;7 \gb??QX  19,8Cb00 @&;>1;!+k2:^l,-jbZ>]vx< #"     ZV D ZXazX*[IENDB`lmms-1.1.3/plugins/audio_file_processor/loop_pingpong_on.png000066400000000000000000000030601247673406200244320ustar00rootroot00000000000000PNG  IHDR[bKGD\QJ pHYs  tIME sƂIDAT8MZ  BsÝ.IŢAh c"""!4FF¯ 3="""""y\:W^D 5 9 2&_eU7SMf>" YQ7$59   !+taEM]LM(F:FJG!9=vY:TYA'    Gh  )  5Y.M Z%uó:IENDB`lmms-1.1.3/plugins/audio_file_processor/reverse_off.png000066400000000000000000000031311247673406200233700ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIME+G iTXtCommentCreated with GIMPd.eIDAT8MZZZ F;FI lP!*  1 U-N\`){ k~b Қ&pVOT}naswo"#VSTZ ,46bTZR3+{ pku1 U1 U?Vfj'M[^jZ1.68cɴT TTZ &s eJBc)t[TZ6TZZν"}IENDB`lmms-1.1.3/plugins/audio_file_processor/reverse_on.png000066400000000000000000000031311247673406200232320ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIME+s{6BiTXtCommentCreated with GIMPd.eIDAT8MZR7ʮZ7O8VиR@*%!-  gxwhE fd= Y"!1EǦ $ >5"j[: ($ mE#w "9Я {Yڽ # iY7 6V ucE .LrkA &;  aT3'! #  ü *1!VdZS.IENDB`lmms-1.1.3/plugins/audio_file_processor/select_file.png000066400000000000000000000031311247673406200233410ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIME/'CF>iTXtCommentCreated with GIMPd.eIDAT8MTT LtSZ1*`-8:bœY/(_ª٢= UnhrHй(24?[2*xtnYot( Sgk\Ϋs+68%߲˃ǹ8jQ4{FIENDB`lmms-1.1.3/plugins/audio_file_processor/stutter_off.png000066400000000000000000000031311247673406200234270ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIME,ۂiTXtCommentCreated with GIMPd.eIDAT8MZ7Z= EX/(VyXQ]Z>"$FWlp^>ZZZ|= = ?>>= ?= ?Z53+ΞIENDB`lmms-1.1.3/plugins/audio_file_processor/stutter_on.png000066400000000000000000000031311247673406200232710ustar00rootroot00000000000000PNG  IHDR[bKGD pHYs  tIME,XYiTXtCommentCreated with GIMPd.eIDAT8MZR7δ2NʮZ7O ~n7%:%;ɭ vӾ)B|Acz0Pؼػ g\@bojvZ?>>{IENDB`lmms-1.1.3/plugins/bit_invader/000077500000000000000000000000001247673406200164465ustar00rootroot00000000000000lmms-1.1.3/plugins/bit_invader/CMakeLists.txt000066400000000000000000000002331247673406200212040ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(bitinvader bit_invader.cpp bit_invader.h MOCFILES bit_invader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/bit_invader/artwork.png000066400000000000000000002754661247673406200206710ustar00rootroot00000000000000PNG  IHDRZ= pHYs  tIME9.'` IDATx̽Yu7CM]5twHv'(ɢ$m#HH<JFX@ Ȑ$0%"Q4)'5g\5ܚ|oSwϽMҔ`(^{>{EE@*A+MTMMYx1ƢB)(PU%R@; !RH82>WBD xR @%$BT4JȄ RH+ fW DH!|T %$>x@ڡ >#!~;  0>B|s=$Z&yʺN>P5Jj$V j%ƻ|ﱾ]+)܇A / 4 >"|\qW= Ey ǵiC hf/@GF|pmf_Ol&>=b4N44u,RI6&s/g6yha8cB!fÑbnJ+~d4`ЙQ55[!d$Jc8L5E!)D\hJ#XR(CP| A %%(%.xFB@ 3#P-Zh!$!x$Z<8J@4 )v1CIBjm7zlLJ7&@  .[/D!i;Ϡ/bJw{.i''Qc-D6XdnnGi y xu %Jƹd8pJڵXI y`ҷs#H%8B'xRqmx,xheҘRk=B$TuI. iNIBəc53gM#8w22%M3"x$ I!0!f xGpIZ.Wn]aq~zSY/X]Yauu,K~qIc*:AtRclET8* RaG q.I 4  $A)w lzOp E oZu ^d@VFA0(0 Bxz<j⑁d^\ `"`x)Q 5P@$5 @'"+xK,/rp,"Y]cm}4U\vxBYOI 14 Jo7F($JuCȌ Zg$!+IՂ&d[ID-8S%JN 4޶=CV":pQ" D )i?#Ez dDB $:JHU `~~y-{u؆,HTPƘH"LІRA C_l>^u¤. :p쎆;ozݢs: weK]634*O;i.+ o,%TuCR j w%B !RwRiExB]Vx# W<:Q dK | Qc I oBxbcT8 ,>M1 kcO3gVrp~eRN@ 4 IA p`t4q9췐~J5NLmH4]Y''XT  R)AR*LXBW7RFGˢecL7~J]6$y^'n(4*U(ȋİQheS= ]b*5W)xzf8Ee HkC`:B=G^o(^^aRN M&tS78HEȈ7qْHxT!kiì-d6jZC 0^⊓xkqC8GNnaC]5EF:jОB*d"tBq|-Lm:~6Q $8QDwyb#ZqF1`Li Ť* Γ$)BNIF4TeELJ[P{ +BbDd/o-M0M6|<[/f|*TӐ`n!IdٛCH'Nr6nBg"?| E`EZ.;9A,G KXsMnn͂W#ܻw9y$3I;"ۡH3Vȋ׮0G:L&#tR$ ,-)夊4%[J0U=I%;T%A#$!i)b$Q&આnԠ`8sE?o:g#LWD'$.x8 %S\h KtγÝ&8&U (^d2a&xPIKR=4eskl(B@PJKDHEQ&qŔA8J Vsl =ɓ'i{L)EH ʪD"Nb/}o=,識\]~dy\ <>8|T[#0n3̭_ !8^_k5k*Ë)%Z "S`魞awЀ!׿ēp<~%qLcY^\;kW2* &;E8_!B oZʧi9ek{ h^c<,-=^|Ev6w%3pՔ*R2%ԘFH!X|8 6}Fnj!#ࢳ€Tfu1}$\hp.q`:sx4#f<"oq4uCץ)eb?J2am8 s \} dNwodt:4,Mщf:0NRb*VdiF]x<K Ktׯ_g:PUti"_#SLc@E huI{rY[]f6IJT$4ѐ._cZN+O?%"\@$1g-Tr1,=4+~?dg8gDZ5y? KRPԶ1Q^! *H#JAل Pig~|~J6Ez\5 ظv[7ڦ6| C!K{ -eD6U4`kO{{vvHDd ݽ=s KL)"T+PԶBzE]W4UpnS-Y&Y-A&ڸ8~6ޑNe bhZWG#>&['!vgaTIrDgn~J kZ%)^ (u)Q-i(Bw@;8c5x\@f(s9yKP 1U tR!w7ijȲ8Dj$!Iu԰y1Mu4hO'Nd8'J/_k_;1?{BigΟ?G+֊a=Ԯ ~=|^4:T!C$RԓhB(ʲ#fTwJ|5=dyFQtX\^ IVhժ4&P7 qYwqُsbSgza-Jxs)M9{˧ƕLngbak{'.>h4klfl5~⿧H|S%xǿsc 9} &Yp{%%^x:.n`Og2)z'cy<# mBx*"5uEغӲp22q?( X'ö٘[y&Tg/iyi>A5{D)TI?c@D9OQd,/h8⑇&RB۷nsUzK(yiN-)'v MݰGUHHm%&-2&cXoIӌD'3>HIEGc2p4M:a2uT%ʺbg.eS3]E)9tW/37s9ޡF(Z(BGu3n™wԇ2.#{i_VOJEV%XX)XZZTٟ{?96]a~~c׿q!D,M1;ڢڿE>R) N(E+3HiLC7U]"_ T!`EH߬.3oo!!2& S|W 9io>'Iu4zJy" ;POLcg+ZvfEc}ehQN]G%ƶcCXm툞MwI$I^/r*{{qEu&:A2iFQd }FSt%;kh ?Ѱ׌u\t?=xiExDTYIo'1HT^$}˳|]rۢU9CCGx~%Zx֗iao#KW Y&uB0up$2TlJ4au\/+{챙1A_'\ni6Z}/5׾ w.=xw*Ņh%/HWU<%I"\˳lWR~@pUtn[%/}  ¹'((7%}&;P⬺jWϠ%W}:;_1|3'L -;TwSH !=Vο|n )('u>1)NOcX[cISНӔdO+BEvV+'V1 t:KVr LgV^a'>)nߺd:'E('KР\I@w@R>x"̄!E"M3j~[%ʎ\y_;666xb$a+_XH}1PiF#pXT$ {,|obik-v;p\VH';0_:XpὟv6sg 86_sxhK4pb[Xa 3 ?ă?󫭁9ҁzi^J){YoYq_n>?=۷QI™3g~Ί`JMb{9X>8/XTs3EÜA9SRJoxv.}cbV.K&1s9<.T = IDAT G=Ľw}6UY+Wʰ'Ǚ3g( =kT7wsVXufc?b3d0kǟxk=5)y{ݡn ϝe8Q\,[tFrut6/[?Aܽ}]@/9%0Gnc[B;9YǏ;q!qcR̙q'˜_ﰾi-;ΕV>O+_돾cŇ MS/~݆lHWrN,wfYdz ujΏsܻw~_; :Zةs-؊OzE.O=76npq. Ŋ k)DʀR+~tΜܼqO8񖏴{s9yzNJjv>\|/6^F}t4a0S7 #MA?!,pz"94_ 9C /κ,/9Rq\ O?6 yqN-hXoc{UY`riK>䱃#8CU}<[?c~ tRśɏ{L) TuDuڣ_7Ï8ᄳy?r큏':?*f LH)]RxE Zgmu,1tϸa҃NSQ__QtRdPOioeZHBF@£ƨ:ԡUc *AH.ft:!њg;T( rϼg s;~Ę8}nƘyaoG}r:e<27X)*>pݤW$Iu,"<èᝧ:<T"_}`w{}[A$v 'd-r>q<t9 N|Y澵oZ~pSK'&,~읔NiJ'H{ˇxDlE e&.+K(('S՛$ݬSOgg|b_yEQP%.\fu5;}9}Ҍ4Kg=!z#N[d/A dlMz`eypBEf_ww?>|u9& .Q:$jZ͊utpN65{R<x2)K`a91Hm~;v;e(3\HNJ@CkE$IҚ풙EݳEAMU G?uv?C!- xՕUo(jǤyN/ޯU?w3gr5.<\{}F#677y~xk78Bp[į"_r/?_i@k9>ω'{.NŅ {N;WK/gwg `mumۯ|OHӄ76xcdYQ D ؜#I)^ًʷ}/,Ņ b z:ێ4kC< F7?qyΟ;a_7y: $wg;SO>ť/37?lj#roNG=?7>?ggg;f9,/v x $xgcKYa%!6C TuΝ p<ѐ6|đ]>Mhz @/OĚmzSqmkqa8Ryŕ_(:l:<8ACpdUʃ:u%Y#SE,/.ƃ٘Vj-cM $qG[c,7"RYRƦf͚Lb$Hk1j:RF)icsIGş\zM??18vlUv9>wXӨ6X__g:)RYn]& n"LD :Ͻh;@r} E샷fWOw\41 +KѸӀb޴ Tۯ9x00 {!ǻt)Z'\@SMo 9i\m EQfi父ZHmwk|oCLƢB$DR# $ j)IK !ue̓LVx<{[f:HWn Wvr qLـn;XSu!mcH@۰P}qi;;PE᪆o7w6fQF,Ȃ}d}펅ڦ%gD1e)hUnnc3LhN|}{ ܺu !JIL)G[;v c ` pw30L)&uxdDΟ,Q,k0O޽{6B+aF-c#,{?> ,//\"ֳ{8kCBŅ  =ǎ#DBmajy[w49ΗsK[oP>u~jW(KoMۢ(njd9!s g hl1;6޳qlk`^K2-q<УoJL]bL1ƴ5S;0*X{0\1bhg=tL~E8k\{/E:'Olmo@x:]ñcPJGϏYAUN16vSq< bdws+(udB%Q>4u֪oMqmU`8>~D?{ƀmXdb@[;#& w 4;~kowLh4)MI9rLnrCr \J*w0S NQĔ1HFhF3!= HJ_UW]y߿TFkW" 9ȏ B6TԴ zu0THeh]j54~suqm|M" #&ɷ<]gJ;ϓֿ[g}E[xD ʪ5*ſJ^ȧvYv$\TE~1e&N %X:ݎߙ;_*E$VeI3:Uo~ʺ|Va y^YB %XQ] GeADZS:ӭ٧:RNt#9z$8-5X%Q.v!HӔ wtBS|)Nn?`oo8NX,t:? XCՔX~Wo~ύxv|'IBSwV޼W ^ Q\.)`5US{;vV!1͘N醒lw=;HuӦoe#FӦeUgpvGS2w@XGkt~{_5~ׯ/{}}%ਿut7?Yj#& KMѢ굫@18g/Uߤ=[9f7,;gGgWw︸z,Oϰ'sͫ|?loosMP:KvB($Nc"n ݻ}kMCw8߹K[]peY Cn_C",ה!Aϱ'8aNOܿc+G>$;\|}񈦷S3}٤2bys *פ@ CqƗ??W>ah,;y' T ;M+"c*Y򋧟gPU*GؿyH5ش.jɠS7I ~#_1b0hѵkf:m4NI WWɆֆI8R֖FXk,łdB_ڟٶhaⱋ0p 5V{'Ng„s?s,o?AMif?Fy !4$ ڠ(pփ ޼cՃز;\7c,t~cn QB>KGmuR^\|۷nu8=Ν;|3azPgM$-&,V"+ 6W^$8{sƛ/ڢaztvz/}$QDF^a:Z1Qч߸E>_y>ъ~~DL%pWMtKM/pϸ) '/ɍ`xj1+P|;`fKYn~j՗@xY.H!ۜS>MaD" a:=cow(JH=Ϣ]TܼygAv 7nܴoIoڙ|Lh'O Lz{ϩ/~,\N_E>Xl0fǚ|F6^,YWgKm-GE0˭C{~߿RtTSm47g IDATk'oO H% Je@Xϝ5[[?n]8pRgkJk[qIbq4Tq;y^BIb:?q뷥}Bqnė_&c1lC\7S_,.ܐ4ۇ5'&kn^,| n|`v<{~Ktxk| 6e.B'2<5Bdk~ EmƞsˈEfP%ӏeU} -w[QP\ ^ 7X?1F/~Ze<7 4@UeusVPc7) ڶ>-J-ݳIݶP.:(0g]bC@Ԭ놺M(9 ;l\.Wpԭqi= u f7#*a Dȯipc3jskW^:.Og_~LoiZ5|Fʌјlʽ7uUWyos;v>@WDDm1' /׷0X~峿]'CDžeyڟ"A`N%/wQO- |Zz/`@H iaELg՘C˞38:|o^xnp`Xq 0\'Syͯ U$"'n'b~-wyG/=ٜWEѶBU +/֬xn@,x[ge!㩤 0`{NEYAB tW z4U1"oN*t#ڳۄ^o37 ]a cmUh>U]%7&Bq׶?K[ЎGz\xh4hhkPǬlő]Py.FZt Ki-7)U~6t Nֱ&HS3<0+N;ZCi .)~䃒sAӾD6E],T+r^`>B[ʩ G +|"Z+fZn#8r|4OBSPhƽ OU:'6;Z-=,x<̧BAO};=TxZG"dj=UAmf =%[Lc<, t3VPF7xYVJXTk'$`6 ZV2cYhR![ )g1m8>We/Ht;[1"2Q^z&I#8jn|y青)Y2p\5}鞕p"e}!.Y8Ok0$BIȳik{mi;) K%ѵ9[6o#H0R KEC%4A7%%gC"qVgY9T8#持  HKR|~4g|痮! l8cq#oRH)X7;1`╯/^7x*U\ܤr~ɺw(D6 8POwi#Pt =,3rb@0RָVqDnJ5'U z> dI#Ң@:EAue&c% HA$jʵ%PU@]0ЛWi4CєMMgeJ(Iz=0b~6iR^gc-4V b\2sڜQDG:)=fa˭gBp%t999%HVQրgul(K`pPtQ22Xˆ9jZ@ b8eiA}_1iu#u- .@ 8FkMQ"`3`+z]ekaCxr6,CCK2Y:ώC  d:8PUԴ HY0!QP7 ӊ#ӁjHR%YQ1={쏷B[ _UBpf|E<.#]{ZDNlJ!k뵧{.XxR6uW@D$IHwHb Nr@oa|!#4%b_`|QilmY死E'KPv?ME756 NjSAphUbIg+,3t[;,s~7xH0 ST\>Üe< Q2tR$E C R-,!YH ic%ߤץvrM͘VhUb@%^Zu@hvKwZSkÌ$FԾ I(blIOJP`q: xtȐ$Nql݀( FWޑFQB 񀽝=9Y` Ǭ5uE'ޞ^F)E|RQ2Έ" ɕ.kp"Ea a•d( iBĬQX/-+ېiχD!mm=S9ˡ\+ZI?c'}tcjMQZ?/1unG %gH^ߓWƓ1ӳ3,s&_JDJz$"Cj[Eқ+JB р|lFjzJ(-qesc ; }U)1zqUꆪ45Ҙn'X֬%H3٣j?]`ss=}z||z&!@,O "DDUU)PA@tPRi@?.ct `wR@RGIBQXi2 NcX'یb [8:K8(2q(IlEgإ3sy2Ev;\9›oIL]W&`cs[k֫ިdtRq~~ [[[u5Xt묪BE(RUfK; Fk?,n*aFՊ 0~P%Xa|}i~,ۣGjȶ? ȹh?>yDH6EZ$wÈ@yBxkc eF% 㿴sx\`"%N~s( r,lml\C/k9|p|:k w" Έ;) 6=n߹M M8%vٻl̦Snog7&,g:?o|rmgS0>^V%B zU]wS8l1lM]7qHs֐AX`qB\t tq(Ѝl![k~6[!Ji70EJ($|V**!tvX)W.c5.rv:%[,JwP"`e4V6n Ɉ^LJQx骹ؚLX-VqjMӥ,+"#]1lT@޸S)o,aE1FDqT"[a#& !U]1 Z74UC:J ˍІg`!NĚ (!=%|.+HHHj]hhѦ$J+Q')q/X`0~򼤩kݾnY$nw0IH,ң$LhܥG2$1yg88 S{GX X2CN?!PA45[wo]WN10LXNڡVid۷e (rU=?t8"az~.(D,Yd+lcil yKrxI C(%4aƋ*@n I=XkQG|/0:%JyCǂK[kkHADe4Xsb'L0Bugqz|Y>6LG^YY%Lf Ic0`prrv<KףzC($"!ǔw_j#Z+H:]1HؤevDAU38NX-WdyF? P!qcFTyڭY1uYP0 Q*JN*YCƢ-UB",dˬvԕ9RTYţC<|*EEwޤnQ<8"NRҴ c(!vH.qء5qI .`^d0`MѰ< ܸ,z߇!MޥU5ysiNs4ulb{o-gt=FBWk4U*dkc =l5/Da]Ҹ"@h!ŢܹsG^ݥ :%[֠}BFNx՜j#4 A;8D(v5 NbBBqE)QP֚X%bաt\dx̸;dw]Ԭϗ<}y=/1BZEuX.F* ՜]ʊxd='/+6Dnp| zCk|hJ`X,3jZN0V 砩5 w44ҏNJ `[ʐ3S p0!sƂ+S ' dDbl(Kff,K& e^2?3($A! 1dezD@(%(nիh]svrhcģGGh]Pwݧ3H,W+a3L! ,Q郎9;)i,2f.Iu)Daź# 5`%Ab<γD7ޭU*F$'^16(vIk |}A$S677o75 ,2<{ci n|5PXEɔIB&QZs!i/ b"_0Ҷ, CY ˥OǓ1Q'ZhUU.h {ʟ;/:eE J [lL&az|J'LO|o)'ǔUAUՌv|oskxW52YV<:=eK޾ \}:v*㴁 Y͖IV(TUTh!68fOHb[jFhJtH  R 8k. h: _o `EWNOYeF7$p(YR^ f\ãG\{rAvԚZ {#NOϨA(E^,V+ƣ1nG`EV0`<z0GP%q*kz~`$Raԝ RJ&tɱ/ z2@H*+0S oAD*$rz.G2`ssnCTj Fh? cTЪ0m J$V#ąձ0"_y,:0ʷ}iWGikQַ *EqvvFE z=F {;۞R4tʶP55s.Q [ \Ӟ/UM;貽9asz|9'u#N~ ΰ/QWLK.I!P e:v8&!{/tlNTMC'H+_7-B]SZWUqҡgo'r/Fb\B-xj-Di_a_ & hUSf3o4MS![͖Sת*P$W{)$MSQ{v]^m<* {LF̧s0),#Dz),Fo_mU^ 6&ڢ+MEH= l-04!|q4=b^>켅-7uR} 1u ڌwgmk?ЦOeU1Q"/ =Q(B{ٚXwX(l;;X?O(y]G@D))+:n[9crekd1ϘkϧDQrbX0Uf<* ?|@h4a ݱv`DgSwvX.ylzNu倓cTwy^@]T(ՊwĉqĽ&>Yk6Oqrt>lylf83XW B4WC C !'` !s [(%TنhEZ_ֻeu$H-pހ(ȋ*Y,Y3;?' "c(kLP]kꦡJybNIR^ֶ=`nrI8dZQ55:g0͐2`8t1FJO֩k;qĠg63q} EYt{,K%ȋCFi',N,J*d @"<lk]aዧRvݴ>PJ<}Z aò.s2_ gYF&L69>yD'SNd@e hab{U $ Nb\R> c5A( P* /gV0\as.ܺłS8e;[12i7ab9) /4 y`wX=<$E?T~d2x)c''ifo AY9iC.X9i3^2A20c{wx1Wpe''c Ւn7esw Hg:= k0 T` ڍ!S JD* DXAc+ "P>itXBT!KLmpRa?gs&ܽsj|>CE[[lL6I`*BÄuطv}&vUэ31UQp2Rt;=>K f9J2T =Va0Z%AZguEEA+\t *ȳp@g-%.0UUE1$Iuu僡}[b8)%R A#ÖoVjd Xڋ LY?4~46 S +*eC]5C"xNL*FI-LJ_L܀2Vh15)a@S54FDqHCUVuEUte@7 I2_7`M> $a2Nܺ{4\:F ZN>d8*źytr X3k,^&WsϲCU NON1burf1ɔbk IDATC  |`,i& ,jRhkHz>mqC,Χ D(BvO :kqf%8D Z0RHPU55TyP82yK!)r8!^锩!9|4_&P{P5 ;-NO9cceq6gj s0$k!3:шMw&m*FOu, J"Yj1٫}?)%u L:?(ISktct:ң$B:qm<ߍ D'C l ZYo-Qh T38x}Zۂie2Xf8ɑgi%ar> /mlc5QBx6ct 8cN54!֍/"%86~.N/pʊ, *t;qa8.}_lomR5/>66|OHwMpr{ֲX.n޿|"75A )d!Iå>ۛ̃y 0rΥ "+6X#N7fZ\.plϷF> %m\ÇHs4ɪ^IE֍FM'U ,4Pylc|4w$&1=겤,+f98aXZM^lcM1KFԺڕgFlnlMÛox7@10 NXpưsӜN8)ö`W75~$q9`0RKFD , Z3oPU}8 Tnu{_@'MNӳS8HX> uC-`iҒ<}F(ρ- &P)Y k A]DuHVH{ulƕ+ט-f-qU9NNC?JJ*cXktz]=14(*1TPWRIbjPTiˍkϲ̖KFs5ċ9yY, jbkwAOٔln.2DE1Rbv|e1h+ggﳹ3!mPA)E^r*>*+zT%]"c0_cX7Z7DQT|]( "i4dB]6f{o.Ik׮ 预|>?VhI{&$Iٙp=vt>w,k%[lﰘ͈nk YkaLwf4jggXP9Q!j/mv( eU![1aG~G)ՌI:-)Qk+,D;6eVcU|b$Jc/ ,5UYqxzAԥl*;ܻ{yMV r*VYl5go,uzck{ms0w0dQ޵SF)Ɠ F>uY\v|NYDQ@E8kXϗ$ILY,ΧT 1?eU#pZORc Q9<.6Y5FX YeF%UIuGŜE& "jcWFd[M.np[,9eIQ/uoc9e-$kxRKefewf Hh՚H$`:#z4Z2"c\I#YՒ&Zs'v9\̎fVj]Jl9bȲ $t2quRxv[KP<+(7k-6JaF|]J Lg% %!Z$iN$)8D 9nooq}q8p_|9 HfcbX#b/"q ]i<.Wr $ $&bU %޼y0J'~0"npc(9 \/P'7ר*?)\cb$\(r&RD@Vt:"9 c:B$T$ZlPT/Ph ƣ71稫7G8:$!ht9ǘƾQEXXVxX< 7W0e,} GTc<K0&ct1lmF:A k 6dDXo6XI;EQ:=XOE͑LS`'(FV l-7+w P}t+X"pΠPkDd werI Tp$Uf)l@4A"&g*Ǜkhm\-pw{JHGc0aj.>B NOO[KW95;r@,^\7 g8P%)#qsR(X>,pxt Zk|`DΦB0b\*7K(<\`^8x4>:;@(tҕ3A|0Q82R n1Ew_"()\Pq4IMptd^tǰ0JRXŶ1WYlPeԶ"b8>bpJ^pvzׯ~O> pw4Iq߿^{Sg(#⮺h5d;|:X?| `  hm][VKEvd,kIݬAcNݳ1GGr /a$EYD 5# [(+`t c m ̉C^ *P,Dt4.2i,;r?:9nonq4?x2z׷7xx|x YqDS(!\ / XV +(!`QT9GYUS6-fSf"+eV˲5șڙo-HI6Xn(\rӱ3#XEǻG\__s%),Cn6`3ꬖ;:ޡ6}y*D (v 1C*Sy ~`Du#Ndu)BU8>:6NNpp--q|r%$ʪ-ƛ@(QdMnq0a5aZc6% J;˭J re]9jZ֮f6Iq.s592D\BW`z=-CUURJyt7XCvb"N 3nfU>ןkF90ę>YJNwn~UUiIj*Tu3gɶvx<`Aeڀ|4l6%_ArjhdML~eM$)gGLƓ|-G,k?b:"G9e ^^"?/Qf9nn0M1wK5k{}\ٝɝѓ۳g)g-?e=9'zv( I`|%NcX/Nc'O:\n0FUJsTez Ad[]bmP%8KM 4 cuFcl-O.>E^E'x Ţ悷;ܯcsxV+4ˆdvb!}K\tiXLcA{ܭ_wk7WO.JJTuݾJ T?ƴs'~4SJ%X0mp=q |~L]K*wW=׫TһyMZy}͋~y( !Q0s){~n\ ǵ}r%{;VkXX*9mw8==Y6(F89>'|rvbWJ0ZCW*%*Am U⣗X0ML&XWȫ \7(j| ]ϵAͼ'/vsz5q_-\iB:\MIkx ’  ,l0$-7s Fz3WBF#i@ eߏOf}?Mo< dQ>zb|{|*?^9?aq/pqU lNN@`>?BY( ,|w[0$ `Lu}0&0EN9D(vW;<+Ͷu fU]E!P`eE(δ)Ke,l"~}h1Ǟlwޝ~F{HF?|eg?dfAÇv6 b'@D5k tUaSdOYvslduh% DQ yCrQy!)ģ)0pEQv6H/),& m$E:5TjL!U \ӝŪqSdTT 8NPz@'hJPE;$,OQ41/e0MSg8Aw0x]o OE~~8yvOyR0:(QUEe?T..Sq[_'HPU:<+|ӟyQ#*!Jnĕ|6zջ+)0̼Ӕmh΅PQj AΣ+ν#10DJA@% 'Xn7Vx廬9PXpwS,9bvEkk.߼AS V'8(<b'fB3(d!"H"!=Gg?wv`Gέtܯd#Xq1X'wϻF~;XQw ~=u?ߝOEB,7ؖLƋa|kLf7S1ͳ5tU+?,FYk $;M{$ 8'`+TU]9{ɜ>'$%.k)#c2 ͷPJAE7X712wf9{?R{xu6A,~ ~tv}dS`qt8fo ҁ [o|~kԥ˅¦pO"Ea{<חOc&ceQ.f'%f0zӿ'F 1vt٪Mg`P֕sA ,,P0c9,$wO.kԺi9sXUh1=:h, ,nQlrW^ǘ}C7qd`0V00]YEo>@$y  h_6>p<.8Pw1^ r9 {cv-h<儨ܽav`|3áv\@;8dFG8 IDATjS#'fƸL^8ٶ親N/kx9gϬk PE;DJ(R4ļg㻛;^c xwMz>6 Fd{15CLnژyȎw>; zEZL?׽XԶ<'ax+Obvpyd`>-a7u!{Nw_a仰om# `̷n"BԸD1pMzE;:;d6sx"g(\;Mk蠬+kYQ/qQll[`@W5X@X {{r~$G^{"$ ?L&9v:56 ޽{JbX\1>Q;0rf"d-ʢfnqgTЕAUΒw' J& .12B$"0Ak "*n/&/۷(n'0T-:V~O^yxg1x`>fz&*~xmNzÇ0{Ȼ/fo0Ͼ^Wyr1^+C^zMd",5bZY`@;hBT]WC6_(^Mpc4a]Q`@,jkQ6 8shy:Lb#hӘzcCO. ܏?t&0> 0wWB͈79t\^ôykANaƧz {0,{2k+{7S[[y*1RH#6o@mj2O_,1WwMFE1Zcybi o /JMw|&wx?uymVb78rP1{z:=n|a-Nִ&#rSKfn{d]k#ztvDuږEiKhcpz~kQV9 ~e5a2/cG$gO!=2{яVG.؏8D}XC!L^CKǾ'^'P$_?5.߼fuP@mT2:lii k"$,VGGX8{GjY!A 's󊠵vSklx}ā֝ 5!c8]|U/ޓg{x413{SF#dfx?&So=^Ve+j5ϴ?ɣG<=r\ ljYd¶*Ü;|SbN6+$xsh.eVaaӏ 9*BDT#BDwHm0:o1xÕ?:߇'Ze-&߇۳yr8z*%wZ2ۛ/uAN)0m㓕;9@{߿c~]1Sxڏأyn rFZxsX o~1oӸ(1owM>g<fѦy&[6;gPpIop{{uR)noPYCJIDkd q{yh}˽#s_-=8:rڅ{C|LأT>}V<49{8{;{g!zi?=<=Gzb{gs +l6\b\9i:D OE?\aͮuUOY%dĚPkXm1 -o]'XP"F-Dq4=6"_^-\{[ <گ/ծ(]?`!h_}:yѐcѨ]1ؕ qm(<;#lYq1xob|R=9wC?q48|Z?hg|Gc sHr藠6>\Jp&఺e-&ϘOrGXpWB\ewZדUYq<6p}sY1s$&sL3Ix_"{Xf9 EwZbԟ= uZtqD\f5_G,>Ԟ.s<7}dP? f=^ Ǭ2ІsO$%x=up|p~cV!R3H.mߋw~l%=V=~aW˻Vo1<kyyɏHy𨏹կwa N񭜗5q7"'uv6Ț k Z;sd)W8O>s / 7(uU9m4NF8Lɒ[߉|p6Ii6ő0%u4l{0rozW\fɈ~k`l$NԦi0zg۾眻_U31jEԻ$QKbxV$k1 s-Ov[U~Du!_ȂA04/~9aXPu L)UgT~go޽6'ӟhr/[Yb[Ew9$h ovf058ذu%]!>s il8F޺Oy{+5rOy5GzRNoyD#؃wkob7ח("%U@!0B&pcoE,VEu0N'0ZV( DEzY5\wԇ;DvC xPuE[L=I;ޓQG>f{1&PdYr̽s<>}+&c7c 'I &Y3ftf;1G! t͸y!@vxփ.w0zobA=;qz<=aW~eE (5t2FV5޾{ 6t /Op}wdȒYX;ѱ(ir"+(|8F1`t`'кv)}EaG#ҁ[$kN +گj$W<9p}xv6C N|X>Fb3K qDv{8\NmMş=ۨ!F}NnVwr*>࿬̏fFE_ ϚjEA珯ZHD 0&1HK-~ }!,QpedQU:o {)tX&(yV"/*B{-&>s|Ogpy<ëw{#H&1 7טf8,rhakW>LjZ =b!nxq?wҚ~5 FU>z)6jil[Jغӊuן [{] 깭U6SX:19Cb\ünn;4qib2 uqq|:LKF:ظ~!&_vs֝y8 Mo З 1&e'9vn=/ЏZ7<#%D:M 5p,w-\rH! y1@uQ3|`"?՗?o=6 O/9޽~zjXh$u/zmRRh Kϋ9 b3El_|/o`e&!l~G p‡gOĶXd'|~eOq:k&3gF%i'@On) N>a=C>`_rtc@Vd~ *Uܿi7B6C- b  7 m;-O0͐1^xFBݠU{KN#*TH!&OQ6/QI0ogëONF<9!lM9PCjbhz=LZ{ Z{ VK_h'U .1벗u_Ϸw|=>t]֙}ڛ3i'٭um3ܕ.LJ6hxIu?'01Nj^{O&8)\{z[CF;̭T 9tmpwwfvCr`_|1a<= wr 5npr|'7J8X?jj buv!ۣ[S|#0<+?fv rߞύ8l; EϤ0'W]=3ma!9zc{}Wx{WlNTڀވ{\]]aZݻwmsi@ -v 9a\CXP\~;urxqU x\?_d#ZC d:/_8vԜ,;0Lhמ瓶s睖@}6-&|z}f'61Y+Ow:``MnyOG,^{6`g)u)ٺͺ}_3čg6bUl/թfN'>^yM~;w?m6dyoE'}|P_#q3tZx 1~oz9W"%Mg{1TC$W`L!϶O!hs&Ѷ^a4^c^OϾ¯k| 9 nnq{zX(%Sr:xd\恶{_n130l$X 5!c-ĸ\Y+G;Z򸇡ۘiC! &yr=r%!*֗"GkR +YwS|[- xv&ddz7:,H9MLyy;bZPN]|4?Ff/o(Ÿ|GH#,^]`ZA[dx(qs}0b'r0!B2N'*AQ>gO o Nd/#ٹ*ɺc45`^vzY[Z=hPZz-v]W5TaWY+ENjJUKՆL=S11j0һ>؟qysc-O~f1q~V` P{: _r_opy]Nl%l&_rWoC0fƯxu"ϳFw|Ny*)c71oC(O~Xw{Ͼ5t<_ã]=PܮwYǃ7lFY!&gͻ14ZsσC^v-&!Ovx鴏g)~l{:a6t GMfX׭ V0b?`:p VݾrnlgIO򣾶~ԯ?O7^#ύGڧ ^12I*MQ?KhmDYx9vރy^ 3^PV ^^\ TuDYd׷2H<Yt:/^t:E^R`f!wnrх@m[nyǛ!/.s 0`(^Uo`F=ܭ6\s2ĘRB8䪧-2Rar15 b5XO}̿?8njp:[.ϳSƏ}=obWt`tw|X۰ë{'ctzf<7!G\yq+n3d^~Lu݂^ q%X"U[b.`-Jx\< Lb {,Ka\]ۡ'50A?qk6=7k1vlPa8h벝f[=yxf!&Ѻ5zu b̤Ilq:e0xq;?ubcv ruQjϩt'j1{uog%(8]09C]uVrF{zٺ}>`c>a~|vS|W65zT dM|%hb VӔ_#Yd(Q״t"fK3AEHU*w]E/,ٓ}vX/_Ξތj݇t!,?Yk'< uP*=4=(=էုcOóg7__`Ku>R*o\"bFx8 IDAT5H_޽{w)Y4cZ ^=2 udf_Oac5LY޿{7_xѸW3^z`a)No|+O]_~,(Na#qzrphK(&*˳shmPY8Og TM1<@07E>P`Pd9DVߚ5d3 쭶ݽ \HDoBuy x1|țsG h1|{>&o0 1 xw.`tُB 8|S=.D<ݏe>Y) Chc ~C1 xqrtσ,ОzǻӁK/_ GLx^Bv< 'QMY J]JIOqw˛+ kl|QUF1T5S %zk:L< %Hά}O(k:;8 gZsD`uOLZ1a4nZ0jGn1V}^}k QW}L^7ց65z=Zp\=ܚ~η7Zu;LOҺ$ Ga8xxv.AxuRǫ;uH߿)X0 osFw?,N _yyS"Bkl*5X.0ZQ! YoPB^dδ l<Huh96_\7crsTp/xYج6 Erм<' k`kƞ {=`sֈ7@Wg{xWZϞޏ YkdFOOtptfo7v_bgn`Ptt4!Xo7%!"߱e\A>J*D"|of1 ׷ڈ p.E}X/Z=@kt'cn2kՇ} ::`Wf!efYgX,W3,v̙}a⅏iǛ}^h:r 0{c -Ozw;̾𡶾{n6C^Gj0}h'?3š}ɮE]V0Grcɺ܀L$N00M'8;}7WWO'2FY N.88pxc l,Zܝֽ}ռGi!cUt<_xp`h!dm!=v*RHcTewSS.ȸzsΏzKzZqI!مL/w0 R8B^=n\cB/1^Er{4]{(.ud/0b( tm]r㸞doW\c#UD*_`< oax> (Q[ܮp4B98c0 Z k |uSѮno^-/_# <,;%2`@`/Ye߽Anjt>??";?'xsH)X.dz)Jpx‰U̵~U+Wj[EyP 뽦b sc)z==OΞS,+>zpK–g44a5 =>=n`b=сpz:oe~>C_%V޾}jcoY4s8+Zb00/?5B?7?)$F$$~susʑ&#JZJYcM1v}UX-Oo;L:k.? s>yw0obj`ٴl:j 0 `zNΦ9x_FÎ0EGC_zj'rF=]N1K?<5<~Dg@mww!sֶM0``U`cp!n ̼@dxjE'ǐ<—/^~ׯ_!Te"/n_|.7YH)9-UH98:RIcHaz!NG@}Wo1:5|xPg~Ü ɏT_U7un[S;^ն~A}:=JqSY7i:4SMdM#+3m©'J ''xo߽t:C^dcF)n'a>azIS5}F$0%CDҡDҀ-fwM3M{]c1"_Z0W_ʊ'z~hae^˄$Ɉs MF魮(`brrua&s]2D'HRY6܈JV)}zk =#WM>jPU26qL`z8YaXn1x Znjݡ2ezُt"]S[?8 wcS5wzH.LFI9c{% q셗nMP %:i12 `3c׶esƘD0 |X,N/&Vk|74_|5 ۫[\__9ś` AyQVH+'rP6a;>$5e2G^ȇ>"GFO6Q:I޿Ľ<$?*Fvdl;04tsƥ~>=iϴvr4 df973oα䪁 9`^f37'_s<=?o~Mr6iot%D!`^V/1_̱Z-0/x^GoN.٤̢zݍ2G릋Nw:f$z؋\LHoq%' Xxv^in˕uL 39_]^1b+ev>k0ץT[˼C5KPfwNj&Vzxhl&l痪 ^DǷk _E_@vx.|}>y/7Y@CwR#3 5}2|2^ l-zs2LO'؀"+;UY:J(0XM˖녹+8-o !Dsl𛯾鄮QUmע$(d'aB* <2Oh${K#͛dB){k'd\[Ob%b-`wl7>)Ǭ97U` y,Of2mZ!-\Li)Oɿc;~ gM ҸR(c 1(gpJ@ 9]⃋[,g3zހ f PKpq enw Ӡ}}qEWWe%\( {NrΗ櫬^3;j.򚯱ƌf E."^X;bkוӱϵ+9& #ck<<06r~2^]\)L k>ƀ"Zy|s3$C.Θc 78Z7Qcé ]ߣ*PWj\o8N]٩Q(1c1;\^\ LH1Րm-T hh]k^WqYy ӌ"W=tyUy TYByFy=2bJ}:s(NgUuș܏ۡ! "W ];0jfHDLn{ώo7xcf׳l &<|TzU宏jboסMr=~X>6ZyPp}9bɸnb0}kg}z(oS-t^7bUy xLю"h[h 3qy}nonu=(#x5;|Gs@kPnKU['xlA=NP ~UL1'+tRw\^o;!cK~Hc 4wQc=l^uN+6c{ħ%*9FlG LD jSu|8os/~OyW5151:>B)JBK%jc.]ZAp';\^\(%zp;[k[(e,)9W 1ѵѹ鴋}`M"]vvrKNX8vn.trB\=T&J:1ޏ1s<L~vn%eqC;__]32L~P nqu`l*սs}jgqL10//.&kOa^|J^aنo vds7_ 3Kza{櫉k1~YF~dV8Z[S>DEP@K떣C jܗ=XMl6+{A%-Bs:*fr⾷)0"@F+b{^;FFg4}eBueҋeL,ӌzXwMtp_!1R!2Ʉ+vë{woQtnVz15$zBQ͆qrLnC&_EգyQo6vxM?q5w?xG̏kO'-˜ ol9NCz£L:3},9 lR+meࠅsBPVP +߽{iq:v-]Ӏh&YT%c.l* 2r=/;2mTW%Lׅ ]Pne!.KMUƀ3@6em^iY wL7u阡fHQ].Kl`d @G>aUXeڶnjalz1:7c7N }^[&ѻUtm Q}(:y>졢 9dZ..Σ/g蔄2R)u4{o8V E@V#H5P8h fuopy}5Zك)%+K50D9Yym5(e頣'xIG&3 _Q?oNQux\^̸~ܟOL~2x5[/.&*w|:ѳcZDNjaʞ,ax;o{tt&D9ׯH7.#Ր}~ѳ5r{}ԓ "]=X/Y{3do[((0J@)γBJj3jvt r.lÏyzIo5޽Ajl9 IDAT(煲FkMWyP_Gl/0{TXG'wJo"3:^ 7Dן c7T5Kŕ!Ӱ1mo9 ?4 Пĝ2 ct9 qDcodWN_&w~sO:cxA|.5_nbo,7>7EK@e{\_.~=5\Govl R((xרg+CZ4-4lFS|fX`\~xnp{{ Iݽ~3TE_}>b}+]S{z((2bt<LՙLFn2V#-乆N0e4SDŽL^`t熩~L/H,$L2 i!rU?~>߰<~ue|fl2HNy y?^Bӵ83@i !Q0Ҁp l$)xD{jmﵦ9AηqZc;`yyO>޾}B *Qcl6ڟJZOmG#FɵPutq<ԛe rb=0;@L;ocGHz]\hHNGuuǜ~0ҭMp}uǧACoopp?05·5C`1a2r~}0/SnU_njn:<*51_pnͷXftvP{)t)?HS o{ (K+SRBJ$\!Ir:zJcH.8SgB5././~O??۷o|/q SN7VG$ʌs:7YsFIx#Y7>O sp13b"cbщ͋}o3^D^v:VWsW#ݚɩ;~]Ets(QJ|njޏ֫k >Ǐz@\{F/m?*͓w|}OnTLԣcX#٭'k[{ԏ=Ņ+/QoBۮ^JNf^oBu( {( B@4 ț:壟n>E6D~)ھqw'ְ>c[R3\,(eYj}w7`Ȉѕ!cQ.}ƛѻP>蠖cRRfL0!` յ cʾ ^w@uu{WjtFw]Wc5FOӡ>޿g7Cy9=\$n`)]\~B;_ݠ}nyF/D0U{SF7=T.1];F?Nxcppo~%j__AIfT2fbtin&;2z kKdJ?i x2p"cFU#UߌGyy'|/0#ƴo-2)3S?B]/TVx<f JkB9Nm 8V }cCqj0b{wg}k}\ZFzڠ%o-.kpƠ{h<_f}9_`{H3޼79V:F}FX_a_^!ҙG$cf9ͫkw̞1_SO3oQQwvr^}p>珉֌|?l^qOG_ JIGNGF'H^(Ohn!'mh"QG!`# (聮i@kƲ*bt2:]䌞f~q֣yu1#/;q}ӌ^ol4p <^gtE^2q+2^Fxˤ\,0}=飌z蜧΋h~a>hM@aMh|+oʊЋ&֐{$g .q`@Fwh eQ@Rr.v eۛwobh>puu((Ѕ?뷠JREFGMsC=ѧtt3eB ( ]n[]zY}0+Sw1c/fh06\‰`WНQU]u_>+&׀,3/|*ftF7nB-49.񺫨/ ./gt~܎GINGG\\ k 5R@4]KJBuEPiH)Ar(>st]OO%(8OeO?w=uOp=cC=eاvomm82,v$Q{ރk`n >}{ؐL4<@/1s=~3D_Q=DVI=f?uWhJ)޼y+e~Y=s\)`8VKskϹࠌ(V<==aqNBS>DG-ڹ'bDZ=0GEcg.e]uƿXcy>uL2zĔ&_q3ԣ_^!Ioqz~^n&y۽ O_grCf\Kz1G7o2F`ȁ^c;lar=;s>?K^wcywO@ʲ#+o6(CT mBCCP [k(Qv84GtmNQ]{Ri(J ` rcsZՍ^c] 圻 -<;qȌ_2L/^lCNV^v;Nr㸟:iK P4˔ > >/~M N\wCpvn{EqOM#-q4%y 'Cꠈ}R(AAjhoDK0FQ-Jl=.>g3\o~ЀDIUwwztAGEqDGO2чzs}/#FOL벽p>>#VWmFU֛wvȬL9dY=E^4zѸJg%f'@unlj^OGW$|漇lcBztE!'v~&nluy3u>^$}\t>y.4 q}G76@Ō.鹫Gw./=` ԋ7WzjQ*K\]^A:<=o@ ( { Qཾ5?O!›Ƿh7XT3(0\Xl{۶m »;uUb4XT{ Cfgt2ftDѢyMT1#˒1_Sz>ҧ<<}?U08)纥xdgFufJ? f*}J5\O2q!SK :~?{{_]۠:ư<Ā>C4mل{lh'W X]`&A`_S|z8#juG6>ʌ326Ït25qm|漻̸=M'3j׫ Z*l[t}NhO (e 8 hD۞ͩGӞ*^8G@Q(uEz(>lfFl|';hQf8vX/ V.3]7zY!Nlr3A\5bu8,Ƅ?;Mk93q9ǹrY Rd`b0{5+-'',wuxR49i9(Cd,SWC}5+bRf1|WehB{x%+5 @g?>cg[$SNŐg+o`ztqbxO{cI^3ϗ/^~r?7i;:{_be $_,}o0qZb1em/VQ/63d^lO חr/\7w9O>+0~3xӟsn&L4#ϸ2 WK<\*U^1xvK3XF{-X~ϗn A^=f}}mV;Aj~=G?8m{B^*=?.f9 J) Q P 4msz:Bk8ML/+ĨA#Oط  U@WXC*B0x;ft^tJ&b@7ys򑷘8]3a@!y~00&y;-NsE{5ՕE^$:82؈:9t^uX/4aGcL8֧"a]=:z4oI |rd> IAekLOLҸ^kzq.KsV`n{UgG] 8 pd&V#4`-F60VW MA)ֽ}3}c GZ >A玘G\vX I]V6 Ld%9:p\袱$]uEfuuϬC|WuxuY$:ʴ~.v2lOt*sϧ*Ʈ9Dt[HzȻ.KzuEz}rCoot :pw"00Χ&^d>uE:ep_A7R%9eV> v:Zڌq `@+wM# Ao9dy2~!Phh}-c4(*AkZ20Aź^dўZ6VGeXL{c'9S ruqDo43z9g^:3~̽z_[u2x[V>oچ]Ts؍?wJy&f]^!l~=Գ9NO]pjN+o{c3 u]Yݏ_4J 0bmvjlk$ (P8mo, c]ۼMSE]A6F ){H-1 MHj30ϣ~pnM( 7|E6ݝɫ)e{=G 4kFGPhJ(P ׼cPWC ѶP]qq}9`A4(!51+nQ*RݱNދ 8xzt]t]Ju ".w1(|`θ_2z/mxb˾NW32erXÚgbUre3<qStq@pʲ͍}'B?yc]3W/#FWEP L瓎+ןtq/+E?1(s4]2(+8d~PvMhehאh~ ڄ2|釨g@(0RAjkOi]]]GZJIݱh;%#p%}ɤ^l}:ѭ3n~uZqfrݎ[7>/z&d m6Ox5fԒ@OLß+o&>=^(j_oϻ| Z^D\5XkRxXbun19bȸ^ٌ-uwXd`\8 ]>0c}n3xj犻9^b|z?6Wxt^}Ύ+` c`\{1FzvR nob50:Wڄ|sžGa罟a :qH :7s]U|4xUUW+-]=xq>e֝BDY7 жGhZ,9;lQK5Xplh8NA%Ot4|XdnjÓ2Hy;f/\h {B\{3g:0aΈXD|nM[ƧsȻoKq,~;=3w\}#&Lu>ԟzm|:Yr OuLmu{.Ro;wp&Ȍe|?&LnR#ݞQF7S::e |]& W.c:lGىiiN&S09}ttN/f'P}2|Q٫wlxv"V'sLުD;z깕W=< Ln&>oyV;!s֟ 7cD|6n>&q֣94t\Hz{kepU<3~hN%$n2_`c L3(&1/,qwǰ_q[C0N/2o3fk]=zc&t~P|&/܄406Otmm烖Ai6'o}cv_$~ܶ5 ʢvëׯ{e$fU=˹u)U6 E'EUQBa(PMcu¨wґh)(qL."8e\75mJyZ5"eWe8F1FwWJYz$2$S8:E^oL/tjE7~}2a>t˯ogo>?׿ n۞>s9롾=땦H|6*܄:RRK4mv v0PB9w*fu(t-Nž1 բ6O>jV^}߽{ e{sp\c\W8{ B}ZE^qXwg^t36ecV'SurzM/!L8<7M}L${HyǞ , `g}=ˣ5)a5zԅLձzY[zV& cs{0J4 hu5f9>s@?PN#87W_ Zk,Kqu}ׯ^caߣ̪ .? FN#ڶ j2] 㪪눱x6Kuv$1{'4':[[;ǐ,g>dEL{+OⱫw_,m7'w^Ǐ;0O/Ht>&_rۈӿwv/\OWVmk}#gl3ͽw{ף篽2,KmndCOqѕRX(>- ;/~[;5{,A`vPy5C7`} ^bAKWoޡ{^w8jD) ^ߢm[hPԶ/y/;4#R&( 5C[S1Ljɝw8ҹIx=.i-.gL<03`pEË7Sux?Ș;ٱ.N8O2HЄElf-*4ʄeX _ N6Knn̈9t=b"ӵ7?5_Cmz=Bq)cgƪ3}F3 a Cey]ŭ7?3;FrNgtr{|_ơ8h{Ig3v;OG\,y>O/-k,5>c\__/=բ JQo`< .(3nB!j:fiX&zlEs՜I{zx&ܕ': ѹ)(;T_4i=uS3#`\hN qsBΨ=6&Gg<՛< [LGX 8>%ήDo=е^} x =ր1(D )Bw~pC]Ϡ~~jNjo(qNvŏ~PeywwXX. 8 F)c% :q^߁zט>#]8;'N;ЧE^ϰM\~L;wgfbL27n掏ovOt~r>00k]`l>֭^fe(c-^c͇$yѽ|{ &tiA%0_eQm3f(Kx{ M mtjBдml!Dp< eT_hZ'|ϻ-.oc3c3l7KHpD6 u:N' O=ðțݒ8]=ap@9ޛ"fLaL34c\ʋҽYX0'qf^z'h^ |9vCr? . yI[F7#į?&;e,|1|אRX ?>eU;!pb+c(C|J/DY`ӟ?1~,K?BpTUbѶ\NY|0Jvnbk*Q8"NWi@ wn ?c~9Q:בeۉӥ5Y$f阸s5Ǥ}2ۦ2·cnP,gmJdk[3e%n//'ln>n Mz 4eɪ<[Q|ݷ`tp}}' xk<<>>;((?K=KrfB 'g\>ד>N^:'}>ޏ sf<nĤ~Gk^8Ds/Vc3Η7/{3X;4S_7oZ+אq~ m>1xwLJpl;V>3pwz?C쟟]nM۠iZ{[XS;h\mzmy2gm6ɸt9NM&^J@Pg el'Λ&iw=տs~f yv="c*0wEa]u!bp~w@sjp|G8\^\`f|n[(9MӂSB: x/%;PQX/A W_~{R?1m[g?~7~;tFPL-hZm{`lL O\yv uRo iT#j3堂':;)s?M|2Xwčcxo? :oZ0q߉c60 z~|S"xt&əHzh0>s A:m"M2%k24i T0tx_Nh~7$9~{Vյuu50 уDhOK/$ u`VUYyf#2"rj է~~Dk+~_\.iۖkf9>{1bv`S73Kݔ Cޟh:`Hh/ڦ]__^_D:oq䣻Mr^cv~Kn͏w{\Dxgw0Kudgd/}{{uݾOymnnݶCW<3זCIwWǃ>x >oyqܭ6};x !8s/ڙ-:LEz{rWWsrzJY<}jb1gZsqqIYTUq}lDv z$Kt8O !Rbgb$KA:l=iF;] ")j-F|ߧ.wyTqo~{wy<~`g]aW+]>bwק(vs\[z?<|yin}_{ZvVk^ߧUb}Ǜ0:7;.idE zGӹ:bC/͸lHc#z b[jXYӫ{g Β;w!hXXcnB!?vS)-o|V־ON}jew}q=dj7b. Ϸ>iw:}^@-OǥɎ[n({ >1Ǔ+ [5@msam?:~ϻ[zx<ﷰǛ+my,ɓ W7Wnn899#l1@[$I,xzzn*,/VcRɦz#A,"#`'RJBB[״4MGB 4Ԟ=81{'[̾LoZGt0k3k;Z=yCƶt=>hc`aW01u{xb>>ރV`;kzΩm~=n Rgo{36mg;;}wx@wxUN`p{[b͇̯g445Y39==ꊋ iuQ?9iE"azvDP$f;{Yٽ 19OQ15nB O.^jh?wퟒ.m/vRFr=<-~9wK'!Cx^{r3{ZVXjrk1OX] "/vKxԝt7u1{V9)6O M=ԬnsyGyێs'_׿E=>][:[L_[O컟H{pWWO>7<6:wՇiӖw0{ch^o)kfktlC( |j KRdcQh8'o]Zx@)B;:mS']r#J"ƛ:~^ >F#]Lx`m<0U[moO1z_lcb'(<j}o;z4%*KR;h9"o"D. >l ݁mɈy`z{Z`x{N{ $VN eV>l|_ԢS{{['.b d |ӿaF8{q<cn 8ƯL?wr0-.+ZGd% hc\,:GA  /~s뒧ϟxqp8Ǐxf4mK]$ۀi(/VQhN{zFÃ\>rw,Kl'[;ĬnEUѝˬL'oxχd4#Xd4"MSRp~uE'MS<%V cl4f-Fx-ɢv~3F7^!Yoho1W}6;mG{_n?ir6g6}cv޵|~|y^؇n[a^|oރ4mv1w3IP[[HQS XK42N3tdNz?z?Z+tvJ)^~tÜZs"~>ul'1nc}-_8l巐>1i]]ܿ>!yoᐧ@1vag<7nwoj| k{`mmw<}=$ DqM+72dXt/z$%>$e ZZXפih8$QǼx!C@yl[|l1!b ӄ-<]tjxPKE}>O[B v7Ea;b}^:.޶vc 퇾YD?vp?'|3-lyǞNNܡcd0?}g<){оO\V[y0~m,x}LW/vB]]8l '? $I.@(./>JbӴ Oȳ_e4{\__㽧ԪӺ? _7bgJ?o A.?r  ā b!-M` OsOVV\x=ԣ0`c:og1;E|ax$x'0١{b]6>xZCXE|F6]HpztLq]+o>xbΪXG mb:'2@g(Zk̗񰃹7ok q|\t-mpZ}n h?L9=w~%? ﶇB*b>.MX 6t.b#Q*?Ziz>^$uE]7, ڶr|>q:<~>y0Go1E9rkr]}M(!HBEquuT1 N$RaG}m\cku-hꆕYuq;@X!0&uWë߃ٛ}É{1ݦ-b os ngv-31vc6O]v{A;埊ɷן|s|8 >l҈7+%;6)V$:햼Dk"jݑĪ~~1 '3V`л MJS xzkK4fqb- (<fc}fRmWcfC;Z˻O^9l.?]l<㺼1a[>vmޢݿ$j'bm}o{3q_ bu<co1?vcS珳Aa]xs)%xmR,, q;0[}i ,.b'Qd1ir|zʳ'Ob|>nj޽`0De3}.RJn+_B,M@B*Y+ڦR_F`h)/_ /B$m>K/^?~5>5Uy <$?f1g2p47__bտ?M-(V+ +~y{W/^Q5OG~8jNpt\'MS>8W8p9i,Ɉ_ⳳhLݷ1_=?N4 RP4AIOIkm@ щ۩y>DC K?j@mEe[*۩nK "`Q/ lO\di(5(s\2'|s~ǯo~˼Z %z/~ V%_7_~ ˏ<9{B]U|-٠Ǜ篹(V+!D%-Y?gҟ0_α8;=X$5o}iGvNoo4M1ֵTe+@WTn*m!:i N'H3K}.{-XWk)BF_$Oqc]݋6<՛Xo+YLk(bjic*pp~'"lc]jM'D$ܶ6e@kHdwS7It2pNl`;ܢ$IPWxp6I6!tq#Msm ^( PXLfѴ@'o>Xdc ?|ͷ$5Bqu1pwϱaX-_LO~)o_OroфϞ|ƻoYU՚sNg淿ߗ7s޼^3~(yq@|9c-m a>q5Opl@ZYzK.q֓$Y$&VT*v#{H"-quSQMt4$iGk\,|ݐS/y7Hi&  WFA5~o% _??2>:_SP x{ʺfX;eA/=_sy~|ųHɆnMRR-xr]R+qOǶe]̗s&S޿{6lGG#.q>ƽt"ī$~JWigQ!rs=HBhNHHNr U+?qׯ?gS?Y|7LO?՜6TUEUUJ(}%rAY7T57nJdP[o| p`yCP&Kb]`.0ƒ YUSPe5x6M]%xXk)   ,%773g8Y]\p|tl6Ç$^emT- Պ W4uK|]_3UUoXK޽}hW_}jc᪪YB( ͜|kN=up4"%{Tua-Ŝm;Lf]Jk1i%%4*UNuԍvCtwݤvtn`:$R)f43iEx]Oe5qqfN-ӥjEI QIWnɹnV&-\8oci`AK7(ЩW{;x<"R|pG\]_c+s$:/`*2;rdr,,+,mWɬqj uKH%89>d|{ !y'toT#8t5kcZڶ"Ct.`\Ɨ[!E * aq!f; /eͪ*)R$19;9O[Uh u&>ؖAMFM%~2|6Pu/A',gKOTuEYU$i1 2%lGzhq<śkIJdH)'ZS, ,F h<"ͣwY(m͕֨ P*V1DN[*D<#I 6H!1+U74MC#TuC568Q\`mABрG` %RcCreE"يl|£|<]1mZKdYJ\!uDٮiXKu]/Hj]R E4MkhMCSU_^`MAϛ7϶ шy+F!ŜrAԬW+7\mb|*h~/'#crNG\^^S~gTфlg?9✪,ƌ# r“Y,@(HFXmGikt(b˭@) BvE8؜xA 0u i/c:Rզo+B+f9V՚ղZ'qj9#I=N>n`4M 12PԦJsgsPL{}1 c YfoTsƧG|s꺢?_Y͗L>YuM]7{=^ȢREX}#HB(qclى:xW sS̹>Ǿ4Zkc>{bASdi`4bv}NRժEmD]2 JG> O@$ J+ Zi$%C] 8S9hLoX*w O'߲^/$i GGt*d'qWUu}뺠xE/˨_BJML&nnnx5RHV (48L%eyrd]WbͺHx8'=yJՒxG>{ϟ3fm;g(^svvŇs!^AoP:ƣ@Mk=JέBVB„-SVTu0VKӴx Rc<p4rvg | rr6Ci7'Z*ڔbq cZ޾lNYH oRx@Lض´qRbCdADcKYHQ_6> "o 2cK\|ga1{ zT]L<\zLxrvff䌤3EO=% 2QL&$QJiFS0UK]w,DC#I\E .sdVR`u 1MmW  u L&G\^^ŶuQ`ZCPQ`aK"ݖ.]_]BX\2cb嗎("qIFx~SaXKszK4{b]jPpL'Smk&)?>=;\fQW *29K\[mL)H)G'm ZR ~i ONPiFx:ȳb(ׄbFLX- &'g|$yc9㺺em!A(zY't㰺AxO8}rFfХo=`+F 4&@eRz}Z_*>0>J?sI.*0$bLc\4M1 HkQ7M,zņ!?կHx&r}s e]Q%^4IY,#/FVU%j wYaZmд yc5-Iཧj\Ҧiiꚢ(߰h;0!>s;y AltZk48H]ͯ cȟWuY#KSZĴjUDWgxs|=Ji5$Yic {Gp,h%(5y ?I>KVŊerY$YʺD+ɇ F}_~`ԋJ2c-UY39ཏ8JTki4p~Sj|1ϹYp\.Ҕbd]_N/|9G#ʦX T-Ǜk~}cH wSO/_uϞqq~NX_?Y.>{Mp.0F#<}d_x^\A:Lt4c:% 8["-,F!U]d1Bm YZh[ QkBbq*vSq0#uAaA;klnEhdZNLdYƠn0ΐ(xъe Cu,ߏ{ɳ|kz@k$E*3zYNYD*4д-|ƪ((% Kl6 \ir]ǤiιXoPJd-Z )mHUuSSkmYV E_l MRdW%2\ H|N4Y+D:i+PRuTOO&LNLcueGPӠRG$X$yaZVp M₋\ jt<gke͉H9Җ-º.ŃRY7kLp5X2Jp49_2=>aZM (]Q ( Nۊ~7 ~#&1U0AhL$3I>DaKDilE4Mp[%Wj"T&8LnWjT: 9s"|8ƕ\s!Pf:㽧5c ֹKQo%nbB,٩-#ϮsqUvR \/BJp.ֶ-Z&VU뢠(ֱ|((ƴ()憦n.(h:IJyKzሲ,ѹ"rLbx%Z%L'F[c1_2cnNMې zdIJqgQ崛1scmFeT:u]ؙƠ3ֶ$8b $'՚9:KH⒦{}9xq =MYG xB?iEK g_5Xxg/HhR1HE4&q7$Qxk@*z4h2IJF Ea*䫯Xz>д qꛦ勗Ló-% Aq2I|`3~zM޼~h<{O6srtrV DB?d8ꓥ Z9Ei MDN{KIWM鹠]|ub() }ȲI;>|ߩ)C 6FVܑ6$bǪq(v-6Ewnk]8Y ZTe16zIIQ*X:uAFZUEZ:xOYU6&vf3ZC\Bm8^FheMOB*zZjDǝJԔUg)77qJq<=gѴ-'ce4& قD'v*je$c:iV/3lBԈ; eI+$a2sxX RUkIIu, Gin IqOzJ/Ѷ5i#$*!tI4ZhXI h2?4dI r]ⅧZz!L,% *t1mT<UWxJdp4'OX/;6'g}˳90&rN~?`L9(zBk[z5V}iHAfMS:(':C!oP Mlw RJݿa3 dmb nUJ-g-ûK !!.9weMQmTB6MmӴnt6BpѕUi]1%@IIfplJY\\ ųga`]WYq"2٘1IN!ɪt0"KS&њiia4L6ưZ[P hq uUs3㝧Zƣ!ٜhDe|vwLGg0ʇoٳWQjZP6ae\q~~ǫUEpq :#Gܚ"n)qwmb6\h)ilg)-Y#rDeU :巛6m3句o'b+(">mw ucV[vB ܚpt tqEJ=a)- ._#J1-MUOFNV82$=m36NH|TcjrsztҭkU 8lVﺩCF'6In,7^Jtu/r+g yLd2꠶5z=4+ZӣiiX:UNd S)Nڦwy{~NXkX紦i5Bi,C'݃5۹SXQ)+IZSCQǺ8esyQޫ -e u[3 tv~fT%̖n37L$O^1GGS>̯OF[rw&$]Ww1N))ί pc[l&2tvi-mE.t։ao]v\/v_ 읶߮s*GT )\PU8 v%@wN`݈TDi%m;ӧ4@LuZiR4}fVE+6F4}ؖZ QW1Iofz9Yѐ,$]X+.P*D4ɒ Bj){%ɮLә#"GP(VŮB&S[z6d]xGnEӅn-DJk2DN1p=bs(,23<YGn.,RPUf*>s1Z()UHXZ( 1BNcXV2qrcR-ZGָZz?ŒV-1D~q'.i@4Utuz-2zfͺJxggFވ8qj+%HDWQ55upJ% ~[F!GLU5F[nĔpecx牑M !$r KO+& USW+B-fP(FO̲ǘPcb< ɕ© _fi$v/7_)`=k0=~" pyq5}[nnn=v?!_z5ZY{n&xdk8zv[!m̠kZh2Ӵ>s ,֚\B,h%4bd1d9| d+,Rdeq% `@\h'YmZ_7긑iW;}}9!Њ2QHJ*Ѽ9hy/{Ra)r&eD/ӭZ\>(V| EqLB96K8[>LM3{RX/4뤍.Mpl娛K)J\߲~[5"K +zk'<#S,jhVXnSU39js%vi-" c0,!Dq8GQ:ICzi D Ɉ&AĐ=XD 5h0Nsj $ @]uMǮ'S5 jp1zOYq&/eiIIGbV4)%W+BlJ (4|Su[PD?lo"K#&t 'wKz%~nf}^dJAyΥ2˥ ,,{NOyEKBz|\h(y:Y]PBYNn̞֟l6z2X-eqX9cP FR~ NǑuj8H8dS ľ3H 3NƵXgRG?LY'!бx`Z{BN"IʑTʤX|EĀAe )WO? ѹ+PV_ qBeCF|bogg"YI0Ȅ5-MH>JL10m兀jE;%V#6Y%!Տk v QTB׻zMeK8*mi֭=a `":QD*"K[wvU8*!fȼNfRsFRNti✳/^v84kw[BJzve{b$9R?)d;YI5}7[C9D&Qk.4Cl`^b1vO@-RϠ8 49)6cnNQS~e̕ DHe ]Y@sB= ݖ_TYF 12;Swǹ/6|vWCGft1 !JLl6bqunn0qqJ8 :;LVgEM`FA+7ot k d&As 9#zqLn7HiYwkj^Vf]Y4:@ƱnKal,*?b]:^ eSsD?JњʊZljQV 9&\x!Mmywݖ2͹WW{QƖ9z:mUAu[iOJ, ioɢHIS_ϋv.KpbNYֹ.sNǬ=_j͎,:Rm/!I#8YH;;Zg|F'Vv5!|$rU9-o^!C ~B9[ſ4"YgROHqfl`zI< l?ik01Fza/8ih!3HM?uaX-80#>ӭjRU62qjS%͚zlEn IDATm"ľqTΡCv2HmqY{-x(T!t\ȡb-:Z҈Iqۛ;>3Vk٬e I-@<'FK .R b X'%~FȔR%}?!qD9۽ߗ07;8|r+]mVC֒H2g c?l;g+A9a36EXS3N=> dQhg**X&^djN(o/:)%v=u]Ѵ BVqj ~+8r ~Ӷ-1GwQfۆsLFI$@@rԌ|}sag~=Ҍq*$;\މsi@Ky9CxsҟbYc X't<8s83jYI1sؒ]9wr:ogsy -9-ԁ"38;%9HS*a{W n_T]*^VF圴rZ4u/?8W=aœ1+,dPhg)IOolFa+G5ت;F|k!(͚Cb'V J8@I^T!d"t NZ'ぜ2mp8$e43FJ(,8m V]Ϊ7 )£wv[a?e9ΨAE0<W(ƙ)=XsqvZb/Df )նf˰?yeuZx܋$*QB3NFo@̜ٗqku6.HZ HV{f^VZڿ')?{zA!j|q*J+.Ee)riedn *C!'QQ%]u Y. iI%ZJ4]@Jyq+GLe-8k c&(QW-u ]jCQAYkă>r8SILx)ۻ-o_Li*)ieADݵ8 T&Iҳ噬V(FQbhmYk\ˆ|䊜)D!2"gtVڒpMJpm8_\HRO32QRY/rҖegaD"\rU3GSF 2?J^͆9;.WĔМ7\<:=g#WBTiK*xsXfb#HJS )E,΢֖^q(u\$镥8#iHiaBE)"]L"FҰ>dD]|5dk8k8\E '=(G95udj:' dXhZ+9:%o=T[$,Tq֭i~%dC+Vhge$T 2IQKLTBIhtlBVuhRF*Z5lP-q؋ҟjStS T8ddIJgRDѴ딊C}v䐹,uHTY^:r&t6eRĜIFf^%FIJJL(èrMa&3) S.cc$?)uS[w8#1-4Z ܏.6j6"bcpUeiOnϘ\$822֛M1I K+\WK3Yw\!4&2qԷyT*W-J ^MQK5W8KVpڈv<'cuy?Z`:snӳ#q)OH.R=Y܄@$ ܸ G><DŽ]9뎤Wt? ŻR$oh9mOL̬ElȞLg @D/ ̈EHqd8keObK1}Z㺚3Ft'@䲀[c*+\y)9ebVd1t ba^Dywz4eq(d2IK"V jXʵiVL@:5kge&dMV_ő8 ICJ;_%AJe sN@jn=nCFdT I$Vk))uΉ9Sc }v@I),*s3 ;$ ?A^#HߢZv֙Tbm%ʡm1#0"h$B, >zaҔ[#IzVcҭ*3aSH5t݊&q`R%]I TWM+eS3q8%6 CH Et,q)QYRUBeQJ$zYBjRuq٢*R/JNa9C,a/hۖ=~lTMm-q TG+X2Fэ2NF!.b}Ta-` Vb C,J$( Bpڎ[([Pِ'9 Jz礕Be`QXjlUL1'wj)dZl  %sZC׭  <8=>yaCjGLDz9 - <Bl3e!+,$d-IQy ;X* kþf5'FkEl2qɅ.mt벮-sT1TQo%)T2 YVbgF@3FT e5 He ➋GX4M DHhCNe/5O^]ƗOB_UM]dPFIޱ30MjɫJ#rK/n+'z&˩ RרHde1LGQ-I]FOQ⪙E6hBmCgj).D]NJͯG KuO*sksϧ:qVi!4R/"*eQ:-%T1S(M¢*'V Tӈ340xq@'[|aq ^RpKv.1h ? VAN͢+&eT51 Y2VѢID1$'V\M$(cvYl_fQʥr,9,F u^7Y\MAlB&}RᦵXB2pVs}IͯJd#D"HF3ŀʉZU{s7by;cifM?1X D18[1{iS\0bS'"c sWYA)Srږ`,MȪ̕EltΨ\:T rW"Yͦ~"gMe*!d*9lVe.6$ZYeɃU%?[-U]bPYIUVl;\a2} X%Z`9,I'ੵuaQJ.բ.ϙPY󥲦2D8XY`&4E*1ILƦJz$#&rV8SQ/HYYx4ˬr_%8κs~pqu~cm>F^#LkWO{LdQ!h--_ `X@9ZWI.J[I,VJcleik\$5Uea&%Ή[!68梸ڠ앫$r:%y3+gl p3-q(gm^fJLsHѣP&/⇣CQ+b!%B#JC/%G G2Y ǁZȪS*\nP |Xy)Ή5o^E[S0ŌvGlQN265F]PwSrAey3]!6rfhSdU'ldU_вiin2Z3la*Qx±P-h*^LUkq/,q&L;ȧ*|$hnfr_wњ׷(%DFRFYͦHS@q(qSP*U.s ׍Te0 #c?Bf59_fŘ# XIR)N n5.Čjt_Wn8o^qe:نX7a8S9l+`Ym,y&2RA9Hl{ ER*STM*OSM$kfOwrM(R(M)EX&6zVThq+T\[_]j)lkhϟUIKsф19{wwsC*~ cQz1es5y!)[\]s|~3-j%S_T/=3}rVJxHF '@>OSBSzqL,@ʩfɤB ®+dZ {v&/aKWQb27X:q6&'Zg|4&XD#%_c `kKWw/<> -9x)ueϹmƁlEi2MmƉ=v 9llrR/FRFzk%ez(76BX1I*QZ}g$MdgԜFK}Yb}/99/ilhkRb>rm8Cck^n{T^Ԑ 8gx+&iqNOJD13Tk>.Y.26~62,H+o}=ůLskW>[_iDĠ0h H#9rShSĬ%](jAEͬ`KR:'Rgai@βZwF"{׼/YZ֭XVm6V݊Z︹Shta hh:Eni\ME3$DlaTIg 彐 X`P%fFP|2e3Κl` Ny>!f\~Ve*fgskB:b[mx43YM O6di{'UΊ?)nY|+"?XOO^O??E./'4R|9=H|3&'GYmbvœpum#/֠+_njym-=tZ5B$ Hg'jWяAS'aG1CI9{z)s}}%c/7B;sΰ2k. Kh+~_sCn8[oxy~{Q|g<~{/yyYw)|>zϾ`"q@(c:!n2/T*YL&QIDATK#ĄxQ'd*K8FwwK~U"PkGSU¾"z2nvqh8sMf8 Xmxw{CPh?bY;Cvc~nZgBȾT2OjD3_U؁a"0B9 UVHSC,mLBQ@J:rI :,zu?2\~& J4wLY:E' V-*&2QKLSh- )pwhۆ5HLӄ5%ri*{=}ՊDžBQ??O{]s|7tw H s3YYbZcUUGP.sE81.DMe \И0FK)lm#51x}\m)Ϋ5_꫚F8Ny5͆ˋK7ajT1 <|HӶ|{nw[lci*x*] gf*o^bGeٸbRE˜P !X儠&k_߸69 H Q]+]%!r-҅E& lGCcfQ&-7x)2XٖWްneNFJo]Ǻ[s89b|:g2ڬu7o~1v0=**cp`Wk5L$9EXgy1w }\]fYL}6? >xϞ=ٳgg-߻f:͋{Ͼe4,PP?"j"fY- ZziN,4TSIT*(BBlIHRYyrp>?4EL,ZLU#g{Bl6?Kzww gWαqh-uS-}w~w]Vg<{g[YT0Ү[tqQp~f{qD_(Iٓ<8(\\-9H`"ǁu faĥɳE/JQy!l'I2 ;ox5}g򑺪XG[IWF ;=|Ht|{A20Oi|4]*C QXj~ooNzO?=ZR}>S˧ӟ~{_~ͳϞC,on}tr >B,OOKӲq|v/m$S֔9C78 Ĭ駁D]d~_}TU>O'~66[B?褈>T [XuJQ4q$J;rJTUˇtפ˯ē'Ov|@ߏ7 ?~GyMӤrVg?;nnnx5_O?YD)sc*ny  c/ 4U]ԭj;%0x b*0a+]-MզH7EX mY)[&h|ԃK9^TbeQ&3Ɖspb}VO޾ioęȓ=~س9[m0JS ].!uӢRrsɛ7{k|~duhc>[Á˘;+MnR lz7~n D+yCqbw| e[n﮹hO*ca5--ݞqvT5,WinpM-/|( k69f$B7vC]| M)cail2!sі(Fq8P% 6g/n'LCw4-kwhy8(XpG+QiuֆiJO777XSz$J9CJϿ|=mOX>˾1<+ ?\^úWw_|Ƌ/_Э:>H*K [W42/<,ڡ% v®R3@cNkR1lujMcŰ(X #FK(CmN=(EUvd *$x H/Ma+|?{OF<+{~_3ۻ9~*q<}vLcnꊺUޗ_?75% ɊHw&㧏ؓW5غI(trmbAsK4dz{צ(* qkZ8FW!IEV Uvۘ2mI(`!9 +re>$)aczҘiMV$?n~B_#1E9|#Z8)o 7!84"E[Eí@%E30m+}f" Mjo@2?( 3?ǟ~'f:✧Nz_<; Dʇa`\ʪ MRf9B wlqd2fOu E]Q5{VOy u"{w;4)ۛ[=!xf Ji>}GYihaU䌥 ~N IJ]W$-մPHi 9(3tؗo0΢q@w{$IQ`>U{w-*mZ"L'極 Q9}\|ߨۆ"ɸf5قca[?󂲝P ۟{}ݛ;>==+ł@kXϙ(;8hir2:_ZBFM~CNhAiښ<=rB5kW3)*z֓ C+6HXʹeNZǞh&r R"~0P4MZR3 xLM|)[vS))9}/lINB8vRYN^VTmji F+=}-դa/Mfm֚ǓpRyN/ljZmMuK.+ƭ6-Yahgg,/y;㑺xn!pX`j~C)oy}st>R-YyW9pmp2J ,oc"*oBv[k,ɲ@YfTun֥I1rYR J8ɒKVdH/SKDt҄;o. EAd}R& Y#aҶbJhf*k&)ńeOq6b>0#zҤXOɓ7dTy4y(g)E[O=uSZ*ԃ1l0+ v;qdFK5\\q}uV0L#x8`Tl_1_Y.=JJʢbl6!'577X.iۆbvWvm{YM%Y/黎~W,m 'K3BrmvGvR J+Ǟzng2i̦H%Y=X̧3D#.%!KO>(@O2FsƐ(&#A*E(‘*9[Q5;38ȁwގx#DvuMYltHCWqizLƲMPT1cttlm% OY;K<Ov[6Xl)B"zfGZް8:˸̧ gsQh~POQ\OÀuv{ ?tTebj >*6l d8ҖMDdՓȝj9#1,VQ5D_*ʼSy0O-X$n74MK\]yc W_|ɱ;n $ZֈA92jyűZr1έs6{kel6ڦkT]Gًa&K??U4O8t&m;i/ۆŜ#WKѬVhe`FHlc ͖}w_*/MHѳ^o10i'eJ2uh06Axl,m5`gtH"0Mp֡$0`'8$K( )JIw(?OfX%y=i{a<s79}w\Yo6^a,J4Ç?2LkX^^0iv o^ݢ?#u<-s|)w|?YZ3M1Jы=R3nk;v\9Z:nb(wql 6? ^ȪWH)el :xE\ <1pQ4^K=yc* [!4c+14#( :ΟV"X=ÆXcU7a-{DwdiFY$#⌫mmt TָΊx^svD6'950V(hqɋ32Z>R$B * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "bit_invader.h" #include "base64.h" #include "engine.h" #include "graph.h" #include "InstrumentTrack.h" #include "knob.h" #include "led_checkbox.h" #include "NotePlayHandle.h" #include "Oscillator.h" #include "pixmap_button.h" #include "templates.h" #include "tooltip.h" #include "song.h" #include "interpolation.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT bitinvader_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "BitInvader", QT_TRANSLATE_NOOP( "pluginBrowser", "Customizable wavetable synthesizer" ), "Andreas Brandmaier ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } bSynth::bSynth( float * _shape, int _length, NotePlayHandle * _nph, bool _interpolation, float _factor, const sample_rate_t _sample_rate ) : sample_index( 0 ), sample_realindex( 0 ), nph( _nph ), sample_length( _length ), sample_rate( _sample_rate ), interpolation( _interpolation) { sample_shape = new float[sample_length]; for (int i=0; i < _length; ++i) { sample_shape[i] = _shape[i] * _factor; } } bSynth::~bSynth() { delete[] sample_shape; } sample_t bSynth::nextStringSample() { float sample_step = static_cast( sample_length / ( sample_rate / nph->frequency() ) ); // check overflow while (sample_realindex >= sample_length) { sample_realindex -= sample_length; } sample_t sample; if (interpolation) { // find position in shape int a = static_cast(sample_realindex); int b; if (a < (sample_length-1)) { b = static_cast(sample_realindex+1); } else { b = 0; } // Nachkommaanteil const float frac = fraction( sample_realindex ); sample = linearInterpolate( sample_shape[a], sample_shape[b], frac ); } else { // No interpolation sample_index = static_cast(sample_realindex); sample = sample_shape[sample_index]; } // progress in shape sample_realindex += sample_step; return sample; } /*********************************************************************** * * class BitInvader * * lmms - plugin * ***********************************************************************/ bitInvader::bitInvader( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &bitinvader_plugin_descriptor ), m_sampleLength( 128, 4, 200, 1, this, tr( "Samplelength" ) ), m_graph( -1.0f, 1.0f, 128, this ), m_interpolation( false, this ), m_normalize( false, this ) { m_graph.setWaveToSine(); connect( &m_sampleLength, SIGNAL( dataChanged( ) ), this, SLOT( lengthChanged( ) ) ); connect( &m_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( samplesChanged( int, int ) ) ); } bitInvader::~bitInvader() { } void bitInvader::saveSettings( QDomDocument & _doc, QDomElement & _this ) { // Save plugin version _this.setAttribute( "version", "0.1" ); // Save sample length m_sampleLength.saveSettings( _doc, _this, "sampleLength" ); // Save sample shape base64-encoded QString sampleString; base64::encode( (const char *)m_graph.samples(), m_graph.length() * sizeof(float), sampleString ); _this.setAttribute( "sampleShape", sampleString ); // save LED normalize m_interpolation.saveSettings( _doc, _this, "interpolation" ); // save LED m_normalize.saveSettings( _doc, _this, "normalize" ); } void bitInvader::loadSettings( const QDomElement & _this ) { // Load sample length m_sampleLength.loadSettings( _this, "sampleLength" ); int sampleLength = (int)m_sampleLength.value(); // Load sample shape int size = 0; char * dst = 0; base64::decode( _this.attribute( "sampleShape"), &dst, &size ); m_graph.setLength( sampleLength ); m_graph.setSamples( (float*) dst ); delete[] dst; // Load LED normalize m_interpolation.loadSettings( _this, "interpolation" ); // Load LED m_normalize.loadSettings( _this, "normalize" ); } void bitInvader::lengthChanged() { m_graph.setLength( (int) m_sampleLength.value() ); normalize(); } void bitInvader::samplesChanged( int _begin, int _end ) { normalize(); //engine::getSongEditor()->setModified(); } void bitInvader::normalize() { // analyze float max = 0; const float* samples = m_graph.samples(); for(int i=0; i < m_graph.length(); i++) { const float f = fabsf( samples[i] ); if (f > max) { max = f; } } m_normalizeFactor = 1.0 / max; } QString bitInvader::nodeName() const { return( bitinvader_plugin_descriptor.name ); } void bitInvader::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { float factor; if( !m_normalize.value() ) { factor = 1.0f; } else { factor = m_normalizeFactor; } _n->m_pluginData = new bSynth( const_cast( m_graph.samples() ), m_graph.length(), _n, m_interpolation.value(), factor, engine::mixer()->processingSampleRate() ); } const fpp_t frames = _n->framesLeftForCurrentPeriod(); bSynth * ps = static_cast( _n->m_pluginData ); for( fpp_t frame = 0; frame < frames; ++frame ) { const sample_t cur = ps->nextStringSample(); for( ch_cnt_t chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl ) { _working_buffer[frame][chnl] = cur; } } applyRelease( _working_buffer, _n ); instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void bitInvader::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * bitInvader::instantiateView( QWidget * _parent ) { return( new bitInvaderView( this, _parent ) ); } bitInvaderView::bitInvaderView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); m_sampleLengthKnob = new knob( knobDark_28, this ); m_sampleLengthKnob->move( 6, 201 ); m_sampleLengthKnob->setHintText( tr( "Sample Length" ) + " ", "" ); m_graph = new graph( this, graph::NearestStyle, 204, 134 ); m_graph->move(23,59); // 55,120 - 2px border m_graph->setAutoFillBackground( true ); m_graph->setGraphColor( QColor( 255, 255, 255 ) ); toolTip::add( m_graph, tr ( "Draw your own waveform here " "by dragging your mouse on this graph." )); pal = QPalette(); pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap("wavegraph") ); m_graph->setPalette( pal ); m_sinWaveBtn = new pixmapButton( this, tr( "Sine wave" ) ); m_sinWaveBtn->move( 131, 205 ); m_sinWaveBtn->setActiveGraphic( embed::getIconPixmap( "sin_wave_active" ) ); m_sinWaveBtn->setInactiveGraphic( embed::getIconPixmap( "sin_wave_inactive" ) ); toolTip::add( m_sinWaveBtn, tr( "Click for a sine-wave." ) ); m_triangleWaveBtn = new pixmapButton( this, tr( "Triangle wave" ) ); m_triangleWaveBtn->move( 131 + 14, 205 ); m_triangleWaveBtn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); m_triangleWaveBtn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); toolTip::add( m_triangleWaveBtn, tr( "Click here for a triangle-wave." ) ); m_sawWaveBtn = new pixmapButton( this, tr( "Saw wave" ) ); m_sawWaveBtn->move( 131 + 14*2, 205 ); m_sawWaveBtn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); m_sawWaveBtn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); toolTip::add( m_sawWaveBtn, tr( "Click here for a saw-wave." ) ); m_sqrWaveBtn = new pixmapButton( this, tr( "Square wave" ) ); m_sqrWaveBtn->move( 131 + 14*3, 205 ); m_sqrWaveBtn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); m_sqrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); toolTip::add( m_sqrWaveBtn, tr( "Click here for a square-wave." ) ); m_whiteNoiseWaveBtn = new pixmapButton( this, tr( "White noise wave" ) ); m_whiteNoiseWaveBtn->move( 131 + 14*4, 205 ); m_whiteNoiseWaveBtn->setActiveGraphic( embed::getIconPixmap( "white_noise_wave_active" ) ); m_whiteNoiseWaveBtn->setInactiveGraphic( embed::getIconPixmap( "white_noise_wave_inactive" ) ); toolTip::add( m_whiteNoiseWaveBtn, tr( "Click here for white-noise." ) ); m_usrWaveBtn = new pixmapButton( this, tr( "User defined wave" ) ); m_usrWaveBtn->move( 131 + 14*5, 205 ); m_usrWaveBtn->setActiveGraphic( embed::getIconPixmap( "usr_wave_active" ) ); m_usrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "usr_wave_inactive" ) ); toolTip::add( m_usrWaveBtn, tr( "Click here for a user-defined shape." ) ); m_smoothBtn = new pixmapButton( this, tr( "Smooth" ) ); m_smoothBtn->move( 131 + 14*6, 205 ); m_smoothBtn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_active" ) ); m_smoothBtn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_inactive" ) ); toolTip::add( m_smoothBtn, tr( "Click here to smooth waveform." ) ); m_interpolationToggle = new ledCheckBox( "Interpolation", this, tr( "Interpolation" ), ledCheckBox::Yellow ); m_interpolationToggle->move( 131, 221 ); m_normalizeToggle = new ledCheckBox( "Normalize", this, tr( "Normalize" ), ledCheckBox::Green ); m_normalizeToggle->move( 131, 236 ); connect( m_sinWaveBtn, SIGNAL (clicked () ), this, SLOT ( sinWaveClicked() ) ); connect( m_triangleWaveBtn, SIGNAL ( clicked () ), this, SLOT ( triangleWaveClicked() ) ); connect( m_sawWaveBtn, SIGNAL (clicked () ), this, SLOT ( sawWaveClicked() ) ); connect( m_sqrWaveBtn, SIGNAL ( clicked () ), this, SLOT ( sqrWaveClicked() ) ); connect( m_whiteNoiseWaveBtn, SIGNAL ( clicked () ), this, SLOT ( noiseWaveClicked() ) ); connect( m_usrWaveBtn, SIGNAL ( clicked () ), this, SLOT ( usrWaveClicked() ) ); connect( m_smoothBtn, SIGNAL ( clicked () ), this, SLOT ( smoothClicked() ) ); connect( m_interpolationToggle, SIGNAL( toggled( bool ) ), this, SLOT ( interpolationToggled( bool ) ) ); connect( m_normalizeToggle, SIGNAL( toggled( bool ) ), this, SLOT ( normalizeToggled( bool ) ) ); } void bitInvaderView::modelChanged() { bitInvader * b = castModel(); m_graph->setModel( &b->m_graph ); m_sampleLengthKnob->setModel( &b->m_sampleLength ); m_interpolationToggle->setModel( &b->m_interpolation ); m_normalizeToggle->setModel( &b->m_normalize ); } void bitInvaderView::sinWaveClicked() { m_graph->model()->setWaveToSine(); engine::getSong()->setModified(); } void bitInvaderView::triangleWaveClicked() { m_graph->model()->setWaveToTriangle(); engine::getSong()->setModified(); } void bitInvaderView::sawWaveClicked() { m_graph->model()->setWaveToSaw(); engine::getSong()->setModified(); } void bitInvaderView::sqrWaveClicked() { m_graph->model()->setWaveToSquare(); engine::getSong()->setModified(); } void bitInvaderView::noiseWaveClicked() { m_graph->model()->setWaveToNoise(); engine::getSong()->setModified(); } void bitInvaderView::usrWaveClicked() { QString fileName = m_graph->model()->setWaveToUser(); toolTip::add( m_usrWaveBtn, fileName ); engine::getSong()->setModified(); /* m_graph->model()->setWaveToNoise(); engine::getSong()->setModified(); // zero sample_shape for (int i = 0; i < sample_length; i++) { sample_shape[i] = 0; } // load user shape sampleBuffer buffer; QString af = buffer.openAudioFile(); if ( af != "" ) { buffer.setAudioFile( af ); // copy buffer data sample_length = min( sample_length, static_cast( buffer.frames() ) ); for ( int i = 0; i < sample_length; i++ ) { sample_shape[i] = (float)*buffer.data()[i]; } } sampleChanged(); */ } void bitInvaderView::smoothClicked() { m_graph->model()->smooth(); engine::getSong()->setModified(); } void bitInvaderView::interpolationToggled( bool value ) { m_graph->setGraphStyle( value ? graph::LinearStyle : graph::NearestStyle); engine::getSong()->setModified(); } void bitInvaderView::normalizeToggled( bool value ) { engine::getSong()->setModified(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new bitInvader( static_cast( _data ) ) ); } } #include "moc_bit_invader.cxx" lmms-1.1.3/plugins/bit_invader/bit_invader.h000066400000000000000000000065351247673406200211160ustar00rootroot00000000000000/* * bit_invader.h - declaration of class bitInvader and bSynth which * are a wavetable synthesizer * * Copyright (c) 2006-2008 Andreas Brandmaier * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _BIT_INVADER_H #define _BIT_INVADER_H #include "Instrument.h" #include "InstrumentView.h" #include "graph.h" #include "knob.h" #include "pixmap_button.h" #include "led_checkbox.h" class oscillator; class bitInvaderView; class bSynth { public: bSynth( float * sample, int length, NotePlayHandle * _nph, bool _interpolation, float factor, const sample_rate_t _sample_rate ); virtual ~bSynth(); sample_t nextStringSample(); private: int sample_index; float sample_realindex; float* sample_shape; NotePlayHandle* nph; const int sample_length; const sample_rate_t sample_rate; bool interpolation; } ; class bitInvader : public Instrument { Q_OBJECT public: bitInvader(InstrumentTrack * _instrument_track ); virtual ~bitInvader(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const { return( 64 ); } virtual PluginView * instantiateView( QWidget * _parent ); protected slots: void lengthChanged(); void samplesChanged( int, int ); void normalize(); private: FloatModel m_sampleLength; graphModel m_graph; BoolModel m_interpolation; BoolModel m_normalize; float m_normalizeFactor; friend class bitInvaderView; } ; class bitInvaderView : public InstrumentView { Q_OBJECT public: bitInvaderView( Instrument * _instrument, QWidget * _parent ); virtual ~bitInvaderView() {}; protected slots: //void sampleSizeChanged( float _new_sample_length ); void interpolationToggled( bool value ); void normalizeToggled( bool value ); void sinWaveClicked(); void triangleWaveClicked(); void sqrWaveClicked(); void sawWaveClicked(); void noiseWaveClicked(); void usrWaveClicked(); void smoothClicked( void ); private: virtual void modelChanged(); knob * m_sampleLengthKnob; pixmapButton * m_sinWaveBtn; pixmapButton * m_triangleWaveBtn; pixmapButton * m_sqrWaveBtn; pixmapButton * m_sawWaveBtn; pixmapButton * m_whiteNoiseWaveBtn; pixmapButton * m_smoothBtn; pixmapButton * m_usrWaveBtn; static QPixmap * s_artwork; graph * m_graph; ledCheckBox * m_interpolationToggle; ledCheckBox * m_normalizeToggle; } ; #endif lmms-1.1.3/plugins/bit_invader/logo.png000066400000000000000000000021251247673406200201140ustar00rootroot00000000000000PNG  IHDR00` sRGB pHYs  tIME ,PLTETtRNS  !#$%&')*,./02367<=>CFGIJKLOPQRT]^`acefimnotuwxy}~1{fbKGDU3lIDATHǽkc0% #/R%n2]e$(}cMj!OyR1IB~]SeQiZ4*Pَd~[pG)(?hޮA9WVH j]Qt!DѡyФ-7?±z$r-/pK/F@0=ꊢW9Є8N9`5 _!_> g'H, 6N] sn~^ߍ>9xFH#̽ϰc;Mz p:5D{IvhvӁM\$lt̄Tv1yw1ӕ" ],.fN3A:ӓL|퉴9onAÙӓGI ^ G4RVr =D.1C^׫ŜqЭκx|rB}zތq(M@R96OD )[c W<"%}SrsxZ\ Mס%%=+&]S1Cܧ- EsOP Q M%$HIENDB`lmms-1.1.3/plugins/bit_invader/smooth_active.png000066400000000000000000000006621247673406200220240ustar00rootroot00000000000000PNG  IHDRH-bKGD pHYs  tIME*?IDAT(ϝ;O`ZK h.%@L\uN$(~@2zalNt(06!vh@baw|yrsrh4M @A2@Dz( IJ h7 ÐL&3qdYQjPk}t:MNyLk EgtbŎ0- ¹M?9y^,aA]y}5. \] %2iWOloEa2 t:^ [#Bf7y{[scv [! XN&h Ţ[Y`EؿIENDB`lmms-1.1.3/plugins/bit_invader/smooth_inactive.png000066400000000000000000000005401247673406200223460ustar00rootroot00000000000000PNG  IHDR(PLTE//.221332888998<<;??>EEEKKJRRQTTSYYY\\[\\\]^^hiikkjvwwH'vIDAT[c`@򲊪 LLt\1C qQII _L\FF^VFsta\FF&NAMu\n>F9i(MBD[E1`ry CTLdOIENDB`lmms-1.1.3/plugins/bit_invader/wavegraph.png000066400000000000000000000552211247673406200211450ustar00rootroot00000000000000PNG  IHDRuV pHYs  tIMEKY IDATxսْJj _c<==נ)2h>97S'6UujUG;`_p82r"t˘b{/uy彮_x{^a{x{e.tB~t` zy ھGE~&;`:=>R;wbz|I績ZQ@\@s' 4~< gP!8 B_ٿ0Ol{ac\Yy>@O@,@Mc^o!Lc]?D|aF<^Onھ~I aN-_=@3PCh xƛT>y'6ρ}rbJ^P',ǝ˥ >IUqIvRa2~aPwc寛;;x{y-׻|v^_8A1㑺4X^_?q>/su˛?,cR>,;o syu`,%6Zcܟq9cL\'ֺ0ց)xQ5*v+)1w80c8Ϯw;6׎8fܕb1^cU|6֩yR9~|ޙiLu{5~L?ƓVޏ4W>~M-,Zييͳdr4V%6Pqz7utivJU3-te +s.f:̡o3 -IFqV[LY<7+v5B4^_853Za0|8[)Lgj0 ð(u6Tf&|DgY!Uf9?fi1J2łCMKجY;_8nqhek1җq4Өki<9bLSsʅ7loo/e^11)Z::d>ǘ{xa | }i={'v:?rzd1g}E2n\l/b{&;y=i$~f/5wھڨ)H/y,c˙x3^(F2II/Z?So~[~!3S߃S1C+I9-ZS/jT _QiJqf.ǸY0Ad<'XE,cǒ̯&u}Am`x.L Ӻ{ϓh9u2\SOB`x%8IPC ƶW]0 + b:оƂ k^j/5?S~[}DDj҃(L6HfGî7{}4 f ҝbEsaQ"踮<!yO:f?,&8^6Ώ<==+Fڸ<{xyy23 ]|~y`u3@JǡSz3n ɶT}i(cs`=szV&H`ٌ`&VsoY(3 eoyɕ_!;(Xs`~{;trFt@/L7OW̖'&r3' LSiYyI0(i>X>.'$>1Ԝ&֗,4qWPLc_?tpEgY3f9LgRgI .t0,YYG`6y)KhZ@RUi:!0%`frK J[{}P>'PcOmKH/1U4d\MVDK"7o-u,%lN V5}w׷%'?o/L) Of,xyz0UtYN<1A#<==L 0xd;q|%Ș6 xy1Iqxy~Ĩ0(R>Ļ^_M2ǀ`^ZU[2ahyoKZN)CnR<s7Iݺ 3/1弽ZkSXg:~eKq9O9s`0\Wiyp]|a\O6b>رq&t뻪9Br^% .';9^CK:@##e Pyvjy*#<,ݗ,2Iwq@TT(;u dX[})-O9q1>2 ƟiB/: \sMVRsi5`Xd䓻5{׸ە t{y tF3 L,t0I(N-ui2e>ӄ91 3U a٠if#{U= F̂alWfh/' TSi?zxyIƱ б `I8`.]/i`J:)2'FsR)3x0f 7;7p2bG1~W(4 9Oy(1g= to\WgQق-B"^ -z-"m/f7b]?52|055%{тWi]ִza2h>kүThQ}p u؛(!+̒jYʁW-p!Zgp:IF8+|@Nce8t  ,>'xxd?ac} 0cg8Cc}v~~Ҋ޵.Fb0zH-]h oc;c.zA1C^-է̊z#tugUNrZİ8x )F*${%Sy{Y:rk i}W#2KYܩ]*N/L\O >`ߩSWԉN=U4` t<>oz@b˕ΕfTkPbb̛ر2^ҼOZ/ Tͽg|*a vͪcJ sBfL9&:?i|/SNszd,V?UA,T2q9<)Fx>01w&T<$~ۏuQbHL'Z q|f^1usKJd$z$at1ɯWi, J0@$ >^m?IgU?k:҆)|Mv5ت~ + 3AKyPZÌLҔFF>56Y<;M'fS-%wg$룅U/!}8:SaO1f t_szs#x_O!pzw̢xG06m@kܛƙ-]TcVP.1U}lI6$uSk%pź/ɺA"yOS·1K;,tL79;=wL'A&2u} 9ce|ܞc`~aTt"RQ<~WY2e Mы꓈mcDZykyߩ Kqr׍H˻ LG1}=X߃Oi=tY|'bv]پka)Ho|EZv(1.yiUM\054ʚ ú|\Nҏ04Ihha9ܳX?1]DZ F~>㘶9 r2)WL*n1u^DWqqc{>[zșgVLy7cg̗P0iX0演_~7)ӤRdd2MUA1e\EmoZ鋖͵OZdU(:jV)qou\i0Yi/$5f?dJoeV(Eِe %1jeh/} -Ze|>>w  /Bg#`6hp ͫS\CM0@5]ciY{ #.zz>%z \aL5Yg1Ko NqLJu]|M9~o㯲 |:mba[㧈nϟ8??3q]q>7Cpcr>I]H aȖmLp8sZ`?4jT' ~.[LCQ$Dx8ڜ/U52Dcd:5>.2LEӗYl |W>*i=AXNxüM|+}?2F߃R2+;q|>^E뺁1B|_u(}Ԥ.SDz<(2 >o7۱ȳG>xrX}Ndm-QFk2ؗ,(paF$xoNc|/_뀸kV}KtuAլt)4U4H:!o%O `3Ll}񰃑9'n1-^eTgz]T$baԷ:ab(|xA.03Ktk IDATN2%fϛdouyGcpa޶ίpHu;Kbj8clk_?9e-k7RZ]lV4 \ϘU@"#`X0MU:0lO+VK2LE|iE+.^\+:IrԬDa:E U_CK\VXIUT!yBـVo*W躧B|.&PUWIp`x߻OFoq z=zu:Ԝ<Ԙ{n'X xU9ƅ 3dR3-|g qw~o?O͗{~?oߩ󹻽?(^2n'XhQ=t>#K]Ox1~R^-̶?(O=1S,B nx'uF* Z Z>8Jw0 XrtRkUg-..5f?] zVS߱Ճ`f\7tlE['=t0.̀Ig̒{EwALb;/N2N)YƮOi;HukOP7}ZA;2ͻ9U[aRAz2$ݥ6aԅt$U/!s0#de&r`/1Kιh<08ƚ&刁yUd ܳz}]JFF=ʥd4"ǞǨ3M.#a- NdƷ֞LY FTfbj2O{U]<4;~d]Ѝhpcӥ2L6^JZx>WAk7|2Sub{y1Qb;Gy_n;`?ʳ^py ? R1݆?ˆC%XM̤gIOw)1LZ:ΞOJ4ś+޴rdMNm1R q&tU?1LEOa'tq~X#P5{|^5SO2)v+SQc^Kp<3վTaj} B%X(&b9r/_W,wDy!d]s]O:Ja7Ԁ0%\j/dU2Oa7 ut~f.oButVyˈ00s?]뜔XO:&/cfV?ϓi oY^N1Ndwd;HI8#ϟK/qsU3:+`V}|7r>誗(2a]W(W45TRĬتM!GК^㳲<-eGk>ybd2$cDBk}@[_ϋMöcytպoAF0axԻ` =9s!o*Z_t=J0 9ߊ^·f*&0\I9y,GEAr߾:ʗ/۷!+<_~+?~o~+rF?"·W[I=ss}/Cb_eTߝ3 -uT?tt| sݐt\n| A=1ar?cLe0WFq]!~|֛(!3L?Qy RwbZCeSlIu}N(RA6_rPP̹\;#cRuqT [fnjϰi/a1:f( -)#%4Ln$6; g:۲̸05G.\3]X5+;`0*s\8𞾡5F_ f"f~ /}e0kf CJ CyF5l3L2$'T*sNҚT6sTNoazS ܵ? &YϲT^DfḇS b*b/_3}܇-m1z@.b}Saz^/>%:_,eD%5K޺Rt>¤l˾;L^4TfjTޗa &WU g-=Z 6=f:7{5rOK2Ee}kʭdQF-T KR]5=0~a圔/˚9 7j!0/53瓜cRw0I 2 g8{75~BS #g؇7b*j0IUu~Lw:[x 97YM?j2Y0]$s\S=^G٧,aC\Y] :kakԋ֘C^Xc+D=Z[٪1so輘y16%3Vǜ~W^XX #ҧ,/#ws^ޏ|~|w[8җ.%fw|ח s%+9qZOZaKVam2lyɬkRb/ 㪚~Ä9uw A%[Y%sn1G4K_tW5i92cazCz-.S}\ß.a[us>1=.)s2Cu[9κs_`N_|3c'j՚~bϫ0/}']%=} {%ˏQa^ܓ xt6),aTdBK.JMLZ^,@+2+I(Mb15MϙY/Q!q_Z~VOapxl*eh~i;ܳE%g+4543 ݨa۪󧆓ݫ%c ?SOV&8NcX!ٗ N#f'1Ge[l>_e) ~{>,[kj?R-{-uN9/LCZwI}ξgs(:J~k1?Kg4joܜO=E/ ϑy z: QV>VNe~A\V&sQ_^[a&7pz E]qٹ[綞3FISȽg։9.{q#{ uK%O.c>fx{xKx 넎bT< M$t^: Q䜚FDoUby=Tk0#R. S{՚;d_oPޛcu/u.'bJ9y噷lx_2ӥ}KWzG]&oSwN2_q9BO;,|>CǖSd2֛9 z%z7w]r>祓w`zg}J{`:%]xx%lNJarBd6Vav,&Ԭop b?,jm6@lxŘFC K rkެob1a mib.[ 4 Kjy,Zc-j`P._C ;f]~LCǥFWIJs\Yz(4oQC"紬S0DT {v>|#+ Ӥ|s>KÜ'%?_壴=eNmyF3G!jN̬Qc} `77>h}N˪ܪwsյ3r$k3bYdا,`Kmc\%qn5ué9&;/u3fAWLÄr)|2wt9,>V5'P$G)}z9/RQI5c/eu2 瘜1äLDZҶz|;qSz̧C@~M+v砜z&0s'fB?O9Ofv@%4w%GeFy<{wYT?h(쳅M,JYgho^=WlFV–N^:->?b![$ږZ|lhH mA6jxtj 58Sܯ kJ֪QPk^j4*ȯy鑼3cU3>2iN#>g;=Sx'Y_#9c/ǥ'IDATAs2f ?Yo zd޵M8˥^'3P0~|`L"gKZ0f| nr_zI\yuUrZ޿<_Kܿ[0LaTYA(&e/d7_ hJ#f%5B.X@ףl.CGI=,|-[ژWjVAԸ1\%+3ˇIRZ,*Bh 4 N-=3iX ja㱜*X^gnrP9 Gx燗zMͩ3Ex۔G/XYܜ@qSa3bM01n\Q B7-}rr?^8*+av:+@GAu$I򼟚:_YEW!(TtDYnW0r[9033`FWu s846y 7yI`-KLu s^9ΡeY}ިn"rlNw m*yY`{ '`bOsNo/eS߻+:~V8d,Tt;fܟ_ek|/i<7,TXt x/0 tcYG55Bfit/c&ФrX%g[s)E`|ϗ=y|!Fzji3 AN2Nisq1qYZۯ1M1ͮ7d^z$ϛSD_7"/FgJQ F&= q-^`S&o,yF?'\tk" }c2a XvVpEۊ;_YE[&2iqVyǛ[z{Alr,9%gS"1^=z^7 `Qp(=sLTtCmxߪU;)/6qpfxDZtNb6GM8y =>`~Þx Y"'U@*B^e^0US#ǫ0 `aUƸUCu{h4F6ƲO˅Nz˰x{I2 n옼I^9:uQ2$eT5 _O̒ozN1w VcqH}J}<^x&єc-I]d}xBR@eU@Va{`¤2 oP۵۹Cm@1;K] P~Ṵ{sUBы^VP!,ԡmB˩Y퟼.lg`Ƶ/!p<{2 kKfg]Ek1q?W0P"W~=vy/`Ahdo؋7~p>2I=DdZi1ւ5ZX#F2Y,'Ė.it/I(]Gho!}2ܗotH\a l0q^8^1Feju/CΉ{TSY"dױ:[fT{;tǽcһ%t5ݥ\/R}g'0$ Ӝrh|y޲05ǃXO0Oc9zq\zd$5ܘ޳_Duy}dN&U1Hb^++Ax؞^"}Q/%ЌE(P',_q,LAYFɰUX/>gƋ9%gWQ(*9JK;yy*:K<:S} {ZXշ_H5 mnOn/<([Ut!VBMW=`8v@d+v.؂:{x|ru1'{^}db:s@+{Š70q< W0IGy{{+ca0X'C#@z\ sgޘt(ւq'YN/M3̓[/uֿ(SFyڋՈޗ!tV,F73ɢ]hU}tq"z,t[2s4fS/yukbt:K\,@$Y7KdZ.?n-_0\aqigR &L~`]I12^'ah}ш3]JJ3]%Ȝq&]k'<-{z CL#sƗc5cM91kk9c}RM}Q +5Eg:YFK:wQga:Y[:]dƩwMzs*[d6}e&.߰\%P*Fy^8=1Is(Ծ_X4_o.yWxvx,5}f:$Ca.9]w=UƁU1E[Gm,U4޳gwg9=~Wg\9q`: :coM95ثs [[SRNc~^f4*:q֤m\ŽڴpewtEmd UFZCh8C+ f5b5slˏKqXyE8s.(8z{픳ܘr`CR/\Ӻ12M~es. Y01'cϝԑI^IS0{Q#c<}fgk(1ͼ~h<ҝSe=nTһ5k/_R=LZSM.=Uyޯxj}%b#ycbM<3 ϷRe`k ,gD)ejʊ&RÂ[V0~Ǹȡ[yQy睞głc#yi|/ab+3\Χdj ]Ma(5g ?ܟn'9=fKYf /ه\Z>RKwL Ys j7nMͱB?T4t]j=DkFe Khu0Ϣ+J{5!8 ]F.8v^}R /Vy})9>4|5oz{tHY'*~3f:Vb?[i,x5Eן0a.W:ʠu}j1ITry/*^ҋc{iSfC4`02DUOrNbkޯ2'1RNհ/bkj?}|[[z o^^:WkNE)u|#^VZOUwaBl<o$[ؤP](̋3eB1/71'\ebۗuIxhTdw-{*-KJũ'J]gֱێOƋ5m݋f3"#󘬪Gϗ.$w:IpL4EybC&"c";C?nHW4͞xpk{G@iE \A4D5AhSii2kڼPZzGa e8x;ny9D~]oe8xæPzݶt1/`<^mk۾PHl_xHq2 lf_:GATz5*$fQ &>(ˮ:: t9q`,sf#/z{X ꜣyEN\Vzٌk_ueªq8ӽzei1\[5b0ᥣ.u>`[ٺ9&sP{9{$( #6xC[ +b$3wi0KSY0,va1Lbm0es/2&ۄF{8`)/mTN& z\tG&Ms(1bc%7b SkSqշv*:fσ3ڞf !Bzd'3Fm'f2jD 2sTa<>5,AMj"1'º&s\LgVpc 5X }Q [[>cy]Q 9ECc~irλ4*G~ȡs!乇Ur@oCWIF1Vb^xǶ晽^ˤ4BKڳd~itL#{EO2G:ng+IΖ3-uQ[ͱuK(qy-Ey,Yֿl0KaI085d5w @ژzgĭ}9J cg([>{`SwLi.SZy{oys4M3I>һ;EϞw,ZDW1I:Wַ\ccl4Vb#s>^a4:-iظ^n㖺S5oZu~y15`]oguTUkQf1sݏ>,r\wA^뺋5O|.3IENDB`lmms-1.1.3/plugins/carlabase/000077500000000000000000000000001247673406200160755ustar00rootroot00000000000000lmms-1.1.3/plugins/carlabase/CMakeLists.txt000066400000000000000000000010701247673406200206330ustar00rootroot00000000000000if(LMMS_HAVE_CARLA) INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${CARLA_INCLUDE_DIRS}) LINK_DIRECTORIES(${CARLA_LIBRARY_DIRS}) LINK_LIBRARIES(${CARLA_LIBRARIES}) BUILD_PLUGIN(carlabase carla.cpp carla.h MOCFILES carla.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") SET_TARGET_PROPERTIES(carlabase PROPERTIES SKIP_BUILD_RPATH TRUE BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH_USE_LINK_PATH TRUE INSTALL_RPATH "${CARLA_RPATH}") endif(LMMS_HAVE_CARLA) lmms-1.1.3/plugins/carlabase/artwork-patchbay.png000066400000000000000000001327071247673406200220770ustar00rootroot00000000000000PNG  IHDRZ=bKGD$$$E8V pHYs  tIME  $ IDATxyYY֩yi QA(WMlO+ c!Wc)8F1 MOU5w~}޿snHW}9a]]7x U 3c?%_Oyfvދp}8lI۹zth95lF^D& mé1j,ޑ+l=EƇ,< i&MG,!01ok|t okl LIWcoxU/xn$p=+cy~Jcjn%D&M0i]pK ?t ]x䬂ʋ-*Mɻj^3[<:N$_ 0FVqqE\{-Z\Bk!-;ZgY&D cgx.ە!6[Wq,NIc6/Vs;\L<@_0s-ef.-d([f1Ҡ&-KlY"Kjcvfܪ dB-4m8^5vt!N9sܑȤ_4" 5ilpsYZ0A]YD'؞UꟴIq2 l:l6>Y&)0gg}-=6qv~1gYMjЁWxfrgIj,۞qArܕ,EyWnf)Ow|2{)5MYy|}JCX_۱meGJ@uY8I&Wi&)(u[% ێOǥ2>_ȴ;2ƹYVB@JS(_be11D&X&'-<zD8BȻE[A̝d)&'yJV'Cd&g&xr`h0m2Wvҫy+@-.~~Y޾>ЏߴZRu`8ܣtsɏ,wcދ;uv yG* }`1mQU;k:/Vipq9-7,SvlZ}>"˖,LNyJK:0oxC6=܏Mbʹe%)SͲj#ue0USKN#jm@F,"VXmv8qއ}Vyvk7kC3|mJ.s'ĚMz$Z76wedױݟ~Nݾ5?kVfI2'˰&S5Q#+JcO!G`ƸcjlcLқAIvFcI6Q!z,[RpQi3Yh)&n,y덷jhҊ92[B#^q;<zSRL0HyI#V 6x8X99` ZMNPxNJv8{饅0=dO4EL  c3@b!hMrݵ[0J(q_(fy;L &tXMfdag _c] $jQ`x! jkY޴Ъd+L'2=.c z|BpiXw}x $*Nhj5!P SY' O_`@kE7lA&04e@H9>5L92xBLA-|J"fdMڨgf-j^B.X%f2շDR's'S^U0r26Oa(RVs[B2A!.jlq+563$ulk| qIBQv\B0 xGhVLeS\qE<Ks[QruÐ?JOɺ)IXd}65`MK y :n&4})TfF%W]}O4.>-ԟ}_8pW?\s\=k$w>ȟs[=ߺ|7>ɇ]=>p1~>Ntq^,U /8~F=Vlp?_J+P #7N׺IOt0b+oSA3F.TkLO“{ܓ[[s+O|mx;FgD/;3w\߶Xh/ .վu~zo񥷚@[` xma8\6lS1;lb/1{5Saot-{*3+*#&ev(l;E6K>~ؾV3/.{s[|eYuKåmm /(GpMO9[]<˯=֝'7/pb}wV9u_qwf.߹ku'93ŚóKz_u1|mw]!(Q j\,K-yBFΗT2ק}.-Rl$lA}mԾkZl9ℎJ{^[hQdRL>\N~w%+G2kj+Gw$ eIo1XM wo w<^vjr0~޽R}eRO~{}|ܘg3gl6||Ў"G[>/"RdI@٤׼b:pw>&&^!cmO*J]ߝ Z{Wʢ)(𥎉OK 9G *cFf!c;7zI'vqаL0pr_;346'\z=b%e>aG=gPsܷ:+$V^a} Xt|ݍk/{xmxǚw<N\ϻn<\w ؇3/8g\tϿN85_C=x؍Onsd:dBKUߠyMnX. Zx42T #sG,Qn [,LaQo`f^TB` 84I{JVRk&[Sŷ7;7> vm~o#jM>YM~*sb;N ? 4K!M_̃?!y2R7;_}xŧ?'q OMcx_<퐃 [}gO݆܍}>AM[fj/2N ZT4jb9?-j,+zM[aM+sYMՀL7f$[!DZ}Z>*uz L LDqk3wG~S|8-S[]tvp ~z'0؂`Ẇ{';~n߻Uay >/6: ).^6q׬Gv={AA.MMg=j0Wy6>p-3n@G}GE;6qz>[سF?/Ow/kֻ-dvO~l ;.2uwoݽ{^tErz;}h7 誉J(m߻o&F6Ry,*cuw+DEҚ7\S1_mcFr]=wE4ZܷtXğ!oe/ٱw~3t|O|ɏ^o+șN~KGת7Ї.s“7L>o%xt Cw7܈>r wl`A Ir4m ?W~V8Ї.mʱJEʢpiiEUx Uzt`iT 7P?;o~N"h.U }.p͂nF钨jRmЃ=sVvCg<'+USx7ggxo݈13;[9:xY/xxҫy{ܿ]z!=mWx>6>_}^gF $ UeKh*0sI(ӫJ.]#8b s:r+%ґB([ -]pUUצM*XTSsaEQ@F(+SDQ/S*4R}۷].۽[|5#xǰIs]9.x'qbms+O@ ߾gL B:O:,n8_w:vsb;ޅN]ؽ6l>^KqM=6|tW~F߮߶ u.@Z#^6LJsIuQPt'%tmCCD߼O6MQUVVV2}c O!B_5^+q;#}k}(e:nG1舨M ˉGhJ*C6؃h LYT|M \͂ڹ JvϾuL;9ZN]2[&U=X4?x4vS,nJAK2uժwH*rqBRw9kQc<jLEm?Ռ]~Ue28w2iu(Rخ9ZAbb6_1Nm!0'%d#*St."VS" [|5P_LKqS% Da?k72f֋䌫`a W7K{PjO /u8&'uݜ X"AI-1ޤ>|釮Y(옊xX1pp:0ֺ<>uĕ'vX=K;&dl4BT81b^&ǀv/ۑFWhp^w5;\-Y5K,<5dYmۓj˖}( s2N IP:8R/_:R$hD;.[ (Ďnm+Oc)e+uz-ʉy]>{)>q~mivh7oب<,1PG@Tv<抩r+RzirX[9kLԦ _޸9s S̅C T6efe| +"u2ؔld*%u2yeCQaq 3]S{OHQ% sͼyDN7i&$rI;| 4G  ϽV'?`\q yMz5>xhWyQ Iɲ^~o~X y=y~ɕ'>876cs8%<i˓s&o)SƯ=⑝O} }'g?~`Ae7 H4_zQ|^Y@Tm/,.^Ĥj /(~q`։7|R=jM։/Vl.jeOuSՙj6變Gw"0k' :UJdqȢ(qKuˀ8[]~]pzv?>? w.(k3൷?-Vy!Nb9]\0F_d7|?vJU _CO0Ïrx;n(o/($;rv KYHD5jtx_}\(-[@ؿ}/_wl} .}pbcKO;YKU{c(Ia IDATͿ?/~ƛgG{WLTX3|;}g<}XG?r1~3/*˖|_=`彮О95ڥ'%Ђ̲nD:Fc'+fς`'6o|vNllqKޙ ޝR]x/]Mvˣx}uA|gDZ0_x1g?ױoW/-j/1Ֆ{h>}l[5@k?[3gػ8~8ğp|N=?Ls~0/]v)w)|յGw;/?wqT 3LN@R& qD9d\88UO:Z4 :ho~hھsCWt]ѳ[sn8_}xû'̎5> yc{l}tջG@W_&P1m oK3V5\>7Ow˯k9\k%=l^ֈ[cw-wO_!~Ͽ;7k?z1]'̮P[!lw'Z4Ie5tC1+'V>^}m]^(qzNm,&5{ZTpGvxZW .;\y|_`_}C?4c>~$nQmlK?{ߦk#/ىn_سuxێRuxW-g-v zge xmʹ?o/^Kqȕ;Wkq5<L<߮C?}|V='W\e 0W E=j$x%-^yI~ =? %{#v~W(~;=_`1wމ_{n;8jY;kvO<ȡPjx1%?o>d[>?܆&v4}w#(vo]wm*\,pnɺq|wٕ8tvkkkW L٫ VNv:Q8.M3=X+i9K,1HeB4FI}[O݆܃܃7-<n:4q|{'˘+x__^n\sa×ʊF +{ߋOmo]str@b^4jb5V7q+{+q 'B3F+o{o{+ُ!w>wb6&GO(k4|-~{5xɍيntλŻ>_Osk9'* T24_`)z*%s"nBOw=B |  %SrjLbi!{+q.yc_-{" K>ǟ=ڋ?W:J^3kEŻ39`̀=AlPq|o;Gv9gJPhg_}m鍙[ʬ4^qn[=HyS3'Ω<7}=xU&?8S[_޻>Y Ћyox3bɈk?uZ'~J"8y~fɸ1V$(CNČ:ȁiu, eҮ/>&Dq_3/هsႯY?f?^.wj Ķ-_p/~cj<:f~ӪC!ָ@ay>=]XwyRRAmT_\ e.E[F%ZhX*`{-;nE Z1“x&;rv wn0 CN~:wcV~;قI-,lWtO(Q75L嗼&<(_.,&%3o_t?t;o\߾7ٵgewYSռ WN&15Z'*nkX+]yM/3^R-zDw?w"O`?=MO[t/~><Ɵ[ ܲm6+퟇',,? }='76_zvG/ɶ|}{rq_}}?tv v Oxr?rf ~uoK{ۢ߮}oX߾ևywݿܞwwW^>q,TOr-tV _t:ƫ>&T=jכܞn4W>ogbYG~XUXM_ ZRBU(0 DUw{-OgSQUYK@a'! Տs)UDτD*Frd|:Ԫ'j&P=wzVfT%-5fEt#ۭ9h|S.; kUJ\AܖpkN(4*1(5t~rQiǾ34Ċ8Ck$/X9R7^yeUw2ׄg ywc.AV!L2xly͵Zҕ&&L+ fFQuWZX5k·1 ]"H*sOՙpwͩŤIEy•Tؙ֩ EXj6HT+ܒy _,ނ92% >Zt TRZrEBN{KV7Vnؒ>R2Ryhf`zN--yO iɒsa.w+“6d8,7ZVAȤA)%Yy/cZ=$B:(!٨yIL9m !YUdVA`Jߠʡt{66 J:\/1.!I0N *5Fmnq Vq}S#&97X+wZ.BY7W ( `X]<6QjE9g3w2֝~.&< E]\BDYhK-0.AIq]uR4nN;LՃqԛeeV$Njyv .zDjtʺθ ]m_iAH苰 3WOVmwuGy#dy^3$Jah3e>ߞo8Es &E)2J-`T0NEWf3q23і]Y|2eU1AKq , QTz>IYEʼө,X΅%sM[{oܵ+rm!ƓݼMZ|߀r`k3gsy`wgn=lY+꽇Ewk~N6BvLm@W>V[Nad5T@wl]0 " 6\qRw~LRű#߭r fpƟ"un3'g607 'MQsb#&ZKVI_a54g&q]@mL|q0h06 09+0pBuأhB1D:&ۆm 괂 %h]6tHD:inu_U}/÷t zy[޽lRAP3 ЛȍXx}G&kYzxw 6)#9譶 : 6ke_2!ܷF{Uj_S)j`N1[ؘKk Б? gErV@7M V4Yl\E#zM)8CHDIǛB$0RcЌ`(,  l@Tϲqk05cCw'SEB)bX ̶_^/= fx\Ȑ b3i 60dF0Ags' zɖ&*TXSR2_QFص J>lVtkDQ(:vB\gYf1rs0,>v/D'aZ;%o7gYtq<1v+*:{!C+H֑ۡ,3~f}8343f?@T;Myܦeܮ l9h!)l $ *l$10X.KMͪg6b §raW,=]s>15P%b'ibr .C;Cb/wB9%TV~P^]ҵq§w^[}CJ،,6cH UͷEH3h1;_J-E$\Q'|( {;H6|- :&iwgyXNQbcpRoq<1 6}qŵ  n ="vsaWJB(;*]E-%K9es`֊pcrZ 10=F;whȴC&|V UeߕIZU;)oeU$*G&iy3ld6?/0$T e5 m 0<8b!>ym,6y H xi͇̋(}786>@ؖwIPf#c\z%0 f0kQ2tK3HlXĐ'nEle(d2S&7&NEzUgzȴO RJИi$B gR `r(a6 MIACͲ͈ 0N-VrB-pI{RL39 &۬P-B?MVʴۉ9-`TYvqj!VpYP9.3!%މy_s(,4sڵ5p9OP ?|~ isNmMGV!j*[!X"lUBkH".PsIC%,ӑ&chH4IT*9YsYU kQgTs?N2B_&tףTvi>OE G_g\X:R'X.N'VO kO8tV|V%&PvtkbUՂ ު;?e}/mzv5Y-uk~Y1H*U=J"$*ĦUUsԞ ]'fl][4&/z0l/&,lZ\hށO\/UneeۚXq[ټ),9-]Ssif5DN RY]f܎zA/qƱqéSزs'܀u .52Lm6%KvZLp:dJdM߭tғju/6N5#I4X8l "I{:gS-% 2`Z{BWH]k 4䘼90̛ms+w=;ɘb+ y4)CQJaS,}ҥەYYG&0(kҭN~a0s8~ 3g0;=,f 1\6a26nBA`2i.>h" 'P*n}ꭖKKNk񣵫/~pE8w(֏pPRoihЪ@yP侔}N K8j|& [+Ɨd~2 IEwb&XD1T~" BނW ؓn;W04ZYo]5#Uh׽U[ IDAT91æS)$)MHnrXP fA j :/ &+.iNĝBig+L(hpv?8Ĵi Е4SiboT!!"m)Dh21ŰZDţH嬩uU\(Bc#y`QO+|}ppِnA#hm2$XW\lVr19k*%nNo[4A-`PG#k=Wrτs:uᙝ!B4K!=Vd|$"_-il`>4䱆`P1%K&3UK=gn,ס] W6~0[饰6g=N;[,SSS:=8l$ .WÞ=0C,kzCY1x J"vn7ʿgE.8ܷ%IzV)9(ϡ,+&Wxzm^noCc?` }s+NBmg` T= 7 ftCM| $3@0+^j`?#Q)7v8`q6;Nxw !\YܢPf+b2]{VՊ!l&6kэs?^zwu,h"U헏_{4sc9N5hϒrl`O08XIrZ hW.xEnF_ԈLvv&j4I6d=8 h/fy@sJP5g܉$eϓ\z]7NnX{6k}UEd^9g-t"i~(oZlҀ7Ib2( 3+)Vp9jP\ ?wByrDIr=ilRؑwhrRs& uX]mׂCL)D*MQ]g1FJ3]L.;D< + Yx:Y&6pw5:knssa8"'5DtSTW/ e$4U@A GCO^]LP$D4rv{wNHB!XCE3E}453$@ ]ҊJm)@^m-^Q|7gTRiLl17dYLaa d[<7N9Իc5F6H1d0d eV-5g!j.6I>( l#ܲItc,PTI@->l1n " 13 OmڋU2U,l%h4 r^ ԧD!):G :ͅY"6(SVB7_.m$]}Ю4T1Z!2tp[*s Be0V.>TjM3.WO/f =7l~5dPC4fX'X(]C6$W-5]ca%iݐ9e gPކ[ |/5K;U;J+Af$sr ;a3vᵸ8g@Y:ȾM +{ lؒAnu5aJfyWnQtT=x*g0eCذ1 '=ԯ(oY5W&dh.4LzB-Y߉]}&LF\UR6>8a>1sG7DCj`'Ӕx U60R$IRKB =HBWw!)訜Q>mᘔdVgmSZs{g5g$AvDka̵ 慌ᨦP[.ЙGlV8 iulKQ!HlqT[Bufz:pKtSbU!Q$g9bg)G\0I9b|aqϞY&ׂEo5P"n텳 Nq..7DH.Bp4‹>4^k D˾談ϛ'0b@~z]^暍GynӒW+Gc  Δ4u C֫̀d~wᡫIcYfy m!SR _Jh`G#c;Vѣ+GgacX?rGb䉅o8МMӃmPҚL@v[~B4qܢ`J p 6VDIAq"iIVSޅ V$6N;\@`FoofC1H`]qwthF$onY/劶, (sҘ4#E}X{o$"tls`uP].۞ad_GAkm l=L< C !dyi$+"T ·rBY1#Qtp,?PIS5W) S }=[?Ng5V\,eubН;v8VɷP_jِ"{'A 1˺@b-'tZ>cΝC\2tOS +㥞dr[ʃTpZ (Ka&hw 1obB{OSZt#+R7>RdEo {fvTՂ,x4wVJ*ŬqNѴ0VZ:Ų\ELuݤ) $}Kigfz 'YFR9kGqphR$e+גb<:*$SP*\zhlF/ɜ8Q)BM+!kTV&4ra/magT KügfI7qɎdb_}X4`f- D̾S q:85nr _1^H֚7WY-Ueq&:Is"؏ ,r`RVL|}9Ej|\6~SR9gIčZ؟*F( :L!tQ)ɬT!Hc#ϋaSС1 ;ԟibueי pI7AyL(8 GN:ytt99slA>ZA/>|W& iLފ3#H5 + &~4USˌ.M8^.\9YFNLWQ(-6+9S(rLJU3a0-`fݘe 0gsW~3`?S^Tb"2$\u{>/v2\9̶cr8N/X8^ZW` lylM^k1;:d+jX&|7V¤߄ė˚zS\"b1o7sE[jͼ1{HQ9"P}aP=j>K!X׏w~)le QtiLqﻮWU;wBjQ_> ϩ80+iQ{wL?Kזg|W=Lc m,[IV[o)ͮqwjc,!7MT/vpn}08}D}zUD:YHQ`%Ο==?=55,s9`iQWm.S򸍴 *oPI',tska_xyi 9 $;Xm!Y{"`ߚ =+ Ҕ Q]ɵӐ ? FP,a^2mw]$#Sɦ碘b7 nЩ$KoSUńDф̠ҚiƼy!0b4 ⭮ 7mEEq To|!K j6Za{x&+^+|p ]<%奏Zw' "td8c:TP 8 HϽ/4k'A?+ey6m(~&04b>;xeJD8upM0rճ$&Yh&"+OO*(=[N8$tZ/<`PRί~⻃7'YaAlsNY QN* f&^H 宬>k>4Je\\?cةOJTT@Bxn;Mb9c>kGĚ'O6+arkd3=f8csuO̙E}>gĬwX2꫎vf<!h;_zP;!CzvO.'ɱ%D@2suqO6NbDkw+y'2Βy}LiLJ\{]3OdQel4\4tSXLpZWaB-enUg(Tj*ń*ܑT/X:fރ?I-glӵR%rġ9liX'9FSy7F,AB дsB5)p$z wH- &{ Eݹ¼j[p t@lbCrGA.Z\al&-h%}vrq@ؼSSDQMO}Zf͒fd5g' IDATۆ͟ uq(nNI=. w/9@e>{(g*xvŚ.X83dqhUcvL5nbXj#'i?w5:5]5tzn 2C S*[ `^抸*Wriy]ւ˴9.ܴ04&Fc_ބ>ʐ/mjL#\-#j]=+5 Ǟ{goqjܲ=[f+]sbs~XސVqj $%iZLcڛw6X f7([M_mY Vf8)up8aeJx ڑlDjTsyhJ{,w2TGVeg* Qd'De!L5'$ckAg+7~Hrm], %/KM\:2ZA*1dL/Z!mrRCNCO*3%N0hi;t2h J9dS7Z!٤7bƓ_fnˎ8 THdbLh ZEZ,VEeU^mp|^&U!_(|e4*B6kL" V#*n -xğgۻ0Tϕj5^J=~/q탎;SV5G0ePަMvnKr뺷$z~[vĆy(fl-$"=i힦b=L5`b+.Y6W_y/uX4(}|2J EݡJфE&L5ҳ$SfVG2Ƽgʶlδ*P$tcYX=I|+8+O#آkȂsH8dV4_;_a|." }#EMt4 4&+uTOudP}x;}1WT&n?iV ,dCVk>P Ӣj^$-8eYXiv໖a1|6Fvb`|k$E 2! bb,T8IlX3͋2me>Wu$I$ {a fMn WE2y$0C"Unnf)'Ȕڍ1@$_I)_+@e+ľ)C!dKyX(=r-`VsS`m5XCcjkIgt:s&"hRƫ (IN6 oR"8<)<'f"N?Tm_w]QD$5;eWO(;_(bWb؞.%8ǓpҗJnjL8' UqnWz}kĿ3j)Hu U{KY&)$vA84HH% {LVXUk,Us}B .fu_ B\1ߺE!Fdq~W7|O\_j^ڈf64s[7YA _+@];tR-{-_|{<ܿ5k]*2{;U 5ERڻ2P:\*3*ep!d vj5rRrȤSig㢚U"vU`lkK{M4kD5jlE(wOe F]QHج*53Q_M<"E}.wqu{l'|{*XPwNٟ)gW0r)[<௝[*^_ I _<J1l" ϼjrg٫roR F産,n7Ф|aD4b@@WBH<ɈQz~9QD?B v2{|1ƨ`a(;)zJ-7徬+g;[}*7n |18hS/]*r]iP쟯? =ѧSBL$tϡ n{xk=ij7c/"_ߪ@l*2S_=WPhP(ψ2/|<%ɹЃ&Ey]$>s8ŏ?r:eOFs18"qȁF@_Z]>yKpxs~/Aos3n)Ü$@6KEY s’Am^V!5|ja=l$Ad3>Mo _Q,2P3-25MA8â#&ul|֕՚⯉{ڝTHe* 7ra$P!ɴRoU<|Q<(G'gz.ƷS+&8E|dRL5F l}5%n 'ưVw\3? ؁nn L4#rTiaתd7b/@$05'$ոt)` B'@_m6-,~?Ūſ~Фm3/jS NMͿ~TMIM9eiPʪh;hx:_W]0[oٿwT藘F4ց/e`6V+]Hv\2jFQF%#ݶtxBkϪŒ֒N-njoAnA`Eا/. o _|Hb?Ϳ{O??η 1Fi/ ߻kcBʗ4g G`Ϫ/~/>ι|s,nv_ŞJ;(`qtbͥCe Azl@wDiQ-X;V63.] ImHT4CYRodAm$l21 adQujd+<+E>q[_g["DM*&JCL#\;c~MK[ v&< &@bE'仂w/.["ؽ 7@\9۹0"nJtUJ)0@J^ ]qrG[8xP(nU45a: ,l dT??򮋮_S)`=ēO#{!egVI.! 6-ډH:-aw>*66׮EzW:=9ytl6N'_MpSq )a#ՙiCa ~8dsZ;~Þ;0;K5 z?!#(?/àn_9 GϏO47=P>6g)a@=av BG[B>n|G{HysЇBpq1QGsD_,pu"gl͕FHxlc5qU%] N;$ZI0Pҕa>[6Re9n" bCv6*\R+:}WK l+c,z ɨ0 hߝ%ӓI[ƥj*W>7z5`Ιں| ~Q$פ#<4e+d(zǴGT'r˭,.kX=av{1'{:.k̦ {,*A ft]74c8^L@nӄ)ü'fO1,0w1>6}x#GB(<tFC/^XCI7‰s&S#eA=T@QyGpfe~7t,%mX꛵訶b1ӷ>!TY.zЈe`̯k!b0Ǝ`#ZZn#VhzZch8aU8ĺ`P3߶p2|ڈ-]JmuŕN 1*+Gƭnb{:< [/juN̴J4ڰ&ۼT_9wqX &:ކQS޻?mV-<RFvg|(3kz#ּ'z.qνtƐg*2 uF΋\8oԙ6!l܍uJ dcdڛ}+:ҌQDCcj={hT5r Ќ9*FQ8.ghF|ه^2tTN%o$"yZH ƛ5'F*Pӏ9vZLa8 N+[IvӞ9:ZvRcK^0à‰'<`jt}`KT9F`嵚s9N%:;iVfF )䝑 ]`;_Rbα2<;q/cYV^ qjݜ]d Kʾ[g,or[Ⱦ(r^ .I:4*-s޳V"qRH].SHl!W e,ČQ7UA$[Huu· lZ&! a9k!\ < rsIC/l)"Ys^/inaʰF[D]'; <-é'2e8J o;' t0Ƶ/{)L3Vhb鯮 n vmΕ{sb{RҬtҺ+dK3cgGWyo@P&GS7xa`89Jb>=*lI(a}7;{Ԝ1]0Jb;_b^BhTKw :2"$ Ӆ#RS۱ےa ~sbund'\@o%?ں"иtWCj8rA_d'@}B@$8sp  dE ZcPcsV%7GS^QOqFȟ`kf.Gca|!~p>8OWs{ia\"? r'&Z=0TU[`A;5=ụZ9}ZQ~\Kjh~>N^=3x;٤~sAOّdz8oxiEdF O.4TU:Idz2qQSY?x20:kB/+;݄B- ?T]Dz +L€W]hxSlÁZ= פekpjx;ϭjJ8N$>{2%qW4aH]R]2h4w#tӑ¸欻ОMZw_ Tr*)pq(Fy( T܊w u;֖%ƿAt̲yS+)A|Yٮ@{\]U1"Ͷn}[!AɡoȰ_9b4F/aExnN#1GYr9jtmR`gnPxu-(E_Л]Z%Ue-+:1/2QQF3»Po QqX4hȨ3;# 7 5qs[hSY;%`{Y ~Z-4fNβ3A9VG%%=|v]հwFb2i\} `#!h!\_Vٰ} YPʛPF+en[@Ѡmq IDAT2+"=P3Ł#oƒ| #z'?Ync3t7qt> ƌ9#N/+wG6)*"꘢??2NQwL{ 2Ec1xC);B8BSV"LL` p_9 _ռ~Gy-7eql0~>``G›d(#Cs 9TuȦ] d2riieSiB7[?8Zm&̇U}=`KVT9 ~а= Sqg~{F4kQay` U-@lԜ;h|\2K{<Ķ!oC y ɂ>- \x.|`sц}6:+d0 ")'[AnoENvŬiUdP.iȞy/PBR$׈6(f&6V'}]85`ޥv?lhL tc{"" $h$.\ `0xk@YN3.fՋfd:F|_{UYl1Va-e.Vɒ .bXR5v4n1-^a"Ue{ě#C&776쪽Vł T֎2$0YAY7KcJƢĩ JldETb<P-)T֍Y(֗]$WZ3-NLu 0Я"8PlyY f{!L])*g d-!nprr" d6yN f $TAxvգ SQ}@0cYeS٘$;^XrK`9s._.N])Gd6d4 FY*h]5a 1fΨ{]uVB+4ݤ|ݹ֒>p 'E~@GKٗe<#p z7onB>7w3Nn7D2!z8; r6%ʝ5"2xɂLᩪ8pb?1ipjF-Od6+U<$L'c u\?rq#˂e Fy%ǜ# (rD3j̕NMJ:f{ZSkbS̪D#0H@fJMP' \Q !wfEfDwJM$݁ٚR@=B.ЂM-0T~Q F+7uc0:,xAlVFV]ϙwBan"|&0䞡bah'&cW<wh%$ Ec7Iknҫ T ÅE4ɫ,7;W^V{uu K*Et!)8{.OJKfikO+fLH]ɼ=*썸]s2ێ;(BS.Z4fblZR]6lj۪35ȼ2sľ+ ص)*KV#]=;ԍGOnM-؊u7qa#xKņ t\%s43qNNGNfY!V2Ԝ}Ì C7zzT6\,+)_hڳv֚ݥcp\̿0Og)F]:^\ hɋ"Oe/ќyr$WMa%ʾڷxO1Z`FJw>9"O:q!rŏYV| XzT d;[|#?JHF;83M`z۞bi6xG;tts~}CtZw-ygIlS a#Sr.~{Xy&x{i>P@3^1Cܱ#l%bB!#fU5- n.ԭnr T?Likv2BcB3""jr2`{Sm]T"o\ *W J 8_#6福ei/=#;ۻ<I(%aܻ.c_/L ̳/ZDC0Zybm|Oe?zB6GD "OgALJt@?olIl|nc(oEݼ/B51W-pS]h N/4|~Г` ')k!۱(Ixxo7=)&6tޏ*AOrQDˈS `J Q-}!:dol xB Iv)6E-z)&c=vFa} 6!n$ C/ݶj%lc*ݒ{026(y٘w,&=d?%:4yԋ(hg!EtZ-vsG~)v]^I:܈NA͠؍heEF<5ԕI֐͌h _#q3)]M7iq\UE//)%Tu #r_PTBf;4?M%tI M.IZkzQwp$c|8d#sp>^ٶz|{h.xTLleٴ z#mtO.#Üi,-pCi !j68K)N{ϸiG*O]+ݾIh`7iI>8ĠjชнՁx Rf̩3/=sp6syZ.6/鎢| rEM1[7 V^}o΍qBu@D걟ۭMXTuu{ڠå~eKc a\_`F6RH,)rQmQ &|V۾+9D5@ ljm  -QO荚=L`QZ‚ w]q[\J_  eŬw@kV~d)Fy Tߖ;\Ɋ<4WMhٱ@frN`tgN-.U8v iyW^@!"/q6&$ba8pR[zՊ "f 9]XVy1 2a5?! bf$;fB+&e. CgNC~Z#7l?nyVxY0رZ7>;߭V !cP?D$H}tA\\q7>]S'nFs }@KB_8@)E`A2P Z{a3&JigY4&fdS&8#ſaD{FEpÕ9g5w ^G@WG>De6)!Q͏mG#VM =NG <8fW:=&O@N`'\{6ݚ|׌k nx|s^9Ñ6Zkn SM?LGy>`^Y ϬyzpW8Olj$){3L3p&:XHf\ LMրmVAqJ}5[CzE<߬JͷxOhåLݍKmBw; qVx$jn⯃8úB6N@ Xp jgCh/JSm/g[}Ȃs7qL|Ğm6M~" ogcVջ8Sz8FvI!3gK'u;9vK~.5C7w ŋ֩ ),5Ed}R\aBJՠ]|G.|E?"&%3rtrIV0^V| -OiU唽W4Ǻe ?|2G7lqKI o HհUs *WiM܀ 46K`qox59IKz'F" 1N ڌBJOMόs*x=ln)]_3_ԴS_JʵOe[6[?Cmun;nPGbZ]kURHLv`$yRYIvt $&9j$'zkn6U0}L̞1aL[ 1gdn0$Tl} )5q{D g[7{@aa=M;"ϘY1kT[]z*A]~sPe&GW1BUM*xKGaƜ,`m{.1έgf0xjƂ4DsZLiaQ IJUONUg%o\!6s,kӵݐΪ3H;,a{ vvFh)ڭf\f@ 6D.GZ DA(#,,oNV”)\7f\hUqJ;mJ"?2&R"ENcݦrɥ5C:ֈ躲,Ck2\]ԲRbFc (cSmfz/u/ ).@ sA$~"w6Sz抬N$4y͖B2ti}JJgzu ^ LZL#>ޘ8`@KGU dsiۍ*(vM dӇ'VL.o p @ T&{|rC0Ēݳx_j)؅$?7-!*`$ 2YIH 5pmL!#1Ҫ) 'V8vtNaz4fϦAqP˶3H+h<% xP~m_LÀcSt{u]0>ac{Nld9x]<[fUɬg^~˻}⌧7)):5ٞez!799w#>A' bo;~XbYoPm|#@MGrkRhxՏ_G/Aٓ#'=zpp1|Z|2~,0vϧI3>AI;p~[4>>檏Hco Dc /U۟Z@^Gf0;eLq2Su$r69桬7ƀ-Dx ΃*p6ZК diHMtRY/<{I†c{;"ҋGl@O]YKJMdo>Tt*7LgM>tkz˥ՠ9HAs! 7po_2R?Dl}j.f<练]rtwXan"w-.OYqZ\g[Z6̕RxQ%k:Ef#4gTz%rł{siI .cT}/ ϶vӯe N\02XE I| _f7X @Ь&ٻ0F pAjC_ լ1Ⱥ:k^w[jEg 3*4s^ew._qP0 ܄dP*-FԑHTg/E0t#vb"Y$PP4qM!Up:cjV3dwEu1)69F _6sh&_T]yT⤐3!& vciNF8͔zް\'Z1 up4l TYl# I9>ԝv14a7bpч;(80 g9'QF| X-ĩ(3ۊeR!,eV61֙#ig}m ƹ^ӣ)8%:8z[} r-aA=07 ^j>T<3CqbngmG=kuhplzaò>HBp1~/ ]?Ї3Bʛ BUsb Hn7MJ FPs'$!tl+@L [*A_37D<4̆iBqR2 5L9CV"$ޓsO}"DcoGCx7Y~]%#&.OftHǸԞ O0썿ZmO?s ÀlvAx&q@Osn ~4G 7_p f=qx Yq#̻zc@L&<#5aѣmXۥp[_씧8~O=(!`"|:9dO.}I&ߦz `K/$ɀ,)[/uk-NlvjgH9Jom7f¨U ѯT4̹;{& Xu ^!IF/. V>DXAaN:690rV3К8XOҬɢƳxdN'G d0ٗ40CzPk>4[' ,bذ7ưa rUv>vJi[:QѮpF#LxgD.ۣ;FI/'m`n0tB{1FR*QGA w=t 7qnХn 7"Ng]_"U6;`?iYYh 7EV̬|tZO|qqX恾 dbKR^SYa$, =vjV圢Rv%Piz+5Ad4 f2莥j'|@IHj,DFâCPWeC^SZ$)GGyu7 YhE R[GA яDTW6Va8;ps-RXmz| ʾE PB0YB Я=81h]GTdr$α;IV іm;0 x3 C #80'Yb(TKyy0bE:mR a}̏L۬d rԆZ)f&H)L:W-q MNFԲgd2teUmGsQ%λ`l(7ny/uH4Yv$`Qt"62CJMDّh]z[|*.Uvftyz{pHB@e޽V}8ioj墣xW/x W^4. Ǡdr&#p:RBke7w0`)c/ە+sX"(z3[vϗrG*Nj8B zqc!.بkQ]بHV3C4s eliuA>!ۑ͸tnŀ; "܁98*Y=wU`ƣݑs|RlUlGaxvPW!$Cߛ 9 7uK~BdS=|[qqrf3c4?=p/}ǽ7:?)n1u#e o30D;O;%nҁ^7)ܬM۶rpOVg(edwad~j"U^29[f!r<*y{5 k;ßw3FUcB%9OS#y K!T`]R9䤻Ĭ,v+Яu6HSccM%IGg9D|tUa#f !! «-\@wv9$l]]ix+ sEn4P{pHc4tՃ!Q^dĺJLc=HpٮTw}YQ`NQ/hq{l-Vj+0"JWFSݶet1-:'%C *ߎn'!PU:w.:,sҵA#48jȀJdH8K;Ƥ8X98M2LI'24sqxT"%n'.0wki=u\ ؂ğm-ČT@[n9$)#'(M|8+d/E&w3N1εz( *|U1 Hq}S\&Iva7UڝsLa1\3P{}˜Kq =e,^1%dL@gƔIO: Kw;Q| V& A^4xŽ{Ӊ ^s@d F2NAHVCdeKefaj#o 4>_FXwQ-tqBx$ O  jb2 ;#ZJc\!·N%HY!G͊ʙyq>vf!p}}㨙Ԕp+,бZml\Aqg"]hGD%aYϽ^~MC>}ZZ =VT'Tq'u?v2g"yoG0M{J0vy}7-݈ы!^k{u`eb65͑;q{{Lbx `a@~yPns1D7mڋۏA :WQqIt=ձ=?r4l|mS%τ4!Ҥv]vZYA~r |9`{aAmV.^3 Hײ>),W?F>HD^nyQk2>leiHwGy@ҬeBtvҮH۫pi)I iC~*&wy77$ub;, \[]Ŷ"ih [GǷtv0A Kl"Kicxd Os(A ind z/)!}Z'[c)x9fjYFmePB֪2IɼiUyw `y6IK#uvvʿїeJڦK0 I2i/,niC";eG"~LۀPפ=&K碵4XNΥ=U韲)Ye 6j]vC\ܜ3mSSa.ώ}YW֞c\vesdC{Aʢ\2Y뮋P!6(\Q2tG0U:詤@o:Jr0yFpBn59Głϖj8)gU=3|9e$5]@.!;^TFP2!5!FZW [G C>Mejzvi{ ) Fb7!Z] ?X1?}<NXyɈ1B%chH|B:Aێ)~$|K[ZLEMLɇ&WF(YZI5 ҄Z^.(fZ g\T|.mD0X59W` TS8 >4^sINW:g/80 @!@Dl;> V3rƀQK1p=bu@3OM#HR7:*!l\2a+ 2Sv[`A2 B>e">A&`G $tfYHBCʸh0ZI ]|FxWN=P҂9}Lp!%-'t"Eٸ&AK%#(Atʶ[&׸"NF"{a_ |G%)Y9%QgSFL]4+nt#Bq{$DÎpYq l\ 8#Sab0}w!E؏j]Ky8z{Sb ͐p@_:蔓{A_6zFu:c_}/&8p<[Vx)7Tcpz~iMB_fCwTg]π+ WaTA cP/VEyyr/]~4@G#(xL} Fтc zRcvN:y"Uc.T*eK!ThHu0zH-#ʎVlztS$0Ͼ'r+kiAÈ I M8C+lL&"7׬2lyHXCgt֘TZ.=aA-mNϧI&L0-؊z[-5,Fd 0o9ij+4-˕JCi`<:R#IGCgPPPڕӛAž%RѠ/LW6O9\DQ:DiðSpG.gI#^0dj[kԅDrQ$MW{%#ww~ckg?_ oL8攸@ۿ?3׿.GD3ק_=~Wo'_<آ'dtp_x<|]k7KI|>};?9~ZunfF|O=rsDDa~K/1wəx?N}v|s: ̻U9BtO*~\mw|g>x?w9 y.2ꌯr ?s}=sO\珏0.?"};È?s_ٸ湻ko~3?| L?Նz0?>S/q4<\Y_yN?+<"Gxas&\qCl9K~;Fw.t:IA!P<uK"8!lV*g_߻?K'/TX50-^ƥ"e}k?۞qM<|F;wη=}%*ۗjҫ;֟g^`RlHp3T>;\7>;s';ğ|}M͔Y)qYJ?Ma/{;ЭҲAfjgZ)ـ& xk?۞ȝ_!qWxm)%B5w{=oLc'/Hy`!א[8- G 7GҐe<1}g" ?s|7?OvBDė{/O~e7*_];V=~1N"';S<{moǿ~R%x|GDO}3躷Σe@__< έo_7ǿ}bs6Wlҷ<'oo|oDćpX}qhVdp1;ӎz@;k[F6ƻ~:dd}A2>H|K_=Ɵ>sp]J=xw|x+_m/>XoHG0`cELG% u\x?ۻ*̎An>o~U_30MBExⅣI!/5a平Roǯ[~+^LW?T LNOA&ڶZD{ӯ;#Wݽ.lϿI;Ҵ$t[}~Q?+w-xb޺wvBÇo~q@u<{3u!vrSӗm gvK'5" -W|WĿԭ=-s89O|oxp͙go#~.V 7ܿޯ/z=^y$|֡bj~?[}Q "4ᆛmo|ji[w 7u"'Gk>os6 t$ ?M;l/'L'Bs~ͪ}ɾ1~`5{ɹmC#'GXo[ǞU3Nh]0):9%W#/na'0Kt׵ѯx<|@د}?royfog~F'>sKo]׽rWqv\4t]z;__6}XSkmDLʩors_s9W1NNjc=p?󛇏3%>d,jO=""~7o-/5[]5vp_Omo'Fv .1S_zfAjz_d|!]x%/D|_г]_@ɋ<}>eF7oiݮj/{~k]9^xSCϜ;x|[◞~hwjO*s _Wx\|-mYדFoM )+}*i&a:)|׹kbA\$a{dXŕ|2n,%LUM%7Hz`9zVR @K׌s6ሊŪ} A Z^Y-U'{00"0#Ke! ^ M\yV~M_&H viJ`Zekѥ4ҸV c?D?w;Kػ)=pZo y5^ʰk{<(g IDATlTRΠ)#Պ@DŽm.bh;׷jQfz-5 5,[j `YtU_H2Ȋ%-S >OJXqXT=wM"sh)B52mQ(:rxOUURNt|n>RI:z=ׁՏ1HYWxof1r(%R0o5j'wZc`f$x2"2TоRSO&utt A?⊠q)AsU]L+j궋EVjuIv"EPuqy2lLJhA280T_&?:bjR9S]9ai `A%j}f5$#e͈~]2l =@0PVFzqO[D?uG~ʦ$|T$(U:X UWuF^MSy5#LK-KK+i@#%F?1:һOk. ƴ5 ΅*jz~t,*ʣ+b }HCsFP&k ߬1jCɤ2zš2إ)=dߣӾ^]N̥ :X+zevލcO=S:Sjrn6+2+m.ʏ[\ӔGj^y^[{qİ <<ƖvS|CŎ;@\:ĺȵƘj(Y\cԽ{J#mp'K7}|#ߒ/9lJ`#:'1V]_Pv ^/lj퍑zN7qM-8>d."4(!{qE7)w~LUtB)u">CL/fʰ5DM4ߑo1X\-Z)~mbNa%7ocBڮer:ׄafIǎ~2{WXx2 cy&_rdSsVw*2ik#];i۶ chG2唝1~d4}VF.Xo.)&z/%!V!4_]!hPЭ'(Uc!+aa{˺N:m=tPyK ,~tbq]L JJڞB 0`8 ܜ `|@^QFuq'SI^UK{q̆WB^ĥM<0|b fjNA%ͨ"F6b8 /*_uu6nMokWƭ>pa , }ξ{-8M!E~nטe?GBs_p .?gD}}GHv/{`+¹o{i'nP9rFڷwi˻˿CyNsD޷9z{l<-oF2bh}cfnT$}2k-  Ol ߧۥBN:AZ@2GRIYqᵯGҥ8!cÑKG>-[Yptk$s;=Nl@U=s6RfR-O|.Jy ONzϔ_ ik-p kD_z{|V&,%"9e-`&-1MmG@-_Xy`46Zy6vڝ)ϦjwHicgӶ=8K-9Qt;:"qD@2O"b^3GI-DγORNn.$nue҃y׺sdbnn/˻UBh\MU(ȹcնl~+:u,[ޙe2`]jX^. xg2w|x )4:Y Ljmk#SeJbڮr +j#eʁ.;;wjA!-m!NKcc9楡kxe~y<t&x(vy_~Zt`g fI;lpU..tTz.#د+[=3U)ymNwvߙwTI蕶NrN{Z8R(qbq&"f 8a4ʿcw:ksoY=uϱjC/KүnY}5h6?e*Wyד']7!#Mn{?䱄E{H66_Y_gUyW=5s@4-98^;]? D{R4B}c 1_g')єPA;_$MMsJ@d6׮z֮ɣK^艚 fh(=w]K®gm O4yv&% %О!=#oIjv6fWݺq,}ʚL~N $ƊklY"؊eҨ/i0Dd}=T\P϶~k.#8Γ=by$ʂ-7ʪ>Oe-eɬ $8,DOnβ3_C0sW/I T\6{QjeQB[\nHFLΩ`Eb;Fa{D,Q䲅\-pG% "[)g֞&6VHR"@-`sR>cx]$ n0L®S_sLD2&ob W$3ī9E4rgPdR:b %PIOB`qo8Š#$[!XFd\fHi݄5OҕBPbitI:ao w5Ѝ䀡fXv0Sy.+mb\irJ`ǘ.!mE=J5Ai٘jœEGJx hчqr"m$.e߭]\5Hic4≜EX:TpFO\>bl҃Yf[J0Xn3W VwВoXo Ɵm9ʅTxs>/KNRd`F0FU;qR7UD1w5]ԱsPUrq$:8GޱN2=:E>H@mcG,ߞ_x!Μ?bÈ7'N )#)5L,iYdbh'U#mMl$y9B rYdN1e5ےq{BYWLr:KWF'mMKr$5m J#t*+ V`K SIHiH1feq cXwRb!r'ɰV>wԅX~/B_3Ǘoɕ˱v-7 ЭW8\VMBDfMEeѭd[Kָr}@ qWڑj&}.k@sWN;T]0S9zͱ^W1/b" 5)Nbmr6vs$O'*ps6vȎ*ZH`Ŏ'ߎy[l#ng#.eG^w!pChzj`14$9j!EV9JQ Yuْ+{şO'NHayWǁ“3r yyM[+A1iɪ3&:_/v Ǯ-AvVB)t>E'zIYqvV:fn+1ܩ5Mf&ONi+u>B'{"0zj!;DUY_J j|VAϓ6<= @=LU+8d3Z%e7kF|T; K#$\H^eQHv9XN|hcx\`fzHƠ.(!tpi*(3&m<̀VOz0՘3A }lbVQv1K"ۍk͏$q((70ŀ5iV&FK:edG<ϳ'U[H'1, n|-FD|t;Ƙ Ic(YǎgFq]PUcaH'YHtN=bH@;nGJ{L]Ǝ_E#%F̂ާ) C4פO?|w}n>>w~`C:|4N=ra^{a&k, }MY3Wvw4w1oA$_ 9a9jo:FWG%Gᐚxe?O\:dұ]mI& jY8sU/#ow +VA%;MX3.; K .3U֦*3f.7M~܃YF{be9K۲&uF Nt1FJViHgPhfJ ZXKsg9;oGMϠn&ADq/5ԛ4VXlUU`x29 !ITܝ*g\" %`3"/Ρ*S IAmze 'naDTMK%UaxhUkGۚKދVPtHJ{bb/ebJ.\lYv-8{J5] c\$9'yUqrNgؤWLri#Vؓ8ƪg$Hؼ:{h`K#:I hNR2h_a,&~ɕ'NFjޗ!uPdEYV!&]".*<Z_ctK 4!ĄrV ^RMZpqźEΡa۫ }Zz"ev߭&]j56"2Dڮ!_R &!ԀTN1"l-uC}Tk3U$S0[*A&4[Y/e6$~02ZPg!JJ2 ]M:]zxջ &_} [ O5Ί[.Ig֌ub&,yl:,VܻF̳=ĵmf3q)q==HbQ=udVHJm mX踑͢5'Whն/60 :V}-RHDBՕrPne(C()[5GK[&X @r]mkVB J Zp;*mVHiސ\ŗo܀\I99V/"0`TL'JGQw&%)#'z*X8rLBgȹaz1rW1_,"74N՟79֪;LzȪ*0htisScrFoOCsh_ Ts$ ۟䑨uiJ=Q-6yQ(YSArhgx gPTGڎx$$Pgw* u*<"8q-b^,%xu|&wLX9Hj00nbfeŴvEW-pz3:)vNssf9r(O4vأj6k5ƃxc#fΙ A4uNXn$9VS2$5W4GJ%p``ٲI1U8G ru%Vɲ:\7_ߖs=ȤRKaJӴ=jj;,hd nz}).v0ljɨ&ۊ&a[6D^eu&beR@ycYAxej h!+kjM?򍂃Q1hH/.qY& cM$R8GE@n>\EsVp,b`.s/'4"(RK"kXJbTJglIf{Bw4IfK?oJq\V7O6d&Q%(PYmkY ^fzb^[E'kCqYE\ H Վ3A:$Qǝ)'V^VOҒG.` P'6qͭKˍM9dބ(匼 Ln,f\ 7-AznV"{(eM%94kQw%Ϫkњ+;l2ɥ.o!77":uî-9g4A "F숣leÖRE,F U!gcqsaaZN&DE0NH hsǐzvjh09ʴwMDz}~f_HE &P2914UW@ l nXJD1NU{ m5I Lg$JCͺO}{ f;rTߕjA1Rɳ*& :`+G)wDTk*؍1Gcw5mֽ*ɖF%A"J&De 3o+ݲ s9qJU[* hHc09M9& SCYqxb(F&Ⱦ$3VHN;IQ\c}A kputR5TuD dևSr;F; o~gM]OWSKвa"QH4CU5R҈ABT jmi MiB7;%h$v L3kIL4um.gA`OuJ 8@WUKd861:`aj9|ٖMY2DH[צo1V/gS^tyv`W6*ΛHR;"=㰉xi-'Τt.|XZOe3 # 4Sאk'Obh/2"< `s' IDAT=Vr kИv9}#J춁2^Y"Zm}c1`4 Qm,(()Ğ2<;F[JșTQp~KeAjZiv`;_a\;osM 9))g@_b9y&*mgD0J͖gJ1}Vh{9#ldS2y|]}j$Ijansj1(ĔV:!CM14 e:!Urk<(M.1e?%#AH.+qѓ7}QG?L?\\}~kpV&n0qliRHsm7_u1Y|L)  OMޭwAY",ݻ<''vFlҕ|/vSdvCl;<)]=EWhEJH:+v;.ЙKzj'L<2|)yGjDE 7{ywܸ|9\޸A]o}Gχ]'O̝2K'c_^Đlni ]1+>HXR,GM%v!:u`X\QL`lu]hOߌj@m֏m7@CVG+Ä3n$%r;< %A'¤Pqk%ZjI5F@o~AYnwv9ziߍ~n…#ꀨהDWIvi0u?A64YzqTj,@Wͨ| S.[:eיI ao\?pp%*7\#r@R-5))bmcSݧiYv [|E}ǃ &ָpDw#NwѠ '|x!PS XeɕG3N7qH%0KNíoW|nk~5a]"U㡁jRViML4IhϔVe1Q-pkT]Edj%(|n3`F&lUc}Vnr2P|7TtayRy+UJQ*.1禧coa2no#\00phjrhwNjn_>; ܕѮHS~.0KMXԖ2,}4}U-q6 WX$*dt!b^ `) X[b/tF۹cFr#u}ƾmbJ'Y̺0:E̼Hj7dWt:,*CrʹXyT2*<֟<$>4BPb?g?!KNW5+z`[8G;D!ַu &ngxMjKucs}7L/e`7يP.+01S .bjiGU,3;+]`?j+~iψDcD]YuԽ|R;C$t@*!6¸[ `;BrvH>lܚtwQPw,mXXA-H;_P!LPL@c6[&FD(@DtE[](_'ƈ !f6L2v+ɸ<%gѵkWb[J !;r,+$mC6g'(J܃_ 0,>zw11XW.AbgA~&w; XG=/6?g.\Z'3bs$擓q9.42$Ji uh0g$tgRR&ɡ9ROsXHMhi,:іnd%"[$j1k [2ar fnzI%ǨLJ/CX!XgrCG[#q" ^1Gɕ<%6׮|Fp>鼺}2Adgk+9hVUK|hl5dnf|z}%<ӝLnvYWwEJmf F_9 LW6P'Y%3U]L#-uGB\aՆye+>+ϛlxcOD](ٍHg))H4~>'Tad0S.L0#H)\p6\4!%Ix̽{KK7km3`b=Ε@PZk0*[04Zg1+~\Ը-#APO',{vWpYBvmt71 ${7h`$s ($J[*52;<b8s}q˾2W.1W] #54~ۋC*3b 4WOUUGe4pcAI_e|]6jЊ VM%Z (Vc_l+UwvW|Y%GMuy٤IM$KcO9j6Ԡ=Co,<2H EEQ]o6/x[ʜWHbalNl;"F*fE#wcEwHR\9N:*84s6uVU؀R`@ &#mDuzLȰl~;qo|R$o}p y+I!}e] I#'^0qmKa=v0cYм`ui*{D#d G WMpU5I~ ~p}6bؘjJӄQ4=&V(J׌WGwvhPfף-95lZmo^ XǛujdXQMk%|5bX>#Wu^"rh ,,{! ZBQ K[Rd{ !:W}(_ݘ!l7FF.ltcUw5 t ֤a; 1!" wR;S}zdZ59^?^|9OSTԎ}vM ŵwh9Vpc[ Cpƚ(ڢrx{f0ƣa?Wtoo2,+&VCHX|:ԌOKC~t\zз3_ :Np@O֟LNBl [[D  & lвP BD2[{33N`H('8᪌cɋ:VE.t,qN3z$Q#iN}>:&cyUmIFWUJY|FU#K`1!'kgsQ+EE=Wquр ;Z0%À4k$oc3 6oi+B^0n [&PrFG{nJ4O)aWu'>(ĉCU)-aO8H\UAT{VT0_L9*WpWL2#jکB]jDQ:xtH , 馈):>oE@vɌ.Q,%6#(e<( \?@TsZZ6&|"sΚĂR{D:j0CcgFPYAZWq-HJi§(C6Z*POh2L;[F"M1 %D @#XV ԭ8sEUjعʹfPl+VC%+IJjx"u'"KdBt93V _[ct D3dY{PLG*pxޣ9H@WnУպ(:l)[RHFQ4M Z:m$P;elL' H[ ߶P?9媫DjA9M~MErr3[ ^#P_x;sbX0i}/n٘QQdsI&+YS y+j]VcZwYa]aZ`kM޳=)1! v&B^f+q57~ƙㄌ&a}<«3jHW$;8]Őv[|SLnTlSSgL~=Fq0mUtl܅kyb'.+<]^C(Cݳb2)C`){ҥfcL:m75+ߣ.ndM PFVhI{|V,+HnBb\<(6:χý1³\9jE~E?wk\84 WڝзET9}"Ov̧T]o0VP)CY;3&,Y5c pM09yֈ6Ii>v.6لf v\  [z]K5@ϴ3cD }*?O Bkb#q}|F JiȳQ za ս֥5V׽)c3Z㘌3=@y&Doy53I/ f IDATznAitCR_1Rˮ:j;ՒɖD\kŘb?4NpY"9 #zʱHJZ+$~2{0%T&5Y%"9Ƞ(I;J(DD'~A@!BeR"7kW3 H%(n$LՅ57e5'c!x"s+hP^ɱꎺiz+Eb3n0N:ns~&fc& @HylX= ɭM!LYrnIzˌM=g#d(#e#S ^ک&bͤd[qn?!(J+;lpL2SdJFJݴ«CvyQDq2tdJTD[QVQY*'@Ú9&4<c+L|}u-.ZkeRw9o8M礟)@"vi Ƥ )Oa%N5&sW%z (V.>lV 0MωlXwl=ry*I"XqDazL*KA&AP>yT4 6 OiKdy%)lD&O19%U0g+p^83%t$ΐ겕_(Bx4Ǵ5{&m&d4־,U=&nD}BbG^() պԂdI Xld(}K!xIp %rY/n ^۴5!W+7֖s9jQ-HS,mXk*`%LY+;B?Y΅E.yC ")P ~6qqjM7v4\5UIvuqƱy- QmWM+F__o{5p8yjl^|!7"6'9fe6~d™gu,&vrNAٛLܴ`e6bӌ ͒miQL(ANK&H,oF bʾRCƂ|uԺtvDmIJ&647sJu t0%#vTj]%Ɣ ٹK`7 Pjt%ZxR9bK_{Ta=*A3's?L_[-d1j`Y#&A mΎ)j}g`ϼil&@ 8h.pc *!& VPar Bxb#Κhlv;H1f?ЕؕV~F@μfg7hH;7KOBLY渐T*2{y?PU?أ$ag @#0WGowƍ7L@L܄LX B3E^wT7tk]9Du:in`eoWp+>Z T:ʾs]oվ7TtƾДyoJ鏏*c!UQҸv֤-:7*(pKԢW[1m`g+Hgo Z㔗Q)dzPBjZtuJH"x̀GdjEE:9Iav3E%\}ݴzcjP՞=#[m* 2Ksr9)` j) b U53 goPa>󩱐26QuuDe$#8ZH3GD `!H2V!v4hs?3`]Yd41pU *BXƳ90xw֡1| ;v; ġ0h;[mM5 U,vbȆP)NZqHzuN5!X~u.bzpjc^8pƜJQXvDl*k븠㚰Z!4Pm[Qvgޔ!qYڵm=:"{WF/X@vkw:։"NQCrD0m| 8 1BT-/w\.S['G('FaAM,y(nSmZ ]G5Žșr}Sxr VM_Aypjs.tZ^-w[ Ϡ^>PHu2nO۸Wf B-WE掾=MY ;_!W#EO_p ̓o7 v׽fC؛ FWb-$ջ2N j~7ZfjIJ.@YIB6NoIӵ)Fqu, QXP 'u>tɊfBhd*{A-`uA?v&ꦒMEjj8c Hד a޷TZ52\?s!3 YbEI3M ED\2jNtY P!9(G_=KvmDFVYb VҘ+ CP-FY/z LP=nrԇKbcEy;\޻o ]Knqq}O= eg2WbJ?)I,2Lg AIqM0%|5+s犍[$ːq%(n@{H/5̈́ABU;kϴ',<9{&EkQgv帼T((Ԛ3-RFK_%kD ڠL$I"fY+1[kŷ%6ݑbS\? CE)J0XEtmX{IYxeQwF.A(E4U%Sc.{W3wM Lwv_Wb$ Q@ieuk-bl3 Xn۵~SOm⣤rjb]\X›l+5cf|`F V3 5ChS\xY̳nWX|kz8逳UxLp"-9E)U9/3f 9YS!rXL㽽D3̕&駢<|/Q"NA>pV$p M3x# cf7 ;G{x= xuqR1j܎9nP> OI~ͽ˴rJJ}:>icȗ9^D`t}YcXlA>i!S FO=8|nF~NdZnZ%Ze9MkTubנ߹ #3˲^"Ooms21Ni D+Mm5vqR99~90i.@`P}4RtvPvgVi IbSv6zk/U$S#1h;ZSlݻXkAi~MĴ qg$pjZ)]圓42!fY')0 @r T},j^ݙ9!7ض/MhT7M87 hཌD \u8k1G/٘V=a/I].ZVýqjg*e+τSpft3s(M&'y3߻s.xfkmJp(T#^M2]+mUm]PwB4P޿,yxpG'Wh_Vd i0I0L2/k`u:hRH A ι.T cF0zatMv)/]?Rx:i,Kŵ:p m{vJ˘*[2P)~Q%#>װrFJջzm0Ȯ=r;8z0-m~1shr2S:+z1a_"x؎E 0T;8DGEXR5Yã "kil'_)DDrot)tʐ=swaQ![1Guϋ U Fe|Hb#ynڸN] i;d+B逝3]Ja0WXcܕm<fSGsx}WC E<}k@ Lrx}{HY^hI! ٞ#O΋^ Mq~?ʎ#vJ?ho:[UP7^M6פyW?`PM&K n<3\a "iɮ@!*DpaEzar2^AYb*rEo}5ԩt+f D;y` wnv ʩG72ͧl3_":-dc+H]Ad3jݝ ;Y&`wfG~Z;Hɚ!+t^ Sq,E+=';mo[&7\ZAO`H*6AtӹZ/I:4*0{v/ /9 s7$J3i؈"od[tCh-3o " el#`n1k_^ dcj)X\&T0\7 6ۍ5ghTHl~O?j!ݏbw}K3 3 Q#S0 0 _bԁ͵ט;Ʃ(DFo 10Jb; _b^BhTˈBGFPd}C$dʊs@{/F͎=f~M]0xvfosp6I! 7?8^|R; &;A.ijBQWM+|Cdɏ}>`"?s o !qX3?= $&Zi&v 1{}bGTƑ2jn ~KjL]RSeYWyIWKv%uap"m_4,GND8 ӄh舮ILz`ABVt$(2O$A%sVeq{}K=F#H2%34z=A M2.hOjq"d n/MW:gBq(h U}SZw_ ,hlB"h4TdUKŭx[Lv NICLd-0/npFX^ե.䘌=h]t6Q!~z!ڠ@"o<7H#,qÜyW:K*!HɅ@f` -Fov^Ղ/, l /T.nznb̓cdc4BdԙP[+{ĭx 5=8 9=)=(Nq$(| /y Ad"y8DfGgPim̘3>ĕӎ&㽽=Ǔ:7ݿN1#ļG^W^LFјd.ސeDNi 5tr tCUi: L>+wwҏkHwW?ebΨ: IDAT,FOL{hXx e$~zN%qUAqѳK f   qµ$=4 np @wFMOfU45{t-+ Lte!6$iB fޞ/9hiM}J䁁T9%hy&f/aEzY/!oS y ɂ- \x.|E8 X@zK40Cn([AnoENvŬiUdP.iȞz^}Q>;NT]6|ߣ%7R{k4 &Y=^YPӁ= $h$.\ `0xk@YN3.fՇf_OuDJq94rWa UL]ZbG's%۵tB; "Z+{v[ywx7-G\"LnPG[Ӎo\)lU{ "kEeSsݿ~T mkh]+K,e@hF-TmJ<@,`j=JQhE"NҚipd~` 0DϪ^7 9eJQ?S&cl qpOk*3)~n9uoVIf3CRo4CڗYj8F9i;惼S m; (nMEEEφ0Uvdp8MgsXBdai- |f:6:u·\.wh|ڎ*e1Gfueh'lׄE4Ƥۛ;zu>8v:Z Q{3Ou[K>LBSBa34 6-@`zGJÛz'duAhMdoVb,B S>]32Le91: OX*PU-.\vCW9Fb0{ /Mae:;0&bܿc'sF0::jVB~ދp8٩a. m9,zKn3O!ޘuEx%[8)RN .Rǻ}x#z7oA 7VïP*+u7<<38/$!2 3qmgmA-U1LԀmg2OU5Oxg܀ISP5j oW ۷Y!e*=fNXΐ Y,S0Ob{Ω;"@"]08!/OZ;۪q*WNd ,#)'u(KTd+jiKVD}9* A#wvNjsA. ɏ_irm;V"7# '2~ }(10j}:bA!4ޡ"n/.2DCxe4f(` )I&Asul7_;T.69̉S"͓ ok+ |bΩQB[ m]! bb.}?9uCpcPnOee]q7ۆqt.,*lh `TvsC#g>\ɳiRIlOk*sMlYՔhiRȌI RĜ9A+! ¬Nir:P0[Q 1^HÅRQZPz@po8J.| _ZG7(4]Ȫ=2&&‡`jcH.vn"9vcqVB@LP41vC醪!PL 0\XDsZ.ryqs%?mW\W'\D3炰d4b6 4[h@|-=40,Uao횓vAuג78sԒR躶ydTVAc$6_٠Ů]θCWYep)ءNžzrmrmnV?ָ{mM@汪 .Jh20]g2xH]C"e"9+C;.>zVnX!!lYVʳ["RѴw5˻K9ڹaθS&uВM u1~_9HʯtJ}!2 oO1{]cHw:8#!$'=|rDf, O:q!,;>l,=- zXq->L8%a$#vp&0tL14m>U~Ďr2F']8\?q?o:4hNugč7nCD<Og7̷83$\|b 7-H-|8zb&g/}q_౤BN)uxCrrwo,d=(1n;|Jeӡ|!pgDccGJ&ЅB>GͪjZIݘ][~dǼɅ`gDDdT$Rc2E9޸3T! A~}qFmVM7˼!=#;ۻ<I(%aܻ.c_̻/ZDC0Zybm|oe?zB6GD "/gAt@6?lIl|mk(pt wTBQ1b#v%BdWԭ={I&-z躏(+0Sp hɌFUx}tS័NsF! _<ɉ'%ClDd~[?e?{A w3KQG>$c?20cF=,8z o{8dp$ >\!~ʲDF8.#Üi,-pCi !j68hycrҥۗ)N{ϸc#'.on$f4$IbP5Ddp] އ@ނY8s*e!mpM\cf&?_BFQS }9(bW3~2}/+`Xbڽ2l*S܇C>LmG#VM =N+¯$G;N!7ppvAi<h\ L |]x1ޭẏF ?ǗY?=:9:@h 쯔xvk`UBo:aBȫ%&7f'f>jfI_ἰa40!ÙB@23zW`:8l *LV"7B'p/ၨfu/Uj~-gRϰES.dn4X: 0n?deX9&G[g#{in* N85`WkTn Z` ^iUg[}Ȃs7qJ|žm6MF@ޖ&QW3 /c[6$8<yQcJq u*VVgt"ѻ\pȽӭ%jZ{YŻ7'DDU-n{kPS^Ұ_Q$]Ȥ=H/*@GQ~ju,VB$1wgѭT [8ikp BNcTnUD;{{īNNZһ81¼AtRfR$xjzfS)asHl̜~YRN1?g(l(x.۲ yj;m tq+@XB8E`Z\;̍B2` 9茈$$.OT}!'E펖QFs U>}0*ܮ7D%Ĕ}f~@ [xl2?hR)h1va.d)5wj)؍Fؐ▔UJ6ӗr]ߓ3ϚM\ JyWD 5 ҽ NT+"}.T" ʔu$'#жO[ bw޻& 1cz]OX_)<X D T QS647^Z$ bkX;w2 BQB ,9B)͊l3&!*d)I7=jETtMߛKj 6tX#dhWnd)]%6a&ںt.B0 h~Rvl?ׇ$nms 5|g nF`5pS-fh1GmLt{:$ݟS;Tpo< i(m7YU4LX 0亄hmP+>ݓ ;bБްtpoVk}^Blo}f)xfkgj]7,nÙل? F>K%7SK7QK]Ô21HK'v~51޼Y${uozL mpx莞+A5jf7H}8Xcp`d~nC`1M}呩i*#%j.Z曕dK= "LB8`˜QɪFr7fS0/ w̴}q?7v!bLO,=ܛ''XwCG2̽ iy|YFrSw <E]nr#{8a\/TTஂǺtm9:璎*f flHC1^/F6˰.N,[\Ex mY(n;G6] [뮊>|Bw`ki2jfe6 T_ `,Nr@˾">΂&n%LHhKnHaeVG؎/>$x8#Cn"%R46m(\ X3lm>;kªcH(싮+2ܱ1I.E-+%6j$8n 06fiX,ij!VGzr Ia˯t0Dj-r'Eic;i@/KbM l)D.#K'&8K ۧ$yƪwH,Q*|54hdzTe! bH6ݨb״M1}x2`E{q2+ Ie't} I,i=rKЈ]HsӲL ؘ^ [ ;<@.z0BrbUC8hHWclD%l;񈴒fSBȈ s)vܯw6rp PQ'x/[@C~mq/Z';PyeJ)Aoms X9&`hϩ h"UR!&_]T ` ^tC4|R@ :,4'5^ABl{Է!_6Ua;./6XE<ta1NA/w#5ɑ6e14h ' xøepTׂ\g'SHe g:oSz1wLZv6K'^!iBqt.ܔ=J}F\HOc9M"I5FVw]cw#4qkXpxʊSג:۪ײdX]‹*}~Xin2jM-IDAT9+-L $Ox%G4'_NrU v![ }xޞvS!8q@t`Qk6x&5z6|< bmD[Cd,[S(j!pnC 16vT 8GSxaUoYI5+ xytٹ|]B,/sBizR'ӪQG"Q] FO_ekݎ؉ajFdd-llN@_Coir/Bit+!1f@9r4 ,bS*lqDlPMBK I!f" "CL>@}C#$|NDՍp)[a1 >&Z1 upy4b٥ t]fm,hcȨƏH)YB Ѓ@XЅjYqz5ݟXۮ)= O UF'Pv/&r\nوo`867?C)L qIJݛ \–MI1|ًz-+&5MR$ОOV]L 4\49h6[^ O֨em7dMǁl,uV7Q`[o0>a Ӑf>, O281F5 r |'c+J# bhTov5Ē9= wzQn q`@.`sa/QF| X+ĩ(;ێ8eQ!,eV61֙#ig}m ƹ>{D 3N3&f,^pV^_qH2yPπ=d30=f :sߏ>k8\3CCքcӀ j# ×qv~&Nୟ9^nj|6R|a+ĺY5+P7Gr)mQTJAoH6Cz-VRӅxx>#pWpł~8h6*GDM\]`#Xnռ҃nj̙bwRТ}Tƿfo2a&GT82`3k[CLzlz( 23F $fػ!@md`;Ic:t 2^D1>n=WG[N +yvmFjUebI^77)nn Ӥ*}K\^3-蒥Ű*MUTDm(榙GAkVo*Z5o-JmaQ.oF 1hQs?o5빔ֶ!W7KW;U +HDk֖ɱE2hU6b ^8B]^VI$51C# cT]2iW!dʣP&k 5SԇaAu}p6e၌k a8-*BQMԢT\;na_*x0JB1(KRzg/dܚ`MS,RKq4n8wPwx\{z~I%X( o q@_P`!+1wiY4؇b0dDo4!wͰ,t!@x AF6Ɔ6&ILHOLS{pSvB\KsL VkM6)Np#FO_ ө;t5bHiw\23f؇ @"9mi#:9}")U2.Pu 5< ?xU .xb%D~jO({o9aB`n7n/0_Y~*vY^ngbʼ˯~k0fBFqO h)<񉌂%b{B(Y5_.o{H&ߦ `K/$ɀ.)[/u{-NlvjgH5Jom7f¨U ѯܣT4͹;{& Xu ^!IGo:Ao"Jpr'ZRSz[XٜUI+hQZqidQYh<2'J2O!=xi5 1lX}cذD {|zHCNb|Y^Q4-VhWc#&٤-KhNQ p8 ^p~Ľd;3CHgy+]@M}t"|B*dחHOGVsڏ@Mk)3|tZ }–HXD%zĥ9EeJVj ֙-hAdAw,U \ .>;%JBR+f!0B.r""M9:ʫ.OF,:r Rp~%@{js|:"֭2_/EHTLPADߞzDkEnӊ# e19k$hKl!W,t1 /zSKl%ۼI⻯F;~{Xx~xgk j8HFkMdo/>8yp<9_䣟%͏#2Ox^h/?gnk4@/=p/}ǽ7:_zwLcmHY8lq4߁ :)qt",fmڶ{ʾX@O-4' W60\g #s&Pa6lN$>M U- >M4U6Lm厺bD@T/EdSodbt{K!kJ搓vN ٯ8;K@~X+ٌC \o(1WM::I%BE_Q^0|jM QeV0.`R/ْɝ4nxaCE׽/,0| ^tFc e(V t>FӟJW_=%MF!dCG6@D-v%|kϊs2׏|Dsaߥ * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "carla.h" #define REAL_BUILD // FIXME this shouldn't be needed #include "CarlaHost.h" #include "engine.h" #include "song.h" #include "gui_templates.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" #include #include #include #include #include #include #include "embed.cpp" // this doesn't seem to be defined anywhere static const double ticksPerBeat = 48.0; /* * Current TODO items: * - get plugin instance name (to use in external window title) * - offline mode change callback * - midi output * * All other items are to be done in Carla itself. */ // ----------------------------------------------------------------------- #define handlePtr ((CarlaInstrument*)handle) static uint32_t host_get_buffer_size(NativeHostHandle handle) { return handlePtr->handleGetBufferSize(); } static double host_get_sample_rate(NativeHostHandle handle) { return handlePtr->handleGetSampleRate(); } static bool host_is_offline(NativeHostHandle handle) { return handlePtr->handleIsOffline(); } static const NativeTimeInfo* host_get_time_info(NativeHostHandle handle) { return handlePtr->handleGetTimeInfo(); } static bool host_write_midi_event(NativeHostHandle, const NativeMidiEvent*) { return false; // unsupported? } static void host_ui_parameter_changed(NativeHostHandle handle, uint32_t index, float value) { handlePtr->handleUiParameterChanged(index, value); } static void host_ui_custom_data_changed(NativeHostHandle handle, const char* key, const char* value) { // unused } static void host_ui_closed(NativeHostHandle handle) { handlePtr->handleUiClosed(); } static intptr_t host_dispatcher(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt) { return handlePtr->handleDispatcher(opcode, index, value, ptr, opt); } #undef handlePtr // ----------------------------------------------------------------------- static const char* host_ui_open_file(NativeHostHandle, bool isDir, const char* title, const char* filter) { static QByteArray retStr; const QFileDialog::Options options(isDir ? QFileDialog::ShowDirsOnly : 0x0); retStr = QFileDialog::getOpenFileName(QApplication::activeWindow(), title, "", filter, NULL, options).toUtf8(); return retStr.isEmpty() ? NULL : retStr.constData(); } static const char* host_ui_save_file(NativeHostHandle, bool isDir, const char* title, const char* filter) { static QByteArray retStr; const QFileDialog::Options options(isDir ? QFileDialog::ShowDirsOnly : 0x0); retStr = QFileDialog::getSaveFileName(QApplication::activeWindow(), title, "", filter, NULL, options).toUtf8(); return retStr.isEmpty() ? NULL : retStr.constData(); } // ----------------------------------------------------------------------- CARLA_EXPORT const NativePluginDescriptor* carla_get_native_patchbay_plugin(); CARLA_EXPORT const NativePluginDescriptor* carla_get_native_rack_plugin(); // ----------------------------------------------------------------------- CarlaInstrument::CarlaInstrument(InstrumentTrack* const instrumentTrack, const Descriptor* const descriptor, const bool isPatchbay) : Instrument(instrumentTrack, descriptor), kIsPatchbay(isPatchbay), fHandle(NULL), fDescriptor(isPatchbay ? carla_get_native_patchbay_plugin() : carla_get_native_rack_plugin()), fMidiEventCount(0) { fHost.handle = this; fHost.uiName = NULL; fHost.uiParentId = 0; // figure out prefix from dll filename QString dllName(carla_get_library_filename()); #if defined(CARLA_OS_LINUX) fHost.resourceDir = strdup(QString(dllName.split("/lib/carla")[0] + "/share/carla/resources/").toUtf8().constData()); #else fHost.resourceDir = NULL; #endif fHost.get_buffer_size = host_get_buffer_size; fHost.get_sample_rate = host_get_sample_rate; fHost.is_offline = host_is_offline; fHost.get_time_info = host_get_time_info; fHost.write_midi_event = host_write_midi_event; fHost.ui_parameter_changed = host_ui_parameter_changed; fHost.ui_custom_data_changed = host_ui_custom_data_changed; fHost.ui_closed = host_ui_closed; fHost.ui_open_file = host_ui_open_file; fHost.ui_save_file = host_ui_save_file; fHost.dispatcher = host_dispatcher; std::memset(&fTimeInfo, 0, sizeof(NativeTimeInfo)); fTimeInfo.bbt.valid = true; // always valid fHandle = fDescriptor->instantiate(&fHost); Q_ASSERT(fHandle != NULL); if (fHandle != NULL && fDescriptor->activate != NULL) fDescriptor->activate(fHandle); // we need a play-handle which cares for calling play() InstrumentPlayHandle * iph = new InstrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); connect(engine::mixer(), SIGNAL(sampleRateChanged()), this, SLOT(sampleRateChanged())); } CarlaInstrument::~CarlaInstrument() { engine::mixer()->removePlayHandles( instrumentTrack() ); if (fHost.resourceDir != NULL) { std::free((char*)fHost.resourceDir); fHost.resourceDir = NULL; } if (fHost.uiName != NULL) { std::free((char*)fHost.uiName); fHost.uiName = NULL; } if (fHandle == NULL) return; if (fDescriptor->deactivate != NULL) fDescriptor->deactivate(fHandle); if (fDescriptor->cleanup != NULL) fDescriptor->cleanup(fHandle); fHandle = NULL; } // ------------------------------------------------------------------- uint32_t CarlaInstrument::handleGetBufferSize() const { return engine::mixer()->framesPerPeriod(); } double CarlaInstrument::handleGetSampleRate() const { return engine::mixer()->processingSampleRate(); } bool CarlaInstrument::handleIsOffline() const { return false; // TODO } const NativeTimeInfo* CarlaInstrument::handleGetTimeInfo() const { return &fTimeInfo; } void CarlaInstrument::handleUiParameterChanged(const uint32_t /*index*/, const float /*value*/) const { } void CarlaInstrument::handleUiClosed() { emit uiClosed(); } intptr_t CarlaInstrument::handleDispatcher(const NativeHostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt) { intptr_t ret = 0; switch (opcode) { case NATIVE_HOST_OPCODE_NULL: break; case NATIVE_HOST_OPCODE_UPDATE_PARAMETER: case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM: case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS: case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS: case NATIVE_HOST_OPCODE_RELOAD_ALL: // nothing break; case NATIVE_HOST_OPCODE_UI_UNAVAILABLE: handleUiClosed(); break; } return ret; // unused for now (void)index; (void)value; (void)ptr; (void)opt; } // ------------------------------------------------------------------- Instrument::Flags CarlaInstrument::flags() const { return IsSingleStreamed|IsMidiBased|IsNotBendable; } QString CarlaInstrument::nodeName() const { return descriptor()->name; } void CarlaInstrument::saveSettings(QDomDocument& doc, QDomElement& parent) { if (fHandle == NULL || fDescriptor->get_state == NULL) return; char* const state = fDescriptor->get_state(fHandle); if (state == NULL) return; QDomDocument carlaDoc("carla"); if (carlaDoc.setContent(QString(state))) { QDomNode n = doc.importNode(carlaDoc.documentElement(), true); parent.appendChild(n); } std::free(state); } void CarlaInstrument::loadSettings(const QDomElement& elem) { if (fHandle == NULL || fDescriptor->set_state == NULL) return; QDomDocument carlaDoc("carla"); carlaDoc.appendChild(carlaDoc.importNode(elem.firstChildElement(), true )); fDescriptor->set_state(fHandle, carlaDoc.toString(0).toUtf8().constData()); } void CarlaInstrument::play(sampleFrame* workingBuffer) { const uint bufsize = engine::mixer()->framesPerPeriod(); std::memset(workingBuffer, 0, sizeof(sample_t)*bufsize*DEFAULT_CHANNELS); if (fHandle == NULL) { instrumentTrack()->processAudioBuffer(workingBuffer, bufsize, NULL); return; } // set time info song* const s = engine::getSong(); fTimeInfo.playing = s->isPlaying(); fTimeInfo.frame = s->getPlayPos(s->playMode()).frames(engine::framesPerTick()); fTimeInfo.usecs = s->getMilliseconds()*1000; fTimeInfo.bbt.bar = s->getTacts() + 1; fTimeInfo.bbt.beat = s->getBeat() + 1; fTimeInfo.bbt.tick = s->getBeatTicks(); fTimeInfo.bbt.barStartTick = ticksPerBeat*s->getTimeSigModel().getNumerator()*s->getTacts(); fTimeInfo.bbt.beatsPerBar = s->getTimeSigModel().getNumerator(); fTimeInfo.bbt.beatType = s->getTimeSigModel().getDenominator(); fTimeInfo.bbt.ticksPerBeat = ticksPerBeat; fTimeInfo.bbt.beatsPerMinute = s->getTempo(); float buf1[bufsize]; float buf2[bufsize]; float* rBuf[] = { buf1, buf2 }; std::memset(buf1, 0, sizeof(float)*bufsize); std::memset(buf2, 0, sizeof(float)*bufsize); { const QMutexLocker ml(&fMutex); fDescriptor->process(fHandle, rBuf, rBuf, bufsize, fMidiEvents, fMidiEventCount); fMidiEventCount = 0; } for (uint i=0; i < bufsize; ++i) { workingBuffer[i][0] = buf1[i]; workingBuffer[i][1] = buf2[i]; } instrumentTrack()->processAudioBuffer(workingBuffer, bufsize, NULL); } bool CarlaInstrument::handleMidiEvent(const MidiEvent& event, const MidiTime&, f_cnt_t offset) { const QMutexLocker ml(&fMutex); if (fMidiEventCount >= kMaxMidiEvents) return false; NativeMidiEvent& nEvent(fMidiEvents[fMidiEventCount++]); std::memset(&nEvent, 0, sizeof(NativeMidiEvent)); nEvent.port = 0; nEvent.time = offset; nEvent.data[0] = event.type() | (event.channel() & 0x0F); switch (event.type()) { case MidiNoteOn: if (event.velocity() > 0) { if (event.key() < 0 || event.key() > MidiMaxKey) break; nEvent.data[1] = event.key(); nEvent.data[2] = event.velocity(); nEvent.size = 3; break; } else { nEvent.data[0] = MidiNoteOff | (event.channel() & 0x0F); // nobreak } case MidiNoteOff: if (event.key() < 0 || event.key() > MidiMaxKey) break; nEvent.data[1] = event.key(); nEvent.data[2] = event.velocity(); nEvent.size = 3; break; case MidiKeyPressure: nEvent.data[1] = event.key(); nEvent.data[2] = event.velocity(); nEvent.size = 3; break; case MidiControlChange: nEvent.data[1] = event.controllerNumber(); nEvent.data[2] = event.controllerValue(); nEvent.size = 3; break; case MidiProgramChange: nEvent.data[1] = event.program(); nEvent.size = 2; break; case MidiChannelPressure: nEvent.data[1] = event.channelPressure(); nEvent.size = 2; break; case MidiPitchBend: nEvent.data[1] = event.pitchBend() & 0x7f; nEvent.data[2] = event.pitchBend() >> 7; nEvent.size = 3; break; default: // unhandled --fMidiEventCount; break; } return true; } PluginView* CarlaInstrument::instantiateView(QWidget* parent) { if (QWidget* const window = parent->window()) fHost.uiParentId = window->winId(); else fHost.uiParentId = 0; std::free((char*)fHost.uiName); // TODO - get plugin instance name //fHost.uiName = strdup(parent->windowTitle().toUtf8().constData()); fHost.uiName = strdup(kIsPatchbay ? "CarlaPatchbay-LMMS" : "CarlaRack-LMMS"); return new CarlaInstrumentView(this, parent); } void CarlaInstrument::sampleRateChanged() { fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, 0, 0, nullptr, handleGetSampleRate()); } // ------------------------------------------------------------------- CarlaInstrumentView::CarlaInstrumentView(CarlaInstrument* const instrument, QWidget* const parent) : InstrumentView(instrument, parent), fHandle(instrument->fHandle), fDescriptor(instrument->fDescriptor), fTimerId(fHandle != NULL && fDescriptor->ui_idle != NULL ? startTimer(30) : 0) { setAutoFillBackground(true); QPalette pal; pal.setBrush(backgroundRole(), instrument->kIsPatchbay ? PLUGIN_NAME::getIconPixmap("artwork-patchbay") : PLUGIN_NAME::getIconPixmap("artwork-rack")); setPalette(pal); QVBoxLayout * l = new QVBoxLayout( this ); l->setContentsMargins( 20, 180, 10, 10 ); l->setSpacing( 10 ); m_toggleUIButton = new QPushButton( tr( "Show GUI" ), this ); m_toggleUIButton->setCheckable( true ); m_toggleUIButton->setChecked( false ); m_toggleUIButton->setIcon( embed::getIconPixmap( "zoom" ) ); m_toggleUIButton->setFont( pointSize<8>( m_toggleUIButton->font() ) ); connect( m_toggleUIButton, SIGNAL( clicked(bool) ), this, SLOT( toggleUI( bool ) ) ); m_toggleUIButton->setWhatsThis( tr( "Click here to show or hide the graphical user interface (GUI) of Carla." ) ); l->addWidget( m_toggleUIButton ); l->addStretch(); connect(instrument, SIGNAL(uiClosed()), this, SLOT(uiClosed())); } CarlaInstrumentView::~CarlaInstrumentView() { if (m_toggleUIButton->isChecked()) toggleUI(false); } void CarlaInstrumentView::toggleUI(bool visible) { if (fHandle != NULL && fDescriptor->ui_show != NULL) fDescriptor->ui_show(fHandle, visible); } void CarlaInstrumentView::uiClosed() { m_toggleUIButton->setChecked(false); } void CarlaInstrumentView::modelChanged() { } void CarlaInstrumentView::timerEvent(QTimerEvent* event) { if (event->timerId() == fTimerId) fDescriptor->ui_idle(fHandle); InstrumentView::timerEvent(event); } // ------------------------------------------------------------------- #include "moc_carla.cxx" lmms-1.1.3/plugins/carlabase/carla.h000066400000000000000000000061131247673406200173310ustar00rootroot00000000000000/* * carla.h - Carla for LMMS * * Copyright (C) 2014 Filipe Coelho * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef CARLA_H #define CARLA_H #include "CarlaNative.h" #include "Instrument.h" #include "InstrumentView.h" class QPushButton; class PLUGIN_EXPORT CarlaInstrument : public Instrument { Q_OBJECT public: static const uint32_t kMaxMidiEvents = 512; CarlaInstrument(InstrumentTrack* const instrumentTrack, const Descriptor* const descriptor, const bool isPatchbay); virtual ~CarlaInstrument(); // CarlaNative functions uint32_t handleGetBufferSize() const; double handleGetSampleRate() const; bool handleIsOffline() const; const NativeTimeInfo* handleGetTimeInfo() const; void handleUiParameterChanged(const uint32_t index, const float value) const; void handleUiClosed(); intptr_t handleDispatcher(const NativeHostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt); // LMMS functions virtual Flags flags() const; virtual QString nodeName() const; virtual void saveSettings(QDomDocument& doc, QDomElement& parent); virtual void loadSettings(const QDomElement& elem); virtual void play(sampleFrame* workingBuffer); virtual bool handleMidiEvent(const MidiEvent& event, const MidiTime& time, f_cnt_t offset); virtual PluginView* instantiateView(QWidget* parent); signals: void uiClosed(); private slots: void sampleRateChanged(); private: const bool kIsPatchbay; NativePluginHandle fHandle; NativeHostDescriptor fHost; const NativePluginDescriptor* fDescriptor; uint32_t fMidiEventCount; NativeMidiEvent fMidiEvents[kMaxMidiEvents]; NativeTimeInfo fTimeInfo; // this is only needed because note-offs are being sent during play QMutex fMutex; friend class CarlaInstrumentView; }; class CarlaInstrumentView : public InstrumentView { Q_OBJECT public: CarlaInstrumentView(CarlaInstrument* const instrument, QWidget* const parent); virtual ~CarlaInstrumentView(); private slots: void toggleUI(bool); void uiClosed(); private: virtual void modelChanged(); virtual void timerEvent(QTimerEvent*); NativePluginHandle fHandle; const NativePluginDescriptor* fDescriptor; int fTimerId; QPushButton * m_toggleUIButton; }; #endif lmms-1.1.3/plugins/carlapatchbay/000077500000000000000000000000001247673406200167565ustar00rootroot00000000000000lmms-1.1.3/plugins/carlapatchbay/CMakeLists.txt000066400000000000000000000006261247673406200215220ustar00rootroot00000000000000if(LMMS_HAVE_CARLA) ADD_DEFINITIONS(-DCARLA_PLUGIN_PATCHBAY -DCARLA_PLUGIN_SYNTH) INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${CARLA_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/../carlabase") LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../carlabase") LINK_LIBRARIES(carlabase) BUILD_PLUGIN(carlapatchbay carlapatchbay.cpp EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") endif(LMMS_HAVE_CARLA) lmms-1.1.3/plugins/carlapatchbay/carlapatchbay.cpp000066400000000000000000000027161247673406200222660ustar00rootroot00000000000000/* * carlapatchbay.cpp - Carla for LMMS (Patchbay) * * Copyright (C) 2014 Filipe Coelho * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "carla.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT carlapatchbay_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Carla Patchbay", QT_TRANSLATE_NOOP( "pluginBrowser", "Carla Patchbay Instrument" ), "falkTX ", 0x0195, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; Plugin* PLUGIN_EXPORT lmms_plugin_main(Model*, void* data) { return new CarlaInstrument(static_cast(data), &carlapatchbay_plugin_descriptor, true); } } lmms-1.1.3/plugins/carlapatchbay/logo.png000066400000000000000000000063611247673406200204320ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs䔥;tEXtSoftwarewww.inkscape.org< nIDAThݚ{]?}̾>mc;M mbA )H%T*S ! R@B8MbXeϽ}ݻ;{{oR?̜93{k-$$ p]Wl?H؋/X֎aV RZ-8Nuݨ1F$ b`}}H)8Tʕ+01 BbuHH)cZiXAa֕RNӐRbСZg~nnΉFSJ{g:~\C{#չծuE4*D6!7!UtX6O,%MgiYt{:Sgfj,;q2I֖ʬ-K@oq7ûkZekR zP3J?O???emMah55*&Hf"V88TH*J$DRikmjKU2UN|\xfeFyF- gȨ^(fTŢHjF;NZ}> oqY@Ơi Zhk-@d:덇5 JzΜ񾘘Q.i?Fg{S&:󶏱 `ߜ3맰1zYh>5s}jKRvD֙3!6׎i?N` k^Y*7|M ~z<{v(GZ?8ddaaA,--ED>d )cj8l1!x7s'kw< {f u "H$yk=L-k۷'2Dpg 6Uj#52 !4R"gO>ODJ[,&{d0 qzC<=t_|):.o߻s8ǹy&p-vz;wlppz 82Y)7!qnZ?4Og*L'T }qU߿OP̙3ٹs''NX86~19RHzȅ3yin,-q.Qv>ߧhp ;F"<"jD"APRoI~ }AH&hZ)#l8z ZKX${0x)%J)2 4pܾ}HݻNb/}-P؟P\?B ,`/&tF.]♏|Gx2VVHR;vӧOK/c8[o8<쳼\z+\:`0X0f#b%1DOݞ,P/ȇfghMim Jعs'bk-33389*BH'7p=xFtsȑ8DfZU"JQY]bTUH&T*vJ!Ɖs O=s{|8NOfQ4 2We2Y8LN&6m ݪ@N//se.v?(]8ٯdcTOy1Nˑ,ZXKmeDѾU}5x^D_&Y2̐]>1 zg jwcqe[++$I9ɓ'yWg\pq8{,*W\` :}!=C>l:jsfzk-K۸K2P(P.B077G:F\y0'i)eKkHicY/L)HjH*JOTR_TVЮ}"QYQQ/hTh}(~f0/fz.)} Ze)e"6abgnn&~0+Ct2ƣ^^\x^sqT&PLX&nzH#:^nLî 5C0M:,JtЉw𔇎aJT&o׍1KﯖJ`M?{xZ=R&w _CWIENDB`lmms-1.1.3/plugins/carlarack/000077500000000000000000000000001247673406200161035ustar00rootroot00000000000000lmms-1.1.3/plugins/carlarack/CMakeLists.txt000066400000000000000000000006121247673406200206420ustar00rootroot00000000000000if(LMMS_HAVE_CARLA) ADD_DEFINITIONS(-DCARLA_PLUGIN_RACK -DCARLA_PLUGIN_SYNTH) INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${CARLA_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/../carlabase") LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../carlabase") LINK_LIBRARIES(carlabase) BUILD_PLUGIN(carlarack carlarack.cpp EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") endif(LMMS_HAVE_CARLA) lmms-1.1.3/plugins/carlarack/carlarack.cpp000066400000000000000000000026671247673406200205450ustar00rootroot00000000000000/* * carlarack.cpp - Carla for LMMS (Rack) * * Copyright (C) 2014 Filipe Coelho * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "carla.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT carlarack_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Carla Rack", QT_TRANSLATE_NOOP( "pluginBrowser", "Carla Rack Instrument" ), "falkTX ", 0x0195, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; Plugin* PLUGIN_EXPORT lmms_plugin_main(Model*, void* data) { return new CarlaInstrument(static_cast(data), &carlarack_plugin_descriptor, false); } } lmms-1.1.3/plugins/carlarack/logo.png000066400000000000000000000063611247673406200175570ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs䔥;tEXtSoftwarewww.inkscape.org< nIDAThݚ{]?}̾>mc;M mbA )H%T*S ! R@B8MbXeϽ}ݻ;{{oR?̜93{k-$$ p]Wl?H؋/X֎aV RZ-8Nuݨ1F$ b`}}H)8Tʕ+01 BbuHH)cZiXAa֕RNӐRbСZg~nnΉFSJ{g:~\C{#չծuE4*D6!7!UtX6O,%MgiYt{:Sgfj,;q2I֖ʬ-K@oq7ûkZekR zP3J?O???emMah55*&Hf"V88TH*J$DRikmjKU2UN|\xfeFyF- gȨ^(fTŢHjF;NZ}> oqY@Ơi Zhk-@d:덇5 JzΜ񾘘Q.i?Fg{S&:󶏱 `ߜ3맰1zYh>5s}jKRvD֙3!6׎i?N` k^Y*7|M ~z<{v(GZ?8ddaaA,--ED>d )cj8l1!x7s'kw< {f u "H$yk=L-k۷'2Dpg 6Uj#52 !4R"gO>ODJ[,&{d0 qzC<=t_|):.o߻s8ǹy&p-vz;wlppz 82Y)7!qnZ?4Og*L'T }qU߿OP̙3ٹs''NX86~19RHzȅ3yin,-q.Qv>ߧhp ;F"<"jD"APRoI~ }AH&hZ)#l8z ZKX${0x)%J)2 4pܾ}HݻNb/}-P؟P\?B ,`/&tF.]♏|Gx2VVHR;vӧOK/c8[o8<쳼\z+\:`0X0f#b%1DOݞ,P/ȇfghMim Jعs'bk-33389*BH'7p=xFtsȑ8DfZU"JQY]bTUH&T*vJ!Ɖs O=s{|8NOfQ4 2We2Y8LN&6m ݪ@N//se.v?(]8ٯdcTOy1Nˑ,ZXKmeDѾU}5x^D_&Y2̐]>1 zg jwcqe[++$I9ɓ'yWg\pq8{,*W\` :}!=C>l:jsfzk-K۸K2P(P.B077G:F\y0'i)eKkHicY/L)HjH*JOTR_TVЮ}"QYQQ/hTh}(~f0/fz.)} Ze)e"6abgnn&~0+Ct2ƣ^^\x^sqT&PLX&nzH#:^nLî 5C0M:,JtЉw𔇎aJT&o׍1KﯖJ`M?{xZ=R&w _CWIENDB`lmms-1.1.3/plugins/delay/000077500000000000000000000000001247673406200152565ustar00rootroot00000000000000lmms-1.1.3/plugins/delay/CMakeLists.txt000066400000000000000000000003141247673406200200140ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(delay delayeffect.cpp delaycontrols.cpp delaycontrolsdialog.cpp lfo.cpp stereodelay.cpp MOCFILES delaycontrols.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/delay/artwork.png000066400000000000000000000226241247673406200174630ustar00rootroot00000000000000PNG  IHDRK5|bKGD pHYs  tIME 3n3tEXtCommentCreated with GIMPW IDATx]i$WuNuՃ1xeu `*! pPPK8"؁b( d qlC1%ʌ{ɏ{wνUoqWV{UUwߺ; ]UUAD++] u]U-|_c[*q@UUKqu }UUq+\zf \?\1mυҼF#s8x<6 +\_YYkϟ ÿȼ;{u2p8O_3~*~Fan7zVWW;,0`ۘc=uKp3v ``hAFδD]ר* Pb&`mw :KvM:&Dt~^~_cAX[x ,Y! <\ϭF[a5777U+<."&7SK?yHѨӄ yB%K]zq.BdL3a< aGBIF)i/KRHoY#aXҶ))IxfYX\0%AX]]5_u Lt^2,x4bVǶdrboﯹ` Rb27Q{ \1AX^^1ȴccBm&!|65yrh~74҂ Jzd@se]5 g<nb5H!":Na)\f hdĸFk^[fD<,t`tdv樐yd] 9I@L$h1d&I8t S lQ7q !Tk=ˇt)^ĉJL@mM,>g~AL>X]>H^% 2]8\KFcR8Q9d (7#Lp6MMA,i"'>7d}H'#)b DŘ񠑨GXt3BȝRUO)JndMri=!͡)+?3XKIx!CC~hmBvG\(}.-9]b~ranQ;Q`<"3OL,Do Y 8C5!3!&Q+.Lx"F(?*a.D*-˹kNթWZp%.xg`)|ZbHM$j}lHAsJ6/-ڐq8_D+bBաe X$`۪yF4 /Ojóm4{&hu+@ XTIypI!Nubz=g%y!֪>z . )N]!'CV9i*|G :6s v`I(L>`0 Vp$$J $i<F#9BQšf X5Z&v/(Z;ZDbC(qR%\ pP+f=ā,cH)p@~X)Ո HB Qakztf+cJz0t֤*AڶC۔!ƂCiQb] , [RgSdI6a!Y}5XH:FxЖdE`&D,P1Ev{ A &Ӫ9B S|T6QW}a)6B[+f Z3'2ui!)DB/Sy|yh |+8B]ѵ&y֞V)cEmzR,$l {E^x"W&:j79-K"n=,{p%-:K Rd`b.!\C-\Wh!:nPnPj+ֺʚe*3-9.kuu֬ivCr[f `bQ+7si>5b՝.xr~"$.-#aB`c"UrbM!Oc2NbӃ__6_T/&hn~ 9/RȃcTNxF|bP lqfHIdq[sG7 [>y<9 #;ֲ-sMzvHi$G@EL;u(Gjucuue:6CC,,.a<fG'y3^%f¬#≼ !9 5hC5H-`uM<̱ť/ƉQd]yEZsU[ҌבeH:[&D=}p66! 6#<\g>xsڵ FpO ܏7x /S.>➵][鞐$QU=//{xpW}*ܷR,͜} [uVoz]]ߩ51:x0}|׿yڵ ݺ 9R8M<ٛ&Th>ӲKh*@O@ B~ W\qtD0<@<p-]/mO¹(I|.3??w%lSu|СCKp28mC]MBg6.q .KJDE'%9d5!|f[̄Ԧa}f?&NOQ &L|vl(kFoc8' i/H Ɂy˺poR&[k9L<Κے0~K"3)nkmpMPԷ)3H-_#Jga#u cNjY%|Nw fneLlxP5\싵Rjv/o6#9ߡ˛Y]QB^#eb01|2u>1@EѵGa A|/hޞ3KdĨ)An)G\kVI$i椯g6Airq]{㒋f eqjb{VU~߱?9}x׏קZ'Osߡ]W]|dm6͸u:c' AkRfZ|vH'IgOIgmct㖗MA(:dl*gs؞#!HutC@{xu6x[d+mdVv|{Oh8Fǖ-x#N3O3y xDXA RvZwV(H$8mvd8f`ŒY lilW5rK^kHۜ*L"fW0|gZ+l xg0"ۿCp?}[vKW~o:xܩ)FJ=6RigG8\j" (T sdžL6 5A4q B9Z:0pY/uJX5yyt=U0R%>ؽwz\}uػo ނ;bNd!66mO`6.i@AX7/KpUN6L-5v Jl/]gVQ'=dއde 9|,/-ADeGcUpMoe_WWjweu_+q{O|<^q>v>pɥcϾ}Nx8~OKE?~vx{߉O:w}mxx{꬗q!fɓ4| ;x|/Uhv &2]G`7~1qR+IC}Lk6'<|xƛvݷ A|_ƸV߽wo|/^ᵸ쒋{F#|:7:|w -_7$[;+;E=h4p >tpỸLJEKُBLWxBMX:^UQy偫A#KM}۵g|Çv||Ϯvk5\s cϞXZNQ{&&H ;=W ΜApf^o"+^88؞(*dr_ R@ "l  f.#2*⤇L<wkǟ~7Aw3qտ>O|{oވ={''`iiUx'LcfR{KegrE~P%rtդx_qlzpi_rڄ~IDAT\߃spNGz _+SAE^SN>idc]zos~[3>{㛳F棟L<9OpR2q { 877y4to/~5*#sߊ PذILv2$2vRXS[|#Ḱ_RNU u?$n5qzC<7g3^Iq{p[X8LUbΪW%='=|S^bW$?_kkkX[[`0`00k/߶UUaFUU8 ]/W\H,p#} owerx~͎`"WŸyطn6Spхqpu|_gTW\hq=O9ksgo߆-[L'6ѥY|%& >>wBXzc~ '9Ruk>vKiywU`4>vܱ8?_|| {flKKx3xbuu^SN9Oߊ'-c8x>?xγ@w~ c2qֶsl$53+_Kx1uާ= ];j¼M跍Tk_J}Igܓ(3mbve\{GENp2&\dxi2 E"y1H۵Mn,PeL3qƺzKpQs\q;F8WcqgiiV'T5m2;pw.b Xb7^/s0%)tGq}6f} ~e3)80˼nAژ4b]j JضjJI|E/~moVbu~d=5% R2|X0Y|cK&)E;K{mp: 7IZ*Afk)Nl9qm x<R3zI|~2K-HuM8y ; _f>ӄZXX*=8IENDB`lmms-1.1.3/plugins/delay/delaycontrols.cpp000066400000000000000000000043241247673406200206470ustar00rootroot00000000000000/* * delaycontrols.cpp - definition of DelayControls class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "delaycontrols.h" #include "delayeffect.h" #include "engine.h" #include "song.h" DelayControls::DelayControls( DelayEffect* effect ): EffectControls( effect ), m_effect ( effect ), m_delayTimeModel( 0.5, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Delay Samples" )) , m_feedbackModel(0.0f,0.0f,1.0f,0.01f,this,tr( "Feedback" ) ), m_lfoTimeModel(2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Lfo Frequency" ) ), m_lfoAmountModel(0.0, 0.0, 2.0, 0.0001, 2000.0, this, tr ( "Lfo Amount" ) ) { connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeSampleRate() ) ); } void DelayControls::loadSettings( const QDomElement &_this ) { m_delayTimeModel.loadSettings(_this, "DelayTimeSamples" ); m_feedbackModel.loadSettings( _this, "FeebackAmount" ); m_lfoTimeModel.loadSettings( _this , "LfoFrequency"); m_lfoAmountModel.loadSettings( _this, "LfoAmount"); } void DelayControls::saveSettings( QDomDocument& doc, QDomElement& _this ) { m_delayTimeModel.saveSettings( doc, _this, "DelayTimeSamples" ); m_feedbackModel.saveSettings( doc, _this ,"FeebackAmount" ); m_lfoTimeModel.saveSettings( doc, _this, "LfoFrequency" ); m_lfoAmountModel.saveSettings( doc, _this ,"LfoAmount" ); } void DelayControls::changeSampleRate() { m_effect->changeSampleRate(); } lmms-1.1.3/plugins/delay/delaycontrols.h000066400000000000000000000034761247673406200203230ustar00rootroot00000000000000/* * delaycontrols.h - declaration of DelayControl class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DELAYCONTROLS_H #define DELAYCONTROLS_H #include "EffectControls.h" #include "knob.h" #include "delaycontrolsdialog.h" class DelayEffect; class DelayControls : public EffectControls { Q_OBJECT public: DelayControls( DelayEffect* effect ); virtual ~DelayControls() { } virtual void saveSettings( QDomDocument& doc, QDomElement& parent ); virtual void loadSettings( const QDomElement& _this ); inline virtual QString nodeName() const { return "Delay"; } virtual int controlCount(){ return 4; } virtual EffectControlDialog* createView() { return new DelayControlsDialog( this ); } private slots: void changeSampleRate(); private: DelayEffect* m_effect; TempoSyncKnobModel m_delayTimeModel; FloatModel m_feedbackModel; TempoSyncKnobModel m_lfoTimeModel; TempoSyncKnobModel m_lfoAmountModel; friend class DelayControlsDialog; friend class DelayEffect; }; #endif // DELAYCONTROLS_H lmms-1.1.3/plugins/delay/delaycontrolsdialog.cpp000066400000000000000000000047751247673406200220410ustar00rootroot00000000000000/* * delaycontrolsdialog.cpp - definition of DelayControlsDialog class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "delaycontrolsdialog.h" #include "delaycontrols.h" #include "embed.h" #include "TempoSyncKnob.h" DelayControlsDialog::DelayControlsDialog( DelayControls *controls ) : EffectControlDialog( controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); setFixedSize( 200, 75 ); TempoSyncKnob* sampleDelayKnob = new TempoSyncKnob( knobBright_26, this ); sampleDelayKnob->move( 20,10 ); sampleDelayKnob->setVolumeKnob( false ); sampleDelayKnob->setModel( &controls->m_delayTimeModel ); sampleDelayKnob->setLabel( tr( "Delay" ) ); sampleDelayKnob->setHintText( tr( "Delay Time" ) + " ", " s" ); knob * feedbackKnob = new knob( knobBright_26, this ); feedbackKnob->move( 63,10 ); feedbackKnob->setVolumeKnob( true) ; feedbackKnob->setModel( &controls->m_feedbackModel); feedbackKnob->setLabel( tr( "Regen" ) ); feedbackKnob->setHintText( tr ( "Feedback Amount" ) + " " , "" ); TempoSyncKnob * lfoFreqKnob = new TempoSyncKnob( knobBright_26, this ); lfoFreqKnob->move( 106,10 ); lfoFreqKnob->setVolumeKnob( false ); lfoFreqKnob->setModel( &controls->m_lfoTimeModel ); lfoFreqKnob->setLabel( tr( "Rate" ) ); lfoFreqKnob->setHintText( tr ( "Lfo") + " ", " s" ); TempoSyncKnob * lfoAmtKnob = new TempoSyncKnob( knobBright_26, this ); lfoAmtKnob->move( 150,10 ); lfoAmtKnob->setVolumeKnob( false ); lfoAmtKnob->setModel( &controls->m_lfoAmountModel ); lfoAmtKnob->setLabel( tr( "Lfo" ) ); lfoAmtKnob->setHintText( tr ( "Lfo Amt" ) + " " , " s" ); } #include "moc_delaycontrols.cxx" lmms-1.1.3/plugins/delay/delaycontrolsdialog.h000066400000000000000000000023421247673406200214720ustar00rootroot00000000000000/* * delaycontrolsdialog.h - declaration of DelayControlsDialog class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DELAYCONTROLSDIALOG_H #define DELAYCONTROLSDIALOG_H #include "EffectControlDialog.h" class DelayControls; class DelayControlsDialog : public EffectControlDialog { public: DelayControlsDialog( DelayControls* controls ); virtual ~DelayControlsDialog() { } }; #endif // DELAYCONTROLSDIALOG_H lmms-1.1.3/plugins/delay/delayeffect.cpp000066400000000000000000000062201247673406200202350ustar00rootroot00000000000000/* * delayeffect.cpp - definition of the DelayEffect class. The Delay Plugin * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "delayeffect.h" #include "engine.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT delay_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Delay", QT_TRANSLATE_NOOP( "pluginBrowser", "A native delay plugin" ), "Dave French ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; DelayEffect::DelayEffect( Model* parent, const Plugin::Descriptor::SubPluginFeatures::Key* key ) : Effect( &delay_plugin_descriptor, parent, key ), m_delayControls( this ) { m_delay = 0; m_delay = new StereoDelay( 20, engine::mixer()->processingSampleRate() ); m_lfo = new Lfo( engine::mixer()->processingSampleRate() ); } DelayEffect::~DelayEffect() { if( m_delay ) { delete m_delay; } if( m_lfo ) { delete m_lfo; } } bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) { if( !isEnabled() || !isRunning () ) { return( false ); } double outSum = 0.0; const float d = dryLevel(); const float w = wetLevel(); const float length = m_delayControls.m_delayTimeModel.value() * engine::mixer()->processingSampleRate(); const float amplitude = m_delayControls.m_lfoAmountModel.value() * engine::mixer()->processingSampleRate(); m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value() ); m_delay->setFeedback( m_delayControls.m_feedbackModel.value() ); sample_t dryS[2]; for( fpp_t f = 0; f < frames; ++f ) { dryS[0] = buf[f][0]; dryS[1] = buf[f][1]; m_delay->setLength( ( float )length + ( amplitude * ( float )m_lfo->tick() ) ); m_delay->tick( buf[f] ); buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] ); outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } checkGate( outSum / frames ); return isRunning(); } void DelayEffect::changeSampleRate() { m_lfo->setSampleRate( engine::mixer()->processingSampleRate() ); m_delay->setSampleRate( engine::mixer()->processingSampleRate() ); } extern "C" { //needed for getting plugin out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) { return new DelayEffect( parent , static_cast( data ) ); } }} lmms-1.1.3/plugins/delay/delayeffect.h000066400000000000000000000027371247673406200177130ustar00rootroot00000000000000/* * delayeffect.h - declaration of DelayEffect class, the Delay plugin * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DELAYEFFECT_H #define DELAYEFFECT_H #include "Effect.h" #include "delaycontrols.h" #include "lfo.h" #include "stereodelay.h" class DelayEffect : public Effect { public: DelayEffect(Model* parent , const Descriptor::SubPluginFeatures::Key* key ); virtual ~DelayEffect(); virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames ); virtual EffectControls* controls() { return &m_delayControls; } void changeSampleRate(); private: DelayControls m_delayControls; StereoDelay* m_delay; Lfo* m_lfo; }; #endif // DELAYEFFECT_H lmms-1.1.3/plugins/delay/lfo.cpp000066400000000000000000000022031247673406200165370ustar00rootroot00000000000000/* * lfo.cpp - defination of Lfo class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lfo.h" #include "lmms_math.h" Lfo::Lfo( int samplerate ) { m_samplerate = samplerate; m_twoPiOverSr = F_2PI / samplerate; } float Lfo::tick() { float output = sinf( m_phase ); m_phase += m_increment; return output; } lmms-1.1.3/plugins/delay/lfo.h000066400000000000000000000031621247673406200162110ustar00rootroot00000000000000/* * lfo.h - declaration of Lfo class, a simple sine lfo * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LFO_H #define LFO_H #include "lmms_math.h" class Lfo { public: Lfo( int samplerate ); ~Lfo() { } inline void setFrequency( double frequency ) { if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency ) { return; } m_frequency = frequency; m_increment = m_frequency * m_twoPiOverSr; if( m_phase >= F_2PI ) { m_phase -= F_2PI; } } inline void setSampleRate ( int samplerate ) { m_samplerate = samplerate; m_twoPiOverSr = F_2PI / samplerate; m_increment = m_frequency * m_twoPiOverSr; } float tick(); private: double m_frequency; double m_phase; double m_increment; double m_twoPiOverSr; int m_samplerate; }; #endif // LFO_H lmms-1.1.3/plugins/delay/logo.png000066400000000000000000000062311247673406200167260ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/delay/stereodelay.cpp000066400000000000000000000043441247673406200203070ustar00rootroot00000000000000/* * stereodelay.cpp - defination of StereoDelay class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "stereodelay.h" #include #include "lmms_basics.h" #include "interpolation.h" #include "lmms_math.h" StereoDelay::StereoDelay( int maxTime, int sampleRate ) { m_buffer = 0; m_maxTime = maxTime; m_maxLength = maxTime * sampleRate; m_length = m_maxLength; m_index = 0; m_feedback = 0.0f; setSampleRate( sampleRate ); } StereoDelay::~StereoDelay() { if( m_buffer ) { delete m_buffer; } } void StereoDelay::tick( sampleFrame frame ) { m_buffer[m_index][0] = frame[0]; m_buffer[m_index][1] = frame[1]; int readIndex = m_index - ( int )m_length - 1; if( readIndex < 0 ) { readIndex += m_maxLength; } float fract = 1.0f - fraction( m_length ); frame[0] = linearInterpolate( m_buffer[readIndex][0] , m_buffer[( readIndex+1) % m_maxLength][0], fract ); frame[1] = linearInterpolate( m_buffer[readIndex][1] , m_buffer[( readIndex+1) % m_maxLength][1], fract ); m_buffer[m_index][0] += frame[0] * m_feedback; m_buffer[m_index][1] += frame[1] * m_feedback; m_index = ( m_index + 1) % m_maxLength; } void StereoDelay::setSampleRate( int sampleRate ) { if( m_buffer ) { delete m_buffer; } int bufferSize = ( int )( sampleRate * m_maxTime ); m_buffer = new sampleFrame[bufferSize]; for( int i = 0 ; i < bufferSize ; i++) { m_buffer[i][0] = 0.0; m_buffer[i][1] = 0.0; } } lmms-1.1.3/plugins/delay/stereodelay.h000066400000000000000000000027441247673406200177560ustar00rootroot00000000000000/* * stereodelay.h - declaration of StereoDelay class. * * Copyright (c) 2014 David French * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef STEREODELAY_H #define STEREODELAY_H #include "lmms_basics.h" class StereoDelay { public: StereoDelay( int maxLength, int sampleRate ); ~StereoDelay(); inline void setLength( float length ) { if( length <= m_maxLength && length >= 0 ) { m_length = length; } } inline void setFeedback( float feedback ) { m_feedback = feedback; } void tick( sampleFrame frame ); void setSampleRate( int sampleRate ); private: sampleFrame* m_buffer; int m_maxLength; float m_length; int m_index; float m_feedback; float m_maxTime; }; #endif // STEREODELAY_H lmms-1.1.3/plugins/dynamics_processor/000077500000000000000000000000001247673406200200665ustar00rootroot00000000000000lmms-1.1.3/plugins/dynamics_processor/CMakeLists.txt000066400000000000000000000004251247673406200226270ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(dynamicsprocessor dynamics_processor.cpp dynamics_processor_controls.cpp dynamics_processor_control_dialog.cpp MOCFILES dynamics_processor_controls.h dynamics_processor_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/dynamics_processor/add1_active.png000066400000000000000000000016771247673406200227530ustar00rootroot00000000000000PNG  IHDR 1bKGD pHYs  tIME ,#tEXtCommentCreated with GIMPW'IDAT8˵OG?3;ޭT.=ȡ97[IEVӨQTjđ#H.8 rHQmcca^:̛;6!8T*75^y)%@ر'QXXn`L §8/nY')}a~~Yc+,I<{#6^y3eqc_~’!j>aJ7X(›(buR Xa|@JIX B4x;V~eK\qў}޾=ie<_yR 5rQZkxLC:4M C޼$Ih7S)#mjz4M 21t]XkiZlmm1SSS\]]9F)%眜PBQF G#1<|;;;w{s;Rqnh=y{Fu:"‡J)B3O%ՍeYo<|z~{{ ʲZ˗;hx;:V)E2JP@5MQ7B{EQP0HS~}PUBZDQDE\(vm9s.Ŏ$IxgbEb꣏Gv1\3115qMAw 4M1 Ed- /ȇ9笭OcZsZ-zOciiJ!EQPUuݏYYYAíOoQ%J)n˗h4ZqcEEduu4{~<5ye{iҚNNNE5eYn}FQi;H P#,Vn`@Qto`(2c<$\_Pu66 #` ! P arr,ɲ,xӏ@E,//tAvz#ykn1fJCU-V*T*U;tfD]YgE WWrrrmۼhc TM^8bƽ \% gΰC)A!s>w_* IENDB`lmms-1.1.3/plugins/dynamics_processor/artwork.png000066400000000000000000002212061247673406200222700ustar00rootroot00000000000000PNG  IHDRTca pHYs  tIME1ɞ6tEXtCommentCreated with GIMPW IDATxieu:\k[ MTUTJ4Íl9[DR+N<ϱ_~avoxx8bIc, I $@P4En{^{?\͹UHGxGJ p9}^k9}SO"BDDLDlC`lhe}qxpY=^|S}p[kWw?x#{]"b{Y}Q^B1Fbf3rea"ava1Ԁ͙kY%̂Y3_ҿA{LL fn^n RuWqV{pL ].=ݍcvJJW2(BZpϛ<dyh "1vp $Y=EBkb"m]_#`1\%Ⓔ2~_@D$kZ/b)_&//7B?#a#?u8}sG}"QW #۽-? m ?60;棎9onWLQ'fye򂀭*& Ib@P7u"̤ 4_S(Q }R)/]="9DZ(sVF?X(3'%n/T#W TY8h %QOg aiitKEZgȫc2lZƫ)%bf,aaV(N-Oy+A @ZPd& 1Xmfa EsD,+x)}ԅ0Bj%BLSPA%dє,Xx^j0 a4іѕm2[3#8o]?fUOe;M!$MKvOU@,xQbbf !$H ,Xm ,|ꅘ0sRa.G)/ R$h a1UPrx+v n%_pV 0s="OIs!9剼ziV:PCI,aۼ|L%NԬ7/j*/t@о) J|Le/5 bJ)i>%Քz[ITbS¶y 1[YYt R"P q45+&k+5)DWWx< L̲s3%_D HI+{bAL,2 HRWֆ.Ďi}OPÚTD$ph/YYY4ذaC|IADT",ă ƨP{f++)H FQJZ23L'dJL] LI7L&>%_ti?NTCS ! cAڶUl(& e e>%& 1v4X$b%M}3Zu V;!NcS }XH-H9޲!DDVWo 'lNť'=}}2&aKwG>J;oDxڧ矿 ,} 7}RN[Ov޵p]wbG>]s5ڹќ#ܘ~5 КSOwعaƵչyFK_~Νo}ۍ7nqiyy)[IRꯎG#/uN&6m~4M[x˽ޫL2W]y5\Ÿ'ȑ#B{L"++'l>auc|‹똘)YՏHd:3DqN)ꄄǣdm8>묋.OObSO˿Cߧ,]v_xӶCDjۉc iÆ ۶ov'?ySBZz}O7m\^Z|+O>%$M7\|ܼjZ[[;Nٺя~t O>WWVH~w_ٴiS 77\1 V0Eڤ뺝gD q2O_ZY1Fh ͛7Gtdn<b ]a<79~y]p瞳U &+]׽⋛O|#۷v}Ct 1QOKasF`@ssw - Zذoo)p41(3HB v۷v뮻|]v饣_qƮÇ'SJ">,6|~<ŗ^~ys9|w~w,B_S{e_]S}b )%f,ْhdǭJ߼wqGb7/0Snxӛn__'' cǎ>+pc=:=5W_}ѣsρN;q]?_ "Fw}ume`nn,,=?sŘp&'>w߾ AS"f?Bx~nme'~ B*>Ogͷvۭ:N@t7o}ϼߝN?oYVRf? gRU0V6'4؉8i$ îp8`0y޽G袋Or3|'?-x!c1BXL淬~̍$ b"P2J u]cuîݠ]7x./-o߾}2x@u^Mu`qiyn<}ݓICudmr]wy;u{ٻϾ;zWXZQDbx:M7-..qAgouAd6y[޲r-̍F1] 3N߲u˃ 9;|95 Phc7LSJgյ;#ĠV2wM$Lɶm㰻;58 ֦^xA}-VZ=7w|1OAs͛O[jog0 g}N~gaC;U,.-=#1M( &%0+CʠsWϥ$XxC VN9ԧN۾[:L&xxmm;uۮ3w{߽^pAW5b #"e !G(tÆD !AK:p 'hn‹/Nkv3w})6}rEp8z/pyffdiiYx#1=أ" (1 2Lc3Kds OuaUlܸq0NC}v9w} h8MׯNVkks͝2[uqiq0T5u] dյJ@ ˖[>pgCyRﺘ\2s7ҍaR0c-ۿuemݺj99g†>C Š|+."+A&kg~&oy[Nft:8L7o4Loh8̐-JRW *L]IOu;zlp0,\#G,--u18pK+ J.-[LSל{»u~o}ѝ;ό!tꊰFݻw_}?{Sne  (GjN=c1ƤieyeO&k7NsG;(̉0333|J!FK,1Bk3w?)xO=yϏx={VWW~[ff̧k'#&haÆ5">|p :Gy$(^7AB 2EDDAH}JT@tabd{= $~>=X/}?c`碌î놃A!Cs{%]rsLwd2LA[lyKg6 tN|%oö gyv8ydٻپÇ'@ a&_>2]yՕ{//ĩOxo} Pm7_}?cǎpH.v>O?r!SO};q?s"aÖ,--jRkp+8|KyK̼ziy{>0B(l!t1vq8`zumi{9UO|=y7pgLSbԧ>'DD:`O_DĚhM/yC=X&47?HBXY]H:fb%Rx $U"9N?k׿65r_ F~: !h-;wx(Yx8./.s<>A$u H瞓O:?n%\qַA~ܥ>hky͍o{s=Ů}]twɟKO|/x`eeEӉSp8A4CsӶ-.-ڧ;"#>)upeeyqq|[ >%RTE/ w1 __ꚫO޲9眳cǎ#G~cԄw_|ſ=snХty{yO>O‡~M7p?w_yx:hiiRpO,/c;wEU%%ͭPft]w-.3w=ޔOPɵrD""iSNٚTGaj:r=w5n۾q]lz_ kkb ƲCRa!d2ajzWcwݻw5???Y|qn47L'kSY)HSGVWtғz= Пٟx;qe}/"(v 6m4ֆMSgySt;#%3 /ISn[?˪V(3$ !%a/ŝg9ϥW@//ڵ3ΘNl=zt//-̌n#7M;v*T @yM's9>b"^st:1 ԧtmϞGw f$KobrN7^wyp$t%!< 7AW.h87c<_uUGxJl9&5 TSi, և vv{P%3wnڸiaaaߓO8pN0: samu/`~:7}=I+˧rg10d2董k !}c]niiyiy={!x;w""}ߏ# :Q`Or%d4u ݹcx<&={}hJH)*1 SJ]ws=wޤ)VPhJI5Aჼ6o:q0[˧G 2 DD8XfjJH(}/!7 Z+KP$Mfb$a? CaRq"$%[u+& IDAT"GV(^l(͜œI"N+U)yޒtle>G]T4a뿄c 8+Tfg1a~I/֬!Pu# n.@@^A Ew I&Me5Rx#Fnj!(Y-*ҡhqV )i`)$9d' I a+.LHY2"$v,XVqB|!e6b{)ʄƌ1Y/xVb"3i`2 O.RdZfJrr)%I) " JܤW4Su)fw8U=2n%܄ uOfx{+Yeq*H~xVY+c'H ye”& RJD RDsb!1 F 0,wڮM"Q.f`jybCxnȶU&V̬vjx5@_e9S5UO[e*{,,}Y38ڋ2 ?[Q23LX)3V*FFP劳|*7s0'6o pėRR¢jT l5Sf` i"( DFEgJA؏pP((:-iVc-PV9{7PLJjש!AInjtʅq+>;+Tfo$(,9*3K E ֩ՌIk5&PXLҧ)9b#)QL?[uhnѡV}[j~xU:Ofm:PL( L򜓰 W/c|ϳ62.ѷ33/,t9 80C&%Κ&jU#hh64T-T?j^'1"׬QڊkqW?Gύ ۫{oWe;cw#>=_yLZCn-.GLvƙ6moQ;01 #f&[S@ q peK4Y7W*XD8;Xk 6Pr۵$ (Xb%'e+Hv Q+^T]𞓵b#`xŐ ]ibb1=fW# .4wL0EW0fV*4*15ن+[JJ,‰3饘åTDEuXGcq:][[Y -?ZHWA"6ɝ2@ w E%[: wkbb e؎ۜ9@hUͳgF*}Gscgv|8=j*G-e}b)qX;Z#-+;rmb@-cJ  uVTٻ}8AuQa2]Gfao|m<7HɛVWϛB(-] )EmqJDX9Efղn-E\qufz(aj7I2RVi49.37$D=RG2co'f__CJI[Y]Pި A=B]Xb VՎc5hSJ 5]LMW$g`ZCPhHRDLa7_s<,#G `$Aqkν_~0tIc* @T!RHsD! 0E!r+X}iʽB-6`fhfӳ!9PmEބ)"A$B)+71FO#B$¿w$VpQ1+ȟ17Qіt"G\Fl&*DP@)+"A@Bgk89T]H̅*پ~A%brxɘn4.xJl=+ukyʎfgSߊ=\*)پdb3nf܌|5*5O$g7~YL c"P92 `y6} ,iTٞs. 2N~:QNXiR]XH$xVaqvΑD"Y̅rɀ)p槄 fU)MACRpvoX S;lik5Yfzk)4l,[!h+ƬnfFWmNPU }po4HvGVrZ%HY,X`N H J!ZoGXL/Z %켙;\Tr6:\ ++)t.*ӌ?5AKi]wi8a l\^;T dmi=C&7ςX̥ 9ڒd7\Dɔ}ln̓H)$bSRcS+̞AEN1 q#G B'ۨPrAsOh9;7;_R!۶W"^Ld.v9ewaO8>%-nI}Hr MdDƋ3&Aŵz =±$΅0mCDPm6`rX2VժBmh  ]gD@˂( ], 2KZ1*2[xs҄22ډ^KJ Ҳܦ.QՍjA0bD{S 9|y \ҢDdWAaa+ bAG(H3Ħg8`4iġ P&$K: tUKE(,] ^7B 8D! H> ߽'Uf0tflD0lq90`BD4 cFHF8&8L]fHUL3M]}TI*+*L6Uf)a $:Zk\<*:01j&yd{QđH[͸Ifq l}:3-R18IDJl@~cǭdOҤL$CrnH `U>}-Cs7S*+\ (te2oe+:Yk :Y갶 ƀHIj쥦Q$Ԙ f ҍIm3]y( g}b`dVf3C6A9"3[.\m eP.)3?B0&Qf)6{DLf`בW/]ecO(Q9y\d\UkB2BtgPChg0G"BYjP6.jҭ2}>LDq:*[fj?mVIїiWę=KGy7 /{36BіM$q.PS kxNkJCM-mr$e| mU*A`&&egOdsbֽWU6(NՌ:% )!ّy7R2XA ɲXj˵OԧP:Q=?4e`gj̀lBWतn+ӓl\qLς:Sa%_^:< @2ttTJ@m2wP$$TC8p=4Y?@j2ϲ^Q`s%v yf TmSmXAAʩx '؍:Li1m=B32ÍHVc$ 4^dWGv}ՈD$FR/9eY1E-ZE (6NO@,@yH~z#,Ke"I،TUגj>PS0G{PSw/*2VT}ɉ*Ae3J R%u9apKX 1)3Plֹ@_ОX~2dz'9HcNF1{IZYlfRyŲ5`p$׺=Y]U,HaVt19@յ\CA8C¹eL$溪9@U6,A|t8 *N@g*D1 i􏨼Lԭ2$*<3@Gp-qd)8J7 s-/p<J߉$1w B P/99qm@T>vjd9U}8Q$ɬ|?Qor D{gA1zZZG8M̕R(@Fr]W* HxJ PJ T[(^(unz}`U,ٖ^ }/D1BT!?*}}qWgZ$3ےbf."BXQ aPo470 &V&9z˘b3"1..4c҉8^3y:}o u'%<\YռHB`^JXca6=AB,B>_cx(I`bhm2P@>_`"@C^ GK[;*u܀RUlPZ`n8\u)elњ]6EMJBj[E9xWoM*Č<v)SuVmGF"<οq 7)!g)@}:4%5C쒳+QVˬ஍\:x,3j:WF 8,!g֢ԠCh̄Z%pqF64TN NveSЈʗB*pjt:M ,#[3J5K$("Hp\Rf":!z: 0 Ӗ8S )JaےR)Bʯцe|is'1nO|d<ŝG!ep TʹOs6P̬;p՟4jjFB~QvҬx!1]>O\fPD/T٧1L=}64Ƴ(nnUV %0X="stu/8ߌ>ı%{}IWYU Y=cSm's9] !1W8:=P=r`bRՉ u$%w|k4MpyVM-}r!k XnM#6*ۓ"uH!LÒ)Ho h&n8%GP{쎱`2y+R+xrK(ڝl/D2?WDs W" 0dx NkXR! *әrPLtCI JaC3UKX{)|sьZ-K\bE!fs(n֍ ^xuw6 t[ fSAa )1~Ӄ*2!3`difψg/z:ͧ\rNrǔXÑiPca0jn5N9mkxP8@@Zu A˟}6qH9P{K%fMw>Y Eʾ\.zFJv^I@v<@"ٲEJ e3`HH eK Y!(3eq; #ԲFT9Ȍl,FsUQfR) p`Y/ǫ"ʝi2jù ͨʈɫ ɼlv$j҄L05ꜜLQO&4nt+em;5>Βo%*sN[&?GKK N0+qRR ȬCb"MTk"(J IDATPhafEA^G.Sxfrki/ު[1*To&EGƦhl6IqnXYr`x#P'Z:B漺r67HDGa5#;7T2wx"@ U<87#4 ;h3[ŭշjQzs&;4áZoAP 13י:F2X%BboyPy2FҸaƣqN#NІ|@y,0G($٧ vB _e !p(rlTMhXayQZ"Ģj /{7?*9<ϩ/$+-- PO|~/uW4tLSb azdInh^!ʂԶ(#0M.ㄋ 5f^٭ 9m3φHɍ[1\ Eh5Af ZZ`_ߝb1 D P'(%D#s!{7%̺8\zHW ¡qLcJsYtjЁπM%1jG%g#UYih+ u\LxV_dZu }ff.v).R5'#Z >uRM%9Q=5edA0!Zd W4 %+3˲ aLඥ(&&exYↇX0zKjV B#sEnp mDv\+0,uqysP}u*!scalYT ld<] 4D3`wdfzsIJuArAKA$WV>.sY{'LZGޭZZB'9ss)$Zx+潏ʄ'qz S4$y!+ G3QH(D$b|pbv= Cc]WZT-H58X8ykK#oX U=gI̎n)m / "kGB'iE3́`@HZeo՛'d](!,B6og1r*t*YQ鍞j3jwTA$y'Q:H(4n iab̭(aE/' E ܌2Ɔu_҈.g sN47{X ]lٓ[M9?EyK.3{]'kcdeEʣDarF; :z 6[jrԌ̋s[ĨeuB [+ؓLp OP`G`ISpgx([1-쵨KI4ˑWL@;PeeVE48 *;|+9qLi8kUf$/VAdg0x&hceh~ Ӣpk0f BG)Z]Og ʺQ[Uzj z˽[ X&:LZ"YCq-gb7"f 5Megr-Ӷ.?՜ Ŋx)DTm*KcUm  ӎkk0Nů]eQz 2vfCcbJXa3 hQLxa*j@" %ؼ [#J**@F~9'AQ!8ï[|&c4 pmtfnnΣ>~ts{eH,vo`m:%ޢukS, unUM5E(<"5+z5:fBJ% LŃ\Bp _]=4]7zk^kbd5[@e nI6ćZͫ2Ȧ 1uO2 SvĚ jٌ7SʷG*UD¤L&U@i|-箸$Cp18%5p$w8B>va`R8 9s0l ,u$&Zr=)S^*9߿Bc?*+B2aDåT *ݪb-ͭonE`AIŬ oI)`Ȍ`&scЪ!yWd&BuׅFtjUyDd3X&;BQ1T4fo+X2Jh*lCV)Xg R!Oq U^jHR+^7.eyXթ T5/yЛPjỴx9]| :.IV fz҈Y_lhK,hd>ZUnTB΍ ?tݖlnIPQq"IEVa{W1\7Zs=MȷX!5)C.m+JADG>!>e0iX:j ܺtaʬhº q@|C EN]1s՟%]zp$aw/dwa»I/`߭+Y)W@HFƃA|جA&?y'.xܥ^\IDhζT%F/Alng|&r]nSpgԩ!<':)n^'0z{١(!ʩsCUi8F'uChL9 D ݭ!k\:VI@RT7ֲAyB+1uهJX5lS,Gu%o|'!͎ B_QX(~8cY4W 7Nj!]&2qeʙ,7SG"ŕYT}qV9_4aW*spxuucg?ě"b)8z³zT-ܷ$-g!D{v,AA:c 7Q>^y&CixTa(n7:HíԪ02.G(VKc1r^~tFeT1)=zuS "%D)'(ak(@V %!/~~ԥqlGlx1:m\[Vc2T7 X]l/ūIQ|nd˴9( dx!Nw]HFܴXa!fM"?'P'U+{tR$MiO-UjFX[@Dffr36{ }Bѯ X\#0쬮AC2Y>9\cN>p?oHr-ZPqW W\[;~>iaj\G36%jı{F;^L}j hlCz s=XlL!9ZxH@Y E1__"p$WuGC8mB<9d3Ow>#ܒ>x3pį\"ߟ Mwќ^jѵ臤.ZOQeea'^Z5=ԆY@ m*6¸Z&kڿ"~X449Ex_%$Qz :oK8 w5/X0,c͵,yY>ce&;]+찀wTk)^9g"MTA_; qj&1='퍄й,aY bXFy]ztskE ao3J* _o?tNȉ%/nOOLvUE~ϰk?WGskȭeem}b;jJloU$M5HuJ̍ݘs76wu`3[DyS\p5C6fnPS?٨PACOe wʑ,QЇq*H2; ewK}NmTt`7Ƞ1~2Bvq$ zVzy=mI1$(*r[su»ϾnFxnOb,DU],C ?Jo^WJw)gͼVM # \Zx9`X@e.#>YУ$Q*ZnM=9vDe8.-Qc!H\Тr#GT?Ưх F15FW6>!U@>Gu8GZp(fֺxQ{Aqɹo6"{︇1SrelNcĿQ-:5I3[e`J~>+n)#1y,_vNLxP)¼5Yhv2rin6OlLW MlsLIJI_ݕ Ht )w*h!"d4b2;<⻦YblqZ6fg5:V)T 3fT"R4?lNͿ{˷:^hGjf+8P:: {Sw+|('#G޶Dֲd(fR΍b}V__"N\QuO/<1b?fUmQ}]qAbЕuK`QDALn~L 6FN6ldQx2w%i)`,ct[* -Na[{Wj}QqGs@uPyIv i&A]լ!هfaY8l[__&ۢ5_gx=>1NIWg~աUdq9y*{ZWʫYC CJYu+{%L6aFӯzr+ap#o ;Rj GM[dn  q0nXQaL^_kV/" &*űo;%ġyG֨JY}lcB _+\Xm% 3Ջf_0 'tyK-V3&;#z^b0Q錸w,|^Zfb$ۃJ8J}$czi 0ʒg溻3>1ҿzc BݯcgT|yfԶHlI.ghi9٧aiTZ#̳BY/RhQ y8RUJQ㐛PPd#͛<\0_ gh ގUaZujSA%N`'#Eۚ2B*iY7ֱU6GA1 OQ#;P h+)F4+3xl:%uW.Ȍ^&EPh)_xqhʤET#}=D^;r$3j"e2pƖ*029X-w!_32Ra:cDnVgu{ 4< ~.wQ%g)?>-KX&Wx)4j-q.?V᪒΃YKI w Xvo=[>!W/=BD]DWjbvdۨpg6`)(K(EUW8 ~Q{1}> =а'j4Sz٭@yA~U 7OZ8eX0lawS1%Qf剑3^o)+ɋe[X}A_"-\`гdco?9508aƄ8ޢmfYb-n ԨF@o; Hjc̸kKsIB2Ԉ#` >a h}+0 #AOyDq3 W"j7 1-9+^ qWU%ReX^1cDoftZkvd`{5菛K~ [0dL\,_<5#O(9* DYL&DUXv=s_SF Ec1,]>hepUCCo#k !'+ڹ4\Zcw~0^ # 5* U o4몥C+ I+zT1Lj=کh)b"Ǝ~,MHy.PvWi2gl£xĝWd{bY9@Q_4^߄fZX/w~-Ppj#9d`=mM]7l/c6%F)"XԽfPx*)l+bVHRRt ,SݐAS6YYҳ-Uc>^< r?sahdF0aXu~M:H2!f(R 2"%[10@&f}قH=BkFF5j{#FƔ/ F`-ޞ`~r;EeCIYjdoɸEy(ܛ)L]\װ1%k \`qx; '/gN[Rۖ&'N*U479SѪÉr J?OY5Nݰ4鶱3N(* V4l!J,G܏1aQ`ۯv31jWCΒ}owMt41 u"Ҷ;@*Dԅs˂|:/ [%]lsNcI؈_Đ4.&G$ͷ8ey?2?tz `"{ۘr9iocFj)yzD9#nyc=cG{-ﳏU\➣Tf{{043ިlU-%zE"Jh7@f4J\ep`]bfxY-24jipjg 1y W4 IDAT8ad 2;{ F|nٖp3"o˜ϐZZ ,ᏍQɻ׳"EH`GaXx3]1,x^%c<2 Ž>ne +QF\Y8~lN 1ɹ%!?#͇ #m'LF%w\1zn9T=C,M''v*4n6J5:uqWbؕ#J7!toG:+G fcipLtq+1d Zd.-]𯒋c %E}9!յ־Sv1X0YGvQD ﯓ73|6{ jՆPR ZT@|2ۜl :w`Wb XeJ=}ĭXl&`;oWŽ׀ /qS>qUAs|_@^^ ڈ)oU|nPzEԧ =.c:Hv4MzXO41BS`s0E8B eϸX`+2hI~*xARkvkV1Y5@Rrt%-i*p .L†(@X큳dgX D|v>ѴgPe f (d⦆)/Z5@0>k6еQmL&!':i˯yX0F&hQi>Z%ϿN4۹7`0>nna' ae"/A|s3 J<1\%$o!( +_w6AQO[>Br'8-`(5=t:>C>~9}=Vh/wNIHJq,0sc::N'A>ovԫu?*鳤wٷkcfqE=٬no7J6~H6nx#O㻡2G8YG+H챪gL>F"RTc Mnc2S"ۦ).Ϲi#ʈ?= Ug/Vs7~CzP|+ Ue(nalKqbo[[;d X t񇕚F('9U]pPyE4rdTVFeV6 ]uTޞNt[,gi,^T}>*GgE$, ~>UnD Bq q{s4D'ʝP2Vo. 9*h<'(2%16/-d!⎤?D>1\_ 掵Qm;DXl/{'% FN  GP9ձG  քUT1fJ*Bڦ4\-,ܻչhFr-B FGۣ=mǫQJ\A_V׀>MߌIJQ|+=9!ZȍkOd5&60"LӚmJ#›^/>+X 'H>RVp I(~SZL\9/((ӵ qW@{=,: %O#r8j%`-Rtg>4WeXCZz¯9qUpOOʊ1JNdp,*yڥmz wUhW x!=.MSU[do\q@1"(hJd n /)xE7w+;;ؐ{Ʒ+\OƶkQ O²bN #vMsL]V0^sȬ}~!*O!/;"5& -Xwց+z@O?l\3Bs9u r'eDhu^_fĵbG9ENK+Hj7/n&W1ТRů Hۙ{i?AEmXc76PnS}u =gޠL8ԖlH[m6v8@eV[qt~SX{J);-t}pVojz= G7'9H|;0d L `l+K2cvGOx'HtduEg=z F^Y>ٔ|onE YiIN|> X9=}"rbiy{CZ==~|Ce}PpB%A'̏ԾIbzž@grryAW¾3[JWi Sep P?2I Yk&-a0J`p 2kj&&w9-$KR7"z>hؖ@hajXEgصP4 qQN-y#6j\\@3>z壥k{h7"1f؟YA'."qV"#(lM|7=x#bՅP!uJ6v ;p$jq R":þo;uUhԓ;)%mͻ}C3h.5Ť>;_ҲWm{8.}n֒6?CTN*F7|Q"T(,'n#cpnfa KiJluU3%Ϊ긯(,s:͏XTyޱ ޳G /I~jhX*־k dokF<˯9,_d# g,*yxX-c χNr.aN)TܕsЍ鄾Me9[&U̜<.U b׷f}}R (|آiHlDlti!9gA%#f-4 ]9<fZ@|\uYR c b+bLd`gI.Pu;$UjdMGP?- n1]_xsXgŽV5O{@ a>D F.J|xl*J5MoQBA[$vE!z&p'nν^4Nz(l(@J'-"H2%52+ž+ڌ Xoj¹: rw-}J뿸NWΕ^]!S ȗ:$ai?Z][@}«G)RIlEB9 z޶\"o$fzy@grb}ITT#0u|74La >QɶJ$JNW,u,AZ7zs_S5|e>ں-,fⰗ{ūԺU(J~vRZS- ) bY!_ :]#l) Q4;+@'z}A{J++gy3Qc?m0m9G MSnkZ#fHZR[ɿִɄ9Lvذ#,^>J?(-_M\[aP#YfVt X [osq uE#b 6sa z6ֈv`iE뎫:.jrcWsn4,.ΊMo)k3ҳ=3بJy!&wOGh8L]K4[DF6Lr̜ؗ o{ѰH-ݸŀ)R7V)f?ȫqKneYĵNZNO)fàs>ЈhſaƝF'|xUm$xzb ӭ 1h=}7deyuEN'0b_qZv?ʽ_c3oG *EǏZ٪"4E1-oӄλ(#c~-qiik˞)H+KrOD3-ҙn{SXN޾FŹQKA+XmiD=| (RD E8^U . r̨;lX#.ZˠMj0G1+lSK )JpUfr;`Au .Q)g?>*)YnM*Y!R$3h+F_5d`k2$M0_Ul&YKXVFw>0\̪Lyew}Ty:Bl;8>f鑹W#zwi <3jD6586Y dF .lF L:-Dv)ԝ3jw~k`y'WhLs/c{hdeBѷ`lZЫ.3{^6 d# sXOGN|,Py|/dw鸖 WZkxdsm*$l ԯ붤; ^CW""3]k0R*#Ȳr9sD&z9`rЏ'b{azeVQ#f㬼78ПOMlMV-=ǓCQ]@U+I5l0~?7t].[Q|L8WipD̞!L!32T{}({^ߒ{z&^sJLryGj,2[Na_aQUrښG JO{{븱"XRvd̏ .0I 'XK^qܣGB(}>.I8VT#ro &ɫ)T'nK[;j/偮Zk~C)3-zOgM~ފ莾֮f⣐t~݆,ᚒB9ғZVYN-9DQl2“Rb2տP'G؋U5*}EmwDkp2C5gCo[lW〻ADŽ q հC%- U.qvջ S~,kVZJLߤdT]>ͯBƿn'| `-|X?OuO^L`+5R $ԹS ;4OGۺk/S3<3 =-4f6ٟ)k_4& UO Ա%Eu(cSp^I>JEPha[t7qw9$"G“O]9AUzq\ % vdk3LJj5iQ ank. M*Qej]6 Uv{ |*LE Iv”4q ~':):V?1y sJ7V拣#3*Ss7f3lc(φ8?v K OX52dC!{r5~f}:q0qEv4|XvZUzņ#z5:~z˓bgX[}s۟g^oe4tC&r#qc0E,bKS}2nSƼh '%gLO-B/LT%vooi!XٺZ%QWGIw1R` IDATbELab';-ݶ8aL1/K胺VNeyC 5sB[-QU*'qgW& VZFN m|]>U֗`iK[,1AJ[+̈.~a z6O*#l|E;"Z7Rc~s+lmw2r={إi{D׷~fVКP0"~j\1۬ y7mǙq}vG{HS3Sv ^ ] 'uex6Z .F͝c.0xGnC81,Ju T1ည=Y; 8,zUj4tCx kt\yi2\-nBk 4AOI\qhwrqSDF 1b*~If&yeT90@і&7>=p犯ZGN .D[, lHxض{i+V.M(XJطj[3(nz?{Z=!us!CKD&NN@6!Q\A  7:+$z16ՈbIl)%&lHLSk#]wGR~e+ޝRX+{#0tYpDc(a+_t'5q#~O?rn w;]1hNXNt/?f GфjVdVk z re1ZO5l@I+Mr޴X;Ͱ.ʬC4Ԉ L,r\YŁݜ11Mp%IfJl*MB{HM}X[bN!9b^_mҴ!zcqD>xv2dkV k3|@F 78E} Q_xig:#um^띣Ҳli\\#YZvրywrU_UZUZھvC}G]Ҍ9&Q>FU{R6ǧOswnw`-ٷws؅Vw3XvqrH92xk5'>4~ZyN+=e<,hbO<7X$rT͍y8evP1DêCW5愬ͨ K,m*-תKפݹ^6%z&䵟r//̯oRcE0u3NyUzbK{_SkzYh!j`~ڟQ!B\$0ѳ833|jܤ EKSaDg,CD@S8k`Ԥ3#}R}5U+o+;(8X% @b?@oBZbho'ys:7C"owgg1AzbtŋY_ctW0 "ױ¸ [eeEN7O]qC!o"?ȄyYARV2ۅkx];v'&4vc+'v@Y7x hwF4W2~m +k7 {2o oL\x阧2y,l%X-.ar S'v,CMRyyg-&wsK#O]4emb& Ub;4z62L#wA_S"w_fO e;KbvGX 5x%CD>5DcKb_ N"`fv쬑u!2x*/\Xg?NQo^EnжF{ T~{_M,^h{V.T 4p28[rWZvAl~s4&J&ڡq Vcp^^/!YuLXSkֵ4;䌾ت]G]j7ڌu^gɭS^a1IX ybܫgWSY-Ӎfւ ΢.*^[H[p &ٵֺ,Gq}C8LgzrcFp@61 1b]O Ofylv&dvFsW9 kv s}k 9lNj=0s$TDc};:ȭEwlTzSBʗl!دJsاr;W_"rX-rek`?L^GMb~`p܂'g|LOτmr2iZbh3Ue{Y!)?6ي&Cg!`(k'C+:w+l5X5O# |j_yҏ=L% cԘEU'{ 8lFKP rje|_\Yؗ'+= kb^%:ۢ(o|jx|j,EkPgJye~E zraƔw⨫ grR4he$ _19Qung?$jTЈ\ޣ*ڽ)<ǩi\E)l#@ xB̥-(|p\uz7:^nࣙErPwm$+fDy` 6URsdk@=ƲU+yq耾loTJᎪ,)AQO^ (j&VBZKu +%[y,mk ^[wIfD|d#+( AVڿ/3~ZRϞ{|90R &f~ bvdQ|fDbqQG@c 5qryVh2iJY V*3tHOJbF/%Tom"!A2PxE[r ]Y\pL T p3Z41dHqH  L(}m2F Rq>?|b2nj\HV.Knf~H{ba~=b%Y.ԗCK.P>9} e^Z|,F1n\s8ǽE]TĠiaNC {,  jLj̾^';y2U :z-!j̤ Z/+AoXz9A^''w}<Y=hxhB\ǭ1YyjWȳyW(5] Nk2%'\ -PYɩa ϰE'%h}`qs-˅ 8إю&d"t?}W|G63H4-afa8UB*E"CD#2O~ΑwS,E&ǃ<n7q[ԑEcŅ}%!hإG .Q77}w7 zZIr6- yfdIb`g?U B,eY 5<BrX3rrJY˖DPճ_߄ Ğvzsc'RRGá;091r@3g=3Ț٧6Ӻ&Q 'UYq3к˔w-+`DqsגŀSA ʦ \\vV(}Q3_,ҥK'<}KzP6H]:u/>cPݑ$6̓[1.o]'݀;[~'eqAɦYĥ fSQ y"ws9|;_NkY1J;^' 8*Y%j 5"O:lf1uT+mی_%. N>T[|Vɲե0+n ѯ'y`<{V=JrDȑq& ~`Gee!M@7ndpma=0#vqӓi>ZCf!p"˼˚̧s_i]W{ޢʖ v%P醦h+bsfvt,V0s*Vm 6fS(Gd详YD何kwE Q IBIK0ǡf=?馤; -tB@'Z^'4OCG5c4%)XY^# :ipdQL#-F-8z)ҁ_=?e{Հ(G$Ҭfgԯ ̮$=8v1`V:{Ʉĵc|sZDLku. WWF\"5$K!ToϊjOEɇj?Kv R8vby&`ZTtKFA ; ZltPmnsC}֔ES@O!H!_/%)q:zygP`JYaT;ϱb[?+U>2 xcFʓƢvM|q"/YJ6WC{Kat^war㏾9n'%Gʨ40'u]D{Œlͮ~4592 Q%iOj=󭾤۱Z U[3Ό@ W|FXZo5BS/Eyso srGoc(qحZ}֒Lfx> tos{O"^hcoEa/匐Kt"R^N.!.tmFKTvJЮ+(yB/`]kT(KjŅy7KKs<Ы]LKI-ԝ'. =?Cci`9Mhs]ͭ2gysCXF|WUr IDATe}qs̪0K͔yԺ솮f9\F "$=ۊAY?V䩬 ;Oc&y)oLU#'&oT-DHd/- $Vek%[@\-{^J5$Gy75~6*L4& ndH (!kǧVθt-FD=Y}OV7. f_x:%p?}؉sXzwKMhZq&\~ Ħ!DZGC2 ?M}QkԆpeHkۍ xD355zlbsqrt[_]'Sd}i3Ue)p9)6N+< hvrd)0}#%ӹ~o>$g\AS{\VI_֣-Xf8_c ZWT+1BX1s]s(%j !3J[B1v`^P%Pvga|H}⩬ӯsZ.պŋ{#m&L Vm_0,q@1Y:קj\.2hSU*f gR&xmY#f?X Y;۾JdOI:TpxgJ9K(}_(O$$g# ,nʤӤtj 0ˍ.~T[X DknRHj"f ; ^ءc;lTR9ʘAڸX,ihfmBfyѐ*<ٹjQ|0\|_!sqX G2CT;Z3g2gv"EV&IdgQz-@Yp@z>|%»;tU \DbV2I<Gok> -x3^<^  V{`!FZ-T]LQZ{7?yfDX,+LJ[ieܝh*ow") +z\}VN離xA/2b3"oW&tJ㈨PW5qTH6f6FI~=i~!_r6As;9 X o>liJSK#5R!*),A,ٯ돟/^:͎HHHahnIXe擻\'wU*gK|uLy' jɽT4br:$ e@&<ǍE^@ʡ&HR.bgLnv[QRI5 :P-v`g܉;i}l؆oKUlx.qcqG m`8cꚲ#-=1k,l\cqYϫR> ϡ$^6sh''v=L1ÁQ R+JR)\3;*P+H1^Qqu}ءJ/'hq<ƞ%AOFʶ*\ӓSyQO zN,}!@(b͆.݊n69FvF+,L]jsb~8nT##^Uwd'E JUγ=yN m?H٪(P@q@Tw[_quuz>C{eՐ>_2 G.aQz7uATotTNJ5z pFlK|c~ 2um~ʹTEo4ńaU9z*uMz̵#/,Rhge揜giVj'LtT*nuD(h<~[#^~ɖz.=&gÒ@ll2 n_nFOg'm"*9u8KԡH &7fF^DUmt@K*[|yn-eHl -ng9,@XbjE -Iʮ*iXY!G䢦\D![Ҏx]_fO+c9;P틥zm=D+UCoi8s!\B꫷7E;< W@E3B#-8[V!XSwnBm ʥ:16_;YO9{ѕ֌e#(knX֪:ڀ܍!SaR7a#WM]Qi*= p],b =@_E'>.n/a(UDq[ܩGcK;>Vp,UөXlo}mٓU:56lU;3{HnmP{&zFgl \գ-0}:a?\?B]~2E[tw뻖NqY$q# !R 7uQ @<~,׿~/"z! X!K`>WBwiE UH8mZZǸs"6C+ ŭq]AECUƟ9Rn9*-KXmѰrbQ.?Ȓ. ҟDqߔYOUߩ]{9Ѝ. rU,qg\\臐dN_?~k_~ޢ'M>naޕz[$e}L&*=S'j". 9\-cD6:/T 1$.Q`֣ŢzĄz2-q F]A\I,5NM+lR&)*g#]8JAM VB[m~na.me jMXBϜB(D}wjAWzI>c{EEyUH qoM}qec۾l 9T:RҒL{*Iy"Σ^M{%fd }7ZA`9GstQ?dzKA12v[FPzOM@.xrvJm5B!\ƫaIŪO-&k+"V1bqN,.i0 y .¿oJbs^r2Hf$EᾏK]AV(S"9-VJ"/C0j[eWe6U6,V<ץY"Fֳ=Ob(DZ&ID]5FY;a *x(}gAU` 4y5woG868MSR1k@.~wkC`EZd滞BYvnXβrgr(ݱT%pvWhGQ=ljՎ/fkq679w'%Vڝ6-XYnJm)aW ސ=(ڿؼ9#2ϒ%RE:9۶-؂<ȟrix&B4-xQk4*= V7?TD4ѱBUL0l4u'N#i.S}ZԨ&K&31у{_,LB60wjQ1fymuw#jذ{\ϫ8hrBg r85YLeyrsѡrȃO^k'2pm̉ō:Vz,w'!J~^iC%HZ1IPH5RY}7t V;cD5[TqJaT32LZe?n^d.F\v SW&:{C kosݝA O_kQRi6& ~KXܷV̹q<77@ "q9>1dK < Z-!kK7skA^hf j/kL|EL7U#R#{5r􍩍gUm_`%mq:-\ ̜urS&@&%uiR[vDɴ~pȍ+* p Sߩ8(y<X&%J U(p@N닿~g>-Ī2!wlYC|Y? hgMoRפ^x-a:dxǩQ_•Xo`\fU!wԩ(Rwt4kj '[ʾKI4ҜuX$J9tgn 9CqliXҲB1=l1o.BFk0l-=ˋlJpgт:h=n~YjulݾE&ϓekc⣲ %`YɩnEf :@QwV 6ck#9RApq녥|*Iۧ 3HӒAWi#>2I έOn)3KAGɦ&n~*1=?OW?:bê[D |Ts`O*k9Z%މ3h\NTԮzal"Δ`I"NgTnpLϿ7a4EqPw_ ȌM/[7dzE{\Qڢ!r%$d^r~mֻq,ۛ&zCD ifj#@״=OB^F?%9 s@m?y6%U9(0a9Tl%jcYWu]YBU]ӐQ鱠ѽh^ awt+G{?E݈|z%Pr$U;lP2yg^;PXT&)Kt\`WHAT 4EcG80N&Rѣb!c9:2mӷrfEW~==ȓ'~t^mc"wlu _VmvZz}C5מ+%_ 4]?k~:S Kodwa~h*=a(NڴY8bfӪlA*f{dt'?Rsi<8mz\oɔ|1duTc4gj# qc9}3s~WrS ֔VLES  8V ۱uy]-Nҕ zM P+;KlU:QCK\'HaZEw۬8:ƭw;Ŏ p.]մF8T0ܠn{k)4D.s]v47:AvF_,sLrT]\9Prs|]l}'U5v&![21U]9v+dlc(q`MmUqrd=d,TFvr[FZd˲4B47i@&p&1BE+!O_V.F\2Jn`נ]RZbQ%#w"^wB&u%WZe{ J 73dĊ`s-X"3qeWP gPSODCǨ,<%kUBN(ՊgJŚreiyņyhri~ԘCM !"K&l і(Lo)G / CxH:Msݻ~¸$ؐ Ba@1;hc&R8F>kݛkKBgi.Yii交#m')Q1B;J\2:35chVV%98юAvoe/IC] J!5$%Hii n#qDBL[IVy?4DU,BehŸ00JJImT7c"e%9yfBQga+l IDAT,e@',bzLت7 ;\cQ)TvNEr~xnr(4fhoGN2 #")YH篖VYM 7DnkeI@ kTHvT0c V*SDĶ AW RHLjonx7-s:4Vuj_}Z_UFqG0h^Ԣ 8:n޺MS:]9ײFՈ{f6TjjtЄDԣAȟ bq:w37xr Asl*[϶J'Ҵz l('rфGcJ㴋B_[)ڼUӧ?>+ՠmkfB8rpoA玸sfJ2xVѾ(ܕ{r^y>J%N!^.c6=F8M{u DDC[K` Ҹ5X*%l/^FmJ|NYLkӷo Qa]Xe)y&&l[1Ei]s;{т&>q^=M,il<'ⴂu٫ji3I^&*G?ɾͥS. y+KVe"j(( g D.u*Hf6HKlevx4٬w6 $'C6 ;#ڝku-{$tY)j%%TQjJԗ&m)tώ>o').a{#J!AI>1h<9-14H*Xqn1!&|/{{#T\<|lLWʟ,i$7ON*YJ%EtH%F0@#6qp7)DmA>1)TY8omi$[uj[z[_'F x#uQ)iqy}omN0 L*zU2[(XErw{3VאszSp]g~ogG8r"3l2CN;YItFGx]α^;.`&m/Cv- ݇go5WI)U4U\\X RM':@R1)G%+O(cK ,n.Q(Oo[Zxҳܓ~ >1ske ]meʱ֚q၎O\">Rbzz˜;Ϊs18w9bK> +myZa)DQeÊ涙@%.t0.;"Hi$ƴf"ʞ)&Ȼ"/%7O_ojHðjv)wT\qkKVF=_{ dS^c=L5;h]. Vb;29E^^fcE3*8 X8k]Ogoa|U2Jd3-({jGbtGl3<+WN݉{AS_7 1!eبK?(w(<׭qzi: &ĺ|z3i}.&^Mivϱg.IHw@GON6Nup?Jȴb9<,z_@BOK%S*(s e7s +.rr'2 ?[Hg,,LSoS&"j^ r.`lS4[\n MK7X tiɍb]X؀k(w^ 1:TCrSsG#G¢d6–^:zpz/0MBh EeM"ˇ"~$#qh ?k(4@Tm Gm9cђ\M^\#%_JiK:U 0f67Sc g=ST(r{${O\nhfR]߿y*q߻ b=߼D([nD|*ӪhO/90| }k)O2Xn^ITTz]emoXK.4@cjfI-xU l4)53F cQ_ê;IS:ݻ oWX8)6<~77OTuW襗z#׿[2<7?s񥏾zI<̯g~_a)I*' J W'.afoo'2NT=(7Q>!szLfi5O 6msjD6Et(w&CjnDOڶɳ0En`UBgPi_3Ϙٿ'(ʣuO'ŏ6zœoUn1abS_~?A3Ϻ]J"FU}+/|?i3 _zO~c? #[<'s?/+3_x'3L__W>Z}Q|'>?8_?|~W>ܻ/'b%(ՀgjUftbw`D,:ĝ?<5UPZNl,pﱹP9;vkhFQkeS@E CC); O` KiU?Tl|& !;GSb3B/}ʈmn\%Iqvyrr1Cg<ɏͯ͹Vtnqqiw7dw:VtwpNpa6R91)BqC' v-I)Xه$QlV04ʻ/>*=g@O_/fEhL-sS!c0qTzWUEhіںr2oxĔWyqEQ,6^Q@W{WZ7otؕ \=8l2! Yt+Jt=کr}}ۿO?ܛ?9r7k?Ig1d^.?,rFO;EF~KVycl.z)eD#cSqg{fa9_y&/Gz*<*Lap;ZV)"+L Fvd=h+i5mlVɓbEi\ɇ,v `, =%) +2)) `?z{G~=y?w?O?/}>JHj+{=&GQXa,4-dǞI=cxs\͞ÈPV_8DG^Y;gG{QYi9RoWAo"`U#?=; T o bcmݛA]cŵ6K;*a ۾bӣݦWtq̜TU o`ͷۿ34D-V6Cp8Q-Ew[{<e}aWC:iwIejfKQ/ߙZE~6NmwMySn<c}cdN.IC+.b(7d4E{f HcWK®զTNs?V^si׬2aoz}|FiGj[\S,ְTO=,)~Hr7m pC"g{U:nid"-×WqGcUhYۨ[OG}a\3 tKP;oANnt߬3ȹihPirŷe鼽Uv.!x]VƖﶭQjHU>e߇;;Ȧ&Es"R" ysԥ5̈́w_jP!}MIac6 yT7%֚\]7 Q(.WWW2E??{W%>MNw,Zf>6FR`[6*47˾CafaAOnM ny9-'~ˮs?ݟ}]T")FN$6e33( <;LRf'W(a* f+{p@OsYfV'bE˶aAiz4WmN׀sg'b.fK1s/p.(9"9J,$9'jG!~֣÷ $HV[d ]]IXղJ#}i#JwbtOny7/yuꙧ?zt I m ? ;*7?/А: Ie1M[1j6g[jxQDNT۵-HFmJ]UI5YJ"|Is{%(ᮐg:!WbkbjX'Vrx~R kYy \?샫{]d#YxJńli*䓍@U&50i$ͦyJ~}{)%i&O=K!Gfc|q/7@/> ;7%xx$z<-0-#%u8u γ=Ԛ (PN4!b.yk" O'+-B΃ӯꩧo-n&*)X=D0Cڡ!'1WțouUHve RH9 C#U0L5@RC^.eLLͳ\rE]A52E0 _ `f UfBWFh=Y0h䃼en.ã5@V! ~c:`f&s62pE)2pn |Lw1ZfR~c!'Om3h $Oxd'9 C!o|ÇVLtSYKv+j$Yܧ)i"db9Ч CGxj4)chKB&yDb"t3^>_ /flr>P#,"=Iq{ZZSs_%R?d~Y3 uU;F4 `D[rp ӦEmZPY)JǮIuRS]Bw,8L/˔* pf) :M\1~ ,9G X?9e {(Ћ@>ñȆ hd'3nY6)>]){{_xB#O[^:PK2w6,!feߍ0b݇)23iKxA&~%zYRbs Y=}'zě@SrhzTs`L<=>#<ݵ˄O7xcKz6&]` ⴦_/HU [vCW!yfhk,?]> $efGn8wy1]9w1\wh5{)9 1phjbk&tsĿ %ܱ:3N@wNH/PQwY:C nńTb*apGУYP3+Xi5~PLϭr1{J-oN,y,Z' /+yw(^(WaŽF\HMуzčF̻V;&"F9dexixʥB*tIԜsV.`LςtUҊ?1|_xp*`^ӑE+d3>-z편MQem2\0<7s4=lq^"=ق= ǘNxk.wP:[sp/>3tQ1-֜y w^yok KY'"tb(iLP*Xbz\Nx8(w}E3Mvuu:H3ź]L?F_ ,&F hIq hAn 8G/Uf4Gȼ kx %?3TAvdS=Df6z-X2KwqL+Bjʙ vN\B*+|hTUW7R/h02C7%xP&"V KE";c2)aj*\L+ruga4vL% it7FX?($,dAg}i<4^4RnIQ<^ֿH;jMPga-hj,lB8uM&ϬZCSVS2 k=c\Гw(w$*\$-@$N{V" {$>«V&9y1S©;#oI+.419ux΂nOZqLKt3!/uV#iT㫫9m[Q|hT núvqb9pRO'ˣ^_641Sm.8cȚ-'us=-6Q6z6xN2;`;D G+5U=ٟDPe/{e6B3!Ō_%2+&2!رY!{t3/ IDAT\EӫV]\_ c.tȖz@Lࡼ-`d_U~?է/,ҥT3XIDOfq&3h[NGag G8.;Bg`uBC|hmH!1 .$8c|+l; HC8f7U,$ft,0i֨7p [+$Gszo tv|'Uǘ*#q%"N˗Y`'afOg\ Y;t]#p rNּ"ΐ~34CyXJr>ZIQ3 !Vq,r!SUhCʡZDRXJF+cOcMYV`N)U1c1t܁q` P@JC2_QTSvgD seH$4LTsܞC85ǔQdXAp1981G qXT.Ɇ ^gL`-.JyG#=;g`S1a?zɫY(lSMeU@:yeNv)!~MP)C$#yS(xʻij9*\p}u8g@{/e"GwC;M\r쁐/,$i1Ћ1k%g0l.\UU%]ƅk1rۂG6oUG1d+ "X8TXϾ4"9n,}:;a@piW1/Q (z^WFGxR5v. ;dɞ>-Q$ b7l蘷o2Z ܍j44Fh"k "nyX P8M}0pf[VٽL#$tPqfEc[TNTIIV7{(j46QU-\q4h£V.+hrU%kye#RL<ʕF$lhX}qGǏ?B2Mu!Dewm AuˀY/N?GCIej'v~\*H|-9K;ylfʡblMß)WtDĠsLzis핚ibDs-JEHZ<: a:/iA$,7iʫnsciVuF4.x-t.0c(dsH,1!JKpLfru_C">?Ԙ rbkQGt!MB'waL.Sps ]nb;S*M̔; w 5> &Bh1u4 ֲ>'rEa#hUU CY@Ū֤A&SȚmBЅiRNH:Sٻs-OVz):= 5$p9|A/9b4)LQa@AL+ɚ7sO>_&wYSxr4S;2 gCٍ6]$d#02Y h;"XMO!!0ݲA'9!ՉŧB1F)E*J> AW`A9B]bfݨ~[3My'즅IۮyM+P]Dzt|ֹtjCJD/3u`zbBE`V豭) a䴬7mEZɩ< "p@Ր30mf&,g#>ݻPiF a zJ nЊfxPA2U0yM@}]Q3G*!V)^sYBw/ԾțSyoZ{,*q9KqtqBTncVt5jPok os67.!BeiX.퓓Bcs[%uT*< /Ms:O'fl洃1e&A=ZDr~!)+&qwZf݇Bc^BvfpE;(ՁC܋N/dĀZE;">!ӳb_ ͂mMwo̅QQ3Uۅ%c돢Ζv gv 6vD*HK 11q3 15^9y4b`}WĖ#x(8EEG!*Ar䢪-s!8D=c*Jy3m.H!YԦG~VR N V]hEƊ-^LdC: YN\R I$Tcy݄"23@p3):rE-J1i1U\|aL$G1pV`} O.6ܻ~p}!HQuUVNwNdֆ; ߌyH GWw?;ˬ٤q~viI.h^"!MclȖ;zltec )/ "ԛg\X5WW=TQ5,4?A/#`Muֵ쉞Ru[feLjY*?veesr,|)kFY8{me/VIvk ;Y%6F@gV)Bw#yD?X;3ơx&=H.25C#O?(@y3~ϜCT 22kӀs4|K#jJ'Q<[H]- m:%i`gbURiqx)F-{1eOeccR_HC[ӸObґ[R?%ebZ?V22 6U 9/|] NbH Y G&L< Q֔nV˲Qb^B}aISq@:㇃P t9bDIpcC hNDc\& vuz>JRRc0䶊 * PW[VԆeA-Z%n[˜9+\ҵ 8-zI/yO).{{IRܦP&]'tUSdBѶ3$t106)\8t zU)j:;IFӽGRPy Z-۔Rg_؈i~'t1ݏ~X0UU716GGFܑV𘪗AtORQZyi2Ț?A( 2WTĬ3/sHɪ"d=#hh1@CYH_9ӂh =->{] 3{3+YGY{D}?3GwpQ>y^MG7m| ?xï8??lc>, %/[$$m@Yiv+_> 9a>()f?#8b? #"2tAdr -n1q7%pB(16Fʙ4h3(] \57eh72)TioQ5%͟]d*cܫ}|vF %4gk]Jr dۆq֟Y~t.|#9 8as vAmVS/$pUi #Ԁ:)HJ1W{ 15NW|&qov920Sn$d =MCιא 1M٬T dxp6| @`Y@ gHX0O3#&wxC[;5@V&sC0焊5gNӣlP6SOo1Y'EF=XbbF-͈iAOv"4j"$œ- ݪΝ[9ҶfM[ӱYj]SN>Tx}Z_fYPvMm"(] N= eX1Ays[1Tݙ`,aL,1Cy$}D,0S;@z !'&󺘈N:"1q8%?͚3R_A IDATQM,I7K};îmab#kJU~go5U%cS>Qᄈ>\QwVi hdnbPݰ7[aqf4`ZQ=[ ÷9:!gQ8XF 5#3;AӨ3sٔSUܛDHJ-`X 0uk!팙9gaasg$% wmeҺ^:J ovQZKt] ez>&iңUi2љ|W43Q dpC'V'&ɕp5m@U@tue wt/[Sc ױTxwUx4S0W^`v y49D1հ,+`T2^z](fu [B׀ɵ81G~@n016h30 52z1f]-TPQu5}(BUb7d꬏N趦b%f\4Qo"GWz%ruhfL=5zƠߙNX~}OC9ts*D9?T/nj݌!8#SlNtFVS}x߸`KTÜ>Jw3\fyU/B38rwUL69R[vid;R.vn6@a?HiryHO lٍs0 62und :2? PE-IB`O +Ah anqYRZ6^ upwRG bɜc^ZoQaV*pN "C1ذQڄԝٗZ3Y"?Y#4Ѽ RwdI%) BYKsFLen5 a6f#ip  gJ%fU3}!jdD)k+JPcN;bJsT[¥]vJQ(PE0]PⶾKDm M~?֋5!-Z{T2B1P\>b'P2أ=ǑJͮ_5Zّ[> ^K e6a#fV[ĩep/c+yN ~jkfڗ 8TѤK  9R,RJ2XCYؘD% u9+OVB %8E"~>k_|?An7l^-r浳e\ƴc&E4ppL DrHt w9rDX F1rXyczUmV-lD bN:u0F#QHrCx; rW>yfeȅ)6iݰ7U}Usu WT<-ʖڗ^̴;96;V%[liN|M qOJ'םs;O=LY,TSuxҼ9Wr.yy ,hL 0ꏳAѸyâ _@TQRLaV{ cwm8;T,d+\OdEHLpUEEËkGM@cRj },|y2L198-`7J l6G%>enEMr&|L+dX>IjNL3ΌlEF =0W̮J0 Ն)Mks#\10t_5Ab B>duxg](֕:0[θ~;DM9Q{@=ѲR*,Gk" ~YmuȔ}TkeOuEOon)])48'6֬2.f#΄gyFNŗ)[G0dz̩ ܅;؀"& Zi03[R@6٫mܩ"@OE~>!MnqXSL dR}] )NSUɴrjp:;zHL*]t-l#UiԺrb5Q]9Y*w{56QfT|$&r9#fV)ꉮKP'qfk-.>" bq6|;v5Bš5c%Wl5?_=^/" efC)Y'&ח+^8$`6e񷙳uya\T5VvV4R0u˦.4U.‘NKs@ћl2z hqq5b[JmDYAqF83:\Zr(!]og:9Ҋ 3IݣfeGgbx+e+fKCFj*=TܤF. P))vy!}9<2F섉7)(@V82Չn̪ܫ_֚t]^m;Y vtP7C0gh'O1X΁SU=kZ۳&}7x?fuZ`(s:2PnBWV%[J8 frUꘚ8նtr"s(Ϧbxm'L8 ;2-r_XӼ3p>,F'yw ԃ9ի?<Ϡ]5ZN -kɅKN"w$H6eVLzS dnyPap֔Ǥ!?9k{hÍD1c2"y QýE9qYyMc%f}lA>Ho"Z1xһY4#K5"LWE:0Jj)8҄X9TѰ aUV1wOQc}{fJ .8 oW\!&;#n,b.eAEߤ9QWOs{юNK}_)kUDKur:2H*iIhNqJ^las((=-ͭ ҤƔwrkJ- 0c@vȐ*nā53FSţ>O>~e˜w_2;crd"6[hzb]AH'$aZGjhF,h.iAX?((;V3N3;h]P&#h<^$ݲkc> oVc5πA6aPJ;pn#+ݍ@wMK/ &A Y-Ś|AHg^}9# Eae$Rlz" v"k'4.()V}7~;m+);_!["-")3W;V1 !]ys5bz;[I|q!T􍦎dӹNF®tU}Qg v9(tw[:PV*ܾ8!LXn.1Z5A$SҭR`;!DF.w &屐k&KY+V( #?˗y~GiG䭮>i6WYX%nT\ ʈ99vt EB3ղ/c[\zUy^z񰩴kާCث @Ltj m*  {u]^k.fTFaԠY^pY}--B#Z^~kt I S|O^+ )#a TD\*ݜM>w qlwzVLV\Dd+G]S8e%bQQk&K&LoOЈ^mdf \{*,~ZW@51/Lr1* *ڊޤPsBGT}\I靖m¦-48_9qe{?L3f՟N8dž#kdlbv4u0QGmML7!|̶q4%4. VUIVu6B+kw.b؄W%io"bIBWxk߿yc^YJ}ì~3iҝiJC>[(9uhVMwF 719G,-G4:4 s>_L{bK̆1 w29)ty(f.ഭC?J>A{Re÷{pl`evY RqJS7 ǧÇ^eܟ~ѝkZFИKTk2;mP΋DiR@jkzW 0[a*ҹLclVtr3W~B6jk%t1%onLプ/_8&ύ9jX@ĬzJ[U?@Bx  J j9bumF9w!͇L<2t)gg7C`幣Qby,5tJ]䮱#,,k\uDBn\7  \"nefbJfǮN-Юs9>~z!mqqD`c&OԹ4ȶv9n>!76]TB_ti6U?SS!PLa83[h\ZFzq<;^ه/?m}WGv*T1,dCNw>@S=PLv׋C"]+8s*/Rew|zJs?oyEЕpdơS{?J7%3鞰p f[CK^Eq4M|-{@apt^טVΫdE ~JC+*;/ ~x|߾+.y^&E'i57TK9߾a'ݍ@?ǿ6m1{7 M&}]ʓ)i_g^`8{+V?6~ضhEU|QqVZfC"'-Gx]XT8#l txU6:M+?oW&G錼A'lSu!R^M3Rkȥe ^ Qx (?}˵_[]J+ׄ)eW̴of“cpX j320>܇17mnA"xew\+Wk eӰ/ 5qx\-}λZ`;nA9ח]HUX*`#<$6XQY9%YRS1w&lcebi4Sƈn2_(t`4t{r/u/hE\R%æSЋDb어[Z\+7i 0)^]4no]oyg&יuG^ބ%8m9n٭נT .p$b3>\ g;izѭ{C'%>ܢݔM"omߌH޽eڑ긚eEXeᖹؓ|rFfΰ##si)0|&Ơ ɡթmG} ̝WF[gR3 :vG]זW\nBoǵ`IoUFX 36dVusU_3"\h| [)K;dwXԳJnق찒l'mߴJ%ŭޫ=ug?z@Kgay1է1H I4v s?"K㤮NXL .*z5zXWGNnc \05lRϖD@7\jJLJIMTIDATxvIU72+9ѝQUZAJjtG^:C;;rWwYWfYmB\ܒza/V5y}Vj,O/yy{*m SW t0- Ȯs_ b?ߢ^ۆ]ef[ƕrmLoK~VUk[q>:'Y-jH︹3Ԙ9ve7MAۥ ~M_挹4l2,v;rVANEܿG̸ܿ=6f͎&|[x[<7k?ԈîZ3zi>|®~G>8V6]7'Wn  ~[wj[9drCz@g;IENDB`lmms-1.1.3/plugins/dynamics_processor/avg_active.png000066400000000000000000000030211247673406200227000ustar00rootroot00000000000000PNG  IHDR0  pHYs  tIME-EtEXtCommentCreated with GIMPWIDATHmmlUE3{{X%\DZJK5Ѩd/[1V |"d`01*J_%lm.14l\ vؠ[gymu̙9sy?9jttݻɫW xZkDZ=RXbůzzk- J ^-u^k"1#l~q瑨ūK&q<'@Z0 Du$:x 6LZkr!hZx?1k rS`KX7BRk KǏsxCcJk-ݽ{m7n :t_yx55#a|9R(ը\@JR48};;wv:Pr9::;!iT!~h@3Om(72?:;}yZ>#W)VYC2^+ ysTnTb (Ū;sZ\,+Ys9ҙ c~TH|N='n?wrٙnkh$3qIJA&v;;ω7/`=|0׮.n"rVBGDzItRnE nњޭc|\l>&''qDĀCT05&I&3/6$.˽`UWGȍ 2 @!RJd lx|xB?z<>>0 beYDQ 躎m8nCEj{{{@4aI>mu]u]flNŅqu]gddL&@|dY gB333244!RJZ[[u[7@ @$Q/ضM$fTϫD ,!L$mT*0<<<033qT14McjjJe25@T&_?O㾺-unnnE%_[w4OXK1+M$IENDB`lmms-1.1.3/plugins/dynamics_processor/dynamics_processor.cpp000066400000000000000000000132661247673406200245100ustar00rootroot00000000000000/* * dynamics_processor.cpp - dynamics_processor effect-plugin * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "dynamics_processor.h" #include "lmms_math.h" #include "interpolation.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT dynamicsprocessor_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Dynamics Processor", QT_TRANSLATE_NOOP( "pluginBrowser", "plugin for processing dynamics in a flexible way" ), "Vesa Kivimäki ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } const float DYN_NOISE_FLOOR = 0.00001f; // -100dBV noise floor const double DNF_LOG = 5.0; dynProcEffect::dynProcEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &dynamicsprocessor_plugin_descriptor, _parent, _key ), m_dpControls( this ) { m_currentPeak[0] = m_currentPeak[1] = DYN_NOISE_FLOOR; m_rms[0] = new RmsHelper( 64 * engine::mixer()->processingSampleRate() / 44100 ); m_rms[1] = new RmsHelper( 64 * engine::mixer()->processingSampleRate() / 44100 ); calcAttack(); calcRelease(); } dynProcEffect::~dynProcEffect() { delete m_rms[0]; delete m_rms[1]; } inline void dynProcEffect::calcAttack() { m_attCoeff = exp10( ( DNF_LOG / ( m_dpControls.m_attackModel.value() * 0.001 ) ) / engine::mixer()->processingSampleRate() ); } inline void dynProcEffect::calcRelease() { m_relCoeff = exp10( ( -DNF_LOG / ( m_dpControls.m_releaseModel.value() * 0.001 ) ) / engine::mixer()->processingSampleRate() ); } bool dynProcEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { if( !isEnabled() || !isRunning () ) { //apparently we can't keep running after the decay value runs out so we'll just set the peaks to zero m_currentPeak[0] = m_currentPeak[1] = DYN_NOISE_FLOOR; return( false ); } //qDebug( "%f %f", m_currentPeak[0], m_currentPeak[1] ); // variables for effect int i = 0; float sm_peak[2] = { 0.0f, 0.0f }; float gain; double out_sum = 0.0; const float d = dryLevel(); const float w = wetLevel(); const int stereoMode = m_dpControls.m_stereomodeModel.value(); const float inputGain = m_dpControls.m_inputModel.value(); const float outputGain = m_dpControls.m_outputModel.value(); const float * samples = m_dpControls.m_wavegraphModel.samples(); // debug code // qDebug( "peaks %f %f", m_currentPeak[0], m_currentPeak[1] ); if( m_needsUpdate ) { m_rms[0]->setSize( 64 * engine::mixer()->processingSampleRate() / 44100 ); m_rms[1]->setSize( 64 * engine::mixer()->processingSampleRate() / 44100 ); calcAttack(); calcRelease(); m_needsUpdate = false; } else { if( m_dpControls.m_attackModel.isValueChanged() ) { calcAttack(); } if( m_dpControls.m_releaseModel.isValueChanged() ) { calcRelease(); } } for( fpp_t f = 0; f < _frames; ++f ) { double s[2] = { _buf[f][0], _buf[f][1] }; // apply input gain s[0] *= inputGain; s[1] *= inputGain; // update peak values for ( i=0; i <= 1; i++ ) { const double t = m_rms[i]->update( s[i] ); if( t > m_currentPeak[i] ) { m_currentPeak[i] = qMin( m_currentPeak[i] * m_attCoeff, t ); } else if( t < m_currentPeak[i] ) { m_currentPeak[i] = qMax( m_currentPeak[i] * m_relCoeff, t ); } m_currentPeak[i] = qBound( DYN_NOISE_FLOOR, m_currentPeak[i], 10.0f ); } // account for stereo mode switch( stereoMode ) { case dynProcControls::SM_Maximum: { sm_peak[0] = sm_peak[1] = qMax( m_currentPeak[0], m_currentPeak[1] ); break; } case dynProcControls::SM_Average: { sm_peak[0] = sm_peak[1] = ( m_currentPeak[0] + m_currentPeak[1] ) * 0.5; break; } case dynProcControls::SM_Unlinked: { sm_peak[0] = m_currentPeak[0]; sm_peak[1] = m_currentPeak[1]; break; } } // start effect for ( i=0; i <= 1; i++ ) { const int lookup = static_cast( sm_peak[i] * 200.0f ); const float frac = fraction( sm_peak[i] * 200.0f ); if( sm_peak[i] > DYN_NOISE_FLOOR ) { if ( lookup < 1 ) { gain = frac * samples[0]; } else if ( lookup < 200 ) { gain = linearInterpolate( samples[ lookup - 1 ], samples[ lookup ], frac ); } else { gain = samples[199]; }; s[i] *= gain; s[i] /= sm_peak[i]; } } // apply output gain s[0] *= outputGain; s[1] *= outputGain; out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; // mix wet/dry signals _buf[f][0] = d * _buf[f][0] + w * s[0]; _buf[f][1] = d * _buf[f][1] + w * s[1]; } checkGate( out_sum / _frames ); return( isRunning() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return( new dynProcEffect( _parent, static_cast( _data ) ) ); } } lmms-1.1.3/plugins/dynamics_processor/dynamics_processor.h000066400000000000000000000033221247673406200241450ustar00rootroot00000000000000/* * dynamics_processor.h - dynamics_processor effect-plugin * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DYNPROC_H #define DYNPROC_H #include "Effect.h" #include "dynamics_processor_controls.h" #include "RmsHelper.h" class dynProcEffect : public Effect { public: dynProcEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~dynProcEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return( &m_dpControls ); } private: void calcAttack(); void calcRelease(); dynProcControls m_dpControls; // this member array is needed for peak detection float m_currentPeak[2]; double m_attCoeff; double m_relCoeff; bool m_needsUpdate; RmsHelper * m_rms [2]; friend class dynProcControls; } ; #endif lmms-1.1.3/plugins/dynamics_processor/dynamics_processor_control_dialog.cpp000066400000000000000000000150741247673406200275660ustar00rootroot00000000000000/* * dynamics_processor_control_dialog.cpp - control-dialog for dynamics_processor-effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "dynamics_processor_control_dialog.h" #include "dynamics_processor_controls.h" #include "embed.h" #include "graph.h" #include "pixmap_button.h" #include "tooltip.h" #include "led_checkbox.h" dynProcControlDialog::dynProcControlDialog( dynProcControls * _controls ) : EffectControlDialog( _controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); setFixedSize( 224, 340 ); graph * waveGraph = new graph( this, graph::LinearNonCyclicStyle, 204, 205 ); waveGraph -> move( 10, 32 ); waveGraph -> setModel( &_controls -> m_wavegraphModel ); waveGraph -> setAutoFillBackground( true ); pal = QPalette(); pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap("wavegraph") ); waveGraph->setPalette( pal ); waveGraph->setGraphColor( QColor( 170, 255, 255 ) ); waveGraph -> setMaximumSize( 204, 205 ); knob * inputKnob = new knob( knobBright_26, this); inputKnob -> setVolumeKnob( true ); inputKnob -> setVolumeRatio( 1.0 ); inputKnob -> move( 14, 251 ); inputKnob->setModel( &_controls->m_inputModel ); inputKnob->setLabel( tr( "INPUT" ) ); inputKnob->setHintText( tr( "Input gain:" ) + " ", "" ); knob * outputKnob = new knob( knobBright_26, this ); outputKnob -> setVolumeKnob( true ); outputKnob -> setVolumeRatio( 1.0 ); outputKnob -> move( 54, 251 ); outputKnob->setModel( &_controls->m_outputModel ); outputKnob->setLabel( tr( "OUTPUT" ) ); outputKnob->setHintText( tr( "Output gain:" ) + " ", "" ); knob * attackKnob = new knob( knobBright_26, this); attackKnob -> move( 11, 291 ); attackKnob->setModel( &_controls->m_attackModel ); attackKnob->setLabel( tr( "ATTACK" ) ); attackKnob->setHintText( tr( "Peak attack time:" ) + " ", "ms" ); knob * releaseKnob = new knob( knobBright_26, this ); releaseKnob -> move( 52, 291 ); releaseKnob->setModel( &_controls->m_releaseModel ); releaseKnob->setLabel( tr( "RELEASE" ) ); releaseKnob->setHintText( tr( "Peak release time:" ) + " ", "ms" ); //waveform control buttons pixmapButton * resetButton = new pixmapButton( this, tr("Reset waveform") ); resetButton -> move( 164, 251 ); resetButton -> resize( 12, 48 ); resetButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "reset_active" ) ); resetButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "reset_inactive" ) ); toolTip::add( resetButton, tr( "Click here to reset the wavegraph back to default" ) ); pixmapButton * smoothButton = new pixmapButton( this, tr("Smooth waveform") ); smoothButton -> move( 164, 267 ); smoothButton -> resize( 12, 48 ); smoothButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_active" ) ); smoothButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_inactive" ) ); toolTip::add( smoothButton, tr( "Click here to apply smoothing to wavegraph" ) ); pixmapButton * addOneButton = new pixmapButton( this, tr("Increase wavegraph amplitude by 1dB") ); addOneButton -> move( 133, 251 ); addOneButton -> resize( 12, 29 ); addOneButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "add1_active" ) ); addOneButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "add1_inactive" ) ); toolTip::add( addOneButton, tr( "Click here to increase wavegraph amplitude by 1dB" ) ); pixmapButton * subOneButton = new pixmapButton( this, tr("Decrease wavegraph amplitude by 1dB") ); subOneButton -> move( 133, 267 ); subOneButton -> resize( 12, 29 ); subOneButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sub1_active" ) ); subOneButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sub1_inactive" ) ); toolTip::add( subOneButton, tr( "Click here to decrease wavegraph amplitude by 1dB" ) ); //stereomode switches pixmapButton * smMaxButton = new pixmapButton( this, tr( "Stereomode Maximum" ) ); smMaxButton -> move( 165, 290 ); smMaxButton -> resize( 48, 13 ); smMaxButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "max_active" ) ); smMaxButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "max_inactive" ) ); toolTip::add( smMaxButton, tr( "Process based on the maximum of both stereo channels" ) ); pixmapButton * smAvgButton = new pixmapButton( this, tr( "Stereomode Average" ) ); smAvgButton -> move( 165, 290 + 13 ); smAvgButton -> resize( 48, 13 ); smAvgButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "avg_active" ) ); smAvgButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "avg_inactive" ) ); toolTip::add( smAvgButton, tr( "Process based on the average of both stereo channels" ) ); pixmapButton * smUnlButton = new pixmapButton( this, tr( "Stereomode Unlinked" ) ); smUnlButton -> move( 165, 290 + (13*2) ); smUnlButton -> resize( 48, 13 ); smUnlButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "unl_active" ) ); smUnlButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "unl_inactive" ) ); toolTip::add( smUnlButton, tr( "Process each stereo channel independently" ) ); automatableButtonGroup * smGroup = new automatableButtonGroup( this ); smGroup -> addButton( smMaxButton ); smGroup -> addButton( smAvgButton ); smGroup -> addButton( smUnlButton ); smGroup -> setModel( &_controls -> m_stereomodeModel ); connect( resetButton, SIGNAL (clicked () ), _controls, SLOT ( resetClicked() ) ); connect( smoothButton, SIGNAL (clicked () ), _controls, SLOT ( smoothClicked() ) ); connect( addOneButton, SIGNAL( clicked() ), _controls, SLOT( addOneClicked() ) ); connect( subOneButton, SIGNAL( clicked() ), _controls, SLOT( subOneClicked() ) ); } #include "moc_dynamics_processor_control_dialog.cxx" lmms-1.1.3/plugins/dynamics_processor/dynamics_processor_control_dialog.h000066400000000000000000000025151247673406200272270ustar00rootroot00000000000000/* * dynamics_processor_control_dialog.h - control-dialog for dynamics_processor-effect * * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DYNPROC_CONTROL_DIALOG_H #define DYNPROC_CONTROL_DIALOG_H #include "EffectControlDialog.h" class dynProcControls; class dynProcControlDialog : public EffectControlDialog { Q_OBJECT public: dynProcControlDialog( dynProcControls * _controls ); virtual ~dynProcControlDialog() { } private: } ; #endif lmms-1.1.3/plugins/dynamics_processor/dynamics_processor_controls.cpp000066400000000000000000000101551247673406200264250ustar00rootroot00000000000000/* * dynamics_processor_controls.cpp - controls for dynamics_processor-effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "dynamics_processor_controls.h" #include "dynamics_processor.h" #include "base64.h" #include "graph.h" #include "engine.h" #include "song.h" #define onedB 1.1220184543019633f dynProcControls::dynProcControls( dynProcEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_inputModel( 1.0f, 0.0f, 5.0f, 0.01f, this, tr( "Input gain" ) ), m_outputModel( 1.0f, 0.0f, 5.0f, 0.01f, this, tr( "Output gain" ) ), m_attackModel( 10.0f, 1.0f, 500.0f, 1.0f, this, tr( "Attack time" ) ), m_releaseModel( 100.0f, 1.0f, 500.0f, 1.0f, this, tr( "Release time" ) ), m_wavegraphModel( 0.0f, 1.0f, 200, this ), m_stereomodeModel( 0, 0, 2, this, tr( "Stereo mode" ) ) { connect( &m_wavegraphModel, SIGNAL( samplesChanged( int, int ) ), this, SLOT( samplesChanged( int, int ) ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( sampleRateChanged() ) ); setDefaultShape(); } void dynProcControls::sampleRateChanged() { m_effect->m_needsUpdate = true; } void dynProcControls::samplesChanged( int _begin, int _end) { engine::getSong()->setModified(); } void dynProcControls::loadSettings( const QDomElement & _this ) { //load knobs, stereomode m_inputModel.loadSettings( _this, "inputGain" ); m_outputModel.loadSettings( _this, "outputGain" ); m_attackModel.loadSettings( _this, "attack" ); m_releaseModel.loadSettings( _this, "release" ); m_stereomodeModel.loadSettings( _this, "stereoMode" ); //load waveshape int size = 0; char * dst = 0; base64::decode( _this.attribute( "waveShape"), &dst, &size ); m_wavegraphModel.setSamples( (float*) dst ); delete[] dst; } void dynProcControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { //save input, output knobs m_inputModel.saveSettings( _doc, _this, "inputGain" ); m_outputModel.saveSettings( _doc, _this, "outputGain" ); m_attackModel.saveSettings( _doc, _this, "attack" ); m_releaseModel.saveSettings( _doc, _this, "release" ); m_stereomodeModel.saveSettings( _doc, _this, "stereoMode" ); //save waveshape QString sampleString; base64::encode( (const char *)m_wavegraphModel.samples(), m_wavegraphModel.length() * sizeof(float), sampleString ); _this.setAttribute( "waveShape", sampleString ); } void dynProcControls::setDefaultShape() { float shp [200] = { }; for ( int i = 0; i<200; i++) { shp[i] = ((float)i + 1.0f) / 200.0f; } m_wavegraphModel.setLength( 200 ); m_wavegraphModel.setSamples( (float*)&shp ); } void dynProcControls::resetClicked() { setDefaultShape(); engine::getSong()->setModified(); } void dynProcControls::smoothClicked() { m_wavegraphModel.smoothNonCyclic(); engine::getSong()->setModified(); } void dynProcControls::addOneClicked() { for( int i=0; i<200; i++ ) { m_wavegraphModel.setSampleAt( i, qBound( 0.0f, m_wavegraphModel.samples()[i] * onedB, 1.0f ) ); } engine::getSong()->setModified(); } void dynProcControls::subOneClicked() { for( int i=0; i<200; i++ ) { m_wavegraphModel.setSampleAt( i, qBound( 0.0f, m_wavegraphModel.samples()[i] / onedB, 1.0f ) ); } engine::getSong()->setModified(); } #include "moc_dynamics_processor_controls.cxx" lmms-1.1.3/plugins/dynamics_processor/dynamics_processor_controls.h000066400000000000000000000043661247673406200261010ustar00rootroot00000000000000/* * dynamics_processor_controls.h - controls for dynamics_processor-effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef DYNPROC_CONTROLS_H #define DYNPROC_CONTROLS_H #include "EffectControls.h" #include "dynamics_processor_control_dialog.h" #include "knob.h" #include "graph.h" class dynProcEffect; class dynProcControls : public EffectControls { Q_OBJECT public: enum StereoModes { SM_Maximum, SM_Average, SM_Unlinked, NumStereoModes }; dynProcControls( dynProcEffect * _eff ); virtual ~dynProcControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return( "dynamicsprocessor_controls" ); } virtual void setDefaultShape(); virtual int controlCount() { return( 6 ); } virtual EffectControlDialog * createView() { return( new dynProcControlDialog( this ) ); } private slots: void samplesChanged( int, int ); void sampleRateChanged(); void resetClicked(); void smoothClicked(); void addOneClicked(); void subOneClicked(); private: dynProcEffect * m_effect; FloatModel m_inputModel; FloatModel m_outputModel; FloatModel m_attackModel; FloatModel m_releaseModel; graphModel m_wavegraphModel; IntModel m_stereomodeModel; friend class dynProcControlDialog; friend class dynProcEffect; } ; #endif lmms-1.1.3/plugins/dynamics_processor/logo.png000066400000000000000000000062311247673406200215360ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/dynamics_processor/max_active.png000066400000000000000000000027051247673406200227200ustar00rootroot00000000000000PNG  IHDR0  pHYs  tIME$tEXtCommentCreated with GIMPW?IDATHmMh]Usνyԏ46/1m*tƺJ(Z*n \t4. C[VŴMbQM[$ɻ#]\afg|=qקю((6k脴 H 'FN.e]T5&g֭[8.K2F'hE99S":`L=-@ZL$9Yk 6mD|rVVb|*>$$3Nʑ#dy2<]ѹss926rdjk9p$oE&wOcNf9^$ϓxe>&Ι3$255$7lӧIe?<!añ1T u]8(h&J&EHӸ4ͽ˴K"I&;{5248ȯCC(ZRhh)pIT~R8Z$5q@H~6Z^ ֚E6דHѮKCk++884uwJke]ѣ9|9yL3}bcLUdtt?~wIf2Ө.D>3NFY+3ECFS6c}?6n+G1kr\ٳ6VM@yc0fX௮"`R1,xzpW:h XGnT`RhRJ߱,t:e@>>>%Lvh 6| fr9 JLӤtQ pHYs  tIME tEXtCommentCreated with GIMPW-IDATHՖoG?owvY$iL#RUJJI9P߃9p ĝRĕ0HTP!`ca$ UWڝy}}gdiixpcÐFj}Ifgm &lDP4` kfdsQ{^nMDqďϣl2;2|VwGQLj0}VWWfkzǏ7Y"+++%?z/MMѻ}FӧC z`U, GiC8Izsϡ*y(9ɠ` "W"w2ժG-;;\ZƓ?Y[[<7c0 ݢ햁c17azm\E֚Ja{7<\Kɜc4h67+nX^+&+/8h= Z8d ոE) Ð-333\|۶ [wKM*N;wp)iZApwkvZ-'JpdJ RܸqgϞּ}8(1y_.ߧﳾN\r,4e0`6Q!e!".~IY iE1QG1Z(x!vh珔kSZKKK,,,͹s?oKJ6|8Ja+8eeaYZk$AOF#D0 0 8>gc]zׯ_S$IlFqT(2TKV.ZTǨhp0Ķm0$"$%5INF`CD{(w^D^NWV!lfu'(}acEԲ,lelW.q#.]2gΜ9;K`\rA9ܬdBisu$Ʉ{"2% b Cx/N~j6,,,i#kǙ8 o"fIENDB`lmms-1.1.3/plugins/dynamics_processor/reset_inactive.png000066400000000000000000000022431247673406200236010ustar00rootroot00000000000000PNG  IHDR0 $>Q pHYs  tIME ;؁ntEXtCommentCreated with GIMPWIDATHՕkWsgn!.nЂZA(]lPEn.tcgl7@ *v!h!M 4H:3w>μ.#n۳ygy<9qe9IG}r[0=}NgU%G|~ vSSt]vskkkܺu pWxSSS m߽x ۶m`r[D;>#A֒+ZF)bf"AWpd211QT"Y/W86~ϯwpxtk-〠(È麗,E^""W%18FfI5qT t]Z-<8 *^0^06IIABSV hM\Z8Q pHYs  tIME ! xtEXtCommentCreated with GIMPWIDATHՖkg?;LfFjՄ&q#nIp")'C?ē"OBG4Ҁ,4)xݍm'oY =̏}<#}ֈe!c9:U9>m1}K0bcnFǐ<́o)Iɧ a"ccXB0ju~|g!?g֭||gϞ~\5=cx lnpR|^=AwIܹsg8NЮ+r9s666X]]˗,..)TU|gddu&VF1e@C^Dz,,CZ,".mcYp>8ƍڑTEt(Ȳ^ϰ,r VVVT*4[-ӧvfsx9#l7A@A/6͛AaX!88$IBZeumD8y1^B@@kM$c1$IB&2:.r5.^rn~ɓt:N&InSt ÐVz*MSTf7Ŷm8&I**Q pHYs  tIME - 4?tEXtCommentCreated with GIMPWIDATHՔoTGs3`C*l 66MU@i0B i(XH+R`de;>>'ŽAr3\QtqI4T*aEqDբwHu ߛMBn+y=a!B:˲|leX(icK4QJRPE,˲R)ZkΝ;ǭ۷88t FF1 )%bscm۶188yI^;2Y]]Ŵ >|@wY[[òlS!?߽ۍ fR e&RJ]ǏgddE=~ ֚!eϞ=,,,!V u1 5Il6>W4 &;)JJ%vM!tZ!qQcΝDQD__oko Ð X^^fǎx884 zFqp] $I>-$!<#Ib(ǘ]_RFAAaR8q=q05h@5ua}m ۲0, <Ғ~f,"%#@dOyUFh4}4QN.GV_ֺK0Kslz2ׯ)W3 BsY-Z:AY_@D7ٖgI IRX__GJIGˢ& C\G4$(IENDB`lmms-1.1.3/plugins/dynamics_processor/sub1_active.png000066400000000000000000000016371247673406200230100ustar00rootroot00000000000000PNG  IHDR 1bKGD pHYs  tIME ,tEXtCommentCreated with GIMPWIDAT8˵KOGU]=tGdG%dBrVذ-wϱ" ?CX 6(ók_EόaEzQUݺss,--0 1 "_s$Ih4-~]E)7rG1& C&Dz)˃534ŋz3xJ#.4G^ Pogk~{'y<~|߁8,(l+ Q!Zc-@Jxs{wT"N RDS!a38cx/QV<5AcбPN t]*ʘ^=: LV"1_hc A`LQs<GGG#njloo#" ޽4Mzt: ΊSìP,,,eycjB䄍 $azz頔cZ"(z82M$!It]k-1ژ~KEQ9yL9Ϊ2 IRUX]]((4MIӔ]R8 vۭӧ+s*%Ź/@tH2R.Z(@Vcjj ( RJ WwFAh4ܻ 3ͰI3FSqzv*Zkjc1(rOXXX@b F#T𐕕2 B(X__'4߼|z,&ZD ֆ>!H"XkNp#2seA2fghZXkSŚ-v:X[} HJRu`8D]nϳnqttp8{O1c k-9G ]T#,="LOOB,Kʲ䗟B!wPIp#(B""B1MHb"8¢Ѕ\"JIruq3I͹3|x\pSS(Q"\Z_eDcE2 @!hĶDٓHވ&*6355_LrZleYJ0B"1c D J- &:dLrDK)*ŶT*5ITR '#ˑaprll֑ih $](s9l;%(B|v-%|78H:BL>Γ'P,*螘884Ļͤ ~GJ%%XT5PJ%W ۲Ж8(N@kvtuxʶёmTTܿ'dJaR- 5auk+&T&e=V.[(1oҳclo`* 4&$؆ZJ~'yZ#(5q'bgi۳'27zz}AAȦU\c#z1 'jiA_dKaf^$W($T +&U<}/ a6}ࣖ/US :\kVB3x_>ZoS "Be~~ҙ3`|L>ad`{Q T0S~?с<2Ktχ7p]:\UMMׇTBkq?}vl u'p2֫bLC' Ӹފ1ATM1xxau/͡IT nC\PsgD,yatMM<{:<bZ #HHYYr^$Unr% 8ÿ0d҇>IENDB`lmms-1.1.3/plugins/dynamics_processor/unl_inactive.png000066400000000000000000000015261247673406200232600ustar00rootroot00000000000000PNG  IHDR0  pHYs  tIMEJtEXtCommentCreated with GIMPWIDATHŕMKP4)B5~uGj6(1'w??ŭ `Q(*$69w!=M˽܁C8'3̼3srpp q~%!Wӧ.//OOLRH?766fpp0u\[[CARlVVVX]]M7 Iױm۶,Dyy۶1MUU%Z(ғx( aptt+|;S$,!Bf\__( aRVSi ~VL&m 1<<P\<J)4$6H% ]fq@:gggͥ5MhۉXeYѓv--g ar{{?YbfXIENDB`lmms-1.1.3/plugins/dynamics_processor/wavegraph.png000066400000000000000000001175731247673406200225760ustar00rootroot00000000000000PNG  IHDR~W pHYs  tIME($m; IDATxYǒ%v̿/23="X, Hz?f^֙_iPXuX`u h`|6l\~4_V9‡Tk~}X~ܯnZ||7A__7qZlu-ܯ|[fSq즩r„vX\ǫ(9vܭn{H|9;>زw=l/[f:vkMN>&ğgZonfLn>dm Vz ,E~}KS3 `j:v d|nY/NN EgCg]xSnYfmm_X>y}[~1,gx]F߬渿[އڱ&n@pYd?]_ D%@/?AW Ȣ3ji?)*mrEﰝtV9;L7i)zCrM,8^\GzBi.={S=Cki_/@8dwjǟ@6 UzSdɇy!)[L'WplPO,El.(qYmE\LE;qehqum/HYğqYBE' ٜwsdÐ=g cr@O|4n.q*kN}MP l@ 2}*J{uSf _<-Q fVoڍ!C2\"\GM:}CRH26Pʬ0'>ǟR5}F;U :ջ}(ݱ&G V PO>G"Fn[ $ʅ$ݻO7Dfol6C+ܛ!4c(~־03EJk:[Ðcin\Bd09ONQԡj6aOԻ=s~CZq0"<{aò<4'iӃ*]EܑAT]=f7 's"N1;=b "+a ) ]&(ho=W9EV>/?tP=D+ ~pCPƼVp j{-wT_,DHr$]*؉F\QM|BrzۄR_E%&bߜnyWEe~T~yw:"Vъ*jذ?wvzV,:dzM ,kÈ|HnR%6qg٢(qo2>=f~sdf~I$*ǫ}R~"ւ7V`_ TF"V_?e ATHi(lg~B?hC$C +vKT 1x%.>~LB&O2G[HYV$B/_{Ƙ VJGDe[klS.rLF/_|ٟ_~ LQ!zB5G|=Xt n _'c|;%e*0[\ v}lW4iuq7凰絿ʽ:foy}z|zᄤc=b'PP֛<| )Xd=L6?{ַЦD C痲Co-A_tr$,i;Cf7&sݚ]6'/b:yxӏ=?Df\pm ʽ |̄g .3 ~msh?St Lk-hat__ݮy^:ѡFkbf“2o/dGU)m}x/)$7TytE$&>'!0vdsT^ 裵 Z>tgHht^ .h,?T`0x#(SGQ8K1v63~a~&Y/ɶ:}_BU#|.gUa4qqVOV< ֋4grFU[a*V+ OQb34w<;"9Ei% 3(er5YHU̝XuK 6{xUVtZ,7s1  4:EA?$ǯH˓$ҟѱuG̎=+Q Mzy˷<ۓ*D3ț@^Fo7>O>YjF1հfo]=750U'sHW#:1Xk0( )?XؤSq6Ie<2DjC̉(㷡 ia Cv[cױMSi5=ӿ Yv! gty8$$mDKo0d^<)[uLoEEʢ" izID!Q{y8qE㔭zy$,.$rPآz>iTEaCŴLOMuN;+JRʩZXσٜ$9< ވd |/lB@of"%Uzdc¸3bO-, !is"l}TGOhq@>sݮ9>7zݐKDbr U.M%jb 'HYTNKlսH&d9-T@؀at84tw4<Uk=>ΎOj{-u?Zⴖ<-aU_( ˓)!yX.!>S[Vؚ9=C9dKa(YD\R+P?Hn/ΰq \53`:e \KzTZ~"atFTAyFK >91yP]3dBy׷;.-^ٗ/׿nh !4Nd)_aT%S^KfʘDf0Qu T}*RF\ۛq{͇wl4=°)UC]Rz7=s>kZ%0~Tz>6hLm{{>?l(0HCøuk@MNdqAOqaL,7B76umXRŋ/qvdT;byz3*al(zsikUb v*2y4.-Bl^#Tp 5|>Tr1V9;g 8c_\M VE*~V1R2Bb @E|yZy͋T@3އ%>߭1Vi,!`12LJeLSZқ84@%Z.i?/>)a`^/q/3#DжP1t&P{];ek}x'H@S1 p^D~?_QK8$y1}'Q,|L}4*ֲŋ89 :*6܀=_}0+TRmYd(#muvi-_>o'~P۫s=w={>VWvQ|i+Vit/`ja5;h/`u{MxIauseE;rv0Zӷ?7'oU("1x~7ܜɢW6*X^rSX xnirhg+>|"Vrn,7O1;ɐ끪{|49Le{6u, b0%8)եA~1R8[`Ay0dk0F34=ӯ(0&Ge S\},|=|Pq[( Y^;ݔޭf:puRkXlnq,Ѽï(LT*W }^]T,}ݞn1,r,zF?:VTXzs_rJNOvh"ɇa2|U2v ^R L )*9s:91V+]o0 OʽFi|go6ؽz1N21jPi~ZfU qY~L0,Dioc]}#d̸=S"d|4/#Kboa݇G j&)@ٓy1d)LBa+ՈyQbu{}~:NK, QӰ1a8,Pp]jnv&ًxOۄu[XcZ[KC29ǃ8+iĸt {cT)%dCU%[dzgGNC CP~Xy@*#$͘zVoJ3\2"Ep(:)&|Sm/D@{86תL$:Tq+[g֋a+hV+AŋW8=:کcgn /$,'JPx'= PlFyoCU~++rrG ڗ<+%0C[K_"̩?1d ) -x5gY*WbG+1WXͯl^lN|~SƸ:cOϢGQuQbusNQmffðWxˏO+f9T:[ay,~VnEr.\fqΞ$e~UX;ȐSisw<-X/f5]:Ѧ˯wЏ-NꍀǴҗoX{0bN \kLLkraa yq5[{0:E|CHGj`U$aZ)zS\|Sr5 :*u< 'Yz6G B]rf~,2PNT3U2[ -|J)Ie3ժ v_헎r3sbef~Ŝjc;Xn}?KXX]NrN{r̘tӧ ^m[ NǢ, "CVՖOVu){}|G7B*Ub4_~½m+ ʉl=g$!XwZU) lz pX<6 Rۂ@Pr"9዗x{FUEڭh6E!vw("+ yVd9c)ejC髯pmxbF\ٳEcSd {:сrQ1}~cy·qb(+ni<'GG|-֓\bp5[u:b*?a-7`3vq쵌{:me o|3az+uzXlgk;$.~gڐ3Uƍ5̵X^2dෆ/!j~0E@gͅ8&P~;N~)Y?6:c,oβ0U5z#,gg )Lx:~)N\g'#j~Kg7VTW'iw2VK)Ne40J"O;.%ӯAw7IʀnAvUwʒ .,h " l c27ֺ:nnK{4n%ao`3u=$| !+&19Gx;ڃ|Љ3}B:u|qPv>|LJtɅCSYh~WN[Q9o-NEYPS0Q%UX7,XQ{+,\( (ݜ4hPo{fU{捔T\p' }hPֿXkt#р?tF#)$G9|(":#Zk|N,kuӯjiz apwloa=tnm0 ~qI$tcKUJX"7׮2BgGJ0[cQ7^C#&y T2ERm%TD~e[b@fFGt$b$pyrJ혻|Qְ`m`u2Àk",;vq|]l_෪Z_zw:Q )tD`2M۠e?L:&Ǝ`02a>$]z) FM HOKdtD:bXŦ;-"ƀib=wH>+cè Z~m[4?!bהdi G온/="Wڨt;PCǕ7`t̂(p+م"4*fjvo |Q`/xI*ild0|QۦTqP**JApZm?ܫ_G[x333oε6Ԏ=lՐ<,S5f{& IDAT5,iJ)WYwO2id0`0WE0 UE5Lk 5ngBGH/Oesv19 嫯/?zVrH ?;SQ $jUUalcPH3Xђ6̭Fw`|J|hq?hbMzLsRttkPlcUV&r8_ 39K{4a!$p5T̡jhlDȪ+Td ?maZCwc_ QIBwp@Rcq{̲,TIUͩ֩mv3Ma*璥?4eb}[Ēw,N&rY kd"&|hF[?`b[q3njnt# v{/~-ǥ#3r=q׭\g8'6/^ѧC춻س#%tq?x D85Thl3îozap3H<fW~noɜU0[ߏ~QJWgg,&QZgɼ6̅OjU@DO5]bĦf>,τah|D2*kXDP:rKT8(] Ȫ*O*c}s8 /^?ݧ Μ|~U 0M4yqZem)`ڗU-bcl;$3jf~*5w/s#Eh ~2찓`7`E1 WT,JqzڰJ 7[=o:;qde{bW:f︥G)oz;9<39QdW`7ex LJGP; u_gQL{?xE9T 7Wr^<*][0/ey4qb {h7Wbѿ|#6밠e#;`x΄X#* "m:Cm?ˉ#1J[%*./S\i-qAG-˻ωzOyПNq}!YqyVrXQ?3udAyJw8b ~ET;Éۃ<S-^=>2uDJ"DәX 9#9{U@ľ8{N^hj{7qJܼFga|lum'up}1&l@a%`l'eĵb Ȕ*C)T'OGPY)Wgy Tf>nc .xy[_'_4EQb5?aoFd|8b|% fk%KT\{f,:(Ng\Pg-}* Z'9Q!o1sa(0MSRVo[2 :ԭFLU)U,oQn4 Wp}!rU|;KʗYIx*0, %i";\p`t-.Zh:;sA%^Kw4 ]7 d[B"mW`gW8tSGG֗ALmv?x ȎIa15;_cLa0Jyv/UGL WG,qPiʟa noBEl)C7$) (wY΢_x(_0Ut8h0X^I|]jus N43:~ CմTһU/2Kٕ8%fTvL1ƣ!gm6LL,VV_׊Z/K]dcM&P:f\(Vbצ:VPa ǐeUY ө"pg$Td)e^א]$z nVhŎ#y2]]OSxߎJJO}g1M#,}',y|ђS`JBRk/ 6wk@X𦵽N}oH|W&˙xIQ-6t̞ڷ_}vON1-[X#mfp~m_'!n\TW҃o_9P(_6' bL^P4 W Y4ȋW{,"@|`_SԂ҄`INIkFޟ`~uj}%%/9 d8g ea}~o9ey AZ*EFM %auAcZiN!nHJZ QR=\ַǷz}G4Ӈ$g {0v"Cwt(#;)I=,wr]JK 5O̔bZpjyY %-9q ,]N%:~U^ G41`22?InX=d"F^nuӧ0v~?%%fDL{AYDdqx+Eiw~.Ia=^u&tR bW'gY҅S*)1ϋW YT^jXpu? "D:6)yS䃔SK>qHaW)>a1Nܛ,roREJס0 !T5aY/scU\iov{ 7bBz~s-5#0tIz{ {`:a7*M70|? é;B;7V;~"MrCGv{cӿ"*{c||$鸼7g~B.__'N{e)߳~pWT_O Tшe  T-Wr JY0wOR,,eQW/u^KClUlш(2}G3Sl}urjs$_I3Yj6UHҾ)IP8BU rD0'X3F n#pHA(o%EgTݪ^%,'Xͮ@*~5~idAhtnkC!L2 7 qIO!ӂ 9Nt|ֱ,\osF5bHx7}0j<Y%!餀M9^;07hi0}_ob_e:E^~>zm<4^EPhY4ZǼ8F^G.abA" DJ}>0CZLzs+-{\J,Q901,6c\Iu,!" TYb~Ն)Va-j!3OZ|,w\48?:1&Nˊ* ?M5՜fğʼ]jǬ@12^} ~7Q*Nd[C$0:$78AY[*eDNÓŷ 8?S0Fbat |qG`($ż {{:dM2,cհ3\}b8x[gLO ;Ҍxw#Ƹǣ$Wf&q(5ȳzPg * yTBg<9(Q%ǫ_!hz@{`aiZ`Ș rtF?OGl@ ڂ0CVėZ0FbM%'A)v+ Gbv6:91YB ?,s> Y/a"(jaJBzٿc9L[Cjv=-7W&W ) ʉ#%g9__pS"BJn1O X* Jܩ1~*A";iI ,GNńPU|YV^ek{kb;ru eC-7/(pbVDcvF|MF/F?iR'Ǧɛ<+|נOE֕X="s$$npcrc"~5>bLCa<ּ̈́*]mGKc q#0y*,"w7f*h#]Y(Ds29bvh&Mi 4~iYJ.Qھ뫈4rQb59 h7oˏ?`^q:.#q_&ĥ Tsc"aTLs^rʾJV@0'oU٩]DZEDO Sk0At ?;)CN,1dQcx-db>z}aS;$ pv&EC>Ta\^d8, Z7+{AOPuwKA^~ p1s/=>Qqi??hcUGQtс"6K"S}X̣z.nRֽ"\F}CYEREddy{!e#2KBJ~,3)@d&PFw&20nzϩUMvo <萳8sg8|9$"xbcJ-w^0B<9 -Gƥj1#qq_WȌbK;XSzykU2{to HѢEf($P(MG#Iq<֛TVֲ]_L# NYe0[[or ~zGs9 Z:",S@U PafrDE^ˁFo^0v_Y<O}v<˳o\x=]9X eAEzX2aKTw@E:V x5kHY@*'OK8朑^OX7*L 0kUN 1)D9ZďY>Ehe@Z{?f~13&v`ss|o=3߳=*#u1B"r#K%6N~y|74jX7t+g様s7{yc~yZFqZ??%)O>)'*׃՛7qq>=+UMO?Z.b~FVDc5ؿ;#f=&_[ao viH{M$6hv;cGatQd_*DvcxDg8XĨЩOe">|Q93Z'dg4es3% UPɘU}k2U?@WR՛F-~>aEhQ0}_:5{<UGdX*[NifYY%6VQLKo,0M~,TLiM|63ڋkfj]\8(翧6+jXC,[Ey/f2gxc~}Jm. *0bkQ`u}*o?z=ν?vgaf2,Yl96dAemJ\F*~.|gEnr02nPAބ)CgSBF(A^6ad%āleuH+uqy*h2S VD`1_e&׉|5wһ]OLW'>ǿ IlAr<=3czDh|NZ80L,Z6fŒRW?0ag+P}+&?Y%S[ƆWe [P4b0Neۨd LʏXG!&U1{;&ѷGy #^28 z >OGX^_IJX-\nŵ%s7?z+6.F IDAT c”affӫbL096oBl,>SU/eizE&C#,N7tcNI0UF+üf`=TĭMe.Q`x L Vq8D'Wq>fi}ղ1,ПZbƉM>Eȕ_[y;b_,ߟX{w4rO>A6ةu}p'hhm!SfЂ_OpG&aX4XN]0OdxuR6a"# #U"5'nBvƆ]ՂRѴbZO]^H+!se*w]ȐҾ*jߜ_0͆V%XeD"9;~yF{RWFmD%f*W~_~W7kT0m1xV~ ##Th!zUW֋l #x2!rɂV wٕq{v^"?1%3Pl8pl5grJqqmiLc$_#_wlnLM3EZ !uQO>E@1~~CVItb ?X8U7oEFԑ̃Lŕ/p }.J29vԢ*ә-]e~*48-O ) ˇLL5ln2+JFg!5\հ^H/dn&Xj\Huq|zmxU"fRdx&SH٤F2*fyJũ4Vtdn*ş S%S,ӊݓ؟z%]cm|$@9ygZ),KCW6Q(Q]fQbq9d%- +ӯ2,TDsVDDUHqeUŵE.T϶^ٍ78z+ETM %N{) )W\e U%EDxk|_tOfGR w~ezub0[>*e4Bo!W8ykdZ*S#۠:u@Gڤ)( %ǎuX9f>IFX/~6ط2cu}“`L1vmT̷n/ӈ[$hq#N}^2sᖭNO?}lV_GtUsh|w߽Ks n FFwY&۟Lz̯nR#eggEpsrĪ2yms0y" a. Ц/o%&)ME3'"CLrN 3=aHa&.vI,?SCVG}sqraSfg2 TtM?3liQ_fչ{)Wa}kw{wJ'.*]njEL'0HsK2}Rs_oa( };UaNs:Lda=$Ϊ$U ձCF-jX/CF6 ٹ ,Y>u~t(.2fŎHͩ, s@$ orxllJEI[IrR ] hXXo7=qYE*-efK,cO j|u:PUZ0=ŕ$r&чm'~bZ2e{bxvC"d1/7zCTvgU26Z)Y5=CЃOjѳ`%&Z߉k} 2iwGOٍI"71 AXg8u%OƨFm6L6Pi~{$Ӷ= &#c\`ddۜ%өA3 CJf|ƴ?0K ѲlQJEWZDXIv.wq>)V2!1L+;Z2Q!D#͏,# !e S& YLR^qh+-agCߌǓP"U`yu.|-~Oجަ؍i) M` f2Sx"9<<M0FG^6rg(*RR0Pcr0м~;UІAڏ[x;s+t{Brg8Зby 1tu;Y1 0@bL ؂OxH& G'jo<697oG{uw;[YWVd!;C?$aĉFB΀ r Y?T<6-iBxO}m Z9G '>0EYiv/T 0R;EyuޞO;&F(cys)QCeͅ'UYXGKT8_#(4`R!/0LJ,/kye|-~{lVKFk/.ҳFu:%=¤.bC\0 ^j.~a#*ei! μ!LdJ;=CR{iJ3wo G=)ñ= HJθ ~ns7 tj&eeiY;/6~`x2ub_<ѯC^ RVսY>حQG<@{h)=k;C8 v9A>3=$!Y x,%=%3 p%BskF0V5G}&fubEDqpTUn7FQl c^O(x CTE3Jķo_s:8Ed ne"LGfac"ܗ"̔}q :Fal{d[F3*0#1%5_C9L`m S=#N|BJS~T5ǐ#Lc ߴvC)1F1g_1nXȤ/:m M'%X{VIOYً7Zo׿2!e6\Wx ՊU$n\/J3Pn#~tkIky.uEl>_?KnpOPB[TuM1$ԻcO?jMy{baLY?S%k$r%0[YY_-|)2ۓݷ=YD!Y97rAni&E??$>}?H| ٸMnHM< e;m˄9F"ՔC]Z)so~x_,/oGuhtQ {01}vD7_Λ@.?(9b{i*K^H,֠ d9R:ѬxX5o9ry@fF%7TT_uHsJ:>cU =ĪU=W8:2QPSŨZ kNd6 /]߻Ni(vO4dO"?uZnd#>3hL8ѯ#D_Y4 ~E븲Vi~ml2ӇS["G[yjB890̹_rDNl# aS3㗸$t,*F AғLun?X&" Z9kڤhƃRRV#z8PJ&t$ɧ#_7}dxJ+Ź _fȡW9 #!ɉDkpNi$hc5F#:̸ԑ˨T.?1#3) mtvG܄#wZQpD|0/C>͘RņUgς aL^c6UR"S kDqeɟ7I `Gp2;_ZcKLFL.I:#ίMo̘V Lc(lӦr0|jԲb_h2ZAoǛCOހy <0'c\sWf1S҃oj,t2ʮ/]`.Hmy v?7穆,%7gHA& R3#55/P=FT>;<ӟf#\cn[J0"lMvd0=kFf#L&qvG $Oy@PR`A4 apFbJ'KP&i 8~ ~k45d¦QV,z96>N~e@&(=JAE{7>^1&l$IO6`8 oE;)8hmW@lC;A<0!``0tc|>6,枮f# +} %Tp~x*U\==gv.a@55!|ӃMlޅ6}9t?TÄui.,J0:rd2esm=!|O" ^u/)U#)bNq%,)L dƵ(Q%TQCiQ&~7 {y7~>P%oniL>,7Ą1Hr:!3fzf`Ydkݓ+ y`BkW/Z91w:iyIZ$U3"|-qĬt9e|231s JĆAbV -Um7=]'ztL.!S-U3{17gbs ltXX)oF"$_ïKEjpcAzfx㈤W>Gڣ ?ؓwYWwavq-:u]iX\ʔx[1gј|F铤 ?;}]3>߶VՍ8r>ICjsBJ{>ֳ+caS)f2U2|L92sovP)scw3>a=5|Pw4V0y0N0:Q*yQ29ƾʓL2=q+컟dG Jڑ0!s2Fe(e|.gyzoNf})}#Kghfk";%<|JQ;C>gOpK]]v`<($R5 C1`+yzf7wFY0U /bIHB.S¨2E XwבKs~td3Ȫ A0Ye3&)If9/-YȢf:nEly,T<+윖b%\ hmfffR&qu] rj*OXou"nUs@(i0SLץ!с5}bUc-%sYiXLZKWjVcKFo2fLMHޫVLv$#X^gZDEtp.od)vh1boV_ht# aC;we(ӿ"7#/! '84xYY3g+2s7ߺ2CWWYo|s6GxF Z%Op]r'MS04kXɕ5/0IAš^Jf8cum|&DFe*Db<Tᱝo1QdʚG-㾸Pbyut,J}Yoɒ]d~}31y'_ 11`ðKH-%J")Q_!H.㞙qNUxr|b#&D\_͒0 _rL15{ s#= Č\ ̫\p(YsSn.M@j5;VPuM_ ]AׇzwN*O,c 2F'a(90f,lBޭL7D|o*cyg *) .|ZďDIO6 xjLuh3#GCt|*.7EsCʍ+*gJ1|g`Eչ(NxQZVQz L=:T!IrZwD_466xM#KQW Hk Kjc%<8Nm-kZJkۭ{Lj"eỚ75n:7]JְYaP&A$cf)`Q30{T7Y >MI\Y.,8tF#rb0 x'r xf .ڵ(e5{vw<˧GCӳdbuGH|;K4 ؝M IDATڃ<11Frk|baKkVb'FYŹ˔4Vs5{" аQ&pjsђҢa1 ubfqµױKk>vƞhiW#LeaBWZ|ͤy0`]r2˱><Yg$d%gZO?]ld&V!x{% 3Pܨ$FisFJ2޶cuŵv|ZTSQ A[G}_ױh28ї00G"lFu{`+1vk{={?ٷf-Bεtq:A2 zSI/>0$9>" Ӗ<%lv;0Η 0>zTUX\$Z}l7RTaxm0kNI*6#xs(m_Y>a«CU ,0/%[xMr;N\_K$mVII1zAdj*z&3ga@y-k:59+ X"D9Fa~4I5K:F"i3l4ZoȂ&c};YLa#(%HovRH&aÃv|8,Τ}dccJHG+7c7AYWIoh (M)ak#&yk8Lu.#L3)A% y{CF42n@˭~}it2զL46”\THl 1_ 1M@+^̅A|UT RddӞMrifu,/b+aT'un>2$=X|dwк()3-A8 e\[3 Xcda.HTRٕWIt)WV6i h7;]: [(?@5GGEM-MFmW*{B{Fo 1৮wGDFgdGgzN޽6!uLP oVy;2yvVWsIkMVit`42;Y9+6S= >M4џtÈV!beQjVx{OÀQ!9RҾ(~vӊk4:Cy|l ''crht6jg8DJ<V_:&Pu|qNb; \ #L b֐\eT.ڐ:İlV2.F[BɖWSYXRͥ *: {Bne2D0*1#er&x:|&\qo)P-7,dE2$ƺVE*=XJU;JUjtg<*r|p/Irb-/UR]@AIJb:qhij Z( m-C_V6CԖ xH(:ht![Frܩwa<F\"-2 ̐䐬B ҞT@^;4dƬ%{NYdQv|Liv덇_K¢amXƝ0l!aYD+D=gyNE ʣdYEO&rSO3Nkwg~f ad!Xj죩..сyG|OA%l\XM"ue'ۜ$5ӹdGtiy53_hXQ̲hPk~Gu()>΋ngE௖W87rоiW- c=b4."DVHcd ,/VF%86Xh ťy<V7 :٤Zi7UCj q~K.lyp[%zr (bc3f=9w}7yEmÆW^çOwR2L)vik41G(A(V3?woT7.)ⰮS/y`HR3δ(3#FOޓaJZ;YA;յPs(q:EY 1,/N {xZ&sfހ!1ܷ.E7pv}-dۉp2Ovo i~/ۀ_h?mZ}eV*jU&ltGN*D+m´jKjE"^_k[}C2i{ zIz`_ik]8Lkk᭖lwVY"ٰ ttan,=i4y_>{ -+ 1k8 j>4:}섨hb%%d1|r8NgM"C`:?3y-y+8_ pBZy Ɵ&-~sn?D46t:Ƥ@L]V5LQ FV C+GIpS d579Ml-ъip;?W|gk&Z&WTPJP2WN"AO?[!I(E3~ ~JR|_0-zۭv0gbqF_>>8KV׶7ةCZw_\t8RnJaw>هӏh%0_#KI" f敀LxK-K Ⓐ<3?E8%LwSydEFD>H}5ٽy!_ j՞J0@(ZW`u3K$Oş4cWlN*`tn./¿i UHd,o{XWh~|n%n ~VJ eO,zUpW*A7kaLJ)i6 nsv('d.l~UqbsgŖ¸Ȕ.?΢Ԡ&@1<v]tJZ8Tx?و8]9Ex8,Ʉ!Zz~^x'm6&:{_<>e2錬̋aEpc]m6I֔C"ٲl&τz(WOa ζ(&Ċ0 ,1`8Gsm;4SC?a*J0x%-tP 'x~Tpvtl'i s P 0tW!|('ׯr(͎i!5]| W#sj1Axt < TM?&*0|3̨7W)Ɉc-NeGAA?r4(d:fGbbD >\1ɫp/,RS?`|49S|d}2\o5"Ҝ6ܕ`|%C{ !5{&v0b. vmVG!sW՚7843លnV\FUM80]Y^~ ?cvP|).4{^[ Tv0-1Hp6P{߈62Zgx+62;:&ȼu'E|?tՃ"ezmua}=wQq\N]rﯷ@+\(h VPG@ͅG1`oph]%tt?9W˗ptxn~v!\c%ue/ѯVЯКĄfmv冨+S&qzsK٨cd=cјB|NC C9TR9.\afyz8|gϳwp\B~f>*ˣFf hzRj}0FXML5*ZEʉa4̥KTrG$әlZj +#tE8;:[Wx~^ <*kLnf~Kn{fi5<]LmQIiUK N|V)3e0b@.F,WEz!]u}_(ZNT&"LúЭc2,S|XL0&7 m0/Or| < |z;!qѧfuBAKX͆R=8dC ~,F lk{c8cxl6TKi~/ϗf4=M@:TD5Z"Jv(=FIpQ?9.=EU[hBh (B B{f{!w[|.ʐgkB~?6M[e}n*B!F~^˫y6]L'T7gy}fVWxd03b.~y-/_U)(UZG:؏ 1 WՅ:DtIÇRg_d2?K\Y"%d%TNRG"Gkmd%DžB~@JAqAJu5Eo_daĝ&bJeo2aqT&ia0VV2b ?S+ޡ"ScjS`MCc0ӌ=H^<)gogs{cXOɋFwH=[3ivދ}>}Gm` ~>#Fw^`)r'gF*'xK`?pg#:]ϝ,_ka?m]`2/Sv|+p:Mhf=RpϤ's<{ū[}Z}~$(ot=Y(9}.]c?(p[۾I31m<Aň18а3VfSE yNrCDŽ !}ї@ίzơdf3^(*ȡPMP M+F(`yu!`__5>Aeʥ&WDgNRa%K/M6NX,Kbfj13%cV?of4um6RvJ; N࠴c2to!;Vlr 3yE+. ( X*N9",.m }Ƈy)Y>i@Ҁ}8Η[tC6Ev"< m71LA/~CXv+tًp|xz'{pO,$5lmϑt ) ca "lvzȻb]0UᎀX0Q_1̎Ȃ]^DdyƷ*5:}MrX93[FmWn)#8ýו ?Y)&**7AwT[=q|ܭVIp~׫ b@&h3%T)+i."KYT*#G*) qW1d4U%Svn)t+{4q'C7 L+EyGO {=<}&GG5U;ه^5LNv]&r!5`pI<1O !!Ky2B$4MZDl{1[rdA/^4ď4]2DGwn\rL..W0 J#w1XTXlr.eS_u+0f;XMAQ _Vt=9Y?#⃈lHWJ*<y1"e ,y #K ? K SIRg=Zȇܠ7-a ]q Xk9YPD'ɬ_U bBA0cn={cX~\W0y;>V>N?j;{N޿rMeS}`i*i(~wLbI_} >#2 .iX@j4`=eZFɾ(#d7F JV3} ε.N!.[~%[O?=*_i2 fn˫S^Ԛ0y&Huăd6ak5H?Fw8nx ?gҔ:~21r 1yqكE>w] %Fw]Xηc-Ȓlaka))b_ќߘGcnOv;z(C;cUJYZ.*%l0HK1>x3K;po O-]Ǟ'42:1 3hXo.; ϭwE?5 -bjڰIX>+0wޗL ||gUX-.b" N +7*1|o=ܭP Yp>n|m:5nlfvT 1K/x6="Y0Zu+Mf|2C2S] s(@LX0 Neg=kM 3 9j wk1xSwE6;a୬ Mm4./ 3*Ŗۼ׭3oq}YXa;et[MNz`u qxx!pp8gWfC˾"#JVTaJt0J糠9Ey94 xpw"C z7t >CL:FϣL#*D*PQOÃ!S /e-ʧ; ת g)n$}Hl9.(+H"h|Ķ1''vȺǀb >Z#0[X|K[Ð1HiEj&zvǩ-Œ.|=Rz'+WcQ rx9L'fC2`_D@cBzf(KAQ&ϟ;b< S0[ gab&!MrW;j8Z*4 TJ2!G4j)cL񻀊i]3.Q`%x0IWR/aZ03 5` H g7}'Bg~`Gu;ٖMca3[Ldةݛ&J`]Aı32ZcةloXivXF:U^u h&;㽫oEH)Y4miolB`yctրu0ΆL6Be`_J 9H>>gIRK ?gOj,؏*2]Y}E?I'0~eMN h"AJo79oe)R^2HZɚ{d8l>dZJ1Sh>ҥ'Ex.ۣ:K5|˩v#^%S4vz,)Ta^k>2F^-#3Mga;Pɔ]L|gmLF .UX3tc4Zk˯O?z.,&&H\hVuwϦQ)RRH~|oCTzӴb.<ڇ wy٘qN&U(+rd:P^& cW~:U^?  x{c-]u~HM~ W>c1xnK>tuj]T?*2[}K{{0}4´{dзl2HIjw}ꋼfҕMW~oϏ0a&Eڽ\ 뺈ޔf"v?AɔejdXz X]Y櫧O?]Զ#npY7ʘMObN_zu 2B{Zfт,NӏVOʼYn+48~ V]^gZxBW|"dɨldw0 ܯnDY"Oxc d~M7k'z;5u. ʖh0D-h[ %q`ȷ"ZnEAk􈱈5G7mV"`fG=:ħzRCɤM`XmѴLn ]). h ɧld4;2סkknŚ &Y|!f}E0 2]nM83A޿Iȡ|Kj"j W8f+ ]uA4 t wMO`}3=qjGy\ebj/>Zf\//NR22wbw1cK@dEf ;7 )LɓLi@U/.RD̚c0QYJpg0Lf),*ӤҺd>nj>覶0>@d ZW9L߿E|Vap= 1/hDJL"p)v,04/ψ[:FT]2r-dט<~L\ |,줰-t/=_.O'' '0h蜖>LgG7^W aSTVdWY CwћdM Yhp.%kC֖J')%_B7 @хy<:3;B ˝ZVWEdƻ_bCrT{B )ϗO6:BJB˫V+)|s`9c=8G.MMuX*[IVj}>>}\X?:!65M,^w ̧i&5MH=`%5RFt8d5F[F"0Z0 ^q) E_>{~VPl"NoRX;e6A+ף[ʐ6L>"/K Xz(%,) '`u5X.y^&%k.Opw`5N *5,,ޘI/,`_ Sipw4L߇QqvK7Ok|OGGdyճTw"Ux_a2 AAmz{0;}ߓ(9J Βtg6:-MK îǨ0_C̰a}AZqa0aZ?⌆49P PC|'jF'1 F;& 8%'^ X^erwwܼsuzj-Ez>C0xFc`냪lQvJ0q3Y[ q/Lfof{bݽǕ)>NKNla dsvsHI0'0mFl俏nM05L2G{0?~D름7".n%1 N jDH#̍0TZSgKF㋧ϖ/ +̽_zn"W@3M'8׆K|:gD+gZl:?H"?*U碶o)o24O"ԪRû 6Zϙs1n7Zerqz9Z3~׶y53C77;;;P)*B)kƞ_>})jv*$oAG n dҵr̳޾ն@d]ODA׋ShLx!l{?6kc5M*4din/鱣 鼙4:G#4a7a_i32w66&NMPK 0``ކ;0bs ~>Y}lf QRL7x:d su&rA+Q[oNEH%}~Հ N H_E?Knd8PF݂$rט?\K,JCc(Yшճ耒.-S k|IY=fuU; 6?iW^c_ںfqy ՒS_[dH {ܯ^ i,:>! qpTF\uDŰ]o @k82%8#֠.j~԰К)wmFy0x8DLEk0qO~ o=,&idak&[}2^nnN?LL;E%.)k|޲wǐtTkM8S&U_n@Pی5cGĕj .&,X}<YvvpY\ۆՕ 7VmkJI4(S8Na݅sN͞E;eu~kBR֑CQJ+#,- "Ӟ D1*s Uc 7449Y(MxIJ}%P޲L`Fc(|HiEx4Gc<(_r|4&]a ]SkV14ah/flʀ(VE)B-a̖oC+Q0a, sOjz gNNNL/#;f̾am$UeGrqzw,!YFuy >ldmn%,@k d0|N-R݅AP: o`npqU8<(*{L?/wA9:FDU'ht.Ph5;2D`Iӣ./%{0?$p&T%!ΑahX Y|ͳ[k=\ߢc_|wȩ:_ƭ(rlC=.SUa INm3gR2UEGIJ]lBH$D4_$0cvgN)Ιa`ipu~4r_l#α H=r >0y4z%).Э|38=U JI3+D Guj+u HHz1̏{):\q ~EJuPvLO$+6C,l4[zЯl {d.劧$ Fpu 0E?F/y)7btoq8idႸZGz+=(`ढB#G"1bsyTV7f/a#f;u+fa{.plzBk,p|,52`2A) 5m CFc!\_IցA:'ou<a:|K4z݄_ tj]@%cP tKOeA^Ѵ=Voo no,j.gV[ n (cl?# sh8JvlfXfC(MOjI\hpkALz3 sfL:h.dͶL?wU<( FP86TR*nr)xBmL:ϫap2Kch=>ֶ|4?ڕޣK|T{!Zg|.Ng;RbB8Md+;JIw:?"#a7wKM1?Jo0h 54ec!2(l!鷸4gdci} RQZmo{#{FQUF-OIN& M*eJnB(F < U/i'Mb۟Vp9<2`~lP`#[]%dF;/"jv+E<o?Zݙ!LOț;]քRXCp"ITDV*"|v.@5HRS_͟_<̓u2X~oO/7 ::mU2dww7YpV vU٥2¶zVg vUT(PTkA+%;fqIENDB`lmms-1.1.3/plugins/flp_import/000077500000000000000000000000001247673406200163335ustar00rootroot00000000000000lmms-1.1.3/plugins/flp_import/CMakeLists.txt000066400000000000000000000001561247673406200210750ustar00rootroot00000000000000INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(unrtf) BUILD_PLUGIN(flpimport FlpImport.cpp unrtf.cpp FlpImport.h) lmms-1.1.3/plugins/flp_import/FlpImport.cpp000066400000000000000000001277131247673406200207660ustar00rootroot00000000000000/* * FlpImport.cpp - support for importing FLP-files * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "FlpImport.h" #include "NotePlayHandle.h" #include "AutomationPattern.h" #include "basic_filters.h" #include "bb_track.h" #include "bb_track_container.h" #include "combobox.h" #include "config_mgr.h" #include "debug.h" #include "Effect.h" #include "engine.h" #include "FxMixer.h" #include "FxMixerView.h" #include "group_box.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "EnvelopeAndLfoParameters.h" #include "knob.h" #include "Oscillator.h" #include "Pattern.h" #include "Piano.h" #include "ProjectJournal.h" #include "project_notes.h" #include "song.h" #include "TrackContainer.h" #include "embed.h" #include "lmmsconfig.h" #ifdef LMMS_HAVE_CTYPE_H #include #endif #define makeID(_c0, _c1, _c2, _c3) \ ( ( _c0 ) | ( ( _c1 ) << 8 ) | ( ( _c2 ) << 16 ) | ( ( _c3 ) << 24 ) ) extern "C" { Plugin::Descriptor PLUGIN_EXPORT flpimport_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "FLP Import", QT_TRANSLATE_NOOP( "pluginBrowser", "Filter for importing FL Studio projects into LMMS" ), "Tobias Doerffel ", 0x0100, Plugin::ImportFilter, NULL, NULL, NULL } ; // unrtf-stuff #include "defs.h" #include "main.h" #include "html.h" #include "word.h" #include "hash.h" #include "convert.h" #include "attr.h" extern OutputPersonality * op; extern int lineno; extern QString outstring; } const int NumFLFxChannels = 64; static void dump_mem( const void * buffer, uint n_bytes ) { uchar * cp = (uchar *) buffer; for( uint k = 0; k < n_bytes; ++k ) { qDebug( "%02x ", (unsigned int)cp[k] );//( cp[k] > 31 || cp[k] < 7 ) ? cp[k] : '.' ); } qDebug( "\n" ); } enum FLP_Events { // BYTE EVENTS FLP_Byte = 0, FLP_Enabled = 0, FLP_NoteOn = 1, //+pos (byte) FLP_Vol = 2, FLP_Pan = 3, FLP_MIDIChan = 4, FLP_MIDINote = 5, FLP_MIDIPatch = 6, FLP_MIDIBank = 7, FLP_LoopActive = 9, FLP_ShowInfo = 10, FLP_Shuffle = 11, FLP_MainVol = 12, FLP_Stretch = 13, // old byte version FLP_Pitchable = 14, FLP_Zipped = 15, FLP_Delay_Flags = 16, FLP_PatLength = 17, FLP_BlockLength = 18, FLP_UseLoopPoints = 19, FLP_LoopType = 20, FLP_ChanType = 21, FLP_MixSliceNum = 22, FLP_EffectChannelMuted = 27, // WORD EVENTS FLP_Word = 64, FLP_NewChan = FLP_Word, FLP_NewPat = FLP_Word + 1, //+PatNum (word) FLP_Tempo = FLP_Word + 2, FLP_CurrentPatNum = FLP_Word + 3, FLP_PatData = FLP_Word + 4, FLP_FX = FLP_Word + 5, FLP_Fade_Stereo = FLP_Word + 6, FLP_CutOff = FLP_Word + 7, FLP_DotVol = FLP_Word + 8, FLP_DotPan = FLP_Word + 9, FLP_PreAmp = FLP_Word + 10, FLP_Decay = FLP_Word + 11, FLP_Attack = FLP_Word + 12, FLP_DotNote = FLP_Word + 13, FLP_DotPitch = FLP_Word + 14, FLP_DotMix = FLP_Word + 15, FLP_MainPitch = FLP_Word + 16, FLP_RandChan = FLP_Word + 17, FLP_MixChan = FLP_Word + 18, FLP_Resonance = FLP_Word + 19, FLP_LoopBar = FLP_Word + 20, FLP_StDel = FLP_Word + 21, FLP_FX3 = FLP_Word + 22, FLP_DotReso = FLP_Word + 23, FLP_DotCutOff = FLP_Word + 24, FLP_ShiftDelay = FLP_Word + 25, FLP_LoopEndBar = FLP_Word + 26, FLP_Dot = FLP_Word + 27, FLP_DotShift = FLP_Word + 28, FLP_LayerChans = FLP_Word + 30, // DWORD EVENTS FLP_Int = 128, FLP_Color = FLP_Int, FLP_PlayListItem = FLP_Int + 1, //+Pos (word) +PatNum (word) FLP_Echo = FLP_Int + 2, FLP_FXSine = FLP_Int + 3, FLP_CutCutBy = FLP_Int + 4, FLP_WindowH = FLP_Int + 5, FLP_MiddleNote = FLP_Int + 7, FLP_Reserved = FLP_Int + 8, // may contain an invalid // version info FLP_MainResoCutOff = FLP_Int + 9, FLP_DelayReso = FLP_Int + 10, FLP_Reverb = FLP_Int + 11, FLP_IntStretch = FLP_Int + 12, FLP_SSNote = FLP_Int + 13, FLP_FineTune = FLP_Int + 14, // TEXT EVENTS FLP_Undef = 192, //+Size (var length) FLP_Text = FLP_Undef, //+Size (var length)+Text // (Null Term. String) FLP_Text_ChanName = FLP_Text, // name for the current channel FLP_Text_PatName = FLP_Text + 1, // name for the current pattern FLP_Text_Title = FLP_Text + 2, // title of the loop FLP_Text_Comment = FLP_Text + 3, // old comments in text format. // Not used anymore FLP_Text_SampleFileName = FLP_Text + 4, // filename for the sample in // the current channel, stored // as relative path FLP_Text_URL = FLP_Text + 5, FLP_Text_CommentRTF = FLP_Text + 6, // new comments in Rich Text // format FLP_Text_Version = FLP_Text + 7, FLP_Text_PluginName = FLP_Text + 9, // plugin file name // (without path) FLP_Text_EffectChanName = FLP_Text + 12, FLP_Text_MIDICtrls = FLP_Text + 16, FLP_Text_Delay = FLP_Text + 17, FLP_Text_TS404Params = FLP_Text + 18, FLP_Text_DelayLine = FLP_Text + 19, FLP_Text_NewPlugin = FLP_Text + 20, FLP_Text_PluginParams = FLP_Text + 21, FLP_Text_ChanParams = FLP_Text + 23,// block of various channel // params (can grow) FLP_Text_EnvLfoParams = FLP_Text + 26, FLP_Text_BasicChanParams= FLP_Text + 27, FLP_Text_OldFilterParams= FLP_Text + 28, FLP_Text_AutomationData = FLP_Text + 31, FLP_Text_PatternNotes = FLP_Text + 32, FLP_Text_ChanGroupName = FLP_Text + 39, FLP_Text_PlayListItems = FLP_Text + 41, FLP_Event_EffectParams = 225, FLP_Event_PlaylistItems = 233, FLP_CmdCount } ; struct FL_Automation { FL_Automation() : pos( 0 ), value( 0 ), channel( 0 ), control( 0 ) { } enum Controls { ControlVolume = 0, ControlPanning = 1, ControlFilterCut = 2, ControlFilterRes = 3, ControlPitch = 4, ControlFilterType = 5, ControlFXChannel = 8, ControlVolPredelay = 4354, ControlVolAttack, ControlVolHold, ControlVolDecay, ControlVolSustain, ControlVolRelease, ControlVolLfoPredelay = ControlVolPredelay+7, ControlVolLfoAttack, ControlVolLfoAmount, ControlVolLfoSpeed, ControlVolAttackTension = ControlVolPredelay+12, ControlVolDecayTension, ControlVolReleaseTension, ControlCutPredelay = 4610, ControlCutAttack, ControlCutHold, ControlCutDecay, ControlCutSustain, ControlCutRelease, ControlCutAmount, ControlCutLfoPredelay = ControlCutPredelay+7, ControlCutLfoAttack, ControlCutLfoAmount, ControlCutLfoSpeed, ControlCutAttackTension = ControlCutPredelay+12, ControlCutDecayTension, ControlCutReleaseTension, ControlResPredelay = 4866, ControlResAttack, ControlResHold, ControlResDecay, ControlResSustain, ControlResRelease, ControlResAmount, ControlResLfoPredelay = ControlResPredelay+7, ControlResLfoAttack, ControlResLfoAmount, ControlResLfoSpeed, ControlResAttackTension = ControlResPredelay+12, ControlResDecayTension, ControlResReleaseTension } ; int pos; int value; int channel; int control; } ; struct FL_Channel_Envelope { InstrumentSoundShaping::Targets target; float predelay; float attack; float hold; float decay; float sustain; float release; float amount; } ; struct FL_Plugin { enum PluginTypes { UnknownPlugin, InstrumentPlugin, Sampler, TS404, Fruity_3x_Osc, Layer, BeepMap, BuzzGeneratorAdapter, FruitKick, FruityDrumSynthLive, FruityDX10, FruityGranulizer, FruitySlicer, FruitySoundfontPlayer, FruityVibrator, MidiOut, Plucked, SimSynth, Sytrus, WASP, EffectPlugin, Fruity7BandEq, FruityBalance, FruityBassBoost, FruityBigClock, FruityBloodOverdrive, FruityCenter, FruityChorus, FruityCompressor, FruityDbMeter, FruityDelay, FruityDelay2, FruityFastDist, FruityFastLP, FruityFilter, FruityFlanger, FruityFormulaController, FruityFreeFilter, FruityHTMLNotebook, FruityLSD, FruityMute2, FruityNotebook, FruityPanOMatic, FruityParametricEQ, FruityPeakController, FruityPhaseInverter, FruityPhaser, FruityReeverb, FruityScratcher, FruitySend, FruitySoftClipper, FruitySpectroman, FruityStereoEnhancer, FruityXYController } ; FL_Plugin( PluginTypes _pt = UnknownPlugin ) : pluginType( _pt ), name(), pluginSettings( NULL ), pluginSettingsLength( 0 ) { } ~FL_Plugin() { delete[] pluginSettings; } PluginTypes pluginType; QString name; char * pluginSettings; int pluginSettingsLength; } ; struct FL_Channel : public FL_Plugin { QList automationData; int volume; int panning; int baseNote; int fxChannel; int layerParent; typedef QList > noteVector; noteVector notes; QList dots; QString sampleFileName; int sampleAmp; bool sampleReversed; bool sampleReverseStereo; bool sampleUseLoopPoints; Instrument * instrumentPlugin; QList envelopes; int filterType; float filterCut; float filterRes; bool filterEnabled; int arpDir; int arpRange; int selectedArp; float arpTime; float arpGate; bool arpEnabled; QRgb color; FL_Channel( PluginTypes _pt = UnknownPlugin ) : FL_Plugin( _pt ), automationData(), volume( DefaultVolume ), panning( DefaultPanning ), baseNote( DefaultKey ), fxChannel( 0 ), layerParent( -1 ), notes(), dots(), sampleFileName(), sampleAmp( 100 ), sampleReversed( false ), sampleReverseStereo( false ), sampleUseLoopPoints( false ), instrumentPlugin( NULL ), envelopes(), filterType( basicFilters<>::LowPass ), filterCut( 10000 ), filterRes( 0.1 ), filterEnabled( false ), arpDir( InstrumentFunctionArpeggio::ArpDirUp ), arpRange( 0 ), selectedArp( 0 ), arpTime( 100 ), arpGate( 100 ), arpEnabled( false ), color( qRgb( 64, 128, 255 ) ) { } } ; struct FL_Effect : public FL_Plugin { FL_Effect( PluginTypes _pt = UnknownPlugin ) : FL_Plugin( _pt ), fxChannel( 0 ), fxPos( 0 ) { } int fxChannel; int fxPos; } ; struct FL_PlayListItem { FL_PlayListItem() : position( 0 ), length( 1 ), pattern( 0 ) { } int position; int length; int pattern; } ; struct FL_EffectChannel { FL_EffectChannel() : name(), volume( DefaultVolume ), isMuted( false ) { } QString name; int volume; bool isMuted; } ; struct FL_Project { int mainVolume; int mainPitch; bpm_t tempo; int numChannels; QList channels; QList effects; QList playListItems; QMap patternNames; int maxPatterns; int currentPattern; int activeEditPattern; FL_EffectChannel effectChannels[NumFLFxChannels+1]; int currentEffectChannel; QString projectNotes; QString projectTitle; QString versionString; int version; int versionSpecificFactor; FL_Project() : mainVolume( DefaultVolume ), mainPitch( 0 ), tempo( DefaultTempo ), numChannels( 0 ), channels(), effects(), playListItems(), patternNames(), maxPatterns( 0 ), currentPattern( 0 ), activeEditPattern( 0 ), effectChannels(), currentEffectChannel( -1 ), projectNotes(), projectTitle(), versionString(), version( 0x100 ), versionSpecificFactor( 1 ) { } } ; FlpImport::FlpImport( const QString & _file ) : ImportFilter( _file, &flpimport_plugin_descriptor ) { } FlpImport::~FlpImport() { } bool FlpImport::tryImport( TrackContainer* tc ) { const int mappedFilter[] = { basicFilters<>::LowPass,// fast LP basicFilters<>::LowPass, basicFilters<>::BandPass_CSG, basicFilters<>::HiPass, basicFilters<>::Notch, basicFilters<>::NumFilters+basicFilters<>::LowPass, basicFilters<>::LowPass, basicFilters<>::NumFilters+basicFilters<>::LowPass } ; const InstrumentFunctionArpeggio::ArpDirections mappedArpDir[] = { InstrumentFunctionArpeggio::ArpDirUp, InstrumentFunctionArpeggio::ArpDirUp, InstrumentFunctionArpeggio::ArpDirDown, InstrumentFunctionArpeggio::ArpDirUpAndDown, InstrumentFunctionArpeggio::ArpDirUpAndDown, InstrumentFunctionArpeggio::ArpDirRandom } ; QMap mappedPluginTypes; // instruments mappedPluginTypes["sampler"] = FL_Plugin::Sampler; mappedPluginTypes["ts404"] = FL_Plugin::TS404; mappedPluginTypes["3x osc"] = FL_Plugin::Fruity_3x_Osc; mappedPluginTypes["beepmap"] = FL_Plugin::BeepMap; mappedPluginTypes["buzz generator adapter"] = FL_Plugin::BuzzGeneratorAdapter; mappedPluginTypes["fruit kick"] = FL_Plugin::FruitKick; mappedPluginTypes["fruity drumsynth live"] = FL_Plugin::FruityDrumSynthLive; mappedPluginTypes["fruity dx10"] = FL_Plugin::FruityDX10; mappedPluginTypes["fruity granulizer"] = FL_Plugin::FruityGranulizer; mappedPluginTypes["fruity slicer"] = FL_Plugin::FruitySlicer; mappedPluginTypes["fruity soundfont player"] = FL_Plugin::FruitySoundfontPlayer; mappedPluginTypes["fruity vibrator"] = FL_Plugin::FruityVibrator; mappedPluginTypes["midi out"] = FL_Plugin::MidiOut; mappedPluginTypes["plucked!"] = FL_Plugin::Plucked; mappedPluginTypes["simsynth"] = FL_Plugin::SimSynth; mappedPluginTypes["sytrus"] = FL_Plugin::Sytrus; mappedPluginTypes["wasp"] = FL_Plugin::WASP; // effects mappedPluginTypes["fruity 7 band EQ"] = FL_Plugin::Fruity7BandEq; mappedPluginTypes["fruity balance"] = FL_Plugin::FruityBalance; mappedPluginTypes["fruity bass boost"] = FL_Plugin::FruityBassBoost; mappedPluginTypes["fruity big clock"] = FL_Plugin::FruityBigClock; mappedPluginTypes["fruity blood overdrive"] = FL_Plugin::FruityBloodOverdrive; mappedPluginTypes["fruity center"] = FL_Plugin::FruityCenter; mappedPluginTypes["fruity chorus"] = FL_Plugin::FruityChorus; mappedPluginTypes["fruity compressor"] = FL_Plugin::FruityCompressor; mappedPluginTypes["fruity db meter"] = FL_Plugin::FruityDbMeter; mappedPluginTypes["fruity delay"] = FL_Plugin::FruityDelay; mappedPluginTypes["fruity delay 2"] = FL_Plugin::FruityDelay2; mappedPluginTypes["fruity fast dist"] = FL_Plugin::FruityFastDist; mappedPluginTypes["fruity fast lp"] = FL_Plugin::FruityFastLP; mappedPluginTypes["fruity filter"] = FL_Plugin::FruityFilter; mappedPluginTypes["fruity flanger"] = FL_Plugin::FruityFlanger; mappedPluginTypes["fruity formula controller"] = FL_Plugin::FruityFormulaController; mappedPluginTypes["fruity free filter"] = FL_Plugin::FruityFreeFilter; mappedPluginTypes["fruity html notebook"] = FL_Plugin::FruityHTMLNotebook; mappedPluginTypes["fruity lsd"] = FL_Plugin::FruityLSD; mappedPluginTypes["fruity mute 2"] = FL_Plugin::FruityMute2; mappedPluginTypes["fruity notebook"] = FL_Plugin::FruityNotebook; mappedPluginTypes["fruity panomatic"] = FL_Plugin::FruityPanOMatic; mappedPluginTypes["fruity parametric eq"] = FL_Plugin::FruityParametricEQ; mappedPluginTypes["fruity peak controller"] = FL_Plugin::FruityPeakController; mappedPluginTypes["fruity phase inverter"] = FL_Plugin::FruityPhaseInverter; mappedPluginTypes["fruity phaser"] = FL_Plugin::FruityPhaser; mappedPluginTypes["fruity reeverb"] = FL_Plugin::FruityReeverb; mappedPluginTypes["fruity scratcher"] = FL_Plugin::FruityScratcher; mappedPluginTypes["fruity send"] = FL_Plugin::FruitySend; mappedPluginTypes["fruity soft clipper"] = FL_Plugin::FruitySoftClipper; mappedPluginTypes["fruity spectroman"] = FL_Plugin::FruitySpectroman; mappedPluginTypes["fruity stereo enhancer"] = FL_Plugin::FruityStereoEnhancer; mappedPluginTypes["fruity x-y controller"] = FL_Plugin::FruityXYController; FL_Project p; if( openFile() == false ) { return false; } if( readID() != makeID( 'F', 'L', 'h', 'd' ) ) { qWarning( "FlpImport::tryImport(): not a valid FL project\n" ); return false; } const int header_len = read32LE(); if( header_len != 6 ) { qWarning( "FlpImport::tryImport(): invalid file format\n" ); return false; } const int type = read16LE(); if( type != 0 ) { qWarning( "FlpImport::tryImport(): type %d format is not " "supported\n", type ); return false; } p.numChannels = read16LE(); if( p.numChannels < 1 || p.numChannels > 1000 ) { qWarning( "FlpImport::tryImport(): invalid number of channels " "(%d)\n", p.numChannels ); return false; } const int ppq = read16LE(); if( ppq < 0 ) { qWarning( "FlpImport::tryImport(): invalid ppq\n" ); return false; } QProgressDialog progressDialog( TrackContainer::tr( "Importing FLP-file..." ), TrackContainer::tr( "Cancel" ), 0, p.numChannels ); progressDialog.setWindowTitle( TrackContainer::tr( "Please wait..." ) ); progressDialog.show(); bool valid = false; // search for FLdt chunk while( 1 ) { int32_t id = readID(); const int len = read32LE(); if( file().atEnd() ) { qWarning( "FlpImport::tryImport(): unexpected " "end of file\n" ); return false; } if( len < 0 || len >= 0x10000000 ) { qWarning( "FlpImport::tryImport(): invalid " "chunk length %d\n", len ); return false; } if( id == makeID( 'F', 'L', 'd', 't' ) ) { valid = true; break; } skip( len ); } if( valid == false ) { return false; } for( int i = 0; i < p.numChannels; ++i ) { p.channels += FL_Channel(); } qDebug( "channels: %d\n", p.numChannels ); char * text = NULL; int text_len = 0; FL_Plugin::PluginTypes last_plugin_type = FL_Plugin::UnknownPlugin; int cur_channel = -1; const bool is_journ = engine::projectJournal()->isJournalling(); engine::projectJournal()->setJournalling( false ); while( file().atEnd() == false ) { FLP_Events ev = static_cast( readByte() ); uint32_t data = readByte(); if( ev >= FLP_Word && ev < FLP_Text ) { data = data | ( readByte() << 8 ); } if( ev >= FLP_Int && ev < FLP_Text ) { data = data | ( readByte() << 16 ); data = data | ( readByte() << 24 ); } if( ev >= FLP_Text ) { text_len = data & 0x7F; uint8_t shift = 0; while( data & 0x80 ) { data = readByte(); text_len = text_len | ( ( data & 0x7F ) << ( shift += 7 ) ); } delete[] text; text = new char[text_len+1]; if( readBlock( text, text_len ) <= 0 ) { qWarning( "could not read string (len: %d)\n", text_len ); } text[text_len] = 0; } const unsigned char * puc = (const unsigned char*) text; const int * pi = (const int *) text; FL_Channel * cc = cur_channel >= 0 ? &p.channels[cur_channel] : NULL; switch( ev ) { // BYTE EVENTS case FLP_Byte: qDebug( "undefined byte %d\n", data ); break; case FLP_NoteOn: qDebug( "note on: %d\n", data ); // data = pos how to handle? break; case FLP_Vol: qDebug( "vol %d\n", data ); break; case FLP_Pan: qDebug( "pan %d\n", data ); break; case FLP_LoopActive: qDebug( "active loop: %d\n", data ); break; case FLP_ShowInfo: qDebug( "show info: %d\n", data ); break; case FLP_Shuffle: qDebug( "shuffle: %d\n", data ); break; case FLP_MainVol: p.mainVolume = data * 100 / 128; break; case FLP_PatLength: qDebug( "pattern length: %d\n", data ); break; case FLP_BlockLength: qDebug( "block length: %d\n", data ); break; case FLP_UseLoopPoints: cc->sampleUseLoopPoints = true; break; case FLP_LoopType: qDebug( "loop type: %d\n", data ); break; case FLP_ChanType: qDebug( "channel type: %d\n", data ); if( cc ) { switch( data ) { case 0: cc->pluginType = FL_Plugin::Sampler; break; case 1: cc->pluginType = FL_Plugin::TS404; break; // case 2: cc->pluginType = FL_Plugin::Fruity_3x_Osc; break; case 3: cc->pluginType = FL_Plugin::Layer; break; default: break; } } break; case FLP_MixSliceNum: cc->fxChannel = data+1; break; case FLP_EffectChannelMuted: if( p.currentEffectChannel <= NumFLFxChannels ) { p.effectChannels[p.currentEffectChannel].isMuted = ( data & 0x08 ) > 0 ? false : true; } break; // WORD EVENTS case FLP_NewChan: cur_channel = data; qDebug( "new channel: %d\n", data ); break; case FLP_NewPat: p.currentPattern = data - 1; if( p.currentPattern > p.maxPatterns ) { p.maxPatterns = p.currentPattern; } break; case FLP_Tempo: p.tempo = data; break; case FLP_CurrentPatNum: p.activeEditPattern = data; break; case FLP_FX: qDebug( "FX: %d\n", data ); break; case FLP_Fade_Stereo: if( data & 0x02 ) { cc->sampleReversed = true; } else if( data & 0x100 ) { cc->sampleReverseStereo = true; } qDebug( "fade stereo: %d\n", data ); break; case FLP_CutOff: qDebug( "cutoff (sample): %d\n", data ); break; case FLP_PreAmp: cc->sampleAmp = 100 + data * 100 / 256; break; case FLP_Decay: qDebug( "decay (sample): %d\n", data ); break; case FLP_Attack: qDebug( "attack (sample): %d\n", data ); break; case FLP_MainPitch: p.mainPitch = data; break; case FLP_Resonance: qDebug( "reso (sample): %d\n", data ); break; case FLP_LoopBar: qDebug( "loop bar: %d\n", data ); break; case FLP_StDel: qDebug( "stdel (delay?): %d\n", data ); break; case FLP_FX3: qDebug( "FX 3: %d\n", data ); break; case FLP_ShiftDelay: qDebug( "shift delay: %d\n", data ); break; case FLP_Dot: cc->dots.push_back( ( data & 0xff ) + ( p.currentPattern << 8 ) ); break; case FLP_LayerChans: p.channels[data].layerParent = cur_channel; break; // DWORD EVENTS case FLP_Color: cc->color = data; break; case FLP_PlayListItem: { FL_PlayListItem i; i.position = ( data & 0xffff ) * DefaultTicksPerTact; i.length = DefaultTicksPerTact; i.pattern = ( data >> 16 ) - 1; p.playListItems.push_back( i ); if( i.pattern > p.maxPatterns ) { p.maxPatterns = i.pattern; } break; } case FLP_FXSine: qDebug( "fx sine: %d\n", data ); break; case FLP_CutCutBy: qDebug( "cut cut by: %d\n", data ); break; case FLP_MiddleNote: cc->baseNote = data+9; break; case FLP_DelayReso: qDebug( "delay resonance: %d\n", data ); break; case FLP_Reverb: qDebug( "reverb (sample): %d\n", data ); break; case FLP_IntStretch: qDebug( "int stretch (sample): %d\n", data ); break; // TEXT EVENTS case FLP_Text_ChanName: cc->name = text; break; case FLP_Text_PatName: p.patternNames[p.currentPattern] = text; break; case FLP_Text_CommentRTF: { QByteArray ba( text, text_len ); QBuffer buf( &ba ); buf.open( QBuffer::ReadOnly ); lineno = 0; attr_clear_all(); op = html_init(); hash_init(); Word * word = word_read( &buf ); QString out; word_print( word, out ); word_free( word ); op_free( op ); p.projectNotes = out; outstring = ""; break; } case FLP_Text_Title: p.projectTitle = text; break; case FLP_Text_SampleFileName: { QString f = text; /* if( f.mid( 1, 11 ) == "Instruments" ) { f = "\\Patches\\Packs" + f.mid( 12 ); }*/ f.replace( '\\', QDir::separator() ); if( QFileInfo( configManager::inst()->flDir() + "/Data/" ).exists() ) { f = configManager::inst()->flDir() + "/Data/" + f; } else { // FL 3 compat f = configManager::inst()->flDir() + "/Samples/" + f; } cc->sampleFileName = f; break; } case FLP_Text_Version: { qDebug( "FLP version: %s\n", text ); p.versionString = text; QStringList l = p.versionString.split( '.' ); p.version = ( l[0].toInt() << 8 ) + ( l[1].toInt() << 4 ) + ( l[2].toInt() << 0 ); if( p.version >= 0x600 ) { p.versionSpecificFactor = 100; } break; } case FLP_Text_PluginName: if( mappedPluginTypes. contains( QString( text ).toLower() ) ) { const FL_Plugin::PluginTypes t = static_cast( mappedPluginTypes[QString( text ).toLower()] ); if( t > FL_Plugin::EffectPlugin ) { qDebug( "recognized new effect %s\n", text ); p.effects.push_back( FL_Effect( t ) ); } else if( cc ) { qDebug( "recognized new plugin %s\n", text ); cc->pluginType = t; } last_plugin_type = t; } else { qDebug( "unsupported plugin: %s!\n", text ); } break; case FLP_Text_EffectChanName: ++p.currentEffectChannel; if( p.currentEffectChannel <= NumFLFxChannels ) { p.effectChannels[p.currentEffectChannel].name = text; } break; case FLP_Text_Delay: qDebug( "delay data: " ); // pi[1] seems to be volume or similiar and // needs to be divided // by p.versionSpecificFactor dump_mem( text, text_len ); break; case FLP_Text_TS404Params: if( cc && cc->pluginType == FL_Plugin::UnknownPlugin && cc->pluginSettings == NULL ) { cc->pluginSettings = new char[text_len]; memcpy( cc->pluginSettings, text, text_len ); cc->pluginSettingsLength = text_len; cc->pluginType = FL_Plugin::TS404; } break; case FLP_Text_NewPlugin: if( last_plugin_type > FL_Plugin::EffectPlugin ) { FL_Effect * e = &p.effects.last(); e->fxChannel = puc[0]; e->fxPos = puc[4]; qDebug( "new effect: " ); } else { qDebug( "new plugin: " ); } dump_mem( text, text_len ); break; case FLP_Text_PluginParams: if( cc && cc->pluginSettings == NULL ) { cc->pluginSettings = new char[text_len]; memcpy( cc->pluginSettings, text, text_len ); cc->pluginSettingsLength = text_len; } qDebug( "plugin params: " ); dump_mem( text, text_len ); break; case FLP_Text_ChanParams: cc->arpDir = mappedArpDir[pi[10]]; cc->arpRange = pi[11]; cc->selectedArp = pi[12]; if( cc->selectedArp < 8 ) { const int mappedArps[] = { 0, 1, 5, 6, 2, 3, 4 } ; cc->selectedArp = mappedArps[cc->selectedArp]; } cc->arpTime = ( ( pi[13]+1 ) * p.tempo ) / ( 4*16 ) + 1; cc->arpGate = ( pi[14] * 100.0f ) / 48.0f; cc->arpEnabled = pi[10] > 0; qDebug( "channel params: " ); dump_mem( text, text_len ); break; case FLP_Text_EnvLfoParams: { const float scaling = 1.0 / 65536.0f; FL_Channel_Envelope e; switch( cc->envelopes.size() ) { case 1: e.target = InstrumentSoundShaping::Volume; break; case 2: e.target = InstrumentSoundShaping::Cut; break; case 3: e.target = InstrumentSoundShaping::Resonance; break; default: e.target = InstrumentSoundShaping::NumTargets; break; } e.predelay = pi[2] * scaling; e.attack = pi[3] * scaling; e.hold = pi[4] * scaling; e.decay = pi[5] * scaling; e.sustain = 1-pi[6] / 128.0f; e.release = pi[7] * scaling; if( e.target == InstrumentSoundShaping::Volume ) { e.amount = pi[1] ? 1 : 0; } else { e.amount = pi[8] / 128.0f; } // e.lfoAmount = pi[11] / 128.0f; cc->envelopes.push_back( e ); qDebug( "envelope and lfo params:\n" ); dump_mem( text, text_len ); break; } case FLP_Text_BasicChanParams: cc->volume = ( pi[1] / p.versionSpecificFactor ) * 100 / 128; cc->panning = ( pi[0] / p.versionSpecificFactor ) * 200 / 128 - PanningRight; if( text_len > 12 ) { cc->filterType = mappedFilter[puc[20]]; cc->filterCut = puc[12] / ( 255.0f * 2.5f ); cc->filterRes = 0.01f + puc[16] / ( 256.0f * 2 ); cc->filterEnabled = ( puc[13] == 0 ); if( puc[20] >= 6 ) { cc->filterCut *= 0.5f; } } qDebug( "basic chan params: " ); dump_mem( text, text_len ); break; case FLP_Text_OldFilterParams: cc->filterType = mappedFilter[puc[8]]; cc->filterCut = puc[0] / ( 255.0f * 2.5 ); cc->filterRes = 0.1f + puc[4] / ( 256.0f * 2 ); cc->filterEnabled = ( puc[1] == 0 ); if( puc[8] >= 6 ) { cc->filterCut *= 0.5; } qDebug( "old filter params: " ); dump_mem( text, text_len ); break; case FLP_Text_AutomationData: { const int bpae = 12; const int imax = text_len / bpae; qDebug( "automation data (%d items)\n", imax ); for( int i = 0; i < imax; ++i ) { FL_Automation a; a.pos = pi[3*i+0] / ( 4*ppq / DefaultTicksPerTact ); a.value = pi[3*i+2]; a.channel = pi[3*i+1] >> 16; a.control = pi[3*i+1] & 0xffff; if( a.channel >= 0 && a.channel < p.numChannels ) { qDebug( "add channel %d at %d val %d control:%d\n", a.channel, a.pos, a.value, a.control ); p.channels[a.channel].automationData += a; } // dump_mem( text+i*bpae, bpae ); } break; } case FLP_Text_PatternNotes: { //dump_mem( text, text_len ); const int bpn = 20; const int imax = ( text_len + bpn - 1 ) / bpn; for( int i = 0; i < imax; ++i ) { int ch = *( puc + i*bpn + 6 ); int pan = *( puc + i*bpn + 16 ); int vol = *( puc + i*bpn + 17 ); int pos = *( (int *)( puc + i*bpn ) ); int key = *( puc + i*bpn + 12 ); int len = *( (int*)( puc + i*bpn + 8 ) ); pos /= (4*ppq) / DefaultTicksPerTact; len /= (4*ppq) / DefaultTicksPerTact; note n( len, pos, key, vol * 100 / 128, pan*200 / 128 - 100 ); if( ch < p.numChannels ) { p.channels[ch].notes.push_back( qMakePair( p.currentPattern, n ) ); } else { qDebug( "invalid " ); } qDebug( "note: " ); dump_mem( text+i*bpn, bpn ); } break; } case FLP_Text_ChanGroupName: qDebug( "channel group name: %s\n", text ); break; // case 216: pi[2] /= p.versionSpecificFactor // case 229: pi[1] /= p.versionSpecificFactor case FLP_Event_EffectParams: { enum FLP_EffectParams { EffectParamVolume = 0x1fc0 } ; const int bpi = 12; const int imax = text_len / bpi; for( int i = 0; i < imax; ++i ) { const int param = pi[i*3+1] & 0xffff; const int ch = ( pi[i*3+1] >> 22 ) & 0x7f; if( ch < 0 || ch > NumFLFxChannels ) { continue; } const int val = pi[i*3+2]; if( param == EffectParamVolume ) { p.effectChannels[ch].volume = ( val / p.versionSpecificFactor ) * 100 / 128; } else { qDebug( "FX-ch: %d param: %x value:%x\n", ch, param, val ); } } break; } case FLP_Event_PlaylistItems: // playlist items { const int bpi = 28; const int imax = text_len / bpi; for( int i = 0; i < imax; ++i ) { const int pos = pi[i*bpi/sizeof(int)+0] / ( (4*ppq) / DefaultTicksPerTact ); const int len = pi[i*bpi/sizeof(int)+2] / ( (4*ppq) / DefaultTicksPerTact ); const int pat = pi[i*bpi/sizeof(int)+3] & 0xfff; if( pat > 2146 && pat <= 2278 ) // whatever these magic numbers are for... { FL_PlayListItem i; i.position = pos; i.length = len; i.pattern = 2278 - pat; p.playListItems += i; } else { qDebug( "unknown playlist item: " ); dump_mem( text+i*bpi, bpi ); } } break; } default: if( ev >= FLP_Text ) { qDebug( "!! unhandled text (ev: %d, len: %d): ", ev, text_len ); dump_mem( text, text_len ); } else { qDebug( "!! handling of FLP-event %d not implemented yet " "(data=%d).\n", ev, data ); } break; } } // now create a project from FL_Project data structure engine::getSong()->clearProject(); // configure the mixer for( int i=0; icreateChannel(); } engine::fxMixerView()->refreshDisplay(); // set global parameters engine::getSong()->setMasterVolume( p.mainVolume ); engine::getSong()->setMasterPitch( p.mainPitch ); engine::getSong()->setTempo( p.tempo ); // set project notes engine::getProjectNotes()->setText( p.projectNotes ); progressDialog.setMaximum( p.maxPatterns + p.channels.size() + p.effects.size() ); int cur_progress = 0; // create BB tracks QList bb_tracks; QList i_tracks; while( engine::getBBTrackContainer()->numOfBBs() <= p.maxPatterns ) { const int cur_pat = bb_tracks.size(); bbTrack * bbt = dynamic_cast( track::create( track::BBTrack, engine::getSong() ) ); if( p.patternNames.contains( cur_pat ) ) { bbt->setName( p.patternNames[cur_pat] ); } bb_tracks += bbt; progressDialog.setValue( ++cur_progress ); qApp->processEvents(); } // create instrument-track for each channel for( QList::Iterator it = p.channels.begin(); it != p.channels.end(); ++it ) { InstrumentTrack * t = dynamic_cast( track::create( track::InstrumentTrack, engine::getBBTrackContainer() ) ); engine::getBBTrackContainer()->updateAfterTrackAdd(); i_tracks.push_back( t ); switch( it->pluginType ) { case FL_Plugin::Fruity_3x_Osc: it->instrumentPlugin = t->loadInstrument( "tripleoscillator" ); break; case FL_Plugin::Plucked: it->instrumentPlugin = t->loadInstrument( "vibedstrings" ); break; case FL_Plugin::FruitKick: it->instrumentPlugin = t->loadInstrument( "kicker" ); break; case FL_Plugin::TS404: it->instrumentPlugin = t->loadInstrument( "lb302" ); break; case FL_Plugin::FruitySoundfontPlayer: it->instrumentPlugin = t->loadInstrument( "sf2player" ); break; case FL_Plugin::Sampler: case FL_Plugin::UnknownPlugin: default: it->instrumentPlugin = t->loadInstrument( "audiofileprocessor" ); break; } processPluginParams( &( *it ) ); t->setName( it->name ); t->volumeModel()->setValue( it->volume ); t->panningModel()->setValue( it->panning ); t->baseNoteModel()->setValue( it->baseNote ); t->effectChannelModel()->setValue( it->fxChannel ); InstrumentSoundShaping * iss = &t->m_soundShaping; iss->m_filterModel.setValue( it->filterType ); iss->m_filterCutModel.setValue( it->filterCut * ( iss->m_filterCutModel.maxValue() - iss->m_filterCutModel.minValue() ) + iss->m_filterCutModel.minValue() ); iss->m_filterResModel.setValue( it->filterRes * ( iss->m_filterResModel.maxValue() - iss->m_filterResModel.minValue() ) + iss->m_filterResModel.minValue() ); iss->m_filterEnabledModel.setValue( it->filterEnabled ); for( QList::iterator jt = it->envelopes.begin(); jt != it->envelopes.end(); ++jt ) { if( jt->target != InstrumentSoundShaping::NumTargets ) { EnvelopeAndLfoParameters * elp = iss->m_envLfoParameters[jt->target]; elp->m_predelayModel.setValue( jt->predelay ); elp->m_attackModel.setValue( jt->attack ); elp->m_holdModel.setValue( jt->hold ); elp->m_decayModel.setValue( jt->decay ); elp->m_sustainModel.setValue( jt->sustain ); elp->m_releaseModel.setValue( jt->release ); elp->m_amountModel.setValue( jt->amount ); elp->updateSampleVars(); } } InstrumentFunctionArpeggio * arp = &t->m_arpeggio; arp->m_arpDirectionModel.setValue( it->arpDir ); arp->m_arpRangeModel.setValue( it->arpRange ); arp->m_arpModel.setValue( it->selectedArp ); arp->m_arpTimeModel.setValue( it->arpTime ); arp->m_arpGateModel.setValue( it->arpGate ); arp->m_arpEnabledModel.setValue( it->arpEnabled ); // process all dots for( QList::ConstIterator jt = it->dots.begin(); jt != it->dots.end(); ++jt ) { const int pat = *jt / 256; const int pos = *jt % 256; Pattern* p = dynamic_cast( t->getTCO( pat ) ); if( p == NULL ) { continue; } p->setStep( pos, true ); } // TODO: use future layering feature if( it->layerParent >= 0 ) { it->notes += p.channels[it->layerParent].notes; } // process all notes for( FL_Channel::noteVector::ConstIterator jt = it->notes.begin(); jt != it->notes.end(); ++jt ) { const int pat = jt->first; if( pat > 100 ) { continue; } Pattern* p = dynamic_cast( t->getTCO( pat ) ); if( p != NULL ) { p->addNote( jt->second, false ); } } // process automation data for( QList::ConstIterator jt = it->automationData.begin(); jt != it->automationData.end(); ++jt ) { AutomatableModel * m = NULL; float value = jt->value; bool scale = false; switch( jt->control ) { case FL_Automation::ControlVolume: m = t->volumeModel(); value *= ( 100.0f / 128.0f ) / p.versionSpecificFactor; break; case FL_Automation::ControlPanning: m = t->panningModel(); value = ( value / p.versionSpecificFactor ) *200/128 - PanningRight; break; case FL_Automation::ControlPitch: m = t->pitchModel(); break; case FL_Automation::ControlFXChannel: m = t->effectChannelModel(); value = value*200/128 - PanningRight; break; case FL_Automation::ControlFilterCut: scale = true; m = &t->m_soundShaping.m_filterCutModel; value /= ( 255 * 2.5f ); break; case FL_Automation::ControlFilterRes: scale = true; m = &t->m_soundShaping.m_filterResModel; value = 0.1f + value / ( 256.0f * 2 ); break; case FL_Automation::ControlFilterType: m = &t->m_soundShaping.m_filterModel; value = mappedFilter[jt->value]; break; default: qDebug( "handling automation data of " "control %d not implemented " "yet\n", jt->control ); break; } if( m ) { if( scale ) { value = m->minValue() + value * ( m->maxValue() - m->minValue() ); } AutomationPattern * p = AutomationPattern::globalAutomationPattern( m ); p->putValue( jt->pos, value, false ); } } progressDialog.setValue( ++cur_progress ); qApp->processEvents(); } // process all effects EffectKeyList effKeys; Plugin::DescriptorList pluginDescs; Plugin::getDescriptorsOfAvailPlugins( pluginDescs ); for( Plugin::DescriptorList::ConstIterator it = pluginDescs.begin(); it != pluginDescs.end(); ++it ) { if( it->type != Plugin::Effect ) { continue; } if( it->subPluginFeatures ) { it->subPluginFeatures->listSubPluginKeys( &( *it ), effKeys ); } else { effKeys << EffectKey( &( *it ), it->name ); } } for( int fx_ch = 0; fx_ch <= NumFLFxChannels ; ++fx_ch ) { FxChannel * ch = engine::fxMixer()->effectChannel( fx_ch ); if( !ch ) { continue; } FL_EffectChannel * flch = &p.effectChannels[fx_ch]; if( !flch->name.isEmpty() ) { ch->m_name = flch->name; } ch->m_volumeModel.setValue( flch->volume / 100.0f ); ch->m_muteModel.setValue( flch->isMuted ); } for( QList::ConstIterator it = p.effects.begin(); it != p.effects.end(); ++it ) { QString effName; switch( it->pluginType ) { case FL_Plugin::Fruity7BandEq: effName = "C* Eq2x2"; break; case FL_Plugin::FruityBassBoost: effName = "BassBooster"; break; case FL_Plugin::FruityChorus: effName = "TAP Chorus"; break; case FL_Plugin::FruityCompressor: //effName = "C* Compress"; effName = "Fast Lookahead limiter"; break; case FL_Plugin::FruityDelay: case FL_Plugin::FruityDelay2: // effName = "Feedback Delay Line (Maximum Delay 5s)"; break; case FL_Plugin::FruityBloodOverdrive: case FL_Plugin::FruityFastDist: case FL_Plugin::FruitySoftClipper: effName = "C* Clip"; break; case FL_Plugin::FruityFastLP: effName = "Low Pass Filter"; break; case FL_Plugin::FruityPhaser: effName = "C* PhaserI"; break; case FL_Plugin::FruityReeverb: effName = "C* Plate2x2"; break; case FL_Plugin::FruitySpectroman: effName = "Spectrum Analyzer"; break; default: break; } if( effName.isEmpty() || it->fxChannel < 0 || it->fxChannel > NumFLFxChannels ) { continue; } EffectChain * ec = &engine::fxMixer()-> effectChannel( it->fxChannel )->m_fxChain; qDebug( "adding %s to %d\n", effName.toUtf8().constData(), it->fxChannel ); for( EffectKeyList::Iterator jt = effKeys.begin(); jt != effKeys.end(); ++jt ) { if( QString( jt->desc->displayName ).contains( effName ) || ( jt->desc->subPluginFeatures != NULL && jt->name.contains( effName ) ) ) { qDebug( "instantiate %s\n", jt->desc->name ); ::Effect * e = Effect::instantiate( jt->desc->name, ec, &( *jt ) ); ec->appendEffect( e ); ec->setEnabled( true ); break; } } progressDialog.setValue( ++cur_progress ); qApp->processEvents(); } // process all playlist-items for( QList::ConstIterator it = p.playListItems.begin(); it != p.playListItems.end(); ++it ) { if( it->pattern > p.maxPatterns ) { continue; } trackContentObject * tco = bb_tracks[it->pattern]->createTCO( MidiTime() ); tco->movePosition( it->position ); if( it->length != DefaultTicksPerTact ) { tco->changeLength( it->length ); } } // set current pattern if( p.activeEditPattern < engine::getBBTrackContainer()->numOfBBs() ) { engine::getBBTrackContainer()->setCurrentBB( p.activeEditPattern ); } // restore journalling settings engine::projectJournal()->setJournalling( is_journ ); return true; } void FlpImport::processPluginParams( FL_Channel * _ch ) { qDebug( "plugin params for plugin %d (%d bytes): ", _ch->pluginType, _ch->pluginSettingsLength ); dump_mem( _ch->pluginSettings, _ch->pluginSettingsLength ); switch( _ch->pluginType ) { case FL_Plugin::Sampler: // AudioFileProcessor loaded { QDomDocument dd; QDomElement de = dd.createElement( _ch->instrumentPlugin->nodeName() ); de.setAttribute( "reversed", _ch->sampleReversed ); de.setAttribute( "amp", _ch->sampleAmp ); de.setAttribute( "looped", _ch->sampleUseLoopPoints ); de.setAttribute( "sframe", 0 ); de.setAttribute( "eframe", 1 ); de.setAttribute( "src", _ch->sampleFileName ); _ch->instrumentPlugin->restoreState( de ); break; } case FL_Plugin::TS404: // LB302 loaded break; case FL_Plugin::Fruity_3x_Osc: // TripleOscillator loaded { const Oscillator::WaveShapes mapped_3xOsc_Shapes[] = { Oscillator::SineWave, Oscillator::TriangleWave, Oscillator::SquareWave, Oscillator::SawWave, Oscillator::SquareWave, // square-sin Oscillator::WhiteNoise, Oscillator::UserDefinedWave } ; QDomDocument dd; QDomElement de = dd.createElement( _ch->instrumentPlugin->nodeName() ); de.setAttribute( "modalgo1", Oscillator::SignalMix ); de.setAttribute( "modalgo2", Oscillator::SignalMix ); int ws = Oscillator::UserDefinedWave; for( int i = 0; i < 3; ++i ) { const int32_t * d = (const int32_t *) ( _ch->pluginSettings + i * 28 ); QString is = QString::number( i ); de.setAttribute( "vol" + is, QString::number( d[0] * 100 / ( 3 * 128 ) ) ); de.setAttribute( "pan" + is, QString::number( d[1] ) ); de.setAttribute( "coarse" + is, QString::number( d[3] ) ); de.setAttribute( "finel" + is, QString::number( d[4] - d[6] / 2 ) ); de.setAttribute( "finer" + is, QString::number( d[4] + d[6] / 2 ) ); de.setAttribute( "stphdetun" + is, QString::number( d[5] ) ); const int s = mapped_3xOsc_Shapes[d[2]]; de.setAttribute( "wavetype" + is, QString::number( s ) ); if( s != Oscillator::UserDefinedWave ) { ws = s; } } if( ws == Oscillator::UserDefinedWave ) { de.setAttribute( "wavetype0", Oscillator::SawWave ); } de.setAttribute( "vol0", QString::number( 100/2 ) ); // now apply the prepared plugin-state _ch->instrumentPlugin->restoreState( de ); break; } case FL_Plugin::Layer: // nothing to do break; case FL_Plugin::Plucked: // Vibed loaded // TODO: setup vibed-instrument break; case FL_Plugin::UnknownPlugin: default: qDebug( "handling of plugin params not implemented " "for current plugin\n" ); break; } } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new FlpImport( QString::fromUtf8( static_cast( _data ) ) ); } } lmms-1.1.3/plugins/flp_import/FlpImport.h000066400000000000000000000040221247673406200204160ustar00rootroot00000000000000/* * FlpImport.h - support for importing FLP-files * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _FLP_IMPORT_H #define _FLP_IMPORT_H #include #include #include #include "ImportFilter.h" #include "note.h" class instrument; struct FL_Channel; class FlpImport : public ImportFilter { public: FlpImport( const QString & _file ); virtual ~FlpImport(); virtual PluginView * instantiateView( QWidget * ) { return NULL; } private: virtual bool tryImport( TrackContainer* tc ); void processPluginParams( FL_Channel * _ch ); inline int readInt( int _bytes ) { int c, value = 0; do { c = readByte(); if( c == -1 ) { return( -1 ); } value = ( value << 8 ) | c; } while( --_bytes ); return( value ); } inline int32_t read32LE() { int value = readByte(); value |= readByte() << 8; value |= readByte() << 16; value |= readByte() << 24; return( value ); } inline int32_t read16LE() { int value = readByte(); value |= readByte() << 8; return( value ); } inline int32_t readID() { return( read32LE() ); } inline void skip( int _bytes ) { while( _bytes > 0 ) { readByte(); --_bytes; } } } ; #endif lmms-1.1.3/plugins/flp_import/unrtf.cpp000066400000000000000000000031131247673406200201730ustar00rootroot00000000000000/* * unrtf.cpp - integration of UnRTF * * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lmmsconfig.h" #include #include #include extern "C" { // unrtf-stuff #include "defs.h" #include "main.h" #include "html.h" #include "word.h" #include "hash.h" #include "convert.h" #include "attr.h" int lineno = 0; #define inline_mode 0 #define debug_mode 0 #define nopict_mode 1 #define verbose_mode 0 #define simple_mode 0 #define no_remap_mode 0 QString outstring; short numchar_table; OutputPersonality * op = NULL; // include unrtf-source #include "attr.c" #include "convert.c" #include "error.c" #include "hash.c" #include "html.c" #include "ur_malloc.c" #include "output.c" #include "parse.c" #include "util.c" #include "word.c" } lmms-1.1.3/plugins/flp_import/unrtf/000077500000000000000000000000001247673406200174715ustar00rootroot00000000000000lmms-1.1.3/plugins/flp_import/unrtf/attr.c000066400000000000000000000405011247673406200206070ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: attr * Author name: Zachary Smith * Create date: 01 Aug 01 * Purpose: Character attribute stack. *---------------------------------------------------------------------- * Changes: * 01 Aug 01, tuorfa@yahoo.com: moved code over from convert.c * 06 Aug 01, tuorfa@yahoo.com: added several font attributes. * 18 Sep 01, tuorfa@yahoo.com: added AttrStack (stack of stacks) paradigm * 22 Sep 01, tuorfa@yahoo.com: added comment blocks * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: fixed fore/background_begin error * and updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #include "ur_malloc.h" #include "defs.h" #include "error.h" #include "attr.h" #include "main.h" extern void starting_body(); extern void starting_text(); extern QString outstring; extern int simulate_allcaps; extern int simulate_smallcaps; #define MAX_ATTRS (10000) /* For each RTF text block (the text within braces) we must keep * an AttrStack which is a stack of attributes and their optional * parameter. Since RTF text blocks are nested, these make up a * stack of stacks. And, since RTF text blocks inherit attributes * from parent blocks, all new AttrStacks do the same from * their parent AttrStack. */ typedef struct _stack { unsigned char attr_stack[MAX_ATTRS]; char *attr_stack_params[MAX_ATTRS]; int tos; struct _stack *next; } AttrStack; static AttrStack *stack_of_stacks = NULL; static AttrStack *stack_of_stacks_top = NULL; void attr_clear_all() { stack_of_stacks = NULL; stack_of_stacks_top = NULL; } /*======================================================================== * Name: attr_express_begin * Purpose: Print the HTML for beginning an attribute. * Args: Attribute number, optional string parameter. * Returns: None. *=======================================================================*/ void attr_express_begin (int attr, const char* param) { switch(attr) { case ATTR_BOLD: outstring+=QString().sprintf("%s", op->bold_begin); break; case ATTR_ITALIC: outstring+=QString().sprintf("%s", op->italic_begin); break; /* Various underlines, they all resolve to HTML's */ case ATTR_THICK_UL: case ATTR_WAVE_UL: case ATTR_DASH_UL: case ATTR_DOT_UL: case ATTR_DOT_DASH_UL: case ATTR_2DOT_DASH_UL: case ATTR_WORD_UL: case ATTR_UNDERLINE: outstring+=QString().sprintf("%s", op->underline_begin); break; case ATTR_DOUBLE_UL: outstring+=QString().sprintf("%s", op->dbl_underline_begin); break; case ATTR_FONTSIZE: op_begin_std_fontsize (op, atoi (param)); break; case ATTR_FONTFACE: outstring+=QString().sprintf(op->font_begin,param); break; case ATTR_FOREGROUND: outstring+=QString().sprintf(op->foreground_begin, param); break; case ATTR_BACKGROUND: if (!simple_mode) outstring+=QString().sprintf(op->background_begin,param); break; case ATTR_SUPER: outstring+=QString().sprintf("%s", op->superscript_begin); break; case ATTR_SUB: outstring+=QString().sprintf("%s", op->subscript_begin); break; case ATTR_STRIKE: outstring+=QString().sprintf("%s", op->strikethru_begin); break; case ATTR_DBL_STRIKE: outstring+=QString().sprintf("%s", op->dbl_strikethru_begin); break; case ATTR_EXPAND: outstring+=QString().sprintf(op->expand_begin, param); break; case ATTR_OUTLINE: outstring+=QString().sprintf("%s", op->outline_begin); break; case ATTR_SHADOW: outstring+=QString().sprintf("%s", op->shadow_begin); break; case ATTR_EMBOSS: outstring+=QString().sprintf("%s", op->emboss_begin); break; case ATTR_ENGRAVE: outstring+=QString().sprintf("%s", op->engrave_begin); break; case ATTR_CAPS: if (op->simulate_all_caps) simulate_allcaps = true; break; case ATTR_SMALLCAPS: if (op->simulate_small_caps) simulate_smallcaps = true; else { if (op->small_caps_begin) outstring+=QString().sprintf("%s", op->small_caps_begin); } break; } } /*======================================================================== * Name: attr_express_end * Purpose: Print HTML to complete an attribute. * Args: Attribute number. * Returns: None. *=======================================================================*/ void attr_express_end (int attr, char *param) { switch(attr) { case ATTR_BOLD: outstring+=QString().sprintf("%s", op->bold_end); break; case ATTR_ITALIC: outstring+=QString().sprintf("%s", op->italic_end); break; /* Various underlines, they all resolve to HTML's */ case ATTR_THICK_UL: case ATTR_WAVE_UL: case ATTR_DASH_UL: case ATTR_DOT_UL: case ATTR_DOT_DASH_UL: case ATTR_2DOT_DASH_UL: case ATTR_WORD_UL: case ATTR_UNDERLINE: outstring+=QString().sprintf("%s", op->underline_end); break; case ATTR_DOUBLE_UL: outstring+=QString().sprintf("%s", op->dbl_underline_end); break; case ATTR_FONTSIZE: op_end_std_fontsize (op, atoi (param)); break; case ATTR_FONTFACE: outstring+=QString().sprintf("%s", op->font_end); break; case ATTR_FOREGROUND: outstring+=QString().sprintf("%s", op->foreground_end); break; case ATTR_BACKGROUND: if (!simple_mode) outstring+=QString().sprintf("%s", op->background_end); break; case ATTR_SUPER: outstring+=QString().sprintf("%s", op->superscript_end); break; case ATTR_SUB: outstring+=QString().sprintf("%s", op->subscript_end); break; case ATTR_STRIKE: outstring+=QString().sprintf("%s", op->strikethru_end); break; case ATTR_DBL_STRIKE: outstring+=QString().sprintf("%s", op->dbl_strikethru_end); break; case ATTR_OUTLINE: outstring+=QString().sprintf("%s", op->outline_end); break; case ATTR_SHADOW: outstring+=QString().sprintf("%s", op->shadow_end); break; case ATTR_EMBOSS: outstring+=QString().sprintf("%s", op->emboss_end); break; case ATTR_ENGRAVE: outstring+=QString().sprintf("%s", op->engrave_end); break; case ATTR_EXPAND: outstring+=QString().sprintf("%s", op->expand_end); break; case ATTR_CAPS: if (op->simulate_all_caps) simulate_allcaps = false; break; case ATTR_SMALLCAPS: if (op->simulate_small_caps) simulate_smallcaps = false; else { if (op->small_caps_end) outstring+=QString().sprintf("%s", op->small_caps_end); } break; } } /*======================================================================== * Name: attr_push * Purpose: Pushes an attribute onto the current attribute stack. * Args: Attribute number, optional string parameter. * Returns: None. *=======================================================================*/ void attr_push(int attr, const char* param) { AttrStack *stack = stack_of_stacks_top; if (!stack) { warning_handler("No stack to push attribute onto"); return; } if (stack->tos >= MAX_ATTRS) { fprintf(stderr, "Too many attributes!\n"); return; } /* Make sure it's understood we're in the section. */ /* KLUDGE */ starting_body(); starting_text(); ++stack->tos; stack->attr_stack[stack->tos] = attr; if (param) stack->attr_stack_params[stack->tos] = my_strdup(param); else stack->attr_stack_params[stack->tos] = NULL; attr_express_begin(attr, param); } #if 1 /* daved 0.20.2 */ /*======================================================================== * Name: attr_get_param * Purpose: Reads an attribute from the current attribute stack. * Args: Attribute number * Returns: string. *=======================================================================*/ char * attr_get_param(int attr) { int i; AttrStack *stack = stack_of_stacks_top; if (!stack) { warning_handler("No stack to get attribute from"); return NULL; } i=stack->tos; while (i>=0) { if(stack->attr_stack [i] == attr) { if(stack->attr_stack_params [i] != NULL) return stack->attr_stack_params [i]; else return NULL; } i--; } return NULL; } #endif /*======================================================================== * Name: attrstack_copy_all * Purpose: Routine to copy all attributes from one stack to another. * Args: Two stacks. * Returns: None. *=======================================================================*/ void attrstack_copy_all (AttrStack *src, AttrStack *dest) { int i; int total; CHECK_PARAM_NOT_NULL(src); CHECK_PARAM_NOT_NULL(dest); total = src->tos + 1; for (i=0; iattr_stack [i]; char *param=src->attr_stack_params [i]; dest->attr_stack[i] = attr; if (param) dest->attr_stack_params[i] = my_strdup (param); else dest->attr_stack_params[i] = NULL; } dest->tos = src->tos; } /*======================================================================== * Name: attrstack_unexpress_all * Purpose: Routine to un-express all attributes heretofore applied, * without removing any from the stack. * Args: Stack whost contents should be unexpressed. * Returns: None. * Notes: This is needed by attrstack_push, but also for \cell, which * often occurs within a brace group, yet HTML uses * which clear attribute info within that block. *=======================================================================*/ void attrstack_unexpress_all (AttrStack *stack) { int i; CHECK_PARAM_NOT_NULL(stack); i=stack->tos; while (i>=0) { int attr=stack->attr_stack [i]; char *param=stack->attr_stack_params [i]; attr_express_end (attr, param); i--; } } /*======================================================================== * Name: attrstack_push * Purpose: Creates a new attribute stack, pushes it onto the stack * of stacks, performs inheritance from previous stack. * Args: None. * Returns: None. *=======================================================================*/ void attrstack_push () { AttrStack *new_stack; AttrStack *prev_stack; new_stack = (AttrStack*) my_malloc (sizeof (AttrStack)); memset ((void*) new_stack, 0, sizeof (AttrStack)); prev_stack = stack_of_stacks_top; if (!stack_of_stacks) { stack_of_stacks = new_stack; } else { stack_of_stacks_top->next = new_stack; } stack_of_stacks_top = new_stack; new_stack->tos = -1; if (prev_stack) { attrstack_unexpress_all (prev_stack); attrstack_copy_all (prev_stack, new_stack); attrstack_express_all (); } } /*======================================================================== * Name: attr_pop * Purpose: Removes and undoes the effect of the top attribute of * the current AttrStack. * Args: The top attribute's number, for verification. * Returns: Success/fail flag. *=======================================================================*/ int attr_pop (int attr) { AttrStack *stack = stack_of_stacks_top; if (!stack) { warning_handler ("no stack to pop attribute from"); return false; } if(stack->tos>=0 && stack->attr_stack[stack->tos]==attr) { char *param = stack->attr_stack_params [stack->tos]; attr_express_end (attr, param); if (param) my_free(param); stack->tos--; return true; } else return false; } /*======================================================================== * Name: attr_read * Purpose: Reads but leaves in place the top attribute of the top * attribute stack. * Args: None. * Returns: Attribute number. *=======================================================================*/ int attr_read() { AttrStack *stack = stack_of_stacks_top; if (!stack) { warning_handler ("no stack to read attribute from"); return false; } if(stack->tos>=0) { int attr = stack->attr_stack [stack->tos]; return attr; } else return ATTR_NONE; } /*======================================================================== * Name: attr_drop_all * Purpose: Undoes all attributes that an AttrStack contains. * Args: None. * Returns: None. *=======================================================================*/ void attr_drop_all () { AttrStack *stack = stack_of_stacks_top; if (!stack) { warning_handler ("no stack to drop all attributes from"); return; } while (stack->tos>=0) { char *param=stack->attr_stack_params [stack->tos]; if (param) my_free(param); stack->tos--; } } /*======================================================================== * Name: attrstack_drop * Purpose: Removes the top AttrStack from the stack of stacks, undoing * all attributes that it had in it. * Args: None. * Returns: None. *=======================================================================*/ void attrstack_drop () { AttrStack *stack = stack_of_stacks_top; AttrStack *prev_stack; if (!stack) { warning_handler ("no attr-stack to drop"); return; } attr_pop_all (); prev_stack = stack_of_stacks; while(prev_stack && prev_stack->next && prev_stack->next != stack) prev_stack = prev_stack->next; if (prev_stack) { stack_of_stacks_top = prev_stack; prev_stack->next = NULL; } else { stack_of_stacks_top = NULL; stack_of_stacks = NULL; } my_free ((char*) stack); attrstack_express_all (); } /*======================================================================== * Name: attr_pop_all * Purpose: Routine to undo all attributes heretofore applied, * also reversing the order in which they were applied. * Args: None. * Returns: None. *=======================================================================*/ void attr_pop_all() { AttrStack *stack = stack_of_stacks_top; if (!stack) { warning_handler ("no stack to pop from"); return; } while (stack->tos>=0) { int attr=stack->attr_stack [stack->tos]; char *param=stack->attr_stack_params [stack->tos]; attr_express_end (attr,param); if (param) my_free(param); stack->tos--; } } /*======================================================================== * Name: attrstack_express_all * Purpose: Routine to re-express all attributes heretofore applied. * Args: None. * Returns: None. * Notes: This is needed by attrstack_push, but also for \cell, which * often occurs within a brace group, yet HTML uses * which clear attribute info within that block. *=======================================================================*/ void attrstack_express_all() { AttrStack *stack = stack_of_stacks_top; int i; if (!stack) { warning_handler ("no stack to pop from"); return; } i=0; while (i<=stack->tos) { int attr=stack->attr_stack [i]; char *param=stack->attr_stack_params [i]; attr_express_begin (attr, param); i++; } } /*======================================================================== * Name: attr_pop_dump * Purpose: Routine to un-express all attributes heretofore applied. * Args: None. * Returns: None. * Notes: This is needed for \cell, which often occurs within a * brace group, yet HTML uses which clear attribute * info within that block. *=======================================================================*/ void attr_pop_dump() { AttrStack *stack = stack_of_stacks_top; int i; if (!stack) return; i=stack->tos; while (i>=0) { int attr=stack->attr_stack [i]; attr_pop (attr); i--; } } lmms-1.1.3/plugins/flp_import/unrtf/attr.h000066400000000000000000000054451247673406200206240ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: attr * Author name: Zachary Smith * Create date: 1 Aug 2001 * Purpose: Definitions for attribute stack module. *---------------------------------------------------------------------- * Changes: * 01 Aug 01, tuorfa@yahoo.com: moved code over from convert.c * 06 Aug 01, tuorfa@yahoo.com: added several attributes * 18 Sep 01, tuorfa@yahoo.com: updates for AttrStack paradigm * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifndef _ATTR #define _ATTR enum { ATTR_NONE=0, ATTR_BOLD, ATTR_ITALIC, ATTR_UNDERLINE, ATTR_DOUBLE_UL, ATTR_WORD_UL, ATTR_THICK_UL, ATTR_WAVE_UL, ATTR_DOT_UL, ATTR_DASH_UL, ATTR_DOT_DASH_UL, ATTR_2DOT_DASH_UL, ATTR_FONTSIZE, ATTR_STD_FONTSIZE, ATTR_FONTFACE, ATTR_FOREGROUND, ATTR_BACKGROUND, ATTR_CAPS, ATTR_SMALLCAPS, ATTR_SHADOW, ATTR_OUTLINE, ATTR_EMBOSS, ATTR_ENGRAVE, ATTR_SUPER, ATTR_SUB, ATTR_STRIKE, ATTR_DBL_STRIKE, ATTR_EXPAND /* ATTR_CONDENSE */ }; extern void attr_clear_all(); extern void attr_push_core (int attr, char* param); extern void attr_pop_core (int attr); extern void attr_push(int attr, const char* param); extern void attrstack_push(); extern void attrstack_drop(); extern void attrstack_express_all(); extern int attr_pop(int attr); extern int attr_read(); extern void attr_drop_all (); extern void attr_pop_all(); extern void attr_pop_dump(); #if 1 /* daved 0.20.2 */ char * attr_get_param(int attr); #endif #endif lmms-1.1.3/plugins/flp_import/unrtf/convert.c000066400000000000000000003335731247673406200213330ustar00rootroot00000000000000 /*=========================================================================== GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 Zachary Thayer Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au ===========================================================================*/ /*---------------------------------------------------------------------- * Module name: convert * Author name: Zachary Smith * Create date: 24 Jul 01 * Purpose: Performs conversion from RTF to other formats. *---------------------------------------------------------------------- * Changes: * 24 Jul 01, tuorfa@yahoo.com: moved code over from word.c * 24 Jul 01, tuorfa@yahoo.com: fixed color table reference numbering. * 30 Jul 01, tuorfa@yahoo.com: moved hex convert to util.c * 30 Jul 01, tuorfa@yahoo.com: moved special expr tables to special.c * 30 Jul 01, tuorfa@yahoo.com: moved attribute stack to attr.c * 31 Jul 01, tuorfa@yahoo.com: began addition of hash of rtf commands * 01 Aug 01, tuorfa@yahoo.com: finished bulk of rtf command hash * 03 Aug 01, tuorfa@yahoo.com: removed no-op hash entries to save space * 03 Aug 01, tuorfa@yahoo.com: code to ignore rest of groups for \*, etc * 03 Aug 01, tuorfa@yahoo.com: fixed para-alignnot being cleared by \pard * 03 Aug 01, tuorfa@yahoo.com: added support for \keywords group * 03 Aug 01, tuorfa@yahoo.com: added dummy funcs for header/footer * 03 Aug 01, tuorfa@yahoo.com: began addition of hyperlink support * 04 Aug 01, tuorfa@yahoo.com: fixed debug string printing * 05 Aug 01, tuorfa@yahoo.com: added support for hyperlink data with \field * 06 Aug 01, tuorfa@yahoo.com: added support for several font attributes * 08 Aug 01, gommer@gmx.net: bugfix for picture storing mechanism * 08 Sep 01, tuorfa@yahoo.com: added use of UnRTF * 11 Sep 01, tuorfa@yahoo.com: added support for JPEG and PNG pictures * 19 Sep 01, tuorfa@yahoo.com: added output personality support * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 23 Sep 01, tuorfa@yahoo.com: fixed translation of \'XX expressions * 08 Oct 03, daved@physiol.usyd.edu.au: more special character code * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 29 Mar 05, daved@physiol.usyd.edu.au: more unicode support * 31 Mar 05, daved@physiol.usyd.edu.au: strcat security bug fixed * 06 Jan 06, marcossamaral@terra.com.br: patch from debian 0.19.3-1.1 * 03 Mar 06, daved@physiol.usyd.edu.au: fixed creation date spelling and added support for accented characters in titles from Laurent Monin * 09 Mar 06, daved@physiol.usyd.edu.au: don't print null post_trans * 18 Jun 06, daved@physiol.usyd.edu.au: fixed some incorrect comment_end * 18 Jun 06, frolovs@internet2.ru: codepage support * 31 Oct 07, jasp00@users.sourceforge.net: fixed several warnings * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 * 17 Dec 07, daved@physiol.usyd.edu.au: Italian month name spelling corrections # from David Santinoli *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_CTYPE_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "defs.h" #include "parse.h" #include "util.h" #include "ur_malloc.h" #include "main.h" #include "error.h" #include "word.h" #include "hash.h" #include "convert.h" #include "attr.h" static CodepageInfo codepages[14] = { /*-- cp850 --*/ { 850, { /* 0x80 */ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, /* 0x90 */ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192, /* 0xa0 */ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, /* 0xb0 */ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, /* 0xc0 */ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, /* 0xd0 */ 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce, 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, /* 0xe0 */ 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe, 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4, /* 0xf0 */ 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0, } }, /*-- cp866 --*/ { 866, { /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 */ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, /* 0xc0 */ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, /* 0xd0 */ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, /* 0xe0 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, /* 0xf0 */ 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0, } }, /*-- cp874 --*/ { 874, { /* 0x80 */ 0x20ac, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2026, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa0 */ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, /* 0xb0 */ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, /* 0xc0 */ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, /* 0xd0 */ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f, /* 0xe0 */ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, /* 0xf0 */ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, } }, /*-- cp1133 --*/ { 1133, { /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0 */ 0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa, 0x0e8a, 0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99, 0x0e9a, 0x0e9b, /* 0xb0 */ 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1, 0x0ea2, 0x0ea3, 0x0ea5, 0x0ea7, 0x0eab, 0x0ead, 0x0eae, 0xfffd, 0xfffd, 0xfffd, 0x0eaf, /* 0xc0 */ 0x0eb0, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, 0x0eb9, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd, 0xfffd, /* 0xd0 */ 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0x20ad, /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 */ 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7, 0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x00a2, 0x00ac, 0x00a6, 0xfffd, } }, /*-- cp1250 --*/ { 1250, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0xfffd, 0x201e, 0x2026, 0x2020, 0x2021, 0xfffd, 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0xfffd, 0x2122, 0x0161, 0x203a, 0x015b, 0x0165, 0x017e, 0x017a, /* 0xa0 */ 0x00a0, 0x02c7, 0x02d8, 0x0141, 0x00a4, 0x0104, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x015e, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x017b, /* 0xb0 */ 0x00b0, 0x00b1, 0x02db, 0x0142, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x0105, 0x015f, 0x00bb, 0x013d, 0x02dd, 0x013e, 0x017c, /* 0xc0 */ 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, /* 0xd0 */ 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, /* 0xe0 */ 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, /* 0xf0 */ 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, } }, /*-- cp1251 --*/ { 1251, { /* 0x80 */ 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, /* 0x90 */ 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, /* 0xa0 */ 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, /* 0xb0 */ 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, /* 0xc0 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, /* 0xd0 */ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, /* 0xe0 */ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, /* 0xf0 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, } }, /*-- cp1252 --*/ { 1252, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffd, 0x017d, 0xfffd, /* 0x90 */ #if 1 /* daved - don't process 93 & 94 as we want entities */ 0xfffd, 0x2018, 0x2019, 0, 0, 0x2022, 0x2013, 0x2014, #else 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, #endif 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffd, 0x017e, 0x0178, #if 1 /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #else /* daved experimenting */ /* 0xa0 */ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, /* 0xb0 */ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, /* 0xc0 */ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, /* 0xd0 */ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, /* 0xe0 */ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, /* 0xf0 */ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, #endif } }, /*-- cp1253 --*/ { 1253, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0xfffd, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0xfffd, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa0 */ 0x00a0, 0x0385, 0x0386, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x2015, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x00b5, 0x00b6, 0x00b7, 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, /* 0xc0 */ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, /* 0xd0 */ 0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, /* 0xe0 */ 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, /* 0xf0 */ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd, } }, /*-- 1254 --*/ { 1254, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffd, 0xfffd, 0xfffd, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffd, 0xfffd, 0x0178, /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0 */ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 */ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, } }, /*-- cp1255 --*/ { 1255, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa0 */ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, /* 0xc0 */ 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0xfffd, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, /* 0xd0 */ 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xe0 */ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0xf0 */ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd, } }, /*-- cp1256 --*/ { 1256, { /* 0x80 */ 0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, /* 0x90 */ 0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba, /* 0xa0 */ 0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f, /* 0xc0 */ 0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, /* 0xd0 */ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7, 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, /* 0xe0 */ 0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef, /* 0xf0 */ 0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7, 0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2, } }, { 1257, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0xfffd, 0x201e, 0x2026, 0x2020, 0x2021, 0xfffd, 0x2030, 0xfffd, 0x2039, 0xfffd, 0x00a8, 0x02c7, 0x00b8, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0xfffd, 0x2122, 0xfffd, 0x203a, 0xfffd, 0x00af, 0x02db, 0xfffd, /* 0xa0 */ 0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0xfffd, 0x00a6, 0x00a7, 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, /* 0xc0 */ 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, /* 0xd0 */ 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, /* 0xe0 */ 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, /* 0xf0 */ 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x02d9, } }, { 1258, { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0xfffd, 0x2039, 0x0152, 0xfffd, 0xfffd, 0xfffd, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0xfffd, 0x203a, 0x0153, 0xfffd, 0xfffd, 0x0178, /* 0xa0 */ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, /* 0xc0 */ 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x0300, 0x00cd, 0x00ce, 0x00cf, /* 0xd0 */ 0x0110, 0x00d1, 0x0309, 0x00d3, 0x00d4, 0x01a0, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x01af, 0x0303, 0x00df, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0301, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0x0111, 0x00f1, 0x0323, 0x00f3, 0x00f4, 0x01a1, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x01b0, 0x20ab, 0x00ff, } }, /*-- null --*/ { 0, { /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, }; //extern int nopict_mode; /* #define BINARY_ATTRS */ extern QString outstring; static int charset_type=CHARSET_ANSI; static CodepageInfo * charset_codepage; /* Nested tables aren't supported. */ static int coming_pars_that_are_tabular = 0; static int within_table = false; static int have_printed_row_begin=false; static int have_printed_cell_begin=false; static int have_printed_row_end=false; static int have_printed_cell_end=false; /* Previously in word_print_core function */ static int total_chars_this_line=0; /* for simulating \tab */ /* Paragraph alignment (kludge) */ enum { ALIGN_LEFT=0, ALIGN_RIGHT, ALIGN_CENTER, ALIGN_JUSTIFY }; /* This value is set by attr_push and attr_pop */ int simulate_smallcaps; int simulate_allcaps; /* Most pictures must be written to files. */ enum { PICT_UNKNOWN=0, PICT_WM, PICT_MAC, PICT_PM, PICT_DI, PICT_WB, PICT_JPEG, PICT_PNG, }; static int within_picture=false; static int picture_file_number=1; static char picture_path[255]; static int picture_width; static int picture_height; static int picture_bits_per_pixel=1; static int picture_type=PICT_UNKNOWN; static int picture_wmetafile_type; static const char *picture_wmetafile_type_str; static int have_printed_body=false; static int within_header=true; static char *hyperlink_base = NULL; void starting_body(); void starting_text(); #if 1 /* daved - 0.19.6 */ void print_with_special_exprs (char *s); #endif #if 0 /* daved - 0.19.0 removed in 0.19.5 */ char *entity(int symbol); #endif /*======================================================================== * Name: starting_body * Purpose: Switches output stream for writing document contents. * Args: None. * Returns: None. *=======================================================================*/ void starting_body () { if (!have_printed_body) { if (!inline_mode) { outstring+=QString().sprintf("%s", op->header_end); outstring+=QString().sprintf("%s", op->body_begin); } within_header = false; have_printed_body = true; } } /*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/ static const char *month_strings[12]= { #ifdef ENGLISH "January","February","March","April","May","June","July","August", "September","October","November","December" #endif #ifdef FRANCAIS "Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre", "Octobre","Novembre","Decembre" #endif #ifdef ITALIANO "Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno", "Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre" #endif #ifdef ESPANOL /* amaral - 0.19.2 */ "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto", "Septiembre","Octubre","Noviembre","Diciembre" #endif #ifdef DEUTCH "?","?","?","?","?","?","?","?", "?","?","?","?" #endif #ifdef PORTUGUES /* amaral - 0.19.2 */ "Janeiro","Fevereiro","Marco","Abril","Maio","Junho","Julho","Agosto", "Setembro","Outubro","Novembro","Dezembro" #endif }; /*======================================================================== * Name: word_dump_date * Purpose: Extracts date from an RTF input stream, writes it to * output stream. * Args: Word*, buffered RTF stream * Returns: None. *=======================================================================*/ void word_dump_date (Word *w) { int year=0, month=0, day=0, hour=0, minute=0; CHECK_PARAM_NOT_NULL(w); while (w) { char *s = word_string (w); if (*s == '\\') { ++s; if (!strncmp (s, "yr", 2) && isdigit(s[2])) { year = atoi (&s[2]); } else if (!strncmp (s, "mo", 2) && isdigit(s[2])) { month= atoi (&s[2]); } else if (!strncmp (s, "dy", 2) && isdigit(s[2])) { day= atoi (&s[2]); } else if (!strncmp (s, "min", 3) && isdigit(s[3])) { minute= atoi (&s[3]); } else if (!strncmp (s, "hr", 2) && isdigit(s[2])) { hour= atoi (&s[2]); } } w=w->next; } if (year && month && day) { outstring+=QString().sprintf("%d %s %d ", day, month_strings[month-1], year); } if (hour && minute) { outstring+=QString().sprintf("%02d:%02d ", hour, minute); } } /*-------------------------------------------------------------------*/ typedef struct { int num; char *name; } FontEntry; #define MAX_FONTS (8192) static FontEntry font_table[MAX_FONTS]; static int total_fonts=0; /*======================================================================== * Name: lookup_fontname * Purpose: Fetches the name of a font from the already-read font table. * Args: Font#. * Returns: Font name. *=======================================================================*/ char* lookup_fontname (int num) { int i; if (total_fonts) for(i=0;ichild)) { tmp = word_string(w2); if (!strncmp("\\f", tmp, 2)) { num = atoi(&tmp[2]); name[0] = 0; w2 = w2->next; while (w2) { tmp = word_string (w2); if (tmp && tmp[0] != '\\') { if (strlen(tmp) + strlen(name) > BUFSIZ - 1) { outstring+=QString().sprintf("Invalid font table entry\n"); name[0] = 0; } else strncat(name,tmp,sizeof(name) - strlen(name) - 1); } w2 = w2->next; } /* Chop the gall-derned semicolon. */ if ((tmp = strchr(name, ';'))) *tmp = 0; font_table[total_fonts].num=num; font_table[total_fonts].name=my_strdup(name); total_fonts++; } } w=w->next; } outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("font table contains %d fonts total",total_fonts); outstring+=QString().sprintf("%s",op->comment_end); if (debug_mode) { int i; outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("font table dump: \n"); for (i=0; icomment_end); } } /*======================================================================== * Name: process_index_entry * Purpose: Processes an index entry of an RTF file. * Args: Tree of words. * Returns: None. *=======================================================================*/ void process_index_entry (Word *w) { Word *w2; CHECK_PARAM_NOT_NULL(w); while(w) { if ((w2=w->child)) { char *str = word_string (w2); if (debug_mode && str) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("index entry word: %s ", str); outstring+=QString().sprintf("%s",op->comment_end); } } w=w->next; } } /*======================================================================== * Name: process_toc_entry * Purpose: Processes an index entry of an RTF file. * Args: Tree of words, flag to say whether to include a page#. * Returns: None. *=======================================================================*/ void process_toc_entry (Word *w, int include_page_num) { Word *w2; CHECK_PARAM_NOT_NULL(w); while(w) { if ((w2=w->child)) { char *str = word_string (w2); if (debug_mode && str) { outstring+=QString().sprintf("%s",op->comment_begin); printf("toc %s entry word: %s ", include_page_num ? "page#":"no page#", str); outstring+=QString().sprintf("%s",op->comment_end); } } w=w->next; } } /*======================================================================== * Name: process_info_group * Purpose: Processes the \info group of an RTF file. * Args: Tree of words. * Returns: None. *=======================================================================*/ void process_info_group (Word *w) { Word *child; #if 1 /* amaral - 0.19.2 */ /* CHECK_PARAM_NOT_NULL(w); */ if (!w) outstring+=QString().sprintf("AUTHOR'S COMMENT: \\info command is null!\n"); #endif while(w) { child = w->child; if (child) { Word *w2; char *s; s = word_string(child); if (!inline_mode) { if (!strcmp("\\title", s)) { outstring+=QString().sprintf("%s", op->document_title_begin); w2=child->next; while (w2) { char *s2 = word_string(w2); if (s2[0] != '\\') #if 1 /* daved 0.20.0 */ { #endif #if 1 /* daved 0.19.6 */ print_with_special_exprs (s2); #else outstring+=QString().sprintf("%s", s2); #endif #if 1 /* daved 0.20.0 */ } else { if (s2[1] == '\'') { int ch = h2toi (&s2[2]); const char *s3; s3 = op_translate_char (op, charset_type, charset_codepage, ch, numchar_table); if (!s3 || !*s3) { outstring+=QString().sprintf("%s", op->comment_begin); outstring+=QString().sprintf("char 0x%02x",ch); outstring+=QString().sprintf("%s", op->comment_end); } else { if (op->word_begin) outstring+=QString().sprintf("%s", op->word_begin); outstring+=QString().sprintf("%s", s3); if (op->word_end) outstring+=QString().sprintf("%s", op->word_end); } } } #endif w2 = w2->next; } outstring+=QString().sprintf("%s", op->document_title_end); } else if (!strcmp("\\keywords", s)) { outstring+=QString().sprintf("%s", op->document_keywords_begin); w2=child->next; while (w2) { char *s2 = word_string(w2); if (s2[0] != '\\') outstring+=QString().sprintf("%s,", s2); w2 = w2->next; } outstring+=QString().sprintf("%s", op->document_keywords_end); } else if (!strcmp("\\author", s)) { outstring+=QString().sprintf("%s", op->document_author_begin); w2=child->next; while (w2) { char *s2 = word_string(w2); if (s2[0] != '\\') outstring+=QString().sprintf("%s", s2); w2 = w2->next; } outstring+=QString().sprintf("%s", op->document_author_end); } else if (!strcmp("\\comment", s)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("comments: "); w2=child->next; while (w2) { char *s2 = word_string(w2); if (s2[0] != '\\') outstring+=QString().sprintf("%s", s2); w2 = w2->next; } outstring+=QString().sprintf("%s",op->comment_end); } else if (!strncmp("\\nofpages", s, 9)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("total pages: %s",&s[9]); outstring+=QString().sprintf("%s",op->comment_end); } else if (!strncmp("\\nofwords", s, 9)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("total words: %s",&s[9]); outstring+=QString().sprintf("%s",op->comment_end); } else if (!strncmp("\\nofchars", s, 9) && isdigit(s[9])) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("total chars: %s",&s[9]); outstring+=QString().sprintf("%s",op->comment_end); } else if (!strcmp("\\creatim", s)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("creation date: "); if (child->next) word_dump_date (child->next); outstring+=QString().sprintf("%s",op->comment_end); } else if (!strcmp("\\printim", s)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("last printed: "); if (child->next) word_dump_date (child->next); outstring+=QString().sprintf("%s",op->comment_end); } else if (!strcmp("\\buptim", s)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("last backup: "); if (child->next) word_dump_date (child->next); outstring+=QString().sprintf("%s",op->comment_end); } else if (!strcmp("\\revtim", s)) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("revision date: "); if (child->next) word_dump_date (child->next); outstring+=QString().sprintf("%s",op->comment_end); } } /* Irregardless of whether we're in inline mode, * we want to process the following. */ if (!strcmp("\\hlinkbase", s)) { char *linkstr = NULL; outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("hyperlink base: "); if (child->next) { Word *nextword = child->next; if (nextword) linkstr=word_string (nextword); } if (linkstr) outstring+=QString().sprintf("%s", linkstr); else outstring+=QString().sprintf("(none)"); outstring+=QString().sprintf("%s",op->comment_end); /* Store the pointer, it will remain good. */ hyperlink_base = linkstr; } } w = w->next; } } /*-------------------------------------------------------------------*/ /* RTF color table colors are RGB */ typedef struct { unsigned char r,g,b; } Color; #define MAX_COLORS (1024) static Color color_table[MAX_COLORS]; static int total_colors=0; /*======================================================================== * Name: process_color_table * Purpose: Processes the color table of an RTF file. * Args: Tree of words. * Returns: None. *=======================================================================*/ void process_color_table (Word *w) { int r,g,b; CHECK_PARAM_NOT_NULL(w); /* Sometimes, RTF color tables begin with a semicolon, * i.e. an empty color entry. This seems to indicate that color 0 * will not be used, so here I set it to black. */ r=g=b=0; while(w) { char *s = word_string (w); #if 0 outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("found this color table word: %s", word_string(w)); outstring+=QString().sprintf("%s",op->comment_end); #endif if (!strncmp("\\red",s,4)) { r = atoi(&s[4]); while(r>255) r>>=8; } else if (!strncmp("\\green",s,6)) { g = atoi(&s[6]); while(g>255) g>>=8; } else if (!strncmp("\\blue",s,5)) { b = atoi(&s[5]); while(b>255) b>>=8; } else /* If we find the semicolon which denotes the end of * a color entry then store the color, even if we don't * have all of it. */ if (!strcmp (";", s)) { color_table[total_colors].r = r; color_table[total_colors].g = g; color_table[total_colors++].b = b; if (debug_mode) { outstring+=QString().sprintf("%s",op->comment_begin); printf("storing color entry %d: %02x%02x%02x", total_colors-1, r,g,b); outstring+=QString().sprintf("%s",op->comment_end); } r=g=b=0; } w=w->next; } if (debug_mode) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("color table had %d entries -->\n", total_colors); outstring+=QString().sprintf("%s",op->comment_end); } } /*======================================================================== * Name: cmd_cf * Purpose: Executes the \cf command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_cf (Word *w, int align, char has_param, int num) { char str[40]; if (!has_param || num>=total_colors) { warning_handler ("font color change attempted is invalid"); } else { sprintf(str,"#%02x%02x%02x", color_table[num].r, color_table[num].g, color_table[num].b); attr_push(ATTR_FOREGROUND,str); } return false; } /*======================================================================== * Name: cmd_cb * Purpose: Executes the \cb command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_cb (Word *w, int align, char has_param, int num) { char str[40]; if (!has_param || num>=total_colors) { warning_handler ("font color change attempted is invalid"); } else { sprintf(str,"#%02x%02x%02x", color_table[num].r, color_table[num].g, color_table[num].b); attr_push(ATTR_BACKGROUND,str); } return false; } /*======================================================================== * Name: cmd_fs * Purpose: Executes the \fs command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fs (Word *w, int align, char has_param, int points) { char str[20]; if (!has_param) return false; /* Note, fs20 means 10pt */ points /= 2; sprintf(str,"%d",points); attr_push(ATTR_FONTSIZE,str); return false; } /*======================================================================== * Name: cmd_field * Purpose: Interprets fields looking for hyperlinks. * Comment: Because hyperlinks are put in \field groups, * we must interpret all \field groups, which is * slow and laborious. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_field (Word *w, int align, char has_param, int num) { Word *child; CHECK_PARAM_NOT_NULL(w); while(w) { child = w->child; if (child) { Word *w2; char *s; s = word_string(child); if (!strcmp("\\*", s)) { w2=child->next; while (w2) { char *s2 = word_string(w2); if (s2 && !strcmp("\\fldinst", s2)) { Word *w3; #if 1 /* daved - 0.19.2 */ char *s; char *s4; Word *w4; #endif w3=w2->next; #if 1 /* daved - 0.19.0 */ s = word_string(w3); if (s && !strcmp(s, "SYMBOL") ) { w4=w3->next; while(w4 && !strcmp(word_string(w4), " ")) w4 = w4->next; s4 = word_string(w4); if (s4) { int char_num; char_num = atoi(s4); if ( op->symbol_first_char <= char_num && op->symbol_last_char >= char_num ) { const char * string; if ((string = op->symbol_translation_table[char_num - op->symbol_first_char]) != 0) outstring+=QString().sprintf("%s", string); } } } #endif while (w3 && !w3->child) { w3=w3->next; } if (w3) w3=w3->child; while (w3) { char *s3=word_string(w3); if (s3 && !strcmp("HYPERLINK",s3)) { Word *w4; char *s4; w4=w3->next; while (w4 && !strcmp(" ", word_string(w4))) w4=w4->next; if (w4) { s4=word_string(w4); outstring+=QString().sprintf("%s", op->hyperlink_begin); outstring+=QString().sprintf("%s", s4); outstring+=QString().sprintf("%s", op->hyperlink_end); return true; } } w3=w3->next; } } w2 = w2->next; } } } w=w->next; } return true; } /*======================================================================== * Name: cmd_f * Purpose: Executes the \f command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_f (Word *w, int align, char has_param, int num) { char *name; /* no param exit early XX */ if (!has_param) return false; name = lookup_fontname(num); #if 1 /* daved - 0.19.6 */ /* if a character is requested by number, we will need to know which translation table to use - roman or symbol */ numchar_table = FONTROMAN_TABLE; #endif if (!name) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("invalid font number %d",num); outstring+=QString().sprintf("%s",op->comment_end); } else { attr_push(ATTR_FONTFACE,name); #if 1 /* daved - 0.19.6 */ if (strstr(name,"Symbol") != NULL) numchar_table=FONTSYMBOL_TABLE; #endif #if 1 /* daved - 0.20.3 */ else if (strstr(name,"Greek") != NULL) numchar_table=FONTGREEK_TABLE; #endif if(0) outstring+=QString().sprintf("", numchar_table); } return false; } /*======================================================================== * Name: cmd_highlight * Purpose: Executes the \cf command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_highlight (Word *w, int align, char has_param, int num) { char str[40]; if (!has_param || num>=total_colors) { warning_handler ("font background color change attempted is invalid"); } else { sprintf(str,"#%02x%02x%02x", color_table[num].r, color_table[num].g, color_table[num].b); attr_push(ATTR_BACKGROUND,str); } return false; } /*======================================================================== * Name: cmd_tab * Purpose: Executes the \tab command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_tab (Word *w, int align, char has_param, int param) { /* Tab presents a genuine problem * since some output formats don't have * an equivalent. As a kludge fix, I shall * assume the font is fixed width and that * the tabstops are 8 characters apart. */ int need= 8-(total_chars_this_line%8); total_chars_this_line += need; while(need>0) { outstring+=QString().sprintf("%s", op->forced_space); need--; } outstring+=QString().sprintf("\n"); return false; } /*======================================================================== * Name: cmd_plain * Purpose: Executes the \plain command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_plain (Word *w, int align, char has_param, int param) { attr_pop_all(); return false; } /*======================================================================== * Name: cmd_fnil * Purpose: Executes the \fnil command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fnil (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTNIL_STR); return false; } /*======================================================================== * Name: cmd_froman * Purpose: Executes the \froman command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_froman (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTROMAN_STR); return false; } /*======================================================================== * Name: cmd_fswiss * Purpose: Executes the \fswiss command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fswiss (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTSWISS_STR); return false; } /*======================================================================== * Name: cmd_fmodern * Purpose: Executes the \fmodern command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fmodern (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTMODERN_STR); return false; } /*======================================================================== * Name: cmd_fscript * Purpose: Executes the \fscript command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fscript (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTSCRIPT_STR); return false; } /*======================================================================== * Name: cmd_fdecor * Purpose: Executes the \fdecor command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fdecor (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTDECOR_STR); return false; } /*======================================================================== * Name: cmd_ftech * Purpose: Executes the \ftech command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ftech (Word *w, int align, char has_param, int param) { attr_push(ATTR_FONTFACE,FONTTECH_STR); return false; } /*======================================================================== * Name: cmd_expand * Purpose: Executes the \expand command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_expand (Word *w, int align, char has_param, int param) { char str[10]; if (has_param) { sprintf(str, "%d", param/4); if (!param) attr_pop(ATTR_EXPAND); else attr_push(ATTR_EXPAND, str); } return false; } /*======================================================================== * Name: cmd_emboss * Purpose: Executes the \embo command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_emboss (Word *w, int align, char has_param, int param) { char str[10]; if (has_param && !param) attr_pop(ATTR_EMBOSS); else { sprintf(str, "%d", param); attr_push(ATTR_EMBOSS, str); } return false; } /*======================================================================== * Name: cmd_engrave * Purpose: Executes the \impr command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_engrave (Word *w, int align, char has_param, int param) { char str[10]; if (has_param && !param) attr_pop(ATTR_ENGRAVE); else { sprintf(str, "%d", param); attr_push(ATTR_ENGRAVE, str); } return false; } /*======================================================================== * Name: cmd_caps * Purpose: Executes the \caps command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_caps (Word *w, int align, char has_param, int param) { if (has_param && !param) attr_pop(ATTR_CAPS); else attr_push(ATTR_CAPS,NULL); return false; } /*======================================================================== * Name: cmd_scaps * Purpose: Executes the \scaps command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_scaps (Word *w, int align, char has_param, int param) { if (has_param && !param) attr_pop(ATTR_SMALLCAPS); else attr_push(ATTR_SMALLCAPS,NULL); return false; } /*======================================================================== * Name: cmd_bullet * Purpose: Executes the \bullet command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_bullet (Word *w, int align, char has_param, int param) { if (op->chars.bullet) { outstring+=QString().sprintf("%s", op->chars.bullet); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_ldblquote * Purpose: Executes the \ldblquote command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ldblquote (Word *w, int align, char has_param, int param) { if (op->chars.left_dbl_quote) { outstring+=QString().sprintf("%s", op->chars.left_dbl_quote); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_rdblquote * Purpose: Executes the \rdblquote command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_rdblquote (Word *w, int align, char has_param, int param) { if (op->chars.right_dbl_quote) { outstring+=QString().sprintf("%s", op->chars.right_dbl_quote); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_lquote * Purpose: Executes the \lquote command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_lquote (Word *w, int align, char has_param, int param) { if (op->chars.left_quote) { outstring+=QString().sprintf("%s", op->chars.left_quote); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_nonbreaking_space * Purpose: Executes the nonbreaking space command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_nonbreaking_space (Word *w, int align, char has_param, int param) { if (op->chars.nonbreaking_space) { outstring+=QString().sprintf("%s", op->chars.nonbreaking_space); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_nonbreaking_hyphen * Purpose: Executes the nonbreaking hyphen command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_nonbreaking_hyphen (Word *w, int align, char has_param, int param) { if (op->chars.nonbreaking_hyphen) { outstring+=QString().sprintf("%s", op->chars.nonbreaking_hyphen); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_optional_hyphen * Purpose: Executes the optional hyphen command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_optional_hyphen (Word *w, int align, char has_param, int param) { if (op->chars.optional_hyphen) { outstring+=QString().sprintf("%s", op->chars.optional_hyphen); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_emdash * Purpose: Executes the \emdash command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_emdash (Word *w, int align, char has_param, int param) { if (op->chars.emdash) { outstring+=QString().sprintf("%s", op->chars.emdash); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_endash * Purpose: Executes the \endash command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_endash (Word *w, int align, char has_param, int param) { if (op->chars.endash) { outstring+=QString().sprintf("%s", op->chars.endash); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_rquote * Purpose: Executes the \rquote command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_rquote (Word *w, int align, char has_param, int param) { if (op->chars.right_quote) { outstring+=QString().sprintf("%s", op->chars.right_quote); ++total_chars_this_line; /* \tab */ } return false; } /*======================================================================== * Name: cmd_par * Purpose: Executes the \par command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_par (Word *w, int align, char has_param, int param) { if (op->line_break) { outstring+=QString().sprintf("%s", op->line_break); total_chars_this_line = 0; /* \tab */ } return false; } /*======================================================================== * Name: cmd_line * Purpose: Executes the \line command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_line (Word *w, int align, char has_param, int param) { if (op->line_break) { outstring+=QString().sprintf("%s", op->line_break); total_chars_this_line = 0; /* \tab */ } return false; } /*======================================================================== * Name: cmd_page * Purpose: Executes the \page command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_page (Word *w, int align, char has_param, int param) { if (op->page_break) { outstring+=QString().sprintf("%s", op->page_break); total_chars_this_line = 0; /* \tab */ } return false; } /*======================================================================== * Name: cmd_intbl * Purpose: Executes the \intbl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_intbl (Word *w, int align, char has_param, int param) { ++coming_pars_that_are_tabular; return false; } /*======================================================================== * Name: cmd_ulnone * Purpose: Executes the \ulnone command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ulnone (Word *w, int align, char has_param, int param) { int attr, more=true; #ifdef BINARY_ATTRS attr_remove_underlining(); #else do { attr = attr_read(); if (attr==ATTR_UNDERLINE || attr==ATTR_DOT_UL || attr==ATTR_DASH_UL || attr==ATTR_DOT_DASH_UL || attr==ATTR_2DOT_DASH_UL || attr==ATTR_WORD_UL || attr==ATTR_WAVE_UL || attr==ATTR_THICK_UL || attr==ATTR_DOUBLE_UL) { attr_pop(ATTR_UNDERLINE); } else more=false; } while(more); #endif return false; } /*======================================================================== * Name: cmd_ul * Purpose: Executes the \ul command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ul (Word *w, int align, char has_param, int param) { if (has_param && param == 0) { cmd_ulnone(w, align, has_param, param); } else { attr_push(ATTR_UNDERLINE, NULL); } return false; } /*======================================================================== * Name: cmd_uld * Purpose: Executes the \uld command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_uld (Word *w, int align, char has_param, int param) { attr_push(ATTR_DOUBLE_UL, NULL); return false; } /*======================================================================== * Name: cmd_uldb * Purpose: Executes the \uldb command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_uldb (Word *w, int align, char has_param, int param) { attr_push(ATTR_DOT_UL, NULL); return false; } /*======================================================================== * Name: cmd_uldash * Purpose: Executes the \uldash command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_uldash (Word *w, int align, char has_param, int param) { attr_push(ATTR_DASH_UL, NULL); return false; } /*======================================================================== * Name: cmd_uldashd * Purpose: Executes the \cmd_uldashd command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_uldashd (Word *w, int align, char has_param, int param) { attr_push(ATTR_DOT_DASH_UL,NULL); return false; } /*======================================================================== * Name: cmd_uldashdd * Purpose: Executes the \uldashdd command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_uldashdd (Word *w, int align, char has_param, int param) { attr_push(ATTR_2DOT_DASH_UL,NULL); return false; } /*======================================================================== * Name: cmd_ulw * Purpose: Executes the \ulw command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ulw (Word *w, int align, char has_param, int param) { attr_push(ATTR_WORD_UL,NULL); return false; } /*======================================================================== * Name: cmd_ulth * Purpose: Executes the \ulth command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ulth (Word *w, int align, char has_param, int param) { attr_push(ATTR_THICK_UL,NULL); return false; } /*======================================================================== * Name: cmd_ulthd * Purpose: Executes the \ulthd command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ulthd (Word *w, int align, char has_param, int param) { attr_push(ATTR_THICK_UL, NULL); return false; } /*======================================================================== * Name: cmd_ulthdash * Purpose: Executes the \ulthdash command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ulthdash (Word *w, int align, char has_param, int param) { attr_push(ATTR_THICK_UL, NULL); return false; } /*======================================================================== * Name: cmd_ulwave * Purpose: Executes the \ulwave command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ulwave (Word *w, int align, char has_param, int param) { attr_push(ATTR_WAVE_UL,NULL); return false; } /*======================================================================== * Name: cmd_strike * Purpose: Executes the \strike command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_strike (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_STRIKE); else attr_push(ATTR_STRIKE,NULL); return false; } /*======================================================================== * Name: cmd_strikedl * Purpose: Executes the \strikedl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_strikedl (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_DBL_STRIKE); else attr_push(ATTR_DBL_STRIKE,NULL); return false; } /*======================================================================== * Name: cmd_striked * Purpose: Executes the \striked command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_striked (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_DBL_STRIKE); else attr_push(ATTR_DBL_STRIKE,NULL); return false; } /*======================================================================== * Name: cmd_rtf * Purpose: Executes the \rtf command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_rtf (Word *w, int align, char has_param, int param) { return false; } /*======================================================================== * Name: cmd_up * Purpose: Executes the \up command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_up (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_SUPER); else attr_push(ATTR_SUPER,NULL); return false; } #if 1 /* daved - 0.19.4 */ /*======================================================================== * Name: cmd_u * Purpose: Processes a Unicode character * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, always false *=======================================================================*/ static int cmd_u (Word *w, int align, char has_param, int param) { short done=0; /*#if DEBUG char *str; if (has_param == true) { fprintf(stderr,"param is %d (x%x) (0%o)\n", param, param, param); } if (w->hash_index) { str=hash_get_string (w->hash_index); fprintf(stderr,"string is %s\n", str); } #endif*/ if ( (uchar)param >= op->unisymbol1_first_char && (uchar)param <= op->unisymbol1_last_char ) { const char *string; if ((string = op->unisymbol1_translation_table[param - op->unisymbol1_first_char]) != 0) outstring+=QString().sprintf("%s", string); else outstring+=QString().sprintf("&#%u;", (unsigned int)param); done++; } if ( (uchar)param >= op->unisymbol2_first_char && (uchar)param <= op->unisymbol2_last_char ) { const char *string; if ((string = op->unisymbol2_translation_table[param - op->unisymbol2_first_char]) != 0) outstring+=QString().sprintf("%s", string); else outstring+=QString().sprintf("&#%u;", (unsigned int)param); done++; } if ( (uchar)param >= op->unisymbol3_first_char && (uchar)param <= op->unisymbol3_last_char ) { const char *string; if ((string = op->unisymbol3_translation_table[param - op->unisymbol3_first_char]) != 0) outstring+=QString().sprintf("%s", string); else outstring+=QString().sprintf("&#%u;", (unsigned int)param); done++; } #if 1 /* 0.19.5 more unicode support */ if ( (uchar)param >= op->unisymbol4_first_char && (uchar)param <= op->unisymbol4_last_char ) { const char *string; if ((string = op->unisymbol4_translation_table[param - op->unisymbol4_first_char]) != 0) outstring+=QString().sprintf("%s", string); else outstring+=QString().sprintf("&#%u;", (unsigned int)param); done++; } #endif #if 1 /* 0.20.3 - daved added missing function call for unprocessed chars */ if(!done && op->unisymbol_print) { outstring+=QString().sprintf("%s", op->unisymbol_print(param)); done++; } #endif /* ** if we know how to represent the unicode character in the ** output language, we need to skip the next word, otherwise ** we will output that alternative. */ if (done) return(SKIP_ONE_WORD); return(false); } #endif /*======================================================================== * Name: cmd_dn * Purpose: Executes the \dn command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_dn (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_SUB); else attr_push(ATTR_SUB,NULL); return false; } /*======================================================================== * Name: cmd_nosupersub * Purpose: Executes the \nosupersub command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_nosupersub (Word *w, int align, char has_param, int param) { attr_pop(ATTR_SUPER); attr_pop(ATTR_SUB); return false; } /*======================================================================== * Name: cmd_super * Purpose: Executes the \super command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_super (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_SUPER); else attr_push(ATTR_SUPER,NULL); return false; } /*======================================================================== * Name: cmd_sub * Purpose: Executes the \sub command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_sub (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_SUB); else attr_push(ATTR_SUB,NULL); return false; } /*======================================================================== * Name: cmd_shad * Purpose: Executes the \shad command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_shad (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_SHADOW); else attr_push(ATTR_SHADOW,NULL); return false; } /*======================================================================== * Name: cmd_b * Purpose: Executes the \b command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_b (Word *w, int align, char has_param, int param) { if (has_param && param==0) { attr_pop(ATTR_BOLD); } else attr_push(ATTR_BOLD,NULL); return false; } /*======================================================================== * Name: cmd_i * Purpose: Executes the \i command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_i (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_ITALIC); else attr_push(ATTR_ITALIC,NULL); return false; } /*======================================================================== * Name: cmd_s * Purpose: Executes the \s command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_s (Word *w, int align, char has_param, int param) { return false; } /*======================================================================== * Name: cmd_sect * Purpose: Executes the \sect command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_sect (Word *w, int align, char has_param, int param) { /* XX kludge */ if (op->paragraph_begin) { outstring+=QString().sprintf("%s", op->paragraph_begin); } return false; } /*======================================================================== * Name: cmd_shp * Purpose: Executes the \shp command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_shp (Word *w, int align, char has_param, int param) { if (op->comment_begin) { outstring+=QString().sprintf("%s", op->comment_begin); outstring+=QString().sprintf("Drawn Shape (ignored--not implemented yet)"); outstring+=QString().sprintf("%s", op->comment_end); /* daved 0.20.2 */ } return false; } /*======================================================================== * Name: cmd_outl * Purpose: Executes the \outl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_outl (Word *w, int align, char has_param, int param) { if (has_param && param==0) attr_pop(ATTR_OUTLINE); else attr_push(ATTR_OUTLINE,NULL); return false; } /*======================================================================== * Name: cmd_ansi * Purpose: Executes the \ansi command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ansi (Word *w, int align, char has_param, int param) { charset_type = CHARSET_ANSI; if (op->comment_begin) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("document uses ANSI character set"); outstring+=QString().sprintf("%s",op->comment_end); } return false; } /*======================================================================== * Name: cmd_ansicpg * Purpose: Executes the \ansicpg command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ansicpg (Word *w, int align, char has_param, int param) { unsigned int i; for (i = 0; i < sizeof(codepages) / sizeof(CodepageInfo); i ++) { charset_codepage = &codepages[i]; if (charset_codepage->cp == param) { if (op->comment_begin) { outstring+=QString().sprintf("%s", op->comment_begin); outstring+=QString().sprintf("document uses ANSI codepage %d character set", param); outstring+=QString().sprintf("%s", op->comment_end); } break; } } if ((charset_codepage == NULL || charset_codepage->cp == 0) && op->comment_begin) { outstring+=QString().sprintf("%s", op->comment_begin); outstring+=QString().sprintf("document uses default ANSI codepage character set"); outstring+=QString().sprintf("%s", op->comment_end); } return false; } /*======================================================================== * Name: cmd_pc * Purpose: Executes the \pc command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_pc (Word *w, int align, char has_param, int param) { charset_type = CHARSET_CP437 ; if (op->comment_begin) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("document uses PC codepage 437 character set"); outstring+=QString().sprintf("%s",op->comment_end); } return false; } /*======================================================================== * Name: cmd_pca * Purpose: Executes the \pca command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_pca (Word *w, int align, char has_param, int param) { charset_type = CHARSET_CP850; if (op->comment_begin) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("document uses PC codepage 850 character set"); outstring+=QString().sprintf("%s",op->comment_end); } return false; } /*======================================================================== * Name: cmd_mac * Purpose: Executes the \mac command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_mac (Word *w, int align, char has_param, int param) { charset_type = CHARSET_MAC; if (op->comment_begin) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("document uses Macintosh character set"); outstring+=QString().sprintf("%s",op->comment_end); } return false; } /*======================================================================== * Name: cmd_colortbl * Purpose: Executes the \colortbl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_colortbl (Word *w, int align, char has_param, int param) { if (w->next) { process_color_table(w->next); } return true; } /*======================================================================== * Name: cmd_fonttbl * Purpose: Executes the \fonttbl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_fonttbl (Word *w, int align, char has_param, int param) { if (w->next) { process_font_table(w->next); } return true; } /*======================================================================== * Name: cmd_header * Purpose: Executes the \header command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_header (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_headerl * Purpose: Executes the \headerl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_headerl (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_headerr * Purpose: Executes the \headerr command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_headerr (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_headerf * Purpose: Executes the \headerf command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_headerf (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_footer * Purpose: Executes the \footer command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_footer (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_footerl * Purpose: Executes the \footerl command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_footerl (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_footerr * Purpose: Executes the \footerr command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_footerr (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_footerf * Purpose: Executes the \footerf command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_footerf (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_ignore * Purpose: Dummy function to get rid of subgroups * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_ignore (Word *w, int align, char has_param, int param) { return true; } /*======================================================================== * Name: cmd_info * Purpose: Executes the \info command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_info (Word *w, int align, char has_param, int param) { process_info_group (w->next); return true; } /*======================================================================== * Name: cmd_pict * Purpose: Executes the \pict command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_pict (Word *w, int align, char has_param, int param) { within_picture=true; picture_width = picture_height = 0; picture_type = PICT_WB; return false; } /*======================================================================== * Name: cmd_bin * Purpose: Executes the \bin command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_bin (Word *w, int align, char has_param, int param) { return false; } /*======================================================================== * Name: cmd_macpict * Purpose: Executes the \macpict command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_macpict (Word *w, int align, char has_param, int param) { picture_type = PICT_MAC; return false; } /*======================================================================== * Name: cmd_jpegblip * Purpose: Executes the \jpegblip command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_jpegblip (Word *w, int align, char has_param, int param) { picture_type = PICT_JPEG; return false; } /*======================================================================== * Name: cmd_pngblip * Purpose: Executes the \pngblip command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_pngblip (Word *w, int align, char has_param, int param) { picture_type = PICT_PNG; return false; } /*======================================================================== * Name: cmd_pnmetafile * Purpose: Executes the \pnmetafile command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_pnmetafile (Word *w, int align, char has_param, int param) { picture_type = PICT_PM; return false; } /*======================================================================== * Name: cmd_wmetafile * Purpose: Executes the \wmetafile command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_wmetafile (Word *w, int align, char has_param, int param) { picture_type = PICT_WM; if (within_picture && has_param) { picture_wmetafile_type=param; switch(param) { case 1: picture_wmetafile_type_str="MM_TEXT"; break; case 2: picture_wmetafile_type_str="MM_LOMETRIC"; break; case 3: picture_wmetafile_type_str="MM_HIMETRIC"; break; case 4: picture_wmetafile_type_str="MM_LOENGLISH"; break; case 5: picture_wmetafile_type_str="MM_HIENGLISH"; break; case 6: picture_wmetafile_type_str="MM_TWIPS"; break; case 7: picture_wmetafile_type_str="MM_ISOTROPIC"; break; case 8: picture_wmetafile_type_str="MM_ANISOTROPIC"; break; default: picture_wmetafile_type_str="default:MM_TEXT"; break; } } return false; } /*======================================================================== * Name: cmd_wbmbitspixel * Purpose: Executes the \wbmbitspixel command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_wbmbitspixel (Word *w, int align, char has_param, int param) { if (within_picture && has_param) picture_bits_per_pixel = param; return false; } /*======================================================================== * Name: cmd_picw * Purpose: Executes the \picw command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_picw (Word *w, int align, char has_param, int param) { if (within_picture && has_param) picture_width = param; return false; } /*======================================================================== * Name: cmd_pich * Purpose: Executes the \pich command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_pich (Word *w, int align, char has_param, int param) { if (within_picture && has_param) picture_height = param; return false; } /*======================================================================== * Name: cmd_xe * Purpose: Executes the \xe (index entry) command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_xe (Word *w, int align, char has_param, int param) { process_index_entry (w); return true; } /*======================================================================== * Name: cmd_tc * Purpose: Executes the \tc (TOC entry) command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_tc (Word *w, int align, char has_param, int param) { process_toc_entry (w, true); return true; } /*======================================================================== * Name: cmd_tcn * Purpose: Executes the \tcn (TOC entry, no page #) command. * Args: Word, paragraph align info, and numeric param if any. * Returns: Flag, true only if rest of Words on line should be ignored. *=======================================================================*/ static int cmd_tcn (Word *w, int align, char has_param, int param) { process_toc_entry (w, false); return true; } typedef struct { const char *name; int (*func)(Word*, int, char, int); const char *debug_print; } HashItem; /* All of the possible commands that RTF might recognize. */ static HashItem hashArray_other [] = { { "*", cmd_ignore, NULL }, { "-", cmd_optional_hyphen, "optional hyphen" }, { "_", cmd_nonbreaking_hyphen, "nonbreaking hyphen" }, { "~", cmd_nonbreaking_space, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_a [] = { { "ansi", &cmd_ansi , NULL }, { "ansicpg", &cmd_ansicpg , NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_b [] = { { "b", &cmd_b, NULL }, { "bullet", &cmd_bullet, NULL }, { "bin", &cmd_bin, "picture is binary" }, #if 0 { "bgbdiag", NULL, NULL }, { "bgcross", NULL, NULL }, { "bgdcross", NULL, NULL }, { "bgfdiag", NULL, NULL }, { "bghoriz", NULL, NULL }, { "bgkbdiag", NULL, NULL }, { "bgkcross", NULL, NULL }, { "bgkdcross", NULL, NULL }, { "bgkfdiag", NULL, NULL }, { "bgkhoriz", NULL, NULL }, { "bgkvert", NULL, NULL }, { "bgvert", NULL, NULL }, { "brdrcf", NULL, NULL }, { "brdrdb", NULL, NULL }, { "brdrdot", NULL, NULL }, { "brdrhair", NULL, NULL }, { "brdrs", NULL, NULL }, { "brdrsh", NULL, NULL }, { "brdrth", NULL, NULL }, { "brdrw", NULL, NULL }, #endif { NULL, NULL, NULL} }; static HashItem hashArray_c [] = { { "caps", &cmd_caps, NULL }, { "cb", cmd_cb, NULL }, { "cf", cmd_cf, NULL }, { "colortbl", &cmd_colortbl, "color table" }, { "cols", NULL, "columns (not implemented)" }, { "column", NULL, "column break (not implemented)" }, { "cbpat", NULL, "Paragraph Shading" }, { "cellx", NULL, "Table Definitions" }, { "cfpat", NULL, NULL }, { "cgrid", NULL, NULL }, { "charrsid", NULL, "Revision Mark (ignore)" }, { "clbgbcross", NULL, NULL }, { "clbgbdiag", NULL, NULL }, { "clbgbkbdiag", NULL, NULL }, { "clbgbkcross", NULL, NULL }, { "clbgbkdcross", NULL, NULL }, { "clbgbkfdiag", NULL, NULL }, { "clbgbkhor", NULL, NULL }, { "clbgbkvert", NULL, NULL }, { "clbgdcross", NULL, NULL }, { "clbgfdiag", NULL, NULL }, { "clbghoriz", NULL, NULL }, { "clbgvert", NULL, NULL }, { "clbrdrb", NULL, NULL }, { "clbrdrl", NULL, NULL }, { "clbrdrr", NULL, NULL }, { "clbrdrt", NULL, NULL }, { "clcbpat", NULL, NULL }, { "clcfpat", NULL, NULL }, { "clmgf", NULL, NULL }, { "clmrg", NULL, NULL }, { "clshdng", NULL, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_d [] = { { "deff", NULL, "Default Font" }, { "dn", &cmd_dn, NULL }, #if 0 { "dibitmap", NULL, NULL }, #endif { NULL, NULL, NULL} }; static HashItem hashArray_e [] = { { "emdash", cmd_emdash, NULL }, { "endash", cmd_endash, NULL }, { "embo", &cmd_emboss, NULL }, { "expand", &cmd_expand, NULL }, { "expnd", &cmd_expand, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_f [] = { { "f", cmd_f, NULL }, { "fdecor", cmd_fdecor, NULL }, { "fmodern", cmd_fmodern, NULL }, { "fnil", cmd_fnil, NULL }, { "fonttbl", cmd_fonttbl, "font table" }, { "froman", cmd_froman, NULL }, { "fs", cmd_fs, NULL }, { "fscript", cmd_fscript, NULL }, { "fswiss", cmd_fswiss, NULL }, { "ftech", cmd_ftech, NULL }, { "field", cmd_field, NULL }, { "footer", cmd_footer, NULL }, { "footerf", cmd_footerf, NULL }, { "footerl", cmd_footerl, NULL }, { "footerr", cmd_footerr, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_h [] = { { "highlight", &cmd_highlight, NULL }, { "header", cmd_header, NULL }, { "headerf", cmd_headerf, NULL }, { "headerl", cmd_headerl, NULL }, { "headerr", cmd_headerr, NULL }, { "hl", cmd_ignore, "hyperlink within object" }, { NULL, NULL, NULL} }; static HashItem hashArray_i [] = { { "i", &cmd_i, NULL }, { "info", &cmd_info, NULL }, { "insrsid", NULL, "Revision Mark (ignore)" }, { "intbl", &cmd_intbl, NULL }, { "impr", &cmd_engrave, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_j [] = { { "jpegblip", &cmd_jpegblip, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_l [] = { { "ldblquote", &cmd_ldblquote, NULL }, { "line", &cmd_line, NULL }, { "lquote", &cmd_lquote, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_m [] = { { "mac", &cmd_mac , NULL }, { "macpict", &cmd_macpict, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_n [] = { { "nosupersub", &cmd_nosupersub, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_o [] = { { "outl", &cmd_outl, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_p [] = { { "page", &cmd_page, NULL }, { "par", &cmd_par, NULL }, { "pc", &cmd_pc , NULL }, { "pca", &cmd_pca , NULL }, { "pich", &cmd_pich, NULL }, { "pict", &cmd_pict, "picture" }, { "picw", &cmd_picw, NULL }, { "plain", &cmd_plain, NULL }, { "pngblip", &cmd_pngblip, NULL }, { "pnmetafile", &cmd_pnmetafile, NULL }, #if 0 { "piccropb", NULL, NULL }, { "piccropl", NULL, NULL }, { "piccropr", NULL, NULL }, { "piccropt", NULL, NULL }, { "pichgoal", NULL, NULL }, { "pichgoal", NULL, NULL }, { "picscaled", NULL, NULL }, { "picscalex", NULL, NULL }, { "picwgoal", NULL, NULL }, #endif { NULL, NULL, NULL} }; static HashItem hashArray_r [] = { { "rdblquote", &cmd_rdblquote, NULL }, { "rquote", &cmd_rquote, NULL }, { "rtf", &cmd_rtf, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_s [] = { { "s", cmd_s, "style" }, { "sect", &cmd_sect, "section break"}, { "scaps", &cmd_scaps, NULL }, { "super", &cmd_super, NULL }, { "sub", &cmd_sub, NULL }, { "shad", &cmd_shad, NULL }, { "strike", &cmd_strike, NULL }, { "striked", &cmd_striked, NULL }, { "strikedl", &cmd_strikedl, NULL }, { "stylesheet", &cmd_ignore, "style sheet" }, { "shp", cmd_shp, "drawn shape" }, #if 0 { "shading", NULL, NULL }, #endif { NULL, NULL, NULL} }; static HashItem hashArray_t [] = { { "tab", &cmd_tab, NULL }, { "tc", cmd_tc, "TOC entry" }, { "tcn", cmd_tcn, "TOC entry" }, #if 0 { "tcf", NULL , NULL }, { "tcl", NULL , NULL }, { "trgaph", NULL , NULL }, { "trleft", NULL , NULL }, { "trowd", NULL , NULL }, { "trqc", NULL , NULL }, { "trql", NULL , NULL }, { "trqr", NULL , NULL }, { "trrh", NULL , NULL }, #endif { NULL, NULL, NULL} }; static HashItem hashArray_u [] = { #if 1 /* daved - 0.19.4 */ { "u", &cmd_u, NULL }, #endif { "ul", &cmd_ul, NULL }, { "up", &cmd_up, NULL }, { "uld", &cmd_uld, NULL }, { "uldash", &cmd_uldash, NULL }, { "uldashd", &cmd_uldashd, NULL }, { "uldashdd", &cmd_uldashdd, NULL }, { "uldb", &cmd_uldb, NULL }, { "ulnone", &cmd_ulnone, NULL }, { "ulth", &cmd_ulth, NULL }, { "ulthd", &cmd_ulthd, NULL }, { "ulthdash", &cmd_ulthdash, NULL }, { "ulw", &cmd_ulw, NULL }, { "ulwave", &cmd_ulwave, NULL }, { NULL, NULL, NULL} }; static HashItem hashArray_v [] = { { "v", NULL, "Hidden Text" }, { NULL, NULL, NULL } }; static HashItem hashArray_w [] = { { "wbmbitspixel", &cmd_wbmbitspixel, NULL }, { "wmetafile", &cmd_wmetafile, NULL }, #if 0 { "wbitmap", NULL, NULL }, { "wbmplanes", NULL, NULL }, { "wbmwidthbytes", NULL, NULL }, #endif { NULL, NULL, NULL} }; static HashItem hashArray_x [] = { { "xe", cmd_xe, "index entry" }, { NULL, NULL, NULL} }; static HashItem *hash [26] = { hashArray_a, hashArray_b, hashArray_c, hashArray_d, hashArray_e, hashArray_f, NULL, hashArray_h, hashArray_i, hashArray_j, NULL, hashArray_l, hashArray_m, hashArray_n, hashArray_o, hashArray_p, NULL, hashArray_r, hashArray_s, hashArray_t, hashArray_u, hashArray_v, hashArray_w, hashArray_x, NULL, NULL }; /*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/ /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ void print_with_special_exprs (char *s) { int ch; int state; enum { SMALL=0, BIG=1 }; CHECK_PARAM_NOT_NULL(s); state=SMALL; /* Pacify gcc, st001906 - 0.19.6 */ if (simulate_smallcaps) { if (*s >= 'a' && *s <= 'z') { state=SMALL; outstring+=QString().sprintf("%s", op->smaller_begin); } else state=BIG; } while ((ch=*s)) { const char *post_trans = NULL; if (simulate_allcaps || simulate_smallcaps) ch = toupper (ch); if (ch >= 0x20 && ch < 0x80) { #if 1 /* daved - 0.19.6 */ post_trans = op_translate_char (op, charset_type, charset_codepage, ch, numchar_table); #else post_trans = op_translate_char (op, charset_type, charset_codepage, ch); #endif #if 1 /* daved - 0.20.1 */ if(post_trans) #endif outstring+=QString().sprintf("%s",post_trans); } s++; if (simulate_smallcaps) { ch = *s; if (ch >= 'a' && ch <= 'z') { if (state==BIG) outstring+=QString().sprintf("%s", op->smaller_begin); state=SMALL; } else { if (state==SMALL) outstring+=QString().sprintf("%s", op->smaller_end); state=BIG; } } } } /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ static void begin_table() { within_table=true; have_printed_row_begin = false; have_printed_cell_begin = false; have_printed_row_end = false; have_printed_cell_end = false; attrstack_push(); starting_body(); outstring+=QString().sprintf("%s", op->table_begin); } /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ void end_table () { if (within_table) { if (!have_printed_cell_end) { attr_pop_dump(); outstring+=QString().sprintf("%s", op->table_cell_end); } if (!have_printed_row_end) { outstring+=QString().sprintf("%s", op->table_row_end); } outstring+=QString().sprintf("%s", op->table_end); within_table=false; have_printed_row_begin = false; have_printed_cell_begin = false; have_printed_row_end = false; have_printed_cell_end = false; } } /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ void starting_text() { if (within_table) { if (!have_printed_row_begin) { outstring+=QString().sprintf("%s", op->table_row_begin); have_printed_row_begin=true; have_printed_row_end=false; have_printed_cell_begin=false; } if (!have_printed_cell_begin) { outstring+=QString().sprintf("%s", op->table_cell_begin); attrstack_express_all(); have_printed_cell_begin=true; have_printed_cell_end=false; } } } /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ static void starting_paragraph_align (int align) { if (within_header && align != ALIGN_LEFT) starting_body(); switch (align) { case ALIGN_CENTER: outstring+=QString().sprintf("%s", op->center_begin); break; case ALIGN_LEFT: break; case ALIGN_RIGHT: outstring+=QString().sprintf("%s", op->align_right_begin); break; case ALIGN_JUSTIFY: outstring+=QString().sprintf("%s", op->align_right_begin); /* This is WRONG! */ break; } } /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ static void ending_paragraph_align (int align) { switch (align) { case ALIGN_CENTER: outstring+=QString().sprintf("%s", op->center_end); break; case ALIGN_LEFT: /* outstring+=QString().sprintf("%s", op->align_left_end); */ break; case ALIGN_RIGHT: outstring+=QString().sprintf("%s", op->align_right_end); break; case ALIGN_JUSTIFY: outstring+=QString().sprintf("%s", op->justify_end); break; } } /*======================================================================== * Name: * Purpose: Recursive routine to produce the output in the target * format given on a tree of words. * Args: Word* (the tree). * Returns: None. *=======================================================================*/ static void word_print_core (Word *w) { char *s; FILE *pictfile=NULL; int is_cell_group=false; int paragraph_begined=false; int paragraph_align=ALIGN_LEFT; CHECK_PARAM_NOT_NULL(w); if (!coming_pars_that_are_tabular && within_table) { end_table(); } else if (coming_pars_that_are_tabular && !within_table) { begin_table(); } /* Mark our place in the stack */ attrstack_push(); while (w) { s = word_string (w); if (s) { /*--Ignore whitespace in header--------------------*/ if (*s==' ' && within_header) { /* no op */ } else /*--Handle word -----------------------------------*/ if (s[0] != '\\') { starting_body(); starting_text(); if (!paragraph_begined) { starting_paragraph_align (paragraph_align); paragraph_begined=true; } /*----------------------------------------*/ if (within_picture) { starting_body(); if (!pictfile && !nopict_mode) { const char *ext=NULL; switch (picture_type) { case PICT_WB: ext="bmp"; break; case PICT_WM: ext="wmf"; break; case PICT_MAC: ext="pict"; break; case PICT_JPEG: ext="jpg"; break; case PICT_PNG: ext="png"; break; case PICT_DI: ext="dib"; break; /* Device independent bitmap=??? */ case PICT_PM: ext="pmm"; break; /* OS/2 metafile=??? */ } sprintf(picture_path, "pict%03d.%s", picture_file_number++,ext); pictfile=fopen(picture_path,"w"); } if (s[0]!=' ') { char *s2; outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("picture data found, "); if (picture_wmetafile_type_str) { printf("WMF type is %s, ", picture_wmetafile_type_str); } printf("picture dimensions are %d by %d, depth %d", picture_width, picture_height, picture_bits_per_pixel); outstring+=QString().sprintf("%s",op->comment_end); if (picture_width && picture_height && picture_bits_per_pixel) { s2=s; while (*s2) { unsigned int tmp,value; tmp=tolower(*s2++); if (tmp>'9') tmp-=('a'-10); else tmp-='0'; value=16*tmp; tmp=tolower(*s2++); if (tmp>'9') tmp-=('a'-10); else tmp-='0'; value+=tmp; if (pictfile) { fprintf(pictfile,"%c", value); } } } } } /*----------------------------------------*/ else { total_chars_this_line += strlen(s); if (op->word_begin) outstring+=QString().sprintf("%s", op->word_begin); print_with_special_exprs (s); if (op->word_end) outstring+=QString().sprintf("%s", op->word_end); } } #if 1 /* daved 0.19.5 */ /* output an escaped backslash */ /* do we need special handling for latex? */ else if (*(s+1) == '\\') { s++; putchar('\\'); } else if (*(s+1) == '{') { s++; putchar('{'); } else if (*(s+1) == '}') { s++; putchar('}'); } #endif /*---Handle RTF keywords---------------------------*/ else { int done=false; s++; /*----Paragraph alignment----------------------------------------------------*/ if (!strcmp ("ql", s)) paragraph_align = ALIGN_LEFT; else if (!strcmp ("qr", s)) paragraph_align = ALIGN_RIGHT; else if (!strcmp ("qj", s)) paragraph_align = ALIGN_JUSTIFY; else if (!strcmp ("qc", s)) paragraph_align = ALIGN_CENTER; else if (!strcmp ("pard", s)) { /* Clear out all font attributes. */ attr_pop_all(); if (coming_pars_that_are_tabular) { --coming_pars_that_are_tabular; } /* Clear out all paragraph attributes. */ ending_paragraph_align(paragraph_align); paragraph_align = ALIGN_LEFT; paragraph_begined = false; } /*----Table keywords---------------------------------------------------------*/ else if (!strcmp (s, "cell")) { is_cell_group=true; if (!have_printed_cell_begin) { /* Need this with empty cells */ outstring+=QString().sprintf("%s", op->table_cell_begin); attrstack_express_all(); } attr_pop_dump(); outstring+=QString().sprintf("%s", op->table_cell_end); have_printed_cell_begin = false; have_printed_cell_end=true; } else if (!strcmp (s, "row")) { if (within_table) { outstring+=QString().sprintf("%s", op->table_row_end); have_printed_row_begin = false; have_printed_row_end=true; } else { if (debug_mode) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("end of table row"); outstring+=QString().sprintf("%s",op->comment_end); } } } /*----Special chars---------------------------------------------------------*/ else if (*s == '\'') { /* \'XX is a hex char code expression */ int ch = h2toi (&s[1]); const char *s2; #if 1 /* daved - 0.19.6 */ s2 = op_translate_char (op, charset_type, charset_codepage, ch, numchar_table); #else s2 = op_translate_char (op, charset_type, charset_codepage, ch); #endif if (!s2 || !*s2) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("char 0x%02x",ch); outstring+=QString().sprintf("%s",op->comment_end); } else { if (op->word_begin) outstring+=QString().sprintf("%s", op->word_begin); outstring+=QString().sprintf("%s", s2); if (op->word_end) outstring+=QString().sprintf("%s", op->word_end); } } else /*----Search the RTF command hash-------------------------------------------*/ { int ch; int index=0; int have_param = false, param = 0; HashItem *hip; char *p; int match = false; /* Pacify gcc, st001906 - 0.19.6 */ /* Look for a parameter */ p = s; while (*p && (!isdigit(*p) && *p != '-')) p++; if (*p && (isdigit(*p) || *p == '-')) { have_param = true; param = atoi(p); } /* Generate a hash index */ ch = tolower(*s); if (ch >= 'a' && ch <= 'z') hip = hash[ch - 'a']; else hip = hashArray_other; if (!hip) { if (debug_mode) { outstring+=QString().sprintf("%s", op->comment_begin); outstring+=QString().sprintf("Unfamiliar RTF command: %s (HashIndex not found)", s); outstring+=QString().sprintf("%s", op->comment_end); /* daved 0.20.2 */ } } else { while (!done) { match = false; if (have_param) { int len=p-s; if (!hip[index].name[len] && !strncmp(s, hip[index].name, len)) match = true; } else match = !strcmp(s, hip[index].name); if (match) { const char *debug; int terminate_group; if (hip[index].func) { terminate_group = hip[index].func (w,paragraph_align, have_param, param); #if 1 /* daved - 0.19.4 - unicode support may need to skip only one word */ if (terminate_group == SKIP_ONE_WORD) w=w->next; else #endif if (terminate_group) while(w) w=w->next; } debug=hip[index].debug_print; if (debug && debug_mode) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("%s", debug); outstring+=QString().sprintf("%s",op->comment_end); } done=true; } else { index++; if (!hip[index].name) done = true; } } } if (!match) { if (debug_mode) { outstring+=QString().sprintf("%s",op->comment_begin); outstring+=QString().sprintf("Unfamiliar RTF command: %s", s); outstring+=QString().sprintf("%s",op->comment_end); } } } } /*-------------------------------------------------------------------------*/ } else { Word *child; child = w->child; if (!paragraph_begined) { starting_paragraph_align (paragraph_align); paragraph_begined=true; } if (child) word_print_core (child); } if (w) w = w->next; } if (within_picture) { if(pictfile) { fclose(pictfile); outstring+=QString().sprintf("%s", op->imagelink_begin); outstring+=QString().sprintf("%s", picture_path); outstring+=QString().sprintf("%s", op->imagelink_end); } within_picture=false; } /* Undo font attributes UNLESS we're doing table cells * since they would appear between and . */ if (!is_cell_group) attr_pop_all(); else attr_drop_all(); /* Undo paragraph alignment */ if (paragraph_begined) ending_paragraph_align (paragraph_align); attrstack_drop(); #if 1 /* daved - 0.20.3 */ if(0) outstring+=QString().sprintf("", numchar_table); if((s = attr_get_param(ATTR_FONTFACE)) != NULL && strstr(s,"Symbol") != NULL) numchar_table=FONTSYMBOL_TABLE; else if((s = attr_get_param(ATTR_FONTFACE)) != NULL && strstr(s,"Greek") != NULL) numchar_table=FONTGREEK_TABLE; else numchar_table = FONTROMAN_TABLE; if(0) outstring+=QString().sprintf("", numchar_table); #endif } /*======================================================================== * Name: * Purpose: * Args: None. * Returns: None. *=======================================================================*/ void word_print (Word *w, QString & _s) { CHECK_PARAM_NOT_NULL (w); outstring = ""; if (!inline_mode) { outstring+=QString().sprintf("%s", op->document_begin); outstring+=QString().sprintf("%s", op->header_begin); } within_header=true; have_printed_body=false; within_table=false; simulate_allcaps=false; word_print_core (w); end_table(); if (!inline_mode) { outstring+=QString().sprintf("%s", op->body_end); outstring+=QString().sprintf("%s", op->document_end); } _s = outstring; } lmms-1.1.3/plugins/flp_import/unrtf/convert.h000066400000000000000000000037101247673406200213230ustar00rootroot00000000000000 /*=========================================================================== GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au ===========================================================================*/ /*---------------------------------------------------------------------- * Module name: convert * Author name: Zachary Smith * Create date: 19 Sep 2001 * Purpose: Definitions for the conversion module *---------------------------------------------------------------------- * Changes: * 31 Mar 05, by daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifndef _CONVERT enum { CHARSET_ANSI=1, CHARSET_MAC, CHARSET_CP437, CHARSET_CP850, }; #ifndef _WORD #include "word.h" #endif extern void word_print (Word*, QString & _s); #if 1 /* daved 0.19.6 - support for multiple char number->output tables */ extern short numchar_table; #define FONTROMAN_TABLE 0 #define FONTSYMBOL_TABLE 1 #define FONTGREEK_TABLE 2 #endif #define _CONVERT #endif lmms-1.1.3/plugins/flp_import/unrtf/defs.h000066400000000000000000000056121247673406200205670ustar00rootroot00000000000000 /*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: defs.h * Author name: Zachary Smith * Create date: 1 Sept 2000 * Purpose: Basic definitions plus externs for UnRTF *---------------------------------------------------------------------- * Changes: * 21 Oct 00, tuorfa@yahoo.com: moved program version to this file * 08 Apr 01, tuorfa@yahoo.com: updated usage info. * 08 Sep 01, tuorfa@yahoo.com: added UnRTF. * 19 Sep 01, tuorfa@yahoo.com: added PROGRAM_WEBSITE. * 09 Oct 03, daved@physiol.usyd.edu.au: changed to GNU website * 17 Feb 04, marcossamaral@terra.com.br: changed some information * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 * 17 Dec 07, daved@physiol.usyd.edu.au: added --noremap to usage - from * David Santinoli *--------------------------------------------------------------------*/ #define PROGRAM_WEBSITE "http://www.gnu.org/software/unrtf/unrtf.html" /* Select the language for reporting of file creation/modificaton dates */ #define ENGLISH #if 0 #define FRANCAIS #define ITALIANO #define PORTUGUES /* amaral - 0.19.4 */ #endif #ifndef true /* daved 0.19.0 */ #define true (1) #endif #ifndef false /* daved 0.19.0 */ #define false (0) #endif #if 1 /* daved - 0.19.4 */ #define SKIP_ONE_WORD 2 #endif #define USAGE "unrtf [--version] [--verbose] [--help] [--nopict|-n] [--noremap] [--html] [--text] [--vt] [--latex] [-t html|text|vt|latex] " /* Default names for RTF's default fonts */ #define FONTNIL_STR "Times,TimesRoman,TimesNewRoman" #define FONTROMAN_STR "Times,Palatino" #define FONTSWISS_STR "Helvetica,Arial" #define FONTMODERN_STR "Courier,Verdana" #define FONTSCRIPT_STR "Cursive,ZapfChancery" #define FONTDECOR_STR "ZapfChancery" #define FONTTECH_STR "Symbol" lmms-1.1.3/plugins/flp_import/unrtf/error.c000066400000000000000000000067401247673406200207750ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: error * Author name: Zachary Smith * Create date: 01 Sep 00 * Purpose: Management of errors and warnings, when reporting * the source code file/line is not necessary. *---------------------------------------------------------------------- * Changes * 10 Oct 00, tuorfa@yahoo.com: added usage() * 15 Oct 00, tuorfa@yahoo.com: improved output readability * 22 Sep 01, tuorfa@yahoo.com: removed mention of line number in handlers * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 08 Oct 03, daved@physiol.usyd.edu.au: added stdlib.h for linux * 25 Sep 04, st001906@hrz1.hrz.tu-darmstadt.de: added stdlib.h for djgpp * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 22 Aug 05, ax2groin@arbornet.org: added lineno to error_handler * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #include "defs.h" #include "main.h" /*======================================================================== * Name: usage * Purpose: Prints usage information and exits with an error. * Args: None. * Returns: None. *=======================================================================*/ void usage () { fprintf(stderr, "Usage: %s\n", USAGE); exit(-3); } /*======================================================================== * Name: error_handler * Purpose: Prints error message and other useful info, then exits. * Args: Message. * Returns: None. *=======================================================================*/ void error_handler (const char* message) { #if 1 fprintf(stderr, "Error (line %d): %s\n", lineno, message); #else fprintf(stderr, "Error: %s\n", message); #endif exit(10); } /*======================================================================== * Name: warning_handler * Purpose: Prints useful info to stderr, but doesn't exit. * Args: Message. * Returns: None. *=======================================================================*/ void warning_handler (const char* message) { fprintf(stderr, "Warning: %s\n", message); } lmms-1.1.3/plugins/flp_import/unrtf/error.h000066400000000000000000000042051247673406200207740ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: error.h * Author name: Zachary Smith * Create date: 1 Sept 2000 * Purpose: Macros to be executed at the start of a function, * when reporting source code file/line is useful. *---------------------------------------------------------------------- * Changes * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #define CHECK_PARAM_NOT_NULL(XX) { if ((XX)==NULL) { fprintf (stderr, "internal error: null pointer param in %s at %d\n", __FILE__, __LINE__); exit (1); }} #define CHECK_MALLOC_SUCCESS(XX) { if ((XX)==NULL) { fprintf (stderr, "internal error: cannot allocate memory in %s at %d\n", __FILE__, __LINE__); exit (1); }} extern void usage(void); extern void error_handler (const char*); extern void warning_handler (const char*); lmms-1.1.3/plugins/flp_import/unrtf/hash.c000066400000000000000000000131441247673406200205630ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: hash * Author name: Zachary Smith * Create date: 01 Sep 00 * Purpose: Word-hash management. Words are put into a hash and an * identifier is returned. This is used to save us from * doing multiple mallocs for recurring strings such as * 'the' and \par. This is not a big issue under Unix, * but it is under other OSes and anyway, waste not want not. *---------------------------------------------------------------------- * Changes: * 08 Apr 01, tuorfa@yahoo.com: check for out of memory after malloc. * 21 Apr 01, tuorfa@yahoo.com: signed to conversion unsigned bug * 03 Aug 01, tuorfa@yahoo.com: fixes for using 16-bit compiler * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 08 Oct 03, daved@physiol.usyd.edu.au: some type fixes * 29 Mar 05, daved@physiol.usyd.edu.au: changes requsted by ZT Smith * 06 Jan 06, marcossamaral@terra.com.br: changes hash_stats function * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "error.h" #include "main.h" #include "ur_malloc.h" typedef struct _hi { struct _hi *next; char *str; unsigned long value; } hashItem; /* Index by first char of string */ static hashItem *hash2[256]; static unsigned long hash_length[256]; static unsigned long hash_value=0; /*======================================================================== * Name: hash_init * Purpose: Clear the hash table. * Args: None. * Returns: None. *=======================================================================*/ void hash_init () { int i; for (i=0; i<256; i++) { hash2[i]=NULL; hash_length[i]=0; } } /*======================================================================== * Name: hash_stats * Purpose: Return the number of words stored. This is all words, * including commands to RTF, NOT the number of printed words in * a given document. * Args: None. * Returns: Number of words stored. *=======================================================================*/ unsigned long hash_stats () { int i; unsigned long total=0; for (i=0; i<256; i++) { total += hash_length[i]; } return(total); } /*======================================================================== * Name: hashitem_new * Purpose: Creates a new linked list item for the hash table. * Args: String. * Returns: hashItem. *=======================================================================*/ static hashItem * hashitem_new (char *str) { hashItem *hi; unsigned long i; hi=(hashItem*) my_malloc(sizeof(hashItem)); if (!hi) error_handler("Out of memory"); memset ((void*)hi, 0, sizeof (hashItem)); hi->str = my_strdup(str); i = *str; if (i=='\\') i=str[1]; i <<= 24; hi->value = i | (hash_value++ & 0xffffff); hi->next = NULL; #if 0 if (debug_mode) { printf ("\n", hi->value, hi->str); } #endif return hi; } /*======================================================================== * Name: hash_get_index * Purpose: Given a string, returns the "index" i.e. the word identifier. * Args: String. * Returns: Index. *=======================================================================*/ unsigned long hash_get_index (char *str) { #if 1 /* daved - 0.19.1 */ unsigned short index; unsigned char ch; #else int index; char ch; #endif hashItem *hi; #if 1 /* daved - 0.19.1 */ ch = (unsigned char)*str; #else ch = *str; #endif if (ch=='\\' && *(str+1)) ch = *(str+1); index = ch; hi = hash2[index]; while (hi) { if (!strcmp(hi->str,str)) return hi->value; hi=hi->next; } /* not in hash */ hi = hashitem_new (str); hi->next = hash2[index]; hash2[index] = hi; ++hash_length [index]; return hi->value; } /*======================================================================== * Name: hash_get_string * Purpose: Given the index (word identifier) returns the word string. * Args: Index. * Returns: String, or NULL if not found. *=======================================================================*/ char* hash_get_string (unsigned long value) { int index; hashItem *hi; index = value >> 24; hi = hash2[index]; while (hi) { if (hi->value == value) return hi->str; hi=hi->next; } warning_handler("Word not in hash"); return NULL; } lmms-1.1.3/plugins/flp_import/unrtf/hash.h000066400000000000000000000034351247673406200205720ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: hash.h * Author name: Zachary Smith * Create date: 1 Sept 2000 * Purpose: Definitions for the hash module. *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 06 Jan 06, marcossamaral@terra.com.br: changes hash_stats() * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ extern void hash_init (void); extern unsigned long hash_stats (void); extern unsigned long hash_get_index (char *); extern char* hash_get_string (unsigned long ); lmms-1.1.3/plugins/flp_import/unrtf/html.c000066400000000000000000001060321247673406200206030ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: html * Author name: Zachary Smith * Create date: 18 Sep 01 * Purpose: HTML-specific output module *---------------------------------------------------------------------- * Changes: * 01 Aug 01, tuorfa@yahoo.com: code moved over from convert.c * 03 Aug 01, tuorfa@yahoo.com: removed null entries to save space * 08 Aug 01, tuorfa@yahoo.com, gommer@gmx.net: fixed/added some ANSI chars * 18 Sep 01, tuorfa@yahoo.com: moved character sets into html.c etc * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 08 Oct 03, daved@physiol.usyd.edu.au: mac special character fixes * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 29 Mar 05, daved@physiol.usyd.edu.au: more unicode characters * 21 Jul 05, daved@physiol.usyd.edu.au: added endash * 19 Aug 05, ax2groin@arbornet.org: added more chars and changes to ANSI * 05 Jan 06, marcossamaral@terra.com.br: fixed bugs #14982 and #14983 * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 13 Dec 07, daved@physiol.usyd.edu.au: fixed some missing entity ';' * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "ur_malloc.h" #include "defs.h" #include "error.h" #include "main.h" #include "output.h" static const char* ascii [96] = { /* 0x20 */ " ", "!", """, "#", "$", "%", "&", "'", /* 0x28 */ "(", ")", "*", "+", ",", "-", ".", "/", /* 0x30 */ "0", "1", "2", "3", "4", "5", "6", "7", /* 0x38 */ "8", "9", ":", ";", "<", "=", ">", "?", /* 0x40 */ "@", "A", "B", "C", "D", "E", "F", "G", /* 0x48 */ "H", "I", "J", "K", "L", "M", "N", "O", /* 0x50 */ "P", "Q", "R", "S", "T", "U", "V", "W", /* 0x58 */ "X", "Y", "Z", "[", "\\", "]", "^", "_", /* 0x60 */ "`", "a", "b", "c", "d", "e", "f", "g", /* 0x68 */ "h", "i", "j", "k", "l", "m", "n", "o", /* 0x70 */ "p", "q", "r", "s", "t", "u", "v", "w", /* 0x78 */ "x", "y", "z", "{", "|", "}", "~", "" }; static const char* ansi [] = { /* 0x78 */ "x", /* 0x79 */ "y", /* 0x7a */ "z", /* 0x7b */ "{", /* 0x7c */ "|", /* 0x7d */ "}", /* 0x7e */ "~", /* 0x7f */ "", /* 0x80 */ "€", /* € may be more widely recognized. */ /* 0x81 */ "", /* 0x82 */ "‚", /* ‚ not implemented in any browsers I've seen. */ /* 0x83 */ "ƒ", /* 0x84 */ "„", /* „ not implemented in any browsers I've seen. */ /* 0x85 */ "…", /* 0x86 */ "†", /* 0x87 */ "‡", /* 0x88 */ "ˆ", /* 0x89 */ "‰", /* 0x8a */ "Š", /* 0x8b */ "‹", /* 0x8c */ "Œ", /* 0x8d */ "", /* 0x8e */ "Ž", /* 0x8f */ "", /* 0x90 */ "", "‘", "’", "“", "”", "•", "–", "—", /* 0x98 */ "˜", /* 0x99 */ "™", /* 0x9a */ "š", /* 0x9b */ "›", /* daved - 0.9.6 */ /* 0x9c */ "œ", /* 0x9d */ "", /* 0x9e */ "ž", /* 0x9f */ "Ÿ", /* 0xa0 */ " ","¡","¢","£","¤","¥","¦","§", /* 0xa8 */ "¨","©","ª","«","¬","­","®","¯", /* 0xb0 */ "°", "±","²","³","´","µ","¶","·", /* 0xb8 */ "¸","¹", "º","»", "¼", "½","¾","¿", /* 0xc0 */ "À","Á","Â","Ã","Ä","Å","Æ","Ç", /* 0xc8 */ "È","É","Ê","Ë","Ì","Í","Î","Ï", /* 0xd0 */ "Ð","Ñ","Ò","Ó","Ô","Õ","Ö","×", /* 0xd8 */ "Ø","Ù","Ú","Û","Ü","Ý","Þ","ß", /* 0xe0 */ "à","á","â","ã","ä","å","æ","ç", /* 0xe8 */ "è","é","ê","ë","ì","í","î","ï", /* 0xf0 */ "ð","ñ","ò","ó","ô","õ","ö","÷", /* 0xf8 */ "ø","ù","ú","û","ü","ý","þ","ÿ" }; static const char* mac [] = { /* 0xa4 */ "•", NULL,NULL,NULL, /* 0xa8 */ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, /* 0xb0 */ NULL,NULL,NULL,NULL,NULL,"μ",NULL,NULL, /* 0xb8 */ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, /* 0xc0 */ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, /* 0xc8 */ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, /* 0xd0 */ "—","–","“","”","&lquo;","&rquo;" }; #if 1 /* daved - 0.19.4 - unicode symbol character support */ static const char * unisymbol1[] = { /* 913 */ "Α", /* 914 */ "Β", /* 915 */ "Γ", /* 916 */ "Δ", /* 917 */ "Ε", /* 918 */ "Ζ", /* 919 */ "Η", /* 920 */ "Θ", /* 921 */ "Ι", /* 922 */ "Κ", /* 923 */ "Λ", /* 924 */ "Μ", /* 925 */ "Ν", /* 926 */ "Ξ", /* 927 */ "Ο", /* 928 */ "Π", /* 929 */ "Ρ", /* 930 */ 0, /* 931 */ "Σ", /* 932 */ "Τ", /* 933 */ "Υ", /* 934 */ "Φ", /* 935 */ "Χ", /* 936 */ "Ψ", /* 937 */ "Ω", /* 938 */ 0, /* 939 */ 0, /* 940 */ 0, /* 941 */ 0, /* 942 */ 0, /* 943 */ 0, /* 944 */ 0, /* 945 */ "α", /* 946 */ "β", /* 947 */ "γ", /* 948 */ "δ", /* 949 */ "ε", /* 950 */ "ζ", /* 951 */ "η", /* 952 */ "θ", /* 953 */ "ι", /* 954 */ "κ", /* 955 */ "λ", /* 956 */ "μ", /* 957 */ "ν", /* 958 */ "ξ", /* 959 */ "ο", /* 960 */ "π", /* 961 */ "ρ", /* 962 */ "ς", /* 963 */ "σ", /* 964 */ "τ", /* 965 */ "υ", /* 966 */ "φ", /* 967 */ "χ", /* 968 */ "ψ", /* 969 */ "ω", /* 970 */ 0, /* 971 */ 0, /* 972 */ 0, /* 973 */ 0, /* 974 */ 0, /* 975 */ 0, /* 976 */ 0, /* 977 */ "ϑ", /* 978 */ "ϒ", /* 979 */ 0, /* 980 */ 0, /* 981 */ 0, /* 982 */ "ϖ", }; #endif #if 1 /* daved - 0.19.4 - unicode symbol character support */ static const char * unisymbol2[] = { /* 57516 */ "Γ", /* 57517 */ "Δ", /* 57518 */ "Θ", /* 57519 */ "Λ", /* 57520 */ "Ξ", /* 57521 */ "Π", /* 57522 */ "Σ", /* 57523 */ "Υ", /* 57524 */ "Φ", /* 57525 */ "Ψ", /* 57526 */ "Ω", /* 57527 */ "α", /* 57528 */ "β", /* 57529 */ "γ", /* 57530 */ "δ", /* 57531 */ "ε", /* 57532 */ "ζ", /* 57533 */ "η", /* 57534 */ "θ", /* 57535 */ "ι", /* 57536 */ "κ", /* 57537 */ "λ", /* 57538 */ "μ", /* 57539 */ "ν", /* 57540 */ "ξ", /* 57541 */ "ο", /* 57542 */ "π", /* 57543 */ "ρ", /* 57544 */ "σ", /* 57545 */ "τ", /* 57546 */ "υ", /* 57547 */ "φ", /* 57548 */ "χ", /* 57549 */ "ψ", /* 57550 */ "ω", /* 57551 */ "ϵ", /* 57552 */ "ϑ", /* 57553 */ "ϖ", /* 57554 */ 0, /* 57555 */ "ς", /* 57556 */ "ϕ", /* 57557 */ "δ", }; static const char * unisymbol3[] = { /* 61505 */ "Α", /* 61506 */ "Β", /* 61507 */ "Χ", /* 61508 */ "Δ", /* 61509 */ "Ε", /* 61510 */ "Φ", /* 61511 */ "Γ", /* 61512 */ "Η", /* 61513 */ "Ι", /* 61514 */ "ϕ", /* 61515 */ "Κ", /* 61516 */ "Λ", /* 61517 */ "Μ", /* 61518 */ "Ν", /* 61519 */ "Ο", /* 61520 */ "Π", /* 61521 */ "Θ", /* 61522 */ "Ρ", /* 61523 */ "Σ", /* 61524 */ "Τ", /* 61525 */ "Υ", /* 61526 */ "ς", /* 61527 */ "Ω", /* 61528 */ "Ξ", /* 61529 */ "Ψ", /* 61530 */ "Ζ", /* 61531 */ 0, /* 61532 */ 0, /* 61533 */ 0, /* 61534 */ 0, /* 61535 */ 0, /* 61536 */ 0, /* 61537 */ "α", /* 61538 */ "β", /* 61539 */ "χ", /* 61540 */ "δ", /* 61541 */ "ε", /* 61542 */ "φ", /* 61543 */ "γ", /* 61544 */ "η", /* 61545 */ "τ", /* 61546 */ "ϕ", /* 61547 */ "κ", /* 61548 */ "λ", /* 61549 */ "μ", /* 61550 */ "ν", /* 61551 */ "ο", /* 61552 */ "π", /* 61553 */ "θ", /* 61554 */ "ρ", /* 61555 */ "σ", /* 61556 */ "τ", /* 61557 */ "υ", /* 61558 */ "ϖ", /* 61559 */ "ω", /* 61560 */ "ξ", /* 61561 */ "ψ", /* 61562 */ "ζ", }; #endif #if 1 /* 0.19.5 more unicode characters */ static const char * unisymbol4[] = { /* 61600 */ "€", /* 61601 */ "ϒ", /* 61602 */ "′", /* 61603 */ "≤", /* 61604 */ "⁄", /* 61605 */ "∞", /* 61606 */ "ƒ", /* 61607 */ "♣", /* 61608 */ "♦", /* 61609 */ "♥", /* 61610 */ "♠", /* 61611 */ "↔", /* 61612 */ "&larr", /* 61613 */ "↑", /* 61614 */ "→", /* 61615 */ "↓", /* 61616 */ "°", /* 61617 */ "±", /* 61618 */ "″", /* 61619 */ "≥", /* 61620 */ "×", /* 61621 */ "∝", /* 61622 */ "∂", /* 61623 */ "•", /* 61624 */ "÷", /* 61625 */ "≠", /* 61626 */ "≡", /* 61627 */ "≈", /* 61628 */ "…", /* 61629 */ 0, /* vertical bar */ /* 61630 */ "—", /* 61631 */ "↵", /* 61632 */ "ℵ", /* 61633 */ "ℑ", /* 61634 */ "ℜ", /* 61635 */ "℘", /* 61636 */ "⊗", /* 61637 */ "⊕", /* 61638 */ "∅", /* 61639 */ "∩", /* 61640 */ "∪", /* 61641 */ "⊃", /* 61642 */ "⊇", /* 61643 */ "⊄", /* 61644 */ "⊂", /* 61645 */ "⊆", /* 61646 */ "∈", /* 61647 */ "∉", /* 61648 */ "∠", /* 61649 */ "∇", /* 61650 */ "®", /* 61651 */ "©", /* 61652 */ "™", /* 61653 */ "∏", /* 61654 */ "√", /* 61655 */ "·", /* 61656 */ "¬", /* 61657 */ "∧", /* 61658 */ "∨", /* 61659 */ "⇔", /* 61660 */ "⇐", /* 61661 */ "⇑", /* 61662 */ "⇒", /* 61663 */ "⇓", /* 61664 */ "◊", /* 61665 */ "⟨", /* 61666 */ "®", /* 61667 */ "©", /* 61668 */ "™", /* 61669 */ "∑", /* 61670 */ 0, /* large right parenthesis ceiling */ /* 61671 */ 0, /* large parenthesis middle */ /* 61672 */ 0, /* large left parenthesis floor */ /* 61673 */ "⌈", /* large left square bracket ceiling */ /* 61674 */ 0, /* large left square bracket middle */ /* 61675 */ "⌊", /* large left square bracket floor */ /* 61676 */ 0, /* large left bracket ceiling */ /* 61677 */ 0, /* large left bracket middle */ /* 61678 */ 0, /* large left bracket floor */ /* 61679 */ 0, /* large vertical bar */ /* 61680 */ 0, /* appears blank */ /* 61681 */ "⟩", /* 61682 */ "∫", /* integral */ /* 61683 */ 0, /* large integral ceiling */ /* 61684 */ 0, /* large integral middle */ /* 61685 */ 0, /* large integral floor */ /* 61686 */ 0, /* large right parenthesis ceiling */ /* 61687 */ 0, /* large right parenthesis middle */ /* 61688 */ 0, /* large right parenthesis floor */ /* 61689 */ "⌉", /* large right square bracket ceiling */ /* 61690 */ 0, /* large right square bracket middle */ /* 61691 */ "⌋", /* large right square bracket floor */ /* 61692 */ 0, /* large right bracket middle */ /* 61694 */ 0 /* large right bracket floot */ }; #endif #if 1 /* daved - SYMBOL font characters */ static const char* symbol[] = { /* 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 */ "δ", /* 101 */ "ε", /* 102 */ "φ", /* 103 */ "γ", /* 104 */ "η", /* 105 */ "ι", /* 106 */ "", /* ? */ /* 107 */ "κ", /* 108 */ "λ", /* 109 */ "μ", /* 110 */ "ν", /* 111 */ "ο", /* 112 */ "π", /* 113 */ "θ", /* 114 */ "ρ", /* 115 */ "σ", /* 116 */ "τ", /* 117 */ "υ", /* 118 */ "ϖ", /* 119 */ "ω", /* 120 */ "ξ", /* 121 */ "ψ", /* 122 */ "ζ", /* 123 */ "{", /* 124 */ "|", /* 125 */ "}", /* 126 */ "∼", /* 127 */ 0, /* 128 */ 0, /* 129 */ 0, /* 130 */ 0, /* 131 */ 0, /* 132 */ 0, /* 133 */ 0, /* 134 */ 0, /* 135 */ 0, /* 136 */ 0, /* 137 */ 0, /* 138 */ 0, /* 139 */ 0, /* 140 */ 0, /* 141 */ 0, /* 142 */ 0, /* 143 */ 0, /* 144 */ 0, /* 145 */ 0, /* 146 */ 0, /* 147 */ 0, /* 148 */ 0, /* 149 */ 0, /* 150 */ 0, /* 151 */ 0, /* 152 */ 0, /* 153 */ 0, /* 154 */ 0, /* 155 */ 0, /* 156 */ 0, /* 157 */ 0, /* 158 */ 0, /* 159 */ 0, /* 160 */ 0, /* 161 */ "ϒ", /* 162 */ "′", /* 163 */ "≤", /* 164 */ "⁄", /* 165 */ "∞", /* 166 */ "ƒ", /* 167 */ "♣", /* 168 */ "♦", /* 169 */ "♥", /* 170 */ "♠", /* 171 */ "↔", /* 172 */ "←", /* 173 */ 0, /* 174 */ "→", /* 175 */ "↓", /* 176 */ "°", /* 177 */ "±", /* 178 */ "″", /* 179 */ "≥", /* 180 */ "×", /* 181 */ "∝", /* 182 */ "∂", /* 183 */ "•", /* 184 */ "÷", /* 185 */ "≠", /* 186 */ "≡", /* 187 */ "≈", /* 188 */ "…", /* 189 */ "│", /* vertical line */ /* 190 */ "—", /* 191 */ "↵", /* 192 */ "ℵ", /* 193 */ "ℑ", /* 194 */ "ℜ", /* 195 */ "℘", /* 196 */ "⊗", /* 197 */ "⊕", /* 198 */ "∅", /* 199 */ "∩", /* 200 */ "∪", /* 201 */ "⊃", /* 202 */ "⊇", /* 203 */ "⊄", /* 204 */ "⊂", /* 205 */ "⊆", /* 206 */ "∈", /* 207 */ "∉", /* 208 */ "∠", /* 209 */ "∇", /* 210 */ "®", /* serif */ /* 211 */ "©", /* serif */ /* 212 */ "™", /* serif */ /* 213 */ "∏", /* 214 */ "√", /* 215 */ "·", /* 216 */ "¬", /* 217 */ "∧", /* 218 */ "∨", /* 219 */ "⇔", /* 220 */ "⇐", /* 221 */ "⇑", /* 222 */ "⇒", /* 223 */ "⇓", /* 224 */ "◊", /* 225 */ "⟨", /* 226 */ "®", /* sans serif */ /* 227 */ "©", /* sans serif */ /* 228 */ "™", /* sans serif */ /* 229 */ "∑", /* 230 */ 0, /* 231 */ 0, /* 232 */ 0, /* 233 */ "⌈", /* 234 */ "|", /* 235 */ "⌊", /* 236 */ 0, /* 237 */ 0, /* 238 */ 0, /* 239 */ "|", /* 240 */ "ð", /* 241 */ "⟩", /* 242 */ "∫", /* 243 */ 0, /* 244 */ 0, /* 245 */ 0, /* 246 */ 0, /* 247 */ 0, /* 248 */ 0, /* 249 */ "⌉", /* 250 */ "|", /* 251 */ "⌋", /* 252 */ 0, /* 253 */ 0, /* 254 */ 0, }; #endif static const char* cp437 [] = { /* 0x80 */ "ç", /* 0x81 */ "ü", /* 0x82 */ "é", /* 0x83 */ "â", /* 0x84 */ "ä", /* 0x85 */ "à", /* 0x86 */ "å", /* 0x87 */ "ç", /* 0x88 */ "ê", /* 0x89 */ "ë", /* 0x8a */ "è", /* 0x8b */ "ï", /* 0x8c */ "î", /* 0x8d */ "ì", /* 0x8e */ "ä", /* 0x8f */ "å", /* 0x90 */ "é", /* 0x91 */ "æ", /* 0x92 */ "æ", /* 0x93 */ "ô", /* 0x94 */ "ö", /* 0x95 */ "ò", /* 0x96 */ "û", /* 0x97 */ "ù", /* 0x98 */ "ÿ", /* 0x99 */ "ö", /* 0x9a */ "ü", /* 0x9b */ "¢", /* 0x9c */ "£", /* 0x9d */ "¥", /* 0x9e */ "₧", /* peseta */ /* 0x9f */ "ƒ", /* small f with hook */ /* 0xa0 */ "á", /* 0xa1 */ "í", /* 0xa2 */ "ó", /* 0xa3 */ "ú", /* 0xa4 */ "ñ", /* 0xa5 */ "ñ", /* 0xa6 */ "ª", /* 0xa7 */ "¼", /* 0xa8 */ "¿", /* 0xa9 */ "⌐", /* reversed not */ /* 0xaa */ "¬", /* 0xab */ "½", /* 0xac */ "»", /* 0xad */ "¡", /* 0xae */ "«", /* 0xaf */ "º", /* 0xb0 */ "░", /* light shade */ /* 0xb1 */ "▒", /* med. shade */ /* 0xb2 */ "▓", /* dark shade */ /* 0xb3 */ "│", /* box-draw light vert. */ /* 0xb4 */ "┤", /* box-draw light vert. + lt. */ /* 0xb5 */ "╡", /* box-draw vert. sgl. + lt. dbl. */ /* 0xb6 */ "╢", /* box-draw vert. dbl. + lt. sgl. */ /* 0xb7 */ "╖", /* box-draw dn. dbl. + lt. sgl. */ /* 0xb8 */ "╕", /* box-draw dn. sgl. + lt. dbl. */ /* 0xb9 */ "╣", /* box-draw dbl. vert. + lt. */ /* 0xba */ "║", /* box-draw dbl. vert. */ /* 0xbb */ "╗", /* box-draw dbl. dn. + lt. */ /* 0xbc */ "╝", /* box-draw dbl. up + lt. */ /* 0xbd */ "╜", /* box-draw up dbl. + lt. sgl. */ /* 0xbe */ "╛", /* box-draw up sgl. + lt. dbl. */ /* 0xbf */ "┐", /* box-draw light dn. + lt. */ /* 0xc0 */ "└", /* box-draw light up + rt. */ /* 0xc1 */ "┴", /* box-draw light up + horiz. */ /* 0xc2 */ "┬", /* box-draw light dn. + horiz. */ /* 0xc3 */ "├", /* box-draw light vert. + rt. */ /* 0xc4 */ "─", /* box-draw light horiz. */ /* 0xc5 */ "┼", /* box-draw light vert. + horiz. */ /* 0xc6 */ "╞", /* box-draw vert. sgl. + rt. dbl. */ /* 0xc7 */ "╟", /* box-draw vert. dbl. + rt. sgl. */ /* 0xc8 */ "╚", /* box-draw dbl. up + rt. */ /* 0xc9 */ "╔", /* box-draw dbl. dn. + rt. */ /* 0xca */ "╩", /* box-draw dbl. up + horiz. */ /* 0xcb */ "╦", /* box-draw dbl. dn. + horiz. */ /* 0xcc */ "╠", /* box-draw dbl. vert. + rt. */ /* 0xcd */ "═", /* box-draw dbl. horiz. */ /* 0xce */ "╬", /* box-draw dbl. vert. + horiz. */ /* 0xcf */ "╧", /* box-draw up sgl. + horiz. dbl. */ /* 0xd0 */ "╨", /* box-draw up dbl. + horiz. sgl. */ /* 0xd1 */ "╤", /* box-draw dn. sgl. + horiz. dbl. */ /* 0xd2 */ "╥", /* box-draw dn. dbl. + horiz. sgl. */ /* 0xd3 */ "╙", /* box-draw up dbl. + rt. sgl. */ /* 0xd4 */ "╘", /* box-draw up sgl. + rt. dbl. */ /* 0xd5 */ "╒", /* box-draw dn. sgl. + rt. dbl. */ /* 0xd6 */ "╓", /* box-draw dn. dbl. + rt. sgl. */ /* 0xd7 */ "╫", /* box-draw vert. dbl. + horiz. sgl. */ /* 0xd8 */ "╪", /* box-draw vert. sgl. + horiz. dbl. */ /* 0xd9 */ "┘", /* box-draw light up + lt. */ /* 0xda */ "┌", /* box-draw light dn. + rt. */ /* 0xdb */ "█", /* full block */ /* 0xdc */ "▄", /* lower 1/2 block */ /* 0xdd */ "▌", /* lt. 1/2 block */ /* 0xde */ "▐", /* rt. 1/2 block */ /* 0xdf */ "▀", /* upper 1/2 block */ /* 0xe0 */ "α", /* greek small alpha */ /* 0xe1 */ "ß", /* 0xe2 */ "Γ", /* greek cap gamma */ /* 0xe3 */ "π", /* greek small pi */ /* 0xe4 */ "Σ", /* greek cap sigma */ /* 0xe5 */ "σ", /* greek small sigma */ /* 0xe6 */ "µ", /* 0xe7 */ "τ", /* greek small tau */ /* 0xe8 */ "Φ", /* greek cap phi */ /* 0xe9 */ "Θ", /* greek cap theta */ /* 0xea */ "Ω", /* greek cap omega */ /* 0xeb */ "δ", /* greek small delta */ /* 0xec */ "∞", /* inf. */ /* 0xed */ "φ", /* greek small phi */ /* 0xee */ "ε", /* greek small epsilon */ /* 0xef */ "∩", /* intersect */ /* 0xf0 */ "≡", /* identical */ /* 0xf1 */ "±", /* 0xf2 */ "≥", /* greater-than or equal to */ /* 0xf3 */ "≤", /* less-than or equal to */ /* 0xf4 */ "⌠", /* top 1/2 integral */ /* 0xf5 */ "⌡", /* bottom 1/2 integral */ /* 0xf6 */ "÷", /* 0xf7 */ "≈", /* almost = */ /* 0xf8 */ "+", /* 0xf9 */ "∙", /* bullet op */ /* 0xfa */ "·", /* 0xfb */ "√", /* sqrt */ /* 0xfc */ "ⁿ", /* super-script small n */ /* 0xfd */ "²", /* 0xfe */ "■", /* black square */ /* 0xff */ " ", }; static const char* cp850 [] = { /* 0x80 */ "ç", /* 0x81 */ "ü", /* 0x82 */ "é", /* 0x83 */ "â", /* 0x84 */ "ä", /* 0x85 */ "à", /* 0x86 */ "å", /* 0x87 */ "ç", /* 0x88 */ "ê", /* 0x89 */ "ë", /* 0x8a */ "è", /* 0x8b */ "ï", /* 0x8c */ "î", /* 0x8d */ "ì", /* 0x8e */ "ä", /* 0x8f */ "å", /* 0x90 */ "é", /* 0x91 */ "æ", /* 0x92 */ "æ", /* 0x93 */ "ô", /* 0x94 */ "ö", /* 0x95 */ "ò", /* 0x96 */ "û", /* 0x97 */ "ù", /* 0x98 */ "ÿ", /* 0x99 */ "ö", /* 0x9a */ "ü", /* 0x9b */ "ø", /* 0x9c */ "£", /* 0x9d */ "ø", /* 0x9e */ "×", /* 0x9f */ "ƒ", /* small f with hook */ /* 0xa0 */ "á", /* 0xa1 */ "í", /* 0xa2 */ "ó", /* 0xa3 */ "ú", /* 0xa4 */ "ñ", /* 0xa5 */ "ñ", /* 0xa6 */ "ª", /* 0xa7 */ "¼", /* 0xa8 */ "¿", /* 0xa9 */ "®", /* 0xaa */ "¬", /* 0xab */ "½", /* 0xac */ "»", /* 0xad */ "¡", /* 0xae */ "«", /* 0xaf */ "º", /* 0xb0 */ "░", /* light shade */ /* 0xb1 */ "▒", /* med. shade */ /* 0xb2 */ "▓", /* dark shade */ /* 0xb3 */ "│", /* box-draw light vert. */ /* 0xb4 */ "┤", /* box-draw light vert. + lt. */ /* 0xb5 */ "á", /* 0xb6 */ "â", /* 0xb7 */ "à", /* 0xb8 */ "©", /* 0xb9 */ "╣", /* box-draw dbl. vert. + lt. */ /* 0xba */ "║", /* box-draw dbl. vert. */ /* 0xbb */ "╗", /* box-draw dbl. dn. + lt. */ /* 0xbc */ "╝", /* box-draw dbl. up + lt. */ /* 0xbd */ "¢", /* 0xbe */ "¥", /* 0xbf */ "┐", /* box-draw light dn. + lt. */ /* 0xc0 */ "└", /* box-draw light up + rt. */ /* 0xc1 */ "┴", /* box-draw light up + horiz. */ /* 0xc2 */ "┬", /* box-draw light dn. + horiz. */ /* 0xc3 */ "├", /* box-draw light vert. + rt. */ /* 0xc4 */ "─", /* box-draw light horiz. */ /* 0xc5 */ "┼", /* box-draw light vert. + horiz. */ /* 0xc6 */ "ã", /* 0xc7 */ "ã", /* 0xc8 */ "╚", /* box-draw dbl. up + rt. */ /* 0xc9 */ "╔", /* box-draw dbl. dn. + rt. */ /* 0xca */ "╩", /* box-draw dbl. up + horiz. */ /* 0xcb */ "╦", /* box-draw dbl. dn. + horiz. */ /* 0xcc */ "╠", /* box-draw dbl. vert. + rt. */ /* 0xcd */ "═", /* box-draw dbl. horiz. */ /* 0xce */ "╬", /* box-draw dbl. vert. + horiz. */ /* 0xcf */ "¤", /* 0xd0 */ "ð", /* 0xd1 */ "ð", /* 0xd2 */ "ê", /* 0xd3 */ "ë", /* 0xd4 */ "è", /* 0xd5 */ "ı", /* small dotless i */ /* 0xd6 */ "í", /* 0xd7 */ "î", /* 0xd8 */ "ï", /* 0xd9 */ "┘", /* box-draw light up + lt. */ /* 0xda */ "┌", /* box-draw light dn. + rt. */ /* 0xdb */ "█", /* full-block */ /* 0xdc */ "▄", /* lower 1/2 block */ /* 0xdd */ "¦", /* 0xde */ "ì", /* 0xdf */ "▀", /* upper 1/2 block */ /* 0xe0 */ "ó", /* 0xe1 */ "ß", /* 0xe2 */ "ô", /* 0xe3 */ "ò", /* 0xe4 */ "õ", /* 0xe5 */ "õ", /* 0xe6 */ "µ", /* 0xe7 */ "þ", /* 0xe8 */ "þ", /* 0xe9 */ "ú", /* 0xea */ "û", /* 0xeb */ "ù", /* 0xec */ "ý", /* 0xed */ "ý", /* 0xee */ "¯", /* 0xef */ "´", /* 0xf0 */ "­", /* 0xf1 */ "±", /* 0xf2 */ "‗", /* dbl. lowline */ /* 0xf3 */ "¾", /* 0xf4 */ "¶", /* 0xf5 */ "§", /* 0xf6 */ "÷", /* 0xf7 */ "¸", /* 0xf8 */ "+", /* 0xf9 */ "¨", /* 0xfa */ "·", /* 0xfb */ "¹", /* 0xfc */ "³", /* 0xfd */ "²", /* 0xfe */ "■", /* black square */ /* 0xff */ " ", }; #if 1 /* daved - 0.20.3 */ static const char * Greek[] = { /* 0x80 */ "ç", /* 0x81 */ "ü", /* 0x82 */ "é", /* 0x83 */ "â", /* 0x84 */ "ä", /* 0x85 */ "à", /* 0x86 */ "å", /* 0x87 */ "ç", /* 0x88 */ "ê", /* 0x89 */ "ë", /* 0x8a */ "è", /* 0x8b */ "ï", /* 0x8c */ "î", /* 0x8d */ "ì", /* 0x8e */ "ä", /* 0x8f */ "å", /* 0x90 */ "é", /* 0x91 */ "æ", /* 0x92 */ "æ", /* 0x93 */ "ô", /* 0x94 */ "ö", /* 0x95 */ "ò", /* 0x96 */ "û", /* 0x97 */ "ù", /* 0x98 */ "ÿ", /* 0x99 */ "ö", /* 0x9a */ "ü", /* 0x9b */ "ø", /* 0x9c */ "£", /* 0x9d */ "ø", /* 0x9e */ "×", /* 0x9f */ "ƒ", /* small f with hook */ /* 0xa0 */ "á", /* 0xa1 */ "í", /* 0xa2 */ "ó", /* 0xa3 */ "ú", /* 0xa4 */ "ñ", /* 0xa5 */ "ñ", /* 0xa6 */ "ª", /* 0xa7 */ "¼", /* 0xa8 */ "¿", /* 0xa9 */ "®", /* 0xaa */ "¬", /* 0xab */ "½", /* 0xac */ "»", /* 0xad */ "¡", /* 0xae */ "«", /* 0xaf */ "º", /* 0xb0 */ "░", /* light shade */ /* 0xb1 */ "▒", /* med. shade */ /* 0xb2 */ "▓", /* dark shade */ /* 0xb3 */ "│", /* box-draw light vert. */ /* 0xb4 */ "┤", /* box-draw light vert. + lt. */ /* 0xb5 */ "á", /* 0xb6 */ "â", /* 0xb7 */ "à", /* 0xb8 */ "©", /* 0xb9 */ "╣", /* box-draw dbl. vert. + lt. */ /* 0xba */ "║", /* box-draw dbl. vert. */ /* 0xbb */ "╗", /* box-draw dbl. dn. + lt. */ /* 0xbc */ "╝", /* box-draw dbl. up + lt. */ /* 0xbd */ "¢", /* 0xbe */ "¥", /* 0xbf */ "┐", /* box-draw light dn. + lt. */ /* 0xc0 */ "└", /* box-draw light up + rt. */ /* 0xc1 */ "┴", /* box-draw light up + horiz. */ /* 0xc2 */ "┬", /* box-draw light dn. + horiz. */ /* 0xc3 */ "├", /* box-draw light vert. + rt. */ /* 0xc4 */ "─", /* box-draw light horiz. */ /* 0xc5 */ "┼", /* box-draw light vert. + horiz. */ /* 0xc6 */ "ã", /* 0xc7 */ "ã", /* 0xc8 */ "╚", /* box-draw dbl. up + rt. */ /* 0xc9 */ "╔", /* box-draw dbl. dn. + rt. */ /* 0xca */ "╩", /* box-draw dbl. up + horiz. */ /* 0xcb */ "╦", /* box-draw dbl. dn. + horiz. */ /* 0xcc */ "╠", /* box-draw dbl. vert. + rt. */ /* 0xcd */ "═", /* box-draw dbl. horiz. */ /* 0xce */ "╬", /* box-draw dbl. vert. + horiz. */ /* 0xcf */ "¤", /* 0xd0 */ "ð", /* 0xd1 */ "ð", /* 0xd2 */ "ê", /* 0xd3 */ "ë", /* 0xd4 */ "è", /* 0xd5 */ "ı", /* small dotless i */ /* 0xd6 */ "í", /* 0xd7 */ "î", /* 0xd8 */ "ï", /* 0xd9 */ "┘", /* box-draw light up + lt. */ /* 0xda */ "┌", /* box-draw light dn. + rt. */ /* 0xdb */ "█", /* full-block */ /* 0xdc */ "▄", /* lower 1/2 block */ /* 0xdd */ "¦", /* 0xde */ "ì", /* 0xdf */ "▀", /* upper 1/2 block */ /* 0xe0 */ "ó", /* above here not done */ /* 0xe1 */ "α", /* 0xe2 */ "β", /* 0xe3 */ "γ", /* 0xe4 */ "δ", /* 0xe5 */ "ε", /* 0xe6 */ "ζ", /* 0xe7 */ "η", /* 0xe8 */ "θ", /* 0xe9 */ "ι", /* 0xea */ "κ", /* 0xeb */ "λ", /* 0xec */ "μ", /* 0xed */ "ν", /* 0xee */ "ξ", /* 0xef */ "ο", /* 0xf0 */ "π", /* 0xf1 */ "ρ", /* 0xf2 */ "ς", /* 0xf3 */ "σ", /* 0xf4 */ "τ", /* 0xf5 */ "υ", /* 0xf6 */ "φ", /* 0xf7 */ "χ", /* 0xf8 */ "ψ", /* 0xf9 */ "&omiga;", /* 0xfa */ "&iotauml;", /* 0xfb */ "&nuuml;", /* 0xfc */ "&omicronacute;", /* 0xfd */ "&nuacute;", /* 0xfe */ "&omegaacute;", /* black square */ /* 0xff */ " ", }; #endif /*======================================================================== * Name: html_unisymbol_print * Purpose: Outputs arbitrary unicode symbol * Args: Unsigned Short. * Returns: String representing symbol. *=======================================================================*/ char * html_unisymbol_print (unsigned short c) { char r[12]; snprintf(r, 9, "&#%04d;", c); return my_strdup(r); } /*======================================================================== * Name: html_init * Purpose: Generates the HTML output personality. * Args: None. * Returns: OutputPersonality. *=======================================================================*/ OutputPersonality * html_init (void) { OutputPersonality* op; op = op_create(); op->comment_begin = "\n"; op->document_begin = "\n\n"; op->document_end = "\n"; op->header_begin = "\n"; op->header_end = "\n"; op->document_title_begin = ""; op->document_title_end = "\n"; op->document_author_begin = "\n"; op->document_changedate_begin = "\n"; op->body_begin = ""; op->body_end = "\n"; op->paragraph_begin = "

"; op->paragraph_end = "

\n"; op->center_begin = "
"; op->center_end = "
\n"; op->justify_begin = "
\n"; op->justify_end = "
\n"; op->align_left_begin = "
\n"; op->align_left_end = "
\n"; op->align_right_begin = "
\n"; op->align_right_end = "
\n"; op->forced_space = " "; op->line_break = "
\n"; op->page_break = "


\n"; op->hyperlink_begin = "hyperlink_end = "\">hyperlink"; op->imagelink_begin = "imagelink_end = "\">"; op->table_begin = "\n"; op->table_end = "
\n"; op->table_row_begin = ""; op->table_row_end = "\n"; op->table_cell_begin = ""; op->table_cell_end = "\n"; /* Character attributes */ op->font_begin = ""; op->font_end = ""; op->fontsize_begin = ""; op->fontsize_end = ""; op->fontsize8_begin = ""; op->fontsize8_end = ""; op->fontsize10_begin = ""; op->fontsize10_end = ""; op->fontsize12_begin = ""; op->fontsize12_end = ""; op->fontsize14_begin = ""; op->fontsize14_end = ""; op->fontsize18_begin = ""; op->fontsize18_end = ""; op->fontsize24_begin = ""; op->fontsize24_end = ""; op->smaller_begin = ""; op->smaller_end = ""; op->bigger_begin = ""; op->bigger_end = ""; op->foreground_begin = ""; op->foreground_end = ""; op->background_begin = ""; op->background_end = ""; op->bold_begin = ""; op->bold_end = ""; op->italic_begin = ""; op->italic_end = ""; op->underline_begin = ""; op->underline_end = ""; op->dbl_underline_begin = ""; op->dbl_underline_end = ""; op->superscript_begin = ""; op->superscript_end = ""; op->subscript_begin = ""; op->subscript_end = ""; op->strikethru_begin = ""; op->strikethru_end = ""; op->dbl_strikethru_begin = ""; op->dbl_strikethru_end = ""; op->emboss_begin=""; op->emboss_end = ""; op->engrave_begin = ""; op->engrave_end = ""; op->shadow_begin= ""; op->shadow_end= ""; op->outline_begin= ""; op->outline_end= ""; op->expand_begin = ""; op->expand_end = ""; op->pointlist_begin = "

    \n"; op->pointlist_end = "
\n"; op->pointlist_item_begin = "
  • "; op->pointlist_item_end = "
  • \n"; op->numericlist_begin = "
      \n"; op->numericlist_end = "
    \n"; op->numericlist_item_begin = "
  • "; op->numericlist_item_end = "
  • \n"; op->simulate_small_caps = true; op->simulate_all_caps = true; op->simulate_word_underline = true; op->ascii_translation_table = ascii; op->ansi_translation_table = ansi; #if 1 /* daved - 0.9.6 */ op->ansi_first_char = 0x78; #else op->ansi_first_char = 0x82; #endif op->ansi_last_char = 0xff; op->cp437_translation_table = cp437; op->cp437_first_char = 0x80; op->cp437_last_char = 0xff; op->cp850_translation_table = cp850; op->cp850_first_char = 0x80; op->cp850_last_char = 0xff; op->mac_translation_table = mac; op->mac_first_char = 0xa4; op->mac_last_char = 0xd5; #if 1 /* daved 0.19.8 */ op->chars.right_quote = "’"; op->chars.left_quote = "‘"; op->chars.right_dbl_quote = "”"; op->chars.left_dbl_quote = "“"; #else op->chars.right_quote = "'"; op->chars.left_quote = "`"; op->chars.right_dbl_quote = "\""; op->chars.left_dbl_quote = "\""; #endif #if 1 /* daved - 0.19.8 */ op->chars.endash = "–"; op->chars.emdash = "—"; op->chars.bullet = "•"; op->chars.lessthan = "<"; op->chars.greaterthan = ">"; op->chars.amp = "&"; op->chars.copyright = "©"; op->chars.trademark = "™"; op->chars.nonbreaking_space = " "; #endif #if 1 /* daved - 0.19.4 - unicode symbol character support */ op->unisymbol1_first_char = 913; op->unisymbol1_last_char = 982; op->unisymbol1_translation_table = unisymbol1; op->unisymbol2_first_char = 57516; op->unisymbol2_last_char = 57557; op->unisymbol2_translation_table = unisymbol2; op->unisymbol3_first_char = 61505; op->unisymbol3_last_char = 61562; op->unisymbol3_translation_table = unisymbol3; #endif #if 1 /* daved - 0.19.5 - more unicode symbol character support */ op->unisymbol4_first_char = 61600; op->unisymbol4_last_char = 61694; op->unisymbol4_translation_table = unisymbol4; #endif #if 1 /* daved - 0.19.5 - SYMBOL font support */ op->symbol_first_char = 60; op->symbol_last_char = 254; op->symbol_translation_table = symbol; #endif #if 1 /* daved - 0.20.3 - GREEK font support */ op->greek_first_char = 0x80; op->greek_last_char = 0xff; op->greek_translation_table = Greek; #endif op->unisymbol_print = html_unisymbol_print; return op; } lmms-1.1.3/plugins/flp_import/unrtf/html.h000066400000000000000000000032211247673406200206040ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: html * Author name: Zachary Smith * Create date: 19 Sep 01 * Purpose: Definitions for the HTML output personality *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifndef _HTML extern OutputPersonality* html_init(void); #define _HTML #endif lmms-1.1.3/plugins/flp_import/unrtf/main.h000066400000000000000000000033751247673406200205760ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: main.h * Author name: Zachary Smith * Create date: 1 Sept 2000 * Purpose: Externs for main.c. *---------------------------------------------------------------------- * Changes: * 15 Oct 00, tuorfa@yahoo.com: removed echo_mode extern * 19 Sep 01, tuorfa@yahoo.com: added output personality * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ extern int lineno; #ifndef _OUTPUT #include "output.h" #endif extern OutputPersonality *op; lmms-1.1.3/plugins/flp_import/unrtf/output.c000066400000000000000000000321741247673406200212040ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: output * Author name: Zachary Smith * Create date: 18 Sep 01 * Purpose: Generalized output module *---------------------------------------------------------------------- * Changes: * 22 Sep 01, tuorfa@yahoo.com: addition of functions to change font size * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 08 Oct 03, daved@physiol.usyd.edu.au: added stdlib.h for linux * 25 Sep 04, st001906@hrz1.hrz.tu-darmstadt.de: added stdlib.h for djgpp * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 06 Jan 06, marcossamaral@terra.com.br: changes in STDOUT * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 * 17 Dec 07, daved@physiol.usyd.edu.au: added support for --noremap from * David Santinoli *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "ur_malloc.h" #include "defs.h" #include "error.h" #include "output.h" #include "main.h" #include "convert.h" extern QString outstring; /*======================================================================== * Name: op_create * Purpose: Creates a blank output personality. * Args: None. * Returns: Output personality struct. *=======================================================================*/ OutputPersonality* op_create () { OutputPersonality* new_op; new_op = (OutputPersonality*) my_malloc (sizeof(OutputPersonality)); if (!new_op) error_handler ("cannot allocate output personality"); memset ((void*) new_op, 0, sizeof (OutputPersonality)); return new_op; } /*======================================================================== * Name: op_free * Purpose: Deallocates an output personality, but none of the strings * it points to since they are usually constants. * Args: OutputPersonality. * Returns: None. *=======================================================================*/ void op_free (OutputPersonality *op) { CHECK_PARAM_NOT_NULL(op); my_free ((char*) op); } /*======================================================================== * Name: op_translate_char * Purpose: Performs a translation of a character in the context of * a given output personality. * Args: OutputPersonality, character set#, character. * Returns: String. *=======================================================================*/ const char * #if 1 /* daved - 0.19.6 */ op_translate_char (OutputPersonality *op, int charset, CodepageInfo *codepage, int ch, int ntable) #else op_translate_char (OutputPersonality *op, int charset, CodepageInfo *codepage, int ch) #endif { short start; const char *result=NULL; #if 1 /* daved - 0.20.5 */ static char output_buffer[2]={ 0, 0 }; #endif CHECK_PARAM_NOT_NULL(op); #if 1 /* daved - 0.20.5 */ if (no_remap_mode == true && ch < 256) { output_buffer[0]=ch; result=output_buffer; } else #endif #if 1 /* daved - 0.19.6 */ /* if we are seeking a character from a symbol font we can be below 0x80 */ if(ntable == FONTSYMBOL_TABLE) { start = op->symbol_first_char; if(ch >= start && ch <= op->symbol_last_char) result = op->symbol_translation_table[ch - start]; if(result) return result; } else #endif #if 1 /* daved - 0.20.3 */ if(ntable == FONTGREEK_TABLE) { start = op->greek_first_char; if(ch >= start && ch <= op->greek_last_char) result = op->greek_translation_table[ch - start]; if(result) return result; } #endif if (ch >= 0x20 && ch < 0x80) { result = op->ascii_translation_table [ch - 0x20]; } else if (charset != CHARSET_ANSI && charset != CHARSET_MAC && charset != CHARSET_CP437 && charset != CHARSET_CP850) error_handler ("invalid character set value, cannot translate character"); else switch (charset) { case CHARSET_ANSI: if (codepage != NULL && op->unisymbol_print != NULL && codepage->cp) { if(0) printf("", codepage->chars[ch - 0x80]); if (codepage->chars[ch - 0x80]) { if(0) printf(""); result = op->unisymbol_print(codepage->chars[ch - 0x80]); } } if(!result) { start = op->ansi_first_char; if (ch >= start && ch <= op->ansi_last_char) result = op->ansi_translation_table [ch-start]; } break; case CHARSET_MAC: start = op->mac_first_char; if (ch >= start && ch <= op->mac_last_char) result = op->mac_translation_table [ch-start]; break; case CHARSET_CP437: start = op->cp437_first_char; if (ch >= start && ch <= op->cp437_last_char) result = op->cp437_translation_table [ch-start]; break; case CHARSET_CP850: start = op->cp850_first_char; if (ch >= start && ch <= op->cp850_last_char) result = op->cp850_translation_table [ch-start]; break; } return result; } /*======================================================================== * Name: op_begin_std_fontsize * Purpose: Prints whatever is necessary to perform a change in the * current font size. * Args: OutputPersonality, desired size. * Returns: None. *=======================================================================*/ void op_begin_std_fontsize (OutputPersonality *op, int size) { size = ( size * 3 ) / 2; int found_std_expr = false; CHECK_PARAM_NOT_NULL(op); /* Look for an exact match with a standard point size. */ switch (size) { case 8: if (op->fontsize8_begin) { outstring+=QString().sprintf("%s", op->fontsize8_begin); found_std_expr = true; } break; case 10: if (op->fontsize10_begin) { outstring+=QString().sprintf("%s", op->fontsize10_begin); found_std_expr = true; } break; case 12: if (op->fontsize12_begin) { outstring+=QString().sprintf("%s", op->fontsize12_begin); found_std_expr = true; } break; case 14: if (op->fontsize14_begin) { outstring+=QString().sprintf("%s", op->fontsize14_begin); found_std_expr = true; } break; case 18: if (op->fontsize18_begin) { outstring+=QString().sprintf("%s", op->fontsize18_begin); found_std_expr = true; } break; case 24: if (op->fontsize24_begin) { outstring+=QString().sprintf("%s", op->fontsize24_begin); found_std_expr = true; } break; case 36: if (op->fontsize36_begin) { outstring+=QString().sprintf("%s", op->fontsize36_begin); found_std_expr = true; } break; case 48: if (op->fontsize48_begin) { outstring+=QString().sprintf("%s", op->fontsize48_begin); found_std_expr = true; } break; } /* If no exact match, try to write out a change to the * exact point size. */ if (!found_std_expr) { if (op->fontsize_begin) { char expr[16]; sprintf (expr, "%d", size); outstring+=QString().sprintf(op->fontsize_begin, expr); } else { /* If we cannot write out a change for the exact * point size, we must approximate to a standard * size. */ if (size<9 && op->fontsize8_begin) { outstring+=QString().sprintf("%s", op->fontsize8_begin); } else if (size<11 && op->fontsize10_begin) { outstring+=QString().sprintf("%s", op->fontsize10_begin); } else if (size<13 && op->fontsize12_begin) { outstring+=QString().sprintf("%s", op->fontsize12_begin); } else if (size<16 && op->fontsize14_begin) { outstring+=QString().sprintf("%s", op->fontsize14_begin); } else if (size<21 && op->fontsize18_begin) { outstring+=QString().sprintf("%s", op->fontsize18_begin); } else if (size<30 && op->fontsize24_begin) { outstring+=QString().sprintf("%s", op->fontsize24_begin); } else if (size<42 && op->fontsize36_begin) { outstring+=QString().sprintf("%s", op->fontsize36_begin); } else if (size>40 && op->fontsize48_begin) { outstring+=QString().sprintf("%s", op->fontsize48_begin); } else /* If we can't even produce a good approximation, * just try to get a font size near 12 point. */ if (op->fontsize12_begin) outstring+=QString().sprintf("%s", op->fontsize12_begin); else if (op->fontsize14_begin) outstring+=QString().sprintf("%s", op->fontsize14_begin); else if (op->fontsize10_begin) outstring+=QString().sprintf("%s", op->fontsize10_begin); else if (op->fontsize18_begin) outstring+=QString().sprintf("%s", op->fontsize18_begin); else if (op->fontsize8_begin) outstring+=QString().sprintf("%s", op->fontsize8_begin); else error_handler ("output personality lacks sufficient font size change capability"); } } } /*======================================================================== * Name: op_end_std_fontsize * Purpose: Prints whatever is necessary to perform a change in the * current font size. * Args: OutputPersonality, desired size. * Returns: None. *=======================================================================*/ void op_end_std_fontsize (OutputPersonality *op, int size) { int found_std_expr = false; CHECK_PARAM_NOT_NULL(op); /* Look for an exact match with a standard point size. */ switch (size) { case 8: if (op->fontsize8_end) { outstring+=QString().sprintf("%s", op->fontsize8_end); found_std_expr = true; } break; case 10: if (op->fontsize10_end) { outstring+=QString().sprintf("%s", op->fontsize10_end); found_std_expr = true; } break; case 12: if (op->fontsize12_end) { outstring+=QString().sprintf("%s", op->fontsize12_end); found_std_expr = true; } break; case 14: if (op->fontsize14_end) { outstring+=QString().sprintf("%s", op->fontsize14_end); found_std_expr = true; } break; case 18: if (op->fontsize18_end) { outstring+=QString().sprintf("%s", op->fontsize18_end); found_std_expr = true; } break; case 24: if (op->fontsize24_end) { outstring+=QString().sprintf("%s", op->fontsize24_end); found_std_expr = true; } break; case 36: if (op->fontsize36_end) { outstring+=QString().sprintf("%s", op->fontsize36_end); found_std_expr = true; } break; case 48: if (op->fontsize48_end) { outstring+=QString().sprintf("%s", op->fontsize48_end); found_std_expr = true; } break; } /* If no exact match, try to write out a change to the * exact point size. */ if (!found_std_expr) { if (op->fontsize_end) { char expr[16]; sprintf (expr, "%d", size); outstring+=QString().sprintf(op->fontsize_end, expr); } else { /* If we cannot write out a change for the exact * point size, we must approximate to a standard * size. */ if (size<9 && op->fontsize8_end) { outstring+=QString().sprintf("%s", op->fontsize8_end); } else if (size<11 && op->fontsize10_end) { outstring+=QString().sprintf("%s", op->fontsize10_end); } else if (size<13 && op->fontsize12_end) { outstring+=QString().sprintf("%s", op->fontsize12_end); } else if (size<16 && op->fontsize14_end) { outstring+=QString().sprintf("%s", op->fontsize14_end); } else if (size<21 && op->fontsize18_end) { outstring+=QString().sprintf("%s", op->fontsize18_end); } else if (size<30 && op->fontsize24_end) { outstring+=QString().sprintf("%s", op->fontsize24_end); } else if (size<42 && op->fontsize36_end) { outstring+=QString().sprintf("%s", op->fontsize36_end); } else if (size>40 && op->fontsize48_end) { outstring+=QString().sprintf("%s", op->fontsize48_end); } else /* If we can't even produce a good approximation, * just try to get a font size near 12 point. */ if (op->fontsize12_end) outstring+=QString().sprintf("%s", op->fontsize12_end); else if (op->fontsize14_end) outstring+=QString().sprintf("%s", op->fontsize14_end); else if (op->fontsize10_end) outstring+=QString().sprintf("%s", op->fontsize10_end); else if (op->fontsize18_end) outstring+=QString().sprintf("%s", op->fontsize18_end); else if (op->fontsize8_end) outstring+=QString().sprintf("%s", op->fontsize8_end); else error_handler ("output personality lacks sufficient font size change capability"); } } } lmms-1.1.3/plugins/flp_import/unrtf/output.h000066400000000000000000000171621247673406200212110ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: output * Author name: Zachary Smith * Create date: 18 Sep 01 * Purpose: Definitions for the generalized output module *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ #ifndef _OUTPUT typedef struct { int cp; unsigned short chars[128]; } CodepageInfo; typedef struct { const char *comment_begin; const char *comment_end; const char *document_begin; const char *document_end; const char *header_begin; const char *header_end; const char *document_title_begin; const char *document_title_end; char *document_keywords_begin; char *document_keywords_end; const char *document_author_begin; const char *document_author_end; const char *document_changedate_begin; const char *document_changedate_end; const char *body_begin; const char *body_end; char *word_begin; char *word_end; const char *paragraph_begin; const char *paragraph_end; const char *center_begin; const char *center_end; const char *align_left_begin; const char *align_left_end; const char *align_right_begin; const char *align_right_end; const char *justify_begin; const char *justify_end; const char *forced_space; const char *line_break; const char *page_break; const char *hyperlink_begin; const char *hyperlink_end; const char *imagelink_begin; const char *imagelink_end; const char *table_begin; const char *table_end; const char *table_row_begin; const char *table_row_end; const char *table_cell_begin; const char *table_cell_end; /* Character attributes */ const char *font_begin; const char *font_end; const char *fontsize_begin; const char *fontsize_end; /* standard font sizes are optional */ const char *fontsize8_begin; const char *fontsize8_end; const char *fontsize10_begin; const char *fontsize10_end; const char *fontsize12_begin; const char *fontsize12_end; const char *fontsize14_begin; const char *fontsize14_end; const char *fontsize18_begin; const char *fontsize18_end; const char *fontsize24_begin; const char *fontsize24_end; char *fontsize36_begin; char *fontsize36_end; char *fontsize48_begin; char *fontsize48_end; const char *smaller_begin; const char *smaller_end; const char *bigger_begin; const char *bigger_end; const char *foreground_begin; const char *foreground_end; const char *background_begin; const char *background_end; const char *bold_begin; const char *bold_end; const char *italic_begin; const char *italic_end; const char *underline_begin; const char *underline_end; const char *dbl_underline_begin; const char *dbl_underline_end; const char *superscript_begin; const char *superscript_end; const char *subscript_begin; const char *subscript_end; const char *strikethru_begin; const char *strikethru_end; const char *dbl_strikethru_begin; const char *dbl_strikethru_end; const char *emboss_begin; const char *emboss_end; const char *engrave_begin; const char *engrave_end; const char *shadow_begin; const char *shadow_end; const char *outline_begin; const char *outline_end; char *small_caps_begin; char *small_caps_end; const char *pointlist_begin; const char *pointlist_end; const char *pointlist_item_begin; const char *pointlist_item_end; const char *numericlist_begin; const char *numericlist_end; const char *numericlist_item_begin; const char *numericlist_item_end; const char *expand_begin; const char *expand_end; char *toc_entry_begin; char *toc_entry_end; char *index_entry_begin; char *index_entry_end; /* XX These should really be replaced by references * to one of the charsets. */ struct { const char *bullet; const char *left_quote; const char *right_quote; const char *left_dbl_quote; const char *right_dbl_quote; const char *nonbreaking_space; const char *emdash; const char *endash; const char *lessthan; const char *greaterthan; const char *amp; const char *copyright; const char *trademark; char *nonbreaking_hyphen; char *optional_hyphen; } chars; const char **ascii_translation_table; int simulate_small_caps : 1; int simulate_all_caps : 1; int simulate_word_underline : 1; const char **ansi_translation_table; short ansi_first_char; short ansi_last_char; const char **cp437_translation_table; short cp437_first_char; short cp437_last_char; const char **cp850_translation_table; short cp850_first_char; short cp850_last_char; const char **mac_translation_table; short mac_first_char; short mac_last_char; #if 1 /* daved 0.20.0 */ unsigned int unisymbol1_first_char; unsigned int unisymbol1_last_char; const char **unisymbol1_translation_table; unsigned int unisymbol2_first_char; unsigned int unisymbol2_last_char; const char **unisymbol2_translation_table; unsigned int unisymbol3_first_char; unsigned int unisymbol3_last_char; const char **unisymbol3_translation_table; unsigned int unisymbol4_first_char; unsigned int unisymbol4_last_char; const char **unisymbol4_translation_table; #else #if 1 /* daved 0.19.4 unicode support */ short unisymbol1_first_char; short unisymbol1_last_char; char **unisymbol1_translation_table; short unisymbol2_first_char; short unisymbol2_last_char; char **unisymbol2_translation_table; short unisymbol3_first_char; short unisymbol3_last_char; char **unisymbol3_translation_table; #endif #if 1 /* daved 0.19.5 more unicode support */ short unisymbol4_first_char; short unisymbol4_last_char; char **unisymbol4_translation_table; #endif #endif #if 1 /* daved 0.19.5 SYMBOL font support */ short symbol_first_char; short symbol_last_char; const char **symbol_translation_table; #endif #if 1 /* daved 0.20.3 GREEK font support */ short greek_first_char; short greek_last_char; const char **greek_translation_table; #endif char *(*unisymbol_print) (unsigned short); void (*write_set_foreground) (int,int,int); } OutputPersonality; extern OutputPersonality* op_create(void); extern void op_free (OutputPersonality*); #if 1 /* daved - 0.19.6 */ extern const char* op_translate_char (OutputPersonality*,int,CodepageInfo*,int, int); #else extern char* op_translate_char (OutputPersonality*,int,CodepageInfo*,int); #endif extern void op_begin_std_fontsize (OutputPersonality*, int); extern void op_end_std_fontsize (OutputPersonality*, int); #define _OUTPUT #endif lmms-1.1.3/plugins/flp_import/unrtf/parse.c000066400000000000000000000247211247673406200207550ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001 Zachary Thayer Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The author is reachable by electronic mail at tuorfa@yahoo.com. =============================================================================*/ /*---------------------------------------------------------------------- * Module name: parse * Author name: Zach Smith * Create date: 01 Sep 00 * Purpose: Parsing of the RTF file into a structure of Word objects. *---------------------------------------------------------------------- * Changes: * 15 Oct 00, tuorfa@yahoo.com: parse.c created with functions taken from word.c * 15 Oct 00, tuorfa@yahoo.com: backslash before newline is now \par * 08 Apr 01, tuorfa@yahoo.com: removed limit on word length * 03 Aug 01, tuorfa@yahoo.com: added input buffering * 19 Sep 01, tuorfa@yahoo.com: cleaned up read_word() * 22 Sep 01, tuorfa@yahoo.com: moved word_dump() to word.c * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 08 Sep 03, daved@physiol.usyd.edu.au: type fixes; ANSI C fixes * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_CTYPE_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "defs.h" #include "parse.h" #include "ur_malloc.h" #include "main.h" #include "error.h" #include "word.h" #include "hash.h" /* local to getchar stuff */ #if 0 /* daved - 0.19.0 */ static int ungot_char=-1; static int ungot_char2=-1; static int ungot_char3=-1; #else static int ungot_char = -1; static int ungot_char2 = -1; static int ungot_char3 = -1; #endif /*======================================================================== * Name: my_unget_char * Purpose: My own unget routine, handling up to 3 ungot characters. * Args: Character. * Returns: None. *=======================================================================*/ static void my_unget_char (int ch) { if (ungot_char>=0 && ungot_char2>=0 && ungot_char3>=0) error_handler("More than 3 ungot chars"); ungot_char3 = ungot_char2; ungot_char2 = ungot_char; ungot_char = ch; } static int last_returned_ch=0; #define READ_BUF_LEN 2048 static int buffer_size = 0; static char *read_buf = NULL; static int read_buf_end = 0; static int read_buf_index = 0; /*======================================================================== * Name: my_getchar * Purpose: Gets a character: either an ungot one, or a buffered one. * Args: Input file. * Returns: Character, or EOF. *=======================================================================*/ static int my_getchar (QBuffer* f) { int ch; CHECK_PARAM_NOT_NULL(f); if (ungot_char>=0) { ch = ungot_char; #if 0 /* daved - 0.19.0 */ ungot_char=ungot_char2; ungot_char2=ungot_char3; ungot_char3=-1; #else ungot_char = ungot_char2; ungot_char2 = ungot_char3; ungot_char3 = -1; #endif last_returned_ch = ch; if(ch > 255) { fprintf(stderr, "returning bad ch = '%c' (0%o)\n", ch, ch); } return ch; } do { if (read_buf_index >= read_buf_end) { if (!read_buf) { buffer_size = READ_BUF_LEN; read_buf = my_malloc (buffer_size); if (!read_buf) { buffer_size /= 4; read_buf = my_malloc (buffer_size); if (!read_buf) error_handler("Cannot allocate read buffer"); } } read_buf_end = f->read(read_buf, buffer_size); read_buf_index = 0; if (!read_buf_end) return EOF; } ch = read_buf [read_buf_index++]; if (ch=='\n') { lineno++; /* Convert \(newline) into \par here */ if (last_returned_ch=='\\') { my_unget_char (' '); my_unget_char ('r'); my_unget_char ('a'); ch = 'p'; break; } } } while (ch=='\r' /* || ch=='\n' */ ); if (ch=='\t') ch = ' '; last_returned_ch = ch; if(ch > 255) { fprintf(stderr,"returning bad ch '%c' (0%o)\n", ch, ch); exit(1); } return ch; } /* local to read_word */ static char *input_str = NULL; static unsigned long current_max_length = 1; /*======================================================================== * Name: expand_word_buffer * Purpose: Expands the buffer used to store an incoming word. * This allows us to remove the limit on word length. * Args: None. * Returns: None. *=======================================================================*/ static int expand_word_buffer () { char *new_ptr; unsigned long old_length; if (!input_str) error_handler("No input buffer allocated"); old_length = current_max_length; current_max_length *= 2; new_ptr = my_malloc (current_max_length); if (!new_ptr) error_handler("Out of memory while resizing buffer"); memcpy (new_ptr, input_str, old_length); my_free(input_str); input_str = new_ptr; return true; } /*======================================================================== * Name: read_word * Purpose: The core of the parser, this reads a word. * Args: Input file. * Returns: Number of characters in the word, or zero. * Note: The word buffer is static and local to this file. *=======================================================================*/ static int read_word (QBuffer*f) { #if 0 /* daved - 0.19.0 */ int ch, ch2, ix=0; #else int ch, ch2; unsigned long ix=0; #endif int have_whitespace=false; int is_control_word=false; int has_numeric_param=false; /* if is_control_word==true */ int need_unget=false; CHECK_PARAM_NOT_NULL(f); current_max_length = 10; /* XX */ /* Get some storage for a word. */ input_str = my_malloc (current_max_length); if (!input_str) error_handler("Cannot allocate word storage"); do { ch = my_getchar(f); } while (ch=='\n'); if (ch==' ') { /* Compress multiple space chars down to one. */ while (ch == ' ') { ch = my_getchar(f); have_whitespace=true; } if (have_whitespace) { my_unget_char (ch); input_str[0]=' '; input_str[1]=0; return 1; } } switch(ch) { case EOF: return 0; case '\\': ch2 = my_getchar(f); /* Look for two-character command words. */ switch (ch2) { case '\n': strcpy (input_str, "\\par"); return 4; case '~': case '{': case '}': case '\\': case '_': case '-': input_str[0] = '\\'; input_str[1] = ch2; input_str[2] = 0; return 2; case '\'': /* Preserve \'## expressions (hex char exprs) for later. */ input_str[0]='\\'; input_str[1]='\''; ix=2; if(ix==current_max_length) { if (!expand_word_buffer ()) error_handler("Word too long"); } ch = my_getchar(f); input_str[ix++]=ch; if(ix==current_max_length) { if (!expand_word_buffer ()) error_handler("Word too long"); } ch = my_getchar(f); input_str[ix++]=ch; if(ix==current_max_length) { if (!expand_word_buffer ()) error_handler("Word too long"); } input_str[ix]=0; return ix; } is_control_word=true; ix=1; input_str[0]=ch; ch=ch2; break; case '\t': /* In RTF, a tab char is the same as \tab. */ strcpy (input_str, "\\tab"); return 4; case '{': case '}': case ';': input_str[0]=ch; input_str[1]=0; return 1; } while (ch!=EOF) { /* Several chars always ends a word, and we need to save them. */ if (ch=='\t' || ch=='{' || ch=='}' || ch=='\\') { need_unget=true; break; } /* A newline always ends a command word; we don't save it. * A newline is ignored if this is not a command word. */ if (ch=='\n') { if (is_control_word) break; ch = my_getchar(f); continue; } /* A semicolon always ends a command word; we do save it. * A semicolon never ends a regular word. */ if (ch==';') { if (is_control_word) { need_unget=true; break; } } /* In this parser, a space character terminates * any word, and if it does not follow a command, * then it is a word in itself. */ if (ch==' ') { if (!is_control_word) need_unget=true; break; } /* Identify a control word's numeric parameter. */ if (is_control_word) { if (!has_numeric_param && (isdigit(ch) || ch=='-')) has_numeric_param = true; else if (has_numeric_param && !isdigit(ch)) { if (ch!=' ') need_unget=true; break; } } input_str[ix++] = ch; if (ix==current_max_length) { if (!expand_word_buffer ()) error_handler("Word too long"); } ch = my_getchar (f); } if (need_unget) my_unget_char(ch); input_str[ix]=0; return ix; } /*======================================================================== * Name: word_read * Purpose: This is the recursive metareader which pieces together the * structure of Word objects. * Args: Input file. * Returns: Tree of Word objects. *=======================================================================*/ Word * word_read (QBuffer* f) { Word * prev_word = NULL; Word * first_word = NULL; Word * new_word = NULL; /* temp */ CHECK_PARAM_NOT_NULL(f); do { if (!read_word(f)) return first_word; if (input_str[0] == '{') { /* Process subwords */ /* Create a dummy word to point to a sublist */ new_word = word_new(NULL); if (!new_word) error_handler("Cannot allocate word"); /* Get the sublist */ new_word->child = word_read(f); } else if (input_str[0] == '}') { return first_word; } else { new_word = word_new(input_str); } if (prev_word) prev_word->next = new_word; if (!first_word) first_word = new_word; prev_word = new_word; /* Free up the memory allocated by read_word. */ my_free(input_str); input_str = NULL; } while (1); } lmms-1.1.3/plugins/flp_import/unrtf/parse.h000066400000000000000000000033341247673406200207570ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: parse.h * Author name: Zachary Smith * Create date: 15 Oct 2000 * Purpose: Definitions and externs for parse.c. *---------------------------------------------------------------------- * Changes: * 15 Oct 00, tuorfa@yahoo.com: parse.h created with functions taken from word.c * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifndef _WORD #include "word.h" #endif extern Word *word_read(QBuffer*); lmms-1.1.3/plugins/flp_import/unrtf/ur_malloc.c000066400000000000000000000076261247673406200216250ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: malloc * Author name: Zachary Smith * Create date: 01 Aug 01 * Purpose: Memory management. Allows us to keep track of how * much memory is being used. *---------------------------------------------------------------------- * Changes: * 14 Aug 01, tuorfa@yahoo.com: added Turbo C support. * 16 Aug 01, Lars Unger : added Amiga/GCC support. * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 28 Sep 01, tuorfa@yahoo.com: removed Turbo C support. * 08 Oct 03, daved@physiol.usyd.edu.au: added stdlib.h for linux * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "error.h" #include "ur_malloc.h" static unsigned long count=0; /*======================================================================== * Name: my_malloc * Purpose: Internal version of malloc necessary for record keeping. * Args: Amount. * Returns: Pointer. *=======================================================================*/ char * my_malloc (unsigned long size) { char *ptr; ptr = (char *) malloc (size); if (ptr) count += size; return ptr; } /*======================================================================== * Name: my_free * Purpose: Internal version of free necessary for record keeping. * Args: Pointer. * Returns: None. *=======================================================================*/ void my_free (char* ptr) { CHECK_PARAM_NOT_NULL(ptr); free (ptr); } /*======================================================================== * Name: total_malloced * Purpose: Returns total amount of memory thus far allocated. Called at * the end of main() when in debug mode. * Args: None. * Returns: Amount. *=======================================================================*/ unsigned long total_malloced (void) { return count; } /*======================================================================== * Name: my_strdup * Purpose: Internal version of strdup necessary for record keeping. * Args: String. * Returns: String. *=======================================================================*/ char * my_strdup (const char *src) { unsigned long len; char *ptr; CHECK_PARAM_NOT_NULL(src); len = strlen(src); ptr = my_malloc (len+1); if (!ptr) error_handler ("out of memory in strdup()"); strcpy (ptr, src); return ptr; } lmms-1.1.3/plugins/flp_import/unrtf/ur_malloc.h000066400000000000000000000034351247673406200216240ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: malloc * Author name: Zachary Smith * Create date: 1 Aug 2001 * Purpose: Definitions for memory management. *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ extern char * my_malloc (unsigned long); extern void my_free (char*); extern unsigned long total_malloced (void); extern char * my_strdup (const char*); lmms-1.1.3/plugins/flp_import/unrtf/util.c000066400000000000000000000044661247673406200206240ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: util * Author name: Zachary Smith * Create date: 01 Aug 01 * Purpose: Utility functions. *---------------------------------------------------------------------- * Changes: * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_CTYPE_H #include #endif /*======================================================================== * Name: h2toi * Purpose: Converts a 2-digit hexadecimal value to an unsigned integer. * Args: String. * Returns: Integer. *=======================================================================*/ /* Convert a two-char hexadecimal expression to an integer */ int h2toi (char *s) { int tmp; int ch; tmp = tolower(*s++); if (tmp>'9') tmp-=('a'-10); else tmp-='0'; ch=16*tmp; tmp = tolower(*s++); if (tmp>'9') tmp-=('a'-10); else tmp-='0'; ch+=tmp; return ch; } lmms-1.1.3/plugins/flp_import/unrtf/util.h000066400000000000000000000031121247673406200206140ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: util * Author name: Zachary Smith * Create date: 1 Aug 2001 * Purpose: Definitions for util module. *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ extern int h2toi (char *); lmms-1.1.3/plugins/flp_import/unrtf/word.c000066400000000000000000000137101247673406200206120ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: word * Author name: Zachary Smith * Create date: 01 Sep 00 * Purpose: Management of Word objects, which contain strings * as well as other Words. *---------------------------------------------------------------------- * Changes: * 14 Oct 00, tuorfa@yahoo.com: fixed \fs bug (# is 2X the point size). * 14 Oct 00, tuorfa@yahoo.com: fixed table data printing. * 14 Oct 00, tuorfa@yahoo.com: protection against null entries in \info * 14 Oct 00, tuorfa@yahoo.com: fixed printing of again * 14 Oct 00, tuorfa@yahoo.com: fixed closure of tables * 15 Oct 00, tuorfa@yahoo.com: fixed font attributes preceding * 15 Oct 00, tuorfa@yahoo.com: attributes now continue if >1 \cell in group * 15 Oct 00, tuorfa@yahoo.com: fixed font-size bug, lack of * 7 Nov 00, tuorfa@yahoo.com: fixed \'## translatin bug * 8 Apr 01, tuorfa@yahoo.com: added check for out of memory after malloc * 21 Apr 01, tuorfa@yahoo.com: bug fixes regarding author, date * 21 Apr 01, tuorfa@yahoo.com: added paragraph alignment * 21 Apr 01, tuorfa@yahoo.com: fix for words getting lost after \par * 24 Jul 01, tuorfa@yahoo.com: moved conversion code to convert.c * 22 Sep 01, tuorfa@yahoo.com: moved word_dump to here from parse.c * 22 Sep 01, tuorfa@yahoo.com: added function-level comment blocks * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 11 Jan 07, jasp00@users.sourceforge.net: optimized unsafe loop * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifdef LMMS_HAVE_CONFIG_H #include #endif #ifdef LMMS_HAVE_STDIO_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_CTYPE_H #include #endif #ifdef LMMS_HAVE_STRING_H #include #endif #include "defs.h" #include "parse.h" #include "ur_malloc.h" #include "main.h" #include "error.h" #include "word.h" #include "hash.h" /* For word_dump */ static int indent_level=0; /*======================================================================== * Name: word_string * Purpose: Obtains the string of a Word object. This involves accessing * the Word hash. * Args: Word*. * Returns: String. *=======================================================================*/ char * word_string (Word *w) { char *str; CHECK_PARAM_NOT_NULL(w); if (w->hash_index) str = hash_get_string (w->hash_index); else str = NULL; return str; } /*======================================================================== * Name: word_new * Purpose: Instantiates a new Word object. * Args: String. * Returns: Word*. *=======================================================================*/ Word * word_new (char *str) { Word * w; w = (Word *) my_malloc(sizeof(Word)); if (!w) error_handler ("out of memory"); memset ((void*) w, 0, sizeof(Word)); if (!w) error_handler ("cannot allocate a Word"); if (str) w->hash_index = hash_get_index (str); else w->hash_index = 0; return w; } /*======================================================================== * Name: word_free * Purpose: Deallocates a Word object. This is only called at the end of * main(), after everything is processed and output complete. * Args: Word. * Returns: None. *=======================================================================*/ void word_free (Word *w) { Word *prev; Word *w2; CHECK_PARAM_NOT_NULL(w); while (w) { w2 = w->child; if (w2) word_free(w2); prev = w; w = w->next; my_free((char*) prev); } } /*======================================================================== * Name: print_indentation * Purpose: Prints padding for the word_dump routine. * Args: Identation level. * Returns: None. *=======================================================================*/ static void print_indentation (int level) { if (level) { /* indent in multiples of 2 */ level = (level >> 1) + (level & 1); while (level-- > 0) printf (". "); } else { printf ("\n-----------------------------------------------------------------------\n\n"); } } /*======================================================================== * Name: word_dump * Purpose: Recursive diagnostic routine to print out a tree of words. * Args: Word tree. * Returns: None. *=======================================================================*/ void word_dump (Word *w) { char *s; CHECK_PARAM_NOT_NULL(w); printf ("\n"); indent_level += 2; print_indentation (indent_level); while (w) { s = word_string (w); if (s) { printf ("\"%s\" ", s); } else { if (w->child) { word_dump (w->child); printf ("\n"); print_indentation (indent_level); } else warning_handler ("Word object has no string and no children"); } w = w->next; } indent_level -= 2; } lmms-1.1.3/plugins/flp_import/unrtf/word.h000066400000000000000000000036301247673406200206170ustar00rootroot00000000000000/*============================================================================= GNU UnRTF, a command-line program to convert RTF documents to other formats. Copyright (C) 2000,2001,2004 by Zachary Smith 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA The maintainer is reachable by electronic mail at daved@physiol.usyd.edu.au =============================================================================*/ /*---------------------------------------------------------------------- * Module name: word.h * Author name: Zachary Smith * Create date: 1 Sept 2000 * Purpose: Definitions for Word class. *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3 *--------------------------------------------------------------------*/ #ifndef _WORD #define _WORD class QBuffer; typedef struct _w { unsigned long hash_index; struct _w * next; struct _w * child; } Word; extern Word* word_new (char*); extern void word_free (Word*); extern Word* word_read (QBuffer*); extern char* word_string (Word*); extern void word_dump (Word*); extern void word_print_html (Word*); #define _WORD #endif lmms-1.1.3/plugins/kicker/000077500000000000000000000000001247673406200154305ustar00rootroot00000000000000lmms-1.1.3/plugins/kicker/CMakeLists.txt000066400000000000000000000002101247673406200201610ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(kicker kicker.cpp kicker.h MOCFILES kicker.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/kicker/KickerOsc.h000066400000000000000000000057401247673406200174640ustar00rootroot00000000000000/* * KickerOsc.h - alternative sweeping oscillator * * Copyright (c) 2006-2014 Tobias Doerffel * Copyright (c) 2014 Hannu Haahti * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef KICKER_OSC_H #define KICKER_OSC_H #include "DspEffectLibrary.h" #include "Oscillator.h" #include "lmms_math.h" #include "interpolation.h" template class KickerOsc { public: KickerOsc( const FX & fx, const float start, const float end, const float noise, const float offset, const float slope, const float env, const float diststart, const float distend, const float length ) : m_phase( offset ), m_startFreq( start ), m_endFreq( end ), m_noise( noise ), m_slope( slope ), m_env( env ), m_distStart( diststart ), m_distEnd( distend ), m_hasDistEnv( diststart != distend ), m_length( length ), m_FX( fx ), m_counter( 0 ), m_freq( start ) { } virtual ~KickerOsc() { } void update( sampleFrame* buf, const fpp_t frames, const float sampleRate ) { for( fpp_t frame = 0; frame < frames; ++frame ) { const double gain = ( 1 - fastPow( ( m_counter < m_length ) ? m_counter / m_length : 1, m_env ) ); const sample_t s = ( Oscillator::sinSample( m_phase ) * ( 1 - m_noise ) ) + ( Oscillator::noiseSample( 0 ) * gain * gain * m_noise ); buf[frame][0] = s * gain; buf[frame][1] = s * gain; // update distortion envelope if necessary if( m_hasDistEnv && m_counter < m_length ) { float thres = linearInterpolate( m_distStart, m_distEnd, m_counter / m_length ); m_FX.leftFX().setThreshold( thres ); m_FX.rightFX().setThreshold( thres ); } m_FX.nextSample( buf[frame][0], buf[frame][1] ); m_phase += m_freq / sampleRate; const double change = ( m_counter < m_length ) ? ( ( m_startFreq - m_endFreq ) * ( 1 - fastPow( m_counter / m_length, m_slope ) ) ) : 0; m_freq = m_endFreq + change; ++m_counter; } } private: float m_phase; const float m_startFreq; const float m_endFreq; const float m_noise; const float m_slope; const float m_env; const float m_distStart; const float m_distEnd; const bool m_hasDistEnv; const float m_length; FX m_FX; unsigned long m_counter; double m_freq; }; #endif lmms-1.1.3/plugins/kicker/artwork.png000066400000000000000000003444631247673406200176450ustar00rootroot00000000000000PNG  IHDRZ= pHYs  tIME5 tEXtCommentCreated with GIMPW IDATxڔk%q=TU_s$HӚd$D V&I?  r19qs{2a5^QG&C"=ZL=m'G0:=Z,6Yzr":ΘȮѓcҍ:$!& aJSXICIölazil"sOKuaD^7.ߓ6GH VE'!]&\$#*EFEݦ~Gd vZtX2me: t!9Y#}"vlnВc6;}uXm-e= y+zID%m}Dyv'`{&N˖Y5bd}kțh^ӳuI.䋼 =Y b;'׿揸2+zx9)(I%V yJ JdT82l XsR"Ƀ+HIgV *z:CY=M3evxtXE $}LЉ*QgO؞NAvfe6)'{%_og/D*:Lë|6A硏ÑEanxƶ=]yM&'Qx^INx:o:l/o2IWe<=>?e}UNq>//~}>"Nv~?>B^'C>ݣG×3LzJJ,rL *IӄDd*L:Q AgJu!_/D04d*S&NSO`5Or 9.@&͊h&B eR7t MD|2*rR SVX^F_EV;eׅOLCD~<}>r\/䯆>j'̬WR'-'ն~?[Hy䷃p]/Y lzωI}öfxrW/7>mF$k_RD 4mDqMR'g]%(u֘wځ`*zѕL;BOa@,^%0++(=\CETC[pAS7qQrӧii U~p:,o-AE\,T*E?Ev}Gc"*&DžU AlHO*ڶc+Z<F,xEL`:@eGE?[j0F*t މ}Hܦ#oE0L:a|QQH$=Bd'#5e%QNb V)Dq"I~3.J3mζG2ߎHgD3U]T ~^}ܷ_-U](^ H& E^򾼒t+);G:PW3l8tx:ԱFNUUc +nQ[gL[w eDro2o?G_>7tZ|H&ar#y&2_ܲ^A[p^A&A=K$ #%Ew~C{oHlll' /A!#5jQ&5$Da[wtHK̪o V]qc!ΊxJ" Q k@E#-oӑ P4?./l.$7:AwG8B0gL`@<:=̕3]/Rʳ 8<9D'G䜓pis{Μ'3edbxO~vw@eychJZpP?eӔIVqWOW{6޾⮞i_^se_ru"\}S`EzFd4фZ:rTp`Pna"b}Cy;KL]y0 %2f\ג:I3FC}N(ts-Bd;Dm =c)(XA[NuD6бT&4I HGE rͿ`[0:3B 9^bG2_ڐ'&A$r243TD9c]I^VVf0T Ϯf̤3uVFtiֲ`̠O@nor;1)U|j%?~αU?;ܴl|Ia҄QO:qM.;П9̣AGʵǮ28Ȣ:7e+^qesp]fj0M8)NJʤ'Ρ(F ilМ]V*Q':~ȸ~$Md'-U0$F"9)5>G'-hY_ E 긑.W| ŎʈSMAwRRrQ/7DYfF*G&* #D>e?&l5s׸$׎| wV QsgRoy;Y_o7gVV(Ŕ#w%bͤF]WֆR ׼ ]"MwzVhRkNcP֠*Շ/|, t}x%\xE u [f%v$|`SQ'=~截:4Z+ZۻkX9>WIQ׳WI(%i*m%p(;EbNv]͗YmWkF꫺{eAi u/Y4aTOr}T"v\zRЖ Nntžz \K/\ؽYiǏ*v]zqewxxiVFQ #yG~DA=zȏC~N]% ސ|G7jP:f[YmA3ro~}a5L'SG7uµG[2lYM]Wcɢ/^|ey?ݣBhJ&wRt):t:ZkbJ}5>|G!zShiҰx< 9XM$0Ɍe4 X…(U͗n@6AJ/9Q2)Fn|7/5RgjEhэV?+9mLHsIox(+>x>}6!.^7g< UgV5_/,c W'lzWop(@@OZ+9BMׯ83;&X] giٽw>J0GW⟿'jIxB.7ѷ>vI=Y(r+y~Dn 6} JDV(uCKA%H iq]^Ȣ 顡#GGE#pTz2RJ5):c'N})3*2:xI@ )u.o<:죯ļ{]~q^ b&7yi(O[FtY_"JIcV]#'2mQtB<; ` tਥ}ɓ 2C!0Y CGc$ƕ _v|OgfsL$A a!:3GT#`mHՊ}f ^Io^i{PV:4ǻNS7YוϟRZኗ/S'"e2[DЫЊcشT#e WP0j!M =FIicn!L #ggYF[/Y=e`4.=7ތ23FC?ؓ$N#G)KM ʳgJQrc'^1[֫]Z`PǚDvcJRӌ og~;c~/3\ *>rOkkWBi4g20y$s2_t;`oZܓ+ZDq]qFxn3/o8AZ'0尷%F(} y5MgWW^q<2~쬕?ۿoZ+Z_ϯ`O^K1?'â*%AM^(ItmOb:3.U6e<| A)8ޒRt"1c w|Kz\b ]1*$M鳵d6T9%ɾ `ԥu82E}y\]Ӌ`2.?O"iY}W~[?pgß {|ëus^c| FH&|O;2@[޼ysk|KwT?IJ,_Wgyƶ5~{705ԑPSIavdpy_g@ǃd;Oa*aۊ1#fyϟ=O|\_]'=%o/(Wog?_wV0e@8*a?7n_wy۟Չ}ȷɧ公-HD\_/wzYM%TV7xvsÏ~|G\pޑK/w|aǻ۷Gi(gJ*U< .>&u55O~ ߮lvxm_ 5 ZPQ|wwLab Eb=1XcwZ!wRY3/n&Գ ۠6)umaߠBpCxWe>8C:'BRqзC/*( 5n?(k#.8̳~v~꺴B=A(#m"yyK{,z Kg5&NButpzm$Ղ[y~'|³gϘB{4nnOS~wӉ9|$UPRJkBv 5AFʳ-njҌm'AӴm[o|./st:Y:&e?lLJiR^/h jT;8Lbǻ;i?9?R IDATOŎSSgϞO˿O~=rOg^LA ̢\N|'=B]1?~+ٶ:^I-wkտopޢ!aq΢FUw5z?#S@k"wgmrT)=0<)>qβد4Gi<_Y;wz7z?ˊwgnGNk|xgCաЋ-pzWα2jԅ~P^^Ga׸NtX{'s j;lEN=R&惫r BEYD?aT۷ܾ,aq=ѿ__?[n/B3@ŔS+T(r0\ z|MzY@i+roTʇP1LQ*n\T7 dZkΏ=cpa}~g|JJ%qs2m&DTOd~kOwrxV?fslͷ)i}oZD^2:V_~??SuX+Zswc~>x_L^ /nYcP E@ږ׾>jt>r҅7?/$tqmoS'h_\zkL$\ǟ]8oR m4ur۠w3dӹ?y88ϡ@Fka1\3t~f!Q#HoIgZ& D䓶:|]#r ^=KaY&<7x~9ۻ[9'?JϞZFҪǟ}{\]]wZ{˗7<5t BGsTl췭BѥΐyG<?Yc[/ì@78sj`O⾯WO~a;nn(ާ#?WZy;ϱl mG t(C\-^c>ɿ!AˤPCϿ8ͫoZsw\{{Kr5B='"aZǸ^\3ʬPʃw_ a7_B+,xпKK.9R迮+\G]}!MұVCRb6/y6`8O :6FY%A讦Xt7y%_m!pS* Y]kIц:S~[sVϘ]%8Œ۩%@We 8s%cPGPcnF&4,{$#&/go9#mL)9޼}ˋ//~8K|ce|/= _ZK+|>L?041l_۽`Ĥx+ڪ+FUx*竻WU@H <uTwBP;Ŵweǹ1'HԼJ7z[=-2k𙿼}^ծL< o[$BC|>߲Uɥ' m^m&=M2ϔ̍}S%0b mWj\O&J᭵&{5j\d眩"9gKaE$xyVt Nywlی2i!4lVOW5u?,*!g0mt=߼z|0온;^eo*rŅ~J.֛/_C[YM1p,&|[YL%$'+c`~ңBn*VRJ1bC+-lfP̓ 5Tf;{~`87(uvK#Fn#LɇCՊQt1%χ4<՟zs.Gi;MHz{c@Yg-3Q*meZnCy(sװ*k|gYZ9lnyl<LZ*dr-\(s7ff~*o15*#66{H9pQz@g?r#gp]fL_iٗ%Jl\@oIWS5UbJ|ߗCZ+97JbK.-vy?9L)B?ߒT%'6oLx~kꁃ-ZSt4rYo]zʢ ~5f̖_1;g#Z+ҩv4?g}]ֆx_0 ]a,:>0@&m)G`՘dAcbN34sz<'RQxMS;_%(^j[mԋ§~R c i=Q!4R*J)l9ֽ]'۬y,A9E}~AùB^3^~ŁRxbǝ05bm*ѷڱVvlo^˨2,!O83a,ޢĬ9zLcǖ+t$CPj%$]0BW}cI;Ѐڳ`YjPmneԴ+6& vkd[w߈@jS]kw4Y:15hM:ZM=' xNC).1Yoku5/p8<ԹN)%XKOڞ"rno .|U:8=/nv:A>.JQ\IyɲGi>%joMC+$cX?tɿU^*'F{r/y߳c cAG*.͎_~n+׸S$udB!38ogm^/Dƴq.GŀQc G2vѬ~I-E™.Dɥ9b}^;{Vc zI(l1Ǜ#|W'um!ZiSZSGv&RgY-Sì^M NyE <9ͤ5\2g?LLԞ~t0j}L~;q>xS.>΂`/nE>;3!g`جa^әp&E?_x <yoO\ Er!83Oo^?/j{vlg1췗mM7;3?xng{$Ę4)$4껀+w:d86u%ܭsTGlwFƸD`[Y=uW}p¥D"g{OIk/joۡjg]FyDq"LүlzZji>_KO7h ITiʍT wS\ 2) uiNEUU|cMl3?р~yv_zh۷oyKL3J@"V A[;wx ^׏z% g|r7EIWۇU,:"t0pC ;@IuɅ FR#qҘ$lj Lv?Vx{{_}ͳNxߎ[ejc߾}>i!`ˌgSa~L  cT 4ȴ<&{ޒSk7c~pvO{\ys]&'<)ÅWoϑzA/kwĸ>ѿVT*JXmPPy:U`Oӄ y|sA&&}>HГ#LIxY x.CҤ1)́>74W O6(nMy _ǟ~doL#φP'Rr4cp74G`7H;Z$/ߵЫ;]M^`?w`9&?]8Lr/?׿/~>O$n͋ovL^ӂs"%ȇYVǃ<\1x3YSLX506>-k֚u]ibtPFطy[3@n@q?ْTVfeV9oAE84c,&p3Wv8kx<31%HWػz{9W~YuN̄]*|j=^O}@x۶{l^%3\쥃ZIc4,ֿB]MsNFy?^xFz߯dZ_2Ȱ)M2@=<$*S#QMe"f$S]Q~ѵ-7n r._>d1~C?<;fX]7p{ܾ}{*I=Q_ѤdauGc8P5.ŒmeĈǪ$okj"{UXOz u))qrrL׶|iʅ R}@WX ܿW\ӠK3Ґ•v&4)E;XJn\gd4$MFjA"//0 ]c"/CҒzdSG?HQn_A%| qيݛocXV~Y) M߸T vlC}Rۘp`"XpǓ1@"\ н#qMiMi(mym"ӇuטJIH1|޹[oI ūOrEld ]cs$2]OuKm鲘Te#tbT9[]ZDTS]j1NHSF"N~\8T[f>.(X,ܸq"h>> | ܻw7oLym\<;-hH݆ښ.͈ qbc肆YmI]6HV1H[mh6ŴMCEhm c&NcSu#M0̈́40&!Mb҃|㰶|}Cyc mNTq~?1w=|ڶ'j'֤q04THUJz-W D4gV[{u&z9ׯ]k+){^kTW+\&s@64x_D;s,UԋoaËN)PN1Tz ,w^>j(4 v^e?ٯǛ!luc|$sdIѓi۞X7ޤjdOD0~W~>޾s[nMHmKbɬD=nS2 NIS|qъé%QE'?彙ݵ. 4\St%ժi.ԵU,?A%.ߜ+00DDl6|hTu9R3 &IIuiWPVe1mֺBɰATre_(1iV4Eg ;#R<9.9n ,۳41(NQKf^HT[(TMܿ]G<|(PDt ƚ*p IDATn\ͻc <`\Ny:,)RNQcw.FI_m0/1{7nRR9kQ֨$[9ntmON> !Zl=yOsY.OZO~}^ʲdUcq6>GLFDa,0jvZu5]@eI9$UЕYTcJ!sF &(P5Ǐ)''M$J2Һ<(Pa!M. !>{.U>#K9mo3?OU7~z{/˒c8mi#ƘI3 /c%Vٛ, /OqKm5QmIi( Z%Ѥs^3U4&* &[9iTRgZ 0&5 Y?~}-4r4..f!^4m>|kNOOXޣ~>^v'^xnD'?fIP A Nq؂du쉯\ԗ3ES]PꞨdH.j3)ߡA{D{?Q| Fql5fbR 0U8vi; G%d4u6 ؎>Ĥ<媘n@YFFJ8}ihvRq";Ջ牷6Z^dkRO<"W7$HvX?I8k]MDA Mb%JTw;&9m!!2YJ=TeAu}1Ƙ ^<ó§9z4zIUϐ^uށmaO6ߵ=qMm49hriVm/lPhwn=Y&C]3xM?֥BeAږF?9naYdܤ&T"Z9 ';@XlO Քqt$/a\[!X5*gI}==z>1麖8iJoqx˙H-⡡EՆ<:Z˵rҬ m E,/vV&ө>yKb]gpi lra|,~8'Q"X|mс?$mDX%,"NgqS *q=X !1udY>g\!J9|5$7,˒:Ҵ i,3)VV!Ra9eN/:Ӯi(i˗L߷?>s-x?)]FOWkױ/h͙(9)[[s\,hSrJUS4U~y0ͦLbt~eyeyll-8T'6stiu'F%闬R:u*XFj,nTmC*kF˪*Kieg"SQl EqmqW[P$J4^풾&C3]hY)C h*zt|a w9_R ϷHH& 9S㸮e  s3*$\_5Wz=+Jp6֒S<ׯhTPM<MubZ\9R\ Q-n6u $Qll\QfXJNe̬xמzNэW4I/TAgU 1x;ѽGJ:n 2~0}xyaߌ۶&4sS~f{gs/6>U^NCHJ̈џ@太E<8"77q#iXKQ;:,5aogsO]%3d:騜 RJ].pP2Qc6+|e[VBEv~ޙjhxH Z&~n"P٥:BӉR76 XDt4Mx1jx"Z Pm.i$m-|688?`wyJ6MZT 5mt7C 'l2td U 2=Joj2-䥨w1t ]D< 1K"LX}R^u13BW"X>zN!W~%G sZ 11MƎd1^M4՚䉦<6QDf|b7[R5gMOeGzrt+nЯmr^]chHdS vm6{{=u .'e&]r{ N|AC#"cpDպ&5ި66ƢƑ>?3a>CFnc674Ia='xjtt|^\T 2eXISՅxVIg&_O&Y䥲_#~UomxTId :Gb0pj=*5a?'z}?ić{hÊ4<}/~sG"Z3b+ϰ~hҘƆ=@u)uyJczZQ_ H< NtCO׋zhukɲ8VKw_fg~T Fh҈!(xSѤQMRӨnG]CZ=H)QSߵ}K I9G珡vϰ;?Gfs4D A%Bu4+O{EzUtyLW>#-u"'j,Tc.4Dbj^N igb-iFsv2Ek__irKω"4 6!tiD_$ hQF5\pCݎc`\Rhm4M+8s\z Y<疤ϙ}lR@ACX=4Df+#ZXiwow'j[v‡g4#bt1*4VRZyHb|ZXx+^雼˟s(؟]`2j7xEg[ަS+Sz7Ҙeq;b{,.0 Ckiwa jZǏ<e=7B vH.og.9uyK7|v}민Ń-è Fĝ'QÍ7>B>v6ⱗNY^ܦ$.gnjKKj=z4?_[Ho"]h. 5'O5yrQ 5:vX)>n%MέAlgo#Ν9ܓW6KN0CN&kۨYjZ|f13{Vjh0&ͪXM8e4Wa{ <xspkd<fulqXB cE`J"pkp hTլtwg<"E[lY 3\ee"0 q1Ӟ>ԙ&4FAHjO=u틇|CxG\34mvŲ|\ F ~nѝTE񪕓%Ca=6 6Ӹ3v TcɎJī/v~#h^l4)C`3~8*oc'.~OOGgIQ<.5C" z4PH4]zIJLKj&ښ:U+ݔk8߽Ouj+/M~֫Dmo=}tm[|_ԥ3:̖4hQRZhO [X$lCgx#g*w|W&y>nv'pwS\ Z8/~6jc) FTԣ&PQ9#Hmqt?}W9W%>uK>TcF"2 jG 7iR8%2~G^s{.AٝcjmҸ7xfg~й僖Β*?[L=3di=:T"nz_ޟE"G JEKCD|쐭4 Zg96Oc3^ƎÎ|6cb{]Ο5.G-RϙD`aԴϣΑ~сo\選T iSNv~`t|9FIZ|.;,?ţV!g"ÌYTCw{7GC t9Aֲ'#_&׻$C1 qo}g8}._ѷ3 ˟\>4q}_|gK̍lyHi(@:3W>`';$ ~!O^ggßP ;p<+W8z2pQ&珿9oxԶ۩ 4)/H2|bBx یx3TI#ޤHcҴЅܾK4f;=~nztKc>x6gW&O\:v~U~/qK^ѯx9Ni?٧HracB&StԷ/-/YRD#Bմ}N%niU gZt 0&I`%]*TA&F>^eM8mwJJ35C f4Ʀ>#M:Ԓ4)YQ 8DQ&^lܸ2.&f)u-7B_m32+(0l;8fW< >5voˋ]O߸¬лI9d5qEdqKcc<ڃ{|o?'/H=_%)yK:>Zձi,E|H.) >4qcy4&t8D=C9u|dX|+܂(R&&ŪjvC^Ϥ7~%Uׯ¤ Y+5' f@]R:LaTY"\&>o !s3ޝ}Fmgx<#XcY,N0 q'H*TʀNd]9 ^Y&5}.Bkz8RqhGk?hE̒?MvٙYTﰕk]3Y"MM˩;'q>4G(1CiQ#6S=&HH쒰%/@xЯ8s'/{djkgwU<@5ߞޣ;nF:>(җY wITl6R:/Gb>TND*Uܾq̅.ţG{}2n-byNHcL=ٹ}$-qWoX:s8rg+o(]og~DnF<Ԕvj(uO[h:T:Xu/]uP0]/ !;tW{ [UOhO{c$ڑ MA!ʕ]jZJzg1/1^9>" PavsWQWyoae|N;YNmqܳ| ;bR*&M;Zg0C%+Z簭㍗{Òh\$a&,񅠾4tΣ0gn賄n(U☥IN -iN 4 d,wGz(mFJ͹g!?WQ9fnzog ,.%=93 Cj'/q/|.]F슯,{_cO]?ZX,b?퀝Op6ڦx._ߒŻl _@Ւ%ZʐEYt[G/7NقPG5rodOd~s~j~T/}on>"% u2MHE\}^ _J>,7&%G IDATFsor˓Op7y-w.M0U;a%Zm0Hd_jI:2?~9M^dt+mLiWfɸ;H[/p:WorjxW8x"nXB8|M3{fai߭Ȣm_~/hʎ襀cF`] ߤx-TzMeo)v.`qKg0{3,Q"0}I?7 xwC~ L,hB ƾtQlRfa髄x(h=lC.Ic⷟{#7'DxyG/p`)~"vU o~E̍I#kdf_ f\| ;]g';3;$s&oܽo\>#|e9s5fGߟuNO^zY;i…d#~،"R 3oi;矻NyS,!{gR>ۛq5VzS.E|???bO"/FZno濢'ۯrr3g֊W]>*/џo~mcxt]_YTLw],AXo|] y0H ie2?õEt u[o_+<=dk/'/r~͟SߥN#RHPujT >#QXIt=с/]%xaõjio1<\t k 3\ר"V,gѮ9&!n,uLT}I}"N8ڽ uU'~q왛v.9x sQ-T { :%{RG;fi16ͯ4G9K0]6yR+Y\IiҠ 6G j&t 282f|N6dd+,nYi~Ea5sf;d8Z|it`:|pn/\:f7,9YU 1,f&Z#1fL*MIDt`CJ{JZ5fguc*9\\D%?_k_ Ky&N?f oP݊+~??0~lو2wo ;OR$̤L2>pZ!>.kJLW_?'_7=Tci>p7yW&SܹyLy|p%>xV[ CU40H˸ԃһX916 M&©ot5`z1$]Q%cCh/^>dQP}Ac#?^F@_q$hmJKS\5tPGKA^辤4?S/TVFfa+Kz[.<~teI"tS6+Vv߄9 0ėaG=AC$> :sUEJtbY?C8\; =l N4Q.X_$aOUr4ty \5!S'b:6p+?g>lo߽wwcq~lp>Kz{5"h GONxɋ]?ϴT {ɇ9g0N6b!=xooqG<y m;s L8,i='S4S(#fl3&vZ&Hy)^3X6IҒKNb*GbSF6juӻ {͗_Li>#9]w^/_J >;{_&Ӿ9s?QT!RS[ 򁨬l}%~ÿ/ ?Rhݤl+1=ՁB3O>vaNGngبN"|iLKEnSU2/3,AIƄ!CWUA|s,27Nt#]-T65D i\R( 2_OS9gRSZNr|^~ƢO|qRh,6Cm!sYX)Y)]Mד3%qKO1~{Z#>!>SF>|Oo ŽgT6•*Ԓq0"I$"nsEtf( } _mp~/R+nW߭rvB |k?ൟp$!Xzƚ9CWw<էZJ{,zl?7i~ب+8"14ro>ϸ/3M_ZR_QKpE~_Mx:&T9{VA҅Njr!-dqO}z&dXFnQcTGi+fr CT.XҨ~XZKO$E8m£ o\yyZz5J9ᛔ,flTі^vr*QC{9%"j /wg6EAMi95>š'}!/U2E{c(;&ٙ0#W-KC)_/1ZNE<L%RZV#ꂚ7WnثFm0ܪIU%HGi>uw* o\.ɀą,x< 6 ˒J|X_?TG ߞ&%f&qo"5dt?Z; ­#^ZySܯ=;<@ =FUC)ʑnmdR_nC,/KQ꬝|ibHt`2 j'Ѷ9 ~E7A܋&%*\ǻX/䄮0dA6h(q[9aPҒڽyM #\ѝ:;axBK)4OuPz24dj@ӗN 㮸p ʄixTiHD_hr5zL'{z>)B}nC%4Ἀ@6FDڠfe$!^u)4􅑆\'0,I_SAh~/7_TV{^jacb&;TF>:geo@aވ1>~Jo^/j_辘ʏށ>z|?_i>TȤWE"TJ lܨ+PAt"\мM6=fW8 ]*4 Xq_& k:|u_XO(e=M23Chsnu)m*!l SJZRWfL}m$>WW!;JE2y堯5h'Chι Zk2M0:cLlU,:Z&Dce"jd`h|X b?lZO7 E?O)ؿ6MS}^$ʐEuwXt^҆fX׉ħL|"㥙a֠.JzF#XK[KliCsz?#sInTױ?L vI/Hx(J+[B#s,j(^:adlRI_JG 4zN('NvSH[&Q 4zXQxo!hEuB+$"nS VV>Ãa:SPNxrIA بM]AY$sN_sшne"BfSղ 3 }`|֟)g;k탽N$k2oI]]03KڄC%ET|XjME: s!:VzMH IKk##m/sfՌ1ct?9pTԆ|=0l?񲟛CXj)_ةK*`R$Kѕ}.Wk0GaPLM7/}67;oP-*F :6Dé^^ ,1B!^KW$y,@N]:V ookFA?(lQ \_<&\qNT/\J V 3L20Y:dluTYTi2rCg>&!@IδvC@$_O@i[a5ij}2AY 3&]"jπC̛+ _SMMW_N5xREd[ KܯWi.X]LwɤAZa$j#O̢'?NF3&IT/&:>%(%02dB@yX 7}( )-951V>|++"&+"ܟu:E,^CmIf]#!nI#Z+WISĂNc P$]E&6 fjLՄvj"'jfU%K#B85X5~ÜV )97P6>m>ur*I͙F{}*ÜVJ~\^u )/|IX8q=$5m})bR36>%-O1c?kdeBX|eB*.A%eq CFGi/⡤Fń/aY8Iu_MIȤ:>$>dRGUnďcsh ҊlJc}.LUd$' 5ƗJz7N5XhlHux9?cMUè6jSPZG7pW;͇D)'ASAZXfaG 5h~ṚbMrPÇPKMJXkpR'(d2uBz7~J͒q܄ } z4eHBEBkC#z-;4/{{odrEjĪTQ]а6`` xFnPeXLe9=F?O<s"b @}hv`!n5䶚s9=,BgQy-6LJ=&&C|(#F"6o8j=T$G@hi}di"S0iݶ~i`b-(5* tЛu33?YAD[qRJĿ4о5tE34 1z4'lЊSf+kRs\PDkټ ;ݰsnňHB3j[E30bƭoq6q+NEҥF/C<`"(ʵO?nGad-8?sń)c5B1 C'fLH̚n"bV,:f$35f{.)U>wKJݧA|oLXY&Z_ߊ|E*P37y+F9t/3P7+:ݠBc [tn: vzPp 5y ?&W٫\zJF,GgV`4pMDCp12AXn\`/.#ˌypu 4 B )s;;v8q`-Z5nk/z~G@4 . y \0: p*ͳ!`XhtW:5-FV2u s! |ᏈDQn AJ2Tz;sE7àѩX5D7U|PU_g!aӗ[w4,h09"*n H @|[Ν^[lPw<`䭃L {T 'OQ>YuU=> j=w]4w3w]7(֏GJ#hο\8gϷ xrp bX%6\C۫k\>Mw{aypNq]6C7`JQPO7;u>~n4$FIX&VG-:V "9,H$'j,^Cu:$LO92!Z@;xg9럗2֏zExYȇ2\]_ s o³g(Fmk<Ǹw֑2r"&n-U[A/Ẇx}\=p}w vRFuW%FS4" : kbwNb!q#xTtK-f!5<ײޑg >Hqſt.t ԡnF7麯͗qd9p cqAZÀ/^:5#^s!gϞ//W_AJs?I{wta$3 NU4hp_A}~vP "ɋ Ԑ,ŒuThy$@ZÌ"NP8%u_|9U3y#cSoH-oYC+C` ]r?S(X 偃nnsf*oMbXl#|<;tjҬfJ,0^1\E/pwZ':wǖ *d3v{D2KSM.׾IhxyݞK-zYhu=f+\8ϸū |'?1vX4o?;;}4/~7qDgSnij02#ѱai7\u@3`')Fɞc4@k~Z|g@?sO /NDc4bP+hP?9b6k2hdb?j2RK.W^ fHd:p?l}ŀ"Tʵ<kz&G3^5z5Lg,:&'yF~šyl*Hs"Do^__Rֵ Ye%np%p\>i޲AG)ɘ#x5^#MN;4.eO`XX%cTI5#ywM7^t g)Pjҿ<փ;O.Gc:oϧ""ގ낔/ G?7BhPZA+ =>3)SXp'"rgkøxX3Ć\\}??#_k*E("b"D$~N2o$AvTR2MUs0+:GUXGMbs$ćc+ދ4@j$5fP 9l⓳ȋCW3$3zE1C2Uh֗ ԑ^T=n4jA/V7+Olpp(>lj(D=K \wtk߁:Gj+;4c猆pt4X&zb4.~SϸZ)(mԺUiѥP]Jk[ſEWp}8CתJQZq! x79 ?O(Frl֚#Ŧ^Yi ))Ʒ~M}u]qsuwρB&’#sѥ?2`S4bw?;𒼵,ʒidvuJFk4! J@Ɓn'1j&^A]b #$gL00hrK}5ʳj<:8H[cKEy>Dl 精Bk5>(n¯Ř~a b~F~ qcĂ P'GK^K-:bmt4ndZ< nIIVE f\ˆ ? W pe3Q+ ׸8w x塱&]IW}F;w0x+.A ,xe2٪{&ѷ `Zqc|==_xX\cj[opo` x}4 C7B4,.q3&_N7qx"^+r8YopE%x△S+xy$+ISчKaQ\7 dYimL\}-碋Xli^ĭ*i)Wxq5io;1BJ|Ew32Dr VuŚ2uE>><wà$spdɛaDou_=279bP! (@ZWĔr1&>rx7{ѣGB'10Z74XCQ#YT>3A,&44cgu(#BB^VR ]QMhA+*`D0 ' S2UTа+ $/srx gRT6/K<F\#Y2iF.ua}>g]ACK[N;D1. OB+geH&Wly#fTysC[*P`2'ϐ^*VI92<5ޮ|/ ƣ#IsE''g9TbxMs~'z ^B H7DrniPp‡QeD QX{ '{^A :~lFWU]11v8k#Z}@s^4%}-66{9,}ٴl]4^B gq2?ZoA]ACR=OJJal d~P5($=$0J1_@7|oy|xFNc'!,HJSJR͓Vȩ| "~m!8 ȳ3&,6L#U1X8c8 5F)%@a H)AJYc\װŸRb|뭷J+LӀf0j’N-3FB88 msǍ̔Z4Lz_or9 N&; vN3 GT;uLjČ2)((V,>2ߖk7n3dRP\HJyPVJWn7#>#-m@k'a;(V\0RutbaFg1dX2Ckl2l,xQ7kc,SEƈ!qM@RShs`6Ǖ%-', yb4YׄVӺmy umLl=k2 HH7!1"#KZBHEX W[+MLҩ?/gՋgzO Dr߀cuFF=NAWWaK[p9c8ssn{7hWJ3vw,VcL0^w8==E x9FuHș&|_1Ƶ6KJ)!vD0&`f** n{!noY,ZB<\2V;^S6VDC~{(No0z/k0a6JKG^Yds+քֹ 1ts ,W0^aDo%^*ߞ3 T)o~*`hHRPA29޺reDzhI/8ƄEWb$3Ew@P-36K54{S,+jz6W\IUK}m(g#oxS=o|z4^9铧vg0" h3*8O_I8z4BK=1ȣ̭!yf~$Bugh f+ܠרTY8qk橅u6 }.&StW(W;|z|k@ @p*zKn()#!׆\ 9e䔩ÝAWC8y`MDtzrp2}ë'ObÇDsspUMV_וo-7zN|\3NDg,MK1%d|c`rdxȐ]Q;ȩ{ܬ#^ꬅ 2ڲZ&83߻ol+r%=/5Oĸlzif[qޤ#w[|XQֶ:%^X>#t[ 09 #j7bk%j۵U ÁIhad"\oMW { ;Ց؜m :qGsr/ޡq)x&#9yOؒVm8tܽSPRϟ=ٝ3p 22eSfg@ʊR zs^\\˗uD[_J3`gg}Y. @J>Ӡ RNPR /x=ƴ",Ѐ&Zec_]]xw0<\ X!W*" 0OV䄰Pi% Qsm-N`I{Ϸ z&_9Ҥ\3L$4JͿ #/T v/Jal#y,g.XVT1ƺ^%ȹ%#m٨c9%s+F" BaK+ 'rq+ We}.: ` ~X(Y, 'G {5_Oj81'*/3' IDATqȥ&WU-&la,@URsz4#^ SgOf,F/ 'FkGj[4"1Fg󜁁jJ$ 9Zj,yesj!rC;icۋ&pHIRٲ!M@孆btX#mf݊fKKFFJ#1y=9#̒޹9D:͝R3w%5X pzK5'[MsSO^kꅔp'`^tI6K4^odŠwz+@qvMlrlufk_&v"N P#= Ē<&Eg,Na0 7 qc㫗7BJ 59j6h,g#fkxzrp zKUo~NGi f{gqڜTֱ)"5fu{35žu''MJ#.S[8D^$gW{/]i)uy*ke1BXx>{ IʳQ,a$y&FaA/_y,a!v[H[1qW1O~:«Щ#OGIy M| %?s/0p`%v.v\:X`4+Hm5 Go'=3T֩^ZnƬ>"4bu@litaV>e& $dfT=dj7)rT/-*9>3-inܐLY?i (:N&ȫsЬcʢPWˬQsn=V)ps.ҳc^Hr[n=5ފn\*ÿ]oœ|4O,zAuGiAk-^|wԤ q]Ĉ,FGU77/իt~O7OFj["64jU+,~+љIpW#,op}s 5vE:u-=zcv5LCR$kbiH nBmRFoi#4ʎ6&)*3c`-wx|2hvT SM5y€\#3?3̐YYv{Ǫa6EH-~he9 `嬠:xzH3ACo!f8Y _偍p$l @@$.s ebU|ȎW]c$]}>,~ MBr)!gL{?hв-q}(7#q d%rjpFr)}K70{4MC t~G}C# c 89=Bor} ,Հrf!'0(s/9\]]{Xk4 ڶ11Ma@? =rNNN{cFCD -BO#O βGN &4k|@h 39`@{‰)-\FCidPӎq,k6J&,;S5'-iƣXG?:}*s"mo @Xbj;sDh UCC2BfepIBuXy ]iΙ4"tH"%F$ dxdEl%P/`4N9>o>o5 ]@'RJcm?hZ  wwbf#3)j5 blx3)$#/4=䵦]0 ho/]ᩄ:9$ơG4ι*oO?]<{bZ XZ8N,ގ?Pxwb\l40q~v$2aDbÝ-o|;oc2""jmX|hŌtbX|b#up MN{B\=Uk6q+A)N(!~r3cαKMxYQ'=^K9[o|nCʛw4f0lE\66${NM'wPH3mAaC#NwUL"g;5cr$H2蓬I6:Y%";mf,X``:pKX{17AjqI7 \7ie)ęDG'禮/]Rwy]\u7vf&>>G_B{~a] B)U>~ص#"tnMZNgyK^zmv-n9>݅|8\0{jĭ+RhG;ܽw>xFtiFn TPXAHdSXHq ,6=8":{&ϸ^>~}'>, G'ʑ{I#7[+.`UX1WU ŦbVnnlG9Zt/[Qn465u̇B&L M4:7{i%q$K.4\Cf+ YMHEX:zo*X|IݷEQ©@. L1}%乁8ECE*X8iKqFSt @أB/`eDԉhȋT+B FX\Z_S *&+vy'Wd7ǞBrC11j yuR0XZ=dLVD2i^ ]^91^̉Ā-`FcŐO6c0bETob ju(&7¶>ͯLXx=,TF2qo``_Z?7GP Sq(-R[z<[ʊ,Z(1ΓW B+̳aIc1߮:ᡓt`Fhp:-YnDd RUkWE;ɀlֿl7#ֺ@MK+*vm%MS"39C||rğk3e rOdAxv뵅 pbs;ЧF©X(t2eNX t;[4jEޙQ/B)5lQ{.{@q+8"mUC%Y(Z*aJ~ABj58AcV/` :ße"RSGܚma߄bVm\,aaIg^v 釫X4&bA45X^,X]ӔEL)y=ޭ5:)5l,Yqp:(VP0FΤ:ińX t[ʹ8!qUpC6`PI-el#RÏCI=Egفgh;Ks ;E isݩSXXp?+5Q"N5{GQ1<ŮPg v,t L>kjmYPS͌]P;jE+uKבQD\w5ssL8ȝ; 3 h qb`jBWS 2/w& 4-^FN9!=H FN5 rƌ\Ģ &'GmWS?JIbG[~oK^ύQ ig'׻*,I ;Q42xM(V|H/Քi܌D`[8 ehuW2}*zhiG(iE2)*깤ns&`9b*1ٮ(4&Vn̆ʻg;*m;v6p3YF@ 8Ci#9ygD>08ʼnG^}U,XnRMr&&^\p';V'˧hLv: St^By|)Z 䝅ZO6O2,9c!F0 BCFhzRS54%X'fX1Bʡ2w6zE $B搱c:kFJ͛;->z4 .:1ʂ9T`]Fp)1݋:~bj(EwbWw[NJ]2 ;Zou QębQL,"Plqe{ ;+nr;M0\oo) PS[sc8C9|mb(oTHi[Gw,;b';*_~8o햛  ̄,t8 {`ȷ#lŶ siR %__ v{߂iIS-E>|boC8%FiURqa..z3Iwco YE}#IfΒ VC'oL42 U!*Qt iy75'_K'uwjpbAu{$|ba^1?'yB|{I.[ᦍYE/?p־)ܾA'ZCgYixl GwPY|ŀ"xjxsHRhYL  F: &a`J:zi䱟96~B k O{)rW%^\MۜS͔*Չk#i$4{KxHʊs3O(4Xz`iF 6LkEǟ؟E F0:ͬ`631{up̍ KY͞5eFՏk~=ϵDDSЊBs@Nb8q8kğW;<x}? yWf7~?*<˧gO,ῃ&L:$jSK#M/@ЙxAr<"^c|7Ɲ{Yӱ2^rnY߁\d~z/.4d D;g@pPYri`Doݡ"79`8{tJt,. +{$3L6弑j0bsEK, <ڌ FG.U[ 7cm  eIBg@f $&kcqԱXM @ZL3uXH@T6}+mtd35Jiy: Dq)r yIčDߖ%װ睆c?5O ~;X.#>7??1_ ͊/)V/pw.~Ï wS,fn,IF׳`Լ>7/SgƤ#_G?K 7/t>O'x(#N%!gPGۇPt'pbEh4[p5TcO[MU֣g/- #Fh< ,cI؛uu]gߙ9@N %k,ZvUujz;oPծ^]-)5QDR$AH9gFf{{#A.t};c s27+"zK9^yjT 4?: o_ȦHE=Dsr:$΁TnJ iT}Ė?KEu/!~u*k{7i6_*#EXЩ>`3Y:Ӑ : se3_99C8ǥ<>h5}p7o¡|1{Gȍk=Í+ZG0ɀdc ''2]U[PN^9y_Բ\,•hji;B 6&`)J}T| N QP + IDAT`em ǚRﳀurr3|G =Nxd[XɷTɘҋ. +8?C o=w^=g-B@젣Wv$)c)oVquLy$aI頩f[3B$QJԨkp M1t*ȱTh+$ĺ /Q i:E!X~N *b.zͧn&̥^@S8yuo%I/&zbųJuteCs{ҽlXgosD5~_;ux3"ߘ@u9_Yƫ /zǯoニ{7^H$. ,u˟quQ?焽o{h<zW~ϩ5^O5&49p`k?9VrR A'_'|s)6SH[V btf*qn :L# $ř-qp&X~KE5uAIBXXLJ>Oi,T΅-KWa/:6c$"6^#z)ؤ;TfO*S'Wi2Pi^`pAnVmxѽ$wAI&Ti/.ڬ/P$\p.".WnBZ5S^` V )p>N{w>Y-m,Z)Pc|u ڒʇ c r6'#o h2LҀR;~xxB 2m-c~m cc)Eb L9|%Pv8߅7_Pl.Z㱶|[KxvZ).nvhRLՕ-G >l4,A ٺ"XkoF h'TYD?B; +D.e hp\X!mLOzLsMjZrf76Y(7F**|ڏt@, Jh?!yn,[3 Gø>A9CY55ql UP,&qގh\1j3[8,tSAQz%qycJxDZ†Ԛ㵯@v3:lACKBQ,i'c R$ߏ^u9 O,J;X@+-QkkZ_5ݾ16PaL8Sg=݇lJ4hSH[4H9' 9ac-K9S>x}9ǎ9ޅ28'ӣPp!]t!לhR5.SpeDʩB5jVY:rɌ' +-~+z-:!wx3H!VHU>/9zk U6So? Sl /V>n>q|9y LI Bs72)HSݒYèq4cn.i?;dj:ckYdoE\)!i¥`٦ElpPcJ-Dsq8u%-0ҎXB.dۿE;;<6|d]! La @,lbp/!17Pz/L$4!J̏ - Lxh3(WwwihIԏ0nl O$A`l$HcXɖ^enNpT07 EЋR 7K8DAr;2lr/#xFm1f nYMO@S>c ⓤ.oY14.) v&qb:&n+Z0=+ , 06M'$vTPx:ܘ1h_!# K.fi aa9*[`d1IxnBFAe7augDiiƚK`A|oUTҀLa9=^.,l&u X!_ø1?ݯq}/#RGb\epcLm@4)>x(WP~޼?~:X e8ݿՉAFv*G߾cuo.ѽ[p1$eGoHW z:L~?M .D޺WWQl/9^]fXk\ѽ;r#؜ w˟R%J%ClDrQM6UwCvFl&Tn < -f(պ+Y<9!nvE;>\y,TYw'>?Qұ֭w5\y:Nϱw#lݼ;S\\& ~xW?],XJ~WgyrxasY:u8w }Wk]・XL,^W6SûxW8mji7;wah %T,L}UEXe}`}U%{+ڹ%tIɽ $Gnak1(_?^|xG-r4+Oq sc_M|5;T'Kx_S/|x?GG@5=_17?̎:zgXJ6ŗ?}6p9m{D}#q{4)d(a3/~p78fh΁}`~|4ǿlę'`Ho*q iG (iaW%uܜzQBK ]BMeӘsB&"i1}fhz^C䲋@Xu_{Z}5>061q_S8v?@wG?_C\W/>Q|{s_G} [⧿y ͱ6I{/MRK⸃} [*?*x Q _O~I{g8?jP÷IXҳC`z{~9 5Оmґ,̥5t끭)Ұs,I{ S.poClݼ71CNn 7pSXɶ!`0Nn㝏$ N)Fz5޿!Fb'_R Z:> ޿,>w7&x7Ox7C>S/}Ӏol`xѢ^J6>xW(6Gx\t{Xʱi_ 6sk[TSJżǓ7-Z_+$\u7Skթ|IвwQ7s_rPerlW>9anB(5is al`.(ى( 8N_~͕f'r*^ݘ{kϣcG8>|hLbgcɔI #lfD)5x!+7oR 1|Gn6EŤo`ɩB59|Y4vl!m iʖw l"B?"Lװq?v6율f Du 2I/Pv+8T ǔ' )l*B}.QZxDZvcmfu4'cA|Xao~Gn:tq,5HG_1.D3f k )7A;BUg(Y#t(qjaV} -,٘D+88?lH_i<;pJx{͹|<pL|}/Wd 2 kWVql/b}CKA HW)k ;Kw^hOZlÈ>}mB52y(z0 x2̕`;349tK:פ#o=6#]w#& q{u֣]& IZ"߼x?@ck:D7]ӲcF0S{Gx߅^.0kHM6˨-!k|1|tg?w Ǚ5|+O?9F_/')F 5\Jx[ws>ƅ/}XF=%'o!O7rCpv?$E=cjҨX<+jTQ!I.\u jM+&?:qsQ]ѓ;5lA=]wpߘtjH$uhU 0-.C[ +) 㗱4\A5+H]hgX^r%?} ;<Wן$h4c:vc owH^H-V~ū?{`lϠHZw26ӭ">4bW &e Y*A["h)LR&\8̠a!W!l^rI`cv)`߫uA=l!1ݫ)o0b>6{n&)01XNܒ t3H:|=řcm| )Nma0ѝUpzpr$t,VnlwU6'r,i;?sddG0#ې6..Dm bre1 "EμEA!722asF^GY6*2 'xƢ*nhKf:i#c@U }E]}݋(<<~v}&04D^Ew!pvpW>"1̆U';km;BLL  wOz`XJo#3VX_q$j"4.RiqaT a%ۂpͰtn PWPX#aУ!^"rsIv~'/_5 P^`Kq*ғYiZ!kOTRߵJ,1B͚d4㫕(A>đ/as W)#>yS [~DijGPndF 4ѥ &ՎSr:F)t"=P-̵B;#М)ggepg=$>7'fB}r7WWlXr4JqڊygF w}|q|Wߕ e]z嘭աL_oWvwj/zM>n_?^@XRΝ+KgI}c[* rh\j&; aMAW]3fWua"\7z(1.=<(_E:7#`fZu:tߡԖs~_< \a)n/)s9 KC>O) ~dm\mPp_- *(ِBZ3MQ&}8 ;EؤJ* :Kmz=01M5:!9ߋ={dZTv&{P7О+?+e!XL"+XbF䯮=9o|\LƘoW8ZD'ӂsf$#TVĔZP]0>ײU)޴'zQ5.D \Y+>sΒ[KD\sm/09 !^+|΢ y$A%lQdi<$ +M5ld|ɺYB" m&O4LQ߬]z~x!UC]ˎ7לg v2GgIT7"?ǛP(EĺAFfl[`Y,^%4*Ȩtğv6 )D$YG:p,)H`9aj ] $` )H?N!+z=Y*9Y4bUCX~ M%"3)bJrL0.8%|UhChIcEf5Ц&X{P Ǜ9jL#(Բԧ]1% dH-kC谄GlZ|Js.J_bo"TɏL6G%m]]:~]bk `>sܲ2 H\z{^:{?L;`g,@BGV]Wо@=o"k-i nHʠ8d9 AK[-'ύl#;XEeP` 'Wʝ8$\UUbee{26VMFHN2Ӡij\<ObIR[}x?䨩{>pTEID+`RZ|=Pڷ)u PU%VWW;dyՕӑl Mf?K4΢W`.Y-WyɎIa.eB*GXcofևFלL[:m\C5%PkbT`&R9P0"uq IDATX 7P]-=:t<(M4|xu|}G *9/][K|xknN2^3 -j (45NOP); 462Sv fF#OڈI ybn@^y]H:4 r3Y%OQ7jPI j:dY)%kZfssL /&XXhs `P+ 1-^1z`AUulRTYE!/X:yoԕp涂[3Bڪ l{'c_:GVm"-`#l^2 eX FrpnѨH:ɚeLҵ<)=BsiPr|>8pxh3LNpt`ygK6)r^aRQ5keޡ5OƳl܆ ?d @A C5*6\uuAP6 0.`jyts;oPϧ֑<隆F,oamE;I5c\u$V'H$`WiJg۫cI ]ft)&c[M8rUmt,Q%NP5s(st]N8ػ t0aB;BS@Oec%UҤ#C(PHKF\puZOGgݗeӓSTUE%;;9O%[K*| [iԷ#jpu_zsiYoOmx!.-]dy '' )ww!|4-F:_j:H7H`odus)06I/~BeJTͤo/V1l/b7 ̎%zͨcς P%$jJLJ4OB9ʲBUUM4 :kQ%vX)ÉDBLRETs!%ti]ߎDkS db ihqp| -xی_ siL! Ѷ-mF#$&A,;w>Yh9? 6VH6r/KrX64ۖ(TrHg@B$P8==ڶ \Y/ ܻo.ڮC$0 r<3Xmbu`Œɐgp6Ym>9Q>LtMmE,s_S gg)P|[[[/1+OZ$DƝeCHB37}Ps Gśd5c6ԇsn_p}G:8;;t:E۶XLOׯ4՛ao`mQǡdEqۘ~^\gw!cX}+D 8?ElJfFqXvԷ.KHW |,qpx4MUJ),B%ǫ;w@)m>G/V4RPqq>j]&a+M+˕P n06l8?W7sRBQsP*nh,4K/amm _'? >>$+tmb ; ʖ},jQJfCSN-׶ة ؓo3!\ MjF:yQ1B9_/?!ĥ +PJiy?e,OR[+5@~郆-4v+ Hkawww'Ig>,%ힺ8 Rm! Jh>B|o H!T 0m@-g@EFQVDuA[NNK_& F cOe< vp lQX"@2xGĀʤxRƫl-Q7ބ n9N~dB m4¯eg1o'gX_*`_cr0qΨnq+$w&v~VʡkLϧǗ3&J)mxPEV Sl• EotՓ aH,?p1ZhEK$ @tڣTl-#6k%箂%ѵ-S W\ oa!w02b.cW_Xq'F]1I I,;Ox}{G!_W,Fǩ' I[^^o9l!cITb;mQ7\o/̢-zE,5aL9r~9d?=499Eg3DDG@oE QiW"spazv-:4 ƘTY Beff/|{eGMsLDbu d5̔vZ3`eeNxUßkʰ k׮Ν߇1wXqowe<6c/w@ kG ՂJAAEt\At%zQVkkk7o kzŘub!>\.ݻc Z?r He>FU&GMO܎p]?량i ?p)!?_|J>>ct?RB@ @@p)#I.`BNTv,h0}iȳ8cFҴsh4gvy<TĚmUW_L4w@;W@s)QNNi|:ZZI$wka㘆~;Eh.X3c j$sE=vW*s< ,U c|Eps6M :m?8'_{\ v8i;C3s 6915pfʱ5[V"bkԉ;4jxⷻޢIB{X{/0{p 9`_\X&I>B:Yv謃/NQ_X~{_H5*Ch=#eXwru,4)Utl_9'w3(4yH(R{Mד.ѱVB"_L,Yk4]=㐰~лw)>ڭBpl|{XﰳCcYI*7Z5ҔtQAh.b afeElv KY [hO1ߟwyX)Va rhQ19L[p8p׃8a뎾s- T&zKoخHP&SdRT9@)dI~urѵXSQstu牳r ڴBSe)TGW)Ҝ9w| I cx|)u &xt]KX]!2 HH E(d=BZ#!P5am`ZU#j =P2E};[;D,QeTY6 am'-"BJXc)>yQy$Kad$UBUQu>lYoUgHq:R7lهk1>7XoY&T j/a˻B:d3Ɯhd\$hsb_:َCcשoO'<,|~q<'눍W*̴Gv!]Xy".x&鼃Ӥh/a5tZZ.n 2M:+;ҐeB☯|j2Wh"/pzrsx6-v߭#B;kq!Q]!-_%6Ej'&zL5&Yq& !WߖxT^)NѶ.fOq 9!s|[x1>M$4Aڤ ą0p iE:,*4p:EoxHZyͧ[_,3+ 4IIJ<05֎fliSr~4 u W3yqyfH 8.=GPs!%Th%9GښYޡda f;&#]KN]tlL0BhJH uNNV*$ZIx >v>B6ܥ+yD1:mҠK3$QMI엎ƫ\_0~y* 6 . @W5~X5P|e(3αgQFL ۫ ecТJ#_F 19<=|z޹^Ly1KZfFPe@H jeU2, ? |DW|@"5{Ѩ|mT tqJ~_Z sRIqJSZ0< S5c9ɄrPFiGQB@OB!V#Tҩ.Xw"v1bkMP)hJPWEr/jJh\u)K8!ԃb|R^>sZk,/KRWu|b~c"C\~Hj1HQMiTED~8KY5P4,#I- h~VGsi~;; 簆Zϖ5,M b.u",Xd( {7oLX_Xާ|r~N[;.08ӍBAy-=*FP p5I5IܲI;SC27J Qm\Nq(&"{6)'oVH5-/2ha'0\r;Z?BXY'qя;>Af$tkD`Lhq :Gf idʢn\.J:r'M9y)͊\`Pl!GP\q=Hσy:v hnQ(N|ua PjR9ihtenѣɹz)Aaztk%6c~|믿9R1 <D.ʉ4tw}7#_LO089dY-md}9!^Yϕy48ϡS:;ӟ,2-L%(E8 4|:GsLbYsLRÏr}Tlc~1uΣd챓O!939b G0n޼^{m%r=ckͯ4UW#?; K 9pnĐYֲo@̹kpc9b%t&Ij'k,rg'xic<]VUP967qr0׮]‹?Usx`eB!2E<1M<*06r&pj@ dm3lكCAiڥqr؇ѕu6ؼ'O0tܹ(q8;ʹ!`PO?rc>$޶x浗3tƩc@DHWS_7c[Ki ʤ"e3 ]et;8x}(7n\KߙT[Bݾ?8~/H|N{o~g}ӝmjCCŲS+(rα5X BCŧE9BS@g9u%jٳʼnbV:s Bd.?CXMGi\C -RRߋnpD.4DH˾t-q (-TG軖AJ<XPy~9p}{)%9wa_C>(cWX퇬9?@p_.O=ڍ)Gm> ]~8b4afBCnokFLWb^ZbCf^% L W-:Po}ݻw>Xħ?U( sdjZYلBopg() H:aE#gAC PpeGG8:>b8zt3nΝ;xI:_b %r1rȐ Ih/~0mABh'cT>EXY5b af<;88G/Y_{<ף#|-<~8o6×Р sy-g4X0#D,&EoLb-ǜ%Cjs`R8=eYg'Oh~R=r3_Hčcܺu {{{Mҟ1:c t`\]\(صaOoG>9aCf+.[z@cwZOZnfgtPa@*ԱK j91 =!z艝?:9>=ƽ{pxx W` N"7#&m9鉃ZhhQx핯f"_(:"rcTb [h58== >R=<8]>zmW dFNгF. myfl[&4UEt=ĊITl2)gq467f ]A)CuUE)㣇у4MlloK_sZё)h_򻉥J:bx7-x.!OtX[XG[& 84?Ï1[[4 FSM(dޡ_Bt; *gjn .3fMxbZ~~䴙٢ɖ7|mm9ZQG8_hVccmi>y8::/tm o~5Hs(\js^Uzr߇da?w9`.|qig&m(8LBy4Иǻs‡w?;wB1wZkt]>bIRg_x K 9d(v c4U&})ֈKX_i) 6o~}=,WW> nC*ZahBkx#tB J=$'d &Q0[[r|`"F 3I8wъ޽{ރZmk~/ ^̧W d5YhؑsCB-}͙@K}<>|'?v1v!$r Y̤O0(P S"st@X=XIܻN![J)GQLן{Ͽ K =Nxs(͈11NCGw^|񅯛ĀbqBn{ , H#jzu$0%pIƣpZ_(Ea$ar"Dl1\O}Kq2PR2ѐ}x,Ds$_\,_ws˺ۥ;0]e-3LAvsX,!bYkf W\Û%\J9(Ԉ.#"VtGmFmTG̥?9ic.nxJ H8Qeƴ$) Ԁ+ IO grr's7dј1_LxX_-5ԈFKl9]rRž+9_ќD)Tl WpȘ>w v.\˟y/< TCBfKore9?@I@8ndP+،U8 >ZvT r'yƐܷl A6>69g*|Gs4 0ЩfrMܸ̬ >C<0qAi=Hӫ'{*$_pϜrT=h s٣bU< M-(0sZl w1$T?cT'A*i^XE\vz(3 =(G"=\!T: ’"W&I/6<_ TV$BK.ֺq!_D ؽ8`F*2/1Nq<._|‘io`0 |I\2& );E{ZTje<{Q> 32-E.-۾ZN@L , }Br_t/D<[]Qz]2tk9FɸGfKem`ihc +GtCxdOc{2K{ etgxȠ"Uede>μ 'OZtKZND S I98bbp$ìXyc(!W#URmrSa%_z5e-Usя-aYGekJu*CYaE֤9I@_+6Zѝ;`BGFס 7ȕG Y: & Y՝XG+GCC_w;j@u8f@.דZB$d(_h?!;'Fj׍-'` ")58;i7.6=lɋ4M!Tԁx~$ƕKcP%9WC&! u:I|a f&Lks$9)EIido=s9beY\a'Bka5[a|~>-&(jS'1AFr,6s?P \ADYbNr5ZHlYܕC4rZƓKO|~%/Y{ieQae=pԲ*Azڇ,C.3nJ$hsZqb )Pr%S={PQڌ9')[CP(l1cc3@C `,05L3QBDa BL, :Ԑ=6CXMsj@ŚpN EꢌsCA9jc9ˁƑGBY_jdrLBe 05ai&! 0Ai4PCBEk]N?*ޔorђ q|nhh0 $Rh0RѻL4sH_"cA=!9%m ж,@j,dz0S`-C&g00aҌ)D,R㍇tDFTz0Iyc4Q4~ LBfĽg^:|  t(t݆R#Wؚ:ȭ &n  l ^PAGQȁrf)b+:t,`bduLq|;SQ$ftQ9Dt"1&Rt%-ˑCi h0P-lN,Z+0$,KcEEP蜕xzz&TcI=JAK_7X@8jaC^"\[ 8?(Fw?u Ǐ!YC67O.n#E˜h158 c_֯bvP޾{6S.I1|!Bu? l'zcCG{t"À!d59@s5_ &Q\@8Pe:fc, #Ɖ3Blp{1LhPi~>j V6O,8AIu05~jSL-q<DCGEt\T=i1o$W|e0a+$9y-4>b/b87 o% I?#C)0zS '&(Հ>EaҌ wIJ\Ɨ(r=[4`:# ؝slyA{O_!@}"-l[/p#!*=so4>}p!޾wqqOI -0;hXa!xi{ <[$KL.7xשʚ>c>+&0u8A=8޻nї`zy^'3<o?Jl'so-1N4;OpS/K/!81'M>sIT|9@;ܘ ՠL9N{~){ ~_sab[%?:B -CӅJ _u8ܽ>xh3|.mA dѱQdlqE5eF'0T\o *k[Pcm'oϼ81zBoʋP'8{׸.L3?|gYp>޾[W 8APh-]! h5@qh0XH u*dhhw%2.~D5X^66\4ؚ]<͟7Ͼ|C ?@P~O13=o?QhB56y/]N-隸ؕ-mqBh<"D{㳯|z{9~cL6|>—#l| ӯ|b=+Ot|M|?E{*Q7!a !P޻dĀx||⣓}r_ۿoe7^qB1D8}xn.pnC\ٙG)@}xg;=5-[Tɴ sVOկO:r. :Dk L&l';4V@őopa:P|[/oC s\y\| w5#\pf#\YGK?jpmg+wꑝ_Oa$g+ñƂcOz;/>} zk/>| %#B{=^g.o'(d)2qzv{_&^}*&ОTG5lpw}9RNNHh?=瘫ݩDcaF?ԥ L.n9 a+?n\n\~h!'@qϢ;~S<}Oxq띏m|[EY`K8ڭ=ByqwL/mB9ns8}~՝bv\N@W̙Bfc'i-CVq`hLz 8[n56-˯qk@cq{vk`ą`faj1?8x-y!3&DӗWw[n>  W/S>2c(T_лeBA SH \Ԉ!7x\ 6 ltE:];7px⟾[簞K4N(ӋbS:/Dz>2ƢKfu@-].NjO?}ձ'qĀ[%d7vy͑Ԍ3 38_#n~/ _~% @?5paI,PsߛR& L TFȵ= 7SfeZ~BsBu#ԇ!ֲԏ%CG,G7W/ 5?Q=[Eh3<@u`lOO4S\u'Z&d2r1rݩ×ۨl-3TQtn)-o\PZ 90,:K-7_Ɲ'q_4Mǀ-V9l,5K?NE~k|S 0[%Tㅧ.cr~"|hHu($T[ r{<1DP|{63Ci;9*ؘCǕg0,p~8Lnu 5>+0۸5^sB0P[Nh0cB -|K͡K,w& pR|$?~3H}8Civ (-/:j >3B: v$QPp+l|>mFNc{4C:9OGNko|ο6vt~'!qhK[naF|?׾Y46o?՝u5v֯+دOJk/`F)&jTPAr6Ω2 #NP}NXw*$o{ s87sE}vrl ǛqLAkcT~ڢB&\:t/u%c+!X;coS tƅ#oBm(:&FIz 5:;Ml \/x ߇pJ XkJ*%x{S\GX~K(&~4@paoА~^dW~+"kD_ohvxy^_{ ; M.ͳ֋Oݼ}"L&3Bo_?Cu=={߄,f!cB܆'u50)e\xh38١2`#Wǀ1u:Xu=UM/=}~0C{٫??o3Ú ӜkL5ʝ ~{'=6n}_;k%&n[w9sdW#E4rAig!py{N(=T[b~bcb1ـZ!x 1"uV)x v6r|w\Gm.5cgBsasӫ0`aF .fn)bq炤݊`c ?H 6m&fq1S禗ؚ\B&:?E w0N >WP?'89Wh3Gwpa=cs@DࢋȰVߟ#KlO-slO/Év1ؚ,Ԁ{:Ze{ί#3 r6{x8 vupa: $M-{5ZW?7ʗ?ŢvfWPwv5RcOJ/˒[h& cS G ,w Yo}3.S0=<< "߁Xϱ^->Jb_>v֮A| aPӯ| ,'R\&j,M}$K~5ÜdA=kRX/3=MU=&qa01-Xc!8eC 4XAI9|}x븾O:ƂCbF!g'PҢ48} xߧ4BE=%ecȝ;R4 -{"A)SDX֧CM] 0 BμT#Bb1nEspw_M`-h6P1vc sBmADK9LXjq˱Ur'fiA+-B)u6j!b6n1vvXG 902ZH_,"$+*r.FtD}w6`GҍW,SV?_#}MZdN.ul~.%+̿ UI}s >|Z281 3U|]E-GeeP̿!.9|$IMȂ~g$&Y̴k}w9` k`g 568E PxprjDobJDWL%Aܗ8aqL_|>'5ZK<= N2IniH.3N3 @M) Q+НJlM-?{EZL.mzbE,7UrX$cXJ8Zi{O4az x+=X%񈃈+rSخ;lPq/cƛ_=X/JBZd։:>LٍiQݥcu fU+QB+VyG/i\rQc6A[Qk&|Z]Ahx1$k@s,ӊL5\c;hР€NG0Ci`jC9.0GR'v0EK@#f8g+3B˞60<~o1c_f1PJV,ix<^hf8fd ƑCry〱CA,76m$pzdi$5ԨTՓ =4B`zJ%iWf[^~d1i+NccG6 zL*:F.[CdLwP,TiRqス1j3/SDYmXאܕРbLXhOǷس0cqUќC屦# jZr-n6-ݜSJx=K8-xM_A^B#Z4:,[cMz n,,cbI-@0}JTd(8AYUc(P e C*ٜ.(.>vCX+Y`BE`elТ3෡CoQ[y m +:F'[ S/=I$#clO̰.ga"X<̵HG/ IC.aF$q 5XdBT A}e!: %]hY 5s:ϐBnR !j39} ƢsvB/7BF柛oVg=9S(CM>CT\>1c 뤛.}L RZτ hR3C@*6hj&0R zlP~ t|g _uظz@GTj\0T 90r7s`,{ +J, #iu(DLtoNt32է b0Nc8sQ/ǥ.w!:H*"}K|~.:,VgÜ]\s٣#-f sMV}E>pQrDbcg"r$R١wB1ך{vPHu.{(އo> YH w33y~X,ɾw]./(OB&ClsNrKA..C$54O?Wg8Üߢ%SeG$y?WD| @m&3['0T{D7=Pmb3հԸK M_( F.Xˠ(uB@tNDCz RœGO>ùe*M&9{j6;r bAeNǢHdv.++^v ɰp*3U.USMp S"K%-ofAH}楲j{:L4<`eKA$ 6K]3eJ.v ZJmzKJ.[Ps[ce~9=&:+;,kl"XCPA& xľ@j]>'*-'iE,G..9WKª_cXZ,hr8*Db&,1 F˭t uš m* O8Z9IJg5q#p|~91;\@u Tf Pq TiBtT*x>scm!jdE K^VVRٷ8l#}׊9if4)6L}pq. PPt9m|...y}EXm^z2#l jnr08?1CCvWsH1,bpdb$Aƀ)& s;=GyC;T^! \S&0EFj+s {w{&k4jD2R Ds,X.j&)N >= V<[g51Ç9ײKL(LR GjTz`n_ǚeCΧ".`D-ښ!'ܞמGh p Ǹ(;בl٘CO #kKTOl4D,>eETmٲed=jCc1#obL'!_\s }]ەYr'/4GdIک^k+*k]u|B}IQ7,ߟy 蕾n.I\ZS[RRڱa٢K#M3}=,x@c -7gj-{Yߢϑjqh_h+*=jR:zVPw}KZ/5&?<GUfui-*; j\#Gv\H4Oz?yu^uSSikm)ۑZAOaRol0O-r '2ɰP QÂ7̹DϏ9/ߝaftg;~A>%Fm~uG?$z";GԊH5j~ j+/4x,UBQ$l08Gl#j'0,thS S *16:kn؀n.CFs>끥(GBډa843s;}E_Iv~ƖRꓱgk j9EH߇%z>Lk>DA͖QJ L`-$g5z͟ܟ 5OXZW\u)jM.47ad5C{~>FڔLh* y :U,DaAaCkF9A1 hMcF𥉉X-$Bjr| 1E4ѕEk,Vt+ `-AQFTXh@4,XF6SbҰ*|¡к 5,RwrИ3QGCɡQ5XdBea@mT3SeH:]*"CfсyG"HAb$`)  IldyXx9:.A]N<):ZKc`ȽŧV8 c'ɄGBsgq%Ȍm%Oz~[ IDAT\`Hue3Wm2W]%OQy?Tac}ظ u!wɩ>-\6exnYL\㻨_Wo'K<bZrVQ-'.g$\caP jYY]XNe`V7^&޻TJR>vzڭ*Ib v:'mOfN{2 ܦ նڦL<>y"akmVG6%o'^⽼lOf@5VIN e[]yIJ$c< KMPCU|㷟OfX!iEqq1eHܗCeIDCm[6bײQ[ S)=CEZqoqW6;{퍶y㭕}^e&Oq[Too9&#At6zAnmWrKWv]1[4xSd|aEfGkh!Fb*[~cBmw>j6Дhx\\yȻJJhaWJoLhcp[XacG[o!(ko4qSKkUEozdc! xJ齸{J[QQx)*=/ ~߶s.P+S}54e.[PBAfhQLQ1FW-.(m<6Y끸V5#imd_*#UE>x 9,D< cӔ % g5ZH5%xrħ]]ֱVtpeoڗS\'L/J't9!?vZ'uKUp~>q.Ms~iK}p4Dy?0Be\ K\^_R"Jn@Qv*fJV~[lvpN*+U-<& ܶR gF[ 5.iU(ڱL$ѵ|bw8{|mEWmPMphĐ6ג轷0uO 0a&O11S%Kl_]z!ؿ#=c/߿sLv_fEE&LscbcA j*b__?5M-<3Ik¤m$1Aځ.GSTb=/RRJmyn-f!S0 f<1Kܢ,r >v@-.u\_R֗Sžlm]ߕ'5唔&48W-A'w䟏%dpi UقH֚R9澈 \ԕ' T]8ȝm tV3DXgr976 :jX1;_=LJH!ֆ1E Ja lVl̔uFO3NVaK-I#{U.c~X60L<ۺZ|}+zLȂ/0ׅPI]"čQBAՅ$P_"kOZJ{qȱVu3-S™ ccQ2 6Vݕo56*Fs0z T7:ǹHp7 Dѡ@t6: Zû@3DH.X F^0U*ZNQ%^d1.S%E@êH+QcY*YT $'-QN"Y+RTXVΑl4$ũ1dQFeQhS$YC"$NrMTh2Dٖ%0\ C&jBCN*Y{$Ҁ@پPJC&i cG=Fb%jS^ؽk+ZLal[sk-<+/%z};e!,/X=nOm;ZWZl'l " EW0,f\ʪM1rt$1Su516s8cJհ^V8jۓ[vmvRjʀgEPt; bZmjL^y\+QJ/ oVj0xBNNJF+Q2U0[^UaTSz8bU mLFrrJ'@vU,ƩDT7i9U Ŭ(!DdS *w$[CTr''|rE^ɱlɢU";J:i]:&n*T9&{jƔ B޽Ai% ^'RXVѐܓD#!EPd"59)rDIcb #}{=cw:Pcz Yxؖ^ [Ҟǝ*r:|H%wfԯ2G4b쒤@5.lH{qP C^9KQ}QSlNvIO9I [4V~;w` &Y\P&LI_7az7СxLcCe V8H <6.hIHB-U.l@0rAgr0xMr:Acl:yt &C8@rZ^ %w**SIGɣlѢs* VK9wWy,'CHԩld$0*ӻ̚v9 Ze>gEPYl4*"eF+H qϙXQ*ʲ7+M3<(Ӯتa ?y4YC׵va9! E䍥*R;l,8i<^.{2ǩ=ʪwXCOg}Ec][v#2x*L^ӖtF ]Q;^WXMo]+PJ2X Fͨ6|"+Kul*)i OBs m `BNpQQ8l .-t+?X7|SoYPu.}Ff?w*㊯-@[x5 Exklvz=]VYaSU,oA7VYf(#K/!/P ~^N.VWe-# AJ5 AynV5FF1'%5L$8 b@:*rjG]OFN8fb[.H *T\,u·J)!+󎽃C>/O$|4U0Ӯ7c?ǜa?(QX%kO%MZQm$uE號Oie{!Xg_7sQrؠÊ \qg%F!oԂ:6.f߂z,Iu)kMp6(m(EB- IOB81q"/ )n_abZ*6#`/&F;QM^yIudo0If%=^G:u ;Pjqe2K@okWgj!A@mT7g-ыҡ EK/z'byax=+u` *zA+* F ^*JGe(폧"ЛD 0x=NNQJFiBs"H{VyMy>zUnܼ|jP5$"JK1V2l7ցUI$Ұ_a{`bHS'UiY}줠0a:NQJ5IOQ2IJ6 qM;I]A#ͽm] q""O ,w!6^:qŤQٞ(V yQ/ J&hIlɑ1&xoUug-918keA+CΉC)m`/#' LN)%B9Ǐ_+W:΍a-:}LhGt밺x45Nu;zׅl2$äAjwo84q 'aWRZZ čZ:UPKIg[ rHvCl j\ G}pxNH8|HU)1gFFRG4[Km+g_bb9 *)@2^#o62\0@t\<)/<F"* zF6Uc$*"(\ph L LTXN( %p~KFaB5Wnp!? T8#-)łrɦ[qhf&l~Ts< V'Rr2,:Ɇ @1]K]5TUET8ǻ k?5Do|s%]#NON!@֐dYA)u@şi\4Gh@,pZ4[X)Z$ eS08ײPQXQ%Lj0vx iEVvqʳ?%>/0qd}1WXzHð?X~g~stUhcdppzʐUM/kK̭~/9yWMt+<ʌN[K/xY/99ỵG?N׶ !QD3V%_}~y[D aգ)Ƭh YEnŰ$*=cSM'j7yE3ֲsiKE|ڴ`4 ju =!,]Ln*n#%PY\tiM_=乗g=DB ` 9% Zx٣;;kWՄ矻"*g>HÚ@Y+rQUy6Nq蜟/O|y}O]M\-n;r*T-Ce yU f)7?d>g0c2 zn?uQKbbӯ #نjtaI9g59#b!A>|cdM _ YV12!(Wh(:2謤$֠FD>z}G3:^GБW>CH :=cea -(rjL̔b򹗞k_pșLGNuRM=qĽ:Yf̈́ཧ. 9sg5hV5M3Sc #o|泉/Gqvv[*釁X\\pvqg`wD[7t@k1j-vWKVrwnl݊|CGW¼ J:e3Qd2 lTr!'E,Wn]~6&~)|@%Q&NCщ%k( 5j5b2Re^9X0`#ѺT9<ouo|W ~x# IDATy7v[jwfk c/%f/:YPr+ Ei4Ī~Ck4-kg-,xbXdc*C@HTYHY+3><9&$ϣݻ,G\}궈IPy⹗riTRP92$vp :^o~W /L* .!aMAζUANabvP^+BËSȰ`=~Skj*DʤWG%${ cHN/{1r37y rWto)C`P7bT(YvWT,t (ɥ7&eBᙋ@HFeIAe|?Z# YDhGfïw]5C; [jW;&~qi7T2LL&MMLB/%)8lZ0ֲW&3&9m&G͚O%߹l>'D= U`8EJ4I\z{iƎX0J`ڮRY䣐z_7ر.=-pgcwѕeWREʁ<9ݽ\FW f\<ãcKC^K,?#y] {ׯ0]śL25x֜kH'2*TF)a׃XP֜N9{/߸g>i\xզ%(g[ġcVg+b )b[K7e*CR1Kttb>zYD4VBʥN[e%3{BՐ[݂Y/w>/<kCsO~ {+¢4y0BL*ڇ̦8gbSij& dd,:18g1Fcˢ^\vnaV:ˆr&L21)R6S;<ӥrIq)%bLof:c3ɭ$n,6o0 * ɘV&M 5]1гC!ܚ(mJxQ19[MXyx/7y/SWS9}f):?_%}qpx`;E 8$_n6K] 5t8ל<8s4G?o4]aywLG mZKȆq2 Cz7qܰ{T!<:{s~׾U^Dy#MΙ?^vu·qݾ?ڧSѬ$)G0T~}&mEhE!wd>:B^9mPܼ::H>VR-,WICn޾Q&u+[<5lU*ISwm j¤iOtJf2FӶ\v 8cGIɠJiȠ:[rL2 Ԑ!͛X\3Ε)S!%gSN{f }o{tn܈9*|52L lYgPO7Gڒֺ*̺AQDQNά GSQ +X|~?<Ͼf{,5)gw7!._p67zą`aw€W=04acHd>S_O7mx hs~*cٜ{K<>As:ޢ#-7؟B>)ŘV,69bO'0&+=|WͫKo?&Fpq>U}+79M?c: eP,:Ʉ"9e\%|i dUJ}d~^x73ٛctE疴3Yd:#J#eϏe" v?^~9kj&;.9@389y79rH3pEoD6Ue,gg8R7 }a2g'{t]8 Xiꚯ}/"J)R9 dSܦ!T3 e : YFiE3Y-XcI6arƺ1F| 0Y߻f=sڢj+*d TWFlzOZʢwF"աF%ۆV__ʹBP*Uq|K|s/ϲ??͊3GW^aruf ^zЃ3 T!BHsTf`t<>?_in\~bYe=@ᅧQހ=d"vGw?wd6?DHd>¤Y gFqzMr rϟ!v /8_W-^zE3~!g.x?G7r?I@ȏSW^sIٙ5Xvk?![L9S"/5Zr!*񞔤=Iz7Y+G6l z:S1NeP4~{N KK=+!̧^7^'$EQVc97֏B+)чqΝ;|^*\ub@ʐN :ebŵҤb@Ǒsƈ0:1L9?9ÏY֓a~uk8;a’$dwln,mt5ƉaU'E>!O~9+a)%͂)7=͗\Wso}Σ99f0OYu5nj#..tVu\1I@[42lj]MhGD:&+v o_1=?ޏߛ1S+85ūPxַh/FWeRMդ0ƛ"C +Ʈeӵ ~}~c~ᗾŧi*xrENjk^}寙4xuM=^Q a LnII6)Œl V1qJ"A5VFj`1mG2nձZ.X -جIJP/O9>yfӇEd+..R\xo7_gmd\,yp>mxf3)oQ6!;NNN@mGRkXV2tna Ez}EgEJ)[!LHo&'ZGr=UgGX=M=6n+VkJDzH+``rr6j=TQ;-r(BPv-dQ NLR2lpn VyTޣ&Gh&5noJn$Gp_ aVb1 L >xUܤ?!o\evIuFdi 5S f=õY5V6d5dj:< ?4~Jd?/K܍g؛6|pqF 8ڎQqxp}ꈙQ FzY]R#| )@m.CHPa@l$%)Ea&VeHGybneJ)B(Mʸu,݊Y5%Zp0c$%~yۼwv|yC0'xŨ37x/H!୥i&_'gȕ"jW}leb_Unϥ,N*N&>y֨sԜ/8'5#Z 9;`ȸZQRՎ9Ĭzj=>/Ȥ36nqڞ{'mw\]MdhLs4ġ,K_a!~aS0cٚI4WT^ZU2`,c $Q Qqx*CBXΏqq~w>bo搣 jLaaMgd!qMoCqDFKڐ:+G1x(R_i"8p_xy4G|YpXs`z o49iuD % aS#5zפQI3I4Ġ #ڄ&p"w5eiG%M]3jIy([YZ,P\h9goVsp&'+R2,[*ʚFL]ƩńèP9TlĮqΑɜ<~Tyw:EܔNABV&z{+gP|jm6Zc8؂cP)rq.EUOp)aQZqMetXg1p$<|,ΒV 2Tp˯.fzFHFe.VKկ#^xEǖN!k,qr}.̧L'BD0SLm.` d([fV#ɌkkgJH YSݻ01>jIyoc; - į,Ǝ'b~,_օ ƉKʟufuڵC~?˭ky gK5Cfo3 {)3`SI$t(^/d'}bFPM&FTi-[ Bkt(XkEb )o}B):54i$14Zufѯ cqNX{x#]Gyrz Gw~JhB'K2Ezr,vh#SwQ\Z䟼v+zrFkCFhٵmdo 3-u]SrhdVdQ%KՁY:%+OkZĥ$^d!?/챨2>:KiནcݷC>;13v^ԄZGFIA.?ܔ(e*fRQ,;KxTvJ]9κE]ƞţs֦͘D;Yvt\K:LZKƖv&b{LŽtt?/Q:׎n<[i$[auoΖ9?`bkMSm$$jzqzGQo7H27`sGjK.IMQ*̶t0Y3tFe[ :(YCxkh*I 4|iy;˻ݥnY̐;) Ih*@2ĎX"cp ǖ Bq%Q$rr]]]p{"S@aknunIX'Ty1 @(F`sTb9fu/ *"Һ@e1"#˼*)ՀLCd,HE]@-P-GdBH[Veh;0BW%IW#" UbL[t+ :hw ]bNA(p?z]w M?SOw[aTtRTw!9z)#YQJm."][T(KWU3P-MC[(-22arXI&dR>x# X[+,x{ϰ:5r=KdW,>96'_(F^ot}g*Ц[6$%iSGfgg 5( ({;]Ԙl}RSo2 RU (TJ;&G3Oo'ueI#=q[ V Kqnvh@M_$}AF2ᥥː`sh2TDto 2u6xc2ɕ*K63饻I Mc*Q\EK9{De6=GADxw[7|'LWt:#nQ=&H|g:r)PZqxx'ʄ8_Gժ'_s%dZ#dq! ~W9x;##Xc_#~slEZ6"\h&#$C<::uU̎] t]RȞb2Ty9;KC}/ܼqA7{ ~=6&k:@:

    ]44\$FҺ{"g^xmi}ˠi"2ZrdZ ĐD2ݼ`=bg5&KP ۔=td*U6鴗,Lzxqƀ,_gW^bkg|<@B*DD}@%m">S* k=ub w]@(*SM\%}[}c;g(kmr I`ΙΩ,ټ䄓nݢ1(JYgdsoaQ+3M / Ng98;1 ַ'8J!k7nwjUv.=!ĻL-q_'x_r [xWc67'VQ{{7oD t\`D.lee(ǖdUG$iՇ|Zd$D{޹BUoِv+Rs"dmTQn1(7d:YYCM#-WVt9>iuy$Fh.He "Wcx0*DJG dc, 5.Q2KܻVyd'Hk*Y, sJ"'c88?*dBr2ЂڈфB ^sl>L@wo!N  ) a!F:x#2 ٕt-Z9O~qf1$hɋ}tKLqU)M^xyJ޹C@oΥ{.iP25NO¥{h:'U6Lܜ\[BeOl[[ą"=yQJÈ=#1qiBju}?z,fW>/qڕ1%))IbDPg1f=D 0,$i# k|_]Iq!dm\!Fe:efy{)wNa(=V.55N Zy^ ~ tƞ SF-wd:dCCb+IlUhe$,%zW$lE8q>+o%7rZ*èXIoԑ\:7yDž=/Z T/:U6xykzd5*:y΃e {2<;L'Mg/Sakwl4@2Kɔj"~"u]3y߇]k^_=ٽs'?~fH'yF< 3MqQ%:>?_իd'-o!xo~W HżJԩ`cQ;F#ݜN82t0Y5ҤgWP@LNCy ѥ΅=׿1F;;%}8ak@SO|o~k\?n$Q1c/֛B~e>\$XvEZf}%sL^m %TJͺ %,N5a0Ft9:&<&S2,6O! W6KM L#cHx5Sn*?.""ş/+(t25 f Md Q,">&IF~yICXZY5'>5($E|-ѦJ/W,)B-]7:{u:G7X|뻬mn0&W"!M~Hl?%ޑgѐO~r0/5wm+'k3tmҊRճdiyQpշdGfD*[WCH6hlڔrk4d1i bRYra0 )0Wf\'獥;Xo0|)bz'<3, Hb?.^}X$؀ohn~8Gv%w}G:pc[KD:*8;twfR%{hR@E^beik2a r•OcHRG<CgtEC>ڈjxDnҗ@{-A Vdy]~]"OEeF cm4r ʹFg!ZT77`oF\}?ҕ]*g.$gzejs,t%% [G\Ubp,? /q2pʳQG(L mCJ'Xky`csϧ';oomR'OP߸EMF@L&~| _ =r36iM䮃5UKQ!Yez#RS!HJr- :t3G.dR:^8= >C]m޳MomƧ9ױ7%tYrVd}`OYQJ%YQxz=5 9UH9jGA.} l [4e%tR ddMTC+Z*t~f|a)RKeFid(Y]W%8DI(&C7.<6.]z]o| ۔zX[aP\#>K=U~xP/9>׮sz'oޤ;:Au#rRfY^Ïp$EH"}|y &P *AE˄t1gwwciqJoor>>M-"e;#>ڱŽ+ѓ[{Ht}RLqE1]8NMi,X6Sf F8oW{1Bh vNm2bri[D{j+j}Y!EӟY? Υ2<ԍC0>drEaSuC>ӏ_ ŋV!mF]4M poU̧ YJm-.Fʔq|ԡIj,$-jb|΢nq0o!9{Ŝ_9f]3.>s_"#SazLTkk1Qia&N^ YQ}|\tж-RJP{.Z[jrߟm4?ҼӜxN$޹r=AV 1v٦$XgpϒPC#SLC20L#\Pl2rbH2txƤ \/(2.JV|_5- ]' FoP K~?ɭNd 1mr7xFJЃh@9X!Vi.lj *"+ ԰`s"eUpCTl``fMFxd\Q8W䡏Xj22.E`FMR٠Ҥ@C<2( %-!b=t|Ѭyʜbm`k]~dǧY1FA{T)| h@H^dY^h #%0%"Y;Ԑ5S 5-1u ?=fZtw]K\x>yK{k\6_dD (x?1qN7 א;y;#;mNY4 ARb9λZ˅KRG=G&y.B:ѽ8~Bt.$Wqg6{K4҂⥋Xkqb;2/\]4خŚa{`Y}ESJO,Tl &W'y-X܂3bi3(A&+vW0;]ONS&)k!ݒu?Уɇ~N;#=rvtHY?J}x}OpiytRbeQTt,}br%i, rS+X>,= fX1.235O}I||JbxBCLxcbmTq6ԡ0+LFʜd"?dHPBxy3ϥ]62}~SF:!E8&hApvf_f2&oB!ۻrup 3mdJ w9Zl3W}XVMKkZ.ȫ!~Y[5"JGB'S*k%Tx O(w$E!ZFWVt2SkS64n,dEﲄ*eՇ.!|b4x 2 DSjF6_h9ciŽ>5f7 m %K )4_ݚtJ:֦X,}-mSmE6c8ȹqpYKw|p]Cg:ַXS>pMk/̎Z\Hv"~jn~q;cn_kcmZF}jj MKklj͂nas8\3.ׯ=rVcMKg:LcqAmnȇ?8s)>tԹ)=m! *;c0kNv3Na>[3t>s 45fTElF *(wv(!-HEnP!~XTj@+1{dxL+$Ug8ij4^c ~mH>!):pk.-Zgt_vm:W8hMغZw< 7yrpbi#:z6ß`|Ǎw)mdcPB ЦTViBS`U_."r|tDՋO4,@asp/|6vrF`x"|OgEJU.0JA8Kw*G("TDDN#hID'yJ稞G6vc>OsK+tgs5F6nH) S(^|Ap-O~&O*:EC{ LbL8"#*4>=g?9_2OJ1REDd"+4lFglB4iM'MK,+(*PthLڸD.0q;yI>TwB ]4 Lס#ڦmjaVyBȄ>%D/ |Ae)Ui",,hⲾSxB29NIP sG͛/Hki^]g]^{jmH aKt>"'BH!xK/ȥfrr ƦJ|o1txxۧ `gT#~\Dsv6/5ṗ_ԧTk znjid?Oʔ%)56vc*^ӕDXC>O=[ cP9'@d|A6>;=ibz>c2(MaR^~=$1D{q֮KTQ C$;sua:=.1\MڳԒǎZ&gNK"Ht[63Zt-.Q ŨHyt%PV5›W~wIDٖ*%Buy)F[2Kk,Q ƴ{o 2UmsiTHTDopL`[l&q]Q%U0uF&'=NJ+ x$}CdEBEKLxB(db1acmD䨫yɐW^{|D—*`W=@4SX0EK^w6Ɠ2Ԝi|%R(E ^|UӆM0Xg-ywBpzzʝ7i\ h7 pZq-z<0Tz i/ck_2^ ޒ\R$ZqsCu\zKj裡g ڶ#3RgW'c R&X^O-ΎOLH IDAT&Eѻ-~cږ rr|Bet],zkх秴]}-t` tXHoE"SI\V,:͍ dKSD4Ke[Lð+ȡЏ4&9L9 6l_3؝ ҅˗8~|?ş|ߡ ;Ԉyz ^,e 堨J<1ȑ& rm0&\\:?xuwku|U 43ȕfދL*8Z"scvQ=H1(y=~u`$%RA&Q.U"zea6()1yу<N׭{(u7?N5,W(`^g|lOPF(ɕJ ؽx6W΢Dʨ_6YL*Z#% ][Lir([t[[}p`txz c(THqIF| xK{EW*ׯqD rQ%Q,rk[4h]VƵRI{DJ}u} 6ٳcNMuݻ JYwtM1tI@T7FGsph'tifQE‡ 2TS)B_X|u޻ʔP'R[RN}T7ɁaIuG]nlyo|f{9u1ߤ<л8~:8/^RS>xI9Qxt4#xK}] #6R*a͓#89Z!e߇+Id8ZAۄE2Q HbLuw9\2{.33]"cEA+XsA6|;\hR[v%mzGߒ_Skϡ?!ܺA:e׉xLK_AF| b` JuR9[pp̕g|݋ܶ^+lsWx?&uc`<d~6FN&䝡=Cvoaѭ3bmɋ)cJiu.b4łrP4 1swCL#9g23tmK״z|h}|kǧw0ܾN'Ҝr~)EKPZt,x%N 7 Mρq !$}zVҫm4)D[k<3Oj)YߌvvX5{ۜ ~.U?L^*=*cO'To}\B l[Fg$8 J::wBTgrϿ=g-yζICbx&_Lild ]еiҋ//~sTf@vXc&uv]?Q 4Mc,׭wŴ-m m65mSS s=Ŵ!ܼAw2]uL4!CJw0tu0! -qEĂ:UCHьŔc#劉S3@7^VghHT[2 Y.\:.89!HLMCQSc4tpxׁ4S|̎4t9E"aƆȤspzX:5&{EuN\"iȒ 3kXpx6;虞BDMSHӣCnߤ"XѦFfФu(z~^C 3Jiq&&759>:ˀ7\##D먃!or2iMC}}s4 Kr  a t# N i07_$BWȀ$yH@Ɔ&;;6(C{i{K5 ;:Q!M U& 'ی.G3CFQͯgq=|C]GRNu$8",+}~iDvg\ tMi;Bufv6ǽMsqQ&iS"҆[Zwh: (2)%5]K66]ʍ1G7yO,!d]D$ ]Κd{eʔUHF6yIvk4|"("u \+9:;4Q1Yu6ִPkt醊X'Y7,2g:/U;zns7 K,u xa,Q|޹[d`4uFUM+| n;v^^.~ሃ&+VY[SjTFoڸ:14sZ=y3O@kOGŸ""B+x)/@W NFܯHMoYxK$cLWo;߇ȭ  >׫֥10Z`xW?@7n߆ AD*nFV$we9"18~ubϿ%^ B%̲l7޼7|C<; G)dABoxL$)< f& tJ6iNnlP _-fNf؛oҜ[E!50=8Ci?0\RuUOBH7`!"r^!O[bѸOMk+ƣ U MF%_c߲kY]5{sd@H)zX*A7_A%d9]q#^4\tGyWzǘcJ+Feu'| "{[уalf "{÷Hא'~p}7o>]~7Hճ]c%!")]+z=,<]ѽ11pS|\C+:=(ՙ9ϵW_oѤ4xwo>Û/~p ZH`M}>=W߲^H0{7E]x5^x ,տc)&$hM]fC !%WPrB)%VoP<>?믰3HȦm LTwj^ gqŧXH9͎uQ7*Ar@|ƱE&zp}/ ' {݈oA ?4.+n5XKf CA> ^4̨b{_BEUUAoDU>ekln==#fn)+ j4C@p7[ =<EQ쮮Ȉ">uzıluhՂtAEx[`O0ʆchQ#Z-5p*z9;`FAGѝ.*Z -V{N؎5{GE W+%8]̿a^u5%l$]2ʈa\}'2MZ\AۿOo팬U?'9 g~#̤^#E wr@+9R  <p||F7x~[lFBq ^}*'$?N -t_=cP?˻qE[zBt ]Qv̛ @]9H;dxK )+9E%"l$cl8~v 뽈 vt]nv$n$"fD3TCbcFfcFq cy{NX `,B`OPNnYB9qfcNcdCaiA\2UugTdY88Q=*yԪ'VDZSĒ3 KÍ@:Y=ZVIrZ8TbTlp0ǐ8ZqI jc]uu"ҺH+=yLv#`@I-hI b?438ޡ _3D|~)lt\l]E^Ɵ?ݓc v *rܫOql|=j#y8!)v=rGG~ 3_7޼q@^p:6?PE<)݀&FboAJr{{y`$USmDjMdj ܷHm;L[*9FrXLA2vVͿp6}lLi:)tƈ0}*x9Vdž!_Yk ̶Rݳ|[GGFpYteÒc?0㼰V()}12W~hĢBeձ!"; HwUffdŨAZ}`B XM]zԃ(^Avtbjу(~[2-`"\n__w gD:`f oNx}wUV\|?vx## E;7Q#z{f|‡oPNGwWop*Toa?s+\? h#&&ҿr\ϚF*h"sK2@q$c!ބgI =) ޏ*z-eELQ܄#, mcؒCmcl>,w}c7L=TV}'odP= [4:SL"MB,hI6TqA,:M&̜h7yHM( 4y~m-jhCD@*;󰕘ؑIYU*~H?W7߄#;f{YFFKO$ЧQ#ç?ɿ/>»0jf.P)Q7R\BT>WGїX97?#׿C_#"Ga6-3"Zp rTzQ>Vdݱ{^Yzh#/gaej;qDY{??䋿=༇JX\]] ;V-Tw~no[p|z"Ͽy~ Nr/rNʧx  n]􄧲A/xy}{)9 -(x\+j~`σ5oIFL{vAbf3T*åvtݫ J<,rYr<(&EAniGFD)`QZk>Y7|3$BSy!G=m>B$z1P'A*$i̅N‰oWH(vtk!DK3BFn W `Ц^~*jG%Y%KzVx4H wCjj@ `oPgRS"5a=q004C-%#KXH1; c( 4 mN9wHOПuʌdo_BJ(GӇxw|@7o[XFĻ}]X,HFF=(-RQo=L\t>AGD] LZ%&u3ƺJ77v YblۡecgG6xZnAQEfGr}C2 g氘h&HAe̩d:c`g2=&A?93N^UArjk7)h'ǘ|nЂ͛t(l~$4oULjB,<6i? eA` Z%Ҽ(-o`M;Xٜ{h mϛߪjPPW QaǡLr*ݤjaTg]Ӏ,aTfhH(@Y+|.n>cl0V{CMR&n3#ǷHC *0^bL!߃^%H@P"pnLGtv{F^:s:)r@I㠘Qgq/uv}363vjaP*+8IZ_47ڐ8 (A\?e/yjYI2-/f ,`p_ XLMv V9~{{]iî>60߷0$n-s F„C_eVIfA&e[Ir Ϯi^hd#S% BZ.HJNww gd|*#!uYB# 2Oݵo$PQXeN±ɜӅG15'X E{gj3cO䟕xjh(؋`'_${^{(* lhj"sXB'D7#Chv/GM!=Tytħz|ʩbu [s o+m#+V_^_8ufdGԀhqU.<ڂEUlADQ#A ʂBjb̜ BoѽbNA荌${r˺J eW͚K1#} ?(k3#q֗7W >#>|ӟr\fcސN>F=F64o`N6If \tF6w(( Vi3\M[$?cUE#͑ TIg˲ǦZO-=䓗[W1E,Rq1Uܺ-D],ur;=YL߂a$Y)؟010ưhjO$r.YΕ]fřCu2M& 2V%^,[ڥ|3[@Ewg39'A# P4Q<(i+|$3_0ED>D<Êh.6 =ЉaQ5hB4T8aC=*SK@Y,+K\`,D zoaba:o4&%~`nGvތiv3QFL䜡t0U~b,J:0T}FC_B$}q.bnrIDAT}̱(ࡽta_,lo9F0}YgF0uvQŠsq`dg]}Ep 0yֳ&ac0P^,0챣:,fȷӰb⠑u!(;P P Qsc:AP]bNc4f;JzO 椉AuX; M/2)]ji^ ѥ׼Up+ j' 1u=㢡~Gf|6}o<#Te/7z~sO bhPl#yS@59NY(UpPؔjo?6v|{iEMXL ޘM 9Mw췍;!Uaϧ⡶ 8a.֢G=RypS:xM3d辞YU~׉ZuMʫ,=A'*IAƜBB֡lDj:4 9׌TopNy9'Cw .k,[g+|&5)7e}`%tX <)}bWGjSKGX6sClyS]3ƋKok@pzr&pr㖺"Lhō]'%[҆^0o$z@%@\"e6 Ljڟ̀)^5l^ DX6hqKj4Xs+6`hyUMf]z0nХ8*ԤPP ũ?@,ӎZK1Q%O۶ÓUp2 yZ)MH\y(趲."&o]<*;&5)9nQ8eqOBD*F m3RJbZxUq"N6 ?¨+;}2ێdWk@h@}RPugn*vH- 69<4u^_B#_L˘>Icz1jѱ;s!g }οĐ=f^tf9Pr p"Lmc 3^z WzqsN8$l/?\,~&H%(4xaYdW$G3׏fBN0d&\Tѳ׀'bёlzEK y}/=F$DJÏvD \و-ԏvcl'0c='b:7dj$LH}H68NSᅮ}%FrXmcyF~=Z!Kl;#: !>Hv~xbG낍+yl5;z2o|\'p 4:m+aD`%9wRbtyv,boZœGie|E Ĝ,ﵘ{/}|v#9,~`Դc% g E:FM VHȞ9 SҪ\<Г.:{~l wl]tۓm'UnP%]'KX1`|/d$3;4i*,ƞ)t#?/XE,%XIOv W' 7SItǴ/r;Z JHyO&B4t%ïĜ=&o;# Ҍӷ]) * Copyright (c) 2014 Hannu Haahti * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "kicker.h" #include "engine.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "KickerOsc.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT kicker_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Kicker", QT_TRANSLATE_NOOP( "pluginBrowser", "Versatile drum synthesizer" ), "Tobias Doerffel ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } kickerInstrument::kickerInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &kicker_plugin_descriptor ), m_startFreqModel( 150.0f, 5.0f, 1000.0f, 1.0f, this, tr( "Start frequency" ) ), m_endFreqModel( 40.0f, 5.0f, 1000.0f, 1.0f, this, tr( "End frequency" ) ), m_decayModel( 440.0f, 5.0f, 5000.0f, 1.0f, 5000.0f, this, tr( "Length" ) ), m_distModel( 0.8f, 0.0f, 100.0f, 0.1f, this, tr( "Distortion Start" ) ), m_distEndModel( 0.8f, 0.0f, 100.0f, 0.1f, this, tr( "Distortion End" ) ), m_gainModel( 1.0f, 0.1f, 5.0f, 0.05f, this, tr( "Gain" ) ), m_envModel( 0.163f, 0.01f, 1.0f, 0.001f, this, tr( "Envelope Slope" ) ), m_noiseModel( 0.0f, 0.0f, 1.0f, 0.01f, this, tr( "Noise" ) ), m_clickModel( 0.4f, 0.0f, 1.0f, 0.05f, this, tr( "Click" ) ), m_slopeModel( 0.06f, 0.001f, 1.0f, 0.001f, this, tr( "Frequency Slope" ) ), m_startNoteModel( true, this, tr( "Start from note" ) ), m_endNoteModel( false, this, tr( "End to note" ) ), m_versionModel( 0, 0, KICKER_PRESET_VERSION, this, "" ) { } kickerInstrument::~kickerInstrument() { } void kickerInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_startFreqModel.saveSettings( _doc, _this, "startfreq" ); m_endFreqModel.saveSettings( _doc, _this, "endfreq" ); m_decayModel.saveSettings( _doc, _this, "decay" ); m_distModel.saveSettings( _doc, _this, "dist" ); m_distEndModel.saveSettings( _doc, _this, "distend" ); m_gainModel.saveSettings( _doc, _this, "gain" ); m_envModel.saveSettings( _doc, _this, "env" ); m_noiseModel.saveSettings( _doc, _this, "noise" ); m_clickModel.saveSettings( _doc, _this, "click" ); m_slopeModel.saveSettings( _doc, _this, "slope" ); m_startNoteModel.saveSettings( _doc, _this, "startnote" ); m_endNoteModel.saveSettings( _doc, _this, "endnote" ); m_versionModel.saveSettings( _doc, _this, "version" ); } void kickerInstrument::loadSettings( const QDomElement & _this ) { m_versionModel.loadSettings( _this, "version" ); m_startFreqModel.loadSettings( _this, "startfreq" ); m_endFreqModel.loadSettings( _this, "endfreq" ); m_decayModel.loadSettings( _this, "decay" ); m_distModel.loadSettings( _this, "dist" ); if( _this.hasAttribute( "distend" ) ) { m_distEndModel.loadSettings( _this, "distend" ); } else { m_distEndModel.setValue( m_distModel.value() ); } m_gainModel.loadSettings( _this, "gain" ); m_envModel.loadSettings( _this, "env" ); m_noiseModel.loadSettings( _this, "noise" ); m_clickModel.loadSettings( _this, "click" ); m_slopeModel.loadSettings( _this, "slope" ); m_startNoteModel.loadSettings( _this, "startnote" ); if( m_versionModel.value() < 1 ) { m_startNoteModel.setValue( false ); } m_endNoteModel.loadSettings( _this, "endnote" ); // Try to maintain backwards compatibility if( !_this.hasAttribute( "version" ) ) { m_decayModel.setValue( m_decayModel.value() * 1.33f ); m_envModel.setValue( 1.0f ); m_slopeModel.setValue( 1.0f ); m_clickModel.setValue( 0.0f ); } m_versionModel.setValue( KICKER_PRESET_VERSION ); } QString kickerInstrument::nodeName() const { return kicker_plugin_descriptor.name; } typedef DspEffectLibrary::Distortion DistFX; typedef KickerOsc > SweepOsc; void kickerInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { const float decfr = m_decayModel.value() * engine::mixer()->processingSampleRate() / 1000.0f; const f_cnt_t tfp = _n->totalFramesPlayed(); if ( tfp == 0 ) { _n->m_pluginData = new SweepOsc( DistFX( m_distModel.value(), m_gainModel.value() ), m_startNoteModel.value() ? _n->frequency() : m_startFreqModel.value(), m_endNoteModel.value() ? _n->frequency() : m_endFreqModel.value(), m_noiseModel.value() * m_noiseModel.value(), m_clickModel.value() * 0.25f, m_slopeModel.value(), m_envModel.value(), m_distModel.value(), m_distEndModel.value(), decfr ); } else if( tfp > decfr && !_n->isReleased() ) { _n->noteOff(); } const fpp_t frames = _n->framesLeftForCurrentPeriod(); SweepOsc * so = static_cast( _n->m_pluginData ); so->update( _working_buffer, frames, engine::mixer()->processingSampleRate() ); if( _n->isReleased() ) { const float done = _n->releaseFramesDone(); const float desired = desiredReleaseFrames(); for( fpp_t f = 0; f < frames; ++f ) { const float fac = ( done+f < desired ) ? ( 1.0f - ( ( done+f ) / desired ) ) : 0; _working_buffer[f][0] *= fac; _working_buffer[f][1] *= fac; } } instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void kickerInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * kickerInstrument::instantiateView( QWidget * _parent ) { return new kickerInstrumentView( this, _parent ); } class kickerKnob : public knob { public: kickerKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 29, 29 ); setObjectName( "smallKnob" ); } }; class kickerEnvKnob : public TempoSyncKnob { public: kickerEnvKnob( QWidget * _parent ) : TempoSyncKnob( knobStyled, _parent ) { setFixedSize( 29, 29 ); setObjectName( "smallKnob" ); } }; class kickerLargeKnob : public knob { public: kickerLargeKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 34, 34 ); setObjectName( "largeKnob" ); } }; kickerInstrumentView::kickerInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { const int ROW1 = 14; const int ROW2 = ROW1 + 56; const int ROW3 = ROW2 + 56; const int LED_ROW = 63; const int COL1 = 14; const int COL2 = COL1 + 56; const int COL3 = COL2 + 56; const int COL4 = COL3 + 41; const int COL5 = COL4 + 41; const int END_COL = COL1 + 48; m_startFreqKnob = new kickerLargeKnob( this ); m_startFreqKnob->setHintText( tr( "Start frequency:" ) + " ", "Hz" ); m_startFreqKnob->move( COL1, ROW1 ); m_endFreqKnob = new kickerLargeKnob( this ); m_endFreqKnob->setHintText( tr( "End frequency:" ) + " ", "Hz" ); m_endFreqKnob->move( END_COL, ROW1 ); m_slopeKnob = new kickerKnob( this ); m_slopeKnob->setHintText( tr( "Frequency Slope:" ) + " ", "" ); m_slopeKnob->move( COL3, ROW1 ); m_gainKnob = new kickerKnob( this ); m_gainKnob->setHintText( tr( "Gain:" ) + " ", "" ); m_gainKnob->move( COL1, ROW3 ); m_decayKnob = new kickerEnvKnob( this ); m_decayKnob->setHintText( tr( "Envelope Length:" ) + " ", "ms" ); m_decayKnob->move( COL2, ROW3 ); m_envKnob = new kickerKnob( this ); m_envKnob->setHintText( tr( "Envelope Slope:" ) + " ", "" ); m_envKnob->move( COL3, ROW3 ); m_clickKnob = new kickerKnob( this ); m_clickKnob->setHintText( tr( "Click:" ) + " ", "" ); m_clickKnob->move( COL5, ROW1 ); m_noiseKnob = new kickerKnob( this ); m_noiseKnob->setHintText( tr( "Noise:" ) + " ", "" ); m_noiseKnob->move( COL5, ROW3 ); m_distKnob = new kickerKnob( this ); m_distKnob->setHintText( tr( "Distortion Start:" ) + " ", "" ); m_distKnob->move( COL4, ROW2 ); m_distEndKnob = new kickerKnob( this ); m_distEndKnob->setHintText( tr( "Distortion End:" ) + " ", "" ); m_distEndKnob->move( COL5, ROW2 ); m_startNoteToggle = new ledCheckBox( "", this, "", ledCheckBox::Green ); m_startNoteToggle->move( COL1 + 8, LED_ROW ); m_endNoteToggle = new ledCheckBox( "", this, "", ledCheckBox::Green ); m_endNoteToggle->move( END_COL + 8, LED_ROW ); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); } kickerInstrumentView::~kickerInstrumentView() { } void kickerInstrumentView::modelChanged() { kickerInstrument * k = castModel(); m_startFreqKnob->setModel( &k->m_startFreqModel ); m_endFreqKnob->setModel( &k->m_endFreqModel ); m_decayKnob->setModel( &k->m_decayModel ); m_distKnob->setModel( &k->m_distModel ); m_distEndKnob->setModel( &k->m_distEndModel ); m_gainKnob->setModel( &k->m_gainModel ); m_envKnob->setModel( &k->m_envModel ); m_noiseKnob->setModel( &k->m_noiseModel ); m_clickKnob->setModel( &k->m_clickModel ); m_slopeKnob->setModel( &k->m_slopeModel ); m_startNoteToggle->setModel( &k->m_startNoteModel ); m_endNoteToggle->setModel( &k->m_endNoteModel ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new kickerInstrument( static_cast( _data ) ); } } #include "moc_kicker.cxx" lmms-1.1.3/plugins/kicker/kicker.h000066400000000000000000000054021247673406200170520ustar00rootroot00000000000000/* * kicker.h - drum synthesizer * Copyright (c) 2014 Hannu Haahti * * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef KICKER_H #define KICKER_H #include #include "Instrument.h" #include "InstrumentView.h" #include "knob.h" #include "led_checkbox.h" #include "TempoSyncKnob.h" #define KICKER_PRESET_VERSION 1 class kickerInstrumentView; class NotePlayHandle; class kickerInstrument : public Instrument { Q_OBJECT public: kickerInstrument( InstrumentTrack * _instrument_track ); virtual ~kickerInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual Flags flags() const { return IsNotBendable; } virtual f_cnt_t desiredReleaseFrames() const { return( 512 ); } virtual PluginView * instantiateView( QWidget * _parent ); private: FloatModel m_startFreqModel; FloatModel m_endFreqModel; TempoSyncKnobModel m_decayModel; FloatModel m_distModel; FloatModel m_distEndModel; FloatModel m_gainModel; FloatModel m_envModel; FloatModel m_noiseModel; FloatModel m_clickModel; FloatModel m_slopeModel; BoolModel m_startNoteModel; BoolModel m_endNoteModel; IntModel m_versionModel; friend class kickerInstrumentView; } ; class kickerInstrumentView : public InstrumentView { Q_OBJECT public: kickerInstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~kickerInstrumentView(); private: virtual void modelChanged(); knob * m_startFreqKnob; knob * m_endFreqKnob; knob * m_decayKnob; knob * m_distKnob; knob * m_distEndKnob; knob * m_gainKnob; knob * m_envKnob; knob * m_noiseKnob; knob * m_clickKnob; knob * m_slopeKnob; ledCheckBox * m_startNoteToggle; ledCheckBox * m_endNoteToggle; } ; #endif lmms-1.1.3/plugins/kicker/logo.png000066400000000000000000000042451247673406200171030ustar00rootroot00000000000000PNG  IHDR00WbKGDZIDAThX TTof- TM#Ֆsb%bDKUqKT5IpFi"6nQQ R ahay3 j3̀w=7D=AzЃb}牞}(G,ѩ Te !Ѵ"l%N%{hJf;ة7<4 | 2PĄ?T {( F?D.]ЃHhAL#:/49Ϙ;'g5h͋+ x'|`U1@-ԉzV{˽P*׍>,D9/,gO֏H{ ]B|NQ;JvZm @W'YA^}Jµ~Xgs\BZ#Hdrt̲h+@7,"ыBMB7(  LX1C`e FȼhV{>ˎ| 9wwgWsj@TVVPZRk .Ϯ0WRF6B ʈ" c}s dt6eAۺ#CƂ{nL8ٌ3XK1UsGQLfP2QEwzDz/ -Rƫao www\|A͛7ېt0+q#Y+̢FgNZ0DېpqqS~FFj0FL*<#˘ZX#Y5d1 WgLr^:(P?T\^Qj'O"11[l… ct ;BI_XkXDEZzkSBԼhO4< zކhDGaAz$ya3b Ʃ`J7y)QK[KwK!_cC=*=Ɲ^h)eMg |!lx݋R\zǎìYӧQh|GJ5vY4sٵF(/̘+հ=ܺuKL˄^ܾ}EEEωIyX݊gsD&!3jSr`2h=>ZQ~:$y/[%2'o>\pAsBsrNVUL׺kwhY=IIIX|9BCC'M0AZ՚_ [uNm\s̱{4}}}m,{k=p'.dJ *f+la%vg~K.|̘1*!mȑ#sk޻w/J ܡ"ׁ O!66Vq^yyy 7]y( _ޡ8ťDZnmΉa7{NӞFӮ/(( hù# 6̥hb ݻw;fb1p@l_Ucyxdff"88>e^bOwx99pΰiTوk^"""΢EбP4pN/:)D>_JbC,;;j1"(F;W+6*PWWe7K$z1dm7Nwm98'C~~Ο?`eB_!Nִ|&lBRe+jzak7 ʋPQeOB_p}R8A !QRsS{ / UQ Bչ\tY}wbO:azЃ?(=Fn9IENDB`lmms-1.1.3/plugins/ladspa_browser/000077500000000000000000000000001247673406200171675ustar00rootroot00000000000000lmms-1.1.3/plugins/ladspa_browser/CMakeLists.txt000066400000000000000000000004511247673406200217270ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(ladspabrowser ladspa_browser.cpp ladspa_browser.h ladspa_description.cpp ladspa_description.h ladspa_port_dialog.cpp ladspa_port_dialog.h MOCFILES ladspa_browser.h ladspa_description.h ladspa_port_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/ladspa_browser/ladspa_browser.cpp000066400000000000000000000140531247673406200227050ustar00rootroot00000000000000/* * ladspa_browser.cpp - dialog to display information about installed LADSPA * plugins * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ladspa_browser.h" #include #include #include "gui_templates.h" #include "ladspa_description.h" #include "ladspa_port_dialog.h" #include "tab_bar.h" #include "tab_button.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT ladspabrowser_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "LADSPA Plugin Browser", QT_TRANSLATE_NOOP( "pluginBrowser", "List installed LADSPA plugins" ), "Danny McRae ", 0x0100, Plugin::Tool, new PluginPixmapLoader( "logo" ), NULL, NULL } ; // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return new ladspaBrowser; } } ladspaBrowser::ladspaBrowser() : ToolPlugin( &ladspabrowser_plugin_descriptor, NULL ) { } ladspaBrowser::~ladspaBrowser() { } QString ladspaBrowser::nodeName() const { return ladspabrowser_plugin_descriptor.name; } ladspaBrowserView::ladspaBrowserView( ToolPlugin * _tool ) : ToolPluginView( _tool ) { QHBoxLayout * hlayout = new QHBoxLayout( this ); hlayout->setSpacing( 0 ); hlayout->setMargin( 0 ); m_tabBar = new tabBar( this, QBoxLayout::TopToBottom ); m_tabBar->setExclusive( true ); m_tabBar->setFixedWidth( 72 ); QWidget * ws = new QWidget( this ); ws->setFixedSize( 500, 480 ); QWidget * available = createTab( ws, tr( "Available Effects" ), VALID ); QWidget * unavailable = createTab( ws, tr( "Unavailable Effects" ), INVALID ); QWidget * instruments = createTab( ws, tr( "Instruments" ), SOURCE ); QWidget * analysis = createTab( ws, tr( "Analysis Tools" ), SINK ); QWidget * other = createTab( ws, tr( "Don't know" ), OTHER ); m_tabBar->addTab( available, tr( "Available Effects" ), 0, false, true )->setIcon( embed::getIconPixmap( "setup_audio" ) ); m_tabBar->addTab( unavailable, tr( "Unavailable Effects" ), 1, false, true )->setIcon( embed::getIconPixmap( "unavailable_sound" ) ); m_tabBar->addTab( instruments, tr( "Instruments" ), 2, false, true )->setIcon( embed::getIconPixmap( "setup_midi" ) ); m_tabBar->addTab( analysis, tr( "Analysis Tools" ), 3, false, true )->setIcon( embed::getIconPixmap( "analysis" ) ); m_tabBar->addTab( other, tr( "Don't know" ), 4, true, true )->setIcon( embed::getIconPixmap( "uhoh" ) ); m_tabBar->setActiveTab( 0 ); hlayout->addWidget( m_tabBar ); hlayout->addSpacing( 10 ); hlayout->addWidget( ws ); hlayout->addSpacing( 10 ); hlayout->addStretch(); setWhatsThis( tr( "This dialog displays information on all of the LADSPA plugins LMMS was " "able to locate. The plugins are divided into five categories based " "upon an interpretation of the port types and names.\n\n" "Available Effects are those that can be used by LMMS. In order for LMMS " "to be able to use an effect, it must, first and foremost, be an effect, " "which is to say, it has to have both input channels and output channels. " "LMMS identifies an input channel as an audio rate port containing 'in' in " "the name. Output channels are identified by the letters 'out'. Furthermore, " "the effect must have the same number of inputs and outputs and be real time " "capable.\n\n" "Unavailable Effects are those that were identified as effects, but either " "didn't have the same number of input and output channels or weren't real " "time capable.\n\n" "Instruments are plugins for which only output channels were identified.\n\n" "Analysis Tools are plugins for which only input channels were identified.\n\n" "Don't Knows are plugins for which no input or output channels were " "identified.\n\n" "Double clicking any of the plugins will bring up information on the " "ports." ) ); hide(); if( parentWidget() ) { parentWidget()->hide(); parentWidget()->layout()->setSizeConstraint( QLayout::SetFixedSize ); Qt::WindowFlags flags = parentWidget()->windowFlags(); flags |= Qt::MSWindowsFixedSizeDialogHint; flags &= ~Qt::WindowMaximizeButtonHint; parentWidget()->setWindowFlags( flags ); } } ladspaBrowserView::~ladspaBrowserView() { } QWidget * ladspaBrowserView::createTab( QWidget * _parent, const QString & _txt, ladspaPluginType _type ) { QWidget * tab = new QWidget( _parent ); tab->setFixedSize( 500, 400 ); QVBoxLayout * layout = new QVBoxLayout( tab ); layout->setSpacing( 0 ); layout->setMargin( 0 ); const QString type = "" + tr( "Type:" ) + " "; QLabel * title = new QLabel( type + _txt, tab ); QFont f = title->font(); f.setBold( true ); title->setFont( pointSize<12>( f ) ); layout->addSpacing( 5 ); layout->addWidget( title ); layout->addSpacing( 10 ); ladspaDescription * description = new ladspaDescription( tab, _type ); connect( description, SIGNAL( doubleClicked( const ladspa_key_t & ) ), SLOT( showPorts( const ladspa_key_t & ) ) ); layout->addWidget( description, 1 ); return tab; } void ladspaBrowserView::showPorts( const ladspa_key_t & _key ) { ladspaPortDialog ports( _key ); ports.exec(); } #include "moc_ladspa_browser.cxx" lmms-1.1.3/plugins/ladspa_browser/ladspa_browser.h000066400000000000000000000036561247673406200223610ustar00rootroot00000000000000/* * ladspa_browser.h - dialog to display information about installed LADSPA * plugins * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_BROWSER_H #define _LADSPA_BROWSER_H #include "ladspa_manager.h" #include "ToolPlugin.h" #include "ToolPluginView.h" class tabBar; class ladspaBrowserView : public ToolPluginView { Q_OBJECT public: ladspaBrowserView( ToolPlugin * _tool ); virtual ~ladspaBrowserView(); public slots: void showPorts( const ladspa_key_t & _key ); private: tabBar * m_tabBar; QWidget * createTab( QWidget * _parent, const QString & _txt, ladspaPluginType _type ); } ; class ladspaBrowser : public ToolPlugin { public: ladspaBrowser(); virtual ~ladspaBrowser(); virtual PluginView * instantiateView( QWidget * ) { return new ladspaBrowserView( this ); } virtual QString nodeName() const; virtual void saveSettings( QDomDocument& doc, QDomElement& element ) { Q_UNUSED(doc) Q_UNUSED(element) } virtual void loadSettings( const QDomElement& element ) { Q_UNUSED(element) } } ; #endif lmms-1.1.3/plugins/ladspa_browser/ladspa_description.cpp000066400000000000000000000144541247673406200235520ustar00rootroot00000000000000/* * ladspa_description.cpp - LADSPA plugin description * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ladspa_description.h" #include #include #include #include #include #include "AudioDevice.h" #include "engine.h" #include "ladspa_2_lmms.h" #include "Mixer.h" ladspaDescription::ladspaDescription( QWidget * _parent, ladspaPluginType _type ) : QWidget( _parent ) { ladspa2LMMS * manager = engine::getLADSPAManager(); l_sortable_plugin_t plugins; switch( _type ) { case SOURCE: plugins = manager->getInstruments(); break; case TRANSFER: plugins = manager->getValidEffects(); break; case VALID: plugins = manager->getValidEffects(); break; case INVALID: plugins = manager->getInvalidEffects(); break; case SINK: plugins = manager->getAnalysisTools(); break; case OTHER: plugins = manager->getOthers(); break; default: break; } QList pluginNames; for( l_sortable_plugin_t::iterator it = plugins.begin(); it != plugins.end(); it++ ) { if( _type != VALID || manager->getDescription( ( *it ).second )->inputChannels <= engine::mixer()->audioDev()->channels() ) { pluginNames.push_back( ( *it ).first ); m_pluginKeys.push_back( ( *it ).second ); } } QGroupBox * pluginsBox = new QGroupBox( tr( "Plugins" ), this ); QListWidget * pluginList = new QListWidget( pluginsBox ); pluginList->addItems( pluginNames ); connect( pluginList, SIGNAL( currentRowChanged( int ) ), SLOT( rowChanged( int ) ) ); connect( pluginList, SIGNAL( itemDoubleClicked( QListWidgetItem * ) ), SLOT( onDoubleClicked( QListWidgetItem * ) ) ); ( new QVBoxLayout( pluginsBox ) )->addWidget( pluginList ); QGroupBox * descriptionBox = new QGroupBox( tr( "Description" ), this ); QVBoxLayout * descriptionLayout = new QVBoxLayout( descriptionBox ); descriptionLayout->setSpacing( 0 ); descriptionLayout->setMargin( 0 ); m_scrollArea = new QScrollArea( descriptionBox ); descriptionLayout->addWidget( m_scrollArea ); QVBoxLayout * layout = new QVBoxLayout( this ); layout->addWidget( pluginsBox ); layout->addWidget( descriptionBox ); if( pluginList->count() > 0 ) { pluginList->setCurrentRow( 0 ); m_currentSelection = m_pluginKeys[0]; update( m_currentSelection ); } } ladspaDescription::~ladspaDescription() { } void ladspaDescription::update( const ladspa_key_t & _key ) { QWidget * description = new QWidget; m_scrollArea->setWidget( description ); QVBoxLayout * layout = new QVBoxLayout( description ); layout->setSizeConstraint( QLayout::SetFixedSize ); ladspa2LMMS * manager = engine::getLADSPAManager(); QLabel * name = new QLabel( description ); name->setText( QWidget::tr( "Name: " ) + manager->getName( _key ) ); layout->addWidget( name ); QWidget * maker = new QWidget( description ); QHBoxLayout * makerLayout = new QHBoxLayout( maker ); makerLayout->setMargin( 0 ); makerLayout->setSpacing( 0 ); layout->addWidget( maker ); QLabel * maker_label = new QLabel( maker ); maker_label->setText( QWidget::tr( "Maker: " ) ); maker_label->setAlignment( Qt::AlignTop ); QLabel * maker_content = new QLabel( maker ); maker_content->setText( manager->getMaker( _key ) ); maker_content->setWordWrap( true ); makerLayout->addWidget( maker_label ); makerLayout->addWidget( maker_content, 1 ); QWidget * copyright = new QWidget( description ); QHBoxLayout * copyrightLayout = new QHBoxLayout( copyright ); copyrightLayout->setMargin( 0 ); copyrightLayout->setSpacing( 0 ); layout->addWidget( copyright ); QLabel * copyright_label = new QLabel( copyright ); copyright_label->setText( QWidget::tr( "Copyright: " ) ); copyright_label->setAlignment( Qt::AlignTop ); QLabel * copyright_content = new QLabel( copyright ); copyright_content->setText( manager->getCopyright( _key ) ); copyright_content->setWordWrap( true ); copyrightLayout->addWidget( copyright_label ); copyrightLayout->addWidget( copyright_content, 1 ); QLabel * requiresRealTime = new QLabel( description ); requiresRealTime->setText( QWidget::tr( "Requires Real Time: " ) + ( manager->hasRealTimeDependency( _key ) ? QWidget::tr( "Yes" ) : QWidget::tr( "No" ) ) ); layout->addWidget( requiresRealTime ); QLabel * realTimeCapable = new QLabel( description ); realTimeCapable->setText( QWidget::tr( "Real Time Capable: " ) + ( manager->isRealTimeCapable( _key ) ? QWidget::tr( "Yes" ) : QWidget::tr( "No" ) ) ); layout->addWidget( realTimeCapable ); QLabel * inplaceBroken = new QLabel( description ); inplaceBroken->setText( QWidget::tr( "In Place Broken: " ) + ( manager->isInplaceBroken( _key ) ? QWidget::tr( "Yes" ) : QWidget::tr( "No" ) ) ); layout->addWidget( inplaceBroken ); QLabel * channelsIn = new QLabel( description ); channelsIn->setText( QWidget::tr( "Channels In: " ) + QString::number( manager->getDescription( _key )->inputChannels ) ); layout->addWidget( channelsIn ); QLabel * channelsOut = new QLabel( description ); channelsOut->setText( QWidget::tr( "Channels Out: " ) + QString::number( manager->getDescription( _key )->outputChannels ) ); layout->addWidget( channelsOut ); } void ladspaDescription::rowChanged( int _pluginIndex ) { m_currentSelection = m_pluginKeys[_pluginIndex]; update( m_currentSelection ); } void ladspaDescription::onDoubleClicked( QListWidgetItem * _item ) { emit( doubleClicked( m_currentSelection ) ); } #include "moc_ladspa_description.cxx" lmms-1.1.3/plugins/ladspa_browser/ladspa_description.h000066400000000000000000000030531247673406200232100ustar00rootroot00000000000000/* * ladspa_description.h - LADSPA plugin description * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_DESCRIPTION_H #define _LADSPA_DESCRIPTION_H #include #include "ladspa_manager.h" class QListWidgetItem; class QScrollArea; class ladspaDescription : public QWidget { Q_OBJECT public: ladspaDescription( QWidget * _parent, ladspaPluginType _type ); virtual ~ladspaDescription(); signals: void doubleClicked( const ladspa_key_t & ); private: QScrollArea * m_scrollArea; QList m_pluginKeys; ladspa_key_t m_currentSelection; void update( const ladspa_key_t & _key ); private slots: void rowChanged( int _pluginIndex ); void onDoubleClicked( QListWidgetItem * _item ); } ; #endif lmms-1.1.3/plugins/ladspa_browser/ladspa_port_dialog.cpp000066400000000000000000000101471247673406200235250ustar00rootroot00000000000000/* * ladspa_port_dialog.cpp - dialog to test a LADSPA plugin * * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ladspa_port_dialog.h" #include #include #include "embed.h" #include "engine.h" #include "ladspa_2_lmms.h" #include "Mixer.h" ladspaPortDialog::ladspaPortDialog( const ladspa_key_t & _key ) { ladspa2LMMS * manager = engine::getLADSPAManager(); setWindowIcon( embed::getIconPixmap( "ports" ) ); setWindowTitle( tr( "Ports" ) ); setModal( true ); QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setSpacing( 0 ); vlayout->setMargin( 0 ); int pc = manager->getPortCount( _key ); QTableWidget * settings = new QTableWidget( pc, 7, this ); QStringList ports; ports.append( tr( "Name" ) ); ports.append( tr( "Rate" ) ); ports.append( tr( "Direction" ) ); ports.append( tr( "Type" ) ); ports.append( tr( "Min < Default < Max" ) ); ports.append( tr( "Logarithmic" ) ); ports.append( tr( "SR Dependent" ) ); settings->setHorizontalHeaderLabels( ports ); for( int row = 0; row < pc; row++ ) { for( int col = 0; col < 7; ++col ) { QTableWidgetItem * item = new QTableWidgetItem; item->setFlags( 0 ); settings->setItem( row, col, item ); } int col = 0; settings->item( row, col++ )->setText( manager->getPortName( _key, row ) ); settings->item( row, col++ )->setText( manager->isPortAudio( _key, row ) ? tr( "Audio" ) : tr( "Control" ) ); settings->item( row, col++ )->setText( manager->isPortInput( _key, row ) ? tr( "Input" ) : tr( "Output" ) ); settings->item( row, col++ )->setText( manager->isPortToggled( _key, row ) ? tr( "Toggled" ) : manager->isInteger( _key, row ) ? tr( "Integer" ) : tr( "Float" ) ); float min = manager->getLowerBound( _key, row ); float max = manager->getUpperBound( _key, row ); float def = manager->getDefaultSetting( _key, row ); QString range = ""; if( manager->areHintsSampleRateDependent( _key, row ) ) { if( min != NOHINT ) { min *= engine::mixer()->processingSampleRate(); } if( max != NOHINT ) { max *= engine::mixer()->processingSampleRate(); } } if( min == NOHINT ) { range += "-Inf < "; } else if( manager->isInteger( _key, row ) ) { range += QString::number( static_cast( min ) ) + " < "; } else { range += QString::number( min ) + " < "; } if( def == NOHINT ) { range += "None < "; } else if( manager->isInteger( _key, row ) ) { range += QString::number( static_cast( def ) ) + " < "; } else { range += QString::number( def ) + " < "; } if( max == NOHINT ) { range += "Inf"; } else if( manager->isInteger( _key, row ) ) { range += QString::number( static_cast( max ) ); } else { range += QString::number( max ); } if( manager->isPortOutput( _key, row ) || manager->isPortToggled( _key, row ) ) { range = ""; } settings->item( row, col++ )->setText( range ); if( manager->isLogarithmic( _key, row ) ) { settings->item( row, col )->setText( tr( "Yes" ) ); } col++; if( manager->areHintsSampleRateDependent( _key, row ) ) { settings->item( row, col )->setText( tr( "Yes" ) ); } } vlayout->addWidget( settings ); show(); } ladspaPortDialog::~ladspaPortDialog() { } #include "moc_ladspa_port_dialog.cxx" lmms-1.1.3/plugins/ladspa_browser/ladspa_port_dialog.h000066400000000000000000000022671247673406200231760ustar00rootroot00000000000000/* * ladspa_port_dialog.h - dialog to test a LADSPA plugin * * Copyright (c) 2006-2007 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LADSPA_PORT_DIALOG_H #define _LADSPA_PORT_DIALOG_H #include #include "ladspa_manager.h" class ladspaPortDialog : public QDialog { Q_OBJECT public: ladspaPortDialog( const ladspa_key_t & _key ); virtual ~ladspaPortDialog(); }; #endif lmms-1.1.3/plugins/ladspa_browser/logo.png000066400000000000000000000062311247673406200206370ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/lb302/000077500000000000000000000000001247673406200150025ustar00rootroot00000000000000lmms-1.1.3/plugins/lb302/CMakeLists.txt000066400000000000000000000002041247673406200175360ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(lb302 lb302.cpp lb302.h MOCFILES lb302.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/lb302/README000066400000000000000000000061271247673406200156700ustar00rootroot00000000000000LB303 Bass Synth - Known bugs, issues, and missing features ----------------------------------------------------------- 2007.02.03 - First release -------------------------- Important note, in the current incarnation there are many behaviors, constants, and other items that will be changed. This will result in a change of the instrument's timbre and functionality. Therefore, it would be wise to not make any masterpieces with the synth at this point in time. BUG: Fix the awful clicking cause by adjacent notes. This problem seems to be caused by 'unexhausted buffers' That is, the problem manifests itself to a greater degree when the user "buffer size" configuration is increased to over 1024 frames or so. The problem is much less noticable when the buffer size is set to 64 frames. BUG: The synth does not make accomodations for sampling rates other than 44100. This should be easy to fix, but I haven't gotten around to it; nor do I have the means to test it. BUG: I get segfaults now and then. Granted, I've rarely used LMMS without also using LB302, so I do not know if the problem is actually in the Bass Synth. I have gotten the backtraces a few times: ... mixer::renderNextBuffer() mixer::nextAudioBuffer() QOBject::activate_signal() ??() and ... instrumentTrack::play() notePlayHandle() instrumentTrack::processOutEvent() fadeButton::activate() QSingleShotTimer::start() qStartTimer() qKillTimer() QGList::insertAt() TODO: Add accent feature. This isn't as bad as it sounds, but will require some tweaking to get right. TODO: LB302 contains code for a short fixed-length default decay. If a released note is using a user-defined VCA from the instrument panel, then LB302 should not do anything special. However, if no envelope is specified, then LB302 should request enough release-frames in order to apply the built-in exponential decay. TODO: The original TB303's square wave is not 50% duty cycle. The peaks are supposed to slope down slightly. It would be nice to be able to configure this. In fact, each waveform could have a parameter knob to change some aspect of the wave. See lb302.cpp:643 for more info. TODO: Must decide on proper action to take when a slide note is interrupted by another slide note. Right now, the slide-from frequency is always replaced with the prior note. However, we may wish to maintain the current frequency in order to make the sound more continuous. TODO: The default filter's distortion could use some work. effectLib::distortion<> gets the job done, but the coefficients need to more closely match that of lb302Filter3Pole's tanh distortion. TODO: Slide decay needs a better knob mapping. sqrt()? lb302.cpp:588 TODO: Consider making the slide trigger set the note to slide TO as opposed to the note to slide FROM. I originally did FROM in order to match the real 303. However, TO may be more intuitive. TODO: Various code refactoring, as well as precomputing some values. TODO: Remove one of the sawtooth waveforms in favor of the other? lmms-1.1.3/plugins/lb302/artwork.png000066400000000000000000003021701247673406200172040ustar00rootroot00000000000000PNG  IHDRj pHYsodtIME0~a| IDATxڴ{U~tw!m eQcP( \FGDf,+":*u1(c%:ir\:I;}9}kwLVuWukVs؊фnC :DFA!@Vc0@I;()DVaFLFILB* D%9A"R@ ©RhF$LI/ !.U#&?el0[vwf ca= h@'0 A>eأdBDљ0Pc@0hBp*`| mraE`ߏ Tb"iH%NsGU$@d}JHUOUB4YJk;4w  IDH( ޮMhܝ؀ 1P5U6t{ 994@ +݌t;nt(La%t@J1XUVI2b'$A!4U y:a㝴 ;glH耉;Sc V+X) IC$R, r 1զaSz%F#pl#9RUK Aq8LM8UK%IR\QޮU'PNu9jsO`hĨs u;* nrZ6سwB75ĵqvj*E㼮%rz U!SAŎuUQW!LѽbPW Ĩ=w=G&j>*':-؝:+ |iRmv$ fT?E7_?_NinOXj^ ULThg4 &O  #Yq6QӔ`GdIA/ (p<= n@ǹ2=w"aҰ{ R+-PA+ULǽ5lOhAfa{0 '# Q0,U'LbTUHpN}CW }7@K\3 GT7 x?O8%<ۂ!`Um([9 Jl&Vܵ#%'D!g$"vOiPtvm &Em'Llqw}oUkdɼjAst:'lJ%I%ĭ/QRҪn:h P@;*E PFg d^}_~UsR*T&-vvױmgخޙ\$`'һn(Цzw{Nl, g̹g oG G #/ wYcF{qOX_*=:a:W}= MozK_R6Nq/IIt] 5JlO$e{YR ٶ< Y:@`nܢ$Ot\`J5TPҠb[b{~"\V"{'Kd{WI&TDd A/ˠB-AյͶ[)SXL\nqINT8qncq=nT􎊤-7oDW%o wW0[okXr!-y&@0% VT,:Il(Po{o_"MesuZe^RlhDIdi?^2+* w B1(>ݼyw׿;o8)ĊMx3ĔlޡzڀÓC0`H,tR܍%25P㹈5jBy YPJz˘ `LR K\.B;%'IʒU`WIWLDdE.B b H$ s6.xㅮ}(Bupglգ^AKH\زT5* @3cc7F ї>NjWdR2bOe˒p'btؽ4>ŁᓞQ{niÆ6*=<lL޶3T VV<)|ٗ}Ӳ{LȾ%t'ʭ1n5Y8gX @x% 8Iy8I\4g$ ->w tJp'Tv}tK\rj3,&w@8i ^eK^Y݉ JbPA&5j. bi~uAut\:.xq8q B(@s6v":}p 1N0 nZiۈN01 hl nbRcKԉTj8p̴O ()ng940\G(HT{1%%pXᨶr|QTeu8`Vq 6@’q!TFy.UWӲ gZ}a-Y<|yb=*qub,iHw\|z3m=ە+1F̍>j:(aHv3[ug\,+Ï| 9N$;fC4u@j+/%f}%7Bqa-)K|Ӿ~'+qBY>=v{Tmg]c|W~?S?S>䏾S^2RΪs/V:*9ބVAkD)Uh1ED{_-0O;wӮîVKgcok_'{ys3~o]3>w ハ3: &i랍ƅq'~K?w_>>eD̓tRsSW׮yY㎾:?c)QœnB`f'4T0-÷cߥ5 ZtwI܃ݍv 1 $'K'jU8T qm`H:lq'* t:h6ak{A^+_1'C{@&6h>hVOPZzIeü~?g?{Ϳg{q1=0tN'g?We:kןz͏oK|' 6rF~۷}#O?:TA$9 wޕc˪+dx84I>YwQ2}2F9TKoEt:Xfn/ ߣFm[s@5='bgzǨbM0"?Ĩz_'ԗ=uZ\'U'PN>"bnY㠱uo-{Q#U\mok~_!<?'!x iJY|ɿ _W_4 jJm['ϸ}֜;sNR/o~wwMo|0Ih4g VQ>Nc܈3E=ön-9.j^Mp {z[F:}}}W|Fb9=mht+:mu7)mkNDO)E^}CiG Y ҝIm[VG{~}z/k//_~k׮?uׯɧ}^{^FADܡFwְ*PsڊxZ_ [xwe@-qˊ)(6nUlыG WU?7}OЫ__ƍó9mFe>p'_/_/z9QsREtzC:EH]4h'Ɔn14¨&/8xz/ۨ?z䑇?s/{eHRԥɪ*jeb-{˰SEz(eHN*`!0'ɟOZa#jUaZ"K ]SIlk~կs_OǮ=$8~o{Ko/YXmTiLw]?|?E_sZ8;D|kH~$˽}0kUCNBQ!b{N&J>7|_OeƝ3',.[q:uDߎ Y6z"tAJ{U IDATY((nVom{]7}g_)k^3-m-U __%_~ZJAjNA?n?6`T y bٿɯv8.kxp~y9X{|xs/y'{mw&Wg=K `x;) i3?i7/ δP-iMMD-Ih}Ε|9"z';}Oۚt\*)áȸ8V7FFnN\Nw`KR>:jmiy:9'gij}6٬QDz/;oqTM8=w/p'_Ѥqݥhgn wYwǛa<M8|U6͆q~`^psY=Y.'_\Ό19Цosæ;@LG_>>^\W΃ASRQK?W?`zKIXkdb<%}jom읆Lɀ>J׼k#R±B]"ڮVo`EwW0wZӍH}`#X959կuz~3n5ԢD\" 8xFJ6Z˺Xg[kBD{oO}'?/V\ys?z ؞= x]m9XsWqJfsb~#,左}9t}60ּy7fje!\\t4&wQ:DTH>Jnf6Ҁ[#^cfpl V5m#5DIs"}oiB~r?g}OQk*qZ@#D_#A[6Brq2NFsA >7yql_T+_Ϋ}qczW{Gɸj}t-QfÂN{эa49iqm @^&%j%զRKiY|vjZ<(?_s_??e8cNKbm'`LC8m %#̈`fϘw} Ѱ(eC.nr`p@"32}gr9(ozݯ(Tu_;pg<Fxk\{%Mn^^1^pXxܷIx071w={ϼ/~kl#6i'9ڄ4%{L:]wKesǶ{hL/[2hp#8Ǧ_p~8kcM ~Kw6~8gQ_ARC]wl6/Oswsgg}XA.䳙6)ܤ'PDQQ)(nzk"xa1v}֭I:,XD7҅g=#e8YEZJ5j @x"D,,U5Bk+T8ӸS"DeKjyf_$Rml->.6Y!$Aeኯ}w"{nJWvqz1-L{5]cm>7Oǣbee?_~/ő. "'""!fBBLܗv<6-kTNq :?Hg>="jfb<J HxpOdR$Qy $FF"ˆ9qcD0 Z/ɿxB.5"qE~63#` rKHY9ɿ _O#+T8E:`Ob87V:¼ucuSc*%|t~իxuun5F=W[_ѵ+[͏2Z `q( JnR)@7-ޓo9܋.z #p3)$4ѺE3 E18fNu'Tc L 8 BY Aq PPw7?:mڴ$ (^YH$qoh`B\a=FZd"c{{#T3mtZlHL*NE# ?9}e]@si  "(*cA>yع;GNZ[&)4ĝFZ<3^s$쾳p=j c2dC8dW]?!Ԩ3O˿?!Os6yu 1#xm9@k`07Ռ$DT=H=+n37xf:t ̹5&faɛ7;?;ヒڸa $9kn"  #%E J N@ l $Jfx㠖Gߣ7o>g~>?yim۷W'Thh)ZfY0̄g?[8{"KIh. !HYh,H?~]ΑdERc3.I\29EAj8©!q]u=]gAAnk7\s~^v6K9r$!-bL"X LRۥ^޶o-7F}FIhpL $ҭRgQ9Sͻ"[;!WX=ۖ}JD i+zwhz4^1Ʋ9fTPg VѓO/{[Z^\\X!doݶ-7lٲ-Eu\]#GAy/yIl>a?O}{ˏ{G?q]mS7_ {#j ,pr2QF*Rt8sD:YnNl>glhDPkFoή?TgZ9;ӂVЉEL:|L ڷ~'=BBA'|֯۶%}A:k3P<<ɮe6l$"/x}\oz )2c7Y( Eü4XG{R r!yxp*MGvOyS F>ƻ\ʯ?lK_*"EE4b Lfx.43A t $$\3ul۔ Z&`,$v2vSݻ%DJljt~mܲe?_p )SBTio~:×1|榺<vpK}t-/.='g&_Ѭ xS S 5/u{{?g=1<|+O{3̓Iq'>{o),aFTx+DTMǛ%:' dȡ6Aڌ m[{H'$\k!brFI$} >޽?MIpJḦ́9gC6lظ<}ֳ~od`x܇ .=|_~ۗ7H9'u{Yc&T hqvɩ̩i#%2d-^)/9!XF7sQ^ǣsbqΩP$t2Y+^}oh6H*|3җYg=(+]pnّʔTgG2@NҜYj?/eo}{y~=󜜅^3Fzb]#$*''CѕBh=/yYG=QNvߺ_,& 8WkKBIA;ۏͯ5DПy:O{KxMkb]u 1Vɴ]k#I玐K'[C泣{ӧv9ڧSOǢ+T-[ܹ+)A夓v,=]a|9`eq$P3ɕ{q[cPh>|ԧē~?B@rb K@Fu55@H`[^X|K x sAϝ{s`mط_{0ٹsG[˕ǘNc~Ͼ#29s,ZNM^ `jJVV;X&9-/TjVf lJ dqY3'oݺ07nt!Uݻk(2[S< ;vt$gݶm(4)1CNg>EJ8͎K 蔰m6└7_W\zWjhFq>O}ӟ,;ty?uK5UrRdu$XZE-8CG}rྷ:֓Nr˝;w>|h^#Jby9ɈLڶm'$M0q_0AD1GuÂP 뉔tFfkb.nIx`"JGʕtfCVȄI Y5,8r}0Ln:ffɭBLM߮LZ(q bgPd h[eJ k?/<箮M~;pRpVFMk͵ *TxLsCHܽIۤttjŒѐ/K,V#b~$htz\Gg&y#UDz OFa V-HF+=I &"_=rLJbIlw]y.,;5Ф~< d*5IZ5=H Vٵe<|D:#KDf &Z^X ':a%1:u Uc!0-)VKJ%7]UN IDATZl^V֒xm>u'+g#9GpvfDT.`K&Hy({VJ{kUbBBunRz.“X~WȤtǾSسT d$$A?3ٷ=IL 8~Ͼixq"Su8_O \g>ty?<Ͽ-<H]0 K?w_ ”4S{?|mxЗ?W^zJ)ȼݿ{% /x.>-~zpyW ^ 銤HNp02GhR" B !aRX 1ANua2^b-88x}m'ezW(wZF@Vr$yTG~o[mAzΚiIn1݂hR#xZa8Ƌ,DIr`{t7~w?㧞t",/\z_z ){}Mp};~}NF8Yu,^: ^|/}Jlg?}g,//Ež{ws_RNbV"IDs[i2ӳ3@2eZ5Uqh2LIFFw6޵q#Ʊ/M}Ď.Y,lP:6Gp2Svܵˆo=zyO| #N"RaI܊3faPeXH̫ &/,ɮ}:iNUKGc:xf# Bw'hb"'JKJ;zm\7I8A"&,fިmLtg;#I(aa)y-{>|FnP)$.ygUiqT@P#&)RrJXqY4"O"@f`JKC;5pޠPVǥnJ'n+۬35!^).H7O0"wD#H fI4IZ+m$w"C5z9r_/|ك:ᶃ,"N *1[Cyk_vzIKK|v"zGœ5G8 L3A8<Ԋq̑;HA6,a6S@Wis0hwD` (jR:ɬuNQ"9ӄGb!a(}ρrp871_~'p~,aD3;O%xEH3<3?oڵ,@ܧko{ (2Ԋ&q%&e:HZ} zx_:UɅpхɞy !n@1mL-|T]$B#(ɓDKӵ Tt"P(R klEG|Џ߲iStX^M P0WUe"|<䥟l ƕؽ{wfjWܝqUprUW%/Al lUWoƗoxw+,?{K)]׷\3G^?޼k^GB3t)卛|S/Ag>{wތ%7u\otaM; @wں`tc<,jU!f & 6݃RX$2ֆMwZӦ%9GS")I709%}Y<IdOθJU{xeIs+̫(GX"#E:ӝak$RML2!9 hFeGB24FNP\mu,=2A&>0/ 4tjpQh@ʆhUT;ZotLR7n.洴>T\Ij5 $QrIwHJc91FPcoL{w~Gހl9ui?x/.tg~{9|{)}yy墋$hҩ@^Wpћ@|_W=!DeDEH6'ɩ{?[;mXF rr&5=@>w#b4#-0P8A 3 Bz͓SOUwKCpWpMPZ].Pzrb4WdnۢǐFeDʔ0wbql>uXl7b.# ұc\3DX$\̫jZGiw2-xxjeqN2]`ieT5u/x>iڧJFc$D>"ҝ߶I6o(˽3Qy$3%]ƛsT'!sb (#OZ_6h9ytω(Z3`E'@pC%2@$ęaC_}]!p,Ĝt]=Z'\"#YH""JX? %ܫDfcFHTE1ዯW}S'?DN!ڕ x]Nۣ'H@&H􅐢̈'植 1fbsaU%efuNE#9( a0+RX+$ٵmkbY`4QN{޲>Re3X41y\ س. Ydټ,NՁ`KI!Kn'oʊ`dc$k~lգ-̴f_]q%ǒ>cFkaDױL[Ɖ.m,\ FN̸tX3p/FaHB6v+?![7"8"+q& Rsa="ev ܓsɉh陒}u5{ iaEb.-̄[h6ggF@tl%[GWuPg턅mK׍ >yA&_7>&3G L9k׿ $q~zbK35M,ݪ3߻9V.~݇,si:%[GNjUM~=l-:]'XgNt[BAXFYpگ6(*Cـ5W3W_1qƘ}HjNIF̚~6a*ךWgӏk%B;;-Rn6 51DHDWgT!4֢tͫ\f`I(R[ e17__Lȋvi-D Œ%rSX]l1J5]\fks칪_xLAEZa-UCn[5ܿpC\w~yq[*K~"Uj3G[\sP8\2:?6#siN Ea\hϜA.(-fN:ѐ+#VZ>]YZ}xP1o{xxxyn?\{ܶ#ipJUcmf 7w.|t;͹FY{եnTz/u8!y 3FfFu[P\f*,2{U ZRY[ry7]fF1UN yjU%=|p .?\O|c ̭kYhW)AtXEѫPVP5hE~SaD&:, o[i3mabC/r?9Ȏ:|9{^*d9i aꤜ&Rl46?cWTqYe{z.V%5&^}A\7QBh0ۛ>j{|x{1gsWR'i=amB}PxVc UNndh1l;׾j;YSǟ?2]Rs$U 0j͡b`le ԝhkq[ 5Q1gÛBIRf>#/bn~#^A Oy6ٜd` U(+;iVJ`GEם+Uj7Ai@cwg?UϮj835՝{b6ݸ^EgiVTjfv>ZEy? 8 }p (0U9ˉBm5.7-G"BwF1'dP %At*^ӏIHY!K8NnT1zpy;oս3E#׈]B YӇoõ7'{shhuc/7jI wQ>bF2%7]3͸}FL' ln4SzUBIuK$I)&.lvC>8[>fI LpU{vV]SB ഢp=L۹WlРO?yc5+GT̽՚-fݔu$huh}r4UݔU IDAT+<*M=%h7sg FG#bĥX(S P P1Tb0]Fz h hjs[bX !%3#f#alv=ϿY 8n)cSm[Nߔ{ ?,Dj!1Jp/딇GnA|%Y 6f-Ys=ThHeTB lnbcui /)0̜Awڔ<{Dm=]vu~|-CtPۑTO'|^=޺1r.܂fZܙGS K{n%jiRÜbrl5Jq+*T5"e6W{ -:54U1d ,܀L*JAq·q{фnOѐH- Q+vd-}5Qܱؔugz3OSg|֌cgO>}Nv4 T];C bpv6 . 2&cXFƬ2p߫sZ'$1XasPE3?Ju4]q276njL i+Z,@@`KomXO%o>di7k?0uigNqq}g1:j6ִrੳUhpsQⳇ矵ctg{?iE/Sm˺~M-ZbC*2ZRMѝp:ּclvj) G̜TCcef5@翡ﳎxnl7Et C!FA6B`nf]@HURŜYhRhp~tv[SZnlH;w4:} CjNe 3lL 2!2<YB0e\;ɠIrVu7BVw|)# ZCxKnmaZmf%nZ~guLdYlR'`}jCL榞8<ܬ26v)ܻ LNRnΟfUEd%pF~F!xLO\nO<旗UBgu\bGٶ:bW=YeVY\5]:mYo9nυMsx\#ˎg 0n>SUS@lň";ldpMGzye4<ֵ9hO|>fVsvhTP,3smskkjH̾oq|eÑM҂cĄ ‡*t! SLDAD֟b衮:|@"3!X8$x>][ .V XܠÝ8G17Â(VW_S2F*9Yd 8t/g>fU*1 ?d_ C Pz_?Wn1}̖ɭs[3VR4XS@:Qc /U~]i|9'2^|f Zb߶ t)QL6RP-4zoDg7RU 5a<woi]6. aM5 y7GɆ1 &n]+ZK8:]fqX}a<(Vu)KrB@XF갅@R+0:} _pPS#}BTgVpo-]{}w?^+ >ԝ>6-F#5ͥAQN½2͇*;߼ S=TE+P|xw7ߪӾt6\if&aSmLkgFyѣ ^ h4<旸gjnx 0bЋ> @uKĭJ2&PPC}*` ssk?g֘F~z4A% ;Tqa ma=Dv<9c,wڕ繟zl+m^{|S6|$~ sTr}`צ>ʹWS*aѪlGxIcVϙHYtGXe~ ~_ኴN{cyy9}մ]-tu@i&5-iH ,ٽ7I,ü VawW,߹J1s M~zm{poss5:f/j~Z2c)!m(dAy"İY(;Y!oL;4ˌ1gO^a@r;M~^=xf{WƋ;ӏӏlf()PAz[t9BFfLXZ- f?/=0 a#;p5R@ZdlH/ݙ= lXDf _' ;Fkn8a7h1P5՝ã2_V R ⑻0 ~4,zzFᄹfj2jդL;MK3U *b5 --_B/ڪxq8e׷y0X P}VɈfO,sR'[SʿܛI*笯|+|cPL!# 4蔒<1OSVez{P>)#ɀu#w8<He1RZAh0*TM-W#M2"n߽֛(VMxO?2x7f95 Ͽ替<ź/=7fmXӀ t-/$Tm8 澟ӂmw&jQ3c&9zn77z?JܹjJ-P)͢5~s>\hcʹ 6sS[g޻wՇ+/ox~"nLS;ۜUfMgtaE:Ύ瞉>x{ĝ ly{v2ywzf/ڊ9LGت޽8X%u4߼Ԝ׵0lϧn^W,s+B$Jy 1g]mQj*nm8#c>5.;l?|vmw[Po>[sG2zna$׿Hd5ɎIhV Cln[vڝ` ׾Y{ӺR^u"̼ Q{ÃHN%[Mm:wʲ +rq~_M=+|U.H3!in SY8,$#@YԪ,e{*>+-R:~f;>=J5X*۸mRPi` 7nŠBMZҞٵucuUuA{u=9}^pн8ϟg k7&v]s84L{5SqVʫض, P*q-VJQ0ܩCNjҍwZ6qRa[j|mD` <H:_{L?|KKe[KUqTrQ݊[5noޚqu0ˇͻWGvPlډu0]IRf$ٓ0Jo?8;;uvP|;rvh>O"&TfmA'$pᡥJeUd^j?>U7o1;|.0|O\KjJjtHJJpYI]%he0ʥ,lTOPeu,pr!+٬N3Mm6$c *ϳ B7drdsE6в(MoG?73_kww܋2hr)ȽREk#ALy U ynBW_cvD-/Ӻ8-S,2N _y/\oT6b|W{u:35l!K2=@Jfm]u57lX[D&cD}- $6-{VZGcݿ_3YzPC/jSnU+O盞ZR:!գT./$a7Cp dsIm,,6Mn]07' n ̫;b^PwHGVۅIH5?O?w[v@Mm [Ti~7{&~y ~7v8TN8= IDATYmj1nݲaf( V6i}'/^}cL c8"FDjLN9aBcJ*AI6I|vwdLs=}g';ظeA.U)MeRb X4&dpe Elf"ZJ7 ?4fifX@5fY 1 ?wί|31wγ^e߽cwSwyy1U9t5dcѝn% 02܊8vwf'[0;>VͲf#mѽbUU=Kʽ b5~q{=6k¶KcviګrXRhʮ4c/g6|8*[jݬ<:}.ayW+ 7 4w{\Y]]C-ؾȶK Ւ 1x2#˒·6n zP]ժ!kꬬ)2#c:{Zwo@'[}qJ2r{Z`ǂl7`j#25"lDwuml:Pчmhkn {yb!OW~9} =gbN;P!n\ؓO#8`MrV ZQ,mnyh`U%؆ Cu6CpfcdOMGOݍ$ Rj?N)}90ʿ_5ogߟ8^?oq96Wxß~b|UZܧ&T,nTN7Ia~:X3auO/=ہZf= & @6u1W ZF g%*3׿e-ƱU~RJaNh~>KL>Zn׬0AZ(GMUJAcѭr2Շ4g'X@OZF- []NW_4WއcGWlۗU c ]->Oq[Ck.́uZ'z-Zd""ϓ'4# <8Owޮp1Z`~Ÿyv|95"ӭEbW KS:MԎNI+J9J;cl* oD Zom;Ui7^ߞb]U+fg Zf=:坻 9b9}ܲΧ7y͕edSeB{MFB,9̩[.70ۡs&IH7_rf"G |.z5aȾtXA [=K݋.ceugbiFU^Y2U`AVobvK[? غ jKKBs~fƍjS1Kn*RpV6&>Vop[7CF)oh.5eQ}{sZ4G#hsr;^/'):s% mA ;یBgv%ؚ4ܐ*MR.T}pi7'o)ͬNj`\ORݣ*|Tqࡷ>b}!c>4՚s4k@5\" }f"I&a+$:c 59xtʟAV&ybn`)Kv]g&釐 (^ lhiͪ|wyrǃێ_ GPTٵ1V#7mn'n^vT"`WࡽIYGvJ k:fث`)T w>>Ia x=xn\~ ^ڛP |4ATcĺ(k\l=Vk1wEL-@[ۘww?w}G̉''Ć#]Z2JS <0 s&Ph @5aa{,h 4]5 z*UlW^qB\-?Vf=yU>xț:l iw:7<-^O=RV CB{nNmMXfCU v <7ƚҊt$}|rW_Z!;P=&#']mԲ~0/YjK5(a ^~Ba7EM<Έ02'bk^-W?܋݉N{oCZ3n]x ȊlPpo$k s7G{2V=D ӦvSؼN}n?<>t5#cLk Vt rw+zVmsͼ7t@%` D8'"hД׋.tat6zLLmے!Nmh e7z:/1{i( 1Rl;DalD88a%9;u}1e`$#LgOcLv5$Mުo;PG܋}Fk{B}Wj#Pm<0SX*CFq:PA\ɪGWw a8l{~]\  ڠVj;^ԾꝄy( ~Sha{3LK5roɬw Q,B@Zt*YaK[ܲuY\7sサݜQu2^Pa2Ͽv|幹86ԃPlhmc*$GHY[Rt7u>mx7{t@7`YW.+`:h'矼wo&)@Clh7Nw9_k:lrz&int݌IhՅrY6mUn 7F>KM6I,iZ;@'ٖ E햵w<}r:<ֹac_cSd8lB20kaWnjDyv"9U3Պp6lF'sFSÜ٩mf)s&h@ H(d V}h$̫ 󑝪^~uv>j?>~]όn# pE yF=Vdh +D{dWTP6#hv1fA\9 L38[ NAG ;؋vqqc_:\s'ާ{a-jМHw%M/0 Õ߿;='ϐo Qu(VW/~uFʨ% fJ %V&le1HTak!6 Ö|aT9aớXf\+5PI4{oc{t!׉jMuD*Aifn6ܳff5[ (34:MձaJ YiZ4 .ڋ>_Ï}c/ܡaH73&X] ??KUjF3|u3Ű!y)=-K|X4*t7QAS`4X5r\gXQ&AW7̾<*D?㷶msr/#e.HgNJ0иtnsfpr؍\XmX|C@VڡѺ` ح?3Ӎ^S:h0#驝fcaF01O/^{ؠkw'&oFEl[='ZphPUۣG8"|l|S~yQjwԜPGD+"i X`ټ֤Zg44l"ѳr¼$u)scvGgw^}u!TMG:5a+`&*tCp5ph'JYA4*MM+1OmgÇ^ZaMP|9A\N!ٳjsϫy7;a#P'}~7ǺȽsfAu&4Ь}?F愹T(6}Ovqh;^iaxD^l~smbVC|pc#b8* 4]ƞ>K}ѪVv_Oӿ/^ٸ_kG駟Yu{_ _}qh?[9g[5MP4û($:]aj,dl5fEL]cnz{p֤`]jVn8"",rI`|Q-nH3?~p8m[s7^qfd~ܘ;!=jYP[ .գ6M;8s#43i1>ߐD~8|>J'\X+uVk0RGwaڻV)83j~+/< oy#ToO6, H7Sif{ HH+ݡsC3Q]1s:AYղfAIV>@fG@+4-&Vh4Ozb㼽B 7֥/>7>~׷[G4Îf"aN,Vm ښe NH;ws2 gy/yzA~?>W_$u޹Y`ka:!;Mj"J36F0ɶp0}"K(`^ ,2ˡw\wߪpx35+j- <<քz>wzl:`DT5,~c3u>xQn7~O?G/`z sH]p.qK&/?o?|ا޺?:ճ~Jz@LK&Xxs78%3AԞj ڳs12"oRUʏPuw UVqxt_ _Q&xضç_7|9᣾}|S4Thg55m#c@Qg֜ɨYmq8t?}=u7Mmu|Nz/^xpT5,hŢؐ gui>@lV) i醰p vMh3W,a-s|#.ԼcfɽǸoot. U9+a<1֭D[BnPl6jζ<_}[zz?9w9.Ym8p9{ mri/Ġt;ϙ1b( a2bs:ƶ2Mf]fSkiNuS9 ګzo>gOoTelnY FCBXfLnB[vS@̱y+FX| Fs5wުč x|/s:a18޸/@UgϿ1b,8ٲSzWlOy󣋸mx`GDD\^BA7^{_ѽM,J߰-4gcFCuWpWNT1ƒ Ԯ]9( vu`P݌DI1;8>ܴ_ng&;lP1Lj#{k mNTAd {'j_޽O~[W^Tk޽KV - xv}2_Wu[]n^>>o,m+*7*Kbm5ڰʻNmr^tIt-\m44԰\zë}go}<} 6?~<>^aҬ=̊q~E{6dl XUHonӷ~l1KkDisy8r[Wif(MuhgLF Q{][WA_E~nΜl$tfPec688;4ϵtlj*-,??u8D\n ۫/KpmNp$Jef hZ6.q}N{(3 h Vγy4 1"A`T}iFrDZmf:vY]uU{6-̀[e:{=8_ÙA ̲e2lTb{s\2s jT÷YMt9Nh+ï|w=3~ (B-Amγ%o0tyyN!i|j+u,]5ۂ0G÷7?@:Ç6q{Ev+"43ܝnLY?0xÈ6n^" RPFWV/AWjĶylewLn!WW~M։ڳȕ2Ka~XnJ~&c܂W -.23A`tfCqJ`t#͑-OT5 Gy1|,6k&l>γ6z]ìZ ҔPj^W(K_?Fl$S(j T ݜ`âγPJ\Ugt͆`nUUcxo|m(FڜeU÷̝@C⬽3r^tz4cǺuE!Pyoo۽i҃Ol?F*²w7 y݄/XbK @?[m6 R{bغm̽Aj,5ј_ñ|.%t7\ਤ=l=,bVfUĶۼ zFX^JV 6`iFZ ݍi\)YsV{8Oյ8ϧky9\RlSFb,EUhosmfmR^=zwAy³W?|oC32>Z\^vDyw&V-FR~Q Y؆xś7}1o|Bދ%C7K'2:ϨF)˖ZJR ndj}j1ܨl7($i rc5Й-Nۜ{UiQlpӧL0'7BKse G9ڂYV" PlF,i{ho5 {~`tNt΃щ{v.1fmg)¬XwߪGWz8e׽M&yO=|P88$p1sYVŅo{aK("`jX2ҢaY00;}Y39%\gP@e DVY@o^"bjpf[=1g?m!9rTu}UwJý +(`gѺMۈJl -GR"7i (OWfn4z 8~(;ϼlM*EC=Y 7r(P_Uls`hx,$c[=нhv Z_ck9=EbS \4MU۵:bWoUv.=R,N۶轲Z<[h{N7_+4Ig˙}xˣ=g_/~A9gk/_[}ssSSܶ$qc#Yv ; E$ecB"#"B~+H$OQHbTv߻U9xޮjc|ޭ4jƱ{u5w>:bz.qX}-e|wJhwx~u]\ָW| jRfTTܡn"[!Г< SYTIs+ZY zXP.c55"*Fi@a o_,..ɂºؾ 0vbHR^&ZoR^bl`PRg&*k)X5h h*S rkԈ*}mnK֠@A;ؠBQ$L-f0Jc*.V/n6ñxOf~w L#\̔N h!&+3K$վ:>w=dxuIR#a{|?$ڋKF{d黙GMe^З%T\]vW O_x&nV^2޼L)=xX]^#&~-*L+p55Mնil PYӽ@4fMl1}\U>Ɏ*&斤^"gMTfMapmhq(\=ԻX_~[jw~ş~ P@[:K!wd-YޜB-:g ¨]{B!ٛN&Ì}j8XH$a,+5IfX|4]5 i27Q)0e.Z\$aنo+ШO,lTS{EZwƱJզ%M4 T*_QNyE:!ojz o+ZQR#hq c-Sï,{?qu'>__~3X+엗CK_mոًzܳ|yrϰHo4'JU̽GpŽ=L+W8}J lf}X^N- EO1 W+=wWj" w,~oÝF; K J.ɣ=zޚdAhhXfԈ45D TbXs`кJ"&omk-}E2*@蓲a 2mxXP7őcHd@7,Hh#i2b2GfjfI$XipI opvG}~mըd9h~3ЅPc2vPW/)㭭/yޜTFt/OǗ%oׂmU2C؎veq bwEUl5P05%ȧw[(r;+WJ#"́^譓V.,7yQWq]Yciw/w8ٔBEN}6қ{wPG HAU+ͦ |EӉAkMe}wg#K셾tG؜MlМl8&UJPE $[c&Uز.rz6ʼYiբF_:}.?믗h. |||I;h~ݰt?@KNyZkSBe, ˡjT+Ǫ_O-6zX-u{DkL &.?A=+we5zaX10Ь upV"FEl+DG̼Fա-HsD] }AB#լ"jH*L|[Ǿ_oxq^{ ;w92 b:^Oucʫ jL#ZT4+32δWf]QFJBr1ںB1 L mYU([[:VI7T, OY[{NP9(t6zadқ-4C}[ҝ =J*NbCJ&KW7ܾF[;y6e7Qk[J.<wV[Щw"ڪX+Fy@3lR^k>n, 6qu 5jñ:Ҟ:9 GH&RlDWd>Tcv$V@ʁђՊr{ZUUV]̗ωɲZO>o^#޹v:|+EeAj"bڳ'ԣb`2D89~(M(7JVXofȎ ) }U fE @=ݖ{;SmY*g @s*3VRf3AbXݼ$!.˒U¯wޏXVQ{0A2+se4 %~7O~[ǧGo2ÇՆVGTgr;Fdk0So58i $ PFsNe]KәO4ci*.@r쌔~}#...+rd!vd #'3c案QJ´(F|R*RΖP{sI͔6 0Gu6gbľCT%h?/q3kZO(+5NW$)d1ic'6rskSM4+kDqfCQZ[5b'd *B { L}{:5re{ 5!ҐZoUp#2:϶hj\q"~겪&k̬j~Vy(?}f_T˜׿횛q7O9j қͿodŷCnssylr̼˻uoMWMon788_5n.=f=o:P7|/n>lߩeo?mMG};ovsno:9ܷn`}K[{vkn޷mxD} > &iO_fx~ nf}'~,;ؼ]OraM4R OUsy'r{3m")'Boln9omCDgRB|7[&y7C`6'O[iO<̦M/<7SZț5o-g\٪q{my~rzp{ĭiy~W^, 4~lsЄe>WTVtlw)v^94!M9 MZw 'f䶎e[0wKc=0,)8p#rwiޥQ 41-=~=ԃ3<} 7:pѥ5>aӨ203s¡*5g92FSz`_-j>K`e%  `(T})//l2/ēŒl*LM(*3ب8؂8]4!Úsf$EwbތCtjI?2BRkLg 4>ͧq,`"9z̔\Rf3B*5n *М65SOV/&/MMWvq1O ]zi>̛ʁ}HLBaݢӘU%y;ad"+dV[ c21?>kI:^fCh?\bʅ}G7^oǾvX>EP1 1mt0ʳnJF#yM3N STi XnHs.W8rV}$RX* F%eaRќM=8ܧ zE֪j2A>12I5œͤƷ9 #8 !ozBq~fjN^f"UU5> %s+ PLZ)<!%_}1Mk"^ty*Ta։%H9}چ $<DC U=4+T GqxhX(A ftZG&;{>ɑ I)r#P[dˆV'TbPK"$ |Dg41_J^'P#f{DЌs4( DcD؈ SDԖ6Iwf&7Oglo;J[^X<5h$\J3Ş?7/N)紤>5AV)M1DPpo[X&7TiH9 sb֡A'@ h1ՑE3E(dBaW2$gU{i$O|EhYXR9t-&9Jy+-c:#haLސ Nk:YpEg$ m0T*ʥc g??./MK+kP4R|V nV+Ęe9\dT )66"ǓҪ;a$³ 3:%C xF *6JdTH9i@ 4M6% 1B[$SUyr@(B@E8 IڌUSm9XB#qֳ,v]ꔅ"Ơ'Zi2N ӷEErd`"eHT;*DsNWtcIgE>z>K_}{wSmNt$'EP{D9-0ͶU1ówWQSF[$|yMXX,k{~yr7L0TJW} IDATҀd>ZRHY$THsR%Fj@  ÆA5h>ϮEeӧԠ"b̌>`6OTi汪5+XrH!0Ƞ,w/)rlw./Q0>wxqPQ5N `1fEW*vG[b(+T#"vu $2#laȪ}C4"JA\BCq:uP[}>navMEH>sh %~sG%A?t.Ҕq Jss0Hf<QYϩTf;k$K}j]=fRM^+u0@L8[_& >_9 sz+Ӻ7TeS.$%QRUBHEkoI.pD.<' Yg fHIEh>bP:pLK7S gߨ*nHb}3T##)!Z16)9 39 J5gauVIYU|,TYoU < JJf#axȘJA ͚[E`z٘JpNߩdV%h#!sF֚w g'XH2KT6Q Qr>bwר*,hi8FRqr`1`q/I%/FdbK`{NQ)mm8.SCF]8b;VdsܱR! ޻ןzr~\2$,e4p]Tw~ <Ūm;_9}2 bfKYNw8*SAe[kdE*Jg:̝bU6k(O__t_;\=TaoZs8*D0Sv&> <[XZ@yd,*I}铇(^3Zn}A 7i)JBe,brh9H ([RDsC%gŎ<ê0ltf Yڶ<"'y$]Somn\d<~ 1T}!9IiGk `[nV*ؚrʱK͚n6 -g@ŧk|HTȶvSFseVf#$[ح,@Ƅ XCL"f9-,$ܽ}>zċ\dqZqCȠf BX0MԻm)T{-[.ʈ/PQ4(x1(k%a "0X0NS4,;3I Z"6>lyf`TEO<-" Tܝ(M0\߫%*Nej3)unUe=b`L8D zwGEկ?G~~_,8|>O+<+1~?>o?O~0!/kl *E0Ӻ5^E Er88yP(").]m%8R;jP昢v_}|zvqw֗rfHwxrBKw?O^Wq\K3RU${zS)"E kmP^1[hpyUy=sb NcDb2,ETV!}2'%$ݐ#OD5L{gʍ&lYU4 +rln *I!ͳjt(8ʦf&­;Yꆽf9\TL0#SJӓFJe̤ "kL?|~s?3s2 .[mΞn?3?mw|7?߿W<} ":S_O_}=ן}`8XU &šlFl'|:_R=f[.,+EY=_%i"c+렌VӦ[??gb:oZba+P(z)cW INS(˻ө](S8x7_o1N|b!%BK!W*ڎ k%NM{\/=js#[p%缡Tٟ}}+E_3_,$JFPXN_uUo<:?Q=s&<{j)QhzBqT"90GEU,ZʑJ.+UJEAn2oΨ'*Y i#QA,?bM .YO'fQQ*FΊZUʈi9lTQj.Q 4/_,??C&UjngRUH-:G|Tۢ?#oTqdm[Ү:>F;짭ƆTc;ܖ}K/ۅW" .CM]~҃`n3],r\L+M7FJr߻ __۷h_{ WHuwȺ3.Vb|3~ZOm>McXJ9^)URT() m}faS?mbfʔٌcU04Ǜ'Dnňӝ 2fqVQ!jTΣ0FL*ÖJ V 4IY,AlnZxI8=?915FI'|߳F_+sDgy{ؕ:6kK]冒Cs><ť˽ܫ_PGohs~}IzK,ې R9ʑQ06~x~Ϛ̠@4h02@*m,g)֬ 眃0.yW>u?>| Z=Ȭ6MHEe& &N!S 4V%Ih 4)f捑9`Y֤N9h\,*9rh |ܑ4d”cި2PBRjz5)__K!Ǝ_g5p.•U_鲤n?}_yo{ܽӊn~g!D64z#E0Ȏ) eӛ,H[9Zc+`,dgXP#ƒU9rh ɛ*h>"*#ڃ|?>4?+M qTZU,Oo6O2ƞyuU,Us;JZ@rDN&Tĉ̀,s@!1橚,QA*ϧ"+jle M2-Sb]8U$J&N2^i͞&B(YTXҨ43MާRrˀ-ocBqf0f(UzXN|tTSK~S_S?tVs`ȱ5um=X-+fK,Ȳw2+&@h&[_^'JT(}"'hku 5ew ޚK$]Ƥ-k_-2Yy'WE\dJԴHE Tڝxeyߍˣ۫sERUݬR":|T'􃃇~2s6YJr$Y1 prbڌ1bQȄLD/CrzٓdsI K$RUf+Se' Ak?yΈj R}{p9y#^pxI~_חj;Ʊ{͖b q<]1WεӥV9፶`A垼RPf˒[Dw.E%F*+YK^%o̊6Pw yu5%KlG__~F/0Ccv/:8/Rm\5%f>3gRsˌ/4e( 2zCe( jlʬ8 Fs 41UePM 1ff01]QhR% уFĀ\(Do9;efYE3%pq8AŘ QF2:ˌ, ldPͨ?~G~<2(^/W}俊w/ٿ<#Ǿ׻%9@&X:  tz\m:>T}uDe9N m5b/N$FpRRf/¹mGo͘Bj'lc#:/O_{)c#CW {/GDPKo}6waJ_]4)u7 S&Y^Jږ)JjJyNɺXn-fR&sT{PY*P6 ۺfuNCɲ* &67 Ŵdͬd^[f{7@$-"ޤ#Z5LOPω t:bVg]@sm߱, ֲѪ[C.p*6E()r4o-Ct=eFTo=[V)q5;р҂CXxq0nj&2aF ]RLͻj:!t#,dp5QY(аx+B-ѲQ/bY;\{0BY@C2ri@#jB.١ Q 7oOdiݚTo'u˵3؈T[dBx*ZBto#K[3 EPm3DPfHYfv\4M{6r0NͬG䞙1PDn P!"tSB-*]rN;"*kY83*cq9w 'N+f/1$QiY$T*1 *cXYU TA}b!F}40JJKS4 #JP!BRŔVYfLZVfBT#?C((bQՄ%aA1 A}]ٔ*b5@"YUM@28Kp q-"Le4LM;P6vV`ܨUZdh_(XýVj&FNI'Ȭe/Vi:Qd#.Zջ {֐qvNuf]/+pFLЪP2=FD{XeFO*TQYҳRTw2p}?YOҽu'z2cwB}~.Y2KH;D6L2:'?` nM9DP*1 F &&F*TIѩ"D0mB;jUR$ڔA64DAj)X{ P@ϴb_ w,V'UE%D_L 2X=*8CV>Y]K1r1ϢHʪ6(vLidXNsg(~fZ*Tdem]vk=v}7]09I-ފ`-,W5l'Sj@%kG&WTP{dQ.hQGWh4 mH٪(%Ja%#W=%U[͌(rmhz] j. *c(ifa:r#@f!!Ce6+ d9ѡ,…9HBzDPRLU,PE4 (Rkhk=S3{PnZ+bN̫$J୑PI8CŠD)Y%{T =*Qb N,.CVQc}xӊܖΤSTiKim ;խg"X}moō վ@۴dmSӍafjRIemNDc-J'yi\FFLAVkdG4U]ah-=},hZZV>oq4w5Osw%u(`JQYT FFD,$RxXajT*YMU61:&3ʸ'k.`55)*B}81% E4L6T`6saNJp(Yb&TJēpN­US( DRG-u&ׂ&kjIfhL+AFQPLd' r}<-V -{PڢSO؅*See"(M uVGPHJZH&PF AM d<HֱI T!LJ2T*TuѬڭT%iZ*zi}^*ui pm&mTP#RUY'@u6OVBfk(e!6Ӵ MӵVM AS1!D'U.mC.U)DRmP\)҄27̵vzSE4*l&'5j6, 0:dXBDG'D &^.fdVOjDnZqySɗOĭ#t퓺Qfj擌>J iO0XkQf0'!:k@UL*$d Slnp^&ʛ**A4cv+TPL(*">h ib^Xң(bR mxX Hkb1X,梽 ȡ"'\{ 37בıKpq"Aɵrn0JpU1j(2mQey$2bX q$92"3LQ^2~Yoʹ* .k'QejWIeL(CeYPUKYF9`we1)h^ob, |gٹ|[™&%krRl"zM5T+0" '4 *!ņ7A1!6q98̋ZpxjTW(ZFo2Jf*PY!%QǖMq4QJ(8TTQlS()ku(c}PDefɊ&VHZAEQu '7fQ0S7IkmqvٸML{aҞto^z}ߗLoMjwGGe4~ 1Io=֦\Nz>%cW$1ijS*;ϟMg?#),tCpBdRGޝtRD[j2z52X}!%LtZOAً蜛>`mRղٻWw'AǏX>=ʶ>O־:y[4}4Pi ΂c6ri4]7=I!D_FYMR!E8zR (4r,B[RrZtJeju XZ22PS(hMŜU}ImV"#d@)$e;o>YWdO\TV$2%sdUҦ&b+I/ ]O/PWs͌F<ٰ=J[ѫO0S`b8شKlt.vkOm5JD jIfL3/QDEKr]Bd4 B-Ydz(NɌ/R5dP͍ ݘ@Ȅc%Dԡ n .L.mz8WO~]W^—mX@PzߙoP' 0&+p=:5'4hff_شEu g<&Vzrpkx=oz{~^ʟ_#3,/گ|D1:VɆV@l#^ %/|2Ƽ'}K^/L^/7޼q_9Ư/Keoz֦}l}n'{kSzk 0d\LQysv8Ud SYY`3ϊm;U"Z(󶟑<*t]=?VŃ3lGoξjkɽ5_9o}'GvOͧ~/?#QA}WlRk-p"]DǴ9Hdg>rOϞ5+Liѵ@UH-bQu(5W@ʚmw7_~6u;'6m!2)+뾋'5YR\/o~ ;+o1Ҭ BOV1WoKvSt廧? MtfHP Ř0Ta`IaRLnP " DD6֊L ='הQTIJއj U17a\>~K|3>կq43_ӗGH}r6dW.B 5$,q+9y/y(Uy7=.waEo׼%=˿|3 Wzs-,qRrB8?ܸ3sz疯ɓ%.js w+?~_ygKrɲBC&%M`'VۦgkS˱M:oo9?oynZk&4 ffAĽ=$IPk)TUy3*@b9r+}linerm{wtAfc!Rf6MZl֓~UEv V[w,N.ArGRL2qC^:h##spRʪ@oV1bBFJX E ,#]WčΟ/{~~ 1 Th$&cv5ߌ4;Oݨ]_-8ZjM4+ŋݿn?ʯ(tmoxOG~jc [`jm;lgψϝ|sbEB1w3xAfc;gTb}EjyV'[w *S%D1 ieuFNmD94¼应l[ZQ=a,YUYke?i&"L8*X |sDW f7?= [WV݇VǺR|;(j-3f^o*+*t1#5*g]P5C^ eO@Їi&`jj=\~;S"՟~5YC1N`]Ձ"=/ #č~onj=?٣۰ y7oیvpHmy|R]Gf{Bǯ{$vIOjO}| #fnGy/RU>Y7䍿eC_%c/2x7N81\mT56)K:yg!ɱSI[;u12#'7h޸o"!TkXNJgUrEV#^l_OMpwnf"taHb͹ɗ>#[C/q:,>@)2HQ̆W.)>CV)Vԩe=8 E(4XTP5%B1 .XbSbU Xx)Yɸ,) Lx*H>UB_׮JAfmzWԮO\YX*\Ղ歊a̸u,Dz|=Y'+LtQp i$0C}gXEZ:[ p>fpA @\hfkJ*(e,s sg0-dJm= jcI#\Dt;P$0JFbW<|BatN(ȪppNy2WoU\=^>x;;vX~nǻGy$><~׿Xz5+VN]L[-ce?{K{Pں]dgVs걚wז<BC ֌X&)uVD+š2Oɿ9ը BtVhC+YZCU"SFR i@˾3s"f.~d&U' _ֵWMj`b j̈ \w{vAYe;JOAuYy6!7[>v4LMVǫxK!%ERŅ E6Q  gf"8P;U]DQWRՆ^L' & MAfI11!&1d4@can„ک|q!nwyDO\nѭpyrkxS7v[У:u%^vf奻l/liy}"ڏc%f}.B $d sњW{[*2TW 05Z&ԲdA!Ьiݪ<ݸ}f}m]G(樈Zzx.U }\EP@-wGi޵W\ev0@;S̞嫹+#=dcճl0rMn')#=xUch9kB6|Sp_\H)Xm0ӕb1z(%P#ET }PÅ}.!2 M%!*-)sad{ULV,-@}*X#ULJX%V-lRbC+54LeeDYlȢXܞLҭA 'm2c"VѺMlw_s[ᮻP\(dKOj+[|c8*"qp {?Ϣvx=V0\HY$Ts}5S 3TXX.cqȐěngl'E`ǎv!6I{VJ2WoURjav쳔ғ=RIhsc9Y"O9@Zs?Uc;s 1ȼL2P#?y2FFC@R8,&@JEŠ_\D|MiJ D$&)tAGJjX&͘]BfZ@H4"Fl՚ ,֔ AfDN1EvM2Yf)mFvwΟ#3Ӗm:;{0=93qL mD, IDAT0S9~`L|tuNh6j-,&~'R08f7xE)K`ޛ7XURʲї7۹(画%b*w_;یIlģf:4*(o݁6XOSaT eDeIX"6O4L֚ x"̜ټխtmfDb3ء'D}mj"6Y-VB7R4Sa5B2m" PQCHSd@q( 65U,s0P$spPI#DmJi)\ VE0YUln=MF7Z3Bϝ5yr%j_FJjV,1I:0"B@ʚynuQengieiΣUYZ"Y˹&_%;j<]$ \EH}8oLu*>Yn٪D D- mn_7?kp2Q;vwij)`sTH) {_˶Ƙs}(nĭ}Wi[!@A!D"%64@"LI BB4 )$$:4A '$u:K[Guךcq|| EZs9,~0ź,r WmMkδG;#WhYZeܬ H9z=2$ABk*3h*J%}R /L)& [Ax)[oX @Oj4DE6`:X3™p5B@%K*y55;%5PFl,_k]>QkϾOg],^'ru\QT?,G)d2CdBN>5y3Jxkn[ {9)FMj5OScڰ))z،^b&iqAS20`:&N)NfN-Sm&QUYq *Ao* {oV/U]nNGsFT#CVkuun7Aat:(erS2$n1FˆIU-P_|^JMcI_riH&F/nxp<wh۶zNM×3rzL<g7u#Y䀉" Kj;[FcKx!߰݉t%ձietmwqR¶J=!\xsYo;*&P 0%/ m)N D 7r3Po51Eqra37rNIȰ"0y$+{*>}xnj$E%78NW XZzqyk;̤xukUx-\8 -fnkѽBZ0w޼r+o(- Y)+ɛ6 /t[nf\r/7WbzrAz"lc iprbzz؎v\VMxBi6=uO?$'NAp+3T545{+՛%_~?TeWuuw~wyѽXb>WJ' ν'vw _7b}unvWK}'wչ_+w w_]hYJ\Y´O4TyP6Ӛ̛)}i k_Gn(,~* ^:1&@p;p-_GֳgP]h9 L^#v{o@d[2ͭ8ܴe$+J+MEAOfp0-[::1"UY;v;k[aьn 2K2SDmN9Y%" nӦfJݬ 'M ILӶrNC٭Ə>/()UvQ 75Җ , >e;v# 2%|b9P"{%';HhU}ⲩ;;"iO deVJ!Vx*`}֪Z4̝Nk?7NFԉSTHXUfT3,Ic>ujbMg~յ+a-{Z)QU5ȐLͱc'sU@ k.l   yRl -`pLMkm;8$dߓ ["iV5&tuJP)3Fs YCUALY3CjPMPl9fXrcwTV>%Q6aVJͨ3Q$N QSrzP X`:-2I]>%qXoO=X7i#jnnێl!Lt_c,#l/ں5K,WmG?FpWbiev޿dIkR%BŊ,`HjTYI'|y/b=2X djP%qT"gA [ jnNM6Tbr-MfjnM XWȡ,UHT͝++jrMS)3MgG(sAJTɉ@Y\s纹j֫CةD 9&=KbH-'Rr5lf]mql:r.}/B5GXAl!U) +3ݛ0EtӘA9օ0.a=htޱJm3A1P3)77VlUUsP0;Q jNN5_5֭|C)tVn-|f?ݿwY 7:Q"5EkD1EȹfY,NzCS5ħp4p?pSϯUޖWqU1 k_ϟ5#4J/rZ_Z[R af0 Kh3WX{23yn+Sg;e4JB"r+6LKquXTy +r?!lW,Q#[sGм y.n}>{a%e,G]EަȴhLSOHDpfhq,QY;+Dcdҽ vSmGXq-^uwsAκR, q8}juz]ywML1%ƶ]7b:C*kvNg"kM YS1u`nFJAiFvf N)P!%v~ t|s ( Vu0&/_5'SAww+1W_׹_?7/^j58Bvm WhOƪU1`ShaxͶNb&6A#AK9aaBRdҨT*ZB*ųNCY9(V4ǏDDlN3Xe1ɳ%bҨќmOnidOG;ՌzdUnqHXr7xt!M$z w5D7WKڙ<+ƔQ4(Um{/g$c;+99T3=!nsњOkhݦWn19MUNn)B,ĩR!ep#;^/9yy:6*%+XI* d|yRr-hp e{|?04GdNT5P&d( rj$ocYo!jypVՈm-~vaO}?1]{\#:/Z'PNYaƉ>ʄ:RT)[4LYm3Ii"hRFzB#C4Ӫ9h*i ! d ['z_,c䮝5sr805rAO?گ|ǍEQFvf$m iqgE:BӪy_zC@(3T3b*.&>Uw]P`g1J J̙۠Rh Iu`+@R%&󥲼"U(l޳N𥚮nFy; /7^Ҩp{q{)BА[osStGeNM9CPjB-"4[ma^^%r[ #Q/=3q_޹XMP|VXf0 UIƴw'_泗bwOΒӼY @dɭeѦJi+cVM;@iS$T{O"]YP)kk&IxK$k"Xt\6A 97g|R% j>iA7k#EŚucnB`xgat IDATZ;![5{'Fe)j R`pyf''?sa{Ti&Tt4NcfxvW0<.CCjR )k¦sSrXs7P(ˡ|-?a^5L`g@8\mQV@&壏-'er1OD6t"Z`ߟ-`ee r`jٚ)&@FiCو lhI1h5F)?{}:lGdF063Rӎ؜0:b- K[6.hnmX*|qJu\;ƌPք0*\B ҽ ʤU#U"KeLiy,"6_2j{7g32Dk̪[-#3SPc8ZPZG8i.j[g\)E㴭s0碩ʛP4Td */o=yFBB.nأ7D?nn9iP Wpw//x8|JH0j3zd.(eɽM-ݡ008[V if' 3nn9RvBlW'_a5";fMø.{ ]|ѱp:"Kc[|1`o]~c N4`B4R$qh3#AdUvvMSRB}ZdfJֺMmiҭY|y^EYFNSs{xv[)/b\h ҵAʽ۲Ob_2+ S7\[VsRsSgJI`ۉf Z$t$dGV?dÚ'# gKd!>U68 p5Xd͍[MRՐo+*Jɜr|YQ8% o=ZV6MͱlɾvLY̒hrDQ(,ݷL< e{nM)qF+B`3V%<'rtRkHD``Tye7W|~ ü` إqpؖeogVS n={meltXnuۗhqAVʁQ4Ul<^*N˹v1ڬ&L6;u#h8sB8yNÈ536x1tXm¬TLt\ rX'qƺû.-w{[R<9l:LP榘jY4L,@7/fnRxsH8 W>ɳ&}*1phl1ܻVfp N5j ࡸS9,'zZy T79Nl3hh3ɥpJ0zXhKZE ēc5gVQK3IBUheq=~/oP #2Jgsj&hh0L5fwLcQU2bt?y/* TUEr!t`28ϻ2Wknu 3:5fp[5 Wg gPV%)IP>F% PUm4j*g3WW77Qnk`8%(fL5 f-˃p#RSEy5 M2}J6C"Ɖ&M姈4h< pqz>62g޼SzNέ&WpDds8׫k/ILۡ\vb *,v70oVۻ}ܧ,&g.)3R~\?75} u볠NJc[wSʹ B$eOY' #B(ЈP5_ cDY#KyR4 ɸg.o lչ`˺mݣ\GU 1 >u?L[K%eshͧ86 ,Ys|$swϞo~4ՊXJam_늖UG,![usS[l m e牽u+8s1g9a40+Q"6Mm o0=' rDI2򤔩,pv?ZmפR^-3qӳ"lu6kqi&4@35f**HF4F[ohʘҡ)E]A2:r35'LۯuYz1k>TI'(HD[,$$.X% YdAA(vd)2p+D0Ƙƕ8nUWq֜clik}eJaiB.I=I D,$"B1b):v|"MTo\?WTX$qGwbI9eu3>H *{ I#S3I 7Px Ir7+J${?@޵8d?u0lGK0 \y#Ɩ)-Vbc+7޲HzE>tVb(. 7(x0ɷsTGFw>/I!bf$" }3ۨdDw*2(FP&sZ2NL2U'4 ـ+00TΚaT]A,b  MA#dS3%AT, Dh&E='o}_ί RVG>*"= _,#)mo #H&m&>0KF'qQYwY9D SŞ;'!H θKf! B{)_qe70Rf Ih<[dQL<;7X(X(`PAf (t)o>b1ݔaA"?|{}ww\ӌin( =dB~qHQf%i` (vPI,{$FY"G213SZOOds EGTeN@'F^F 2\QD™vw(δDHdnCxOD:",r'/߮:zzu%*R8`c +3ùD@dx(@}k'pD^4M@d E(Q2̝s\:iGT$$)TT9aD0TE$<}l+Ȟ|Ar%"dƆ`qd"LAT@QEl̪_|?̗͸yR|DbKcfA"de;f“Tawx#H~XDr9w7կ~߹* Z3HB b ?=1D+`Z(E33$d5Ioy=%]7ߠ‘{`L~|.7U1ƹj"H,=CZc!^thI~86JLYJljnNP!-9ؽCvKoگewJX/;FX~)FO_eR?yY*0úZ_cz+(uB(# *3{l=ږ|8+Bd ɻMꀨ $D'rx2 a>W,@ĺCxڥ޻ 1uN x*fYk@@0t~>tud%2$;A/ˣ掬;Nm' b)!LR)Ip=V@P~VF:%S(,Vag0l7B(LQ<$!6.[{Bc%`ZꗿˋO2B*[ߨ ̋Qؗ>0)XleyI詨k: ^ݔ+pd8u=2sn”A\8 ^D7ܤS 9AĈ% wr;~?/vpʻ?x;}1g=ӈRk>O7)C;cID9[gEI $9"T8"W? !* 1l&l8! l=B*ۚi%*&M6vPA C.{'hqWq͘3R(:( gථ,!0=R1A|oߝvDH޿3V7 |KU5 SxU%;Ck:,r8P]_ 2-L&1D,i\$);-G*138|73P0<kO3gO? Nw׿3Nx)d[@~'x$ wVg<k}RA_md9z|oE%k?Gɖ_,Iw=Dv`zp+yGDXfHM`~姷H0MZ[ϙ6gڗ5]^$+ufU cp$.iBa6 ,]6YChHBqh v3FPgϟId_Tշ$_;|[lAgO;?_gy!l@H4߲GOm3e"8RٳpBU =KXwX-]\ zu0'A=C 2U2.ka`.7*S^k΀Gzod)rD4\k L%3R{,D]2x>gO򝷱 F= 3v"K-W```"Ha֊&[ s?GHdFE8S x_%cdms>-"sU還%E#;:2dA4Cl[+>w#ĀA,(4W:x@L=fLR2-8={~HFtXÍU&"nͬ\E/ǐ,t9 d!]1v$>% BH $2 t{1)Q4PwQKƆ.7tiI&V\&F oIr{|'wТJa`@)\Sz&0`/ַka#)A2aGkVpzg IDATDU) 3=UehaZL1 B?Q2:su-3Oux` V`"B mgF`DaMSá{ƿBljz'BAe,ˌ*R5;"r@֌][tNCMC""<6x⛮ɐo}/{ `b0qfpѳ'>ʉ@$& IAx`\isTm,\2" J^uJNJR0uI!P6K]0_LXT]XD8a5(Z:< 1R‹y*ZiM뙍 CF0 9a5%|$ Ȕ8{qFTL[LGr^rr"`Iyxmt!Ѷ 63.LmDDrA5޸:wzIb'dȻJHֻYç@R $b2E1EUKO;6!3D`6}=_wx&eD8-9k3d QGf $3{26ГE LTq ғUð/|gp2Au!ө[>rJ ]*2SL\9 ;]z΀)_F=swEƱbkI !&X(cJ?9nf!-d Pe0( bTo(TWp SxD mp@=D+^3 RIv4okײIlCEhRK| TCzD&wEDl1HAF0O>dJk6Q=2*K1ahkcӀi2wʢ<կRh1"x/@ٻ'a!EA{&i |Þ3÷{b6`r6>_C LLR|mh{q3 Js :tFֵ,(mysR#`Ps*Rkt#"IiAb>"eb:'f);`13FVE׭.Sw9}u _{z;+nD%|sHcBZںrU.rY-`f384ykv\k9TB7DHoG *ҟ_|4VmCP |5fݓ} 9$)s# H X`}*d7r$/p0_3,{%`" :쬢Lg>B5eOߣɥB;f]e7[勴P;ܶr8 tcR0sP)ZeZLP]V }mS(&M0}t"Su:Fwp*S,47U)3H8;ͬI1Y့Y &BpS'4gSTpz鱾al'x)R_W eELa7$30Ϲ"0CDpOs&`,gH =WRQ9>}e_[:X[Yϯ)#/>/>:X\|<&e33 o{;9aܞ<&VK-%lYa`OU=<,,<] n0`tRo~YlS’ [ 3?<7xyeX0s)E`$L0Ekמ+L X6 6R,F T16OA="`#_M1Է*RHt{4nRT ((b Ri D D0# Qd- ۜ;L䅫,۾*q_7uI'aM]9SwޘZIA\YY%1.>72Y (_ DXB/g}]ԩR8P8tw &u%=@z]$$REUtO9bϱ3o_L˔V_⦅PwK uhҺ@eЩ^WC'[|=ah,{( ]clX TY YB8@T5FVEf-Fƒ!+KF\RyIt#Qҙ~g#\AwmFa\5\[?M޶~08P(5ت־vO}:X3#2a׮ƽ STO[)0(#P:c\_³G=LL*@ ,2ѬWtf!#Rdv/R`1qfu#siVRNKPBݷ%Je`Ax_6R%NG&, 4]49-zkaf(RbtIn+u0jWf%\Ne`-W牪8o&I3n"tHZJ˂bb%,uEA sC\FP!!}G*Ỉ]E3 DD929weݵNBʶ]~=Rnۘ(c4 f:O#E"UYoUgƺteɵwօN-H9Rrz<_o="/=_nOA[U(41E-/70io֗a5Z=^-n'dZ"GpqN݌j&k]jr5. ۓVjҔf!i ZXkAЂ6qo+saa $}r)ǫm:C"XCC=x;ZkK`UYVX`Ͻ~>pǓ{_ٿW/RͿޫ팩jR֗~7~g{{LS?g͟>;"TI<2Tdka>|vPެq  jNd>̇+!8E[0ӛT5m hr2EQAvٷGGOsx~p N4J$h\nT⥔:JdT2N7'$u",{p^mmkze*vRY)LYâB ͖JET[jMCRgc' :q 9u!zI2Loz.Xd>m4(: kvY;DtܜNӉ nKwNpvvV-=CdK)R5ۿ%%ͣk}?Y ~绀''0gKc04@z"$$>\Ad\_:RP$ZCSYM,>ӱ&,2a4*tccO\*;\%,QА8a`sgY>,Ɛ\$xL7 qA@ܒiF'd;h>2~s+S^!9A OkPl+;~<2&0rl$Cq6kɭ`+ƣ&UqAC,e!]/Yul Ze^J"u\dRf=_-|%-Xj%o K]wLŅ.z&R9&CܔZN1 ,u)i%ݜ5(Ug̷Vj12{ V*%F:,Z j6;T0 k(|?'3בanK͕w!Dhr&bx `$X!E9"xbf/o 2ٻAc#ynDER\h)(7<4 ~lg.J&Avb;fN Z 3Nϛ+ -JbN]MR˅CibI)a'Z\ZX7O{0+Dぁغdnֶy# 22'Ng ȁhS:`Bmx`#ZBWݗXN^Q.I/'oa`o|~δ/y[{E0gtBs8 bo8;7^[ca/Y* !q _:tͲ,wKfUuZks dc~d ƌ*=i /hUIbh,gr X}Oޠaٶun"m0Qi2{8nŐukq\Y,-x297c,*>eY2F[˩ Dȩ9v(;X4[.v7ˈBiڇo--T9iQJ,mkw:^ x#u]c b0eUB.EBkf  mzoQbUzjϲn0sdpR['\=rgSh3sUL""j Hd͓(2\0)LJ2Q @Ůl YAZ >n\}YP@H#(P"̃ "IfDZU\ҸB bZ\gß;qJzFd&"31U ҧ~]&_lH)7 0uK pOHKάTT>^NA>j]: iK܆b ]ʭ*Wv4}y9xӌ)7wvk.>zGg>?e'wlW@ɾlsedp8 nzb%Z%WnnecSn@PZ=P[c'UF\ή PAl0I?4^NY()zPzJuȲƽ;GPs7l5ybOJvbev@yH, L'.!—q} <((yAY@k?1nƲ)qe*YTӓ<ܳ@EG<7n#I MF=r:ײv<jY8) sҟ9Mc3=XZ4 NՓ9"ۊ}5 Q $FU$ f5 1t%Kɲ1C-C*@2to>x7or;S$%?k5nl4mD뼾o&ޱ;7/LsiUWLT v;@)jG; KyyAڪ0`i'%_y@!{VHax~d&m{V.HtT ]뗊NbfX ݩ)Td4Z8qcy&\UX#p#1'cH2pj:*:y(qk ƫe.X8! ]` qf$oCuVM}] LR  xj<,-RuњґnSA G q:7*QIHJ㾗NnL@(uo8 kKm *jDTL!c)LmUfz&x~wp-li)_: i[pSeF=#]Y9)/^O `PN*VZךaˉר0m pku덗|P v˕aN[idt,x?0"K+)SDyIdmo˩[}})K0f2fiB Yl Ka$ M> ]OdWꨃeU|v AR6yT#K >>1Ϋzֱ 擂=_+X[Ky;xQNbm6PZ\Db=WĨ*&DMQpR%'^®9vo U$JH@I4޿kٱa(w!L> Q6@ !Ea͏q7} W"{Ҿ a=¥A)DĒ,<6޽SP],s1ȇyiP)Ԥ:R4(m *=F7ge0nn\0uqeYcȺfq@6nV|1̤ݲ=>e M;Fu1)p%I)sP?[8s6U1G IDAT^ИVdm{LAHC.bbYƱ&m{:AW:Xi<='W?06 ZLKȄ0IT^]Q B;˨.q ,O%I>p*tb*S:eED}ܖ6K`$.PL>ԵmG7FF(%T$ 9bŘkLR)< =#s07$T0&ډ[mE׮ө1-X`wKF&Оc'4(N°^HޖG,{"3hZAp^o"J$YHOAAqA~d $UNpn@SJr`&yN",n0 !P>k6[[>8bviQy~iʊsR3 J>dmtfM?G< Ht[f"{jUxiq۲pdTGU$LK;|fIMΙ%"FV$UY(>xEkBBK՝Ťԇ?AƇp *%-j"l7~.FIa&C 7?:5:\,Jܛb$B[}ڷoYP ŋ ,^ZWi'tM% ^ϓV!D3[_ i\E'Euh/k,m)mB,&D_T5Y(.ڞ<TV1EY)ӿ4P* -'P#t4;1e+C ,Xڤܹ"^o hf.mJE4Q``nk S]cRH(F:Dp&E|? PW)kixKz>Dt(Lĸ/KRnMB5cAX;&O֟޴ HeF{#.sɏQ‹ }@2 @!wwVE?6JJTsVuWzpBQD5 RL b|iJyW0qWE3ѿ ؤ^ WZ@UŘ3]DX6 քAy9?]ϼEoK1hBa΢ Oh]B^ Qmd⮰E|%lWT"Q-??q Mǫb j2"y]HI fiX>f[ԅJj96m" ~[USrs*n7.ZP҅7(pKJ4tM*UaN '2K/۱tYu@,҉z{XJI$+q 4teYOsG[VI_{K݋# EE9(}طe;^@Ǖ ER\ըQr>tGe UeJP[OIj~ 9/83mJU0țca zJ/-wstG'J9 g`SO ҦK+_n,t~Ou0QQN @[YU`?{? R!|z1"5%De]@r!s+byP,^e}Sabd5g 3R&Oe wn<+;+=qo)*Jv~ϲ=1[WX]+]+UX@$ĘѥI/{Du,K xKK]X"vGEYVLlWh[y/Il'쇗oHPLH(BJ{7w?CvCd;N;Oz

    wV欁Z"ngbz;}ߒDQy0F HJA"3,ObFΗ(gQ.:}*%|F߭^q0A1Yg 3.64jAh="Dd*E1.ɬTwi^!La+[ШrEJk' y=˃D7)Anr YNGUmǭЇgFo}^i_-=7wKU"b>7E!UTKoq_^. BX. #)Ada" *~~2~E򨕛<>}Z|zJ!JVip+?>k=?V(V8Q CNoE>=yS*2ݥUp]bw/H,((AzQ[1MuOD%g*KD Iq1 w- +h݇9*SUGyNUcY7c-%1B'$Z̈́8L/ Aױ,'& 3ڴÇpA_`*) /4bq|t;xѱV\<|vN콮vTWp[4]~ՙwQRwS218J/:!"3Gd2R^!vHӂ'.OM ^v0*zso|_'O>1eUFp pm [4".NE{矽7$ 'k\ '7ollGxH{p?"hٗ;&ix*<+P&H<Ȣ; &ܩ\i*, a"f,DL"(fMZVޅ*HȅEJJZ,I$I1E*tRz}Uu6D"#<#nG G]TpTUnB1<F-}Xkw"2Yb׿/ųf$ڗ%ˈWVv#UI9}VT[{kRb-kE{,d_!&=ㆶMV%C6eFE(:&2ΤID\j"o/\sg~Ԛ*g).Rm}^ep v>|}V+QT,b5@%(SAVx4{"EfF#jt󫑬6oze乷mYT3e +*,t?? +ǕVy_?~44(, 'k6A+[9d!$g3UQ2iFR *R2.0%=yiD+" *)=2mD_ӳpWA\|GJQR(:͔ Q̈&YFQF2UѢą&$%%F{F UqfZKp.&b"L*jo7TRi(TfQ^aYDZlFZ̏D;`ҘSic`'ޏz!KΕA2! ͩFɥ3.Y(U ))>XB(9l4pj*t̔Z_#"4cvsvFYyե|*[LeG"n.) 8O&vEJ9K%}C̙U%/ʬPA1YD[ϩU$o'z9Y ~ˢR{ذ" cFff"9=X˭|teU @E{sU9(28y"(FϛNL@9( r$b ҄-D=RBeaB PTjP_^9T /z6ިZ𲼭d3[uZnkk2cv]WJ%~R"7Fk,.|'_֜KZVXNq NPBȋԓ V)EDW|(2lWPN5`dNkz'V$}i`n P yn\,jt{A3 <%JlIٸ+=Q)_#,s8O`0}޿CFqCt`G;ɿ,3DX`Tʩ8AB( A(B#bbwN*`dQjBUfE8*#< $JF (Ʋ.\ 3qq 93}Y2XQt_D6B4"6 3@PE}$Rc+oE@j0"Ռ; AApTY8'Ex[ ߉ˉHu!43TYSQhH`]̭2a:+9/Χ'I#R(oUA ZYWeZݧ.gq$B*ȤD*ܽJKCCE-Z, -czehH+aPd&\i>kf,\7>$}DlY8Iv .?~;ޏ.nIeRk-mηڲ:CMUE6<|"܊IJ$`,YXD+BAJT\mY(_kμ*)ALj3+~P)r/xOde!Ӝ9ʪ0#$*̒GVY(&Z\ED0Qiy~PAb~ҹ AyEg=+rintX ӏD)q?\.dpiG>$Es[ʯ uJ,D僧*$(x)1amqV*LTki7|=Ht*\> #&4ԑWJuYk'czA3&XTAy½+I78`bkko3QǤ*5e9Fɂު5ί_w٣P̔, ) $JV'^$R/qV}%dU]*pYFQVZ1 #ا31k* 0r`FNQMBDݗLfJxܧXPE)Pn=Y#@.Piq18)"#ogpOMmGsFZ{gfUqte!bY  >xAͧOVeV!xF[?d?[]۫eN]Xr*L&reXYfS*(7t9OO7gj%׎u8ԶMPY4$i.i:yƭs^{E}V,R_cXUXC :>r5ՐRW>4-r5r[ 헧j0lb-`<ֿ{cw9 ڐ?8(rFX$ /#Y*ke*kdQ}wA4+!4<Ռ5e={s3X@&7D`[%p+szۚ,nZ`< Fz߬ssQLoݠU9VD߹Eٷr͈U/lͩ0?cƆ{}[Oc&M^FA/TOf9V$[>dhW`1Vpa=ruwN#^NNUj&>o+yf]4{whxդu,Ns~> ;/e-qaPt' FZfٜssb_kW.{xѼ= .C63SPrTL}1KLgc-IDAT%uweU\AV,f3/ FSyTJДI$L2Wf!kPeRǜ+NgW_V>py}|sV:S]5wdغ)J:Vz~:F2(h|㋏ɚ%'թZԚߎ7k>7:+'mݛyXQ^O-yj\NԽT}L&F߾ hm̒Q5ord뢌a+7F۴R1ryLJ|q*Ա^,9%z^o4^!ܮoim_~m}vc. 5Cƒ0t8BJ=(Z*IH3TqARiHA,F/,i֊AJᨬM@-RxךYaZWbIwR(/ *Pd.cv>>\Ӆ9:lx--m[ϩC f߾~ Tc~_mCl`ˆZoRyl9m΄9 vMC,>[ޯqy7,XW৕WPoj]m>iR0ZoHM`˷c"&AXkzUѩxq6z`dΉ5sZӬuR\UO~hߺݙ- =nwO~ޮe-8m}Y;[8V@PQd8y`Xb pb¸4ݬRcN %(V*,+)۬bYՔ, ZlTN VZk, RIX%D<$ͅ@_\}5IENDB`lmms-1.1.3/plugins/lb302/lb302.cpp000066400000000000000000000640511247673406200163360ustar00rootroot00000000000000/* * lb302.cpp - implementation of class lb302 which is a bass synth attempting * to emulate the Roland TB303 bass synth * * Copyright (c) 2006-2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * lb302FilterIIR2 is based on the gsyn filter code by Andy Sloane. * * lb302Filter3Pole is based on the TB303 instrument written by * Josep M Comajuncosas for the CSounds library * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lb302.h" #include "automatable_button.h" #include "engine.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "Oscillator.h" #include "pixmap_button.h" #include "templates.h" #include "tooltip.h" #include "BandLimitedWave.h" #include "embed.cpp" #include "moc_lb302.cxx" // Envelope Recalculation period #define ENVINC 64 // // New config // #define LB_24_IGNORE_ENVELOPE #define LB_FILTERED //#define LB_DECAY //#define LB_24_RES_TRICK #define LB_DIST_RATIO 4.0 #define LB_24_VOL_ADJUST 3.0 //#define LB_DECAY_NOTES #define LB_DEBUG #ifdef LB_DEBUG #include #endif // // Old config // //#define engine::mixer()->processingSampleRate() 44100.0f extern "C" { Plugin::Descriptor PLUGIN_EXPORT lb302_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "LB302", QT_TRANSLATE_NOOP( "pluginBrowser", "Incomplete monophonic imitation tb303" ), "Paul Giblock ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL }; } // // lb302Filter // lb302Filter::lb302Filter(lb302FilterKnobState* p_fs) : fs(p_fs), vcf_c0(0), vcf_e0(0), vcf_e1(0) { }; void lb302Filter::recalc() { vcf_e1 = exp(6.109 + 1.5876*(fs->envmod) + 2.1553*(fs->cutoff) - 1.2*(1.0-(fs->reso))); vcf_e0 = exp(5.613 - 0.8*(fs->envmod) + 2.1553*(fs->cutoff) - 0.7696*(1.0-(fs->reso))); vcf_e0*=M_PI/engine::mixer()->processingSampleRate(); vcf_e1*=M_PI/engine::mixer()->processingSampleRate(); vcf_e1 -= vcf_e0; vcf_rescoeff = exp(-1.20 + 3.455*(fs->reso)); }; void lb302Filter::envRecalc() { vcf_c0 *= fs->envdecay; // Filter Decay. vcf_decay is adjusted for Hz and ENVINC // vcf_rescoeff = exp(-1.20 + 3.455*(fs->reso)); moved above }; void lb302Filter::playNote() { vcf_c0 = vcf_e1; } // // lb302FilterIIR2 // lb302FilterIIR2::lb302FilterIIR2(lb302FilterKnobState* p_fs) : lb302Filter(p_fs), vcf_d1(0), vcf_d2(0), vcf_a(0), vcf_b(0), vcf_c(1) { m_dist = new DspEffectLibrary::Distortion( 1.0, 1.0f); }; lb302FilterIIR2::~lb302FilterIIR2() { delete m_dist; } void lb302FilterIIR2::recalc() { lb302Filter::recalc(); //m_dist->setThreshold(0.5+(fs->dist*2.0)); m_dist->setThreshold(fs->dist*75.0); }; void lb302FilterIIR2::envRecalc() { float k, w; lb302Filter::envRecalc(); w = vcf_e0 + vcf_c0; // e0 is adjusted for Hz and doesn't need ENVINC k = exp(-w/vcf_rescoeff); // Does this mean c0 is inheritantly? vcf_a = 2.0*cos(2.0*w) * k; vcf_b = -k*k; vcf_c = 1.0 - vcf_a - vcf_b; } float lb302FilterIIR2::process(const float& samp) { float ret = vcf_a*vcf_d1 + vcf_b*vcf_d2 + vcf_c*samp; // Delayed samples for filter vcf_d2 = vcf_d1; vcf_d1 = ret; if(fs->dist > 0) ret=m_dist->nextSample(ret); // output = IIR2 + dry return ret; } // // lb302Filter3Pole // lb302Filter3Pole::lb302Filter3Pole(lb302FilterKnobState *p_fs) : lb302Filter(p_fs), ay1(0), ay2(0), aout(0), lastin(0) { }; void lb302Filter3Pole::recalc() { // DO NOT CALL BASE CLASS vcf_e0 = 0.000001; vcf_e1 = 1.0; } // TODO: Try using k instead of vcf_reso void lb302Filter3Pole::envRecalc() { float w,k; float kfco; lb302Filter::envRecalc(); // e0 is adjusted for Hz and doesn't need ENVINC w = vcf_e0 + vcf_c0; k = (fs->cutoff > 0.975)?0.975:fs->cutoff; kfco = 50.f + (k)*((2300.f-1600.f*(fs->envmod))+(w) * (700.f+1500.f*(k)+(1500.f+(k)*(engine::mixer()->processingSampleRate()/2.f-6000.f)) * (fs->envmod)) ); //+iacc*(.3+.7*kfco*kenvmod)*kaccent*kaccurve*2000 #ifdef LB_24_IGNORE_ENVELOPE // kfcn = fs->cutoff; kfcn = 2.0 * kfco / engine::mixer()->processingSampleRate(); #else kfcn = w; #endif kp = ((-2.7528*kfcn + 3.0429)*kfcn + 1.718)*kfcn - 0.9984; kp1 = kp+1.0; kp1h = 0.5*kp1; #ifdef LB_24_RES_TRICK k = exp(-w/vcf_rescoeff); kres = (((k))) * (((-2.7079*kp1 + 10.963)*kp1 - 14.934)*kp1 + 8.4974); #else kres = (((fs->reso))) * (((-2.7079*kp1 + 10.963)*kp1 - 14.934)*kp1 + 8.4974); #endif value = 1.0+( (fs->dist) *(1.5 + 2.0*kres*(1.0-kfcn))); // ENVMOD was DIST } float lb302Filter3Pole::process(const float& samp) { float ax1 = lastin; float ay11 = ay1; float ay31 = ay2; lastin = (samp) - tanh(kres*aout); ay1 = kp1h * (lastin+ax1) - kp*ay1; ay2 = kp1h * (ay1 + ay11) - kp*ay2; aout = kp1h * (ay2 + ay31) - kp*aout; return tanh(aout*value)*LB_24_VOL_ADJUST/(1.0+fs->dist); } // // LBSynth // lb302Synth::lb302Synth( InstrumentTrack * _instrumentTrack ) : Instrument( _instrumentTrack, &lb302_plugin_descriptor ), vcf_cut_knob( 0.75f, 0.0f, 1.5f, 0.005f, this, tr( "VCF Cutoff Frequency" ) ), vcf_res_knob( 0.75f, 0.0f, 1.25f, 0.005f, this, tr( "VCF Resonance" ) ), vcf_mod_knob( 0.1f, 0.0f, 1.0f, 0.005f, this, tr( "VCF Envelope Mod" ) ), vcf_dec_knob( 0.1f, 0.0f, 1.0f, 0.005f, this, tr( "VCF Envelope Decay" ) ), dist_knob( 0.0f, 0.0f, 1.0f, 0.01f, this, tr( "Distortion" ) ), wave_shape( 8.0f, 0.0f, 11.0f, this, tr( "Waveform" ) ), slide_dec_knob( 0.6f, 0.0f, 1.0f, 0.005f, this, tr( "Slide Decay" ) ), slideToggle( false, this, tr( "Slide" ) ), accentToggle( false, this, tr( "Accent" ) ), deadToggle( false, this, tr( "Dead" ) ), db24Toggle( false, this, tr( "24dB/oct Filter" ) ) { connect( engine::mixer(), SIGNAL( sampleRateChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_cut_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_res_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_mod_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_dec_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &db24Toggle, SIGNAL( dataChanged( ) ), this, SLOT ( db24Toggled( ) ) ); connect( &dist_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ))); // SYNTH vco_inc = 0.0; vco_c = 0; vco_k = 0; vco_slide = 0; vco_slideinc = 0; vco_slidebase = 0; fs.cutoff = 0; fs.envmod = 0; fs.reso = 0; fs.envdecay = 0; fs.dist = 0; vcf_envpos = ENVINC; // Start VCA on an attack. vca_mode = 3; vca_a = 0; //vca_attack = 1.0 - 0.94406088; vca_attack = 1.0 - 0.96406088; vca_decay = 0.99897516; vco_shape = BL_SAWTOOTH; // Experimenting with a0 between original (0.5) and 1.0 vca_a0 = 0.5; vca_a = 9; vca_mode = 3; vcfs[0] = new lb302FilterIIR2(&fs); vcfs[1] = new lb302Filter3Pole(&fs); db24Toggled(); sample_cnt = 0; release_frame = 0; catch_frame = 0; catch_decay = 0; last_offset = 0; new_freq = false; filterChanged(); InstrumentPlayHandle * iph = new InstrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); } lb302Synth::~lb302Synth() { for (int i=0; iprocessingSampleRate(); // d *= smpl rate fs.envdecay = pow(0.1, 1.0/d * ENVINC); // decay is 0.1 to the 1/d * ENVINC // vcf_envdecay is now adjusted for both // sampling rate and ENVINC recalcFilter(); } void lb302Synth::db24Toggled() { vcf = vcfs[db24Toggle.value()]; // These recalcFilter calls might suck recalcFilter(); } QString lb302Synth::nodeName() const { return( lb302_plugin_descriptor.name ); } // OBSOLETE. Break apart once we get Q_OBJECT to work. >:[ void lb302Synth::recalcFilter() { vcf->recalc(); // THIS IS OLD 3pole/24dB code, I may reintegrate it. Don't need it // right now. Should be toggled by LB_24_RES_TRICK at the moment. /*kfcn = 2.0 * (((vcf_cutoff*3000))) / engine::mixer()->processingSampleRate(); kp = ((-2.7528*kfcn + 3.0429)*kfcn + 1.718)*kfcn - 0.9984; kp1 = kp+1.0; kp1h = 0.5*kp1; kres = (((vcf_reso))) * (((-2.7079*kp1 + 10.963)*kp1 - 14.934)*kp1 + 8.4974); value = 1.0+( (((0))) *(1.5 + 2.0*kres*(1.0-kfcn))); // ENVMOD was DIST*/ vcf_envpos = ENVINC; // Trigger filter update in process() } inline int MIN(int a, int b) { return (aprocessingSampleRate(); // TODO: Use actual sampling rate. } int lb302Synth::process(sampleFrame *outbuf, const int size) { const float sampleRatio = 44100.f / engine::mixer()->processingSampleRate(); float w; float samp; // Hold on to the current VCF, and use it throughout this period lb302Filter *filter = vcf; if( release_frame == 0 || ! m_playingNote ) { vca_mode = 1; } if( new_freq ) { //printf(" playing new note..\n"); lb302Note note; note.vco_inc = GET_INC( true_freq ); note.dead = deadToggle.value(); initNote(¬e); new_freq = false; } // TODO: NORMAL RELEASE // vca_mode = 1; for( int i=0; i= release_frame ) { vca_mode = 1; } // update vcf if(vcf_envpos >= ENVINC) { filter->envRecalc(); vcf_envpos = 0; if (vco_slide) { vco_inc = vco_slidebase - vco_slide; // Calculate coeff from dec_knob on knob change. vco_slide -= vco_slide * ( 0.1f - slide_dec_knob.value() * 0.0999f ) * sampleRatio; // TODO: Adjust for ENVINC } } sample_cnt++; vcf_envpos++; //int decay_frames = 128; // update vco vco_c += vco_inc; if(vco_c > 0.5) vco_c -= 1.0; switch(int(rint(wave_shape.value()))) { case 0: vco_shape = SAWTOOTH; break; case 1: vco_shape = TRIANGLE; break; case 2: vco_shape = SQUARE; break; case 3: vco_shape = ROUND_SQUARE; break; case 4: vco_shape = MOOG; break; case 5: vco_shape = SINE; break; case 6: vco_shape = EXPONENTIAL; break; case 7: vco_shape = WHITE_NOISE; break; case 8: vco_shape = BL_SAWTOOTH; break; case 9: vco_shape = BL_SQUARE; break; case 10: vco_shape = BL_TRIANGLE; break; case 11: vco_shape = BL_MOOG; break; default: vco_shape = SAWTOOTH; break; } // add vco_shape_param the changes the shape of each curve. // merge sawtooths with triangle and square with round square? switch (vco_shape) { case SAWTOOTH: // p0: curviness of line vco_k = vco_c; // Is this sawtooth backwards? break; case TRIANGLE: // p0: duty rev.saw<->triangle<->saw p1: curviness vco_k = (vco_c*2.0)+0.5; if (vco_k>0.5) vco_k = 1.0- vco_k; break; case SQUARE: // p0: slope of top vco_k = (vco_c<0)?0.5:-0.5; break; case ROUND_SQUARE: // p0: width of round vco_k = (vco_c<0)?(sqrtf(1-(vco_c*vco_c*4))-0.5):-0.5; break; case MOOG: // Maybe the fall should be exponential/sinsoidal instead of quadric. // [-0.5, 0]: Rise, [0,0.25]: Slope down, [0.25,0.5]: Low vco_k = (vco_c*2.0)+0.5; if (vco_k>1.0) { vco_k = -0.5 ; } else if (vco_k>0.5) { w = 2.0*(vco_k-0.5)-1.0; vco_k = 0.5 - sqrtf(1.0-(w*w)); } vco_k *= 2.0; // MOOG wave gets filtered away break; case SINE: // [-0.5, 0.5] : [-pi, pi] vco_k = 0.5f * Oscillator::sinSample( vco_c ); break; case EXPONENTIAL: vco_k = 0.5 * Oscillator::expSample( vco_c ); break; case WHITE_NOISE: vco_k = 0.5 * Oscillator::noiseSample( vco_c ); break; case BL_SAWTOOTH: vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLSaw ) * 0.5f; break; case BL_SQUARE: vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLSquare ) * 0.5f; break; case BL_TRIANGLE: vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLTriangle ) * 0.5f; break; case BL_MOOG: vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLMoog ); break; } //vca_a = 0.5; // Write out samples. #ifdef LB_FILTERED //samp = vcf->process(vco_k)*2.0*vca_a; //samp = vcf->process(vco_k)*2.0; samp = filter->process(vco_k) * vca_a; //printf("%f %d\n", vco_c, sample_cnt); //samp = vco_k * vca_a; if( sample_cnt <= 4 ) { // vca_a = 0; } #else //samp = vco_k*vca_a; #endif /* float releaseFrames = desiredReleaseFrames(); samp *= (releaseFrames - catch_decay)/releaseFrames; */ //LB302 samp *= (float)(decay_frames - catch_decay)/(float)decay_frames; for( int c = 0; c < DEFAULT_CHANNELS; c++ ) { outbuf[i][c] = samp; } // Handle Envelope if(vca_mode==0) { vca_a+=(vca_a0-vca_a)*vca_attack; if(sample_cnt>=0.5*engine::mixer()->processingSampleRate()) vca_mode = 2; } else if(vca_mode == 1) { vca_a *= vca_decay; // the following line actually speeds up processing if(vca_a < (1/65536.0)) { vca_a = 0; vca_mode = 3; } } } return 1; } /* Prepares the active LB302 note. I separated this into a function because it * needs to be called onplayNote() when a new note is started. It also needs * to be called from process() when a prior edge-to-edge note is done releasing. */ void lb302Synth::initNote( lb302Note *n) { catch_decay = 0; vco_inc = n->vco_inc; // Always reset vca on non-dead notes, and // Only reset vca on decaying(decayed) and never-played if(n->dead == 0 || (vca_mode==1 || vca_mode==3)) { //printf(" good\n"); sample_cnt = 0; vca_mode = 0; // LB303: //vca_a = 0; } else { vca_mode = 2; } initSlide(); // Slide-from note, save inc for next note if (slideToggle.value()) { vco_slideinc = vco_inc; // May need to equal vco_slidebase+vco_slide if last note slid } recalcFilter(); if(n->dead ==0){ // Swap next two blocks?? vcf->playNote(); // Ensure envelope is recalculated vcf_envpos = ENVINC; // Double Check //vca_mode = 0; //vca_a = 0.0; } } void lb302Synth::initSlide() { // Initiate Slide if (vco_slideinc) { //printf(" sliding\n"); vco_slide = vco_inc-vco_slideinc; // Slide amount vco_slidebase = vco_inc; // The REAL frequency vco_slideinc = 0; // reset from-note } else { vco_slide = 0; } } void lb302Synth::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if( _n->isMasterNote() || ( _n->hasParent() && _n->isReleased() ) ) { return; } // sort notes: new notes to the end m_notesMutex.lock(); if( _n->totalFramesPlayed() == 0 ) { m_notes.append( _n ); } else { m_notes.prepend( _n ); } m_notesMutex.unlock(); release_frame = qMax( release_frame, _n->framesLeft() + _n->offset() ); } void lb302Synth::processNote( NotePlayHandle * _n ) { /// Start a new note. if( _n->m_pluginData != this ) { m_playingNote = _n; new_freq = true; _n->m_pluginData = this; } if( ! m_playingNote && ! _n->isReleased() && release_frame > 0 ) { m_playingNote = _n; if ( slideToggle.value() ) { vco_slideinc = GET_INC( _n->frequency() ); } } // Check for slide if( m_playingNote == _n ) { true_freq = _n->frequency(); if( slideToggle.value() ) { vco_slidebase = GET_INC( true_freq ); // The REAL frequency } else { vco_inc = GET_INC( true_freq ); } } } void lb302Synth::play( sampleFrame * _working_buffer ) { m_notesMutex.lock(); while( ! m_notes.isEmpty() ) { processNote( m_notes.takeFirst() ); }; m_notesMutex.unlock(); const fpp_t frames = engine::mixer()->framesPerPeriod(); process( _working_buffer, frames ); instrumentTrack()->processAudioBuffer( _working_buffer, frames, NULL ); // release_frame = 0; //removed for issue # 1432 } void lb302Synth::deleteNotePluginData( NotePlayHandle * _n ) { //printf("GONE\n"); if( m_playingNote == _n ) { m_playingNote = NULL; } } PluginView * lb302Synth::instantiateView( QWidget * _parent ) { return( new lb302SynthView( this, _parent ) ); } lb302SynthView::lb302SynthView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { // GUI m_vcfCutKnob = new knob( knobBright_26, this ); m_vcfCutKnob->move( 75, 130 ); m_vcfCutKnob->setHintText( tr( "Cutoff Freq:" ) + " ", "" ); m_vcfCutKnob->setLabel( "" ); m_vcfResKnob = new knob( knobBright_26, this ); m_vcfResKnob->move( 120, 130 ); m_vcfResKnob->setHintText( tr( "Resonance:" ) + " ", "" ); m_vcfResKnob->setLabel( "" ); m_vcfModKnob = new knob( knobBright_26, this ); m_vcfModKnob->move( 165, 130 ); m_vcfModKnob->setHintText( tr( "Env Mod:" ) + " ", "" ); m_vcfModKnob->setLabel( "" ); m_vcfDecKnob = new knob( knobBright_26, this ); m_vcfDecKnob->move( 210, 130 ); m_vcfDecKnob->setHintText( tr( "Decay:" ) + " ", "" ); m_vcfDecKnob->setLabel( "" ); m_slideToggle = new ledCheckBox( "", this ); m_slideToggle->move( 10, 180 ); /* m_accentToggle = new ledCheckBox( "", this ); m_accentToggle->move( 10, 200 ); m_accentToggle->setDisabled(true);*/ // accent removed pending real implementation - no need for non-functional buttons m_deadToggle = new ledCheckBox( "", this ); m_deadToggle->move( 10, 200 ); m_db24Toggle = new ledCheckBox( "", this ); m_db24Toggle->setWhatsThis( tr( "303-es-que, 24dB/octave, 3 pole filter" ) ); m_db24Toggle->move( 10, 150); m_slideDecKnob = new knob( knobBright_26, this ); m_slideDecKnob->move( 210, 75 ); m_slideDecKnob->setHintText( tr( "Slide Decay:" ) + " ", "" ); m_slideDecKnob->setLabel( ""); m_distKnob = new knob( knobBright_26, this ); m_distKnob->move( 210, 190 ); m_distKnob->setHintText( tr( "DIST:" ) + " ", "" ); m_distKnob->setLabel( tr( "")); // Shapes // move to 120,75 const int waveBtnX = 10; const int waveBtnY = 96; pixmapButton * sawWaveBtn = new pixmapButton( this, tr( "Saw wave" ) ); sawWaveBtn->move( waveBtnX, waveBtnY ); sawWaveBtn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); sawWaveBtn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); toolTip::add( sawWaveBtn, tr( "Click here for a saw-wave." ) ); pixmapButton * triangleWaveBtn = new pixmapButton( this, tr( "Triangle wave" ) ); triangleWaveBtn->move( waveBtnX+(16*1), waveBtnY ); triangleWaveBtn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); triangleWaveBtn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); toolTip::add( triangleWaveBtn, tr( "Click here for a triangle-wave." ) ); pixmapButton * sqrWaveBtn = new pixmapButton( this, tr( "Square wave" ) ); sqrWaveBtn->move( waveBtnX+(16*2), waveBtnY ); sqrWaveBtn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); sqrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); toolTip::add( sqrWaveBtn, tr( "Click here for a square-wave." ) ); pixmapButton * roundSqrWaveBtn = new pixmapButton( this, tr( "Rounded square wave" ) ); roundSqrWaveBtn->move( waveBtnX+(16*3), waveBtnY ); roundSqrWaveBtn->setActiveGraphic( embed::getIconPixmap( "round_square_wave_active" ) ); roundSqrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "round_square_wave_inactive" ) ); toolTip::add( roundSqrWaveBtn, tr( "Click here for a square-wave with a rounded end." ) ); pixmapButton * moogWaveBtn = new pixmapButton( this, tr( "Moog wave" ) ); moogWaveBtn->move( waveBtnX+(16*4), waveBtnY ); moogWaveBtn->setActiveGraphic( embed::getIconPixmap( "moog_saw_wave_active" ) ); moogWaveBtn->setInactiveGraphic( embed::getIconPixmap( "moog_saw_wave_inactive" ) ); toolTip::add( moogWaveBtn, tr( "Click here for a moog-like wave." ) ); pixmapButton * sinWaveBtn = new pixmapButton( this, tr( "Sine wave" ) ); sinWaveBtn->move( waveBtnX+(16*5), waveBtnY ); sinWaveBtn->setActiveGraphic( embed::getIconPixmap( "sin_wave_active" ) ); sinWaveBtn->setInactiveGraphic( embed::getIconPixmap( "sin_wave_inactive" ) ); toolTip::add( sinWaveBtn, tr( "Click for a sine-wave." ) ); pixmapButton * exponentialWaveBtn = new pixmapButton( this, tr( "White noise wave" ) ); exponentialWaveBtn->move( waveBtnX+(16*6), waveBtnY ); exponentialWaveBtn->setActiveGraphic( embed::getIconPixmap( "exp_wave_active" ) ); exponentialWaveBtn->setInactiveGraphic( embed::getIconPixmap( "exp_wave_inactive" ) ); toolTip::add( exponentialWaveBtn, tr( "Click here for an exponential wave." ) ); pixmapButton * whiteNoiseWaveBtn = new pixmapButton( this, tr( "White noise wave" ) ); whiteNoiseWaveBtn->move( waveBtnX+(16*7), waveBtnY ); whiteNoiseWaveBtn->setActiveGraphic( embed::getIconPixmap( "white_noise_wave_active" ) ); whiteNoiseWaveBtn->setInactiveGraphic( embed::getIconPixmap( "white_noise_wave_inactive" ) ); toolTip::add( whiteNoiseWaveBtn, tr( "Click here for white-noise." ) ); pixmapButton * blSawWaveBtn = new pixmapButton( this, tr( "Bandlimited saw wave" ) ); blSawWaveBtn->move( waveBtnX+(16*9)-8, waveBtnY ); blSawWaveBtn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); blSawWaveBtn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); toolTip::add( blSawWaveBtn, tr( "Click here for bandlimited saw wave." ) ); pixmapButton * blSquareWaveBtn = new pixmapButton( this, tr( "Bandlimited square wave" ) ); blSquareWaveBtn->move( waveBtnX+(16*10)-8, waveBtnY ); blSquareWaveBtn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); blSquareWaveBtn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); toolTip::add( blSquareWaveBtn, tr( "Click here for bandlimited square wave." ) ); pixmapButton * blTriangleWaveBtn = new pixmapButton( this, tr( "Bandlimited triangle wave" ) ); blTriangleWaveBtn->move( waveBtnX+(16*11)-8, waveBtnY ); blTriangleWaveBtn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); blTriangleWaveBtn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); toolTip::add( blTriangleWaveBtn, tr( "Click here for bandlimited triangle wave." ) ); pixmapButton * blMoogWaveBtn = new pixmapButton( this, tr( "Bandlimited moog saw wave" ) ); blMoogWaveBtn->move( waveBtnX+(16*12)-8, waveBtnY ); blMoogWaveBtn->setActiveGraphic( embed::getIconPixmap( "moog_saw_wave_active" ) ); blMoogWaveBtn->setInactiveGraphic( embed::getIconPixmap( "moog_saw_wave_inactive" ) ); toolTip::add( blMoogWaveBtn, tr( "Click here for bandlimited moog saw wave." ) ); m_waveBtnGrp = new automatableButtonGroup( this ); m_waveBtnGrp->addButton( sawWaveBtn ); m_waveBtnGrp->addButton( triangleWaveBtn ); m_waveBtnGrp->addButton( sqrWaveBtn ); m_waveBtnGrp->addButton( roundSqrWaveBtn ); m_waveBtnGrp->addButton( moogWaveBtn ); m_waveBtnGrp->addButton( sinWaveBtn ); m_waveBtnGrp->addButton( exponentialWaveBtn ); m_waveBtnGrp->addButton( whiteNoiseWaveBtn ); m_waveBtnGrp->addButton( blSawWaveBtn ); m_waveBtnGrp->addButton( blSquareWaveBtn ); m_waveBtnGrp->addButton( blTriangleWaveBtn ); m_waveBtnGrp->addButton( blMoogWaveBtn ); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); } lb302SynthView::~lb302SynthView() { } void lb302SynthView::modelChanged() { lb302Synth * syn = castModel(); m_vcfCutKnob->setModel( &syn->vcf_cut_knob ); m_vcfResKnob->setModel( &syn->vcf_res_knob ); m_vcfDecKnob->setModel( &syn->vcf_dec_knob ); m_vcfModKnob->setModel( &syn->vcf_mod_knob ); m_slideDecKnob->setModel( &syn->slide_dec_knob ); m_distKnob->setModel( &syn->dist_knob ); m_waveBtnGrp->setModel( &syn->wave_shape ); m_slideToggle->setModel( &syn->slideToggle ); /*m_accentToggle->setModel( &syn->accentToggle );*/ m_deadToggle->setModel( &syn->deadToggle ); m_db24Toggle->setModel( &syn->db24Toggle ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new lb302Synth( static_cast( _data ) ) ); } } lmms-1.1.3/plugins/lb302/lb302.h000066400000000000000000000144621247673406200160040ustar00rootroot00000000000000/* * lb302.h - declaration of class lb302 which is a bass synth attempting to * emulate the Roland TB303 bass synth * * Copyright (c) 2006-2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * lb302FilterIIR2 is based on the gsyn filter code by Andy Sloane. * * lb302Filter3Pole is based on the TB303 instrument written by * Josep M Comajuncosas for the CSounds library * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LB302_H_ #define LB302_H_ #include "DspEffectLibrary.h" #include "Instrument.h" #include "InstrumentView.h" #include "led_checkbox.h" #include "knob.h" #include "Mixer.h" #include "NotePlayHandle.h" #include static const int NUM_FILTERS = 2; class lb302SynthView; class NotePlayHandle; class lb302FilterKnobState { public: float cutoff; float reso; float envmod; float envdecay; float dist; }; class lb302Filter { public: lb302Filter(lb302FilterKnobState* p_fs); virtual ~lb302Filter() {}; virtual void recalc(); virtual void envRecalc(); virtual float process(const float& samp)=0; virtual void playNote(); protected: lb302FilterKnobState *fs; // Filter Decay float vcf_c0; // c0=e1 on retrigger; c0*=ed every sample; cutoff=e0+c0 float vcf_e0, // e0 and e1 for interpolation vcf_e1; float vcf_rescoeff; // Resonance coefficient [0.30,9.54] }; class lb302FilterIIR2 : public lb302Filter { public: lb302FilterIIR2(lb302FilterKnobState* p_fs); virtual ~lb302FilterIIR2(); virtual void recalc(); virtual void envRecalc(); virtual float process(const float& samp); protected: float vcf_d1, // d1 and d2 are added back into the sample with vcf_d2; // vcf_a and b as coefficients. IIR2 resonance // loop. // IIR2 Coefficients for mixing dry and delay. float vcf_a, // Mixing coefficients for the final sound. vcf_b, // vcf_c; DspEffectLibrary::Distortion * m_dist; }; class lb302Filter3Pole : public lb302Filter { public: lb302Filter3Pole(lb302FilterKnobState* p_fs); //virtual void recalc(); virtual void envRecalc(); virtual void recalc(); virtual float process(const float& samp); protected: float kfcn, kp, kp1, kp1h, kres; float ay1, ay2, aout, lastin, value; }; class lb302Note { public: float vco_inc; bool dead; }; class lb302Synth : public Instrument { Q_OBJECT public: lb302Synth( InstrumentTrack * _instrument_track ); virtual ~lb302Synth(); virtual void play( sampleFrame * _working_buffer ); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual Flags flags() const { return IsSingleStreamed; } virtual f_cnt_t desiredReleaseFrames() const { return 0; //4048; } virtual PluginView * instantiateView( QWidget * _parent ); private: void processNote( NotePlayHandle * n ); void initNote(lb302Note *note); void initSlide(); private: FloatModel vcf_cut_knob; FloatModel vcf_res_knob; FloatModel vcf_mod_knob; FloatModel vcf_dec_knob; FloatModel vco_fine_detune_knob; FloatModel dist_knob; IntModel wave_shape; FloatModel slide_dec_knob; BoolModel slideToggle; BoolModel accentToggle; BoolModel deadToggle; BoolModel db24Toggle; public slots: void filterChanged(); void db24Toggled(); private: // Oscillator float vco_inc, // Sample increment for the frequency. Creates Sawtooth. vco_k, // Raw oscillator sample [-0.5,0.5] vco_c; // Raw oscillator sample [-0.5,0.5] float vco_slide, //* Current value of slide exponential curve. Nonzero=sliding vco_slideinc, //* Slide base to use in next node. Nonzero=slide next note vco_slidebase; //* The base vco_inc while sliding. enum vco_shape_t { SAWTOOTH, SQUARE, TRIANGLE, MOOG, ROUND_SQUARE, SINE, EXPONENTIAL, WHITE_NOISE, BL_SAWTOOTH, BL_SQUARE, BL_TRIANGLE, BL_MOOG }; vco_shape_t vco_shape; // Filters (just keep both loaded and switch) lb302Filter* vcfs[NUM_FILTERS]; // User settings lb302FilterKnobState fs; QAtomicPointer vcf; int release_frame; // More States int vcf_envpos; // Update counter. Updates when >= ENVINC float vca_attack, // Amp attack vca_decay, // Amp decay vca_a0, // Initial amplifier coefficient vca_a; // Amplifier coefficient. // Envelope State int vca_mode; // 0: attack, 1: decay, 2: idle, 3: never played // My hacks int sample_cnt; int last_offset; int catch_frame; int catch_decay; bool new_freq; float true_freq; void recalcFilter(); int process(sampleFrame *outbuf, const int size); friend class lb302SynthView; NotePlayHandle * m_playingNote; NotePlayHandleList m_notes; QMutex m_notesMutex; } ; class lb302SynthView : public InstrumentView { Q_OBJECT public: lb302SynthView( Instrument * _instrument, QWidget * _parent ); virtual ~lb302SynthView(); private: virtual void modelChanged(); knob * m_vcfCutKnob; knob * m_vcfResKnob; knob * m_vcfDecKnob; knob * m_vcfModKnob; knob * m_distKnob; knob * m_slideDecKnob; automatableButtonGroup * m_waveBtnGrp; ledCheckBox * m_slideToggle; /*ledCheckBox * m_accentToggle;*/ // removed pending accent implementation ledCheckBox * m_deadToggle; ledCheckBox * m_db24Toggle; } ; #endif lmms-1.1.3/plugins/lb302/logo.png000066400000000000000000000054461247673406200164610ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs LtEXtSoftwarewww.inkscape.org< IDATh͚m\YϹwfg$mujh&-i!5@ D H~C( µ&ؘ%l]ݙ{9z_X9ѽs5s??ys Q@,h uMj m_;l:n7l ]x>ӝw> cw5^kj"CgCP=!˅=w% '"q]d+ܾ{&5rΑѷwdhGql|ܸec ?ܓ{ pRźX y9 d1r lb@#sg^4.{&G xn@$DT-i,)%| 1(ERqrQ̛"" rEN]fdᣀbnpW6%!goOnЕ6m%FQo$)HD ( ?g\{: hI$]z}g>}$Mc?%TVG h6{˕޸=6'F?` z=俽p3<>0={j#"!hh$Q=/^Tǔ ={WnUFz~w~8vtPJ;v'F*FH׻\ 8ϙ` `UA*QC*J|qT TgеpQۊ;o×oF@*a*D B\IiJBTPD)NR( )MIJ3zOZ# Hܿ 5 l!+$FF0.ĺ"s  y"v DvVvp#Sl*Ua9#6Ƣ1bk I;KNC8[AWH3O&}CEdMI݌ĸ LXmmSvMJ+^(l{?x]܅i: m=CᬆM•Q4G <)4*BG|h9TLbx(J%Y; vZ,9.Mg S86Y'o@3-/j#+XHHm>cwnAXN] (*u3@4 6BΜh+j~6"]]QU h8E~p >[:q>`o*?H&&:j o E20+ƻd|ܰ]Y ZR7uf@RdaE:uxUٹj+3، =?|b2ޮxkvIj;5cTe%0͑gz+2@ڹj}tuVmN^"Q AXi?x%^VUŹrVsvz| o>GW%ՒELkxaX%iY[_N"b39@7N羂oɴY…kp4"y ˋ8&HV8洤{8{' \dUIڄtK*RWxcŸ#(j'3z`/%JSSsTFxXgNX|sM_ι^ 'gO2#`n1{oT?[~1=5Gw͑i=ԡЊ]992t~kqJ:}̱UAܒCuvc7@-]:/.Q\lU e|@y-x1F1ˬouFwhz+պ6B<;=署5$)e"Ɩ Y%=pu%Y\AOrf&rRU#$s ә: TMWQ,,Y6 5IwUkKԗXY4k@kқ,4bh<ރX9k驁=Pˉ8kKB_ީ.}b]T;NH˵zqk/JcXw[\Cw~~HWx2cPydm*[u[[ Ym'ǍI TRܠT(@wXRڝ*OħPot>ֶY~%{`Л۹܈3W7(=,P>۟aO|?[%ns ddx+V:@[rsgCIhiߞ~.:yo׍-p9I^GϿ~*J`:T/{ _>\ k_Sm0ȇ_ K-|C7;-y9g]H/2@V7m?ܱwo},ޛ~,7:C{=&0F/0e`37CdMIENDB`lmms-1.1.3/plugins/lb303/000077500000000000000000000000001247673406200150035ustar00rootroot00000000000000lmms-1.1.3/plugins/lb303/CMakeLists.txt000066400000000000000000000002041247673406200175370ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(lb303 lb303.cpp lb303.h MOCFILES lb303.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/lb303/README000066400000000000000000000061271247673406200156710ustar00rootroot00000000000000LB303 Bass Synth - Known bugs, issues, and missing features ----------------------------------------------------------- 2007.02.03 - First release -------------------------- Important note, in the current incarnation there are many behaviors, constants, and other items that will be changed. This will result in a change of the instrument's timbre and functionality. Therefore, it would be wise to not make any masterpieces with the synth at this point in time. BUG: Fix the awful clicking cause by adjacent notes. This problem seems to be caused by 'unexhausted buffers' That is, the problem manifests itself to a greater degree when the user "buffer size" configuration is increased to over 1024 frames or so. The problem is much less noticable when the buffer size is set to 64 frames. BUG: The synth does not make accomodations for sampling rates other than 44100. This should be easy to fix, but I haven't gotten around to it; nor do I have the means to test it. BUG: I get segfaults now and then. Granted, I've rarely used LMMS without also using LB302, so I do not know if the problem is actually in the Bass Synth. I have gotten the backtraces a few times: ... mixer::renderNextBuffer() mixer::nextAudioBuffer() QOBject::activate_signal() ??() and ... instrumentTrack::play() notePlayHandle() instrumentTrack::processOutEvent() fadeButton::activate() QSingleShotTimer::start() qStartTimer() qKillTimer() QGList::insertAt() TODO: Add accent feature. This isn't as bad as it sounds, but will require some tweaking to get right. TODO: LB302 contains code for a short fixed-length default decay. If a released note is using a user-defined VCA from the instrument panel, then LB302 should not do anything special. However, if no envelope is specified, then LB302 should request enough release-frames in order to apply the built-in exponential decay. TODO: The original TB303's square wave is not 50% duty cycle. The peaks are supposed to slope down slightly. It would be nice to be able to configure this. In fact, each waveform could have a parameter knob to change some aspect of the wave. See lb302.cpp:643 for more info. TODO: Must decide on proper action to take when a slide note is interrupted by another slide note. Right now, the slide-from frequency is always replaced with the prior note. However, we may wish to maintain the current frequency in order to make the sound more continuous. TODO: The default filter's distortion could use some work. effectLib::distortion<> gets the job done, but the coefficients need to more closely match that of lb302Filter3Pole's tanh distortion. TODO: Slide decay needs a better knob mapping. sqrt()? lb302.cpp:588 TODO: Consider making the slide trigger set the note to slide TO as opposed to the note to slide FROM. I originally did FROM in order to match the real 303. However, TO may be more intuitive. TODO: Various code refactoring, as well as precomputing some values. TODO: Remove one of the sawtooth waveforms in favor of the other? lmms-1.1.3/plugins/lb303/artwork.png000066400000000000000000003373741247673406200172230ustar00rootroot00000000000000PNG  IHDRjsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.5.11GB7IDATx^Uލn ƀ񸶑H(l c| %$` jVpr99ιr9U޵9-gn߆>ԮQc:UoXkg>suz2g|rߺWNOu<={^٫WyՓWx+r~.~;0WӕOBv~k1˜5Ou 8|>Scgr+kfݹ}=ϑg/ON-N^>Muǟf|&r ckp>y'q kz4,h fwrrFz ,:^w|q¬/O9?{UBFxi;W`$poe<V}.6rՕzXMkn[Vs+t7Q+as'dF eY zv2.?d}'`<…\‹cy09O9 9?7܈+p_2-/2c5FxOj/V |:ظx5g⬋s!=㿌S93`<ܑskE \u*$.]Z">'"GQ}dS]}@w40v[5&n|_^'iX҈[ǸX +- !9FK5{iTXFfP2Ah )n.rw\/iߺh;BU! =0@0 sAch036RHFd-%WN$ RB+EZ'mR+.vD0A/6T+ue>֜B_(8iu/5}.9 h@,<tp"42&mvES1u}f89RouZ_U@騾[]5rգN]oGu,@bs\&TrIZh9mlY]Ŏ%nq|9|e1yz$h;Th¯ ) c]/JHle$,{_2>pb}c>y5=@I@QFP11~!BgQkʑs'Y8#p$` #q fApDܦ252j 0f,.@sɹϕst"J/T=D4_q`8&VrNě\`14g. JdQus]ϗe0ʒ.gxP b^p?a@VC4rEju(TVk5yk ײrs\TW2Lm尶vP[:ϑ[Zʑz'S[Πdz:_[t13͐#_()Im a~muX/ą|#Y/#_A/qwbA.E O_`20ouB<;vPM7¦(e%a0\aQMfxN)3 -/ fi؝#Oec-GM{1c K _; ш=~gR3_YQG*̔ MxKɏLddMCUy~,ǍrX8qPJۮɉ##})0H[\<NBkOɤ?DUTZd`F5frtAr Fg}#_6ӈV^G֧+5Zo8GpD~GPNonrAj/!mEx0$8R e"ARЛ)iD/A ;\Pi;uB9}L1UoyRtLvT]<ҡoma|}eΧ[Ƒ 7솞QfPxS ЦPjRH!gb@9fqt #[p 8A|3]GNcQ/k~e~;YT>,ՖuGZMm'ۥ.Ą96h O ]]]l}xy1c5W\&7߭c]/|jFa#pab<6&0L0z|-98!k]Xy|mPɯ&PdF:הeDNpGGqwq_5 u!*Oz,Me :q-7b]iM6Ơ=\\iM&A@2q 2"U5J XjFJ#<n=G0'K`|@Ov2бuN9?S Uor|&Igjjgs72|_ͷ6KFoR}Yf" N_HU ihdeu);~mo{/^:~p"aD!pq:j2awBP:#WpYYCYyS$qXE 00q @:Oݦ; x\>Cu[0͉18AQ.ezm=EYsqK\/\q2˩*bIq9ȆJ5J\( TEr;nJtt:9Hw^m1' xTKg3)eJ[#G􈘬T>WRA/8XsT bRuRe$ס~SLƖ]7*S]=3|s7yxX4ek9h76EEHu%*cr3*C7ry߁x<#2OB!$Fl (2)arXӍN z*Ư|$3`Ԉ;N@ P'^*$ )\C"]תetUl(peB3ZE0Quz-HhbBU'WzQ:XIC=7/I]*dN(b QЯ7vݹI/m#ǥ߰!YW hTE;`PjK ,U ߩ-SYz."ll",oJt1OA<*M\&j XWjouR;ye/p=S[<ڪZ.R7s"+`@V9Ypp?+)R^`Zo@5e';ˏLQ \:  鬩jas8n!ԽƵ?Ij2e-S̪mbA(93eZ"qqșn}C5'LpEs:pG rd'(+\NH\6GD0Ó>ThIA3'jfð(IM$@+JD#Y}۪-VDb'IjƻXϩ9>(çM&#)-}cz|zZM%}Z }e(Tik1Fp5b8So(0w@1/ULJ.:-s_)'O*Hp_nԎ-ʵb)WiIMTJsDƨ;Z-f;{:3 ƓT\p0,dYm3S(6Vp~m%'/;1/Լ;Cή'N8`vrT[_S] nx{CV]d]x(:BTT+- .@HM,ty0)H"ml%nOˑH2ͳN^6 Cl񨺜dk@.ż h5I49x%nW~d˨(ŜpQ 0θ~G>ߗb>r j.wU`Cx-c&['P`n;m4T 0rasA>]&F=n פ]1hj^3!.+ɓjFDmRFb$sUrUy92tQhd@MV4yƹLH2Oay\Q\[/uWneLfAF< ,v+ >O u#Y;,TfN@^}#˔esΏ[g* {Xa'o@ Ӑb%lK$ڌ%nG5V2.*ve=*r'oV|XY9f6f}8٫.M%>pi3 %뛪}|%_{گj荿-#uC-„jcŘ2AjA@)Q)x0,9$s- )5a:wc}l*%lQY H\-6&1C/q޼ueaUm(ɀi^2 .ӵ^A e:Aym+cZ 2Q}MAKSOg+ ;5ӱ}QKgwӇ(OGvպ:˻Ij;T_E/FUMe}ㅝ`j[ҭAmgD>Sfn#gzykd_zRy覌y퐸bl< 5ram0۫,lQ3N- 3ch^s=~)`0F7х uU`K7Ua 0?zÜ~0XRJ~`G*Ձ *y|0>~^?ʌ si"IFIjR&&E2P3_v %ѥUH2>iA4Ĩ*VagW*&I YœR\ھd3$ÛD er ty] P3.00#0>$WfjঠQ"Vdh}i?NTvf.+^jڪ-s[S.g*~n4}a7Z%~]NHVYލv(^+ r}rF(A֘gG آxф*_=m5|Ĭ&upk,Sz.eRтԆ:棝BG73]Fģ+/=Sn _ǻ.Sk93>×{aW LQ8$&q#KsL#>hۍ։s|QoCczjF.:$ZMe쩻K JTk0Tnd%ClPȖG5e=.+v4 nn,Neu8 US 2_U%e*ѢdKSgkF뵺9RMAZRך>>߈Q/K(]@@?snu= Q*L PT{yFSVwf7uh>S[2 !~ggZ~"f` ͆Ziגkx9YRWF1'~t Kf?oƍz: S[ڍf+Rve)SVeu[Ůfu`ܵu"o6M.>s{P"`|v4G`A(Ta.R;%] vXOyF8ïҵ\:9p!c@T(֚+0 'z |+M+7.QB$W6i0#3'¥)}fWT S>hV aN!H ƱjS FC@l#+xK_*Ǔ[`(*L߃ۍ"|M?=~=>Gev@(e. x%܋I) ď(3z1&yO/Ҋx0Ԏ`q7+|7ZY8yJp44/jSA@Ҕj) $_u/>Ubseq᱌.`k[/͚jXu%ǿwq"&EP1Z$A\.#oPM7P#?½x]zⳟg֣&.n%S[B w7C20^/_!%:oݟ]ZUOq%m-~?@^0S@t]-9.G $w]1E#ri*j9QGRaD\=t" ^_D[W=Sj$&%u>~p+rjkJY)k9IN ~kĄR җvy7hn'ZE\cO&Y&zd0#;~Op<>Ob cWq%!Y)k'rHdf2Ku~3Y 3pyj;**ށx ~BS2)HByQk@'Ԓ$?sOsr!KSA %*19*.ǗAa8E49Օl{e=yo]Ru6'4A{VD٫U)C2au7St

    1T6[8N8H,\==nݾ'OB't a)v=sA-ֲ^mXUZL(JàK0bۗC.ȯ4x㫪/IK( Fbkk<OtUe:)H)_p*TaV񙌢G y }|J@WYԘ~"${].>0@2 c&N68nD.=Ɵ#gU߻yw}TkH3OOzj앙wT'\}oW_R5,&ʼmIV*{xYWMy U"@b`7ˏ~tT:^\(:GYkw?7;2>>u{ŗ}O߿˗qNovZh:bV?!fh&uQۀ#xj$01v`f3_9=yUk5)I4+ߏ< (WQV&u7VOZRȌ >Ĕg7Ȣֺd.L5h Ka(D.OkjD[AUbS.!Q]/?ַ=|?؏[2B((n"@P'-bDIEVо܂_AUk\S1)xM,!2tLAv29,`4$T0)@6(ZCEXݬV7)4/'`QWVэʔ Vd(err8Ǿ@fAFpmSCЀ2>-Qj($$e\'.{]" 3~N$7*5>5O9t0H;#TnKgGu#wG%??1iu-!tJUoND1ܮqF}%䃓pWKњlzGĔJƏvŃhn#Y܅SQ>Osk8} O\u'osߋw#NLmm.6ɍP=n8evmGS>tyZ*DhmoU+F_ BDr! kx7aͥ`qC[qr)|ɳQon6u 25A|)'bo:)w!Ub@oIZ0YjJ[%^_1fװyC`Q;auX bMUD+O^pڅt,e5`G!e^'qMԝ7>!Q0xQ>%oIM-G5'<n&.XL5n3] Rݪ3{_e/Ffe]kd)J"j{Sk<+Kdr]ڧ3zպ]Yb6r d^k@pUj*{)j?x#`4r8<*F+b.t&%)^UjV6K]*gUYZe/x]muZ޼x[޲XfbG#jLC F RD%^x0J]ip)EF@cVx_ Rm7W'")cK,q$ybZWV)sG؅ANDRM*F@0iJٛ>}EV~xX'>{yLq_'sf0nFiz=Ӽ^&umJrwyD_mr`sp0CL郊W}צU+012b0яU(aɧKR(=̃eor4oLbnx䤶,tr\JT\rR?hkNxYO|ܢZ;& f)-9$KGuOC%cA#/\ܒڱ ց Q 8cjX%O.?/2֘ae=9hU-  UAi/a#Rjv'TOT۴)</_i>px{}Oo{~򞟏&7hZ5@4|_.#߽7$xv+噯{ΰ Fsb<W?yO?OR&TKMOc zAn44Rlrެīd9[+wA'՚ ^Wj<95};ˇv#n;x|ÿ-:兩be,G-wn}YRFbau.^'@zR*(D*†_CZ0NU~U'Ἢ D5^;au/Ŵ!B{Cԩhwߘok{pk=@k1]ޏɵhj#Y ċGf?syY rf칛w_~>yѲ0e542V)Ǫ$skp&ד6sf7*ec(i!ZՓ$8u{xNGOk7??sZgXqi4iK%Q%Up؀)HIK@ "朲ZM>AAS_~0TpяAtT0'o(78(4c!ԩLLsGRÔ jaTm K#}nʯpl%J$LI=:O%3 V8.7O噯{GF+_zH=<߼ߓLI)u(t]$U x5pb#s @pB٦fw-gt\^>F7fxy'~m*lJLR %\O@7O`VT"h>kD>UUrc^-bQ2g-S7OK NWQpY: Lf * K:uʧv*=C)N~)J{b,j ̈NԺ?ꍭC/S.L{zK793 x=X g6.| +3{aj}C~ʱ}lܤBs;†g@0`[SʼՠV7LUaPQF0DzZmY܉w߽› X n'.ē|$j;ꂤ-b_j~^=N=GM*bP(RDDzLJ//d^QؽV.DahM6;IfR"!YONU}Q`˟tQj6OO_/~˗k?^/Dv!vیM{|97Mdi/\}r>x\'?HLbF[_!;bnEmiwtAjc؏o@ěB[~lh?bG,k[_  U9u44,9FGp~WYvh' &CT\A儸Yя=d RQJQel\hQ|ukZ5E4Vjm).Ar$-gR3UB7DQwp;=D }`b㍝_f50c/*Ruz7O,rLִ7J;%@ԜWjȂih[,5;9K\ BچYBGjNkk_?|T J RcCѕTۑD$)wx%زMxYe{eL0čwk<~=}.?p3ѪTc[bt7l"ovi%خ J1 VL6Bo!RߝؓΒJZkq5D5Sv'EZUuc:0'Kh aq'J1厝B֘Iq$`,Dx-N$;!b0n?g_uѧ㔪U oUo|_ ;wܡ5d0 _}=clW:º.n~"EGjUP@Չo^|]1.` 0YQ`hO {j:ߪnA4N/|3'.VMOL؝ uokj8S僿KS??Ǹ>nV/0\4AO U9[F(KO?:HJ4m4yMa 6ٰl\9~(;xaMMzef .(O>iG aWTgrX\ (ͺAʤ:ɡN0tּL .jJwpz'sp>rW~g~߯{o~T0MU.x:u: + n~P6*m%s-JvWp%Ti9e-Y+\r᧝K8ŔK \Ԫ-B#/UZ\, $8N]դш=&6Lo2aoz՛tW©MԊJw97<>v%;+lVk 3ira\'J8MJ: j*Ve˔(<~#ܿ^'P%е(o84WF6w}/CbǾJʟ?}>Qǡ$廯=33KfbGdjǁi餙D#vX_{z ݜԣx Ƿv:c 6$ jը8rgѦqR siӃ_ZXԾ;<|e+$n,(l嫮?89+H)er^Rj2k>oܽZ8i?x&K0J)$zdU;6FydJâo$7)ǓO>x6o"A5V!3Mj;ڨ$@@Me `Ly3zn\'7d:??NSk;QtuoS?I QFkO}rSvϫwV>[ţ7VG-US ޤHȡi4–7`RbySkֵ̫R?Q_QRLwv/]^Mz|7 Gp7}Ckjȣ7>O̮Rb,vV?5.Uc6JuS׎Cto2Iup St9Xq/C3ᎮkAj^u&YbÙXu&*sGOw3/,nt^vv4kV9IϑJ*SF__$d.{+M^Gr0.ꦽT 7yY;IBܻk+7Ϳ"/|q쏮FnTAq&<,ieS^ FGP#({̈́tuAjDzتW)Xv 84/cCRGλNPrtT-{tg[蚗Z=nËn]:cbbrk u?jfc#j>S_麜Ն2>BVS7 oܡ}O=ī=UXfg|rz^e7nv`@leeWGI2TщNXFaC-@Ih^}jӥ~K1 W[q[*z[xڛXW:疬yodYG֝ٞ0I7[ֈ]o'L )QL*9}|#Q~zۭy{|ɡT)^B<4t0yD5 P nUO0M~;@9-;jv5U`aޚat8;$F @ $x}TqUǿ_?_D`vO;wd% wGyw{I#?ȇ>W2\v@/@'U6ŞfW~ZQ>ƥ0ƙs֨kToז2Nj͋JM&Ҋv=J =23 W}ܟwH"\GkC"6V*_&ML-3i~Aڇ A pȂjM{7-ri!$hB "Ԯ7yg|3Rs5Fp3FK"j|HZi*/W[wy-yLCPHUu]tT\Ykm:`} 哺h:] Rk IYX1%I|L-@_a`6ΣycTMK7lGfop{XJ#lYq%gzE69KG|4k·SVpv7Բ?l,㺂NZ 8^Moh[KΥ*kZb X:WTM2, *X["Pc-$5 IwjJ:njY4k㛨دuO0lRGTŽ~E`n|V[>)ZTz=3M}`j+[uq7qO-; 8i>LA{Q> `Te\WKѪD?̤(5+1bA + *o"e$P}!ҴZ1 v1&k !gVL1njauJj)6ܱp@4Vzßq{)? L|=Quk\bUr'7mBi.˛F8pNgek )]yaV A(iO@Ý%ܡ= _`晾ddT-X~b\bXEMl$kqӤh߫2d-JGPpbFG~p/YDZR< HΞpd9o@ z{Is6'`l50zׯ ش) ٓ/fڃV2)bۛjů/`Dq.8jNJ M9OXZGpCN$_2rDj'ܬ@j +A}F5OryRoaz.&IcxlZbYqP rC >["Y}XrRӛ\/MEG  P'>'Jf4أq]vuG79cKy䍟> ~$Eޤ0#P)V1!Z3mWlbb ,Qs|)@']Ƽ ,⬳ʡ;AzdEB! G #$*3AV9H&fQ@Rɒ@ɒد*9.àwZחe__adf?9527XWP9T]m,.G?8VDi 9zE\.#F)Qgt%,!W"5qJw{t7s~;=.DJ9R9q ?3`VpcI zgyq3ZqU!eGm&KC% lJ&upB_`Ki_ѕG&鬕l\g, N'C+vj\$[ ^Vv׉Vkcq^+{1I̺t.Ţ4>",&i7(X 4w&6O|}UlM4to%yH6NTr|jG[<*э`4폮B(ȩ`j*r'K#dR_TO8pw40G] .9jWugpY F7QB]oPRTM-P18^/aX"%Xj6H7`F͋Бb_l%Zz4$R]V?~/}OzlW^s͞/>[xѐw'G/ >sppthxbxtrxd#%]o|shx|phtphl`hS| }O|/қF|O1ѩwzt!g5+r_߼1/0UWJչLYWӢyCB*lpRPC:}_w#Ukd.*U"O) # r_뫃. )-q}3;?aCׯAVׯBٟ6kXs*U)q #0@;՗8`kW7W JGљ 7mT=I?T]U[{][&:p/*]UTUT޿sGp/YPBLCI5^4ӓ0lmoVN°$o>f6E ; 3[wC?7ާUq s5 AYPMvE qskWnZ=Ȋ7ŬË Gp FV2/t^͖-n:;`_tLqR|46xέkJy ł3L.ykjjd=Bd”c,!/ 5zD15Xg uaZKUZJ\VBTNͰ c_R׫lE=J% K_gK Os?|ϨU{Շ_'4㦵R"`7 ߣ&#HnoU*dxL?Ft\*5v1ZC:kIQWq66)a46jRE_%5:=`j6j6vRwT=BX`4>~PiQՏa 5`o򷧋}dq׬(QZ )+ԩ`EAú4 :);R[Ba\yK-+=/#K9g3[ŞBLoċ{c待ҽ<4bQwwbxof +2غ=掭Qy ؖ7VgWa$ęKc0RRtR0 StTiei%jw`k#\yFgT~\BAFvxx%F''ƧSũΎT4͕Wo[fgKRjvijvqjzq&׷m'*larޘsOD4YUN1cǭ[,\;FN\*;hS,OLWC L'iJK V4miԄ1Q5q7GV=H)EiE=WbbE[$w'}Mҽ"5>+JgR2*` YpQ3 t$Í 憗5mV`jU[]&R3`PBC](.s9-T#Ig8 xbEjؕ~2ԺKO츩hvۣfZPxCkesd[6H~ZXP ˚:5at-*w{3s>zX ua eM3<ݡޯ?Gw05[ڎ,?A=Iė&7brkT튕ϮY"F&Rx^Qj8;FW-f嚬vkH{L>z6 o֚#怛ݭR[ JZ;pJcUutgrkz_e JvзxZj*' ܨ9B+@̜SQ/3NFQ綐V8 z jw־;—kN>milZ,- ;#BfR&mTlhYI!r'JC=/PjvoFc˥i{hzalvм|7 x1 iU՝XR&qv~0Z.ߝ/t0֚hz3..{CnPv{RD]7vĘ4^K-^){ԋl5SQhK W&a1fE{^+be O\dԖCn_7GF&F)`R*{5^}{_x y_M]O9E?OmoJbZM3u/;<ohszVkovUڟȣ~gx_=ߒzUp מt=u7?Ͼ~0&r. -(`d b@de Ua3 N&j[cܮ'bpDzhZ w>'%ڴR?*M?j~G{UofK{)/733UYFʆ@';rψpBWhwWW<.҅{ŞEkh7 wƬ½ܝTN3UY,20[7˅Y/l *X偕ykTXu״גS-i޼3o9}LL›[a0&f,meRKi|\3CZs ]kpUۍEwtXk}vT "]=*`7m)m65?x0 ԢQȪX]#0SZ7MUkh՛ݎWr]JƜ0G_e96B`Kbh3n'@yʯu zN (g_qI,,h!AStׂ&˘*JCܴ)E_MTOɥ @}JDDQih.|)ꖪ,`ZgyW޼3*4"WfhIaYBsW}Tӹc;ži}$}ȴBԬ1YBG5jcʉI?aQvڣKJ%{pٷx nP 0=*I,D|+ڵ/Z ;h6wS ӥ% Vw`Vk7]Rjwp};S[a`;,#5.턻VQKޑe,mUGNf&^NWW *=Z2Y= }XJ. V@9mf_-g܁Uwv;@wJ&PMTPbM@gQmap o-jO'Uu¤0:ʒTj4hz5Hd| #hCG }h.u{|9)1h HҤAB94IJ}X>j0z[ZQrഛޯ`WkOAv 9%ۺ4\-7B}M!T_ z6m"pjrMv?; ڦA( 'B8]UٶU2!Loń,?7{܌rG0z*yyx€@ ӕgp}I՚dPNjV8*s3r(P:tV(ݝ2x=;muYs;a؄ױ(idRIbG,p62 HYsT:Ekb' fw  ֗=K?)ܜu EpR6BBc45u6KVmE5J0$+9+{R3XzCi@ {}RB$-?HjslC[4Y.V ]iAdBcd?>8a7N&?0k ,*eOG筞TN[DA()nD:I#.,(zR "lTySq10*W6zUG O?_ }GyjJ32U]4lJfڭ1|SZxPٌ GqU > f4S6d vfZ.!{F+ĺ5a*S+DF]d".Hj'vd50_OË7ٌDTfR) sWV%p'E6"BmTe1wwR|THڝϻS. $UO$du5f|Yq9H^PB5::T`Nܬ妏-{xxox`8+?8)uwx!3Ë$Zy[F!t+0Y,i'%T>!p 0܏'/=g3U{8e GV5+#%s ʡ:Qxm -- 0Ar#]h2hLY 3/eq"Hbuj?viGg0pVMq/`]|Tކ%ܵP]?_C <W87,gt9n0lYUrL_]V& R[{#P>Qmx-Ӛ 8COҀ2DG~+vyp_tfE̜ugl[ť~ PG QE5BLgB_.1̟)+M6LjrÝg8nb%n[>,,^)v[C녻Sy{dh)iyНb"Y ~d5໎?:׏M(p6żDx] w\]OfOoc _x}xw=NDv%FAF8SQwO|e5o!G(KTN1-EDSWM ?NMh{aT$ܪI&Iʔ58:K>2`Bw̚QidLzwЍ\.=.RHڙyBJ1H5R UqM M_pRyˁwR(a1W15,nYĭJYAbL͍j+(4 631Rs9Rx4kSb /ZƞqЊ3ڵ\6Y9 oZ&q>Tno1ZjA€@Oj䟄HӬcK3Ț3`sBߌ7Fa"9aj 뷸!952 A`J=XK(w$B\V(-(j;KUn٨$r]}xb#ߌ\7l^`X2VK}|7D qD؎+"c(f" 3c/mljJBNUQL3+`L$VL@ 5Ej<'q>wV>RܴP7*WD@فf4L_J9~Ym&nĞNG 梾BoM T‚ Be)7u}l[}lt #NOE#nMyP}aKI&IJZY7$͚DTCmʀ蜱U;hFwOc\e35qrp!*R/ZM*=֎ Uvo԰ 9p{|7eΖNo篏o<+ $T$Q ET"{Gzp}Q5n դ:V=j,bjJ1i>`Ԏahhϯ)Nx1$ˑM7d:jARYY NZes rOp7U*MٽgǮ@uȤ2|doEQY<(-nN5ՉzQ9QFy ܊V+&WYԾk$Oѿ`Q@P=a1#O5b@ 2!)X="|PνX\ n"hT?B$j٦6f@l8k'b턇btR8D<1N_`T匊*0H8luiuP_H T%L%`@v+JrΪ*:F=ٛ㹛Z-M.4iFE>0k"˺j'nSeTҗ\ՠw( F[OXTFpǨVAAkX/`H,/tLl&F V=֞rLg;_],.Bke(,$#C^d@{15ayeYߞ,,zf,@3S/\3_].,h;9ZTQr5qKGs1iZ6 aU8~D69ZSU+] ` 1տ¤Sޗ( JGCj+`%n:{kڌiTJLADrFOOuT_Uڏ&.:@a6]\ i̗ yXWUo4/Q*@gɩpW? E!^Lzo1u&3gutC0"*L1|qJ+e[`%%],'!6@R)*P)q2*6]$4# 5&jX~vґ"cH k)Q̤^l¥v \\w2wkxg:{k4dNPE2 mϧ:EuId3GCSwI0? j4mJǞ HDՆj"+c=IO3lh1a*Ki<*pkyj=W_rVsLYzaD^0L:UEf "Um*˸F́`7i:0VPvуkGrf^,ޙ<5<)] l'25 bD U,k F&Q t+*14΀x0ԿDUCjSGl,E;$QIW@V0K'A@\ ~y"]5]\wdoMݘ<6Tse,KrbkU8SQS/4^lа8+RޱcY/Ts\Lqpnw9,eŘLDK.[x Z2\onzBd5>i_3J뜆1*\k^skZ%$TP p0e.l1D/.:Șa?HL/s!/~F~ "+ԯ-雸F:Ǟ0y*llT G2B|8I&P^v@l nK B"Kl'PRnkхܵ܍wfrF/L(B貝r c d/P F *Ж5W[UFB>6" c/% T9~u}`fT59'PLk"V jQ[@+#Nt|o8ly#sG0E]Hq%)om:FCgpxo"  @@LT  `$;h) :݋QT79@N/ b[an;f΢$ۤDCe&n|CuJ++L-w!f '@>'R2#02ҽ =4lU%d7"Lw2TSrݳ U/u@)uT:~^`vƲ3HEx&t%*0\ tejbȏL*[u٤,qK8/e=;孬d"R{V54(Q/111F.&Br|fJgFbj\u3ۿTċ!7[XW\eɍ½ܽ :4N6wo"?XZ޵nvEm~.A Δ}#YЗ**%Q>BTk@ 3%`Q*'JY?@|:Ԧi5B"fv*o_ CkH;vMQ{M𛄮 sȍZf& ( ظp&IY6rM%#WR8P8F4+"~CA݂zZ9}ttc4`hdplxn$m9I%^gd zXhJO'*'3VOdAz:IYWU1zl5׮q ="6`=dnΔál´o֙ތD!;RCYPI%_qU%8JI fAQp 4)ܝ-B|&nEWI= `5pxtpd{tw1?S\رv \A*kÔm-AqN54$SI+#c A0k*K1AL%vS^҂"G6_.jQ$!/zH?ix<16E&Ӵ Ǥ 4jbFz{UsP~b~ U2^*ǎyqFfTjM%]t'>R8n-Gw'27@t kud蕖+nPT(Ԃt3a<:򯲭1+Jه@ٓ⊹kfZ1#2.thx$*ܛ/킺%K ưX CKbYݵN/ $Dp,W졕IL^ rODHĕ)X3;{}﹞R WU?H)N[[ގ}MZS<|"-a#%7;.j]_|,J. !Qʛ+Կl .{ES9|O 7o&˄Tm2Ln_b߲ō$T#p;(Syz[pI.\e GI@WQO Cp_pL !+/{:4 a/u[vLp5IJPTy4T*Ln Z'UX kV*S*)bd"NA V;r {}ipg87L{ mT#e͔ӇA)s-=w`K"E{LMU)-ܮ.;0qm0$o%e>5Jվ~FS9@:2T1ZE G&Zm?5*lUiJ$Ө=& DtoAU@ԮV994:=&9ڵS_z6;?򑏿o6_~ew~o|uw_SܝKQURiU>֢ `w {\KnD$@697!~z C"B\Gr{&&ZkGٻ @-{w7U93U3e-ny۩ \d0Mե۶J_,2Q'&MѪ&\@ DPUi-NX׸;Q#$*a|"u< (qLpD*<Q((Yux DU\F Su)X Vq D 5d__బՉ'n_okԎO齕&/ӻ ᯽K_6kO^|wZ_}S:n`t *4:lf08;@_F ["271_Jc+yP~7U[Ss89atFhen2G7pq{2gCS1T ԲCy-ȁmQjס|)1j!g1N1s쁥u(ܱ@q`ݘq|E|ojG2!p;YR:7O`q$[Wtteŵ򁽛ޞ::yq [ZA+VIlF(hK^8֯7dklT-m3k/YVb w& s9'k|:f&nq YsBQe|4r@*+hhDByllw: g^]]" gvEd8̦vG %Ǡ~]:Xa (.K}B_&Arh,F[PRP=@bF \LG"$jT'AEU^^2)MoMb2>5}ӚVRPZګC]%u]%;?/}kߴX]g? ##`Ո Έ&Lh+* /[ ӛ$OBIdqYL} j%S Z&#i>e@݉fui.ǀQa@!ㇷ˷g=zV- ̄5Ն²` rRE]+pl^a5lYLŏW/Ϭnjh^-O{3 B 6LxW\r&KIX5qPuWV SK-:ύCCQ ]l͉1@1.Fҹ{әӅ+cW&2 "?.g<+4  =%"R[d`.4֊jCOlLxBbLRf a F@,KEP[ޱ?Oһe7լrlBT XLB`\yG>(Qkk/{CR~}~i]P:}gLv4 .DTɯ3/ Δ-C&Lszֈ}]P m`2-TYcDLXe;CK oOoM篌nM>?>H[ 08Dq0h78u Eha9Ha6a;{T­+C{y?<7QX3FgӶh*ȻZ(!]/k+FAeR1fqґXYq3ΚnbRpe 9z؊ɛ$7k];1~xmdʐ8Gʮ:mJ8tGri vΧٲz 5 <(Ox]:ŠXT*jp_!jo_mU/,(Č qLBMz[I+$"4r9D>?6e~|(+}-~xERA Wr!B C 0ޔԇA6*!Qaj9seN\ȁSYfs`D?l9YG6* tǕ.蛻"6F d[9,J0k:Koh'iܝ92h -oNoMnNnnN]96VZ7e:$nM}ñ0ԿcB`_IH(Kba(P{>k*i,VGTjحR&jȏgK f$MVTڇ3{W^˾0bf졥`%;1== AH5}=HU#%G_Ra`f3W8&JMeOΩE NZֺ*~3ҷ,.JY162b1CwuJr]eQV`>-?oS3co;VpƢawdGcؖar살;ҷ%Bb'V;;o=2vt %ڃez RBP#*me hoZ&;95\9XLmzVH yj=J8L-FG[Z ~P%u}5D%|lVvT)nn]=xfo=ܧݳՁ}G@\pr* FPVCM _Wxm#۱2}Q1N-梚JJ! K}BMDke*ݚ_-ΖJhzq=㔨nгkѾ ~:ͲCh+3|k3fRJ|d-]k?i͆jL MIk?,hҔ+z#JlHvmNTv!>!>O/>3 P߭v#emcom}o9>=5+'ַk靵#y>5|R~pU1OTD_ ؒZPOR(lC!#ݢ_?xa\!<]59[ I& N|p TW *u(@Mí#U]bl'DOH^\wϖ.ܚ,oMzg &aUs}#Hbh/t >LI@-W0< ('Z?RnaQmwv@NToJ,+r;*$a |a3emfYʡ܍ba1S>-+􀝯U S"7LUiGCK Fox ĩ:D7d򚧀14DFDyMH]nukm ꫱QnMQ)f\֫wĚ`řc2I^ѿ?QE!ˉ/@"=w;?:x/wu8wc T{&W ޯ4~MS)leooN曄G/ۋͣ-Q+6\SBFVd!rE&12rBX<"B9Ke}b"혽:~tc襡KCO;:1Y^Q= #=7z襣:\e(Pd3OA?aldNP¡?,&o**NDm WEt}Q'3da&7&wRVQBߨ)/{Gt\ooWG =鴻WR1\f:ԍgxFLʨТtYPyJ/6ezU6MSv^fJ>g3}c1hQMZK0,KxTc XWHNt4UU=޶VŇ; YƤӪDX%R c9[rOdޜYȃMץn4RÕۤѥ@U H3)eJ;|s#夎^* /3.JMuvkj^T4jIdM-kCN #:Rlw8OwܽT^ @Pԧ m!0){;cc9řz>"oܑw@$j%M}Be/U͏Fv\U}' B@Oc^S} HzăyIUzeCI 3SY}ɥZԅ0uIڇXv?䤺AJ>[QTx/#ܹeS!̨|n B$! jZW'@D $`Tv2 ^8|fš|hy@Ej$9+BJvE㕊\b掼skE׼h%;XˇBby8DN<{c"{g|oݙVh j#ׯ W3ܷĞQ;" SepՇvF%jp@35.By, Ho!ГQe j%BbDDo(@p*%K(.`#JG3>xedPX1"윋н$J'n,5UԈ\Ljqd LC rL}b59L0"C2L&uQ+Ԃ%;oxJOJwdUL[epiL%.0 */L\cYբע`2[O ~ _?1ЛjQ(Awv}EKjKp/Xj`w:!5Lm ^4NPWwTF޷t̪ 5-)&Աܛߛ73~;Q[T1r[82qe^݉KׇܽTyꘟWp3%0Fۙ~"Vя!t[V$GWvR6,"T̞"DkRx?iy@Hi2=swwz Y/x7h `vݴBM)(>t4 $RkVB~[՛zb^EVk75}iCjqO#UHoyr,G]T, ݲ܇"UkpHa MU 1zX ~qu/7<7wO{I[١bn"]ܷISFpSְdy̴Ց4ݘ !C!%d=tqiS~ʵVzP@)F7߁>Zr[7펖칷IUIp]AL`qfU2Kd28|idGPs͎F_D [)4r޳۩brAш G>L!UQ"IGXEy"Q]H`E:GWT4p]g̭̳kùY)MA'tTIL=jsd€*.\%V-n34PZWl;D1KJ"98І-RRW(D >HZeFrskRϊgf8ebO8$2rt|F)ԄQŃ||u {Odow#JU?RU8xbxfQiäD<ޤRMd1^Ęd.NR],%q^R)5PہqeUՋ"i)ADVDBfUX۠:J X SeHj|TĐ7Ae!ܭd>P^ǎTN6rgWY$)SKpk="g"RLW(*j>@N mJ"*k:A}f]S+bPDg݁8Jpv855\_CIb 퀎!( #<Lj&16jR5 @ED=+\MS*;*)0Q6y\[܅Ń̝̋C/zfeV:pв* +Ex D~ٙqeQ (UFsWZn+M-{vM30(ͼWph\E -|%Pu%.ZN1_U-ȑ$qu\jpȈ0*JL(Y,m?,#R`(I[B&v*UgfmHXة@ au.EGF/+ eTþ5ytuh艹G7kWq j*UXdanT*%FX"Yԡw\j>%8ʝ+PTHT tJ_6^@,eNn-,`O\.y0pB]*0 Ucr̮ PrBʕ  ThV=j9wM3CSv|l*Ale8I-)Syjq/y @#͐4: x\:\ZAj27G;2˳;2'2<.ە#5 @" 5x.7{ ed=uHyR%t*$"5fze?;dԦE[DsR zZ"ļ#Y~/^P=xhe-b{d@悭.Um.44AS72'QiR3L3{/hS͡b9(Fő{sWGMVDZ0JHik}I:n.SkĩTTK+PՑNmo׆f]ٿ:91씡D{2#"`]Y `pV&EҘj y*" u瘟K) W}'坒DPk rBB*Yح63Dz7n}N!TDe_ZW_!ũ"L ֳiMf*W0&*҂$3|'EWι읙FedʩRl& ^)q9VڼIC{RrK:qB%_%S4MFgs=.ʠވBNQPQH\;>27T HBqL#؈(-O_ )gՑgzwLݻ6s{/ <7yftYSEj{QRP%TX*\ H|Rꧣ6hvOMPH>Qt |jx{vz3W_?~?ۿ\y`H8i?i( m:Q1 <>;!,E.X%!3vĤkEBjcskE'-i)Df{ad"͖V}, ,yHEUd$Nt8IPVT[ɹQ[*JmG5HW?f4s}قpͲVְ6sTkDv2KCG/ =ݿlQ|n \Q  .`:Kr= MAH JZn;$;T$՟gfiM4z"h/(<-l7u̧(,:h'Ju?U:ֿ|kgG}go,5pr{`N].JYr $@I(x)D 6ZQ ve;,܃SGW+Ç~8suJ<ݟ^2@m-@'f.1zC4gql0d~ڎb.o\+NOI=FB*QWis S7ݳS b1'i1A"٩<Ϯ@DRsԬ"%Rh3j3_"wjTŻrax ɌoǵҥkE;AVivKʡH0}R+*|+H@Np|rB`A DNIZ7M{øE*nk.A5_}QPuVqQ Qb-@S\;yJ P;3iPP\W -=YKS#Heʝ@esWN1+GnL%'9z՞w~.!_ qݑR'Jd{'qkL;H3z4ThٮS![Ƽv ߵY MjJuIPf (uo f^ݘ,Ob1]8V6 f}te"s}蹡éu+ |mkX8O?Z#%Z(l"SׂdjEґ>䍣W&^ÛC#H~jM2ϖR$} a;&h}Ӣ*5J`M\"XĆn&%Ć Hڴa/rQ8FkfZ nm0'ONN~pʼnCXZvpeKPSbbFi+6% ؍T녖/:`vNXAP{05mu\ZX 3kjzZNc@+㚦ӏᬂ١7v?9ݰ0OL.t@u"R!(Q"2]۹:ebvYxpLZ+6{1i]'1\*a-XغS5Wd7%m[YrJ+!Xa6~tsb﹡G/Nܜ[~rHLx oŒ Qh S 5L=׷d?cȾ4KFv9S8|r{oZ@@!& TLOݔfF~]MlieDsv$4|ZkU>4oAEPt1YAhߘ fz浔xlnhI6V1klSIܸ @ά!AbAI*=>j*(~O*ueTKK`NG9ЄnJm]ل"r*|~p ٗ }Sf1"fH@X.p'cwG&Ȅ$D+rj܅(`iK |pKIfd>j <bK_],yQN-1[u-4|l7Ք]$)sOaNnK.J4#PŴP3nֲ99+7×M4s 86xNB~%!!M2Tb ܣT)Qb%Nz+!llj4UE#2ӘM-P[L룎~4|, %͉|gjT*j>;zvύ:#M否P"q *!kEm}ms 1fp(D4ZQ⛑{(2*K\6:\B" iQLZp#̋bT7Qzޚ81qxv`|9ktATy[- TKaN$Fa}GO@\"L۞+Ţ_(6> adImyBK*DT2r AbR05@A2{ߋ#̭}߷zU{DWo4\{%Ыz9{G9rV$<[9idEgVn4} ?x>O@KTSPl^>RỪ )tc\ tUt TjV)rk䓖ͼxtTy{m,{~.L٭ʁpU'JLOǭ8l 5K{js1z|Quj@ĥ_j MEĵ~erJDMQ P X)UG=Zzgxd)|֟”UTЏ2 IڬwԬ|,<4_.] @FEON M&% Fɂc CZ>hcޭ*5x`&EBd WoпL膉$+sgjz)ɭ? r7/aB,^T`D9%pr$=pSV $Ȓ{?ASz^5vT!3|!|>z#z%rt\Cj5F՛޺V _"55{ v)U,D*;LBBWd-re`%yJ̋컝^(ZYWMtAz,[9iBŬ?v P!-^GY-3O'<<^ceZ9D30( t@:$s w{hc/?Pܧ_vroVl(K%.De !-CJU ,o]OAO jVْИQS&**fC1*R5S2!*Y,7v#HLB89k\󕺜I xO۱3vE,^BNH)_hۄ;`c\-kMBA<*M)YVW⸳]C6Mf5*_fIqlrOl;+ $xP0e MF.F"ijǭ*W[gb/VbS/6 ' M.53-QQ.1+U= pb||J?[/N~b7{DA>) \4V4n6=Z[ur:Da-{A!?F *HA=vDvq;o6z&lLFI{.XNmcU%Q]VVS!Q(+ lxi ,,tZ $ ZV8!捦Sfڌ**^пf_Pb+K:$Ida% j%GF5K%&wԘ884/?L%\]2Zp>͒\ufM$ ӃxJ*Z2c1,I77vir|p0P,^fzQ~2#(+vz0؏ɷˉ糙œ^ёXPc *w`>@r~LJj/aTrrfT@:LJ񵣅=rW;ۏ׋{g{|[/ep X,+)OJ hƮ@zF5Z=[ 0`{4Gݙ9u# [/cVPgA|beGuwW1h9a+(h]U/l/(4č V^L@g˙W[ J?|L>M\wp!py8xtyH;a.p.t-l!W6ZORrGaICKzZh3xiPpL'.! u.M5F5B_A4JOMO,S+Hz)Z Rc҅)ӛDoR!v/RVۥP=f=j;lKAM[$tbw#ШhF؍l?UcGU))ES^5PM)r$~ =CBTx UQ6W) j-W;TQi <(1)*F- f~j?b [HBSwV3-h+TR4/YLzTI(kxm57s<|L%N-$.6 <ʄU2q~YK.?Iv:F1+[qa`"U~$q;r- n)9w۸?l7r=f)t4»̛̻ӥ|Gzx%-5"z'"(I (QвA$&* 6r@~_cŲhh=ڱ>(|fJV,L.]g P TLJ&TBJS)xS?L(KO-Q)pw ]ԛLĬQuUn>#+H++"U֝?jaH`$a٩wЮZᅋ/u U>C?+Ζ.k͛iXYDr~ J \UnlA1VZ^aLI!WϬ^^,O?~>d>ݧOK>MOO>%^__8n&LOO?%_'O+a,f g3SۉVC&̇|ug'r껙$7Ӈ%9c1[-$1@R?j*rTޢzɢ: MR~`CРr4fE"r0(y J=Tף%F9ɻCì8a/RS/Vs+ k5d!#'Ywx_-=YԤ'DR&JGПyX c,TTWYMP1/\[Dv!Bэ^2Re-7z6Pgs ܇|U$éRIt50{zѷ5 ' 3 \(9ݠz9akb~bh)SBItۂ6$dKbS rlb*|~0z-ȏEw2W'Ko| gW?-nE#?'_,fB;ǟ?}cB̧O9y{ݾ)dC]9yJcw]B>O;e>*wØLZbZ[:[% z-}iCPvSPFYWͰ.1 iXZLzS9$tATAS>Y#/}E1/|f$䓵y ~wXIW=^yB?D&$#h C b )JL sQ+0Gh`+ jDXr9uF- ()*W kjM-;*~(9*+Lm9X#1(-Frb"b<@@J(X""t f\Ws9)6O:xpodOB䓍ԫ@x1i6cb<#/'@\G~E%sbj1WG~?*x2f#&mByش] I|._%Hjabvz:L?Y˿Z͆rNI Qg6+QCJp^lUM9^uqj5#%vZǘ*7 a`)BhլY䖢OXc:鷛ŷKФ&J?hQMsB' ybe5^Ҫ/x)9k FxUTc"D2K=zJuG*[_ߦ^{4 "5}~4->ZLF,ƞĞrJ1G3G÷ Wۜ< = T5/&y~*h}?v}z{zxxx~.p%P"Y `MyBn87g7o`FjO%k.7,BGx(̫]{)6zͬ%YyYJO39n3r3vͬYkz&H j0jS@٢]*O^k-7)jK5ZS)iD:>SF j%T%*u/v=ipe(+r&Qя`V@Ts&&vl7uʡ ^)u]-hg6 5+Xf(R_.h>УMSjL[ &\ gKNzQ0p.$jTy&p9>q{@q:؏ ?M q&Z 8{<oV/\HO/I<ތ?_H?sgm1P+$b?vCǕm]Wz~>c6/73Vt.||nJ)QʮVKTb걱T)e[ODf: EX+;YQ]ҠQ,C:v1oBtQk(Oym zS0 [e=9wfnGR8lPKS.%_SҬ&6̟f( `5ZU-iI=``Zrr-9AJIWh nT۔pMw)!]$GHR_{;_MB.*04)RU^jhaHЫoY2bI 5*e _bF8H -!-%8^&E:bDH”PL]lrL̓:er6_8i @.[O*Z :s۫?~6w3WmL*?i.CMGhp:p1 >ǟ-GQ?TwjC'40|7}o_(%2f.l-r.t7S3'gkWgο{{0y ՟FU\\bՕ\40jSQoOEL ˔^Ћ1hRpO-p$Q%F!$|* H&X;-`Y pԳToΣOf/gibi"X3/j݉^mZK% D% Y0FrZv8S5Lx3/0vWJyͽe: L'z"\/69]H0#:K_Z2tGl,=>2OTBHĤihփ)lG{lHpH& ۷Gf`~H ܟ nw{gZ6~pU'_]}A3F|ew ~p#;Y6o7{;0ع?x<؂7`''8~G6|o4 Ʃઠ}`SʙVJ뷟llU|Ϗa |{bvFcro~'!6$8~~S;͂}߷x~6).oolv ;6oܟ GU|r&ߞ=?l 6 }lAAw}K|FN6f? ,;*[*VOFk|GlW G7#gpl\WkU{g۱נ`ioU^~?8m` iN+ގ>crsNU_  .ÑkpY`xݷ vGyvw|]p;w=w7f_:{nDܳ{quwORqs"y}u❫,hk?cI*uBn(;~}.34ϒYۏZ{ausST"_ڗy_י#'aӉz7V\g;g9,>E;N-їvڍz) NW 9<`NwO:,6}/n8<|DM:;ONnn& G_ǷbR:_77p ]q=m0AKnԽc.23lt7_Ǔ_Fl jƭ?7H0L_&7F_Ʒj?q;b̅kuxy43/}G7Kh z F_uXFh1nc0~9s8oh'6\2'_n4T}N&ȼ|$XN}aUsdfmk"}!s&eP]92C0C6;&_hk;]T$IH}ۓї_7i7O:0c^BV`o8'v!|$UQ{7RD]dۛ&d lء1w7D="DpJ0MWvw9d +nt#sr!ǺKw0i]Ix@`?d<p93c>ly~ݏ_ʹE8y<ݹwEiN݋tƽ4yݏڇ!E4Ҿ0Y?`x$\"!\ev 됨+Vxns ݛ!mc%1i{̅Pdt-ȝq3x9e 5 ._=DCܽ0)4ڹA1H=Mu>=214M~k_ ۿU ?+M| 8] ' ng>wh@d- wQS!@ʄG)F9_4*>EÑap"C:M @+h'xHs8XفeDyM4s3〉`6"'"xP,eo:Q$nH";:!{7_$}.t틂swAf '\˒3U4Mbgbo4zs t_ވ,:d9nTBNXؘ&a9~&Ih^d7z kDӌz\.p-ƺC (ܓ &1 妢#iDp"ydHu8kw}]7mbCdUQ o膡X]/U,cdAsu 0 xrqi#QKC5;6v.!8!xZG!g'pQ qAǼ{j_#nC $T>vEeۨ3#GꝦ~j: !gnьO0ke*.[{!@ߊW9"{7ydEQ~t2;=IvGW#P.!_]#P6Q2wi&Nvw':dKڡ^} `!u4&Q|_uiVn:KAP\J#"l>[e'NucMR 4QI$GfDteQ05S@>Nb0&P k`"mw`  e`LܔU{} D(!D4>!w9*|ݶL!o]vnk~N](tE[!-!/d^YW6_w#a?{{ak/LũP2-wN= GQk'T߾v$RE1RRG}'jAqt;ʍZIUSd@݋U2dݎ#Ɋ0c76ĈAٍ.v>۝QGN9pr Âvwl`$^o,a38-߸CڼvCcw6\\oENPn@ *.cR Jsk" ^s԰lԯ ZN8c$KΌoĉ#0NQ;v{ЄWA{qu fe@S@4]= -Q5)Lz{]CM4}l"=Z0D[;QkLs&s5#*ݰѼ&C5Gc8ކíXsZ9cU9&dܳiyZ1~jjx` (15TClraJu3PI /kMʖ:?HtY2֡ bQOzܫ~ΏWsem}i:vK}ZOxDpsc*1q-bel$wF]G C_Kao@'|f scR1hWюrcddM] R#Qw"#I0<&YрiȞ%9N SkJDVXj U@ܤ'vⓠ#3MfJݎa8|mٿBrX@-$!NGq.?\ȒPc~I4%Zܝmkپl\8 ܹrZ'䍄wuh)C$ܣwŃ敖qN(IѶOI+P~li rL4t8:vw^Ry,T#i6UnLDc3vZ.nB9q`B!ǽ@O{ꔒ'jk׽Cj*cUH[nv9( 5q-0kMFU?A?0V\jAO(ac{X Dr@#;ǻ2&BkBQҲQ2 ^fBǜH&xЕ`SX蕌wVOBФde/ L)0YbdƸ^wܸ@6Μ}*\WHduuRf?l6n_#z;qpx4]WOes; &X|lnxZ?s֮a4YET73 zG:>qS!IA?OP `2I I&-Y["#@n6ItN$c^1Aދ1qVCnO3cBH\kꟙufbyJ_k*"RFLap)rJ!!*fRHm f&E%cC*HVyӣSLbU2.e}ȅ=nXF\We|U,ʫH`_;{41ү*~wd ;T`D2rwPO4?;Ԭ/WY;mlP{rX?B9'q"#}qORHs{+V_=mJ\N8yjܭpѶb9dC4vq<\ p5ug 5Ee,b(ߨ+-g'tɰߵqr(p+:"!;r_e$h :}snE&NS!vn#0J7\cPP E*Հ`6P-Qp+y-$7zUkRnfmHA!61< A&"*K$Z&w:DGSq3 Uˎ'f J_U)"a9jO$3 |T3i?OE1ݽ:=0g8y6~BЇЧFsj̖l^ڹZek_)smm]7׮[W}؛(ug7no]ػuu+6Mj%1`\6T _6vcX0Y [yb,c玃UL3nǾpk'V!ĤWYU!,@BpJ1Iԕ* oŪZ P#]YQU*mI;0Bfa e+ X! [T1"eIng̅O@ۢpCZ| T1 QP ~ÿcnQA ȗx6'a7l%j'@ @ϫgIH}Sy~]^lC~D7[{-Y[')֩%8^ nL=2fol(ݡO g.F+7ǭ;xlD QLI'hPx='P-=7h; @8N@7, IKRͫ)bET$prajH}zb @i&%Tu_@C +&zckP8\K&E6lB)xj@b 2ԃaK5VfL,Pi E[(C|z}P4FO^FhA0wA*dG0.Px>q(Hu |],2T&[g쟭p'.䒓 ^бvbf:{P[>.6mHBBA ^7g`QXWP,+5QdcGBPWEJ"!>C 1;"SzrUJ>34?'PW.|`jj ]ݓgs'/g/]ٸ|xfջO*+-::OiQe+Ns뢂Y;klEhe|X_f['kZR]+\>in59NZ/ASfgj7i$;pdΐk qr;0@Uny-ׯ$ZI6iiq^^<,67UOr)Sr6t(D~fg8йMM%HBoQ5:: ! v3(Lpx E |FhjH!PR?- .[W~e2X^="1_kˁjk!y- o TRcA|C9M5waifua'ե^eS KE|8 O|h *z$ Ky L=A"h@j^c*B7:Ö΃9[U /SaXB+!?'==f̢^F3=ԳNH-""w~5]T"1 󊈑$%M9LΡ=L˾EH?Xж;*;$g5Ȕ ,TIm}XK奃NU󧵥}k'T]ڭ.__iiuqf|Z_^:Dief_h㢸_8]P>FՍc~i4t " Y_]:(ՖK'9H`-8N[cjĪr혉7͋)K%ie|Fg2DR3ejK.sK47Bp{tR߼ި. ȩ Sm&Yk֎xBgM fƠz(N_83ᭂUR^t04 Gìؐ}?TZY)7=bxJbUCuF۷P ,LMݻio>D&ou(~O&$O}0nZm]<OI|TG3e΀Pju ~qv>wT݃*6Ţ%^WJ s[W{p(XWO Ź ]O>Ej6$.unqD^TtEmksAexT?O P[Ǘ]%mfWdM慙0:⏠  Rٛf"9,6J"xv-7)xIVʋg U 8O+W?[ЀK\R6'@&HH䯑ۂzTr8Bk"oT_b\iPJ@ `~.Z;7D,cJɡ㨢S *D:Dww3)뎚ʫ؍@27IZO\HZ "D8Qz0 *iIiMHkY"hf@ HF\o>S>?~ۖp5>{{mpTp畹vX nez7;^.,"kkE/vd+ g-+Wf x񬦮˟vk3+ꄲ8sLmP_9oO-OwD Ar&3B ^T& ;3")!j>e+E[vkДr$-2@j<9T0 GǃǃA}n%kvç+%@UZ]ڀvmk:pYc@p ݂< rb  o t3Y*66yYkʁeu#.hwǶe$QI.rZm3: E9GMA0U lvXetzA. NI;<ߑْ14m(a7bIDATAʹ&|Zeb!Ujd7<MAvav?~?aa<vNFe~qq0J0>?lTeV*|(#AEvf!ٝǭ*AUnG-Gp|Diu<)LeWO5 *%ӭ7Fe~iuȉH4 €L;a ?2i_0L,?҂R;tV[,ϟK3歞+'Qkl{וa5^3řVBU9(:'*p!B|;2^HĦ2$&§WAeעӂD- dTZS;xˑGVBzHp+L~M4lQңlXܔ߃DՑ TVp )4rTL!2r8lVn6\kY(dȓ6g re f1Ј .>mXmȏ6X$('է6.^~f0}P? ;w{%6eetI ȭ]属cZي]IzIo֙/"S_ٍwKG>(C XZ; wso Kvksy~NjNP#*4) a;~FW+҇ .B m`Q}miz\t[\h٘'͖˵I~0*0Eήlǹc;o~(pccA):pq2f0%=%Bu#Rؑ2 yH ZԦtMvB }~WYdV?(l(?dVWTq("` }Bէ%NN$Ih4PbA2*LaKؘX5( =D 9nEV`FhH_Km==aT 2RO D@gl7I`[:I.ǣ۴unlnR7Z~Rll]mx5_d5P]n Wk^2P'Zan+N妎*9EՋ!:;~Z+.V<٩ZVaJ /$ǝUF9@Vi~/~'+*~+vU|}~~&l! h LIMP8dDEid*pXIͦ'΃Px]\nDuǏMQ:45(аT0a)k" 4HP8Zfm= S&#NPfz*`!fRf-]kV] c?vaRF` [HC+UônD\v61,`$P `AaaIFtAgLRs0qk[!`ƒpjUmV4-'F_O^ޯJ8}LYϿn4wT)ZxRkK):>+/l-)>БZ%2TYiiۑR(-kt:2őj_*rQ~\8/TYN+Mk<:ҐFCp׫Q#8 -$zB=*a&Gu7<x# ҿy8S)?k' %lȑiQB]"@*1LܓLͺ-wGM]eZz7XR6C1A nZ'0T|䍢B1XO*7q*L`Lت[r$l9Tqvbglj$}xzYZ<,wXJL˽_Om"^zzjUW,Zȟ:JNZRMLZjrFnU*!6*']nt @aY*^Uzu ,V͟K$ a-= E.晋>f#TZOwSMvs平Y#Zloњ_^RBb1!J42H͌ܫ exZ%$~UL.3sgOjq0x=j5T^ڼVivJZ3[2I?l>졅үV nfaw3^|S?X/ޮC盙Kw[n%a)4 |R6ϗ8Un|.. 9^ȾXG6|MWF1U6S0pm'+9q϶@W="^o1~-fɃ{u6!w+3˾?֨ksL=]!1f2ɆFajSWH@XBQ2%3M-4ߨ YF]|XÔxzhb"1,ȕ5Rԋ~Տ֝YMR&HhUvUԼԧVcr\qu8v+[WH-\b(RMIYVޮRW5u[~'"_pCFS X.'ANBnNN 2ƒKIaq-A|\?刊Ź5sYa'a3Sf~8{-Ld6o7P 7ɗkgK'7;ٝ˥䳥ۥě NqWMmW.k~,q+F>" 2SxTR~M)~!V&13ԎIP95kVnf@*AۼVːq@^a(Gy}ϰ}ZnwSWy5bv8A=[̼]̽jja*ԵG@r~N"(qUEЄcU5r AM.mBrzhгrOi5ӌ:5}U~7jv 7ʮ晔2 (U*Z:U S3)(Ϟf߮O~QVQV*U1k% QjI5LM?9-*D0ꙉcL*A(x씟?νHXϒa S7#@mxRzc٦J?mȋ@_/d,&QGoVk ).'?mgRKej4[ b)^ժ_!8MQ }KTlm$_^ޮΚPVjӭc7$VA )QsKET ۅnzjCl 2=,~U&z|E2OWS/2׋/ד/Ws/WRoK)妥Ӆc:3tp*ӃJ[JK?|@bS`Ǘ4pɵ.65D^+Z/L=5+5@F´h.dV\5u.V0eֶlzC\cl5(6>_ ΊYWQS _B^ܓfjo.Z:(lAZbK-Ajу 7ED;@V+.Ǚ#d5pzOWoV;jjjjz:+.~\vf_IP2Y>VRT)Yʐe'$kgzVMr%VD)P S 8xyo9ZA[* G Akb5ךv6iB}8z|Tx\K'zNwhL(AI(U|(eM_ S'Kɷ:|A[ɒ7ߘ6{O<>|AC2rK5~̿RC4}R˥gjhKu0#2fuEbDpfnO~NU*!pf#~ ~*Kj~. DX~ z=|խ 0So'׺{3wNoެ3ssۙWK zNV<Gϼڑ4GWG G3[rsvRBVF_I=YO|7>-E@&QB*s2Q1PB+K(&tAJvJp#KAYg\H@7K=>1m=JdN\!A%\R\yDIϛT]0)$D7}3 2sVR.dש̫ai"f%Tw[&so2) UJ+ ?*l Da?Z !zKMy Gҵɗɟ/6/)؎(=/6-> 瘗 rEe -V)7Ȣ/Iڮ'hRoJ}X$#R.UA#j`܊o5, d^gm^--vPTإGZJ%8gT0h~z&ͽ*ž?? 2f5Sɉ+ү!VS3'++ĵ%yNޭ'yE|>.eM6YK,e* DJ\+ <}U*4||Ѯ\ڥ28AbF+5.}H=`T Fb覟vULzece g`(ha71y*rnn/a(b5f3||)ܩIjw]8bBҒRMUEԛԓ䋙FBo6s7R7r6o6ˋ'KmUA UU:A;(z]bVƴ()c =ag K-aW ,̍TP@ ZjkT#F"G/Y+?&~toGevϋ{Jv(U[f4z Sh~<}-y>|pj-x>bZg>l Mj6j10ďÏ?FF=O]YVrԋS*U*K(j~?FzYVJ4tJ%FJ@%;_ SJW=F{֒W(4C-&2SYr![VZ6Rl)1:UYҲ.*N/ SB{%K5&=0r eQ(3r O ʼ"V< ʾOgG$but0WnEdi7PKSoqA4=G5UI^̱l=(fpcK>_ɬ|ٮ05ꕊjf\%at/Z;aZMUAd^&oTAԃh.b|dVcXKaZ.9%z [+]t\FμHȿٍ$%FrBF,e%{B[JsRd?lsf=4tLBj m>n/RLRRBRt䇩sDQ>Wsh!LW@CAI:Z6P&Jy.kRղ؈ FGQ]"d4Jl`MHp^T=E=roj.Q )-\ b,ghĤGQ^.1O@8dOY9 RʛW9=]l*fM3+ZIRl\ŵzһ uՆ J{{ZdɷzA^7K. #U&Ig  d180,hTSJFps>&tȷ}=֚[SԻY,R#^ #q~a:h&hNH/Mn.$fg ֋e+_h拍b6.R?O?^=_H)f)x%b%Be#LA YKϞ/V6Z[ȼۈ>OϗR?^g^''՛:y{>SnThtITZ*.7QhA Ԇ$ lEZ>_qg%B%rU QB^CTިy% F l%_)-z(k:/W ˭|*mRބ v+ZV¬}ph~zlhY0BͽN(|8(DP)l@ > $>JnaUZKr)n;Cn= Ϳ:k o0K4A18,UˇRuDk(X*Sc.5\e r#Ťl% ||"R"}y)b?<!3s?_br3Wvr%pDSҨ؏"? zbȏc?GC|]]4nnH<<\O?Zsgɟ3o?G-F0g*ֹ6_M\b j5nX#ln+e;_b6z@΁1إ%LWR$tRD[طbHBVү.RJ'P-mF)C8@<-Bz(%5ɨ%=ԃiRJ=>I2/=mCͩ4!TH\O]?8SrB\F͂9[keծՑ%n%4M5ȆzC:]SS* 5e@P(s=bI%O>ilgv߶v p%0hyzxQp$Ov-G_? پ0Ñ? qrm] o7Z;lw|qvwAnAopIp*8r3h|ηȹۮԃD7Lh6v؂#'Wmv ۟7z`k/o[{%*o߂v'_wO۷WUl4`N푠7o/v??soA. :?~շپmBA'8{w v?4?xq[ ~?t.݋b4_$t*۾Hq Fu:׹.uw]g;W)*׹U?Ix'Q0;vγLβp{i$I+b^ޏTzW~֋W~Թ ҵ^8׽YtUg$i,9T;4wpN8KTvg8<||O~s?zwxe<:rsG_'_>-LJû߆ϣ#| Fw !-vs[ۛ_oo~NzõxXkUNƿF7 on|w/y{_#^u_σ!¨i~ oon~e#9̔azk0/o4VVsEr%o0cf+sѼ e^koЯ?D 1g>el9_gÑ~$Y{,}3jiOCo4p:cw0:߉仗v(߉{B7Tt}\3._p~$ytsnżwCN(*%d^re{i'u 9t~d ֹ*v"/x1<%:'/G}~ta q {kfnعpw/Mi%-iqyM,>M uaFh:}s8ς/#6\ˑѭ @xpxx {qOcw-WWt}}&!^qe."E{'V,' N8۾,gawY*_]NL,ц1&8ݗ˯gHlX{J|$Mlr{۝.ۿ67 0ϵ7wzcrwfx&o P1é_{5_l@$b|?糗(uIw.h/^$o[3*܈6~}ߧ^hd,վd&=B>˶ϒqܿ'u]Ӭ}Hra;{ϷSa;VEs`psG п&y'Jq. k<E@#ᒸ D7~˵g0N&p( >a!0o]D h/Sx .\EcZNS{mh҈떐:tm&!  $¬9I4':`FtB(_+N$ RHZmv'r;"eGA4a:;w(?<:fj:(16L=ʸE"i%Z(q-Ḡ*OGFCx 6w'[By'F }E?y2r4R-G$ v(@3H,Q) na2F+g2T > x5ӵnA.8# [6:D{^FWhď'hA" [MWy Ne  IN&u_.H;u9{Fd M|vBqw#T #ovzn$ ˾{I|^X#8H|u{KH$zgv}&*?KֱQNRi".0x)f!AU} ^!uв5[R885Aªg<~mYS,eU8@-&Mt)bF) 50bCjPۭԹupڀ[^I&Rn 1* s]6 -) 6. |vϲ\ҽ*Gx'^DˠtWD-ə&}L=3I1$F;bjMj@4vg&HfµykRz IwD?طu3WbH G܃} fI FAl^fCpS*yw':5p놠tZ%i/>˹gq$&옪),"}#7tG[Fc,+a(OUf{P@BGA[%zT8u Eޤ-Pt2'no] {ÈBuER5ە˺Y4۹,NP5k}8m̌;q6%q#`x4=Z1$f, y4H8 vNZ[zr<\‰i}F':Nc"v+Xz^5$dpXF䗾Wm/$b,D ->rEMCc/tzqw8'znPW~yNq%vڿv#>O(S&ӔB`{!guE(ySŊ/@h@4qbƔ|R.C EɔQK yxWYj4⢠l6:U1!njǯBhm)b ܨKdh' Rr2/UhۛwR]>g_F*yzm-&b.R\eHbݿZ%##^MKg݈)xP>pR(D &4; Bw=8ƹa:n׎Z^_ADmA^ .#FUIrOֺjVZn{8Ђ##_%gIMobL\HkHq΀DXC+"u:7ڲ wo*0ni;cV@_7є} 1NFm .;b$ڏ>amU$ھ~G$QJQ9ag7 TXُZPiyr}$PV1 jsG4{M><+eSPbN(QQȓ3.$Z s c]6\ŵthd4R$Nzd=v/ɔU}lmVDr]'kC =y{(:TM}hE騂<ӽ~i`,ފ΁,e(cؚrEJ_Hq)$Cc9q F @ӷz~A6et7ZqHi8N)rQ{R;pfD>%2}`$<e=.OC#ؓKbL Sd7 }XSY@4~%2 Ň"GD۠ }nc\K%w(9uO5bm%΁Ĩu$;x4Wj$8NeD;TC)B b8!cؚb2>Dp2+dtO2*FxI8P&heT 3S D v~Tp&^2 ȄK-Po 2)(;YF|Ik&~2!Hp &L6}G2hֳO)Euuf<1 WM`Ȼ uP=JDC\g:gq%LStz ,]:s^$[u\j'p00 ֌ tCV nzBr([4}j$6*cD 7KgD½ӽM܃l_q ܚ"{eug7ԤN=NxbqNs,,f|qh!qBnҭ9!B݇пA;K6iO::aqS :53AҠ1*3ͥO2Tcai QA{Gƹn#*X@<FQ/fܙp?Gpvvus/D9b|N}(Eo(<9wA<㘳"%*'f5ѡfI iRx2Vn9edï" CFC N ?=!(}<}.p2̥)cPFsQj=qڻqk+Kġ /\%I3˔[x\U 55wf!F ^w:󢧳^,z6rUKTkv~=d'=* >Fv Vۿε n,LޠG1 Y pэd>$>t+N'gɒ*t*~gBZ 8Wfɜ/AS<&%9R_ݮ ng"],%%ш)1nfc1SƹUD:s=\E}'P-DN9M8G!HLY4[Ծl ٻz>(NusN#6W]- ehIA-6^x躝m{/$>GRN4f`u;-&A !`Q,Vc@*B0FG#;Xm?"\ ǍJLO:mg$+ w(F:ʠ3@@++rȟ ^20,#&R3E)I{p0E-ݛv[?bB˔#jQixןG{/)ʩZq8lm^Y{QQo7(` !0.^ <-\O2[{WTauοȶZ00]$c) ]V OփJ{c5𪷲0!KnoBK (40 (4MJ& J1 NZvHI>#JI-lҧP6*Ȑ"AsrvOgoz}J3FQ&6qqh&y{IJ`VK)IPߛǥ0.ЇL`hSTHʍXYQ㫟A^`O=I<ȸ:k !/ݙAs_D'y ӂ OMʾu#^wۯNUDqo e6!ˉD:tz7=,&#og҅=)xT| @/+X Q [W6DrXwB w+lDyPu}㫚{ U5mtNP&p o=t6K+N/9iw*QF8 XK'8bGGpe*Ե#;=Q| =:!Jv~L3cjyw{p~N-dacXLz+*HY~xVO5W9D#f=5n;h8$ܝw2ͮr3ﴱo`~J]S;;\*W8 f0o]E$.U#Z҉:I5 Bu``ㅋzvB~]Jg?gEun%!3U{ώc=J@{FgVG[uˬ3VeC.vbZ Yۗh} KM nPjׂthĭ+ ҤC-ws(a#N8U UXk,fA %d1w_ŨZ /2(U0,2)+iF(Џ+'Ґ;AjGBKrMc01`އ15\^Rl@Rex8&'pǛtt~TKq^8nttH9vG^(#PV sj8öV=׊s;Zeُ)fwۃvDӌ?'C9_޸M]}e[ɩ/fʒy7Z G6Ѝ^w԰!gƝmʪi=jP+Vn5(]R1;{qeHviMSPa&0b#wa3DUM;6y)G*J7~{̠d DMP P~ikb9LMþSR9:N-XnƊu;N;gڙ="i*c!skkk5x@ L٩n[.e XwV?X{'E_L)Ha9K%Mm*0$zچ(%!@L):QƬ횋a1@G~Yady>dZOsnR䫇9O2Xߡguk/]f e^1ѭ{B#)KϞRyѻ b =FJ)}xKWEȢ!Jf*,t?!::v׊Lc +\4b^ ޸"{qw8(?4߂-GWpVu6tUkp$[ F7YP%ZEHЕD<&*"d+-?ձaq48آ&6*2t=;]'С/B#)E~RB?5^lE9Q81pL7E8IkS46/J~|jV:4l];OSoh^Slb(08{Tw<0 0HRR9S Gꂯu}aybA7^ubukh (a %yS$Ոt9N׷/S{>:Q-|Njx3:Ћ &Rba$a0E ?in~3\OD(Os@cxBv0WG0&ln(&=!J Cvo7.TrB^xRY9opcvBwkk球 \_;vT[׶U]'K([ΰTMU^{" HjAFPiDZT5ȥO(`F*x5yW"vE~\ !7l lz+Y98aFnm;Q8: 0\*!g;)߯=X׫\A;*/t_2!NJg!@g!JedZ,7b7¡Fzu{Z ~.RMucb?c: dEmGNNGڱ}i(s"ܻa}-dmPAy!(=Ы8>I !Ic| v%}vۤ$-dm ̤̠ R$ H@ Mo_ R#2Fo c8'깳~X?')¬)61օ}xm͐}ډ5<3}͠JC}i/$%<R. ̋d pAR$rjК#;1v6}PU9{?X>-Vqr\_>#tk(oMst޵.T +WMq9,'FU-9`Fxo D&qZy@ǡĶBZ.-$ߙfGW$ea ezH2]U#`kJ{0Q]9Ϝjfkm_SQZۗꅳwmkⒽDsZvs:SohBWЂ= tnڋ>@rU&eS #HWso9pjS M ,LKl @2Zu;@+rQk(@hRK&";$n d\87_kHy?i=̟b2 QqaD쓄 ~'x:7ngZtK|TY"LcS2=Z9fbMm$^y)YdEϓT">jκlp9[U5p6/[Ԡ+Q`Q[Ng&5O]XF_(3_V9BxJA 'nfA¸4𕝴I\ L*Cq TS Hd@"v 3C7_P}깽ummREʫ}ۇ:lݏXYk뺾;75K.iWiq\ҩ(Ǝ'5Fq1S!TI38RC~ıYǩ|Vrq3! HhnXb8Z~ u411!-{07v4Y_?uPB|\kWuܻEL 6f:"uKncz{Bs~kkk_-o  E$=Mڸ@#XGL?5Zy˦bTi35~m)ɈYDXSe٩9p1Sb*|w%hH(||e:#\v 7u=cd,k6 bqܡ 7=J?vwfoR֩JH%I[wg+C"@qs<".5W]obR%$PG I+Zّ_˧w9>!8@ܑ~Ck{Ь x\__$.XRۓ g3"Dn@2jjcѝKTh./Pv9b: ('P Js `K+fC(Ȝz`bv'*cq+^xC;wTWXY ot10ڣz1/acwN8ƹQ-r}g #Qgb#}/4 LF"U@<{DWӗEǙ .VY~i_\]X؝>L$iA~× }uV/?db3n>+c=P<NF͘Y* ntҠ6 [GNwv(*ó7# qUn"xqhM|`%L]C-'K1 Kqydr\J^ tϽU޴D>DxSH`$<EO˓bju-\F9 `BŴ(J7RsI77s$.*,7pwwdׅEjUL" e_\FgRᡗb/1'2Xt\|ִe\y/'L5"1{+eFqWu3ZOښw8m!ڟdl0ڿfW/8{]v~̚JzMn&㼙=iIung+NT֬v拹xYbeSq>bh=D"mdx.S#ēt;Ek+nPh<FP3 ]t?ifT>gI8 > S+ 8_̗?3(B8@ Hl00W\-ӏ^[KWR7=>*C M0_z~-0_?9靁̩SN@H{ӗPx<=6&y;/|+hw-Hxw@;1<$zɵ@vfX/\<R nRs>wǐK<}:{ų\5{go$kWxoZ?~YJ~lU9nP(_O㼀8?&Q]?T O%9JA||9qzTVIqz~-4y(ͤge&XibvB\QA3,{;hx"ƅ8UX(Ex4/'(-1M],hZrNKoĝP,"N?{*K"݈@r|L"6woI>8J{&'-N5k"НVdz+~\_w :wn %M\@}[y't*.!xwE@^XZԑ8 əC9!،d?2 :׹g/e "W21_i0P]hSp|pxu|e@ LLm|P^Ak^#}/üA#M-ݭi|-~q +B-{_?'?v5٩#a==n܍rcTa#(_Z#o`>Ǔs7qϝ{tf'Ƚ(Nr:]%3+ 3D ޫFP=gka[`b'S?G{L3T5‘BjxPzק rq@ sb'R@Gd'OqT;w厥+j>^z ~5;C/ٓG).iӗQΝ9 IN܈e<ΝOt~Wϧhռ|GQJDȌ{+r#Kד9JC/_}x1Ș)b9"B?4?gȯ]`YY},hApW{+KI Ri||BʛLs]PGݑgk=J:~ @|H^xJN1o7'' 1 @~>ۓ]inP ,ЀU؆>Yլ?0ߠ R)@@X g~`]?S1YJ[!P箜!7z?}lGyFsk.oU'14V@}"j/ۯ̵T8t3WngٍC\v\r^a3=]RnjN,HXpN˞s<ӜtG3*/^26ΘZW?<͞!X쑓3Hr?-o?fL|kQ^ %o.[\˟b;WB(};Sqthn c@'0K@J.6: 61]<'t9Vʞ?DLiIό-(in / emaHC1IҎI0]rNO#RsM/G37tc'~-+.\JZt"#AAB9y68$* e'0-Bϕ0qr%\HZ{Zy"ZBOGA%JzRK> '! 2$x7qDP x,DpneΦKS*%7"`%7(ygn-BXl\H3/tKGvh "oΐnl|(a<{ f>1^Q|R$n踭G@-eϭDC'd7GN+uOԱj) ˏ? kDB*pb Qp)Bxx{ 3g)*k6~ΜX^5*K!"'EB38G?{2>x ӸmM{7{fg1ǚJ7GA{L+I~Tu+3V۴'Sf\ϕԑm37DSXcV5`?sW^̊*MD %FxNnzPGѺ3Hڨq/Hz`]% .wEyj^AZ\@t䑃,q3'~H2S?sE1%Ϭ!9qʘ'5OJ7tFӱ{HZPE+ S7-1HkyuJ:?5>EfRԨFًKA9Mmj ߼nXI5s3ߨU<(&ggc6}.?7i/I:_4Ӿk`A%r'ndT{Zf)8a]#RwM[AxEEAi|L Wb2 ~-^]I.TY(uCX5kʒ/?^9[xtcgh xYɦmڥѽ\NI&V?uZwΞslݎM#^!KvMB?<&hc0jg©/AIp-7Zv*[ffE+n]>"{%pm9.ׇo IMAZq`94߸c7q&jd/ eID>_]:/9T\%9-_c+v4~aG~Ԛ=K {|6;A%O5J_L$sE]t? (o`2V` [haCv Uq@C'.FV?6X(Xb!Fg|9AZq2&abԼM/u%1K~͘GQDW/ }*x.ߐ"aMfx 5^4LP(,ܹ.vl&nQV1c5r>Ĉv^K+kPD 3By,}ʷ&U<nǜT[w~unЂ^ /{.r uЬ/`@tY<-+_:iIS8D|hd0[ OHڄg%.?Uy* V)f cN._t\ʻ>ra~F&iiTuGN+ +VNr|xW%-rR'V9:!'DG,1[+3~ch2׺۵NA8wıoL>; 2p{{-jۇy6) ahɝe&*^F5(`1[gOU5=SB Ts`X-Zz1| Pvd-";\ *9ip|oL;~l"4*iw=qU7WT<#5 hss 8hU!_hG+u{>jE܉{Iގ  +],T_"/?`q4Wbr8F@3wa__"thM}_$Ơ(;SNHPרh{ Bёrfo:\IT=>2$#9sWrF>⩢xo?:m6}PRa`AWQD+PP3S[!Ĥ&FJ+TX:g`0LԑW8Ҁ19_ś1bTy aalp T:wTUצMaܯ-6D#S H/~ 4pDk餤=&:a UW3W̃&x:8sS3eoa/T ^:s~J /u$zlGdh;R "q4h#c5+H8ʁ#%B]$9/\p'~o왉>m[!<Ę{m۱C+VCrN?ʐUnwTBha9 v\>[Q'Z3*&H6*9_Uav{e3Qxf=5]6qVSu4-w!3\.X E pwRUHi|{vc@uɳ@#%V!d$<&.iLa*0!ctĠd]v]ܥ x=ծiy.㧱_5/ҥp! pUxJJJ6 D)[\4Bu/TbH[?UDvԊp/> @~e)tsv@PJ/DhS{̈jG: 7?uI r>Ϧ[ +A.k_<˗V r,PUH%"O8 >٭ΏQ 4O /}RBۨvPdr0騎I8{)D=/޵wPg~/%fӯ1DO_'H ݯKZI Ul)k%6L8hzA@" 0kx'V<`Ih8Z#1!#hFvfH~PP&ӷp |6Tl89#A=t=p_xL0T@a#T36f둊-39xHpR #RCC&AFR򤣓uwdT=&_y=pĉ {)Tf Bub93@ihM_?d CE{s T@CesK7MI:eDK" T24Ć+ >XRw 0Ĝ3.vB!%QhnN:sփBʼn")T#0S!t1Fpwh tck`-;NGǽߺD=J ޖJOE~F+B04 <*=6T{NUonN)U{,r􏩀)e谷W`#3u-+q,Gn&]< Č֔Gzb㨿0H=zc1ڊ[65sf'wf.UiHI|%T2kvݚ]2gFG ?2rl7T:mN! HNA.5 p93 _&y(B5b }DT5m uYj)OgA9[ѳ?yGOJF-iYo𫰊tH5P=2WGB& x\Jf6|l#5Z#=9se\<2q"h/`硝<4G.RWΜA܍j#7 } 0xue~:춓Gx_dDD;[F׍/K@Y6vP%˰He?\d۬Tg;tC@Lg?l⺀'I΀HՏ"~}U *&oUcVU7L.xpݠ4Pʃ.*)햍ro-9Λa3BEg"96Jr/n$n GE`nwy? Y / >+4U)V+Db䑙> G4D!{`zF],̉Yp#qyDnڭC Kh~\% x^nsSuvNoF̨q!jOk@%}h{5;\f)|Jk#n!|dĎ \Ĺ8c k;{:НK *B;q<uKǙgO/X\\," 4wMU.q#ɓ?} 7f|jk5pQζ@`׺]W$Iccr r3λV v6p"ӌƊW[Ռ FtH#s9 ~M8=o:Yp,X?#Fa;ˌ4,^K|t y'`>{ 0ENP":SRk51SL/,дw2Dw#ZMZVLa/\ntej|n[ >hPj-"ǎN{0 Z $FE@1=Xj [Εws7p1{۹vIHczD*Z b.qɷ.==\zHڐ@*d^.wSԆ@p@fÈ5v=*ZC#ՒĤM$&m^LK]G3v+@tbMS'@D6ce:a|eLo6-AiGm A[;2WV.HvB5U/̓ҺuPԻl#LU6I(N0zV>z9Bi;1ʃjyB"zY*j0Qg|5uܱ=d5Qf4WrE_ZNfosm* f>,ޑOc\^sw30)(oLaR] wfo;;sdlgGM:qhouŠI`0bUĬ6i1t"o{hN3XvZ9t~kfFHBE RCRnrnb覸^/$"mf;AӌX3#Erg#[L;dP=l8$Me0$mDe3=>~8ЎܛruL A*n:jKR:8`U8 Zg1$ `}* Y[{[p ^[zfG-ENA!Q``醉F*0WHdstZeRd`fD"p<ة6 ((/{64;\l>HL7mytA8~Q^Gd$hIgiZH_Nww|mM狟~Of_Eh⎟ѳAIm@PQ]!37{jg|;W^$zQDDU5!@u!N3k7$M Np \s "Hdmފ"n\ycL+ْ\6 2%uELYK1Z@!SjvX u2\NoI!HMjg]t&PBtwPu6r09)LjAA, Na-[3Ӂ1ҧZ;(~^%qzpw^HЂW0F8/X:zNl.Jb~nkbl`J{.vĩ?Os1Tq+Ebm :vlf:d?gWB[P UjP v\`;vv@cc 61H{@VɍwA-U+cyulE;yd "qP& Gp6#[-9?k#Su Weuؑ3l\_΂@dR}$\ո[0ޓ/O_\Zdr1|gxPN$ l{"#d@k^okF{H0~c A=ldU$qxaK+|7׋nhoe5@gGNphiN U x)63b] +XNa X z߈`oC+vfZqnO_ќhy/X <p$TS%cKi3nnHvPu09yp^r\oY@q7wAC;J.JA!/afKaΗDw{f1aghňU`Pf߁H޴?ig+ޚUan޵^ľ& ;Xx{OQ^%*ﯙI[}(>#zZkWE/jF lCd-uvS8j̯! F@{Bo=ެ{ALXޡ9Uv@|+tCp (^*CAI%[mBzX]-xT䰇qWжmCpPo,v 7f #s׆d f%V  20Ckno =}Ut@`{S& l3m|sbws=\٬u0sY3Ki-ܵp #F$Hu6&*` %1f DD Far"VSKl 6V76 ,킆Bo->ɢ;Ѡt^'ñgO<{f= 5RgGU09[#UAl C!5y3'°zGˍtb usj0{8qDgx6= {<ϝo_x*$ >oRiFjlU)C ^{;ܟlon[ϝYvӜ ݫg֢MH^[hQ,JC`C~^Iwh r"Fjjxo-ZW2Ýʐ!hh8G/=7҃L"do#;a म\/0D$j-5ˤY 0@b`9^s[K@j=P8LNf+t(Kz#T[uYAMˍ0"@ CR AN-*?6ۀto5ak9vRN) Ӊ9Z%։ lt}ZO5Fd· $Ȭ>zLth"D{I`VC}8@sq;2eFsᾪQo /Mgs}peɳGݥCtf4L<уl+ ಁN AmOBRk#=+KdUuTk1;_=E1?i@^x5 d($k)=ny םZҩ'fx~~5Ƽ=@ZE?\ XSu"AZom;M;8 <Ff_U](z Q=i-kNQo:$-ӣ8o4ۯt'>쮷ϑ1'ڻ?׃ͳ ϐJPSwjF?`PB :~6nl|ޫGBF-@Lm7,9.H $ kګVrVߦhKvX_8;0}<3$ɋ ٞis'Ek[gxv_gl8\nM533*8n5$Mfut!U 5B .I.Щ^񼿝AܯGxj~=_ ,j7G]NTϤa*:J.0`d\u\ Jp )P -{fZ~/vW@a[do+r W2%I'KRlT{MZ9j} X#H.:x1% (QD[BF(É{;qv2{~A'ݭ$L`=Ap*Ǒ{0-?vk#5ً O+kii % F C˜ AelWCnH dUZ=mUu}޴ Ef`m#3M -<ˈV#8Sן% h J{MƢ.??~Wl_fE@r ={\MwG=;uѲv:D[Yq}UT0lJAb7vW*>}%ҏ6'~5y%T'0m{$Ҁ̣| {yv$#O؛%NWc* DJ+rN@;iy N8B> S<Z!@ Y=Կ r4;~!CD%q'oaAsŗT:VI錽X`v-UС 3 @3\t;3=q8{p&VI_ Htg/DXYX^5tQ\ڌF\Wit5G9ugmgk{?GWXPY/=\9g;;A >d8}p< ₩VFF"GeYka81X԰.Q:|{=_I?zwZlpOzD .fnҭv1Q66!.`EOIUwF<~7m2[mxWwq#V bd57ܮ AQNaNiwr8)<+=- #u6ntzjp|<@>*?cm2yAgȜayKXPRv rXI]ד 1u(35a;x ;``qQp- xdlpW[uPh` 03%2<0!HYlgsƃD]q<&g": Ow۞vBמtXka#tw=Na#1{Đ鶒Z=_>F>6'k 2MFR:r-ߓ*;9ǙY|CkڽjW ':U]+vS:+vQ[!:kin4㤻@kv%;ߊoٛ:ۥͧU];z/ηp1o޺|i[W{*@ΆzB6mjU}@l6+Χ`u ˴`Ypz(O>owWE92/ޗdkYn$@&Vڛ4GZ/\rvjڏ]ɷ7*d{+dJAA^M}{\Ik GݴƬ&KZ F5>_OݝJU,t\.Y Pk۪TDYhمm8 9(t'(o2i6lyRyHmܿs>1xa`k]'C&S8(<^u`SGƽ6Rۆ].u|f|,XLt2_s@Vcw>ߦ35hXa:wys{ԉ5/q(=ASaM`o}5&v .(\:;Ȑeg5 Pքѱms:4~}s+uW0D+PHwcx_H"o C;TmmA)nglەΖ-m#׷-F_{|e6 @[8k]h svV[B|FZ$:eco_П#%BnWb$@m09Do%)W 麓n#]2JMEDmǕBk'k^TpCHPm ]ؿeM?oMf~ne9Re$ݙLkc^T )"j)Rk:h`KȰcFᫍ+#-IJFKW<A?Z"Dp&m@5~apCD^1%= T@fx6}qt5[Hz9hy_s?Z_"-UAL՗IWzenAŪ9{3X ҭϱax`MX1`1̼ut&n<ڈIR0͟զf|+OPxݭn Rn맜U>vB Zй[I|N^o.DjUx+wG1^Ӧo!KvbZ-զͷ<p;mlm?~޾#'}ZםtS ~\6s0U|6n0oۏT` Plsb<3"p rg.=;.󷟣ߢ} M/UzW >F[uڀ|S9m-`]{{|+}zɻ$6wotm}/r{{\mNa=uSkE 4q }\K)>+ k|G-Ct=࿧@pʐٰMh I<ۜ:*ffk=X;XA;Ga~ 9"[Js D\|ÞpdX3I)[=Sp5<_p{@}t{=T *ב/Z00`䣷 3@4l369plN=զ04n G"8Tthx~N [ (!/' <6r7[@[| ~G7N7 9 ro=Iu-|:ݬ?h9b&T7ھ- o?E*OV(תP XQG ;G?ײ΁;s =pZ;J y_ݯַdk3-5BG.߷_&m9Y}+]Vd'XjZk[[kɇ?+=lY6v[=1m6oi3Y[QBwƭ,XV1A<LH@Kp8E IG)eihh# Ͽ&miTbJAa-@(#Rg^¥>|97dNq6^p9D^FIj!n5ysg/69 DVjѰ7#\d". zH%Їnks&o`i>bOkIPC S$ke(kl~'1G) 3t{߀HVHk]Aۿi3ϟM oA mk0.@nkoVoZ4hGw@?[-ނoVZß!;dݍb{+w5Ӗp^ zFoL[+_rn>~)6EԪ4?,zx[ T-128i!Fds4$'fɫ ltlTPRrO83bPak χo|N&уẋT$P&⎵=녋7^ptaum%]Ҹϓ7Zxw1hWu`q?rUfEI+( /-3h@~m櫩v(r9r?8}!Zupă 87 IAdX6M^?ptlm0wpZ[[nzLvd0w~' ۛUd{r5y1yVnc1$Wvp1rooTn?f0iq%ZDžOW%yvWuzAaY_mӳ>ƠOt%|5sA{׃jlD{+{%|UЦS*tcwEV? K,>fwf Cw;Zoݬu6Ա=gAxX'4D>7ц7*{ v"Ҹ33bJp >`a(>[ct܃<ȱܛ=nYvcrkw*Ur7q , $"]ZM/ S(-`PgHO T?uTK}|=Erg)~&uTIENDB`lmms-1.1.3/plugins/lb303/lb303.cpp000066400000000000000000000452451247673406200163440ustar00rootroot00000000000000/* * lb303.cpp - implementation of class lb303 which is a bass synth attempting * to emulate the Roland TB303 bass synth * * Copyright (c) 2006-2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * lb303FilterIIR2 is based on the gsyn filter code by Andy Sloane. * * lb303Filter3Pole is based on the TB303 instrument written by * Josep M Comajuncosas for the CSounds library * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "lb303.h" #include "engine.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "templates.h" #include "audio_port.h" #include "embed.cpp" #include "moc_lb303.cxx" // Envelope Recalculation period #define ENVINC 64 // // New config // #define LB_24_IGNORE_ENVELOPE #define LB_FILTERED //#define LB_DECAY //#define LB_24_RES_TRICK #define LB_DIST_RATIO 4.0 #define LB_24_VOL_ADJUST 3.0 //#define LB_DECAY_NOTES #define LB_DEBUG #ifdef LB_DEBUG #include #endif // // Old config // //#define engine::mixer()->processingSampleRate() 44100.0f extern "C" { Plugin::Descriptor PLUGIN_EXPORT lb303_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "LB303", QT_TRANSLATE_NOOP( "pluginBrowser", "Incomplete monophonic imitation tb303" ), "Paul Giblock ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL }; } // // lb303Filter // lb303Filter::lb303Filter(lb303FilterKnobState* p_fs) : fs(p_fs), vcf_c0(0), vcf_e0(0), vcf_e1(0) { }; void lb303Filter::recalc() { vcf_e1 = exp(6.109 + 1.5876*(fs->envmod) + 2.1553*(fs->cutoff) - 1.2*(1.0-(fs->reso))); vcf_e0 = exp(5.613 - 0.8*(fs->envmod) + 2.1553*(fs->cutoff) - 0.7696*(1.0-(fs->reso))); vcf_e0*=M_PI/engine::mixer()->processingSampleRate(); vcf_e1*=M_PI/engine::mixer()->processingSampleRate(); vcf_e1 -= vcf_e0; vcf_rescoeff = exp(-1.20 + 3.455*(fs->reso)); }; void lb303Filter::envRecalc() { vcf_c0 *= fs->envdecay; // Filter Decay. vcf_decay is adjusted for Hz and ENVINC // vcf_rescoeff = exp(-1.20 + 3.455*(fs->reso)); moved above }; void lb303Filter::playNote() { vcf_c0 = vcf_e1; } // // lb303FilterIIR2 // lb303FilterIIR2::lb303FilterIIR2(lb303FilterKnobState* p_fs) : lb303Filter(p_fs), vcf_d1(0), vcf_d2(0), vcf_a(0), vcf_b(0), vcf_c(1) { m_dist = new effectLib::distortion<>( 1.0, 1.0f); }; lb303FilterIIR2::~lb303FilterIIR2() { delete m_dist; } void lb303FilterIIR2::recalc() { lb303Filter::recalc(); //m_dist->setThreshold(0.5+(fs->dist*2.0)); m_dist->setThreshold(fs->dist*75.0); }; void lb303FilterIIR2::envRecalc() { float k, w; lb303Filter::envRecalc(); w = vcf_e0 + vcf_c0; // e0 is adjusted for Hz and doesn't need ENVINC k = exp(-w/vcf_rescoeff); // Does this mean c0 is inheritantly? vcf_a = 2.0*cos(2.0*w) * k; vcf_b = -k*k; vcf_c = 1.0 - vcf_a - vcf_b; } float lb303FilterIIR2::process(const float& samp) { float ret = vcf_a*vcf_d1 + vcf_b*vcf_d2 + vcf_c*samp; // Delayed samples for filter vcf_d2 = vcf_d1; vcf_d1 = ret; if(fs->dist > 0) ret=m_dist->nextSample(ret); // output = IIR2 + dry return ret; } // // lb303Filter3Pole // lb303Filter3Pole::lb303Filter3Pole(lb303FilterKnobState *p_fs) : lb303Filter(p_fs), ay1(0), ay2(0), aout(0), lastin(0) { }; void lb303Filter3Pole::recalc() { // DO NOT CALL BASE CLASS vcf_e0 = 0.000001; vcf_e1 = 1.0; } // TODO: Try using k instead of vcf_reso void lb303Filter3Pole::envRecalc() { float w,k; float kfco; lb303Filter::envRecalc(); // e0 is adjusted for Hz and doesn't need ENVINC w = vcf_e0 + vcf_c0; k = (fs->cutoff > 0.975)?0.975:fs->cutoff; kfco = 50.f + (k)*((2300.f-1600.f*(fs->envmod))+(w) * (700.f+1500.f*(k)+(1500.f+(k)*(engine::mixer()->processingSampleRate()/2.f-6000.f)) * (fs->envmod)) ); //+iacc*(.3+.7*kfco*kenvmod)*kaccent*kaccurve*2000 #ifdef LB_24_IGNORE_ENVELOPE // kfcn = fs->cutoff; kfcn = 2.0 * kfco / engine::mixer()->processingSampleRate(); #else kfcn = w; #endif kp = ((-2.7528*kfcn + 3.0429)*kfcn + 1.718)*kfcn - 0.9984; kp1 = kp+1.0; kp1h = 0.5*kp1; #ifdef LB_24_RES_TRICK k = exp(-w/vcf_rescoeff); kres = (((k))) * (((-2.7079*kp1 + 10.963)*kp1 - 14.934)*kp1 + 8.4974); #else kres = (((fs->reso))) * (((-2.7079*kp1 + 10.963)*kp1 - 14.934)*kp1 + 8.4974); #endif value = 1.0+( (fs->dist) *(1.5 + 2.0*kres*(1.0-kfcn))); // ENVMOD was DIST } float lb303Filter3Pole::process(const float& samp) { float ax1 = lastin; float ay11 = ay1; float ay31 = ay2; lastin = (samp) - tanh(kres*aout); ay1 = kp1h * (lastin+ax1) - kp*ay1; ay2 = kp1h * (ay1 + ay11) - kp*ay2; aout = kp1h * (ay2 + ay31) - kp*aout; return tanh(aout*value)*LB_24_VOL_ADJUST/(1.0+fs->dist); } // // LBSynth // lb303Synth::lb303Synth( InstrumentTrack * _InstrumentTrack ) : instrument( _InstrumentTrack, &lb303_plugin_descriptor ), vcf_cut_knob( 0.75f, 0.0f, 1.5f, 0.005f, this, tr( "VCF Cutoff Frequency" ) ), vcf_res_knob( 0.75f, 0.0f, 1.25f, 0.005f, this, tr( "VCF Resonance" ) ), vcf_mod_knob( 0.1f, 0.0f, 1.0f, 0.005f, this, tr( "VCF Envelope Mod" ) ), vcf_dec_knob( 0.1f, 0.0f, 1.0f, 0.005f, this, tr( "VCF Envelope Decay" ) ), dist_knob( 0.0f, 0.0f, 1.0f, 0.01f, this, tr( "Distortion" ) ), wave_knob( 0.0f, 0.0f, 5.0f, 1.0f, this, tr( "Waveform" ) ), slide_dec_knob( 0.6f, 0.0f, 1.0f, 0.005f, this, tr( "Slide Decay" ) ), slideToggle( false, this, tr( "Slide" ) ), accentToggle( false, this, tr( "Accent" ) ), deadToggle( false, this, tr( "Dead" ) ), db24Toggle( false, this, tr( "24dB/oct Filter" ) ) { connect( engine::mixer(), SIGNAL( sampleRateChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_cut_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_res_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_mod_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &vcf_dec_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ) ) ); connect( &db24Toggle, SIGNAL( dataChanged( ) ), this, SLOT ( db24Toggled( ) ) ); connect( &dist_knob, SIGNAL( dataChanged( ) ), this, SLOT ( filterChanged( ))); // SYNTH vco_inc = 0.0; vco_c = 0; vco_k = 0; vco_slide = 0; vco_slideinc = 0; vco_slidebase = 0; fs.cutoff = 0; fs.envmod = 0; fs.reso = 0; fs.envdecay = 0; fs.dist = 0; vcf_envpos = ENVINC; // Start VCA on an attack. vca_mode = 3; vca_a = 0; //vca_attack = 1.0 - 0.94406088; vca_attack = 1.0 - 0.96406088; vca_decay = 0.99897516; vco_shape = SAWTOOTH; // Experimenting with a0 between original (0.5) and 1.0 vca_a0 = 0.5; vca_a = 9; vca_mode = 3; vcf = new lb303FilterIIR2(&fs); sample_cnt = 0; release_frame = 1<<24; catch_frame = 0; catch_decay = 0; recalcFilter(); last_offset = 0; new_freq = -1; current_freq = -1; delete_freq = -1; instrumentPlayHandle * iph = new instrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); filterChanged(); } lb303Synth::~lb303Synth() { delete vcf; } void lb303Synth::saveSettings( QDomDocument & _doc, QDomElement & _this ) { vcf_cut_knob.saveSettings( _doc, _this, "vcf_cut" ); vcf_res_knob.saveSettings( _doc, _this, "vcf_res" ); vcf_mod_knob.saveSettings( _doc, _this, "vcf_mod" ); vcf_dec_knob.saveSettings( _doc, _this, "vcf_dec" ); wave_knob.saveSettings( _doc, _this, "shape"); dist_knob.saveSettings( _doc, _this, "dist"); slide_dec_knob.saveSettings( _doc, _this, "slide_dec"); slideToggle.saveSettings( _doc, _this, "slide"); deadToggle.saveSettings( _doc, _this, "dead"); db24Toggle.saveSettings( _doc, _this, "db24"); } void lb303Synth::loadSettings( const QDomElement & _this ) { vcf_cut_knob.loadSettings( _this, "vcf_cut" ); vcf_res_knob.loadSettings( _this, "vcf_res" ); vcf_mod_knob.loadSettings( _this, "vcf_mod" ); vcf_dec_knob.loadSettings( _this, "vcf_dec" ); dist_knob.loadSettings( _this, "dist"); wave_knob.loadSettings( _this, "shape"); slide_dec_knob.loadSettings( _this, "slide_dec"); slideToggle.loadSettings( _this, "slide"); deadToggle.loadSettings( _this, "dead"); db24Toggle.loadSettings( _this, "db24"); filterChanged(); } // TODO: Split into one function per knob. envdecay doesn't require // recalcFilter. void lb303Synth::filterChanged() { fs.cutoff = vcf_cut_knob.value(); fs.reso = vcf_res_knob.value(); fs.envmod = vcf_mod_knob.value(); fs.dist = LB_DIST_RATIO*dist_knob.value(); float d = 0.2 + (2.3*vcf_dec_knob.value()); d *= engine::mixer()->processingSampleRate(); // d *= smpl rate fs.envdecay = pow(0.1, 1.0/d * ENVINC); // decay is 0.1 to the 1/d * ENVINC // vcf_envdecay is now adjusted for both // sampling rate and ENVINC recalcFilter(); } void lb303Synth::db24Toggled() { delete vcf; if(db24Toggle.value()) { vcf = new lb303Filter3Pole(&fs); } else { vcf = new lb303FilterIIR2(&fs); } recalcFilter(); } QString lb303Synth::nodeName() const { return( lb303_plugin_descriptor.name ); } void lb303Synth::recalcFilter() { vcf->recalc(); vcf_envpos = ENVINC; // Trigger filter update in process() } inline int MIN(int a, int b) { return (aprocessingSampleRate(); // TODO: Use actual sampling rate. } int lb303Synth::process(sampleFrame *outbuf, const Uint32 size) { unsigned int i; float w; float samp; if( delete_freq == current_freq ) { // Normal release delete_freq = -1; vca_mode = 1; } if( new_freq > 0.0f ) { lb303Note note; note.vco_inc = GET_INC( true_freq ); note.dead = deadToggle.value(); initNote(¬e); current_freq = new_freq; new_freq = -1.0f; } // TODO: NORMAL RELEASE // vca_mode = 1; for(i=0;i= ENVINC) { vcf->envRecalc(); vcf_envpos = 0; if (vco_slide) { vco_inc=vco_slidebase-vco_slide; // Calculate coeff from dec_knob on knob change. vco_slide*= 0.9+(slide_dec_knob.value()*0.0999); // TODO: Adjust for Hz and ENVINC } } sample_cnt++; vcf_envpos++; int decay_frames = 128; // update vco vco_c += vco_inc; if(vco_c > 0.5) vco_c -= 1.0; /*LB303 if (catch_decay > 0) { if (catch_decay < decay_frames) { catch_decay++; } }*/ switch(int(rint(wave_knob.value()))) { case 0: vco_shape = SAWTOOTH; break; case 1: vco_shape = INVERTED_SAWTOOTH; break; case 2: vco_shape = TRIANGLE; break; case 3: vco_shape = SQUARE; break; case 4: vco_shape = ROUND_SQUARE; break; case 5: vco_shape = MOOG; break; default: vco_shape = SAWTOOTH; break; } // add vco_shape_param the changes the shape of each curve. // merge sawtooths with triangle and square with round square? switch (vco_shape) { case SAWTOOTH: // p0: curviness of line vco_k = vco_c; // Is this sawtooth backwards? break; case INVERTED_SAWTOOTH: // p0: curviness of line vco_k = -vco_c; // Is this sawtooth backwards? break; case TRIANGLE: // p0: duty rev.saw<->triangle<->saw p1: curviness vco_k = (vco_c*2.0)+0.5; if (vco_k>0.5) vco_k = 1.0- vco_k; break; case SQUARE: // p0: slope of top vco_k = (vco_c<0)?0.5:-0.5; break; case ROUND_SQUARE: // p0: width of round vco_k = (vco_c<0)?(sqrtf(1-(vco_c*vco_c*4))-0.5):-0.5; break; case MOOG: // Maybe the fall should be exponential/sinsoidal instead of quadric. // [-0.5, 0]: Rise, [0,0.25]: Slope down, [0.25,0.5]: Low vco_k = (vco_c*2.0)+0.5; if (vco_k>1.0) { vco_k = -0.5 ; } else if (vco_k>0.5) { w = 2.0*(vco_k-0.5)-1.0; vco_k = 0.5 - sqrtf(1.0-(w*w)); } vco_k *= 2.0; // MOOG wave gets filtered away break; } // Write out samples. samp = vcf->process(vco_k) * vca_a; /* float releaseFrames = desiredReleaseFrames(); samp *= (releaseFrames - catch_decay)/releaseFrames; */ //LB303 samp *= (float)(decay_frames - catch_decay)/(float)decay_frames; for(int c=0; c=release_frame) { vca_mode=1; } */ // Handle Envelope if(vca_mode==0) { vca_a+=(vca_a0-vca_a)*vca_attack; if(sample_cnt>=0.5*engine::mixer()->processingSampleRate()) vca_mode = 2; } else if(vca_mode == 1) { vca_a *= vca_decay; // the following line actually speeds up processing if(vca_a < (1/65536.0)) { vca_a = 0; vca_mode = 3; } } } return 1; } /* Prepares the active LB303 note. I separated this into a function because it * needs to be called onplayNote() when a new note is started. It also needs * to be called from process() when a prior edge-to-edge note is done releasing. */ void lb303Synth::initNote( lb303Note *n) { catch_decay = 0; vco_inc = n->vco_inc; // Always reset vca on non-dead notes, and // Only reset vca on decaying(decayed) and never-played if(n->dead == 0 || (vca_mode==1 || vca_mode==3)) { //printf(" good\n"); sample_cnt = 0; vca_mode = 0; // LB303: //vca_a = 0; } else { vca_mode = 2; } // Initiate Slide // TODO: Break out into function, should be called again on detuneChanged if (vco_slideinc) { vco_slide = vco_inc-vco_slideinc; // Slide amount vco_slidebase = vco_inc; // The REAL frequency vco_slideinc = 0; // reset from-note } else { vco_slide = 0; } // End break-out // Slide-from note, save inc for next note if (slideToggle.value()) { vco_slideinc = vco_inc; // May need to equal vco_slidebase+vco_slide if last note slid } recalcFilter(); if(n->dead ==0){ // Swap next two blocks?? vcf->playNote(); // Ensure envelope is recalculated vcf_envpos = ENVINC; // Double Check //vca_mode = 0; //vca_a = 0.0; } } void lb303Synth::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if( _n->arpBaseNote() ) { //return; } // Currently have release/decay disabled // Start the release decay if this is the first release period. //if (_n->released() && catch_decay == 0) // catch_decay = 1; bool decay_note = false; release_frame = _n->framesLeft() - desiredReleaseFrames(); if(deadToggle.value() == 0 && decay_note) { } /// Start a new note. else if( _n->totalFramesPlayed() == 0 ) { new_freq = _n->unpitchedFrequency(); true_freq = _n->frequency(); _n->m_pluginData = this; } // Check for slide if( _n->unpitchedFrequency() == current_freq ) { true_freq = _n->frequency(); if( slideToggle.value() ) { vco_slidebase = GET_INC( true_freq ); // The REAL frequency } else { vco_inc = GET_INC( true_freq ); } } } void lb303Synth::play( sampleFrame * _working_buffer ) { //printf("."); const fpp_t frames = engine::mixer()->framesPerPeriod(); process( _working_buffer, frames); instrumentTrack()->processAudioBuffer( _working_buffer, frames, NULL ); } void lb303Synth::deleteNotePluginData( NotePlayHandle * _n ) { //printf("GONE\n"); if( _n->unpitchedFrequency() == current_freq ) { delete_freq = current_freq; } } PluginView * lb303Synth::instantiateView( QWidget * _parent ) { return( new lb303SynthView( this, _parent ) ); } lb303SynthView::lb303SynthView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { // GUI m_vcfCutKnob = new knob( knobBright_26, this ); m_vcfCutKnob->move( 75, 130 ); m_vcfCutKnob->setHintText( tr( "Cutoff Freq:" ) + " ", "" ); m_vcfCutKnob->setLabel( tr("CUT") ); m_vcfResKnob = new knob( knobBright_26, this ); m_vcfResKnob->move( 120, 130 ); m_vcfResKnob->setHintText( tr( "Resonance:" ) + " ", "" ); m_vcfResKnob->setLabel( tr("RES") ); m_vcfModKnob = new knob( knobBright_26, this ); m_vcfModKnob->move( 165, 130 ); m_vcfModKnob->setHintText( tr( "Env Mod:" ) + " ", "" ); m_vcfModKnob->setLabel( tr("ENV MOD") ); m_vcfDecKnob = new knob( knobBright_26, this ); m_vcfDecKnob->move( 210, 130 ); m_vcfDecKnob->setHintText( tr( "Decay:" ) + " ", "" ); m_vcfDecKnob->setLabel( tr("DEC") ); m_slideToggle = new ledCheckBox( "Slide", this ); m_slideToggle->move( 10, 180 ); m_accentToggle = new ledCheckBox( "Accent", this ); m_accentToggle->move( 10, 200 ); m_accentToggle->setDisabled(true); m_deadToggle = new ledCheckBox( "Dead", this ); m_deadToggle->move( 10, 220 ); m_db24Toggle = new ledCheckBox( "24dB/oct", this ); m_db24Toggle->setWhatsThis( tr( "303-es-que, 24dB/octave, 3 pole filter" ) ); m_db24Toggle->move( 10, 150); m_slideDecKnob = new knob( knobBright_26, this ); m_slideDecKnob->move( 210, 75 ); m_slideDecKnob->setHintText( tr( "Slide Decay:" ) + " ", "" ); m_slideDecKnob->setLabel( tr( "SLIDE")); m_distKnob = new knob( knobBright_26, this ); m_distKnob->move( 210, 190 ); m_distKnob->setHintText( tr( "DIST:" ) + " ", "" ); m_distKnob->setLabel( tr( "DIST")); m_waveKnob = new knob( knobBright_26, this ); m_waveKnob->move( 120, 75 ); m_waveKnob->setHintText( tr( "WAVE:" ) + " ", "" ); m_waveKnob->setLabel( tr( "WAVE")); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); } lb303SynthView::~lb303SynthView() { } void lb303SynthView::modelChanged() { lb303Synth * syn = castModel(); m_vcfCutKnob->setModel( &syn->vcf_cut_knob ); m_vcfResKnob->setModel( &syn->vcf_res_knob ); m_vcfDecKnob->setModel( &syn->vcf_dec_knob ); m_vcfModKnob->setModel( &syn->vcf_mod_knob ); m_slideDecKnob->setModel( &syn->slide_dec_knob ); m_distKnob->setModel( &syn->dist_knob ); m_waveKnob->setModel( &syn->wave_knob ); m_slideToggle->setModel( &syn->slideToggle ); m_accentToggle->setModel( &syn->accentToggle ); m_deadToggle->setModel( &syn->deadToggle ); m_db24Toggle->setModel( &syn->db24Toggle ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new lb303Synth( static_cast( _data ) ) ); } } lmms-1.1.3/plugins/lb303/lb303.h000066400000000000000000000137671247673406200160150ustar00rootroot00000000000000/* * lb303.h - declaration of class lb303 which is a bass synth attempting to * emulate the Roland TB303 bass synth * * Copyright (c) 2006-2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * lb303FilterIIR2 is based on the gsyn filter code by Andy Sloane. * * lb303Filter3Pole is based on the TB303 instrument written by * Josep M Comajuncosas for the CSounds library * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _LB303_H_ #define _LB303_H_ #include "effect_lib.h" #include "Instrument.h" #include "InstrumentView.h" #include "led_checkbox.h" #include "knob.h" #include "Mixer.h" class lb303SynthView; class NotePlayHandle; class lb303FilterKnobState { public: float cutoff; float reso; float envmod; float envdecay; float dist; }; class lb303Filter { public: lb303Filter(lb303FilterKnobState* p_fs); virtual ~lb303Filter() {}; virtual void recalc(); virtual void envRecalc(); virtual float process(const float& samp)=0; virtual void playNote(); protected: lb303FilterKnobState *fs; // Filter Decay float vcf_c0; // c0=e1 on retrigger; c0*=ed every sample; cutoff=e0+c0 float vcf_e0, // e0 and e1 for interpolation vcf_e1; float vcf_rescoeff; // Resonance coefficient [0.30,9.54] }; class lb303FilterIIR2 : public lb303Filter { public: lb303FilterIIR2(lb303FilterKnobState* p_fs); virtual ~lb303FilterIIR2(); virtual void recalc(); virtual void envRecalc(); virtual float process(const float& samp); protected: float vcf_d1, // d1 and d2 are added back into the sample with vcf_d2; // vcf_a and b as coefficients. IIR2 resonance // loop. // IIR2 Coefficients for mixing dry and delay. float vcf_a, // Mixing coefficients for the final sound. vcf_b, // vcf_c; effectLib::monoToStereoAdaptor > * m_dist_fx; effectLib::distortion<> * m_dist; }; class lb303Filter3Pole : public lb303Filter { public: lb303Filter3Pole(lb303FilterKnobState* p_fs); //virtual void recalc(); virtual void envRecalc(); virtual void recalc(); virtual float process(const float& samp); protected: float kfcn, kp, kp1, kp1h, kres; float ay1, ay2, aout, lastin, value; }; class lb303Note { public: float vco_inc; bool dead; }; class lb303Synth : public Instrument { Q_OBJECT public: lb303Synth( InstrumentTrack * _instrument_track ); virtual ~lb303Synth(); virtual void play( sampleFrame * _working_buffer ); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const { return 0; //4048; } virtual PluginView * instantiateView( QWidget * _parent ); private: void initNote(lb303Note *note); private: FloatModel vcf_cut_knob; FloatModel vcf_res_knob; FloatModel vcf_mod_knob; FloatModel vcf_dec_knob; FloatModel vco_fine_detune_knob; FloatModel dist_knob; FloatModel wave_knob; FloatModel slide_dec_knob; BoolModel slideToggle; BoolModel accentToggle; BoolModel deadToggle; BoolModel db24Toggle; public slots: void filterChanged(); void db24Toggled(); private: // Oscillator float vco_inc, // Sample increment for the frequency. Creates Sawtooth. vco_k, // Raw oscillator sample [-0.5,0.5] vco_c; // Raw oscillator sample [-0.5,0.5] float vco_slide, //* Current value of slide exponential curve. Nonzero=sliding vco_slideinc, //* Slide base to use in next node. Nonzero=slide next note vco_slidebase; //* The base vco_inc while sliding. float vco_detune; enum vco_shape_t { SAWTOOTH, INVERTED_SAWTOOTH, SQUARE, TRIANGLE, MOOG, ROUND_SQUARE }; vco_shape_t vco_shape; // User settings lb303FilterKnobState fs; lb303Filter *vcf; int release_frame; // More States int vcf_envpos; // Update counter. Updates when >= ENVINC float vca_attack, // Amp attack vca_decay, // Amp decay vca_a0, // Initial amplifier coefficient vca_a; // Amplifier coefficient. // Envelope State int vca_mode; // 0: attack, 1: decay, 2: idle, 3: never played // My hacks int sample_cnt; int last_offset; int catch_frame; int catch_decay; float new_freq; float current_freq; float delete_freq; float true_freq; void recalcFilter(); int process(sampleFrame *outbuf, const Uint32 size); friend class lb303SynthView; } ; class lb303SynthView : public InstrumentView { Q_OBJECT public: lb303SynthView( Instrument * _instrument, QWidget * _parent ); virtual ~lb303SynthView(); private: virtual void modelChanged(); knob * m_vcfCutKnob; knob * m_vcfResKnob; knob * m_vcfDecKnob; knob * m_vcfModKnob; knob * m_vcoFineDetuneKnob; knob * m_distKnob; knob * m_waveKnob; knob * m_slideDecKnob; ledCheckBox * m_slideToggle; ledCheckBox * m_accentToggle; ledCheckBox * m_deadToggle; ledCheckBox * m_db24Toggle; } ; #endif lmms-1.1.3/plugins/lb303/logo.png000066400000000000000000000066141247673406200164600ustar00rootroot00000000000000PNG  IHDR00WbKGD pHYs  tIME 6ϮtEXtCommentCreated with The GIMPd%n IDAThY[WV־V9ݶ۷MnDC.s! 32 H@<Ј!@hhF6cǗvw}O9Ukx8dlǷ\J:/׷[k]{>~kw;9&'PTUeD|w(HyG^W;S[~(2kZv_|}L5wΕg 0QNcąj}g]t6oֱ=4' @H6$~^|'3vf^zl ۰Kmɶ6?- RN_}} /"V&X9D hK/j;@\}Ff7 fw؁mF& U3^6;n-}gwP 70N=VzP&,"oEwLHv4R|sZ9f'h d& x)? IWy 0+smvAs3FE:ԀJi jVɤ`ұsVFZj|*t- pjTIDDXg\b쁗v2P@ad߫ ]ʭGw-g#*J˦FYۨVΟO1 pZE ,Bܽ v:jo0ٌ..@}366tbGZDf'fn-HE_|W#sWww8HmwN1xE@fw`IF3_xW{I=%&?H]ͤtc5\  9l ĄA>++?z;i> 1>&^j4\T=`z鬅 ^0c򧿳g+OnWu::uL2VAPj сY( ~W HG4M nd+)ZA\ hObjts]8ZG )QJ)8Y `P>Flo0h|oHyu4=Z/DmQ+ \s /0Z4,AjZ)#(Y@e}d)JpVcw&x TSLR;A,(L"D 'jPi=\J^pD@*L Y W~u N ,1#fH" F(j(##$,gAɐi +paGΞk*uܕFUD5D' *QI #,%@YhUY0i#5^;1qlc+{*/+Ȳ,l-A AlD*jTШa!DS8 5H;uu4M-1uwWZTa ^90@' &'ϲ xeH-xˀe5XQ^@`N ..V夬 U^zP@CQ Br$aB-*1D-̂ Xj @$5;eظyGG=r`! ^P=d!FլDP37  +8$@Pˁuj1`- `Mn6޹E 50P)"i1*( a8!Jx@h X7Fm )L{=95G P442 r XhC X$t@Q" Eίο}9?wZ܅jaS=6':SErXH["JA JH` 땛bl3bAK˫V<L戊!! p5) dPZxuإ&1KGB3 pa[,7>wz" [V ?/<; K$%E",Ο=9ut:.-˳#ZM G8D@R{ب4Ӯ Bl*S_k3fr_2 V/?87/(шÛ]-1p_KxhߴDdtck[a;G6~yy u%*Q{ V6d&\Naw 6 6TRA.PDŽPsTvZ7E{k%]<`3 .۵F^dYά ]_./ *ׯ\dݨ$12KTW9?Bd}DR}^J9h*(9 "\Blu=[l,\9w703c f^$IXwc8v cc@1FbXJJ%e$e]O@i:Ƕؓ|p1VL9%^{*!@J)b`Z @by眩*"^x7zcCۿW7 [%"'RW6py뗄GNu]g)J%[n뒵ք (A!-t:v`Ioj朋d{# TGv#~\g?sUF_vo?,F} =mqϺ-[k1 ZS{yЉGs peYn4 4>=6G4TO_D9"7=Tp \9{'l={Zef1z73RZ%ՂJ * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "Monstro.h" #include "engine.h" #include "InstrumentTrack.h" #include "templates.h" #include "gui_templates.h" #include "tooltip.h" #include "song.h" #include "lmms_math.h" #include "interpolation.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT monstro_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Monstro", QT_TRANSLATE_NOOP( "pluginBrowser", "Monstrous 3-oscillator synth with modulation matrix" ), "Vesa Kivimäki ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } MonstroSynth::MonstroSynth( MonstroInstrument * _i, NotePlayHandle * _nph ) : m_parent( _i ), m_nph( _nph ) { m_osc1l_phase = 0.0f; m_osc1r_phase = 0.0f; m_osc2l_phase = 0.0f; m_osc2r_phase = 0.0f; m_osc3l_phase = 0.0f; m_osc3r_phase = 0.0f; m_ph2l_last = 0.0f; m_ph2r_last = 0.0f; m_ph3l_last = 0.0f; m_ph3r_last = 0.0f; m_env_phase[0] = 0.0f; m_env_phase[1] = 0.0f; m_lfo_phase[0] = 0.0f; m_lfo_phase[1] = 0.0f; m_lfo_next[0] = Oscillator::noiseSample( 0.0f ); m_lfo_next[1] = Oscillator::noiseSample( 0.0f ); m_osc1l_last = 0.0f; m_osc1r_last = 0.0f; m_l_last = 0.0f; m_r_last = 0.0f; m_invert2l = false; m_invert2r = false; m_invert3l = false; m_invert3r = false; m_counter2l = 0; m_counter2r = 0; m_counter3l = 0; m_counter3r = 0; } MonstroSynth::~MonstroSynth() { } void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf ) { float modtmp; // temp variable for freq modulation // macros for modulating with env/lfos #define modulatefreq( car, mod ) \ modtmp = 0.0f; \ if( mod##_e1 != 0.0f ) modtmp += env[0][f] * mod##_e1; \ if( mod##_e2 != 0.0f ) modtmp += env[1][f] * mod##_e2; \ if( mod##_l1 != 0.0f ) modtmp += lfo[0][f] * mod##_l1; \ if( mod##_l2 != 0.0f ) modtmp += lfo[1][f] * mod##_l2; \ car = qBound( MIN_FREQ, car * powf( 2.0f, modtmp ), MAX_FREQ ); #define modulateabs( car, mod ) \ if( mod##_e1 != 0.0f ) car += env[0][f] * mod##_e1; \ if( mod##_e2 != 0.0f ) car += env[1][f] * mod##_e2; \ if( mod##_l1 != 0.0f ) car += lfo[0][f] * mod##_l1; \ if( mod##_l2 != 0.0f ) car += lfo[1][f] * mod##_l2; #define modulatephs( car, mod ) \ if( mod##_e1 != 0.0f ) car += env[0][f] * mod##_e1; \ if( mod##_e2 != 0.0f ) car += env[1][f] * mod##_e2; \ if( mod##_l1 != 0.0f ) car += lfo[0][f] * mod##_l1; \ if( mod##_l2 != 0.0f ) car += lfo[1][f] * mod##_l2; #define modulatevol( car, mod ) \ if( mod##_e1 > 0.0f ) car *= ( 1.0f - mod##_e1 + mod##_e1 * env[0][f] ); \ if( mod##_e1 < 0.0f ) car *= ( 1.0f + mod##_e1 * env[0][f] ); \ if( mod##_e2 > 0.0f ) car *= ( 1.0f - mod##_e2 + mod##_e2 * env[1][f] ); \ if( mod##_e2 < 0.0f ) car *= ( 1.0f + mod##_e2 * env[1][f] ); \ if( mod##_l1 != 0.0f ) car *= ( 1.0f + mod##_l1 * lfo[0][f] ); \ if( mod##_l2 != 0.0f ) car *= ( 1.0f + mod##_l2 * lfo[1][f] ); \ car = qBound( -MODCLIP, car, MODCLIP ); //////////////////// // // // MODULATORS // // // //////////////////// // LFO phase offsets const float lfo1_po = m_parent->m_lfo1Phs.value() / 360.0f; const float lfo2_po = m_parent->m_lfo2Phs.value() / 360.0f; // remove cruft from phase counters to prevent overflow, add phase offset m_lfo_phase[0] = absFraction( m_lfo_phase[0] + lfo1_po ); m_lfo_phase[1] = absFraction( m_lfo_phase[1] + lfo2_po ); // LFO rates and increment m_lfo_rate[0] = ( m_parent->m_lfo1Rate.value() * 0.001f * m_parent->m_samplerate ); m_lfo_rate[1] = ( m_parent->m_lfo2Rate.value() * 0.001f * m_parent->m_samplerate ); m_lfo_inc[0] = 1.0f / m_lfo_rate[0]; m_lfo_inc[1] = 1.0f / m_lfo_rate[1]; m_env_sus[0] = m_parent-> m_env1Sus.value(); m_env_sus[1] = m_parent-> m_env2Sus.value(); m_lfovalue[0] = m_parent->m_lfo1Wave.value(); m_lfovalue[1] = m_parent->m_lfo2Wave.value(); m_lfoatt[0] = m_parent->m_lfo1_att; m_lfoatt[1] = m_parent->m_lfo2_att; m_env_pre[0] = m_parent->m_env1_pre; m_env_att[0] = m_parent->m_env1_att; m_env_hold[0] = m_parent->m_env1_hold; m_env_dec[0] = m_parent->m_env1_dec; m_env_rel[0] = m_parent->m_env1_rel; m_env_pre[1] = m_parent->m_env2_pre; m_env_att[1] = m_parent->m_env2_att; m_env_hold[1] = m_parent->m_env2_hold; m_env_dec[1] = m_parent->m_env2_dec; m_env_rel[1] = m_parent->m_env2_rel; // get updated osc1 values // get pulse width const float pw = ( m_parent->m_osc1Pw.value() * 0.01f ); const float o1pw_e1 = ( m_parent->m_pw1env1.value() ); const float o1pw_e2 = ( m_parent->m_pw1env2.value() ); const float o1pw_l1 = ( m_parent->m_pw1lfo1.value() * 0.5f ); const float o1pw_l2 = ( m_parent->m_pw1lfo2.value() * 0.5f ); const bool o1pw_mod = o1pw_e1 != 0.0f || o1pw_e2 != 0.0f || o1pw_l1 != 0.0f || o1pw_l2 != 0.0f; // get phases const float o1lpo = m_parent->m_osc1l_po; const float o1rpo = m_parent->m_osc1r_po; const float o1p_e1 = ( m_parent->m_phs1env1.value() ); const float o1p_e2 = ( m_parent->m_phs1env2.value() ); const float o1p_l1 = ( m_parent->m_phs1lfo1.value() * 0.5f ); const float o1p_l2 = ( m_parent->m_phs1lfo2.value() * 0.5f ); const bool o1p_mod = o1p_e1 != 0.0f || o1p_e2 != 0.0f || o1p_l1 != 0.0f || o1p_l2 != 0.0f; // get pitch const float o1lfb = ( m_parent->m_osc1l_freq * m_nph->frequency() ); const float o1rfb = ( m_parent->m_osc1r_freq * m_nph->frequency() ); const float o1f_e1 = ( m_parent->m_pit1env1.value() * 2.0f ); const float o1f_e2 = ( m_parent->m_pit1env2.value() * 2.0f ); const float o1f_l1 = ( m_parent->m_pit1lfo1.value() ); const float o1f_l2 = ( m_parent->m_pit1lfo2.value() ); const bool o1f_mod = o1f_e1 != 0.0f || o1f_e2 != 0.0f || o1f_l1 != 0.0f || o1f_l2 != 0.0f; // get volumes const float o1lv = m_parent->m_osc1l_vol; const float o1rv = m_parent->m_osc1r_vol; const float o1v_e1 = ( m_parent->m_vol1env1.value() ); const float o1v_e2 = ( m_parent->m_vol1env2.value() ); const float o1v_l1 = ( m_parent->m_vol1lfo1.value() ); const float o1v_l2 = ( m_parent->m_vol1lfo2.value() ); const bool o1v_mod = o1v_e1 != 0.0f || o1v_e2 != 0.0f || o1v_l1 != 0.0f || o1v_l2 != 0.0f; // update osc2 // get waveform const int o2w = m_parent->m_osc2Wave.value(); // get phases const float o2lpo = m_parent->m_osc2l_po; const float o2rpo = m_parent->m_osc2r_po; const float o2p_e1 = ( m_parent->m_phs2env1.value() ); const float o2p_e2 = ( m_parent->m_phs2env2.value() ); const float o2p_l1 = ( m_parent->m_phs2lfo1.value() * 0.5f ); const float o2p_l2 = ( m_parent->m_phs2lfo2.value() * 0.5f ); const bool o2p_mod = o2p_e1 != 0.0f || o2p_e2 != 0.0f || o2p_l1 != 0.0f || o2p_l2 != 0.0f; // get pitch const float o2lfb = ( m_parent->m_osc2l_freq * m_nph->frequency() ); const float o2rfb = ( m_parent->m_osc2r_freq * m_nph->frequency() ); const float o2f_e1 = ( m_parent->m_pit2env1.value() * 2.0f ); const float o2f_e2 = ( m_parent->m_pit2env2.value() * 2.0f ); const float o2f_l1 = ( m_parent->m_pit2lfo1.value() ); const float o2f_l2 = ( m_parent->m_pit2lfo2.value() ); const bool o2f_mod = o2f_e1 != 0.0f || o2f_e2 != 0.0f || o2f_l1 != 0.0f || o2f_l2 != 0.0f; // get volumes const float o2lv = m_parent->m_osc2l_vol; const float o2rv = m_parent->m_osc2r_vol; const float o2v_e1 = ( m_parent->m_vol2env1.value() ); const float o2v_e2 = ( m_parent->m_vol2env2.value() ); const float o2v_l1 = ( m_parent->m_vol2lfo1.value() ); const float o2v_l2 = ( m_parent->m_vol2lfo2.value() ); const bool o2v_mod = o2v_e1 != 0.0f || o2v_e2 != 0.0f || o2v_l1 != 0.0f || o2v_l2 != 0.0f; // update osc3 // get waveforms const int o3w1 = m_parent->m_osc3Wave1.value(); const int o3w2 = m_parent->m_osc3Wave2.value(); // get phases const float o3lpo = m_parent->m_osc3l_po; const float o3rpo = m_parent->m_osc3r_po; const float o3p_e1 = ( m_parent->m_phs3env1.value() ); const float o3p_e2 = ( m_parent->m_phs3env2.value() ); const float o3p_l1 = ( m_parent->m_phs3lfo1.value() * 0.5f ); const float o3p_l2 = ( m_parent->m_phs3lfo2.value() * 0.5f ); const bool o3p_mod = o3p_e1 != 0.0f || o3p_e2 != 0.0f || o3p_l1 != 0.0f || o3p_l2 != 0.0f; // get pitch modulators const float o3fb = ( m_parent->m_osc3_freq * m_nph->frequency() ); const float o3f_e1 = ( m_parent->m_pit3env1.value() * 2.0f ); const float o3f_e2 = ( m_parent->m_pit3env2.value() * 2.0f ); const float o3f_l1 = ( m_parent->m_pit3lfo1.value() ); const float o3f_l2 = ( m_parent->m_pit3lfo2.value() ); const bool o3f_mod = o3f_e1 != 0.0f || o3f_e2 != 0.0f || o3f_l1 != 0.0f || o3f_l2 != 0.0f; // get volumes const float o3lv = m_parent->m_osc3l_vol; const float o3rv = m_parent->m_osc3r_vol; const float o3v_e1 = ( m_parent->m_vol3env1.value() ); const float o3v_e2 = ( m_parent->m_vol3env2.value() ); const float o3v_l1 = ( m_parent->m_vol3lfo1.value() ); const float o3v_l2 = ( m_parent->m_vol3lfo2.value() ); const bool o3v_mod = o3v_e1 != 0.0f || o3v_e2 != 0.0f || o3v_l1 != 0.0f || o3v_l2 != 0.0f; // get sub const float o3sub = ( m_parent->m_osc3Sub.value() + 100.0f ) / 200.0f; const float o3s_e1 = ( m_parent->m_sub3env1.value() ); const float o3s_e2 = ( m_parent->m_sub3env2.value() ); const float o3s_l1 = ( m_parent->m_sub3lfo1.value() * 0.5f ); const float o3s_l2 = ( m_parent->m_sub3lfo2.value() * 0.5f ); const bool o3s_mod = o3s_e1 != 0.0f || o3s_e2 != 0.0f || o3s_l1 != 0.0f || o3s_l2 != 0.0f; //o2-o3 modulation const int omod = m_parent->m_o23Mod.value(); // sync information const bool o1ssr = m_parent->m_osc1SSR.value(); const bool o1ssf = m_parent->m_osc1SSF.value(); const bool o2sync = m_parent->m_osc2SyncH.value(); const bool o3sync = m_parent->m_osc3SyncH.value(); const bool o2syncr = m_parent->m_osc2SyncR.value(); const bool o3syncr = m_parent->m_osc3SyncR.value(); /////////////////////////// // // // start buffer loop // // // /////////////////////////// // declare working variables for for loop // phase manipulation vars - these can be reused by all oscs float leftph; float rightph; float pd_l; float pd_r; float len_l; float len_r; // osc1 vars float o1l_f; float o1r_f; float o1l_p = m_osc1l_phase + o1lpo; // we add phase offset here so we don't have to do it every frame float o1r_p = m_osc1r_phase + o1rpo; // then substract it again after loop... float o1_pw; // osc2 vars float o2l_f; float o2r_f; float o2l_p = m_osc2l_phase + o2lpo; float o2r_p = m_osc2r_phase + o2rpo; // osc3 vars float o3l_f; float o3r_f; float o3l_p = m_osc3l_phase + o3lpo; float o3r_p = m_osc3r_phase + o3rpo; float sub; // modulators float lfo[2][ m_parent->m_fpp ]; float env[2][ m_parent->m_fpp ]; // render modulators: envelopes, lfos updateModulators( &env[0][0], &env[1][0], &lfo[0][0], &lfo[1][0], _frames ); // begin for loop for( f_cnt_t f = 0; f < _frames; ++f ) { /* // debug code if( f % 10 == 0 ) { qDebug( "env1 %f -- env1 phase %f", m_env1_buf[f], m_env1_phase ); qDebug( "env1 pre %f att %f dec %f rel %f ", m_parent->m_env1_pre, m_parent->m_env1_att, m_parent->m_env1_dec, m_parent->m_env1_rel ); }*/ ///////////////////////////// // // // OSC 1 // // // ///////////////////////////// // calc and mod frequencies o1l_f = o1lfb; o1r_f = o1rfb; if( o1f_mod ) { modulatefreq( o1l_f, o1f ) modulatefreq( o1r_f, o1f ) } // calc and modulate pulse o1_pw = pw; if( o1pw_mod ) { modulateabs( o1_pw, o1pw ) o1_pw = qBound( PW_MIN, o1_pw, PW_MAX ); } // calc and modulate phase leftph = o1l_p; rightph = o1r_p; if( o1p_mod ) { modulatephs( leftph, o1p ) modulatephs( rightph, o1p ) } // pulse wave osc sample_t O1L = ( absFraction( leftph ) < o1_pw ) ? 1.0f : -1.0f; sample_t O1R = ( absFraction( rightph ) < o1_pw ) ? 1.0f : -1.0f; // check for rise/fall, and sync if appropriate // sync on rise if( o1ssr ) { // hard sync if( o2sync ) { if( O1L > m_osc1l_last ) { o2l_p = o2lpo; m_counter2l = m_parent->m_counterMax; } if( O1R > m_osc1r_last ) { o2r_p = o2rpo; m_counter2r = m_parent->m_counterMax; } } if( o3sync ) { if( O1L > m_osc1l_last ) { o3l_p = o3lpo; m_counter3l = m_parent->m_counterMax; } if( O1R > m_osc1r_last ) { o3r_p = o3rpo; m_counter3r = m_parent->m_counterMax; } } // reverse sync if( o2syncr ) { if( O1L > m_osc1l_last ) { m_invert2l = !m_invert2l; m_counter2l = m_parent->m_counterMax; } if( O1R > m_osc1r_last ) { m_invert2r = !m_invert2r; m_counter2r = m_parent->m_counterMax; } } if( o3syncr ) { if( O1L > m_osc1l_last ) { m_invert3l = !m_invert3l; m_counter3l = m_parent->m_counterMax; } if( O1R > m_osc1r_last ) { m_invert3r = !m_invert3r; m_counter3r = m_parent->m_counterMax; } } } // sync on fall if( o1ssf ) { // hard sync if( o2sync ) { if( O1L < m_osc1l_last ) { o2l_p = o2lpo; m_counter2l = m_parent->m_counterMax; } if( O1R < m_osc1r_last ) { o2r_p = o2rpo; m_counter2r = m_parent->m_counterMax; } } if( o3sync ) { if( O1L < m_osc1l_last ) { o3l_p = o3lpo; m_counter3l = m_parent->m_counterMax; } if( O1R < m_osc1r_last ) { o3r_p = o3rpo; m_counter3r = m_parent->m_counterMax; } } // reverse sync if( o2syncr ) { if( O1L < m_osc1l_last ) { m_invert2l = !m_invert2l; m_counter2l = m_parent->m_counterMax; } if( O1R < m_osc1r_last ) { m_invert2r = !m_invert2r; m_counter2r = m_parent->m_counterMax; } } if( o3syncr ) { if( O1L < m_osc1l_last ) { m_invert3l = !m_invert3l; m_counter3l = m_parent->m_counterMax; } if( O1R < m_osc1r_last ) { m_invert3r = !m_invert3r; m_counter3r = m_parent->m_counterMax; } } } // update last before signal is touched // also do a very simple amp delta cap const sample_t tmpl = m_osc1l_last; const sample_t tmpr = m_osc1r_last; m_osc1l_last = O1L; m_osc1r_last = O1R; if( tmpl != O1L ) O1L = 0.0f; if( tmpr != O1R ) O1R = 0.0f; // modulate volume O1L *= o1lv; O1R *= o1rv; if( o1v_mod ) { modulatevol( O1L, o1v ) modulatevol( O1R, o1v ) } // update osc1 phase working variable o1l_p += 1.0f / ( static_cast( m_parent->m_samplerate ) / o1l_f ); o1r_p += 1.0f / ( static_cast( m_parent->m_samplerate ) / o1r_f ); ///////////////////////////// // // // OSC 2 // // // ///////////////////////////// // calc and mod frequencies o2l_f = o2lfb; o2r_f = o2rfb; if( o2f_mod ) { modulatefreq( o2l_f, o2f ) modulatefreq( o2r_f, o2f ) } // calc and modulate phase leftph = o2l_p; rightph = o2r_p; if( o2p_mod ) { modulatephs( leftph, o2p ) modulatephs( rightph, o2p ) } leftph = absFraction( leftph ); rightph = absFraction( rightph ); // phase delta pd_l = qAbs( leftph - m_ph2l_last ); if( pd_l > 0.5 ) pd_l = 1.0 - pd_l; pd_r = qAbs( rightph - m_ph2r_last ); if( pd_r > 0.5 ) pd_r = 1.0 - pd_r; // multi-wave DC Oscillator len_l = BandLimitedWave::pdToLen( pd_l ); len_r = BandLimitedWave::pdToLen( pd_r ); if( m_counter2l > 0 ) { len_l /= m_counter2l; m_counter2l--; } if( m_counter2r > 0 ) { len_r /= m_counter2r; m_counter2r--; } sample_t O2L = oscillate( o2w, leftph, len_l ); sample_t O2R = oscillate( o2w, rightph, len_r ); // modulate volume O2L *= o2lv; O2R *= o2rv; if( o2v_mod ) { modulatevol( O2L, o2v ) modulatevol( O2R, o2v ) } // reverse sync - invert waveforms when needed if( m_invert2l ) O2L *= -1.0; if( m_invert2r ) O2R *= -1.0; // update osc2 phases m_ph2l_last = leftph; m_ph2r_last = rightph; o2l_p += 1.0f / ( static_cast( m_parent->m_samplerate ) / o2l_f ); o2r_p += 1.0f / ( static_cast( m_parent->m_samplerate ) / o2r_f ); ///////////////////////////// // // // OSC 3 // // // ///////////////////////////// // calc and mod frequencies o3l_f = o3fb; o3r_f = o3fb; if( o3f_mod ) { modulatefreq( o3l_f, o3f ) modulatefreq( o3r_f, o3f ) } // calc and modulate phase leftph = o3l_p; rightph = o3r_p; if( o3p_mod ) { modulatephs( leftph, o3p ) modulatephs( rightph, o3p ) } // o2 modulation? if( omod == MOD_PM ) { leftph += O2L * 0.5f; rightph += O2R * 0.5f; } leftph = absFraction( leftph ); rightph = absFraction( rightph ); // phase delta pd_l = qAbs( leftph - m_ph3l_last ); if( pd_l > 0.5 ) pd_l = 1.0 - pd_l; pd_r = qAbs( rightph - m_ph3r_last ); if( pd_r > 0.5 ) pd_r = 1.0 - pd_r; // multi-wave DC Oscillator len_l = BandLimitedWave::pdToLen( pd_l ); len_r = BandLimitedWave::pdToLen( pd_r ); if( m_counter3l > 0 ) { len_l /= m_counter3l; m_counter3l--; } if( m_counter3r > 0 ) { len_r /= m_counter3r; m_counter3r--; } // sub-osc 1 sample_t O3AL = oscillate( o3w1, leftph, len_l ); sample_t O3AR = oscillate( o3w1, rightph, len_r ); // multi-wave DC Oscillator, sub-osc 2 sample_t O3BL = oscillate( o3w2, leftph, len_l ); sample_t O3BR = oscillate( o3w2, rightph, len_r ); // calc and modulate sub sub = o3sub; if( o3s_mod ) { modulateabs( sub, o3s ) sub = qBound( 0.0f, sub, 1.0f ); } sample_t O3L = linearInterpolate( O3AL, O3BL, sub ); sample_t O3R = linearInterpolate( O3AR, O3BR, sub ); // modulate volume O3L *= o3lv; O3R *= o3rv; if( o3v_mod ) { modulatevol( O3L, o3v ) modulatevol( O3R, o3v ) } // o2 modulation? if( omod == MOD_AM ) { O3L = qBound( -MODCLIP, O3L * qMax( 0.0f, 1.0f + O2L ), MODCLIP ); O3R = qBound( -MODCLIP, O3R * qMax( 0.0f, 1.0f + O2R ), MODCLIP ); } // reverse sync - invert waveforms when needed if( m_invert3l ) O3L *= -1.0; if( m_invert3r ) O3R *= -1.0; // update osc3 phases m_ph3l_last = leftph; m_ph3r_last = rightph; len_l = 1.0f / ( static_cast( m_parent->m_samplerate ) / o3l_f ); len_r = 1.0f / ( static_cast( m_parent->m_samplerate ) / o3r_f ); // handle FM as PM if( omod == MOD_FM ) { len_l += O2L * m_parent->m_fmCorrection; len_r += O2R * m_parent->m_fmCorrection; } o3l_p += len_l; o3r_p += len_r; // integrator - very simple filter sample_t L = O1L + O3L + ( omod == MOD_MIX ? O2L : 0.0f ); sample_t R = O1R + O3R + ( omod == MOD_MIX ? O2R : 0.0f ); _buf[f][0] = linearInterpolate( L, m_l_last, m_parent->m_integrator ); _buf[f][1] = linearInterpolate( R, m_r_last, m_parent->m_integrator ); m_l_last = L; m_r_last = R; } // update phases m_osc1l_phase = absFraction( o1l_p - o1lpo ); m_osc1r_phase = absFraction( o1r_p - o1rpo ); m_osc2l_phase = absFraction( o2l_p - o2lpo ); m_osc2r_phase = absFraction( o2r_p - o2rpo ); m_osc3l_phase = absFraction( o3l_p - o3lpo ); m_osc3r_phase = absFraction( o3r_p - o3rpo ); m_lfo_phase[0] = absFraction( m_lfo_phase[0] - lfo1_po ); m_lfo_phase[1] = absFraction( m_lfo_phase[1] - lfo2_po ); } inline void MonstroSynth::updateModulators( float * env1, float * env2, float * lfo1, float * lfo2, int frames ) { // frames played before const f_cnt_t tfp = m_nph->totalFramesPlayed(); float * lfo [2]; float * env [2]; lfo[0] = lfo1; lfo[1] = lfo2; env[0] = env1; env[1] = env2; for( int i = 0; i < 2; ++i ) { switch( m_lfovalue[i] ) { case WAVE_SINE: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::sinSample( m_lfo_phase[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_TRI: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::triangleSample( m_lfo_phase[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_SAW: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::sawSample( m_lfo_phase[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_RAMP: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::sawSample( m_lfo_phase[i] ) * -1.0f; m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_SQR: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::squareSample( m_lfo_phase[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_SQRSOFT: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = oscillate( WAVE_SQRSOFT, m_lfo_phase[i], 0 ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_MOOG: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::moogSawSample( m_lfo_phase[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_SINABS: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = oscillate( WAVE_SINABS, m_lfo_phase[i], 0 ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_EXP: for( f_cnt_t f = 0; f < frames; ++f ) { lfo[i][f] = Oscillator::expSample( m_lfo_phase[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_RANDOM: for( f_cnt_t f = 0; f < frames; ++f ) { if( ( tfp + f ) % static_cast( m_lfo_rate[i] ) == 0 ) m_lfo_last[i] = Oscillator::noiseSample( 0.0f ); lfo[i][f] = m_lfo_last[i]; m_lfo_phase[i] += m_lfo_inc[i]; } break; case WAVE_RANDOM_SMOOTH: for( f_cnt_t f = 0; f < frames; ++f ) { const f_cnt_t tm = ( tfp + f ) % static_cast( m_lfo_rate[i] ); if( tm == 0 ) { m_lfo_last[i] = m_lfo_next[i]; m_lfo_next[i] = Oscillator::noiseSample( 0.0f ); } lfo[i][f] = cosinusInterpolate( m_lfo_last[i], m_lfo_next[i], static_cast( tm ) / m_lfo_rate[i] ); m_lfo_phase[i] += m_lfo_inc[i]; } break; } // attack for( f_cnt_t f = 0; f < frames; ++f ) { if( tfp + f < m_lfoatt[i] ) lfo[i][f] *= ( static_cast( tfp ) / m_lfoatt[i] ); } ///////////////////////////////////////////// // // // // // envelopes // // // // // ///////////////////////////////////////////// for( f_cnt_t f = 0; f < frames; ++f ) { if( m_env_phase[i] < 4.0f && m_nph->isReleased() && f >= m_nph->framesBeforeRelease() ) { if( m_env_phase[i] < 1.0f ) m_env_phase[i] = 5.0f; else if( m_env_phase[i] < 2.0f ) m_env_phase[i] = 5.0f - fraction( m_env_phase[i] ); else if( m_env_phase[i] < 3.0f ) m_env_phase[i] = 4.0f; else m_env_phase[i] = 4.0f + fraction( m_env_phase[i] ); } // process envelope if( m_env_phase[i] < 1.0f ) // pre-delay phase { env[i][f] = 0.0f; m_env_phase[i] = qMin( 1.0f, m_env_phase[i] + m_env_pre[i] ); } else if( m_env_phase[i] < 2.0f ) // attack phase { env[i][f] = calcSlope( i, fraction( m_env_phase[i] ) ); m_env_phase[i] = qMin( 2.0f, m_env_phase[i] + m_env_att[i] ); } else if( m_env_phase[i] < 3.0f ) // hold phase { env[i][f] = 1.0f; m_env_phase[i] = qMin( 3.0f, m_env_phase[i] + m_env_hold[i] ); } else if( m_env_phase[i] < 4.0f ) // decay phase { const sample_t s = calcSlope( i, 1.0f - fraction( m_env_phase[i] ) ); if( s <= m_env_sus[i] ) { env[i][f] = m_env_sus[i]; } else { env[i][f] = s; m_env_phase[i] = qMin( 4.0f - m_env_sus[i], m_env_phase[i] + m_env_dec[i] ); if( m_env_phase[i] == 4.0f ) m_env_phase[i] = 5.0f; // jump over release if sustain is zero - fix for clicking } } else if( m_env_phase[i] < 5.0f ) // release phase { env[i][f] = calcSlope( i, 1.0f - fraction( m_env_phase[i] ) ); m_env_phase[i] += m_env_rel[i]; } else env[i][f] = 0.0f; } } } inline sample_t MonstroSynth::calcSlope( int slope, sample_t s ) { if( m_parent->m_slope[slope] == 1.0f ) return s; if( s == 0.0f ) return s; return fastPow( s, m_parent->m_slope[slope] ); } MonstroInstrument::MonstroInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &monstro_plugin_descriptor ), m_osc1Vol( 33.0, 0.0, 200.0, 0.1, this, tr( "Osc 1 Volume" ) ), m_osc1Pan( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 1 Panning" ) ), m_osc1Crs( 0.0, -24.0, 24.0, 1.0, this, tr( "Osc 1 Coarse detune" ) ), m_osc1Ftl( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 1 Fine detune left" ) ), m_osc1Ftr( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 1 Fine detune right" ) ), m_osc1Spo( 0.0, -180.0, 180.0, 0.1, this, tr( "Osc 1 Stereo phase offset" ) ), m_osc1Pw( 50.0, PW_MIN, PW_MAX, 0.01, this, tr( "Osc 1 Pulse width" ) ), m_osc1SSR( false, this, tr( "Osc 1 Sync send on rise" ) ), m_osc1SSF( false, this, tr( "Osc 1 Sync send on fall" ) ), m_osc2Vol( 33.0, 0.0, 200.0, 0.1, this, tr( "Osc 2 Volume" ) ), m_osc2Pan( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 2 Panning" ) ), m_osc2Crs( 0.0, -24.0, 24.0, 1.0, this, tr( "Osc 2 Coarse detune" ) ), m_osc2Ftl( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 2 Fine detune left" ) ), m_osc2Ftr( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 2 Fine detune right" ) ), m_osc2Spo( 0.0, -180.0, 180.0, 0.1, this, tr( "Osc 2 Stereo phase offset" ) ), m_osc2Wave( this, tr( "Osc 2 Waveform" ) ), m_osc2SyncH( false, this, tr( "Osc 2 Sync Hard" ) ), m_osc2SyncR( false, this, tr( "Osc 2 Sync Reverse" ) ), m_osc3Vol( 33.0, 0.0, 200.0, 0.1, this, tr( "Osc 3 Volume" ) ), m_osc3Pan( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 3 Panning" ) ), m_osc3Crs( 0.0, -24.0, 24.0, 1.0, this, tr( "Osc 3 Coarse detune" ) ), m_osc3Spo( 0.0, -180.0, 180.0, 0.1, this, tr( "Osc 3 Stereo phase offset" ) ), m_osc3Sub( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 3 Sub-oscillator mix" ) ), m_osc3Wave1( this, tr( "Osc 3 Waveform 1" ) ), m_osc3Wave2( this, tr( "Osc 3 Waveform 2" ) ), m_osc3SyncH( false, this, tr( "Osc 3 Sync Hard" ) ), m_osc3SyncR( false, this, tr( "Osc 3 Sync Reverse" ) ), m_lfo1Wave( this, tr( "LFO 1 Waveform" ) ), m_lfo1Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "LFO 1 Attack" ) ), m_lfo1Rate( 1.0f, 0.1, 10000.0, 0.1, 10000.0f, this, tr( "LFO 1 Rate" ) ), m_lfo1Phs( 0.0, -180.0, 180.0, 0.1, this, tr( "LFO 1 Phase" ) ), m_lfo2Wave( this, tr( "LFO 2 Waveform" ) ), m_lfo2Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "LFO 2 Attack" ) ), m_lfo2Rate( 1.0f, 0.1, 10000.0, 0.1, 10000.0f, this, tr( "LFO 2 Rate" ) ), m_lfo2Phs( 0.0, -180.0, 180.0, 0.1, this, tr( "LFO 2 Phase" ) ), m_env1Pre( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 1 Pre-delay" ) ), m_env1Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 1 Attack" ) ), m_env1Hold( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 1 Hold" ) ), m_env1Dec( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 1 Decay" ) ), m_env1Sus( 1.0f, 0.0f, 1.0f, 0.001f, this, tr( "Env 1 Sustain" ) ), m_env1Rel( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 1 Release" ) ), m_env1Slope( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Env 1 Slope" ) ), m_env2Pre( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 2 Pre-delay" ) ), m_env2Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 2 Attack" ) ), m_env2Hold( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 2 Hold" ) ), m_env2Dec( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 2 Decay" ) ), m_env2Sus( 1.0f, 0.0f, 1.0f, 0.001f, this, tr( "Env 2 Sustain" ) ), m_env2Rel( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 2 Release" ) ), m_env2Slope( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Env 2 Slope" ) ), m_o23Mod( 0, 0, NUM_MODS - 1, this, tr( "Osc2-3 modulation" ) ), m_selectedView( 0, 0, 1, this, tr( "Selected view" ) ), m_vol1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-Env1" ) ), m_vol1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-Env2" ) ), m_vol1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-LFO1" ) ), m_vol1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-LFO2" ) ), m_vol2env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-Env1" ) ), m_vol2env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-Env2" ) ), m_vol2lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-LFO1" ) ), m_vol2lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-LFO2" ) ), m_vol3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-Env1" ) ), m_vol3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-Env2" ) ), m_vol3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-LFO1" ) ), m_vol3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-LFO2" ) ), m_phs1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-Env1" ) ), m_phs1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-Env2" ) ), m_phs1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-LFO1" ) ), m_phs1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-LFO2" ) ), m_phs2env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-Env1" ) ), m_phs2env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-Env2" ) ), m_phs2lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-LFO1" ) ), m_phs2lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-LFO2" ) ), m_phs3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-Env1" ) ), m_phs3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-Env2" ) ), m_phs3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-LFO1" ) ), m_phs3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-LFO2" ) ), m_pit1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-Env1" ) ), m_pit1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-Env2" ) ), m_pit1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-LFO1" ) ), m_pit1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-LFO2" ) ), m_pit2env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-Env1" ) ), m_pit2env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-Env2" ) ), m_pit2lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-LFO1" ) ), m_pit2lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-LFO2" ) ), m_pit3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-Env1" ) ), m_pit3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-Env2" ) ), m_pit3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-LFO1" ) ), m_pit3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-LFO2" ) ), m_pw1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-Env1" ) ), m_pw1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-Env2" ) ), m_pw1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-LFO1" ) ), m_pw1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-LFO2" ) ), m_sub3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-Env1" ) ), m_sub3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-Env2" ) ), m_sub3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-LFO1" ) ), m_sub3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-LFO2" ) ) { // setup waveboxes setwavemodel( m_osc2Wave ) setwavemodel( m_osc3Wave1 ) setwavemodel( m_osc3Wave2 ) setlfowavemodel( m_lfo1Wave ) setlfowavemodel( m_lfo2Wave ) // make connections: // updateVolumes connect( &m_osc1Vol, SIGNAL( dataChanged() ), this, SLOT( updateVolume1() ) ); connect( &m_osc1Pan, SIGNAL( dataChanged() ), this, SLOT( updateVolume1() ) ); connect( &m_osc2Vol, SIGNAL( dataChanged() ), this, SLOT( updateVolume2() ) ); connect( &m_osc2Pan, SIGNAL( dataChanged() ), this, SLOT( updateVolume2() ) ); connect( &m_osc3Vol, SIGNAL( dataChanged() ), this, SLOT( updateVolume3() ) ); connect( &m_osc3Pan, SIGNAL( dataChanged() ), this, SLOT( updateVolume3() ) ); // updateFreq connect( &m_osc1Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) ); connect( &m_osc2Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) ); connect( &m_osc3Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq3() ) ); connect( &m_osc1Ftl, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) ); connect( &m_osc2Ftl, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) ); connect( &m_osc1Ftr, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) ); connect( &m_osc2Ftr, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) ); // updatePO connect( &m_osc1Spo, SIGNAL( dataChanged() ), this, SLOT( updatePO1() ) ); connect( &m_osc2Spo, SIGNAL( dataChanged() ), this, SLOT( updatePO2() ) ); connect( &m_osc3Spo, SIGNAL( dataChanged() ), this, SLOT( updatePO3() ) ); // updateEnvelope1 connect( &m_env1Pre, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) ); connect( &m_env1Att, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) ); connect( &m_env1Hold, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) ); connect( &m_env1Dec, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) ); connect( &m_env1Rel, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) ); connect( &m_env1Slope, SIGNAL( dataChanged() ), this, SLOT( updateSlope1() ) ); // updateEnvelope2 connect( &m_env2Pre, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) ); connect( &m_env2Att, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) ); connect( &m_env2Hold, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) ); connect( &m_env2Dec, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) ); connect( &m_env2Rel, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) ); connect( &m_env2Slope, SIGNAL( dataChanged() ), this, SLOT( updateSlope2() ) ); // updateLFOAtts connect( &m_lfo1Att, SIGNAL( dataChanged() ), this, SLOT( updateLFOAtts() ) ); connect( &m_lfo2Att, SIGNAL( dataChanged() ), this, SLOT( updateLFOAtts() ) ); // updateSampleRate connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSamplerate() ) ); m_fpp = engine::mixer()->framesPerPeriod(); updateSamplerate(); updateVolume1(); updateVolume2(); updateVolume3(); updateFreq1(); updateFreq2(); updateFreq3(); updatePO1(); updatePO2(); updatePO3(); updateSlope1(); updateSlope2(); } MonstroInstrument::~MonstroInstrument() { } void MonstroInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { _n->m_pluginData = new MonstroSynth( this, _n ); } const fpp_t frames = _n->framesLeftForCurrentPeriod(); MonstroSynth * ms = static_cast( _n->m_pluginData ); ms->renderOutput( frames, _working_buffer ); //applyRelease( _working_buffer, _n ); // we have our own release instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void MonstroInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } void MonstroInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_osc1Vol.saveSettings( _doc, _this, "o1vol" ); m_osc1Pan.saveSettings( _doc, _this, "o1pan" ); m_osc1Crs.saveSettings( _doc, _this, "o1crs" ); m_osc1Ftl.saveSettings( _doc, _this, "o1ftl" ); m_osc1Ftr.saveSettings( _doc, _this, "o1ftr" ); m_osc1Spo.saveSettings( _doc, _this, "o1spo" ); m_osc1Pw.saveSettings( _doc, _this, "o1pw" ); m_osc1SSR.saveSettings( _doc, _this, "o1ssr" ); m_osc1SSF.saveSettings( _doc, _this, "o1ssf" ); m_osc2Vol.saveSettings( _doc, _this, "o2vol" ); m_osc2Pan.saveSettings( _doc, _this, "o2pan" ); m_osc2Crs.saveSettings( _doc, _this, "o2crs" ); m_osc2Ftl.saveSettings( _doc, _this, "o2ftl" ); m_osc2Ftr.saveSettings( _doc, _this, "o2ftr" ); m_osc2Spo.saveSettings( _doc, _this, "o2spo" ); m_osc2Wave.saveSettings( _doc, _this, "o2wav" ); m_osc2SyncH.saveSettings( _doc, _this, "o2syn" ); m_osc2SyncR.saveSettings( _doc, _this, "o2synr" ); m_osc3Vol.saveSettings( _doc, _this, "o3vol" ); m_osc3Pan.saveSettings( _doc, _this, "o3pan" ); m_osc3Crs.saveSettings( _doc, _this, "o3crs" ); m_osc3Spo.saveSettings( _doc, _this, "o3spo" ); m_osc3Sub.saveSettings( _doc, _this, "o3sub" ); m_osc3Wave1.saveSettings( _doc, _this, "o3wav1" ); m_osc3Wave2.saveSettings( _doc, _this, "o3wav2" ); m_osc3SyncH.saveSettings( _doc, _this, "o3syn" ); m_osc3SyncR.saveSettings( _doc, _this, "o3synr" ); m_lfo1Wave.saveSettings( _doc, _this, "l1wav" ); m_lfo1Att.saveSettings( _doc, _this, "l1att" ); m_lfo1Rate.saveSettings( _doc, _this, "l1rat" ); m_lfo1Phs.saveSettings( _doc, _this, "l1phs" ); m_lfo2Wave.saveSettings( _doc, _this, "l2wav" ); m_lfo2Att.saveSettings( _doc, _this, "l2att" ); m_lfo2Rate.saveSettings( _doc, _this, "l2rat" ); m_lfo2Phs.saveSettings( _doc, _this, "l2phs" ); m_env1Pre.saveSettings( _doc, _this, "e1pre" ); m_env1Att.saveSettings( _doc, _this, "e1att" ); m_env1Hold.saveSettings( _doc, _this, "e1hol" ); m_env1Dec.saveSettings( _doc, _this, "e1dec" ); m_env1Sus.saveSettings( _doc, _this, "e1sus" ); m_env1Rel.saveSettings( _doc, _this, "e1rel" ); m_env1Slope.saveSettings( _doc, _this, "e1slo" ); m_env2Pre.saveSettings( _doc, _this, "e2pre" ); m_env2Att.saveSettings( _doc, _this, "e2att" ); m_env2Hold.saveSettings( _doc, _this, "e2hol" ); m_env2Dec.saveSettings( _doc, _this, "e2dec" ); m_env2Sus.saveSettings( _doc, _this, "e2sus" ); m_env2Rel.saveSettings( _doc, _this, "e2rel" ); m_env2Slope.saveSettings( _doc, _this, "e2slo" ); m_o23Mod.saveSettings( _doc, _this, "o23mo" ); m_vol1env1.saveSettings( _doc, _this, "v1e1" ); m_vol1env2.saveSettings( _doc, _this, "v1e2" ); m_vol1lfo1.saveSettings( _doc, _this, "v1l1" ); m_vol1lfo2.saveSettings( _doc, _this, "v1l2" ); m_vol2env1.saveSettings( _doc, _this, "v2e1" ); m_vol2env2.saveSettings( _doc, _this, "v2e2" ); m_vol2lfo1.saveSettings( _doc, _this, "v2l1" ); m_vol2lfo2.saveSettings( _doc, _this, "v2l2" ); m_vol3env1.saveSettings( _doc, _this, "v3e1" ); m_vol3env2.saveSettings( _doc, _this, "v3e2" ); m_vol3lfo1.saveSettings( _doc, _this, "v3l1" ); m_vol3lfo2.saveSettings( _doc, _this, "v3l2" ); m_phs1env1.saveSettings( _doc, _this, "p1e1" ); m_phs1env2.saveSettings( _doc, _this, "p1e2" ); m_phs1lfo1.saveSettings( _doc, _this, "p1l1" ); m_phs1lfo2.saveSettings( _doc, _this, "p1l2" ); m_phs2env1.saveSettings( _doc, _this, "p2e1" ); m_phs2env2.saveSettings( _doc, _this, "p2e2" ); m_phs2lfo1.saveSettings( _doc, _this, "p2l1" ); m_phs2lfo2.saveSettings( _doc, _this, "p2l2" ); m_phs3env1.saveSettings( _doc, _this, "p3e1" ); m_phs3env2.saveSettings( _doc, _this, "p3e2" ); m_phs3lfo1.saveSettings( _doc, _this, "p3l1" ); m_phs3lfo2.saveSettings( _doc, _this, "p3l2" ); m_pit1env1.saveSettings( _doc, _this, "f1e1" ); m_pit1env2.saveSettings( _doc, _this, "f1e2" ); m_pit1lfo1.saveSettings( _doc, _this, "f1l1" ); m_pit1lfo2.saveSettings( _doc, _this, "f1l2" ); m_pit2env1.saveSettings( _doc, _this, "f2e1" ); m_pit2env2.saveSettings( _doc, _this, "f2e2" ); m_pit2lfo1.saveSettings( _doc, _this, "f2l1" ); m_pit2lfo2.saveSettings( _doc, _this, "f2l2" ); m_pit3env1.saveSettings( _doc, _this, "f3e1" ); m_pit3env2.saveSettings( _doc, _this, "f3e2" ); m_pit3lfo1.saveSettings( _doc, _this, "f3l1" ); m_pit3lfo2.saveSettings( _doc, _this, "f3l2" ); m_pw1env1.saveSettings( _doc, _this, "w1e1" ); m_pw1env2.saveSettings( _doc, _this, "w1e2" ); m_pw1lfo1.saveSettings( _doc, _this, "w1l1" ); m_pw1lfo2.saveSettings( _doc, _this, "w1l2" ); m_sub3env1.saveSettings( _doc, _this, "s3e1" ); m_sub3env2.saveSettings( _doc, _this, "s3e2" ); m_sub3lfo1.saveSettings( _doc, _this, "s3l1" ); m_sub3lfo2.saveSettings( _doc, _this, "s3l2" ); } void MonstroInstrument::loadSettings( const QDomElement & _this ) { m_osc1Vol.loadSettings( _this, "o1vol" ); m_osc1Pan.loadSettings( _this, "o1pan" ); m_osc1Crs.loadSettings( _this, "o1crs" ); m_osc1Ftl.loadSettings( _this, "o1ftl" ); m_osc1Ftr.loadSettings( _this, "o1ftr" ); m_osc1Spo.loadSettings( _this, "o1spo" ); m_osc1Pw.loadSettings( _this, "o1pw" ); m_osc1SSR.loadSettings( _this, "o1ssr" ); m_osc1SSF.loadSettings( _this, "o1ssf" ); m_osc2Vol.loadSettings( _this, "o2vol" ); m_osc2Pan.loadSettings( _this, "o2pan" ); m_osc2Crs.loadSettings( _this, "o2crs" ); m_osc2Ftl.loadSettings( _this, "o2ftl" ); m_osc2Ftr.loadSettings( _this, "o2ftr" ); m_osc2Spo.loadSettings( _this, "o2spo" ); m_osc2Wave.loadSettings( _this, "o2wav" ); m_osc2SyncH.loadSettings( _this, "o2syn" ); m_osc2SyncR.loadSettings( _this, "o2synr" ); m_osc3Vol.loadSettings( _this, "o3vol" ); m_osc3Pan.loadSettings( _this, "o3pan" ); m_osc3Crs.loadSettings( _this, "o3crs" ); m_osc3Spo.loadSettings( _this, "o3spo" ); m_osc3Sub.loadSettings( _this, "o3sub" ); m_osc3Wave1.loadSettings( _this, "o3wav1" ); m_osc3Wave2.loadSettings( _this, "o3wav2" ); m_osc3SyncH.loadSettings( _this, "o3syn" ); m_osc3SyncR.loadSettings( _this, "o3synr" ); m_lfo1Wave.loadSettings( _this, "l1wav" ); m_lfo1Att.loadSettings( _this, "l1att" ); m_lfo1Rate.loadSettings( _this, "l1rat" ); m_lfo1Phs.loadSettings( _this, "l1phs" ); m_lfo2Wave.loadSettings( _this, "l2wav" ); m_lfo2Att.loadSettings( _this, "l2att" ); m_lfo2Rate.loadSettings( _this, "l2rat" ); m_lfo2Phs.loadSettings( _this, "l2phs" ); m_env1Pre.loadSettings( _this, "e1pre" ); m_env1Att.loadSettings( _this, "e1att" ); m_env1Hold.loadSettings( _this, "e1hol" ); m_env1Dec.loadSettings( _this, "e1dec" ); m_env1Sus.loadSettings( _this, "e1sus" ); m_env1Rel.loadSettings( _this, "e1rel" ); m_env1Slope.loadSettings( _this, "e1slo" ); m_env2Pre.loadSettings( _this, "e2pre" ); m_env2Att.loadSettings( _this, "e2att" ); m_env2Hold.loadSettings( _this, "e2hol" ); m_env2Dec.loadSettings( _this, "e2dec" ); m_env2Sus.loadSettings( _this, "e2sus" ); m_env2Rel.loadSettings( _this, "e2rel" ); m_env2Slope.loadSettings( _this, "e2slo" ); m_o23Mod.loadSettings( _this, "o23mo" ); m_vol1env1.loadSettings( _this, "v1e1" ); m_vol1env2.loadSettings( _this, "v1e2" ); m_vol1lfo1.loadSettings( _this, "v1l1" ); m_vol1lfo2.loadSettings( _this, "v1l2" ); m_vol2env1.loadSettings( _this, "v2e1" ); m_vol2env2.loadSettings( _this, "v2e2" ); m_vol2lfo1.loadSettings( _this, "v2l1" ); m_vol2lfo2.loadSettings( _this, "v2l2" ); m_vol3env1.loadSettings( _this, "v3e1" ); m_vol3env2.loadSettings( _this, "v3e2" ); m_vol3lfo1.loadSettings( _this, "v3l1" ); m_vol3lfo2.loadSettings( _this, "v3l2" ); m_phs1env1.loadSettings( _this, "p1e1" ); m_phs1env2.loadSettings( _this, "p1e2" ); m_phs1lfo1.loadSettings( _this, "p1l1" ); m_phs1lfo2.loadSettings( _this, "p1l2" ); m_phs2env1.loadSettings( _this, "p2e1" ); m_phs2env2.loadSettings( _this, "p2e2" ); m_phs2lfo1.loadSettings( _this, "p2l1" ); m_phs2lfo2.loadSettings( _this, "p2l2" ); m_phs3env1.loadSettings( _this, "p3e1" ); m_phs3env2.loadSettings( _this, "p3e2" ); m_phs3lfo1.loadSettings( _this, "p3l1" ); m_phs3lfo2.loadSettings( _this, "p3l2" ); m_pit1env1.loadSettings( _this, "f1e1" ); m_pit1env2.loadSettings( _this, "f1e2" ); m_pit1lfo1.loadSettings( _this, "f1l1" ); m_pit1lfo2.loadSettings( _this, "f1l2" ); m_pit2env1.loadSettings( _this, "f2e1" ); m_pit2env2.loadSettings( _this, "f2e2" ); m_pit2lfo1.loadSettings( _this, "f2l1" ); m_pit2lfo2.loadSettings( _this, "f2l2" ); m_pit3env1.loadSettings( _this, "f3e1" ); m_pit3env2.loadSettings( _this, "f3e2" ); m_pit3lfo1.loadSettings( _this, "f3l1" ); m_pit3lfo2.loadSettings( _this, "f3l2" ); m_pw1env1.loadSettings( _this, "w1e1" ); m_pw1env2.loadSettings( _this, "w1e2" ); m_pw1lfo1.loadSettings( _this, "w1l1" ); m_pw1lfo2.loadSettings( _this, "w1l2" ); m_sub3env1.loadSettings( _this, "s3e1" ); m_sub3env2.loadSettings( _this, "s3e2" ); m_sub3lfo1.loadSettings( _this, "s3l1" ); m_sub3lfo2.loadSettings( _this, "s3l2" ); } QString MonstroInstrument::nodeName() const { return monstro_plugin_descriptor.name; } f_cnt_t MonstroInstrument::desiredReleaseFrames() const { return qMax( 64, qMax( m_env1_relF, m_env2_relF ) ); } PluginView * MonstroInstrument::instantiateView( QWidget * _parent ) { return( new MonstroView( this, _parent ) ); } void MonstroInstrument::updateVolume1() { m_osc1l_vol = leftCh( m_osc1Vol.value(), m_osc1Pan.value() ); m_osc1r_vol = rightCh( m_osc1Vol.value(), m_osc1Pan.value() ); } void MonstroInstrument::updateVolume2() { m_osc2l_vol = leftCh( m_osc2Vol.value(), m_osc2Pan.value() ); m_osc2r_vol = rightCh( m_osc2Vol.value(), m_osc2Pan.value() ); } void MonstroInstrument::updateVolume3() { m_osc3l_vol = leftCh( m_osc3Vol.value(), m_osc3Pan.value() ); m_osc3r_vol = rightCh( m_osc3Vol.value(), m_osc3Pan.value() ); } void MonstroInstrument::updateFreq1() { m_osc1l_freq = powf( 2.0f, m_osc1Crs.value() / 12.0f ) * powf( 2.0f, m_osc1Ftl.value() / 1200.0f ); m_osc1r_freq = powf( 2.0f, m_osc1Crs.value() / 12.0f ) * powf( 2.0f, m_osc1Ftr.value() / 1200.0f ); } void MonstroInstrument::updateFreq2() { m_osc2l_freq = powf( 2.0f, m_osc2Crs.value() / 12.0f ) * powf( 2.0f, m_osc2Ftl.value() / 1200.0f ); m_osc2r_freq = powf( 2.0f, m_osc2Crs.value() / 12.0f ) * powf( 2.0f, m_osc2Ftr.value() / 1200.0f ); } void MonstroInstrument::updateFreq3() { m_osc3_freq = powf( 2.0f, m_osc3Crs.value() / 12.0f ); } void MonstroInstrument::updatePO1() { m_osc1l_po = m_osc1Spo.value() / 720.0f; m_osc1r_po = ( m_osc1Spo.value() * -1.0 ) / 720.0f; } void MonstroInstrument::updatePO2() { m_osc2l_po = m_osc2Spo.value() / 720.0f; m_osc2r_po = ( m_osc2Spo.value() * -1.0 ) / 720.0f; } void MonstroInstrument::updatePO3() { m_osc3l_po = m_osc3Spo.value() / 720.0f; m_osc3r_po = ( m_osc3Spo.value() * -1.0 ) / 720.0f; } void MonstroInstrument::updateEnvelope1() { if( m_env1Pre.value() == 0.0f ) m_env1_pre = 1.0; else m_env1_pre = 1.0f / ( m_env1Pre.value() / 1000.0f ) / m_samplerate; if( m_env1Att.value() == 0.0f ) m_env1_att = 1.0; else m_env1_att = 1.0f / ( m_env1Att.value() / 1000.0f ) / m_samplerate; if( m_env1Hold.value() == 0.0f ) m_env1_hold = 1.0; else m_env1_hold = 1.0f / ( m_env1Hold.value() / 1000.0f ) / m_samplerate; if( m_env1Dec.value() == 0.0f ) m_env1_dec = 1.0; else m_env1_dec = 1.0f / ( m_env1Dec.value() / 1000.0f ) / m_samplerate; if( m_env1Rel.value() == 0.0f ) m_env1_rel = 1.0; else m_env1_rel = 1.0f / ( m_env1Rel.value() / 1000.0f ) / m_samplerate; m_env1_len = ( m_env1Pre.value() + m_env1Att.value() + m_env1Hold.value() + m_env1Dec.value() ) * m_samplerate / 1000.0f; m_env1_relF = m_env1Rel.value() * m_samplerate / 1000.0f; } void MonstroInstrument::updateEnvelope2() { if( m_env2Pre.value() == 0.0f ) m_env2_pre = 1.0; else m_env2_pre = 1.0f / ( m_env2Pre.value() / 1000.0f ) / m_samplerate; if( m_env2Att.value() == 0.0f ) m_env2_att = 1.0; else m_env2_att = 1.0f / ( m_env2Att.value() / 1000.0f ) / m_samplerate; if( m_env2Hold.value() == 0.0f ) m_env2_hold = 1.0; else m_env2_hold = 1.0f / ( m_env2Hold.value() / 1000.0f ) / m_samplerate; if( m_env2Dec.value() == 0.0f ) m_env2_dec = 1.0; else m_env2_dec = 1.0f / ( m_env2Dec.value() / 1000.0f ) / m_samplerate; if( m_env2Rel.value() == 0.0f ) m_env2_rel = 1.0; else m_env2_rel = 1.0f / ( m_env2Rel.value() / 1000.0f ) / m_samplerate; m_env2_len = ( m_env2Pre.value() + m_env2Att.value() + m_env2Hold.value() + m_env2Dec.value() ) * m_samplerate / 1000.0f; m_env2_relF = m_env2Rel.value() * m_samplerate / 1000.0f; } void MonstroInstrument::updateLFOAtts() { m_lfo1_att = m_lfo1Att.value() * m_samplerate / 1000.0f; m_lfo2_att = m_lfo2Att.value() * m_samplerate / 1000.0f; } void MonstroInstrument::updateSamplerate() { m_samplerate = engine::mixer()->processingSampleRate(); m_integrator = 0.5f - ( 0.5f - INTEGRATOR ) * 44100.0f / m_samplerate; m_fmCorrection = 44100.f / m_samplerate * FM_AMOUNT; m_counterMax = ( m_samplerate * 5 ) / 44100; updateEnvelope1(); updateEnvelope2(); updateLFOAtts(); } void MonstroInstrument::updateSlope1() { const float slope = m_env1Slope.value(); m_slope[0] = exp10f( slope * -1.0f ); } void MonstroInstrument::updateSlope2() { const float slope = m_env2Slope.value(); m_slope[1] = exp10f( slope * -1.0f ); } MonstroView::MonstroView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { m_operatorsView = setupOperatorsView( this ); setWidgetBackground( m_operatorsView, "artwork_op" ); m_operatorsView->show(); m_operatorsView->move( 0, 0 ); m_matrixView = setupMatrixView( this ); setWidgetBackground( m_matrixView, "artwork_mat" ); m_matrixView->hide(); m_matrixView->move( 0, 0 ); // "tab buttons" pixmapButton * m_opViewButton = new pixmapButton( this, NULL ); m_opViewButton -> move( 0,0 ); m_opViewButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "opview_active" ) ); m_opViewButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "opview_inactive" ) ); toolTip::add( m_opViewButton, tr( "Operators view" ) ); m_opViewButton -> setWhatsThis( tr( "The Operators view contains all the operators. These include both audible " "operators (oscillators) and inaudible operators, or modulators: " "Low-frequency oscillators and Envelopes. \n\n" "Knobs and other widgets in the Operators view have their own what's this -texts, " "so you can get more specific help for them that way. " ) ); pixmapButton * m_matViewButton = new pixmapButton( this, NULL ); m_matViewButton -> move( 125,0 ); m_matViewButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "matview_active" ) ); m_matViewButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "matview_inactive" ) ); toolTip::add( m_matViewButton, tr( "Matrix view" ) ); m_matViewButton -> setWhatsThis( tr( "The Matrix view contains the modulation matrix. Here you can define " "the modulation relationships between the various operators: Each " "audible operator (oscillators 1-3) has 3-4 properties that can be " "modulated by any of the modulators. Using more modulations consumes " "more CPU power. \n\n" "The view is divided to modulation targets, grouped by the target oscillator. " "Available targets are volume, pitch, phase, pulse width and sub-osc ratio. " "Note: some targets are specific to one oscillator only. \n\n" "Each modulation target has 4 knobs, one for each modulator. By default " "the knobs are at 0, which means no modulation. Turning a knob to 1 causes " "that modulator to affect the modulation target as much as possible. Turning " "it to -1 does the same, but the modulation is inversed. " ) ); m_selectedViewGroup = new automatableButtonGroup( this ); m_selectedViewGroup -> addButton( m_opViewButton ); m_selectedViewGroup -> addButton( m_matViewButton ); connect( m_opViewButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) ); connect( m_matViewButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) ); } MonstroView::~MonstroView() { } void MonstroView::updateLayout() { switch( m_selectedViewGroup->model()->value() ) { case OPVIEW: m_operatorsView->show(); m_matrixView->hide(); break; case MATVIEW: m_operatorsView->hide(); m_matrixView->show(); break; } } void MonstroView::modelChanged() { MonstroInstrument * m = castModel(); m_osc1VolKnob-> setModel( &m-> m_osc1Vol ); m_osc1PanKnob-> setModel( &m-> m_osc1Pan ); m_osc1CrsKnob-> setModel( &m-> m_osc1Crs ); m_osc1FtlKnob-> setModel( &m-> m_osc1Ftl ); m_osc1FtrKnob-> setModel( &m-> m_osc1Ftr ); m_osc1SpoKnob-> setModel( &m-> m_osc1Spo ); m_osc1PwKnob-> setModel( &m-> m_osc1Pw ); m_osc1SSRButton-> setModel( &m-> m_osc1SSR ); m_osc1SSFButton-> setModel( &m-> m_osc1SSF ); m_osc2VolKnob-> setModel( &m-> m_osc2Vol ); m_osc2PanKnob-> setModel( &m-> m_osc2Pan ); m_osc2CrsKnob-> setModel( &m-> m_osc2Crs ); m_osc2FtlKnob-> setModel( &m-> m_osc2Ftl ); m_osc2FtrKnob-> setModel( &m-> m_osc2Ftr ); m_osc2SpoKnob-> setModel( &m-> m_osc2Spo ); m_osc2WaveBox-> setModel( &m-> m_osc2Wave ); m_osc2SyncHButton-> setModel( &m-> m_osc2SyncH ); m_osc2SyncRButton-> setModel( &m-> m_osc2SyncR ); m_osc3VolKnob-> setModel( &m-> m_osc3Vol ); m_osc3PanKnob-> setModel( &m-> m_osc3Pan ); m_osc3CrsKnob-> setModel( &m-> m_osc3Crs ); m_osc3SpoKnob-> setModel( &m-> m_osc3Spo ); m_osc3SubKnob-> setModel( &m-> m_osc3Sub ); m_osc3Wave1Box-> setModel( &m-> m_osc3Wave1 ); m_osc3Wave2Box-> setModel( &m-> m_osc3Wave2 ); m_osc3SyncHButton-> setModel( &m-> m_osc3SyncH ); m_osc3SyncRButton-> setModel( &m-> m_osc3SyncR ); m_lfo1WaveBox-> setModel( &m-> m_lfo1Wave ); m_lfo1AttKnob-> setModel( &m-> m_lfo1Att ); m_lfo1RateKnob-> setModel( &m-> m_lfo1Rate ); m_lfo1PhsKnob-> setModel( &m-> m_lfo1Phs ); m_lfo2WaveBox-> setModel( &m-> m_lfo2Wave ); m_lfo2AttKnob-> setModel( &m-> m_lfo2Att ); m_lfo2RateKnob-> setModel( &m-> m_lfo2Rate ); m_lfo2PhsKnob-> setModel( &m-> m_lfo2Phs ); m_env1PreKnob-> setModel( &m-> m_env1Pre ); m_env1AttKnob-> setModel( &m-> m_env1Att ); m_env1HoldKnob-> setModel( &m-> m_env1Hold ); m_env1DecKnob-> setModel( &m-> m_env1Dec ); m_env1SusKnob-> setModel( &m-> m_env1Sus ); m_env1RelKnob-> setModel( &m-> m_env1Rel ); m_env1SlopeKnob-> setModel( &m-> m_env1Slope ); m_env2PreKnob-> setModel( &m-> m_env2Pre ); m_env2AttKnob-> setModel( &m-> m_env2Att ); m_env2HoldKnob-> setModel( &m-> m_env2Hold ); m_env2DecKnob-> setModel( &m-> m_env2Dec ); m_env2SusKnob-> setModel( &m-> m_env2Sus ); m_env2RelKnob-> setModel( &m-> m_env2Rel ); m_env2SlopeKnob-> setModel( &m-> m_env2Slope ); m_o23ModGroup-> setModel( &m-> m_o23Mod ); m_selectedViewGroup-> setModel( &m-> m_selectedView ); m_vol1env1Knob-> setModel( &m-> m_vol1env1 ); m_vol1env2Knob-> setModel( &m-> m_vol1env2 ); m_vol1lfo1Knob-> setModel( &m-> m_vol1lfo1 ); m_vol1lfo2Knob-> setModel( &m-> m_vol1lfo2 ); m_vol2env1Knob-> setModel( &m-> m_vol2env1 ); m_vol2env2Knob-> setModel( &m-> m_vol2env2 ); m_vol2lfo1Knob-> setModel( &m-> m_vol2lfo1 ); m_vol2lfo2Knob-> setModel( &m-> m_vol2lfo2 ); m_vol3env1Knob-> setModel( &m-> m_vol3env1 ); m_vol3env2Knob-> setModel( &m-> m_vol3env2 ); m_vol3lfo1Knob-> setModel( &m-> m_vol3lfo1 ); m_vol3lfo2Knob-> setModel( &m-> m_vol3lfo2 ); m_phs1env1Knob-> setModel( &m-> m_phs1env1 ); m_phs1env2Knob-> setModel( &m-> m_phs1env2 ); m_phs1lfo1Knob-> setModel( &m-> m_phs1lfo1 ); m_phs1lfo2Knob-> setModel( &m-> m_phs1lfo2 ); m_phs2env1Knob-> setModel( &m-> m_phs2env1 ); m_phs2env2Knob-> setModel( &m-> m_phs2env2 ); m_phs2lfo1Knob-> setModel( &m-> m_phs2lfo1 ); m_phs2lfo2Knob-> setModel( &m-> m_phs2lfo2 ); m_phs3env1Knob-> setModel( &m-> m_phs3env1 ); m_phs3env2Knob-> setModel( &m-> m_phs3env2 ); m_phs3lfo1Knob-> setModel( &m-> m_phs3lfo1 ); m_phs3lfo2Knob-> setModel( &m-> m_phs3lfo2 ); m_pit1env1Knob-> setModel( &m-> m_pit1env1 ); m_pit1env2Knob-> setModel( &m-> m_pit1env2 ); m_pit1lfo1Knob-> setModel( &m-> m_pit1lfo1 ); m_pit1lfo2Knob-> setModel( &m-> m_pit1lfo2 ); m_pit2env1Knob-> setModel( &m-> m_pit2env1 ); m_pit2env2Knob-> setModel( &m-> m_pit2env2 ); m_pit2lfo1Knob-> setModel( &m-> m_pit2lfo1 ); m_pit2lfo2Knob-> setModel( &m-> m_pit2lfo2 ); m_pit3env1Knob-> setModel( &m-> m_pit3env1 ); m_pit3env2Knob-> setModel( &m-> m_pit3env2 ); m_pit3lfo1Knob-> setModel( &m-> m_pit3lfo1 ); m_pit3lfo2Knob-> setModel( &m-> m_pit3lfo2 ); m_pw1env1Knob-> setModel( &m-> m_pw1env1 ); m_pw1env2Knob-> setModel( &m-> m_pw1env2 ); m_pw1lfo1Knob-> setModel( &m-> m_pw1lfo1 ); m_pw1lfo2Knob-> setModel( &m-> m_pw1lfo2 ); m_sub3env1Knob-> setModel( &m-> m_sub3env1 ); m_sub3env2Knob-> setModel( &m-> m_sub3env2 ); m_sub3lfo1Knob-> setModel( &m-> m_sub3lfo1 ); m_sub3lfo2Knob-> setModel( &m-> m_sub3lfo2 ); } void MonstroView::setWidgetBackground( QWidget * _widget, const QString & _pic ) { _widget->setAutoFillBackground( true ); QPalette pal; pal.setBrush( _widget->backgroundRole(), PLUGIN_NAME::getIconPixmap( _pic.toAscii().constData() ) ); _widget->setPalette( pal ); } QWidget * MonstroView::setupOperatorsView( QWidget * _parent ) { // operators view QWidget * view = new QWidget( _parent ); view-> setFixedSize( 250, 250 ); makeknob( m_osc1VolKnob, KNOBCOL1, O1ROW, "Volume", "%", "osc1Knob" ) makeknob( m_osc1PanKnob, KNOBCOL2, O1ROW, "Panning", "", "osc1Knob" ) makeknob( m_osc1CrsKnob, KNOBCOL3, O1ROW, "Coarse detune", " semitones", "osc1Knob" ) makeknob( m_osc1FtlKnob, KNOBCOL4, O1ROW, "Finetune left", " cents", "osc1Knob" ) makeknob( m_osc1FtrKnob, KNOBCOL5, O1ROW, "Finetune right", " cents", "osc1Knob" ) makeknob( m_osc1SpoKnob, KNOBCOL6, O1ROW, "Stereo phase offset", " deg", "osc1Knob" ) makeknob( m_osc1PwKnob, KNOBCOL7, O1ROW, "Pulse width", "%", "osc1Knob" ) m_osc1VolKnob -> setVolumeKnob( true ); maketinyled( m_osc1SSRButton, 230, 34, "Send sync on pulse rise" ) maketinyled( m_osc1SSFButton, 230, 44, "Send sync on pulse fall" ) makeknob( m_osc2VolKnob, KNOBCOL1, O2ROW, "Volume", "%", "osc2Knob" ) makeknob( m_osc2PanKnob, KNOBCOL2, O2ROW, "Panning", "", "osc2Knob" ) makeknob( m_osc2CrsKnob, KNOBCOL3, O2ROW, "Coarse detune", " semitones", "osc2Knob" ) makeknob( m_osc2FtlKnob, KNOBCOL4, O2ROW, "Finetune left", " cents", "osc2Knob" ) makeknob( m_osc2FtrKnob, KNOBCOL5, O2ROW, "Finetune right", " cents", "osc2Knob" ) makeknob( m_osc2SpoKnob, KNOBCOL6, O2ROW, "Stereo phase offset", " deg", "osc2Knob" ) m_osc2VolKnob -> setVolumeKnob( true ); m_osc2WaveBox = new comboBox( view ); m_osc2WaveBox -> setGeometry( 204, O2ROW + 7, 42, 22 ); m_osc2WaveBox->setFont( pointSize<8>( m_osc2WaveBox->font() ) ); maketinyled( m_osc2SyncHButton, 212, O2ROW - 3, "Hard sync oscillator 2" ) maketinyled( m_osc2SyncRButton, 191, O2ROW - 3, "Reverse sync oscillator 2" ) makeknob( m_osc3VolKnob, KNOBCOL1, O3ROW, "Volume", "%", "osc3Knob" ) makeknob( m_osc3PanKnob, KNOBCOL2, O3ROW, "Panning", "", "osc3Knob" ) makeknob( m_osc3CrsKnob, KNOBCOL3, O3ROW, "Coarse detune", " semitones", "osc3Knob" ) makeknob( m_osc3SpoKnob, KNOBCOL4, O3ROW, "Stereo phase offset", " deg", "osc3Knob" ) makeknob( m_osc3SubKnob, KNOBCOL5, O3ROW, "Sub-osc mix", "", "osc3Knob" ) m_osc3Wave1Box = new comboBox( view ); m_osc3Wave1Box -> setGeometry( 160, O3ROW + 7, 42, 22 ); m_osc3Wave1Box->setFont( pointSize<8>( m_osc3Wave1Box->font() ) ); m_osc3Wave2Box = new comboBox( view ); m_osc3Wave2Box -> setGeometry( 204, O3ROW + 7, 42, 22 ); m_osc3Wave2Box->setFont( pointSize<8>( m_osc3Wave2Box->font() ) ); maketinyled( m_osc3SyncHButton, 212, O3ROW - 3, "Hard sync oscillator 3" ) maketinyled( m_osc3SyncRButton, 191, O3ROW - 3, "Reverse sync oscillator 3" ) m_lfo1WaveBox = new comboBox( view ); m_lfo1WaveBox -> setGeometry( 2, LFOROW + 7, 42, 22 ); m_lfo1WaveBox->setFont( pointSize<8>( m_lfo1WaveBox->font() ) ); maketsknob( m_lfo1AttKnob, LFOCOL1, LFOROW, "Attack", " ms", "lfoKnob" ) maketsknob( m_lfo1RateKnob, LFOCOL2, LFOROW, "Rate", " ms", "lfoKnob" ) makeknob( m_lfo1PhsKnob, LFOCOL3, LFOROW, "Phase", " deg", "lfoKnob" ) m_lfo2WaveBox = new comboBox( view ); m_lfo2WaveBox -> setGeometry( 127, LFOROW + 7, 42, 22 ); m_lfo2WaveBox->setFont( pointSize<8>( m_lfo2WaveBox->font() ) ); maketsknob( m_lfo2AttKnob, LFOCOL4, LFOROW, "Attack", " ms", "lfoKnob" ) maketsknob( m_lfo2RateKnob, LFOCOL5, LFOROW, "Rate", " ms", "lfoKnob" ) makeknob( m_lfo2PhsKnob, LFOCOL6, LFOROW, "Phase", " deg", "lfoKnob" ) maketsknob( m_env1PreKnob, KNOBCOL1, E1ROW, "Pre-delay", " ms", "envKnob" ) maketsknob( m_env1AttKnob, KNOBCOL2, E1ROW, "Attack", " ms", "envKnob" ) maketsknob( m_env1HoldKnob, KNOBCOL3, E1ROW, "Hold", " ms", "envKnob" ) maketsknob( m_env1DecKnob, KNOBCOL4, E1ROW, "Decay", " ms", "envKnob" ) makeknob( m_env1SusKnob, KNOBCOL5, E1ROW, "Sustain", "", "envKnob" ) maketsknob( m_env1RelKnob, KNOBCOL6, E1ROW, "Release", " ms", "envKnob" ) makeknob( m_env1SlopeKnob, KNOBCOL7, E1ROW, "Slope", "", "envKnob" ) maketsknob( m_env2PreKnob, KNOBCOL1, E2ROW, "Pre-delay", " ms", "envKnob" ) maketsknob( m_env2AttKnob, KNOBCOL2, E2ROW, "Attack", " ms", "envKnob" ) maketsknob( m_env2HoldKnob, KNOBCOL3, E2ROW, "Hold", " ms", "envKnob" ) maketsknob( m_env2DecKnob, KNOBCOL4, E2ROW, "Decay", " ms", "envKnob" ) makeknob( m_env2SusKnob, KNOBCOL5, E2ROW, "Sustain", "", "envKnob" ) maketsknob( m_env2RelKnob, KNOBCOL6, E2ROW, "Release", " ms", "envKnob" ) makeknob( m_env2SlopeKnob, KNOBCOL7, E2ROW, "Slope", "", "envKnob" ) // mod selector pixmapButton * m_mixButton = new pixmapButton( view, NULL ); m_mixButton -> move( 225, 185 ); m_mixButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_active" ) ); m_mixButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_inactive" ) ); toolTip::add( m_mixButton, tr( "Mix Osc2 with Osc3" ) ); pixmapButton * m_amButton = new pixmapButton( view, NULL ); m_amButton -> move( 225, 185 + 15 ); m_amButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "am_active" ) ); m_amButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "am_inactive" ) ); toolTip::add( m_amButton, tr( "Modulate amplitude of Osc3 with Osc2" ) ); pixmapButton * m_fmButton = new pixmapButton( view, NULL ); m_fmButton -> move( 225, 185 + 15*2 ); m_fmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_active" ) ); m_fmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_inactive" ) ); toolTip::add( m_fmButton, tr( "Modulate frequency of Osc3 with Osc2" ) ); pixmapButton * m_pmButton = new pixmapButton( view, NULL ); m_pmButton -> move( 225, 185 + 15*3 ); m_pmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_active" ) ); m_pmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_inactive" ) ); toolTip::add( m_pmButton, tr( "Modulate phase of Osc3 with Osc2" ) ); m_o23ModGroup = new automatableButtonGroup( view ); m_o23ModGroup-> addButton( m_mixButton ); m_o23ModGroup-> addButton( m_amButton ); m_o23ModGroup-> addButton( m_fmButton ); m_o23ModGroup-> addButton( m_pmButton ); //////////////////////////////////// // // // whatsthis-information strings // // // //////////////////////////////////// m_osc1CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 1 in semitone steps. " ) ); m_osc2CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 2 in semitone steps. " ) ); m_osc3CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 3 in semitone steps. " ) ); m_osc1FtlKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " "channels respectively. These can add stereo-detuning to the oscillator " "which widens the stereo image and causes an illusion of space. " ) ); m_osc1FtrKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " "channels respectively. These can add stereo-detuning to the oscillator " "which widens the stereo image and causes an illusion of space. " ) ); m_osc2FtlKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " "channels respectively. These can add stereo-detuning to the oscillator " "which widens the stereo image and causes an illusion of space. " ) ); m_osc2FtrKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " "channels respectively. These can add stereo-detuning to the oscillator " "which widens the stereo image and causes an illusion of space. " ) ); m_osc1SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right " "channels. Higher difference creates a wider stereo image. " ) ); m_osc2SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right " "channels. Higher difference creates a wider stereo image. " ) ); m_osc3SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right " "channels. Higher difference creates a wider stereo image. " ) ); m_osc1PwKnob -> setWhatsThis( tr( "The PW knob controls the pulse width, also known as duty cycle, " "of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, " "it doesn't produce bandlimited output, which means that you can " "use it as an audible oscillator but it will cause aliasing. You can " "also use it as an inaudible source of a sync signal, which can be " "used to synchronize oscillators 2 and 3. " ) ); m_osc1SSRButton -> setWhatsThis( tr( "Send Sync on Rise: When enabled, the Sync signal is sent every time " "the state of oscillator 1 changes from low to high, ie. when the amplitude " "changes from -1 to 1. " "Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, " "but its volume has no effect on them. Sync signals are sent independently " "for both left and right channels. " ) ); m_osc1SSFButton -> setWhatsThis( tr( "Send Sync on Fall: When enabled, the Sync signal is sent every time " "the state of oscillator 1 changes from high to low, ie. when the amplitude " "changes from 1 to -1. " "Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, " "but its volume has no effect on them. Sync signals are sent independently " "for both left and right channels. " ) ); m_osc2SyncHButton -> setWhatsThis( tr( "Hard sync: Every time the oscillator receives a sync signal from oscillator 1, " "its phase is reset to 0 + whatever its phase offset is. " ) ); m_osc3SyncHButton -> setWhatsThis( tr( "Hard sync: Every time the oscillator receives a sync signal from oscillator 1, " "its phase is reset to 0 + whatever its phase offset is. " ) ); m_osc2SyncRButton -> setWhatsThis( tr( "Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, " "the amplitude of the oscillator gets inverted. " ) ); m_osc3SyncRButton -> setWhatsThis( tr( "Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, " "the amplitude of the oscillator gets inverted. " ) ); m_osc2WaveBox -> setWhatsThis( tr( "Choose waveform for oscillator 2. " ) ); m_osc3Wave1Box -> setWhatsThis( tr( "Choose waveform for oscillator 3's first sub-osc. " "Oscillator 3 can smoothly interpolate between two different waveforms. " ) ); m_osc3Wave2Box -> setWhatsThis( tr( "Choose waveform for oscillator 3's second sub-osc. " "Oscillator 3 can smoothly interpolate between two different waveforms. " ) ); m_osc3SubKnob -> setWhatsThis( tr( "The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. " "Each sub-osc can be set to produce a different waveform, and oscillator 3 " "can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied " "to both sub-oscs/waveforms in the exact same way. " ) ); m_mixButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " "the output of oscillator 2. \n\n" "Mix mode means no modulation: the outputs of the oscillators are simply mixed together. " ) ); m_amButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " "the output of oscillator 2. \n\n" "AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. " ) ); m_fmButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " "the output of oscillator 2. \n\n" "FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. " "The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch " "than \"pure\" frequency modulation. " ) ); m_pmButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " "the output of oscillator 2. \n\n" "PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. " "It differs from frequency modulation in that the phase changes are not cumulative. " ) ); m_lfo1WaveBox -> setWhatsThis( tr( "Select the waveform for LFO 1. \n" "\"Random\" and \"Random smooth\" are special waveforms: " "they produce random output, where the rate of the LFO controls how often " "the state of the LFO changes. The smooth version interpolates between these " "states with cosine interpolation. These random modes can be used to give " "\"life\" to your presets - add some of that analog unpredictability... " ) ); m_lfo2WaveBox -> setWhatsThis( tr( "Select the waveform for LFO 2. \n" "\"Random\" and \"Random smooth\" are special waveforms: " "they produce random output, where the rate of the LFO controls how often " "the state of the LFO changes. The smooth version interpolates between these " "states with cosine interpolation. These random modes can be used to give " "\"life\" to your presets - add some of that analog unpredictability... " ) ); m_lfo1AttKnob -> setWhatsThis( tr( "Attack causes the LFO to come on gradually from the start of the note. " ) ); m_lfo2AttKnob -> setWhatsThis( tr( "Attack causes the LFO to come on gradually from the start of the note. " ) ); m_lfo1RateKnob -> setWhatsThis( tr( "Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. " ) ); m_lfo2RateKnob -> setWhatsThis( tr( "Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. " ) ); m_lfo1PhsKnob -> setWhatsThis( tr( "PHS controls the phase offset of the LFO. " ) ); m_lfo2PhsKnob -> setWhatsThis( tr( "PHS controls the phase offset of the LFO. " ) ); m_env1PreKnob -> setWhatsThis( tr( "PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. " ) ); m_env2PreKnob -> setWhatsThis( tr( "PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. " ) ); m_env1AttKnob -> setWhatsThis( tr( "ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. " "A value of 0 means instant. " ) ); m_env2AttKnob -> setWhatsThis( tr( "ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. " "A value of 0 means instant. " ) ); m_env1HoldKnob -> setWhatsThis( tr( "HOLD controls how long the envelope stays at peak after the attack phase. " ) ); m_env2HoldKnob -> setWhatsThis( tr( "HOLD controls how long the envelope stays at peak after the attack phase. " ) ); m_env1DecKnob -> setWhatsThis( tr( "DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds " "it would take to go from peak to zero. The actual decay may be shorter if sustain is used. ") ); m_env2DecKnob -> setWhatsThis( tr( "DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds " "it would take to go from peak to zero. The actual decay may be shorter if sustain is used. ") ); m_env1SusKnob -> setWhatsThis( tr( "SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level " "as long as the note is held. " ) ); m_env2SusKnob -> setWhatsThis( tr( "SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level " "as long as the note is held. " ) ); m_env1RelKnob -> setWhatsThis( tr( "REL, or release, controls how long the release is for the note, measured in how long it would take to " "fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. ") ); m_env2RelKnob -> setWhatsThis( tr( "REL, or release, controls how long the release is for the note, measured in how long it would take to " "fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. ") ); m_env1SlopeKnob -> setWhatsThis( tr( "The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. " "Negative values create curves that start slowly, peak quickly and fall of slowly again. " "Positive values create curves that start and end quickly, and stay longer near the peaks. " ) ); m_env2SlopeKnob -> setWhatsThis( tr( "The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. " "Negative values create curves that start slowly, peak quickly and fall of slowly again. " "Positive values create curves that start and end quickly, and stay longer near the peaks. " ) ); return( view ); } QWidget * MonstroView::setupMatrixView( QWidget * _parent ) { // matrix view QWidget * view = new QWidget( _parent ); view-> setFixedSize( 250, 250 ); makeknob( m_vol1env1Knob, MATCOL1, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol1env2Knob, MATCOL2, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol1lfo1Knob, MATCOL3, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol1lfo2Knob, MATCOL4, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol2env1Knob, MATCOL1, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol2env2Knob, MATCOL2, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol2lfo1Knob, MATCOL3, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol2lfo2Knob, MATCOL4, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol3env1Knob, MATCOL1, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol3env2Knob, MATCOL2, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol3lfo1Knob, MATCOL3, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_vol3lfo2Knob, MATCOL4, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs1env1Knob, MATCOL1, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs1env2Knob, MATCOL2, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs1lfo1Knob, MATCOL3, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs1lfo2Knob, MATCOL4, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs2env1Knob, MATCOL1, MATROW4, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs2env2Knob, MATCOL2, MATROW4, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs2lfo1Knob, MATCOL3, MATROW4, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs2lfo2Knob, MATCOL4, MATROW4, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs3env1Knob, MATCOL1, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs3env2Knob, MATCOL2, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs3lfo1Knob, MATCOL3, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_phs3lfo2Knob, MATCOL4, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit1env1Knob, MATCOL5, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit1env2Knob, MATCOL6, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit1lfo1Knob, MATCOL7, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit1lfo2Knob, MATCOL8, MATROW1, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit2env1Knob, MATCOL5, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit2env2Knob, MATCOL6, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit2lfo1Knob, MATCOL7, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit2lfo2Knob, MATCOL8, MATROW3, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit3env1Knob, MATCOL5, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit3env2Knob, MATCOL6, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit3lfo1Knob, MATCOL7, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_pit3lfo2Knob, MATCOL8, MATROW5, "Modulation amount", "", "matrixKnob" ) makeknob( m_pw1env1Knob, MATCOL5, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_pw1env2Knob, MATCOL6, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_pw1lfo1Knob, MATCOL7, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_pw1lfo2Knob, MATCOL8, MATROW2, "Modulation amount", "", "matrixKnob" ) makeknob( m_sub3env1Knob, MATCOL5, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_sub3env2Knob, MATCOL6, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_sub3lfo1Knob, MATCOL7, MATROW6, "Modulation amount", "", "matrixKnob" ) makeknob( m_sub3lfo2Knob, MATCOL8, MATROW6, "Modulation amount", "", "matrixKnob" ) return( view ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new MonstroInstrument( static_cast( _data ) ); } } #include "moc_Monstro.cxx" lmms-1.1.3/plugins/monstro/Monstro.h000066400000000000000000000447131247673406200175040ustar00rootroot00000000000000/* * Monstro.h - a semi-modular 3-osc synth with modulation matrix * * Copyright (c) 2014 Vesa Kivimäki * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef MONSTRO_H #define MONSTRO_H #include "Instrument.h" #include "InstrumentView.h" #include "AutomatableModel.h" #include "automatable_button.h" #include "TempoSyncKnob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include "combobox.h" #include "Oscillator.h" #include "lmms_math.h" #include "BandLimitedWave.h" // // UI Macros // #define makeknob( name, x, y, hint, unit, oname ) \ name = new knob( knobStyled, view ); \ name ->move( x, y ); \ name ->setHintText( tr( hint ) + " ", unit ); \ name ->setObjectName( oname ); \ name ->setFixedSize( 20, 20 ); #define maketsknob( name, x, y, hint, unit, oname ) \ name = new TempoSyncKnob( knobStyled, view ); \ name ->move( x, y ); \ name ->setHintText( tr( hint ) + " ", unit ); \ name ->setObjectName( oname ); \ name ->setFixedSize( 20, 20 ); #define maketinyled( name, x, y, ttip ) \ name = new pixmapButton( view, NULL ); \ name -> setCheckable( true ); \ name -> move( x, y ); \ name -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "tinyled_on" ) ); \ name -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "tinyled_off" ) ); \ toolTip::add( name, tr( ttip ) ); // UI constants const int O1ROW = 22; const int O2ROW = 22 + 39; const int O3ROW = 22 + 39 * 2; const int LFOROW = 22 + 39 * 3; const int E1ROW = 22 + 39 * 4; const int E2ROW = 22 + 39 * 5; const int KNOBCOL1 = 16; const int KNOBCOL2 = 16 + 30; const int KNOBCOL3 = 16 + 30 * 2; const int KNOBCOL4 = 16 + 30 * 3; const int KNOBCOL5 = 16 + 30 * 4; const int KNOBCOL6 = 16 + 30 * 5; const int KNOBCOL7 = 16 + 30 * 6; const int LFOCOL1 = KNOBCOL2; const int LFOCOL2 = KNOBCOL2 + 26; const int LFOCOL3 = KNOBCOL2 + 26*2; const int LFOCOL4 = 171; const int LFOCOL5 = 171 + 26; const int LFOCOL6 = 171 + 26*2; const int MATCOL1 = 32; const int MATCOL2 = 32 + 25; const int MATCOL3 = 32 + 25*2; const int MATCOL4 = 32 + 25*3; const int MATCOL5 = 149; const int MATCOL6 = 149 + 25; const int MATCOL7 = 149 + 25*2; const int MATCOL8 = 149 + 25*3; const int MATROW1 = 22; const int MATROW2 = 22 + 39; const int MATROW3 = 22 + 39*2; const int MATROW4 = 22 + 39*3; const int MATROW5 = 22 + 39*4; const int MATROW6 = 22 + 39*5; const int OPVIEW = 0; const int MATVIEW = 1; // waveform enumerators const int WAVE_SINE = 0; const int WAVE_TRI = 1; const int WAVE_SAW = 2; const int WAVE_RAMP = 3; const int WAVE_SQR = 4; const int WAVE_MOOG = 5; const int WAVE_SQRSOFT = 6; const int WAVE_SINABS = 7; const int WAVE_EXP = 8; const int WAVE_NOISE = 9; const int WAVE_TRI_D = 10; const int WAVE_SAW_D = 11; const int WAVE_RAMP_D = 12; const int WAVE_SQR_D = 13; const int WAVE_MOOG_D = 14; const int NUM_WAVES = 15; // lfo-specific enumerators const int WAVE_RANDOM = 9; const int WAVE_RANDOM_SMOOTH = 10; const int NUM_LFO_WAVES = 11; // modulation enumerators const int MOD_MIX = 0; const int MOD_AM = 1; const int MOD_FM = 2; const int MOD_PM = 3; const int NUM_MODS = 4; const float MODCLIP = 2.0; const float MIN_FREQ = 18.0f; const float MAX_FREQ = 48000.0f; const float INTEGRATOR = 3.0f / 7.0f; const float FM_AMOUNT = 0.25f; const float PW_MIN = 0.25f; const float PW_MAX = 100.0f - PW_MIN; class MonstroInstrument; class MonstroView; class MonstroSynth { public: MonstroSynth( MonstroInstrument * _i, NotePlayHandle * _nph ); virtual ~MonstroSynth(); void renderOutput( fpp_t _frames, sampleFrame * _buf ); private: MonstroInstrument * m_parent; NotePlayHandle * m_nph; inline void updateModulators( float * env1, float * env2, float * lfo1, float * lfo2, int frames ); // linear interpolation /* inline sample_t interpolate( sample_t s1, sample_t s2, float x ) { return s1 + ( s2 - s1 ) * x; }*/ // using interpolation.h from now on inline sample_t calcSlope( int slope, sample_t s ); // checks for lower bound for phase, upper bound is already checked by oscillator-functions in both // oscillator.h and bandlimitedwave.h so we save some cpu by only checking lower bound inline float lowBoundCheck( float ph ) { return ph < 0.0f ? ph - ( static_cast( ph ) - 1.0f ) : ph; } inline sample_t oscillate( int _wave, const float _ph, float _wavelen ) { switch( _wave ) { case WAVE_SINE: return Oscillator::sinSample( _ph ); break; case WAVE_TRI: //return Oscillator::triangleSample( _ph ); return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLTriangle ); break; case WAVE_SAW: //return Oscillator::sawSample( _ph ); return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLSaw ); break; case WAVE_RAMP: //return Oscillator::sawSample( _ph ) * -1.0; return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLSaw ) * -1.0; break; case WAVE_SQR: //return Oscillator::squareSample( _ph ); return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLSquare ); break; case WAVE_SQRSOFT: { const float ph = fraction( _ph ); if( ph < 0.1 ) return Oscillator::sinSample( ph * 5 + 0.75 ); else if( ph < 0.5 ) return 1.0f; else if( ph < 0.6 ) return Oscillator::sinSample( ph * 5 + 0.75 ); else return -1.0f; break; } case WAVE_MOOG: //return Oscillator::moogSawSample( _ph ); return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLMoog ); break; case WAVE_SINABS: return qAbs( Oscillator::sinSample( _ph ) ); break; case WAVE_EXP: return Oscillator::expSample( _ph ); break; case WAVE_NOISE: return Oscillator::noiseSample( _ph ); break; case WAVE_TRI_D: return Oscillator::triangleSample( _ph ); break; case WAVE_SAW_D: return Oscillator::sawSample( _ph ); break; case WAVE_RAMP_D: return Oscillator::sawSample( _ph ) * -1.0; break; case WAVE_SQR_D: return Oscillator::squareSample( _ph ); break; case WAVE_MOOG_D: return Oscillator::moogSawSample( _ph ); break; } return 0.0; } float m_osc1l_phase; float m_osc1r_phase; float m_osc2l_phase; float m_osc2r_phase; float m_osc3l_phase; float m_osc3r_phase; sample_t m_env_phase [2]; float m_lfo_phase [2]; sample_t m_lfo_last [2]; sample_t m_lfo_next [2]; float m_lfo_inc [2]; float m_lfo_rate [2]; float m_env_sus [2]; int m_lfovalue[2]; int m_lfoatt[2]; float m_env_pre[2]; float m_env_att[2]; float m_env_hold[2]; float m_env_dec[2]; float m_env_rel[2]; sample_t m_osc1l_last; sample_t m_osc1r_last; sample_t m_l_last; sample_t m_r_last; float m_ph2l_last; float m_ph2r_last; float m_ph3l_last; float m_ph3r_last; bool m_invert2l; bool m_invert3l; bool m_invert2r; bool m_invert3r; int m_counter2l; int m_counter2r; int m_counter3l; int m_counter3r; }; class MonstroInstrument : public Instrument { Q_OBJECT #define setwavemodel( name ) \ name .addItem( tr( "Sine wave" ), static_cast( new PluginPixmapLoader( "sin" ) ) ); \ name .addItem( tr( "Bandlimited Triangle wave" ), static_cast( new PluginPixmapLoader( "tri" ) ) ); \ name .addItem( tr( "Bandlimited Saw wave" ), static_cast( new PluginPixmapLoader( "saw" ) ) ); \ name .addItem( tr( "Bandlimited Ramp wave" ), static_cast( new PluginPixmapLoader( "ramp" ) ) ); \ name .addItem( tr( "Bandlimited Square wave" ), static_cast( new PluginPixmapLoader( "sqr" ) ) ); \ name .addItem( tr( "Bandlimited Moog saw wave" ), static_cast( new PluginPixmapLoader( "moog" ) ) ); \ name .addItem( tr( "Soft square wave" ), static_cast( new PluginPixmapLoader( "sqrsoft" ) ) ); \ name .addItem( tr( "Absolute sine wave" ), static_cast( new PluginPixmapLoader( "sinabs" ) ) ); \ name .addItem( tr( "Exponential wave" ), static_cast( new PluginPixmapLoader( "exp" ) ) ); \ name .addItem( tr( "White noise" ), static_cast( new PluginPixmapLoader( "noise" ) ) ); \ name .addItem( tr( "Digital Triangle wave" ), static_cast( new PluginPixmapLoader( "tri" ) ) ); \ name .addItem( tr( "Digital Saw wave" ), static_cast( new PluginPixmapLoader( "saw" ) ) ); \ name .addItem( tr( "Digital Ramp wave" ), static_cast( new PluginPixmapLoader( "ramp" ) ) ); \ name .addItem( tr( "Digital Square wave" ), static_cast( new PluginPixmapLoader( "sqr" ) ) ); \ name .addItem( tr( "Digital Moog saw wave" ), static_cast( new PluginPixmapLoader( "moog" ) ) ); #define setlfowavemodel( name ) \ name .addItem( tr( "Sine wave" ), static_cast( new PluginPixmapLoader( "sin" ) ) ); \ name .addItem( tr( "Triangle wave" ), static_cast( new PluginPixmapLoader( "tri" ) ) ); \ name .addItem( tr( "Saw wave" ), static_cast( new PluginPixmapLoader( "saw" ) ) ); \ name .addItem( tr( "Ramp wave" ), static_cast( new PluginPixmapLoader( "ramp" ) ) ); \ name .addItem( tr( "Square wave" ), static_cast( new PluginPixmapLoader( "sqr" ) ) ); \ name .addItem( tr( "Moog saw wave" ), static_cast( new PluginPixmapLoader( "moog" ) ) ); \ name .addItem( tr( "Soft square wave" ), static_cast( new PluginPixmapLoader( "sqrsoft" ) ) ); \ name .addItem( tr( "Abs. sine wave" ), static_cast( new PluginPixmapLoader( "sinabs" ) ) ); \ name .addItem( tr( "Exponential wave" ), static_cast( new PluginPixmapLoader( "exp" ) ) ); \ name .addItem( tr( "Random" ), static_cast( new PluginPixmapLoader( "rand" ) ) ); \ name .addItem( tr( "Random smooth" ), static_cast( new PluginPixmapLoader( "rand" ) ) ); public: MonstroInstrument( InstrumentTrack * _instrument_track ); virtual ~MonstroInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const; virtual PluginView * instantiateView( QWidget * _parent ); public slots: void updateVolume1(); void updateVolume2(); void updateVolume3(); void updateFreq1(); void updateFreq2(); void updateFreq3(); void updatePO1(); void updatePO2(); void updatePO3(); void updateEnvelope1(); void updateEnvelope2(); void updateLFOAtts(); void updateSamplerate(); void updateSlope1(); void updateSlope2(); protected: float m_osc1l_vol; float m_osc1r_vol; float m_osc2l_vol; float m_osc2r_vol; float m_osc3l_vol; float m_osc3r_vol; float m_osc1l_freq; float m_osc1r_freq; float m_osc2l_freq; float m_osc2r_freq; float m_osc3_freq; float m_osc1l_po; float m_osc1r_po; float m_osc2l_po; float m_osc2r_po; float m_osc3l_po; float m_osc3r_po; float m_env1_pre; float m_env1_att; float m_env1_hold; float m_env1_dec; float m_env1_rel; float m_env2_pre; float m_env2_att; float m_env2_hold; float m_env2_dec; float m_env2_rel; f_cnt_t m_env1_len; f_cnt_t m_env2_len; f_cnt_t m_env1_relF; f_cnt_t m_env2_relF; float m_slope [2]; f_cnt_t m_lfo1_att; f_cnt_t m_lfo2_att; sample_rate_t m_samplerate; fpp_t m_fpp; float m_integrator; float m_fmCorrection; int m_counterMax; private: inline float leftCh( float _vol, float _pan ) { return ( _pan <= 0 ? 1.0 : 1.0 - ( _pan / 100.0 ) ) * _vol / 100.0; } inline float rightCh( float _vol, float _pan ) { return ( _pan >= 0 ? 1.0 : 1.0 + ( _pan / 100.0 ) ) * _vol / 100.0; } ////////////////////////////////////// // models of // // operator view knobs // // // ////////////////////////////////////// FloatModel m_osc1Vol; FloatModel m_osc1Pan; FloatModel m_osc1Crs; FloatModel m_osc1Ftl; FloatModel m_osc1Ftr; FloatModel m_osc1Spo; FloatModel m_osc1Pw; BoolModel m_osc1SSR; BoolModel m_osc1SSF; FloatModel m_osc2Vol; FloatModel m_osc2Pan; FloatModel m_osc2Crs; FloatModel m_osc2Ftl; FloatModel m_osc2Ftr; FloatModel m_osc2Spo; ComboBoxModel m_osc2Wave; BoolModel m_osc2SyncH; BoolModel m_osc2SyncR; FloatModel m_osc3Vol; FloatModel m_osc3Pan; FloatModel m_osc3Crs; FloatModel m_osc3Spo; FloatModel m_osc3Sub; ComboBoxModel m_osc3Wave1; ComboBoxModel m_osc3Wave2; BoolModel m_osc3SyncH; BoolModel m_osc3SyncR; ComboBoxModel m_lfo1Wave; TempoSyncKnobModel m_lfo1Att; TempoSyncKnobModel m_lfo1Rate; FloatModel m_lfo1Phs; ComboBoxModel m_lfo2Wave; TempoSyncKnobModel m_lfo2Att; TempoSyncKnobModel m_lfo2Rate; FloatModel m_lfo2Phs; TempoSyncKnobModel m_env1Pre; TempoSyncKnobModel m_env1Att; TempoSyncKnobModel m_env1Hold; TempoSyncKnobModel m_env1Dec; FloatModel m_env1Sus; TempoSyncKnobModel m_env1Rel; FloatModel m_env1Slope; TempoSyncKnobModel m_env2Pre; TempoSyncKnobModel m_env2Att; TempoSyncKnobModel m_env2Hold; TempoSyncKnobModel m_env2Dec; FloatModel m_env2Sus; TempoSyncKnobModel m_env2Rel; FloatModel m_env2Slope; IntModel m_o23Mod; IntModel m_selectedView; ////////////////////////////////////// // models of // // modulation matrix view knobs // // // ////////////////////////////////////// FloatModel m_vol1env1; FloatModel m_vol1env2; FloatModel m_vol1lfo1; FloatModel m_vol1lfo2; FloatModel m_vol2env1; FloatModel m_vol2env2; FloatModel m_vol2lfo1; FloatModel m_vol2lfo2; FloatModel m_vol3env1; FloatModel m_vol3env2; FloatModel m_vol3lfo1; FloatModel m_vol3lfo2; FloatModel m_phs1env1; FloatModel m_phs1env2; FloatModel m_phs1lfo1; FloatModel m_phs1lfo2; FloatModel m_phs2env1; FloatModel m_phs2env2; FloatModel m_phs2lfo1; FloatModel m_phs2lfo2; FloatModel m_phs3env1; FloatModel m_phs3env2; FloatModel m_phs3lfo1; FloatModel m_phs3lfo2; FloatModel m_pit1env1; FloatModel m_pit1env2; FloatModel m_pit1lfo1; FloatModel m_pit1lfo2; FloatModel m_pit2env1; FloatModel m_pit2env2; FloatModel m_pit2lfo1; FloatModel m_pit2lfo2; FloatModel m_pit3env1; FloatModel m_pit3env2; FloatModel m_pit3lfo1; FloatModel m_pit3lfo2; FloatModel m_pw1env1; FloatModel m_pw1env2; FloatModel m_pw1lfo1; FloatModel m_pw1lfo2; FloatModel m_sub3env1; FloatModel m_sub3env2; FloatModel m_sub3lfo1; FloatModel m_sub3lfo2; friend class MonstroSynth; friend class MonstroView; }; class MonstroView : public InstrumentView { Q_OBJECT public: MonstroView( Instrument * _instrument, QWidget * _parent ); virtual ~MonstroView(); protected slots: void updateLayout(); private: virtual void modelChanged(); void setWidgetBackground( QWidget * _widget, const QString & _pic ); QWidget * setupOperatorsView( QWidget * _parent ); QWidget * setupMatrixView( QWidget * _parent ); ////////////////////////////////////// // // // operator view knobs // // // ////////////////////////////////////// knob * m_osc1VolKnob; knob * m_osc1PanKnob; knob * m_osc1CrsKnob; knob * m_osc1FtlKnob; knob * m_osc1FtrKnob; knob * m_osc1SpoKnob; knob * m_osc1PwKnob; pixmapButton * m_osc1SSRButton; pixmapButton * m_osc1SSFButton; knob * m_osc2VolKnob; knob * m_osc2PanKnob; knob * m_osc2CrsKnob; knob * m_osc2FtlKnob; knob * m_osc2FtrKnob; knob * m_osc2SpoKnob; comboBox * m_osc2WaveBox; pixmapButton * m_osc2SyncHButton; pixmapButton * m_osc2SyncRButton; knob * m_osc3VolKnob; knob * m_osc3PanKnob; knob * m_osc3CrsKnob; knob * m_osc3SpoKnob; knob * m_osc3SubKnob; comboBox * m_osc3Wave1Box; comboBox * m_osc3Wave2Box; pixmapButton * m_osc3SyncHButton; pixmapButton * m_osc3SyncRButton; comboBox * m_lfo1WaveBox; TempoSyncKnob * m_lfo1AttKnob; TempoSyncKnob * m_lfo1RateKnob; knob * m_lfo1PhsKnob; comboBox * m_lfo2WaveBox; TempoSyncKnob * m_lfo2AttKnob; TempoSyncKnob * m_lfo2RateKnob; knob * m_lfo2PhsKnob; TempoSyncKnob * m_env1PreKnob; TempoSyncKnob * m_env1AttKnob; TempoSyncKnob * m_env1HoldKnob; TempoSyncKnob * m_env1DecKnob; knob * m_env1SusKnob; TempoSyncKnob * m_env1RelKnob; knob * m_env1SlopeKnob; TempoSyncKnob * m_env2PreKnob; TempoSyncKnob * m_env2AttKnob; TempoSyncKnob * m_env2HoldKnob; TempoSyncKnob * m_env2DecKnob; knob * m_env2SusKnob; TempoSyncKnob * m_env2RelKnob; knob * m_env2SlopeKnob; automatableButtonGroup * m_o23ModGroup; automatableButtonGroup * m_selectedViewGroup; QWidget * m_operatorsView; QWidget * m_matrixView; ///////////////////////////////// // // // matrix view knobs // // // ///////////////////////////////// knob * m_vol1env1Knob; knob * m_vol1env2Knob; knob * m_vol1lfo1Knob; knob * m_vol1lfo2Knob; knob * m_vol2env1Knob; knob * m_vol2env2Knob; knob * m_vol2lfo1Knob; knob * m_vol2lfo2Knob; knob * m_vol3env1Knob; knob * m_vol3env2Knob; knob * m_vol3lfo1Knob; knob * m_vol3lfo2Knob; knob * m_phs1env1Knob; knob * m_phs1env2Knob; knob * m_phs1lfo1Knob; knob * m_phs1lfo2Knob; knob * m_phs2env1Knob; knob * m_phs2env2Knob; knob * m_phs2lfo1Knob; knob * m_phs2lfo2Knob; knob * m_phs3env1Knob; knob * m_phs3env2Knob; knob * m_phs3lfo1Knob; knob * m_phs3lfo2Knob; knob * m_pit1env1Knob; knob * m_pit1env2Knob; knob * m_pit1lfo1Knob; knob * m_pit1lfo2Knob; knob * m_pit2env1Knob; knob * m_pit2env2Knob; knob * m_pit2lfo1Knob; knob * m_pit2lfo2Knob; knob * m_pit3env1Knob; knob * m_pit3env2Knob; knob * m_pit3lfo1Knob; knob * m_pit3lfo2Knob; knob * m_pw1env1Knob; knob * m_pw1env2Knob; knob * m_pw1lfo1Knob; knob * m_pw1lfo2Knob; knob * m_sub3env1Knob; knob * m_sub3env2Knob; knob * m_sub3lfo1Knob; knob * m_sub3lfo2Knob; }; #endif lmms-1.1.3/plugins/monstro/am_active.png000066400000000000000000000013321247673406200203160ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME2!#ΞtEXtCommentCreated with GIMPWBIDAT8ˍ;kQa0Jb` vA J,`a);E:/ B CE7׽3✙\ Ł^uFZ$Uݑ>eGY'P! X0 Jl9E+[-V on0uC`Bf d*.G Tgj2 B4C%XPR@H+=!1 ,y7~ܼAzT#cf.`B P,ݡ$2so ޠ#뿾a!{D)]j4>MDAYO sF,fAN؜ h΁4f‹;@ُY;"hs{>yIűld籓)OevD3; Y`(W!1x{mqXR'0v0{/]{~ގxr`h|N#Q&S͐b(oxxE-da) :56JڦHxr92EUkk  <R;sw{vm7DoKIENDB`lmms-1.1.3/plugins/monstro/am_inactive.png000066400000000000000000000010151247673406200206430ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME2JtEXtCommentCreated with GIMPWuIDAT8˝0 @OZ@#/ 1#ďD-jJ}KV$I8j0Rʨ˲PJeIYw sEr UEH ` VD@Ak|>|>jb6q݌}|GD>bWr8HӔnglqe<ωR'|utEQl6 vKѨm $a8inI p]? E,ˈ!e0 q۶m~_{zjaYV!/ #шxL% Ú*E @+IZ)tXSQ?{lIz=juo D?N ̖]kIENDB`lmms-1.1.3/plugins/monstro/artwork_mat.png000066400000000000000000002002651247673406200207260ustar00rootroot00000000000000PNG  IHDRZ=bKGDC pHYs  tIME,3 ItEXtCommentCreated with GIMPW IDATxw$Wv'{a'̄BUcbwV#(V=Ҏٿ`CY퇙3g42;=RLSvD#ٴE ˠ ާ@:dF^PȞd"##ŽoSI Aqt?P\$Ip8p2Q!CGOBUTfI8dN(G~tU)%P$D(A#8:~Nv"@!  Gp" i_ُ㟶}GzqtsXPptG~tGGqGqt1qtmR TLE!{LEQ 5M|G?]Qh+:1 J 1&SyɮП1הRH BDc 3E{C`!%Bp P,_0T!6W0$ټ6<=07:};5Gt#61vdE6}R Ue9llt!BJg2D@ be|ۭJ[T?oMlloGo?̻} &g}{ -i`tgz$6/=(r=-"„d/6}d>$$YfsdH&S\\9.PR8_J&WtZ݇Ch/GQK ?vgCk;Eگ{ΎmR*~21( 31PUJ!dh^!HIU\g׹RB4W̽NW 'Ew ܿC0D $ɖϋ|@Lt13ABb7u!ј^tl]Cb<їzcͧ65;?vgki6 K2&@jfnvLZlv0>ђlRTJ)1~UVWJ@>@`UDQޕدlڟmȾU#Ҳ<1iYʼnA~>>1$ Ƌ^U'u%%{ڼ]i>Qщ*Q|ZB@07)ΖEUf!DϷvmqeF.Vs}=ϿVVVEl _x/x.C:خSs$DOtc;穙Eܾ^ҙKTh7e`R̜brli,/"HR ǃPM-;q hJ`[뮸Nc. Rt*Bcs Z;:@@@3F0;5$;]]=w)$RDfFtp܊N][,y&.L466qMlmm/UF)3SX^2ԋPM MI6G!B*0cX[E:p uhji0Ԫr0;J)' bue dRChnmCGwY|QUBPJayqkȤ e%jPԒGҁn>.,mg;ˊ.J<%R$\n7\N'dIE&A*B2Źs(bNH|x9>L:]Ӂhhn( V\T d⋷^$ˌaJS `zqZAp'xxP0Jx^n8N\.\.8N)L!JE/~p]hhh@0F&$2jFL7LOq!SIڀ0D[6uO=7ӓHgҨkĎf:]{=gUr9SYXw>COQYYP( !C$סeFL$J$l$MuxpSE]]=~?n'ĴQ!'n7(((24j9-cR>Г# #AsKhԴ G`bl Ƀ#_1>SD#QRrK V?ÃFd-Ɩ @J)?q1! TSk0IRa|dpcHoh|1LN'N8v314$1Fg3[~%Qݖ'`r\Kw'sRL㫻_ `N(q % VQE8(X4Ϗ`(JJCTԠ.$B Qt:*0|^/*+8~~;pD#a>B5Έu٩ <}q8 UijlD ,,,`a~p8udnP h>`i9:]6J011{>?_abbr0vw!IJI;"w*:I1PI2PU; H}9)¾s(2&NTrjdp[ۇc{{c#PU EP J Tbfrf_edѝњ8&(!/] B1*k/T1 84@آ DI}WpEtuu[G I\.8]I BB~,p\w ţ|^8]ГВwp:8"lRTJ&qyIŅ|ǺiFLON ʨBxlX*75;2=U68@rX+KOzl<%XrA!PPdww!6775"N'[9(R AUu s92d @RTJr2~/ ǝ>X6 Nje&2!0_68lc+2|>OÀpFm/:@v8 ]]x:8hxKP!bmu~,X[]aUMYk四+K<؊ YX[n|5'TBJ%BKzs9?F$($ MM8==,NlSSc {%:p@QUQ!I2Ms؛J& tiEѝ"*USTJqc$;F<1G28/ A0PU>81@H1Bx!nܸ]ܫ++W„ -%L" d_: D@bgsSM5'RC2AMJIm0V^Du 4ObvfUp:H&DXZZ˷nrǂbh/4FUBT=\S*r;Fjjs#G)( P); DTUե0$TNߦSV8%Q0S'?d׮_{1>6,sL1oie[7*p\Å8 < B- ,n۔BD4#ݜNlb4 @w]7<@UUׯ?>rzǣp8؞ʫj+!TXkۣCE]#Z4P(*U4$m"@um$tU]CbpYhnm36tLP]Sosj3@Ќx뭷P X\\@*@t՝X[߀hl4%yb`eE0TgcյuXF+ĝ@[ke*I`cJżMSC … =thH%ScPT IjR@*P5ļd]:R8:11·!NLON.[Lj%_̤i&ؗfhYpiAeZ. .N׶-хɉn$olF,. ǎ Oc bS0?>zѱ1fD "_Dt6͋O>O `k{j8MO:4UTIZ` h{xz>=' G^#D$ A{h8Zۭ:^};Y5D  vNK星2˅WtNJ)F!"$IB6ئPTHM=R>i$ xeTWqȲ1YL2^\NWf%I'I I/먭e @%ȒёCq0Ɛm"X hB* 8&'16:ђk:.-NSQ J"$L`4?._ʪO/"DI38ec#s/llEQ$\gpNO sQg lUQrowdctALkFH%XJ r;Wqբ8e=PM5R$³3zp6Pb*eR:6ϝǹKW)%QO: K,m0Od2<}}gl҉EĩC*3q%\vKd&,\U0t:gt?N!WsX>4<_/`lnmbum}}}55H&~&\9w/^DIiEU24"τ}=<\@@U#J!}&8Ns\en(AE"g8{3>{.Uct[RS4_Qzֲ,CYP2n^xetŲ1hJ!$zC+0aeyYOt|l6-,//Cv8q ;oF&,ɐDAwbQJс*cQ֫kK$K(R')ᯨ@<p8N\E?ks5i>2OTRV(p8XN~m+0 .^6h*Bk[\6\ ++i*;p5Vc`l)bbQ  ssX_/=7].7?"N;#@8QU/EPm|>籺RQq%t ̧@S ˥ۛlӶ jjc{:BjAMMųrYr,gldSX\X߳]Ic(@eHR wf`fjHKHH1ϋ:$DC(y,F`jrsolDWwN2+ #slvlJN8"3XZ\6@χ:Gg1K3mBHa)Ss`x^K4E6 EQ0:&&&koO+D¸sS^ٓ8n[L 0=1X4nb@}7R|SdwsťW!7XU[MpP`rrH/2 ON׿M>}1HÅW^QĿoa>?!.\c!"E3d6)(mkUTCUwv~_jQ5kmkV$himD#aus{< L ;;0tbhmk:0;yg&Ӽg:%D|]ۿ1+ݴ0Lh7.<պ9W^y*_xck{;꿕DM@*@<Ak[i!BmNWb`DTrbc?<( 9" 4(D?#7Mey lq.IZh4#0ybw7t*`0߭@U7'^hcc2nw7kGϛpڛd4NY'Ѳ$0qsb5M&J9ӜyMRX]]!%M͈YMiA*` |׭MtC\4)o2S^2-?nl㓏>@vw4*k}l.Y%Lܹs^%/, [/TTu㺺m=N#]fHm}śgwuafjuçg ~퀦=Csk+~ۿ69>z@KK+_MރSSP~ۿ 4mf˲J- UUUQk\\;4?:Ιم)PU`ѻ?̙~ >ylyNgog*†vt445W_LM &|';3SӶFPs0oJP82TP5}o5O;w4FY[;> kΜS5x:߯AmHNKnè~S+/…l! n߾w}goS`dxЂv Ҵ8w #Cs ÃgU W}}ZjOҶU< Cx!n<Cߺ(W b^+oEIZ o{}~446!ށ͍ [¶6(jj/|~445cg{[?щ͍ w*F ?j/RAI| /~->j<[av?CR)B5:: =/ʯZ3~~?@U L?#P\柫 ducuuՂ{\wko|SVFfpR wbssSi^5Ls` M̱mlnn՘3b)]͂12;/ ojTV|Ͽt:@P$ N-&@$M%{b>&?fGr/(lZDaGKv@%Sv;u_,Ս\t EVB7]I룔J!l{t_/խgC& 4zbկ?U oQ DX1/ٲE=RfC>5jjNBZ=R1ty4\C̺MbX޳[K-r<ܣE4ļ |_X3I12KYܹ%v9"H`xhmif᭷%h---lVo+k<8)i/k 'dvQކm%zj}S ZP Nɏʲ_g6YUċn]1'-^)wdQُ}?>ht,pԙqӈl/.&P\~e2/žkMM {=;@GGqe$ _~?Z>|F]T~R^SZDA-{~A_n=o %q(rۭ{ οFTɞtПFjFug6"l?v3lllg~Wp2k䖷nZ}JZeUUf(ݻ_J..End.Ag BfB騥%ڳ-SoeWTh"B- (˰dz~s~)9k7oRV<T h0⺉uRS>ڞ{tU=%>*_h[ Q]4javݷPMX|ޡV–Xi ޶~5b=v"hI#)Yw'{]5$;g?F85IԄ3gvߞP+Xq^٦ޘ9B쿲֎٭p;-,unf!y E݅$LZRM'6UdmKiBto\F%]ʌɱžP{|!d˥DUs:x PYY ӉD2,p[y-BkSQ% &5N <3E$KA]9~BZI'KI.2;Xk+HRӅ@0Vw꥗b.K, ]Vlxx3XZ硼7Ymm=:qi>1e&ŧM)f'tPNZeF2[?ujLJliQ8-~iL4eL4Մ"159In3"| kHҜNTVUM-mvRW0ϭ#E߰UJ151Xx+KH%  =1 X0ŧ7k')\ˋ XG&+PSWfKqSJAQ }?@?ڴ&666q]+xut+ ɧ… T*%TVT Xj~d..$JRH&Sz8w z` zRDg11R$|><(ec`kk. 'OE{g7MϞ'U)?C2( χ׮x)VvT "<5'"LϢc;/)WwnzO4- SCONJr)4/ .[cxҩTI8N=VfދGɤKp:y8Zj&bH&!+q(_S\xє\.ӧ8~DZ>¥Kt:h333x<f7K;?w^*++zvt:rrt:N09>T*Ʀ&c[LkHUO#.444  vtq#Icfrt uL &AE$ʡ}}y[XS$FFJ$j߉;x+}$jj T=ukєR|ɇxp4Jխ35_ݵ1bdp}t7FdfLC&d6 _Ɠ_p G&$2jM ǽ7adv3 5fy;2:/.,`}md2ɓ'K: FGQg!L. Xǎ RATVV"bd T]kjp8X4d2T0SO8jkkQWW 1Yp8vAAEIP][ UM TU>ӁL젩PMWw116rp8Vn0T8rs aѡFDM͠o0#LO+86vlr (U՝11:|`81 64B/g$T*&G9fP FZ9X,o,|Ez,v; ^b``H&ЈOqeBL;B0ԋ D0ƙ=(G|z?1KЋpupzԙxE N'kzᯬWZb_~f80>jy *ٵrE+<\.~՝CNX@H׵ `t3"篰8]u_I]V8x UQb!31H(z6xCgt ">*++177e,.$^a9tqP(5i74ŋ+++_^Y D ldV]%f8?}gtw>ciuup\L%JP5d2,ϳC`;Y\}gΚ-t9t|;]^.p8)b18N~^ K6Eptvt髭uhzn./.8l!{p"Z;me37oUVT55ըEwwΜ9UL68q8Z[ZY"սc#C(R#A (j{}}~޵R+ާ9"33hN/AΞ@= C)EEU@ b|dp_G0TͺpLbvjp,sKZ-"݅*lnn`ttx z=#C- M}>NxdCbue^+bj| ӓe*hQXb>+ n^mV""By x.S"ԩ 1<3 S74+b~,p\g EP!(*T!{.m" 6 'Zwt^;N'>14@ampxɲAױ Da[BboU hJPH1c.z3>!ަVo>6DBd}U@U J:' 럥&*UST b5X+ .jtUAlo* BYਮ3T` ͲQQ0ʅSXCoEv$,҂+W)|~P(zY=@Y U@R$I4YR؄XdUUA@`Jh 4jd;;;u08jDYhm g[cs ᙲhO5z2נ?,z/zM24=Jމ2!u GeEg Kl{Sk"e`CJEu]=be6-ZJcGGF vqE;v O0;ƕ+W}<%6QQQN lCI*ռ_;}120ڎ'P(+82KBéa `mm OxFI(v=_>4>zL}Ρg偣M+Ķ(7Ҧ)8L4=fXК 6adpиp<|w=GՃ_;4-Fm/u M:4.u MF=wjQM2k 3?MMqѳE8*TEAKK3ᯨ0<*$YDQ$If\HSTJN#EaS:F"k7P ^b-@3;%IFxf $Bed9ӽW.Ubd8s|J` QO/9dL 7^D ' vC1gꬣm6-"ȂVնdYpq Tz+BE$DfggWX z@135y(8]ʪnAD'"J;/K&.ڻXqme-% 6rUUtX=ޓUVõ9!|uuuhkon޼ɘ,Ihoo74cvEQ%固"_}H$pi\rpIAյudF*<^D"@Qr -~X*9ݽ'p/[YXҁF0'܌4gw~N&YlXaw1A8vΜe)X^YA&ASSSaQLOcS R)יq'( zHa:ki݃}gmL-Uc[k( :cO˺[˵ F6x@puv؉>p!S9n|;;bʁ)n[XRT2 ҥKG[[{a*! > X_DY!,b(Lbkk N I.ԂpEZx}~,.cue QF%. #(o J)1^s&жBuy}XXg/\p z&Ln!ÇxpqTUVbttyk3fx}~,'N(ŸS!$"+M)5xXZ\h DVtBӺx|>,/-bc}$.^AS0c5ge zՒp}hiA6TPr vwwM8s˭壬cTWW# (PP tE{W7f&MVE]}#Z[yRoMS4pbpmD njiECS3b,a}mDF0TޓjmHމܟavhcH"(=^Vv(2EMhimG籞"`i|gL!"܊xt sq"Xj;&݁h! Td"x@t|w'QAW:KkZFFA$8 wpgvlݟfdzgkgvkGp$H$@-,e)0v[DWEFsO{߳i]=9U))fzٺklFM}#f&0?;e$16 Jy  %JوCUPhi@dlӓX^Z#Z74>(Da ! 5ugDM0rvtwgw xM릞g曶k(-)Aqq1%IbC0##qXIvzꊙÛ+Oבy S."4 TMCՕt= =g͵Oчr=MOQH^:2MiN(G%HH)x˞ D\X SZNCבNԉdžt;Pi:b8>R\ fND2)UVf@s}{Nƨ l!9ܴUY#]c(X&\wF)EYi)JKK@i+Tʲm%Ⓩor8>)E<r!o.-ĩ Ť;Ņ _@ ֱ n@wŗH$p'xP^Cd| 8u, c'0359iksl*8fq%B(,>c/?s6?q +W9&8fpf:=9[7oXt]͛VۭmxqLMM{bqy)-csj9]oƜR]G<۟/xULDƱς=8q,..`tx"Cj>cܕLqΧr]Dd KK8~4 P_}ӓxྠ'OIhs8}cav]t0p:@(qq,-.bll.]NMF17;SgΉ3-W`:BƦf< fg#qx҆'Oe@QVd{8jclt}vvoF*F}}=Ξ= TTV667oݏ1<4?p8^zwًyJ*hb&QaJ?S>ycCDơz|x_9hBg[?sl !R4S(=EUWٙiwq LFm=*=59aeuoI}g} Sͯɳgց} ;o_tvPwDT啕(@6m[63Ão{`OgŜb8&A(5< joAD#p('g.\@ڎvPB07_38}Ʀ~bfj ,5'0t 1ݏ(*^똟ō3' H`fjJ8][[mdctj_{C*uw=x_,>}=qM-mhji! ͻĩ3VثcjVV4F"OvVY񝙍~} @IQ1'Kj欕' ohPWuX__G|3I466#Q5ʤ444a=KUQP_W5c LMLBXnqC|S8HqE@j\M%qkT @m()*,>BD wx6.̗`o;1fVpTiC#sl#s,uT.=2֔M&8f&Q|Ii+[fW@6SkzfDR9wsNIel[L N)q:3<ΐ5055{,=m-fP9bj XʲJ4cz*% C1{ka~o^EH&X!P[߀p^~Tj[())1NJJJ)f~˯eWf"(΂X#kzf2>Hm[oKuLϓј9J)f֏/9lcnF,j,n}r{\;u+Lmk J $zLMbiqOu[`s"sNmDŽԆ:k9?7w1_/Œ3" 5ts~ǜ:*nT [[(.)qq0+(2d$Z#7v~ ۩JCTVU_C7ss3ƼM,qˮ}YPWNs x( –`@qhT[_~zR!r%xeR*I(YTm퉉(t׾.x‹a]U|͎fffAAy0z{ )GhljD)]s|/17; `؄I>|EOMN ׾銑Z|xFZu{nů|]\n׭oCdJ*uzm8sG&M)`͏?/~~`zzz1=5Ϋ-lT):124(c}}( 7S m&39yCI¢zPTTl7 %S|aH`l@dlԥ"fF}eft?f*q#˃2ƻAayÃVj}b̅iblluϾ1:O3%;- eJr\_%,Xkkk~DoG1y'?U0kjDMXC}CTf.-=M"l olnEŘ[?' ]!cF^~`  L2OdWmG7/ڦ@qq{73 u,@+1g Q]fll1JKtaa?ɛ5P(ߧu5407;(.-ŕ/e8!&x筟^v2FGQT\{S~-IǘMON? ? *糵]TTY|qI)g!i0BᡓA3paq 1䣘y(Є6ԓȓB)}FTwny|/UGV/l0tWekT dX nqTSB%Yi!n_K(-/G?-iܒireegHdMwm,OCrH3o a_Ӝvm;dP1 bofZls!SDw, ٘dRn_1`MHfH |r adM.i$jg{woB'ffg i=Nv.@ bb} rE? ϡӂY)T:8rIH\-|rlx{ǸJhX~2M:V2D"KT)}./faltF%bŲvlRqݖfK|!ҙޅ3,ɯug<&;bU qRZ1WX,Sn9*Dur&i{h32v@F2S;RC(A2[.:FwfJ,q24,JL&H) ^dn"Dv-Dm&ߋWY6jbP DHj֔dgu;8E0R[jPFYasIa֟rD\W0y g;eQLRV3qȠTB<0ĢS ks9hu.\X BAB%Vs&ʪf+[fƽnf6[ynk-RjYɽ'(.N6R4cG ٹc-s;d2?w-S18)X?~,h(++Cyy9JKP^^&"4)ĕ)YAA\%;G0e-Q/R6Mm.Qc29N2`kw&V?Qp ɮL0yҚǐSSU'vHVM`wv q6Rf:V!HTAA(y,..byysssĄhfpӯɂ!ɰf&cK ';q`X7(/Hp1`.`-cI{乘ybxѱQ,.!+ATTU@E!;R)QLON`eidUZV&4i#EvON@_G07Xlg΅PYUt:"eU+HGF15 FGYy9nx[NoC}}?|W^X;-Adl PQU2$cR&LE#$ JJKQS߈6&%$  0y$qPJ0Vϝ˩KTjfcvj s3X[]VPTR:649h5s"y@jXBN9X5dFɡGG80 +LYX_߀?gNBRJ]xwnD<MG83/ c.)Edl]hn'pso*n:7!x㍜AnnR<؋d2'^B]c3 !i$ qW]C pHwXk _kgWQ@ܾy݆AEy9JJJ L&0<8D"Fu(v/?zY(> IDATz 𣮮(**B0D G0I ck+:vp&wp 'H`862Rǣ1:ܺ>skgsLS( pŘݏ b{+[ITVUsxA%C){D׃{zyJ`td[Y[ 7M!A1`  c{ P^QWp;L :+׾]ͫAJqr;H!o욞NKD3yTTT  Aƛ7?&'bol->F2UǮ02ԏjԢ^ iGC ITԊ5-=vя?x=혎h&Z\k{14tDùd1>#LD'088H$b{yCowi<3!pםZ =cldpc135-TTUK&P ܽ1zvL$8jD䃭[21;=mUTZm,pFzz<P!٣OdXگۮm~S9|X\#bݹR (b#b]19E8\ ^ ѱt=@eU<BU5|dD4p(R_,h7?阈F. 3bc|dOz:"œ>$ť34ףL@ubvfH8zdnP uO=SQ(//gZ(əRLISD`H^SkSx`޻tLOM" Ll*\LF1tLOM  ".:=#JA";'gxB ڏ>DYYJKKQ\\N3ȑnB0Dqq1|A*з~vgt<~xB@ThpEmC#@#?ڔImNl]#.qI044wOzy7w3 &E4MgQ!>MSQTT 0lz^խ CyYm`b-|74 %4Gt|)Ʈ@_/ B) RàFlssO舌J&WyMEluUP^V:;{dӍ=5O~N&QCm~mbb:[3Q$]ӑL$039NJ!/65\q^s$qttkkã2a~x}eBmp| y<~D#LbX,0*d&3I|`VAAuFgy2)kΝq)h*OSUƍiFXLtfjbbnfJ7;::gtLE mȐ@173gt͈>(Ü? ܳ)yTP++/GYy((RPkkkXYYe#9|>&tiP /KQ7tQLaͲg.-.(1UOq-kRP!,-,Esk a˘X\X@83:X!g9ͳ<^evQO-c~nb~~-tPyB({2KKVCZ[Xػ0* )۾=cuyI@QF9k]'[dzi=B4 8vo{:`U50/ jجhiHU' BF0rn0fH$ބC>"1 `@0gtA^Ñ3:4DfB\b4 @w[ۨ<@ii.]zZLMeg"jViYl6wP^Y9A1 uӔBl4#mlbnHl!5uuF+hClUUX;:U>צܯ~+rf0К+s0l:LODlN]L@P^Q=J)ԞQSWo3SZV=%)eέWqWN>m;C'`*9Ru"PƶvMʝМHΏ3&[0>:r@a/#H䄈lR677pY貍;wboOh϶Bl[1:<'t8}$&G$77[l@EK[%44 26'cq:06<'t45Z'V@7b2:< Oc3b#Gb</}>D?yo@Uu5_<|p ^lEldܫMx1#(*. fƶ+EUѺB0ciSimv )l`yyp15]UQ(**=%%8x䨝qpQ}*?DU,}ǏFN5$">Chs..ƁX=}i0Fsݧ K$bB4R)ZTtOdX W*X[`xp JKmYt:-5tfq¥PV^."4Uib<>/zwEǵ^Auu5LB{ 튎>Շfmrj9=HXZ\F1ߏY,/-ޖkx۳xk|N TEЄtdhpWcqxzUUjx³ UUr1>:+:آS52'NeU FGg |G&la{4&BnKˑL&0>:Tty8?ӡy׿u44ԣ `aiy GSPTVU!a|lS8up*<[S51ťJ":>Tcy:39/WPUT"H *:T ( {/dt.m)221998JKKڊ"hln̮:sDDUUbccX 'Nfesl,MūYY`dRCADfR(XY^ ;.>L%"Lq;s֎`vScDc#;8wY pAQE٘ 288Ç# uhooGgg'[msJ)EsK`SqʋElB>vr Gq aa*7͆f$qD#;8eiƠ>`z숎}pI.TUf@FH;CIq1VWW166 80oƦ`fz++@QYP<: %:{vl2* ()JQ[_pQ1& ,<?Ja}} x}xy9v\B#aΣyq-(pbQJֆRLMN`ey9'`^~.\C6Y4&PTUJohDQq1&'χK]'u2Gb WU^܅hniE3SSyœӓgYs0 #.9x1=Ņs G10c11 445#\Ti^~gNRD!Pl p33XZMypY;pP:%b#1OBt/QdQ؛`ccT e %,;Z655>ǏCUUͳk),g#:?-BMmZ;F@xmh0&쮮S)vhD496YX0BUu [ֱO؎)9<^TB]M=#Cwd}8}:RmS)i#Ãa~nji8FG6i!dz)EyyJ*lYYB-04B* ]ۃa`CӺ:w@Ё  nvFdlSQ,., Σ*PЄ6;>a>s9.#N6t #2>sBaTԠ :a 7!kg ]CG*ɉf'*R bpUu.4U ! ?_B<PUSjh?< x @qQQ~ Ploo#H0u9 fdiC`&;tt>1w}Uv;84ˬ-p%2ds\U@RJ> q 22MevR ۙ-C ISl>Tc:`D.´P*;̪.//c}}9<)g6XL(* 3Р(#Zfnҩ4mNͣ/Qܧǰ"rcHceҡ]בH$Y53HCCFeU"nW^Eii}V},/2uEOe* [:! e-}ASUb!yh :&ƢTv pO1Ӫ*N<eN J>އa7XJ*P*!H 0tDX?eQ;ԆpZQQ2S b// wj7ј&™DKX11&_~G;u0HE9 pE_3SSo~-xqƇxW'^0q%PPtwus@o/^«b")eGSSx׿k_D<Í?+_2!чx0249\tԠxΜG4qdOWDl1%&'x5f{)3Q/ ~v 8{gg׃W^C57 a2_Dc{3_GZOwe qyD"}8jw>wE+"ʔ)efgHoP[_gϢUUk#ğ׺>@opQ9 /pU΀( >/:2'o.^Ѿɉ @sssџtBQT|o`fj Μ$sODVWW191zoss&AQU|k/qyG[ogɐlRH(sBTzs]*}%bpuݏMS܌U㛘FwyH iimC.IT҂1LD"hm0 &SǻStMrG5wV!DZXUd´AO!Tsuqׯ/K.bjj͗|gc(未Z&i<ͭ~"T X[[E"D-vt W"QE 0*a*9('xSEekDUxv9r sC67cBf(>{Yܼ]uGfa9_So_"(B KKnM󠱱 pe:ٙi[+_|{IL&do1@@wDYy9rI@h x+_`y lsh?B76yEwd" drR Gkvކg1k9 L$Y'_̓Ɔ&LG077s&-kTZLҚy5N( ,-- < FX ؜./㷿yJlsGB޻L_$~E!!!.>)3e xQ2[X]YGj{'vѷ斬r]TVV3χ_=^;﫩 7xvk{FQwm]=O#$$x~GFF akZ=|fwB6}  ͛7;?OvcyKk+]4W{t>r}=6sݬf@kP@;F|`di2wx*̣jCZgD#Ilv<~QeQVkPu mn>[۰V_P`T#, PЈ͍ qkhimJJ1ۿaWQ"hdd7 +xCG3U`|}+$ TTT: dp@o~ˮDۮ@iY93!PWT_zy;ߥe(--bt+++XYYҒmMs{]ٜ6b)@sk;Ĝ:P15sWY(o9 ܆546[k ӓ]91:> /mN{JJ0 d2Ҳr$ Nm&@42 }ɶE%}&~OG2DIY9(Nљ)++K/jݒ?3fnݺtZ.3J?wn_Joz.wgMr 5{ [o6@?_ףY.Ч2fQRgTZ)-J+K ,*~-֧`V{-X< t˃$vv>/[ r|qTTgΝֽqN !W߂ʘ`nN]$e" '2E6=*z0u-WEvmagXWǕ3׍,ў[5VٽhysۍS"]s+*pEܻwbE8vx޾wާjʳYPdT$٣8E{{Gu N an5EKl9GYtu{N߿^p~l64ԣu!H :֦SBfn⚂dGK?m/q߿UUQ__:RX0c<.dB<鱤Y>nÆ{nRًNwzV?Czg)9#?[(A%$hXSSf03-v;Q02{IAf#`6o6 \_qrh܇N gC;ur(,'ORkkk>@:!gΜA[[{(ٚ{x7@ DMMMT*%Z/_2,JS=bӋb[C`MkqӾ^̈́7loh8h6EEw.0sKhJٝkfS}?Wp96`C/16&^1\73*@uwA:Fgg'׷#O?~wvyF[T~\^SE!K(~68BNgx7ͫƓϟyh*3ATUV_a{{8~4~mV!7v :H»4.*w;57zN3=!"w1Y2Ku5i>AsINz]n4˦Ko3ݽxw|fu-'N`k{oh'J kuzR>wEUn_o[7Z̟?Q)G ^dPwZ!iͣ lsAs:IV'\'g{}:Ӄ|^wj&> ի( KrCk[[)%ױVVVDu/}s1;!+{ݘXs-dnf!m:ˢJtFTӉ L6)v/L2nA6;dr<>< SԐ DA*FףGDX༪ihlhıcX}'*s6Pf pE&39C}bqaQQUֶ8xHdP6 }㣘byiDQV^f eȀgjMǵ!l];R썏n(ӧD ().FYY,3bGpH|hPVDxP'ϞǁHf7ab|!## R&7qhmU N~wN)@o7|1Xn:ax eC$!$ Hcyhi]Yγ~+CS#F]/U<@dnf 饹=6X<B >Ù3gpibhhhVVWԔჇ8{,|>щ ! ژ]Ͼ}޻/RRRP(@ χd2$ 74Xbf@W <~p=]QWWr! "# ! `k+a$ TԲW6b4C?}X8Ql၉wxx6? :F2@Uu5T$Q@7L=aBc`vb^`fQT*1D{Ó$jk0= x \Nl0JqmR)8Љx,^fLO>@o7JJJPZZ6)&2Pz Y[C_cz0D *6nPGadhը)P`f* gCg<## C?yҵc:?xa2$;>12j8v ]8Nɞk=~B$s~;k绽9,tnǘ|.wkWs3Oa [t]9J̿*{ZUhooǐNog` zb٪N@ Fyet$ (cv@eUL_27h@ j()-Cs[xU/QuIçI*pQq,cPS14Ї2uw/]w;p=5獱{<57#GGann Hmo#2p lop <^ox Y @UYCm YUT`kk AǾNi RIt!d@^(c0xPVVx<ޮGhln ,P%)qӛOhүͪ@w׃!ZZNYӠJ` :! rse|>PfE0S<'gCj\xcxxUUpIq=ܺ q W^Uc077V33/@/b( A4na+ LdRPݧi*>+]0Y0XUj ^qa3ÌTUU0( CfOk:6660b: #A6XѱQo =G`GiTjDQX|ꊾcCwYumɮS5<͕ka1hk43 ΉЈ:,,, H" l׎}/<5"c4A8T->ߏhd:+݀I!x^ޖ*@a)"f5 1=5V /V8:Pj9C5yBc)Hy-j^ڬO ۛu 0 NCFLYq-kRP!,/.2(%Àb fY0 V0K (*#:@7+ X!Ɯ<cԲݴصl-]`lt Oנ Q`B%(ǹ i?鏙"peJe D0Xe-vi4D1 u^V7tF4VVVD/0P !H$⨬(2DyHA u}cVJ!ڢ\ J(#:x5t4PCy39vD Yã?ؑ v9 Hj!S0*Eы p Im@q%Q{4mQF*% O#rDfER(a D-/pME qsB`y!9EjQs3QaԚX*Mǫ@"wkƞ̍Fu[P İ(]vLuCDYjan -xa Js|"v0 [yCL Y02R A֣hDäZ0N Jin@i.~*@#SjZ9MvFQiQ]j-A35\@NryJ|8bkkK8J& /30Í/t:mAm3 |>?/ȜN@U  Ir5[HZ= àIJnI9~PC{FGGRG;Ex"ё O4ip<--otiϼys4/C:w\% b`b7".Tֶ6455a``l s3z}0 *D( K3&tKr,䳦޲; k--+`0]I?0Ҧ$d3Bl&2WVWcnzjO設oҲ , 0 7 ų/,w2I f +uQ;Do휎6zSYuϿ g~Upccx@sSΟ?/ƺ E  QDYa6+5`0tSAb-xށq @uV#y*mIF0#DŽ&JkiО&G؊#&LDGl=F'; 9UzMs(5mLQGLBtp_Q^A:KdֲZkbg8C \r,yK}9f7ggkgv\rF@ZwWuiJQ2#E KTgd{3x<;w7oښZLO [P@22`;t3/+YFV667+렞=d(j~) *""fxlp66,k5G@!=/+C灃:A1-mmm'7p2bke,I _u%茹 ͯ PWWv  ~8$I^Ӑe(f.2<^ӵJͤE bccDǹWxEaDIÐn]][-D#a( ,Exl X(9=q^Vg\$J'LCs3ҜwB'qU.4&AZ4sVa{1N8p08m6tH,fb98R)m P7EdYv:Xf&: J<{]A'DIdM>vKcBtn:}~͔Dǩ9#VcZjj l!@|gkk[Т OH-V=f+2沕7IC15tt8 ӢE@wucjbH X[[x>7DU9r-BD))xdC){c#0P؄vt8h"0i(@TD44fbX^ZB21xVUh :2ͷSY΢y>O^ϐݩXsP"1()ډutZgW'*+*P^^rKT/WQ)ۯQ 3%)J?n喳j'b=X6LYVD wч =MOHQ:v_=0x1&,G#}zwLN0% N#H@RY. Kܲ~8ApueLNLtw}7G`""2dAY-\ "zbF @Y>@yaA#Ԝn"08.pMSSFE]eQ6w$n[`z{KCA,٬}(Pav47Z@oI I0#FZwTVCV++XYYʲ޾D׮@2W_Ǐҵ눆Sg3DA?q Kʘ Yܹߵ^G*ƒ{wꍛ@hz 8s<DZ0ɣutv܅KMcnf._!󻷵)u(8y 116׮FáipK3ݹuwmwɓŢx6k8s"r1P{hБB"pqWOQ~ IDATN/sw ]M`36YKffeXq,qyTUW 6&8x4^u:qU D2h8 "9icc[[[CM<|ч446!:\p{%.^8@$h!sxG? LCh4AL6oοԬϟ> W|p%$)DC&5FL mss,=M-y1k7 >8}<: Bx8{rZ %y fʇNlI/W+nbd{ZݍO%Pb `x4kTy@EY9f3}khGdƦ A  X__Gr3hͭ UuggԾԂ!l(hlhbZ9E<7@}ö@F+p  PcSkԠZYq@M$EGU` 7C;m >c,`wju 悿|OM/:M44F1Hdxn1ٛ>#J'6jTϱ[ށC,ãGp38~ )u%J1 ciqΞ֨.0Ǐ+o" ^irU@rHolB,BgΝ n12mlmo5 S,) ~ݿv- flP˟ ~ݿem۶r\Y^g mϹ#Zҥ]H{wr)OWtW+(+".Nrku1(lg27P5"YG0<4`VTPdv̲־s(9:+qKk 0 ovj>T؈~C8OeKNm&dW(omG"aȲ k7$ch01@M0eҬ\.$fD1эD+9[<afF( EV000ȍt<EřI=ɯk2HcS3>8y> T_Ԃa bb=3cS >8uJ7L"F, Ɠ^n3Shk ha3U8X'f7)Ȩ B֘/jM[ RܦfJԀdspo@9 nq;3ǼY`:ɘj|'9OP[M̿X^kkkB{o5> um¼>?jL$>[ƦfCB8xW ^@҂u46pAYy9fg6**x7sH4T|M)ϻ#{A:Fee hnm1\O{M2} Բe+WJ|OR -OVU+C,B< mtߡȿgqp8LHޠǰ(UV]^YŋsCM)hkDb>;g xa1|1[{M"0DyfR4$Y+䨦JQoe@ : 8%>)!=W>Ʋ)ԢXMݳF/VJ*;kXWvnm)@D<'!6Q1)ǟ%0OYb}Ā%37!śݧS;W)bVb'rSDBY 2?;S)$IHsy}xܐ|^@|';I w%11)d Ҍ|7 5SD G2"ձ6C68x SCXzb%EQ I$e[,J!%I*5OY-|weu';Ia`}mh$ݥQNԀAG ?o놆$Q $- Ӑ.iL̇W|v#,`+Ab k4v ^8󪯯O#  2`0p'I1FuxAAlOvbu./L(uC$gl'@rO;=y 9Eubvg?)0AJۼm R@&Ƣ&+E,//#cssHDk~ L1yZ*hYzCXV>[7a_cOj,b*jIŰ!,[Yv>0y!f^Dxj q$yO׋Zwz( dG"?L4E)lqe -h`Fte3\a1RLOc!>DbgP]S.>ʍf`H&tt܊N6i=͘~ hll|X__XԺxth ,ԇ9%9vۄ(X8(VNXPQYf41XP^BrpAYG*nknmCGAFSA>\,,Vft8.UTM-y$%F^=8ŽFv;';NlʭϑJ&xv`uX@ >]G:gFF) ‡'1T~^N>677Ǎ#OB>ܻd2Q.^#ƺRK-45ާH%q)vtk87|{Ż[NJ߈F y<1zj"@ҩTp]9| m a$j<;RLٓHRz8~,:( 0 !y<㣃J t9}0[Y%]^L6t*D2 ڍr:]8LI}WMt\^>ӽ [x>ATTTrvvr!Na|tT l oz^>1zq`eee,iLck+,p&p Wx]8JctxT6OWRٓGz+ںVBn~L@׋,p`tt G3ov[{;t M2FeuC0[iJ 9V߀﵏>ާt:ұ)660f\zxtlo! ak{ ?X fd2k7 iJ H)o욜jo@UU|>x[$8N8@4F2@cs+@i:*:>ya֢eeepy\p:$Iv8$8.x<PP"lӨ4ClQ/Jq0|tD!$hni\ʪ` x>FvAG[[:I>C$ J!Hhxo>dgr^"HR <l,-T$Lc/xx6FvLL,T*&5L}%}OOP1:/po9f'㆚Ϧ{ G?!9]#blxCee% \.E,pVSL='tBeD#aeVU񢄄C7q5R&055E1BY(C| cd߽k:"e~TUcF}LOų'#4 NqMTfg 0::cǎ ~{`t={n-c6>|_#G?Ƈ=ظ>JѡAlnl_I`@)@JSH'I"ʰM돳Z $6$I#3 VJE h"$RT40ߏ=ӱA( ,S(2B15>d;Nj\@>cuQ Q_߀ /jR`x2#P EfgUi*B4:`%cldͽDbSc |S `ks6F*3T (+އJD {66`oΝ=NTc}m SSxy?=9 K*TCV)^SG@Un7¡IxgE}p:TV& ՗L4´*ʼ L g^e#N!YܪdgN$InTS}TW"6GՁx''X8І2(3F||V>-Kr r``((2kkkXYYe .xSEV ZJ!r[eE- 0bs,#*ܞ2 ˍ*!D\X1z}XZX@UF >7otcqa~w`7f:tn`T}-8N]@gW^dY||b~~'s(y(2KK!kmaa<(H!pՕ% Kpo3T,ܵxE=sy`IԌ'O_'67୩`T;KːV?MH+++nE" TnfdY֌" U( J~}$+!:j3&:ۙMG.I rbpUU>}WpWF ;PXR$}d2aT@bss_צ0T*ꪪ}Z"X][3-aoX'/0=5 .$I#!|ܰ,ʔB"QDO29-eUQLVb]byYV@P= DEvODilT\ԾafO:t7@&b%8r0>c|𳟡^DSSTc~K96)1k: 4M\tF+!uڧRLh._Bkkv*>x޾^\rE֖fpxïV**g!ilooY7R)AY Aj+l̮iއ!|G.q{J1E<kZ38N\r>ȨSa{Nx \n c@wxL= t@\}^@u7"m. . 6 |2+W^G}djNY918j)Majk&CEM#j4))@ɪ&ik43ZDá}Mжe,S]iΌ ? J0к:=s0lD6b.& VUceia_"XUmȺk u f>; W@MRSgu/]X ۋgϚ|LQPnL" BVdD~D]`FhNLE!fL&hA20V-mGee xrBR0uwE m~,///CgUE8QQCG.]{>G "DlX> }}Xd^ cN_9#X=(^͐' D<|>tyG= (@%4׏vsn6n7C 5DZ|kA@^S9fgfxKpݸt2\.f$tbdx(B$d2n YaGħt:D"k_GuuX[ুDI@&5٬W.L&KW^F "$Qop7^ L2H$j'О+}Hj6`LWvppDKb0氼FSWo9%$B6c{3/2ӋQ NӉ=qk,<0[Q! "ӓ{s(Wó 7lEV goN(XS@@ltO2\xuEww7N< m=jI8L&!1 2})Nccc'O(ZIE -p8t:l0'EQD2"?'N>آ%)̈S]ST"ɉ]qy|Ȅ-lQ`t ӓ8voN`wASeL+ ( ϩÉ.3dfr`et=5?}F"@8U,:~bi0s}KD )??ZEM$,"·JrBe`X,!'O@MMɲgd,gdhӓasclPW߀.f1ZQp8 9&4vWeș ?*2& 0GbEy>֡]݆͎Ȓt@uDlSC} 6eeolDWA9zOއYF&l&9+cb|)(Q[>c j\k:{}Ot: d@>hs ن,8ⳳ0iC::p稡Ёi: ZLn2Y(JIĢa,., ɣ<>kjԂ3>a>uOs(L6[1>2$QSWֶt)܄L.9D)&v>L2fX^Zb~)1FRb>4Q6B_B2w^USbz{PU]k׮aeyEe4 PjD:F(F4(xW-lؤ 2/,uw8\d7iiNn`ּ\E!躿`K^JP52 ڇbc#6AF L/WEj e!l->5bX(-Y`ҁzVvmKKXYfp\>{}N)Asq,h.Y3 %Zfn,ٌiN.v80b,CVQjvP!$cs1}=0:V*#2R4CJRIjaWOYmABr+!(@  7E5f'*1(q/i$&Ӫ :)Qї467%1eN%~X &jdrkuNA$@#A } ԼmsU( zJ$ iws,Ј},̓SI$\12B5Ԑ6~i|8ՅƦ&LOLީA r~?|>=~b_h|$Iܹ)n6@ܿ{o6&1?? g_FokI)s fb?מwd2[~eBpOqw016|\U(z̹C3Ip!\}[L 096h$W`@ ~{wP>2YKz V8(0>>h8k#_B%d,>C1Hs M;`^zjQLA(+#A}c#Ο?ZT2hUb>ϵJ6Oq/ m|-Lca>_}ϟaNo|KSE>/'}-u|o}k78q\tB1'NE,k]]q˦&0W4qfnw>Ts (wo#'N<&Fp s?MOav&Kg k7 2߹l6'NB,'HNpd+R |-<@ Y'OB$UIALt _bɅ6בNG=ϟ>[ZpqLMMv[V',L;H$OjxV=~cp?ctp`zz33ηW_f(QNlVflB$?CD#ꫯ"JajrRϊ2`,/azz 㽹EV<wE7p?s0z!L49v%Dԏ{{Aoo/Ο?n=y~4_x gg@D95>:[iZﳧ@Ss = 6>?=\vYADGtrXY+&WWWM,~@KW~!A~]b+[N36U&)_܄Be|wIGD_ͯc6G^:Bx?q{*V~z=Pz WVpH&bY" Z1`}HV"D$B[G;QY`POث/z "ֶ6 L  < DS)tQZ*}P¡Dn(QW!PP(yMЋL7B0>Xg}kx7p͛r2b(/ !hko>꜊ZZfvLJglmo` (kkH%Ehmk7:֎"Ԗ-y%5*<F$L$'>J D< ֈ(6u>% ϩ7 תe&YF,CggɈsXJ㳳ۿ+&޾P |>S"%ɁCqUML5vks3%n%-C:ҒVL0/`ei }loock+@02tR3P _ <Q|6l#DOY_5 c<">t*` ̢1pأ5P 7`{;cn߳1/9NY'_ɁDCp%Me1e܌aͼfN ),--k8$4󗮰9]^Ư>ܱKuƢ~[_0ii jlo2U{ jWVWVp듏V@[KVy!kp9[vuwQ=0f枉Nċg;0=5ɠ(־{MěEJr}-wuajb"kSPRڊ?hkaFr d9?ZZ޹|CbP˃Dee%<wꘫ/ȕ<ژ3 S$wikFm',MOjo + AnAjhj7~&mk'/7 MoKmt&&mیCPd_-~x9o%O&8}fIŧ~b!bzq1O~q ųv EyeM;چGOP =x 9헪~P)h7ZB ѡ>8{ :;yAߏ;wZ6~7y[{;mP{t9z C&u f@UhPB;J|i[3wIZ13Ɋ;}/^Xj_,JrjPUt/\tG/CCcZX[]Ek[/(S0_Ԍ͍ Z[G'VWޡ] "_j|+S"hbb+_WR]f Taz#?3R)TUhcO ,F [#o3~_𶫫A)P2/E _r0zP̟++ T`ii4KPo%Yٜ6c)@k{'ִ9hYcoREy M̰uU_3Dη]o󥜓1<= /iN{**޾NQjH0ԤCwMXkNQRnw@|e|Zd0s=d2|UQ28?~+Xޭ5r>+>SADs So6@G\Vэ7G#0ZKieSi;(,FbmQ_~Gm^`'sgOmh݅ki$IHP( s8]$q|)~?>/Fm]mѹӺ&)5!SP#&S+")B@5#)F(L{Tmn/j[F'-¨:,ΰ"-~-oi쪱oE+;ݸH[vmJ=%;>XUK/ѣG֛_'O{׌}şfAS 3 rVpR sۮ)' q0}>- Iyvv-k_B|>t*ǃzhY2{\SPkż]PC[_9 w}(6hɶ=hɌ_I'F< 4w VdK /n/u niF+:U `)'0Y`o2NjL 4ܱbafZZlQPr;%%Y<|lPh$Ra禕.ֳbV dc(,ӧORkkkOd@sљ?t_xwA A4Bi BVWz)Rq)QXN!2,z?G(EIBsS3N8;Q>gB e &:h򲂕U.Ȍ̮BSX\#`U"=^/jjхkr\'z R@1(' t* pTU ]>!{N4&\ZGxj~ bzr s9exnm9U7}#"15q5B Ocv6%Si>.TTVM-mrĄ+h1AO5|RL =n8y^.ƍo[$o}v e~?Ξ= HҘ_GEy9iWƾOϑJ&xv`5R|>N@0jv=J)"ӓ{T*  JYX_߀ƑE-*#xp6Da:~\|cC0B5q=T2Q<<٦w7$)wJ=97&FN ƪ&J)&FCStx^?u *rzXCJr!7hdž EM!LB|7t8Y~Ǐq99{8p07 ZZZ b?{ ϟ>C#LMMݸ ݿs =WzB:RtZ4U}Oa<7 QVV  ׃4ǑJP]Wv_q3z;ZŚt$124T"VL'6|gcx<Harlt 5PƴSSS}6VVVЀɩ)DQ`sE{J)OќSI4453:CO1C0[iBUu.dbPr7GAp:EJajb[j Th0<Sw>/zwLG$B2V]L6,:j``ldhtD n0 g3Y20ȑ,,,`zz>L>ԏhxztgg`Ǜ Ӷ׿t8n6?8VVV`89[p---cH&ę3Ј/pӂӇQYY`0˥ D <CkLH+ܠzuM jkkv{ %2B%\dn$CYEvC vM\wgtD!~>,OHeڳpE)s;hmmEoo/>CAfAwwE\v?~*M_WPhh }X4Y n阝" ]ZT\,]1CGd^K=@=zO<0駟ԩS "M8u`yy 3g5={^ D>84`?V WveE+D(j9>U N'^I\Y]tp81Rq52?g:<0a8{gPа kkkz̑#GЀ.`cc#'y,z?dϙBYaAkdŞbt_Sʲ&AhӇ{cS( O 0S{c6IDATrtTYMrb{)Em]-._E1>>^ A9sZ__~U|\%9ttk GD $1 k5lRh52ODassCPVa q$ Va,xL WEQD @2Ddz"spp3`j(@G"$ň Fk9Gn'?1(U cf&E~0cv9k9&L$<T 0+T0=ӑH$0=9l,T*t Yu%5 ΊԌ,,, J(vq%iP@!TQGEpv#FgwdA +PD}p:N$PA; "^rb&ESk;dV+7:BS:pe#cJ 2G (cyyYG h8T+@)051oc }D&)fc},!Ca 7CSFL4֎.@V)x5#RTfEsZ,LdH&&R$`r@)圅 ZJ!ұRd5A֧a.2AvE3Pl6 WQ,b*SKAȠ@V((X9*PVS0K (+':#+G,sۍή.tk ]R(TgEX./qAFU~ XZX7:X* 0:WQQQ?t.kDE⛱D x DH,A)/wjH+/~Bb24$u(H$6Uwem7sظྊ(K6˖hm4nTNӾ}j_i8('mqɖHij$X7;Ӈ;^\$=-ϡEc7|>j2r(0!u S.hÉ\.pt@9%bm$?)y$q$9u|!o>?376qaxcReCC&u7E҇o?9.~~~m9ΐڄPy!\KE‹B!/oMCE߂j.'MVT" BA<ʸ-0ڤj"E `R5kV疂8AGG'.]W_}U|8ht]!2ff qHX0"1tj" ot Lۉ1r"S0UÁ1fgd3&A֣3xutp 8@n%1pU1DcQ ±cǠii2/93pd~萷o E(5E)ӘsD8n2FRI9 $*`Œuq3FR\n9҈b(AB:10*}R%S^c\@,LBn-[/E[f#H3P ;{VЗe!!{.a}/Z9FFp, pt4\{RTE #fIZM:.PFq=ܻwh @P[N@QdRhh1AD_`=i]AdfhՏ\nT@*Jj:'% 3|:LގT"~(ttCl*5\p>mmm044t:ׯcrrv‹.e3[ŏChW)QdCDf Ԃj:H9W VJu?P} k&&&0009<~kzau;py^ :A UY99tAGP@wO=Q+bKhi 4"macTɶ61:qBEE;BGOoU P߂aD#`^{ϣ-8rz;;;9z!%C]AģCȸĉ-=ӋGBGW(\bh׉ء;8R,FKN=~2a;?ߏV. wٳgI004u455 *bzb~)ڄEYI&[POJ@eRqd= MpQJ ۫6J Ƨ=3^#spoݗCGoڤܒK)Ν;^v#ɠLn\tV` ý3i!FAn}3z7[ aa~ht2+北*.pGNS }J$pFx"޽R #F0ɢ08Nꪁ1==l~#t:hi+pKաp8xql$&۾TS'?\x&:>VeJA|"ÁR8g)׳(+.8L,yⰫU\w{{Q:0r VEĢK*O\.Ku:X^&&؉E5h :$1ׄĖt:;5>i ,F082n Ue@kbѥSq ?BCӠ9kNRR=Un3>188Ixޚ -.")ߨ\S-x4T5+ b斖Vloo#>C=6nYrdNjryS?A%䄈5w/+KANhUI5% uʮI9`43|@o_~N}}}fouQ®:\nP[ePW&<'c(, -NNw`TB,74Bd&Ob钓]rF19uJ+nQt`,ƶ'c\(8hb#ށ!OB8&N2Ab>7Ȯdezl6 t@s`(bQ3q$7i rMtcgg'\MPaLw.Wa-tv? cpe6jh\A"{":z0<>a6>14MzE5 d-#:mk[ :ݪ,բsssAkk+:;;WY zJ%)[ B 9҈qLƍ'Tjjk\[dmC*lNhr d2h'NOcpd fqjQ O̱/8z@+F,Njd2q :NtQUEl>t߼yShh=H=BKK}HgTWB,94B<,bQ=Sy901u }CZtJMlk׋L:ڞt49bt|V8dj8۸WKknt +++{A5 S 1$Ȇ3cgg⌫85^n>ʮ߾} mmm{-G78Fd.@ttAߚĐ pCt-!H E!_8aq=vFBzIQb98FEۡEd)=}jFA,sT;cT5!ۇģH&X]YA!Vl c'RDBNk{қ1uuˢx>7󢗠V'(~p#A6iWV!'DS~ b-ho8{F2E:@nuB^ۍ r,D0ySj 3i`}<^@"Jk7; u#?`cU ZM1%\ӠG;H'ȦXP,vŏQQ^rsIjt`ڴmt?yMkhinFSSd8aJ%jawF/R]1jxkPbfJ8Otpګ QN 0o*U׸-U^h5HYp<سѳ<(%Q۳?QT;?~|s^ꩮK624V~tj^vDPs7޴k2Hj00,670ƮT*!`JM)l6,`M+/.kGW^ f(Bu #*m+F} P&TTD!֬'F$Tj5ZaSuк ex-BE0CPywqgᩩ(Jx0'JvNݼ(48A@DJYb9J~7D1v!}3%q  NT1qIV4'!{[BnU#C1p&ZRΐ9-Djnնҩ$>fP(>ŋ_ᄌ/͊Λ+<5#OD6ÅxBHJ.2">c\{b+,>F60ܝ'Nb9×7>Wk?03l=Ֆ"H&8sH&ծ,쓏Wz1u4>xfURdˉ8Ξ^ёEGt^AG}8>5x<[_P?Sg΢gmǍ˗/FXpRIs\ >1^}_/\E4l6g{s<>l6G pK}=(޿p%l Oqi _|_E4++YL: c|8nRQ7NOnRNϜ5xdis.3/o|JEGwSXfCp|ǖJ&qjz=?Qx OQ `q$q|u ^{1ܩVƯ.5Yfjɶ$wAP%䲰*A @- O+BTWw>:! `) ht{{$^U훠Tҩ$~1y4½l&_N6^֊rY)ڢ,6LUʸj2sm;&$b m8|.8lCa<;5+ [,b 'F% g]2B0ߝWvBx4PGBm4X`f7*ThO@hF\ŴzMjT8@p jTGPX!@Lz-CNШ5 u P]676P5 1+fƭ5@0ݻģTCgg[( X cė86آ*98x M!n: %mg챃bo!8kJv*x !9'NO{uJ:^z|=;(젹Hv +K+9H&x^o6μiUv~?_9VW;snxRW8Ȥx'?p=%FƢCǢrMyuPn3/_8Bi` ]A,cXf0uJÍ>|ƚu3ZƵwޒ%yF2ח?ʱ}KZr;;4@PfVI-ڮ!7?][[ՅrgJmk߿ԛTj02~ wlI56)R_v[{;O~K&FM`~k$"m^PÙzؒH?$'%Z2u#caK{e^*I)YھZ}u%:^:}sp<7&Z^Nct濙E9BwhD)B`mxH% ýol4ÈEQu.qg0^k~YA u/1،`D#uGht]}LUZT0^5Rϫ*!lJP>Cw~3}D,'xЭx߷ߋ#Yo uUڼ ~Ə=SFʷ]yn;jlt|^҄o^'-nsC 5u\8Qall+kZ d(t:wzþg0mGW `[ Udϋrf_ 2ĢmJ_\z}>$1\{-J%455d$G~W,e2Wfwojnfom@=n"5 ɮI3R7цBV]DjmPpJZ@>53{yF| ǻ{}^[cß s-,)no/Q6(^9c?-[x>x|>t`{{BSF%qԎ]KK,OC~gCk{f`O&uoݠq ppFreZbN8;.7!u# d!% oYZ:X C~*?X?{h o4گ=wg.RG,abI%ɞº*L>v{@BL~J59fXI-[q[ŸxԔR6oCu0:yw{|ɻ !gsi=;VEccǜ#"VWWp8p8jF0);N#έI.Ÿ$qox-`/t3k=sr`Z,Z,9ycy?5"畓kaeuaa:_q401(@c5#ZW{.n@Ly_Gow22Ӏq膎"SU[Ύo؋yt?zJ)vBF i  DӠ ]$1'ΓDY:u6w8Fňd~L [&~b0LvezQ̭6`BT"9m`,ƪØwBƄn2-0/ZjbFlW!& c :`hnԹ0'w+sFJZ>5`l1|jwa;vTɮ߱s'o|bv=REAA *wT!TM(#55M6F]*ż%.v14uKWibmZ #Cx<3EA7ݏܼ|WVzwa`"̲u1zOye}IbzwFǃv< ;NcdhiirDZ(i1-QV1! :!r*‘0rrr\;--.\k}-Jv3gn`iqiHKME? +++P?n]G]@HLg`yԁOo\B@ҝ@_/n^E}sC4xv,.t3mA'Wq CD1qc q+X\;16}rE-BUݘw2ZdV7_u7F?>}u ѥXca=OՁOۮc1c^5h9Pi!$iv?P uwmXZs æ;;=݆ܽCt594@,q7zg.Ti#WYYdelEow"kB BJD/؛q2}r]QTXԴ4qTJ* >Ǖ avzGO!|D ;ELMcьpEtKŏN> ]7`:!$ ;Fҥp‡xp~3`03Ng{09ehwwt'p9Ԁ &wx&.R^O>zS8>j Xhkunk/уWGN cDbһ&|BϷ_Y|~N`O!% 2Yg^Fd*?w]=.}<  {[nP=B ?#=-a'hN³g177gϟ={^nÍюll۶4+4ϟݳ_8 A;|%-"~rct={g@ _qf{p6?0x4`D"c >z1qA^X< AGi=ĭW7LwtdYsEӠi"#i.櫗7Lwdx,hmu}\rqt/rҵh~ .o+<ۻU!k<~<0F^ ;*+έ_]'r2 2s4YYHKKg@ 35M2[>޸io\FL0Jy_Oh޺ 5A&h(vMSW/nk&iF@c{i| n$ۮ&LD^ M޽uKmXjQ*O䧵>qVn߼ΎLM6ܹن'3GoW'X qy@s5ss2A>|8JD|(@faQE\߮P=f CG @(BO#PR\|p`pt u<e&5yܵ"!< tCAtu<3)LTЏ;!B!tuvŜRjƤ9!tur1ۤrN99dyt2;CxbqaEEʚ!6p]P0)&)"V}=I;8F)LfӆB22}=]I; (̄ɸV~ J#4qw}I;4/6vsO2wdhԄ)vu<4ޤeXGZ~*7CeU2230cn/GeUؤ?b#4,KqU;wG 3SHMMcԤ^&4J 6Mc)q_Jazj2it''`I'2M)DNMN14th :H.]*:(哕Ju;=5%2(4B?XwffJX)@4MWѝϔ3$/{Ux[/3Sz/**wBs.=gU5ŀkKݽ.]ƻ#XXX 9̎q6MSr:22N"b` (RAXD kq)Yl8]|q%RIХ_ ]0&'>4 Fg|qtya|skNIWAu,?Gowv}@s!بI7cdhN11};;wQWdf8+++ dc *Ke*#ݟ<փ8LBdm2hC"EЕqb;E?SX]<@)= IWDйt?it+Ia4?`s8u1 -zntw=JN{KLikGHf{+v:4{RaIVTV *SlaʪO|.txl Fjdee 8t K]iql'`J"ݰGIgFصkcxp-|GVDf'B!##sf2^*4M}aDČpC|w׊3A kEww]22]bsD1 Gqn^d6O7{ǸL%-[΄(C}~dC^Vv$~&Y쮓#(0kLb1]'9`N=pjsF ;wy+w!hinٳgߖsE*-.CjxsFkԲ2H4MD"a*jkkQZZ(+!t0X]]E8FDԅa#aJH,--aii -z9i1z:ra* 7Ro>vbt;ɭ*ۛ2pM=|줜|"ɓ'hooG__PSSf {0rrrёa.l>Z ʸP(}"(4Ma fHSe 9󰴴 ؄-vήAW162In^1<4!zX_.#\X\\֚me$]Z\p{66@s-uðENn6<{5b߁& KtMlnc`ζ\,/-nx>5EþFѩikV<122 +^.: #_8}FoQRRfhǘDmm#R͚%eX^n&=!Uu蚎P(4?NA3& QFE1UHf_}p)xM#4D7]KC'NQM4h;uFx M/Z(:|~= DAa*vTcI3|E,<I&z:1<؏)̇Lj'vGMMa8Y@h0tCFV?x`%,,.°be-0> 9pO{8v\ sˤv :h+F!]"0j,30`H, $a 41tԌ7İCQ4*XkoZ8""5t!.4MQZ@xaLE]ia!1S`DnؠVygEȮFl8LX~i굞EA&Ć"Pfe^xrQsc•Q)LVdE`yuEm998v(>pA 7`?p1/~ c}rHgUľ49 hy2Y/s >mncGU5ZB‘y 8ucs g C>_SRCzAYG`uu ~O0;3;nKwVW@K+fgfv.*)řse; <@|r:{Bw#y*:!LMMȱ ]8=*ʊ0cE|g 4VVV! ;"]Cun:,LKTunvz׮^B8PPTc'OadloA> Q=} G4Kp glIACs|؄ёacclt{ab| ۞4f 18ߞae.n?GkK12@xK IDAT;p1}zͱGŃQ*!aϞz\zSS()- }vPm/,*B(D(0**X'f!h/Y Hi %%26:ƦVQ]PA2b{֢`Yva&\qbeHI'§h#Bפkzy/w%.AT%ׅde]OޅRZ1f5(Dsta"˲ ehJD^~"0?{ٙNO p))>V܀338rrssӶѝ qq3e2lwkW"Rbvv-s'.C* #Cx? wþxוdFS;<ѱk3Ϙ%zAN W? Qg/M?@P߰HUHl ◿ۥT˧RUd=RLL? Wpg?0S,/cw}CL,gwn_ аw?_G~U>nZ00e69}ttoK ;;[#%e3膡dƳSҐ$^v'(}?"^χnT kyy9Ɔ@ihҨBe1SWJJ=wh#jc2/̀b{sOAޙb7߳,۷C$r`V{, eT؉^yw߃=<ׯ]} jXQ\RWg9j8yhF,NBR~߃&$PweU`r|};ju][Ȳ7a+񭗿cAC%۩n 󔡬 WUCdxU`|x;|;(*.sHÅ?F~~>݋dY|tFe\,AA~sWUWjLCcsmVTyC)Sde*eĞ\L`ۧO ;{t@^AFPAq쪫ǥ  3E9u\X$#`#X>ب+fBA +Ja:\k,L3Ydc8}+\DX;o8\X2jSzRЛ"Ǹa]\Z;DC(Ehw?vmٳgQ(оѝiT:#V.l Q\R +-7dmˑIc#x_pQK_E + j 3\:cc#܂RLNctdȻ((*¼^{}Yu ;x?9Iz{~.`aaEY5R)ezcgVV_^%}U/>QQҶ;rA)SӍ{aqaE'>3cx_beeY۶9]jE[e.< K¢bcp@ Z[u ܷun5 22HKOwh1iwqFCbF#N83R 6j q=qepv8VxorIEh4~O:eI.vTZB<Ƌ-E(yqƼ_i[UErβ۪:Y3-%ףoZm)Q%5mTiq bN`VqM)Viv "4];1Àjɜ4)UK8S/Bۡr(Q>*sv@WhwhcRSSyep+X\\aa$;+c];x^زֽKYj X"Odl]ųYؓ$D}0d;ZJ&B.0D@4DAt{"]j^ Yω23 +CRnP'"w;͑1=(c'25,;&n g_^HN ,@]ADaw]Vob ;Kx%17NZ Q{ _5ld]H7, ' L㍼M%jFYHX79Dl'?1:t%.bn鱸t"n3g&wx&N?Gow23Ӏ1膁"SU[Ύo؇ytw5Ȓ< 6!|Ϟ>54‹vq(5Er! "j”2Ȗi w;~g(H)*@\D^ɧAyJ|l~zgn WAzٚ#T]:oU#+~_t;!69[*_[9!>B+}$͚v OBW;^<ou]V}b\MS9²8,'gqqkMvjP|pBWo7ntwyz:;o++HKMtcx6=]x)>;bkwF/xwz].'DG=RR=/ϖ-WF}utvġH/͓f1EC]XY^Fj~|˗PV~vQHՁ {:3׼B{?xī*z?Oz/x~|zS h%qQJH׹t3t=mrP~  B{{PZQn=gӅ@VϢ35 BI#8v(R|>څ+W8`xߏB"u#uuKKKʅ0;='O0`! M#%._DG^}LOTZŎ0\}0ݏ3S8y )JR{wIw'ϜN bh6#0; !##y_?ƒGcvz _8#)uMòk7õuϫ#'^|` ΞE^^2ʘ,:u= /{ .];9Q0u \u.TW bO#Y d9$ɜm9~vDy?K%0J+4#Qabb;v/%'_8/|m(\AWdggc@vAYI`slJ)NyQk\wp>s&_/{waR΃W!y'( Os&w BoX)Õ7&8y)g8X]Lye``0+U#v,( 6ueXJ*8hmQ޵X(g08JٜBu(@ӶǑWX$&?~ȸe͡'|( .`eep COg\999EJJQq߬xzY8^Ԑ~1?ξsw9&w}Ύ{{a >DHuڸB=WѰF/ m>x7P'_qM+z?Y{9o:/ {Fp_2wďۘ D"<}iQ)yd@V O -55 έtHo08԰¸4tVV6٭6NMnJJ|z޾q̢1(UUp'7MO 6A#&@Hs7^2LO!55P"ȸ 3M:l仉mFTLOq8&(4uG)dNONrij:tү/,D2LMN$LA7)NGgMN$.k%iNOM2NN I`,;33%h,vYg=lx},Q6܅o۷q0t]R|<ZHL !=$vaʪ65) Ç9@UEu>B~2*tM_  !??/itW3\[(D~^2FE1 iXh=Oz@- 9aJFa 'M_MANg*K2ݻqe;QY ߏE $ZurC6]ɂ먨1mUW GjIa(L<J\Pɧ+B8H@Q/LM(UUjKY%ˀc1IE n HnqQܾsƒ\\ݞ ln + "\LJ?#32^k'iڛ@:jw2TnOr7]fX 7QQu.Da,i˪TѪ3+XS4&]7XkԲ2H4MD"a*jkkQZZ(I0a,..bii G GˆXu0‘0VWWD,--aii -FYD8M=txT%VhcXX>vbt;)'VKÑ'7MrȕY%:mMCIhZXm>xD:Ę"(uyB$CRy(Ol8QTg}>>Àx ׇT%%hooGCÞ(̨\,//atdX&a [2s-//# a_#5(: ÀfDǻesaii#C ZZeah ǻk 1Ʈ)E  nf4V@3tz g>1<8q-4UUPܼ<,-.l{pEaXq9yX^Z׈}x !5Md3;۽`wGIa#_8}&水477Cf?$jkkj$,)-gv4Ona$ab5P hg6M_p1Ҳ 롻@8eif@_ƪ&W(**$}=tZp[K#4O|M=<$n~I׆5MiaQV14S2PkYr,o`|54iB8{ :`Tk1&8ӏHN)"0VWO9C3iRR|Qں:g~dgoC IDAT&` LOMܜģx֐iX\\D0DjZ:8M. ƙ\ J*099&ݴt Z]H5HB,xbK,+@ + {6ݓ@Ab^l/4~>GDK񡬴Gzzz0m8Bf$Ӥ0Nca~BW] #0` 9*(M!E](z024iχ((,BŎ*yL<>}OJ OmjR/lN cfz !A73EŨډ].BEQrgx DPj03=>.«5M#a0"&Pa33D#iO5 ϞIk/Mtcdx33X! P^;kjm Dk`^bH)qLTl{,,aaa _c~:3|wzz#1??4E㡷ʊ&O$b1|E'11Ekn `>/ILX{R[1ř ΃HXDQG{) ]us/jq*ذUc]VXHJ{9Dd{TsL &b3x":+y+Iyw0aX>qddGAEersss=;v fNf5ijR;RTJ.F!n}VPL> " Q@@NLvG-2&M4* Q[jA)9[sILt% p ϵ ;hXLf1ljh76Ҭ6"x ȮFaĉAOnl|k&rQ_ FHG++rq֮f7ZF@2zfq%aEE8vFq €Uhln'h~ p!As!>ĉʪXpcB\5iXc8~-X!ܕ]]]*2 "rrp"yS 7@)SK;p1Ȁw(iFI;/M-o_sl5 !p*jafh2?tݎͭ?w/KI![~cxߢa;mZ9/[ Ço*fg۷D롣x`jr[sBF9]c 11weWiT [3>>XyNe2իW159~`xx۷oe.kEEFYE%넟T4 E8T?}]LJAT^cS+FFz(FPV^G \e$q}GFG,@#wQ)^mD+\E׻XR=.,w%ׅ5NGtwQX:}T6#M؀b! nj,ćK u,>F\,n)P=8z8~zzz d4׮D4ť,[:0A N]Q):U\Fdoˑ677}+ ,//ӧvثcf 1 $Jǯ~,//n^0rpӛa/5@r|| /~k&=c] UN011_'s_*rsÝh^O 1gwn_ аw?_G~U>8][^[O,]cg)z>}?"^χnAZ^^!PjڹҨBe-;H̾*/Kf3X>'x67` ًGe@&(2P&I厝xW11>.?=zqט%%xfv>WcXbDcNJQ\TW}@!ߕUU柾q|{8rxjcwm= n޸}c(+ķ^% l0vƸxQ/q\,vAA~sWU'vcKն+WA9j=B2JW>}۠ 02<= KlW]=.]lt0ATKt Dx(yi"[}~~ͥ0Ěٝ9˳by꥗scyV<ЍX2jSzR٥xN0{-S;MZw,YHdJGH[FqY9B KJa%1q~/m9%slto . ~Nz&a0.7=.F J0^_֮a8ud$BݻyleIB*0JP |YY~~!zU"FEIξ|wŊ{~s00,.,`{^Heg1~s oK,#k6u 00ϵz+{]'UC:DﳮsQGZzvuϽC;HIK36w$q|Wqd$Z9l$ q=qM±tx̷]^ڇ02aDrd`xG_Y 3'sĺ/#m` N,B{: [#֛I݋#.ľw|co1 kk2j.\^'Nt?/A_&ҳE] 6CIԳc s k($3I7Ok\L$a7k8jB\\DrI |`(<WW]"'%eEx2~wIE4妹J*@^fsN*=D<Xs V& 0-{:L컙<; A@A;YdzQKVzpGr8l41"䉉hX!Ya'&twuWTڋ;YdWHA;ོ?͛{J#T/3O{ι|/QgsQUb6[lk"kb15$08ypNfJVn*SXRKvJaTv1m} 'c,(;) V\k"Z67070 $ ] ;iVc;+ۡr32A-nU`O[=#ѦKMO?8ei!dgS_ey,>l ,|50Mu0CQXt \MOΤNkn3/f:effmqiϡDJw[P|ks V Yg߱dphzmpڭ<Xêՠ ܮNC ڱ7ZaQ6)Ed+=9eY  yv8LM_ {/y1VoQ\\ p)Na~LpۏG~3gNn߹^|~%t@(,,BØnvVVq]rUtYX~[Up,;%s, 8$j1Rfz=d0PS\i 3CARsIVbB BX/l&߫k3k;+$Ns2ݘg|~; ٟggNH1CiWs+5c{[Fz !sJl[]p|?~u߃)z4`n~kkkX[K`~n0DAyO }ޯHP]]20^,Oxgy#,jc<bv;Y'̑żOr10,̳'/iSժ!?ZbkL0}9\g%P͐eV,)E\Tޓ@Jˆ%Zc 5uӰOЈx<_-|?gfu9vGňCd*%j1;zww**+XK?Ο?vLo-$q#/7, 8~46n4ps;W'zt[7Rpu<}GZ]"bwu>W9r pi!b" 2ou=~[ׯ"[ ;16^ܾ~UmU1Ԕ4lO#ܹy!q,ZLR1>,SN<4L^oGfb3G _|f .neSG~YZ(сNSMw9oOs,/-pҋz<9>OƒO,u"UU ܦwLKX_[oc]BGؽk q(jkj' $ ,//avzg/^ac BKMc ݩ}?DY_afz .$ApmaPxrFx೬_`fj_,@Jka{O7)w_0t os\=<<_avz _xQR`.WCWd#d5`a+](%+WPQQ{/GzO'Q^2}1Xəz״!t|ظ)_ſXTTbDTVZ.k]y<V]xF SSSؽ{74k1PYU7|Sq.ܑ[ׯJJJP*dmF? ﷄ'_ ΀׷\ntM}8˲Ut]|{[oVbT;}`)~de -/aJ~>}s9.^zI*Zc-9*<gzQVOl)Ɣ%׫ցxS^0Wc{& l`jN5X|(JJ[QYS+ߙ_ GϷ2R$VVVP^^9TWWwo|CBEYYˑ#`7;^ 깹9,--ᅗ^FSιˋ^~8tDHu%xB<[{_#m0r D"9`h~Y.io^~Kh9jYnl7\qॼoa@XT̺ۂkR랈 43%$pՁj411>h,wo!Xju&q ðŵK_߽-ٹivGIOn]۲{nl)Ĺ Fo_xr޼&xO;"muí˽q0RvXk67%W Q'b.vY;V}gxc\iPeޅs ڱÜ{my(ݻ~Wcߏ#GfNa(-[c6ו|oZ" I9 `;E0jey;.M@,8?['- NKMdGK weݝ@&irp NoWⲀe&t>|mxߕtwuZ9V;iKς6=ɓ 慗MXƜ7 Jcp﹇dNPc*!V&}4ՙS]&$k{ؐML)6e .ϋD"Ap0)컻ӆO,>rdA{I&Ovo>AlZɊʏ2`z{O`?8Lp̥hNKlܡ9YuҦk,Y)`SChk|gQY={p51,!"+Y: 99yX_@$GA03=\1p#:$4pDRMZMll3bfzʂc29LCӬFqN6ӓ XtFtk}}!059mr&'@&A79H jɉ˹yɹ|_ ;=5%i4C?V(!Kôc4)lsam=Y:+zmx+*q=\|" ]f砫ET ZU$ څ]+0>/*ƢmK\`f|`++6PIՊ)鶲Kg਑igB,暈^%el&05' 3L%A|{ "cpp55hfm!GTYநබHT_Vrp8R)(ɵ 0J̷_ Isڣ_\Y9qUqǣ;Zҳ'KWGuz6 s>gϝŽ[.,E8z-d4Qǹo; {+&*Z=ޱ/@(KnAAʡ`= Sn%B'MHvfg +ۙ(vVe)%7zJKa8eQzM= Wt8(˻=C~333H$,Z˔!ɵL^{3KL JQ2#pERDȭ۵[ja "Tb|td[NM!1'6jk0:2=rwsb9m-\mQx{^6A?l:)\S*L; ղUW55d' IDATpa)V{ Wt'^w5ĉرkk LOOayyeeJ֡ߞE#܄=Uw~rn.86X=%NH}="wFptаID_Om(> r]v.ƃd{޷Q!:8s"jmIlijTXGU+Qw&4k~ 5\*I+:Qn1-'I%U!yFj9q`;i+ wQ hDd:ɳs8pxĝ;wa``bV"bS3 `k2FƱ~)O!iH)+д¢"4lL2 \Dwmhrqa#%#5:¢-*.C\ʂC$ڣQoܦf lEYR3%7w\PN kru}WoeXalR6׫+VUL}>wCzewָ%H4MRIܾ} hjjΝ;C'O##H666L%I$SIlll J H$H$8q/ gnY3}LN$N; >warϜ(9Q:p-=}z ]plpsWTm=֎.9|WUsr8vAB(f䶵K/:^Ӡ4=` -=*:00v}]R]Onv=I5go[n,ˉtsCJds̥ c~]}GJ|wΑJ%~+ߏ!'' hjnFuu5"@II)kjgY"ŽPPXI,.,H1"xP&b8VWWW^~"J*$Vrwsբ,oM5 7$8!sTYM"l8wt@3k(J3nBR7WBV;}_&MD;VO)83/՚픕&Bݥk qօiƙgP^|Ν;z22anr'RT( }v~BL0tvm2M7`躥j=Be- 3]`&`BU:7pw&M)5i)&sz9"WD jHfbM@dڂil44itE.Hi”v3,a t.A6Nۧp66cG , Ξ| TX3k;p9^8| s}*Uװǎc||S8y ĠB|5$у7xmhD{Ih\C2:.\zQܿ{/}+޾|52uRp} -—uLVq 0S)1å+XE3̩U^pUfpJ%A؁_ܺ!} h8gycRI0`N:#)dzMOO"v.^zCEǩ3XZZĽ;򗾂ёaD_mh܏S Jy|A/?(PZ(}v/kP"'Zy2sy ev0z]."ࢀCd ~:NNf)AfBSɉwq9͂ ЁQ膁ۘ- leL )[GXZ\iw~3xi1LcGMmzkw=[ch_NjjN&"JỿϤۅ\|wQSgatxoO|Jpy}=׾{{eyF$0357^)N w/N>-+zo~{.+@NN412<#A,H$0;=75KnP*kY)u'C‡q ^l#/ٸo2g+]ѹ,2+ !D8t׮]v!bc}è'rhms+XY^0v:OiAL8-}r5OhWFFGށQt:kEcص]O|Ds%Nyy]vF}RΊMƝ_l*)`ce fe2dē0 )inI/Mo& Gi:J]͚J=Ǐ; Ui:jv(fggvk U @JN5Q|adxXXGIi|[?{M/f`mm Ϟ=s^]6,}vw:G?()-wC#hm; gEÿ:ֶv!G()+YrN[YX3)S6ĝ3 O&Wص+QvZQI &›uI̱+_A><&ܳ366O`GNLNctd[ɫC<֙_sX`rr #0V\ۍ~ VQQUn>F|_O7>̹Wee(mU`]&w FGGڏ55ݙx~oc#7[EEeH8^@iYGX_@IIK.D)JY rܯyVpPAۓ3n'O D'0 #,<8 rFM¸c, 6 p"Fљ[ͶKOOD >eRg eͳϳYm6g~ES8 3Ia5ar)n!pM1AY+}r]ʖqؤ4Жe#u~&m:/<+'+=*I(;zX+7MD" ;CGpdG5=Cia Vd{͙_\lvjwTii䰀E (wؔJivuA*Y Ht S /Ԓ7\#o^00Rpm KHigdccI#"6LZLQDn ,BV/aE̼~?'2]|\Dgf\ų =Gd=,OtWk!$(k /\@4Qd_A޷fٚg"OhPz滗We|y;2_O;L"///$q&}yxHE?fr {: 1I&sv90 w&,u'Ɔu'99\[^ޝ?$XPLwgnO<Ե P'1ޢsBlMJؤα&O2Biɗ(Gt)OM߇E P,淧#k`,p|͔NUhy)z*[cJN61FN25k0̍$LcIC³{hjjvyEa+3ijgϐݻzr&&qed4y:s;4ڟ;&xi-g2dݦW/'xl՚M3}]>LO"*GV*e bbT]Oa3Sn955hh<í->'MwVVWQRZ I&WVܬ턧OJor"ׯcmm/_.2u>= Ϙ2Ϟfq{`i?fg@dqVTUa}8"Bl1< sqyfv 躵Ґ.+:΍k9UQ k8uZCӕZu>Վz_E<(gbl}*NCBYcs5;em***˃KϞ [cA hA4MC2!\`] "•+WPZZ4ۇUCDf&'040wnil>b+gĞLk՚H{O K9EI ?ħnI465[x0\ל'{{wH(r ) =Ńlrf,"PV^ xIq14eFQqFG>'|r.v c GNȀǂ\̼3"DQ 7/O H$X^^‡ 3Sp%Cv уϲ~I\| 04̰;Q\wOOdJYdu|qqѲJ\} %%MBqQ!FFFиD{>A4?mGbnv7oDIi Ν=g-,t\/j;_l޺!;eyJY9#Cb K5Pb}%& d ++رc`iq SSSx=8x%}nر x,ԡs#:b8{zى={"7/O y e+& y&,UK7Fc#ع^Zh8L-&7,%߬Q$ ص 6}r{sr&FDZcN U.m"J_ Gϓl-2Z `1Yr_*>|m999l{nnKKKʗqppHT9xؒ+_*i1qڲBX,;v fF2"PHHF!xYP7fGrKmt4fĵݒ/\Ɓ-^[*p{{p$`eF 醙i'KLnsO=(EPW Z9ɭkF(..%tIp0,cĆ...A^^ݺ yv5;űC,a(H17\Dd61MA&3W/RVA T :һGΜə2YuolWWWmz\Չmᅛ5 խˉbW0Q1J@$}{Fy >9'PdH'=k "//9m38g!p opkɴpw ecj[h4SCF%bqBƈ5}><4N\=OMȐ5^ɔ548mrG%ɭ>J٭E\ H\s?P8˂|6<1y$ES79R0J$4pSRC '1I,R:M#h:Ʉm359BΡ+-,~8NbJw%(f;FA)AXE63Ӱ`84j'833- ơ;7}rff@b bI>M / 0^KZe1VWVPUU弰rLl5 ι nrF % E]D/WVVPUU}r@ =4k\YYFU6ʑb%`xߞPk%(}p.r>'.A>RPk,qk\nVWU'50N IG82gŽ٥`0Mөs&'qewRpy[nW &nQEekέR'(e:'Tʿ Zn VÝ'E {y,4QǹoE9L3e6EAA!O[lBD@"G})r:-rvcVh\DUkj062=rm93QrmJfȤ**kz?E8|EX^^0E"J2Fϲ~)O!iH)+жbhjqxHMhrqd|( E)28 u@q9w/B1I^{8>|[n"@0q .bS3!{XĂp т),ކNU!gBָ08q5>qJdK:83gǑH$HHx$$666J$ $ :s Թ [sEJ3/nII1w"Rq:\rZHt 0.}ARx;|mzyg0ݼgG2wn&V\`*ufKb1k r>A h]\ s]D<ᡧs.\zQ10:T3N<6!^9<"`c#%|(-ڛHIc!}طayޛ̜uw#H`t}~ ^p&brPvn%ޔí8~|klw2qݱkkoFNӡ#8~o25+ Lac# W1"#(k|>BmUr:7hP (nm]$v$bU&x ӥ[e[ $KB>79`_/G17;XlUWVUcg}=;l4]9h3p빨L~`~nXL ;wcOCK(.HX 2@,? F󑟟Mɤ ,U*ELה%9ى̪ eR 0)U˴D ec9e2 Uə02L'(HJ⒣9rt]`DVtӴ 22eB)YO!APM:!eZ}aV% 'V綿)H<,uM)I%9!-*,n@tY.Th 3iE@t IEUuhJ 0rJ)Dd>!yJLy - 8 =I` fuw:ykaE0)mNn@@ ,^fZˬm,kCc$gZ!K4({PSLY]d2 ChkfnU'ʎ! P8d0rgÄ$.{=A'L0s+KWYV .$y:v %5" ڹhKeS1; dbhAD;`$A݅3v-ۼ$qǸtWTLCg%= 8~?=cϾ8}`ܖJ&8y4MÛK/rp"ihk?rrrA@[{sG$7OsgDr&'/cO``/ۇjvڎo׿1rs,D":Ur5TjE蚆Ʒ0;3_hk?D ?D$b`b| (^z+{HL]P&Qpq}dm"#${/r F|CEZvޓ78gddǎw`dxui'V`UL#е@m 0Abtpѽ&z'_r'y$]齆 |9kE@ך[CX̷S<qYaÑcbᵭ@XRI9jywb]y5 mgJ^Riɩވ\O̗̬Vh;)G,nߔ0lG7^t^x, H!a%'?h>tDWq8|G)𙚞O~^2*=Nwhho2YfrK;ɏ~ac3ux3Q+Ig8v ?vV$Z砀 zkZ4-r]x6Cmx7 &5_ez4~ 8E˭5$76PTR*nvo`c)zu |HsWq%S𶯭0-6|2)?H\#{,caBe7)mCN(I"ž 71˷qy X|6E{q֛P]So?wNs+)Z}c |͇}y*=Ɂ|+3(Mxj@2M.ȴ_\xgϰ +KNв hv׾;GテSg,.<VVQXPιPpTVU㷾ʪC[e׮oӗRYUbuu?_6a&@Fc)B!ٹ=s4P|sɵn)(8~dZ7%`a~e5UU/\:7zsG}ˤLC|6?2hZaOI60 `Ay&#N<-){JLJ=Sqey&bQ[Y -=,n<+Wf5 +׌H1$FʽHݯνpLr\mt?1WTs4~?7TPE^~&3MIQ&DXNy^w~;~2P:o[UtL2-Os3,L>Že8)2on-Lb}m 8 H pꪖ>ͧ,r]ʖqؤDܢΗ._Kgu^xVN6{ɧ瘄㟆zXrHdC#r2HIqFa 2+rjQڌ&}x:کr3_Z9TAIb ;O$$@LC8PSY J S@ 2Lr=AwZ{1:ewyerca\IH^Ac Y32$H&-Jx (Qt7\wƂ;'@Q=WtE7KyM=> Jarb2$gEܴ͸ WLuUҼSOtwj%50_h~ɢ; :B,|7^^qD ˻'iOW8ܜ,(Wu塪*L5f(4~i܄~=3>o]ʂsJ$"NBrcÊ7^1twRp,(ƻ X_h^;}6` +>!*a=E0Sb4 {kZibebD*ɬ\ Wo ꐷJْ#=-(?` q|bMb|}}=t2 m\DQ%5F[ 1<>j̶1`|0s;TnX]4D76JEenu̹+~5NkePZN ,ֵ⫫ n2QS.pL4LNk/tbԂ&%ҝzp;IfJ4̞32 [a6`i&B L\v/[X: ,V-DfC iJ,ں:`fz䱰D<~jrss "kC@p}vy]@ihJ<_fQIs]~gs~d9"9siL 6;GYgskiK&+svxw{/y=_ cJ(miןN{2w?+dϵϓ׊?+˨~cϏծwopOrhA+*PRRy[>i^AԸ;GY]S*s=nƼu{oɝ XX_2+5|\>s-µj,xBYl6+)*_Qޗ;cv cV4X5e }xWVr({(a6sښ;5 4{;Z|J)jQqdCB< "pkиM-=ۂIhdBWc<$bBnA!ko~>jy . ͂c]0ߋ)44@V!WL+|W<Ӂ>NM!fsA*<̠;GR>= D YzL)UU#Hf׻NҰj:]E873D\͏ 4` Red{2.*IwۍRõ>&Q^QGX AӅᡧa!:S]N`brr|G>d;V_߽D<|PڭcfrCw&:G#A0WdO:ɭcj)wjb m IDAT}s:N>#nSU#TGs*1GnA#wr|}}N#0DL=?ĭWʝEo/n_*\?Mz}O_j ٞGs}CڹY4n.kZjO]nIݝM$\댫7 8D< [\ *YaՒltrw[GLOG<y1Ŗ,QeIItS7p).  dC.'ϩSE@Q"Pu'3_o5<"6]qX\9NFۃo`wcʫ\C24ݠk'QPϦP[ꈟ] ja ZdIkUM-JS^yI~713=*nق,!cey ;*-6^܍pۛHL"99)))HIIArr2K غ}U|BCQn.]I:cqa i\&Pt/xx޺ܿ R827|҄ckrރeQr c}.!K._m-Jq)Rh>Hvs7E=|Ap 00io3=[7޸viC ˢh:rL$+!hl:={cO~g>xCǎ;q}SYS^`yq$832Wb6^^M|s "/s4Ih{U? u!lԫe @Zj*uuu(-)QkP]0L +N'o4Į( vׁ%b|޺jX$Y'9qη(hjD};Uk+ 󧔪4MoTpCyG?V$0PQ^,L=BwO`#t!7'))jՔ;a#U>$-PMɇEČ'Zc{k %DnFF&r 츪ih_hkmI,|}nZGk˃D~~ 62/D1EK h;FGFֆkאݻw!_CGa`BJJ }ru"ZG>Ѩqa#}~5(JD,3ar{{QUSYJ-ZYٞ0=OPS_ϙfΎljӅ:J`Q<3ع2#arzQUS l+՝b"wUհBEqixv?I>VTP"i-//#7Q> p!ˠEpŰwx&p닎k)e!99Y|""J([‚יWPN=cY,{518{(eGXrCc B,A>| 䎍$Liٜ^yܣ#K)%*@gJ9/h|Օe1XE˅PNge.m8ɫy錕1|ٟe4*^NRYۍGE{]ZYZ0(|>?ꉍ} 77;ec!薈¯cE~~^BwTLv%N.p Aa0셴׍o(Lj.ϼ .}9;³Eb*J&זn\! HG @ZZN3 焪7f Z#VLj}$6xH<)7&6)'WfeQYK"r)#ѐRIɥ/F*M0(u/NwKm6*~QrL+aks4Wn^(v8(\?Hn޺McZeQtN [mw4.:z'<URFs#>WiFNN.+5p<z @8ϳ cԉ[-vZh}p]rwi/`(I8"'`YZ] {qF Q'K)ɢtc'OZn]rw5őNBGl̉7ҪTGۻsOyI %D#J%,o|vCG2\t7lB`Q皺tHC+ڑǥX;w8é,N0 ܽp$y<{L0IIQ:mH"46gSS 0 X 9%C1LQ/+l°u{ FGGV#/}Q! g8bޝG cjruNžm+^Ӵ1<+GŶuMñqs^`Q}Nb[a҃][{;] {];hfX±e[!҃AGa09`sD![!Z99AMnW{ 5 >=͛6RMy٘磀$Mx_Ϟ=<"0VV /"%5 ~~ S<~fZiގE_kE", DsslBaVT9;?>>Q.ZicԲr)x!&B!tlڌ%(P<~_TTif'6OY G<ҲanVMOǦ[P\R(0 >>_ F/dDˆ#BG{zz0]\x0aF- HV8ET,w?0qqϞSZWo8;;0ߋq̋](,ށ*G1`LJݰ'#]Ӊq }N /ۊ3i`ą qˈeawU)XZe>S{hKˋ_O9I@PZV2YG155ɩI<# DM()p376@M`ˆRpB= ^mPVQʘ$:Ҥ㍼rtNPm'u#;3aqgGEU5+fU2E:iVwX\ f"v&1EEU ʅhs<~b9# Se&"FYEry/LB0y?˽yUYTZQ862DqUQdΣ"NC~%QRfzr޸^gm_p/088B 7/fdq'e΁(o(uArd4"x>; Z(#J-1;g>+|JCpǣB*e;nlMi\ jrieX7\i>aNՉ |>1Dvrlj0gz8b1&>J.FlMd+9a>X2(|Sȱ7q^y H|=\wVumn³Yq | ~Bg4_$BT ;J FFqE P4LW/]D$B ב72mw#B1\tpi;~#}`_ALO?7pW1>1[ شe+N:c;t'rz[7drjhDhtW/9zþ|<@x7\FDlތOb#h:xX~LMO7X n w3`}~|7_UXNANN8Yn͎2|T0:6,PFxjϞ=axg?x(5anv)))o`ld}:pg[ o(=<4' yy!hػ{) G&[g{ĉ̠2,/ `oa h:x sߟ@/~|t=>bbSS` 8`b6 /tI0q.^wʏ_sLgk`z,FGqس |x퍟bb|_Sm:Ņ9,߳hxu-hg5UX>F(xQ⛷n*6F\f^tڝii|xd(0H;dCݰ}ػI#a94r@:sՀGKIo7ScT#LeZZ# ]^Ll;:->:(LkKL抢D5xIe_Oc±z- G:@6l<8 zŽ(-R6]Y!=[WLkGrM;]OyLMMajrD4EѼ2}p{edfe\^|X^ZBEMsf闑o']{'9]>]}MSz%gŝFHT:x2_rBcN:u32pM|@P][{Bt5VfV} .Zڳfx^|{X^ZBeM51>t%n 'K;?vb̕&CsXY^FFV@&&Bs#'N"[XˮQFtOP,de\-O)LNN٫F(3ge(*.OM ⿞GӁCo S_O1IORğ$0;=`5w2S&ؑmh Wplۿfgg?kNyF.vSoh1BV,Qi>+uА&˱6U5a.ܸzu;wiu F)k߼v;wdCcNw7~ёa|}K| ůBeenٌܺzMO4ei-Q?yڎ9/%烤rXщb0ztFq+>HՄT atlTpY#Yf@\̱pP]oSdef4L`յUgBԖQufeC/1 ;<;L ƮZ9}8y9,//##+۞YgӉqr IDAT| N ;'שG ׺P4 k-ϕƜ$gt$7gqףvg'zH1\ۉcxZGs(<-,,<[ a?cpgYÍ;144Ju~_ˤ/ۋGX^Z|!&VFOVsrZ&?V]9IEe0?le .vVjB;[nP]5L>/}8R W{L;A7]L5mu0ً.:A4D)i|cJ <BM83=Vf/#-kV8yۖɜ4T LbG{ZtL\lyci5,Zj+ƮsMwTObsb #7bP$~HkA 1?c]>L6q̬2?+CBlϡ:w=#Y,ǔwb+Xezd:x&zu" B&i"vt An&0DQ{&,ӎČ{G:k1LUb$d#뚈d'=q2յ,yg̀sa(I&rFMn76cN8v>V1U%g< ɍN+&MwPótxxH3k9r*B|-c>CG#7;O:ۮ V`QB{e8]%g.mAsxT@Ըx@|;n5Y06c6Z[8ZwmџgZ0c@mOwh9Chd0@CV8^PKvJ9B.'D* e8sksFTCɓ'زe?Џ˗.ԩS_|_ll^sIL!,σ1Դ4`GI*k <ލMv0c۫`JQUSǿl Đk+]t8Vv=xhsBn PZ^]\.QPr Nc=DOW'ǜr 6mBIYjv bաLuOI4jokEoLa^s |W?{%JOlgF܎Oׄ'Dm Ӎ1MG+ Jii[fdb:9q,.iGaq *9S 1Mfhmbrh-GeU%\f+jR沜ݺŅ"%9iE>>:nܾьƦ3ldT `mgxζG5,,kr ܱ!t=w= $:Gqe,rAt?čWt(jw'|"NE\1ǭ-~2< 7^VrM)%WىAۖ:=+}n'LӀAL~r+If,:֫zzU'j/vE4cTxўǸ ,. r'B7 UU6+eiA M*$S$?~;t>DNV|۶1,.cg}X˝1ܸz w$99D @jj*$''ciiO::۷0  ,p{Ķ]7_t?LD)f v `g_pv;#i,,#G' {4`qaAP3HNIK'_5~2=Dff&&hIIIRy(;^ SiK嶶NQi|q;s3҅{r.,JqB%|҄ckrރeQr ; xކ٢ǎR m7׾6W;CM?LScsus^k6m,#DŽA)Qft]v_Kϩ 7[efdѣhntO`\ARR a6I'-55i 6TÒiFnn~V<wr[[#o&wgpi6?{gr޿MPW &RaC%y 죇p 6oBmn<Kqj$v[ sCNXN~1 vp}~a[Li\q34 Pf9Qk+ tw'kkܺ4dddRWI>C Ba"##))) +@K2~޾ &F8BIIl7^znQ 4lF,ReK&C3 \r^jQXVԊW/J\O@{oh R01woR["0| (H̲cR#N\oVWW_šCw૯а)CGa7ϧ!;A@܍u>`0YtZ ZrF3;Gϲ2ܭ`ff̠Q+((GM${^133h̢, jQ ?0ãM@{gggFWND,:sDK0`[qD:ACZ vy7c0 w;W^ƱGp.|}O\vw!%%I>uJ*)s%l4Uߏ‚E-q?gwWgtQ ٲ]:&ڲl8`īqtTx' ӭ6^'m9tD@_Ͷ`]ݭ2I2K,nf`kbODA PayyiiDqLNMR0CrrEIJ$rزҔRD"-&ˍq5Xbp%7460Q00.bFe"D)H䎍1pI=:X(L)G\k1-RC ;1BT`cZ|n">VV F D"-?n(JPhQ*cצԔ. /,(Q&gHٙY%L.$N%N. ` i,z!㫀91# .}!LxkK7A^n.E# --UCdv:#˲zc@Uq:|T .eC)Sn9紎J\E5c*ꍠ/.WbHWpʥ/F*M0(`|}MA!_\Mm`kpϮ#Nsu^U"a 8Ҩp,ź" -ds'7Hc2Hk rӅɨqEˀ"W3sɊĶ7M3Չ bmWRy8s ii W/8^H_"77Y9ANN@E+(@hdIIT^g[;([nf$ ġ2)ّH_à u{ iE( *sCHE<1INi~m޼}[X,x Bk;k"ۻu{Ӣ .n]Ν۹QoBh41iV*"VLwYaM iIYt$D2P0[Ʃ@iE%t'DnIiR|*ʹbP&_ehoKL{1% LOD"[\RjTiRQZRV-*.a4')(.)Eowb:3msjZ'zR{Tl3g^ƛo3gΠEXXXDOO/ܹý.(F iV{!0Vaſe#["VD( m:HB?I(VV!|~; gXU#=r\_LfsRx5uHܪ-8+w$>MX{3(9NHČo0ҊJ[@#+. )QcGYCH{%԰8*]WPFÈaBzzsXZZGmmm4?,..VVV EDŽ"BMb0)9Wg,9՟8&0?$RSSkn^qY`xm ##)))XYYҎc|KKKE(2ݰM ⫪cch}poCrwn@EU*]4DM_5Zq3!ۉ(nCrw54VJd 6嫶nFF ˭/at \jkv"4:{w7$~w*T?F[K.Vo(D(  JB`Z[6$%eZ*019w@1??gϞ)&))9{ʸev҃ӀeYXXX SRq1npLQbt4ɶn/B0ȪrSRSq䥓ݰϙ l0}>1p#y r8={HW̴1<+GŶuMñqjc^VZ*(Ŷ"3069vFa Cz q,hK֖mH16jt mR;6oن@zk?t5L bD"M@)>{!?C$J忰TarrϞarsOL^0M?Q+HEՁ~<a~nM(,ځҊ*g)l=F- !2'g",d_i3vC}~bVf'.OY G<ҲanVMOǦ[P\R(0 >>_ F?&h#0"(ކF'g*T.Xs8#bQ6>loAAt?0 |~|>ϞSZWo8;;0ߋq̋](,ށ*G1`LW%Ɉ~DkwW'tbB/"(:C,/`h,F, 5%t/A? E (? "Cbjj Sx&R'1G J+QRV f :g%KMN#J c0`P JW$ё&^^hX 2ל`L{QQU*6GLNlr7՝2x@DLc` cјr ߃XcYBLl f2,jUT)¤!> 3c8랅 %qmdPI @4o2L+)rpKZ-ͱC7r?Ξ%QTXUٌ,l90E4JtP\$0M!5cSv4jE4)P Jݠ|R- @q foJ4Joh9Sc",Ma`P:H)nub0` DŽ] q"0}1&>J.FlM C 9Q,>` g1ʼJqq^!af8Vumn³Yq | ~BgaU15=+`%]{044V\T\{ ܼ~Ub;y99j:uGe:,n ccaeMw<{ a>Ghׄiǯ\8?eDa}oB4v~"c=<4' yy!hػ{) G&[g{ĉ̠2,/ `oa h:x sߟ@/~|t=>K5SS` 8`b>ёa\8m<>^{㧘W{bqa++~b xQ繁1o.^T[Mf>@DS-^YFfV'%TԪ߉P<nf~yvIY ,Ή~{ܵU<=UPUpbBcߩ:eW]2xViĮ*Iey]!~c1|^~z 32pM|@P][{Bt5VfV} .Zڳm݌g`G%T*YJ^jrD- ,ܽs!Am.jaGx.\nB048O?>edde Y`b"O?>8r$nNBq5j{Rdgf!'+(-lY|OMarr>[i4Ȍ [?sQ0.y48$ 094$uNILMMbjj H]s)3ap gOA&_avvw{U;؝3OZȴfَM_k4^ŵɭEU5tw˨۹K۷e0JQU]+߹;&j\sP\S _8?;uhthȶvX,~uKee*+uwfkzQ/Hnو„텅?v>y+9$f1"%%%>QQx,O$ka '79(WR7S% ѱPygY\fs3=vgO0_>T+V&F !R[Q滃gLL*0Qa'CgzǙIP>wyC.y1Vsuk [1JW>CЧQ!TPN"'" sY٦yQDn2X̼u˲je;L6cZ/+z7S,`KГWQ-KXbA8v4rۃ68Џ= زuFF18ЏʚZJ*a$u[}mr{p(,Ɛ|޻XZ^BFV)Jpcez> F~|7O#30<4?}e끮/RL=tB#ưd\pA% >aaiiiHIMQxQϕNVOcq{~FNqhc>k8ڨy}a b1lǪd1~a[YX,yV όD_mi!8!h&SXGÉD"X^^F8}i DW`I45LU99[#'۪ :'gzn?\,l^կek<8Y9- &s>Xid5q_]/'SÑ|3XZZF߯(#W iO\4řkb;7\uhU7%<SܳpC5"f <BM83=Vf/#-kXL=Gm̉Np/hS џjp6^>8z)j$iu9`O=l8`}:" ?s[I?eZ&fF"8wojSbV {C1óYCRaݭBY !욦Dۣ;"B̙ܳɔlA"7G&:=z*qN]/Ĝi+%niK`)R4Mo_*'%$FA&0o^ X1ӻx"l“%X qUƠZXS ,ÑBgafK뒯6c¥Qg`nIENDB`lmms-1.1.3/plugins/monstro/fm_inactive.png000066400000000000000000000007441247673406200206600ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME2 fdtEXtCommentCreated with GIMPWLIDAT8˭1̮He#Xhk+X3h `# ̭vY9„I3gsND(0{JT`:""Ƙd9B'˲bs?kUVrߓ=!Ӊh4Z r$2izB`2g͆v|>EQPK$Iv4$*{fY!j)˥BZ!4`e<?I6l6I4MzOo%5oaZaED^Qt]nvmqi)9%wH)ǃb3uyy,e'yu˃n@ 7շ f"UIENDB`lmms-1.1.3/plugins/monstro/logo.png000066400000000000000000000101471247673406200173320ustar00rootroot00000000000000PNG  IHDR00WbKGDC pHYs  tIME- MtEXtCommentCreated with GIMPWIDAThޭ[WUco>׶;Jj\Vb$Т1p h" 'LH\TP@ Z(X8Hmz;ӽ.s1|ssN6Jvw]Ƙc?< 3PoͱvlnzwCpg׏IHYHcIHR=giŷ>sz .__'Ncg&o_Y'Ϲ҃ʫ`c!eR r"LeRI^8>ϟ)ϸ'^c/љ; >~P} xK`FGC]qu*DlDP{C\M7ʫ^{>ɎK.f"@}`;r1||wc|}[3 ]|^x^nu$wS1b@JȚpcO/wϲ=^p\^E\fll γ\sn]; ?s-B%泎9mr-.9/::6;!↩RpU)VN26\ *.&Oɞg#˾0Mf89"]nj9e$ y1͘mtllڜ1gc&̻Dp$ѩ"*0Ă%EK5K0L^A0Le_2UJ)ԩb0S]>;/ ]7'wskIuA]ij@V2 D %!'$榳*eh@֊ŴԢZV(lnm0fY2䌜!%$) R! pRqș d\ ,$g]ƭRpSƩ0[E"9CAH@JdȈk\b.H$oN #eRvtk1:Q]17j&iC$ƓH QIIè tRW!0NrSs)ޞHpq5c*;ׁ$jDg3Ҭ *9J+gVAvDZ/1.I[x[u 8 DdScI`¯3Ms9^9l#-B-x@'ጸ9ҜiM 76!A0AI !swVq:|u8"EJ%r&.#5Rݐ Kj 5mxk ^ӄ[Z]ȂAP< P!;0B&:$l3O*_e$N&Z,$2y7RpQJ<•"X"V$%A i8 )vR'j.{+ ,A)e .H㢸inI&-JM8-EDd/X8h`2N“%;up3rNBA,9r3n#Bm;0oQ.`GcE,;ݬbXm*ÉTY_un38;(;pf6Bp3gz 7E5E]ɿ8cdEXŢT&jQFu3+RH%S)z(Psԛlׯ?ŗUXt뀇nAD;{}5LpmfjXuad32Vt֪Q)00㫶to pGN=;CA,4,5r? \+y׾ [թX,{O!b c_X,ˁZW4%7h=."_Wds9ׁ﹝ǎvO?p y9;ɇU= g~{͍7=eitPQbd܃:O-*_m^w-wOU0>9zrXwIdjYow W׽htig ޏ8g~$7Сjcfq.vCs$2xeD̽d6t:ӡᙾ_>α x$IENDB`lmms-1.1.3/plugins/monstro/matview_active.png000066400000000000000000000037101247673406200213770ustar00rootroot00000000000000PNG  IHDR};pbKGD pHYs  tIME'[tEXtCommentCreated with GIMPW0IDATX[l2/$$q b4( $J#CKQ[JP-Z@jJjB҄ 㽄XDv7I;}囙5/UW7O~si/2??Okkk(oJc˖-XEN#9uJ1 2( |wn~H{Z㱤Wm/0g]$8Oxth, חh`\ss̽<,{˲8z(}}}1oJ=[L,$DϘ0W0gfp`\[+%P?e+L4Q"L>~HGZ~S37h4+]ma9H#m@,v:[f>X,/>L8['^ 3;Aƶ)LMs KKoqS /_swB7G j5dXFn:xKʉFɔg=0gccct:,"o8n9{1@vR9tu:TvM }'K 1<< L/9._=AD |[`?XzsїEТdbrS޽z_|_sK/I4n5VZ *(I>g~'%E3<<̥Ki6/088KoR| "4[ضڭj}ÇwDkSkHM۹ߝKcu;rK%tOR1I))}k0һ"A]rL~e1u+yvp)"+W}ȗラN_gS}pRi[G4>gNC)fy#dz'8;j nG9sjBVZ|Ra0[<|K^]!F݀k nOk1jD+y#jUƷZ1%2IW |.Z-u|l33iT.';xfn?9"g R]eWTB./j,x1YqFENb"c,-KbԓO=DY"K$`In&l; Nْj-Rth間ڱڸ-(jʰ> x@/ǪSV]/,k0$E%`_K5jTcOutSj/K 8Gr^ s]6+Snؠ@#%<_urŒ!g@T$UݓZyPX~,8WyH<0Ex3ْ^}])NC6|>x)IENDB`lmms-1.1.3/plugins/monstro/matview_inactive.png000066400000000000000000000027351247673406200217340ustar00rootroot00000000000000PNG  IHDR};pbKGD pHYs  tIME'#~ItEXtCommentCreated with GIMPWEIDATXKoW̃$NBI;- $ ]FlP lyTuU?]eAWH A@ET 'DB)@{]31QJ(H=sϹwF~l64M0RBUm;FWVcQ][Ƕq˶ClHI aSH޾}.Z瘃]h SG>r()6^nka9b뺜:u\eZRC!q&kkk?/Fw%suFGG{Q,YYY666x9JVE*bnn w܉bx,KKKeVWWYYYapp}VWWz*LW^Dž >ďi8]](9bYJP4 "&6۷{xGR!J9xu=`X[?%1f`4xh`hJ&6Aؖ^7EN`Xu\gzrZum# (1CTK_b"/qm -Xby4=$)檓>(1_Г9jM.xm$XQٷ{z(i_{Q QezrB5gʓf(J "'Or8}M@UFs@  JdY?.|IX{o&bd rݏ+xD8aIHl^tUn"ɭ%Bd}©_{ه-<Ͳٳg( \vO&{Tbqqro|Wˍh_*l v{G~ccL+}K \u8~{W 7"a;tď#q]EGQBムe|ƣG{%A-,JݿO^gO ,& q,Ulfq`-[XV>_LOOr<9ӹ>L M'fԎr8WLwpGn-{|z҅UQ,U\ebbOd +^3vb寗i4&{;LNMFxli;3=A[!Nr9.]8u7l2#mu?K|&\IENDB`lmms-1.1.3/plugins/monstro/mix_active.png000066400000000000000000000014101247673406200205130ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME2!vtEXtCommentCreated with GIMPWpIDAT8˝kA( Z[XX`G#X("b!X " hbvwݥv`2ؘKD0#P^5y +۴>wv- oS:{`q&sw. 􁠈s,}8ǯGp\HU ܓ,Mdhay,sjyD 30E]CćT~\;Me%*JZ9Ў]yW{,|J0e%ںۗphcERX`c ֟Jl/~QM%'˥{mibUAIf~͑q~BzFGGmÅ$s^>;f`yR:XYRwJ$vN$t6r}IXJ738"z:dXIfX!}[bIENDB`lmms-1.1.3/plugins/monstro/mix_inactive.png000066400000000000000000000007761247673406200210600ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME15I tEXtCommentCreated with GIMPWfIDAT8˭ͮ@EiBYXZxoc o $6"TNM)]՛\d2''_|VB4M;Bt:2L| J)+ _(CMӒK)^ш~eY ؏3͒@q8H)PJmuc4M\e\2)qOXl6R0X,ضMш?u]<5a֮jq:uu @>gp<vq>Ʉ\."ݎvrp8%fyT*TjT*Q.) H)hfvڔ-QJ1;@R+U0p{|b?ØwȥIENDB`lmms-1.1.3/plugins/monstro/moog.png000066400000000000000000000011271247673406200173310ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME $T2tEXtCommentCreated with GIMPWIDAT(u?oqy^Ֆ2rJD"B HDXLMK` SM4`@UC I>'sšLd~̦6\.n]iDȌ6UH`)ҫ,[,"f:aOoQ]4?%ul V",g(h4ڍ"ah򜪓F[.F:c Veȸv 2 dg>xgڈqj%&c,n%.y]72ňʙ0^Ij1ʕMG/kdFN(Ÿu >)Dx %]-_m<3J:'Le𬛖&&>[y8[U]1H LAtC6Z"]kkY .ޖfy$rkNvR#@xcMs#Ȝt~`WIENDB`lmms-1.1.3/plugins/monstro/noise.png000066400000000000000000000010631247673406200175040ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME 5_ttEXtCommentCreated with GIMPWIDAT(=ѽn\U> 9M@ Q!![ɏtP4D{ǜM1)^g/:9„!$~ n&a4ISj}i+"{_ΗV+߿h!v*a# M=Y+x,O Yf!=F4o9)[`\3 yʗ̦IENDB`lmms-1.1.3/plugins/monstro/opview_active.png000066400000000000000000000041211247673406200212310ustar00rootroot00000000000000PNG  IHDR};pbKGD pHYs  tIME&7}YtEXtCommentCreated with GIMPWIDATXKl\g؋(vj'3Ml) 7 %5JE%( ,tR%6U T!T<J'S%blgƾs{g&Alwa:g./pUJ#Efyyó~^ZsqI&ݻ͒ME'OhVjֶiS/_f҄1Uã'%`~xw&'01 99oj&ĉ8AMYнh/iX63$Sٸ˟6۶J% Zsij2zkU4ИۨOz/1M͖mk)Jd677{0=AS"BR3~a~OF{G;kkk f藙Sl[]]`c_=|_+{p;s?cnțݳݎ`>ϗ:[g( ?l.]]}Ņo>Ŷo5yr(3Ӝ8==(~=[87v_^jCFTP$h `;UEŎ+fT6Al)8h8EL>3ѥ@>(g&Z0\+'(fpZ <4fg8.XYY#lzJ[ݜf|_Пrj"+q4fi\3|jxIbq&\zBNST.@O P!>KAz%CnC5 ކeX%֢u͂tRȭkHlhV4`2A= `dթ~]/kIRgsI"&nBһ]R'q%9 ć L6n"=7;.L RHSp'L`:gv'$?8ɱ=jY]mlouZ7P4V?ԯJJ1105ܟFTl6˿BȤªGIENDB`lmms-1.1.3/plugins/monstro/opview_inactive.png000066400000000000000000000027571247673406200215750ustar00rootroot00000000000000PNG  IHDR};pbKGD pHYs  tIME','T7tEXtCommentCreated with GIMPWWIDATXoG?F 0$"q "qgʅ O^zQ!  q*&-d;!8kǞvwv#Rȓ6Z潙Ͽf{n^#:d\TAv(.}Ka `z}0= Q첽M% :Q)13S`kݘ aESE9s}ۧPN7/Oܻwcǎ1\|wq}ܹs\r]n߾"kh4<|{=zz͛7m>BeVVV&jNX,47{>;L< :xƍ<{j UEU Y^7o8rDєDQ{F8|;;;qLݦP(P.)Z4[,--%~ŢF,@%$'& ]{-/,"j0gm} $YPR4XIfZ/fbKHv;{&#"yIdp)2*?4=kٙ"o2P*(I ȍ8v2fUZY&Ԇ]d(ɂRxU\z8x-zJMcV>.'7ҍ*[ p.o!Vr>ϯ{|QIhA%gӂ)_f*xs%>jc4ƭ&~Lc#^( N pOM3Aj>Ugc7~>yk!܂lۘsh%s/A&& 8I *N'T*-ooS,s~H}3S^v<Ɵpn<.vv;;?mR4NF޽= no-t Q)DP#N}m.^8qOs;/vue7BwA`}9 ({{}SuIENDB`lmms-1.1.3/plugins/monstro/pm_active.png000066400000000000000000000013241247673406200203360ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME21tEXtCommentCreated with GIMPWf%N(ß0@@F]<KÔ,綾t:ab9?{ < C==y2Bc •L>5$d~[.@DHnmRlkBЇժ=H/|2 "켛Gn8s/"z߿)cH řT_e 6bd\~P5D0>E^;wPMQ&?d)aYX7 qM_?#ƐVS Mq`)UV]cəYω1VإKVhZ{XhXYU%Zx83аTċ G0ZYJXڪ PT>-Ͱ+!S$%$ H`]kJR<8.g]8IENDB`lmms-1.1.3/plugins/monstro/pm_inactive.png000066400000000000000000000007411247673406200206670ustar00rootroot00000000000000PNG  IHDRUbKGD-M~ pHYs  tIME2{QtEXtCommentCreated with GIMPWIIDAT8˥@]7 B K^!N4baE49%)0eU R~"t0LZ-vs7 T&"Ng򗖳l6kgZ-np8D:i\З #J)1~0 $IZKE[6ưncroZ2ze:)9^t:!"q瓖MV1JPV ÐB!P>MfZyJwt]$lS}ywSGnKbe>Od%PqK\ӽ.&Z5rIENDB`lmms-1.1.3/plugins/monstro/ramp.png000066400000000000000000000010101247673406200173160ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME ԳMtEXtCommentCreated with GIMPWpIDAT(uҽKqޫ!fSCXnTkKkE .FDmRC[Y>}Xyϛ9sbs.FҫFxN36|)a_@dAīCٕTj'ʮX6Dc!LX-&BC@ns܇O^w~:! "4Ɍ0ѱj[Jr|Q]Ez-eRq,P|n[%[hϴ S!J40 5|IENDB`lmms-1.1.3/plugins/monstro/saw.png000066400000000000000000000010211247673406200171530ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME 3Z6tEXtCommentCreated with GIMPWyIDAT(υjTawΗ5f`k,$ 6!$!i% DDK/  7B N?lٳk 'yFf޹h焂[+q$a?BZK(ZLX\?/0!%,sa8e7RYSlE俨j8kq}|Tʌ%(9lOnJ&uׂUoY?/0}*ݹ޲Nɶ`f QƗN-P݆( ?0a[SvA xҭ#k ڡtZj*%؂a}P~4-'2mFfXRR=|ͺYa[ՙ“b{2G `G.J4G5PbW 8L t4c2؛Rbޜ {gOTo2&*z]k9dѸ}_IENDB`lmms-1.1.3/plugins/monstro/sinabs.png000066400000000000000000000007241247673406200176510ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME XnPtEXtCommentCreated with GIMPWZdGY4ϴ^L8K8uz>`OZO-ꟖR>rP/+? B6O.IENDB`lmms-1.1.3/plugins/monstro/sqr.png000066400000000000000000000006531247673406200172000ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME letEXtCommentCreated with GIMPWIDAT(ϝANTa#L X15<0[0$F {` BuuUuup*_}V" 2Xxfz*"jC׀L~羚e:GUB^"wRuo"藝 !' ^iL%xvss͛tJ /2M&鑱7mZ7,ч羯5UUZж:Z@mۻS77?~|JŃ6:p͏SIeq\7'Z6!IENDB`lmms-1.1.3/plugins/monstro/sqrsoft.png000066400000000000000000000010331247673406200200650ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME -tEXtCommentCreated with GIMPWIDAT(ύҿjTa|!'("VB o;SZxN D$JsfwfyggGV14«to\шH3r1.pu6v_hgiY-Gqk^c>1;D"l 3|қiYR@ih'=T!)Kd,c1C .~uYJrgpi\+=RAiE|?=SZ_v6*&S(ic8lb;wwr뭪9逿4 d9TڞMϓut IVtƞbp')pN:2WZt~bEilÙqw"^2FKB?;IENDB`lmms-1.1.3/plugins/monstro/tinyled_off.png000066400000000000000000000006151247673406200206730ustar00rootroot00000000000000PNG  IHDR&ӥbKGD)M{Ӣo pHYs  tIME3tEXtCommentCreated with GIMPWIDATӥj@;Zh$+5!jf;WوGL.9zLmPm|?"ֻ R)%Z8hf0 v}ZxTUc Qe,(e뺮ILe?p8`Y){t"_4 0']׽gYf3'\-(W`% 82Nk.Rj ́^4M yIENDB`lmms-1.1.3/plugins/monstro/tinyled_on.png000066400000000000000000000011221247673406200205270ustar00rootroot00000000000000PNG  IHDR&ӥbKGD)M{Ӣo pHYs  tIMEm)tEXtCommentCreated with GIMPWIDATkA;7{|3P$R,4@ ڈhc'^H.;\kvfgj.툚VjMآEjq@0EQ*T$TIh:*9+=ױ3PZ4Q9 ( 0~zEi=Z;6Vr,삇8I`/wN/wٹ &"sk`о(> %~fg Z3  0J4-Z)h2kS>9 \D#,]xs-R"OK {H.tnz[ϻoFI 3rTN,M!S{x2H=;9x,mqzݲsF( cti8b$ 3J>{II`IENDB`lmms-1.1.3/plugins/monstro/tri.png000066400000000000000000000011321247673406200171620ustar00rootroot00000000000000PNG  IHDR ?#EwbKGDC pHYs  tIME  ޯtEXtCommentCreated with GIMPWIDAT(]=KxsPNp"Eȡ_9hhZܕ iDn.˟+d=cУ H/>}|k`=ZB#F?S;բB(.\0W\(̘ӈlɁ:QӐPKM#<Npr;Kͪʌi0HK؊ [ahN_틪+SZ kҲMaGZVXNiU]QWB[+Yf%p33ɂ~%= cA{+!ŭJn3`W:!Ÿ᮴%aK}`a^⯐Nτee:>USu΃M )\)Qh¨[IVr4a3b!%t؟3W9:JGI)hO7Oқt\y3IENDB`lmms-1.1.3/plugins/nes/000077500000000000000000000000001247673406200147455ustar00rootroot00000000000000lmms-1.1.3/plugins/nes/CMakeLists.txt000066400000000000000000000001741247673406200175070ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(nes Nes.cpp Nes.h MOCFILES Nes.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/nes/Nes.cpp000066400000000000000000000635701247673406200162110ustar00rootroot00000000000000/* Nes.cpp - A NES instrument plugin for LMMS * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "Nes.h" #include "engine.h" #include "InstrumentTrack.h" #include "templates.h" #include "tooltip.h" #include "song.h" #include "lmms_math.h" #include "interpolation.h" #include "Oscillator.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT nes_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Nescaline", QT_TRANSLATE_NOOP( "pluginBrowser", "A NES-like synthesizer" ), "Vesa Kivimäki ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } NesObject::NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph ) : m_parent( nes ), m_samplerate( samplerate ), m_nph( nph ) { m_pitchUpdateCounter = 0; m_pitchUpdateFreq = wavelength( 60.0f ); m_LFSR = LFSR_INIT; m_ch1Counter = 0; m_ch2Counter = 0; m_ch3Counter = 0; m_ch4Counter = 0; m_ch1EnvCounter = 0; m_ch2EnvCounter = 0; m_ch4EnvCounter = 0; m_ch1EnvValue = 15; m_ch2EnvValue = 15; m_ch4EnvValue = 15; m_ch1SweepCounter = 0; m_ch2SweepCounter = 0; m_ch4SweepCounter = 0; m_12Last = 0.0f; m_34Last = 0.0f; m_maxWlen = wavelength( MIN_FREQ ); m_nsf = NES_SIMPLE_FILTER * ( m_samplerate / 44100.0 ); m_lastNoteFreq = 0; m_lastNoiseFreq = -1.0f; // value that is always different than noisefreq so it gets updated at start m_vibratoPhase = 0; updatePitch(); } NesObject::~NesObject() { } void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) { //////////////////////////////// // // // variables for processing // // // //////////////////////////////// bool ch1Enabled = m_parent->m_ch1Enabled.value(); bool ch2Enabled = m_parent->m_ch2Enabled.value(); bool ch3Enabled = m_parent->m_ch3Enabled.value(); bool ch4Enabled = m_parent->m_ch4Enabled.value(); float ch1DutyCycle = DUTY_CYCLE[ m_parent->m_ch1DutyCycle.value() ]; int ch1EnvLen = wavelength( floorf( 240.0 / ( m_parent->m_ch1EnvLen.value() + 1 ) ) ); bool ch1EnvLoop = m_parent->m_ch1EnvLooped.value(); float ch2DutyCycle = DUTY_CYCLE[ m_parent->m_ch2DutyCycle.value() ]; int ch2EnvLen = wavelength( floorf( 240.0 / ( m_parent->m_ch2EnvLen.value() + 1 ) ) ); bool ch2EnvLoop = m_parent->m_ch2EnvLooped.value(); int ch4EnvLen = wavelength( floorf( 240.0 / ( m_parent->m_ch4EnvLen.value() + 1 ) ) ); bool ch4EnvLoop = m_parent->m_ch4EnvLooped.value(); // processing variables for operators int ch1; int ch2; int ch3; int ch4; // levels for generators (used for dc offset compensation) int ch1Level; int ch2Level; int ch3Level; int ch4Level; int ch1SweepRate = wavelength( floorf( 120.0 / ( m_parent->m_ch1SweepRate.value() + 1 ) ) ); int ch2SweepRate = wavelength( floorf( 120.0 / ( m_parent->m_ch2SweepRate.value() + 1 ) ) ); int ch4SweepRate = wavelength( floorf( 60.0f / ( 8.0f - qAbs( m_parent->m_ch4Sweep.value() ) ) ) ); int ch1Sweep = static_cast( m_parent->m_ch1SweepAmt.value() * -1.0 ); int ch2Sweep = static_cast( m_parent->m_ch2SweepAmt.value() * -1.0 ); int ch4Sweep = 0; if( m_parent->m_ch4Sweep.value() != 0.0f ) { ch4Sweep = m_parent->m_ch4Sweep.value() > 0.0f ? -1 : 1; } // the amounts are inverted so we correct them here if( ch1Sweep > 0 ) { ch1Sweep = 8 - ch1Sweep; } if( ch1Sweep < 0 ) { ch1Sweep = -8 - ch1Sweep; } if( ch2Sweep > 0 ) { ch2Sweep = 8 - ch2Sweep; } if( ch2Sweep < 0 ) { ch2Sweep = -8 - ch2Sweep; } // start framebuffer loop for( f_cnt_t f = 0; f < frames; f++ ) { //////////////////////////////// // // // pitch update // // // //////////////////////////////// m_pitchUpdateCounter++; if( m_pitchUpdateCounter >= m_pitchUpdateFreq ) { updatePitch(); m_pitchUpdateCounter = 0; } //////////////////////////////// // // // channel 1 // // // //////////////////////////////// // render pulse wave if( m_wlen1 <= m_maxWlen && m_wlen1 >= MIN_WLEN && ch1Enabled ) { ch1Level = m_parent->m_ch1EnvEnabled.value() ? static_cast( ( m_parent->m_ch1Volume.value() * m_ch1EnvValue ) / 15.0 ) : static_cast( m_parent->m_ch1Volume.value() ); ch1 = m_ch1Counter > m_wlen1 * ch1DutyCycle ? 0 : ch1Level; } else ch1 = ch1Level = 0; // update sweep m_ch1SweepCounter++; if( m_ch1SweepCounter >= ch1SweepRate ) { m_ch1SweepCounter = 0; if( m_parent->m_ch1SweepEnabled.value() && m_wlen1 <= m_maxWlen && m_wlen1 >= MIN_WLEN ) { // check if the sweep goes up or down if( ch1Sweep > 0 ) { m_wlen1 += m_wlen1 >> qAbs( ch1Sweep ); } if( ch1Sweep < 0 ) { m_wlen1 -= m_wlen1 >> qAbs( ch1Sweep ); m_wlen1--; // additional minus 1 for ch1 only } } } // update framecounters m_ch1Counter++; m_ch1Counter = m_wlen1 ? m_ch1Counter % m_wlen1 : 0; m_ch1EnvCounter++; if( m_ch1EnvCounter >= ch1EnvLen ) { m_ch1EnvCounter = 0; m_ch1EnvValue--; if( m_ch1EnvValue < 0 ) { m_ch1EnvValue = ch1EnvLoop ? 15 : 0; } } //////////////////////////////// // // // channel 2 // // // //////////////////////////////// // render pulse wave if( m_wlen2 <= m_maxWlen && m_wlen2 >= MIN_WLEN && ch2Enabled ) { ch2Level = m_parent->m_ch2EnvEnabled.value() ? static_cast( ( m_parent->m_ch2Volume.value() * m_ch2EnvValue ) / 15.0 ) : static_cast( m_parent->m_ch2Volume.value() ); ch2 = m_ch2Counter > m_wlen2 * ch2DutyCycle ? 0 : ch2Level; } else ch2 = ch2Level = 0; // update sweep m_ch2SweepCounter++; if( m_ch2SweepCounter >= ch2SweepRate ) { m_ch2SweepCounter = 0; if( m_parent->m_ch2SweepEnabled.value() && m_wlen2 <= m_maxWlen && m_wlen2 >= MIN_WLEN ) { // check if the sweep goes up or down if( ch2Sweep > 0 ) { m_wlen2 += m_wlen2 >> qAbs( ch2Sweep ); } if( ch2Sweep < 0 ) { m_wlen2 -= m_wlen2 >> qAbs( ch2Sweep ); } } } // update framecounters m_ch2Counter++; m_ch2Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; m_ch2EnvCounter++; if( m_ch2EnvCounter >= ch2EnvLen ) { m_ch2EnvCounter = 0; m_ch2EnvValue--; if( m_ch2EnvValue < 0 ) { m_ch2EnvValue = ch2EnvLoop ? 15 : 0; } } //////////////////////////////// // // // channel 3 // // // //////////////////////////////// // make sure we don't overflow m_ch3Counter = m_wlen3 ? m_ch3Counter % m_wlen3 : 0; // render triangle wave if( m_wlen3 <= m_maxWlen && ch3Enabled ) { ch3Level = static_cast( m_parent->m_ch3Volume.value() ); ch3 = m_wlen3 ? TRIANGLE_WAVETABLE[ ( m_ch3Counter * 32 ) / m_wlen3 ] : 0; ch3 = ( ch3 * ch3Level ) / 15; } else ch3 = ch3Level = 0; m_ch3Counter++; //////////////////////////////// // // // channel 4 // // // //////////////////////////////// // render pseudo noise if( ch4Enabled ) { ch4Level = m_parent->m_ch4EnvEnabled.value() ? ( static_cast( m_parent->m_ch4Volume.value() ) * m_ch4EnvValue ) / 15 : static_cast( m_parent->m_ch4Volume.value() ); ch4 = LFSR() ? ch4Level : 0; } else ch4 = ch4Level = 0; // update framecounters m_ch4Counter++; if( m_ch4Counter >= m_wlen4 ) { m_ch4Counter = 0; updateLFSR( m_parent->m_ch4NoiseMode.value() ); } m_ch4EnvCounter++; if( m_ch4EnvCounter >= ch4EnvLen ) { m_ch4EnvCounter = 0; m_ch4EnvValue--; if( m_ch4EnvValue < 0 ) { m_ch4EnvValue = ch4EnvLoop ? 15 : 0; } } m_ch4SweepCounter++; if( m_ch4SweepCounter >= ch4SweepRate ) { m_ch4SweepCounter = 0; if( ch4Sweep != 0 ) { int freqN = nearestNoiseFreq( static_cast( m_samplerate ) / m_wlen4 ); freqN = qBound( 0, freqN + ch4Sweep, 15 ); m_wlen4 = wavelength( NOISE_FREQS[ freqN ] ); if( m_wlen4 == 0 && ch4Sweep == 1 ) // a workaround for sweep getting stuck on 0 wavelength { while( m_wlen4 == 0 ) { m_wlen4 = wavelength( NOISE_FREQS[ ++freqN ] ); } } } } //////////////////////////////// // // // final stage - mixing // // // //////////////////////////////// float pin1 = static_cast( ch1 + ch2 ); // add dithering noise pin1 *= 1.0 + ( Oscillator::noiseSample( 0.0f ) * DITHER_AMP ); pin1 = pin1 / 30.0f; pin1 = signedPow( pin1, NES_DIST ); pin1 = pin1 * 2.0f - 1.0f; // simple first order iir filter, to simulate the frequency response falloff in nes analog audio output pin1 = linearInterpolate( pin1, m_12Last, m_nsf ); m_12Last = pin1; // compensate DC offset pin1 += 1.0f - signedPow( static_cast( ch1Level + ch2Level ) / 30.0f, NES_DIST ); pin1 *= NES_MIXING_12; float pin2 = static_cast( ch3 + ch4 ); // add dithering noise pin2 *= 1.0 + ( Oscillator::noiseSample( 0.0f ) * DITHER_AMP ); pin2 = pin2 / 30.0f; pin2 = signedPow( pin2, NES_DIST ); pin2 = pin2 * 2.0f - 1.0f; // simple first order iir filter, to simulate the frequency response falloff in nes analog audio output pin2 = linearInterpolate( pin2, m_34Last, m_nsf ); m_34Last = pin2; // compensate DC offset pin2 += 1.0f - signedPow( static_cast( ch3Level + ch4Level ) / 30.0f, NES_DIST ); pin2 *= NES_MIXING_34; const float mixdown = ( pin1 + pin2 ) * NES_MIXING_ALL * m_parent->m_masterVol.value(); buf[f][0] = mixdown; buf[f][1] = mixdown; } // end framebuffer loop } void NesObject::updateVibrato( float * freq ) { float vibratoAmt = floorf( m_parent->m_vibrato.value() ) / 15.0f; m_vibratoPhase++; m_vibratoPhase %= 32; float vibratoRatio = 1.0f + ( static_cast( TRIANGLE_WAVETABLE[ m_vibratoPhase ] ) * 0.02f * vibratoAmt ); *freq *= vibratoRatio; } void NesObject::updatePitch() { float freq = m_nph->frequency(); // if vibrato is active, update vibrato if( m_parent->m_vibrato.value() > 0 ) { updateVibrato( &freq ); } // check if frequency has changed, if so, update wavelengths of ch1-3 if( freq != m_lastNoteFreq ) { m_wlen1 = wavelength( freq * m_parent->m_freq1 ); m_wlen2 = wavelength( freq * m_parent->m_freq2 ); m_wlen3 = wavelength( freq * m_parent->m_freq3 ); } // noise channel can use either note freq or preset freqs if( m_parent->m_ch4NoiseFreqMode.value() && freq != m_lastNoteFreq ) { float f = freq * 2.0f; if( m_parent->m_ch4NoiseQuantize.value() ) // note freq can be quantized to the preset freqs { f = NOISE_FREQS[ nearestNoiseFreq( f ) ]; } m_wlen4 = wavelength( f ); } if( ! m_parent->m_ch4NoiseFreqMode.value() && m_lastNoiseFreq != m_parent->m_ch4NoiseFreq.value() ) { m_wlen4 = wavelength( NOISE_FREQS[ 15 - static_cast( m_parent->m_ch4NoiseFreq.value() ) ] ); m_lastNoiseFreq = m_parent->m_ch4NoiseFreq.value(); } m_lastNoteFreq = freq; } NesInstrument::NesInstrument( InstrumentTrack * instrumentTrack ) : Instrument( instrumentTrack, &nes_plugin_descriptor ), m_ch1Enabled( true, this ), m_ch1Crs( 0.f, -24.f, 24.f, 1.f, this, tr( "Channel 1 Coarse detune" ) ), m_ch1Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 1 Volume" ) ), m_ch1EnvEnabled( false, this ), m_ch1EnvLooped( false, this ), m_ch1EnvLen( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 1 Envelope length" ) ), m_ch1DutyCycle( 0, 0, 3, this, tr( "Channel 1 Duty cycle" ) ), m_ch1SweepEnabled( false, this ), m_ch1SweepAmt( 0.f, -7.f, 7.f, 1.f, this, tr( "Channel 1 Sweep amount" ) ), m_ch1SweepRate( 0.f, 0.f, 7.f, 1.f, this, tr( "Channel 1 Sweep rate" ) ), m_ch2Enabled( true, this ), m_ch2Crs( 0.f, -24.f, 24.f, 1.f, this, tr( "Channel 2 Coarse detune" ) ), m_ch2Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 2 Volume" ) ), m_ch2EnvEnabled( false, this ), m_ch2EnvLooped( false, this ), m_ch2EnvLen( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 2 Envelope length" ) ), m_ch2DutyCycle( 2, 0, 3, this, tr( "Channel 2 Duty cycle" ) ), m_ch2SweepEnabled( false, this ), m_ch2SweepAmt( 0.f, -7.f, 7.f, 1.f, this, tr( "Channel 2 Sweep amount" ) ), m_ch2SweepRate( 0.f, 0.f, 7.f, 1.f, this, tr( "Channel 2 Sweep rate" ) ), //channel 3 m_ch3Enabled( true, this ), m_ch3Crs( 0.f, -24.f, 24.f, 1.f, this, tr( "Channel 3 Coarse detune" ) ), m_ch3Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 3 Volume" ) ), //channel 4 m_ch4Enabled( true, this ), m_ch4Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Volume" ) ), m_ch4EnvEnabled( false, this ), m_ch4EnvLooped( false, this ), m_ch4EnvLen( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Envelope length" ) ), m_ch4NoiseMode( false, this ), m_ch4NoiseFreqMode( false, this ), m_ch4NoiseFreq( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Noise frequency" ) ), m_ch4Sweep( 0.f, -7.f, 7.f, 1.f, this, tr( "Channel 4 Noise frequency sweep" ) ), m_ch4NoiseQuantize( true, this ), //master m_masterVol( 1.0f, 0.0f, 2.0f, 0.01f, this, tr( "Master volume" ) ), m_vibrato( 0.0f, 0.0f, 15.0f, 1.0f, this, tr( "Vibrato" ) ) { connect( &m_ch1Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) ); connect( &m_ch2Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) ); connect( &m_ch3Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq3() ) ); updateFreq1(); updateFreq2(); updateFreq3(); } NesInstrument::~NesInstrument() { } void NesInstrument::playNote( NotePlayHandle * n, sampleFrame * workingBuffer ) { if ( n->totalFramesPlayed() == 0 || n->m_pluginData == NULL ) { NesObject * nes = new NesObject( this, engine::mixer()->processingSampleRate(), n ); n->m_pluginData = nes; } const fpp_t frames = n->framesLeftForCurrentPeriod(); NesObject * nes = static_cast( n->m_pluginData ); nes->renderOutput( workingBuffer, frames ); applyRelease( workingBuffer, n ); instrumentTrack()->processAudioBuffer( workingBuffer, frames, n ); } void NesInstrument::deleteNotePluginData( NotePlayHandle * n ) { delete static_cast( n->m_pluginData ); } void NesInstrument::saveSettings( QDomDocument & doc, QDomElement & element ) { m_ch1Enabled.saveSettings( doc, element, "on1" ); m_ch1Crs.saveSettings( doc, element, "crs1" ); m_ch1Volume.saveSettings( doc, element, "vol1" ); m_ch1EnvEnabled.saveSettings( doc, element, "envon1" ); m_ch1EnvLooped.saveSettings( doc, element, "envloop1" ); m_ch1EnvLen.saveSettings( doc, element, "envlen1" ); m_ch1DutyCycle.saveSettings( doc, element, "dc1" ); m_ch1SweepEnabled.saveSettings( doc, element, "sweep1" ); m_ch1SweepAmt.saveSettings( doc, element, "swamt1" ); m_ch1SweepRate.saveSettings( doc, element, "swrate1" ); // channel 2 m_ch2Enabled.saveSettings( doc, element, "on2" ); m_ch2Crs.saveSettings( doc, element, "crs2" ); m_ch2Volume.saveSettings( doc, element, "vol2" ); m_ch2EnvEnabled.saveSettings( doc, element, "envon2" ); m_ch2EnvLooped.saveSettings( doc, element, "envloop2" ); m_ch2EnvLen.saveSettings( doc, element, "envlen2" ); m_ch2DutyCycle.saveSettings( doc, element, "dc2" ); m_ch2SweepEnabled.saveSettings( doc, element, "sweep2" ); m_ch2SweepAmt.saveSettings( doc, element, "swamt2" ); m_ch2SweepRate.saveSettings( doc, element, "swrate2" ); //channel 3 m_ch3Enabled.saveSettings( doc, element, "on3" ); m_ch3Crs.saveSettings( doc, element, "crs3" ); m_ch3Volume.saveSettings( doc, element, "vol3" ); //channel 4 m_ch4Enabled.saveSettings( doc, element, "on4" ); m_ch4Volume.saveSettings( doc, element, "vol4" ); m_ch4EnvEnabled.saveSettings( doc, element, "envon4" ); m_ch4EnvLooped.saveSettings( doc, element, "envloop4" ); m_ch4EnvLen.saveSettings( doc, element, "envlen4" ); m_ch4NoiseMode.saveSettings( doc, element, "nmode4" ); m_ch4NoiseFreqMode.saveSettings( doc, element, "nfrqmode4" ); m_ch4NoiseFreq.saveSettings( doc, element, "nfreq4" ); m_ch4NoiseQuantize.saveSettings( doc, element, "nq4" ); m_ch4Sweep.saveSettings( doc, element, "nswp4" ); //master m_masterVol.saveSettings( doc, element, "vol" ); m_vibrato.saveSettings( doc, element, "vibr" ); } void NesInstrument::loadSettings( const QDomElement & element ) { m_ch1Enabled.loadSettings( element, "on1" ); m_ch1Crs.loadSettings( element, "crs1" ); m_ch1Volume.loadSettings( element, "vol1" ); m_ch1EnvEnabled.loadSettings( element, "envon1" ); m_ch1EnvLooped.loadSettings( element, "envloop1" ); m_ch1EnvLen.loadSettings( element, "envlen1" ); m_ch1DutyCycle.loadSettings( element, "dc1" ); m_ch1SweepEnabled.loadSettings( element, "sweep1" ); m_ch1SweepAmt.loadSettings( element, "swamt1" ); m_ch1SweepRate.loadSettings( element, "swrate1" ); // channel 2 m_ch2Enabled.loadSettings( element, "on2" ); m_ch2Crs.loadSettings( element, "crs2" ); m_ch2Volume.loadSettings( element, "vol2" ); m_ch2EnvEnabled.loadSettings( element, "envon2" ); m_ch2EnvLooped.loadSettings( element, "envloop2" ); m_ch2EnvLen.loadSettings( element, "envlen2" ); m_ch2DutyCycle.loadSettings( element, "dc2" ); m_ch2SweepEnabled.loadSettings( element, "sweep2" ); m_ch2SweepAmt.loadSettings( element, "swamt2" ); m_ch2SweepRate.loadSettings( element, "swrate2" ); //channel 3 m_ch3Enabled.loadSettings( element, "on3" ); m_ch3Crs.loadSettings( element, "crs3" ); m_ch3Volume.loadSettings( element, "vol3" ); //channel 4 m_ch4Enabled.loadSettings( element, "on4" ); m_ch4Volume.loadSettings( element, "vol4" ); m_ch4EnvEnabled.loadSettings( element, "envon4" ); m_ch4EnvLooped.loadSettings( element, "envloop4" ); m_ch4EnvLen.loadSettings( element, "envlen4" ); m_ch4NoiseMode.loadSettings( element, "nmode4" ); m_ch4NoiseFreqMode.loadSettings( element, "nfrqmode4" ); m_ch4NoiseFreq.loadSettings( element, "nfreq4" ); m_ch4NoiseQuantize.loadSettings( element, "nq4" ); m_ch4Sweep.loadSettings( element, "nswp4" ); //master m_masterVol.loadSettings( element, "vol" ); m_vibrato.loadSettings( element, "vibr" ); } QString NesInstrument::nodeName() const { return( nes_plugin_descriptor.name ); } PluginView * NesInstrument::instantiateView( QWidget * parent ) { return( new NesInstrumentView( this, parent ) ); } void NesInstrument::updateFreq1() { m_freq1 = powf( 2, m_ch1Crs.value() / 12.0f ); } void NesInstrument::updateFreq2() { m_freq2 = powf( 2, m_ch2Crs.value() / 12.0f ); } void NesInstrument::updateFreq3() { m_freq3 = powf( 2, m_ch3Crs.value() / 12.0f ); } QPixmap * NesInstrumentView::s_artwork = NULL; NesInstrumentView::NesInstrumentView( Instrument * instrument, QWidget * parent ) : InstrumentView( instrument, parent ) { setAutoFillBackground( true ); QPalette pal; if( s_artwork == NULL ) { s_artwork = new QPixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) ); } pal.setBrush( backgroundRole(), *s_artwork ); setPalette( pal ); const int KNOB_Y1 = 24; const int KNOB_Y2 = 81; const int KNOB_Y3 = 138; const int KNOB_Y4 = 195; const int KNOB_X1 = 12; const int KNOB_X2 = 46; const int KNOB_X3 = 84; const int KNOB_X4 = 117; const int KNOB_X5 = 151; const int KNOB_X6 = 172; const int KNOB_X7 = 206; // channel 1 makeknob( m_ch1VolumeKnob, KNOB_X1, KNOB_Y1, "Volume", "", "" ) makeknob( m_ch1CrsKnob, KNOB_X2, KNOB_Y1, "Coarse detune", "", "" ) makeknob( m_ch1EnvLenKnob, KNOB_X3, KNOB_Y1, "Envelope length", "", "" ) makenesled( m_ch1EnabledBtn, KNOB_X1, KNOB_Y1 - 12, "Enable channel 1" ) makenesled( m_ch1EnvEnabledBtn, KNOB_X3, KNOB_Y1 - 12, "Enable envelope 1" ) makenesled( m_ch1EnvLoopedBtn, 129, KNOB_Y1 - 12, "Enable envelope 1 loop" ) makenesled( m_ch1SweepEnabledBtn, KNOB_X6, KNOB_Y1 - 12, "Enable sweep 1" ) makeknob( m_ch1SweepAmtKnob, KNOB_X6, KNOB_Y1, "Sweep amount", "", "" ) makeknob( m_ch1SweepRateKnob, KNOB_X7, KNOB_Y1, "Sweep rate", "", "" ) int dcx = 117; makedcled( ch1_dc1, dcx, 42, "12.5% Duty cycle", "nesdc1_on" ) dcx += 13; makedcled( ch1_dc2, dcx, 42, "25% Duty cycle", "nesdc2_on" ) dcx += 13; makedcled( ch1_dc3, dcx, 42, "50% Duty cycle", "nesdc3_on" ) dcx += 13; makedcled( ch1_dc4, dcx, 42, "75% Duty cycle", "nesdc4_on" ) m_ch1DutyCycleGrp = new automatableButtonGroup( this ); m_ch1DutyCycleGrp -> addButton( ch1_dc1 ); m_ch1DutyCycleGrp -> addButton( ch1_dc2 ); m_ch1DutyCycleGrp -> addButton( ch1_dc3 ); m_ch1DutyCycleGrp -> addButton( ch1_dc4 ); // channel 2 makeknob( m_ch2VolumeKnob, KNOB_X1, KNOB_Y2, "Volume", "", "" ) makeknob( m_ch2CrsKnob, KNOB_X2, KNOB_Y2, "Coarse detune", "", "" ) makeknob( m_ch2EnvLenKnob, KNOB_X3, KNOB_Y2, "Envelope length", "", "" ) makenesled( m_ch2EnabledBtn, KNOB_X1, KNOB_Y2 - 12, "Enable channel 2" ) makenesled( m_ch2EnvEnabledBtn, KNOB_X3, KNOB_Y2 - 12, "Enable envelope 2" ) makenesled( m_ch2EnvLoopedBtn, 129, KNOB_Y2 - 12, "Enable envelope 2 loop" ) makenesled( m_ch2SweepEnabledBtn, KNOB_X6, KNOB_Y2 - 12, "Enable sweep 2" ) makeknob( m_ch2SweepAmtKnob, KNOB_X6, KNOB_Y2, "Sweep amount", "", "" ) makeknob( m_ch2SweepRateKnob, KNOB_X7, KNOB_Y2, "Sweep rate", "", "" ) dcx = 117; makedcled( ch2_dc1, dcx, 99, "12.5% Duty cycle", "nesdc1_on" ) dcx += 13; makedcled( ch2_dc2, dcx, 99, "25% Duty cycle", "nesdc2_on" ) dcx += 13; makedcled( ch2_dc3, dcx, 99, "50% Duty cycle", "nesdc3_on" ) dcx += 13; makedcled( ch2_dc4, dcx, 99, "75% Duty cycle", "nesdc4_on" ) m_ch2DutyCycleGrp = new automatableButtonGroup( this ); m_ch2DutyCycleGrp -> addButton( ch2_dc1 ); m_ch2DutyCycleGrp -> addButton( ch2_dc2 ); m_ch2DutyCycleGrp -> addButton( ch2_dc3 ); m_ch2DutyCycleGrp -> addButton( ch2_dc4 ); //channel 3 makenesled( m_ch3EnabledBtn, KNOB_X1, KNOB_Y3 - 12, "Enable channel 3" ) makeknob( m_ch3VolumeKnob, KNOB_X1, KNOB_Y3, "Volume", "", "" ) makeknob( m_ch3CrsKnob, KNOB_X2, KNOB_Y3, "Coarse detune", "", "" ) //channel 4 makeknob( m_ch4VolumeKnob, KNOB_X1, KNOB_Y4, "Volume", "", "" ) makeknob( m_ch4NoiseFreqKnob, KNOB_X2, KNOB_Y4, "Noise Frequency", "", "" ) makeknob( m_ch4EnvLenKnob, KNOB_X3, KNOB_Y4, "Envelope length", "", "" ) makeknob( m_ch4SweepKnob, KNOB_X4, KNOB_Y4, "Frequency sweep", "", "" ) makenesled( m_ch4EnabledBtn, KNOB_X1, KNOB_Y4 - 12, "Enable channel 4" ) makenesled( m_ch4EnvEnabledBtn, KNOB_X3, KNOB_Y4 - 12, "Enable envelope 4" ) makenesled( m_ch4EnvLoopedBtn, 129, KNOB_Y4 - 12, "Enable envelope 4 loop" ) makenesled( m_ch4NoiseQuantizeBtn, 162, KNOB_Y4 - 12, "Quantize noise frequency when using note frequency" ) makenesled( m_ch4NoiseFreqModeBtn, 148, 203, "Use note frequency for noise" ) makenesled( m_ch4NoiseModeBtn, 148, 224, "Noise mode" ) //master makeknob( m_masterVolKnob, KNOB_X4, KNOB_Y3, "Master Volume", "", "" ) makeknob( m_vibratoKnob, KNOB_X5, KNOB_Y3, "Vibrato", "", "" ) } NesInstrumentView::~NesInstrumentView() { } void NesInstrumentView::modelChanged() { NesInstrument * nes = castModel(); m_ch1EnabledBtn->setModel( &nes->m_ch1Enabled ); m_ch1CrsKnob->setModel( &nes->m_ch1Crs ); m_ch1VolumeKnob->setModel( &nes->m_ch1Volume ); m_ch1EnvEnabledBtn->setModel( &nes->m_ch1EnvEnabled ); m_ch1EnvLoopedBtn->setModel( &nes->m_ch1EnvLooped ); m_ch1EnvLenKnob->setModel( &nes->m_ch1EnvLen ); m_ch1DutyCycleGrp->setModel( &nes->m_ch1DutyCycle ); m_ch1SweepEnabledBtn->setModel( &nes->m_ch1SweepEnabled ); m_ch1SweepAmtKnob->setModel( &nes->m_ch1SweepAmt ); m_ch1SweepRateKnob->setModel( &nes->m_ch1SweepRate ); // channel 2 m_ch2EnabledBtn->setModel( &nes->m_ch2Enabled ); m_ch2CrsKnob->setModel( &nes->m_ch2Crs ); m_ch2VolumeKnob->setModel( &nes->m_ch2Volume ); m_ch2EnvEnabledBtn->setModel( &nes->m_ch2EnvEnabled ); m_ch2EnvLoopedBtn->setModel( &nes->m_ch2EnvLooped ); m_ch2EnvLenKnob->setModel( &nes->m_ch2EnvLen ); m_ch2DutyCycleGrp->setModel( &nes->m_ch2DutyCycle ); m_ch2SweepEnabledBtn->setModel( &nes->m_ch2SweepEnabled ); m_ch2SweepAmtKnob->setModel( &nes->m_ch2SweepAmt ); m_ch2SweepRateKnob->setModel( &nes->m_ch2SweepRate ); //channel 3 m_ch3EnabledBtn->setModel( &nes->m_ch3Enabled ); m_ch3CrsKnob->setModel( &nes->m_ch3Crs ); m_ch3VolumeKnob->setModel( &nes->m_ch3Volume ); //channel 4 m_ch4EnabledBtn->setModel( &nes->m_ch4Enabled ); m_ch4VolumeKnob->setModel( &nes->m_ch4Volume ); m_ch4EnvEnabledBtn->setModel( &nes->m_ch4EnvEnabled ); m_ch4EnvLoopedBtn->setModel( &nes->m_ch4EnvLooped ); m_ch4EnvLenKnob->setModel( &nes->m_ch4EnvLen ); m_ch4NoiseModeBtn->setModel( &nes->m_ch4NoiseMode ); m_ch4NoiseFreqModeBtn->setModel( &nes->m_ch4NoiseFreqMode ); m_ch4NoiseFreqKnob->setModel( &nes->m_ch4NoiseFreq ); m_ch4SweepKnob->setModel( &nes->m_ch4Sweep ); m_ch4NoiseQuantizeBtn->setModel( &nes->m_ch4NoiseQuantize ); //master m_masterVolKnob->setModel( &nes->m_masterVol ); m_vibratoKnob->setModel( &nes->m_vibrato ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new NesInstrument( static_cast( _data ) ) ); } } #include "moc_Nes.cxx" lmms-1.1.3/plugins/nes/Nes.h000066400000000000000000000203221247673406200156420ustar00rootroot00000000000000/* Nes.h - A NES instrument plugin for LMMS * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef NES_H #define NES_H #include "Instrument.h" #include "InstrumentView.h" #include "AutomatableModel.h" #include "automatable_button.h" #include "TempoSyncKnob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #define makeknob( name, x, y, hint, unit, oname ) \ name = new knob( knobStyled, this ); \ name ->move( x, y ); \ name ->setHintText( tr( hint ) + " ", unit ); \ name ->setObjectName( oname ); \ name ->setFixedSize( 29, 29 ); #define makenesled( name, x, y, ttip ) \ name = new pixmapButton( this, NULL ); \ name -> setCheckable( true ); \ name -> move( x, y ); \ name -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "nesled_on" ) ); \ name -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "nesled_off" ) ); \ toolTip::add( name, tr( ttip ) ); #define makedcled( name, x, y, ttip, active ) \ pixmapButton * name = new pixmapButton( this, NULL ); \ name -> move( x, y ); \ name -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( active ) ); \ name -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "nesdc_off" ) ); \ toolTip::add( name, tr( ttip ) ); const float NES_SIMPLE_FILTER = 1.0 / 20.0; // simulate nes analog audio output const float NFB = 895000.0f; const float NOISE_FREQS[16] = { NFB/5, NFB/9, NFB/17, NFB/33, NFB/65, NFB/97, NFB/129, NFB/161, NFB/193, NFB/255, NFB/381, NFB/509, NFB/763, NFB/1017, NFB/2035, NFB/4069 }; const uint16_t LFSR_INIT = 1; const float DUTY_CYCLE[4] = { 0.125, 0.25, 0.5, 0.75 }; const float DITHER_AMP = 1.0 / 60.0; const float MIN_FREQ = 10.0; const int TRIANGLE_WAVETABLE[32] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; const float NES_DIST = 0.9f; // simulate the slight nonlinear distortion in nes audio output const float NES_MIXING_12 = 1.0 / 20.0; const float NES_MIXING_34 = 1.0 / 12.0; const float NES_MIXING_ALL = 1.0 / ( NES_MIXING_12 + NES_MIXING_34 ); // constants to simulate the hardwired mixing values for nes channels const int MIN_WLEN = 4; class NesInstrument; class NesObject { public: NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph ); virtual ~NesObject(); void renderOutput( sampleFrame * buf, fpp_t frames ); void updateVibrato( float * freq ); void updatePitch(); void updateLFSR( bool mode ) { uint16_t LFSRx; if( mode ) { LFSRx = m_LFSR & ( 1 << 8 ); // get bit 13 LFSRx <<= 6; // shit to left so it overlaps with bit 14 } else { LFSRx = m_LFSR & ( 1 << 13 ); // get bit 13 LFSRx <<= 1; // shit to left so it overlaps with bit 14 } m_LFSR ^= LFSRx; // xor bit 14 with bit 8/13 depending on mode m_LFSR <<= 1; // shift bit 14 to bit 15 // cycle bit 14 to 0 if( m_LFSR & ( 1 << 15 ) ) // if bit 15 is set { m_LFSR++; // set bit 0 - we know it to be 0 because of the left shift so we can just inc here } } inline bool LFSR() // returns true if bit 14 is set { if( m_LFSR & ( 1 << 14 ) ) { return true; } return false; } inline int wavelength( float freq ) { return static_cast( m_samplerate / freq ); } inline float signedPow( float f, float e ) { return f < 0 ? powf( qAbs( f ), e ) * -1.0f : powf( f, e ); } inline int nearestNoiseFreq( float f ) { int n = 15; for( int i = 15; i >= 0; i-- ) { if( f >= NOISE_FREQS[ i ] ) { n = i; } } return n; } private: NesInstrument * m_parent; const sample_rate_t m_samplerate; NotePlayHandle * m_nph; int m_pitchUpdateCounter; int m_pitchUpdateFreq; int m_ch1Counter; int m_ch2Counter; int m_ch3Counter; int m_ch4Counter; int m_ch1EnvCounter; int m_ch2EnvCounter; int m_ch4EnvCounter; int m_ch1EnvValue; int m_ch2EnvValue; int m_ch4EnvValue; int m_ch1SweepCounter; int m_ch2SweepCounter; int m_ch4SweepCounter; uint16_t m_LFSR; float m_12Last; float m_34Last; float m_lastNoteFreq; float m_lastNoiseFreq; int m_maxWlen; float m_nsf; // wavelengths int m_wlen1; int m_wlen2; int m_wlen3; int m_wlen4; // vibrato int m_vibratoPhase; }; class NesInstrument : public Instrument { Q_OBJECT public: NesInstrument( InstrumentTrack * instrumentTrack ); virtual ~NesInstrument(); virtual void playNote( NotePlayHandle * n, sampleFrame * workingBuffer ); virtual void deleteNotePluginData( NotePlayHandle * n ); virtual void saveSettings( QDomDocument & doc, QDomElement & element ); virtual void loadSettings( const QDomElement & element ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const { return( 8 ); } virtual PluginView * instantiateView( QWidget * parent ); public slots: void updateFreq1(); void updateFreq2(); void updateFreq3(); protected: //freq helpers float m_freq1; float m_freq2; float m_freq3; private: // channel 1 BoolModel m_ch1Enabled; FloatModel m_ch1Crs; FloatModel m_ch1Volume; BoolModel m_ch1EnvEnabled; BoolModel m_ch1EnvLooped; FloatModel m_ch1EnvLen; IntModel m_ch1DutyCycle; BoolModel m_ch1SweepEnabled; FloatModel m_ch1SweepAmt; FloatModel m_ch1SweepRate; // channel 2 BoolModel m_ch2Enabled; FloatModel m_ch2Crs; FloatModel m_ch2Volume; BoolModel m_ch2EnvEnabled; BoolModel m_ch2EnvLooped; FloatModel m_ch2EnvLen; IntModel m_ch2DutyCycle; BoolModel m_ch2SweepEnabled; FloatModel m_ch2SweepAmt; FloatModel m_ch2SweepRate; //channel 3 BoolModel m_ch3Enabled; FloatModel m_ch3Crs; FloatModel m_ch3Volume; //channel 4 BoolModel m_ch4Enabled; FloatModel m_ch4Volume; BoolModel m_ch4EnvEnabled; BoolModel m_ch4EnvLooped; FloatModel m_ch4EnvLen; BoolModel m_ch4NoiseMode; BoolModel m_ch4NoiseFreqMode; FloatModel m_ch4NoiseFreq; FloatModel m_ch4Sweep; BoolModel m_ch4NoiseQuantize; //master FloatModel m_masterVol; FloatModel m_vibrato; friend class NesObject; friend class NesInstrumentView; }; class NesInstrumentView : public InstrumentView { Q_OBJECT public: NesInstrumentView( Instrument * instrument, QWidget * parent ); virtual ~NesInstrumentView(); private: virtual void modelChanged(); // channel 1 pixmapButton * m_ch1EnabledBtn; knob * m_ch1CrsKnob; knob * m_ch1VolumeKnob; pixmapButton * m_ch1EnvEnabledBtn; pixmapButton * m_ch1EnvLoopedBtn; knob * m_ch1EnvLenKnob; automatableButtonGroup * m_ch1DutyCycleGrp; pixmapButton * m_ch1SweepEnabledBtn; knob * m_ch1SweepAmtKnob; knob * m_ch1SweepRateKnob; // channel 2 pixmapButton * m_ch2EnabledBtn; knob * m_ch2CrsKnob; knob * m_ch2VolumeKnob; pixmapButton * m_ch2EnvEnabledBtn; pixmapButton * m_ch2EnvLoopedBtn; knob * m_ch2EnvLenKnob; automatableButtonGroup * m_ch2DutyCycleGrp; pixmapButton * m_ch2SweepEnabledBtn; knob * m_ch2SweepAmtKnob; knob * m_ch2SweepRateKnob; //channel 3 pixmapButton * m_ch3EnabledBtn; knob * m_ch3CrsKnob; knob * m_ch3VolumeKnob; //channel 4 pixmapButton * m_ch4EnabledBtn; knob * m_ch4VolumeKnob; pixmapButton * m_ch4EnvEnabledBtn; pixmapButton * m_ch4EnvLoopedBtn; knob * m_ch4EnvLenKnob; pixmapButton * m_ch4NoiseModeBtn; pixmapButton * m_ch4NoiseFreqModeBtn; knob * m_ch4NoiseFreqKnob; knob * m_ch4SweepKnob; pixmapButton * m_ch4NoiseQuantizeBtn; //master knob * m_masterVolKnob; knob * m_vibratoKnob; static QPixmap * s_artwork; }; #endif lmms-1.1.3/plugins/nes/artwork.png000066400000000000000000003131721247673406200171530ustar00rootroot00000000000000PNG  IHDRZ=bKGD" pHYs  tIMEBtEXtCommentCreated with GIMPW IDATx̽yl]}I,K%ycal3$tW'CXCIH' $  2lٚA' w3ػNU[uЫUһug FJrW|TwoR,X~}&\w b~¾,1{,\,Ŀ+]|v]8>{˰gYk=s~ys-_AkX~b>\G\/") ݟ䮿k+xqpw;E\wf].{y `0 QD~xL&.ehR&ˋ{\H\(_~=!.gŋW =+k{E SV>,3K7_u BW(!ko\ TYXh&$,WsV}_R3B;aъcf~3ŷvy r,ʻXI/#K,̭ޕC+XE[ɂM)xq/rA .#2΅to\_]̫"}#tOe.LS^OW@~NKEV]\+0/W/v+v378!L7!+ES۴= s¿af[b}ߖ}7+ a`e"Lq /N)gTڅ_˯+1n!\0/exD73{'X!J@ BBIs@zznMܴ5B@Zh4nZc.tOdϼO:xr1A]fY{fNse>3ug>L?C >c*aJ9žB^f"q9ü8? O+_T`KMþ)'֒M.>F}V&aN]+ P𸮡{3ye<\'C{w"aU%.󋬵L[Wo' >˫ ;+rMc!=J 2ͽt\ ͇g-!x\ /cOlm4-Y#%x0mKOӴXc㠄9β^ sLЙXFhZJxJǰY2| 4RKR )ʂn@*qPFZk<׸`QB#H0ƀdKk!޻5[Q]\L΢UNx@*p.ж->MђXU)E,X:|G485TҺQet@+">KUh-:Ggk,R EeB+Tgy߭Y4Ms((qEp{7z @)ǣP{L;O=/\O?I1O]xܹJ)Ҩ\4-:eH51,XXY@I49T2vY{@fHt&q>@Ӵ-!jR%5BX,'/K chy㽧3pޡ5%BxJH R.8E)Gh% EKBEzT~WqJ ;RF\1ђFe1\)%B=yVM\C'1]WZhV:R sdy6@@UFP+5(!cLÉOyllG7UiIYD3z\Ec.cû@5uJq2mɳ$y~ Q(Uzɺu >mj0Q7-11,Ϻk6uKEzt3M7|IA3YWS|u3Rݺjb~bppBiMۦ3p.ZfouL,)Cɳwh ȳ :+h-H j"HRZ"΃3(hؒ%(.IIɔBQZ-`0kP8e㬥QRH>MScL GÈjK;)e' 땝UtNTݺzg )мSpq]3h=W%e=ɴBz3q'<@)hBV8yEUAj 3-aA԰ƴqp> ̋9%s54MYmk@2(!AF7C3@b| s,ȲP :!q ]4Nf^DϢ(BRL"eR2HW)0MPUc^ge`gCE[HE-d 5nۆ,Vz"fx #~)52B|tBMMg8ȴʒB:ʢ6(P7P+qոSVR K|u3Eʙ"uq;kE,/PRA-+cBUWI)m"~#;;;)e\W@"j!Pu A%7* EQ0u"y Q6MKkz>(bu%D#˱RczE!k1Q($WŋbY}6%7i$5eAQ4uA)ѶuB#jpHT6j%bڎuݕ<[XccX<b IM[]$zsT\uUӴp6"Dt{p8>@UENOA匆;\x%Dĥ]VQ)`b0p6.wW wFRHȹ6X6:WAgyO2gո8.++.p>;;C8)ո]v,~2+n~o@x c\Bx71|&ֵ&Y'.L T yqYYDCD`ZKUUFl},@]U% . (鍍 iXGsrI` 0a$1O+RMwLuZ\y㬥뱹!X1P2ZhkQ~u'jiCO=nV5|YzzPo}+~&?v1n0m.g}x\"\uIZ0,2GpG2,֚Q-".0ӢH2R~S䍠" ڦj7.~{KY>31-׼O]q~mr)x/Ǟ>}A'(r2ǵq]767P:lJ#z=F!BE i8ܡi[ɫ}uŐO5<dR2?5/n"4u Z.Emۦy7-.>5mXtFp.g5ǵx㠷'6v(A]D ɿT1E0[t"! pu(gx!ppeU(^((4[Z\DRڧ/q]h"YaHȲ18;x\ubLe?k=޲2๦#N<8ADq, q7B\̄)`^?8gkLB3zc9 L>+#i;L6b)cib(AF$ 8R6e1GoAEɹȘ9_cןJ`A)VTTq:kSY Щ縡W$E%'xJou+%\pRKVtX[壛CoEx_Rrm?ӥ> ' ?}o}TpqOn(T4x;OYؔwђ'a+Eu1i2ih:bnZ$&XT\)5Q{yZv))TLf$q;n&x$!hStsvXSR3t6 ƙHFњA? 8ZX蕚n'EoƷEk Ub z"y@J9֩1V|&Y.̋l2yyKO:0~y~'Wa3g/"r"Jfu';6Ғ*IitƊV|:oDkN^Pok|#*NJ6\?e-(FtC m2vn6(%}XSRUnUi]^Z\.i 4iB"/!.ןoY/ad=/y1_h-Y;v*|S2Φ@ >5FKD\Υ ~UγHtWTYɴG "$'0$@$jYJus1բ擛; ?qs_: U!y^ޏʲ}MkJR%[ù!qZ0)bZ/8"4I+mp8h:cx,q SJSuGmtOz~fј;.n򾫏0) 9_*.0RU!kUEj O B !1z6~\M;3ϞGJ[Ԡkyn?3 M`D@8Z+̆u 1$iZzJ54?޷1q]7-{*Z! W5_G.l56I^KbOi~3e6^Z(TXo\jAdͅ"QIAkq'LO0X9@|1 Ϝ~ z"E.c[Ek \FwmĔDicH hZDFT1qe bd^-cAȨDdhWV 1Ɠ&Vm"C)+TT nfJklCk2MY*E!'o!eJL]zH.""YV !`+s .V9ZcoB@ú1i⺵YѭњO5zAc +UwN)#u0iQHTy^j\%Y $RTu+ O|BZR7}Bk>xLlV"qr]\څHD,2Z[= 7ikRa e2JEڻ^'׌s%ǑB;)r^ic&E+EC,"8[\{ɮ?z4 ۛ0RneFutGBbuQBF/Ē<(+uJW{8Y}4J"']A?`Yr[ӢJZGnR☘nUU!H)|T! IDATaW `?[&DۥMǧxseyrTQ ȴAEQĔ_дʹHܱ42T!DO&"/B%jL !u ] l?uu)QtGpr>Rs%"^U$ى=:Ȋ\++iVWVc8BdqFE,P:unR`u@?ڇr&n̄ [BǪDk}*E@BT`>T<@HhzOedZQ&fl׵s`lCGE"PGtEu~"ZP*$CY^VA<1̊׾U|w|*++)J۲eO?7]j1>4{>#_RBWC WB?@$u[7!bgUն&yC[w6_c*/2ZEUXʲկqM3!tB{)ε<[W{pDTHA\V.mѠXi+IZvKiOH'M:v6Ǿ/cRrm]nn{m Vݞ0 rcQ9:I,;zaVR˚1B,Dv-0G¶cL)\}b\x_z#/{uS<ЃLu ~8ݞeǛ:^ɟ~,ZQ7 99v1ɸlmvq%oxkЃal{#7edytw(}\ QvB>ߚiW𧟽c,Z+n~Gc1mpR Ko/"&LW??ѣi1ވd~zasͲYP} _+^R~_;Ǣ(#IM*1xĒ= "w5ysRI(k.=D5ޤcmvABGQ\wاhwu3Ko}3+Y1_;nQW[85sI[HBgq xfLS7(%/WҶmRl (2vޡi4v^z4.% h" Yki]~~bI{[߈OBqb!{@g\%yy>Yocs :Sd>'s2Wd⭷<?s]Ì0Ҵ󯅻=;RUیc\񶷽cc`vQ)ˍ^n&\()۰g͒ƌ_77yu,hkBQѣ'8֑#K,Ckh%'1y+o.!mzg > . Pp$:~5;/xEZ~o% [Ճ=n~8[b%.mgC9/"4?WƟ8I}U:2Y;p BZK+luSiٛyv<{肖9 (,q-{R nfL[jm:amc鳨3gkjB^ø'ͫ. ;;:|~_\(a*^W6dYC6:| ?l|Ñ#kO2IǶKCC/Q?3 qA ?WWS=e>]&Y{;fd(buUS^,ߏa'>}f{o[dSXs7W W !p}s\ws-_"\3u_{//fq#c!oeWo(9vg}skҟ)kN{ike) Z*.\{q?}f8ƚ唃> cxk5 ZHڦXr݂ m.0{qwzʡ5V 7p eMuZDoV*2Ntu#%}瞼YZp a"yT?[>3P21ui.1p=E{9z]\xv%w>6q^l %%&m}O< [}[تfOs?s=of.Y:da0Xa<"B@ *ӈXGeS͡EW5sQsg¥g>kl\lvb[-+|c_|YkNrα_uﺛ7D/]E =]x\ƷIUQV*WsW9XnUz~AxE #v S~I{{SgSzlS3ljv.^"{}r>G]_g!YjFʔIqAk|Ïq湮YhiؾIv Cs{xc"V@GBPE'b[Ìwe4yW0n/^g?7pUcmL ȁgǠ,5DֶK{;w}zT]ܲĶOX&!̨I3N<|″(YcO]B z N"\Ot㸲jHw|$ݿ 3p`"i8eb!Sg@pGw>)ʼqգ=Ao~wM(t@Zndge/m ȥ>p}lV..}[cFӦ⧰(bMǵqױMχ?=4, #&NٮًqUGw2 sMr/<Ώ>ϸi/_Gu"qrh?NMtNiUU- =UlKlK@L_ܡ ?< ex}׫[\M?yKz^]LiV]']܀Kw}SoL@FOǾcJkqmc_szE"0^ڀ?42W> 6WO}rOvkUKrE_pcQ_w-nXޛ8ϟ'ŅT\lILUl!kNPB4~HBaWvn]h̺7u ۿ~~,:ۚX#'#/"{/^*}"1g;;ohRs vV4`鹂a?A"EPej/CVu \]v37joܦqw&-v;#~F>U]"wef2M 3nW;~kGZTyEGY12~̰3 eG ʲ;IMαMYb.ɘi=5BW#lp`mK6$f¸q_'(7-< VH9"]{yFg (/CaML ]fSew>6pG\_"8Xni }=m=HAd{髙53O'KL=}&&9 kնq R~?#9Ǒ3'tH6?y*# 2#RZ‘+{v>'q>,@/R6P ,bЙ]?OO(!% 5;&U>û [ =i»wsroD~;~{>؝_2f<>䚧>s09*,SgI6p?gQr^{`Q*kГ`{͏>k[;03E2vL9Mh@v]uҌF9Ku6R L3{Pa1P{T%LW>1rYS{r%A陗s ,m Žv!ɳ Rs1 R yc4OqI2f"[+m ޙe1:?Iϰ!>3 '~f.lmВ[y|6uxͳR:M-%d[w-u3 NA <Κ>3Le$%5?{n2fsPձe B@wo^Ӵ])0?X]K3g1/K>ysu&=:|>"$_+_t<,5'\330ȯ<: hSHhveϞ<,R =7.cJ#USy9T;G2.3%b û05ga0 @ԔE3& Ϝ=|_0+B!LkiBK҅4/D˶V/%2\"xbnmۢSqmS{ߢxcJ ^w]^(0gAzk1 al`q]vEݴi ܥubed"8?v'iP,;9>=酌z~nftusv3Ӓ'%.X-gfu3*Ĵ-O=qpHecf.ƣoʽLwE\B}9E&u:r؜r}b:a!E7ԁfh,)pSEN]U]񺻀̸)B_`hZppX ;GArt&7Q4-XӝU,T1u=fgk B ttEgZӴ V4 3cI60]ʼ0,rVi'>23ŌBvU ]0 Oأ_lkɔ(9&E䨯З|@ɉ)RcxX<Lw4DJB6O7 /brf?pe/X,̟`OxŃb¢R!+ qAYJMQ4UݝH+ƩjSf9YڦtiLNJ֧f)^FS5 Hޒ >ff̑>k pZEU1tݳMV1,Y!\09\u/vu,d1&/ש&ajWD<#{}pt]XUG6.qe&@k,͑I\\<5pAA\\8YZ4W&{5ֱ":w!99eߟ(Y&g@ AJKjcUTLX9pn؊'1Rƣ_Kv1eq wuWws i:NĨJ-yT"]o|=AA\~Thf)>w?s(h\s.$ّ[7,g`|~ ߥe>!uo(h!B ~?V>q=3Ka&L ~?PT#/vei#O~|w ?~H_s 1O=Z|f{L=׋'(rV5z5 >F+NEf6ɄImےAiar(V EQQ7r-d_"c L>.`scsI}[tlS0`s[nA?0n8Lҿ:x>.+\:"tWit[nE? n17_ǡw|Ӯ}[! %yӛwg!cPf?C%*^lBU7L' j0O"A$jHNp#S6# :-oy?Li[kYy-d<(rO7o9 EwJMG`cm7+_{FA7{?{8[ju&ca0X$!6& $Ad%XKH{  $!+ 0cpccMjkL{zU]Z{9g}ܝ3z3V0&䰍QǎAf,\HF| )oCXk&Gv |=ve!% IDAT_e5~IRd:'Ow(9-oUJLQPb-<տ w>{~^x\g wx'?ibYfLS [Rө, qȿ/LF(MZ{eldŖbCVkn˂JK5V)X>O3NPzھ )8cyh{<_7^7M]-maT_"۞|}ޗ_\_N}N[_w6 @k9sdv~4śJaS77sU_Au nk3G qp7Rȣ@87F->+|Gy2azRu| ?O_YX奸0tuޙ3(/_"\Ԯ.}a7ӯRIgty_A,La)"S}?u.P1=tLjKr[8{}TCУju,;%-G~կo`֭b/FWo[˩\mm-cq9Im0%Mo>RhDQ6@26 3gωc[(.AuCi"z#{ c+Z66F\w=_M/<~ifpp>3oc o:#3Z,VTyݜ܆{'5|s /~G7)sñ c 5G_h`B8cqG?b*c'y9g77Z\$-op]5Le?HחnPw/^ĽΣ9.=} 3!4;˲{b<4n!3):!?g:,_*'x?} ^r!'se+>N"WT$q5DQ ׬ױ:tKgzd> nl7E~UCtQآh ``ͿZV~i2{Sm6_{+~^/7¥0t-օox#~vY;v}V蕭]x|+cLл[N~[(5ӢMXb2fu6ͬ}LjQ3>J5EAtڣآ _ߜ}ӛ,T{w|pBPY!d8Jy+~OQS\1EAp6o^df? g!J`o KJhd2a>oHJϵk~o"=cb7qevuUg#[ÇtEIꃗ8eIyG^KE[h/hM]w8:XG^DijG6'HC#~FE~7ϝaW?!&+ZL%еlo\ݦ4?|gCJZWpx}>l~7ϝa BLV ޝKw .n?|iD)I15ZEҦO ga~J1373uEw_0ߧ?a>'VW~)W;Ԕv gZhq]p, ƾ崯x9!ş)/0 ×y%' F>6l$Gt|BQV]D؟i_R?$P}BUnW^JN}ū= `f6'HYϱ('MI3mQ('!vQosO;}]S3aXiv`<m0+,˿$>z4Īt#˿^Rnzk8\Q'vww1`mI eUlJٌɨcވ}}+ߥGcm UF/"KSRwv>.u M,yRq|4Q-o')MUZ>܍OuHk4%… \BiCYv,>xuw㘟6~+enWI~b]|+[tKu52<@a |! „!kr}ŋ\ܢm%Mg<4-/ڡg=R)~_դBH̥*WQ}}[R \m>$e>ak藼Khpjx|~)> DW8{n W1F\- ,>Ǝq~V_u>!1Vf. <(;5d9Һ[RߥcѣC L$f04-}g~_,zRD[]Ϟ;Ď1se*O0 $JS%6\r=ƕ+W }W}`&koOB3vZO]D ox-_uw(W6 {;V_~ys9uJcqn81)6O1^FRdks~˗7O~zi%j(ױ?d&>yv];y ɺVʠ !x #s^{A˂^ [αy1RpE/M$!4t#*{ğUjl8rO]E/_n {{{Ʌ/Ѵ*;LjHD/k^|-lnoqGAR^/P5,!"gW6 HKYJRcTK¼KuXcps~!QM3g,>Y争(h? hmI1XFg" u]1x'qaha@YXy+LpE9ojZeU=.(%YP)>&/>)-NCwTeJF?AdѣQ@ŀ-JFm#4b- \i20+QlR`LW(=FkkihK^R]CnKcpB%77H:p2/K0w&#ɚkrP>xTҚ"4".xVxIokZ];wXy9퓖 BDƄˀ1圻Jmi.Y4TUVLbdD( 9(q(am: t}bYSpSFM#D,K6.gf;%P}2*漹(r^:F1.{/aD]ge2a@o\M%F0H &++Dߓ”h+Čx"tܘ""''fX[0L#kJA6_[4kz2#{z|N]PJ-ֈap[R++s'g]'8)*WZpp^pJޮx-[-y64;{6gaboFU6(rVR c4Jk czǔ0V38GY">7K5Bjg3|]`T}M#cby!|ehDNOW+˸rOPZ'O۵˛IՈh0X2 Z%wӞcrϛd40 A@$sw<2(KL~OYh (RHK˫cqsQ׸.JvM,˺(V*P(B HANu=[[8h-,ш~QZnζ.!74sL ڛloSUUG LG5yCAAs08ޞ= _KA""P>7CS@Um.MӶr$>tZR}ϐ䏇DYlW3`x !o =eU1۟ m&jMQ50f{q@$UXKWXI%]b,=EQVٌlλ/k57 ]c2Sc R}qP}c$!FkEQl8qS"_J~ΝM'W- c$8;s+F?nyf{Ov`:8/]6wͻEXr:Ā2jR|Ӎvvw7᥷C&c|lw^ďq /N]Y$$(C"( c黎?G%ѠzL۵ز~E~R5/=~oD=y{_|m~r>1۟ S/kӄ2FE-\g2#S"ԔeEc ![(y08ʲ<i!mzrM5Dъ%J]; )R PuΛy޸.[sNLjK =Cp8÷㧟u+#kyǷ~1v7_pQBo~kmڭǪ|xCFn?]1.^僳۞,<_]?R k5y)/_//]@4ܳ2J'y[(!㪬! 9WMZNn?c4QZ2-5/:w@!.^8x.V9`PS1GeJt|VW|G>FŶqͷvS?k3>OY*v.Skt t]a齦,u6gd/Yhp3` ҏU eXYm;^?4?半1P%UwFz}@PsyBEZIhcx%noo jIVHL*kyZpͅS姯o&V;6;[R5#UP1%JyniÀҊqaq}K.:kc dҚ&#t;Ö(T߱3tpP.SjuS|K'SOD#c m$QeY QiU?(21wmSP: Z/7ֆ[Z :|G38%؋c7o;n91MU( QW5fNe+yϨQO‹>_櫗Uӕ })As$MU N/)(K1\s؜re>R؂uņØ* Xhۖ*(Kp˨kNB]e[i[NmMV!;EeHv={ /Zi͇=)!gz1GmjUu>2祉a-tr#~mYye4*o}K՛ï7DQ&%#K` ǣgA /%F)E33Ym>?S~v#L'%Q0=|}̳Gxq.NC nr*?g>yBr|l +9kSF_ͻ]_+3'(ׯ'/^@sMܽ>ܷZ~ksiY͹eKWw7'[O#\K]WZzoŀ^o>o*Vܳ6No{gOQiͯn5S IDATs>?CiHkI^ybwt@ A@NR|G]qG]^g$^6 Y?ie-.ߵs8%~O\W * QUUa<9Iه,,57X4k5E|PXd|2@}8kQؒ4c1% 6264LY #QFmeˬkgW#ZvwGZuY27xaKerJeZ¨qNUuET0͖StҸ(‘)2Lxƭ|w}NQEQ81 afzŒ:]"ԣj9UZE%еf+%<ܔ/E+{-0xuKT cK9tety*$ 9)bI+eQ2]gXD<ʕq-,R PEHceEUQ2UFM*Aae&7eUU6 1epQK*5J&( h*;Ʈ=fpuQ=)BY h:JQ]Bmd4<ߕ " Y,rn ׹@J&i1ZJ#\RF2 THLM#".)XQFC;Xh}~142 O4KͶlXppÒ ?-V!RXYFJdMSГc atb,: pXhFnGq92\U)ivI'c_hA0ҧV]CJ/Y !oME,]׋)VQ Q(&a((2C q-51k "HS&G UWm"O S%:A 0V~~&8C Zuw.-z7@Hjk)Ӓ|[td"~eAuy&za6 wy cAE2s^H1f:SDUF?g<muU306' bB)weQ-键햀hQkk'{xQ$c 04}>av c4QIa6a MP؂#ι|hJ]N޴ !}͕| Vi]X[wL*Tu9*ͳ(0xy">b.;GQF35K4JKX5qP+bZQfFJFe\ x/εI|g<ȉNW iOB,J)@8 I)Z`d }KB+Jzݵ]`y.8X7%1.HQvnuSu^'< KGWVu<ͼa<|Xf:{Y][> }OTE0wKՄuC'" }n]KAdCVH0f!q:-dV[kqyÒe yO-sOcu9UUQT5} rBeh6,));*[R+P}(1h@Iu&R7F}s=N eo*&T#mːzʲ'ʪ`:4R}L&WXp*]7 C^6/(QR\[+k[ +%5 >Zc&*2Zc K׶uwY&M/1GVtrgM+)%MiĖrT6YRw9Բ ̢6*8eYH5)dg=mwdT5tI41V+u]}7,UUzҊ,ϖ 2Qv5+9ʢ0(`–(%auUUB+l!chmT5Z)е^xY@Xk(lA?t($v($gkc0s6B7xi1hkMVM O@mP5J+ǧLTIQH&E,TRl:jFUs I#6Gm-C-Ru-QU62>bF}sOUߩC(I켝^+"su9misCBXq-az3v%7e R)%Y[`TkytRyt"}QuID\BP1~B@{@*_.k ">l޼m`\BHycؚ=ymdOUq 7 eQ-@!&yCJZc!qbe D*EQ7 *+|zB!8Bl!Hg4.H!ƔGSw_A/1l,J, , R- $)ig3!PTɼ91SlodGY?UF ,QxF1O-E7`zD[j\!~eY}aIAI1~Y}|Y̯r eK@_]FwP I 0(*,$iZ !I~zQXR %Y+ d&tci1*ozƊ(w}dyt.8tN,0,9 ˆM/Dx.8EokI/FRP2VJqn[)*ʑ,rΧȥVouĄ(7 UbNHb,:$S\?PT"GY!ٕR 7e!㮢.Z<άX !TT^H?a͇H~MNv|%/[$d;℗1H!C>; ٥+& ]0 Á#lEH.Ղ*-lz$lLtا%q_!rd,'i:/3*I$CvMMY6ZdeDॿsv#fTh4b2-y65+J? B`V*yJFf#CߣT[q~idS>!Zs v:٦+E(f6IL,KRHG6ƻ#HU#Y_QF\7}XpxJٽe9:[,aལ,+4*|ңk0Sh$r–PI%Ep1,˴ c35F-/Q ?DžuNq5Gwc,΅\ț74&EJ2F!2CG"gOxf˟X9d<\4tzlΞҌЪ&hl[璳A1 ֊9д-eQҷ؜Ӟ G ٨DgG眣L)a)^bRRz]GJ3WeyGH@,)T=vyd@E\|I]곣ZN´Rmϕ0 ZLsu@I)32{QZF P(|0\aCmNNr4wMwoY<8G./=#zs|?z ;%k+c|`{O]ǚGٚIQ%ME6S2 +7{$sz\TgA6Ei[LCQ@ao:Ɣ0wAL>[ qe4Y7I?=;{LKCH !@g>czI9"xAa\0h9m],--^.;QZcfwpY/35mn%T_ÇD!WQxq~nڔyYot?im,fLuui'f︺˽x /ѽ,ָi4{3~cwFUbZKR`OLu=J/Ot-^6|n>pSU:.zF.4KY|*WbefdVN<~ k*ES, gƝPSX\ 7wIAB >WS|x37{h,1Dr}ynx;VZ1]jwR-B&-.u%==8V"I=2X'FBv{ZVN.%ʐBIŒL ?5THvtca<.:]ӱ@{5'cpZ͂yјdM|aMS X[2mloo)Yq3j1lmn38JT\de"a,5\۹|pgM E3c^w9]܌ϗwo|ぇ%DɋW)ZK:sQ@Ք%ՐiCa~j*)9ও:AFL hLHZ7NvC=(sABg"t`5dߴI3Qͨ-QFnzWÅ8hyG޽g=?=ϬwW|h}b(W+pT%+{ue}@xm)ϘLx 91- =lYx.xhvv(Gev4u|v67w)ˊOPocgTx;)S7}虎'(}<+O硅'ٔ4@YXc 37 ^xgE61Ypz-|tu5kc3)cΚ)\5|tcc &e/=떥Gb3Rj<'{> m~gwA*>10՘|&QH]/C{^]V;_'I.I42;h1yLFrK OKSur"K,C8K]^ [1(Z,w;-2a&Q̝K(Kd\3̻^ӲdSwl{'\jCzQ[+|$m )i%!i7 -ϬKen_q -U__۞L|ij'?N )rӴf"yԚh*Ƅ).6J$ ab ߸ nJdm Fm9c00o` fX66L `mp8˶ʲVV8iu*ܺWk{oU|)1I0ԯ̧W-ss.ƸH~ $y[-SQZCO)i*4m3ܰmW:@R5^.-nQZ@g=-CQ[qra8;|vcwl]R*×H[MV<͸wmsNcJkv%.K?N+D&[א |ba ӈ9 zFv RkB!U E-m5KWjQyCU%/;G?iNw~߫8GY8.I.G.W|^ 1]v8*P֖ e^!C_3C'yR? ! ( MR5- 9u'?H┤8WF8^;1Mz[P28N|*ԩ$qc-4!]ﮔTQH{=ret΢TJQ4%/& j)1ȑ(C mttqUpX[]kOH!zYb}UT^g*:dzЧBF] IDATs[J"F+4޽+z UU^[t@ JUUguYEYGԫYG4>rUI7<0dee0*IN]|(VtH˪fm/8(*Mg޲ 8nG*{$/J8Fn18ʗP8$B! "$u aStMGlz#,jD hM1+e5PV.$V2M4gyNҕ [PYޕypUWI(5ffIn,$MkQ٩Y8`iy(Qbvv 4҆Wi9#UYm D@4Fr(J;`S)Vs"}KI(fZtE$]\hcó3Y88w9'WLuP4T(IPR`m]`& DCX׿bcʃ"b5eI⥙:|XF&W:b5i |0ڵ Ct#8 UiI-MOOr a1/]IxB}C3_7|)ev $u|( eYQ9q`F A'DA@k[S-R_A2H0;;Cd)5Қ #7`jFՓ3: " BJHk-0HlyEvq Asj˂$p>pjŚIl0eb"|aYFI$^Wi!/a|:bPV03ܓ$I|b%BLFR"۶2ڤq~F5$ (bzjʓr)Iydjj$IeZZ /?&D緞Ը8}mҳ8@J*GQKp*߅gDzƌ~Z+ #ռo.6CZH=A!@'x~ |h6Yj)bm W]~9w}7^r)i9Qyc HŨB@3>g>}qtb}vw70Դ՚ Gηp$e_t@w_(CܜJ9ܳI#PDŽ:DUtǙD#gs1hsc$c萲< |Y[%W_[ﺋ/jbICźeݤ仏ӟ,O?L58fVe͕W^A5]}WZk^yg?=EuUs+y{YUg(7.6TT;A;ACy=?}Vd=pR\}Օ/4JtsƮoIꎮQKػk'EQ#ziʍ^rQ3-o]7mDacry֩1^B; 4NbrH׿m/}}/[lA\s9 gX'h! \ky9g? šZ]/+uEѥ(JHro =3i;Nfgg)5ͬ5WQvѨ2*/7$iLŔ$vl;..̝fܽY_o`Ή{2**@ru:fF1\*O)"^A1l&A^O6\&]QLnEIs;f˖-*wc=8<}c?~ϋYVFoGyg(޺mol߱Lw H[føՇ1dY^/#nhH@@~gVjR.h=%G=65gWh;XfWVi=8NYgY*ȹ+PEM}Z/!82Ԏ$gw7;wl~jUnٺea ]"kX棏iVu"ZUb-4(:HqN]qL2=Ec6{Ѻ"֮y ˯#t&6v4B'x%GEID33wGzɥt_K/3yh4J d,IUz7FVENs3Ļw;K/%{U] `k_%{_n "rT/8~g .-o;nj||K3M]yvk\ԣ|:\Mo˷Ώ|o|B;6X~Ֆ,qkm)X`ǧ}U̿ɱ㳟G̰rMnq*n綠t@9l6QNDqAfѱg+_eGhzU_U^Й_$z ChvQFQs"|~}iėr\ ̓]!y1<o{ȢSCY|T8 |a8f]Wb>c혉_<,~>n~&:_])_$=h<,Wf33CwхO^4) Ǝ{_<_=hTߏuY/tK+2}+,1m Qzʡfg<`y=0_w+xU*űO0w+; + "k+k {EX.O7'3{DB9n7CE_ ^FڡnI6<8cTseWY}~gB!_:c\Rĉ4Tz}k_e(עe=ߋD_86a;|G|Az- "{5gxi.nj,#Tnts"v銃#}U'!'MM({>=Zch%h\5U4Eh xkݡg0,֝h|#XMY(eھv;cXV5;C,nu}dda_ {muX a,[Y[[#t}OTc}l𬫬kf>WJ*BQ8j>t'N-0Kڹbtњi3(ry7!JLw;<AfWV1O>AI_E!Dx @}ηԍ78դ5={j1O n#L Q چ`6]Q<} =g'&ݺ C|jJCmFD7[xKocpi cM9V_{ŮW:_{ۡh8ߓ<(K֊,HT2U7/kLp,6H@?k_3tNRVN駞{ip>:ga܏pѬ,)tN2,pptnzP$A4`ǎ>pHG88Ko,!~􂩙Wd+EF u`zšC`u}>A mgEߏ( #1JbF Yki|$^+ kMCT!z>2p:wV`v}xEY(ʼz<-qH f8vaj0by*3VWqur2Xq)A*O=92  9Qp܎f,%Ɓ2lM p*v%sʼ'W>إpmIdsC2EEVT0p2B[/(PIc<#κ6(jie#V,(]z}i6(e4Ŗ!&;qlkIR}m@86(4H?7[Dn|ٍ jmq\Otm 2Z+뢿na+m`#pj:)jtR6tx7*wrZKΕDhA8;Z\Zכ}kBLL VlB PTevn#Z^Z1I尃~㻹 7|q2N;bΥp;J>V4nV?s>;Ы3vUo;SP^1`JWdSy{܅Y^bb5&AA;LF|)lA*]E={,.nL^ 灷Y3ۮa|Qh25hXl#Gn&FoͷMkwƽiL9ؼG!f>;1+`&\(ޒJ_ǵnCFɈ%#ޱ :3"_b6Uͷ ?8t{"@"jV0ÀqdnkCY37Mwjq{-#8vSr]<5y,D IDAT W_ExEr cC/{,r(褠{:&(ת+/#bXw $ht˿Ѝ8 K6yF#($#atף^9]9" #w`]6?")DAD8 Ja90$ b0" [nsAOct9/7t tkDAHOV,ݷF|jqqch$#\ȋG~#~yqۅ(]vfo'>u0?`{fMuds/Q]luF1UXh+O%4lDx]5~'ζsYN0a~aa$M3ٱ~vgyov]#kO =8+,g zps:Pb"2`y^vXa=g=t8ُ¾wkGN&D G9Br4Ғl1xۯg]rZ PuԊЋ3N‰=6.keBe,Zɛn`"DZ 9q`!nLU\}9{?#qUv ;5uځ3&a],5zʛ~V_*ZIf4>'ζw}8&Uu!~l:IE"؏E^[fvb8Jkj '&Ov*+gPss{&^wQy;YZ!¬O8z^f>EV<1$FUQd9UKohi]U8pfrbjwas#I(ƨ ,,]vY3PD:/z@bq64|0g-Hvl!j"JTGo~iKч;'濴V^IҪˋ|z)Yk)˂('#9}11ѽN1 5"/]vvYTCaY)d;<ߖ{v3/h:C(TE/guyyѿ ( CJ oCwsIkI WtWڎ5S"BXCzR!"CldWX a<:4ӘTq=7ҽFS=4avI޻77 eRAWUIh$U&'zzp?CxKmco7bo޾!Nb2aRz1,h6NI(ȋpAc&䵯u$|Ab^xkFsT?r+[ S2ZpJ!}18 Y]]-;P29k<TX9+xÎNcGv7\wnikM5?,Z.}fup# Pds8"y,-:cfi.xՅ͡UFcBvBڞZ'ƸC9yj>IU2, VWÐ|3\2XTPUNUUᆹ`7aiisѿĩy' Z+;`")X>,Y1Q9饃•^X`X DDY$F[l:mk@UX8*'FrIX-;:J)taTIhaDU"wU`IFwX[_8r)`nVҠUՂ(ܢJJkE+IKJtJQPiCy0D+EVHAH(}YQ+81!>R*ZSMi/ C L6_.I&!,eW/ (rFđ[RTN(+d?h0(v[j8"MRQUeUM(@)4eUG:c@+]eey g#q)t8$F(g68*(m Cdvmt+ + $ag9"so{vOkg /zhU&l4QJBkڙem^ܤđ/4FՕU85jAiAFQdJW&9!0 YY]vRRfl c,i`UW&ֺՌu$Qz{z]IQn)'X[uAVQˢ$/J"HhL2>;;7G ^i,hJUhUX~y`@F]F)BR B)eQɈQ"B$NVk~^/l$M{5C~-˂0HJU4^Z\(WA)t۳.ҤYV5^ݶ&I,Rʥ ,ȕWcc#jW$ *ܢutxiR%etcZHQhZ(mfX65'PJAch$34UYK{e0==Et{h[zy/'_XqҙYtDJ0,u*qPYW\f ڢAHu#. 1^3]#ne|LL;_Xi,+>p.i;㝌?,?Q2k+^5(wT1$G*w=yH(L-Ky=? y-%?1&V%HlQ Tdf2 V:ܱmkf\sǷoaot˽ 47meC7qP,_ǵG *VU7BI$3S-ްuEO."jX ;Mk͢-,:P¹ F+R`0x A +((Hk,Ue) u:eY GQtkv2|2B 5~(_<`V1 3Sg lpE+К$s|k](pwodYg ˎ\ԇ?_) MņXw; ı %舏.{s8(;g1ZO.[eA' !_Hu#]T$O*Knj"VsEMUֆ6R&׆/-h6 "Qy9T 1o޹mdW =e|n~kas.jNvRw!@1GaV\ Cg _^Xv$2p0(HY:Aj ɀZ 8Ɉgn_[g83UG\Vc;SܹmfͲXUI{>ncF/s4Xh7;:pAsQ (e)*N?\[g[e4AUg]mZ֔1$Nkg՘_$BrǮ-(eСcC7# c~\9gn?\r>iUbJFQ2hhr0Z *F}:,d8j\k}8҈}^t3'25eY"6y)ȻI35բbk! =0IQH٧S9+ 0%Hc(5ڥ*8x6Ӿ傂x$uY_ XЁ'!Z wp*Å]zMw]4^y4rKHa5V,xQI/J*D@:_\H\ʊV%i$=J i(VSG Jwo>6s'.;q(绶GN2{,h%01|its.wsWM`|ޛȁ c"R.'!i4?u0`Oc0Flx8k;u6ʩ ɠ[R򉥶J R.-l@`Q>pdJ㔶67M{5(1q|sygM@[:DO8޶ TUIYܷs3W.dZ7=;>g-}HB ZBPxF,& "6mU+UU+N 8 $$v Zy@`KȒFь4;]~s޷{Gܪ޾o<Ւ߷?7'5>ҹcbZC5j94/2<,NDk s-rO͟w5 in܍1|R)#FY;3ui j^JOn1Ⱥ*Eݴ#@&RRQpb.m]]U\G꺒Tpq,C ~X%/|R/9?01^_18uw]=D9#qc^b/{S'VI.H{:c IDATV4Z3~Ge4~6܄7|nnW45[H6m=6uzNq* Oo~+KWԳ_fB`.3%$H("}k5Ie*SG+[QZ84RVpE"YmadXj', !tCQQ#bDe&J `fe#k#>eZG*a17,a8X.W Pydc+2`gk|jA1':+f9R DE|1dmĥ12H"Q=BJX,5 1FvRy2?nfS%{2:kw6!oR3e,PFH-Θ[>Ru#0puaz-&X-R\c;9꺌yM&-Y(Bv=cNXeOI!U`,~{6䢮q8稜AYUI9ޚM^Q'b`#aFk5|or݅0ӭU{,Į[Yy)Ko HTl*eN9ǦYKŒkj5 0m65'):[֊9 />--ҍ2 R*($)h[ l4ʠTt]0 m' B*F?C9 ؛i'Snܸ({3H$B(eVH9c6'e1bVNBXg>fזdx9kb->3M[WcLy> 0t=mӲW5Vkk!e9b2vww b8b/d;xYcg;X<, H]o 7b#k)HZѢD]K)?U) jӒRBcqٶ9R9@c67|6g#q51'& 媼?ɮ닪 /iJ]*ȸY-7f3h$]XwRlNʴ,E#iJ&GQ(H9@hB7AIZHq'K^. Z^FW iUF^X$uaԵCH[|XdlX*V)fYWW#ڕ11VH4dil膑]W]WIC+WWT0Y))a2Oj)2i'6+j8z2( %ђj{TpxJ؂x)QƲ9% >e( +u8b /lBbDk]z! .[*@>ICGRp"mXڕ1)&)C}M3$jKy^nST cMS8!"Fz-KңM9<:HI,"VuU"ai !y;kk6땬Rr22Z ~ B2r# ݡ4pS cU9gH(6589nV+%hqtDUB@0I% يhGOLM_c`^3N!Vg)Cד 3,e@v%u%RkiꚌpC4uNæi!'$V-I%ΡD>6 rUewyuNͦ:Kb]/]Btb4$۬ s,FM`BiYLB YXՄY-49M/iA̷F焑୶NVrz$y!"@ӶbeVhډhV%xm]SJ%(FQrV3{׆ɤhWlȑlN9x?$QZqQFSY8\U0 dYC\|bfZIHRXW g5]l몪3$\O䠐ZbZ UP\8O)4ekJBD7R]uƑv2XCˁ0i'bon B (FFemYWM3 1sT"sbS7$؀x'&n] .8[R(*ٮqD1ƖXi@l6Lgv1KfRR-es'jl#AP2z>Zq:io;S1o~!WFiL"+ 6ЊKs[D-gvd-I ]'/zUad9a0\6ݦ,ZJbha $ŇCk _ai(/mĉs뮙cn,9W•/^?=V>iJډi;!HeH\)`Y2/n۶HzeB@ [Xm0|\^b<$L i\z(qX L Hy^!\o.jx2m}^ RflRU5ЉQŤ-I7"]wb]BR2% p>NJGƍˑȕIP^we. )cTmHW,d57"_?K<֍|n37vMɃvXümPU<+\u|s7Q{_xO;`,ݦ۹!o'LT*oЭ:I+%hIK?D[7 1 0=fϼn^'>4#?PC?ȓ,)3^'~).{~t-/W rWpv#/}3U~ :_Mz\JEUڡ ?KNb5R)wCQTZA3iP(=y/sߤ?}:P5-Zk*!4& #SkrbLZp}];b5i+y}Tяe͢w1H3ۂWZk_idUUsbF?t F [+g9 #z9!dAV6P$lJ~@+Hȿ^=ɺY7^q/o6L&2OvE6&5M's~ngBT0']/(2խ G '4m+RmkB_voiA_dS7 rb>,T^;0Jg 21}d:V5߼7{Ss/26p0W|uNnP]1yl"uw_DJ 3L̑yi!O{k/_=ӱ]WnRx{p0B13}| ӶB(ZB;K[;VX}?@ =U0D^Tu?? c#|z!uLooiCe?9!k Cn[1\_,^ZXmfmiՒdSVhơb>1i!d6eS0 Nn ئ$*1cmef,tqP<~꥗ys5ԉOwY~ew 8Je)}FY|7_JgvmX6;3qRe1f ㈏L Li+-F1M,Z#>PXM2º2vJlZTZ*-d[/RJ[Վaޣ|/#瞾Ʒx=O|K}/ŊOVn$~e"';>&~XJ7ҶG^z]rLOn:>:E֫?q%9oo,h攴r^ީBlNX8oO> =<\_iԺDN3Mp2{ߗP Zox=hmtR䵎~TM {mҢXei-/X[&- ?UlJ3ŒXg\AUzlU0 Ae7g`J9:fm -jLQ6jGud,'ذ+][%^ȚÐ{>Y膂ikS9zpl\[/(ďˉMF0\L'}S|@`eHu=U w"PN0Zeú cgZפvlT)C9D>T G~ |zwkoݟ_)d?;@~<>&ї\aj &kl$j{[l Oudӹu$Jk qΰ^ S;8|hI,99'AR[-]7g;ŵyCb0E7upQŁ2:ѺV= q[Mp]OB$0lYD0Ȓ"-\eF(V)ejmx309UUѓ*4O#f:n("e9̈́3zMPՎZ>AgpMk*jgeb ]׳銘 /-cE52jQY/cȴMCF~VF]'l{&)`0D_.ՒEnuOwR *֊+_?\re~p]oo7NrK?wix~ͯڱ%+w_=4DЏ/%j^no|[90~ځLRYxʫ]pZs*;.>:Gpha`Nhţ[5uEAXo=U-e77]ϵӶ`J; =lmŇ6i!D'_H4烗ssFh)-ef#Zd!߸7g_SGL!nǑILSBEn6mL1{Ua4S" 9GjWK)+T5 ?>&w{=^M۶2"IrmT4c޻M8漽k]fY2hKi#׏|і[~髸F)s<_2篽"|`Ǘ64*7_|_ 94.{.q'A>)%6C'겞NkXȿ8Xυܾ?1sSK_O?wXH4R>f[Wʈ7evԵE{[I|"P\ "ë 餴±)\q}kyaw' wƦv~ηq sO+^|xٗɄcL;۰;ȍo[;0  ued<( ɴ,v$ǀ5͔Ֆs,Y+ d F++ˁ?'d:'#-A÷~1Q=MUCMHqq1YWV ^奌QiQn'+E O?lUE+daRU$rPT(#`#tRԵ#M?_-X*|L篔N ulz>ϡf2i+O>YfJJn/>zE1ngߠGb6ֈfPc5U|˃*2HE-zgDva ͷ2';?xyS9qH8{/ GPr"EPYU j8/@*K IDATn+{ɡXwȉ 6 0$Z㇡THUԵa'muCQ6w*F+ꪑU6WU4e]]+UPoM#mgsg;ڶEiC?x咾IQdцg:]rU$U}!{~.Wk2Ru6%91Sl$0Z*^~Ή8LxԎ[B UV̉lo ;q %hQ@-ŦWFN93rkWR75ϟȌ7ekNmu°J9!]ZmMFїml6LfzMߕR$ʩEV D;?Nǔ@*a@ rӪAYGQmgHc-r2iжVGqr!eƾjIs¬J8Ì᧭153-J8Sփ叽 fND81Jt:!@;Wo..Yux))yu0-Zq-1%TB*:mb1RL&ҷ EUƻ1%ERdJKsH<::"9 Kr.I 98&mKΉ!%;sƬByxV5$俽X 1+ʫJ(aETfg~z'g{pFjJey~{88٫ΌS6pR-yE&DC?%J\Dioy?ݼ51NnJk'CW_dR |泟=uz/g&oz1mPvP5,J%H$!Y|2uI1VPQ Fbq/agQdpڹpo}3xի^MӴhu0n dlbyӟ~kjѼ==m<8v&RGقoĎ)<{>>G=)fA\nqDa*=3/(JY!xOӶ8#2O9o#]N$-Q}ZF1?f-/LbI܈^nbXЋ:-{CO]9no|;洒;!^j{{s{kɿtoQIUgl!u7jy^r7?zyQ6~Me*ra [ssb mTYA'RXW7{~>!e^r…nҭGY3{_ǡG;鯷etjG [+PzyGe-]foWtBEޢ*?CO+q{ Ps[˂*pU^{O',\B̙ Ïe2w4!/O+ڗٟO=7!1N}IqJ]5t {!+~ܹ R ֏q-gY,V(kuyeSQB s0FGqXcan-ϟgX*; Q6aII@b;o tCRO[Ju{MO?'<RLti{ߟ3x">r7eE4lrZ>L+xhU|sAeqguΔ^)mB-!&3%3z"XoU7cC;=aI aMPg:ߛ3vB`{pn Χ?w:y2>c9FB2@;itݺ&Z%p^|\rbYȢ<u|]Sc'z:E`aJ]<NH M`>";+{v'z)9^zm.uSO\P@n|ӽE]t~zŅs*yk#&?[7?Z< p|˗HKX^Pƒ:^o#"pPL&( ;1P` =6] [^e)c!)CsT"h01x׾o-4O?~ix*jU/E˳9{l֜ۛ3vmJљ^{ww{ +O]ktttwKnc`Zq٥cLm*Ф) lT)O̸X S ,k]/OV2}IV{{sq=yn >R\#PY 01I&enR닣NJ$un{^Ew]߶0L⦍up &x| 6WaX㈩+ٌL^[oud"AQԴ藷!i=8Wb\QUT{3.{/׼[u%$f&U;5=hQbif'Z오$UF6q}dV`"Dh UB)l[m ~u#|Oz/)Œ8Oi,կa7}zfh'-Ȥ#倏IV'ڶ=Yb'|q S;ٜ]-[ oBəd6ivuIXdD5P֒b^&B0A*Xo:NJ`c`X'JbMǽ[f5/*ܶ1dX??nN$$ gg'kiۄeެs1Yϟ|O=K_ߔ򘻁 ^=88~c4N%XÉ)5fә ]{>A/C0ϱy:QG?BmʍS-AAs XF a{jwpys3oøcDg> ;&%e,e6W웝3"W;3\q] ȕәGG> >/Kp76}y6Rs/owM:;FrRLFlTK~>AR͉я:װ_(>Fo^ ZvT8WbA*}!LMc(vㆮQYO@U~[,yv.ZV7"~*\&spxxКI+Ĝ-'1gy(99`ߧ+ngjOw1Yl-p”VR?ow=)o|~ߦ\<a#=E~3ϲ;TDHYiVM--7@T04MM #ւjVЈq*/eDQ[BFYCm:9}]ե+]~M>;t֓_gԿ3}Y?c)@'' Wiwd-s'$\N]?A_bgYvo)ZkbwXg5D*qVBbLZl}4U#k.A)@mZT#;L&Gy]EOMm"RW2 ԉK3m̖z祯'mTTquϒ~ Y{菜ƅZhgAGH~9փ~$/S0>xOHJK$=\ ܸv]fIJɘ%|QtcqV5'FlӉr !LM\o1t#/xI)Qd_9Cwq2NL|~sGdww%g~]?#@>L-VJgk3^UYSKPG|b\R<>t"J!ev1}]UDcx3,c>{1Tʚkev.C'[HRHI(Svojn<$7Yqvׅk7U&֘_U6_ &3DΑfZ3l: N{7#a?E哎݈/_Jwic bm ciZ1kTݰ^I, S3 AB9F)ˍҨu…sI/45DX-k[:cj>A?;͈j@F敯|;$8稚q{ܓ8|c#3c}W`<R*||>FF xȾSk<60vg2MhQdQʰZPS%y=>x)3Cg$Y~ݶqO~_koR7?k+=ÿuDqIE_}(j~tDz!/~Y'j(N#cUE|V& WzGKpUJ^LRB)CUDFlʟK)bÙC!(C@S%)1hY\bAzSt=?;埵>/Ce5zA;)f W8+ݘ3=ǿ,}MW>n9">0Q7c(E)DQW+b 1H,ȘmK@ E-`#~q֜b朋kM.Fxz%et׳/{OdL5`3lNNɘ2nUbu"'hkJ1T+JO۔ipE4ώmSt_yRd|9Loc>qv`PS%3YBvs 貽4D^>/ߥ|ٌ[ >pݭNL  %)q IlOqS+iZQt5UޜDՕj4-1&J~"ƕe2g'O.< ×,kd@;2><lWN?BOo'5xm7DڧIH+_'n#ќxW>~r 'ޕaN(ϔ2Fi&mEJN8 '@ܾJnrΥ'ҏ *b6JR4 ]75{rב q'7՚rUl+\ݐ0(wpZC6{q>V;RٴGM:6bdZK؉| gw_mO~v}_F'pa4Ŝa 8c]R?ugwktUS܏sC#zj.0Ҵ_..JljSuڥk ^_`F1kL59hqJ=r”@CP;dxs\y ӻ;;v-sAwZ)aO+>2ҭL3tg4A}ݩI7Vi*~C_[Ař޽DgUUM0}@,.UŪ|ܢc?459Bɞ ym]ab{}~!$U ܚq@B便Hgwǝ_`MEU.Q(MbG?ASPO=uQ&GO,Ȧ_.A]%V(mE%j^nzPu+O)2l,\8r A2ĮxIf́ՌC/=vYf:֫#Q ƀ!+#B I;aRO~^#/FYmϊGTUreBJTֱ4' W֫giȷyw;ppʩ5>4En6=1g*+ef/KΟ;GE^R['K`F!#t;"c,$"g+ɄCRAbI .Zn|GFIpmH^z3c3āQl6;5RGx6wi2LZ. wk$q*{r'G;N9g.,+#6"M@ gl6;'=B+1GApBi'v4M8cd %gsJyY%29fMަ#f3 LvR֨mlߣ\ט&հ&%BSSX<ʧ熹MC.N_MBLIM{cJt%Q)k7 S⇶S$4iѣ$Yu0;vNA&*Ww~ð572' &Hv)4zҐ{<kxې"nv}L G /$S`]& j _~ksі]g}o{{f 84`ClY% ؝x& Y 1C f#!4IfLV30S:e˶llc[*T{ {?{oիt֪%Ubb&{q.,59b ne)!c,[XkK*2rJB*[oa-)%6x(4BVmPMEhTR\"fƾ7;Gwwwox3=6w(loϱ!zd!5y;~ zg{]cdž鍽Cؽ`Io+9Zk ꛥRld kr6y"+I$ | kb4aKY@Hrl>Xݬ'ЬYkYmP9D(f__#u_[7{)7?SY>G/z Cm"J5#@ :DBL[6FY¯wLcn,g;͗X/l|$Sbp˺3)5#|c*EMi Ɵ{;t_":dOn9:;*T@P&sQȉM8@8%%l:pMnKq=2e/^ *-Qc=30'#mG k+_I2PU\(ZL&sd YGvV)ӟ-m׶PZ;tM IDAT 9J}%gc9|nm]B)"%JA SƧa:|,Tf @H+w)h( znb!pkL璘G Է)$gҺUdJ ՜9)+V9^ǔR$4Vy?AU18YD7_Ɛhf%LA#c5R$p e5B Ia9(eEOJ@!v>}%zK 6G;` XK\|`a}hێ2@.1y "Y#x[lx, ڭf2|/MSB$̔Z2\3.'Rn쐔\{&ʵPz5>r'b;;|z^'?<.tn|m b(o`E_lЋTY̦s/G^5/oݫD[swe ;VOmpARo*mbAKm $4 )Hj[fx7|{{l|s"Mp/:#_E+k"u޻F77twi{!4SP IJ Q8Z ?< #Tc[K]O4^\h|mS~^%K$qՊ|I~zͮ)5a݁V`@f\@b=Tٗy'}3-K_٫0J oCOc1tEu/n_Jm~isL_D{zЊf! {{xA)iz$'f!P0@)q9Tm $r@bs3$v-F F3ʸҗ}P:rJ읿z=gBIt6m_a|6}y+{^Aox} _J !LF#T aD ~Ͱ a7),wZ,(P 5 T/PjRkJTb@d`纁qOc8eE-#%Kt]w)k/~啫VsR1!6z^oy3Vv{P7ӒڬV2wi|!K]8:y4_z7 l>4Q1.x%Hj|s?!%ڦk;i0B,,YT0l`yӧpa/]Bzex6{a5g>#_SozӍ1ANn3X{ɇBqUHk \>)F}<>o}ˁm[߻HLڢ[dLckbJ]U*4'䦤;g[`5'yu7)'`5LmBtaC NLG$GIW?iן|" ~O}/}1N>m~3r\z" fU90*~(1|X|8G|`W!& ѣR),EEp%j !DBaJXC%c>$CHJÝPVѹnHZr/l )Wf3kןɁg"6֧7J೟gsG0~K!A-s56->&ѭX{OwE?w/~1NYG/B4hYE"nх3^E R uӐ-#C;QSLHȨsBڔsB )b1`>`"!f"<茱C)Vuҳ ?/B`wK ͛7G`qunrr#vоAy;op@D2""G cZ߶.8ܵ {sLN&pyep_ŕ.{kp 3bP@@IUYa<|g#`m_e,v19~bp4qR.>u#_l2=qqЁW{:~hFƄݫ{t9>3|Vcy αF vZeM 2PV% X*: V8(.e,sc皮FI'C fu4 w[_fԹ$FeIHJd@:7ӧq轿ݏ<$FPT%6! s,6qf6H( C(!Ctކx^CIatx Frm1Gsy]'pMo>E> @ :G/-|?R(4Z7r=Q(]lQ<$Ȥ;ARRsVv76@&Vym%pP[ߊp~DudŨ9xtI?87I֙е p) Čy ._6S[#&mQApM]/ >~[oFK[BbCMΑ&vՖDASl9/C|eK1RD ;d:;7nJ5jfIG%%-8,m~LƁk{'usƲ^b\졆nUЃX> f>}D: ,lx^Jng`6ۧGcB!`Y/1*-\,onvX>p??cBxIgeXNUȯǾ"E\G'}"䌺ntkiR+2ސ$R@+Atz#ȥ1ε ^hᕑx=4 l KņB bѣJiүzW ~g%bY \l 6uH!5|Wx>'>tPێ+{%N7+u9*Ѷ$-,چ"bڦb(`}myF#b˷L M,[08Gt[롴AQH8i]Ͽ,Jx8}IDfaCxɏW!v6Cx`yߥѵ Ν;k{"c @qVħ>x^N6F=K,~<@cd|S,sƹ;ь:7R#zjf>@BJKk \y Fԋ&p>@ I !)OZ @DEtǧ>)|ŗd>r߿@l<S8&kϟk{pL] |S_`˽9^ k4-Ν;GJ> &oz{4mkP9.%:#!T_oI&b:g|lI1n,k63!ǜ̴>ggk%*p 9jD}S &*Wӯ{~/{qx_#޻ ?H]`OS={\G?h:29k_#G!!8ct=ϝǥKW=@d7R3 EIeUr%Ⴃ^C&=.dBI0ڠn1(Ḙ3;=f{3DE}"#h}/>|1[PIyJ )Ν;˗O~):U7 _pϋWkBp| nFH)c:ٳpe|O}C7l,M9_Q%p#uR"XqZj@ E(϶`9eXmQm|ZiVqA+%d4zUJJ`\9:RS*3 I#e<'C?Cx#;oΟ}PɑhVbq 6X[._Ňxg=G?8(O`?3gqHg=pB:QuE;4޻x>GgP40p8u .( otP :P밿?5祉PF-F4sG>?7፸ y?3}㚚- 7+)'\~I|yfzB~?7x';¹b4yeEnD ʱK'>>%O2*"Ą2]4Frڐd81'5!:ٌIB;# cG9_G:XL6 DT+@3 !"O]w2̸t9@Hq#O|g8#BhRoAQV<d $eyA[jd8_ pA"'|>%2hшB@[1%P h!PKr~Hy@4Vc)14x:[i9 ,zPR:lMQ&2ҋ,Q%tD"Т&_9RBI4Poc|EXR-| O~(eeVLdd)@p\ [ۘf3IV"͍ גb YH,bc>c 0_֜#$h<LJg?}RۚL\.hɍW"(59f@|~)%\+H$h%DVf9TUlcpzoDUDd-$lMfA:$P^FC ㆒`HSgTYR5lGHd'aZ]`vDEyPddbYIInɑ/}̈ |$H b@3(j@ x-%q SRD&Te2%" WU)`LbN9WkCS&Rk=1s_zu{@2^<ʲ 5Pb8DOVP"A4{N3ӽ #;!D@9k#g$5K!e=GacqA\ eY;9}4u6(H/  jA,K1_IY=zuMBS-fB=aFQhZڲ],WG}׏i-5oeR[(9%DQv_*m| !b91vdRXPF$"gJ ""hMc \4_y9$\:c5&%BLkhP)m4ZJ,kYM`6ݧZiU ޷wжRy㱵=>0!S.<(E/R ]!j4"/r!\6hښ=xƢdY%*cgh-AaPb-@ӹFUun8آ@7'isFlĠ(4QFCby,i-> KtTc,a]䔔K72mQpY17Bmk: x< Z&Prc܇b$k/)DwLug_ x9k z*ki_2*Xan^!{.\ i ;Q!t !Q`fB?.//\br})-/s0#A#~=g~̲wk ڶAY(^+j\^9qܷUǵM/`'f|p^_~mx)D=ڼRIcRHhM%SScTP1!rIoLj]/ѵG 9mmAEnlƛxa嶣x|:ÿ8V#ňwv, S1ܿ=%(å_xv_|v;zRjߖ%ڶ5I)JBn;sXΗ0V?q )-q*7w<9=.F?>Ekͅ{vfg?5rI+;.6޳~6B,~gٰJ87usq)DLbXT7"@J霨'Fk6ŁF 9y7Z!~mkU&Y'G ?3 >zpg+!g%f'1~u:% Bz v,k:S@ Њ7RA`C};#\t?UEzp!v]Zx>I7<:4de;\qtyo(Cr9MIxD3\{ m̐bATa#Hz5#( /yzB`PM+'$[hiw凶h8֣8Yb?b}q6ƈ::Ưb(+r@-yXᡝ /?ΣRvdqb?ܝCѳuۛ# '6~c2k K ꥿argp 2$lA)IfyM ILlWշ-WjCڃě!yϺ3.֧=x`&OVqRFLI/nb8-%K[Č۽۫'vOໞ"'6b0X?ޟ1`je8h<%1Œh1sPt+fd$I7/xaǏozNAR!xFhC`'H]p#pKnPBE9b/w·vsa$$r0R3dY#8|(k;!' TU{{6 0';QUQk$i#~oS>t-tb gIxVEGq0@9N:IUNLPAdtϧqYTҹH,?݇}Z)s9IĶS3ޓŗˬ-o;~c?;x4& 6+Ľ%eAf8 5yVjܭb` RK|LkH)eJQDR\=UX9=~Y("G4`j}c?=8jUid(V$O 4= dIe6h])(fByF\SU2` iܭ3%)Etx) D; +%4A j10$W'VPȈ V1G|v>6a*Zf)];wX ,O IDAT^a`^7H`Lij1=Mauyznj!+ILsؚL g3_sd3bh\xh{G:q1-bLgxx{wukכ(CLȌxnλN]ފSCa7Ǘ5޿Ws\LDQbX@3?o|NgxhkwHW>>g}9:MkXB]b|Ga'7>O=dpQJCJRIܿ3wƏ] ϓ NI$! ;c-]. y:f9$%r*`읣lvR_6*q Z"eLFVxZA*84La A=kķ?/'[;0f7;<}"/:9ZS42F.BFBUQ4;(G)pIL:GolМ3#BGGTU'K,J 4QG'#4M" lma?cwM EkXka% QO%3= hۃ7Xq>0@5 PUdgeI<$х!8T[ۈ9@ shF>R= sy4݆g- 5p Afr۶RU5B*V&!x?~L3QOQZ hi8RX4˚2l:*=Y)5M#P B3o- !wsV$0l2:h^ƠPij#h]]l6nu܂ $wrԡC;B&(Y.JI(FTjᝇ6#a ٠%1e "ɐү0, rN1^pke} ,(v$< xk t] }9nA"AZ@@͐ ["b9K@eei$fe?O \"!bm:H%aB{"_2 !挪FM2FCkX7eXDB [!3SqKn׻^V;tq<猶LJ͐Q`sLTQ1{"גcRAN7dQjiC²(v-`!U"9Jk|L1BPp.%QXM<9 $cfz*9'+wϝ"# B *1L1 ':rt(JѰdle @$@ iC0'Ώd5m$*46uS&fPZ薏=6c"XR2)!h]ԟcER 3cHMgEC?#Í.<*CuklzҒDbmK:Uxh wFJLccR( e Az)%, )+{xf0oHH0Vk[B .8.X]i=C$ Id xHI먜 eUDZxORz=qJ*EYwYfvWHEVE91ɕTN J!(RDQpնsbE իZ$dbK]Kq>LU2SkIj`mI2K$xYee (@kJqf$ B.-}Y@@%#BL0@ C y$41&Ee-%EB<,75C~֒V-f(IJj:З!? hsogO9 2(GpᲃJLLH&:%c$'Hӡj:>r슒o0s3'Qܓ v QׂM-Tgq0s#!;k) CDӶ r%*r5eYT]Yiu[Ce.36A׶ )$ڀ)i\GHYd,ٛ]=xY]ڒDNHxY䔐%:&ܫ ]ؒ#"Fc4MRbi$ș|ǜqHJ5=U9ئtEn9մWB V1T)E(or6(u VڐSJ,HAKOxRB{1Xnpy!! u]e&6D>ּӺ ?ƣ;õ)>G_yd7KDPQP ,(cFY[C$nCe%,5(RG)#"m+?)EW-G4_S%qyRH@m+ĝj >fBQo9//qz!m "JAi M(K ("(ƚC/2lYTIRP) PNu9DREbF&eQ@gI6>VUO36ݲf˩H(3DKj>sUʕiCoP*ROG4}äPU$;@U8 ⟏]b1ӌXbX.*B`t:% %L=F[1mDtepG=i n|GfkTIv6!55Z[`<6h f%mF %ծ5ݛ2IR5X 4mNAy0ܳREG⎾o3>?, Xmӌ{e"0ma:墦׉D)&"bYeDY?x-"$2eer9kU%yFƣx&+ QVpt h̼d &$[XrDFez(U֙窮Ȭh1F[y>JE mٳ@PT&vF)g~xp2̛ohMü;<{l(i6$_z9%n)!hba-`eƂ'h0H~<A-#2 {$;#BVm1r Es=eB*VhCd@B)F)L2F|jTo|%)W9a|d*^6Q߾.<Ӗe_POxP@ubQ >GG!ETB["u%A.xWL*S:쳦}$/t~h4j~py(eJ(R#"nd[f6 !7$qXP?s- j|"jz@Z=f:g!+}( ѻpeqReJ|p]G`T )6--*]9\R$Hc0BAbl)Ӗ) sՐ M%3 ɩ-y(SW_pǠ}ݓߐHy1'('X ;xUAg$m'*Fy]C1!phf(&V5O5m(3:y &wD17f.f L+:%1P-14NAei4qI#xA#A7wK)q)BE9ebvm9.Ks@̂RCfbHΡk2|!BphĄ،utB 蚚UHtX B]\ /Gڼ.CJJ8VktM=,HHgwëLK2 3W#/ uc A+sW܁w1"x)&( ;h =) |;6֕6zL-H|mgC 7}|۱Cx'-n7 ) 4U<4O׌8\,!( ~#9,0Mgs{*'Rsu `@k-W z*Sջn@2 ֺR:~HB|\`$\d]JxK5T9#c2 M+<*M -ZrK|9 0U.RI>̂cƒp$D*CoMw~~2f)!grO- 2*{"z)7fĢ y (-EQij@sS=M=:jrHą@9v! EI򇋽lw]U;&Y2'•)_R+| p޲F |f?6kc,=OUٺgF$`66,1< ~ $OpC@BrcCb lHʽ@HEed˶f43}wszɆ<#Oz|U6g^U5*O׍F[*=kE% @4 m4WGPZ~"uU;k䦅9nZkoO E6j:ް$ TζutƣM N n7 :9o7G.j0UD5Ƒh\Vm5lZ.FSPQnKe XZcU=Ф ύ +.v;pkբ$uV2 \cN޻dw'an~Grb2J?{\t# (Fi4Y0{AZM EMZ#+L0 <QctBߕ[`7nbIxGu3]%M4,'%.ޞ`lQQrGLw7 IDATiUFxUUVYkFTQFh&EѢՄn)F 6,9(ʲ]=,K(%V-lP[r1$JjUd4xndtseŢZc,$Iv]}G˘*JĈ㚫_رp1)B*X"li_K%FE:*~$.$nNWs Cs.xC<(z7H$$t]Jx:D?鼴\Lb(ˊK`ЭBRK ]4qI#owr80"IɘR \gf)1A}EW QGR,pu5%iQhI_L4kƮvwG=[6x<&;Re07VD:1 9XEoHv:1&,& ш,ɳ>eU9J+E,v(Km;U?ϴ懓b2 %4.(y6mm:*Yy0Y *AFoa =&J+u3ֈ>;]5?NiF6GFQ%(~77^W5y7'Mh%~U+a.P>8/,DY`P*hfחkY%Pkkml<&ۤ(Ye]Īu銦Jp$_~Cds ]3)ƂOy<b YIS8A[_7h6"i6C5:%/IPhFc}l_\54]X\Q )lLzl<:iY*>z7u%M=sxʷ< s3 c%462Vْܵ~kgN6 2t:)[oy3Zj,dOՈ7JƢX[qzˢSIX/U"#KRjDяCʒ$ccSsQ9hЖu4΋ZN0Ʉ(XEk$xRBE Nzp] (+Q0b-)#zjE}[2ЖLe&Aj˛.0Bp$$X0WH@VQ{'M/"("]JP*=ZЈEx)}΍{Ñ#u&Jà)A)Ewyy)7<8齿?7>973y}s]_OO祴"z;^3_kDi$:wfxGUZ-+Ǐ>J9s*KBᮾWzőF[l79xpnVS翀M#XX]y̹q9>;v㫮d=}gk! ЀԆBfI z<-GңݖLkse~PE)8CpǮf| 㸶% Q$2da*<Ҙ?9ϓ1l7aΟ'Q儐7kTsf8}&="*]q I yG)1W,I nR -.Ӌ9TÑ,^p/~!p9fqK(d %O]Eo0.d\\wd\O3>r8 =z?rsM~ [ر>c[1q.v{1zއ;y3_kTbҜcn1|DaF84J$`+ƛ* ,>PUHQʴN e "Xd2/4ˢ&59D%x4kF:Bg Bp-ߨuΒdwIF9o3;*V$mH =`?vxA,NւyjAIFjЅ5y,M.|:taO\C0:a<dը>S9|$λXyV]h6YVepyY:_C7q13:Gьc15>yd;Q(.~ ㊻{M,;v L"liA9hwW}7ݛwc)*Ո`rFZh35:dֆd"}rȳ\ByCUz=˶ ^SUED.F![#`,T c]sof)g(>JsJ9Wύ3{ݟa<<_,;K? l(-msz_}Ͻx=Aɰw) gpCn-C{t^`A!Bƴ\2lk-}h67ץ-5DoteĤ#vy7#ϻuh)'Lg_זD ؋Z$g_mHPUUF. s&QRfu-JM3o4xZ>7?U .pϨ$;5$ufPb'(ꋾ׸(]8A :Vvy'q,~5IB;$M?c$]"o{p'Np0)]G{c9'0i{?i# IP{jS몓n;Oo _Rm'XLn%FV(É۹dR=9mn*]c3κZ^;D5zrv7 [nxE' MVk9O(EU?ǞVh0FQXSC%3Zؒ3^cO5ntBlӠITi͐UOK+lХr}IJw '=DMڶS ?uiEIьGCL(맼85; +Yl#λt}ҫ$`E[EYIO1d j`G_2/{>KYF1Fi,*?gxV:VS40ވ;v\\FywMYT o].hnetm|@P &}9&^wUT֏3sĞKk *N"!}-ӱEr#xJY?dR|щ侮8k*[PCvmrYz-,1-$MA+AGuMӄnVXmD.ILX7JH9.0f7{l:7faYm[mˊh4W{x$e ,g[_bXXŠ/J*J1 rz{'fOsC KߖS 5V% \Ecܘ)VM*Fc㷵ψ0D+Ӊ-jdi"d b$uZ}pT-rRȅ[+2QhxMQTqQAmzl+ DY4,9ld-ոdץu$}T :13Ϟ&&CBiʌŘ9^=sW=4>!("=^5}{$H\ Nq2aK};ŭ>z6>6]~o{u 'ҶRݎVԧN~_u3ʨָt0_Y= [y8?V؇bOuDPFey]q N55?ڷZ+Z(;$nej$b8Vp'gtx]5teZazxf WE61w0*+dK]ݞ b4~m9b79ISG#E uiHiPJ+ymus/=:̈GTinUSP *zyLm~>~Фc1O'WX=/Q[5li-7FlОl/Oגv;-Fӏ3:wl[;Wx(j<čH2;k[}mmwϞe|,!r{QPGYC-sLxJD &Aϛ<~,YOkjqyKQA~Mf8 曒9XvyHti|NaG'%E,MܿjR >0r8}'s8k}u\\'8kz|3ߥw|`i[79M쪝\Yu';~giOlڛVO~ǂ)ȒTPFT(2Ly^ҏEDw<:5K o7ǟ )'#NYfs,H{nWE?K,DϞ\\vIj_<,K(w<Ξ|fxz`ۧ[A?Va@[OsU3̜=G-tGe[RVgGc/L4%fs87_? xIF@DںVȱ,cڵ||(ʨ$#_,҄:zzb-J>y_KQQ{]}|lu_>ܒ~.V5*[f菱xJwI(k1&1L"L L".!X_UEB-y_CPOJ6g0T*у-m6LLJQh;4Q0^@=:vنex%j7ڽ=~; 6ؖe(exFW r.l80#`/\F K34ڹ/-bǣZ_Ǹ:'.|ݕ-7~,e]増G8ib5U ءuꊌ92y:Z'&У/֖D k0ˢP}e$ZHriJ(\P@3gP]vzZr㲬b"zA%3H3-WZG_{ɄhTUWp#<Y;[ 4O4k^0]A YlC&yFdv|G,gr 罍xMOWD>JBnc 62]/t)3TDù DS'EGA\࢙%?]1 >aXG<٧`'ҌPlR\;:7ǧ+5Jqc&yNuYt`Eem,= 6 Z^]Vų.`nu+6vTjmV۳: dq<;"q##B"Qyjy8l%ԑ<@aj\~}0<2? !Ɛ$ʅ1c!<1|O+4Q=HZ^:<$y;[]iQMSZHrq_"dUI{6?um$m3s=ŐO4(Қ4)"D<'2(p7eN^Jxϧ%:pƅ ZwfhdLT6y )sY)>p#hM1Fbc]q=T!ܖc+^'GI IDATNMv`t1W\Auy_8B(LXCaA4Zj $[x;oҾܕX1¿3_*BƠTېu KrcLx˧x;W:zK-\Z'9IJXط4("ʝ!>nF*L]U-x =q*Oٚ4g"0k88mh {H [r$ƈѤ&d:G/!D '뛜*Lȫ kg=dm8 ) -tUe *E]9x}z6#_wOG1GmV26>__g?Si~ߴ1J{v`^4n,H(fXt 2SaG[YQ]{%G{fhĠ fV߇q m!>:~G'$:*hb!κh-zn$fi_D?JףlR[EZR2t &w PQ 5u"HJAev"Q{T2$13_ʳ)sZ Α{CHK1Ga CfSyGW1lYZZQ\)퀞EǮiQQ&.u1So-KuQý^;zɋȯ f tq ? ,׭&D۰S.l~,_\;"I&,5Tu[c~:okq?TeBBB@ fW-U* TWm_Kzp砘ѯ^vDư:+YKUV-J.Iȩ0 !+Uul)(:N,ˢe2.8W쩡6S#c>>ӓR좿|C*g?G'x\]Rttiڛ^Moyju {wܨ>xr|w4"y.nk| eꕕ-mmbu{W^dڗscǔhF%r-7fjn俖=Ʊ^CgqQƵ( դg. `n{|A=b!Coن˙׿kvIfXwk?6uv<1.oG[n G>تq'|lx};P*b$Z1U]wk_5K93={67zyׯw[WҢv1,.Qxid 3s3>MG< {]6#DH$ ۰BtM1$T{n(Ep^z쓪|DmQJSaۺf UuA;Ey{I7zWNxuc}(}P8_^1G )<{d{i8H4VaR޳."Wpiutx!}Sx4%{{B}=ÿ޳._kbqyN=_?.ָb8xƱBexߋe\+k1+k0^ JX?BuQ,>kt\jKQ,nP\}S~p C{baԸeu%{Gr;XzqtrLlMQ3g~k~wE5.%U@(D9b(e]Yas]?u;`y'$ Zʢde}:űCwɧxpel-aemwt$kt윛ˎ^~9Zg8@믮iW$Z6d2!D9Qy1ڠu6ٸUS?o mqAB`jP:*u,&Q<3[676n#c P6&ok!}h(E6!s'A {Q-nK]bK=% do7;$sT_2 IRCL^xwpmom!m[X][kYOE.%Fu.f6_w3w~Rȗ矀eÇ(^B+^ѷyϊBNY T+eEmXМ>:+ !Q Mz/sYRoO_+&.XeVlpU;=WxGQw6hmWw+"nv XQU%c-\qRj[x4ۛªfc<ç y2r~#7>#QUClUP*}#-{ O…'/WZNImR|#g?ÇQ㪧;8X%󳼲EpuYR9Qh̟}#x9,n:O57;͙e{VWcq%!,HNlnn*jB^XJҔYLO766m])0I"9Xp&9a -* -(--BU]E?yha_vuW/o8K++<~1Rܥ !ym %~}[y3aieϜA >l;Qy!Vw/Fɓ.( O-*3#_z!+ }rS}La "KUlTff"](Q- պ@Q5>xGezݎ+KeIĝ޷F(|4Hci ˥zGY') "/ЩS|k_ p9'EuH'T$uwR6sm~0jO3ZSWUlnAv:<QmA`ऍFAdQ&IiMyK5FCL&E[t:q]ܬk`\)1 aY:UI_- }njXn wsBNW.H= ^R!Ʈ$nI^* \<8Z AuRm\&pz$))I2%Gq.h<yԚ4ZZ̲ ndd4!sIi}>"X#A<ϣ9:)CB,&b&ڨN&c`L7n4]-9PS&5OXG j&o-j#h(*y%%* ߂mB6?fttb5i?ɺ%&c4Cmguess=Q>Ա5$xw֚߮4`'Zlae5\\8 Q HnbYWjLtO|nX$a!ѬFm3q`u_[W7Xq!B xRh3٪tBXX׆V-P,~Sզi)6Rw8sB Nc ɤ=hnvgT1PEZtbэ)pD!"Fo,z"oYDƟۨi)@w^x4diVUiye PS)h4j71^RxҢl4iT 6b] pqt8Bes80F_J[A"ZPFql t;S1n Ђ_4.nc3Eɟ;B1\6k )MNFo\(p#iGo]=6Ԗx,@MIM+G]uU1ڱhD(o> ղяe)Gc:Gx>hExh\q 1ogm%mJjYoa!vj:!ћZ@J ǽ7u[$[vL&|e_Cå8+8%>;.x^79Ӌx >>g_C ?}aUFbpNk[+t%7{*6јxq۟u..g++628޿Xi@D|kyx\?w"_rGulpYSbg.d!ǟy5w#Ҕeu/m#,O ?|`O M,W:ȍza;Czu8ÔAO^ {cRx7}$CqG-dV]wEYᑖRo <4)kd` N_*Lj(wZusm_>~ѩRS_:o#n{ջ[K(mjYݜt;3`kpӠB,%>A[ݺk:~Šilp̧heF^UzJSE6Qd!$ɴY/yeBXHRJO(4p'"N,U5>zq#^H/XU2[<卒[AV_%{9'1r(tyzShՇilj (7)g%!:u-'%B+\* <cP[L~>~we(XΥ'Ե>M=>)7cYMtڟb?s]r%k'pS&Nƭa5buҷ ]vOevS-@]V׊ou**6$Yvm S-q큻ѧHԴ{ 'K3`+,mWG<(~<9޿:$SR*๯:Zi[ohoh7y~M+GN ߷0~l j@6x8G%h%?FBE1)bAGRN'{%01=JQWKDM?YGp}{G 5t[`|(NO=4S;G<0*& <>=֌]`!5XZ/DQx9'|9=5.PV cCk1 #4MZZ,G8 {a㦹W RuI~q㶵M.b %製n#\YFO!\Bd I`B%oxqheZՃZi`iMU} ?a9%Ft^ ר̨8n'TTUwxK"M/epr8IA=_*kS*4)uX`Ë/z`˒S=*<MDh@!;4yݤBK":Y6QZ/_GsbZ~ E4ъ2MB@b 1(T (w Z,B)RYA=YA/,)I<2>8,I߳w/rۆh#R)xa']k[FDL"PPp!!Z,&U<CJnFv;6'*B!t?y`+yKf<31[4Kq `E+m zun y9~f)&M 7~gVsi79/-ȂV6p1IJYX/ρ1 _\# t|հTsf[[^2򭝜&c|dJs H:+Y" If'F0B`" 'ӊ?o#I kڍIxl}On>o7ූWY [diSH])m\鋋nk}Fܱ9uN$Z։H}g-l ^W6Z!YMAi4wly\rUm c4w '7;+h{zp,TW1RIDATI✸8CUl:=ci?=_(burmGֆܹ>+xV'Wv4iUW)7É!ocvp r]gߎckHѐ(uxNz*Ho?Rw$2 GrFHo30 9WY227N@OkC#lc^?kǯ htq.8ݵXrwUu۞qL!11@Abdˆ? ;$Xf  $B,@1D`CGfX|93v޸ݷ{t5᳕!Ta?;|wZi(kD6-Zi5=Ũ ayZ㌿1p EC,:?ҞHzo_< 0Wc[o}W_w~('9&\^^1+},~3-g!X$Wu%0T^|}ᗐc )R,3?zSK 3F)\l}|a Ia8M EX r[@x&j]2SWg<l\2g;&zw%T/j(>=bdaM\wq zV%;7߆zYDԡ  d+%%XQrwc#B9q<T}qqMnkh ^A=jxcA#f@ёGRJVVg+)Bz9ŕ8ih>pB[EYa#Vg=x.}\R qzx !ᭊlEsGAL)&HSAB|H `6[Og%yENh,-Lf`Ǜ`e掎Z I@3":ܵi⨷F\ցV ů|.V^K;9xEÃa)p5GWA׳;qt.@܀5!5($$O;xEbJ@-3Vgף3nf~)4'YasVC4\}ߣH?ʑw&FXUz( 3&FUY]I\@Z bS&I8{kNI SV>@MYRG&'>9l&rɸtP/[+0:6 ̙mqG';dRXTyR\W=^d++2zΛ5P BLROC:Иu\en,9ɒK3Σz, ʌxThoz\i:,c8V=^_yV `1I-k_V(]ٶ㪘Sl% BX{mxS#k /VdY]cF@{DZ-/s2^FZhw: a&RFCU B9qez,3k-81=y!ZHR2Ȣd:g/ jD)F ضVMA)X(Rkb`٫18 uD头 Rp>#ZjS%ũ_>jBQuXOk@qP,E[BH)F8kD"( 9'<d\%oB)a\HMl2(1&he0u\Rȱ%5FA%^)&|#|Kq5UxE99⽜QN׵vǕX~ڌk{| vӎa:#?ƻ*\'%q k, +hafSIV(B(8w4P_T]X)J U 92cnZV[?)" MccG|Ǭ/)Td !@)HR-S_ZZ3"xY~/ @IPPm1cCU5Sšj`p]$sZX_.a3`x8Wc RN w0`ИoZ<'KHj iRDYmLKa%EE9 YkVH.b>hx0Q+ ƠWzXЕ" d\n SJmw>gWt^?Sa#%//  sSȅO9Հ8rbM\BZw"d6ֺYp? RBb+vR5>?$J&!r5MkimxU@E¢JV6$AvbDECE0 0j(V%rJM(*q߼4k*#ict]1v-Yk"d#^:ހ Pٌk"tDAmU#cLs8JAkr2U)viZP3B2eD)&I#JW"m~JgH`qas/.sR#EVnnFE>_Eնdkz w8?;ÃϽ/?Es'9i0k9u8/dmU\R`eF !HÀR8?*փqmuڸjgEa^e#μp,vWI71agFg}AZ9 ڴT` XB25M)I=)73ʘ"V2 dQ9'?q:?گQ_qo*O<˭1ȍ@F{.w<uݛ{9,Kn#y|w3۶;˩bkܽҮ\3aʻo9<&dDZSh r{m?K# ʩI6XTzQ6r#}7SMO]-{fm;ʽl?ԥc ~HzsPSc.C˩7Kwb7p.aǗ[\-K |E%T3/~oL?|3LNuYCq:Ȏ?`5ŷS J'Jlߟ)qb1;N<_n"8('>w}CNPMJחکo/pө}Hn}~"LG[ewOOr> yʉ,lP?ܛ?c߈O(MIENDB`lmms-1.1.3/plugins/nes/logo.png000066400000000000000000000046321247673406200164200ustar00rootroot00000000000000PNG  IHDR00WbKGDC pHYs  tIME3oqqtEXtCommentCreated with GIMPW IDAThMdWW=|8I$Db@1dFwh"(ƥ%(np% P"L;0Tw}{{_Uutld޻wiyvnKͯ^b.‹/ƛd4#" *P.ָ'TUn8ň ;HCH? C% ";ƣ|<n2g]租^6YPpzfUDH2Y T!{`\/`0R;"n'MO0t[z/)@* 9IT;8H` /`o% hY+IisC5kCD3C(4ED3DeYNfj<wO&A2'C9Xxj %~^o{jƬ< XG7dLh!`nN%Ʉ@e `y"vwH XYYjQNv=o=x4d4,fvT&ǔ926-SU];{iߺOoGy3ӌe`4N~LrGTj+I?Et:r}voNp0–"!D%,U1sZ&&\d?$pHt=k*3U b9Wc 㖪2=,\KmP  (Xt{W9[íp(j'Q55lO,Q EڝR9{qڣ+ :yhN[-*聺Jt׻ ZͥGh7-=Z^*G1:NҖlh[e}- 8Yk .cj8>ʭu R XdQIDR+cQ 6(N?qChha4wS k^%L$ l5Ym69EFuUk>ؓׯ-L-3*)*G4+[ !E1`LHU2ktKnI emm*gåDMFŅ薩-aBH<>#avBw/E䪹SwqPT̽>LC b#)Z(Enw׷xRHT V,NXNԚ?<R'B2i-FT$8&VMڝ:YH#5![T$p:z}Z'8ۭ92H]^^M_2ֺ\OoOGK2>f8 hZ `F%;٩+T1|(-wFر;fD¿tKRVSΙ ?`jT̨*hU4F#a~TbYd,h b44(.>-5PEAP"P\B=pO<Vq2uP}/'fF0=uFqѪy:7Nue ЬH/9t˼; 9hܵNXlwM7eY_e)! <,bUvy꣏|Ax=~fIENDB`lmms-1.1.3/plugins/nes/nesdc1_on.png000066400000000000000000000006331247673406200173260ustar00rootroot00000000000000PNG  IHDR ,bKGDC pHYs  tIME8ttEXtCommentCreated with GIMPWIDAT=U#QCo}<YRp ȇ4f,8Tf{IWG2~5bEwHBv[Ad`0s[hz>Lw`!|*#.`憻3!9(U 1U%lFwsZi:*U U??w2$2pwCYυT~S͏ 0gV-DN{=aiZ:m<fX3MK;f#IENDB`lmms-1.1.3/plugins/nes/nesdc2_on.png000066400000000000000000000006111247673406200173230ustar00rootroot00000000000000PNG  IHDR ,bKGDC pHYs  tIME8,9YtEXtCommentCreated with GIMPWIDATMɍ d7?a$^~`~Etmv!cf,0 UEw|>ѯO@:GT5Mf8zЅL"ᗤoG.֍y>|1h[`撧! 27U^?P VSuYIfq"dADf}G@Q=0ez+)3y0vEc8f _fO<IENDB`lmms-1.1.3/plugins/nes/nesdc3_on.png000066400000000000000000000006261247673406200173320ustar00rootroot00000000000000PNG  IHDR ,bKGDC pHYs  tIME9xUtEXtCommentCreated with GIMPWIDATEˍ1CT%^L&vq8iׇ`/$ߟkot)"LMV;׋k-T)dP]TՏ=ޛ7k- nfxNTDPUTs-Hd R%3L#SsLG`nonfc 03윇&X9c܌}]dK g)&3? n^dmGL9c Az9~_ߨT?lj|4UEfx8AIENDB`lmms-1.1.3/plugins/nes/nesdc4_on.png000066400000000000000000000006621247673406200173330ustar00rootroot00000000000000PNG  IHDR ,bKGDC pHYs  tIME9x$tEXtCommentCreated with GIMPWIDATUuTADt<.I`C( P:Cj7OXԭsjy; Ue@wDT^>4~?>iyLTeܝ}=.9'q ݐIE`j9*f" Uh7B "G[0ƀ t; Y~Wv7]QMFofwgc#1SD7UEDgzv]l: ]MuD$LcT*FQ]T&'x03;We&U/_DA<6(IENDB`lmms-1.1.3/plugins/nes/nesdc_off.png000066400000000000000000000006421247673406200174030ustar00rootroot00000000000000PNG  IHDR ,bKGDC pHYs  tIME,9|tEXtCommentCreated with GIMPW IDATU1vACWUCH|B]wHޓ4^~8;c TugfL1q7̜t_@f"ř"==18ao%Ef0̈9w03̝X0ƀ T&KIfX{%0sS*iLZ?T7"13󤻑DIWDE7$3>aw#%R%DpgaM嶺.`7"ZWU|u+ȧwpIENDB`lmms-1.1.3/plugins/nes/nesled_off.png000066400000000000000000000005311247673406200175560ustar00rootroot00000000000000PNG  IHDR RbKGDw pHYs  tIME#f|tEXtCommentCreated with GIMPWIDAT(=N0Ec)ɰl Q#j$@OAa~NS߯g /-J)\]߰GgbTwԄaf<^ !pw8=9bf0M+XJH[Ibt9ϜNGjI)j@?β,HBm$<=>x8Q̐?~t1IENDB`lmms-1.1.3/plugins/nes/nesled_on.png000066400000000000000000000011761247673406200174260ustar00rootroot00000000000000PNG  IHDR RbKGDw pHYs  tIMEtEXtCommentCreated with GIMPWIDAT(9@࿪y, VqBN@ H f{tUw}h]ﺃۻ| ReYr41]v:׶ )k21>t7[(u!I@DfU>J 3C5P1uosjE)EZ v{=l~>}뻛 eEqYa鲜Ny:Q;CVr6C1)teϒg<_%xPAU4O`JYKIt8jJ59FOkIENDB`lmms-1.1.3/plugins/opl2/000077500000000000000000000000001247673406200150345ustar00rootroot00000000000000lmms-1.1.3/plugins/opl2/CMakeLists.txt000066400000000000000000000003121247673406200175700ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(OPL2 opl2instrument.cpp opl2instrument.h opl.h fmopl.c fmopl.h temuopl.cpp temuopl.h MOCFILES opl2instrument.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/opl2/COPYING.LESSER000066400000000000000000000636421247673406200170760ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! lmms-1.1.3/plugins/opl2/README000066400000000000000000000047441247673406200157250ustar00rootroot00000000000000Snatched from AdPlug 2.2.1: adlibemu.c adlibemu.h fmopl.c fmopl.h kemuopl.h opl.h temuopl.cpp temuopl.h mididata.h 1.2.2 Sound generation section ------------------------------ The Sound generation section is responsible for generating the OPL's sound, according to the input of the Playback section. This sound is either routed back to the application for it to do something with it or routed directly to a specific audio hardware. The following headers provide the interface to the sound generation section: `emuopl.h', `temuopl.h', `kemuopl.h', `realopl.h', `silentopl.h', `analopl.h' and `diskopl.h'. All classes inside these headers are derived from the abstract base class `Copl', declared inside the file `opl.h', which provides the common interface for the Backend layer of the Playback section. This interface is not meant for the Frontend layer (i.e. your application). Your application, however, has to call special methods of these classes in order to route the data back, if there is any. `emuopl.h' provides the class `CEmuopl', which implements a virtual OPL emulator, which automatically selects the best available OPL chip emulation and type for each replayer. `temuopl.h' provides the class `CTEmuopl', which is a wrapper class around Tatsuyuki Satoh's fmopl OPL2 emulator, which generates wave audio data to be routed back to the application. `kemuopl.h' provides the class `CKemuopl', which is a wrapper class around Ken Silverman's adlibemu OPL2 emulator, which generates wave audio data to be routed back to the application. `realopl.h' provides the class `CRealopl', which outputs to a real hardware OPL2 or OPL3 chip. No data is routed back to the application. This class is currently only working on x86 hardware. `silentopl.h' provides the class `CSilentopl', which is a dummy OPL2/3, which generates nothing. All data sent to it is forgotten immediately. No data is routed back to the application. `analopl.h' provides the class `CAnalopl', which is the same as `CRealopl', but also provides a 9-channel loudness pseudo-analyzer interface for the application. The loudness data is the only data routed back to the application. `diskopl.h' provides the class `CDiskopl', which is an OPL3 emulator that does not output any sound to the soundcard, but instead writes all received OPL commands to a file in the RdosPlay RAW format. Patches can be found at: http://cd.textfiles.com/soundsensations/SYNTH/ (list at http://cd.textfiles.com/soundsensations/NEWMENU/SYNTH.BBS )lmms-1.1.3/plugins/opl2/artwork.png000066400000000000000000003443251247673406200172460ustar00rootroot00000000000000PNG  IHDRZ=bKGD%.L pHYs  tIME *.dtEXtCommentCreated with GIMPW IDATxڄymy5w 彼$EQ%Z$JeNl8@Pi mm]wH](n4@ Gi$OY-H3//|+I s^[z}]xOf#ɒ{4 i@-He+8n 袄J!Tc,)g-Bj? i1BfH1!F؝mJ9tA я 5J G$#m$Q !9{r +BBIء $1 ߟ)!zzZ 2xB fmoAIp=(.~0 0=B)vbN=FRS)"EhCv$4e, @H[2-")$Hq"(>Nk&bFi*##D$bl!z|A:Y"-5HAe<=8`{!'lmUp$i-J? y꽏/GYa 8P5sGx@XQ'2'2)5!$ypI)0.jMBrPHёbPeTl5'' o2?$Hxב|t[ s@Y@a@s|?!,&]ߝ^ǚ$ #>[T5# #H ܃8dYf=n0[Ѧ^C_"r8kB=^0%2FN6ҷ(p‚T,H1c.d h ~JGa)pc]!z `rwJ#kxr+J/sIDn{)c GWl!IЃ`D) oAlVӟ)$ COqV {أ8ȕ'p)k.#cʹ/1SҊosa؁w䱳=MrBp mKBz Jٙb!Ц 6\|_~|a|m0Y[RHcG 5AZspx͖{w=To7 U%T:BC -hࣩй'6 D*3Ԓ [coJ!Rhpk0Z݀vR'Yb"j*}% c|OF%9:m$rvHZ UCrɄZя$F8d"ܝNP\Q͐!9&m`tp<]gM$ /S22O>/ ЖО"D?`Dx,+ f8vs޹~2̬$؊hʲb C!R(IJQH;+)L;es5VMpX(ɇC)I [U~"µx,HQ-`q B5|,J!!5G+!Ɖ@,&~8 Zى%QdE ƐÀ%"M rm_/bTs`8e9n5F~U.U^뾅߽r9ak6x*) gB'խO(%9'Tb2k IŜHCG%,2H0y*g>O vR=NzEr!m7dS5;qMԐfQ.&"#";,5̌jߜ`sP~ yU-%ᙑ?˿"{ێ5,Ⱥ3@&:%R7)H"a-o&H+=A29Rʘf΢a}rzN.B"5Bk\~a?OL qz3n{6%CzMTeXp]Ē爔[ TQOqDKUCD m1RS6K;[I'KTT*!D(0%}7GSVw#HRC;bX|ޑEE61A#Y@00 >-IRBĉ ]#dI~ h@kTóW&}Czv@#O=.{_-/EL"bnSʆ  [(#I#mEr2y19iiǀ(Jx,1׭FpaOa2+AQ0e;#!i>lqG|Q,%}R-R^! ;Q5+# 9D3cH=rF $! $ -lБ{wִ$ f{I6`,R@rԗ?AfqD) dHpՕ9{ĝ2vV{{l7-iV, )yQFꂱ=APɳ^oZmZ}OΉYs\yU_uk-p HEUwɦF,1JS>:|x `lO)f+2! c{  XRql` TIՄzDjNN~B9H]#HShNk.PR1l*~ 7{+# t[&>n=bF) Z.1e8>[?羈6%uw[HΏ{V{w0! n$%2,"c?FRY2! DQp~bu5C@%qؠP-)[FD9g\ߧ0%-lla )^}Gv 6e[FB !Pّ~E,ϼ'/9?I31B}W^hcy὏4wt=wg/;[ BtZ 2 1R\ ]/q!9)I{af[>FXK=)˚qd((LSJ02c{UC[/1FfFkY9\G(%K<{erblpS#IM1eH~]@/bL\ZZꙥВ3Ͻ|vKgBL0r08!F]!zˡTRJt5:ml [rAwS* ~jcE3mGSH`d@ʠMEč-Z-VKH9(xǹu;)/]N^zDD4>I2tn74U,&#,Krxjj͹YbZyZGJKj(R \ dO-&%`6e P.qcSܙ b=Z$b mwc?wGO>ru^7a`CLLʧFdm~s\XEJE!$o\W^~ՂK{|SMA,M13k$ͬ,YFJ k͊!'R[8G̳bU(IYЅ߹g^nÚE_ < -*EI< /=/6( ]ڃ2l1 bl7'(%)<]#i{ tbӈaHI)$?R%ԛ.g; cf=b0S" [Rpyxub%arrzyo0@ #D:fKn RY{7\Qa\PNX-p`D )[1vq{)Src_\`I",G=?2Igx)"T nIΙzH<;[%{+k0FKC&L7@}R},?Jn8<2OE=~wR(+x@@]M?z3|ڋ+OϽXR>t=S` yмT^^~޽ W~+M3BO9*jt!H(4gww󷨭cV*SW NF.'6WUN}${ kG~3(@)/|;%C{"3t-es ]BJɁݒoq|-0Zږ1o!?zKʙw^S6=qM@0lO) )Xi jERi)JIBZ-F cD%GZDPDir8]kjx+[ό0#݀pҖ($;NTeYr@a |݆ۯDѬ*EO?i~K9ہbrzpGJ0]:`S>8h%"1o$B4* 7dt-1zͥCէ)gKRJt[ 6jfȝ`wzW5G7^W>g̰S=XG _4+ =Cטc~5/\CŖs1.П?%W#W%ݷ_*yϴmƹgi2& @(JxtcKH y~MVo6\x)d3|dגUI?آ$4D %53G.D1[b&8i!  6)dfn(u bI8PBL4_ Ymخn@"gq+B(Y0cR믿˯~1 .eِ##{M.N)2K $β9ezSDc 14HaSnP` HaΜsv#!#8籧GGq顋\zq._8kO@ Ύр()BJZؙ~RwɟzOz =w*)͑r B!u m7SZS+`uOwZBJMV䇯SfW+7^<_TҬ@ٚ¼7uoŏ ߰gf(iާ(v͓_^|jv w5_Xoī=pÐJ*(A0]wv~<\ܹ>tU>~K TGHR1C EQ?B-~P"-)~D%9gBҐ5a 4!fT9c:)W >N=n.'-e5C5!iEӌOfZ39-8Q<$_KDd~ʴ9;n7}&2WjbhO'&0F9l5RsL7%nkZMjHSN"b=Ne-O]!$) ssҰW/-CuD'AYN➳1ᢨX0t#)U]ܾ&ASzpK[Kܹp⿹ 0VHj뜅%|0ἡ$ 盜yMdTʰm!K͌) %*XlEQaK2EXMrPՌ&V5>FtYOa8Ӎ tCvRݘ܈-,vVeOwz5/sgV#qox [' :bR8=$I 9uK7o ! [ MPv;p|[l['?Ɇ ]䈰Pޜf['3GOֿym$LNَO*sh Xx[(HÛ~&AU5R l}`G6Irfc-|FmV~\^ŷJ|ɛG^Dsֿq㝛_' q/I .! x(=}M<==TQ&MaCo8ao{ .;* Td" !9+%5RVH5)x|.ez#oɾf}DW5Rha췔#'kD9cYLd@&$C <ؚPfNΙ1D=pa<:&qZVGxܿ8JjGmGY.n)Z!Rn?#Y(qÀ0Lp'D |2uq_}BD\o|0Y3yĚ!bҀSXr b!ag+~_#FwΙs%NO#OH18NO{nޜ뵟4!ڏp|`MtӁGH>R3 7y6\&i~aܹ},~:Gcm{X{m4=C}:Blq˓H%^+i]!# ߅RɥÑ̚۷ě;8qBVfHy\((lw-cA9L7&^n!'X-5~Cf\=hz4 Ŋd]O'4eo"s"%mrkr`*bF0 geݰ^o;Gt!3T'Igxa@ۚr_Kxw&}R 99mO}`603 r]S5 vM2I=?,ֲagCM=nj6G DlRH8gفb~Cq8DIDǚP)5b7{,6{dUWխ3yMyXD(ξ{ﳿ?F+E{ܺu{?:;E) fH$u"KcрHEK;Gʬ#vdQ8) *R 4sӒ+|,8#DRs1oܝ`̎2Iy;!l` ޣ($C?O":R x/_z11(1P7l$C~K[{Bgun!@:R~?64bߢi-b],B q4QSh;G߻=b›-ڳݍEaWk=!o+I`h xݿkk !ngv/0ePZ3OX.*C=M[)X?陀5gHkO75h!""[BR"l]{D䋸˃N>&*_tċȤpLivb~A3de. #YI4|5eCEZ6ͺ!K(F< ',O_XHt}1SIj BoVpGVdŌhW̅-9[E%!0_Fу>_Ř6,n5///~wgJXtx L0))g눦 @z#}cØxyAGݸnCd[8kHg5ן_}.pqF[ Whs~pݳ(5:7N7P)I @G=4+kKxs@J1p` a y#)~hY$ e :a Ytp= _.!meKݎ䒺,9xݬw;rSoz*hw5 Ff_~:]b| u?%+Hӛ̞z?ET!tFq{euFkI>?ޏ3bCpj( "Ո#+ZK;%+'l:ch;~ yAtXcW[A^XS%}3S,. SlgBm< GK#T3eFp#4$YADZp|Y<(Sl+iq{F<穎 e S?X7 ^u@۝u`8\Q O<[ۻ|릠Jv)"QL֍kӕRus_q(R,a,7/>\˥[K-B}g,x2P4MN'?Q!M/ŭ%~A)8HD?r±͹|)e?=%77xcLFUэ10>xi#9or\(Ҁc:r&>*I.Lv(C9゚nwJw@OeVh!^yr/*({;r~}n:>͆'lhɂnwJ1YsvM3FɫmBg%_ʇ?a>7Ym!!n%̘F@X']|b!IV2v5SES\|jq@UM O8KsS|+9s0nhG'o=T`> \:Te|)3/&lk/]LO}ܽ >`{P*/=g9\}\>{-Ω᥯ |{y0[ .&q h"Wıh Zn<)Kր[o>O~_}MGFSV+?0?rѢk):uL1e݈wtYOyh"TFFXƕ& 0\ <聧i`Wõ[G󹆮q2<w8 M[3/u)}Fw|(0xx7{մ=W^3󮇺y卌;=6i(29o FgP΋~7MKIJkQ^ qS.AQ1z)TOt#+  :'"u#b2CwW\}݄@UlUt E4*Ԍ#-6n~-Țd!a~`nFg92+0V`y97_828!xmc4$^LzӨ)5ǩϢ:LbC)zQ^}u%HzR3PNMM٢ 7v&UDytA9cu:ϾIB&Ӓl "EꂦYAl+Lz!$ӣKhj!lYBlݱN rLFIyK_?Njxht?sx8=Ox:b?{س:%}Mov֚g^Rlyb2W?ͧe> |K柫|DO5?&|S C OORl;q;奯I2sloHX@^AU3iGN1X+=^8[V![~;g4Y5-0ޛ*|#|lp܄q[2Lo~M.+emg7-{wdy۫zðۜs</?=W7|#rz)buLߑUKLw7x茱P^>1r 9lAWt}å!yN7w(t݀jj!"H XG;i\j}ɋ }bؑG 6ńzuNj1^F!}DI3E6s=cB@1W<ܼHtʕKE`aܼS3\{yԡ508-.98j#v-ݳ@yad:]1&Uw֚iC3m-Xo~|oƥ lwk~p =]Ht=݂?|6i~]ɸ)_y,Şƣ&LJxk=웫H2rbsx[׿n_7у`b)ӂv 8 )|gf̓W.s~8s U 6Ns寽KOQM\U,u5Z٭7hB|WSO]=Zq[W&Kr~vt1u6옾)frC|_zY^?QP>2yɝn@("[];m )qEa@Xa y5e& f$ǚipQao2H #Etm.HdIBC&,-!V"9T hГ/[_ԎLy"MA+uqZo=o2&irot3꿎;AnͤN tG*uprגhAHi"RЩk޸.J$l\͸qK߱5$3rpkqǽsx!KcޫvsS˳/+} @k*Ǹ~rϠs7o`Зc=Cc TQOjE!7^{o'x \8> | eQ qb@)N5g~Mfi|[$T~•G$nߌi3q訕bǐ.J@^E͹|2_'|gh[''<)ʒM.^~}A[(HAh mw JJ ތ{M Y(E}6RB*(튮M& C_# S" +ƞTIc#3O $o>0ؒ+|4)x[qT@}M~1ģ?nI>pdl Ҟr|gq76._d3Lj:3 IDATF2n%/25s3xFߟlX2).92p?(E: _,?qP*>DD ?B\,O$~m*}$ xLqoF!tw-~ r%_G&8H5. Y*N"xϦݭ`{ PX*ʌ "nnt bǑv{N ǯ9_!iTP56JW%UYY.:cm*mu%"TAgZE0S}Yʳov稴Dgi ~owӃH Ɖ==,!)q!+,۞iѮUsRA%t;ƦbrLzZ ۞#ducz^-k=}SGa׃ daݻH|RzAH@&αO%~8Ob\|B{$eY szMcw9BuL2"!qtCE|u _sw,&YԜ'TQ..Ӝފ&~acK$1s;TY)QKA6yavVξev+$P#n~ iؾƂ?|O!><|,!B/ SfKoDI%I3L'HuFQ@={?oi+/{/~Qߑ3 IYP75")q&JEeE ٜN*X5dG-bQ%ǁ8GE)fe4PӁHȋ!)rq *I B"t7]{:jVQ^7;TQ,gDq4"T䙢D[TGZ@(rqah!MU]=cH\&n&nx(/3NӸ,OڞLHbo˞y):D1G9CP+NIö3uëڭ.pD$7~4 >!?|N[5.$!B dCN &5\$R1=K# ]Lr-av r=cI^U:@qᣌ>dC#I3sxAHj=d I2LF,>{@LG='Mҽܳ t-"8 !jlwO=C_-I3Ygys=p!3\zed®z3Bb{v%Sl߂Rx6TE#d>Gy9ú_D:Zy5#:-#3DΩ_t#UtAu#lJ6~'* $yE1=ߓqv> _ZZTIF^N5J)c{ ҏ2~>x؃ myI5E^6I CɔG' 2d1!#M5a죋]`lI JcYCWv/нO2lYI@d::к `l-IU!0#.DMcх5- +"MsVї/U\%M5vml:xf{lj 9Cc2"3;r,EiDAu%vU\tUQ>T7T؞1 c 0@lW+ Ip'PN' ~{B1&ȽoFAB=a2C$ 6]LUh nވN]g)axs/~[8kvmrg▿C}Z~>MRTZ"z.خFJ80HuN'=Qi\`F[DQi_ٌ)r~L=IA:9blNCr6hr:EQH9xuIIf5$3ۜrچ~61,i79RiʃK^"b]JdX#@HN2:ĎB!e'tF"%[FM3٣lA0D:LHӄ9~1v$ 6`4"*f2>ְs|HD&yDm60F^#i{G(I懸QF2=D$vtzGN/)ؾA- tFQt}8D/ۖj$ gFtY@ȨObT’f!3=zi)`4.(w;&CS O}~B]NNT&4dXd4gZtT9ͶC+( 9szGEA h1֣)ZduR!RE{B_!ylKɥ9_?ɏS}+ݎ/>" OryqHRtDȴFL.a0:-Ju_WAѝG C [riwJЯ c[.n,M cGGͻ4C@ӊ~05aIAp^#Ti7%t)"K:ݻhL==cSI\tLn?)hN,B0-fMZT4D-$ } bIrO@VLPZl,&$R\F:a2hۂ ͧ|= JhS7H$&+ ݆,iTq$EėKiNI{ob0:TB78-f_??$hɈ{"Th=8z#%Wb=D= +e-hH8/ov*5߀b X뻐B%=<&m\hyO$EAtGKt.=c߂*n;Z,?x-t`:⍧LJq-{& Sg,ٵL1=:`jʂvPޭ!8 tJuxE PD9 }8D_Qsq3I$XGGA(SBIt\d,JB SPh eE1ХD$ȓ%%Y႒ :v,9 ] zJZUul25#@n:%+*F3q3 L $Z3)3*4Ͱ;<-DESLg]C_oɋ^SL|ąCa qy:[7Be1kpb$ƺ$[@@MQj؂J"Mqآ|{c%Y2t {m2,yU f`D$YFzQf'` " `⽅+&~ŔT*uf$(|$nن}B$9iY "C)0%Om-)0\O嶧3)m&ǗQI7P-E;`1O &Kbz ގNB ?:zd~-mA+c- .P  f= IB='.Zv,U$h k Ѣ? t42/!BIpyuZ MN0zM1%ZJ(+x#1=7#'YO?p,/q]{]Op~~vo7a/cܽs =RJm0Z]k?_/Ga DPV|{Y}F"wxgI(qޣurd"ľ"ŽCR;?Bx QaDM))5YT̰PYrG{.כ=CYU" ^yogFTǏYJJ୏MR)!$cQ[U_B;';.eD2:&G&uD$@iGk'&Tz뜋=bc>}vY$~Tp'y"FIni:ode{Ui^!m"8"WZa( A zQZcQ-!]g#|E{)b9A~/Dw#  QT@0q@hqq?n&G :?>]N `ztZ`C`a#OX$e麈t#2y+/D !_9;A^؃kڮqgJ04-Yn"TN1_`DX?SLCO^.RL( t݀~vD@/(SvL#Zal)KGi34[ dB1࠱i aF5kq"`0À9vpHg3<[IUTҭ%X='挌(C6+HH iJH]Ta%Ta%1#F@t>]`454#tJmUP4n "=J!$gdX;&9Ad }K[hwYNw8aۑ8;Ϋ1Ѱ"ɠ(s8ѐ3Ȫ"@~*awGUAB(QY[Œl i+^@tJw!\d/OpU0u5AY~#of[wݝ[{Z] at R1Y#4%@?t%cgLo`&z( TSeqT؁v4'$/@MC(2|}Ɓk'ȓd籇.HsMЅ -eERLqHq1dE*E&i -CƁn[v5E) hv^̖(MI %E9kHrEe\%t͆g"*=Ю麁vamG }4ܵ]%A.$A(L2@$AV"qE$6 0!""M,zVKIW6zǧ]@8Ӑ,xӑ*~7R+I22_CӐt;$ŸE=oK-SoCH%B(YT6m|Js`cFQMN׌-E@k͊l݂F"Z+&Bc|i=Ip C%KdyfuFYeU'1PPJ39e5#Iڶ#U I?-!nJ!P̏(~w`Re tTJĹ bR8<9^5ѽw ?C0݄9k-Ǹ56_÷Da;t5-! Iu7 M``l+:j)AE-y7EJ' I]Cig=ΌxAZеpbdl:ۭh##Zn}`@MGO~V'CFS~Cmw$iJ%Nj *HHK Nf>JBQZ>VYhش*;wuTg)8,n#0ຖ<+a$b2Fc( { P2 "Ii>7٬dhBal|fK>AD $ZG>`ȧ)$JiNW%e v`z`![^e:٢b8[犼L!ZtlA,nLڛti\gz 7DDfVVE6A9ZhE7 :GZk?jiM(D 9D7hUI2y2ϩfy?zL `tp8]@'ph<_rz bAךu.{fCP Qt˽ ؜PDbjH詪&' 7Kfݹ;1 z|xNb>=_/u2/9Syq#hK )DfY&7T<`%=^Hʶ3UU\Xl;R y\BJLQe`) v$@ rZ yH5,[(ZD,H}euprkXSnZg0YCوOBjg̶%&Aٵ,)w=~9T-xƋ2o5iu 8h7"}]M<~F7 ֲ4ϐV$Oe ?|5译in86W9SI<'-pzz* 2\>$#-ihNwIJH [#~qȲ|\$a4mM ܓhݖ$/> * >Y}I)8Zt@+WҽAI8!e0_E4 E%?ɕDHX=(Xs6,a: E)2!q 3.*$By +1zteЦ`k^!&3RRznծk}r0NRdڅz3o#=`^&EIav)Iɡ0-4BzV[WO}g}Ϊa:L}Ջ D2/p)Mr^2C6u\/|2VQ+\X1PVd[3ޢ QF4SM S$m|2oss~˺z,qʺTm|rHy, e,0!D6q?P7[f;#=.I0ςu0FưHm$jB"M(%!c>,llYj.I 4t,+yTAr%**!C^;ֻ d2%p #2YΔDד քHl ꛆt&M X&Esm+iY!jG_1,/ U% 3eeP5_Z J".Ԛ7؁.Xхa:CW@r4D]dĥSU >ʜ댟NMSbͧ]lJ)XٰZR=>,k)=fBⅸ aT}E!R#UB@ I ]fu%80 QU|8ꮣRBϹɔy[J-.4"+ML6Du $i &,X_ fϺ,gS]?@n;DE.Z)\푪@Bk&k-֎ F5"u/(Q TWc CմT=axn:u",B5o) \*si:"f9 SS|$09톺˰ABuu4i?G*8趡j gR ncl#QF͎evS_e+꾦e 3m(4~ )`oij˻YKiH6UTiDqP;t"K!@Z8ݞ2MƼɩEk`WD_#*ie.وH\hC Ag3D6!ZjVD˹9d0N#n2J*?ƞ08dV${Ř ,C9"#/6-`? QBUO$@ΈsݹlGh{"+j|ڽC"7cITYJil{x@W j;bIq+0=a\{F t+zq訚Bi:0 *;l==J?#HnoT[,D`CZq `:w]fGFȼdqSUb*gCƛMr !QeI5Q(WۿB{Ғ_TmIȊ#~Ta=e)UY#a9,23 zvDRjsn[u4=Ru"4M|'d̹h &v_`]W TY0b?<؂~Dw'&qVg ͎EOr0gLcXgȦ}LJ˅GgH"p 6D;>|Nau ٞ9I@#F1|ڐ;?@D}y)tqf![+Cқ}5?rM:}E.塘!n5uUB<ܟFγ~on[>\r[-2$-Ԕp<5y 6O79d|ymZ:Ë͞4()l1+ 7LW_GjEr $Z)e_2;)+7aҍ]+nap8͖7̻_b]CDv(XYjwrk\)h>m㫟sPME8-a k"*;;AHtQʒu-]ߦ¤q>ݛiPuZ5~:Qm{-Y횛_晪iOě||i< )E\CWODB J*rRh JYyjD!Dm ajywx3 _+C )~v}E%<ܿKp ۹iH+4U夨L m4r߱˸VF 5Z R֣}ضRl4 u||iE !g_A bMKEYqb3-}GO)#|4[o>J B֕dg 8qZheMM`I:#aA(mo}K?<a`Rn)ʆ emXQCGe֖E8 uXIAo_g[~Y#z悶-݇_}x'O!J䇮juY'[HS+/hk袤y]=^ٿ%o3'Ҟ*PY-Ɨ8%Oqխf|J7Rye@J]y!`)h늆sǠa]2&l(47Q/P3fa&hJ2մlx`iY#F)pf+zk^ݛǀ~t?.a6JQwu' 's+E]נkbJD^r\xF?K p8FT͆4vY`,Y{O$ٟNÉ^h|׏2>}}+^_T*fs Nq{܇+[ FLT})KUe0+iAf*ȏ?*S%5-4.2O2!);e"&<#Τt vcHe~yd@Y6|$ԔmJ`݊W㉀iJLa_jBQT5]!eW/?7Pu%G8A}GB1! KǿjSy_,>oa9Rxhr<3#)ʖ$3>fE=]R2_㯞H<ˮ{ G*D_ooԘٵK},HmY5rע'utAnP{6mk?f?_SF  IKRs2EHmWxGi`zI˂kV-ش/!fuy!-/%^@LO!06Ku] )%@cTqɄJOԛyW/kr?f YocOkţ|# +9l>1H U,ZNÄC+H\\$Ț $$DAPKdCZhZ5gt#e%^_m&zyw L-{N %_<(whѧ;/E]W9tni\9?"ꥭOAmw$3j( ]?M?'4XB}qxM"2[' c 27u}rx`)p<+tL>N٩UjMGXE!׻ן12cuX*|Ps ؄orz7[s].I? !|ҿ(?l4Xcپbi__d36d-Ib_tz oB$ i}AG\oϵL^vEW-i{ xG3<_P^i:*Kр, UqaT˙<+n6{ܴ֑왢jq˄,v3?vo"^vXXzcheվٽ<9n($ nU?Q(߿G//*uh+jUeYFW- O!,Gߟv/RfWHYk d}aHr'_TM IDATpg⯾_e]S4]6wpռ`ːn \dex<}xfdiY0ޱ:A& ):ĭ7PJMC`ρg_ +TYQA&ׄS5D3KbN䱯eQdE8Ȫb R7=s;RJLO>딫pfӚ?;ϡSb<>"if4y9⭎<$< OP 귤IQo&)o>jj?|DH%r[Jx q1O3'_Gha@R')@ZݻtgX_R ;RQEY!HQ ?w/3!Ì ٴ$)7=]@|3:uq~mHI?&L'e9^?bJgW 4v] l% 3_!J@P(|@Z )@nΡ:OT(U~\Ns}7m/s9;ؕޥOwVos|uҚv\|KDeHߣO}}Ƽ~]v:BW Foe_Z3_} j|wCF=23ss%[%32|90_yف)1ftX`4") \V묯|?(!QuM$kJeK!q??.~8$DnpˀR(%i]˘@tƝ> _X}ʆf߃V0_0 TLƴRgʺQl_cO>+ǿN܊|(J@clQF)Y}׬Jej2n,UbJT*>~Ƶofpӡ2;G(ʊ)Dz0Crާ? /P7-"歵, u3QYgKy8>O˟q-S;T X<5#=Bdh Ljp_gx^ɖX#BXf ֫/3^"PrM@"3=+ nB&x,oJxȅ&$A5 (cB Ґ⹐2_USM8O}A^E@=d$ZvjP_=ڟ2 ݗρk=VB6LLlz!k[(ۖF lZ=\\oΈz_?5!5OɸvӉT[e!@\/3Sm~9 ^W*7_e~KV̧;TQ"6$03_ɾoO/jWoSvkʲ`<r FJ͛ӚxgE}Iop4ٶLmi[0$qѯ}I]eS(=Lzgy[~xβB%b 8lR8}| &jn\jnHE" \ )!;O` W\1>k"ȄɮB@HM@:1=rrÉR=$¾OCkf5=Jg$VR yS㢇"f|pOz3F%ʟ%7_/zmE̊+LϞBu kCLfTu3Lo>=F;fy?qBa%͗254 "Ued !M6 s^}ؠQ"L| u?{rm #2_y=$\q}M2Z]V,J{<fCr3TB%qu0 )U\q?#^}xZ=Ž$iHje3W)ƫ_d.|_ rb[_>˄_pj6YWrY3:5Dhs (>A(%/`LoN}~LBW[5P ݵ)c{ W*-i $X~1O9Kaȸ"-YVE"GPQB7e'b%k*`n:ܡeQոzZ?bmߢ;ܲP6DfaXJY =R;~{= NQuCh[$P] "A6[a>4}Mw4W.v4615)8MK*[b!9WO1iD,P)~~ a9us\vݺ`L:F_-&;S-ݳ}~"Yyvo#9KDCȺ]#:ze;̧gWpㄩ*;~?La!_ʆ#+(JdzH!*+㪐=,f~6ܢeBP0W_.3AĔfkCC:͔EE*xb{EVBNjفbŝ<;BY"@Pʸ*&AQ$IiY2GPШLIY%i []Er jYR"2~̵* I<C6%g7 @)_-ef߲@L*sue@+n3Ng8@U[F)q70޼ k(Xn@ JuQQ-R1F fGhKXLV{BD$K ˌ_W2}b&+@4=^Woq^TfZM]/}{j HՍ#vbkRR^ܔײR*\JP`㒁>lb^C Rsy1 GL0sD]S-~V=U_1ۙS("1I^V|.;p q>S_0~ z{1̨&)Ep8WY,# ։cd4qD5%FJIxReޝ^J;I TB[Xww8jɂ" W!Ԅ2dӒb%tHI&y {k!U I>S |P1 I&8#*;*I I./8X qYA\Ȳ jr _h7f3 !@3yMO7[tD>Fʶ* Rd+bEOȘ;EU=I]"(AkGu=~Ndf{ۀ Th=Y('DiΧE,\d9f8{g˶7lzt(~0j@-WBB`! ipU ` IN%P؅87ݭf0V^**KF}>{51cV'?w&ۯf[o*ZA(Pp[ok;am!nob#Hx(xm" ƖN33-Gb(w:h @mj(LD;FsZ}Cm^7&tZ>׌LT]{pA"8sB3PlbJ-T/C[Ev`Q!PMz<̧űEȠY J% „Ȳi:L Bm-'ABub6V6b(BQbZQMKN U2{0@͔*;T-8cA0Bİq}>l~J)߈@՚tzLߵҞ?C΅awA[CYGe}m#oJEy P (n3<|zi\9>b _>fx]fϐ吉;Ydy*\ͅW=Ϣyݏ^N(;v#JQs*}ߵK7?󟧬p:͟yڳeьKQY?a2oP^՟~?}px+~g"?7%'ɿ|ƯĶj a!'j [5aW^6{g(i&LƐN;V-K|_vM?w>͗>pڛG_mO _🼺~J}}ߢJ!*~Ͼsd!qjz( grJ|Gb7~۷|oU_MvfދtLHSTc[w9MW~%C>&?מ^gg >-MFk8KO6} k-m~o}B]oO5|wrHA),5g* b6O)*_ ,|{}gx<mo{_ګw^8IPk m}Nvϗ{<ψ^{5?xGȫǟ~M#f ~그so/~{xW>AJ3|xs>p_G*w< 篸o޻' ay=^1.7x1(yqM\u 8O^v&_vO-nǟ}Or=Ν ݻǛ~e|y ?WOsƝ?.FKՊ;#( w;y)3;Wx=RwŧTmx}XrZkxzZ/!Qo]~]"E7O_!y(!QKD+ ɋJOw-替ă>*iiVW߅*poѤå7C}O:xݟKoxCQӊ㺗B/՟z47VhKvk1 ژʼnT_7}'xƷ_{8PJYA@i8>˷+no׹_%j/;;` ooqK?w{g\"]-f&Yۧ^OO:cݪ%L'bHBEmy_&xٺ_vXζ;/0-]3 ^Zq|ɸjؒwyZ[|ǟas?&yU@Q?xG[ xRPP7S qg9vox7Itu>ǝӓ#_ ;\ۋH¯ KT(\{qK~|~^x˻/}84د~f^yϵkvc׮ o31%|+N:G4 |C0_޻WQPkF4SFJJKBOu6<޻Ǜ>x|m#_)N@ސ&Q}wsmopʝ?u {5Ҏ}=c`S~Ŝ}O( 5@wO߷x\ДJ|_]QP\֊Ę!XjY$vIme,` A[U֣KA<#@)К`=#h'P0FY{x pk?E_ruwKw b. LhKP“i|/u?ϽHxm?\sr:}̗?ɋ1%ozA9nLp]J>' voO6[j}4awxϿo-!1~y2_/. H$?7ˢW}z?7xG <Ǟq("p_m׿"w׸96+#_ D9g_O7|;K΃aݮykew>qyx׮kxwn|<7=/y&:~.cʃ~?(qy?~IYE/vo߿w3.3vR%G64+cxy>#Þ;/xwCU8_ϺCܹK/#ȳDp~wS.΁_9;%ry0PiwTu~Os ._&N/G~M 3Eij~E_Jd(xӟA dc`5t7A?kƀsWXH- Vj4 99IT0$۬aG)-Bۊm lchW!#nJOXڒ ӟQ ^+P0m,1-5D*A8`hick A'Q#I ̧(1aF4U`|vf:ee[Ж~"L?;%-1` zð{^j0ZDZc<<[3oZӞ5pA)b3Ja fb!GTyKXL bq΋Ie̒&wĦԥ^ʮn9sTqڠU!H9*\Qk&A@B7>4QU8}`]vsW`I왇gdX1}CuE[% JkootLp7@4;#Y4^,K+*g1;(xZa5-a焛^Hǣ`KQ*ÞfsD7?=*߻?qRa]q}8 )p<ҝ^_ib]ҭ{J\Ek*n2/vFY+q!Lh߂ifV °E\eq|w:O})A߯ TP@Vي0._ 43qLG4tKI9AiQxAPPL=5LKb?f?03^>֊mhD~G9hi9{[i83]z"Z!(PR‰:ţ[w -PF pW:LTU+l63%FicM=zC*U"a!5t%%SkQn))JIh`؋瓆Ru{51ALL9eq;Ǵ{k1 ۴0=f<@eV{}(MiWP1pP]G̅pjciBu!bѬ6'!khRF5Rk-"u3 "鄡~IMa NKZE8^2Ot ǥTqF]\|f>? YwT #NiD5+qF+ZZGs\Ja>\jM74M(~ ׌VV* -0PMKZK~sfs&k k$D!kjkfV+Yr.R15ht q"yv# 5hR$QJP[Nx wUZ#u(5%;1j RҪ¦K'Q[{6 4r^JCʣo Ec\.B ,uw]@;x:@Iz+z1zy}+P7hՆy xe n"fH[k+Ԉ6RѦJX:jp: ivS %\EbkG$~N/%%]۳nvD3ܚ$tD3Mad[H)pI8l6a"Ekbd3b,Zk\43U31<*tS)!;(LۑN{RYl!טqi@iJ$rSXH$g(c'v()FaŒDIӯ)(m[Bu'foaƣ4d!L_A^W5^lMVr"}%r4syS3dm5t0z9P|ObBPlmx)rrHnoGzLGLr)U)B'! |Zv|i{K0J眪R7O#Ia5z)] `9ǩ<.:%֝?# PLEG2vsN 0Ц:o{Yzh)qt 4ƛJ!UEsk9!OS$TrIke6mIÉ5y!;oϩUS" ۬m$)چ(H72uZo vsjDO2Gtu%&'̻KB&OTաRDFX` MP143`5a\D46ZԄY]$wnKGh{/G'ER緄ڒ⌱MtbL9Fӹk)J_EAJi^E[LɳxL5"hpx+64()H/TR@6ɪ0KI8RMDZ@ k9ry>!rUyN;9*i%d-q y8Ua&LAcit708t7nI5S2VZJ qUO 3%L Ni^p^FaMka8톽JʅfaqZ&(sugXbDq)֙#vA"یv8g5y Uq9!s9̧Ԅzj. ;΄+Vw(Uo$/D`<ڴ8ʦ^Cy)RT(:kM%)ERb0K/* % p0fJ"+Ոn[WTQ U)s򹍜' JKg[]/F'A#5":I͚6Σ:4idu8Jku+[hzָnפ'؀[績5vяq y:D>kq ӵ!Z+*XoӎkZ"ho㻖f-! pRfY4̌* E;4ta=$z%VdqLRRd4*Ne,uP2SbD{OFjsk ;o!+(5po6е]4dWZAa:ïϘO{ZԜHÞZ5$=iIȼTttÌ[K RHPP%JΞG5[]xo(BE$1_Y$g(Ӏݜ hieTi0MqȂj[R!:z:KFU 'L\*EU'+%YRZѻR OV/7niTx,n4HY (8hlѫ^HJt'D䔨=5 a,Yijɘn KVTQԹU&W$ 3y\)Art֊1R~4I:ja mJ8ALK|O'5lC^ GZz H)l{--iq.d0K^v&,A+|Bo!JJ<.nAL<ô{VZZoGt:6vt7_C3!Z55 !(eQD8TadB8\JJP .,cs~ַ8^>dځ#B՚j MUU-3v[ tG*#h(G@N߭LA߭$. x$%-E[|#,bjC<1ZQk:bjpH9'0 # 'LK\2a8 %KywTt6-5΋X)jM,nmQYtX@wv.Zҕ8cǴx@, &z1V8ISkɑ"&DwRgj-ԔP)÷Rs_II$'TBJԮS5:gݻ'~tv{C\M-"h-p6tyZc"B@90Ƣ#-XS;C$}k!hJ> xhzoh-@{vKJSM'@$64o!,%F5ݍې&Ҡk4 5\Mӑ,*1l[' #!&(]}cui"#4=_$$Tj) I"T3syRzy\<\Gq Y!4ɵb^jGa8yaA#&5@l e;_Z+r4PTU5%gjޒIH6@= (%k .%K*r`<MOZS6~BoR"CŴ+rJ"%-DB֔'̫͂*+J]x!q'ZjVY8Z@ t+F Drc''q &QLordL46kŨa:KnE8hW-q"{iYjR!Rl5TphV%ԒioJQc4OP2]PQ 12^>/EJ Jsuұ:P\ AU4SV`I ''pm/Oy@e4i4ηDy1TZ VT{iŒ*ݶx, wvki=͍g o ǝHO1%0RAVl_RI2U2.AHg9}9$7Vz#p68O !ZE@oA礴mFD`úWutc0n!F^a,9El#TCJi8҆mr⽦sT^kIrr/Jʺ5u6i7X eQyZt ʋKb?kJFʳ:=iƋR8 T]C<ȮA)e. ׭%0 KDQ8Eu+ ZL5qPVSDmZd)iKiV)YYB ${vP5QO~[R4z|^X@=g:H6haܽ ӑf{.)!NRֶH]T Ĝa6,jq=AW-8%J7мvb+$i6)iߞ1/(Z2n2gBr20 ;hVxfi"*ѩMf ݴRZh#cPpbs&Օup[Q,Lӑx qdiOU j+)带Z(~q )J^S\`hnz)8Gc Ik]'Z{-se-7F֓Na@D `Mij1SoZ*irdݴӗ*Us 4aA6RvzrI("M#e\D/¢j4t='Tɨn%T\93J\^3 Mn=%FsƑ;lC>uNrIБQ"TOQơORHg/q͑Qa< :y7jUqjOur=:OUVtR)eDwrQBXܮ12K!tyֆRu= lNT摺?Gj)ǜ W$԰=TyӻR23THPJj3S"爵N̶yRȀ1a'JQfݼvNa#KZ TTaV6ImLz'ߓR$%3N-eQS73|𸪑I\OӬG1!)N#9gBNe"HJYi3-=.qNϜ5NIvL2| =ӟ`urB.U1?XՕLuL+* sn2ע#DBAG =nL^&ryCV|<IV9#M4,8'.F'sG r2)Z=_i\.vgBnbٟ @Г,`,1i뗄@wtUA̓*RW~^ۯdU3\7'R#`.F=6bH{؄q'˩1swsm,j`ڒbnX7[=5uQ?%7EQcÊT{RRK܀6 Zj+=sHޟA 72m;uiY R]ĉ:a)aVGvK#Ͳ-鬕o6Fӄp .9adǒm7_+k%F W=jͺ)!V}·iXoT~}[Eἕq%kѻ_m華2*cB/zŲ,xHcNU~^}82O2h94QcԬԌ +jx簡# iniG Ly ) eZ\5,ݙqCCGuͱ܅y\ų%?]&'xZc]Zڜr;">]D8ks"1t$)$ |`zAS5Eܰv=WSB+jCDxl1dxzz3K,puģʜ(-9_oH%codu@)LJYsD\7HK^Ґ?Vg i)YO~ Sk]dt7`Sқfc^Uj.x(9jvA24cY7 ]6AK{]<Q!aM 5%/ϐ`UEP()m :?VHn`Zo%C1 K$<Ε`!eR΄|8Я7OcnC^6tC/ '9kb`j{]nBD)\ H=[aWj7Փu$q 1(Smqт7͜]NptUAfZ%'xFmJS; kgIDc,nt ,33u iBБZuL cg-j,pzdVOhm㩅*g.$as,sJ VJ-qOڟ鉉8Gv:rU+LvV%k~ 0+A\:.3 4h6kL13B!v]d-*]oIDZF%jAOj]mqwYGkQЯ4 (% E9'O񝺴yUOseeA"5'9^Vh:2\U|i#TVcI[3=1Ke&4Z5?2IY/ k\(:#[=sݙ =K;lU $qĤZSL;ZqшwX7#ǡYhucά5_zOyz _v28RQ+.Qo;tÚRݮvJZ莯HZD#Э6RT+W[SeaILڟCODzz }OneR Xe3?JKqfiVws.8MOЅYvK7Ϋ ^`UTpюUQ)^Wj7Hg3Mk^+%' !l-6ڭD'Fox6 hqTLktԒ }G=nXBA+TmH߯ք~ [gPf Su.O;}2I(E8~-$u=)F8#~sD߫S]A +kej]1-rSY>KWͭ M<G6ܲL-ZYf&j.9ϓt(^ tR0k=m rjl%QNzĸ7qDžLX{]/#N+U>"\KsLZ&y|.nʢ 4-,6{bKjcu:*,|悪"J@w8*pv};XދJQDNXwnQX#^mZIӞkLƯ n!:t%Q,2-3ZݭQh54D3Y]^dc 8c%l:?4AHx˄FVֱ *泎q[t-c^riM&FYؾӲCe-%RsczFNM+Pjr UI,Bc~{L5rSa'i-TBϓRmN1TxW&9E8k9!pa{m&ߩJ,9OSh #v]%O{H;Mf(N,&EA_)Egl߫Rl1ҦNRҥ༧wcK)\$Q]S ZLHU+ALm 3lժe*+S"gl<2B^dp뭌CTasw RՌshme3=#[o\*ocQnuki#KI@Ypӯ))A$Gl-d0vXD,€׹@]]$NN8e&-oy ֩Zåϸֹ{1]G GWXتsV!qk?S|w] $R=Jns̲kXlֲ, 0Y}1Ӷ~=QX)!Q9tc$ӌA6e5H8=Sk=j }eҞ)n7Pשig BٝRo3FiSSJjR Ġ.E\<յl 4XxNJ)q!?AM'WxC(X&cP¼DΘN~yU= 8R•(VƦ@MTge#Y/%e*E8햚!3x6[jV`KGmF޷󄚩) u|b,qޓ";uIg#JXCw*f'VkQUyư)Eb%K_S׸:sp~ %NqTjR:N3y7ݸFUaZ|ޓ#UbS\N!Jٔsr֊](L1PJ 3J-jyR -Zk4X9-j9 -DOۡ _Jm)#U1E%Q]/V#s&:k'PFEGd7ufC1Eέߋ%0ъOuu${rJ0atAFns$T)q8K^Ο!E nN4aI7ӭ" 狠푈B56;SZ֤4#+kn'8轪(H_Ê\*~%wN/Ui:jj'Ezr7jwm3r;U'l^ I/hz뺆䖬w'ȭKҭ:R*蘘@:L O%絠DmN/m}OlՐd83cwkpS%q\%N;=6xӌ \=Ӂήh:K&Z8Hrqb vc}O7خWs렴 = ۻ0Jy"CIIN ;i6nm3X^LaCeGy~®WMUKҙv=hcL1֑4+kV`g+SY&Qy8=G|8kYf2{gVX vqr/ί3&RnZWZGNj*r ִVhM!zDWp}vC\1ZF'&r-LiDZn[N&h[ֈ8.f Æȥ Uq (,#xsIí9kaX>Jr1"ĩ1 uI>#w}d5-v=PpJF/)<>%ou(y뾒{;*[ᑷ]xΣF܀j\z_s׼]?}k=Mk7[?~}_s/;{~[ܽ7^KQ.KcG_WOyoU?6y7|?/yfV_~wW]w&7^s@jS.YW[7or㵿ĭǾT޼ɍ׽e޼y\}MWR?wp뱿ɋU|pMyߣq+6 ~xћ-}WWW>u:nݼɍ7g v5.d3֊7<_Q+tyGGWފe킇X/\Kęа_0靓4-L1']HpՠQ/X:e5'| C?牗|Oyߊ]m.W|sΧ|=\O_so|??ímnџ|==E@eQ)>|n4?-^:?7=xM-# BgrԬ(jűgwt2<2MtV0î_#o&H_Pc$Yi5˨cfK&Iދî%-Q2)K(X#n끻OU8=PO }E?ҹhGysU40O<.xen= |~}ywK,#[Q{L)ROu6'v7yQp~WkQQY)V+1}]2Rwj6LDFTJ&Lzeu_o0,U4 (:I䠋͛?/N{ ΪoIu IDATy[ej\X pNP⟗Y`ҩ5yc{ސ;4kn~stwZ'ˢҿύ;<دS~Uߠ3ƛk~݋K_ЯBv~bkq㉗~'M9>I#[·ݻ/;BA^<]m%Wu/_Ë6/d~~|o#yE)a~sBquȭ7Mn/͛7yƳ ?SS_w7y߁lYrVDA,2,y:'Ǟn ܗa4= vsw-G#%Jwu@h@T9:"c0˂I2+z[Gf>QT2̓X{㵿xY_۸=^doWC-ha7kz[oÅw湬fjxԧ6z?[y[ޭ_rܓ\\6 pN4'Vr9cmU+uJ~DkY3OSl5uE|[e/}Dp'<|v~8ϼU}kVuG<}?maͲ\xKV:Яy3#텊>`Wk[?t~ O3q)r#?sM՘+J,BJ9|w:CzO}6ix髸d yx߁R婗J;3O|B1'W|.^Ǔ/{yߧ|3as̃xKO8Zx?Snb\.]5/NK#1LSTc}geƸrU z}TʒDDV*-gX K"ۮ&>z糞T44OB˶/w (ZZ1GGp~k?[ԄZ <)wr3x[usO/^ӯzߏW|uZv~>r*<O~6:0w{) x䛱^#}'y2O\O/Nj\EDo~_],Ӂwg[I>FJ\0c5L T;3`G4a'{ŷ?Ŝ3'wN1o5}G]Kn#Ht< ''Ԕw;kBS$LY%(ZrX2:RIԮ'2>(YTRY8I}g4@Ҍ&Uinv)"d.2ᇞu@2K`p}/䰆HQgZPW91͑d,~^i~*.T_J6H)RYTZiɔce%,mb_2L4oV̧w#Vk q0`F%Tkd4xa̼s; l-q%"HMN)d_)&I@:*Xl)Gmt8Xb-CALnPgLUc6 Xn+w3b)LnЬMX8Sq|"*)\dzΜ3}bL%JMtTV'Bg)W\Hg4KIw0"]G:/w(i1򥻠Y.qn9l䜧EԪH%9K 8[&1x)*oz't8SC6qucJ',B>ayw,38+F{N7rCV șn3J5Nݙ1c#ilV,Rm{i~a=&쟨 [pFMm+Z.`gJ{EF\#)dESDZahD񊸟*:8%._HѦwmdYx!X57tDЭWdȇDz@nP砉d^I;1FHMT5J۟i9OJZlါGL:F}6/@VR(U㝠]+-wTA qj1YmrmU9qZF|Y+5Xq䓺h#kuNNKcd]&.PJM 8&,5.4i]nB yFQ9cpuۂNW}W`T`G#눦n{ϱ.eڝ҇fC膁?:V9q$4ѯ6d /#7( ^bl=MsH5r:a4Gǔ(WKve&>\NsL?t;H%5 X:TIRx/DusZiRrLS4d:reF.%aWko$—=靳Xdimy/_siG`u pAMaeẎQX<4J:="X< wr9/y'ǤÈoyn])lU.eo :n2ӲLֆp؉WjgLkg5s[^nTMmbMe}hw 樀8v}2/8o09 w6Oa_Kdw y®ָYKo; qYJj1wy+K06ʧEa'gG)*Vg}w4ސ l`0AX<* +0 VEɵdPog-"^Rfqwyk0EP|Q&M\V+xY6.tl^CL q`51O{!R(V?o_o96[J5MQ)1k\-26*֌BTUϝ6 vxcu106>Ǒp@{L۔2ph.ۄa[7 >gѢL- A*Wmyi/B%%X"_ u7FB1%IHUW)󨈮R#'mN9΀SZWܴzL*Wn6(Rs Ĕ )kU *fdnr~2$~_3,'X+SlrjDiԡn\Zp ujYS mZ>ymv| v^Smʬ(MԡO %FBprvDSD`rKe.)x'3CO aiR90nB36tyl}DY: $Sw8_h^[麎ՠ`vd5 bPk[<~eŕu?^q(+0z.D=0N3TRJQSHDPVhl)sl?\n*մ,ښ8k9. =e-r,|=t6DoqaJnt[g}{iąϤv:NM*c/q`SCPmy5ϒD6|8`hcIc5mדΊ7Pˆ[$Y7-uF8~Q 1qcٟ]Ӭ,`4t#^:5tCR\$ À7z'GujoA]&?֒%R/,b8O2^jV%a=غ3r4J奟~Ͽ;n-§_g>?} [??O>,T`npvvncgblc0OT.3k~9C/c1 xgp<>GēL?O>VsJkM&exٟ{oo8_8V̗Ɋ~Γ͢-/ӟ4Ąu]Ƒw%^}>S.|Ok^I-iZ%'r|x@*-c.'jE_l"5gU"^k 9tXT[Td 1]BV"al>澿k,tkޝ\ZkѬjN`:AuaS):5e76tIae-5P8djI8K['xbLkrkȴҦjlm2V|];t ~y=ꢤĂTR[ыZ/YMz> Q4mZ9]b=)..NQk/Z4qJ['6f=v(SpnX+Dvȯ?cOd:i,plt^)Ϣek[P- 1;2m!LFuϲ?\hblJJ,!O|OѶ>^^{?a$K qZaF*Rit+>+TÔJVn-$Q&:-?7JH_Sx? &=W֢4n&Q} jI0"J1WբSʪzIzI V=;9bt4^{H{պ{naTsj]5iX\aH܋'a\p' ipΓrj%m+0i9EIFCr=T -iOMGUoV %Kr't-b2wrV ) m=#BqeAQ6 c!P^2` 5c}'TxRμwrMNjYvTH,DUەϾQɪjJ)[,ČsL~i:ߵQ\E,L#RR7Fd%5S۷s>>#OܓvEN3욈OF35Bn3Ϸ՚R%k:Lp>Kv:J!-YEڗ){cuT y"ꄰ=,Ŕd ӟʤPi+ gv1|)R=6Pm,#y* cւC7X#5Wߎ)QSBz'dNK,εt\H{k J1e\:?Axz" - k$Z T)І&`jdWg:5q̥n!g9s/rh 6=GqVYodJU-^ZկE<6'u BBy89fF sG"`5U%Q`Αؾl/`;Q 8ĈP 1'˃0ՎJ8dHbw-X=!%'7iwDlF~)m;~?ޟ [;]9P[ki-#(brŞnPYVGWAmpQV#ܿ?F5Z⓻ mJRH'1[Qdxqނ-jJtSi$JL0[YzaZȡ*aMmv,6vnhi0>Ȋ5VwY J-{L(kf g xDEJVw;k,$|(HvJ&%Vc֏ޡ~* 8K{,5q}Ӂ{y0؎xJ$\L#:/KwUJzڍ( <a5HMJ]$W2ߡ%rU6b$9V1GvH2jlrE0b wt'#8}~p(ZkyЍvo!t"D]/;#ik<˂UOcb.%ߣ׼z/}v+ 7L+ný+#L042:Cܝv)UB[2TwnZ-⺵dweҒBZpZ QUE]{sh9]+UKXͅar*kq= a Cnn,jXa}ڐ[L 頻bH5Rr  \a @Bk{8Oܝקޖ &$iD)I9#$J&vLYvg߉hrPF*Mqh=_ :';uN"M kEN4y'-M:v G9 q aFH's)+Zv P‚]n 扸$,X;Ḱ4Jhb'G&v@LjRvZlpo@v 3J4/.NNYf|7c8[qig)އ=~ǿmS?I S. e ~R(k"ް4#%r E:np^uJc4[%ݬNӑp "oP4pZ^+D*we-{' zYٹ w=9/r/,ӑ^A[J6-Qi:0KN^Or7Ja{Qԡ AaUpB^ELG19 ʊy C9+,mYfrn~z/hе@?6MԃkKL.$Peve3ZI޼B]]_smp.h,އZ"K"S$ZQR'hЈQtȂ綉Ee*khu[ %VmGˇXrCkGLw>j0_%7LǀaX<>=tDWI >Νtβ߬do(4qVЊSU7U%jkFA+`86tUEUas"Yf@{K8N;(PAzp <ǯjPf !Z1t]/ulFBJ C[ TuDK? 󊊳mdZ BgC,xV"XYC]?!⎋Lg-6G mՍB=2޵ZR$arkhxS;蒯>HwrFZ"]c;,Mn8Tv0Ta(? b;iS"#VfPQKHLcxZ =Tk[CJ ?yu,t'ga@kML5﹖*-YS{O>NkhlT(k1)A.#,3y: &g)<)#aBW0Ja6'aԓ"y@JW\<1D9ҷBE 9 dIZ) i9(-ځ[o|hn+קd<,ES {|"V#QL ]|=KA,$YY\*W⪻P[l\yt3͓TD̙q){:8/(: ԩBQ_uGL!)7#G-XAf-fjl, m/%(6a}'N :XD&YxjȔb攸(QTT١jMطC4ÐFT]pB5g_Uݯ gR8wJ)"ɭnԎKl}9r@<#h(yQߗ㡵T6̍^,fkeZa+(D 'mxK"Bwm켅BS:#$x{t,@X+HKp*(aF? 3_bN>q(q^D7;v݊55Ā"dѳOa_crBpvzsda7Ĕ"wE*Z@,t#n$p'aONfL|߁M!&j)}ۯPV%| py]"ʪW'1jl/:h~`"&.^2x/'<$M S#40ne+A ǂEBw;/Yp8 nQQN U>6:O0 m^ VfjM%ݗp夐#yysmsB۝Qʜ֊] Ն{7k,-00o/?,G8~ҳzC9ݱ{s^ cyw)ʝ~zWITFtɪrbD~+ǵc>{{/[%? eq]'6W礢 _~ ~3⻍T1Keu2/Yxv+t ןSc{y8êFR);H7)_axgw/2z/'+^tPC}'a}(F5uSZi)2/ )F\[w_c-e`ENXsƟlˌ;wy:YmF^!L[#GRcZ*YN"p/ŋ|jD{0^&G⍧M׮EX9w(-l`/ŋ|ѳ7yӷ3ujʝE\VJոvHF7E:7<֚? .-(|+jN\_<_5L0D,w_%pzSrS;7\PV"7O|w#92XNwRw^vТ4[FO.v=ݖi9Q8c1H\wS?s;Po"#OUɧ+c/P kژch$K2qMF (ZxBYBӌqRW0cAų-teQ2F,nv|8gI)o>WWiݴI9"`Onu9>.iwA\?җ42ߣKOEZO[UxI?K>6HhFRŔe6|CW}=h?Ox7v6_˿ w.y5ŖmnյK)qZ!}YYR5j-U)b;t㌽I_[MˬQ{6ҚJ L"c ᰣ _˿oix~vBcyrJ8_~Hxƽ)94ZZA'+$k qUm1<8S#JAGQ4Q;5"):5.yQ!@(7COJ9rc _ Zi4"'ɋWx[~ n K"Eٷ>I~ݨF#,\Q59 }u~tpH9vъ2ڠ}6FQ78?pw^$N[6RQ;բ?_֦i4L8Ha.R V ~ z#ڏCie=;ܽWZxZk8'^ABk$q˥⽻j.VoaD[3a' $Z0?pޟ)642/Kgi;Z2X䢍^jޫrrmt|5.1/^lp柿xvUG*Z6Շ2W+8lE<u y!Mi)jw&{#bM̟ZB/)nn|oNƷ=^gv Rw|dR[_mDxxVޟAE+A}hXdKJ(/eLzH95svuܵFyd: UL@qD\Cm[&_m9\a}TUvnVdvw]ݨM[ԒxP{gn{W(먗ɴb-a>xpx]NήRs4x@yɑ{RlubAT*=UCM $"jrmFr8cVZ_!5hth%i'!}ב!nW'HeA/S~-f5JLV\eDHP L4& JHgxeqZ IDAT= ~$r;%|ߣǯO%w`4a>0EBUf]d"RPq~8ͨ&2r1+O5t h%rxg>8,=8dą!nX(5 W() }+BRɹdi]R8k s䒅ӏrxH :Ѩ:-A=jŏ#x9~s֔y "K!׺ Ҷ,qV }Ib4VZ9(0Տ%7bN}Ii_)PhKK 1Q@%K@JXy}dF"A )I9a"j{JH5K&oK0e ^m|#d(.ȇ5^) Z4Jbkl<kvtg^lwGqBQ&),c)R[H4^`-ĔIg ~[%.%!LGJ7<phbkg%8 Ro<5a^QyMDR3M_k1WLGɤ;IW%O)Qh~<ɤoS%[kqL@8q㊰=8Y,Z7@QxyFVI,xGm{jF5*e>N]6 \8熊rݚG0b*v8P+B9aˍ8m.%ʋ,\2)EdzvjBgg"q^$%ja;^J2Y*F"l@,>p_&ޣ!(p 3.[nk*HʉPi=bqaE<(xs"CK"53 #1'<"n\[~ h-%e%nJ7]e)F\ב$ ;׵i&n|hW:@᪁U#~aPC:~VҪȽwr9э=UZ3Y{CuÛxOq틷yD %$A{i aK9S&P5MOlH7uNzr'\ܻ͍="=.UT`,Ag%1gl_#'퍇"^%j<\a%k+. lӷ;f9yLbh! ӒJy%(1'pA<І*g1%I%?j*QL;V]Ư7pq!ﮓx@ŀ]zi-6Ԍ:L>%>'u(5Fj^ӝ$'پa>h'?tJH3Tiƅt̿fm'ӫWhDz}G}wyV=*$#1E k֔S{ 1pXi8!|?tr|o%/$0s<仈 ^ ;'Nƒ!QƋnM),~54x/(zC/bm+UZ v5!BqVȠ9a"i% QG|c=v$V#fчvZ5ӭWԒ~͆\LQ]G 4qK-|<oJĻp^pT9eˣOs^oB.U-g9%Rv;^"okmgϲyu˜8q}OQK`װyu{YnpY! R5~G7”[]gw^yx;$T.'j -'TβK kD'R;P bË7ZqHJk;Ruq躮1 C|# ƴ)ms=E!&IS+$ >>. o üLYҶjm,>4n<>ϢI>?+$hR2˵[{ݗ>bay,ןo6\OX>6%0z Ou5uH/9'B Cz}OnYv{tp<}G9V)n -g_*/2| 7^zE63MOM)?Jz/wRo/Pa{pğ#Jnok,-(/%J- KJsh1kF[ ,讓,KKj!PL.s1<a'^i ʲHP'SQ w❏?$qxg)ȵYh}RD}U{z?5e u[Κ)qT#'}*O}~z7ǧP Q 8]](b@4+ϿwhPƹK~E`֟] Ɇ↍PSwՏsM8UFiE)2T) tg|9,"f%PCT̻=TU}"\yӿaw+Q)r%T _r) Jl%K1.-| ^NV3 +;k! C.@7ଓs8~j 1#y1s$.x֚&}(O9@ )7?{dj%'gK@"}Q@<'-Di3A +c mN,i䎼 A(0fg-ewŜ_{?~wUOjߏ"8>jAެ[\5c7-,>jzǗWט_%י~?xCJb,,ĠR-:;3R%2^8D/`<=a:PJt=475ul-Y*oL%m8 nG)1'k7ɏ?K n:&FjnEGɣԧރRZP'BCtcZR) <%STECſ 3t;="Գk'?!E8=z;8غy9b{[.Ļ9?ޫ }\;6׉'xNl)J DyprDXuxyto6d`Fqǟk GZi}O9˜AJN:iYdѰ8' e  r5jBk)tm,;y;\vy*yaFn\I~/;{?R&߯ׄiO8!Z\gb"7;T1 17~\n6)Hv!+1I: :'x\(qBA2InY~c)Uge)U}v5jjuja VjzYzXt2pK Q\3M#d4`@Z}|ox+䵜:^֌7`5e)i\/\tC$i8g Hg/=CO>?|o|?|5+#;7~x;?l'ת&?G> ?ϗ}˟7~ws?< ~{仏7-翋 E,Q)p$]֜(Z!IJDŸ3_`p{դ7n?(mT˫4W|%h/3%a-x]_%j^cWK"rns-1L h"L|_|/)DVϿBN},دW]nb|ۿßvZ~G#@qrr~r8}|#o~q jCDz/WAD0qk$NXIʭ?]od]Z ^ϸCf1A ^b(U}}#_: #(Fd)*s!hekg׽VfAsg뾆ʟ22Ԛ$Rk V 9I , !NGiA]"Z+1)GY2y6'ߎpi: [TPusl#,IUkܵ _ tC(:ß{wqQ{ɷǏ{+ԺwFv䛏{@T'+B ]m?'^\G|%SLq:XK<F N1pИj& [l%32K 7ZHe,]S^vF-_3rfOw+b VGM4Ϯ4(/ΗO<)Auq"N(pGcɻ E ݍ 'x뎿Kr teR12P#ň\ p%d 1vNH1BVV ~E b=jKK۝Vt^GI@=]'BJv'j[^⿝'?8}]Br5T$$}#@zO{~ºw_\,B}1 *k{x z4x -n; \2-3lNkQA]ZUoc_*3r'WyxyeEx0F`$Z8ٷ|/w?  _O<A%-w,EYaEӯߍ}/nܗRS{xB}xw~PkA>;aZCDe*{' >ǟxGqjf[*=RF',{ZhRH6̨5eC+['AQf@K i\uP!R4CJQ~dWC `%bɠs]|s4~?λ?=~V?IV Kn?~C}tg?~/_^n>;ի ?'PUI4bfvY>}qϿ0_\z t@;ھjTݿ~9_ΟQ ~ӏ3s(l IDAT9)]^HQ\Ѥ׆9̗v'D:hxznjŋ؍7f-E쯡]O?r=O{T4X#^$ZnģmPێZ+a35?~t-rLx?};Qo?urkx񷞸z fZ2Ji̅K+Y~wfޔy>I լ4L) 꿲k=~E N-J)șA9AEkUg #sJ&Sr۝$X75e4co>};3_Go?~:b@K?~hXV ^C_n?5^GWn_{?A7翾͵Ȍ_Wm3lZ8_no7/cn?ID +U۟֬WÍp r^o4Ayo. 6H(t#90=\. /|/ * ;E?JEgETPF% HqBa%w8sQ,RLZF}mA[]z”;2Ja5vi"\ aPاA)t;G @J=MҾ:ד ,-'t+x)RÁzpMcx8~i<xXj͈+٠)pj@ƪla};kz~] wp}NT\+ ),JxXYxC.fQ`p}X ]ӔEPbUufhA`젌AI\P\*) Zb*A'<%fC2 k w_i qLaNdg)E 8wΑ# h,yw<8p{(x* ~WOk@ݣjnwKJPь+j.7 P ݎYf؂2^7iDw8tR:A+9[͆om`;hm %VD7-% ,}ix$29\X)ȺC%Zc䆭< pyVUs"z!0b.7u% 4$c4I_tv rw uĔI+5DL=q3jkP1[<$ ^6 ЯW<\Ixsu(-X롅RD g̑]оZVX(~N['jF-f8Qt 1Ehߡ"$(}x0ZPY!eR8S1+#eȐ#kN A#FY22o"nT]^Py{@VYd2^SO2sM5 cu,YD֭* N4U a ٢agV Fr[;[縉,ZG'J!vC3E3@X&]<Dn3%dn;が๢4r 0ޓ,iEYrbDsalk ו'lZZJ16H4ǮMOqV;01zi=j|%.)M!4CyJ847 b Z,1#+ر3Q ShЎ*K؁ϭ30s(n8Oga'BjN4PS뇫TmS^0..)LxjE*%(Z$BQ^AC(E)T Vq|4'-[0k!Zxvi-m &] b&A Й$pVƲG_fKo4Afhv ]Z%~@>m9k2O˔,_C.n9%x^"4jN󄦵nA4x9J1GJr0:RS@a%ʌJ )e2G|y m_s=˭Ŕbj#c$ 6 ?!5K8k ncyn-܄RDuD Ƒ}pkHӈnwCZ{FsAh ݩHFJu`ힲ[m㚲V*̈jifk!u;+Kk$6MZhҋ2ƕP2rt jmHHCkp,q֔$ ] Hګ6C*R% %LA.)^WҌY[ږ22Q,tdp:-v [ H5cblx{?Dn{ʨc`"@4ZSfR5Boze)hUc mPlG`y$4@]RBf:J(tXp~NsmЊ6O✛5#R9#Fy`5S<IjJ_laA֯d倰]7[P:()r-Zd !'$A:s<+n'~pz &#j)Gx͆,֢JOZ 1xDP#+љҚ"7;N֚ʸ&%g)ٳ܊oFǔ2p .|#eV%w5}/Z[g&0m#tYIR82X\ xDR'o?svnr70}/8BBԖDE jfHh ^؆I2QY^[=@5F9P#ܕ1(, L` ۍgyhoZC8\bbn) Xj)]=ґiPDK!JU9 4S'RI[k!#r1'd\FEu%'{h1e{Ju [z_^B94;xK; ,ž7gn) +25S9Jr yCˉq^ya{-Esr@MieD:GRp}O.3ŤfR,ZV2Z* "EŪ ,!a9zwx w2hrsa@g%'iD 5Ga#&"lx'۲C@\ +Z *{HPBAmfE)27=[X{bDE8  59Ė}ŕU)DRmckX1pB!GxjuJLp@ir6:ka:Α[HDKga)9ܰA 7QiP#1Zpbo;<]e4i9KQCzخ#Ф$44#&v6K_5q'VW\eo19־ ]ɾ˺[JC m%V)gaܪkkZ"絈]Z/V20H@zQFL[*EB߯`sJ oyETXv[aQG6㕌5gVڻ%Nc^+O0M23UZ*pc8B-Uw'оII筂Z$OsDk*.cJpMi\*VKzD嗵W ҊҦ(m)EM<TI,5]GY [s QC?J!WABV ɲ&p@ݢ=Z4x8TOTmp7@02ujNy);%91FI*MϰL hAeH#uH)q˦^^w>+w!Ϭ`0 : œK9&rК/4(W@}L u*NJ(NV:GrpЃo+e1_tAVWTmMɉJJ\b5lwO;Lй+8⭜o=9由6)jOm 1zOzT1'č4ԢK/eKh 闐?ݖ큓ͨԂR RVY Ps&3. HY`h i.ˆʒ8LX$ &c4EK8vY*!y:}Xj2:Z hbI}}[y IDATc :z,lJ5'UdjlF#2V< oA~#d*nYIZ\փVj0 Z5rbDkM䚤.DP<2sdK x(R%di:YT~JKMq˴V)CukE2sֈV*ti1r?əZER֐*U(\^@D|qńJk#mSFqB?]9׌tTuE)c tí)oj%WP7Hܰ옘bل=3`:h1̓+hfJ (\x*TdLGmV^л)]Z&1TVXg % RC҅t/W Rx<.ћ'|DXw= \ ;ukg';_XL"(3E[/Q;HY2N@S9 He–Llb9qrЮ6,3s=4J ŕ(_ei7EDcp<\`RT1 VPfkD)N =\?̵UĹ&F5됗5jtlQ ,E6r%7~UZ\)~{Q]OIPn]ױhly)jK^Z dDTJY''U}NJeH+^|D1wD3ί7bPBO~J,Hth8ӓ4]bM hmY9m&9!(>0)!HSU1Tjޡ0Ayhed^UbCP"QnSu]wl٨ +7M#"0w7ۡ%Yxї9OQUsRLzIci哖rϋp2U=RJ!%ӻ '1<[[=fh D$ 4 7X/΁ycJf OHۮ'-{a"x ~ciH9Qd]洖ib))L\!QXEnN4Tsnۼ|bUq<V__J)aF*e3($A!DQwrn=3 kMBENI*̹8`:D}{i}JJ0$ז^"%*k|eX^9hm8B+ET M %Y#8UEBOK/JmHBVYG7kn[7fJ-!ƨc2 SUΎl%)H Ej-#*ݎ8 kC8Noɦ3JkeG]XYsnJƛk|FXV{qU( AYѧn]͠z>|7ZrN <(sy+Fk*/G~!i[a yBRֻuQlq>^J o6Szmm=r`! q§&WۯykMTUxsre*!a ?Ne2fY+=jδ9>mr)v9v-ktn3NKądLg:߯no7[yC>MJEVܰjSđsd)0-ibp ,ZyB U@:A*)1PDSVA!|Q)!\^#.H—o}K%X@:0-{0:Cy@ whh|^D~]zQ"X-~(Y 9tTgol•PЇbRDh]BXdZn"qNE8Xzq͙ՆVuDGBxPZkq OGG :>#Q%R!4̉:y+%AiD=-w9WbQFH&vSM&; U '$Ţ;ߩ(*2i/Wq>JɆ[@k-OxjV0#UF3IEWwH//r{F'X¿FY8Fh {ՀB'.RDMnYȬI4b*Aci3 LN~›6gy|Ya}jwF2뵌v{kɾD?ő"fN_0, H&T8J ׸ &Pkn$M5Z/0r!8OCI{UmO{Ӛf5'|o5Iu# _ y:M ;gZH*Y]a(1օV;FRŒxI8vZC&#Yg,'VQJ{ꯅ#]Kp-:_~ѵ{V~ǽKTy~Z/ ,lync;Er8271#K" bwog{֧kW .}gpχ> 7[d˜? > 7>П*OY wOq5<?{sϜ ^ opÏ{ ={ggg>_sEe. w}oq[A|/w?|{pml#{v˰qnJ*bu\ r-K#FՇmw$_I\v>g7>d_~pv{?~^Xϝk ~Qw:ꎯ_ "}6_w˻nٓ;K2)@16siE'v=:jzauC+>9~+9}}W_~>OW;n}Q~o0],|y~e>8® ~o*N(q%Wq|;p-o M2S(=7oc2aE>x _by-"|QH@3M#Gv2RMB eڡ~Jߣ0sDVZ j) ŋqQ2-RH3'qODܴX+;ߵ|U5~~Ve1qr}1:˸r?z!E\9Wpڷ}gq_~pߧIau}kyp[fi9hEٯ8Z$Aƹat!+S\?vC M?O~χ?>ΰq~͌ȝgf: pm ^{ yJ~WHof/_k˥=p)o kkIt}K8[V]@.buCsggx>ZEߎ[+Ew;1ШHnEoVx'ĤvQ\w'4+qP]G+&n9%EB />J&;Z+L}CTخ}ߓy/yƳ/^a̷u\i8;E%|c?{?\3({~ ?^U]K~m|TK ѽH%L*~5 LHcw;l׀N8rgK? bJa_o X'27>@UlTxX(I^NV`7 ȸH?g|3-sv{ O?o4q/8ZN'$`ߟxW1OQ[ee c|ûy e,{ ߆"a{w}o7=GP׿on}SoͿ5o:7K1-v{\SR"]'Ɛ(mh5u@r $4#K e6F} HX6f-*6W%]ZFUJsuy %`/a|ûHy <g_"_ g+;qo'/Ox?V|)\W~tm'x oxuB鷾K72|qǒt.96=DIY95&c1P'UP}OإܔYeָ0vJ( {o*8JzEQjl.'Һ6WG#4 4gQŵw1xֻnu݈yGE8f0W}z=8M=Es NTvsDXQjJi8EÊ}^M d8 IDATƑu1ðI@g-k0.\ƵoyXl)06oŒ&t]k-EÀpʁ?"#vMq84)NOn園bE)j[t^*^)zR 5YetLhNAA^* X3hk}91ί+Ҷa9_Cq PKE7ec3)o?1j։Ϝ` ۺG g~r 4DGBc8~*\~G8cωVPd˥j 77r2+gUI^EcF2|_8sHr]kdI21 ^ԔTanq!Pem{HW Q7;DC'1Tnf~~L{6?jZ%߯; Zq,#pBgB*L_Yf􋱗œ~ZGPԩu{aIS%`Λ0!xxBnd;GB>'쯾!V~'ɰfzOz̫1'A6t3 (ˌVn29Mw[3ꂭ9Mx ZyAEY hs".+QR}KA~YXr{2ƚ{GU,v:F.Y(Xkc߷"Fq;0qAiMj%%ZasAM/KP#`Y6eQD=0 Ĕ-10M5"JZ1z)/;P!;! j-PskWyO5q]qoBtXa{ۆ@i𺰪6vxkEPy:N7 ,z>PA)3JV(EJ$࢞젭ň]h͉FBbv؃,*qV.F;JԔrj]PIcfk.;ZN6ф(>f&U^Б&@dI; 53+q}c:j YbZSG;*y罧]7uT4kU}Hqkk; ? tQϭ}>}4`Х$J3ZSP1j&0Q:W- <-?؈M.P/6iaNx `<بjc(sI"<ܐ3P,r0h>;.U%H+ M,-&uO.'.xބ!t3 ?6@YGu\|c9PZzLXQ3].[Ęt&&=3c^u95Ա[`58ڃӹdLo lC@Ϸ+PtcnbW\Tk-L'/ g\o@Zq謶W[ѱWq8ᬑ?@*z~a["J1mGRyY?7%֨VjhiI\KdW ",>pNR[~*;;TeMQ֢kD]{ y3[ˉT* 3i(N9<u-C!O~kʶҰeÙS~f5HOW8wNRg#I5oJLX%vmj 4RP ( 4*GLqu:t4mH5 &2<2Mmtl\khEebl,yD6g P>!6X2 z *)v yd[%&F|wazC-5ɴu:#"eεb-c׳,-{Ρ$U ZFB(C[r`U:ޣK36\/>AӍ "os%qkUYºX=p.&)pryҵ^S;{(gaA<+skєs]il ux>˒3YR+\ |"{luRȪ+%)ۮ'BKDUBV%U'NR817J B CkP j܈cˤ LJeE a&䐂Hś~(/2PDci됷%فB2)VI)*P2QU|lhưR]ȓ'QD5jv~5  :5k %.FNjZ.阛M91yĹK?9>4h .[Ԯ[r >FB`fQ9rRCRfm$6@fuhF/|H1`)MrJ072+"ң.o'DžIް|9OzIZ[zH#6|Q*A6P,ʲ8d*܉kO~ąhJp⓰&oҬ']٦:q˦5*`Ÿ`[(3*2Wi4=i?̣xxz)R ucx˓6^g/g3G&L7 FǛyٵ+M: H(uu {M۴8Y}h(MXt9h_"1 B)h%#owf]^>FSlC98H@.P+ؕW}zB|$8v8VY6сeʥ9FzsoVL.D9܈!l;J.ODՐd:Mu(!eL)3WB8ny#JKKD G-!g%2>8.92r{r+zM\İeվϷa\gyC"NEID M=agXe˝̒a\ YCQrR#zLREြߌw~n4,djVR&݄^sA͜wCFG;SSUkGĂV2n^d+7?j`AA~PuGYܦ8m=Z.tpVoh:W(Pm"˱K)ǁ讖˅I9v>6ٮZ9 9ßϰ⎗㘼ֈi8z٦ gBs*K(aizbMt٦'oOlZV;u•E63ؠ xstch8@Yky Z=eZ `E{&񬨬 1n&qw}ɮu9y.g+\%,nԽ&ә EYayR"8]fLiVܪR (Fp]ouVK؇^f( DD-|A" DXsap۵< $|@*('BP/V!x,R<Li#(j5߂mldkψ]&U b'1q=IԳBT^(3) JTeo))[$~<ʽ{.,%39䑞#TZ{YF3Sm7%)-AaN̖2AS`jw8H_ghGy(0t(t1MZÖeMh8@MCvҁ^2zɯAyj eή;Τ: g܇Ʋ 1S)nge~?+ EߓRHaLQ@ARRV ¢ M(Y[9f*]CU6̅JH1OKp*ipSi6F )'}`E$hi+geSŌDF~zq!J^=vʒ]sO* aݥ=]U n3ry|(Pyi]:Z}qNI(m:Dk6E.![ʖ60kQ8VK}Hu14)3zdn?+y-)ᵢwq!t#.T ֔>ǔD}mfXpc>tn03}/9a5{?O~ɯouxtF=oW ^z8V?'/~}UH++o޷9Q]7_O4&}Lka'3{>тKKNivFPgaN~ڑ5c҅4Bv]X>+l貙ڵ  ҩ?q0k>eۈѕk4_GefLDn6f)v4S0-Խuiϳu0^Q ^BK mu*zenj }?AWٸVB3'G3 qt#`Úb^%ׂ1^1ݏ{o]56 w+??~ӷ_~7pq_/`tuѰp>g~=z0Z;|veļuAJ-32L~uHҌi<6ވG78 h5eI̷clRz){dyCb<%8vvA3}CX"=x8>r{ܮˉjc[Ohr*7u8񴏧Wi_WR_aSJ@N+f} ҥUFn?Oz) ˯iP`-b$~$yH)R ƢXS%‹RR"g|g;Ir f=y"2&Lw*W`3ᩘSB a#⠌h)ˇ^rOp ߮A9k@_Q NqJ/̮ ˙IQGV}+wmyRv!. J{dz}Ԇ)sUvBr4<}L6I#L0FN%ƀs"U( do7AZ\ю ǾӅSHѺjcHWz0MM@֚U1Hp{\ Z=6N| ^VoG8Lָa 0pm  xGt9`|jc(MFZq 1adV;S Ӆe!HUGO?Q<-*{C<](5 ЍA9Hi=P:LMpi!OF7ΡKRX=@w{";Ck9_p1CۛݩU1JKZM)9>/zIH\5K7>E޹m"/錖U0`YMai=(.pXFknTYZVr#'O>F'9K-"H>rfۼミ9bhKUxxC̀)x 5'S圧߭cbl+WUn5z< u+\w:|\h| >*oq6PLmK SM, z_FL`G4 ,>+ӈAR>!ݞ'VZ^߄%<qMuk Yn_aw3Ͱ ⎕7JazbVz5vMqY'*Ɗ^QoSH4,L\!]=:f q!_m(~Zyc/ Zj|߈J[^$u,/^ߥl8ǏxM)F xt[e%+rq'i(Zn7}!N1׭H_7~yi+~',u<\@pIהpjirF[)@Jpφ# w3'o/(8Dד跍 A0@J)ß(~evc@"@լ;cRVZWtPG5ba0ceIS?B޽ `O t*B\OZ- Tp3궡O+njد3ѻuTL,c^t\E!.i 2ϝʪ P뽜ksqd,/_EU fQXŸzxGRn2 &ȉBxZG1XwT)L":Pw_C4X&@17s,kSJw Dn(jWF#1PNJ̯gs BD\Pnn8qe;:E1TtjR@VӍ|aPL‡#2Ƈl]6XaeJC Va\β&> {5itloz|?znXD|G4xi ,:Ũd&Zr7x 0[A4ikk OJ k"s(t{|qtVJdzv7 cnXTHkFi~gSzV`J_"mAHC$gQ{< >Np~CTk i![[E/ =1R\z(˅>ݯbbdpc̈́2^_qQئ\^}D ,u(iG6@Ykc粠;Z $tc?hϥfM8ˆYZ :lQ_0vNkr{lZdFtuLDRKkỳeЂJNlS:|/;| tuEt2ۋiNB3" @o V> h{A IDAT<QXR֧-:^1rQIw+/{?זo/",)>?>_ _g;?c GNo_0 0အ~*yѻB\KS_wuwX]\{BkU͠A߱\.sԶ;NsS4RY^0 gÖΊڙD 51SO٪nhy"lvx,1 2m6AEL&I cO'm[DԱ7Σk,\〭 5dUC7l Jv·Vj|>+)( UZf 8x߹IխS?3[=aR5->+R6>;ا+S}w? e|ݿj6̯OxD;/~ߚ0F SKJQ rAҩ'J}@+~g5,1Y nv YuZYN+w*KX.,/_*M]"UӪϏ ̸D5 n!R 2rI a]84 +P35 >n P+KPb8[QX g0C. m~yRP7j7za;ox敞3&sh;J`,@f;{R_i ;JWDӦ< \-b2`a3ۧ3rNRNDie!W *Oxp. ݶ~d`Y.]̏r{IIS3\,u&W?4S4>_&˒5>7x#1|MG:O`)֞ʾq&KȈ4_#.hqizÍk #JN0.pp daY-*/eœ-0n< İBUhۦQ$ui#YΜ'WL/(<ʶs*9,-Y˖d՚kY5uQeZ9[hv E^3hiHֱƢE;x9j@Zk ].*ZUT4`da06J)/!D@%e8ߧsA݈kvjk݆OTgΧ|ꑟ& (Xq@3w5lDk 7α7Fw^yVGW߂w?Wr!c_-9;WU"J>HTe{ғ9+B9Dħ4c{A#޳Lhtbyz%|1'*X8_zΌ;0zί*]R\P i-0TYMRqr܊,L&p_6l B2̡=7_/|?wfy%L3hǁRVTux[GBt^1Cm{& j>vJ4+TN6Q}~]YB%$0N`F36Pq͙XefR!9 P|lu*۝7jm*YIڵ'<tA1ˍ>RNC\_ 3B|DO t(`Hi=oj/^XifĔ-n5V%cJA;r5ǡZ'xآᡆy&¡"=óPwV/{:-3W$cb6tNI;rcp;ZHV*sH'\6}ń`bMU | T) ߮Țd%/aY()K+ r!zG961M@CI;e2wm qHǎ+?,j5앜E9>QvtP)@QnVO;BBBQ;vC="|Ycޠg\N*JԳhZ}Q{KM{.]gNPg|"CkLmg[)M]Dp{o,V2s%EH 5hpV3lrUnf%Ycf\V2#fN 9H6yYIJQPVX%Xt:*" N)aF{CJ]q6r^ΘaԂ 1 ߯#. X@X"lx-zZĵV,s.ySX8|47y>W9E)QKY |̡j#$c}z&l)8gȚ`ÀY;U`C )$Mڶy`)Qgl\={'i'U( ,R)(0)9qp0pvÓ.ּA0Ҫ(\uA gmuZTK|Ʊm4CY=NNw:?Ӌ&ya@u҈qBapIpTPJZKQj&.S䐯O"g _:BN1(' nQpr:K,#Du зU/Ye푹n.*]tRGDSo R.Ӿz"WˊR+"GK|˜:gg[ X;xA #K!R~R[cWC!#.l-5q78, 4\^4owem:H~H7rG$T{4G)Sa =Tw8y8n!FԔX 0C!>uh::֑F / #}7"{Haih^9Ӎ[G/'P{YguGtJ}C.({dlj[Tg`Coit6Le]-ISA.Rj(a z.btpvx̡Qi+QՒ.RI|&o;C>J =*8kωBg;SQkaX;yRȷ;zFO;l]`k e~86rǝCo#k^zk9QV\.m!cB^szoeM|29R~D7Ӏj'߮lIwXօVQnW%ze k8^ݺޯ5ܮNNwd`0‰.'c;1+UU~)|1&oXN+ ,Q3ʶI&!d-~ 휃ua]aU`j=la4 ȣh(i ?ӋN@F /Ro@z*YkŦ9 D:~1 K󁙁>q!Mю 6Ӟ207&ACY |\c-!rSYMQb-}O y^Qai ʗ:&4,pC5KeKId>7z>9P|òR TJAi3"H BExEЭ3u9su8[N\[⾚C~Y@|#m ܍°",PZAaӄr "NSڣ8@#t`xzb?xlڌ\(3| &ŕu!:Gm:SXjJfj848P"@ŸZ+r XԆcM2ȵpNc4R5\U]cГNi p@mW^YZǭ}0o ]҇)ƣ7[:pXT8` h[:@^ؽwJAǠx|{1K f&1,Q o􂟟a vC[u'zǻ?Onxk)jGs^h& ]. -#pZe:}@n\`U:ik-l`oo\_4>?>{|G~g[}Y'޿0ǛӢ?~}gg>_BHuޥ-gJ̀*X[h l()+5glYq#w#Qk Uf$x yw3Ucj<-͐?HEY)9@bqfDE)0@r͜NF*ؚ8' [GXJjlXM,VIw۸N2XOuNPͱ+5Bi!D>MՕ8@P'БCl1G&[W|˯%.[\k7}?%5?O+.'s̄t}Xy*duC *sqh0O 9솱UPv0o\u&q-c:,Jh-;z"v=-hclH42_G'z:Wl8ї4}dCeS{Vx]9KϘ}@xלi|iuTID=Q$*3.$Elyκ(W48 /*V ig|۾G~, E!o{ongڢpx:'C5܈;.2Ǝ^zPnשr[NOV<_*|YB}Z8} _Ϳ%Hxw{%|WĨ1x@k~xW?~]ᇿcyFݠQ^ZcX aaųH;tQUCqUsFW԰^BT8rBXNtc`1zk7ġ֯?;>;?WG/N}Y䔜.E?'_o.|ޚޯYvg|os#IDAT-Uו‹iF|!`z$Q tXHᆎr*8$t9k.膚nmeΙuy0 [z?.𛿋ƖY6_ooU_NO@.sڟQ,-$ 9bM0S^N$09ˊ6oX//?}O9Hw|o*~C߉ooݿ$ 5w6S}?:⍣=ߗo+ȉoϾG{QXg{)woKPK][kyc\y[9?XOVݍB󌓺_+1#7 .lk-$jO``,b;fPZn1fF'|We<{ͨ`tJfad4α Ф~ּOՇQC fUpA_',—Ҏ3Z!dij,ۦO%ԱK a9M-{p:o34ҎirksBj, VpY"zog=cJƒ0x 椇 GVV|뙬##ke8~A@(3el/|\Q]kkSK՝GcЭe0L"we4Z:k<{U2t(c<;ya5HqC貜x˞j(( _wT=3yp·pvfɆ~H,d F>} 6 +tʟόxgݶXY\|mh94)]ډ3I4~=l V3=|b;鬽(P.}94FUMLљBU]+V&M]3# % N^`F 2I0Jγ;RR:2 K?1HXϓytfTʯgOxB:M؇dٹ.icЗJ`::GpOѻ}aO>zqŷ:l}x'tX鮭;tr ]|71ՂڥIMt9\yr{%m ?%Z6f7r A=UB++]{Έ*șU&FYuFw,[ʳGw:]{vlp#j:PsTgEF^"q=o=ѽϼ64ZQw@+oLI0(?Sbs -dn'Nc p&d:Ȟk XmGp!,i'e] PS?래kgG=Zi¨hW֡ܯh[k>^Z!*`"e8g ؍JDs O=BJ/4{0LF_-*Fa.JhOGiUЎ<.ڱhj@m-ú8Kt(iv90K ݎc|}IENDB`lmms-1.1.3/plugins/opl2/fmopl.c000066400000000000000000001116561247673406200163270ustar00rootroot00000000000000/* ** ** File: fmopl.c -- software implementation of FM sound generator ** ** Copyright (C) 1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmurator development ** ** Version 0.37a ** */ /* preliminary : Problem : note: */ /* This version of fmopl.c is a fork of the MAME one, relicensed under the LGPL. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define INLINE static inline #define HAS_YM3812 1 #include #include #include #include #include /* #include "driver.h" */ /* use M.A.M.E. */ #include "fmopl.h" #ifndef PI #define PI 3.14159265358979323846 #endif /* -------------------- for debug --------------------- */ /* #define OPL_OUTPUT_LOG */ #ifdef OPL_OUTPUT_LOG static FILE *opl_dbg_fp = NULL; static FM_OPL *opl_dbg_opl[16]; static int opl_dbg_maxchip,opl_dbg_chip; #endif /* -------------------- preliminary define section --------------------- */ /* attack/decay rate time rate */ #define OPL_ARRATE 141280 /* RATE 4 = 2826.24ms @ 3.6MHz */ #define OPL_DRRATE 1956000 /* RATE 4 = 39280.64ms @ 3.6MHz */ #define DELTAT_MIXING_LEVEL (1) /* DELTA-T ADPCM MIXING LEVEL */ #define FREQ_BITS 24 /* frequency turn */ /* counter bits = 20 , octerve 7 */ #define FREQ_RATE (1<<(FREQ_BITS-20)) #define TL_BITS (FREQ_BITS+2) /* final output shift , limit minimum and maximum */ #define OPL_OUTSB (TL_BITS+3-16) /* OPL output final shift 16bit */ #define OPL_MAXOUT (0x7fff<=LOG_LEVEL ) logerror x */ #define LOG(n,x) /* --------------------- subroutines --------------------- */ #ifdef __clang__ int Limit( int val, int max, int min ) { #else INLINE int Limit( int val, int max, int min ) { #endif if ( val > max ) { val = max; } else if ( val < min ) { val = min; } return val; } /* status set and IRQ handling */ #ifdef __clang__ void OPL_STATUS_SET(FM_OPL *OPL,int flag) { #else INLINE void OPL_STATUS_SET(FM_OPL *OPL,int flag) { #endif /* set status flag */ OPL->status |= flag; if ( !(OPL->status & 0x80) ) { /* IRQ on */ if ( OPL->status & OPL->statusmask ) { OPL->status |= 0x80; /* callback user interrupt handler (IRQ is OFF to ON) */ if (OPL->IRQHandler) { (OPL->IRQHandler)(OPL->IRQParam,1); } } } } /* status reset and IRQ handling */ #ifdef __clang__ void OPL_STATUS_RESET(FM_OPL *OPL,int flag) { #else INLINE void OPL_STATUS_RESET(FM_OPL *OPL,int flag) { #endif /* reset status flag */ OPL->status &=~flag; if ( (OPL->status & 0x80) ) { if ( !(OPL->status & OPL->statusmask) ) { OPL->status &= 0x7f; /* callback user interrupt handler (IRQ is ON to OFF) */ if ( OPL->IRQHandler ) { (OPL->IRQHandler)(OPL->IRQParam,0); } } } } /* IRQ mask set */ #ifdef __clang__ void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag) { #else INLINE void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag) { #endif OPL->statusmask = flag; /* IRQ handling check */ OPL_STATUS_SET(OPL,0); OPL_STATUS_RESET(OPL,0); } /* ----- key on ----- */ #ifdef __clang__ void OPL_KEYON(OPL_SLOT *SLOT) { #else INLINE void OPL_KEYON(OPL_SLOT *SLOT) { #endif /* sin wave restart */ SLOT->Cnt = 0; /* set attack */ SLOT->evm = ENV_MOD_AR; SLOT->evs = SLOT->evsa; SLOT->evc = EG_AST; SLOT->eve = EG_AED; } /* ----- key off ----- */ #ifdef __clang__ void OPL_KEYOFF(OPL_SLOT *SLOT) { #else INLINE void OPL_KEYOFF(OPL_SLOT *SLOT) { #endif if( SLOT->evm > ENV_MOD_RR) { /* set envelope counter from envleope output */ SLOT->evm = ENV_MOD_RR; if( !(SLOT->evc&EG_DST) ) { /* SLOT->evc = (ENV_CURVE[SLOT->evc>>ENV_BITS]<evc = EG_DST; } SLOT->eve = EG_DED; SLOT->evs = SLOT->evsr; } } /* ---------- calcrate Envelope Generator & Phase Generator ---------- */ /* return : envelope output */ #ifdef __clang__ UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT ) { #else INLINE UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT ) { #endif /* calcrate envelope generator */ if( (SLOT->evc+=SLOT->evs) >= SLOT->eve ) { switch( SLOT->evm ){ case ENV_MOD_AR: /* ATTACK -> DECAY1 */ /* next DR */ SLOT->evm = ENV_MOD_DR; SLOT->evc = EG_DST; SLOT->eve = SLOT->SL; SLOT->evs = SLOT->evsd; break; case ENV_MOD_DR: /* DECAY -> SL or RR */ SLOT->evc = SLOT->SL; SLOT->eve = EG_DED; if(SLOT->eg_typ) { SLOT->evs = 0; } else { SLOT->evm = ENV_MOD_RR; SLOT->evs = SLOT->evsr; } break; case ENV_MOD_RR: /* RR -> OFF */ SLOT->evc = EG_OFF; SLOT->eve = EG_OFF+1; SLOT->evs = 0; break; } } /* calcrate envelope */ return SLOT->TLL+ENV_CURVE[SLOT->evc>>ENV_BITS]+(SLOT->ams ? ams : 0); } /* set algorythm connection */ static void set_algorythm( OPL_CH *CH) { INT32 *carrier = &outd[0]; CH->connect1 = CH->CON ? carrier : &feedback2; CH->connect2 = carrier; } /* ---------- frequency counter for operater update ---------- */ #ifdef __clang__ void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) { #else INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) { #endif int ksr; /* frequency step counter */ SLOT->Incr = CH->fc * SLOT->mul; ksr = CH->kcode >> SLOT->KSR; if ( SLOT->ksr != ksr ) { SLOT->ksr = ksr; /* attack , decay rate recalcration */ SLOT->evsa = SLOT->AR[ksr]; SLOT->evsd = SLOT->DR[ksr]; SLOT->evsr = SLOT->RR[ksr]; } SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); } /* set multi,am,vib,EG-TYP,KSR,mul */ #ifdef __clang__ void set_mul(FM_OPL *OPL,int slot,int v) { #else INLINE void set_mul(FM_OPL *OPL,int slot,int v) { #endif OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; SLOT->mul = MUL_TABLE[v&0x0f]; SLOT->KSR = (v&0x10) ? 0 : 2; SLOT->eg_typ = (v&0x20)>>5; SLOT->vib = (v&0x40); SLOT->ams = (v&0x80); CALC_FCSLOT(CH,SLOT); } /* set ksl & tl */ #ifdef __clang__ void set_ksl_tl(FM_OPL *OPL,int slot,int v) { #else INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v) { #endif OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; int ksl = v>>6; /* 0 / 1.5 / 3 / 6 db/OCT */ SLOT->ksl = ksl ? 3-ksl : 31; SLOT->TL = (v&0x3f)*(0.75/EG_STEP); /* 0.75db step */ if ( !(OPL->mode&0x80) ) { /* not CSM latch total level */ SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); } } /* set attack rate & decay rate */ #ifdef __clang__ void set_ar_dr(FM_OPL *OPL,int slot,int v) { #else INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v) { #endif OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; int ar = v>>4; int dr = v&0x0f; SLOT->AR = ar ? &OPL->AR_TABLE[ar<<2] : RATE_0; SLOT->evsa = SLOT->AR[SLOT->ksr]; if ( SLOT->evm == ENV_MOD_AR ) { SLOT->evs = SLOT->evsa; } SLOT->DR = dr ? &OPL->DR_TABLE[dr<<2] : RATE_0; SLOT->evsd = SLOT->DR[SLOT->ksr]; if ( SLOT->evm == ENV_MOD_DR ) { SLOT->evs = SLOT->evsd; } } /* set sustain level & release rate */ #ifdef __clang__ void set_sl_rr(FM_OPL *OPL,int slot,int v) { #else INLINE void set_sl_rr(FM_OPL *OPL,int slot,int v) { #endif OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; int sl = v>>4; int rr = v & 0x0f; SLOT->SL = SL_TABLE[sl]; if ( SLOT->evm == ENV_MOD_DR ) { SLOT->eve = SLOT->SL; } SLOT->RR = &OPL->DR_TABLE[rr<<2]; SLOT->evsr = SLOT->RR[SLOT->ksr]; if ( SLOT->evm == ENV_MOD_RR ) { SLOT->evs = SLOT->evsr; } } /* operator output calcrator */ #define OP_OUT(slot,env,con) slot->wavetable[((slot->Cnt+con)/(0x1000000/SIN_ENT))&(SIN_ENT-1)][env] /* ---------- calcrate one of channel ---------- */ #ifdef __clang__ void OPL_CALC_CH( OPL_CH *CH ) { #else INLINE void OPL_CALC_CH( OPL_CH *CH ) { #endif UINT32 env_out; OPL_SLOT *SLOT; feedback2 = 0; /* SLOT 1 */ SLOT = &CH->SLOT[SLOT1]; env_out=OPL_CALC_SLOT(SLOT); if( env_out < EG_ENT-1 ) { /* PG */ if (SLOT->vib) { SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); } else { SLOT->Cnt += SLOT->Incr; } /* connectoion */ if(CH->FB) { int feedback1 = (CH->op1_out[0]+CH->op1_out[1])>>CH->FB; CH->op1_out[1] = CH->op1_out[0]; *CH->connect1 += CH->op1_out[0] = OP_OUT(SLOT,env_out,feedback1); } else { *CH->connect1 += OP_OUT(SLOT,env_out,0); } } else { CH->op1_out[1] = CH->op1_out[0]; CH->op1_out[0] = 0; } /* SLOT 2 */ SLOT = &CH->SLOT[SLOT2]; env_out=OPL_CALC_SLOT(SLOT); if ( env_out < EG_ENT-1 ) { /* PG */ if (SLOT->vib) { SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); } else { SLOT->Cnt += SLOT->Incr; } /* connectoion */ outd[0] += OP_OUT(SLOT,env_out, feedback2); } } /* ---------- calcrate rythm block ---------- */ #define WHITE_NOISE_db 6.0 #ifdef __clang__ void OPL_CALC_RH( OPL_CH *CH ) { #else INLINE void OPL_CALC_RH( OPL_CH *CH ) { #endif UINT32 env_tam,env_sd,env_top,env_hh; int whitenoise = (rand()&1)*(WHITE_NOISE_db/EG_STEP); INT32 tone8; OPL_SLOT *SLOT; int env_out; /* BD : same as FM serial mode and output level is large */ feedback2 = 0; /* SLOT 1 */ SLOT = &CH[6].SLOT[SLOT1]; env_out=OPL_CALC_SLOT(SLOT); if ( env_out < EG_ENT-1 ) { /* PG */ if (SLOT->vib) { SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); } else { SLOT->Cnt += SLOT->Incr; } /* connectoion */ if(CH[6].FB) { int feedback1 = (CH[6].op1_out[0]+CH[6].op1_out[1])>>CH[6].FB; CH[6].op1_out[1] = CH[6].op1_out[0]; feedback2 = CH[6].op1_out[0] = OP_OUT(SLOT,env_out,feedback1); } else { feedback2 = OP_OUT(SLOT,env_out,0); } } else { feedback2 = 0; CH[6].op1_out[1] = CH[6].op1_out[0]; CH[6].op1_out[0] = 0; } /* SLOT 2 */ SLOT = &CH[6].SLOT[SLOT2]; env_out=OPL_CALC_SLOT(SLOT); if( env_out < EG_ENT-1 ) { /* PG */ if (SLOT->vib) { SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); } else { SLOT->Cnt += SLOT->Incr; } /* connectoion */ outd[0] += OP_OUT(SLOT,env_out, feedback2)*2; } /* SD (17) = mul14[fnum7] + white noise TAM (15) = mul15[fnum8] TOP (18) = fnum6(mul18[fnum8]+whitenoise) HH (14) = fnum7(mul18[fnum8]+whitenoise) + white noise */ env_sd =OPL_CALC_SLOT(SLOT7_2) + whitenoise; env_tam=OPL_CALC_SLOT(SLOT8_1); env_top=OPL_CALC_SLOT(SLOT8_2); env_hh =OPL_CALC_SLOT(SLOT7_1) + whitenoise; /* PG */ if(SLOT7_1->vib) { SLOT7_1->Cnt += (2*SLOT7_1->Incr*vib/VIB_RATE); } else { SLOT7_1->Cnt += 2*SLOT7_1->Incr; } if (SLOT7_2->vib) { SLOT7_2->Cnt += ((CH[7].fc*8)*vib/VIB_RATE); } else { SLOT7_2->Cnt += (CH[7].fc*8); } if (SLOT8_1->vib) { SLOT8_1->Cnt += (SLOT8_1->Incr*vib/VIB_RATE); } else { SLOT8_1->Cnt += SLOT8_1->Incr; } if (SLOT8_2->vib) { SLOT8_2->Cnt += ((CH[8].fc*48)*vib/VIB_RATE); } else { SLOT8_2->Cnt += (CH[8].fc*48); } tone8 = OP_OUT(SLOT8_2,whitenoise,0 ); /* SD */ if( env_sd < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT7_1,env_sd, 0)*8; } /* TAM */ if( env_tam < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT8_1,env_tam, 0)*2; } /* TOP-CY */ if( env_top < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT7_2,env_top,tone8)*2; } /* HH */ if( env_hh < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT7_2,env_hh,tone8)*2; } } /* ----------- initialize time tabls ----------- */ static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) { int i; double rate; /* make attack rate & decay rate tables */ for ( i = 0; i < 4; i++ ) OPL->AR_TABLE[i] = OPL->DR_TABLE[i] = 0; { for (i = 4; i <= 60; i++) { rate = OPL->freqbase; /* frequency rate */ if( i < 60 ) { rate *= 1.0+(i&3)*0.25; /* b0-1 : x1 , x1.25 , x1.5 , x1.75 */ } rate *= 1<<((i>>2)-1); /* b2-5 : shift bit */ rate *= (double)(EG_ENT<AR_TABLE[i] = rate / ARRATE; OPL->DR_TABLE[i] = rate / DRRATE; } for ( i = 60; i < 75; i++ ) { OPL->AR_TABLE[i] = EG_AED-1; OPL->DR_TABLE[i] = OPL->DR_TABLE[60]; } #if 0 for ( i = 0; i < 64 ; i++ ) { /* make for overflow area */ LOG(LOG_WAR,("rate %2d , ar %f ms , dr %f ms \n",i, ((double)(EG_ENT<AR_TABLE[i]) * (1000.0 / OPL->rate), ((double)(EG_ENT<DR_TABLE[i]) * (1000.0 / OPL->rate) )); } #endif } } /* ---------- generic table initialize ---------- */ static int OPLOpenTable( void ) { int s,t; double rate; int i,j; double pom; /* allocate dynamic tables */ if ( (TL_TABLE = malloc(TL_MAX*2*sizeof(INT32))) == NULL ) { return 0; } if ( (SIN_TABLE = malloc(SIN_ENT*4 *sizeof(INT32 *))) == NULL ) { free(TL_TABLE); return 0; } if ( (AMS_TABLE = malloc(AMS_ENT*2 *sizeof(INT32))) == NULL ) { free(TL_TABLE); free(SIN_TABLE); return 0; } if ( (VIB_TABLE = malloc(VIB_ENT*2 *sizeof(INT32))) == NULL ) { free(TL_TABLE); free(SIN_TABLE); free(AMS_TABLE); return 0; } /* make total level table */ for ( t = 0; t < EG_ENT-1; t++ ) { rate = ((1< voltage */ TL_TABLE[ t] = (int)rate; TL_TABLE[TL_MAX+t] = -TL_TABLE[t]; /* LOG(LOG_INF,("TotalLevel(%3d) = %x\n",t,TL_TABLE[t]));*/ } /* fill volume off area */ for ( t = EG_ENT-1; t < TL_MAX; t++) { TL_TABLE[t] = TL_TABLE[TL_MAX+t] = 0; } /* make sinwave table (total level offet) */ /* degree 0 = degree 180 = off */ SIN_TABLE[0] = SIN_TABLE[SIN_ENT/2] = &TL_TABLE[EG_ENT-1]; for ( s = 1; s <= SIN_ENT/4; s++) { pom = sin(2*PI*s/SIN_ENT); /* sin */ pom = 20*log10(1/pom); /* decibel */ j = pom / EG_STEP; /* TL_TABLE steps */ /* degree 0 - 90 , degree 180 - 90 : plus section */ SIN_TABLE[ s] = SIN_TABLE[SIN_ENT/2-s] = &TL_TABLE[j]; /* degree 180 - 270 , degree 360 - 270 : minus section */ SIN_TABLE[SIN_ENT/2+s] = SIN_TABLE[SIN_ENT -s] = &TL_TABLE[TL_MAX+j]; /* LOG(LOG_INF,("sin(%3d) = %f:%f db\n",s,pom,(double)j * EG_STEP));*/ } for ( s = 0; s < SIN_ENT; s++) { SIN_TABLE[SIN_ENT*1+s] = s<(SIN_ENT/2) ? SIN_TABLE[s] : &TL_TABLE[EG_ENT]; SIN_TABLE[SIN_ENT*2+s] = SIN_TABLE[s % (SIN_ENT/2)]; SIN_TABLE[SIN_ENT*3+s] = (s/(SIN_ENT/4))&1 ? &TL_TABLE[EG_ENT] : SIN_TABLE[SIN_ENT*2+s]; } /* envelope counter -> envelope output table */ for ( i=0; i= EG_ENT ) pom = EG_ENT-1; */ ENV_CURVE[i] = (int)pom; /* DECAY ,RELEASE curve */ ENV_CURVE[(EG_DST>>ENV_BITS)+i]= i; } /* off */ ENV_CURVE[EG_OFF>>ENV_BITS]= EG_ENT-1; /* make LFO ams table */ for ( i=0; iSLOT[SLOT1]; OPL_SLOT *slot2 = &CH->SLOT[SLOT2]; /* all key off */ OPL_KEYOFF(slot1); OPL_KEYOFF(slot2); /* total level latch */ slot1->TLL = slot1->TL + (CH->ksl_base>>slot1->ksl); slot1->TLL = slot1->TL + (CH->ksl_base>>slot1->ksl); /* key on */ CH->op1_out[0] = CH->op1_out[1] = 0; OPL_KEYON(slot1); OPL_KEYON(slot2); } /* ---------- opl initialize ---------- */ static void OPL_initalize(FM_OPL *OPL) { int fn; /* frequency base */ OPL->freqbase = (OPL->rate) ? ((double)OPL->clock / OPL->rate) / 72 : 0; /* Timer base time */ OPL->TimerBase = 1.0/((double)OPL->clock / 72.0 ); /* make time tables */ init_timetables( OPL , OPL_ARRATE , OPL_DRRATE ); /* make fnumber -> increment counter table */ for( fn=0 ; fn < 1024 ; fn++ ) { OPL->FN_TABLE[fn] = OPL->freqbase * fn * FREQ_RATE * (1<<7) / 2; } /* LFO freq.table */ OPL->amsIncr = OPL->rate ? (double)AMS_ENT*(1<rate * 3.7 * ((double)OPL->clock/3600000) : 0; OPL->vibIncr = OPL->rate ? (double)VIB_ENT*(1<rate * 6.4 * ((double)OPL->clock/3600000) : 0; } /* ---------- write a OPL registers ---------- */ static void OPLWriteReg(FM_OPL *OPL, int r, int v) { OPL_CH *CH; int slot; int block_fnum; switch ( r&0xe0 ) { case 0x00: /* 00-1f:controll */ switch ( r&0x1f ) { case 0x01: /* wave selector enable */ if(OPL->type&OPL_TYPE_WAVESEL) { OPL->wavesel = v&0x20; if( !OPL->wavesel ) { /* preset compatible mode */ int c; for ( c=0; cmax_ch; c++ ) { OPL->P_CH[c].SLOT[SLOT1].wavetable = &SIN_TABLE[0]; OPL->P_CH[c].SLOT[SLOT2].wavetable = &SIN_TABLE[0]; } } } return; case 0x02: /* Timer 1 */ OPL->T[0] = (256-v)*4; break; case 0x03: /* Timer 2 */ OPL->T[1] = (256-v)*16; return; case 0x04: /* IRQ clear / mask and Timer enable */ if ( v&0x80 ) { /* IRQ flag clear */ OPL_STATUS_RESET(OPL,0x7f); } else { /* set IRQ mask ,timer enable*/ UINT8 st1 = v&1; UINT8 st2 = (v>>1)&1; /* IRQRST,T1MSK,t2MSK,EOSMSK,BRMSK,x,ST2,ST1 */ OPL_STATUS_RESET(OPL,v&0x78); OPL_STATUSMASK_SET(OPL,((~v)&0x78)|0x01); /* timer 2 */ if ( OPL->st[1] != st2 ) { double interval = st2 ? (double)OPL->T[1]*OPL->TimerBase : 0.0; OPL->st[1] = st2; if ( OPL->TimerHandler ) { (OPL->TimerHandler)(OPL->TimerParam+1,interval); } } /* timer 1 */ if ( OPL->st[0] != st1 ) { double interval = st1 ? (double)OPL->T[0]*OPL->TimerBase : 0.0; OPL->st[0] = st1; if ( OPL->TimerHandler ) { (OPL->TimerHandler)(OPL->TimerParam+0,interval); } } } return; #if BUILD_Y8950 case 0x06: /* Key Board OUT */ if ( OPL->type&OPL_TYPE_KEYBOARD ) { if ( OPL->keyboardhandler_w ) { OPL->keyboardhandler_w(OPL->keyboard_param,v); } else { LOG(LOG_WAR,("OPL:write unmapped KEYBOARD port\n")); } } return; case 0x07: /* DELTA-T controll : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */ if ( OPL->type&OPL_TYPE_ADPCM ) { YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); } return; case 0x08: /* MODE,DELTA-T : CSM,NOTESEL,x,x,smpl,da/ad,64k,rom */ OPL->mode = v; v&=0x1f; /* for DELTA-T unit */ case 0x09: /* START ADD */ case 0x0a: case 0x0b: /* STOP ADD */ case 0x0c: case 0x0d: /* PRESCALE */ case 0x0e: case 0x0f: /* ADPCM data */ case 0x10: /* DELTA-N */ case 0x11: /* DELTA-N */ case 0x12: /* EG-CTRL */ if ( OPL->type&OPL_TYPE_ADPCM ) { YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); } return; #if 0 case 0x15: /* DAC data */ case 0x16: case 0x17: /* SHIFT */ return; case 0x18: /* I/O CTRL (Direction) */ if ( OPL->type&OPL_TYPE_IO ) { OPL->portDirection = v&0x0f; } return; case 0x19: /* I/O DATA */ if ( OPL->type&OPL_TYPE_IO ) { OPL->portLatch = v; if ( OPL->porthandler_w ) { OPL->porthandler_w(OPL->port_param,v&OPL->portDirection); } } return; case 0x1a: /* PCM data */ return; #endif #endif } break; case 0x20: /* am,vib,ksr,eg type,mul */ slot = slot_array[r&0x1f]; if ( slot == -1 ) { return; } set_mul(OPL,slot,v); return; case 0x40: slot = slot_array[r&0x1f]; if ( slot == -1 ) { return; } set_ksl_tl(OPL,slot,v); return; case 0x60: slot = slot_array[r&0x1f]; if ( slot == -1 ) { return; } set_ar_dr(OPL,slot,v); return; case 0x80: slot = slot_array[r&0x1f]; if ( slot == -1 ) { return; } set_sl_rr(OPL,slot,v); return; case 0xa0: switch ( r ) { /* amsep,vibdep,r,bd,sd,tom,tc,hh */ case 0xbd: { UINT8 rkey = OPL->rythm^v; OPL->ams_table = &AMS_TABLE[v&0x80 ? AMS_ENT : 0]; OPL->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0]; OPL->rythm = v&0x3f; if(OPL->rythm&0x20) { #if 0 usrintf_showmessage("OPL Rythm mode select"); #endif /* BD key on/off */ if ( rkey&0x10 ) { if ( v&0x10 ) { OPL->P_CH[6].op1_out[0] = OPL->P_CH[6].op1_out[1] = 0; OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT1]); OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT2]); } else { OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1]); OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2]); } } /* SD key on/off */ if ( rkey&0x08 ) { if ( v&0x08 ) { OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT2]); } else { OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2]); } }/* TAM key on/off */ if ( rkey&0x04 ) { if ( v&0x04 ) { OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT1]); } else { OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1]); } } /* TOP-CY key on/off */ if ( rkey&0x02 ) { if ( v&0x02 ) { OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT2]); } else { OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2]); } } /* HH key on/off */ if ( rkey&0x01 ) { if ( v&0x01 ) { OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT1]); } else { OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1]); } } } } return; } /* keyon,block,fnum */ if ( (r&0x0f) > 8 ) { return; } CH = &OPL->P_CH[r&0x0f]; /* a0-a8 */ if ( !(r&0x10) ) { block_fnum = (CH->block_fnum&0x1f00) | v; } /* b0-b8 */ else { int keyon = (v>>5)&1; block_fnum = ((v&0x1f)<<8) | (CH->block_fnum&0xff); if ( CH->keyon != keyon ) { if ( (CH->keyon=keyon) ) { CH->op1_out[0] = CH->op1_out[1] = 0; OPL_KEYON(&CH->SLOT[SLOT1]); OPL_KEYON(&CH->SLOT[SLOT2]); } else { OPL_KEYOFF(&CH->SLOT[SLOT1]); OPL_KEYOFF(&CH->SLOT[SLOT2]); } } } /* update */ if(CH->block_fnum != block_fnum) { int blockRv = 7-(block_fnum>>10); int fnum = block_fnum&0x3ff; CH->block_fnum = block_fnum; CH->ksl_base = KSL_TABLE[block_fnum>>6]; CH->fc = OPL->FN_TABLE[fnum]>>blockRv; CH->kcode = CH->block_fnum>>9; if ( (OPL->mode&0x40) && CH->block_fnum&0x100 ) { CH->kcode |=1; } CALC_FCSLOT(CH,&CH->SLOT[SLOT1]); CALC_FCSLOT(CH,&CH->SLOT[SLOT2]); } return; case 0xc0: /* FB,C */ if ( (r&0x0f) > 8 ) { return; } CH = &OPL->P_CH[r&0x0f]; //{ int feedback = (v>>1)&7; CH->FB = feedback ? (8+1) - feedback : 0; CH->CON = v&1; set_algorythm(CH); //} return; case 0xe0: /* wave type */ slot = slot_array[r&0x1f]; if ( slot == -1 ) { return; } CH = &OPL->P_CH[slot/2]; if (OPL->wavesel) { /* LOG(LOG_INF,("OPL SLOT %d wave select %d\n",slot,v&3)); */ CH->SLOT[slot&1].wavetable = &SIN_TABLE[(v&0x03)*SIN_ENT]; } return; } } /* lock/unlock for common table */ static int OPL_LockTable(void) { num_lock++; if ( num_lock>1 ) { return 0; } /* first time */ cur_chip = NULL; /* allocate total level table (128kb space) */ if ( !OPLOpenTable() ) { num_lock--; return -1; } return 0; } static void OPL_UnLockTable(void) { if(num_lock) { num_lock--; } if(num_lock) { return; } /* last time */ cur_chip = NULL; OPLCloseTable(); } #if (BUILD_YM3812 || BUILD_YM3526) /*******************************************************************************/ /* YM3812 local section */ /*******************************************************************************/ /* ---------- update one of chip ----------- */ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) { int i; int data; OPLSAMPLE *buf = buffer; UINT32 amsCnt = OPL->amsCnt; UINT32 vibCnt = OPL->vibCnt; UINT8 rythm = OPL->rythm&0x20; OPL_CH *CH,*R_CH; if ( (void *)OPL != cur_chip ) { cur_chip = (void *)OPL; /* channel pointers */ S_CH = OPL->P_CH; E_CH = &S_CH[9]; /* rythm slot */ SLOT7_1 = &S_CH[7].SLOT[SLOT1]; SLOT7_2 = &S_CH[7].SLOT[SLOT2]; SLOT8_1 = &S_CH[8].SLOT[SLOT1]; SLOT8_2 = &S_CH[8].SLOT[SLOT2]; /* LFO state */ amsIncr = OPL->amsIncr; vibIncr = OPL->vibIncr; ams_table = OPL->ams_table; vib_table = OPL->vib_table; } R_CH = rythm ? &S_CH[6] : E_CH; for ( i=0; i < length ; i++ ) { /* channel A channel B channel C */ /* LFO */ ams = ams_table[(amsCnt+=amsIncr)>>AMS_SHIFT]; vib = vib_table[(vibCnt+=vibIncr)>>VIB_SHIFT]; outd[0] = 0; /* FM part */ for(CH=S_CH ; CH < R_CH ; CH++) OPL_CALC_CH(CH); /* Rythn part */ if(rythm) OPL_CALC_RH(S_CH); /* limit check */ data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT ); /* store to sound buffer */ buf[i] = data >> OPL_OUTSB; } OPL->amsCnt = amsCnt; OPL->vibCnt = vibCnt; #ifdef OPL_OUTPUT_LOG if(opl_dbg_fp) { for ( opl_dbg_chip=0;opl_dbg_chipamsCnt; UINT32 vibCnt = OPL->vibCnt; UINT8 rythm = OPL->rythm&0x20; OPL_CH *CH,*R_CH; YM_DELTAT *DELTAT = OPL->deltat; /* setup DELTA-T unit */ YM_DELTAT_DECODE_PRESET(DELTAT); if ( (void *)OPL != cur_chip ) { cur_chip = (void *)OPL; /* channel pointers */ S_CH = OPL->P_CH; E_CH = &S_CH[9]; /* rythm slot */ SLOT7_1 = &S_CH[7].SLOT[SLOT1]; SLOT7_2 = &S_CH[7].SLOT[SLOT2]; SLOT8_1 = &S_CH[8].SLOT[SLOT1]; SLOT8_2 = &S_CH[8].SLOT[SLOT2]; /* LFO state */ amsIncr = OPL->amsIncr; vibIncr = OPL->vibIncr; ams_table = OPL->ams_table; vib_table = OPL->vib_table; } R_CH = rythm ? &S_CH[6] : E_CH; for ( i=0; i < length ; i++ ) { /* channel A channel B channel C */ /* LFO */ ams = ams_table[(amsCnt+=amsIncr)>>AMS_SHIFT]; vib = vib_table[(vibCnt+=vibIncr)>>VIB_SHIFT]; outd[0] = 0; /* deltaT ADPCM */ if( DELTAT->portstate ) { YM_DELTAT_ADPCM_CALC(DELTAT); } /* FM part */ for ( CH=S_CH ; CH < R_CH ; CH++ ) { OPL_CALC_CH(CH); } /* Rythn part */ if ( rythm ) { OPL_CALC_RH(S_CH); } /* limit check */ data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT ); /* store to sound buffer */ buf[i] = data >> OPL_OUTSB; } OPL->amsCnt = amsCnt; OPL->vibCnt = vibCnt; /* deltaT START flag */ if ( !DELTAT->portstate ) { OPL->status &= 0xfe; } } #endif /* ---------- reset one of chip ---------- */ void OPLResetChip(FM_OPL *OPL) { int c,s; int i; /* reset chip */ OPL->mode = 0; /* normal mode */ OPL_STATUS_RESET(OPL,0x7f); /* reset with register write */ OPLWriteReg(OPL,0x01,0); /* wabesel disable */ OPLWriteReg(OPL,0x02,0); /* Timer1 */ OPLWriteReg(OPL,0x03,0); /* Timer2 */ OPLWriteReg(OPL,0x04,0); /* IRQ mask clear */ for ( i = 0xff ; i >= 0x20 ; i-- ) { OPLWriteReg(OPL,i,0); } /* reset OPerator paramater */ for ( c = 0 ; c < OPL->max_ch ; c++ ) { OPL_CH *CH = &OPL->P_CH[c]; /* OPL->P_CH[c].PAN = OPN_CENTER; */ for ( s = 0 ; s < 2 ; s++ ) { /* wave table */ CH->SLOT[s].wavetable = &SIN_TABLE[0]; /* CH->SLOT[s].evm = ENV_MOD_RR; */ CH->SLOT[s].evc = EG_OFF; CH->SLOT[s].eve = EG_OFF+1; CH->SLOT[s].evs = 0; } } #if BUILD_Y8950 if ( OPL->type&OPL_TYPE_ADPCM ) { YM_DELTAT *DELTAT = OPL->deltat; DELTAT->freqbase = OPL->freqbase; DELTAT->output_pointer = outd; DELTAT->portshift = 5; DELTAT->output_range = DELTAT_MIXING_LEVEL<P_CH = (OPL_CH *)ptr; ptr+=sizeof(OPL_CH)*max_ch; #if BUILD_Y8950 if ( type&OPL_TYPE_ADPCM ) { OPL->deltat = (YM_DELTAT *)ptr; ptr+=sizeof(YM_DELTAT); } #endif /* set channel state pointer */ OPL->type = type; OPL->clock = clock; OPL->rate = rate; OPL->max_ch = max_ch; /* init grobal tables */ OPL_initalize(OPL); /* reset chip */ OPLResetChip(OPL); #ifdef OPL_OUTPUT_LOG if (!opl_dbg_fp) { opl_dbg_fp = fopen("opllog.opl","wb"); opl_dbg_maxchip = 0; } if (opl_dbg_fp) { opl_dbg_opl[opl_dbg_maxchip] = OPL; fprintf(opl_dbg_fp, "%c%c%c%c%c%c", 0x00+opl_dbg_maxchip, type, clock&0xff, (clock/0x100)&0xff, (clock/0x10000)&0xff, (clock/0x1000000)&0xff); opl_dbg_maxchip++; } #endif return OPL; } /* ---------- Destroy one of vietual YM3812 ---------- */ void OPLDestroy(FM_OPL *OPL) { #ifdef OPL_OUTPUT_LOG if(opl_dbg_fp) { fclose(opl_dbg_fp); opl_dbg_fp = NULL; } #endif OPL_UnLockTable(); free(OPL); } /* ---------- Option handlers ---------- */ void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER TimerHandler,int channelOffset) { OPL->TimerHandler = TimerHandler; OPL->TimerParam = channelOffset; } void OPLSetIRQHandler(FM_OPL *OPL,OPL_IRQHANDLER IRQHandler,int param) { OPL->IRQHandler = IRQHandler; OPL->IRQParam = param; } void OPLSetUpdateHandler(FM_OPL *OPL,OPL_UPDATEHANDLER UpdateHandler,int param) { OPL->UpdateHandler = UpdateHandler; OPL->UpdateParam = param; } #if BUILD_Y8950 void OPLSetPortHandler(FM_OPL *OPL,OPL_PORTHANDLER_W PortHandler_w,OPL_PORTHANDLER_R PortHandler_r,int param) { OPL->porthandler_w = PortHandler_w; OPL->porthandler_r = PortHandler_r; OPL->port_param = param; } void OPLSetKeyboardHandler(FM_OPL *OPL,OPL_PORTHANDLER_W KeyboardHandler_w,OPL_PORTHANDLER_R KeyboardHandler_r,int param) { OPL->keyboardhandler_w = KeyboardHandler_w; OPL->keyboardhandler_r = KeyboardHandler_r; OPL->keyboard_param = param; } #endif /* ---------- YM3812 I/O interface ---------- */ int OPLWrite(FM_OPL *OPL,int a,int v) { if ( !(a&1) ) { /* address port */ OPL->address = v & 0xff; } else { /* data port */ if ( OPL->UpdateHandler ) { OPL->UpdateHandler(OPL->UpdateParam,0); } #ifdef OPL_OUTPUT_LOG if ( opl_dbg_fp ) { for ( opl_dbg_chip=0; opl_dbg_chipaddress, v); } #endif OPLWriteReg(OPL,OPL->address,v); } return OPL->status>>7; } unsigned char OPLRead(FM_OPL *OPL,int a) { /* status port */ if( !(a&1) ) { return OPL->status & (OPL->statusmask|0x80); } /* data port */ switch(OPL->address) { case 0x05: /* KeyBoard IN */ if ( OPL->type&OPL_TYPE_KEYBOARD ) { if ( OPL->keyboardhandler_r ) { return OPL->keyboardhandler_r(OPL->keyboard_param); } else { LOG(LOG_WAR,("OPL:read unmapped KEYBOARD port\n")); } } return 0; #if 0 case 0x0f: /* ADPCM-DATA */ return 0; #endif case 0x19: /* I/O DATA */ if ( OPL->type&OPL_TYPE_IO ) { if ( OPL->porthandler_r ) { return OPL->porthandler_r(OPL->port_param); } else { LOG(LOG_WAR,("OPL:read unmapped I/O port\n")); } } return 0; case 0x1a: /* PCM-DATA */ return 0; } return 0; } int OPLTimerOver(FM_OPL *OPL,int c) { /* Timer B */ if( c ) { OPL_STATUS_SET(OPL,0x20); } /* Timer A */ else { OPL_STATUS_SET(OPL,0x40); /* CSM mode key,TL control */ /* CSM mode total level latch and auto key on */ if( OPL->mode & 0x80 ) { int ch; if (OPL->UpdateHandler) { OPL->UpdateHandler(OPL->UpdateParam,0); } for ( ch=0; ch<9; ch++ ) { CSMKeyControll( &OPL->P_CH[ch] ); } } } /* reload timer */ if ( OPL->TimerHandler ) { (OPL->TimerHandler)(OPL->TimerParam+c,(double)OPL->T[c]*OPL->TimerBase); } return OPL->status>>7; } lmms-1.1.3/plugins/opl2/fmopl.h000066400000000000000000000150111247673406200163200ustar00rootroot00000000000000#ifndef __FMOPL_H_ #define __FMOPL_H_ /* --- select emulation chips --- */ #define BUILD_YM3812 (HAS_YM3812) /* #define BUILD_YM3526 (HAS_YM3526) */ /* #define BUILD_Y8950 (HAS_Y8950) */ /* --- system optimize --- */ /* select bit size of output : 8 or 16 */ #define OPL_OUTPUT_BIT 16 /* compiler dependence */ #ifndef OSD_CPU_H #define OSD_CPU_H typedef unsigned char UINT8; /* unsigned 8bit */ typedef unsigned short UINT16; /* unsigned 16bit */ typedef unsigned int UINT32; /* unsigned 32bit */ typedef signed char INT8; /* signed 8bit */ typedef signed short INT16; /* signed 16bit */ typedef signed int INT32; /* signed 32bit */ #endif #if (OPL_OUTPUT_BIT==16) typedef INT16 OPLSAMPLE; #endif #if (OPL_OUTPUT_BIT==8) typedef unsigned char OPLSAMPLE; #endif #if BUILD_Y8950 #include "ymdeltat.h" #endif typedef void (*OPL_TIMERHANDLER)(int channel,double interval_Sec); typedef void (*OPL_IRQHANDLER)(int param,int irq); typedef void (*OPL_UPDATEHANDLER)(int param,int min_interval_us); typedef void (*OPL_PORTHANDLER_W)(int param,unsigned char data); typedef unsigned char (*OPL_PORTHANDLER_R)(int param); /* !!!!! here is private section , do not access there member direct !!!!! */ #define OPL_TYPE_WAVESEL 0x01 /* waveform select */ #define OPL_TYPE_ADPCM 0x02 /* DELTA-T ADPCM unit */ #define OPL_TYPE_KEYBOARD 0x04 /* keyboard interface */ #define OPL_TYPE_IO 0x08 /* I/O port */ /* Saving is necessary for member of the 'R' mark for suspend/resume */ /* ---------- OPL one of slot ---------- */ typedef struct fm_opl_slot { INT32 TL; /* total level :TL << 8 */ INT32 TLL; /* adjusted now TL */ UINT8 KSR; /* key scale rate :(shift down bit) */ INT32 *AR; /* attack rate :&AR_TABLE[AR<<2] */ INT32 *DR; /* decay rate :&DR_TALBE[DR<<2] */ INT32 SL; /* sustin level :SL_TALBE[SL] */ INT32 *RR; /* release rate :&DR_TABLE[RR<<2] */ UINT8 ksl; /* keyscale level :(shift down bits) */ UINT8 ksr; /* key scale rate :kcode>>KSR */ UINT32 mul; /* multiple :ML_TABLE[ML] */ UINT32 Cnt; /* frequency count : */ UINT32 Incr; /* frequency step : */ /* envelope generator state */ UINT8 eg_typ; /* envelope type flag */ UINT8 evm; /* envelope phase */ INT32 evc; /* envelope counter */ INT32 eve; /* envelope counter end point */ INT32 evs; /* envelope counter step */ INT32 evsa; /* envelope step for AR :AR[ksr] */ INT32 evsd; /* envelope step for DR :DR[ksr] */ INT32 evsr; /* envelope step for RR :RR[ksr] */ /* LFO */ UINT8 ams; /* ams flag */ UINT8 vib; /* vibrate flag */ /* wave selector */ INT32 **wavetable; }OPL_SLOT; /* ---------- OPL one of channel ---------- */ typedef struct fm_opl_channel { OPL_SLOT SLOT[2]; UINT8 CON; /* connection type */ UINT8 FB; /* feed back :(shift down bit) */ INT32 *connect1; /* slot1 output pointer */ INT32 *connect2; /* slot2 output pointer */ INT32 op1_out[2]; /* slot1 output for selfeedback */ /* phase generator state */ UINT32 block_fnum; /* block+fnum : */ UINT8 kcode; /* key code : KeyScaleCode */ UINT32 fc; /* Freq. Increment base */ UINT32 ksl_base; /* KeyScaleLevel Base step */ UINT8 keyon; /* key on/off flag */ } OPL_CH; /* OPL state */ typedef struct fm_opl_f { UINT8 type; /* chip type */ int clock; /* master clock (Hz) */ int rate; /* sampling rate (Hz) */ double freqbase; /* frequency base */ double TimerBase; /* Timer base time (==sampling time) */ UINT8 address; /* address register */ UINT8 status; /* status flag */ UINT8 statusmask; /* status mask */ UINT32 mode; /* Reg.08 : CSM , notesel,etc. */ /* Timer */ int T[2]; /* timer counter */ UINT8 st[2]; /* timer enable */ /* FM channel slots */ OPL_CH *P_CH; /* pointer of CH */ int max_ch; /* maximum channel */ /* Rythm sention */ UINT8 rythm; /* Rythm mode , key flag */ #if BUILD_Y8950 /* Delta-T ADPCM unit (Y8950) */ YM_DELTAT *deltat; /* DELTA-T ADPCM */ #endif /* Keyboard / I/O interface unit (Y8950) */ UINT8 portDirection; UINT8 portLatch; OPL_PORTHANDLER_R porthandler_r; OPL_PORTHANDLER_W porthandler_w; int port_param; OPL_PORTHANDLER_R keyboardhandler_r; OPL_PORTHANDLER_W keyboardhandler_w; int keyboard_param; /* time tables */ INT32 AR_TABLE[75]; /* atttack rate tables */ INT32 DR_TABLE[75]; /* decay rate tables */ UINT32 FN_TABLE[1024]; /* fnumber -> increment counter */ /* LFO */ INT32 *ams_table; INT32 *vib_table; INT32 amsCnt; INT32 amsIncr; INT32 vibCnt; INT32 vibIncr; /* wave selector enable flag */ UINT8 wavesel; /* external event callback handler */ OPL_TIMERHANDLER TimerHandler; /* TIMER handler */ int TimerParam; /* TIMER parameter */ OPL_IRQHANDLER IRQHandler; /* IRQ handler */ int IRQParam; /* IRQ parameter */ OPL_UPDATEHANDLER UpdateHandler; /* stream update handler */ int UpdateParam; /* stream update parameter */ } FM_OPL; /* ---------- Generic interface section ---------- */ #define OPL_TYPE_YM3526 (0) #define OPL_TYPE_YM3812 (OPL_TYPE_WAVESEL) #define OPL_TYPE_Y8950 (OPL_TYPE_ADPCM|OPL_TYPE_KEYBOARD|OPL_TYPE_IO) FM_OPL *OPLCreate(int type, int clock, int rate); void OPLDestroy(FM_OPL *OPL); void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER TimerHandler,int channelOffset); void OPLSetIRQHandler(FM_OPL *OPL,OPL_IRQHANDLER IRQHandler,int param); void OPLSetUpdateHandler(FM_OPL *OPL,OPL_UPDATEHANDLER UpdateHandler,int param); /* Y8950 port handlers */ void OPLSetPortHandler(FM_OPL *OPL,OPL_PORTHANDLER_W PortHandler_w,OPL_PORTHANDLER_R PortHandler_r,int param); void OPLSetKeyboardHandler(FM_OPL *OPL,OPL_PORTHANDLER_W KeyboardHandler_w,OPL_PORTHANDLER_R KeyboardHandler_r,int param); void OPLResetChip(FM_OPL *OPL); int OPLWrite(FM_OPL *OPL,int a,int v); unsigned char OPLRead(FM_OPL *OPL,int a); int OPLTimerOver(FM_OPL *OPL,int c); /* YM3626/YM3812 local section */ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length); void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length); #endif lmms-1.1.3/plugins/opl2/logo.png000066400000000000000000000061731247673406200165110ustar00rootroot00000000000000PNG  IHDR00WbKGDC pHYs tIME gT IDATh՚{p\}?}hw-ٲ$K~ȶ.PLCh1ed:i%)҆0L43y$5КLBc%[s{9Ckv27s߹܅E7nqϛ&<ɽ?Ȓ[VPJT90s}:Zi ;U':7c_:p@szӇ֨ Z),~S7oش!q'@9~_] JTU,~I$#umWmy #5 )_krn pDrjW\{u ۯ>:sUNad ØOHH)r}'rP^zRN؜ӧA1khhaS=@`8.5krY )MT2ai2s(Bja}cmZ)]-Rvu)/КHˊ&‹ L Z#G*\X@NMH f!ozҡ ]5;.[7Z{yo U2_g1)У*c a31 ]YU$P|mtOWVȚrcc9EwOE mS咎m~= T(G |e32ze\? j lKbZ8A MJM׌^k;k*pYv뺉Ig) ܩcc~Ӈ^Kot\mcYEuuqi4 4Zə 4/19M] udQSx-`ɰFQ>TcQ4XжLUoi@ⱀ$NT-M@*+ Ot]_ ,hzb@mceCGD]x&38al2p#i.܎:NiY/WPŶ@Y^:ǹzU!%m3(:01|T@.قTv ܰE{:%XxO"?̴{k/qm"Nb ?o-]jk,֭IK39ޛGZ6FF vr8ǻ5ehŊeS}hˠ-n]X8v  ],G#~{D`}g ׍8aNyx{WX\`)w#Kw!($ >~hp@b(%֯ Ѷ,A*]E82$yVARj B S؎)!aH4!t*4Cm C 4zafоw-ÍU!=ZT;¶ bLҪ\UP*@+R6?]籎W鮞ӵ25D+?)yE['`߬貎h .%TQ*r"}>@w7.v1 B686@7]o> ǀsՐ>rݵ.ٜYR3 QFG{LO?@u9Q*xf񘬾(!`EbR3C]g$o^ogaQ`Ek@]0h4NLLB.kwovW'zygg p_1l\?(LT&@ SAM ec2zXjl_xfuJ~3Gdu0sЈ4g:(8X&3/Iʃ̥jv~έ+r'U][ȡ75>|> r7Jix?phMiYB[|U?Jkn_/>*|h*`Vz(5PԬMcEq1޴@a֒d^z *+(9.ڌ@[]ɏYk~fb|fr+a>-HYo*T@ʉ'̩C@߬5#ޮX߮u (a٢,ӳ󔓬5eW81kX3[{/8P!JcS,^9(ODW\\S_>0GTVkBP/)*#'fe|izNai9s86uxī/>~7Ϳ-T&›s{47tf"޹vcxѱJKOղy|۳-?VlIENDB`lmms-1.1.3/plugins/opl2/mididata.h000066400000000000000000000334271247673406200167720ustar00rootroot00000000000000/* * Adplug - Replayer for many OPL2/OPL3 audio file formats. * Copyright (C) 1999, 2000, 2001 Simon Peter, , et al. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * FM instrument definitions below borrowed from the Allegro library by * Phil Hassey, - see "adplug/players/mid.cpp" * for further acknowledgements. */ unsigned char midi_fm_instruments[128][14] = { /* This set of GM instrument patches was provided by Jorrit Rouwe... */ { 0x21, 0x21, 0x8f, 0x0c, 0xf2, 0xf2, 0x45, 0x76, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Acoustic Grand */ { 0x31, 0x21, 0x4b, 0x09, 0xf2, 0xf2, 0x54, 0x56, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Bright Acoustic */ { 0x31, 0x21, 0x49, 0x09, 0xf2, 0xf2, 0x55, 0x76, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Electric Grand */ { 0xb1, 0x61, 0x0e, 0x09, 0xf2, 0xf3, 0x3b, 0x0b, 0x00, 0x00, 0x06, 0, 0, 0 }, /* Honky-Tonk */ { 0x01, 0x21, 0x57, 0x09, 0xf1, 0xf1, 0x38, 0x28, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Electric Piano 1 */ { 0x01, 0x21, 0x93, 0x09, 0xf1, 0xf1, 0x38, 0x28, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Electric Piano 2 */ { 0x21, 0x36, 0x80, 0x17, 0xa2, 0xf1, 0x01, 0xd5, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Harpsichord */ { 0x01, 0x01, 0x92, 0x09, 0xc2, 0xc2, 0xa8, 0x58, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Clav */ { 0x0c, 0x81, 0x5c, 0x09, 0xf6, 0xf3, 0x54, 0xb5, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Celesta */ { 0x07, 0x11, 0x97, 0x89, 0xf6, 0xf5, 0x32, 0x11, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Glockenspiel */ { 0x17, 0x01, 0x21, 0x09, 0x56, 0xf6, 0x04, 0x04, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Music Box */ { 0x18, 0x81, 0x62, 0x09, 0xf3, 0xf2, 0xe6, 0xf6, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Vibraphone */ { 0x18, 0x21, 0x23, 0x09, 0xf7, 0xe5, 0x55, 0xd8, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Marimba */ { 0x15, 0x01, 0x91, 0x09, 0xf6, 0xf6, 0xa6, 0xe6, 0x00, 0x00, 0x04, 0, 0, 0 }, /* Xylophone */ { 0x45, 0x81, 0x59, 0x89, 0xd3, 0xa3, 0x82, 0xe3, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Tubular Bells */ { 0x03, 0x81, 0x49, 0x89, 0x74, 0xb3, 0x55, 0x05, 0x01, 0x00, 0x04, 0, 0, 0 }, /* Dulcimer */ { 0x71, 0x31, 0x92, 0x09, 0xf6, 0xf1, 0x14, 0x07, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Drawbar Organ */ { 0x72, 0x30, 0x14, 0x09, 0xc7, 0xc7, 0x58, 0x08, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Percussive Organ */ { 0x70, 0xb1, 0x44, 0x09, 0xaa, 0x8a, 0x18, 0x08, 0x00, 0x00, 0x04, 0, 0, 0 }, /* Rock Organ */ { 0x23, 0xb1, 0x93, 0x09, 0x97, 0x55, 0x23, 0x14, 0x01, 0x00, 0x04, 0, 0, 0 }, /* Church Organ */ { 0x61, 0xb1, 0x13, 0x89, 0x97, 0x55, 0x04, 0x04, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Reed Organ */ { 0x24, 0xb1, 0x48, 0x09, 0x98, 0x46, 0x2a, 0x1a, 0x01, 0x00, 0x0c, 0, 0, 0 }, /* Accoridan */ { 0x61, 0x21, 0x13, 0x09, 0x91, 0x61, 0x06, 0x07, 0x01, 0x00, 0x0a, 0, 0, 0 }, /* Harmonica */ { 0x21, 0xa1, 0x13, 0x92, 0x71, 0x61, 0x06, 0x07, 0x00, 0x00, 0x06, 0, 0, 0 }, /* Tango Accordian */ { 0x02, 0x41, 0x9c, 0x89, 0xf3, 0xf3, 0x94, 0xc8, 0x01, 0x00, 0x0c, 0, 0, 0 }, /* Acoustic Guitar(nylon) */ { 0x03, 0x11, 0x54, 0x09, 0xf3, 0xf1, 0x9a, 0xe7, 0x01, 0x00, 0x0c, 0, 0, 0 }, /* Acoustic Guitar(steel) */ { 0x23, 0x21, 0x5f, 0x09, 0xf1, 0xf2, 0x3a, 0xf8, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Electric Guitar(jazz) */ { 0x03, 0x21, 0x87, 0x89, 0xf6, 0xf3, 0x22, 0xf8, 0x01, 0x00, 0x06, 0, 0, 0 }, /* Electric Guitar(clean) */ { 0x03, 0x21, 0x47, 0x09, 0xf9, 0xf6, 0x54, 0x3a, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Electric Guitar(muted) */ { 0x23, 0x21, 0x4a, 0x0e, 0x91, 0x84, 0x41, 0x19, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Overdriven Guitar */ { 0x23, 0x21, 0x4a, 0x09, 0x95, 0x94, 0x19, 0x19, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Distortion Guitar */ { 0x09, 0x84, 0xa1, 0x89, 0x20, 0xd1, 0x4f, 0xf8, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Guitar Harmonics */ { 0x21, 0xa2, 0x1e, 0x09, 0x94, 0xc3, 0x06, 0xa6, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Acoustic Bass */ { 0x31, 0x31, 0x12, 0x09, 0xf1, 0xf1, 0x28, 0x18, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Electric Bass(finger) */ { 0x31, 0x31, 0x8d, 0x09, 0xf1, 0xf1, 0xe8, 0x78, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Electric Bass(pick) */ { 0x31, 0x32, 0x5b, 0x09, 0x51, 0x71, 0x28, 0x48, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Fretless Bass */ { 0x01, 0x21, 0x8b, 0x49, 0xa1, 0xf2, 0x9a, 0xdf, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Slap Bass 1 */ { 0x21, 0x21, 0x8b, 0x11, 0xa2, 0xa1, 0x16, 0xdf, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Slap Bass 2 */ { 0x31, 0x31, 0x8b, 0x09, 0xf4, 0xf1, 0xe8, 0x78, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Synth Bass 1 */ { 0x31, 0x31, 0x12, 0x09, 0xf1, 0xf1, 0x28, 0x18, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Synth Bass 2 */ { 0x31, 0x21, 0x15, 0x09, 0xdd, 0x56, 0x13, 0x26, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Violin */ { 0x31, 0x21, 0x16, 0x09, 0xdd, 0x66, 0x13, 0x06, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Viola */ { 0x71, 0x31, 0x49, 0x09, 0xd1, 0x61, 0x1c, 0x0c, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Cello */ { 0x21, 0x23, 0x4d, 0x89, 0x71, 0x72, 0x12, 0x06, 0x01, 0x00, 0x02, 0, 0, 0 }, /* Contrabass */ { 0xf1, 0xe1, 0x40, 0x09, 0xf1, 0x6f, 0x21, 0x16, 0x01, 0x00, 0x02, 0, 0, 0 }, /* Tremolo Strings */ { 0x02, 0x01, 0x1a, 0x89, 0xf5, 0x85, 0x75, 0x35, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Pizzicato Strings */ { 0x02, 0x01, 0x1d, 0x89, 0xf5, 0xf3, 0x75, 0xf4, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Orchestral Strings */ { 0x10, 0x11, 0x41, 0x09, 0xf5, 0xf2, 0x05, 0xc3, 0x01, 0x00, 0x02, 0, 0, 0 }, /* Timpani */ { 0x21, 0xa2, 0x9b, 0x0a, 0xb1, 0x72, 0x25, 0x08, 0x01, 0x00, 0x0e, 0, 0, 0 }, /* String Ensemble 1 */ { 0xa1, 0x21, 0x98, 0x09, 0x7f, 0x3f, 0x03, 0x07, 0x01, 0x01, 0x00, 0, 0, 0 }, /* String Ensemble 2 */ { 0xa1, 0x61, 0x93, 0x09, 0xc1, 0x4f, 0x12, 0x05, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* SynthStrings 1 */ { 0x21, 0x61, 0x18, 0x09, 0xc1, 0x4f, 0x22, 0x05, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* SynthStrings 2 */ { 0x31, 0x72, 0x5b, 0x8c, 0xf4, 0x8a, 0x15, 0x05, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Choir Aahs */ { 0xa1, 0x61, 0x90, 0x09, 0x74, 0x71, 0x39, 0x67, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Voice Oohs */ { 0x71, 0x72, 0x57, 0x09, 0x54, 0x7a, 0x05, 0x05, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Synth Voice */ { 0x90, 0x41, 0x00, 0x09, 0x54, 0xa5, 0x63, 0x45, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Orchestra Hit */ { 0x21, 0x21, 0x92, 0x0a, 0x85, 0x8f, 0x17, 0x09, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Trumpet */ { 0x21, 0x21, 0x94, 0x0e, 0x75, 0x8f, 0x17, 0x09, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Trombone */ { 0x21, 0x61, 0x94, 0x09, 0x76, 0x82, 0x15, 0x37, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Tuba */ { 0x31, 0x21, 0x43, 0x09, 0x9e, 0x62, 0x17, 0x2c, 0x01, 0x01, 0x02, 0, 0, 0 }, /* Muted Trumpet */ { 0x21, 0x21, 0x9b, 0x09, 0x61, 0x7f, 0x6a, 0x0a, 0x00, 0x00, 0x02, 0, 0, 0 }, /* French Horn */ { 0x61, 0x22, 0x8a, 0x0f, 0x75, 0x74, 0x1f, 0x0f, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Brass Section */ { 0xa1, 0x21, 0x86, 0x8c, 0x72, 0x71, 0x55, 0x18, 0x01, 0x00, 0x00, 0, 0, 0 }, /* SynthBrass 1 */ { 0x21, 0x21, 0x4d, 0x09, 0x54, 0xa6, 0x3c, 0x1c, 0x00, 0x00, 0x08, 0, 0, 0 }, /* SynthBrass 2 */ { 0x31, 0x61, 0x8f, 0x09, 0x93, 0x72, 0x02, 0x0b, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Soprano Sax */ { 0x31, 0x61, 0x8e, 0x09, 0x93, 0x72, 0x03, 0x09, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Alto Sax */ { 0x31, 0x61, 0x91, 0x09, 0x93, 0x82, 0x03, 0x09, 0x01, 0x00, 0x0a, 0, 0, 0 }, /* Tenor Sax */ { 0x31, 0x61, 0x8e, 0x09, 0x93, 0x72, 0x0f, 0x0f, 0x01, 0x00, 0x0a, 0, 0, 0 }, /* Baritone Sax */ { 0x21, 0x21, 0x4b, 0x09, 0xaa, 0x8f, 0x16, 0x0a, 0x01, 0x00, 0x08, 0, 0, 0 }, /* Oboe */ { 0x31, 0x21, 0x90, 0x09, 0x7e, 0x8b, 0x17, 0x0c, 0x01, 0x01, 0x06, 0, 0, 0 }, /* English Horn */ { 0x31, 0x32, 0x81, 0x09, 0x75, 0x61, 0x19, 0x19, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Bassoon */ { 0x32, 0x21, 0x90, 0x09, 0x9b, 0x72, 0x21, 0x17, 0x00, 0x00, 0x04, 0, 0, 0 }, /* Clarinet */ { 0xe1, 0xe1, 0x1f, 0x09, 0x85, 0x65, 0x5f, 0x1a, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Piccolo */ { 0xe1, 0xe1, 0x46, 0x09, 0x88, 0x65, 0x5f, 0x1a, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Flute */ { 0xa1, 0x21, 0x9c, 0x09, 0x75, 0x75, 0x1f, 0x0a, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Recorder */ { 0x31, 0x21, 0x8b, 0x09, 0x84, 0x65, 0x58, 0x1a, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Pan Flute */ { 0xe1, 0xa1, 0x4c, 0x09, 0x66, 0x65, 0x56, 0x26, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Blown Bottle */ { 0x62, 0xa1, 0xcb, 0x09, 0x76, 0x55, 0x46, 0x36, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Skakuhachi */ { 0x62, 0xa1, 0xa2, 0x09, 0x57, 0x56, 0x07, 0x07, 0x00, 0x00, 0x0b, 0, 0, 0 }, /* Whistle */ { 0x62, 0xa1, 0x9c, 0x09, 0x77, 0x76, 0x07, 0x07, 0x00, 0x00, 0x0b, 0, 0, 0 }, /* Ocarina */ { 0x22, 0x21, 0x59, 0x09, 0xff, 0xff, 0x03, 0x0f, 0x02, 0x00, 0x00, 0, 0, 0 }, /* Lead 1 (square) */ { 0x21, 0x21, 0x0e, 0x09, 0xff, 0xff, 0x0f, 0x0f, 0x01, 0x01, 0x00, 0, 0, 0 }, /* Lead 2 (sawtooth) */ { 0x22, 0x21, 0x46, 0x89, 0x86, 0x64, 0x55, 0x18, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Lead 3 (calliope) */ { 0x21, 0xa1, 0x45, 0x09, 0x66, 0x96, 0x12, 0x0a, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Lead 4 (chiff) */ { 0x21, 0x22, 0x8b, 0x09, 0x92, 0x91, 0x2a, 0x2a, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Lead 5 (charang) */ { 0xa2, 0x61, 0x9e, 0x49, 0xdf, 0x6f, 0x05, 0x07, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Lead 6 (voice) */ { 0x20, 0x60, 0x1a, 0x09, 0xef, 0x8f, 0x01, 0x06, 0x00, 0x02, 0x00, 0, 0, 0 }, /* Lead 7 (fifths) */ { 0x21, 0x21, 0x8f, 0x86, 0xf1, 0xf4, 0x29, 0x09, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Lead 8 (bass+lead) */ { 0x77, 0xa1, 0xa5, 0x09, 0x53, 0xa0, 0x94, 0x05, 0x00, 0x00, 0x02, 0, 0, 0 }, /* Pad 1 (new age) */ { 0x61, 0xb1, 0x1f, 0x89, 0xa8, 0x25, 0x11, 0x03, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Pad 2 (warm) */ { 0x61, 0x61, 0x17, 0x09, 0x91, 0x55, 0x34, 0x16, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Pad 3 (polysynth) */ { 0x71, 0x72, 0x5d, 0x09, 0x54, 0x6a, 0x01, 0x03, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Pad 4 (choir) */ { 0x21, 0xa2, 0x97, 0x09, 0x21, 0x42, 0x43, 0x35, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Pad 5 (bowed) */ { 0xa1, 0x21, 0x1c, 0x09, 0xa1, 0x31, 0x77, 0x47, 0x01, 0x01, 0x00, 0, 0, 0 }, /* Pad 6 (metallic) */ { 0x21, 0x61, 0x89, 0x0c, 0x11, 0x42, 0x33, 0x25, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Pad 7 (halo) */ { 0xa1, 0x21, 0x15, 0x09, 0x11, 0xcf, 0x47, 0x07, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Pad 8 (sweep) */ { 0x3a, 0x51, 0xce, 0x09, 0xf8, 0x86, 0xf6, 0x02, 0x00, 0x00, 0x02, 0, 0, 0 }, /* FX 1 (rain) */ { 0x21, 0x21, 0x15, 0x09, 0x21, 0x41, 0x23, 0x13, 0x01, 0x00, 0x00, 0, 0, 0 }, /* FX 2 (soundtrack) */ { 0x06, 0x01, 0x5b, 0x09, 0x74, 0xa5, 0x95, 0x72, 0x00, 0x00, 0x00, 0, 0, 0 }, /* FX 3 (crystal) */ { 0x22, 0x61, 0x92, 0x8c, 0xb1, 0xf2, 0x81, 0x26, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* FX 4 (atmosphere) */ { 0x41, 0x42, 0x4d, 0x09, 0xf1, 0xf2, 0x51, 0xf5, 0x01, 0x00, 0x00, 0, 0, 0 }, /* FX 5 (brightness) */ { 0x61, 0xa3, 0x94, 0x89, 0x11, 0x11, 0x51, 0x13, 0x01, 0x00, 0x06, 0, 0, 0 }, /* FX 6 (goblins) */ { 0x61, 0xa1, 0x8c, 0x89, 0x11, 0x1d, 0x31, 0x03, 0x00, 0x00, 0x06, 0, 0, 0 }, /* FX 7 (echoes) */ { 0xa4, 0x61, 0x4c, 0x09, 0xf3, 0x81, 0x73, 0x23, 0x01, 0x00, 0x04, 0, 0, 0 }, /* FX 8 (sci-fi) */ { 0x02, 0x07, 0x85, 0x0c, 0xd2, 0xf2, 0x53, 0xf6, 0x00, 0x01, 0x00, 0, 0, 0 }, /* Sitar */ { 0x11, 0x13, 0x0c, 0x89, 0xa3, 0xa2, 0x11, 0xe5, 0x01, 0x00, 0x00, 0, 0, 0 }, /* Banjo */ { 0x11, 0x11, 0x06, 0x09, 0xf6, 0xf2, 0x41, 0xe6, 0x01, 0x02, 0x04, 0, 0, 0 }, /* Shamisen */ { 0x93, 0x91, 0x91, 0x09, 0xd4, 0xeb, 0x32, 0x11, 0x00, 0x01, 0x08, 0, 0, 0 }, /* Koto */ { 0x04, 0x01, 0x4f, 0x09, 0xfa, 0xc2, 0x56, 0x05, 0x00, 0x00, 0x0c, 0, 0, 0 }, /* Kalimba */ { 0x21, 0x22, 0x49, 0x09, 0x7c, 0x6f, 0x20, 0x0c, 0x00, 0x01, 0x06, 0, 0, 0 }, /* Bagpipe */ { 0x31, 0x21, 0x85, 0x09, 0xdd, 0x56, 0x33, 0x16, 0x01, 0x00, 0x0a, 0, 0, 0 }, /* Fiddle */ { 0x20, 0x21, 0x04, 0x8a, 0xda, 0x8f, 0x05, 0x0b, 0x02, 0x00, 0x06, 0, 0, 0 }, /* Shanai */ { 0x05, 0x03, 0x6a, 0x89, 0xf1, 0xc3, 0xe5, 0xe5, 0x00, 0x00, 0x06, 0, 0, 0 }, /* Tinkle Bell */ { 0x07, 0x02, 0x15, 0x09, 0xec, 0xf8, 0x26, 0x16, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Agogo */ { 0x05, 0x01, 0x9d, 0x09, 0x67, 0xdf, 0x35, 0x05, 0x00, 0x00, 0x08, 0, 0, 0 }, /* Steel Drums */ { 0x18, 0x12, 0x96, 0x09, 0xfa, 0xf8, 0x28, 0xe5, 0x00, 0x00, 0x0a, 0, 0, 0 }, /* Woodblock */ { 0x10, 0x00, 0x86, 0x0c, 0xa8, 0xfa, 0x07, 0x03, 0x00, 0x00, 0x06, 0, 0, 0 }, /* Taiko Drum */ { 0x11, 0x10, 0x41, 0x0c, 0xf8, 0xf3, 0x47, 0x03, 0x02, 0x00, 0x04, 0, 0, 0 }, /* Melodic Tom */ { 0x01, 0x10, 0x8e, 0x09, 0xf1, 0xf3, 0x06, 0x02, 0x02, 0x00, 0x0e, 0, 0, 0 }, /* Synth Drum */ { 0x0e, 0xc0, 0x00, 0x09, 0x1f, 0x1f, 0x00, 0xff, 0x00, 0x03, 0x0e, 0, 0, 0 }, /* Reverse Cymbal */ { 0x06, 0x03, 0x80, 0x91, 0xf8, 0x56, 0x24, 0x84, 0x00, 0x02, 0x0e, 0, 0, 0 }, /* Guitar Fret Noise */ { 0x0e, 0xd0, 0x00, 0x0e, 0xf8, 0x34, 0x00, 0x04, 0x00, 0x03, 0x0e, 0, 0, 0 }, /* Breath Noise */ { 0x0e, 0xc0, 0x00, 0x09, 0xf6, 0x1f, 0x00, 0x02, 0x00, 0x03, 0x0e, 0, 0, 0 }, /* Seashore */ { 0xd5, 0xda, 0x95, 0x49, 0x37, 0x56, 0xa3, 0x37, 0x00, 0x00, 0x00, 0, 0, 0 }, /* Bird Tweet */ { 0x35, 0x14, 0x5c, 0x11, 0xb2, 0xf4, 0x61, 0x15, 0x02, 0x00, 0x0a, 0, 0, 0 }, /* Telephone ring */ { 0x0e, 0xd0, 0x00, 0x09, 0xf6, 0x4f, 0x00, 0xf5, 0x00, 0x03, 0x0e, 0, 0, 0 }, /* Helicopter */ { 0x26, 0xe4, 0x00, 0x09, 0xff, 0x12, 0x01, 0x16, 0x00, 0x01, 0x0e, 0, 0, 0 }, /* Applause */ { 0x00, 0x00, 0x00, 0x09, 0xf3, 0xf6, 0xf0, 0xc9, 0x00, 0x02, 0x0e, 0, 0, 0 } /* Gunshot */ }; lmms-1.1.3/plugins/opl2/opl.h000066400000000000000000000034111247673406200157760ustar00rootroot00000000000000/* * Adplug - Replayer for many OPL2/OPL3 audio file formats. * Copyright (C) 1999 - 2007 Simon Peter, , et al. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * opl.h - OPL base class, by Simon Peter */ #ifndef H_ADPLUG_OPL #define H_ADPLUG_OPL class Copl { public: typedef enum { TYPE_OPL2, TYPE_OPL3, TYPE_DUAL_OPL2 } ChipType; Copl() : currChip(0), currType(TYPE_OPL2) { } virtual ~Copl() { } virtual void write(int reg, int val) = 0; // combined register select + data write virtual void setchip(int n) // select OPL chip { if(n < 2) currChip = n; } virtual int getchip() // returns current OPL chip { return currChip; } virtual void init(void) = 0; // reinitialize OPL chip(s) // return this OPL chip's type ChipType gettype() { return currType; } // Emulation only: fill buffer virtual void update(short *buf, int samples) {} protected: int currChip; // currently selected OPL chip number ChipType currType; // this OPL chip's type }; #endif lmms-1.1.3/plugins/opl2/opl2_led_off.png000066400000000000000000000011121247673406200200670ustar00rootroot00000000000000PNG  IHDRԯ,bKGD" pHYs  tIME 7!tEXtCommentCreated with GIMPWIDAT8˥jAf.BQ#΁Uq#k"E6(م ȫ)l%KF 3s0Z(vcS; { K@'Mӓvj5A@Ye 4=z`0`8RJU.~?,{T̽e| v~18ZyFh9|uXϲ,TyǏc *|ycC(8ui}9 JRH]aCmnI<a]@JL&Z?\\Xi@;N᜻ kY8[XsLi߀]}o| KiIENDB`lmms-1.1.3/plugins/opl2/opl2_led_on.png000066400000000000000000000012311247673406200177330ustar00rootroot00000000000000PNG  IHDRԯ,bKGD" pHYs  tIME nAtEXtCommentCreated with GIMPWIDAT8˥MkSA3B+"H 7 ğЍåYlDJEж7q\ܛX0Psf`kk+Z@ n `~zzx[6{x˓_4Mn+IA@ɗyeocKtF()Y ekWGnhO@MHJGG{94 YE,$&_c4T Viyγ!+@QP3pGK@xB{7 ""H $ **ZJLZW$1PpFY]/JRQ5%TuIl1z-{ϗ VFOEѲ EDQ^կ+677QN(ξwLfL&Zv!@ f3W՞>::^k}seXYbc:N<8>)? IENDB`lmms-1.1.3/plugins/opl2/opl2instrument.cpp000066400000000000000000000610271247673406200205530ustar00rootroot00000000000000/* * OPL2 FM synth * * Copyright (c) 2014 Raine M. Ekman * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ // TODO: // - Better voice allocation: long releases get cut short :( // - .sbi (or similar) file loading into models // - RT safety = get rid of mutex = make emulator code thread-safe // - Extras: // - double release: first release is in effect until noteoff (heard if percussive sound), // second is switched in just before key bit cleared (is this useful???) // - Unison: 2,3,4, or 9 voices with configurable spread? // - Portamento (needs mono mode?) // - Pre-bend/post-bend in poly mode could use portamento speed? // - SBI file import? // - Envelope times in ms for UI: t[0] = 0, t[n] = ( 1< #include "opl.h" #include "temuopl.h" #include "embed.cpp" #include "math.h" #include "knob.h" #include "LcdSpinBox.h" #include "pixmap_button.h" #include "tooltip.h" extern "C" { Plugin::Descriptor PLUGIN_EXPORT OPL2_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "OpulenZ", QT_TRANSLATE_NOOP( "pluginBrowser", "2-operator FM Synth" ), "Raine M. Ekman ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL }; // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new opl2instrument( static_cast( _data ) ) ); } } // I'd much rather do without a mutex, but it looks like // the emulator code isn't really ready for threads QMutex opl2instrument::emulatorMutex; // Weird ordering of voice parameters const unsigned int adlib_opadd[9] = {0x00, 0x01, 0x02, 0x08, 0x09, 0x0A, 0x10, 0x11, 0x12}; opl2instrument::opl2instrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &OPL2_plugin_descriptor ), m_patchModel( 0, 0, 127, this, tr( "Patch" ) ), op1_a_mdl(14.0, 0.0, 15.0, 1.0, this, tr( "Op 1 Attack" ) ), op1_d_mdl(14.0, 0.0, 15.0, 1.0, this, tr( "Op 1 Decay" ) ), op1_s_mdl(3.0, 0.0, 15.0, 1.0, this, tr( "Op 1 Sustain" ) ), op1_r_mdl(10.0, 0.0, 15.0, 1.0, this, tr( "Op 1 Release" ) ), op1_lvl_mdl(62.0, 0.0, 63.0, 1.0, this, tr( "Op 1 Level" ) ), op1_scale_mdl(0.0, 0.0, 3.0, 1.0, this, tr( "Op 1 Level Scaling" ) ), op1_mul_mdl(0.0, 0.0, 15.0, 1.0, this, tr( "Op 1 Frequency Multiple" ) ), feedback_mdl(0.0, 0.0, 7.0, 1.0, this, tr( "Op 1 Feedback" ) ), op1_ksr_mdl(false, this, tr( "Op 1 Key Scaling Rate" ) ), op1_perc_mdl(false, this, tr( "Op 1 Percussive Envelope" ) ), op1_trem_mdl(true, this, tr( "Op 1 Tremolo" ) ), op1_vib_mdl(false, this, tr( "Op 1 Vibrato" ) ), op1_w0_mdl( ), op1_w1_mdl( ), op1_w2_mdl( ), op1_w3_mdl( ), op1_waveform_mdl(0,0,3,this, tr( "Op 1 Waveform" ) ), op2_a_mdl(1.0, 0.0, 15.0, 1.0, this, tr( "Op 2 Attack" ) ), op2_d_mdl(3.0, 0.0, 15.0, 1.0, this, tr( "Op 2 Decay" ) ), op2_s_mdl(14.0, 0.0, 15.0, 1.0, this, tr( "Op 2 Sustain" ) ), op2_r_mdl(12.0, 0.0, 15.0, 1.0, this, tr( "Op 2 Release" ) ), op2_lvl_mdl(63.0, 0.0, 63.0, 1.0, this, tr( "Op 2 Level" ) ), op2_scale_mdl(0.0, 0.0, 3.0, 1.0, this, tr( "Op 2 Level Scaling" ) ), op2_mul_mdl(1.0, 0.0, 15.0, 1.0, this, tr( "Op 2 Frequency Multiple" ) ), op2_ksr_mdl(false, this, tr( "Op 2 Key Scaling Rate" ) ), op2_perc_mdl(false, this, tr( "Op 2 Percussive Envelope" ) ), op2_trem_mdl(false, this, tr( "Op 2 Tremolo" ) ), op2_vib_mdl(true, this, tr( "Op 2 Vibrato" ) ), op2_w0_mdl( ), op2_w1_mdl( ), op2_w2_mdl( ), op2_w3_mdl( ), op2_waveform_mdl(0,0,3,this, tr( "Op 2 Waveform" ) ), fm_mdl(true, this, tr( "FM" ) ), vib_depth_mdl(false, this, tr( "Vibrato Depth" ) ), trem_depth_mdl(false, this, tr( "Tremolo Depth" ) ) { // Connect the plugin to the mixer... InstrumentPlayHandle * iph = new InstrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); // Voices are laid out in a funny way... // adlib_opadd = {0x00, 0x01, 0x02, 0x08, 0x09, 0x0A, 0x10, 0x11, 0x12}; // Create an emulator - samplerate, 16 bit, mono emulatorMutex.lock(); theEmulator = new CTemuopl(engine::mixer()->processingSampleRate(), true, false); theEmulator->init(); // Enable waveform selection theEmulator->write(0x01,0x20); emulatorMutex.unlock(); //Initialize voice values voiceNote[0] = 0; voiceLRU[0] = 0; for(int i=1; i<9; ++i) { voiceNote[i] = OPL2_VOICE_FREE; voiceLRU[i] = i; } updatePatch(); // Can the buffer size change suddenly? I bet that would break lots of stuff frameCount = engine::mixer()->framesPerPeriod(); renderbuffer = new short[frameCount]; // Some kind of sane defaults pitchbend = 0; pitchBendRange = 100; RPNcoarse = RPNfine = 255; tuneEqual(69, 440); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( reloadEmulator() ) ); // Connect knobs // This one's for testing... connect( &m_patchModel, SIGNAL( dataChanged() ), this, SLOT( loadGMPatch() ) ); #define MOD_CON( model ) connect( &model, SIGNAL( dataChanged() ), this, SLOT( updatePatch() ) ); MOD_CON( op1_a_mdl ); MOD_CON( op1_d_mdl ); MOD_CON( op1_s_mdl ); MOD_CON( op1_r_mdl ); MOD_CON( op1_lvl_mdl ); MOD_CON( op1_scale_mdl ); MOD_CON( op1_mul_mdl ); MOD_CON( feedback_mdl ); MOD_CON( op1_ksr_mdl ); MOD_CON( op1_perc_mdl ); MOD_CON( op1_trem_mdl ); MOD_CON( op1_vib_mdl ); MOD_CON( op1_w0_mdl ); MOD_CON( op1_w1_mdl ); MOD_CON( op1_w2_mdl ); MOD_CON( op1_w3_mdl ); MOD_CON( op1_waveform_mdl ); MOD_CON( op2_a_mdl ); MOD_CON( op2_d_mdl ); MOD_CON( op2_s_mdl ); MOD_CON( op2_r_mdl ); MOD_CON( op2_lvl_mdl ); MOD_CON( op2_scale_mdl ); MOD_CON( op2_mul_mdl ); MOD_CON( op2_ksr_mdl ); MOD_CON( op2_perc_mdl ); MOD_CON( op2_trem_mdl ); MOD_CON( op2_vib_mdl ); MOD_CON( op2_w0_mdl ); MOD_CON( op2_w1_mdl ); MOD_CON( op2_w2_mdl ); MOD_CON( op2_w3_mdl ); MOD_CON( op2_waveform_mdl ); MOD_CON( fm_mdl ); MOD_CON( vib_depth_mdl ); MOD_CON( trem_depth_mdl ); } opl2instrument::~opl2instrument() { delete theEmulator; engine::mixer()->removePlayHandles( instrumentTrack() ); delete [] renderbuffer; } // Samplerate changes when choosing oversampling, so this is more or less mandatory void opl2instrument::reloadEmulator() { delete theEmulator; emulatorMutex.lock(); theEmulator = new CTemuopl(engine::mixer()->processingSampleRate(), true, false); theEmulator->init(); theEmulator->write(0x01,0x20); emulatorMutex.unlock(); for(int i=1; i<9; ++i) { voiceNote[i] = OPL2_VOICE_FREE; voiceLRU[i] = i; } updatePatch(); } // This shall only be called from code protected by the holy Mutex! void opl2instrument::setVoiceVelocity(int voice, int vel) { int vel_adjusted; // Velocity calculation, some kind of approximation // Only calculate for operator 1 if in adding mode, don't want to change timbre if( fm_mdl.value() == false ) { vel_adjusted = 63 - ( op1_lvl_mdl.value() * vel/127.0) ; } else { vel_adjusted = 63 - op1_lvl_mdl.value(); } theEmulator->write(0x40+adlib_opadd[voice], ( (int)op1_scale_mdl.value() & 0x03 << 6) + ( vel_adjusted & 0x3f ) ); vel_adjusted = 63 - ( op2_lvl_mdl.value() * vel/127.0 ); // vel_adjusted = 63 - op2_lvl_mdl.value(); theEmulator->write(0x43+adlib_opadd[voice], ( (int)op2_scale_mdl.value() & 0x03 << 6) + ( vel_adjusted & 0x3f ) ); } // Pop least recently used voice - why does it sometimes lose a voice (mostly 0)? int opl2instrument::popVoice() { int tmp = voiceLRU[0]; for( int i=0; i<8; ++i) { voiceLRU[i] = voiceLRU[i+1]; } voiceLRU[8] = OPL2_NO_VOICE; return tmp; } int opl2instrument::pushVoice(int v) { int i; for(i=8; i>0; --i) { if( voiceLRU[i-1] != OPL2_NO_VOICE ) { break; } } voiceLRU[i] = v; return i; } bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset ) { emulatorMutex.lock(); int key, vel, voice, tmp_pb; switch(event.type()) { case MidiNoteOn: // to get us in line with MIDI(?) key = event.key() +12; vel = event.velocity(); voice = popVoice(); if( voice != OPL2_NO_VOICE ) { // Turn voice on, NB! the frequencies are straight by voice number, // not by the adlib_opadd table! theEmulator->write(0xA0+voice, fnums[key] & 0xff); theEmulator->write(0xB0+voice, 32 + ((fnums[key] & 0x1f00) >> 8) ); setVoiceVelocity(voice, vel); voiceNote[voice] = key; velocities[key] = vel; } break; case MidiNoteOff: key = event.key() +12; for(voice=0; voice<9; ++voice) { if( voiceNote[voice] == key ) { theEmulator->write(0xA0+voice, fnums[key] & 0xff); theEmulator->write(0xB0+voice, (fnums[key] & 0x1f00) >> 8 ); voiceNote[voice] = OPL2_VOICE_FREE; pushVoice(voice); } } velocities[key] = 0; break; case MidiKeyPressure: key = event.key() +12; vel = event.velocity(); if( velocities[key] != 0) { velocities[key] = vel; } for(voice=0; voice<9; ++voice) { if(voiceNote[voice] == key) { setVoiceVelocity(voice, vel); } } break; case MidiPitchBend: // Update fnumber table // Pitchbend should be in the range 0...16383 but the new range knob gets it wrong. // tmp_pb = (2*BEND_CENTS)*((float)event.m_data.m_param[0]/16383)-BEND_CENTS; // Something like 100 cents = 8192, but offset by 8192 so the +/-100 cents range goes from 0...16383? tmp_pb = ( event.pitchBend()-8192 ) * pitchBendRange / 8192; if( tmp_pb != pitchbend ) { pitchbend = tmp_pb; tuneEqual(69, 440.0); } // Update pitch of sounding notes for( int v=0; v<9; ++v ) { if( voiceNote[v] != OPL2_VOICE_FREE ) { theEmulator->write(0xA0+v, fnums[voiceNote[v] ] & 0xff); theEmulator->write(0xB0+v, 32 + ((fnums[voiceNote[v]] & 0x1f00) >> 8) ); } } break; case MidiControlChange: switch (event.controllerNumber()) { case MidiControllerRegisteredParameterNumberLSB: RPNfine = event.controllerValue(); break; case MidiControllerRegisteredParameterNumberMSB: RPNcoarse = event.controllerValue(); break; case MidiControllerDataEntry: if( (RPNcoarse << 8) + RPNfine == MidiPitchBendSensitivityRPN) { pitchBendRange = event.controllerValue() * 100; } break; default: printf("Midi CC %02x %02x\n", event.controllerNumber(), event.controllerValue() ); break; } break; default: printf("Midi event type %d\n",event.type()); } emulatorMutex.unlock(); return true; } QString opl2instrument::nodeName() const { return( OPL2_plugin_descriptor.name ); } PluginView * opl2instrument::instantiateView( QWidget * _parent ) { return( new opl2instrumentView( this, _parent ) ); } void opl2instrument::play( sampleFrame * _working_buffer ) { emulatorMutex.lock(); theEmulator->update(renderbuffer, frameCount); for( fpp_t frame = 0; frame < frameCount; ++frame ) { sample_t s = float(renderbuffer[frame]) / 8192.0; for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { _working_buffer[frame][ch] = s; } } emulatorMutex.unlock(); // Throw the data to the track... instrumentTrack()->processAudioBuffer( _working_buffer, frameCount, NULL ); } void opl2instrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { op1_a_mdl.saveSettings( _doc, _this, "op1_a" ); op1_d_mdl.saveSettings( _doc, _this, "op1_d" ); op1_s_mdl.saveSettings( _doc, _this, "op1_s" ); op1_r_mdl.saveSettings( _doc, _this, "op1_r" ); op1_lvl_mdl.saveSettings( _doc, _this, "op1_lvl" ); op1_scale_mdl.saveSettings( _doc, _this, "op1_scale" ); op1_mul_mdl.saveSettings( _doc, _this, "op1_mul" ); feedback_mdl.saveSettings( _doc, _this, "feedback" ); op1_ksr_mdl.saveSettings( _doc, _this, "op1_ksr" ); op1_perc_mdl.saveSettings( _doc, _this, "op1_perc" ); op1_trem_mdl.saveSettings( _doc, _this, "op1_trem" ); op1_vib_mdl.saveSettings( _doc, _this, "op1_vib" ); op1_waveform_mdl.saveSettings( _doc, _this, "op1_waveform" ); op2_a_mdl.saveSettings( _doc, _this, "op2_a" ); op2_d_mdl.saveSettings( _doc, _this, "op2_d" ); op2_s_mdl.saveSettings( _doc, _this, "op2_s" ); op2_r_mdl.saveSettings( _doc, _this, "op2_r" ); op2_lvl_mdl.saveSettings( _doc, _this, "op2_lvl" ); op2_scale_mdl.saveSettings( _doc, _this, "op2_scale" ); op2_mul_mdl.saveSettings( _doc, _this, "op2_mul" ); op2_ksr_mdl.saveSettings( _doc, _this, "op2_ksr" ); op2_perc_mdl.saveSettings( _doc, _this, "op2_perc" ); op2_trem_mdl.saveSettings( _doc, _this, "op2_trem" ); op2_vib_mdl.saveSettings( _doc, _this, "op2_vib" ); op2_waveform_mdl.saveSettings( _doc, _this, "op2_waveform" ); fm_mdl.saveSettings( _doc, _this, "fm" ); vib_depth_mdl.saveSettings( _doc, _this, "vib_depth" ); trem_depth_mdl.saveSettings( _doc, _this, "trem_depth" ); } void opl2instrument::loadSettings( const QDomElement & _this ) { op1_a_mdl.loadSettings( _this, "op1_a" ); op1_d_mdl.loadSettings( _this, "op1_d" ); op1_s_mdl.loadSettings( _this, "op1_s" ); op1_r_mdl.loadSettings( _this, "op1_r" ); op1_lvl_mdl.loadSettings( _this, "op1_lvl" ); op1_scale_mdl.loadSettings( _this, "op1_scale" ); op1_mul_mdl.loadSettings( _this, "op1_mul" ); feedback_mdl.loadSettings( _this, "feedback" ); op1_ksr_mdl.loadSettings( _this, "op1_ksr" ); op1_perc_mdl.loadSettings( _this, "op1_perc" ); op1_trem_mdl.loadSettings( _this, "op1_trem" ); op1_vib_mdl.loadSettings( _this, "op1_vib" ); op1_waveform_mdl.loadSettings( _this, "op1_waveform" ); op2_a_mdl.loadSettings( _this, "op2_a" ); op2_d_mdl.loadSettings( _this, "op2_d" ); op2_s_mdl.loadSettings( _this, "op2_s" ); op2_r_mdl.loadSettings( _this, "op2_r" ); op2_lvl_mdl.loadSettings( _this, "op2_lvl" ); op2_scale_mdl.loadSettings( _this, "op2_scale" ); op2_mul_mdl.loadSettings( _this, "op2_mul" ); op2_ksr_mdl.loadSettings( _this, "op2_ksr" ); op2_perc_mdl.loadSettings( _this, "op2_perc" ); op2_trem_mdl.loadSettings( _this, "op2_trem" ); op2_vib_mdl.loadSettings( _this, "op2_vib" ); op2_waveform_mdl.loadSettings( _this, "op2_waveform" ); fm_mdl.loadSettings( _this, "fm" ); vib_depth_mdl.loadSettings( _this, "vib_depth" ); trem_depth_mdl.loadSettings( _this, "trem_depth" ); } // Load a patch into the emulator void opl2instrument::loadPatch(unsigned char inst[14]) { emulatorMutex.lock(); for(int v=0; v<9; ++v) { theEmulator->write(0x20+adlib_opadd[v],inst[0]); // op1 AM/VIB/EG/KSR/Multiplier theEmulator->write(0x23+adlib_opadd[v],inst[1]); // op2 // theEmulator->write(0x40+adlib_opadd[v],inst[2]); // op1 KSL/Output Level - these are handled by noteon/aftertouch code // theEmulator->write(0x43+adlib_opadd[v],inst[3]); // op2 theEmulator->write(0x60+adlib_opadd[v],inst[4]); // op1 A/D theEmulator->write(0x63+adlib_opadd[v],inst[5]); // op2 theEmulator->write(0x80+adlib_opadd[v],inst[6]); // op1 S/R theEmulator->write(0x83+adlib_opadd[v],inst[7]); // op2 theEmulator->write(0xe0+adlib_opadd[v],inst[8]); // op1 waveform theEmulator->write(0xe3+adlib_opadd[v],inst[9]); // op2 theEmulator->write(0xc0+v,inst[10]); // feedback/algorithm } emulatorMutex.unlock(); } void opl2instrument::tuneEqual(int center, float Hz) { float tmp; for(int n=0; n<128; ++n) { tmp = Hz*pow( 2.0, ( n - center ) * ( 1.0 / 12.0 ) + pitchbend * ( 1.0 / 1200.0 ) ); fnums[n] = Hz2fnum( tmp ); } } // Find suitable F number in lowest possible block int opl2instrument::Hz2fnum(float Hz) { for(int block=0; block<8; ++block) { unsigned int fnum = Hz * pow( 2.0, 20.0 - (double)block ) * ( 1.0 / 49716.0 ); if(fnum<1023) { return fnum + (block << 10); } } return 0; } // Load one of the default patches void opl2instrument::loadGMPatch() { unsigned char *inst = midi_fm_instruments[m_patchModel.value()]; loadPatch(inst); } // /* void opl2instrument::loadSBIFile() { } */ // Update patch from the models to the chip emulation void opl2instrument::updatePatch() { unsigned char *inst = midi_fm_instruments[0]; inst[0] = ( op1_trem_mdl.value() ? 128 : 0 ) + ( op1_vib_mdl.value() ? 64 : 0 ) + ( op1_perc_mdl.value() ? 0 : 32 ) + // NB. This envelope mode is "perc", not "sus" ( op1_ksr_mdl.value() ? 16 : 0 ) + ((int)op1_mul_mdl.value() & 0x0f); inst[1] = ( op2_trem_mdl.value() ? 128 : 0 ) + ( op2_vib_mdl.value() ? 64 : 0 ) + ( op2_perc_mdl.value() ? 0 : 32 ) + // NB. This envelope mode is "perc", not "sus" ( op2_ksr_mdl.value() ? 16 : 0 ) + ((int)op2_mul_mdl.value() & 0x0f); inst[2] = ( (int)op1_scale_mdl.value() & 0x03 << 6 ) + (63 - ( (int)op1_lvl_mdl.value() & 0x3f ) ); inst[3] = ( (int)op2_scale_mdl.value() & 0x03 << 6 ) + (63 - ( (int)op2_lvl_mdl.value() & 0x3f ) ); inst[4] = ((15 - ((int)op1_a_mdl.value() & 0x0f ) ) << 4 )+ (15 - ( (int)op1_d_mdl.value() & 0x0f ) ); inst[5] = ((15 - ( (int)op2_a_mdl.value() & 0x0f ) ) << 4 )+ (15 - ( (int)op2_d_mdl.value() & 0x0f ) ); inst[6] = ((15 - ( (int)op1_s_mdl.value() & 0x0f ) ) << 4 ) + (15 - ( (int)op1_r_mdl.value() & 0x0f ) ); inst[7] = ((15 - ( (int)op2_s_mdl.value() & 0x0f ) ) << 4 ) + (15 - ( (int)op2_r_mdl.value() & 0x0f ) ); inst[8] = (int)op1_waveform_mdl.value() & 0x03; inst[9] = (int)op2_waveform_mdl.value() & 0x03; inst[10] = (fm_mdl.value() ? 0 : 1 ) + (((int)feedback_mdl.value() & 0x07 )<< 1); // These are always 0 in the list I had? inst[11] = 0; inst[12] = 0; inst[13] = 0; // Not part of the per-voice patch info theEmulator->write(0xBD, (trem_depth_mdl.value() ? 128 : 0 ) + (vib_depth_mdl.value() ? 64 : 0 )); // have to do this, as the level knobs might've changed for( int voice = 0; voice < 9 ; ++voice) { if(voiceNote[voice]!=OPL2_VOICE_FREE) { setVoiceVelocity(voice, velocities[voiceNote[voice]] ); } } loadPatch(inst); } opl2instrumentView::opl2instrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { /* Unnecessary? m_patch = new LcdSpinBox( 3, this , "PRESET"); m_patch->setLabel( "PRESET" ); m_patch->move( 100, 1 ); m_patch->setEnabled( true ); */ #define KNOB_GEN(knobname, hinttext, hintunit,xpos,ypos) \ knobname = new knob( knobStyled, this );\ knobname->setHintText( tr(hinttext) + "", hintunit );\ knobname->setFixedSize(22,22);\ knobname->setCenterPointX(11.0);\ knobname->setCenterPointY(11.0);\ knobname->setTotalAngle(270.0);\ knobname->move(xpos,ypos); #define BUTTON_GEN(buttname, tooltip, xpos, ypos) \ buttname = new pixmapButton( this, NULL );\ buttname->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "opl2_led_on" ) );\ buttname->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "opl2_led_off" ) );\ buttname->setCheckable( true );\ toolTip::add( buttname, tr( tooltip ) );\ buttname->move( xpos, ypos ); #define WAVEBUTTON_GEN(buttname, tooltip, xpos, ypos, icon_on, icon_off, buttgroup) \ buttname = new pixmapButton( this, NULL );\ buttname->setActiveGraphic( PLUGIN_NAME::getIconPixmap( icon_on ) ); \ buttname->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( icon_off ) ); \ toolTip::add( buttname, tr( tooltip ) );\ buttname->move( xpos, ypos );\ buttgroup->addButton(buttname); // OP1 knobs & buttons... KNOB_GEN(op1_a_kn, "Attack", "", 6, 48); KNOB_GEN(op1_d_kn, "Decay", "", 34, 48); KNOB_GEN(op1_s_kn, "Sustain", "", 62, 48); KNOB_GEN(op1_r_kn, "Release", "", 90, 48); KNOB_GEN(op1_lvl_kn, "Level", "", 166, 48); KNOB_GEN(op1_scale_kn, "Scale", "", 194, 48); KNOB_GEN(op1_mul_kn, "Frequency multiplier", "", 222, 48); BUTTON_GEN(op1_ksr_btn, "Keyboard scaling rate", 9, 87); BUTTON_GEN(op1_perc_btn, "Percussive envelope", 36, 87); BUTTON_GEN(op1_trem_btn, "Tremolo", 65, 87); BUTTON_GEN(op1_vib_btn, "Vibrato", 93, 87); KNOB_GEN(feedback_kn, "Feedback", "", 128, 48); op1_waveform = new automatableButtonGroup( this ); WAVEBUTTON_GEN(op1_w0_btn,"Sine", 154, 86, "wave1_on", "wave1_off", op1_waveform); WAVEBUTTON_GEN(op1_w1_btn,"Half sine", 178, 86, "wave2_on", "wave2_off", op1_waveform); WAVEBUTTON_GEN(op1_w2_btn,"Absolute sine", 199, 86, "wave3_on", "wave3_off", op1_waveform); WAVEBUTTON_GEN(op1_w3_btn,"Quarter sine", 220, 86, "wave4_on", "wave4_off", op1_waveform); // And the same for OP2 KNOB_GEN(op2_a_kn, "Attack", "", 6, 138); KNOB_GEN(op2_d_kn, "Decay", "", 34, 138); KNOB_GEN(op2_s_kn, "Sustain", "", 62, 138); KNOB_GEN(op2_r_kn, "Release", "", 90, 138); KNOB_GEN(op2_lvl_kn, "Level", "", 166, 138); KNOB_GEN(op2_scale_kn, "Scale", "", 194, 138); KNOB_GEN(op2_mul_kn, "Frequency multiplier", "", 222, 138); BUTTON_GEN(op2_ksr_btn, "Keyboard scaling rate", 9, 177); BUTTON_GEN(op2_perc_btn, "Percussive envelope", 36, 177); BUTTON_GEN(op2_trem_btn, "Tremolo", 65, 177); BUTTON_GEN(op2_vib_btn, "Vibrato", 93, 177); op2_waveform = new automatableButtonGroup( this ); WAVEBUTTON_GEN(op2_w0_btn,"Sine", 154, 176, "wave1_on", "wave1_off", op2_waveform); WAVEBUTTON_GEN(op2_w1_btn,"Half sine", 178, 176, "wave2_on", "wave2_off", op2_waveform); WAVEBUTTON_GEN(op2_w2_btn,"Absolute sine", 199, 176, "wave3_on", "wave3_off", op2_waveform); WAVEBUTTON_GEN(op2_w3_btn,"Quarter Sine", 220, 176, "wave4_on", "wave4_off", op2_waveform); BUTTON_GEN(fm_btn, "FM", 9, 220); BUTTON_GEN(vib_depth_btn, "Vibrato depth", 65, 220); BUTTON_GEN(trem_depth_btn, "Tremolo depth", 93, 220); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); } opl2instrumentView::~opl2instrumentView() { // Nobody else seems to delete their knobs and buttons? } void opl2instrumentView::modelChanged() { opl2instrument * m = castModel(); // m_patch->setModel( &m->m_patchModel ); op1_a_kn->setModel( &m->op1_a_mdl ); op1_d_kn->setModel( &m->op1_d_mdl ); op1_s_kn->setModel( &m->op1_s_mdl ); op1_r_kn->setModel( &m->op1_r_mdl ); op1_lvl_kn->setModel( &m->op1_lvl_mdl ); op1_scale_kn->setModel( &m->op1_scale_mdl ); op1_mul_kn->setModel( &m->op1_mul_mdl ); feedback_kn->setModel( &m->feedback_mdl ); op1_ksr_btn->setModel( &m->op1_ksr_mdl ); op1_perc_btn->setModel( &m->op1_perc_mdl ); op1_trem_btn->setModel( &m->op1_trem_mdl ); op1_vib_btn->setModel( &m->op1_vib_mdl ); /* op1_w0_btn->setModel( &m->op1_w0_mdl ); op1_w1_btn->setModel( &m->op1_w1_mdl ); op1_w2_btn->setModel( &m->op1_w2_mdl ); op1_w3_btn->setModel( &m->op1_w3_mdl ); */ op1_waveform->setModel( &m->op1_waveform_mdl ); op2_a_kn->setModel( &m->op2_a_mdl ); op2_d_kn->setModel( &m->op2_d_mdl ); op2_s_kn->setModel( &m->op2_s_mdl ); op2_r_kn->setModel( &m->op2_r_mdl ); op2_lvl_kn->setModel( &m->op2_lvl_mdl ); op2_scale_kn->setModel( &m->op2_scale_mdl ); op2_mul_kn->setModel( &m->op2_mul_mdl ); op2_ksr_btn->setModel( &m->op2_ksr_mdl ); op2_perc_btn->setModel( &m->op2_perc_mdl ); op2_trem_btn->setModel( &m->op2_trem_mdl ); op2_vib_btn->setModel( &m->op2_vib_mdl ); /* op2_w0_btn->setModel( &m->op2_w0_mdl ); op2_w1_btn->setModel( &m->op2_w1_mdl ); op2_w2_btn->setModel( &m->op2_w2_mdl ); op2_w3_btn->setModel( &m->op2_w3_mdl ); */ op2_waveform->setModel( &m->op2_waveform_mdl ); fm_btn->setModel( &m->fm_mdl ); vib_depth_btn->setModel( &m->vib_depth_mdl ); trem_depth_btn->setModel( &m->trem_depth_mdl ); } #include "moc_opl2instrument.cxx" lmms-1.1.3/plugins/opl2/opl2instrument.h000066400000000000000000000106641247673406200202210ustar00rootroot00000000000000/* * OPL2 FM synth * * Copyright (c) 2013 Raine M. Ekman * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _OPL2_H #define _OPL2_H #include "Instrument.h" #include "InstrumentView.h" #include "opl.h" #include "LcdSpinBox.h" #include "knob.h" #include "pixmap_button.h" #define OPL2_VOICE_FREE 255 #define OPL2_NO_VOICE 255 // The "normal" range for LMMS pitchbends #define DEFAULT_BEND_CENTS 100 class opl2instrument : public Instrument { Q_OBJECT public: opl2instrument( InstrumentTrack * _instrument_track ); virtual ~opl2instrument(); virtual QString nodeName() const; virtual PluginView * instantiateView( QWidget * _parent ); virtual Flags flags() const { return IsSingleStreamed | IsMidiBased; } virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 ); virtual void play( sampleFrame * _working_buffer ); void saveSettings( QDomDocument & _doc, QDomElement & _this ); void loadSettings( const QDomElement & _this ); void loadPatch(unsigned char inst[14]); void tuneEqual(int center, float Hz); IntModel m_patchModel; FloatModel op1_a_mdl; FloatModel op1_d_mdl; FloatModel op1_s_mdl; FloatModel op1_r_mdl; FloatModel op1_lvl_mdl; FloatModel op1_scale_mdl; FloatModel op1_mul_mdl; FloatModel feedback_mdl; BoolModel op1_ksr_mdl; BoolModel op1_perc_mdl; BoolModel op1_trem_mdl; BoolModel op1_vib_mdl; BoolModel op1_w0_mdl; BoolModel op1_w1_mdl; BoolModel op1_w2_mdl; BoolModel op1_w3_mdl; IntModel op1_waveform_mdl; FloatModel op2_a_mdl; FloatModel op2_d_mdl; FloatModel op2_s_mdl; FloatModel op2_r_mdl; FloatModel op2_lvl_mdl; FloatModel op2_scale_mdl; FloatModel op2_mul_mdl; BoolModel op2_ksr_mdl; BoolModel op2_perc_mdl; BoolModel op2_trem_mdl; BoolModel op2_vib_mdl; BoolModel op2_w0_mdl; BoolModel op2_w1_mdl; BoolModel op2_w2_mdl; BoolModel op2_w3_mdl; IntModel op2_waveform_mdl; BoolModel fm_mdl; BoolModel vib_depth_mdl; BoolModel trem_depth_mdl; private slots: void updatePatch(); void reloadEmulator(); void loadGMPatch(); private: Copl *theEmulator; fpp_t frameCount; short *renderbuffer; int voiceNote[9]; // Least recently used voices int voiceLRU[9]; // 0 - no note, >0 - note on velocity int velocities[128]; // These include both octave and Fnumber int fnums[128]; // in cents, range defaults to +/-100 cents (should this be changeable?) int pitchbend; int pitchBendRange; int popVoice(); int pushVoice(int v); int Hz2fnum(float Hz); static QMutex emulatorMutex; void setVoiceVelocity(int voice, int vel); // Pitch bend range comes through RPNs. int RPNcoarse, RPNfine; }; class opl2instrumentView : public InstrumentView { Q_OBJECT public: opl2instrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~opl2instrumentView(); LcdSpinBox *m_patch; void modelChanged(); knob *op1_a_kn; knob *op1_d_kn; knob *op1_s_kn; knob *op1_r_kn; knob *op1_lvl_kn; knob *op1_scale_kn; knob *op1_mul_kn; knob *feedback_kn; pixmapButton *op1_ksr_btn; pixmapButton *op1_perc_btn; pixmapButton *op1_trem_btn; pixmapButton *op1_vib_btn; pixmapButton *op1_w0_btn; pixmapButton *op1_w1_btn; pixmapButton *op1_w2_btn; pixmapButton *op1_w3_btn; automatableButtonGroup *op1_waveform; knob *op2_a_kn; knob *op2_d_kn; knob *op2_s_kn; knob *op2_r_kn; knob *op2_lvl_kn; knob *op2_scale_kn; knob *op2_mul_kn; pixmapButton *op2_ksr_btn; pixmapButton *op2_perc_btn; pixmapButton *op2_trem_btn; pixmapButton *op2_vib_btn; pixmapButton *op2_w0_btn; pixmapButton *op2_w1_btn; pixmapButton *op2_w2_btn; pixmapButton *op2_w3_btn; automatableButtonGroup *op2_waveform; pixmapButton *fm_btn; pixmapButton *vib_depth_btn; pixmapButton *trem_depth_btn; }; #endif lmms-1.1.3/plugins/opl2/temuopl.cpp000066400000000000000000000035641247673406200172350ustar00rootroot00000000000000/* * AdPlug - Replayer for many OPL2/OPL3 audio file formats. * Copyright (C) 1999 - 2004 Simon Peter , et al. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * temuopl.cpp - Tatsuyuki Satoh's OPL2 emulator, by Simon Peter */ #include "temuopl.h" CTemuopl::CTemuopl(int rate, bool bit16, bool usestereo) : use16bit(bit16), stereo(usestereo) { opl = OPLCreate(OPL_TYPE_YM3812, 3579545, rate); } CTemuopl::~CTemuopl() { OPLDestroy(opl); } void CTemuopl::update(short *buf, int samples) { int i; if(use16bit) { YM3812UpdateOne(opl,buf,samples); if(stereo) for(i=samples-1;i>=0;i--) { buf[i*2] = buf[i]; buf[i*2+1] = buf[i]; } } else { short *tempbuf = new short[stereo ? samples*2 : samples]; int i; YM3812UpdateOne(opl,tempbuf,samples); if(stereo) for(i=samples-1;i>=0;i--) { tempbuf[i*2] = tempbuf[i]; tempbuf[i*2+1] = tempbuf[i]; } for(i=0;i<(stereo ? samples*2 : samples);i++) ((char *)buf)[i] = (tempbuf[i] >> 8) ^ 0x80; delete [] tempbuf; } } void CTemuopl::write(int reg, int val) { OPLWrite(opl,0,reg); OPLWrite(opl,1,val); } void CTemuopl::init() { OPLResetChip(opl); } lmms-1.1.3/plugins/opl2/temuopl.h000066400000000000000000000026021247673406200166720ustar00rootroot00000000000000/* * Adplug - Replayer for many OPL2/OPL3 audio file formats. * Copyright (C) 1999 - 2004 Simon Peter, , et al. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * temuopl.h - Tatsuyuki Satoh's OPL2 emulator, by Simon Peter */ #ifndef H_ADPLUG_TEMUOPL #define H_ADPLUG_TEMUOPL #include "opl.h" extern "C" { #include "fmopl.h" } class CTemuopl: public Copl { public: CTemuopl(int rate, bool bit16, bool usestereo); // rate = sample rate virtual ~CTemuopl(); void update(short *buf, int samples); // fill buffer // template methods void write(int reg, int val); void init(); private: bool use16bit,stereo; FM_OPL *opl; // holds emulator data }; #endif lmms-1.1.3/plugins/opl2/wave1_off.png000066400000000000000000000013551247673406200174230ustar00rootroot00000000000000PNG  IHDR;bKGD" pHYs  tIME 5KtEXtCommentCreated with GIMPWUIDAT8˵kSQ?h^^6AڵSE'qQmu1""N.'t)uQu&6y41~sϽEr@Ѐ0D3 ԰ (1FD"m19D$IYiXbS8+ZYZZb}}z%_^CTZhZTUQV(H{YT=K F J) \F.BvS]QVtw2Q(0Ơ>1#|[;if[; ! C1I+e.j)`/P|ŎȖ+x`uuk-Ȃ"VΜo \wu)9fzC%j7WBEf^CƅR$3 O~S `% ,G雖oZ )<\~`i3bnXpPOXZ\ۭA`)`g4fI_(vs8&&&AD~&&?-UfsOMMQ.*EI`g+.u]b #(AxlǏ |+{`IENDB`lmms-1.1.3/plugins/opl2/wave1_on.png000066400000000000000000000014221247673406200172600ustar00rootroot00000000000000PNG  IHDR;bKGD" pHYs  tIME "botEXtCommentCreated with GIMPWzIDAT8˵kTA?3oݻ;' KOJ)Uk&B4v6b"Xp**IhG.~]r,a;}3 xC1m۳^dR4cAUi$ "BE{4%}8i2P*f Zm#@sH9yGz"&kkk7H/@r"d -W`zJzO@>t[{ #T\1C4ҀRe訔7H|>Ol Qr/ ۓ) WߟFb^wEkr1$+;)Y?qI@u*9ׂwQek*DWiDnޅG< jWQUEE ?ڴî{|4>yh Xk=d`9ksBCl@fb%a)xCސŪP$1Qk1xϐw/es>ŊPVVPy%Ơ~LEծ4a֗{6wsH1hU޷ڊngFGG\.l \OZaX&p|b|&AZJ5a_'x~O7-5IENDB`lmms-1.1.3/plugins/opl2/wave2_off.png000066400000000000000000000006631247673406200174250ustar00rootroot00000000000000PNG  IHDRNFbKGD" pHYs  tIME 2-r tEXtCommentCreated with GIMPWIDAT8˵?J@Lt*lHto  [j"Rh+X + .袢aj0ItGQ)XG{uTqu4"h_'2tySR{iN 5>@ =,ILz+1tP-Új0G(jw5$2 eoTx 6o^~DA5FL>BCϷIENDB`lmms-1.1.3/plugins/opl2/wave2_on.png000066400000000000000000000010101247673406200172520ustar00rootroot00000000000000PNG  IHDRNFbKGD" pHYs  tIME 9tEXtCommentCreated with GIMPWpIDAT8˵?N[A}6 WEB MD\e"p IcaR8&8eh?o43̀Pi19l&ZѠ-1^#Y`s4XZ%ZɓBfj5bV`*@lgDT*+.:/a~4ou:[dBo$,Baq{4tFQUEE~ˊ²;%CyHՊݯ0++߳ilGH4Qs%{zǫH3R^eX9.'̵LW0U]Ӯ*ɯTqORCaYnIENDB`lmms-1.1.3/plugins/opl2/wave3_off.png000066400000000000000000000007611247673406200174250ustar00rootroot00000000000000PNG  IHDRNFbKGD" pHYs  tIME  AW^tEXtCommentCreated with GIMPWYIDAT8˵=K1r\{rTzJ\ncq/E\:n 88(8fÛMDs 4-^Oo\* ƥ癗[t*4zx{AAYw9>@hB@1~̗uoUcIչr gJՌιJ5+Y֚V5o~YhyJ=.&"'RBvFJrg/n9:x p7_Ct>KIENDB`lmms-1.1.3/plugins/opl2/wave4_on.png000066400000000000000000000013461247673406200172700ustar00rootroot00000000000000PNG  IHDRerbKGD" pHYs  tIME *ZtEXtCommentCreated with GIMPWNIDAT8˵kQ}]2 1$I+ XD! `T$X *A"qٝͦPܼaywνs{(g3h)pH `SuuEqL$7MN|wwVVV# deLNN255EEzxz*_ ތ@Z֞YyblϠׄrV*Lv /T2 ѡ!]d/,h> yayCˑeRMĐ{  }boP}Ɣ1^X˕Qiƴ)%c'p@s:a>a}S.s'VcP ׳{J|Xq'sumzNZHPn{\qy0Heh^O0,^, tLxB{H-|Ipt o,uV֯Ϝ{9Gm V\%rLk?Yi^҉+yڻE$™'f?IENDB`lmms-1.1.3/plugins/organic/000077500000000000000000000000001247673406200156025ustar00rootroot00000000000000lmms-1.1.3/plugins/organic/CMakeLists.txt000066400000000000000000000002141247673406200203370ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(organic organic.cpp organic.h MOCFILES organic.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/organic/artwork.png000066400000000000000000001452671247673406200200200ustar00rootroot00000000000000PNG  IHDRZ=bKGDC pHYs  tIME hR IDATxwdu/Tizz&0aIHb%Z4ezd},kNkٖe*Pi$Z A r<Ls?^^UW@\Sν'+2=y %Hû闔H!R"Pz+Ӥ7 @Qt]GQ5Ղ2NqqۑHy{ם{u!eཏUxRQ+H0rZY`+6- ۖHiET( i_!cL,˂P4Ӓj!H*jn %_Kj3p7'O.uc|Ol=}WA{ףTl瞖4BbR6%66")Q @*JMb Q@nd8l$[4p;+*dhmm%Nڛݽ.OOO399IXzb]]]l޼]ׯ!wீAIz 5N `IؘГм80Jay}DBuHrylK,!$ZS@[JV/۪A4n 17 bcY{w ȭJ?---$ 0<wvr};lJK hV;dS yЦv1 |gQ馛 kdi4=&t v{!$\"Q {]5mM-RsBl<< Bt}+rC%&P 镸 ֥e]a`9 jZ,m%QBWMb "[-b*-lf9BN+bgwd ;MTdxV]#"4;&5Rqv { GTF\WYW%LQv8^B4,` p[x:HW +@Kh We/PgԘB-N2C h6Rs\e[i  IiDiDwW7!3^:}rr>ߊe3SV8BI*-r439[ҵ9t*k'7NKl߾i.:vФk濸.*u#3kZO.%E` @ )Iș -1?@S''$"Jl6`X*jD+ } S+zeQ*Nؠ]Al%o*GE ߢpGoTa_u'vrWXZZ { "&֜c,~#W`H) E0 LDU!֢T]Ze37<7>BzJE 8ȘvS*QtAm$g-•^* ҭUR1q(nvDpl:Љ1g255ťKӞb16o̦M\1J5۰dعs'Tuq º׶quŋ ݿ}LLLD~i&,.\CdON06z4MGhi.TWP{& 'B'RNlŒR$ѧǺhݝBK8&cKfc S* $Vl bjj|d[7ߡT0͏!G2YNb߼zjlFy+9e0::7Aڷԫ_~ȩI1N<ɭJ,k) 5;ϱH[{ۺpܷO懩 [:Su-an g3?;-[__ w15Zsdze:?DC:Q6w4%υ((``h EV B*gyp2ITq 5&qIdLb6`Jb(e&cabhiF/*$tM}ON'Uv,n$ٞBtb4*%p=-l[ӜeR222?qe"2V,Օ.vc gϞxڶ07?7mǭq+~˺4tZ.1[_HkkkxI,+rjM"參Neٌrۧ?A^9B:3|/3V"6zl06-vhFT"7SB슡Qw'[Tf|wKs sfǃ=dh1Ew}tF6` B !4GmTME(*---iՌ.*RPBQBG :D"єoIR$dȼLMÕ: -@i@کÿt?'+++XSxW>L\`j _+3 }i{^[j###X~~Ngtr%#Sfff^njT24|_>䗹p7tSbܽ"=ᬕ9KSuj{[<!&*ld%A`UgvU ?$npG *9$TURWS jmmmu&hVkI-]<}J=xc]]]ttt\T˗iC~V_>Ə}9*(ӿ<g`` U ORx=$$y~lq-A2`@LZQiL*[UU:::ym:R /teA$QTUWB;2 Y(aaNU٘S+e:]K|?|L&ßoTŖM[?xǿm6m5Rj*z {-U}mG_}o~I:;;Z#QAx,ѣi^nDX;4om冊׉Ļ@fL;n[*@siJ*IX\d:0PR<)>}1/>1MǰFX6Yr~۫¹<+' 2*S;Fe3FiBi#mȓ7sB° ߆ir[HGz V\羖UM&y;_MUN j[4Nfd}wYt|2[oȽ97t^:;U ]رcGi TE@kk+ 젽yc?[nqx%T>EЭ~AXm9g|Fe׫eT'> TPUnIZE2-h xBJ莥*ae6qv=Ž] )Pok@16-7_n4vI`ʅ"C#g5E-mU.[mF˄e8(m 29@̑)).UiBKϯ?cC*2آ*Z%ssFęW.c.L FeҲldz3vCpmxtQ,,w|&,.,/Q ߙ5=LOH6K[M1?e.:;iߝ´%fIR.1 's+d'L Gm[#"vDZLB fsrF3M_ڗqIww7_au4@8v4̳2+l޼g`gӭGьmmm3WAHܿ;E778vnwcrY\[r%Ə.2YT-厔j[ֽlGa}m#G] 3CGwλAMt9x N??3 REJdaL4Mc-lݺB@`٦_'EBꢫ ۶eiN? Ԙ/|3l;ڼy#_e q hK_pdaK 4s.>K.qArp5 X y8k.?_ہ_(V=aMw^(JF_*J Mϫw,A$Rkx.%ZII̲1wC iW f39 4@2Vb|rG>瞏*h> O>.y} H@oi Sd7'1 &HZhio eqjHt[kpAZ^u}ULeG7ad̃r ~돳yOd6%[AsWv_WVue[>+ zzz,'N0?3OW(Iʼne.y#ՙxwYZ^T*Z{<˼3UAoٚ_bɠ`P I^ (U;Bn[`|Y'۱XmIg:]Yk͠ߤk[S1 Mm +kU>1_Z;@Q;'.hmwΖ01JZbƘF<XW,rNܺ=ȜeGWc g/n:3E+OފJYt/0̒4MÜ8q?| ~?F_DW /}ӧOsС*bIZz`}7`Xdlfdd[>@vU'~Qrf$(/j-눹RQ`Y%A!/$Sw.Ҿ}>aO llrK$wK`vn8%NUd _9Jka,qm.GV ߨ=HF O7yqWgWD78a.8t'Ow;۫t_׍Y>Nj:uJzKA\u.oYgϞmjWh؀* _*CCCX^WJ? \k|Wo 1XPז]?N< -zFdž` YwL 5xB8}Dp.8 ߒ|x{tzU0SVUD"ɯ]#f#8cKps({@qSc {,..bKI!_p/, [Z ʏnVV!'9s 7tXs,N,hIKT;C(þShƕ+WP>j*4{e+Mg=KwWkހ""}/mڴ+^ܷFMխ7"=Z #]^/'m0̊zD/QL׷Ѻ9.V.7<˹sؿ?PyΟ`f7G\X(cik`zz[.U`䌪{$ 6ln`޾^~O r7qZ3l{/GmȱK2,W}vyNcuzR+DqK9z߸VT_ע Yw9 %NAZZjn<(FlbIc g)%Ţ4ɶ; [6 Kiݴʇ> $ N[AάŢ%W̎Ne@aOdyN;cii_zK츯tO=׎GzvCguV&PdY =,-ҊIy[dɺ 77IUͷtqǣ{YEa˖-A,SͤoZn[]Zlۻks baxgٻwoç~|#уAnP'1~ti%+[}oW.pg8iU7r8}\!`?DQn̬lUlҪeN}2ff랭5#V^QL,N=ð@5HK`!4^U$-W 8A<7$#'9l7VL:2iLV)z{{IRUMLL055ET'!uNm7bLMMdk׮ahrɓ':OQe||Tl6Ν;4cǎՅL&ۛa=z9S:til6;SÇdHƘ.4rzn_K:o"B:%|lA28`TP'E&$bs ?S>;])8ʫ`Xf[qjub |)<"T*kJHr4U=G̮M:qc񆏅БWIdW4DJ!G/[Pz8AJmjqI.J/1-Ŝ(}20"^ӝۯ͵ kM1$17®טɃfGDE,_QTyX5Fl 4!ƏZO,r\ ^ gg Y_u+fjc6L\>pTvTF&鵔6͜á5èW#9הмܵ,&wOd8dj o_Z>ؖ9}d츁8ה (Ny*e1x*_YAOB!074@[H[ȸֳ$JR]FJ, 1GiDs]糝1}G!IѴ:_BQl0yL(WQ4 iIL_U-@*^WV@JTU''IÃ|QoUatb՘dZ "8izOtژ ABvD6pihhuUA6%Ko6R+;!rz qrHp:X;㯩 Zk- )XE>?UF4zKK 7tqAFz]x^W܆&G(UZ\r@d 6z߫! 2'dþwn7ie՗.] 5=~x<$IgPP3'{L(c $K%Ƶ)mua60\'i2ݻ6nȴeUT4\Lu8}tbitvvH$x׫}N[[3x).FGG9wRgkk_OE}5V``7kT@]mGA` F%7d6^f鵎:nnVN80Ǐ0wgΜᥗ^bll۷L&%͔0mܨ/5c!4lxNVS<0yFeSn1jd9jx<ΩSx饗nP%VNOONK$͢iia15i7-Qf(S57R,SV!{r. FS6 HFiziٔ;n@F']dΝ8q"įW\!͒dX[[yX2wfll-[f"X-\i 5'h }i֤O52s5d 6 Rk}u]gنaXYYa~aՕUBQtiR.//:=;dbbv,={8'bk~>J__vbrr~;|# kV1`3ܛ6/9FGFY^^] 000@:nr#,/-Շ/%lٲb]##,/-fk J5̅>A)%-loDr9FGGYrSK[I)iq}dtՃ_4?8w=#166Sc ӻĿ\*6l 7o&J7O?4q;> >,/"aK/Qu#G`6333;vp9y Ռ.45קxL~E :g9fff4yw]*rt:4|8,HP -LOO;fjjz_Q΀/6H'T=x]euW57B!affK.+"tJ;;/O~"D!KKK~jm玝9sIΞ=K*bxx4ætࡃցD{zz=$ka[P^* |Ouj|G8Gki֧1uhh$6ɫKJhzid}zݵԆe{Q%H(UoᏌ300.\`pp;w{emmm:|(xH55u֚i> -R 2oalwb-)+144D&I۶ :;΄o6 ?X^8(!?Hk%Sgc6<n>סm3ٽ0t&E1{&!LVzREattl6K:fxx1U}Q('*k/Nk͚ \NIz3edt UUqGf;s}s5𽑑Tb%|5ѐ!e3W44MuUUv\)a_6;>±5 mUPU7EPBO訋 ¯6ccc5GG y wبK(6}QT*E{{;Tʝbg}Y9lٌ@VVVR7Vg5$!ˬo5yNfl6wXYY)U (8;d] X^Z{ՕQ~s&GG +*/t{5?K8(AWW?>}\F4GNm54??ʶmxy7)#)h۶ȶd癛\o>N:fffgy鲯j8??OKKA{!9rdi~033LDuNrwgH|(-ՠ!@Q<7x#/r>UZ AٟPNzqa/>|˲ܱu+ak*(p{{{yd~~~I . yk=.ު=,..Fw}_XXɤvԔ|/p\>X4"dn&.SnZRVWW+#L}gD~8v|cm(UU[rgqq7|^i ODhY;^{0e I$qo6O>$~<֔ǿ}-4MG!qQR>$n*V^|^pFFF0M4}iwLJO~V~ @ Z 2nV/i7\vnąjsP=:SSSOdHp8jX `R/0$ Ξ=o ]]]ڹD J|l4Mx9z(bo`׆_,U*ׇ>!Ν;ǁ"7}pecQFFFk+gԃ_>2 7@KK ?8}ީCbi%bB D;7|b (?92|1+8y$###\|b= Ń'<#4E -*;Ě  pn_k+++APgҥK(BB❂:?B.cǎ( zml,af`}m7 WMgFLl0H;siPOD"C7 D D7!_|:xн'{{/Y[[~uAŸy R.4*=zmmٙYH$uI6$ObGC'E,qe[:z-_V/K/rw裏O?RHBsuN}=b4RkzFYRpd*"r4x$੧ j#cɓ<3q>OUZT ?fmm/'xQM_{jE/SOqYN8iUUQtXIE1ǎʕ+:uD"A[[o@޺7ԩS5_kgoݺ{/|ǿMx衇c% ϝJtXiD4*D4$ؘPZ$!D5"u:( IS<\r[]{vs2?7sx;յVCu7oG}vmw}SbrWQҬ5vS...'9וQ>tM%ٳgSS }ՈY!ݷw؁(曌;f ᧸0]=EEiñF"vL\+Q"`˖-"pNgٽk7U*-x266 gNfmm?cy2 r LMM7\~G?aW[ȔL&ٴir,//311Qm׊1\tB~:::8|0 ~^\9.d2dY.]aes%%QNٿ?O=ϟDk^ڼy|56O8A&a >K0ڗX3\_Y^v5ZK.+p!矏삫:Zˋ?|䮻bffg}Ԉ rkkk)Ɂ/ )e9uٳCSy\.=EҀ(&Z߭y(C ill߫Q~ecs= /ɐ6M0wW^W^6oiY2 ~~XE-EǏ׵|E `||{l^SSSn˼˵-OXf}вŠصEy"Uj^p#]CZA!$䪭w߈plD:Vy=?mD )фP3.]Ǎ'ٚѯD6~KbA_T8GzBqI+Kn`Qڠ|Q1/Ap\RUIYX:U/Sn@5gHúGsŵ[wh⊍nƴRԡ͏u  *‹'m"G%GsVl9#g#^CF釘bhv?5vrTyOSl3fNPW_9Z_IF/uZ#3!ꖴ_A&Y$,-ecE!&[^o3 pI82r~]CJI,p^wiWӿuS|%[:o#LBAW*jK?A(Ӕ`ljbh2@i yyri[7=pjҽB(i۶ߚgZl)%uaíRVWMZ,mlڴɿ>3zNR5b{zZ RJ64:=^P-of~>%m>AZƊ_2J㫀/%L6_ah0lk[EۏQXEXdei]rRQߕlR *EEQ>i+X^^fttN'GjnA~՜'yEQz{{f[^YnE2- +++(=xkZr"tW-\Ρ||2} DUHmLL ?ՃW #G]ޣsTUz'&?bat&M__\iL d9Va=F1\l ^3$%(d077Nb97$ʰe~OvCEQP2D'6 y4]6X,bS4[n+~%Q-ᛆ_ ǃ_(| Wb0[oE*f˖@һ(I lKcU}.M'NJټΎNHVփ_*0MS'OLQF]xnPm`DL1 ۶iko⥋1??rlm-)Zgb?L0H$???_Jm0 Z[[8y$|]}!a^f Kcaa"ַ%ӧjݻuJ4U 41] wgΜ9CGGvfU'aa&''@f9wmmml߾bD.(ΰ L44\?RC S#w5 ]ה 6G{w%>,/_fqq Mќ8!6ضM"̙3h IDAT y_Ү$ݻm;_UT v~<*Dl{T ]E/YSD9 -sXȈٳgS-s188iElۅo re=>Ν+2C=ARJbyy?X!ll ۶b?Qm.^x!MQ"' .^DGxST-7.FRXtoĨ\5kj+#Rcoco媈z>B@d]H)aRcǏrq]ʍ@`"!u<.JQ4j—nT28Q^Ply\tv߲l"Gxc.]j' cYK%:o񖻾?H[vOMՅm5_(9z5ۥdd? }_wil&M*fa~R[ lх͓dypA^ǾP?S?nN>x}=6MUz{y)Nea4m#,xI'z EL?FWOB LNgtMX"A{kk$|UUk_?H'QƵwʋ/:k11#}'I$b1 ߲Y][5Mò$RZ>MBO$hfX>=ݼ>Qk}[Y&&'k·,\n^{ۯ%arjj}}5?[2fAOA Z"JAm=݋WFN>*6" QB8W\avv:cQҞDǶmVVV1 ض?33S>դ6sssehe;TPQHl/*uc\|NEAqrUU,˧_ȅb +_AAEU~|s.|Uq҅V]XX_ ӧgrr+>|UUDA)Ei5ס |>)υ.h15ALgϞ imm`fvo~9r .o>9 7;}b<OS>tuts6*?}5 mF4RKK:׍X̃杋LzC*- ]}---%4݉Sx + +oiigG7.^*`1se[!Y^YBd|wsrJXn=uD2ӧՕڻp]%}dP#Fo2dyel6KX@U:ۻxw ߲,W D"r$v?bS ?A.#JaOu`I-ayU1j8`/mJŒo3gϞ=#O>ȏ!N>7̖-[B={|^^(o;vC8v772ssaY?E hI7^\\D47b觡-Նv&\tMgsfL,(ieeٙаGKmE_,6,V0iIli>"; ӍC{ ܃qȹ\.eZfUB"׷T*ila=='ئsO2L+:azz:~\J)߼٧eYk\ouS 6H{gffB=Ӳ 8'mڄl,j{7>|ϥ+_Ұ*~9 z b+Ryw؀BE1<<\Auzz{n9Gs) |')1^+/:=N܃/ei("XLoYo޾^pA\!;<%åi򗿌7Vy,IDkxqh[bJ(@d,7(- C +ggavvnG8 P;&K9N 3g>8cC1@ ⏙رAQw:/?:~>qHch6vqr|nO3v+U;~ `I?5fǟQYU7I Ƶ?SPĚΘ?',--4###g,WnVAujTm۸zPTUߚf݌`Ne|M^u, 1[dYUq1>>D_N|R'8`,'?66&K=ӭŤ=g,FExpti+:V~T_˗/ ;c?9@1>|K.Yo~3?J3sY{GGGxbҜ¡74D/?}p }.~^…T~a$1o׆pılmmauunBV`ifI)q 惗0~SB^k'O _b?%25c HU 291r9j*G(1XHXCEj* :3 q?SOWƔ3YgRH}#$UTUMt_GM>q8#EdԗMl?_^^䤕? s_ZZMAZ?͘籜i}w3s9f< Yբ=99CON(ֆZ #r'Wkmg[uG1c{{‡~(w; 2XQ1Ο?Z0 J!ڵkzҿx"j 2F*bwwA`wo׮E}fywW]EG?\www^9-*? _$gϞKKK^}}8'4^>gΜG(}?/~e>zxxs{tt'899qfP$ :a&ɐܗ<kt33 L`Rݻwܨi@9q̙38<yȩ)LMOclt1[kJ7.Y==5#|ܹsziduOO ܹsqp2_[[ğӨOMaltTobrr2r_ݻ(*U4|OMa2e^_LP* KVVV u`}}=;r]Mh^^^F(s݉! OI4>"X iNcԯ>VG:wVc}}kJSΟ? P.TOPJ1ۘ!D!N$Ƭ/\V pF5sf $*+^|Va…:~HԧRiTnu~MWLR˗.;wN..5l6q9]{Qܹs4f3F<չŋ8:jSfάe__GnR5,c'53-k[qppGwEu taRR /2Jr!.#scKpϽ_opzbm#oZloocmu V kkgj5Z.,,X'=/K@%uzzZ{Μ9fsgPByRcA1GFlVgJf&:qPTmů~U'+!T*֟m4Б_ZZx&ӥZ! Te;QT[uffF_ߥ% bUf_$_^^F#̌n*VxoRnJnczzZ/,,h`ooZ7 aҽ666.m̚lpژ3]gY ?ڹUj\.h`ddV fS6m|99^pDj9꫷jepFGGSS+3*Y*~BD>n#FJ_gttf34? C!R333"fS+}"} [풩BjUgΜ/ JVg%UfEɝ77" Z5Y]]:~aZf(|g\b ^3RAI> Yԃ lLZ}&5=(˨VkXZZB̘OY'Dr֯M"5 2!M.+T5p\BZ"_vCOC- uMZgMsAEC@>>}/,"f恻7a@,T*ZbaaAKr֟wek(%LNNj`<fёkUƤ}4}E=R|/+W^䷥4*JJn\..e# _ԅU((JȣomŸtÒ0E~C\ %sO<ɋO"?7n7lEIJ7o76Wj-⟜S7o! ceߙGkp~QXT­[;?r19sFXr f'55^;؃;} PP8n$B/+7 6pTj|PS;xbFRYF]WՀb*P}a) 7\#S3TedůF(NkE~bߙq/򣦾v8&7<}7~7^$@R8 8=fYm4I7^ǎO%ҝ2oQ&`-M8Yna]$ZƔL%ݛAHT~Q,rof?9hDKkJY:?%ԴJ듘X/A_YeEo6u5VT9;5t"K+@OT?4HbmVM9> xDݛc?RfcgHSNnsdW:ɑWLian?4ʎ_rZ3A"6fV# ^͌_ rrű>rg@fkZʘM-fa\F,./YWkxg:}+Sd%q} F AZ\~-߰ 7̸CeBc``C$?aO&ȿO__mV#~s=ktϸO^c0k´Y%gl5`3NW*k/ +>HxdŎ?uݳz[K%Eʧ/ # }3髛gnAR@,F,yrbnfpZN-s2WVVȏ/~_/l~꯮뛙6W}AT2"t:4-4899Fr;3>^+{}l5 <6-ܝP"H-1#yB?"x>! DaNJa(N!rݩxxbzjڊ||RzIVMrNM0 +(`,Id%a `||++Kcəf%'IsH!Lz=0cb|+˚fIűᅬ ti~}J 2~A:ronz=+?4H#H'XYYקiX:Ժ21g Z )?ͽJii?ǗudUaia+++ڲI-aJճH--K)xtX4$:@RTDF*\I'JYXzFGjy𡥯H0FC˺PCZ@B?F^۷IewWcs>zI0dG$HLMp+i$wtR417I*& FիK^Cj$-qժb$/n( 4EW裏4E65g?ӤGO7nhRKёW=c3. C=j]٤RB)EZJR}IRa&Wp=A" icttTBN cN^yENDfCzͯ]ōٔMja|"(ot_c ҌIET~b fZ$"_Old"I-AMRʿKRG}=u!W_ g&IE߼yn OӤSꏎݻz#̧$eއ|~М?z6?$)$D&>>~ydS*667ɃstN:Dފy VJb`uwtΧ믣zH3.9>CfZT~jz#*.H H};؃H-'ّ)e/D{K)Jj[o<RK TҤX͆s]>??wctty{g[̡ .!϶)O5eޕ bH҆?;;;)&3O:'?o}k7nkg¤ $ֳm&̥HH-¼\fƱÙ&&GlEn~:~fpKjqgN4EUZsI-(Nji6R[rDQ>I%MjixI-}#*BjaΞ=;%L“heaa<ѐsss#4 =~_ʗo~ /Ý;w!M>[0gqrCjaF*'qkRK?{K]R(pI'$fbI1]?urvH*Q"H- ֚ҏ4)dmmM?gtp>q7XI:QqmƯsr|"H3VҌA:IcZVVVuWJ^aI-NI@mR G_^^a>I,OZRi(RKLE֛x饗8|? jqʕΝ;wy111*({.&''qum|_LB$/ɣ۵H$I-< }ɍߕ&EQQCČ!L8Df2~E8jq!$KjImt~ Ia^R $n.%006 qV>"i=%pCj|t)\^3 1=&6 #02U vsY/q*g?YUDNLLR"HƼdt27I$"D&$d=_]]dn& !Dxy43Ϗ^I-Ό%XVX"yk1rI-Mv圁G_\Lj)YV"f ÒZrGtNDɉASJj$#LLN_UIӀI[Y߶b4F$U|ᇲ5cǃpyYv~< ]^G]N>@?ȉesYnǴVRE\~w(C{/,,,׋8{lnpƍ=ʊ8sL8r//H- fΞ=׌^˗.9}}$3J?/?tg Du.h" 07ҷH-xUZHBj߷H->hdZ`v~RKz/SiҊ ZS*u濽(,RHJHٿjtI'' I:X[$MRI0 :LP)tbT\}yԢvh~d'$<}Ԋ_GzI6DbF$v"@}#k`gG_N Zd%j6"~G*l "/%_\*,R .&Z-Ijsؤ(H-fh.W',Gjm|zN5_wTk~DH\RgϞX=yr *ɠ. FMK'ɃiJq0LH!4 <$r"G*+-"G"1I6f ,L1Bgl'1a$gZܖkˠ$ա33$U{"OjQ׊!QTnZ>h%5_LZePxX6Xti~z(Dj;݊:(RЖO9]j=KzjeB6&''Q.'$IY7ORLNNJGo\Gذ2,Iҗk9+?Q(d$0 E3Xq@{$I0>LW$s+cDOҲI-Źɂ[rFt|8€/>nfþk[6*ĶDpgz ֍`{צ~D#Иz@6,)!`n~Xza9(}7f7$ꠒ,Xb2/= ؛$('_>R wKt s%g姙yF)h&.$k1a~ <}$yh>|#0 )x`n(_BZ+ W0ERIH0Dq$7am[lMÎvlxFCAIr]"*z1ȏw y`5kzUv▵aNz],Zr_&QB 5Xxiw")ڦ,T>nHܪC_B=ɏoNugT&FO>%t)ob$yn\w ',{[4PAj#+D⸁^8"vʉ9 E 1:V3?/~u{I-Ƌ#/?A@uM}ntb4Hfǧ0˻1ckc$5Hj6 !,8Oϯ;w}RF>/|I*%d3fGRqRܮLW?J5i 푂Tq_kt|yb<yI)ė1N.ge }-c%1ӴBo֙azלz^Ǚ^>^%$Vfgg111qIjA6)DȚGR Mj$RK5K_ML$&Q?ft;h26 ue mi~nI*S3/A9LΚ s˿G[i`bbcÒ5 ^0AFXZ\tן1^iR.^{8<3xbt{IcowA9DDN8 ,뎢lRKW4IRT*h"8XY^LC"@vRU7;d*%^OT(NDy\ogy 3Ü6"LR"cee ٲRq !GvKq'\R?\ѱ1,/-azz:>/իW1::,/ccsS:< k󤉃ȅ"*{2jpE_ZKeqTw|%}j G"A 2F%DT9nIx{i&I1J"I$~҆Q$1$HgV̓lk$. /&(ɵkprr CRQ$ }ERQ9 &$$3Y$",Ի)Ej[O~6661* nܸ፟{?QPss\߸q&͘MW^H-J_׶6{9DФ]Z.(H`X;Ѿn ]-'wX}2Բ.I$um%m5O3!^p$I*E|&٘10iƻ?&,vӍ&_!Tv7˥w/|}IƌOIr~ۂ38ư^LYzTe"_OT*z7//177/ˢ+<88-xMSD"dBTeENlF>!^JJ\7^Nؓ8C69G}+~ DbZ2Ut: ? lǏQ)ERt}/J2}?O(I-~UU.DӔ~Cp) /NOa}}=W?@jt:*N/99\n=+>|NaՃ7 _u:y{R_w;PW^[-A~}K_1\}.#?-Yam~t0 .G?>}0 q||_~p=}ҋX[;ܸqo},'EzVC2::nT8ZcX^]bўGHH*;Z+%͜Fy%!H! J_G2GQhs<7~͌?fc|h,ҌGI;~S_&sssH-p$!oԒݿٳx7+W`||\Lxh.< 1>Rڠ0IH$9Ǻ$͂I, RBLܻR dHLҌm6swz"xH-7nˏ}C*?DEϧůH-so*~YE}?|爢D֭[:tl1}Ej9s挦*)}S |U]v䗗 JBYL\=Q,lƳucvn')҆&ptBɇ* **ĜeAK)@ Y[]H$RD*2Le`*?ܮ7I'G'ZYybC]R KR9>:9]^^Όff^OG{H}EjٻṐEGCR:G9k ~sZٳx7" Cܻw1\pjAjyCj&ؤlO6ՏYqa`'7D;~s9Z?C18) 66pEu,/*OIqH-̣oZı0 eb2=2P_SUg7z\Ư:~sSg|>S52$]RQ@J@}6}|oO Ԣȥ~Y) IND"<>4Ɇ+"&'' 4K1d e6Q$S8EVIxf`dtD6?0k~_ܪ 77$O= \" LP?zo7"^i]ܱ6;mN.ET,҆ە3 ENڤ熜QBtgfП֤;O>5Q~ e~r6I$yOIw^>IEƯ|&&&&`l}R*wU:nb GIiRI-ųڴHZ5&$GTC}T2!DkH5vGUQBRH-rfgg%#M Q[s%ÝG",ʕdkI:9w.C4+PW+E\p#PJ&I0aIbpEjQKKK888H-f@RB "&%=V_ ڊrN6옞 J%qxxhk G Q; d!eQI'2:'''Ij&H$)҉l \uIOLKf+RH AE)Ѥ+?~:?>MZVY@N`I%ԪRTI'H-Zl EPob j^} fqqQ{!PJQUQT+H0KKKhR8\XX̌ UEj"%'t]H-b}聢%8θoJsDWDl6-R(镤'nU"T*a 4b ƹs缤@"w[1E T* )$tH!r4)2$6CӧC"!ٗR)Mɋ?>fWִgZ ЦҠçneCN5M1;~dl@ʥ2V0,ɽPTv 3I-a"Uqn/('cr#8R쬜u1$Z.']Zj1 Ph[!4-VB_HH![()\.gB &n W?,ՆOOA(6φ",,.Qa`dT&''|{J?5^2>R"6{f~h{}E 0kRK0# IDATP?g E?^^y"l A*ʕ+)82H$57[pI!RJ#C*" "Y%% K%d`&'&E:Q/QIjv^1ӄ(V$nKYu^z ֭[?c`Wpݵ)AjFu綕T!u6SמU/zBI?.$ .#4G݄i6|hbH.u9$8wH$>?ɰd#ͨ:,R9/F:; 2'aR+AW _~xE;dR9r4~й><EcU{V`IY cGTn"m$o ɪAQ!f5)UōNH0>EE4,O R ON2uW\1OX(~8y1,IEys߅B?NAq-W2SӤEhqg/6з,91`4NnRo$nUL)E$)_, bL0K?нʺ ͍ ,C_48u9mJ?(%js /Xl$٘K$޴kMHMcp, %ʏu8瀦zLOwUZK!83 ٲQOPBC CنufiNR0$}amhRuER1SH6Z i&.(C:eng  čX!@҉gneVʏTrĄ P(f_"=7g16:5ԛQsH#Z;~3z#y&}viI-EI*B/48G:Kߜ^ɿ:qXɏ~Y4Ueh1L-шbf)e,R I6S;-T<~bdd$ Gbj8os5ClnlbfGm4019!:_H2tb#1ZsCĿ,&&[}3B6јŤ?Gz`޲'҉{? $n '&0>O4Ej? @V[[[OG;0%g#LOOcbb8::mt}ę_Jz=/vd'Ý%%Iڈ !I!ccXYY֥.IEJ 9H-()R_^YBc&S7KjS`LZLʏYC(Mů^J%t:;?IH~u|xcccXZSYDpAR1Gư<.it?=&z*ưՕlll 6r&X<{=[u]RZf0Q;aH,+iCuBy{  c zMBl҉A"rU`HEH$M˗P*uYIʧAjæH0&I%tFFҌ=A:گ$ؤpI)KH'裏055%CQ_*k} 1_M/H-ȾqVi399I-gΜѤ1Տ-(}cCEj }fWJ+D Epڢ~O\ xWp޽LÇb)G"Q qW_yիdHNDf^Ak89H!*?M4b oq$A UTgccC_~ݫύ]{u I"(&\~nx Gi3|ERy <*~ԢqF:~_<@L(GJw3ч }bb<7gNZ,vH!I'aH47H*?;"%ILI'el#(ۯpIRQDTN(j.L}MRy$V" dotcFt,յqwwIE5aAR'iH-{{{Gk'V_ŋ5?snm\` ҆jA}r[cd)DH0d2,ZsIǨ0#4!I-eX/WF TH%H'@Hc5u֛GǙq# +A69s[_m)[o^0c8pI-2"?Zfo5(H)QޞnV݅!i,*,GEj!^u^yuiΓI!?ʼnC"9=R\>'$>fS"IA.I5r=D0?f*B'clJ l Nn\}UI1ϧM}}}3w?(5A {.Mݟ###8>9(+R{ }ct ,$ǫ˗/~?kkB[^__]۷o㓟iaWIQH$ /dwWB$Ũ`n٤W$H8bį* |ʮq,H0C_LjQJ?2E1 Y__@E$if_T-x-RK3qU^k Heq$SL]mDQ{pjG֩)ocvn׮]S%|qe~(P¤ OH!Rpy}ER$M: B]4+4ÞC~ Ҍ̿IhFEvzD,BRIq2皤%kl6ҏ(E%2nZ7_A&$n]l>LG\quw'qL[oѣGzZR><魛7?iC<y.IE.p$?I$D`YH's4mTC$??7I*yXߣϕ&T0Ԥ3~W\G@믭^.t~\tIb|K_*o9sH&٨ճT(XZZ%t]tN:+GsN"¨EvhRK\{z9ӉV).F V?v{Vr?k'Л1)R\?ŀ8vn^qH!b.] $E#>.^dkcƞ/IŊ?qgNXgssӯόp[js &p*E򿵵seG??Yakk +++ud,| c[kƽ<S)kx >#c[^Z޹aSSnR$1Ԣ?LjcQVw1b[hH!;ӒHR&qO c}jI* JG`&} FZ?V }q˛foTS&WI%/뫖]X{bbB ӆ't:jjԝ׿uy'''[_-k?.'JGGhv1V\z%M`Lt_BS!IR)B:<|=#Piaa9g\0"nH(I$=ERQ9,BRIϒonl3] }捡I3qcccCTt-gV~4IR$7qakk k$ 0??[nwڭ*ua;hdw)=6䘞4F*\&mf¹HcI$&CBjRp.1VtӟԖžiD"-'mMa\+_|_MT]{߿w1#H3,fiE;$gTD>ɦ^VcRI]Rk Hh4f,R!eIRT*Rȶ<1H!>uH0>"vյiM:QMjQ#ZMw'ʿIQg5arlayyv[.Iů_Ϳ "d$y>%Q* RNBrteZ-K$2b}lnn:nng_u鹮t'4E.i#E")B qIu W_*DBH$nEEJ(H0[`yS BYr1$9C1I9kkk '}52vf #cD̏Z3g_^HVۺhs}1NOORnjH9+TFt lzo%( !F 1WvVb,+A_H8繤ÝAB$pI(SBk &@e;1! @&''"P\RK^T R‚8>EA:Y_"~Il1U#a*R\)8J_ZF ^){"-Ejt; 1WQ5RP?ACZusyXYAիWS ,J \I)4&%<:B\.LR9-ePɱNCE}k/H. Yo1QU'Pt)WXW44Ԣ줋ZD֭iCoV +,5tRx\3_4~LTHOZVE!}BK}/aS(6oS&ДW鿘[/jVWgѹD 9s Y2lY3D$O)Ac 6C ȋ_ᲊ'i:AbÉVr?-D ~p䒉ACK[MM||ՠ;˜at71"ck{I,D". H*~,^FOB^ B݁(u}|6fcEfE,G+b{C{6aT=fޓHjy}M%J_mD3hY4UM4,d5Sv=gI$EI-/s?-Iŧo&W`J@9^Sů 6&I81O$~C5Śc8 4ח3j3*]' &^q;)Fj)~ڊ7Gk$o@~OkH*DO&m f"npÑT? |>IKRQA kd17:鯮 !$Ew ,%YW꓌v3I-P O4H~t|R LReTb@EC:1I$cX$hH-ՋHB`~raο$p+W$d)ԒDf(ccXZZLonJfU+Wbtt KKI-TE5aqq++xӒz-T*I- 7Z9^VxI-pC O I11ku hR$mB)HyFJrԲo`.]0ƟA:dmM)WMR K%E5ϋ|܎ѣGZ?"LNNHi\tQo:$f#k5uH-@B155 /f?̿?c]W5Mj5;bZRznmdZ% ¡,B.qpD@c8R+}E"(GAOB Z!H0!_OH*Jwp"SAc:JIϘ?Du~,E/x5Ika}}=ʕ n޸{41p^H0V[f~DXqnF5*cQ#bM X7!ޠD `,F@I!y\Dԇo.?s?"0j;.~-)}Z$v1c$(}sF|J&Um*$#M0IF@ pJ(F\FO H`rH$"G689|8K2W#ffD@  $>v`>:Bcv6!n~&TFG1Yƛ$H)c J JB/vUd`2H-;{k^g-s "w)%ý{0::mkwww7AnL#b| _H߼]ӌzm"0݄b~΅Ǐ~AR#I*Ja=+bEl4Dǜc\J}Q"ח3T`1I0 5;N-aEIj*I,\;\<}Fqc`nna?q]ݵG{{[ w4e2S͚38>9Na'Lɲ0 QUqyď~#~;XS+WV_+xWcwwVR kOe2,uMv)RZvwAiL$< eowWO E$v IDAT$G_wncw_ۄ>LYH*yfSxI}+{>c `wxͣJ E jIZ{w=54 {\7nocggZ'Ou>|3"^z%}`g>iᓟ$^ucll,]}bttt8R 1I*~%I Ø$I)F")`V\}Uj9lʵ4EjyDOMi&TW3~Qa~~cc6I%H( -F%R}B2-:z3~U{btbA8D"of||72(N/UEtz' u} {gqq #px\eI0B_#H-nCjo5Zonnⳟ,X,io,cLL9#|֦*({.&''qu_bfQzRo0 166I!1cc(|ˑTm>=E Lw:baI$LQqTw$o…39&?.\/Hq?~t"78|:Βk.a|s΋\ FaI-9||sΉcC_^aI-i#,'3Aq\ S@u6l4`ajjZvq棲u=ʫi8~~|3Yfccc#~122bHϤ*Q$d>8G WS.D222r,^EGFFQTdbv'_nҢO~S/.303wۤER:P=U?STjiR4~EUl8+/k W@%r(ђ-o3c8g',?̄nxWBDm@"Eph4Z}ȥk%*4h}tV|j`t1Aonn?2pܚn,+l|w~eJZ#jh'`:Ab=3XvCwB&4ɝtN#t{=4 D"So6ÝNGG|V'2AF#.QΝ;B$n}D|hj} ϼjA(G'߈3zBdRL'|;.{C2 C4ͩGL)_|E$yCVis6-ogZ(f +vx"ĜŮGzxCD66S<&Ʉ1 p94iM?/+u&$یeY0 SG?VK 7O n1!SK%2 DZ˗sΝ;X__/$&sb_#L*l&` ŏӔeR 0kO ЙZdMBקƀ`g϶5jmf_4`0LĒƒ>!x2-j5LÃEΞ=^)% viZ׹$&)ٳX\\Bf[0M[˲B3L ޶aٖPk}>SO8ED*/Z/(z&7 vl}nD8J\>c 'ψ Ϲׇpfe=!^G/qs\jvrD:.}&J T>}MfjBJ{/!ê< vGVJu,Ϭ)x,gPZv$Ƙ3y➔ZhMiJ NfpwvfjvqB94>DY71Wį?::`[ Lb8!;M6 &NgJ~yvٰ/i'a7888@P4LeKKyJyHOAd `X1U A/n:1QG)Qa2e+jhLm۰lQtd?TrL-3YJLtsRE1 .Hb7M"}CfӽM҂:IԹϏ|?Dq$Cr!(Zv4 ӄE 2)>I0|0 4R]uG bdIs:kiJx;K>+,i ="$2$YWa>9"&bjlSrC ?J 穢EC} {%0kG{;Q~@J)wRas|aWIE*%3@&%a$aj4Q ĻǔF$Bz0\ve\y5Ǭ/c!Bݣqx ,*%C@ liƢn'兴(ଚ$09Cf⋤B!E.%C2™$_l O_d]>ɣ8u7J$yi)^~83q3KQ*>y3xͪ2XVUm>SEg$o ϫAVaI[ 82Yry~_JQٳg8|d2jp]WaI$V>"C \, \Oy`@VW:q/އINfY:~;3lY`pbsLfU]NŔ )ZeNLr ]>zW^i8>> P;Q&"bs9`ijV;qn F+uv* CĽ%/>v=Ys4 85hA0 0jWBީstE@ |R>ʲ;2H[[y3L+W L|Ώ=0' a-{ʽ=,,,(؜Ʈ1=A^y*6.'<O0q'6PgK鼻VK4v~wծ;eӬb/$])Qސ;kEc3q]peovh4TKp8ln~;;0ňw_DRvBJoйQo,+tW_}H̉b b,T,kjVy9LFN9 =Q;Q1#\ů~W]`0c:]`^ ܾ}.=zV歇!5׳',^9瞞D]6yٚ:amx lmmwǏl6rܪ~@8]fUA*Rze*,fzX}_%4,$yM5LOׯ'9:p@ 'pN%xwE8öL&5_qVVt:nv}lfyyytwB:?skoH}5j 0O1|xx{E(7ox+899H4':<#z? _G๸Gvp]FH`z+/]px<3c헉,D˲=|͛7OEgaa+=OsPC Wom;9(Řԓa^@E7c W-<"U$-J~W̑<]CE\ yNd( ~oݻwiKJK5NT kiDs*+e[(,yyo"k^v tz%m`O֛W]ɺ+8]L<;sP@կ1NNN0 Y뺥JEhb`s d֜ěpNyA׿1'Lr,YgTC+g^#$<K J|4>≄g猡*';:3x@T N#E(\3g`wwFC]m(Pϟ(;Og lab̈́K/txgWmZw.c2*tp΢A USp&Ek5#3.ȷaBJ3( .W\88A,:NLgA\TgM\t\CH3,=_Ұ"`<'1,P7cI. !t b NNN\381FEs+N_;e۠ a2a\ ߼)_.χSgMv#Y*Z9E3ׇSx@<XXhRZ Uw1HCx2<,ӁD)C釢tbam9eX{fW/O5>yelFJz=άPF 'Eͱ9j0qKiȖ!dXں Z6U:e[ :Aݧp;@q]篿 uZM+)wQ^k!BU`E-8on])-Tdd|}G_R ɴ9Zҗ&]/``ވ=@u%MJ1߇ix1%~;`%m;~@^& =;Zu";'sŭϫ۹Sޢ5\8c]ql}<~^/4ni*cNaCEZbs+4 )@ coooQ^w0V#]&=8i(&̧Z4^XoFC'꬟H2{wJg3y:ZH1H+eDj0r 9[5lˆSsjS aҡ ܺu8 $B ΝfUs{{myV_G -EO>dJ+]CYZ.u2KGB{LvTm-L&c(\SО DV^ʀlVbIR y,BDPOmc2(=^}E]]EV,6M34rŢ157)JGl|T!oF:7`TiӪx#Œ"8m[!AxcAq3]ql5Ѩ7va,Vn3vÊ6Ċ·p :`LDDDQa#uu[UW&DsWY´ʰNʿ T|*' p^O9N4QU$yض-U IDAT|Nsh6>aa%zn+>pB r'B٘Zt7vT !]+^)FKJj*[YgՉ+.SCq Tmp1UKDω,FX,cvbeOć:7t&鬮~,-8Z (&"$ZpϹh)Art +e:a s?!P*)k" JZef7:FYU .J(t}"#kX2wNI 6t5㭊%]@},U/up#Y;91“|:$pG*jBUaY3簇aE5єi1p Oa{)R1[3U$Үl?<1*_<;VQ^ z!%9޳^N_2AuVX\3MZM?^O}cܼy.\K2}> @ߏ=( x6oMض}{XXX7f;::ݾZX fU)Jugm>ЅJ#2׶r8c:4 /,,ҥKXZZht> mƕ+WWloocoo/5sP=W"s E:iөwYP\6*T=@ PgtE„L5ure>D@ęCϟ?OnƓp.^p=<|xVut]~b4{UtZZZ KKK!ptt۶siH,(wş33M#h!hH0:V50S]UgB-B`Y=l .MݿGjnq|| <<b{{++gꫯ²,ܹsG+W~/R$B>/q0 N̨~) q]90Xo㣛7#{5ܼy[[[߾})/&=^"!/Vڵkz VVVpmܺu ^ NNN2ԊN~_͛/--m۸v9h! 8]Peby\T/rU*7m΢ꫯz/{~;;;x Ӷm6^{5/bii |1_cssV+3A{0G7o^U,//wGJ?ѣ3W 'ʘuY8e#ief۫!ᤫF)N`a3g`ie #M>z0 pEܿ_|/ށ+-4N?۬ $ŏJd͊YR)2E{HxlK~;w`}}|cҥKx뭷 8::eh6 w}ygY7fcl"X(0:a2&&1677zVCCj vQ"B 2N)2Y5fNtjY9cPeel%23KD`bd2.qٞ;L3Emc ~d+g= =x DV~Is ?Nݰ#k߇PT9 zj<"IENDB`lmms-1.1.3/plugins/organic/logo.png000066400000000000000000000067201247673406200172550ustar00rootroot00000000000000PNG  IHDR01^*"bKGD pHYs  tIME (2=iTXtCommentCreated with GIMPd.e 4IDAThC՘{]uk}νs=e0RQPJ@1)$$J%$F*"JCJjڒ BJZRR#P\3ό=;3s^O:s^{s>Y#~g,ft98v QI}o6ULD{'wvW[}Ewb`߮6;(}K(b&)<Ʈl_qnBeL=E&)#_f~e R꤂&,ZS R1gzSF9'8H0̨1&3/X|ǁQ: 8\Tp&zU1U^X#YH{$`Zr0HFF Ncw f,ٔQVJg@@XkeU]E'W=N&D5K༠mBȱ䏫$=Jo[q p?eR4{C $G:$HI@.(#""Uap^ hP.J ;2k]@UH>Q^O .qh"x' (*b^p] Y \!*{0~50WCJc#X T*Lp)D D1"ь"DBy(E(l`v[e0pFsO׎H e|"P=\i:YxB'G&J|OE+&"4RU/(`!)n([^b6|j_Y~" RDH@3FTD5 P  vZBew048 EU۩,Lq^QѲT 215SEE2ʢPs1BTlT0s^%UIŁ@! RȽDa3OgiԄOΓ8O KI'uT%#I=s8u$D*8GiS**)\wk!Lz8{1•]xޓyR$Ip([Epp_xit99(]{UuW, xLh@ 1 `B &q(#`8B"bŢut|# 1q&HOǙOEs$ 8$x$AKG 㢠CTyh="r1n1t0ΞdSfM{jJYoQ1b9X0Ba<sE$F ˌAOy "\!GpE#0=dt{^G zRsK#Â-3Bh`sFdshFLL\x9+:cDHUQ̌4hLfʥG0L 4":(@rpARDAsV|⪎Ќ'ۜ5:5NvٜtWrԱ7KNo8U~$]18biR)' hT$ AQ'c،X68.3D5wݧnXJ%(XWpLN5q=D@L(PX(D.u#4' 3;~c8r`7w[f$iWUP[Teʼn()< Oy++b(e䭔*X@ȁ dÁי`td͸K@z()xXhDrJNf|JFx aQ E$@ %X@ F#X"{hsѝ¸dbI7b=F"LO͎5ɋly3gvBKa`XfXHAc$uhf1jXyW)t9~0Om/=?uE0=Zj L0lXzz7ig+y(bv?:ʾWy@#LލR{zX1>)%"+] (4X_' VS/?"b&4'2z0 cgdzbǁwz&Qގ#̿Czx3g^~J=yP5+EP8£8PqP0= ͩ/? o{n:xz׈D%St"KW(?vH x82  NZ^5=-L !Rh}G[\p}j;۞V+J[AВ]m9kmV^'>h!.ڟ\5o_K/oLmy>{§[k~Y[=@1'eGڎ\?i;>yUdvo;][ƨmj65"7cTۙa}`6bކsj__j/.Sي¶-m1n,6oqءGd0/vϪ 4Ն}m㠷'6iӗamimn]Q xN[:~i঻E'^<74Ԇ2m`Io#%˼m7ggU{xڙ>5rɷp鿊=jC Lm$6{3omZź-8{iiĖpr Z ɒކh6Qr Zٕe<]XGGLFm X$;ՆfԆ[ՆsoAmMm{P{6Wjǝ@\{0Es9Z_3SV>`doo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "organic.h" #include #include #include "engine.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "Oscillator.h" #include "pixmap_button.h" #include "templates.h" #include "tooltip.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT organic_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Organic", QT_TRANSLATE_NOOP( "pluginBrowser", "Additive Synthesizer for organ-like sounds" ), "Andreas Brandmaier ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } QPixmap * organicInstrumentView::s_artwork = NULL; float * organicInstrument::s_harmonics = NULL; /*********************************************************************** * * class OrganicInstrument * * lmms - plugin * ***********************************************************************/ organicInstrument::organicInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &organic_plugin_descriptor ), m_modulationAlgo( Oscillator::SignalMix, Oscillator::SignalMix, Oscillator::SignalMix), m_fx1Model( 0.0f, 0.0f, 0.99f, 0.01f , this, tr( "Distortion" ) ), m_volModel( 100.0f, 0.0f, 200.0f, 1.0f, this, tr( "Volume" ) ) { m_numOscillators = 8; m_osc = new OscillatorObject*[ m_numOscillators ]; for (int i=0; i < m_numOscillators; i++) { m_osc[i] = new OscillatorObject( this, i ); m_osc[i]->m_numOscillators = m_numOscillators; // Connect events connect( &m_osc[i]->m_oscModel, SIGNAL( dataChanged() ), m_osc[i], SLOT ( oscButtonChanged() ) ); connect( &m_osc[i]->m_harmModel, SIGNAL( dataChanged() ), m_osc[i], SLOT( updateDetuning() ) ); connect( &m_osc[i]->m_volModel, SIGNAL( dataChanged() ), m_osc[i], SLOT( updateVolume() ) ); connect( &m_osc[i]->m_panModel, SIGNAL( dataChanged() ), m_osc[i], SLOT( updateVolume() ) ); connect( &m_osc[i]->m_detuneModel, SIGNAL( dataChanged() ), m_osc[i], SLOT( updateDetuning() ) ); m_osc[i]->updateVolume(); } /* m_osc[0]->m_harmonic = log2f( 0.5f ); // one octave below m_osc[1]->m_harmonic = log2f( 0.75f ); // a fifth below m_osc[2]->m_harmonic = log2f( 1.0f ); // base freq m_osc[3]->m_harmonic = log2f( 2.0f ); // first overtone m_osc[4]->m_harmonic = log2f( 3.0f ); // second overtone m_osc[5]->m_harmonic = log2f( 4.0f ); // . m_osc[6]->m_harmonic = log2f( 5.0f ); // . m_osc[7]->m_harmonic = log2f( 6.0f ); // .*/ if( s_harmonics == NULL ) { s_harmonics = new float[ NUM_HARMONICS ]; s_harmonics[0] = log2f( 0.5f ); s_harmonics[1] = log2f( 0.75f ); s_harmonics[2] = log2f( 1.0f ); s_harmonics[3] = log2f( 2.0f ); s_harmonics[4] = log2f( 3.0f ); s_harmonics[5] = log2f( 4.0f ); s_harmonics[6] = log2f( 5.0f ); s_harmonics[7] = log2f( 6.0f ); s_harmonics[8] = log2f( 7.0f ); s_harmonics[9] = log2f( 8.0f ); s_harmonics[10] = log2f( 9.0f ); s_harmonics[11] = log2f( 10.0f ); s_harmonics[12] = log2f( 11.0f ); s_harmonics[13] = log2f( 12.0f ); s_harmonics[14] = log2f( 13.0f ); s_harmonics[15] = log2f( 14.0f ); s_harmonics[16] = log2f( 15.0f ); s_harmonics[17] = log2f( 16.0f ); } for (int i=0; i < m_numOscillators; i++) { m_osc[i]->updateVolume(); m_osc[i]->updateDetuning(); } connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateAllDetuning() ) ); } organicInstrument::~organicInstrument() { delete[] m_osc; } void organicInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "num_osc", QString::number( m_numOscillators ) ); m_fx1Model.saveSettings( _doc, _this, "foldback" ); m_volModel.saveSettings( _doc, _this, "vol" ); for( int i = 0; i < m_numOscillators; ++i ) { QString is = QString::number( i ); m_osc[i]->m_volModel.saveSettings( _doc, _this, "vol" + is ); m_osc[i]->m_panModel.saveSettings( _doc, _this, "pan" + is ); m_osc[i]->m_harmModel.saveSettings( _doc, _this, "newharmonic" + is ); m_osc[i]->m_detuneModel.saveSettings( _doc, _this, "newdetune" + is ); m_osc[i]->m_oscModel.saveSettings( _doc, _this, "wavetype" + is ); } } void organicInstrument::loadSettings( const QDomElement & _this ) { // m_numOscillators = _this.attribute( "num_osc" ). // toInt(); for( int i = 0; i < m_numOscillators; ++i ) { QString is = QString::number( i ); m_osc[i]->m_volModel.loadSettings( _this, "vol" + is ); if( _this.hasAttribute( "detune" + is ) ) { m_osc[i]->m_detuneModel.setValue( _this.attribute( "detune" ).toInt() * 12 ); } else { m_osc[i]->m_detuneModel.loadSettings( _this, "newdetune" + is ); } m_osc[i]->m_panModel.loadSettings( _this, "pan" + is ); m_osc[i]->m_oscModel.loadSettings( _this, "wavetype" + is ); if( _this.hasAttribute( "newharmonic" + is ) ) { m_osc[i]->m_harmModel.loadSettings( _this, "newharmonic" + is ); } else { m_osc[i]->m_harmModel.setValue( static_cast( i ) ); } } m_volModel.loadSettings( _this, "vol" ); m_fx1Model.loadSettings( _this, "foldback" ); } QString organicInstrument::nodeName() const { return( organic_plugin_descriptor.name ); } void organicInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { Oscillator * oscs_l[m_numOscillators]; Oscillator * oscs_r[m_numOscillators]; for( int i = m_numOscillators - 1; i >= 0; --i ) { m_osc[i]->m_phaseOffsetLeft = rand() / ( RAND_MAX + 1.0f ); m_osc[i]->m_phaseOffsetRight = rand() / ( RAND_MAX + 1.0f ); // initialise ocillators if( i == m_numOscillators - 1 ) { // create left oscillator oscs_l[i] = new Oscillator( &m_osc[i]->m_waveShape, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningLeft, m_osc[i]->m_phaseOffsetLeft, m_osc[i]->m_volumeLeft ); // create right oscillator oscs_r[i] = new Oscillator( &m_osc[i]->m_waveShape, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningRight, m_osc[i]->m_phaseOffsetRight, m_osc[i]->m_volumeRight ); } else { // create left oscillator oscs_l[i] = new Oscillator( &m_osc[i]->m_waveShape, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningLeft, m_osc[i]->m_phaseOffsetLeft, m_osc[i]->m_volumeLeft, oscs_l[i + 1] ); // create right oscillator oscs_r[i] = new Oscillator( &m_osc[i]->m_waveShape, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningRight, m_osc[i]->m_phaseOffsetRight, m_osc[i]->m_volumeRight, oscs_r[i + 1] ); } } _n->m_pluginData = new oscPtr; static_cast( _n->m_pluginData )->oscLeft = oscs_l[0]; static_cast( _n->m_pluginData )->oscRight = oscs_r[0]; } Oscillator * osc_l = static_cast( _n->m_pluginData )->oscLeft; Oscillator * osc_r = static_cast( _n->m_pluginData)->oscRight; const fpp_t frames = _n->framesLeftForCurrentPeriod(); osc_l->update( _working_buffer, frames, 0 ); osc_r->update( _working_buffer, frames, 1 ); // -- fx section -- // fxKnob is [0;1] float t = m_fx1Model.value(); for (int i=0 ; i < frames ; i++) { _working_buffer[i][0] = waveshape( _working_buffer[i][0], t ) * m_volModel.value() / 100.0f; _working_buffer[i][1] = waveshape( _working_buffer[i][1], t ) * m_volModel.value() / 100.0f; } // -- -- instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void organicInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( static_cast( _n->m_pluginData )->oscLeft ); delete static_cast( static_cast( _n->m_pluginData )->oscRight ); delete static_cast( _n->m_pluginData ); } /*float inline organicInstrument::foldback(float in, float threshold) { if (in>threshold || in<-threshold) { in= fabs(fabs(fmod(in - threshold, threshold*4)) - threshold*2) - threshold; } return in; } */ float inline organicInstrument::waveshape(float in, float amount) { float k = 2.0f * amount / ( 1.0f - amount ); return( ( 1.0f + k ) * in / ( 1.0f + k * fabs( in ) ) ); } void organicInstrument::randomiseSettings() { for( int i = 0; i < m_numOscillators; i++ ) { m_osc[i]->m_volModel.setValue( intRand( 0, 100 ) ); m_osc[i]->m_detuneModel.setValue( intRand( -5, 5 ) ); m_osc[i]->m_panModel.setValue( 0 ); m_osc[i]->m_oscModel.setValue( intRand( 0, 5 ) ); } } void organicInstrument::updateAllDetuning() { for( int i = 0; i < m_numOscillators; ++i ) { m_osc[i]->updateDetuning(); } } int organicInstrument::intRand( int min, int max ) { // int randn = min+int((max-min)*rand()/(RAND_MAX + 1.0)); // cout << randn << endl; int randn = ( rand() % (max - min) ) + min; return( randn ); } PluginView * organicInstrument::instantiateView( QWidget * _parent ) { return( new organicInstrumentView( this, _parent ) ); } class organicKnob : public knob { public: organicKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 21, 21 ); } }; organicInstrumentView::organicInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ), m_oscKnobs( NULL ) { organicInstrument * oi = castModel(); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); // setup knob for FX1 m_fx1Knob = new organicKnob( this ); m_fx1Knob->move( 15, 201 ); m_fx1Knob->setFixedSize( 37, 47 ); m_fx1Knob->setHintText( tr( "Distortion:" ) + " ", QString() ); m_fx1Knob->setObjectName( "fx1Knob" ); m_fx1Knob->setWhatsThis( tr( "The distortion knob adds distortion to the output of the instrument. " ) ); // setup volume-knob m_volKnob = new organicKnob( this ); m_volKnob->setVolumeKnob( true ); m_volKnob->move( 60, 201 ); m_volKnob->setFixedSize( 37, 47 ); m_volKnob->setHintText( tr( "Volume:" ) + " ", "%" ); m_volKnob->setObjectName( "volKnob" ); m_volKnob->setWhatsThis( tr( "The volume knob controls the volume of the output of the instrument. " "It is cumulative with the instrument window's volume control. " ) ); // randomise m_randBtn = new pixmapButton( this, tr( "Randomise" ) ); m_randBtn->move( 148, 224 ); m_randBtn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "randomise_pressed" ) ); m_randBtn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "randomise" ) ); m_randBtn->setWhatsThis( tr( "The randomize button randomizes all knobs except the harmonics," "main volume and distortion knobs. ") ); connect( m_randBtn, SIGNAL ( clicked() ), oi, SLOT( randomiseSettings() ) ); if( s_artwork == NULL ) { s_artwork = new QPixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) ); } } organicInstrumentView::~organicInstrumentView() { delete[] m_oscKnobs; } void organicInstrumentView::modelChanged() { organicInstrument * oi = castModel(); const float y=91.0f; const float rowHeight = 26.0f; const float x=53.0f; const float colWidth = 24.0f; m_numOscillators = oi->m_numOscillators; m_fx1Knob->setModel( &oi->m_fx1Model ); m_volKnob->setModel( &oi->m_volModel ); if( m_oscKnobs != NULL ) { delete[] m_oscKnobs; } m_oscKnobs = new OscillatorKnobs[ m_numOscillators ]; // Create knobs, now that we know how many to make for( int i = 0; i < m_numOscillators; ++i ) { // setup harmonic knob knob * harmKnob = new organicKnob( this ); harmKnob->move( x + i * colWidth, y - rowHeight ); harmKnob->setObjectName( "harmKnob" ); connect( &oi->m_osc[i]->m_harmModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); // setup waveform-knob knob * oscKnob = new organicKnob( this ); oscKnob->move( x + i * colWidth, y ); connect( &oi->m_osc[i]->m_oscModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); oscKnob->setHintText( tr( "Osc %1 waveform:" ).arg( i + 1 ) + " ", QString() ); // setup volume-knob knob * volKnob = new knob( knobStyled, this ); volKnob->setVolumeKnob( true ); volKnob->move( x + i * colWidth, y + rowHeight*1 ); volKnob->setFixedSize( 21, 21 ); volKnob->setHintText( tr( "Osc %1 volume:" ).arg( i + 1 ) + " ", "%" ); // setup panning-knob knob * panKnob = new organicKnob( this ); panKnob->move( x + i * colWidth, y + rowHeight*2 ); panKnob->setHintText( tr("Osc %1 panning:").arg( i + 1 ) + " ", "" ); // setup knob for fine-detuning knob * detuneKnob = new organicKnob( this ); detuneKnob->move( x + i * colWidth, y + rowHeight*3 ); detuneKnob->setHintText( tr( "Osc %1 stereo detuning" ).arg( i + 1 ) + " ", " " + tr( "cents" ) ); m_oscKnobs[i] = OscillatorKnobs( harmKnob, volKnob, oscKnob, panKnob, detuneKnob ); // Attach to models m_oscKnobs[i].m_harmKnob->setModel( &oi->m_osc[i]->m_harmModel ); m_oscKnobs[i].m_volKnob->setModel( &oi->m_osc[i]->m_volModel ); m_oscKnobs[i].m_oscKnob->setModel( &oi->m_osc[i]->m_oscModel ); m_oscKnobs[i].m_panKnob->setModel( &oi->m_osc[i]->m_panModel ); m_oscKnobs[i].m_detuneKnob->setModel( &oi->m_osc[i]->m_detuneModel ); } updateKnobHint(); } void organicInstrumentView::updateKnobHint() { organicInstrument * oi = castModel(); for( int i = 0; i < m_numOscillators; ++i ) { const float harm = oi->m_osc[i]->m_harmModel.value(); const float wave = oi->m_osc[i]->m_oscModel.value(); m_oscKnobs[i].m_harmKnob->setHintText( tr( "Osc %1 harmonic:" ) + " ", " (" + HARMONIC_NAMES[ static_cast( harm ) ] + ")" ); m_oscKnobs[i].m_oscKnob->setHintText( tr( "Osc %1 waveform:" ) + " ", " (" + WAVEFORM_NAMES[ static_cast( wave ) ] + ")" ); } } OscillatorObject::OscillatorObject( Model * _parent, int _index ) : Model( _parent ), m_waveShape( Oscillator::SineWave, 0, Oscillator::NumWaveShapes-1, this ), m_oscModel( 0.0f, 0.0f, 5.0f, 1.0f, this, tr( "Osc %1 waveform" ).arg( _index + 1 ) ), m_harmModel( static_cast( _index ), 0.0f, 17.0f, 1.0f, this, tr( "Osc %1 harmonic" ).arg( _index + 1 ) ), m_volModel( 100.0f, 0.0f, 100.0f, 1.0f, this, tr( "Osc %1 volume" ).arg( _index + 1 ) ), m_panModel( DefaultPanning, PanningLeft, PanningRight, 1.0f, this, tr( "Osc %1 panning" ).arg( _index + 1 ) ), m_detuneModel( 0.0f, -1200.0f, 1200.0f, 1.0f, this, tr( "Osc %1 fine detuning left" ).arg( _index + 1 ) ) { } OscillatorObject::~OscillatorObject() { } void OscillatorObject::oscButtonChanged() { static Oscillator::WaveShapes shapes[] = { Oscillator::SineWave, Oscillator::SawWave, Oscillator::SquareWave, Oscillator::TriangleWave, Oscillator::MoogSawWave, Oscillator::ExponentialWave } ; m_waveShape.setValue( shapes[(int)roundf( m_oscModel.value() )] ); } void OscillatorObject::updateVolume() { m_volumeLeft = ( 1.0f - m_panModel.value() / (float)PanningRight ) * m_volModel.value() / m_numOscillators / 100.0f; m_volumeRight = ( 1.0f + m_panModel.value() / (float)PanningRight ) * m_volModel.value() / m_numOscillators / 100.0f; } void OscillatorObject::updateDetuning() { m_detuningLeft = powf( 2.0f, organicInstrument::s_harmonics[ static_cast( m_harmModel.value() ) ] + (float)m_detuneModel.value() * CENT ) / engine::mixer()->processingSampleRate(); m_detuningRight = powf( 2.0f, organicInstrument::s_harmonics[ static_cast( m_harmModel.value() ) ] - (float)m_detuneModel.value() * CENT ) / engine::mixer()->processingSampleRate(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new organicInstrument( static_cast( _data ) ) ); } } /* * some notes & ideas for the future of this plugin: * * - 32.692 Hz in the bass to 5919.85 Hz of treble in a Hammond organ * => implement harmonic foldback * m_osc[i].m_oscModel->setInitValue( 0.0f ); * - randomize preset */ #include "moc_organic.cxx" lmms-1.1.3/plugins/organic/organic.h000066400000000000000000000103751247673406200174030ustar00rootroot00000000000000/* * organic.h - additive synthesizer for organ-like sounds * * Copyright (c) 2006-2008 Andreas Brandmaier * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef ORGANIC_H #define ORGANIC_H #include #include "Instrument.h" #include "InstrumentView.h" #include "Oscillator.h" #include "AutomatableModel.h" class QPixmap; class knob; class NotePlayHandle; class pixmapButton; const int NUM_HARMONICS = 18; const QString HARMONIC_NAMES[NUM_HARMONICS] = { "Octave below", "Fifth below", "Fundamental", "2nd harmonic", "3rd harmonic", "4th harmonic", "5th harmonic", "6th harmonic", "7th harmonic", "8th harmonic", "9th harmonic", "10th harmonic", "11th harmonic", "12th harmonic", "13th harmonic", "14th harmonic", "15th harmonic", "16th harmonic" }; const QString WAVEFORM_NAMES[6] = { "Sine wave", "Triangle wave", "Saw wave", "Square wave", "Moog saw wave", "Exponential wave" }; const float CENT = 1.0f / 1200.0f; class OscillatorObject : public Model { Q_OBJECT private: int m_numOscillators; IntModel m_waveShape; FloatModel m_oscModel; FloatModel m_harmModel; FloatModel m_volModel; FloatModel m_panModel; FloatModel m_detuneModel; float m_volumeLeft; float m_volumeRight; // normalized detuning -> x/sampleRate float m_detuningLeft; float m_detuningRight; // normalized offset -> x/360 float m_phaseOffsetLeft; float m_phaseOffsetRight; OscillatorObject( Model * _parent, int _index ); virtual ~OscillatorObject(); friend class organicInstrument; friend class organicInstrumentView; private slots: void oscButtonChanged(); void updateVolume(); void updateDetuning(); } ; class organicInstrument : public Instrument { Q_OBJECT public: organicInstrument( InstrumentTrack * _instrument_track ); virtual ~organicInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; int intRand( int min, int max ); static float * s_harmonics; public slots: void randomiseSettings(); private: float inline waveshape(float in, float amount); // fast atan, fast rather than accurate inline float fastatan( float x ) { return (x / (1.0 + 0.28 * (x * x))); } int m_numOscillators; OscillatorObject ** m_osc; struct oscPtr { Oscillator * oscLeft; Oscillator * oscRight; } ; const IntModel m_modulationAlgo; FloatModel m_fx1Model; FloatModel m_volModel; virtual PluginView * instantiateView( QWidget * _parent ); private slots: void updateAllDetuning(); friend class organicInstrumentView; } ; class organicInstrumentView : public InstrumentView { Q_OBJECT public: organicInstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~organicInstrumentView(); private: virtual void modelChanged(); struct OscillatorKnobs { OscillatorKnobs( knob * h, knob * v, knob * o, knob * p, knob * dt ) : m_harmKnob( h ), m_volKnob( v ), m_oscKnob( o ), m_panKnob( p ), m_detuneKnob( dt ) { } OscillatorKnobs() { } knob * m_harmKnob; knob * m_volKnob; knob * m_oscKnob; knob * m_panKnob; knob * m_detuneKnob; } ; OscillatorKnobs * m_oscKnobs; knob * m_fx1Knob; knob * m_volKnob; pixmapButton * m_randBtn; int m_numOscillators; static QPixmap * s_artwork; protected slots: void updateKnobHint(); }; #endif lmms-1.1.3/plugins/organic/randomise.png000066400000000000000000000040461247673406200202750ustar00rootroot00000000000000PNG  IHDR]tsqbKGD" pHYs  tIME;&aIDATXOS?w_UQR4P@'1pbk, "PEs~ػ-㹿8M̬Ykw=fjh ܻwh Zkv!f>+S| 2XB'Q{4-Iϖ5M}yh JӧO]MDk˲Fܴv$ "fmµ'D;o OMzw+=Tec~"N{MگBƀIPRJYˮ}<|HD8T*evvvPH/a]Gc7@A 4P.-4MNFxz!B{)B)PGT*cܕhѸ/D}GX,.,pIN>'xuh?Ӣ4MoG;&M7iy`h4RJx5Pg0kNP((\uJh>2 R lJB"̙3Nt5bH!J+++0j% ¾FT*ikkcll H)9vRJ?<>|ѣbhG9H%@W )%Rʖi?Ѓ/`eep8`)%$I<H mۗ̅a,ˢ\.ch4JTBJIXAG"}FggyRJ hooo髦=A;ϩjLLLRRT#˾lqRWB=э[B\raR߳K4|k#>E]J0Thw)j)*\Uo^HQM"M,B{(=ysssy]JwW+G\ىDx-&_I*qQո ﺤ7w3ie?yC]ԬuordfE)ŧOD"j\)+pFG7b5~L&!L#UКǎ`&L^vIRq7F\Z~=[R , iK?KJ rJJ4/9lisi0T7ope" rM!V]JI8… T*=}J.M?a yd6FFF8u=_K%y׳}ST<_ ffgafvRL0`xx۶077GWW'NpS>6.fүww[+b01恹_eYB!Bs@ <j5 .jeZ᠔\kM6uKPP(`YWEZyTտ/[2:?i.oZIENDB`lmms-1.1.3/plugins/organic/randomise_pressed.png000066400000000000000000000052251247673406200220220ustar00rootroot00000000000000PNG  IHDR]tsqbKGD" pHYs  tIMEQAK "IDATXÍsueUoh!8%Z"Ʋr8G>9|0Ò,Q$jA]U ơtUwf%E_PDN>K:J 8"F$-9`Gjg\Q Y"L&|gH)1L1"sAZ/E=\R{j4^Fr}2M3R=WP;]EI 8x "FgmȝqWĥEhE_nuN.U "?XEQ rSv~jPbalADB>*KFPC QrdmíBƄddje t2RÜQ $*^r4CDB78\!xq }ѡCUTd"VEfBCS7[BS}o2"c0%٭ fZiL':$) 6dn P 5i)6OHK%^3B\o >J = GH h}"-#eԔ|E #AEqwBbfiZI d`( j'=VaJyۓ@c 6_|#|1xE"rOB zƧKNbl~PV1/{?NI"aA~ ˲1!6濋VE+!Fv?'<-^dʱL+M5T^Mlac"RH:Đ̃I0ox{ p!#LWq7fak6<=xm2yvt \~!kps%9O""D3bXBA@ );:Kw=3R1c0pq8bb $aprrưNi9R޽;bֽ\Ÿ]bJ$mS++7nj/< 830ǗÅ),2>}'4*)HBs ֡Jzezq/>_WWw &<9> 1rg$a'͉+%EIf Sͽԡ( R9NpI jM1n.aw,9&M|,pOo HjPJ<8_6,A2Y__Xv.#2D '?H&]$ˤ6Ϙg_2 Yl&N{ʸs1tZ=*R"Z~7pY֮dm5Wa߿b.YI3b3&}'__cHH1QDXUu9!Ɔ^DXQjh@rx4\U?P}Rr|t >ţ void Basic_Gb_Apu::reset() { apu.reset(); } void Basic_Gb_Apu::treble_eq( const blip_eq_t& eq ) { apu.treble_eq( eq ); } void Basic_Gb_Apu::bass_freq( int bf ) { buf.bass_freq( bf ); } // <--- lmms-1.1.3/plugins/papu/Basic_Gb_Apu.h000066400000000000000000000022131247673406200175320ustar00rootroot00000000000000 // Simplified Nintendo Game Boy PAPU sound chip emulator // Gb_Snd_Emu 0.1.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license. #ifndef BASIC_GB_APU_H #define BASIC_GB_APU_H #include "gb_apu/Gb_Apu.h" #include "gb_apu/Multi_Buffer.h" class Basic_Gb_Apu { public: Basic_Gb_Apu(); ~Basic_Gb_Apu(); // Set output sample rate blargg_err_t set_sample_rate( long rate ); // Pass reads and writes in the range 0xff10-0xff3f void write_register( gb_addr_t, int data ); int read_register( gb_addr_t ); // End a 1/60 sound frame and add samples to buffer void end_frame(); // Samples are generated in stereo, left first. Sample counts are always // a multiple of 2. // Number of samples in buffer long samples_avail() const; // Read at most 'count' samples out of buffer and return number actually read typedef blip_sample_t sample_t; long read_samples( sample_t* out, long count ); //added by 589 ---> void reset(); void treble_eq( const blip_eq_t& eq ); void bass_freq( int bf ); //<--- private: Gb_Apu apu; Stereo_Buffer buf; blip_time_t time; // faked CPU timing blip_time_t clock() { return time += 4; } }; #endif lmms-1.1.3/plugins/papu/CMakeLists.txt000066400000000000000000000006431247673406200176700ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(papu papu_instrument.cpp papu_instrument.h Basic_Gb_Apu.cpp Basic_Gb_Apu.h gb_apu/Gb_Oscs.cpp gb_apu/Gb_Apu.h gb_apu/Blip_Buffer.cpp gb_apu/Gb_Apu.cpp gb_apu/Gb_Oscs.h gb_apu/blargg_common.h gb_apu/Blip_Buffer.h gb_apu/Multi_Buffer.cpp gb_apu/blargg_source.h gb_apu/Blip_Synth.h gb_apu/Multi_Buffer.h MOCFILES papu_instrument.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/papu/artwork.png000066400000000000000000002000051247673406200173210ustar00rootroot00000000000000PNG  IHDRjsRGB pHYs  tIME !2_tEXtCommentCreated with GIMPWbKGD`IDATxY%q&ˉUvUwWw 4Ab$ rH3 GMLAf2IÈ/I `@Vz}f%"qw=fznK˺F_O:̿{=7ۇιCDQUD$"?fff̌hfjf?A1~,xDQc"`w;48駹0-'^hfDH"q0DZ!6|y%+#N`Ig83q](yfk`fι'M͓$iߡhqUUi&C~VX38oEZJ"_Ij>SL`vj XX3KTDNPn#ff7T5H?P ?sZ-?g_D+k 1!# gXf wΉ",lChcW$)hYxBz5o׮=F|¦jnVO72!;**1 n 4*r_[&zaBtFv9UUfZ4xQjZ=E#}=f.QUrxvDj̢*A[ L6niy~1ҨFJ)|҃7I \s;~+Җ?I՜.|oOƔ69@y[aKcfE}š8@D,U#7pq5¤Q%Vl1Ҽ(@PC1US8 Qijp4CU]["Jm4J<i[N 0'"sB`DAe~ƭ@Q(ATc^_AMqD7vs[!!"#AT_\جt4Fa؜wooB)"KKr(Oմp 7b ;Z\!I8;ЖRD/"eY_:C`joa45ۚ5;^i%#xL),EuX=Vk ^bfT,KɓGiQwV#Q43PȱF,xW̕Gil!mۺV[GhK^POsc^pa Jsh`7E9jiDYY/v2N<M ,0 >?[w3 [:.i,U 5_QND@Xk|X +a ,!oTdh6Y˦vs/fD(md9|޼$iDhHTT5"rf!3"N:n{ [>(|vkLw%² n."ӂ\V?R砥l _'ò1P'- jx[v۶4I4iawx?~O۟n9gu#;0qcK&IQ%$@TQC_~!6'Nʉׯ}+"7Xn) '"EOzj^nֲ}-'!6: xkc)8UٹOwB62]Z&rOx$Yp;qbOzC hx,#'~ G%I2w" *Zʂm+{ ODvˆkgDXt&EK;E0'Y ء}MeעaX޺s8< X@{F Sw_vjA۷m[wo}4|1ec&FiM8cq5`WsF잴 pP蜝XP3C-H~cXBꨙ6{H7qĂIRA\ NF[vֆ]⢄̛ a!%94 ̉x #C1Pp TF"O:*Gm1 wÊdm4p{Ci 4M@L|N0V-08BV r,ڝm|[]d-Cˠ́4Ռ%I2A\?/_VSf!(F{ fEQW~ ?R,n'IΞM=z4 ͭN3N&{^L'yօ$p?LݞW )r.Kw˨+N'?1> CT5v:p0~_|3/=wگÂ4I TdLjIrt^/M;+g, 觻`~&Om`_FˉpÊHFV"#u%j1̇YYC-19}'a"7q̙d"f;?? by{?~<)S v[oo=%˯/~,˵w}ڵsu#}|S엞pAH}K rke.]ׯL&?8"|ϝ;ks܉oEg~W^91/~w~… _ܹs/қoy>}_`|pϴ l yrW?_nlO\i%h+/܁a>N/eZ +}?O'&yb=s~{4 g^yF} H2Dn6~Nz<<,{,tCrөx<_W>g.N'e'sIկ~ED7/>۷o;.^3>ѭ[Μ9 W_g½r6޲2}pCRgnX}w4:%Q{jsN g5s|]1͆"—pvcвAiGO=]!i_4(H6=86#|Z-aXV( 6Ź! B> tgvIYY]Ί޾eqٳfGGGJYˈ\ ''`0z'}m_xᙛ7o_o=Ξ= \p[2.9|𘁡͐^q|Ix3gtf~tyN#LXgaphIvx lzxf[km~br5p;(?x配Dߓoߙ=zTf0Nrh,8S 'MX@GiqEJ0跕-4H 5hLbJ[d-Y{c'!Ն@?Vpsss28^x_Y5;w'?xb|[:uT;}[]kWWW7qns>zE3{;3ٳg?~|ƍ˗/;ι˗.uJwƻ|筷>aa2f+WFGGGܸ{k`}scmc}2,^Ikϟ?}zG~l2PO`41'_}uu߾5euНo%:htBNw.;\1I-R}0S\J( Lttx B=={sROuֿ3~z\y(I;kz[IH|\'9$A5AL5JiG-(QfӢ,;rj*nsN]Ҵ$$2i)^t:pmM3ìfuD\YYy]?>˲p魭lvt^zi0۷˲$nnn"`0z?7= u彴P0 ;I-J'ȴ ygFc=* Kt2vh+l@뫨a4n{k5_>cz%ݵXBK:r|;1;g&ˉ I}!uL&a_,E渁݄Ym{n?2¸ ~O,B⑶r;_$/^} wy2i{yAD{{{?4yW򕯬oo:uᅬ;gv~6WV\kNe`{{{O$nomƽAD.9-+r"A&0#f%eMDCYs3tn $uam ,m*3g/SPKz1uria/Џz"R$wSO- sA<ڹ|ǃ1Ғ._-g ۰f )SӇ&EU"%n'{D%&I${{{7o8i97/]4s&_rԩ3NhTEizܸzoNoy2}k?x ˲g|ҥ4Mg٣G}^xܹsgf.\:=?f͔P&)*&{z$& bN%Հ2'q̜ tQ3N:Y}p]K1+6snno ^y3/_w{;?3+_\o89uvhx$eHXXɶtfZ> N|8t!c({;{ S`!z{,q\uIYm!DI4Oַ_&bhhzcr 2svVWד?ȏ0M$lx<~7dr^//˽^ڵkht:X(2dtC,.Iz: P29ssi:]a4/:h.N`i3mF)}xyv6K [>=\kegsʃNOmOe(,3Y>_$rѩm7&C.!|Jӓ4'm2fL<=>=s̟//o߾soxg}//( .t]DwW^yeuuOO~ݻ[[[gΜ988v[iE${ ) >]N{^UXKA.ՃQ_^_E,묮eC_Fo^{|Gl^fn7f~;̹?[loɤ~|n+$I~晭n)wwk0fiQP~4"X6v(C3YWd $u.䎑fQ?+&:zZƚ8q>A?vw>ޚ}onNw'|D?{tv+a-vCwqq-HZi a_$Tv:%f9ͺ((iSB}ěRDD5o `"{jWT,0_r#Qar"bDuٙcsp\_eY7~}DFXMEť˗}{%,/% {{o.37Ξ>Uh/xfw}M&޹yKW휦}Goև|x0:Z_:GGݿvigIL#ofUĆNLIGc2 |z8%ydC {{w0uwg3a:+Fᓛ_A>zwg_}tß߿=IV_^=}t.iqN1~f%brBPX UN@Y2UL59صl0"x QK\bAE%(jFƔ"! X,x`@@ mI'ԔW9*%޻f?{6#RIUEٽoggMbАx|0AT, o%NY|{wJE^Tw~Ogid<:)Mtr0H`A45r@M5˶zzIYrOnt$?Sr)ˡx R#E3QǏ=/f]vFF.^] :U7z9FdKtU.d^XPsk_}o; GdTg3 IͬƠZ}VǍm5,vV+6΋,+(n*?DQC)TeZMU2`AQMb>*x[gLő13ոj S3B PSED$,K,,8R3l)l2j8R&L P{f.f10(;h`j"0,S3` u%(V;DFVXĔECPh"D)A`Df*L 4I &=%-GKN%s_fhfb LnU *ڣL =!B+߯hs+*j d-+ljPZ]ϓZOS{[56aBmY% fFJe$  !9RG@dzc&p (!T$'@vdPef``Fhֈ%`@œK=ļΉYEFGjV)u"0"8FD(U+4 !7$`soŹa魙 p| , Y 41e@گ$S|WQp/U} <ǭC0Vn("fhD9cd D@\Fj D3SvĈBPv9U5nX.:rBB2Z.',!4j 22DA Y3\kvB)s*Ds!DY`f'&(b ʄv.*ղY`t !P50@C45V:݉0cQn'f<8Y;{~Tعp|p8e`ah&FLщ ** ELlvO q9S<5Mo`ig $P|C5!j{R&ndf7UBo'$x^A4j7&څU-fG) jeiL!X3Zq80+#5XaG N.fX QLUvJ-Z*AU{L#FSQ@Ѭ)k0Z>fbMė}y_|~åZP<Xnܗ (b dVd14C0&hZW%DCEue-+sǹO 3-M)Z#u#Qu7j ıxW0oX]L Ebat[Q<* XVcJ°h"e`瘓xzX,QbzXWyU40 O!"a\F4"%&O@ D31R5BX0-LR%hDDE *"#*"C՚Eigب;ԾΙ"8g~߿}hկdx5( DѢZI1RtaW"MH12͂LhMO3VR ʱDF{b ~oԏjҩrH2EIe$m|us-;Bzćj6 DR43 m*F(;AD#3PF`S3VNs*ͫlǿ#?J;vD(' &&Dm._ D`DDfpf q2T!IfV MSELMDg98GT G}޸wkNN?l22H @V)> ! AiBM+nND}Jܪ+Q1>"dt(LԚ&/VlʞUMiWϚ: c%` YBTVe R t)Z[ YPر=G3!ؼE"(Sż55Ze1|o qЄL(SIlf4HAՈӪ $!5g;eFy;Bp2zxNz1yaA>AU]*+[ UT *1z4_G%&-gf]3injKDbh5Zhjخ7ݳN*F?M (S+`N!`j RxsWa UЪ\EjWB4@$@BT:<mwc*Q#ƊX1R}3( jĊDD9DPL\􈐈6PEBfv0Z3,w.u{0¼:^7o3V?(Ma/$IV@FsHq;[<R *]7֦U$`R-HX8G~-rO*T#i]:/~Vz/1ڶ-]9ed!4$NLϭf#~ QMW#3Ph@d3@B0RX-樁dǕ 7e7#j %֡ cQOq$D*`t^G.L O`f1o@LJ!C ABQJai警!{n IAUjg&o懓Bg;wnX,qKT9steATLBA Dh"qͱ\Z_K%سD[cGQE'j">B#K@c,T^@GsLK PʲDh"%*l@Ui8,*w&Bٱ!ճD5'$Cl`L&@L:4FkbQAj䂐!#!VM3)8H oAUz$E%R@HECnmow^ f"{.RQnY|;T;W:oM݃%sϨ7B)^aKv  !I),TF A̐05ߦ 4*A;j.lJ˚ds p1.@4z22FԟXU飂0@"f*}U4[cͤ08Zc4((K=^AUڟ9IӢLP<hVV>&=f"&$,,LbJ+%f:At]ǒ@=#F:0Y3gWm۾wWݗQ<LJ"b 'K)#vH\߭Ei0 UD̥NT$q@kU㩻 ڷ1GxCv e+ZY6֤'j1/PtdDf5 /TAH:TC"ؠM5j UA{&f/Rl|by)2oZor*AUgR04BuCb^QUNQTy$)FGsdgU_~5fK$I8pM=n<Ȇj `Z"9=ss* pãi-Añ/ȃ/q̗MA Ȉv(14ɈŃS&T%&^AD\h*Ye]3#XP;Jo䊘E1< ƺIG|ޢzQrly BdيKV5"@ f#cDJ'D2=u*Dw4-[iBctܜ `ZOcAELOPA ҌIieT[/^ }+ՓluxDaT}*@BU RBiq+*:Ϟ!>EHjY""D+ݼXXYs.Y$K4ɨBfY}iu?vOc%0 KPTVE`OfڼAl`J44vEMN)$x.@6몞X`*˙^Tg+@%l@h]Ω1c&1 4d 0vs)+I;!VW`3z%աPTJ@,UlG5`4b)*B 1:R`TS`J*0ߐ PL .Qx;NyM`&&.efZ{Y PIDǐ h.! &FK%ʥt|l.g@9LRdg * 6]L9S"ȲtM3"suacX30şUMHs"ձ&gnjJ`Πpi^r*U^SPb>boxVQyVa0͈ס>?$¯|9ćXubu 3we$x+˲,CY!xHKAeB:I0SIȄI݆  Yf&\ ȱ#b40ĢPT!&[C3qa"r `Zo՜( T~A0֌%e*2X`hQr*HQAx|eI.uiB)9G:OXJ`Z0anBiP `X++Y$)U(JwP@eds&G@AՙqZ<<&Y(jࢢhDn5UTZMSfYE#Pt#BUWD.ЪDcxً=+V2ju^33#SsxV4 !/(JptmB!eP:~H@͋j81`t..04v'T乧*$M61*1R6MȡKb,VLh%Iȝn8l{ѡs.H#(ˮ`\=JBܟY*f I( ><43܌Z8aXSz {BAeo2&d44jS.Z#Zz M @UԠdZL P#U|Y8]^g?j; s7؀q(aΠG_>xܾ]ݬ c#Q&nm}׼Kmw[ũϝk`}cV&c/j1뽝smnyNaۯVw)P絡%;4kF٣-Dt[CJ"{ؚF zYJ%HoJ,$m ws:[FI,m u9ajhZTR&3ѩ>'( .3v?߹`xbծngDJ|?ek2QYyfXCmܖ[Sch>aD7TE-[\0eX@3rfXfb5Pf66Ns[h9.P~Ifz#̱51T9ӿyMGV٨3eaVL2 ]-|K&naC;+yo=֔;Κ"6Ih2kk[R*AsJ,E4?,`Sqd(+GⰓf$U3)ˠnj͘7)/{ocבq}K-'\ܵP*j!*zu4l=ŀ 00`x`n]=RTRR\DKI2/w"TuIO%(RޏEѻ|Bq!Iu*1n7ܮ}k^^s>/S @ ~p@J|.6W ~&,WY$Lgmi dbLPo7I uGA!8)4%=%uA?0F=v"Ȩ Z<3tZ`!f,rRm_Dpy$"̐ FBzv-G5~ $I޴JņXɛ ύ`z7rBifNcv#>o 7oNxokk;߫!AyJ?1O 2!ѭ+ p kiuㅧ;hFvL˿sZԚޤH l{>sx~_ Ʉ$k##3Z q B)$sxA#hg@RHyŠ|5C1tHRRlΨ$E * W,5]gaƟ: &"2B06. ݔG-a u~$R6{d~Ag\(tk[f3? GV+ N\P/W2vapoVn _em:^HBK*Pِ\”?hE@"x)e~ֆ=wҬW<3fZF[;s1(w_)I  ?@U~#?FDnVnYkP3-̰t3|rbJgs&@7ֶ*+%~34MVlϦԄt^b׍*/ЭqX2]ivHoh&b CaA3|e;qcaqK ңKg+etG$QHJQ ىNb{r˫;ѱ [汿ɠ"mfl]3B$jaf]4Lڧxw^CHA. asq\"S;LXG2DEXR1Ϟ$R p`BvEk|d]]LdS!J@R n؝Ďom1b탶 o [K4Ȅuvst}1٨RpJՇ^{Y-0xdBI70oSed۶KdKLi|%'fDF@̔N=c\G6=v ^~ uDE __+Bؖ{{͔-| FXK)C$RHO5Ð1Dsڃ_n37U^ͫ˶]g̋Y̳oS{{#OM *dӛ_^,]ו6~%cqI +6g {*^?y/ 6GaIOA~%ѩY͍=LٍѓOKeZF!VD\0?x0sitl5ϕWu]΂nU@jF? V$FĉxixX8 I;Q 4@zBQ.ù1@22Cg=kNz'ǞÉNsIJ[B$j2QgW+a2Qi4j"DmmOVm^#+Oәkl°LA.9r"!%@ڬfh~s r|S?0{/@Čԧ? Ʒ?N mFEu!?yW;!_KfmKcGRy]ʠ$ ^%$B]ems+,+z*FM: L\xBJQHd0)H)DIj[pw6YEi wf 2_ީdO.CB=Gr {x ?j3Bf4*H2T6O6y`l`R.5ꂳiR <N7c&sZOW\g*Ə:aZWG<ׅ4L ,3?N4:P8!Z!)f߯gwF̛Ɇ=`Oܛ{/Uw sS8FRH%CesPhsk,m4 k] ǶjAH4 ÌɄlo3t|bp`s\sP%K~Cgi~LocLf)!jʦ,oPclV^3N}͞^ "P&c OWN̿,vhrś7sو."#V^ft\lf3C sW<@O[7&{/m?b8=_~ P>2_lV}W 1t Z d,_i="e,QJt5Mf4u!pxLgD,UJd X,Sذ^Dӫ KH-ãa.5)7-GWaL9̎IW7ܪ6,&Mupx\qDŽ*%3`ei%E.Htv Y>X1ЕF@r$ TQn8\h|_L>Kio )t džzriqCj(aREMHDr҆_}OG^_r @tksFqO]K-$֍[٧'7XskGDµZZ*N( ڛyF43?hf&tnw aPR^l }N9q9-lmNVMȁҞ|ff&#=E@ոՓJef߭T*a!hQ(6qM#Ƌ_.{tǿru\ҁۗqo_ԋLNla撌[T*;=ݳ'?|h2P;6B Kwȼ}ԟЭ'1nK-,_dfc#5 y 9.~P8߱cAt=DUX߿[<̃ZIK5hW,̥_r峂Às_fl_ k7ѪVGRXkfV+q18MHT w^bL0MSyKv>F߄%uFF.&\. ~Ŀ~v}؏7oV~n:42o  RlO%>(Ǥ.L9cyK%$fq/v̓]c^U33i*_؍DUԡf:լn^[+lnllTCE%HPE%+f%Ir#3H ۰OUZi~^uɡn@mOhdQ35C=o{/!.go4yqjf Gv!QU5wyi흭bOOA.?NÈjd 0"ukJ+(M>/j_^*W|pi~ǟ]vc#V&|<14l%ݗҚ~4uͥM Z[G3si6!$*$Ur\)b 3| b*5+QRuܿ&$1Ŷ{Y:0; }2hfS'W6wf`ɤQ훬NYI 8Z)8U{53t&IRn<,mV;͍hfjǟ-}7Uir[*^Ua'YC^UvQ*9 Rx&Iuc|5˱ ƩZ! ѹBd}CGtFYT0%8&<#@z4k[Sq8j$ H㛫dem4DQi*ZsGE_1.$y@YsDd_5/>C$ڃopC-@X0Y{8Ҕpj,m6o0Xkvݽ#D :*D!+ӿJI#ZhJ&4ҍi«[Y6 Qל{zE{'czPII!FJ&~8col-E d@ ,Wm m?ٮS_{.r4X'X:ʈYv̲;)lvթ1fuөf9M ןYm 1O#PhŽW 5%H;D! w df @4n5ӭHJ3 0҈ J,qJi~EMB0"S,pOӴdڰI2ɤd\L2ƥġ5n}`8KNGC`M 5A/@S(=Yd6Kf9(jwhfX E3dKdHHfg(.b3;AJ?k%=H2/* +-frq~_L"L02*$B<U ť|gX̬Vep˚4ꈨ}h%JH`!It$I!<)SGs%HRLoG阞6jr G[w12 a R]5l6 { ՕLzZCam0} ͙FO>=vHSJwc/43>g&/6@TQ$?|c6PmZMq̍P!$ $@mYr"bVaGOcdž?X^'ƷqȢ3@M`nfWRk g/>dgczE=D5,[řIT'TE 雌a UR;ċJW:0fLr55$MUm1 jM(o:x*0{ soX0$`sod<;{$JʀAުéqϙ1n@Vztw̢2 P6ƶ YbK_2,O Ҝn{pwщzr]rˈq; SƬ繒"d#*܃ onVoݟik?9J鼹t6^^ܻ/0k|ArXڛV{&!"yBdj3 ntjLǒ&<{N+RщG[l1hfg&.CWV$*c~3\}ofv?t_z5LdܵLVo197=WBr14d)&-F8;rkMO?Ndrν\IG_ C8x*=;K{sc']Qw`m_~A4װ&;:YX93S pf dK)}Odv?,0o_]izZ"Jqrf1ec/hAjL!Ʊ\{ V)S.6L4$%% @9cxR"ڽ_(2A2"%8w6f_So NgL"`UQ>=㏿h=\˔P0AP! 543֐B3UDF]C BHŧ1rfB)`px壷gKsDs]GR6LdFqhV \/2]C]6/l.9DBձ42  9~jS.i}L z t??%ty'㏜4տLTH "#M3B>  c.Llï}L"<4w͵mǮ$SZ*L09a C~plKˍ=o{I nd`]/. 7dڶz4Em`o^y%kR;)L&:)a.m>G.,TBe@vB7e/$l/IDs8~I`lT&Sjz܅FUppnb֑oIm7͊6Ik[+v|ꉎ?l"Ж>M!Bz@N]~o8v臕t)HyB0 @Po[6ѓK)+pOkmn=v&O'_d'OTc^Q](o&x1xuRg5 RDj`({A@ K )lH0 BuO#bkCGtf~#U_\zpf6z"lTK;^dݰ46;|HرSv)f4@8r =MfΝUknLOx0RH+CDH1W&NCۿ_nV f3)>G ]=|&֗~WSS40 Q`3)0[zD9|tjҦ([sffڝvwlc,|+~yN寧4'_Drh4$ uOnkVqgJEiBjLFGG0c @SJC1=d*jZVKkfm]7i ?93FBX=VJff4a@l$3ꡩ©'5w H9u^G&rmT͊nrW&sRJ\|[5m'!+6, 0oB1N)UMsx{.D] 9M4C@`'MNi!yf[H1/T{+_4WBk6&dHy&GBFşoLmbfYu3 Mr OQ*WN5`F)(śeˮq['LjfpCRIu!C F!313`96o-vaΌf:C6dJ#!Af0xDU7WDV t0[+o$݃OCELA5$bJk;e"֘v {kg뙾Z_Rv͖0C$zqM7/ߚP?}~w}^?ҖUt_=9=^Q{2 ͇o ="X_]W(r7Us/of Q` ֎zإ6F]f4@AJ d #FH`p֕KVzU٥it(* ]3alGǘ怒JD^@s7jf}N*Gd3–ir6}zyξ^gk96393ZtO"I(x+4,+i\hym#PXKTOe}k[4AF?1?~ŸmO4pYsucY?@X>RD ,8&9W._ξO1$)a eTthصs'O j"!Ԋ8wľsf'C @DXkQZ(b @X5S IPa_"lkU8rn2 sPk!3!8j]0"@O-">jFg 80̉Xei $BBPh[JzոXFvkhF&W}c`ieF'+̨Ί l?{ 7lrgVvX5?GO<RˣG%,zv"X:3G=بm^U)U_FucwVkQ$*u3EJ!V{?m&EKƭ'wt~QK83GUw e'Dg7+erO.mQ@n4m'ѿZb0`'spCK7׽zV;O~Y^|\Ѧ|y1dR+k1`R /tصՍsզvyBB_|' P8/o'N 荦6t:~~a9 xdVU}w^dT0M%elBi"ur"@PZQ3 qHĬ%`sZ/ͫG-ȅv=>a{`z49)RFs;al8 XWQ2>efuA^ah(Uge^  w;dD9xz{+pVur3P|m$ SI2|%+ԫc3ݽF;lYMt Cz6UǭJ"fv,-Vem Գ={ 6LG`@3=IѺ3K&i/*L0ӱUc=ZQA`R2"8gʟ ggbX.Ho-`w[@fxCnבkni_\~텼ZEO{W|QeKw硯ZU\r=× ?7xhy`4iW\߶9),"&ѫ3C'ШX%#¢8S&M.Ԛ43¡N `v;va#Qox=ԹG@“}}p&{=ы-֒@*"!@R_~uwwxz0<80&zV{pT%N=шTGpX-boQŇݞ:qLO>$]#1dexDw~~3߿N6;mv<;1[ ֮H2Ə?2~t+UaH]eͬ}L|}~3l&gS #3Mt/ߚ|?9 qS/hɩ0R9%E`hq_H܃ @%$;MuD2yr%' '"h"EcHOtfx7ް= 0 -7mMt0{\\~FpRJ~a-/pw_BxJif33mfrAHJDw"@_z %?sJk9uB#rsTkq?30#pXlgi!n3:Uxy' v>! cl@VGɵܓ!(`1v+tGuOwKuAbcR>-3ݭQHF42MW8 -q@qwOHJŽ/ %@߇Ր$ dDD,+!j)md{~ȣenF== v;e061&tjڦ(o`cvyo33';YSno9y"yТl#dr"{Atmmc3)ǿfFܒFL1%y,fLdYr~@"1uR0Hz(h2#_ Tr Hu}$@['I"h](P @Y0nۢB}a)MrA'" R2pM"HZ ֢MP70lE10d S|)a,ADK @@D +A"=U-â~ ac#z! L%C$r1w5`cruw7PrҺ5%)/C d1xxwfW/rv}_ <^62@o$M@$)ޛu=TDŽ vI\P '99]MɤnGĭ)!@Dj\Q5 }:S@F]ct 2F'ӥA`i,@`D?S u&D`HDmxI2 xQ:"Qm=b#; {*1,* ,C2K2_iܺZLB=x81"J)$R&3sL}涢^:Cd $θoe扐j Ε02e?(6P'"!\eK X[)SgD\?ٌc($Hh@`4WCPk:NҀVD42)䬲`JImӣ-qliu XA])z D;y:@("*oRxH'[%άdžnUXk2 U|Q* v@"$TSND<4uFD[!3a"Lq4T?$5iJ.ɘYˠLoqYfeU *O`<вy%DeVe+7p]GbKu4L)b/ҁ=I  Q F~wK?XT#W^woH_!Kzgf^>QI͟ѳ) .C$9>C$' 2\D֥`=WFRl[6d_Y(;$$Ɉ+*\j)EͥU*ʗ `O@P j꽈_o0,Ϲ1eǠeXSX/?T&LUOZX +=P?/|r FAֵ^ gzy}Yx$g̴'uvy6L$% %sW;TOPۊܲV^!3fZ\ϰD͠| YA)GLum]1|B@"b 3E+* DCɂ /?B r` -.^͍=LͱS"ۣfuT+X(sza?۩9lHB$ !)* /%+6~כcGD atDњ `oȩFњ a&5Qd5KF)([N-N^B:f!\kABeȒh(""\W[#`rd:e ~AALJek Xdꪕ,)0A28O6:060U)wuY4M)z'19vnb3~wzͷۮG>(ȯH@0}5Sc!~znSǧ `O4}X|ͤ-l"*BUT{C]!~rNap)@"~ _hwrQuAWa]o4fzhV|tSL0SMtjvSh߃;;Tճ}&8.ߣa'[ys1 h8""9 I0nUeNǥo83t;^0Z@?KS'¥\f]ؑi!D@xѱj!4 |*"˿r~ W V8& (6HiYlt {2ӝJۖrB@$mv*/xGh/披³\t}a~khckqdI(,BD % Xg=1pBgwvdoI"_]/Z?̕L>7|Hݺ^[KITG !l5߰^~ƿ|* ?=mt8F]d}}py90MSxXK‰n4fn]4^i%ƠR0djk蟄#-QG,}jGw/ m^ſQjﲃb0\;?'֓ ]Ώf&"Տ>˖~(?'z{6' 1יtfpqCzZ6ȠP. z8xǟ\ZPRT PC"-3!B 96{a%QK{?c|d=Y'.ߖ_ P2b,+7ͳOO,-no׎<nO;[{vckʏm{~{?l"\6=:giLkKtٮ>ί.ƭT*3==7nR1 C hOPd|V7=</~yWs1 /mW=h7$@sz2'^H;,&I\q+Je{$I*^"ƭ^WFDY=Ι"!C) sy 61.% *e*(=F\x=kEƘeYTi sz,Y~kg dG;33 hݭsfeY\ǘQ9w^_)LJG9yyo|{qf`8 32S:$ 0D5IQQz;33F4Muh]ZvҰ,O$@b_^+A oܨ=spOG7O& *o?7[D,a24LcF,$cX:x%,2瓅ٍ2zN,{4g-;jVW76766|{DT3J"-]˫SAD.tgVͪGgT6[|Bdmg%@↱+ZmO6b~Tl.+l>Sа3rLTXEH"Kz17"˵U;^H\Cϒ+9 93c흭bOOAobBF>1)œ纵b%ՕYq-/G⊫TK1\>g\d1X^؏] ڕseN R,ow 'dz^OtACNM2S ']^nz ll@͒~ّV U^bRH5dΌI$w+:uu.0TUיXԬ_-}m>~-.4ZvzQ2Ӷڛv<ȤDB( k^t9/\H)<Ǥ:WeO1lJuCԂD#D0"C̮Er>2IH"N"#Li$lH`d~kN<% -|$R-43t|s Ӑ@B8*Y)]3c$Ik\Tt~~ڃop%tf_, -` !0_U SRg(P)P?E95G`2NAO!5E27c! LL _p` 3"(AjT ,Wm 315튴S_{.r2T||{D#\b$ 羈Zj_jd|X J/?W L3Yч~to06^8C| z){J3#h7͝b#xB%؍Ey\`mpt2"m r\dD!qMmHps};tuz=B9 qiXKtnqgt /%Г[ 3|Vv$>|kk}0 D(12;[_陵'C+H />vЎWs[-~j<<$2Y&ڭ*% yIDV9BR=yٜ `nǭBׇ֊gb<]뷪"zXp҉(Bm!AH g\Z1sO.wgKӑqYcsۖc93L &*|@\=Ëe5=?tGi-Qnܠ-} HpbB.-]ق`4N~'k}bKN3~X;  TX'9Ah9jf ("ݸ[! Af'篧6w>8cC\N=73x}~&;c[13TCkxH^8r " UDJܞMl .+W3c&0^83_`XfUrڵ?6 =B$+^$ºG [q%/{K_9~O"sK"@?ɽhGS`Z0[F y@H/ERA1IѺ?ʎTSs 3C#'-(@A59" (&1Hxf SX)ϵ Q"|tA.O\tOќO /ѴN~oՏ?}{֗7R$\Α ]զsaN-::r7&BB rlf]xuW?xdzW0~gݪAoN:V;SAcg$Iܵ&&/ 㕏?ro}[X%x'=,'sߛ/of)lViˑ;Ux.6GT*<3\/&YtL|P%j_3C^;a+ۿ+V 4Mg3^d7Zd[pشЌKٷ!EظǼVr"_|uoG旈g/TNY+F./sڞKXȧXpIG(ʪ1w2;WǞa:o9$Qmۨ m Rxe?-Fݝ6{3sQ5qmpֳ#_ gzW5C(cŃ*0g+8RgMHU+W\ V #ԖùəaaRHOO+#cJłh4 0rKEb }r'C:Iu D@IHᎂк#b 0ҌHepaaT $GAVٗÑZG*Pfh 眄^:(X{Gs8p^0L#N4cTGI73Pm|ZM۟ {cՎ!spQ_B<F֑.2m:c2-HfD:rȹ,+A F%h s93籅CY+E$杙Ӆntpװ]j;9#tI֣=RwBfD?Ct<tpg+sSx\GKF8!TCIHD"q&G$- ;(k^52(0/%Hm>&"Ì*H"$@5Ge6nJy9$eܜ2 "(FWm^fh@n#ԣ93U@RqyL/_=@D#k 8 B`0⸊k9T){ ؚ+^ޒGAC#*\ VўA0:Y:au[͟GJJ]W"?B7%1~T/5/h$_$Oo#@^ ^w;s^>S=o5cO,l6^:u߹m@Ӗ,l6O=cY>]"9OT&@ވR \ˠK#`lJK:n#ß%!3x'?%O/ہ!n[%*>EMT5W6 l!r1af9FS ']]h[+;'%C2iO7n[*~*N $7J㺦h#[64!Yh}45!nߥ噛P{߿l@nؖMY6m ie֣k|i_<5n.ū' oD]a3s#S955ѣfTn 4Gr̳wt1 O{NjFk18yk@YwGZ z4sBhjdgcn=;rEe{$I;T5(+]yZJoqq)ȝu=[$#yK#*EဌԈ+滭qIw%ALqdǗj=]X_νzbW ~2#%,xkO?5ȦCcc>oxceC `ZhYWOArFo&sf ^06F^@":d{wkzvcE]:f=cȡ>lwf7BW{ :YzmzzzG9LǝƑ5Uiu+~5ױzJpZ {Fs${mOZMg_9eIK? ؖKsyÑO.D&@ƓMm B:FX!~{'N@(t(:=돍/zS2ۥ/ X۬횈8ޘf:O,?ڗUk;!;PO'M":a^#{@l$:Š72]yuZ9'FF/G0_S! "yiptBd˃#cu'JN`ۨ\,UŘc\Ѳ1s3AU%"+vm6 P;& 9yu\EpXCxٽHQ9SF/sΝ3?Y'hܾ242`H 2**rAxq;1`64M/mp, KlUWNUvW&k& L=R/G!/U攮rwPKE[A9HUzWғsHW\chFG$v~fe޼ 3lB;r{.VuΪ.|lgljfR~v}?dSa+ogD'J$a!%diPOF<ߓo,so#&D" jԮ]Pء?X۷cp}0=-PBGP?3=mtEkGzHY;lD#-Tn@) HȒ0C9x ƿ?i[Tp&29@a PM<BVY <2pzogdזFE)cݹ:Z-HTdy}]5~awaӐiH'KZ@r.8>Tx^+̽W,H{] '~W7ڷ^UA|#6U+UN,C"?3gj^@3Y++2< #:Sr ԙN.6D/.y9݋ 0Czogvo?"QcHUPoh/ͫ[b_ @܄H̅!c{P},^(ȳV&$G=[ZAZAKȶ5Xa'\B@Yd"*S^ABfD~pƙI T-vǻ._(`dәi&"CU3S쐜@Im+71wrh!Hz85ERV: Z?j ԏTG^7 -Cr譟#siƾ/.K:&JL|e2a9UsqP%Z8R~%ej$S_~)T0TxFH+6cohPhN0޶?2g 2vD=Hep6WDPlD'8iNwjq+*g˙)>rfЖmO\Yq~.u|kG#vID]^'ߕ"kKs18U瞓g#"2' RHNHSv^Cr [lrHN5=0)<-HC&.;Uok;P{Q-(Suk] &m5;]:Fng|ׯ Wz(Q 83ƙ!sE sSSL_]݂DGB8Iu~@bj[ frGPǑ:m: HavY}IcQ{RJ$<~ [>AT(ϵ.]+%tc};}|[vwmHT)A33TgTrNMLY")[rf㦡g3c)Stti`;DDBU޼Eq~Za1ТI-3t|ls(\SfZ.3 +9U#9c# n3Y:g7);z!d 5)]sKP- 5~9 T1Og-zw+"?CZX PrtR4-M( RP!͚`(#)kh#{ P25A᬴_~hds`7AzwQbȋ@6+į{n51 ћόaDD;Ypi7Nd!䙂yN;Uɼ!1W;7?pMlwhENa}yg‰ʁ'F3xc{s=2!'!6lD❍2:ƅpBL23UT2yԑWq&17? 'h`(=h*N$e-+(Lv9ږ ;Mf7e㠇Ĺ ҸhM-yV(嫡;DH NC䔵g̸1L B4R.z&Y+~G\3n36T2#|P|serKڴrʈ/iH7G4 QWK!~q2uu\,6UBRC+ Wu+{'GkK;Co ѽ0[#5/5ʮvRm3s#{qpKGw^9 5V/B`TZ!T+荊Ivic5-Ƕc ` ^CT'fD8шtXÂq.^^G͵!~ /yxZ{;,iTDz pIn"Z_&=s [XRmc) !$5aqEv; 1p]pA `l} e:.%!QVZE: 7.e:N7fV)q BtZa EVәT~1n-= $bz)Pe$Y7W/GUxvAA(ٹ]uuNo}YYqv7)\$* OC Z6VR/wn9L aj+_'oDjV[P3}kXsrI{!C|djS_'ճ>;ι]-f dma,+0"J*ގ񅻫[RYZ[-E  4cY܇QF&hYu\]4MV G?ǹt׹s?7_0#.~/^7ƞ7NӗZu<˜\'E);S\5 -5RN+!S0T(HTW.\_⧞<Ň+o-ww GƑHW(-8H@(k3_vkuj=SD_|~d|Nvwm\_UV[?Ij2@ω s *q]icۮφ JrAa2GUcBg`yfU3O~}v8{|M8p-'[z͝CXKܦMruu114!,D2HTV*T۸W+ ATbH1z\+atܹ7:_mtF?>oTV?N>mvt5|}bgm:뒊Wz6rkkzݶm9cUW2 ?yWr7/b)L1݈-1BUWntn ^$ʦ2y([y'_ µyܸܻ3ŅW p \vSADV\vϭKT*=Yz"I~5@QX z-wU2~Bҩ?2PJOnطu~P}[H@GhZBHn08Z;Yj@ 8:YS 5rd#>>e7+g\׼t)Zα-ו*83͍:$3v7ybX,kWoJ%M!ۥ+r Rm~z])_|.Jryf=[ R N *ܽadGtc fY(m]Oއ"2urUd7 2#BJygCr{f[xnn]ݲf[%=œ)dٲ Q}5vX[K=ف1'dQqP4Vu?&fX8*)ҽsl ^hIPݎ/Gg=FmC}8pyjAJ $,٨qoG!_~V.woPK #F*b٧Ŀtr ꂳ/_.:DR1R˲r~\1UD& XܱǒcF.\e2C#@@N5rbaklLIiވD-ێy ߎsK^@=?j\/-4k2SdwV}h 9`b nHW\Z&5u @>~}[!" nȵis{_. MI<#d"jC1٨ N~ZhZp5Xh4pp Bkfdod:1"]FXLvnWܬT aNN4Wln쥉=<D:ű9l/t?[[٬eY~ޭڡ0M#rKSI0g 3/3:]m1wh)vs"I 3dd`bQUHrt`# !U,ivZIDﭦPT0 Lu#qF nW98nᴹ cJ/$j[Ψ܎]$Nַ>zq|L_XXpV噩GgKҩq\Mi>VBkS5:]A]oq!c3` PJ?A87|iV{@"ŤWCO c|Էӊ}xΈ" "}Lg_b(M?M+)GB&"æ 8p{$BUwM9DR+a\w \]0t-޹ܸFѩu"c@t/jGւN 89n-¥Gd2k+өEw5q#:@=whPϳulD}hh&陞_ݙݹ#1ӌV*q8o%)M" 6`0`U.M舛KP՝@n=weŮfTܕeαCiϟn1:],ruJс(Кk% эbEiGEϙ#c Agvo ڦu' ͳ?D*.`D!gIw{]}+zjwQ^H%yˀ֨;5rcbɌ!ͼom<|jU܏40=%+K!wmH' 8Yk7+"\Ut!X)+"]zyi2ͭzBfhw ѩP?lmcD0!ɴ62 'NsUD7[EȈض%qI6z 94!rw(Pp3VƏ3g:tM=UL~u>uks9"ܾ<42VP.0=^ rs-j& c1J 𚂃&7f=!x%qm-=+Oۚi"^/a!R@X$TDJ #ғwtf]Ʌsci:2n:Vsqur,Gpi!DhR~gx1,ƱCW3*RA@}ǁ7hKz69?.0>Y`dĕOyf!iC{ZHŽdM%kٌ8qCOi׌MD`Citߍ[s;fO=,T׳UfO<Ӑ aAF[u pz럿x~{3Wtd"!Ȧ hDX)E~e!>fC"gv_]DkAaZy׎џ @:>^xeK寞س0[*>fz`|~pi9×IIxH?@bBIި/o4H˹|a@#75 MZ1tt_)d4CYA`tȼGFWvt)nrF܅_"A["yG$űNfg-kYݹRy˜qjQ. ߼`dTJG\l9$VwN|gϗ;^j* 2" zK$Er PX%95n56Ni۶H7PaB"!6OB(ʈ#l)Cz?;҅SHĘ#)>D' qul>Yr.kB2þm $t?D&{W9 4slM[\̕Y0_ H-;˱ZQ` XZb@<0%v['b5X|9 hu *_>}\4PnV=s 1i/e{$#Ҷ}$_-^>y{scX={=d9-"#$BP0=L"_cŦ3N J42h>}|y >b`q~IEo\$ ^^-`"z 8R!p'#D93&@(bERɛWH׌,c뼮|^[Y獬‘#eHC@|Յ￴3#,_|(ㄞKZq΄ ׹,Nv=s务f{bũu^̓O':|y>P1Vދ|{IAthF~F+{O~j;gC=]`~3Wc,XLTA9D{_Y!>|WF=̆7 ]rv`q5s&@ީbOp2l!Fa#:oNDf+OFHCz\XXߘ4`~oh# ,ŒȲ,!cQ8}ywIjYARgϋL蕧nP]9B>H3\F K#0җݹAZaxe " 캩:+}Sӱ Zvr&C0J PNDð5*{|.b2Sbv&haTgU ΈB?*v~$"hdG {F><<މ=wo_7OK6fP&B cDdYعp }5#|PEM̦vfr$ |\kOG ]Xӂޮt ]"s]Behj%mXi_1${.ةuhV%5a[[2>#{xܕf T-={Jr3qŻz3@Qn͕s[9g@ԡ;mݻ>y(Eݏ65iѻ!sNLf{K4CJ;;7COkܲxS'A<r?I؎b ]EWc8;H&Y'$_"1 4O t'^PSX1{vTX7sךNK\ɐR"܍ឡZKm9YЬo>p.:X%f!@W7]Z,U Зreˎ2RmE@ٕvFNȑ}rKo81с#/`D >k~ïΡza'(҅] \1g].A~eOv}}`!0 HDk$,Ide{qR_!A^<ʥr$J-.2 NlY1sC|$yskWO N?tl4@ rԕB 5'`;Ⱥޞ?eSAdE(/ "8\ʗz"ٗQǺ` s|y"X`JC4 zW4Lnkc-9֑0,0Z:']hw}4S~#O;xC ZCqG* Ka=$fW!ݾ_t wv\K,ry}W7yb;D4[{D[מ=E{g˗ๅ}qҘ=g16, p)e{2L9KKѺ&Y2#1\5HX/6AQhQe`ҁI1Z'@j$R*ym])>ROEH_Gu;Ӏ%e R!|.|1ŗ %֓Amx@ 0罣n%XE'cLh'jGr?]12^?^ث>$ԫ^GHz2|͋O ?o\9pl;1fpk2=Hw] /ۿp#@Ԡ cn;f p +wW.u033b""R$>#Oh|z adB|+x*AmGK,& KDCs N Z5;.G}D0>a'1t`Pp7IEr}{Q<~)\ϻG$6#o*Tgo,4R$y&^ֺN Q?WkY枉mwFaixJ0H/~%m2Bx_ܮ2~"Ũ]Q$X$k.0aچ>|&$Tdގ \Q4ac _T`''Ybor ظ}.'_Pp]]k޸Hg D 586"5x~aJN4fq:_$ga;r6 KaC 34 [cTopʵ$"}e2U$U3bY(-[yLT|I"0`cYzd#5ɛm)qB||%E s\CզqfvⰸWWji&E( sCP);楡曇A-6dl70<KE`1bɃAO_| >{8>`o_?G/* 6Z!Й҇rM+/s̸afdݽ*-1gud]QH qZ Iy\QT"J`+R DaP0LtC4(%rL "s,5H1֋qͲ뼼ˁJް ̂T-Z>\[_ ޜ?|ީyD `6v&=q,Ɏ{ۄ30rGMG!@BhS%:Q%,+bI$OӶ)J$eh!i_ʞjR mmK0h[^O&d Lb?HH7V BBZb&|ZF. ^Dv+ ob^8Cqi!6WT_7'Q$@ TdNv}QTˤTZV,5$D]ǘqݠ%vʩ&lЩS dQ1DPOIf7[f`T>3 X&~1u#=})MĔ͜8lx@|nt +ԅB^3MBq)a 0[G?usvҝeD;FԶ=kҎ;_;^ddIhe ԕMIbC$RّS{׉'#JHZh$Qp䃲2G|`<p`IYH*_QlK#WTS c Nw?۔&a "mזFV-QA6y'n{Zp8dm7A3u|]{w7ur#F( _\XhD] *&)kwKKE]mY8)9)Ts,%hµՙf0-dcU; > ­F5K+J!5}`O'E}W}Hs(5yBTOqK+SkvO9 "¦i G>[>ή]7 1"E-ӼAo~Ot>9 &`8<ŔKFY$fi,'^.cQ$ѷHj F&T^ ٛ& %VI'\TuCOn\Q~H u&eXCb\p0oX{$KT'E"7\>~;7Z]]xs( TestFA?gZ捕B nΎ_F0K(n%JPCI{ֺ]moOϞXRO 1Z*b:ѭXv޹8N;GAlCJԈdэX7ɹegLF #]!N'ODP{&op՟_o߾'u˃:_  KǮ_\ٷg",\`UEaT=( 6AJ]r$E/ Et` jC)aʤ]9* Kb}g32ɞOdQ4ޜQ@v#l*k_Hkb1l1缏D;o~!HY&YZ\^}Ň^HDѨm`k)@̴cfϙg^ͭbD-QYgEٹMFIN))t7 ww QS[flT1 VXMP%y^֖e,iwԣro&x'9WdwwT%4`&%1-{L2'PU=d5];1篭]\}̙p)֮ G\^-1Ύv=_/~ĆvAA 31q3eAϲCNcUaWl'hc IV$@髕CjuNqi-4ݤdw_Ep-Qk-Ja'cVfIL T!*YUZݝ/oqg&J@djȌYYo1Jӯ^{7 49?l,̋ t"2}<|Y\xb(2""ŐeJpҟ%6RXmNnl' MЧ,Qk?a*LJ-=KT[!Ϥ|eǾg⊿W/e̽WE (N>dz @*)QԎCebܳDm1xD)Wnݸ~έxzY+ APWu&ƾ"@1vTwҀJ={|a$g^ R@ZYZWMPq̝Vyի1*`\W[X9\4DO? vE-SK@( լ-Zb 2__Kzmk.O(Nx+SaKKԄ%n<<33}oD`I11eHE WWG3m*|4ZZ~r8s|5̒3] 0 UB2cBqFRuơX<8D@>G86 2+ 7= lHYj(y*hv|Ճs_TȢHB7U5Aj/iX%iZb2%" KԢpX_]ڶ}zmuYtGgͱTT vLxss*h5] wǝ:'+m@2y9p*,AN،~B I5LOC FMpH=`8Fˆ߸EA?rB`2`zI_Pslu&R+.9@.N' %S=(EOU,Q}ذcͫGAni XC2y:qC҂1 5Z32)u"f"w:Ig!L@Dt"Sx#TU#> +aL()Dؽa{f[tWUm3QY:M=*b!40i˞)<$)M2Y4=+9YVܷ*Tޥ^,Qta-xT+ d+tYdCxieqۃC$ jn0A'TܻWx{ y""y&-.Ips*.-7;'ߺ%V q2pcTep渹TѸ}9Q'?xQQej r+9@$X}ߵҫG;]w GOY|Ahn81w5QQRF("ZC111Pm !RCrRUZ&o 7䝡uRi2:M(j\ eyVJgmeEz3[,XEg`_Y>9-g=7* : 5?pKd55*e0;W@ײ/w"%*s_̓sܞK^lĽf !M'w%ZĠ٢"L\Nw# t9Ĕ"(|Rx Y}mY A2& Hg;ZHޥ؃TrkL{]f&wRC7xq6Mii>a fїw{c/JHb9W%*Elj4w=z :Fm]5DWuZtB#u3> K4E(R3 a VTUku k#Ke!`!=ÏmSJ}"l (*~nZhԖs3^>TmQgׅM paîdVSVӖ;6e*}KԤℶt/ϔ`iR J fVKTKTD[ S5v{:f)]HEX..2[_{>t@:cDžw?ztZYRP\>u>Y@Xrjvs葅]?+9⭍%Vv0lێY:5 h7Sfܴyseo\:M)`._аliξj-)H2%f;TJv!.!i#ɦx߬"=41 keq'ޝ?rsk+ty<#}FA߃/=?&+HMv!]egڞ+;a m`!~)}[JX N}3g=u/n<"5ѐn5M3lݸi0^\aro}yCG.ݺƃ~'oDS.%oh^xU̺|N  bH5d)QERxIf$N|Blre,,cd Ia'8{D(.!SzMsŜD(1*LJgLaU֨ \H03~ዧ3>3wܺ;fY723 ieؘ޾xK6+|N?"ҕ4V LXBG~GTTTxe  `ADJAqa195s~ړ-H54"4wJmah+nbExJD`+944Aq(5;tt5ve,t#D$D! KD-mzDeE 8|po?__Oߺv3xשi Fڹwϡo\:w|b _2R mD sĂ47rKlXq_ 0pXA%E1O UB-ۂM7-g ٩!EA,.(wuahP,q ~ [pxFRm7%B"\!:RPA$[""@4 уSS@tL"- ll;iO_c?GyvZYx: 6Ӄ6}bm{?s?s #zSk$:.Q#lJwT ,+ˀ((, n$P<+FDtϧ$jQmcG7̚rIW1& $2pl :fIC%"B&ӲbXY iLIJ\`EDѻ%*A׉h˛f <> /~쭳_w vmޱnl[܎gfGwkK<ΙZUD# dEV4J}V6%:i"G$B]3G-:Kl,jML4Iլ= So\\']d{qN,FE}1YՆ2LhΧ%j3h ,Q<} 3#']]\\ldf; Gm9x:,$Ix=6ĉDP-0bGKILDRD"e" ]F%~_e[7L$*]T2cg ^*c:ΰχG-QBu7.lm UP|HmU?JӓlN Dmh40`c1 5kfemaD6SVCDi&9*|zV5@Ćkӗ$fJH)a2GamNNfu>Dt@cb6@(5nj\\*S,"!˧BPض9 5tp:_TlJT DA Jtc9 ᤼0 } Ӝ+pȥ ?tRA"qŸf Ҁ BݣfsGV%<;ޣ;r5= 6Q\>XE"yE1}%f~gҔy&Av2ɶA8ˮ(,0q`en1Uqط&ŵN04jYz;nW`R8`܎ yo\~߼xrv o~px1 ;j%Ν7>lFHwHvRqɌ"\ :QC ޴D Pd ʹRf1e/gm*~sʍaZ r|eicJƣKx<17I}Xz':r,pH6M,_܁/H/ Dm)t >SaԧxW=0Ǟ8ؐ<%RlZvK/O$yq!fH*@I]V'd-T}R{E;lŒnjTm/Ey2RJFҤ]s.6f[^L 3UD\҄CSm-Q޽Eh* Kӣko__8v^{h8س{o|}x'?D=ciuRHau#_,:1 KԒL W_#RF"H}c噏Oz'GWGsDIHK,M"P!wI&.|4vz/10 tДdBX4N6Dq! t;M*Vc L}k{aب D 0`nd7q^P![[b$wz[rILO$ Yr~7ԖD هO|7oɉ`*AO3O{>1fLV%CM %E "*n8)4ݬ M)T-)k]}8- %ηԩ͍oDå `Dd ^X 8SUd5 ywSӲ< BRY9UPĦHR"N;H "R))x)XoH5 {y}xSKzh )ZYcr*H2G!AгD0#3V'&k0nxkǀx3W鿜|h;|eڵ4hsf~gvɴ\E(Қ/d1f z- In0B/RTϦ%WP=iӚFdrWc k>em[,B.h+" S")<L'_BE\Uberg>o#Hsa 3P{D-gnmSp0 ē= ;Q!5îou,- zIZ%RRY0t5w{ZAM3`Τ0m[*mXUzkζkaL]rԓX1A%ǔ)0Jߖ W|9Q&,Qkm)ZM]Vo_="\8p.[ I%hHQMD]m Sۿ3~.6KTf&T Imu%@Øʞ̦/)aA\5ΗQE+ زtˠil67wn4Cn:fNwzb4JˊP!f#aB!Ff8!RD͔ 9Ɨ ӎy0(ub&drzE!"IL.#5XIRy}5 \_wOqbCG쇵9Ab<jh=!~ 4fm%f79JYU" e5$ Y'NGḼ\M03s1.,W"?a %&:W@X6I<}D jt w34McURwKvl@SA9A 2?EЛ@eݓIIEP&^ה$i+)f"Kw[<%,. FIENDB`lmms-1.1.3/plugins/papu/btn_15.png000066400000000000000000000025131247673406200167240ustar00rootroot00000000000000PNG  IHDR% .aXsRGB pHYs  tIME ( )곛tEXtCommentCreated with GIMPWIDAT8˅U[U?9㌗񮡢(Z XhO%"O2=$=D=]ͧR@EQIм̜33gۗz8ӘY6am6o}[{my/t=YQ.YW4\gjfQD`4TqJ,mM9l<;}}ydܳ@z-V)S\ˡ Ss94R"PP qi5(T覰D/Vkij^mbr 3++Ѿk殚!ʒ<AD, !U6QIBTvik*$'uGPW{Ͽ}ul[J;qת Iwp᧓W"uo%5 AJEFB-sr(7c|g6ߜ][}AϲsҭCDZ[6|c4`L {RyvwDV;O4U)oQOحqwׇvk_׻[[#~&DJ)0wڮ꾮!DMG#¹a{,S@{\b^_lj!QӰOz 5FeCk dsϸ`o!"(^~u%v^w{oq $ bZpqsp-Rfn81D ̂<Ὗ{g,_ @ŁC۞@kh$P…M3cKQ".hC0)P R 4FMyd ^xq9&4 A@+x&xttR:CYGk.-oM[9MSIK5;ǔw'a[7wL-I; /&J3~<'cΥ+6 lz[b*BZk[̪& 8AP[*e"7S4sHxwy;5#}]+[0|Z0=̓ UBDP(@@Ճe. 5AXRmR"3CoT^9PtεwVUwVxb  $q =΂̀ξ}I@P1 DjQ* *e l$ϾD'Դ|aҼ~2:y-&6[ 2;FGj#5]Vdk?5p >6Kq6&T{"6`;ApICKzV t.Bq@匂v!sz)5/$Mᜃ1ܯԿ#8fZU<}8(D Q wVPZFWt}08hn[l @DAQ8ayTk+zGY?WCT@^wוy&֍}j.k9և0! {[16Qw1w(? ~C@#VNJ[Zat!j5ݫW?{pyN: {Zf7nw@U=xhP5P5LsZ9GGOiԷ߼i}6-'Kxt1Z\MO4XTqQvֆ" h(_`$3ik7׆ASg,y*8\y!I3;g هO,6S(E0\Z[0yA! [ aD"wRs@nr{|PcPG'mv]ϨykيI}$Y{a Y@ CC)DA4 %M+5XfS&z QԾ~߲Bѻcߙ[=2eh%Ho}1WKuI=΂JPPJ"03X" @ADbQ*2rja6K_/H+ `ΣۆwoIo-<Z wp50Q@s2P5n/z >vm'We0? dGC+: 41 @6*Z) ع عJB{˨//#59hl$p,±{4&\ c $ubX mxv91ۃjUcLn"E f J)h7v?Ν 8v|ӘD:.Y7 0, -h6gd5[O'q0I::,`D `4(.P;πE$!QyrP9ގqBMDF޵A̓t;/ڛ}ׅҷ\jE&(K!̠j 00` 129&[Ro)ήO~dpEOqffV2y2Jū+]Y>xy$ف"*f Lb"izk2nn}+ M޺p%'_rb}>?|si*nZDCUU "xa00@`DQ ATafOv%1K 5ET6__-9p -/%t= Aew` 4$0lEiozvQkkȋ!8O0@ l") "ȶѴq+i͵8n鯵kL"! >d#Se5@K*ܦWt*|.:;SYP("9ٙ蟩cds#12&f(u_ٓ9(|6p9Lr.& 3TD΁ 26aB 0 012Ҫ 674Å뗶ϩ߽7yavjn2h*R̳U.T D#<@T RYeʥzJyqܿҧ&W~^v|mz:'B鎄11 Wr8QU%U@UPSRs.R4a@QRzC_g.?v?=G@󗎍-ƔlnFu'EY{27BIIj< X]]߈߷q xޢ-IENDB`lmms-1.1.3/plugins/papu/btn_on.png000066400000000000000000000023571247673406200171210ustar00rootroot00000000000000PNG  IHDR% .aXsRGB pHYs  tIME &4vtEXtCommentCreated with GIMPW\IDAT8ˍˏTUƿso힞nf`0D !J"`эqİr9?qeL\0%h b4!lac`dr=@uR:iekմK馡ZK,E;WQECE.JPP/fntH;‚Ovy_bR;u"Z3m4ukUl%TuA^ 4t=?n\Atb=-Z SgmȖ+4hj#hT[ABU5Ug`d+8u9߽.~r\[!_}L'c0U kK*m "Q!Qc"a ;9k%bn_󟑂1\wE2:띙 [p,*9RSBH^CXU?K&"cp]5 eZ@x;k{@\4 =@@"v*SImJ_LψTM"Ԛmh 3{hZ+ȲlF0<;HB @@$`qig eT]:HU{6oܵ, R`Xk_[G=ۃ#$ 1z ŁE]Bg653t[4鸭&6F. @k'<h%8•ߚ+@LB L 7KmbR/@_zнc.+uJb֨#YLC#w̌TR"<|r*V "XIH /$O%/=߶/cqN;顙kbGB7jWR,PnHX7 x@D$H..B>{1/✪ 3-.g?UV-twc|uۼ}RA yn,L,ZGT$q~`,%Sͅ:=XchH^:j1ʰwz(xZ;[*ƚsD0qKhBY]tqԼ^^YǍF1ZƜIENDB`lmms-1.1.3/plugins/papu/gb_apu/000077500000000000000000000000001247673406200163625ustar00rootroot00000000000000lmms-1.1.3/plugins/papu/gb_apu/Blip_Buffer.cpp000066400000000000000000000257061247673406200212570ustar00rootroot00000000000000 // Blip_Buffer 0.3.4. http://www.slack.net/~ant/libs/ #include "Blip_Buffer.h" #include #include #include /* Copyright (C) 2003-2005 Shay Green. This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This module 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this module; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include BLARGG_SOURCE_BEGIN Blip_Buffer::Blip_Buffer() { samples_per_sec = 44100; buffer_ = NULL; // try to cause assertion failure if buffer is used before these are set clocks_per_sec = 0; factor_ = ~0ul; offset_ = 0; buffer_size_ = 0; length_ = 0; bass_freq_ = 16; } void Blip_Buffer::clear( bool entire_buffer ) { long count = (entire_buffer ? buffer_size_ : samples_avail()); offset_ = 0; reader_accum = 0; if ( buffer_ ) memset( buffer_, sample_offset_ & 0xFF, (count + widest_impulse_) * sizeof (buf_t_) ); } blargg_err_t Blip_Buffer::set_sample_rate( long new_rate, int msec ) { unsigned new_size = (0xFFFFFFFF >> BLIP_BUFFER_ACCURACY) + 1 - widest_impulse_ - 64; if ( msec != blip_default_length ) { size_t s = (new_rate * (msec + 1) + 999) / 1000; if ( s < new_size ) new_size = s; else require( false ); // requested buffer length exceeds limit } if ( buffer_size_ != new_size ) { delete [] buffer_; buffer_ = NULL; // allow for exception in allocation below buffer_size_ = 0; offset_ = 0; int const count_clocks_extra = 2; buffer_ = BLARGG_NEW buf_t_ [new_size + widest_impulse_ + count_clocks_extra]; BLARGG_CHECK_ALLOC( buffer_ ); } buffer_size_ = new_size; length_ = new_size * 1000 / new_rate - 1; if ( msec ) assert( length_ == msec ); // ensure length is same as that passed in samples_per_sec = new_rate; if ( clocks_per_sec ) clock_rate( clocks_per_sec ); // recalculate factor bass_freq( bass_freq_ ); // recalculate shift clear(); return blargg_success; } blip_resampled_time_t Blip_Buffer::clock_rate_factor( long clock_rate ) const { blip_resampled_time_t factor = (unsigned long) floor( (double) samples_per_sec / clock_rate * (1L << BLIP_BUFFER_ACCURACY) + 0.5 ); require( factor > 0 ); // clock_rate/sample_rate ratio is too large return factor; } Blip_Buffer::~Blip_Buffer() { delete [] buffer_; } void Blip_Buffer::bass_freq( int freq ) { bass_freq_ = freq; if ( freq == 0 ) { bass_shift = 31; // 32 or greater invokes undefined behavior elsewhere return; } bass_shift = 1 + (int) floor( 1.442695041 * log( 0.124 * samples_per_sec / freq ) ); if ( bass_shift < 0 ) bass_shift = 0; if ( bass_shift > 24 ) bass_shift = 24; } long Blip_Buffer::count_samples( blip_time_t t ) const { return (resampled_time( t ) >> BLIP_BUFFER_ACCURACY) - (offset_ >> BLIP_BUFFER_ACCURACY); } blip_time_t Blip_Buffer::count_clocks( long count ) const { if ( count > (long) buffer_size_ ) count = buffer_size_; return ((count << BLIP_BUFFER_ACCURACY) - offset_ + (factor_ - 1)) / factor_; } void Blip_Impulse_::init( blip_pair_t_* imps, int w, int r, int fb ) { fine_bits = fb; width = w; impulses = (imp_t*) imps; generate = true; volume_unit_ = -1.0; res = r; buf = NULL; impulse = &impulses [width * res * 2 * (fine_bits ? 2 : 1)]; offset = 0; } const int impulse_bits = 15; const long impulse_amp = 1L << impulse_bits; const long impulse_offset = impulse_amp / 2; void Blip_Impulse_::scale_impulse( int unit, imp_t* imp_in ) const { long offset = ((long) unit << impulse_bits) - impulse_offset * unit + (1 << (impulse_bits - 1)); imp_t* imp = imp_in; imp_t* fimp = impulse; for ( int n = res / 2 + 1; n--; ) { int error = unit; for ( int nn = width; nn--; ) { long a = ((long) *fimp++ * unit + offset) >> impulse_bits; error -= a - unit; *imp++ = (imp_t) a; } // add error to middle imp [-width / 2 - 1] += (imp_t) error; } if ( res > 2 ) { // second half is mirror-image const imp_t* rev = imp - width - 1; for ( int nn = (res / 2 - 1) * width - 1; nn--; ) *imp++ = *--rev; *imp++ = (imp_t) unit; } // copy to odd offset *imp++ = (imp_t) unit; memcpy( imp, imp_in, (res * width - 1) * sizeof *imp ); /* for ( int i = 0; i < res; i++ ) { for ( int j = 0; j < width; j++ ) printf( "%6d,", imp_in [i * width + j] - 0x8000 ); printf( "\n" ); }*/ } const int max_res = 1 << blip_res_bits_; void Blip_Impulse_::fine_volume_unit() { // to do: find way of merging in-place without temporary buffer imp_t temp [max_res * 2 * Blip_Buffer::widest_impulse_]; scale_impulse( (offset & 0xffff) << fine_bits, temp ); imp_t* imp2 = impulses + res * 2 * width; scale_impulse( offset & 0xffff, imp2 ); // merge impulses imp_t* imp = impulses; imp_t* src2 = temp; for ( int n = res / 2 * 2 * width; n--; ) { *imp++ = *imp2++; *imp++ = *imp2++; *imp++ = *src2++; *imp++ = *src2++; } } void Blip_Impulse_::volume_unit( double new_unit ) { if ( new_unit == volume_unit_ ) return; if ( generate ) treble_eq( blip_eq_t( -8.87, 8800, 44100 ) ); volume_unit_ = new_unit; offset = 0x10001 * (unsigned long) floor( volume_unit_ * 0x10000 + 0.5 ); if ( fine_bits ) fine_volume_unit(); else scale_impulse( offset & 0xffff, impulses ); } static const double pi = 3.1415926535897932384626433832795029L; void Blip_Impulse_::treble_eq( const blip_eq_t& new_eq ) { if ( !generate && new_eq.treble == eq.treble && new_eq.cutoff == eq.cutoff && new_eq.sample_rate == eq.sample_rate ) return; // already calculated with same parameters generate = false; eq = new_eq; double treble = pow( 10.0, 1.0 / 20 * eq.treble ); // dB (-6dB = 0.50) if ( treble < 0.000005 ) treble = 0.000005; const double treble_freq = 22050.0; // treble level at 22 kHz harmonic const double sample_rate = eq.sample_rate; const double pt = treble_freq * 2 / sample_rate; double cutoff = eq.cutoff * 2 / sample_rate; if ( cutoff >= pt * 0.95 || cutoff >= 0.95 ) { cutoff = 0.5; treble = 1.0; } // DSF Synthesis (See T. Stilson & J. Smith (1996), // Alias-free digital synthesis of classic analog waveforms) // reduce adjacent impulse interference by using small part of wide impulse const double n_harm = 4096; const double rolloff = pow( treble, 1.0 / (n_harm * pt - n_harm * cutoff) ); const double rescale = 1.0 / pow( rolloff, n_harm * cutoff ); const double pow_a_n = rescale * pow( rolloff, n_harm ); const double pow_a_nc = rescale * pow( rolloff, n_harm * cutoff ); double total = 0.0; const double to_angle = pi / 2 / n_harm / max_res; float buf [max_res * (Blip_Buffer::widest_impulse_ - 2) / 2]; const int size = max_res * (width - 2) / 2; for ( int i = size; i--; ) { double angle = (i * 2 + 1) * to_angle; // equivalent //double y = dsf( angle, n_harm * cutoff, 1.0 ); //y -= rescale * dsf( angle, n_harm * cutoff, rolloff ); //y += rescale * dsf( angle, n_harm, rolloff ); const double cos_angle = cos( angle ); const double cos_nc_angle = cos( n_harm * cutoff * angle ); const double cos_nc1_angle = cos( (n_harm * cutoff - 1.0) * angle ); double b = 2.0 - 2.0 * cos_angle; double a = 1.0 - cos_angle - cos_nc_angle + cos_nc1_angle; double d = 1.0 + rolloff * (rolloff - 2.0 * cos_angle); double c = pow_a_n * rolloff * cos( (n_harm - 1.0) * angle ) - pow_a_n * cos( n_harm * angle ) - pow_a_nc * rolloff * cos_nc1_angle + pow_a_nc * cos_nc_angle; // optimization of a / b + c / d double y = (a * d + c * b) / (b * d); // fixed window which affects wider impulses more if ( width > 12 ) { double window = cos( n_harm / 1.25 / Blip_Buffer::widest_impulse_ * angle ); y *= window * window; } total += (float) y; buf [i] = (float) y; } // integrate runs of length 'max_res' double factor = impulse_amp * 0.5 / total; // 0.5 accounts for other mirrored half imp_t* imp = impulse; const int step = max_res / res; int offset = res > 1 ? max_res : max_res / 2; for ( int n = res / 2 + 1; n--; offset -= step ) { for ( int w = -width / 2; w < width / 2; w++ ) { double sum = 0; for ( int i = max_res; i--; ) { int index = w * max_res + offset + i; if ( index < 0 ) index = -index - 1; if ( index < size ) sum += buf [index]; } *imp++ = (imp_t) floor( sum * factor + (impulse_offset + 0.5) ); } } // rescale double unit = volume_unit_; if ( unit >= 0 ) { volume_unit_ = -1; volume_unit( unit ); } } void Blip_Buffer::remove_samples( long count ) { require( buffer_ ); // sample rate must have been set if ( !count ) // optimization return; remove_silence( count ); // Allows synthesis slightly past time passed to end_frame(), as long as it's // not more than an output sample. // to do: kind of hacky, could add run_until() which keeps track of extra synthesis int const copy_extra = 1; // copy remaining samples to beginning and clear old samples long remain = samples_avail() + widest_impulse_ + copy_extra; if ( count >= remain ) memmove( buffer_, buffer_ + count, remain * sizeof (buf_t_) ); else memcpy( buffer_, buffer_ + count, remain * sizeof (buf_t_) ); memset( buffer_ + remain, sample_offset_ & 0xFF, count * sizeof (buf_t_) ); } #include BLARGG_ENABLE_OPTIMIZER long Blip_Buffer::read_samples( blip_sample_t* out, long max_samples, bool stereo ) { require( buffer_ ); // sample rate must have been set long count = samples_avail(); if ( count > max_samples ) count = max_samples; if ( !count ) return 0; // optimization int sample_offset_ = this->sample_offset_; int bass_shift = this->bass_shift; buf_t_* buf = buffer_; long accum = reader_accum; if ( !stereo ) { for ( long n = count; n--; ) { long s = accum >> accum_fract; accum -= accum >> bass_shift; accum += (long (*buf++) - sample_offset_) << accum_fract; *out++ = (blip_sample_t) s; // clamp sample if ( (BOOST::int16_t) s != s ) out [-1] = blip_sample_t (0x7FFF - (s >> 24)); } } else { for ( long n = count; n--; ) { long s = accum >> accum_fract; accum -= accum >> bass_shift; accum += (long (*buf++) - sample_offset_) << accum_fract; *out = (blip_sample_t) s; out += 2; // clamp sample if ( (BOOST::int16_t) s != s ) out [-2] = blip_sample_t (0x7FFF - (s >> 24)); } } reader_accum = accum; remove_samples( count ); return count; } void Blip_Buffer::mix_samples( const blip_sample_t* in, long count ) { buf_t_* buf = &buffer_ [(offset_ >> BLIP_BUFFER_ACCURACY) + (widest_impulse_ / 2 - 1)]; int prev = 0; while ( count-- ) { int s = *in++; *buf += s - prev; prev = s; ++buf; } *buf -= *--in; } lmms-1.1.3/plugins/papu/gb_apu/Blip_Buffer.h000066400000000000000000000155161247673406200207220ustar00rootroot00000000000000 // Buffer of sound samples into which band-limited waveforms can be synthesized // using Blip_Wave or Blip_Synth. // Blip_Buffer 0.3.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license. #ifndef BLIP_BUFFER_H #define BLIP_BUFFER_H #include "blargg_common.h" class Blip_Reader; // Source time unit. typedef long blip_time_t; // Type of sample produced. Signed 16-bit format. typedef BOOST::int16_t blip_sample_t; // Make buffer as large as possible (currently about 65000 samples) const int blip_default_length = 0; typedef unsigned long blip_resampled_time_t; // not documented class Blip_Buffer { public: // Construct an empty buffer. Blip_Buffer(); ~Blip_Buffer(); // Set output sample rate and buffer length in milliseconds (1/1000 sec), // then clear buffer. If length is not specified, make as large as possible. // If there is insufficient memory for the buffer, sets the buffer length // to 0 and returns error string (or propagates exception if compiler supports it). blargg_err_t set_sample_rate( long samples_per_sec, int msec_length = blip_default_length ); // Length of buffer, in milliseconds int length() const; // Current output sample rate long sample_rate() const; // Number of source time units per second void clock_rate( long ); long clock_rate() const; // Set frequency at which high-pass filter attenuation passes -3dB void bass_freq( int frequency ); // Remove all available samples and clear buffer to silence. If 'entire_buffer' is // false, just clear out any samples waiting rather than the entire buffer. void clear( bool entire_buffer = true ); // End current time frame of specified duration and make its samples available // (along with any still-unread samples) for reading with read_samples(). Begin // a new time frame at the end of the current frame. All transitions must have // been added before 'time'. void end_frame( blip_time_t time ); // Number of samples available for reading with read_samples() long samples_avail() const; // Read at most 'max_samples' out of buffer into 'dest', removing them from from // the buffer. Return number of samples actually read and removed. If stereo is // true, increment 'dest' one extra time after writing each sample, to allow // easy interleving of two channels into a stereo output buffer. long read_samples( blip_sample_t* dest, long max_samples, bool stereo = false ); // Remove 'count' samples from those waiting to be read void remove_samples( long count ); // Number of samples delay from synthesis to samples read out int output_latency() const; // Beta features // Number of raw samples that can be mixed within frame of specified duration long count_samples( blip_time_t duration ) const; // Mix 'count' samples from 'buf' into buffer. void mix_samples( const blip_sample_t* buf, long count ); // Count number of clocks needed until 'count' samples will be available. // If buffer can't even hold 'count' samples, returns number of clocks until // buffer is full. blip_time_t count_clocks( long count ) const; // not documented yet void remove_silence( long count ); blip_resampled_time_t resampled_time( blip_time_t t ) const { return t * blip_resampled_time_t (factor_) + offset_; } blip_resampled_time_t clock_rate_factor( long clock_rate ) const; blip_resampled_time_t resampled_duration( int t ) const { return t * blip_resampled_time_t (factor_); } private: // noncopyable Blip_Buffer( const Blip_Buffer& ); Blip_Buffer& operator = ( const Blip_Buffer& ); // Don't use the following members. They are public only for technical reasons. public: enum { sample_offset_ = 0x7F7F }; // repeated byte allows memset to clear buffer enum { widest_impulse_ = 24 }; typedef BOOST::uint16_t buf_t_; unsigned long factor_; blip_resampled_time_t offset_; buf_t_* buffer_; unsigned buffer_size_; private: long reader_accum; int bass_shift; long samples_per_sec; long clocks_per_sec; int bass_freq_; int length_; enum { accum_fract = 15 }; // less than 16 to give extra sample range friend class Blip_Reader; }; // Low-pass equalization parameters (see notes.txt) class blip_eq_t { public: blip_eq_t( double treble = 0 ); blip_eq_t( double treble, long cutoff, long sample_rate ); private: double treble; long cutoff; long sample_rate; friend class Blip_Impulse_; }; // not documented yet (see Multi_Buffer.cpp for an example of use) class Blip_Reader { const Blip_Buffer::buf_t_* buf; long accum; #ifdef __MWERKS__ void operator = ( struct foobar ); // helps optimizer #endif public: // avoid anything which might cause optimizer to put object in memory int begin( Blip_Buffer& blip_buf ) { buf = blip_buf.buffer_; accum = blip_buf.reader_accum; return blip_buf.bass_shift; } int read() const { return accum >> Blip_Buffer::accum_fract; } void next( int bass_shift = 9 ) { accum -= accum >> bass_shift; accum += ((long) *buf++ - Blip_Buffer::sample_offset_) << Blip_Buffer::accum_fract; } void end( Blip_Buffer& blip_buf ) { blip_buf.reader_accum = accum; } }; // End of public interface #ifndef BLIP_BUFFER_ACCURACY #define BLIP_BUFFER_ACCURACY 16 #endif const int blip_res_bits_ = 5; typedef BOOST::uint32_t blip_pair_t_; class Blip_Impulse_ { typedef BOOST::uint16_t imp_t; blip_eq_t eq; double volume_unit_; imp_t* impulses; imp_t* impulse; int width; int fine_bits; int res; bool generate; void fine_volume_unit(); void scale_impulse( int unit, imp_t* ) const; public: Blip_Buffer* buf; BOOST::uint32_t offset; void init( blip_pair_t_* impulses, int width, int res, int fine_bits = 0 ); void volume_unit( double ); void treble_eq( const blip_eq_t& ); }; inline blip_eq_t::blip_eq_t( double t ) : treble( t ), cutoff( 0 ), sample_rate( 44100 ) { } inline blip_eq_t::blip_eq_t( double t, long c, long sr ) : treble( t ), cutoff( c ), sample_rate( sr ) { } inline int Blip_Buffer::length() const { return length_; } inline long Blip_Buffer::samples_avail() const { return long (offset_ >> BLIP_BUFFER_ACCURACY); } inline long Blip_Buffer::sample_rate() const { return samples_per_sec; } inline void Blip_Buffer::end_frame( blip_time_t t ) { offset_ += t * factor_; /* assert(( "Blip_Buffer::end_frame(): Frame went past end of buffer", samples_avail() <= (long) buffer_size_ ));*/ } inline void Blip_Buffer::remove_silence( long count ) { /* assert(( "Blip_Buffer::remove_silence(): Tried to remove more samples than available", count <= samples_avail() ));*/ offset_ -= blip_resampled_time_t (count) << BLIP_BUFFER_ACCURACY; } inline int Blip_Buffer::output_latency() const { return widest_impulse_ / 2; } inline long Blip_Buffer::clock_rate() const { return clocks_per_sec; } inline void Blip_Buffer::clock_rate( long cps ) { clocks_per_sec = cps; factor_ = clock_rate_factor( cps ); } #include "Blip_Synth.h" #endif lmms-1.1.3/plugins/papu/gb_apu/Blip_Synth.h000066400000000000000000000156051247673406200206150ustar00rootroot00000000000000 // Blip_Synth and Blip_Wave are waveform transition synthesizers for adding // waveforms to a Blip_Buffer. // Blip_Buffer 0.3.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license. #ifndef BLIP_SYNTH_H #define BLIP_SYNTH_H #ifndef BLIP_BUFFER_H #include "Blip_Buffer.h" #endif // Quality level. Higher levels are slower, and worse in a few cases. // Use blip_good_quality as a starting point. const int blip_low_quality = 1; const int blip_med_quality = 2; const int blip_good_quality = 3; const int blip_high_quality = 4; // Blip_Synth is a transition waveform synthesizer which adds band-limited // offsets (transitions) into a Blip_Buffer. For a simpler interface, use // Blip_Wave (below). // // Range specifies the greatest expected offset that will occur. For a // waveform that goes between +amp and -amp, range should be amp * 2 (half // that if it only goes between +amp and 0). When range is large, a higher // accuracy scheme is used; to force this even when range is small, pass // the negative of range (i.e. -range). template class Blip_Synth { BOOST_STATIC_ASSERT( 1 <= quality && quality <= 5 ); BOOST_STATIC_ASSERT( -32768 <= range && range <= 32767 ); enum { abs_range = (range < 0) ? -range : range, fine_mode = (range > 512 || range < 0), width = (quality < 5 ? quality * 4 : Blip_Buffer::widest_impulse_), res = 1 << blip_res_bits_, impulse_size = width / 2 * (fine_mode + 1), base_impulses_size = width / 2 * (res / 2 + 1), fine_bits = (fine_mode ? (abs_range <= 64 ? 2 : abs_range <= 128 ? 3 : abs_range <= 256 ? 4 : abs_range <= 512 ? 5 : abs_range <= 1024 ? 6 : abs_range <= 2048 ? 7 : 8) : 0) }; blip_pair_t_ impulses [impulse_size * res * 2 + base_impulses_size]; Blip_Impulse_ impulse; void init() { impulse.init( impulses, width, res, fine_bits ); } public: Blip_Synth() { init(); } Blip_Synth( double volume ) { init(); this->volume( volume ); } // Configure low-pass filter (see notes.txt). Not optimized for real-time control void treble_eq( const blip_eq_t& eq ) { impulse.treble_eq( eq ); } // Set volume of a transition at amplitude 'range' by setting volume_unit // to v / range void volume( double v ) { impulse.volume_unit( v * (1.0 / abs_range) ); } // Set base volume unit of transitions, where 1.0 is a full swing between the // positive and negative extremes. Not optimized for real-time control. void volume_unit( double unit ) { impulse.volume_unit( unit ); } // Default Blip_Buffer used for output when none is specified for a given call Blip_Buffer* output() const { return impulse.buf; } void output( Blip_Buffer* b ) { impulse.buf = b; } // Add an amplitude offset (transition) with a magnitude of delta * volume_unit // into the specified buffer (default buffer if none specified) at the // specified source time. Delta can be positive or negative. To increase // performance by inlining code at the call site, use offset_inline(). void offset( blip_time_t, int delta, Blip_Buffer* ) const; void offset_resampled( blip_resampled_time_t, int delta, Blip_Buffer* ) const; void offset_resampled( blip_resampled_time_t t, int o ) const { offset_resampled( t, o, impulse.buf ); } void offset( blip_time_t t, int delta ) const { offset( t, delta, impulse.buf ); } void offset_inline( blip_time_t time, int delta, Blip_Buffer* buf ) const { offset_resampled( time * buf->factor_ + buf->offset_, delta, buf ); } void offset_inline( blip_time_t time, int delta ) const { offset_inline( time, delta, impulse.buf ); } }; // Blip_Wave is a synthesizer for adding a *single* waveform to a Blip_Buffer. // A wave is built from a series of delays and new amplitudes. This provides a // simpler interface than Blip_Synth, nothing more. template class Blip_Wave { Blip_Synth synth; blip_time_t time_; int last_amp; void init() { time_ = 0; last_amp = 0; } public: // Start wave at time 0 and amplitude 0 Blip_Wave() { init(); } Blip_Wave( double volume ) { init(); this->volume( volume ); } // See Blip_Synth for description void volume( double v ) { synth.volume( v ); } void volume_unit( double v ) { synth.volume_unit( v ); } void treble_eq( const blip_eq_t& eq){ synth.treble_eq( eq ); } Blip_Buffer* output() const { return synth.output(); } void output( Blip_Buffer* b ) { synth.output( b ); if ( !b ) time_ = last_amp = 0; } // Current time in frame blip_time_t time() const { return time_; } void time( blip_time_t t ) { time_ = t; } // Current amplitude of wave int amplitude() const { return last_amp; } void amplitude( int ); // Move forward by 't' time units void delay( blip_time_t t ) { time_ += t; } // End time frame of specified duration. Localize time to new frame. // If wave hadn't been run to end of frame, start it at beginning of new frame. void end_frame( blip_time_t duration ) { time_ -= duration; if ( time_ < 0 ) time_ = 0; } }; // End of public interface template void Blip_Wave::amplitude( int amp ) { int delta = amp - last_amp; last_amp = amp; synth.offset_inline( time_, delta ); } template inline void Blip_Synth::offset_resampled( blip_resampled_time_t time, int delta, Blip_Buffer* blip_buf ) const { typedef blip_pair_t_ pair_t; unsigned sample_index = (time >> BLIP_BUFFER_ACCURACY) & ~1; /* assert(( "Blip_Synth/Blip_wave: Went past end of buffer", sample_index < blip_buf->buffer_size_ ));*/ enum { const_offset = Blip_Buffer::widest_impulse_ / 2 - width / 2 }; pair_t* buf = (pair_t*) &blip_buf->buffer_ [const_offset + sample_index]; enum { shift = BLIP_BUFFER_ACCURACY - blip_res_bits_ }; enum { mask = res * 2 - 1 }; const pair_t* imp = &impulses [((time >> shift) & mask) * impulse_size]; pair_t offset = impulse.offset * delta; if ( !fine_bits ) { // normal mode for ( int n = width / 4; n; --n ) { pair_t t0 = buf [0] - offset; pair_t t1 = buf [1] - offset; t0 += imp [0] * delta; t1 += imp [1] * delta; imp += 2; buf [0] = t0; buf [1] = t1; buf += 2; } } else { // fine mode enum { sub_range = 1 << fine_bits }; delta += sub_range / 2; int delta2 = (delta & (sub_range - 1)) - sub_range / 2; delta >>= fine_bits; for ( int n = width / 4; n; --n ) { pair_t t0 = buf [0] - offset; pair_t t1 = buf [1] - offset; t0 += imp [0] * delta2; t0 += imp [1] * delta; t1 += imp [2] * delta2; t1 += imp [3] * delta; imp += 4; buf [0] = t0; buf [1] = t1; buf += 2; } } } template void Blip_Synth::offset( blip_time_t time, int delta, Blip_Buffer* buf ) const { offset_resampled( time * buf->factor_ + buf->offset_, delta, buf ); } #endif lmms-1.1.3/plugins/papu/gb_apu/Gb_Apu.cpp000066400000000000000000000134011247673406200202220ustar00rootroot00000000000000 // Gb_Snd_Emu 0.1.4. http://www.slack.net/~ant/libs/ #include "Gb_Apu.h" #include /* Copyright (C) 2003-2005 Shay Green. This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This module 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this module; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include BLARGG_SOURCE_BEGIN Gb_Apu::Gb_Apu() { square1.synth = &square_synth; square2.synth = &square_synth; square1.has_sweep = true; wave.synth = &other_synth; noise.synth = &other_synth; oscs [0] = &square1; oscs [1] = &square2; oscs [2] = &wave; oscs [3] = &noise; volume( 1.0 ); reset(); } Gb_Apu::~Gb_Apu() { } void Gb_Apu::treble_eq( const blip_eq_t& eq ) { square_synth.treble_eq( eq ); other_synth.treble_eq( eq ); } void Gb_Apu::volume( double vol ) { vol *= 0.60 / osc_count; square_synth.volume( vol ); other_synth.volume( vol ); } void Gb_Apu::output( Blip_Buffer* center, Blip_Buffer* left, Blip_Buffer* right ) { for ( int i = 0; i < osc_count; i++ ) osc_output( i, center, left, right ); } void Gb_Apu::reset() { next_frame_time = 0; last_time = 0; frame_count = 0; stereo_found = false; square1.reset(); square2.reset(); wave.reset(); noise.reset(); memset( regs, 0, sizeof regs ); } void Gb_Apu::osc_output( int index, Blip_Buffer* center, Blip_Buffer* left, Blip_Buffer* right ) { require( (unsigned) index < osc_count ); Gb_Osc& osc = *oscs [index]; if ( center && !left && !right ) { // mono left = center; right = center; } else { // must be silenced or stereo require( (!left && !right) || (left && right) ); } osc.outputs [1] = right; osc.outputs [2] = left; osc.outputs [3] = center; osc.output = osc.outputs [osc.output_select]; } void Gb_Apu::run_until( gb_time_t end_time ) { require( end_time >= last_time ); // end_time must not be before previous time if ( end_time == last_time ) return; while ( true ) { gb_time_t time = next_frame_time; if ( time > end_time ) time = end_time; // run oscillators for ( int i = 0; i < osc_count; ++i ) { Gb_Osc& osc = *oscs [i]; if ( osc.output ) { if ( osc.output != osc.outputs [3] ) stereo_found = true; osc.run( last_time, time ); } } last_time = time; if ( time == end_time ) break; next_frame_time += 4194304 / 256; // 256 Hz // 256 Hz actions square1.clock_length(); square2.clock_length(); wave.clock_length(); noise.clock_length(); frame_count = (frame_count + 1) & 3; if ( frame_count == 0 ) { // 64 Hz actions square1.clock_envelope(); square2.clock_envelope(); noise.clock_envelope(); } if ( frame_count & 1 ) square1.clock_sweep(); // 128 Hz action } } bool Gb_Apu::end_frame( gb_time_t end_time ) { if ( end_time > last_time ) run_until( end_time ); assert( next_frame_time >= end_time ); next_frame_time -= end_time; assert( last_time >= end_time ); last_time -= end_time; bool result = stereo_found; stereo_found = false; return result; } void Gb_Apu::write_register( gb_time_t time, gb_addr_t addr, int data ) { require( (unsigned) data < 0x100 ); int reg = addr - start_addr; if ( (unsigned) reg >= register_count ) return; run_until( time ); regs [reg] = data; if ( addr < 0xff24 ) { // oscillator int index = reg / 5; oscs [index]->write_register( reg - index * 5, data ); } // added else if ( addr == 0xff24 ) { int global_volume = data & 7; int old_volume = square1.global_volume; if ( old_volume != global_volume ) { int any_enabled = false; for ( int i = 0; i < osc_count; i++ ) { Gb_Osc& osc = *oscs [i]; if ( osc.enabled ) { if ( osc.last_amp ) { int new_amp = osc.last_amp * global_volume / osc.global_volume; if ( osc.output ) square_synth.offset( time, new_amp - osc.last_amp, osc.output ); osc.last_amp = new_amp; } any_enabled |= osc.volume; } osc.global_volume = global_volume; } if ( !any_enabled && square1.outputs [3] ) square_synth.offset( time, (global_volume - old_volume) * 15 * 2, square1.outputs [3] ); } } else if ( addr == 0xff25 || addr == 0xff26 ) { int mask = (regs [0xff26 - start_addr] & 0x80) ? ~0 : 0; int flags = regs [0xff25 - start_addr] & mask; // left/right assignments for ( int i = 0; i < osc_count; i++ ) { Gb_Osc& osc = *oscs [i]; osc.enabled &= mask; int bits = flags >> i; Blip_Buffer* old_output = osc.output; osc.output_select = (bits >> 3 & 2) | (bits & 1); osc.output = osc.outputs [osc.output_select]; if ( osc.output != old_output && osc.last_amp ) { if ( old_output ) square_synth.offset( time, -osc.last_amp, old_output ); osc.last_amp = 0; } } } else if ( addr >= 0xff30 ) { int index = (addr & 0x0f) * 2; wave.wave [index] = data >> 4; wave.wave [index + 1] = data & 0x0f; } } int Gb_Apu::read_register( gb_time_t time, gb_addr_t addr ) { // function now takes actual address, i.e. 0xFFXX require( start_addr <= addr && addr < end_addr ); run_until( time ); int data = regs [addr - start_addr]; if ( addr == 0xff26 ) { data &= 0xf0; for ( int i = 0; i < osc_count; i++ ) { const Gb_Osc& osc = *oscs [i]; if ( osc.enabled && (osc.length || !osc.length_enabled) ) data |= 1 << i; } } return data; } lmms-1.1.3/plugins/papu/gb_apu/Gb_Apu.h000066400000000000000000000046221247673406200176740ustar00rootroot00000000000000 // Nintendo Game Boy PAPU sound chip emulator // Gb_Snd_Emu 0.1.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license. #ifndef GB_APU_H #define GB_APU_H typedef long gb_time_t; // clock cycle count typedef unsigned gb_addr_t; // 16-bit address #include "Gb_Oscs.h" class Gb_Apu { public: Gb_Apu(); ~Gb_Apu(); // Set overall volume of all oscillators, where 1.0 is full volume void volume( double ); // Set treble equalization void treble_eq( const blip_eq_t& ); // Reset oscillators and internal state void reset(); // Assign all oscillator outputs to specified buffer(s). If buffer // is NULL, silence all oscillators. void output( Blip_Buffer* mono ); void output( Blip_Buffer* center, Blip_Buffer* left, Blip_Buffer* right ); // Assign single oscillator output to buffer(s). Valid indicies are 0 to 3, // which refer to Square 1, Square 2, Wave, and Noise. // If buffer is NULL, silence oscillator. enum { osc_count = 4 }; void osc_output( int index, Blip_Buffer* mono ); void osc_output( int index, Blip_Buffer* center, Blip_Buffer* left, Blip_Buffer* right ); // Reads and writes at addr must satisfy start_addr <= addr <= end_addr enum { start_addr = 0xff10 }; enum { end_addr = 0xff3f }; enum { register_count = end_addr - start_addr + 1 }; // Write 'data' to address at specified time void write_register( gb_time_t, gb_addr_t, int data ); // Read from address at specified time int read_register( gb_time_t, gb_addr_t ); // Run all oscillators up to specified time, end current time frame, then // start a new frame at time 0. Return true if any oscillators added // sound to one of the left/right buffers, false if they only added // to the center buffer. bool end_frame( gb_time_t ); private: // noncopyable Gb_Apu( const Gb_Apu& ); Gb_Apu& operator = ( const Gb_Apu& ); Gb_Osc* oscs [osc_count]; gb_time_t next_frame_time; gb_time_t last_time; int frame_count; bool stereo_found; Gb_Square square1; Gb_Square square2; Gb_Wave wave; Gb_Noise noise; BOOST::uint8_t regs [register_count]; Gb_Square::Synth square_synth; // shared between squares Gb_Wave::Synth other_synth; // shared between wave and noise void run_until( gb_time_t ); }; inline void Gb_Apu::output( Blip_Buffer* b ) { output( b, NULL, NULL ); } inline void Gb_Apu::osc_output( int i, Blip_Buffer* b ) { osc_output( i, b, NULL, NULL ); } #endif lmms-1.1.3/plugins/papu/gb_apu/Gb_Oscs.cpp000066400000000000000000000214131247673406200204060ustar00rootroot00000000000000 // Gb_Snd_Emu 0.1.4. http://www.slack.net/~ant/libs/ #include "Gb_Apu.h" #include /* Copyright (C) 2003-2005 Shay Green. This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This module 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this module; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include BLARGG_SOURCE_BEGIN const int trigger = 0x80; // Gb_Osc Gb_Osc::Gb_Osc() { output = NULL; outputs [0] = NULL; outputs [1] = NULL; outputs [2] = NULL; outputs [3] = NULL; } void Gb_Osc::reset() { delay = 0; last_amp = 0; period = 2048; volume = 0; global_volume = 7; // added frequency = 0; length = 0; enabled = false; length_enabled = false; output_select = 3; output = outputs [output_select]; } void Gb_Osc::clock_length() { if ( length_enabled && length ) --length; } void Gb_Osc::write_register( int reg, int value ) { if ( reg == 4 ) length_enabled = value & 0x40; } // Gb_Env void Gb_Env::reset() { env_period = 0; env_dir = 0; env_delay = 0; new_volume = 0; Gb_Osc::reset(); } Gb_Env::Gb_Env() { } void Gb_Env::clock_envelope() { if ( env_delay && !--env_delay ) { env_delay = env_period; if ( env_dir ) { if ( volume < 15 ) ++volume; } else if ( volume > 0 ) { --volume; } } } void Gb_Env::write_register( int reg, int value ) { if ( reg == 2 ) { env_period = value & 7; env_dir = value & 8; volume = new_volume = value >> 4; } else if ( reg == 4 && (value & trigger) ) { env_delay = env_period; volume = new_volume; enabled = true; } Gb_Osc::write_register( reg, value ); } // Gb_Square void Gb_Square::reset() { phase = 1; duty = 1; sweep_period = 0; sweep_delay = 0; sweep_shift = 0; sweep_dir = 0; sweep_freq = 0; new_length = 0; Gb_Env::reset(); } Gb_Square::Gb_Square() { has_sweep = false; } void Gb_Square::clock_sweep() { if ( sweep_period && sweep_delay && !--sweep_delay ) { sweep_delay = sweep_period; frequency = sweep_freq; period = (2048 - frequency) * 4; int offset = sweep_freq >> sweep_shift; if ( sweep_dir ) offset = -offset; sweep_freq += offset; if ( sweep_freq < 0 ) { sweep_freq = 0; } else if ( sweep_freq >= 2048 ) { sweep_delay = 0; sweep_freq = 2048; // stop sound output } } } void Gb_Square::write_register( int reg, int value ) { static unsigned char const duty_table [4] = { 1, 2, 4, 6 }; switch ( reg ) { case 0: sweep_period = (value >> 4) & 7; // changed sweep_shift = value & 7; sweep_dir = value & 0x08; break; case 1: new_length = length = 64 - (value & 0x3f); duty = duty_table [value >> 6]; break; case 3: frequency = (frequency & ~0xFF) + value; length = new_length; break; case 4: frequency = (value & 7) * 0x100 + (frequency & 0xFF); length = new_length; if ( value & trigger ) { sweep_freq = frequency; if ( has_sweep && sweep_period && sweep_shift ) { sweep_delay = 1; clock_sweep(); } } break; } period = (2048 - frequency) * 4; Gb_Env::write_register( reg, value ); } void Gb_Square::run( gb_time_t time, gb_time_t end_time ) { // to do: when frequency goes above 20000 Hz output should actually be 1/2 volume // rather than 0 if ( !enabled || (!length && length_enabled) || !volume || sweep_freq == 2048 || !frequency || period < 27 ) { if ( last_amp ) { synth->offset( time, -last_amp, output ); last_amp = 0; } delay = 0; } else { int amp = (phase < duty) ? volume : -volume; amp *= global_volume; if ( amp != last_amp ) { synth->offset( time, amp - last_amp, output ); last_amp = amp; } time += delay; if ( time < end_time ) { Blip_Buffer* const output = this->output; const int duty = this->duty; int phase = this->phase; amp *= 2; do { phase = (phase + 1) & 7; if ( phase == 0 || phase == duty ) { amp = -amp; synth->offset_inline( time, amp, output ); } time += period; } while ( time < end_time ); this->phase = phase; last_amp = amp >> 1; } delay = time - end_time; } } // Gb_Wave void Gb_Wave::reset() { volume_shift = 0; wave_pos = 0; new_length = 0; memset( wave, 0, sizeof wave ); Gb_Osc::reset(); } Gb_Wave::Gb_Wave() { } void Gb_Wave::write_register( int reg, int value ) { switch ( reg ) { case 0: new_enabled = value & 0x80; enabled &= new_enabled; break; case 1: new_length = length = 256 - value; break; case 2: volume = ((value >> 5) & 3); volume_shift = (volume - 1) & 7; // silence = 7 break; case 3: frequency = (frequency & ~0xFF) + value; break; case 4: frequency = (value & 7) * 0x100 + (frequency & 0xFF); if ( new_enabled && (value & trigger) ) { wave_pos = 0; length = new_length; enabled = true; } break; } period = (2048 - frequency) * 2; Gb_Osc::write_register( reg, value ); } void Gb_Wave::run( gb_time_t time, gb_time_t end_time ) { // to do: when frequency goes above 20000 Hz output should actually be 1/2 volume // rather than 0 if ( !enabled || (!length && length_enabled) || !volume || !frequency || period < 7 ) { if ( last_amp ) { synth->offset( time, -last_amp, output ); last_amp = 0; } delay = 0; } else { int const vol_factor = global_volume * 2; // wave data or shift may have changed int diff = (wave [wave_pos] >> volume_shift) * vol_factor - last_amp; if ( diff ) { last_amp += diff; synth->offset( time, diff, output ); } time += delay; if ( time < end_time ) { int const volume_shift = this->volume_shift; int wave_pos = this->wave_pos; do { wave_pos = unsigned (wave_pos + 1) % wave_size; int amp = (wave [wave_pos] >> volume_shift) * vol_factor; int delta = amp - last_amp; if ( delta ) { last_amp = amp; synth->offset_inline( time, delta, output ); } time += period; } while ( time < end_time ); this->wave_pos = wave_pos; } delay = time - end_time; } } // Gb_Noise void Gb_Noise::reset() { bits = 1; tap = 14; Gb_Env::reset(); } Gb_Noise::Gb_Noise() { } void Gb_Noise::write_register( int reg, int value ) { if ( reg == 1 ) { new_length = length = 64 - (value & 0x3f); } else if ( reg == 2 ) { // based on VBA code, noise is the only exception to the envelope code // while the volume level here is applied when the channel is enabled, // current volume is only affected by writes to this register if volume // is zero and direction is up... (definitely needs verification) int temp = volume; Gb_Env::write_register( reg, value ); if ( ( value & 0xF8 ) != 0 ) volume = temp; return; } else if ( reg == 3 ) { tap = 14 - (value & 8); // noise formula and frequency tested against Metroid 2 and Zelda LA int divisor = (value & 7) * 16; if ( !divisor ) divisor = 8; period = divisor << (value >> 4); } else if ( reg == 4 && value & trigger ) { bits = ~0u; length = new_length; } Gb_Env::write_register( reg, value ); } #include BLARGG_ENABLE_OPTIMIZER void Gb_Noise::run( gb_time_t time, gb_time_t end_time ) { if ( !enabled || (!length && length_enabled) || !volume ) { if ( last_amp ) { synth->offset( time, -last_amp, output ); last_amp = 0; } delay = 0; } else { int amp = bits & 1 ? -volume : volume; amp *= global_volume; if ( amp != last_amp ) { synth->offset( time, amp - last_amp, output ); last_amp = amp; } time += delay; if ( time < end_time ) { Blip_Buffer* const output = this->output; // keep parallel resampled time to eliminate multiplication in the loop const blip_resampled_time_t resampled_period = output->resampled_duration( period ); blip_resampled_time_t resampled_time = output->resampled_time( time ); const unsigned mask = ~(1u << tap); unsigned bits = this->bits; amp *= 2; do { unsigned feedback = bits; bits >>= 1; feedback = 1 & (feedback ^ bits); time += period; bits = (feedback << tap) | (bits & mask); // feedback just happens to be true only when the level needs to change // (the previous and current bits are different) if ( feedback ) { amp = -amp; synth->offset_resampled( resampled_time, amp, output ); } resampled_time += resampled_period; } while ( time < end_time ); this->bits = bits; last_amp = amp >> 1; } delay = time - end_time; } } lmms-1.1.3/plugins/papu/gb_apu/Gb_Oscs.h000066400000000000000000000034031247673406200200520ustar00rootroot00000000000000 // Private oscillators used by Gb_Apu // Gb_Snd_Emu 0.1.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license. #ifndef GB_OSCS_H #define GB_OSCS_H #include "Blip_Buffer.h" enum { gb_apu_max_vol = 7 }; struct Gb_Osc { Blip_Buffer* outputs [4]; // NULL, right, left, center Blip_Buffer* output; int output_select; int delay; int last_amp; int period; int volume; int global_volume; int frequency; int length; int new_length; bool enabled; bool length_enabled; Gb_Osc(); void clock_length(); void reset(); virtual void run( gb_time_t begin, gb_time_t end ) = 0; virtual void write_register( int reg, int value ); }; struct Gb_Env : Gb_Osc { int env_period; int env_dir; int env_delay; int new_volume; Gb_Env(); void reset(); void clock_envelope(); void write_register( int, int ); }; struct Gb_Square : Gb_Env { int phase; int duty; int sweep_period; int sweep_delay; int sweep_shift; int sweep_dir; int sweep_freq; bool has_sweep; typedef Blip_Synth Synth; const Synth* synth; Gb_Square(); void reset(); void run( gb_time_t, gb_time_t ); void write_register( int, int ); void clock_sweep(); }; struct Gb_Wave : Gb_Osc { int volume_shift; unsigned wave_pos; enum { wave_size = 32 }; bool new_enabled; BOOST::uint8_t wave [wave_size]; typedef Blip_Synth Synth; const Synth* synth; Gb_Wave(); void reset(); void run( gb_time_t, gb_time_t ); void write_register( int, int ); }; struct Gb_Noise : Gb_Env { unsigned bits; int tap; typedef Blip_Synth Synth; const Synth* synth; Gb_Noise(); void reset(); void run( gb_time_t, gb_time_t ); void write_register( int, int ); }; #endif lmms-1.1.3/plugins/papu/gb_apu/LGPL.txt000066400000000000000000000634761247673406200177010ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! lmms-1.1.3/plugins/papu/gb_apu/Multi_Buffer.cpp000066400000000000000000000107561247673406200214620ustar00rootroot00000000000000 // Blip_Buffer 0.3.4. http://www.slack.net/~ant/libs/ #include "Multi_Buffer.h" /* Copyright (C) 2003-2005 Shay Green. This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This module 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this module; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include BLARGG_SOURCE_BEGIN Multi_Buffer::Multi_Buffer( int spf ) : samples_per_frame_( spf ) { length_ = 0; sample_rate_ = 0; channels_changed_count_ = 1; } blargg_err_t Multi_Buffer::set_channel_count( int ) { return blargg_success; } Mono_Buffer::Mono_Buffer() : Multi_Buffer( 1 ) { } Mono_Buffer::~Mono_Buffer() { } blargg_err_t Mono_Buffer::set_sample_rate( long rate, int msec ) { BLARGG_RETURN_ERR( buf.set_sample_rate( rate, msec ) ); return Multi_Buffer::set_sample_rate( buf.sample_rate(), buf.length() ); } // Silent_Buffer Silent_Buffer::Silent_Buffer() : Multi_Buffer( 1 ) // 0 channels would probably confuse { chan.left = NULL; chan.center = NULL; chan.right = NULL; } // Mono_Buffer Mono_Buffer::channel_t Mono_Buffer::channel( int index ) { channel_t ch; ch.center = &buf; ch.left = &buf; ch.right = &buf; return ch; } void Mono_Buffer::end_frame( blip_time_t t, bool ) { buf.end_frame( t ); } // Stereo_Buffer Stereo_Buffer::Stereo_Buffer() : Multi_Buffer( 2 ) { chan.center = &bufs [0]; chan.left = &bufs [1]; chan.right = &bufs [2]; } Stereo_Buffer::~Stereo_Buffer() { } blargg_err_t Stereo_Buffer::set_sample_rate( long rate, int msec ) { for ( int i = 0; i < buf_count; i++ ) BLARGG_RETURN_ERR( bufs [i].set_sample_rate( rate, msec ) ); return Multi_Buffer::set_sample_rate( bufs [0].sample_rate(), bufs [0].length() ); } void Stereo_Buffer::clock_rate( long rate ) { for ( int i = 0; i < buf_count; i++ ) bufs [i].clock_rate( rate ); } void Stereo_Buffer::bass_freq( int bass ) { for ( unsigned i = 0; i < buf_count; i++ ) bufs [i].bass_freq( bass ); } void Stereo_Buffer::clear() { stereo_added = false; was_stereo = false; for ( int i = 0; i < buf_count; i++ ) bufs [i].clear(); } void Stereo_Buffer::end_frame( blip_time_t clock_count, bool stereo ) { for ( unsigned i = 0; i < buf_count; i++ ) bufs [i].end_frame( clock_count ); stereo_added |= stereo; } long Stereo_Buffer::read_samples( blip_sample_t* out, long count ) { require( !(count & 1) ); // count must be even count = (unsigned) count / 2; long avail = bufs [0].samples_avail(); if ( count > avail ) count = avail; if ( count ) { if ( stereo_added || was_stereo ) { mix_stereo( out, count ); bufs [0].remove_samples( count ); bufs [1].remove_samples( count ); bufs [2].remove_samples( count ); } else { mix_mono( out, count ); bufs [0].remove_samples( count ); bufs [1].remove_silence( count ); bufs [2].remove_silence( count ); } // to do: this might miss opportunities for optimization if ( !bufs [0].samples_avail() ) { was_stereo = stereo_added; stereo_added = false; } } return count * 2; } #include BLARGG_ENABLE_OPTIMIZER void Stereo_Buffer::mix_stereo( blip_sample_t* out, long count ) { Blip_Reader left; Blip_Reader right; Blip_Reader center; left.begin( bufs [1] ); right.begin( bufs [2] ); int bass = center.begin( bufs [0] ); while ( count-- ) { int c = center.read(); long l = c + left.read(); long r = c + right.read(); center.next( bass ); out [0] = l; out [1] = r; out += 2; if ( (BOOST::int16_t) l != l ) out [-2] = 0x7FFF - (l >> 24); left.next( bass ); right.next( bass ); if ( (BOOST::int16_t) r != r ) out [-1] = 0x7FFF - (r >> 24); } center.end( bufs [0] ); right.end( bufs [2] ); left.end( bufs [1] ); } void Stereo_Buffer::mix_mono( blip_sample_t* out, long count ) { Blip_Reader in; int bass = in.begin( bufs [0] ); while ( count-- ) { long s = in.read(); in.next( bass ); out [0] = s; out [1] = s; out += 2; if ( (BOOST::int16_t) s != s ) { s = 0x7FFF - (s >> 24); out [-2] = s; out [-1] = s; } } in.end( bufs [0] ); } lmms-1.1.3/plugins/papu/gb_apu/Multi_Buffer.h000066400000000000000000000116311247673406200211200ustar00rootroot00000000000000 // Multi-channel sound buffer interface, and basic mono and stereo buffers // Blip_Buffer 0.3.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license. #ifndef MULTI_BUFFER_H #define MULTI_BUFFER_H #include "Blip_Buffer.h" // Interface to one or more Blip_Buffers mapped to one or more channels // consisting of left, center, and right buffers. class Multi_Buffer { public: Multi_Buffer( int samples_per_frame ); virtual ~Multi_Buffer() { } // Set the number of channels available virtual blargg_err_t set_channel_count( int ); // Get indexed channel, from 0 to channel count - 1 struct channel_t { Blip_Buffer* center; Blip_Buffer* left; Blip_Buffer* right; }; virtual channel_t channel( int index ) = 0; // See Blip_Buffer.h virtual blargg_err_t set_sample_rate( long rate, int msec = blip_default_length ) = 0; virtual void clock_rate( long ) = 0; virtual void bass_freq( int ) = 0; virtual void clear() = 0; long sample_rate() const; // Length of buffer, in milliseconds int length() const; // See Blip_Buffer.h. For optimal operation, pass false for 'added_stereo' // if nothing was added to the left and right buffers of any channel for // this time frame. virtual void end_frame( blip_time_t, bool added_stereo = true ) = 0; // Number of samples per output frame (1 = mono, 2 = stereo) int samples_per_frame() const; // Count of changes to channel configuration. Incremented whenever // a change is made to any of the Blip_Buffers for any channel. unsigned channels_changed_count() { return channels_changed_count_; } // See Blip_Buffer.h virtual long read_samples( blip_sample_t*, long ) = 0; virtual long samples_avail() const = 0; protected: void channels_changed() { channels_changed_count_++; } private: // noncopyable Multi_Buffer( const Multi_Buffer& ); Multi_Buffer& operator = ( const Multi_Buffer& ); unsigned channels_changed_count_; long sample_rate_; int length_; int const samples_per_frame_; }; // Uses a single buffer and outputs mono samples. class Mono_Buffer : public Multi_Buffer { Blip_Buffer buf; public: Mono_Buffer(); ~Mono_Buffer(); // Buffer used for all channels Blip_Buffer* center() { return &buf; } // See Multi_Buffer blargg_err_t set_sample_rate( long rate, int msec = blip_default_length ); void clock_rate( long ); void bass_freq( int ); void clear(); channel_t channel( int ); void end_frame( blip_time_t, bool unused = true ); long samples_avail() const; long read_samples( blip_sample_t*, long ); }; // Uses three buffers (one for center) and outputs stereo sample pairs. class Stereo_Buffer : public Multi_Buffer { public: Stereo_Buffer(); ~Stereo_Buffer(); // Buffers used for all channels Blip_Buffer* center() { return &bufs [0]; } Blip_Buffer* left() { return &bufs [1]; } Blip_Buffer* right() { return &bufs [2]; } // See Multi_Buffer blargg_err_t set_sample_rate( long, int msec = blip_default_length ); void clock_rate( long ); void bass_freq( int ); void clear(); channel_t channel( int index ); void end_frame( blip_time_t, bool added_stereo = true ); long samples_avail() const; long read_samples( blip_sample_t*, long ); private: enum { buf_count = 3 }; Blip_Buffer bufs [buf_count]; channel_t chan; bool stereo_added; bool was_stereo; void mix_stereo( blip_sample_t*, long ); void mix_mono( blip_sample_t*, long ); }; // Silent_Buffer generates no samples, useful where no sound is wanted class Silent_Buffer : public Multi_Buffer { channel_t chan; public: Silent_Buffer(); blargg_err_t set_sample_rate( long rate, int msec = blip_default_length ); void clock_rate( long ) { } void bass_freq( int ) { } void clear() { } channel_t channel( int ) { return chan; } void end_frame( blip_time_t, bool unused = true ) { } long samples_avail() const { return 0; } long read_samples( blip_sample_t*, long ) { return 0; } }; // End of public interface inline blargg_err_t Silent_Buffer::set_sample_rate( long rate, int msec ) { return Multi_Buffer::set_sample_rate( rate, msec ); } inline blargg_err_t Multi_Buffer::set_sample_rate( long rate, int msec ) { sample_rate_ = rate; length_ = msec; return blargg_success; } inline int Multi_Buffer::samples_per_frame() const { return samples_per_frame_; } inline long Stereo_Buffer::samples_avail() const { return bufs [0].samples_avail() * 2; } inline Stereo_Buffer::channel_t Stereo_Buffer::channel( int index ) { return chan; } inline long Multi_Buffer::sample_rate() const { return sample_rate_; } inline int Multi_Buffer::length() const { return length_; } inline void Mono_Buffer::clock_rate( long rate ) { buf.clock_rate( rate ); } inline void Mono_Buffer::clear() { buf.clear(); } inline void Mono_Buffer::bass_freq( int freq ) { buf.bass_freq( freq ); } inline long Mono_Buffer::read_samples( blip_sample_t* p, long s ) { return buf.read_samples( p, s ); } inline long Mono_Buffer::samples_avail() const { return buf.samples_avail(); } #endif lmms-1.1.3/plugins/papu/gb_apu/blargg_common.h000066400000000000000000000077241247673406200213530ustar00rootroot00000000000000 // Sets up common environment for Shay Green's libraries. // // Don't modify this file directly; #define HAVE_CONFIG_H and put your // configuration into "config.h". // Copyright (C) 2004-2005 Shay Green. #ifndef BLARGG_COMMON_H #define BLARGG_COMMON_H // Allow prefix configuration file *which can re-include blargg_common.h* // (probably indirectly). #ifdef HAVE_CONFIG_H #undef BLARGG_COMMON_H #include "config.h" #define BLARGG_COMMON_H #endif // Source files use #include BLARGG_ENABLE_OPTIMIZER before performance-critical code #ifndef BLARGG_ENABLE_OPTIMIZER #define BLARGG_ENABLE_OPTIMIZER "blargg_common.h" #endif // Source files have #include BLARGG_SOURCE_BEGIN at the beginning #ifndef BLARGG_SOURCE_BEGIN #define BLARGG_SOURCE_BEGIN "blargg_source.h" #endif // Determine compiler's language support #if defined (__MWERKS__) // Metrowerks CodeWarrior #define BLARGG_COMPILER_HAS_NAMESPACE 1 #if !__option(bool) #define BLARGG_COMPILER_HAS_BOOL 0 #endif #elif defined (_MSC_VER) // Microsoft Visual C++ #if _MSC_VER < 1100 #define BLARGG_COMPILER_HAS_BOOL 0 #endif #elif defined (__GNUC__) // GNU C++ #define BLARGG_COMPILER_HAS_NAMESPACE 1 #define BLARGG_COMPILER_HAS_BOOL 1 #elif defined (__MINGW32__) // Mingw? #define BLARGG_COMPILER_HAS_BOOL 1 #elif __cplusplus < 199711 // Pre-ISO C++ compiler #define BLARGG_COMPILER_HAS_BOOL 0 #define STATIC_CAST( type ) (type) #endif // STATIC_CAST(T) (expr) -> static_cast< T > (expr) #ifndef STATIC_CAST #define STATIC_CAST( type ) static_cast< type > #endif // Set up boost #include "boost/config.hpp" #ifndef BOOST_MINIMAL #define BOOST boost #ifndef BLARGG_COMPILER_HAS_NAMESPACE #define BLARGG_COMPILER_HAS_NAMESPACE 1 #endif #ifndef BLARGG_COMPILER_HAS_BOOL #define BLARGG_COMPILER_HAS_BOOL 1 #endif #endif // Bool support #ifndef BLARGG_COMPILER_HAS_BOOL #define BLARGG_COMPILER_HAS_BOOL 1 #elif !BLARGG_COMPILER_HAS_BOOL typedef int bool; const bool true = 1; const bool false = 0; #endif // Set up namespace support #ifndef BLARGG_COMPILER_HAS_NAMESPACE #define BLARGG_COMPILER_HAS_NAMESPACE 0 #endif #ifndef BLARGG_USE_NAMESPACE #define BLARGG_USE_NAMESPACE BLARGG_COMPILER_HAS_NAMESPACE #endif #ifndef BOOST #if BLARGG_USE_NAMESPACE #define BOOST boost #else #define BOOST #endif #endif #undef BLARGG_BEGIN_NAMESPACE #undef BLARGG_END_NAMESPACE #if BLARGG_USE_NAMESPACE #define BLARGG_BEGIN_NAMESPACE( name ) namespace name { #define BLARGG_END_NAMESPACE } #else #define BLARGG_BEGIN_NAMESPACE( name ) #define BLARGG_END_NAMESPACE #endif #if BLARGG_USE_NAMESPACE #define STD std #else #define STD #endif // BOOST::uint8_t, BOOST::int16_t, etc. #include "boost/cstdint.hpp" // BOOST_STATIC_ASSERT( expr ) #include "boost/static_assert.hpp" // Common standard headers #if BLARGG_COMPILER_HAS_NAMESPACE #include #include #else #include #include #endif // blargg_err_t (NULL on success, otherwise error string) typedef const char* blargg_err_t; const blargg_err_t blargg_success = 0; // BLARGG_NEW is used in place of 'new' to create objects. By default, // plain new is used. #ifndef BLARGG_NEW #define BLARGG_NEW new #endif // BLARGG_BIG_ENDIAN and BLARGG_LITTLE_ENDIAN // Only needed if modules are used which must know byte order. #if !defined (BLARGG_BIG_ENDIAN) && !defined (BLARGG_LITTLE_ENDIAN) #if defined (__powerc) || defined (macintosh) #define BLARGG_BIG_ENDIAN 1 #elif defined (_MSC_VER) && defined (_M_IX86) #define BLARGG_LITTLE_ENDIAN 1 #endif #endif // BLARGG_NONPORTABLE (allow use of nonportable optimizations/features) #ifndef BLARGG_NONPORTABLE #define BLARGG_NONPORTABLE 0 #endif #ifdef BLARGG_MOST_PORTABLE #error "BLARGG_MOST_PORTABLE has been removed; use BLARGG_NONPORTABLE." #endif // BLARGG_CPU_* #if !defined (BLARGG_CPU_POWERPC) && !defined (BLARGG_CPU_X86) #if defined (__powerc) #define BLARGG_CPU_POWERPC 1 #elif defined (_MSC_VER) && defined (_M_IX86) #define BLARGG_CPU_X86 1 #endif #endif #endif lmms-1.1.3/plugins/papu/gb_apu/blargg_source.h000066400000000000000000000040221247673406200213470ustar00rootroot00000000000000 // By default, #included at beginning of library source files // Copyright (C) 2005 Shay Green. #ifndef BLARGG_SOURCE_H #define BLARGG_SOURCE_H // If debugging is enabled, abort program if expr is false. Meant for checking // internal state and consistency. A failed assertion indicates a bug in the module. // void assert( bool expr ); #include // If debugging is enabled and expr is false, abort program. Meant for checking // caller-supplied parameters and operations that are outside the control of the // module. A failed requirement indicates a bug outside the module. // void require( bool expr ); #undef require #define require( expr ) assert((/* "unmet requirement",*/ expr )) // Like printf() except output goes to debug log file. Might be defined to do // nothing (not even evaluate its arguments). // void dprintf( const char* format, ... ); #undef dprintf #define dprintf (1) ? ((void) 0) : (void) // If enabled, evaluate expr and if false, make debug log entry with source file // and line. Meant for finding situations that should be examined further, but that // don't indicate a problem. In all cases, execution continues normally. #undef check #define check( expr ) ((void) 0) // If expr returns non-NULL error string, return it from current function, otherwise continue. #define BLARGG_RETURN_ERR( expr ) do { \ blargg_err_t blargg_return_err_ = (expr); \ if ( blargg_return_err_ ) return blargg_return_err_; \ } while ( 0 ) // If ptr is NULL, return out of memory error string. #define BLARGG_CHECK_ALLOC( ptr ) do { if ( !(ptr) ) return "Out of memory"; } while ( 0 ) // Avoid any macros which evaluate their arguments multiple times #undef min #undef max // using const references generates crappy code, and I am currenly only using these // for built-in types, so they take arguments by value template inline T min( T x, T y ) { if ( x < y ) return x; return y; } template inline T max( T x, T y ) { if ( x < y ) return y; return x; } #endif lmms-1.1.3/plugins/papu/gb_apu/boost/000077500000000000000000000000001247673406200175105ustar00rootroot00000000000000lmms-1.1.3/plugins/papu/gb_apu/boost/config.hpp000066400000000000000000000003341247673406200214660ustar00rootroot00000000000000 // Boost substitute. For full boost library see http://boost.org #ifndef BOOST_CONFIG_HPP #define BOOST_CONFIG_HPP #define BOOST_MINIMAL 1 #define BLARGG_BEGIN_NAMESPACE( name ) #define BLARGG_END_NAMESPACE #endif lmms-1.1.3/plugins/papu/gb_apu/boost/cstdint.hpp000066400000000000000000000014721247673406200216750ustar00rootroot00000000000000 // Boost substitute. For full boost library see http://boost.org #ifndef BOOST_CSTDINT_HPP #define BOOST_CSTDINT_HPP #if BLARGG_USE_NAMESPACE #include #else #include #endif BLARGG_BEGIN_NAMESPACE( boost ) #if UCHAR_MAX != 0xFF || SCHAR_MAX != 0x7F # error "No suitable 8-bit type available" #endif typedef unsigned char uint8_t; typedef signed char int8_t; #if USHRT_MAX != 0xFFFF # error "No suitable 16-bit type available" #endif typedef short int16_t; typedef unsigned short uint16_t; #if ULONG_MAX == 0xFFFFFFFF typedef long int32_t; typedef unsigned long uint32_t; #elif UINT_MAX == 0xFFFFFFFF typedef int int32_t; typedef unsigned int uint32_t; #else # error "No suitable 32-bit type available" #endif BLARGG_END_NAMESPACE #endif lmms-1.1.3/plugins/papu/gb_apu/boost/static_assert.hpp000066400000000000000000000011221247673406200230650ustar00rootroot00000000000000 // Boost substitute. For full boost library see http://boost.org #ifndef BOOST_STATIC_ASSERT_HPP #define BOOST_STATIC_ASSERT_HPP #if defined (_MSC_VER) && _MSC_VER <= 1200 // MSVC6 can't handle the ##line concatenation #define BOOST_STATIC_ASSERT( expr ) struct { int n [1 / ((expr) ? 1 : 0)]; } #else #define BOOST_STATIC_ASSERT3( expr, line ) \ typedef int boost_static_assert_##line [1 / ((expr) ? 1 : 0)] #define BOOST_STATIC_ASSERT2( expr, line ) BOOST_STATIC_ASSERT3( expr, line ) #define BOOST_STATIC_ASSERT( expr ) BOOST_STATIC_ASSERT2( expr, __LINE__ ) #endif #endif lmms-1.1.3/plugins/papu/logo.png000066400000000000000000000074601247673406200166020ustar00rootroot00000000000000PNG  IHDR00WsRGB pHYs  tIME )$IDATh{pTu?}gNҏ4 K3(8论;N9c ZθX8UkO\]_(Ȋ(yyDBBM^;d ;Uu=wsGWWҶP[[[{r/=s<(J̚3qǣ1YW Y7g6740ut-cth$Id2zuUZ[[oŞO?;  R\RAҳmUhjb9-+n|q#/!LJ OT*EՎW0es EENNΤuMMMڊ{eUe̚9.G0fE q:P5饢*A+=gYYzL&Ӧ~t`PPU^z}:.()DQ0$AQÆNP^QIY͛nj; f2eյyKinqDQ ׋EB@\1XHX<S^Q'1c7HII C ``PQ7ȚwhrHo[#>#(" JpB4)b95e#^,F=:d2 ت'yn x^^NTCU'Og'gM-ͽ Dɀ`$b L*mE4DQDUUTUETETEb1csHHwHT!.8K]{!(/I%#X2P5 BkK vRbginXrYTA mGuRIRyt*E:BN; u3E6jw0r:;;N<ݳǸ佪hƌoӉF$]d2A2DrY`dTBFN4#XljcGщl ݎ M{xG{;OzzG9EHI-z4YEQ(Q#IGUETUBQ$IBTU͘4cENZ[`21Lh4zl?񧏿KII9,I x6RԀ{(a0YʱH))"<әk^%?h415}/`/1H}$ވ((JhH+*FQ(Q1HFҧGUUR8Wϛ@OwIR\.\ʋ'> 8Ȍ|\YYk$C~io$یa0jQI(I9 ]dYVB!~NhvaFZ8eg+|KK?pK}kj3kb)`K XCIE(TTUA44UE4"4@᷶s1RY{&zםK:x;Yoχ#Ns!b8-  #"e RL_oHH1^2@2=f@L<2a8N͛x͆nѹǵs'SNLC|Q5d欙|BTH FtH3H_O 5_!I9r[V +\<:@fi0n˔ >H6m*4- ӧMeB!vV;؄ncBh²Fm܊=k"a:1a(W>nf\T67޷|9_f().⣝x[߫T*EW(9b+XKX{ɥ̱Mt3+Ox,v?=FCc#k׮+NCEf̜>('EqŌ+->ݣGa4t^Xq^3jo>s`X^[M G4nm[D"g͚1 \…mӉ&tgYZ͡:::2e￷{{Yx44'=|ӧInn(eSSvo%ײp5b|);tr}r}wp8xG-?h4= Kgk_s=uAaΌ"F(갘LTQc~>KOrqňikkL'CrlQ:q_Y 3$I쁶䄌'} tҊॵ㮻0dffn(b;ӮQ.2?cXwI5vjk!p<^/.+'ׄ z8Toz4v4Ņ={)..nP40p\?uG4!~|99جZ6FX,233]VX1`4ް~=Y>Tx:M]S3 vc0ٲ=\0 '| MM=p|YT܍(Iݷ'h,NGX}=w%ʤ)!+Sff&sfØmdpwݑ(+,Z^\i<تvm aZOOL 5%=.{,ZՊn_v&oBfe3_>2t4FNADG'M;dz-fdvH&0MĒI@l"֒@UUBnvfaYq\OҢϢq.~!q91OЈEY֎N[ʘbr1LhfE~?>O>LCQ5bPUVnp8 .Kpt:͑o2l(Ɩb4HbH',iPGqQ!xZ4*M(*Tap;`1S:~I#I"i9EŶr?Ƚ+.zZLgk%Hc쪮&ۃ&%D"}̜=E.z*ݑHh,(qBP?9tl6ne(`x"HwRNJ|?ʞg0qQIENDB`lmms-1.1.3/plugins/papu/papu_instrument.cpp000066400000000000000000000622031247673406200210710ustar00rootroot00000000000000/* * papu_instrument.cpp - GameBoy papu based instrument * * Copyright (c) 2008 Attila Herman * Csaba Hruska * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "Basic_Gb_Apu.h" #include "papu_instrument.h" #include "base64.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include "tooltip.h" #include "engine.h" #include "graph.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT papu_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "FreeBoy", QT_TRANSLATE_NOOP( "pluginBrowser", "Emulation of GameBoy (TM) APU" ), "Attila Herman " "Csaba Hruska ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL } ; } papuInstrument::papuInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &papu_plugin_descriptor ), m_ch1SweepTimeModel( 4.0f, 0.0f, 7.0f, 1.0f, this, tr( "Sweep time" ) ), m_ch1SweepDirModel( false, this, tr( "Sweep direction" ) ), m_ch1SweepRtShiftModel( 4.0f, 0.0f, 7.0f, 1.0f, this, tr( "Sweep RtShift amount" ) ), m_ch1WavePatternDutyModel( 2.0f, 0.0f, 3.0f, 1.0f, this, tr( "Wave Pattern Duty" ) ), m_ch1VolumeModel( 15.0f, 0.0f, 15.0f, 1.0f, this, tr( "Channel 1 volume" ) ), m_ch1VolSweepDirModel( false, this, tr( "Volume sweep direction" ) ), m_ch1SweepStepLengthModel( 0.0f, 0.0f, 7.0f, 1.0f, this, tr( "Length of each step in sweep" ) ), m_ch2WavePatternDutyModel( 2.0f, 0.0f, 3.0f, 1.0f, this, tr( "Wave Pattern Duty" ) ), m_ch2VolumeModel( 15.0f, 0.0f, 15.0f, 1.0f, this, tr( "Channel 2 volume" ) ), m_ch2VolSweepDirModel( false, this, tr( "Volume sweep direction" ) ), m_ch2SweepStepLengthModel( 0.0f, 0.0f, 7.0f, 1.0f, this, tr( "Length of each step in sweep" ) ), //m_ch3OnModel( true, this, tr( "Channel 3 Master on/off" ) ), m_ch3VolumeModel( 3.0f, 0.0f, 3.0f, 1.0f, this, tr( "Channel 3 volume" ) ), m_ch4VolumeModel( 15.0f, 0.0f, 15.0f, 1.0f, this, tr( "Channel 4 volume" ) ), m_ch4VolSweepDirModel( false, this, tr( "Volume sweep direction" ) ), m_ch4SweepStepLengthModel( 0.0f, 0.0f, 7.0f, 1.0f, this, tr( "Length of each step in sweep" ) ), m_ch4ShiftRegWidthModel( false, this, tr( "Shift Register width" ) ), m_so1VolumeModel( 7.0f, 0.0f, 7.0f, 1.0f, this, tr( "Right Output level") ), m_so2VolumeModel( 7.0f, 0.0f, 7.0f, 1.0f, this, tr( "Left Output level" ) ), m_ch1So1Model( true, this, tr( "Channel 1 to SO2 (Left)" ) ), m_ch2So1Model( true, this, tr( "Channel 2 to SO2 (Left)" ) ), m_ch3So1Model( true, this, tr( "Channel 3 to SO2 (Left)" ) ), m_ch4So1Model( true, this, tr( "Channel 4 to SO2 (Left)" ) ), m_ch1So2Model( true, this, tr( "Channel 1 to SO1 (Right)" ) ), m_ch2So2Model( true, this, tr( "Channel 2 to SO1 (Right)" ) ), m_ch3So2Model( true, this, tr( "Channel 3 to SO1 (Right)" ) ), m_ch4So2Model( true, this, tr( "Channel 4 to SO1 (Right)" ) ), m_trebleModel( -20.0f, -100.0f, 200.0f, 1.0f, this, tr( "Treble" ) ), m_bassModel( 461.0f, -1.0f, 600.0f, 1.0f, this, tr( "Bass" ) ), m_graphModel( 0, 15, 32, this, false, 1 ) { } papuInstrument::~papuInstrument() { } void papuInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_ch1SweepTimeModel.saveSettings( _doc, _this, "st" ); m_ch1SweepDirModel.saveSettings( _doc, _this, "sd" ); m_ch1SweepRtShiftModel.saveSettings( _doc, _this, "srs" ); m_ch1WavePatternDutyModel.saveSettings( _doc, _this, "ch1wpd" ); m_ch1VolumeModel.saveSettings( _doc, _this, "ch1vol" ); m_ch1VolSweepDirModel.saveSettings( _doc, _this, "ch1vsd" ); m_ch1SweepStepLengthModel.saveSettings( _doc, _this, "ch1ssl" ); m_ch2WavePatternDutyModel.saveSettings( _doc, _this, "ch2wpd" ); m_ch2VolumeModel.saveSettings( _doc, _this, "ch2vol" ); m_ch2VolSweepDirModel.saveSettings( _doc, _this, "ch2vsd" ); m_ch2SweepStepLengthModel.saveSettings( _doc, _this, "ch2ssl" ); //m_ch3OnModel.saveSettings( _doc, _this, "ch3on" ); m_ch3VolumeModel.saveSettings( _doc, _this, "ch3vol" ); m_ch4VolumeModel.saveSettings( _doc, _this, "ch4vol" ); m_ch4VolSweepDirModel.saveSettings( _doc, _this, "ch4vsd" ); m_ch4SweepStepLengthModel.saveSettings( _doc, _this, "ch4ssl" ); m_ch4ShiftRegWidthModel.saveSettings( _doc, _this, "srw" ); m_so1VolumeModel.saveSettings( _doc, _this, "so1vol" ); m_so2VolumeModel.saveSettings( _doc, _this, "so2vol" ); m_ch1So1Model.saveSettings( _doc, _this, "ch1so2" ); m_ch2So1Model.saveSettings( _doc, _this, "ch2so2" ); m_ch3So1Model.saveSettings( _doc, _this, "ch3so2" ); m_ch4So1Model.saveSettings( _doc, _this, "ch4so2" ); m_ch1So2Model.saveSettings( _doc, _this, "ch1so1" ); m_ch2So2Model.saveSettings( _doc, _this, "ch2so1" ); m_ch3So2Model.saveSettings( _doc, _this, "ch3so1" ); m_ch4So2Model.saveSettings( _doc, _this, "ch4so1" ); m_trebleModel.saveSettings( _doc, _this, "Treble" ); m_bassModel.saveSettings( _doc, _this, "Bass" ); QString sampleString; base64::encode( (const char *)m_graphModel.samples(), m_graphModel.length() * sizeof(float), sampleString ); _this.setAttribute( "sampleShape", sampleString ); } void papuInstrument::loadSettings( const QDomElement & _this ) { m_ch1SweepTimeModel.loadSettings( _this, "st" ); m_ch1SweepDirModel.loadSettings( _this, "sd" ); m_ch1SweepRtShiftModel.loadSettings( _this, "srs" ); m_ch1WavePatternDutyModel.loadSettings( _this, "ch1wpd" ); m_ch1VolumeModel.loadSettings( _this, "ch1vol" ); m_ch1VolSweepDirModel.loadSettings( _this, "ch1vsd" ); m_ch1SweepStepLengthModel.loadSettings( _this, "ch1ssl" ); m_ch2WavePatternDutyModel.loadSettings( _this, "ch2wpd" ); m_ch2VolumeModel.loadSettings( _this, "ch2vol" ); m_ch2VolSweepDirModel.loadSettings( _this, "ch2vsd" ); m_ch2SweepStepLengthModel.loadSettings( _this, "ch2ssl" ); //m_ch3OnModel.loadSettings( _this, "ch3on" ); m_ch3VolumeModel.loadSettings( _this, "ch3vol" ); m_ch4VolumeModel.loadSettings( _this, "ch4vol" ); m_ch4VolSweepDirModel.loadSettings( _this, "ch4vsd" ); m_ch4SweepStepLengthModel.loadSettings( _this, "ch4ssl" ); m_ch4ShiftRegWidthModel.loadSettings( _this, "srw" ); m_so1VolumeModel.loadSettings( _this, "so1vol" ); m_so2VolumeModel.loadSettings( _this, "so2vol" ); m_ch1So1Model.loadSettings( _this, "ch1so2" ); m_ch2So1Model.loadSettings( _this, "ch2so2" ); m_ch3So1Model.loadSettings( _this, "ch3so2" ); m_ch4So1Model.loadSettings( _this, "ch4so2" ); m_ch1So2Model.loadSettings( _this, "ch1so1" ); m_ch2So2Model.loadSettings( _this, "ch2so1" ); m_ch3So2Model.loadSettings( _this, "ch3so1" ); m_ch4So2Model.loadSettings( _this, "ch4so1" ); m_trebleModel.loadSettings( _this, "Treble" ); m_bassModel.loadSettings( _this, "Bass" ); int size = 0; char * dst = 0; base64::decode( _this.attribute( "sampleShape"), &dst, &size ); m_graphModel.setSamples( (float*) dst ); } QString papuInstrument::nodeName() const { return( papu_plugin_descriptor.name ); } /*f_cnt_t papuInstrument::desiredReleaseFrames() const { const float samplerate = engine::mixer()->processingSampleRate(); int maxrel = 0; for( int i = 0 ; i < 3 ; ++i ) { if( maxrel < m_voice[i]->m_releaseModel.value() ) maxrel = m_voice[i]->m_releaseModel.value(); } return f_cnt_t( float(relTime[maxrel])*samplerate/1000.0 ); }*/ f_cnt_t papuInstrument::desiredReleaseFrames() const { return f_cnt_t( 1000 ); } void papuInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { const f_cnt_t tfp = _n->totalFramesPlayed(); const int samplerate = engine::mixer()->processingSampleRate(); const fpp_t frames = _n->framesLeftForCurrentPeriod(); int data = 0; int freq = _n->frequency(); if ( tfp == 0 ) { Basic_Gb_Apu *papu = new Basic_Gb_Apu(); papu->set_sample_rate( samplerate ); // Master sound circuitry power control papu->write_register( 0xff26, 0x80 ); data = m_ch1VolumeModel.value(); data = data<<1; data += m_ch1VolSweepDirModel.value(); data = data<<3; data += m_ch1SweepStepLengthModel.value(); papu->write_register( 0xff12, data ); data = m_ch2VolumeModel.value(); data = data<<1; data += m_ch2VolSweepDirModel.value(); data = data<<3; data += m_ch2SweepStepLengthModel.value(); papu->write_register( 0xff17, data ); //channel 4 - noise data = m_ch4VolumeModel.value(); data = data<<1; data += m_ch4VolSweepDirModel.value(); data = data<<3; data += m_ch4SweepStepLengthModel.value(); papu->write_register( 0xff21, data ); //channel 4 init papu->write_register( 0xff23, 128 ); _n->m_pluginData = papu; } Basic_Gb_Apu *papu = static_cast( _n->m_pluginData ); papu->treble_eq( m_trebleModel.value() ); papu->bass_freq( m_bassModel.value() ); //channel 1 - square data = m_ch1SweepTimeModel.value(); data = data<<1; data += m_ch1SweepDirModel.value(); data = data << 3; data += m_ch1SweepRtShiftModel.value(); papu->write_register( 0xff10, data ); data = m_ch1WavePatternDutyModel.value(); data = data<<6; papu->write_register( 0xff11, data ); //channel 2 - square data = m_ch2WavePatternDutyModel.value(); data = data<<6; papu->write_register( 0xff16, data ); //channel 3 - wave //data = m_ch3OnModel.value()?128:0; data = 128; papu->write_register( 0xff1a, data ); int ch3voldata[4] = { 0, 3, 2, 1 }; data = ch3voldata[(int)m_ch3VolumeModel.value()]; data = data<<5; papu->write_register( 0xff1c, data ); //controls data = m_so1VolumeModel.value(); data = data<<4; data += m_so2VolumeModel.value(); papu->write_register( 0xff24, data ); data = m_ch4So2Model.value()?128:0; data += m_ch3So2Model.value()?64:0; data += m_ch2So2Model.value()?32:0; data += m_ch1So2Model.value()?16:0; data += m_ch4So1Model.value()?8:0; data += m_ch3So1Model.value()?4:0; data += m_ch2So1Model.value()?2:0; data += m_ch1So1Model.value()?1:0; papu->write_register( 0xff25, data ); const float * wpm = m_graphModel.samples(); for( char i=0; i<16; i++ ) { data = (int)floor(wpm[i*2]) << 4; data += (int)floor(wpm[i*2+1]); papu->write_register( 0xff30 + i, data ); } if( ( freq >= 65 ) && ( freq <=4000 ) ) { int initflag = (tfp==0)?128:0; // Hz = 4194304 / ( ( 2048 - ( 11-bit-freq ) ) << 5 ) data = 2048 - ( ( 4194304 / freq )>>5 ); if( tfp==0 ) { papu->write_register( 0xff13, data & 0xff ); papu->write_register( 0xff14, (data>>8) | initflag ); } papu->write_register( 0xff18, data & 0xff ); papu->write_register( 0xff19, (data>>8) | initflag ); papu->write_register( 0xff1d, data & 0xff ); papu->write_register( 0xff1e, (data>>8) | initflag ); } if( tfp == 0 ) { //PRNG Frequency = (1048576 Hz / (ratio + 1)) / 2 ^ (shiftclockfreq + 1) char sopt=0; char ropt=1; float fopt = 524288.0 / ( ropt * pow( 2.0, sopt + 1.0 ) ); float f; for ( char s=0; s<16; s++ ) for ( char r=0; r<8; r++ ) { f = 524288.0 / ( r * pow( 2.0, s + 1.0 ) ); if( fabs( freq-fopt ) > fabs( freq-f ) ) { fopt = f; ropt = r; sopt = s; } } data = sopt; data = data << 1; data += m_ch4ShiftRegWidthModel.value(); data = data << 3; data += ropt; papu->write_register( 0xff22, data ); } int const buf_size = 2048; int framesleft = frames; int datalen = 0; blip_sample_t buf [buf_size*2]; while( framesleft > 0 ) { int avail = papu->samples_avail(); if( avail <= 0 ) { papu->end_frame(); avail = papu->samples_avail(); } datalen = framesleft>avail?avail:framesleft; datalen = datalen>buf_size?buf_size:datalen; long count = papu->read_samples( buf, datalen*2)/2; for( fpp_t frame = 0; frame < count; ++frame ) { for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { sample_t s = float(buf[frame*2+ch])/32768.0; _working_buffer[frames-framesleft+frame][ch] = s; } } framesleft -= count; } instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void papuInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * papuInstrument::instantiateView( QWidget * _parent ) { return( new papuInstrumentView( this, _parent ) ); } class papuKnob : public knob { public: papuKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 30, 30 ); setCenterPointX( 15.0 ); setCenterPointY( 15.0 ); setInnerRadius( 8 ); setOuterRadius( 13 ); setTotalAngle( 270.0 ); setLineWidth( 1 ); setOuterColor( QColor( 0xF1, 0xFF, 0x93 ) ); } }; papuInstrumentView::papuInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); m_ch1SweepTimeKnob = new papuKnob( this ); m_ch1SweepTimeKnob->setHintText( tr( "Sweep Time:" ) + " ", "" ); m_ch1SweepTimeKnob->move( 5 + 4*32, 106 ); toolTip::add( m_ch1SweepTimeKnob, tr( "Sweep Time" ) ); m_ch1SweepTimeKnob->setWhatsThis( tr( "The amount of increase or" " decrease in frequency" ) ); m_ch1SweepRtShiftKnob = new papuKnob( this ); m_ch1SweepRtShiftKnob->setHintText( tr( "Sweep RtShift amount:" ) + " ", "" ); m_ch1SweepRtShiftKnob->move( 5 + 3*32, 106 ); toolTip::add( m_ch1SweepRtShiftKnob, tr( "Sweep RtShift amount" ) ); m_ch1SweepRtShiftKnob->setWhatsThis( tr( "The rate at which increase or" " decrease in frequency occurs" ) ); m_ch1WavePatternDutyKnob = new papuKnob( this ); m_ch1WavePatternDutyKnob->setHintText( tr( "Wave pattern duty:" ) + " ", "" ); m_ch1WavePatternDutyKnob->move( 5 + 2*32, 106 ); toolTip::add( m_ch1WavePatternDutyKnob, tr( "Wave Pattern Duty" ) ); m_ch1WavePatternDutyKnob->setWhatsThis( tr( "The duty cycle is the ratio of" " the duration (time) that a signal is ON" " versus the total period of the signal." ) ); m_ch1VolumeKnob = new papuKnob( this ); m_ch1VolumeKnob->setHintText( tr( "Square Channel 1 Volume:" ) + " ", "" ); m_ch1VolumeKnob->move( 5, 106 ); toolTip::add( m_ch1VolumeKnob, tr( "Square Channel 1 Volume:" ) ); m_ch1VolumeKnob->setWhatsThis( tr( "Square Channel 1 Volume" ) ); m_ch1SweepStepLengthKnob = new papuKnob( this ); m_ch1SweepStepLengthKnob->setHintText( tr( "Length of each step in sweep:" ) + " ", "" ); m_ch1SweepStepLengthKnob->move( 5 + 32, 106 ); toolTip::add( m_ch1SweepStepLengthKnob, tr( "Length of each step in sweep" ) ); m_ch1SweepStepLengthKnob->setWhatsThis( tr( "The delay between step change" ) ); m_ch2WavePatternDutyKnob = new papuKnob( this ); m_ch2WavePatternDutyKnob->setHintText( tr( "Wave pattern duty:" ) + " ", "" ); m_ch2WavePatternDutyKnob->move( 5 + 2*32, 155 ); toolTip::add( m_ch2WavePatternDutyKnob, tr( "Wave pattern duty" ) ); m_ch2WavePatternDutyKnob->setWhatsThis( tr( "The duty cycle is the ratio of" " the duration (time) that a signal is ON" " versus the total period of the signal." ) ); m_ch2VolumeKnob = new papuKnob( this ); m_ch2VolumeKnob->setHintText( tr( "Square Channel 2 Volume:" ) + " ", "" ); m_ch2VolumeKnob->move( 5, 155 ); toolTip::add( m_ch2VolumeKnob, tr( "Square Channel 2 Volume" ) ); m_ch2VolumeKnob->setWhatsThis( tr( "Square Channel 2 Volume" ) ); m_ch2SweepStepLengthKnob = new papuKnob( this ); m_ch2SweepStepLengthKnob->setHintText( tr( "Length of each step in sweep:" ) + " ", "" ); m_ch2SweepStepLengthKnob->move( 5 + 32, 155 ); toolTip::add( m_ch2SweepStepLengthKnob, tr( "Length of each step in sweep" ) ); m_ch2SweepStepLengthKnob->setWhatsThis( tr( "The delay between step change" ) ); m_ch3VolumeKnob = new papuKnob( this ); m_ch3VolumeKnob->setHintText( tr( "Wave Channel Volume:" ) + " ", "" ); m_ch3VolumeKnob->move( 5, 204 ); toolTip::add( m_ch3VolumeKnob, tr( "Wave Channel Volume" ) ); m_ch3VolumeKnob->setWhatsThis( tr( "Wave Channel Volume" ) ); m_ch4VolumeKnob = new papuKnob( this ); m_ch4VolumeKnob->setHintText( tr( "Noise Channel Volume:" ) + " ", "" ); m_ch4VolumeKnob->move( 144, 155 ); toolTip::add( m_ch4VolumeKnob, tr( "Noise Channel Volume" ) ); m_ch4VolumeKnob->setWhatsThis( tr( "Noise Channel Volume" ) ); m_ch4SweepStepLengthKnob = new papuKnob( this ); m_ch4SweepStepLengthKnob->setHintText( tr( "Length of each step in sweep:" ) + " ", "" ); m_ch4SweepStepLengthKnob->move( 144 + 32, 155 ); toolTip::add( m_ch4SweepStepLengthKnob, tr( "Length of each step in sweep" ) ); m_ch4SweepStepLengthKnob->setWhatsThis( tr( "The delay between step change" ) ); m_so1VolumeKnob = new papuKnob( this ); m_so1VolumeKnob->setHintText( tr( "SO1 Volume (Right):" ) + " ", "" ); m_so1VolumeKnob->move( 5, 58 ); toolTip::add( m_so1VolumeKnob, tr( "SO1 Volume (Right)" ) ); m_so2VolumeKnob = new papuKnob( this ); m_so2VolumeKnob->setHintText( tr( "SO2 Volume (Left):" ) + " ", "" ); m_so2VolumeKnob->move( 5 + 32, 58 ); toolTip::add( m_so2VolumeKnob, tr( "SO2 Volume (Left)" ) ); m_trebleKnob = new papuKnob( this ); m_trebleKnob->setHintText( tr( "Treble:" ) + " ", "" ); m_trebleKnob->move( 5 + 2*32, 58 ); toolTip::add( m_trebleKnob, tr( "Treble" ) ); m_bassKnob = new papuKnob( this ); m_bassKnob->setHintText( tr( "Bass:" ) + " ", "" ); m_bassKnob->move( 5 + 3*32, 58 ); toolTip::add( m_bassKnob, tr( "Bass" ) ); m_ch1SweepDirButton = new pixmapButton( this, NULL ); m_ch1SweepDirButton->setCheckable( true ); m_ch1SweepDirButton->move( 167, 108 ); m_ch1SweepDirButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_down" ) ); m_ch1SweepDirButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_up" ) ); toolTip::add( m_ch1SweepDirButton, tr( "Sweep Direction" ) ); m_ch1VolSweepDirButton = new pixmapButton( this, NULL ); m_ch1VolSweepDirButton->setCheckable( true ); m_ch1VolSweepDirButton->move( 207, 108 ); m_ch1VolSweepDirButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_up" ) ); m_ch1VolSweepDirButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_down" ) ); toolTip::add( m_ch1VolSweepDirButton, tr( "Volume Sweep Direction" ) ); m_ch2VolSweepDirButton = new pixmapButton( this, tr( "Volume Sweep Direction" ) ); m_ch2VolSweepDirButton->setCheckable( true ); m_ch2VolSweepDirButton->move( 102, 156 ); m_ch2VolSweepDirButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_up" ) ); m_ch2VolSweepDirButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_down" ) ); toolTip::add( m_ch2VolSweepDirButton, tr( "Volume Sweep Direction" ) ); //m_ch3OnButton = new pixmapButton( this, NULL ); //m_ch3OnButton->move( 176, 53 ); m_ch4VolSweepDirButton = new pixmapButton( this, tr( "Volume Sweep Direction" ) ); m_ch4VolSweepDirButton->setCheckable( true ); m_ch4VolSweepDirButton->move( 207, 157 ); m_ch4VolSweepDirButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_up" ) ); m_ch4VolSweepDirButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_down" ) ); toolTip::add( m_ch4VolSweepDirButton, tr( "Volume Sweep Direction" ) ); m_ch4ShiftRegWidthButton = new pixmapButton( this, NULL ); m_ch4ShiftRegWidthButton->setCheckable( true ); m_ch4ShiftRegWidthButton->move( 207, 171 ); m_ch4ShiftRegWidthButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_7" ) ); m_ch4ShiftRegWidthButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_15" ) ); toolTip::add( m_ch4ShiftRegWidthButton, tr( "Shift Register Width" ) ); m_ch1So1Button = new pixmapButton( this, NULL ); m_ch1So1Button->setCheckable( true ); m_ch1So1Button->move( 208, 51 ); m_ch1So1Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch1So1Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch1So1Button, tr( "Channel1 to SO1 (Right)" ) ); m_ch2So1Button = new pixmapButton( this, NULL ); m_ch2So1Button->setCheckable( true ); m_ch2So1Button->move( 208, 51 + 12 ); m_ch2So1Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch2So1Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch2So1Button, tr( "Channel2 to SO1 (Right)" ) ); m_ch3So1Button = new pixmapButton( this, NULL ); m_ch3So1Button->setCheckable( true ); m_ch3So1Button->move( 208, 51 + 2*12 ); m_ch3So1Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch3So1Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch3So1Button, tr( "Channel3 to SO1 (Right)" ) ); m_ch4So1Button = new pixmapButton( this, NULL ); m_ch4So1Button->setCheckable( true ); m_ch4So1Button->setChecked( false ); m_ch4So1Button->move( 208, 51 + 3*12 ); m_ch4So1Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch4So1Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch4So1Button, tr( "Channel4 to SO1 (Right)" ) ); m_ch1So2Button = new pixmapButton( this, NULL ); m_ch1So2Button->setCheckable( true ); m_ch1So2Button->move( 148, 51 ); m_ch1So2Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch1So2Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch1So2Button, tr( "Channel1 to SO2 (Left)" ) ); m_ch2So2Button = new pixmapButton( this, NULL ); m_ch2So2Button->setCheckable( true ); m_ch2So2Button->move( 148, 51 + 12 ); m_ch2So2Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch2So2Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch2So2Button, tr( "Channel2 to SO2 (Left)" ) ); m_ch3So2Button = new pixmapButton( this, NULL ); m_ch3So2Button->setCheckable( true ); m_ch3So2Button->move( 148, 51 + 2*12 ); m_ch3So2Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch3So2Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch3So2Button, tr( "Channel3 to SO2 (Left)" ) ); m_ch4So2Button = new pixmapButton( this, NULL ); m_ch4So2Button->setCheckable( true ); m_ch4So2Button->setChecked( false ); m_ch4So2Button->move( 148, 51 + 3*12 ); m_ch4So2Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "btn_on" ) ); m_ch4So2Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap("btn_off") ); toolTip::add( m_ch4So2Button, tr( "Channel4 to SO2 (Left)" ) ); m_graph = new graph( this ); m_graph->setGraphStyle( graph::NearestStyle ); m_graph->setGraphColor( QColor(0x4E, 0x83, 0x2B) ); m_graph->move( 37, 199 ); m_graph->resize(208, 47); toolTip::add( m_graph, tr( "Wave Pattern" ) ); m_graph->setWhatsThis( tr( "Draw the wave here" ) ); } papuInstrumentView::~papuInstrumentView() { } void papuInstrumentView::modelChanged() { papuInstrument * p = castModel(); m_ch1SweepTimeKnob->setModel( &p->m_ch1SweepTimeModel ); m_ch1SweepDirButton->setModel( &p->m_ch1SweepDirModel ); m_ch1SweepRtShiftKnob->setModel( &p->m_ch1SweepRtShiftModel ); m_ch1WavePatternDutyKnob->setModel( &p->m_ch1WavePatternDutyModel ); m_ch1VolumeKnob->setModel( &p->m_ch1VolumeModel ); m_ch1VolSweepDirButton->setModel( &p->m_ch1VolSweepDirModel ); m_ch1SweepStepLengthKnob->setModel( &p->m_ch1SweepStepLengthModel ); m_ch2WavePatternDutyKnob->setModel( &p->m_ch2WavePatternDutyModel ); m_ch2VolumeKnob->setModel( &p->m_ch2VolumeModel ); m_ch2VolSweepDirButton->setModel( &p->m_ch2VolSweepDirModel ); m_ch2SweepStepLengthKnob->setModel( &p->m_ch2SweepStepLengthModel ); //m_ch3OnButton->setModel( &p->m_ch3OnModel ); m_ch3VolumeKnob->setModel( &p->m_ch3VolumeModel ); m_ch4VolumeKnob->setModel( &p->m_ch4VolumeModel ); m_ch4VolSweepDirButton->setModel( &p->m_ch4VolSweepDirModel ); m_ch4SweepStepLengthKnob->setModel( &p->m_ch4SweepStepLengthModel ); m_ch4ShiftRegWidthButton->setModel( &p->m_ch4ShiftRegWidthModel ); m_so1VolumeKnob->setModel( &p->m_so1VolumeModel ); m_so2VolumeKnob->setModel( &p->m_so2VolumeModel ); m_ch1So1Button->setModel( &p->m_ch1So1Model ); m_ch2So1Button->setModel( &p->m_ch2So1Model ); m_ch3So1Button->setModel( &p->m_ch3So1Model ); m_ch4So1Button->setModel( &p->m_ch4So1Model ); m_ch1So2Button->setModel( &p->m_ch1So2Model ); m_ch2So2Button->setModel( &p->m_ch2So2Model ); m_ch3So2Button->setModel( &p->m_ch3So2Model ); m_ch4So2Button->setModel( &p->m_ch4So2Model ); m_trebleKnob->setModel( &p->m_trebleModel ); m_bassKnob->setModel( &p->m_bassModel ); m_graph->setModel( &p->m_graphModel ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new papuInstrument( static_cast( _data ) ) ); } } #include "moc_papu_instrument.cxx" lmms-1.1.3/plugins/papu/papu_instrument.h000066400000000000000000000077451247673406200205500ustar00rootroot00000000000000/* * papu_Instrument.h - GameBoy papu based instrument * * Copyright (c) 2008 * Csaba Hruska * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PAPU_H #define _PAPU_H #include #include "Instrument.h" #include "InstrumentView.h" #include "knob.h" #include "graph.h" class papuInstrumentView; class NotePlayHandle; class pixmapButton; class papuInstrument : public Instrument { Q_OBJECT public: papuInstrument( InstrumentTrack * _instrument_track ); virtual ~papuInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const; virtual PluginView * instantiateView( QWidget * _parent ); /*public slots: void updateKnobHint(); void updateKnobToolTip();*/ private: FloatModel m_ch1SweepTimeModel; BoolModel m_ch1SweepDirModel; FloatModel m_ch1SweepRtShiftModel; FloatModel m_ch1WavePatternDutyModel; FloatModel m_ch1VolumeModel; BoolModel m_ch1VolSweepDirModel; FloatModel m_ch1SweepStepLengthModel; FloatModel m_ch2WavePatternDutyModel; FloatModel m_ch2VolumeModel; BoolModel m_ch2VolSweepDirModel; FloatModel m_ch2SweepStepLengthModel; BoolModel m_ch3OnModel; FloatModel m_ch3VolumeModel; FloatModel m_ch4VolumeModel; BoolModel m_ch4VolSweepDirModel; FloatModel m_ch4SweepStepLengthModel; FloatModel m_ch4ShiftClockFreqModel; BoolModel m_ch4ShiftRegWidthModel; FloatModel m_ch4FreqDivRatioModel; FloatModel m_so1VolumeModel; FloatModel m_so2VolumeModel; BoolModel m_ch1So1Model; BoolModel m_ch2So1Model; BoolModel m_ch3So1Model; BoolModel m_ch4So1Model; BoolModel m_ch1So2Model; BoolModel m_ch2So2Model; BoolModel m_ch3So2Model; BoolModel m_ch4So2Model; FloatModel m_trebleModel; FloatModel m_bassModel; graphModel m_graphModel; friend class papuInstrumentView; } ; class papuInstrumentView : public InstrumentView { Q_OBJECT public: papuInstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~papuInstrumentView(); private: virtual void modelChanged(); knob * m_ch1SweepTimeKnob; pixmapButton * m_ch1SweepDirButton; knob * m_ch1SweepRtShiftKnob; knob * m_ch1WavePatternDutyKnob; knob * m_ch1VolumeKnob; pixmapButton * m_ch1VolSweepDirButton; knob * m_ch1SweepStepLengthKnob; knob * m_ch2WavePatternDutyKnob; knob * m_ch2VolumeKnob; pixmapButton * m_ch2VolSweepDirButton; knob * m_ch2SweepStepLengthKnob; knob * m_ch3VolumeKnob; knob * m_ch4VolumeKnob; pixmapButton * m_ch4VolSweepDirButton; knob * m_ch4SweepStepLengthKnob; pixmapButton * m_ch4ShiftRegWidthButton; knob * m_so1VolumeKnob; knob * m_so2VolumeKnob; pixmapButton * m_ch1So1Button; pixmapButton * m_ch2So1Button; pixmapButton * m_ch3So1Button; pixmapButton * m_ch4So1Button; pixmapButton * m_ch1So2Button; pixmapButton * m_ch2So2Button; pixmapButton * m_ch3So2Button; pixmapButton * m_ch4So2Button; knob * m_trebleKnob; knob * m_bassKnob; graph * m_graph; /*protected slots: void updateKnobHint(); void updateKnobToolTip();*/ } ; #endif lmms-1.1.3/plugins/patman/000077500000000000000000000000001247673406200154405ustar00rootroot00000000000000lmms-1.1.3/plugins/patman/CMakeLists.txt000066400000000000000000000002101247673406200201710ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(patman patman.cpp patman.h MOCFILES patman.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/patman/artwork.png000066400000000000000000001072721247673406200176500ustar00rootroot00000000000000PNG  IHDRjsBITOrIDATxWy/>mWK$WY{ 1 3Ed9e=KpO~@3t^f=7E}:z'St`P9PL!4 f:dߧ͊HNk~=pm14Xpwq4t0Xz)⭒Ct%CDKD{;3"h{vi}RJQ@ puݠ_& uF! Ĭ78"@ ^&?O1@7r (.P+2^L;7w/Y0 BUUe2lwСQu?Fw)q#@n >ni8WDYB0x Za7j"\.hW9@/67I\7ч ˓eE;l0ݗ o7M&@ : z ( Hf5'qixkp3ni˙0Ue< O`PR,#T&B+\T&lrT2r?bUdsͦcQs>oRZ,sG#x\۲ytJp"x= k\ʜIC@iDNI v8?rUL @D^h3حnMtW{ cx5 Zcso&-?xmoO%묛rL+o{LV4cFWw@cR }|Lݾ=}6ҭU0({QZ@âe`h%UZc{|9]Gb7gnU@am&p {EClA`(7B6+SNFB}2Kd|neAT+6b1ml4߽GFGrI[^ZA=+ ]QpE0I7h7|@O?u0}D~PH * ĩnZQ~ǧ qC^HH$uX0Ϧf! w Y3Y7 ޸PcWM4>=;%}ձkBaP(ã(ZrtZ9 UT(ھ?K ;?Eՠh hV*S0Bt;\%@I}eKZzɲz!24"3L tvkAYd"iP+ ,FG.35~udo]ij% '%;=I^(tqF>mYP|~p쩏NvLTV*ᰂFqфnѲ|~G@I&LwwFp3j4#9mLq IAe=4@hUV=B6Sj-`[8><Gw)1D04ݓ C TWDIC!A 0MPp ()Dᮚf:V%', d<%=anhb~ttv[XF ͱx0!]pRkh;< IF"H@Ob\? @Jx~h8B锖Jj &3R ),f뤘L"%C#ꯂKl~D[sq Q~ Ɍp,Y&ZHf@bj2M=+ _nmBd6 J-dp/?]C&%3TQW܆2( YM%Km)**y~BK>}Kxo!Cȋx+V{fOf-1DgÉ#SpT.kC2Ϡm]0uۮg!:dI4/4ȌbJ.]gl#QD xLe5S<=B@3WT2ua\; ī:#Y@hucf!L G[6!l}e$ LH$zf3rY=G*& ɕ_c@ r8  8~PAÐͱ<l=0-CK[te|>?yPu\ bwT}E<ń$3ֱS  [̗n}e415Տ`%ƩMU yO*+ <3cl&M9H`cM#MVK(q t зUZxgz))9cz'c(7 o3ڋHi6YNA$ে/98Q<?cyNa݀tcgg#)(<8G [(^JB n@sacq[Ģ[B;yM1uNY!Ϲg+[]g?K23`tQ)7f*xźdHѧkɄ4s?%gl< z}dA7aIi(18P-$=mw|a_ UCVc9٫Uѣ&:‚p H JSHmJ 2f?mB[dI[M‘drxRw#sMpr`G:5~< fW(X`I:J%0ƃUnLwV)M5=W'Dn܌&&2l_8{mE:au?e8$XL' 6 `v ~ awHX" @qx}"iRc C>o(HAg9*&[WYefwae*Or|!NxEgӠV|` IP" g@C( 0u=u\gA @`I3ur{!4M%GMMWcx~p Go*U ^dwx49l*TJYے%ʆ93?.8;M*X l|w0Ѭ)hr[m^-LN %QqH ds.tcEK qigϚp![Q8ږ]M;|Nn"#'[SLt1%b L-z+i3 xdЅ@dHfXn"E_\!hX l` 1A$X$ fRDh7*ZɮzBMidt79ydt^( .#B.0HLŐ4@|.TE*y":X0e⬓40"{6`g kAJmdu3PFHt v#4APA,E$,|+J%g.$L 4DNu-_P䎵1ɈLe@b#13)XPW;4M]zbŊ=P|;wyT B}{oq {'|r릒MZjx 3F۟T ]] O ބ*O&]5DN)WM0Ht&[հg&58 )r9? 8 `ȌIpLh~C2L" _@(W`8Fue@ƍY84$3 &MR:^u.DzXcdQ]`P"s0hYKEpF>4)hGVLJ`tp|̤ }۝lϯG?o|3Ψa80* FK\pW/~χY$-aPÁT{Rp0JvUBAS@G ^а nRyt&$Y72yJL;$`KM;#9 + #֩lI#",zATYÁ8R"j * .yѪi 2]o[%ʢãBduK2TK#ĠBݤ[hS>g-3(+,07n >%$c}Oz2`O~~K?̙wu׌xu[oeePE{V,4heawagVZV-V: j 92m5*^r'"Cc E#・q0u0'uf^*T!LcG+@ЭPZnFYeLOvۧO<gj:$:/ (Wd3BCgԡ(UgbkyQ6srDijL0}YsO'~<.R^I[6w)E1|.GzUP\0@X%öd2m! w YZ~ BO>E58 Rz62Fv"@9#a?BsKsO@A2NLT,(-# A_rYe2V!4uE_A&hkNSN]c?瞎 !*,"i ~0W5( O|+_駟?w%]} ~:S}_=;fM ::BKCa锕+"z'0Sk v H@Q%@S5\l\{}]?U$ ߥD!`:@@4ΟUVPɤ;GeExN`fDRY)_rEӏFaO  n~\wC}LUxDwki TDǤKMK.~80Q?6[+HKl{`k[? V0`g 3'V]`/0v75!%rٚR)]ўLh^:2KR[[{g'?ͱw\Wpۅ,t;H}_V3ν矍+h\g.r ٶ#R8l>im2zoPB4Dy H%uPR{^ڥK}鮘H|Nk}}=x7֧ɱؖXЬ'T^4)x}{3x:od`u4r6 Ni9-EJXUbeXUZj-/~V.N );]D !S|M0FQzp5*tQ4)W0H8PUTW)*XA1 mT}^{E8 (MLD,aύ7638TM$V$"*'"iTUxc-'c>{J ֠{ 0-u f(}NBLR ke(qة*۔\ab)+>1=qFEϞUZ pMСCmx GVTWتx 8^wƖɨ\8H7pjtbB-.fff4vj$(TVoMh0I8`Q7\zrޞCݘᲺpNuTy2A ; HXMAɒ"Xm#Zl;&3jv _L0n k M(ouNuKkF؝(]CZRF$PY~Jx>8h@Z.p6I(xp.u ] ퟚwZV#Ŷ>9@ƴ dYdWy935)}crmF".OwAsqw*\WTFLUQTlzb۶:OMb?=Y蒡B 3ePj6`EŃ̏ԥd#3"<_UypJ{|y5M6 Jc8 1qT 4LǗL :їdjLpC<{]-L@@P Ʊ&P% A=UbpO &v oD{>o\wCO?2 'PZW # & /{=L?6Ler LlEȰDExgWbx]^qUdF|Un6$ w `7tZGS)7grTjP`"$!QO_r|$ߏ=<@a`ɮukUpؘA$vHF׶%cU{jBCwp͍8 !"7@, RpQo8sO؎f/Z#'eږQZ6t@fN \CŒI(ڏ5E#N{\yu(*D{ά*¿nڴ0-6w\^#q+tOO&N`@f꺽T1h%z~Rv{i2hǤ!z6\^WQ!hP PPxqz|+(&ʈwz`2G wԸh4ʉc _~$ ,b 9 i P|&h5fa3v΋/ ᜠcTkyLJ PP矋8X}Z%` 8.!~5) ?Q8}HgJ^}??#F&Ul* f! 29D%ܢ݄VNNYYYOO=dZ|?]@o USEs+DKԇ(7GtdITp*IN.pd~re⦸c]c& Q^U ¿`0ݲO'z((ApA&vjb54H[ٕXlGu͍2mj3xBMfI>E2O|CB$ ^(S_U, Cq2y>Ji±|>'E: w"xwпFy ~;O}jbbkdvm}뭷? }/^|O~UVw?8O'Nh7m0ʠ8E^n+^S.-޳Y & oǩ,[_ߊ+@b R/ /^P@4!9T_O?9+E3$A,9dM59 xT2^X@dz؈h3ۢOƠH7D#mc !a؂vҲr @\8ҮA;| p|Ygڵ |;y7oA?y<$*o~*X '?oޗ@-vؿ;<<||S𘙌jJ*QzAatE\FV:٬LLfxJ%3С@W~qT9& mkԃ@%gpE4%̥h9 :njr|4Tv=IkU cm>@ @3/twtI"3nHO|k׮[8륗^kq ׿~YN=lC}ts3z;@]Ok9Fl!*VT›kT#6~\@jQ]uVά S ^AY~6 2%<{sm3 0=ɲ]B4ޢ,@"a9uUF( =.JGop @Uh2 ʍ5R\Y3iӄ/gwՕkN??<<Be/i tMLv~ˢFnAσ8mIK=9ߍ,9dx @{}k  |JypS#Q)i$MŖP7~5 nh|ŸJh(%I]k*b%hZ/`|Z)|kg(h>xVk8|mKEXԨQH\Q7\VC Sд?M7cwnjw#ARۣ0F1`g:_`-_a#EST2DYPuD;zM§oj~T (NRu<#ǂRpbcKxv3Ra]x1 }~&a?_$2[4[mcss902_?bBR_, S" &gRpmmAo4&1'e:~7sˇڏL PSW6=芳K?(MB U+A/ :\dd`CmS$(wؚj]}?<1"ft /Nnng(5l3̋)((& TUw6[?cQ % DۂIŊMUIro%&ER)49)X!Y #+ʲzldC29}~nLwOu@PzL0\8*( NAYW_[KvdΟJkS {QjWqnÐkoχI,[l9F|Vŏ6+/gUDfNX) Q*+DA;{Fsg@Pɏ~z%}Կ7G_<6Φ>Lg5D;.sKPn ç4iu4  `6ZsҾ"Lmp;7]]TU5Is);'s#ʄ`QrbbBf4lYܑ>6x=uUKE,dޒ9[h8ybjtPa\To}㱤~uLQS'L,8^+Z笯 G6>̰#h-r nwˉ475.ߍICk."d8PA %^:ԕc~-o bd/o0Yih@@+cluKt~۞͛^{N@?Kw?w6*T88iHGB8TDJR Nb>/W\ma΁Y`wڢ"aׯpC_Cr0(>xs*b8CvQBD(E%pL.Jeȏ?K2 5:ܞ ;kA?P'~b6ai䎼fc-$̧ CyU4EU&:/pyaV Ð1\lƓ8|E~1`E]tX%XkU3cd,^![Sc`!# P=HJHOQ;J,?~ c8\>Z+/~b+yXdtZۂgCok^e0NyY%F6r9Y? ۋzMaM 4b0~4V/Q 2x k2 ꮼ$ p0Lä5\g'igV4.5} _*W9ڠ=&^DiӳxL89Fɶ")B TC%`Q5.ҭg]1mQ^]{L=}9ժmCђ(|`2T)E tgQH2 `-DA$p3ҩ@M7ױ䷿(M>  @ $VJa.(u 5^V0Xa¢o[r12'D M=6Q s=Dqf/<ѥ$[.G= aldk7␆~{qUdz@mNL8,4՜qHl t MQ2E4*^ !9b玴G7UK[4.V$UG0@eU`){v?99A^KO}]_XxM(߶}/Z_) W޹5*#Ug<[OYνɟZ5+*Wϱd_wqo\rAcyC%^Yi %B| ɭ=s*H yuO\BQh[wȽ%]]#)}[H)& GV2aR EIzn#q: Bd)ǂCV]<wkk,%;U%عOg2 ogw66fI E1WuViX 1jrChl(ePUn^40/UJ F2rh 1]˩v 3ѤRTG3LVfr|5@C`\XwtLJnIEc/6PDYZ]ҭ'Q"J)r]˺#3;cR(]xs,#K**u>Tw>_p^yyЬe>9ѿP0l)ތn{rG]{ ?S_F/Aҧg{:V͈u ɧ<0ϝׁ3%c+ձWa`B刓sXd$,S_Pt"FD9HrprXR=[s_w=gҨ2()$I .LfF[ *96=hF8|OTpŽ+ZVtYK% g|ta5W/2ɍ_ -\4r0~=_L]S*`(1&t<JЋuT*L&W 5fÕUFdzt4ZSSK5Qx2JTx!̴R).tƉD<ƐU>L& Gx 38ѱT N)I&(@ LaHrD6axщD* oCdnrhx4e%sZ6@x:Q%<&D2R$bҳS΅B5;B-@@ !/KՌX,Bm2ZP KOڒ6_NK|O{uʆ)Cʂ [ޒ%KX溫\P?@BxC^&-"Ƌc '3SL.x`CnwweΝ;􌍍 J=1G@Kt:;1OG*ؼL&ځDk[#uʊm뾞x"JoXgxɗ`ϝ, _}[9alʲe|saݻ  55uڗ_޶cn ;v߻wKooضU׹FwW^yHw諑d254ixp``>2 C XPD>oin?|<]_o,:;AlA{z:;S39Q0Bjk(؉w&mF"E"h\5TvV(вUK/na7.y;>.[m3-`Ʀ%ShofcImm- ڝ KN)v0<ޡ+WTW7,XdpKK|`Cpgo޽{׮][SSFz7ݸjũ#x߽{;U)+§^Z7[|Μ*z שTvILJJL\*t8 $7_=k %IiIQC|N2czs<Ht;x`.]s3cQ$޽ b%,ť,OR7)zɉ(JkN(g'ѹ5%(hRqX,m6˙:tk VXרHe)V}mϔrx^Q!3-7kBp<ʞ;QZKP5V"Y̾vy.)E[vOl8i-^C` \ ~=۽<̝;w>3 ܰaq`eeúkw-aT2&@!.;:i5K%T:˪ANSeB q *0;ev++'6y08݃?ʹ&%#%H;歒r(q.~hw@/,fdւ&dj0)Ȧ;%0N1D&΀zNiՏkB<"jU JkePN`b. S@W)[x3+h;5Y^)u6'g+SKݴEE!CVCp'o&X\UdK$ӗ k^3Z@fNf/]>y]%wDbRf)l~uOVSDf88l  Ly \Ѕ׎Tz*Muwm KXOAT:GГVܣ"Lb N3PgJtvW%^,"v[󠰸H-)ㆋPabq*SnYyzJ"ZPbr%m:Jօy^3Lt_aNukz};K^x]K0F{n96r!THc6#O8.e:7Ӊza/Ћ_D]@}ӂD{9|KNArf>m9-*+hrE;/"~*s[ E|enr@Y0٪s2>>ג ֵtU[/E d* gi)[Wmdu9%'"J)7f؂gc F@#dͬ344pS}ژ@/E[ ө3kiVL:C (TW m wx^<3yKJiX܋3{*30Mr2>>jT`ѿ2@?m@]YZYs8,VTZ+0UV58R.KZWEHUpcH]GPҨnIquS5;el{%XeV?g]kKgyY'b9m`oG~E3"-y7v!{B҅XleDC%(Q^f[Tn,+bS19-h{BÂճԒ 57-"Z KYTp*sh2Pqh]euagpmb ;eů-9!+ NX%%$59Q͢pr&sVWYm[ꑇK/9tUn<ߓ\Ksuaor=|o,7?_?FF~s40:/2ՕA4pTwwVc0ZN]+9s;3/`ܹF0"$'g7oSL8"R`/"uuUz3+1EV*+PQkU*s{t[+*v~[osRCpEry5瞏Û]^{v>kIV*U$'&*é?u\uuFKHX* (J' }߯k{qϞcUzmhՙE/o^0!05]#y9wRcg_hpHu\*.7ΕKyvB}=5\אI$]]ʕ *AC $v7M-m4,[ -fkVԆ3LUe,Jm)tBq/}IƷKʾi6pWWuLmm26D2ZmZ!8~+2XBӵ9[/7Qܽ 6^f54Wi3o/~9yGG;vC2vH"nsx4]\ Mrd[,?V6?zy6Gz{]럳0`'/YmU%lQwYg3Ϊbʑ<ˮ*/~D2uj2!w5]2fY]= %r䒅 WMܰaCk[D: 6LsSDNUaUe"Rzzݨ i5Weͬ Te<0g ȊSTCheR<1ͧ|>'VY9r.dN^ tU6ߊhɤSd~y{鎕d&b$ d8.,>ɚdL7LEiͬQ5 #L&iUVEh]9%<Ѯ$cfEv *MxۦFU)vGJԂDʮdXֻuڏ9R+J<|(탍Ɖ$Ik׮mhhd2-^xPr^mcjguV٥`9ߠxY0N`rc\^8͝;WuFjMkMMM'j@XaΙ3Gn,Y7y h4 ׅ5tA^ZÕ0Mo>7^UxE/իW okkX cc0< Ν;M<^ppb]8\b2Z+Whe 30Z`O.!00,]vyݻ4- #Hk#A$x0HxmX}Waހ3.lܺukp P))?z(Cr~Q `w Z#PYGlB‚33 Y LR0B])xMM@+{GBcpv; Yy(Uؑ[f0 AaTUV=`@g PBB:A{ ζtR0p67\<|uuurׯAWlaÆ˗n7}Dd`1cրKy avh7| .پ_0%g-9m2ˇ!|C~MJ;f#ˎi3lbץ" 2Г xȌWUo';E&ϳ{,H… Aߛ9WQLcJTOkdߦ%~I׀ھeoo'Zw|o>7~w͇o~@<,K^YY#o'{elB\)9/ԭfV]wz~;y[(*[N(}ʕa~;){0)sU9o~;Iow͇o~7p|o>7~w͇o>7~w͇o~7p|o>7~wp|o>淓a<]כUU}S?I%!1 )b?p-8rl XyՂ?-n^ ?//66~YTM>Pg> @o=oذO~7ЇXY),^snhjQK@ %]MӂA=8#;# !A*;Daþ_YQjǢŸ9ye.'x.!NusM:Pr+ .KkahrRK1"LZơnmx e o݇ڊP['?/xU9spvN:"dL+:>=jASEKU֞x4׫k ">Qʃfj,`Hː#D,wuqQrp~bo… $BR8eEpk6zuð@ݭm}Yݱ]4AS94hijfPGX3`V$Lr"&!^!x9Ch/a2^va(h}<,bܽ/L <$<~,jBkP% ҁ~:T 3$a:C:%5y=Z&M dĸ #/˟>por8F%^z$0J6WRfkkE-=f8q6x|k4 $Hb.4>>>W4u a$OnGL3kpNiKlp0 wۖÉ,=^"?&ggu鯼ru?gI;Eͯa @ч˞y5caQ̐>j{/T/7oY+&I)\!Im"Ծk;vTjnklbkb;@ua{{{ w,)2qLOMmζ_i>+FfkW؀j=C/p~+?duYomB_^5R9cqQ_пƩ}M"D{>f-]uR{W->j?9 Q~|MpWA~~Ok<]"\vs&pVi&}pmUbs`$&.BP !7=tM~s>1_l\d,ד bnޘgft1F$MOa B0c/jly͐LMry}<3E_x6a;LM`qkwc0Ku_aXK% ῶ {uYPy%c z9_u=?tL,Kz͸pQ󎿺;MǑ˿i`:b;3'.ׅ.l8{v|;l?ylX٦I>3/@$( #ϡ(?&GS@( >ƅva`=+OOM/4+;Cn ./sWyO!pzY}w,A\;wqOJܡ߸e8F 6(~y)xH?~<3~[beto+m[9:K~qnIpngWW+@fsNhCbOOs4 h%mR1z/lf+,69oc?A᱘/%V_yϗ] }NW$I(w? Qo%{w}sbI8ٽL ؉^Iޞ+Z:ȬgZ5\9JpL)zIOb70\s.W eoM/;>^@XzյGU<*ި0^,G hI&&CiU*2'Dssr'fڞfZ`8HN,]M ܡ {e1o k{]r@Y~ִ-ޢ\ج{{طP+e{ %=L#?p19,.K|^`Ji~(:<:J/=^>Mu}tw̄u҃ PnVcPOK/$ '}z-:ƨ S+ł#EhЛSScb"T}3hGw<&ޝ{䀸G Cna|݇at>Jº iAЂLa>;ރiv( $!B$Z60a*B{sM'K>R!-LGf'{8N<҅,]A]:GWG*# ߡ^ ͦ6%氆49`Zw}/{7ڵYΎLkZꕳҁJ>KgL^O?v?t.hj).]60r0]`{ֈA&7V^?j~8 4[QLׄ;1Q3fw9h:@x%yݴI h!bX1H`TR?2 *d}هV-{ܿ/OgWlh~ۇ9AA~Y+bހW_0'tO `wLB;4 -Ԯ^7~k7DE:^bmm/[cn*%*pWVx~0t} aZt} a:w@<wc9KeHXw dza7[[o?jֆmyL #i!UT@BPIAPdR(+=32!jPR֏*SQO2׻z F&×.gߺ[~F | C"fQlfynq MO~lonfh5Ε VɄi3]s];|nFb+#swj߸i%Ƙi0Y,!cXwZޫ^CAހe̐=iAu6M[ۑycﻏ{{>fFCUJ]FU  cgk6Ńwd-vv[Xԧg88~7֐*1W_`2K恤+s|vNq3 q0We늆 Җ\0!`D5Sʊ ޴ɛO8&qPbJ$a}1&hc!q)sZ~Xtݪo*}?v͆60I^0^Esy٥R&)O0vUd@ܐ( Љוl*(__sKEjO^(|u8X3TFe(8`+F+fptRK ǀċzC4jȑ@͞0߿G4aВvВ%kbpfRFK4LW(٥wIYL-_ Ɖ@I5WF5=ʊ9Nxx>7gslNP#bڡI~3h`CX +{~F*iRa ε,o6P#1+}t6Ý͏~m3L$oYGy-p}Z _k& W{on;ֈZ6|Lkf8L72l\N !,b؟zFI%Q(PXIR1TBNґiTfh̀!Ox{ˇuC"DG(rhr -DvS2ժ D:/\y91Aӎʿݥ^|Ц"V 3g00)%AO5 藁{m[ ]gzoTiU%7m3tVW/L T`dz_zMZʼn,g5 ë}-~*T~ E;;n~J ]#y260m00d΃uA\!,C~IV(Cʍ5oF`4?H]1:Kix!i^u7'Z< {組;lz:fU.ekZc=l t:Br_^IiR+-Jx%3 ES}sZ 01I B#ElWd6(z0M-*vw4)ܙi5` +W/⥀aQ{4(7:~A.ݱh+WRR *c/?>7.׮0vϝ׉wfijA55@o]9hŽTI86qlv/rx/g&ؕ‚ђ $S)eʟ>ʆaчۆi1ԛhGWO?nVbٝjRe_cYCM3b֔bwRe!JcTLK d8rZm/qgf>wHz>R0]hj}vWpEFx z'S"ꇾÐIJʌrUŖ21&`c ;/^xgAb;旟7O{*Q!IW+J<{W7ڸnLV^pSڲ)N(ݑ 2n M*v/k*gO]%xcS&}gr*Der߶"Q>Ppr16 ]a%o.B:50&IO /$T0M=GćXFAj{X;+F*fLg\!WR^(xu^k0k5`V{l$A+BM`q^Yz{hiC)lHر஌Ѹ60zȶHNY9@[sBd(.)!YB_RI<։Oц $r ebԬy|U=7_+Ut S, A-YZ)\ wS7B&EGa~AٖOy!c{.60[EkAKV=ʝkWhl@T BehvzU| J]v4CuSGU.NszyO77W*bX~5У]+.mw{Ukp]寭@P͉Rt4Nf4G);8gW2iĒ uR'rΨe;_oa^[&tW{Tp(WVV_9$ljFPVI>,:9a(YSI`ꮨzwr~/G+ǃ[-#J~D~:# sU 0g2l@Y+ts $ӵ|Og6q}?]I֍Vb̢Ӏ;SUj8HTy[]YZlnLQ+H<9 d 63K{"Tm%!2-A<Its/_+SW|rmOh _قU.#*l}Ja*`I[{%;ޙ!X/ UE^ÐL#~錹0XPPZjFM&|X-T 굤N\ީ i]66Z"*=J/XyO<- 6tޡ/'ݠBxny6ǁC.0WvbQd9\dN,P(%2\RN*2gx: \3}K **QmZle&3lMakk+4GJÎ:{,-xH~T0˗]Br)n6:7ϗ (hXSS"#ǭ-I:$ڴe/ ?Xf"_6jz\CmJ]GiL\߳jQV)')/4井+nK]2jiBIcQgN1cM<~[sx-|sjj*HOn`߂gh+%-yE oRuąM69ˢ8!kX}KؕK,R)&>5NJj_!h%-cH/μp$XWz\N҉,媘G2jdJ>YnccgsUһj#zjݻw?!@[pn "Y_Tk 9kN]Kztm٦,pKKW؁+T/e^N3Bvz`drXٍW-sW_Z@IU+e\$,e휓tIl&CMۙY^lܨ*q?Pޣu=H:;Ȗ?>j2æky͠q$yfJ֞XknέםZZM[JWϯ 5pnkTe/[YrUKKK0XO tq%?gO zTlzˑZeh.LդgCxu*y ihP*C(ZDKK&9>XR/I <)IS7H8<'~70ofvN%/ڣ1;֔eN*49ReCI{YlA %k5Xkmo40xrqAIюK3NH&乓jPtqύ:0ͳU#\\\b_~֭zp7LvnI焱H^R釥xGI֊z+{,,PXdUGG6@Ν?")w`&L2Lx]Tnu2'V5! … dz,,,fPw雝%GJw4lt;?||Vw\ #* #*M\*]Ezcpm"Ƈ`%J4 yI a* 5NF*/AXmEbO!K xccx<ϱo]ڪ{ri53d-/=9ѫ \ LuY]" cTK%Hf2I&kZJ0aqѯkؾp 3Sa``bQFsL7n1ܹ' wI٨3n *TNćma ԓ44CtAmD뜋Y*&^#+I&0&&h4R0xuSf;bAJr cLOcUn}q }r333[[[rzz3YrP'͛uӒ@rB58mS ދ)O{+g"9D<fp$ 4hq1*g!.yaQFjnll@aZ cj*53\7t㊧bxPu/ @$OD2cq25t딚S1.y-7r x8i @[0SZ1布 xcc DD%ȍ6g~Q.apjԩp4QƕmkcwJ}IMnKaU+'R83VzXR?QDQb'e;&B1cn ?ܣ*h[pǍT *:Yd¯ Sj/$sul1=FUAgHRmR4V&N֦PL+cgM,[]pW忏D:~qqרVkVWMjG {QZR@JQ+0L2M!LάF(: \5Acn.=\ FI+ar?BݽŽY&Upd=?_{OzL{M6>k5{%Zi}[]ּ®ִAILF0, &ݰ\:aԀvdmTmx/} o'K?ckkϲ&.XvsƱIR&31;;2Riz Fs3KNLt2,+jœ8ѓ(*_t܇NOO;3/0 lΝ;LZLeuCzbw{V3". caaBu= s U$ qb*-,h+t%a&pK3ӕU8C|8=*fE~ћoy׃w:x:χs.Sf//;L<=8Q09hbFY\߿h$'qGn][+ Ec idnnBX+72fi11IYVLSwRtۃ 7fffzPL$eTUT:c A*u$x`.T#j `wĆK8Θ]eW*a [wY\\rË{wX6R)bGBP]ITL=0Tr<3)x VXT~kq; <~X{nww,њ?}e]YYyU(fԄS/Hg`Lz6n̉0@ݣA{y` PNhm^ܫ: _+Ex"=w-ڡ`IENDB`lmms-1.1.3/plugins/patman/logo.png000066400000000000000000000023101247673406200171020ustar00rootroot00000000000000PNG  IHDR00WbKGDC pHYs  tIME2+#FUIDAThK[Ɵ-iJI\&5*tN4(̚M:AD D8.FjǕ@ )U jP  ^Sbfu;?zߵdɒ%K,&—BDE |')Z|73&^ O?:iwZ^2Bl B2z$j̻=ꙙLMM###N it>99$F!Ix˅ @V#77(.~\ !}?pveeeD"$ pHggg,JKKRjVhp~~ '<1Q[[- a[Y0LX[[hdB^^T*\.B$>qVzF$M `00zh4$h4J˞677fqee%]Ğq655qii?XQQAI^,^$VTT{nqqf.+GʲN'Njp8qәvoojrbf3PP( l63=󔦔dz)Z,gggxL&3$ &Iēv+Bt:noo3A0V>ikjp:;NYSj%isRRؘ3X888ZzzqhhGGGret3Hci)V{r&v"¿_f?^ϒ%K,-Ѷ78IENDB`lmms-1.1.3/plugins/patman/loop_off.png000066400000000000000000000015741247673406200177600ustar00rootroot00000000000000PNG  IHDR[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8OEsfe? #lTiJkln0U{ck4T%Ն"B-sv!^w&g~g~|p(<}^/@E*.3q39f-grdsTo)젪E"#1KbEjAl  b )(RwF!(hO?ʇ/.UɪhOEnkN՞rg}s1Fb.#21r#qwD7]^S"Dp !C$a 6;7cfgާ9/˙$}VC1*Kg}>V"!ER'6OMgg͝ ʰ173K$j j ][, "3!S QUMj: 0>Fvw/Dv4@Z6+,,,UEE X^ů۔刹sT00!fx{.ng|/4Mmnz^'EIf:q\3rwxER*לSefo[2vwy@ 8lj|MaYd3@0whۼ9iZ(G%^=_OX%03Z7 yTrbf,,-h410q\9rHo8?wDG@?d3,_Z끃?q(HIENDB`lmms-1.1.3/plugins/patman/loop_on.png000066400000000000000000000016521247673406200176170ustar00rootroot00000000000000PNG  IHDR[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<'IDAT8oE?o}R5],nQD1IϠG WMLh 7h(lŊe߻<U'L3y̘^>0`CAQ5c#D HHJAcQ^aRR !I<'xʉͦQ8_c}1,9K="$:Uaq)avIx1ef&p|+Wj,};M A>%02㘬 ijIٳM𐯾km{N9N?k4_#4Zcf_Ӆ?sxX@k-:s|î]16ѬLgk}U~gLO7mXLIa<;wa~U * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "patman.h" #include #include #include #include "endian_handling.h" #include "engine.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include "song.h" #include "string_pair_drag.h" #include "tooltip.h" #include "FileDialog.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT patman_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "PatMan", QT_TRANSLATE_NOOP( "pluginBrowser", "GUS-compatible patch instrument" ), "Javier Serrano Polo ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), "pat", NULL } ; // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new patmanInstrument( static_cast( _data ) ); } } patmanInstrument::patmanInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &patman_plugin_descriptor ), m_patchFile( QString::null ), m_loopedModel( true, this ), m_tunedModel( true, this ) { } patmanInstrument::~patmanInstrument() { unloadCurrentPatch(); } void patmanInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "src", m_patchFile ); m_loopedModel.saveSettings( _doc, _this, "looped" ); m_tunedModel.saveSettings( _doc, _this, "tuned" ); } void patmanInstrument::loadSettings( const QDomElement & _this ) { setFile( _this.attribute( "src" ), FALSE ); m_loopedModel.loadSettings( _this, "looped" ); m_tunedModel.loadSettings( _this, "tuned" ); } void patmanInstrument::loadFile( const QString & _file ) { setFile( _file ); } QString patmanInstrument::nodeName( void ) const { return( patman_plugin_descriptor.name ); } void patmanInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if( m_patchFile == "" ) { return; } const fpp_t frames = _n->framesLeftForCurrentPeriod(); if( !_n->m_pluginData ) { selectSample( _n ); } handle_data * hdata = (handle_data *)_n->m_pluginData; float play_freq = hdata->tuned ? _n->frequency() : hdata->sample->frequency(); if( hdata->sample->play( _working_buffer, hdata->state, frames, play_freq, m_loopedModel.value() ? SampleBuffer::LoopOn : SampleBuffer::LoopOff ) ) { applyRelease( _working_buffer, _n ); instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } } void patmanInstrument::deleteNotePluginData( NotePlayHandle * _n ) { handle_data * hdata = (handle_data *)_n->m_pluginData; sharedObject::unref( hdata->sample ); delete hdata->state; delete hdata; } void patmanInstrument::setFile( const QString & _patch_file, bool _rename ) { if( _patch_file.size() <= 0 ) { m_patchFile = QString::null; return; } // is current instrument-track-name equal to previous-filename?? if( _rename && ( instrumentTrack()->name() == QFileInfo( m_patchFile ).fileName() || m_patchFile == "" ) ) { // then set it to new one instrumentTrack()->setName( QFileInfo( _patch_file ).fileName() ); } // else we don't touch the instrument-track-name, because the user // named it self m_patchFile = SampleBuffer::tryToMakeRelative( _patch_file ); LoadErrors error = loadPatch( SampleBuffer::tryToMakeAbsolute( _patch_file ) ); if( error ) { printf("Load error\n"); } emit fileChanged(); } patmanInstrument::LoadErrors patmanInstrument::loadPatch( const QString & _filename ) { unloadCurrentPatch(); FILE * fd = fopen( _filename.toUtf8().constData() , "rb" ); if( !fd ) { perror( "fopen" ); return( LoadOpen ); } unsigned char header[239]; if( fread( header, 1, 239, fd ) != 239 || ( memcmp( header, "GF1PATCH110\0ID#000002", 22 ) && memcmp( header, "GF1PATCH100\0ID#000002", 22 ) ) ) { fclose( fd ); return( LoadNotGUS ); } if( header[82] != 1 && header[82] != 0 ) { fclose( fd ); return( LoadInstruments ); } if( header[151] != 1 && header[151] != 0 ) { fclose( fd ); return( LoadLayers ); } int sample_count = header[198]; for( int i = 0; i < sample_count; ++i ) { unsigned short tmpshort; #define SKIP_BYTES( x ) \ if ( fseek( fd, x, SEEK_CUR ) == -1 ) \ { \ fclose( fd ); \ return( LoadIO ); \ } #define READ_SHORT( x ) \ if ( fread( &tmpshort, 2, 1, fd ) != 1 ) \ { \ fclose( fd ); \ return( LoadIO ); \ } \ x = (unsigned short)swap16IfBE( tmpshort ); #define READ_LONG( x ) \ if ( fread( &x, 4, 1, fd ) != 1 ) \ { \ fclose( fd ); \ return( LoadIO ); \ } \ x = (unsigned)swap32IfBE( x ); // skip wave name, fractions SKIP_BYTES( 7 + 1 ); unsigned data_length; READ_LONG( data_length ); unsigned loop_start; READ_LONG( loop_start ); unsigned loop_end; READ_LONG( loop_end ); unsigned sample_rate; READ_SHORT( sample_rate ); // skip low_freq, high_freq SKIP_BYTES( 4 + 4 ); unsigned root_freq; READ_LONG( root_freq ); // skip tuning, panning, envelope, tremolo, vibrato SKIP_BYTES( 2 + 1 + 12 + 3 + 3 ); unsigned char modes; if ( fread( &modes, 1, 1, fd ) != 1 ) { fclose( fd ); return( LoadIO ); } // skip scale frequency, scale factor, reserved space SKIP_BYTES( 2 + 2 + 36 ); f_cnt_t frames; sample_t * wave_samples; if( modes & MODES_16BIT ) { frames = data_length >> 1; wave_samples = new sample_t[frames]; for( f_cnt_t frame = 0; frame < frames; ++frame ) { short sample; if ( fread( &sample, 2, 1, fd ) != 1 ) { delete[] wave_samples; fclose( fd ); return( LoadIO ); } sample = swap16IfBE( sample ); if( modes & MODES_UNSIGNED ) { sample ^= 0x8000; } wave_samples[frame] = sample / 32767.0f; } loop_start >>= 1; loop_end >>= 1; } else { frames = data_length; wave_samples = new sample_t[frames]; for( f_cnt_t frame = 0; frame < frames; ++frame ) { char sample; if ( fread( &sample, 1, 1, fd ) != 1 ) { delete[] wave_samples; fclose( fd ); return( LoadIO ); } if( modes & MODES_UNSIGNED ) { sample ^= 0x80; } wave_samples[frame] = sample / 127.0f; } } sampleFrame * data = new sampleFrame[frames]; for( f_cnt_t frame = 0; frame < frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl ) { data[frame][chnl] = wave_samples[frame]; } } SampleBuffer* psample = new SampleBuffer( data, frames ); psample->setFrequency( root_freq / 1000.0f ); psample->setSampleRate( sample_rate ); if( modes & MODES_LOOPING ) { psample->setLoopStartFrame( loop_start ); psample->setLoopEndFrame( loop_end ); } m_patchSamples.push_back( psample ); delete[] wave_samples; delete[] data; } fclose( fd ); return( LoadOK ); } void patmanInstrument::unloadCurrentPatch( void ) { while( !m_patchSamples.empty() ) { sharedObject::unref( m_patchSamples.back() ); m_patchSamples.pop_back(); } } void patmanInstrument::selectSample( NotePlayHandle * _n ) { const float freq = _n->frequency(); float min_dist = HUGE_VALF; SampleBuffer* sample = NULL; for( QVector::iterator it = m_patchSamples.begin(); it != m_patchSamples.end(); ++it ) { float patch_freq = ( *it )->frequency(); float dist = freq >= patch_freq ? freq / patch_freq : patch_freq / freq; if( dist < min_dist ) { min_dist = dist; sample = *it; } } handle_data * hdata = new handle_data; hdata->tuned = m_tunedModel.value(); if( sample ) { hdata->sample = sharedObject::ref( sample ); } else { hdata->sample = new SampleBuffer( NULL, 0 ); } hdata->state = new SampleBuffer::handleState( _n->hasDetuningInfo() ); _n->m_pluginData = hdata; } PluginView * patmanInstrument::instantiateView( QWidget * _parent ) { return( new PatmanView( this, _parent ) ); } PatmanView::PatmanView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ), m_pi( NULL ) { setAutoFillBackground( TRUE ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); m_openFileButton = new pixmapButton( this, NULL ); m_openFileButton->setObjectName( "openFileButton" ); m_openFileButton->setCursor( QCursor( Qt::PointingHandCursor ) ); m_openFileButton->move( 227, 86 ); m_openFileButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file_on" ) ); m_openFileButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file" ) ); connect( m_openFileButton, SIGNAL( clicked() ), this, SLOT( openFile() ) ); toolTip::add( m_openFileButton, tr( "Open other patch" ) ); m_openFileButton->setWhatsThis( tr( "Click here to open another patch-file. Loop and Tune " "settings are not reset." ) ); m_loopButton = new pixmapButton( this, tr( "Loop" ) ); m_loopButton->setObjectName("loopButton"); m_loopButton->setCheckable( TRUE ); m_loopButton->move( 195, 138 ); m_loopButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_on" ) ); m_loopButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_off" ) ); toolTip::add( m_loopButton, tr( "Loop mode" ) ); m_loopButton->setWhatsThis( tr( "Here you can toggle the Loop mode. If enabled, PatMan " "will use the loop information available in the " "file." ) ); m_tuneButton = new pixmapButton( this, tr( "Tune" ) ); m_tuneButton->setObjectName("tuneButton"); m_tuneButton->setCheckable( TRUE ); m_tuneButton->move( 223, 138 ); m_tuneButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "tune_on" ) ); m_tuneButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "tune_off" ) ); toolTip::add( m_tuneButton, tr( "Tune mode" ) ); m_tuneButton->setWhatsThis( tr( "Here you can toggle the Tune mode. If enabled, PatMan " "will tune the sample to match the note's " "frequency." ) ); m_displayFilename = tr( "No file selected" ); setAcceptDrops( TRUE ); } PatmanView::~PatmanView() { } void PatmanView::openFile( void ) { FileDialog ofd( NULL, tr( "Open patch file" ) ); ofd.setFileMode( FileDialog::ExistingFiles ); QStringList types; types << tr( "Patch-Files (*.pat)" ); ofd.setFilters( types ); if( m_pi->m_patchFile == "" ) { if( QDir( "/usr/share/midi/freepats" ).exists() ) { ofd.setDirectory( "/usr/share/midi/freepats" ); } else { ofd.setDirectory( configManager::inst()->userSamplesDir() ); } } else if( QFileInfo( m_pi->m_patchFile ).isRelative() ) { QString f = configManager::inst()->userSamplesDir() + m_pi->m_patchFile; if( QFileInfo( f ).exists() == FALSE ) { f = configManager::inst()->factorySamplesDir() + m_pi->m_patchFile; } ofd.selectFile( f ); } else { ofd.selectFile( m_pi->m_patchFile ); } if( ofd.exec() == QDialog::Accepted && !ofd.selectedFiles().isEmpty() ) { QString f = ofd.selectedFiles()[0]; if( f != "" ) { m_pi->setFile( f ); engine::getSong()->setModified(); } } } void PatmanView::updateFilename( void ) { m_displayFilename = ""; int idx = m_pi->m_patchFile.length(); QFontMetrics fm( pointSize<8>( font() ) ); // simple algorithm for creating a text from the filename that // matches in the white rectangle while( idx > 0 && fm.size( Qt::TextSingleLine, m_displayFilename + "..." ).width() < 225 ) { m_displayFilename = m_pi->m_patchFile[--idx] + m_displayFilename; } if( idx > 0 ) { m_displayFilename = "..." + m_displayFilename; } update(); } void PatmanView::dragEnterEvent( QDragEnterEvent * _dee ) { if( _dee->mimeData()->hasFormat( stringPairDrag::mimeType() ) ) { QString txt = _dee->mimeData()->data( stringPairDrag::mimeType() ); if( txt.section( ':', 0, 0 ) == "samplefile" ) { _dee->acceptProposedAction(); } else { _dee->ignore(); } } else { _dee->ignore(); } } void PatmanView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == "samplefile" ) { m_pi->setFile( value ); _de->accept(); return; } _de->ignore(); } void PatmanView::paintEvent( QPaintEvent * ) { QPainter p( this ); p.setFont( pointSize<8>( font() ) ); p.drawText( 8, 116, 235, 16, Qt::AlignLeft | Qt::TextSingleLine | Qt::AlignVCenter, m_displayFilename ); } void PatmanView::modelChanged( void ) { m_pi = castModel(); m_loopButton->setModel( &m_pi->m_loopedModel ); m_tuneButton->setModel( &m_pi->m_tunedModel ); connect( m_pi, SIGNAL( fileChanged() ), this, SLOT( updateFilename() ) ); } #include "moc_patman.cxx" lmms-1.1.3/plugins/patman/patman.h000066400000000000000000000062541247673406200171000ustar00rootroot00000000000000/* * patman.h - header for a GUS-compatible patch instrument plugin * * Copyright (c) 2007-2008 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PATMAN_H_ #define _PATMAN_H_ #include "Instrument.h" #include "InstrumentView.h" #include "SampleBuffer.h" #include "AutomatableModel.h" class pixmapButton; #define MODES_16BIT ( 1 << 0 ) #define MODES_UNSIGNED ( 1 << 1 ) #define MODES_LOOPING ( 1 << 2 ) #define MODES_PINGPONG ( 1 << 3 ) #define MODES_REVERSE ( 1 << 4 ) #define MODES_SUSTAIN ( 1 << 5 ) #define MODES_ENVELOPE ( 1 << 6 ) #define MODES_CLAMPED ( 1 << 7 ) class patmanInstrument : public Instrument { Q_OBJECT public: patmanInstrument( InstrumentTrack * _track ); virtual ~patmanInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual void loadFile( const QString & _file ); virtual QString nodeName( void ) const; virtual f_cnt_t desiredReleaseFrames( void ) const { return( 128 ); } virtual PluginView * instantiateView( QWidget * _parent ); public slots: void setFile( const QString & _patch_file, bool _rename = true ); private: typedef struct { SampleBuffer::handleState* state; bool tuned; SampleBuffer* sample; } handle_data; QString m_patchFile; QVector m_patchSamples; BoolModel m_loopedModel; BoolModel m_tunedModel; enum LoadErrors { LoadOK, LoadOpen, LoadNotGUS, LoadInstruments, LoadLayers, LoadIO } ; LoadErrors loadPatch( const QString & _filename ); void unloadCurrentPatch( void ); void selectSample( NotePlayHandle * _n ); friend class PatmanView; signals: void fileChanged( void ); } ; class PatmanView : public InstrumentView { Q_OBJECT public: PatmanView( Instrument * _instrument, QWidget * _parent ); virtual ~PatmanView(); public slots: void openFile( void ); void updateFilename( void ); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void paintEvent( QPaintEvent * ); private: virtual void modelChanged( void ); patmanInstrument * m_pi; QString m_displayFilename; pixmapButton * m_openFileButton; pixmapButton * m_loopButton; pixmapButton * m_tuneButton; } ; #endif lmms-1.1.3/plugins/patman/select_file.png000066400000000000000000000012631247673406200204260ustar00rootroot00000000000000PNG  IHDRzLsBITOkIDAT(SKTg껜{$1, II_dTDLtFt{z.>T&OE׾7_~8[0;#&`035%>VՒCdf1=>;_3S!C9ǎ3M{|4udawc1b1ϥ%ϕҖK)9h{?];x|Ck4"$RU$vsxliF#}Fȷ߼+gg3GJ!xT FHAqK8}w?{a"0~Ln)9XQA4T ;NpWLWFIENDB`lmms-1.1.3/plugins/patman/tune_off.png000066400000000000000000000014151247673406200177540ustar00rootroot00000000000000PNG  IHDR[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8oEUv!F#"7.pCA9X6$8ƻޝ3{Z)[K>~i/ Iy;߁**jxNJJ?/PUJ\)aj*n7o99f V@ dQUrΔ7fO/xyy_r:y(?x%g*:0L*0 Əm#ADx5GJDX.-g#^ݷV&^^^j:ED֕x ˆ.o{DYޮODޣ3m*{;dBDcÏ˯ e1ږ~շ*"g_ã9{1CqDn X,uّR٣ [Mhjꪭl6y 6L{MDIENDB`lmms-1.1.3/plugins/patman/tune_on.png000066400000000000000000000013741247673406200176220ustar00rootroot00000000000000PNG  IHDR[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<yIDAT8nUG8F`Ґ." tHK$/Mdр&Q^ DiaQ8M %ܝؽK4bfvws?~ / H"FQ3jJD%q&ov60J(rbp᫑.KԖ@3í nlƙ|q W ^V^3P|s $A0S̭7C3VW(5eq\D[bja6!J/+R@f6H3QUDUE+ fPH@3c (P\'F:$1H!iG InOX,yG f;[&5E$@X<8F̔d0֡n=}KGjӧ`l}E{&d&a#%JD [w?7#LU> 3=ZL raJ&LSV܉H bC 2#OU5[5ul#A-'( SIENDB`lmms-1.1.3/plugins/peak_controller_effect/000077500000000000000000000000001247673406200206575ustar00rootroot00000000000000lmms-1.1.3/plugins/peak_controller_effect/CMakeLists.txt000066400000000000000000000006171247673406200234230ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(peakcontrollereffect peak_controller_effect.cpp peak_controller_effect_controls.cpp peak_controller_effect_control_dialog.cpp peak_controller_effect.h peak_controller_effect_controls.h peak_controller_effect_control_dialog.h MOCFILES peak_controller_effect_controls.h peak_controller_effect_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/peak_controller_effect/artwork.png000066400000000000000000000633621247673406200230700ustar00rootroot00000000000000PNG  IHDRybKGD pHYs  tIME;{ktEXtCommentCreated with GIMPW IDATxڄyWu|jT,$@B $m;;t7Wz8mY+Yn{xYc!TKUw{_az}~oЛ9p0 5{ľpjf@o 0D"Z8G _A G ק ~O䠟D h}-8|O8uo7 g<lH0<9@{klYz\" U>'䵷HB^/L*B^| &=3?1"9"*BJCbQC% ,9N@jD犇# h9Ϝrf^~u8a}wzf\l4$|_ K. W^}^բ ~8׾ XY*yP{QsdD-AAi9<\ϛo}mJ@D`t}Q2b88_/>7w}y1pկ{=D#_~O^aKI)믽[G? "B5 #nwh/>Oرc8x 3SCl OܿNB 0}۸O\Kʼ 8 pD^v/37Mo{+<ܧ ɴ"Y'3gdo~ٳrVXB@ `wS@o)+ +k4 vM٧k_=n'}pSO޻›o};~+q꥗]|kA=!$X][/?/U\m$Uk9 uӟT^Wqw'c/;G(O>]z9^p [X܃_{lmm}#xqݻo|[q+.*q+^u5O| }7}/K]<~7x#=z=˯yyY|?8t7-UYAXY[5 q.|_ӏ}]ooc=zx'1n-{`?|jj8Z !bs@AhxęD2pZ’00rwx cd|3¿_>~90D= c\͸;[bmcÀ|߻}n~3\,cWy7p?^MerZe 2wR|^>u  0׿??bmc/J<$_3a3♧ıc?\w-w`.8r.?0Wq{W};8"xތ o(ii=_/~Q {$@"T!aO4n}-hַ܄|.nflnk^}5!uxӛn¿_~x"- CjZx+p^yI)x5C5& A`A#XX"2 Vj4]̘o`Ooy;8zQltÀƻ.\r+pח_7CPs}q?/V0k9y3_a@&t]ӡ:t})w:G`ƾůگb6E|_9`Ga@tCc>g~Ѵ-EߏլA8nj C->pk_{v>KF[ca<}ߣktMQkND7F\pc{G۴xkͷ=04m"8øʫ#禉hƜ*Q( zJE ԓxJ@ ]k9MJF4h9^; -~u8}K睇aѶ~G~ƙm>s~чևS .4m{>snZiҷ-Ev&L=3O=+-z(}y] 't]fޠnZ4u(Gڷ?ᮯ5ŏȏs4i ŏȇG8wj78xn@6G ]qzg7V<3uӢz h.[t]ﱲ'(ߋm?д-N 'mעO|Cgu]׸7S`]576x !Y]BQBսsD s9UL8) ]ӤqmhM]k|ϝxM` <=njpã?7psQ9C看#E]x/6˪o$BF%]mG(]0< ڮx-!nj ln Rc{l7 Gˆvh#9G|\Z  l<yfѢm:ApuTM +H#Ρ3maѴy @, 0-u1V>uYlҴp[XMum]Ȉzm b1iԯVtãmh$ 0h\%t-92m2 G;U":hZ; %mHp}{BP?;XV}b>r>"BN 8pVW0#uo[ϹojV8W_ (`-mZ9I!F4mKi@0ڮA5w}a!`C+`Lkq, `103kCuӤ y ж&m% ]y?~ןh{ٻ $]oly&gAwBfo,9ڃ΀*Db}N!<[m Y Bpأo{À?{1`Ҧ:ЃC5,hkv_{=8vx橧pŗ-F׶d8A}7Gh`3ol {JX$`g>G< {wmD/sZ l9v qD۷5 B ]ߡz@<8.u궆ٙ+|gymFF1| <8zĂ+*9DQ@:Χ Q¨y!92OJh콵>{ymC:uۧO#xn<=͆0wufDXk{lFw=9|  W^J^Ǐk,֫ Y R$!dr(܏0p~@ݶ|QiOal!<`gpQ  :5ЏڊQ=y X aoƦmnQ`ZMqDm)0 v=8)i* mgф N=@D={RJ3І,sxuQ_9TTUdoP)l8\$:x׾[aV0A>ɏU$8 1敯]ۧ]KaF ! XҴsȐY|N4s〭}1t=꺵5sp:5fHafVֆJ3>PādM*m ,-oD8ha}Mہǀi>Qӷ{tumeŨCخI d ƅ qXcZD׆m#O)N'BQUR2 hpuT'}7³Os_JL?mӃ|oCxFBxLNӜ@ I{4 WW_N==w~Ķ]kS!<4wc;gD%htmk9`ZcMM {JdG! 8vPƠw"@7zBhv0MmZhgO^w~̃ڠ vHb+`-N>r4ь0,LH$ySN6SB[,vvch.%EƀJԨV=d c3cZzVq%Cf%ةp BVVgdAukEۇ|`f5-uN 1j! FEFuN'1HQe!'۩댲1 KlllArZaEB<Ƽn8XH aUi^3$xm۠m /zc90πP75꺃`FC7h|G!+8oIZaxBU`g{^h]AOCi4d^CG.@/<{{ųOE_ qyG :8>}{жh|ĵ ƚ ػw?^|:(0yz!4uӧOU=K{ÙN[xGX]]οc?9sO?0#F84Mt-x`8\r+@f ۷cak0+LSF/,QK¢`k!kBGbFb<N( v#+NZtcc)t]s x8pDU׾zcж=vN_᳸+qG@3G߶9VؤoF툾0? H ꕉ*QozN>>M~0[:/^+t;#s'zt]@4xwƛ ݈m 5 + x𞻰}E UDjN)p;މg| O|4MAS<3_ ft]Џ}86auӣ;C.bٳڗl];b=ǽ_+w\KtqF)|8eP# }/A@cCUy"Pi}GGŐdpf1}5U7V'1[|?2l#W^}-.rSO>sQsy҃qޑ'Q㈫^y]rYO"/|;g^sHn _ mibjt+6pWϞ[cg{4閷`}c9p~ʴD|X_Du{ߓ) vtmp߄眃Goمq%W\yHǃ sapӛ.5.QѴ;1mʆe+SL8- hC\/;B88bepm[ަin3×%{y_N.y /Dɜu|ېL耳E@5eayK'BYMxG-^`%@ G_v+M̷R,B%eV(%d'Jjb!m( .t#B;Jd,74!p1DOEǎ 9TdJ#: 9)َݘ(6e#,^C3:;"SERP]\g7Lmy'Cⓦ s&6I#v:-r pVe2LZC޼tʴ  ȯ37YU<|UA߮XM iTMnZˆV݋KaB7x*jI_G afbRaXȹ.+$6+U"&XxbJhuGu`)4wK-B*;Iˢu$T8r"&%8(M6cjξkVd]GX(jZzbʕ˨ΌwSQŪ!*fq EsOJJ7w%_g|*1,S,.B`">)l AFf_,1D 3&+1)eQ&$ç+NUQׁJC&HRlkYy-=HgOb^sH bQa{<0j7LW0SSw(1.oT Xq`aEՔߌ{Ger1!9+"GT Aē&$GV1G0i1r9tW&$gֻ E!}%LU+fK3*xVfTj:uEZ Z'ʣK NdLs'5Pɉ& '\^8 x5P3\\\ J1mI%`1ST%0I$= &xD(uG烣ar.NFC]o"ZM@86TGAݠ"r|-j7qhi۵WLsǪA=*?L UBgv&E׵o\yW0(m9^0 hrT/J(9'ylpH75C` i s9 ESZF#,Q Xu]DG\ނJ(9Vw7adRJ/ACEGNjj\޹@G2Q)j_Q6=9̼_j^d+_*R?'_R/t]U2qWɠ;]żܹr$:R؜FyE8ud61E5\2--bMJKh4̃D}]k.212-rE85>`pd#RwubA+U. M$*?nM#0&L:²Dƒ;ZF]lH?,d6cEHWvPVwSbcesXhy\#NsBS.%T.Me,l>rZ& SX**>LVO[{{ؕd\R?'Yjri0`U8S |vRLFh*S .2{#'9Q *eܔ;H7#;P>or("- &7fS-2qRu xwj.ˤ>?tfc8ҋJaJ* ޗzIzLiBU4#mu}lX,~I(^ jOBzŢ^PF"`ALKAqrg1CvJ%K&Xu&((M,:|<7\W*HT?x TAR5S| l/ER\X^2x1"4I͐Kv։/JhوYb|vP%I9p]Y4S۟yЪ(mAmKpjMbn 0%NHh1<#`&edU *&@ܗiɤjk@p:mIbETE[K]֮dz'duObel6L]c bzӯ\쨉ؗ 6i l!]pkޅR׼x%dG“̬- 'tU^`l4QR4 #6 vq)6BagRYI4.y%H'*c nbihX ]ak>QⱨN[J]U,y Jމ#`UQrTgU0S|+Kj+qd`Y$$~˴SB9j]b1an0P MfDZ$1 m_H)w+p$0Xx8>0Orrʪ9k3XKyjvOe"+SD&DMrA )Hv|&ht4 0.ͳ8vs6VU%ϮeVn,ieO;X%mcq'$hD>ʻt6cO2Ua.XNd"g>0CNצScˑGS0*^BP:la[wyEF!$KA㣁 =9TЗK6Y6enjGs˔]M%0$UHH2.8$$sW B)6i\RCxM0JCUM5-%Q](@ܐaaSxX\Q6P~_L>#F2HrKU¢4$ 4Yh?E%"UDfuy2H$ -FRTQj118FZ="b]qb0btVr)S\ȪvueO=BR.w%`F:}JphahdŘs, .!Y0"S<N9M)`&U<_1}&o\<.r3eG1H#^Гx'= gmJAތ L&䉧^"ezA2rČ-P +dq~l7|@h/ac5OuY=bO5OA y;,^즚k+HP]SkUsXs lZLJO|?5 |;p1TN F- #EKS?ۀ1 s?aLҁ쐤ܞhrˆ rdBd_IGUHB WLXʅI7 |Id\|&B,јߡ䞩²+`$="Lr:XCȣhݠ*7(mr' `+Ȑvi!⸡ O$q r* SL[:X[&*pz;,c8g-y OO^(.XV X_#aYH\i{3 m˿+F6q4Nɽ'"TݷU `*a11vMN(;"nT^DHR./DxDZƎQ$TP\C%]aW@~H3^`CA ˯=%6N١s[KIN9.+ qYl9v&?c4ve 6H""@:nqtΎ[&$Z8guV1-,{8Ie^ %%z:d3* ^Q.P4Lc[Pb:X<ӕTqL Mz<` 24L=0L42D ?2+II%g~uX.BB2&&P\1 z6.|6eީY,0".@l)XfdBC K4훓_ #T8aJBX̼!w >Ee& 0 䋦c o.\@<!+A,?5~J85 ^9ES'.vk"LyZ) u]y@6(_جL`,&dQ"!`^\ %-hLy\|֊ EQȒaZm8tllsoڗKsH(;%/rvc|-?=3g_8& w,u ,r1.  -|#%%BT!M2%T/pPȆHx#];ܒZsc؜q":+%J[>vKU8SZBPṔ <8N5O(UEH(WIRK,R%8N{̅YO#('PMRrP-['zTS_4ҧW-&3*4mQp,e')Z+$NؽjGumOH2&AzbJ!Gq&XZMiƙꂤ&nN.dec%DA 8ƒ Ԍw`pY{dxh&[8I{T.ZbskQ:N]r2)Jx"oK˗Iɛ$A֩II [( E)b&S"Q3PH2$kd*<'>Z*0)PIqT%4'eEnS=.OhvS")ZI 5Tp0‹n&тfA&v"K Ee|X8pjPK9ɔ $R+c*(-Ĥ+ HqXLGAU{Qpanݥ?YyR,R2%X, 2,)-dy 54SkmQ0ybXYdt['2E \qӴ \K~1#&L(,vŕtƎD!PJZp̺#P}p-%RBA!brZTڴ{YVL*^@DZ-`i_d<^ ē @U0#OdBp*0-)vΚҩ|\,ȰΜdHEf$CTSevQR2(XlZrm; "D>~Z"P .ؾb"es! R*2 XTʭϩ҄L_;M$f( $ U`u5y { -N%[H\8 0`m'C'hx[]d sG!ʗ/4͛H1m >s'ٕx,쾳["Kg@Oz|VǶ)3S?nAsh͉ 94g>wE3$}& KwF *ٳgw|+Ȏ qח&8|o*ִוllnDYJDvvEӂ CsrG=+oIQ*V@9Ҝ;LM{yi)/؛Sj+;H<+'=$hlgI< Z15ByRrZ'֩'@AaAb繌/4 79x}&՛ֹQ0N$KW%{G}]x2c.H Z -Z*aaVPz;!F$\L }O) 6)vdr3gmxﱵ3_a410Ʈ׳(}gB<e@!eNJ-kXp$VH,D1!ؑgƞU,ye{ӧﱮ 1Tp S. E`bQJ[X >)0nP"IMk^5%q6ưjȒAtBh=BXx쫾A4yVqԺsJlNʌ>Ed(bБ夗1Q`lH*0RzyCRaB4bz |CY,4sydHuM?vBND>qXd8edgLK J3}/QISŊH(nyĨ\fcZc@l+ʔAei( YVTRn';*M|kIk5*Jex#8d E߇Խ 틩c-om%Gq44sKd$ c$D|)`vGs7p.Ga`A=[pm@Gu#} 4_fB)d / qiKWtof/Ρ;ȂI'|E<%Px9Hm{h繺uSgd.Z(ò,8?;rUښx43kdћhM$ &r'It#TUd a"θIլ%?( 0k˴߲i/jnۛ:FRUwdfODŨ-Ky|U+| kY?~j'5܀g'xS[SMfjҙ纍}hFiIw]G ݻ:Q&0HEZ)#F5E ',manDL bd }0/3y٦RpS)U[,3sDC=$B&R5mW˃⏊=̳PҚL!ޘd4dd[cHhd uRuB9T+nkλ]#J&k mZr,by" oD *]cqO=!ZAt06M%1Eн%2x<}LlL~z3SMI%TPpKX[K tdaB1fITZyrbf#>qK{2䐩T諊FvY{WOj7!pM&M|l\}01f2S!exTO5ݡ*TИEvyM4I6[ޡ_JHi1~4a6Y&+MGe!/{,ʸɄIMm8d;-=7`ZV "n8qos4ϻFw e"XT1AI*RAb7Ȋ4^@C6H 4hMǺ&b+sdyGx90&5Ƶnv`:@MljփEk*R8~wvuaIw[orao%$VuDȊDAؓPr³@MuʠgcGRճLdG&O؈:S*i(@ȼq{7<~A$|pvrSO_ɂIzE:?g9wY"a1lھ.aG[бr|N zoW_)4 $UG Q2e}ȆʐYfߺѸ׶g1_Qpwt?Zq5ߺ}ӳ'lƌl[cLϰWr}]DxlJ#1z+)&)vt:Txt 92LEe^!םLzBo·o~X[Ź&yj-_w"|ߝ@t2]6Y>4=w$B+(,٭SB0yt X(\Ҧ@K:1v d)o Xۚ)QU]⨐f}bguiaoTxba s@ZuU Ԁ Q zB]C&>b70mIs?X"@KB-i Һ‚ZA`mksr1K>8 ,,fBv(Ue} lSpfj&5Q-0p3.!?~W%aj}uFOI[RL*,)*Y稧B7 fqg_ORmdЖ;j22gsQn ~ YZ.f4Ak z;63>v҄UZbhqp{XNP9RU! C%JClCljyYk=)(4|k6#nhf5XweYw&?8iufn:,t+kCX/c&Zwe$o& ݢO9ߗ(>8iی<oQym |'0,bkV򅺔5( 5E>V4UMj{y3;2Fj6]8Bad6j5&`:C[1Sh2Wg!Ƕ*YH{-YcdYMn_F&ˢ#^j 䏥/2Dv; 4@ZѨD1ld>rJqhVƾM|!WǪű)fOX4Iw|FaSiM#삠#dH -Bέk[|09f N}kkSׁ N#]"$' "U"IDڤP]N<~4lT_h`.r\G+ֵuՂKkSJxC@3_H&fI}Lc8ʘwԿ#(XhبHX6Hai0։yr[9Get*nDu]D_/.η}!э?vE8#h1!ۑ[fL.Io-,u-OU3cJc8[]{/ | caiϿ_+W\tSMKHvdFB:UVdqи.h;x`#x4vJHλ!%KxQ6Ů|jRMN^l3A1fɒ  f3d[K)n2i__|cݿw~?yC=|7prr~ӯ|nraF!DE08,6$  皌**I>uYz$pdLܣ(!91͓EGMX!ڰW c ɿE`IaJp;A5Z\qC44DS_(鬂КcH~v*|ȻwÕ+W /899\~T(a٤p=EkIIZLթ;1nDmg3P>UB$U]OR ߉XOC3@.NѠㄝV{)AB(w0gqIwՙv(32W%2H61k lԝ7q`V]{ɓ'8=}˯}iY*^zя~~x!zu9K>^!gqʇގ,lT&fkB(4̙(D΄$TDPd39ţą/ ͻUXh]HV (8 '5᰼} o{o˗ !j17u XfJqz^'?C}׾3'̯ oC|(C9f!diG5c!& ϸ xnʞt*?G]Rt*h"˼@MD[1N=1b2@Gv<h>W2Xu0'07~㝥7 , k nWHk !B3g~ D6|eo=ܼy GWkh1pyڜD'Hu+ $ygЅ1J\ԍ`&wFXwy2໦XwKÞ m_@>9-Mӯh';C .߸R/{/EdtN-ji!R=B\CGɞ0qvsfeׯT ڜeلrK{peOqLaЈbGfn&[.>E&l ڊ9-tmh7e)IENDB`lmms-1.1.3/plugins/peak_controller_effect/logo.png000066400000000000000000000062311247673406200223270ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/peak_controller_effect/peak_controller_effect.cpp000066400000000000000000000115761247673406200260740ustar00rootroot00000000000000/* * peak_controller_effect.cpp - PeakController effect plugin * * Copyright (c) 2008 Paul Giblock * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Controller.h" #include "song.h" #include "PeakController.h" #include "peak_controller_effect.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT peakcontrollereffect_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Peak Controller", QT_TRANSLATE_NOOP( "pluginBrowser", "Plugin for controlling knobs with sound peaks" ), "Paul Giblock ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } // We have to keep a list of all the PeakController effects so that we can save // an peakEffect-ID to the project. This ID is referenced in the PeakController // settings and is used to set the PeakControllerEffect pointer upon load //QVector PeakControllerEffect::s_effects; PeakControllerEffect::PeakControllerEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &peakcontrollereffect_plugin_descriptor, _parent, _key ), m_effectId( rand() ), m_peakControls( this ), m_lastSample( 0 ), m_lastRMS( -1 ), m_lastRMSavail(false), m_autoController( NULL ) { m_autoController = new PeakController( engine::getSong(), this ); engine::getSong()->addController( m_autoController ); PeakController::s_effects.append( this ); } PeakControllerEffect::~PeakControllerEffect() { int idx = PeakController::s_effects.indexOf( this ); if( idx >= 0 ) { PeakController::s_effects.remove( idx ); engine::getSong()->removeController( m_autoController ); } } namespace helpers { //! returns 1.0f if val > 0.0f, -1.0 else inline float sign(float val) { return -1.0f + 2.0f * (val > 0.0f); } //! if val >= 0.0f, returns sqrtf(val), else: -sqrtf(-val) inline float sqrt_neg(float val) { return sqrtf(fabs(val)) * helpers::sign(val); } } bool PeakControllerEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { PeakControllerEffectControls & c = m_peakControls; // This appears to be used for determining whether or not to continue processing // audio with this effect if( !isEnabled() || !isRunning() ) { return false; } // RMS: double sum = 0; if(c.m_absModel.value()) { for( int i = 0; i < _frames; ++i ) { // absolute value is achieved because the squares are > 0 sum += _buf[i][0]*_buf[i][0] + _buf[i][1]*_buf[i][1]; } } else { for( int i = 0; i < _frames; ++i ) { // the value is absolute because of squaring, // so we need to correct it sum += _buf[i][0]*_buf[i][0]*helpers::sign(_buf[i][0]) + _buf[i][1]*_buf[i][1]*helpers::sign(_buf[i][1]); } } // TODO: flipping this might cause clipping // this will mute the output after the values were measured if( c.m_muteModel.value() ) { for( int i = 0; i < _frames; ++i ) { _buf[i][0] = _buf[i][1] = 0.0f; } } float curRMS = helpers::sqrt_neg( sum / _frames ); const float origRMS = curRMS; if( !m_lastRMSavail ) { m_lastRMSavail = true; m_lastRMS = curRMS; } const float v = ( curRMS >= m_lastRMS ) ? c.m_attackModel.value() : c.m_decayModel.value(); const float a = helpers::sqrt_neg( helpers::sqrt_neg( v ) ); curRMS = (1-a)*curRMS + a*m_lastRMS; const float amount = c.m_amountModel.value() * c.m_amountMultModel.value(); m_lastSample = c.m_baseModel.value() + amount*curRMS; m_lastRMS = curRMS; // on greater buffer sizes our LP is updated less frequently, therfore // replay a certain number of passes so the LP state is as if it was // updated N times with buffer-size 1/N const int timeOversamp = (4*_frames) / DEFAULT_BUFFER_SIZE-1; for( int i = 0; i < timeOversamp; ++i ) { m_lastRMS = (1-a)*origRMS + a*m_lastRMS; } //checkGate( out_sum / _frames ); return isRunning(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return new PeakControllerEffect( _parent, static_cast( _data ) ); } } lmms-1.1.3/plugins/peak_controller_effect/peak_controller_effect.h000066400000000000000000000033201247673406200255250ustar00rootroot00000000000000/* * peak_controller_Effect.h - PeakController effect plugin * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PEAK_CONTROLLER_EFFECT_H #define _PEAK_CONTROLLER_EFFECT_H #include "Effect.h" #include "peak_controller_effect_controls.h" class PeakControllerEffect : public Effect { public: PeakControllerEffect( Model * parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~PeakControllerEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return &m_peakControls; } float lastSample() { return m_lastSample; } PeakController * controller() { return m_autoController; } int m_effectId; private: PeakControllerEffectControls m_peakControls; float m_lastSample; float m_lastRMS; bool m_lastRMSavail; PeakController * m_autoController; friend class PeakControllerEffectControls; } ; #endif lmms-1.1.3/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp000066400000000000000000000065441247673406200311520ustar00rootroot00000000000000/* * peak_controller_effect_control_dialog.cpp - control dialog for * PeakControllerEffect * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "peak_controller_effect_control_dialog.h" #include "peak_controller_effect_controls.h" #include "knob.h" #include "led_checkbox.h" #include "embed.h" PeakControllerEffectControlDialog::PeakControllerEffectControlDialog( PeakControllerEffectControls * _controls ) : EffectControlDialog( _controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); QVBoxLayout * tl = new QVBoxLayout( this ); tl->setContentsMargins( 5, 30, 8, 8 ); QHBoxLayout * l = new QHBoxLayout; l->setSpacing( 4 ); m_baseKnob = new knob( knobBright_26, this ); m_baseKnob->setLabel( tr( "BASE" ) ); m_baseKnob->setModel( &_controls->m_baseModel ); m_baseKnob->setHintText( tr( "Base amount:" ) + " ", "" ); m_amountKnob = new knob( knobBright_26, this ); m_amountKnob->setLabel( tr( "AMNT" ) ); m_amountKnob->setModel( &_controls->m_amountModel ); m_amountKnob->setHintText( tr( "Modulation amount:" ) + " ", "" ); m_amountMultKnob = new knob( knobBright_26, this ); m_amountMultKnob->setLabel( tr( "MULT" ) ); m_amountMultKnob->setModel( &_controls->m_amountMultModel ); m_amountMultKnob->setHintText( tr( "Amount Multiplicator:" ) + " ", "" ); m_attackKnob = new knob( knobBright_26, this ); m_attackKnob->setLabel( tr( "ATCK" ) ); m_attackKnob->setModel( &_controls->m_attackModel ); m_attackKnob->setHintText( tr( "Attack:" ) + " ", "" ); m_decayKnob = new knob( knobBright_26, this ); m_decayKnob->setLabel( tr( "DCAY" ) ); m_decayKnob->setModel( &_controls->m_decayModel ); m_decayKnob->setHintText( tr( "Release:" ) + " ", "" ); l->addWidget( m_baseKnob ); l->addWidget( m_amountKnob ); l->addWidget( m_amountMultKnob ); l->addWidget( m_attackKnob ); l->addWidget( m_decayKnob ); l->addStretch(); // expand, so other widgets have minimum width tl->addLayout( l ); QVBoxLayout * l2 = new QVBoxLayout; // = 2nd vbox m_muteLed = new ledCheckBox( "Mute Effect", this ); m_muteLed->setModel( &_controls->m_muteModel ); m_absLed = new ledCheckBox( "Absolute Value", this ); m_absLed->setModel( &_controls->m_absModel ); l2->addWidget( m_muteLed ); l2->addWidget( m_absLed ); l2->addStretch(); // expand, so other widgets have minimum height tl->addLayout( l2 ); setLayout( tl ); } #include "moc_peak_controller_effect_control_dialog.cxx" lmms-1.1.3/plugins/peak_controller_effect/peak_controller_effect_control_dialog.h000066400000000000000000000031101247673406200306010ustar00rootroot00000000000000/* * peak_controller_EffectControlDialog.h - control dialog for * peakControllerEffect * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PEAK_CONTROLLER_EFFECT_CONTROL_DIALOG_H #define _PEAK_CONTROLLER_EFFECT_CONTROL_DIALOG_H #include "EffectControlDialog.h" class PeakControllerEffectControls; class knob; class ledCheckBox; class PeakControllerEffectControlDialog : public EffectControlDialog { Q_OBJECT public: PeakControllerEffectControlDialog( PeakControllerEffectControls * _controls ); virtual ~PeakControllerEffectControlDialog() { } protected: knob * m_baseKnob; knob * m_amountKnob; knob * m_attackKnob; knob * m_decayKnob; ledCheckBox * m_muteLed; ledCheckBox * m_absLed; knob * m_amountMultKnob; } ; #endif lmms-1.1.3/plugins/peak_controller_effect/peak_controller_effect_controls.cpp000066400000000000000000000065321247673406200300130ustar00rootroot00000000000000/* * peak_controller_effect_controls.cpp - controls for peakController effect * * Copyright (c) 2008 Paul Giblock * Copyright (c) 2009-2011 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "PeakController.h" #include "peak_controller_effect_controls.h" #include "peak_controller_effect.h" #include "PresetPreviewPlayHandle.h" #include "song.h" PeakControllerEffectControls:: PeakControllerEffectControls( PeakControllerEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_baseModel( 0.5, 0.0, 1.0, 0.001, this, tr( "Base value" ) ), m_amountModel( 1.0, -1.0, 1.0, 0.005, this, tr( "Modulation amount" ) ), m_attackModel( 0, 0, 0.999, 0.001, this, tr( "Attack" ) ), m_decayModel( 0, 0, 0.999, 0.001, this, tr( "Release" ) ), m_muteModel( false, this, tr( "Mute output" ) ), m_absModel( true, this, tr("Abs Value") ), m_amountMultModel( 1.0, 0, 32, 0.2, this, tr("Amount Multiplicator") ) { } void PeakControllerEffectControls::loadSettings( const QDomElement & _this ) { m_baseModel.loadSettings( _this, "base" ); m_amountModel.loadSettings( _this, "amount" ); m_muteModel.loadSettings( _this, "mute" ); m_attackModel.loadSettings( _this, "attack" ); m_decayModel.loadSettings( _this, "decay" ); m_absModel.loadSettings( _this, "abs" ); m_amountMultModel.loadSettings( _this, "amountmult" ); /*If the peak controller effect is NOT loaded from project, * m_effectId stored is useless. * Reason to assign a random number to it: * If the user clone the instrument, and m_effectId is cloned, and * m_effectId is copied, then there would be two instruments * having the same id. */ if( engine::getSong()->isLoadingProject() == true ) { m_effect->m_effectId = _this.attribute( "effectId" ).toInt(); } else { m_effect->m_effectId = rand(); } if( m_effect->m_autoController && PresetPreviewPlayHandle::isPreviewing() == true ) { delete m_effect->m_autoController; m_effect->m_autoController = 0; } } void PeakControllerEffectControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "effectId", m_effect->m_effectId ); m_baseModel.saveSettings( _doc, _this, "base" ); m_amountModel.saveSettings( _doc, _this, "amount" ); m_muteModel.saveSettings( _doc, _this, "mute" ); m_attackModel.saveSettings( _doc, _this, "attack" ); m_decayModel.saveSettings( _doc, _this, "decay" ); m_absModel.saveSettings( _doc, _this, "abs" ); m_amountMultModel.saveSettings( _doc, _this, "amountmult" ); } #include "moc_peak_controller_effect_controls.cxx" lmms-1.1.3/plugins/peak_controller_effect/peak_controller_effect_controls.h000066400000000000000000000041001247673406200274450ustar00rootroot00000000000000/* * peak_controller_EffectControls.h - controls for peakController effect * * Copyright (c) 2008 Paul Giblock * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PEAK_CONTROLLER_EFFECT_CONTROLS_H #define _PEAK_CONTROLLER_EFFECT_CONTROLS_H #include "EffectControls.h" #include "peak_controller_effect_control_dialog.h" #include "knob.h" class PeakControllerEffect; class PeakControllerEffectControls : public EffectControls { Q_OBJECT public: PeakControllerEffectControls( PeakControllerEffect * _eff ); virtual ~PeakControllerEffectControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return "peakcontrollereffectcontrols"; } virtual int controlCount() { return 1; } virtual EffectControlDialog * createView() { return new PeakControllerEffectControlDialog( this ); } private: PeakControllerEffect * m_effect; FloatModel m_baseModel; FloatModel m_amountModel; FloatModel m_attackModel; FloatModel m_decayModel; BoolModel m_muteModel; BoolModel m_absModel; FloatModel m_amountMultModel; friend class PeakControllerEffectControlDialog; friend class PeakControllerEffect; } ; #endif lmms-1.1.3/plugins/sf2_player/000077500000000000000000000000001247673406200162265ustar00rootroot00000000000000lmms-1.1.3/plugins/sf2_player/CMakeLists.txt000066400000000000000000000010061247673406200207630ustar00rootroot00000000000000if(LMMS_HAVE_FLUIDSYNTH) INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FLUIDSYNTH_INCLUDE_DIRS} ${SAMPLERATE_INCLUDE_DIRS}) LINK_DIRECTORIES(${FLUIDSYNTH_LIBRARY_DIRS} ${SAMPLERATE_LIBRARY_DIRS}) LINK_LIBRARIES(${FLUIDSYNTH_LIBRARIES} ${SAMPLERATE_LIBRARIES}) BUILD_PLUGIN(sf2player sf2_player.cpp sf2_player.h patches_dialog.cpp patches_dialog.h patches_dialog.ui MOCFILES sf2_player.h patches_dialog.h UICFILES patches_dialog.ui EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") endif(LMMS_HAVE_FLUIDSYNTH) lmms-1.1.3/plugins/sf2_player/artwork.png000066400000000000000000002437771247673406200204510ustar00rootroot00000000000000PNG  IHDRZ=bKGDHLX pHYs B(xtIME $"u IDATxty^y{ Mhk!%۱%Yb'''drNrؖs2'If8;#[dI$BQ QH$H\oU5r9RU/EXcֺ/@J p`Z)p߯$JH,c ָR BB d'`q> =c1+W] @9Z)QRaZZ0 P7g=ߥ()WlA XupMcbN !suik5@ wXh6\˺=UdRI [An-X ֺ5^ :H?Z ­6oh߄D&nM߹{]i1{XH,,~Ouϖk-wݷuk Hϙc4Xfm?,ZwG B;lX<by+,X"n߇%Aݍ&R"B ] 0rmP pZkrDxx;ZѶ| )Q(7}Ё-6 6swT46zP!((jwchbQIR(kݚEv-5H)I5U3B!ך᛻a>Q tGS)_^E$֛)BrZh-IqUh[6*ee2q!O)wDSs.BiqF} \-pW6pF"PJki-h !}pOq̳uɵvT*U&3ݻSүSX bZD)qxOh))0F="ibL[$rb #8G"HwoR$zayqhqRu"q3z밷M\c4)12b( c]$ q~{[@ߩyU0ٲa0qA_.rasR03.qa`vqE~сCYŇnBǖW \4TD h*3RW*rpA; t!K07x4 ^bT9h)þҀQ/KlHɑHɨo~?Da6>L AG~>A53R$M3 瑵+y?ujpJu8@|tcݑB`35 U⌆K!Dg`y$QCQ11v'3㣳nhru3ďNu7eY-Ս5QBg CTxIV>1vx3ޮC?p.gB!%CBm X\8PչO$ZL`C(KaWE&0|klƄX0|ȐYo^\Br|u.e/.#˫|,"Q00Ѩ:-`պEz>#Uۙ9Ǯݻ@{ ^F?p .sĉG@2h}YVa|tѱ1v;(oz" FMXApꩢAM H#cg.ryk፸haV`fH~k=<?,G`zǤw1hR8乾*XKJRkep!!G{xw@ ZۜnQ<ׅ>t^z:rJR%ךTJsAE&})*Gh63Y#uK,]yd>xf=XKX4%&Ano\laLžtZ`pu @$.!uNʘns2ff&۷"`yr_ʵՆEnnbzmpYZcI(=O[TBH1;@]Fq訫Z+ֽ"p564Gtҕ50c%XG(crڕJAHs{{!KCUD ^b.?8JV(i(U:n( X>,$w'`<4P}GME8>& B$Vdɘ]Y|nZ4KZIQ>B{2޹FMJu,ʩnӹ"T2ʖpDyLE*)%BEm.R=m@rKA]M_JU4(yR& \mijB!H(r+{8y/ifĵчrСPDKdKlX(/{3xF`҂hAP^ş ayҏhm"gvk}H?\Ì-2BJޛ!e.:zWЀҡjPw|Ixp+,(ʗ@g =DhkP>|vy#(W=% Rci6JJ@HJPi"q T|t$cRgǮOʂ"P J<:5i<+Eg%VR >4#b68CAY:BXÇy5Z-O137ɾû|Ƨe̓+ ~T7Ep$|g᝱6-3|XnwGam}%"YZAɤ #(Ɏog.2j)yKW_bu}t p{u'CsϽ—?e66ֆ#w^;cHDVsam})xۭ£K'T.+ogN+?S/M7_;7?HJ҈~Ln`C̭1qSObfgPb%i} |5g``h_ 4\! ? A7o}HmP6HdO(Z ka Ћ,'.{g{v;H!WiFȒJ|&}h6je;Z<:iRaldDež>(?EZM,JqТ$]9|ޡ?oswZ'K7IDMLNO=S()LK'{7`9zhKD(pi,lSM%iշ{h/i }J uуm/}KlmmRI5T%=Ebz>h}:FkAJ‹7ˎ2ҬQ zA1*I捫22[+-ٱg;>0q!cុ9c1A!_Ϟ~^Kd1E"Ӣ73rLJsXcF:Õ~}t:m$c1k:hF4kmx 'Ռ˯,35?)r3Drv34>^g1oy;>YV!25lllvy $&SՂ"VBu?'O<@PL4og0nɲ!lv;B.v/kN1z0D9wͳI$?GB,#;9:`llnBJ{IHvn1EVT xg=9erd'7.Be4 \bqqz=~{6~Ue}s+|?}57fy099YJ5Ox)vUfvH|c:yA@0>2˵6a9޽{X[[ceeۆ;wv\ܽ]ԖΗ^~vgM&>[[mj*i V m4Ͻz!sx"_oDbtXcPa8ocmp-Tz x"݋t9y'#,jt)&*LOOflt{Y^Yfeu%~ƚ&ϳ&B'i@qTXpa*1:͏}S>+|ZHmwXؽ͍MT+J4uh0dTع}JT!քM~O|}qطs?vGTkU4ZKYcnf7k]^~Be hrcXzoLN6$IB}2ct[clAkx[iaee:EsĎcy46!βXc!*,l?@3ǹ؍=ts4MUTU3ch$5YyVk"I_JU3zN4cc`jYŁkn`@#m;"Dm׿×, > 6WX䦃Ҩ7ZDn$26[-*)jjM&''dbJ\}X{>-{byoo>~,˨Ukd+[XkiVFgq}~ϫ/kwg/|}o$5Ucwr__™+l6x"{cqqAŘ7~w 1jgv`p=2Qfgf۳ ;{pjG/+h_nnj\󩓧A@2R 5S*d4!F޳Ěw 'O> …HmiU=%dۀ&i1DG dHEhHؑDS ,pFֺ 1DCG4S=eMPg{`2֖!aD '-`fv3}5Y$MGތ乓rLnGibH,T zj,U3/S_խ7:s퀈^ՉT^\tRB->koZ()vAI9P LDDʳ(lNnd⣈@"ڵIƁ/RJLnLO V/[㘗3e}PP9oi6FRIx[!IdE9iJgB {&'UK(!f&jU,sf C9ڰ) Ҫet,C }>0`r>(AM"!=SDp,aq6$ҕn-Ɋ'1Ʊc>V8S5nx۵diIvj#Cgc@kqK/+ 72YbtQ2&09[fc pCKj 76RGh>kLhIjd4) Åt9=oW/y>)ষ^oFu.\y?u/ă꜠WH"uWqt$qFb^^cyyOĠf9/;x:K˴]/U"}/rM$X"nYq<YncssUGt9h[u#I4ˬ8u$|a $IHrʱʉ?_< gXJdueeYU`J[X UPZ݋/L 5rZ~8t o=F^oc.:_tyG;Wvf 57je16>Ğf E>dDR67X\\G-x a-a67շzo c$s=o\%Y|H`y졟??eidTVJ$i$*IȲ45'Ƌ,5-67}3A [?'a>mS4Fj }6ڜ~v^xʑ,NZU ~ÿ_&wrֲ_0w'byc zWxy짏6~㎏h4$F=3kKc繳'ѶKʹ3/&gUN=?ytzmPLl6X\ZC۶PUc^B9 9}CǙ ϢX+,-3mkn:Cc}Q6Uw.rHox ?#&|=uu{.&Hӄ͵6/=*O$/rT #sLwp[,.Ȏ=394[>} AO:xyUX7\YZޢՎјHko:̶i?}BZ_enFMNեe=Z9ڤteN<ωOpkuҦ> M:?xKްtIƺ^fucdC50(XRp:U~ާk1{„4HG{JZO=ra<q?O<8S(tcck}&P2p[QIU2u,#E^*Y,gOŸ}3L4ghTG|ǒ{n  F:AC}rյUrSͪ$I»>v ;xf>}-lDƌ9˛n;?Ni_9OȒ*JkLb4iSǻ>h/q&h"Z EdJz6FFGxW'V?&kg ㏿WNj\AoС2Twu~_|1"x'݉$-nxTTf^sJJ%$UA _W8KYY %SE8zuCy2ggN{'X##R!c>[c.p!w>}$3c$*)߀:ANzLHUF֘Y$aL՚B/O)[|L2Bj*b={v322aҔ,T=!;n$qR!GRd"K EH ~~YfI $E4k4k*7 p5Hk#)i52 "_`kx4H̘{L4xT^yUVWW9ri9:Sdg^|5i֦$;*34M*cyg_8@ZŽ3M՚ L3_/b, K+8%Ue|V$__bum$ɸx<+ߍ6]&U,ǫsX,' rp WX_A`MiFqdslI ,Ν Μ~͝T*Hu ! # Fj@X8T4MIj I-G%g4@X__gb6*u[h^<~nCmcRШɒbXGY}.Ξ}CCStYuQH}QƇ`MH_xH,KQdtVE.+OfAKF^"cMQY.~If>|fI5;Nfj5>},%IBUPaJ _7`v* T~n$+Ec&e@4+ RKk ho  `9FFF7XjXk8y^R!drmm_Oi4k`߾} 1>iJZ/ 6779={jy<7ܹ4U$5?l$Xk_/}>A܎Y)4alt<t667OjPw`rrLU>.[: f ,OZb"R*'0v!j~z̴jkV! ʪd9~~'11KSTi6zz4Rv7ԧSFTEϪMAiԛ2S}`dt`y4C؍Vj<5d!u“]Fƛ|⓿]rs;zfI%M^\>++T*FGԨpZ$cdcNgG>O]-,d4%CE49px?3{G0[*C BxdXxt I#sÔUMs@zFZqPtVRv,Lh;lABzqV͸7d8dhC^gI[JTzŔ@u=Kϝq-uY#cdAZMmKDdiҸV7{l.Q6!k'xxų9y7\#O=u#GOOofdt4 'N!ԧ>Y99+KK}4sExA\>/Z"ǹqhՋ!\ؐ\ė=ҶB\JcscrC^czƒ}֋M񡶉L?wOn#8z'<[X,gء!x|8Bm (WQe6\ϰzk|5I;߭ װj;tأBo8nXz)i:<ى gv`D[mmk8`5fx1 ?ƺch$Eh[ʍ9Hc\{1>ON`'Й IDATfmu^z;3`ssz|; ?4 =xP j>[ɧJJ= QsĥC.Kh B(WsW2cw^52 $˖ݳh6XbD{ U"}0 Rzb%y) ggR8Rxt]VhB[UTRָ,-7Xw͉bE\ sr}(.(J%<IUB S-cS $NDr%>aaZ[k_sLB9).ܗKQ0m0q0ejĂC5(%x꩓$g ?VGRnc3QXTk$ڋX47==DABkcv14zE:: v +-2Ѻ9!MLJGD뙈"Jti/X?R`p[[[\x<vatm\4<}4wqRIn&/nCZ?!>dz6z|tM?r\H7~??D% SyN|g̓59{ݭ76ahCB @ v!\c8)JRlLE$T$HXHfҳhifz{ jSDA2=F'n.U"mZind9pЋ K!9T(xH=CKm{>S.Y rIE DUrQ$-bl>VC>gj Zv7A,WiG*ȿ>FMTS2s-dm&yv:ܹGwq]w9$:o<6n {b ۰k.o¿;XݹJ%7{\؁7{EƷ&-o6DG5rjXR@zʆQnFjKs8eɗ&O}?sꊑ|F@*brHukt|Hd~z,4>RMxV B?+I4*;肖{"$0$4؜}Hd<'`ŐvQcvs+=)hh3~{(\Mw[5zYj[bl^qWnyuM?y?sGskH-Q6MGVmѓ=e7種Q 2lFf5[x@ <%v; 8ɝKJ̡=@ HR/Rr+_obTLarC+j)aXp~s/%ylJf/e?hh ǤdYܚZ|r nѢ2줉;R|Ǫe{i8EKQڪh-[PrKW37TS2bOทWcйKZϖ-وӧOc6$υWkmUԉ^FN͕="P?mBlZDVS[4GZDS93I:5<]t~8J2kn=cus0L<[(l:C,cղ'# Քs,,LfZnH#@k*㓵NMFI9 $R;LY;bTI;QG9f2'_?P>2(Ljm(yCkߥ -v& V1MLcnGʟ'u?TRST?'gW4>'>)67øp(.)K#,[bdGr悚7暣%mXՁ*H7xMXꮪI2  Ƒ}U;D,QgURJn3-cbB͐1)5JS9%'f62B9JlQOTjZף怍CTjB*X܎cOzl؈6XB5cFRFJiN]*9nk^L * Q쳔͞s H!>[vիWt;2<{&7|(j#d5w|%Z"Z&dRfdvh)a6ͯ"" CAk4s1Kk?]M68a2OL&t$]c5P!1 ʻ۽taQVrLluRN2h9, TT2E1IʟMW}@H,Wʃ9xCv$c4h)hT2Z6J ݭ5P(-̡ȁo`4!E"w\~-‰[]aE,=ʊYE ɕ5!Bgd䄗5 9*5)@H2L Y5,ܾDw/%GFQ*^)$ \j!#'B#1<^ݚ9ntQd@۶"79v˦Fq# T={\5ߐ)&0<$Gi9x%9ϲ1WAR_ <& ad&(lݬ}ZxM-**Q+b,=Q piK=#O@mƐ"O˟KKMl20~ɘZ+іg!Q 49#IH5 R3C%4SVQ|=0姻D(܍QS#0EQ;Y")Ng@$8&Y5/pS:g mZ{Z(?`g碢2J> J3))6XPpva!/sfMyZ3R%Eڲ9fЬߟ}giN$fikDxq\iϗ NRUZ PBKTրkm{.H~S2BJrJa`21 KRRT҅@%UZ AglKGc{8aƿ.bgQMZ+>/_O2gCpz3ֶ;x=8\2I<W#SDPikP:lxB 72A" (ZU\lj֑5<7y5[tkQ+~l'zVdYOFNQC^×T5*,{C8!e@ neĴY.,jLPH$|R/LNMT܀V(YfEo$)SBl+s4`Ѩ530Yn9UuӖz4#ߏ >"=qfJa9mϊzrJ U0χ}R% PEk?7;ԨWR /g(~UD />$Ӛ*b84g(0܂`v|3UFF~gXJ/n&_Z*u&VLI{d嶃Gn+\s`L <>Sf©[_{) ([$*Aca|\d6,%Qq8:wΖ6ʍ0K>7VUm[iri7wjH<)lHJbv0ڣrˌh0S@(E*%uCJ<\L<r6҃gă[# B'PΤ 2SrQ5?6iIf-t=פ'|PřOFષj!_^=cӈ:2 )#MlKgS X /D|:ͬUL&bVEHb Y\#1[nF"õnn!EhK%y7yJ%&/‰VC9$"%"jP \tPRVsH?iOlN5\vŎ#؛=IyRo~ fmP9f0vt^a=pQQ#:3PTⓋI0L{Jg뼜0, ]c3Ȁ cs i@ /$yĠ3^5̦r[ZXtBr$/ES\6&!e,XlQTD5I2$]C *BrsiHˠe$ERܕ3rDdJ:{x(XmN>\g$ ?ӡVrD }Xh[XdkP*70D`"0%I2€G i3L3CIu)0 =Ҩ;t mg4rX6yi~]˓HumZ6i:r `UҹpR&#Pթ<ܪOI=(%nܸػkW0!YW;L0M>Z/S&][d.MY6V2_jU@I,P?X3qhF_SE"$Kҁd JR-BO)+ dicGAkĕ`3f1B%W٧.T#ْ|κ8b6ƍX\\⒌k1,L:SP0лŀ~)Nd}8<lx5 c@J sp]@8Gw EJ4H6cS7jU$l]OAKD%ÓDoܸrPU2ܰD5ۚʐQ?[WTɋb,&*s< sԁ @jjP3*(f~n)x) MQmL%ay0ؔPS iwȽDgTVe r tԋcQhiR5#f)s܃SO5+˜>b 6:`4wsj #dJ|~W@MG}*}5T՘^Qx=rqoy9q4A3>t:'rzŠbaz0jC#fv*5E'VUVʷ8 @ [ Ԛxk]cu Dty5˴?3#"xQaaCij r;c>fVEUو,Mfm?XZoGAFID"&M^xF)M0xJYuh.‹L.j Lgc7@0 0a1ދgԏQ6 t(.B(ڈisLhuU*9Dcϩ5gH57HZ:э< $3p,%몭1_;D2Tsmв׿ 9 fSLPd2Iԋ9rNleMƱZ˽%׻iDNng[8#yrPd\dyV4B o/UfX@2E6tdj#EV~ӌ>R~XlAo|-E`*68좕\>n|| o{ &6>o\U։ !SQ)N,5K=xrs@jW vk:nUVD08  NHz*G,chT4ՓiDk05Q  Ioy\)gvRɉX෥ Ա 7V(dc/rهIdhnau\?( X0BYI#$d LHHT+L@)TԴNEhxNDN -ⓦ2RR71H-H 9L^J2ŐUJhf$jཧ< E;{MS7(V@PGMKdTa"T,|u f0rbSk(O4&rc˔3f[3|婯s_x9'޵%L&S\xN3!;^Zw]XYY)q@M[ڔqSs;)p[4w IDATeܷՐtZf4i8F7` E "כk-h[y$ӄCx[ʐ `#\8-` Lu檄/fZҍMv4fd2OYKmհpw/܉/!%Iװ~ Fud˥Mb d,.Lcu=67J,ͮ=ylѸ|. Lc۬&qU=!j2˜Pd)Ri6ZB).^}XX\Ñ#_<[Zɀˆ8'/۱?p]Rd50 }Eãяoߧő^6e8nEZ"tV7|a-|Y-5lSj&1 mA]J^#Ow+vB4/CI<5JCl69YtM\4j5^u.Ig'OՆއ];tcEGcpEz+@kt_݇cu>a7ܧkiJњqBfx3p2ك]vrKܩUȹd{H㸟/W ~? x ߗv{]YZ?طwO'HIm=kp؂Ǻd߄e^+yHڜ*n i1Lf3h޵d.q̘9Z xT,3*^s5akӊ! m#[&>S5xtdiiɭ%L& 'XX0Px|1RS1EKt)e&r.xw:Ϟ|g'A@#o_'aE˽8㈇mmyܹ왯!UU ,!h+wq}/׼<p %T"?{haaa0LqCŏ`eu8icVEfIz \H:$Ds0ق!IeI?Mî2WG2@ZљlJpKz[ mTpwf ό3\` @!ƍ5@qn<$:췖m\rM5 H)caaq QU?;_5Vjwaui'6132.[,uLk7g#x[kqKpm Q,}_>gғ܏ i L rױ{i?:p?7~9x^ty<%3 :6H^wsS#n%xɧO1n oNOǞkٽi(0 sǚRdRc\r`sG}W7`eeCa(A0" ȓK[gx47LnFK݆{^gv%KK&i[Whҍ |qmcq6q=w^l3xP^z=رcG0jLf 3ۂsYh]9 pfPJK0ݖ;m;djp͛.PM^F 8s zKwkʘ=DRvXtKe$g6+A'iMF 6,ZmU>Z(ad} LdPxHMPVg[xp:͕B*8w/59| P%Akp Ќ!#W偹j۱cn\={n/2,x<HEeE5&ِN<CԠ^芵V, hpqڵ bk.>c ̚RF/߱s'VWVpy"`ei'aFJL9Sl‰++ZŗeNdqRt)6J$_ ad5vۼ㣊LS B0DֳɐozHf_/ɂLJ΋hHWMyW>S3 (X5&[{-nY`ڡ8*$m@8(RTss QɐM P}{ԋp (-/+py>}G]%6IyYd2?0%"A2٠cUE12{FL<ѼSJ PvoƩS ""L&_ͭMm fr8urNbd.dlWAtV yOl܆8ދLsQv$h~/H>,|N#g5ǁ5!o`cO4P~rp]n2q"C)HY&&*ePJl6ސ:[͐?3nSo VWW_z [_ݘF9{TH2Ü3!az03Fh~g4"qum ,: f3J6؜na68 ҍzB D:]yI]OǷuR0MQǑ7/`mu19-EML8]9r8< rw osUK!#܄9j2䜭LY<Dzh }S.HO ~( 5'Sg]ofNLaR0 0pIN؏SaSZ}~Zb3$ݽvO>_`6N(Ž]8q\eumr=F8bss766܌ e1h,_)f,`ΕWpxNv҈3NbaaN܁` 魭̿,B{MɄJ6f31̈́=8ݼ1Ylսgu4<.;۴ 7_#/jcpHZV+fl)z~sF퓎z_J>괂R:d6f#ynGZ5C&y֚-g?j^c9 ]M\eYkA eD /ˮ{p:^<>7oy{qxA\K;:/ɰӧz08s ?~TJT$9.qIն9\tm$ܽv?^@1LAj@9Rd2`7L+>l:Ck3>v3M5wk2.9po"ziVr79 |b 99]D/[z`mgo"!Ut4S \׷;wf*oi8,.3B8bl&6VYX+g;j d¡myIJ˫K8sᣏ}zqn5S₟a$gC4c_F"dʘX\D50Cud Wn6,E\]~ {v.ܛ-ȓRy-GcOp.Vpuv<̓䌞Pg3=ޅjqLMH+cv>G]ю#ďh%%-e]>X9NSbIwJn8%r[ mgG3 G)[{[*Qc}&6Jd̙F4' D>_f$vS2fk!^:6bBĀ:,-Ro"CpVW?/ ]V*Ο;WeG^݋0N 5RbE[.W_#!(RVp团ɧ)f)f<<ݻvamm5P8,dL}݅K7)oűLgd(y sbyr5C]B⌽*ЃFK~4!.x;e;)OiqaTФ 洭in E=ױ$(Lχ^@Sm2 = O$G5ۄ)aϾ}X\^' v.^}xgt6=8RNF?pЂ@Fw.7mP7Tpϥ W8| 7fװM5_)Iz#%8ix~;VVoV|bϮX^^kpeܵӁ n1EͰ%Ot*7;supUTov.ԗ)jxC HutlԲ'fdTe S3bMQN?y%(GCu6 A)[8댉be$l}WmueLsc]uM؉˓*jx@{ᱎ+Tj>]} ccvwM͔H@Ol2۷Lǣb C0N҅+exd eRDş'<'91_-x/gqq8y\}{[$Ŵ-8n"i;! I0Q fn/`jd+;Wb!qH-n:՝}C;EPNcj8aaa7 Z%)[*06-g/8`NGCbo DՈaca!ph7g[s+C/1`O?aAdweBC R^HDTyWJb'^.,NsRUfY͋Y&Q랍ϮXNA2 i]AYWTTYk$$l@`&rݻC%>Ȓ&FɭGޣ0.ÞM%e%;L8F>Zf ՚r 2`t&,+;6/ԣ !⚙+2{6/Oosd$IxoL7p}*O + hΏKK/_Z",N%-\;+xGT;#`B0=x E1\|ɀWUxȇ1)ַ"x oN8q?»oxɧ0NW 9x(ʍ>hy4iԡ!F S rHJh-p9q<9;OmnKBkΎt6$Yu $̡)RG"T4 _HD5%r1sUUus@3U .Xrր ~jFUf)mhP6S_9`iQ\BDyn.46U' 2iU_.R܆8I各8Kr2!(y&NPRass=86o@5=wߍRص\&ʼe/?AٳkkRa&б(;- Q\L} |I޽{?S;ADr2??_~a_e:K/77=5|ꓟ'>qY|OO?k׮aϞ=9)|_?_ ?^܃PBPZFOd(X'h$хQGh-qȦрBЅD SX Fh%ch)WEDgU&!N(ܶXvt`S3{-NhMkEc.੧wމ .]={'[Vuc_9#!c!OơCd#Ž"VQ8WLǯ [G)> []qOſ >;D |!۷gΜװǏySxϏ9%>|qQ|O~Gwu%ȋBLlmo :_0~ŖO݇g>i᳏|g_ࡏ~=,~Zkpe=?qpiX[ٳX[;ZA(,wn,A)gve ylkX@O76D& 77O! }9XmFX޸ N溡&R:m{Yda4|:lfhv R۝Ւs' x;ށ> ~}ßxӸqvym}q9:s k>{}z |08pu8X0Lp ,--[6<1ar-yTKf,YsTҨbpH/piݻؽg6662p%|_[LrJs!~vxox#̎Μ9ؚ?wv=uhJF m5,Hr6rl&b X=ު-rrȎ拜#QxT+,~JOwcX4E6η?GMB\!gT$n6, 6$%=~ u`<T tf@7|XLǻld`G~\th{Lx_:]v~"_Hxp3/"[›:1*gRl>{%ܸ~|!|p= o|RG>_2sH) X]]]oٳg~'ǑGqE\vO?$𶷿?ٜ#]#Τ:ʼnܚ*|+/c ݻ'O'7ԀOS{p#+:2Ξ9^Z$d>y#^rk~] | ԫC*^ ƣV5h?e-JbE3jC J2.(U $H9HA7;+)04fuϜj >k~SV yH92@:__??ǓO=?F__\pu;C($oy3>k<;QHJwed.QW:N $$©SПcuezov;wO ~7/~%lmn¨tb_%| xmu'EL99,v|ABE^mda2t+321lrURM8;܈1> 3[|mkdB9`Ht"HC=82ZL,̛b J VN|#g[2'r^t_*QhȃD7$6Ht>J+-.sR]EQͥDZ={k<|½݇~p)k׮ȑ#x籺7-#wL`aw6bu}NFyxޭ%~!|}@iJnȉpi Às~aqџI gp:g#;0X\pi5:5™g0L{5^=D0تsgXP L{m9Ro&qg3ظ!eSF&xB'F=l\$Ձ 7 :Ɏ!/YByT[O4"7N?Uzy4k956w ̺S\r< JZRfNhWuR!G9eca7Їo|~M a\?Of΢ ;Xy9ĉ8|䨅է»~kWVVpE`aq;w9zo;ן >g^g?qiX;hcgښ'jZi"ȘMgn֘Cal6J.#[[8y@G4Hd=mlno>MItr<*0~*\(l ?eu)u{fKP 8{gV56<ڋU#8쀹W=pOQCH#%t?tdhFb(&P3f]= H+xΦL&XX\Į0RY__7v:aѣGd9Mu1,//[nÙqu.b[(d1* TGw8nG79 Yh:\ט-X\hb $W$MQ@ݵ1ēϱY=E*g+(%cIAZNk)LJ8\F_mH`qa +0A!`曵U-B-blFIo2޶9igZHyM>L$=cKzϰE$Ր"5YG߇.M t7)"I㕜ak#cr.,oNŵ)cș2Lȣm؄Uܾrv ~tgZȮRP^B3ZF7w!E eqRAMFA݂7Q.wOOԤ3t\iQJ骆h`rMQʍuDGab/, Re ]%FADp=rN8H-xym2 ^+ʠCbyjT7La(`]:󒱱q-%bUlZt2|a6Qds~} Y\bL҄7Nq9'ȢLD4)~\y~ϖqp]% >]jɭg]oWJ A߇R3dOb&$°8V:,m5iol-MY6,L&F|%pjmAYlt>-|ubg32`ұ*IyfRHiauòfh4ϵ8 7N`#ݠVչe)p]R0"(wZt6Ya[Sa86֣LAOnYwC4*w3ǽ`-9FY+ͪw9F(1Go`lPFW=O@e~匴-ɐӲ;~%-O"uL& #ô5.<82RR%2߀B F| )2>&|`Q(#, W%MJA~4e;VNo•:$;R,7͒ {?H&+<1JB.#xGEuI$Lv8~vAPr"$FlC BMZ(kfN^敃45Lx4D:Gp|k*m.5wގ+Hnjqu}=+ј|)5w * *VSY{p5u+/kfާIZɕR&&1 TeBk-յL6E3,:7EI ~\|8 e0V,3J[ԑkf6`6G>NOp# ֗oVà'G(lÌR( Li*z=̓u>bT<0[- nOnTýՊ`>!\|m] $Il.E=tDO' Džx/_]dL4,5 $J*θl,9S,j.9 D3 7h4h$-sL>w*j:F(%TqZXH8iimƜg]6B_f}6;:acÓvMn;QpO$M1(umma35n5R(֬079toqDq䶼ϖ]}w}}SOF<脣hBdDDZ东.')r95rl+rReW5vT#d3&:+Z>cj).eOܹ0SrS DY#OjVЃHC 8-_Kp1LSKԓV3湠+n4E!9 BR=YSDe7Pq{o&* osJse_;БhZ( F1>ˌǔ%2J g /ҿ*Tj&2>Pk }>HVQy2(AKkVXrLG9XΞ:p}Vq*Hڛћ)!=I&(,*4cSq\@:۱2`@ G*erdx %Z J s<NzP*)IiZU$BlI)u^vF8'dW=`I}f+Hm-KI؜S{ 㯳LAvE0\]H#.^Aۘ܆Av ^6[ biO;ڕB^w涌]{sNbnvfȋTQKq$Jq\X'<!* f*V- ` URꅋ94;MnU6Z2 Yv|S닐Vӄ2 L4!sA-pX)EtHU7]-n,P7n'u8?3ކwOOǏG&ў31t77Ҙ@Wu'S{'ցpSЩMF#Lrs?wt*?PLJÑ'e|w:pXC#웥ti`[ESo.a/1ͭ- >,o767-TR,]L,hu[lv3wNyoS*;:*x\8T,ӕܟbuvt]>ƒαzVQP7!ΞhOkH x) D+7K[RfL\h-<5\uvYaj5ڴᐯF$^k~֯{yo/+N)?{K>)h9)xAߚ"";t8K2^v0G?D0[?k>_gK瘣cm3"QYL-ݻ9ڂ^lhx6Dmp3Z4%*?и<⮇kPK_C\rEg}1cZg.9F) GƝr.2Jo#bEަ\M^9[[U5=)JWNˬ7Ba>};ߧx7[>E8PIџ_PSWw:t{=X?{]_!?Gw;J#)z ϵy@٧$gIIG ۸"d# `\)Kެ{-Ո*Lqcı|Ð)B{ޖ0`\8"ZsPDJn 2~IyΝY8Տ?8:z.3G$5hp揃?<^߁u_'\,: lgj@xn^ygJA"kA6$j99`c(b.V &l0A8)є~7B@];Q#xvǎynM'FZj @pesFp1?ՅBubmM=&l܀)yF6 SZ-](r d%U\6kU"CK0T`AܔSIɲCa ə讋P8/ފ"jq̓%I7bHu ".2zui[Ի x7\Rʊh6.'sr4lyetX:@rܚ5ūTk(19U*0,2=/KCArBo[!JSSHr۪LC)܊RQQqs;Nz[c 2䄜ڬ59nHѾ0Dx#s$(R@) ]HJnev*B 1i톢O&Jau@r~\㝓Y{hl) Ř髶Q;ZrrNeV\<$}۸,]k-E? L&Z,-~Nɭힵ:`L?S L&%Vd "ia"yY+o唅!,_[[S YAykB8A687-J!5<*}7\J!?)' aN{N1a1ɛKZtKoANW̍dA1`#'s6'cTlmF)jma qUJU03+,~Uy]cjC)Y`&- )Uq j#ls$ M ˱RC`r T́d)efft1;JA mb1&yГsȅj}N]j*%n&f%P_[B]l& 6>tL!h orz^&+J:pfc\4lPNHB,rN7g+1Ta(47K8\*WVNͮ D0f#|`1KW-iLvZY׮V hY2t}f-O3 #l@LeiNiiVX,+}ញbylZ2,5#ќhʬԮ:\5X'?ލ&aʛӔc 3{DZJqiRVTΚadd|]Jc}IΡsW=[,{٢|zp<"rV"&/ofvfT$!a}o㦲T틶 B2vM b3 ,9g[׽ef! IM-ٚ5z!#]u4Fd6VʓEBᑒWL5ut aFBf(' UCP"ej50c[čW㌟Cx^S7ߌw5|SƗKx fy>?87ckǧW`wwV\޽-lm01 WV+_%>˞_ՄS{dVKұTo$[TmANYfsdZIº )a"WMyݙ@Gŝ6~)?~ s ^b֎!9r׮᳟4~'c3Nɛմbq\ V j! -aaGAr$1y<J4^kmQ"e|Z*Fs:A퀔> q1\GUW?0 /}+Q671qab_zzۭH)ass ;;GTi 7Wud c׮|*Dixo'aF9SِbλWղ"P*z3aPE)Zg?Z>YUU4mqRƏ <{C8c8M+ tʡ8bPeKzvq ̴6aaA duҝV>"F1Nn,e޳5|D* J:$N61T -eyaX *^X{&s@H>};;Xln bC}__ y>;K,,-gOÂ,898BD)nfnf Du3;XTZ%W*Љ97 ́j}`\Xb-Ulvڿ&L#Gaկ|CxKb˗.7W{v|r$w߅N>-oHq˙3U6l)1,dMQ Uf:`@D`FiOZsOE/5כgvIh! -jԹx3> 4MuRBhgGabc9e|Sċ^7s֑l,6p1~xqS͙AÀ^Boui`j7.F7 nf FuiIeA@ʂ J8cEPr ۸MRT3$f-JNrz~_T>Y\zEM+W@v`%'Gw{x _ E5 GMo~<עLE]PiG}d߆k׮n~8fAAvfK^Yͬ[);$ eDpNjsnDhbi^aՃYflU!I;ۢXGZ37 م-& \5 J!̓h٣GQc+s*DAAyΑ_/#̘ݺG[imjes9]rrs/QEwV I>$.)q1,H0.g9T2i2)RԱ!!Ө/hQk?{?gJTdf%[ \x ;u( QpVjپtWl:4R编;U eXWz#.LYC&ఓ7vJlŷ K|6yNxһ6l ~9vϸYHunKz4Z,v]EV%FɎqchi^%g*՗m;gi޳Z[yi7GFIDx>jDwm jTu*Q?jƓj7K[\ݵy:8,ѓևxdT@ąѿr+6N@QcWI]fq <2}nFCjEsٻmV/F3};5j> V=vLs^b?ۉ!m̘MyYT &| PxRsd+RAxtgfW$iM%|!x/_uWCEUԹ12ϡRi?>+ @񡰨Sj5k_DlAl_]Kl(Hkug{'qٳ8sk‘j 6Xi=a{(n78W5᥊-natJ7A9#C T\jz*R*^ó>R;;8yvvv 0$Bԥ}wI,B5NJ!ۉksRvܨ玈cێ C#ՄAaaܴAJ͵?.0`i Gnq̐aԉ8O FP y D 9aE#Gvp;0\l j9"[]CXz97&wbS<,V8y?@>,ba^k'Wl%ze3'TUUY9\}9ɚEQ"j;FWюpdul3jc3ю%v]Ye}Okٷ} (͈+0|44Jp Q\(u!SżIi IDATl]/&s3\>Ο@Jm2䧬[ [pHmbf̪(!531xeD3FҰhH^)Rpϑ]q8' YJȬyl $&-ں9t6f?_sǨꈙ`e_;F<r[[*EP4:JyaG8aԳ Ă-SR?䕫40O3*36#62K&x떹mj, Wu{W9ֻ K| 8d " ohCx}Pԫtpm#EyO'r!WvZө!#kO_/hCcLD}n~/u/q}6f$u;,唀[^ֲɛn)2p纜ֺE76,<@JŤ!ӮTɗFrk+1\E:'$p(k"R%f 7~p* %'+oq%IX=` R jOT)~Y{z.|@`7RPhGll6>K"E,,q^ZiR԰s􁴊A: DXX/~jH)=yq[t@F@VsY9/0 i$rnJCjZŲRRV-(qBOfe4S%dڃt*ڑO:,,g,oVU)v\#W )Rzmyģz !qR"}`H:꿳,XMzDjqQ@lVT? Y ɩ-J&lji3\"N+ !Bs0=D={]v9FFdq}RsO*rϐ5- aY&ȩU)HcgOTTyK#:IŲ=,Ndqt oѤm]A)OSJn!%هHfRxS+Rk%2gN"=PSsEp'%{LIz2jh:6p<-mMR)܇w%(/-BJ&M!veDfd] H",vٴ]M6j([咨97ou֙ZUG##tI<568ԵHc0\ SD9Yͳx1'6psy]M@XT{؏wMT5cLL5Ϛ'ז-m]\j0D8tv٬x!"0b]:hC>z@z"-2~& LS2 #nZ-?+w#<6m\C$_ .O-B eDk)Eg/bJ^Tsw$V:M{ɝr4I"7ei^FzoSVyzj 'P8q73+4PM 0#7y-&54"7˹ƝGR<+W~GD6N^ЁV dꬠeij(c+u[f\+Du<3. LrZKh56iEeL`sx I*1%z܎5dq#?"HQn*zVꪲU9$A˵5^%w#0pB*ϾHwn~^P˰U+9c.ohmk&o0"4ِjŰo}ѣx^!&nsK dUAOOsqvmJm g%TVBGyr-z.>r$cev1\ݎ` b7w"rR+VgUy~bڜMe@{v2%󻙥_UVlʢiBDk$IP:sui$fcC ʼA<]G*cMi oM.wM(Z姕g7 YI)USJ>ݍ>, vKs (uEU pYbզdsb7~ҀF PgD`v#"sut gM (Kjš3}1B-d%dB ..}Ptd['":xE|9j߰9gmH[ %Hԭ F @-&^A ,kA t󄹴uA?__s\PSVL!Ҙ- jqtJ3P^S;')Il Q!qEܗU0.ej_9 5"_"X|p`A3INU_G͘?#Ah7ɭ0kvaA$ql~t16NT* ɘ;0.wLRZʻޜ=g0a){{{ؽri͍e;r33]'`W5\`I.h˩:ONi"4~]GI]@;ŒXv!5 'o(~h41=dl9);{٘lQYD慷 a&*7QMԎ.h8<ʫs '"aher Ztng+*k]_Ck虣GwB\.]%A eFuPSHeZ%'&:oHuc+7,RhN65,rF ;Sٿ1%A}1Ԫn2b8*5u)%b󱷇'f!);߈&@jKϟCwoFJԃP8,4)֎V[9oPP;sjΪ3$(YThIIZ[[ u!>քNj\>:5QHbuAj8sH!WjdW:,H.pi kQTț8qGQD]j;p,l72ÀmT~<{0⹃RG߮lWJG*>nv pg[/ZlPЧnɁql*IS|] Őg${'A-vkxsβπH!g7w5VrXG!zcK(M+ 8n/UŢJ `{u\1QU2wɱq`;Q^v FhIA`ZĐOb4a*EΣj+ @`hf].]{SY-+4.o",6F s; 7#W- $})Sn0ݼ}MCm1Pf?M֜+B#ZA9f yԍp-钀ZVE.zd(`|6qTƆL( .k+J%Rjqnx%}cxZҋ 8_\ V.έ[8c"1s~R.S0 TfL徰8̉O[o93gNcs|L4s

    >O %c'1nbWxK8">O" [VROs츷YDj)^;g33>?缦^b1H?ϳː U@&[k&ݫWS?xbϝ,q>~_}Qy(Q#rL:Jβ\_wM_x_Wqٳq꥛QNqv\{烸r/~Ck{_ŋ!òd ʕ+=|Ɏ =f,W70 ?_%k8{O=$eX0 ]zall7(sk r rR\ovlmo]}Q0$ &]3}K ַ`ckCDX= Y1!>rc.Hy@?Gk?7csI}uk$efdt1K&зZ2;leeJz'?fOT!g&CoʔyA`EʒT _J F< yH$)? * 1Vzs8v.azL戭~$垛{VytyMNKZZJJ@4#4`6܍(Yņn: IDAT =L2,莫8ԔesyP|fTG@H< x;p //ѯ}-xXSO>bB2>l{RUld"S굫?u?E/[ݴE㐼3&Xj~ϯ5s67|!$k_I)sl䖇r?rMᎳa\@IP*|B!PJY|jK_k,fCD$jP4kD^`a]5Tc$MK{WqbYjdba{u:OO= Ξ9#<tF-uE).0|zMW|(Q~SOIK)8$#tT0D581`ZiӔ2XU-Mqbtm$+6a168Q>Wӄ#V69+:)-.dr9fg8iN%nO\ wCN+,&}m$M")ԟCZ(p"uk+|;j8ZXV_-Qw$2O3fu8!L=I3-C I򠳎́}jXޘJ-p.t\z8 X.W>2pbׄ^;zs5]ثТ$N=\4}ē*R_Pa&齒/>y]鉧 pPS7Ռ]ڦ*a 28"t!6%{ٚP1eJJY6kL?ϸv[XGAżzVmAr庇q1>mZӄPG@?x1ECje\f sYequw*6770MX<K >4˻| 8M' kwK\SSըYgW{yWQsAWj8i(PUtu+WD=fTfWw&`fnlRfCJKK~ʲ[ W|C!pV\y0%1IӓTG/`B[>Vp3MBÌnx8xŁ< ++%SkיTN+{RApGW-4i4pDXhǢ+S'pm^D9t}"5Z.p ]M'*G,^S#VN<+횎8:z-WSe3$P˳DE[S/4wZV!I1;ڜ2f\-Y+2S#X#PUs)0,}d9"%XPtl-:҈) "lh6EpÚ&%@5riQ0'5^SE |ՙOsO]OR*JZhd)(D10*Nsq雯5! DC-$Ea7cb.`R) g,r>Çfh93>JJ eo︇0L{@YfID6tc}3:ޤ4=]fl 鄝[8JƥKţu4Z0M+,u42q1rλϾD}Asb&^7 csr^ +HŘ[h%^7Ǽ䮇gBq6H }M VYn.&]:bk/Nk}tD~vtE^SDJ|PZ[xUŴZbkkK@ۍRInR1V%ѝuad^{ZȑW]k>cP +S?G4!(C 5\͒sVb/9n&ܐfn~/4p1_^߄ǎgV*SLRT}hSK^ݸiq-kq\pd0_wZMxG1M3=ͣTJ!JDXPr P]Tlmg$+LyRh"e}`d~#&ٖP)w1%BmTܚB쒧 U{zƯ=SkK+)#J 쭖x/CX1dnwfD2ju.yC *brC<ާ75;<3 e"B:MR%`Q 눛:ȗ|kW OFܕ]|"~w7 'JK.cg!N? 'J)8rg9-'(%sΙ.9P 5RRAV{<eCr骸h- *x0A%0fm|A"sSqw!B=-afar))q ,⡺F 9>xi{q<~.~65O<'/WiqVWm^j<͚ΚBQn \`n;U*Ϣ5{Ӻ̏bSCG.&āNrAȖTYs)Y i&Ycڬ5aܓR8"4h0椉?tޥ)ZNyLtnvX 6Q\ykXo+K o8wi؈ kVe?Q~)r)c|q!cPC"K32SsGcT4zYS<b(H0`棠5~N8LLjƜ0#uk3i!t$ɡm-94+Ϥ8j΄YILA &dV~ !w=z=Us!MWb" r`Sf?Znx̓y)Tf{-8ナ1ktP)Jjk ' ʷ!MEjZ{o\𫪵yI $@ 0`c! _C06qbȿqGgInߎCgthԡvM9Q VX/4P`VUq%Usd:i?w;N088G=4'6"\"8XDG`Jbz#*#(,ocw_&c))nhD"[![0!%_jlğxpAĉ'":Xg/ Ncݻ)N:gU)M@IϞ9CX͛qӞ=̽_W0"g3|wӧg?)oҥK8`˖-xG022"駜Ӗt_BXZZ~|߁ ½|>x`?Ξ9'0`ph7x>s=__&>D{x ~Z=bm$ 1sg8w~ʂ|K/ϾUI|2{9O?R>(E>gDrdacL vw!M WlOQ= u{iFAgrX͒2=fy%E䃇)L,]ye9DX&x{ 5!yy.ыS /Ã>}@ `y<`ő#m6LNNѣؿnVUR#876Ȥnc۱^ ;O}7 .Zr vpM7aqqG؇[o o ~䑤GO%LF[<=~t:] _-{o&{۰߾^=>}]?s,\Yį{?8, ?خz'H''oܖ6fmn*v |Az뭲;ٙUTY$MW\& SC_âl g mdZPY2{UQ9::OjgAX@mbȜHK(vMFOf|b%桇1!KFALF Wef,077IL#?~8&&`Ν9lݺUУ570]Bfg cjr EQ`ǎ`i $>ysm]X^Z*fgg}ܼgZeY n1;3+s!~Ɍ-(A"Hak,ў4XZ-رCf##X^^ᅬaLNN`nn۶oyL -.*뎩JbV۹&-phF 8C(àSvi6L=L3nO׳TdCU3%se ELG4sGa!DУi ݖGAw`<Ǐ?pw▛ʕEFl6gMr+6ܿo>Oq$Uѱ17xr }}شiyxغm+>{wI`~~[l*=]9S___N .:u :u z+sX@裏0>>.F_B@y~7ޢ=}>(# ,nY,/-a!(~Oq'FFF)93ﳸ۱1&}jPבȯ$ݪD("Zlv Mh(QnDszL|kjK^|˄̓ $;!.l>!ͥp =:4ϱ&~߸ܩq'I@,WA侅s9 L|S~)&9ƿq{up=w »q|Vq>rbaby):غu+VVVґ#]n&kyf څn뮻?v c߿{\tOiw<^;{{?tj3iE^~eO5K@BHjg=/ ]V!G/2uIsk̲P9$L0(/7q-y9 {m4ՠz{'' E##i:gF7ߌaҥK?#_ w]KG``5*xX^hDl[xqa bSO台ݻv e|b~!n;vdժP5&ssرcT fh6mBt.[&.ٙ:7Ǒ#G000;'H╀v:e *?~P{nǏőG|[yxH_W16:!??spQ˨}?Wp«_<MtQ5 g/YDxKU}7oCs7 - ,о8UxRzi5cI!K[ޡkT>v&(6hi*<wuW^YIsTsr{7$%"\rdY_%f.ͣ) Ҫ8,T&|/dSF~\&ZAM ă, hB2ޥAwrۚl_M Kh9$O0窮D?r+]19x8զst<3t:X\XD!ܾHfU]GW`ΝaCd}`C{NCj/GIFB =Bzm½@[^M{UV&tS]ƆLd('!|b8p.B`mݎ3g`qiQ}2}pN~޹8=?Y2KW^zFm7{/zeZ'g_m^F)6"J-x4!KdF3GJ /\ 1(νrUJ?uaQdsقI^}ޓ\]ݷ2/C"k'VJza[ٰ1]qK &Z*eLz7R[BrT5X 0>6fu]Z|N"A_ 'nu 0 @ Iʮ#푑b?;eO-" ESIae:`]Ad%b.Wzq 9v# xfkM/㽪:#R]$Q寗qɁ8D5MT^21$a blGU0+e|toO.qѭ&S~i1H8֝T3jmz{spƐi%*roķ DIycm9h5 =#HNi趇r7pH[ϋA/.O@e=u tN@7xC3FoTr*) c1K xIvxsglL2:) SAAANLC(i8θ :xjd8beTT[E-cK`\ T/*6DCܶYkQ+\1IwF=LK* K#,^21PD1:uIT=W[쇔*I} 9q>Z)H !SYzϳZ%iXxnR5C#bD[yBu(嵊r3q"t*I YYYkZXRS& Fr_Y_޼ȐƟNj Uu@{am쓳g!lʲ܈f x#=:Fce(Y'i Ҭ*y!zB 12c0A !:ޣe9!J!H:wU/EmA8=q1i⅄IC>)cβǸ(s w$Mk#c\/\ i=i* h41pPk7EN>ۚLS*O0\~Nl2F[ڜlLk<1\nDkrCyd xl4{QKD)6c!/ .30ȼqqG DPJB&}|LU'B($=PV4 k7w"O2/E揖^uր?\lo51((>/SY 젞۪L6GW xMDD] l֧fph4RK"k&vc<δL3IDMh&aI4^W*}ZY `Z&a37.TҐ{I }ha(¤Ǥ1]K'.';dE,;WUY>/L"]xk'X[[G@Ĥ βēN; yMP",sE\k%qF@e"ZXK]7DVO\dTUؚ![P5dUy:+C:hI @@vNe$Zt } C]UUn%t;16r}$ȿ+ "P=ϡXbD8xaJ|zy-h6Bn3@@,#U o||l*d}Ջ@9'>j<ፌ)+^:m*}eSHiVWlw`TA!j}AUer{X"ЬLo@Fi+ ifh:@ՑFSofq5{Ͽev<܂T%V2ǑA%4ŠNh:5GqX{/}9S5!v*X\\ɸQ`VY`ƙj)>^g\n"cV0ΕR.щ=0U}3ko7 B7T 6H a񂍶@f+ᴚ+^\UVױ| Xb4=a!++L"VF]vy L449-  W3il|s !ɊӬ>!~VDXd&Lʤ"g|ÐpcҎkgSUYV`eCu&F)3IYEx[dZV^E=3n6g>S \*Yky#$ObK\ ]yꁲ2Y82E&뽇 >;ڒIA4شy(gwv;BjyEങj?ivhZy"z2M !lk< Zhn)ˁecLv8*3)ZD^xQ՜TU-)0 s8ftxC*Pg$JLۑITV"GXlEˇRy-SpQe,$yQn>yT XpiTUh>*l NNt~ z"ڌlc5QxT4FkpM&QKܜlFIĚ6eY.EZB}iN'qQ`IK(҈ZԢT{&?wO lqdUƻkY4[glȯ-bkjWN!d %}X 4* ImV(N aeU5ffCo#2l8u:]\|.jaiy2-܂>5P=*\:.8s<.ZX\Z&`vjӓi PVczӣ5 m%&ٌ4֠`eojebC(R;d+הDx !*mHb"2:vѕ]>QLadtsmJTG^M4p.r^p1iJ&c"''J*#*x3M"Sp,N3J+V'ՕG%g喒,tX JC BHG]v$:i[;`Xz΅x_)kʮ^9 &"W)m&<:;B Ř)~xk`dx}~4]\h\a;ұWT5{]~v4B]CGk* YgS0?ıH@[b"s>;mv];Wt.WNG_2I+X)A{/w=B@@pЭKHc,LO1:SEzUS%sq"u8TJEJТ9aB~Fca@qr!QɈ@hU1053pEUU*`muz\HrC~簼}x/l 1iY7Ή8} mJrʈyFzU{MDEácaiwOӧm,)38&qsLXXZ~+,At);[΢@U5Y1pJ! O܇u/beuo6G5ٗ1ڼ2BkT.1٦[v QF:Ν=:>jM*`D2te?Ck>)W}ZL̲&~E DVp ) {ơ~1R?LVUը.\@nBUDu]ayu+su';k1exnRA|ƂEF7oYgTR2m VV2~dB7F qOyӧr bK0xP!*˚} 4 Xu' \2s(,-NNgeYE\x:N/->O?zNO`֭CX[_M:Fk? uFR$Sr r`Tbf-/c]/SO``` s ^#'ct~q D *AbdO2CUˈ&D YD`֞ixIG݀ptIYl/t-ʨ( | _dj@x d8cv#t4 sLTVܐMH#3XA=,`VPqś'3P˽(AKk's%¢ɓau} !x!g##%r1X[[K148 *TfM@ kzM/ahh@~VTɋц}<./,bv`gx~U._״XhAoF\qhhFY822`(eIؐ;>b(CnBYt->CMO!\8'?h=W%ƈ{/iB1+K| E ko`V4 ӭ\®뮓u"Ԭ<]C>s^ pu;Ki+xMʱ8{5f,Bj"W50>6yɱZRXx d>@\GTO,81h4( 4-  W9%A\K :Z8e7D]W1<<8$\bJ,-Lbu|2Z({v`O=3dTN (l3 @Q`ee?@F=l͓ԹMr\h5qi>u IDATjV^ŤT"-2fCk]teܤ,jZbR| <3i1thp(ʊ0i]¦e UE')GP*T!PKP#+xKQYk$ 60eIy2 )FJ6U[c2^`yy}(.B_~QBSD3}%Z KW9[.b|ͯ)mFJKfÄ&$ZZiI*9[ Ҫ I롿^ḡиAGN'p!rg'!K亗Uh6m eIQx)Πh8UA+'M#*#eUF^\Lbo7Bq2Q>}q8"="d)Dm-8jt|kk~!A/l*+hFF3Q!Im Cr<&Ftitl4$P!nDcXidX )cf,5U Fs*Ҿ4 {qpid'ٜ_4@Ѱ)t .0tuu ݲ+F5CPFx+ʃ?Gii2#bTfb9D/ J8Itَm >Zל6kt7*EJ?bjů觷ODQ޹<78*QvKx`bd2X0'"$Ln|o}ĵIBs-"_chS|zro_>yͮieqp,8 [&'5KTr0^%(Y0'^E%O|bk6 8׌/@H.*]M5j$ecl@oC9ݟ&'qe nT_BFNUzQ게/JQuQd CCCLKgs/~ppkrM,6  \BO g*@c g\gI"zcp1O&/jុ&twנfĄ!N¬}NBTnn7VnupFDQ4Cl]8+I^^ꝱ^jqѲK&ر|hZC9adDBPY:X˞\Tv"pt[-Uxc{ \mU&k{}yjCu+W,?,KdqPU]uJα܏~m[Gg-tUb<>dz2@uUmxMbxbS71y=w4lY8qYᬲ+&R攘CiZ "LFue ˪gbe-.Oq p|tlܬbO+t⨃7}.<0>1F-* ɝWuiHl)y4$~¦AF|xna1>>&i"-z"jUۂ wG{#Û}K36'k>l`]j10Пٜjueu͛#T!":t:]l4_ NgΞAYVE|GkUkPvKt;;mX5IaM vPc‘IA''<];\jL ds[Tτ83#3D4,FfZR!']1e'o~"d̺Wol޼ ؇]@t*hwozljOp-[m:xmWЁؽxM {)*= trfzٲKϽ^}cY4b-4]PAǂ7!:w;%4^x{MLOl,1j8Xtn]@Ŏm;Ibj@gʕ+0`vָ^-8{,p7CfЭJNNGmF1m%-`"I$d**U r>2q$W!XI~? k\)o!y1-S7mU2) R~8AjF΂$1fw;~GWк…0>>)l&~eI=ȟ7tılg-VV07Ξù m,,.bb|333ؾuc)&7Vy&UG$*Y).] [puf022K=eEВBU(S;48;{ⵥwUu_ 3$lHiqZbxyׇm36;6 qҊNѺ<#QKnz59O0ao &'p>7IUS7E՘tp$W 'OTk` ĕ`,ЮL@"祎~d)mzkDKy>3rr*] h{n] @אȠ6CȰfH)f%IC`FfJ lBԎw}nÌXFkȔ{=j2{m ff:(D$+DY1AStg]>#? J$9t4H!)E=,MnxpjbNE+ǹ2А LʕQsHRj ԍ=5;P`Mb>3wn~ e B@Nⰺ{4}dѬ-6&B k遄{2433f(-Jz@{kQe uit*Q(}r[.wJa03'iOn0&2sP kjL-t1,F#BϳTTs <хuRP$af ^μE6P.{:meC_C{!w㞉Q0Eь%j4i_UdQTu _́q\d<,k;:lfȴ#d-lR 17za,9j$2I;L02pXofG} Û( &`hh=9)<g~<Y P F+kB@Q8_D ]Bo4 Peg{~kl!ssJgz9vV:DBeunǗĈ֜i>Qg}:G]?MICZؙ֐l) ʽXWIB@{;㭷=MZ9ܼfcj]R]|/cjz7 Wpq`ph*W, ,Z6Mӽj}cﰲ7'/8s,x`?nVY ߘ[\|՞}Y8xSSSRϵ~m/^{5=2Øk{^,/./]wSMU#76l(jsXYY -?sqz^Te{m݆7|2zsoGW7x嗱e9%cR~ZP+*sւPoɎЕ!ֹ %!(!俸/Dk-l\7ZXyHc/I)lgP#ճdʨ8E%EAC#!VQ?o `v˛ H[|b 6lx1`=ɩ(Nxgg><&'' |sN8{hz47ω[=xq>f8p1ml۶M{cx0&Lam۳ji~~SG""[N3>Drv[&u;wbAV3h }pYªȾ DߎڙsXkyfC/m6ԕ4Lh099 oI,6&&affF|ϟ?I w쨋v'jR!C=Z{wqVdJ*˛cn1j}r0:2"I{g1};(>Zɩ)a C}pǝwbiq ##ҾT5/ s| ~Ͽĝwށ={n36>e+رs'ĸJLTF LD+"e}tGlz`ngyܿﳸ1?[l2^z%\wNi.wWqjᙿ&b[uz𡤌ϭURU2YIE+FFRZHldf/Βekhƒ47&du7E]u h➜kGCwK=PMҰǣ`qd!sФezOOc `޽OQLNN" km<ЃXYYA|ؽ{7.:<*+FV2DX^\8ַc,FFFѺpo&ncyyc7KKKشyHî!0=G/\SO=B}= ֽ{qͷ`qi GF-w9v $AVeĈA}9MFsx۶m"o1KX]__}{m݆"v>|;ߖt0;;ƅQg*h3UDP¡Ht$j.E*t*_ :źoH?;}z䪪Қ'o!@ ӰSj/KAp=Hu Rbh{i1 \oݪgw0o=V+g}ܼ|0 F,>lٳ?p#]t۶nCyx]/3ш g;| >!$'}W2B=~M4/Wi-DKZ!`nn۷w}B qСC ۶oBvܙp&}ͦ 5 L )T4 hZx7p#ηv{*^z%׿5O`&?wn^#/?SW_ő#Gw]W Vg=xh4p7cv,xv`j:?7_ŋ/Mرc;c@V]ñcK/c`څEn׎>ޟv+>W&405Oߦۚ${鬣j':i|}@p&2A03̙Ө}MrZSph6p<'gA-E$)Lğx|n."q%` xӫ[ӛJ6Z.Y!+3f@$AŒ΢r3ZŒUUA֪4u]IƛgSsp#&'@ha%&d>кD HcgTR*ۓ179le"6q:*2BZcQŖ& (mE`Dp8:E5"zMD=LXk2즢D=hRUJa).ף=sÛ{c8EK6[ JQ Ry|1/ ݪ13ShX\ZH.*ZgY83sCbec8>#5)IDAT'Xţg)41K> x @/6ct)NL6Jڪ&g6)h?|FdNQ(il Wo:0=M;g1 pcz"P TRI0KIJUI_ױJNvYVZU*MR tIvjpr 1)0DMX]{UxrDEQd_]u!  Q4ͩQiUn ¦ZVeL5e|-;@__;. 6|zZ&r\!uhSv9DG ${-Ek$7gz"-x2Y{^BzOZrty6-g.2L0^f6EץHnQ(Hq:iU&_7ci$/zOdmX2Jxbj؂l+M CGA c U]"?nCq56*#m7Tꄯ%MsEo55"0H,l[;WZJc+Sf)-2ͥG&uZ6N/0 (as~ߒ|^\"ƅpΉ4ˡƢK0-D\T3oJEQuL87YQϾ7ϑ.:V5a7V,X"S52q /7[~Ryk)=LQtI@k!cTUؔī&OA9'\u6B=g TAF:iqjSEA9eWZ!џRv8J$Y,و gP0_fq3i>@7#j.֩ _4b<+8\Ql[Erǵ&yF"Xe  /eh-05y&[#IYQ,1[иr9&:xb=$ X<9YS\`7k 1mpA>o%" F6qܻ_J{gut/mm)(KOD0T .8.EYn83&e RR]eB("Pr56CTeFQ4P4ޢ'RLe д*233#c'WJ3>O۪U<*E!Fb#؜WU%> ;~|]I/i h#4|b:d]PVv{~,&YIB"k{/UX/?O R>YACƚXƆYj b8‘)+ yQ'Oz1Š}˽'udsד-t0|Bꃆ'UNj=-;kq1-YDq+ϑ]l)VyEᔦ]k8DXQUJU4Bi9ńF,Q pȧkN4^lfhsM`ޣQP$%zH1ɇfX*DG&.Z;ej9Ayq K:ZTb&ZLE@rXT[P/f22 zA*M^‹ ԊXөZi{tX1#cB.B%}6|BQ9yo:&q֋R .GμwXj#Fnr%wO J&9}N!B(dSm" "!fȱFB1&y *5@Ÿhd6 d|pN q<ϣnv0Kh:}p~eJe/+̑uOie4i7ei9R:DrQdBr6T\˚T*M3fJt H..\ޘ'VQ'BÛjժ܏Q&Cctl@ZbTPYSecW*u):;.QZo6k, t']еJY`p 2nz h qXQOw)zة7lHđMeu^|S2_߼( 㱕 于هO+HڭdgW x2+!q]v:܎!#Y`嘄X):Sx[%Zml> ={'=ncĝN%-&/e8{Wk\bXoαht:m ?ۣW?DKKt\:aH~8h9IzȔ ;mPf3o1Qp)_SS4c V \qVi_&#Hh_?OO9C%hSޝ^Hjprry:e0]bC(qͯQOܩ9UXeVW)sJQ @lmj5z|xE )E,V#BPHV_j0諝Ҳ7#+ӧߦG d2qk v?A [ }Fl Ji% Bn bX*CO yJ:8<2WdHw+8qn\ʁio}r؉z>TU7"` bS]a," O^} ((Dfqjmh;  /\fߧcҘ+5~B=N0:r D+85!% .P:6Zj>AҔxQTm0`)\C @[R(JT,4 CK%M,9V[ܗ1ej3{|vnR06[x#bCxH?DX:u0qXg(`QS?٨/s5~I]liь~ΞCgXq13\,R5n`ao b68ihu3R+3(RzC`$Ik¾}Jh5! yHnR&Vq+K\ZB|HQjKKC]Z̈́ausKz&R8OB3 ZjOo.ua1S>?Ԡ fi(WH/t}.~4X{i7$Me()˧S);󬼺gܢg"ٓMZk/I5.eQuN:ݡ^(JeBSTh!sZL)3:! FDEʚJG?+LP¡CZa!>]WQI0L QQ=ʢ=GFWv%Xa%V-Pt_ eRJ3(8Hj*mvlHO@D!ö] 2KOVijݾs眾и=l>yaòc_|<;IENDB`lmms-1.1.3/plugins/sf2_player/fileselect_off.png000066400000000000000000000016501247673406200217070ustar00rootroot00000000000000PNG  IHDRsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTE).0*/1+/1+02,13-24.35UZ\[`a^bc_ce`dg`ef`fgaegafhbggdhjeikfklgkmhkmhlmhlnjopklolpqlqsmrtnrsnrtortpuwu^kxJ^Nf=d>rBJKHPRJORNUXOUVPVYTZZT]_V\^V\_W]^W_aXabY`bZ_a[ab[ac\bd_de_ef_fibgjbikcghcgidiidimfklflmgkkgmohmmimmimninninpjnojopkpplpsmP`mrsnsuntuotvptvpvvpvwqvwqwwr^ky|~JdIjPvMwCpEv(e-h*h0uEx+j,j,kO.k/l%n\-{JNU&|1|PO_MM ZWRVRZD `djuy'u1zW(v)v`'z@E6|~6/8? %"&tRNSL5IDATJ@f%,-l-,,m|,,l|"'&dv8{K!EZ͗(z4?s.άzM9ԸۭH֦@$\s?Rj@ѿcd)æ_jFq"mֻ)VkE(Ф:lthvQF21=ՂpM Q`pY.4IENDB`lmms-1.1.3/plugins/sf2_player/fileselect_on.png000066400000000000000000000020771247673406200215550ustar00rootroot00000000000000PNG  IHDRsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<yPLTE).0*.1+.2+/1,-2,-3,03,13--4-14.-4..5./3.35/-5/260371,61.71171282,83,93-94,:40:5+:5-;51;7+<9/>:0?;*@=*A>)B>/C@)DA)EA.EE(HF(IVZ]b`gbcic_hcdjg`li]ln_po\sq\urXuwi{}[~VTX[NUKTFG9F%$$QDW^XfadgbbgdgmfdkglnifqimnjbokAmo?spfwtOxuexufzvX|v`yz|_bTZ_:]NSW4?XU3VBJLQQHG/1'5$%"+&'$#Y0afkp5t9DI%>#;(>T=M)@BI[)BEF$)"#)@ #23678=BmEtRNS֨IDATN1{VPtAPTHJ( HyAqMLBgj)[`G /\*¼ҏ[pӨ^>\R:6j*rBWMwF[*mQbfԍ};1-"C (tqw,j8Gmϧ[丈W ?rJǸB=7Ї"CQf%W"C a%cB3OC*Tfҳ2^27Qiu|w"$exCB"=-t}l5nux[IЏ13z,)+)?L#}ܩs2;w%r8͒JF4JyKw;ߖBΪ=X v$5Yʝ̻@42:UPZYRYF=C}rxdlY*}q`6nrOtWsuT1%Y1 XAJrϞDcO{l2nҫ`z s} 4u_Sx߮2+9%_xʨrXm=de1c g,)O!X zuL#[һ |&<,e˺f] o`}(PԋՇQkO:SpP6o;R) |\ @ Zׂv/xIw;ub0/}y߸(xK8E kUz*u- ϮlrL@ r=A~*w "ǜһ?1.@Q8Jb9}b0/'Wa21nyUڣ1oa7}9\4T7@d J1N;3?ެyǥ}f@m1&׼.9J[ǔT>I0~\}G Qc|J'H @ ٞ"=5#~lPH2H&g:fa([gGpgMFQ}oOa;BVcKxS,. lútr>wW dޕ#C2(v'}gHIv|3MP*w'dQ o]f%l˝_dk,. 6QA &,,l 2+`\^<씵߸fQ}|xW55[YI2MaVcG8Å/ gnZmL8bu~ix! _ `P? ßQ,g^5l72ꢥo {7M2|6p8{=`NE0h2#驹,W`nic kp߳:f| .=RIsn[Ȧ8XMomҳ,~ۭ71b909= ^b`uh3;@*Z.*&nk=Jz!¤z!wA%]pH,$FDѣ0j)a3JN@M@) 'l+N>F_3͢`=+@ `/QUfBYI,f+Xd]+vG2l]`[@»]Ly`E1RYZ+kbyRo OR3 JQhqJ"d!j=Ñh9 *r,6%:ZSrXЂw8U@(>xs1i~R,oW7[,[JAY9swdLNt`3"$^,>P@K(kZi*NELR_Qk}XWjqp"CRbi{=c9<<90>G*Qu2؁+clwTD‘- "PMN~Q WOsGY7>@V\a TXeb\ 3zxy8RXPܭS΍ zBQTB3QhXB]h͚ J`6(/hX(tZP<aAw ueKY&W6(1t +بpW/[^lEJx阼Gx? |IVО ] Mb1-h퀃g4ڸ͊adHF 6;Bc@P(fÓ0m-#`PNGΠ1k2,'n"mOq c1_xQe"<9#zcwXH.GCq!5LN:K>CT(#ՍvF(Ѝ`©KG -xX[zuF֓ W#v:xI:]C&p?G.LEփUPzvh]d0W:lTo2EsADj(:ݨiY9wyz̺FP?Z(Hy0+cт ]}>W)[IENDB`lmms-1.1.3/plugins/sf2_player/patches_dialog.cpp000066400000000000000000000230121247673406200216760ustar00rootroot00000000000000/* * patches_dialog.cpp - display sf2 patches * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "patches_dialog.h" #include //#include // Custom list-view item (as for numerical sort purposes...) class patchItem : public QTreeWidgetItem { public: // Constructor. patchItem( QTreeWidget *pListView, QTreeWidgetItem *pItemAfter ) : QTreeWidgetItem( pListView, pItemAfter ) {} // Sort/compare overriden method. bool operator< ( const QTreeWidgetItem& other ) const { int iColumn = QTreeWidgetItem::treeWidget()->sortColumn(); const QString& s1 = text( iColumn ); const QString& s2 = other.text( iColumn ); if( iColumn == 0 || iColumn == 2 ) { return( s1.toInt() < s2.toInt() ); } else { return( s1 < s2 ); } } }; // Constructor. patchesDialog::patchesDialog( QWidget *pParent, Qt::WindowFlags wflags ) : QDialog( pParent, wflags ) { // Setup UI struct... setupUi( this ); m_pSynth = NULL; m_iChan = 0; m_iBank = 0; m_iProg = 0; // Soundfonts list view... QHeaderView *pHeader = m_progListView->header(); // pHeader->setResizeMode(QHeaderView::Custom); pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(200); pHeader->setMovable(false); pHeader->setStretchLastSection(true); m_progListView->resizeColumnToContents(0); // Prog. //pHeader->resizeSection(1, 200); // Name. // Initial sort order... m_bankListView->sortItems(0, Qt::AscendingOrder); m_progListView->sortItems(0, Qt::AscendingOrder); // UI connections... QObject::connect(m_bankListView, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(bankChanged())); QObject::connect(m_progListView, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(progChanged(QTreeWidgetItem*,QTreeWidgetItem*))); QObject::connect(m_progListView, SIGNAL(itemActivated(QTreeWidgetItem*,int)), SLOT(accept())); QObject::connect(m_okButton, SIGNAL(clicked()), SLOT(accept())); QObject::connect(m_cancelButton, SIGNAL(clicked()), SLOT(reject())); } // Destructor. patchesDialog::~patchesDialog() { } // Dialog setup loader. void patchesDialog::setup ( fluid_synth_t * pSynth, int iChan, const QString & _chanName, LcdSpinBoxModel * _bankModel, LcdSpinBoxModel * _progModel, QLabel * _patchLabel ) { // We'll going to changes the whole thing... m_dirty = 0; m_bankModel = _bankModel; m_progModel = _progModel; m_patchLabel = _patchLabel; // Set the proper caption... setWindowTitle( _chanName + " - Soundfont patches" ); // set m_pSynth to NULL so we don't trigger any progChanged events m_pSynth = NULL; // Load bank list from actual synth stack... m_bankListView->setSortingEnabled(false); m_bankListView->clear(); // now it should be safe to set internal stuff m_pSynth = pSynth; m_iChan = iChan; fluid_preset_t preset; QTreeWidgetItem *pBankItem = NULL; // For all soundfonts (in reversed stack order) fill the available banks... int cSoundFonts = ::fluid_synth_sfcount(m_pSynth); for (int i = 0; i < cSoundFonts; i++) { fluid_sfont_t *pSoundFont = ::fluid_synth_get_sfont(m_pSynth, i); if (pSoundFont) { #ifdef CONFIG_FLUID_BANK_OFFSET int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, pSoundFont->id); #endif pSoundFont->iteration_start(pSoundFont); while (pSoundFont->iteration_next(pSoundFont, &preset)) { int iBank = preset.get_banknum(&preset); #ifdef CONFIG_FLUID_BANK_OFFSET iBank += iBankOffset; #endif if (!findBankItem(iBank)) { pBankItem = new patchItem(m_bankListView, pBankItem); if (pBankItem) pBankItem->setText(0, QString::number(iBank)); } } } } m_bankListView->setSortingEnabled(true); // Set the selected bank. m_iBank = 0; fluid_preset_t *pPreset = ::fluid_synth_get_channel_preset(m_pSynth, m_iChan); if (pPreset) { m_iBank = pPreset->get_banknum(pPreset); #ifdef CONFIG_FLUID_BANK_OFFSET m_iBank += ::fluid_synth_get_bank_offset(m_pSynth, (pPreset->sfont)->id); #endif } pBankItem = findBankItem(m_iBank); m_bankListView->setCurrentItem(pBankItem); m_bankListView->scrollToItem(pBankItem); bankChanged(); // Set the selected program. if (pPreset) m_iProg = pPreset->get_num(pPreset); QTreeWidgetItem *pProgItem = findProgItem(m_iProg); m_progListView->setCurrentItem(pProgItem); m_progListView->scrollToItem(pProgItem); // Done with setup... //m_iDirtySetup--; } // Stabilize current state form. void patchesDialog::stabilizeForm() { m_okButton->setEnabled(validateForm()); } // Validate form fields. bool patchesDialog::validateForm() { bool bValid = true; bValid = bValid && (m_bankListView->currentItem() != NULL); bValid = bValid && (m_progListView->currentItem() != NULL); return bValid; } // Realize a bank-program selection preset. void patchesDialog::setBankProg ( int iBank, int iProg ) { if (m_pSynth == NULL) return; // just select the synth's program preset... ::fluid_synth_bank_select(m_pSynth, m_iChan, iBank); ::fluid_synth_program_change(m_pSynth, m_iChan, iProg); // Maybe this is needed to stabilize things around. ::fluid_synth_program_reset(m_pSynth); } // Validate form fields and accept it valid. void patchesDialog::accept() { if (validateForm()) { // Unload from current selected dialog items. int iBank = (m_bankListView->currentItem())->text(0).toInt(); int iProg = (m_progListView->currentItem())->text(0).toInt(); // And set it right away... setBankProg(iBank, iProg); if (m_dirty > 0) { m_bankModel->setValue( iBank ); m_progModel->setValue( iProg ); m_patchLabel->setText( m_progListView-> currentItem()->text( 1 ) ); } // Do remember preview state... // if (m_pOptions) // m_pOptions->bPresetPreview = m_ui.PreviewCheckBox->isChecked(); // We got it. QDialog::accept(); } } // Reject settings (Cancel button slot). void patchesDialog::reject (void) { // Reset selection to initial selection, if applicable... if (m_dirty > 0) setBankProg(m_bankModel->value(), m_progModel->value()); // Done (hopefully nothing). QDialog::reject(); } // Find the bank item of given bank number id. QTreeWidgetItem *patchesDialog::findBankItem ( int iBank ) { QList banks = m_bankListView->findItems( QString::number(iBank), Qt::MatchExactly, 0); QListIterator iter(banks); if (iter.hasNext()) return iter.next(); else return NULL; } // Find the program item of given program number id. QTreeWidgetItem *patchesDialog::findProgItem ( int iProg ) { QList progs = m_progListView->findItems( QString::number(iProg), Qt::MatchExactly, 0); QListIterator iter(progs); if (iter.hasNext()) return iter.next(); else return NULL; } // Bank change slot. void patchesDialog::bankChanged (void) { if (m_pSynth == NULL) return; QTreeWidgetItem *pBankItem = m_bankListView->currentItem(); if (pBankItem == NULL) return; int iBankSelected = pBankItem->text(0).toInt(); // Clear up the program listview. m_progListView->setSortingEnabled(false); m_progListView->clear(); fluid_preset_t preset; QTreeWidgetItem *pProgItem = NULL; // For all soundfonts (in reversed stack order) fill the available programs... int cSoundFonts = ::fluid_synth_sfcount(m_pSynth); for (int i = 0; i < cSoundFonts && !pProgItem; i++) { fluid_sfont_t *pSoundFont = ::fluid_synth_get_sfont(m_pSynth, i); if (pSoundFont) { #ifdef CONFIG_FLUID_BANK_OFFSET int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, pSoundFont->id); #endif pSoundFont->iteration_start(pSoundFont); while (pSoundFont->iteration_next(pSoundFont, &preset)) { int iBank = preset.get_banknum(&preset); #ifdef CONFIG_FLUID_BANK_OFFSET iBank += iBankOffset; #endif int iProg = preset.get_num(&preset); if (iBank == iBankSelected && !findProgItem(iProg)) { pProgItem = new patchItem(m_progListView, pProgItem); if (pProgItem) { pProgItem->setText(0, QString::number(iProg)); pProgItem->setText(1, preset.get_name(&preset)); //pProgItem->setText(2, QString::number(pSoundFont->id)); //pProgItem->setText(3, QFileInfo( // pSoundFont->get_name(pSoundFont)).baseName()); } } } } } m_progListView->setSortingEnabled(true); // Stabilize the form. stabilizeForm(); } // Program change slot. void patchesDialog::progChanged (QTreeWidgetItem * _curr, QTreeWidgetItem * _prev) { if (m_pSynth == NULL || _curr == NULL) return; // Which preview state... if( validateForm() ) { // Set current selection. int iBank = (m_bankListView->currentItem())->text(0).toInt(); int iProg = _curr->text(0).toInt(); // And set it right away... setBankProg(iBank, iProg); // Now we're dirty nuff. m_dirty++; } // Stabilize the form. stabilizeForm(); } #include "moc_patches_dialog.cxx" lmms-1.1.3/plugins/sf2_player/patches_dialog.h000066400000000000000000000042211247673406200213440ustar00rootroot00000000000000/* * patches_dialog.h - display sf2 patches * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _PATCHES_DIALOG_H #define _PATCHES_DIALOG_H #include "ui_patches_dialog.h" #include "LcdSpinBox.h" #include #include #include //---------------------------------------------------------------------------- // qsynthPresetForm -- UI wrapper form. class patchesDialog : public QDialog, private Ui::patchesDialog { Q_OBJECT public: // Constructor. patchesDialog(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. virtual ~patchesDialog(); void setup(fluid_synth_t *pSynth, int iChan, const QString & _chanName, LcdSpinBoxModel * _bankModel, LcdSpinBoxModel * _progModel, QLabel *_patchLabel ); public slots: void stabilizeForm(); void bankChanged(); void progChanged( QTreeWidgetItem * _curr, QTreeWidgetItem * _prev ); protected slots: void accept(); void reject(); protected: void setBankProg(int iBank, int iProg); QTreeWidgetItem *findBankItem(int iBank); QTreeWidgetItem *findProgItem(int iProg); bool validateForm(); private: // Instance variables. fluid_synth_t *m_pSynth; int m_iChan; int m_iBank; int m_iProg; //int m_iDirtySetup; //int m_iDirtyCount; int m_dirty; LcdSpinBoxModel * m_bankModel; LcdSpinBoxModel * m_progModel; QLabel *m_patchLabel; }; #endif lmms-1.1.3/plugins/sf2_player/patches_dialog.ui000066400000000000000000000133031247673406200215330ustar00rootroot00000000000000 rncbc aka Rui Nuno Capela qsynth - A fluidsynth Qt GUI Interface. Copyright (C) 2003-2007, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (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. patchesDialog 0 0 480 350 300 150 Qsynth: Channel Preset 0 0 Qt::Horizontal 20 0 80 32767 Bank selector true 4 false true false true true Bank Program selector true 4 false true false true true Patch Name 4 0 0 0 0 Qt::Horizontal QSizePolicy::Expanding 120 8 OK 0 0 true Cancel 0 0 m_okButton m_cancelButton lmms-1.1.3/plugins/sf2_player/patches_off.png000066400000000000000000000015641247673406200212230ustar00rootroot00000000000000PNG  IHDRsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTE).0*/1+/1+02,13-24.35BEEDGGNPQRWXSXYUZ\W[]Y\\Z^_Z^`Z``^bc_ce`df`dg`ef`fgaegafhbggdhjdijeikfkkfklgkmhklhkmhlmhlnimojnpjoplpqlqrlqsmstnqsnrsnrtortostotuptuquwswytxzuxzu{}v{}w{}x|~'''(((***+,,....//1222335667899;;>AA?@@BJKFIIHKMHPRIMMJORKMNNQRNUXOUVPRSPSUPVYQUVRZ[TZZT]_UZ[V[\V\^V\_W_aXabY`bZ_a[__[`c[ab\bd_cg_de_ef_fi`fiafhagibeebgjbhjbhkbikcghcgichjchkdiidimejmfklflmgkkgklgmognphlmhmmimninninpioqipqjopjpqkpplpsmrsmstnsuntunuuotvouvptvpuvpvvpvwqvwrxysz{tz{u{|y|~q;tRNS,IDAT1JA{ID )Oa.5'QDltKҫc@ޚZN8 Y!0+x ""@_x{I9FճSHVKq; {PN$C>IENDB`lmms-1.1.3/plugins/sf2_player/patches_on.png000066400000000000000000000015751247673406200210670ustar00rootroot00000000000000PNG  IHDRsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTE).0*/1+/1+02,13-24.35RWXSXYUZ\X[^Z^`[`a^bc_ce`df`dg`ef`fgaegafhbdhbggdhjeikfklgklgkmhkmhlmhlnimojnpjoplpqlqrlqsmstnrsnrtortostotuptuquwrouswytxzuxzu{}w{}w{~y||]uIuCv@s2mc!e'jaBJKHPRJORNUXOUVPVYRZ[TZZT]_V\^V\_W_aXabY`b[`c\ac\bd_cg_de_ef_fi`fibYebgjbhkbikcghcgicgjchkdhkdiidimeR`fakfjnfklflmgkkgmognphmmimninninpioqipqjopjpqkpplpsmrsnsuntunuuotvouvptvpuvpvvpvwqvwtz|u`puz|v{}y|~{r}PnTu2k%c4n$h!ffcecb_ ^ _ _`__abbcbeff>tRNS6?kIDAT1N@@?;v T B2cp]hW@BBԔnH"wٸ&'NRAYv\|\Ygyquz]YѥܜJadvUd &7|ʂtOgI g0d'IjB'*4GҺwO/^"! u00 eAFFhd_ uH`fFB$5d) ~h`Rv XMޠSCy8??{/y|t@.P{]A,KhCӡ 2l68o8;$!nxi`gf`r뤡q]P)F3L D4CP.ϡT,@eBb w {+9%a[5&He GL/chÒ 9amy4pR6*b8ۃE]|kkH!XڜP((VPT_~Icڢ\ڭG\z!!% 5E0Ih!'\D|yJ mnh0lNNju|.>v"Cyp;`AD9zw/Zb:`ht{ӆxE$o"w<_BGLe*8i㯡q~ zٹZt>a%h!Z3Y=.i=1^Tbώc4O |_V9R R@)"83_A`^ju6)d, -jeYAu^o!QRһVgZfD%o<& #ә4V"5\=}j.O*+tP2ļÛ xZ\sy\Ɛm#PD'H=:d}q4uH]h-@z|[&j_=y\m_eA=^EԚa$V-U)8 ˫_ͿD< F!RRpi  26HDY[6?|L9kYT XD%ƨe2~qT͒L QHB0iQ'nw !6O`k{G}P2K@F6S@ssOe+?C6`WS?W~݆ .Aݧs,}!HIENDB`lmms-1.1.3/plugins/sf2_player/reverb_on.png000066400000000000000000000032511247673406200207160ustar00rootroot00000000000000PNG  IHDR2mOgsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<&IDATHsG{f]ْXIlMH@UT3US@P#[,ɺVjwgK\^(e>}wjZnZ9r4+6v;?@]nDA XD@@N} ((-z=vbCh--ͭ[Db/ R ei6"hB$V#GD`! A%Pr1(A 7g5[GngUrɬ6@TR bRPu%~T7Dy1lӲQ";1s (ڽ~xJJ' 褬gQQ'^nq{XIߪ`\T]aI#wLDcH$iPva^enKr}TSqx7,`* c=ŀ QNJߧcF ׷&CMѝR3.LEn/zmˈg{X]˿t0D$$IZ0b-"\ب'ܽdܛW7tZ V^̎/h . ?d 6ʺ:7BgSk}&xᄈsc,X1.D̬8zu …'Q\|Ӭ]S.sRkiAj˰7| S֣&35j3S/ɓrGTI%(Waf~̯gZ%G⭲ay>V|8D:e|G7NUĐ99FZrQULT ]lwY>|br;e [JxDn  ܹ"JJSU]q~Ӆ]͌*\]Kx^~#@| ?9{w8Q暄R00ƍ4{ځA3cv4 w6]n#@Yo53Cֲ~і,=>>{(ֳQp!p\&, c/Ual Fٙx^ |*+Uh.FMO@uI`&OZYb oؓ}wSYm_q-!HM˚ҩrutw;ht"f72}\Y++gܿ4J2S(>?.i_N$ * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "FileDialog.h" #include "sf2_player.h" #include "engine.h" #include "InstrumentTrack.h" #include "InstrumentPlayHandle.h" #include "NotePlayHandle.h" #include "knob.h" #include "song.h" #include "patches_dialog.h" #include "tooltip.h" #include "LcdSpinBox.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT sf2player_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Sf2 Player", QT_TRANSLATE_NOOP( "pluginBrowser", "Player for SoundFont files" ), "Paul Giblock ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), "sf2", NULL } ; } struct SF2PluginData { int midiNote; int lastPanning; float lastVelocity; fluid_voice_t * fluidVoice; } ; // Static map of current sfonts QMap sf2Instrument::s_fonts; QMutex sf2Instrument::s_fontsMutex; sf2Instrument::sf2Instrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &sf2player_plugin_descriptor ), m_srcState( NULL ), m_font( NULL ), m_fontId( 0 ), m_filename( "" ), m_lastMidiPitch( -1 ), m_lastMidiPitchRange( -1 ), m_channel( 1 ), m_bankNum( 0, 0, 999, this, tr("Bank") ), m_patchNum( 0, 0, 127, this, tr("Patch") ), m_gain( 1.0f, 0.0f, 5.0f, 0.01f, this, tr( "Gain" ) ), m_reverbOn( false, this, tr( "Reverb" ) ), m_reverbRoomSize( FLUID_REVERB_DEFAULT_ROOMSIZE, 0, 1.0, 0.01f, this, tr( "Reverb Roomsize" ) ), m_reverbDamping( FLUID_REVERB_DEFAULT_DAMP, 0, 1.0, 0.01, this, tr( "Reverb Damping" ) ), m_reverbWidth( FLUID_REVERB_DEFAULT_WIDTH, 0, 1.0, 0.01f, this, tr( "Reverb Width" ) ), m_reverbLevel( FLUID_REVERB_DEFAULT_LEVEL, 0, 1.0, 0.01f, this, tr( "Reverb Level" ) ), m_chorusOn( false, this, tr( "Chorus" ) ), m_chorusNum( FLUID_CHORUS_DEFAULT_N, 0, 10.0, 1.0, this, tr( "Chorus Lines" ) ), m_chorusLevel( FLUID_CHORUS_DEFAULT_LEVEL, 0, 10.0, 0.01, this, tr( "Chorus Level" ) ), m_chorusSpeed( FLUID_CHORUS_DEFAULT_SPEED, 0.29, 5.0, 0.01, this, tr( "Chorus Speed" ) ), m_chorusDepth( FLUID_CHORUS_DEFAULT_DEPTH, 0, 46.0, 0.05, this, tr( "Chorus Depth" ) ) { for( int i = 0; i < 128; ++i ) { m_notesRunning[i] = 0; } m_settings = new_fluid_settings(); //fluid_settings_setint( m_settings, (char *) "audio.period-size", engine::mixer()->framesPerPeriod() ); // This is just our starting instance of synth. It is recreated // everytime we load a new soundfont. m_synth = new_fluid_synth( m_settings ); InstrumentPlayHandle * iph = new InstrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); loadFile( configManager::inst()->defaultSoundfont() ); updateSampleRate(); updateReverbOn(); updateReverb(); updateChorusOn(); updateChorus(); updateGain(); connect( &m_bankNum, SIGNAL( dataChanged() ), this, SLOT( updatePatch() ) ); connect( &m_patchNum, SIGNAL( dataChanged() ), this, SLOT( updatePatch() ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSampleRate() ) ); // Gain connect( &m_gain, SIGNAL( dataChanged() ), this, SLOT( updateGain() ) ); // Reverb connect( &m_reverbOn, SIGNAL( dataChanged() ), this, SLOT( updateReverbOn() ) ); connect( &m_reverbRoomSize, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); connect( &m_reverbDamping, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); connect( &m_reverbWidth, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); connect( &m_reverbLevel, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); // Chorus connect( &m_chorusOn, SIGNAL( dataChanged() ), this, SLOT( updateChorusOn() ) ); connect( &m_chorusNum, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); connect( &m_chorusLevel, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); connect( &m_chorusSpeed, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); connect( &m_chorusDepth, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); } sf2Instrument::~sf2Instrument() { engine::mixer()->removePlayHandles( instrumentTrack() ); freeFont(); delete_fluid_synth( m_synth ); delete_fluid_settings( m_settings ); if( m_srcState != NULL ) { src_delete( m_srcState ); } } void sf2Instrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "src", m_filename ); m_patchNum.saveSettings( _doc, _this, "patch" ); m_bankNum.saveSettings( _doc, _this, "bank" ); m_gain.saveSettings( _doc, _this, "gain" ); m_reverbOn.saveSettings( _doc, _this, "reverbOn" ); m_reverbRoomSize.saveSettings( _doc, _this, "reverbRoomSize" ); m_reverbDamping.saveSettings( _doc, _this, "reverbDamping" ); m_reverbWidth.saveSettings( _doc, _this, "reverbWidth" ); m_reverbLevel.saveSettings( _doc, _this, "reverbLevel" ); m_chorusOn.saveSettings( _doc, _this, "chorusOn" ); m_chorusNum.saveSettings( _doc, _this, "chorusNum" ); m_chorusLevel.saveSettings( _doc, _this, "chorusLevel" ); m_chorusSpeed.saveSettings( _doc, _this, "chorusSpeed" ); m_chorusDepth.saveSettings( _doc, _this, "chorusDepth" ); } void sf2Instrument::loadSettings( const QDomElement & _this ) { openFile( _this.attribute( "src" ), false ); m_patchNum.loadSettings( _this, "patch" ); m_bankNum.loadSettings( _this, "bank" ); m_gain.loadSettings( _this, "gain" ); m_reverbOn.loadSettings( _this, "reverbOn" ); m_reverbRoomSize.loadSettings( _this, "reverbRoomSize" ); m_reverbDamping.loadSettings( _this, "reverbDamping" ); m_reverbWidth.loadSettings( _this, "reverbWidth" ); m_reverbLevel.loadSettings( _this, "reverbLevel" ); m_chorusOn.loadSettings( _this, "chorusOn" ); m_chorusNum.loadSettings( _this, "chorusNum" ); m_chorusLevel.loadSettings( _this, "chorusLevel" ); m_chorusSpeed.loadSettings( _this, "chorusSpeed" ); m_chorusDepth.loadSettings( _this, "chorusDepth" ); updatePatch(); updateGain(); } void sf2Instrument::loadFile( const QString & _file ) { if( !_file.isEmpty() && QFileInfo( _file ).exists() ) { openFile( _file, false ); updatePatch(); // for some reason we've to call that, otherwise preview of a // soundfont for the first time fails updateSampleRate(); } } AutomatableModel * sf2Instrument::childModel( const QString & _modelName ) { if( _modelName == "bank" ) { return &m_bankNum; } else if( _modelName == "patch" ) { return &m_patchNum; } qCritical() << "requested unknown model " << _modelName; return NULL; } QString sf2Instrument::nodeName() const { return sf2player_plugin_descriptor.name; } void sf2Instrument::freeFont() { m_synthMutex.lock(); if ( m_font != NULL ) { s_fontsMutex.lock(); --(m_font->refCount); // No more references if( m_font->refCount <= 0 ) { qDebug() << "Really deleting " << m_filename; fluid_synth_sfunload( m_synth, m_fontId, true ); s_fonts.remove( m_filename ); delete m_font; } // Just remove our reference else { qDebug() << "un-referencing " << m_filename; fluid_synth_remove_sfont( m_synth, m_font->fluidFont ); } s_fontsMutex.unlock(); m_font = NULL; } m_synthMutex.unlock(); } void sf2Instrument::openFile( const QString & _sf2File, bool updateTrackName ) { emit fileLoading(); // Used for loading file char * sf2Ascii = qstrdup( qPrintable( SampleBuffer::tryToMakeAbsolute( _sf2File ) ) ); QString relativePath = SampleBuffer::tryToMakeRelative( _sf2File ); // free reference to soundfont if one is selected freeFont(); m_synthMutex.lock(); s_fontsMutex.lock(); // Increment Reference if( s_fonts.contains( relativePath ) ) { qDebug() << "Using existing reference to " << relativePath; m_font = s_fonts[ relativePath ]; m_font->refCount++; m_fontId = fluid_synth_add_sfont( m_synth, m_font->fluidFont ); } // Add to map, if doesn't exist. else { m_fontId = fluid_synth_sfload( m_synth, sf2Ascii, true ); if( fluid_synth_sfcount( m_synth ) > 0 ) { // Grab this sf from the top of the stack and add to list m_font = new sf2Font( fluid_synth_get_sfont( m_synth, 0 ) ); s_fonts.insert( relativePath, m_font ); } else { // TODO: Couldn't load file! } } s_fontsMutex.unlock(); m_synthMutex.unlock(); if( m_fontId >= 0 ) { // Don't reset patch/bank, so that it isn't cleared when // someone resolves a missing file //m_patchNum.setValue( 0 ); //m_bankNum.setValue( 0 ); m_filename = relativePath; emit fileChanged(); } delete[] sf2Ascii; if( updateTrackName || instrumentTrack()->displayName() == displayName() ) { instrumentTrack()->setName( QFileInfo( _sf2File ).baseName() ); } } void sf2Instrument::updatePatch() { if( m_bankNum.value() >= 0 && m_patchNum.value() >= 0 ) { fluid_synth_program_select( m_synth, m_channel, m_fontId, m_bankNum.value(), m_patchNum.value() ); } } QString sf2Instrument::getCurrentPatchName() { int iBankSelected = m_bankNum.value(); int iProgSelected = m_patchNum.value(); fluid_preset_t preset; // For all soundfonts (in reversed stack order) fill the available programs... int cSoundFonts = ::fluid_synth_sfcount( m_synth ); for( int i = 0; i < cSoundFonts; i++ ) { fluid_sfont_t *pSoundFont = fluid_synth_get_sfont( m_synth, i ); if ( pSoundFont ) { #ifdef CONFIG_FLUID_BANK_OFFSET int iBankOffset = fluid_synth_get_bank_offset( m_synth, pSoundFont->id ); #endif pSoundFont->iteration_start( pSoundFont ); while( pSoundFont->iteration_next( pSoundFont, &preset ) ) { int iBank = preset.get_banknum( &preset ); #ifdef CONFIG_FLUID_BANK_OFFSET iBank += iBankOffset; #endif int iProg = preset.get_num( &preset ); if( iBank == iBankSelected && iProg == iProgSelected ) { return preset.get_name( &preset ); } } } } return ""; } void sf2Instrument::updateGain() { fluid_synth_set_gain( m_synth, m_gain.value() ); } void sf2Instrument::updateReverbOn() { fluid_synth_set_reverb_on( m_synth, m_reverbOn.value() ? 1 : 0 ); } void sf2Instrument::updateReverb() { fluid_synth_set_reverb( m_synth, m_reverbRoomSize.value(), m_reverbDamping.value(), m_reverbWidth.value(), m_reverbLevel.value() ); } void sf2Instrument::updateChorusOn() { fluid_synth_set_chorus_on( m_synth, m_chorusOn.value() ? 1 : 0 ); } void sf2Instrument::updateChorus() { fluid_synth_set_chorus( m_synth, static_cast( m_chorusNum.value() ), m_chorusLevel.value(), m_chorusSpeed.value(), m_chorusDepth.value(), 0 ); } void sf2Instrument::updateSampleRate() { double tempRate; // Set & get, returns the true sample rate fluid_settings_setnum( m_settings, (char *) "synth.sample-rate", engine::mixer()->processingSampleRate() ); fluid_settings_getnum( m_settings, (char *) "synth.sample-rate", &tempRate ); m_internalSampleRate = static_cast( tempRate ); if( m_font ) { // Now, delete the old one and replace m_synthMutex.lock(); fluid_synth_remove_sfont( m_synth, m_font->fluidFont ); delete_fluid_synth( m_synth ); // New synth m_synth = new_fluid_synth( m_settings ); m_fontId = fluid_synth_add_sfont( m_synth, m_font->fluidFont ); m_synthMutex.unlock(); // synth program change (set bank and patch) updatePatch(); updateGain(); } else { // Recreate synth with no soundfonts m_synthMutex.lock(); delete_fluid_synth( m_synth ); m_synth = new_fluid_synth( m_settings ); m_synthMutex.unlock(); } m_synthMutex.lock(); if( engine::mixer()->currentQualitySettings().interpolation >= Mixer::qualitySettings::Interpolation_SincFastest ) { fluid_synth_set_interp_method( m_synth, -1, FLUID_INTERP_7THORDER ); } else { fluid_synth_set_interp_method( m_synth, -1, FLUID_INTERP_DEFAULT ); } m_synthMutex.unlock(); if( m_internalSampleRate < engine::mixer()->processingSampleRate() ) { m_synthMutex.lock(); if( m_srcState != NULL ) { src_delete( m_srcState ); } int error; m_srcState = src_new( engine::mixer()->currentQualitySettings().libsrcInterpolation(), DEFAULT_CHANNELS, &error ); if( m_srcState == NULL || error ) { qCritical( "error while creating libsamplerate data structure in Sf2Instrument::updateSampleRate()" ); } m_synthMutex.unlock(); } updateReverb(); updateChorus(); updateReverbOn(); updateChorusOn(); } void sf2Instrument::playNote( NotePlayHandle * _n, sampleFrame * ) { const float LOG440 = 2.643452676f; const f_cnt_t tfp = _n->totalFramesPlayed(); int midiNote = (int)floor( 12.0 * ( log2( _n->unpitchedFrequency() ) - LOG440 ) - 4.0 ); // out of range? if( midiNote <= 0 || midiNote >= 128 ) { return; } if( tfp == 0 ) { SF2PluginData * pluginData = new SF2PluginData; pluginData->midiNote = midiNote; pluginData->lastPanning = 0; pluginData->lastVelocity = 127; pluginData->fluidVoice = NULL; _n->m_pluginData = pluginData; m_synthMutex.lock(); // get list of current voice IDs so we can easily spot the new // voice after the fluid_synth_noteon() call const int poly = fluid_synth_get_polyphony( m_synth ); fluid_voice_t * voices[poly]; unsigned int id[poly]; fluid_synth_get_voicelist( m_synth, voices, poly, -1 ); for( int i = 0; i < poly; ++i ) { id[i] = 0; } for( int i = 0; i < poly && voices[i]; ++i ) { id[i] = fluid_voice_get_id( voices[i] ); } const int baseVelocity = instrumentTrack()->midiPort()->baseVelocity(); fluid_synth_noteon( m_synth, m_channel, midiNote, _n->midiVelocity( baseVelocity ) ); // get new voice and save it fluid_synth_get_voicelist( m_synth, voices, poly, -1 ); for( int i = 0; i < poly && voices[i]; ++i ) { const unsigned int newID = fluid_voice_get_id( voices[i] ); if( id[i] != newID || newID == 0 ) { pluginData->fluidVoice = voices[i]; break; } } m_synthMutex.unlock(); m_notesRunningMutex.lock(); ++m_notesRunning[midiNote]; m_notesRunningMutex.unlock(); } /* SF2PluginData * pluginData = static_cast( _n->m_pluginData ); #ifdef SOMEONE_FIXED_PER_NOTE_PANNING if( pluginData->fluidVoice && pluginData->lastPanning != _n->getPanning() ) { const float pan = -500 + ( (float)( _n->getPanning() - PanningLeft ) ) / ( (float)( PanningRight - PanningLeft ) ) * 1000; m_synthMutex.lock(); fluid_voice_gen_set( pluginData->fluidVoice, GEN_PAN, pan ); fluid_voice_update_param( pluginData->fluidVoice, GEN_PAN ); m_synthMutex.unlock(); pluginData->lastPanning = _n->getPanning(); } #endif const float currentVelocity = _n->volumeLevel( tfp ) * instrumentTrack()->midiPort()->baseVelocity(); if( pluginData->fluidVoice && pluginData->lastVelocity != currentVelocity ) { m_synthMutex.lock(); fluid_voice_gen_set( pluginData->fluidVoice, GEN_VELOCITY, currentVelocity ); fluid_voice_update_param( pluginData->fluidVoice, GEN_VELOCITY ); // make sure, FluidSynth modulates our changed GEN_VELOCITY via internal // attenuation modulator, so changes take effect (7=Volume CC) fluid_synth_cc( m_synth, m_channel, 7, 127 ); m_synthMutex.unlock(); pluginData->lastVelocity = currentVelocity; }*/ } void sf2Instrument::play( sampleFrame * _working_buffer ) { const fpp_t frames = engine::mixer()->framesPerPeriod(); m_synthMutex.lock(); const int currentMidiPitch = instrumentTrack()->midiPitch(); if( m_lastMidiPitch != currentMidiPitch ) { m_lastMidiPitch = currentMidiPitch; fluid_synth_pitch_bend( m_synth, m_channel, m_lastMidiPitch ); } const int currentMidiPitchRange = instrumentTrack()->midiPitchRange(); if( m_lastMidiPitchRange != currentMidiPitchRange ) { m_lastMidiPitchRange = currentMidiPitchRange; fluid_synth_pitch_wheel_sens( m_synth, m_channel, m_lastMidiPitchRange ); } if( m_internalSampleRate < engine::mixer()->processingSampleRate() && m_srcState != NULL ) { const fpp_t f = frames * m_internalSampleRate / engine::mixer()->processingSampleRate(); #ifdef __GNUC__ sampleFrame tmp[f]; #else sampleFrame * tmp = new sampleFrame[f]; #endif fluid_synth_write_float( m_synth, f, tmp, 0, 2, tmp, 1, 2 ); SRC_DATA src_data; src_data.data_in = tmp[0]; src_data.data_out = _working_buffer[0]; src_data.input_frames = f; src_data.output_frames = frames; src_data.src_ratio = (double) frames / f; src_data.end_of_input = 0; int error = src_process( m_srcState, &src_data ); #ifndef __GNUC__ delete[] tmp; #endif if( error ) { qCritical( "sf2Instrument: error while resampling: %s", src_strerror( error ) ); } if( src_data.output_frames_gen > frames ) { qCritical( "sf2Instrument: not enough frames: %ld / %d", src_data.output_frames_gen, frames ); } } else { fluid_synth_write_float( m_synth, frames, _working_buffer, 0, 2, _working_buffer, 1, 2 ); } m_synthMutex.unlock(); instrumentTrack()->processAudioBuffer( _working_buffer, frames, NULL ); } void sf2Instrument::deleteNotePluginData( NotePlayHandle * _n ) { SF2PluginData * pluginData = static_cast( _n->m_pluginData ); m_notesRunningMutex.lock(); const int n = --m_notesRunning[pluginData->midiNote]; m_notesRunningMutex.unlock(); if( n <= 0 ) { m_synthMutex.lock(); fluid_synth_noteoff( m_synth, m_channel, pluginData->midiNote ); m_synthMutex.unlock(); } delete pluginData; } PluginView * sf2Instrument::instantiateView( QWidget * _parent ) { return new sf2InstrumentView( this, _parent ); } class sf2Knob : public knob { public: sf2Knob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 31, 38 ); } }; sf2InstrumentView::sf2InstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { // QVBoxLayout * vl = new QVBoxLayout( this ); // QHBoxLayout * hl = new QHBoxLayout(); sf2Instrument* k = castModel(); connect( &k->m_bankNum, SIGNAL( dataChanged() ), this, SLOT( updatePatchName() ) ); connect( &k->m_patchNum, SIGNAL( dataChanged() ), this, SLOT( updatePatchName() ) ); // File Button m_fileDialogButton = new pixmapButton( this ); m_fileDialogButton->setCursor( QCursor( Qt::PointingHandCursor ) ); m_fileDialogButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fileselect_on" ) ); m_fileDialogButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fileselect_off" ) ); m_fileDialogButton->move( 217, 107 ); connect( m_fileDialogButton, SIGNAL( clicked() ), this, SLOT( showFileDialog() ) ); toolTip::add( m_fileDialogButton, tr( "Open other SoundFont file" ) ); m_fileDialogButton->setWhatsThis( tr( "Click here to open another SF2 file" ) ); // Patch Button m_patchDialogButton = new pixmapButton( this ); m_patchDialogButton->setCursor( QCursor( Qt::PointingHandCursor ) ); m_patchDialogButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "patches_on" ) ); m_patchDialogButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "patches_off" ) ); m_patchDialogButton->setEnabled( false ); m_patchDialogButton->move( 217, 125 ); connect( m_patchDialogButton, SIGNAL( clicked() ), this, SLOT( showPatchDialog() ) ); toolTip::add( m_patchDialogButton, tr( "Choose the patch" ) ); // LCDs m_bankNumLcd = new LcdSpinBox( 3, "21pink", this ); m_bankNumLcd->move(131, 62); // m_bankNumLcd->addTextForValue( -1, "---" ); // m_bankNumLcd->setEnabled( false ); m_patchNumLcd = new LcdSpinBox( 3, "21pink", this ); m_patchNumLcd->move(190, 62); // m_patchNumLcd->addTextForValue( -1, "---" ); // m_patchNumLcd->setEnabled( false ); /*hl->addWidget( m_fileDialogButton ); hl->addWidget( m_bankNumLcd ); hl->addWidget( m_patchNumLcd ); hl->addWidget( m_patchDialogButton ); vl->addLayout( hl );*/ // Next row //hl = new QHBoxLayout(); m_filenameLabel = new QLabel( this ); m_filenameLabel->setGeometry( 58, 109, 156, 11 ); m_patchLabel = new QLabel( this ); m_patchLabel->setGeometry( 58, 127, 156, 11 ); //hl->addWidget( m_filenameLabel ); // vl->addLayout( hl ); // Gain m_gainKnob = new sf2Knob( this ); m_gainKnob->setHintText( tr("Gain") + " ", "" ); m_gainKnob->move( 86, 55 ); // vl->addWidget( m_gainKnob ); // Reverb // hl = new QHBoxLayout(); m_reverbButton = new pixmapButton( this ); m_reverbButton->setCheckable( true ); m_reverbButton->move( 14, 180 ); m_reverbButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "reverb_on" ) ); m_reverbButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "reverb_off" ) ); toolTip::add( m_reverbButton, tr( "Apply reverb (if supported)" ) ); m_reverbButton->setWhatsThis( tr( "This button enables the reverb effect. " "This is useful for cool effects, but only works on " "files that support it." ) ); m_reverbRoomSizeKnob = new sf2Knob( this ); m_reverbRoomSizeKnob->setHintText( tr("Reverb Roomsize:") + " ", "" ); m_reverbRoomSizeKnob->move( 93, 160 ); m_reverbDampingKnob = new sf2Knob( this ); m_reverbDampingKnob->setHintText( tr("Reverb Damping:") + " ", "" ); m_reverbDampingKnob->move( 130, 160 ); m_reverbWidthKnob = new sf2Knob( this ); m_reverbWidthKnob->setHintText( tr("Reverb Width:") + " ", "" ); m_reverbWidthKnob->move( 167, 160 ); m_reverbLevelKnob = new sf2Knob( this ); m_reverbLevelKnob->setHintText( tr("Reverb Level:") + " ", "" ); m_reverbLevelKnob->move( 204, 160 ); /* hl->addWidget( m_reverbOnLed ); hl->addWidget( m_reverbRoomSizeKnob ); hl->addWidget( m_reverbDampingKnob ); hl->addWidget( m_reverbWidthKnob ); hl->addWidget( m_reverbLevelKnob ); vl->addLayout( hl ); */ // Chorus // hl = new QHBoxLayout(); m_chorusButton = new pixmapButton( this ); m_chorusButton->setCheckable( true ); m_chorusButton->move( 14, 226 ); m_chorusButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "chorus_on" ) ); m_chorusButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "chorus_off" ) ); toolTip::add( m_reverbButton, tr( "Apply chorus (if supported)" ) ); m_chorusButton->setWhatsThis( tr( "This button enables the chorus effect. " "This is useful for cool echo effects, but only works on " "files that support it." ) ); m_chorusNumKnob = new sf2Knob( this ); m_chorusNumKnob->setHintText( tr("Chorus Lines:") + " ", "" ); m_chorusNumKnob->move( 93, 206 ); m_chorusLevelKnob = new sf2Knob( this ); m_chorusLevelKnob->setHintText( tr("Chorus Level:") + " ", "" ); m_chorusLevelKnob->move( 130 , 206 ); m_chorusSpeedKnob = new sf2Knob( this ); m_chorusSpeedKnob->setHintText( tr("Chorus Speed:") + " ", "" ); m_chorusSpeedKnob->move( 167 , 206 ); m_chorusDepthKnob = new sf2Knob( this ); m_chorusDepthKnob->setHintText( tr("Chorus Depth:") + " ", "" ); m_chorusDepthKnob->move( 204 , 206 ); /* hl->addWidget( m_chorusOnLed ); hl->addWidget( m_chorusNumKnob); hl->addWidget( m_chorusLevelKnob); hl->addWidget( m_chorusSpeedKnob); hl->addWidget( m_chorusDepthKnob); vl->addLayout( hl ); */ setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); updateFilename(); } sf2InstrumentView::~sf2InstrumentView() { } void sf2InstrumentView::modelChanged() { sf2Instrument * k = castModel(); m_bankNumLcd->setModel( &k->m_bankNum ); m_patchNumLcd->setModel( &k->m_patchNum ); m_gainKnob->setModel( &k->m_gain ); m_reverbButton->setModel( &k->m_reverbOn ); m_reverbRoomSizeKnob->setModel( &k->m_reverbRoomSize ); m_reverbDampingKnob->setModel( &k->m_reverbDamping ); m_reverbWidthKnob->setModel( &k->m_reverbWidth ); m_reverbLevelKnob->setModel( &k->m_reverbLevel ); m_chorusButton->setModel( &k->m_chorusOn ); m_chorusNumKnob->setModel( &k->m_chorusNum ); m_chorusLevelKnob->setModel( &k->m_chorusLevel ); m_chorusSpeedKnob->setModel( &k->m_chorusSpeed ); m_chorusDepthKnob->setModel( &k->m_chorusDepth ); connect( k, SIGNAL( fileChanged() ), this, SLOT( updateFilename() ) ); connect( k, SIGNAL( fileLoading() ), this, SLOT( invalidateFile() ) ); updateFilename(); } void sf2InstrumentView::updateFilename() { sf2Instrument * i = castModel(); QFontMetrics fm( m_filenameLabel->font() ); QString file = i->m_filename.endsWith( ".sf2", Qt::CaseInsensitive ) ? i->m_filename.left( i->m_filename.length() - 4 ) : i->m_filename; m_filenameLabel->setText( fm.elidedText( file, Qt::ElideLeft, m_filenameLabel->width() ) ); // i->m_filename + "\nPatch: TODO" ); m_patchDialogButton->setEnabled( !i->m_filename.isEmpty() ); updatePatchName(); update(); } void sf2InstrumentView::updatePatchName() { sf2Instrument * i = castModel(); QFontMetrics fm( font() ); QString patch = i->getCurrentPatchName(); m_patchLabel->setText( fm.elidedText( patch, Qt::ElideLeft, m_patchLabel->width() ) ); update(); } void sf2InstrumentView::invalidateFile() { m_patchDialogButton->setEnabled( false ); } void sf2InstrumentView::showFileDialog() { sf2Instrument * k = castModel(); FileDialog ofd( NULL, tr( "Open SoundFont file" ) ); ofd.setFileMode( FileDialog::ExistingFiles ); QStringList types; types << tr( "SoundFont2 Files (*.sf2)" ); ofd.setFilters( types ); QString dir; if( k->m_filename != "" ) { QString f = k->m_filename; if( QFileInfo( f ).isRelative() ) { f = configManager::inst()->userSamplesDir() + f; if( QFileInfo( f ).exists() == false ) { f = configManager::inst()->factorySamplesDir() + k->m_filename; } } ofd.setDirectory( QFileInfo( f ).absolutePath() ); ofd.selectFile( QFileInfo( f ).fileName() ); } else { ofd.setDirectory( configManager::inst()->userSamplesDir() ); } m_fileDialogButton->setEnabled( false ); if( ofd.exec() == QDialog::Accepted && !ofd.selectedFiles().isEmpty() ) { QString f = ofd.selectedFiles()[0]; if( f != "" ) { k->openFile( f ); engine::getSong()->setModified(); } } m_fileDialogButton->setEnabled( true ); } void sf2InstrumentView::showPatchDialog() { sf2Instrument * k = castModel(); patchesDialog pd( this ); pd.setup( k->m_synth, 1, k->instrumentTrack()->name(), &k->m_bankNum, &k->m_patchNum, m_patchLabel ); pd.exec(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new sf2Instrument( static_cast( _data ) ); } } #include "moc_sf2_player.cxx" lmms-1.1.3/plugins/sf2_player/sf2_player.h000066400000000000000000000114511247673406200204470ustar00rootroot00000000000000/* * sf2_player.h - a soundfont2 player using fluidSynth * * Copyright (c) 2008 Paul Giblock * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef SF2_PLAYER_H #define SF2_PLAYER_H #include #include "Instrument.h" #include "pixmap_button.h" #include "InstrumentView.h" #include "knob.h" #include "LcdSpinBox.h" #include "led_checkbox.h" #include "fluidsynth.h" #include "SampleBuffer.h" class sf2InstrumentView; class sf2Font; class NotePlayHandle; class patchesDialog; class QLabel; class sf2Instrument : public Instrument { Q_OBJECT mapPropertyFromModel(int,getBank,setBank,m_bankNum); mapPropertyFromModel(int,getPatch,setPatch,m_patchNum); public: sf2Instrument( InstrumentTrack * _instrument_track ); virtual ~sf2Instrument(); virtual void play( sampleFrame * _working_buffer ); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual void loadFile( const QString & _file ); virtual AutomatableModel * childModel( const QString & _modelName ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const { return 0; } virtual Flags flags() const { return IsSingleStreamed; } virtual PluginView * instantiateView( QWidget * _parent ); QString getCurrentPatchName(); void setParameter( const QString & _param, const QString & _value ); public slots: void openFile( const QString & _sf2File, bool updateTrackName = true ); void updatePatch(); void updateSampleRate(); // We can't really support sample-exact with the way IPH and FS work. // So, sig/slots work just fine for the synth settings right now. void updateReverbOn(); void updateReverb(); void updateChorusOn(); void updateChorus(); void updateGain(); private: static QMutex s_fontsMutex; static QMap s_fonts; static int (* s_origFree)( fluid_sfont_t * ); SRC_STATE * m_srcState; fluid_settings_t* m_settings; fluid_synth_t* m_synth; sf2Font* m_font; int m_fontId; QString m_filename; // Protect the array of active notes QMutex m_notesRunningMutex; // Protect synth when we are re-creating it. QMutex m_synthMutex; QMutex m_loadMutex; int m_notesRunning[128]; sample_rate_t m_internalSampleRate; int m_lastMidiPitch; int m_lastMidiPitchRange; int m_channel; LcdSpinBoxModel m_bankNum; LcdSpinBoxModel m_patchNum; FloatModel m_gain; BoolModel m_reverbOn; FloatModel m_reverbRoomSize; FloatModel m_reverbDamping; FloatModel m_reverbWidth; FloatModel m_reverbLevel; BoolModel m_chorusOn; FloatModel m_chorusNum; FloatModel m_chorusLevel; FloatModel m_chorusSpeed; FloatModel m_chorusDepth; private: void freeFont(); friend class sf2InstrumentView; signals: void fileLoading(); void fileChanged(); void patchChanged(); } ; // A soundfont in our font-map class sf2Font { public: sf2Font( fluid_sfont_t * f ) : fluidFont( f ), refCount( 1 ) {}; fluid_sfont_t * fluidFont; int refCount; }; class sf2InstrumentView : public InstrumentView { Q_OBJECT public: sf2InstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~sf2InstrumentView(); private: virtual void modelChanged(); pixmapButton * m_fileDialogButton; pixmapButton * m_patchDialogButton; LcdSpinBox * m_bankNumLcd; LcdSpinBox * m_patchNumLcd; QLabel * m_filenameLabel; QLabel * m_patchLabel; knob * m_gainKnob; pixmapButton * m_reverbButton; knob * m_reverbRoomSizeKnob; knob * m_reverbDampingKnob; knob * m_reverbWidthKnob; knob * m_reverbLevelKnob; pixmapButton * m_chorusButton; knob * m_chorusNumKnob; knob * m_chorusLevelKnob; knob * m_chorusSpeedKnob; knob * m_chorusDepthKnob; static patchesDialog * s_patchDialog; protected slots: void invalidateFile(); void showFileDialog(); void showPatchDialog(); void updateFilename(); void updatePatchName(); } ; #endif lmms-1.1.3/plugins/sfxr/000077500000000000000000000000001247673406200151425ustar00rootroot00000000000000lmms-1.1.3/plugins/sfxr/CMakeLists.txt000066400000000000000000000002001247673406200176720ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(sfxr sfxr.cpp sfxr.h MOCFILES sfxr.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/sfxr/artwork.png000066400000000000000000002427401247673406200173520ustar00rootroot00000000000000PNG  IHDRZ=bKGD" pHYs  tIME38&tEXtCommentCreated with GIMPW IDATxyeY'2VUWuWUwջ%ْm x~<^`oۼ@av0{cxcEҀZ,ےZ}Qum]usNf?r9y=%֍Y}ͦu55x7)+_#|N7c JMj\Zk(~p! 8//³P= F, dIޓ?JZ)o_5'?)].ZzgװG{14+~7?ȵUcv- /?;t?3)&  81Bi@h]\L[xH9_T^~]$>X k}E7)cgp iADPJ bwc D)eAPi6=v"lR 1;jA2ǐ# 6?+'Y!aNb`LI?ݵ4ks`l 3߻MDf dQ'#(8JQCY)mo{?eIZfTk@k])U\ ]O٩Q J'TZjt]4u% k+i]I%a@VI;0(G녆&@+;/9s4Hz /@8!ҴJ)0* ZJ{M)LWjipΡ,.ƭаD$³sRqוR=>ٙlކz^3/ñA ђ%63?a/d Mm(^%P3$4Υ| I:^>d %k\H PRz׼Tv|~{y)CgE0{V=Ohp3?Ο;~_˲.FchۈDk>k"K5&AyƽcؙZcV+7u *^X(@Q`~څ)`Kfqǘ//cvvvh~hoU^ڹv~sV^zaߛј8d׍FXt=m[uV֭SL5`,ˬ dҐY5d&!T J+L!S PF,;߄=h4MB f>Y m4땯n ubєGon,(  1p9G$"g[481i`̦/nwR(0ŝ{NMn<YY{7Ni*|P@@Ehԛ~\˟ۿEBVG\cGET`u~4Ň?aYCb2 Z!R Xw2lQG o2UKkCrΈYk +Mƭ6.l'e_~~ gĽX8UVf9hen 3O``mz E1FSSSCBJ܍,r𜵵5\|9I4C59^N79#cje@Ts.|*@BإvdqP*F $.ծK馲ZBs͜nٳX__[l 410ƽV5Aʹ( ύ!@%nf@Z8AgJ#AAi <@ :ߘ"9njImzΘuU{-Y^.8`vtyGI*_{Tf[t:C!E(oQ&(*L2&nx^0f5>yH ;wB0Fbnƌ`bh-Jo|N5r䄗9 0bZG>(y]F0@$8 o+ P Jk0NPҌ33i7M0zaBW>)4M;f\ UF q䊪 pEHhuyIw@+by7eXf/E D$<95^Wn#MS`m2-2c"J) h0pF"iBk(ɭ(!;-\0(e‡ZG4ڭ6|Iiκf΋"> dZl6 wQ7@hkׅTF+DVu͎9M͚ F Of G? Up3#2HțmQXYlo;m G~z뭨jGQǞ={ Gxo%q {kq 7q{wp!ŋ!"p~X^^FǸuÇ9ǷS~3q7[n*{AD8po@?aZ-([pwcl?~v{۷#"Z-.ָ{#?sQ]fpE&98cqvMمcc!l…9|>wݘó>SX،>+6uWZI侶 3e* 63E܏!nP6\!bB>q#EtQR(V KVepư,0996FFWt3n}k硵Ν;q)|_g33HJ)9r`0#Gp㍇l8yCB`ffYBJ'x .Sk5۷'OƷ6:n8t:<8p`?:o`nnsLOO䩓o{055F|[عs'fAϣnhv5tUq7".py_cNuo\ >]%u܆+cǎ&֩)sil 7p;%$I~~,H(mۆVAi4hޔ̲ ~,@88nDZ-4 l؂Sq%s]8} N<}s81>>2~ D\YI"KSC1>S[G!5gRltƸ3QP}+ ~v۷奔^Ӈ &yVCGz3~޿,9,bT!CU8w>HC3ᵯ wc=ulݶ ݱHu]'$:(b;wv0RZjɂiډ'x;Q#c={zjq!PkQQ]_G&36 u99rs.B`|bgl4nƟ|#cnnQ$u6q Q!RZ 5,jh5[xӛބ 9D43?1H  pǝw sصkN>52]w݅}k8u&ffgp=GũSpEm}݈k1&_Z\ԢȦ^%2aA0^\D73`nnGp9i($&&&FRի)R%^a6_^#@Eh6[  #4lD@_n$If}n6t:wyd!&m޽niyajpnCC$z qկ7p.^`Ff :t;>g^o|#ݮǎcll Xtnz,Bjq8+k.r7ct?i۶mG?wCqУ4Ro7Y1A{"'n? a5$ 62i"z QXx*8>JC閱v{,6 4 wq jB8^G4Y7f>G4{AJZ (e)Rv;/1ĥܵ9ɓ'CuU>TmDfr˥C ԔXڹccI&些PZ/ !"<&R~,fӒ)B3&ʤ9Lݔ*:CV3[z uƸ4MѸ(M2 /M RH):/)V@ل-Mz[ WU%oASNRDZPZko_ +̕^|>;#yJCJ4 (gXe>fP^N<1Cx7,B݁c<052$[p-e^j4 F&3 8~8N> ǀT&D-?u9J)h,тc7JKhMVJ;6R)H;ԗ r]Y!?%,--  6``BBΤa0`01wbdkF7-`qr&Ee+BBPr!2``9` Sh5` P]D`d>&E2&v@3WsVJ>dkĕ&/>9()!G dZj&0Hm3@3hm6nk(([6L3hfVʺUu޶vݲǤ4K?~XN) ܹn[asmO M*'g)S(G7WDHVP2uPJR`z駽AY3gl6~29~WFZ/ _f@M(KY.W{煑"tm(`AQuB^CCKiաkcuN7j$]r,NYUgƠ}e DZﴥRV(*mզ%o0Z),./m?6K,| OMN?*B"hʯ琂yQڿ3):__@K |cWeUUr---᪴Z=ILOO{c9Qӝ٬ - %PnzB7!E> 4o"!ׁV,DrcQ6l>Jf rn7fTT3h_H䦩T2rJy a&XW Z۠NHq݆ϫD!i)i@Z6k+k{1K Oq h+l4[p={s_5,BF.ICCQ*ߵ,RRzPH!fMָ0̆/H1t^ T.M,`u)iolӐ Sh79V5tD͛J^umJ9yde}C3ҕjς0e32TO//K(Pcy~$-vUVpHǏ{=|p <X?`vY2ˠ&X<#u)$wbF[;6ؐ5ך{q[;0'3εrrmל5.F e;m:wNt%S3lFx@1I\bl-^/hϤ7r)k\ɀLe4?UV ͐|3A&͚ctB+g,r.7*.Ͼkʺ2‹869ͭV grCn̩?q C͜V)eJYHR`If8 8J_H(QT;^F<a\ɋ6NG>bA+Hy[;dv)<WFiZL @ɺ.|A}VWW cyuuoԯtB9cZ{6Ah@mBmu%_TdK)%,A֭[7 SsrεµRqr~C߇RYXQIuqT)Z7fsΕ3JAdY泛:+++ "={goUDu$$SםP̬'44h9 暒Lzfk-?H2sn`TG{!&"S]wmJb=W>Kw#ɮ2ktW>E % bS!@iH-2P:2"$IbAݣd:g/uηl]wmOe5"‡>!$x; HFIV}#7w02dJ4aF{]oҷP"dGHӤkZ@|2(8F$Z!(foҼySEiAܴOƄA#iN\ب2(3"GP5!{%_eWSګL"NAj ,4FrsχM#.W8X)~7sT/ػwo!_%1Ywmm#l#3.'Y\g3 D#6dD̋e.} #0>}z/ kkw=Z-٢k͚:D饲,}(T+0 |@ʯ F0Sĉ%Aڜcc+"FpJ 4I5"0{+P{Nٜ r̅+_4v5 yo:?p:LxMqlyBƙ*IevU9WFv"oDP45l&$Aoq槣zSn=J4,+eVG&eƤ2P IЙ1aHi3,CIyirxJVHRawrJ'I9ʼq!ϻVvUW^aaáID zȴV#6nS@j| |cA(PyD,x 6O[ '$2- R0@)qhxZ0B>s;]A,LB]֠E+ m!K)g*ؐrTQo1n!?*/m(\JQ~rZyZ)dTd‘9L䩍2ˠpҥW6#n >~n[a-5%'S+d\͵yozڅb{g7]!j9_Fm*ک/ yGUؕ7ly`ߕ_!ӭ4R9ȌٚpF jyTHd6Wv}3 7r0N9ּCT=+'h-~ Z\{#@Ny IDATsM[V5bP*J{MpS.GPM{y,ܒR*Ve)χw{5)B2n(^||teTtPĢ|WcBXꋄb%i-GT;L*g€J!b[} Frn+-}nE#6n |:ai†01ӏ8U%0h9Nʻp )U@i`×zEP\*-e+ǹJI] 0)ʓKpڳ JUjw.0L;XN;e i͒fpe~xOA@&>Ժ f1Lw)g(C!jY{ WВpI=?=<23|%K7Vjj'+X = GTDtZkl䇻Q&p诇?7j0+Jyea /}}7gj<ʽEQ椆4b#ȼ&/܇ j ^A%.yLVEd(|F\@:]̽pn3MZԲnMh4 }6.0ff מWmB;e#;Rp7#UZ;%*A*, B' \?V20őA!'4n4uu/OO`p\URy +<"#03"7Ҿy>JL.,AG~!j 2$ęeڵ&nrtڲ8Y,CmB$sP:uW;I%}:w $9y9J.u?r,GlD0zb_yó4C=(-95FLQb%1M (m 򙻒XDg*BXAvDqA儊Iܗ.%΀:$X"G[!kO3)&)$ {KȬKލ`c c Q4)DZ*Q-4)ɝPi)7Q.Br.> nm%"zm_`AW9ųg<Α)._F4M}dН[o}m_ѐyA)"$VBALh:0ͬV#8l4g}!ל;G4ZybU`CJg}y3ن ǒ]N;$p .cqOj ],`B|H}\BRg9 *ry/`n|H$iZFIJɯ+w@}D(W #3)%j)vq= %P"A֯UV ^O9.ÑA ASmߖK 4tyyrSKV]Ss$9,u@yfw ]zRP2]ݹŸB>p tyy_Jh PAU*qI Iӂ]̔e29k $IcbaIjr޺7 !:\zw(![MG /Ci$1DEәBj*`6N+eѐ5s UQ%0I6]+o<|dH@CqEun90"1ׂ&F]CBpUi hʡ PbӃ*ܣ\d'@SSS5 5xUzjT#L+cI|i@;Esc͒x|҅f]ַqQ t҂sTH@*KCvNrg52Y.)UbMs7t,rAU~RLUSyc7J]FeTtEUCꌊZ%ijf<7w"(ȮKgZ{ӺC%h8aU/ˣ0]8ALfüQ$ =:aYIn«zVtbJdhFQ. Y.քPJ!.p9^6m,#"i1ҡ!axQw`&(\ (F^U1e#-8}JX`2.XdAWNF *'! [ih˛1М:Ɩ}gE< >`ЙGwَ/jX(JqLTCk!DTO؂ ţXx 7\[^qV '9xąDH0XG./V8iZ QBaLldՌ*rz5{£F)iNx  ų(1 S2 $9'&(,Ax Bdߣ86%9\\bwrhN\Ci n)̌PPO~/Cb(\B15K!=Z9 %`"c18l'Zfo\Vɔp, &̄dy[>=>0hy]~FWZދ^. j0PLcdK~jf5g#{~1+dFxFOTJeغG1ep OrkgGڊ-3xnp1.'hJjxq5MĖwbbmȲ>"0tKgG܊m..|+ƣJ  r!ż!"uv*KM, K't LPŨez^D|k<WU6`Y*D)U"K{Q+s` .-i7S ŧ[ GM/|pgaVx;Gõѿ(cuJ.F0B͞%3KZ/[YotJQnW@i$ZSX[_U-ZbAk kp151 э@Jt.G ޣ.2j> 4'xKqMǷvixe9Z+phQ@aތ6`FgV)ltwZOGYs^ SW1.'{た<n0FX_|̵7'WuZ[AkGҹǯx|'Nj i)tb7,FaFx ݉8CX:?$gz[^媬,6fQXUw6(Ke(oxynÖMz!R Gq ݘcV8/B|}.$YA>jl\xZL>;[4PC=- p/f|p|A`@ml;"M*tԸ3v`V~迸qqyϠ9}(js1q /cb<$߂N 硲ަ.F eCVУ6fĨ KF}Ur_YkBn+5L}#TQ̟>c 86` a) B&3N7Ǝ]LIȬW*7(KKf=|VOa/i|7x;&RE,ozU]Π>fo),Y,}DYח0^(;Pq~d}lR),y_H0ǐ:#NE+kT*4s_)w`]^1 tt)CS.( +⠋7\%e)Z[15q;}7&)E7,"DHRBG<: vؤ4QAP&ahMP.b{ $L=u QEavDQ3We̋K,Z\3I#|0Tَ=vn~0N研1/_k|Q*V2e>LF M `6nJ)lTAc0+uXuL(ˤlP%\WvC%atCY1e ?T4M!JkpnrVlSKac">|?v+NزPi0hEE'@f}\8ɉ|?t,hl'[{LAsm0CA#M4@ +羃ɉ3,{]= AYt_օtiDa(%3Ar КEs^|q벐. Ҧ= EE !p_asSXCDnvEWӖΆi4'?亨/&7{qߢ`i}iN 0r?CpYG\лxXZXDGPRB؞l =FH 4Ŧ>~{ғ `PȬ dt 0&e;."Ghm Boُ'; jS7? Lt Y ")SG`#*^WjԠ=(QVç?i4RIkNɒGv:5bxc9Ek QꖒK> V,,,a6\!RC $1hcz={BD 5t :V @2C}$[bM >xQͱ6LGZ8EєV)&x*kU1AS2D6o_8Dn?b C1nEjVk@K4ۓWo|2KW5Ji"ݸʮ6 -W8hc 0G{fu*aXk=g\yYX{ ݪpqyо!_n=:98`QS33[oB)dLqk31$LS^Y045JȒu .Z HȘȧz0nqX Qc: ezߖ*3D28&xT3E;Pⴒ-դb&g]4= 1c bt D f騙p0cjN@IHTZAk7 qкfW܂܆ h,hM,7M Lh-V D ^l! 8d[Kl  s9F*0ub-JMbƝRBK,X>773ڠ94Ưoq-OlU̘qF ^?A=!H (T+L'_E}6@+$E <sc䆵R9^JGM;_}טy= 1=[4G PAN7eρX ?1(y G+ 50,>zy=̐t/Xm]Iv> iY5XmɗǣHv F27[Њ8SzPJazzTbnso5Rp2iDE3STDɓ#t9^tS2i[M cLjuI~JS#fd%}g@7.,H(9!pM3Kc,;A̶P2Co$`\K⚣|E^<Ƀ, bvޥS\X1p@6`0 q9u:KN)+'YCrxH\C -7F=U:x{ރn[@ 5 |S2(:ca.toͯ桹 2f~|q/"3 8]4o=FXʧ\::ca+[ 16^'7"Du&Q R*dIkfOfLrrLAkTo8kHa}0N8O`f߽&t/Z.U8@P H$ԧ2ˠCځf1Zh @~&,Vy%XN)_JZjsN^nn^gL֚z!]J) AҌNGrsnmp·iއ/uAJZӳ|3_p[J)羈7<_872B3bV@2*%_11D  lT>PkbW^lS'"R 4naaM#j`Kucbz4.ƫX]D=vw`KA{z0&x`Q=7a((P{[eyUC`Y2w IDAT*usqQVU{յ8z8r)j8GU =si_&۶m//}oܘEEc۞{њ>:fZ8xFٽt&1-[⡇O~0uuOAf:Oa|Nߴ,ME!,K<͖ T$jb[LM:chf6 0NEQ>#j׀TT߬2SFXfgP=}E^([9g#BP;A|z syz'fn=t:$.R@h4 >ڄCϱj6}{zݞzFD'?F+C4 EW6q(q6tn?'.u6"JX80Z3H;rO0Ul۲ Ι xX=-h֨ИU4em\.tLⱇmxy+XX>oW0z h:vރA"Bw{XiLΐYV }0,aal-b cm }_#uW,F{r7Ʈv;` S׺D "񇠲c;nOaPa<^k`lN4wޅ37C@oIuXmi*T`Q)U> htZ/e!Pn_E!">ɠf$JՒPP^ғUqߨk~KKKX^^ҪXJ- O<'0}OKZ{;dkLvp _D9C%ٵi%|鞾kLu=6Kg':NaOFܚj`rLtBg6VRDx!$yzzĻM(pu117)):'[8 )w`j.S*`BlV)'Ig`ܶn p Ř&xɓE̯C{6|Q{!@szdNLm`|`2@ Kw _0L%ӕYKͤZ3_iMXQʗE穫9YA@f|R@V+[ ljRh5EtPf .̃ʍF#NDMŦ"_)&IAfffFXg %{3,q7t[e/4mAYoKgY~,jz J83UFTu)g1;CO'MiuWj- FlBeeNw!E0PSuOfgg<=ܸU:D.Q_ڈ{b uqQ4Y孇Gv˹UyH߰V4S=I5>P3=MOv6=$M?q/x0 p I&B:b .`jj+vD Ǐ99<[@ab^Jh~M7݄Gbue\y8{,Μ9 q\k_4 ;wO=Z 8w,Ο? [n)qy[sm{x I_w-rmcJQooGEX^^O?^z+!^WADo0;;CAJE}(xkXދo1߆~ tc?knYUZ{So0}BadԨ? 5$h~ D!瞋m-笳*.pi-}nK.D|q\8:J$OJET3¡9pU.b|?`Æ\xE̟?_<J.rxgXj~ٻw/Z|g#!̥S9aqNRt399z*%B?䳟,qs`:X/8r(%ؼy Y~I,uVKYqUc::i m)oQ7F犡 F01ϙ=;DAed!65kwq=@s5k6-)eĦ(&fΜyk ahc=k5LV "9oqbnols}MϢWw1>A{n.z!>h4җr b?kxr뭷h4ORT⋹+Yf {jfLYr/ڵK/'|rmt>\RD~/ЗR|r _2{rT"X,u`zÿ8{oi: ٦2S~9~O>$?OY`x; d``??ghh!P}r)PիN_k3Y_2w"c)y|oFGP:Rwܑ !(zS*=kW*)vbx7?`LNNf-oy [lZC魝_6M:,^~y#[lo}+رa*( E( c3.xWLZkf-z֚>ŗ^!%65\ ٳgOt`Փ^_Pz%Kxp<'k=?֖yH)2B /O| 6o?!աK%]w~z.Rϻ9t/o~!\q 8cEaHg4E#:wrT+ݻGhѢ411w]8fm7,XHÔ%[6q.D>X,9bѰ9zh"i-hq,XFPJe5t<"v2rTGΝEi|>SyMHҌJN*sO#n-/YF^"%%:>`Z?SZk= ^:~(%2iu.Z[3=L 9 Rja>>RojQxygܮUA92[TRp;b[ɩ `GeFWP؛!tG?Q8 VZũz|_OƎf{s9VX.fsU[*yi0 BW# Me%R"^JIkQP*)W6R.d``ЪZs LTSv^k'QWyu\m5{*xHt2J2T*\W BʶOyZ-˶V.gjd$-2Y-`:5ҽ8'SfT_ ] +k1YS:TΈ@AwyDQ k& 85o0¨s2{YWm6ҚWsiRqÇwׯ\BT*92B3Xv-ag7heE; -" +j2ٳq]'|;BC)ő#G?>˗/̞3{:+W<lڴ~h@Rmj岧뻮 ^<矧\.gvT.~.:|A r 7n2ـ 6;'F*2)Eo̜5/~c䩀3grwР^Z3c ?s !g:Yf%U:V*:ۡ(vWi +V7WJX3RG\f%;}ۼ\S)E8ʙBpk7^OVa{q]wEWv#׃vxކGS6oޜCVX!_oi\m 4j{ ml7RVi|NE5LXg7YD/)i$ RL6LY=E]Nt l @̙3'C-Zh ڵϚ'nLˎTz=uw3 r< {k&aGOcSFP^g``J«\)BLk(aR3Q/C/(r'}qL̜9 )=Tg̘g?Ku###h9p@jw: Yt(brrl>+_}TgϞ$Y6qz:@5Ē^vJySǐע2rt^~^#l>Ȼ_/ C17z/aݺ鎯݋ KHAҫKۢC~?J 2kPWU~/CXĝEML1: qwyW|+.ZIPP/ozz \7'^½Xym^ט6nt_㷭^$snNdM:~t^pL%*Yz2m}9tw1:h~+ZŎA5޼ܭ-M@(6V$Vdtq_wރ0má{owFŒF&M^rDI)2݀1ʹx}-JO?EZ<^@>NGZlwR^z ,v6N'f%8]0?J3Wp3u߆݋=mcȜiػz"L+UuU3KiNJ)VQU՚=/k<ϣ0݀7r5:j$׌ Ql| < !b.n7GczEL.Ĵ3M\o";Wu'Sw{L)v:Nּ uhffʐJ%9/w4zJTt3 SR*&pL>(%d2dF zBY"¦mS$t!u'6i'-;/Ёi :T%ͪDjrLT eVoۚ cvEUmwP$1ҴeʅDIAܡlІ}͖t>KU2֋h ع"Y:o\"6`F RvYW180t!60_0 pʙ'퉴gjr !J0 D'>OTit?[3F#a.W^=WT:z"<(H#&SP'*'N[," q狀E) 4_Oa Qֱg" $\+r!μqg$QRs#dF&gys6iP#t)ښur}E1(S\Z;eS쀜+e!i :ItTL YK;0%^l*ii )+T$ZTp dEB<}Z6:ө+I%p"Eej3SUцWb͝5Z봶6PiisAs|;ŚTOS@U±:D-M'1E1M ګ]W]v\7U(.PҲ*"biE&"ѐI/#J tIw'uz\F͘)-Tnhb?$46OBIvh 8:!{U{ioM ]6"bPEkYR @ĭчkZ_(zʠshŚ>f^hq)dA>*L/i#;ߠǘ0 =|&2*jw 2?5c(+1tl+m+0҂h?!ǘ Ft(]1quanQ@x≦X,5NB/kVkIsiB1P]G؈.G؎1o(*C' yГ1 il3Q9⎢C0?M_DbK6<(1'#1Hܪg^خ IDATc2UN$`_c쉣Hw*@!/.8 lcֹ>s @xU}āƫzxf͓~ B@yFUT@BcCFzjJ1}/+j5{vG2h[0tL*00n=nh;KG+(-E䯎%W4&} jmlMKl [h39HTC48}b4RehP\ZBo<ϏڔmV[q97[mh6H3'#ODKoql(;RepbCiENa1~4I'EΒ>Ur4 ܹs3)n4[>h۷Sn̓_? Fƶ WyrYg340>boN+jZl~gh{V"þ^n a|(;:>p=Milp7P(qVNja+Tї MߦMٱm;'\qfq`wc?9J T}\No{mtgfVfQ^ZE;o<-Ņb?`! 4ۦN5CϤ F_>lrϟZLa^(MZ)U~\wJ?jAiE_m=wk¼"hCkWcB%yެ$_J` '`,uRv4iG.} Q^Q%ykȑuݴuABJŖ-رm'KGWBqƟ>ax+L &6 _>oiȏ6?{O>}GOAmDz043S,( d.ѣǏ Q=- ۿOǷsN .Pr479DngO a)AS3tLZ#~=>,>FE܈;EҜD%]RdaT/&ZwW+1:Hm:ˇЍI*QZ>QeU0јhp78+8ٵ{[׏ף"J,*ѦHe{] JJozLt9y51BkOaF]lHߎJȜH覦FȱMovm8 ^1BTr:2r6SH*nTmF zm#X!(Cܪn?AZ#+-(aDuLkmYmuX|).tR)wJE7mCM6$㓎WQ$4F J+䐳AkI!qO,0"*GR:Bؐ[[8 &!֔VT,W\Dn%pMۍl4]Go_V:HCq8\ b{YƚCU{u܇,*3JѮ?&+mTD&@+AqY91m.8LF)U-TVTCaĞGi"jVl;䁐"S=a]^:T 9 r5oHPW( q\(b 01 +)pO5ޒ qL0%D#zhĵ躆 ʘHsC Upg,(h2$Dv_2ƨ4P]9 bk@B% "jqɸt-Bg8,Q+~~?3`GUl 2ԎԒ9z:v|EHS: 5~}<_T#hQXZ&ɳˏ4Z<"j!4 B 0Q̑\X#xK0aݻ y <^zZyhPAsG7\:YSǵq]H*x(AHAjhy5DE7DVuDYPHGdyIGYCyx+  i|'>!F[ݵx D:I8΀CB@iFtB p=v2މ%m?n+¹jD#͂#58%C5ҵ7i֪MfU=݂{BqoFlb/ZTs_6fht󖍨B:Y,*)9hmJE~F{!]Iaf77P4y8ٺOg|:oNUO>Ot76•~s9(}lh6Za@`-{VD+KH.Į 4c>Q#hߎh"$ 4 F[5 ,Z`ZCQGplqI5ŸhMh@8'P0ktVQ=" QUIF(Mhc>|cјoa!q;q-F7bF 2D CE 73seE4bfvsc btCcZh2"8`DŽ~Yt>zIx@\FVMIZnj  n><*~ߎq(&(3^iSr8Bcs$;RH -(ia3P"}*D)j縨ĂV$CC51 tYZ=u\[qLFr"D 8a3-)OYj5ab{ ĺc/-Ɂ %n W qhQd2XL`@hcuIGX]eqD臘P#k^2!m"m7CJZe8߱l7E-I eB*!Yt,%=iq:y8Hebm:)rԁP,`ɬn:8-Od AMއT0?HTU&a0:ZH/m%%`B \O\"Kit$: 8>T1ْ"L+BXW̊6 8g*&d.K¡"6a@;۶OP<0Ѭ#UvSHӦ8[n&HGV ]TIa. ۭk}gKx?_ڹ&cDfd;؂L^HHWix;o?JJ}1qg(27_oÝÖ% ڏJ Tg]" @DYV&ᑓFى.-itmNrc*#ATE X1oi?m2էpnv %J#R{g!EqmwQ׸HO%`XQJUIVQIoE+gU2BȊBI)@d3 PHO2c}rMTdzlK$R6 MUN;wvn޼9-R1)JDݠfȅ;`iit:B*R*0AǠ5 Wc?z a-"|+Y{.:}Rk!D!F `?nC*6aGB$J()N]Zb3Fag;p\/[),/LK|o4v`立P#J$S8nyՠt!$xtjI_LѡSe;c/ ز Df;g|}W 1~ᵡq#]t,[9^YuBή;#4RxW,ڛ88" %nÓ86#>¤_gڮZNy"XOy(il` ?z|5ΒsW<"ղ䑊"`J=ih%QNyYՃ^f]0$=t݊39WT}^ד+Cml16ql+(&Hd.x^ÑӀ$!~X 5sfw s^w"8?<AۄIҲ^Lm6WTW#+qw /Gc&"c$lMLjIJӇpLNw̺J~:BdS{{wn կ~5ooXmR_?Іx9lw1::JP"B[v"F!j'~މZ1 C%7$n\L<<˜ksL0nqEyw/9K]\4~S#ߚ-6 I(S/$kEe{.+0EH%77(d)u,V1f[E-m2nCNwخwSuWXVm0R 9-)z2TIEϧ50uǶp|q q#6")fO\xC$1sxV|w_tJ%FY=ArT]`S(:4׾Ɵٟ//|cHwjEa~ -4C+pB/Z B*X~?gLppFA%ҁH{iuw(OB5-xE% YjA߲#GEt}ػnbLl ModPcпxcdⱣ(GSm^ZnzK) Cϡ]G=Qt,ZEӎoSF,xWD hsN.^KJLN>C:C+pk̟?ɼ,fLng!ғ=MB"VY.#8Ң2wp~-[t2fE٠#l.<Ѷb!:| _z+md%i ]6ʪ~Z@DH}$fo MeAu~%eN!%IjύgR>ym˄{@A3)(5"b'<5FcIP9ka-DƺI&:)^CM<T]x"gt&+P +dz"-xRV6N -x"o蘾~~^Aa>t,JVZmG1cƑA`׿hIeNI P{iֳM֩[L2ByevS!C/tj'vck=!c;ǒgou~?œJ 1T\/M0Q#;D9gB*]\BM%TV1G OZP*3pGjg=_8Z 1o잟nݸZnaj^\\bhc/"Nx)ˋ\JWc|;]їJMX^=uL'l޼yy}Ag=YQ (\ס-[mM `,I %%ǮX7FC-ZȢ-OVDH F'<#[+N!De3#N@-3% #Э`(TB2 ;"%!clֶ2ת7"*,P\.qhF ۛ4Ecm-V:ᤧ"BHC^"̔\9Znh2|JJ9N"o7pp, :ԢqYV6I_"q>ÔI V?NP*3:(Eʪ~&9cƒ--[ȒJNkM$-$NIMϊ"< k#  q3B5+ٶQU'LOT쐢ϟgŒ(Fǚ}C|gڠ&UoUqi #(&=s),YJa>ѕ"1H>89L=DDW]J/ƂlёA1a)to,r]@ʅY·#QRZe$sBAubH[(ƠFZEJdPߚByW&l?Q (˴DlmF[ IDAT"MVZ!AdcbV}W=Tri`DJӋ FE)8 ǜJxA6B?$kl/˚djj۷ogrrիWw_̞33::ʦM\ˊ*lٲN=ԎMAVcY$;K=Dz"1wyhy:".r8_lr9o>oʕ+㥗(5kK,׿UOwϴZ~iZ$Ys:3g$ǎ;(Yݻws!R1w\,X /@Ϧjjg˖-T* 8<<㤔399ƍ)} r.'1~z&''Yhg駟:Qq֙g>6ldsTPJ1<4ʕ+ٶmF)^ݻww^f̘%KZj8p{X,h48sK,m4cر5kP(iӦNiaVX% CJVb]Y3G8Bp1֯_OVs\r̪Ue׮]TvZJ{g^ńSO=u |gGѦV8î]g\veA@\άv:O>$k׮eܹ >Q*hZ-oرcq |+CT0[ge[*%3cn<_,[+qرcA7'|ݻwsgcٲe]_Q _7Ț5kؾ};p3fpusȑ, \t)W^y%[lß266@__V/| !p'kzW< Ð7Mbapp8o;$?yj7nSOs9>g}r=ǫq֭[щ2ttBpo~7M\墋.K/3LVT<k:(7pꫯF)ő#G8PJ|azZrRg!VZ~7fz:cIuVo>.\mqop]wOF1e>N?G 0dݺueOC0 yέ{ެϝo?[wO)3d<"[u۹Yv-F#{BgW^Rlފ"yY~lll{wlذo~3u5l/r:ls%`ttO||{crr38*[RkR,yGx饗:[uV*Rntt|越enGȕSBΝ;wÞ={:x՜9s9s&|#3ϤlrEe!={9tz׻:q{4z~r|(J<#2t0GeS.ݛwXieu{<<AC˳Ҿk׮^zjݜ{W^ѣ4O í988_TRJ͛ڵkq]V^͆ WJEJY*T*wżMo=;"+ >,-bٲe .NmXd֬Y| C,5{o>zyh?E|A^Oyϑ~UU{9N>Χ?iNz꩎C `rrJ#w'?v>j3Mvw$\0jrvsyQe1\|"Zi]R=s'm09nvݼ+̝;>:֮]1? ҃cpp/7 j5^xdiE|_̊i7pSNn]jw^{) ̝;/|uyGTBJ_) Y/} ~Z2b\zf0 yZS*:RJx;PJ166OfPCRDev `/N;6Jb\^j\  aDQF3#M.gs //Tܻ>SQ1>>J 1PV/TUT*!}e; c[VQ(~FFK,A>7-doV\.g" #6SJ%!l68~W/}tvv5aGyl1mcӑXL0|00<(B}WPK-/~J1 վ$pC%*saG 4^oN|بC au^ kH; WQa f9ه9b\ןA E 4-t[6KڿH3A9RJקry9(3hA q,DQZQ#],4n(a(Oi@า?K(1Y)$\SK 8CLɇiX$%D,&hVu BhD(A|J8K.Jk Eq(5RM4rQupHx/7apQ ol"PO.(u`-M,=EkAn@eHD"ZQWJ\N}\HvzSw-aE~2@ gv[S>Kj3n@h$@#) T0ӘQ0SLꔼ=3- ͍ 2P*RK k5Ej!Xɪ!;!-`,|۾Xl y{ !3iKGP8$I*9e͢Пc2k¶r:4C;-Iu8ar*vCc iTB+`Z%DbrBFI")A$9>ߓL\0x*@Lt\6YJ>|bE%8gL*:DGt* h@ќC"7rSJ܄z㕏9vA$| s GWL0w'Dķq՜wj!M8ksRC C)Erl(oiy=pb* "YT8%j9$j~uJ"3mR7fn4QpA {b͡pP!Ʈ@„ped1wbOwc!)a"V.b aE.tM(V\JPîtFo_Q*0::;v>:mɵq e-8E!*}lEG's57MA@8j,PBk .:(c>k6 8s 8MKȂH"HJcoXG *B$N}bhw? )}DXկ _>'*TKnL $&ApJ܊ .h) KXb?S\$UM0[@,`QT08 'ƫN8<-PrnO΋D8`EHlJsxN kR,Lr9~(~\}={2?HofX`]](;B"M)%ŽދkG5 44M"ϴ<ûyh6> Ţns-C&$u鍐# +rȻAH .#0b`Pv9:XKʈh=Msӷ}Y{&;nu.֍OKFfV Jgbg"C ֗8Pώil?9r*X=]Tʨk{zVOk5 nWO}i I}d~Usel( v@|*rU0xhz yd΁Ry ]b"i?MC !i4m*> ".nsSb8ȫ-ׁم}]8ۆ9<\9iԧ} K%Q*#ٻo,.RkdhA :3 p6psOu#aiD.j/[.cm}{ˑ1l` qZ.AN/- Y1&BC^gʦ]X {cO =tP<^΃z'fpjC4M[o^78 {@>ŕ᪃phŖLEbiL겙 ^K{dn||Zn4c ם0M-%K*%\ IDATYbP=U0k2rNgg5UҲDJ 8%`ݝݷF ?{1 qI Zr"z&'1 EfQ!7Ήbݝ\=S`NEz/ ƕϪsh$]%fDtNշ1n݊CĉFƞObH,pkze%ێbxc?{~E,75`f"&@Oɍ68%ٸ e3(pdcWgF'1+bndC SzZL# {b`گC8"U5N*G,H~J cxCɉ[KKLxBrkQ":yz:tBtvQRQq4r,΁TEgȶ7Ōxe˖%HA6d"\?"XO2#UoO=5A,"8oŏ_e ]lJ,xsQ4#5lw o#ӻ0SE{|h.Zc̲"bݖև-F~?cu-7*ٱc|A>Gx衇pUWMt% wf.HtRo >YA|z:BI\-Tu<+.Xp]g b>P 8/K$y<9?ߣX .ǹ"vZ RIQ!ݺL{IH(=J]Ό,}B.[{%p3_ǎCѐ-uA˶(Uz1txTq|[~[l)2مq4`a`Mdkz٩CKÀm(9.~Ƿm렯x]sBha aR3  HAф@UgCZt]OˎpJ@]ݓt(ux288(M).@cE.Exfr.ރF.aT! ILpA0!Txx8mi xqN/#Ј "¬>v 8X/Cl9y7i|ۧpNwM1M'4[GG$BXb[ac0Z?LO!jZ@)a(Ow+rw`xehGS#uFQ,@HB`ps${)zwdyE)4.ra^j0B&ЌcC>b2zhя9y뮤|Cj$Eq=$q$Gsץpj.J.=ɏɹC-Gp9)O VK` s=9Bp)q@mĸp.9GCF0yplq2i\`a\>I}Th'sVe[<@\Pij2@~ou@/`}}HH'?%.ƾWF0$Eφ\h ~H:8Rq!-\%⾭vco[(f8@ I!~!,s-`rD(ںw(unZe&|%\%K"Jd/: BNAZhrXzj'-@9hE8!!c2">cp˜4c %>y$S׏$@QTh21俆g/ dfE>j(Dl nDٻw-h,AtALQ_5:@RP4㩧.(j>Gԁ8` I[UC q9E#(: pMxxjX@<sp$U@\R!I5 (B099%KOy˖/LJnr|~~G099GU |o&h -Vpu ĴE[ stT*8>vR*#z){1j""Z,i 3@΂F\<& !CoMY # CeDTMf{L "WR1!"=![Cbd*֌.|b_D@b>:'iå]]oM|P" $O@Ϙ(&P";cchFM{ Cr0pRhA!)lmT9gsQ9rcpsbyXd1<_zY2ΎNLLNđz/I'p qW6mKR@>_@ꖠƐOp M:xfuvX,s\IEp P>gpoi8O) {V!nXGR|MU9{tS "F:37{ЄUi-gx裏1+J5A#\ #}7-Q䰑,'1Lvp5W"8tډ0ZomuJhEZ,*1ɈX =1EPGV-[W^KY˖-ŊVKt\.KYo,ɜq|_l ؽ\ !9A1,(1z\)\"hPcSz` "P(crlE& ӾmBs`!oқ8>HݘJlzYiEٴdzIϒB}d8献ƭ8D\D=(H3ep!7C%qF":]Ptwp`@sHclIKL稵~g1<̛7f0Sd|#f+5D= qƐzvvډ#8GKDC)Je8Aps(xXYFsT9,9B*!b:p@uTnUO7v܉gYS'\z#zXD 힢 #͔迭]F) \G^'v܁5xCWpv~(iJ)GޡP:: .B&09t!Ο捯 SEsI•~i>@ہ-hU3N[8yqݍP=3w"Wȩ<!u nLQXre C_oiqŪ#)8KNlڏ5kס Uqy(hr9 ` 7}2q,@)FF7\g}*E<}{V9.؏50D6߳\mlypi kRgt?UmI$"η.8Ν 9A]/Й[o]{'7?e5 +!\:k) !TrVoB(E&Zo4X ] e 1Aau_PjhCJOk+^pF8:P9 $jBZb[st/bq 6sIHW !пJ剐vx%{nzH{;:Q^?slGxy# #P!ܜ D uo6S3PTZZq.ni4+W\q pjLUho|KxX !oI=GLYAf4cbbs{K/#Eĉ8tj*,L2&ṞR57Fq}wyftuu׿o#^P PEc861K3{I(+E":faSOS7ߌ Z sl |lSUZ4G- 1.P<'Obj|K%\w j,s∪jS2 Rdl\Z%KeG6Zbbbgg}6V Ǿ㨶8\"P8:8s l\6 `NVbAj6uC9eN82VG8O,pn@'9L% gE%gzJuE4Tz&>$vJكGqa=:'w^LMNԍ3(]*sQHq_[ ?d,g VCquqc8|/%8u'&'WOըcL` O4g&蛉Lq3ixVCup~aA<32_xKN}UVuv!~V3!<58%m 8ge/Z M$P#ܙ1FLE-ŜJ԰[;Tftպuێ1\@;>p,>59n߆'k3i\ hFF9 0$*39$l;s<,88ͨzݙ]砯&v@IJH0"/Ia Rc>q1ӯ0 l6QVqKW ińdbz뭨T*0&wOF5 KX_ d $r!JgzBY,.pZù)ų7)px/Zڱ, 72V hraWb/xoC,T*[QEBLjuxGǷ 57pʷCꤲL\ -1mT x{!d9bi+N3UB&I\b~\3`qEÏSQǪjA*`A" `'TR:.C]xhI,:$K".pF_:Gtñ&~b| ;+ sC;Gr/޳oƙ)i Γ..3}G2Zđ#ū/VVfˇlZ‹/j EJ2-ENBLpc ,I)5n6"!pYC5 @SH<C8EDǐd.Cړ'$>$bJC\}{;;AG8(((@&V"1hu}`>Z1ZJFIUTXi[i%&bJ\AD5@F5Q(ͻGUJKCF *OqF!%il62 e0R# '1D<82%#Su#8{VI5N*_ P"GQJnʻr=KGc<= CWɡ'ONȑ#m)F rahZ?-ntu}(B+l4A-Z$#:hk^Or9#R^|&#Uα Ea!>ghA!dC\.i>L5qf>yCm|b α=rX)IG}繦/ ]D48_>DVqE LBCMD5Kw;#k X <ԡNnrV ,$JA#B&p&0Rhle⥣j$ hȎHY *@!ThGA+l3T5q%Y@҄YgJYi#FWf&"r9̙3o}[77Ea``attt FaEfLjnòe k1=@b$ GU o!,ϥ#۩N%<6.,1"Q'_BUT] lk}U#Ԑv{UQ1aa9}|H2*7=C7"NRl&/ާ6xjy>.4Z,Hm\韧+[sqpasZX2p#'-8.U #R\ hXkd4#JGf5O# ]uuI置ZOv;0#8TM:N>{FX%1ݶtz x}JlFr /v q+i=qQfIBRA`쳪 +VݻG ,^9s`dd6fݺu 駟6 ;_7nDE -\.'x\.SSs{{{tRx}^>Z8s155Ea} Z" Clܸx5 \.gVRZmfY7b+KE~kqC\@6e#J(ݍ4`Fb~w[1B\s5 IDAT>aʕ8|0*z|@OOOĞ 7`*v"Qajj 瞋.xzbR4Mttt?*~6dQꪫpbttq7YOOġCn:tww㩧Yg5k`ll C.<_|ٳELMM%2PI@fg!Jk S !PVhEoĪU044|>/ԧL&\xᅨT*s}سgz{{h4Xh.r cӦM((Jrh4(J뮻}}}+6l׾5sh4+tR|{K\DA;@VÁf,X/pgଳ8fϞ uCgUW]Z9̙9կbll,M2imcLHڗU'?I,YXrѭ ⦏$#ؿ?|?0ܪc ԐmuիWcɒ%ؼy3yx}{5kV[ux(xq9砷p|xߍ/}KK1== uсOr|R m.%z}}}X~=^x<r{Q,~ӟb˖-ä f­ފ(pw⢋.?pw}g?Y|ŭjӡK KF (]pB]ߏ;\.glPŋСCWb\.]MZAӟ4* nVp ?m*Ieu]_=6l؀O~(T*زe ?|  .o[?~z ]]]pO<~!O%18m݆)yxކ'ʱG]w݅r-?3|@\Lψf⛧{?pףl%f 7~K:~crj њyI)@)ӌxC}٨jؽ{7188I{m_H[lAX41j(B,Ƙy6l!O%\NG@Vq1<R 1l߾T*6ڀq bm..+Y@Ɓ?˿ VZ}c{ow}7DX*kaҥ7ƪU2%+(Jؼy3 %Kں#vT*T*0T*P( "?@^>~Gԟ;==)\r%W??Ewww0<< pW_:n&{g| 9lmu1{LôEY+NDʈ,il\eSJ#Q 8mM"]* Iˌ=M6gi6l؀~ﻖFQ/з)Zo4ػg//? CCCذa|AGa_x{ރǟxvDoq8Q $f  B"c̡=r-XvVZUV# KO/f ۷o?(p(E^GP4+(B.GFq&l15Eسg*YdUplCg=nUa7[nFBGB H@R<^8eXR ?яp?~P":2~􄢐/~~:V~:ɿER1EW/gn XwVZ5kO1~ ;v=eW\*Rzڴ:&(1납)xںǨB. Z%<`(r>l۶ >~ 9&JwgBO{8*Xv-/^v<,^|*֭[Gy-H[dN\ͤ i,*3:(*4&]x饗裏sD_^z ;w4cT*Xd16mdZ .k֬/ku]25H#W Roų>/cɒ% ù看pKŶms<Ţ2x'rWƪU騊d:,g?ZQFE7CMHyb_* {{^qHOE?"ZV r'rٲe{r;!4x\7a>lڴ w_rVx;\.RG8zzz:{JŒ GM h׎ wp Wb//ۋ /կ@M7d]X`A !PM̖<FÜGI 0/hdr&H,aPaiBL$8V?> Sab j{ A)Ijx] 3KW m0 Q.q KӃB]]]v7fuhĉ&=TZ+utW8muMS! Qt,u66>n)kz H]3$W ϙ VT*%hǞ! BKd\}:M B$Rbđ#Gl5QLjlW {XȈ|>V xӉ7DMB )!8q%DDpeARHb?#͕h,i@Lqqƾ R#Sɫܰ q^(N)@k`ӦBYPH R)T*'6%c Өn.0XlTqqmT\aJ'~Heِ+(kWjshsrmymY@B@1nT7Ja:E2:K# `0֞@\QX~AhՆ P} 3:fvgrYi] 6/E0VP}A2%Ur xg|\+Y[l:\ֵtN==KM%+6qɴ&3*٦3&-zrm)&]i?ϝ&B);𶷽{VGP@ww7* W"El"cQއgbuތ˶be- it,͖ӊ3:tPn2y`T;-nSMVq.}hZHYgNLׄĖ{']fSZM?L4?AV)[zۯYET6cVAײ{Qw]][Pm\IR 1\]?Y\<SlFp۰R0''xáРn "b Qa~,HoomYH 7L,V u(H/kbQ3!(¬NtvBTTu\UYjUKONLs]EBu`40a$75ĶA"mNHovnDp/vvvs,*cuLLDV7PJg$Lijs{8~`||<&ި$ jE*V~l=}eˁ= = &J(D48wS­>|gRZIJT,(pfh 8zPp0"4^>5]aXGe%KAhӵO K QiIƍEww7gpQLL8gsT:0w\  %K`tl Gvu҄mP#"۞6MTn D(hX >H J<7s:ѣGQEG2QL|匢aD'aE 7Y^@Gm h|>X~8+V/xm;'H뺄k >K¤znwZU hl 2+ΙʲeKYـځhf\N--cB?7cڤFngEj\o&A#0f! B X6E#\L҇`A]q]Lyg `/k Y.6Z -YBzj$M-EMmZh>x~4@KQJi6rk)Yқ_ j;zh]^paܱ-|x٥HW j(u08 VU&jGGۀ;3mt>ho$`bQ u%ӑ @9틭_O8mF\1< \W"UdF!02 Tu^zsvi )Oc;t9`G0Y|s^|wch.wv֙܉A]7m1NlvnrH>?ɧ_ozRkhO''!+ZV7=~SSSR%U^[A /2{9?s |AaqT җd4ݍ85׼Dk2Bww7cؽ{7&ܼQ֨q=8#bFJI ̝]=ػ/8/硧jf3?Sng:NR 63I.CˁPsBΙY{0SuιK/ERkm[e^/`2 @$/$Ll~ 0L&bۀ M1c "dkmZRlUuιuNG%uT"Z&y#$,PRqꂙ;Ҕ)}~KTӺQAuxx81܋s-6!p֬%/xG?\sx=?9s.B^|1b>Tˋeu798+~/=%}]r)%9:y2_G5YE..T>svb|6 *FTq[A8N (ƒyN#?w)*׿E,zfcQ_S~/ʴ6+!^ /p!(LBdXV:qfDB 0^TqSmPJUFп.89f:M73Us=I:afB*YV)V" 2O;XQ\Ign{%HCtt0/_CV<6lƲ}/*mx,۶)]dU!ZgkĽDV\%L.=lAkQ=V>.: &aK`6g#ۓN|[ߢJJR1B®:%vٙqaApJxcz==zkhϛ! q=.kEAn.qǶm[yg2ӳ IDATD1&iׂ]Me!UQPE vO1xeIф ox agEQFe*6x 9??hEy[bn׳w/4!u5Э)%$؊΄eeD:Φͨ0`g{.3O587=.ZwYnn|:;/9ۋF#ׂrj+i^}3!c28ƫT3_k83WPqxXU\ثД}Z1'R m绞%gT,_(;9b{qU6S%TG:M7sϴڪmWp/ [`#@=[nڦ x IrYqBZU5{_ 9ut`z:/*0?#T;2ر w]& <4̯_!Xxo;JTݟZieraev m0)' pQSɅ ɯ)\ȑ#'Q"011W$Co%N:1՚dR"[ڈz VٸT_?ȣ>L#TUhaSvmdWn"ip]<$Z& r%p24H ;D(݆ QHDHG+sW"0[(@~R3 N*ȋ:?C\wsQ3fl C"r8L*䝐05ӃCfGxLG$U(KQi-RX* TA+[?Sj8n+{^s8ǹ뮏𖷼%QV~=ϘR^|?ȰHZ8KWG'@6pPI_D1u+)DN!Oio8W3Xge!r NfS:I,6( į.7ӳSĺʽnmPa`?LwK,S E/ڷɓ'cG1F*~vit" Dċ^~I*IF1: 's6RBjBGZJBT VZ# :>/醄Qh0KZm[3noMZJ:Xq ؚV;3?tr' V guۧ.=0ʊlN{o}+cc'3L<u֊jFI_fu4AM=tgI/z q v@GbU1|B9uA?] }<>{ n j%ccY$y_*UI{:CZCwO^bI ce#{ᓟ$ozӛشif^'5RF˅]_q}Ẁ&l5qЈWHL?:DIL8:Ii 9ՄBݤhC]eRK9>LO."LW}17?@J9V (Y"_ \h4r;03:;9sf.#CkTJFZ!\OB,'i8)T3V7-~}>vCoFe!|v(HNM|)W9EwUUJ8)מRgR{Yh`8'N@k͇> W<">e.NLz*G86pC1:PHÚsS#t_mέlRϰXѷ}nTk"V'_C[/~/| BṀ ,_}{@+HF>oIttwHɒn0&Cl5Qٽ{==ܦ6 3ͭ+0߈E\hT2ØnDgdpϤm=w.::Q6I_C`q_k֬3 'O$}6oْDMAΠtoȾ}رcNjZv?Omp-)ut=IYBH<=H ~TӃE.ݛ6\[n b36*^z{#R]E&NPVC#,꺧0dq'׺(k^‰}{_ξ(m7Jn5qVJJEHǥZh4V@R 6Y]=-wxxKCy$~E\R]j%Pp=ԾĻv%;R)Xejb#e+:gSc̏%oĵ 5aڶmӈZ⧟6 gZu-[1 \]bR└2::'> yY_]s=ZqDgG##&"wq5 RP${,@%gnnkעÐ::ل2_㤿,4MKvraqED{H!!ry*ls 4 r}w `!bp?\T,)9={Zf,2)" Wq]2DR,GAv﹍iJj灖O.h99n: |]k/)vWڒXw]q'A\7QP˖뮻ߔVݬH$ƈUO?MAT_?Tldjz}cć SZgBiL$9m@"'a "!tDݏ"ՍUM9a8]]Y'I$HvRٰlgし^#f N?cYݫVm p&1`ky駸[s:]],g>f{K/TuxJߜc{aKٶS.FBxeZ${ C{g,JUƿMT$ J) =a0 T4bHقiXnBt΂[$Ħ׵%?Y95¢jWᓍbSa(^GE:nR\rx4쐴'E7V|)r7h8L >v!V4O|`A|VH7C%b_E.R+ 񒶖 xajqXgD*>A|ߢ( L Vfՠϕިiv,JUf7FJԧXn]bΝ>4ꪫ_:< Fロw_IRT5+̡^G>ٳg3I3mQ^~s]wqo~3xfff2-516lk_wqsiq$q}B zA*F%~qWpedv0,K Z*>۷-[n-"qsWҿsj*{<:;;/u Fnnh8u4' [p?y]]hI%MHH\|PR n^Wd 6Hka#&+[-P2*m,/M1a9II1ׯgE2t:kQ ;3wygn]]ZFj77lݺ/6 عs's072|Jwe䵵uiǞo1ذYQsbA<Nbe+]4n(lAP*꽶T_ӮW [GZrqh<צqy_<O>$(O~z;ޑ;l6ıQ}?SMT{q f_ՀR1DsǶ;:17 ͱk.z!:::^x]vl6y;ޱhrs%pFj IDATx[?9zִқ/4ZndALT,ro!Nu\B¶S]mZ9rdQU lGySNn{w>n|I?Ϋ^*~{n+ s?~>ΡCh6_ƍyy[Xf ׯgYQqߟȶAeZZco??em45Zkjz׻^i:dhV*yf.2300@oo/v'Dsee/gz erq^{NQ'noq7355I1j6sYMuY= T׳駟obŊo.7t3ȑ#o&o|3]Gy$vttPic:::Xd #FFF/og||ԋL"7IXό삼?si VA-@)pDEݱ- B=o_[{]_Af^ZcbU׳Rnzzz2o믿##2yUk؈=!qlIsi[7YaF4gۿ[N>ٳg o>fs8;yXb'VEKI۷TSN;g1fnn.TJv@ hAd9 3SCQ_[XhD|K4E^/|F'aP m7͵6⮌kWu INWO&2Ȧ0s?gubPo *cIsUknIey2bA nf{̇G)?5i/AqDDsss\zٞQ*&t[!,']KD: ڂS!j8NM`k0LbnX쫖=ee_2=7kPtqsM=st.,$t DzŜW)eaq D*29doYRXWEw;PL6^\=Q45>b ˾|HxP H5_0.U|1UclTstb[2!/~LNNfjEXG$4++VH exb0D-~'!pNRq*FeP>x2:baTXG*$FJet:Uj,ǼXH0"4MXDŽ*@azF1^jM)XsgB& uUÓ0k6d(8"rDeY]T#UqHdu/-=̋98X[HrWӻd a(yZbQA@o!ΝZn  J 6+ا2jsIl-6vlfs3}NU+\ul8T|# &k♹3?uK#3l4U][Y߱ :.& hgóm՝Nplb}BJi`ыtr6р@շ{+JjN= $~b6e"8hʺѿ+Tx2 Ny\TM[Y߹t{K95ϠfiS;!jN6Ů94%(#r.~{p!Vf;kkZshn?xİ9q=)M ^Ī#S<6zzKwE TV!oouY |lҘݛ È#Sw{#>XUY브xlɊL7bXI&ՇC|迲 Z!C- +(NهIK;)~(aYu^sқYUY'=;F/Uh OC88m* j[v/P|+V׾??b``9ΝEپ};G|( ѓZ-ο?_t|5)f},q{ c ֲ\fHp̚.u ¬7_1})2xTbo';;УǾc$'cIO׋'r(+OS8뉵{#į0Mg1%,lpnZ]-VЌ]sqG8%;A=_i}<'OӫX 05cfyJƨK5*+w=Jk99_iOG=㟢oCAޟ2[_)SA2JəwA װ9?ʃ_~zAhLkLLLݩUES?RlpLOӊܸ!~64_W !R1I*"kQd -ࢋ 8+kz_N+nbs mNTf1lD'*`t8/L~9ш湦zQc!\T+KxRYgmqۇi+nrҗGyv_y|zexp@\m@e `1s7L#LEoX$h+{'fi?cCehHGŵ}R-L~+'kohY+g,~*NL5Rd+u57tۿ;<ȩ1wcViӵ wiУ(S "ē5w;|FV;fSEXVz[6mek'@KrHNPqpdO>w"v`]}S ` [Ry^u `}("/,` 0K%yH6tnA _=u{4 Ůh YeUIaɺxn~<%ڌ8+ Yl6.|]w ZO?(տƒ%KdQMl|k )w YW"R{'vWwQXAT=Oxlݶ0e.eMu4h||ߌtjҌTJlYױ`xK^dUr2Cܠu!y͟˨fd0h٘Z̛G:F9YY8dMu]IFZF4|8מ3l)n'c4c1X_G3hijl[Y.`Awb_:d/#bZM7\y!cg:::y!h j/}K-*h uRoG4yk3xǸy{RZO %N)ZM6e~8]C|4OͫT#\dlE>Uj{?0^mDtM JZhU#qks*ޛ D;qyM:}GcP-Fj(qG3ڱ "(A9BRuT}r) _;@_^o)AΡ jNfR8RSG:B"t2op]mC,8}a[[<m7Cg2U|ۼ+xr?wlT84KUYnݚlgc:.ꫮ&C|ߧ4i;C'n``]3.H[xt.ifɔ?\<|򻩚̅sG |3ӌ4y9< 4ANΏhOT HSq\4GCUp`fd6e&a>e..$/rb8~BŬ?Ō?l0t0|3Os?˔jьGs̆̇ԝ 6c*l8K#l200303fl,-"T!-"Ps,N5ct}UlKJ)ºg7{BmB'IچJOyQ]?ϩSc\yU}}}/K_"G%cfO+u\beEQE DR4@+b!޾^|?0y!@ phJ.Nq\::qJM9Zlk]W kG';qkPlUwE PqPA)pi onF1$# *5AjE 83!Q@+lknkluZ`*ZBթ^_f:&1n2?kQf0ܙNKp@pAwY3)E*"xLX)u(Љcr($K*j6{~ىM /ennH^cҥL2v7b奋v!Wc( M5&JQe~{iP,ҵsBz?gNOe$F }ZCCXe&ZrSS%!JͮPEGPa 6rTt*<3}lp\) 8>'u@FcME(!Hc0=fH ฉC"!dz}t|8 }Znd,*ႈh%xv|7b.A:qZFW&Lxcš|P]E:&PA1DȩjeEƻAw!շ졫+kDZox?uId3>zQf9i2:# U{׳>.|hE)'#0N)YMa݊"gE} &p:*]8Z҃xl8y$Q nIUXwƷg\RpSlj%Sk8xЊ8Äg E7{.Vu*+tTu8zH"iD ! T' mX++uN:(MUרP1% Q*6#p{Ɨ_fMMJg> XRpYn1ե2 x[bl$K?c|AmۚqNVbJB-"y@s>Woz3DOr [c_05 IDAT;.A>RqV<5Clj q JjEW>*!\YK<-8Ȑph[Tquu,g5`|<Uv3ǃőuL`+}hNiy+W+.~vT_F+9"NLC^?.JEUvp6`em YG}+/A8ݓd,DaRœBͩq&82w~՗h 7gSf]"$a~-bSQSۜ PI)w@|>~3Ϲs&5V;gvv3i5c`r 3")S|smo{cccۿ?ւhXoFX[[ϺOϝ`}؄TRzFϻVC:*V8" %^BE Xoasj8tԍapWmMs&C367rd㲭HPFXjLXl -8<̊jV:9s1dhfZQAMԐt# XFiKj=<լv=7vAƷiV(RHj̟'6E& FbU;xkYl 0[oG+b%".Ryms%J6JTw+n~zɩIzּ[p]8'x"{cǏ[L{R?zF4X;HC"2̡#JGsMˆ8VDA ,W]G+n됓 }l2Ҋ#>Mo|n lke9]SxHQFI!'fЋ3։vFEK3!Y'7!XD ]{ 3 ,LuR<IXrb] ?nh1TwKH,D#5nw\NGoo|#}kټy^z)q*8Kv'hm<\||K_⪫ju~tÇU+xJ"Q&-T^ 2RGQ+@˘eKŬ&kw*NXum"m6\ Y屉5> _i|[\yz'TZN @t۾`vF)f 3gE IQWbh OO?Iխd i,3e2s^u|>g)_}}7u]Ī5T3?hY}?>+ZFF  ؄B lB\~*bǏvr._"~pO1T)@M0V$Vlfs}L$>o.J7$AXeQt|tErs.\üB vR9EߧdMkÞL:ߊYwp뭷?ƵFXضŲe+f*].)ˇ&^(3<hQ''b -t"ȪcCU ۲鲻)595:_8~ sjֵH$GO.ʈx}z.!޵?%,n*.),gS8>[]V,ێFIMXjR(֙imi5ΖeakCjw_fv"˱xb|)eϞѣG{.r ybYX.!Is=}ض62Dd҉}Ba[_X:Q(]F^;;(w۶m:Y6c)A zOw&mGh F6DdƧ[_X@03Owif۶给d8'?'OBJjVD+N:iT|>7t̢r/2n srϷ{sJ=2`~ݓD@f<)&d)&&z27pG?RfoSrm׍,l[/}jz~܊Z[Sڕ'I#D%y.u%, {ҧ`?MmpK+cGedt7xN6"qZ;!L 51c޹LO2RVHq]MLSa6 R9rL O8F [f-&ηFW9n<P~@|TǮ"+ɨI|&BXL)src4'Dj{G ! <s4]j.g:BOr!C{_EN?[xsUWrQ(iQy+e CYfIWmޘpBfg:f#" YcIqPNח^)`t} C䭢+N;J/KIUlA%^iucPZ8oq˴q>H ')h͝JrF aw'@Fߪ_{I'[D 9t!,. .{%Dk`acs2T?;H^2Sʲ4RPjV0n{6Qd1iθ`q2/mj,C,뫙|9s O?4˼1::ʙӧ)+Qoz.J}#_T9)C!S`b֏4 < ږpB=yI)bc(jI^z |VDwT*mzn;A0% "q58v'ODܹsYxIc ظh0|-]e[9r׶lC,dMdd Ũcxd#!l.V40wOSc@yaiꐎó@4A=›K/}=wN{XEfŷ?x?J:;;Yl9~@FF s,'BEY,A nFŽXL 8s }}}H)Yv-|;v3w.K.Ilh{>>A q /`io/çadx(!fB0[ޒL)Cʊ׬[znsǪUVkԏ>'"f]ĚWHɹs8x`8GHNDݡ-V'݈L]0,r S?1> mߞZd)'NJt8?w~OBf%qR;ﺓza] [o^r;v2lš5k8~8|_;)AMJ7L4{˨.#Rr=wcǎxsoi r?7S#1駟m=L, =ϼ]_b9k\K5\^z.cBͪ!pp(q9J#JMc}~9uԲ`[GXmdQ@h9 :\TE1[0 GG_ XB0{dambO>ſOX|y|Si@|beYyz!ڣMۋ8ܹJ}O;]e?aȡhgK]ww܁:5獎 a:<<O<#ݻwswĿ O^{ ˲- 14BX& DD$ $a'sLNL{A6Ѥ ꫯW^[šÇ*Dض9xG?;ʍ7݆yX.{i"b1VWujWj0: PQNiG$E /׷!o j̝=G_N&ֿ+W䗿|_b┸BVx¸_J2v;wu7RJ^ujRHWEذq#|E&&xٲe O=dvl߾aF^~FV!bKc"*ٸ|cٳbxzqF7|EjjgT*e-^ƍ_mG-(#Nx|۶< "z~Zu9-W_v,J2m;ncŊ匏ODIVDX}"QTV\.>P.2uC⢅p^Ջ013>˃[SOF5~,\[6nNW%T#F6Żh-Ő톂rRpB,Xj5 .W_}k7]wix1>"~@a@a/'!2Hc"߿ yYnF꫹vtw_D|t;Y6[*Dl/be̟U DʰMys E"П(zYֲY,ZIfȨnP۶uZ`"CCC:2/"3s,(Bթw]W#WfߺX,vY>u rʝRa,ˢR.FCWD.aB9v~{d}MʓL',Jͱ4_&OP )%zl۶~kM+;hݸMLS7צC{hq]J={vngfYf[mgҢ^8f;3&ڐVĄK43[&:tȚ=k<][1$Mh-aQ(t4n>wx{~Ѫ{?Ij ZB퀑P1ؼi7dF&ӲU(Wu&M0GWev+!ꐱY}gzz:s4̠rp[+Wnkdm֚# 2b3O؂ ak2i\Bj:U}$K}uV򹜆[ce46VK @mYq$PUݘ@ H#bT;oJ޼$(Hh'0 t4[ - +IMv> 3/hcƽ c >kqT*iVIDATa f`IKYG񍍀L<&3%%Bj9h.;IM~/HՅ4N6wnV&$ˑ&c)_>O=u]y0m=w9 ]*IsC2d:Mʅ9s[}9Nj*OVst>V!i:_ϢfVY)Z:Gz;gEld$-֭zfJdgTTh4"{4#Y(jJmk68ZB?fq͜uS&"&'cF e5YCgM8;*γ@@ʓ&=~X(cE.hʹ4IATdOPjƂ&*BmGaI*1e4BߜAb5.üQU JoX֏yQ`$I#2\3&FP!I5'K"6Q- ǞY?Kb-+‹霪 bbzh95)aWW Nv" Ӆ~#G4T31 d8R?_p"U_ Z[ O>1I3Y`A a`yhʢ16S#jŀ|-<8Ê3tÛ{Y#OjN)x <р1C.irljIn8XBf${k8R&S7|@G4^ Da yz DB1>~(KDOV2ɲK3X)2m\^tuuI'7aW Xj3I);꫷=d0kC_H{ݤ"f DD,[Gm3s'4ޖ6 -1iL$B)Z8Dh'ą^!0KȦzWX*ƅ~^0g0IENDB`lmms-1.1.3/plugins/sfxr/blip_active.png000066400000000000000000000007151247673406200201340ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIMEz|tEXtCommentCreated with GIMPW5IDAT(ϝ=N@Vk R :2Դ 7ORXGDN$"Pf罙Fma ! 3BdE)4Q(xxHݷ҉%IRhzcbaHe1|Ă1HQluUl@ :M~".,,XYV\O_Di!zq_2+f9Ʃ7<s:t +u[QMŁK @d3K&y _9?.{ nzIENDB`lmms-1.1.3/plugins/sfxr/blip_inactive.png000066400000000000000000000006441247673406200204640ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIMEc/utEXtCommentCreated with GIMPW IDAT(ϝ1r0E 4`ܹhpZ}3%7H³8hkv2NX`cvbk-D0p>gM̋4DZ " n5j5I>>p]^GSh4(V\]]`6(LӈR׉CDNb8P,I&eFetF(@XZZ"c `2'>(oSGIENDB`lmms-1.1.3/plugins/sfxr/jump_active.png000066400000000000000000000011311247673406200201520ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME)tEXtCommentCreated with GIMPWIDAT(}?ham.(GCN$i,0]u Xie XVJ*IA jBA!/9bVp80|̼7I\V/.;01Q DlyE =HX]jD0w1g_@=كDJܛܘX0^cP[݅۰^R6!pmMB}"S 2R>|m>y;覐?ˈ:÷#h'fC!F~$fHa:D|U3N O6lA'JZ05 @/;H& SgLh< = .^v/Y Ni-eT"%+yzkuô[J)NYV%k8̸tbfɰSAPo<[ޢ桎IENDB`lmms-1.1.3/plugins/sfxr/jump_inactive.png000066400000000000000000000010611247673406200205030ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME5!5tEXtCommentCreated with GIMPWIDAT(ϝPF׉I!^DB* i;; (/f&06aou]F" `}N4)H)qqR~iJDUU(˅t:.ժfJ%2 P(|>^vl6D>^,KfWf!h4E3Q=x<\WH)p00iۤi?\_D.^,hkq[Va@vB5)Gj x-^΁)%{?TQ}YΙS8cZkR1Zro5'^Ui L=aR>=јȨIENDB`lmms-1.1.3/plugins/sfxr/logo.png000066400000000000000000000006541247673406200166150ustar00rootroot00000000000000PNG  IHDR00WbKGD" pHYs  tIME-0 tEXtCommentCreated with GIMPWIDATh홽0 mkF)dR1CؖdݡT jZ6qv͞aET%K6X-|d8}粉%V$xFCvpÔ[( ܊ę}jNgKފDFM[Y`$T 0(U`^.62>_-uayΧ_a5[OOX6XToEv{}Pa"JAhhր.ˎO4F.4T`Pbo|'/ Џa a*!8Q9Zk*=oz棧|!Vh5y4S7/ΣE<ݮ`_lI QH;ҰpiN>*b1t%l_uyOK"N#ާ!m|,Lc1X%F~@#}$nZ!r X?yع ;<@/ Cq@(_6*Pm0 8;x &﷡߇p NgsS 1 c{b[`>^'1 $|._a^}H/cIn֌$1%̱/1O1e_9J1[#XYQ`隄1hњ4>>RSJj쯯#'bij52 +++)aO]mR߳^i\]] yD<ѺP9??P(Wn"l6 ϓfQJnP(.F]p]~D'pssCѠZbYooonPJD P*t:8CٌRJZ\ bll )% ,..J<>>0'}xx`bbYjZ*Llll022B\& C~,^,[8:j5xoy^nKbnn!n7 }؎~N T%X;xn5ETjT,v4a 0@bԪeVd$:PdU$AhŷP`a2Trn'T#zU, ,!C0|#CEV+3PO NoY[IENDB`lmms-1.1.3/plugins/sfxr/pickup_inactive.png000066400000000000000000000006031247673406200210240ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME+!;tEXtCommentCreated with GIMPWIDAT(ϝ;0 D!]P.Y = ,Aj r'r<؊ij@D#(@4(N&dYf IGnyN83}ynzW(D8R ]!4Mh֎ct(l۶lvu11eYnp7_S=o_!ݝ~+D-˒80 ->{|&7IENDB`lmms-1.1.3/plugins/sfxr/powerup_active.png000066400000000000000000000007511247673406200207070ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME;n[tEXtCommentCreated with GIMPWQIDAT(}JAٟ&[,B6)S+ ,V! V`&kqw7=s3{ΘZ&dUoeقo74LK.!"o(hj5Wa؇C[.@ўf'ƛp:am_6!;3;rYbZ[8{^,KWNlC'p/($ ծztwDiHA<$'ؿ~*R*q.u%LBu!<ٺrj} lPǂ\{t X7 8"qy9IENDB`lmms-1.1.3/plugins/sfxr/powerup_inactive.png000066400000000000000000000007001247673406200212300ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIMEy#tEXtCommentCreated with GIMPW(IDAT(ϝ1P7!Oc[.=+BAwXJ K&߼yO:FA8qLYQf؃NSsuJX,`߳ndQ\/Qa^$drva@Xkiۖix4yN]״ms|UU,"DQ4Y>7~gYFe|[^/N8ajw$Q@1=.zRXVS^IENDB`lmms-1.1.3/plugins/sfxr/randomize_active.png000066400000000000000000000021021247673406200211660ustar00rootroot00000000000000PNG  IHDR(] ^FbKGD" pHYs  tIME!4BtEXtCommentCreated with GIMPWIDATHǍKU[]11:fH0(I$$YeDPAq+ ,"DB|Y$3Ȉ#cgcU]U8]S).u??{i344HtF\Ͻןo̯V8 X28@A!J <\6@,n\|:C5\_. T@j)j|(J\[< Z iF${PR` >(Su81Mwq~ c 00 37o 0N(MxXlà]8_+\Bsޞ} Xq\N PP)eN|O¹81l;gA͸>4e(z@EJ9_4 l_}z]H [^Akp7k0qƷ^^Ǚ[A]N x}ZM[ye4_BKO_1|xfk4nr Ԕ{&j0[l^@))&mza=>.SZN kpr;|"=p wi&xqd<0i6 aاuX !]#fCrz7;$F|xfVṯajU`$j>>:8>ql64M}0 #include #define rnd(n) (rand()%(n+1)) #define PI 3.14159265f float frnd(float range) { return (float)rnd(10000)/10000*range; } #include #include "sfxr.h" #include "engine.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include "templates.h" #include "tooltip.h" #include "song.h" #include "MidiEvent.h" #include "MidiTime.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT sfxr_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "sfxr", QT_TRANSLATE_NOOP( "pluginBrowser", "LMMS port of sfxr" ), "Wong Cho Ching", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } SfxrSynth::SfxrSynth( const sfxrInstrument * s ): s(s), playing_sample( true ) { resetSample( false ); } SfxrSynth::~SfxrSynth() { } void SfxrSynth::resetSample( bool restart ) { if(!restart) { phase=0; } fperiod=100.0/(s->m_startFreqModel.value()*s->m_startFreqModel.value()+0.001); period=(int)fperiod; fmaxperiod=100.0/(s->m_minFreqModel.value()*s->m_minFreqModel.value()+0.001); fslide=1.0-pow((double)s->m_slideModel.value(), 3.0)*0.01; fdslide=-pow((double)s->m_dSlideModel.value(), 3.0)*0.000001; square_duty=0.5f-s->m_sqrDutyModel.value()*0.5f; square_slide=-s->m_sqrSweepModel.value()*0.00005f; if(s->m_changeAmtModel.value()>=0.0f) arp_mod=1.0-pow((double)s->m_changeAmtModel.value(), 2.0)*0.9; else arp_mod=1.0+pow((double)s->m_changeAmtModel.value(), 2.0)*10.0; arp_time=0; arp_limit=(int)(pow(1.0f-s->m_changeSpeedModel.value(), 2.0f)*20000+32); if(s->m_changeSpeedModel.value()==1.0f) arp_limit=0; if(!restart) { // reset filter fltp=0.0f; fltdp=0.0f; fltw=pow(s->m_lpFilCutModel.value(), 3.0f)*0.1f; fltw_d=1.0f+s->m_lpFilCutSweepModel.value()*0.0001f; fltdmp=5.0f/(1.0f+pow(s->m_lpFilResoModel.value(), 2.0f)*20.0f)*(0.01f+fltw); if(fltdmp>0.8f) fltdmp=0.8f; fltphp=0.0f; flthp=pow(s->m_hpFilCutModel.value(), 2.0f)*0.1f; flthp_d=1.0+s->m_hpFilCutSweepModel.value()*0.0003f; // reset vibrato vib_phase=0.0f; vib_speed=pow(s->m_vibSpeedModel.value(), 2.0f)*0.01f; vib_amp=s->m_vibDepthModel.value()*0.5f; // reset envelope env_vol=0.0f; env_stage=0; env_time=0; env_length[0]=(int)(s->m_attModel.value()*s->m_attModel.value()*100000.0f); env_length[1]=(int)(s->m_holdModel.value()*s->m_holdModel.value()*100000.0f); env_length[2]=(int)(s->m_decModel.value()*s->m_decModel.value()*100000.0f); fphase=pow(s->m_phaserOffsetModel.value(), 2.0f)*1020.0f; if(s->m_phaserOffsetModel.value()<0.0f) fphase=-fphase; fdphase=pow(s->m_phaserSweepModel.value(), 2.0f)*1.0f; if(s->m_phaserSweepModel.value()<0.0f) fdphase=-fdphase; iphase=abs((int)fphase); ipp=0; for(int i=0;i<1024;i++) phaser_buffer[i]=0.0f; for(int i=0;i<32;i++) noise_buffer[i]=frnd(2.0f)-1.0f; rep_time=0; rep_limit=(int)(pow(1.0f-s->m_repeatSpeedModel.value(), 2.0f)*20000+32); if(s->m_repeatSpeedModel.value()==0.0f) rep_limit=0; } } void SfxrSynth::update( sampleFrame * buffer, const int32_t frameNum ) { for(int i=0;i=rep_limit) { rep_limit=0; resetSample(true); } // frequency envelopes/arpeggios arp_time++; if(arp_limit!=0 && arp_time>=arp_limit) { arp_limit=0; fperiod*=arp_mod; } fslide+=fdslide; fperiod*=fslide; if(fperiod>fmaxperiod) { fperiod=fmaxperiod; if(s->m_minFreqModel.value()>0.0f) playing_sample=false; } float rfperiod=fperiod; if(vib_amp>0.0f) { vib_phase+=vib_speed; rfperiod=fperiod*(1.0+sin(vib_phase)*vib_amp); } period=(int)rfperiod; if(period<8) period=8; square_duty+=square_slide; if(square_duty<0.0f) square_duty=0.0f; if(square_duty>0.5f) square_duty=0.5f; // volume envelope env_time++; if(env_time>env_length[env_stage]) { env_time=0; env_stage++; if(env_stage==3) playing_sample=false; } if(env_stage==0) env_vol=(float)env_time/env_length[0]; if(env_stage==1) env_vol=1.0f+pow(1.0f-(float)env_time/env_length[1], 1.0f)*2.0f*s->m_susModel.value(); if(env_stage==2) env_vol=1.0f-(float)env_time/env_length[2]; // phaser step fphase+=fdphase; iphase=abs((int)fphase); if(iphase>1023) iphase=1023; if(flthp_d!=0.0f) { flthp*=flthp_d; if(flthp<0.00001f) flthp=0.00001f; if(flthp>0.1f) flthp=0.1f; } float ssample=0.0f; for(int si=0;si<8;si++) // 8x supersampling { float sample=0.0f; phase++; if(phase>=period) { // phase=0; phase%=period; if(s->m_waveFormModel.value()==3) for(int i=0;i<32;i++) noise_buffer[i]=frnd(2.0f)-1.0f; } // base waveform float fp=(float)phase/period; switch(s->m_waveFormModel.value()) { case 0: // square if(fp0.1f) fltw=0.1f; if(s->m_lpFilCutModel.value()!=1.0f) { fltdp+=(sample-fltp)*fltw; fltdp-=fltdp*fltdmp; } else { fltp=sample; fltdp=0.0f; } fltp+=fltdp; // hp filter fltphp+=fltp-pp; fltphp-=fltphp*flthp; sample=fltphp; // phaser phaser_buffer[ipp&1023]=sample; sample+=phaser_buffer[(ipp-iphase+1024)&1023]; ipp=(ipp+1)&1023; // final accumulation and envelope application ssample+=sample*env_vol; } //ssample=ssample/8*master_vol; //ssample*=2.0f*sound_vol; ssample*=0.025f; if(buffer!=NULL) { if(ssample>1.0f) ssample=1.0f; if(ssample<-1.0f) ssample=-1.0f; for( ch_cnt_t j=0; jprocessingSampleRate(); fpp_t frameNum = _n->framesLeftForCurrentPeriod(); if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { _n->m_pluginData = new SfxrSynth( this ); } else if( static_cast(_n->m_pluginData)->isPlaying() == false ) { _n->noteOff(); return; } int32_t pitchedFrameNum = (_n->frequency()/BaseFreq)*frameNum; pitchedFrameNum /= ( currentSampleRate / 44100 ); // debug code // qDebug( "pFN %d", pitchedFrameNum ); sampleFrame * pitchedBuffer = new sampleFrame[pitchedFrameNum]; static_cast(_n->m_pluginData)->update( pitchedBuffer, pitchedFrameNum ); for( fpp_t i=0; iprocessAudioBuffer( _working_buffer, frameNum, _n ); } void sfxrInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * sfxrInstrument::instantiateView( QWidget * _parent ) { return( new sfxrInstrumentView( this, _parent ) ); } void sfxrInstrument::resetModels() { m_attModel.reset(); m_holdModel.reset(); m_susModel.reset(); m_decModel.reset(); m_startFreqModel.reset(); m_minFreqModel.reset(); m_slideModel.reset(); m_dSlideModel.reset(); m_vibDepthModel.reset(); m_vibSpeedModel.reset(); m_changeAmtModel.reset(); m_changeSpeedModel.reset(); m_sqrDutyModel.reset(); m_sqrSweepModel.reset(); m_repeatSpeedModel.reset(); m_phaserOffsetModel.reset(); m_phaserSweepModel.reset(); m_lpFilCutModel.reset(); m_lpFilCutSweepModel.reset(); m_lpFilResoModel.reset(); m_hpFilCutModel.reset(); m_hpFilCutSweepModel.reset(); m_waveFormModel.reset(); } class sfxrKnob : public knob { public: sfxrKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 20, 20 ); setCenterPointX( 10.0 ); setCenterPointY( 10.0 ); setTotalAngle( 270.0 ); setLineWidth( 1 ); } }; #define createKnob( _knob, _x, _y, _name )\ _knob = new sfxrKnob( this ); \ _knob->setHintText( tr( _name ":" ), "" ); \ _knob->move( _x, _y ); \ toolTip::add( _knob, tr( _name ) ); #define createButton( _button, _x, _y, _name, _resName )\ _button = new pixmapButton( this, tr( _name ) );\ _button->move( _x, _y );\ _button->setActiveGraphic( embed::getIconPixmap( _resName "_active" ) );\ _button->setInactiveGraphic( embed::getIconPixmap( _resName "_inactive" ) );\ toolTip::add( _button, tr( _name ) ); #define createButtonLocalGraphic( _button, _x, _y, _name, _resName )\ _button = new pixmapButton( this, tr( _name ) );\ _button->move( _x, _y );\ _button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( _resName "_active" ) );\ _button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( _resName "_inactive" ) );\ toolTip::add( _button, tr( _name ) ); sfxrInstrumentView::sfxrInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { srand(time(NULL)); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); createKnob(m_attKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*0, "Attack Time"); createKnob(m_holdKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*1, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*0, "Sustain Time"); createKnob(m_susKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*2, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*0, "Sustain Punch"); createKnob(m_decKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*3, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*0, "Decay Time"); m_attKnob ->setObjectName( "envKnob" ); m_holdKnob ->setObjectName( "envKnob" ); m_susKnob ->setObjectName( "envKnob" ); m_decKnob ->setObjectName( "envKnob" ); createKnob(m_startFreqKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*1, "Start Frequency"); createKnob(m_minFreqKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*1, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*1, "Min Frequency"); createKnob(m_slideKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*2, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*1, "Slide"); createKnob(m_dSlideKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*3, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*1, "Delta Slide"); createKnob(m_vibDepthKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*4, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*1, "Vibrato Depth"); createKnob(m_vibSpeedKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*5, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*1, "Vibrato Speed"); m_startFreqKnob ->setObjectName( "freqKnob" ); m_minFreqKnob ->setObjectName( "freqKnob" ); m_slideKnob ->setObjectName( "freqKnob" ); m_dSlideKnob ->setObjectName( "freqKnob" ); m_vibDepthKnob ->setObjectName( "freqKnob" ); m_vibSpeedKnob ->setObjectName( "freqKnob" ); createKnob(m_changeAmtKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Change Amount"); createKnob(m_changeSpeedKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*1, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Change Speed"); m_changeAmtKnob ->setObjectName( "changeKnob" ); m_changeSpeedKnob ->setObjectName( "changeKnob" ); createKnob(m_sqrDutyKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*3, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Squre Duty(Square wave only)"); createKnob(m_sqrSweepKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*4, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Squre Sweep(Square wave only)"); m_sqrDutyKnob ->setObjectName( "sqrKnob" ); m_sqrSweepKnob ->setObjectName( "sqrKnob" ); createKnob(m_repeatSpeedKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*3, "Repeat Speed"); m_repeatSpeedKnob ->setObjectName( "repeatKnob" ); createKnob(m_phaserOffsetKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*3, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*3, "Phaser Offset"); createKnob(m_phaserSweepKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*4, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*3, "Phaser Sweep"); m_phaserOffsetKnob ->setObjectName( "phaserKnob" ); m_phaserSweepKnob ->setObjectName( "phaserKnob" ); createKnob(m_lpFilCutKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*4, "LP Filter Cutoff"); createKnob(m_lpFilCutSweepKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*1, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*4, "LP Filter Cutoff Sweep"); createKnob(m_lpFilResoKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*2, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*4, "LP Filter Resonance"); createKnob(m_hpFilCutKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*3, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*4, "HP Filter Cutoff"); createKnob(m_hpFilCutSweepKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*4, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*4, "HP Filter Cutoff Sweep"); m_lpFilCutKnob ->setObjectName( "filterKnob" ); m_lpFilCutSweepKnob ->setObjectName( "filterKnob" ); m_lpFilResoKnob ->setObjectName( "filterKnob" ); m_hpFilCutKnob ->setObjectName( "filterKnob" ); m_hpFilCutSweepKnob ->setObjectName( "filterKnob" ); createButtonLocalGraphic(m_sqrWaveBtn, KNOBS_BASE_X+WAVEFORM_BUTTON_WIDTH*0, WAVEFORM_BASE_Y, "Square Wave", "sfxr_square_wave"); createButtonLocalGraphic(m_sawWaveBtn, KNOBS_BASE_X+WAVEFORM_BUTTON_WIDTH*1, WAVEFORM_BASE_Y, "Saw Wave", "sfxr_saw_wave"); createButtonLocalGraphic(m_sinWaveBtn, KNOBS_BASE_X+WAVEFORM_BUTTON_WIDTH*2, WAVEFORM_BASE_Y, "Sine Wave", "sfxr_sin_wave"); createButtonLocalGraphic(m_noiseWaveBtn, KNOBS_BASE_X+WAVEFORM_BUTTON_WIDTH*3, WAVEFORM_BASE_Y, "Noise", "sfxr_white_noise_wave"); m_waveBtnGroup = new automatableButtonGroup( this ); m_waveBtnGroup->addButton(m_sqrWaveBtn); m_waveBtnGroup->addButton(m_sawWaveBtn); m_waveBtnGroup->addButton(m_sinWaveBtn); m_waveBtnGroup->addButton(m_noiseWaveBtn); createButtonLocalGraphic(m_pickupBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*0, GENERATOR_BASE_Y, "Generate pick up/coin sfx", "pickup"); createButtonLocalGraphic(m_laserBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*1, GENERATOR_BASE_Y, "Generate laser/shoot sfx", "laser"); createButtonLocalGraphic(m_explosionBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*2, GENERATOR_BASE_Y, "Generate explosion sfx", "explosion"); createButtonLocalGraphic(m_powerupBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*3, GENERATOR_BASE_Y, "Generate power up sfx", "powerup"); createButtonLocalGraphic(m_hitBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*4, GENERATOR_BASE_Y, "Generate hit/hurt sfx", "hit"); createButtonLocalGraphic(m_jumpBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*5, GENERATOR_BASE_Y, "Generate jump sfx", "jump"); createButtonLocalGraphic(m_blipBtn, GENERATOR_BASE_X+GENERATOR_BUTTON_WIDTH*6, GENERATOR_BASE_Y, "Generate blip/select sfx", "blip"); connect( m_pickupBtn, SIGNAL ( clicked() ), this, SLOT ( genPickup() ) ); connect( m_laserBtn, SIGNAL ( clicked() ), this, SLOT ( genLaser() ) ); connect( m_explosionBtn, SIGNAL ( clicked() ), this, SLOT ( genExplosion() ) ); connect( m_powerupBtn, SIGNAL ( clicked() ), this, SLOT ( genPowerup() ) ); connect( m_hitBtn, SIGNAL ( clicked() ), this, SLOT ( genHit() ) ); connect( m_jumpBtn, SIGNAL ( clicked() ), this, SLOT ( genJump() ) ); connect( m_blipBtn, SIGNAL ( clicked() ), this, SLOT ( genBlip() ) ); createButtonLocalGraphic(m_randomizeBtn, RAND_BUTTON_X, RAND_BUTTON_Y, "Generate random sfx", "randomize"); createButtonLocalGraphic(m_mutateBtn, MUTA_BUTTON_X, MUTA_BUTTON_Y, "Mutate sfx", "mutate"); connect( m_randomizeBtn, SIGNAL ( clicked() ), this, SLOT ( randomize() ) ); connect( m_mutateBtn, SIGNAL ( clicked() ), this, SLOT ( mutate() ) ); //preview sound on generator/random/mutate button clicked /* // disabled for now connect( m_pickupBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_laserBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_explosionBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_powerupBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_hitBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_jumpBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_blipBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_randomizeBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); connect( m_mutateBtn, SIGNAL ( clicked() ), this, SLOT ( previewSound() ) ); */ } void sfxrInstrumentView::modelChanged() { sfxrInstrument * s = castModel(); m_attKnob->setModel( &s->m_attModel ); m_holdKnob->setModel( &s->m_holdModel ); m_susKnob->setModel( &s->m_susModel ); m_decKnob->setModel( &s->m_decModel ); m_startFreqKnob->setModel( &s->m_startFreqModel ); m_minFreqKnob->setModel( &s->m_minFreqModel ); m_slideKnob->setModel( &s->m_slideModel ); m_dSlideKnob->setModel( &s->m_dSlideModel ); m_vibDepthKnob->setModel( &s->m_vibDepthModel ); m_vibSpeedKnob->setModel( &s->m_vibSpeedModel ); m_changeAmtKnob->setModel( &s->m_changeAmtModel ); m_changeSpeedKnob->setModel( &s->m_changeSpeedModel ); m_sqrDutyKnob->setModel( &s->m_sqrDutyModel ); m_sqrSweepKnob->setModel( &s->m_sqrSweepModel ); m_repeatSpeedKnob->setModel( &s->m_repeatSpeedModel ); m_phaserOffsetKnob->setModel( &s->m_phaserOffsetModel ); m_phaserSweepKnob->setModel( &s->m_phaserSweepModel ); m_lpFilCutKnob->setModel( &s->m_lpFilCutModel ); m_lpFilCutSweepKnob->setModel( &s->m_lpFilCutSweepModel ); m_lpFilResoKnob->setModel( &s->m_lpFilResoModel ); m_hpFilCutKnob->setModel( &s->m_hpFilCutModel ); m_hpFilCutSweepKnob->setModel( &s->m_hpFilCutSweepModel ); m_waveBtnGroup->setModel( &s->m_waveFormModel ); } void sfxrInstrumentView::genPickup() { sfxrInstrument * s = castModel(); s->resetModels(); s->m_startFreqModel.setValue( 0.4f+frnd(0.5f) ); s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( frnd(0.1f) ); s->m_decModel.setValue( 0.1f+frnd(0.4f) ); s->m_susModel.setValue( 0.3f+frnd(0.3f) ); if(rnd(1)) { s->m_changeSpeedModel.setValue( 0.5f+frnd(0.2f) ); s->m_changeAmtModel.setValue( 0.2f+frnd(0.4f) ); } } void sfxrInstrumentView::genLaser() { sfxrInstrument * s = castModel(); s->resetModels(); s->m_waveFormModel.setValue( rnd(2) ); if(s->m_waveFormModel.value()==2 && rnd(1)) s->m_waveFormModel.setValue( rnd(1) ); s->m_startFreqModel.setValue( 0.5f+frnd(0.5f) ); s->m_minFreqModel.setValue( s->m_startFreqModel.value()-0.2f-frnd(0.6f) ); if(s->m_minFreqModel.value()<0.2f) { s->m_minFreqModel.setValue(0.2f); } s->m_slideModel.setValue( -0.15f-frnd(0.2f) ); if(rnd(2)==0) { s->m_startFreqModel.setValue( 0.3f+frnd(0.6f) ); s->m_minFreqModel.setValue( frnd(0.1f) ); s->m_slideModel.setValue( -0.35f-frnd(0.3f) ); } if(rnd(1)) { s->m_sqrDutyModel.setValue( frnd(0.5f) ); s->m_sqrSweepModel.setValue( 0.2f ); } else { s->m_sqrDutyModel.setValue( 0.4f+frnd(0.5f) ); s->m_sqrSweepModel.setValue( -frnd(0.7f) ); } s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( 0.1f+frnd(0.2f) ); s->m_decModel.setValue( frnd(0.4f) ); if(rnd(1)) { s->m_susModel.setValue( frnd(0.3f) ); } if(rnd(2)==0) { s->m_phaserOffsetModel.setValue( frnd(0.2f) ); s->m_phaserSweepModel.setValue( -frnd(0.2f) ); } if(rnd(1)) s->m_hpFilCutModel.setValue( frnd(0.3f) ); } void sfxrInstrumentView::genExplosion() { sfxrInstrument * s = castModel(); s->resetModels(); s->m_waveFormModel.setValue( 3 ); if(rnd(1)) { s->m_startFreqModel.setValue( 0.1f+frnd(0.4f) ); s->m_slideModel.setValue( -0.1f+frnd(0.4f) ); } else { s->m_startFreqModel.setValue( 0.2f+frnd(0.7f) ); s->m_slideModel.setValue( -0.2f-frnd(0.2f) ); } s->m_startFreqModel.setValue( s->m_startFreqModel.value()*s->m_startFreqModel.value() ); if(rnd(4)==0) { s->m_slideModel.setValue( 0.0f ); } if(rnd(2)==0) { s->m_repeatSpeedModel.setValue( 0.3f+frnd(0.5f) ); } s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( 0.1f+frnd(0.3f) ); s->m_decModel.setValue( 0.5f ); if(rnd(1)==0) { s->m_phaserOffsetModel.setValue( -0.3f+frnd(0.9f) ); s->m_phaserSweepModel.setValue( -frnd(0.3f) ); } s->m_susModel.setValue( 0.2f+frnd(0.6f) ); if(rnd(1)) { s->m_vibDepthModel.setValue( frnd(0.7f) ); s->m_vibSpeedModel.setValue( frnd(0.6f) ); } if(rnd(2)==0) { s->m_changeSpeedModel.setValue( 0.6f+frnd(0.3f) ); s->m_changeAmtModel.setValue( 0.8f-frnd(1.6f) ); } } void sfxrInstrumentView::genPowerup() { sfxrInstrument * s = castModel(); s->resetModels(); if(rnd(1)) s->m_waveFormModel.setValue( 1 ); else s->m_sqrDutyModel.setValue( frnd(0.6f) ); if(rnd(1)) { s->m_startFreqModel.setValue( 0.2f+frnd(0.3f) ); s->m_slideModel.setValue( 0.1f+frnd(0.4f) ); s->m_repeatSpeedModel.setValue( 0.4f+frnd(0.4f) ); } else { s->m_startFreqModel.setValue( 0.2f+frnd(0.3f) ); s->m_slideModel.setValue( 0.05f+frnd(0.2f) ); if(rnd(1)) { s->m_vibDepthModel.setValue( frnd(0.7f) ); s->m_vibSpeedModel.setValue( frnd(0.6f) ); } } s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( frnd(0.4f) ); s->m_decModel.setValue( 0.1f+frnd(0.4f) ); } void sfxrInstrumentView::genHit() { sfxrInstrument * s = castModel(); s->resetModels(); s->m_waveFormModel.setValue( rnd(2) ); if(s->m_waveFormModel.value()==2) { s->m_waveFormModel.setValue( 3 ); } if(s->m_waveFormModel.value()==0) { s->m_sqrDutyModel.setValue( frnd(0.6f) ); } s->m_startFreqModel.setValue( 0.2f+frnd(0.6f) ); s->m_slideModel.setValue( -0.3f-frnd(0.4f) ); s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( frnd(0.1f) ); s->m_decModel.setValue( 0.1f+frnd(0.2f) ); if(rnd(1)) { s->m_hpFilCutModel.setValue( frnd(0.3f) ); } } void sfxrInstrumentView::genJump() { sfxrInstrument * s = castModel(); s->resetModels(); s->m_waveFormModel.setValue( 0 ); s->m_sqrDutyModel.setValue( frnd(0.6f) ); s->m_startFreqModel.setValue( 0.3f+frnd(0.3f) ); s->m_slideModel.setValue( 0.1f+frnd(0.2f) ); s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( 0.1f+frnd(0.3f) ); s->m_decModel.setValue( 0.1f+frnd(0.2f) ); if(rnd(1)) { s->m_hpFilCutModel.setValue( frnd(0.3f) ); } if(rnd(1)) { s->m_lpFilCutModel.setValue( 1.0f-frnd(0.6f) ); } } void sfxrInstrumentView::genBlip() { sfxrInstrument * s = castModel(); s->resetModels(); s->m_waveFormModel.setValue( rnd(1) ); if( s->m_waveFormModel.value()==0 ) { s->m_sqrDutyModel.setValue( frnd(0.6f) ); } s->m_startFreqModel.setValue( 0.2f+frnd(0.4f) ); s->m_attModel.setValue( 0.0f ); s->m_holdModel.setValue( 0.1f+frnd(0.1f) ); s->m_decModel.setValue( frnd(0.2f) ); s->m_hpFilCutModel.setValue( 0.1f ); } void sfxrInstrumentView::randomize() { sfxrInstrument * s = castModel(); s->m_startFreqModel.setValue( pow(frnd(2.0f)-1.0f, 2.0f) ); if(rnd(1)) { s->m_startFreqModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f)+0.5f ); } s->m_minFreqModel.setValue( 0.0f ); s->m_slideModel.setValue( pow(frnd(2.0f)-1.0f, 5.0f) ); if( s->m_startFreqModel.value()>0.7f && s->m_slideModel.value()>0.2f ) { s->m_slideModel.setValue( -s->m_slideModel.value() ); } if( s->m_startFreqModel.value()<0.2f && s->m_slideModel.value()<-0.05f ) { s->m_slideModel.setValue( -s->m_slideModel.value() ); } s->m_dSlideModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); s->m_sqrDutyModel.setValue( frnd(2.0f)-1.0f ); s->m_sqrSweepModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); s->m_vibDepthModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); s->m_vibSpeedModel.setValue( frnd(2.0f)-1.0f ); //s->m_vibDelayModel.setValue( frnd(2.0f)-1.0f ); s->m_attModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); s->m_holdModel.setValue( pow(frnd(2.0f)-1.0f, 2.0f) ); s->m_decModel.setValue( frnd(2.0f)-1.0f ); s->m_susModel.setValue( pow(frnd(0.8f), 2.0f) ); if(s->m_attModel.value()+s->m_holdModel.value()+s->m_decModel.value()<0.2f) { s->m_holdModel.setValue( s->m_holdModel.value()+0.2f+frnd(0.3f) ); s->m_decModel.setValue( s->m_decModel.value()+0.2f+frnd(0.3f) ); } s->m_lpFilResoModel.setValue( frnd(2.0f)-1.0f ); s->m_lpFilCutModel.setValue( 1.0f-pow(frnd(1.0f), 3.0f) ); s->m_lpFilCutSweepModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); if(s->m_lpFilCutModel.value()<0.1f && s->m_lpFilCutSweepModel.value()<-0.05f) { s->m_lpFilCutSweepModel.setValue( -s->m_lpFilCutSweepModel.value() ); } s->m_hpFilCutModel.setValue( pow(frnd(1.0f), 5.0f) ); s->m_hpFilCutSweepModel.setValue( pow(frnd(2.0f)-1.0f, 5.0f) ); s->m_phaserOffsetModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); s->m_phaserSweepModel.setValue( pow(frnd(2.0f)-1.0f, 3.0f) ); s->m_repeatSpeedModel.setValue( frnd(2.0f)-1.0f ); s->m_changeSpeedModel.setValue( frnd(2.0f)-1.0f ); s->m_changeAmtModel.setValue( frnd(2.0f)-1.0f ); } void sfxrInstrumentView::mutate() { sfxrInstrument * s = castModel(); if(rnd(1)) s->m_startFreqModel.setValue( s->m_startFreqModel.value()+frnd(0.1f)-0.05f ); // if(rnd(1)) s->m_minFreqModel.setValue( s->m_minFreqModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_slideModel.setValue( s->m_slideModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_dSlideModel.setValue( s->m_dSlideModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_sqrDutyModel.setValue( s->m_sqrDutyModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_sqrSweepModel.setValue( s->m_sqrSweepModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_vibDepthModel.setValue( s->m_vibDepthModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_vibSpeedModel.setValue( s->m_vibSpeedModel.value()+frnd(0.1f)-0.05f ); // if(rnd(1)) s->m_vibDelayModel.setValue( s->m_vibDelayModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_attModel.setValue( s->m_attModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_holdModel.setValue( s->m_holdModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_decModel.setValue( s->m_decModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_susModel.setValue( s->m_susModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_lpFilResoModel.setValue( s->m_lpFilResoModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_lpFilCutModel.setValue( s->m_lpFilCutModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_lpFilCutSweepModel.setValue( s->m_lpFilCutSweepModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_hpFilCutModel.setValue( s->m_hpFilCutModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_hpFilCutSweepModel.setValue( s->m_hpFilCutSweepModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_phaserOffsetModel.setValue( s->m_phaserOffsetModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_phaserSweepModel.setValue( s->m_phaserSweepModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_repeatSpeedModel.setValue( s->m_repeatSpeedModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_changeSpeedModel.setValue( s->m_changeSpeedModel.value()+frnd(0.1f)-0.05f ); if(rnd(1)) s->m_changeAmtModel.setValue( s->m_changeAmtModel.value()+frnd(0.1f)-0.05f ); } void sfxrInstrumentView::previewSound() { sfxrInstrument* s = castModel(); InstrumentTrack* it = s->instrumentTrack(); it->silenceAllNotes(); it->processInEvent( MidiEvent( MidiNoteOn, 0, it->baseNoteModel()->value(), MidiDefaultVelocity ) ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model*, void* data ) { return new sfxrInstrument( static_cast( data ) ); } } #include "moc_sfxr.cxx" lmms-1.1.3/plugins/sfxr/sfxr.h000066400000000000000000000162031247673406200162770ustar00rootroot00000000000000/* * sfxr.h - declaration of classes of the LMMS sfxr plugin * Originally written by Tomas Pettersson. For the original license, * please read readme.txt in this directory * * Copyright (c) 2014 Wong Cho Ching * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef SFXR_H #define SFXR_H #include "Instrument.h" #include "InstrumentView.h" #include "knob.h" #include "graph.h" #include "pixmap_button.h" #include "led_checkbox.h" enum SfxrWaves { SQR_WAVE, SAW_WAVE, SINE_WAVE, NOISE_WAVE, WAVES_NUM }; const int WAVEFORM_BASE_X = 20; const int WAVEFORM_BASE_Y = 15; const int WAVEFORM_BUTTON_WIDTH = 16; const int GENERATOR_BASE_X = 110; const int GENERATOR_BASE_Y = 25; const int GENERATOR_BUTTON_WIDTH = 16; const int RAND_BUTTON_X = 160; const int RAND_BUTTON_Y = 4; const int MUTA_BUTTON_X = 205; const int MUTA_BUTTON_Y = 4; const int KNOBS_BASE_X = 20; const int KNOBS_BASE_Y = 50; const int KNOB_BLOCK_SIZE_X = 40; const int KNOB_BLOCK_SIZE_Y = 40; class sfxrInstrument; class SfxrSynth { public: SfxrSynth( const sfxrInstrument * s ); virtual ~SfxrSynth(); void resetSample( bool restart ); void update( sampleFrame * buffer, const int32_t frameNum ); bool isPlaying() const; private: const sfxrInstrument * s; bool playing_sample; int phase; double fperiod; double fmaxperiod; double fslide; double fdslide; int period; float square_duty; float square_slide; int env_stage; int env_time; int env_length[3]; float env_vol; float fphase; float fdphase; int iphase; float phaser_buffer[1024]; int ipp; float noise_buffer[32]; float fltp; float fltdp; float fltw; float fltw_d; float fltdmp; float fltphp; float flthp; float flthp_d; float vib_phase; float vib_speed; float vib_amp; int rep_time; int rep_limit; int arp_time; int arp_limit; double arp_mod; } ; /** * @brief A class that simplify the constructor of FloatModel, with value [0,1] */ class SfxrZeroToOneFloatModel : public FloatModel { public: SfxrZeroToOneFloatModel( float val, Model * parent, const QString& displayName ): FloatModel( val, 0.0, 1.0, 0.001, parent, displayName ) { } /* purpose: prevent the initial value of the model from being changed */ virtual void loadSettings( const QDomElement& element, const QString& name = QString( "value" ) ) { float oldInitValue = initValue(); FloatModel::loadSettings(element, name); float oldValue = value(); setInitValue(oldInitValue); setValue(oldValue); } }; /** * @brief A class that simplify the constructor of FloatModel, with value [-1,1] */ class SfxrNegPosOneFloatModel : public FloatModel { public: SfxrNegPosOneFloatModel(float val, Model * parent, const QString& displayName ): FloatModel( val, -1.0, 1.0, 0.001, parent, displayName ) { } /* purpose: prevent the initial value of the model from being changed */ virtual void loadSettings( const QDomElement& element, const QString& name = QString( "value" ) ) { float oldInitValue = initValue(); FloatModel::loadSettings(element, name); float oldValue = value(); setInitValue(oldInitValue); setValue(oldValue); } }; class sfxrInstrument : public Instrument { Q_OBJECT public: sfxrInstrument(InstrumentTrack * _instrument_track ); virtual ~sfxrInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual PluginView * instantiateView( QWidget * _parent ); void resetModels(); private: SfxrZeroToOneFloatModel m_attModel; SfxrZeroToOneFloatModel m_holdModel; SfxrZeroToOneFloatModel m_susModel; SfxrZeroToOneFloatModel m_decModel; SfxrZeroToOneFloatModel m_startFreqModel; SfxrZeroToOneFloatModel m_minFreqModel; SfxrNegPosOneFloatModel m_slideModel; SfxrNegPosOneFloatModel m_dSlideModel; SfxrZeroToOneFloatModel m_vibDepthModel; SfxrZeroToOneFloatModel m_vibSpeedModel; SfxrNegPosOneFloatModel m_changeAmtModel; SfxrZeroToOneFloatModel m_changeSpeedModel; SfxrZeroToOneFloatModel m_sqrDutyModel; SfxrNegPosOneFloatModel m_sqrSweepModel; SfxrZeroToOneFloatModel m_repeatSpeedModel; SfxrNegPosOneFloatModel m_phaserOffsetModel; SfxrNegPosOneFloatModel m_phaserSweepModel; SfxrZeroToOneFloatModel m_lpFilCutModel; SfxrNegPosOneFloatModel m_lpFilCutSweepModel; SfxrZeroToOneFloatModel m_lpFilResoModel; SfxrZeroToOneFloatModel m_hpFilCutModel; SfxrNegPosOneFloatModel m_hpFilCutSweepModel; IntModel m_waveFormModel; friend class sfxrInstrumentView; friend class SfxrSynth; }; class sfxrInstrumentView : public InstrumentView { Q_OBJECT public: sfxrInstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~sfxrInstrumentView() {}; protected slots: void genPickup(); void genLaser(); void genExplosion(); void genPowerup(); void genHit(); void genJump(); void genBlip(); void randomize(); void mutate(); void previewSound(); private: virtual void modelChanged(); knob * m_attKnob; //Attack Time knob * m_holdKnob; //Sustain Time knob * m_susKnob; //Sustain Punch knob * m_decKnob; //Decay Time knob * m_startFreqKnob; //Start Frequency knob * m_minFreqKnob; //Min Frequency knob * m_slideKnob; //Slide knob * m_dSlideKnob; //Delta Slide knob * m_vibDepthKnob; //Vibrato Depth knob * m_vibSpeedKnob; //Vibrato Speed knob * m_changeAmtKnob; //Change Amount knob * m_changeSpeedKnob; //Change Speed knob * m_sqrDutyKnob; //Squre Duty knob * m_sqrSweepKnob; //Squre Sweep knob * m_repeatSpeedKnob; //Repeat Speed knob * m_phaserOffsetKnob; //Phaser Offset knob * m_phaserSweepKnob; //Phaser Sweep knob * m_lpFilCutKnob; //LP Filter Cutoff knob * m_lpFilCutSweepKnob; //LP Filter Cutoff Sweep knob * m_lpFilResoKnob; //LP Filter Resonance knob * m_hpFilCutKnob; //HP Filter Cutoff knob * m_hpFilCutSweepKnob; //HP Filter Cutoff Sweep automatableButtonGroup * m_waveBtnGroup; pixmapButton * m_sqrWaveBtn; //NOTE: This button has Squre Duty //and Squre Speed configurable pixmapButton * m_sawWaveBtn; pixmapButton * m_sinWaveBtn; pixmapButton * m_noiseWaveBtn; pixmapButton * m_pickupBtn; pixmapButton * m_laserBtn; pixmapButton * m_explosionBtn; pixmapButton * m_powerupBtn; pixmapButton * m_hitBtn; pixmapButton * m_jumpBtn; pixmapButton * m_blipBtn; pixmapButton * m_randomizeBtn; pixmapButton * m_mutateBtn; static QPixmap * s_artwork; }; #endif lmms-1.1.3/plugins/sfxr/sfxr_saw_wave_active.png000066400000000000000000000006331247673406200220630ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIMEwtEXtCommentCreated with GIMPWIDAT(ϝλJ$A/3=j0&+c/әL&j> Hol"x2h@おx U<)GQ1`ǏfYmJee.Vz$$M'CEUC l =A&tiTNRt8f<4ʺ;X ke۶_\߼DUߣ;[ǽPWr'Â9quUrg4k`AIENDB`lmms-1.1.3/plugins/sfxr/sfxr_saw_wave_inactive.png000066400000000000000000000005561247673406200224160ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME2}tEXtCommentCreated with GIMPWIDAT(ϝұ0?Kl>/o`i^bYAlf8.rI ̘y躎a12IUӛ4 eYRfws8eYm[Dyӝ !_[VTi]Wi @eYm@#VD.q "ܮy>n}ceǗWcgfƘ4'i @rMIENDB`lmms-1.1.3/plugins/sfxr/sfxr_sin_wave_active.png000066400000000000000000000010431247673406200220560ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME#LtEXtCommentCreated with GIMPWIDAT(}OKQ}u2ZMDBM5-EF-vSNFqf-﹜ NJ=uTJ="klCi/Wy<ŃW5!cB9 p5.2w߲cͳYUmJX U9/ )OS 7P%J+|ejL0d`>SmRͺBm ,$̜89NE?[)+CC.hN%]'ovx3{ ro'K4;;)s|eec<[h1|#1Gİ` * VwHAHp|ׂNd_7!3NIENDB`lmms-1.1.3/plugins/sfxr/sfxr_sin_wave_inactive.png000066400000000000000000000010251247673406200224050ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME:~(Hd7L ANq =B,UMϻuf^ gǿ!a^bYâWc^L|*Zû izØ}3"[XU7Wlt~@kIENDB`lmms-1.1.3/plugins/sfxr/sfxr_white_noise_wave_inactive.png000066400000000000000000000006561247673406200241420ustar00rootroot00000000000000PNG  IHDRH-bKGD" pHYs  tIME쇵tEXtCommentCreated with GIMPWIDAT(ϕ0 ?@XXcqB=&b X T@O~ KVs)X,QU!"t53Bl6̛3l603usE!锶mcfxiŐy3C' rcZ 2m[bn8H)p]uz}O?a12m#>t:ZUi3c76Mry"Ȩ|>=yO9JH"Qj.IENDB`lmms-1.1.3/plugins/sid/000077500000000000000000000000001247673406200147375ustar00rootroot00000000000000lmms-1.1.3/plugins/sid/3off.png000066400000000000000000000022311247673406200163000ustar00rootroot00000000000000PNG  IHDR( MbKGD" pHYs B(xtIME>]p&IDAT8u]lTUsv% -T@5|H`I0Ġ_;y[w%0 ţ D 5kj艹  sK&vjoNϬ`C8rUg+qx܋ǽWG.IG֝8.tOo_ƌPRZVÄ2sT.ofYfZ[ܺy{vWbDhjQDa">k#Pedoar'kh<3˖`ԩtwSl MΫJ0xHe[6zL,4Pew\ c^Dd^/yh-Mdegsz'~&*ʷn g1|rgpn7>*~f7}>`doI8 (b=`APG2m:[(y]bkWB,͙;u6q[79o7~P[SM4mQ%KSA x2eN{6>Pi#3g利x._0wK U{](WFNUݻq-.|PnOZO$z1ڼ^^.r\$S//%Bo^bqf9yD*}|1/gvW^Z kib K9zx4sΧɜ?Ev\aǶ-Z/4  \\6PR"t`PXZTEWc uGu5O=Mݑvl+2}EOR^VkW8_9~!2q~gr0} 67QZ}:Ga~N/1㉙>?T-5U16nޠ|;? %H޻G`о>ƌy'ICbMᵃ:KJZRFH!.,u#"Ռh+VG Cgz:G@IiVw`һ9mҦQG6os쑥IENDB`lmms-1.1.3/plugins/sid/6581.png000066400000000000000000000027251247673406200160560ustar00rootroot00000000000000PNG  IHDR% =tsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitle6581 buttonjtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/SIDAT8mhU?ytfIsM3mbi5B@I!Z!A%ibFTj$JX!R`$Qjͦtݻ=?ns|1kv#TB0Zc)(K8JTWk"1i@1TϚ:m8(AIfӃMXD01cJןiǐJBM eSimn&#"2ra`N"@v 3C;0 P\Rʦm;]' @WID"\BW.W/l1L+YCx /r^^'#1X J8v0OLN!59O?rQy[6a(,:~Eۡ#eNg'@s-;yn)Cr~z{mb <9w>p -Ͷ1c`-H.J%P ֆnaM p\\ۦ+ڋ1V6K^\NnpsNkdɢ<=o֬+L^ɯ^x{~oq.:6 gbz%F#ԝ5w;5w@σa]V?ntlcӼim枲dg34ۏ1: 1e zQp'46\$ӟEYT~оhPw%/pB|x&B7oĎ$sc(QXV:TĻuceP 16Lz I(zY^6D0"ܩI-2XS| ~ K/IENDB`lmms-1.1.3/plugins/sid/6581red.png000066400000000000000000000027341247673406200165510ustar00rootroot00000000000000PNG  IHDR% =tsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitle6581 buttonjtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/ZIDAT8m}hU?\ﶻWۜsitM,Ԙ"PRabVHPjI.L%LP2Qbڜ757vse[9}1'jjET)rrr0uێ$=DP IQ"˜BKJ\(J22XRr VuK lgIR͝ϊUk Cx;H*ѠbҸPW@Z9skͼd9i>uٷ{{ͬ*|> UdWYqz~2АDCe.R3~RrPm-D6㊊RMsp]]SPRJ__`[+p`{c=0z\9LL DOzz7 qhn:_gvNiml#45۷oQ1s￳ºtq쨂YGgq"6ŀ t@*gբB1%cZ114W{`tX ckIENDB`lmms-1.1.3/plugins/sid/8580.png000066400000000000000000000030401247673406200160460ustar00rootroot00000000000000PNG  IHDR( MsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitle8580 button\4tEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT8uilTUtЕ%"1eC5,Ȏ5&Ɛ&R*)`]Pv QRAh,o:3a)s޹s9/ si4R 4a(A !`m/`b4tjhֹZ*@#R [;1rLIp:̂F fZ3pS9\؃!EN^>I.ϼ%|R55yVFBٸ|l=p0]J2\`q86)SX:~[Bd哐Ğ*+/?1b(ɛ5P0ġño8[wy})S]X7ä@F7  58J{r2HMŐ0iGJAsSY9L:p8q]8kWNƌvڂ¹zN' 1yZ3sh8+M 瘞͸/iȒDp6a79ncXa׮ش4VDC:\*^F==< KsZj>?&>ΆmݔyxuDѣ: Czvm҈G6)gpn%RzftcKk pob JM$"&JYj"Z GR4_9QdIENDB`lmms-1.1.3/plugins/sid/8580red.png000066400000000000000000000030721247673406200165460ustar00rootroot00000000000000PNG  IHDR( MsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitle8580 button\4tEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT8}ilTUr#h*ĔH)RJZBCC5,Ȏ5&Ɛ&,VbR#*T"lBBЙ2=3ܶ9}~[^)6Z hmR6 ta#c J$zg81d[S߰cK&V+rNX1:"J)WR 'X\J)1ܛ c͵JLM= HԆN:oKLR8,g}>ozY!CL}o2srYj5))+؉RR5AGx׽ˍ&T\D˰w(m뤴-@vs+߸h@Z2}&kW.b6,X :J)Zۯ{֬xg")%i3>b$/=`0eZG^UL(TIm$Pʔvv[X֚@g;~qLT)}7xbbhmrt]‰5<e&b;d0(#lR0"$vQ|:mmTfӖ]4r)3k\UTR\R]:ȦmUKNne3e mOmˬxa-5\8׀6NcHpFʣ/=ΈQ|1?cHk=VX xZpU7(csL8R%mi5p J㺁hH׸]wt5 螓n>ܬ 15\AR '6=$jaʺ6D5Zs +6:IENDB`lmms-1.1.3/plugins/sid/CMakeLists.txt000066400000000000000000000006671247673406200175100ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(sid sid_instrument.cpp sid_instrument.h envelope.h extfilt.h filter.h pot.h siddefs.h sid.h spline.h voice.h wave.h envelope.cc extfilt.cc filter.cc pot.cc sid.cc version.cc voice.cc wave6581_PS_.cc wave6581_PST.cc wave6581_P_T.cc wave6581__ST.cc wave8580_PS_.cc wave8580_PST.cc wave8580_P_T.cc wave8580__ST.cc wave.cc MOCFILES sid_instrument.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/sid/artwork.png000066400000000000000000002473111247673406200171460ustar00rootroot00000000000000PNG  IHDRZ=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleSID EmulatoretEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/ IDATxweypι49"'$M2UeYfVUr]v]%Ut-Ki6EI4% !"l¦4i'|}{ߛVbS3^>N_cT_]U]F# 4\Ji$5s.DRR%$ߍJ)h5- )`yȲ `6s y#BX7 m,eY"us,H y>!sQkC:dh-ຆRR0nY`wֵ1$ s(Y:e#20FR}?Ras0`}7mgmLp}E$MYQ4 .89kD0~?f cD0Vh.TZJ0J30jy;PO&Pm;Tkm ^*qp0J-GkzT%8s:eAB¸Thd2VK`uɄ;&=Z UQ"s9 y.5@HՂΠ7.l Q=4!8`Ri3bqŎEuü@#KaLu V`@I#vu-``PJT%gp(9;p07uPBVX1FU1&=SJuJ)%RqC>JC Q*`>amʵ4Hâ(J(҄p1 ɫCZÚ~D[},cl8wݲp +1l}D0bF}Ze z:Pp/h C6}X<.yh!СTZtȗbwĘH`'DXcQtdi:B"  %F L [d,=dp8`WC sAc3$8(J?|n!NJTH),KC_D rhoTЭ;>BHyF# }e%PZCZ m,}*vdzT~_{iiot&@<\wA(cuկ{MR RG{R@j[7­Bp^S2Mkk-}" +lň0ƈ]ʝ+H)\ !8 sb uj9jw x|b0l7+ hxcz*2 ޵{h}?ڻ7F[CsûwgBqح~:qJ&lfG9ä'pR}^(ll@..ґ#j50hm hhD1WDVmB!IGUvhMNAG<6s$*k RNKժ$.],nm&4:JDknu$Zk 08z!&ѺHH=c64~Xk|}UOk TÜ<keEBhڜd!Pc sgˋx)tZ-@KCE,uR_7p "U k1 P( IXj+""Witb*.0c YU1pي׎6hR!M#y4ZA[Xkar٠O@s!2Z;n:& KŰ oFV:0r\FWx8!Wؠ i&IuD?/ 00k HDC4-4G U k=|AQ*AqK0!WVqILOu0^F`M~1:;tM' q9v;?=lvw6cm=L$Ƀ*y }r|vwvz\s4 V1a֘`c* "M߈RڻzD0ry* 0ΐEqy^_k 9_$  (Fx&2̩2񚄠pddKY*(lddY1X%w39Pi 8cu*Sikɸ##F4Y:IJmXCuy c4vZoYe $E^ 0D@kPՍ!(3Y1K]l-jS`U]ES]n:nk{<xAw $z)@k"mtS"[{PWm\ma.Kv@lBLF @ɟ![ !Ew{W^xhOw{Yg @Ͽ Q] e|0ybYZFm!{d a+o*FP X%2Uܾew''77~>?e /:28  iZH{ޒԾm {_!0;3%,"6:1%؏# N ʑ#x#8G1,'rR@aݟM~>{y>ηI{+p0zpjs0gv}.n{p7@?lw/c4RHEՄ*J\xK"(6!WrX<)Mv gN\:.]FV+vָv_w!e~oE[@F#>݁߱pQKsw=s,#'|OC;.fQjS)䑕%:y SSDd`~dR)|`Vsᇞ=ٽ,~CǦ9-,bfn[vO"9 +8D%IS/,ajz;ۛ{bXwXQAw7jmC{ػo;V`s^%jWxc8s8ta9K.yQBrΝG y^9'7`wfuOԳ(I蓁sH(6,p,H tE^ȇp}1053ťe{͍u =0 K+h45|8qօec8`8c8p7`?|w;<8 )E7oBku %MSk7qIew#L.,bzS ] ^x׵Z.M~p~H߇er7y9VX^9tffGet: ,[ܾ} . vwZ1>!$*_xBpӟiH7r9Dp!%V{kx'ާ<)~|Qych4x‹We#I3\&]A8yZ&F^G_[f0}q7Y&Ɖ"O]vs= r΢bkk vRJ C Ek-ҬX/~ip;A5P%: Ub0l`8 M3c"HI{>EY9&r]<7k¿V?5{GJi4 h1 0G{6i Kx6QZLgG>^Y`WE"%Rac{ O?]HK @(~}MoL~pwM+yy_,--Bp+w`L%a0Z'Էp;0Ơ( YEQP`7n`ii f0YPSRJbjj '7Α$Ep ! DR7Vhc AkT0n@D,H1l6 R e`+喇gރ36ʲ$7*,sz}691Zet#:=6%M$^dy7A-k1w@[-Zk;\z>_y/+2_BB{TH;wpY\rQR,åK9ߦ\p0Pԝ4K eN9}t04Mtgph5hZPJY6y^EA@\|G5Q%.]ť%- ͚ zבjcq!k4B_`,0̇u*\Ha"ܣy0,rloKSα,05EAl2I037,/czv~{{\~z=0M63Dn@XQ{[ zGޅ% 9^~9?q K+G1]*\vW/Qc+R$vy[yqE 3O֍twc?#G`m}} [-Xݿb9m+?E"&V%<]^w; ymLMM! 1xDZ+W`{{vFF@`[ׯlݏ?y̒G%񭞦 >G>,--C)Xkl6\%6sOcY;ߍycz6<=^Eu7G DB.*~~[k֭8gϢnOGx Ҥ}3h6|^8w666Q6~{C5$ 01;;vM|c?;A&8v$ǜz{N=lllHw~G{jY@p1wGőphD{HyWBJͭ;wK/(rn x+*=R SS$%7hy]r~Xx]߹s栔 wqq${{(e*|o^*3S!:#`$̿m?h4jS.vRg]CXkF4tO(!nܸdYU\r vGCC=4v[[[Ȳ G. = S>OhbfveYb}}RJ@& ;|'P-ɓ'qel$ IcShNT>z>8oC+_N\G>ǠFZ]4m`~~I= />(055(t<Ξ=-pß<=xV q|k_qqLMMaaqW.]D )w2^z '~[[[vAr-4X\9;B c,DLMETף?p$ڝ9(rPH\qޮ7loόb3h4FqŋH~8~Vo]]֢$#ϰ`$Aƍ2iVpHmV篭?9Iy8竁=uA\|8y$~7 ^ziJ!ONs8{a3`ǟgy&>̙3x饗׿ /=-|?c'N,K-ÍkoB < n5qteq 9$gCW.*I&[J~t<iRcꗾu> ;΢7"wxW0;;SN9%ܼv5Y/--H;:]O湷ƣ> -H RJdYA,7~MsssX\\*666#1|泟GO)pαk׮h( I~ë994M_YMXQ$I,pͫǿ+h40o]?vuLMM4 z(X^^qr5i kM`4?u mA)Ξ;sc8c(eQ֍h5MG4X_ ˲X7V"rbjckk s?Riݭ \z~K.S IDATŹ ۷oc-Z[-/87ױm㥗^D$[NKxwbyy׮]yHzV_Ξ{E,-YY}6z8h6h1:K+AjCTH*AGh6#KSM)#8cG&.]| i"nSf͡cgg7}j6!/aEi8*0 ŅY ūKܖ9 RHh,8.J)=,ʏbkkO?szv|%v!St~s1Jq R©bkk yȱ8} .~,IS\JGyOI*jZAy`0_K!64 _÷m!p-ܼy PcQ.K \r ?&6@x# O~׮^wFl5]Jn,jpeϣj:}߆T9Ν.\oׯ_ fff cww],,,`~qnN<FqU>IxnW^`C%(ıʲyz}vO$?N:^.66hdffgqm;S[u:,,fpcii ׯ_֖0İ{<÷F2]bSĩǐ'ezqI W;wn;IfffaETƍxW*s-@t:AfXZ^?Ucaa Ft@qyE|3'Ng_p81333X_aN鱾/?YZF7.\ELOo|5X?6M!/#_Z1[h`\Zv@O?[ׯ kx㏾eZEӌfy}5@`!xCqơsb/}x=YXđ#0;;Mb~~N'Ztx%e ګbfvG (l)4M`ssffy͛ht@Spu =\tO~[]k=O|8ǭ[jH$%g }_P `8az}|k_u]׮]CXYYACJ!S1~/?S?Y 5|3é3g]k,|ܼy wF^'07e,..x033;ns ~?da~ ,quaff{{{x; A^xB&8y>s|2c֭EWUhvchN>[-J?ylnc+]ٟNEH]ǘ8qfglkWG{X E4U6y^?"smS@>"'fFߕ~^2&n GQ(uw=eiVF9SZKp? / hMPB!I`0bp;5N;BBZ+9=c.TB0`0Dфs$7 봑;= R ZM4,?V\oZTYiNXJk 9z}2On6)cvhhPZ0 1shc Y fPeh62HI`^%tȲ4 S}omYx38wvvp !޼~ϞBݢcKJ$|p*vzh5ĵ߭ﳱL\wFNDJF ]`1ZNCHgFvII$NE&:.R5Ѩ# ΈǓr~.f2E 9X9>d$`I`F ice)r'd;"v͹i2I,)I՛&N$ 2IyJTL($)!=DQc,.E  E]14i@jS~;~/<*EQ`fΞDJܾX`qa.V;"ü$=:Rpp[X4 ӾJUl]By??NjmW q~UȒ}qF#.Ǐ(_7AJHwxr=}ϟyh6Y6C N:驃Ν#a.};p)|ư3O{yFn打ÞK~86pV~!k6(p[9l{qϭ&8V<96'tnjk6S!KSpα03gON?2Ҷ6T35Əqnܼm([y>)h/+6^-wo=|;Cw[|cf"s8~(V0scua~z&;g#gT*zO 8y8N:{R i`X˗fQOxJ5ʩpcE8&X¾@xƥ@R֒i "j0fnі3!2'Vy O1xoBZn,΋i ?J2XKXXHd¥A°4#[H$6e^Td^P.y3OTBOV| !홥d J)JS*xhwУjƎ#>OY\K\f>ݷu4ϥR ?''ߵt8 JyKUTߧJߘG1yMZAhA IapRʱ\_i^c!nC| utBx=>wv:Nmmpd S쨍Rـ=_^eH?a5E>,`ȣˋxiLM}{(98\CWWeV䓂5:o:K|6}d@<5`ȇ',l$zQR b乵O"eoGmJeHkȡi[5ʷ몱C}~vXr:$RÂRSGTUI-Xz!Gw E m }^+roFXgkdw!T_Ơ vژkQ P% Ai xu‡ {ncݓ8z|{`-J6(eO^w:xSNv'ߨȻ'|P6`YJH)Ƞ)tXZG`%󇙁2-1o_ '8lg>JH{@ <-FPD&cG%h@Uoc"tsQב<,,šc Pj #a'yꅃpB*lx;F"IiCFT8g`ryy gΞ3?ǞBhz_ kHWܕ>{2cJie'UN_=tѸUosX9كI[~96}w !bgg-Ld\Ҍ$ũp~Z+@RJiUINGHcWKCH2I) y 8/j֙>Ɔ0O<.3ŏ+tǓ klxϛzxNˇ\* *CnQ 0 ye â{XYKD'5{#kk*q0/2rxD< EN}k)hIj4`8 &ʞWN5kt@s:ҙyf+U[Y<'pKIF|"+ɿ1? 2ѩmn]~tyebǺ8&u^YNZ;³cT.v!thy^S%7gt!y`X%4-SCkm8/g>SZ;;*_دhs0z7^Dd=JPM$}\#ȇXzlj#v!\13X"FЄGxZcB;B,j^! ղ,ʲt?ϹhL_y ."!8-ja7w֒:UgcGY0V@D&}R: abHKce,#~5^;5F'Q>‡@'m-pBn.E(9:gHI^|#-{(b iO7]>= S$,J^aaRT.\kGqZ.#*C=c}k-xF0aQjT&ҴFk#AȨ!hj$(.'.~um!YFLK˨DYmZڥ1 C,ɂ(bEyiܾIz3ޣ؄o01@Mz6>B9ismߦr 7Cێq9Fyz=~AyQ;8w;k[ՏtS=:x}&KQu!痎b1&equNbc[FPSr/Zc@Y\-Vzڍ{^XWzl,o,3蝨xekm RZV!=h)"N*5SGI8ws6Rd 2]ݜEQĹ7&9[g_֯J uD7Vę7S=lGA^%uL/qG:J\F4fAnQQ1zQJHwETFNn@DZsN2_PEP;@*?)uѕ%6t*aR֐:*ea5Uf慷6rDAo~_# {zd6 ٕE圁 R' "!As]I?(礀{q;ea뼊D2hF ]xY ^Bfn0 ,ܰsɷN6$B'9pFyIGT=,IS/-7.|ްH#Kp.)PqH$2H=u]9X[UcJ^!f1p/ב%vN .UMϘtZsof r_d\ ߓLHBnR w ԞA.Ntzx y+SYH(VQQs pdD.-yxpu^}@}l/ߍ_?dC|++_‡}O'5>1jaaG!w,Q&>8IfuVNȚ&;Ӭ~Y9Vb{{tx@&3_7!ƞÛs:9c}W}Qj<8:Tfa^꼔HcLIʜǾQ*f#b-YY*6ᐼ:)n+ ]늗ʋnuxnkk 2 [}d-6&R[H Ai}XwO@ܱxU"T\lUr5EMe1kMG͕R7V 'ؓ:SՊ ⌨Bza]a$M" *m)lug$KN !*uni/HD<7n~:{{]|oU n޿xRZG+2uEY=&,#@4MeܺѨ ҧQznmU!xW)# XLl\#fWj/|1*hX]@,#%x:Cܼ"(('2fJ8o<hFvQV**za^3Bzr݇1n8Pر!}gg·6Z,I8^ewԔiV@_O|7<6lt |xbaX!҃]H` 78cѡ6,–42vD IDATZ !uH0jgO yy{~;?UuR[m*dt {TaNEqab]9a*`PB|7{Kw )f b+̣,i O; y$rhj: 1Q+o|E{NTy~~ήRt&Rg֣܍sĉgM$ UK 1yR+lo5/.04&"KuT 6|!bY Q1*2 БW5&pI%< yIH0nc[̇9 cYf"*h#hǾVQ?`d̽=?zw ׀:R,u sTJ9r29`Fw< nhje5֔L1tsXK$} u ̖ޱiL_~twW&fl" & S_"+H$V91,M&r wQqbէqllRlUI-M|`l8OJW_k$vm|kc#@p$†7qi14nCfxN3ʪ3yy3]GJMZ+)6vqFndqΣۯ~G(!shq_bf r_uy^FMe{3Gx$aM;%=0&2%܄lMD҄2+ {]qz'3r}8^$0[*8KSp׾?\ tp:`5 d"#+4b F~FSX":Jn'j ^B`1B>BnUV&bVhȋ8/HjfHd?P緩O Yx`Oڗ9E5wMi Rjmm\211)X1r(6#BcB1mHW,xcZЁGqd42J.p&cZ!Xt&2s]‘U#+D]@Pj[훧L|?*}Ĝ1.NTtGWխ7>͒CUpDV1!`c8`]* )X~X#Y# (DţE_@>`d=ȑ_>xss@f#7pqFB8mTCfţ$37-}T00[cUh gzpVc b^!$R>;f6ط!2EHfp7x%S1;<*^y^s/H({Dͥ(]$^| jT`X-sPtت܎C~ޑBU7&ư4-˘oq˪_ha/j7X5"S4:ˈw:*iCMš `fxaZ@oa/"Sݲ,C N6 {(TSԇarmըMҙa\}0z9 qj#YYYxMMhg$2اf#S8v(`-{yt-|'>Af ڳ[CAcl6gwԷ‰!~ vgIF+h̓ p,bG^>R?$Iov?S?р5  i W2<0#),B^u8lP}Kx5`4Rc`yd|#괨 t)(ט״M%/tZC3Ue1^JI-*h1 BHZH!\FY4!e%qJ.ʂC/ 662OmTyaÅvԒf_A7S' @fWasϽͭm/,Bi U`t(,x\8oFjQҥKХƳ</@kҍǡ1n#/K||?P࿋DL_ g&z>^yU0<R(SSyC@mlZBH2 .z mXo* B,2A!eN(bi$gF7P]Ӛ4rKcmh8Tp6!g29;  $* [9AqH%YOd/ώ߿ase⏾/ ~>7f&~`f 2 }lo#)M0/~m$Inw s;Y Ыc$3\\Wqx+=PP$XU\1b_$vÆvW$A`LOwi]]]dUVks3^t"f2{=7yv AE v7& !mC =B0 /|<󽧑{h t#_K 0XB?D ƞ=~%DaE_t7>M=K.K`ȗfȁB bq>[;6K\0Жx+gp^f|$d>w oTPb9rH O^X ۶TD  (R^+%r PbfFiQ]@AĽ:q'ABÜhSY Q.?$i4pMЧ;.XZU}xݍu$!ʒĦ( Шhh7(KvnGl5`Y5ue/x[K˿:,Z:ʲĝu\z 7n#ˆJ}^^~e.֗W9^_^CQT(WM>rv BӑbG[z0 cd5v0C)BLR LP 8s\ĿIK"0Ua#ڈh&X\&ܥX(@kdWPB)! BT*#Ī` d髯-{Brk9 4'tyXyvdee{A0\aj捛x'nݼ/;c5 HEvS&6.ꍦq `%]v?O?&k,Z~Q&>zxg(1nbĝ $io|죈! x7~#|󛿏??e]ߩE\oHF KL03Fp<"FDᕒO#E_erMJ&YhM*8Yc1y$iߏ $,&-~@'OזdatxǠ's$*uQMv!x. {Xէ>xG !|F|rW#lYJZ܁|S/ڧFcom~eQ_Ofg['p.\Z޸]m j #TIۗVV/?nN~< \:WEX][tv^Ulcnnf݈CyX[~ +,.,z8۷puױ27QxV7f[;C,/`k}DC_kkkxs"mbNOb-\x u7Md"5t4ceykkE1HY9Uue砍4q]RDB< J/ʂ\%l ~uH29t,ɆDckbZ=&yHTBJcJt'yӱ {,E#Kn$&ʍꌝ!YѸA,^;*gad"7U\'%Q$ŕk7h->ez._F/\|/`0ܫ/cAl(D@-M읝BYZOJ( Hp5x]lllE}_;aar&.W74::6c~^Z|\z 7y{-o|s8+ NjqN8M^YǁLX܂q\y@錞ju[2k}ZJH>aJ<R' 4]e -Ki3 ˷p)p0&ZWpgɀOuGtTO,Wa.BGK{C0=)2mpwȌEFYZZ,LL:k%XՕp6:T~GHET-tc4J?{{~ke} W:qADA[KwZ G# #-!IR<3x:Օe{܄rC7P}F  GFD#+IFx{G :ywWWp⛓E3A- q Uaae PYKZD˿@:Mܥ5B+h7q t_av %#$YO^.9˶ b|&DaQ0rs2T`ITCvω.lF.-Zfś{"׵Uvhs/c׆~1}u'b_<4fq>ZN[;T n^UT}ߣ`0 /̪M z>=SmHY+X^^AʏJ7y^(˿@R}3{ʦ"ܺ+q\}t+ Jno0JG dAaOGŕKNܳN6vОBHD )mvPX"^ѨU^%FWű=ml<-T^'jX|p),Ʉz.BKI U&oA~t+B, {ԷJj5k1ʂ ,d-7ݬWK6LM}Z 0! U#h'PYdBI-&:fpm"7oU 88@f CQJT0䤧zE"\Nl EgFJNn"\a3ҩ7WZv8/6~g bt_$̪x4s]hlQjW(cȲL/`0_T.^y EQ(!}߉p2!@'**V]G}PH.n3Bijq`ƽ#1Eɒ-eh )Ki&;a41qG4PM`8to5'?Yq;E`obbmHTz !#Jm=͞0jxXZ`bI/oME{ ~N}`*r*M3 GBLG^T`HС;;}# GjXF"?[;Uqe / }w07aԊ,>Vvopu"T> r')R=}fQ !ccDS~qTYOaCPȾ] IŮ5pQ^#i-M3e1+y^bOz{v%egt0|tRQv5rE' O.,gN~?x*IuKAA1|ؒmpZtg EΝEe %gEN'"'wPf;K나#뚭>\_^`nS?LHZTa8&OU?`qi;uWa}ArMq3 aĸZ&w뀱 yTث aܥq@[,ʍi/ݷN&TopDFL?k0L0e۝JtZG:<]xJQv_v+DZq} .|C3WhM҇WKDZ#Фo딟Zk(ݣ_hPfhvz/AOh6Xگ !G==I_1;!l6PյN,$J&(DhfQ^y+j_E%Bh,k6/5 ([2 =ԴQ,W9UߦU~"_z S&շك ^W TH(|u6EPtFK6H'T͕1q*:8IY:0:͕y#M'Ɓ MI(l2CTr"j* ( gt,)I.nJwCl/44}GfkzPȲ(˒H=NJMMm⽀2 ΁+p/IF~Jҍ;HG ?t'ΜFz'=38AYl+a8pIwMyex>oq3Bo@\ +,' =r8Y:…CoEN7̥q.UѤM/+Ӻ e-&MNn-ǎǀɢ{gRK9uwz.G>.^]ʺc0 Wn!C};w7lpGX-O+!pq(Kw7zK7U_o0­8uԢ|v#<=! 5DQ)9Ã=:egBx } IDAT븹t?5? 55ݷZqLM8xA!MSȒNf[Fk,̸3KxŖjRHnL ƿtbLTIfi㺧GO6 6B0`D;׮ ( 'ʦIȹM2ސPIԍ QⴁWWw) KUC=Xh4מD3X^bi}J_YXF-{X!fMAQBvWDQ}+?n>/ݼ[K׬hW6 An)N,Z _j4u#nYs/\vN&/;rlp;ZgN`~>maFFQN^ӸllNv'?k6vlx)ߏNzFN 'E<<9sΝFKwi50n􃇭fc^Vs {5[ k1B?ф㉫OSUj rUnBH'ѣ$J6J78#m9mTtJ`.yNLp՘GLO΀|cNh!l 1uJ)J]MDQ"I d4"uMQO\Zv8RlDU%J)~|zBPP9IREUJɲQ3dv W$ӟ x \_(qwcBf RB9LBEfz qEaa2,W_ÕwO< }4TP Ig&W8z`ff*NVfN>XM>} O~no:.X`OT>(!󘞝OhvVIWE Su'&Qd7@e5掓`!O3Hv\̚|?P|eTƐɆA!{-bp q6uP4BjOfnwy-Z,$fEqф {-*>o]5y)m Ю[g982JGFFo>:%RQy7gn0 a/=ˍ M͇6{X0I5ꎄГ4#EBYG?E^Ró,G=g>V%llv>__CqQ"P~7w<;(w!~<'<|?g~,!$݃}o="!$TO7PkW]Yo|K0ų? ,p!,YAE.@I:s%rIšy7Z"[WBMˢDMIVE*I-AB Imz!6yX,AfOl!=Eh#$Dqr?aPJr Bg{behƆTKP"Od<8>0*F ʂF!!>؋8PB3mP En,<I}Gj<l8@^v%Q׭C|EMh:[-W=@HUgswQڅ؉\ޠ$;R=n|;Wq <8dYk_<d;/jrqF(\:^">/]P^5~4*LfO<\rU[F9Ѽ)߾0 /~3SS~A2h6S;{< |sT{FIb6qP&PqzUƭvyFٝi;2 CuK5_'0=5^U3z\- kΓ$=eOC!A~JSɲoq=p@DxY=s0Ѐ2Lw0'V%4Uݽh'Uec.ϋE}㕐Db 18YA`&Qy?r'5pƐq~S13zrν3X(^cv0 #3'f@GM t{5SmRJ˅SmTnY@&c2GZ:7Ie!Fnݺ YZ_fQSW#rDzd@5DSt19c=;??B<_ >"RI6x@=O)Ll-VY ,BM .1~q~|OO~kzEQ8Vһk7w?t-+O4M1Jf\Vk.ȅ#$#9& ]MɎ~h'B#\2 +yE!%eiCzc-Wo 6ƟE2w@'m ēN# 4&.I|ݤh@-mokAkê9ckmrQsФpRNˤH< 8d-H;'.t1At1h9N:)Nz Y/{h3z9\rC&  S(Cw66/Q;SFѣ>#Gw4籱 )Yz)yaM4#8w-?N0ġfg<,`csaz|eq $?YF1@))mD|8Ÿsqјu?gjXmI,rں@?0_@A0k=&=6jl%]`"725&O\N >tZi)j7X粔@/ɓR'ϋ1TcϞiE٩)%ʓt )!Z-BQ =lv0HRR[ҳMGcĩ(3lć?~?1MRhxKRCvQ.OSxIOnuـ,U9B'ma8PL7}ʪ'7/d9!*-3笲e\aGJ\V s hj%>隹mIII2դU65 SQ(HBB\j, U_Hs;Ų~ FBqO_HГ~9;Zds҄ѱEHy^I%v#>9l].e&ڠVI"/.LVvHqK gG~0e1ڥ܅_ڒƽ#5~>7\Q'L\/اm3PQu?޷u+Fv8ל-{ّ` HrZSG+K8* ̆B〉2]^^ `$﷙dTζ,Q[ e|}h!U9sԍګ$$\u'G  |(juzQrMLZ6~?&\* Kw1V eBvxN^5uW4_b=Of v|c#Dڔ."0HR%DcO<+0,4PmhmF rU?,s̋QW e!-AE3M8W%PJc|ik@q\5Rs8$=tXD%{ 4K Ê %96FIJE=9fafzLdYVLJ}Q䗑>KmreIBRe|+r)x.23PDx(3E3P VaCaY[ /%Ije^@*ҸDQdOm-% \dQ|HO&`޾`fÇnK*;;D&cO:'Lv;}wDcN:nEN&Od0؃j/?'O'%w3>FcWL:OOAQX]^Vw9! |Eo,HT0:Wqzi@V7Alc5CC儙wlGɴq$PRsCu,E֫gPM4eBh!lD1&FqY>!EAg6 IOW< d`;$H PyiB.ЮO}o`LPrSJɨ:gdyHi$ Qi %Ȇ) D$Ƚ}I=r@x}*%Tâ :E*BY 4 Re1R!]>eCՂQjСLbW?MR"UӶc8a pa& ium闀B٢$#-$|k r8"I6xߘݦפ16LBU=. 0#f5YĪHFIln&˛)8 njG8VfxJ)y7?"w󬳡w =k됟LIn BjCB:bp֝4BxeE,w#ve50y'%@'I΢,R&e/&P1Rr*q3re%3=$oBK"<^ MgD̂ o:Gs3?SAΦfI(s^dܖQ8ƾ'T.t㾄yURƟ"L;(&:y$PdaAũث*j~i[b,vlBȰ?ު -'A 0V'4a  qӎRSW;d>pP*BIP+ c8$  eY(л醞&j.T(v%$MQ A'|6Geꖼ J/7PTMϋ\mrtZS\cTw[ަT5/4}UdXg IDATYR<ˍ鴡"HQxX 9y/#a8βMH}/Rg:c ~~4-`vJb(GN*5Q"tQ4^x"jcODim'S*i0gyi{am%:Ml4ݶ7y&@\PE9=(>o1ĆTJeO1|_K h?ڙ{BXlg$c`6;OS0.RK t"vr?nDg*,1 C"j:%\ AJ-KX dO`|D?,5P72RIYGwc/s:xbHU:Eh8<˵ۭZbׄƋXn~0Ĝw!ō:[0WO*[mݖ#ܺn'{(hrOuQCWdFʛIJ-*3Ǿ-ƃ=a\Sk߹FK6=8x5 (JØB MR/jdnwQU5K6]R6W:1vn`Nd¿9RZu)m5c.\@R% }[X21p+Jx8p /^yf?Y",9a IF531CcZĮt }x|*^{{Ǹ}{YC./2tZP}e7O)T<}Bx\tÿſ?c֒oD)3&fM,]rQHJuXENYo]~S|['[च/>Hd)MLX^bm⅋QB?apEy$n0Nf1X`eQިxpdfoEymRJT#z 9Xj֨RNQms3SVęݻƗoЉS8v ^^7ױ(w1nݨ`e.6ֱ~2R'$RB(2'g!C'OΟ{:XY^:r/Mul ͻػ6C*++x?ocq6ă'Nciq|:z ,//cem]LN>V}|_A[l͝;w?SCU<z[X^Z df72߃f /T Bw??/"w$mwi<:9 6YFA#TY]Y׾/q{a<۷p\Vec@QvUlc}kXR2'g;c Ce1K.[K0=$![ ciwxfOXإQc̱,ύ>3 Ƶu266 O8wY5$BtZ C+[XZ)uu{d8a~<|yv*n.66pE'F!|qbD#FYݍ|똝3XAgw/ֻP}ogp8_pGlH5U_3򱴶+k80?N[P0o^Vea˗.;occc U} w፳v>Y/ֱ :nn%j:G AhkX?`Q}6%u\xmn+ D{m֜%lltq^}A^=k:j-,u1?;vDItZ{絚܅g(N(kS7WZ5 ϤtھW9വD[q4[FSۦPk㬊65(Bӯ Xk7`"I<އ^y pXY^ߘhӉ" ZL8  #YӴ$SO}<uST;Zc`uy ^<7SDY`pT:Cg>yQ<1޾pZX;8 LuKk(UscPLv0=wJeĤZlH'iɩlR%ݫ &L$T'B[Mߕdp DI\^|"T|ųHosEbkg@N5QJkXZ^!q^AۃϿ1.ݿU$ڀ,q]KDq_t@bzv5Vq#ꓥĵ˗Q /q};:#uTJYkXZZp8ґJj\zW^쳝&\҃;o"/)b~awJG]ϳSm\yGVw\WK)StC@KRvjҍ;]sTORv+a7gރཻv Wm\<aJa ɨN<^Y}7ӝ h,KtёU8>Mٺnam8hq06r`{Rr)AY O^_;[$ AX }vg 6ln+'u"6MQDck{Vg I'1>zۦ[\*'Ov;C:QGwf$Ku#<ݧtt}f 7op}d,N;U_cs{)I,T$Sy mF5ֿ{-phpte$(d82<Գt:mCBl͛ce:ithOu0$z?=ʔ=_B;T_?@Z\p(5T'HLu Ѯ,l׋r 5D" I+(f cܙ %Mgn;aTKmсN?-B١~v}8Z WUܾyyN񿲐vc+ 7o`?pUצ9ws[(%o ?7nӓRfyd?μZaV)ܥE9髃X(cm&e"b&ŷVguN#KS-W;5Vzyfr ?&Dga&KZ$L$!BiV;C HL̲ =_N~ZpS~kg`&(n9וTl075Z]ͤ.u}pD#Q M)v8?b4EO?eopDP!=E`$_ 7/{BIH<0M(^Vx @*w\1!qq;=才H JB _+ȒLNuUm@  @ 9$0 gb$f3ZEļKzi7bw ͎%AG h4 4w;Gquu+3oy?+I-~}7W*}H e{E*Ad ::!Ob  Kߋ7}Te409VÉN19+++MVg4{LfZ\#icDǗ&#۶/l&rLq dYBbG nނ]W-.lZvC͢gS}`۷GE^SH N~fY_9sܾ<jQ~m6v: j%ŤiN޷,ޮ`*߻*Mb]rhgK~)qW0`eJ$ޢ}Ť ӑ(є!L4^s;XNP֪ ,!#;.'6G6ֿ&;.dDМ(-:)3-IZ?/I}:5UVQr$Ft eya+}nK`R >seKV[]zN 4PN={CIoQ|xdnu C:G;p$< w{+-mju3`D,ٽxst6~wvaak'f9: {Cg=>ӟ?vcV`yz+$šY~plyZU@ AA: ShwI=4A{3+[c7O#x0 %[f IDAT~}3ShI[/K$iٟqb0D2W{g IK7V"f ؿODY`0Nd0\ V3o.$.nT#-݊>j&[jQ. .ʇQQ@F{pRװ&ZrGo0m$) Tr?ĝnmV Z%S'0;? P"5$@Z6vvШV0g7 VNf7V^p"6j [G% 1>@^0t=l6. iXDd1[M\[@ZKDo}JOanaQZPU%Wձqh{h*D;MiAﶤwF)F( ,IPo4L:=>OEevjiV6QD8|3ssccV#xZc l7P qkcK|v 7|9^Η&jQOavnbQGb聩NyN0|dE:eljE|/Ekg&h1 Bmcu#KA! q6@7=dt~ ؈44UzIZ| ~oMʭ5\-kQDW7xOB"SeB{q\!F!GOc|| /kn`~z)ҍ5\nWJ;6L6#"Rtd_xժ1Z,͓ZUQVhP"TO6\vI^`ff-!)&&K nNnYαonfgq|4j**J1]wS*bV9V`bbZ]{g"BjUԪT+Y]U~!?qa 1\nqC!S]XJ( QWQ{M+X]?^?0utTNNcnqb|rQZV^s=x0pe":8r(ȞxcJojz0D!"TPBPf pA´|w4~4~{QVEj j5%9!*a,K *#Gippsj d}jb$Lan~pٹ9a(7 ժTK\0A؋(qî.vh$j9}8%@)Kڬm&<qg{f,-l:L#JSI{D4CJ" 8q HVo;j** \噘l c$zAǏbqq$EŹ9C$h7w ("V%^PUՑIlD$/.-gsKKV Bc/cuTTD2ep <G! }^>ٹY KKȒv B]| 8&P7BdqvPk4> @ET#9 9J Dar.pr$0LR4w8ƛ%IN DX"}^R k\j1U/e|'-'!asBrSTv/\qRq0$;I iB\ e97Óh]0IՑFeB!\( >jYIEuHK7F*Q*8Ҍ8V{L J˶:Jer:nܺyy3G?~K Iuި' Kn*~f7,D__`˼IŅ,aqܷS'S T ˳hI% 3&DZ8?;X0lu9w4[-8;`ɓ@،($^}[Dxt8y!Ё%<Jupx? =ŅY 7g p(eoefˊ^!A9s>nn/nA@r @"/Ȫ_.+y @3Q-eSZZo.cF._#`~n/f`JTCgGg ,.-?,(ABȲ8kxG}1zw8m<ėG?=t*O|Z Wz {$!{+U9f1t})=ރ;-9BzHTd|?ITAwq39q6lbqa^Ǖy$YLN<133--,5olOi0sݏ_XZE!p ^=&Tֵ*F8#G^F. Q͹+ 䎄`CVH CZ[fT7 8%ʵ[(I1*Cb,5QUBHU,*aA3V}շ vԕVqc/:`H.! @s"IbHs9GY}nϤ;fy뿫O?M~qY`IϽ2^ N>AqE&\؝`y~!ù KSOG>k4/%~y?6ET>&( >+1BtSA\ZYIKy7߸@j!"tyr&\?5rU87)iȭB>e|VIlF\88z\[pp _.^^pT)qPU@L e$"p!4{dHM'R7l9ˠ1 Vl_dyߓƿ(RD (C/O0+#NĺG.A"+-|oeH01k %wpcnvF;v@i|$zBfy.$ٟ~Gw\֖VKgh:xɠ "T/Xߋ}8f1-^f#*$(M҅u3tz=t{}pc:>QU=|> sp{p]SScz@:a$KX1YᾮЧ5 0=|#]/]3T&bZ]XN}=Ubz>$qlm *Kq:X0,N < Um<:,ik ?M޼G~hqB:U O1$Wid- ` > !FL+X E|JW jG|1|g?qut;]³9x.F/^~:!~gM0(ėxavv?oz@ΜyӓB,w$IL ,3S׎V'~9Ǘ(樲k\=0 ह3֪ Y&2ǎR!i"19_< iᅟ{_doܹ ~~K=;w6_ sx xGCEP/89 Jf 12-@θ(Kpev2ԙs6hω ŕS^U%K ubk F,+N+ .S'&4\}K.eܺϞ `T l1\v┮@phD,CG9CA$sϽTsͯ=so_o1 s& )ZݱFN?DVG݂y8xp?&s A8D!=z06? / pnXM- }p8p`Mb!g ־󘛥N_>'PC/@dY\Q6_[ |q7uCyy9&BK]E4kh~!9HDeq{eY߼<+xg/s]BjN3 \lpK%4 n@H5\fDt!dh7 G'ZWx,3zT]0m]GR̓ٶRc R{ rcrjcQ@.CsYNr~ m4"j=ru:\(jqﴚ:t9uL"09C#nsE!8<0O߿Y]p |_Deu{q =J@@_ Hv~^9K%;{%x61c-yVa.@]Ըø^D#Rr,&D[ꉊⓧkeYaQ+X;R"Hd=ϪE!V RH'B`OUXc`u$)8爢d*s&cU, ,1E0:RO.ϹoDžjD6 %:ɥ!),fTel +ehUBh[󌞓 Rf0!z&)m{?~DQR-FҎ@Јi Ge&&2M}i8)z 0cQ"8 tQ'UgYyƵBL=5TTKol4 <^T<9vKc+g4K V!F"9'u{Z6E˅T %u־p4W6$M s]Yѷ)IG4R}NW=/=E$M^):vTk99TT2ѕ!z7Xuv!L:z\w=ecmX `auQDMc*~A:Z||Pq@r$)4ΎTr۸MH~&uۨM7n :k ;:sQ ǵ}Yvg'd9KͲ98  \pؒDq"TRhF$G^qQ!DPR1-;Q=@7s])mH^>ڮ#[0oE+w Fn:W&5[m.kY31\Ǒ6 KAU0F2yaB*M;ʩ-a\88VB@XXGю% ?w?Y)ő5bi1o[4B;x!.qPe@j)LDqc+婛yYʭ\#=ܻJ1|WҗKg>Q~igD#&ċ/s tZTL\ =KP]-B`#NU1Yy74MVaL RR ۇvYO9' FewώNS":<6]pN '&}n:r)Es.IBƔ?kOu bZPĠ3=->ɒ\,IR4i~8I('^#Vȍec֚ pQc[ s JԆ ׁ_+B}=NP5"BHbw]41`Bm{rN@3z+VᣱI$<0l$,M B#?ƨ'Ĝ}h1:m[ F"4a[oEOZh&im^pqm02)\K,œT0ʘS0̴h4K^)$H'@mN4ChXa i\cG.h1 nQ4A21.ƻ`:i׃%DZT 9G7H-hסN2\+@T@'e<euec)i Î\E;FQ݇ׯDž*~@!.X^AqEgd,;/x ^"hL\4*]}j. ! iQ%i0.|׼i}Y@jRY(.TG;FQabxMuȜWE3 :@7qi?ǡ[CۦiRHs#⁥癤-tKg#gӛEMإ|G{7 .0mMeP,=KW~{" *֦LІW}RD^ ^h&P %zYA=; 雎9+߸kfJa$3$,IjFz>8:CY %jZ oG02 KO!f`{rTO3Vs QJe X^a[HjLoaI3u.gҠT /4MD2宔@f<f.˴|A-6,p^<+r옢w3+|A5m&B>roYE @i30!{WGaޫBP(rp! h)*i))d|y%I )-@K5ӮB/ b&gJӉ aub'6IycLSʲ0>~@E"lٗR-L/=/䭶pb3T2NhS}͉1kCBKH<^ 6dXy]iiY;нY!>^V%(crg.cqZGNv [g$+BN20 \^C .㸺-iFjq @K8#]7NR%vWO<ۀi9PU`Q&i&z eʈ]BH"Nmƭ,S rz7ʹ-[RU/6#. &cd)mJ-P5A9IIn&E Fs1sB7KuBAn.?˲]`4vBGqPKoR;>;ݱL}PhvrlÒn%I)[[ӂ]}*:lQH 3ـ(y1}NGsB7Qb pH\q}3b0]"_F-c:—|_WS)ð0 bΟ{ Z PUAh0X~F7ksŘ_:8w<*'ค\ʊ"sbɊj]vĝ;8xyԪU<'.4EQ7b4q\ pByy0BiWk}3{g.~j*'!Ν}oRtp$ nJa*0ǑFR8o~Q sgϡVɧ0 $/ljHȹL *&|I Ar(&bjh S}n-nqH6:%aw$t}eY!3_o-PDzf2l8;icj34U$Io}8zpLN~( 7/']AK9`{=S$)!S45$Io?M=vBNjŊ g/;( |LMM#2j SO} Gۘnoiŏ/#Iuml7[Ո7u<} 1 n]&MB@*j$H1]4K !zjghԪHO>-=v0,Gee,QZ/Go͗,MS|y_ũǍs@Bۅ K<0*#T&PȾBDIUpNy+S g94KH"HR)UD!& d *',Bŗ^cN  /q8Z!0ĠCsgqc`iui6>6 wR*e ])f>kchA8F0``A?D t0>> L%bz `~CZG;$z>O t;p\NS}JtϜvʠ?O5b^0vuM~vq˧ms!=Whv?>vۈ;6mvɩIdh}\[}gi>" z4_q~aaEo0DՂԾ TUEBV5CJ8V4PF]N,i&,Z̢[(8A<$ψb3B.XnDܶST8BUllٷ__=M }9~n;B{Z;[Do Ezjvo 4wv07?PVaz3ư?ze=~ nJz;hKz[;Mp/Ʀבvwfj#$ENs+@]m~[[ChyRzZ3n޸iImӟ¯`sk ݾ!,(` {Lui񬯮{y oT28|iY~w6ШUQDX_@sk{0 f8EDuuo$%Q^⵻fRgܽh9&UENLr^șPy9#OEN3eZ P ]$7iW*zn]..m}kq6V t;;-o039z5N&8(*SK} {|[pu{]c8V"ַ[XjuaaffZʐVu⥋qElo'o=EbjauShT+jv^`zz0$w&{л%zk%z,!&LY/].wOOBac&f&QFnwx00=3M2xGUE|*n=>A孻̗/mo51=@adYε8,#I 2ӢYչS= ݕ(mKeHW ҳmuTzdP͊4ˤ.n6L%ib }hDOZ0^uG#c3+g p}X__5v#,!\Z@ kM 1!4%ă<mwMcWX!`I?rsq?,x ~y@N.~7ER8z`&J%n,8) ~u<=26olBc͵M@P͹t{==iRv0c`S0qY~H|w%Z qe#NrCYwͫgCjߞ⊾qEokzOJG,z3w_cw]- a s乣{.pr0Yr2VVVH/#uޓw6Khh7jr*Vn 9{wCZؕZل2 Ȏ,pX8EpVUVI yr8vlip슲u!5YA໒45O R!"}J.ugp AoTqnt*A2L')vZ .izgkO4r1w?` iF:O')r#:}w}~&jrsMk;x s#1Z> nϾ1Ѩ-l{P:$3驽nC>Oz Wook C݂+zQk Meg~ڝѻ~m}ת )\;>2~dd~ 7V7! BP&O~ ӟjU4 \9V?4eZ>&&'0H3Ϣ!P㷛ԨE| q1>1p$4G}剝&{y 4ʌyd,pXˍ=Ʉ yR|[OU(ߜmy^`#@hfΧ:4Rm~Z%OZjv$q]),G%zj/xuQhE%o,+R]v]qyFeҸ|?wu3.7b3/b90۷ܾyK#gzvOœqMGT$@oTF-O ܺv \&8xsgFBл<1 >=~^wKy:<xOⴟ]_һ_]\ZauM2CWOM>Ăh$X>!(Tsw VvW7`[Y> lԡ0 0Ĕ:(H o n rK(߃P%I` {*@?N902npIOpAo~& z]ڷ_ןJ !S^+t: $v'I`ףAaӂs. X~i_x?:08($eY?zO⚶EiLNpZYS̺- ifAQM"%E[wFR\U [´Iu݂ʡJNy 82U=KmaAR&N-tIheeUtq-?(͔v̲rz 'NQ+W'6BOE/1ިPyPʔ]C/MsLp)ȁ.rst{YF 'H'bX}HSrvw`9&j5<} @dh͗hu(krG%.}`l\;upA\kZ6( /&($h)Ifj EJAAƘ~6>я~j@ӑH .3a޺]Wŧ^n!tP u\i$I05=hIzͭM\A@x} `<ϑaH{В.&.XRDOHC*1\x15=|/|g.}Ue\0iY3=Sx$٥r{]oV B"ӉQ% Chdℐт`{U)`:XK80RQϼ=>yJӖ~_P|ssuʳRINc1]Xt 9;5ԵM#N\[~4=€^= W:3^a͚丮4@l HI(Q/tÔXUYuim^ߺK겒(j(n"H$ĚHw#RrZ&~^Y:8Aq0I ؿ4Փ'x\=S_t 3iQ_8 >4˰aЏb7c'V>jHbQM|viIaEyGWs=x`}5]´_繛y$IbanjB8/ /n M3,ϑӏS,/bq.R]_{PNڨR R-[R 7*1JN)Ks`SdJff!?u ? VeXdo?ȏǚulֱݝ]Edfr ~=$Bm+]ock7vP VOb~qVB?F[C7@cnr AkKˋƕm5W\CXqt(.:Z?甪h4=Gpms`Lq y7vZ|ca"='W1C5R-Fk5=}Կ͝yGVpj_fAjkF j_GfʻYp6šC+ P |<z^2q&N7GU2c =v4KjX/t 7v075iڵi 8jSFu.j(z==7‹8.vv=SljCJEs)]#{!~'Ϡl^.'lcU>NZ)c-TqP{,3h7~/)O&9c8t]C;-Mr +zp/ kD-:_ԕ$=n*3hDM* // Zcۂϊ=oCqpFVrwʳL0/łTéT"-T Űz>c:=oQѬf G+}ǎ,&> -x egYa crB C{ IBr2Ï82?$GzAZ2=qb(095 P؅y&ǎ?@h_eljG10ɩIfDl˲ N;Ky!$8zs f1Cƶ,xhzkamh[zbϣl ij!PQYWlE(.qĮ*8ݯZ;q,b2S:IiruUHe kKQsx0C~6/8 䰭2q(\^VV!Fo?U1CDԋ9'@vk^GѨ|ڍ,h115eBwHTehȲXXQoy.&!k rE#,fط,BEE#r{tz}td9[\ñ7i6h4jC@0JH}-o qS^} 8vZ-x?d3oxFzV 4:9f&1@~z=D{h62%4R ۧp!u!n?B"14cXXǶ0=7 ϵ4z [JlY $pl0:j5U8Nvv"Y>ؖYOQ!|8ȆO.;( tn.o~lava﫝,dž82#TI3z_jj85:N"/d)"F}]B? %p\ %2{dEA#sAiUqhZF±-j5!slj#2q(N' 2摅G|\m0 bWRd$s4K $)$Ejʋyx=M*22K-\, 62$qvK`Lo_,Ȟ"ISr'i  ImIj8}d6m,Ӥ:^. 'y't!oHff.,DF$LDdҋ8u[elbX]Vo)SʪfقC^ ڙ }䙈#B"clLT(r< 6XSE!5L 3 Y^<υݤVҴȲ\y^"ʶ$E*KY;w]a~,IlR,̔zXAa[0pǝOcY  OkxG4υ4ΐ yy ۂq')Շ3SA:4czɄZo ʹ\ Gd Gd5wS2ҡ{·K2ʊz4t۶`;?2VI q:]ؖݫx-!wfheJ,'tݶ?Nw?SMlC<'H]r59?$cwy/c{w+y'׿mJ==q>,o,0?7)EY]Tni>mLNj q~_z?޷AvW}Dg/Ҷedw ۱0# Y4Mq2^-VR4m>ُe:erxGtOg!9}C8v/\胥JL5_&tKȱE[3Ry逪nԧl[CPIvs(Ceh1QiWb;rp0'Pw y X_@#itF}+N46᜖˜D^@8U3ߗuB؛-.bqq 38p`YFK*}A&g&oq縱-:G)Օ! ُas`{g/rJ 0mWrU18طǟxJ$f8?} % -YK$S3B`0ju=]*7mX= xoa[ffݴGͅGYso*/tbAr.Obi~Ʋ Ɨj2sHMҏD"=q޳,N^xbJ+`em*M^PuT&.eU^U>#TE(NH=0 `5bw.K2E^9h6=Ń}UUz&u/#rOzn I?ga1)}8}]]k _Ekrz~}{[O_][F܋IWqE>t@\pݷcl99n:.m1K!pG¬Bj9"|DI٘DE^;M1 IDATöm9r ryN%NїvvxS70M~?z oy/\Ͽg`kk}U[ǣ>'s xWhV.r T'DpZ {\jY ̆ML }ٔ U]Ueʼ>G0Lb"Oߦʺ$Li%ÁU_+W׉* IѪZJ9簅-\TӐH{/?% ~Kj| |WxKKF1k6j/01>ͭmXlQ96v/~#ERpmij|s3S,LM ӡ$ֻw3om8M%ρ1◿zAoZÇh3*mbusJ_ť㎓`l"K3,-- "/eR•}K~?a|v fY8r*QA܉˗!27_EQrmw\T2&jD)f4 ͖I]Mf]G-Wf'/rk-c@-ZϱEHd"TQASx,e>6M# ltsQlK 8*RQ.`UO>CQ8zM70l`6pae|ZZBKc`:8fpݷ.kuqpw]hZ;>ŅyA{8Cp=3Xٷ1lm"+r4_HssV BW؏9FXe1y \>tman X@16o4y5BnHs"6p=բWE -be _N"}(> rAmȳo˛Jmȼ8MDj _!犸3=Hx~P=wZy vr(\f;#B4;1#ucs͂#m#F1gpǫ< EWeX6+݃s yޯ٣9A3>W:g?.җQ𙏥Jr+'9U)1Ǹ݅KHZ>J4~&cגgu]v-*ZLicjz -eLBU1Ӥ3J~tp߸LBD]Vpgy2nFO6ؖ &r+ Cڠ7_"UQI и2Qp.3J6trcUVŊ$We&eY 3nhY =j_e{#Qݍ@ Dהڛ^6|//yї7oF|/?Cgn6:UџWK~>4)VtÝxF=mH|atjJN`g~nD vʡxF[3Kn1Jc\>ڮ{dG"L'ih6T"f.eeRT?wv[xyW\$IWwqDQvgQ}C/?/QO @/N\-qQZG%z'$B&'D @]]-Xm63R~-*(U~%i wC!1w1+$I ^p#<JUp*2eb Hcj7+N6m*8K6h~P-v\$@G8Wu\WVrd)QY. f P w1ct7K5$IG^CCvY!XJ揮aK(3\SH,⒌ Mr:T~%B#`# Fprp"PwH//%F:$C9@NYYL`85'(; ^q$5ne)3VWיi9J\~fC*.dPm&ب0!Xhm]F%ܿ%W[&F&)&3ʋ2Qu|6(ܨs^Uf8Saը=4ĚAܕ*FM˓,01qlnĕ8e PO+5z2`R GT W0 Vj'*/NNxHL4e_' /x)l(@yer]FK?-vy^NUu|̤VPuVqfuS.5vчf{F)ÿU?]ĥyO҄0M.j !, 7MP;DGVڅDDLY۩iLY8'PmsQ|X/y^vN;WeGWٖ]UҌ|RОl9 J1*]e~%:%#zfxZ[4td*Xo{nE^EqeC#S#M^.Bkh0eۥhѼG!9I$ &*qܐm[@irȅfC5.IțjÜ"+K8fL,#ȶL֋گ1w9 Ci Jr$Y!'z@B8"qxyQy8M s8C;YmIZZ(eqE+/QY -&2&N$b`sN$W]&%0m[äH85۟fp\ꐕz%;|$IJvH*˹֦.M<۱5 7TN=xIAt.RL.H,^ d;G-|s\Fe nrN%|/̲J8rrP\҈9ABK>r35sKlA,\$(U!祗PP;5޶ zJl W~"U-}(Y*1;J1cCA3e6HGt?l +)9PBZl%e@0uj.2 xCGr*4U䚗ۼ,c+'Uh9\+JX\AFYZ&EDA%`X[\q$!9A&tH1H,?_,Vx#,EiY s_rĸ_o, /2\/q,đ (_Cz}>05gb j'w~"42zт:NTWњV[3Au$ 7FPЎ.ûQn؀rU+$צifsU&ƙY?Y.<ƀ h`CMF $b9j']Y_&&xx#MyT͇&4n'ZF7-xI<yK!Iy#oZc S|)<-S<`\jи*1Sf+,/(o 7ZoVg)*/{f-HC@$/6Ny spoay MR52I&8)57V:F~|q;vL6%9BgTh$ɶ,z=>vژSR<ШH }8r6iYlԐ 2ڸp~ ss}!ϧ18dʶc438-gUߟ4M#cLD_ :kH/HxH^ IS<8|O鵗H9pa8Ļ-۽2'AES Fq,Ɵ^ HTH $-dD%Ҳ$ & 'yC* ƪ8r#9>^x5O<7š"Dʿ `Ii{E#INA. e$Ԩh0Us$i c_q=IHY[[8ֻ_߾| ;ۛ ( C5jZ^ P6wpE\x+KZH4^\ F$e8_OOr,.e}~ =?pฐw째xQc$݋1>96glЍBѣᛏ?ɉq2h۲Gg75s@݋0&-jBczFcH4m[8grKꯢ`g7]EJy$`swqA<ØTXYo]/^eLMaog dm.9o<(&Ea*y)0 吓\e1*Yr97$ Jv7T5Ӿ|zUYa8B*i YGImU3+ E;ѯ4KGxIuo8 yE]v g}𝧿^x nGxc^ k>] /͐dz;w"_N g#y~}=J)uDZN<fffTD(pv'z~oqjda:*C|LNJ\e̲p K1;;-4mfY kp…UYx_ p,*g?=/a{goxz\,pv6{>x!LNòl*u&ILKu\ģrE")?( ]ɳ,۴ 44UC,Ţ( IDAT"1oj+y+R7F e!c<}Sovjx,lE19~d58G%{z~ipR޻o\8.ul8G໸BON4IvYFYA(ksWTsq{훃8n0EH\^4s$?5R^?`!MS6Kxƽއ_? xF28dH=8qp}K  D(rJbʠq8NTEFSwQE ^z“oH?5Qge,o Nr@mO(ŰߙU-\/rJ 8ggۧ=v pqx=_&aDZ.^z5h{g5E[CO89lB‘'b/z QD8=;WWo>7Bpp;w7( kk%sW?yfE85վ-FLܟW9t y8w666O]x9ff^ehq`q^p`^Cs$([%dy4IK qInƑs 5s ji98;9fPUMmnٖ3]{sz) Yտ qQ!Jst,ҝ|g?7}U79c._V*V|Bx\Nh.9>$ǞwOF m6B\v1 PĈ {;g?&w-hC\ r&=|'Q"4n.wҾRC.E8A"i=Q!&\)@;CÇ^ } {'yOpSX=jiwO WñʕW8Bfk["sV:hP&uEpQ%Og[*8˝BGQ[Z8n׺wxa~GakkkC D gm4ƛ""{o<.\}(SX` CcrWϽ1[m% jX Jp؎vX9#?{NΏ7Qqű~pߟWCP76?d7Q¶mt4'T'%Qexg6 X[[\Z8Ac i@Nr:,iF1k)xBf,MX|5%qR>8k/xIߑK(eRTB}Ct⌤tC`NrjSgKn}b—e+(\ K=C'>\tlQbH qLoc#bHJKLA(O(o$f b&DtP,:bste>[S,q Wh2RiCi.A֪!K3ܫU\_@Gz2rR;*=H!+Yc^Js"{\_@ǐ^vA8bsӋi'ylMuQVkWri#8qB}._kבD>-茐w1ed}:8jDޤnzt{ϧ G^ȧ-\FuetL- &<DTHi^YzrU¹hߨtS}'^(܄* `! FSoT\~+r;E gȑu X"0&yAHȰ#皸<,@03=$TE}џ/\2O5ӥhz}b &ߪ?GõM4jO b D (I":55;8p/ora6yI/%:91-vsEX2*+NR9),|C"](:TWeߦg?sUCLqfL!;sg./ d$`XcB!v03$4U]>xeq8M4 gpx<߅#.,TG2c®N#IRqa}NKy 38v⸪y>rrM#CM/tn 2,L(-`ĪhTv1;9 8<;81z. 9ɛűǵǛ "llSDG vZ\%y6j'anq\4!a3š7Mlm`oejA, NʂA{8z3'{·KgY0Rrq XеW[\ʪUvCԕʄyq/َL~̖ 2-Ͼbu>S{\C=+1ñ#aaqp]V Xrqa|'h_J!z7==Eu{.K%jŲlV833f >Cq!oohdBFG~L{B'Nzv%qfǔYd>'?Of2*aA|N ,'=K@"$M Lp>*L\Y~3]xU\ppaaiH( 4 ӮtWb )ܛ_rEw۷v[vQaS%W@% ,pEdJa18**Fꪑ6 ?7wŨT64JW|2RFcueի=B :*}FWD <| [K˫x6[Y^DrHr bRYZ'`NJ g.@)!$qBM6Pr J?vqHIb~~i^gg. dž& W0:>n YgM7Qv]F#H+CZ@pU+&3kkO=N< nYTl袍eH#,/Yɥ?aٍfv,qLi9MVq9 N,LoD[Xǀ gwǧFڍJ9n$PҔۆ? S?-ʒq?T $sd3)G'jG4:km)5Adfƴ ~9}fW*B{IZ .HF9ZuD7r)*?6 mqb5ZƯE$I8N$ aHxZGqlrakmݐ&$H,f=AHcVLmao[Eɛ)3R'AhydN0<)QU);K%+2t͎݀3Y( ,҉A;.o !IS+ Ii4 :˹61mF'0bJ:@ꉲFȬYnKkf :xq#/(BBxKfѤHC>|sk*BB^Cnۛ󤉢"݊teNZi#h6dvπs47ޓR!U)Jaɼ7 <2UH'."Z[֭[ *P>Yi! FI,F JKܠ^ (J)l""O)ť%n ȇ-SMg<kʡx:P1>Y~.n\q:Fy}ض톫r}mrNNՁͯ] 9幟 2FVӟ `h`;{)xs9zGd1,y#@W|x˙/H~tvL"|ylnj߶RI?1W$Z+*e}PJ7o5~=H顿z_|nc#8~@,>Yl=~mzС(B j;0ī/=0 p׍$E} G-݆xhܒQlwiVPI 8Mmx?BBO u*D V+7rc?"i/`RH(Vzk7}5/S8=Ǖ VиC{>s;&qٽ}3S Ԫt#nv?s|F)LZ)\z͵ѱ.;3vL6gNwރ#հlÏNXN<21#; \1D>< 7oB;NՅ}{AXXZ{iֆQ҇@ﶭhD_FPF1=1f&&ۍPYjU蓥d@_/#C#\uU2l(<3\6簰ߓh_s֘l`rb JYpUѿ'%v,ç~ |xk\ I)%n ISJmJ* fy<.>+7]zTb;Ql}(^ xoP]g3kUh]cwadt}}ߎfG\¾}Ig4?{VM `Ϟ*$㠐O|p-\v. =w@)p F]“xQV>N[C)0-fl;`rr S IE㑝غ /.O uN߾c-J)LMM`tt8wf14ԇ/|P&Rf|Q dx!'vÏb-J)$ "N`Rq^twpî_anb2C!8rgsod'>#\Q6PY F5|6 eYc==MI uZP]< GaR IDATFRVXZ^Sć'qu !s /Oq866+oec֣z7^^ KSlmكNDu̧>|tss8~`ǎ tP &MQJa)\%(ƙ󗠕B__/߷۶&9*%?8ws\xz^yG Ё+pXZ^}}_}(7OMwwwfʥRiRC&VOgà{4-hiOCk5 q6=w agq'S\w4M Ǜ ("!#ٴ-٠ 9]vjvi҂waPNIhQoinl.ՙ%a+WoBJJ{C+(b6j7\7<,rlZ֜qjKk 1== 8ln}6?13 l7n|y~u:]*4E|r\4K cxg }-4 tj%WvQhְLu۷aGQFBkR r H` ć3iChf//J)bS'i)Iqr}bR:wom&.6g #EQβAa#l(/zKrzF6M֭* Zkk<(Wi󯶚TF@'9(5|xg_ oo/^>Ƒ?1+M1@dʹStxU' .|(EI?\q@8jb|+q*mAq?%M3ha*``T;7{^oLW RwysA#&@[Eq7#9q'PJcieStwcل}%}u{0ߗhVCe.رH$_Zcr{gqOзKˀX|Lh= >/.\ӧWocϞX@ bx`+-8qmb| lctqN A(89п 5vL#M2twwaye*S`|&@cl߽wWlj QZbVسgܽ(q%<}p?jZ % xdbap_`, /h7ؐui(v{AP7&mਹԆoZI63˜dbrzͯ #0\$׾ƣ;t 4RqbB7"$-Տhpۦ.(:;:ʥG?_6 XX\hbߞ]B`PF}!b~`W']G<j_\f,])1́RL BkE ̪RzWJ+LNAkj5gFmw3ޏ0X^Y19!+V3'%^|hq}xT,.`iy'qϞ/l&ɌQCr/87Ldo\$yghʄ>}P(;l<>ɯs6\poB[]U!i $5zeQl e2aU+Y .!׌z\9Fa`+≍k /aŎ~7 ߦm&7WIfp(c!M6b (Bywc [/ĢRek ayqៀ&.w!P ~"᮵'mVyfR7;ƗsS\x= ry#ם/C%?wRZolԚ(?un814) UڪlF|Y6PUM>9IScͭPy]|/N;`a`^N+);` FJM}gCC戁Tq3z+LP<7my9I_D!ɌzYgؿLO!&Y0\J4Vl)a%MaFb>v8}eq1ݕav͇1B$%=s3noy[臒*8tt礁3F -It$d3B<4yg"~(ю&R Y8b3Dbce5HʔY]gG>}c5.Da_2 ^0ś8}k#FIlVWqrDan98M} 2k4RYa3`cBo?N~¦淲0э[y<,LqNV2 |?7nh||Sf2.• ~i/=_{q87?[.UfnZ%Of"1/3mmU ^qM|'fc2ˤLBbJaH"4'v3oZ/I\B8k"B:c0bGlҶa3a'rE[n'R*rΛDȅE}vދ@8Zû/y88͆EZh[(Fs`bħG^|G;3ZtJ~ * @*ŕ'OXQ^Z(Zznsi~JqD$Wdl4ͳ#c-Mn]v4ЬcKhA #{t$=ng2 wc$y|K 1*IgmzcdElFLSj ^151zGwiN4a%y.Z5EDHx-ySfRڷojL"LEZiv.;XK1Qnsf|:g\mXq5~S5DIENDB`lmms-1.1.3/plugins/sid/bpred.png000066400000000000000000000020341247673406200165400ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlebp buttonxtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT(Mk\U?tL& qhKIJQQDh).ĕPpʀ+HhBiEV XI['qO;EL滸~9A`scОөbD@!ɉ"P<a_!aέ$1t*s$UIW-TJPK'iZ_s/R),lnbDxsmNPzp9޹1|oSۻU2~^^|; ԚԙD6KX,rXGC?oK* ߧhϬ,Lȿ1ɉp"%ˑN!9zDxjfVgnintaUF|vxK3*^hQ1b-(BcJC="A_Vg|r EڕP)Dl| ULQ 3>KRX.A+N>ħ1}v6TY,NL12Y]2G헟U\I9?v(49kPcИT\CULG ֣WE5=A& <IENDB`lmms-1.1.3/plugins/sid/envelope.cc000066400000000000000000000200631247673406200170640ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #define __ENVELOPE_CC__ #include "envelope.h" // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- EnvelopeGenerator::EnvelopeGenerator() { reset(); } // ---------------------------------------------------------------------------- // SID reset. // ---------------------------------------------------------------------------- void EnvelopeGenerator::reset() { envelope_counter = 0; attack = 0; decay = 0; sustain = 0; release = 0; gate = 0; rate_counter = 0; exponential_counter = 0; exponential_counter_period = 1; state = RELEASE; rate_period = rate_counter_period[release]; hold_zero = true; } // Rate counter periods are calculated from the Envelope Rates table in // the Programmer's Reference Guide. The rate counter period is the number of // cycles between each increment of the envelope counter. // The rates have been verified by sampling ENV3. // // The rate counter is a 16 bit register which is incremented each cycle. // When the counter reaches a specific comparison value, the envelope counter // is incremented (attack) or decremented (decay/release) and the // counter is zeroed. // // NB! Sampling ENV3 shows that the calculated values are not exact. // It may seem like most calculated values have been rounded (.5 is rounded // down) and 1 has beed added to the result. A possible explanation for this // is that the SID designers have used the calculated values directly // as rate counter comparison values, not considering a one cycle delay to // zero the counter. This would yield an actual period of comparison value + 1. // // The time of the first envelope count can not be exactly controlled, except // possibly by resetting the chip. Because of this we cannot do cycle exact // sampling and must devise another method to calculate the rate counter // periods. // // The exact rate counter periods can be determined e.g. by counting the number // of cycles from envelope level 1 to envelope level 129, and dividing the // number of cycles by 128. CIA1 timer A and B in linked mode can perform // the cycle count. This is the method used to find the rates below. // // To avoid the ADSR delay bug, sampling of ENV3 should be done using // sustain = release = 0. This ensures that the attack state will not lower // the current rate counter period. // // The ENV3 sampling code below yields a maximum timing error of 14 cycles. // lda #$01 // l1: cmp $d41c // bne l1 // ... // lda #$ff // l2: cmp $d41c // bne l2 // // This yields a maximum error for the calculated rate period of 14/128 cycles. // The described method is thus sufficient for exact calculation of the rate // periods. // reg16 EnvelopeGenerator::rate_counter_period[] = { 9, // 2ms*1.0MHz/256 = 7.81 32, // 8ms*1.0MHz/256 = 31.25 63, // 16ms*1.0MHz/256 = 62.50 95, // 24ms*1.0MHz/256 = 93.75 149, // 38ms*1.0MHz/256 = 148.44 220, // 56ms*1.0MHz/256 = 218.75 267, // 68ms*1.0MHz/256 = 265.63 313, // 80ms*1.0MHz/256 = 312.50 392, // 100ms*1.0MHz/256 = 390.63 977, // 250ms*1.0MHz/256 = 976.56 1954, // 500ms*1.0MHz/256 = 1953.13 3126, // 800ms*1.0MHz/256 = 3125.00 3907, // 1 s*1.0MHz/256 = 3906.25 11720, // 3 s*1.0MHz/256 = 11718.75 19532, // 5 s*1.0MHz/256 = 19531.25 31251 // 8 s*1.0MHz/256 = 31250.00 }; // For decay and release, the clock to the envelope counter is sequentially // divided by 1, 2, 4, 8, 16, 30, 1 to create a piece-wise linear approximation // of an exponential. The exponential counter period is loaded at the envelope // counter values 255, 93, 54, 26, 14, 6, 0. The period can be different for the // same envelope counter value, depending on whether the envelope has been // rising (attack -> release) or sinking (decay/release). // // Since it is not possible to reset the rate counter (the test bit has no // influence on the envelope generator whatsoever) a method must be devised to // do cycle exact sampling of ENV3 to do the investigation. This is possible // with knowledge of the rate period for A=0, found above. // // The CPU can be synchronized with ENV3 by first synchronizing with the rate // counter by setting A=0 and wait in a carefully timed loop for the envelope // counter _not_ to change for 9 cycles. We can then wait for a specific value // of ENV3 with another timed loop to fully synchronize with ENV3. // // At the first period when an exponential counter period larger than one // is used (decay or relase), one extra cycle is spent before the envelope is // decremented. The envelope output is then delayed one cycle until the state // is changed to attack. Now one cycle less will be spent before the envelope // is incremented, and the situation is normalized. // The delay is probably caused by the comparison with the exponential counter, // and does not seem to affect the rate counter. This has been verified by // timing 256 consecutive complete envelopes with A = D = R = 1, S = 0, using // CIA1 timer A and B in linked mode. If the rate counter is not affected the // period of each complete envelope is // (255 + 162*1 + 39*2 + 28*4 + 12*8 + 8*16 + 6*30)*32 = 756*32 = 32352 // which corresponds exactly to the timed value divided by the number of // complete envelopes. // NB! This one cycle delay is not modeled. // From the sustain levels it follows that both the low and high 4 bits of the // envelope counter are compared to the 4-bit sustain value. // This has been verified by sampling ENV3. // reg8 EnvelopeGenerator::sustain_level[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, }; // ---------------------------------------------------------------------------- // Register functions. // ---------------------------------------------------------------------------- void EnvelopeGenerator::writeCONTROL_REG(reg8 control) { reg8 gate_next = control & 0x01; // The rate counter is never reset, thus there will be a delay before the // envelope counter starts counting up (attack) or down (release). // Gate bit on: Start attack, decay, sustain. if (!gate && gate_next) { state = ATTACK; rate_period = rate_counter_period[attack]; // Switching to attack state unlocks the zero freeze. hold_zero = false; } // Gate bit off: Start release. else if (gate && !gate_next) { state = RELEASE; rate_period = rate_counter_period[release]; } gate = gate_next; } void EnvelopeGenerator::writeATTACK_DECAY(reg8 attack_decay) { attack = (attack_decay >> 4) & 0x0f; decay = attack_decay & 0x0f; if (state == ATTACK) { rate_period = rate_counter_period[attack]; } else if (state == DECAY_SUSTAIN) { rate_period = rate_counter_period[decay]; } } void EnvelopeGenerator::writeSUSTAIN_RELEASE(reg8 sustain_release) { sustain = (sustain_release >> 4) & 0x0f; release = sustain_release & 0x0f; if (state == RELEASE) { rate_period = rate_counter_period[release]; } } reg8 EnvelopeGenerator::readENV() { return output(); } lmms-1.1.3/plugins/sid/envelope.h000066400000000000000000000215331247673406200167310ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __ENVELOPE_H__ #define __ENVELOPE_H__ #include "siddefs.h" // ---------------------------------------------------------------------------- // A 15 bit counter is used to implement the envelope rates, in effect // dividing the clock to the envelope counter by the currently selected rate // period. // In addition, another counter is used to implement the exponential envelope // decay, in effect further dividing the clock to the envelope counter. // The period of this counter is set to 1, 2, 4, 8, 16, 30 at the envelope // counter values 255, 93, 54, 26, 14, 6, respectively. // ---------------------------------------------------------------------------- class EnvelopeGenerator { public: EnvelopeGenerator(); enum State { ATTACK, DECAY_SUSTAIN, RELEASE }; RESID_INLINE void clock(); RESID_INLINE void clock(cycle_count delta_t); void reset(); void writeCONTROL_REG(reg8); void writeATTACK_DECAY(reg8); void writeSUSTAIN_RELEASE(reg8); reg8 readENV(); // 8-bit envelope output. RESID_INLINE reg8 output(); protected: reg16 rate_counter; reg16 rate_period; reg8 exponential_counter; reg8 exponential_counter_period; reg8 envelope_counter; bool hold_zero; reg4 attack; reg4 decay; reg4 sustain; reg4 release; reg8 gate; State state; // Lookup table to convert from attack, decay, or release value to rate // counter period. static reg16 rate_counter_period[]; // The 16 selectable sustain levels. static reg8 sustain_level[]; friend class cSID; }; // ---------------------------------------------------------------------------- // Inline functions. // The following functions are defined inline because they are called every // time a sample is calculated. // ---------------------------------------------------------------------------- #if RESID_INLINING || defined(__ENVELOPE_CC__) // ---------------------------------------------------------------------------- // SID clocking - 1 cycle. // ---------------------------------------------------------------------------- RESID_INLINE void EnvelopeGenerator::clock() { // Check for ADSR delay bug. // If the rate counter comparison value is set below the current value of the // rate counter, the counter will continue counting up until it wraps around // to zero at 2^15 = 0x8000, and then count rate_period - 1 before the // envelope can finally be stepped. // This has been verified by sampling ENV3. // if (++rate_counter & 0x8000) { ++rate_counter &= 0x7fff; } if (rate_counter != rate_period) { return; } rate_counter = 0; // The first envelope step in the attack state also resets the exponential // counter. This has been verified by sampling ENV3. // if (state == ATTACK || ++exponential_counter == exponential_counter_period) { exponential_counter = 0; // Check whether the envelope counter is frozen at zero. if (hold_zero) { return; } switch (state) { case ATTACK: // The envelope counter can flip from 0xff to 0x00 by changing state to // release, then to attack. The envelope counter is then frozen at // zero; to unlock this situation the state must be changed to release, // then to attack. This has been verified by sampling ENV3. // ++envelope_counter &= 0xff; if (envelope_counter == 0xff) { state = DECAY_SUSTAIN; rate_period = rate_counter_period[decay]; } break; case DECAY_SUSTAIN: if (envelope_counter != sustain_level[sustain]) { --envelope_counter; } break; case RELEASE: // The envelope counter can flip from 0x00 to 0xff by changing state to // attack, then to release. The envelope counter will then continue // counting down in the release state. // This has been verified by sampling ENV3. // NB! The operation below requires two's complement integer. // --envelope_counter &= 0xff; break; } // Check for change of exponential counter period. switch (envelope_counter) { case 0xff: exponential_counter_period = 1; break; case 0x5d: exponential_counter_period = 2; break; case 0x36: exponential_counter_period = 4; break; case 0x1a: exponential_counter_period = 8; break; case 0x0e: exponential_counter_period = 16; break; case 0x06: exponential_counter_period = 30; break; case 0x00: exponential_counter_period = 1; // When the envelope counter is changed to zero, it is frozen at zero. // This has been verified by sampling ENV3. hold_zero = true; break; } } } // ---------------------------------------------------------------------------- // SID clocking - delta_t cycles. // ---------------------------------------------------------------------------- RESID_INLINE void EnvelopeGenerator::clock(cycle_count delta_t) { // Check for ADSR delay bug. // If the rate counter comparison value is set below the current value of the // rate counter, the counter will continue counting up until it wraps around // to zero at 2^15 = 0x8000, and then count rate_period - 1 before the // envelope can finally be stepped. // This has been verified by sampling ENV3. // // NB! This requires two's complement integer. int rate_step = rate_period - rate_counter; if (rate_step <= 0) { rate_step += 0x7fff; } while (delta_t) { if (delta_t < rate_step) { rate_counter += delta_t; if (rate_counter & 0x8000) { ++rate_counter &= 0x7fff; } return; } rate_counter = 0; delta_t -= rate_step; // The first envelope step in the attack state also resets the exponential // counter. This has been verified by sampling ENV3. // if (state == ATTACK || ++exponential_counter == exponential_counter_period) { exponential_counter = 0; // Check whether the envelope counter is frozen at zero. if (hold_zero) { rate_step = rate_period; continue; } switch (state) { case ATTACK: // The envelope counter can flip from 0xff to 0x00 by changing state to // release, then to attack. The envelope counter is then frozen at // zero; to unlock this situation the state must be changed to release, // then to attack. This has been verified by sampling ENV3. // ++envelope_counter &= 0xff; if (envelope_counter == 0xff) { state = DECAY_SUSTAIN; rate_period = rate_counter_period[decay]; } break; case DECAY_SUSTAIN: if (envelope_counter != sustain_level[sustain]) { --envelope_counter; } break; case RELEASE: // The envelope counter can flip from 0x00 to 0xff by changing state to // attack, then to release. The envelope counter will then continue // counting down in the release state. // This has been verified by sampling ENV3. // NB! The operation below requires two's complement integer. // --envelope_counter &= 0xff; break; } // Check for change of exponential counter period. switch (envelope_counter) { case 0xff: exponential_counter_period = 1; break; case 0x5d: exponential_counter_period = 2; break; case 0x36: exponential_counter_period = 4; break; case 0x1a: exponential_counter_period = 8; break; case 0x0e: exponential_counter_period = 16; break; case 0x06: exponential_counter_period = 30; break; case 0x00: exponential_counter_period = 1; // When the envelope counter is changed to zero, it is frozen at zero. // This has been verified by sampling ENV3. hold_zero = true; break; } } rate_step = rate_period; } } // ---------------------------------------------------------------------------- // Read the envelope generator output. // ---------------------------------------------------------------------------- RESID_INLINE reg8 EnvelopeGenerator::output() { return envelope_counter; } #endif // RESID_INLINING || defined(__ENVELOPE_CC__) #endif // not __ENVELOPE_H__ lmms-1.1.3/plugins/sid/extfilt.cc000066400000000000000000000053151247673406200167310ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #define __EXTFILT_CC__ #include "extfilt.h" // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- ExternalFilter::ExternalFilter() { reset(); enable_filter(true); set_chip_model(MOS6581); // Low-pass: R = 10kOhm, C = 1000pF; w0l = 1/RC = 1/(1e4*1e-9) = 100000 // High-pass: R = 1kOhm, C = 10uF; w0h = 1/RC = 1/(1e3*1e-5) = 100 // Multiply with 1.048576 to facilitate division by 1 000 000 by right- // shifting 20 times (2 ^ 20 = 1048576). w0lp = 104858; w0hp = 105; } // ---------------------------------------------------------------------------- // Enable filter. // ---------------------------------------------------------------------------- void ExternalFilter::enable_filter(bool enable) { enabled = enable; } // ---------------------------------------------------------------------------- // Set chip model. // ---------------------------------------------------------------------------- void ExternalFilter::set_chip_model(chip_model model) { if (model == MOS6581) { // Maximum mixer DC output level; to be removed if the external // filter is turned off: ((wave DC + voice DC)*voices + mixer DC)*volume // See voice.cc and filter.cc for an explanation of the values. mixer_DC = ((((0x800 - 0x380) + 0x800)*0xff*3 - 0xfff*0xff/18) >> 7)*0x0f; } else { // No DC offsets in the MOS8580. mixer_DC = 0; } } // ---------------------------------------------------------------------------- // SID reset. // ---------------------------------------------------------------------------- void ExternalFilter::reset() { // State of filter. Vlp = 0; Vhp = 0; Vo = 0; } lmms-1.1.3/plugins/sid/extfilt.h000066400000000000000000000121041247673406200165650ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __EXTFILT_H__ #define __EXTFILT_H__ #include "siddefs.h" // ---------------------------------------------------------------------------- // The audio output stage in a Commodore 64 consists of two STC networks, // a low-pass filter with 3-dB frequency 16kHz followed by a high-pass // filter with 3-dB frequency 16Hz (the latter provided an audio equipment // input impedance of 1kOhm). // The STC networks are connected with a BJT supposedly meant to act as // a unity gain buffer, which is not really how it works. A more elaborate // model would include the BJT, however DC circuit analysis yields BJT // base-emitter and emitter-base impedances sufficiently low to produce // additional low-pass and high-pass 3dB-frequencies in the order of hundreds // of kHz. This calls for a sampling frequency of several MHz, which is far // too high for practical use. // ---------------------------------------------------------------------------- class ExternalFilter { public: ExternalFilter(); void enable_filter(bool enable); void set_chip_model(chip_model model); RESID_INLINE void clock(sound_sample Vi); RESID_INLINE void clock(cycle_count delta_t, sound_sample Vi); void reset(); // Audio output (20 bits). RESID_INLINE sound_sample output(); protected: // Filter enabled. bool enabled; // Maximum mixer DC offset. sound_sample mixer_DC; // State of filters. sound_sample Vlp; // lowpass sound_sample Vhp; // highpass sound_sample Vo; // Cutoff frequencies. sound_sample w0lp; sound_sample w0hp; friend class cSID; }; // ---------------------------------------------------------------------------- // Inline functions. // The following functions are defined inline because they are called every // time a sample is calculated. // ---------------------------------------------------------------------------- #if RESID_INLINING || defined(__EXTFILT_CC__) // ---------------------------------------------------------------------------- // SID clocking - 1 cycle. // ---------------------------------------------------------------------------- RESID_INLINE void ExternalFilter::clock(sound_sample Vi) { // This is handy for testing. if (!enabled) { // Remove maximum DC level since there is no filter to do it. Vlp = Vhp = 0; Vo = Vi - mixer_DC; return; } // delta_t is converted to seconds given a 1MHz clock by dividing // with 1 000 000. // Calculate filter outputs. // Vo = Vlp - Vhp; // Vlp = Vlp + w0lp*(Vi - Vlp)*delta_t; // Vhp = Vhp + w0hp*(Vlp - Vhp)*delta_t; sound_sample dVlp = (w0lp >> 8)*(Vi - Vlp) >> 12; sound_sample dVhp = w0hp*(Vlp - Vhp) >> 20; Vo = Vlp - Vhp; Vlp += dVlp; Vhp += dVhp; } // ---------------------------------------------------------------------------- // SID clocking - delta_t cycles. // ---------------------------------------------------------------------------- RESID_INLINE void ExternalFilter::clock(cycle_count delta_t, sound_sample Vi) { // This is handy for testing. if (!enabled) { // Remove maximum DC level since there is no filter to do it. Vlp = Vhp = 0; Vo = Vi - mixer_DC; return; } // Maximum delta cycles for the external filter to work satisfactorily // is approximately 8. cycle_count delta_t_flt = 8; while (delta_t) { if (delta_t < delta_t_flt) { delta_t_flt = delta_t; } // delta_t is converted to seconds given a 1MHz clock by dividing // with 1 000 000. // Calculate filter outputs. // Vo = Vlp - Vhp; // Vlp = Vlp + w0lp*(Vi - Vlp)*delta_t; // Vhp = Vhp + w0hp*(Vlp - Vhp)*delta_t; sound_sample dVlp = (w0lp*delta_t_flt >> 8)*(Vi - Vlp) >> 12; sound_sample dVhp = w0hp*delta_t_flt*(Vlp - Vhp) >> 20; Vo = Vlp - Vhp; Vlp += dVlp; Vhp += dVhp; delta_t -= delta_t_flt; } } // ---------------------------------------------------------------------------- // Audio output (19.5 bits). // ---------------------------------------------------------------------------- RESID_INLINE sound_sample ExternalFilter::output() { return Vo; } #endif // RESID_INLINING || defined(__EXTFILT_CC__) #endif // not __EXTFILT_H__ lmms-1.1.3/plugins/sid/filter.cc000066400000000000000000000216701247673406200165410ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #define __FILTER_CC__ #include "filter.h" // Maximum cutoff frequency is specified as // FCmax = 2.6e-5/C = 2.6e-5/2200e-12 = 11818. // // Measurements indicate a cutoff frequency range of approximately // 220Hz - 18kHz on a MOS6581 fitted with 470pF capacitors. The function // mapping FC to cutoff frequency has the shape of the tanh function, with // a discontinuity at FCHI = 0x80. // In contrast, the MOS8580 almost perfectly corresponds with the // specification of a linear mapping from 30Hz to 12kHz. // // The mappings have been measured by feeding the SID with an external // signal since the chip itself is incapable of generating waveforms of // higher fundamental frequency than 4kHz. It is best to use the bandpass // output at full resonance to pick out the cutoff frequency at any given // FC setting. // // The mapping function is specified with spline interpolation points and // the function values are retrieved via table lookup. // // NB! Cutoff frequency characteristics may vary, we have modeled two // particular Commodore 64s. fc_point Filter::f0_points_6581[] = { // FC f FCHI FCLO // ---------------------------- { 0, 220 }, // 0x00 - repeated end point { 0, 220 }, // 0x00 { 128, 230 }, // 0x10 { 256, 250 }, // 0x20 { 384, 300 }, // 0x30 { 512, 420 }, // 0x40 { 640, 780 }, // 0x50 { 768, 1600 }, // 0x60 { 832, 2300 }, // 0x68 { 896, 3200 }, // 0x70 { 960, 4300 }, // 0x78 { 992, 5000 }, // 0x7c { 1008, 5400 }, // 0x7e { 1016, 5700 }, // 0x7f { 1023, 6000 }, // 0x7f 0x07 { 1023, 6000 }, // 0x7f 0x07 - discontinuity { 1024, 4600 }, // 0x80 - { 1024, 4600 }, // 0x80 { 1032, 4800 }, // 0x81 { 1056, 5300 }, // 0x84 { 1088, 6000 }, // 0x88 { 1120, 6600 }, // 0x8c { 1152, 7200 }, // 0x90 { 1280, 9500 }, // 0xa0 { 1408, 12000 }, // 0xb0 { 1536, 14500 }, // 0xc0 { 1664, 16000 }, // 0xd0 { 1792, 17100 }, // 0xe0 { 1920, 17700 }, // 0xf0 { 2047, 18000 }, // 0xff 0x07 { 2047, 18000 } // 0xff 0x07 - repeated end point }; fc_point Filter::f0_points_8580[] = { // FC f FCHI FCLO // ---------------------------- { 0, 0 }, // 0x00 - repeated end point { 0, 0 }, // 0x00 { 128, 800 }, // 0x10 { 256, 1600 }, // 0x20 { 384, 2500 }, // 0x30 { 512, 3300 }, // 0x40 { 640, 4100 }, // 0x50 { 768, 4800 }, // 0x60 { 896, 5600 }, // 0x70 { 1024, 6500 }, // 0x80 { 1152, 7500 }, // 0x90 { 1280, 8400 }, // 0xa0 { 1408, 9200 }, // 0xb0 { 1536, 9800 }, // 0xc0 { 1664, 10500 }, // 0xd0 { 1792, 11000 }, // 0xe0 { 1920, 11700 }, // 0xf0 { 2047, 12500 }, // 0xff 0x07 { 2047, 12500 } // 0xff 0x07 - repeated end point }; // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- Filter::Filter() { fc = 0; res = 0; filt = 0; voice3off = 0; hp_bp_lp = 0; vol = 0; // State of filter. Vhp = 0; Vbp = 0; Vlp = 0; Vnf = 0; enable_filter(true); // Create mappings from FC to cutoff frequency. interpolate(f0_points_6581, f0_points_6581 + sizeof(f0_points_6581)/sizeof(*f0_points_6581) - 1, PointPlotter(f0_6581), 1.0); interpolate(f0_points_8580, f0_points_8580 + sizeof(f0_points_8580)/sizeof(*f0_points_8580) - 1, PointPlotter(f0_8580), 1.0); set_chip_model(MOS6581); } // ---------------------------------------------------------------------------- // Enable filter. // ---------------------------------------------------------------------------- void Filter::enable_filter(bool enable) { enabled = enable; } // ---------------------------------------------------------------------------- // Set chip model. // ---------------------------------------------------------------------------- void Filter::set_chip_model(chip_model model) { if (model == MOS6581) { // The mixer has a small input DC offset. This is found as follows: // // The "zero" output level of the mixer measured on the SID audio // output pin is 5.50V at zero volume, and 5.44 at full // volume. This yields a DC offset of (5.44V - 5.50V) = -0.06V. // // The DC offset is thus -0.06V/1.05V ~ -1/18 of the dynamic range // of one voice. See voice.cc for measurement of the dynamic // range. mixer_DC = -0xfff*0xff/18 >> 7; f0 = f0_6581; f0_points = f0_points_6581; f0_count = sizeof(f0_points_6581)/sizeof(*f0_points_6581); } else { // No DC offsets in the MOS8580. mixer_DC = 0; f0 = f0_8580; f0_points = f0_points_8580; f0_count = sizeof(f0_points_8580)/sizeof(*f0_points_8580); } set_w0(); set_Q(); } // ---------------------------------------------------------------------------- // SID reset. // ---------------------------------------------------------------------------- void Filter::reset() { fc = 0; res = 0; filt = 0; voice3off = 0; hp_bp_lp = 0; vol = 0; // State of filter. Vhp = 0; Vbp = 0; Vlp = 0; Vnf = 0; set_w0(); set_Q(); } // ---------------------------------------------------------------------------- // Register functions. // ---------------------------------------------------------------------------- void Filter::writeFC_LO(reg8 fc_lo) { fc = ( fc & 0x7f8 ) | ( fc_lo & 0x007 ); set_w0(); } void Filter::writeFC_HI(reg8 fc_hi) { fc = ( (fc_hi << 3) & 0x7f8 ) | ( fc & 0x007 ); set_w0(); } void Filter::writeRES_FILT(reg8 res_filt) { res = (res_filt >> 4) & 0x0f; set_Q(); filt = res_filt & 0x0f; } void Filter::writeMODE_VOL(reg8 mode_vol) { voice3off = mode_vol & 0x80; hp_bp_lp = (mode_vol >> 4) & 0x07; vol = mode_vol & 0x0f; } // Set filter cutoff frequency. void Filter::set_w0() { const double pi = 3.1415926535897932385; // Multiply with 1.048576 to facilitate division by 1 000 000 by right- // shifting 20 times (2 ^ 20 = 1048576). w0 = static_cast(2*pi*f0[fc]*1.048576); // Limit f0 to 16kHz to keep 1 cycle filter stable. const sound_sample w0_max_1 = static_cast(2*pi*16000*1.048576); w0_ceil_1 = w0 <= w0_max_1 ? w0 : w0_max_1; // Limit f0 to 4kHz to keep delta_t cycle filter stable. const sound_sample w0_max_dt = static_cast(2*pi*4000*1.048576); w0_ceil_dt = w0 <= w0_max_dt ? w0 : w0_max_dt; } // Set filter resonance. void Filter::set_Q() { // Q is controlled linearly by res. Q has approximate range [0.707, 1.7]. // As resonance is increased, the filter must be clocked more often to keep // stable. // The coefficient 1024 is dispensed of later by right-shifting 10 times // (2 ^ 10 = 1024). _1024_div_Q = static_cast(1024.0/(0.707 + 1.0*res/0x0f)); } // ---------------------------------------------------------------------------- // Spline functions. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Return the array of spline interpolation points used to map the FC register // to filter cutoff frequency. // ---------------------------------------------------------------------------- void Filter::fc_default(const fc_point*& points, int& count) { points = f0_points; count = f0_count; } // ---------------------------------------------------------------------------- // Given an array of interpolation points p with n points, the following // statement will specify a new FC mapping: // interpolate(p, p + n - 1, filter.fc_plotter(), 1.0); // Note that the x range of the interpolation points *must* be [0, 2047], // and that additional end points *must* be present since the end points // are not interpolated. // ---------------------------------------------------------------------------- PointPlotter Filter::fc_plotter() { return PointPlotter(f0); } lmms-1.1.3/plugins/sid/filter.h000066400000000000000000000334231247673406200164020ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __FILTER_H__ #define __FILTER_H__ #include "siddefs.h" #include "spline.h" // ---------------------------------------------------------------------------- // The SID filter is modeled with a two-integrator-loop biquadratic filter, // which has been confirmed by Bob Yannes to be the actual circuit used in // the SID chip. // // Measurements show that excellent emulation of the SID filter is achieved, // except when high resonance is combined with high sustain levels. // In this case the SID op-amps are performing less than ideally and are // causing some peculiar behavior of the SID filter. This however seems to // have more effect on the overall amplitude than on the color of the sound. // // The theory for the filter circuit can be found in "Microelectric Circuits" // by Adel S. Sedra and Kenneth C. Smith. // The circuit is modeled based on the explanation found there except that // an additional inverter is used in the feedback from the bandpass output, // allowing the summer op-amp to operate in single-ended mode. This yields // inverted filter outputs with levels independent of Q, which corresponds with // the results obtained from a real SID. // // We have been able to model the summer and the two integrators of the circuit // to form components of an IIR filter. // Vhp is the output of the summer, Vbp is the output of the first integrator, // and Vlp is the output of the second integrator in the filter circuit. // // According to Bob Yannes, the active stages of the SID filter are not really // op-amps. Rather, simple NMOS inverters are used. By biasing an inverter // into its region of quasi-linear operation using a feedback resistor from // input to output, a MOS inverter can be made to act like an op-amp for // small signals centered around the switching threshold. // // Qualified guesses at SID filter schematics are depicted below. // // SID filter // ---------- // // ----------------------------------------------- // | | // | ---Rq-- | // | | | | // | --------------|--R-----[A>--|--R-----[A>--| // | | | | // vi -----R1-- | | | // // vhp vbp vlp // // // vi - input voltage // vhp - highpass output // vbp - bandpass output // vlp - lowpass output // [A> - op-amp // R1 - summer resistor // Rq - resistor array controlling resonance (4 resistors) // R - NMOS FET voltage controlled resistor controlling cutoff frequency // Rs - shunt resitor // C - capacitor // // // // SID integrator // -------------- // // V+ // // | // | // -----| // | | // | ||-- // -|| // ---C--- ||-> // | | | // |---Rs-----------|---- vo // | | // | ||-- // vi ---- -----|------------|| // | ^ | ||-> // |___| | | // ----- | | // | | | // |---R2-- | // | // R1 V- // | // | // // Vw // // ---------------------------------------------------------------------------- class Filter { public: Filter(); void enable_filter(bool enable); void set_chip_model(chip_model model); RESID_INLINE void clock(sound_sample voice1, sound_sample voice2, sound_sample voice3, sound_sample ext_in); RESID_INLINE void clock(cycle_count delta_t, sound_sample voice1, sound_sample voice2, sound_sample voice3, sound_sample ext_in); void reset(); // Write registers. void writeFC_LO(reg8); void writeFC_HI(reg8); void writeRES_FILT(reg8); void writeMODE_VOL(reg8); // SID audio output (16 bits). sound_sample output(); // Spline functions. void fc_default(const fc_point*& points, int& count); PointPlotter fc_plotter(); protected: void set_w0(); void set_Q(); // Filter enabled. bool enabled; // Filter cutoff frequency. reg12 fc; // Filter resonance. reg8 res; // Selects which inputs to route through filter. reg8 filt; // Switch voice 3 off. reg8 voice3off; // Highpass, bandpass, and lowpass filter modes. reg8 hp_bp_lp; // Output master volume. reg4 vol; // Mixer DC offset. sound_sample mixer_DC; // State of filter. sound_sample Vhp; // highpass sound_sample Vbp; // bandpass sound_sample Vlp; // lowpass sound_sample Vnf; // not filtered // Cutoff frequency, resonance. sound_sample w0, w0_ceil_1, w0_ceil_dt; sound_sample _1024_div_Q; // Cutoff frequency tables. // FC is an 11 bit register. sound_sample f0_6581[2048]; sound_sample f0_8580[2048]; sound_sample* f0; static fc_point f0_points_6581[]; static fc_point f0_points_8580[]; fc_point* f0_points; int f0_count; friend class cSID; }; // ---------------------------------------------------------------------------- // Inline functions. // The following functions are defined inline because they are called every // time a sample is calculated. // ---------------------------------------------------------------------------- #if RESID_INLINING || defined(__FILTER_CC__) // ---------------------------------------------------------------------------- // SID clocking - 1 cycle. // ---------------------------------------------------------------------------- RESID_INLINE void Filter::clock(sound_sample voice1, sound_sample voice2, sound_sample voice3, sound_sample ext_in) { // Scale each voice down from 20 to 13 bits. voice1 >>= 7; voice2 >>= 7; // NB! Voice 3 is not silenced by voice3off if it is routed through // the filter. if (voice3off && !(filt & 0x04)) { voice3 = 0; } else { voice3 >>= 7; } ext_in >>= 7; // This is handy for testing. if (!enabled) { Vnf = voice1 + voice2 + voice3 + ext_in; Vhp = Vbp = Vlp = 0; return; } // Route voices into or around filter. // The code below is expanded to a switch for faster execution. // (filt1 ? Vi : Vnf) += voice1; // (filt2 ? Vi : Vnf) += voice2; // (filt3 ? Vi : Vnf) += voice3; sound_sample Vi; switch (filt) { default: case 0x0: Vi = 0; Vnf = voice1 + voice2 + voice3 + ext_in; break; case 0x1: Vi = voice1; Vnf = voice2 + voice3 + ext_in; break; case 0x2: Vi = voice2; Vnf = voice1 + voice3 + ext_in; break; case 0x3: Vi = voice1 + voice2; Vnf = voice3 + ext_in; break; case 0x4: Vi = voice3; Vnf = voice1 + voice2 + ext_in; break; case 0x5: Vi = voice1 + voice3; Vnf = voice2 + ext_in; break; case 0x6: Vi = voice2 + voice3; Vnf = voice1 + ext_in; break; case 0x7: Vi = voice1 + voice2 + voice3; Vnf = ext_in; break; case 0x8: Vi = ext_in; Vnf = voice1 + voice2 + voice3; break; case 0x9: Vi = voice1 + ext_in; Vnf = voice2 + voice3; break; case 0xa: Vi = voice2 + ext_in; Vnf = voice1 + voice3; break; case 0xb: Vi = voice1 + voice2 + ext_in; Vnf = voice3; break; case 0xc: Vi = voice3 + ext_in; Vnf = voice1 + voice2; break; case 0xd: Vi = voice1 + voice3 + ext_in; Vnf = voice2; break; case 0xe: Vi = voice2 + voice3 + ext_in; Vnf = voice1; break; case 0xf: Vi = voice1 + voice2 + voice3 + ext_in; Vnf = 0; break; } // delta_t = 1 is converted to seconds given a 1MHz clock by dividing // with 1 000 000. // Calculate filter outputs. // Vhp = Vbp/Q - Vlp - Vi; // dVbp = -w0*Vhp*dt; // dVlp = -w0*Vbp*dt; sound_sample dVbp = (w0_ceil_1*Vhp >> 20); sound_sample dVlp = (w0_ceil_1*Vbp >> 20); Vbp -= dVbp; Vlp -= dVlp; Vhp = (Vbp*_1024_div_Q >> 10) - Vlp - Vi; } // ---------------------------------------------------------------------------- // SID clocking - delta_t cycles. // ---------------------------------------------------------------------------- RESID_INLINE void Filter::clock(cycle_count delta_t, sound_sample voice1, sound_sample voice2, sound_sample voice3, sound_sample ext_in) { // Scale each voice down from 20 to 13 bits. voice1 >>= 7; voice2 >>= 7; // NB! Voice 3 is not silenced by voice3off if it is routed through // the filter. if (voice3off && !(filt & 0x04)) { voice3 = 0; } else { voice3 >>= 7; } ext_in >>= 7; // Enable filter on/off. // This is not really part of SID, but is useful for testing. // On slow CPUs it may be necessary to bypass the filter to lower the CPU // load. if (!enabled) { Vnf = voice1 + voice2 + voice3 + ext_in; Vhp = Vbp = Vlp = 0; return; } // Route voices into or around filter. // The code below is expanded to a switch for faster execution. // (filt1 ? Vi : Vnf) += voice1; // (filt2 ? Vi : Vnf) += voice2; // (filt3 ? Vi : Vnf) += voice3; sound_sample Vi; switch (filt) { default: case 0x0: Vi = 0; Vnf = voice1 + voice2 + voice3 + ext_in; break; case 0x1: Vi = voice1; Vnf = voice2 + voice3 + ext_in; break; case 0x2: Vi = voice2; Vnf = voice1 + voice3 + ext_in; break; case 0x3: Vi = voice1 + voice2; Vnf = voice3 + ext_in; break; case 0x4: Vi = voice3; Vnf = voice1 + voice2 + ext_in; break; case 0x5: Vi = voice1 + voice3; Vnf = voice2 + ext_in; break; case 0x6: Vi = voice2 + voice3; Vnf = voice1 + ext_in; break; case 0x7: Vi = voice1 + voice2 + voice3; Vnf = ext_in; break; case 0x8: Vi = ext_in; Vnf = voice1 + voice2 + voice3; break; case 0x9: Vi = voice1 + ext_in; Vnf = voice2 + voice3; break; case 0xa: Vi = voice2 + ext_in; Vnf = voice1 + voice3; break; case 0xb: Vi = voice1 + voice2 + ext_in; Vnf = voice3; break; case 0xc: Vi = voice3 + ext_in; Vnf = voice1 + voice2; break; case 0xd: Vi = voice1 + voice3 + ext_in; Vnf = voice2; break; case 0xe: Vi = voice2 + voice3 + ext_in; Vnf = voice1; break; case 0xf: Vi = voice1 + voice2 + voice3 + ext_in; Vnf = 0; break; } // Maximum delta cycles for the filter to work satisfactorily under current // cutoff frequency and resonance constraints is approximately 8. cycle_count delta_t_flt = 8; while (delta_t) { if (delta_t < delta_t_flt) { delta_t_flt = delta_t; } // delta_t is converted to seconds given a 1MHz clock by dividing // with 1 000 000. This is done in two operations to avoid integer // multiplication overflow. // Calculate filter outputs. // Vhp = Vbp/Q - Vlp - Vi; // dVbp = -w0*Vhp*dt; // dVlp = -w0*Vbp*dt; sound_sample w0_delta_t = w0_ceil_dt*delta_t_flt >> 6; sound_sample dVbp = (w0_delta_t*Vhp >> 14); sound_sample dVlp = (w0_delta_t*Vbp >> 14); Vbp -= dVbp; Vlp -= dVlp; Vhp = (Vbp*_1024_div_Q >> 10) - Vlp - Vi; delta_t -= delta_t_flt; } } // ---------------------------------------------------------------------------- // SID audio output (20 bits). // ---------------------------------------------------------------------------- RESID_INLINE sound_sample Filter::output() { // This is handy for testing. if (!enabled) { return (Vnf + mixer_DC)*static_cast(vol); } // Mix highpass, bandpass, and lowpass outputs. The sum is not // weighted, this can be confirmed by sampling sound output for // e.g. bandpass, lowpass, and bandpass+lowpass from a SID chip. // The code below is expanded to a switch for faster execution. // if (hp) Vf += Vhp; // if (bp) Vf += Vbp; // if (lp) Vf += Vlp; sound_sample Vf; switch (hp_bp_lp) { default: case 0x0: Vf = 0; break; case 0x1: Vf = Vlp; break; case 0x2: Vf = Vbp; break; case 0x3: Vf = Vlp + Vbp; break; case 0x4: Vf = Vhp; break; case 0x5: Vf = Vlp + Vhp; break; case 0x6: Vf = Vbp + Vhp; break; case 0x7: Vf = Vlp + Vbp + Vhp; break; } // Sum non-filtered and filtered output. // Multiply the sum with volume. return (Vnf + Vf + mixer_DC)*static_cast(vol); } #endif // RESID_INLINING || defined(__FILTER_CC__) #endif // not __FILTER_H__ lmms-1.1.3/plugins/sid/filter.png000066400000000000000000000026161247673406200167370ustar00rootroot00000000000000PNG  IHDR( MsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlefilter buttonKvtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/ IDAT8u]leV 8ٜ(N h0j !(\HBwx151ʺ/6q`7̀ۺvm۾e>o9Σo1h@pO,\s׋t&U2&G92=@^@o7"5kQj***f&#N?yt}v4KcPHvikw8 Y]ʹXƱ J/ 8[^w[OımZȶD!"ىXyd8ɿ7+1h}A 1(~~vIENDB`lmms-1.1.3/plugins/sid/filterred.png000066400000000000000000000026441247673406200174330ustar00rootroot00000000000000PNG  IHDR( MsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlefilter buttonKvtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/ IDAT8u]lTEg.nJ(`ڊbQ4bb4h%j$!7_|?(hmPhJ+B[vnps̙̙Zc (]L)-*xe֝Q0A{:}?QUUUP(bD8#MU8x#;Y b0R3@[oKv5` e~vٙ BV8<ѵM(pkbb;;<6Nx'hmk8Wܽ|뚚طd8\,ʷDa#@k7Esl{ov-o@:D=]۲Սk|_ {"I㚵$\xuMͤS)n]T45Ǖ4DuW*Y˲eX@yspsgH +/qmx_Ci?|G %ҰZH;U}R0“&hDEXPR *PopQMy) kJZ7oE lE}}rTZP6by$J`U[]ͻ1>>V(I X5Cu`TtPkc]#P;=y<Tatd7\n+%"2Xd$\ Nau#>WR*Ŗƺf c4ɞ8' ^zmV24x.ܣ0*8, cfP`ނ c n_@;YNB0}'n 'qT-j d)uu,OF"艓Np 5\jgO۲QѢ\ Ԙb'mzS8תNZozR3SvA;1רP" NR܁x%~#a:]ܔ-7j^ØSt$?dz&uIENDB`lmms-1.1.3/plugins/sid/hp.png000066400000000000000000000020511247673406200160520ustar00rootroot00000000000000PNG  IHDR x0}usBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlehp buttonBBtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT8}KTq?7wqFf2+Ai/)#"\DV-k-V= -Z(BȠ ]O1V֘X:SNsgN;#D9;/QUDDzv,tJ*,c*TPhhZ ̪p &B0k-*AVlJ-ꢏ1۵H*Z 9fe 7 "*ލ}.R4x^#A1ݙ~6L M|I'c3O#Cc`v@ =g >{rb\|n#6=ͦI3Ú.VܙSumنY)4>T6eMϯ9=4h`V&}]ҳtC#1e'z(` P`TWK0x: 8 Ϫy7ĀcyG## p1(\tѷ ADS&H%\X,”F !bLHVV-_ D*21Ժe"Dt2j1n/*4$=SzFGސM|.1-ofӥի.#\b28SUu}i KNEw2 +kDU>|W=b BIENDB`lmms-1.1.3/plugins/sid/hpred.png000066400000000000000000000020571247673406200165530ustar00rootroot00000000000000PNG  IHDR x0}usBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlehp buttonBBtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT8}oQ/3|PJQQњEi4XY D"VDTQMhLg{,&N'=U@DkW[pA :N024ȇAnº:=ω{2kOCYOFTΩ"oԏ}'a-elT6miasK+3V]ϙs0(Uڐ{}?{ Hqs3BFPYu$!) aX@!c' ˖vC-f~,OrDfuxNE$x WH$ubxt@90/y5Ǎ*A +/>^GgQ}=~ Z#t IZ'kUFIENDB`lmms-1.1.3/plugins/sid/logo.png000066400000000000000000000055031247673406200164100ustar00rootroot00000000000000PNG  IHDR00WsRGB pHYs  tIME 0"qtEXtCommentCreated with GIMPWbKGD322W IDATh{p޲pIX b $ %Vkzر Tv$֊"HqڪVG#$߉Y݀3=3~w~99=?n^ ȅ8\#;WϷٍ#x׊EfҞI/.~(w`=}8$"F*,.Eޗ"7M8382$reȖ0"2$$rb?iU? w*;_HbDD rF1F om<_ʩ|)"d(#plFT0IO×zQ)C F  QaD %FOV\x^=F(!#2dHx[E[Dz[;9@Jb Cw0 pz`#1ň*#*0tL_f3E>QBs i2̊>N';߇?=b U2Jd,|Gp y;G@L3R},>(I̐b7dpRۀncwl%V >s$fI̗a60'vg!G9xڀC@ 0$H3M}miipN; 3>@Ddb L]ˋ Of 8< p`O7H=~ƕvx;@Dlc՝t%xx-VWriqߝw.f% CemDu;e(|Gxz_N?O@(ڮH2t~<ámSi6gj{"06swĸ"w} h}@K.c_נZ <^; iRkΣcoW1[q# CYM7ޟ}FZHEr/rS.o[;9W5OoǘKG`!_ !#B680R4 '(\S2']M]. j#Q0Ĉ!J8 RU]0 H`r)L}ר+هŀ[ ,11~TTkp,@6iq!q]4@ڐKhLhKsY[DVE?4ZlZlYV,gdW\: R&0{/QaHry:d: RN =5h 'Hǡ/Ћ@%3G'@"%6_t(ôIFId\`?IxeH)xX\GV=İ<'t;[NqӘp"ֺm)=xQH XkG]Y+U_ Hޖ&r7fwN%e$b"o,T>x7i8Ru Ժ@Dj}^IFR% m,8`^FֿmJEtt NkS1A,VԈ?9@or1̍. \VBȄTU+*8 Hvrx]&a:])9G #qMi}VkBhJ\Ox%42|}7˛`*󓜈"o 4j^)SJTx`|]ot 0p::r_b:C/u;k+sV׳t/aV8N"Ε_ny=gÀI7Jl& n0Y WP\nͧv kЖȐl{f:n띋A H SRSOiM=g33k30׆ao'~JwQ 7 ˸b@6@Y N&+{䘸(&.yg`ӱ on"ы۸ZF dȑ!~do+/YqW&$GAXƗҚ#e"sw 6MGp/[+y@ µ!J^ZY\jK(c&ԋcEpۭ$tO_w> p=C6F-@{tS0 `ܰ(}l/rîB<¸7Z,s4VhlJb69bCeׄ H@RU7%p[..qʬCDbA1O=lVM)h OI'm;@b2k5[9bla*_Y+' nw!{!]C NF{7|Ogǚc l}`VVoV[Kr , xxK:BZ"!IENDB`lmms-1.1.3/plugins/sid/lp.png000066400000000000000000000017131247673406200160620ustar00rootroot00000000000000PNG  IHDR fMsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlelp buttonNtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/KIDAT8ekSQ?$}mI?8C+X b:8 :::9 "(H F۔$5iK^=Kó\9{_Y+* @tZADE5vo s` #(ASi1ԂiȤ>p4uTm3U'}.sgVYk,*X:l٤Rk994 f(~WaPkz뒩՘\_Tش1PW/"/Dt8l{}\. | C>-_UGEgM]YCT *W*a8؎U%6fOR"¨fuh mk{au6c뺴}?!߾?ʥHwFdӼ)xKÙSBb!޼lR.H] jIIAnd\vXB*G|c{E"}danF#Ǩ*ahZ%8#EV7G?zn5F:g#cI8x@G/DIENDB`lmms-1.1.3/plugins/sid/lpred.png000066400000000000000000000017301247673406200165540ustar00rootroot00000000000000PNG  IHDR fMsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlelp buttonNtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/XIDAT8];kTQ8DS| &q2E?F_`-"XH QA|6h Q$*qѹ{[;79Xgdz28*{UpO`f`N B3Z*LaAhwGU Fwm$@RcXa eB"U@8q4fF9"`,@(@odpF6a2[TIszOsJx-}x=2Д*[*55NmƱ|b*#myis:athl`OIVLm;f`o6o86io6 (MZ;]ma!n}H^gTTmbTe_"{w=!h'Nhtb,oyi;HR}5yDxBR/cqD"c*2_|:PAJ%1R/ڟy%m xٷY[_dzr!M͐CXIͺYqZ5fܢ8*H;_;Gj`XIENDB`lmms-1.1.3/plugins/sid/noise.png000066400000000000000000000016171247673406200165670ustar00rootroot00000000000000PNG  IHDR sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlenoise button /tEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/ IDAT(Oq?{xјPjd ZR&Ơatp@gn:9 1!ĘTa'橥 4EV䆻}&wu3'-EYcLZEj<3p"ֿ͉fө)5usd2̈$x6dzFd%W'$WDptw2N=n@0 <<ΕJt8}ߟi@U/ :2J]2FF85Ƙ|RTW^r"jOթO%AG E$ trd:]Fd:*La.<>cvcyqBZ % Q-_FQZ_ vH$xVVEj*/ǙSkmi>~g\ם$r<ju~Yjqַ 5Kk[Uբ'vY.qHƌ"LMPH!<s @zw ۔OEqn~ÌWrʺVcŠsV,uYl9/AOrsL8<v.Ͼ_W`}, >ϝ // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "pot.h" reg8 Potentiometer::readPOT() { // NB! Not modeled. return 0xff; } lmms-1.1.3/plugins/sid/pot.h000066400000000000000000000021371247673406200157150ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __POT_H__ #define __POT_H__ #include "siddefs.h" class Potentiometer { public: reg8 readPOT(); }; #endif lmms-1.1.3/plugins/sid/pulse.png000066400000000000000000000015131247673406200165750ustar00rootroot00000000000000PNG  IHDR b sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlepulse buttonCF"tEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT(kQݭ,dsZ,&A,LLIJ K[TXioB@ SJbb\P;ͺw,.@"=f{3{q›7h͝ {OV3p-'IZpoEAo#uJ:}eG&+YVdYͤzO +*EjkɵƤW."ltrRnE7ދC03t051AsNwA 쟯罗דz0|*AkzI{xeP[n!͸\Θ3 ɲl.82IJmt /^{8Qثl6EQ=efK;фau׏nHZvlws:TBY_du_/#f:IENDB`lmms-1.1.3/plugins/sid/pulsered.png000066400000000000000000000015671247673406200173010ustar00rootroot00000000000000PNG  IHDR b sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlepulse buttonCF"tEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT(KTQ?;O9C !!(F El!A)@Jh'KUE 7$ 98od0lwu|ϹWf^">IYdH.=mR<#}3m~|ddOEH0@d/ a;!@Z y@u?{e ̹it@5fouvy$56j66/JTYY,Hz%ESQ4rFwu1Z$tm" ǁ`=ILop@;7\8MX*QN)% s;؇gf2LA{0-\В0+rELN2_eαlJVsx`.se9f/, ,yET_a}gG!֦̐WW&pU4TGO ܅- n #3I2f@x⧰zpɛwNoz06diJ|X&QȀxFl]՞UB.r/W\)-+j2;QJ.uvPU_ı*aᬩ+T*5[`*Fkۥ.G}H< S-y/*,xnRZ-Ed:+(]?.;ŨX, 9筲y Qy#dbCʪ#^ʺ ݸTs"ӫصo?ťR'S5kTZe՚Z"V&9\Ă܁a&&X}=]~"yr DM~<}a=%t{ϞuĢ@wpp.]q*D(+)atEy@y,F9C#O?&˧Ҳ4?f~!v~d3{anS0ߏqq z|$L,Z5D"~x(|S|A85׮Om'á?֖f؇:<1ax(U 9Q tU]1p vl S+3JDxdOK(7?&3U孺m:@x$ z: } 0"\V}T6c|O(㼱c' Yl_g{r]B|{>˗{63̥ cХb7+kRZ"c|tЮ5!M(Ϗrs*=RG:1*'ˍ ssl't"BG!z M槳pljlQ~F cpTqbxA,LT;#3s` 5m!ҹ0RlbU~]'%I/1&Eq zѤ )#GIENDB`lmms-1.1.3/plugins/sid/saw.png000066400000000000000000000014221247673406200162360ustar00rootroot00000000000000PNG  IHDR ІsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlesaw button"ntEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT(?kSQ$j!pI+`4]:֩[A߁/{ZZ(XiX^1Cby8\UU wnȯͪjBvu.7O7ק^\`Zƴ(64]z v6x`-w(Jkq?dya1KSTE hYD#5f{ёKαgE#Ѷ :1p6vZCnñyNFvƟ^pu$|$klgY՘] R0+F04M8Eˀ~7˲-ãKwNT4kޟ/a´ IENDB`lmms-1.1.3/plugins/sid/sawred.png000066400000000000000000000014751247673406200167410ustar00rootroot00000000000000PNG  IHDR ІsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlesaw button"ntEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT(OkA3jmD`na&ViA$ 4W=瞄G_JЋ*z(l&g~ϏQUjIDC"?썫DUA0CՍnsvP*5DAp\~C=ôUb]RN#6xkaX`rq~" AQq(,KF"\""5kDPc:^m@P a"ѦqR@e:VGoߌʾ.0J^=֣B 8qm'6p8GNYpfd#LUwKAs`ڏ,ۼ 7gkt4w7x`9>UT*9kiȭ5UU; mbIENDB`lmms-1.1.3/plugins/sid/sid.cc000066400000000000000000000736671247673406200160500ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "sid.h" #include const int cSID::FIR_N = 125; const int cSID::FIR_RES_INTERPOLATE = 285; const int cSID::FIR_RES_FAST = 51473; const int cSID::FIR_SHIFT = 15; const int cSID::RINGSIZE = 16384; // Fixpoint constants (16.16 bits). const int cSID::FIXP_SHIFT = 16; const int cSID::FIXP_MASK = 0xffff; // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- cSID::cSID() { // Initialize pointers. sample = 0; fir = 0; voice[0].set_sync_source(&voice[2]); voice[1].set_sync_source(&voice[0]); voice[2].set_sync_source(&voice[1]); set_sampling_parameters(985248, SAMPLE_FAST, 44100); bus_value = 0; bus_value_ttl = 0; ext_in = 0; } // ---------------------------------------------------------------------------- // Destructor. // ---------------------------------------------------------------------------- cSID::~cSID() { delete[] sample; delete[] fir; } // ---------------------------------------------------------------------------- // Set chip model. // ---------------------------------------------------------------------------- void cSID::set_chip_model(chip_model model) { for (int i = 0; i < 3; i++) { voice[i].set_chip_model(model); } filter.set_chip_model(model); extfilt.set_chip_model(model); } // ---------------------------------------------------------------------------- // SID reset. // ---------------------------------------------------------------------------- void cSID::reset() { for (int i = 0; i < 3; i++) { voice[i].reset(); } filter.reset(); extfilt.reset(); bus_value = 0; bus_value_ttl = 0; } // ---------------------------------------------------------------------------- // Write 16-bit sample to audio input. // NB! The caller is responsible for keeping the value within 16 bits. // Note that to mix in an external audio signal, the signal should be // resampled to 1MHz first to avoid sampling noise. // ---------------------------------------------------------------------------- void cSID::input(int sample) { // Voice outputs are 20 bits. Scale up to match three voices in order // to facilitate simulation of the MOS8580 "digi boost" hardware hack. ext_in = (sample << 4)*3; } // ---------------------------------------------------------------------------- // Read sample from audio output. // Both 16-bit and n-bit output is provided. // ---------------------------------------------------------------------------- int cSID::output() { const int range = 1 << 16; const int half = range >> 1; int sample = extfilt.output()/((4095*255 >> 7)*3*15*2/range); if (sample >= half) { return half - 1; } if (sample < -half) { return -half; } return sample; } int cSID::output(int bits) { const int range = 1 << bits; const int half = range >> 1; int sample = extfilt.output()/((4095*255 >> 7)*3*15*2/range); if (sample >= half) { return half - 1; } if (sample < -half) { return -half; } return sample; } // ---------------------------------------------------------------------------- // Read registers. // // Reading a write only register returns the last byte written to any SID // register. The individual bits in this value start to fade down towards // zero after a few cycles. All bits reach zero within approximately // $2000 - $4000 cycles. // It has been claimed that this fading happens in an orderly fashion, however // sampling of write only registers reveals that this is not the case. // NB! This is not correctly modeled. // The actual use of write only registers has largely been made in the belief // that all SID registers are readable. To support this belief the read // would have to be done immediately after a write to the same register // (remember that an intermediate write to another register would yield that // value instead). With this in mind we return the last value written to // any SID register for $2000 cycles without modeling the bit fading. // ---------------------------------------------------------------------------- reg8 cSID::read(reg8 offset) { switch (offset) { case 0x19: return potx.readPOT(); case 0x1a: return poty.readPOT(); case 0x1b: return voice[2].wave.readOSC(); case 0x1c: return voice[2].envelope.readENV(); default: return bus_value; } } // ---------------------------------------------------------------------------- // Write registers. // ---------------------------------------------------------------------------- void cSID::write(reg8 offset, reg8 value) { bus_value = value; bus_value_ttl = 0x2000; switch (offset) { case 0x00: voice[0].wave.writeFREQ_LO(value); break; case 0x01: voice[0].wave.writeFREQ_HI(value); break; case 0x02: voice[0].wave.writePW_LO(value); break; case 0x03: voice[0].wave.writePW_HI(value); break; case 0x04: voice[0].writeCONTROL_REG(value); break; case 0x05: voice[0].envelope.writeATTACK_DECAY(value); break; case 0x06: voice[0].envelope.writeSUSTAIN_RELEASE(value); break; case 0x07: voice[1].wave.writeFREQ_LO(value); break; case 0x08: voice[1].wave.writeFREQ_HI(value); break; case 0x09: voice[1].wave.writePW_LO(value); break; case 0x0a: voice[1].wave.writePW_HI(value); break; case 0x0b: voice[1].writeCONTROL_REG(value); break; case 0x0c: voice[1].envelope.writeATTACK_DECAY(value); break; case 0x0d: voice[1].envelope.writeSUSTAIN_RELEASE(value); break; case 0x0e: voice[2].wave.writeFREQ_LO(value); break; case 0x0f: voice[2].wave.writeFREQ_HI(value); break; case 0x10: voice[2].wave.writePW_LO(value); break; case 0x11: voice[2].wave.writePW_HI(value); break; case 0x12: voice[2].writeCONTROL_REG(value); break; case 0x13: voice[2].envelope.writeATTACK_DECAY(value); break; case 0x14: voice[2].envelope.writeSUSTAIN_RELEASE(value); break; case 0x15: filter.writeFC_LO(value); break; case 0x16: filter.writeFC_HI(value); break; case 0x17: filter.writeRES_FILT(value); break; case 0x18: filter.writeMODE_VOL(value); break; default: break; } } // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- cSID::State::State() { int i; for (i = 0; i < 0x20; i++) { sid_register[i] = 0; } bus_value = 0; bus_value_ttl = 0; for (i = 0; i < 3; i++) { accumulator[i] = 0; shift_register[i] = 0x7ffff8; rate_counter[i] = 0; rate_counter_period[i] = 9; exponential_counter[i] = 0; exponential_counter_period[i] = 1; envelope_counter[i] = 0; envelope_state[i] = EnvelopeGenerator::RELEASE; hold_zero[i] = true; } } // ---------------------------------------------------------------------------- // Read state. // ---------------------------------------------------------------------------- cSID::State cSID::read_state() { State state; int i, j; for (i = 0, j = 0; i < 3; i++, j += 7) { WaveformGenerator& wave = voice[i].wave; EnvelopeGenerator& envelope = voice[i].envelope; state.sid_register[j + 0] = wave.freq & 0xff; state.sid_register[j + 1] = wave.freq >> 8; state.sid_register[j + 2] = wave.pw & 0xff; state.sid_register[j + 3] = wave.pw >> 8; state.sid_register[j + 4] = (wave.waveform << 4) | (wave.test ? 0x08 : 0) | (wave.ring_mod ? 0x04 : 0) | (wave.sync ? 0x02 : 0) | (envelope.gate ? 0x01 : 0); state.sid_register[j + 5] = (envelope.attack << 4) | envelope.decay; state.sid_register[j + 6] = (envelope.sustain << 4) | envelope.release; } state.sid_register[j++] = filter.fc & 0x007; state.sid_register[j++] = filter.fc >> 3; state.sid_register[j++] = (filter.res << 4) | filter.filt; state.sid_register[j++] = (filter.voice3off ? 0x80 : 0) | (filter.hp_bp_lp << 4) | filter.vol; // These registers are superfluous, but included for completeness. for (; j < 0x1d; j++) { state.sid_register[j] = read(j); } for (; j < 0x20; j++) { state.sid_register[j] = 0; } state.bus_value = bus_value; state.bus_value_ttl = bus_value_ttl; for (i = 0; i < 3; i++) { state.accumulator[i] = voice[i].wave.accumulator; state.shift_register[i] = voice[i].wave.shift_register; state.rate_counter[i] = voice[i].envelope.rate_counter; state.rate_counter_period[i] = voice[i].envelope.rate_period; state.exponential_counter[i] = voice[i].envelope.exponential_counter; state.exponential_counter_period[i] = voice[i].envelope.exponential_counter_period; state.envelope_counter[i] = voice[i].envelope.envelope_counter; state.envelope_state[i] = voice[i].envelope.state; state.hold_zero[i] = voice[i].envelope.hold_zero; } return state; } // ---------------------------------------------------------------------------- // Write state. // ---------------------------------------------------------------------------- void cSID::write_state(const State& state) { int i; for (i = 0; i <= 0x18; i++) { write(i, state.sid_register[i]); } bus_value = state.bus_value; bus_value_ttl = state.bus_value_ttl; for (i = 0; i < 3; i++) { voice[i].wave.accumulator = state.accumulator[i]; voice[i].wave.shift_register = state.shift_register[i]; voice[i].envelope.rate_counter = state.rate_counter[i]; voice[i].envelope.rate_period = state.rate_counter_period[i]; voice[i].envelope.exponential_counter = state.exponential_counter[i]; voice[i].envelope.exponential_counter_period = state.exponential_counter_period[i]; voice[i].envelope.envelope_counter = state.envelope_counter[i]; voice[i].envelope.state = state.envelope_state[i]; voice[i].envelope.hold_zero = state.hold_zero[i]; } } // ---------------------------------------------------------------------------- // Enable filter. // ---------------------------------------------------------------------------- void cSID::enable_filter(bool enable) { filter.enable_filter(enable); } // ---------------------------------------------------------------------------- // Enable external filter. // ---------------------------------------------------------------------------- void cSID::enable_external_filter(bool enable) { extfilt.enable_filter(enable); } // ---------------------------------------------------------------------------- // I0() computes the 0th order modified Bessel function of the first kind. // This function is originally from resample-1.5/filterkit.c by J. O. Smith. // ---------------------------------------------------------------------------- double cSID::I0(double x) { // Max error acceptable in I0. const double I0e = 1e-6; double sum, u, halfx, temp; int n; sum = u = n = 1; halfx = x/2.0; do { temp = halfx/n++; u *= temp*temp; sum += u; } while (u >= I0e*sum); return sum; } // ---------------------------------------------------------------------------- // Setting of SID sampling parameters. // // Use a clock freqency of 985248Hz for PAL C64, 1022730Hz for NTSC C64. // The default end of passband frequency is pass_freq = 0.9*sample_freq/2 // for sample frequencies up to ~ 44.1kHz, and 20kHz for higher sample // frequencies. // // For resampling, the ratio between the clock frequency and the sample // frequency is limited as follows: // 125*clock_freq/sample_freq < 16384 // E.g. provided a clock frequency of ~ 1MHz, the sample frequency can not // be set lower than ~ 8kHz. A lower sample frequency would make the // resampling code overfill its 16k sample ring buffer. // // The end of passband frequency is also limited: // pass_freq <= 0.9*sample_freq/2 // E.g. for a 44.1kHz sampling rate the end of passband frequency is limited // to slightly below 20kHz. This constraint ensures that the FIR table is // not overfilled. // ---------------------------------------------------------------------------- bool cSID::set_sampling_parameters(double clock_freq, sampling_method method, double sample_freq, double pass_freq, double filter_scale) { // Check resampling constraints. if (method == SAMPLE_RESAMPLE_INTERPOLATE || method == SAMPLE_RESAMPLE_FAST) { // Check whether the sample ring buffer would overfill. if (FIR_N*clock_freq/sample_freq >= RINGSIZE) { return false; } // The default passband limit is 0.9*sample_freq/2 for sample // frequencies below ~ 44.1kHz, and 20kHz for higher sample frequencies. if (pass_freq < 0) { pass_freq = 20000; if (2*pass_freq/sample_freq >= 0.9) { pass_freq = 0.9*sample_freq/2; } } // Check whether the FIR table would overfill. else if (pass_freq > 0.9*sample_freq/2) { return false; } // The filter scaling is only included to avoid clipping, so keep // it sane. if (filter_scale < 0.9 || filter_scale > 1.0) { return false; } } clock_frequency = clock_freq; sampling = method; cycles_per_sample = cycle_count(clock_freq/sample_freq*(1 << FIXP_SHIFT) + 0.5); sample_offset = 0; sample_prev = 0; // FIR initialization is only necessary for resampling. if (method != SAMPLE_RESAMPLE_INTERPOLATE && method != SAMPLE_RESAMPLE_FAST) { delete[] sample; delete[] fir; sample = 0; fir = 0; return true; } const double pi = 3.1415926535897932385; // 16 bits -> -96dB stopband attenuation. const double A = -20*log10(1.0/(1 << 16)); // A fraction of the bandwidth is allocated to the transition band, double dw = (1 - 2*pass_freq/sample_freq)*pi; // The cutoff frequency is midway through the transition band. double wc = (2*pass_freq/sample_freq + 1)*pi/2; // For calculation of beta and N see the reference for the kaiserord // function in the MATLAB Signal Processing Toolbox: // http://www.mathworks.com/access/helpdesk/help/toolbox/signal/kaiserord.html const double beta = 0.1102*(A - 8.7); const double I0beta = I0(beta); // The filter order will maximally be 124 with the current constraints. // N >= (96.33 - 7.95)/(2.285*0.1*pi) -> N >= 123 // The filter order is equal to the number of zero crossings, i.e. // it should be an even number (sinc is symmetric about x = 0). int N = int((A - 7.95)/(2.285*dw) + 0.5); N += N & 1; double f_samples_per_cycle = sample_freq/clock_freq; double f_cycles_per_sample = clock_freq/sample_freq; // The filter length is equal to the filter order + 1. // The filter length must be an odd number (sinc is symmetric about x = 0). fir_N = int(N*f_cycles_per_sample) + 1; fir_N |= 1; // We clamp the filter table resolution to 2^n, making the fixpoint // sample_offset a whole multiple of the filter table resolution. int res = method == SAMPLE_RESAMPLE_INTERPOLATE ? FIR_RES_INTERPOLATE : FIR_RES_FAST; int n = (int)ceil(log(res/f_cycles_per_sample)/log(2)); fir_RES = 1 << n; // Allocate memory for FIR tables. delete[] fir; fir = new short[fir_N*fir_RES]; // Calculate fir_RES FIR tables for linear interpolation. for (int i = 0; i < fir_RES; i++) { int fir_offset = i*fir_N + fir_N/2; double j_offset = double(i)/fir_RES; // Calculate FIR table. This is the sinc function, weighted by the // Kaiser window. for (int j = -fir_N/2; j <= fir_N/2; j++) { double jx = j - j_offset; double wt = wc*jx/f_cycles_per_sample; double temp = jx/(fir_N/2); double Kaiser = fabs(temp) <= 1 ? I0(beta*sqrt(1 - temp*temp))/I0beta : 0; double sincwt = fabs(wt) >= 1e-6 ? sin(wt)/wt : 1; double val = (1 << FIR_SHIFT)*filter_scale*f_samples_per_cycle*wc/pi*sincwt*Kaiser; fir[fir_offset + j] = short(val + 0.5); } } // Allocate sample buffer. if (!sample) { sample = new short[RINGSIZE*2]; } // Clear sample buffer. for (int j = 0; j < RINGSIZE*2; j++) { sample[j] = 0; } sample_index = 0; return true; } // ---------------------------------------------------------------------------- // Adjustment of SID sampling frequency. // // In some applications, e.g. a C64 emulator, it can be desirable to // synchronize sound with a timer source. This is supported by adjustment of // the SID sampling frequency. // // NB! Adjustment of the sampling frequency may lead to noticeable shifts in // frequency, and should only be used for interactive applications. Note also // that any adjustment of the sampling frequency will change the // characteristics of the resampling filter, since the filter is not rebuilt. // ---------------------------------------------------------------------------- void cSID::adjust_sampling_frequency(double sample_freq) { cycles_per_sample = cycle_count(clock_frequency/sample_freq*(1 << FIXP_SHIFT) + 0.5); } // ---------------------------------------------------------------------------- // Return array of default spline interpolation points to map FC to // filter cutoff frequency. // ---------------------------------------------------------------------------- void cSID::fc_default(const fc_point*& points, int& count) { filter.fc_default(points, count); } // ---------------------------------------------------------------------------- // Return FC spline plotter object. // ---------------------------------------------------------------------------- PointPlotter cSID::fc_plotter() { return filter.fc_plotter(); } // ---------------------------------------------------------------------------- // SID clocking - 1 cycle. // ---------------------------------------------------------------------------- void cSID::clock() { int i; // Age bus value. if (--bus_value_ttl <= 0) { bus_value = 0; bus_value_ttl = 0; } // Clock amplitude modulators. for (i = 0; i < 3; i++) { voice[i].envelope.clock(); } // Clock oscillators. for (i = 0; i < 3; i++) { voice[i].wave.clock(); } // Synchronize oscillators. for (i = 0; i < 3; i++) { voice[i].wave.synchronize(); } // Clock filter. filter.clock(voice[0].output(), voice[1].output(), voice[2].output(), ext_in); // Clock external filter. extfilt.clock(filter.output()); } // ---------------------------------------------------------------------------- // SID clocking - delta_t cycles. // ---------------------------------------------------------------------------- void cSID::clock(cycle_count delta_t) { int i; if (delta_t <= 0) { return; } // Age bus value. bus_value_ttl -= delta_t; if (bus_value_ttl <= 0) { bus_value = 0; bus_value_ttl = 0; } // Clock amplitude modulators. for (i = 0; i < 3; i++) { voice[i].envelope.clock(delta_t); } // Clock and synchronize oscillators. // Loop until we reach the current cycle. cycle_count delta_t_osc = delta_t; while (delta_t_osc) { cycle_count delta_t_min = delta_t_osc; // Find minimum number of cycles to an oscillator accumulator MSB toggle. // We have to clock on each MSB on / MSB off for hard sync to operate // correctly. for (i = 0; i < 3; i++) { WaveformGenerator& wave = voice[i].wave; // It is only necessary to clock on the MSB of an oscillator that is // a sync source and has freq != 0. if (!(wave.sync_dest->sync && wave.freq)) { continue; } reg16 freq = wave.freq; reg24 accumulator = wave.accumulator; // Clock on MSB off if MSB is on, clock on MSB on if MSB is off. reg24 delta_accumulator = (accumulator & 0x800000 ? 0x1000000 : 0x800000) - accumulator; cycle_count delta_t_next = delta_accumulator/freq; if (delta_accumulator%freq) { ++delta_t_next; } if (delta_t_next < delta_t_min) { delta_t_min = delta_t_next; } } // Clock oscillators. for (i = 0; i < 3; i++) { voice[i].wave.clock(delta_t_min); } // Synchronize oscillators. for (i = 0; i < 3; i++) { voice[i].wave.synchronize(); } delta_t_osc -= delta_t_min; } // Clock filter. filter.clock(delta_t, voice[0].output(), voice[1].output(), voice[2].output(), ext_in); // Clock external filter. extfilt.clock(delta_t, filter.output()); } // ---------------------------------------------------------------------------- // SID clocking with audio sampling. // Fixpoint arithmetics is used. // // The example below shows how to clock the SID a specified amount of cycles // while producing audio output: // // while (delta_t) { // bufindex += sid.clock(delta_t, buf + bufindex, buflength - bufindex); // write(dsp, buf, bufindex*2); // bufindex = 0; // } // // ---------------------------------------------------------------------------- int cSID::clock(cycle_count& delta_t, short* buf, int n, int interleave) { switch (sampling) { default: case SAMPLE_FAST: return clock_fast(delta_t, buf, n, interleave); case SAMPLE_INTERPOLATE: return clock_interpolate(delta_t, buf, n, interleave); case SAMPLE_RESAMPLE_INTERPOLATE: return clock_resample_interpolate(delta_t, buf, n, interleave); case SAMPLE_RESAMPLE_FAST: return clock_resample_fast(delta_t, buf, n, interleave); } } // ---------------------------------------------------------------------------- // SID clocking with audio sampling - delta clocking picking nearest sample. // ---------------------------------------------------------------------------- RESID_INLINE int cSID::clock_fast(cycle_count& delta_t, short* buf, int n, int interleave) { int s = 0; for (;;) { cycle_count next_sample_offset = sample_offset + cycles_per_sample + (1 << (FIXP_SHIFT - 1)); cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT; if (delta_t_sample > delta_t) { break; } if (s >= n) { return s; } clock(delta_t_sample); delta_t -= delta_t_sample; sample_offset = (next_sample_offset & FIXP_MASK) - (1 << (FIXP_SHIFT - 1)); buf[s++*interleave] = output(); } clock(delta_t); sample_offset -= delta_t << FIXP_SHIFT; delta_t = 0; return s; } // ---------------------------------------------------------------------------- // SID clocking with audio sampling - cycle based with linear sample // interpolation. // // Here the chip is clocked every cycle. This yields higher quality // sound since the samples are linearly interpolated, and since the // external filter attenuates frequencies above 16kHz, thus reducing // sampling noise. // ---------------------------------------------------------------------------- RESID_INLINE int cSID::clock_interpolate(cycle_count& delta_t, short* buf, int n, int interleave) { int s = 0; int i; for (;;) { cycle_count next_sample_offset = sample_offset + cycles_per_sample; cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT; if (delta_t_sample > delta_t) { break; } if (s >= n) { return s; } for (i = 0; i < delta_t_sample - 1; i++) { clock(); } if (i < delta_t_sample) { sample_prev = output(); clock(); } delta_t -= delta_t_sample; sample_offset = next_sample_offset & FIXP_MASK; short sample_now = output(); buf[s++*interleave] = sample_prev + (sample_offset*(sample_now - sample_prev) >> FIXP_SHIFT); sample_prev = sample_now; } for (i = 0; i < delta_t - 1; i++) { clock(); } if (i < delta_t) { sample_prev = output(); clock(); } sample_offset -= delta_t << FIXP_SHIFT; delta_t = 0; return s; } // ---------------------------------------------------------------------------- // SID clocking with audio sampling - cycle based with audio resampling. // // This is the theoretically correct (and computationally intensive) audio // sample generation. The samples are generated by resampling to the specified // sampling frequency. The work rate is inversely proportional to the // percentage of the bandwidth allocated to the filter transition band. // // This implementation is based on the paper "A Flexible Sampling-Rate // Conversion Method", by J. O. Smith and P. Gosset, or rather on the // expanded tutorial on the "Digital Audio Resampling Home Page": // http://www-ccrma.stanford.edu/~jos/resample/ // // By building shifted FIR tables with samples according to the // sampling frequency, this implementation dramatically reduces the // computational effort in the filter convolutions, without any loss // of accuracy. The filter convolutions are also vectorizable on // current hardware. // // Further possible optimizations are: // * An equiripple filter design could yield a lower filter order, see // http://www.mwrf.com/Articles/ArticleID/7229/7229.html // * The Convolution Theorem could be used to bring the complexity of // convolution down from O(n*n) to O(n*log(n)) using the Fast Fourier // Transform, see http://en.wikipedia.org/wiki/Convolution_theorem // * Simply resampling in two steps can also yield computational // savings, since the transition band will be wider in the first step // and the required filter order is thus lower in this step. // Laurent Ganier has found the optimal intermediate sampling frequency // to be (via derivation of sum of two steps): // 2 * pass_freq + sqrt [ 2 * pass_freq * orig_sample_freq // * (dest_sample_freq - 2 * pass_freq) / dest_sample_freq ] // // NB! the result of right shifting negative numbers is really // implementation dependent in the C++ standard. // ---------------------------------------------------------------------------- RESID_INLINE int cSID::clock_resample_interpolate(cycle_count& delta_t, short* buf, int n, int interleave) { int s = 0; for (;;) { cycle_count next_sample_offset = sample_offset + cycles_per_sample; cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT; if (delta_t_sample > delta_t) { break; } if (s >= n) { return s; } for (int i = 0; i < delta_t_sample; i++) { clock(); sample[sample_index] = sample[sample_index + RINGSIZE] = output(); ++sample_index; sample_index &= 0x3fff; } delta_t -= delta_t_sample; sample_offset = next_sample_offset & FIXP_MASK; int fir_offset = sample_offset*fir_RES >> FIXP_SHIFT; int fir_offset_rmd = sample_offset*fir_RES & FIXP_MASK; short* fir_start = fir + fir_offset*fir_N; short* sample_start = sample + sample_index - fir_N + RINGSIZE; // Convolution with filter impulse response. int v1 = 0; for (int j = 0; j < fir_N; j++) { v1 += sample_start[j]*fir_start[j]; } // Use next FIR table, wrap around to first FIR table using // previous sample. if (++fir_offset == fir_RES) { fir_offset = 0; --sample_start; } fir_start = fir + fir_offset*fir_N; // Convolution with filter impulse response. int v2 = 0; for (int j = 0; j < fir_N; j++) { v2 += sample_start[j]*fir_start[j]; } // Linear interpolation. // fir_offset_rmd is equal for all samples, it can thus be factorized out: // sum(v1 + rmd*(v2 - v1)) = sum(v1) + rmd*(sum(v2) - sum(v1)) int v = v1 + (fir_offset_rmd*(v2 - v1) >> FIXP_SHIFT); v >>= FIR_SHIFT; // Saturated arithmetics to guard against 16 bit sample overflow. const int half = 1 << 15; if (v >= half) { v = half - 1; } else if (v < -half) { v = -half; } buf[s++*interleave] = v; } for (int i = 0; i < delta_t; i++) { clock(); sample[sample_index] = sample[sample_index + RINGSIZE] = output(); ++sample_index; sample_index &= 0x3fff; } sample_offset -= delta_t << FIXP_SHIFT; delta_t = 0; return s; } // ---------------------------------------------------------------------------- // SID clocking with audio sampling - cycle based with audio resampling. // ---------------------------------------------------------------------------- RESID_INLINE int cSID::clock_resample_fast(cycle_count& delta_t, short* buf, int n, int interleave) { int s = 0; for (;;) { cycle_count next_sample_offset = sample_offset + cycles_per_sample; cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT; if (delta_t_sample > delta_t) { break; } if (s >= n) { return s; } for (int i = 0; i < delta_t_sample; i++) { clock(); sample[sample_index] = sample[sample_index + RINGSIZE] = output(); ++sample_index; sample_index &= 0x3fff; } delta_t -= delta_t_sample; sample_offset = next_sample_offset & FIXP_MASK; int fir_offset = sample_offset*fir_RES >> FIXP_SHIFT; short* fir_start = fir + fir_offset*fir_N; short* sample_start = sample + sample_index - fir_N + RINGSIZE; // Convolution with filter impulse response. int v = 0; for (int j = 0; j < fir_N; j++) { v += sample_start[j]*fir_start[j]; } v >>= FIR_SHIFT; // Saturated arithmetics to guard against 16 bit sample overflow. const int half = 1 << 15; if (v >= half) { v = half - 1; } else if (v < -half) { v = -half; } buf[s++*interleave] = v; } for (int i = 0; i < delta_t; i++) { clock(); sample[sample_index] = sample[sample_index + RINGSIZE] = output(); ++sample_index; sample_index &= 0x3fff; } sample_offset -= delta_t << FIXP_SHIFT; delta_t = 0; return s; } lmms-1.1.3/plugins/sid/sid.h000066400000000000000000000101161247673406200156660ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __SID_H__ #define __SID_H__ #include "siddefs.h" #include "voice.h" #include "filter.h" #include "extfilt.h" #include "pot.h" class cSID { public: cSID(); ~cSID(); void set_chip_model(chip_model model); void enable_filter(bool enable); void enable_external_filter(bool enable); bool set_sampling_parameters(double clock_freq, sampling_method method, double sample_freq, double pass_freq = -1, double filter_scale = 0.97); void adjust_sampling_frequency(double sample_freq); void fc_default(const fc_point*& points, int& count); PointPlotter fc_plotter(); void clock(); void clock(cycle_count delta_t); int clock(cycle_count& delta_t, short* buf, int n, int interleave = 1); void reset(); // Read/write registers. reg8 read(reg8 offset); void write(reg8 offset, reg8 value); // Read/write state. class State { public: State(); char sid_register[0x20]; reg8 bus_value; cycle_count bus_value_ttl; reg24 accumulator[3]; reg24 shift_register[3]; reg16 rate_counter[3]; reg16 rate_counter_period[3]; reg16 exponential_counter[3]; reg16 exponential_counter_period[3]; reg8 envelope_counter[3]; EnvelopeGenerator::State envelope_state[3]; bool hold_zero[3]; }; State read_state(); void write_state(const State& state); // 16-bit input (EXT IN). void input(int sample); // 16-bit output (AUDIO OUT). int output(); // n-bit output. int output(int bits); protected: static double I0(double x); RESID_INLINE int clock_fast(cycle_count& delta_t, short* buf, int n, int interleave); RESID_INLINE int clock_interpolate(cycle_count& delta_t, short* buf, int n, int interleave); RESID_INLINE int clock_resample_interpolate(cycle_count& delta_t, short* buf, int n, int interleave); RESID_INLINE int clock_resample_fast(cycle_count& delta_t, short* buf, int n, int interleave); Voice voice[3]; Filter filter; ExternalFilter extfilt; Potentiometer potx; Potentiometer poty; reg8 bus_value; cycle_count bus_value_ttl; double clock_frequency; // External audio input. int ext_in; // Resampling constants. // The error in interpolated lookup is bounded by 1.234/L^2, // while the error in non-interpolated lookup is bounded by // 0.7854/L + 0.4113/L^2, see // http://www-ccrma.stanford.edu/~jos/resample/Choice_Table_Size.html // For a resolution of 16 bits this yields L >= 285 and L >= 51473, // respectively. static const int FIR_N; static const int FIR_RES_INTERPOLATE; static const int FIR_RES_FAST; static const int FIR_SHIFT; static const int RINGSIZE; // Fixpoint constants (16.16 bits). static const int FIXP_SHIFT; static const int FIXP_MASK; // Sampling variables. sampling_method sampling; cycle_count cycles_per_sample; cycle_count sample_offset; int sample_index; short sample_prev; int fir_N; int fir_RES; // Ring buffer with overflow for contiguous storage of RINGSIZE samples. short* sample; // FIR_RES filter tables (FIR_N*FIR_RES). short* fir; }; #endif // not __SID_H__ lmms-1.1.3/plugins/sid/sid_instrument.cpp000066400000000000000000000622461247673406200205240ustar00rootroot00000000000000/* * sid_instrument.cpp - ResID based software-synthesizer * * Copyright (c) 2008 Csaba Hruska * Attila Herman * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "sid.h" #include "sid_instrument.h" #include "engine.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include "tooltip.h" #include "embed.cpp" #define C64_PAL_CYCLES_PER_SEC 985248 #define NUMSIDREGS 0x19 #define SIDWRITEDELAY 9 // lda $xxxx,x 4 cycles, sta $d400,x 5 cycles #define SIDWAVEDELAY 4 // and $xxxx,x 4 cycles extra unsigned char sidorder[] = {0x15,0x16,0x18,0x17, 0x05,0x06,0x02,0x03,0x00,0x01,0x04, 0x0c,0x0d,0x09,0x0a,0x07,0x08,0x0b, 0x13,0x14,0x10,0x11,0x0e,0x0f,0x12}; static const char *attackTime[16] = { "2 mS", "8 mS", "16 mS", "24 mS", "38 mS", "56 mS", "68 mS", "80 mS", "100 mS", "250 mS", "500 mS", "800 mS", "1 S", "3 S", "5 S", "8 S" }; static const char *decRelTime[16] = { "6 mS", "24 mS", "48 mS", "72 mS", "114 mS", "168 mS", "204 mS", "240 mS", "300 mS", "750 mS", "1.5 S", "2.4 S", "3 S", "9 S", "15 S", "24 S" }; // release time time in ms static const int relTime[16] = { 6, 24, 48, 72, 114, 168, 204, 240, 300, 750, 1500, 2400, 3000, 9000, 15000, 24000 }; extern "C" { Plugin::Descriptor PLUGIN_EXPORT sid_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "SID", QT_TRANSLATE_NOOP( "pluginBrowser", "Emulation of the MOS6581 and MOS8580 " "SID.\nThis chip was used in the Commodore 64 computer." ), "Csaba Hruska " "Attila Herman ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } voiceObject::voiceObject( Model * _parent, int _idx ) : Model( _parent ), m_pulseWidthModel( 2048.0f, 0.0f, 4095.0f, 1.0f, this, tr( "Voice %1 pulse width" ).arg( _idx+1 ) ), m_attackModel( 8.0f, 0.0f, 15.0f, 1.0f, this, tr( "Voice %1 attack" ).arg( _idx+1 ) ), m_decayModel( 8.0f, 0.0f, 15.0f, 1.0f, this, tr( "Voice %1 decay" ).arg( _idx+1 ) ), m_sustainModel( 15.0f, 0.0f, 15.0f, 1.0f, this, tr( "Voice %1 sustain" ).arg( _idx+1 ) ), m_releaseModel( 8.0f, 0.0f, 15.0f, 1.0f, this, tr( "Voice %1 release" ).arg( _idx+1 ) ), m_coarseModel( 0.0f, -24.0, 24.0, 1.0f, this, tr( "Voice %1 coarse detuning" ).arg( _idx+1 ) ), m_waveFormModel( TriangleWave, 0, NumWaveShapes-1, this, tr( "Voice %1 wave shape" ).arg( _idx+1 ) ), m_syncModel( false, this, tr( "Voice %1 sync" ).arg( _idx+1 ) ), m_ringModModel( false, this, tr( "Voice %1 ring modulate" ).arg( _idx+1 ) ), m_filteredModel( false, this, tr( "Voice %1 filtered" ).arg( _idx+1 ) ), m_testModel( false, this, tr( "Voice %1 test" ).arg( _idx+1 ) ) { } voiceObject::~voiceObject() { } sidInstrument::sidInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &sid_plugin_descriptor ), // filter m_filterFCModel( 1024.0f, 0.0f, 2047.0f, 1.0f, this, tr( "Cutoff" ) ), m_filterResonanceModel( 8.0f, 0.0f, 15.0f, 1.0f, this, tr( "Resonance" ) ), m_filterModeModel( LowPass, 0, NumFilterTypes-1, this, tr( "Filter type" )), // misc m_voice3OffModel( false, this, tr( "Voice 3 off" ) ), m_volumeModel( 15.0f, 0.0f, 15.0f, 1.0f, this, tr( "Volume" ) ), m_chipModel( sidMOS8580, 0, NumChipModels-1, this, tr( "Chip model" ) ) { for( int i = 0; i < 3; ++i ) { m_voice[i] = new voiceObject( this, i ); } } sidInstrument::~sidInstrument() { } void sidInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { // voices for( int i = 0; i < 3; ++i ) { const QString is = QString::number( i ); m_voice[i]->m_pulseWidthModel.saveSettings( _doc, _this, "pulsewidth" + is ); m_voice[i]->m_attackModel.saveSettings( _doc, _this, "attack" + is ); m_voice[i]->m_decayModel.saveSettings( _doc, _this, "decay" + is ); m_voice[i]->m_sustainModel.saveSettings( _doc, _this, "sustain" + is ); m_voice[i]->m_releaseModel.saveSettings( _doc, _this, "release" + is ); m_voice[i]->m_coarseModel.saveSettings( _doc, _this, "coarse" + is ); m_voice[i]->m_waveFormModel.saveSettings( _doc, _this,"waveform" + is ); m_voice[i]->m_syncModel.saveSettings( _doc, _this, "sync" + is ); m_voice[i]->m_ringModModel.saveSettings( _doc, _this, "ringmod" + is ); m_voice[i]->m_filteredModel.saveSettings( _doc, _this,"filtered" + is ); m_voice[i]->m_testModel.saveSettings( _doc, _this, "test" + is ); } // filter m_filterFCModel.saveSettings( _doc, _this, "filterFC" ); m_filterResonanceModel.saveSettings( _doc, _this, "filterResonance" ); m_filterModeModel.saveSettings( _doc, _this, "filterMode" ); // misc m_voice3OffModel.saveSettings( _doc, _this, "voice3Off" ); m_volumeModel.saveSettings( _doc, _this, "volume" ); m_chipModel.saveSettings( _doc, _this, "chipModel" ); } void sidInstrument::loadSettings( const QDomElement & _this ) { // voices for( int i = 0; i < 3; ++i ) { const QString is = QString::number( i ); m_voice[i]->m_pulseWidthModel.loadSettings( _this, "pulsewidth" + is ); m_voice[i]->m_attackModel.loadSettings( _this, "attack" + is ); m_voice[i]->m_decayModel.loadSettings( _this, "decay" + is ); m_voice[i]->m_sustainModel.loadSettings( _this, "sustain" + is ); m_voice[i]->m_releaseModel.loadSettings( _this, "release" + is ); m_voice[i]->m_coarseModel.loadSettings( _this, "coarse" + is ); m_voice[i]->m_waveFormModel.loadSettings( _this, "waveform" + is ); m_voice[i]->m_syncModel.loadSettings( _this, "sync" + is ); m_voice[i]->m_ringModModel.loadSettings( _this, "ringmod" + is ); m_voice[i]->m_filteredModel.loadSettings( _this, "filtered" + is ); m_voice[i]->m_testModel.loadSettings( _this, "test" + is ); } // filter m_filterFCModel.loadSettings( _this, "filterFC" ); m_filterResonanceModel.loadSettings( _this, "filterResonance" ); m_filterModeModel.loadSettings( _this, "filterMode" ); // misc m_voice3OffModel.loadSettings( _this, "voice3Off" ); m_volumeModel.loadSettings( _this, "volume" ); m_chipModel.loadSettings( _this, "chipModel" ); } QString sidInstrument::nodeName() const { return( sid_plugin_descriptor.name ); } f_cnt_t sidInstrument::desiredReleaseFrames() const { const float samplerate = engine::mixer()->processingSampleRate(); int maxrel = 0; for( int i = 0 ; i < 3 ; ++i ) { if( maxrel < m_voice[i]->m_releaseModel.value() ) maxrel = (int)m_voice[i]->m_releaseModel.value(); } return f_cnt_t( float(relTime[maxrel])*samplerate/1000.0 ); } static int sid_fillbuffer(unsigned char* sidreg, cSID *sid, int tdelta, short *ptr, int samples) { int tdelta2; int result; int total = 0; int c; // customly added int residdelay = 0; int badline = rand() % NUMSIDREGS; for (c = 0; c < NUMSIDREGS; c++) { unsigned char o = sidorder[c]; // Extra delay for loading the waveform (and mt_chngate,x) if ((o == 4) || (o == 11) || (o == 18)) { tdelta2 = SIDWAVEDELAY; result = sid->clock(tdelta2, ptr, samples); total += result; ptr += result; samples -= result; tdelta -= SIDWAVEDELAY; } // Possible random badline delay once per writing if ((badline == c) && (residdelay)) { tdelta2 = residdelay; result = sid->clock(tdelta2, ptr, samples); total += result; ptr += result; samples -= result; tdelta -= residdelay; } sid->write(o, sidreg[o]); tdelta2 = SIDWRITEDELAY; result = sid->clock(tdelta2, ptr, samples); total += result; ptr += result; samples -= result; tdelta -= SIDWRITEDELAY; } result = sid->clock(tdelta, ptr, samples); total += result; return total; } void sidInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { const f_cnt_t tfp = _n->totalFramesPlayed(); const int clockrate = C64_PAL_CYCLES_PER_SEC; const int samplerate = engine::mixer()->processingSampleRate(); if ( tfp == 0 ) { cSID *sid = new cSID(); sid->set_sampling_parameters( clockrate, SAMPLE_FAST, samplerate ); sid->set_chip_model( MOS8580 ); sid->enable_filter( true ); sid->reset(); _n->m_pluginData = sid; } const fpp_t frames = _n->framesLeftForCurrentPeriod(); cSID *sid = static_cast( _n->m_pluginData ); int delta_t = clockrate * frames / samplerate + 4; short buf[frames]; unsigned char sidreg[NUMSIDREGS]; for (int c = 0; c < NUMSIDREGS; c++) { sidreg[c] = 0x00; } if( (ChipModel)m_chipModel.value() == sidMOS6581 ) { sid->set_chip_model( MOS6581 ); } else { sid->set_chip_model( MOS8580 ); } // voices reg8 data8 = 0; reg8 data16 = 0; reg8 base = 0; float freq = 0.0; float note = 0.0; for( reg8 i = 0 ; i < 3 ; ++i ) { base = i*7; // freq ( Fn = Fout / Fclk * 16777216 ) + coarse detuning freq = _n->frequency(); note = 69.0 + 12.0 * log( freq / 440.0 ) / log( 2 ); note += m_voice[i]->m_coarseModel.value(); freq = 440.0 * pow( 2.0, (note-69.0)/12.0 ); data16 = int( freq / float(clockrate) * 16777216.0 ); sidreg[base+0] = data16&0x00FF; sidreg[base+1] = (data16>>8)&0x00FF; // pw data16 = (int)m_voice[i]->m_pulseWidthModel.value(); sidreg[base+2] = data16&0x00FF; sidreg[base+3] = (data16>>8)&0x000F; // control: wave form, (test), ringmod, sync, gate data8 = _n->isReleased()?0:1; data8 += m_voice[i]->m_syncModel.value()?2:0; data8 += m_voice[i]->m_ringModModel.value()?4:0; data8 += m_voice[i]->m_testModel.value()?8:0; switch( m_voice[i]->m_waveFormModel.value() ) { default: break; case voiceObject::NoiseWave: data8 += 128; break; case voiceObject::SquareWave: data8 += 64; break; case voiceObject::SawWave: data8 += 32; break; case voiceObject::TriangleWave: data8 += 16; break; } sidreg[base+4] = data8&0x00FF; // ad data16 = (int)m_voice[i]->m_attackModel.value(); data8 = (data16&0x0F)<<4; data16 = (int)m_voice[i]->m_decayModel.value(); data8 += (data16&0x0F); sidreg[base+5] = data8&0x00FF; // sr data16 = (int)m_voice[i]->m_sustainModel.value(); data8 = (data16&0x0F)<<4; data16 = (int)m_voice[i]->m_releaseModel.value(); data8 += (data16&0x0F); sidreg[base+6] = data8&0x00FF; } // filtered // FC (FilterCutoff) data16 = (int)m_filterFCModel.value(); sidreg[21] = data16&0x0007; sidreg[22] = (data16>>3)&0x00FF; // res, filt ex,3,2,1 data16 = (int)m_filterResonanceModel.value(); data8 = (data16&0x000F)<<4; data8 += m_voice[2]->m_filteredModel.value()?4:0; data8 += m_voice[1]->m_filteredModel.value()?2:0; data8 += m_voice[0]->m_filteredModel.value()?1:0; sidreg[23] = data8&0x00FF; // mode vol data16 = (int)m_volumeModel.value(); data8 = data16&0x000F; data8 += m_voice3OffModel.value()?128:0; switch( m_filterModeModel.value() ) { default: break; case LowPass: data8 += 16; break; case BandPass: data8 += 32; break; case HighPass: data8 += 64; break; } sidreg[24] = data8&0x00FF; int num = sid_fillbuffer(sidreg, sid,delta_t,buf, frames); if(num!=frames) printf("!!!Not enough samples\n"); for( fpp_t frame = 0; frame < frames; ++frame ) { sample_t s = float(buf[frame])/32768.0; for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { _working_buffer[frame][ch] = s; } } instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void sidInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * sidInstrument::instantiateView( QWidget * _parent ) { return( new sidInstrumentView( this, _parent ) ); } class sidKnob : public knob { public: sidKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 16, 16 ); setCenterPointX( 7.5 ); setCenterPointY( 7.5 ); setInnerRadius( 2 ); setOuterRadius( 8 ); setTotalAngle( 270.0 ); setLineWidth( 2 ); } }; sidInstrumentView::sidInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); m_volKnob = new sidKnob( this ); m_volKnob->setHintText( tr( "Volume:" ) + " ", "" ); m_volKnob->move( 7, 64 ); m_resKnob = new sidKnob( this ); m_resKnob->setHintText( tr( "Resonance:" ) + " ", "" ); m_resKnob->move( 7 + 28, 64 ); m_cutKnob = new sidKnob( this ); m_cutKnob->setHintText( tr( "Cutoff frequency:" ) + " ", "Hz" ); m_cutKnob->move( 7 + 2*28, 64 ); pixmapButton * hp_btn = new pixmapButton( this, NULL ); hp_btn->move( 140, 77 ); hp_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "hpred" ) ); hp_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "hp" ) ); toolTip::add( hp_btn, tr( "High-Pass filter ") ); pixmapButton * bp_btn = new pixmapButton( this, NULL ); bp_btn->move( 164, 77 ); bp_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bpred" ) ); bp_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bp" ) ); toolTip::add( bp_btn, tr( "Band-Pass filter ") ); pixmapButton * lp_btn = new pixmapButton( this, NULL ); lp_btn->move( 185, 77 ); lp_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "lpred" ) ); lp_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "lp" ) ); toolTip::add( lp_btn, tr( "Low-Pass filter ") ); m_passBtnGrp = new automatableButtonGroup( this ); m_passBtnGrp->addButton( hp_btn ); m_passBtnGrp->addButton( bp_btn ); m_passBtnGrp->addButton( lp_btn ); m_offButton = new pixmapButton( this, NULL ); m_offButton->setCheckable( true ); m_offButton->move( 207, 77 ); m_offButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "3offred" ) ); m_offButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "3off" ) ); toolTip::add( m_offButton, tr( "Voice3 Off ") ); pixmapButton * mos6581_btn = new pixmapButton( this, NULL ); mos6581_btn->move( 170, 59 ); mos6581_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "6581red" ) ); mos6581_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "6581" ) ); toolTip::add( mos6581_btn, tr( "MOS6581 SID ") ); pixmapButton * mos8580_btn = new pixmapButton( this, NULL ); mos8580_btn->move( 207, 59 ); mos8580_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "8580red" ) ); mos8580_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "8580" ) ); toolTip::add( mos8580_btn, tr( "MOS8580 SID ") ); m_sidTypeBtnGrp = new automatableButtonGroup( this ); m_sidTypeBtnGrp->addButton( mos6581_btn ); m_sidTypeBtnGrp->addButton( mos8580_btn ); for( int i = 0; i < 3; i++ ) { knob *ak = new sidKnob( this ); ak->setHintText( tr("Attack:") + " ", "" ); ak->move( 7, 114 + i*50 ); ak->setWhatsThis( tr ( "Attack rate determines how rapidly the output " "of Voice %1 rises from zero to peak amplitude." ).arg( i+1 ) ); knob *dk = new sidKnob( this ); dk->setHintText( tr("Decay:") + " ", "" ); dk->move( 7 + 28, 114 + i*50 ); dk->setWhatsThis( tr ( "Decay rate determines how rapidly the output " "falls from the peak amplitude to the selected Sustain level." ) ); knob *sk = new sidKnob( this ); sk->setHintText( tr("Sustain:") + " ", "" ); sk->move( 7 + 2*28, 114 + i*50 ); sk->setWhatsThis( tr ( "Output of Voice %1 will remain at the selected " "Sustain amplitude as long as the note is held." ).arg( i+1 ) ); knob *rk = new sidKnob( this ); rk->setHintText( tr("Release:") + " ", "" ); rk->move( 7 + 3*28, 114 + i*50 ); rk->setWhatsThis( tr ( "The output of of Voice %1 will fall from " "Sustain amplitude to zero amplitude at the selected Release " "rate." ).arg( i+1 ) ); knob *pwk = new sidKnob( this ); pwk->setHintText( tr("Pulse Width:") + " ", "" ); pwk->move( 7 + 4*28, 114 + i*50 ); pwk->setWhatsThis( tr ( "The Pulse Width resolution allows the width " "to be smoothly swept with no discernable stepping. The Pulse " "waveform on Oscillator %1 must be selected to have any audible" " effect." ).arg( i+1 ) ); knob *crsk = new sidKnob( this ); crsk->setHintText( tr("Coarse:") + " ", " semitones" ); crsk->move( 147, 114 + i*50 ); crsk->setWhatsThis( tr ( "The Coarse detuning allows to detune Voice " "%1 one octave up or down." ).arg( i+1 ) ); pixmapButton * pulse_btn = new pixmapButton( this, NULL ); pulse_btn->move( 187, 101 + i*50 ); pulse_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pulsered" ) ); pulse_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pulse" ) ); toolTip::add( pulse_btn, tr( "Pulse Wave" ) ); pixmapButton * triangle_btn = new pixmapButton( this, NULL ); triangle_btn->move( 168, 101 + i*50 ); triangle_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "trianglered" ) ); triangle_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "triangle" ) ); toolTip::add( triangle_btn, tr( "Triangle Wave" ) ); pixmapButton * saw_btn = new pixmapButton( this, NULL ); saw_btn->move( 207, 101 + i*50 ); saw_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sawred" ) ); saw_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "saw" ) ); toolTip::add( saw_btn, tr( "SawTooth" ) ); pixmapButton * noise_btn = new pixmapButton( this, NULL ); noise_btn->move( 226, 101 + i*50 ); noise_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "noisered" ) ); noise_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "noise" ) ); toolTip::add( noise_btn, tr( "Noise" ) ); automatableButtonGroup * wfbg = new automatableButtonGroup( this ); wfbg->addButton( pulse_btn ); wfbg->addButton( triangle_btn ); wfbg->addButton( saw_btn ); wfbg->addButton( noise_btn ); int syncRingWidth[] = { 3, 1, 2 }; pixmapButton * sync_btn = new pixmapButton( this, NULL ); sync_btn->setCheckable( true ); sync_btn->move( 207, 134 + i*50 ); sync_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "syncred" ) ); sync_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sync" ) ); toolTip::add( sync_btn, tr( "Sync" ) ); sync_btn->setWhatsThis( tr ( "Sync synchronizes the fundamental " "frequency of Oscillator %1 with the fundamental frequency of " "Oscillator %2 producing \"Hard Sync\" effects." ).arg( i+1 ) .arg( syncRingWidth[i] ) ); pixmapButton * ringMod_btn = new pixmapButton( this, NULL ); ringMod_btn->setCheckable( true ); ringMod_btn->move( 170, 116 + i*50 ); ringMod_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ringred" ) ); ringMod_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ring" ) ); toolTip::add( ringMod_btn, tr( "Ring-Mod" ) ); ringMod_btn->setWhatsThis( tr ( "Ring-mod replaces the Triangle " "Waveform output of Oscillator %1 with a \"Ring Modulated\" " "combination of Oscillators %1 and %2." ).arg( i+1 ) .arg( syncRingWidth[i] ) ); pixmapButton * filter_btn = new pixmapButton( this, NULL ); filter_btn->setCheckable( true ); filter_btn->move( 207, 116 + i*50 ); filter_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "filterred" ) ); filter_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "filter" ) ); toolTip::add( filter_btn, tr( "Filtered" ) ); filter_btn->setWhatsThis( tr ( "When Filtered is on, Voice %1 will be " "processed through the Filter. When Filtered is off, Voice %1 " "appears directly at the output, and the Filter has no effect on " "it." ).arg( i+1 ) ); pixmapButton * test_btn = new pixmapButton( this, NULL ); test_btn->setCheckable( true ); test_btn->move( 170, 134 + i*50 ); test_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "testred" ) ); test_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "test" ) ); toolTip::add( test_btn, tr( "Test" ) ); test_btn->setWhatsThis( tr ( "Test, when set, resets and locks " "Oscillator %1 at zero until Test is turned off." ).arg( i+1 ) ); m_voiceKnobs[i] = voiceKnobs( ak, dk, sk, rk, pwk, crsk, wfbg, sync_btn, ringMod_btn, filter_btn, test_btn ); } } sidInstrumentView::~sidInstrumentView() { } void sidInstrumentView::updateKnobHint() { sidInstrument * k = castModel(); for( int i = 0; i < 3; ++i ) { m_voiceKnobs[i].m_attKnob->setHintText( tr( "Attack:" ) + " ", " (" + QString::fromAscii( attackTime[(int)k->m_voice[i]-> m_attackModel.value()] ) + ")" ); toolTip::add( m_voiceKnobs[i].m_attKnob, attackTime[(int)k->m_voice[i]->m_attackModel.value()] ); m_voiceKnobs[i].m_decKnob->setHintText( tr( "Decay:" ) + " ", " (" + QString::fromAscii( decRelTime[(int)k->m_voice[i]-> m_decayModel.value()] ) + ")" ); toolTip::add( m_voiceKnobs[i].m_decKnob, decRelTime[(int)k->m_voice[i]->m_decayModel.value()] ); m_voiceKnobs[i].m_relKnob->setHintText( tr( "Release:" ) + " ", " (" + QString::fromAscii( decRelTime[(int)k->m_voice[i]-> m_releaseModel.value()] ) + ")" ); toolTip::add( m_voiceKnobs[i].m_relKnob, decRelTime[(int)k->m_voice[i]->m_releaseModel.value()]); m_voiceKnobs[i].m_pwKnob->setHintText( tr( "Pulse Width:" )+ " ", " (" + QString::number( (double)k->m_voice[i]-> m_pulseWidthModel.value() / 40.95 ) + "%)" ); toolTip::add( m_voiceKnobs[i].m_pwKnob, QString::number( (double)k->m_voice[i]-> m_pulseWidthModel.value() / 40.95 ) + "%" ); } m_cutKnob->setHintText( tr( "Cutoff frequency:" ) + " ", " (" + QString::number ( (int) ( 9970.0 / 2047.0 * (double)k->m_filterFCModel.value() + 30.0 ) ) + "Hz)" ); toolTip::add( m_cutKnob, QString::number( (int) ( 9970.0 / 2047.0 * (double)k->m_filterFCModel.value() + 30.0 ) ) + "Hz" ); } void sidInstrumentView::updateKnobToolTip() { sidInstrument * k = castModel(); for( int i = 0; i < 3; ++i ) { toolTip::add( m_voiceKnobs[i].m_sustKnob, QString::number( (int)k->m_voice[i]->m_sustainModel.value() ) ); toolTip::add( m_voiceKnobs[i].m_crsKnob, QString::number( (int)k->m_voice[i]->m_coarseModel.value() ) + " semitones" ); } toolTip::add( m_volKnob, QString::number( (int)k->m_volumeModel.value() ) ); toolTip::add( m_resKnob, QString::number( (int)k->m_filterResonanceModel.value() ) ); } void sidInstrumentView::modelChanged() { sidInstrument * k = castModel(); m_volKnob->setModel( &k->m_volumeModel ); m_resKnob->setModel( &k->m_filterResonanceModel ); m_cutKnob->setModel( &k->m_filterFCModel ); m_passBtnGrp->setModel( &k->m_filterModeModel ); m_offButton->setModel( &k->m_voice3OffModel ); m_sidTypeBtnGrp->setModel( &k->m_chipModel ); for( int i = 0; i < 3; ++i ) { m_voiceKnobs[i].m_attKnob->setModel( &k->m_voice[i]->m_attackModel ); m_voiceKnobs[i].m_decKnob->setModel( &k->m_voice[i]->m_decayModel ); m_voiceKnobs[i].m_sustKnob->setModel( &k->m_voice[i]->m_sustainModel ); m_voiceKnobs[i].m_relKnob->setModel( &k->m_voice[i]->m_releaseModel ); m_voiceKnobs[i].m_pwKnob->setModel( &k->m_voice[i]->m_pulseWidthModel ); m_voiceKnobs[i].m_crsKnob->setModel( &k->m_voice[i]->m_coarseModel ); m_voiceKnobs[i].m_waveFormBtnGrp->setModel( &k->m_voice[i]->m_waveFormModel ); m_voiceKnobs[i].m_syncButton->setModel( &k->m_voice[i]->m_syncModel ); m_voiceKnobs[i].m_ringModButton->setModel( &k->m_voice[i]->m_ringModModel ); m_voiceKnobs[i].m_filterButton->setModel( &k->m_voice[i]->m_filteredModel ); m_voiceKnobs[i].m_testButton->setModel( &k->m_voice[i]->m_testModel ); } for( int i = 0; i < 3; ++i ) { connect( &k->m_voice[i]->m_attackModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); connect( &k->m_voice[i]->m_decayModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); connect( &k->m_voice[i]->m_releaseModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); connect( &k->m_voice[i]->m_pulseWidthModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); connect( &k->m_voice[i]->m_sustainModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobToolTip() ) ); connect( &k->m_voice[i]->m_coarseModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobToolTip() ) ); } connect( &k->m_volumeModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobToolTip() ) ); connect( &k->m_filterResonanceModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobToolTip() ) ); connect( &k->m_filterFCModel, SIGNAL( dataChanged() ), this, SLOT( updateKnobHint() ) ); updateKnobHint(); updateKnobToolTip(); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new sidInstrument( static_cast( _data ) ) ); } } #include "moc_sid_instrument.cxx" lmms-1.1.3/plugins/sid/sid_instrument.h000066400000000000000000000102011247673406200201510ustar00rootroot00000000000000/* * sid_Instrument.h - ResID based software-synthesizer * * Copyright (c) 2008 Csaba Hruska * Attila Herman * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _SID_H #define _SID_H #include #include "Instrument.h" #include "InstrumentView.h" #include "knob.h" class sidInstrumentView; class NotePlayHandle; class automatableButtonGroup; class pixmapButton; class voiceObject : public Model { Q_OBJECT public: enum WaveForm { SquareWave = 0, TriangleWave, SawWave, NoiseWave, NumWaveShapes }; voiceObject( Model * _parent, int _idx ); virtual ~voiceObject(); private: FloatModel m_pulseWidthModel; FloatModel m_attackModel; FloatModel m_decayModel; FloatModel m_sustainModel; FloatModel m_releaseModel; FloatModel m_coarseModel; IntModel m_waveFormModel; BoolModel m_syncModel; BoolModel m_ringModModel; BoolModel m_filteredModel; BoolModel m_testModel; friend class sidInstrument; friend class sidInstrumentView; } ; class sidInstrument : public Instrument { Q_OBJECT public: enum FilerType { HighPass = 0, BandPass, LowPass, NumFilterTypes }; enum ChipModel { sidMOS6581 = 0, sidMOS8580, NumChipModels }; sidInstrument( InstrumentTrack * _instrument_track ); virtual ~sidInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const; virtual PluginView * instantiateView( QWidget * _parent ); /*public slots: void updateKnobHint(); void updateKnobToolTip();*/ private: // voices voiceObject * m_voice[3]; // filter FloatModel m_filterFCModel; FloatModel m_filterResonanceModel; IntModel m_filterModeModel; // misc BoolModel m_voice3OffModel; FloatModel m_volumeModel; IntModel m_chipModel; friend class sidInstrumentView; } ; class sidInstrumentView : public InstrumentView { Q_OBJECT public: sidInstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~sidInstrumentView(); private: virtual void modelChanged(); automatableButtonGroup * m_passBtnGrp; automatableButtonGroup * m_sidTypeBtnGrp; struct voiceKnobs { voiceKnobs( knob * a, knob * d, knob * s, knob * r, knob * pw, knob * crs, automatableButtonGroup * wfbg, pixmapButton * syncb, pixmapButton * ringb, pixmapButton * filterb, pixmapButton * testb ) : m_attKnob( a ), m_decKnob( d ), m_sustKnob( s ), m_relKnob( r ), m_pwKnob( pw ), m_crsKnob( crs ), m_waveFormBtnGrp( wfbg ), m_syncButton( syncb ), m_ringModButton( ringb ), m_filterButton( filterb ), m_testButton( testb ) { } voiceKnobs() { } knob * m_attKnob; knob * m_decKnob; knob * m_sustKnob; knob * m_relKnob; knob * m_pwKnob; knob * m_crsKnob; automatableButtonGroup * m_waveFormBtnGrp; pixmapButton * m_syncButton; pixmapButton * m_ringModButton; pixmapButton * m_filterButton; pixmapButton * m_testButton; } ; voiceKnobs m_voiceKnobs[3]; knob * m_volKnob; knob * m_resKnob; knob * m_cutKnob; pixmapButton * m_offButton; protected slots: void updateKnobHint(); void updateKnobToolTip(); } ; #endif lmms-1.1.3/plugins/sid/siddefs.h000066400000000000000000000043511247673406200165340ustar00rootroot00000000000000#define VERSION "0.16" // --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 1999 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __SIDDEFS_H__ #define __SIDDEFS_H__ // Define bool, true, and false for C++ compilers that lack these keywords. #define RESID_HAVE_BOOL 1 #if !RESID_HAVE_BOOL typedef int bool; const bool true = 1; const bool false = 0; #endif // We could have used the smallest possible data type for each SID register, // however this would give a slower engine because of data type conversions. // An int is assumed to be at least 32 bits (necessary in the types reg24, // cycle_count, and sound_sample). GNU does not support 16-bit machines // (GNU Coding Standards: Portability between CPUs), so this should be // a valid assumption. typedef unsigned int reg4; typedef unsigned int reg8; typedef unsigned int reg12; typedef unsigned int reg16; typedef unsigned int reg24; typedef int cycle_count; typedef int sound_sample; typedef sound_sample fc_point[2]; enum chip_model { MOS6581, MOS8580 }; enum sampling_method { SAMPLE_FAST, SAMPLE_INTERPOLATE, SAMPLE_RESAMPLE_INTERPOLATE, SAMPLE_RESAMPLE_FAST }; extern "C" { #ifndef __VERSION_CC__ extern const char* resid_version_string; #else const char* resid_version_string = VERSION; #endif } // Inlining on/off. #define RESID_INLINING 1 #define RESID_INLINE inline #endif // not __SIDDEFS_H__ lmms-1.1.3/plugins/sid/spline.h000066400000000000000000000210551247673406200164050ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __SPLINE_H__ #define __SPLINE_H__ // Our objective is to construct a smooth interpolating single-valued function // y = f(x). // // Catmull-Rom splines are widely used for interpolation, however these are // parametric curves [x(t) y(t) ...] and can not be used to directly calculate // y = f(x). // For a discussion of Catmull-Rom splines see Catmull, E., and R. Rom, // "A Class of Local Interpolating Splines", Computer Aided Geometric Design. // // Natural cubic splines are single-valued functions, and have been used in // several applications e.g. to specify gamma curves for image display. // These splines do not afford local control, and a set of linear equations // including all interpolation points must be solved before any point on the // curve can be calculated. The lack of local control makes the splines // more difficult to handle than e.g. Catmull-Rom splines, and real-time // interpolation of a stream of data points is not possible. // For a discussion of natural cubic splines, see e.g. Kreyszig, E., "Advanced // Engineering Mathematics". // // Our approach is to approximate the properties of Catmull-Rom splines for // piecewice cubic polynomials f(x) = ax^3 + bx^2 + cx + d as follows: // Each curve segment is specified by four interpolation points, // p0, p1, p2, p3. // The curve between p1 and p2 must interpolate both p1 and p2, and in addition // f'(p1.x) = k1 = (p2.y - p0.y)/(p2.x - p0.x) and // f'(p2.x) = k2 = (p3.y - p1.y)/(p3.x - p1.x). // // The constraints are expressed by the following system of linear equations // // [ 1 xi xi^2 xi^3 ] [ d ] [ yi ] // [ 1 2*xi 3*xi^2 ] * [ c ] = [ ki ] // [ 1 xj xj^2 xj^3 ] [ b ] [ yj ] // [ 1 2*xj 3*xj^2 ] [ a ] [ kj ] // // Solving using Gaussian elimination and back substitution, setting // dy = yj - yi, dx = xj - xi, we get // // a = ((ki + kj) - 2*dy/dx)/(dx*dx); // b = ((kj - ki)/dx - 3*(xi + xj)*a)/2; // c = ki - (3*xi*a + 2*b)*xi; // d = yi - ((xi*a + b)*xi + c)*xi; // // Having calculated the coefficients of the cubic polynomial we have the // choice of evaluation by brute force // // for (x = x1; x <= x2; x += res) { // y = ((a*x + b)*x + c)*x + d; // plot(x, y); // } // // or by forward differencing // // y = ((a*x1 + b)*x1 + c)*x1 + d; // dy = (3*a*(x1 + res) + 2*b)*x1*res + ((a*res + b)*res + c)*res; // d2y = (6*a*(x1 + res) + 2*b)*res*res; // d3y = 6*a*res*res*res; // // for (x = x1; x <= x2; x += res) { // plot(x, y); // y += dy; dy += d2y; d2y += d3y; // } // // See Foley, Van Dam, Feiner, Hughes, "Computer Graphics, Principles and // Practice" for a discussion of forward differencing. // // If we have a set of interpolation points p0, ..., pn, we may specify // curve segments between p0 and p1, and between pn-1 and pn by using the // following constraints: // f''(p0.x) = 0 and // f''(pn.x) = 0. // // Substituting the results for a and b in // // 2*b + 6*a*xi = 0 // // we get // // ki = (3*dy/dx - kj)/2; // // or by substituting the results for a and b in // // 2*b + 6*a*xj = 0 // // we get // // kj = (3*dy/dx - ki)/2; // // Finally, if we have only two interpolation points, the cubic polynomial // will degenerate to a straight line if we set // // ki = kj = dy/dx; // #if SPLINE_BRUTE_FORCE #define interpolate_segment interpolate_brute_force #else #define interpolate_segment interpolate_forward_difference #endif // ---------------------------------------------------------------------------- // Calculation of coefficients. // ---------------------------------------------------------------------------- inline void cubic_coefficients(double x1, double y1, double x2, double y2, double k1, double k2, double& a, double& b, double& c, double& d) { double dx = x2 - x1, dy = y2 - y1; a = ((k1 + k2) - 2*dy/dx)/(dx*dx); b = ((k2 - k1)/dx - 3*(x1 + x2)*a)/2; c = k1 - (3*x1*a + 2*b)*x1; d = y1 - ((x1*a + b)*x1 + c)*x1; } // ---------------------------------------------------------------------------- // Evaluation of cubic polynomial by brute force. // ---------------------------------------------------------------------------- template inline void interpolate_brute_force(double x1, double y1, double x2, double y2, double k1, double k2, PointPlotter plot, double res) { double a, b, c, d; cubic_coefficients(x1, y1, x2, y2, k1, k2, a, b, c, d); // Calculate each point. for (double x = x1; x <= x2; x += res) { double y = ((a*x + b)*x + c)*x + d; plot(x, y); } } // ---------------------------------------------------------------------------- // Evaluation of cubic polynomial by forward differencing. // ---------------------------------------------------------------------------- template inline void interpolate_forward_difference(double x1, double y1, double x2, double y2, double k1, double k2, PointPlotter plot, double res) { double a, b, c, d; cubic_coefficients(x1, y1, x2, y2, k1, k2, a, b, c, d); double y = ((a*x1 + b)*x1 + c)*x1 + d; double dy = (3*a*(x1 + res) + 2*b)*x1*res + ((a*res + b)*res + c)*res; double d2y = (6*a*(x1 + res) + 2*b)*res*res; double d3y = 6*a*res*res*res; // Calculate each point. for (double x = x1; x <= x2; x += res) { plot(x, y); y += dy; dy += d2y; d2y += d3y; } } template inline double x(PointIter p) { return (*p)[0]; } template inline double y(PointIter p) { return (*p)[1]; } // ---------------------------------------------------------------------------- // Evaluation of complete interpolating function. // Note that since each curve segment is controlled by four points, the // end points will not be interpolated. If extra control points are not // desirable, the end points can simply be repeated to ensure interpolation. // Note also that points of non-differentiability and discontinuity can be // introduced by repeating points. // ---------------------------------------------------------------------------- template inline void interpolate(PointIter p0, PointIter pn, PointPlotter plot, double res) { double k1, k2; // Set up points for first curve segment. PointIter p1 = p0; ++p1; PointIter p2 = p1; ++p2; PointIter p3 = p2; ++p3; // Draw each curve segment. for (; p2 != pn; ++p0, ++p1, ++p2, ++p3) { // p1 and p2 equal; single point. if (x(p1) == x(p2)) { continue; } // Both end points repeated; straight line. if (x(p0) == x(p1) && x(p2) == x(p3)) { k1 = k2 = (y(p2) - y(p1))/(x(p2) - x(p1)); } // p0 and p1 equal; use f''(x1) = 0. else if (x(p0) == x(p1)) { k2 = (y(p3) - y(p1))/(x(p3) - x(p1)); k1 = (3*(y(p2) - y(p1))/(x(p2) - x(p1)) - k2)/2; } // p2 and p3 equal; use f''(x2) = 0. else if (x(p2) == x(p3)) { k1 = (y(p2) - y(p0))/(x(p2) - x(p0)); k2 = (3*(y(p2) - y(p1))/(x(p2) - x(p1)) - k1)/2; } // Normal curve. else { k1 = (y(p2) - y(p0))/(x(p2) - x(p0)); k2 = (y(p3) - y(p1))/(x(p3) - x(p1)); } interpolate_segment(x(p1), y(p1), x(p2), y(p2), k1, k2, plot, res); } } // ---------------------------------------------------------------------------- // Class for plotting integers into an array. // ---------------------------------------------------------------------------- template class PointPlotter { protected: F* f; public: PointPlotter(F* arr) : f(arr) { } void operator ()(double x, double y) { // Clamp negative values to zero. if (y < 0) { y = 0; } f[F(x)] = F(y); } }; #endif // not __SPLINE_H__ lmms-1.1.3/plugins/sid/sync.png000066400000000000000000000027221247673406200164240ustar00rootroot00000000000000PNG  IHDR( MsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlesync button@tEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/PIDAT8m[lTUL;cPP.i)- %D4DŐh$/-A$*x0CD}F-MB+` r)vf:C˜Ù}^˖j FPlcj;+1ɵb:,m[g k"(tpc| c%aXQU] `vj'IػUI~Tl刱xB3!wޛ*>/^+Mfvm#"L)*`Jxo̘5'MY'-*]8syزh#1,'ƌ!ˁ}{ؿw7TZZ]Ao4?PÍχA!kDhcra 8ЅAN$شa-< 3 ̜x&M==Q >}"\7V4ill֭YRv#mf+ӏ(> K2b uiʪָQ? TtCk,/ FD;J<cq7orScy%'ʼॗhxeaׇ iX/,|~?c~|*ztܶ?U~Z56ϓ2 ETUH`Jy).t#xhԂ1l\WƤɼW!==TU T飷'%/>eۮtYTK<s0c =nUpf gTt9cx ꨫ!7/?ph Fٸ~ J_d:f~*J?M== t<\8VUit<cx<1NI>G*A6U꤫UVaIENDB`lmms-1.1.3/plugins/sid/test.png000066400000000000000000000025371247673406200164330ustar00rootroot00000000000000PNG  IHDR% =tsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitletest buttonhtEXtAuthorWilliam Young6K~BtEXtDescriptionArtwork for LMMS SID Emulator. Created with Inkscape. ztEXtCreation Time02/20/2014}DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/IDAT8u[lTUZLh V1UUc})!F%hR1j5}A}21ƀ"` \KUD 4E9=g^>arN^/ HW{["Q] 4_Qߑ8vVZ@y~&oYF[a AC>8Y *F$e-b)\PV.i;2%<0':`i :WYx6w~5n|ӧVY Gm]=/Vj=s WUAƯLޤjd]2^穩{ӈwC9,W. ~_ȌK_Qwӿ|r,g8MUU5+}{p Ei9MML&LiuΤRO%.K"P8w&ƋD#QS}Ii?|Oob~\JD MקuI&҂ A@OΫV(/W(&:}_ϖmU+2F54i_ %A8fR-ߖ -,\Jϛo{͌Z1 T̉GH%5D*8b"}L^q|1"~D,BMU} ܖp5 5U1UB.fZl6 (Ap~6<K˻pKoh/oF+ϋWjJu"4#BMu2i n4B<8ɚyDc1~. ~ II542? 9|`W3' R8ϛc?2ϼB[5tc1CѼ XNy0pmk-fF ݽ\V1EG/hBV<֍zA+4bqV13eB>PAW*\7 hvƅB$z8Μ I^geYKݩ4," PFL)CRwf1QD;\ȫ~}#Xv=\- `k%5u asqndb(o$g0jDӏs3yVyg Nֶ9=;#*kکOXVUZ˲ (A-ܭ // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #define __VERSION_CC__ #include "siddefs.h" lmms-1.1.3/plugins/sid/voice.cc000066400000000000000000000113521247673406200163550ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #define __VOICE_CC__ #include "voice.h" // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- Voice::Voice() { set_chip_model(MOS6581); } // ---------------------------------------------------------------------------- // Set chip model. // ---------------------------------------------------------------------------- void Voice::set_chip_model(chip_model model) { wave.set_chip_model(model); if (model == MOS6581) { // The waveform D/A converter introduces a DC offset in the signal // to the envelope multiplying D/A converter. The "zero" level of // the waveform D/A converter can be found as follows: // // Measure the "zero" voltage of voice 3 on the SID audio output // pin, routing only voice 3 to the mixer ($d417 = $0b, $d418 = // $0f, all other registers zeroed). // // Then set the sustain level for voice 3 to maximum and search for // the waveform output value yielding the same voltage as found // above. This is done by trying out different waveform output // values until the correct value is found, e.g. with the following // program: // // lda #$08 // sta $d412 // lda #$0b // sta $d417 // lda #$0f // sta $d418 // lda #$f0 // sta $d414 // lda #$21 // sta $d412 // lda #$01 // sta $d40e // // ldx #$00 // lda #$38 ; Tweak this to find the "zero" level //l cmp $d41b // bne l // stx $d40e ; Stop frequency counter - freeze waveform output // brk // // The waveform output range is 0x000 to 0xfff, so the "zero" // level should ideally have been 0x800. In the measured chip, the // waveform output "zero" level was found to be 0x380 (i.e. $d41b // = 0x38) at 5.94V. wave_zero = 0x380; // The envelope multiplying D/A converter introduces another DC // offset. This is isolated by the following measurements: // // * The "zero" output level of the mixer at full volume is 5.44V. // * Routing one voice to the mixer at full volume yields // 6.75V at maximum voice output (wave = 0xfff, sustain = 0xf) // 5.94V at "zero" voice output (wave = any, sustain = 0x0) // 5.70V at minimum voice output (wave = 0x000, sustain = 0xf) // * The DC offset of one voice is (5.94V - 5.44V) = 0.50V // * The dynamic range of one voice is |6.75V - 5.70V| = 1.05V // * The DC offset is thus 0.50V/1.05V ~ 1/2 of the dynamic range. // // Note that by removing the DC offset, we get the following ranges for // one voice: // y > 0: (6.75V - 5.44V) - 0.50V = 0.81V // y < 0: (5.70V - 5.44V) - 0.50V = -0.24V // The scaling of the voice amplitude is not symmetric about y = 0; // this follows from the DC level in the waveform output. voice_DC = 0x800*0xff; } else { // No DC offsets in the MOS8580. wave_zero = 0x800; voice_DC = 0; } } // ---------------------------------------------------------------------------- // Set sync source. // ---------------------------------------------------------------------------- void Voice::set_sync_source(Voice* source) { wave.set_sync_source(&source->wave); } // ---------------------------------------------------------------------------- // Register functions. // ---------------------------------------------------------------------------- void Voice::writeCONTROL_REG(reg8 control) { wave.writeCONTROL_REG(control); envelope.writeCONTROL_REG(control); } // ---------------------------------------------------------------------------- // SID reset. // ---------------------------------------------------------------------------- void Voice::reset() { wave.reset(); envelope.reset(); } lmms-1.1.3/plugins/sid/voice.h000066400000000000000000000045331247673406200162220ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __VOICE_H__ #define __VOICE_H__ #include "siddefs.h" #include "wave.h" #include "envelope.h" class Voice { public: Voice(); void set_chip_model(chip_model model); void set_sync_source(Voice*); void reset(); void writeCONTROL_REG(reg8); // Amplitude modulated waveform output. // Range [-2048*255, 2047*255]. RESID_INLINE sound_sample output(); protected: WaveformGenerator wave; EnvelopeGenerator envelope; // Waveform D/A zero level. sound_sample wave_zero; // Multiplying D/A DC offset. sound_sample voice_DC; friend class cSID; }; // ---------------------------------------------------------------------------- // Inline functions. // The following function is defined inline because it is called every // time a sample is calculated. // ---------------------------------------------------------------------------- #if RESID_INLINING || defined(__VOICE_CC__) // ---------------------------------------------------------------------------- // Amplitude modulated waveform output. // Ideal range [-2048*255, 2047*255]. // ---------------------------------------------------------------------------- RESID_INLINE sound_sample Voice::output() { // Multiply oscillator output with envelope output. return (wave.output() - wave_zero)*envelope.output() + voice_DC; } #endif // RESID_INLINING || defined(__VOICE_CC__) #endif // not __VOICE_H__ lmms-1.1.3/plugins/sid/wave.cc000066400000000000000000000102501247673406200162060ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #define __WAVE_CC__ #include "wave.h" // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- WaveformGenerator::WaveformGenerator() { sync_source = this; set_chip_model(MOS6581); reset(); } // ---------------------------------------------------------------------------- // Set sync source. // ---------------------------------------------------------------------------- void WaveformGenerator::set_sync_source(WaveformGenerator* source) { sync_source = source; source->sync_dest = this; } // ---------------------------------------------------------------------------- // Set chip model. // ---------------------------------------------------------------------------- void WaveformGenerator::set_chip_model(chip_model model) { if (model == MOS6581) { wave__ST = wave6581__ST; wave_P_T = wave6581_P_T; wave_PS_ = wave6581_PS_; wave_PST = wave6581_PST; } else { wave__ST = wave8580__ST; wave_P_T = wave8580_P_T; wave_PS_ = wave8580_PS_; wave_PST = wave8580_PST; } } // ---------------------------------------------------------------------------- // Register functions. // ---------------------------------------------------------------------------- void WaveformGenerator::writeFREQ_LO(reg8 freq_lo) { freq = ( freq & 0xff00 ) | ( freq_lo & 0x00ff ); } void WaveformGenerator::writeFREQ_HI(reg8 freq_hi) { freq = ( (freq_hi << 8) & 0xff00 ) | ( freq & 0x00ff ); } void WaveformGenerator::writePW_LO(reg8 pw_lo) { pw = ( pw & 0xf00 ) | ( pw_lo & 0x0ff ); } void WaveformGenerator::writePW_HI(reg8 pw_hi) { pw = ( (pw_hi << 8) & 0xf00 ) | ( pw & 0x0ff ); } void WaveformGenerator::writeCONTROL_REG(reg8 control) { waveform = (control >> 4) & 0x0f; ring_mod = control & 0x04; sync = control & 0x02; reg8 test_next = control & 0x08; // Test bit set. // The accumulator and the shift register are both cleared. // NB! The shift register is not really cleared immediately. It seems like // the individual bits in the shift register start to fade down towards // zero when test is set. All bits reach zero within approximately // $2000 - $4000 cycles. // This is not modeled. There should fortunately be little audible output // from this peculiar behavior. if (test_next) { accumulator = 0; shift_register = 0; } // Test bit cleared. // The accumulator starts counting, and the shift register is reset to // the value 0x7ffff8. // NB! The shift register will not actually be set to this exact value if the // shift register bits have not had time to fade to zero. // This is not modeled. else if (test) { shift_register = 0x7ffff8; } test = test_next; // The gate bit is handled by the EnvelopeGenerator. } reg8 WaveformGenerator::readOSC() { return output() >> 4; } // ---------------------------------------------------------------------------- // SID reset. // ---------------------------------------------------------------------------- void WaveformGenerator::reset() { accumulator = 0; shift_register = 0x7ffff8; freq = 0; pw = 0; test = 0; ring_mod = 0; sync = 0; msb_rising = false; } lmms-1.1.3/plugins/sid/wave.h000066400000000000000000000361261247673406200160620ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #ifndef __WAVE_H__ #define __WAVE_H__ #include "siddefs.h" // ---------------------------------------------------------------------------- // A 24 bit accumulator is the basis for waveform generation. FREQ is added to // the lower 16 bits of the accumulator each cycle. // The accumulator is set to zero when TEST is set, and starts counting // when TEST is cleared. // The noise waveform is taken from intermediate bits of a 23 bit shift // register. This register is clocked by bit 19 of the accumulator. // ---------------------------------------------------------------------------- class WaveformGenerator { public: WaveformGenerator(); void set_sync_source(WaveformGenerator*); void set_chip_model(chip_model model); RESID_INLINE void clock(); RESID_INLINE void clock(cycle_count delta_t); RESID_INLINE void synchronize(); void reset(); void writeFREQ_LO(reg8); void writeFREQ_HI(reg8); void writePW_LO(reg8); void writePW_HI(reg8); void writeCONTROL_REG(reg8); reg8 readOSC(); // 12-bit waveform output. RESID_INLINE reg12 output(); protected: const WaveformGenerator* sync_source; WaveformGenerator* sync_dest; // Tell whether the accumulator MSB was set high on this cycle. bool msb_rising; reg24 accumulator; reg24 shift_register; // Fout = (Fn*Fclk/16777216)Hz reg16 freq; // PWout = (PWn/40.95)% reg12 pw; // The control register right-shifted 4 bits; used for output function // table lookup. reg8 waveform; // The remaining control register bits. reg8 test; reg8 ring_mod; reg8 sync; // The gate bit is handled by the EnvelopeGenerator. // 16 possible combinations of waveforms. RESID_INLINE reg12 output____(); RESID_INLINE reg12 output___T(); RESID_INLINE reg12 output__S_(); RESID_INLINE reg12 output__ST(); RESID_INLINE reg12 output_P__(); RESID_INLINE reg12 output_P_T(); RESID_INLINE reg12 output_PS_(); RESID_INLINE reg12 output_PST(); RESID_INLINE reg12 outputN___(); RESID_INLINE reg12 outputN__T(); RESID_INLINE reg12 outputN_S_(); RESID_INLINE reg12 outputN_ST(); RESID_INLINE reg12 outputNP__(); RESID_INLINE reg12 outputNP_T(); RESID_INLINE reg12 outputNPS_(); RESID_INLINE reg12 outputNPST(); // Sample data for combinations of waveforms. static reg8 wave6581__ST[]; static reg8 wave6581_P_T[]; static reg8 wave6581_PS_[]; static reg8 wave6581_PST[]; static reg8 wave8580__ST[]; static reg8 wave8580_P_T[]; static reg8 wave8580_PS_[]; static reg8 wave8580_PST[]; reg8* wave__ST; reg8* wave_P_T; reg8* wave_PS_; reg8* wave_PST; friend class Voice; friend class cSID; }; // ---------------------------------------------------------------------------- // Inline functions. // The following functions are defined inline because they are called every // time a sample is calculated. // ---------------------------------------------------------------------------- #if RESID_INLINING || defined(__WAVE_CC__) // ---------------------------------------------------------------------------- // SID clocking - 1 cycle. // ---------------------------------------------------------------------------- RESID_INLINE void WaveformGenerator::clock() { // No operation if test bit is set. if (test) { return; } reg24 accumulator_prev = accumulator; // Calculate new accumulator value; accumulator += freq; accumulator &= 0xffffff; // Check whether the MSB is set high. This is used for synchronization. msb_rising = !(accumulator_prev & 0x800000) && (accumulator & 0x800000); // Shift noise register once for each time accumulator bit 19 is set high. if (!(accumulator_prev & 0x080000) && (accumulator & 0x080000)) { reg24 bit0 = ((shift_register >> 22) ^ (shift_register >> 17)) & 0x1; shift_register <<= 1; shift_register &= 0x7fffff; shift_register |= bit0; } } // ---------------------------------------------------------------------------- // SID clocking - delta_t cycles. // ---------------------------------------------------------------------------- RESID_INLINE void WaveformGenerator::clock(cycle_count delta_t) { // No operation if test bit is set. if (test) { return; } reg24 accumulator_prev = accumulator; // Calculate new accumulator value; reg24 delta_accumulator = delta_t*freq; accumulator += delta_accumulator; accumulator &= 0xffffff; // Check whether the MSB is set high. This is used for synchronization. msb_rising = !(accumulator_prev & 0x800000) && (accumulator & 0x800000); // Shift noise register once for each time accumulator bit 19 is set high. // Bit 19 is set high each time 2^20 (0x100000) is added to the accumulator. reg24 shift_period = 0x100000; while (delta_accumulator) { if (delta_accumulator < shift_period) { shift_period = delta_accumulator; // Determine whether bit 19 is set on the last period. // NB! Requires two's complement integer. if (shift_period <= 0x080000) { // Check for flip from 0 to 1. if (((accumulator - shift_period) & 0x080000) || !(accumulator & 0x080000)) { break; } } else { // Check for flip from 0 (to 1 or via 1 to 0) or from 1 via 0 to 1. if (((accumulator - shift_period) & 0x080000) && !(accumulator & 0x080000)) { break; } } } // Shift the noise/random register. // NB! The shift is actually delayed 2 cycles, this is not modeled. reg24 bit0 = ((shift_register >> 22) ^ (shift_register >> 17)) & 0x1; shift_register <<= 1; shift_register &= 0x7fffff; shift_register |= bit0; delta_accumulator -= shift_period; } } // ---------------------------------------------------------------------------- // Synchronize oscillators. // This must be done after all the oscillators have been clock()'ed since the // oscillators operate in parallel. // Note that the oscillators must be clocked exactly on the cycle when the // MSB is set high for hard sync to operate correctly. See SID::clock(). // ---------------------------------------------------------------------------- RESID_INLINE void WaveformGenerator::synchronize() { // A special case occurs when a sync source is synced itself on the same // cycle as when its MSB is set high. In this case the destination will // not be synced. This has been verified by sampling OSC3. if (msb_rising && sync_dest->sync && !(sync && sync_source->msb_rising)) { sync_dest->accumulator = 0; } } // ---------------------------------------------------------------------------- // Output functions. // NB! The output from SID 8580 is delayed one cycle compared to SID 6581, // this is not modeled. // ---------------------------------------------------------------------------- // No waveform: // Zero output. // RESID_INLINE reg12 WaveformGenerator::output____() { return 0x000; } // Triangle: // The upper 12 bits of the accumulator are used. // The MSB is used to create the falling edge of the triangle by inverting // the lower 11 bits. The MSB is thrown away and the lower 11 bits are // left-shifted (half the resolution, full amplitude). // Ring modulation substitutes the MSB with MSB EOR sync_source MSB. // RESID_INLINE reg12 WaveformGenerator::output___T() { reg24 msb = (ring_mod ? accumulator ^ sync_source->accumulator : accumulator) & 0x800000; return ((msb ? ~accumulator : accumulator) >> 11) & 0xfff; } // Sawtooth: // The output is identical to the upper 12 bits of the accumulator. // RESID_INLINE reg12 WaveformGenerator::output__S_() { return accumulator >> 12; } // Pulse: // The upper 12 bits of the accumulator are used. // These bits are compared to the pulse width register by a 12 bit digital // comparator; output is either all one or all zero bits. // NB! The output is actually delayed one cycle after the compare. // This is not modeled. // // The test bit, when set to one, holds the pulse waveform output at 0xfff // regardless of the pulse width setting. // RESID_INLINE reg12 WaveformGenerator::output_P__() { return (test || (accumulator >> 12) >= pw) ? 0xfff : 0x000; } // Noise: // The noise output is taken from intermediate bits of a 23-bit shift register // which is clocked by bit 19 of the accumulator. // NB! The output is actually delayed 2 cycles after bit 19 is set high. // This is not modeled. // // Operation: Calculate EOR result, shift register, set bit 0 = result. // // ----------------------->--------------------- // | | // ----EOR---- | // | | | // 2 2 2 1 1 1 1 1 1 1 1 1 1 | // Register bits: 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 <--- // | | | | | | | | // OSC3 bits : 7 6 5 4 3 2 1 0 // // Since waveform output is 12 bits the output is left-shifted 4 times. // RESID_INLINE reg12 WaveformGenerator::outputN___() { return ((shift_register & 0x400000) >> 11) | ((shift_register & 0x100000) >> 10) | ((shift_register & 0x010000) >> 7) | ((shift_register & 0x002000) >> 5) | ((shift_register & 0x000800) >> 4) | ((shift_register & 0x000080) >> 1) | ((shift_register & 0x000010) << 1) | ((shift_register & 0x000004) << 2); } // Combined waveforms: // By combining waveforms, the bits of each waveform are effectively short // circuited. A zero bit in one waveform will result in a zero output bit // (thus the infamous claim that the waveforms are AND'ed). // However, a zero bit in one waveform will also affect the neighboring bits // in the output. The reason for this has not been determined. // // Example: // // 1 1 // Bit # 1 0 9 8 7 6 5 4 3 2 1 0 // ----------------------- // Sawtooth 0 0 0 1 1 1 1 1 1 0 0 0 // // Triangle 0 0 1 1 1 1 1 1 0 0 0 0 // // AND 0 0 0 1 1 1 1 1 0 0 0 0 // // Output 0 0 0 0 1 1 1 0 0 0 0 0 // // // This behavior would be quite difficult to model exactly, since the SID // in this case does not act as a digital state machine. Tests show that minor // (1 bit) differences can actually occur in the output from otherwise // identical samples from OSC3 when waveforms are combined. To further // complicate the situation the output changes slightly with time (more // neighboring bits are successively set) when the 12-bit waveform // registers are kept unchanged. // // It is probably possible to come up with a valid model for the // behavior, however this would be far too slow for practical use since it // would have to be based on the mutual influence of individual bits. // // The output is instead approximated by using the upper bits of the // accumulator as an index to look up the combined output in a table // containing actual combined waveform samples from OSC3. // These samples are 8 bit, so 4 bits of waveform resolution is lost. // All OSC3 samples are taken with FREQ=0x1000, adding a 1 to the upper 12 // bits of the accumulator each cycle for a sample period of 4096 cycles. // // Sawtooth+Triangle: // The sawtooth output is used to look up an OSC3 sample. // // Pulse+Triangle: // The triangle output is right-shifted and used to look up an OSC3 sample. // The sample is output if the pulse output is on. // The reason for using the triangle output as the index is to handle ring // modulation. Only the first half of the sample is used, which should be OK // since the triangle waveform has half the resolution of the accumulator. // // Pulse+Sawtooth: // The sawtooth output is used to look up an OSC3 sample. // The sample is output if the pulse output is on. // // Pulse+Sawtooth+Triangle: // The sawtooth output is used to look up an OSC3 sample. // The sample is output if the pulse output is on. // RESID_INLINE reg12 WaveformGenerator::output__ST() { return wave__ST[output__S_()] << 4; } RESID_INLINE reg12 WaveformGenerator::output_P_T() { return (wave_P_T[output___T() >> 1] << 4) & output_P__(); } RESID_INLINE reg12 WaveformGenerator::output_PS_() { return (wave_PS_[output__S_()] << 4) & output_P__(); } RESID_INLINE reg12 WaveformGenerator::output_PST() { return (wave_PST[output__S_()] << 4) & output_P__(); } // Combined waveforms including noise: // All waveform combinations including noise output zero after a few cycles. // NB! The effects of such combinations are not fully explored. It is claimed // that the shift register may be filled with zeroes and locked up, which // seems to be true. // We have not attempted to model this behavior, suffice to say that // there is very little audible output from waveform combinations including // noise. We hope that nobody is actually using it. // RESID_INLINE reg12 WaveformGenerator::outputN__T() { return 0; } RESID_INLINE reg12 WaveformGenerator::outputN_S_() { return 0; } RESID_INLINE reg12 WaveformGenerator::outputN_ST() { return 0; } RESID_INLINE reg12 WaveformGenerator::outputNP__() { return 0; } RESID_INLINE reg12 WaveformGenerator::outputNP_T() { return 0; } RESID_INLINE reg12 WaveformGenerator::outputNPS_() { return 0; } RESID_INLINE reg12 WaveformGenerator::outputNPST() { return 0; } // ---------------------------------------------------------------------------- // Select one of 16 possible combinations of waveforms. // ---------------------------------------------------------------------------- RESID_INLINE reg12 WaveformGenerator::output() { // It may seem cleaner to use an array of member functions to return // waveform output; however a switch with inline functions is faster. switch (waveform) { default: case 0x0: return output____(); case 0x1: return output___T(); case 0x2: return output__S_(); case 0x3: return output__ST(); case 0x4: return output_P__(); case 0x5: return output_P_T(); case 0x6: return output_PS_(); case 0x7: return output_PST(); case 0x8: return outputN___(); case 0x9: return outputN__T(); case 0xa: return outputN_S_(); case 0xb: return outputN_ST(); case 0xc: return outputNP__(); case 0xd: return outputNP_T(); case 0xe: return outputNPS_(); case 0xf: return outputNPST(); } } #endif // RESID_INLINING || defined(__WAVE_CC__) #endif // not __WAVE_H__ lmms-1.1.3/plugins/sid/wave6581_PST.cc000066400000000000000000001000521247673406200172600ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave6581_PST[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x7f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, /* 0x7f8: */ 0x00, 0x00, 0x00, 0x78, 0x78, 0x7e, 0x7f, 0x7f, /* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, /* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0xff0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, /* 0xff8: */ 0x00, 0x00, 0x00, 0x78, 0x78, 0x7e, 0x7f, 0x7f, }; lmms-1.1.3/plugins/sid/wave6581_PS_.cc000066400000000000000000001000521247673406200172730ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave6581_PS_[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, /* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, /* 0x3f8: */ 0x00, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, /* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f, /* 0x5f8: */ 0x00, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f, 0x5f, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x6d, /* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x6e8: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x6e, /* 0x6f0: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x6f, /* 0x6f8: */ 0x00, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x738: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x60, 0x73, /* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x758: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x75, /* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x768: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x76, /* 0x770: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x77, /* 0x778: */ 0x00, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77, /* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x798: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x79, /* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x7a8: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x70, 0x7a, /* 0x7b0: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7b, /* 0x7b8: */ 0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b, /* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0x7c8: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7c, /* 0x7d0: */ 0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7d, /* 0x7d8: */ 0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d, /* 0x7e0: */ 0x00, 0x40, 0x40, 0x78, 0x60, 0x78, 0x78, 0x7e, /* 0x7e8: */ 0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e, /* 0x7f0: */ 0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, /* 0x7f8: */ 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, /* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f, /* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, /* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, /* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, /* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, /* 0xbf8: */ 0x00, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f, /* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, /* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f, /* 0xdf8: */ 0x00, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f, 0x5f, /* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, /* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b, /* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6d, /* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0xee8: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x6e, /* 0xef0: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x6f, /* 0xef8: */ 0x00, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f, /* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0xf38: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x60, 0x73, /* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0xf58: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x75, /* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0xf68: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x76, /* 0xf70: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x77, /* 0xf78: */ 0x00, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77, /* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0xf98: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x79, /* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0xfa8: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x70, 0x7a, /* 0xfb0: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7b, /* 0xfb8: */ 0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b, /* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xfc8: */ 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7c, /* 0xfd0: */ 0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7d, /* 0xfd8: */ 0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d, /* 0xfe0: */ 0x00, 0x40, 0x40, 0x78, 0x60, 0x78, 0x78, 0x7e, /* 0xfe8: */ 0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e, /* 0xff0: */ 0x70, 0x7c, 0x7c, 0x7f, 0x7c, 0x7f, 0x7f, 0x7f, /* 0xff8: */ 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, }; lmms-1.1.3/plugins/sid/wave6581_P_T.cc000066400000000000000000001000521247673406200172740ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave6581_P_T[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x38, 0x3f, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x5f, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x378: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x6f, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x70, 0x77, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7b, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70, /* 0x3e8: */ 0x00, 0x40, 0x40, 0x70, 0x60, 0x70, 0x78, 0x7d, /* 0x3f0: */ 0x00, 0x40, 0x60, 0x78, 0x60, 0x78, 0x78, 0x7e, /* 0x3f8: */ 0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x9f, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x578: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xa0, 0xaf, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0, /* 0x5b8: */ 0x00, 0x80, 0x80, 0xa0, 0x80, 0xa0, 0xb0, 0xb7, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0, /* 0x5d8: */ 0x00, 0x80, 0x80, 0xa0, 0x80, 0xb0, 0xb0, 0xbb, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xb0, /* 0x5e8: */ 0x80, 0x80, 0x80, 0xb0, 0x80, 0xb0, 0xb8, 0xbd, /* 0x5f0: */ 0x80, 0x80, 0x80, 0xb8, 0xa0, 0xb8, 0xb8, 0xbe, /* 0x5f8: */ 0xa0, 0xb8, 0xbc, 0xbf, 0xbe, 0xbf, 0xbf, 0xbf, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, /* 0x670: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, /* 0x678: */ 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x698: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xc0, 0xc0, /* 0x6b8: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd7, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0, /* 0x6d0: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, /* 0x6d8: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd0, 0xdb, /* 0x6e0: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xd0, /* 0x6e8: */ 0x80, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd8, 0xdd, /* 0x6f0: */ 0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd8, 0xd8, 0xde, /* 0x6f8: */ 0xc0, 0xd8, 0xdc, 0xdf, 0xdc, 0xdf, 0xdf, 0xdf, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x718: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x728: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, /* 0x730: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, /* 0x738: */ 0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe7, /* 0x740: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0, /* 0x748: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, /* 0x750: */ 0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0, /* 0x758: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xeb, /* 0x760: */ 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, /* 0x768: */ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, /* 0x770: */ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, 0xe8, 0xee, /* 0x778: */ 0xe0, 0xe8, 0xec, 0xef, 0xec, 0xef, 0xef, 0xef, /* 0x780: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0x788: */ 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, /* 0x790: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, /* 0x798: */ 0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf3, /* 0x7a0: */ 0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xf0, /* 0x7a8: */ 0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf5, /* 0x7b0: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf6, /* 0x7b8: */ 0xf0, 0xf0, 0xf4, 0xf7, 0xf4, 0xf7, 0xf7, 0xf7, /* 0x7c0: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, /* 0x7c8: */ 0xe0, 0xe0, 0xe0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf9, /* 0x7d0: */ 0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xfa, /* 0x7d8: */ 0xf0, 0xf8, 0xf8, 0xfb, 0xf8, 0xfb, 0xfb, 0xfb, /* 0x7e0: */ 0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xfc, 0xfc, /* 0x7e8: */ 0xf8, 0xfc, 0xfc, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd, /* 0x7f0: */ 0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, /* 0x7f8: */ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x800: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, /* 0x808: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, /* 0x810: */ 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfc, 0xfc, 0xf8, /* 0x818: */ 0xfc, 0xfc, 0xfc, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0, /* 0x820: */ 0xfb, 0xfb, 0xfb, 0xf8, 0xfb, 0xf8, 0xf8, 0xf0, /* 0x828: */ 0xfa, 0xf8, 0xf8, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0, /* 0x830: */ 0xf9, 0xf8, 0xf8, 0xf0, 0xf8, 0xf0, 0xe0, 0xe0, /* 0x838: */ 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, /* 0x840: */ 0xf7, 0xf7, 0xf7, 0xf4, 0xf7, 0xf4, 0xf0, 0xf0, /* 0x848: */ 0xf6, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, /* 0x850: */ 0xf5, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0, /* 0x858: */ 0xf0, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80, /* 0x860: */ 0xf3, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0, /* 0x868: */ 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, /* 0x870: */ 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, /* 0x878: */ 0xc0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0x880: */ 0xef, 0xef, 0xef, 0xec, 0xef, 0xec, 0xe8, 0xe0, /* 0x888: */ 0xee, 0xe8, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, /* 0x890: */ 0xed, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, /* 0x898: */ 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, /* 0x8a0: */ 0xeb, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, /* 0x8a8: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, /* 0x8b0: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, /* 0x8b8: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0x8c0: */ 0xe7, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80, /* 0x8c8: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, /* 0x8d0: */ 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, /* 0x8d8: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x900: */ 0xdf, 0xdf, 0xdf, 0xdc, 0xdf, 0xdc, 0xd8, 0xc0, /* 0x908: */ 0xde, 0xd8, 0xd8, 0xc0, 0xd8, 0xc0, 0xc0, 0xc0, /* 0x910: */ 0xdd, 0xd8, 0xd0, 0xc0, 0xd0, 0xc0, 0xc0, 0x80, /* 0x918: */ 0xd0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, /* 0x920: */ 0xdb, 0xd0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, /* 0x928: */ 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00, /* 0x930: */ 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0x938: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x940: */ 0xd7, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, /* 0x948: */ 0xc0, 0xc0, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0x950: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0x958: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0x968: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x980: */ 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00, /* 0x988: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0x990: */ 0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c0: */ 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa00: */ 0xbf, 0xbf, 0xbf, 0xbe, 0xbf, 0xbc, 0xbc, 0xa0, /* 0xa08: */ 0xbe, 0xbc, 0xb8, 0xa0, 0xb8, 0xa0, 0x80, 0x80, /* 0xa10: */ 0xbd, 0xb8, 0xb0, 0x80, 0xb0, 0x80, 0x80, 0x80, /* 0xa18: */ 0xb0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0xa20: */ 0xbb, 0xb0, 0xb0, 0x80, 0xa0, 0x80, 0x80, 0x00, /* 0xa28: */ 0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xa30: */ 0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xa38: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa40: */ 0xb7, 0xb0, 0xa0, 0x80, 0xa0, 0x80, 0x80, 0x00, /* 0xa48: */ 0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xa50: */ 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa80: */ 0xaf, 0xa0, 0xa0, 0x80, 0x80, 0x80, 0x80, 0x00, /* 0xa88: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa0: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac0: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb00: */ 0x9f, 0x90, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0xb08: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb10: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb20: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb40: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb80: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc00: */ 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7c, 0x7c, 0x70, /* 0xc08: */ 0x7e, 0x7c, 0x78, 0x60, 0x78, 0x60, 0x60, 0x00, /* 0xc10: */ 0x7d, 0x78, 0x78, 0x60, 0x70, 0x40, 0x40, 0x00, /* 0xc18: */ 0x70, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc20: */ 0x7b, 0x78, 0x70, 0x40, 0x70, 0x40, 0x00, 0x00, /* 0xc28: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc30: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc40: */ 0x77, 0x70, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xc48: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc50: */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc80: */ 0x6f, 0x60, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xc88: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd00: */ 0x5f, 0x58, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, /* 0xd08: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe00: */ 0x3f, 0x3c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; lmms-1.1.3/plugins/sid/wave6581__ST.cc000066400000000000000000001000521247673406200172770ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave6581__ST[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3f0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, /* 0x3f8: */ 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7e0: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, /* 0x7e8: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, /* 0x7f0: */ 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, /* 0x7f8: */ 0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, /* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, /* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, /* 0xbf8: */ 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f, /* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f, /* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0xf00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe0: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, /* 0xfe8: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, /* 0xff0: */ 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, /* 0xff8: */ 0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, }; lmms-1.1.3/plugins/sid/wave8580_PST.cc000066400000000000000000001000521247673406200172610ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave8580_PST[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, /* 0x7f0: */ 0x60, 0x20, 0x70, 0x70, 0x70, 0x70, 0x70, 0x78, /* 0x7f8: */ 0x78, 0x78, 0x7c, 0x7c, 0x7e, 0x7e, 0x7f, 0x7f, /* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1e, 0x3f, /* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xdf8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8c, 0x9f, /* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, /* 0xe68: */ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe78: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe80: */ 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, /* 0xe88: */ 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xea0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xea8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xeb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xeb8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xec0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xec8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xed0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xed8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xee0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xee8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, /* 0xef0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xef8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, /* 0xf00: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf08: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf10: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf18: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf20: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf28: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf30: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf38: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf40: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf48: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf50: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf58: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf60: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf68: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, /* 0xf70: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf78: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe3, /* 0xf80: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf88: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf90: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf98: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xfa0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xfa8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xfb0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, /* 0xfb8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfc0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfc8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfd0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfd8: */ 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfe0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfe8: */ 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, /* 0xff0: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, /* 0xff8: */ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; lmms-1.1.3/plugins/sid/wave8580_PS_.cc000066400000000000000000001000521247673406200172740ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave8580_PS_[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x1f, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, /* 0x3f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, /* 0x3f8: */ 0x00, 0x0c, 0x1c, 0x3f, 0x1e, 0x3f, 0x3f, 0x3f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, /* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, /* 0x5f8: */ 0x00, 0x00, 0x00, 0x5f, 0x0c, 0x5f, 0x5f, 0x5f, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, /* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, /* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, /* 0x6f8: */ 0x00, 0x40, 0x40, 0x6f, 0x40, 0x6f, 0x6f, 0x6f, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, /* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x61, /* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x768: */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x70, /* 0x770: */ 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, /* 0x778: */ 0x40, 0x60, 0x60, 0x77, 0x60, 0x77, 0x77, 0x77, /* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, /* 0x798: */ 0x00, 0x40, 0x40, 0x60, 0x40, 0x60, 0x60, 0x79, /* 0x7a0: */ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, /* 0x7a8: */ 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, 0x60, 0x78, /* 0x7b0: */ 0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, /* 0x7b8: */ 0x60, 0x70, 0x70, 0x78, 0x70, 0x79, 0x7b, 0x7b, /* 0x7c0: */ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, /* 0x7c8: */ 0x60, 0x60, 0x60, 0x70, 0x60, 0x70, 0x70, 0x7c, /* 0x7d0: */ 0x60, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7c, /* 0x7d8: */ 0x70, 0x78, 0x78, 0x7c, 0x78, 0x7c, 0x7c, 0x7d, /* 0x7e0: */ 0x70, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x7c, /* 0x7e8: */ 0x78, 0x7c, 0x7c, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e, /* 0x7f0: */ 0x7c, 0x7c, 0x7c, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, /* 0x7f8: */ 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, /* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, /* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, /* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, /* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8d, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x8e, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x8f, /* 0x9f8: */ 0x80, 0x80, 0x80, 0x9f, 0x80, 0x9f, 0x9f, 0x9f, /* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xa78: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x87, /* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xab8: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x83, /* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, /* 0xad8: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, /* 0xae0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xae8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x84, /* 0xaf0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x87, /* 0xaf8: */ 0x80, 0x80, 0x80, 0x87, 0x80, 0x8f, 0xaf, 0xaf, /* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xb18: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb20: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, /* 0xb28: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb30: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb38: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, /* 0xb40: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb48: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb50: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb58: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, /* 0xb60: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb68: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, /* 0xb70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, /* 0xb78: */ 0x80, 0x80, 0x80, 0xa0, 0x80, 0xa3, 0xb7, 0xb7, /* 0xb80: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xb1, /* 0xba0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xba8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xb0, /* 0xbb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xb0, /* 0xbb8: */ 0x80, 0xa0, 0xa0, 0xb0, 0xa0, 0xb8, 0xb9, 0xbb, /* 0xbc0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, /* 0xbc8: */ 0x80, 0x80, 0x80, 0xa0, 0x80, 0xa0, 0xa0, 0xb8, /* 0xbd0: */ 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xb8, /* 0xbd8: */ 0xa0, 0xb0, 0xb0, 0xb8, 0xb0, 0xbc, 0xbc, 0xbd, /* 0xbe0: */ 0xa0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb8, 0xb8, 0xbc, /* 0xbe8: */ 0xb0, 0xb8, 0xb8, 0xbc, 0xb8, 0xbc, 0xbe, 0xbe, /* 0xbf0: */ 0xb8, 0xbc, 0xbc, 0xbe, 0xbc, 0xbe, 0xbe, 0xbf, /* 0xbf8: */ 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, /* 0xc00: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, /* 0xc08: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, /* 0xc10: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc18: */ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc20: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc28: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc30: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc38: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, /* 0xc40: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc48: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc50: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc58: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc60: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc68: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc78: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc7, /* 0xc80: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xca0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xca8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xcb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xcb8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc3, /* 0xcc0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xcc8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0xcd0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0xcd8: */ 0x80, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc1, /* 0xce0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0xce8: */ 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xcf0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc7, /* 0xcf8: */ 0xc0, 0xc0, 0xc0, 0xc7, 0xc0, 0xcf, 0xcf, 0xcf, /* 0xd00: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xd08: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xd10: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xd18: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0xd20: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xd28: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0xd30: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, /* 0xd38: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc3, /* 0xd40: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0xd48: */ 0x80, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, /* 0xd50: */ 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd58: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, /* 0xd60: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd68: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd70: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd78: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc7, 0xd7, /* 0xd80: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd88: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd90: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xd98: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xda0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xda8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, /* 0xdb0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, /* 0xdb8: */ 0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd8, 0xdb, /* 0xdc0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xdc8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd8, /* 0xdd0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd8, /* 0xdd8: */ 0xc0, 0xc0, 0xc0, 0xd8, 0xd0, 0xd8, 0xd8, 0xdd, /* 0xde0: */ 0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd0, 0xdc, /* 0xde8: */ 0xd0, 0xd8, 0xd8, 0xdc, 0xd8, 0xdc, 0xdc, 0xde, /* 0xdf0: */ 0xd8, 0xdc, 0xdc, 0xde, 0xdc, 0xde, 0xde, 0xdf, /* 0xdf8: */ 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, /* 0xe00: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe08: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe10: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe18: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe20: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe28: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe30: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe38: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe3, /* 0xe40: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe48: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe50: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, /* 0xe58: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe1, /* 0xe60: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, /* 0xe68: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xe70: */ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xe78: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe3, 0xe7, /* 0xe80: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, /* 0xe88: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, /* 0xe90: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, /* 0xe98: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xea0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xea8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xeb0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xeb8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xeb, /* 0xec0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xec8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xed0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xed8: */ 0xe0, 0xe0, 0xe0, 0xe8, 0xe0, 0xe8, 0xe8, 0xed, /* 0xee0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xec, /* 0xee8: */ 0xe0, 0xe0, 0xe0, 0xec, 0xe8, 0xec, 0xec, 0xee, /* 0xef0: */ 0xe8, 0xe8, 0xe8, 0xec, 0xec, 0xee, 0xee, 0xef, /* 0xef8: */ 0xec, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, /* 0xf00: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf08: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf10: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf18: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, /* 0xf20: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, /* 0xf28: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf0, /* 0xf30: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf38: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf3, /* 0xf40: */ 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf48: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf50: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf58: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf5, /* 0xf60: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf68: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, 0xf4, 0xf6, /* 0xf70: */ 0xf0, 0xf0, 0xf0, 0xf4, 0xf0, 0xf4, 0xf6, 0xf7, /* 0xf78: */ 0xf4, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, /* 0xf80: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, /* 0xf88: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, /* 0xf90: */ 0xf0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf8, /* 0xf98: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, /* 0xfa0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfa8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfa, /* 0xfb0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfb, /* 0xfb8: */ 0xf8, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, /* 0xfc0: */ 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, 0xfc, 0xfc, 0xfc, /* 0xfc8: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, /* 0xfd0: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, /* 0xfd8: */ 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, /* 0xfe0: */ 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, /* 0xfe8: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, /* 0xff0: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xff8: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; lmms-1.1.3/plugins/sid/wave8580_P_T.cc000066400000000000000000001000521247673406200172750ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave8580_P_T[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x3f, 0x3f, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x5e, 0x5f, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x378: */ 0x00, 0x00, 0x00, 0x40, 0x40, 0x60, 0x60, 0x6f, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x60, /* 0x3b8: */ 0x40, 0x40, 0x60, 0x60, 0x60, 0x60, 0x70, 0x77, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, /* 0x3c8: */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, /* 0x3d0: */ 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, 0x60, 0x70, /* 0x3d8: */ 0x60, 0x60, 0x60, 0x70, 0x70, 0x70, 0x78, 0x7b, /* 0x3e0: */ 0x60, 0x60, 0x60, 0x70, 0x60, 0x70, 0x70, 0x70, /* 0x3e8: */ 0x70, 0x70, 0x70, 0x78, 0x78, 0x78, 0x78, 0x7c, /* 0x3f0: */ 0x78, 0x78, 0x78, 0x7c, 0x78, 0x7c, 0x7c, 0x7e, /* 0x3f8: */ 0x7c, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x4d8: */ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x4e8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x4f0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x4f8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8e, 0x9f, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, /* 0x530: */ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x538: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x540: */ 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, /* 0x548: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x550: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x558: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x560: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x568: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x570: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x578: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xaf, /* 0x580: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x588: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x590: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x598: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x5a0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x5a8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x5b0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x5b8: */ 0x80, 0x80, 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xb7, /* 0x5c0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x5c8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, /* 0x5d0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xa0, /* 0x5d8: */ 0xa0, 0xa0, 0xa0, 0xb0, 0xa0, 0xb0, 0xb0, 0xbb, /* 0x5e0: */ 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xb0, 0xb0, /* 0x5e8: */ 0xa0, 0xb0, 0xb0, 0xb8, 0xb0, 0xb8, 0xb8, 0xbc, /* 0x5f0: */ 0xb0, 0xb8, 0xb8, 0xb8, 0xb8, 0xbc, 0xbc, 0xbe, /* 0x5f8: */ 0xbc, 0xbc, 0xbe, 0xbf, 0xbe, 0xbf, 0xbf, 0xbf, /* 0x600: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x608: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x610: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x618: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x620: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x628: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x630: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x638: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, /* 0x640: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x648: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x650: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, /* 0x658: */ 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x660: */ 0x80, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, /* 0x668: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x670: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x678: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, /* 0x680: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, /* 0x688: */ 0xc0, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x690: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x698: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6a0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6a8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6b0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6b8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd7, /* 0x6c0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6c8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6d0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x6d8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd0, 0xd9, /* 0x6e0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, /* 0x6e8: */ 0xc0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd8, 0xd8, 0xdc, /* 0x6f0: */ 0xd0, 0xd0, 0xd8, 0xd8, 0xd8, 0xdc, 0xdc, 0xde, /* 0x6f8: */ 0xdc, 0xdc, 0xde, 0xdf, 0xde, 0xdf, 0xdf, 0xdf, /* 0x700: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x708: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x710: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x718: */ 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe0, /* 0x720: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, /* 0x728: */ 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x730: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x738: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe7, /* 0x740: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x748: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x750: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x758: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, /* 0x760: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x768: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, 0xec, /* 0x770: */ 0xe0, 0xe0, 0xe0, 0xe8, 0xe8, 0xe8, 0xec, 0xee, /* 0x778: */ 0xec, 0xec, 0xec, 0xee, 0xee, 0xef, 0xef, 0xef, /* 0x780: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x788: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, /* 0x790: */ 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x798: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x7a0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x7a8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, /* 0x7b0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, /* 0x7b8: */ 0xf0, 0xf4, 0xf4, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, /* 0x7c0: */ 0xf0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf8, /* 0x7c8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0x7d0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0x7d8: */ 0xf8, 0xf8, 0xf8, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, /* 0x7e0: */ 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, /* 0x7e8: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, /* 0x7f0: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, /* 0x7f8: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x800: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x808: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, /* 0x810: */ 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, /* 0x818: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, /* 0x820: */ 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xf8, 0xf8, 0xf8, /* 0x828: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0x830: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0x838: */ 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x840: */ 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf4, 0xf4, 0xf0, /* 0x848: */ 0xf4, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x850: */ 0xf4, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x858: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x860: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0x868: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, /* 0x870: */ 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x878: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x880: */ 0xef, 0xef, 0xef, 0xee, 0xee, 0xec, 0xec, 0xe8, /* 0x888: */ 0xee, 0xec, 0xe8, 0xe8, 0xe8, 0xe0, 0xe0, 0xe0, /* 0x890: */ 0xec, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x898: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8a0: */ 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8a8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8b0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8b8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8c0: */ 0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8c8: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0x8d0: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, /* 0x8d8: */ 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x8e0: */ 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x8e8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x8f0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x8f8: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x900: */ 0xdf, 0xdf, 0xdf, 0xde, 0xdf, 0xde, 0xdc, 0xdc, /* 0x908: */ 0xde, 0xdc, 0xdc, 0xd8, 0xd8, 0xd8, 0xd0, 0xd0, /* 0x910: */ 0xdc, 0xd8, 0xd8, 0xd0, 0xd0, 0xd0, 0xd0, 0xc0, /* 0x918: */ 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x920: */ 0xd9, 0xd0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x928: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x930: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x938: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x940: */ 0xd7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x948: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x950: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x958: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x960: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x968: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x970: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, /* 0x978: */ 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x980: */ 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x988: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x990: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0x998: */ 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x80, /* 0x9a0: */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, /* 0x9a8: */ 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9b0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9b8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9c0: */ 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9c8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9d0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9d8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9e0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9e8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9f0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9f8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa00: */ 0xbf, 0xbf, 0xbf, 0xbe, 0xbf, 0xbe, 0xbc, 0xbc, /* 0xa08: */ 0xbe, 0xbc, 0xbc, 0xb8, 0xb8, 0xb8, 0xb8, 0xb0, /* 0xa10: */ 0xbc, 0xb8, 0xb8, 0xb0, 0xb8, 0xb0, 0xb0, 0xb0, /* 0xa18: */ 0xb0, 0xb0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, /* 0xa20: */ 0xbb, 0xb0, 0xb0, 0xa0, 0xb0, 0xa0, 0xa0, 0xa0, /* 0xa28: */ 0xa0, 0xa0, 0xa0, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa30: */ 0xa0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa38: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa40: */ 0xb7, 0xb0, 0xa0, 0xa0, 0xa0, 0x80, 0x80, 0x80, /* 0xa48: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa50: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa58: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa60: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa68: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa70: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa78: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa80: */ 0xaf, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xa98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xaa0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xaa8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xab0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xab8: */ 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xac0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xac8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, /* 0xad0: */ 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb00: */ 0x9f, 0x9e, 0x88, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb08: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb10: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xb18: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0xb20: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* 0xb28: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb40: */ 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb80: */ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc00: */ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7c, /* 0xc08: */ 0x7e, 0x7c, 0x7c, 0x78, 0x7c, 0x78, 0x78, 0x78, /* 0xc10: */ 0x7c, 0x78, 0x78, 0x78, 0x78, 0x70, 0x70, 0x70, /* 0xc18: */ 0x78, 0x70, 0x70, 0x60, 0x70, 0x60, 0x60, 0x60, /* 0xc20: */ 0x7b, 0x78, 0x70, 0x70, 0x70, 0x60, 0x60, 0x60, /* 0xc28: */ 0x70, 0x60, 0x60, 0x60, 0x60, 0x40, 0x40, 0x40, /* 0xc30: */ 0x60, 0x60, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, /* 0xc38: */ 0x40, 0x40, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, /* 0xc40: */ 0x77, 0x70, 0x60, 0x60, 0x60, 0x60, 0x40, 0x40, /* 0xc48: */ 0x60, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, /* 0xc50: */ 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc80: */ 0x6f, 0x64, 0x60, 0x40, 0x40, 0x00, 0x00, 0x00, /* 0xc88: */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd00: */ 0x5f, 0x5e, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe00: */ 0x3f, 0x3f, 0x3e, 0x00, 0x1c, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xea8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf00: */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; lmms-1.1.3/plugins/sid/wave8580__ST.cc000066400000000000000000001000521247673406200173000ustar00rootroot00000000000000// --------------------------------------------------------------------------- // This file is part of reSID, a MOS6581 SID emulator engine. // Copyright (C) 2004 Dag Lem // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // --------------------------------------------------------------------------- #include "wave.h" reg8 WaveformGenerator::wave8580__ST[] = { /* 0x000: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x008: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x010: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x018: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x020: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x080: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x088: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x090: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x098: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x100: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x108: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x120: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x128: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x130: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x138: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x140: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x148: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x150: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x158: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x160: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x168: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x170: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x178: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x180: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x188: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x190: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x198: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, /* 0x200: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x208: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x210: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x218: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x220: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x228: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x230: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x238: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x240: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x248: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x250: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x258: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x260: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x268: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x270: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x278: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x280: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x288: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x290: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x298: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x300: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x308: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x310: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x318: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x320: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x328: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x330: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x338: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x340: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x348: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x350: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x358: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x360: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x368: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x370: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x378: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x380: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x388: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x390: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x398: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x3c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3f0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, /* 0x3f8: */ 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, /* 0x400: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x408: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x410: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x418: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x420: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x428: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x430: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x438: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x440: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x448: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x450: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x458: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x460: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x468: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x470: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x478: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x480: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x488: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x490: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x498: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x500: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x508: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x510: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x518: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x520: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x528: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x530: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x538: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x540: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x548: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x550: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x558: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x560: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x568: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x570: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x578: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x580: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x588: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x590: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x598: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f, /* 0x600: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x608: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x610: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x618: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x620: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x628: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x630: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x638: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x640: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x648: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x650: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x658: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x660: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x668: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x670: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x678: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x680: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x688: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x690: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x698: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x700: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x708: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x710: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x718: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x720: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x728: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x730: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x738: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x740: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x748: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x750: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x758: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x760: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x768: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x770: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x778: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x780: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x788: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x790: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x798: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0x7c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7e0: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, /* 0x7e8: */ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, /* 0x7f0: */ 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3e, /* 0x7f8: */ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, /* 0x800: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x808: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x810: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x818: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x820: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x828: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x830: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x838: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x840: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x848: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x850: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x858: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x860: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x868: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x870: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x878: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x880: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x888: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x890: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x898: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8f8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0x900: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x908: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x910: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x918: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x920: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x928: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x930: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x938: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x940: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x948: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x950: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x958: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x960: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x968: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x970: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x978: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0x980: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x988: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x990: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x998: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9a8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9b8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9c8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9d8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9f8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, /* 0xa00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xa80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xac8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xad8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xae8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0xb00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xb80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xba8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xbc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbe8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xbf0: */ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, /* 0xbf8: */ 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0x3f, /* 0xc00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xc80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xca8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xce8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xcf8: */ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, /* 0xd00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd78: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xd80: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd88: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd90: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd98: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xda8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdb8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* 0xdc0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdc8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdd8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xde8: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf0: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xdf8: */ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x1f, 0x1f, /* 0xe00: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe08: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe10: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe18: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe20: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe28: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe30: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe38: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe40: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe48: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe50: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe58: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe60: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe68: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe70: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe78: */ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x83, 0x83, /* 0xe80: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe88: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe90: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xe98: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xea0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xea8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xeb0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xeb8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xec0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xec8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xed0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xed8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xee0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xee8: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xef0: */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xef8: */ 0x80, 0x80, 0x80, 0x80, 0x87, 0x87, 0x87, 0x8f, /* 0xf00: */ 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, /* 0xf08: */ 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf10: */ 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf18: */ 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xf20: */ 0xc0, 0xe0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, /* 0xf28: */ 0xe0, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, /* 0xf30: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf38: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf40: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf48: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf50: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf58: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf60: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf68: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf70: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, /* 0xf78: */ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe3, 0xe3, /* 0xf80: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf88: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf90: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xf98: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfa0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfa8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfb0: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xfb8: */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, /* 0xfc0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfc8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfd0: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfd8: */ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, /* 0xfe0: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, /* 0xfe8: */ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, /* 0xff0: */ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, /* 0xff8: */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; lmms-1.1.3/plugins/stereo_enhancer/000077500000000000000000000000001247673406200173245ustar00rootroot00000000000000lmms-1.1.3/plugins/stereo_enhancer/CMakeLists.txt000066400000000000000000000005141247673406200220640ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(stereoenhancer stereo_enhancer.cpp stereoenhancer_controls.cpp stereoenhancer_control_dialog.cpp stereo_enhancer.h stereoenhancer_controls.h stereoenhancer_control_dialog.h MOCFILES stereoenhancer_controls.h stereoenhancer_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/stereo_enhancer/logo.png000066400000000000000000000062311247673406200207740ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/stereo_enhancer/stereo_enhancer.cpp000066400000000000000000000072271247673406200232040ustar00rootroot00000000000000/* * stereo_enhancer.cpp - stereo-enhancer-effect-plugin * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "stereo_enhancer.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT stereoenhancer_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "StereoEnhancer Effect", QT_TRANSLATE_NOOP( "pluginBrowser", "Plugin for enhancing stereo separation of a stereo input file" ), "Lou Herard ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } stereoEnhancerEffect::stereoEnhancerEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &stereoenhancer_plugin_descriptor, _parent, _key ), m_seFX( DspEffectLibrary::StereoEnhancer( 0.0f ) ), m_delayBuffer( new sampleFrame[DEFAULT_BUFFER_SIZE] ), m_currFrame( 0 ), m_bbControls( this ) { // TODO: Make m_delayBuffer customizable? clearMyBuffer(); } stereoEnhancerEffect::~stereoEnhancerEffect() { if( m_delayBuffer ) { delete [] m_delayBuffer; } m_currFrame = 0; } bool stereoEnhancerEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { // This appears to be used for determining whether or not to continue processing // audio with this effect double out_sum = 0.0; float width; int frameIndex = 0; if( !isEnabled() || !isRunning() ) { return( false ); } const float d = dryLevel(); const float w = wetLevel(); for( fpp_t f = 0; f < _frames; ++f ) { // copy samples into the delay buffer m_delayBuffer[m_currFrame][0] = _buf[f][0]; m_delayBuffer[m_currFrame][1] = _buf[f][1]; // Get the width knob value from the Stereo Enhancer effect width = m_seFX.wideCoeff(); // Calculate the correct sample frame for processing frameIndex = m_currFrame - width; if( frameIndex < 0 ) { // e.g. difference = -10, frameIndex = DBS - 10 frameIndex += DEFAULT_BUFFER_SIZE; } //sample_t s[2] = { _buf[f][0], _buf[f][1] }; //Vanilla sample_t s[2] = { _buf[f][0], m_delayBuffer[frameIndex][1] }; //Chocolate m_seFX.nextSample( s[0], s[1] ); _buf[f][0] = d * _buf[f][0] + w * s[0]; _buf[f][1] = d * _buf[f][1] + w * s[1]; out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; // Update currFrame m_currFrame += 1; m_currFrame %= DEFAULT_BUFFER_SIZE; } checkGate( out_sum / _frames ); if( !isRunning() ) { clearMyBuffer(); } return( isRunning() ); } void stereoEnhancerEffect::clearMyBuffer() { int i; for (i = 0; i < DEFAULT_BUFFER_SIZE; i++) { m_delayBuffer[i][0] = 0.0f; m_delayBuffer[i][1] = 0.0f; } m_currFrame = 0; } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return( new stereoEnhancerEffect( _parent, static_cast( _data ) ) ); } } lmms-1.1.3/plugins/stereo_enhancer/stereo_enhancer.h000066400000000000000000000032531247673406200226440ustar00rootroot00000000000000/* * stereo_enhancer.h - stereo-enhancer-effect-plugin * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STEREO_ENHANCER_H #define _STEREO_ENHANCER_H #include "Effect.h" #include "DspEffectLibrary.h" #include "engine.h" #include "stereoenhancer_controls.h" class stereoEnhancerEffect : public Effect { public: stereoEnhancerEffect( Model * parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~stereoEnhancerEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return( &m_bbControls ); } void clearMyBuffer(); private: DspEffectLibrary::StereoEnhancer m_seFX; sampleFrame * m_delayBuffer; int m_currFrame; stereoEnhancerControls m_bbControls; friend class stereoEnhancerControls; } ; #endif lmms-1.1.3/plugins/stereo_enhancer/stereoenhancer_control_dialog.cpp000066400000000000000000000030211247673406200261100ustar00rootroot00000000000000/* * stereoenhancer_control_dialog.cpp - control-dialog for stereoenhancer-effect * * Copyright (c) 2006-2007 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "stereoenhancer_control_dialog.h" #include "stereoenhancer_controls.h" stereoEnhancerControlDialog::stereoEnhancerControlDialog( stereoEnhancerControls * _controls ) : EffectControlDialog( _controls ) { QHBoxLayout * l = new QHBoxLayout( this ); knob * widthKnob = new knob( knobBright_26, this ); widthKnob->setModel( &_controls->m_widthModel ); widthKnob->setLabel( tr( "WIDE" ) ); widthKnob->setHintText( tr( "Width:" ) + " ", "samples" ); l->addWidget( widthKnob ); this->setLayout(l); } #include "moc_stereoenhancer_control_dialog.cxx" lmms-1.1.3/plugins/stereo_enhancer/stereoenhancer_control_dialog.h000066400000000000000000000024401247673406200255610ustar00rootroot00000000000000/* * stereoenhancer_control_dialog.h - control-dialog for stereo-enhancer-effect * * Copyright (c) 2006 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STEREOENHANCER_CONTROL_DIALOG_H #define _STEREOENHANCER_CONTROL_DIALOG_H #include "EffectControlDialog.h" class stereoEnhancerControls; class stereoEnhancerControlDialog : public EffectControlDialog { Q_OBJECT public: stereoEnhancerControlDialog( stereoEnhancerControls * _controls ); virtual ~stereoEnhancerControlDialog() { } }; #endif lmms-1.1.3/plugins/stereo_enhancer/stereoenhancer_controls.cpp000066400000000000000000000033751247673406200247700ustar00rootroot00000000000000/* * stereoenhancer_controls.cpp - control-dialog for stereoenhancer-effect * * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "stereoenhancer_controls.h" #include "stereo_enhancer.h" stereoEnhancerControls::stereoEnhancerControls( stereoEnhancerEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_widthModel(0.0f, 0.0f, 180.0f, 1.0f, this, tr( "Width" ) ) { connect( &m_widthModel, SIGNAL( dataChanged() ), this, SLOT( changeWideCoeff() ) ); changeWideCoeff(); } void stereoEnhancerControls::changeWideCoeff() { m_effect->m_seFX.setWideCoeff( m_widthModel.value() ); } void stereoEnhancerControls::loadSettings( const QDomElement & _this ) { m_widthModel.loadSettings( _this, "width" ); } void stereoEnhancerControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_widthModel.saveSettings( _doc, _this, "width" ); } #include "moc_stereoenhancer_controls.cxx" lmms-1.1.3/plugins/stereo_enhancer/stereoenhancer_controls.h000066400000000000000000000035271247673406200244340ustar00rootroot00000000000000/* * stereoenhancer_controls.h - controls for stereoEnhancer-effect * * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STEREO_ENHANCER_CONTROLS_H #define _STEREO_ENHANCER_CONTROLS_H #include "EffectControls.h" #include "stereoenhancer_control_dialog.h" #include "knob.h" class stereoEnhancerEffect; class stereoEnhancerControls : public EffectControls { Q_OBJECT public: stereoEnhancerControls( stereoEnhancerEffect( * _eff ) ); virtual ~stereoEnhancerControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return( "stereoenhancercontrols" ); } virtual int controlCount() { return( 1 ); } virtual EffectControlDialog * createView() { return new stereoEnhancerControlDialog( this ); } private slots: void changeWideCoeff(); private: stereoEnhancerEffect * m_effect; FloatModel m_widthModel; friend class stereoEnhancerControlDialog; } ; #endif /*_STEREO_ENHANCER_CONTROLS_H*/ lmms-1.1.3/plugins/stereo_matrix/000077500000000000000000000000001247673406200170455ustar00rootroot00000000000000lmms-1.1.3/plugins/stereo_matrix/CMakeLists.txt000066400000000000000000000004721247673406200216100ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(stereomatrix stereo_matrix.cpp stereomatrix_controls.cpp stereomatrix_control_dialog.cpp stereo_matrix.h stereomatrix_controls.h stereomatrix_control_dialog.h MOCFILES stereomatrix_controls.h stereomatrix_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/stereo_matrix/artwork.png000066400000000000000000000212541247673406200212500ustar00rootroot00000000000000PNG  IHDRis pHYs  tIME: /" IDATxڕ}ǑgDfVARLjx2MbЂe`eZv ~fbf>Ӽ2I e>d@hLY!;2c;::2iDYq" R/?QO)S0M?/J5 Wd^9=˷9''꽧KF^'9'C$1$98f9_~ń֯ dio/{%_CNh}t15%m[J~̈z҆|9/s*rq#K)i4_?Y >ι}su]߻w/K]E6a$. sK":w2N{=^|ŋv FDo'.]\[Dtĉ#GoFё#GFџ'x7f?v+++=Z[[*W\"M.\(ǰ9Rz 6Q~߼+/r'~sÇx|֭>yyOǏgvNoܔ)?~_ !>Ν;E>3=z素䯜sǎ?vZ1'sx_W{K.]oUUuo|kkkM0iB@UU֖()fi&9rĉhF'OK/ Cɓ'>e 9yNS'NX]]uέ|b"˫oLS^*ڈ.-b"e/_yQI)߿iVdwν˗^3A˗/#G&77)DWѳ>{gb{xJ/;}dE|xw@| m?J)]z_2޽%0ٳgyr);wB![o%6WyUU4:z(χ1_ՈLJ !~m"70yn+spG!+Wi(L;lR]mjo7ӨZ!d2Y__u0e~;pС}kr' ƟOSt:9dvvv⍍ Nvww_~֭g"]jD<f^;c8cl?|2L͢'r*$ ֌ /|_O&idrV-e|6P{RUma R/,Ey]x ;X8Ԓ H6F3Ϥi=Ϥi͗pϜ9ó9y|H# \]]nmmp8d]cEŋ|5aZ|DlV3s o˃$ !={9'TUBxWb677ygΜa[͛fss5+&۷Ŝd2O7R۶7܂7MæbJi415?3`0۶u u]zO>aERo޼9 d]Τܼvx 6w`}1kΫL1F t 튲(!KI_~Yx[2I9>5T6&]>^Y'Qfew :e\Tt S݉ߙ}KH QbR@"MK;co"8hjV1?EwE[Th+C.v1Y|#LGDw&" 8 !#N ʓ$m;Ӱgٷ[q` ϓel=|*"!CB$ i4i:4k" !r3GKۯ1(.T. u@f0}OY/Rn6j pa1muT dj1%> ۸ t_ȻkyG cL+xU9-`Ff#_ϏG;}4iː^,GG*J"@'euݎ)̤Gs8ʚurޙJ\F1z6G~+dyR&gLBџK=IG4#B6 \oCg~C]VeWUG 4i F '~Ph7 DqymW([|E3-X5^ʭ c"=\}>tH wSKj0H;RVgvt4ׅ[FtZmq1suA1 yFzDo7H.sʷxC\nҕ ?kԶ3T+]}#P pYXWXv5SGR4Rኑpl,$cM(a&?Ő*g(w)qR\ ~!a< _t?&40暽+_M&3}zb E؈%( .|ea@Dڜ BJ .w%B XƂ3rn.b>]N˔C^`[yzw04cڵEsGWHxB1|WJ^W,(fSjM+Mc\DC@ ґ~q,SO$B:*9 J)n ?SG&XWE{QTWږKI-|@讔S{凴 /zbֱYFGHD0bHٳq ۶: 4'[$F:l}ݸ SgkWWypRY @@< D-H1βg΃C !8 .xC88ٷ#D!JTP~!NKԇ, h-&uK-}~]mV3&D瑢ӎ Q !:WDL;ژ&Qw%H>T!UAJ!86(E>Mb[&Jo`Gۃ1 ADx1ցn{DUs])X/"t͌3R61Am4  fA爂x|\/|ƍ׮]s?xXs|%4ut%g{2OD*$JmɻApMsJnLKFD7/U 1I,L9~ɓ';n=[Bh ( ä?GYX.so1AX )Z |MgQl1Q(总8_`(Ř(GyT0qE:9 7QU9y{䞂}Vâk-J!0q} 5w7 ( Ğ:fZ1E"bĄ}L*[O?)ƕDIbJ1&*ŅבRrUeu<馥^}])f(-hIC kYԸJ!@7Y۝CAw˥%HVXNb3\sC{)Iv$*K5-xdłܸKvs| .إb?͠aq]i䓪T##x{5 Sɤt|asC;:(=0&%1RjAD;S{Cp{9A!͎A$Yvޞ=\AJ$)FAR$@!R"#!BAIgX LϬMGj4;ЫnFkj9,= KW ]Eܗ':WRbUюZxK<ªOmFe]2M"m)cTd=?yyG1L&cZͥXU|.L Nb= dSX~>Rt>r@L[c̓d9~R /m[c4" G^el$>GA-G?IDAT .KG\bIOJꖯ.0نK>nb%e F,"=M:yqMR|n-"DKOH4C˟}Śb9w{*hP0$^77-Y98Yt#c%O3XpI ye"ƏE'g Ӱ@h"AŶ%(=r]NLkFfHa;OeDqx:\{R|Sfv1Zǯ3W$+/&R61DPwރbTYW= 薘 rd[W"b(3P]!k2v+cf үc/晊Pbk0A?DӌQյm`V/T{#rlkM~6>.٠Q.ޅ/\R֮9"q-<IV)VrlTt:Tt5ZbҹMb(o`pKl~k])ՄlɠMŔx& IENDB`lmms-1.1.3/plugins/stereo_matrix/logo.png000066400000000000000000000062311247673406200205150ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/stereo_matrix/stereo_matrix.cpp000066400000000000000000000052521247673406200224420ustar00rootroot00000000000000/* * stereo_matrix.cpp - stereo-matrix-effect-plugin * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "stereo_matrix.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT stereomatrix_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Stereophonic Matrix", QT_TRANSLATE_NOOP( "pluginBrowser", "Plugin for freely manipulating stereo output" ), "Paul Giblock ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } stereoMatrixEffect::stereoMatrixEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &stereomatrix_plugin_descriptor, _parent, _key ), m_smControls( this ) { } stereoMatrixEffect::~stereoMatrixEffect() { } bool stereoMatrixEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { // This appears to be used for determining whether or not to continue processing // audio with this effect if( !isEnabled() || !isRunning() ) { return( false ); } double out_sum = 0.0; for( fpp_t f = 0; f < _frames; ++f ) { const float d = dryLevel(); const float w = wetLevel(); sample_t l = _buf[f][0]; sample_t r = _buf[f][1]; // Init with dry-mix _buf[f][0] = l * d; _buf[f][1] = r * d; // Add it wet _buf[f][0] += ( m_smControls.m_llModel.value( f ) * l + m_smControls.m_rlModel.value( f ) * r ) * w; _buf[f][1] += ( m_smControls.m_lrModel.value( f ) * l + m_smControls.m_rrModel.value( f ) * r ) * w; out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; } checkGate( out_sum / _frames ); return( isRunning() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return( new stereoMatrixEffect( _parent, static_cast( _data ) ) ); } } lmms-1.1.3/plugins/stereo_matrix/stereo_matrix.h000066400000000000000000000027411247673406200221070ustar00rootroot00000000000000/* * stereo_matrix.h - stereo-matrix-effect-plugin * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STEREO_MATRIX_H #define _STEREO_MATRIX_H #include "Effect.h" #include "stereomatrix_controls.h" class stereoMatrixEffect : public Effect { public: stereoMatrixEffect( Model * parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~stereoMatrixEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return( &m_smControls ); } private: stereoMatrixControls m_smControls; friend class stereoMatrixControls; } ; #endif lmms-1.1.3/plugins/stereo_matrix/stereomatrix_control_dialog.cpp000066400000000000000000000042021247673406200253540ustar00rootroot00000000000000/* * stereomatrix_control_dialog.cpp - control dialog for stereoMatrix-effect * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "stereomatrix_control_dialog.h" #include "stereomatrix_controls.h" #include "embed.h" stereoMatrixControlDialog::stereoMatrixControlDialog( stereoMatrixControls * _controls ) : EffectControlDialog( _controls ) { setFixedSize( 105, 115); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); knob * llKnob = new knob( knobSmall_17, this ); llKnob->setModel( &_controls->m_llModel ); llKnob->setHintText( tr( "Left to Left Vol:" ) + " ", "" ); llKnob->move( 40, 60 ); knob * lrKnob = new knob( knobSmall_17, this ); lrKnob->setModel( &_controls->m_lrModel ); lrKnob->setHintText( tr( "Left to Right Vol:" ) + " ", "" ); lrKnob->move( 40+28, 60); knob * rlKnob = new knob( knobSmall_17, this ); rlKnob->setModel( &_controls->m_rlModel ); rlKnob->setHintText( tr( "Right to Left Vol:" ) + " ", "" ); rlKnob->move( 40, 60+28 ); knob * rrKnob = new knob( knobSmall_17, this ); rrKnob->setModel( &_controls->m_rrModel ); rrKnob->setHintText( tr( "Right to Right Vol:" ) + " ", "" ); rrKnob->move( 40+28, 60+28 ); } #include "moc_stereomatrix_control_dialog.cxx" lmms-1.1.3/plugins/stereo_matrix/stereomatrix_control_dialog.h000066400000000000000000000024021247673406200250210ustar00rootroot00000000000000/* * stereomatrix_control_dialog.h - control dialog for stereoMatrix-effect * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STEREOMATRIX_CONTROL_DIALOG_H #define _STEREOMATRIX_CONTROL_DIALOG_H #include "EffectControlDialog.h" class stereoMatrixControls; class stereoMatrixControlDialog : public EffectControlDialog { Q_OBJECT public: stereoMatrixControlDialog( stereoMatrixControls * _controls ); virtual ~stereoMatrixControlDialog() { } }; #endif lmms-1.1.3/plugins/stereo_matrix/stereomatrix_controls.cpp000066400000000000000000000045311247673406200242250ustar00rootroot00000000000000/* * stereomatrix_controls.cpp - controls for stereoMatrix-effect * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "stereomatrix_controls.h" #include "stereo_matrix.h" stereoMatrixControls::stereoMatrixControls( stereoMatrixEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_llModel( 1.0f, -1.0f, 1.0f, 0.01f, this, tr( "Left to Left" ) ), m_lrModel( 0.0f, -1.0f, 1.0f, 0.01f, this, tr( "Left to Right" ) ), m_rlModel( 0.0f, -1.0f, 1.0f, 0.01f, this, tr( "Right to Left" ) ), m_rrModel( 1.0f, -1.0f, 1.0f, 0.01f, this, tr( "Right to Right" ) ) { connect( &m_llModel, SIGNAL( dataChanged() ), this, SLOT( changeMatrix() ) ); connect( &m_lrModel, SIGNAL( dataChanged() ), this, SLOT( changeMatrix() ) ); connect( &m_rlModel, SIGNAL( dataChanged() ), this, SLOT( changeMatrix() ) ); connect( &m_rrModel, SIGNAL( dataChanged() ), this, SLOT( changeMatrix() ) ); changeMatrix(); } void stereoMatrixControls::changeMatrix() { } void stereoMatrixControls::loadSettings( const QDomElement & _this ) { m_llModel.loadSettings( _this, "l-l" ); m_lrModel.loadSettings( _this, "l-r" ); m_rlModel.loadSettings( _this, "r-l" ); m_rrModel.loadSettings( _this, "r-r" ); } void stereoMatrixControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_llModel.saveSettings( _doc, _this, "l-l" ); m_lrModel.saveSettings( _doc, _this, "l-r" ); m_rlModel.saveSettings( _doc, _this, "r-l" ); m_rrModel.saveSettings( _doc, _this, "r-r" ); } #include "moc_stereomatrix_controls.cxx" lmms-1.1.3/plugins/stereo_matrix/stereomatrix_controls.h000066400000000000000000000035631247673406200236760ustar00rootroot00000000000000/* * stereomatrix_controls.h - controls for stereoMatrix-effect * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STEREO_MATRIX_CONTROLS_H #define _STEREO_MATRIX_CONTROLS_H #include "EffectControls.h" #include "stereomatrix_control_dialog.h" #include "knob.h" class stereoMatrixEffect; class stereoMatrixControls : public EffectControls { Q_OBJECT public: stereoMatrixControls( stereoMatrixEffect( * _eff ) ); virtual ~stereoMatrixControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return( "stereomatrixcontrols" ); } virtual int controlCount() { return( 1 ); } virtual EffectControlDialog * createView() { return new stereoMatrixControlDialog( this ); } private slots: void changeMatrix(); private: stereoMatrixEffect * m_effect; FloatModel m_llModel; FloatModel m_lrModel; FloatModel m_rlModel; FloatModel m_rrModel; friend class stereoMatrixControlDialog; friend class stereoMatrixEffect; } ; #endif lmms-1.1.3/plugins/stk/000077500000000000000000000000001247673406200147615ustar00rootroot00000000000000lmms-1.1.3/plugins/stk/CMakeLists.txt000066400000000000000000000001021247673406200175120ustar00rootroot00000000000000IF(LMMS_HAVE_STK) ADD_SUBDIRECTORY(mallets) ENDIF(LMMS_HAVE_STK) lmms-1.1.3/plugins/stk/mallets/000077500000000000000000000000001247673406200164225ustar00rootroot00000000000000lmms-1.1.3/plugins/stk/mallets/CMakeLists.txt000066400000000000000000000004161247673406200211630ustar00rootroot00000000000000INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES("${STK_INCLUDE_DIR}") LINK_LIBRARIES(${STK_LIBRARY}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") BUILD_PLUGIN(malletsstk mallets.cpp mallets.h MOCFILES mallets.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/stk/mallets/artwork.png000066400000000000000000001736761247673406200206450ustar00rootroot00000000000000PNG  IHDRZ= pHYs B(xtIMEpLj* IDATxڴɮ-Y[nN;£ˈ̊RQ@JTPIQI<O7`JbdDgF_w=g֬c1kf{:f{kx} j1?A"""JA"@!D,B]{ûBE,VZ ?W* |so?{N-~_#cS\Xk0p0ZYCh"ZSjM>ω%-6XC',e)KDx.8KN)?]x_@E5eT3(")WUwnO_ry*|u,{3NxU|*O_|ifٜ}8|bW;^OϟSm7|u)"g}T=gqu91Y1("ĴN OQ"y(+xU^򷛚˫sޖ r9P%{e y|ͮ'OϿc ?xbuح _pe}d-e)BB,d}o{*MIU{fł ܏>|5oWV[.FYE>>Y)ŷ #^= ˵6%׵p2<Eg(Ȍ 6G{z_b*7/< B*kxtj?lyKv-S9d{'Kϣ0/n2P QDu*=;f?7Ş0l@4bWr% +YFf*e&)j6ZdZ5kuY .O "g'Kfr<>5lO g*0vn1fT%k& 5sɈ_˩?W%D~pd]v.2'y;{ / "˙ IXȭA) Bg*rղ+&rSTX}F[n~g?{~fη.r1ۑ9EYh±]śB7go-{,pf.x'U"y)J[W5XU US\D-/y|:'[^eM$מkyb "Ph0JqBp"Q[+$b(h@|2/jTPt:8-m94`B iЂv@$e1R* k ٜ{bjwWguyru娔IƷuYn<Qa)˚˷|_`-JcQ(Vj9UYWˌ́$WHI~Q(AAf(>)41Q!yUh_y nDP:}BD7_ *CAPԀt-A!JƅQh ({x!"DF+gg9?:꨸4JT( T*(j,&v1ZN~k0*ݗZj$*]ɛoE_hT#̌DH5j"@JPJO@SCvR5s)IvmmGAKؼ)q1A҂Go#1 JƕBF*-4ۯȴ‡DF%aР CBiCDb$P+Kf Z)4dS )H:"MBc 14A"6l32DȌ"Jl$,* ,fcI>`PXMZ[IPHfU1i~K"L tBZ_!"i LBbFup}cQihO5@"wDi0Ljc$Ba8B QЍī4VI)ovZeID]FFAh 6p{eKKljcSjp4kI~1 UlWli;)=J'~BL[Z+ Ӊbu7֕t}!$!YD"mҖF]`5m>œD"ӉeJbH& EԠQv&Ø<.FD'5Fuv?ex+Un\7 QRD2bx1&h$V]bD$U: ` {!i nԭ*@~$6*i^ :LN6"궢t%&s*;mqQŤbDDF-l0XTfA37Yn KkjՊ,!kD_R4Fz]bXؘ*Qd.`$QQn͖b +!cARxFnV (Jlcb $[CMh(3CQDŽQJL&# Yo9tlCHDȍ #*/ "!p*8>68ABX>c} '&!(1AjE /,Z7cp{M48hO/-)MkxH쫚ۂuYcf=yYU5UԎ Ϧٹ!5:P9Vc+8 {EźXDγ.J֬gVrsu\H ," Ԋ2A<>xh7 *6ޣN(oLu.Ԭm퉢c瓫uSU!b`SVSDsQ'GxyS)Mq.=TyvfZl%g YWU~CeFhwLv=g]{]@5 QmY6*O$*u%CPyϮR\BR80DC@2PF48繩=J`.v>c qG$L"I+E\eb+Ԃ3MMkK0sӓKقbIX.0;!p6 Wx{T嚲()W-W[#B.یۚynqUuے SV/g(<^"Ҽ*.F6|:h\d]y]:!7q63Xׁ},)垗g7Z㣐kMTP̨ G5jYd\+6u`nUckM"g[YCU#_l6.> OW F#"dy\jo_\m(|;~sͺif84E M&7G(B`n 7"')EU|1(ӕe[{\|Hʵz,="bJ07y k(/7*kK@% [X4`hZIfعGIRQ!*6BYh/\9Nu2r7%oϿد CBHn4J bP;/Q;q~& CyM|c ۱ǻ5L=N:9~w~;u?w{71eyj-}c&?ʂ͊fM_%g3QAk(4`RFB D17sN> ?s8OW[snC=Q Մ nLqAb cߟb1{}>Թm{ !֣u<ĨC]>tuh^Z#8ɤ}{x9㡵{?f(!˙]^bNO?z'?co"-/ ГƄopT|~Wտg?GEeo^[7ox)o^U%JIñl7bqc~}}M}OY s!Aw6"!&8VpB:wyǾ_1{쾆hp;u~oݐuHZfZOnūެ]__yK]U (v"42?vWN|6ESL^v~7j):D]bnfg)!3pyfܚCCct{^}^KҐh]o_?bǏ?˧tNS&n|6;ҤXb4 gpۼ_3ݖ7!qHwo_C ,K^x?_}\aL2|v'F9ru~=7O?/߱Y_jҰP !ǣ:Vyc>17&ɏfjPc~H"C4eY6tbB.wq:*))BxGL$Ǵ18{]0l\ιchz}EWxjπk [R`,(kIUr覆YH1\^5g^J>!DkҢuQܱ$cCS`WWsφ~;9t1ZBX`&=Fh%>cϡ5-CaŮpZum-w{GR}\GhėZROBSQixe)!Bևudi&kޜS{?!F" {}i_=cQC1aC`ڐ@;f]{=CUU8VmԽ8F RP& :duA!Ѕ%=t9]w 542mW_P{$,mdf!6_dEDA>&A7{v u,p:@)C!5!xpk~v>Dۿk]SaDj j&Mѻn:\ -RXchS)s xksC!Ėc_3ӹta9+NsmzYu6i}+RO$`H#nTo A+c,=1 7S1v 59(ι<- @D-)6жQ08??S>+ |c+} 9C>VNs3Ãܐg2ss0ʿ[pn>qL7el(;[R8*Ĕ;0"G yv,M;DкUnVtJ9kO<6XœB4}l lnx<> ZYr+diZ2ddgdYN@ p O1ceQW``W?mJl?XA?pȌ[&cg>cǀhĽSuF'*iqS9_5~&&ҡ}|C@frN`ft |Hjg"Z:^`͚fŴ?Ęܭ)zL>X1Q>u&;&kMSGpH2菏 (umenlHPPwt3PC_942fTᎉN]Oh3yY 8E]24a>qvbE~Ϟ&%&Cn*qf(mк>g1q(brq*lUZǞ7},hZS5)3tl s...X*ƄCw(gbh,c n8f" 1ꊐPƢu W  z}GF'A|LkLJ *9p)pn(;0 IDATh {`ƒ u{[u)t3mZ8Efcb1~!?FBέLϾb}K{f+&G)~f SZ-]=l-ermxZc+PxOAO5I:48[j%N6in;eYb~GkB@oNe7q(+!@]3h~uey %FPᨩ%UXo>K$'W5z<۪~az Ub1fJ~bcS81;ƄVZ<6iZ(oŷ [:]ly3t?;;;*qHk֍eWMCq~1%vgG5eWQ6MAnJ0:+޼9wᛱp!W quߟIKC2c'hT~X~XEڐ]Ǹ9&'&YJoA!T_ }LJCqCC}k`J3.hf7~Mv r|j_߳)k,\$9(jYvuo3d i~r:dFOrPc U(iP!1TM6eLTǦcntBSvnԺi:, ~Фe)Գ"'6~CW",Sr>ѧ'<|xrr@|?z7/o"io|qf`XQC1!Mr 6qzcԢ8Lb.0)u J;R@V5J:io#n#,J*1*=4UnTvMC$XngM'4=rcᓇs..8|l~&`5/)6{v݌%j.Yˌ#ZBčܫ)q2KǎۭNrҰw 50!{}Ȋ3UgSZ75iveC.:L|ߟjp(3j\lrbxӬ/H=|z1Œl>Ø -! 7ea^Q%徤.+\V5ˌ&x/AJi N3w2 ~hL 2i;cw(l !O[~Kx)g9FAj=uL!A-S5MڌW0JcBfyΧy]il6{0ıax-,|3GW)ȗWd']U•6ׯy ߾fsfڲ*&͉&`dxbNf] Wq̦:Z A"ILHcv1M J9 2SeS.1ѱZf}wb:Cn}BoIuC^9X`znR׽ֱUURu[h1!$xp_fPk-9>9w<>7dcvv _rK^|W^qsff_S:EɌJ8C;tnRs 祩=\!if_GPx; Px?٥k-C|cc"ᇮcJO}ҟ7t?ncPP.}TJ^x8Ėik(L39^cj-8;BٞOkeRfsĞSTvHFEֿbjzaufzg_EjرFf_R,?^@@{A$by(U@2xpSgxow< uVTzr>\.MCj@4%(N c#S@I+\fQ ǏE~t),,&ST@\Ea]f]YV{n{nᣥKn -Z^G߭GJ[&Ȩ͒<. AҦ%]?w10!!CUr}1>"@F7Y: dAU10oB4c+a1 7I5ݣ,|zVO."'<ω j~O p. :P=ޮs}gXo+:(.qY//rw hc2p +$WE(֤yAY^ Ox Cd˥|q:iG.皫 \c>}|l?ζC%)A?m#S釢 %>޷%ԡ&Sڼju8tcct\ǻb1?Bq5S  >Z|,),ZL fN,uq~baݳYoV%)^W@3=c?ڿ,nPnnu89XJS3J\.<~u|xr4,sMn\*!ZNҊ?ЯmŃ!" 2?nG `AՇc@ܱ cJ&:--ox҈Цib. 0&M6-\2yv,>֑bkm>9džTPc.X"XCm.辘Ʈ&Aw˞Oy|gYɬ9PxѸ(A(v5͞UjU7Udx{Z?m2usi.c1~豨\ ' ̓S40#N6J'Ka| 'Y$FY5yC]>IG$:`1}0^ȧZfsvãcчkiZKѴ "X{JQGXfn5ZHev/?~zU's#!J;@}nJnVM`ۚ} ͩGlghmnϛ}w=Ώ_ %XQFs2x(+* h>xl Drt`>WՖ\cX)_xH10/y:$||!3}T*y25?оƠ (1mQ+!$%{hn [M~zz:ׄs2hp n6CTd堎~[UVUujjS/!:Gsw[UO8;fCdo}};G"2\e>1O>O kد@m߹DZCю1?o*k*!X_,2$Ǭx27>T$2$EDןMR"1Z4'lNSD͘-N3f?ׯ |EI9漺.T}_q @v=䛏i)0~jֱcy'6v{cG'ޥT**JmϟO-{qW+,wHeW6eBɷ5 J><"koYk:t]5tsc鐉:E\c >HUUh3~oƟ|? ^e3x}]էj.!R5(YF]}x|ϛU3ʼnxgqo7o BM8cc$h}_)*I=F7 Xlh}j Iǎ;nSkGOF3B9ryԈeMUC!sJmnԲ[wŶal} Y%:\*~$OfS~"y[ - ??8),/jt 5]syr* UvUzMq4 žu='}3w1ՏLQt;vŘw}phjѵVF~SqUb|zz_Rz+坟= Ezt}DZ4Co hWCu7{,S<8<:7G9O|9'-09jvf(j\EvÓG"x\i(%66=5Bqae/#`>5S"8JHJ+FA |Mu7V3N\pEJͭ+hۢҨ0b׏~`;x$}6kugw]ussǗs]yxNO(lRXQ*=ޥ!_$R8M IӨ /YdtUZabW b,oodGMi!ƾO }3;"y(~yhv\>qv].PrN|~]+}9*V$Z3!8fsݏIX}ZCSKt8_(|9 g 8yp145{9&[bf Ck ʢ ;(Gb$%HbnE 9jw3((N0ZXk޼LޚAOi9(8PCh7݊CQb!T޶VH[ɢI?Ȝ-ܿCAcB53Xgs0pE~qj8Q\,4KIs!&CQڢ%_!nhЦintj#T[ Q!f#'7f Fvmk]6FMߵ1g疢Hkz!XP.dPu](b_usj1ņZTrαdEʹz,(!Jf6w% 2٦2dd8P\kӅ|xVwlwoV QJTΚQfIJ DtfYF!6yùsHu|Ld"kTaW޳ZY_gYPAuci_AXO>6;>^/OcPtcsMbՠwo7>;kr8uӅlYg3b8[h92(;Ihmrt3,1Vv?@e`BbR!K$7GUMUUxpm>Ru];GQTUYSw#1 raĊ J4^Ҍ.]_{+.0G,®n#}QVi (b[J_L6D8!RyeUSUyS5etp-ԥU(t-":*v}7c;~rM?ߴ>̪zL@h*/rf@peǻ/sLǦAcc4ۧ&ڐ\fHYqs°"%)P:45Ws|7;7&pYz5Y*DI,fOfs]':xއ?|l{.RdWES9(=v@B'@6:wt]ݮ2_㖔R|V}ͳKm V 1͹ޕ7{a]_[b= i{wpuvi=֔9:;4G|駅O1zc|2nNʫ~O}L}_DړcBKX.>Y&;Dr=[F_|_7tI?,ywo|}7\~b?Dz|@UFA¨S_Eooo3GώZ+}SF|E£gJU!'ѷ3ꫯgoos?f6eY?{T'z׾y*Gk24mgmڊ[N IDAT:BtTc^:co} s%c%ʳjG vȵlŒK-^R!CB;]֦\_H3'^' >Ys UpcPS$1cgkh(>e~:('Wg#iG[PߛC6}d>ZԽCό?v< ɫǻR&U+ŷ=誴dgs 9_Mj1M'=nufٳ<#3 I ?::}dWgY?2_=T%xcTuL2VNai0C18Gz*M1iF1]wmjHWU5O4D7W GHT'=5G=c#"3Y)ghL~{XIF* ?2͌GGڴݵvw>MnFWzޕ[>ޟ NRSx#B)<43ZQ' cBӚR=VzĒ)RW޳(pWSL_"STw97jSzx5)( ^l`zG1LZ]v^m܏,{@4CRؠjf|epOi+x3֏|2xv}]\1bdT4:{Sծwйj:&M?~[eeJWըP>^5gR78az8N '|f>}{>~#'Ccơ"V)QCl4~ʐω߫)8!xv3d5DVs/ n]I~׿%JV>ni^⯴c/~eU(>2u`2N{+~Ҩǿo~>0 ]V 7Z-nW)ӟ~MOog_ JwK^˗.fXAuOėϿyOLO>}tGJX@W>;xXk'! >F?F#^[?&Tm$=%֔u.֤^k:BGO~;J`KEe {|mO#2@AK2'?&[YǛ)~njㅺK *A.o4 g̶;JW(m+2>B[x<> ܫ_~_PڄQ}h`5\^iaclyLkX'M $n:EïkF4d)s:[~??~-}7IٺdRuy dn; OZ0 lpa7ZTK 167Yr nRSexu|u#-92iTHXiƲ[J##fmVp7HK4'd_+- ܁9T0jX;2k{ew3(ҋr_oƐQR[\284'Aa>=W_п_gͿ7-6%aT<<,4ӇWHN+w.T^A7۴e{O )kў6jz#%kQnp"-qx@_<{Pgug_}ֿDG֜.4D37ݷLW_җGըz }$ h dLxơPKdVi~ ?o7!4/{`GN>L}v6h:Z^8q w:1R!GPG rWG@z ~czG^O 3c=4D, FǿEtcOˌu1ݟoHp!~]r?l⛳C\9J 7Nt֞ČоK)`*koL.?5ka ?8յI6_#"}xr&.Yd]]';!.z,xqkm݀T:ikI_jpUGua=h@nUYi}tzZ[{>߸ocb:5B52޸@ p/=ee[:Pz,^}ݜt[u"Mu?z{E4RI{*ѹYҚ24\!1U>Ś`N[| 9c=$$Dz)-Xf /3),I[h?x% R v 9y&L֍^'԰u {8CB&[3qҖqM&+J^sOW~ڌBsuНf{/ЌfØZ{Z*4zI_ů5C؉5k?+YZ=XV4hJcP2_ $^f<8H#edox%W)|b}ڰ$&y$pR8y͕]m!'E#$@X*\׾ 4bΒ!|}=D4M6T `Yh[h}m$Ahc^r.TFrŃ(ƬtSR}G1 I"V/H iPJP&⶞4[j 13d`s8#gM],D\Do $!"AKP!MZ< wSJz6%27jOJG$)pdaݧ|6 gFMIyIm6/ikLFH|Z:\XҢ~pyOq|T0@f-,ѵk8D SIJ/ (Wu{檇#Fx<6HN{ɬ(1z֞?kP;jC盘o?O*/xpii?ke>ol/1sSkWԀr3Zq9Hl P{z^ Q`ާmk޿}7Mr5|ZW7k_H=Gc2 <(Օ\5gaBv$0*Ҿ]T|O#{8b4 hvZŅ7P_=kCHD=iS&%h6݁EݶUw8#-Hj5g;,x3Vk.;E<jAߛde$,c N  ^#3ʋP}1K~R^bk k#3ːQ,D6P񧶥E졓2/ uɪ469;\6MSׁ(͍, e*5,$/."̫= O"ZZ:i:/t11O^P⋺C*]1`OZhPeyJv/E$P@҈!n|^*nHQ[h5lBɹyD4su Ɵv \⣘Xɹz `pNpTmQ-/ddv6q1ONXA2XIVf9VT~VOLx0\{snD̓1u!m{Og絎F?qƚóuܣ^y{cն*$J\W즶[9 ϙ}{P;49H ZэFH*5d!\7C du({gLƶۊΛ+e=jFtpW?)XRkJG$' =Ү]B%l`F*ݭ M6E!; _GTD]$`)-Sl1 TMQ#H%M:udi;)PSX(-=%!)6?^hUXgY~KBOȣD]NMVu;Y@נD#6s}"&wfu:kP,֝ŅIBY{!R<<5~UځeN?W_bj^ >KxZLF$+iF>< AK"R=*s+P <) p(ožRv?u%1!dCEG/SI,/Dυ\tC Փ,%2!-a7^43 d^ $,jM@I/>OŽ>J=._2Z{ΦWG;5@i\$sXm**0"TQrO0 THMJ3S)]Qi($/f$(ehD1RWfV3I 5+]P2S;T-[ &f ԍ'wp(~|EBwOj() G$ݶ `IV/^TJ0q.Wm(qE \w9J'8U';2چJؽr՗5Dÿ́*Di^ DdiVfi=W =3uZŅ[5g.o}Ob8 jF<'8B |=mGU|iɊi'Ɇ߉JXt]_('%>WEw @#O7`QcK.$ d(H'A ztd{r"Fl)gtrE]/ƅCYg#db.AkBVУo(Ť[һb8d;h(zњe\{ގXj{=~y;=4|:<*~fukjCud܋{ LCȥ&'  !Bq ^ DxCY#DB Y5''mE,!zzt82LoFqoWlq"[zbTmDV!7#֡;?ࢾ9uVš4##젻;*LG^i2kD2JDuIk+<RE(M*;Ǘ|V6vVcm{CF,n'JJxs&kZ"A'WaC vUkgߑm"9\d12#;Ou<Љg_k$r߳QCAjFKbCXQn\`}it)%o-KcYїŧ'Pj#H@hNdjY=#l#˳,4'0;6>5Hmc}Zy& {ӎ>1 icHf{$ g9&=+P@}qtP!CK1))[xW2ގqFUlT> b:H2Ժ&)A9Ӧ(}a_[GKV3f>uϤg6(P6@ PJB;P<<}61R!dDlGOTzkst%>sGdz i^^S;%~0⥝躢cHb̓ŧ8}֡,{Q|ՃթN Lmٔ$j9`4oNCY_ʕ$B1@`Y@Czs1;f6\%jm/!C(Ձ >*:!al^H[cLh;ɄfK/fkNPГGz4`˜A]amƂ rOV34 3c1RQ]MeEs!wPM=ϙ-p36)eva rՕH 3JtѴI? !vO7ڭD_[/+ ZS޸~.θrN5Į7<@- ~k N!f4n t(o$tҬUfJq <1<(o9t.j,r*qimMK\e4dRrrQ=׸񺂺,o*6./@" m%w/Ӻc=2;U"eb52\h+ İ{v85QOTѲ:V\.2$b X8fA0at[; %KXrW\7 3CMbEFаp0:zAi[Ѣ[r%؍oG > W'DWa,5_( N"4d.p=nF(]1LJ<~OjTDtYki[%:/5HQ׶!rA{!G`h=Tx[SE fM9F-t>++,4Q9n2coܵ Wn3ա9hhc q^ u%Q/ !zKB$Y~FȭSG(*,V.G"7}5(n)a!* =iikVt/g 3@(8ۂ 9KBǘeO^{`{\(g4hn(; H;^uqŵ 7 $NC!LJ kWhՖT_tߔ8/·_څބ;1Aɪ ^O|9eCBd{Ӭo+{g~0 ;mn{\@^lKVhD`_^p&]X+ d8<7vzEB͘7Kx]DTg5K'YAF'1mLlztbOY/ꢯes.cqSj^l#%uG-XĮphfK} gVbx++֫5+:q+p1<1ã+&ᇗ%+!U_Vm.՜9"$ ]e>Sn/5ZZ*W{ l?_٦{Wڑ-A"aR!۳Úݹq6U9p¢klr׏^ tezi!휷n7hF\k:~OpiknUմ> Ϻ[o"҉,9 &$YBf:._)W=)AU-z ZmF'$YΧ=8}l>7+%DW,_c9D4 Lš>yKZ!AH>?8og; RcҪZud*C vAsTJY$bny^0&ϙ֕z_YjY} tEda)iV()g~wQP(+iag<$Ycl6$BuE+l{*|HG.V\5+pCO5܁b,K0[{i )s!3uSiFkpET+z*Biӈӽ.#նIP* _Vy'穣RayأLY騾gIx4D(BTp]UaJaU'`.ѓ?VTQM5OYՒ[B ^D:HiR#4U#ݰ"y;9B}p=@ vkn7ѳd~EgFL.Y >f%ҞUc5C6D^ Ia๜f@-e`($H886F-S'XvT7cxAQVpoQ !L$tpH߰C@elu*?ȩhw@ZZd+P @g"Mŋ;ї~U"qq*\\f_-.)}CZJ4Y0nkvʀȹЩ8h W򦸪>;-کDiLbߧD";ˆyF%%Zx _S*^`Q(. 'JCLm8Vb痙ѭFLm&1m["m7)ܠ'PvwMmA6ZJ2`ڲ|C os\Ev> #X!ѱ61ɑ>JQEٴSqcwŦ~ZKtpqtjcGaO:)IaSI5/4Ԅ' -!;(aQԑ MLّͰRNjIenv@Q9X.+gt}1RysǼO/;"*)=p_T0[d( a,.LeEKq)0톲}B(ٱp7j vΩB Ym8Bm|$4Y6FX^5uI;і΄?(j,$0y2:ou28l -KxL{3Xu\hSR\"41fQfah,C :C}[_|٫MjgMBwTD?̓^|&]$L- gjKYec|,xU)=H*Qy<',m0y &.~%\DK}g5QͲ\TK#[Te%GsUc-c fn",[ !еMiA܁2\8gCU'35iiSE$DTa lp^{HmFs(H]o]қ)D4ֆ3 IY :pmDº _wjmiTV);qqHC$!, [Mu@%~XlFzD眰a>QmXД RgdfMq9RCr*,l6vB*!nV#k% \.t^JjhC$G:=xMCfg)gna  ok=/ @!]fX|zP1e$ȗ}:QPBxH$5xENylAXRG_g[vT!4q7c}]U©>;FdZH(e\Ae%V`6<`oMw!K9AuSG.Nky5T=)~@ ِ Sz0 +ƭ_y+7LXGuJefj` ڼ*fs $_VǙr{'gޒݨW!#;4OP2FO%}a\5LI%ykEևcH^3{g 1s&ADM"rPr-^6 g]P䓦g.&::[\ðX27X{X/ b4nl )a*,غJNda_&} P>~\Z}4ƾXͿތ8u`x"վB W%s׭S;[[DfHPad%f}EWS8Su gHDXV$v$sn N!2ًB(u6/0+sxv 9z`}6MOܑXB`L{V\ ](jtYztMFƣεN{-N;*O5k%[J)?I0'<+_KU\,\瓚!ӌL/Sbdy)"3AsյGt!r.i0ݼbH5_RЇ vnpBɅm*9܋nXa]x!}ZԾ u< Z#{ 9hHF*W fҟkMA}A8nh1"Bij $=,uP HZ5ňdZ6mJ_K^3 M(CuI] W^~dQm\~>}%:>gZ/Op~[[o<8sk.w)MVn<]DJŠN؅ݲ"f; {>[LMSDjGlO 'Yʩ34r}5P5o :tYsWq[ZWKؔ9 `zڝO|X*+]6)t L"JzcqI""7|iƜP_P}WglGY&RQ{z:U9F Ba9i%z B`xqaqZ%uU* e|-cz!$d="yy JZaE#Pe0Tc~"oMBܢ۔Hp#ήΡ}Ȟkƀ/ Ym%4l7!F@R-2QhC peׯV9ВY}^5^ 2Ņ݈$I푊Kq4+THEMaP:k` YώNx+E>x6F/i}ֺ|DUԦ:[Nhy}$[bVcXAaխ*L@tAON&MNF˰ƪ>7tE|O=qS]53+얤ȈK {W ( ^3 jɴl&qp#/uJɞ }~n  !V1 }p/3; IDATL\; ^;ZQ <" ɬGJ 7sua>.fBQtb [&Y2"WTcg)$dD e1 :|5gt|Mѭ芜jA&İs b_ *,ϰ>5ڏ={}u N~ zXq8[ bmtkuBL_&+]3PsKB%_aI? vg9G|Jټ![%VByh#A`dPKu?2'\c-g`Q[o#6z̕vC[ *anMxHt7^3ӋC{k۩!h9cl K9G5Xpw"8nj$]hTG&zú0CBh2Ih !v/u36OȻoCni{=G[h6z34PxŃm$ E%ZR@@lr>,I٤ݵ! <>IyDC4KG֍#>\,7`^0.̵vpMLIlҁᲯG)ESˮ>Y^jk[T&Q2J5 L 5;a+Hl4U'luUӺ'Św]U naՠc(ڲj\z@qJn%4Ql+kVսʝ "{"Ѽ*1_NmHzHi` iR.r5 )E\=JJ\Qo;-5޳jp5"t[\<{W{#޼ D?9tmGifW*= :*,,; K7}p5L y;!cJbҶYsHO]=wlS'4r~wYdfAyQ))u~Â>q&}pF V52^'[h21Hq|ة1L`lW. td ̔ P*,t!;-Btg֜6k8E>wtn?&zgd}7d xN` x2H <p"T5 OV@ #VIT?oLwZáCu cPA*GbhNncD}]FPE4=S"RSH!ygIK++0hȤп!{r%,pcn"b*tѫD?Զ,ֆ2gx)WW 3r g[BC牫'l&Ϩ&O=ѪCKB#31e֨.%m{_ׄ[)*UFsg:k (J=k+B*KE?fH#?l$ U_u+%0_~&YJQ/mRVMa(WdGٽ! ouPkBd5ɍƙgVzyzhr=,ޓ..R\9JeFc̕Bt?`fSYmkÇJ'0^- /(@/,/#(,W^,qC-u:>1F]uYJۤY wBfvF8u,d쑺x3ɪAؒ 4Bٕ!xh4tڿaDiZ=cA0D[x$F:հcMWj<Ҭ#svxTT26sqN|tDE[}l_ |.Y'eD %7GH6pxs%z't&Vz he:ϾeP̅]ubg>gM7+@qAvih@L 5a^b|= 3<|;ujGluTѳާ)`,fhuh52hFq@NhAP1͆5&ԌHv̟1_{$W'[oh1C EM HvUgzpq2رDxOE٥'Zeg1/^w-MXΔդkR<5ZIS ~ԃ7wlT&$14H'%ˀՋSYFy#ENآ.vgh(\*c"d<+]݈35J_ڊX3,Gl{ʼnxqȜPKRuo S$XŵjK4`푺fF;SP{:M%gpxJ_`zQAlІʐ4Kyn4{@]{IH/Ww+FBҡ 5xMt_(Qb"zM['Jkn~ ~b /R@` 5 ̋ ~4^zI+Q7"pXw4xЇ(-4u+5AS @ێۋ{ ϔBcfe>$ʊB?$`(kj7:TکH"9Bg۴#򔕻 kؑtkiC+P Dy/8x6PpfںNn9T(_Q>:yQ6P6Ɯ|72gFPkvᅙ0AYط@>_ڨFD)90'lkB{x@Zsȱ # A➘ު~cceOoSnTc060JiITx|̤ATЊ󌶁0>Hw=f %-kLp-~~ہ_vT_io_WZdC3c2$u`CG \ ɖ FkR6C^$Wp#AY&`/m/d v83zM`DGBJ(O4!}#Ǿ2h:_qSuFOT7Շ«/΀m6YDp%M#/Nc#pCr9%H Kk!'|&l~>8q%!h/k x%̹J{hDcGн%WIgC$)Nb<(末eLAzw?q ؋$y6% sG@ $Oڐ-敄́jיp`7nmV0p; Zѕu[Lj.]v/sWP\ǕQ"ICm/D J g\#.=F(86_%.2c9:TZFW տh1ٺ"l0wP3M/c7PDyͶ0-ݾPQ&C>6@;kI7 $Q*~ IR,ˋA >n- U30+-8Kgv4V)B+'Dtqz.8݃1XyѼ iea*hctT",VN:{+c׼kKG: 2oM3z8VEP (,*l\ 1J{-j'58 :gF1l&.I0i$UQ;X#-l0Ƚ8{C,x+W`bz<@>j%yQ條g~Q#0v,lGl!ցŃ5@.Ho ed)nK+'Ϫޑ:S(~PW_I0yPx$1B"Tabv&R'wd!ㄥ!3ZVꩁV ґ&V|~Ɯ{Ld8h~n6moɭŠr*( (S1Q'gK?) 7Y;W監X(R,RjO(9ٜ-~QՔ;h8M p腀/SӝK' 0H+z+^wb7A:s;!d$ZL O#U,=Qr5#ru9'9B[BϽ}q {X٥p l!X>Lpg"_r`[% α$] /EfFb둻eR5 ݷ*CJM ADuX%4[e -߃B[v: w!i2"#X{PȜvK)pM"۷#sP4plƿ8Ԕ e3f 0]1Mv.lՑJݺT4V ŧv+0Vm~CW9"aBRҙgci_KÓWfsUk7 Qɯ_EeDW`MQq*!LTӮUBdEVr 2:{Ῠ{SaqK&)T 7ANuE4޻,.6e{{hd7ڢ{Q.85vɜs +9̲؅esSߵ0hKL*l?cI ]}]c덆 ZqucuGI7 Nе -CՕfW&оe}X MXߎ.%[{%ϲR-ABa0PJ~@?w:j랆n'""v,?=QLœ+wFNP}y"#֔RNAއp٫ X;h@N"C̨J}[r!w92{${ʎƃ9c[hGu83uwYܬm <+~0b7us<_DZ-:;{X(oVzuDP@ MS䊆'I\AD`ObRbyoCJ7abTgZ=kh@)pzfْw¦i}CZzY @? 8>l)t=6֡7dRGUmiI^ ?: _t/%](Mb8)hyNRi v堯>:hF9mRqHbWuluaS1Ovaifntst"Ou]gf[ǁ =^(^Wi 7}%26fj.lL=ZL{ٟ{l8iԭ&YIS w$8+點W%J2h~o%zƦ{e쌱nQllA0;mRE{&՘␗uƲU[n@[U wwA\\S?/rw# (p'DrĄ*/)̐VMWhH'e-/Ф=5wx,*Z 9YIA8P! )CNN&A"PV9=6Zu/&F!Ұ*2fD0:%|b.ammׄM]}iަ= 19eԈeH5F'NcyH 1[{}GKZgEV}lp G?* J>U~}sHYQaC?͏ĐBЕ[`c<^^րx:j([iUY "؊ݍZ\OLx8Ҏ*A`T#cڇX> 䁡\EZD `(liyTn 6V!D=O IDATF­-RHqK*!1tWZV&5 X'. lo#Ej}UN]gu: LC/6gpvfՑ6b\#CXd'qaH ōagi@M7^orP ͭ% 920AWU5wP|9F{BOGoXn3Tk1hIjc |E\2hUZ>=Q~扎*,bTx0=B8 7/Y>Q^2 ]aqLFS[kn%y'qF&=V/J=Fk̵5?$2!d-|^Hhin,kut uuo;R& (wܬ5skҼAͯ;܎il)61kdɲyslj*x+OO߈./>?o xv"TX\ϕ JV}dZo T;G&ÚY Ӯi*!x, j8QMlvm^ 52X#eEFyQ٘2˹!IKb]kݣ{)3:풕Al"'zkP]4B}5a'-63 S5v,'zp͙d_=u@ A?ï7J~EJ}WzFm moֻ]}oš{)X.*'\:fǟ:|,?⽒mz27_7D_O97 ,9Η} > !D$H H e3,B`%G8m*,A dP !!b3>=3kuuU^ޛGfޛy} ?ኙzUK淞@4Ղ* ś ԇ^ߗ*7@VG+cP2'uMʇSRYr>LǾ.Tt= ո`Ʌ[bfa`*)v_o=Gp;BYnSf/hb2(4hw=3$UDttmn/j\􍋽ib[- ͸aCw&qu??>3骛URau:Qcn, 7kڸ7E*d6\ /=SV vo͕zFz)PX)HS8JĖ> "|ȖDwƛ>xл>X0g!al4Mo )jmxY7E$R O4x6gRؗ/j3ܲЅ $&l`yӬbLMZ['q*5)bTo\c?7̳9p0M@գo_w]|"f-+S֘bƕrz͵4ol6\͜q)fQ!1L`َk6Jf@%"JGF佅Y;?|co<2M0W1xtph8jxI[W#&%Y3U$v>p [yBRYCl%j5N"'0SسAwrȨYZu ͌CT)]#%!8D ۽JŞbC\7ߋOާE'+⦭n2kY0s g,"gǥت ڳ $F4ѸApEq'(3kuCK/V,47vV]%ZJ6,+WMxrw>|oz`#p@`𴀙0;h4D>a"V" "dLLq#roYoT~xIJfrQ=pTejKَA8OdM⧤UIVyG2̃4"4RedC4SuVOok)*g[kmKg!ކgTMBkf &0ga0^r k}1! L\14ngX921)mGL 9J.ݷV{_QddaBh%7LM[eK{.g-s J[|4\uvyv vфzo$5jGŜ054GTA ,pot\SZ ㉕_+7eCx D\sls{DIшQUރkB]/C+5HilF%69) ʼn|0h礵q$̪tbmnz*b„v Nlm`,t>:n}0Ul*o$U+ʇ(':aHDpcQ` $9EBIĜL4AXH).# LS)Uhx-%1, $ܴ}Dd{AKx4W~#:sGo?ٳ[堌F^~1;U8[ &޸ԳQbr&7S&q9fh&P~~LUa Ue )EY e饲]Ñƕ4.a:s䎣EЧ$ YDQ1%>s:ۅmW.CqǩSh1x ҋRIF\}Aj{q}l .Q'ObG6 F$D\o*,J#Y`u:h?6Gg\JM9zm>|M{є&0/v𔿲㉬E(Oȥ*OS1eWJ+PhFK:ZQiYap}G $4T v|YGހaLQ:."?J= :ݹUd-qYIXhD+ aom#׌~>Ŗ-:wQeL1?/?g{Г;gؼ1Kvҹ|~)tq qMR)⪦*Z3#F&S_nÿ@CH+NJY0͜~qe-& ȱE4) vϻqipF>/!`P5  WNԢ5߱3*&G=uV;RFUR` ?5A՝)s0W|.$0\5ݗ_?\qX$Uȸ"QE+nr]AmJlE2Dab{tYE)‡s#V!6 c#+6Q)(Y@{vԺaCp0j̻/HǢe{ 0(mH{f~F'E*b6m+k c>7o՚AW̟6set?cnV["fȂM3xڍ")Ldx _ũCk\>n{Ψbv^Q(3p}gAg_w 1”j8+ɒ|3P{ϒ+ IѢ 0CVcK;!lρ 0lr4*yo1Cp2Q]"Dr1fddjˡ@O-Ipq6'0 /v4o(ڴP]fi(e?Tgq0m*i]'(h%qZ7;uWw)L~Ms;>~y|ӏ"ۻֹ%ypdHuv9Ɠ/W%XV}dxn7X}W.Vז<wkKI-iaUopl.E,M\}_ . D0(D$!,6R-9Y5L46`s*i&Nuc"ϫlUE|^F1&facHo!FK0=9 \gey4mxwUYͱmmV_OpW6q1L/W ˙scc7PW3 j" s\̖S#@BDaR ր1Q.&gZ\2 3э(+A>2 =1ҰrS Xp9!w!L:45\yϠ31q=QU5.D]묲 MwF2* !n12t^mvxvІ#!Ǣoy:(I媃n*ǵ6SE0,Qէ%§J%{9ݗ_6:ze[+P͕ƍ1:;DTߕܸP½)D&gD wb}}H7FQ2F]:9gfhm`q qE!4WnwU#Ô(!UŤK>d8e;SoMq}{v[am]ur V ߾.s[NP q?N,#=,R|] 1[c\cckN[ЂJVXZHqeY(/*`9&Ƣ1}Zэyʯ6q@-5Q/wC4g"R7r eX\p&(_F/⥅ym,Fڷauex`/??wQL.G֖elf;y @n(fކpu .^5V6s?qo t5` Ũpf!,[F틁d낐OKcllwg: ~û| n2uQpcGQ.oT/+G>قabc!xuc'6a]}u( wcu $vh05ƦRq.e5+B.9izKxx&#j́]i9fWZ_st]iF|dVX. ["U*pP @swaggOU+/GGrV!gxf >ߩZ"$ (dP$Bk|nצx{\pub;ctׇܞsx6H9{5b !X8ZkW&"x>.o\ƍ)`]'Wq2&).o9>_\ï~-8zY|Y+`9'6ݧ_|#oBAN]b}hqD qa}?%LlDKqGz^7K^61h|Wڥ!>Qsjw7v)A V̈/ֽktNZ4jPOsCBǐW>fj\hrwU4Hq5AVfRRR$ "r˃GoBDL07T-ۅHн_@3]|sWp.-a6í =g=>x?i Z1heL\hb^|c|7 ~މnL!4˱˯o_C 7~]`=6SK` vn6Y!~*QBJpm5/q0.[}3%1" *sT>4 C$1&DyDalS:;6|V?uH{2W/3 +?|yNd"[Ye%k/ _<f]ݿ~,ؽZVԣ]H t=vUn&ߘϿq~7?ǩ ( r6>ø>\}y|g 6]gn`kgD1oBO!#F{\ kl7~]xә(.`<ΫrPHZKϿ9{cq׽6K-Ш3@F[ud 6|R%16$JAn4Wrw4( |!!-3.[{ h}<- 2!1y#L)J U+K-^l='^\>Jܙb!d[ rmamU-GVc k--a[_svy!8y+`.-%8҂D"%~Gů_| yxGz)RRLl g8ʲ'U^.hćݮt:o?c,w1޹l-Xc8lsap)r9O՛^a0{GvAQÏrqRq~5wSˡQ_d#Q-33Iqj"Kīc"~LxDP%d J$W)^-\{pf˜aya'xpM IDATv(G-%?}ރb3m+|?ӘaB҃x/n_GpPyHlGJC80h<%|mk-f!ۅCB X5WF=79#,ܹ|b$Rஓ=9+#|KxC'Wg>7bb 2S tW8M«nc¡ iժQd:pxAa*[kUpi 04V]ԍk˴W$nUyPjw k:6t d*#€c!$*kC"׾Kɕ@H8zʁ^|^SL:s-&9^@3%M}g}]ákrFs]ARE<v,e ]T.NTj$K=o<6Αv繗W0z'9C\^áVb:DS{Vz` =Ǐl-~W4ξ+Ǹr}~o'8sgG-K(?ҝ)Pf:7k_=t6qXnD\2 6VU ƑNCU4mrQ*ْzQ+pdro4u}j茫{S[>Pa!k+ 4Q'b%fOfi"PFMtPw/~{O ag+a<ܴt:ؠ-y&SMakBӈn߻}E %*U@wU XJuo]j.RP7 A~',libX*S|Ks_mcXȡwrџA6ڄ)2lܘW7& ?Q.ʅa)%ܗ167 /&5`TTFi%( cBx;\P]ю\RC4Uu2#GN6,H+is˷ŗ=s]ñX8ϝPpJh ۑ̀41k .68VUGc=NQmfK-9Fdu=lHJ[ԓX[ ?&$Iz&0ŤhLWcoBb+ Z@j{oᙗOo} _5$8z *>9nsS׆`pp<~o(t*+VG2*)#ň ߤD.Es:&xncDLۺ3$؉ y[V iaN Hh 5珯18(pd9{EN\2~j?ӘFv88Qm%{-f< if`mdeK'e-?xu .)=[GYT\Qm;Ño?{}߷ 0kIK$kd%DB m =7LC0Y>dÛ[[^|/O_U|C>(Mx?m2HQz J@(aQlKۜa=*k[l;"BЪ&,0Nɸ:1lZ! huEr54hWtnʛ%ExG񥯿'_Cm+{G" ҈9 =YQ< &A`øpyǗz203:x&`d%l) Ai;qlb:]ъ\mnSJkE@ZKTS u|"jasOMf9fsLv_0#USrgZ3C,2*H!Ս(0(eU ]I?|tRSziF.1ˊր'Pv} 7&L{{A?̫jOkSDx;CeBK`&m`kg/|m?`=[2+7 hJ܅,Mh<ڊ=^N-Ջxqב;`JDcԾ=|ϯc=|kY ܱv* r?wyfx ":uqrgw$C>kj;I@VDp3 IH9*0&Gsm0TReLޕ '""s%'Ywco; ]w>`+P=N8ط@O-]::*?M\'+K2s`8)02/\Ǝ逘lp,{%w3t,P,k琏wm,HO"~eǯ`e1;起(6Ǝ8ul [sH+54hE-Yt8#Bcq.aJ7Qcf[6)z?mju6^Պ"oP`0.\u~pwܰƑE`'oUls;3礤{.-[չPj;@\˛b™2G"h!Q3PJQS k4b_= Ha%.tYVP8Q6)d-&#Kc l:) FCFHXM=x߻ 2ǣAOp[Ow|}w.[_B xr_^o~&d9GJ02z'VDž .^C`eGp>r ]P_gD"r=҂zkxBcy'6ѕwWoL+mp2dq-. a _‰CGۿ~l||?Y\bk{(=V-ֱm'JD++-o^}H"5;1=NK1#mPU8}~b A(r@JFoB ^Vx"GWR8gUwVũ;@wFdhudkC[B08j1L>te@H`QX N\y 3@B^0ݻT5h:}GpԝO<0zc @+u).mܹ>BB@:S< F~έa58@K(BKyRb ܆kT3a .j e+ w80lJ13Ulrn1'%# S]`XCf =(Fъkוx>W# ṰdS-|5"Rk-&X0k/ ]!6J cLv^G>vL3|0i89G&@E6*B P:]?X'\\03xrؽQƔ7 >d /vRat\XK{ڙ\aHsM("e5|e ?g:AԸ^ =zqy+ASGbK0Tz]ñv:m<=z頍3`\eJi).^j +vH $0#Z|E C\n'Vuä"yQ<ш 5O[\Ô HpmܝBu\2#s }nrKXF̮vO㒏?Ftk&AA!CO9'PXrH\ 3ܽ'5sCZhB]43rm&FhKBZW57O#Z:*2zCc*)#Ai 6aQgo"9`ey2(c  Uhph8M񆁾K@VO83Dz(f湖iZ=̷_gay>\ԬZ1м3_)aĞ~bFU«v܏0"q Q ^x%Y22S. @DOe:Q}5vv"KqpV7D,1w{dbSW6(O0V,l*&ӴbjpfyN/Vy%&(8渭لf#C{.` ) >xK8yf^c_!5#8ިփKԬƁx "=EFXs7ip~ F*Qcj`V:*#J5y 3BbԃEM\ç3=Ͳ>Ղ?<3^n\a@[R HS3sZU\L ru`Sܞ>]v쪵xhƌ.r9|Z{ӫ{@mĒͥnaEs Ň-o$RL gBUsaG!DNb |fք!qD@XY eaT'KW/5%``OGku^Qe܋K 2%EL"TY/ ) $J)c( uNuqC2KYo[/5ti!0kKTo}@*Udu-,|D㦼%!zڰsV4@T92I_/ЯhF!PBcX:jSy,);[ &)&Yi-Ë@s map I*oe[J[s<}ޞ۸t9v2&mn~5M#M3 6Ž^\YLT3R~pQqOG'5=j0ZЩRz73!>>o%2zB/MPd-X=@t8`0Ֆk,0a)._.\rEwNNs%t̛dM86,ixnXͧB iQVb?xە-GB\,*lUlMK P%uqES L6b1ބ}&Ԇt7cl آa5K~RT*IB"a~T z0I+5>bd7 S=q3v\uJDF_oF^S+a)4>o:ۃ4q_;yQt\M³ͮ؊ZD5y{ѸsK7 xg.mYLYm9u-b`f7< 'Q=_{U6RB-%^߸ՕcDEHg O͹͂[=coz4pߋ6vۜEdXν;ŔLT)mG3(;RE%lO q6-WkN ͛g s_)>Nh䊠6GԘ Z 'US{u"SR-)Ą(\ۋĹnʅx8vUL4FRv~uM757ET b:L)U~榮ØxkҰύۜjۅDanD 2`G\4ͰF]4nD>=$*lMgZ:lU$+#$vWQM7ӄ$Ht>M⁻3/BpfMV}jț4(1'ց!F}ru<X[Pʛ G+p]FI/Dtg\X rP9Og愾sIBc+}**!ƨχ]80/^8N7a͞vN^Рkr q cK׆WbZk{jaRTJ("[ /:cϟBn{xmpê?Y+" =kD[;gU! ϬHOc?&A[ũR[agHJ`{c`k䕄Lhf>W`0MgYmi=BI$aoZSm!f$!cǩ8Mqy0VѴc]`bwJ\dXiKB5NISm`T GmGDXH$) #76Hߚ52m $`0$0+QŃLHa('  $ƹ;[)!t! QK5d\C3;b$;YhF/Hů sZ5.$LɅ HD/MJ ׅ%] D c4#s0  H0!PBA"51Xi+w-– V, \bH(%_ m%kk%PhiB{j8%wSZ*CF7.ma1V;)@@"%RA`.mcT]%Kl{\CprakOCcZtq,Oeivs"n ~b[#( KHW c\Hh(p aHwSdZ YX]nA}o CKȶ@,Z4%F~j=u쒀i!p݂1b+΄ؒ$ ˝TQ@')m$FD-rcH! 'c62 5t˝F-)VLHXjٲ$:J`RXiH3vb$>wRї9dfܰ $(d#DZ:!6MTaВ% DDJBGP{ml5ZDGISK5TFϵ%3i{zJRHA+B[+D"mXD[NJBO @?Uv[' ftvAqa^G m-I$`B/QX@j;AVHh @7GXj%' 4T3D"0*i^jWvS*,mdM;R9p`RhڠJL‚ɑ Tȵ}[ %nlB+Ÿ`)D`?7 ]VBP'ޤb+`A Id0R͠/q=U˭fdtS AJ $RTZ9-~JVĠGF?MM D/MQГ 0$A2 ):DW L5Cf#"dM C>@ۍ.K=! vNaHI,:I/h'Mrn,NmnEp- b%eS4ډݸI D@KjHjSD*aR?iq&eUh)t@ P RhRi0Ra7b`T0ʆݖB^ذ0J 2hIn+nbI ;-i X,SL &`{l:J`BK*Ya"bGj,MAw+?d$?dXf3INݖTE,@>\E pܻ7޷ɭ Xo1#qY;@$2,M276Qmy"}x:d?4>4|o6yk5sSnmIpY@r[[V\/ݔ5>Oq{N[N._58-%V4ܷ-u4B5~A?{*N଼okU~MXujtzh4-46Egr^U0*m!y mc7(tXs$N4gSe5>qi{ûTT6V9<?B-16&pٔc5.U$ t3gJrX}LsHaOZɲsND2 6a$]4;>ͨ\Ff|N-ӌ?ȃ8wR.ZuxPF.G: {Aş%aiX8c!Wk8O3L7+K<ӗw+I} 8>w˯G5(TY\d6Si19S tC}:" z1q3fh; -XJˇ99l%R8Ü+2tzw3'998J#07,Vz}th-EKWn%r ~N%5?>?yQiGiN)c9:zGJl s f*c:ǣDflSiZ7<)b8읏z>3 R;Lq3Fj/T's}PT*B\<Ӡ w̩*М!B̟E6<$ <'a\hD7<ΉYR'Xe }ncp,0Ù3۫밠U8Ɵz~r-\5ϳ/R IN_Bq8 >pS>#骢pXeSoչQGީa+Ӄ{%V5#/]sCQلy .'ńZ H=/Vx̉{%9GVs2#qpN+Ӝ&)+>l %ja1$x3S<IENDB`lmms-1.1.3/plugins/stk/mallets/logo.png000066400000000000000000000153701247673406200200760ustar00rootroot00000000000000PNG  IHDR00WbKGDIDATw]oOgwfg{Iv7Y7@HP xsyv;QO=7gs6@:RǷI5VO޹’\|f~cv;w_+=䟸FJüvz|[29A*]6K$<'^ЁNZeh7K;osȑj~1zC23@%e%JF3wCfdɕϱNO[hNgD̥7;~ ۃD _@]CTq+ Ji$H Tuǻø+Wх<ʵgO`oYa`+͎$шmn.wb$Bs4 B;V@~(IBͳ QؠO[M#!3 $:w Azt eQUg }1 mmM5og4q3!z!$1 @j*fSLH\j,XSHviUgRDD ho}jcB19K^GSW} Y,T}}}O)ꪇjbyq>NHt+g} gu~a3{#\ݱ Bnp`7&et _s7FF݋҈mN%n=xuF{9޹ AvS.EZkcq K粬9ȦrRT Yi34򋳤wrLa.>M[h=];fp_$K"V&Ntp"[vRS˶qTHz)7.Ө4hҋakzpKbau@j([ ]=y}OI+*AuZ+=.)=tkX]fiԆpw+VXJ ʰC' i-8*"uGy[[m\C & qHZhmx](,xIΫU~WfWXv E{qgw` y| Dz[cJ?}'MwjWr*+Z{/>1lBѳЩ Ԕ>\N}h|dkkUNihY,R-+MY$}l\E)rqTBM3]s!߾uNWgr\RT;mC#Ǵm[H ~D^ާZW4sqg: HO,tK/_MMD191n'#'. Sly4R6}I;(yl=t7o2QѯЌcVWW(0y]eTo\ QDiКxuAizg|ٛf}`!;=^D<<|_ ]:2'ՅiUH0/_+,S'`LW$e-"cJ2vbdcALFVS;kD]ysDZ D (`yhSĖQxJOleH\_[{ '"þ8H.q)gjV,{AH~@thG L"Y!+F{3{se?9_dǒ5MRȱ[mՖ7kF>$8׿b96tw&r8j|:t쉄=_|Yat1Jgpzm0v;LJ ;Qtc㨄XAKy4WtV }q6Kzee{bEA+PD\zXetܿHƣ) rRrފzx/xr+oc.(,` 7}iıM e%`ymlbi[5LF; %A9Q`4Հݤyk'fyZd b<"FIҮu}zuDqoT.J2õhAC)N,Wc"J #KmPcϤӶP( 5K⪉剃zÓvo(5r3MF,qOSz,ʵl ?^=z`-3S.@%1=NBE\mI;")F#}f[),̞Bٟ~s_8^6l"yu]Ǐboc-'[HCC\`jSS\sjIpJ{~I}$V{&WwƖ?ؙhtl>VÑ[B7&x4.L' ъP͜Y йܸqDk@\!דsM3t rGNfr{cCn}ݼn,Ɜ"?#޴h)kEK6U& b=W@rqbi%(3LmCCw+oNL 렧NAŁuiI!Vdt?$7u?\sOxTT"Xh4BdbX32H q"h Fj `3XMV& woGE›6l J#5TU u謃#ԕNӏZr.ܞ7Q3?8]rN{,$ Fߦ^u]I%_mgSo]ZH/ɦiD?ųqD`l8f#SLӎQ/n$ݍ$CP(e`4q4y Hb c!?Ξ?pUP.9cEVUxPJ̓q(ΠnAQéc(z0;xa=p}UC\L u90u#"!)P1? Ο=^s>ޢ4Uvsx8n,Wm@0 IPQ[w!ziQ_zqej O6*HombOۗ@!gCΣ] Z^DA'rOw5oN ]w^7fhe))?/Vd[ř7{PU;wFñ%ny{K2se5>|QU֮+ dh PF2tbCβA[P HPc u>kB  v~:QY8vGjHǴZصr!Ż"i'hyOo-7DQI/χ] GyRvzBSGkkl:\rRg^#48dS3MzM,w80zR YɣJs̶P>juK?Ӿ5'7-u[*uL[nyoYd17yy^JpRqF^b=)t'$#Ggq8k G2r'ӉQUgp'6-}ї+fkj$J`"e<KDKg`M57k~FtvA+Be=/ Q5Y *Y>,speG^륫-Ks`F zŘ@iҖ&Nz"})L I -r[ލ^I^նɹug֗."k`(:M f_NnڔciBdUFL }ɉ5Q?kC;nJmK!I800jǜcrӋL^"*}2uӖ׮6ݳr5޼_9ލefԧO.dCot1cl UTX% \i~eR3=Du*>zJœZL? 3vKQe AbdEX]ШKk}F5^tDa`h#QH,ܓvH]Ce*EMے#xV akG0C9YVi&apzbC&5wxLܸ!+uzȔKXeCQrB -BeH/YRKl&B]],9jICb%^`wqld/[ l ԯ]qMJ@)0 ( #Ji$A8[*AÑ+lPE%=r Qɿk!*n״o+L-In V5,Ϥk[:Quey5 KE`g@ ЪC6dq%[Aka*r(bݶ/E2 0pUoA @l>YxyvDJs7:%Z%Vy;'_u Qg'Y."N2qETN֗ѝ~\Տ'8 n:FD IPC, 9 jƦoEb"30f(kFH2\ET9I|.dpe+٥jƶa4lSCEM:|*D!fj;dbR!X+ڠiFIQ"hPt(i>Ko>/ذ6.[IENDB`lmms-1.1.3/plugins/stk/mallets/mallets.cpp000066400000000000000000000440221247673406200205710ustar00rootroot00000000000000/* * mallets.cpp - tuned instruments that one would bang upon * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "mallets.h" #include #include #include "BandedWG.h" #include "ModalBar.h" #include "TubeBell.h" #include "engine.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT malletsstk_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Mallets", QT_TRANSLATE_NOOP( "pluginBrowser", "Tuneful things to bang on" ), "Danny McRae ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } malletsInstrument::malletsInstrument( InstrumentTrack * _instrument_track ): Instrument( _instrument_track, &malletsstk_plugin_descriptor ), m_hardnessModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Hardness" )), m_positionModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Position" )), m_vibratoGainModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Vibrato Gain" )), m_vibratoFreqModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Vibrato Freq" )), m_stickModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Stick Mix" )), m_modulatorModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Modulator" )), m_crossfadeModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Crossfade" )), m_lfoSpeedModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "LFO Speed" )), m_lfoDepthModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "LFO Depth" )), m_adsrModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "ADSR" )), m_pressureModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Pressure" )), m_motionModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Motion" )), m_velocityModel(64.0f, 0.0f, 128.0f, 0.1f, this, tr( "Speed" )), m_strikeModel( false, this, tr( "Bowed" ) ), m_presetsModel(this), m_spreadModel(0, 0, 255, 1, this, tr( "Spread" )), m_filesMissing( !QDir( configManager::inst()->stkDir() ).exists() || !QFileInfo( configManager::inst()->stkDir() + QDir::separator() + "sinewave.raw" ).exists() ) { // ModalBar m_presetsModel.addItem( tr( "Marimba" ) ); m_scalers.append( 4.0 ); m_presetsModel.addItem( tr( "Vibraphone" ) ); m_scalers.append( 4.0 ); m_presetsModel.addItem( tr( "Agogo" ) ); m_scalers.append( 5.0 ); m_presetsModel.addItem( tr( "Wood1" ) ); m_scalers.append( 4.0 ); m_presetsModel.addItem( tr( "Reso" ) ); m_scalers.append( 2.5 ); m_presetsModel.addItem( tr( "Wood2" ) ); m_scalers.append( 5.0 ); m_presetsModel.addItem( tr( "Beats" ) ); m_scalers.append( 20.0 ); m_presetsModel.addItem( tr( "Two Fixed" ) ); m_scalers.append( 5.0 ); m_presetsModel.addItem( tr( "Clump" ) ); m_scalers.append( 4.0 ); // TubeBell m_presetsModel.addItem( tr( "Tubular Bells" ) ); m_scalers.append( 1.8 ); // BandedWG m_presetsModel.addItem( tr( "Uniform Bar" ) ); m_scalers.append( 25.0 ); m_presetsModel.addItem( tr( "Tuned Bar" ) ); m_scalers.append( 10.0 ); m_presetsModel.addItem( tr( "Glass" ) ); m_scalers.append( 16.0 ); m_presetsModel.addItem( tr( "Tibetan Bowl" ) ); m_scalers.append( 7.0 ); } malletsInstrument::~malletsInstrument() { } void malletsInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { // ModalBar m_hardnessModel.saveSettings( _doc, _this, "hardness" ); m_positionModel.saveSettings( _doc, _this, "position" ); m_vibratoGainModel.saveSettings( _doc, _this, "vib_gain" ); m_vibratoFreqModel.saveSettings( _doc, _this, "vib_freq" ); m_stickModel.saveSettings( _doc, _this, "stick_mix" ); // TubeBell m_modulatorModel.saveSettings( _doc, _this, "modulator" ); m_crossfadeModel.saveSettings( _doc, _this, "crossfade" ); m_lfoSpeedModel.saveSettings( _doc, _this, "lfo_speed" ); m_lfoDepthModel.saveSettings( _doc, _this, "lfo_depth" ); m_adsrModel.saveSettings( _doc, _this, "adsr" ); // BandedWG m_pressureModel.saveSettings( _doc, _this, "pressure" ); m_motionModel.saveSettings( _doc, _this, "motion" ); m_vibratoModel.saveSettings( _doc, _this, "vibrato" ); m_velocityModel.saveSettings( _doc, _this, "velocity" ); m_strikeModel.saveSettings( _doc, _this, "strike" ); m_presetsModel.saveSettings( _doc, _this, "preset" ); m_spreadModel.saveSettings( _doc, _this, "spread" ); } void malletsInstrument::loadSettings( const QDomElement & _this ) { // ModalBar m_hardnessModel.loadSettings( _this, "hardness" ); m_positionModel.loadSettings( _this, "position" ); m_vibratoGainModel.loadSettings( _this, "vib_gain" ); m_vibratoFreqModel.loadSettings( _this, "vib_freq" ); m_stickModel.loadSettings( _this, "stick_mix" ); // TubeBell m_modulatorModel.loadSettings( _this, "modulator" ); m_crossfadeModel.loadSettings( _this, "crossfade" ); m_lfoSpeedModel.loadSettings( _this, "lfo_speed" ); m_lfoDepthModel.loadSettings( _this, "lfo_depth" ); m_adsrModel.loadSettings( _this, "adsr" ); // BandedWG m_pressureModel.loadSettings( _this, "pressure" ); m_motionModel.loadSettings( _this, "motion" ); m_vibratoModel.loadSettings( _this, "vibrato" ); m_velocityModel.loadSettings( _this, "velocity" ); m_strikeModel.loadSettings( _this, "strike" ); m_presetsModel.loadSettings( _this, "preset" ); m_spreadModel.loadSettings( _this, "spread" ); } QString malletsInstrument::nodeName() const { return( malletsstk_plugin_descriptor.name ); } void malletsInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if( m_filesMissing ) { return; } int p = m_presetsModel.value(); const float freq = _n->frequency(); if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { const float vel = _n->getVolume() / 100.0f; // critical section as STK is not thread-safe static QMutex m; m.lock(); if( p < 9 ) { _n->m_pluginData = new malletsSynth( freq, vel, m_vibratoGainModel.value(), m_hardnessModel.value(), m_positionModel.value(), m_stickModel.value(), m_vibratoFreqModel.value(), p, (uint8_t) m_spreadModel.value(), engine::mixer()->processingSampleRate() ); } else if( p == 9 ) { _n->m_pluginData = new malletsSynth( freq, vel, p, m_lfoDepthModel.value(), m_modulatorModel.value(), m_crossfadeModel.value(), m_lfoSpeedModel.value(), m_adsrModel.value(), (uint8_t) m_spreadModel.value(), engine::mixer()->processingSampleRate() ); } else { _n->m_pluginData = new malletsSynth( freq, vel, m_pressureModel.value(), m_motionModel.value(), m_vibratoModel.value(), p - 10, m_strikeModel.value() * 128.0, m_velocityModel.value(), (uint8_t) m_spreadModel.value(), engine::mixer()->processingSampleRate() ); } m.unlock(); } const fpp_t frames = _n->framesLeftForCurrentPeriod(); malletsSynth * ps = static_cast( _n->m_pluginData ); ps->setFrequency( freq ); sample_t add_scale = 0.0f; if( p == 10 ) { add_scale = static_cast( m_strikeModel.value() ) * freq * 2.5f; } for( fpp_t frame = 0; frame < frames; ++frame ) { _working_buffer[frame][0] = ps->nextSampleLeft() * ( m_scalers[m_presetsModel.value()] + add_scale ); _working_buffer[frame][1] = ps->nextSampleRight() * ( m_scalers[m_presetsModel.value()] + add_scale ); } instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void malletsInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * malletsInstrument::instantiateView( QWidget * _parent ) { return( new malletsInstrumentView( this, _parent ) ); } malletsInstrumentView::malletsInstrumentView( malletsInstrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { m_modalBarWidget = setupModalBarControls( this ); setWidgetBackground( m_modalBarWidget, "artwork" ); m_modalBarWidget->show(); m_modalBarWidget->move( 0,0 ); m_tubeBellWidget = setupTubeBellControls( this ); setWidgetBackground( m_tubeBellWidget, "artwork" ); m_tubeBellWidget->hide(); m_tubeBellWidget->move( 0,0 ); m_bandedWGWidget = setupBandedWGControls( this ); setWidgetBackground( m_bandedWGWidget, "artwork" ); m_bandedWGWidget->hide(); m_bandedWGWidget->move( 0,0 ); m_presetsCombo = new comboBox( this, tr( "Instrument" ) ); m_presetsCombo->setGeometry( 140, 50, 99, 22 ); m_presetsCombo->setFont( pointSize<8>( m_presetsCombo->font() ) ); connect( &_instrument->m_presetsModel, SIGNAL( dataChanged() ), this, SLOT( changePreset() ) ); m_spreadKnob = new knob( knobVintage_32, this ); m_spreadKnob->setLabel( tr( "Spread" ) ); m_spreadKnob->move( 190, 140 ); m_spreadKnob->setHintText( tr( "Spread:" ) + " ", "" ); // try to inform user about missing Stk-installation if( _instrument->m_filesMissing && engine::hasGUI() ) { QMessageBox::information( 0, tr( "Missing files" ), tr( "Your Stk-installation seems to be " "incomplete. Please make sure " "the full Stk-package is installed!" ), QMessageBox::Ok ); } } malletsInstrumentView::~malletsInstrumentView() { } void malletsInstrumentView::setWidgetBackground( QWidget * _widget, const QString & _pic ) { _widget->setAutoFillBackground( true ); QPalette pal; pal.setBrush( _widget->backgroundRole(), PLUGIN_NAME::getIconPixmap( _pic.toAscii().constData() ) ); _widget->setPalette( pal ); } QWidget * malletsInstrumentView::setupModalBarControls( QWidget * _parent ) { QWidget * widget = new QWidget( _parent ); widget->setFixedSize( 250, 250 ); m_hardnessKnob = new knob( knobVintage_32, widget ); m_hardnessKnob->setLabel( tr( "Hardness" ) ); m_hardnessKnob->move( 30, 90 ); m_hardnessKnob->setHintText( tr( "Hardness:" ) + " ", "" ); m_positionKnob = new knob( knobVintage_32, widget ); m_positionKnob->setLabel( tr( "Position" ) ); m_positionKnob->move( 110, 90 ); m_positionKnob->setHintText( tr( "Position:" ) + " ", "" ); m_vibratoGainKnob = new knob( knobVintage_32, widget ); m_vibratoGainKnob->setLabel( tr( "Vib Gain" ) ); m_vibratoGainKnob->move( 30, 140 ); m_vibratoGainKnob->setHintText( tr( "Vib Gain:" ) + " ", "" ); m_vibratoFreqKnob = new knob( knobVintage_32, widget ); m_vibratoFreqKnob->setLabel( tr( "Vib Freq" ) ); m_vibratoFreqKnob->move( 110, 140 ); m_vibratoFreqKnob->setHintText( tr( "Vib Freq:" ) + " ", "" ); m_stickKnob = new knob( knobVintage_32, widget ); m_stickKnob->setLabel( tr( "Stick Mix" ) ); m_stickKnob->move( 190, 90 ); m_stickKnob->setHintText( tr( "Stick Mix:" ) + " ", "" ); return( widget ); } QWidget * malletsInstrumentView::setupTubeBellControls( QWidget * _parent ) { QWidget * widget = new QWidget( _parent ); widget->setFixedSize( 250, 250 ); m_modulatorKnob = new knob( knobVintage_32, widget ); m_modulatorKnob->setLabel( tr( "Modulator" ) ); m_modulatorKnob->move( 30, 90 ); m_modulatorKnob->setHintText( tr( "Modulator:" ) + " ", "" ); m_crossfadeKnob = new knob( knobVintage_32, widget ); m_crossfadeKnob->setLabel( tr( "Crossfade" ) ); m_crossfadeKnob->move( 110, 90 ); m_crossfadeKnob->setHintText( tr( "Crossfade:" ) + " ", "" ); m_lfoSpeedKnob = new knob( knobVintage_32, widget ); m_lfoSpeedKnob->setLabel( tr( "LFO Speed" ) ); m_lfoSpeedKnob->move( 30, 140 ); m_lfoSpeedKnob->setHintText( tr( "LFO Speed:" ) + " ", "" ); m_lfoDepthKnob = new knob( knobVintage_32, widget ); m_lfoDepthKnob->setLabel( tr( "LFO Depth" ) ); m_lfoDepthKnob->move( 110, 140 ); m_lfoDepthKnob->setHintText( tr( "LFO Depth:" ) + " ", "" ); m_adsrKnob = new knob( knobVintage_32, widget ); m_adsrKnob->setLabel( tr( "ADSR" ) ); m_adsrKnob->move( 190, 90 ); m_adsrKnob->setHintText( tr( "ADSR:" ) + " ", "" ); return( widget ); } QWidget * malletsInstrumentView::setupBandedWGControls( QWidget * _parent ) { // BandedWG QWidget * widget = new QWidget( _parent ); widget->setFixedSize( 250, 250 ); m_strikeLED = new ledCheckBox( tr( "Bowed" ), widget ); m_strikeLED->move( 138, 25 ); m_pressureKnob = new knob( knobVintage_32, widget ); m_pressureKnob->setLabel( tr( "Pressure" ) ); m_pressureKnob->move( 30, 90 ); m_pressureKnob->setHintText( tr( "Pressure:" ) + " ", "" ); m_motionKnob = new knob( knobVintage_32, widget ); m_motionKnob->setLabel( tr( "Motion" ) ); m_motionKnob->move( 110, 90 ); m_motionKnob->setHintText( tr( "Motion:" ) + " ", "" ); m_velocityKnob = new knob( knobVintage_32, widget ); m_velocityKnob->setLabel( tr( "Speed" ) ); m_velocityKnob->move( 30, 140 ); m_velocityKnob->setHintText( tr( "Speed:" ) + " ", "" ); m_vibratoKnob = new knob( knobVintage_32, widget, tr( "Vibrato" ) ); m_vibratoKnob->setLabel( tr( "Vibrato" ) ); m_vibratoKnob->move( 110, 140 ); m_vibratoKnob->setHintText( tr( "Vibrato:" ) + " ", "" ); return( widget ); } void malletsInstrumentView::modelChanged() { malletsInstrument * inst = castModel(); m_hardnessKnob->setModel( &inst->m_hardnessModel ); m_positionKnob->setModel( &inst->m_positionModel ); m_vibratoGainKnob->setModel( &inst->m_vibratoGainModel ); m_vibratoFreqKnob->setModel( &inst->m_vibratoFreqModel ); m_stickKnob->setModel( &inst->m_stickModel ); m_modulatorKnob->setModel( &inst->m_modulatorModel ); m_crossfadeKnob->setModel( &inst->m_crossfadeModel ); m_lfoSpeedKnob->setModel( &inst->m_lfoSpeedModel ); m_lfoDepthKnob->setModel( &inst->m_lfoDepthModel ); m_adsrKnob->setModel( &inst->m_adsrModel ); m_pressureKnob->setModel( &inst->m_pressureModel ); m_motionKnob->setModel( &inst->m_motionModel ); m_vibratoKnob->setModel( &inst->m_vibratoModel ); m_velocityKnob->setModel( &inst->m_velocityModel ); m_strikeLED->setModel( &inst->m_strikeModel ); m_presetsCombo->setModel( &inst->m_presetsModel ); m_spreadKnob->setModel( &inst->m_spreadModel ); } void malletsInstrumentView::changePreset() { malletsInstrument * inst = castModel(); int _preset = inst->m_presetsModel.value(); printf("malletsInstrumentView %d\n", _preset); if( _preset < 9 ) { m_tubeBellWidget->hide(); m_bandedWGWidget->hide(); m_modalBarWidget->show(); } else if( _preset == 9 ) { m_modalBarWidget->hide(); m_bandedWGWidget->hide(); m_tubeBellWidget->show(); } else { m_modalBarWidget->hide(); m_tubeBellWidget->hide(); m_bandedWGWidget->show(); } } // ModalBar malletsSynth::malletsSynth( const StkFloat _pitch, const StkFloat _velocity, const StkFloat _control1, const StkFloat _control2, const StkFloat _control4, const StkFloat _control8, const StkFloat _control11, const int _control16, const uint8_t _delay, const sample_rate_t _sample_rate ) { try { Stk::setSampleRate( _sample_rate ); Stk::setRawwavePath( configManager::inst()->stkDir() .toAscii().constData() ); m_voice = new ModalBar(); m_voice->controlChange( 1, _control1 ); m_voice->controlChange( 2, _control2 ); m_voice->controlChange( 4, _control4 ); m_voice->controlChange( 8, _control8 ); m_voice->controlChange( 11, _control11 ); m_voice->controlChange( 16, _control16 ); m_voice->controlChange( 128, 128.0f ); m_voice->noteOn( _pitch, _velocity ); } catch( ... ) { m_voice = NULL; } m_delay = new StkFloat[256]; m_delayRead = 0; m_delayWrite = _delay; for( int i = 0; i < 256; i++ ) { m_delay[i] = 0.0; } } // TubeBell malletsSynth::malletsSynth( const StkFloat _pitch, const StkFloat _velocity, const int _preset, const StkFloat _control1, const StkFloat _control2, const StkFloat _control4, const StkFloat _control11, const StkFloat _control128, const uint8_t _delay, const sample_rate_t _sample_rate ) { try { Stk::setSampleRate( _sample_rate ); Stk::setRawwavePath( configManager::inst()->stkDir() .toAscii().constData() ); m_voice = new TubeBell(); m_voice->controlChange( 1, _control1 ); m_voice->controlChange( 2, _control2 ); m_voice->controlChange( 4, _control4 ); m_voice->controlChange( 11, _control11 ); m_voice->controlChange( 128, _control128 ); m_voice->noteOn( _pitch, _velocity ); } catch( ... ) { m_voice = NULL; } m_delay = new StkFloat[256]; m_delayRead = 0; m_delayWrite = _delay; for( int i = 0; i < 256; i++ ) { m_delay[i] = 0.0; } } // BandedWG malletsSynth::malletsSynth( const StkFloat _pitch, const StkFloat _velocity, const StkFloat _control2, const StkFloat _control4, const StkFloat _control11, const int _control16, const StkFloat _control64, const StkFloat _control128, const uint8_t _delay, const sample_rate_t _sample_rate ) { try { Stk::setSampleRate( _sample_rate ); Stk::setRawwavePath( configManager::inst()->stkDir() .toAscii().constData() ); m_voice = new BandedWG(); m_voice->controlChange( 1, 128.0 ); m_voice->controlChange( 2, _control2 ); m_voice->controlChange( 4, _control4 ); m_voice->controlChange( 11, _control11 ); m_voice->controlChange( 16, _control16 ); m_voice->controlChange( 64, _control64 ); m_voice->controlChange( 128, _control128 ); m_voice->noteOn( _pitch, _velocity ); } catch( ... ) { m_voice = NULL; } m_delay = new StkFloat[256]; m_delayRead = 0; m_delayWrite = _delay; for( int i = 0; i < 256; i++ ) { m_delay[i] = 0.0; } } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new malletsInstrument( static_cast( _data ) ); } } #include "moc_mallets.cxx" lmms-1.1.3/plugins/stk/mallets/mallets.h000066400000000000000000000120531247673406200202350ustar00rootroot00000000000000/* * mallets.h - tuned instruments that one would bang upon * * Copyright (c) 2006-2008 Danny McRae * * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _MALLET_H #define _MALLET_H #include "Instrmnt.h" #include "combobox.h" #include "Instrument.h" #include "InstrumentView.h" #include "knob.h" #include "NotePlayHandle.h" #include "led_checkbox.h" // As of Stk 4.4 all classes and types have been moved to the namespace "stk". // However in older versions this namespace does not exist, therefore declare it // so this plugin builds with all versions of Stk. namespace stk { } ; using namespace stk; class malletsSynth { public: // ModalBar malletsSynth( const StkFloat _pitch, const StkFloat _velocity, const StkFloat _control1, const StkFloat _control2, const StkFloat _control4, const StkFloat _control8, const StkFloat _control11, const int _control16, const uint8_t _delay, const sample_rate_t _sample_rate ); // TubeBell malletsSynth( const StkFloat _pitch, const StkFloat _velocity, const int _preset, const StkFloat _control1, const StkFloat _control2, const StkFloat _control4, const StkFloat _control11, const StkFloat _control128, const uint8_t _delay, const sample_rate_t _sample_rate ); // BandedWG malletsSynth( const StkFloat _pitch, const StkFloat _velocity, const StkFloat _control2, const StkFloat _control4, const StkFloat _control11, const int _control16, const StkFloat _control64, const StkFloat _control128, const uint8_t _delay, const sample_rate_t _sample_rate ); inline ~malletsSynth() { m_voice->noteOff( 0.0 ); delete[] m_delay; delete m_voice; } inline sample_t nextSampleLeft() { if( m_voice == NULL ) { return( 0.0f ); } else { StkFloat s = m_voice->tick(); m_delay[m_delayWrite] = s; m_delayWrite++; return( s ); } } inline sample_t nextSampleRight() { StkFloat s = m_delay[m_delayRead]; m_delayRead++; return( s ); } inline void setFrequency( const StkFloat _pitch ) { if( m_voice ) { m_voice->setFrequency( _pitch ); } } protected: Instrmnt * m_voice; StkFloat * m_delay; uint8_t m_delayRead; uint8_t m_delayWrite; }; class malletsInstrument : public Instrument { Q_OBJECT public: malletsInstrument( InstrumentTrack * _instrument_track ); virtual ~malletsInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual PluginView * instantiateView( QWidget * _parent ); private: FloatModel m_hardnessModel; FloatModel m_positionModel; FloatModel m_vibratoGainModel; FloatModel m_vibratoFreqModel; FloatModel m_stickModel; FloatModel m_modulatorModel; FloatModel m_crossfadeModel; FloatModel m_lfoSpeedModel; FloatModel m_lfoDepthModel; FloatModel m_adsrModel; FloatModel m_pressureModel; FloatModel m_motionModel; FloatModel m_vibratoModel; FloatModel m_velocityModel; BoolModel m_strikeModel; ComboBoxModel m_presetsModel; FloatModel m_spreadModel; QVector m_scalers; bool m_filesMissing; friend class malletsInstrumentView; } ; class malletsInstrumentView: public InstrumentView { Q_OBJECT public: malletsInstrumentView( malletsInstrument * _instrument, QWidget * _parent ); virtual ~malletsInstrumentView(); public slots: void changePreset(); private: virtual void modelChanged(); void setWidgetBackground( QWidget * _widget, const QString & _pic ); QWidget * setupModalBarControls( QWidget * _parent ); QWidget * setupTubeBellControls( QWidget * _parent ); QWidget * setupBandedWGControls( QWidget * _parent ); QWidget * m_modalBarWidget; knob * m_hardnessKnob; knob * m_positionKnob; knob * m_vibratoGainKnob; knob * m_vibratoFreqKnob; knob * m_stickKnob; QWidget * m_tubeBellWidget; knob * m_modulatorKnob; knob * m_crossfadeKnob; knob * m_lfoSpeedKnob; knob * m_lfoDepthKnob; knob * m_adsrKnob; QWidget * m_bandedWGWidget; knob * m_pressureKnob; knob * m_motionKnob; knob * m_vibratoKnob; knob * m_velocityKnob; ledCheckBox * m_strikeLED; comboBox * m_presetsCombo; knob * m_spreadKnob; }; #endif lmms-1.1.3/plugins/triple_oscillator/000077500000000000000000000000001247673406200177125ustar00rootroot00000000000000lmms-1.1.3/plugins/triple_oscillator/CMakeLists.txt000066400000000000000000000002561247673406200224550ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(tripleoscillator TripleOscillator.cpp TripleOscillator.h MOCFILES TripleOscillator.h EMBEDDED_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.png) lmms-1.1.3/plugins/triple_oscillator/TripleOscillator.cpp000066400000000000000000000573621247673406200237260ustar00rootroot00000000000000/* * TripleOscillator.cpp - powerful instrument with three oscillators * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "TripleOscillator.h" #include "automatable_button.h" #include "debug.h" #include "engine.h" #include "InstrumentTrack.h" #include "knob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include "SampleBuffer.h" #include "tooltip.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT tripleoscillator_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "TripleOscillator", QT_TRANSLATE_NOOP( "pluginBrowser", "Three powerful oscillators you can modulate " "in several ways" ), "Tobias Doerffel ", 0x0110, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } OscillatorObject::OscillatorObject( Model * _parent, int _idx ) : Model( _parent ), m_volumeModel( DefaultVolume / NUM_OF_OSCILLATORS, MinVolume, MaxVolume, 1.0f, this, tr( "Osc %1 volume" ).arg( _idx+1 ) ), m_panModel( DefaultPanning, PanningLeft, PanningRight, 1.0f, this, tr( "Osc %1 panning" ).arg( _idx+1 ) ), m_coarseModel( -_idx*KeysPerOctave, -2 * KeysPerOctave, 2 * KeysPerOctave, 1.0f, this, tr( "Osc %1 coarse detuning" ).arg( _idx+1 ) ), m_fineLeftModel( 0.0f, -100.0f, 100.0f, 1.0f, this, tr( "Osc %1 fine detuning left" ).arg( _idx+1 ) ), m_fineRightModel( 0.0f, -100.0f, 100.0f, 1.0f, this, tr( "Osc %1 fine detuning right" ).arg( _idx + 1 ) ), m_phaseOffsetModel( 0.0f, 0.0f, 360.0f, 1.0f, this, tr( "Osc %1 phase-offset" ).arg( _idx+1 ) ), m_stereoPhaseDetuningModel( 0.0f, 0.0f, 360.0f, 1.0f, this, tr( "Osc %1 stereo phase-detuning" ).arg( _idx+1 ) ), m_waveShapeModel( Oscillator::SineWave, 0, Oscillator::NumWaveShapes-1, this, tr( "Osc %1 wave shape" ).arg( _idx+1 ) ), m_modulationAlgoModel( Oscillator::SignalMix, 0, Oscillator::NumModulationAlgos-1, this, tr( "Modulation type %1" ).arg( _idx+1 ) ), m_sampleBuffer( new SampleBuffer ), m_volumeLeft( 0.0f ), m_volumeRight( 0.0f ), m_detuningLeft( 0.0f ), m_detuningRight( 0.0f ), m_phaseOffsetLeft( 0.0f ), m_phaseOffsetRight( 0.0f ) { // Connect knobs with Oscillators' inputs connect( &m_volumeModel, SIGNAL( dataChanged() ), this, SLOT( updateVolume() ) ); connect( &m_panModel, SIGNAL( dataChanged() ), this, SLOT( updateVolume() ) ); updateVolume(); connect( &m_coarseModel, SIGNAL( dataChanged() ), this, SLOT( updateDetuningLeft() ) ); connect( &m_coarseModel, SIGNAL( dataChanged() ), this, SLOT( updateDetuningRight() ) ); connect( &m_fineLeftModel, SIGNAL( dataChanged() ), this, SLOT( updateDetuningLeft() ) ); connect( &m_fineRightModel, SIGNAL( dataChanged() ), this, SLOT( updateDetuningRight() ) ); updateDetuningLeft(); updateDetuningRight(); connect( &m_phaseOffsetModel, SIGNAL( dataChanged() ), this, SLOT( updatePhaseOffsetLeft() ) ); connect( &m_phaseOffsetModel, SIGNAL( dataChanged() ), this, SLOT( updatePhaseOffsetRight() ) ); connect( &m_stereoPhaseDetuningModel, SIGNAL( dataChanged() ), this, SLOT( updatePhaseOffsetLeft() ) ); updatePhaseOffsetLeft(); updatePhaseOffsetRight(); } OscillatorObject::~OscillatorObject() { sharedObject::unref( m_sampleBuffer ); } void OscillatorObject::oscUserDefWaveDblClick() { QString af = m_sampleBuffer->openAndSetWaveformFile(); if( af != "" ) { // TODO: //toolTip::add( m_usrWaveBtn, m_sampleBuffer->audioFile() ); } } void OscillatorObject::updateVolume() { if( m_panModel.value() >= 0.0f ) { const float panningFactorLeft = 1.0f - m_panModel.value() / (float)PanningRight; m_volumeLeft = panningFactorLeft * m_volumeModel.value() / 100.0f; m_volumeRight = m_volumeModel.value() / 100.0f; } else { m_volumeLeft = m_volumeModel.value() / 100.0f; const float panningFactorRight = 1.0f + m_panModel.value() / (float)PanningRight; m_volumeRight = panningFactorRight * m_volumeModel.value() / 100.0f; } } void OscillatorObject::updateDetuningLeft() { m_detuningLeft = powf( 2.0f, ( (float)m_coarseModel.value() * 100.0f + (float)m_fineLeftModel.value() ) / 1200.0f ) / engine::mixer()->processingSampleRate(); } void OscillatorObject::updateDetuningRight() { m_detuningRight = powf( 2.0f, ( (float)m_coarseModel.value() * 100.0f + (float)m_fineRightModel.value() ) / 1200.0f ) / engine::mixer()->processingSampleRate(); } void OscillatorObject::updatePhaseOffsetLeft() { m_phaseOffsetLeft = ( m_phaseOffsetModel.value() + m_stereoPhaseDetuningModel.value() ) / 360.0f; } void OscillatorObject::updatePhaseOffsetRight() { m_phaseOffsetRight = m_phaseOffsetModel.value() / 360.0f; } TripleOscillator::TripleOscillator( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &tripleoscillator_plugin_descriptor ) { for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { m_osc[i] = new OscillatorObject( this, i ); } connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateAllDetuning() ) ); } TripleOscillator::~TripleOscillator() { } void TripleOscillator::saveSettings( QDomDocument & _doc, QDomElement & _this ) { for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { QString is = QString::number( i ); m_osc[i]->m_volumeModel.saveSettings( _doc, _this, "vol" + is ); m_osc[i]->m_panModel.saveSettings( _doc, _this, "pan" + is ); m_osc[i]->m_coarseModel.saveSettings( _doc, _this, "coarse" + is ); m_osc[i]->m_fineLeftModel.saveSettings( _doc, _this, "finel" + is ); m_osc[i]->m_fineRightModel.saveSettings( _doc, _this, "finer" + is ); m_osc[i]->m_phaseOffsetModel.saveSettings( _doc, _this, "phoffset" + is ); m_osc[i]->m_stereoPhaseDetuningModel.saveSettings( _doc, _this, "stphdetun" + is ); m_osc[i]->m_waveShapeModel.saveSettings( _doc, _this, "wavetype" + is ); m_osc[i]->m_modulationAlgoModel.saveSettings( _doc, _this, "modalgo" + QString::number( i+1 ) ); _this.setAttribute( "userwavefile" + is, m_osc[i]->m_sampleBuffer->audioFile() ); } } void TripleOscillator::loadSettings( const QDomElement & _this ) { for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { const QString is = QString::number( i ); m_osc[i]->m_volumeModel.loadSettings( _this, "vol" + is ); m_osc[i]->m_panModel.loadSettings( _this, "pan" + is ); m_osc[i]->m_coarseModel.loadSettings( _this, "coarse" + is ); m_osc[i]->m_fineLeftModel.loadSettings( _this, "finel" + is ); m_osc[i]->m_fineRightModel.loadSettings( _this, "finer" + is ); m_osc[i]->m_phaseOffsetModel.loadSettings( _this, "phoffset" + is ); m_osc[i]->m_stereoPhaseDetuningModel.loadSettings( _this, "stphdetun" + is ); m_osc[i]->m_waveShapeModel.loadSettings( _this, "wavetype" + is ); m_osc[i]->m_modulationAlgoModel.loadSettings( _this, "modalgo" + QString::number( i+1 ) ); m_osc[i]->m_sampleBuffer->setAudioFile( _this.attribute( "userwavefile" + is ) ); } } QString TripleOscillator::nodeName() const { return( tripleoscillator_plugin_descriptor.name ); } void TripleOscillator::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { Oscillator * oscs_l[NUM_OF_OSCILLATORS]; Oscillator * oscs_r[NUM_OF_OSCILLATORS]; for( int i = NUM_OF_OSCILLATORS - 1; i >= 0; --i ) { // the last oscs needs no sub-oscs... if( i == NUM_OF_OSCILLATORS - 1 ) { oscs_l[i] = new Oscillator( &m_osc[i]->m_waveShapeModel, &m_osc[i]->m_modulationAlgoModel, _n->frequency(), m_osc[i]->m_detuningLeft, m_osc[i]->m_phaseOffsetLeft, m_osc[i]->m_volumeLeft ); oscs_r[i] = new Oscillator( &m_osc[i]->m_waveShapeModel, &m_osc[i]->m_modulationAlgoModel, _n->frequency(), m_osc[i]->m_detuningRight, m_osc[i]->m_phaseOffsetRight, m_osc[i]->m_volumeRight ); } else { oscs_l[i] = new Oscillator( &m_osc[i]->m_waveShapeModel, &m_osc[i]->m_modulationAlgoModel, _n->frequency(), m_osc[i]->m_detuningLeft, m_osc[i]->m_phaseOffsetLeft, m_osc[i]->m_volumeLeft, oscs_l[i + 1] ); oscs_r[i] = new Oscillator( &m_osc[i]->m_waveShapeModel, &m_osc[i]->m_modulationAlgoModel, _n->frequency(), m_osc[i]->m_detuningRight, m_osc[i]->m_phaseOffsetRight, m_osc[i]->m_volumeRight, oscs_r[i + 1] ); } oscs_l[i]->setUserWave( m_osc[i]->m_sampleBuffer ); oscs_r[i]->setUserWave( m_osc[i]->m_sampleBuffer ); } _n->m_pluginData = new oscPtr; static_cast( _n->m_pluginData )->oscLeft = oscs_l[0]; static_cast< oscPtr *>( _n->m_pluginData )->oscRight = oscs_r[0]; } Oscillator * osc_l = static_cast( _n->m_pluginData )->oscLeft; Oscillator * osc_r = static_cast( _n->m_pluginData )->oscRight; const fpp_t frames = _n->framesLeftForCurrentPeriod(); osc_l->update( _working_buffer, frames, 0 ); osc_r->update( _working_buffer, frames, 1 ); applyRelease( _working_buffer, _n ); instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void TripleOscillator::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( static_cast( _n->m_pluginData )->oscLeft ); delete static_cast( static_cast( _n->m_pluginData )->oscRight ); delete static_cast( _n->m_pluginData ); } PluginView * TripleOscillator::instantiateView( QWidget * _parent ) { return new TripleOscillatorView( this, _parent ); } void TripleOscillator::updateAllDetuning() { for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { m_osc[i]->updateDetuningLeft(); m_osc[i]->updateDetuningRight(); } } class TripleOscKnob : public knob { public: TripleOscKnob( QWidget * _parent ) : knob( knobStyled, _parent ) { setFixedSize( 28, 35 ); } }; // 82, 109 TripleOscillatorView::TripleOscillatorView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); const int mod_x = 66; const int mod1_y = 58; const int mod2_y = 75; const int osc_y = 109; const int osc_h = 52; // TODO: clean rewrite using layouts and all that... pixmapButton * pm_osc1_btn = new pixmapButton( this, NULL ); pm_osc1_btn->move( mod_x, mod1_y ); pm_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_active" ) ); pm_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_inactive" ) ); toolTip::add( pm_osc1_btn, tr( "Use phase modulation for " "modulating oscillator 2 with " "oscillator 1" ) ); pixmapButton * am_osc1_btn = new pixmapButton( this, NULL ); am_osc1_btn->move( mod_x + 35, mod1_y ); am_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "am_active" ) ); am_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "am_inactive" ) ); toolTip::add( am_osc1_btn, tr( "Use amplitude modulation for " "modulating oscillator 2 with " "oscillator 1" ) ); pixmapButton * mix_osc1_btn = new pixmapButton( this, NULL ); mix_osc1_btn->move( mod_x + 70, mod1_y ); mix_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_active" ) ); mix_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_inactive" ) ); toolTip::add( mix_osc1_btn, tr( "Mix output of oscillator 1 & 2" ) ); pixmapButton * sync_osc1_btn = new pixmapButton( this, NULL ); sync_osc1_btn->move( mod_x + 105, mod1_y ); sync_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_active" ) ); sync_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_inactive" ) ); toolTip::add( sync_osc1_btn, tr( "Synchronize oscillator 1 with " "oscillator 2" ) ); pixmapButton * fm_osc1_btn = new pixmapButton( this, NULL ); fm_osc1_btn->move( mod_x + 140, mod1_y ); fm_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_active" ) ); fm_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_inactive" ) ); toolTip::add( fm_osc1_btn, tr( "Use frequency modulation for " "modulating oscillator 2 with " "oscillator 1" ) ); m_mod1BtnGrp = new automatableButtonGroup( this ); m_mod1BtnGrp->addButton( pm_osc1_btn ); m_mod1BtnGrp->addButton( am_osc1_btn ); m_mod1BtnGrp->addButton( mix_osc1_btn ); m_mod1BtnGrp->addButton( sync_osc1_btn ); m_mod1BtnGrp->addButton( fm_osc1_btn ); pixmapButton * pm_osc2_btn = new pixmapButton( this, NULL ); pm_osc2_btn->move( mod_x, mod2_y ); pm_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_active" ) ); pm_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_inactive" ) ); toolTip::add( pm_osc2_btn, tr( "Use phase modulation for " "modulating oscillator 3 with " "oscillator 2" ) ); pixmapButton * am_osc2_btn = new pixmapButton( this, NULL ); am_osc2_btn->move( mod_x + 35, mod2_y ); am_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "am_active" ) ); am_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "am_inactive" ) ); toolTip::add( am_osc2_btn, tr( "Use amplitude modulation for " "modulating oscillator 3 with " "oscillator 2" ) ); pixmapButton * mix_osc2_btn = new pixmapButton( this, NULL ); mix_osc2_btn->move( mod_x + 70, mod2_y ); mix_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_active" ) ); mix_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_inactive" ) ); toolTip::add( mix_osc2_btn, tr("Mix output of oscillator 2 & 3" ) ); pixmapButton * sync_osc2_btn = new pixmapButton( this, NULL ); sync_osc2_btn->move( mod_x + 105, mod2_y ); sync_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_active" ) ); sync_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_inactive" ) ); toolTip::add( sync_osc2_btn, tr( "Synchronize oscillator 2 with " "oscillator 3" ) ); pixmapButton * fm_osc2_btn = new pixmapButton( this, NULL ); fm_osc2_btn->move( mod_x + 140, mod2_y ); fm_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_active" ) ); fm_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_inactive" ) ); toolTip::add( fm_osc2_btn, tr( "Use frequency modulation for " "modulating oscillator 3 with " "oscillator 2" ) ); m_mod2BtnGrp = new automatableButtonGroup( this ); m_mod2BtnGrp->addButton( pm_osc2_btn ); m_mod2BtnGrp->addButton( am_osc2_btn ); m_mod2BtnGrp->addButton( mix_osc2_btn ); m_mod2BtnGrp->addButton( sync_osc2_btn ); m_mod2BtnGrp->addButton( fm_osc2_btn ); for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { int knob_y = osc_y + i * osc_h; // setup volume-knob knob * vk = new knob( knobStyled, this ); vk->setVolumeKnob( true ); vk->setFixedSize( 28, 35 ); vk->move( 6, knob_y ); vk->setHintText( tr( "Osc %1 volume:" ).arg( i+1 ) + " ", "%" ); vk->setWhatsThis( tr( "With this knob you can set the volume of " "oscillator %1. When setting a value of 0 the " "oscillator is turned off. Otherwise you can " "hear the oscillator as loud as you set it " "here.").arg( i+1 ) ); // setup panning-knob knob * pk = new TripleOscKnob( this ); pk->move( 35, knob_y ); pk->setHintText( tr("Osc %1 panning:").arg( i + 1 ) + " ", "" ); pk->setWhatsThis( tr( "With this knob you can set the panning of the " "oscillator %1. A value of -100 means 100% " "left and a value of 100 moves oscillator-" "output right.").arg( i+1 ) ); // setup coarse-knob knob * ck = new TripleOscKnob( this ); ck->move( 82, knob_y ); ck->setHintText( tr( "Osc %1 coarse detuning:" ).arg( i + 1 ) + " ", " " + tr( "semitones" ) ); ck->setWhatsThis( tr( "With this knob you can set the coarse detuning of " "oscillator %1. You can detune the oscillator " "12 semitones (1 octave) up and down. This is " "useful for creating sounds with a chord." ). arg( i + 1 ) ); // setup knob for left fine-detuning knob * flk = new TripleOscKnob( this ); flk->move( 111, knob_y ); flk->setHintText( tr( "Osc %1 fine detuning left:" ). arg( i + 1 ) + " ", " " + tr( "cents" ) ); flk->setWhatsThis( tr( "With this knob you can set the fine detuning of " "oscillator %1 for the left channel. The fine-" "detuning is ranged between -100 cents and " "+100 cents. This is useful for creating " "\"fat\" sounds." ).arg( i + 1 ) ); // setup knob for right fine-detuning knob * frk = new TripleOscKnob( this ); frk->move( 140, knob_y ); frk->setHintText( tr( "Osc %1 fine detuning right:" ). arg( i + 1 ) + " ", " " + tr( "cents" ) ); frk->setWhatsThis( tr( "With this knob you can set the fine detuning of " "oscillator %1 for the right channel. The " "fine-detuning is ranged between -100 cents " "and +100 cents. This is useful for creating " "\"fat\" sounds." ).arg( i+1 ) ); // setup phase-offset-knob knob * pok = new TripleOscKnob( this ); pok->move( 188, knob_y ); pok->setHintText( tr( "Osc %1 phase-offset:" ). arg( i + 1 ) + " ", " " + tr( "degrees" ) ); pok->setWhatsThis( tr( "With this knob you can set the phase-offset of " "oscillator %1. That means you can move the " "point within an oscillation where the " "oscillator begins to oscillate. For example " "if you have a sine-wave and have a phase-" "offset of 180 degrees the wave will first go " "down. It's the same with a square-wave." ).arg( i+1 ) ); // setup stereo-phase-detuning-knob knob * spdk = new TripleOscKnob( this ); spdk->move( 217, knob_y ); spdk->setHintText( tr("Osc %1 stereo phase-detuning:" ). arg( i + 1 ) + " ", " " + tr( "degrees" ) ); spdk->setWhatsThis( tr( "With this knob you can set the stereo phase-" "detuning of oscillator %1. The stereo phase-" "detuning specifies the size of the difference " "between the phase-offset of left and right " "channel. This is very good for creating wide " "stereo sounds." ).arg( i+1 ) ); int btn_y = 96 + i * osc_h; pixmapButton * sin_wave_btn = new pixmapButton( this, NULL ); sin_wave_btn->move( 128, btn_y ); sin_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_shape_active" ) ); sin_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_shape_inactive" ) ); toolTip::add( sin_wave_btn, tr( "Use a sine-wave for " "current oscillator." ) ); pixmapButton * triangle_wave_btn = new pixmapButton( this, NULL ); triangle_wave_btn->move( 143, btn_y ); triangle_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "triangle_shape_active" ) ); triangle_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "triangle_shape_inactive" ) ); toolTip::add( triangle_wave_btn, tr( "Use a triangle-wave " "for current oscillator." ) ); pixmapButton * saw_wave_btn = new pixmapButton( this, NULL ); saw_wave_btn->move( 158, btn_y ); saw_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_shape_active" ) ); saw_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_shape_inactive" ) ); toolTip::add( saw_wave_btn, tr( "Use a saw-wave for " "current oscillator." ) ); pixmapButton * sqr_wave_btn = new pixmapButton( this, NULL ); sqr_wave_btn->move( 173, btn_y ); sqr_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "square_shape_active" ) ); sqr_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "square_shape_inactive" ) ); toolTip::add( sqr_wave_btn, tr( "Use a square-wave for " "current oscillator." ) ); pixmapButton * moog_saw_wave_btn = new pixmapButton( this, NULL ); moog_saw_wave_btn->move( 188, btn_y ); moog_saw_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "moog_saw_shape_active" ) ); moog_saw_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "moog_saw_shape_inactive" ) ); toolTip::add( moog_saw_wave_btn, tr( "Use a moog-like saw-wave " "for current oscillator." ) ); pixmapButton * exp_wave_btn = new pixmapButton( this, NULL ); exp_wave_btn->move( 203, btn_y ); exp_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "exp_shape_active" ) ); exp_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "exp_shape_inactive" ) ); toolTip::add( exp_wave_btn, tr( "Use an exponential " "wave for current oscillator." ) ); pixmapButton * white_noise_btn = new pixmapButton( this, NULL ); white_noise_btn->move( 218, btn_y ); white_noise_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "white_noise_shape_active" ) ); white_noise_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "white_noise_shape_inactive" ) ); toolTip::add( white_noise_btn, tr( "Use white-noise for " "current oscillator." ) ); pixmapButton * uwb = new pixmapButton( this, NULL ); uwb->move( 233, btn_y ); uwb->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "usr_shape_active" ) ); uwb->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "usr_shape_inactive" ) ); toolTip::add( uwb, tr( "Use a user-defined " "waveform for current oscillator." ) ); automatableButtonGroup * wsbg = new automatableButtonGroup( this ); wsbg->addButton( sin_wave_btn ); wsbg->addButton( triangle_wave_btn ); wsbg->addButton( saw_wave_btn ); wsbg->addButton( sqr_wave_btn ); wsbg->addButton( moog_saw_wave_btn ); wsbg->addButton( exp_wave_btn ); wsbg->addButton( white_noise_btn ); wsbg->addButton( uwb ); m_oscKnobs[i] = OscillatorKnobs( vk, pk, ck, flk, frk, pok, spdk, uwb, wsbg ); } } TripleOscillatorView::~TripleOscillatorView() { } void TripleOscillatorView::modelChanged() { TripleOscillator * t = castModel(); m_mod1BtnGrp->setModel( &t->m_osc[0]->m_modulationAlgoModel ); m_mod2BtnGrp->setModel( &t->m_osc[1]->m_modulationAlgoModel ); for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { m_oscKnobs[i].m_volKnob->setModel( &t->m_osc[i]->m_volumeModel ); m_oscKnobs[i].m_panKnob->setModel( &t->m_osc[i]->m_panModel ); m_oscKnobs[i].m_coarseKnob->setModel( &t->m_osc[i]->m_coarseModel ); m_oscKnobs[i].m_fineLeftKnob->setModel( &t->m_osc[i]->m_fineLeftModel ); m_oscKnobs[i].m_fineRightKnob->setModel( &t->m_osc[i]->m_fineRightModel ); m_oscKnobs[i].m_phaseOffsetKnob->setModel( &t->m_osc[i]->m_phaseOffsetModel ); m_oscKnobs[i].m_stereoPhaseDetuningKnob->setModel( &t->m_osc[i]->m_stereoPhaseDetuningModel ); m_oscKnobs[i].m_waveShapeBtnGrp->setModel( &t->m_osc[i]->m_waveShapeModel ); connect( m_oscKnobs[i].m_userWaveButton, SIGNAL( doubleClicked() ), t->m_osc[i], SLOT( oscUserDefWaveDblClick() ) ); } } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new TripleOscillator( static_cast( _data ) ); } } #include "moc_TripleOscillator.cxx" lmms-1.1.3/plugins/triple_oscillator/TripleOscillator.h000066400000000000000000000101141247673406200233530ustar00rootroot00000000000000/* * TripleOscillator.h - declaration of class TripleOscillator a powerful * instrument-plugin with 3 oscillators * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _TRIPLE_OSCILLATOR_H #define _TRIPLE_OSCILLATOR_H #include "Instrument.h" #include "InstrumentView.h" #include "Oscillator.h" #include "AutomatableModel.h" class automatableButtonGroup; class knob; class NotePlayHandle; class pixmapButton; class SampleBuffer; const int NUM_OF_OSCILLATORS = 3; class OscillatorObject : public Model { Q_OBJECT public: OscillatorObject( Model * _parent, int _idx ); virtual ~OscillatorObject(); private: FloatModel m_volumeModel; FloatModel m_panModel; FloatModel m_coarseModel; FloatModel m_fineLeftModel; FloatModel m_fineRightModel; FloatModel m_phaseOffsetModel; FloatModel m_stereoPhaseDetuningModel; IntModel m_waveShapeModel; IntModel m_modulationAlgoModel; SampleBuffer* m_sampleBuffer; float m_volumeLeft; float m_volumeRight; // normalized detuning -> x/sampleRate float m_detuningLeft; float m_detuningRight; // normalized offset -> x/360 float m_phaseOffsetLeft; float m_phaseOffsetRight; friend class TripleOscillator; friend class TripleOscillatorView; private slots: void oscUserDefWaveDblClick(); void updateVolume(); void updateDetuningLeft(); void updateDetuningRight(); void updatePhaseOffsetLeft(); void updatePhaseOffsetRight(); } ; class TripleOscillator : public Instrument { Q_OBJECT public: TripleOscillator( InstrumentTrack * _track ); virtual ~TripleOscillator(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const { return( 128 ); } virtual PluginView * instantiateView( QWidget * _parent ); protected slots: void updateAllDetuning(); private: OscillatorObject * m_osc[NUM_OF_OSCILLATORS]; struct oscPtr { Oscillator * oscLeft; Oscillator * oscRight; } ; friend class TripleOscillatorView; } ; class TripleOscillatorView : public InstrumentView { Q_OBJECT public: TripleOscillatorView( Instrument * _instrument, QWidget * _parent ); virtual ~TripleOscillatorView(); private: virtual void modelChanged(); automatableButtonGroup * m_mod1BtnGrp; automatableButtonGroup * m_mod2BtnGrp; struct OscillatorKnobs { OscillatorKnobs( knob * v, knob * p, knob * c, knob * fl, knob * fr, knob * po, knob * spd, pixmapButton * uwb, automatableButtonGroup * wsbg ) : m_volKnob( v ), m_panKnob( p ), m_coarseKnob( c ), m_fineLeftKnob( fl ), m_fineRightKnob( fr ), m_phaseOffsetKnob( po ), m_stereoPhaseDetuningKnob( spd ), m_userWaveButton( uwb ), m_waveShapeBtnGrp( wsbg ) { } OscillatorKnobs() { } knob * m_volKnob; knob * m_panKnob; knob * m_coarseKnob; knob * m_fineLeftKnob; knob * m_fineRightKnob; knob * m_phaseOffsetKnob; knob * m_stereoPhaseDetuningKnob; pixmapButton * m_userWaveButton; automatableButtonGroup * m_waveShapeBtnGrp; } ; OscillatorKnobs m_oscKnobs[NUM_OF_OSCILLATORS]; } ; #endif lmms-1.1.3/plugins/triple_oscillator/am_active.png000066400000000000000000000017351247673406200223560ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME ;zktEXtCommentCreated with GIMPWEIDAT8UKoEFO܇1vC, $E [VױA"$މ,p ۹׾]U,zG==SM D$`:4!Pc, ww#J+873" DjQXlAdɉҴx)M;k"ޭ4/ps @E1‟|ȽbȤf[ V/>l;O Ȍ@ǍTx\"=\"u_Mxykjp-Y!`V3 i.72>]7`\NO8B㈋*a[oF.Sj W&܎y,C&pJD/U  !RrQ%v>Y_Sٺ4%RJ<+Y)hݼ hF/pMU%)v.s|ptY39%T\GZQ!0iqk˾6NP0`XIg5!E*]R*AIB noX\zazOk^G{zN J&$E4B]R5-]<`[Gl ꭻ,wcG/A%yvޯ'MH$g8|hǗkv i6v/YSBx=~t-j+ k0D[yKeqy+ǖNcTy_ۥblZ1H$/IENDB`lmms-1.1.3/plugins/triple_oscillator/am_inactive.png000066400000000000000000000015051247673406200227000ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME;tEXtCommentCreated with GIMPWIDAT8mo@k%(uDh*!q (R% qЏ&)Rpx^mrfwʼf̳W{M+ cuݥA?""zHo;TEhDz6. o`r8j^ TwD ZZ>s>}|({߲Űwy9}lFT D:+t"TNOBfÓCLFUvNX @Ԉ&R@<"% ( _z}᡿JM}ks4e2$Kqȭupe't cnY#MRyD(B<tc|r (89#E)Ic2e)[˄XX1&10@ِ[AkQI8=d>ܦ/ksTQRZboWjg Ul˖ma,Hqݐ BLYdف116&6+NTYTUyz9{g{ϒOޭ{={oiCY\h"jdNgk@Ԙ:9x@Rdz\6 ó +0H%T!oH6S5iµ#4/$v\Gc`rHx$vPsh!l% TkV┒_KwҡlN`F$AD#l$rmTE aD1 DHdl GX(6 nk0C B⾄$L;dM4%jG><(-"7 [<۳= \DzK4Mpqa,V`eXt)FGq3p aXn[1>1RZ̓V JiAk24HkA:iC$ :(ϳ螺q{VccjP#$HS6nuy Y,][6nv* KeLMPf܌+1cY9(ʸz^;.\$*bAD 0qbi6^S*<ug^R@h5:,: $E'od_BHH!qb2ضwnukPyz&ܸ۷'05S@󠔊=B@Jl&%Fr2] ׭qu8u9q~ C9)j Iu,E8܌|6˖bMؼa9~{%\zr *f(@%vmLzSZuMX7BA:G}lwZuwSڽ0KsABb) HH,[;MNJpE|U\yjA`F%‘z w7nZ[xpk  ZY-AZAYI %{>ǑDԚxi+ cŃ[pq9" "gCĒc^g^g0Y gK'AzU2]((])ܺ3}{v-{CCyqLMLFxH(u:58TW_)~o!\tJHs ۿdbB8&F߷oJϽtg]@XA .\A6P>a sȸ.}UJ%+j#֠ƝwZ#UGGFyZ۵7C>t[1](Z-cذn ܻ/]+'•(F*۠kXgg69χ_ 8Hu)dzt^y!=: C=pkÙs099.Jkv0\.Ep 5H)څKضy#n\aF@kƝI@aʛvhπdh@7Nb7f eY3: >2D.d&c}is(=Rj *fH@Ȍ q2dF V !p]ܩ( #%j&Cfhn6k5CzïV ByFZa&}+(nrRK"<$7'1)ybqy9aAtop/}*|T0#! B„l"B.Dz(K)l|kYBW܄W!6 sc W:Xd ܌h%8l&˗cdxnߙDAHZU_j%r9JVjL0S,a1d90O[H[OC=!! \GrNxG o0*Q|<1' r2~??ӳ_<~ Z ?%J][])cdƓopS" HH )d]d/8tl&jBn A "ˌZCX0\'Ith&XHM$H+ݓJE&/e7#34l~('7<ȜMdF#t0^N8R@f23dZKǁᓿxC`$HG9<o*#ȍ_~'16:2+"!yjRΊcG&W#edlg&$! ;m),*dqiEtWH,Y `y ͸͈7H} Fii}Ruwۯ}*JRK@'rGŁ=;bH^4|G;=;rWZZAf`5/?3K%[f1#|A߯A6ltPJzg9!㺐RB)\.vq5ӁpKX,attLccKP,011Ǒse2@Xg@A k}Ѓ@y2J##+Egp4 o;t** ffJE|#0tx" T(P&\.HH)|C-Awq !2#3dkUx!tσ:u̳g[MNƛ:ڈBY֑~&e{(-5#{Q8H[i \ZY 7/V:LqlAq+P-YT,3i !"mbT0~>֕/TO=O~3q.ȾZATlK=.Lz 4A@ie:R`!UfzutlV(.J2&'P,P.ě011@+H@8TPʎl B)3n +UTlzi6d ! 2sDpҌfZV* K"# C?CφX))ޔ$P'RRfA2D:#yaRHdQ1iD3l/9VuZ4tZǮgTJ}!j %iZz\%<? ;ݳNtHk;P}[0 y7K7 3tx* W ЌZGZ\lWf\RaQdrY$H%A¨J+A%KRڍ|x5`jJ " 6cMTոG 峨۟3|ĚF+TExqi*6qiId:u:1JŶB(eҵugkSE:S. ?S\W:0p\7>:;u$Y63HNEK 9b furKf 8)mi q8nO/3V&`}(aN@jQ\jZs]\Z̠&)G2(M[hUܼyۃ+˨&R+8w'mބg՚MhcɢQhfLܙ@\BRl2͆06$sު!¢lݴJ.\FleF6pP-WɎNl:MHV SCc5z"Z1No=9O`êB}}  `mSQC[:ld[Ir bM-R`6;,8d2xFQ 8a Hȴ@HeYST*6ԤU \`"^wuQ?$$M!D:[5\6քfq.4)-T>083.tlqT(G\5': RoKWs&ݵj~ؒEJ$jgcb(۔(ڐ###ػk;6m\WϞǵ21_ a5(W*ygqa@i!6;,}99[NK!CuV"U Phf|Jǿ;|4X| (Ks]Pj3nCEřaN.L]k0&pg|W^ÆkrREYf%r ޳ DXĝITUOϠRB*lڍ=$1˶塚l֭Ɓ{wP,؉Ә)mWCKv*\|wMCI E0G:QJQ6CD> v :L #p~w ?Bƍ?=t_'Ě"=/r[ k|ȺuuITbf?tGD M0_O 2~ \9$Y;xī8r^</W _Ҝc'#"=vnڀa9xL`RI1&1ksiXB1 "^pl۷nB>C|\ɳផ+c劥(+^h9qIcOH4.5kVN-YkD΢!lް vnی3.xJ: 7/06_V8~Uo=0>1dY,^3"g0S,amxKOīg193 R A.Eؽs+ܻ+c'o=) rN xg0aqxX68&J۔% DrheCgQ{9uk^C!m !˸6E|6s.L:9~#^Ie%R9ujqς.0"RP7拊mmJLP+xY2RSDP (Ƿ-"'ZHqO{H Qflr,2#>ITtluw>(0L0nz|F:s΀@:ĭ3.ٱٳ:`Rwt"񦵑6a6% @+W^3/|wlŭqBӓ(t*֮^M`=b6[jLX015+H=mS`mـxqoG&<Á2jiS\}.nD8Ѻ{-8΢ˢz;QSٜ`6CqơzO4&ӎ㈆#!azənaBJĨ8krx›8sJ .\|&!R J8YNME##رe؋|O?N>rf*ȋ :zA]8w8{oȧSSAi۷g 5sqZi'( 29 6 DP^|CGr4& Q5Bb2W9`M&pJ-Zc~EqLOm Hﰠ4C"LѬ`&yQGv7?ځ'&R n$sƍ}JL*{J2t

    {> \AR:ncl tܼ5~aw߭a8hw?ZVuA1g5Ip˖-[g_Uo굛ugܜZ$2pD6EX|)֭YB6p>{Gya4=gR{nB?sn>lԺPΆO<}מC)$v{VzHP$2MhR"alٰ[6oի02</P,Q(QT#8ht#Cp]RWĹq%LOR6G!fKu"YC7'r^(σZ Cw@0f@>o' Jä s̲/$r GGll W˱l @`QM۷qmLOX*VAل 9$̠[C{. fݩgnwv&$xw$?ӳAKpMz(JM"N휺=ӽ۫_fPa%/$؀fvmV•"Y3 %]|EPi=9MѮW֥4b,.Ww1$y<b`>gk-@]?z1MҩkEZEDBMQz5]2A<u~6`wnlD3GPIj.m jl{h^LӪ;kPsB'4=7YwR5qlqIw`n.%m^G)l7qS͂Y@[/^[B}.^[~䃸z:mA'ԩ3ݍrs.&ŋ͘Kяڱ]R`ilعs;>=vpsS_Gz06;ᶄ>4NGpy<`]-O^֯hC||Gq)3PG>'cڏg߃{w&,4^Gƻp곿o :{✺3'{.`Hv6'Ei0<7zLFi="ɧpɧv܎~odpqʱcdxRϜI؞1nǔvo=ߪmvk6|?}Ǐ:GOOii0fUi~Pazx?CC&3ϾfơDIG+_t0SJ|+_ER[wp8؋O<~>//h8O{gR;صӇ?3aMRƦ664<zGdgu;TGs‹W+w<`;y~y#&Z Ńdh!3auNen9]*Ι:H)m'`47*,fԛwΈz(F<S"Oߥ:=^+\E04hu! { F~?&1t7}d0׹a0ת6PX06a<^[xF< BWԿʸ[NY{/y-EN=A=s7[w ].9ܥf3/ uͼDl-,zh%'mp],gIG}H]vq'>}9S~w[7.%:zu@K>N<^dիwI7y~!t`TuUU+Cj _"`j_sO . n~@zè DW^9e@ GU@/5@t5ܚPT+UX<vagyz ԋ1pfO-@͖v{=&ccG?ؼ DSRbk@0pサPid12m%E&h''o[PTp؉!]!E[LAQE-CC&'l{$@#G]|8#$jB7L4ѣO58`P|?k|Qw⡇]d'&7f󠑹Bqq6vi=dooG&&ߵs;>/D\cN`ddR Orh%u63}G>?j|!Ƹ~>/G?˗5h$| @幍MnL!qA^֍'&"@5(##CxAb|c[3/VRyۘΝL\~lU+g†xPXJLڙx d v x ߱4Hg^ 6 , X!&60ݏ3=kQ_h.E=s? B[dq5_k Nu4{Z%e[s[nfIRoՐ à Q3`|jssϛE= ?QhA< g$} }!bۮv׎q | 7FrP+m獽fk͇Sz{{F7A7;g8}ĹS$%CIw"C~A BjR1șэJ@DŽ^*zZpTܹ9A_M>1ǃ}P ?~9ar¹|ӄ߇i]F׼'DN HTaNwD[ 4QEF|`; j:$:JZ:`@H2#)̖!9Dl!"&b+H #D4@؅sWV~tL{l#7 3qD7U5f<AKws ' ]3H_H0h'ր6b#ťRʃ (EҰ H̙Ur qӠ}7>Cy/z1bF6Uv澛Ï?\2G7~oƪ#M5]|I{=?WP-"(=|6~) h]J|>$禟"dr"굼~1%& %]\2d!qFj|'3刈)@kbߚ.@9Z<D̨Vy1HB V-F V`E)4K)bÑx 6Jjf# IQOG&D<@8 ,gOɦ3~i"; Ǒw2T=w« <kh%L18A!هPdAjߠ6 (5d8,8O4TGdܳܠ3(Nnhܫ9tD.t` o` žO߂xD NP}V,Ђ"u_-dj:?UsWS׻u5[RBM- Amjvk:9q1O?>V/ٍq(|0t88OgCu/}<`.zjw?f \ ~f1/cΞgx69r̖N)e٪Da @3sϟ?9$o2ț/> 1)MD! ȴPѪB;QSY5яK__.6gn7f@swcv.7ɹ ߽4%w ͞-gg+‡woj+GCxXx4 k߻z|W|}3ZTU7M/Z0(hvҗ3N͚Tifb ׸mnLjcR1C9fu n}8<)9+ "{j Hl5&h Ŭf$:d|ܚ*`Qgi{0[E8,ÊCpF *nNrvk@嚇lEկXA('qgr ڄ :x4_}ZY"\y|NM6RAO%D5<3«nw?fի)yBDr ¤fpc6Mq%Z~ӟ5 h"<d0aJel @/R CZlбf$:d0W& M֜mŒuphCXh|鯾fnJ2')Gقz&ñ-9Q6gL *%0*&{n0|)Rc|~ncn;id* ukncv[Dg S+) f""'"hfFBĩXH VZRF)dUT|R'ƛG/7glR1sDt>[ B.` F6; IDATu:՟!%xĢ1CI nw6~zɘ/F5j5c]bGz(lN^DcB{*DQm׀N"2^m^#Īm79&8gsҩ.HR4"A1g!"S'UcfhVҀr<DR\- 2c-2x.)$AB`Z5Qʹ}>tWmaM8ZF/ga"2ymNusv kְRԍ8%}0옢)c2-Jj=9233aIRܡ BxmddވFq"fni9\3 E8;A)!\NVm'1c:9~daBv$HiOiAi V CF Dp$\"he R!$p )SsW>gKX5X htBT/ gKp_a ŽMɉS5SZQ+UB5 36mvV^YBW"9q+4H+98R ni?"ӈ^* ץNi5>SbYY(@vpiJ) @RP±rR A( M0hB@HnDb01u8fetAPD B^CsVSs't/R M^d &n(E15= NcuDbtb(ܣn[8v@J%nk&cʦBĩj1j2fP0p!XG+LJXBH H!! )$#!! KQMTlQbU]qY@zL@)P((Idi: ͑*z&sU7T܃6)J)+T i3Pi h\ޣ#, Y{Gͱ"Dʑ6` h$aN&k/+-×ᄒ i 7"CpDvb6Xo8'P5OG1)ic&qѺpanN}@ֆ*H88Ҽsص}ݻ ֬\v^9Sg΢V8! fk+i^)CWYq! G1wlžnu;~ Nf4|{G)hQDwTx! hq$l?WvfD`1E^%B!pD6cx= 0{XHx"˜$2 iu{t':REh&4D*ڍc"i=9JC\^e,,ܶo1kH8u٫@|&iӸ;Ml܊}z;kq앓8uMhBY(ek2pt,p2#tP(%dNƅ㘿=vD!H@CRj粇;8 5[7f}:A8+'>?3 cc9ຄlo/tY^1U1CI:p}4n6xP*@+(G'qad}Wh{7i_SpRp\n#?w?H튈c)ڱtpE;F"9"pґY-x;j\GڹqpmRMFG/"hFp;pj/"ڹ #q:c,UJpK䡶帎: ®HDݸHGH26)$4{e5ċxAM #[q;̜ýH8 #7Y^G␉vDcDd9<*HW2d"%xMLH#alfNE[Lo8Of=>\>k0I6Vɟ ;Wrl5Y#ah(g92v Ҧ.:#z up{M&f׀0( 7X&Mi>|c߇\>oo;0u#[#ڶ5!E^_`Jݹm!^$nf+H*B@;wnmHFi4lĮ[!DB #W8xLKH&L?{gWu݋Ό@Bh*F\ 0`6v%n/ω[\Ʀؘj-ngjT5(̨K3gcsϽsH" 0{{kE6B3nX{$5sJRP=3D=)3/<" cjT/fϜn#,.6- ٟ?.a61/(S 84ϬQ$\;E~@ոHTS=BPdf\=dSPJ5(fjUfQ:e/76 $6I\0g6jBug׺`l+~@knPo#Ծg5H^0rRHfM -ۡlA$E9̆_FE/oٖ9E2 ]?¦guxDxN7'`KW{p9ޔuP VB(Ԛ'/٘?(JX|~LjwA|sw3L8$TS2eDXBH3|'!ż3Gyx( TqI8FBo"NB*/ -ZAGнVF {lP@6fT6M>MJcÆ(LǨzacJasmKb+o(Ty]/lfvD%)R1 &&|үc}>K m8(r:( ]=1Ru;9xch"SMa'0 C,nwuG e?Gq]zk&?5NeiؙTŽN~g= w9*9|jeҰ1|j;p-x\*bq0VJR9Jm3MMJ+Ĉ  O>* PO>$>fT$xHUTm3hTgӫL*#mU^)i.SSD Ld͑&lȌ9dDNBXv]jBG LM (sޘV Ykl^oN1H_̺HCu$̒fRH9XlX{$Xz-tn6b%bi4yի_I}sB60%(mFYk}F MPo4HjJVX3J5kl>z$5PZaÆjZ3;WqBXW{gY,!f>QW2я~KtuuC*#´C,&)B׏ <ϑQ. վDao~Ktu4KОPЎ-Y30'`/PJ{ئc-|d|ZcGofpQ\9e8?eR:*ϡ#ʔ5c4*.•C8jUU5{xmRmRKۤ-&0aTe%t9yqW9"5Up&֫udYcL*k}顇ŢG|j:WZzq\ȭ۶#$2&w"Lt }Z8GN7/vZE.3ỹŗ%Њ}xH0TnہLF0Ql.Y|-z/C^u~NYc+B{ݺsrz\`:FUB:ngT'U/yhgزm;,+"4Ëѥ&߼Z%A}xAJ!FF3w msC8N^܀;z1szjG?y 0=/z}Y? ^XUYO~ihfTsh[VYOئ!ls`X/ +:|^y>h44eTC'SDI رsgfz쥨iBd.|G }xGXT6bUBQNG_fe21fڲˤoV?{7|+:)Kf"zX0Pb-돘5R M"݇,uUBYo%Xy_: DYo8ryxTP=-emeX̳L5W6N:|Wzfŝ}|rW!8l9\$KnSjz- {^b_O֙)4x9u`&彭N;BKv]P|'e\lAZt@DHlԀZi#_kgT]|ݯ\g [ÆYBL#G k'4BxӊvJ,xkf ޸ %9N҆s4k-@J Fu^UXO;Q:H_J7KPR֦{kTSiaGb l9>W0.*5F V5̐V4/؇CX5EG]FrAR*U1P0N GiT>Jh%xs|Q-8Ǖc14)I BU0-~{봑',=P6 cFu,=l=*WIM54+:4SSff$DaL#}.]s@{8ΡCNވ׮֞o׏0a#a @ W30>BBG0]t &MOmwa1Gaiׯ\o;ơxYw$ً;{p‚yhoo(aC7n歘9.>/c֭ ןKr!ήS\¸W:waL<٪k֬O<풚ݹw~/l݂+?p& _:,^ ր&5.|\qe X̘~<~>U?rKidܧٴMbf\Ï,oC;w)eQr݌zٴ"7]|{!ѻs^<(owG/nXdx9c:c_ 41>y}8q&@;ťx!˛` vna!_?<0^1e2;t<ȕq=o",]>ऽO]1-߹Ï!=,᠃'7m VsXr5M;]%|~+Z V5>RaS.gv ?P|_EUS@={W{6; 9֬3_%JMBź^}(fFz6lބ~w0/;O V07Er#IphkƞM$accF|s9z[Ë}fyk#@ttk#ݻZ}xeEKo:o!.[>#.Ngd?4sb /Ǵ$>{x[/¢E{}۝o y睍wmxG^YyNلn/>t%*.|{0s]x[/AWw.}xi`p!\bKò_,qOe.%C:{.6lƒeEc~B _ym_'@?"+DhƆn|_Ǯě sQu q‚yƗWo$tx)dhK-v p‚ymmN]δzF25́`J/f“OHOguq,CWW.y,ĸL4{tņ};qg>iFWW+ׁۅ\Y3fN4ׇ'Xъ1yDLzI2TkF2|'ٵ}gFݗ?{?}KػgOSԹJR{\i;Zr2~F<7q Ǝ7F[y(6)֮[>)L1O?2)Hg t '|h(v6yzxT*غe+z{p-c|GL8ܫR|睃o=_g-_b%2̤TsJUt phs1s&>|KWc۶wXT*zB V#Plټ-0ƌ0l&&,& m^ vZd>s9GWW𥫱m6V!F ``͸/ݢE/|{W2}ԑz+{*F ୀ8 CJ[;-%m>E_@h сɓI.3bpp[սYgs3vŵ|G}$W߽3Ϭ_|# ,y])3!>زm{¾]}K Qlٲ O|GyQ3mX/~ڃ|i!nj1^?>GWZ|'7_~:W{w$57ⷿcToɮƮC`׼ }~}>`ΕKAE{7Yc5ħ?y%nZ|wcl&uec}|^nz~/hkXxC}$[跿- 8;寗K~exHuDM 5ioU/hv9k_/pWXr"hp)4.-ڃIQYa>B䑊ƺtG>ԯo>WJ8j/3#w_r4%Ae/-Q!XfP$m?pb {!M e gKPVZAheu-Xf$B0Hk!*Uok'siBFi_a4/uKZM *kGҁ\V:K MLD9Kt7RjPZdeT-+±#HUQ̸<Vrر"Rt*3-D~I"?UvJqԡJߴw7s_Ǐ-}]၇WZ5{w9"/G63w;? Z,FeQnp!"ɼotF/"~9F hP9ؕPcQ:ӷg dNmcc]Fwmߏd˺Mi3CAm};NBf1_Z_l,}}OzaFj45iZ |,DfFߴkSlrەNodП+ܱYAkhi>~SO"!UHB* !azi0>mCw4{+epƕbe\g(YSHR%׋?k Cڂ` R [4yX0qik'CUdy? : Axkc1m hLMhT%yx pQ k|@od-O5MmCt#+bA'=? s@F/{:emx0xg;yidVRqI_PFc_#>dDa#YJv?0ۛIsV*{)QpZd5vM%Ew@qDzuxkL+^?>y(MTV-J َᕘ7iظw.]}}7u? _sښfQjC]2Lڇ0&Qh]Z5pJa*K@[Gqa^ƍ¹'QX'u{W@?<?$rk0w2v&$klݾ|xj[V5%.!bG(Ոꓜ4ò7I \3фYOTM&iu.hj73^z$|7O4!N!YA*6܅Y `snd :#ǗwdޏMq<h +[wp~ӏ8$itHGL$Bi#_==F `DVD8Q.?M;t.L >y6<75U=5;JbcaDgʑY!V )M'CNDfꠅQ P9$k55*ZC*X 鲂sӓ 6LG/0)Jc}Q5JGYY&(&#ƛsT)<#ޮ?!Ѹ3="ZԹE,\b'鏱?A":vR8-1}ƛWFj}C6gE#D/Fvs͉)xd 3ZӎY|9^qLDl"L' .m0˽q] qpK ]&EFo ܅g\ӋBdU4LAa-k:YsɠAvRmS ihH͋0>I"OG˲5r*$;vp37Z{P #{Y3cqagzG}BeZY4C /3\|m_F'<:4*F0.dn@+5$`x>+Cg mg1cn;%_ - ҼZaE\$Wry&BdH!!"dʤBYQ @=o>J) dV$U50s@XN 1HD/Q_ک)|ik7e/X F:b/!1DmHC6 bEEc)i%ji%h5lʔ+[n}AXϊ҉x]$Yaq% CR+4{!%ZÀ"(p텛uˆ,(5^k֑K55C8 d``ĩrc8砆:uY8i$ÓR&f C=Ck7lP'c3k$Y{|&C48t1fiTv*r?IZr{*POx˨4s"ũiYf)13Oٝ4 وпw6 ܪϚ,p~H*xBJHAf滁9dav;Y)ΦkLBn$/Pevlڟ;`(V8璩0”h4E,Q>Tnf)Y"3{Hd/i3 ܌z&Q1dkS)Ȳ*)VY~{Yg -m!*O¨~5N{"9^Ή4'S-dȲ YysgoZ0_OXZEPyU͡ʕlF#I jrܪ;ZCYǩi_ŵ\|0WC |@k"U@Hftbќt+gM-yD#UpFZ#*U(ʌJN$={Tx[k̤e9WTR NR"T2NI=ɱ.n !,l")*iOqx̜1 2x;Pg% R.}8M}N" !^ikio|=:okv2kz!ęD%2yfVig~jc ̜> R _,{BNNJata`~piFp/BPkJ#rD:a#E&b$@ ӪRi >뻺E$1"ỹVAH,doӰO)dFYsN sK +d Y YlMQpDU"”oln<Tc3 |Lf2CUe,7!uP|[:Vo"!I ̀ ;cڽ-l($*P TʉfNX^sxS!LnJK#5DEbiC2kgiFC2s #wkjAg~!pN9v&vӦ|K̜6)@ *d8($̆ψ/<3$$X!x>.\0IPqd$@$ 3fL-߆ySM4g"x2A ČtLYބ`r8BS%[,d!JQBY3I%mM%6-sY{T2,sgͬavp,s@kp㇒CpIZ| (e?'t96ntؘpc^;wNgq4*,š(9$}: ~f4B6PB&KS>NIpy 7kV'P8ɩHOfς$I| 3dbS! )2HaޜÜ;3nAD aVeIs;MtL CNf %C'M SjMc j,ª)LjaF%dKdxn LQ,Lq$<9ˆH2*LNB$dhDtС\O'FYb JfX1ZL#jF>Ǐ$P:Ts8Q%loC+no  fȖ98)-IKł'M<:AuR9JHcfd^rh:FATME&=#zM{cKxս} "|!`aV98ϱbЅuC 銕kl=`J{C[b3eʵJ\vӸFlXDu!NTDø+VkDWZme&߻&0 b9\V^cX#fښѠ;x^8r*15$%"r!WWab3pR)b՚4߀#u3#fD0m:8Kqa:0%:G4g{>maC8-̏^ϴd??kt V Ϯ}Ɛk0I f[m.[r :o!+a` Ys]3 mg\-]6[,Ę4xuĬ3$ 0׍2Pi㙵l./8z3p(LHCڵ`^X)]gF5)`_c`6k ÛN ϔ]PT,A!p>hfaiu{ s ~&]O6M0Pd 53zvc挩 Z)7JCVih5ZNdNFPj}Z{64TYCi]Ѕk|!UfA4AwF1*\Nּ3Mξ]1#bQՓ8U F ,IV7~oӽѤ){DmD00ixQ v2D$BvmwBJɓ'&<ˉz-zt),}y5\ZIYJ'8mw`vй620lqd55J@ضc'd&g^-^%KG^BWŗJ*ڄPm[&J._bɲǑGLoVORC]jgK=a.ؤ}\"$ih2ηbd,2ibW؃=p/⥏%< P\3Z0 K3%;gν*p|S!X;{{1sԔWârmTZ$0%-2w`= ,}T }F|q4+_6o_?oxcՠH f8WKw8>5V FAE IDAT|嶀F)mhg$6#hCv8CE˱C)}yer'w`g_/:Or.]n&t3|w%7_ab 뻰sg/fΜ|+'~_G:0`a0ϕ/ R**}tEWpY)1AW.>sfw`WF\k>_YoNQm\gaawtc洩奱C@TU`[)ط0.j؍Țė+Sh,έDڏzcÒe%ĉT#@ҨܲQj^{ ̪RUÜX}zN~Y&!e%*0%sR~ze(J^VZi^ГB9 3";1Ҫ+)c. R'SԖh>v:nAvaZmH!BHԴؼah*n6fs؋e|iOWV_|c kZK.s{{p?W8Iھl#pT83qeÆn,^So%j[&n9_o.;qeׅ-oa^y}xѥ%NQru ߗpgo&ۻ GxL)(W/{XؓI"S7;d"*p-8zѸ KxbG0p\7\v;{qÒ%Kc9dy@p_zO<4kH!?-Z)7b.<_|{ |[ _Pz2c:g#n>2:4\r8̟7~ ذ s;[jͳ8c/~_װjJ[qfN:. &k U+OM N8Sqo參\yz Ǡp*`[6l޸sTeްw ,CdA~kf3QaXhmvl޸wb͸{|0pm]%.@c(\v7`Llٌ)Y 3N%Kq 7/g-<\r!/{DtWW\ w,6o܄N?T\|yXx96o܌;/ a mo^Yخ#̦Mq=C|>O: ؃]w݇\rz6n?8'x#rdJແڵZL=5}&2 z8֭{?qo~H[{Ignv<eqYx)ŗUhkoGww0"x\ `I Č/v+.'?QYktwoׯvڕVM1Ivڷn C?6Lt TD#lYftvN 0`u۶@DvNbEmd[wG|##8O 4RƮ=&V]i~<W~SG ]%pCWN_\Ka$@9vN/n',Zg_3¾Q6 ^ǻyyjiկ:*ϱow)| ƫۇn bP{;d<եgVaʲL"S5Za rõ~WX#|^*4rP`8ʮd]k34z[V!/Z\n6zk!`jR M|Qz egw8Gw-r[L&& 5s Rg`[4BI^YW]?h>p` ԅ -0I߭ѱ(GgVaR3޿0i?u(#^أh00,$}t6v4 Nͷz|Sg3[6pPD!-BA<B<~VjI,_/75?dwzc^[q9ʯص<8`_|d R{ɯw\Hm .4~ t5׃˵寗Z8+VH94ԔxKtТ.'=/ǎ8G*hY (𭘵M?l* ־n)o heEl}_la/rvvv R+|ڬ,3h`!am 8̫`Vf@M}6pg[:;y?-՝eZ@.+I[kf)6ZZH0I/kO=Rjt)"ڐ6(Y$2C* J2ڱ6^w_"Ww~'^L #ͫ%CǕiSn\G[ͽp;k 73v.G63w? $\J.ž`jfnTջ>?q5xЃD$dG:{s߱+acǏE5@Oٺ Z+?Fxs. G2*x4fa/uݛ?h5;qmL а%EoN8>Y/o5,9vƕ+vz Mn>tډ8~!AI̟8K܋,7m$Z*"˫jB~R Pcن.z mQO1OZ aQd<_cg\ z-TRW ِ5H)|oa xGVr""!uaR9 B*xt;j<޴w/Z647yg Ф[:~*TѽT_*T6=&xBYw?8y.L<tP:fv7CH06Pхiц9 :ZP;uCtJOJءgf]X0qxLPZ4ʰMf-D]eT5 5g8$=ԯo3 L5AN!YA*6܅Y At3G/= ȼzwcya57ОAØ6h^+:rX㱏2 0q}IC_#5`|,mabHhI*Ξߵ{BPj [*h%5L 703g\77YM4df&E{7/+ kaҐ2t*`MZV6mcˊI:3LfcD6ilfNKl'hdJA' 3U]H\EVDV7r廿I|sGYr~^D@Ч0k5dF-Y-`r LUp>l澒z[A3HA+Xߦ!mw)B听AVg!TS`MgP u IZ6[)c9ڸ?7mZq"XqƎhvzoHef3\SƇ-t[u(̒!#/_aTh |(T,Qܧ ӈ6,6Q{hUW{h o1ޚ񭛋-/1>HH@hى#lp2sx{;9lChC\OqWHJREY0NB%Th) Y xd6JNwٵIkfhqzنrL]i9|SDHh4j(i%0Fs(eEoڌa" i=3%L{DPcF[+P$V69eBj.e2ehneƑ$0j S۩a <.\}3,RD2Z oYa~@ {h^Ecn$zV&s0dI[uq Lj S3Ӻ Ç3kNB"ӥϼS>~9?'] i >hTuGK,[4I&`D4!idji4;UFCN`%{Sz9O*u3AУѦٗw34H:aPWQM1FDL2"0HtsVФͣG2#v7 IB|gsMj`:C`Q"1Z_/7_ST66[2o= C{QZ|%`r4.C-}`Rey #Z u0MƱGf{n̍ƌ6garox[X.%ZC+ ̈́0-+y;Ϫ_v|R@0#=NTliC)m&tBC,֩ՉK"b$ s 1NF|-OW\$:- !d]ZRoF kro)L!+MM+EIθ&Ci`, $'Ȣ 5tHPyHUQݍC i! >"82 :WP7S‡/ĹEҜ])G)\l(#|912Y0Gk$( Q\5[8Z !N"ôR$IsոLK 7mU烳bDY{%EN UcZ5ěȡ *Ф%g4OaZZ8F]oYHf8#A"#32H)>f fwNǂysp]=xXf-6 ϽmPZuA%uL " - ys1Ճ'^Uk֢^vq0KKFR6܈zNTD`<0 $asmՐ`, JK Tʨ*7.͖,26$dz59`uIb2Lc fϪgע/Ï_6|T p!Z V5⏹XC(r@97s5Æ|Qp^RfYb0..l"OO@^"ȫU_+ƒ4$ ) eKɏK' ESh I! h4MtB2A|@c-6UkLF(Rn-iu JK:\J ¹)(Z[V O\n{ #Y{ )Vq*-L,NkC\.'4軯9~D!W1{{8f7O]bRE 6BVD~(F' +C>dD^LF*PVq zg}Ω3' hE/盄 QXj2y^3($ S&Oa)ajX KL3xH.wk0!?+T\W4 OMDBUjNlZ]4º?Ȕ*`7R5qI +袑ގxb .(H{~`:=h hG#Ñ;|='Yy?Ԭ(*AZ4I-(82MGe^]T&|G ⃁)< J? . xCv#a ҍa+S¦z6u>J0` dK$ ["P")^EYG ࠲NAPAc/B3_ǃ.k3&r]MSP#@";\Y=]1geUQƉO+#D> H[zy]k✉ۘni*29WH $DA1k0L[,ytE}ZP6"K2K:ݢ6o2x"]_@+>t]D: DLF/456R'䤳Fnv/y]tj-Fm7%LzP\-Ӟ7%߀_-[C3TşIASȸ(IX`!JaOn{!Fe56m&!` N3Q zRc4e[PFVE WavrHI QaƯH1@nߤe$Lek+X! 䖓NBr]sf&F QiS4EL [8}WΔ+[j:J`('B bq6ch=|ħhFTm|SsxIQUX}:A(@G2(+oH֕._-*7HĔcU؉8vDN6/^ s*7U# ;u"BD!B1( mwG-"vS^\6J|iT g Dل\Q#U)_S3v֣~^t;.'wXX!6L[R Efh*NzUw ɮ"m_8c)ݤXf>e)ENe36\ԛm'&_9e$^FE ]e0zJRj{dBf* =YQ<,@VG|#wٕ"F 哚@Byy5ts d1'MƍQdqf1w0έMWjp! d`4#LHa3`"`L TOhv;Yq iWay||=$Uƌ j8h 7RإLWmt{Gt>ӴU#:@x4FzuedćH pzZsHpc\p;>¦")SFlOYf;OZX"!Lcmp<}[Mvp#z. `4d zE D١ +T)K(LqP_z%bweҬfBLB &盉TX/xV_IByd7eĺQ.B,T/*Lu=-Ó솘=mJUwb BP7Uʒгd@[ 7| RDm)tmkQVtb;) D",[%Wqޅx53g6F@* 9LjĄXtq?ٹsf:{H[6۶m܈I0@1'WEi8̞5֣8j/^Xx0Ю^w8sk=C>b[;qYߗiVyǿa!%QeWL [Au"ٳgbyc46mF1򧔻]f8@ 8w[ :iH&gOf#6m|u߮εiڵϣ*'8wb 9W] =e2G;o܊#LL[`=W݋8/0 ށaCPe0r\{Y(oxO y{sܴKd_y:v ZZhBL2̟?5B3ru;G㋴!8`Zs9iG8`I'P"L0} DruP#r-M-xvewǎs+Ԍ~d Sq.{maM;d*:h 4[s0mT̟w*`ؐ!X DQh2W\1 4Bz”RӺ0n45c{70/W_͒k7 ̺bYKt[DH^--`ݺp7nWoabΜ8X|9H75f[20cT)ԉ->.(!^ЩlGwPUUsP]5[’%Z=t( ?MZcq t@>y] ,-gQ&M}%Wn.(O_|!^~y_(J$^/w>,+]uP =VK~ ϜQ'^!CNCzL;֬Y-[jpӇP[ogĚ5/GV5lVy]u?]3@ p.z9WU=Qq5ݥ+c4"b:ir9Y,8xv< ƫ %_ԁjxk0ti#d[x&nڟ7b?gcJpۭ7ap%׿~ѻ3|u#*"%X!=gxaժ8b6n|[6oAg19 -Jǎ)F . NDiVh5u+zY"c+{g؁3sFE::C0Toc DSKCqʩ'_~ȴ]<a&%{ؔwvta&܅8EE# -AMnMZ8z(_B[}N(7_t/W <ۇVؼ6FUU[ŏ9g |1pαy8;Q ǏPL%o\pz)߿25AN lڌ/z .' hr%%٭qLuؠ%̺b!yfLZiq6\gu&ً|gA10 ўi&8zb{QZ݅Çk(@%7n̙+@[w7ͷ܉yf-[sqMyB#Ԃ?O0e U%hGܺ'޳7|IWTV髨'f!V^wWos'~Xt%>33Gol%.O۰bXt3]zJEFhϲ|lXbg2XnSˮyCգ_0AѹvuJvR)0`/|{~/QФY2"]Ҥ}z7wxh Y,"J#Dö{#9$=܃9?ee~@ʈ7 7 !ѳ3Y"Ð5 \D||nVķ-2sbix? $Ʌi~t~z|Khl.yA2QJ ?~d4ܼb.(I CGz T'(|yМO>>NL f5=7<|ם`b pIENDB`lmms-1.1.3/plugins/triple_oscillator/exp_shape_active.png000066400000000000000000000010441247673406200237260ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME|VIDAT(EOTQ.6F)A;)PZXkKbKBĄFv {̱x N5|'gαgGzO $A#9N8?53t00f6V3HH"BW[V 5)"oL k  RL:i)jFA#i fa7hJOt܃ BBMKerqjVBSjF1X.9L.ε\ oY(KR(%Sk! ȵCX޽l},w%YO-WiL6r6g'?a9YmŃ?=|I}R-5_~|ezO^`4L߽=W(=hU!zUBP?k;T mAIܫ7323rQ_+"&8|ӗéKQ^`EAf mt4EIENDB`lmms-1.1.3/plugins/triple_oscillator/fm_active.png000066400000000000000000000016441247673406200223620ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME wtEXtCommentCreated with GIMPW IDAT8eoEk#Nq8G Hs K L$mwwHUz]U'a:b  uwG J=!mtݹZ.fSZ-@qFQ`yekK]v dh 5ӥ-Ñ ` Tzοb]Ͼyා$Z' FޠT'ݑm^O9]Nw>xaٌ8' ( +wa& ` B R')`~I? 9iq5%cj> ?ɛuLʙ0I*Wt y+`g=U᝟Oj^/Vt|%gjIt9rtS29  :o7/o- T+͊p(W3_ >3V J\j8#2,L6;d5ט;$\!ī Vg/!JNXxXΣ>JsF U $r%\EH",/?/)A-peO3Y0c4߂ qlE$7%LVK#R$c-ܙ1h>8۵P~L@1z; (;2bi218Xm$xu_.PE{ 5abBnN$} ZʴIENDB`lmms-1.1.3/plugins/triple_oscillator/fm_inactive.png000066400000000000000000000014051247673406200227040ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME etEXtCommentCreated with GIMPWmIDAT8mMo0nvSD+ *h9 ?Us u[n6x8q>ĞwF^^a wn7t壨*9TǹWotsno[ W8y=BqVM{\P{"x߾vw E ǏxE\޽JgE1A3*6qH&MG>`mEY.ٺs CSDHG(F"-xIF>!d%EQX#'U:[9KIdl=g<3683f0& CX,@9ZݭV眫!az?=k:?svwFdy}#$q&ht`ybBxc~ǢD$Mv 9jR)r\ˡi h$Db##vOWO7N:= L6!=T˥|N#ƀiLӘ[1;^u`1œ.qMeр/(ΛcXpϸ,@iz}~ ¡P(BB>iTH$$ICnȑp4` KWi44 $HLS zYA@ œ@\\(K߷ryуkMhT>?|7Yg0Q(L2dLhYsW Bbm~)jM{Sti4 @#~{Ĩ nd! 0P"12ddX8[?wN/L7[pᳯiJ:(S2u8BadT"ADv$:&󺜢D<oIiijd]g/^O`蚽iQLBЀholCidc Lq~is "禬lhjw8_l[}ܜ GZE(3$O`=KÄ4s K4Аrx_?urLk3n|Lzz '€iƀ 3w by $B<[盪+J 7 /"{JZa]HB  Q<ƀ@a` #6P bԙCΙ1vK_x@_\5RͲ5@c ha0clF6==qr/?xyFzz_o>g_h0k(ХWm 9&@muzlDQ\.eX D2CʼnSR܂ڐ(frؗ;aŞzskfq+>9rW7 4z?=я0w_YZWyg˴in|{l>u $3v#@N~3jS_ Aղ)_.i"IKc ?g4z֠mv[m:7o{ZNq ގ6e{oɪ[#%?{\(64cJ`?}J%}[ t7}6s>-b/38j24Mɚ>РA$I !$IESgwvk@)u$wbP1McܑGg7b>}sʗ>M4 z:T;oYj?CϼiƬveaE||"~Xb֖fU9ryCíx$H(ZiaA^zfzJPD؁}מۗn4gr9n*.y$ӋG;TZ9y柟 Ɔ:c e2<6k ׬Z9ԙ37ytdd\xgĦYjoȉ-|- CHR!_ 9Ory`MY3KV.]R;u6}q=^77//Ϙ4rѳy0ΫmXv{+%O@uts9\Cڒ녵3?z#Y<z`f"L~cn|0O4YB| !X$1pԶVQVE"'_|udms \_,YMFh݉{(ʫiN~a'^>=ӝ$@GLy5ϯ/|3tƼph_jYS5{smv뙗g UO_Q #FH)')BId* #,1> srdgϬԦOnϱeQUNMQ. 'wj:m>iX}vy|hͽj|ێge[˜ًo8\Fw;b0a20$0 14=p|{wqvUieykW?-?tV.{w96أX3.Naq!z/)*ʺ~VO *\r[9ƞniYQ՝=7}ɓݙ'pc.0` ,ⲡ:}ǡ+Nobńޫ}᱇rӿ㙁aG߄ oAuN݌qY:;bSY{;yJ3|•+YYL%Np\_(T"3C oݐfN,6WeK8 _{)]k:!_C5i[8bf}b#E*}u6zxR-w[Da/y!y\.{U\$@>nzv"L|TʴB61eJn UmE1 J04`,іăO~kK UI,c!(ƣkB.*}Q^ܶ )u9zTطfNR8WF%8C+`$zчSOiI깔Gxz݂5ܺswkWqYi͗/jʊkk&88dq-Y~zT!i<@f$A"PD`Wo K$ J&I$%''@2HI&gqBd1 P$b4MP IP L= `LB4[?sjrrs3{Rz 0|#}WλZMX<' 8q$EhBDx<OA;!i[Á. JRJb1q27}0L ?{R˦335mWHmP$"Tr,0M4i"3=nbFׄ#A`@`~+hF+xbd""$`  S^/`0HMjIlqjZ=X"i`}f0ǫ+KZZ[sfd"@ɝ{4vBh?yςz{iȔ`&1/I%YI"#f1* D1lͤ)Ȓ/ID ؀B1"A@Aa2b 9,R- f2~s2ib=M@=XR^i?ÿg؜NK!*lVI 3Wyz╫>l2,EL d3<\&Av:ܜp8 |\ 3:ddP4 2}v[;afC|:I%FRۆךoJɎ l۹ky i~IQ6bwewMb afxJLy p565Z0y̓5:REl|~v]ys+m-PJO2F5VTlyP7Mo4kXКյA%".@c` qvCme*,>xP ƆNwD3ir‰Hu#M"׮ZYto%N DOW!@SM FG"~'1c0?;[Q^RXMM .$~36Nu&`.hף Uri&U|ÏuVEzF]WL&}4Xd]e_`eJJugvn SW(3 sSGFU&+/}r9o}YaAk|zR㍧?uz{UsKGYT0^ޑO*7lK׮ wͩ1n=}}N"B (+*ҖeB~,O.He.&ݒY0-W~٭hn:Y[-kR9'])U*CnoQ4XN` >v8B+hA 1T)>Y!JNC҇ 8}ʟ N~-`hPY}jbR sjcC]hԀ"$f vޭdzlF^>pyQA؉W-i͆qUMwt")@ݽuLF0IZ915rNnz ^4Foڶc6 ";"!S$ UX $x ~w;9.MHGB Hi55kWʴX,7yw۶ZY}VS(@ hL@&0M#c&H$Nl,&I*7IK-Te.sMMݽp8#p4IѱQF`#Hy<^N'=cZnEyyZv_^ya9K3gnciJx1 /> aLZ|T6_"ŊGŢeYqpp]n/ }>W,d2X!|n(;ꆷ%e%+K2"`( 'iƘo-k5x~qB$" Qd9f Apl\ڪن啚V,+),L(r)p86h4b1uXQh%kX u1 0 Fh(;h1 wƚ=Fh@9n /o-+IENDB`lmms-1.1.3/plugins/triple_oscillator/mix_active.png000066400000000000000000000017731247673406200225600ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIMEtEXtCommentCreated with GIMPWcIDAT8MoTU?Λ̴0 BM1qΥ9W\ۨ$R6XNKλs\;}yy__y-xM H^CT $+"pq77.;m£ހM,D+d]2./̪ z9#,8G HG0ys KSFr>+o>ge~'Onqi6 "#)auWjǯUH%Dfbe{_Ey5.%"^.+Y&`f{E v?ƻiW*ArqFܡl2]锓?9!ҋsH!ׄdxl@nxMsiMx %,ȸfhF/%H K LbڢFFT#*)n#*ӫ:\[%tD&ERJF._eϯ+o9 4'jx4IqSNo<-TEeoO3N3di'7R͜61[yDλY'A#h{ڶh<֦{5F! deRyNUsʻj"߿pmZ;7ۼL{**v$jP7OLck=1W$U%I*T*p-Yk퐋lyܼTRw<Ѵֺ⌙5vy*M1QrN9^&H@L{*RQ<N2)pt.r缬5IENDB`lmms-1.1.3/plugins/triple_oscillator/moog_saw_shape_active.png000066400000000000000000000010611247673406200247440ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIMEFKIDAT(==nTQ ?wDh""$DA_4!" YR4DPA !^Pts|cؼ)x ܉*a{G#2ua@#fJ @"=wBJ tԳ| DN3+ s( IaU X<`qݱV9-AK78 ZZj)5JRP;9FHEn>܋TUBZIHf.^aWZ+[9XSBhSXfD`r&ΉkT M=<{Lf|}{߽$$a.ΥorxD';<ҩ~Di+X>uvf SD+2{ w1ݵ{G[(!U'|a p&IENDB`lmms-1.1.3/plugins/triple_oscillator/moog_saw_shape_inactive.png000066400000000000000000000007701247673406200253010ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME"pIDAT(MkAr,."Bbayl#m3V*xR8k <j0fmMR$FE J!B9?;cRxBJ PB.d:aA$v߿tP miJK[5w66aؗ&" ]"DDQi|AۏCA?B6wwh۸ff9;9 v^b.pfZ5 "WD+뷸:7~o3G0,$`z>$$b߿8>Z0ds4f|[r{cYOf}{+k<~3{C|kk7BNDCRjWݾRQ)e?(M`IENDB`lmms-1.1.3/plugins/triple_oscillator/pm_active.png000066400000000000000000000016701247673406200223730ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME 0(tEXtCommentCreated with GIMPW IDAT8]KoE[=?AB 6,Cb9 $σ_aA ůΌgqf5~uNk?m`aРPFS:00 )mB0 EX0/Iz ܝSZ3>fX1:ŠX}$:i 0䈕Dgj Ga{U_ VAo߬<53Kiy??~Zf&+[-O'˿~ f{`1q}lh? w?w! Jm e+b|A/w}ͯvBj',fKȅ}ǽ-JqZR aȌ:9g;є))%{Kd|=6_ 猧Ljɑ~C{p@ff6<[wHN5}!H)9 E LN=LZbni8 BN;p%GI[`SJL>I T lC YC#\!K7 {I4'/X~eūˈy,#RUQ/{1X2<^X)x2\I\@t'bIi `)b)r:BgǏ5ݻ;coXxmɆd6/#A2ܱJ\/Mte`1YZeA&n ^u ֓Z'hB#'1IENDB`lmms-1.1.3/plugins/triple_oscillator/pm_inactive.png000066400000000000000000000014421247673406200227170ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME3{KtEXtCommentCreated with GIMPWIDAT8uOOSQB)P5$DD]hT#n&nШ+>+&j&-{f\wzs9gF(@$p`PU҈j7 lQWUua}[5*` 8Jlao+bZQM[ @[{<|gZ&{ C$ IÙۺ}W˫Ԧ!cTOïTcsxdJRA&H9ԲCbdP[o%IYQIENDB`lmms-1.1.3/plugins/triple_oscillator/saw_shape_inactive.png000066400000000000000000000007621247673406200242610ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME|IDAT(UkAYHr&at)"BQDK mlD;E OgMz!9rAvvYglv}o<{[]f ԨB"D)D33z3csmjCPT2QJ6Gtf|}A.Qn|:/{d0" L ,8vC?y "R ӭd"x, $=>Œ|ƍAI'r*?{kxJmNQ)a̾|`:bo`Bdw=Qr{HOs}& C1:NH CB{GB,ne+eDsPD! "ZTEH} ]3غIENDB`lmms-1.1.3/plugins/triple_oscillator/sin_shape_active.png000066400000000000000000000011051247673406200237210ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME?IDAT(EAkSQ%51%nl (\A\+w*ڊ]twθxfy39rߘL(,CΘ;匙"°?º=F[c䬔FVt9ܘ{6+? YHF (5fW}zή2Aa6ho8wc*5gd$oͦ @Pmɸ)`ht+̔5[{,jkk=;@0UjD6Y:UNN~xNSԪO@4{(ظy7z@ a-v Uu!"03!(B^ ;D8jqw?blIENDB`lmms-1.1.3/plugins/triple_oscillator/square_shape_active.png000066400000000000000000000007251247673406200244370ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME63WbIDAT(mmVAwm RhG* @R!d|udsv{αϞރ f ̨*Tt"3uqq}̌ۏW,DJl|`[0f׏Hۋ700 bn] '+ȳ6w.37le+7qv@ ,"maAMn>'7Ƿ w'2 ďW*A% 2b#YгPվv0 4ɑ)BafPysڬV><|}|>75qGZ;w>"<ݠbसWKt}yM˦-nԅ2 vmlIENDB`lmms-1.1.3/plugins/triple_oscillator/square_shape_inactive.png000066400000000000000000000006521247673406200247650ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIMEc7IDAT(m=N1 FGCECA^:-D Q[D Z.0v"ٕ Rbyj8 `I@$%RIJ(1'ǧn>e+&)j-0N JM3K0ajTTр̎ ,;0DJhԹG1uH4( =;t'p"-N):GL }T$|jec08 I|؂tݡ>vO864&Ocl{2)?o6!y] A ]bmؤi3A#k&W@UIFϏ_8s9"woU(ⵏQn5+lů*x Q J0Hː&YfJ{4aowHhC #˷ām"hxyIIHzK#3 uMjb&MQgBolBA"IENDB`lmms-1.1.3/plugins/triple_oscillator/sync_inactive.png000066400000000000000000000020521247673406200232550ustar00rootroot00000000000000PNG  IHDR# #bKGD7b0Ì pHYs  tIME*tEXtCommentCreated with GIMPWIDAT8mSU'h!YJ @[5Z/:p8Oxuta)PP$H ydC{y={8jiYӄC!P @) w Dk-"m|_ZKV#"Mshu\$7BH`XvXV*{"""ս]VW"</AC~~xA!c1~GX I$G֢B&GG5@1a>C*Ik-Q,.2 6g{DqF"1Y&&rFc$l ccFx6d ֭8k+8N2hVmLhIEѴl[њ 'qF*e*e0K0Fw!7UR)W"f6jgqNr-~I(Z֌8, ?6횀XBfx]siDת1pPůjU1]..Ml6#wЮud!JW "vGNZKR!0Ferf|Q]7{1qy엉~/`?Gw'1ֳ]!"yk +C3?vr.0IENDB`lmms-1.1.3/plugins/triple_oscillator/triangle_shape_active.png000066400000000000000000000011111247673406200247320ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIMEv! IDAT(=KTq~9 EkaUPP!mD$S' ҙ;{ߏsG=\^"@!"wppT>НC@p5%H ‰3% D/&𼠿p͵ǜ^&^2.Ps2"y%c)"3`77.mIENDB`lmms-1.1.3/plugins/triple_oscillator/triangle_shape_inactive.png000066400000000000000000000010341247673406200252650ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME6}zLIDAT(EKkSQbh&YD"~O9"Ҵ] 0RT)BsgΝqqnj3GxoT BwRt3sÊ3'S*!֮@9n3("VA/{$W%i KZYx<鳗 },fa,{.[.GRxߌb,*9{-T{wr+*ͨ! sv{O4.wz=>kjuQjFc<|YDJ~VO#DŋUenwڥzق6d2FU(bi;Ѹ͍ۈ䫵0Msq* 5%qTLN `afe2O+m+7x.IENDB`lmms-1.1.3/plugins/triple_oscillator/usr_shape_active.png000066400000000000000000000010421247673406200237410ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME1 IDAT(MjTQ>N&NBL`4QQP$I\$,N(*(h{b;u}k6%d$C@ "*pwh͌)hLK$JG!*VD,9NջURu6?b=E o-v˫|~eRd@"D?9k_#M-`FA B֠ȥ`ɨypy:DsvL)S0RK~v%}`T\zP %3j7GHjPJA d|b BnFT0Cao…OI]ՑD5%M؀mf=JT,>D`hfT$wi3ZT* )9IENDB`lmms-1.1.3/plugins/triple_oscillator/usr_shape_inactive.png000066400000000000000000000007651247673406200243030ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME4Zh*!IDAT(eAK[QyyDE Zj+E`{)Etׂ 4mw={ͦ9s曉O~C4@,3LJڈ`kc\+driM lk'e"Ϣ#\]~!c'..>5yLd$!~3>m0?"\Y]J>b#Rס^U?`Ւ˯MnH)UTiEDS9Fs5RM]F[=>L{ gl}B2'oD4|8=z;ӆEz6LVQ?\b"JYH` IdIENDB`lmms-1.1.3/plugins/triple_oscillator/white_noise_shape_active.png000066400000000000000000000011141247673406200254450ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME%[']IDAT(M;nAEO}z<A#˘sXH9+p^XpDdt=ۈJǼ8<҇c  9#>py~XfۻHu34 Q0PUŶ5VE}A7=NT}N٬Wp-<8G̊.  +LBh [`LN,)r|"! c)͚no+ra8EŎO_8H;L 6Q`[Kْ");r`lE]0DŽkB9v y`3V%!՚6 N3Ue;hkPe=)CLoQQ g#F2)'t>#Έ]H'9 `v R oSTo3P_+@@hɪ(1H_*ȝ_Z'CIENDB`lmms-1.1.3/plugins/triple_oscillator/white_noise_shape_inactive.png000066400000000000000000000010641247673406200260000ustar00rootroot00000000000000PNG  IHDR BbKGD7b0Ì pHYs B(xtIME,IwIDAT(E;oP{x Fۓ:JAI?D = Uv6>f(lBu93g>PY ƀ )!$3ưSM1:( JL%U 5?}m[N?Xo0# 'Oiy^p8 ēm̐faggDf>NQlpb~`>?#I9߹89/BJ!p}ux\Q׷刦Lm_r}B(9xmd4hc [ 9bTm'0C;ryA^l`#r̆fGM',{<ݣ]ޜKoV6[S )!] F ;ᷙNľש oA48vӟ߰DHIqvBR߰q~~^fVӓ[A#Z$Raդ \r&Dq@fwRA(@n}ɔuQ ӣh$  Bwh60TIĀ "cRVq 0AΖwG='*鎔E9O Ҟy6Ǽxv>cwx|{ F_$ m*R2# p8DhZu=*2T MX31w愒uR]RWDiUd 4?]xq)J`mQrAjwCUJ9=HrW[>{}>*/P\79{j=<=Y0#bU 2Ķs'i1Z+#ahI%+uwpEiAcՀUX#f!'--֋ÂAVC%#/$*Bv]R(JŻ6IB l;4Kvw+cY4o[W}Q{ͪ}ywN@4bij$ڮvn? ѪBfPd ={d\]kףɀfh5NfHrfLtl12CzRh 5X+k͍pc*4,-cædr@!"V!R=Ɂ)1uؽA= UnҸx)9yi-)5x$wM{|vFso4&{Kg`FXqe_=p.馪afJ1KtiM7`Ud=Pydb7|MiP"E۱vcͦܢ e7q/o5ڕNR/aӞ$ M!gkhRpis.珝j3~~NN坼N ߶;/Igq E{˺7 AliC.-s;rzv4CHQU6X=ǺF]w֗Iݷ>Yde\meXr)2g}k:з>K]M4Zd"c0'_(Z`b@CH=Udc,>.f^YX!{4b _}b_O@vP5+c+TGU2 T.K0|nĭ-GmyשmKg`KJ TF.J9Da*8T."h1 fRTwJ1D`} !#^D\s6⥔$Kλza3}46~>̇K/8E./siVVrX[VWl7|&o~b~z^\(7z66ts+oFqK!.S4ǔEwT]<[}X$qMXzn(i1-fMÇ4K:ĜݳJY @Z1 q.bGcUw ^]L)+c*ªWquMB6n0P%+gIr\1< vjt7ǯ XU+G)֬ATUG0lcs^E)[ZEh1fxSqs @4;#A霚}lkn`JN u9Trl@(haAEy][&zVpWq<{x, h>l˞GRP2SUȝR G|0`~4i?rr,t|}7XE;Yu2f`JaZ MS܏5O-_MCag0qgՏm-B\'f%'(da;]~ܗqihnK?y*ѡ݋ڄ֖T8mdœ}m^|!cu P*X0Ȓ3-%x^<\9K_(TXt+R^+XO#. D`  w.l|ҹ#mOuTnuv.Tcqjch>0˯m3B1@lbso~{a=՗}x&Ug;;tJ6^m}C1Ҙ&3<.'TrF#;0zQy*vs+f-Hµ*)FҸڍ3 Fh^Ji55D + *?`<~7VS-%sVi5UhkgBX2KCFc@]`ȟXt,l3'#H2t&!m?7^zPО[xG{#zJrԧi}2ʗ=x^TJ;*KHX+9E@@S>mVv1 fwntYEw_; p/%bQkqW /gXwsJ{U,Y./Tݢx߇p|C1,__6s`Esnjݼ8?EG 6MGK$AcWͯSKK7J @fyi CA X }M1 Te5_c.K臏فԏ؍.[}<w؅QU&S[E^|d$cU *,:ckXWrg$U)h[#*>o]: z:-'NE=bbk'p9x]zTUSJێCx-:x6_yۜ±k ^n Րꄶc7`l @(;Bؔ7)~M!,߶vi^+_qWgw. 0וʱ1Xճbza̒@@C1kGC'Pҟ/N s.tt)X<+?}G^~,_]9s{ƃ,Ǯݓ ri`nk&;B*`GB!{׀)Jڀqmj\" :Lv-c$9`1(W_mLNxKB^_/(BUB8Y=W9n""O-tdΫN+Ecp33r0Mdz4u TSm[ 7^~4Nz;t;x=O,+o{E;/mn_,R\];Hx[^'Yڷ8ыbVJuyYZ3ߗ?OM`IX恡Pqħ%,r&k؊[YDǯ!): K>i˾UH-uzK]" UêF]ZrDaՙDӔʳҹdS|Gf4B>>H ֏~|y=?G"fAfTkWNF:`v;/ÀXx`{(š C 0nڽǔ$"+ZEF2?{^m'GH)]{9Á+`}KE()iC fUúfhjXZ~rfhP) 3] ]QQ1{yX#=3x-L SAUet#{z+Z)zU=$RZhxzW3PYh_[6a)hdH޵iO.0h'|3lzIގH[Zd.X:K NOUWq.m?Y=+ fS{gnmjq mnf3㥢,wZ}I쩦[NRw?BhS4*Q$ˣ֙]K{@۸c)|v]${A ^:Bx\^%vEQ%x3*gxṵt35)zJ* S/n?Z~^{t@o?*dD5,zp󛭏zo@ne]k3{(nds[kz֊<a6 R+ 9J6/pF] W֡ υnAAN*VԁW+@;GBݫʔb4Ҟƚ}.QGz9  :dn7¦|B̤{PU\z,Q)[gW4'@"2H۳H]GZSoGށ2 b1+ /\f)z[撡g>"%Vv\;s.̟X (M3 S4AI\9S?19@I.ɧv/ Ќ-W|}Ѫ6{H_|z.BH`VtA7ҕvCYFs Np^{GK쐻ٴ@A7{ s۵GP')(X[m`@rN?.}`h6a6yyqA$Dc@PX ө~nҫD#5r'715vuTTKD ͧo'3z_@pIe(kmf[8xs7.og)uPd}j=ܴwcm>lAWr"i4ay;iOn ?<FnHNJE+-!0߱r]UD ԲD>jn^K`h945b`p˚RRXL`v)O am0ubyK1VQ"-=3  b C1U(dG+=o\Kr \LLp:I*p=k/~ڋL¶coC;\7n͈%`}߃z? vD䶭~Sxd!uVW~ʪ}u5TvF%!'DݫcHg֚ղ0,]PzMV!uLe{$Olj}ڙ#U"A2~Z`!tdO]JIrκ8] }~ KXZ0\B];r겤^Kɻ6-MQv}[ce_5w-b d`/'-X!hcp gRՌP%w/}H!ݠhf!TQ=/>87o[;2+ φMx~+?qkGe|092](D仃Vx>ejcpKSZ~"|ex>Ff,Z]nx&+*qs=gϛ8y4OWG(Бm'hgr2*ƿ~>2>vYk?l? ^U׾ulmd+/^t ~&M{5;`J燿ϿZya;>sv?Q5]}r @^b{|Wyl`c1 -~dp&zkLzU/`߼|u (ݣc QЕpï>Z]?fʓT\3;BhG)?zS+s`eCwNlZ7NZʎ7 XNeLwk~|/Sry) UjX5өdpxl>JpW}l!wL-%`Bm o8Ph~|Ƒw' tׯ\]k$LK'yNm0l^xB?:%sA|^W^kB`?hmPV#?={mXZv m'armlȨM[}=Z/DN)_?CBM_[=Ks Bpd o$Z|cW ФaRJv=ٯG>V fv0,] jNxO\g|9m#g{q͓d+SnY/x4uzkbEȻ 1:^p{b@LdCסvzԅσH '.6a96K(ӒiW&Le,=[dMǶ_=w+>_NSip11on6[mfU_IK҉U)M莶U?ٹwi_y|čA^4W]ksҚ{rp0G1<'_d)IN/B;sA^;KD8䳙2ܦmLQR>ß跮{e{:\) _͙>Z'bX=zgho_B€arE2PT5o]Nzz̿ 8 *AJO|b=;M"Sw [VgiCW Nۮ$^mwN'IM1Ԛ?5\~f;p!Nb8p*=wA NwKkmv(e:4kφm pr9x?:QdEzMv,BG~z|Pup8%v`M7L<z vSY=kulyJ@ 힝e^LBJ(ٰ]!4]3ҴxL;/?. 'Ꝙnrz)▂th y }ė4aq0&mo'~>:n^H/^\s&܊c5 s|kĞqvͲ獽[]TѾR8~[RvR\wO"9r3߿ygF'֣a 7].M־pt 8$"keO?O'ߝ{Qi;Lîy{ͫs91uhG rǿP@IpgP D k!GJRB`JL~ߍ- ĝŔ4KX}95~R/߾Tb J.B>1^Ń'h|ZYGLZ_hk#9[mO_KKu3,}[ɑ{g0c0*Vn`L6NԵ|ޱYc4Y'ؽbXRr*OShq"afȦaӠjZ CXHKy,r6 >M_o$䢜E1DŊ!j, ۑJxɆO:t4Ubud*6+w a[J c7K r/bYP:в_]= W\x&+orNCV,)a/-*3KWAznG%3{-7TQ)ٕs=7T]<ܮ666ez7+o?) Pn໫8$43z>ҡK6RjTx d{? nhtExrHvwu\,v w*J(\R9 : 9ӔdRu"m^gUKB:t ԇ f;<[Ja?gQ﯏|ǕcG<_kIFfA5ssexKBeNQ`筅=m>xexX#sBRb>WíҎ7n߼}*)loQvH#\%*'e;;n,=ꁵ,gA:)t~zt B@R2,t\!zON(1Y(8$A K.~lk g( y\bŁ,Mg?Ϧ!v -ܽ?)/}2Y<޿/}&gxqzoԋ>HRKF(E1$⥠ ;'`:3hqskXȞ ;j-&OԽRسK))gƨe1YyQJҔN]I5fE'@Ta߲tl+Xr{[޻;7BktBϕѡ]`n{$L4R*]fЯ{ʹsp {$ ;:Yp߯ouswur]4{|Nf-68miJK)]quuuyyi}Q Pw/37q: ABO.8R i{dP0yIx}so 7e$A=|Bzz:_)IcUp67t[n<*~uiccngoulbFjѶyw-pL7vS;ٹm;b\߽u%鬴*ӤDWx T $:INR`L:3Ⱦ1"ߚ;6#|{ך3fĈc0?/×rz/>|_~Wq5~ `enexJsr r L:H_~ ( J۟Kw7c#c* >az3{INS/_.ڛ>Q3ynmuEZfM^]9_ Jǥ|/5O{5_xO&_V`s_|~jEf|  (5ŖB<w<$Ӯyz Uj} *"7$c7SUcU2~~ >b$_@p$>X9Z(Q{5do@Q6@a]P8w`7 Q|+FSt-XĚ_J:>5; Y rގwr=⋷*w%2J? 3}Sx}+6> R1iQ,GD;PU3dt> cJQcYU87| uEUS'6 yW#H|6Ej[J7qlZ$唼Of϶E'o_:)qtiO19}U]()I1py77- Ge>m`nyRK4wHkeP܀Ƿ Ngf罯vh V 2# 8"$F̂>qFы/Z|ؚn}|G?pҜ鏯-BHJpi0:pX܅9ȲVVx b~8}-ZlҬPD+hCz^ĕ.?ϸ6t5$e^ppXWͦt? 9]wCoo_u%z .% obHsAjo?ϖ&u M*g$uM/"K(//>$:0(Iz"DɾI1?,?Ϳ&c=k%JL&OjwB H2i`f3$f/Li]@$iҭJwSoD(W}&["[]f9USnOJ?}ݩF Ad$ǘuL X-^61ݟVݕKe&5'%A/3e[9_ó5V髎kd>ΘT))2͎l?~wR/w.6 KM Üiv5QGQ@jXQ'[?CEp=`nqYd ~[~i| 5{ ;dFC$+gT^J* x6yT֊i Q:V5IrIC(ɠS*2(q /Az׻|6чR'͛dc<&x sS$̢Ž=k*Htɸ|'UC=V/rMM[;sY;ӓ6 ;Tl2d?3Bd%]! esA6ijMd{R*gvIJO9EXvN f^wf˻w~r:} F)']ݵ.;%kI<Ўr~_Sb}>k4L#H.nS70ccz>&Ysr|CU;ϩ؄ȑp\4LL⫮b!M3Q3幩>) >T,p/D1}P-'*WOSDi:%kRͧRӴiƀ*Ϫ$><CpŧIdycԖ{Y "Q m>׋DY .wI~{qb|=|>`_GfSy48yq1TVV85h`s&vv&y,-~?%$ALG;N5{3]!3lwţ!9][+=H<8E`?ٽ IDATȧeO7t ְ}9$ILB<-fŔꀖ#{c._7/w\l!S*$fp)v1ɜНmp|e]2-7!~CپξE>`ɰ(y)*qA|ز!Nd֘\֜هZ7`ߟv*fhyo+lEiFa[uQ۰|Tִ`oQf :qSp74_tb$A[o#>?HW(*byjaf\fDA`ywhf .l`ĞsM!'Ko*y}l/u}9l߳ Y"I>]i2@e=LJ5ܗ]t%t 1@eeXak[0q]5Zt֩J:z$ odOs?TgO:)P4+:=7FZZPXmF1sF&q(L$^i~0;LI1~dy@Zܚ]ciTj9mu'A" hP.5ѽ!@5,8Ϩrzo nd]ͱ>wRMѯM]rgO1*ߕFřʇ ].w"q(ֆL?RcJVGb`4~I}oiM*y&(|zPWR]:B]]ez_/W5%ŕM2Q(wwABJf*Uš7 QWn7⩱ p{|xquoͯ F~ߪU?|&XB%?5&t"4g+ &s~r }#=r^_􃸏+Pǟd hm"( ARv%؛JnEBkB /"gfKX3.Sr/%%0Qɱ/&Gpfy*do(E/V36;&2-GI`zL5rM{WȚ*1Ր%]8y~X1ӮΙY(D1 r'߇f"EZ6Jv2k4wyDW,J~[C(`+jRE"buwԿB)e sŔܯ{Sĵ+k!I6CW[Ec~4u]fokM'zs 6SUd;fStk5KKcQ:2X)PDv)o%U}uץh#s((BFJǥ!DgN2gՄS )d-iS)R&vcLV BTsx ޠHCDTxw1^BȪԻs-yw^U, q3.yQ E 0Y~gцs-9Jɪ-PC$kd$#jw PyѦU6"\T8 8)~S VȀP41Qɠcd31A4DRnipj} Kmzj EIXS I{ҩMM@ʜx^"f֤(0ˌ΀3^Jg.Gq/ 0KypPcT@ii `v. 6$,|#!8Q$Kҁk(_ U 2I+ 1G0;{-ۮteV(DshAf<^$X$=P2Q x+J 띷"L9ɒrZPIrTXj{ܺa?yF&gDPUb>%pKM|ҙ,UOXC 2 C7)7YE\ ԽRVFd'p:'TP܌QrMn1Zr`gajXK%`N gU4%\-m'jրDT`uF9(s0H WUU儗`Ӥ6{Ոn"?w/©m;JUiǫWo)Wv!A)\LC(Tnf{yi֎Aw,MR\ɒg^hܷKaє)JMF H#4=r\Kw%H)*0BT0&|H!CD9JBSNw :@Neu[f_ f"aKP"hltC`,JM@/,*1X~q{P FgL'!\Z4VZ޴`m]P >>>#߀)c~4sѠAӧ!;.thIZv[*̉hSBZ&6Mh^9>n]O49[zY+%QˣTswœnZiBF=r/u/nT' ެ y@O)#FNGJRNAii*o c\tE)=oZ  BfёPTJjJ wZj-lˈ'7]®UUawL;׷+',T玵t0Kk0$ukl4Ydʃ[WJ[)l K36EY;CmbAKvTn1tu2" t?kG4`|⺶Q1+껠.j([H]cc3!1^W_֬P .C2"DT Rg^K .GhB )Ȟy{zʎl~J A&%HB_-:MhX顓VqH5vJRi݊l;X,BgDQP̫~1@x'Wi,_/wY E_1=75 4 RJ*rR{4viŘ*h;>)[sz`.LT$d PW~WD 2r%[q2z/f}}Ul Ƿ>I뺂%vhԃ5 S XꃹY9*Ѡ@H}l5RVE=*CRf`nRޕCS p|$䫗ץrݠ1)_*Uu=-b)5\BhE45A߅DM8=?=W uvJ-s' N '&ze2mǘ3fY!CvI'ZA(9P*357 ,Aó[`l h3~)A fFF;yDs8JE9=UjzSw'ξy:ijr,ݽ%W.ġZ`[ѝxuTҗ$TfvSغC;U͍t…1B$5(OpQӬg$(xK*BQDiVKn4M84ড:~gf-G9K)Ž5rxt%h2~nwE2F Ṝi{IyTf<^t& \D?AڂBns{C!)sm濏1R$*#v;D c֋PD` )2PlI,d1^TD1" UCٞT[5dW2of=㢆@ vhH"Ŷx9qk3C^DFʕDF'# 2~:Ssn%ġ@,uN"\o#uYx\TqeL9Q%9Zpv͔5is{ԟ;];(\ ȌVÏ!WNp yȨA 6>Y$$#N=?Ȝ`q:PQc~^I1PL_V݇KcQg8C8-D:v*|i0BiiwAG +|M ȇ 7QigQd6ƻpڣ└*e,sk8h!4ITLvmXepAĔ뎴`_vUr[B^Ϥ 0y8Ƒ}V 1ޖS@Ly&ZɅ>sҢ,1B(2dU ZI|C5Zeq>0hR3dWԴJk6N<;bVtjy=vg1 W@.3hhAxG~c]5˝R;3hjԬ"M̒DIFmƒ֒1r[P鳠KPӡq=+J{Sh߱ @Cb_;U, k_`h]FnÌ39Xh[QZjr߈B@=K~ǻ6⚳+aHR@6}!Ag>i]:P ,(YRCl\%ٴJdT^PĂsꩠ8ڛ.)1ޕcFx۹ .pLhak'. E8U[#V-Rf%N$tuPqU5 ?uԚd^4@"ohtsLM0MU_F% Hyֻ2+}J.l;S:NM2 rn!n>b#<+֫\1O)Th(U\{qn/]m)1چHD.\#M@nO"$l4똭8ޫHeN"i F^HgP #)zŴQնJ1͹u|$-"RBVr .BPnͳHWW51C:U[=gL4øU"r{[PCy]C7Y ZVC8Jz&'arb<@tH+J7<T x]fGNsaPJi ԡ`҂]evR+o{j&3]('p߱2_E^RS떅(%5E,x$Tf0?ڄ6N7huFaICIU+N\171t/c2 hiĤ>$U"AzwN!"Rx0}ж}Rp`iF?W/';jZfF&]}U;%ꕰ8.X}5DCfHvc9 78d]qiKfM}VD$ABIښ:)$ZNwnCG5'&Hk,g{}ySz+Z*Q%j{ؓ(r]!P%\B`1u"Ðkk--lmz qTC#jeVhD2!Bj X Czx!}(Nv]`7qBX&& D?CeRM:i@'V-_~zuUBBi^uU#1h0RP }"U;&W|A`>v,{ǯ1)UEw#@Қq˧q8H_F BW褚^:AT}P,s&[$ʨx\ *T?VGmFbtJ$AS@ť=U[hYA8]¯0\tE񎩊Qe{3֞W+$WrLufS޷`Gie` $ P3֤K%hЏpݵ_.5\I͉mq'oDE(`+O# ,^'3i 5$6c.P%x|M=H_7)x:nρ! {KeY+5؛(ʝm,j~ Ȍ6SW@K2L(12y;5kPD oțQ4Ჵ _uaL•xuMl4֍U0'qU5\•n yYF[*dzA RJ_d=Z@ Mc9$9a۬ LA3z W#kV 1/'v_$TZ7q5*U[IR4|td.gRy|UT$(ݔs=\p u`|DK\s˂ P\9&6 !Ivkމq4fߛ d 3}48lrQHR7 ]; xۄ޶ ]Jsϛwwv'R3QECN\h]˅tD4ZdrJHx"gZ?f7썀Bu"NR<7ts5GyW,^|Az(i2n:V :r]”>ƛTެjI?Q'F,)[R TqߴѤ+T}6A`97#")rW[53idyP;ƞND1f!mttZ/*%² b5݅Fn@ ]7H.vӞ*VEI-vQ:x$Ƀ| DKHP|{qr{zf9EGȵ3 m2hHPm B E% $S+h@wh&kxǦGg !':WQyk;_?莑w0~Be^E4MFChF'=4!Sb*R别BAp_⇟}pwqO]·/26{H*aˮV>;=夝E{2Qs6RY; Yl(YB^ XD/OMuQ+PH$w}~vҙU}R U imJ*mܑ"1h@⥘N Ֆj3ˁ:p\2j"&!7[ ;x7kRHGR`#BD_~;M~x^ ?g)M"L( &>JEx^{jih0R1#k:zB0:u2S6B#d-n{~&20:j4jM_DK*$ŲQ $/#7Hww&2^bfh 2|Jc%9#"T b'76BBx;ep* o~/}.ږU8ݿ¤%)T$N-*0RT@y-/7a5NCerJ;-6xI _x[872^v(*:g̀4kjA(^8`/Sg] ˤ@R]Loi˔[*]mM(,){} xhy$TS}w bP׿WF[ sנWbҌNl,l7R%$tɠԾ~VmDҴP>㊴@.fGppB'vչB)/1V&]x[jq&^* NyO[_E]f ?١L7cX_~Ɋҥv{efЙmj(&IPY$["z//k ևYwq~C-2wwpp]v)_|ȹga7c2㲟XuxTc"G|xe(K[J؜öUBz=}/O0HY$xwԁ4bw-~)l k`r&8ںoY.>BsdI'>Ovb:=ɰ Egа4bZ:('\XG.DT-e,!l&;(|3ci"yGL_l/L].oJgrp(l#G [})ܷqP[6E+Sf-Z+y՛g#S 4xqɍX m4D.;p+-@r?#iD)s pk )8yIM]3pgln\Ή`:$>T$ ؇uzy4ܚ-ڸ^Ws #(B|[(5~ڻ( ^&+o(]9Pt#ӛ$w7)NwpvA[}=0n=(co` 0љۡˏmb缷8ɒ{8LM"=vP^VsԸ99A g~km&Q^t\ C(/p{!9x\y@l-&?[-tG91] cb94@`=XFEEp}ffZ -# {jm"X@Cz&S|<nh6OWh 楁dl?vIUH2qh~&Ef CwQ5p q ,⧺wx QNh}GxC"NǓ\:fiJY; &k=7.:W0*H*626>+=yBl Xfs0~uE5GL3sO̬GY֜;W ^XVwGha8BF d#Ȗ8\ԡAv%])||}COS_ׯglvXM3MOs /bokOmT |`BwdHTq4,373\ZX> h|HOϘ7A z KۦJ^.b8Z}1;#E<* )|arrΤ Q^PН-Y|EC) TRS#`zB7̓xRE =ݘGЮNI,U-&Td?-%yK:7QMk P"8?N#_: Cs`ߌZ|[y̓'m1p$A`p/gѫ1n-N-IbK|3n_eK Sx[d njAsڿPt7 O Y&c ^ uBo+@c"mry#+Ynt`vy^W'T۾:ֹ;KLl֘WM>F ~k=k X](6gGr`g b93-ˆz gtx$xq#G;`+f\ WAfj[Yg`&\b_|qHQp8{]2flqf3Ւm!>~XQS=&u;T2QZObly͠4iGٍQ +`ހI2!+v "tdDw3JY+Pv8<8ɈTJ7`S籕i" ;+F0w<\fW9f28a1ftw ?L3ӎ;ONqQqD$Zf&0۔ޝӏ<7!RGB? ӟDׂz?GKa6s9LS Rh%`Q¬0?P So{\ȭ*m&nkBtæ.niQd4P#Ml6euK6,eNvMY?B4lo\svkVsu yɨ<`:Fdy{uEawSEp_ N "Ur)p;P'$,B7p!7eȅ?2*NnAPMdg:Q<.\F}!k;?Hݏ44d#fB-"Y ]yom4JKah)8V@lЏ@y_UvONv t/zt(p|E7NY`\6 kR=͸ԟ*!otd ge.% "${3V IK<bs 6ɶϹ0N6^M!}]}Y MVS3-Qoc5>MO.Jf%E6/5p\-.Idrp:R7aY:!˔-9n)+CӔzf'۔0"/0m>%E(.XPvdƞ2WM`o'% v@&wq9jY.U'fO$nY|W(;^WEm8R%+dUu|pOѩU4&wƜ91;Wme>@պwBmOE,SX9*ʹeZS-d@Z'wK2H,(e_Hlsz4%ݹh,6S oPbqXM$ !+=8ir} mֹ3p6;U)! I:ubO"ÑܯLhx);``r&p>LTS4`8ѩ_cFagyj={0>5PC謢5;h հ׍x^3qt0mja'b?u_xj0u&`(b0ٱרXMhGyxbt ymǴJXhD V۳M1Lle{ Ť0rf49,qQ C'Ж83IoZN&Gl\aYuJ»d]0ZOΛSC̸:J}j

    ԎFI g-F"O;r?X<2.G}ѐ f3P_±4=PYqsޠ/LMByd iӥ%F2^VOf8ҍey׮ٿ :zRf57).w *u·Q5Tͮy^\щYJ9{b&A!$gud\Tw섶0f=!y/1"w4P ś4(hUr s}-(I9u^<~:U-S~HLluC(Z#Z VuI꫊~x$Cj٘cyꗅ(Šy+Jtz0N0e[Qx[oRCNDk\#оcQ6"qiF髢9dYx3`#+^A|ũ2ذmoФZ':~.ݺl/NjEIgBNcы._)p ;j(<[6{NgRDLmϾH30q^C(HFtJoX7)*oXhG)쐣fQ'Ub惇A9\\fa>J`c\IK<˥bܻIzIBS;;wP^*-:trB/ۉ4u՛9,dҮ9MSt.+VDԍGE~aTQOZ v`œ7y ɳC%z6^ G7Mrʽo-Voa/%nuĢnZ륙 ~)|"a `vi]DEGNW ĥ ej{7d#t^"#L=`L#uGY̰پK+ OQҏmm&swVkʴ^} ,+ɔLjǟ|;/Ѫ6 O Fql͍&VI{/!Nd.UQBN3x9_,+[,1/tŞJPN"Z E| Сm:hBGø)HZc=uF!mO6X#$ gY?xAl#cI`Zݜob }of1 [XƲo򭫬IG*VXơmc"Ws(`Z 7&MF`2lK-6O>HoGIw.cܮ(-Jk)눲dF pcIDATxRȳ)'"þU2(%oNxTc,0: !(?ytc=BrLGCq& u&M?(u+z&j!D t6m|.sA|+`s T4dLz)jx 6OD0<=$DAMX&j9f(3z 9LeSxIZ\}L8_~xlʗm)OtJO@ ggxK3؁(U"jW'GQ25K{='kİ'%^/n1N='J %`B<ՠ @L[ tX&ENS9r)E#д)1۰8ڢ%VF>V3-=w >Zl4GV2طNm>trgQ) gwvz3!0P'YTIz{uR,͜?6c~8ws2 t YA{UC|":دTu+n{>'B}>H:zEƃzA5*|0(}y\Sq\2\KlӵrɻsK|!&Ȏ\ƤӤ̸bl,=c&ܭώQ13;+G!C$AޚTg(a}hDŽ)]%Yѝu8̓4/ۀW,~$JI?U*UVOF *?MU,-ji93?`&=څU*z5qй+)=0Q.jNdܻz6gźkdʊ{Tn,L;Y.N j-D䈉5A)UxZRqBz Aws" ߉2,BKc=1݉rd27Ic-INu}ԤcR?*)m[/qiVfql"I7q}0ewkNxBΥl֓RpZ7%u|3(fVuU\`dƎt`Q 6J4CMmV'jP&[bxȃ%p|.txAq!RhOy.lP?jFj~JWYdH.W*sj3[j䦃AC1[g r%6tΈ7кW6֞ګV>8da)ki 1b3x׹JWLu ltLhRF-搒.APCOE!`Ȣ/ & Ȯ*-^\'C,ETueR]cП6V(G;ҥ/η-R}.h ,5GNʐD~O/N`rUjk1-O dI{ {.e.aoIk6ܤR(hcjyZf +WzQ.nPQNymx4ԟ]>YCѩKI&e'Ku֧#}/J&o{-71b?<{6 r켠Igqz]ٯ247qB%_HLΫ u!r\>ҲNr<="ws}`XȵjPЛ̷rBق2%`!\ɬg0SNVd//~4?;gjҋ,V ^V]dB^=w[H=fO)9Ģ|2A ^w~o3olڢ\x" y$͍g{ X 5bWKoY+5Uc&xrj2<g۲PZːl 8NPpoRfNw'`pp(=h==*K98;QYy;}qI ԂMrÂ0J'T1.aY.עVWu‑Whn%Qw>j:K>GZ3%UOT(z PTℏXK>q»cf]dQYي,~4;=ޅf 8j[v (~ OM:+g>3[P*<~$qGbȓFrctYʺ%F:. @m [i 9t1&7u|sGFN]76b-aQex~].3.=9O9j"LKF恣L5w5)K*)JzFu=44е?6#v |b(ǔK>]-{vp,81֝j$b:( Ue 4pytKu وoָWA z@,NFw1*[`c Wwvƀy}*ZQx,JƩ"j˽鍠M7}ܦϦ~R0g. K^vm;3V^3)Re{.L-kqWiެ메;hQ(T -Qa)_؁O'p$njN0ArvJ9᷎MzّgqK "n, ‰|_, -(*ex"=#~.Ke+Ց mLu5Vg5|'1 ,8P8EϨNsP\5)-])ǢȎӔM3}j+υOd5A(8YO>RӬg]; Iٳ)ɇsas7`[W|%!OKܠ^ۑ . uAdT6'+uqiX.8==Qzf0%GGBѯ}NjiW: KO WHq5r{譲q=)H#햌}"|mzGx 2RYB'\_lV)rѤW&2ℛ"Lg@> 9W~p+Ho$QlEFw<@ ,9r޽ ;/=ɸ˧tFVuҪ DEE\C}b9]$gjN~ADo3re?ccOM0.ؘ-ok@VlO_$utyOmj2kwfpI}pj(}zc[ ('v{2PΔεx>TXd<iz, O"2w*FT-yueˍ/R (ٹᛟ.z1[.Gٙ>̆I@7RHnb+L_A+Ez-oM-=L#t ~O5[mngV\FA(KQ. W~3M`(K{9 3S$--< 4½nj9k}?ś=C˚ bf;BRD&i;'L<h<{Nf"D BL_[ {wKF  IҏOɌ c9)nb{Xܩ?[gFZKf˕nPgԓR$yӘ[dn5ufأ ]Q5\s8 >e a4B=/_/_wSf-9S+oI|%bi[K+ `>$n[)?NۭzS&IENDB`lmms-1.1.3/plugins/vestige/logo.png000066400000000000000000000027751247673406200173070ustar00rootroot00000000000000PNG  IHDR00WbKGD pHYs  tIME(5RIDAThۏ]U?9sґIRĘ`b!@hIM_Ч[1Ѩ@II45NH R/XΙs>}Y>3ܠ?a_TTTTTTTTTTT"pHm}O?Q ##c#:^j8e9n8p{<|z_{;ÍN͏CzYB'$y$] KO] 9|[ww{3'zSlm4qIdS-̮)Lk l`sl/vpUNV=33S75iu -H>36ݬM/I !ޕ {tٛ2pCMG? & 9:U\C1F)  6rm"/7b s#2' i3F 937d5jgq.)~6b #4 CAE@q) ngK)D0qx&r";&BG=PjMobOӳy;نx\(0? *N]={#7G\(Dā#zhd4"Ge&f'/4"}e~c:׋A7B0/ *R(b-!,+~mp`|esa<>9kVQfb==ғ:iNw9 B_ e,zm47e1[Zd(hldw1I ߞ_]N>=<Lkiiv BPtVlbS >4tp VB +`@a!{xjGzk: ݣ{Е2eR$|_2Efe8uPX%wBZ(\ye0/^m7Ss=tؚ:jEI(۝([`SDLX72_8-w <1qr$9X|wt,Һ9P^o&g-OR?k#ڷo~kOýoGN)/&X(X^|.~K}%̯j~]ԴeDzƵrm*qF@q ( }"B)(wd'o;=wOxgr` l<1_!{l 77BNu{n~eJȕq$]'zũkRTc~cjzmw}BDQl S/bI&̣yH.P˶! l o|cj2IսI쭌`HKM ih4ă N0FFV.4/h lȘw7i{\y,^&ﰢ5-@M%CboMY6PxLRt\A Ob )N9B0L Cb6+r_fn^X=dHФ0@{K@Db1B~R*2fn,kչKIvl+ +4Vx><@T.\HYtuv컋'iGpJ + &h x@Xh2B|"s1p\HGZ>O"[2]ػ~e]R=SL͗6ezu*|קrfQca:i9m&*p39"{lnnݧk SUZ:O"=1"KC !Zں q˦tS}R%/j~ۥH_}OB#yK/0s7 [_o?pD" pmh|3{'fS$GG+xпw}?DX.}υEp/f|˓ʹj^Y~+I橒מ!}@%MG 5ͻ8I8XruRNk |2 6t+dϚ匤=!3Ъ@F-5Z;,$ ٔu=LI wL|‹g4B\O,:*uj)Ci9yLt8i113YH$rbXԜx_4;`etxZ82Y.vu^X% )rɈGDfʺ `~@N.^-tCc;$aY^w(.g$L1[o{ C14zZ=5Rd *$:Mꤒ`@]L>˵7̣F@ KBh^+{M*{sw]J6"edjZt()%RRȠ51Dk_HNJL&,ڭwtsVe2â PiZū'&%AK|I%G̱/cvʹzo镛}, px,AjDI($~,#TnE=yW.߃~Ja5pBB$"N̗ZW*tlK\{ yMyr0~ojqDf22r2 G" ৯ʣd"vyhSZ>L ~MS*T0EBj[rg=h `-VtY*dRJ.P9nU{7P!܇IENDB`lmms-1.1.3/plugins/vestige/vestige.cpp000066400000000000000000000677421247673406200200200ustar00rootroot00000000000000/* * vestige.cpp - instrument-plugin for hosting VST-instruments * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "vestige.h" #include #include #include #include #include #include #include #include "engine.h" #include "gui_templates.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" #include "VstPlugin.h" #include "MainWindow.h" #include "pixmap_button.h" #include "string_pair_drag.h" #include "text_float.h" #include "tooltip.h" #include "FileDialog.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT vestige_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "VeSTige", QT_TRANSLATE_NOOP( "pluginBrowser", "VST-host for using VST(i)-plugins within LMMS" ), "Tobias Doerffel ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), "dll", NULL } ; } QPixmap * VestigeInstrumentView::s_artwork = NULL; QPixmap * manageVestigeInstrumentView::s_artwork = NULL; vestigeInstrument::vestigeInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &vestige_plugin_descriptor ), m_plugin( NULL ), m_pluginMutex(), m_subWindow( NULL ), vstKnobs( NULL ), knobFModel( NULL ), p_subWindow( NULL ) { // now we need a play-handle which cares for calling play() InstrumentPlayHandle * iph = new InstrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); } vestigeInstrument::~vestigeInstrument() { if (p_subWindow != NULL) { delete p_subWindow; p_subWindow = NULL; } if (knobFModel != NULL) { delete []knobFModel; knobFModel = NULL; } engine::mixer()->removePlayHandles( instrumentTrack() ); closePlugin(); } void vestigeInstrument::loadSettings( const QDomElement & _this ) { loadFile( _this.attribute( "plugin" ) ); m_pluginMutex.lock(); if( m_plugin != NULL ) { m_plugin->loadSettings( _this ); const QMap & dump = m_plugin->parameterDump(); paramCount = dump.size(); char paramStr[35]; vstKnobs = new knob *[ paramCount ]; knobFModel = new FloatModel *[ paramCount ]; QStringList s_dumpValues; QWidget * widget = new QWidget(); for( int i = 0; i < paramCount; i++ ) { sprintf( paramStr, "param%d", i ); s_dumpValues = dump[ paramStr ].split( ":" ); vstKnobs[i] = new knob( knobBright_26, widget, s_dumpValues.at( 1 ) ); vstKnobs[i]->setHintText( s_dumpValues.at( 1 ) + ":", "" ); vstKnobs[i]->setLabel( s_dumpValues.at( 1 ).left( 15 ) ); knobFModel[i] = new FloatModel( 0.0f, 0.0f, 1.0f, 0.01f, this, QString::number(i) ); knobFModel[i]->loadSettings( _this, paramStr ); if( !( knobFModel[ i ]->isAutomated() || knobFModel[ i ]->controllerConnection() ) ) { knobFModel[ i ]->setValue( ( s_dumpValues.at( 2 )).toFloat() ); knobFModel[ i ]->setInitValue( ( s_dumpValues.at( 2 )).toFloat() ); } connect( knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) ); vstKnobs[i]->setModel( knobFModel[i] ); } } m_pluginMutex.unlock(); } void vestigeInstrument::setParameter( void ) { Model *action = qobject_cast(sender()); int knobUNID = action->displayName().toInt(); if ( m_plugin != NULL ) { m_plugin->setParam( knobUNID, knobFModel[knobUNID]->value() ); } } void vestigeInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( QFileInfo( m_pluginDLL ).isAbsolute() ) { QString f = QString( m_pluginDLL ).replace( QDir::separator(), '/' ); QString vd = QString( configManager::inst()->vstDir() ).replace( QDir::separator(), '/' ); QString relativePath; if( !( relativePath = f.section( vd, 1, 1 ) ).isEmpty() ) { m_pluginDLL = relativePath; } } _this.setAttribute( "plugin", m_pluginDLL ); m_pluginMutex.lock(); if( m_plugin != NULL ) { m_plugin->saveSettings( _doc, _this ); if (knobFModel != NULL) { const QMap & dump = m_plugin->parameterDump(); paramCount = dump.size(); char paramStr[35]; for( int i = 0; i < paramCount; i++ ) { if (knobFModel[i]->isAutomated() || knobFModel[i]->controllerConnection()) { sprintf( paramStr, "param%d", i); knobFModel[i]->saveSettings( _doc, _this, paramStr ); } /* QDomElement me = _doc.createElement( paramStr ); me.setAttribute( "id", knobFModel[i]->id() ); me.setAttribute( "value", knobFModel[i]->value() ); _this.appendChild( me ); ControllerConnection * m_controllerConnection = knobFModel[i]->controllerConnection(); if (m_controllerConnection) { QDomElement controller_element; QDomNode node = _this.namedItem( "connection" ); if( node.isElement() ) { controller_element = node.toElement(); } else { controller_element = _doc.createElement( "connection" ); _this.appendChild( controller_element ); } QDomElement element = _doc.createElement( paramStr ); m_controllerConnection->saveSettings( _doc, element ); controller_element.appendChild( element ); }*/ } } } m_pluginMutex.unlock(); } QString vestigeInstrument::nodeName( void ) const { return( vestige_plugin_descriptor.name ); } void vestigeInstrument::loadFile( const QString & _file ) { m_pluginMutex.lock(); const bool set_ch_name = ( m_plugin != NULL && instrumentTrack()->name() == m_plugin->name() ) || instrumentTrack()->name() == InstrumentTrack::tr( "Default preset" ) || instrumentTrack()->name() == displayName(); m_pluginMutex.unlock(); if ( m_plugin != NULL ) { closePlugin(); } m_pluginDLL = _file; textFloat * tf = textFloat::displayMessage( tr( "Loading plugin" ), tr( "Please wait while loading VST-plugin..." ), PLUGIN_NAME::getIconPixmap( "logo", 24, 24 ), 0 ); m_pluginMutex.lock(); m_plugin = new VstPlugin( m_pluginDLL ); if( m_plugin->failed() ) { m_pluginMutex.unlock(); closePlugin(); delete tf; QMessageBox::information( 0, tr( "Failed loading VST-plugin" ), tr( "The VST-plugin %1 could not " "be loaded for some reason.\n" "If it runs with other VST-" "software under Linux, please " "contact an LMMS-developer!" ).arg( m_pluginDLL ), QMessageBox::Ok ); return; } m_plugin->showEditor( NULL, false ); if( set_ch_name ) { instrumentTrack()->setName( m_plugin->name() ); } m_pluginMutex.unlock(); emit dataChanged(); delete tf; } void vestigeInstrument::play( sampleFrame * _buf ) { m_pluginMutex.lock(); if( m_plugin == NULL ) { m_pluginMutex.unlock(); return; } m_plugin->process( NULL, _buf ); const fpp_t frames = engine::mixer()->framesPerPeriod(); instrumentTrack()->processAudioBuffer( _buf, frames, NULL ); m_pluginMutex.unlock(); } bool vestigeInstrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset ) { m_pluginMutex.lock(); if( m_plugin != NULL ) { m_plugin->processMidiEvent( event, offset ); } m_pluginMutex.unlock(); return true; } void vestigeInstrument::closePlugin( void ) { // disconnect all signals if( knobFModel != NULL ) { for( int i = 0; i < paramCount; i++ ) { delete knobFModel[ i ]; delete vstKnobs[ i ]; } } if( vstKnobs != NULL ) { delete [] vstKnobs; vstKnobs = NULL; } if( knobFModel != NULL ) { delete [] knobFModel; knobFModel = NULL; } if( m_scrollArea != NULL ) { // delete m_scrollArea; m_scrollArea = NULL; } if( m_subWindow != NULL ) { m_subWindow->setAttribute( Qt::WA_DeleteOnClose ); m_subWindow->close(); if( m_subWindow != NULL ) { delete m_subWindow; } m_subWindow = NULL; } if( p_subWindow != NULL ) { p_subWindow = NULL; } m_pluginMutex.lock(); if( m_plugin ) { delete m_plugin->pluginWidget(); } delete m_plugin; m_plugin = NULL; m_pluginMutex.unlock(); } PluginView * vestigeInstrument::instantiateView( QWidget * _parent ) { return new VestigeInstrumentView( this, _parent ); } VestigeInstrumentView::VestigeInstrumentView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ), lastPosInMenu (0) { if( s_artwork == NULL ) { s_artwork = new QPixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) ); } m_openPluginButton = new pixmapButton( this, "" ); m_openPluginButton->setCheckable( false ); m_openPluginButton->setCursor( Qt::PointingHandCursor ); m_openPluginButton->move( 216, 81 ); m_openPluginButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file_active" ) ); m_openPluginButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "select_file" ) ); connect( m_openPluginButton, SIGNAL( clicked() ), this, SLOT( openPlugin() ) ); toolTip::add( m_openPluginButton, tr( "Open other VST-plugin" ) ); m_openPluginButton->setWhatsThis( tr( "Click here, if you want to open another VST-plugin. After " "clicking on this button, a file-open-dialog appears " "and you can select your file." ) ); m_managePluginButton = new pixmapButton( this, "" ); m_managePluginButton->setCheckable( false ); m_managePluginButton->setCursor( Qt::PointingHandCursor ); m_managePluginButton->move( 216, 101 ); m_managePluginButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "track_op_menu_active" ) ); m_managePluginButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "track_op_menu" ) ); connect( m_managePluginButton, SIGNAL( clicked() ), this, SLOT( managePlugin() ) ); toolTip::add( m_managePluginButton, tr( "Control VST-plugin from LMMS host" ) ); m_managePluginButton->setWhatsThis( tr( "Click here, if you want to control VST-plugin from host." ) ); m_openPresetButton = new pixmapButton( this, "" ); m_openPresetButton->setCheckable( false ); m_openPresetButton->setCursor( Qt::PointingHandCursor ); m_openPresetButton->move( 200, 224 ); m_openPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "project_open", 20, 20 ) ); m_openPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "project_open", 20, 20 ) ); connect( m_openPresetButton, SIGNAL( clicked() ), this, SLOT( openPreset() ) ); toolTip::add( m_openPresetButton, tr( "Open VST-plugin preset" ) ); m_openPresetButton->setWhatsThis( tr( "Click here, if you want to open another *.fxp, *.fxb VST-plugin preset." ) ); m_rolLPresetButton = new pixmapButton( this, "" ); m_rolLPresetButton->setCheckable( false ); m_rolLPresetButton->setCursor( Qt::PointingHandCursor ); m_rolLPresetButton->move( 190, 201 ); m_rolLPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-left-press" ) ); m_rolLPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-left" ) ); connect( m_rolLPresetButton, SIGNAL( clicked() ), this, SLOT( previousProgram() ) ); toolTip::add( m_rolLPresetButton, tr( "Previous (-)" ) ); m_rolLPresetButton->setShortcut( Qt::Key_Minus ); m_rolLPresetButton->setWhatsThis( tr( "Click here, if you want to switch to another VST-plugin preset program." ) ); m_savePresetButton = new pixmapButton( this, "" ); m_savePresetButton->setCheckable( false ); m_savePresetButton->setCursor( Qt::PointingHandCursor ); m_savePresetButton->move( 224, 224 ); m_savePresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "project_save", 20, 20 ) ); m_savePresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "project_save", 20, 20 ) ); connect( m_savePresetButton, SIGNAL( clicked() ), this, SLOT( savePreset() ) ); toolTip::add( m_savePresetButton, tr( "Save preset" ) ); m_savePresetButton->setWhatsThis( tr( "Click here, if you want to save current VST-plugin preset program." ) ); m_rolRPresetButton = new pixmapButton( this, "" ); m_rolRPresetButton->setCheckable( false ); m_rolRPresetButton->setCursor( Qt::PointingHandCursor ); m_rolRPresetButton->move( 209, 201 ); m_rolRPresetButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-right-press" ) ); m_rolRPresetButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "stepper-right" ) ); connect( m_rolRPresetButton, SIGNAL( clicked() ), this, SLOT( nextProgram() ) ); toolTip::add( m_rolRPresetButton, tr( "Next (+)" ) ); m_rolRPresetButton->setShortcut( Qt::Key_Plus ); m_rolRPresetButton->setWhatsThis( tr( "Click here, if you want to switch to another VST-plugin preset program." ) ); m_selPresetButton = new QPushButton( tr( "" ), this ); m_selPresetButton->setGeometry( 228, 201, 16, 16 ); QMenu *menu = new QMenu; connect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); m_selPresetButton->setIcon( PLUGIN_NAME::getIconPixmap( "stepper-down" ) ); m_selPresetButton->setWhatsThis( tr( "Click here to select presets that are currently loaded in VST." ) ); m_selPresetButton->setMenu(menu); m_toggleGUIButton = new QPushButton( tr( "Show/hide GUI" ), this ); m_toggleGUIButton->setGeometry( 20, 130, 200, 24 ); m_toggleGUIButton->setIcon( embed::getIconPixmap( "zoom" ) ); m_toggleGUIButton->setFont( pointSize<8>( m_toggleGUIButton->font() ) ); connect( m_toggleGUIButton, SIGNAL( clicked() ), this, SLOT( toggleGUI() ) ); m_toggleGUIButton->setWhatsThis( tr( "Click here to show or hide the graphical user interface " "(GUI) of your VST-plugin." ) ); QPushButton * note_off_all_btn = new QPushButton( tr( "Turn off all " "notes" ), this ); note_off_all_btn->setGeometry( 20, 160, 200, 24 ); note_off_all_btn->setIcon( embed::getIconPixmap( "state_stop" ) ); note_off_all_btn->setFont( pointSize<8>( note_off_all_btn->font() ) ); connect( note_off_all_btn, SIGNAL( clicked() ), this, SLOT( noteOffAll() ) ); setAcceptDrops( true ); _instrument2 = _instrument; _parent2 = _parent; } void VestigeInstrumentView::managePlugin( void ) { if ( m_vi->m_plugin != NULL && m_vi->m_subWindow == NULL ) { m_vi->p_subWindow = new manageVestigeInstrumentView( _instrument2, _parent2, m_vi); } else if (m_vi->m_subWindow != NULL) { if (m_vi->m_subWindow->widget()->isVisible() == FALSE) { m_vi->m_scrollArea->show(); m_vi->m_subWindow->show(); } else { m_vi->m_scrollArea->hide(); m_vi->m_subWindow->hide(); } } } void VestigeInstrumentView::updateMenu( void ) { // get all presets - if ( m_vi->m_plugin != NULL ) { m_vi->m_plugin->loadProgramNames(); QWidget::update(); QString str = m_vi->m_plugin->allProgramNames(); QStringList list1 = str.split("|"); QMenu * to_menu = m_selPresetButton->menu(); to_menu->clear(); QAction *presetActions[list1.size()]; for (int i = 0; i < list1.size(); i++) { presetActions[i] = new QAction(this); connect(presetActions[i], SIGNAL(triggered()), this, SLOT(selPreset())); presetActions[i]->setText(QString("%1. %2").arg(QString::number(i+1), list1.at(i))); presetActions[i]->setData(i); if (i == lastPosInMenu) { presetActions[i]->setIcon(embed::getIconPixmap( "sample_file", 16, 16 )); } else presetActions[i]->setIcon(embed::getIconPixmap( "edit_copy", 16, 16 )); to_menu->addAction( presetActions[i] ); } } } VestigeInstrumentView::~VestigeInstrumentView() { } void VestigeInstrumentView::modelChanged() { m_vi = castModel(); } void VestigeInstrumentView::openPlugin() { FileDialog ofd( NULL, tr( "Open VST-plugin" ) ); QString dir; if( m_vi->m_pluginDLL != "" ) { dir = QFileInfo( m_vi->m_pluginDLL ).absolutePath(); } else { dir = configManager::inst()->vstDir(); } // change dir to position of previously opened file ofd.setDirectory( dir ); ofd.setFileMode( FileDialog::ExistingFiles ); // set filters QStringList types; types << tr( "DLL-files (*.dll)" ) << tr( "EXE-files (*.exe)" ) ; ofd.setFilters( types ); if( m_vi->m_pluginDLL != "" ) { // select previously opened file ofd.selectFile( QFileInfo( m_vi->m_pluginDLL ).fileName() ); } if ( ofd.exec () == QDialog::Accepted ) { if( ofd.selectedFiles().isEmpty() ) { return; } engine::mixer()->lock(); if (m_vi->p_subWindow != NULL) { delete m_vi->p_subWindow; m_vi->p_subWindow = NULL; } m_vi->loadFile( ofd.selectedFiles()[0] ); engine::mixer()->unlock(); if( m_vi->m_plugin && m_vi->m_plugin->pluginWidget() ) { m_vi->m_plugin->pluginWidget()->setWindowIcon( PLUGIN_NAME::getIconPixmap( "logo" ) ); } } } void VestigeInstrumentView::openPreset() { if ( m_vi->m_plugin != NULL ) { m_vi->m_plugin->openPreset( ); bool converted; QString str = m_vi->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; QWidget::update(); } } void VestigeInstrumentView::savePreset() { if ( m_vi->m_plugin != NULL ) { m_vi->m_plugin->savePreset( ); /* bool converted; QString str = m_vi->m_plugin->presetString().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; QWidget::update();*/ } } void VestigeInstrumentView::nextProgram() { if ( m_vi->m_plugin != NULL ) { m_vi->m_plugin->rotateProgram( 1 ); bool converted; QString str = m_vi->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; QWidget::update(); } } void VestigeInstrumentView::previousProgram() { if ( m_vi->m_plugin != NULL ) { m_vi->m_plugin->rotateProgram( -1 ); bool converted; QString str = m_vi->m_plugin->currentProgramName().section("/", 0, 0); if (str != "") lastPosInMenu = str.toInt(&converted, 10) - 1; QWidget::update(); } } void VestigeInstrumentView::selPreset( void ) { QAction *action = qobject_cast(sender()); if (action) if ( m_vi->m_plugin != NULL ) { lastPosInMenu = action->data().toInt(); m_vi->m_plugin->setProgram( action->data().toInt() ); QWidget::update(); } } void VestigeInstrumentView::toggleGUI( void ) { if( m_vi == NULL || m_vi->m_plugin == NULL ) { return; } QWidget * w = m_vi->m_plugin->pluginWidget(); if( w == NULL ) { return; } if( w->isHidden() ) { w->show(); } else { w->hide(); } } void VestigeInstrumentView::noteOffAll( void ) { m_vi->m_pluginMutex.lock(); if( m_vi->m_plugin != NULL ) { for( int key = 0; key <= MidiMaxKey; ++key ) { m_vi->m_plugin->processMidiEvent( MidiEvent( MidiNoteOff, 0, key, 0 ), 0 ); } } m_vi->m_pluginMutex.unlock(); } void VestigeInstrumentView::dragEnterEvent( QDragEnterEvent * _dee ) { if( _dee->mimeData()->hasFormat( stringPairDrag::mimeType() ) ) { QString txt = _dee->mimeData()->data( stringPairDrag::mimeType() ); if( txt.section( ':', 0, 0 ) == "vstplugin" ) { _dee->acceptProposedAction(); } else { _dee->ignore(); } } else { _dee->ignore(); } } void VestigeInstrumentView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == "vstplugin" ) { m_vi->loadFile( value ); _de->accept(); return; } _de->ignore(); } void VestigeInstrumentView::paintEvent( QPaintEvent * ) { QPainter p( this ); p.drawPixmap( 0, 0, *s_artwork ); QString plugin_name = ( m_vi->m_plugin != NULL ) ? m_vi->m_plugin->name()/* + QString::number( m_plugin->version() )*/ : tr( "No VST-plugin loaded" ); QFont f = p.font(); f.setBold( true ); p.setFont( pointSize<10>( f ) ); p.setPen( QColor( 255, 255, 255 ) ); p.drawText( 10, 100, plugin_name ); p.setPen( QColor( 50, 50, 50 ) ); p.drawText( 10, 211, tr( "Preset" ) ); // m_pluginMutex.lock(); if( m_vi->m_plugin != NULL ) { p.setPen( QColor( 0, 0, 0 ) ); f.setBold( false ); p.setFont( pointSize<8>( f ) ); p.drawText( 10, 114, tr( "by " ) + m_vi->m_plugin->vendorString() ); p.setPen( QColor( 255, 255, 255 ) ); p.drawText( 10, 225, m_vi->m_plugin->currentProgramName() ); } if( m_vi->m_subWindow != NULL ) { m_vi->m_subWindow->setWindowTitle( m_vi->instrumentTrack()->name() + tr( " - VST plugin control" ) ); } // m_pluginMutex.unlock(); } manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrument, QWidget * _parent, vestigeInstrument * m_vi2 ) : InstrumentView( _instrument, _parent ) { m_vi = m_vi2; m_vi->m_scrollArea = new QScrollArea( this ); widget = new QWidget(this); l = new QGridLayout( this ); m_vi->m_subWindow = engine::mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); m_vi->m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::MinimumExpanding ); m_vi->m_subWindow->setFixedWidth( 960 ); m_vi->m_subWindow->setMinimumHeight( 300 ); m_vi->m_subWindow->setWidget(m_vi->m_scrollArea); m_vi->m_subWindow->setWindowTitle( m_vi->instrumentTrack()->name() + tr( " - VST plugin control" ) ); m_vi->m_subWindow->setWindowIcon( PLUGIN_NAME::getIconPixmap( "logo" ) ); //m_vi->m_subWindow->setAttribute(Qt::WA_DeleteOnClose); l->setContentsMargins( 20, 10, 10, 10 ); l->setVerticalSpacing( 10 ); l->setHorizontalSpacing( 23 ); m_syncButton = new QPushButton( tr( "VST Sync" ), this ); connect( m_syncButton, SIGNAL( clicked() ), this, SLOT( syncPlugin() ) ); m_syncButton->setWhatsThis( tr( "Click here if you want to synchronize all parameters with VST plugin." ) ); l->addWidget( m_syncButton, 0, 0, 1, 2, Qt::AlignLeft ); m_displayAutomatedOnly = new QPushButton( tr( "Automated" ), this ); connect( m_displayAutomatedOnly, SIGNAL( clicked() ), this, SLOT( displayAutomatedOnly() ) ); m_displayAutomatedOnly->setWhatsThis( tr( "Click here if you want to display automated parameters only." ) ); l->addWidget( m_displayAutomatedOnly, 0, 1, 1, 2, Qt::AlignLeft ); m_closeButton = new QPushButton( tr( " Close " ), widget ); connect( m_closeButton, SIGNAL( clicked() ), this, SLOT( closeWindow() ) ); m_closeButton->setWhatsThis( tr( "Close VST plugin knob-controller window." ) ); l->addWidget( m_closeButton, 0, 2, 1, 7, Qt::AlignLeft ); for( int i = 0; i < 10; i++ ) { l->addItem( new QSpacerItem( 68, 45, QSizePolicy::Fixed, QSizePolicy::Fixed ), 0, i ); } const QMap & dump = m_vi->m_plugin->parameterDump(); m_vi->paramCount = dump.size(); bool isVstKnobs = true; if (m_vi->vstKnobs == NULL) { m_vi->vstKnobs = new knob *[ m_vi->paramCount ]; isVstKnobs = false; } if (m_vi->knobFModel == NULL) { m_vi->knobFModel = new FloatModel *[ m_vi->paramCount ]; } char paramStr[35]; QStringList s_dumpValues; if (isVstKnobs == false) { for( int i = 0; i < m_vi->paramCount; i++ ) { sprintf( paramStr, "param%d", i); s_dumpValues = dump[ paramStr ].split( ":" ); m_vi->vstKnobs[ i ] = new knob( knobBright_26, this, s_dumpValues.at( 1 ) ); m_vi->vstKnobs[ i ]->setHintText( s_dumpValues.at( 1 ) + ":", "" ); m_vi->vstKnobs[ i ]->setLabel( s_dumpValues.at( 1 ).left( 15 ) ); sprintf( paramStr, "%d", i); m_vi->knobFModel[ i ] = new FloatModel( (s_dumpValues.at( 2 )).toFloat(), 0.0f, 1.0f, 0.01f, castModel(), tr( paramStr ) ); connect( m_vi->knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) ); m_vi->vstKnobs[i] ->setModel( m_vi->knobFModel[i] ); } } int i = 0; for( int lrow = 1; lrow < ( int( m_vi->paramCount / 10 ) + 1 ) + 1; lrow++ ) { for( int lcolumn = 0; lcolumn < 10; lcolumn++ ) { if( i < m_vi->paramCount ) { l->addWidget( m_vi->vstKnobs[i], lrow, lcolumn, Qt::AlignCenter ); } i++; } } l->setRowStretch( ( int( m_vi->paramCount / 10) + 1), 1 ); l->setColumnStretch( 10, 1 ); widget->setLayout(l); widget->setAutoFillBackground(true); m_vi->m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_vi->m_scrollArea->setPalette( QApplication::palette( m_vi->m_scrollArea ) ); m_vi->m_scrollArea->setMinimumHeight( 64 ); m_vi->m_scrollArea->setWidget( widget ); m_vi->m_subWindow->show(); } void manageVestigeInstrumentView::closeWindow() { m_vi->m_subWindow->hide(); } void manageVestigeInstrumentView::syncPlugin( void ) { char paramStr[35]; QStringList s_dumpValues; const QMap & dump = m_vi->m_plugin->parameterDump(); float f_value; for( int i = 0; i < m_vi->paramCount; i++ ) { // only not automated knobs are synced from VST // those auto-setted values are not jurnaled, tracked for undo / redo if( !( m_vi->knobFModel[ i ]->isAutomated() || m_vi->knobFModel[ i ]->controllerConnection() ) ) { sprintf( paramStr, "param%d", i ); s_dumpValues = dump[ paramStr ].split( ":" ); f_value = ( s_dumpValues.at( 2 ) ).toFloat(); m_vi->knobFModel[ i ]->setAutomatedValue( f_value ); m_vi->knobFModel[ i ]->setInitValue( f_value ); } } } void manageVestigeInstrumentView::displayAutomatedOnly( void ) { bool isAuto = QString::compare( m_displayAutomatedOnly->text(), tr( "Automated" ) ) == 0; for( int i = 0; i< m_vi->paramCount; i++ ) { if( !( m_vi->knobFModel[ i ]->isAutomated() || m_vi->knobFModel[ i ]->controllerConnection() ) ) { if( m_vi->vstKnobs[ i ]->isVisible() == true && isAuto ) { m_vi->vstKnobs[ i ]->hide(); m_displayAutomatedOnly->setText( "All" ); } else { m_vi->vstKnobs[ i ]->show(); m_displayAutomatedOnly->setText( "Automated" ); } } } } manageVestigeInstrumentView::~manageVestigeInstrumentView() { if( m_vi->knobFModel != NULL ) { for( int i = 0; i < m_vi->paramCount; i++ ) { delete m_vi->knobFModel[ i ]; delete m_vi->vstKnobs[ i ]; } } if (m_vi->vstKnobs != NULL) { delete []m_vi->vstKnobs; m_vi->vstKnobs = NULL; } if( m_vi->knobFModel != NULL ) { delete [] m_vi->knobFModel; m_vi->knobFModel = NULL; } if (m_vi->m_scrollArea != NULL) { delete m_vi->m_scrollArea; m_vi->m_scrollArea = NULL; } if ( m_vi->m_subWindow != NULL ) { m_vi->m_subWindow->setAttribute(Qt::WA_DeleteOnClose); m_vi->m_subWindow->close(); if ( m_vi->m_subWindow != NULL ) delete m_vi->m_subWindow; m_vi->m_subWindow = NULL; } m_vi->p_subWindow = NULL; } void manageVestigeInstrumentView::setParameter( void ) { Model *action = qobject_cast(sender()); int knobUNID = action->displayName().toInt(); if ( m_vi->m_plugin != NULL ) { m_vi->m_plugin->setParam( knobUNID, m_vi->knobFModel[knobUNID]->value() ); } } void manageVestigeInstrumentView::dragEnterEvent( QDragEnterEvent * _dee ) { if( _dee->mimeData()->hasFormat( stringPairDrag::mimeType() ) ) { QString txt = _dee->mimeData()->data( stringPairDrag::mimeType() ); if( txt.section( ':', 0, 0 ) == "vstplugin" ) { _dee->acceptProposedAction(); } else { _dee->ignore(); } } else { _dee->ignore(); } } void manageVestigeInstrumentView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == "vstplugin" ) { m_vi->loadFile( value ); _de->accept(); return; } _de->ignore(); } void manageVestigeInstrumentView::paintEvent( QPaintEvent * ) { m_vi->m_subWindow->setWindowTitle( m_vi->instrumentTrack()->name() + tr( " - VST plugin control" ) ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new vestigeInstrument( static_cast( _data ) ); } } #include "moc_vestige.cxx" lmms-1.1.3/plugins/vestige/vestige.h000066400000000000000000000100751247673406200174500ustar00rootroot00000000000000/* * vestige.h - instrument VeSTige for hosting VST-plugins * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VESTIGE_H #define _VESTIGE_H #include #include #include #include #include "Instrument.h" #include "InstrumentView.h" #include "note.h" #include "knob.h" #include "AutomatableModel.h" class QPixmap; class QPushButton; class pixmapButton; class VstPlugin; class vestigeInstrument : public Instrument { Q_OBJECT public: vestigeInstrument( InstrumentTrack * _instrument_track ); virtual ~vestigeInstrument(); virtual void play( sampleFrame * _working_buffer ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName( void ) const; virtual void loadFile( const QString & _file ); virtual Flags flags() const { return IsSingleStreamed | IsMidiBased; } virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 ); virtual PluginView * instantiateView( QWidget * _parent ); protected slots: void setParameter( void ); private: void closePlugin( void ); VstPlugin * m_plugin; QMutex m_pluginMutex; QString m_pluginDLL; QMdiSubWindow * m_subWindow; QScrollArea * m_scrollArea; knob ** vstKnobs; FloatModel ** knobFModel; QObject * p_subWindow; int paramCount; friend class VestigeInstrumentView; friend class manageVestigeInstrumentView; } ; class manageVestigeInstrumentView : public InstrumentView { Q_OBJECT public: manageVestigeInstrumentView( Instrument * _instrument, QWidget * _parent, vestigeInstrument * m_vi2 ); virtual ~manageVestigeInstrumentView(); protected slots: void syncPlugin( void ); void displayAutomatedOnly( void ); void setParameter( void ); void closeWindow(); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void paintEvent( QPaintEvent * _pe ); private: static QPixmap * s_artwork; vestigeInstrument * m_vi; QWidget *widget; QGridLayout * l; QPushButton * m_syncButton; QPushButton * m_displayAutomatedOnly; QPushButton * m_closeButton; } ; class VestigeInstrumentView : public InstrumentView { Q_OBJECT public: VestigeInstrumentView( Instrument * _instrument, QWidget * _parent ); virtual ~VestigeInstrumentView(); protected slots: void updateMenu( void ); void openPlugin( void ); void managePlugin( void ); void openPreset( void ); void savePreset( void ); void nextProgram(); void previousProgram(); void selPreset( void ); void toggleGUI( void ); void noteOffAll( void ); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); virtual void paintEvent( QPaintEvent * _pe ); private: virtual void modelChanged( void ); static QPixmap * s_artwork; vestigeInstrument * m_vi; int lastPosInMenu; pixmapButton * m_openPluginButton; pixmapButton * m_openPresetButton; pixmapButton * m_rolLPresetButton; pixmapButton * m_rolRPresetButton; QPushButton * m_selPresetButton; QPushButton * m_toggleGUIButton; pixmapButton * m_managePluginButton; pixmapButton * m_savePresetButton; Instrument * _instrument2; QWidget * _parent2; } ; #endif lmms-1.1.3/plugins/vibed/000077500000000000000000000000001247673406200152515ustar00rootroot00000000000000lmms-1.1.3/plugins/vibed/CMakeLists.txt000066400000000000000000000004421247673406200200110ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(vibedstrings vibed.cpp nine_button_selector.cpp string_container.cpp vibrating_string.cpp vibed.h nine_button_selector.h string_container.h vibrating_string.h MOCFILES vibed.h nine_button_selector.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/vibed/artwork.png000066400000000000000000000337651247673406200174660ustar00rootroot00000000000000PNG  IHDRjbKGD7IDATx_Ddǻ즛n.X梋a/."!""""%D%XkYIdIdJd}Ibe{?339ϟ?sf89gy=~><]5^"L-jL-RgTelf1V–ycX&f-tKE./ǦKit2Gyy9<XJCtE|4^{X֋**h;N0ssNǣg=7-{O ܴksN0*e=%ܛN|=ǽ%L{VpOܴ{f |,z&9Fj\ssnQؗ{R5ECv\po:j6j-6=6A`7^f-Kyr&0-G΍ G0ʋe*R,5bQ,}/ y+>\%~Bb w}ݰ}lv5՟ZKzY멗nVpwRA+*sîw tu*zJwo+^2i!´ [n$᱆< }^{{x/;fF4 ODm<.U9`zJwWiQwLOQ{шzw0Q <>\}Q*̭, Z~BK'7Y~A/|.B=;cFI],'gkf(CqDZ %V, fz[&ީDp/G|G46g \c%Z-bBz94g 鎻}sqBtxffW7w,oS/޾lϯ~~~>:>YވxIUc8>:~#6vP15j qo?^ؙoλCNvva:~xt֝>B A2 prM,oS}9>%Ⳁ{8p`|al#3}3xd@\?~yz~]5A/i➐|M{#R]'ED|]\j) ?ZKwK@/PݧE COѴac槨z| {o/F]wpg~=@wz߻_P'y{{:@RS;pq i 9η Tq(^} w*QpzW6c# 6@owZ8v{nyŀA!P>P8 {z&"i;<^o.ᮚ W|bQ_\^FZHTAhW*>s;*ytݺk|?L݇#(Xs:گl?@WoAcAcOr&= -9Xhܡ@P^ உ(p,'%O,߳{^B2G\qw=1\'w\vѮ95 Ǯ㮁>uwr@@AC@Q4)">g=^NrM}ꖞbzBrsܵSQ@݁ |fNc]%wx^7w7⛂{=>cw~16q>FݠK| '{#0>414q9̸׆qq;q,{wH^{з1;< w1!p~Tqq2ooc]&>˸wi/ 7+ϯC/nMe;YOq/NL͚qop~e}RM' :1 ??$2"c4⎅qwXM}vpKi6vTsq  wm/lc! wCL{Q}26=x;w(ck]pO5р0)yD[$mos*+jIJ{7%sشW \J SDqnꅍzgΙ$p@.^ ]=#Z0"0gxgci)0T]w18^$QcAϤ{+|"MwHq渃|{ngTVcᾸ{fޞǽMwi'zp#]əyKyw)sܳ2Ѵq!F 398vpL{*}k}lƆƽM%q$^ĝ 3OPGE½L{;C\R,Hxqk=fmpWL<}&,93!>ǽM{"q0f/NcʸG3{朏׻*"JpOH8/^, i;XqoNG#(Fpj6"l <_ޖ-T7ܽa{p'pK3Bw#95;* wiݨ3E|{˵PŝF)܈2l1*Ľ3aqY½D&o{(;Jvݕ=o:cN q#t>ƌ;/θ'M<ǝ&qO} wuCKw7^3gj;F{yQ)ދ{ķ0-&cqdݏ{ 3q!^qO{y؇{u(;"Pp D_"\T_osoݽpFn{ YH.ܳNm05w\@geWpFF; w=z- |qeu%w=`;/ ;4*?b1ֺ"J[&=^6.ϵ^,0{J縷ݴD9ǝ*p>Ѥr:h[ng KEJW>u|{[>ܫF;g;/y[n){ƔLkPɧq}4]枸!qmҬ1y U31A FupQ!ܕ*I=#g[ɴv F}T P4p9%clp>ހ{rqXШ|n+Ne}wgLǚX|U|Jp:ÝCp/r}ހ~bL^½Md / s}p 6Bi${VL"2& w=д3y"Uٔ4/lmYՈ =76+`{9u"OuD.bզuG~s 0mzXܓkioJ ApWv;`zwMW_/lr-+eS"sb(Ԏ5 Nw:&qǪFۣ=zóu髼'{(s]cpnp/ vc׈[՛wO2U~;`?>|j nk%LSJu;]uȸ=w4Xۃۻ{,;X>I=XndL:-T>wpwF/cWK,yeڸt=Pj > eZ2&wrMM;Ո;D7ƨsa8\ǃu.|g^7ο_ͮlgqO4ƽ٦aL%WqK "a>0/Q{xt̗>7FAn!@K)6t'>ǽ0Xn>LN2ڣ$`vZ_XCS}eG$M{7'Y * {qVmp7Oq,ye|T4b>}=WJ,2nioCqY2- %Ǝ蝄v,qwc=7M1( Q.QB6; 0C3jmFܝii޺q׳?8Ýrwŏ1IuD|X Fc)1IP5e`J؛t ǝb47%dnLwNh Ľ‡Q7)>PqW5sӋpjp'kIt.}]bIIT~Zw)iy 8qB F~;ܴ7uwl#uwDzEBg>EwU%֛e[KƄ]Emqǟ[P΋/<*Һ_\өCiE1iD#۩x^# x۟wwwrOG=>bm{za7|=]p=h\ #qN2>Aicaai'_d)0蟞-|b3ܻz ]l+2ZXb¸wq_B֝_(}vetiH_ &d"pfĽW]S){E⋍bFź-8{wQ;Q{|_ XpMV7h7Aٰ Ivzk(z2ƁlNXÝ_)9qU=MDI$p/onǞ`?;eC΃QCPOHȸUܻ{q*A%cDɢa]Wq!Up A[ͱY\1?n`a@`AeywG!ypV]vxtLu\CɈxr2F;3z b͍ĝcWD.qiKMx}]MB=1z1i[Ž z3R"-lwˎ\$a=YoO܉K.lsֳ cDK4}7Nw#eSk+uVBBr6E֙ ;L; e?a?nW_rac߁kpy|zqaBܗ]_O{|jW" 菒+69ګބ̺55<詂 "1ǽX="OYa`M_O-P?ea=Ó3o*s(֡a(uu}3 ◰ Nбelj69Ӯ½؈{ 뎸g S`[Rh/y:r{`a\?};yϲړuy Э]!Ԝ']BhXt+ w 邞hDŽn$ɀG"p*ALEܱG'g]7Va]*^P^pPIvu7:G}v]Y> #Sm;L9mY'NS nI w]{Q {LW@ύzcQޮJQHָV<,p.ejkֽ5pOufW{Uy\\K [f~M2( VmRxnF4ՏeyOoxLP\LFqOuwS,褞uU)~uo@ܓmzS<{9M@4]}opO@EJj.$2ƈA#'yL1p<ޫ֝DNpOuǣ\ p$e[^ʹ뉯FRjldXc{{CVc]Huf`mH1\@8f1 L+>ȅ;o:Hb\r6 bkZqztCYe^s ڰn=N5:tRk9kIms֕ʓ#f]ۯ>SQg Œ Yo>(*GXw]V{-:ۻ޳85XЍ*zEmЦqD045ˊw.a{a뀩OMg2&Md}9N%sU=R_W92==h9sU+X;g 5x>'{[ ik4dZfHv C̠` 5OD= }qc=`݌/٢=mzx _\+qcCd85|] t/lp'֭p{[2%G'+AO|H:˦݇M@vqo2x7yx{|Qwt mp笇Ɲ2Xt32^G {Uޞu_NfIv=a4&lr 3;P`d=fۋ hWI wqXÝ[<ǯ]fSi8ɘp`܋q·ipo;gTy lϕ'q$:r*vЫ[c=6ۑ u ߤvlS6(9H kW8..'ސYgqoSgvgE|D,͚I&,P;.jw#`=ۗc'`=3a5>§}mSa%;5;'ͺL[T~~fٴŬ1fmXB9XmqF8=Lh=(MwiL#㍊i(3D@ ,%YWח(sSpa=iĝ}^(q e[we]3%3zlG^1nzdǕڙlujcz ]B!4-2Ac&g|,?}V,=}}ۋwړ"җyӞ޺[NC8ijM9Y.nvo^w=pi0|Vn:8bip/ʘ*K4Vd$vAD8"xKC 3Σ}^ys[l\DmL*RI]o)Eܭ |n^&`~#&?,#![{ЂЫZ6&w{BGQUU1,Tmv٨S6>7۾}rqײИyuQ! ]k&YpX{ܩqz*Q6ad#NU,whAtJX#5\qGCxXKij֪w =IK(7;,K*R`Gf[ńd `~ kdױd}7u( wJ)#'8$xfzӞ!c"=B=p{5RuUT9ᾁ>p_q KFֳ{d#0#㐉C{u Kfe;z Q]^?"MWԑG45@WLYwR bVFr;읷bU2*E➳.$X֪WnĽYq|5#&yB͌=%z3]4&"A[Y]nV͋cj;fj $YGjdb];lc[wxj2&)k:_cBp/b:Yт'+WSQU]k:rcsܫݟɰƽ$nzSMRg8p9ណ]'Hy=ve܍YoUܫ6F<> ΚLQM6QʫKxS"N$,a( -Y =;юutňycboek:[|G)ý<#» _6G(pΏIh$;WS#cc㓓Vp .]k6p7j:^VƝ'mB c ;+Kx[*{]^_؞YZ÷L/WJܢ>gV_uwddlbrv41=wl<5=m̱Iض:C[bF'={??nV6p93`z?.on=<|Z]|94"Ex;P-6%iǖ9\ggQIg4C7˚d;!~>ް_Kbw{zlU^]C5sg~{necxr}~>ݭ, LcX^]^\ŧxa/ ^u:+0(0W7?;1P_^UՍM-Ss0q\V12:> [ħ[+3cӥrY#c^|kmc55;ti6mp% 'W,G)+,zQl+qOSۤk M$Z5[kQyFbît`W7#yG=C]mjrۦY%2ᥡ]W Ό̏;hՍW-Z/t=>-X)(|Տ?n>YlŁ6a'g'}u5cǏ 9P7 pyyf)m;}W VS-ȸJTo:2 }bX|Nw1fƏۃ?;w} ۏ[ ǧLL?BI,02x@~ };=Ǖ8ú};"u6b7ھwyrfqjJ&&NNk`O<˨ xzx౐Y l}rj{>Kq&%48x^W6v>|-LWP`+u,#l,{]쁸cd"A-]s.,R g2s :r,?E;hY'^mo]__!8ss8vϢV8Z;PC2L̬VxD̢x:BKl3Dw~ǝ%뎶 VliXYX3PwhEt'6Rszaa&ENd7wF'gAyQĔOyOeh~XqIS5Ce:wT|fãTa^ IӃpD+?|`*Xnj܁#\}Ŝn54c'zy},8~/=5{5gh ggyYc7HП7we,6~fygÙA2l$(k<]^TM`rJR䮢:W;oŽO2VA6Ϟtn0 h 1,x{<+9Bmoۻ{hWp,+T }wphȢr-{|?jiޢNR2&)ɳOPOE8;|uI325?pa+k!skۨH/XGiHBk=*ROmVMȮ Q9Ij$ d1ʰ7s4wfjK`uț&LfTTxQl)U{[&x1%Ru x*6i=_$/kXRrI\E#;£=[VV[hO9@<3pd_X1 lɛbl9T }ɣLn TԇjNvy:18GY剓qob0D 6F_T,d) \,%iܻL9+X dJ` ĝ?h9S8SHC ҍ&-NaBPM;tpE#+;֛}z.Dل}güxkǝdYZ]n fzƪg<. d|S+6~9IdzUhn"d7l3ǝz>~%ZdEnikI}(@8]f\%c ܪ*cvqXo;47y ZȝBn*}Ma=={P~sknL|IPh7w2?G3,??bVprKs^m[R!qTJǎ ٚ z _=<q7vqI~|]VE&uk ӯ'g?q6 WhZzAqO34%|bdg5v1NCqʺSfPxPI|8]~Ce4ÓljouN$Rk7ހD7c8GdTaDof N`c4fPbH@-mh}7gIJֿn;|J.$ m iR ᧦ɱz9[_FB#xɹKsx.f脁7 6T:@Ҭz܋t.NƊXvF) X-EnfS9 ZCgj:\RɄdZ,\meXRlpU̬ǭ3z?YG;8r,PBVX")^i֫=G沞$Y֣ϵ@CϘY[gu34ΚY(1 pJ&"70d e}>UUUVRRWSRWTSYZZZVVd`_e``mllussysrzy{{~}Ĺj<uIDAT[e0 F~ JpE*,ua:?"p"8E!7IENDB`lmms-1.1.3/plugins/vibed/button_-2_on.png000066400000000000000000000004731247673406200202700ustar00rootroot00000000000000PNG  IHDR(PLTE   !!" "!#!#$x%$y%${%%q&&^'&_'&)'Q''R''S''U')>(*-)*7)++*36DFNrOQlRTVUUUVXYZZaccdaWoIDATKR@fU)v?K Ns*S^|oo{ޚk!mĽ6q(b,| @4%e4>IENDB`lmms-1.1.3/plugins/vibed/button_1_off.png000066400000000000000000000004001247673406200203360ustar00rootroot00000000000000PNG  IHDR(cPLTE++*210<;:LIHUUUVRRYZZgggtnmwqqytszttľlRXIDAT[G0 DPi&T?%E6/OJ馢O3QK$Vfc $e`I:H/)8+#KpO|+7ᤴIENDB`lmms-1.1.3/plugins/vibed/button_1_on.png000066400000000000000000000004031247673406200202030ustar00rootroot00000000000000PNG  IHDR(]PLTE   #%%l&%o&%r&(H():)*1)++*+U+CEHJQSSfTUUUYZZcdwx!))bKGDr +TIDAT[@@ ER;Sn#&7d'e[$,yDvY5!Fdf4oZ$Or=HFELIHNLKUUUYZZ^^^fbahccnihŹȼ**eIDAT[eC@F]ŢvPjy;Bds(㦔yk7\s)ZZa$B-es+3tXLRםZ@pc(jIENDB`lmms-1.1.3/plugins/vibed/button_4_on.png000066400000000000000000000004521247673406200202120ustar00rootroot00000000000000PNG  IHDR(uPLTE   ! " "!#"$"&#%#$$%%)&`'&b'&g&(E((H()=)*6)++*//.25UUUW^XYZZ\^bKGD&ZcIDATK@29f,dl @=e~t]5;4B{b&}mC95  {wت04y%M IENDB`lmms-1.1.3/plugins/vibed/button_5_off.png000066400000000000000000000005061247673406200203510ustar00rootroot00000000000000PNG  IHDR(PLTE++*00/765876:98LIHUUUVSSYZZZVVa\\pjjsqqxrq~xxø||vUnIDAT[c`G bҒ )% PrE dD\NNN^Nr X YCU.m8 u\ue~!My8GC_GE/`pQtfIIENDB`lmms-1.1.3/plugins/vibed/button_5_on.png000066400000000000000000000005161247673406200202140ustar00rootroot00000000000000PNG  IHDR(PLTE       !!! # # # "!#!#$%%p&%v&&i&'U''['(H((P()9)*+)*0)*6)++*//.OpPUUUYZZ]^lmtuyy<%9bKGD/# lIDATK@̋)se7lmYʼnnlUc0s[1o>@X[:xDY=ϥ(IENDB`lmms-1.1.3/plugins/vibed/button_6_off.png000066400000000000000000000005561247673406200203570ustar00rootroot00000000000000PNG  IHDR(PLTE++*//.00/210443544:98FDCHEEIGFUUUYZZ\XW^^^_[Z___fa`mhgojixrq{utzyM!xIDAT[cF ʊ )EM UEy W\\BBB_CMR\0 Q؊H3BVBp13+bj 㲛i2zppE PIENDB`lmms-1.1.3/plugins/vibed/button_6_on.png000066400000000000000000000005721247673406200202170ustar00rootroot00000000000000PNG  IHDR(PLTE       !!!!"" #!%"$#$#$$x%%p&%s&&`'&f&&h&'W''Z'(E((F()9))C(),*/)*0)*1)*3)*4)++*//./2038;UUUUWV_WW^XYZZ]^fgJ&AbKGD;9ltIDAT[eEQ ww  a`,LQл~neW>!@Qtmk:=ܣdi=d7njvbmш4Sf%;r) qܩO *IENDB`lmms-1.1.3/plugins/vibed/button_7_off.png000066400000000000000000000004321247673406200203510ustar00rootroot00000000000000PNG  IHDR(xPLTE++*00/654ECBLIHUUUYZZZ[[ggghccsmmY~c]IDAT[eW0 fJBXaa1'OU"$Cc{2rjH\ÁWrh9p3)S>j!'>5IENDB`lmms-1.1.3/plugins/vibed/button_7_on.png000066400000000000000000000004411247673406200202130ustar00rootroot00000000000000PNG  IHDR(rPLTE   !#!##%#$#'$%%l&%)&b'&)(H()B(*0)*5)++*//.367:HJSfTUUUX[YYZZ]^&bKGD%]IDAT 0KZAG*w{ >s8GwQq8l3vp 3M+<>KyMKzLNPOQUUUVXVWYZZSbKGD70GuIDAT[e`ϡC<̟xGsa5bm z=ij+7\lKNd7i><2k4ZǑ 렓$Aߺkr]}6(IENDB`lmms-1.1.3/plugins/vibed/button_9_off.png000066400000000000000000000005341247673406200203560ustar00rootroot00000000000000PNG  IHDR(PLTE++*..-654:98A?>ECBKHHUUUYZZ[XWgggmllxrqytsŹK\uIDAT[e@ \uނ_aGvj-XUֺ bρsD,"mkI"D nU4l5im]^G? QJwx)n> 4J> IENDB`lmms-1.1.3/plugins/vibed/button_9_on.png000066400000000000000000000005611247673406200202200ustar00rootroot00000000000000PNG  IHDR(PLTE   !!!!!" # ""$"$#%#$$~%$%$%%p&%r&'T'(H()9))?()B(),*+)*-)*5)++*+/,///.58597:I~KQkRSfTUUUYZZY[><bKGD70GwIDAT[eGA Q&8Oi2Ũj"Up9vr*D&{@F_nj܉DR*]K7]9vF*Y|FIENDB`lmms-1.1.3/plugins/vibed/button_down.png000066400000000000000000000002361247673406200203220ustar00rootroot00000000000000PNG  IHDRf0'PLTE++*//.UUUYZZ9{KT2IDATc`@P NOf` KKKK f`qgFA&VTl Ռ_IENDB`lmms-1.1.3/plugins/vibed/button_f_off.png000066400000000000000000000004501247673406200204300ustar00rootroot00000000000000PNG  IHDR({PLTE++*//.HFEIGFJHGUUUYVUYZZ^ZY```d`_hccpoo{utøghIDAT[e@{CZb /R#v 9v$-@Tv-E3aNz4d*fԹsY^\&}! IENDB`lmms-1.1.3/plugins/vibed/button_f_on.png000066400000000000000000000004521247673406200202740ustar00rootroot00000000000000PNG  IHDR(~PLTE  "!#!##$%s&&^'&b''T''Y'(E((F((G(*+)*/)++*//.36?BADEGHJJMORPnQUUUV`WXZYZZ^`uv/@gIDAT1@9nCbmgߥANp&@< Ж(u}?oeNlaDُo1s[A-('0b?#8icVIENDB`lmms-1.1.3/plugins/vibed/button_up.png000066400000000000000000000002561247673406200200010ustar00rootroot00000000000000PNG  IHDRf00PLTE++*..-UUUYZZ'%9IDAT[c09oΜ9`sϙ3w00 h!(-H bP][IENDB`lmms-1.1.3/plugins/vibed/logo.png000066400000000000000000000103401247673406200167150ustar00rootroot00000000000000PNG  IHDR00WsRGBbKGD pHYs  tIME )1*`IDAThZY\u=tޚnc&)ˤ$  F`#+ G A pD,ۊl+Vd&C-e.25\fH융^-3))H~R`zUS[7A#4==-jF[F~1ߎ%CΐQe% 9 !tsnnnU CCC\. cL(h&5cՙg8Y˸ψD;G%-_0md}}=;r xg}?HZޟi;?v?xX{wpaψ,$lVCiH4,9im?C0;^OGͻqJ9?= &fL2J)N8a8} )Xz]4,ا/{Q()7bL]jKӔxLkj8Mt1MRf,Ƚmξ,'iQz]4 b333}F˲5D̹(K\xձRf)4eif)B)<su{@GAF9h,H)6Eh4n_`X`Ovy+n4+z\g,&('ZkbJ),{9_y2)s^h la:\pQʉ`?LߵI 8ˆxqZϘ16 D[Y ι  @rޞ{bpnCkVSD#V\~O4m$RŚ:Mn;qqyV3E~BΙppk-}@kpB!xYE?&KӵGWk*sm[4 @fWj+pPuȌA2"Ych换s|fLc3x__iƄsgot|[܏TeȴqV0+Pz='cŅGwX|,TX8ێƷa50 / 4!]IiiXaZˢ(bQ1k-3 K$,0V<@nDjL {wks| mW_둑umi46wl&< Ap+w#wG>vYi%IR7QiwaC-L#ܸ1q@`sc "DYGZ8 1icW/#7Rhm`F6i[Vu{'X*\zZ7c TƱv͝**s0O,De'Ay ,`^)y[`QHmw?k\@6 @v0 7Ev R 4w(M""0Bʈ|o"EW?cdmIf2S:u;anpCCC-~m2 iX8$x(C(a0 yȘr:G Ou9pHii mH]oVf{&rJ`nÂmTD b<]]`]h 1 A \Bu^'.7if{W͛'wcm5>A Y;߆*qCb<0DBXYk=C$񀘈pC ;S$J{!3 mmʔu8wȾ},u*3PVpn8c‹Q(a1,B(97W.!U*kKL Ә9|pzjt{|_6B ޺ӻ}E* h4]:3,r3z|σ c\(}?sif;,z\.uq{_SSS\.ڹ಴-RmߋC(M/3"0"ٙ+uNvoamWhzT;25}pI1WEtm6m?1x"pE\G]̟ |oVǏaV0hk2 y"`qX c!Yq(!+fIl_,sO,BYm#ʀYcCcXQ/r#!(D% YLzQ,L<jow`|AϽQ*ZsWSSSϢ(Z4ȴC4GZ zq| 96sbFxPq5Eq(nw̝r+>MǀT*RYEJ^ڋ 61x Xo(]|sYu|^T̮eI&&&j `m23hIFXQx[qiC-$@fÀ'"wѣveh4Jc0f=&܋"GyA"Fa|-? |(SSSRzY^xLRm&觰zg>IKKKe!x ^ryg}Gt 8k-LV+CCCJ1C||-J'T$F:wzge:A"Q+px…w="1>dm~g%' etP-Z|VI6ڠh^^x{~ sQ<{1 f@6FђRvo,`e2y~xxo}<3={̏U{IM-G7j} :In˨@ͷM~cμ[>zKA* m `Z|sddfxakE$VS{\ߢtتgh%Tf`Aaȹ:?,DQ8m-uUcl) ''#A9d0R1jCJʠŕ_[xwrrQ*40 P,́͟|BЗ` !8Zg`ɤ-.rԷn޽bh>`X ( . C)o/&Zǹc6%~X?W*ڬT*qt? B(J63ssFf,YZoOf8;=P(.|`QϢ:)9up%+Z.{.uDy' tzsGIENDB`lmms-1.1.3/plugins/vibed/nine_button_selector.cpp000066400000000000000000000140761247673406200222110ustar00rootroot00000000000000/* * nine_button_selector.cpp * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "nine_button_selector.h" #include #include "caption_menu.h" #include "embed.h" nineButtonSelector::nineButtonSelector( QPixmap _button0_on, QPixmap _button0_off, QPixmap _button1_on, QPixmap _button1_off, QPixmap _button2_on, QPixmap _button2_off, QPixmap _button3_on, QPixmap _button3_off, QPixmap _button4_on, QPixmap _button4_off, QPixmap _button5_on, QPixmap _button5_off, QPixmap _button6_on, QPixmap _button6_off, QPixmap _button7_on, QPixmap _button7_off, QPixmap _button8_on, QPixmap _button8_off, int _default, int _x, int _y, QWidget * _parent ): QWidget( _parent ), IntModelView( new nineButtonSelectorModel(0, 8, _default, NULL, QString::null, true ), this ) { setFixedSize( 50, 50 ); move( _x, _y ); m_button = new pixmapButton( this, NULL ); m_button->move( 1, 1 ); m_button->setActiveGraphic( _button0_on ); m_button->setInactiveGraphic( _button0_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button0Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 18, 1 ); m_button->setActiveGraphic( _button1_on ); m_button->setInactiveGraphic( _button1_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button1Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 35, 1 ); m_button->setActiveGraphic( _button2_on ); m_button->setInactiveGraphic( _button2_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button2Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 1, 18 ); m_button->setActiveGraphic( _button3_on ); m_button->setInactiveGraphic( _button3_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button3Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 18, 18 ); m_button->setActiveGraphic( _button4_on ); m_button->setInactiveGraphic( _button4_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button4Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 35, 18 ); m_button->setActiveGraphic( _button5_on ); m_button->setInactiveGraphic( _button5_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button5Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 1, 35 ); m_button->setActiveGraphic( _button6_on ); m_button->setInactiveGraphic( _button6_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button6Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 18, 35 ); m_button->setActiveGraphic( _button7_on ); m_button->setInactiveGraphic( _button7_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button7Clicked() ) ); m_buttons.append( m_button ); m_button = new pixmapButton( this, NULL ); m_button->move( 35, 35 ); m_button->setActiveGraphic( _button8_on ); m_button->setInactiveGraphic( _button8_off ); m_button->setChecked( false ); connect( m_button, SIGNAL ( clicked () ), this, SLOT ( button8Clicked() ) ); m_buttons.append( m_button ); m_lastBtn = m_buttons[_default]; m_lastBtn->setChecked( true ); } nineButtonSelector::~ nineButtonSelector() { for( int i = 0; i < 9; i++ ) { delete m_buttons[i]; } } void nineButtonSelector::button0Clicked() { setSelected( 0 ); } void nineButtonSelector::button1Clicked() { setSelected( 1 ); } void nineButtonSelector::button2Clicked() { setSelected( 2 ); } void nineButtonSelector::button3Clicked() { setSelected( 3 ); } void nineButtonSelector::button4Clicked() { setSelected( 4 ); } void nineButtonSelector::button5Clicked() { setSelected( 5 ); } void nineButtonSelector::button6Clicked() { setSelected( 6 ); } void nineButtonSelector::button7Clicked() { setSelected( 7 ); } void nineButtonSelector::button8Clicked() { setSelected( 8 ); } void nineButtonSelector::modelChanged() { updateButton( model()->value() ); } void nineButtonSelector::setSelected( int _new_button ) { model()->setValue(_new_button); updateButton( _new_button ); } void nineButtonSelector::updateButton( int _new_button ) { m_lastBtn->setChecked( false ); m_lastBtn->update(); m_lastBtn = m_buttons[_new_button]; m_lastBtn->setChecked( true ); m_lastBtn->update(); emit nineButtonSelection( _new_button ); } void nineButtonSelector::contextMenuEvent( QContextMenuEvent * ) { captionMenu contextMenu( windowTitle(), this ); contextMenu.addHelpAction(); contextMenu.exec( QCursor::pos() ); } void nineButtonSelector::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } #include "moc_nine_button_selector.cxx" lmms-1.1.3/plugins/vibed/nine_button_selector.h000066400000000000000000000045651247673406200216600ustar00rootroot00000000000000/* * nine_button_selector.h * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _NINE_BUTTON_SELECTOR_H #define _NINE_BUTTON_SELECTOR_H #include "pixmap_button.h" class nineButtonSelector: public QWidget , public IntModelView { Q_OBJECT public: nineButtonSelector( QPixmap _button0_on, QPixmap _button0_off, QPixmap _button1_on, QPixmap _button1_off, QPixmap _button2_on, QPixmap _button2_off, QPixmap _button3_on, QPixmap _button3_off, QPixmap _button4_on, QPixmap _button4_off, QPixmap _button5_on, QPixmap _button5_off, QPixmap _button6_on, QPixmap _button6_off, QPixmap _button7_on, QPixmap _button7_off, QPixmap _button8_on, QPixmap _button8_off, int _default, int _x, int _y, QWidget * _parent); virtual ~nineButtonSelector(); // inline int getSelected() { // return( castModel()->value() ); // }; protected: void setSelected( int _new_button ); public slots: void button0Clicked(); void button1Clicked(); void button2Clicked(); void button3Clicked(); void button4Clicked(); void button5Clicked(); void button6Clicked(); void button7Clicked(); void button8Clicked(); void contextMenuEvent( QContextMenuEvent * ); void displayHelp(); signals: void nineButtonSelection( int ); private: virtual void modelChanged(); void updateButton( int ); QList m_buttons; pixmapButton * m_button; pixmapButton * m_lastBtn; } ; typedef IntModel nineButtonSelectorModel; #endif lmms-1.1.3/plugins/vibed/normalize_active.png000066400000000000000000000005151247673406200213130ustar00rootroot00000000000000PNG  IHDR(PLTE      !!" #"$#%#%#%#%$x%%v&'T'(H((P()C(*0)*1)++*8:<>EGKzMLwNPRPRQlRUUUXZYYZZ||UbKGD/# kIDAT 0kPJ]rR7AҖ4.Z B$l^_.BkgW]kPJ2bS@ 0cbd {!$ ʕIENDB`lmms-1.1.3/plugins/vibed/normalize_inactive.png000066400000000000000000000005121247673406200216370ustar00rootroot00000000000000PNG  IHDR(PLTE++*110210FDCLIHTQPUUUYVUYZZnmmzxx~xx~{{zzºǻ {bKGD.TkIDAT[eG1Dj`hLS u#Ir- '#In<n:{#!r2Ub~ҨѼ'V&9^0 ̀IENDB`lmms-1.1.3/plugins/vibed/smooth_active.png000066400000000000000000000005511247673406200206240ustar00rootroot00000000000000PNG  IHDR(PLTE    !  "" # # " "!#!%#$#$#$#'#'$x%$%'S''W''Z'']'(M((,)<))?()A(),*+)*2)++*//.69j,(([4y7r!\χve7}_Nf 2)/{zgIQ֌\)ѰoHTo~(qf-IENDB`lmms-1.1.3/plugins/vibed/smooth_inactive.png000066400000000000000000000005561247673406200211600ustar00rootroot00000000000000PNG  IHDR(PLTE++*321><;B@?CBAQNMUUUWTSYZZ\YX`\[c_^sqqzyʾLbKGD6GwIDAT[e@Dmq]LXf55<~Sʛu27f*:ӽI|6@~Z nIȖDk?\6:|uc1k ތIENDB`lmms-1.1.3/plugins/vibed/string_container.cpp000066400000000000000000000042341247673406200213300ustar00rootroot00000000000000/* * string_container.cpp - contains a collection of strings * * Copyright (c) 2006 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "string_container.h" stringContainer::stringContainer(const float _pitch, const sample_rate_t _sample_rate, const int _buffer_length, const int _strings ) : m_pitch( _pitch ), m_sampleRate( _sample_rate ), m_bufferLength( _buffer_length ) { for( int i = 0; i < _strings; i++ ) { m_exists.append( false ); } } void stringContainer::addString(int _harm, const float _pick, const float _pickup, const float * _impulse, const float _randomize, const float _string_loss, const float _detune, const int _oversample, const bool _state, const int _id ) { float harm; switch( _harm ) { case 0: harm = 0.25f; break; case 1: harm = 0.5f; break; case 2: harm = 1.0f; break; case 3: harm = 2.0f; break; case 4: harm = 3.0f; break; case 5: harm = 4.0f; break; case 6: harm = 5.0f; break; case 7: harm = 6.0f; break; case 8: harm = 7.0f; break; default: harm = 1.0f; } m_strings.append( new vibratingString( m_pitch * harm, _pick, _pickup, const_cast(_impulse), m_bufferLength, m_sampleRate, _oversample, _randomize, _string_loss, _detune, _state ) ); m_exists[_id] = true; } lmms-1.1.3/plugins/vibed/string_container.h000066400000000000000000000035541247673406200210010ustar00rootroot00000000000000/* string_container.h - contains a collection of strings * * Copyright (c) 2006 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _STRING_CONTAINER_H #define _STRING_CONTAINER_H #include #include "vibrating_string.h" class stringContainer { public: stringContainer(const float _pitch, const sample_rate_t _sample_rate, const int _buffer_length, const int _strings = 9 ); void addString( int _harm, const float _pick, const float _pickup, const float * _impluse, const float _randomize, const float _string_loss, const float _detune, const int _oversample, const bool _state, const int _id ); bool exists( int _id ) const { return m_exists[_id]; } ~stringContainer() { int strings = m_strings.count(); for( int i = 0; i < strings; i++ ) { delete m_strings[i]; } } float getStringSample( int _string ) { return m_strings[_string]->nextSample(); } private: QVector m_strings; const float m_pitch; const sample_rate_t m_sampleRate; const int m_bufferLength; QVector m_exists; } ; #endif lmms-1.1.3/plugins/vibed/vibed.cpp000066400000000000000000000541531247673406200170560ustar00rootroot00000000000000/* * vibed.cpp - combination of PluckedStringSynth and BitInvader * * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "vibed.h" #include "engine.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" #include "tooltip.h" #include "base64.h" #include "caption_menu.h" #include "Oscillator.h" #include "string_container.h" #include "templates.h" #include "volume.h" #include "song.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT vibedstrings_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Vibed", QT_TRANSLATE_NOOP( "pluginBrowser", "Vibrating string modeler" ), "Danny McRae ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL }; } vibed::vibed( InstrumentTrack * _instrumentTrack ) : Instrument( _instrumentTrack, &vibedstrings_plugin_descriptor ) { FloatModel * knob; BoolModel * led; nineButtonSelectorModel * harmonic; graphModel * graphTmp; for( int harm = 0; harm < 9; harm++ ) { knob = new FloatModel( DefaultVolume, MinVolume, MaxVolume, 1.0f, this, tr( "String %1 volume" ).arg( harm+1 ) ); m_volumeKnobs.append( knob ); knob = new FloatModel( 0.0f, 0.0f, 0.05f, 0.001f, this, tr( "String %1 stiffness" ).arg( harm+1 ) ); m_stiffnessKnobs.append( knob ); knob = new FloatModel( 0.0f, 0.0f, 0.05f, 0.005f, this, tr( "Pick %1 position" ).arg( harm+1 ) ); m_pickKnobs.append( knob ); knob = new FloatModel( 0.05f, 0.0f, 0.05f, 0.005f, this, tr( "Pickup %1 position" ).arg( harm+1 ) ); m_pickupKnobs.append( knob ); knob = new FloatModel( 0.0f, -1.0f, 1.0f, 0.01f, this, tr( "Pan %1" ).arg( harm+1 ) ); m_panKnobs.append( knob ); knob = new FloatModel( 0.0f, -0.1f, 0.1f, 0.001f, this, tr( "Detune %1" ).arg( harm+1 ) ); m_detuneKnobs.append( knob ); knob = new FloatModel( 0.0f, 0.0f, 0.75f, 0.01f, this, tr( "Fuzziness %1 " ).arg( harm+1 ) ); m_randomKnobs.append( knob ); knob = new FloatModel( 1, 1, 16, 1, this, tr( "Length %1" ).arg( harm+1 ) ); m_lengthKnobs.append( knob ); led = new BoolModel( false, this, tr( "Impulse %1" ).arg( harm+1 ) ); m_impulses.append( led ); led = new BoolModel( harm==0, this, tr( "Octave %1" ).arg( harm+1 ) ); m_powerButtons.append( led ); harmonic = new nineButtonSelectorModel( 2, 0, 8, this ); m_harmonics.append( harmonic ); graphTmp = new graphModel( -1.0, 1.0, __sampleLength, this ); graphTmp->setWaveToSine(); m_graphs.append( graphTmp ); } } vibed::~vibed() { } void vibed::saveSettings( QDomDocument & _doc, QDomElement & _this ) { QString name; // Save plugin version _this.setAttribute( "version", "0.1" ); for( int i = 0; i < 9; i++ ) { name = "active" + QString::number( i ); _this.setAttribute( name, QString::number( m_powerButtons[i]->value() ) ); if( m_powerButtons[i]->value() ) { name = "volume" + QString::number( i ); m_volumeKnobs[i]->saveSettings( _doc, _this, name ); name = "stiffness" + QString::number( i ); m_stiffnessKnobs[i]->saveSettings( _doc, _this, name ); name = "pick" + QString::number( i ); m_pickKnobs[i]->saveSettings( _doc, _this, name ); name = "pickup" + QString::number( i ); m_pickupKnobs[i]->saveSettings( _doc, _this, name ); name = "octave" + QString::number( i ); m_harmonics[i]->saveSettings( _doc, _this, name ); name = "length" + QString::number( i ); m_lengthKnobs[i]->saveSettings( _doc, _this, name ); name = "pan" + QString::number( i ); m_panKnobs[i]->saveSettings( _doc, _this, name ); name = "detune" + QString::number( i ); m_detuneKnobs[i]->saveSettings( _doc, _this, name ); name = "slap" + QString::number( i ); m_randomKnobs[i]->saveSettings( _doc, _this, name ); name = "impulse" + QString::number( i ); m_impulses[i]->saveSettings( _doc, _this, name ); QString sampleString; base64::encode( (const char *)m_graphs[i]->samples(), __sampleLength * sizeof(float), sampleString ); name = "graph" + QString::number( i ); _this.setAttribute( name, sampleString ); } } } void vibed::loadSettings( const QDomElement & _this ) { QString name; for( int i = 0; i < 9; i++ ) { name = "active" + QString::number( i ); m_powerButtons[i]->setValue( _this.attribute( name ).toInt() ); if( m_powerButtons[i]->value() && _this.hasAttribute( "volume" + QString::number( i ) ) ) { name = "volume" + QString::number( i ); m_volumeKnobs[i]->loadSettings( _this, name ); name = "stiffness" + QString::number( i ); m_stiffnessKnobs[i]->loadSettings( _this, name ); name = "pick" + QString::number( i ); m_pickKnobs[i]->loadSettings( _this, name ); name = "pickup" + QString::number( i ); m_pickupKnobs[i]->loadSettings( _this, name ); name = "octave" + QString::number( i ); m_harmonics[i]->loadSettings( _this, name ); name = "length" + QString::number( i ); m_lengthKnobs[i]->loadSettings( _this, name ); name = "pan" + QString::number( i ); m_panKnobs[i]->loadSettings( _this, name ); name = "detune" + QString::number( i ); m_detuneKnobs[i]->loadSettings( _this, name ); name = "slap" + QString::number( i ); m_randomKnobs[i]->loadSettings( _this, name ); name = "impulse" + QString::number( i ); m_impulses[i]->loadSettings( _this, name ); int size = 0; float * shp = 0; base64::decode( _this.attribute( "graph" + QString::number( i ) ), &shp, &size ); // TODO: check whether size == 128 * sizeof( float ), // otherwise me might and up in a segfault m_graphs[i]->setSamples( shp ); delete[] shp; // TODO: do one of the following to avoid // "uninitialized" wave-shape-buttongroup // - activate random-wave-shape-button here // - make wave-shape-buttons simple toggle-buttons // instead of checkable buttons // - save and restore selected wave-shape-button } } // update(); } QString vibed::nodeName() const { return( vibedstrings_plugin_descriptor.name ); } void vibed::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { _n->m_pluginData = new stringContainer( _n->frequency(), engine::mixer()->processingSampleRate(), __sampleLength ); for( int i = 0; i < 9; ++i ) { if( m_powerButtons[i]->value() ) { static_cast( _n->m_pluginData )->addString( m_harmonics[i]->value(), m_pickKnobs[i]->value(), m_pickupKnobs[i]->value(), m_graphs[i]->samples(), m_randomKnobs[i]->value(), m_stiffnessKnobs[i]->value(), m_detuneKnobs[i]->value(), static_cast( m_lengthKnobs[i]->value() ), m_impulses[i]->value(), i ); } } } const fpp_t frames = _n->framesLeftForCurrentPeriod(); stringContainer * ps = static_cast( _n->m_pluginData ); for( fpp_t i = 0; i < frames; ++i ) { _working_buffer[i][0] = 0.0f; _working_buffer[i][1] = 0.0f; int s = 0; for( int string = 0; string < 9; ++string ) { if( ps->exists( string ) ) { // pan: 0 -> left, 1 -> right const float pan = ( m_panKnobs[string]->value() + 1 ) / 2.0f; const sample_t sample = ps->getStringSample( s ) * m_volumeKnobs[string]->value() / 100.0f; _working_buffer[i][0] += ( 1.0f - pan ) * sample; _working_buffer[i][1] += pan * sample; s++; } } } instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void vibed::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } PluginView * vibed::instantiateView( QWidget * _parent ) { return( new vibedView( this, _parent ) ); } vibedView::vibedView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); m_volumeKnob = new knob( knobBright_26, this ); m_volumeKnob->setVolumeKnob( true ); m_volumeKnob->move( 103, 142 ); m_volumeKnob->setHintText( tr( "Volume:" ) + " ", "" ); m_volumeKnob->setWhatsThis( tr( "The 'V' knob sets the volume " "of the selected string." ) ); m_stiffnessKnob = new knob( knobBright_26, this ); m_stiffnessKnob->move( 129, 142 ); m_stiffnessKnob->setHintText( tr( "String stiffness:" ) + " ", "" ); m_stiffnessKnob->setWhatsThis( tr( "The 'S' knob sets the stiffness of the selected string. The stiffness " "of the string affects how long the string will ring out. The lower " "the setting, the longer the string will ring." ) ); m_pickKnob = new knob( knobBright_26, this ); m_pickKnob->move( 153, 142 ); m_pickKnob->setHintText( tr( "Pick position:" ) + " ", "" ); m_pickKnob->setWhatsThis( tr( "The 'P' knob sets the position where the selected string will be 'picked'. " "The lower the setting the closer the pick is to the bridge." ) ); m_pickupKnob = new knob( knobBright_26, this ); m_pickupKnob->move( 177, 142 ); m_pickupKnob->setHintText( tr( "Pickup position:" ) + " ", "" ); m_pickupKnob->setWhatsThis( tr( "The 'PU' knob sets the position where the vibrations will be monitored " "for the selected string. The lower the setting, the closer the " "pickup is to the bridge." ) ); m_panKnob = new knob( knobBright_26, this ); m_panKnob->move( 105, 187 ); m_panKnob->setHintText( tr( "Pan:" ) + " ", "" ); m_panKnob->setWhatsThis( tr( "The Pan knob determines the location of the selected string in the stereo " "field." ) ); m_detuneKnob = new knob( knobBright_26, this ); m_detuneKnob->move( 150, 187 ); m_detuneKnob->setHintText( tr( "Detune:" ) + " ", "" ); m_detuneKnob->setWhatsThis( tr( "The Detune knob modifies the pitch of the selected string. Settings less " "than zero will cause the string to sound flat. Settings greater than zero " "will cause the string to sound sharp." ) ); m_randomKnob = new knob( knobBright_26, this ); m_randomKnob->move( 194, 187 ); m_randomKnob->setHintText( tr( "Fuzziness:" ) + " ", "" ); m_randomKnob->setWhatsThis( tr( "The Slap knob adds a bit of fuzz to the selected string which is most " "apparent during the attack, though it can also be used to make the string " "sound more 'metallic'.") ); m_lengthKnob = new knob( knobBright_26, this ); m_lengthKnob->move( 23, 193 ); m_lengthKnob->setHintText( tr( "Length:" ) + " ", "" ); m_lengthKnob->setWhatsThis( tr( "The Length knob sets the length of the selected string. Longer strings " "will both ring longer and sound brighter, however, they will also eat up " "more CPU cycles." ) ); m_impulse = new ledCheckBox( "", this ); m_impulse->move( 23, 94 ); toolTip::add( m_impulse, tr( "Impulse or initial state" ) ); m_impulse->setWhatsThis( tr( "The 'Imp' selector determines whether the waveform in the graph is to be " "treated as an impulse imparted to the string by the pick or the initial " "state of the string." ) ); m_harmonic = new nineButtonSelector( PLUGIN_NAME::getIconPixmap( "button_-2_on" ), PLUGIN_NAME::getIconPixmap( "button_-2_off" ), PLUGIN_NAME::getIconPixmap( "button_-1_on" ), PLUGIN_NAME::getIconPixmap( "button_-1_off" ), PLUGIN_NAME::getIconPixmap( "button_f_on" ), PLUGIN_NAME::getIconPixmap( "button_f_off" ), PLUGIN_NAME::getIconPixmap( "button_2_on" ), PLUGIN_NAME::getIconPixmap( "button_2_off" ), PLUGIN_NAME::getIconPixmap( "button_3_on" ), PLUGIN_NAME::getIconPixmap( "button_3_off" ), PLUGIN_NAME::getIconPixmap( "button_4_on" ), PLUGIN_NAME::getIconPixmap( "button_4_off" ), PLUGIN_NAME::getIconPixmap( "button_5_on" ), PLUGIN_NAME::getIconPixmap( "button_5_off" ), PLUGIN_NAME::getIconPixmap( "button_6_on" ), PLUGIN_NAME::getIconPixmap( "button_6_off" ), PLUGIN_NAME::getIconPixmap( "button_7_on" ), PLUGIN_NAME::getIconPixmap( "button_7_off" ), 2, 21, 127, this ); m_harmonic->setWindowTitle( tr( "Octave" ) ); m_harmonic->setWhatsThis( tr( "The Octave selector is used to choose which harmonic of the note the " "string will ring at. For example, '-2' means the string will ring two " "octaves below the fundamental, 'F' means the string will ring at the " "fundamental, and '6' means the string will ring six octaves above the " "fundamental." ) ); m_stringSelector = new nineButtonSelector( PLUGIN_NAME::getIconPixmap( "button_1_on" ), PLUGIN_NAME::getIconPixmap( "button_1_off" ), PLUGIN_NAME::getIconPixmap( "button_2_on" ), PLUGIN_NAME::getIconPixmap( "button_2_off" ), PLUGIN_NAME::getIconPixmap( "button_3_on" ), PLUGIN_NAME::getIconPixmap( "button_3_off" ), PLUGIN_NAME::getIconPixmap( "button_4_on" ), PLUGIN_NAME::getIconPixmap( "button_4_off" ), PLUGIN_NAME::getIconPixmap( "button_5_on" ), PLUGIN_NAME::getIconPixmap( "button_5_off" ), PLUGIN_NAME::getIconPixmap( "button_6_on" ), PLUGIN_NAME::getIconPixmap( "button_6_off" ), PLUGIN_NAME::getIconPixmap( "button_7_on" ), PLUGIN_NAME::getIconPixmap( "button_7_off" ), PLUGIN_NAME::getIconPixmap( "button_8_on" ), PLUGIN_NAME::getIconPixmap( "button_8_off" ), PLUGIN_NAME::getIconPixmap( "button_9_on" ), PLUGIN_NAME::getIconPixmap( "button_9_off" ), 0, 21, 39, this); m_graph = new graph( this ); m_graph->setWindowTitle( tr( "Impulse Editor" ) ); m_graph->setForeground( PLUGIN_NAME::getIconPixmap( "wavegraph4" ) ); m_graph->move( 76, 21 ); m_graph->resize(132, 104); m_graph->setWhatsThis( tr( "The waveform editor provides control over the initial state or impulse " "that is used to start the string vibrating. The buttons to the right of " "the graph will initialize the waveform to the selected type. The '?' " "button will load a waveform from a file--only the first 128 samples " "will be loaded.\n\n" "The waveform can also be drawn in the graph.\n\n" "The 'S' button will smooth the waveform.\n\n" "The 'N' button will normalize the waveform.") ); setWhatsThis( tr( "Vibed models up to nine independently vibrating strings. The 'String' " "selector allows you to choose which string is being edited. The 'Imp' " "selector chooses whether the graph represents an impulse or the initial " "state of the string. The 'Octave' selector chooses which harmonic the " "string should vibrate at.\n\n" "The graph allows you to control the initial state or impulse used to set the " "string in motion.\n\n" "The 'V' knob controls the volume. The 'S' knob controls the string's " "stiffness. The 'P' knob controls the pick position. The 'PU' knob " "controls the pickup position.\n\n" "'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob " "adds a bit of fuzz to the sound of the string.\n\n" "The 'Length' knob controls the length of the string.\n\n" "The LED in the lower right corner of the waveform editor determines " "whether the string is active in the current instrument." ) ); m_power = new ledCheckBox( "", this, tr( "Enable waveform" ) ); m_power->move( 212, 130 ); toolTip::add( m_power, tr( "Click here to enable/disable waveform." ) ); // String selector is not a part of the model m_stringSelector->setWindowTitle( tr( "String" ) ); m_stringSelector->setWhatsThis( tr( "The String selector is used to choose which string the controls are " "editing. A Vibed instrument can contain up to nine independently " "vibrating strings. The LED in the lower right corner of the " "waveform editor indicates whether the selected string is active." ) ); connect( m_stringSelector, SIGNAL( nineButtonSelection( int ) ), this, SLOT( showString( int ) ) ); showString( 0 ); m_sinWaveBtn = new pixmapButton( this, tr( "Sine wave" ) ); m_sinWaveBtn->move( 212, 24 ); m_sinWaveBtn->setActiveGraphic( embed::getIconPixmap( "sin_wave_active" ) ); m_sinWaveBtn->setInactiveGraphic( embed::getIconPixmap( "sin_wave_inactive" ) ); toolTip::add( m_sinWaveBtn, tr( "Use a sine-wave for " "current oscillator." ) ); connect( m_sinWaveBtn, SIGNAL (clicked () ), this, SLOT ( sinWaveClicked() ) ); m_triangleWaveBtn = new pixmapButton( this, tr( "Triangle wave" ) ); m_triangleWaveBtn->move( 212, 41 ); m_triangleWaveBtn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); m_triangleWaveBtn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); toolTip::add( m_triangleWaveBtn, tr( "Use a triangle-wave " "for current oscillator." ) ); connect( m_triangleWaveBtn, SIGNAL ( clicked () ), this, SLOT ( triangleWaveClicked( ) ) ); m_sawWaveBtn = new pixmapButton( this, tr( "Saw wave" ) ); m_sawWaveBtn->move( 212, 58 ); m_sawWaveBtn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); m_sawWaveBtn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); toolTip::add( m_sawWaveBtn, tr( "Use a saw-wave for " "current oscillator." ) ); connect( m_sawWaveBtn, SIGNAL (clicked () ), this, SLOT ( sawWaveClicked() ) ); m_sqrWaveBtn = new pixmapButton( this, tr( "Square wave" ) ); m_sqrWaveBtn->move( 212, 75 ); m_sqrWaveBtn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); m_sqrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); toolTip::add( m_sqrWaveBtn, tr( "Use a square-wave for " "current oscillator." ) ); connect( m_sqrWaveBtn, SIGNAL ( clicked () ), this, SLOT ( sqrWaveClicked() ) ); m_whiteNoiseWaveBtn = new pixmapButton( this, tr( "White noise wave" ) ); m_whiteNoiseWaveBtn->move( 212, 92 ); m_whiteNoiseWaveBtn->setActiveGraphic( embed::getIconPixmap( "white_noise_wave_active" ) ); m_whiteNoiseWaveBtn->setInactiveGraphic( embed::getIconPixmap( "white_noise_wave_inactive" ) ); toolTip::add( m_whiteNoiseWaveBtn, tr( "Use white-noise for " "current oscillator." ) ); connect( m_whiteNoiseWaveBtn, SIGNAL ( clicked () ), this, SLOT ( noiseWaveClicked() ) ); m_usrWaveBtn = new pixmapButton( this, tr( "User defined wave" ) ); m_usrWaveBtn->move( 212, 109 ); m_usrWaveBtn->setActiveGraphic( embed::getIconPixmap( "usr_wave_active" ) ); m_usrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "usr_wave_inactive" ) ); toolTip::add( m_usrWaveBtn, tr( "Use a user-defined " "waveform for current oscillator." ) ); connect( m_usrWaveBtn, SIGNAL ( clicked () ), this, SLOT ( usrWaveClicked() ) ); m_smoothBtn = new pixmapButton( this, tr( "Smooth" ) ); m_smoothBtn->move( 79, 129 ); m_smoothBtn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_active" ) ); m_smoothBtn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_inactive" ) ); m_smoothBtn->setChecked( false ); toolTip::add( m_smoothBtn, tr( "Click here to smooth waveform." ) ); connect( m_smoothBtn, SIGNAL ( clicked () ), this, SLOT ( smoothClicked() ) ); m_normalizeBtn = new pixmapButton( this, tr( "Normalize" ) ); m_normalizeBtn->move( 96, 129 ); m_normalizeBtn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "normalize_active" ) ); m_normalizeBtn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "normalize_inactive" ) ); m_normalizeBtn->setChecked( false ); toolTip::add( m_normalizeBtn, tr( "Click here to normalize waveform." ) ); connect( m_normalizeBtn, SIGNAL ( clicked () ), this, SLOT ( normalizeClicked() ) ); } void vibedView::modelChanged() { showString( 0 ); } void vibedView::showString( int _string ) { vibed * v = castModel(); m_pickKnob->setModel( v->m_pickKnobs[_string] ); m_pickupKnob->setModel( v->m_pickupKnobs[_string] ); m_stiffnessKnob->setModel( v->m_stiffnessKnobs[_string] ); m_volumeKnob->setModel( v->m_volumeKnobs[_string] ); m_panKnob->setModel( v->m_panKnobs[_string] ); m_detuneKnob->setModel( v->m_detuneKnobs[_string] ); m_randomKnob->setModel( v->m_randomKnobs[_string] ); m_lengthKnob->setModel( v->m_lengthKnobs[_string] ); m_graph->setModel( v->m_graphs[_string] ); m_impulse->setModel( v->m_impulses[_string] ); m_harmonic->setModel( v->m_harmonics[_string] ); m_power->setModel( v->m_powerButtons[_string] ); } void vibedView::sinWaveClicked() { m_graph->model()->setWaveToSine(); engine::getSong()->setModified(); } void vibedView::triangleWaveClicked() { m_graph->model()->setWaveToTriangle(); engine::getSong()->setModified(); } void vibedView::sawWaveClicked() { m_graph->model()->setWaveToSaw(); engine::getSong()->setModified(); } void vibedView::sqrWaveClicked() { m_graph->model()->setWaveToSquare(); engine::getSong()->setModified(); } void vibedView::noiseWaveClicked() { m_graph->model()->setWaveToNoise(); engine::getSong()->setModified(); } void vibedView::usrWaveClicked() { QString fileName = m_graph->model()->setWaveToUser(); toolTip::add( m_usrWaveBtn, fileName ); engine::getSong()->setModified(); } void vibedView::smoothClicked() { m_graph->model()->smooth(); engine::getSong()->setModified(); } void vibedView::normalizeClicked() { m_graph->model()->normalize(); engine::getSong()->setModified(); } void vibedView::contextMenuEvent( QContextMenuEvent * ) { captionMenu contextMenu( model()->displayName(), this ); contextMenu.addHelpAction(); contextMenu.exec( QCursor::pos() ); } void vibedView::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new vibed( static_cast( _data ) ) ); } } #include "moc_vibed.cxx" lmms-1.1.3/plugins/vibed/vibed.h000066400000000000000000000065151247673406200165220ustar00rootroot00000000000000/* * vibed.h - combination of PluckedStringSynth and BitInvader * * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VIBED_H #define _VIBED_H #include "Instrument.h" #include "InstrumentView.h" #include "graph.h" #include "knob.h" #include "pixmap_button.h" #include "led_checkbox.h" #include "nine_button_selector.h" class vibedView; class NotePlayHandle; class vibed : public Instrument { Q_OBJECT public: vibed( InstrumentTrack * _instrument_track ); virtual ~vibed(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual Flags flags() const { return IsNotBendable; } virtual PluginView * instantiateView( QWidget * _parent ); private: QList m_pickKnobs; QList m_pickupKnobs; QList m_stiffnessKnobs; QList m_volumeKnobs; QList m_panKnobs; QList m_detuneKnobs; QList m_randomKnobs; QList m_lengthKnobs; QList m_powerButtons; QList m_graphs; QList m_impulses; QList m_harmonics; static const int __sampleLength = 128; friend class vibedView; } ; class vibedView : public InstrumentView { Q_OBJECT public: vibedView( Instrument * _instrument, QWidget * _parent ); virtual ~vibedView() {}; public slots: void showString( int _string ); void contextMenuEvent( QContextMenuEvent * ); void displayHelp(); protected slots: void sinWaveClicked(); void triangleWaveClicked(); void sawWaveClicked(); void sqrWaveClicked(); void noiseWaveClicked(); void usrWaveClicked(); void smoothClicked(); void normalizeClicked(); private: virtual void modelChanged(); // String-related knob * m_pickKnob; knob * m_pickupKnob; knob * m_stiffnessKnob; knob * m_volumeKnob; knob * m_panKnob; knob * m_detuneKnob; knob * m_randomKnob; knob * m_lengthKnob; graph * m_graph; nineButtonSelector * m_harmonic; ledCheckBox * m_impulse; ledCheckBox * m_power; // Not in model nineButtonSelector * m_stringSelector; pixmapButton * m_smoothBtn; pixmapButton * m_normalizeBtn; // From impulse editor pixmapButton * m_sinWaveBtn; pixmapButton * m_triangleWaveBtn; pixmapButton * m_sqrWaveBtn; pixmapButton * m_sawWaveBtn; pixmapButton * m_whiteNoiseWaveBtn; pixmapButton * m_usrWaveBtn; }; #endif lmms-1.1.3/plugins/vibed/vibrating_string.cpp000066400000000000000000000073771247673406200213460ustar00rootroot00000000000000/* * vibrating_sring.h - model of a vibrating string lifted from pluckedSynth * * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "vibrating_string.h" #include "templates.h" #include "interpolation.h" #include "Mixer.h" #include "engine.h" vibratingString::vibratingString( float _pitch, float _pick, float _pickup, float * _impulse, int _len, sample_rate_t _sample_rate, int _oversample, float _randomize, float _string_loss, float _detune, bool _state ) : m_oversample( 2 * _oversample / (int)( _sample_rate / engine::mixer()->baseSampleRate() ) ), m_randomize( _randomize ), m_stringLoss( 1.0f - _string_loss ), m_state( 0.1f ) { m_outsamp = new sample_t[m_oversample]; int string_length; string_length = static_cast( m_oversample * _sample_rate / _pitch ) + 1; string_length += static_cast( string_length * -_detune ); int pick = static_cast( ceil( string_length * _pick ) ); if( not _state ) { m_impulse = new float[string_length]; resample( _impulse, _len, string_length ); } else { m_impulse = new float[_len]; for( int i = 0; i < _len; i++ ) { m_impulse[i] = _impulse[i]; } } m_toBridge = vibratingString::initDelayLine( string_length, pick ); m_fromBridge = vibratingString::initDelayLine( string_length, pick ); vibratingString::setDelayLine( m_toBridge, pick, m_impulse, _len, 0.5f, _state ); vibratingString::setDelayLine( m_fromBridge, pick, m_impulse, _len, 0.5f, _state); m_choice = static_cast( m_oversample * static_cast( rand() ) / RAND_MAX ); m_pickupLoc = static_cast( _pickup * string_length ); } vibratingString::delayLine * vibratingString::initDelayLine( int _len, int _pick ) { delayLine * dl = new vibratingString::delayLine[_len]; dl->length = _len; if( _len > 0 ) { dl->data = new sample_t[_len]; float r; float offset = 0.0f; for( int i = 0; i < dl->length; i++ ) { r = static_cast( rand() ) / RAND_MAX; offset = ( m_randomize / 2.0f - m_randomize ) * r; dl->data[i] = offset; } } else { dl->data = NULL; } dl->pointer = dl->data; dl->end = dl->data + _len - 1; return( dl ); } void vibratingString::freeDelayLine( delayLine * _dl ) { if( _dl ) { delete[] _dl->data; delete[] _dl; } } void vibratingString::resample( float *_src, f_cnt_t _src_frames, f_cnt_t _dst_frames ) { for( f_cnt_t frame = 0; frame < _dst_frames; ++frame ) { const float src_frame_float = frame * (float) _src_frames / _dst_frames; const float frac_pos = src_frame_float - static_cast( src_frame_float ); const f_cnt_t src_frame = tLimit( static_cast( src_frame_float ), 1, _src_frames - 3 ); m_impulse[frame] = cubicInterpolate( _src[src_frame - 1], _src[src_frame + 0], _src[src_frame + 1], _src[src_frame + 2], frac_pos ); } } lmms-1.1.3/plugins/vibed/vibrating_string.h000066400000000000000000000153321247673406200210010ustar00rootroot00000000000000/* * vibrating_string.h - model of a vibrating string lifted from pluckedSynth * * Copyright (c) 2006-2007 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VIBRATING_STRING_H #define _VIBRATING_STRING_H #include #include #include "lmms_basics.h" class vibratingString { public: vibratingString( float _pitch, float _pick, float _pickup, float * impluse, int _len, sample_rate_t _sample_rate, int _oversample, float _randomize, float _string_loss, float _detune, bool _state ); inline ~vibratingString() { delete[] m_outsamp; delete[] m_impulse; vibratingString::freeDelayLine( m_fromBridge ); vibratingString::freeDelayLine( m_toBridge ); } inline sample_t nextSample() { sample_t ym0; sample_t ypM; for( int i = 0; i < m_oversample; i++) { // Output at pickup position m_outsamp[i] = fromBridgeAccess( m_fromBridge, m_pickupLoc ); m_outsamp[i] += toBridgeAccess( m_toBridge, m_pickupLoc ); // Sample traveling into "bridge" ym0 = toBridgeAccess( m_toBridge, 1 ); // Sample to "nut" ypM = fromBridgeAccess( m_fromBridge, m_fromBridge->length - 2 ); // String state update // Decrement pointer and then update fromBridgeUpdate( m_fromBridge, -bridgeReflection( ym0 ) ); // Update and then increment pointer toBridgeUpdate( m_toBridge, -ypM ); } return( m_outsamp[m_choice] ); } private: struct delayLine { sample_t * data; int length; sample_t * pointer; sample_t * end; } ; delayLine * m_fromBridge; delayLine * m_toBridge; int m_pickupLoc; int m_oversample; float m_randomize; float m_stringLoss; float * m_impulse; int m_choice; float m_state; sample_t * m_outsamp; delayLine * initDelayLine( int _len, int _pick ); static void freeDelayLine( delayLine * _dl ); void resample( float *_src, f_cnt_t _src_frames, f_cnt_t _dst_frames ); /* setDelayLine initializes the string with an impulse at the pick * position unless the impulse is longer than the string, in which * case the impulse gets truncated. */ inline void setDelayLine( delayLine * _dl, int _pick, const float * _values, int _len, float _scale, bool _state ) { float r; float offset; if( not _state ) { for( int i = 0; i < _pick; i++ ) { r = static_cast( rand() ) / RAND_MAX; offset = ( m_randomize / 2.0f - m_randomize ) * r; _dl->data[i] = _scale * _values[_dl->length - i] + offset; } for( int i = _pick; i < _dl->length; i++ ) { r = static_cast( rand() ) / RAND_MAX; offset = ( m_randomize / 2.0f - m_randomize ) * r; _dl->data[i] = _scale * _values[i - _pick] + offset ; } } else { if( _len + _pick > _dl->length ) { for( int i = _pick; i < _dl->length; i++ ) { r = static_cast( rand() ) / RAND_MAX; offset = ( m_randomize / 2.0f - m_randomize ) * r; _dl->data[i] = _scale * _values[i-_pick] + offset; } } else { for( int i = 0; i < _len; i++ ) { r = static_cast( rand() ) / RAND_MAX; offset = ( m_randomize / 2.0f - m_randomize ) * r; _dl->data[i+_pick] = _scale * _values[i] + offset; } } } } /* toBridgeUpdate(dl, insamp); * Places "nut-reflected" sample from upper delay-line into * current lower delay-line pointer position (which represents * x = 0 position). The pointer is then incremented (i.e. the * wave travels one sample to the left), turning the previous * position into an "effective" x = L position for the next * iteration. */ inline void toBridgeUpdate( delayLine * _dl, sample_t _insamp ) { register sample_t * ptr = _dl->pointer; *ptr = _insamp * m_stringLoss; ++ptr; if( ptr > _dl->end ) { ptr = _dl->data; } _dl->pointer = ptr; } /* fromBridgeUpdate(dl, insamp); * Decrements current upper delay-line pointer position (i.e. * the wave travels one sample to the right), moving it to the * "effective" x = 0 position for the next iteration. The * "bridge-reflected" sample from lower delay-line is then placed * into this position. */ inline void fromBridgeUpdate( delayLine * _dl, sample_t _insamp ) { register sample_t * ptr = _dl->pointer; --ptr; if( ptr < _dl->data ) { ptr = _dl->end; } *ptr = _insamp * m_stringLoss; _dl->pointer = ptr; } /* dlAccess(dl, position); * Returns sample "position" samples into delay-line's past. * Position "0" points to the most recently inserted sample. */ static inline sample_t dlAccess( delayLine * _dl, int _position ) { sample_t * outpos = _dl->pointer + _position; while( outpos < _dl->data ) { outpos += _dl->length; } while( outpos > _dl->end ) { outpos -= _dl->length; } return( *outpos ); } /* * Right-going delay line: * -->---->---->--- * x=0 * (pointer) * Left-going delay line: * --<----<----<--- * x=0 * (pointer) */ /* fromBridgeAccess(dl, position); * Returns spatial sample at position "position", where position zero * is equal to the current upper delay-line pointer position (x = 0). * In a right-going delay-line, position increases to the right, and * delay increases to the right => left = past and right = future. */ static inline sample_t fromBridgeAccess( delayLine * _dl, int _position ) { return( dlAccess( _dl, _position ) ); } /* toBridgeAccess(dl, position); * Returns spatial sample at position "position", where position zero * is equal to the current lower delay-line pointer position (x = 0). * In a left-going delay-line, position increases to the right, and * delay DEcreases to the right => left = future and right = past. */ static inline sample_t toBridgeAccess( delayLine * _dl, int _position ) { return( dlAccess( _dl, _position ) ); } inline sample_t bridgeReflection( sample_t _insamp ) { return( m_state = ( m_state + _insamp ) * 0.5 ); } } ; #endif lmms-1.1.3/plugins/vibed/wavegraph4.png000066400000000000000000000167401247673406200200370ustar00rootroot00000000000000PNG  IHDRh0X^IDATx][[Gr'yC~l!vŁ!oǶdI#i2wIs .oY#^&yc6U}fn$z!yX<]+ wy5ߙz}mNz\7&?f?~7p :}(Li*GO&cr۷=/`>)dd5Cl(_w]nԃơpMn[Wy!}cc|Tx=21ݩz%Lq}qVmVou(ޕ6k|G!/y+hJ7/D2kJKQH=xnx>W8u@_ O3&Wǵo %ϰlMl!ˢ=؏I18@QB)˴! u},dÊ؞ ^Q4!#,4lt((zb n& u)bE>gdnW!w_n:-V~-\8@ U.۱k- C]o32:.Hcg#V%y-~>Nmc-DwyK2,rEg0#{ڣ?_q<Ч4B%QNnmm%gzv^5;fH6aU33?(褢T>+(Ff,_Wlmԗ'EʟW'"~zIS?(9{U^;D2.^;ɼ3SL3Z9@c1ʪqcFej?cxҕcݫF#Ƽ0$pi-M1M?u~tB7$n;O [4nx7g~커ioRgSzoxgv萨IyӪ^%IL&fH ',Clrxۤͤ_*4wHz\o.B&z~k#_Jen'c}\rݡ|ޢIIz۬;ҏu[?IIWCP'D~KGZ}2:\ICEMdoo_;xjd OkIjjeg<_5ģ؏58B\C"?ҍ!xUU].@g*@R}FQ|&Ϭ~5j8A a70BZ:EDIe,z*W3zWƅ/g#%|p>.28 iYz/0ia7'8_:-b,P!vq?ڻ?g gke3)ohGgb}N9(K>[t`R23/Z.D}P}1dG>\]YZg &2O>/vY(㴬T/4VeيLR;yeoTxCާhxc{z 5fƛ0c n)Mt;tp 񎍬'vF h 1a0IF2Ze^Q# [DxG !Pl)W.BC n+_'&ʿHnBpWڿ'hl~>Rp+S;Nf4ջ=@5e 4xDg\\5&sb* ?4 T^>nP>A̓( `he#sqBڕ lO^#k眗Aw:=篅kk02Ќkkb?/xH#?T8J'o#KL'^ssҿD p?ڣ+bYV6>CF2x7/E@cJ+/]]~dxxa>rz2G0y0A8Hy$wenz w BHH3hVNke@O"+XbG~dWeKvhw,ퟔw w_ dDk={m`62@A剸J_k\0h U2$I Bu@ypbNHAn$ϣ9ܞn 2Bb"# qNd!8x[͏GLel.]n|钌g22 e=:|qJ`n'h!k:("} ܭ>5n?5Tqw|K ?j jj%1*["pIIү[N]H`,IqT ye.``}#@2@~MqZaƂϘy"=RWո,-a#,λ`?O&c[j\ ˰>+TkyFe4#C!$Xb](my-IqF`ԵaGg!& )R8@Ɯ%s-9z?^*v T ȯVYCd6KX$#rGYZGZx퇍xy8ZÏS(o"^Ҽ IFoyg ʴ8Sv` h|w _ReDL/A[d+gz*C3-Do?P^BP2evHujF|b+}Z}wgT2Xn֡N108teUm/`٭JݫVNNHxA7BՍzQV2:yV}(hvb~Uk-}D;EkѫWi׳FJ;ʷJ!?:hՍ3AԸ:pMXU1~:'\`|uT]Fhnrvǻ=E?ӏ4 38dC Zc*h!MJGӒ%B a"%Q=RFgaaMFhq뼄(o[Èf'R{P}`*D2:׏5ϳ}F93-T}ˈpO:.^! vݬ>CCҜmQ=eO}]B j2R|>cCEo+sGl3suP}:t+D|<2:}lUGP+o籜Yyv]*>3q E֩;3<%d ls6 bI y|s5 ?]6B= dE(IG㇢bq:) G?nwn'[ҴU$5$ A2֌uٕhx~ ֫h@@~X Ѫ.xȓ Z-/9'ˀgKι baއ#Bq}8i}j8sę[&jRpDVBzm'sQבgn _Jat>#g/yP_,ջ 6-Du+| i sRݠ<%ՂCL^&䐘XKs6zg,ɵQqC"k, b5xVѳ_F,8[e5,>պv gͷ.T#,bO hVwQ5|A=/dp,fPu52~ 8c}I@ghϷ~ 0/UCY{5~d8dz"8ru$ 1uBZ{v1fU#Ͽ rkaLp7ݥ$Ɉu=+v[,bn?`8g'$#۟۹wzPbΜ{淍O3MӨltIZC!XrfgD@3~牀q5 2vf793.C)a$fgJo:/s}ۏO00t,_%XՌyB*Ɉ,ddB+ZmP1n?)XG!~ˈqVy!i)IF\)2-ˀoue_ܕ5ߺ2BCgnW)qVę[oen5?)uTde k(sk6s-D4B2 ²@p3.<F@N|Gkx2TkT 2bYY@޼k!Nn?P;:,(Јar;.-IFБ X}.[h!+¸u:;!;!؁/g("a u؉O3#~da+>E ,0v>/|߻=R<ˀ3<[>n?ź68j$UbyB=m=P39۬G6;6^MNtg=}] ض24d߾mZVUCjG>X;[:Duu ϭZWmn oa><Gs%ՎGJ~Ys+Љ4Bvb@3 xIv=;(_Fl:!>edW}v\S[@؄n?54OG']Rpn'g]wQԵ$#|2yjAe-.Eu( J~uvV,[WUde+KH#ϝ=m`fqYn?bjl .v"2zٝq uNfd-mb/ KqG ޠ;\>mLDs6>[Lco  \ʸ2yXn[GA1ȃQvmdQ(*4w_3SG2,}l`^vW :Kʦw|^8ZNׂ,DQ(Wo3Ӻ(#;_ gn- x =cY 2h͔Z0 6d"I2`{T{|ub#~۸4B]̭aay7CB5? o^kb c5IENDB`lmms-1.1.3/plugins/vst_base/000077500000000000000000000000001247673406200157665ustar00rootroot00000000000000lmms-1.1.3/plugins/vst_base/CMakeLists.txt000066400000000000000000000041641247673406200205330ustar00rootroot00000000000000IF(LMMS_SUPPORT_VST) INCLUDE(BuildPlugin) IF(LMMS_BUILD_WIN32) ADD_DEFINITIONS(-DPTW32_STATIC_LIB) ADD_EXECUTABLE(RemoteVstPlugin "${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp") TARGET_LINK_LIBRARIES(RemoteVstPlugin -lQtCore4 -lpthread -lgdi32 -lws2_32) SET_TARGET_PROPERTIES(RemoteVstPlugin PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -O0") ADD_CUSTOM_COMMAND(TARGET RemoteVstPlugin POST_BUILD COMMAND "${STRIP}" "${CMAKE_CURRENT_BINARY_DIR}/RemoteVstPlugin.exe") INSTALL(TARGETS RemoteVstPlugin RUNTIME DESTINATION "${PLUGIN_DIR}") IF(LMMS_BUILD_WIN64) # build 32 bit version of RemoteVstPlugin for Win64 so we can load # 32 bit VST plugins ADD_SUBDIRECTORY(Win64) ENDIF(LMMS_BUILD_WIN64) ENDIF(LMMS_BUILD_WIN32) BUILD_PLUGIN(vstbase vst_base.cpp VstPlugin.cpp VstPlugin.h communication.h MOCFILES VstPlugin.h) IF(LMMS_BUILD_LINUX AND NOT WANT_VST_NOWINE) IF(LMMS_HOST_X86_64) SET(EXTRA_FLAGS -m32) # workaround for broken wineg++ in WINE 1.4 (shipped e.g. with Ubuntu Precise) EXEC_PROGRAM( ${WINE_CXX} ARGS "-v -m32 /dev/zero" OUTPUT_VARIABLE WINEBUILD_OUTPUT) if("${WINEBUILD_OUTPUT}" MATCHES ".*x86_64-linux-gnu/wine/libwinecrt0.a.*") SET(EXTRA_FLAGS ${EXTRA_FLAGS} -nodefaultlibs /usr/lib/i386-linux-gnu/wine/libwinecrt0.a -luser32 -lkernel32 -lgdi32) ENDIF() ENDIF(LMMS_HOST_X86_64) ADD_CUSTOM_COMMAND( SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp" COMMAND ${WINE_CXX} ARGS "-I\"${CMAKE_BINARY_DIR}\"" "-I\"${CMAKE_SOURCE_DIR}/include\"" "-I\"${CMAKE_INSTALL_PREFIX}/include/wine/windows\"" "-I\"${CMAKE_INSTALL_PREFIX}/include\"" -I/usr/include/wine/windows "\"${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp\"" -ansi -mwindows -lpthread ${EXTRA_FLAGS} -o RemoteVstPlugin COMMAND find -name RemoteVstPlugin.exe -exec mv "'{}'" RemoteVstPlugin "';'" TARGET vstbase OUTPUTS RemoteVstPlugin ) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES RemoteVstPlugin.exe.so) INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/RemoteVstPlugin" "${CMAKE_CURRENT_BINARY_DIR}/RemoteVstPlugin.exe.so" DESTINATION "${PLUGIN_DIR}") ENDIF(LMMS_BUILD_LINUX AND NOT WANT_VST_NOWINE) ENDIF(LMMS_SUPPORT_VST) lmms-1.1.3/plugins/vst_base/RemoteVstPlugin.cpp000066400000000000000000001275171247673406200216160ustar00rootroot00000000000000/* * RemoteVstPlugin.cpp - LMMS VST Support Layer (RemotePlugin client) * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * Code partly taken from (X)FST: * Copyright (c) 2004 Paul Davis * Copyright (c) 2004 Torben Hohn * Copyright (c) 2002 Kjetil S. Matheussen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lmmsconfig.h" #define BUILD_REMOTE_PLUGIN_CLIENT #include "RemotePlugin.h" #ifdef LMMS_HAVE_PTHREAD_H #include #endif #ifdef LMMS_HAVE_FCNTL_H #include #endif #ifdef LMMS_BUILD_LINUX #ifndef O_BINARY #define O_BINARY 0 #endif #ifdef LMMS_HAVE_SCHED_H #include #endif #include #endif #include #ifdef LMMS_BUILD_WIN32 #ifdef LMMS_BUILD_WIN64 #include "basename.c" #else #include #endif #endif #include #include #include #if kVstVersion < 2400 #define OLD_VST_SDK struct ERect { short top; short left; short bottom; short right; } ; #endif #include "lmms_basics.h" #include "Midi.h" #include "communication.h" #include "VstSyncData.h" #ifdef LMMS_BUILD_WIN32 #define USE_QT_SHMEM #endif #ifndef USE_QT_SHMEM #include #include #include #include #include #include #endif static VstHostLanguages hlang = LanguageEnglish; class RemoteVstPlugin; RemoteVstPlugin * __plugin = NULL; DWORD __GuiThreadID = 0; class RemoteVstPlugin : public RemotePluginClient { public: RemoteVstPlugin( key_t _shm_in, key_t _shm_out ); virtual ~RemoteVstPlugin(); virtual bool processMessage( const message & _m ); void init( const std::string & _plugin_file ); void initEditor(); virtual void process( const sampleFrame * _in, sampleFrame * _out ); virtual void processMidiEvent( const MidiEvent& event, const f_cnt_t offset ); // set given sample-rate for plugin virtual void updateSampleRate() { pluginDispatch( effSetSampleRate, 0, 0, NULL, (float) sampleRate() ); } // set given buffer-size for plugin virtual void updateBufferSize() { pluginDispatch( effSetBlockSize, 0, bufferSize() ); } inline bool isInitialized() const { return m_initialized; } // set given tempo void setBPM( const bpm_t _bpm ) { m_bpm = _bpm; } // determine VST-version the plugin uses inline int pluginVersion() { return pluginDispatch( effGetVendorVersion ); } // determine name of plugin const char * pluginName(); // determine vendor of plugin const char * pluginVendorString(); // determine product-string of plugin const char * pluginProductString(); // determine name of current program const char * programName(); // send name of current program back to host void sendCurrentProgramName(); // do a complete parameter-dump and post it void getParameterDump(); // read parameter-dump and set it for plugin void setParameterDump( const message & _m ); // post properties of specified parameter void getParameterProperties( const int _idx ); // save settings chunk of plugin into file void saveChunkToFile( const std::string & _file ); // restore settings chunk of plugin from file void loadChunkFromFile( const std::string & _file, int _len ); // restore settings chunk of plugin from file void loadPresetFile( const std::string & _file ); // sets given program index void setProgram( int index ); // rotate current program by given offset void rotateProgram( int offset ); // Load names of presets/programs void getProgramNames(); // Save presets/programs void savePreset( const std::string & _file ); // number of inputs virtual int inputCount() const { if( m_plugin ) { return m_plugin->numInputs; } return 0; } // number of outputs virtual int outputCount() const { if( m_plugin ) { return m_plugin->numOutputs; } return 0; } // has to be called as soon as input- or output-count changes void updateInOutCount(); inline void lock() { pthread_mutex_lock( &m_pluginLock ); } inline void unlock() { pthread_mutex_unlock( &m_pluginLock ); } static DWORD WINAPI processingThread( LPVOID _param ); static DWORD WINAPI guiEventLoop( LPVOID _param ); private: enum GuiThreadMessages { None, ProcessPluginMessage, GiveIdle, ClosePlugin } ; // callback used by plugin for being able to communicate with it's host static intptr_t hostCallback( AEffect * _effect, int32_t _opcode, int32_t _index, intptr_t _value, void * _ptr, float _opt ); bool load( const std::string & _plugin_file ); // thread-safe dispatching of plugin int pluginDispatch( int cmd, int param1 = 0, int param2 = 0, void * p = NULL, float f = 0 ) { int ret = 0; lock(); if( m_plugin ) { ret = m_plugin->dispatcher( m_plugin, cmd, param1, param2, p, f ); } unlock(); return ret; } // thread-safe dispatching of plugin int pluginDispatchNoLocking( int cmd, int param1 = 0, int param2 = 0, void * p = NULL, float f = 0 ) { if( m_plugin ) { return m_plugin->dispatcher( m_plugin, cmd, param1, param2, p, f ); } return 0; } std::string m_shortName; HINSTANCE m_libInst; AEffect * m_plugin; HWND m_window; intptr_t m_windowID; int m_windowWidth; int m_windowHeight; bool m_initialized; pthread_mutex_t m_pluginLock; float * * m_inputs; float * * m_outputs; typedef std::vector VstMidiEventList; VstMidiEventList m_midiEvents; bpm_t m_bpm; double m_currentSamplePos; int m_currentProgram; // host to plugin synchronisation data structure struct in { float lastppqPos; float m_Timestamp; } ; in * m_in; int m_shmID; VstSyncData* m_vstSyncData; } ; RemoteVstPlugin::RemoteVstPlugin( key_t _shm_in, key_t _shm_out ) : RemotePluginClient( _shm_in, _shm_out ), m_shortName( "" ), m_libInst( NULL ), m_plugin( NULL ), m_window( NULL ), m_windowID( 0 ), m_windowWidth( 0 ), m_windowHeight( 0 ), m_initialized( false ), m_pluginLock(), m_inputs( NULL ), m_outputs( NULL ), m_midiEvents(), m_bpm( 0 ), m_currentSamplePos( 0 ), m_currentProgram( -1 ), m_in( NULL ), m_shmID( -1 ), m_vstSyncData( NULL ) { pthread_mutex_init( &m_pluginLock, NULL ); __plugin = this; #ifndef USE_QT_SHMEM key_t key; if( ( key = ftok( VST_SNC_SHM_KEY_FILE, 'R' ) ) == -1 ) { perror( "RemoteVstPlugin.cpp::ftok" ); } else { // connect to shared memory segment if( ( m_shmID = shmget( key, 0, 0 ) ) == -1 ) { perror( "RemoteVstPlugin.cpp::shmget" ); } else { // attach segment m_vstSyncData = (VstSyncData *)shmat(m_shmID, 0, 0); if( m_vstSyncData == (VstSyncData *)( -1 ) ) { perror( "RemoteVstPlugin.cpp::shmat" ); } } } #else m_vstSyncData = RemotePluginClient::getQtVSTshm(); #endif if( m_vstSyncData == NULL ) { fprintf(stderr, "RemoteVstPlugin.cpp: " "Failed to initialize shared memory for VST synchronization.\n" " (VST-host synchronization will be disabled)\n"); m_vstSyncData = (VstSyncData*) malloc( sizeof( VstSyncData ) ); m_vstSyncData->isPlaying = true; m_vstSyncData->timeSigNumer = 4; m_vstSyncData->timeSigDenom = 4; m_vstSyncData->ppqPos = 0; m_vstSyncData->isCycle = false; m_vstSyncData->hasSHM = false; m_vstSyncData->m_sampleRate = sampleRate(); } m_in = ( in* ) new char[ sizeof( in ) ]; m_in->lastppqPos = 0; m_in->m_Timestamp = -1; // process until we have loaded the plugin while( 1 ) { message m = receiveMessage(); processMessage( m ); if( m.id == IdVstLoadPlugin || m.id == IdQuit ) { break; } } } RemoteVstPlugin::~RemoteVstPlugin() { if( m_window != NULL ) { pluginDispatch( effEditClose ); #ifdef LMMS_BUILD_LINUX CloseWindow( m_window ); #endif m_window = NULL; } pluginDispatch( effMainsChanged, 0, 0 ); pluginDispatch( effClose ); #ifndef USE_QT_SHMEM // detach shared memory segment if( shmdt( m_vstSyncData ) == -1) { if( __plugin->m_vstSyncData->hasSHM ) { perror( "~RemoteVstPlugin::shmdt" ); } if( m_vstSyncData != NULL ) { delete m_vstSyncData; m_vstSyncData = NULL; } } #endif if( m_libInst != NULL ) { FreeLibrary( m_libInst ); m_libInst = NULL; } delete[] m_inputs; delete[] m_outputs; pthread_mutex_destroy( &m_pluginLock ); } bool RemoteVstPlugin::processMessage( const message & _m ) { switch( _m.id ) { case IdVstLoadPlugin: init( _m.getString() ); break; #ifdef LMMS_BUILD_WIN32 case IdVstPluginWindowInformation: { HWND top = FindWindowEx( NULL, NULL, NULL, _m.getString().c_str() ); m_window = FindWindowEx( top, NULL, NULL, NULL ); break; } #endif case IdVstSetTempo: setBPM( _m.getInt() ); break; case IdVstSetLanguage: hlang = static_cast( _m.getInt() ); break; case IdVstGetParameterDump: getParameterDump(); break; case IdVstSetParameterDump: setParameterDump( _m ); break; case IdVstGetParameterProperties: getParameterProperties( _m.getInt() ); break; case IdSaveSettingsToFile: saveChunkToFile( _m.getString() ); sendMessage( IdSaveSettingsToFile ); break; case IdLoadSettingsFromFile: loadChunkFromFile( _m.getString( 0 ), _m.getInt( 1 ) ); sendMessage( IdLoadSettingsFromFile ); break; case IdLoadPresetFile: loadPresetFile( _m.getString( 0 ) ); sendMessage( IdLoadPresetFile ); break; case IdVstSetProgram: setProgram( _m.getInt( 0 ) ); sendMessage( IdVstSetProgram ); break; case IdVstCurrentProgram: sendMessage( message( IdVstCurrentProgram ).addInt( m_currentProgram ) ); break; case IdVstRotateProgram: rotateProgram( _m.getInt( 0 ) ); sendMessage( IdVstRotateProgram ); break; case IdVstProgramNames: getProgramNames(); break; case IdSavePresetFile: savePreset( _m.getString( 0 ) ); sendMessage( IdSavePresetFile ); break; case IdVstSetParameter: lock(); m_plugin->setParameter( m_plugin, _m.getInt( 0 ), _m.getFloat( 1 ) ); unlock(); //sendMessage( IdVstSetParameter ); break; case IdVstIdleUpdate: { int newCurrentProgram = pluginDispatch( effGetProgram ); if( newCurrentProgram != m_currentProgram ) { m_currentProgram = newCurrentProgram; sendCurrentProgramName(); } break; } default: return RemotePluginClient::processMessage( _m ); } return true; } void RemoteVstPlugin::init( const std::string & _plugin_file ) { if( load( _plugin_file ) == false ) { sendMessage( IdVstFailedLoadingPlugin ); return; } updateInOutCount(); // some plugins have to set samplerate during init if( m_vstSyncData->hasSHM ) { updateSampleRate(); } /* set program to zero */ /* i comment this out because it breaks dfx Geometer * looks like we cant set programs for it * pluginDispatch( effSetProgram, 0, 0 ); */ // request rate and blocksize pluginDispatch( effMainsChanged, 0, 1 ); debugMessage( "creating editor\n" ); initEditor(); debugMessage( "editor successfully created\n" ); // now post some information about our plugin sendMessage( message( IdVstPluginWindowID ).addInt( m_windowID ) ); sendMessage( message( IdVstPluginEditorGeometry ). addInt( m_windowWidth ). addInt( m_windowHeight ) ); sendMessage( message( IdVstPluginName ).addString( pluginName() ) ); sendMessage( message( IdVstPluginVersion ).addInt( pluginVersion() ) ); sendMessage( message( IdVstPluginVendorString ). addString( pluginVendorString() ) ); sendMessage( message( IdVstPluginProductString ). addString( pluginProductString() ) ); sendMessage( message( IdVstParameterCount ). addInt( m_plugin->numParams ) ); sendMessage( IdInitDone ); m_initialized = true; } void RemoteVstPlugin::initEditor() { if( !( m_plugin->flags & effFlagsHasEditor ) ) { return; } HMODULE hInst = GetModuleHandle( NULL ); if( hInst == NULL ) { debugMessage( "initEditor(): can't get module handle\n" ); return; } WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = DefWindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH) GetStockObject( BLACK_BRUSH ); wc.lpszMenuName = NULL; wc.lpszClassName = "LVSL"; if( !RegisterClass( &wc ) ) { return; } #ifdef LMMS_BUILD_LINUX //m_window = CreateWindowEx( 0, "LVSL", m_shortName.c_str(), // ( WS_OVERLAPPEDWINDOW | WS_THICKFRAME ) & ~WS_MAXIMIZEBOX, // 0, 0, 10, 10, NULL, NULL, hInst, NULL ); m_window = CreateWindowEx( 0 , "LVSL", m_shortName.c_str(), WS_POPUP | WS_SYSMENU | WS_BORDER , 0, 0, 10, 10, NULL, NULL, hInst, NULL); #else m_windowID = 1; // arbitrary value on win32 to signal // vstPlugin-class that we have an editor m_window = CreateWindowEx( 0, "LVSL", m_shortName.c_str(), WS_CHILD, 0, 0, 10, 10, m_window, NULL, hInst, NULL ); #endif if( m_window == NULL ) { debugMessage( "initEditor(): cannot create editor window\n" ); return; } pluginDispatch( effEditOpen, 0, 0, m_window ); ERect * er; pluginDispatch( effEditGetRect, 0, 0, &er ); m_windowWidth = er->right - er->left; m_windowHeight = er->bottom - er->top; SetWindowPos( m_window, 0, 0, 0, m_windowWidth + 8, m_windowHeight + 26, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER ); pluginDispatch( effEditTop ); ShowWindow( m_window, SW_SHOWNORMAL ); UpdateWindow( m_window ); #ifdef LMMS_BUILD_LINUX m_windowID = (intptr_t) GetProp( m_window, "__wine_x11_whole_window" ); #endif } bool RemoteVstPlugin::load( const std::string & _plugin_file ) { if( ( m_libInst = LoadLibrary( _plugin_file.c_str() ) ) == NULL ) { // give VstPlugin class a chance to start 32 bit version of RemoteVstPlugin if( GetLastError() == ERROR_BAD_EXE_FORMAT ) { sendMessage( IdVstBadDllFormat ); } return false; } char * tmp = strdup( _plugin_file.c_str() ); m_shortName = basename( tmp ); free( tmp ); typedef AEffect * ( __stdcall * mainEntryPointer ) ( audioMasterCallback ); mainEntryPointer mainEntry = (mainEntryPointer) GetProcAddress( m_libInst, "VSTPluginMain" ); if( mainEntry == NULL ) { mainEntry = (mainEntryPointer) GetProcAddress( m_libInst, "VstPluginMain" ); } if( mainEntry == NULL ) { mainEntry = (mainEntryPointer) GetProcAddress( m_libInst, "main" ); } if( mainEntry == NULL ) { debugMessage( "could not find entry point\n" ); return false; } m_plugin = mainEntry( hostCallback ); if( m_plugin == NULL ) { debugMessage( "mainEntry prodecure returned NULL\n" ); return false; } if( m_plugin->magic != kEffectMagic ) { debugMessage( "File is not a VST plugin\n" ); return false; } char id[5]; sprintf( id, "%c%c%c%c", ((char *)&m_plugin->uniqueID)[3], ((char *)&m_plugin->uniqueID)[2], ((char *)&m_plugin->uniqueID)[1], ((char *)&m_plugin->uniqueID)[0] ); id[4] = 0; sendMessage( message( IdVstPluginUniqueID ).addString( id ) ); pluginDispatch( effOpen ); return true; } void RemoteVstPlugin::process( const sampleFrame * _in, sampleFrame * _out ) { // first we gonna post all MIDI-events we enqueued so far if( m_midiEvents.size() ) { // since MIDI-events are not received immediately, we // have to have them stored somewhere even after // dispatcher-call, so we create static copies of the // data and post them #define MIDI_EVENT_BUFFER_COUNT 1024 static char eventsBuffer[sizeof( VstEvents ) + sizeof( VstMidiEvent * ) * MIDI_EVENT_BUFFER_COUNT]; static VstMidiEvent vme[MIDI_EVENT_BUFFER_COUNT]; VstEvents* events = (VstEvents *) eventsBuffer; events->reserved = 0; events->numEvents = m_midiEvents.size(); int idx = 0; for( VstMidiEventList::iterator it = m_midiEvents.begin(); it != m_midiEvents.end(); ++it, ++idx ) { memcpy( &vme[idx], &*it, sizeof( VstMidiEvent ) ); events->events[idx] = (VstEvent *) &vme[idx]; } m_midiEvents.clear(); pluginDispatch( effProcessEvents, 0, 0, events ); } // now we're ready to fetch sound from VST-plugin for( int i = 0; i < inputCount(); ++i ) { m_inputs[i] = &((float *) _in)[i * bufferSize()]; } for( int i = 0; i < outputCount(); ++i ) { m_outputs[i] = &((float *) _out)[i * bufferSize()]; memset( m_outputs[i], 0, bufferSize() * sizeof( float ) ); } lock(); #ifdef OLD_VST_SDK if( m_plugin->flags & effFlagsCanReplacing ) { #endif m_plugin->processReplacing( m_plugin, m_inputs, m_outputs, bufferSize() ); #ifdef OLD_VST_SDK } else { m_plugin->process( m_plugin, m_inputs, m_outputs, bufferSize() ); } #endif unlock(); m_currentSamplePos += bufferSize(); } void RemoteVstPlugin::processMidiEvent( const MidiEvent& event, const f_cnt_t offset ) { VstMidiEvent vme; vme.type = kVstMidiType; vme.byteSize = 24; vme.deltaFrames = offset; vme.flags = 0; vme.detune = 0; vme.noteLength = 0; vme.noteOffset = 0; vme.noteOffVelocity = 0; vme.reserved1 = 0; vme.reserved2 = 0; vme.midiData[0] = event.type() + event.channel(); switch( event.type() ) { case MidiPitchBend: vme.midiData[1] = event.pitchBend() & 0x7f; vme.midiData[2] = event.pitchBend() >> 7; break; // TODO: handle more special cases default: vme.midiData[1] = event.key(); vme.midiData[2] = event.velocity(); break; } vme.midiData[3] = 0; m_midiEvents.push_back( vme ); } const char * RemoteVstPlugin::pluginName() { static char buf[32]; buf[0] = 0; pluginDispatch( effGetEffectName, 0, 0, buf ); buf[31] = 0; return buf; } const char * RemoteVstPlugin::pluginVendorString() { static char buf[64]; buf[0] = 0; pluginDispatch( effGetVendorString, 0, 0, buf ); buf[63] = 0; return buf; } const char * RemoteVstPlugin::pluginProductString() { static char buf[64]; buf[0] = 0; pluginDispatch( effGetProductString, 0, 0, buf ); buf[63] = 0; return buf; } const char * RemoteVstPlugin::programName() { static char buf[24]; memset( buf, 0, sizeof( buf ) ); pluginDispatch( effGetProgramName, 0, 0, buf ); buf[23] = 0; return buf; } void RemoteVstPlugin::sendCurrentProgramName() { char presName[64]; sprintf( presName, "%d/%d: %s", pluginDispatch( effGetProgram ) + 1, m_plugin->numPrograms, programName() ); sendMessage( message( IdVstCurrentProgramName ).addString( presName ) ); } void RemoteVstPlugin::getParameterDump() { lock(); message m( IdVstParameterDump ); m.addInt( m_plugin->numParams ); for( int i = 0; i < m_plugin->numParams; ++i ) { char paramName[32]; memset( paramName, 0, sizeof( paramName ) ); pluginDispatchNoLocking( effGetParamName, i, 0, paramName ); paramName[sizeof(paramName)-1] = 0; m.addInt( i ); m.addString( paramName ); m.addFloat( m_plugin->getParameter( m_plugin, i ) ); } unlock(); sendMessage( m ); } void RemoteVstPlugin::setParameterDump( const message & _m ) { lock(); const int n = _m.getInt( 0 ); const int params = ( n > m_plugin->numParams ) ? m_plugin->numParams : n; int p = 0; for( int i = 0; i < params; ++i ) { VstParameterDumpItem item; item.index = _m.getInt( ++p ); item.shortLabel = _m.getString( ++p ); item.value = _m.getFloat( ++p ); m_plugin->setParameter( m_plugin, item.index, item.value ); } unlock(); } void RemoteVstPlugin::getParameterProperties( const int _idx ) { VstParameterProperties p; pluginDispatch( effGetParameterProperties, _idx, 0, &p ); message m( IdVstParameterProperties ); m.addString( p.label ); m.addString( p.shortLabel ); m.addString( #if kVstVersion > 2 p.categoryLabel #else "" #endif ); m.addFloat( p.minInteger ); m.addFloat( p.maxInteger ); m.addFloat( ( p.flags & kVstParameterUsesFloatStep ) ? p.stepFloat : p.stepInteger ); m.addInt( #if kVstVersion > 2 p.category #else 0 #endif ); sendMessage( m ); } void RemoteVstPlugin::saveChunkToFile( const std::string & _file ) { if( m_plugin->flags & 32 ) { void * chunk = NULL; const int len = pluginDispatch( 23, 0, 0, &chunk ); if( len > 0 ) { int fd = open( _file.c_str(), O_WRONLY | O_BINARY ); write( fd, chunk, len ); close( fd ); } } } void RemoteVstPlugin::setProgram( int program ) { if( isInitialized() == false ) { return; } if( program < 0 ) { program = 0; } else if( program >= m_plugin->numPrograms ) { program = m_plugin->numPrograms - 1; } pluginDispatch( effSetProgram, 0, program ); sendCurrentProgramName(); } void RemoteVstPlugin::rotateProgram( int offset ) { if( isInitialized() == false ) { return; } int newProgram = pluginDispatch( effGetProgram ) + offset; if( newProgram < 0 ) { newProgram = 0; } else if( newProgram >= m_plugin->numPrograms ) { newProgram = m_plugin->numPrograms - 1; } pluginDispatch( effSetProgram, 0, newProgram ); sendCurrentProgramName(); } void RemoteVstPlugin::getProgramNames() { char presName[1024+256*30]; char curProgName[30]; if (isInitialized() == false) return; bool progNameIndexed = ( pluginDispatch( 29, 0, -1, curProgName ) == 1 ); if (m_plugin->numPrograms > 1) { if (progNameIndexed) { for (int i = 0; i< (m_plugin->numPrograms >= 256?256:m_plugin->numPrograms); i++) { pluginDispatch( 29, i, -1, curProgName ); if (i == 0) sprintf( presName, "%s", curProgName ); else sprintf( presName + strlen(presName), "|%s", curProgName ); } } else { int currProgram = pluginDispatch( effGetProgram ); for (int i = 0; i< (m_plugin->numPrograms >= 256?256:m_plugin->numPrograms); i++) { pluginDispatch( effSetProgram, 0, i ); if (i == 0) sprintf( presName, "%s", programName() ); else sprintf( presName + strlen(presName), "|%s", programName() ); } pluginDispatch( effSetProgram, 0, currProgram ); } } else sprintf( presName, "%s", programName() ); presName[sizeof(presName)-1] = 0; sendMessage( message( IdVstProgramNames ).addString( presName ) ); } inline unsigned int endian_swap(unsigned int& x) { return (x>>24) | ((x<<8) & 0x00FF0000) | ((x>>8) & 0x0000FF00) | (x<<24); } struct sBank { unsigned int chunkMagic; unsigned int byteSize; unsigned int fxMagic; unsigned int version; unsigned int fxID; unsigned int fxVersion; unsigned int numPrograms; char prgName[28]; }; void RemoteVstPlugin::savePreset( const std::string & _file ) { unsigned int chunk_size = 0; sBank * pBank = ( sBank* ) new char[ sizeof( sBank ) ]; char progName[ 128 ] = { 0 }; char* data = NULL; const bool chunky = ( m_plugin->flags & ( 1 << 5 ) ) != 0; bool isPreset = _file.substr( _file.find_last_of( "." ) + 1 ) == "fxp"; int presNameLen = _file.find_last_of( "/" ) + _file.find_last_of( "\\" ) + 2; if (isPreset) { for (size_t i = 0; i < _file.length() - 4 - presNameLen; i++) progName[i] = i < 23 ? _file[presNameLen + i] : 0; pluginDispatch( 4, 0, 0, progName ); } if ( chunky ) chunk_size = pluginDispatch( 23, isPreset, 0, &data ); else { if (isPreset) { chunk_size = m_plugin->numParams * sizeof( float ); data = new char[ chunk_size ]; unsigned int* toUIntArray = reinterpret_cast( data ); lock(); for ( int i = 0; i < m_plugin->numParams; i++ ) { float value = m_plugin->getParameter( m_plugin, i ); unsigned int * pValue = ( unsigned int * ) &value; toUIntArray[ i ] = endian_swap( *pValue ); } unlock(); } else chunk_size = (((m_plugin->numParams * sizeof( float )) + 56)*m_plugin->numPrograms); } pBank->chunkMagic = 0x4B6E6343; pBank->byteSize = chunk_size + ( chunky ? sizeof( int ) : 0 ) + 48; if (!isPreset) pBank->byteSize += 100; pBank->byteSize = endian_swap( pBank->byteSize ); pBank->fxMagic = chunky ? 0x68435046 : 0x6B437846; if (!isPreset && chunky) pBank->fxMagic = 0x68434246; if (!isPreset &&!chunky) pBank->fxMagic = 0x6B427846; pBank->version = 0x01000000; unsigned int uIntToFile = (unsigned int) m_plugin->uniqueID; pBank->fxID = endian_swap( uIntToFile ); uIntToFile = (unsigned int) pluginVersion(); pBank->fxVersion = endian_swap( uIntToFile ); uIntToFile = (unsigned int) chunky ? m_plugin->numPrograms : m_plugin->numParams; if (!isPreset &&!chunky) uIntToFile = (unsigned int) m_plugin->numPrograms; pBank->numPrograms = endian_swap( uIntToFile ); FILE * stream = fopen( _file.c_str(), "w" ); fwrite ( pBank, 1, 28, stream ); fwrite ( progName, 1, isPreset ? 28 : 128, stream ); if ( chunky ) { uIntToFile = endian_swap( chunk_size ); fwrite ( &uIntToFile, 1, 4, stream ); } if (pBank->fxMagic != 0x6B427846 ) fwrite ( data, 1, chunk_size, stream ); else { int numPrograms = m_plugin->numPrograms; int currProgram = pluginDispatch( effGetProgram ); chunk_size = (m_plugin->numParams * sizeof( float )); pBank->byteSize = chunk_size + 48; pBank->byteSize = endian_swap( pBank->byteSize ); pBank->fxMagic = 0x6B437846; uIntToFile = (unsigned int) m_plugin->numParams; pBank->numPrograms = endian_swap( uIntToFile ); data = new char[ chunk_size ]; unsigned int* pValue,* toUIntArray = reinterpret_cast( data ); float value; for (int j = 0; j < numPrograms; j++) { pluginDispatch( effSetProgram, 0, j ); pluginDispatch( effGetProgramName, 0, 0, pBank->prgName ); fwrite ( pBank, 1, 56, stream ); lock(); for ( int i = 0; i < m_plugin->numParams; i++ ) { value = m_plugin->getParameter( m_plugin, i ); pValue = ( unsigned int * ) &value; toUIntArray[ i ] = endian_swap( *pValue ); } unlock(); fwrite ( data, 1, chunk_size, stream ); } pluginDispatch( effSetProgram, 0, currProgram ); } fclose( stream ); if ( !chunky ) delete[] data; delete[] (sBank*)pBank; } void RemoteVstPlugin::loadPresetFile( const std::string & _file ) { void * chunk = NULL; unsigned int * pLen = new unsigned int[ 1 ]; unsigned int len = 0; sBank * pBank = (sBank*) new char[ sizeof( sBank ) ]; FILE * stream = fopen( _file.c_str(), "r" ); fread ( pBank, 1, 56, stream ); pBank->fxID = endian_swap( pBank->fxID ); pBank->numPrograms = endian_swap( pBank->numPrograms ); unsigned int toUInt; float * pFloat; if (m_plugin->uniqueID != pBank->fxID) { sendMessage( message( IdVstCurrentProgramName ). addString( "Error: Plugin UniqID not match" ) ); fclose( stream ); delete[] (unsigned int*)pLen; delete[] (sBank*)pBank; return; } if( _file.substr( _file.find_last_of( "." ) + 1 ) != "fxp" ) fseek ( stream , 156 , SEEK_SET ); if(pBank->fxMagic != 0x6B427846) { if(pBank->fxMagic != 0x6B437846) { fread (pLen, 1, 4, stream); chunk = new char[len = endian_swap(*pLen)]; } else chunk = new char[len = sizeof(float)*pBank->numPrograms]; fread (chunk, len, 1, stream); fclose( stream ); } if(_file.substr(_file.find_last_of(".") + 1) == "fxp") { pBank->prgName[23] = 0; pluginDispatch( 4, 0, 0, pBank->prgName ); if(pBank->fxMagic != 0x6B437846) pluginDispatch( 24, 1, len, chunk ); else { lock(); unsigned int* toUIntArray = reinterpret_cast( chunk ); for (int i = 0; i < pBank->numPrograms; i++ ) { toUInt = endian_swap( toUIntArray[ i ] ); pFloat = ( float* ) &toUInt; m_plugin->setParameter( m_plugin, i, *pFloat ); } unlock(); } } else { if(pBank->fxMagic != 0x6B427846) { pluginDispatch( 24, 0, len, chunk ); } else { int numPrograms = pBank->numPrograms; unsigned int * toUIntArray; int currProgram = pluginDispatch( effGetProgram ); chunk = new char[ len = sizeof(float)*m_plugin->numParams ]; toUIntArray = reinterpret_cast( chunk ); lock(); for (int i =0; i < numPrograms; i++) { fread (pBank, 1, 56, stream); fread (chunk, len, 1, stream); pluginDispatch( effSetProgram, 0, i ); pBank->prgName[23] = 0; pluginDispatch( 4, 0, 0, pBank->prgName ); for (int j = 0; j < m_plugin->numParams; j++ ) { toUInt = endian_swap( toUIntArray[ j ] ); pFloat = ( float* ) &toUInt; m_plugin->setParameter( m_plugin, j, *pFloat ); } } unlock(); pluginDispatch( effSetProgram, 0, currProgram ); fclose( stream ); } } sendCurrentProgramName(); delete[] (unsigned int*)pLen; delete[] (sBank*)pBank; delete[] (char*)chunk; } void RemoteVstPlugin::loadChunkFromFile( const std::string & _file, int _len ) { char * buf = NULL; void * chunk = NULL; // various plugins need this in order to not crash when setting // chunk (also we let the plugin allocate "safe" memory this way) const int actualLen = pluginDispatch( 23, 0, 0, &chunk ); // allocated buffer big enough? if( _len > actualLen ) { // no, then manually allocate a buffer buf = new char[_len]; chunk = buf; } const int fd = open( _file.c_str(), O_RDONLY | O_BINARY ); read( fd, chunk, _len ); close( fd ); pluginDispatch( 24, 0, _len, chunk ); delete[] buf; } void RemoteVstPlugin::updateInOutCount() { delete[] m_inputs; delete[] m_outputs; m_inputs = NULL; m_outputs = NULL; setInputCount( inputCount() ); setOutputCount( outputCount() ); char buf[64]; sprintf( buf, "inputs: %d output: %d\n", inputCount(), outputCount() ); debugMessage( buf ); if( inputCount() > 0 ) { m_inputs = new float * [inputCount()]; } if( outputCount() > 0 ) { m_outputs = new float * [outputCount()]; } } //#define DEBUG_CALLBACKS #ifdef DEBUG_CALLBACKS #define SHOW_CALLBACK __plugin->debugMessage #else #define SHOW_CALLBACK(...) #endif /* TODO: * - complete audioMasterGetTime-handling (bars etc.) * - implement audioMasterProcessEvents * - audioMasterGetVendorVersion: return LMMS-version (config.h!) * - audioMasterGetDirectory: return either VST-plugin-dir or LMMS-workingdir * - audioMasterOpenFileSelector: show QFileDialog? */ intptr_t RemoteVstPlugin::hostCallback( AEffect * _effect, int32_t _opcode, int32_t _index, intptr_t _value, void * _ptr, float _opt ) { static VstTimeInfo _timeInfo; #ifdef DEBUG_CALLBACKS char buf[64]; sprintf( buf, "host-callback, opcode = %d\n", (int) _opcode ); SHOW_CALLBACK( buf ); #endif // workaround for early callbacks by some plugins if( __plugin && __plugin->m_plugin == NULL ) { __plugin->m_plugin = _effect; } switch( _opcode ) { case audioMasterAutomate: SHOW_CALLBACK( "amc: audioMasterAutomate\n" ); // index, value, returns 0 _effect->setParameter( _effect, _index, _opt ); return 0; case audioMasterVersion: SHOW_CALLBACK( "amc: audioMasterVersion\n" ); return 2300; case audioMasterCurrentId: SHOW_CALLBACK( "amc: audioMasterCurrentId\n" ); // returns the unique id of a plug that's currently // loading return 0; case audioMasterIdle: SHOW_CALLBACK ("amc: audioMasterIdle\n" ); // call application idle routine (this will // call effEditIdle for all open editors too) PostThreadMessage( __GuiThreadID, WM_USER, GiveIdle, 0 ); return 0; case audioMasterPinConnected: SHOW_CALLBACK( "amc: audioMasterPinConnected\n" ); // inquire if an input or output is beeing connected; // index enumerates input or output counting from zero: // value is 0 for input and != 0 otherwise. note: the // return value is 0 for such that older versions // will always return true. return 1; case audioMasterGetTime: SHOW_CALLBACK( "amc: audioMasterGetTime\n" ); // returns const VstTimeInfo* (or 0 if not supported) // should contain a mask indicating which // fields are required (see valid masks above), as some // items may require extensive conversions // Shared memory was initialised? - see song.cpp //assert( __plugin->m_vstSyncData != NULL ); memset( &_timeInfo, 0, sizeof( _timeInfo ) ); _timeInfo.samplePos = __plugin->m_currentSamplePos; _timeInfo.sampleRate = __plugin->m_vstSyncData->hasSHM ? __plugin->m_vstSyncData->m_sampleRate : __plugin->sampleRate(); _timeInfo.flags = 0; _timeInfo.tempo = __plugin->m_vstSyncData->hasSHM ? __plugin->m_vstSyncData->m_bpm : __plugin->m_bpm; _timeInfo.timeSigNumerator = __plugin->m_vstSyncData->timeSigNumer; _timeInfo.timeSigDenominator = __plugin->m_vstSyncData->timeSigDenom; _timeInfo.flags |= kVstTempoValid; _timeInfo.flags |= kVstTimeSigValid; if( __plugin->m_vstSyncData->isCycle ) { _timeInfo.cycleStartPos = __plugin->m_vstSyncData->cycleStart; _timeInfo.cycleEndPos = __plugin->m_vstSyncData->cycleEnd; _timeInfo.flags |= kVstCyclePosValid; _timeInfo.flags |= kVstTransportCycleActive; } if( __plugin->m_vstSyncData->ppqPos != __plugin->m_in->m_Timestamp ) { _timeInfo.ppqPos = __plugin->m_vstSyncData->ppqPos; _timeInfo.flags |= kVstTransportChanged; __plugin->m_in->lastppqPos = __plugin->m_vstSyncData->ppqPos; __plugin->m_in->m_Timestamp = __plugin->m_vstSyncData->ppqPos; } else if( __plugin->m_vstSyncData->isPlaying ) { __plugin->m_in->lastppqPos += ( __plugin->m_vstSyncData->hasSHM ? __plugin->m_vstSyncData->m_bpm : __plugin->m_bpm ) / (float)10340; _timeInfo.ppqPos = __plugin->m_in->lastppqPos; } // _timeInfo.ppqPos = __plugin->m_vstSyncData->ppqPos; _timeInfo.flags |= kVstPpqPosValid; if( __plugin->m_vstSyncData->isPlaying ) { _timeInfo.flags |= kVstTransportPlaying; } _timeInfo.barStartPos = ( (int) ( _timeInfo.ppqPos / ( 4 *__plugin->m_vstSyncData->timeSigNumer / (float) __plugin->m_vstSyncData->timeSigDenom ) ) ) * ( 4 * __plugin->m_vstSyncData->timeSigNumer / (float) __plugin->m_vstSyncData->timeSigDenom ); _timeInfo.flags |= kVstBarsValid; #ifdef LMMS_BUILD_WIN64 return (long long) &_timeInfo; #else return (long) &_timeInfo; #endif case audioMasterProcessEvents: SHOW_CALLBACK( "amc: audioMasterProcessEvents\n" ); // VstEvents* in return 0; case audioMasterIOChanged: __plugin->updateInOutCount(); SHOW_CALLBACK( "amc: audioMasterIOChanged\n" ); // numInputs and/or numOutputs has changed return 0; #ifdef OLD_VST_SDK case audioMasterWantMidi: SHOW_CALLBACK( "amc: audioMasterWantMidi\n" ); // is a filter which is currently ignored return 1; case audioMasterSetTime: SHOW_CALLBACK( "amc: audioMasterSetTime\n" ); // VstTimenfo* in , filter in , not // supported return 0; case audioMasterTempoAt: SHOW_CALLBACK( "amc: audioMasterTempoAt\n" ); return __plugin->m_bpm * 10000; case audioMasterGetNumAutomatableParameters: SHOW_CALLBACK( "amc: audioMasterGetNumAutomatable" "Parameters\n" ); return 5000; case audioMasterGetParameterQuantization: SHOW_CALLBACK( "amc: audioMasterGetParameter\n" "Quantization\n" ); // returns the integer value for +1.0 representation, // or 1 if full single float precision is maintained // in automation. parameter index in (-1: all, // any) return 1; case audioMasterNeedIdle: SHOW_CALLBACK( "amc: audioMasterNeedIdle\n" ); // plug needs idle calls (outside its editor window) return 1; case audioMasterGetPreviousPlug: SHOW_CALLBACK( "amc: audioMasterGetPreviousPlug\n" ); // input pin in (-1: first to come), returns // cEffect* return 0; case audioMasterGetNextPlug: SHOW_CALLBACK( "amc: audioMasterGetNextPlug\n" ); // output pin in (-1: first to come), returns // cEffect* return 0; case audioMasterWillReplaceOrAccumulate: SHOW_CALLBACK( "amc: audioMasterWillReplaceOr" "Accumulate\n" ); // returns: 0: not supported, 1: replace, 2: accumulate return 1; case audioMasterGetSpeakerArrangement: SHOW_CALLBACK( "amc: audioMasterGetSpeaker" "Arrangement\n" ); // (long)input in , output in return 0; case audioMasterSetOutputSampleRate: SHOW_CALLBACK( "amc: audioMasterSetOutputSample" "Rate\n" ); // for variable i/o, sample rate in return 0; case audioMasterSetIcon: SHOW_CALLBACK( "amc: audioMasterSetIcon\n" ); // TODO // void* in , format not defined yet return 0; case audioMasterOpenWindow: SHOW_CALLBACK( "amc: audioMasterOpenWindow\n" ); // TODO // returns platform specific ptr return 0; case audioMasterCloseWindow: SHOW_CALLBACK( "amc: audioMasterCloseWindow\n" ); // TODO // close window, platform specific handle in return 0; #endif case audioMasterSizeWindow: SHOW_CALLBACK( "amc: audioMasterSizeWindow\n" ); if( __plugin->m_window == 0 ) { return 0; } __plugin->m_windowWidth = _index; __plugin->m_windowHeight = _value; SetWindowPos( __plugin->m_window, 0, 0, 0, _index + 8, _value + 26, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER ); __plugin->sendMessage( message( IdVstPluginEditorGeometry ). addInt( __plugin->m_windowWidth ). addInt( __plugin->m_windowHeight ) ); return 1; case audioMasterGetSampleRate: SHOW_CALLBACK( "amc: audioMasterGetSampleRate\n" ); return __plugin->sampleRate(); case audioMasterGetBlockSize: SHOW_CALLBACK( "amc: audioMasterGetBlockSize\n" ); return __plugin->bufferSize(); case audioMasterGetInputLatency: SHOW_CALLBACK( "amc: audioMasterGetInputLatency\n" ); return __plugin->bufferSize(); case audioMasterGetOutputLatency: SHOW_CALLBACK( "amc: audioMasterGetOutputLatency\n" ); return __plugin->bufferSize(); case audioMasterGetCurrentProcessLevel: SHOW_CALLBACK( "amc: audioMasterGetCurrentProcess" "Level\n" ); // returns: 0: not supported, // 1: currently in user thread (gui) // 2: currently in audio thread (where process is // called) // 3: currently in 'sequencer' thread (midi, timer etc) // 4: currently offline processing and thus in user // thread // other: not defined, but probably pre-empting user // thread. return 0; case audioMasterGetAutomationState: SHOW_CALLBACK( "amc: audioMasterGetAutomationState\n" ); // returns 0: not supported, 1: off, 2:read, 3:write, // 4:read/write offline return 0; case audioMasterOfflineStart: SHOW_CALLBACK( "amc: audioMasterOfflineStart\n" ); return 0; case audioMasterOfflineRead: SHOW_CALLBACK( "amc: audioMasterOfflineRead\n" ); // ptr points to offline structure, see below. // return 0: error, 1 ok return 0; case audioMasterOfflineWrite: SHOW_CALLBACK( "amc: audioMasterOfflineWrite\n" ); // same as read return 0; case audioMasterOfflineGetCurrentPass: SHOW_CALLBACK( "amc: audioMasterOfflineGetCurrent" "Pass\n" ); return 0; case audioMasterOfflineGetCurrentMetaPass: SHOW_CALLBACK( "amc: audioMasterOfflineGetCurrentMeta" "Pass\n"); return 0; case audioMasterGetVendorString: SHOW_CALLBACK( "amc: audioMasterGetVendorString\n" ); // fills with a string identifying the vendor // (max 64 char) strcpy( (char *) _ptr, "Tobias Doerffel" ); return 1; case audioMasterGetProductString: SHOW_CALLBACK( "amc: audioMasterGetProductString\n" ); // fills with a string with product name // (max 64 char) strcpy( (char *) _ptr, "LMMS VST Support Layer (LVSL)" ); return 1; case audioMasterGetVendorVersion: SHOW_CALLBACK( "amc: audioMasterGetVendorVersion\n" ); // returns vendor-specific version return 1000; case audioMasterVendorSpecific: SHOW_CALLBACK( "amc: audioMasterVendorSpecific\n" ); // no definition, vendor specific handling return 0; case audioMasterCanDo: SHOW_CALLBACK( "amc: audioMasterCanDo\n" ); return !strcmp( (char *) _ptr, "sendVstEvents" ) || !strcmp( (char *) _ptr, "sendVstMidiEvent" ) || !strcmp( (char *) _ptr, "sendVstTimeInfo" ) || !strcmp( (char *) _ptr, "sizeWindow" ) || !strcmp( (char *) _ptr, "supplyIdle" ); case audioMasterGetLanguage: SHOW_CALLBACK( "amc: audioMasterGetLanguage\n" ); return hlang; case audioMasterGetDirectory: SHOW_CALLBACK( "amc: audioMasterGetDirectory\n" ); // get plug directory, FSSpec on MAC, else char* return 0; case audioMasterUpdateDisplay: SHOW_CALLBACK( "amc: audioMasterUpdateDisplay\n" ); // something has changed, update 'multi-fx' display PostThreadMessage( __GuiThreadID, WM_USER, GiveIdle, 0 ); return 0; #if kVstVersion > 2 case audioMasterBeginEdit: SHOW_CALLBACK( "amc: audioMasterBeginEdit\n" ); // begin of automation session (when mouse down), // parameter index in return 0; case audioMasterEndEdit: SHOW_CALLBACK( "amc: audioMasterEndEdit\n" ); // end of automation session (when mouse up), // parameter index in return 0; case audioMasterOpenFileSelector: SHOW_CALLBACK( "amc: audioMasterOpenFileSelector\n" ); // open a fileselector window with VstFileSelect* // in return 0; #endif default: SHOW_CALLBACK( "amd: not handled" ); break; } return 0; } DWORD WINAPI RemoteVstPlugin::processingThread( LPVOID _param ) { RemoteVstPlugin * _this = static_cast( _param ); RemotePluginClient::message m; while( ( m = _this->receiveMessage() ).id != IdQuit ) { if( m.id == IdStartProcessing || m.id == IdMidiEvent ) { _this->processMessage( m ); } else { PostThreadMessage( __GuiThreadID, WM_USER, ProcessPluginMessage, (LPARAM) new message( m ) ); } } // notify GUI thread about shutdown PostThreadMessage( __GuiThreadID, WM_USER, ClosePlugin, 0 ); return 0; } DWORD WINAPI RemoteVstPlugin::guiEventLoop( LPVOID _param ) { RemoteVstPlugin * _this = static_cast( _param ); HMODULE hInst = GetModuleHandle( NULL ); if( hInst == NULL ) { _this->debugMessage( "guiEventLoop(): can't get " "module handle\n" ); return -1; } HWND timerWindow = CreateWindowEx( 0, "LVSL", "dummy", 0, 0, 0, 0, 0, NULL, NULL, hInst, NULL ); // install GUI update timer SetTimer( timerWindow, 1000, 50, NULL ); MSG msg; bool quit = false; while( quit == false && GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); if( msg.message == WM_TIMER && _this->isInitialized() ) { // give plugin some idle-time for GUI-update _this->pluginDispatch( effEditIdle ); } else if( msg.message == WM_USER ) { switch( msg.wParam ) { case ProcessPluginMessage: { message * m = (message *) msg.lParam; _this->processMessage( *m ); delete m; break; } case GiveIdle: _this->pluginDispatch( effEditIdle ); break; case ClosePlugin: quit = true; break; default: break; } } } return 0; } int main( int _argc, char * * _argv ) { if( _argc < 3 ) { fprintf( stderr, "not enough arguments\n" ); return -1; } #ifdef LMMS_BUILD_WIN32 #ifndef __WINPTHREADS_VERSION // (non-portable) initialization of statically linked pthread library pthread_win32_process_attach_np(); pthread_win32_thread_attach_np(); #endif #endif #ifdef LMMS_BUILD_LINUX #ifdef LMMS_HAVE_SCHED_H // try to set realtime-priority struct sched_param sparam; sparam.sched_priority = ( sched_get_priority_max( SCHED_FIFO ) + sched_get_priority_min( SCHED_FIFO ) ) / 2; sched_setscheduler( 0, SCHED_FIFO, &sparam ); #endif #endif // constructor automatically will process messages until it receives // a IdVstLoadPlugin message and processes it __plugin = new RemoteVstPlugin( atoi( _argv[1] ), atoi( _argv[2] ) ); if( __plugin->isInitialized() ) { __GuiThreadID = GetCurrentThreadId(); if( CreateThread( NULL, 0, RemoteVstPlugin::processingThread, __plugin, 0, NULL ) == NULL ) { __plugin->debugMessage( "could not create " "processingThread\n" ); return -1; } RemoteVstPlugin::guiEventLoop( __plugin ); } delete __plugin; #ifdef LMMS_BUILD_WIN32 #ifndef __WINPTHREADS_VERSION pthread_win32_thread_detach_np(); pthread_win32_process_detach_np(); #endif #endif return 0; } lmms-1.1.3/plugins/vst_base/VstPlugin.cpp000066400000000000000000000325171247673406200204350ustar00rootroot00000000000000/* * VstPlugin.cpp - implementation of VstPlugin class * * Copyright (c) 2005-2013 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "VstPlugin.h" #include #include #include #include #include #include #include #ifdef LMMS_BUILD_LINUX #include #include #else #include #endif #include #ifdef LMMS_BUILD_WIN32 #include #endif #include "config_mgr.h" #include "engine.h" #include "MainWindow.h" #include "song.h" #include "templates.h" #include "FileDialog.h" #include class vstSubWin : public QMdiSubWindow { public: vstSubWin( QWidget * _parent ) : QMdiSubWindow( _parent ) { setAttribute( Qt::WA_DeleteOnClose, false ); } virtual ~vstSubWin() { } virtual void closeEvent( QCloseEvent * e ) { // ignore close-events - for some reason otherwise the VST GUI // remains hidden when re-opening hide(); e->ignore(); } } ; VstPlugin::VstPlugin( const QString & _plugin ) : QObject(), JournallingObject(), RemotePlugin(), m_plugin( _plugin ), m_pluginWidget( NULL ), m_pluginWindowID( 0 ), m_badDllFormat( false ), m_name(), m_version( 0 ), m_vendorString(), m_productString(), m_currentProgramName(), m_allProgramNames(), p_name(), m_currentProgram(), m_idleTimer() { setSplittedChannels( true ); tryLoad( "RemoteVstPlugin" ); #ifdef LMMS_BUILD_WIN64 if( m_badDllFormat ) { m_badDllFormat = false; tryLoad( "32/RemoteVstPlugin32" ); } #endif setTempo( engine::getSong()->getTempo() ); connect( engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( setTempo( bpm_t ) ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSampleRate() ) ); // update once per second m_idleTimer.start( 1000 ); connect( &m_idleTimer, SIGNAL( timeout() ), this, SLOT( idleUpdate() ) ); } VstPlugin::~VstPlugin() { } void VstPlugin::tryLoad( const QString &remoteVstPluginExecutable ) { init( remoteVstPluginExecutable, false ); lock(); #ifdef LMMS_BUILD_WIN32 QWidget * helper = new QWidget; QHBoxLayout * l = new QHBoxLayout( helper ); QWidget * target = new QWidget( helper ); l->setSpacing( 0 ); l->setMargin( 0 ); l->addWidget( target ); static int k = 0; const QString t = QString( "vst%1%2" ).arg( GetCurrentProcessId()<<10 ). arg( ++k ); helper->setWindowTitle( t ); // we've to call that for making sure, Qt created the windows (void) helper->winId(); (void) target->winId(); sendMessage( message( IdVstPluginWindowInformation ). addString( QSTR_TO_STDSTR( t ) ) ); #endif VstHostLanguages hlang = LanguageEnglish; switch( QLocale::system().language() ) { case QLocale::French: hlang = LanguageFrench; break; case QLocale::German: hlang = LanguageGerman; break; case QLocale::Italian: hlang = LanguageItalian; break; case QLocale::Japanese: hlang = LanguageJapanese; break; case QLocale::Korean: hlang = LanguageKorean; break; case QLocale::Spanish: hlang = LanguageSpanish; break; default: break; } sendMessage( message( IdVstSetLanguage ).addInt( hlang ) ); QString p = m_plugin; if( QFileInfo( p ).dir().isRelative() ) { p = configManager::inst()->vstDir() + QDir::separator() + p; } sendMessage( message( IdVstLoadPlugin ).addString( QSTR_TO_STDSTR( p ) ) ); waitForInitDone(); unlock(); #ifdef LMMS_BUILD_WIN32 if( !failed() && m_pluginWindowID ) { target->setFixedSize( m_pluginGeometry ); vstSubWin * sw = new vstSubWin( engine::mainWindow()->workspace() ); sw->setWidget( helper ); helper->setWindowTitle( name() ); m_pluginWidget = helper; } else { delete helper; } #endif } void VstPlugin::showEditor( QWidget * _parent, bool isEffect ) { QWidget * w = pluginWidget(); if( w ) { #ifdef LMMS_BUILD_WIN32 // hide sw, plugin window wrapper on win32 // this is obtained from pluginWidget() if( isEffect ) { w->setWindowFlags( Qt::FramelessWindowHint ); w->setAttribute( Qt::WA_TranslucentBackground ); } else { w->setWindowFlags( Qt::WindowCloseButtonHint ); } #endif w->show(); return; } #ifdef LMMS_BUILD_LINUX if( m_pluginWindowID == 0 ) { return; } m_pluginWidget = new QWidget( _parent ); m_pluginWidget->setFixedSize( m_pluginGeometry ); m_pluginWidget->setWindowTitle( name() ); if( _parent == NULL ) { vstSubWin * sw = new vstSubWin( engine::mainWindow()->workspace() ); if( isEffect ) { sw->setAttribute( Qt::WA_TranslucentBackground ); sw->setWindowFlags( Qt::FramelessWindowHint ); sw->setWidget( m_pluginWidget ); QX11EmbedContainer * xe = new QX11EmbedContainer( sw ); xe->embedClient( m_pluginWindowID ); xe->setFixedSize( m_pluginGeometry ); xe->show(); } else { sw->setWindowFlags( Qt::WindowCloseButtonHint ); sw->setWidget( m_pluginWidget ); QX11EmbedContainer * xe = new QX11EmbedContainer( sw ); xe->embedClient( m_pluginWindowID ); xe->setFixedSize( m_pluginGeometry ); xe->move( 4, 24 ); xe->show(); } } #endif if( m_pluginWidget ) { m_pluginWidget->show(); } } void VstPlugin::hideEditor() { QWidget * w = pluginWidget(); if( w ) { w->hide(); } } void VstPlugin::loadSettings( const QDomElement & _this ) { if( pluginWidget() != NULL ) { if( _this.attribute( "guivisible" ).toInt() ) { showEditor( NULL, false ); } else { hideEditor(); } } const int num_params = _this.attribute( "numparams" ).toInt(); // if it exists try to load settings chunk if( _this.hasAttribute( "chunk" ) ) { loadChunk( QByteArray::fromBase64( _this.attribute( "chunk" ).toUtf8() ) ); } else if( num_params > 0 ) { // no chunk, restore individual parameters QMap dump; for( int i = 0; i < num_params; ++i ) { const QString key = "param" + QString::number( i ); dump[key] = _this.attribute( key ); } setParameterDump( dump ); } if( _this.hasAttribute( "program" ) ) { setProgram( _this.attribute( "program" ).toInt() ); } } void VstPlugin::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( pluginWidget() != NULL ) { _this.setAttribute( "guivisible", pluginWidget()->isVisible() ); } // try to save all settings in a chunk QByteArray chunk = saveChunk(); if( !chunk.isEmpty() ) { _this.setAttribute( "chunk", QString( chunk.toBase64() ) ); } else { // plugin doesn't seem to support chunks, therefore save // individual parameters const QMap & dump = parameterDump(); _this.setAttribute( "numparams", dump.size() ); for( QMap::const_iterator it = dump.begin(); it != dump.end(); ++it ) { _this.setAttribute( it.key(), it.value() ); } } _this.setAttribute( "program", currentProgram() ); } void VstPlugin::setTempo( bpm_t _bpm ) { lock(); sendMessage( message( IdVstSetTempo ).addInt( _bpm ) ); unlock(); } void VstPlugin::updateSampleRate() { lock(); sendMessage( message( IdSampleRateInformation ). addInt( engine::mixer()->processingSampleRate() ) ); unlock(); } int VstPlugin::currentProgram() { lock(); sendMessage( message( IdVstCurrentProgram ) ); waitForMessage( IdVstCurrentProgram ); unlock(); return m_currentProgram; } const QMap & VstPlugin::parameterDump() { lock(); sendMessage( IdVstGetParameterDump ); waitForMessage( IdVstParameterDump ); unlock(); return m_parameterDump; } void VstPlugin::setParameterDump( const QMap & _pdump ) { message m( IdVstSetParameterDump ); m.addInt( _pdump.size() ); for( QMap::ConstIterator it = _pdump.begin(); it != _pdump.end(); ++it ) { const VstParameterDumpItem item = { ( *it ).section( ':', 0, 0 ).toInt(), "", ( *it ).section( ':', 2, -1 ).toFloat() } ; m.addInt( item.index ); m.addString( item.shortLabel ); m.addFloat( item.value ); } lock(); sendMessage( m ); unlock(); } bool VstPlugin::processMessage( const message & _m ) { switch( _m.id ) { case IdVstBadDllFormat: m_badDllFormat = true; break; case IdVstPluginWindowID: m_pluginWindowID = _m.getInt(); break; case IdVstPluginEditorGeometry: m_pluginGeometry = QSize( _m.getInt( 0 ), _m.getInt( 1 ) ); break; case IdVstPluginName: m_name = _m.getQString(); break; case IdVstPluginVersion: m_version = _m.getInt(); break; case IdVstPluginVendorString: m_vendorString = _m.getQString(); break; case IdVstPluginProductString: m_productString = _m.getQString(); break; case IdVstCurrentProgram: m_currentProgram = _m.getInt(); break; case IdVstCurrentProgramName: m_currentProgramName = _m.getQString(); break; case IdVstProgramNames: m_allProgramNames = _m.getQString(); break; case IdVstPluginUniqueID: // TODO: display graphically in case of failure printf("unique ID: %s\n", _m.getString().c_str() ); break; case IdVstParameterDump: { m_parameterDump.clear(); const int num_params = _m.getInt(); int p = 0; for( int i = 0; i < num_params; ++i ) { VstParameterDumpItem item; item.index = _m.getInt( ++p ); item.shortLabel = _m.getString( ++p ); item.value = _m.getFloat( ++p ); m_parameterDump["param" + QString::number( item.index )] = QString::number( item.index ) + ":" + /*uncomented*/ /*QString( item.shortLabel )*/ QString::fromStdString(item.shortLabel) + ":" + QString::number( item.value ); } break; } default: return RemotePlugin::processMessage( _m ); } return true; } void VstPlugin::openPreset( ) { FileDialog ofd( NULL, tr( "Open Preset" ), "", tr( "Vst Plugin Preset (*.fxp *.fxb)" ) ); ofd.setFileMode( FileDialog::ExistingFiles ); if( ofd.exec () == QDialog::Accepted && !ofd.selectedFiles().isEmpty() ) { lock(); sendMessage( message( IdLoadPresetFile ). addString( QSTR_TO_STDSTR( QDir::toNativeSeparators( ofd.selectedFiles()[0] ) ) ) ); waitForMessage( IdLoadPresetFile ); unlock(); } } void VstPlugin::setProgram( int index ) { lock(); sendMessage( message( IdVstSetProgram ).addInt( index ) ); waitForMessage( IdVstSetProgram ); unlock(); } void VstPlugin::rotateProgram( int offset ) { lock(); sendMessage( message( IdVstRotateProgram ).addInt( offset ) ); waitForMessage( IdVstRotateProgram ); unlock(); } void VstPlugin::loadProgramNames() { lock(); sendMessage( message( IdVstProgramNames ) ); waitForMessage( IdVstProgramNames ); unlock(); } void VstPlugin::savePreset( ) { QString presName = currentProgramName().isEmpty() ? tr(": default") : currentProgramName(); presName.replace(tr("\""), tr("'")); // QFileDialog unable to handle double quotes properly FileDialog sfd( NULL, tr( "Save Preset" ), presName.section(": ", 1, 1) + tr(".fxp"), tr( "Vst Plugin Preset (*.fxp *.fxb)" ) ); if( p_name != "" ) // remember last directory { sfd.setDirectory( QFileInfo( p_name ).absolutePath() ); } sfd.setAcceptMode( FileDialog::AcceptSave ); sfd.setFileMode( FileDialog::AnyFile ); if( sfd.exec () == QDialog::Accepted && !sfd.selectedFiles().isEmpty() && sfd.selectedFiles()[0] != "" ) { QString fns = sfd.selectedFiles()[0]; p_name = fns; if ((fns.toUpper().indexOf(tr(".FXP")) == -1) && (fns.toUpper().indexOf(tr(".FXB")) == -1)) fns = fns + tr(".fxb"); else fns = fns.left(fns.length() - 4) + (fns.right( 4 )).toLower(); lock(); sendMessage( message( IdSavePresetFile ). addString( QSTR_TO_STDSTR( QDir::toNativeSeparators( fns ) ) ) ); waitForMessage( IdSavePresetFile ); unlock(); } } void VstPlugin::setParam( int i, float f ) { lock(); sendMessage( message( IdVstSetParameter ).addInt( i ).addFloat( f ) ); //waitForMessage( IdVstSetParameter ); unlock(); } void VstPlugin::idleUpdate() { lock(); sendMessage( message( IdVstIdleUpdate ) ); unlock(); } void VstPlugin::loadChunk( const QByteArray & _chunk ) { QTemporaryFile tf; if( tf.open() ) { tf.write( _chunk ); tf.flush(); lock(); sendMessage( message( IdLoadSettingsFromFile ). addString( QSTR_TO_STDSTR( QDir::toNativeSeparators( tf.fileName() ) ) ). addInt( _chunk.size() ) ); waitForMessage( IdLoadSettingsFromFile ); unlock(); } } QByteArray VstPlugin::saveChunk() { QByteArray a; QTemporaryFile tf; if( tf.open() ) { lock(); sendMessage( message( IdSaveSettingsToFile ). addString( QSTR_TO_STDSTR( QDir::toNativeSeparators( tf.fileName() ) ) ) ); waitForMessage( IdSaveSettingsToFile ); unlock(); a = tf.readAll(); } return a; } #include "moc_VstPlugin.cxx" lmms-1.1.3/plugins/vst_base/VstPlugin.h000066400000000000000000000065251247673406200201020ustar00rootroot00000000000000/* * VstPlugin.h - declaration of VstPlugin class * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _VST_PLUGIN_H #define _VST_PLUGIN_H #include #include #include #include #include #include #include "Mixer.h" #include "JournallingObject.h" #include "communication.h" class PLUGIN_EXPORT VstPlugin : public QObject, public JournallingObject, public RemotePlugin { Q_OBJECT public: VstPlugin( const QString & _plugin ); virtual ~VstPlugin(); void tryLoad( const QString &remoteVstPluginExecutable ); virtual bool processMessage( const message & _m ); inline bool hasEditor() const { return m_pluginWindowID != 0; } void showEditor( QWidget * _parent = NULL, bool isEffect = false ); void hideEditor(); inline const QString & name() const { return m_name; } inline int version() const { return m_version; } inline const QString & vendorString() const { return m_vendorString; } inline const QString & productString() const { return m_productString; } inline const QString& currentProgramName() const { return m_currentProgramName; } inline const QString& allProgramNames() const { return m_allProgramNames; } int currentProgram(); const QMap & parameterDump(); void setParameterDump( const QMap & _pdump ); inline QWidget * pluginWidget( bool _top_widget = true ) { if( _top_widget && m_pluginWidget ) { if( m_pluginWidget->parentWidget() ) { return m_pluginWidget->parentWidget(); } } return m_pluginWidget; } virtual void loadSettings( const QDomElement & _this ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); inline virtual QString nodeName() const { return "vstplugin"; } public slots: void setTempo( bpm_t _bpm ); void updateSampleRate(); void openPreset( void ); void setProgram( int index ); void rotateProgram( int offset ); void loadProgramNames(); void savePreset( void ); void setParam( int i, float f ); void idleUpdate(); private: void loadChunk( const QByteArray & _chunk ); QByteArray saveChunk(); QString m_plugin; QPointer m_pluginWidget; int m_pluginWindowID; QSize m_pluginGeometry; bool m_badDllFormat; QString m_name; int m_version; QString m_vendorString; QString m_productString; QString m_currentProgramName; QString m_allProgramNames; QString p_name; QMap m_parameterDump; int m_currentProgram; QTimer m_idleTimer; } ; #endif lmms-1.1.3/plugins/vst_base/Win64/000077500000000000000000000000001247673406200166755ustar00rootroot00000000000000lmms-1.1.3/plugins/vst_base/Win64/CMakeLists.txt000066400000000000000000000014321247673406200214350ustar00rootroot00000000000000INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/include") SET(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER32}") ADD_EXECUTABLE(RemoteVstPlugin32 "${CMAKE_CURRENT_SOURCE_DIR}/../RemoteVstPlugin.cpp") TARGET_LINK_LIBRARIES(RemoteVstPlugin32 -lQtCore4 -lpthread -lgdi32 -lws2_32) ADD_CUSTOM_COMMAND(TARGET RemoteVstPlugin32 POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/RemoteVstPlugin32.exe\"") SET_TARGET_PROPERTIES(RemoteVstPlugin32 PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -O0") INSTALL(TARGETS RemoteVstPlugin32 RUNTIME DESTINATION "${PLUGIN_DIR}/32") INSTALL(FILES "${MINGW_PREFIX32}/bin/QtCore4.dll" "${MINGW_PREFIX32}/bin/zlib1.dll" "${MINGW_PREFIX32}/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32/bin/libwinpthread-1.dll" DESTINATION "${PLUGIN_DIR}/32") lmms-1.1.3/plugins/vst_base/basename.c000066400000000000000000000113371247673406200177120ustar00rootroot00000000000000/* basename.c * * $Id: basename.c,v 1.2 2007/03/08 23:15:58 keithmarshall Exp $ * * Provides an implementation of the "basename" function, conforming * to SUSv3, with extensions to accommodate Win32 drive designators, * and suitable for use on native Microsoft(R) Win32 platforms. * * Written by Keith Marshall * * This is free software. You may redistribute and/or modify it as you * see fit, without restriction of copyright. * * This software is provided "as is", in the hope that it may be useful, * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no * time will the author accept any form of liability for any damages, * however caused, resulting from the use of this software. * */ #include #include #include #include #ifndef __cdecl /* If compiling on any non-Win32 platform ... */ #define __cdecl /* this may not be defined. */ #endif __cdecl char *basename( char *path ) { size_t len; static char *retfail = NULL; /* to handle path names for files in multibyte character locales, * we need to set up LC_CTYPE to match the host file system locale */ char *locale = setlocale( LC_CTYPE, NULL ); if( locale != NULL ) locale = strdup( locale ); setlocale( LC_CTYPE, "" ); if( path && *path ) { /* allocate sufficient local storage space, * in which to create a wide character reference copy of path */ wchar_t refcopy[1 + (len = mbstowcs( NULL, path, 0 ))]; /* create the wide character reference copy of path, * and step over the drive designator, if present ... */ wchar_t *refpath = refcopy; if( ((len = mbstowcs( refpath, path, len )) > 1) && (refpath[1] == L':') ) { /* FIXME: maybe should confirm *refpath is a valid drive designator */ refpath += 2; } /* ensure that our wide character reference path is NUL terminated */ refcopy[ len ] = L'\0'; /* check again, just to ensure we still have a non-empty path name ... */ if( *refpath ) { /* and, when we do, process it in the wide character domain ... * scanning from left to right, to the char after the final dir separator */ wchar_t *refname; for( refname = refpath ; *refpath ; ++refpath ) { if( (*refpath == L'/') || (*refpath == L'\\') ) { /* we found a dir separator ... * step over it, and any others which immediately follow it */ while( (*refpath == L'/') || (*refpath == L'\\') ) ++refpath; /* if we didn't reach the end of the path string ... */ if( *refpath ) /* then we have a new candidate for the base name */ refname = refpath; /* otherwise ... * strip off any trailing dir separators which we found */ else while( (refpath > refname) && ((*--refpath == L'/') || (*refpath == L'\\')) ) *refpath = L'\0'; } } /* in the wide character domain ... * refname now points at the resolved base name ... */ if( *refname ) { /* if it's not empty, * then we transform the full normalised path back into * the multibyte character domain, and skip over the dirname, * to return the resolved basename. */ if( (len = wcstombs( path, refcopy, len )) != (size_t)(-1) ) path[ len ] = '\0'; *refname = L'\0'; if( (len = wcstombs( NULL, refcopy, 0 )) != (size_t)(-1) ) path += len; } else { /* the basename is empty, so return the default value of "/", * transforming from wide char to multibyte char domain, and * returning it in our own buffer. */ retfail = (char *) realloc( retfail, len = 1 + wcstombs( NULL, L"/", 0 )); wcstombs( path = retfail, L"/", len ); } /* restore the caller's locale, clean up, and return the result */ setlocale( LC_CTYPE, locale ); free( locale ); return( path ); } /* or we had an empty residual path name, after the drive designator, * in which case we simply fall through ... */ } /* and, if we get to here ... * the path name is either NULL, or it decomposes to an empty string; * in either case, we return the default value of "." in our own buffer, * reloading it with the correct value, transformed from the wide char * to the multibyte char domain, just in case the caller trashed it * after a previous call. */ retfail = (char *) realloc( retfail, len = 1 + wcstombs( NULL, L".", 0 )); wcstombs( retfail, L".", len ); /* restore the caller's locale, clean up, and return the result */ setlocale( LC_CTYPE, locale ); free( locale ); return( retfail ); } /* $RCSfile: basename.c,v $$Revision: 1.2 $: end of file */ lmms-1.1.3/plugins/vst_base/communication.h000066400000000000000000000041031247673406200210020ustar00rootroot00000000000000/* * communication.h - header file defining stuff concerning communication between * LVSL-server and -client * * Copyright (c) 2005-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _COMMUNICATION_H #define _COMMUNICATION_H #include "RemotePlugin.h" struct VstParameterDumpItem { int32_t index; std::string shortLabel; float value; } ; enum VstHostLanguages { LanguageEnglish = 1, LanguageGerman, LanguageFrench, LanguageItalian, LanguageSpanish, LanguageJapanese, LanguageKorean } ; enum VstRemoteMessageIDs { // vstPlugin -> remoteVstPlugin IdVstLoadPlugin = IdUserBase, IdVstPluginWindowInformation, IdVstClosePlugin, IdVstSetTempo, IdVstSetLanguage, IdVstGetParameterCount, IdVstGetParameterDump, IdVstSetParameterDump, IdVstGetParameterProperties, IdVstProgramNames, IdVstCurrentProgram, IdVstCurrentProgramName, IdVstSetProgram, IdVstRotateProgram, IdVstIdleUpdate, // remoteVstPlugin -> vstPlugin IdVstFailedLoadingPlugin, IdVstBadDllFormat, IdVstPluginWindowID, IdVstPluginEditorGeometry, IdVstPluginName, IdVstPluginVersion, IdVstPluginVendorString, IdVstPluginProductString, IdVstPluginPresetsString, IdVstPluginUniqueID, IdVstSetParameter, IdVstParameterCount, IdVstParameterDump, IdVstParameterProperties } ; #endif lmms-1.1.3/plugins/vst_base/vst_base.cpp000066400000000000000000000024311247673406200203000ustar00rootroot00000000000000/* * vst_base.cpp - VST-base-code to be used by any LMMS plugins dealing with VST- * plugins * * Copyright (c) 2006-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Plugin.h" #include "embed.h" extern "C" { Plugin::Descriptor PLUGIN_EXPORT vstbase_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "VST Base", "library for all LMMS plugins dealing with VST-plugins", "Tobias Doerffel ", 0x0100, Plugin::Library, NULL, NULL } ; } lmms-1.1.3/plugins/watsyn/000077500000000000000000000000001247673406200155055ustar00rootroot00000000000000lmms-1.1.3/plugins/watsyn/CMakeLists.txt000066400000000000000000000003331247673406200202440ustar00rootroot00000000000000INCLUDE(BuildPlugin) LINK_DIRECTORIES(${SAMPLERATE_LIBRARY_DIRS}) LINK_LIBRARIES(${SAMPLERATE_LIBRARIES}) BUILD_PLUGIN(watsyn Watsyn.cpp Watsyn.h MOCFILES Watsyn.h EMBEDDED_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.png) lmms-1.1.3/plugins/watsyn/Watsyn.cpp000066400000000000000000001230371247673406200175040ustar00rootroot00000000000000/* * Watsyn.cpp - a 4-oscillator modulating wavetable synth * * Copyright (c) 2014 Vesa Kivimäki * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "Watsyn.h" #include "base64.h" #include "engine.h" #include "InstrumentTrack.h" #include "templates.h" #include "tooltip.h" #include "song.h" #include "lmms_math.h" #include "interpolation.h" #include "embed.cpp" extern "C" { Plugin::Descriptor PLUGIN_EXPORT watsyn_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Watsyn", QT_TRANSLATE_NOOP( "pluginBrowser", "4-oscillator modulatable wavetable synth" ), "Vesa Kivimäki ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } WatsynObject::WatsynObject( float * _A1wave, float * _A2wave, float * _B1wave, float * _B2wave, int _amod, int _bmod, const sample_rate_t _samplerate, NotePlayHandle * _nph, fpp_t _frames, WatsynInstrument * _w ) : m_amod( _amod ), m_bmod( _bmod ), m_samplerate( _samplerate ), m_nph( _nph ), m_fpp( _frames ), m_parent( _w ) { m_abuf = new sampleFrame[_frames]; m_bbuf = new sampleFrame[_frames]; m_lphase[A1_OSC] = 0.0f; m_lphase[A2_OSC] = 0.0f; m_lphase[B1_OSC] = 0.0f; m_lphase[B2_OSC] = 0.0f; m_rphase[A1_OSC] = 0.0f; m_rphase[A2_OSC] = 0.0f; m_rphase[B1_OSC] = 0.0f; m_rphase[B2_OSC] = 0.0f; // copy wavegraphs to the synth object to prevent race conditions memcpy( &m_A1wave, _A1wave, sizeof( m_A1wave ) ); memcpy( &m_A2wave, _A2wave, sizeof( m_A2wave ) ); memcpy( &m_B1wave, _B1wave, sizeof( m_B1wave ) ); memcpy( &m_B2wave, _B2wave, sizeof( m_B2wave ) ); } WatsynObject::~WatsynObject() { delete[] m_abuf; delete[] m_bbuf; } void WatsynObject::renderOutput( fpp_t _frames ) { if( m_abuf == NULL ) m_abuf = new sampleFrame[m_fpp]; if( m_bbuf == NULL ) m_bbuf = new sampleFrame[m_fpp]; for( fpp_t frame = 0; frame < _frames; frame++ ) { // put phases of 1-series oscs into variables because phase modulation might happen float A1_lphase = m_lphase[A1_OSC]; float A1_rphase = m_rphase[A1_OSC]; float B1_lphase = m_lphase[B1_OSC]; float B1_rphase = m_rphase[B1_OSC]; ///////////// A-series ///////////////// // A2 sample_t A2_L = linearInterpolate( m_A2wave[ static_cast( m_lphase[A2_OSC] ) ], m_A2wave[ static_cast( m_lphase[A2_OSC] + 1 ) % WAVELEN ], fraction( m_lphase[A2_OSC] ) ) * m_parent->m_lvol[A2_OSC]; sample_t A2_R = linearInterpolate( m_A2wave[ static_cast( m_rphase[A2_OSC] ) ], m_A2wave[ static_cast( m_rphase[A2_OSC] + 1 ) % WAVELEN ], fraction( m_rphase[A2_OSC] ) ) * m_parent->m_rvol[A2_OSC]; // if phase mod, add to phases if( m_amod == MOD_PM ) { A1_lphase = fmodf( A1_lphase + A2_L * PMOD_AMT, WAVELEN ); if( A1_lphase < 0 ) A1_lphase += WAVELEN; A1_rphase = fmodf( A1_rphase + A2_R * PMOD_AMT, WAVELEN ); if( A1_rphase < 0 ) A1_rphase += WAVELEN; } // A1 sample_t A1_L = linearInterpolate( m_A1wave[ static_cast( A1_lphase ) ], m_A1wave[ static_cast( A1_lphase + 1 ) % WAVELEN ], fraction( A1_lphase ) ) * m_parent->m_lvol[A1_OSC]; sample_t A1_R = linearInterpolate( m_A1wave[ static_cast( A1_rphase ) ], m_A1wave[ static_cast( A1_rphase + 1 ) % WAVELEN ], fraction( A1_rphase ) ) * m_parent->m_rvol[A1_OSC]; ///////////// B-series ///////////////// // B2 sample_t B2_L = linearInterpolate( m_B2wave[ static_cast( m_lphase[B2_OSC] ) ], m_B2wave[ static_cast( m_lphase[B2_OSC] + 1 ) % WAVELEN ], fraction( m_lphase[B2_OSC] ) ) * m_parent->m_lvol[B2_OSC]; sample_t B2_R = linearInterpolate( m_B2wave[ static_cast( m_rphase[B2_OSC] ) ], m_B2wave[ static_cast( m_rphase[B2_OSC] + 1 ) % WAVELEN ], fraction( m_rphase[B2_OSC] ) ) * m_parent->m_rvol[B2_OSC]; // if crosstalk active, add a1 const float xt = m_parent->m_xtalk.value(); if( xt > 0.0 ) { B2_L += ( A1_L * xt ) * 0.01f; B2_R += ( A1_R * xt ) * 0.01f; } // if phase mod, add to phases if( m_bmod == MOD_PM ) { B1_lphase = fmodf( B1_lphase + B2_L * PMOD_AMT, WAVELEN ); if( B1_lphase < 0 ) B1_lphase += WAVELEN; B1_rphase = fmodf( B1_rphase + B2_R * PMOD_AMT, WAVELEN ); if( B1_rphase < 0 ) B1_rphase += WAVELEN; } // B1 sample_t B1_L = linearInterpolate( m_B1wave[ static_cast( B1_lphase ) % WAVELEN ], m_B1wave[ static_cast( B1_lphase + 1 ) % WAVELEN ], fraction( B1_lphase ) ) * m_parent->m_lvol[B1_OSC]; sample_t B1_R = linearInterpolate( m_B1wave[ static_cast( B1_rphase ) % WAVELEN ], m_B1wave[ static_cast( B1_rphase + 1 ) % WAVELEN ], fraction( B1_rphase ) ) * m_parent->m_rvol[B1_OSC]; // A-series modulation) switch( m_amod ) { case MOD_MIX: A1_L = ( A1_L + A2_L ) / 2.0; A1_R = ( A1_R + A2_R ) / 2.0; break; case MOD_AM: A1_L *= qMax( 0.0f, A2_L + 1.0f ); A1_R *= qMax( 0.0f, A2_R + 1.0f ); break; case MOD_RM: A1_L *= A2_L; A1_R *= A2_R; break; } m_abuf[frame][0] = A1_L; m_abuf[frame][1] = A1_R; // B-series modulation (other than phase mod) switch( m_bmod ) { case MOD_MIX: B1_L = ( B1_L + B2_L ) / 2.0; B1_R = ( B1_R + B2_R ) / 2.0; break; case MOD_AM: B1_L *= qMax( 0.0f, B2_L + 1.0f ); B1_R *= qMax( 0.0f, B2_R + 1.0f ); break; case MOD_RM: B1_L *= B2_L; B1_R *= B2_R; break; } m_bbuf[frame][0] = B1_L; m_bbuf[frame][1] = B1_R; // update phases for( int i = 0; i < NUM_OSCS; i++ ) { m_lphase[i] += ( static_cast( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * m_parent->m_lfreq[i] ) ) ); m_lphase[i] = fmodf( m_lphase[i], WAVELEN ); m_rphase[i] += ( static_cast( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * m_parent->m_rfreq[i] ) ) ); m_rphase[i] = fmodf( m_rphase[i], WAVELEN ); } } } WatsynInstrument::WatsynInstrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &watsyn_plugin_descriptor ), a1_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume A1" ) ), a2_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume A2" ) ), b1_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume B1" ) ), b2_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume B2" ) ), a1_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning A1" ) ), a2_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning A2" ) ), b1_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning B1" ) ), b2_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning B2" ) ), a1_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier A1" ) ), a2_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier A2" ) ), b1_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier B1" ) ), b2_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier B2" ) ), a1_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune A1" ) ), a2_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune A2" ) ), b1_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune B1" ) ), b2_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune B2" ) ), a1_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune A1" ) ), a2_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune A2" ) ), b1_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune B1" ) ), b2_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune B2" ) ), a1_graph( -1.0f, 1.0f, GRAPHLEN, this ), a2_graph( -1.0f, 1.0f, GRAPHLEN, this ), b1_graph( -1.0f, 1.0f, GRAPHLEN, this ), b2_graph( -1.0f, 1.0f, GRAPHLEN, this ), m_abmix( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "A-B Mix" ) ), m_envAmt( 0.0f, -200.0f, 200.0f, 1.0f, this, tr( "A-B Mix envelope amount" ) ), m_envAtt( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "A-B Mix envelope attack" ) ), m_envHold( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "A-B Mix envelope hold" ) ), m_envDec( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "A-B Mix envelope decay" ) ), m_xtalk( 0.0f, 0.0f, 100.0f, 0.1f, this, tr( "A1-B2 Crosstalk" ) ), m_amod( 0, 0, 3, this, tr( "A2-A1 modulation" ) ), m_bmod( 0, 0, 3, this, tr( "B2-B1 modulation" ) ), m_selectedGraph( 0, 0, 3, this, tr( "Selected graph" ) ) { connect( &a1_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &a2_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &b1_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &b2_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &a1_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &a2_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &b1_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &b2_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) ); connect( &a1_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqA1() ) ); connect( &a2_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqA2() ) ); connect( &b1_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqB1() ) ); connect( &b2_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqB2() ) ); connect( &a1_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA1() ) ); connect( &a2_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA2() ) ); connect( &b1_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB1() ) ); connect( &b2_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB2() ) ); connect( &a1_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA1() ) ); connect( &a2_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA2() ) ); connect( &b1_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB1() ) ); connect( &b2_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB2() ) ); connect( &a1_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveA1() ) ); connect( &a2_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveA2() ) ); connect( &b1_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveB1() ) ); connect( &b2_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveB2() ) ); a1_graph.setWaveToSine(); a2_graph.setWaveToSine(); b1_graph.setWaveToSine(); b2_graph.setWaveToSine(); updateVolumes(); updateFreqA1(); updateFreqA2(); updateFreqB1(); updateFreqB2(); updateWaveA1(); updateWaveA2(); updateWaveB1(); updateWaveB2(); } WatsynInstrument::~WatsynInstrument() { } void WatsynInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ) { if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { WatsynObject * w = new WatsynObject( &A1_wave[0], &A2_wave[0], &B1_wave[0], &B2_wave[0], m_amod.value(), m_bmod.value(), engine::mixer()->processingSampleRate(), _n, engine::mixer()->framesPerPeriod(), this ); _n->m_pluginData = w; } const fpp_t frames = _n->framesLeftForCurrentPeriod(); WatsynObject * w = static_cast( _n->m_pluginData ); sampleFrame * abuf = w->abuf(); sampleFrame * bbuf = w->bbuf(); w-> renderOutput( frames ); // envelope parameters const float envAmt = m_envAmt.value(); const float envAtt = ( m_envAtt.value() * w->samplerate() ) / 1000.0f; const float envHold = ( m_envHold.value() * w->samplerate() ) / 1000.0f; const float envDec = ( m_envDec.value() * w->samplerate() ) / 1000.0f; const float envLen = envAtt + envDec + envHold; const float tfp_ = static_cast( _n->totalFramesPlayed() ); // if sample-exact is enabled, use sample-exact calculations... // disabled pending proper implementation of sample-exactness /* if( engine::mixer()->currentQualitySettings().sampleExactControllers ) { for( fpp_t f=0; f < frames; f++ ) { const float tfp = tfp_ + f; // handle mixing envelope float mixvalue = m_abmix.value( f ); if( envAmt != 0.0f && tfp < envLen ) { if( tfp < envAtt ) { mixvalue = qBound( -100.0f, mixvalue + ( tfp / envAtt * envAmt ), 100.0f ); } else if ( tfp >= envAtt && tfp < envAtt + envHold ) { mixvalue = qBound( -100.0f, mixvalue + envAmt, 100.0f ); } else { mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - ( envAtt + envHold ) ) / envDec * envAmt ), 100.0f ); } } // get knob values in sample-exact way const float bmix = ( ( mixvalue + 100.0 ) / 200.0 ); const float amix = 1.0 - bmix; // mix a/b streams according to mixing knob _working_buffer[f][0] = ( abuf[f][0] * amix ) + ( bbuf[f][0] * bmix ); _working_buffer[f][1] = ( abuf[f][1] * amix ) + ( bbuf[f][1] * bmix ); } } else*/ // if sample-exact is not enabled, use simpler calculations: // if mix envelope is active, and we haven't gone past the envelope end, use envelope-aware calculation... if( envAmt != 0.0f && tfp_ < envLen ) { const float mixvalue_ = m_abmix.value(); for( fpp_t f=0; f < frames; f++ ) { float mixvalue = mixvalue_; const float tfp = tfp_ + f; // handle mixing envelope if( tfp < envAtt ) { mixvalue = qBound( -100.0f, mixvalue + ( tfp / envAtt * envAmt ), 100.0f ); } else if ( tfp >= envAtt && tfp < envAtt + envHold ) { mixvalue = qBound( -100.0f, mixvalue + envAmt, 100.0f ); } else { mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - ( envAtt + envHold ) ) / envDec * envAmt ), 100.0f ); } // get knob values const float bmix = ( ( mixvalue + 100.0 ) / 200.0 ); const float amix = 1.0 - bmix; // mix a/b streams according to mixing knob _working_buffer[f][0] = ( abuf[f][0] * amix ) + ( bbuf[f][0] * bmix ); _working_buffer[f][1] = ( abuf[f][1] * amix ) + ( bbuf[f][1] * bmix ); } } // ... mix envelope is inactive or we've past the end of envelope, so use a faster calculation to save cpu else { // get knob values const float bmix = ( ( m_abmix.value() + 100.0 ) / 200.0 ); const float amix = 1.0 - bmix; for( fpp_t f=0; f < frames; f++ ) { // mix a/b streams according to mixing knob _working_buffer[f][0] = ( abuf[f][0] * amix ) + ( bbuf[f][0] * bmix ); _working_buffer[f][1] = ( abuf[f][1] * amix ) + ( bbuf[f][1] * bmix ); } } applyRelease( _working_buffer, _n ); instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n ); } void WatsynInstrument::deleteNotePluginData( NotePlayHandle * _n ) { delete static_cast( _n->m_pluginData ); } void WatsynInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { a1_vol.saveSettings( _doc, _this, "a1_vol" ); a2_vol.saveSettings( _doc, _this, "a2_vol" ); b1_vol.saveSettings( _doc, _this, "b1_vol" ); b2_vol.saveSettings( _doc, _this, "b2_vol" ); a1_pan.saveSettings( _doc, _this, "a1_pan" ); a2_pan.saveSettings( _doc, _this, "a2_pan" ); b1_pan.saveSettings( _doc, _this, "b1_pan" ); b2_pan.saveSettings( _doc, _this, "b2_pan" ); a1_mult.saveSettings( _doc, _this, "a1_mult" ); a2_mult.saveSettings( _doc, _this, "a2_mult" ); b1_mult.saveSettings( _doc, _this, "b1_mult" ); b2_mult.saveSettings( _doc, _this, "b2_mult" ); a1_ltune.saveSettings( _doc, _this, "a1_ltune" ); a2_ltune.saveSettings( _doc, _this, "a2_ltune" ); b1_ltune.saveSettings( _doc, _this, "b1_ltune" ); b2_ltune.saveSettings( _doc, _this, "b2_ltune" ); a1_rtune.saveSettings( _doc, _this, "a1_rtune" ); a2_rtune.saveSettings( _doc, _this, "a2_rtune" ); b1_rtune.saveSettings( _doc, _this, "b1_rtune" ); b2_rtune.saveSettings( _doc, _this, "b2_rtune" ); // save graphs QString sampleString; base64::encode( (const char *)a1_graph.samples(), a1_graph.length() * sizeof(float), sampleString ); _this.setAttribute( "a1_wave", sampleString ); base64::encode( (const char *)a2_graph.samples(), a2_graph.length() * sizeof(float), sampleString ); _this.setAttribute( "a2_wave", sampleString ); base64::encode( (const char *)b1_graph.samples(), b1_graph.length() * sizeof(float), sampleString ); _this.setAttribute( "b1_wave", sampleString ); base64::encode( (const char *)b2_graph.samples(), b2_graph.length() * sizeof(float), sampleString ); _this.setAttribute( "b2_wave", sampleString ); m_abmix.saveSettings( _doc, _this, "abmix" ); m_envAmt.saveSettings( _doc, _this, "envAmt" ); m_envAtt.saveSettings( _doc, _this, "envAtt" ); m_envHold.saveSettings( _doc, _this, "envHold" ); m_envDec.saveSettings( _doc, _this, "envDec" ); m_xtalk.saveSettings( _doc, _this, "xtalk" ); m_amod.saveSettings( _doc, _this, "amod" ); m_bmod.saveSettings( _doc, _this, "bmod" ); /* m_selectedGraph.saveSettings( _doc, _this, "selgraph" );*/ } void WatsynInstrument::loadSettings( const QDomElement & _this ) { a1_vol.loadSettings( _this, "a1_vol" ); a2_vol.loadSettings( _this, "a2_vol" ); b1_vol.loadSettings( _this, "b1_vol" ); b2_vol.loadSettings( _this, "b2_vol" ); a1_pan.loadSettings( _this, "a1_pan" ); a2_pan.loadSettings( _this, "a2_pan" ); b1_pan.loadSettings( _this, "b1_pan" ); b2_pan.loadSettings( _this, "b2_pan" ); a1_mult.loadSettings( _this, "a1_mult" ); a2_mult.loadSettings( _this, "a2_mult" ); b1_mult.loadSettings( _this, "b1_mult" ); b2_mult.loadSettings( _this, "b2_mult" ); a1_ltune.loadSettings( _this, "a1_ltune" ); a2_ltune.loadSettings( _this, "a2_ltune" ); b1_ltune.loadSettings( _this, "b1_ltune" ); b2_ltune.loadSettings( _this, "b2_ltune" ); a1_rtune.loadSettings( _this, "a1_rtune" ); a2_rtune.loadSettings( _this, "a2_rtune" ); b1_rtune.loadSettings( _this, "b1_rtune" ); b2_rtune.loadSettings( _this, "b2_rtune" ); // load graphs int size = 0; char * dst = 0; base64::decode( _this.attribute( "a1_wave"), &dst, &size ); a1_graph.setSamples( (float*) dst ); base64::decode( _this.attribute( "a2_wave"), &dst, &size ); a2_graph.setSamples( (float*) dst ); base64::decode( _this.attribute( "b1_wave"), &dst, &size ); b1_graph.setSamples( (float*) dst ); base64::decode( _this.attribute( "b2_wave"), &dst, &size ); b2_graph.setSamples( (float*) dst ); delete[] dst; m_abmix.loadSettings( _this, "abmix" ); m_envAmt.loadSettings( _this, "envAmt" ); m_envAtt.loadSettings( _this, "envAtt" ); m_envHold.loadSettings( _this, "envHold" ); m_envDec.loadSettings( _this, "envDec" ); m_xtalk.loadSettings( _this, "xtalk" ); m_amod.loadSettings( _this, "amod" ); m_bmod.loadSettings( _this, "bmod" ); /* m_selectedGraph.loadSettings( _this, "selgraph" );*/ } QString WatsynInstrument::nodeName() const { return( watsyn_plugin_descriptor.name ); } PluginView * WatsynInstrument::instantiateView( QWidget * _parent ) { return( new WatsynView( this, _parent ) ); } void WatsynInstrument::updateVolumes() { m_lvol[A1_OSC] = leftCh( a1_vol.value(), a1_pan.value() ); m_rvol[A1_OSC] = rightCh( a1_vol.value(), a1_pan.value() ); m_lvol[A2_OSC] = leftCh( a2_vol.value(), a2_pan.value() ); m_rvol[A2_OSC] = rightCh( a2_vol.value(), a2_pan.value() ); m_lvol[B1_OSC] = leftCh( b1_vol.value(), b1_pan.value() ); m_rvol[B1_OSC] = rightCh( b1_vol.value(), b1_pan.value() ); m_lvol[B2_OSC] = leftCh( b2_vol.value(), b2_pan.value() ); m_rvol[B2_OSC] = rightCh( b2_vol.value(), b2_pan.value() ); } void WatsynInstrument::updateFreqA1() { // calculate frequencies m_lfreq[A1_OSC] = ( a1_mult.value() / 8 ) * powf( 2, a1_ltune.value() / 1200 ); m_rfreq[A1_OSC] = ( a1_mult.value() / 8 ) * powf( 2, a1_rtune.value() / 1200 ); } void WatsynInstrument::updateFreqA2() { // calculate frequencies m_lfreq[A2_OSC] = ( a2_mult.value() / 8 ) * powf( 2, a2_ltune.value() / 1200 ); m_rfreq[A2_OSC] = ( a2_mult.value() / 8 ) * powf( 2, a2_rtune.value() / 1200 ); } void WatsynInstrument::updateFreqB1() { // calculate frequencies m_lfreq[B1_OSC] = ( b1_mult.value() / 8 ) * powf( 2, b1_ltune.value() / 1200 ); m_rfreq[B1_OSC] = ( b1_mult.value() / 8 ) * powf( 2, b1_rtune.value() / 1200 ); } void WatsynInstrument::updateFreqB2() { // calculate frequencies m_lfreq[B2_OSC] = ( b2_mult.value() / 8 ) * powf( 2, b2_ltune.value() / 1200 ); m_rfreq[B2_OSC] = ( b2_mult.value() / 8 ) * powf( 2, b2_rtune.value() / 1200 ); } void WatsynInstrument::updateWaveA1() { // do sinc+oversampling on the wavetables to improve quality srccpy( &A1_wave[0], const_cast( a1_graph.samples() ) ); } void WatsynInstrument::updateWaveA2() { // do sinc+oversampling on the wavetables to improve quality srccpy( &A2_wave[0], const_cast( a2_graph.samples() ) ); } void WatsynInstrument::updateWaveB1() { // do sinc+oversampling on the wavetables to improve quality srccpy( &B1_wave[0], const_cast( b1_graph.samples() ) ); } void WatsynInstrument::updateWaveB2() { // do sinc+oversampling on the wavetables to improve quality srccpy( &B2_wave[0], const_cast( b2_graph.samples() ) ); } WatsynView::WatsynView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); // knobs... lots of em makeknob( a1_volKnob, 130, A1ROW, "Volume", "%", "aKnob" ) makeknob( a2_volKnob, 130, A2ROW, "Volume", "%", "aKnob" ) makeknob( b1_volKnob, 130, B1ROW, "Volume", "%", "bKnob" ) makeknob( b2_volKnob, 130, B2ROW, "Volume", "%", "bKnob" ) makeknob( a1_panKnob, 154, A1ROW, "Panning", "", "aKnob" ) makeknob( a2_panKnob, 154, A2ROW, "Panning", "", "aKnob" ) makeknob( b1_panKnob, 154, B1ROW, "Panning", "", "bKnob" ) makeknob( b2_panKnob, 154, B2ROW, "Panning", "", "bKnob" ) makeknob( a1_multKnob, 178, A1ROW, "Freq. multiplier", "/8", "aKnob" ) makeknob( a2_multKnob, 178, A2ROW, "Freq. multiplier", "/8", "aKnob" ) makeknob( b1_multKnob, 178, B1ROW, "Freq. multiplier", "/8", "bKnob" ) makeknob( b2_multKnob, 178, B2ROW, "Freq. multiplier", "/8", "bKnob" ) makeknob( a1_ltuneKnob, 202, A1ROW, "Left detune", " cents", "aKnob" ) makeknob( a2_ltuneKnob, 202, A2ROW, "Left detune", " cents", "aKnob" ) makeknob( b1_ltuneKnob, 202, B1ROW, "Left detune", " cents", "bKnob" ) makeknob( b2_ltuneKnob, 202, B2ROW, "Left detune", " cents", "bKnob" ) makeknob( a1_rtuneKnob, 226, A1ROW, "Right detune", " cents", "aKnob" ) makeknob( a2_rtuneKnob, 226, A2ROW, "Right detune", " cents", "aKnob" ) makeknob( b1_rtuneKnob, 226, B1ROW, "Right detune", " cents", "bKnob" ) makeknob( b2_rtuneKnob, 226, B2ROW, "Right detune", " cents", "bKnob" ) makeknob( m_abmixKnob, 4, 3, "A-B Mix", "", "mixKnob" ) makeknob( m_envAmtKnob, 88, 3, "Mix envelope amount", "", "mixenvKnob" ) maketsknob( m_envAttKnob, 88, A1ROW, "Mix envelope attack", " ms", "mixenvKnob" ) maketsknob( m_envHoldKnob, 88, A2ROW, "Mix envelope hold", " ms", "mixenvKnob" ) maketsknob( m_envDecKnob, 88, B1ROW, "Mix envelope decay", " ms", "mixenvKnob" ) makeknob( m_xtalkKnob, 88, B2ROW, "Crosstalk", "", "xtalkKnob" ) // let's set volume knobs a1_volKnob -> setVolumeKnob( true ); a2_volKnob -> setVolumeKnob( true ); b1_volKnob -> setVolumeKnob( true ); b2_volKnob -> setVolumeKnob( true ); m_abmixKnob -> setFixedSize( 31, 31 ); // button groups next. // graph select buttons pixmapButton * a1_selectButton = new pixmapButton( this, NULL ); a1_selectButton -> move( 4, 121 ); a1_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "a1_active" ) ); a1_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "a1_inactive" ) ); toolTip::add( a1_selectButton, tr( "Select oscillator A1") ); pixmapButton * a2_selectButton = new pixmapButton( this, NULL ); a2_selectButton -> move( 44, 121 ); a2_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "a2_active" ) ); a2_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "a2_inactive" ) ); toolTip::add( a2_selectButton, tr( "Select oscillator A2") ); pixmapButton * b1_selectButton = new pixmapButton( this, NULL ); b1_selectButton -> move( 84, 121 ); b1_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "b1_active" ) ); b1_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "b1_inactive" ) ); toolTip::add( b1_selectButton, tr( "Select oscillator B1") ); pixmapButton * b2_selectButton = new pixmapButton( this, NULL ); b2_selectButton -> move( 124, 121 ); b2_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "b2_active" ) ); b2_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "b2_inactive" ) ); toolTip::add( b2_selectButton, tr( "Select oscillator B2") ); m_selectedGraphGroup = new automatableButtonGroup( this ); m_selectedGraphGroup -> addButton( a1_selectButton ); m_selectedGraphGroup -> addButton( a2_selectButton ); m_selectedGraphGroup -> addButton( b1_selectButton ); m_selectedGraphGroup -> addButton( b2_selectButton ); WatsynInstrument * w = castModel(); m_selectedGraphGroup -> setModel( &w -> m_selectedGraph); // A-modulation button group pixmapButton * amod_mixButton = new pixmapButton( this, NULL ); amod_mixButton -> move( 4, 50 ); amod_mixButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "amix_active" ) ); amod_mixButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "amix_inactive" ) ); toolTip::add( amod_mixButton, tr( "Mix output of A2 to A1" ) ); pixmapButton * amod_amButton = new pixmapButton( this, NULL ); amod_amButton -> move( 4, 66 ); amod_amButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "aam_active" ) ); amod_amButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "aam_inactive" ) ); toolTip::add( amod_amButton, tr( "Modulate amplitude of A1 with output of A2" ) ); pixmapButton * amod_rmButton = new pixmapButton( this, NULL ); amod_rmButton -> move( 4, 82 ); amod_rmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "arm_active" ) ); amod_rmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "arm_inactive" ) ); toolTip::add( amod_rmButton, tr( "Ring-modulate A1 and A2" ) ); pixmapButton * amod_pmButton = new pixmapButton( this, NULL ); amod_pmButton -> move( 4, 98 ); amod_pmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "apm_active" ) ); amod_pmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "apm_inactive" ) ); toolTip::add( amod_pmButton, tr( "Modulate phase of A1 with output of A2" ) ); m_aModGroup = new automatableButtonGroup( this ); m_aModGroup -> addButton( amod_mixButton ); m_aModGroup -> addButton( amod_amButton ); m_aModGroup -> addButton( amod_rmButton ); m_aModGroup -> addButton( amod_pmButton ); // B-modulation button group pixmapButton * bmod_mixButton = new pixmapButton( this, NULL ); bmod_mixButton -> move( 44, 50 ); bmod_mixButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bmix_active" ) ); bmod_mixButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bmix_inactive" ) ); toolTip::add( bmod_mixButton, tr( "Mix output of B2 to B1" ) ); pixmapButton * bmod_amButton = new pixmapButton( this, NULL ); bmod_amButton -> move( 44, 66 ); bmod_amButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bam_active" ) ); bmod_amButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bam_inactive" ) ); toolTip::add( bmod_amButton, tr( "Modulate amplitude of B1 with output of B2" ) ); pixmapButton * bmod_rmButton = new pixmapButton( this, NULL ); bmod_rmButton -> move( 44, 82 ); bmod_rmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "brm_active" ) ); bmod_rmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "brm_inactive" ) ); toolTip::add( bmod_rmButton, tr( "Ring-modulate B1 and B2" ) ); pixmapButton * bmod_pmButton = new pixmapButton( this, NULL ); bmod_pmButton -> move( 44, 98 ); bmod_pmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bpm_active" ) ); bmod_pmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bpm_inactive" ) ); toolTip::add( bmod_pmButton, tr( "Modulate phase of B1 with output of B2" ) ); m_bModGroup = new automatableButtonGroup( this ); m_bModGroup -> addButton( bmod_mixButton ); m_bModGroup -> addButton( bmod_amButton ); m_bModGroup -> addButton( bmod_rmButton ); m_bModGroup -> addButton( bmod_pmButton ); // graph widgets pal = QPalette(); pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap("wavegraph") ); // a1 graph a1_graph = new graph( this, graph::LinearStyle, 224, 105 ); a1_graph->move( 4, 141 ); a1_graph->setAutoFillBackground( true ); a1_graph->setGraphColor( QColor( 0x43, 0xb2, 0xff ) ); toolTip::add( a1_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) ); a1_graph->setPalette( pal ); // a2 graph a2_graph = new graph( this, graph::LinearStyle, 224, 105 ); a2_graph->move( 4, 141 ); a2_graph->setAutoFillBackground( true ); a2_graph->setGraphColor( QColor( 0x43, 0xb2, 0xff ) ); toolTip::add( a2_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) ); a2_graph->setPalette( pal ); // b1 graph b1_graph = new graph( this, graph::LinearStyle, 224, 105 ); b1_graph->move( 4, 141 ); b1_graph->setAutoFillBackground( true ); b1_graph->setGraphColor( QColor( 0xfc, 0x54, 0x31 ) ); toolTip::add( b1_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) ); b1_graph->setPalette( pal ); // b2 graph b2_graph = new graph( this, graph::LinearStyle, 224, 105 ); b2_graph->move( 4, 141 ); b2_graph->setAutoFillBackground( true ); b2_graph->setGraphColor( QColor( 0xfc, 0x54, 0x31 ) ); toolTip::add( b2_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) ); b2_graph->setPalette( pal ); // misc pushbuttons // waveform modifications m_loadButton = new pixmapButton( this, tr( "Load waveform" ) ); m_loadButton -> move ( 173, 121 ); m_loadButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "load_active" ) ); m_loadButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "load_inactive" ) ); toolTip::add( m_loadButton, tr( "Click to load a waveform from a sample file" ) ); m_phaseLeftButton = new pixmapButton( this, tr( "Phase left" ) ); m_phaseLeftButton -> move ( 193, 121 ); m_phaseLeftButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "phl_active" ) ); m_phaseLeftButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "phl_inactive" ) ); toolTip::add( m_phaseLeftButton, tr( "Click to shift phase by -15 degrees" ) ); m_phaseRightButton = new pixmapButton( this, tr( "Phase right" ) ); m_phaseRightButton -> move ( 210, 121 ); m_phaseRightButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "phr_active" ) ); m_phaseRightButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "phr_inactive" ) ); toolTip::add( m_phaseRightButton, tr( "Click to shift phase by +15 degrees" ) ); m_normalizeButton = new pixmapButton( this, tr( "Normalize" ) ); m_normalizeButton -> move ( 230, 121 ); m_normalizeButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "norm_active" ) ); m_normalizeButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "norm_inactive" ) ); toolTip::add( m_normalizeButton, tr( "Click to normalize" ) ); m_invertButton = new pixmapButton( this, tr( "Invert" ) ); m_invertButton -> move ( 230, 138 ); m_invertButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "inv_active" ) ); m_invertButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "inv_inactive" ) ); toolTip::add( m_invertButton, tr( "Click to invert" ) ); m_smoothButton = new pixmapButton( this, tr( "Smooth" ) ); m_smoothButton -> move ( 230, 155 ); m_smoothButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_active" ) ); m_smoothButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_inactive" ) ); toolTip::add( m_smoothButton, tr( "Click to smooth" ) ); // waveforms m_sinWaveButton = new pixmapButton( this, tr( "Sine wave" ) ); m_sinWaveButton -> move ( 230, 176 ); m_sinWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_active" ) ); m_sinWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_inactive" ) ); toolTip::add( m_sinWaveButton, tr( "Click for sine wave" ) ); m_triWaveButton = new pixmapButton( this, tr( "Triangle wave" ) ); m_triWaveButton -> move ( 230, 194 ); m_triWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "tri_active" ) ); m_triWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "tri_inactive" ) ); toolTip::add( m_triWaveButton, tr( "Click for triangle wave" ) ); m_sawWaveButton = new pixmapButton( this, tr( "Triangle wave" ) ); m_sawWaveButton -> move ( 230, 212 ); m_sawWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_active" ) ); m_sawWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_inactive" ) ); toolTip::add( m_sawWaveButton, tr( "Click for saw wave" ) ); m_sqrWaveButton = new pixmapButton( this, tr( "Square wave" ) ); m_sqrWaveButton -> move ( 230, 230 ); m_sqrWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sqr_active" ) ); m_sqrWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sqr_inactive" ) ); toolTip::add( m_sqrWaveButton, tr( "Click for square wave" ) ); connect( m_sinWaveButton, SIGNAL( clicked() ), this, SLOT( sinWaveClicked() ) ); connect( m_triWaveButton, SIGNAL( clicked() ), this, SLOT( triWaveClicked() ) ); connect( m_sawWaveButton, SIGNAL( clicked() ), this, SLOT( sawWaveClicked() ) ); connect( m_sqrWaveButton, SIGNAL( clicked() ), this, SLOT( sqrWaveClicked() ) ); connect( m_normalizeButton, SIGNAL( clicked() ), this, SLOT( normalizeClicked() ) ); connect( m_invertButton, SIGNAL( clicked() ), this, SLOT( invertClicked() ) ); connect( m_smoothButton, SIGNAL( clicked() ), this, SLOT( smoothClicked() ) ); connect( m_phaseLeftButton, SIGNAL( clicked() ), this, SLOT( phaseLeftClicked() ) ); connect( m_phaseRightButton, SIGNAL( clicked() ), this, SLOT( phaseRightClicked() ) ); connect( m_loadButton, SIGNAL( clicked() ), this, SLOT( loadClicked() ) ); connect( a1_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) ); connect( a2_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) ); connect( b1_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) ); connect( b2_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) ); updateLayout(); } WatsynView::~WatsynView() { } void WatsynView::updateLayout() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->show(); a2_graph->hide(); b1_graph->hide(); b2_graph->hide(); break; case A2_OSC: a1_graph->hide(); a2_graph->show(); b1_graph->hide(); b2_graph->hide(); break; case B1_OSC: a1_graph->hide(); a2_graph->hide(); b1_graph->show(); b2_graph->hide(); break; case B2_OSC: a1_graph->hide(); a2_graph->hide(); b1_graph->hide(); b2_graph->show(); break; } } void WatsynView::sinWaveClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->setWaveToSine(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->setWaveToSine(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->setWaveToSine(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->setWaveToSine(); engine::getSong()->setModified(); break; } } void WatsynView::triWaveClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->setWaveToTriangle(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->setWaveToTriangle(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->setWaveToTriangle(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->setWaveToTriangle(); engine::getSong()->setModified(); break; } } void WatsynView::sawWaveClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->setWaveToSaw(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->setWaveToSaw(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->setWaveToSaw(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->setWaveToSaw(); engine::getSong()->setModified(); break; } } void WatsynView::sqrWaveClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->setWaveToSquare(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->setWaveToSquare(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->setWaveToSquare(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->setWaveToSquare(); engine::getSong()->setModified(); break; } } void WatsynView::normalizeClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->normalize(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->normalize(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->normalize(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->normalize(); engine::getSong()->setModified(); break; } } void WatsynView::invertClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->invert(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->invert(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->invert(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->invert(); engine::getSong()->setModified(); break; } } void WatsynView::smoothClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->smooth(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->smooth(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->smooth(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->smooth(); engine::getSong()->setModified(); break; } } void WatsynView::phaseLeftClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->shiftPhase( -15 ); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->shiftPhase( -15 ); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->shiftPhase( -15 ); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->shiftPhase( -15 ); engine::getSong()->setModified(); break; } } void WatsynView::phaseRightClicked() { switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->shiftPhase( 15 ); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->shiftPhase( 15 ); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->shiftPhase( 15 ); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->shiftPhase( 15 ); engine::getSong()->setModified(); break; } } void WatsynView::loadClicked() { QString fileName; switch( m_selectedGraphGroup->model()->value() ) { case A1_OSC: a1_graph->model()->setWaveToUser(); engine::getSong()->setModified(); break; case A2_OSC: a2_graph->model()->setWaveToUser(); engine::getSong()->setModified(); break; case B1_OSC: b1_graph->model()->setWaveToUser(); engine::getSong()->setModified(); break; case B2_OSC: b2_graph->model()->setWaveToUser(); engine::getSong()->setModified(); break; } } void WatsynView::modelChanged() { WatsynInstrument * w = castModel(); a1_volKnob -> setModel( &w -> a1_vol ); a2_volKnob -> setModel( &w -> a2_vol ); b1_volKnob -> setModel( &w -> b1_vol ); b2_volKnob -> setModel( &w -> b2_vol ); a1_panKnob -> setModel( &w -> a1_pan ); a2_panKnob -> setModel( &w -> a2_pan ); b1_panKnob -> setModel( &w -> b1_pan ); b2_panKnob -> setModel( &w -> b2_pan ); a1_multKnob -> setModel( &w -> a1_mult ); a2_multKnob -> setModel( &w -> a2_mult ); b1_multKnob -> setModel( &w -> b1_mult ); b2_multKnob -> setModel( &w -> b2_mult ); a1_ltuneKnob -> setModel( &w -> a1_ltune ); a2_ltuneKnob -> setModel( &w -> a2_ltune ); b1_ltuneKnob -> setModel( &w -> b1_ltune ); b2_ltuneKnob -> setModel( &w -> b2_ltune ); a1_rtuneKnob -> setModel( &w -> a1_rtune ); a2_rtuneKnob -> setModel( &w -> a2_rtune ); b1_rtuneKnob -> setModel( &w -> b1_rtune ); b2_rtuneKnob -> setModel( &w -> b2_rtune ); m_abmixKnob -> setModel( &w -> m_abmix ); m_selectedGraphGroup -> setModel( &w -> m_selectedGraph ); m_aModGroup -> setModel( &w -> m_amod ); m_bModGroup -> setModel( &w -> m_bmod ); a1_graph -> setModel( &w -> a1_graph ); a2_graph -> setModel( &w -> a2_graph ); b1_graph -> setModel( &w -> b1_graph ); b2_graph -> setModel( &w -> b2_graph ); m_envAmtKnob -> setModel( &w -> m_envAmt ); m_envAttKnob -> setModel( &w -> m_envAtt ); m_envHoldKnob -> setModel( &w -> m_envHold ); m_envDecKnob -> setModel( &w -> m_envDec ); m_xtalkKnob -> setModel( &w -> m_xtalk ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return( new WatsynInstrument( static_cast( _data ) ) ); } } #include "moc_Watsyn.cxx" lmms-1.1.3/plugins/watsyn/Watsyn.h000066400000000000000000000206161247673406200171500ustar00rootroot00000000000000/* * Watsyn.h - a 4-oscillator modulating wavetable synth * * Copyright (c) 2014 Vesa Kivimäki * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef WATSYN_H #define WATSYN_H #include "Instrument.h" #include "InstrumentView.h" #include "graph.h" #include "AutomatableModel.h" #include "automatable_button.h" #include "TempoSyncKnob.h" #include "NotePlayHandle.h" #include "pixmap_button.h" #include #define makeknob( name, x, y, hint, unit, oname ) \ name = new knob( knobStyled, this ); \ name ->move( x, y ); \ name ->setHintText( tr( hint ) + " ", unit ); \ name ->setObjectName( oname ); \ name ->setFixedSize( 19, 19 ); #define maketsknob( name, x, y, hint, unit, oname ) \ name = new TempoSyncKnob( knobStyled, this ); \ name ->move( x, y ); \ name ->setHintText( tr( hint ) + " ", unit ); \ name ->setObjectName( oname ); \ name ->setFixedSize( 19, 19 ); #define A1ROW 26 #define A2ROW 49 #define B1ROW 72 #define B2ROW 95 const int GRAPHLEN = 220; // don't change - must be same as the size of the widget const int WAVERATIO = 32; // oversampling ratio const int WAVELEN = GRAPHLEN * WAVERATIO; const int PMOD_AMT = WAVELEN / 2; const int MOD_MIX = 0; const int MOD_AM = 1; const int MOD_RM = 2; const int MOD_PM = 3; const int NUM_MODS = 4; const int A1_OSC = 0; const int A2_OSC = 1; const int B1_OSC = 2; const int B2_OSC = 3; const int NUM_OSCS = 4; class WatsynInstrument; class WatsynObject { public: WatsynObject( float * _A1wave, float * _A2wave, float * _B1wave, float * _B2wave, int _amod, int _bmod, const sample_rate_t _samplerate, NotePlayHandle * _nph, fpp_t _frames, WatsynInstrument * _w ); virtual ~WatsynObject(); void renderOutput( fpp_t _frames ); inline sampleFrame * abuf() const { return m_abuf; } inline sampleFrame * bbuf() const { return m_bbuf; } inline sample_rate_t samplerate() const { return m_samplerate; } private: int m_amod; int m_bmod; const sample_rate_t m_samplerate; NotePlayHandle * m_nph; fpp_t m_fpp; WatsynInstrument * m_parent; sampleFrame * m_abuf; sampleFrame * m_bbuf; float m_lphase [NUM_OSCS]; float m_rphase [NUM_OSCS]; float m_A1wave [WAVELEN]; float m_A2wave [WAVELEN]; float m_B1wave [WAVELEN]; float m_B2wave [WAVELEN]; }; class WatsynInstrument : public Instrument { Q_OBJECT public: WatsynInstrument( InstrumentTrack * _instrument_track ); virtual ~WatsynInstrument(); virtual void playNote( NotePlayHandle * _n, sampleFrame * _working_buffer ); virtual void deleteNotePluginData( NotePlayHandle * _n ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); virtual void loadSettings( const QDomElement & _this ); virtual QString nodeName() const; virtual f_cnt_t desiredReleaseFrames() const { return( 64 ); } virtual PluginView * instantiateView( QWidget * _parent ); public slots: void updateVolumes(); void updateFreqA1(); void updateFreqA2(); void updateFreqB1(); void updateFreqB2(); void updateWaveA1(); void updateWaveA2(); void updateWaveB1(); void updateWaveB2(); protected: float m_lvol [NUM_OSCS]; float m_rvol [NUM_OSCS]; float m_lfreq [NUM_OSCS]; float m_rfreq [NUM_OSCS]; private: inline float leftCh( float _vol, float _pan ) { return ( _pan <= 0 ? 1.0 : 1.0 - ( _pan / 100.0 ) ) * _vol / 100.0; } inline float rightCh( float _vol, float _pan ) { return ( _pan >= 0 ? 1.0 : 1.0 + ( _pan / 100.0 ) ) * _vol / 100.0; } // memcpy utilizing libsamplerate (src) for sinc interpolation inline void srccpy( float * _dst, float * _src ) { int err; const int margin = 64; // copy to temp array float tmps [ GRAPHLEN + margin ]; // temp array in stack float * tmp = &tmps[0]; memcpy( tmp, _src, sizeof( float ) * GRAPHLEN ); memcpy( tmp + GRAPHLEN, _src, sizeof( float ) * margin ); SRC_STATE * src_state = src_new( SRC_SINC_FASTEST, 1, &err ); SRC_DATA src_data; src_data.data_in = tmp; src_data.input_frames = GRAPHLEN + margin; src_data.data_out = _dst; src_data.output_frames = WAVELEN; src_data.src_ratio = static_cast( WAVERATIO ); src_data.end_of_input = 0; err = src_process( src_state, &src_data ); if( err ) { qDebug( "Watsyn SRC error: %s", src_strerror( err ) ); } src_delete( src_state ); } // memcpy utilizing cubic interpolation /* inline void cipcpy( float * _dst, float * _src ) { // calculate cyclic tangents float tang[GRAPHLEN]; tang[0] = ( _src[1] - _src[ GRAPHLEN - 1] ) / 2; tang[ GRAPHLEN - 1 ] = ( _src[0] - _src[ GRAPHLEN - 2 ] ) / 2; for( int i = 1; i < GRAPHLEN-1; i++ ) { tang[i] = ( _src[i+1] - _src[i-1] ) / 2; } // calculate cspline for( int i=0; i < WAVELEN; i++ ) { const float s1 = _src[ i / WAVERATIO ]; const float s2 = _src[ ( i / WAVERATIO + 1 ) % GRAPHLEN ]; const float m1 = tang[ i / WAVERATIO ]; const float m2 = tang[ ( i / WAVERATIO + 1 ) % GRAPHLEN ]; const float x = static_cast( i % WAVERATIO ) / WAVERATIO; const float x2 = x * x; const float x3 = x * x * x; _dst[i] = ( ( x3 * 2.0 - x2 * 3.0 + 1.0 ) * s1 ) + ( ( x3 * -2.0 + x2 * 3.0 ) * s2 ) + ( ( x3 - x2 * 2 + x ) * m1 ) + ( ( x3 - x2 ) * m2 ); } }*/ FloatModel a1_vol; FloatModel a2_vol; FloatModel b1_vol; FloatModel b2_vol; FloatModel a1_pan; FloatModel a2_pan; FloatModel b1_pan; FloatModel b2_pan; FloatModel a1_mult; FloatModel a2_mult; FloatModel b1_mult; FloatModel b2_mult; FloatModel a1_ltune; FloatModel a2_ltune; FloatModel b1_ltune; FloatModel b2_ltune; FloatModel a1_rtune; FloatModel a2_rtune; FloatModel b1_rtune; FloatModel b2_rtune; graphModel a1_graph; graphModel a2_graph; graphModel b1_graph; graphModel b2_graph; FloatModel m_abmix; FloatModel m_envAmt; TempoSyncKnobModel m_envAtt; TempoSyncKnobModel m_envHold; TempoSyncKnobModel m_envDec; FloatModel m_xtalk; IntModel m_amod; IntModel m_bmod; IntModel m_selectedGraph; float A1_wave [WAVELEN]; float A2_wave [WAVELEN]; float B1_wave [WAVELEN]; float B2_wave [WAVELEN]; friend class WatsynObject; friend class WatsynView; }; class WatsynView : public InstrumentView { Q_OBJECT public: WatsynView( Instrument * _instrument, QWidget * _parent ); virtual ~WatsynView(); protected slots: void updateLayout(); void sinWaveClicked(); void triWaveClicked(); void sawWaveClicked(); void sqrWaveClicked(); void smoothClicked(); void normalizeClicked(); void invertClicked(); void phaseLeftClicked(); void phaseRightClicked(); void loadClicked(); private: virtual void modelChanged(); // knobs knob * a1_volKnob; knob * a2_volKnob; knob * b1_volKnob; knob * b2_volKnob; knob * a1_panKnob; knob * a2_panKnob; knob * b1_panKnob; knob * b2_panKnob; knob * a1_multKnob; knob * a2_multKnob; knob * b1_multKnob; knob * b2_multKnob; knob * a1_ltuneKnob; knob * a2_ltuneKnob; knob * b1_ltuneKnob; knob * b2_ltuneKnob; knob * a1_rtuneKnob; knob * a2_rtuneKnob; knob * b1_rtuneKnob; knob * b2_rtuneKnob; knob * m_abmixKnob; knob * m_envAmtKnob; TempoSyncKnob * m_envAttKnob; TempoSyncKnob * m_envHoldKnob; TempoSyncKnob * m_envDecKnob; knob * m_xtalkKnob; automatableButtonGroup * m_selectedGraphGroup; automatableButtonGroup * m_aModGroup; automatableButtonGroup * m_bModGroup; graph * a1_graph; graph * a2_graph; graph * b1_graph; graph * b2_graph; pixmapButton * m_sinWaveButton; pixmapButton * m_triWaveButton; pixmapButton * m_sawWaveButton; pixmapButton * m_sqrWaveButton; pixmapButton * m_normalizeButton; pixmapButton * m_invertButton; pixmapButton * m_smoothButton; pixmapButton * m_phaseLeftButton; pixmapButton * m_phaseRightButton; pixmapButton * m_loadButton; }; #endif lmms-1.1.3/plugins/watsyn/a1_active.png000066400000000000000000000013771247673406200200570ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME /BtEXtCommentCreated with GIMPWgIDATH͖kQ?3o6gb 6^ Vl 0(Q`c"+b;sw z,v;}3'>1* H9:ffN-*,Uj(o/43Nq!₎630ɪafX`i wG$hX6=s޹`(IcIXbAat ^AèaO/ai̡; gm~yZ'1ЍV"čeypjeX҄Or;!>eI4h~ 2tdpxx} T?~׳4!jY9EU2n(p n .`yf&x7P>[ٻ Juǔ S$-x^bINf >++ \u1y),Ez4IlL^]GX9\T[] ´8^HR[cdd?Lwt7Ɇhu"Al:yu\TP]0 z԰tVmO BV]ۖ X=0FQ<ZfG4:9Sr*Z 7X\k0,j_~A8C_IENDB`lmms-1.1.3/plugins/watsyn/a1_inactive.png000066400000000000000000000007161247673406200204020ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME9WtEXtCommentCreated with GIMPW6IDATH͖;n@B2ܸtAGDC.;D]a[P% 2 .,m*NiiwgFao/@?PDXVRn5GURUyX,}c eY Ɯ\t:EU9xGL&NS{IEkWr4vKeJ16cx⺵v,rw]׭]׽$\awZfQ mwxEQPEo-Ma$岭}Ug|SLLuIENDB`lmms-1.1.3/plugins/watsyn/a2_active.png000066400000000000000000000014571247673406200200570ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIMEgݚtEXtCommentCreated with GIMPWIDATH͖kTA&5`$I#e_"FA-Rm A  4)_1wwލ`00}\衧.)=qP$\.˵3xg<;E1c,S2|JUcS'D{|(%0p Xbc5Cq%(uhG'Cᣀ'oPÀrϯD4,bz-jPUEB XNa#:GP KK ݈Jde:6DP]EQU T!(`st "j`PT˾KcmqH"]~}~6@l0lԱnnJ3` &Z> uw""lL2ێk "q`C1IRLz>:{Rg1s"MzM5vlV MVhn.!$'6 nL6+b__#jĭ b=Sij}EZ檫r;vyB\AZD \KnKdOwIENDB`lmms-1.1.3/plugins/watsyn/a2_inactive.png000066400000000000000000000007641247673406200204060ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME ΦtEXtCommentCreated with GIMPW\IDATH͖jAϫDF;;<`m#*x\lF uRĻx$Øfwݏٙg&)JFB, d2)p8$^}: X,t]z>Yq2L.oy*rLVu]#ftz/rTl6GD>:ʿYln UED0ӽ{u~R+JBDUavXܕ}Ď "FjvV >>NZ[S.z^&XײW!Z2(=w] _BBd FIENDB`lmms-1.1.3/plugins/watsyn/aam_active.png000066400000000000000000000014761247673406200203140ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME:#^ltEXtCommentCreated with GIMPWIDATH͖]MQ{e&'?i(I/ޔ(I^D2%O+$IJ %34(5ϙ<3νwfoj9ַ^k-]ûsQEEDQ{|X"HZq N"4BðJ $Ӭ$tj HV">DŢAU4H".d\1@ҭZ ˘+" )We L%Fa'A L̬MD*Zcp3|HSdwf|auV6 /~74Z*%P}KW/^&R.Bvr\@d(H_ŷA%ċ xQ\Cd)=jU걸}w۽«Ӕ_ $[ɴ/Kkی0" ݙ{v \fuT, XA~&.o.. w ߁wBzJ{`(F>Hc8^H(~X+}Zj8 XTD*>hLn͉BfFj\$$3IAnƤh :W}tx5oNl||2TvFhq/;huL`ȓ}S}X)|떟b׭h[(IENDB`lmms-1.1.3/plugins/watsyn/aam_inactive.png000066400000000000000000000007401247673406200206340ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME8KoZtEXtCommentCreated with GIMPWHIDATHj@QAd|]R}C.0?l# .JRm Y0 {bD˲X)Rq]VfF[,eO&[ qW1$Il6F#A@eyk$ i)YUDm&mÐrp~qt:Mr/Zk,˪^%v]Zi۶ %kՊ0 \ץ4jPqLxltrWt(n:t]o7x"h B8IENDB`lmms-1.1.3/plugins/watsyn/amix_active.png000066400000000000000000000017561247673406200205150ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME:WtEXtCommentCreated with GIMPWVIDATH͖MhUܙ7%iRMD$MEVHP#  ܸqP!rSp_TEb`b*h&kߛ73&%UMͅùy.* "dfOՋ9@U8|b~W1ݫ!!gciizDT".@D0E0? T/!wQEl'H4)-IENDB`lmms-1.1.3/plugins/watsyn/amix_inactive.png000066400000000000000000000011531247673406200210330ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME7,{tEXtCommentCreated with GIMPWIDATH͖A@hbԈtƓ<"saN"݈Ab VIQ`Ђ&Iuu?՝_~_~~| ޿JpP`01"znZ@UUضjh6v, a4Zja:bZA4XqX,BJ@wJdg]#_\NLLN1!80M &k2c, xS"B&A>O1ϡ( 6p;y"GXRi~PU{84MKSPZ,\a0 @O. XB@ nr^}ai8fz=֕PBAϸJl6 u0S$mۑDL}?1[^= 7<9伟IENDB`lmms-1.1.3/plugins/watsyn/apm_active.png000066400000000000000000000014751247673406200203320ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME:;MtEXtCommentCreated with GIMPWIDATH͖_La}sf,F& -BQHrBE\(J[B%ה $P%͟fΜ}.Ι93;Zazs|w =CU1 ("Ќ˿: W 15 0AF *=,;. 3@\OΠ*jX@wxZ] w#Ypf LT'VK bsyₑL*Qȇt C[;9/NlU` +1a7ZOY\gtutߨjU\3}XǍ X ^bEm@U*oڴEa^kԺ.yz̷y~|#. Ӷgѷdb! C 3x瞧fS&ɊxSA蝷 S01iɆAc).Z>;^璶HB~D}Ҥ`6ͱOR|qLe{_Go,ὧ2z'Ժ:kٴqAQm3brv+On1kvjoU>S@Pf&h Ci3IE-&Yת[wu@ |ɻSkbJ5z? ar%r)F+IENDB`lmms-1.1.3/plugins/watsyn/apm_inactive.png000066400000000000000000000007341247673406200206560ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME84HtEXtCommentCreated with GIMPWDIDATH͖n0?_(aɒA3]CߣPu;DeEB"FiVtIl "ApR((5nJjd2 l:V,ģѨo5 0\Z5͆$IÐ<ϱEqX,8|Z?7ϐy|>Z[+} nt:j8BDpUra]vpα+9ƘJf5JEAEh)_nCk^Pl叹jU{ m㱿oq^fZ޲>)GfBBIENDB`lmms-1.1.3/plugins/watsyn/arm_active.png000066400000000000000000000015711247673406200203310ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME:0-tEXtCommentCreated with GIMPWIDATH͖Mh\Us$I*ih VZk. tQqQMpaF, & " B$ݴi"b {3M&Lgpss\9a=|Tc ""˲jZl1aj F "|2+F0?Jc7XOr5P-eP5 /U*~+yJ\Zk3} <}˫XĤsH`?CsH =C;0^sҼu|aNt/#]|+0Z\1&(nM f5.v Ra֗@2;A 6^F1UݕJ?g6pQSs6ueWAlyJp,8R"֖@ ,5VSO&iB{1miKWy^[So7l{`cG5Ա= F?nl1⩗ߪ7; !^5@0^hrTkgS\=8ߗI )/|xm?ar$+4鮪[^{[b˖-NzYky6gEJ{/BsS<ѸZF__VQYHiD0!K3IQJc2LftVSTQ4EAeq(%;:iƈ+%\۵YcQFHu*iET YҨ70Y R%bEJpHҌH)XgQJ"KSttu %5iD Aĥ2:!qb33>Z#MD8L3Yc-j3HX?oJ+fg,(^@(TŦH!ɬAqM1RFR JR8" 4T¤-PZCl"kԤM?OIR*Z]*a#L XV)H-UfR$!H@B1g7O' fl61MWOO$Q_!ZoBsH)qm'`&YL!=mq@7P/I(%q֑ed׌:RbEJDZ>CJUܓkm|n p`e`)$"̗TklqpB͂#3*sĤo59sn|ڞ3%ga 9wOX3DwYg5LkQg^&(bis/۷AFGGi4cZCkMtvv2sL̙COOƘqChɓp=m7R+˲#wł?SJ~1V¡Ch45۷QV=H)B !pB%-LfQZQؽs7}}j5{] H!bYB- )/ܳ `X$%.PR"$MR$EkEfLaLQc u17BR$I %$Jkl(%RcB`A4MʿO Y A}x/-%Ƙ¨|aC^<u__&)9?` wZpׄ)i-qɌ,E* EZY!*74ia³q 1pMf2lJf6kcMx,(b2wV;Ŷmk6(L6nƔIDܹ;vpa>ٲe {ett,,.ϟҥKY|93gd̙,ZsN} {I^ۯ3Sl[@2Ƙ nc".%lR18†a %vZNLٹy3׭}MJ2ΛI '-aKN>y9'xRW)8\d&R)c!3Xc3("m%JߌHUۻ8# ɆpRidFfPǶk,!yf)RGQLX@J GRR"Ʀ bvS0·v~ S;)L$8㈢! I+\.)Yj)?MRRaE ϗ1s;72GDonwGF?K٤j!`֭u98k4}8b=CI*ˆ<[:>O)+Ć1}!T9v[g0IZYf "1()%>C&NH:KBϬŖ̌Sm.@+U{5Bj<*#DA+DQLZ%*W)W8MbX!H c-NB&hN%AqE%_ XI(F+)J0!}"R!]UBA$Bܽ{7ׯ^haG67[o+JB\f֬Y|srM0&7S^ݸ={؄`٢ZCILI$AJIle̓w۔ q2Fsv~}]/" @@?Gٽc;ӦU Νˣ>Uy z]wXF cEQ9z~>9r@5Ɉf!$>I*`~u2HS͈q|> @G1Z4Zˀ@(I\*K% $6rϟX2qLZh2Pt*ܣM3lӘf" &Mq֢XP%9h9rH-!"GeժU^zJ#HZbgo[>}:===twwu^ nV^裏rя~tB$_=?O9عs'ozӛˎ(LF 1$IBV+ ]j%$:5K۹s'iP)US[\{/xe͌cf$z;qxM PZ.䞟 ve翀:FQ*XhQ{ x'RXQtsv\(F-;B΄z2@e.8%AYpG.F)qDХZ#cNbĚ#a|,:J*|AEV4Y+(WJB$ZMlj= )o:Ҿ9SY-]Iu$"d(#mXRcɬ% u(wt=}qZKg_kٱu}RxRNf|I%pd{`tRa30uC-'?X-EǴ.t\ da:q_800@ڜ |'rDh+OeC??',vC}xܷn뮻zNGGiTum!` , ĵ#g׳Ԩ)>WRѻat!7'iOuVjy>A;`QG>%Q2*ֆOE."lXO>N@eaTQ;I3(P:B:1BpϳM@ȥT* 9tpd8DD18h5E񶷽gx]w9sD}2О4`-0΂ Hʦ a ։58c)-q,i#AjMR&K i7 60T ˁHِx"@8+5RsVbٱcjU1{v']4MFGKW\wrRG#S"^j{ᤓNu)ɄR} *HGa!t;JF`yU;:5`=[S|MU6Zq0 $2#-!.ԡ9!|@5b&@y\{#$8!b1V/9BGTK%(bdŁGMs" UN\Zf/eiHA׺OxԂ($WnZqg[C}&Ɛ",B{LG>y}?ũg5kyQ~obOoH5 B/~ʳb농sW?wXy٬_]2]7}w-?6{˿a#:/4jc{ubLg}7KWo7ӻa ]=m[?MkcMm#cR"$ n/һa5WBTgw<mb)gKʙQ:z^45ef7{3S|[d%3gß$6l:͘oa_Soz- DPgXyBj²o6oZ`Zi@Q6ޕB:(tL\tTvt݉PW*ĥh"G$eZKހsp߾}蓜i6juLbC{}) &l6sOs{R\ҿ ݼk9s!%tk=ijR=MSFFF19@QNkO&{q0͔,Mx)G\^7T"bc32!$-A:.$\VU V#gꙢיqVoKTds CC ˟4{w^"_7NjE}I&z{dpjZGy{W.Ņn\M?ac)#Þ-ܗ^ep8oR+nC"翔G_cwQόּ#$h k`ddfsm9"-a#nDŘ%iJQyo:.\v>&GB߽bŴM C鳽ɅdGix:c0l䓽~xSI}ez  IDATZ-FFF=XQ1q@KTDA65ڰ<5o;^}Zw~}gLc@&tTkd :N/ YDL"t外eB^AӋ( }E!뤴&6[:!Y@є]uFwiRgԠ\!Ik)w~s_Zԗ4tMN x(ch1GrB%PZ" VD*+s$IVDSo(^Z$1\!.C(g 1Mr_Oͣ)׉'8 77t|5p9𖷼|;| _ c>яrp׳zjsWp'O~r¦1?yј e_Qj eiYk`XVI3Ngߞ}\7׾~}?{=;w16:JgW'/X{^~9K/fpt1OFL@32BCHNJ@Pґq u߻\WrɕW`e̙ ]w.!9Ǐ|8T._ =O6!TPR&{E4ߐd(|x_M8:DhQkzLG4r9ؑ* 7|wry/Za9 ^n:,9y%/}%iT(:gLH6>r?piW1U^p`1n%|BZ3gvAq҂!zёƥyfӃ~o~?c.h4& 7s̙SH\ve-oo}+J)jfϞ͍7ވ0o/02Y"MS+ }J*:cvڂJkLɲje:::DQD,$:RQoHd;|2.qPNXmϋn\}iB d/OjG;\dH-;4QPZeXWBLv=Vk<KD% FkX& Ni}4p:Gkiy ;P8%Z)JEd48\8ШۢWD7w.3u_u 6ʯ{~Ņx9z!ZiӦqI'=i|]tE&Z}.׿#ɯ7ED$ \s͓SIa? 4jH*FXzƘ 2XyoiET4 ={!Ͳ0F! ~݅X_:a4󠍔H ,!JUDyX?C)o T"tdjp%&Uw=9$ɼЪ%g+/AZH}8l@+t6SO/JqT~3qLzuS.Xk8Qu'DqU׆3v)Mw :Q|~tٳ1c'x"SH1gɩȔ2<<oy[h4lٲ#t;-Z)=ù?!72\Ѷ@۵FKTA9%,Q\" hfIrDO _":* \$H7낒K _%X` 6 s8'^) ·6H?Kmu)(o^z)7tSkn_4etttA'3:f,:I,BYL4+/VUhJ0:2ʮ]9|x5,\3tvuq̬c?>jBw|gz=Yz6xw/0ެQ'BF LzԚ5734Zhf֜c8n|** 2xJG%^%ܭfڍزy'126ID5̙3Q&ӦGt쌱ΑQyn# c())bT\AMW1Tⲧ.Jw45:*)֤ ájdaOWJj’x(5o!hPh5=/0{vС~֍7_ޭ$6lduܷ9qixr6mIKOdٲe6" Ȳ#=wՏoF1o+wld II\*3c`Ç^ҕ,_،VN|WQXa={6ظ-spBV{ܹ|J8;68wG3mg-A\A)Idㆍlݺ%fזu22Ɔضm ˖̢'Z(BVQp7M֮]˶`mcƟ1k/cdp'mcŜp<_2(%@'IBeIdΜ9̞= /M6Q=|#$IB<"n7NVXY&ӳ,{۶mc޽s=S*N.Vk6 T;:(Ke*A#zohReV>|#ҎZƶ-[پWc C##yJ|ۿz޹y ^rх=)E^o* UCSIZYq/:oʎpcywa|i~@ axj#ok4wo!x٫^]ԕ)/5-$=0CCì{a{jY흽ڶ W3^Rvsܼ euWR.IĶ ?ε~h߻}l/;sϥ4hH=a#?@}X߽߮!~/:삔/_FIhNED=͛W {e@_\uU  *4ɧL6v0.W] In?]H2G˳,c`:KS@ww78&{\jkk D)j<ȏ6ms|bщK7q 'pʕ8󟾑Տ=Wmo 'pR 6)I3 9ְ8<[ߞRW]q pʕa~"g)<s5g&s?ِʧZK^g``fYgTJJ (EW+e "r_'UxxG"fئA˗;֭^Ƶزqs_e"r-! /4A=5 W{[i7",ˊcsoeI#Hit8ZIPAD_AG$f%EhMLff߾$fqS{5v;IM#̚ŵYe}6)e~|޽VɽwIҪW*Yq#c}4?]Xz/7 gw{;w9/fd0]]q,B۱w^:J5waxxw=݋"cC~N?|߯8x`,P%.2pfk?DiӦI__ͦM{ DN9J.r,$Ʉ;:ԩv~{*A;eÅTQ.1FJ'%*?p= ADZQ\*rLIk ѻaÓl>Hd;C?I'<ީ֞B Bb)Ujc dR].B(c˺G:y,9dS`RǺ {:~/:RU9ػa)rR߽9a|g`֣2 .JEgn6|d#9s&zN;38Cfnʞ={FE̘1 pꩧrril6ٿ?G\TGg{$NF=s^/o 2=qHq=s Z)l8 QR`T"3Z EttvQguX|VyOPmWroxN?·8:O- 9%cccG:׭ZEgBf(?0opT߱q5\j k25k(d)4Rjcrtwj:ߒdIXϒ{,)?XGG1==8h$I!؞IDQhݹsr 'PTvHfIooC'_$k74M'O%9UMj144T`"4Դ.đR,pgXrN(Hz(@mlN`}={]tV>P{Wa6bR?dmAxJkވH&ܳsNh n24SCGe{)J5AݻV;J?w<q.#kDU*̙˾]Gc~NTߡULuwAWWה`֓1TFt6 lx{8f R.S9:GR[+<=X̅B[GR$.RJMI`Yd ,o6F{65. P`.3☎.?]G:_B07H)vreڷ9_LEZҴpjZՈeޣ!} H٤щ:;{hzH[MV֊XjW㖜́=}~N?Ձg( z/`S9}R߲)(x-h$YJIG0(J1zӓ.D8:X/sEU|Mt)'{Fd&(8 \9T^Ui߬altH{Ha %i%QR1EjO1nZ笈B!?:Id֠dcfOï{i0GL. }}] %@e{߿c2][{9ir2cȌaαDzd :_wrc;k1_w?_s% `вIf`…GEu{4 zo]9óN8*_v밭FUlLδ#%f3^l Ì.96|^f($#t !HM>ZgJ'Md>+~aA8ӟg2vmeғȜ%RA3̍BKe('/^oHQ 딦IP4֠eI3tiַ>ck/KW,Gj!lȗo8%/FI=1Z.^o֭_(Yd֮Z?}ٵ^pA/ͣ IDAT-E: 𯯍:k>ĕ C!)+OKo54Ӥ8ʸBϟ%OnF/Bmo^f͙K.ؐ`T)3?si o txR*)[E} |t?ҿ+&Z qJAO=/~_i4KZh6SVa#~/]qҗ9pxmR`JIS2U"dt虏dيڙYw/.3H2k A~zں֞.sZAĶZ׺ ZE’@̒df2%˳}~JO$$;ϼu~ _8OMA@x/]Hpp%@:Ё),Xɿò166!%t5?e;D|EIHOE>XbFǠ&&Co=t+lkôhb|={ ׾w|_w4wt`tdZ+\ߢ %ݱ 1o|<{iu粪6Ks$&PsEKK v#֞fM[K_q`ljG/Jە: ||j&!.~"pZH_mN:7lބ; 58;*H%1g^` -Z˯֯;oތ/%TS1֯[EpٵoÚ3j% NMO+ `EbS,ZTs7_{%;֜k݌}K,Wu$T (Dشy 75coŒkOkU73w|*V9˅..6LtHZ[ O[Ztٲ I^=lMm^Y9׿y* TAJ!/K5VQ?{tdF^kڊV2>1SY#W]t Q'FG?8soKR }iE-7B+cξ9 `yae?W4K[~,$2o [j 12<];NdHAϾ^H: wyh_ k_9{݇$*@8A)z,_ݸoy߂Ԅޱ XG  m5Ҏo[qrbwZqB^\%k߅WW4Um׾a#D % 8ل$K;V ..]o8g>:$R@"_ q"M-ߙQBTHX02KeڷX~ yi<ኋ.Cv9C.l-MR }4+S@Y_$>ⱇ ;xw~(64R)׿Oz֬[+/>X,Xx}xᇱ ౼,>b54w͛` f\}ݵ3e,[btXrcSSt|c`J.{Mw4KOѮ+K ,զ1tr׾&ǟR X|9^sŸq6Z 'ˇH|=B9CTtM7`p`W:\vٹUJhn_-&] C8UȩK DG E@w:qoDžoGB災89؇j|WW_o$:xr BDI(N y\^8r5ƍqbp .{+^}U|aC}VJвd.p6X 8zbQ a"-`1::\.C/Ö /۶aUqR|"ZJ3k` )5-_~xfSwPQષW_6-zD*ڵG,jZ̧'}W,c cXj(Bi֖ Jڅ 6UH5o; $ QxhDQ+ji:G=7foɰEj FpP homC&o@#Gu55(W#G$sW2R@s݆Ҭ.t>47rwbN8(jPVȧ)'8EcٲHr߂[89⠤FJQ(g{Qc8gѱr>(NPru ù ļ|i8ƪ\ KP*WP# r*CrZDQ9M0>QE[k+} m5va.0 8G"0rw % 9$1'(r q9K45/FZҎx "0D桵Hcĕ{QF4e:U(IGՎWLsTpBgjKrLDU5E( ߹*L|=hơ4]~B>tcOlߎ׽RHeh1#.3fY#+^Z(G&bf|c{J(H?=t^|qgLYB(~ș.1 \@ Eb) j1uKڎ7:L(مޮns9lٺZkiJzG!b#RpڃQ y{zU _q9qjl [;a.ǰM pIB=uc/94]}}=]8~{v`jrmي0W4qk;M122w'/qǏvBzLMLb[( *pgӠpP7]8g<-6`b4A)E[W%SZ|~;_Z! rݭ#: l&JC+ʠ2ӜKKicXiCH%RPLYT/|dɪ66tc wu݌NͳcS;!o٧o1ٯ‰>XI nfG?B!_eW]9>8dVWW@R*{;v<7v~E݃,]q RU(@!Icg{ X2T}St-535gRڷk9; ZqM䦎ģX &ؿ?&&'o]Q:|אD{'{?z:|eA*GQH)B{44rTLLi_gwg'wU*8Ӎys+طǏ9rz8#Gp׿J5Bwo/(Λ c2M_}c$A_q Ð%;q?8?1?zL! 8p FGG?~ ;~]qzwR(拐AP$  a!@\$ %%2P-)2CnҔM"A||>OP/IȩԦ0^Ԧ~rJH&wډW IF**@Hr:rF{~oTBww7v?t7xr9K[s_Og'zAT+eZ܄{XzUJ%M7YDRFJ,Jny3nlϟabriyq&"Gww^ڍg8~W7/P(`G&11^8>{0uF#? ʥ2(RCƠZy/܅g6`Q/1==ZK211Çp虍?p{ӥJ C^i׍$J3U KVZ!Ns+X+OgX%P9*bIj>ê ҚZ"RRvDž-j\ #$q$yC 1I FauyT5ގִ pIkX X NKUG\a`GdDl?jgD&T2;w0ל?R)ч~E9X \X LR =O}/iO{zږ"/G{a{%\ZPz t}H*Y" g{yBUYc*egwUOšB*)`a͹"x+e]I)$5 Y0P:zpf.V08s޸ګaqC*E3jDC謃e pAuZ9oR M824<ϸy fC2;RJzir)-Ql,`2)rJ6q9ݦ֟@:9o%,PLS KH U*(;S1RRoi] pV@(MRSaKm3B,"og?ϔvΤ 4u5-2)R5AԯXaR/8eJ1?RgCw Y-Zk.[q XBc9LNNu߻ /@R"Bїfeay2s$ŝ2 >.pxY 7>*+g{9sa@Ť30 q,@0

    +S{CS\:!z##z1OTUzʢz?B>`[Ur.0Wڣ'cS"?c1S殮]z=a0q\< W31 "1b/Ty͚?ЈCZhM1H⁩VģA7ՊCiDcGHfG`\vT ]OeXT\h!ZAHSZ,aGH$LF\/B!4P%zMϓwj*s>h{,$[J<5n!0?I;A,׳H*.Ѭ-)P!b0O*F-?/ꈉ4ˍ.t'fu!boq2֦jEM6y[3+gBsA/'q<^65Ji3߲h%*NIYa4S,'-ܘl׈9cA^}Tp`Dlvp!jSuS%d/ܣkCc} .&'q*<(^JԧF Q$8p`Hٲod0&D\;*^{$=8h; Bry#u'ulC/ҜNEXm4,GMTdtIԫ0kTOT:% CIƮL5t#(`Z5; "tSݹA^I& } cqOGѦR&) USQ2K#0=14e։h$MI:Љ V$h"=4nh;p:)!dљPQhDGR\QCKM402X(3UqyMCeWbi풂BD(S0$Վm4_#IKZ-3"[r$4d|Jm]̚Y@\%X&9IrM8hf3xZe| "MȚ59D&(+ZSBKF%f#z!B[,T`kξ-,Žޤ rm&(գjDM9aZBMRdM rM%D9PqJV@t4kP.;F`7l8'STBS-8$ҷyICHNun/NQoX5, u%LDT⛐OաC/ԺwrCC 9j"T+bfʫ 8, PDZV<0rMFe'rFrfa&$TiMKM`b`H+X1_$*u #Hr%m'J[2!k0[NfN~ a>Q⩪9@.CmS%ctS" -;Aǒa[k `5$d9d)Õ3ZlAX$I9tm" RRILi"H1y-R펛mj%&XxLϗFl9.sA/EHÕSj@-MF&A9} z :Ox]7#\i+#i2I- (ZZlMQlu){j- (BdϪ6´S&rB)[d$ DF0\jλ*Z:KCeXOc 3us) WKMhMYQ -uR{\%LHȲv>e8\.n=(pHht%¯RsD c%NS&Y,ɡ5ޥ&a{بhn2gy^Ւ)*KI*%b+D*ȁ<[$fV-` !{-'ȶu Qb!'d2ȇKĔTr6!+DVL%9 H{Y)2f٤(*Bܱ 3%f Y6Jkh sh$H*R<8:.E2 S0)ZJ2EL5p k{U9V<%j)n\D%[Bnl|-HmLȒ-*6 |`|Iy|73v9b bL|E>rp40\8JzF=q6MH4"$Z=oBOŭKFWB(tӥV%6[)agH&B08tataT!ҌQA,!Td+pjMziǫ.Daص+NZCp)SI&GE5W̑'<:aLD PE~CkjH 7pb.6) !Ahv(EUl"T1f켘pd!9>IgzK08c^^I-c7m [x5B$ mJt#xx3P: PkR/#ۑP&Ut'(I -4x :|(EyH/@r┋ uD(HySBhWQfI׵"Eɡ53񰘈Þ"b7TmG5kQߣ`A?P&ZBW0;C &֠I:fp,Im>gQE>8Eq]q.ZelBjjK a"+jNV-CoElAlDJJk O엳ԝrEll]W+Kap̑kR$@-\ VҽĤhj%5`F%C 0Q]me:4Xhv,[#C~-%4mt !)Mوڌ֨G`b*)bE $Al?XE!@Xװ!)'NtHU:g=M8bx},H OH?DsB$vIrH*U-Kd^C!(i1 F OHtIсo'DP$YS5/Mr1z *}3E"9$2,|B<<$*I CE. ^NYG?oY"m/$iU5裂DŽT6`i4i=x3-!Z Z)[%a }q/4W?"LK:w鯹1ĉrS>H. ,#K0Kp9x_C|*z%l9C47$!N1̋N ͡"'}1FGɄ ЇGo :ǺVu,1;2?@vJ]"i*$_%Jr; =f X{IH]P$.i"O } 1B᷼ InOe[dBub+hOU gBSBbh0YĐ.X b4{Ǝk}p`Q'B=W!'.bM2$G[Y0Nv@EE]ojTCq&j=*%b/4-7wqa/XIhS_c{!f@ ! 7>Ra.wؿ`aX"0[ѓ-PPEL #%x?$E \AICPBI/4x ~D&I-{ ']§TJUbF b)4] $/*!i@ZDpH˷A|e>ȼ#iBujj֬nCuc8e'^| `k>?BS `$ǻ!pR8?!opsbvb[h cШ|@#sFjyKSAP{'a-4ƞ< 8IK: dDE<|jTѻc _,RmkȪϭә5!>Lɺ5`:vc\8xfn,p98,DE(?kd%ߠFSя]Jb_!/6;3y8L)jiס 7 ܂' ?&!1AQaqё? BA642z!C,RI = ރrj31#lDmk,5܀ذ-{[%1H&BYulS"d^>_BM\RD hQR'&r(Эw.btk HmkyA&25 ᜳFfHؙU1&$Ι&9~5Z1Эar،Bzc~#Z!M5ph{DĩJ!K陂5 Vbf82ig ZF.`zu$΀#T/44xHjyэX6z*rø %:hǑ3́"&䋇1#:dn? pyVA2cmzyF%R䚣] C4(`CdtD I'5҄cnyJW`MZ̗j%I<_=H=$jߔf:EKQ/?L^wP"kQא\ Qx=ұiabOEh =E- q^8ͳ-mF F 32Vw&G3,쨩w%Fy]y`6m[m'KAƌhOnĒbp_#urd5^|h~v܄k`FSBQE> @򉚗91S".k JݡmamhS㈖b9Su QO?>ƁuW&Q楶2<|}BeFe \錋ܲP/4b f}K{^^D8W4^Bդ>>l-7Lk M{;g!%nb.'r| 3{/щ./Kl+: زD$iqDw]ǣsGwlſ8 ^э) xM~FQ\D0L._'ً6g|Mtf4+UM_ &!1AQqa 0?3 guՅr9e1O]2y6z9wp<-oz8c|7.녗+[gH\;uԏ.`62q sla9^ rgXDGN,m>I_YG wPg\%x$z.d$m,.w`R.R1xw+Z$M^iXzoY ֶ'z`Agq,.DpKZޑ@g!:;mx%a'{!  eX;c2kaO==aNl?˒6-܀Y# x p;-lYGze8vX-]rogurZ6FywҹǬ};ܓkxr:F]HHZ. fDŽ>}gf\͑N2&xWV d~9-ŘgL87 JN87YfxdgOyu.GtH?{l c'8cO}}D˟{.%91aq3v|}w-kxq&˒s3|~nt]{Y^fWW'￙mSTmOM= ?2h7b'\>o/OIv߀_%!1AQaq?ek/x?ETU فQWQ!*[|*V(]j{_Bs[epKn=4R,zs0v pĩ@3[1,*0pUy BŶ n9rv VGF.ӣK[N.ZTXPm9VϩcأA~?WFS楗3- Hφ%*CgNqx!C@Әф`fWMxfQo7YdYWy˧Ay{Ý{u=#TS9Dpj &Ch躘 n3lEs#ɩF[%TK"S w-HUHC:f#]o}aeؾ.A%ݾnlXDATx ,Eyx9m \EA.sV^u"ԀأXʳ~:* 9X7[4puULXPuAYcfo wjڼR'f?` q\m@0`n6֕D`R\`GWʼ'97^%~)ŝx RJ:b&2g#ISVjۋ_Up.T5W2/`DUB \J/,nmU#3WNKAn iܦ/yԺpAݒ$Ά"o/-ˡ8jVJraFJhZ)-OUȬnXeElDBOd9@ k< Ub>?̰$ϬWog ,m[Kl?"r1r^ʺ .Akp%8˾]Lʡ7mEl^{ `*dzʜ05j}y2Ve6WTbUQ> \,Ѣ ԌZGE-_Po|A!] HNV'f B54m3o /k" QTusFX9W?3^%7B!Ϭ_)rn)u h@ȷBꋨUCbcwCnhHa[E}Y [Cf87%fѶ+eze NU,/{h(=]6 Nor4{Bqp|}^۹V@a)b9^"j,v,͹5-pt\3)+P= $蕙13*N3 qw0.fٿ Xf чAO?]. U#I3gft#Uk4Br =7js CJ}߀WtAFfZt7}fP2ډLweʌ0jGfw+\+Bfސ]"Q 㿄+c5v>/ԿN>Zab  ̪C8_*.F) k Uq w*,)KP YhD@.ʥb5CUFD xD,Ugo,cRjBH۷oPa(ùcojsŸ t\C gj$L2d<" `.i6ĺl5Le@P;6:xu`+}؀PR,gS 9+є݂2ꋈ^e3s{R>2 ב }(6bB.}1,JXzF\-Wp Yu@pzSZ!(@|wGE\xC,Tb8XԠE^-:wl<"/Mܥh.Wbq,Y6LQh%2aڠ(YJ(ޤ/z>߱9/q Jc@جگmeWuE~FJJf)QuM&җZxIw"kLy@4-SBϘ}}bȭ pA/!UbLHҦO=b,+3NQ'6ГnA%_T14;_(b|ZEV@na (d1M(@=a\J"܊dF ?ޒډz[0J eW'1N5^S:wWI,QLRb@[t#.GT+sCo*UJw!cup]B3x0)C% (OAipfC\k@#a_Bm.Rĵ%ڊ+FP3=#VdH|^3@=UbV)9]# <;~ULġix=bSQ ϊal"4e #6)HdV BFjXؽvT ڦ Iԕ Vuy%x6duiy|=J TS6E?$Uˍe#?iJ1 `me0d ,=O*H2NJ43vv.?#,b/ ˙fO h`l €2+  Q‘fAWrxƲ[ĪrO7יStNO.P/*"lzѮ c106p[?΋AlPC9z"-V973IVñM~ g%zuF99sNtDyPx)]qW`7J(ynXS`0Kc^qϼ0D/-dצb-{ qCn"*%WREߗ!krw4\z\e@0@\YfwSiq!_1v|Ґ\?؁Jvɔ ԔdM1TQ2ZOgr}ׅ}.@3ݩA [C8>eS՗lc`2/)@ŗYk_K9/Zx08]xoUot+_¢A^a ~W+bkw[j ^%^O/0w-js?N\l%Sƥd SxTtPOr;@R/ڴXfPYnל;!p),(P,xx9aw־46 uW!ϛ-4'kpZѷ8h+d"v~`i 0oAL#ʃXtJF,af b(ZȴHTVp*UK|)Pc%?f \x{@ o<6sOe㙷4RH}yC܆ޒwgä%~z˛'F%B!G@O(+NO^i9<IJҪeGt&K\CͲf#kmŇPDfhC r2R쿓3Q@HxgLf,.߬db4 y)bd`](->%bSR^ep`;z㋢Mdec8 ǤK'S`ܨ3r^z ?׌@@fv8|Jy Jdۏ QW8 /[,[}j 8BKs癐cbFpkF ;OlѦ倁h&Xf@8W5(P`zȜ8PէpT#v9b,m5׬ +W&̹1DVCuᚕM /vj,avev(AL^Nqr^>!z[/WFu{a\V*S to,4YLF5 X /򔔢DN!1jRaW n/q/W%Xj~H8F"n!+]E{xokFxD&Z4l![5Q*zO$liuX^luO 2= VN]cgqXRD7f?fˌ, 9Y70f=aFy]rA. BNke0m hsQkg[njK7n_)qTD-RA% Y1B.ZDjN2 v>b*zdώ}gN­œb-!H4,ZBqn hOgĶr*^HK͂)w$4ݏ.%L,L-*o~{-1X܅GyתU ׼ WefͰc7ڇܼDNP Rņ5rړxwX5t\i]_1V&E7r**b4ٜ)=:̈*-U'PIcbcD+ѯYVEVn]﷼2{GjR4c^B]ȼ{&\ MTA=ҫ886iE[q+\vXک7hE'QB 9^N( O#20k.8"QP`q͆ϨNewd¦*/{q&f`nD5ys;Vh9--ä8PF&PW!ƕQ;I\^XK(l9wjYKms2n59!u]rx/1k~,Jj-FXUr!M Fk(]뷜ԥ^%Y` pY}h,U@.fӑ ;>N6`=uGAA8M}@-Ueaa ]NVq^˷qz{D4%"IQöⶬj 3 `ьuU VW9n/}%?t`tQ0AUn(Vf$ػYt;YAqv:q-lτe% Q@qKjUl|s LU7v7qh5x~DOG"󄹎K@LpKO){QHJ[,> $(:* uK&"NeZAO}Xk}e%!_Lhv4:4[8^qU ȣ~ Sm]I}]ەlcoc']&_|c8VCn`/'k| Je)x#ָժl:h;0*VPiW/^ލ  "Cآ,Rsa|AE᪀tUp7эp,&\==Z>w㿨MIuU0zDFz`-I[v5ٮ0yh?uWd"Dհt eL:"^i"dkُUvYyR@mL6ɺˊCP4-y%VsGeB}ai< 6,bnGrCTBfjbp _d+yܸkzL52̧ S:5VԵgP-6(*/ՄD֡ܧ]Em\29+}6Z[bX*(x 8@[7vT; kc|#MTsP@LsD5Kx¬eWVjz_x뽗Ĺ՘]e(e *pm .0bnF ]Lb АTyo-n \ sQbt5oTSh9 .N/,Au0hh?fDyGS\\0E ws K@-O#%ݯ;ӟxh[Z}DRScɏe W@h6`r{6qp:hcw(_><2>᮴o~!Gј4VBjh3 aw] cyuEo }L,z+O@JY`:.L8Z'z[6BI(^ƘxbAt>ǼBⓁWd/8wjg fg+$lv _kw3Œ!`tCʏ%~m -3G]e.aP0$OD2!3JDd=қIer3z)A]̨Ku̹ڗw }QC<aa7kcޡlLg=嚫+R-TptlGghKj].WZf>alp(WjޱWTuj2*;_ ^ /_XΖ2Z, k0敫'8oN?@{r9PWO3p]\(Jӧh.y̵'YAuV*@}kwe~A"ՏQ\:Wg*'AeŸ,d`XsKc8ʬ>GJ vG8nboxJj<~L>Y\w% R:ܑ} 9z->"緩c#*=⾲lU O( K݀ouܧ q>%9O%=*KDLu#1uQIJmU5a7`5$Ж 63&L ppOxg)oX929xaRd\?vX{F6i™b;pݸQ"^Q8ӘH`CŽYiOW0,7+Azâ:Ԙ7# oJS̨(re>bn.2%A* w.{DmƬca*FS3c*UT}j+@(kUuZQ}"OlD([V׃ 7zcDざ=-q:p`? R噃b)@D\tI`V !aQ veܨ-bU$/~7w9'XZ;a7} ̥`_{*E קhEi[o쁯,>)?B] lU3^ A,]s2ٯlV6v{$*[ddu.|HvB ^PGy F2nTYo^p2> G>/6~GTtSo(Kچ1U.AfuL /hW-e?-L?Xaeq0|̲ʫiϤǁ5Ju0ii-J~ RXϤ,yT&ю#=W#0jQJ;C i4 3`10Q؎{Pƣ7 dtl Pps^C* xJ 6'@H {B2sLB#;,j'Uٙ10(a0}@R30 v?&gVeUqtcԜ N>Bpi*^&`0=Tc h>`\4 q\T'ـ˭|̵g(+f0!; -4զѕE+.PdTdVǂ!4, ^`AA@#~(NaAexB < @_H5_6SNcR,LWıT̖uEԱFܙx,PYϤͤ`8cEB^P@ GF8|l؎{anQpo< `A, KB݇&qp;׽ @l*VZ+`LL>q  ?pZ ||AOcwKH$`]Goj/J5 {h>I=Ex #3B+_qQF"7AevCӬ 0)/"G|{QnψO@ nSսF0=6<}!z*c nxf8 @x`mA? 5upwM'eƢ MT *}'3эB;eD,C4yQt?P(o݊1RjJA5L4kjKVUed=$cl K= ׏H7Wj >bm9܂p!}I.k y-SnP`%ii<Տt3.tMgP e|!Ųµ'{޽m۸F7\ΦMl %==/ұcGZj͛) T*>̛7?njF^^T@0,\}1l0QDX'\`\y瘓PAAA]G@>}קcС6ۊ*uRk߾=s!..DD"aܹv!n; `6d+e˖XF:н{wvILL]4hӦMe˖tСLoÃ={rYi߾=3f`ܹHRڷoϒ%K=:ح[TԩSG$$$ ɐ⋀řJx݋Gbb"+Vߟmۖ,L0d|Mϟѣ9|0WW^Wy:44_~/ Kxx8]S3fLDDDУGN>ͩSPW۶mիd2>|8U@m__|ʕ+iٲ%QQQU=`l,k}=` V#fq=f͚ABg{UW^GP`0x3gݺu)NJJ8?^,\g}V{tMàQqc5[4N^^2彼T z^_,6N4jCeH#.X_oѕ(:ɤlԺmV\Ʌ (((`e9XzgΝd2iNG>}܍H5肁JKx*Zme ZAp$ i+X¢*+'c뜵Wb.x*Wzmz]T*3fLƍiCy ((j.Jr ӟ.Xvzt% @bĈA6}EW!!HM݆`0HWbTJEAAA_|y/̙S}پf͚Hƍpnt=tI)[(_f23TzXh45` '`1|Ũg}}4zFĞ=E"3{MtUzݦ#رi;Knl޼Yf?tL>Qu^RR!Cl >zuY{[5K `c-.ӧgm[|+*6CWyyL&C& a4Xjol׷ ɍgfC_:rlRUOvooQKm*JCP=:;( ":Q+׵IM&b֕F8z$:X[uA@ʍ7nܥ˜;w3gtL:K.#Ƙ~Y`7->4mLt JRD>  ={v+ט '0lL6uW:޽KvuUR RRLREDi.YjCRR0`,S/ӓPU7wڹ 5XЅ ӦMG$$$1b;v$''W|rINN&))'|:J+XB<$Q(,d*A&xgdXtPR>|x3ZNgחQ {R3E]= JJdN Qy&LE+{2vXt3l0j%%%3f0bkƍǏ?(FrLMp3cm3}9:rnxy wZ}wᇟfΏ !(u6n/ԩS={6 &tvu})<22N. 6 < Wf_L.;ujr&z3q]%Je6su5p@W5K_~4oޜ}Y}]}Qeh"RRRXrő25uWt QkBZZ_p?h6!!HU6B3gCl~~>EEEFz8mm Dp.(LdF&`huHndR &WKOK;Fu%df1j2ik NGIIh6ym 8d8^QºrtdU0թ<ٳ_2wޓb_6(3T^QҺ%X̜9W=ׯsYwݻŴ!d5=NBa۔ɤH$wdC%wA^_\YQ]] AzΠ1os{̛7.]裏h((((m۶blgG44Fݍǧ){ldȐiҼyK =c<پ;z˨^TX ]']Qfjײ,uT~ѽ{w Cd21gN8A`` lݺ˗ŋInzamf $w2:+XQ׺*pm_~{JS/:29z'`k׮̟?ӧ׷h"FBIqq1>>o1lrwرoQ(uj ]Qfkj}]* 9% k׮j^hQmV-n&3K]nT98CWs1vq /7߰o>:w,nARi_zU;Rƙ8;8ՙ*))aСk@`` Zꋚ6~T*/2f[f̘A˖-XorU ˗0tM턝=B/^om2["U,M&=߹TGWN@\P]Jgguٳٹs''88w˾}xl䈎vLCF:R2$f3sI:lݺW2b#W2={650z{{ۍ 1-4Qqۇ!C9U =AwehDӡwN5T%%FJJ8~)..F+B+FkLaXi6mڄVeܸqS[wwzaȑ|g\ݻ֭[m֗;R4dc. Ted2qQqVV~)| ,XA9A;pTw7)O?N;~mqط=0Fz [WP1\KED(L}vPWYQ EQɄУĥT`r+.1ܼaLF+! Ġ Tk]yy Q*QBVԩS:ujTW0sHll,oߦM6,\'O#Χ{{{йsgn߾͛7֭ۛ[I^opp0N_̚5-Z8k,8 Mw; 7$1=[LU[Ү(]9͛zhCH82rH\\\رc۷/:Wm۶ww\\[&..>???J\\afDɤ,tM{`Y/Pxg}z;2/RU] >f\ /@dd:0aB۲*3Pʍʆe2pBǰa*g߿ Lql !$0@TTXilr4QT* O?$LYFJ"OZzL]2 T٠W',J`0 9rڵ ~`L&lr38 UƮ]RyCh1LzXm3TJQQ!Rt"d2ԩgѕp!6lڵk#]۽&hrEznf*[dܹ+ 8HYfk 2x`?͕exM&h\$D}*2W٠W7dc޽IMM%::{2h .^@HHW,a ;vȭ[h4(J~:wFd2ϙ3g㭷޲qV:^G0 +ĞR%˅11TX"eu:M.YY'~wXrM[t:qQUb2!Ev> hpST'rZ޽;;wd̘1̘1s"Ji߾=K, 00BZnM͝-z3p@(((`۶m|w|WN93{7n=%_H#z 7LJ|hJ\~tBBBFVMPPreA/… 7 >;\z~ $d8l4EcUbw—*r6l&aaQ6, zZ-~u G5𩎮jSWe!QzUյT*e׮]6^u#G2rH~g8n4y饗_Q(ĤI"3iݲ%;w~,G {+ff3%%%9ujZ&d.:3</_fϞ=v׆VQL0A4V*0޷{ܸq8_*($  %`/D`,uүQL.rҥlܸDⰎ<]yy6 ;V-cR.IV\UUF>r 2w$ z}1^gwDp%T}s—.]-44t.^Hǎiժ7oK؄ՔJ{sL6C>>#ɲD'77G6yi#;;6m8`=1mbC"]Yϗns{͹foUWյ Z^^otUT"Xp Re)lAAOnnӵxvl:]>zhfΜ)&44#GD"VZ;e:=#,,afe z (,,@ɥSt&W\oA׳*yϣytgHZWz^\WZWJ몰@W}ʍ7 bz=ݻ;q+, u((ܹ#]fk괇޶m[1UicС6ۊY"щ%Bygx؂=afh: &Nx'W^yEt  H$.8 #! כqFv1y\@lR"RĞ0(i+lM$ghCLL]"w֭ٔ u:f̘Je;R:ָ^ԥ(\ IDAT9 8P]]uq㦡ca}9^ֶD[Ge3d2Z 2rssP(<9x0I<ӵ-2ۣg.TIK;Vn0[tot3˺rS=zϚca}9֕0:hc 5(xyYzBC[EØs&O4apEKsOtk V uv[3}tFQrKIG*%PL(q8NfadT6to8 {'eFō7 JEjju8!!uXkbrss!0VK߮˞+ o߾fj 8'Q6mڄT*ڵk5+Ш(F|UӓGyqUTAӑ":A丌85kA!j+f͚jųѐ7a. Rt3N4<1r[une*==?Cʼn*3!P^{M/^Laaaٶm[ٽ;Va9sؼ̲1cݺu#77{ܨpۤC+wMγ!䉯P [V V((*J:wgk\Qfh*uVm>SO=@RR;vϏ֭[ӥKƕoXLjQ(3N>͑#GdΝ|Ǔ؏ޭ[7j5eʏ;D8p@}C1'Nό3̙3dddPTTh̙3w |^Jll,o$%%1m4ڶm˪U5kZrSo.D|,"|}}̞=xlقd&..ӧOpz)V^͒%KF lOIIAVos Uy6~7bccyw),,d[?m f$$$U1DЧ!J27zEqϜ9Ctt4M4`РA9s6m%xukYqňȠ\.~?s ?Cn׮O>\L9WҗڥnUR^v7od\~4iB||<7o$..NLb6)ٳg3x`/]DNN%^޳/>['NƍK%DDD{/D*ҧO),,t?o  Cq!ĤP;qcķiӆBCCԩ'O~CL2_|J/9996ESpU}q>5|2qqq ,XT*cǎW\K.e:H>]D"ٿ䮈 fh͛WfkrQӧ#G筸T|||0 m۶DZϧ_~)ȿ*fN:T*M6<0dIJ+Vo<]r nCP~p>,%у0N<):X;FDlڴ=zܹRvv6ƍ]~g{nnNȍa(::.̡\޽-8v-y .`20L\xQ4BK2 Ӝr*}6"##9pׯ_WrMT*ÇgҤI6^^^у=zpEƿ@ys͚5!7ԔW_}kxg,'l"~JsGFC//N|PPƍ/ fзo_~v4oޜ͛S[1닊b CBBP*bzxxФIy{1@nc(JÙ:u*QQQL\4h:9`=+BAAMחKrMƌovڑ믿ɓ ⩧b˖-NWh߾=s!..DD"aܹhZdr^|WUr92\.]޽{С,_pn߾MXXXHB@ղd$ ,Xۋ Νooo233)((l6Ӿ}{ZlYj|U:;w,tÞuCs vunꟆMãuǎqb-ͨQf… lٲ)j1P\\Z&22Nlj' ###?E6l,> ˗/W<{FFO>$cƌ{Ǐw^tIII,\,d2qq?G}ǰFmҦMy133|'xxxr<Ǔ?hZq͛'FEa_`|Mz+=ݍ7u5X[sHaa!Ol6ӭ[7<<<)cgڠ!˗/l2FMaa!ׯNb2PPPstIU!ٴiͶrSpCwS?΀ƍ#۷:fUX*VӿO>$ ,q.zDD͔5,> ҩS'<޽{ ^cرTLiJ7]vk׮AAAU3ȉ!9 7n8_go?Wɓ'>}:O<|I۫Nu-g^}zܫ4?87ogϞ;v>~A]oPh4ZlD"̙3j~Je LJ7sϟ,wS{ݍ7uJcNZFc=o-n+))᭷wDDDޫWj_̞erA=ek2> -[ЪU+12'Xz˗W.j*m:u˖-cL4 Dq7unHNN7Bʨ:naP^LW;Pj͛ׄsα|r֭[d⩧btؑ=zoٔ?<-[$ aÆqn/mп{dk׎Küyٳ'7n@׳lٲ2BԺ{MuصkSLaʔ)6rrrJ,ZLǷ3fLUEvF(#z^>oZ=,,f6NneKڥk׮ߟt:#F0Mvv6ZjՊǏݚ,>S֯_OӦMjo׮]cʔ)iӆ>0m4N8Q,ؠ[۱cǦT[F-7nꓩS2{l (oɓĈ2=ťX0N9)N0F>^^*T̚eI2k Tr̨Q 93qƍ&??"1HEjJXp Zn]vGЖH$ˍjtoHXc"-iiǜjq8Y3sL\ax7o/PRRݻ۷oۭTB쇠=tgY}\Pe֐1j޼mhhJ/FdRRNWHH0RS=NcEx-_~?vXe̙c3W-DqN0|r:+Vp}1dF)=3vX믿h`φZ}W_?4;wZ xmջsN Cd21gN8Add$-BV1cF+-`00h 1Zyڷoό3;w.R۳dɒre+sϱl2iѢEQWݞ1R zJPv`ĈA_J/23`۴kjQmv T"쓳ΣJ?`@.sڵkWm\4n(8X[‡ZTCBz;>z~a1CD"aڵoH [3rHFi<{RXXHvvv%K,aÆ $$$m64 `Y4qDe|,^7@xq4e>>4ooo&OEgP_ UuNpE=UrOK;ƥKifm0yRJMIfhR*A+B"$do@^G A8_d/q¸q;X._̞={d2O?B֭[jՊ￟ 800m)I} 8 %o`۔F KcǾE#$ãRUf+ea^a09_aX0FJeLd2yc0J())D hr2LBuKF#z^3\^D AMۗ 6vZ.]$n?z(^TJ\\Z.{H$%M*GI6B/Hxqz{`0|C)ߤUgFPFmk]Qfk4..0L,#LB@&\L&G*-\!v[W_Ư&FA'8ѣG3s2Zv!JCVWuHKKᇟ&&flڴ9^^*4Qټ(MxyP|P(xzzP( tpE=̥A6AOޥ51Lfd2"JH Ti\.G.3hnj_Q#h0?~ylM2sq1EH0}t2334iRmvmnҌ\¢EuR'OFEi z4FXJTZooq!{zvEQЯֽKGP(Dc$X"fd20A.^fm kl޼J^R8AR95\cu^TjwPLL 1114i҄{qg9Iǎ}+6rhWP{ t;"}(&9tk(\`9yG: )nܸixL&)P D"KgWd2a6`4Ljqi`QM|'75dRѷ%A!Dݫ)!RWC6Nƭ[.toT۠ zJ/F#:~BAI%]ZRbC ).֡S\\NWNWtgi(9s|n;?+)({Rf N@ՈNH ڦ:yj-[ӽQ%%.RTzs 8`2I˱q2A͛9UL&Gz=aaQ㞁nj&_m3})4hM&ƂD"A/`0J;X_:gm\QϮ$H$:aK{R 5{:]7|5.h,<ꋐިթJ%R%= TjYYPE+`Г#* \_w4pmzvEQ&ҫm6FimJ"(,,3L,Ö s%f sWqSWPx1JSx +J^oit: tyйsXiWԳ+lM zV Ҏ BQ hw’fX,hriѢo&:zZnj&7uIԩbb\Rn$aK+B*E ٝ;-!+z gE+)gWٚ*J BEj(,,`0`0 1wt\B&\+((вc:¢|5ύ@"щNB{lD׋sgHXEb OL(P G]Qf{T.bm/K\ ˵ߢ)c N\P ;V#c䖯fqSH$:Nh,AB቗cYa%gNM4:} ;]\QϮ$susRC aϞ=6}Ϟ=̞=LٺVٵk~)^^^STTT:ٶm[ˋEUnܸqM)))aРAL<G^^}+8SLa̙lٲT~:m۶srr5kV8p Ǐ?+ZXuxb&OɓylUʓ[oĉ ,`NC9:*bӦMlٲr>5.y^\\9}4?׮]q=z4/2qqq,\˗/W۷9p]r9곶I:u*'NXW^ms∏Gv7βgb7RL&#))of͚\ ꫯX|9/p r9[l?۷.̫J׮]IJJ/DP|zW_ߟ$}Y˭ÙkhҵkWq{޽ 4.^?֯_g}ӧ9rF]YL={6m+V[~#Cs>IDATzbڴimۖUV/%Kaضm̱]Ɣ)Sx y9%IgAVӽ{wS:E=ѣ/^Ui&00˗̙3yW+ldr 6믿駟fÆ 5D^^M)==*Wק!w"##K@PTTĄ 3f 999̛7={r z=˖- L:ΝKXXz^uGxx8cǎd2ϙ3g㭷ByuVĉKVٳg3vXn޼_묊<}%??Se:w @VVV,9Bnsl °{ٳg gΜ!::&M0h Μ9CXX&p$A'֭ٳ>}wyI&e|׮]/JӇ;1b2HNN槟~BPp-~wmӦMqF5ϴf'NȒ%KHLL$''ӥKj5;wGeÆ ܸq8qe׮]$''SRRBǎY`v(,$%%chݺ5]t)}T*_h߾=W\ <;^4tȻ>2~x>5kVl2r92\.]7O&22˗۷ tzSNt֍'OҪU+V9wxxxPt:ڵk}:Mի|2;v֭[h4 gPI,wÇ 8 |^Jll,o$%%y/;DU &Nĉm2JuEtbSF.X0TU2T=5&bbb8qϟxEKea8% L2_|})0 ֮]KHHH ))=JFFWfժU<vSJAI$z Z}ĉILL$77۷xb6n+Wؾ};֭?' 7TQܹO?x222{=zFwZMtRٻ><=`iݻÇ+[e: NhD.c6ҥ &L,s=ǢEHIIGNNN9v튏` ݽ{wzɕ+W*}Xr%?xr[bwr6mPٺ4i҄={;0dq{xx8| 3gD.?8}N2|ԕ_^ON0͜={֭[ӢE _dÃ'O͛7i֬ÇLJƍgHji׮R'NƍK%>CDDCOKK#::Z>CoRSSyW(,,,i5ᄊm?۷ חnݺZ:,,,Әfu놇6e>]oǽyXKx{{!~*B&+>Xt)7njZ̈́ FVRđڶg`נ3b/uTZk2Ak#`7g̐!Cx&n bܸq/l63`VHǑ{h4b nݺhCšR=z4s̡M6 d2r9/"JpNJTTf"%%EINjTkD"mD"њfvU{K&*>thZ_}}9Ju}F"%%yWW… ⵺x"m۶,a-Z(S>33q:E`7#;;6mJzz:/^cǎjՊ͛7? T|4{𲵚y7n={ݻ{nRT*6mG(֭[Gk}ܞXf… m{v)-Dx1c8,q}_|IhӦ Ѯ]r8tQQQ"LSSS4hPu:u={;iRao|> hhhOtX|}}Yt)7od̘1yꩧĎ˗y1d2.]*'ۿI&V pg<Ο?^CCCٴiڵC"VҥKTxԷ=**{4i#==r#Oi߾} ^{5 HJJ"))k^ӦM669ꑜܫL<8/rWCzmCw4 YYY.7n1Nju9 Æ ѣq>::ڹ|}I/EEE/ff̘|`ΠsxC*޽{]Cx"6lĹQh %VZZqHGxj@WTTD|{QVV2Si]]]g9Cl l^9Xܠ|UIq^KBʕ+`2z="ƌ`<"Ø6j( )YCB!Dd)w4}YR!H@AJBYd]!P B!Ȕ+-- u 6X>Ѕ\EEE s8_Bx+DА~#QB1dLN ! =>SzB+6nHMM н|BB ˗/OZtݒ^?!"Mss3臨;w;w.١.3aС{O>Nؾ};6l`֭.ڠu I/Dܽ{łVeҥ3VΜ9͛1LDEE"DȨh9r$нŋ9rk۷o… 7o5ٳ&_47nȩSlݻY.'Np\J"33UVk+î.l6ܼyxf̘\ƞ={y?,{bۙ9s&J~۶m_ǜ:u ^֭[ӟzfnv-P ZΝ;:t ={6j;"|ED@wڵk믌?\EE?k֬qM6̙3iiia{L>NΝ;J+j9%ヒ^Ç8pʾ}wy֭[<Ç1 6l,X?tߋjkk#;;TyrrrHMM+rrr0L1zhy&.]Sݟ 455V^+mzz::|h_7 %%ůjhh`׮]?G9?CSSLffftR0 ?~QQQ^[wo6)))j^J[[[`|lgΜq{~ĈDGGS__r>:_<fB(All,*.3}---n73{2z:DII ZEQ^^Nll,FΟngܹ466RWWd"))F_l+=@jj*.\h4]=s/0|=z_p=;`h4L4f.\9s2dfo!99ÇSUUEcc#~ D;ޮJrJ, ŋ3zhZ[[9{,=6?}s B"2,\͛7GZZ$&&bضmcDzh";={J>櫩k6ε+:j(\q1^[s)y>/Gnx:^Y yH]:J\ s8x:N/Gn};[ dFl"M,O ѦY-šMܜ^TZl&R'9rUZ`jp <8i >Zh0^TuMܽ+0'Ncm;!k9 т L1K76dpx=꛹zUE5? LI+Cpnהm[$$U$1k꛹8=gL5ﵭԐSмkMƋ LKxz<Sw'7r`55qxxW8#@)8$n(*t/&1/5uMܜ^TΜ mxg_7_q+'7rqxz<Sw*&E'7rqxz<Sw*&D꛹8=y"`IuMܜ^Tʼ0$x:N/Gn^DȘqxz<Sw'7r"dL 8=꛹W2&^TuMܫșN/Gnx:UL'7rqxz<Sw*&D꛹8=y"`IuMܜ^Tʼ0$x:N/Gn^DȘqxz<Sw'7r"dL 8=꛹W2&^TuMܫșN/Gnx:UL'7rqxz<Sw*&D꛹8=y"`IšuMܯfLӖ -~ *pn ~mqnl uE0TF-,3edIiѡ6XNl&5Χd2dsk6؍*.-Gn,SUS$cY5D-BHYZ/J&iPȄ8{FM8kNd.:4mUu5aUӸKPIKN/Zc(g. EiW51y9(%sa[KcVxCOXִ5.9~`?MV=2"|FZ-B 86&G};J'(O8IY ^g4A_YbB$97VFs3ܾ3Acgv3=:)O eUI%L2ԽlD,_W;*&kpZO2>ӠRgztNxk,YTױM,(MCWRMM<Gسπ;_ԙkh_$X^X!P2fx44xß@_s=:&|AeՌ͖o FςmUId(^ jF|Aπ;_ԯ}|5bx9-fQZ]TQ-ln.eIץgv3=:)O e.sٍiר-4KM3fdnk3=:&|A{ᬱumK sc[Eը-rO<7|)]nπ;_ԙkrT28fUʒ,uvz>ӠRgztNxk,YTxJK :+uV!,G ؛o^zk>ӠRvYk5u.@0 k>ӠRѬșk>ӠRwYG2+3=:&|A﯆"dVgztLNI_ eDȬπ;_ԙkӠRgztNk(&Ef|Aπ;_ԝQLNIv;ᬣșk>ӠRwYG2+3=:&|A﯆"dVgztLNI_ eDȬπ;_ԙkӠRgztNk(&Ef|Aπ;_ԝQLNIv;ᬣșk>ӠRwYG2+3=:&|A﯆"dVgztLNI_ eO{&kѐ;}J2 g'SX)˗ sq}π;_Թ-lDK'7qEsؤϊQ(7x7$TztLNI^ZGij6sQ%6s[rl˕jRnx,f{U>ӠR`")$v~˝ļ85&Is] pXx&G7\r^-9ñ h~Wyf$/ݣ^1xVjoup6<ֽm{- ˘ I(D@DDD@DDK:O+> yI Q<*B3An/ݣ^1xWpvxǖkNA" """ """ """ """ """ """ """ """ """ """ """ """ """ ""1]ysg'YD:-DDD@DDD@]}¸˳tP{ Ю¯4+3;DA>_Y;~ h~Wyf$""" " kIV55պXHpPxD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@W`\>PwA5 lfϝʹ^KmKca~u^2Nϛ&ZkVk8?rWDD\v| .ς^q~A*B3O Ю[ h~Wyf$/ݣ^1xPDfLP\XEpscqmʆjޖ7F;H|cɉT<9ߘks(_S sX֌3$nI+J1 ՝(RsghhZi:Ah -j+[MWoٍ }eI PuFOA{2Bݮb5F$" """ """ """ """ """ """ """ """?%pQePNȸtMtJ  Zӓ"g>+C[.-4 "C|WnpLt-'K# *ZOG9Ⱥ<\Z[K>Nr/%6d6mV\_B_j_M)M}A}mhnt\󎲋s'8b!EU M&S\sS)k j;^3ItiT:U3:妱oyϩEE䊉t1pjki\D@DDK:O+> yI Q<*B3An/ݣ^1xWpvxǖkNA/Gu.ܜz>vվJ Zƴf|6kǬ '-%LQ1 9ΐ\)GUvK]K(vrV%ۓ/Gu.ܣڗ;P]E#dakj _&UR44Fvf`/dJ\K:5-M)L>rG;[pVJĽUԻrK_-vK]K(vrV%ۓ/Gu.ܣڗ;PYX꺗nNJĽUԻrj\Ag%b^]9+}WR;sz>vK]K(vrV%ۓ/Gu.ܣڗ;PYX꺗nNJĽUԻrj\Ag%b^]9+}WR=+}5%U\:Jyxcaqm z>vK]K-7~+=fg" Z6&5*q:ma{ X꺗nNJĽUԻrxS[.sO. WImח!J \z>vO]K-tDŽPm6'A8=kAث͛V8vT skL~N ֡ uu3vؕ-zxR lߩsOrM_ʮpLxuOG s.v3U@[XG 4 GS d{W;Rj tI=3B61թOU?YEd^v[rvrV'ۓ/Gu.ܣڗ;PYX꺗nNJĽUԻrj\Ag%b^]9+}WR;sz>vK]K(vrV%ۓ/Gu.ܣڗ;PYX꺗nNJĽUԻrj\Ag%b^][axCR62\bpfu.5~O.ag' ĮۗJĽUԻrs|ڴEz>vK]K(vrV'ۗFؤ1,zӫ|OgUfE.Թڃ=5W!Bcm:],.la~Spmq G(.vq*HP΅|n;K u clA/Gu.ܜz>v巄*:)(%?c_e>0qa0YAs@\,mpJĽUԻr?8?_p5''¯4+3;D QpvxǖkN_aA>^*/ zHȕߘ<IQ3b]I$ELNhi],kp@:.mnI ߈4a |͑ͩ"`A<'Qҹ)tbmx1ќIv+IXݙtcb..Zɩs5 aq9$J vh01ç[/0vP@{#@ط8$VJmrEAELE]i79jѵ}3EN%C:[8|/V]-3ŗ.fas~`t0fRKhX޼ 6PstyJicuu9am ULF$sZSRUUcw66*oWg{`EmZjq,B1]uL0l%JlfJ7top^IŰxS[.sOȃ`xtџyr{.m)S1,x.g< sG?H)+EN%U# W8ĩQ'0y*˘ >_o|:!Qh" """ ,H"{湦DBn5OC#l ~ɶm!$IשzlKNF?'ktP{ Ю¯4+3;DA>^*/ 1 I &ۘA>_Y;ʗVOU(hy#uM͖DD@DDD@DDD@DDa8F# }3ct_( b6 ~8clQ"\p'Noi\D@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@W`\>PO.ax,(YE tWv| wWߙxUwg}?8_G c5'x0 ~t/,{ĝ$D@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDv ?c 1ϗ+(NuZ > yIqg/8?_p~y]j'^hW~fwڈ-}п+<]wSBkNA%ı؀c,v "XK;b%ı؀c,v "XK;b%ı؀c,v "XK;b%ı؀c,v "XK;b%ı؀c,v "XK;b%ı؀c,v "XK;b%ı؀c,v "XK;b1bCPi+gdlok\rD& iؖ;`c,v "XK 2n{徛kcd=]u}4{ s{WF U.sb{*XL x-Xm_ gtn2y@+Z@# k3k@odÊҐ?%v$dnj_< qu+ǟm.E_?_p^y]j'^hW~fwڈ-}ж8NB=#ccqcA|O޴&0e]m[G$1CzR ,pTO Hx2$8lTǾ6Hȸi:֓ty>Cz?5c<HccUi:#86}>Gr-e 4}De#48pZ9U7t5!]]^AY;C0cּr hŚF Dnye@7_OAY;6Xk$hDZe -u쥚x`6->#86}>GrV#G,ϙ͍fh7XZ` e#Z4ZFn zϑܵ3t@84i̗k`즛; tk$t:GFˡa\ivlK <wB1&徒cU;aQh~d-0GERFi"l&sY㛜](8Uo6G٤l`7]@eaxy[2~ˌ@:t|Wm0{#1ɱ< @a,6)9Blu'H%p(n ݊=0>7:M @X;NWFsm O`^p'ikcm ŭ:)?a$=iİ؈XlK b"İصUikF@us{W*,_a͍kN^3 ZN%ڰؖ7ĥe\Gb.k 7D8%; Y#s#y"'fbXl\;$qְ0&i+&V=.b/<˗M>#86}>Grʼnpᯆ6؛ਥeK$tfZl 6}>Grpl| σg޳w-rDcËݔea?}Z*?ަ= ¯4+3;D QpvSGCaddSckKHh lv%-h g199B7dvQ6 ۸:\ QP}/j[}Z:q$d,6wڪMV>hLpOkG5 QP}/jˋMG;kYPڂqۛhcJj9\ O ʆgm;vpF[GRP}/ji{T_䃅ռ+ / hg0HwȻI3)%ԭNf/8P}/ji{T_䃊yL2x2Haovkk[EQr|aώY#ś%|Q w(>EIAA/AJ旒yA :@T8Tˏ?{Kڢ%ض<մqeimK 7Ԃޏ ,e41H XDs}b8cZB,Afi>AQ,A;ݍ@F6s4G[(ds]rOC>êo[>A$|0TjlR^ǘF}acjk^$*)d{s8' 6?}pHz7z Fژk@)ƜnG6Լa,李hhu5V6Fǽ8|al{NH䦭K(ぢx+[s6$UT)f{,G6; pHz7zLX^ֺwF[vqQXeU>l+rfpEMZapDRVۅ}fߺ cQ +*$0GY3&P.K> \܀e7zpHzĭ3(GvfuA}+̑ ^5ٮk{ 6x|al{ӇFǽ 39,%nJ*s{3|ؾHz7z YqNJɢk\f77VZi$2Zzo[>A l4 涟mc6pmkFǽgn*=זf *jx+o{=`hL"M dAe)aޑ ޜzF3z GJhHa%h$ܑ[o|66Lx巹5HvoNRý#EsauOi?%>W85滔qjx26(ݦ sKhf,;4]SK̹r/Cv zJ\۵Ľ,bXwhC7)aޑ ނGaղ5d6KYM;6kbtl MJǔHvoNRý#E5M[⑹ Hl"]v2B2lRý#E9KhfbX><`C^xV+u uGۯK%c%Ũō|iVB:1ʔ%7obb#R&gU ڈ[ n6uV>331~q`./%sˣ$^A^EYlя..Kin:iX>_%l&70Zeƨk[SNl¦+7wk/k6hkLtSIRɘ4DKn4\;U+w65m,p']ݮ-HWOh,}A˒QAF=FH3H'@uX_ڲj'2'Ӵ0679Otf0ra4ӂ)sCbtk!aQ7!9K4_i(U3\KbR9A^hW~fwڊo  |*Y%qfV2flmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope1.jpg000066400000000000000000000131041247673406200260310ustar00rootroot00000000000000JFIF[[C   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egcC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccce.";!1AQRa"2q#3B$r45STUb!!1A"BQ ?.=.=[GGjp.=.=[GGGmTmTrڎrڥyQyPyˏj9ˏjF@ P>5g9q\FujO2HC*j׻/n@ks1&cnss[jz,%paB|pkŽ՞9G]w(8Y. VE8 " .xR@>5OyspɷH4l7uǵS$K^/<y{pя-U$um7z6_9qUK,Xz{q$39 #mRj|qۭ@F cqjf*rڰMndAH6d1ұn m/?F&ҁIѲ'GOor҈L$+WsCZu:('JVl[I%V2uGlQO uǵJ;$Tek-*YYrwSVII9FFf_SZS _[i.!]6!d^뷂 9yo6xWLXǝ[-قC׶RNG\33ЌZV/ΝGTN1mD 7 wXdS`*A4Ȼ2@,7efg-NqY^suўKkcq&;kĀ $D3OvtYv |GHSeJdٓ[t oT,7@ Y&1-(&v%៷Ypw{PͻqZr̰ѰbWXXv`)A-7LԾF 5^6u rUmFtvdK\\D\kFDpAҢMA.Zzh-l]Ϸjn5CVR: UkIk)6C}.?jN G*EOL>nyHcicBh,,r820?*cʤ SH>jJ/&Ovu9 nMh\WQnhנGlNOSFXu?c84jO+KYi%腙IPe[w"AJq$f,.I9?h?`Gڳbz@쿚 -),8Vs0F*7ZO7pr۹BʖG". 7쎵w ^qUk̓} =IVRE R^aûy`k'=44j֭ۚ>IcoRNrzdVO u*yM#l넪4tZڽ3pcEKp=צ9ۣ;/z04RTj" ¦ V;Uḫ ?hF˒!ć`l0jTxXݕ#^#s5 ;zj1YV9RR:¥%2g! eeW/ĊϽFxe0c\?w_hbg6-bo+wh(0H !8S'O?Q\E+d HGw0GR9=V=,{{{Spr ݱB&QRTN$($^ pN)ީ0)d08x'E-is++SrN<*Xm?Dehê=$ > M.hr GZ:x;J#SD`Oٜ匼$A*24B'C$3N)Fm1pNHZnё{ɣ%U ՚3r'>6F6 8`r1QJeI ;ޛVDfUELwY:(N]F;FI p(Nqڟ7q(O߰uO y2{TgN&E.Uh s΅rU@'8V|6̣_$+2s@ȿ3sEXD2Y| 5\:fo`j0y hcfTBGrTno- G OZCAGg\NyS5#q#yՍ/N]R>Tz"QA*SU?-g<`~:uLi䒴So /( YsNtdN!^Tmv>ejݖu LO1s,ũNGd}_/ִJq7p}*tg%Pn>BFI9X&/c޼ 9 o[sީ#tC-TF@yq`c>uLWr_ M}6P})lm4h䇅. pW9=a({ԚQy9H\@k c qLK(cՀ>*ffR y$7cOځgէC0D-Bi,Oы*UHo"ȖB~άiR6(nwإH 障\ T!B$rA4"e'^1 `3^& ՜k<`$wl5 ]Fc#Xt;(ŌsQdϧ.쬖MD |86gOK袊+-42~kR&I428i$b?Ue[ߙ-mv::WҸ"!UlJK{[`u鎽jO2%"Ol\d_LIJ Zۘ:fi2}[c`a,`Vۗh =|iha{q IJ (jb+KB^̧"M:!5Dn8d7CJ^Iw3.S(@RmoB^7M)FZ,%'(vs2Jy ԌyS[fYB s׷wYfˆ2Wr,SWmrrce<3Df^U̪,EK'|aQ4L+_P[eعJܥnšƕcLնߦw]\x0웆2A$1'wCip4sI#`&ECYmӪH^ߐ>5MFZ4Y#JJX:dFEKҍBATcH=6ɬbtil Wڌwn=8Ԛ r4aY76>ħĺ1W8c{>TWQJcPJtl)zL4rkpV˨5wQ^;BU$ Ύ":ͲW=1,/:XGΡ2sŗ ukN}S,ǽZtM1/"h¸h<8<1ۿNRˠ#]E%1Q<ӥ OEdJ}zd\I Ǔ^E_F\Jy֝Λۼ*E$IlR)5]GO@ţ OVG6v3K,K2;k]$XV?}Ӡ ."YPG1%5 t繨&hn `0i'e5|nV:yVf3:PT(tbil\ x(;;TdWdͰx`1[ai`1Tt{3qdTTUNY ]2LJƺvʵͿ.۶c|oABB{Y yBZH֐u9A )EoKX![Tg=I>5i-ۅTTPG/ӆ7s,XdxQ$,I,"F_vުH,aT,0q(硎>hk,; ~ kTNo * ::E[sn r5$X P6(R+T%#=kf;(.c@F>tKeD+\Bۻ0U˱FF{3l%n%G$9r?#G[`[9;Cԣo!h'~cFXWL[r{䞿? p)XP" xאEnCM'&>h|E2C>G8}(|@94s>hp(>G8}(|@94s>hp(>G8}(|@94s>hp(>G8}(|@94s>hp(>G8}(|@lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope2.jpg000066400000000000000000000123361247673406200260400ustar00rootroot00000000000000JFIF\\C   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egcC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc`+"@ !1AQaq"R#2Br$345Sb%Ct"!1Aa"Q ?ĿWK_J8/RĿWDR/RĿWDR/RĿWDR/U} v`!g.aw o(I4'cc|͵N a'>U?:\1_ iU]Aq4䑶pf'4yRϬVnSwVY "Y-&SvO=8~_}To^;\6bJkP_X})}+3$:Dwū{X54de(ӹ YyU2yZڃ'~"I6WXu֣X^{c'E++Fs%`d*v7FjAQemAU3.x.9-}K>Yْh=⣾[wm`@6O_쾹x.m4Y#p87?,6P$Ӵ1ydRoF>OI qc>˞2R0|y zo1gHp?Pz\=_`^*H M_OеYmdh.ķ:q\A W;=Ej\$VR @銚᠕ *jCiι0*?aY^Gڂwu6ldf|%{PJB:{U%"Psϝ7%$TG)sOG|ju+x }'6qZ<7QwFCrK#+>e:j?E83ԩW 9!Tj$tҡDҹ!BЎ4M*#de!kȔ\}*U`$򠓵v|ץw =H($PE6!;̘ڹԶkVVY0 )u?&ݞEi:#!bzcF > 6-[2'͟zN#M2CG%1f)Q 84}6)rntM68i̤ҍvgOZԵIxm F.q"#.-:'dX~s֠|AQ&$TU:\e _h\}(md]Ym3|@ڌȋHxc8+, CK_:bhdr䐦O>}*tm+x!i/;LYQ%vȫ(t=H.xoytSC)S5A+;gzl5gn+þHne#1/i}cus0U_T# ?_8%'S N$1lc9fY,ǩ,jVjz7efۛ{xci$Ҁ}e948]!)94eͅƭ<'>YTgHTZ^G4]I0#?K#*d4vE&p :>Q=p*46ܪr<5-RTFIx2W(N5Ŗ=.2Յ2G~U- )XMџ*k53zWbrLy uRe  '@6P^=kh #/㿷z 6[q ¨Jy_'vj 4eڦc PA*~ G*h-/ '0 JnevT c򡭒N.V3(.ujP>Y"B0qMv>3E>.9j FsU}ޅ(ܭV3b7#fH:V0ەvڃ_MԮ%2|UHzTX[֬di%~bsO~%yl@N*"t-X>⼉Q gev)ntƅƭ3 9/prUK~c/P<+)b}*.$Rm,|HYv5AMam spv0NAq޴m5{=bq$l‰(T>UZq7V3zTU]kd6> "r{0RZZ׀G,Ie%/ 4 Yztq2Fې9w2+$s@!Ua;Pp^dee犰$9>uZцIiQ3Pj:-28lW=ɷ[#汚8 ̝͇qZhKK/mR I#8>`uspB$1&1c1R-h7W_J}R94+rW9|e?F|'f_5Mհ%m`N?jYE¶F ̞Wa?aP.U29ʃwP5rYyU U{QB%*RJ㪺pO"zNf1*ίdYpx1̏Ҟ**>,xD\ӌA6 nȦK4p&\">tщ2{ ʾb= ] 1\.@y#〓K.9)p`yU):2Г dCP&A$+}<hfN'2~&l`G,l:$/#U$Qx"w#hth.x)Wߗ?J툎* Vh دRaӸ>UQmt%EEqoF9+4ŧ {",sS]ꑌ"$RJg>6{%MϕKټf⪂[DQ`֢k5ny_AjřQV\lMt@B`9/ x#EBc'5-*UMl 4Tʪǰ< blqU}xׇ 3MւmzJM5PVv@BUǶs++01zpib^E lxn4_/}:c,*#EP/vk 2}qW//,dߙI roaGu4_dQϋ)rY$O5#8'EeAyN?I\d. hjKS7`KPIr\kץn'G7Z/Csqb˴I?zxJ^ҕk ܲ#q&/XQ)4)$F ˜03Z.=iQ^җAӧP1OoƏ&PyUE9Y F*\Ju ZA2%{VRPle[ hĩ#U wѱuBqUnMƒqk46C"ܛ/,UB}WSr h?7#e [`&BD{ bR=)xJ(73^hjBF֕<-bdePXrEh(lQ|@*{ڋ[Z/JK<b9=Š?17llmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope3.jpg000066400000000000000000000150221247673406200260340ustar00rootroot00000000000000JFIF\\C   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egcC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccce":!1Q"A2Saq#3B5RTr$sC"!1"AQ2a# ?Qz) Cz xrF)m'c\ڈs7jux*?\"K632 ?0 [<]7sSh7ֲmgq |`? NAT` (% d yz mV QE#:7\IM~Y\$AEPEK'<ϡmT$sΓwqs,DŽF-3]J1IQ7HH"@ :G_Kn8iWב#&pyI勃Pj[|KSGS |;=Ļ_~ګjvWflD(P7z 5뜼ǧ6&pqo$_JFdoT byRSIVa z#H$! |m1-#.nqfȓ\dgyƱ^'rHbsچp35r_i0:򹝎bg<޺#'+Qg d>8b4, = ,1nx8[+F 7PhqB0m6\) FP`O7}mrv+Gaڸ˿Hg+o<!}dutRaiIr{1H+H$UE2nqUT56G:KҔ(=6p |jV̄pS1ҵ[{R0WOcXZ5I1!U,G/7?kIEʶ8Rca>Џc:MsNELEaWdsrFۜ=֩H&Y=6faנ֯٤u~r`yuz7[Ԓd`u3K,R팕~FWR= s$rԍd3Rfs:kPq%W/ݑ_ijZHWSjimlUzV=A!B­U9fZ)g 9(PLsm9X#*@ECk,&29jjG숭0 /V=+*29F}+B7(v"*mwA O8$l<՗OZB^Ugր瀁c Fy l4Yr{RT"" U,=W9 X%݂(qg҈g26̞`Q1NlbG(rȠ@NJEW}T54}괨eBb`[\? Q$\zSgdTRgqIouÓΤx˰`B}*8AЕb69Xh*Vbشq7JyZ#|ǕR 5QJ9(A`ҥ^ .V@e&=pk#n?l +kLG*T+W8ST/q\n$}Zd9dWZĖԏTQ:vq),Zp2A$jՈ%.ވ3Y4Nܱ',$mf#HY:Gd_F$YD} ˻-AFlbhɤ}zy,%HRrI47ۆ@|r$dS$I8vevWF8F3^7K!~QTCU^I8z"QϞE''7glsQTŚn''7"IU[.|#$$}y"Wj^²&XCH%KvʍW$K`RxX~zSgmGFlWIKglsћKrk 20J*JqWn~dz~! "${K^|{Cj+YY뻞aFXvQ.Θ^KիI XXWF+eefp2?OI[w!=e-Ny"]]ȳ{"Oҡftyp+FGK9Xܧ ^Ƌ};y-^F6ʛE)&Lsv,曆[?-jhbK\*o"S-TF]rʁS8? j[g$y@!cZdhoɸr9T=0? (#[]9V;VP|%TKE?pک(׵-#0_j0p.|FM[E]rWHTq=lu>b{桶FK;|4' 84%r]`QNS'57 T#L*i76=sֺ$җ-0E?6IZz*|j4RL*&6fDyq5~%x^Fhi(YEvs BBiBRy/V巸h|w2qJJ?$IMHB``UvOavxQ략A ŧGIň(~֝Zz*|iiBnyFL϶'}˞Hj%ӷEG(2@=}kR *{Ĕ`~* fyeY{".\lQ'{a&d~lZrI:?j9fo.ac` |04l[+\|Weyy$rq*lys 1'Kv[s;;iFFMs]FAa=zfoo-Nz۶͹up;T_oėlm6Ϛ? KYxmѮi3%%% &`4bx' Lx:9pw??'Lx:1$IqtLL0逛 ?_T>阘`i}=I 4EO,G@8HJ0롥qb4adC~1-<#4 86q4F>~ #];;]ξ^/@ddgsyy9/@hh>zX,Dr8<y\ĕ+?olĔ{/KjE9GͺGi44E=zq77׈ .VcckIN3wS:]XjU|`ō/p3hJ#^y%8'MPɚ 8s?ͩRpپq+FĹ[X(_"j(آ?ɓHճf=D7g<ЊZ[GNJ(QUנ61/me*4)9NJJ剄NC-]:(T.(:\n+47@tQ 3GT/=/62qnnnSSSrRH5%%䍲~f:\)LJJrvqϛ7(S*GZ@*kkk/\Uy\ K秳<2 4+.\`Pv~Ϟ=cTpfL44Hb˩&H$Zh۳XVg <|kS^s֫$T|/Tb^՗f4[w&5TCu-O2'iqgFLvC*<<ĉϠql3jmߗḽ˄:qqC*U<(*>>qߛ4 Ä3v̟^r%jfԷ22_}5JͺvڅKظ]~u*EvY#eJeyU ǎQRⅿ,YT(4*T*=tPll'l3c&TUÎFC]1lR*޲#Y6+\!#zhS@랽5[gZCijgrX/գ]d*iљt+~Nli!WZLm8>mڴ6cFUUЙ[vQZ킨=ܜԔ#14M ީN|Wri.WzԵ Bq1%EKQ8.w7B!{苢-,-g̜0$pǎ9׳+**2L&WX=S䄄85*9^ cemP^YYUɎ00.dt~R.]4UK~gDmKU7\&1ZHnIӕφOkMgK,D 㛿Wkރ|"#Z ?::ƍlٳgOdddTT̙3===333|1mtjsSR~/@+"sYSC;0_VW^1`1qڹ䄃?CאQ I2>0Նsx{Hm- 5unRڠ^(4zҢ64`qqq6=jkjjv~H$h0xYYE*J{lueOqcbbI8X\xF+i M\H,Wp (E'*5'j<8 '_\;־~NˮA * eLz`H-MU=ͬ> jW.3~OVz/?y8D(5KJ9dfd^‚&vP4 -O*փjBюۛ0GDd+ JM5V__h8w &qhwpw713u8o=oa|kw]6uҾ;ha؁|||;f͚,))QÆYJH3E)WV[3n]ڿC U*Zgnc Ap35@:FFڸz¼4VcmӀ~b #ѝprx<-mlmD"zq1?^%Nx["OL͢ps6ߗRڀ777skWsG;N}q -91h̘6=/sڌ$O$JWӮ1c+V4Ⱥ'7|lQS#JuMMabElaA<Єc>ع8]9u:RTR@YR6- L@k?W5MM՝qJh&6g3E9yضyg FӘR%<|RXZܙƚڡ}7DGGkB_\7_kFjKC&OaaP+>[ospI2IJ* aCsf`8MjpvTJЌ3, aacͰewkf=up:ll{{ 9\-MW.H'oԌhS鰟TJx">`Ni[^nYEq P:{אn>^Bs3ʐ#?~ƍPPP=n8;;~vҤI{:uq+c5bM;FϲZt-G^/ =\f{e%9c_gx)eM҆~Ck0b?W,MIe:z2OCQ'eFc"Y,3\~)ZN7JFAǿ4&!Ι? wvph!n&<툉9rHgЙVءG?t_dL0yi]lu`}U+!2!1Ǧ(+ZLhgк сF:f1Bim 3l@ϑv]5"ˋܷ/c16&h)qlt>q2vl`Bw}:hK3f D:Zӧ {++AR;}X54Ng˖:ҨQ} uo_FZ=9s!MM˗K. 4n<ǷNhu+!2әiӼp;r$Zh//?4ms'{~}2JSeg'ڻwFCc7n|ѣ]]98H~iJaam\\ҥC[6ۭ Y$l6Y3 ?! CZ"xTKر= әӽIR_--3ׯOBw`!!qqNNfxx؊D_?pN 6:tM"!֯ u`Ӧ,iYmn(]\zH$3;yeL4$uWW#qQgQW]Ç;''g?LӽwH@NÓ޽F6PTtHU:0YH$$<>o`(;; 1H$6*&ba"" ""-QX|T_:v3Ӧyc|e {DD ?=Ij#%l:\zѣw[zDϞymHJ*ϯiX2W/+ *NOS$DbV9bdMCdaa2;''W3A($D8d$2=DA;ڙ3im;66?66ãM 119f͋/Рz+/~lԩ14 eeY86ygRR1Om AwLfXYYz @ SЃH$AA/]acj2:?HV,g.#P˓px"D8H  Q`XTCKghvfժU4Mg ubÆ҆Crݻ[jժmgP9keeV"RQ BH4GNh4Gdeūj\F$I>k2#޷/?c<Ƕ% dOL ) lDQ'Ѷ 1pt4:T"A[$p{&d2ϐM<A3LĀі\BEڵ4?-a%O(3\.EQ0Z8P0|6F 2!JN>jmPs\.WX uL"}"33>f( KKkKKk@I}A0A.`}rٳ MN> ܱ֙%+**oxLD@rs3Μ?f~/SEsйP4Qq+썜1m z5o ςDْ"h"2FaJeaa=A<< )ZRfztN.C=(#y)p:ñWTMxB/tR T&c;h `c0,ѳGdJ^"1#Ir`+zcff R ]RBNUКvycRY]=s/>B638{ A6|g?ECل@l hi (Ja8@u7IRRu/ҥNo`$QVVu~12B8pgׇ 5kKWOkNr@&FQ>۝ p@b@4I$dDD"DTO^=1ckAߌtvls)ݼٹhUz#ߗ_̻VSJYӵdZq*š Evj$$j@*ss1\]uwv]Rd2F051Ds`Df^;$zƈ̙on޼[\\qnͽ{u%%UKs~~av=zq_=ιw~B^x%p/@<dVMPC<Gs8\\ SG C6טIHt[{5a"656JSrHZm̵Zp eeKk~ )z̹lD'7[}G@cn։!Z]F4Q2CT46J{2G67 EXv*o077-b Hr|RJR.xD]]McT*S(㙺zN;3r<(}ggb1/ިiot!KPc*--°kTMM1h(iJ0\TP(񈪪 xkfHD~~a.;?S-JD4풨I\+yvvw2dRuup0 Cw kZFPR64Ի((HS(^^摏R|còB "##Y`3@30zJ0B_Fea⬬xTeH:G;C$~~a(n B;vSSYXXimr dFOT[[v~ kҬ3t }R G$Y8rL7#뛏%h3 IN><5"|].oq󛞞Z>D%%ȱ@ 03 ILRTZw~/0N;fz3j>[AA%EsS lD@K1&BhtYHl_P(ÆMKԱ7svK, G>0Fx '_R@I&4N2TG&50Dfndfg! !ٟs"/܌ɇ|@ `kۇCBf߹5k r z߿ɓWXA481 ?qDuuuDDDtt3cV :!F$N$smvP:sZy5|JJ2 B )+ %r]`dɒӧOoڴI"{гgp`&q6mZTT3ũodZrZ-)D=.$BEM;$zzG_xpJa .{{+WΚ5)&&錣ƍDGG߸qMy`2OoB8kZ̘`@gH,**_`ذaeFFaΟo ݇.Й>}… K~`'OׁI}_nJ*n.>XǕz9ţq.~f.I~|dK-,*/ǣw}qw&5TCu-O>mj,IDAT3tQO#w  f7]3[n0`'TWW@^6m0tI s|.J]sѵl9?DA4ЀXupm@=B7Qg2c^<{)gϿ~`Y]WBV[6*L׋2O']aAӿŝDXY֙{^=ϟ?,--'NئǏ߸q ǍhڲKjsSR~Jsl/]3| bo)S9z_#zm/5Z ʺ_&,#uoTȩj ǭ_.aեV"ssX[@CMz0ιהK/JJj+.>s•::]/Μd`_0\;pGA87`eSTdn2kwHY_lVu|yl]3iXn]NN$$$֙.ʹn.j)^(z;4V*7_oFB69o`܎}c8EHJӽ7RuE*UUwJ\껊,\z^yѡh:ꓰ>#fLDoo^߫k'6$TMrt#huO{ݼΞQ]7fz~ t&]ыbۛ։,̔M Wyo z_Ӣ3@a<-N$7tgp ia2Ƽryg}a|kw]6uރ|lz.= m cQq8T{54ttatI|+-oj|>gVBR)J^GLwKVu/UM֚6-C.v2&\%TƚZ%Fb`ho[w"* 8ctԹރ|fq.GHZ;:黬7l>)n]-u0X>ݒt9Ia!%ox_^;=WB3ɶ9 卍ly߆9rİBLLNZi.kİv e۵Z^t#@.k-1|pƯs|&iC!%p,u ;`X@]cK*o4 ӎ# "a@7lh$H2Rt!Յ|WTI,NEr(?zo#޾Ned L{t ۾Kv3zՕWpuIj{C/UEE-X ط"/#"9ڿt >c1㛿6{:`ܨ/loc^9s6c Ah-{j $bw`x7Ԟ.fʿW}¨Ӊ:)ӅV302ИlbѸ-9{vt8(}c6dB?+iy~#'~]I774|u`=g&t-<}x?O:#miMB( 3 }i++` uuu\@vk &@(|Rgh`SP|Θ`q+\@ 0 &@U(|ea 6J%755I$%%a\i L0r@txґ1Nm55IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/uilfo.jpg000066400000000000000000000142501247673406200247160ustar00rootroot00000000000000JFIF\\C  &.!#&709860545>]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]ej";!1AQ"#2aRqSU$35BT4rt#!1AQ"2aq ?K(O3^_5t`l/>/j4"V]WMWrvEˤghjl̗d,jۗy.7 %me]uskeor8Q:_%(IH.?揋Ηm[grpUp'GGB{!m~*7V;ן\‰I{Ԕ@Ba,4 _4|_4*.4ٔbep? $d<¾_4|_4}ӀUJ..AR 2B 3K\ƬA+-c-ԭoeLH h*r(x (E g849*H9,/4GT5U&(<a9J)Ra-mE۷F%vhZtQG9mPXлg+5{zFi ܊ u敚#y$ݱI*KMHoJ[8BPOwWҶkrI$~\V7ΊHV5 9ފBrȻ27kmuǖI \u-=:Q8nZS吮ǩ[vO-ɤ B^v@6)ڵ><AˤQXCX hei=ňZ[RѠ]]hd^/QN%o(AgxĬ#4qEk;k+u5̿&+E$5滇0{BHr=?䧁uaeR]l\WB3 sWF9*%=l)ߊB@40 8;:;. vGYmjpfoD%Yߪ?m?SGwsq"ob*G-/d) er":*J;4VMƃ箮3njt!5ai]"V,GJ^P}kCd[5F+('de O~HཿxbI7nb5=CF!mim]ItԋS XH1`'=)VYXt9*} 脆'jlr{lkCl[54` p2M RI&Pt5O˩jaK> I6v y`eT$KF /2sҭFDcX#r jAKYpAzP (sp|\H"E~q\Sw{×z7 aR‰(#ՕiaO272dT-]Jr:b&Vhh`Mk H4X)6o<#89&ňsZ+"H"?Zn$@¬%]pA HM2'%Ea|VDF f9'^'Ɠ|Q<SAXG㓴u {@ ۀ,jdO?I>/% j6~PUJKyҶNIRfoF/?h{%d3EMh2]0m!kj6ƫ9f-YlyB=<´蜜ݳ\r*u[t*v'$ >Q3J'=j+^<\%|+VQ=sBn)2&!NcAoI]eZ7ׂF=!L8^?aj jphG֬q$TrNI^O3Ae$r!b5{{TXf 3Yo펟wo}sEDbB;$biҧ*?sə0 +6tқ\bv^U&ҒyiI,x6zK[M+\x)q0E0\AW'S6Ѐ#w1+[R3$ F㶰EmC 7*x3l:̌P֝8DR(U$lNzbU%q<5L zLb YyT1IWI'.L7ր 26[!q3z.Ar#_ޚ08jZHH1ڹ.yl;Usi_8}:{h<-)ѹ.+*xrL gdH8L=1M݃4\"zt oUuop_XBm䁎@r"1ĕ6p޺AQH?15{,;*֑]Iq&v'shhQLW Rl;e-5HpB|r˛(/TZ\4lHV#8F^4__ֽwF##^kkb=҅+&XU̚U֒\rA|ضg$R2N9)Q. ̪Wr!#"?h' Bi/%ĸ&$|}kfzD,KWl?h}Z4}1Z9eG3qʭfw4}?v ^JeHrpH-4洴$vEH_Jsl/?iZס.DҺvr毤G-2B v;3\{#+'Z{,i g`9FIhARwVO>Qm2 ƬI|Q^4I$ɮN]$]2X .nLw) y8V9էD\j4''H~(ݻ9o#Z{"$1MhDF%ĎuFHA9\RKLRս$x8x&+@~䉺aFڃQ[x0k::7;Pک`ܛ' RG:h1R9~0j[(,+& jϟL?0έ}y$f6* 2hHdmzCZm l+JH'8*83UV+;iѬF5EM۳2uorbri$h <굶 *NqQ3MI)Yv -WqUlךcȠe f"  Sw}ĺM1fO#9f( V0;TQKc`f`Eh$.Ю@idKp ϵZ-]R{{d'1F[{oqqґgٖ8J2['thcY:6w12$0PyzU""Gf4P|Ha9;h=؀ֲ={];TX9<:lm.L{Ү ԕPy.g lVNIXuB1iEkm2 4ZE\zS1&%Tn隉єijD]vsVqs:͉'PGzCvuie'(%vp+R$uU4sjv@{أ(4mY#m9  RjrJ{XN4ŧҁ}9 (J/\+bO8>+¤0y:}:}湻]n!$%Xou ﲶ.**~͛7\RWWGӧM$ə3gܹieeyf{{{ M,?~޽{T*uΜ9\ dÁ f4/BykP!Iŋ+WtvvڵkO?dii9|ˮ^jժ'N޽J&>|b f׮] W.^${C=~D"޽~JU64D"QIIǏ]]]t…YfܹS"!v.Ywu]x˗/***&O>J͛7gΜYSSLOPTHRNNNPP<?~/$&&ߟ9s&Ҳۛ6me˗/x{{;88<~ʪv33nY~eQO>_nܸQPP2`eUd0L$U~Y&LX,b999S"hjjZ\\2`eU<"ڵťl8׏I  @!7S陜Hs(**ڲe iҤx:榧2JM;T 8rhH!5 F"㨨Eݹsܹs?Ǎog08N&!BBT*rbNa5l_2 bNNN7n駟߯IC@ṁ?!3k֬/B]dF k LsHY&fffk׮=}ݻwt:[쪫X,lC쀶߼ysjjjYYY&䔔ZZZNNNO>Rٳg} iii!Ϫ7??pwwgWP&5׮]{I"8c 'Go*2))Ϗd{{{\\\\RQQ|ѣGtuu/^8relbp§~ڏIx}򍾾͟T*>}#VYۆ@ٌ6l000ǤKk׮_!!! \7Ξ=kee73bx>JxȀ>*րILL|6v2_ǭ.Q711U#^ccA;n(((cㆂ2@% e x6=m1:2@% e J bnQPPm˜`*؃$??X`p >A}ǎ!sPT\o׸+\TKB ;pvA Aۣh<OdA;ۯ4(++ |>`-?p fJ8bXgTV* ,Imn^B\Cx%PJUUU5..nPCэ*<YPNLmxdny6B2";vLYY,Xb I_\yFXػP}ԿIJOBWMͳ!Rkk&w=z\t 9Y~(Pz/̘ Xb_.LOppD;c"DSb'0pœ'רT&?J"@ ģGsvy? #Fj@X s I$Sd2/(DUiLdhh455)_S=T*ɓkT"Gyy <&)0o^$+D"׮J4ׯ_MNNV.|+`nQP) t P8eDD"s8 0pEMͳWl!J?duPTKTJ67;葦&S,A 5b|zXL&wBQ 8ʋ Rؖ鿠s}g1V6RHH8<~ĉ9waRY>? %#HpFv++$u% {7),JRib#Xׄ 3*¹!v#'Pg8믿z*`ԩVVV}?FI*+ )BaPHk}_ )$ǍEh4<>hn\֫)da2\w<)l` o2B&Sd"@  aA1[H׉HUpZNפ6 iT:T%2LP 2̿-ZzjAzE\>X~^;nϟgtC A=H$2GG18Djz{{\\gKRP^"BzHLL\z5.r{Ƕ ?)::z_*M˟vuK7z˖oM,7~ɓǽ ?&V9uɒ_QWED"*,b1#2,Jx`kdII - ꫬNbuƒÀ3n 3!g\))%8J$bH$"nna.5mP lRTUlbA~~OOJLLYU yQ}]`4X(,-ͽy'l.|2lOVRq%_#">-+6_x<|ugg{@UV'zD"tttrss+9994LbbМ|J$,+HE"Svv11Q*yBB!NpH#</J/`eeu/vL` #J {0:cIKHsrrKd0"P, $H$z.@)QOOoEL&{T,TjfpRo8mT"A'$\;~B5\@o/_ XY\n7H$YYHdc#OrK>(`!w_,lm1X,K]FT*5xqw{?M"ab1J% +3@$>;;Fk^(HJ:K"Qd[Xv &gWTWkMÃBܘM-mCÙVǒFÞB.<pᢘ+D#]l}뷛PBH((CC$< D@ %2l* EzSS?wdԩo133C4m4###Xd2,XrlK $$$̟?h67n +M9h/omŘ@_n>p8tVX>k㻻98{ݱ@U'<9Pѣ>ڵkC$RV^uGAa!7w-L&H0X ,<x[J #9(bdkQqݒΝKPΟ?S>|>X`9Ĭ\rh1Ν{QKKK@w^}}>Hӯ_^]]-H\\\0}8"~YHtȑءYN$y<ީS$\zk͚5111MMM|˺u?$(((::bAݹH*Hgm4H퍄B. *[K@+@:q \x+LG ?~nYb:)%¦yݵkCooo/J T-G˗7lڏ"hCCãG_w>qÇdw}jժgϞs <0_JDݎgJ}[HKѡ$;Ey==?#HPxyn9sfBBg]]D"׿⋚UT*ѣD__T*:tڵk%%%5kL4Iѱ PYYɅ >C~ڵϟgBcX'9gZ׮]?Tu۶m_;fcc`0-o/ܐEYYYvBMMz?Ix(11^|eqCb0P( tpOϋحHhp<{G>>>.]x yyy֭[LT*SRRBBB򪪪?^:ܸq 9?޻wQUU'J=r۷`DTf2k֬UVmڴB_SN%ɦAAA/  D`'Ňv[u;vX[[-麺d2Y"X[[[#pg_vS}e•į1ZI Bz H$gpI&ݿ?11$eee%''755 搐ssÇL0A!ӮfԩS*s''޾}{7n@?^fͣG]vԩ80Ἴ>쳾z"55uMOO]d 믿.((pppr]]]0]Q^3ܐ~~ %Yۭ_N9sm<==H?cn߾ Ԍx'~W)pDBUhkkUҥK>ãGjkkIxx_|eaaaj?:::gϞ5kVdddNNlijj$}gΜa0pI"hkkGDD̜9{ҥ2"O6 ZmݺCDTxLuttX,n/Jꚛ+L;::x??_M/H˗/d~~W&ƍ(r8ӿ]}tqqpXvڵknWdll\]]`(l djjVSSWT*-,,pfff_પ*1igq6H꠰uǎ"h񥥥J8DR׮]Xh޽{b?gݸq?;f[bJ}evI2/.\pA<onn4Dn@ XXX⎎(I:::&&&s8F6㝜ԯ>@033300HKKkmm511x<^[[ܜBtuu={ʪŅdB$ Juuu*m>/ttt,,,G`aHκFFF===5-LLL^N m(j~;; nCFnaN;::VVVjiiⴴ4CCJL-HRSS T*VG `4ٹxܸqMMMT*U$?JqI666 uʶ hL&Ȁ"ennޞKX,J%Hiiid2Ȩ322p8 fKn IDAT ɾ3GWfT  [IR F",YF)4nݚ_߰aCii_ )p͛gffv̙fGEEͅ>~`nnhmmJҤn'JT*677HҶnSZZZzzzx};99pnΝ;PKKKUhۇӧ_ b*++kjj444`yG"" `Xףdkkk* ךZ333l8W3kcMMMOOO6V__Ҷ(H0YuuueeeggCHҿ ,:,EU$˗/{{{_|̬V9)S|iii02 ߛ[n=|(00p̙{'ٖ-[^1:!zWp8]^^榫bF777==F&[rrF_ g<(xaH$r8^2T*õSTMr*S.+ U6sxyyy:::D"R===MMML&SOOF(666H$pP\"}bLOb+(ϟ/P9Nݻ8k֬wBCCbO>DK.-((|ʕ+շrǎ#񑑑ŋ-@ x{{[B {呋D"Q^c(ǰ `0&LXnx*Nmܸ d0L&ٹ1LťU]CC__ZKKJŸ=۰C&555|"hll`mDd2b9FSQQ㍍kkkuttuttzZ[[SUUwnNΞ)/s,L]'OY8~hj*9{?Is?ُO8s̴5foXVypZZpK_${r%$͚5+::Ԝ6mZ_BCCݻwmss&{{{81{˗wwwϛ7/..NMgam$)))ivd[}RRRO\bpp{,Ν{gz{{-r =|0>>1117C Wiʵ5d*8KpB8aeH .WWH$*FFFFrS}L$Ut]?lϦ-uŘfӻwZ{+,U?PP_hZSP,ʪr$98]N/L諔{_.xeZklKg|>TWSj|>s=AުsP1lٲ7*OoX"$$XlHHL&KOO'0ĉLfbb3g8 J†Ro߾q rqp>sCuA{=v 2K))`T*]Ʋ_eNӪp'/]i+$RȆV, pZB*:M̺E7TLygqQjo%ys rAKU-e塢9˖-/"44ܹsS@ [n]~p֭pÐ+N>}˗X,^reKKnȲF{,tL~oXZ,rgKkf@^X{N^.H2s*󻸢{ɹatźRE`,ӟ<&ѨNS&RO*]'FJvpSW/ $_ȹ$흶va?瘲ٖNX,*7k]_R5 +H$/Tpannr=`0&S&Q~DFFnܸ<<}d8H dpի׋/فA6d26UA#ϋڬ23KN}ΝR2cƌm۶!ilѣG###"##Ӡ)(t)P.]YWύn $Rf݆ҊuF1f[89,ٵx?|}'1v":=@$ܽS]4ԷrX4UvYyZd<3"Z 4=/Yڵk -,,v\׽o999ʫoo߾au 0*q *J˸ﶾ^m }$Ѩg¥/!V.x0 ] ?G'f9;744|tF|'F̅j8%ecq$*P_d宮CDZǭ5إ'p$܊5JEo7N b%p:;_?Vtg#eWƿz * 9V [Bԫ$$11?)JBAyYjd* P#PPPcw ?<5(ʨjee8L ~1NVVKSkIqK&ۯe:xōF5mnnnxa߾5k/I400ЀAD"Q[[[]]݀ï22(ٗ/WWʤ͛%"Q+zs7OGIk4eRiSaa--R`08<^j$!EliuVWWOuuddd*l I244455}ӧ޽C---ϟ?q!)700HJJz5#:JhhhݻW9뽼~ǏZ[[o߾]  V $JˑFYOY,#zCԏijzaSSD:x}--)))D"qQd$W,{};;;UȩKKnnnnii$IKKkfSWנk":!C$##O>lx|ggg~~ijgfee͚5kT% PTT|||/BgQQQvvvd2siXJihh|gǎ ߴi0se=RQQQ<={HEzsGSSLצ(ZZ 4__<ö62|ՀaUXymm-0b<aB{cގl! {BdMMɓZ Ľ/&>>Ŀ`0$)'4`JnssSNY*|ɓ*7'N$I[[:* - Bccc{bF䶶6ۻH$chee!0 |mmmfffбqGGG]]]? `LMMnݺ%H삂ݳS]]]}}}GGGe{4‚JB)===ʕb+ʋ2EEE>`0e=lhhp8, }Cd2Y^DBafffEE涭[44pjkSRR=<<_,dT*?0fqq3 I Hb`cco7.==LJ7gg7deԔuwwKR M]YY|>_"P(]]@6;`:"0Lg 99\.x𪪚{,6/1f|ǰ& EVT*266h+V>'0pҥ 6̞={ӦM 077/((?O{{~{w-;4&&&&&~ƍ7n|sssxիtMrrr*++MMM7mqƤ$SS%Kxzz}ʔ{$~ =&<6mڷ~[PPlɴܱcGnnX,љ7oQTTTLV~ddJ2'00Ycc#T+2ܗ X,L&D"M^Ox+>} jiiAby@T!F I0IEEEWW7$B>w}7-- &JN߼yNEEHRTHsܷoԩs򆆆ϟ>;vwq8mmNr;::_y{r8 99 677OHr|ÍijjVVV:99)T *WfKVVVccW\ikkKR-,,o„ vvvutt`DOoߞ0 kk7n۷zj mRobda2A417r劷o]]T*%SSa2Xp0̻K"QV킂J?~z=gddT9=2=== z F?N,ޖOr8,NeqaaOOOII cܸq2,..ǗǎxX,Ã`xzzZZZ6EQVVVQQfMMMٳgkjj;ٿWTT466:88XYYa0ϟ)v֦xbmmm77Yյ/f͚Wu7hc̄KKK91,,LH> Ch蘆` ة'ǎU={q6uvvhxx8MG^mD矕===KFrD\M,-555n޼IPLfjj*Hl I^^^\.7??Fκ~zbbe-Zںp׋D7nx< {{{Hs<K044P(8.//ёNw''˗l8ER Ƃ `nڴiӧOsͮTVM4I J%HG '`d2yڵȄ|`*20Bå~Q(> AAAFFF&Lغukmm-Sٳ0% vZQQQZZҥKMl[U,<=-rke˖F$O?#Zϙ#wk|2?OJJb٥̐dϟ?/mjr]] |~vv@ pqq---bȕ.P+ɼx|ӬYnn333[ZZ$$_}*Ɍ'L҂l߾ȑ#555'NH/p +0%6_JP^ ` NLCΝDI,89 mllXl_{GG$.Ž^RW-utMVGC!7@[[{ʔ)ś'Ri?xxxhkk766XXXL"+%LLLTV̀ E"Jݼys*b]gL&#4 e2B Qi[?uy#BQgm gE׭[,dݗէh.**jhhxKe2!'&RŋT$#,bzzzVZtiH`qczz:&MB|hll,f͚uܹ_(&$$l@d2Y]]ݙ3g+ZZZ)]]ݙ3g;w.66tɕL&sΜ9򕲰hiiϕ?C 핅` z0xblFKHH񚚚C-!Frl?gq IDAT#yQQ;vd`01d2)hΝ IdUb@Pn3*80|]]]]ehh`0%T*5006|>\d2 mmmۃNNNd2y!º$y厱$LT{omKn%xT(_sy(U @JsRc2X)lQÑUBlUrss9\'`0L*\㠭M Ryjjjk6~xwwwTjjj;|@`2pcKKD"kmmmlvXXX]]hoo755Kp8L&Άjkk'M[JO;n8d)S[[)/{T*_~}rr2͖JX,@__NWB1tl\(uqwwJxj<tHɓ'&$$h4777///)Jo! 6_qD6Lbbҝ>S///''UVo-ǎ0GXM޽ Eyܹ. Gy Frr!oT'11Q>CX,~ ^^^l-]]]*6d8\R*7{yyiiiݽ{{JJJO onnVxCtrܾʀBF//Ϳ$GGI&UUUҏ$z^$G/8L ,88Af[Vp,Z(::}c ((󢕄]}5qQP 2&8vXtt4eРdȕBCK CC?{lݺuVVV/~$ ###::z)jժ" LJNϘ1#55U4%%ePe Rh+ epaȕB% epG0qCA9=ɄN:{ 6;9= C4-**J$ƍҲزeKFFƶm=zQeee988L2zbΖJI> &O>=55sɒ%FFF!!!oߖߢ)/>> .c999񩩩t:?Ϟ={Šŋo޼Y,3iff&oΜ9auN3⮇%iܸqK,7o^RRҝ;w"""߹s>022()) ?_~yd27o, kxljj~z??۷:u+߹sƊ+`4Ĩ;wX5k֘ɅU8;;>}~<o݆K,tӧO/^z堼qÊ`~ׯ߿?11111… fffNNN˖-@8׮]4ir ;YP===q8F |͛2L&TTTw}wy2 x2+Vmmm Oz{{-[6c >P ~T]+J@ K,Ydə3g~y'OSN/W\0#}H]]ݍ7tAk׮XLf``PQ-g_zd F 9VO?ߟd>x…'O  'OTTT8;;D2bƌ?̍f/xʕ ~ݻw {zznܸqQxٳ===bx„ fff555 ... `˗Wٞ;wƍpy((uN?% n?~l2N߼ysƌH]]ݹs+?s㈈$J~ | Lvuu%x<Νh0ŋB|3mڴFFꫯnܸq%__߹sI(uN?uᖕu)6vyPPuN?d>cTPPA*._Ɔb)lpEu%)11q4@AyK@EI[vСgX 6F_jnW~9 ,Yu:ڭ:w;vAC?P((7e'&34gz#˥Kڏ2F@%!^<}p?5ڃ1;ѱePWF|-;;;>>J(18]D˲=5lٲEaV-IGKY{qU*((zӧOADDٳapp0HLHHP~E>rJ LI:;n:::@ YUkjjΝQYYY[[;R9+p…e˖"XP/TkH(5\lvyy9ZjK[nΟ??{m4)"UE(`@ 6DM,K[&F!hlTQiawebf, q^ܝ;wo̝9jaa1dȐ8GGǹsHr矋[^SS>$$$7o޴ lD[ٜ%S^rX!яB&Q[yT*9r)GFF^v...K,Aw@ ?k(O|||@@s&M,qBTN:vڜ۷K,QǘիW}GDJK3rTLiEKz-GԴO>Ǐ;vرc9D"Y|ynݢbPDѲ2Hw^_+WR&MunŋYRdŊbxڴiYYYwF}ߑ.CEYW p"Io1sZ1[X_XNΝ;o۷m+x ΝP]֮]ЦK,--̙zj>GYw}(I9HRBBFq۾}_{۷oo۶֭[555uuuVB٢$1%Kh;wD"Q@@ٳKJJPT<%|||t: 555ƍ>}: zjDD8kwVc(A̕7+bC&eA\Y9;v(..^b|I5J)ѣG 6221bŋ{r]\\O`0ӣ_z5pٳg7+A||;woܸqᄄy5]mףGk===>} ( bȑ{VV֑#G1cDEEǎ|х PD_lٲEtKbT*=zѣ?GAE}}}gϞ 033C˕)(D) ,jʍX,(ViKo#mI$xR! f|c$ 1󓒒 v oo[feexa +V Ņ-X`Æ iU#G JN>mggr<ps\H8p޽{8qA5["^i?tnZ1/hް|4HkڃX,{֭[t-F  ^zs133{(ʪUΞ=;cƌrf'}پ}1cΝ;t\lm+eOOO?srrp8W\9r .!tRG)K`ZE.wJ)z%_KP+nMR^&effYHA>b}۷UKLMMX*ϨQkz"hSy͝;wܹ)jRKөZjѭv4ی$UΜ94Fat-}Qk5Nq5֭ۑ#G/AZ\K4U%¦kBi*o}?P4 0w6G> \AhqӤ9Ą+  &$DVJT˅=zuQ ]Fkf$;;β ٥)%6#I99N `ejYT،$i14KYY3 $=Cp ՙf$``0ZYiFX0Lcdd4G`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0:$ C`I`0: v"HG^LzT&GٚaLY*n W54c>J&qgl,H-[5H$UTzLKPҀx=tĤQu绌6n̤TWV^8wH*"ihh}ԊLckf*ʴ^ F`Iz d[Ar~QJNNbҗڒ$[BP[6Ҹɓ2 j*W}V[*bĤO^BBwD]-%d3WO ]m@d2DBcqT JJJ( Q*cI}$}PTC;V~*I$7 #3CJ&T.oIV֧HދDJ2lٳgDzii)F1X7bқ=+"H$kw#=B^(~\VWQS>Ɔz4r9DIe~=^1}"St!XJLLLe{x܃E%rD"h$mT.;|`heHQ9;޸q#55U1]򲰀͠߼yٳ%/Ln,=84ʣG߿_WW(\d2=՚5Z#&}1{→R\.J2ohq.qVV֐_u.%mB&5662L bldT.MȤ{j~r(D"h49Y &׏ޗ5Jd**..fX-喾bPWktt]]Rrm!z*j-TUUD"d,-U߈\&Ò`Iz={cc'5UM 1ʥΝkhh BWhFٱ&|1PvGG??$R2ERbQQ|>_*H$He*Z@v9666|`0bxW 1#O=[_OoN& F̬1f%^r1{LW%-|6M&MMMD0Mo&%zPRRب׽{w}}}P(&݌b܂ǞzJ*JKK@"Szl} '''zTUUUVV`2 U>y0 49&Gb(*Jhn lIMX,&$`&zcIg!3Lthdd٧O,L%33XSSC3ϲ26(HFXZ1gvD\^qxkN"](zxxazz:ڰWkhpI/2ʯ*+y7f4{-6)/f1:㮝 y敕lZ\.oll$x<[,cS>tU4BR$ hzolTh/򬬬ryZZR.==W +PWWge>M&ӥ`Izx l$:|>_)\rI2 {doY")Ir 6$VK3rL&#֓RRinvN4S`IzwQ###Pr@(D"46L"8riii)ў%D"2Wbs/L.9G(O6` dCCCIsM/LnȤ[3"Z>s%$_@nֹ()N166K9=Ir2$L1Aq͓?oH$OH$FѣRjkk޽jXP'2[|;bg~L=zMMMrj^M%A$*c0CMi={Ughl-Vkyo )%-zMaX! IDATL& pRiYYU%988$%%%%%)&VyB P 􃑑F hͨE6=F޽{|\4_UU%f:qT*P%[[Y,LiYY!5з<ݝX5X*c%FI$$H,I~K]D,3ܼ,^">,WTTT__(L&jkkP+9}9ǓHtFҨLׂ;nOWX]Hvʼc!mfw)SD d*ַkCTuKػ yżƪV0 T> l}&G<*Lr *1җcf2qӬҌ db\.B[H>M~ԄgEEr)Q&ΪӅ&MtϿdZXXuY ?OMmmZZg#={?~w0% X0% X0% X0% X0% X0% X0% X0% X0% X0% X0% X0% X0% X0% X0% X0% ԦI `v) 杂6MlF C`04Lib^٬ E5#Iz ==,I S`:u;nPO،za043ʒbgp;;ΰ$8Rb3^RgayWiGTl6Lsgeg`0  F`t={t $?~K`0RBBBWۀ`0cI F M4m`0P$a0 gϞǏ$ C`I`0:7ooou.cٛ6m{bjdxL$B\z,[Lʙ3gЁvb0f$ ***Լ^.k8{,qL¨[zּ$a0~i `0:ZfݷCvܒ7lW^͛.]r޽{*.X/`N뒤E$---&&I+E.:4mڴvP}h%#ضm[[k1c-1bĈcǶv FwhKn#711[IDRqvzzzYa05k>$I.#>}!񱮮.44bȐ!qqqsuuuI$CN8]"<6sLggg*rssd333??SN}c0]~E@葊vu"L$EDD<|ԩS(qذa+W\z5L޹sgqq1J/***--;vݻwW^TD"Y|yzzzTT޽{O@r'OߺuK&i1GUIS?Cq' ƒ%Kh4SSSQT*=sL~~@ yʕT*5'''555''nݺUSSSWWj*fE"Q@@ٳKJJõ}L_u"[kku̙3;n333 E$?>xm۶ǟ>}N}c|}}gϞI$ҳgI!P F7iE(]t/ 奸lM7Qg)ߩS4ڎ=lHX,X,})P~z E511III𰴴 | Nyf~<)N\n~~>񱪪T[kE:srILVQ!Iرco߾sxW^4h̙3.P(֭ c2֭;y]dBvӺ$iQJQG&*Jdll,:h˗/'҉DTˢE+&\EFFi3wƒ"~~`Fݷz`0:$ C43~6:8)ŴeIbj^ٵLշәwv,Iwgc0IX!$a0K!$a0K!$a0K!$at-S(~嗛7onSL;wX"<<|ʔ)֭C=z4 yΝ Λ78qBCKR 6AAA=:sIҀɓ'GFFĠЃDEm6eʔS.[?VT׬YvލB6k-'TW%-0] [|k M6[U&eeeȼsNsׯ8qB7z'Ob+e'ROD'vd[lyqiiA!Zzurrm+V+ %{ իDdڄQu~G(ٳg/^˳~xϞ=NNN2?M6źPPPl6:;֬$I;w:ubzJr|>򊊊(//P(MNMMEz…bkkfff&LǏ3)SG ;nz":p22?h͙`Yza=͛7O:u߾}fڹs'%&&.>rHamm?eʔ>>>^*%:th̙Jk.\hcclٲ/222L&o۶mǎG0bĈ $*2dHUUU;>|"C=qDEEEvv6|2,,l֭B(n߾dӦMs9z( @JHHh5$$.ib_HtzF=[X0j_UU>oذ!**j^2006l؟)J\2~xyҥǎ߿ŋ?#b`hĉ eRѻw¸CY=,077177oՆ6K{3244?Mca_NJ:"s]eܾ֙6mرc,YR]] RxéSw'Ntҭ[zimmM\nbb2nܸQ DHЎ o$ϡCFj;w6׋/NGC1L&~Pԓ'O^pA,'%%A "?roD葱q7X`0_~~27DD"}_d2LxmtS[a~'0}1c Uruuh׮]H$@\ڵpJKK>|F^^^ccS굲"3dܸqs̱R111ܹs-NRcǎϟǏR[b1fWȷB#\(l&&&/=JPMM;@&c#[?X#D4G_D}4ܿN@Fƽ>}i6ڝё~!|,ݻһ N#""B./Yo\rD>|xȐ!\._7nHRmmm?sbpSM&Mj*Dw^N )bxʔ)R[naaa-\h.]J"~'O*ڳgO77ȑ#EEEvvv}544+Э[f'M4?"ƏD"zF8G)h\M"H$bP bqC3N&cdf qq'_ ro 5666ȑ^xu }dݺu...~aWi/{9~x:nh>u$ `0tT*J1LNh4:꾵^ N >çp8ȑV]bܾQYY9sL>1cA22ٙh(?P(:APJt6<_}UB Ng466Np |}Լ;t:rPQQlLkGVoRA{ mxO&\$:NGT*L\.RiTܹ膆^Eb9`ROuEd0&LAJd29$RL&5-!-Wxz]nܾ(~;;Ejll];G $$/^Oy^%$$lذ… (Q !쿲MD]o?8x_z& $JRD,rT*AbX$j,Jruuu5|>O$nmE*e2T*E R$bHHhe3tU&Q е;"Bرc̙r֭[(ošASi@%Id9?n%H(5JRqsDԴX{E"QC_ B4e5K$ #5Б׀6} S陘_Y朜_#VJ:t( u:8lذqƕ,3gl.\p>|D桇٣hߧϠ{tF92 @}Rg#= pxD{hu{Z5$d4P̃~"BG@11@Ka: } hid/F1qą [hZ)YIEwڙWgϞ]fgmm&| $ۣG-PKB_>}xX,vw|%1klB˭C5CB44w_O  JH,:+(Ҙ2CGn=(W3]pǏohh?0oA};y4`[.''G ufrFՙƫ ^,0h߀4?vF۔~{L>,mSŋ"NX R45J.N̺ ЙBY=:4sCquh+񗟟Fo#ĈӰ([$r<^ۨښ>j_mm5E#Nkps:g>9qBdAt:AJϲlDmpw̼Vxz)gPZ5Ԙސ>BW#4h2&h7tdP\zCNNLgkB  ![Exz V{a|dW#DFڄ3dLxJ@Lh:')/^ō9R kkk;vSNmݺ4~G*o߾m۶O(~۶mے%Kd ӵ43x̙1--D")F6nثWm۶/Dȑ#bF!xӣ_z5pٳg7P__QQQVVVQQQ~"D2{l__+H{kllݻ7HRGGuyx:88888X[[Ӈ|BDLHHظqqゃ\z֯_/ TTT`0d)'''ccwĄtO4J%>*p30 @t4".J9_fͽzqnMM޽{cnn~ul7BULƍfoo[feexztG[n 4T([,5-(00N#]biV/F8pΝ;̙#7|6Ջ-;v˗Æ C)nnnuuuR4::zСiammsq㆚ջhk׮&oUYYilllnn.Ui#G@PVZu3fDEE+f^~=˕d{2eJdd$J7n\bsss###Ν;yd K,H$|ҥK{1k֬֋-vFBwH$7|s۷{{{ϙۜ9svI&:orʙ3g$:99oٲebwO>bccO<ŋ ЋyQpXÇ5GDqF1i$P`bbDǏ m۶EΘX0j1sL8xǏBBHIIzjjj!C>Xϟ? 5kouֹs猌vu~G7nLMMmhhټyL|㏋?o4hPuGFF~`0,,,e˖6m]b֣,IILLlll 2eʸq҈$ȑ#ϷJHH?~YYYmllbbbrrr***ƌp{߿ݺu  P(6gbbl2LY}$a: PHRNzABZPPpa*}ʕ+枞ق)Slٲׯ_'ɨS6vX罹gP[[ cƌYx1QZee7E3$ ǏsΝc6Fsl?pʕgPwrݺu3bĈk׮^"&&4$$dСM몮>}4: #O?lٲE]@HY: LLpz&&55رc'NЊo"6:YKb:c mٳG+hٳgX`Ǵw_-Db J47 <==Nm*uU]U)vG{zTJzIvvvh 󱳳ӖCuWn#_` %)''Gi@/0rss թ8$!1OYYY+1zgK~7ۑ/`0V1L=yʝ;wwohO%#46-E-cIz'ŝP*dҧs>x(}G~#ɖloW i(ПWW7eg)f<>w{q8 1q{!Cg4 Ғu#/=СH"[hjvihD_ +놡1 % ɖH,JK^fQpme׮].\RCIKK{믿Ԅ7$XZ)C$)m6Q=c2m '\<_QRlۥ@Nu805-9xgkOlZKPFLLPJ |swZXz cF"ث=wmo93fdֱǏmϐaf2lK'O?akb̞;a*hhllBG"TD"HT*M^$jϣ`׮]D`H999͛7---l6e,,, 8w\WWxҥKVVV>>>spphZ rssd333?? 2###>|XRRbll֔r5nW.߰4ڇOH~r DM3;{ n-J;#3⚊WPQTrlp*XT^֮%M-{'OSz2JCT*M,!w*x\SS3nܸӧsЫWFDD cɒ%4mC|?NG8d 8NBBҚr֭UVh$IDEEEǏONNrl6UtR^HdL&+{G/- H/d?N\.p‰ dܹ}v+ B[*__ayի.қV1XL@MQofed29rz}%"c3sfkv".A f2 TJLZ#RTJN˭kvX&I$RQQQvv6(56ӨǡP(ӷp8X={RD'N}ǏnرUtX=F&z=ܳr{8ȥ qD&[>z||FrچJY~a_8s聼􇷯_gnY8w/E%kOS}Vn=de`P Z LId2Y**^S%IϞ='Lp…Eڦ9(!!{9992,88XUWW9sQÆ kSi&&&)))BPq+HOO葽ejjjuu!S%y0'%~f>fB-]; `Ԑ1$ %\ )?vm^ %\ iB~[Q1woXE-Zl2GG˗/3 '''?5ҥKuuu .8qrœ94b_[KP(֭;vlttSSSݛIJJZv-[>3 ]@1iii  :of]G(,,GoR)LDbX$ BP jkkxzUQ%7 ;;XIo/555iiiMCGw( 7Q1j`gg.JZ O3ܦ1-w({iitz vvOX,F>#_[zDŽKƴ ̓0 fA萘d11Po5a*ept.DB!/TsLI$1޹S:B~EFlzz  &tKT %7d!TcP ;:BGd֠nz@RPT*R4og7$+TUU`0xIXi(Iz =,I]Eu܈vN|4ڿSbn":)-9nݾ}tܓq.D"HDӕW11{C:ć7W".Y%L萎ٵvOŋocnAɿSKVB ^}4* o6m]MI+ᓑCYHә{J[qCw*-i%[>+lih(Z.Wy/6l\rfgg骷f@󩒁`oL"ŋJ @C&quuUZgocZ%cT׸a0{Iٸq۷ꂃRkx+++7nܘG"|||MֳgO,,XPXXH]\\"""飕 fͪOLŒ1K´LzuuuӦM4h:{=ѣG߽{w.-ou!.1Ui/ٳg.]n={|rԨQ־ Zd6oaZ'))ٳgŋW<Դžz?GI&ie۷/77ϟ뷿X3f/cƌiJO7lֻwouoiFM3ΝEl|ß={\.&L$ݻwMМ uMb;9z(غuV$Ο?R"IO>MLL޽ Ə5aooooo(}g.R||wQG@m9h ??O{흝SRRFN%'';99il;*I2L?:;;رcQ2Vooݺ5sV3  D>}:<\,-N%gNգF4 M5r1cL֦kUN[@L:u߾} D"pԩS53zIFU:żdffI @t|||Կ6!!񊶚BpK,;v,p53%Ih(GBB&խ[˗/{zz^rEq3͐JSL;v9sk.鸍1ƌ J&MnS!N*++Iopvv^bEUUU9srrH$U5&v޽|ÇO:Yͫ95qÇ7ޙ5}q|I Pn-֋V2 GJ<(rT eZ;V*UkţV(ĈxHA:(sD훗"w~a B3WOJJP(˗/ U F?B" $$f&&&ʪw8꠮իWwyEEQ]]u]G⏉IAAA111iiiϞ=9rw]]@xx͕͛z N{&$$DBIMM=sLkk+F[hBH__?%%eȑ{133#L&o۶R;wnsa2B,QUUAKkk+^–Ǐ{{{ґ>(PbhaT\\,d?(idㅊ9;; "ZJ`wppppptL.YXX.j"|}}}}}[%/_O>DU p>bF##@[>h ؽ8T*u999E.[QQ6bĈgϞ!ڎ;`QFtuu=~800Pݻwt:fdd-@o߾r...˖-9rӧ焄*fdd#3 I#v`  2j( .O6a9Ν;V*))9x_~ijj*T%%%555˥GR| H~~~---;w$ %%%q RIDAT+//oiiIMM#y=*A+!G2ޤ$I/^[UUUSS)Tb zb}UQQǏ_aÆȒP\ufJ\jR S$Y[[# x#SSׯ_SʇRtҤu577c{GG4 RIpTF}} 6P(̙3a„{nnnL&B谾>"LMMݻKm۶{zz>}UIg$,m|%k֬rāq֭[G>}rBߺukEEEzzr9FVVR_4){FIYԱ  I$|O^zcǎ'OJB\۷B'O^?Je0SLyٳ 'IHd'J.\N#h4ZMM;}$|}||T에+T(#$)88XpS;NBcooy*++w?|>uiJմiB'N300prrK}}=N|rY)?ҥKnnnY:J=KܹsK,qy搐)۷ogC;wnee%*++;t萑ܮ_v>%EWԈJNцXRufiiiBPHL:tt:1**J1# 2l0Bzl[[ۈ'Nxyy 5''g޽&gU HI#DP8 4-,,z#Νkhhïl%+00ɓ'xx|ÇUWW8qbɒ%3f̸tرcq#-hllX0mNj l6 \_ӧO{zz&MhѢ7o,ZՕb=zݺuٵ_|ELLhvvv%{R={dgg{zz&&&*\Roڴ駟~>:2 }Q1445kڵk;3$wo HҒ-L.**q&[6pB##Lk<..7oNNN ltԩSY,փBG>|8v`ƌ!lG=;44ۿbR!/_{nuu5BQR1MMMuuu!e˖D"޽ ӧ/^ppp0771bٳgv h/v?@ll,HKKqF= Q%KLvttxbx2EP&N'SwUO1uT'';wH/imm™(5qdҥgΜX$e9:::uuu\"688X~{>P(Kee2R !===*:e#0DJKKÃg ! F}}}gg'B ܹs-++޿Gq8T^|I~Jk~xbqqXsŲ ''''&&:t(<<\R&Saff_^ L&Slycc->>"B!<<<<<i$Yr zW幸ܹرcŦÇS(I7BLKKMMM-,,/k[nmذAgdٽ=a0χUcv7-0~$mfE$D^d$ PI@$@ @>YYY?eTr)-u8 &`?ϒ9-۰w-"&^wG(ULټbbdcT BcJV+.ir QRV7M&FvF knT(27{Zp/` I@$@ @  I$H$ p8[YYwGO}Gd7Bq]Qm k zL(]JV+[d{AwXw|inߏ   I pPM- V]lӔ1Qv)Y$#iJWL.4y7+7UXcw#B d!Q$ I@$@ @  I$H$ Wpm; ѐ B=77mxI@$@ ,@p&IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/uioscil.png000066400000000000000000001125031247673406200252530ustar00rootroot00000000000000PNG  IHDRS_0sBITO pHYsu IDATxyxUO:['!KI$]cE_ɀ J؜eUD^fP#3 d}Gd0Y bZUU<<<:έ{Թnydeebm@te ߩ!%%ʯ ]Q\d N8aW3щM`rq ~;@te ( D'nGrrr||E 8oP]]iӦǏߺuӳUVO=?)aK.ݵkWV>3y-͙={6:whhhΝ'LЪU+`r1NMqq믿믿^/))9w}rJVkδ4^ȟ6 \FӺu늊w޽{z…r :Q4˖-cɨQ6mtk׮}3f s}ϟ/,, 5kVhh^?pW_}u֭֭[Ϝ93::zҤI7oLLL3gM֮]y޽Fum„ M68q׉֭[D4gΜDN{ݻwGDDL8CL[rr2uV"vp/4hfZz͛9r{,wd@۝;wue͚5b@PPжm۸?_FU\\4uT"z322:v'onaȐ!mڴohȑ={s@t\***rrrE,!9s9rロ1cN[x۷;t믇~AhhhZZƍHѴj_t~i߾}׮]OË}||É($$RSSKgqqѣGO8jժN:q:BCC%:T߻w<<<JKÒ裏6oެh 233O:nݺPxxxXӈtFӮ]W^:88811$c@ :Q.lo߾J//޽{geeTVV޾}ko@@ݻw "ٳܹs5jt 6;!!!gΜׯ߸qfu'M6]z5۸`ǎD4dȐٳgM}رDP#NM۶m۶m{^xq:t:tO?kԨ ̙>p;wC]vO{{{7mڴG?f[#[ VwRSSsm^suKyfח.]jhq5ռys" #+WT~ D'ʥM6lѣӦMcuuu6> ^tȑ#Gaֳ֩z=hР+W2IDbfN^:y/۷oܸq;uذaCO"X"((h׮] ۷oncLJbP)xxU. _~enݺ~EˉeP+**Fx;wvؑ:ԡCعsgqq1=9̙3EEEDh3+4y&""99s-HPz^'2ڑ-9Ol0)VWv5g whx㍫W;vꫯ!ɓ'ѽ{Ə߮]M1A 7n Y:RVu'|mXRxd!JD~ 7T±,d!k;ʹi|ֈ9",dm*1wb7#e՟;z\fR+!f,d]I֙=ڷ[%+Bk㑕ewjjڵkO8uVy3k0#t Šw %TV~! Yd ]ڵk7n/d! Y~,jΝ*֛Khg;85ƹ%Yg"f|zJ;ΐ+ڋҾy70qk0Hő(g#>8g+a|';*e%͉cf2%QqcԝH7+B ;*%tl6XY-c,>hQoAZsY*M^\7wb*_6R$ΝIT\ YȪ5w8a]}(Bȝ`u)K{~Q-z:_*Y֙(oXWsY*M^;wKkEN[kDq}/d)뾹13d!J;ONKkآ9|[ߒ,)mT6j!_֙o?†~C UPODGJK$:=#5!Y5N7LO]r')))Yqѓc_TGJ>PڬƸeúO! wlJ)ڀ,dE #lNz-H12fs'#Lxŋ:@$( D'PN,lT; 0z )ȝ@Y88: РAB E hhP;@teac&{TLٙ7Pqz"l{?#!+bQ@4(D@ !NO0Fq BF1\'L v(6.a ԝjP䰐u'РH  jp(Jh 4(D8kq N -VpeDЄPwK$ԝ #q@ 4(R\3o`pId7@YLdn0=.z+qAt`䏔b΄KMx\N?F #T%r;Ej Q u'Р  %JhF1&3PwPz"UUs9Ǩ;8~ҏhP p! "kQw  `+9Bl0\u'M&[#-O˴_6 {"!{z&M/ cg!NOٟ~ѣ˹?2ŰId7%4i`OZ@~y hp Pّ68odYu'HQzKLu'd7@~WV8%4Avնn0 JDž_"W m|'(If=@-}#O"d7u'(]$B NAd7@m,%¡(Р  g1QC+u'(=B ̂#F=PzPrd;@A8UIu'A-Q ԝ@24n5uJhCQBA!d7@j v~(Gap;@8!2Z%  2dBA rL%PwOT2xԝ@"5n4.(E hLWk+~Pw; Ke%  2 K @ NE^%UTLqܤPw  bܭp8Jh 4(D`cWp.\cjBaD'8&(=@*!.!QwcQZ$qN z5ԝ@24Hm=93VI48%4AvL4aaB BF1gӇ –r2헅 d'a{q+g49m0 6qk6(_"Xt~9v=G.// nA:Xhž`&mDsL0( @D2enGOiu'@Mp(vW1ě&(nL.QhPHP`~"4(D9U%Gq:`=P$x5@_D'@ZhlDrUi0NK4Pw Aq 4JmPBA!eYLd?i1 [;HvЋ` :J!cԞVqA PBe]. ;qH>ONAbބ4ꥊirQBA!`d? \0[33.5=ADE :@-i'qz"Jp%׆H K$u'@~_N3.y#Q;jqH;ONA, k##e? P@hP_Ξ)64 !88:*R%$:Y\%@ȃZҭ.\PoA G%&>ξㆺ@ܤN5&nm^;`qFB48%4AWrgisscd8<`4D'IĭPL!nܰ5Pԝg}ڎV \NN-"TVe lo@ٸ DNSQdq UؠDLV$dOT=LvX~#=S.S^N R:c4IU퉰d# `r \eokiSwb)0 fcD=GspZa\.Pw‚ & u'iDiH}.w `GyM)hp(Jh 4(@4 Q $F<pziD)K % Mb,(=  FXqmztdPwNA5xe# BB `D=Mp+ NHEوd1 @Du8k;;PfhbyPh2A@ e& 6%4+ԝ ej;kM0c58%4A,&l48ԝ"wo'%?;P-_-v* zJL\ G ԝ(4)ĎNAz (wAJ E )4H RjFvmʾϣ~`8@<(1A B7IG 0 JLԝ@l$,Dd@ UwQ` kΠGWB}10Y79c@ 5x\;xBNN>J nEeOϤir'Z0 y W.~7E'>bZD !彈ABDp! 2%T WհV$8(X{ &.JO!(zfq%GAY%֯ ԝ c@FD0߉ ߯{VM0o48%455J^n+ q P2;%b8؇+u' 9}˷K~$e7$P@ x(GVn4[!;3.@| PN[Z8%@Dbn I@݉ o u' A 6$ E Tif 4H>=(Ng,xTySp}u'Q9pUAtbU$HUa$A .JCڻN~;T' p;Q K2ycTw/w6} lR-!nEBLڐ= ^KC;I˪[ߺzp _!I8`Y5 4=TYgܟtbWk!`g sLz:I@p .9#~Ùk l^" H%%0M `(!;q]>Gȅku'N}iNzߡ;M^e? jp(Jh4H~í4Hju4xrxLD*BMNrWI4YM@VܱD |6(ԝ8tyXĚ{B̨  58%4й4  !Ȏ&6QI@KURcYiF)O+!pe#P,=u'b@g..N~S&#chpJhc4˗(N  !Ȏ49ev҂qUrJ3J> IDAT·AO@(YwlZnNq p7PwbC6 ,B5@(WrM 5n4 k;Vwl@vHuٻTt / Z 5"u'qQwb  K՝Up+khPCQB~%5  j(F ȗ ]w ] Hq.~.a 2MǭHfl q ηLlU| Y%@*/y S{F]^^)L)MN16@ :PߐD+1 `Ra՝`4 p>8 E'W;Ah\ݞg%؁َme5n4۳2( `C#;xv88=% #JNVG4-{% ;A ?d ҴHEN `d  )1QA% jGvp681 N0p68_QV ŕN2 Zwb>4QP4HAvAI; G6,&=MAvAB BP&| *B.PdP2ם e:Nd Rn /2hD@D JLd7YFv@pq+h< * 488=eOτ@PwmgyTwb0:۠A@1p)LdhP !8od H+x{qRU,@Z0 9E'\>;V$dO$Gگ˰AHܵĉ9mH 8ͫMs8T_`Cû]#=S.XUTAvA Gy iuxydhP Za-Efq{OpP&F .p|'Uai .@pXN~y $  •= 4HAvA.S.8ɢ'8iN>i~v[\j;y $  ]  !nHQdFp֫`4 % v|mκ&3";A\aZ&}݉D ]Р  j(Р  i4"xdY}{x",:sr[w_w`H? v hhP?tJh 4(D@`{d9 e @(H[!rXC ]Р  jp(Jh 4(D@@ #;ٱQ[^^.Y ,_sԩr\n4$$]v:.""b]v{7tAB7MfffVV-m0w\"z'htU&h2~x"ڸq# FwvrZ"z76Nl"T9RG\s "JIz_;5DuE"sݺu*aRzfpErI{q?%&N;M*Q@+U^r;uNψ$ A|p ZBEE̮߿L #q]u랗.nذ1-ns߾OY"[t%p Vz08t:m=/CBrr룣{:@Q-gT %B,\O8|xKmrs1 mx GDjjmTSSBDCʆxx8% }ݻ8[x[~ Kpw>/KJ(&3zyyݻnݺ m6?Smm#G7oW$G#K;u޺ucZ H@l22}׬vZ[:u.2}7:yg6mڤhhϞ=K,1cƨQ_$҆ QΝL.//B.gwN:]|A;K.-^jĈ/*z=ŠLweVk<008 we}t;~\uuV=q+;+jK޽轈?fGYŋ؀sx{x{Z_ee)}NWYY#H},q[ѭ[Ԍ9rȐ!DaoovڵmۖGi~l|shAPHe2a+xvgY[vؑ~ءCoPR*^Z.4QǎΟfP*++/^1vرDԬY˗:p-[t޽pȐ!,:^bŲe|||f͚խ[>h)))/XO[sg}m۶fZl0dee-Zh͛/֭?>}ɓ'ׯ_W_l2))iʔ)ZO>,;riӦ1 <̆ /^ꫯ1++l"mhR]]}X"xNe:{dq,:bȑF.**u{pK. rvqC%Ejkk{0A=zD?~*wZtt%K,/??oV%۷ٲa}MNN.))پ}#G֭[k\_Є{ҥ?7 Z}cxyy}g:.++kܹF͛-v͛1N:եKMQ~>ֵkW6ji,s;vl۶m3g+RVV6,67}CWVVn߾}:Nן>} Fi@DǬlֽp"2Drˇ0L0N<_ZZBDbg֭{MLLSt?C t ,Xxqv>SyO<믿4h# .,,6mڦM<<<,Y;4o͛/^zfrͪ~?;v֎1iӦ~׿N4֭FO>lذ"vکS͛gcUW^2߮]:T[JkIE%8liX݉5c=NDQQQ.\(--{&۷oG6ѣGSSS6m̘1cҤIb*D`vvuf͚t:>ϸǏ7!Uʑ#G a磻F.Μy9 ve_6]x 7--m?34ʽ O"##W\isKMD̆g%"6ӠYAy4Ѐ,ӵ8wIOHY""~j*.!OOϧz*###++룏>⢓3g555C pYB~}w#Fؽ{ҥK∨I&aaa/__-Z~~AA& `ժU>>>gfӇܹg۬\rҤIuuuK.=wn޼y޽E*;Xa.+RRR$NT准'Ϗ-xzzԐpgXg7}ӫan͌ɓ'_reɡ.\zHjgӦMDf'T7>J--> #G6o|4;ljp jՈ[#!رc= M:ԧO^F?1q-Z࢓^z޹sG:th…AAAk֬8y#8=YAo?~<3)))%%eѢEwIKKkժU||+WLٖ7nl۶>+n[\|/43Fq=??k/-{&kp$jU3lذӧիAūVJMM ۻww}G"ƛ?~mڴiٲ%{` 40C˖-YifԨQ[h4 yEqONC:v/ha{~nX0vw"泬oӳgOSgg%*5Q8ah}׌?CΝ͛Ǫ9LI.\8wܵk׎?>**ƍ%%%Ν{'_|EҰ/'Oo^^^^^^UUUܹsСoѪU/~_~͛Mo+Vر͋8/Vכׯ}MX۵k7}tr…}YppF?5kSN]dIMM͘1c#krr7F0=FYƍ{'((믿NKK[l3yd۶mgLi߾}PPЇ~ȪO83iҤ˗/DFFzxxx{{7C p?###mn?ym׮+** @D_|xذa#Wˍ01e}???Sgg[>>>DUm̈Cn۶ZOOONJ5'w߿O>䓆0mS=fiܸ1Ž DDO?Emݿ_w$zjꌌ-[lܸ1337ؽ{7階Ι3'888;;;''q:tf @"('2%o69"A]]PK6mc\2++kٲe7¤I555a*KMRҨkjUź'gCyyYl옳gQϞs@{m2#RIѶm; 7Yd׮]FkdDtRN_pQdDDĎnjc<|^x5۷26Ẻ!/0(ݻwFCHe\9/O,s&N{n$=Nw2}wԞ&D UWWսK/RQQc=S]]c:Ns?QQQgϞ Tv]φ!a:!!!;\QPPpu.4K.=v؊+yh4Uѽll(߿A]](#>>{Ʀlⴒ;3zJu;]XXV2Y~D6}˖ Qs~ǎѣݻe˖v[ qQQ=/]:MDUUZm.CWE[nsĈ/_~|}}ݻGI s]v_?ADƍc6[ 4{lfZ̙3}KDO~.ZO>aaa.]ڻwO/~+**]FD 6SrAD/Zm``07(+{@D\hRYYi^1 X鴬#/4`J(ˤZ U|xĉ'N$ҸqכW s^~_z ǽsƧD1xwӸqѣG䰩^{iӦqR6 ЩS'//:[$..N U8PQQa}l+ ZOOϏ?cǎk֬)==MHNNNNNiDtzeS\t``0H8t IDAT<(%݇:vQEUف*,"#P2jq̿]tpR>c2| 1ɔ8ittt[`(7f_5e6#bٳg[ɴTl|ϯ-b1kF'L[9SY LToQ>}޽>8[9:fݲe%BX޽i\%. l4g޴UYn F'Jz2ܵqht_Ttfs%ܻ9:pD vh spqf1TڬrS P)))^TipP7Ra>:A  Tx}3D'PxgG吒. XNщBAINNt N8 U5 \N fP#tpBΠ1<)@ ( whrrQs~ǝ#Q:zɖp( Z9e@ lk>9L݉r Jƛo) ٲe&<~?|}5~Ԕ+S(:UΠSOQtt/}%TN,%ac;1*QEEg Xkݺ޽iDҐg /JLwZF3()~KJOѽl@ U)>[ _t+WwNIH)^!H8!vcDt͛7lgHǭ;_/^<:ѣ_6itЁD/~}>%%EDޛD2xA"}m@ U)E=[_` ׈("g ,b+%cBD>>~ѢEgy߷)yf/[ '͇‹c!=ED=ʕ.˲$88D5 h]3ٻwi^z &?Í`6Q`T?s't;w _^z饠]v7JKK{VZ}g/Q]vy9Ұa?'NڵZoooAҥKfffRRN+---//gǩS oE> :sν;چ fֶ͚m[j޽ilAslo糳7TVVZzJ6!twyp꯾uz^h=K( @hew><;{+lPKeeeݽ{׾fO;9ry鱎COȇK.QssiG\@l";mt:DʾkV vfQNݭ #6oQϞ=Ǎ_ǔHDׯ ho׏󡢢bu~3ftuĉΝ۱cGAA??d̙߆ Z,\z5qiTsS116cIT[袢ӧw/SZw'NHHHq[ѭ[Ԍ9rȐ!Daoov%EЀDԯߣT``06>{vOaa+Pv %rs5iҴo $Pu̚54000)))66LNi׶ϯHl_g:˗?~cƌ/+WXb̘1)))[l1 K_{#F$&&Κ5kVTO>5jܹs\"TMڵkDEL$GiӦK/$Tyƍ=== ~Ν;GEE]pʕ+۷>vX >5kְ ƍ֭+,,tϽ߿k׮ ,ܿgf͚wޤ$ιgee5SNͻ{.۲>--&L0 KЄ~Lj=TVV* uh=EY;vرcg̘av7kl'NKKK{뭷VZUVVv)"{.]j%4!I S@ؠA v-iPMGdɒ80##9WXo7o.((裏ϟ?_N񿇿mFk׎;[``M戊 y/_VZ}ݴ |Ddip5B3Z'Nرg6mڝ;wXڹnΜ9 61cƥKVZ?bC~EDDxxxl߾}ŊO;wرcwm۶9s+eeeb츸ӧggg:tr۷otzfc,#'h_hR[[{skϞ8P-6\="Չ?[v̙9sQMMMPPPxxxF:w6 0B3h֎Sft *>FEEQw2ر͛7ٓ4ԩS]tiڴ)aaa]vmҤ qqB4ta҅q"^N]~=''gƌ3gҥ ++n˳kȰxzzt:^^^DcyxxZx#|I$"RHJJdHiӦ guu>,zYvNc޴mի|||<=4M}}]mmmMMuUTF"έ)** ).4B):\t:F)N߾}V^?s+4{ ևLqBd'WhOhw@@L׮6x.ߛ)KDcXdWM޲ewp֭ovɒ% 4xy޽1cƤ.\Cb賆:}tA9hʸHaaװaÒ)bu4?ZE/^֪U+Kߤ$??7JNN^ɺ;(('ׯ7nn6u=cG`` ի/^$۷o R%4@)3xPW *--jhWQmms碣ݻw[nݠA;wCQݙq띝Ǐ|'4h;w~h߾}Ϝ9STTDDoԨѩSbbb7o~/6@_[[{aҬ*S.\جY7k,222==6aׯ޹sg&M^|EI2ڷo_ZZOsVVVѕ+W֬YըQ#K .ϬW-0ƍ{04((믿NKK[l32wڵv)S0{c]~W^"uR[[CTō{zzVVVTUUUTy{߅Fy'Mԭ[S;[nv횏ϴiZn-H$g싑vjֳXVifgv9f͚شYfF/[N:.3 $''oh4XP:u/=V ' FC3^r<41 nN<]b;wa"tnFQWWgz3գG`C~~~;?b<&wmĉ}!"OOϜ7zyyEGG[رe˖III xܘ6YUl2,,lϞ=}yWiiu֮]k>>>ꫯj. %"F7pFo5k>`ƍ+///ÄO?ͅDHnSr4nhƎo;FڰaCaa?/^/y6Ul4.7}޽k#,,̰=lQ2O>O>ibٻ$yTE,:MDpi;w63ƙU맺8 zJ6mmЦD3:٘.m۶˗/7\STTdzp0:7nhժYTrɮh1vt;|Íe111iifF"#####MfVu֬Yl*`kwͺaqonݺ-X`ݺu۶m';!"JӲI|7c+*ʈ쁷ٳ{^޻7 S2 VeodX:>>4}XպuO-akVecΞCDݻg"Of2ʖ1)"ڶm?":Ed#knݺh"3a;HLjN*ׯ_~lo'STωy>p=dZ:>>]v2ؘݪ 6r[l1M8n_zJug1zqDw#+g9q#ZAЪUO>>Y'msٳg[N(1":E|ِ-[='n$"Zٝ+{.=ǷUޗ.߽{gh"ʊqD)3=ׯ4epF"굲)LJJ& "ltW#i?zKQ=QcDtidqV<rv__?"!э^͕-b")~7įU). u22Ξ`֔7|SΈPc?=|GG;]YYYYYf ---f?UVV\YA2?eT KEAPw޺uQ8,8:INNDkzGCid'Þ̢{ŋ ~zGCid'b.'c eJSPWs:_pN"@u7pU bKjj&Q ))),9 P53R @M|fk^211ڵk_}͛[ZZvGI$9r;n޼9l0f+fΝ;v>|Ǐw :q^^^~~~SSSEEEyyT*ׯ￿@=88;tP$BHaa;!dϟ2eGI~;),,;v !NNNo)//?ydbbL&[jU}}T*uqq1 ɘbёyR5=@$V#!wзo߾'2ghD_~iiicǎߴ^ONN!mlŊ~~~-[3/}0,,?&?СC޽{7omߞ{ꫯTm۶zxxoUJ_ꩧ};v[WZW*f򷣬4nXY^4VҸ!C(d%P7R(늛uww+LYW ]].e]quS7+(_#(e]qYOOOÒ6mxj+ 7mZ9%%yfxl/E"ѣGǓ&M4i!h̙3; K/Ll祗^$ܽ{>+ɢ=<<-MT^)O|2dΜ9r<$$k1ct:mپ|^l… Y©+W3gΝ;%ܺ4֚*UT IDATi=4e*Ui,Jce+jוJ+nkוɭPUk{HSW,}]qu7K_WWLu7kMR7+FPx{{= UTTaÆ{W{R۷nݺǏYbccf͚ѣG8q//3{˗z}vvvFFFPPвeko...~WxgС+ y#!7n`f31~" B'5;F+dH_WYXk+,ߺ2ΊD"^ue={,e8kggǫ7o$uzEΞ=Ke)늛5,E7͊\v-!޳ٻwolllVVVnn.}033NGc:\IyCgdƌRũ˖-  ޹sݻI?u:]mmѣ;2/4^,X&H%pqפ+VW]ꊕUW&2u+VW]^^uw Yf KxC/IEE3̅єk666wenO-))߿?Ӄz{naaԩS/6kSQQ?///{{{gggH>77wԩ. '(J^/d2P(ljjjژeddL0צY1n8XuF#4֚zX٪*JceyU+[QQA_i,JU+Uieq7{e]qBٚʺf늛>e]queLYW,}]quL+Gu2rKxs?/((={{ .]"_Q\\ɓNNN_>8zhSSSTTܹsYfĈQQQ?|yyysssbb544|嗇h4͋ BA@@ŋSSS/^l7|?lذc ):u*))YYY#FūW5kae˖͝;~o7n܉'xM2x3_ƃo|̧6쮭]bg}\SSRboan߾MYx={L~=2_@v=ggg枰%z>z?CV;B޽iӦ?x !!N4 &%%1 װWVV2WE1Mx&%%-[sw @&v:99%$$|L0A(2w]·9rȑ#Ϝ!H$7w6ׂJ ,̃vAYd]x\޻YkͶLTz{{ꢢ"oqtt4FN6ʢXFF!}{EYd{Q6##,钓Ozyy}zСC~~~w±0̵P 5S8v`:8c'֦{9r=f;*mޫ}0 UiLJ7ܱ0, ,N;˂YVE./ @w`m᪜.˅ ZQ|||7>N\]]ݬY!k„ ˖-f"6l.>>{9sLHHHYYٛohۗhggk׮ǫX&l @/,Z /oB333CBBK|reeƍ !*ib8==2NhO2dH\\\JJJzz)SƌӎAZZZt:P(T*Vھ}aeV۾]ŬX>A*FEE:nϞ=gΜQ999'N4\.u֍7! k @XTTtʕqƵڑ#G222ǎ?L2%""#Hu֌۷oK$5kָo'-;a݅WP( ?Jyyyݵ_geRR[Ç?M6٥G 7;!ǶBBHiiideeu- `Iױy'eeeO @f|XBsGFFW\\\OBGYtwcG111rME,;y dX2-sEE;ill$`TJy,VrrrOB 3]YӄN\c`a_۝Nk}v'Rwzv's7;Vv X,b, PkYpϡ(Ξ:")r ݶ]dE۲/̲,酯S(Sn2>ܻIiiitŵ9." ־'*F^:/9,Zgv*++z]dEYd^ bM~~~dddYYGG.W*_5kV2~g&u汓ׯ?eΙP(#olYdl||\.;Y _#d{KN8177wɒ%fF0_Ϟ=rz^/vGw\c櫆tOG,v]6##o,酯:|ƍ]v_Н9sbxÆ ^vw}}1c^|?x !!! `ٲe~:GG燅UWWkcƌzWws吐3f$%%iZf6G&8]u} {֗Nr֭[O?to+**bbbU*ՙ3g/^C77_7KJJ%K|WB;Q(=rSG,v<+l0Io}Yz달%gssscbb!O?tnnKOUvuu!gffN0hb8==y^WW}|wͭ;J]7xmYdx622rM'ugz달Ee%??7o """""°Z(nڴxK.]yl荲 +2YBHJJ xժUHdJW~","ۥYS^cVWWlG1+1MO+NKBBE]vy d}Ĩ袑qfjtv׮]>}+$;GG'S;..%82D"aeD6"H( Z-JR٬VjkkݨQ~bd(B---*UرӘER)Z?T*%@46>2j O;qd;B\ !MMXbggϺR$("ao0WOK1sô97r:}d"*i$[XF yjPoc#nnnH$̍bO_afdO>2 k#*.TzDH$DV ZbmH$*悚K躑N9,l||\.G&Kz달fFXP_Olmm^-I3sam)"E32!dܸgG6=+6##E>D2__d-6+W---*fذĨ !Ʒ!9A32|G&8`^RBt:;f3՘u`23B'O bK f#LU~df^#t'VO(TtvCWaXFFw`ȸW,Xt'VzٲeDFFFN7^pfX,>zhj}ݒz_[~}]]´Z;***4͒%KË233>|dɒ67Q]]vZoo1c0[?RCI$y}'G}tҥov˖-4Xҧz?3JJJbwIIիW׮]K[;Z'OLLLdV;vg}Ϙ1_~^^^۷o7DZmêT*N' K,WN9r˗޽OR6Xsi4ӧOO8ѣG2%%%Jӧϟ?r֭[7n 444ܻwf+gΜQ999'N vkjjΝ;F HOO 8~QX8v`=gM2%""B">}~%$$D[fddܾ}["Y9AV~ᇔf+Wf,X! --N"O:!N_|Zi&֒p!;;B!kI&M4x\.e8p}y Нnnn)))] =  5P(=  @_PP{љ0, ,N;˂YVE..!...>> NMogv;˂3;}^?uD"ѣW\O̚5#55 @_;v&,,ʕ+?O>Znl̙w)//'.Zť @UUU/ 6lNNN---iii ,` 8pҤI^^^˗/!|w2eٳ%IQO<񄿿iiٳ=z922:s̹sRfE"۳333kkk:1t'}L&۰awKB nj3f̘5ktaV,X;*qqq= .teAw Xt'`Y0+N'..5FfAw`m/t|eAwgv Mr4:}ay_z^CGyH( 4hKj/=Jݣ;+Z1DQsxYt'mAXZپqН >B |,wgV5EK'z9Sl8NOG\lhM!J7j;j}gB_=f@2ՠYviC?pK(vï;Q("7rYJEz2}Nzfw7m_ёqyyyϓ Z~gS[.vϴ]=+6J5Mr{&Wy{Ff\Ûy'}EW?_hX>Q.\ /Wt; @_ד_qGy~Մ7oT/ӓ>XZZcǎrww_|>[WWf͚ 4hɯ }QTTꚙIjnn>})_o9q@ زe)YYYVCN>]__n:XL=uԱcbqlllDD}k׮>vXMd^VXGqwwܲeK}}[o%aaa1!޻wo߾}߶m[``ۓy>|_}UJm۶TMjCTO=Գ>c3p늾Xk4VWqLvW+˫XY^W2de]ʺfU*e]quer)늛UUUURRߎovuuuuu%ݻ=,,>t:ۀ!z>T*վ}.\;aƕ+Wj̙3>ӂ3 +&JceyUw+oGYi,JceyU+˫XYJ㾚ue(늛+ۥ+YʺfYgggʺ2ϔu͎1Le]qK2.AYWȑ#)늛5^T u#t߼B0TQQц ZZZ{Ç2]ny,YfѣO87882{e^lٲ۷_y3'Dn޽B0((gώ1r JE_y0 N& ]\\JJJ:2_4z_iƯ&Djw%ҏZW]g֕qV$+ٳgy/C_WY;;;^uey&++rYB]W~h-KYWܬaILLnt7ʵkB{=;;;^Y{fee333=<"^wܹ{n@@iҘ1c!:vT/^iWW]uYѸk+˫XY^u+ʺbey+˫Xj,}]q%q줢r}Tگ_?`UUڵkx㍻wj43=8wwN:yxTlQQ?///{{{gggH>77wԩNNNmmDTzL&ɄBaSS}V̟??///##c„ 6ͪqƉ⬬;wh4LJuE_i5z=}UUU4VXY^W+˫XY'''JoוʺfB!e]q555u7{}ʺfߙYf]]])B_W&?(늛dfP/nl=.uQQQ7oƅ 6l`xlٲ_~>?fذaǏ_r@ >|)ݻw߹sg׮]̿ hܾ}{Νeee- 2nܸqb\rJD,#G޽>QB'|?6442)˗/;w.Msk(--ѣG ,DYJcE_i,}+4_ҸYJf+]v-e|ߠ+YʺfGMYW&uFGGS7;i$ʺ2+Yʺ2+nvu}E늛+VYÒqY=TqXފݎ1,A\\k-`=, ,N;˂mIII=\$TjT*MNNWJRpssc3grQզfgg֎9rժU*B;VXXj uVwwwB_ׯѣGaaaӧO7n\vm x\N3n8Ckpss~BffѣGOJ?---^8`]vٳg̙L6==/5k֮]Fq;wo?u'hMS~޿_VGDDЬ|̙9sKE"}׏?.//駟|Ih/]t̙Ç;wnTTӧ۷<&ݯG>kjj _,Ϝ9Cqvv1cի7nx)JEw^SS_ϝ;׾~Z4hX,>s̬Y:2믿{O?TB>N Z)BpԩW\6^^]]덗]xy.]d|Jcҥ_~[NNΐ!C첳;I^^)N!V***z&OmccS\\8""bСC&44rΝ~ҤI...%%%wޕ666K.%3-HF /o'i'tbk°[|˹?ھ}H$޾vɑ:(?7?yyߍo_weiu ߯t>OIk݉T*5  ILLL7X>{a;Q(ݻQܫ{)Y eAw Xt'`Y`Wg|IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/intro.txt000066400000000000000000000046141247673406200235300ustar00rootroot00000000000000Getting Started --------------- ZynAddSubFX is a fairly complex software synthesizer with a very large number of controls. As such, it is not alway obvious how to use ZynAddSubFX. Many applications under Linux transport MIDI over ALSA and transmit audio over JACK. ZynAddSubFX can be run in this configuration by running: ------------------------------ zynaddsubfx -I alsa -O jack -a ------------------------------ This sets the input driver to be alsa and the output driver to be jack, which should attempt to autoconnect to your soundcard as per the '-a' flag. If this is your first time running ZynAddSubFX, you will see a screen that lets you choose between the advanced and beginner interface. Currently the beginner interface is deprecated, so the advanced one is recommended. Now you should be able to see ZynAddSubFX's main window, from which you can setup patches, effects, and general configurations, but more importatnly it provides links into the parameters of the patches. ZynAddSubFX is a powerful tool with a number of base patches, but its true power lies in the ability to make your own patches. .Main Window image::./images/uimain.png[] For basic usage, you will want to use the button to the right of the enabled label. This button will allow for one to select the desired instrument from the banks that ZynAddSubFX has available. To play notes in ZynAddSubFX, either utilize the builtin virtual keyboard (accessible via the vK button) or connect your keyboard to the system and use *aconnect* to connect it to ZynAddSubFX (assuming that ALSA was used). This main window provides access to a number of more advanced features. Some of these features are: * System Effects * Insertion Effects * Recording * Part Settings (instrument level settings) * Master Settings * Microtonal Settings For instance to use the recording feature, a wave file must be selected from the recording menu and then the recording can be started with the record button and stopped with the stop button. This is a simple and quick way of recording some samples from ZynAddSubFX, though there are more full featured options available via JACK recording tools. NOTE: After hitting record, the wave file will not start recording until a new key has been pressed via either an external midi source or the virtual keyboard Both system and insertion effects can be accessed, the properties are available as well as properties of each instrument. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/lfo.txt000066400000000000000000000042271247673406200231550ustar00rootroot00000000000000LFO --- :author: Paul Nasca Introduction ~~~~~~~~~~~~ "LFO" means Low Frequency Oscillator. These oscillators are not used to make sounds by themselves, but they changes somes parameters (like the frequencies, the amplitudes or the filters). The LFOs has some basic parameters: * *Delay*: This parameter sets how much time takes since the start of the note to the start of the LFO * *Start Phase*: The possition that a LFO will start at * *Frequency*: How fast the LFO is (i.e. how fast the parameter's controlled by the LFO changes) * *Depth*: The amplitude of the LFO (i.e. how much the parameter's controlled by the LFO changes) image:images/lfo0.png[] Another important LFO parameter is the shape. There are many LFO Types according to the shape. ZynAddSubFX supports the folowing LFO shapes: image:images/lfo1.png[] Another parameter is the LFO Randomness. It modifies the LFO amplitude or the LFO frequency at random. In ZynAddSubFX you can choose how much the LFO frequency or LFO amplitude changes by this parameter. In the folowing images are shown some examples of randomness and how changes the shape of a triangle LFO. image:images/lfo2.png[] Other parameters are: * *Continous mode*: If this mode is used, the LFO will not start from "zero" on each new note, but it will be continuous. This is very usefull if you apply on filters to make interesting sweeps. * *Stretch*: It controlls how much the LFO frequency changes according to the note's frequency. It can vary from negative stretch (the LFO frequency is decreased on higher notes) to zero (the LFO frequency will be the same on all notes) to positive stretch (the LFO frequency will be increased on higher notes). User Interface ~~~~~~~~~~~~~~ In ZynAddSubFX, LFO parameters are shown as: image:images/uilfo.jpg[] Theese parameters are: * *Freq*: LFO Frequency * *Depth*: LFO Depth * *Start*: LFO Start Phase - If this knob is at the lowest value, the LFO Start Phase will be random. * *Delay*: LFO Delay * *A.R.*: LFO Amplitude Randomnes * *F.R.*: LFO Frequency Randomness * *C.*: LFO Continous Mode * *Str.*: LFO Stretch - in the image above the LFO stretch is set to zero lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/mididefaults.txt000066400000000000000000000007361247673406200250500ustar00rootroot00000000000000Appendex A: MIDI Defaults ------------------------- .Default MIDI Connections [literal] 001 - Modulation Wheel 007 - Volume 010 - Pan 011 - Expression 064 - Sustain 065 - Portamento Enable 071 - Filter Q 074 - Filter Cutoff 075 - Bandwidth(*) 076 - Modulation Amplitude(*) 077 - Resonance Center Frequency(*) 078 - Resonance Bandwidth(*) 120 - All Sounds Off 121 - Reset All Controllers 123 - All Notes Off The entries with `(*)` are not within the General Midi specification lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/nrpn.txt000066400000000000000000000107301247673406200233460ustar00rootroot00000000000000NRPN (Non Registered Parameters Number) --------------------------------------- NRPNs can control all system and insertion effect parameters. For example, you may change the reverb time when playing to keyboard or flanger's lfo frequency. You can disable the NRPN receiving by deselecting the "NRPN" checkbox from the main window (near "Master Keyshift" counter). The controls can be sent on any midi channel (the midi channels numbers are ignored). The parameters are: - NRPN coarse (99 or 0x63)sets the system/insertion effects (4 for system effects or 8 for insertion effects) - NRPN fine (98 or 0x62)sets the number of the effect (first effect is 0) - Data entry coarse (6) sets the parameter number of effect to change(see below) - Data entry fine (26) sets the parameter of the effect You have to send NRPN coarse/fine before sending Data entry coarse/fine. If the effect/parameter doesn't exists or is set to none, then the NRPN is ignored. Example(all values in this example are hex): B0 63 08 // Select the insertion effects B0 62 01 // Select the second effect (remember: the first is 00 and not 01) B0 06 00 // Select the effect parameter 00 B0 26 7F // Change the parameter of effect to the value 7F (127) WARNING: Changing of some of the effect parameters produces clicks when sounds passes thru these effects. I advise you to change only when the sound volume that passes thru the effect to be very low (or silence). Some parameters produce clicks when are changed very fast. Here are the effects parameter number (for Data entry coarse). The parameters that produces clicks are written in [red]#red# and have (AC) after their entry (always clicks). The parameter that produces clicks only when they are changed fast are written in [orange]#orange# and have a (FC) after the entry (Fast Clicks). Most parameters has the range from 0 to 127. When parameters have another range, it is written as [low...high] . Reverb ~~~~~~ [verse] +[orange]#00 - Volume or Dry/Wet (FC)# [orange]#01 - Pan (FC)# 02 - Reverb Time [orange]#03 - Initial Delay (FC)# 04 - Initial Delay Feedback [grey]#05 - reserved# [grey]#06 - reserved# 07 - Low Pass 08 - High Pass 09 - High Frequency Damping [64..127] 64=no damping [red]#10 - Reverb Type [0..1] 0 - Random, 1 - Freeverb (AC)# [red]#11 - Room Size (AC)#+ Echo ~~~~ [verse] +[orange]#00 - Volume or Dry/Wet (FC)# [orange]#01 - Pan (FC)# [red]#02 - Delay (AC)# [red]#03 - Delay between left and right (AC)# [orange]#04 - Left/Right Crossing (FC)# 05 - Feedback 06 - High Frequency Damp+ Chorus ~~~~~~ [verse] +[orange]#00 - Volume or Dry/Wet (FC)# [orange]#01 - Pan (FC)# 02 - LFO Frequency 03 - LFO Randomness 04 - LFO Type [0..1] 05 - LFO Stereo Difference 06 - LFO Depth 07 - Delay 08 - Feedback [orange]#09 - Left/Right Crossing (FC)# [grey]#10 - reserved# [red]#11 - Mode [0..1] (0=add, 1=subtract) (AC)#+ Phaser ~~~~~~ [verse] +[orange]#00 - Volume or Dry/Wet (FC)# [orange]#01 - Pan (FC)# 02 - LFO Frequency 03 - LFO Randomness 04 - LFO Type [0..1] 05 - LFO Stereo Difference 06 - LFO Depth 07 - Feedback [red]#08 - Number of stages [0..11] (AC)# [orange]#09 - Let/Right Crossing (FC)# [red]#10 - Mode [0..1] (0=add, 1=subtract) (AC)# 11 - Phase+ AlienWah ~~~~~~~~ [verse] +[orange]#00 - Volume or Dry/Wet (FC)# [orange]#01 - Pan (FC)# 02 - LFO Frequency 03 - LFO Randomness 04 - LFO Type [0..1] 05 - LFO Stereo Difference 06 - LFO Depth 07 - Feedback 08 - Delay [0..100] [orange]#09 - Left/Right Crossing (FC)# 10 - Phase+ Distorsion ~~~~~~~~~~ [verse] +[orange]#00 - Volume or Dry/Wet (FC)# [orange]#01 - Pan (FC)# 02 - Left/Right Crossing [orange]#03 - Drive (FC)# [orange]#04 - Level (FC)# 05 - Type [0..11] 06 - Invert the signal (negate) [0..1] 07 - Low Pass 08 - High Pass 09 - Mode [0.1] (0=mono,1=stereo)+ EQ ~~ [verse] +[orange]#00 - Gain (FC)#+ All other settings of the EQ are shown in a different way. The N represent the band ("B." setting in the UI) and the first band is 0 (and not 1), like it is shown in the UI. Change the "N" with the band you like. If you want to change a band that doesn't exist, the NRPN will be ignored. [verse] +[red]#10+N*5 - Change the mode of the filter [0..9] (AC)# 11+N*5 - Band's filter frequency 12+N*5 - Band's filter gain 13+N*5 - Band's filter Q (bandwidth or resonance) [grey]#14+N*5 - reserved#+ Example of setting the gain on the second band: . The bands start counting from 0, so the second band is 1 => N=1. . The formula is 12+N*5 => 12+1*5=17, so the number of effect parameter . (for Data entry coarse) is 17. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/saving.txt000066400000000000000000000031301247673406200236540ustar00rootroot00000000000000Persistence ----------- As with most applications ZynAddSubFX allows for one to ave your work and reload it. Saving it all ~~~~~~~~~~~~~ One of the simplest ways to save your work is to save the entire session. This can be done through the File menu and will result in the creation of an .xmz file. Once created, this file will hold the settings for all settings within that session, such as microtonal tunings, all patches, system effects, insertion effects, etc... Saving Parts ~~~~~~~~~~~~ In many cases saving everything is not what is desired. Saving a patch later on is one such example. Patches ^^^^^^^ In order to save a patch, one can either save it from the instruments menu or through the bank window. With the instrument menu, one can just save the file to any given location with the .xiz extension. With the banks menu, one can assign a patch to a given slot with a bank. This instrument will remain here for future use until it is deleted. To see the physical location of the .xiz file, one should check the File->Settings->Bank_Root_Dirs window to see the paths for banks. NOTE: You need to have write permissions to add instruments to the bank. Presets ^^^^^^^ Have a favorite setting for an envelope, a difficult to reproduce oscillator? Then presets are for you. Presets allow for one to save the settings for any of the components which support copy/paste operations. This is done with preset files (.xpz), which get stored in the folders indicated by File->Settings->Preset_Root_Dirs. Summary ~~~~~~~ .Extension Summary [literal] xmz Everything xiz Instrument xsz Scale Settings xpz Presets lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.1.txt000066400000000000000000000043511247673406200250730ustar00rootroot00000000000000ZYNADDSUBFX(1) ============== :doctype: manpage NAME ---- zynaddsubfx - a software synthesizer SYNOPSIS -------- *zynaddsubfx* ['OPTIONS'] DESCRIPTION ----------- *zynaddsubfx* is a polyphonic multimbral synthesizer, which supports three synthesis engines and numerous effects to generate sound. 1) ADsynth generates sounds by adding a number of voices. Each voice has filters, envelopes, LFOs, morphing, modulation (Ring Modulation, Phase Modulation... the modulators can have any shape), resonance, etc... Each voice includes a waveform generator with up to 128 sine/non-sine harmonics. You can use Fourier synthesis or if you don't like it you can wave-shaping/filtering of functions. 2) SUBsynth is a simple engine which makes sounds through harmonic filtering of white noise 3) PADsynth is an engine that makes very beautiful pads and other instruments, which can be exported for use with other programs. Midi and audio support exists for OSS, ALSA, JACK, and others... OPTIONS ------- *-h, --help*:: Display command-line help and exit *-v, --version*:: Display version and exit *-l, --load=FILE*:: Loads a .xmz file *-L, --load-instrument*=FILE:: Loads a .xiz file *-r --sample-rate*=SR:: Set the sample rate SR *-b, --buffer-size*=SR:: Set the buffer size, which determines the granularity of how often parameter changes can be applied *-o, --oscil-size*=OS:: Set the ADsynth oscillator size *-S, --swap*:: Swap Left and Right output channels *-D, --dump*:: Dumps midi note ON/OFF commands *-U, --no-gui*:: Run ZynAddSubFX without user interface *-N, --named*=Name:: Postfix IO Name when possible *-a, --auto-connect*:: AutoConnect when using JACK *-O, --output*=engine:: Set Output Engine *-I, --input*=engine:: Set Input Engine *-e, --exec-after-init*=command:: Run post-initialization script. This script will be run after midi and audio drivers have been initialized. BUGS ---- Please report any bugs to either the mailing list zynaddsubfx-user@lists.sourceforge.net or the bugtracker http://sourceforge.net/tracker/?group_id=62934 AUTHOR ------ ZynAddSubFX was originally written by Nasca Octavian Paul. It is currently being maintained by Mark McCurry. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.txt000066400000000000000000000006771247673406200247430ustar00rootroot00000000000000Zynaddsubfx =========== :Author: Paul Nasca and Mark McCurry This documentation is a work in progress include::intro.txt[] include::filter.txt[] include::lfo.txt[] include::envelope.txt[] include::adsynth.txt[] include::controller.txt[] include::effects.txt[] ///////////////////////////// include::nrpn.txt[] ///////////////////////////// include::saving.txt[] include::mididefaults.txt[] include::build.txt[] include::getting.txt[] lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/000077500000000000000000000000001247673406200225435ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key.png000066400000000000000000000015741247673406200252040ustar00rootroot00000000000000PNG  IHDR4  pHYs  tIME IDATHǕOn6$EǕ E,pНl JS=CE-ˢpcI#ЉdJ<Λ7$&(^__Ǣ("uJKc6h1(G7,P7 (y+PkSXvJ)b!4 (){;F{^QJBhO+BUbҬ)G\f[kC,ꔜxNA]]pWY o98ZUUyj5n-Gcj*jV[c PVSoM{j{OUUŘRߒ`hi#ۤ|%i1ϝ;y 씜 w&m:Dlzpp@ZqfxںˉZ6@{1 bE1f%?kmwwd2a6\.fy d777r-1F z=?x{{}Ck{xxpz1ƿ߃ jUO,0rZ)c|QwXIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key_pressed.png000066400000000000000000000016051247673406200267240ustar00rootroot00000000000000PNG  IHDR4  pHYs  tIME պ$IDATHǝn6?G?80MV .xg)}ln6ERp d<3g8#?4777>ccXr߀.{%EQEZksDQD4m~\.%qFkR4MZ` B%hfRooov;<6 PBZp5,LqZk+RyN$h)˲ lZ+ݡ9fCT+|///E )I|m`{R !ѷn1ipa9I(1e'68Y9D{?tεK+P CLTwb9G4mƘq (jR4 xZIվ@{u]_e;ZkiC8 R͆nG$uMe181ư=GA$mZBjB,K1cZ%6蟜'bL%ûWPT1v= 9JuHIqn!E_[Vy Eϐ86QZǤn /ӥگIq=I<GJI$m;<פ?9Y Д,CJy *k*~q|  ԥH)ijV1!:}xx`ݲX·12<9:ꃍ6RJ%Pg_I=ͼOݟ +DEohłIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/knob.png000066400000000000000000000637731247673406200242220ustar00rootroot00000000000000PNG  IHDR";8{gIDATx peWyϸH֬nRkn-5gmnlmn T 1ܪ[T=[7#T ˥Hnbĉvw{[:GՃWWGsYkBP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP(K.V+KYd~t`dV+_~g~o&V,1V+XbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ5GY[xȏ2?~T%L(XbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXJ-V+ ~lYsX~Ϗg" V+,y?ڰZi?">Oz>yVZ">X>,Ocz[j{XbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXb’pÏA?&cя=~M=.~>z^GR+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX֝~~YЏaVB$BXι+uVUCagHTX_kQ7ob]x3YBwcϪv8bzSXjw:[NV ݟ-Vm{#OaϪ}<7b5m=`Ϫz[lGsX#'Fl#Xj8ljL^XsO'$sa˪۫ ([WŪj.oM+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX&)E]23SiL+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊvk؏6?"XPyXqG+woj-$]7Exb]'ygg]ӵIuDzŚJD5YuCdU>^EYk:*BaϪѸhX5G}Tbxc{Xj>ljL+y}Volj}%znn՘y'S?쿗 >I\Xb&??IH"_튿Uۭd+nNV$kÊ+VW V yf6X݈#"GU= ])rV}r+׆pDau=9;kQ'LB/SHj{b>bŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbVkdj{ȪO]X52θ QX<6nwqY5}?[&YY5|:!vCq)ms?+X.?Ik";矲ٺc >FWV{Ĥj($Ⱥ거D6L܎bgam(mqcQٲe9vXQW⒓牗𤮮Nl[J$ Orss%-I*o6[״X5*++ajW=n5 _٪mNm]x^\cCjY*~*"HhUl5HqYnn\ dUxQqu)qq)묦b|+v zV{zMɕ-?nUN/wHۭ#Ee1Oȓ 8V;^z"jUgu8lq(o~}V۳*ŰZiMbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+֋,\|Ңƣ~:q詛ni}zq-رcrYYYնS999E$Ϥe*O+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊucfȏXJIKH#랏'd}ޙ-X|~mrEϭѯgUcK5X~&fuqOʻC?]XWIHM˗lj w=+V;CĤ]OőӶZ˻BY]miiyok܂!'NXk״$Yh&mGQjH'dphP<ϓyrݑ288(MǏ_/RRR"{ڪ:::xak۷KMM߿j$jUC׊ imm}Ym6gqqQ2VK9Anntvvl6g׮]ͱ|Vms%hl"8mСC  I,=K,.Hmk~5ťEiD~,m=ǷmvJAiΚFsKöڪ~&)p~V;WZ_ۢ?Z2u~"!K䝿2v7h b՘~wY8#7F6[ZWjU.?"Yb=/VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX^Qщuuď/v ^?rw!`fk3D|zD^ XbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VlqZi q̏E nz!rYu>߾/ljL#X`>NHJ-V{3INzD\;'?IAA*[}ғ#ƽ{Vkhxݪ>5 YsXfkqI,,K24 l5-V;78.G5⻺4QVmsԐ#Ƌ9SSS&yzww,--Ymd``@\ו~X/gӗ244dU׹9ٶm(VKꙞӧ=V[եFYXjǭV[56H"Oaê(O\z`Ī1??/mmmd׮]V[5imm|snqqQZZZ>ëXj_B雛%77WbتVmsԻzcn6gpD/c ubr\pǣZsrϹŕ `˺e0$cǤlVxCKнXw~+bMGbSXj ?'Z?Zi=7VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VuTx1?dqokLz̄;^CYYYJ1걘`Ŋ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXϏZi.}sbzg\V>\%"/w~?V{NHlHB9ۭD%6$?? V;$zEdlllfkjғ1HѣX-HCcĮ6[˫evnFvi^_M.C;0 f9:ɼVmsd֭R^^.V[Qc24IX3Yߙx<.8jU{{{M~jcĪ{n5}6Z5ԨV5VzDZV}ԶG mNjIQڟ~V}s='s=jUv 6WjjUCWX__/X-z ??|6kk5˓m۶Wmjg}}KJK$jUۜ1I$v~76o֮I# }ּbl?‘ƅτ?kacxBv9#3kԘmXNg)+Z/_nUyIvYZ_?ڲڇ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊWj5ЏɋLyjEz{{Ou]׿T4 Tl|~ړԄgSݬ>bŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXk'C)K_9v]_ÿ.krL;ByWl)-LߏGc{R|l m{#IZ;v|>hٿ֜[)&'$Z`)[԰Vrrr$Ĵ;e&LiFS?!o|eyy$khh0I0mWMǮ&Jj200`N\lUץ%L\wuu"V FeppjݻgTAAIu׮]RUU%kzG}/a UH$"ݦM٪mlGGO aĚnꤴTǭjQjV;V;zqoymVms6(kp~_eUC@ 6^glmfk@h4??' z1}·5VYimm5}Go[; =mjMiXoMoիemjG/n,~YvX5cVZ K~܈s|/[3rkOs=muKM+v릈}_X/J?mqo:tOec[`̪zFsϋd5GV+UXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+߸Ϗ?8'2 KKK~a9vئ$g|}&l6IgO/1+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXf׹auַ4.Fo>o`ݶ7"Mȡ&h X.?靯 Y[jޏ'rM'vXu|z2U[ZQ4nk:Uklٲ$FI'8\5ɸ4Q__I05֥E;$ssssZ W۷o_jߪ&mڶmxgek\/;wjUcbbBnjkxZoX:Xڟ~f&~A0> L͹_:a֍I0y^5V MFc'jϥan08 h5lRn-lp?|k]}z V7f+*S :V;:lj=~YZXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊojJ L"]?s=rSKa.|uN6ۺukzBҳzdm!UoXbŊ+VXbŊ+VXbŊ+VXbŊ+VXb Ώ,vϥm!i.Y7Sl߽͏bzs i\q@޹U[D% ZZ}k_16Zs\Py.),,z| k:c~aV<(eeeL&M`]Z^ms&9&ekc}?fMj䟛%Lk[TTDfF:QwwI\5t*MB!5)L 5h[_WMv_cêÚd[bjiZG}}5yV:g3=V5)dzh5ݟҶJKa UY̋5?m mo^vXk=fǮMk@Xmթjٚ~m^5Gި[z@zG_W66k2ul3jU~ޗ:fFz,5Q/V;jUK)V~^}}-..6QUU*`[ߏQIa]ښ43z{{M55k mf0պ(zy]Iu|9ZMR#eھj2~դ$XmM'"K5~o5ǴT"kk6h6Y^=vjUcvve([vH'b˚vf~VXbŊ+VXbŊ.^jUz}all{z/S֨VXjo⎎3D]cՎqRqS굹?11a__Վs:{YDZ1g_ձغO}KKKWq]B{<~NY`Iǯƽ5k(knYwWj5{f0ȭp?ǗmO1}ر V;{?-k/qZ5 Y<3aYGYX#[l2PbZ{رcR__oznkkI!辛ts]V95KKKתa]>H7:VC]]]R\\l]vXӋkBv~6c̚SXmn_bŊ+VXbŊ+VXbŊ+VXb՚yOV/8)%:=VtƱ6Zu1:/~UXu<&X쑑uu^7//}l듢"ubN?r}ky}s9τ|9ɞ?;|0֢oQ%֟77w~VZ5ODqݶܹ,ާQj}:r_TBQG{c??5tk}p$$#'/sx[MV/PbŊ+VXbŊ+VXbŊ+VXbŊ+VX2?6Kx%4u77M&3+xdV)))9M<`Ŋ+VXbŊ+VXbŊ+VXbŊ+_gι1;FXX~?b Zs^sZzu"ր[~&!EMYIs$(W"Jx\n*}}}fXIB9VЎRPP`XmM9SSSfںq(]=tgզ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbM[sey:6m٪suxCwBOO[iQ呗'EEE@E]Ǐ/όhY#9!G*ܧl7zfmICok0--Mf"](]gơ9?rmrB~J\+VXbŊ+VXbŊ+VXbŊ+VXbeL~l2::z;|Y7~zc:6{f|ƿeSf0Z=3ޑraŊ+VXbŊ+VXbŊ+VXbŊ:7ݡ8jl#Ѽ)m lP OxRm566ݷǒ,--a U+;:::dΝƬwGX[;͂0RZZ* *a u෣:6S;f޻ƪ Ygt{ncUjUa]hvk:,VbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX׭:6[:W\ɫ=V]ˬ0==mU3kxK)x4Zu]CMaaTTTH4}1e-V=>땴K*=V%z;s `O1پ}s\ _{gaJb΄}=kmN^qԯ Gˏ 旬wF/e+VXbŊ+VXbŊ+VXbŊ+_Ք\?7L5?tM,(U~LLLU_uLbŊ+VXbŊ+VXbŊ+VXbxwuS$c~n,# n4/r^қ255%299iz3 )wq]@rrr$LJSSXgHp%vYܸsss6Y+BrСCf]t2>>nFk:Zh߄+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX`ؘYCjU^Fףuitu5t-%]SIV<Xi6`>X<uMrX|yX͚vqg^FZ~+ Ox&xj(aՉ5X&mJJ ;vӥգ/}IJR ESd|XbŊ+VXbŊ+VXbŊ+VXbj1q 'Nl17fϯtp3UߍHbŊ+VXbŊ+VXbŊ+VX|Q{KsL<?}M@c~7~co#޹'"H4:00 CCCfN]ZZ0򓞸G‘x'HD e˖-fݻlBBqGr bfQmݺU ]?Lks4!r,,,zvvvGW5뱪cdՖ~VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+֫Ú3vXu]fqqzkz-AҮ]k`۷o2I5V=Vu*Ɲu DcjdsV˪1꺌fƮ.cunؑwMGsSO/VXbŊ+VXbŊ+VXbŊ+[M)c&&~H2<}뭷ʾ}6^z]&HຮT}7&Š+VXbŊ+VXbŊ+VXf9b&MWxi}iB?❛zWm{69joottt>[hlxSo#榞QmJ<7djj kǍ:I***Lq[ Oxƺ6)g  :)ksRbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+Vk)a˪z`.Y8;;kUײKk(RUUu|1e}Yu=F]QguuH$"s0ו}llTv]kUB5=&xk%=X3蚹333R__/o:XG])hkŊ+VXbŊ+VXbŊ+VXbjJҏŌ'u# goV_+V!ᳩ'3꿘raŊ+VXbŊ+VXbŊ+VX~֭[>|X>+!qZOw?4^̮ş} 㡟66m&둑39Uo= nt 57 L8aҼmz$f[kvͶL< >Qm:^3j5&XbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VZնw6[͚v͸t]F]]NBй~[N-kZں)=o5.F>?9^u}\=F[ZZ{YהukIwzg/}s(5Ԝk&ZGk}CА Hww[d[{533#AlºՂVXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊUMe:hzAijjpx-o<u}\]'WM뺮g;öÑض7TTu5ug]󹺺Z Y;n^P^ob?ur]<DL=GNƬ^}Ŋ+VXbŊ+VXbŊ+VX/b5eKM.w[nyU*jb$QİeXbŊ+VXbŊ+VXFKKK&.Fcc АLNNj~y?8bѿ>'_MvY/555L&L0hhhX/k>w kwnXvfu-k۰yEրbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXb}Yl\_V]Wuru\D"ilkcǮ¯4^?cc(CdFS.XbŊ+VXbŊzk‭VLnv%SSS{ޯH&fgg8ݶ59+=#ۈ{q3xU=@GXYY)wzu[=k^ssUmfu###A=^u#1cy-5duk79kĢ~VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VU딧,4kӇBs)Xu}]k__K]{_GZF뮷şywfKaJ|7B}G  ٭zD:ќ'zk'uuuL=5`G{aa^Sk53T}lMXbŊ+VXbŊVSɸp~n#G6Ɗnf_k6e>bo߮PO.ߞQ +VXbŊ+VXnدқXoUU:"t/.3FTUTT րY+Bm n#HnnBihh0hǏxk t^N\5DP?~4> ] .Iʾ}dvv|/..g@Z5YU"bŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊkOܟ:kj(7G5ߍ!gUmowş_wnOu|jyO4BD"j5Hc U߻G466JggTUUI8f/YO|j&Z9MYs.,,k+`[9M[_GĊ+VXbŊ+`Vq?ZUp&r/?d_q6_OLLHii/U̺\XbŊ+VXMVoUo6HXm7Y-&7Y,~Ïs==="F%77зu ky|yk3#HH2&ݻwY5=wz噄,~[7cŊ+VXbYMѱɅ[[۩#G\1h3Я9y)_uHbŊ+@Y[x7a՛H;wns6kkkiݾ`Z?ںuj,**27=ժy+sMaV(5KGGy}I?^X3Ѳ7~8wvS i U5299i.1 V _v! cm.:s1o Tۊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX^O/ dljWݡ7RY5۷K4=+rO/<]Pw k՟kN1͟nǪ޿v8,+$.,,PsjN wGeuz[jmii1N+i=mUmN~5VG_/a53߄Վ~VXb )u~,e\:999o߾W IWJ:Y477 ^\{>Uύ^JyMcŊ5V=jU/bNLLȈIiihhZeSS0]PP }}}6YT,{Qx)'vOoKoo\9Iƶѿ{(I߉I(∗)65,9){›>Is$$!+fO%$HAiVXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊŬ!~OkN9?f<ѿ?rR>WUsKuuvնÑ:<0ժ4T?SnqO:33cWjK5IqqDbɟO챪SsjN#  i=Ϫ5֜洴4[i6Fsak{n_ߚff}DXbHz)c2Ɨo>nupppUQ__/IQQȕX5p֯6B^1^n.Rҗ(w͍05g¥^Z\\d-tF6~ře99Ns2Pl$} N`W>NL%}l>ueZ5XbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXډ5V}]'~/{cu٪5gg~~+vNXXbܫgWYnٲEz5r3 Ūy,`rjY/zi^:cКZgU M~X5:5v__9f)-+`;::L>iۺiFXfՔ}?ǙD"q~eeem̬!{NmooudL~uKyV= ڪ111a.hk?IqqXi2eYYH'"9z:66f.b1cU~_0x)EY͕m۶ukmwoerrrZ7~l?|:!v$K g=jz RTB1Grrr" >p+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VX^-h3醝-;o k0\u^xʻAs4L.))Q8#'^^gj`#]͇Ǎ3ud侨5Vu~kNZV,mS߷\ۜPĵ:33#RWWgWm[:>>n޷ϳժ}a]^^~y+?2N~:==-}}}RZZ*e[VU24vZ7kx]ݶz2}vYZ~,o.Ph 7֫q4Źx/=\ln~E XsƎ򓞔Y;Z 󱄔wl6`Ŋ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VW5s$?v3֫m?Ժ?5 ּ<69uYy&^8~|l1~&6!`!Kª$T*emtmjJKij*dY#Mu^VS#5vUְ/ǞqLHWO{9em>lعsg(K}jݹ0H5d_;PT*X|c?o_={h[''ݻC[[[ { cccIZ- nלY'r-ajj+kZgffxM[ېԪ_~<xZY\bӍ |2otn㱷l_t^cשFFd [16.oy=Z7m ѣG߶ݳ&˳۶mkċ_|]udlم䗩xﻰp՜Ug WyXG 9|vq^G&Nkk*>>Hʛ^uհ򾩉*]m_|ڼֿ`eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:_(9z2f|zTWgb;etp{fzƿi~O%{65{|=- !_h#%\===R :BK5'|֣Gz{{ mLYO8ѰPdu-Mj]\\l|8l߾qи_OL?OT###/fkx2ƚZ ىyoxxxvׯ?:;;޽{;\o[eo؛պX֞ Í Z;^֝w<=h\2w x@OX8 k۳ҳ+o<] 7M^6uS2?^rg`%d mY֏5\vtK2wm7wqVRlܣX۞~rGn߾=squpZȚuaa!ٳ'tvv^#kX¾}BGGGVTG'K#G]vJ6m P]_bmbL944&OёPk/^ud9}|/z5'NhH]HOKYߩtܛxZָk|ZhɽذX8v5w^;kKk=Ju Z_foϔuϕ-MhؚCB}*aö|܏v[ w=q/w|ڜb2X+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fݑLcݼl?:ROVƝw<5Hw>^mꅥfVraKcm>L bqMpJ欳axx8JPlh6uzz: 5jq7mYXuIz СCaqqܩS.4+?ʯYKRGGG.D_w[HXsOZ ]a||<,,,dκ׷/Rkoυ6)&犏yPۘ B\rSfG+O쇓k=Yz6>)z&,-Y_cmNJX}2>rryZ`͌\`eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee|17y{k6;lOg:?7ƞq_֦~vc_^X)q&ʥ{6Z.=~JӬo\G23k\Hy!| pɰ:D|iB^rd>>=;roҺ?W^3_ߧΔϯ~Z:kSZ[Jm~|' YҺ\`͔u3+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Z -ۇϪumOzoqo."bswn?&lYu:FFFB{{|>R }.=^.=}N{n(}zvAKVz8\m}o~|Mmݕ̿χ~"ݛ5ֱKߍ{}jw^q?֦va}8|G2O Bp~ƍwtuO~f;Vw v{:WjYޝkfd~5}w Iu:Br/s('{/'w ,Ɏ{ F2<_L9g#9iNpO̅Xl!y1 ۱`$_}-fc㜆cLɧ3-,s_b +&yƤW"Sم&vȒ%357m:]';F,Vu'sTJvz-JkʶhZ^RiC6aJ[kqEW9_hǴ RnV_s7{h%^;1'؎QAۊf+љM+e:Eb+US-\bc 98FGuoGg5rV#؂1MZlhkYLLb%TDq{?UA'XN4RԻjkWEzOȬc9ksrqgYC.4TYbU$xdkU)e䏁-?1WA)t,벭"KXrUv ŅVNjήg{d>PU%AGξc\NTy"Tշk>]VI*,g!#J@څ_)x@Gû1FY\3~&UKpĈQ3YDžBOГIФLtrpShr]6 0]`IC:?0v WUmf+guBh2]M۝mRR9ήTN2,TD,җW%^z]E ,;Z04N|8DJ+;zT*h9rOZU- -+ǯUrY_ 1;NyQ³T H(UĬ)Q\+6V|*a&#BX4 U J[Rk.cL;Ww5z3+q[ul ,YMshA0{3rvx3}n6N*VE×_?鰻{[hׁaĒ+j5ƯIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key.png000066400000000000000000000007701247673406200252450ustar00rootroot00000000000000PNG  IHDRP)DV pHYs  tIME ;NdpGIDATX10 E% r@ñ9W$Iښɀ3~t] ƈZckkztZlX'nv]~}k-Ddoc1&ΓD 8!o vV+{U80 C*IOy/iӚ8~spa6{03" ;f0 KE"*6Pdա:\R.ni/v8E f^$\* ^KvΡe['-_h`6 l`Xx|- BV"}zg|>#_%@5Wd,!€~ RPB1#"ekUI}p\r/V~IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key_pressed.png000066400000000000000000000014341247673406200267700ustar00rootroot00000000000000PNG  IHDRP)DV pHYs  tIME ; >IDATXÝX[r \Fz6ŖG0`IX֫PpRJU J)Z@J 0J)x@DPJuA뺂0ZCk]El~~~zspAkn)QJ9sX{c*)%03E.ug>'13QDhs{BJ)RJ!#%mp9z9-9  j/G\EeY`=s݈%U"!"38X#GTE"ҏBأ@`fHڪ89a;2nI+P.@ԷnorYAgьRI 6-eA# oV:Pm{w j{^5gOsGJoXQo8zhժrA;}G ێQEGrUGb#W+.75YpW=Yg]^fTgՑ!O3Sk̝-mf.=]2XYNG09Osb%7mL4H=&Y$jjgy؎BYa3P`Y\Xj0m;+bݣ|\E1Faݛ]R1b۶0GZy2p y8fPk]g[qnxsJIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/pixmaps/window_backdrop.png000066400000000000000000000253221247673406200264310ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs  tIMEr IDATxڅYHD@|HPYHU$K,?m???c1>8zߍ1Ʋ,~,z3N{1Xe~_~??3m},cYmϒ]e|>s^XeNY۶u]wr^߽mnNSﶆ|l|1N]mgcYw]ݶmcc[7?^_m&` s ^m8Ny<;y,T>+ߙy^9x<Aϻ*09h@܈q\LH>&=ϣ˿Hkh B }>-2pk66!k߶@&%˦.A#<..IMtS`+A"z!?C I>NrL3KBCC1rWcg 2t;9x<4{nE[ewqgp:_0ŧdqx>⠢B.j60Lˉ2ݴvƃT&]/V,-E֓֐ic.OSl0- /) f 4\i ,1<k,0cpF V/eDw3Z8e5dp0EK0f7TbZM`be#s:0 0vvob<-Q4Z+1)q Ãg1q&ET;])dH\ -o$0Hl( #B4MY ~^63t}SFelxHr`}+ ٴ؏3NwwZV5|>re! LcٶmF\ GrZD4T!bf0jyi$6faO듟;9hq?Ye2];o%ȿKZĂ #1\$WB\>/72bPŅ"9pM/|1u4\Vu\ T01.Cn6ngH8/׊Vq0_!rΟͰp|c+ a"YW`yޮwv0D|*3*1]b ub|tLErf9#5Z,BzkC ›X%T]2ӬrAxYe0)- _ >;nR!ӥ3z<;WHF>#Z#s\奡K;RqPICkl", 0+ot]G~x/|n F)Y?r-X݅1%wCM\u;YYL[40_[-O_Eފ(60\JmB|^5D_]jGn_;XNG SH:753B" |>Ǚ7Ô*t4 <Ʊ{^ӿs1hvJVy7+ټ>(mz5epJG+@WGh.pl>s[nYN :?&\bp3SPɜ?{ l1&!hԨ"2ȋ4,*bN5}(鞳> &0 gbBV t4P|%u;&=f*'2uq˽.fdyqV}D+1@˼|G3X2ohCG|>A`cr汑͌bC5) iHo3A!ݖ=0 KCj&uvLRu?D"wAgbH).uq\ d\aT#@8hXBcŘDH]YFoj>~.10g=ϰ؟CaX13{L-vCiMLGN8;k @ݛͪu26DScZMO:73&@A0~,eF&DIj|Z [JTeu\ 2xj]f ]n6?W}fU. j0\L?A`h3Zx7C[A܀eZ6uKӬeZˆ=وݰ-*\I%/wQ|̷;c]IE3cϐ'M*fBG 4s}c4; =֢1v[7R|fX"Ob54Wh[eL/ 2X>ѼVLԐݶ s;jpo,Uq։ĶӣX \d3ݓGsۀgT05> LX5_q {UY3.PN̖b ʃ"dJl>'53#ifh9ۘuLn-HZm2L\Kl6NR(]~AŸv9onp9ug!Bpzh'Lb:q왻3(cFŒ3+X;\.{-ΰ7׌dϤ;`+M0&x0Ƽw|@T} sqW 5V@}7Lfy]9tQ $~S"w6qC?ǭaqf#D)%9W̭E$BIm2(Cӭ!Q/vZ{dI-&(GcRyhm2׎Z,fH fm>#6N ƫf&aǪdV0TԌ\kH7l%+O!vҐQÒMdLAӛxƃ1yd&m54-*e&7]My\]_%D[7фO79׷ d_.1~ Gsx8o1 {G☢nJ-E% %};ijm\v&;>Vd ͱYi f2@cںk n|Q&LKBoc.r3 M!.j>gE~rzM,nnh:W|Rs+(yPɪyg[IJ6{e6FӤ?ia& ނe0@%j{Çv~[PjѢn ]'z n|͌HlF028[E6zϙVF ަ:qV&vᨤpIշJt5&"gߺp*j$pĄ𢛜D3?Hs}Ҵ.ZV 8773SRV&lq}6[%ї`"$)O-5]rY"ln\r̓D(v#:$f =ӕOasu8>g36Mܓgmт֯oS;X0 &8Fa(~)a[)5Mȟo&a <:̫Vg`d`&)SM,j<$Xgwla֏ 濚=ib<H?Ϻ55F2sL2!iq?E즫zI릟ImIWQN.;hM6y$0`"CZV92$@Eݍ*]n g$~Z06H7$SG&獴F~c>3.:ZgЗfmf40qO,12&mLĬ!_1VӐo}.5 f4㖧j\>uvndYpXViX/gbZuUΆӝqT1hb8\x~ n >jF)(U:Og~2m[0 n8F3ρ-/,)7:QjS%'VsSH ZgG7v[#_Ggps]:Ҝ;byzdvW HvG56XZ2e6?|zOtݛhID2s7#m|[=G2`\nf"9DSPTc ڔ#-\?kd+5iNqwL;c~5μ"˰j[*L8-:rirhr(뗦д,F4e zLzH7g1׈zңz5LְƋ:$Xsٵfө0af{^BSF1uZ+0R< zj\R}]oWv߃L[Q&MDZ*l~pMC}sr"pYˮQg]. 1G4ۤTG͍eKzR4e | > Ͳ< mM BZt %e+j0zѬ,nA\re:e݄Ҩo41+eSg+~G Gi_[nqԥTp%>KT Is Xc:6˖s&bNQt0ve/W6Y->,+ծ6? $o(I[ң؈l7>\^&/ۄ,ܨa+,XqhO`fm -0eFE~O`hYpb`zW |cxi]9|g'V3 6,'g˒֜c<*FxB8oY+Ed,kf2m2@189q쟠ev;[[B`ôcM]"2q{mfuv,]NZ^A ~u(lئ ^?dO gM>ܹ'h-u⚸Y힬}Hd# ,.~J>Fi]\?#M7/LsJo7aUb$&+ҕo2f)lčRT Fq3s1%|py9N]h!F1;lfǦ!"'uX:-|VnwBH]S/qlT-Xm@l:e\@,.ĨRsXaə@ f#\%0*tML~Zq̃ "˸/DS[_[֚'r3_u,J5d0¶wxMؘ?S>,rf@e6 I7ԣyp?%Z$=e1ln]uj<6u*F&ONuyG!8k&qfҰH*m-m( Ng ӷ2܎5&\(R|h:^t!y>%^CiV,=;~`z4+k\;[Fih yA ǡZ;-Α\o?yh}T2\~1J;Vq@56TV=/MuFa}=R?DY`u\1 [B3|iQ9y2~9O47Vo+yi 5a6xʙiF ڑX'ìZPEDi}Y;jmߗ)O8--;enbY4.hGbq<;37kGz ,9c.fSgѬkmnJb:6O]mՎyЙMe<#i"w#Z;z (s'(lTklXdss_\N #xx{\`m=RrXqoQ?c56ɞ0h%-| V53Ѻa09LŎha,:b *5Vq\jY $8]W<|TҼ&h#R@P!ۨhu|V"6Q)̞hN*6Ћk  -dO{S:@j SIDATD/&IX@ %KcVQ²ڑ'q"i;pGdꦏ6L%yYm6!խT- 7uyK)sN3LY<\X˷ԶH7>$݃1/0y,9Iy{QO0 gkRljIY)ʙ{Mi r1#9Bڠ)C/6U۷ٽ>\<0 هu>9TLsX3K{HzL5dMC֫јX8ʴfމ@{7긩QM]90yMj&sg~?KW-i#:{,jbJC ;1iM樑/o"(n=%J,=ӪZ>)׈E`I P&46ΰܴxq3 ɸNLl?oGYfqyv4R%д n@ͶGXdSIgx@/a ;4,M,ҷJd/ާ"L54)V@ i4+m( gsQt?kHch9l܀ ˷.U73Gz!RNA0y-hL41!ҵܭAhNtOS-YAڑsݜhͦ5@R ZO4ӇͣSs+q ,@`._\E79.hhd5}8c'HD%؊;na mK3_% gGf9FixvPNcWrc=xpQ?Rm3[kCqbg`&pNfMbtm88I頍f37\u Z'ٵ w6­]&' &z!tD9yH'e gԚkQxcӆEzsX;mGbRM?u[Aj,.1>s\h{2_ 39d6}֞|ѠY&eƌ;Hfp2yGʤ?43qd؜I@\B=76 Tv.cčd oPRoG9݈57s$CILnI3 ] 8MgDdˊҏ,I״&yx2*ܜ}K:Ki:.6Ts&;l| rx*SMrYvǼ0d$ڊ)'VQm%ϲNq(`!$BPjyr `4Cjإ-/2kM,% -d,Ѽ7*Yi3™%-hBj%#~ *wFchh "Mn~MmK7䈰k,ˎԴ1Q9x@M8+d|qyS5MMhaJ&N3bF'\ V r*>CmC_l˦`Bri so^c'%3y<zp-~ݾp,"hb|r&:%jQDHnFhxs <ЮMw*٬>oay-)hጇk4ڦ6Blf3-1FɨaUPF&B` 5Sm12vJ7 s hx=m}6&.5y:.!hc?lWSIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/000077500000000000000000000000001247673406200216515ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/CMakeLists.txt000066400000000000000000000260661247673406200244230ustar00rootroot00000000000000#checking include/library paths message(STATUS "Checking Include Path" $ENV{CMAKE_INCLUDE_PATH} ${CMAKE_INCLUDE_PATH}) message(STATUS "Checking Library Path" $ENV{CMAKE_LIBRARY_PATH} ${CMAKE_LIBRARY_PATH}) #Dependency check find_package(PkgConfig REQUIRED) find_package(zlib REQUIRED) pkg_check_modules(FFTW REQUIRED fftw3) pkg_check_modules(MXML REQUIRED mxml) find_package(Threads REQUIRED) find_package(OSS) find_package(Alsa) pkg_check_modules(JACK jack) pkg_check_modules(PORTAUDIO portaudio-2.0>=19) set(FLTK_SKIP_OPENGL true) pkg_check_modules(NTK ntk) pkg_check_modules(NTK_IMAGES ntk_images) find_package(FLTK) find_package(OpenGL) #for FLTK find_package(CxxTest) if(CXXTEST_FOUND) set(CXXTEST_USE_PYTHON TRUE) endif() # lash pkg_search_module(LASH lash-1.0) mark_as_advanced(LASH_LIBRARIES) pkg_search_module(DSSI dssi>=0.9.0) mark_as_advanced(DSSI_LIBRARIES) pkg_search_module(LIBLO liblo>=0.26) mark_as_advanced(LIBLO_LIBRARIES) CHECK_FUNCTION_EXISTS(sched_setscheduler HAVE_SCHEDULER) execute_process(COMMAND echo fistpl 0 COMMAND as - ERROR_VARIABLE AVOID_ASM) ######### Settings ########### # NOTE: These cache variables should normally not be changed in this # file, but either in in CMakeCache.txt before compile, or by passing # parameters directly into cmake using the -D flag. SET (GuiModule fltk CACHE STRING "GUI module, either fltk, ntk or off") SET (CompileTests ${CXXTEST_FOUND} CACHE BOOL "whether tests should be compiled in or not") SET (AlsaEnable ${ALSA_FOUND} CACHE BOOL "Enable support for Advanced Linux Sound Architecture") SET (JackEnable ${JACK_FOUND} CACHE BOOL "Enable support for JACK Audio Connection toolKit") SET (OssEnable ${OSS_FOUND} CACHE BOOL "Enable support for Open Sound System") SET (PaEnable ${PORTAUDIO_FOUND} CACHE BOOL "Enable support for Port Audio System") SET (LashEnable ${LASH_FOUND} CACHE BOOL "Enable LASH Audio Session Handler") SET (DssiEnable ${DSSI_FOUND} CACHE BOOL "Enable DSSI Plugin compilation") SET (LibloEnable ${LIBLO_FOUND} CACHE BOOL "Enable Liblo") # Now, handle the incoming settings and set define flags/variables based # on this # Add version information add_definitions(-DVERSION="${VERSION}") message(STATUS "Building on a '${CMAKE_SYSTEM_NAME}' System") if(NOT "Darwin" STREQUAL ${CMAKE_SYSTEM_NAME}) # Add scheduler function existance info (OSX compatiability) add_definitions(-DHAVE_SCHEDULER=${HAVE_SCHEDULER}) endif() # Give a good guess on the best Input/Output default backends if (JackEnable) SET (DefaultOutput jack CACHE STRING "Default Output module: [null, alsa, oss, jack, portaudio]") # Override with perhaps more helpful midi backends if (AlsaEnable) SET (DefaultInput alsa CACHE STRING "Default Input module: [null, alsa, oss, jack]") elseif (OssEnable) SET (DefaultInput oss CACHE STRING "Default Input module: [null, alsa, oss, jack]") else () SET (DefaultInput jack CACHE STRING "Default Input module: [null, alsa, oss, jack]") endif () elseif (AlsaEnable) SET (DefaultOutput alsa CACHE STRING "Default Output module: [null, alsa, oss, jack, portaudio]") SET (DefaultInput alsa CACHE STRING "Default Input module: [null, alsa, oss, jack]") elseif (OssEnable) SET (DefaultOutput oss CACHE STRING "Default Output module: [null, alsa, oss, jack, portaudio]") SET (DefaultInput oss CACHE STRING "Default Input module: [null, alsa, oss, jack]") else() SET (DefaultOutput null CACHE STRING "Default Output module: [null, alsa, oss, jack, portaudio]") SET (DefaultInput null CACHE STRING "Default Input module: [null, alsa, oss, jack]") endif() if (GuiModule STREQUAL qt AND QT_FOUND) set (QtGui TRUE) elseif(GuiModule STREQUAL ntk AND NTK_FOUND) set (NtkGui TRUE) elseif(GuiModule STREQUAL fltk AND FLTK_FOUND) set (FltkGui TRUE) elseif(GuiModule STREQUAL off) add_definitions(-DDISABLE_GUI) else () set (GuiModule off CACHE STRING "GUI module, either fltk, qt or off") add_definitions(-DDISABLE_GUI) message(STATUS "GUI module defaulting to off") endif() #Build Flags option (BuildForAMD_X86_64 "Build for AMD x86_64 system" OFF) option (BuildForCore2_X86_64 "Build for Intel Core2 x86_64 system" OFF) option (BuildForDebug "Include gdb debugging support" OFF) set(CMAKE_BUILD_TYPE "Release") set (BuildOptions_x86_64AMD "-O3 -march=athlon64 -m64 -Wall -ffast-math -fno-finite-math-only -fomit-frame-pointer" CACHE STRING "X86_64 compiler options" ) set (BuildOptions_X86_64Core2 "-O3 -march=core2 -m64 -Wall -ffast-math -fno-finite-math-only -fomit-frame-pointer" CACHE STRING "X86_64 compiler options" ) set (BuildOptionsBasic "-O3 -msse -msse2 -mfpmath=sse -ffast-math -fomit-frame-pointer" CACHE STRING "basic X86 complier options" ) set (BuildOptionsDebug "-O0 -g3 -ggdb -Wall -Wpointer-arith" CACHE STRING "Debug build flags") ########### Settings dependant code ########### # From here on, the setting variables have been prepared so concentrate # on the actual compiling. if(AlsaEnable) list(APPEND AUDIO_LIBRARIES ${ASOUND_LIBRARY}) list(APPEND AUDIO_LIBRARY_DIRS ${ASOUND_LIBRARY_DIRS}) add_definitions(-DALSA=1) endif(AlsaEnable) if(JackEnable) list(APPEND AUDIO_LIBRARIES ${JACK_LIBRARIES}) list(APPEND AUDIO_LIBRARY_DIRS ${JACK_LIBRARY_DIRS}) add_definitions(-DJACK=1) endif(JackEnable) if(OssEnable) add_definitions(-DOSS=1) endif(OssEnable) if(PaEnable) include_directories(${PORTAUDIO_INCLUDE_DIR}) add_definitions(-DPORTAUDIO=1) list(APPEND AUDIO_LIBRARIES ${PORTAUDIO_LIBRARIES}) list(APPEND AUDIO_LIBRARY_DIRS ${PORTAUDIO_LIBRARY_DIRS}) endif() if (CompileTests) ENABLE_TESTING() endif() if(LashEnable) include_directories(${LASH_INCLUDE_DIRS}) add_definitions(-DLASH=1) list(APPEND AUDIO_LIBRARIES ${LASH_LIBRARIES}) list(APPEND AUDIO_LIBRARY_DIRS ${LASH_LIBRARY_DIRS}) message(STATUS "Compiling with lash") endif() if(LibloEnable) include_directories(${LIBLO_INCLUDE_DIRS}) add_definitions(-DUSE_NSM=1) list(APPEND AUDIO_LIBRARIES ${LIBLO_LIBRARIES}) list(APPEND AUDIO_LIBRARY_DIRS ${LIBLO_LIBRARY_DIRS}) message(STATUS "Compiling with liblo") endif() # other include directories include_directories(${ZLIB_INCLUDE_DIRS} ${MXML_INCLUDE_DIRS}) add_definitions( -g #TODO #todo put in a better location -Wall -Wextra ) if(NOT AVOID_ASM) message(STATUS "Compiling with x86 opcode support") add_definitions(-DASM_F2I_YES) endif() if (BuildForDebug) set (CMAKE_BUILD_TYPE "Debug") set (CMAKE_CXX_FLAGS_DEBUG ${BuildOptionsDebug}) message (STATUS "Building for ${CMAKE_BUILD_TYPE}, flags: ${CMAKE_CXX_FLAGS_DEBUG}") else (BuildForDebug) set (CMAKE_BUILD_TYPE "Release") if (BuildForAMD_X86_64) set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptions_x86_64AMD}) else (BuildForAMD_X86_64) if (BuildForCore2_X86_64) set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptions_X86_64Core2}) else (BuildForCore2_X86_64) set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptionsBasic}) endif (BuildForCore2_X86_64) endif (BuildForAMD_X86_64) message (STATUS "Building for ${CMAKE_BUILD_TYPE}, flags: ${CMAKE_CXX_FLAGS_RELEASE}") endif (BuildForDebug) add_definitions(-fPIC) if(FLTK_FOUND) mark_as_advanced(FORCE FLTK_BASE_LIBRARY) mark_as_advanced(FORCE FLTK_CONFIG_SCRIPT) mark_as_advanced(FORCE FLTK_DIR) mark_as_advanced(FORCE FLTK_FLUID_EXECUTABLE) mark_as_advanced(FORCE FLTK_FORMS_LIBRARY) mark_as_advanced(FORCE FLTK_GL_LIBRARY) mark_as_advanced(FORCE FLTK_IMAGES_LIBRARY) mark_as_advanced(FORCE FLTK_INCLUDE_DIR) mark_as_advanced(FORCE FLTK_MATH_LIBRARY) endif(FLTK_FOUND) if(NTK_FOUND) mark_as_advanced(FORCE NTK_BASE_LIBRARY) mark_as_advanced(FORCE NTK_CONFIG_SCRIPT) mark_as_advanced(FORCE NTK_DIR) mark_as_advanced(FORCE FLTK_FLUID_EXECUTABLE) mark_as_advanced(FORCE NTK_FORMS_LIBRARY) mark_as_advanced(FORCE NTK_GL_LIBRARY) mark_as_advanced(FORCE NTK_IMAGES_LIBRARY) mark_as_advanced(FORCE NTK_INCLUDE_DIR) mark_as_advanced(FORCE NTK_MATH_LIBRARY) endif(NTK_FOUND) if(FltkGui) #UGLY WORKAROUND find_program (FLTK_CONFIG fltk-config) if (FLTK_CONFIG) execute_process (COMMAND ${FLTK_CONFIG} --use-images --ldflags OUTPUT_VARIABLE FLTK_LDFLAGS) string(STRIP ${FLTK_LDFLAGS} FLTK_LIBRARIES) endif() message(STATUS ${FLTK_LDFLAGS}) set(GUI_LIBRARIES ${FLTK_LIBRARIES} ${FLTK_LIBRARIES} ${OPENGL_LIBRARIES} zynaddsubfx_gui) add_definitions(-DFLTK_GUI) message(STATUS "Will build FLTK gui") include_directories( ${FLTK_INCLUDE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/UI" "${CMAKE_CURRENT_BINARY_DIR}/UI" ) add_subdirectory(UI) endif() if(NtkGui) find_program( FLTK_FLUID_EXECUTABLE ntk-fluid) message(STATUS ${NTK_LDFLAGS} ${NTK_IMAGES_LDFLAGS}) set(GUI_LIBRARIES ${NTK_LIBRARIES} ${NTK_IMAGES_LIBRARIES} ${OPENGL_LIBRARIES} zynaddsubfx_gui) add_definitions(-DNTK_GUI) message(STATUS "Will build NTK gui") include_directories( ${NTK_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/UI" "${CMAKE_CURRENT_BINARY_DIR}/UI" ) add_subdirectory(UI) endif() ########### General section ############## # Following this should be only general compilation code, and no mention # of module-specific variables link_directories(${AUDIO_LIBRARY_DIRS} ${ZLIB_LIBRARY_DIRS} ${FFTW_LIBRARY_DIRS} ${MXML_LIBRARY_DIRS} ${FLTK_LIBRARY_DIRS} ${NTK_LIBRARY_DIRS}) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) set(NONGUI_LIBRARIES zynaddsubfx_misc zynaddsubfx_synth zynaddsubfx_effect zynaddsubfx_params zynaddsubfx_dsp zynaddsubfx_nio ) add_subdirectory(Misc) add_subdirectory(Synth) add_subdirectory(Effects) add_subdirectory(Params) add_subdirectory(DSP) add_subdirectory(Nio) add_library(zynaddsubfx_core STATIC ${zynaddsubfx_dsp_SRCS} ${zynaddsubfx_effect_SRCS} ${zynaddsubfx_misc_SRCS} ${zynaddsubfx_params_SRCS} ${zynaddsubfx_synth_SRCS} ) target_link_libraries(zynaddsubfx_core ${ZLIB_LIBRARIES} ${FFTW_LIBRARIES} ${MXML_LIBRARIES} ${OS_LIBRARIES} pthread) if(CompileTests) add_subdirectory(Tests) endif(CompileTests) message(STATUS "using link directories: ${AUDIO_LIBRARY_DIRS} ${ZLIB_LIBRARY_DIRS} ${FFTW_LIBRARY_DIRS} ${MXML_LIBRARY_DIRS} ${FLTK_LIBRARY_DIRS}") add_executable(zynaddsubfx main.cpp) target_link_libraries(zynaddsubfx zynaddsubfx_core zynaddsubfx_nio ${GUI_LIBRARIES} ${NIO_LIBRARIES} ${AUDIO_LIBRARIES} ) if (DssiEnable) add_library(zynaddsubfx_dssi SHARED Output/DSSIaudiooutput.cpp ) target_link_libraries(zynaddsubfx_dssi zynaddsubfx_core ${OS_LIBRARIES} ) if (${CMAKE_SIZEOF_VOID_P} EQUAL "8") install(TARGETS zynaddsubfx_dssi LIBRARY DESTINATION lib64/dssi/) else () install(TARGETS zynaddsubfx_dssi LIBRARY DESTINATION lib/dssi/) endif () endif() message(STATUS "Link libraries: ${ZLIB_LIBRARY} ${FFTW_LIBRARY} ${MXML_LIBRARIES} ${AUDIO_LIBRARIES} ${OS_LIBRARIES}") install(TARGETS zynaddsubfx RUNTIME DESTINATION bin ) if(NtkGui) install(DIRECTORY ../pixmaps DESTINATION share/zynaddsubfx) add_definitions(-DPIXMAP_PATH="${CMAKE_INSTALL_PREFIX}/share/zynaddsubfx/pixmaps/") add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") endif(NtkGui) include(CTest) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/000077500000000000000000000000001247673406200222775ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp000066400000000000000000000315571247673406200253650ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AnalogFilter.cpp - Several analog filters (lowpass, highpass...) Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2010-2010 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include //memcpy #include #include #include "../Misc/Util.h" #include "AnalogFilter.h" AnalogFilter::AnalogFilter(unsigned char Ftype, float Ffreq, float Fq, unsigned char Fstages, unsigned int srate, int bufsize) :Filter(srate, bufsize), type(Ftype), stages(Fstages), freq(Ffreq), q(Fq), gain(1.0), abovenq(false), oldabovenq(false) { for(int i = 0; i < 3; ++i) coeff.c[i] = coeff.d[i] = oldCoeff.c[i] = oldCoeff.d[i] = 0.0f; if(stages >= MAX_FILTER_STAGES) stages = MAX_FILTER_STAGES; cleanup(); firsttime = false; setfreq_and_q(Ffreq, Fq); firsttime = true; coeff.d[0] = 0; //this is not used outgain = 1.0f; } AnalogFilter::~AnalogFilter() {} void AnalogFilter::cleanup() { for(int i = 0; i < MAX_FILTER_STAGES + 1; ++i) { history[i].x1 = 0.0f; history[i].x2 = 0.0f; history[i].y1 = 0.0f; history[i].y2 = 0.0f; oldHistory[i] = history[i]; } needsinterpolation = false; } void AnalogFilter::computefiltercoefs(void) { float tmp; bool zerocoefs = false; //this is used if the freq is too high //do not allow frequencies bigger than samplerate/2 float freq = this->freq; if(freq > (halfsamplerate_f - 500.0f)) { freq = halfsamplerate_f - 500.0f; zerocoefs = true; } if(freq < 0.1f) freq = 0.1f; //do not allow bogus Q if(q < 0.0f) q = 0.0f; float tmpq, tmpgain; if(stages == 0) { tmpq = q; tmpgain = gain; } else { tmpq = (q > 1.0f) ? powf(q, 1.0f / (stages + 1)) : q; tmpgain = powf(gain, 1.0f / (stages + 1)); } //Alias Terms float *c = coeff.c; float *d = coeff.d; //General Constants const float omega = 2 * PI * freq / samplerate_f; const float sn = sinf(omega), cs = cosf(omega); float alpha, beta; //most of theese are implementations of //the "Cookbook formulae for audio EQ" by Robert Bristow-Johnson //The original location of the Cookbook is: //http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txt switch(type) { case 0: //LPF 1 pole if(!zerocoefs) tmp = expf(-2.0f * PI * freq / samplerate_f); else tmp = 0.0f; c[0] = 1.0f - tmp; c[1] = 0.0f; c[2] = 0.0f; d[1] = tmp; d[2] = 0.0f; order = 1; break; case 1: //HPF 1 pole if(!zerocoefs) tmp = expf(-2.0f * PI * freq / samplerate_f); else tmp = 0.0f; c[0] = (1.0f + tmp) / 2.0f; c[1] = -(1.0f + tmp) / 2.0f; c[2] = 0.0f; d[1] = tmp; d[2] = 0.0f; order = 1; break; case 2: //LPF 2 poles if(!zerocoefs) { alpha = sn / (2.0f * tmpq); tmp = 1 + alpha; c[1] = (1.0f - cs) / tmp; c[0] = c[2] = c[1] / 2.0f; d[1] = -2.0f * cs / tmp * -1.0f; d[2] = (1.0f - alpha) / tmp * -1.0f; } else { c[0] = 1.0f; c[1] = c[2] = d[1] = d[2] = 0.0f; } order = 2; break; case 3: //HPF 2 poles if(!zerocoefs) { alpha = sn / (2.0f * tmpq); tmp = 1 + alpha; c[0] = (1.0f + cs) / 2.0f / tmp; c[1] = -(1.0f + cs) / tmp; c[2] = (1.0f + cs) / 2.0f / tmp; d[1] = -2.0f * cs / tmp * -1.0f; d[2] = (1.0f - alpha) / tmp * -1.0f; } else c[0] = c[1] = c[2] = d[1] = d[2] = 0.0f; order = 2; break; case 4: //BPF 2 poles if(!zerocoefs) { alpha = sn / (2.0f * tmpq); tmp = 1.0f + alpha; c[0] = alpha / tmp *sqrtf(tmpq + 1.0f); c[1] = 0.0f; c[2] = -alpha / tmp *sqrtf(tmpq + 1.0f); d[1] = -2.0f * cs / tmp * -1.0f; d[2] = (1.0f - alpha) / tmp * -1.0f; } else c[0] = c[1] = c[2] = d[1] = d[2] = 0.0f; order = 2; break; case 5: //NOTCH 2 poles if(!zerocoefs) { alpha = sn / (2.0f * sqrtf(tmpq)); tmp = 1.0f + alpha; c[0] = 1.0f / tmp; c[1] = -2.0f * cs / tmp; c[2] = 1.0f / tmp; d[1] = -2.0f * cs / tmp * -1.0f; d[2] = (1.0f - alpha) / tmp * -1.0f; } else { c[0] = 1.0f; c[1] = c[2] = d[1] = d[2] = 0.0f; } order = 2; break; case 6: //PEAK (2 poles) if(!zerocoefs) { tmpq *= 3.0f; alpha = sn / (2.0f * tmpq); tmp = 1.0f + alpha / tmpgain; c[0] = (1.0f + alpha * tmpgain) / tmp; c[1] = (-2.0f * cs) / tmp; c[2] = (1.0f - alpha * tmpgain) / tmp; d[1] = -2.0f * cs / tmp * -1.0f; d[2] = (1.0f - alpha / tmpgain) / tmp * -1.0f; } else { c[0] = 1.0f; c[1] = c[2] = d[1] = d[2] = 0.0f; } order = 2; break; case 7: //Low Shelf - 2 poles if(!zerocoefs) { tmpq = sqrtf(tmpq); alpha = sn / (2.0f * tmpq); beta = sqrtf(tmpgain) / tmpq; tmp = (tmpgain + 1.0f) + (tmpgain - 1.0f) * cs + beta * sn; c[0] = tmpgain * ((tmpgain + 1.0f) - (tmpgain - 1.0f) * cs + beta * sn) / tmp; c[1] = 2.0f * tmpgain * ((tmpgain - 1.0f) - (tmpgain + 1.0f) * cs) / tmp; c[2] = tmpgain * ((tmpgain + 1.0f) - (tmpgain - 1.0f) * cs - beta * sn) / tmp; d[1] = -2.0f * ((tmpgain - 1.0f) + (tmpgain + 1.0f) * cs) / tmp * -1.0f; d[2] = ((tmpgain + 1.0f) + (tmpgain - 1.0f) * cs - beta * sn) / tmp * -1.0f; } else { c[0] = tmpgain; c[1] = c[2] = d[1] = d[2] = 0.0f; } order = 2; break; case 8: //High Shelf - 2 poles if(!zerocoefs) { tmpq = sqrtf(tmpq); alpha = sn / (2.0f * tmpq); beta = sqrtf(tmpgain) / tmpq; tmp = (tmpgain + 1.0f) - (tmpgain - 1.0f) * cs + beta * sn; c[0] = tmpgain * ((tmpgain + 1.0f) + (tmpgain - 1.0f) * cs + beta * sn) / tmp; c[1] = -2.0f * tmpgain * ((tmpgain - 1.0f) + (tmpgain + 1.0f) * cs) / tmp; c[2] = tmpgain * ((tmpgain + 1.0f) + (tmpgain - 1.0f) * cs - beta * sn) / tmp; d[1] = 2.0f * ((tmpgain - 1.0f) - (tmpgain + 1.0f) * cs) / tmp * -1.0f; d[2] = ((tmpgain + 1.0f) - (tmpgain - 1.0f) * cs - beta * sn) / tmp * -1.0f; } else { c[0] = 1.0f; c[1] = c[2] = d[1] = d[2] = 0.0f; } order = 2; break; default: //wrong type type = 0; computefiltercoefs(); break; } } void AnalogFilter::setfreq(float frequency) { if(frequency < 0.1f) frequency = 0.1f; float rap = freq / frequency; if(rap < 1.0f) rap = 1.0f / rap; oldabovenq = abovenq; abovenq = frequency > (halfsamplerate_f - 500.0f); bool nyquistthresh = (abovenq ^ oldabovenq); //if the frequency is changed fast, it needs interpolation if((rap > 3.0f) || nyquistthresh) { //(now, filter and coeficients backup) oldCoeff = coeff; for(int i = 0; i < MAX_FILTER_STAGES + 1; ++i) oldHistory[i] = history[i]; if(!firsttime) needsinterpolation = true; } freq = frequency; computefiltercoefs(); firsttime = false; } void AnalogFilter::setfreq_and_q(float frequency, float q_) { q = q_; setfreq(frequency); } void AnalogFilter::setq(float q_) { q = q_; computefiltercoefs(); } void AnalogFilter::settype(int type_) { type = type_; computefiltercoefs(); } void AnalogFilter::setgain(float dBgain) { gain = dB2rap(dBgain); computefiltercoefs(); } void AnalogFilter::setstages(int stages_) { if(stages_ >= MAX_FILTER_STAGES) stages_ = MAX_FILTER_STAGES - 1; stages = stages_; cleanup(); computefiltercoefs(); } inline void AnalogBiquadFilterA(const float coeff[5], float &src, float work[4]) { work[3] = src*coeff[0] + work[0]*coeff[1] + work[1]*coeff[2] + work[2]*coeff[3] + work[3]*coeff[4]; work[1] = src; src = work[3]; } inline void AnalogBiquadFilterB(const float coeff[5], float &src, float work[4]) { work[2] = src*coeff[0] + work[1]*coeff[1] + work[0]*coeff[2] + work[3]*coeff[3] + work[2]*coeff[4]; work[0] = src; src = work[2]; } void AnalogFilter::singlefilterout(float *smp, fstage &hist, const Coeff &coeff) { assert((buffersize % 8) == 0); if(order == 1) { //First order filter for(int i = 0; i < buffersize; ++i) { float y0 = smp[i] * coeff.c[0] + hist.x1 * coeff.c[1] + hist.y1 * coeff.d[1]; hist.y1 = y0; hist.x1 = smp[i]; smp[i] = y0; } } else if(order == 2) {//Second order filter const float coeff_[5] = {coeff.c[0], coeff.c[1], coeff.c[2], coeff.d[1], coeff.d[2]}; float work[4] = {hist.x1, hist.x2, hist.y1, hist.y2}; for(int i = 0; i < buffersize; i+=8) { AnalogBiquadFilterA(coeff_, smp[i + 0], work); AnalogBiquadFilterB(coeff_, smp[i + 1], work); AnalogBiquadFilterA(coeff_, smp[i + 2], work); AnalogBiquadFilterB(coeff_, smp[i + 3], work); AnalogBiquadFilterA(coeff_, smp[i + 4], work); AnalogBiquadFilterB(coeff_, smp[i + 5], work); AnalogBiquadFilterA(coeff_, smp[i + 6], work); AnalogBiquadFilterB(coeff_, smp[i + 7], work); } hist.x1 = work[0]; hist.x2 = work[1]; hist.y1 = work[2]; hist.y2 = work[3]; } } void AnalogFilter::filterout(float *smp) { for(int i = 0; i < stages + 1; ++i) singlefilterout(smp, history[i], coeff); if(needsinterpolation) { //Merge Filter at old coeff with new coeff float ismp[buffersize]; memcpy(ismp, smp, bufferbytes); for(int i = 0; i < stages + 1; ++i) singlefilterout(ismp, oldHistory[i], oldCoeff); for(int i = 0; i < buffersize; ++i) { float x = (float)i / buffersize_f; smp[i] = ismp[i] * (1.0f - x) + smp[i] * x; } needsinterpolation = false; } for(int i = 0; i < buffersize; ++i) smp[i] *= outgain; } float AnalogFilter::H(float freq) { float fr = freq / samplerate_f * PI * 2.0f; float x = coeff.c[0], y = 0.0f; for(int n = 1; n < 3; ++n) { x += cosf(n * fr) * coeff.c[n]; y -= sinf(n * fr) * coeff.c[n]; } float h = x * x + y * y; x = 1.0f; y = 0.0f; for(int n = 1; n < 3; ++n) { x -= cosf(n * fr) * coeff.d[n]; y += sinf(n * fr) * coeff.d[n]; } h = h / (x * x + y * y); return powf(h, (stages + 1.0f) / 2.0f); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h000066400000000000000000000061461247673406200250260ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Analog Filter.h - Several analog filters (lowpass, highpass...) Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2010-2010 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ANALOG_FILTER_H #define ANALOG_FILTER_H #include "../globals.h" #include "Filter.h" /**Implementation of Several analog filters (lowpass, highpass...) * Implemented with IIR filters * Coefficients generated with "Cookbook formulae for audio EQ"*/ class AnalogFilter:public Filter { public: AnalogFilter(unsigned char Ftype, float Ffreq, float Fq, unsigned char Fstages, unsigned int srate, int bufsize); ~AnalogFilter(); void filterout(float *smp); void setfreq(float frequency); void setfreq_and_q(float frequency, float q_); void setq(float q_); void settype(int type_); void setgain(float dBgain); void setstages(int stages_); void cleanup(); float H(float freq); //Obtains the response for a given frequency private: struct fstage { float x1, x2; //Input History float y1, y2; //Output History } history[MAX_FILTER_STAGES + 1], oldHistory[MAX_FILTER_STAGES + 1]; struct Coeff { float c[3], //Feed Forward d[3]; //Feed Back } coeff, oldCoeff; //old coeffs are used for interpolation when paremeters change quickly //Apply IIR filter to Samples, with coefficients, and past history void singlefilterout(float *smp, fstage &hist, const Coeff &coeff); //Update coeff and order void computefiltercoefs(void); int type; //The type of the filter (LPF1,HPF1,LPF2,HPF2...) int stages; //how many times the filter is applied (0->1,1->2,etc.) float freq; //Frequency given in Hz float q; //Q factor (resonance or Q factor) float gain; //the gain of the filter (if are shelf/peak) filters int order; //the order of the filter (number of poles) bool needsinterpolation, //Interpolation between coeff changes firsttime; //First Iteration of filter bool abovenq, //if the frequency is above the nyquist oldabovenq; //if the last time was above nyquist //(used to see if it needs interpolation) }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/CMakeLists.txt000066400000000000000000000002611247673406200250360ustar00rootroot00000000000000set(zynaddsubfx_dsp_SRCS DSP/AnalogFilter.cpp DSP/FFTwrapper.cpp DSP/Filter.cpp DSP/FormantFilter.cpp DSP/SVFilter.cpp DSP/Unison.cpp PARENT_SCOPE ) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp000066400000000000000000000044271247673406200250320ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer FFTwrapper.c - A wrapper for Fast Fourier Transforms Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "FFTwrapper.h" FFTwrapper::FFTwrapper(int fftsize_) { fftsize = fftsize_; time = new fftw_real[fftsize]; fft = new fftwf_complex[fftsize + 1]; planfftw = fftwf_plan_dft_r2c_1d(fftsize, time, fft, FFTW_ESTIMATE); planfftw_inv = fftwf_plan_dft_c2r_1d(fftsize, fft, time, FFTW_ESTIMATE); } FFTwrapper::~FFTwrapper() { fftwf_destroy_plan(planfftw); fftwf_destroy_plan(planfftw_inv); delete [] time; delete [] fft; } void FFTwrapper::smps2freqs(const float *smps, fft_t *freqs) { //Load data for(int i = 0; i < fftsize; ++i) time[i] = smps[i]; //DFT fftwf_execute(planfftw); //Grab data memcpy((void *)freqs, (const void *)fft, fftsize * sizeof(fftw_real)); } void FFTwrapper::freqs2smps(const fft_t *freqs, float *smps) { //Load data memcpy((void *)fft, (const void *)freqs, fftsize * sizeof(fftw_real)); //clear unused freq channel fft[fftsize / 2][0] = 0.0f; fft[fftsize / 2][1] = 0.0f; //IDFT fftwf_execute(planfftw_inv); //Grab data for(int i = 0; i < fftsize; ++i) smps[i] = static_cast(time[i]); } void FFT_cleanup() { fftwf_cleanup(); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h000066400000000000000000000033441247673406200244740ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer FFTwrapper.h - A wrapper for Fast Fourier Transforms Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef FFT_WRAPPER_H #define FFT_WRAPPER_H #include #include typedef float fftw_real; typedef std::complex fft_t; /**A wrapper for the FFTW library (Fast Fourier Transforms)*/ class FFTwrapper { public: /**Constructor * @param fftsize The size of samples to be fed to fftw*/ FFTwrapper(int fftsize_); /**Destructor*/ ~FFTwrapper(); /**Convert Samples to Frequencies using Fourier Transform * @param smps Pointer to Samples to be converted; has length fftsize_ * @param freqs Structure FFTFREQS which stores the frequencies*/ void smps2freqs(const float *smps, fft_t *freqs); void freqs2smps(const fft_t *freqs, float *smps); private: int fftsize; fftw_real *time; fftwf_complex *fft; fftwf_plan planfftw, planfftw_inv; }; void FFT_cleanup(); #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp000066400000000000000000000044041247673406200242320ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Filter.cpp - Filters, uses analog,formant,etc. filters Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "Filter.h" #include "AnalogFilter.h" #include "FormantFilter.h" #include "SVFilter.h" #include "../Params/FilterParams.h" Filter::Filter(unsigned int srate, int bufsize) : outgain(1.0f), samplerate(srate), buffersize(bufsize) { alias(); } Filter *Filter::generate(FilterParams *pars, unsigned int srate, int bufsize) { if (srate == 0) srate = synth->samplerate; if (bufsize == 0) bufsize = synth->buffersize; unsigned char Ftype = pars->Ptype; unsigned char Fstages = pars->Pstages; Filter *filter; switch(pars->Pcategory) { case 1: filter = new FormantFilter(pars, srate, bufsize); break; case 2: filter = new SVFilter(Ftype, 1000.0f, pars->getq(), Fstages, srate, bufsize); filter->outgain = dB2rap(pars->getgain()); if(filter->outgain > 1.0f) filter->outgain = sqrt(filter->outgain); break; default: filter = new AnalogFilter(Ftype, 1000.0f, pars->getq(), Fstages, srate, bufsize); if((Ftype >= 6) && (Ftype <= 8)) filter->setgain(pars->getgain()); else filter->outgain = dB2rap(pars->getgain()); break; } return filter; } float Filter::getrealfreq(float freqpitch) { return powf(2.0f, freqpitch + 9.96578428f); //log2(1000)=9.95748f } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h000066400000000000000000000036411247673406200237010ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Filter.h - Filters, uses analog,formant,etc. filters Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef FILTER_H #define FILTER_H #include "../globals.h" class Filter { public: static float getrealfreq(float freqpitch); static Filter *generate(class FilterParams * pars, unsigned int srate = 0, int bufsize = 0); Filter(unsigned int srate, int bufsize); virtual ~Filter() {} virtual void filterout(float *smp) = 0; virtual void setfreq(float frequency) = 0; virtual void setfreq_and_q(float frequency, float q_) = 0; virtual void setq(float q_) = 0; virtual void setgain(float dBgain) = 0; protected: float outgain; // current setup unsigned int samplerate; int buffersize; // alias for above terms float samplerate_f; float halfsamplerate_f; float buffersize_f; int bufferbytes; inline void alias() { samplerate_f = samplerate; halfsamplerate_f = samplerate_f / 2.0f; buffersize_f = buffersize; bufferbytes = buffersize * sizeof(float); } }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp000066400000000000000000000156451247673406200255720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer FormantFilter.cpp - formant filters Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "../Misc/Util.h" #include "FormantFilter.h" #include "AnalogFilter.h" #include "../Params/FilterParams.h" FormantFilter::FormantFilter(FilterParams *pars, unsigned int srate, int bufsize) : Filter(srate, bufsize) { numformants = pars->Pnumformants; for(int i = 0; i < numformants; ++i) formant[i] = new AnalogFilter(4 /*BPF*/, 1000.0f, 10.0f, pars->Pstages, srate, bufsize); cleanup(); for(int j = 0; j < FF_MAX_VOWELS; ++j) for(int i = 0; i < numformants; ++i) { formantpar[j][i].freq = pars->getformantfreq( pars->Pvowels[j].formants[i].freq); formantpar[j][i].amp = pars->getformantamp( pars->Pvowels[j].formants[i].amp); formantpar[j][i].q = pars->getformantq( pars->Pvowels[j].formants[i].q); } for(int i = 0; i < FF_MAX_FORMANTS; ++i) oldformantamp[i] = 1.0f; for(int i = 0; i < numformants; ++i) { currentformants[i].freq = 1000.0f; currentformants[i].amp = 1.0f; currentformants[i].q = 2.0f; } formantslowness = powf(1.0f - (pars->Pformantslowness / 128.0f), 3.0f); sequencesize = pars->Psequencesize; if(sequencesize == 0) sequencesize = 1; for(int k = 0; k < sequencesize; ++k) sequence[k].nvowel = pars->Psequence[k].nvowel; vowelclearness = powf(10.0f, (pars->Pvowelclearness - 32.0f) / 48.0f); sequencestretch = powf(0.1f, (pars->Psequencestretch - 32.0f) / 48.0f); if(pars->Psequencereversed) sequencestretch *= -1.0f; outgain = dB2rap(pars->getgain()); oldinput = -1.0f; Qfactor = 1.0f; oldQfactor = Qfactor; firsttime = 1; } FormantFilter::~FormantFilter() { for(int i = 0; i < numformants; ++i) delete (formant[i]); } void FormantFilter::cleanup() { for(int i = 0; i < numformants; ++i) formant[i]->cleanup(); } void FormantFilter::setpos(float input) { int p1, p2; if(firsttime != 0) slowinput = input; else slowinput = slowinput * (1.0f - formantslowness) + input * formantslowness; if((fabsf(oldinput - input) < 0.001f) && (fabsf(slowinput - input) < 0.001f) && (fabsf(Qfactor - oldQfactor) < 0.001f)) { // oldinput=input; daca setez asta, o sa faca probleme la schimbari foarte lente firsttime = 0; return; } else oldinput = input; float pos = fmodf(input * sequencestretch, 1.0f); if(pos < 0.0f) pos += 1.0f; F2I(pos * sequencesize, p2); p1 = p2 - 1; if(p1 < 0) p1 += sequencesize; pos = fmodf(pos * sequencesize, 1.0f); if(pos < 0.0f) pos = 0.0f; else if(pos > 1.0f) pos = 1.0f; pos = (atanf((pos * 2.0f - 1.0f) * vowelclearness) / atanf(vowelclearness) + 1.0f) * 0.5f; p1 = sequence[p1].nvowel; p2 = sequence[p2].nvowel; if(firsttime != 0) { for(int i = 0; i < numformants; ++i) { currentformants[i].freq = formantpar[p1][i].freq * (1.0f - pos) + formantpar[p2][i].freq * pos; currentformants[i].amp = formantpar[p1][i].amp * (1.0f - pos) + formantpar[p2][i].amp * pos; currentformants[i].q = formantpar[p1][i].q * (1.0f - pos) + formantpar[p2][i].q * pos; formant[i]->setfreq_and_q(currentformants[i].freq, currentformants[i].q * Qfactor); oldformantamp[i] = currentformants[i].amp; } firsttime = 0; } else for(int i = 0; i < numformants; ++i) { currentformants[i].freq = currentformants[i].freq * (1.0f - formantslowness) + (formantpar[p1][i].freq * (1.0f - pos) + formantpar[p2][i].freq * pos) * formantslowness; currentformants[i].amp = currentformants[i].amp * (1.0f - formantslowness) + (formantpar[p1][i].amp * (1.0f - pos) + formantpar[p2][i].amp * pos) * formantslowness; currentformants[i].q = currentformants[i].q * (1.0f - formantslowness) + (formantpar[p1][i].q * (1.0f - pos) + formantpar[p2][i].q * pos) * formantslowness; formant[i]->setfreq_and_q(currentformants[i].freq, currentformants[i].q * Qfactor); } oldQfactor = Qfactor; } void FormantFilter::setfreq(float frequency) { setpos(frequency); } void FormantFilter::setq(float q_) { Qfactor = q_; for(int i = 0; i < numformants; ++i) formant[i]->setq(Qfactor * currentformants[i].q); } void FormantFilter::setgain(float /*dBgain*/) {} inline float log_2(float x) { return logf(x) / logf(2.0f); } void FormantFilter::setfreq_and_q(float frequency, float q_) { //Convert form real freq[Hz] const float freq = log_2(frequency) - 9.96578428f; //log2(1000)=9.95748f. Qfactor = q_; setpos(freq); } void FormantFilter::filterout(float *smp) { float inbuffer[buffersize]; memcpy(inbuffer, smp, bufferbytes); memset(smp, 0, bufferbytes); for(int j = 0; j < numformants; ++j) { float tmpbuf[buffersize]; for(int i = 0; i < buffersize; ++i) tmpbuf[i] = inbuffer[i] * outgain; formant[j]->filterout(tmpbuf); if(ABOVE_AMPLITUDE_THRESHOLD(oldformantamp[j], currentformants[j].amp)) for(int i = 0; i < buffersize; ++i) smp[i] += tmpbuf[i] * INTERPOLATE_AMPLITUDE(oldformantamp[j], currentformants[j].amp, i, buffersize); else for(int i = 0; i < buffersize; ++i) smp[i] += tmpbuf[i] * currentformants[j].amp; oldformantamp[j] = currentformants[j].amp; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h000066400000000000000000000035761247673406200252370ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer FormantFilter.h - formant filter Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef FORMANT_FILTER_H #define FORMANT_FILTER_H #include "../globals.h" #include "Filter.h" class FormantFilter:public Filter { public: FormantFilter(class FilterParams *pars, unsigned int srate, int bufsize); ~FormantFilter(); void filterout(float *smp); void setfreq(float frequency); void setfreq_and_q(float frequency, float q_); void setq(float q_); void setgain(float dBgain); void cleanup(void); private: void setpos(float input); class AnalogFilter * formant[FF_MAX_FORMANTS]; struct { float freq, amp, q; //frequency,amplitude,Q } formantpar[FF_MAX_VOWELS][FF_MAX_FORMANTS], currentformants[FF_MAX_FORMANTS]; struct { unsigned char nvowel; } sequence [FF_MAX_SEQUENCE]; float oldformantamp[FF_MAX_FORMANTS]; int sequencesize, numformants, firsttime; float oldinput, slowinput; float Qfactor, formantslowness, oldQfactor; float vowelclearness, sequencestretch; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp000066400000000000000000000105101247673406200244760ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer SVFilter.cpp - Several state-variable filters Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #ifndef WIN32 #include #endif #include "../Misc/Util.h" #include "SVFilter.h" SVFilter::SVFilter(unsigned char Ftype, float Ffreq, float Fq, unsigned char Fstages, unsigned int srate, int bufsize) :Filter(srate, bufsize), type(Ftype), stages(Fstages), freq(Ffreq), q(Fq), gain(1.0f), needsinterpolation(false), firsttime(true) { if(stages >= MAX_FILTER_STAGES) stages = MAX_FILTER_STAGES; outgain = 1.0f; cleanup(); setfreq_and_q(Ffreq, Fq); } SVFilter::~SVFilter() {} void SVFilter::cleanup() { for(int i = 0; i < MAX_FILTER_STAGES + 1; ++i) st[i].low = st[i].high = st[i].band = st[i].notch = 0.0f; oldabovenq = false; abovenq = false; } void SVFilter::computefiltercoefs(void) { par.f = freq / samplerate_f * 4.0f; if(par.f > 0.99999f) par.f = 0.99999f; par.q = 1.0f - atanf(sqrtf(q)) * 2.0f / PI; par.q = powf(par.q, 1.0f / (stages + 1)); par.q_sqrt = sqrtf(par.q); } void SVFilter::setfreq(float frequency) { if(frequency < 0.1f) frequency = 0.1f; float rap = freq / frequency; if(rap < 1.0f) rap = 1.0f / rap; oldabovenq = abovenq; abovenq = frequency > (samplerate_f / 2 - 500.0f); bool nyquistthresh = (abovenq ^ oldabovenq); //if the frequency is changed fast, it needs interpolation if((rap > 3.0f) || nyquistthresh) { //(now, filter and coeficients backup) if(!firsttime) needsinterpolation = true; ipar = par; } freq = frequency; computefiltercoefs(); firsttime = false; } void SVFilter::setfreq_and_q(float frequency, float q_) { q = q_; setfreq(frequency); } void SVFilter::setq(float q_) { q = q_; computefiltercoefs(); } void SVFilter::settype(int type_) { type = type_; computefiltercoefs(); } void SVFilter::setgain(float dBgain) { gain = dB2rap(dBgain); computefiltercoefs(); } void SVFilter::setstages(int stages_) { if(stages_ >= MAX_FILTER_STAGES) stages_ = MAX_FILTER_STAGES - 1; stages = stages_; cleanup(); computefiltercoefs(); } void SVFilter::singlefilterout(float *smp, fstage &x, parameters &par) { float *out = NULL; switch(type) { case 0: out = &x.low; break; case 1: out = &x.high; break; case 2: out = &x.band; break; case 3: out = &x.notch; break; default: #ifndef WIN32 errx(1, "Impossible SVFilter type encountered [%d]", type); #endif break; } for(int i = 0; i < buffersize; ++i) { x.low = x.low + par.f * x.band; x.high = par.q_sqrt * smp[i] - x.low - par.q * x.band; x.band = par.f * x.high + x.band; x.notch = x.high + x.low; smp[i] = *out; } } void SVFilter::filterout(float *smp) { for(int i = 0; i < stages + 1; ++i) singlefilterout(smp, st[i], par); if(needsinterpolation) { float ismp[buffersize]; memcpy(ismp, smp, bufferbytes); for(int i = 0; i < stages + 1; ++i) singlefilterout(ismp, st[i], ipar); for(int i = 0; i < buffersize; ++i) { float x = i / buffersize_f; smp[i] = ismp[i] * (1.0f - x) + smp[i] * x; } needsinterpolation = false; } for(int i = 0; i < buffersize; ++i) smp[i] *= outgain; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h000066400000000000000000000043121247673406200241460ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer SV Filter.h - Several state-variable filters Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SV_FILTER_H #define SV_FILTER_H #include "../globals.h" #include "Filter.h" class SVFilter:public Filter { public: SVFilter(unsigned char Ftype, float Ffreq, float Fq, unsigned char Fstages, unsigned int srate, int bufsize); ~SVFilter(); void filterout(float *smp); void setfreq(float frequency); void setfreq_and_q(float frequency, float q_); void setq(float q_); void settype(int type_); void setgain(float dBgain); void setstages(int stages_); void cleanup(); private: struct fstage { float low, high, band, notch; } st[MAX_FILTER_STAGES + 1]; struct parameters { float f, q, q_sqrt; } par, ipar; void singlefilterout(float *smp, fstage &x, parameters &par); void computefiltercoefs(void); int type; // The type of the filter (LPF1,HPF1,LPF2,HPF2...) int stages; // how many times the filter is applied (0->1,1->2,etc.) float freq; // Frequency given in Hz float q; // Q factor (resonance or Q factor) float gain; // the gain of the filter (if are shelf/peak) filters bool abovenq, //if the frequency is above the nyquist oldabovenq; bool needsinterpolation, firsttime; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp000066400000000000000000000137561247673406200242720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Unison.cpp - Unison effect (multivoice chorus) Copyright (C) 2002-2009 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #ifndef WIN32 #include #endif #include "Unison.h" Unison::Unison(int update_period_samples_, float max_delay_sec_, float srate_f) :unison_size(0), base_freq(1.0f), uv(NULL), update_period_samples(update_period_samples_), update_period_sample_k(0), max_delay((int)(srate_f * max_delay_sec_) + 1), delay_k(0), first_time(false), delay_buffer(NULL), unison_amplitude_samples(0.0f), unison_bandwidth_cents(10.0f), samplerate_f(srate_f) { if(max_delay < 10) max_delay = 10; delay_buffer = new float[max_delay]; memset(delay_buffer, 0, max_delay * sizeof(float)); setSize(1); } Unison::~Unison() { delete [] delay_buffer; delete [] uv; } void Unison::setSize(int new_size) { if(new_size < 1) new_size = 1; unison_size = new_size; if(uv) delete [] uv; uv = new UnisonVoice[unison_size]; first_time = true; updateParameters(); } void Unison::setBaseFrequency(float freq) { base_freq = freq; updateParameters(); } void Unison::setBandwidth(float bandwidth) { if(bandwidth < 0) bandwidth = 0.0f; if(bandwidth > 1200.0f) bandwidth = 1200.0f; /* If the bandwidth is too small, the audio may cancel itself out * (due to the sign change of the outputs) * TODO figure out the acceptable lower bound and codify it */ unison_bandwidth_cents = bandwidth; updateParameters(); } void Unison::updateParameters(void) { if(!uv) return; float increments_per_second = samplerate_f / (float) update_period_samples; // printf("#%g, %g\n",increments_per_second,base_freq); for(int i = 0; i < unison_size; ++i) { float base = powf(UNISON_FREQ_SPAN, SYNTH_T::numRandom() * 2.0f - 1.0f); uv[i].relative_amplitude = base; float period = base / base_freq; float m = 4.0f / (period * increments_per_second); if(SYNTH_T::numRandom() < 0.5f) m = -m; uv[i].step = m; // printf("%g %g\n",uv[i].relative_amplitude,period); } float max_speed = powf(2.0f, unison_bandwidth_cents / 1200.0f); unison_amplitude_samples = 0.125f * (max_speed - 1.0f) * samplerate_f / base_freq; //If functions exceed this limit, they should have requested a bigguer delay //and thus are buggy if(unison_amplitude_samples >= max_delay - 1) { #ifndef WIN32 warnx("BUG: Unison amplitude samples too big"); warnx("Unision max_delay should be larger"); #endif unison_amplitude_samples = max_delay - 2; } updateUnisonData(); } void Unison::process(int bufsize, float *inbuf, float *outbuf) { if(!uv) return; if(!outbuf) outbuf = inbuf; float volume = 1.0f / sqrtf(unison_size); float xpos_step = 1.0f / (float) update_period_samples; float xpos = (float) update_period_sample_k * xpos_step; for(int i = 0; i < bufsize; ++i) { if(update_period_sample_k++ >= update_period_samples) { updateUnisonData(); update_period_sample_k = 0; xpos = 0.0f; } xpos += xpos_step; float in = inbuf[i], out = 0.0f; float sign = 1.0f; for(int k = 0; k < unison_size; ++k) { float vpos = uv[k].realpos1 * (1.0f - xpos) + uv[k].realpos2 * xpos; //optimize float pos = (float)(delay_k + max_delay) - vpos - 1.0f; int posi; F2I(pos, posi); //optimize! int posi_next = posi + 1; if(posi >= max_delay) posi -= max_delay; if(posi_next >= max_delay) posi_next -= max_delay; float posf = pos - floorf(pos); out += ((1.0f - posf) * delay_buffer[posi] + posf * delay_buffer[posi_next]) * sign; sign = -sign; } outbuf[i] = out * volume; // printf("%d %g\n",i,outbuf[i]); delay_buffer[delay_k] = in; delay_k = (++delay_k < max_delay) ? delay_k : 0; } } void Unison::updateUnisonData() { if(!uv) return; for(int k = 0; k < unison_size; ++k) { float pos = uv[k].position; float step = uv[k].step; pos += step; if(pos <= -1.0f) { pos = -1.0f; step = -step; } else if(pos >= 1.0f) { pos = 1.0f; step = -step; } float vibratto_val = (pos - 0.333333333f * pos * pos * pos) * 1.5f; //make the vibratto lfo smoother //Relative amplitude is utilized, so the delay may be larger than the //whole buffer, if the buffer is too small, this indicates a buggy call //to Unison() float newval = 1.0f + 0.5f * (vibratto_val + 1.0f) * unison_amplitude_samples * uv[k].relative_amplitude; if(first_time) uv[k].realpos1 = uv[k].realpos2 = newval; else { uv[k].realpos1 = uv[k].realpos2; uv[k].realpos2 = newval; } uv[k].position = pos; uv[k].step = step; } first_time = false; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h000066400000000000000000000043721247673406200237310ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Unison.h - Unison effect (multivoice chorus) Copyright (C) 2002-2009 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef UNISON_H #define UNISON_H #include "../Misc/Util.h" //how much the unison frequencies varies (always >= 1.0) #define UNISON_FREQ_SPAN 2.0f class Unison { public: Unison(int update_period_samples_, float max_delay_sec_, float srate_f); ~Unison(); void setSize(int new_size); void setBaseFrequency(float freq); void setBandwidth(float bandwidth_cents); void process(int bufsize, float *inbuf, float *outbuf = NULL); private: void updateParameters(void); void updateUnisonData(void); int unison_size; float base_freq; struct UnisonVoice { float step; //base LFO float position; float realpos1; //the position regarding samples float realpos2; float relative_amplitude; float lin_fpos; float lin_ffreq; UnisonVoice() { position = RND * 1.8f - 0.9f; realpos1 = 0.0f; realpos2 = 0.0f; step = 0.0f; relative_amplitude = 1.0f; } } *uv; int update_period_samples; int update_period_sample_k; int max_delay, delay_k; bool first_time; float *delay_buffer; float unison_amplitude_samples; float unison_bandwidth_cents; // current setup float samplerate_f; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/000077500000000000000000000000001247673406200232305ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp000066400000000000000000000140221247673406200254630ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Alienwah.cpp - "AlienWah" effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "Alienwah.h" Alienwah::Alienwah(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), lfo(srate, bufsize), oldl(NULL), oldr(NULL) { setpreset(Ppreset); cleanup(); oldclfol = complex(fb, 0.0f); oldclfor = complex(fb, 0.0f); } Alienwah::~Alienwah() { if(oldl != NULL) delete [] oldl; if(oldr != NULL) delete [] oldr; } //Apply the effect void Alienwah::out(const Stereo &smp) { float lfol, lfor; //Left/Right LFOs complex clfol, clfor; /**\todo Rework, as optimization can be used when the new complex type is * utilized. * Before all calculations needed to be done with individual float, * but now they can be done together*/ lfo.effectlfoout(&lfol, &lfor); lfol *= depth * PI * 2.0f; lfor *= depth * PI * 2.0f; clfol = complex(cosf(lfol + phase) * fb, sinf(lfol + phase) * fb); //rework clfor = complex(cosf(lfor + phase) * fb, sinf(lfor + phase) * fb); //rework for(int i = 0; i < buffersize; ++i) { float x = ((float) i) / buffersize_f; float x1 = 1.0f - x; //left complex tmp = clfol * x + oldclfol * x1; complex out = tmp * oldl[oldk]; out += (1 - fabs(fb)) * smp.l[i] * pangainL; oldl[oldk] = out; float l = out.real() * 10.0f * (fb + 0.1f); //right tmp = clfor * x + oldclfor * x1; out = tmp * oldr[oldk]; out += (1 - fabs(fb)) * smp.r[i] * pangainR; oldr[oldk] = out; float r = out.real() * 10.0f * (fb + 0.1f); if(++oldk >= Pdelay) oldk = 0; //LRcross efxoutl[i] = l * (1.0f - lrcross) + r * lrcross; efxoutr[i] = r * (1.0f - lrcross) + l * lrcross; } oldclfol = clfol; oldclfor = clfor; } //Cleanup the effect void Alienwah::cleanup(void) { for(int i = 0; i < Pdelay; ++i) { oldl[i] = complex(0.0f, 0.0f); oldr[i] = complex(0.0f, 0.0f); } oldk = 0; } //Parameter control void Alienwah::setdepth(unsigned char _Pdepth) { Pdepth = _Pdepth; depth = Pdepth / 127.0f; } void Alienwah::setfb(unsigned char _Pfb) { Pfb = _Pfb; fb = fabs((Pfb - 64.0f) / 64.1f); fb = sqrtf(fb); if(fb < 0.4f) fb = 0.4f; if(Pfb < 64) fb = -fb; } void Alienwah::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; outvolume = Pvolume / 127.0f; if(insertion == 0) volume = 1.0f; else volume = outvolume; } void Alienwah::setphase(unsigned char _Pphase) { Pphase = _Pphase; phase = (Pphase - 64.0f) / 64.0f * PI; } void Alienwah::setdelay(unsigned char _Pdelay) { if(oldl != NULL) delete [] oldl; if(oldr != NULL) delete [] oldr; Pdelay = (_Pdelay >= MAX_ALIENWAH_DELAY) ? MAX_ALIENWAH_DELAY : _Pdelay; oldl = new complex[Pdelay]; oldr = new complex[Pdelay]; cleanup(); } void Alienwah::setpreset(unsigned char npreset) { const int PRESET_SIZE = 11; const int NUM_PRESETS = 4; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { //AlienWah1 {127, 64, 70, 0, 0, 62, 60, 105, 25, 0, 64}, //AlienWah2 {127, 64, 73, 106, 0, 101, 60, 105, 17, 0, 64}, //AlienWah3 {127, 64, 63, 0, 1, 100, 112, 105, 31, 0, 42}, //AlienWah4 {93, 64, 25, 0, 1, 66, 101, 11, 47, 0, 86} }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); if(insertion == 0) changepar(0, presets[npreset][0] / 2); //lower the volume if this is system effect Ppreset = npreset; } void Alienwah::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: lfo.Pfreq = value; lfo.updateparams(); break; case 3: lfo.Prandomness = value; lfo.updateparams(); break; case 4: lfo.PLFOtype = value; lfo.updateparams(); break; case 5: lfo.Pstereo = value; lfo.updateparams(); break; case 6: setdepth(value); break; case 7: setfb(value); break; case 8: setdelay(value); break; case 9: setlrcross(value); break; case 10: setphase(value); break; } } unsigned char Alienwah::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return lfo.Pfreq; case 3: return lfo.Prandomness; case 4: return lfo.PLFOtype; case 5: return lfo.Pstereo; case 6: return Pdepth; case 7: return Pfb; case 8: return Pdelay; case 9: return Plrcross; case 10: return Pphase; default: return 0; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h000066400000000000000000000046421247673406200251370ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Alienwah.h - "AlienWah" effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ALIENWAH_H #define ALIENWAH_H #include #include "Effect.h" #include "EffectLFO.h" using namespace std; #define MAX_ALIENWAH_DELAY 100 /**"AlienWah" Effect*/ class Alienwah:public Effect { public: /** * Constructor * @param insertion_ true for insertion Effect * @param efxoutl_ Pointer to Alienwah's left channel output buffer * @param efxoutr_ Pointer to Alienwah's left channel output buffer * @return Initialized Alienwah */ Alienwah(bool insertion_, float *const efxoutl_, float *const efxoutr_, unsigned int srate, int bufsize); ~Alienwah(); void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); unsigned char getpar(int npar) const; void cleanup(void); private: //Alienwah Parameters EffectLFO lfo; //lfo-ul Alienwah unsigned char Pvolume; unsigned char Pdepth; //the depth of the Alienwah unsigned char Pfb; //feedback unsigned char Pdelay; unsigned char Pphase; //Control Parameters void setvolume(unsigned char _Pvolume); void setdepth(unsigned char _Pdepth); void setfb(unsigned char _Pfb); void setdelay(unsigned char _Pdelay); void setphase(unsigned char _Pphase); //Internal Values float fb, depth, phase; complex *oldl, *oldr; complex oldclfol, oldclfor; int oldk; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/CMakeLists.txt000066400000000000000000000004331247673406200257700ustar00rootroot00000000000000set(zynaddsubfx_effect_SRCS Effects/Alienwah.cpp Effects/Chorus.cpp Effects/Distorsion.cpp Effects/DynamicFilter.cpp Effects/Echo.cpp Effects/Effect.cpp Effects/EffectLFO.cpp Effects/EffectMgr.cpp Effects/EQ.cpp Effects/Phaser.cpp Effects/Reverb.cpp PARENT_SCOPE ) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp000066400000000000000000000167431247673406200252120ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Chorus.cpp - Chorus and Flange effects Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "Chorus.h" #include using namespace std; Chorus::Chorus(bool insertion_, float *const efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), lfo(srate, bufsize), maxdelay((int)(MAX_CHORUS_DELAY / 1000.0f * samplerate_f)), delaySample(new float[maxdelay], new float[maxdelay]) { dlk = 0; drk = 0; setpreset(Ppreset); changepar(1, 64); lfo.effectlfoout(&lfol, &lfor); dl2 = getdelay(lfol); dr2 = getdelay(lfor); cleanup(); } Chorus::~Chorus() { delete [] delaySample.l; delete [] delaySample.r; } //get the delay value in samples; xlfo is the current lfo value float Chorus::getdelay(float xlfo) { float result = (Pflangemode) ? 0 : (delay + xlfo * depth) * samplerate_f; //check if delay is too big (caused by bad setdelay() and setdepth() if((result + 0.5f) >= maxdelay) { cerr << "WARNING: Chorus.cpp::getdelay(..) too big delay (see setdelay and setdepth funcs.)" << endl; result = maxdelay - 1.0f; } return result; } //Apply the effect void Chorus::out(const Stereo &input) { const float one = 1.0f; dl1 = dl2; dr1 = dr2; lfo.effectlfoout(&lfol, &lfor); dl2 = getdelay(lfol); dr2 = getdelay(lfor); for(int i = 0; i < buffersize; ++i) { float inL = input.l[i]; float inR = input.r[i]; //LRcross Stereo tmpc(inL, inR); inL = tmpc.l * (1.0f - lrcross) + tmpc.r * lrcross; inR = tmpc.r * (1.0f - lrcross) + tmpc.l * lrcross; //Left channel //compute the delay in samples using linear interpolation between the lfo delays float mdel = (dl1 * (buffersize - i) + dl2 * i) / buffersize_f; if(++dlk >= maxdelay) dlk = 0; float tmp = dlk - mdel + maxdelay * 2.0f; //where should I get the sample from dlhi = (int) tmp; dlhi %= maxdelay; float dlhi2 = (dlhi - 1 + maxdelay) % maxdelay; float dllo = 1.0f - fmod(tmp, one); efxoutl[i] = cinterpolate(delaySample.l, maxdelay, dlhi2) * dllo + cinterpolate(delaySample.l, maxdelay, dlhi) * (1.0f - dllo); delaySample.l[dlk] = inL + efxoutl[i] * fb; //Right channel //compute the delay in samples using linear interpolation between the lfo delays mdel = (dr1 * (buffersize - i) + dr2 * i) / buffersize_f; if(++drk >= maxdelay) drk = 0; tmp = drk * 1.0f - mdel + maxdelay * 2.0f; //where should I get the sample from dlhi = (int) tmp; dlhi %= maxdelay; dlhi2 = (dlhi - 1 + maxdelay) % maxdelay; dllo = 1.0f - fmodf(tmp, one); efxoutr[i] = cinterpolate(delaySample.r, maxdelay, dlhi2) * dllo + cinterpolate(delaySample.r, maxdelay, dlhi) * (1.0f - dllo); delaySample.r[dlk] = inR + efxoutr[i] * fb; } if(Poutsub) for(int i = 0; i < buffersize; ++i) { efxoutl[i] *= -1.0f; efxoutr[i] *= -1.0f; } for(int i = 0; i < buffersize; ++i) { efxoutl[i] *= pangainL; efxoutr[i] *= pangainR; } } //Cleanup the effect void Chorus::cleanup(void) { memset(delaySample.l, 0, maxdelay * sizeof(float)); memset(delaySample.r, 0, maxdelay * sizeof(float)); } //Parameter control void Chorus::setdepth(unsigned char _Pdepth) { Pdepth = _Pdepth; depth = (powf(8.0f, (Pdepth / 127.0f) * 2.0f) - 1.0f) / 1000.0f; //seconds } void Chorus::setdelay(unsigned char _Pdelay) { Pdelay = _Pdelay; delay = (powf(10.0f, (Pdelay / 127.0f) * 2.0f) - 1.0f) / 1000.0f; //seconds } void Chorus::setfb(unsigned char _Pfb) { Pfb = _Pfb; fb = (Pfb - 64.0f) / 64.1f; } void Chorus::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; outvolume = Pvolume / 127.0f; volume = (!insertion) ? 1.0f : outvolume; } void Chorus::setpreset(unsigned char npreset) { const int PRESET_SIZE = 12; const int NUM_PRESETS = 10; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { //Chorus1 {64, 64, 50, 0, 0, 90, 40, 85, 64, 119, 0, 0}, //Chorus2 {64, 64, 45, 0, 0, 98, 56, 90, 64, 19, 0, 0}, //Chorus3 {64, 64, 29, 0, 1, 42, 97, 95, 90, 127, 0, 0}, //Celeste1 {64, 64, 26, 0, 0, 42, 115, 18, 90, 127, 0, 0}, //Celeste2 {64, 64, 29, 117, 0, 50, 115, 9, 31, 127, 0, 1}, //Flange1 {64, 64, 57, 0, 0, 60, 23, 3, 62, 0, 0, 0}, //Flange2 {64, 64, 33, 34, 1, 40, 35, 3, 109, 0, 0, 0}, //Flange3 {64, 64, 53, 34, 1, 94, 35, 3, 54, 0, 0, 1}, //Flange4 {64, 64, 40, 0, 1, 62, 12, 19, 97, 0, 0, 0}, //Flange5 {64, 64, 55, 105, 0, 24, 39, 19, 17, 0, 0, 1} }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); Ppreset = npreset; } void Chorus::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: lfo.Pfreq = value; lfo.updateparams(); break; case 3: lfo.Prandomness = value; lfo.updateparams(); break; case 4: lfo.PLFOtype = value; lfo.updateparams(); break; case 5: lfo.Pstereo = value; lfo.updateparams(); break; case 6: setdepth(value); break; case 7: setdelay(value); break; case 8: setfb(value); break; case 9: setlrcross(value); break; case 10: Pflangemode = (value > 1) ? 1 : value; break; case 11: Poutsub = (value > 1) ? 1 : value; break; } } unsigned char Chorus::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return lfo.Pfreq; case 3: return lfo.Prandomness; case 4: return lfo.PLFOtype; case 5: return lfo.Pstereo; case 6: return Pdepth; case 7: return Pdelay; case 8: return Pfb; case 9: return Plrcross; case 10: return Pflangemode; case 11: return Poutsub; default: return 0; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h000066400000000000000000000064141247673406200246510ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Chorus.h - Chorus and Flange effects Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CHORUS_H #define CHORUS_H #include "Effect.h" #include "EffectLFO.h" #include "../Misc/Stereo.h" #define MAX_CHORUS_DELAY 250.0f //ms /**Chorus and Flange effects*/ class Chorus:public Effect { public: Chorus(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); /**Destructor*/ ~Chorus(); void out(const Stereo &input); void setpreset(unsigned char npreset); /** * Sets the value of the chosen variable * * The possible parameters are: * -# Volume * -# Panning * -# LFO Frequency * -# LFO Randomness * -# LFO Type * -# LFO stereo * -# Depth * -# Delay * -# Feedback * -# Flange Mode * -# Subtractive * @param npar number of chosen parameter * @param value the new value */ void changepar(int npar, unsigned char value); /** * Gets the value of the chosen variable * * The possible parameters are: * -# Volume * -# Panning * -# LFO Frequency * -# LFO Randomness * -# LFO Type * -# LFO stereo * -# Depth * -# Delay * -# Feedback * -# Flange Mode * -# Subtractive * @param npar number of chosen parameter * @return the value of the parameter */ unsigned char getpar(int npar) const; void cleanup(void); private: //Chorus Parameters unsigned char Pvolume; unsigned char Pdepth; //the depth of the Chorus(ms) unsigned char Pdelay; //the delay (ms) unsigned char Pfb; //feedback unsigned char Pflangemode; //how the LFO is scaled, to result chorus or flange unsigned char Poutsub; //if I wish to substract the output instead of the adding it EffectLFO lfo; //lfo-ul chorus //Parameter Controls void setvolume(unsigned char _Pvolume); void setdepth(unsigned char _Pdepth); void setdelay(unsigned char _Pdelay); void setfb(unsigned char _Pfb); //Internal Values float depth, delay, fb; float dl1, dl2, dr1, dr2, lfol, lfor; int maxdelay; Stereo delaySample; int dlk, drk, dlhi; float getdelay(float xlfo); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp000066400000000000000000000145361247673406200261020ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Distorsion.cpp - Distorsion effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Distorsion.h" #include "../DSP/AnalogFilter.h" #include "../Misc/WaveShapeSmps.h" #include Distorsion::Distorsion(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), Pvolume(50), Pdrive(90), Plevel(64), Ptype(0), Pnegate(0), Plpf(127), Phpf(0), Pstereo(0), Pprefiltering(0) { lpfl = new AnalogFilter(2, 22000, 1, 0, srate, bufsize); lpfr = new AnalogFilter(2, 22000, 1, 0, srate, bufsize); hpfl = new AnalogFilter(3, 20, 1, 0, srate, bufsize); hpfr = new AnalogFilter(3, 20, 1, 0, srate, bufsize); setpreset(Ppreset); cleanup(); } Distorsion::~Distorsion() { delete lpfl; delete lpfr; delete hpfl; delete hpfr; } //Cleanup the effect void Distorsion::cleanup(void) { lpfl->cleanup(); hpfl->cleanup(); lpfr->cleanup(); hpfr->cleanup(); } //Apply the filters void Distorsion::applyfilters(float *efxoutl, float *efxoutr) { lpfl->filterout(efxoutl); hpfl->filterout(efxoutl); if(Pstereo != 0) { //stereo lpfr->filterout(efxoutr); hpfr->filterout(efxoutr); } } //Effect output void Distorsion::out(const Stereo &smp) { float inputvol = powf(5.0f, (Pdrive - 32.0f) / 127.0f); if(Pnegate) inputvol *= -1.0f; if(Pstereo) //Stereo for(int i = 0; i < buffersize; ++i) { efxoutl[i] = smp.l[i] * inputvol * pangainL; efxoutr[i] = smp.r[i] * inputvol * pangainR; } else //Mono for(int i = 0; i < buffersize; ++i) efxoutl[i] = (smp.l[i] * pangainL + smp.r[i] * pangainR) * inputvol; if(Pprefiltering) applyfilters(efxoutl, efxoutr); waveShapeSmps(buffersize, efxoutl, Ptype + 1, Pdrive); if(Pstereo) waveShapeSmps(buffersize, efxoutr, Ptype + 1, Pdrive); if(!Pprefiltering) applyfilters(efxoutl, efxoutr); if(!Pstereo) memcpy(efxoutr, efxoutl, bufferbytes); float level = dB2rap(60.0f * Plevel / 127.0f - 40.0f); for(int i = 0; i < buffersize; ++i) { float lout = efxoutl[i]; float rout = efxoutr[i]; float l = lout * (1.0f - lrcross) + rout * lrcross; float r = rout * (1.0f - lrcross) + lout * lrcross; lout = l; rout = r; efxoutl[i] = lout * 2.0f * level; efxoutr[i] = rout * 2.0f * level; } } //Parameter control void Distorsion::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; if(insertion == 0) { outvolume = powf(0.01f, (1.0f - Pvolume / 127.0f)) * 4.0f; volume = 1.0f; } else volume = outvolume = Pvolume / 127.0f; if(Pvolume == 0) cleanup(); } void Distorsion::setlpf(unsigned char _Plpf) { Plpf = _Plpf; float fr = expf(powf(Plpf / 127.0f, 0.5f) * logf(25000.0f)) + 40.0f; lpfl->setfreq(fr); lpfr->setfreq(fr); } void Distorsion::sethpf(unsigned char _Phpf) { Phpf = _Phpf; float fr = expf(powf(Phpf / 127.0f, 0.5f) * logf(25000.0f)) + 20.0f; hpfl->setfreq(fr); hpfr->setfreq(fr); } void Distorsion::setpreset(unsigned char npreset) { const int PRESET_SIZE = 11; const int NUM_PRESETS = 6; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { //Overdrive 1 {127, 64, 35, 56, 70, 0, 0, 96, 0, 0, 0}, //Overdrive 2 {127, 64, 35, 29, 75, 1, 0, 127, 0, 0, 0}, //A. Exciter 1 {64, 64, 35, 75, 80, 5, 0, 127, 105, 1, 0}, //A. Exciter 2 {64, 64, 35, 85, 62, 1, 0, 127, 118, 1, 0}, //Guitar Amp {127, 64, 35, 63, 75, 2, 0, 55, 0, 0, 0}, //Quantisize {127, 64, 35, 88, 75, 4, 0, 127, 0, 1, 0} }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); if(!insertion) //lower the volume if this is system effect changepar(0, (int) (presets[npreset][0] / 1.5f)); Ppreset = npreset; cleanup(); } void Distorsion::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: setlrcross(value); break; case 3: Pdrive = value; break; case 4: Plevel = value; break; case 5: if(value > 13) Ptype = 13; //this must be increased if more distorsion types are added else Ptype = value; break; case 6: if(value > 1) Pnegate = 1; else Pnegate = value; break; case 7: setlpf(value); break; case 8: sethpf(value); break; case 9: Pstereo = (value > 1) ? 1 : value; break; case 10: Pprefiltering = value; break; } } unsigned char Distorsion::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return Plrcross; case 3: return Pdrive; case 4: return Plevel; case 5: return Ptype; case 6: return Pnegate; case 7: return Plpf; case 8: return Phpf; case 9: return Pstereo; case 10: return Pprefiltering; default: return 0; //in case of bogus parameter number } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h000066400000000000000000000042121247673406200255350ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Distorsion.h - Distorsion Effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef DISTORSION_H #define DISTORSION_H #include "Effect.h" /**Distortion Effect*/ class Distorsion:public Effect { public: Distorsion(bool insertion, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~Distorsion(); void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); unsigned char getpar(int npar) const; void cleanup(void); void applyfilters(float *efxoutl, float *efxoutr); private: //Parameters unsigned char Pvolume; //Volume or E/R unsigned char Pdrive; //the input amplification unsigned char Plevel; //the output amplification unsigned char Ptype; //Distorsion type unsigned char Pnegate; //if the input is negated unsigned char Plpf; //lowpass filter unsigned char Phpf; //highpass filter unsigned char Pstereo; //0=mono, 1=stereo unsigned char Pprefiltering; //if you want to do the filtering before the distorsion void setvolume(unsigned char _Pvolume); void setlpf(unsigned char _Plpf); void sethpf(unsigned char _Phpf); //Real Parameters class AnalogFilter * lpfl, *lpfr, *hpfl, *hpfr; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp000066400000000000000000000223341247673406200264720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer DynamicFilter.cpp - "WahWah" effect and others Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "DynamicFilter.h" #include "../DSP/Filter.h" DynamicFilter::DynamicFilter(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, new FilterParams(0, 64, 64), 0, srate, bufsize), lfo(srate, bufsize), Pvolume(110), Pdepth(0), Pampsns(90), Pampsnsinv(0), Pampsmooth(60), filterl(NULL), filterr(NULL) { setpreset(Ppreset); cleanup(); } DynamicFilter::~DynamicFilter() { delete filterpars; delete filterl; delete filterr; } // Apply the effect void DynamicFilter::out(const Stereo &smp) { if(filterpars->changed) { filterpars->changed = false; cleanup(); } float lfol, lfor; lfo.effectlfoout(&lfol, &lfor); lfol *= depth * 5.0f; lfor *= depth * 5.0f; const float freq = filterpars->getfreq(); const float q = filterpars->getq(); for(int i = 0; i < buffersize; ++i) { efxoutl[i] = smp.l[i]; efxoutr[i] = smp.r[i]; const float x = (fabsf(smp.l[i]) + fabsf(smp.r[i])) * 0.5f; ms1 = ms1 * (1.0f - ampsmooth) + x * ampsmooth + 1e-10; } const float ampsmooth2 = powf(ampsmooth, 0.2f) * 0.3f; ms2 = ms2 * (1.0f - ampsmooth2) + ms1 * ampsmooth2; ms3 = ms3 * (1.0f - ampsmooth2) + ms2 * ampsmooth2; ms4 = ms4 * (1.0f - ampsmooth2) + ms3 * ampsmooth2; const float rms = (sqrtf(ms4)) * ampsns; const float frl = Filter::getrealfreq(freq + lfol + rms); const float frr = Filter::getrealfreq(freq + lfor + rms); filterl->setfreq_and_q(frl, q); filterr->setfreq_and_q(frr, q); filterl->filterout(efxoutl); filterr->filterout(efxoutr); //panning for(int i = 0; i < buffersize; ++i) { efxoutl[i] *= pangainL; efxoutr[i] *= pangainR; } } // Cleanup the effect void DynamicFilter::cleanup(void) { reinitfilter(); ms1 = ms2 = ms3 = ms4 = 0.0f; } //Parameter control void DynamicFilter::setdepth(unsigned char _Pdepth) { Pdepth = _Pdepth; depth = powf(Pdepth / 127.0f, 2.0f); } void DynamicFilter::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; outvolume = Pvolume / 127.0f; if(!insertion) volume = 1.0f; else volume = outvolume; } void DynamicFilter::setampsns(unsigned char _Pampsns) { Pampsns = _Pampsns; ampsns = powf(Pampsns / 127.0f, 2.5f) * 10.0f; if(Pampsnsinv) ampsns = -ampsns; ampsmooth = expf(-Pampsmooth / 127.0f * 10.0f) * 0.99f; } void DynamicFilter::reinitfilter(void) { delete filterl; delete filterr; filterl = Filter::generate(filterpars, samplerate, buffersize); filterr = Filter::generate(filterpars, samplerate, buffersize); } void DynamicFilter::setpreset(unsigned char npreset) { const int PRESET_SIZE = 10; const int NUM_PRESETS = 5; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { //WahWah {110, 64, 80, 0, 0, 64, 0, 90, 0, 60}, //AutoWah {110, 64, 70, 0, 0, 80, 70, 0, 0, 60}, //Sweep {100, 64, 30, 0, 0, 50, 80, 0, 0, 60}, //VocalMorph1 {110, 64, 80, 0, 0, 64, 0, 64, 0, 60}, //VocalMorph1 {127, 64, 50, 0, 0, 96, 64, 0, 0, 60} }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); filterpars->defaults(); switch(npreset) { case 0: filterpars->Pcategory = 0; filterpars->Ptype = 2; filterpars->Pfreq = 45; filterpars->Pq = 64; filterpars->Pstages = 1; filterpars->Pgain = 64; break; case 1: filterpars->Pcategory = 2; filterpars->Ptype = 0; filterpars->Pfreq = 72; filterpars->Pq = 64; filterpars->Pstages = 0; filterpars->Pgain = 64; break; case 2: filterpars->Pcategory = 0; filterpars->Ptype = 4; filterpars->Pfreq = 64; filterpars->Pq = 64; filterpars->Pstages = 2; filterpars->Pgain = 64; break; case 3: filterpars->Pcategory = 1; filterpars->Ptype = 0; filterpars->Pfreq = 50; filterpars->Pq = 70; filterpars->Pstages = 1; filterpars->Pgain = 64; filterpars->Psequencesize = 2; // "I" filterpars->Pvowels[0].formants[0].freq = 34; filterpars->Pvowels[0].formants[0].amp = 127; filterpars->Pvowels[0].formants[0].q = 64; filterpars->Pvowels[0].formants[1].freq = 99; filterpars->Pvowels[0].formants[1].amp = 122; filterpars->Pvowels[0].formants[1].q = 64; filterpars->Pvowels[0].formants[2].freq = 108; filterpars->Pvowels[0].formants[2].amp = 112; filterpars->Pvowels[0].formants[2].q = 64; // "A" filterpars->Pvowels[1].formants[0].freq = 61; filterpars->Pvowels[1].formants[0].amp = 127; filterpars->Pvowels[1].formants[0].q = 64; filterpars->Pvowels[1].formants[1].freq = 71; filterpars->Pvowels[1].formants[1].amp = 121; filterpars->Pvowels[1].formants[1].q = 64; filterpars->Pvowels[1].formants[2].freq = 99; filterpars->Pvowels[1].formants[2].amp = 117; filterpars->Pvowels[1].formants[2].q = 64; break; case 4: filterpars->Pcategory = 1; filterpars->Ptype = 0; filterpars->Pfreq = 64; filterpars->Pq = 70; filterpars->Pstages = 1; filterpars->Pgain = 64; filterpars->Psequencesize = 2; filterpars->Pnumformants = 2; filterpars->Pvowelclearness = 0; filterpars->Pvowels[0].formants[0].freq = 70; filterpars->Pvowels[0].formants[0].amp = 127; filterpars->Pvowels[0].formants[0].q = 64; filterpars->Pvowels[0].formants[1].freq = 80; filterpars->Pvowels[0].formants[1].amp = 122; filterpars->Pvowels[0].formants[1].q = 64; filterpars->Pvowels[1].formants[0].freq = 20; filterpars->Pvowels[1].formants[0].amp = 127; filterpars->Pvowels[1].formants[0].q = 64; filterpars->Pvowels[1].formants[1].freq = 100; filterpars->Pvowels[1].formants[1].amp = 121; filterpars->Pvowels[1].formants[1].q = 64; break; } // for (int i=0;i<5;i++){ // printf("freq=%d amp=%d q=%d\n",filterpars->Pvowels[0].formants[i].freq,filterpars->Pvowels[0].formants[i].amp,filterpars->Pvowels[0].formants[i].q); // }; if(insertion == 0) //lower the volume if this is system effect changepar(0, presets[npreset][0] * 0.5f); Ppreset = npreset; reinitfilter(); } void DynamicFilter::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: lfo.Pfreq = value; lfo.updateparams(); break; case 3: lfo.Prandomness = value; lfo.updateparams(); break; case 4: lfo.PLFOtype = value; lfo.updateparams(); break; case 5: lfo.Pstereo = value; lfo.updateparams(); break; case 6: setdepth(value); break; case 7: setampsns(value); break; case 8: Pampsnsinv = value; setampsns(Pampsns); break; case 9: Pampsmooth = value; setampsns(Pampsns); break; } } unsigned char DynamicFilter::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return lfo.Pfreq; case 3: return lfo.Prandomness; case 4: return lfo.PLFOtype; case 5: return lfo.Pstereo; case 6: return Pdepth; case 7: return Pampsns; case 8: return Pampsnsinv; case 9: return Pampsmooth; default: return 0; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h000066400000000000000000000042651247673406200261420ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer DynamicFilter.h - "WahWah" effect and others Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef DYNAMICFILTER_H #define DYNAMICFILTER_H #include "Effect.h" #include "EffectLFO.h" /**DynamicFilter Effect*/ class DynamicFilter:public Effect { public: DynamicFilter(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~DynamicFilter(); void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); unsigned char getpar(int npar) const; void cleanup(void); private: //Parametrii DynamicFilter EffectLFO lfo; //lfo-ul DynamicFilter unsigned char Pvolume; //Volume unsigned char Pdepth; //the depth of the lfo unsigned char Pampsns; //how the filter varies according to the input amplitude unsigned char Pampsnsinv; //if the filter freq is lowered if the input amplitude rises unsigned char Pampsmooth; //how smooth the input amplitude changes the filter //Parameter Control void setvolume(unsigned char _Pvolume); void setdepth(unsigned char _Pdepth); void setampsns(unsigned char _Pampsns); void reinitfilter(void); //Internal Values float depth, ampsns, ampsmooth; class Filter * filterl, *filterr; float ms1, ms2, ms3, ms4; //mean squares }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp000066400000000000000000000121701247673406200242420ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EQ.cpp - EQ effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "EQ.h" #include "../DSP/AnalogFilter.h" EQ::EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize) { for(int i = 0; i < MAX_EQ_BANDS; ++i) { filter[i].Ptype = 0; filter[i].Pfreq = 64; filter[i].Pgain = 64; filter[i].Pq = 64; filter[i].Pstages = 0; filter[i].l = new AnalogFilter(6, 1000.0f, 1.0f, 0, srate, bufsize); filter[i].r = new AnalogFilter(6, 1000.0f, 1.0f, 0, srate, bufsize); } //default values Pvolume = 50; setpreset(Ppreset); cleanup(); } // Cleanup the effect void EQ::cleanup(void) { for(int i = 0; i < MAX_EQ_BANDS; ++i) { filter[i].l->cleanup(); filter[i].r->cleanup(); } } //Effect output void EQ::out(const Stereo &smp) { for(int i = 0; i < buffersize; ++i) { efxoutl[i] = smp.l[i] * volume; efxoutr[i] = smp.r[i] * volume; } for(int i = 0; i < MAX_EQ_BANDS; ++i) { if(filter[i].Ptype == 0) continue; filter[i].l->filterout(efxoutl); filter[i].r->filterout(efxoutr); } } //Parameter control void EQ::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; outvolume = powf(0.005f, (1.0f - Pvolume / 127.0f)) * 10.0f; volume = (!insertion) ? 1.0f : outvolume; } void EQ::setpreset(unsigned char npreset) { const int PRESET_SIZE = 1; const int NUM_PRESETS = 2; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { {67}, //EQ 1 {67} //EQ 2 }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); Ppreset = npreset; } void EQ::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; } if(npar < 10) return; int nb = (npar - 10) / 5; //number of the band (filter) if(nb >= MAX_EQ_BANDS) return; int bp = npar % 5; //band paramenter float tmp; switch(bp) { case 0: filter[nb].Ptype = value; if(value > 9) filter[nb].Ptype = 0; //has to be changed if more filters will be added if(filter[nb].Ptype != 0) { filter[nb].l->settype(value - 1); filter[nb].r->settype(value - 1); } break; case 1: filter[nb].Pfreq = value; tmp = 600.0f * powf(30.0f, (value - 64.0f) / 64.0f); filter[nb].l->setfreq(tmp); filter[nb].r->setfreq(tmp); break; case 2: filter[nb].Pgain = value; tmp = 30.0f * (value - 64.0f) / 64.0f; filter[nb].l->setgain(tmp); filter[nb].r->setgain(tmp); break; case 3: filter[nb].Pq = value; tmp = powf(30.0f, (value - 64.0f) / 64.0f); filter[nb].l->setq(tmp); filter[nb].r->setq(tmp); break; case 4: filter[nb].Pstages = value; if(value >= MAX_FILTER_STAGES) filter[nb].Pstages = MAX_FILTER_STAGES - 1; filter[nb].l->setstages(value); filter[nb].r->setstages(value); break; } } unsigned char EQ::getpar(int npar) const { switch(npar) { case 0: return Pvolume; break; } if(npar < 10) return 0; int nb = (npar - 10) / 5; //number of the band (filter) if(nb >= MAX_EQ_BANDS) return 0; int bp = npar % 5; //band paramenter switch(bp) { case 0: return filter[nb].Ptype; break; case 1: return filter[nb].Pfreq; break; case 2: return filter[nb].Pgain; break; case 3: return filter[nb].Pq; break; case 4: return filter[nb].Pstages; break; default: return 0; //in case of bogus parameter number } } float EQ::getfreqresponse(float freq) { float resp = 1.0f; for(int i = 0; i < MAX_EQ_BANDS; ++i) { if(filter[i].Ptype == 0) continue; resp *= filter[i].l->H(freq); } return rap2dB(resp * outvolume); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h000066400000000000000000000031261247673406200237100ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EQ.h - EQ Effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EQ_H #define EQ_H #include "Effect.h" /**EQ Effect*/ class EQ:public Effect { public: EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~EQ() {} void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); unsigned char getpar(int npar) const; void cleanup(void); float getfreqresponse(float freq); private: //Parameters unsigned char Pvolume; void setvolume(unsigned char _Pvolume); struct { //parameters unsigned char Ptype, Pfreq, Pgain, Pq, Pstages; //internal values class AnalogFilter * l, *r; } filter[MAX_EQ_BANDS]; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp000066400000000000000000000136041247673406200246160ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Echo.cpp - Echo effect Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2009-2010 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "Echo.h" #define MAX_DELAY 2 Echo::Echo(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), samplerate(srate), Pvolume(50), Pdelay(60), Plrdelay(100), Pfb(40), Phidamp(60), delayTime(1), lrdelay(0), avgDelay(0), delay(new float[(int)(MAX_DELAY * srate)], new float[(int)(MAX_DELAY * srate)]), old(0.0f), pos(0), delta(1), ndelta(1) { initdelays(); setpreset(Ppreset); } Echo::~Echo() { delete[] delay.l; delete[] delay.r; } //Cleanup the effect void Echo::cleanup(void) { memset(delay.l, 0, MAX_DELAY * samplerate * sizeof(float)); memset(delay.r, 0, MAX_DELAY * samplerate * sizeof(float)); old = Stereo(0.0f); } inline int max(int a, int b) { return a > b ? a : b; } //Initialize the delays void Echo::initdelays(void) { cleanup(); //number of seconds to delay left chan float dl = avgDelay - lrdelay; //number of seconds to delay right chan float dr = avgDelay + lrdelay; ndelta.l = max(1, (int) (dl * samplerate)); ndelta.r = max(1, (int) (dr * samplerate)); } //Effect output void Echo::out(const Stereo &input) { for(int i = 0; i < buffersize; ++i) { float ldl = delay.l[pos.l]; float rdl = delay.r[pos.r]; ldl = ldl * (1.0f - lrcross) + rdl * lrcross; rdl = rdl * (1.0f - lrcross) + ldl * lrcross; efxoutl[i] = ldl * 2.0f; efxoutr[i] = rdl * 2.0f; ldl = input.l[i] * pangainL - ldl * fb; rdl = input.r[i] * pangainR - rdl * fb; //LowPass Filter old.l = delay.l[(pos.l + delta.l) % (MAX_DELAY * samplerate)] = ldl * hidamp + old.l * (1.0f - hidamp); old.r = delay.r[(pos.r + delta.r) % (MAX_DELAY * samplerate)] = rdl * hidamp + old.r * (1.0f - hidamp); //increment ++pos.l; // += delta.l; ++pos.r; // += delta.r; //ensure that pos is still in bounds pos.l %= MAX_DELAY * samplerate; pos.r %= MAX_DELAY * samplerate; //adjust delay if needed delta.l = (15 * delta.l + ndelta.l) / 16; delta.r = (15 * delta.r + ndelta.r) / 16; } } //Parameter control void Echo::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; if(insertion == 0) { outvolume = powf(0.01f, (1.0f - Pvolume / 127.0f)) * 4.0f; volume = 1.0f; } else volume = outvolume = Pvolume / 127.0f; if(Pvolume == 0) cleanup(); } void Echo::setdelay(unsigned char _Pdelay) { Pdelay = _Pdelay; avgDelay = (Pdelay / 127.0f * 1.5f); //0 .. 1.5 sec initdelays(); } void Echo::setlrdelay(unsigned char _Plrdelay) { float tmp; Plrdelay = _Plrdelay; tmp = (powf(2.0f, fabsf(Plrdelay - 64.0f) / 64.0f * 9.0f) - 1.0f) / 1000.0f; if(Plrdelay < 64.0f) tmp = -tmp; lrdelay = tmp; initdelays(); } void Echo::setfb(unsigned char _Pfb) { Pfb = _Pfb; fb = Pfb / 128.0f; } void Echo::sethidamp(unsigned char _Phidamp) { Phidamp = _Phidamp; hidamp = 1.0f - Phidamp / 127.0f; } void Echo::setpreset(unsigned char npreset) { const int PRESET_SIZE = 7; const int NUM_PRESETS = 9; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { {67, 64, 35, 64, 30, 59, 0 }, //Echo 1 {67, 64, 21, 64, 30, 59, 0 }, //Echo 2 {67, 75, 60, 64, 30, 59, 10}, //Echo 3 {67, 60, 44, 64, 30, 0, 0 }, //Simple Echo {67, 60, 102, 50, 30, 82, 48}, //Canyon {67, 64, 44, 17, 0, 82, 24}, //Panning Echo 1 {81, 60, 46, 118, 100, 68, 18}, //Panning Echo 2 {81, 60, 26, 100, 127, 67, 36}, //Panning Echo 3 {62, 64, 28, 64, 100, 90, 55} //Feedback Echo }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); if(insertion) setvolume(presets[npreset][0] / 2); //lower the volume if this is insertion effect Ppreset = npreset; } void Echo::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: setdelay(value); break; case 3: setlrdelay(value); break; case 4: setlrcross(value); break; case 5: setfb(value); break; case 6: sethidamp(value); break; } } unsigned char Echo::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return Pdelay; case 3: return Plrdelay; case 4: return Plrcross; case 5: return Pfb; case 6: return Phidamp; default: return 0; // in case of bogus parameter number } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h000066400000000000000000000061271247673406200242650ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Echo.h - Echo Effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ECHO_H #define ECHO_H #include "Effect.h" #include "../Misc/Stereo.h" /**Echo Effect*/ class Echo:public Effect { public: Echo(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~Echo(); void out(const Stereo &input); void setpreset(unsigned char npreset); /** * Sets the value of the chosen variable * * The possible parameters are: * -# Volume * -# Panning * -# Delay * -# L/R Delay * -# L/R Crossover * -# Feedback * -# Dampening * @param npar number of chosen parameter * @param value the new value */ void changepar(int npar, unsigned char value); /** * Gets the specified parameter * * The possible parameters are * -# Volume * -# Panning * -# Delay * -# L/R Delay * -# L/R Crossover * -# Feedback * -# Dampening * @param npar number of chosen parameter * @return value of parameter */ unsigned char getpar(int npar) const; int getnumparams(void); void cleanup(void); private: int samplerate; //Parameters unsigned char Pvolume; /**<#1 Volume or Dry/Wetness*/ unsigned char Pdelay; /**<#3 Delay of the Echo*/ unsigned char Plrdelay; /**<#4 L/R delay difference*/ unsigned char Pfb; /**<#6Feedback*/ unsigned char Phidamp; /**<#7Dampening of the Echo*/ void setvolume(unsigned char _Pvolume); void setdelay(unsigned char _Pdelay); void setlrdelay(unsigned char _Plrdelay); void setfb(unsigned char _Pfb); void sethidamp(unsigned char _Phidamp); //Real Parameters float fb, hidamp; //Left/Right delay lengths Stereo delayTime; float lrdelay; float avgDelay; void initdelays(void); //2 channel ring buffer Stereo delay; Stereo old; //position of reading/writing from delaysample Stereo pos; //step size for delay buffer Stereo delta; Stereo ndelta; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp000066400000000000000000000037261247673406200251400ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Effect.cpp - this class is inherited by the all effects(Reverb, Echo, ..) Copyright (C) 2002-2005 Nasca Octavian Paul Copyright 2011, Alan Calvert Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Effect.h" #include "../Params/FilterParams.h" #include Effect::Effect(bool insertion_, float *efxoutl_, float *efxoutr_, FilterParams *filterpars_, unsigned char Ppreset_, unsigned int srate, int bufsize) :Ppreset(Ppreset_), efxoutl(efxoutl_), efxoutr(efxoutr_), filterpars(filterpars_), insertion(insertion_), samplerate(srate), buffersize(bufsize) { alias(); } void Effect::out(float *const smpsl, float *const smpsr) { out(Stereo(smpsl, smpsr)); } void Effect::crossover(float &a, float &b, float crossover) { float tmpa = a; float tmpb = b; a = tmpa * (1.0f - crossover) + tmpb * crossover; b = tmpb * (1.0f - crossover) + tmpa * crossover; } void Effect::setpanning(char Ppanning_) { Ppanning = Ppanning_; float t = (Ppanning > 0) ? (float)(Ppanning - 1) / 126.0f : 0.0f; pangainL = cosf(t * PI / 2.0f); pangainR = cosf((1.0f - t) * PI / 2.0f); } void Effect::setlrcross(char Plrcross_) { Plrcross = Plrcross_; lrcross = (float)Plrcross / 127.0f; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h000066400000000000000000000106031247673406200245750ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Effect.h - this class is inherited by the all effects(Reverb, Echo, ..) Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EFFECT_H #define EFFECT_H #include "../Misc/Util.h" #include "../globals.h" #include "../Params/FilterParams.h" #include "../Misc/Stereo.h" class FilterParams; /**this class is inherited by the all effects(Reverb, Echo, ..)*/ class Effect { public: /** * Effect Constructor * @param insertion_ 1 when it is an insertion Effect * @param efxoutl_ Effect output buffer Left channel * @param efxoutr_ Effect output buffer Right channel * @param filterpars_ pointer to FilterParams array * @param Ppreset_ chosen preset * @return Initialized Effect object*/ Effect(bool insertion_, float *efxoutl_, float *efxoutr_, FilterParams *filterpars_, unsigned char Ppreset_, unsigned int srate, int bufsize); virtual ~Effect() {} /** * Choose a preset * @param npreset number of chosen preset*/ virtual void setpreset(unsigned char npreset) = 0; /**Change parameter npar to value * @param npar chosen parameter * @param value chosen new value*/ virtual void changepar(int npar, unsigned char value) = 0; /**Get the value of parameter npar * @param npar chosen parameter * @return the value of the parameter in an unsigned char or 0 if it * does not exist*/ virtual unsigned char getpar(int npar) const = 0; /**Output result of effect based on the given buffers * * This method should result in the effect generating its results * and placing them into the efxoutl and efxoutr buffers. * Every Effect should overide this method. * * @param smpsl Input buffer for the Left channel * @param smpsr Input buffer for the Right channel */ void out(float *const smpsl, float *const smpsr); virtual void out(const Stereo &smp) = 0; /**Reset the state of the effect*/ virtual void cleanup(void) {} virtual float getfreqresponse(float freq) { return freq; } unsigned char Ppreset; /** EffectLFO::EffectLFO(float srate_f, float bufsize_f) :Pfreq(40), Prandomness(0), PLFOtype(0), Pstereo(64), xl(0.0f), xr(0.0f), ampl1(RND), ampl2(RND), ampr1(RND), ampr2(RND), lfornd(0.0f), samplerate_f(srate_f), buffersize_f(bufsize_f) { updateparams(); } EffectLFO::~EffectLFO() {} //Update the changed parameters void EffectLFO::updateparams(void) { float lfofreq = (powf(2.0f, Pfreq / 127.0f * 10.0f) - 1.0f) * 0.03f; incx = fabsf(lfofreq) * buffersize_f / samplerate_f; if(incx > 0.49999999f) incx = 0.499999999f; //Limit the Frequency lfornd = Prandomness / 127.0f; lfornd = (lfornd > 1.0f) ? 1.0f : lfornd; if(PLFOtype > 1) PLFOtype = 1; //this has to be updated if more lfo's are added lfotype = PLFOtype; xr = fmodf(xl + (Pstereo - 64.0f) / 127.0f + 1.0f, 1.0f); } //Compute the shape of the LFO float EffectLFO::getlfoshape(float x) { float out; switch(lfotype) { case 1: //EffectLFO_TRIANGLE if((x > 0.0f) && (x < 0.25f)) out = 4.0f * x; else if((x > 0.25f) && (x < 0.75f)) out = 2.0f - 4.0f * x; else out = 4.0f * x - 4.0f; break; //when adding more, ensure ::updateparams() gets updated default: out = cosf(x * 2.0f * PI); //EffectLFO_SINE } return out; } //LFO output void EffectLFO::effectlfoout(float *outl, float *outr) { float out; out = getlfoshape(xl); if((lfotype == 0) || (lfotype == 1)) out *= (ampl1 + xl * (ampl2 - ampl1)); xl += incx; if(xl > 1.0f) { xl -= 1.0f; ampl1 = ampl2; ampl2 = (1.0f - lfornd) + lfornd * RND; } *outl = (out + 1.0f) * 0.5f; out = getlfoshape(xr); if((lfotype == 0) || (lfotype == 1)) out *= (ampr1 + xr * (ampr2 - ampr1)); xr += incx; if(xr > 1.0f) { xr -= 1.0f; ampr1 = ampr2; ampr2 = (1.0f - lfornd) + lfornd * RND; } *outr = (out + 1.0f) * 0.5f; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h000066400000000000000000000031001247673406200251300ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EffectLFO.h - Stereo LFO used by some effects Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EFFECT_LFO_H #define EFFECT_LFO_H /**LFO for some of the Effect objects * \todo see if this should inherit LFO*/ class EffectLFO { public: EffectLFO(float srate_f, float bufsize_f); ~EffectLFO(); void effectlfoout(float *outl, float *outr); void updateparams(void); unsigned char Pfreq; unsigned char Prandomness; unsigned char PLFOtype; unsigned char Pstereo; // 64 is centered private: float getlfoshape(float x); float xl, xr; float incx; float ampl1, ampl2, ampr1, ampr2; //necessary for "randomness" float lfornd; char lfotype; // current setup float samplerate_f; float buffersize_f; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp000066400000000000000000000177021247673406200256050ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EffectMgr.cpp - Effect manager, an interface betwen the program and effects Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "EffectMgr.h" #include "Effect.h" #include "Reverb.h" #include "Echo.h" #include "Chorus.h" #include "Distorsion.h" #include "EQ.h" #include "DynamicFilter.h" #include "../Misc/XMLwrapper.h" #include "../Params/FilterParams.h" #include using namespace std; EffectMgr::EffectMgr(const bool insertion_, pthread_mutex_t *mutex_) :insertion(insertion_), efxoutl(new float[synth->buffersize]), efxoutr(new float[synth->buffersize]), filterpars(NULL), nefx(0), efx(NULL), mutex(mutex_), dryonly(false) { setpresettype("Peffect"); memset(efxoutl, 0, synth->bufferbytes); memset(efxoutr, 0, synth->bufferbytes); defaults(); } EffectMgr::~EffectMgr() { delete efx; delete [] efxoutl; delete [] efxoutr; } void EffectMgr::defaults(void) { changeeffect(0); setdryonly(false); } //Change the effect void EffectMgr::changeeffect(int _nefx) { cleanup(); if(nefx == _nefx) return; nefx = _nefx; memset(efxoutl, 0, synth->bufferbytes); memset(efxoutr, 0, synth->bufferbytes); delete efx; switch(nefx) { case 1: efx = new Reverb(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 2: efx = new Echo(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 3: efx = new Chorus(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 4: efx = new Phaser(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 5: efx = new Alienwah(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 6: efx = new Distorsion(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 7: efx = new EQ(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; case 8: efx = new DynamicFilter(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize); break; //put more effect here default: efx = NULL; break; //no effect (thru) } if(efx) filterpars = efx->filterpars; } //Obtain the effect number int EffectMgr::geteffect(void) { return nefx; } // Cleanup the current effect void EffectMgr::cleanup(void) { if(efx) efx->cleanup(); } // Get the preset of the current effect unsigned char EffectMgr::getpreset(void) { if(efx) return efx->Ppreset; else return 0; } // Change the preset of the current effect void EffectMgr::changepreset_nolock(unsigned char npreset) { if(efx) efx->setpreset(npreset); } //Change the preset of the current effect(with thread locking) void EffectMgr::changepreset(unsigned char npreset) { pthread_mutex_lock(mutex); changepreset_nolock(npreset); pthread_mutex_unlock(mutex); } //Change a parameter of the current effect void EffectMgr::seteffectpar_nolock(int npar, unsigned char value) { if(!efx) return; efx->changepar(npar, value); } // Change a parameter of the current effect (with thread locking) void EffectMgr::seteffectpar(int npar, unsigned char value) { pthread_mutex_lock(mutex); seteffectpar_nolock(npar, value); pthread_mutex_unlock(mutex); } //Get a parameter of the current effect unsigned char EffectMgr::geteffectpar(int npar) { if(!efx) return 0; return efx->getpar(npar); } // Apply the effect void EffectMgr::out(float *smpsl, float *smpsr) { if(!efx) { if(!insertion) for(int i = 0; i < synth->buffersize; ++i) { smpsl[i] = 0.0f; smpsr[i] = 0.0f; efxoutl[i] = 0.0f; efxoutr[i] = 0.0f; } return; } for(int i = 0; i < synth->buffersize; ++i) { smpsl[i] += denormalkillbuf[i]; smpsr[i] += denormalkillbuf[i]; efxoutl[i] = 0.0f; efxoutr[i] = 0.0f; } efx->out(smpsl, smpsr); float volume = efx->volume; if(nefx == 7) { //this is need only for the EQ effect memcpy(smpsl, efxoutl, synth->bufferbytes); memcpy(smpsr, efxoutr, synth->bufferbytes); return; } //Insertion effect if(insertion != 0) { float v1, v2; if(volume < 0.5f) { v1 = 1.0f; v2 = volume * 2.0f; } else { v1 = (1.0f - volume) * 2.0f; v2 = 1.0f; } if((nefx == 1) || (nefx == 2)) v2 *= v2; //for Reverb and Echo, the wet function is not liniar if(dryonly) //this is used for instrument effect only for(int i = 0; i < synth->buffersize; ++i) { smpsl[i] *= v1; smpsr[i] *= v1; efxoutl[i] *= v2; efxoutr[i] *= v2; } else // normal instrument/insertion effect for(int i = 0; i < synth->buffersize; ++i) { smpsl[i] = smpsl[i] * v1 + efxoutl[i] * v2; smpsr[i] = smpsr[i] * v1 + efxoutr[i] * v2; } } else // System effect for(int i = 0; i < synth->buffersize; ++i) { efxoutl[i] *= 2.0f * volume; efxoutr[i] *= 2.0f * volume; smpsl[i] = efxoutl[i]; smpsr[i] = efxoutr[i]; } } // Get the effect volume for the system effect float EffectMgr::sysefxgetvolume(void) { return (!efx) ? 1.0f : efx->outvolume; } // Get the EQ response float EffectMgr::getEQfreqresponse(float freq) { return (nefx == 7) ? efx->getfreqresponse(freq) : 0.0f; } void EffectMgr::setdryonly(bool value) { dryonly = value; } void EffectMgr::add2XML(XMLwrapper *xml) { xml->addpar("type", geteffect()); if(!efx || !geteffect()) return; xml->addpar("preset", efx->Ppreset); xml->beginbranch("EFFECT_PARAMETERS"); for(int n = 0; n < 128; ++n) { int par = geteffectpar(n); if(par == 0) continue; xml->beginbranch("par_no", n); xml->addpar("par", par); xml->endbranch(); } if(filterpars) { xml->beginbranch("FILTER"); filterpars->add2XML(xml); xml->endbranch(); } xml->endbranch(); } void EffectMgr::getfromXML(XMLwrapper *xml) { changeeffect(xml->getpar127("type", geteffect())); if(!efx || !geteffect()) return; efx->Ppreset = xml->getpar127("preset", efx->Ppreset); if(xml->enterbranch("EFFECT_PARAMETERS")) { for(int n = 0; n < 128; ++n) { seteffectpar_nolock(n, 0); //erase effect parameter if(xml->enterbranch("par_no", n) == 0) continue; int par = geteffectpar(n); seteffectpar_nolock(n, xml->getpar127("par", par)); xml->exitbranch(); } if(filterpars) if(xml->enterbranch("FILTER")) { filterpars->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } cleanup(); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h000066400000000000000000000046011247673406200252440ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EffectMgr.h - Effect manager, an interface betwen the program and effects Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EFFECTMGR_H #define EFFECTMGR_H #include #include "Alienwah.h" #include "Phaser.h" #include "../Params/Presets.h" class Effect; class FilterParams; class XMLwrapper; #include "Distorsion.h" #include "EQ.h" #include "DynamicFilter.h" #include "../Misc/XMLwrapper.h" #include "../Params/FilterParams.h" #include "../Params/Presets.h" /**Effect manager, an interface betwen the program and effects*/ class EffectMgr:public Presets { public: EffectMgr(const bool insertion_, pthread_mutex_t *mutex_); ~EffectMgr(); void add2XML(XMLwrapper *xml); void defaults(void); void getfromXML(XMLwrapper *xml); void out(float *smpsl, float *smpsr); void setdryonly(bool value); /**get the output(to speakers) volume of the systemeffect*/ float sysefxgetvolume(void); void cleanup(void); void changeeffect(int nefx_); int geteffect(void); void changepreset(unsigned char npreset); void changepreset_nolock(unsigned char npreset); unsigned char getpreset(void); void seteffectpar(int npar, unsigned char value); void seteffectpar_nolock(int npar, unsigned char value); unsigned char geteffectpar(int npar); const bool insertion; float *efxoutl, *efxoutr; // used by UI float getEQfreqresponse(float freq); FilterParams *filterpars; private: int nefx; Effect *efx; pthread_mutex_t *mutex; bool dryonly; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp000066400000000000000000000307701247673406200251650ustar00rootroot00000000000000/* Phaser.cpp - Phasing and Approximate digital model of an analog JFET phaser. Analog modeling implemented by Ryan Billing aka Transmogrifox. ZynAddSubFX - a software synthesizer Phaser.cpp - Phaser effect Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2009-2010 Ryan Billing Copyright (C) 2010-2010 Mark McCurry Author: Nasca Octavian Paul Ryan Billing Mark McCurry DSP analog modeling theory & practice largely influenced by various CCRMA publications, particularly works by Julius O. Smith. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "Phaser.h" using namespace std; #define PHASER_LFO_SHAPE 2 #define ONE_ 0.99999f // To prevent LFO ever reaching 1.0f for filter stability purposes #define ZERO_ 0.00001f // Same idea as above. Phaser::Phaser(const int &insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), lfo(srate, bufsize), old(NULL), xn1(NULL), yn1(NULL), diff(0.0f), oldgain(0.0f), fb(0.0f) { analog_setup(); setpreset(Ppreset); cleanup(); } void Phaser::analog_setup() { //model mismatch between JFET devices offset[0] = -0.2509303f; offset[1] = 0.9408924f; offset[2] = 0.998f; offset[3] = -0.3486182f; offset[4] = -0.2762545f; offset[5] = -0.5215785f; offset[6] = 0.2509303f; offset[7] = -0.9408924f; offset[8] = -0.998f; offset[9] = 0.3486182f; offset[10] = 0.2762545f; offset[11] = 0.5215785f; barber = 0; //Deactivate barber pole phasing by default mis = 1.0f; Rmin = 625.0f; // 2N5457 typical on resistance at Vgs = 0 Rmax = 22000.0f; // Resistor parallel to FET Rmx = Rmin / Rmax; Rconst = 1.0f + Rmx; // Handle parallel resistor relationship C = 0.00000005f; // 50 nF CFs = 2.0f * samplerate_f * C; invperiod = 1.0f / buffersize_f; } Phaser::~Phaser() { if(old.l) delete[] old.l; if(xn1.l) delete[] xn1.l; if(yn1.l) delete[] yn1.l; if(old.r) delete[] old.r; if(xn1.r) delete[] xn1.r; if(yn1.r) delete[] yn1.r; } /* * Effect output */ void Phaser::out(const Stereo &input) { if(Panalog) AnalogPhase(input); else normalPhase(input); } void Phaser::AnalogPhase(const Stereo &input) { Stereo gain(0.0f), lfoVal(0.0f), mod(0.0f), g(0.0f), b(0.0f), hpf( 0.0f); lfo.effectlfoout(&lfoVal.l, &lfoVal.r); mod.l = lfoVal.l * width + (depth - 0.5f); mod.r = lfoVal.r * width + (depth - 0.5f); mod.l = limit(mod.l, ZERO_, ONE_); mod.r = limit(mod.r, ZERO_, ONE_); if(Phyper) { //Triangle wave squared is approximately sin on bottom, tri on top //Result is exponential sweep more akin to filter in synth with //exponential generator circuitry. mod.l *= mod.l; mod.r *= mod.r; } //g.l,g.r is Vp - Vgs. Typical FET drain-source resistance follows constant/[1-sqrt(Vp - Vgs)] mod.l = sqrtf(1.0f - mod.l); mod.r = sqrtf(1.0f - mod.r); diff.r = (mod.r - oldgain.r) * invperiod; diff.l = (mod.l - oldgain.l) * invperiod; g = oldgain; oldgain = mod; for(int i = 0; i < buffersize; ++i) { g.l += diff.l; // Linear interpolation between LFO samples g.r += diff.r; Stereo xn(input.l[i] * pangainL, input.r[i] * pangainR); if(barber) { g.l = fmodf((g.l + 0.25f), ONE_); g.r = fmodf((g.r + 0.25f), ONE_); } xn.l = applyPhase(xn.l, g.l, fb.l, hpf.l, yn1.l, xn1.l); xn.r = applyPhase(xn.r, g.r, fb.r, hpf.r, yn1.r, xn1.r); fb.l = xn.l * feedback; fb.r = xn.r * feedback; efxoutl[i] = xn.l; efxoutr[i] = xn.r; } if(Poutsub) { invSignal(efxoutl, buffersize); invSignal(efxoutr, buffersize); } } float Phaser::applyPhase(float x, float g, float fb, float &hpf, float *yn1, float *xn1) { for(int j = 0; j < Pstages; ++j) { //Phasing routine mis = 1.0f + offsetpct * offset[j]; //This is symmetrical. //FET is not, so this deviates slightly, however sym dist. is //better sounding than a real FET. float d = (1.0f + 2.0f * (0.25f + g) * hpf * hpf * distortion) * mis; Rconst = 1.0f + mis * Rmx; // This is 1/R. R is being modulated to control filter fc. float b = (Rconst - g) / (d * Rmin); float gain = (CFs - b) / (CFs + b); yn1[j] = gain * (x + yn1[j]) - xn1[j]; //high pass filter: //Distortion depends on the high-pass part of the AP stage. hpf = yn1[j] + (1.0f - gain) * xn1[j]; xn1[j] = x; x = yn1[j]; if(j == 1) x += fb; //Insert feedback after first phase stage } return x; } void Phaser::normalPhase(const Stereo &input) { Stereo gain(0.0f), lfoVal(0.0f); lfo.effectlfoout(&lfoVal.l, &lfoVal.r); gain.l = (expf(lfoVal.l * PHASER_LFO_SHAPE) - 1) / (expf(PHASER_LFO_SHAPE) - 1.0f); gain.r = (expf(lfoVal.r * PHASER_LFO_SHAPE) - 1) / (expf(PHASER_LFO_SHAPE) - 1.0f); gain.l = 1.0f - phase * (1.0f - depth) - (1.0f - phase) * gain.l * depth; gain.r = 1.0f - phase * (1.0f - depth) - (1.0f - phase) * gain.r * depth; gain.l = limit(gain.l, ZERO_, ONE_); gain.r = limit(gain.r, ZERO_, ONE_); for(int i = 0; i < buffersize; ++i) { float x = (float) i / buffersize_f; float x1 = 1.0f - x; //TODO think about making panning an external feature Stereo xn(input.l[i] * pangainL + fb.l, input.r[i] * pangainR + fb.r); Stereo g(gain.l * x + oldgain.l * x1, gain.r * x + oldgain.r * x1); xn.l = applyPhase(xn.l, g.l, old.l); xn.r = applyPhase(xn.r, g.r, old.r); //Left/Right crossing crossover(xn.l, xn.r, lrcross); fb.l = xn.l * feedback; fb.r = xn.r * feedback; efxoutl[i] = xn.l; efxoutr[i] = xn.r; } oldgain = gain; if(Poutsub) { invSignal(efxoutl, buffersize); invSignal(efxoutr, buffersize); } } float Phaser::applyPhase(float x, float g, float *old) { for(int j = 0; j < Pstages * 2; ++j) { //Phasing routine float tmp = old[j]; old[j] = g * tmp + x; x = tmp - g * old[j]; } return x; } /* * Cleanup the effect */ void Phaser::cleanup() { fb = oldgain = Stereo(0.0f); for(int i = 0; i < Pstages * 2; ++i) { old.l[i] = 0.0f; old.r[i] = 0.0f; } for(int i = 0; i < Pstages; ++i) { xn1.l[i] = 0.0f; yn1.l[i] = 0.0f; xn1.r[i] = 0.0f; yn1.r[i] = 0.0f; } } /* * Parameter control */ void Phaser::setwidth(unsigned char Pwidth) { this->Pwidth = Pwidth; width = ((float)Pwidth / 127.0f); } void Phaser::setfb(unsigned char Pfb) { this->Pfb = Pfb; feedback = (float) (Pfb - 64) / 64.2f; } void Phaser::setvolume(unsigned char Pvolume) { this->Pvolume = Pvolume; outvolume = Pvolume / 127.0f; if(insertion == 0) volume = 1.0f; else volume = outvolume; } void Phaser::setdistortion(unsigned char Pdistortion) { this->Pdistortion = Pdistortion; distortion = (float)Pdistortion / 127.0f; } void Phaser::setoffset(unsigned char Poffset) { this->Poffset = Poffset; offsetpct = (float)Poffset / 127.0f; } void Phaser::setstages(unsigned char Pstages) { if(old.l) delete[] old.l; if(xn1.l) delete[] xn1.l; if(yn1.l) delete[] yn1.l; if(old.r) delete[] old.r; if(xn1.r) delete[] xn1.r; if(yn1.r) delete[] yn1.r; this->Pstages = min(MAX_PHASER_STAGES, (int)Pstages); old = Stereo(new float[Pstages * 2], new float[Pstages * 2]); xn1 = Stereo(new float[Pstages], new float[Pstages]); yn1 = Stereo(new float[Pstages], new float[Pstages]); cleanup(); } void Phaser::setphase(unsigned char Pphase) { this->Pphase = Pphase; phase = (Pphase / 127.0f); } void Phaser::setdepth(unsigned char Pdepth) { this->Pdepth = Pdepth; depth = (float)(Pdepth) / 127.0f; } void Phaser::setpreset(unsigned char npreset) { const int PRESET_SIZE = 15; const int NUM_PRESETS = 12; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { //Phaser //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 {64, 64, 36, 0, 0, 64, 110, 64, 1, 0, 0, 20, 0, 0, 0 }, {64, 64, 35, 0, 0, 88, 40, 64, 3, 0, 0, 20, 0, 0, 0 }, {64, 64, 31, 0, 0, 66, 68, 107, 2, 0, 0, 20, 0, 0, 0 }, {39, 64, 22, 0, 0, 66, 67, 10, 5, 0, 1, 20, 0, 0, 0 }, {64, 64, 20, 0, 1, 110, 67, 78, 10, 0, 0, 20, 0, 0, 0 }, {64, 64, 53, 100, 0, 58, 37, 78, 3, 0, 0, 20, 0, 0, 0 }, //APhaser //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 {64, 64, 14, 0, 1, 64, 64, 40, 4, 10, 0, 110,1, 20, 1 }, {64, 64, 14, 5, 1, 64, 70, 40, 6, 10, 0, 110,1, 20, 1 }, {64, 64, 9, 0, 0, 64, 60, 40, 8, 10, 0, 40, 0, 20, 1 }, {64, 64, 14, 10, 0, 64, 45, 80, 7, 10, 1, 110,1, 20, 1 }, {25, 64, 127, 10, 0, 64, 25, 16, 8, 100, 0, 25, 0, 20, 1 }, {64, 64, 1, 10, 1, 64, 70, 40, 12, 10, 0, 110,1, 20, 1 } }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); Ppreset = npreset; } void Phaser::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: lfo.Pfreq = value; lfo.updateparams(); break; case 3: lfo.Prandomness = value; lfo.updateparams(); break; case 4: lfo.PLFOtype = value; lfo.updateparams(); barber = (2 == value); break; case 5: lfo.Pstereo = value; lfo.updateparams(); break; case 6: setdepth(value); break; case 7: setfb(value); break; case 8: setstages(value); break; case 9: setlrcross(value); setoffset(value); break; case 10: Poutsub = min((int)value, 1); break; case 11: setphase(value); setwidth(value); break; case 12: Phyper = min((int)value, 1); break; case 13: setdistortion(value); break; case 14: Panalog = value; break; } } unsigned char Phaser::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return lfo.Pfreq; case 3: return lfo.Prandomness; case 4: return lfo.PLFOtype; case 5: return lfo.Pstereo; case 6: return Pdepth; case 7: return Pfb; case 8: return Pstages; case 9: return Plrcross; return Poffset; //same case 10: return Poutsub; case 11: return Pphase; return Pwidth; //same case 12: return Phyper; case 13: return Pdistortion; case 14: return Panalog; default: return 0; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h000066400000000000000000000071471247673406200246340ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Phaser.h - Phaser effect Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2009-2010 Ryan Billing Copyright (C) 2010-2010 Mark McCurry Author: Nasca Octavian Paul Ryan Billing Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PHASER_H #define PHASER_H #include "../globals.h" #include "Effect.h" #include "EffectLFO.h" #define MAX_PHASER_STAGES 12 class Phaser:public Effect { public: Phaser(const int &insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~Phaser(); void out(const Stereo &input); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); unsigned char getpar(int npar) const; void cleanup(); private: //Phaser parameters EffectLFO lfo; //Phaser modulator unsigned char Pvolume; //Used to set wet/dry mix unsigned char Pdistortion; //Model distortion added by FET element unsigned char Pdepth; //Depth of phaser sweep unsigned char Pwidth; //Phaser width (LFO amplitude) unsigned char Pfb; //feedback unsigned char Poffset; //Model mismatch between variable resistors unsigned char Pstages; //Number of first-order All-Pass stages unsigned char Poutsub; //if I wish to subtract the output instead of adding unsigned char Pphase; unsigned char Phyper; //lfo^2 -- converts tri into hyper-sine unsigned char Panalog; //Control parameters void setvolume(unsigned char Pvolume); void setdepth(unsigned char Pdepth); void setfb(unsigned char Pfb); void setdistortion(unsigned char Pdistortion); void setwidth(unsigned char Pwidth); void setoffset(unsigned char Poffset); void setstages(unsigned char Pstages); void setphase(unsigned char Pphase); //Internal Variables bool barber; //Barber pole phasing flag float distortion, width, offsetpct; float feedback, depth, phase; Stereo old, xn1, yn1; Stereo diff, oldgain, fb; float invperiod; float offset[12]; float mis; float Rmin; // 3N5457 typical on resistance at Vgs = 0 float Rmax; // Resistor parallel to FET float Rmx; // Rmin/Rmax to avoid division in loop float Rconst; // Handle parallel resistor relationship float C; // Capacitor float CFs; // A constant derived from capacitor and resistor relationships void analog_setup(); void AnalogPhase(const Stereo &input); //analog case float applyPhase(float x, float g, float fb, float &hpf, float *yn1, float *xn1); void normalPhase(const Stereo &input); float applyPhase(float x, float g, float *old); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp000066400000000000000000000316541247673406200251720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Reverb.cpp - Reverberation effect Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Reverb.h" #include "../Misc/Util.h" #include "../DSP/AnalogFilter.h" #include "../DSP/Unison.h" #include Reverb::Reverb(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize) :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), // defaults Pvolume(48), Ptime(64), Pidelay(40), Pidelayfb(0), Plpf(127), Phpf(0), Plohidamp(80), Ptype(1), Proomsize(64), Pbandwidth(30), roomsize(1.0f), rs(1.0f), bandwidth(NULL), idelay(NULL), lpf(NULL), hpf(NULL) // no filter { for(int i = 0; i < REV_COMBS * 2; ++i) { comblen[i] = 800 + (int)(RND * 1400.0f); combk[i] = 0; lpcomb[i] = 0; combfb[i] = -0.97f; comb[i] = NULL; } for(int i = 0; i < REV_APS * 2; ++i) { aplen[i] = 500 + (int)(RND * 500.0f); apk[i] = 0; ap[i] = NULL; } setpreset(Ppreset); cleanup(); //do not call this before the comb initialisation } Reverb::~Reverb() { delete [] idelay; delete hpf; delete lpf; for(int i = 0; i < REV_APS * 2; ++i) delete [] ap[i]; for(int i = 0; i < REV_COMBS * 2; ++i) delete [] comb[i]; if(bandwidth) delete bandwidth; } //Cleanup the effect void Reverb::cleanup(void) { int i, j; for(i = 0; i < REV_COMBS * 2; ++i) { lpcomb[i] = 0.0f; for(j = 0; j < comblen[i]; ++j) comb[i][j] = 0.0f; } for(i = 0; i < REV_APS * 2; ++i) for(j = 0; j < aplen[i]; ++j) ap[i][j] = 0.0f; if(idelay) for(i = 0; i < idelaylen; ++i) idelay[i] = 0.0f; if(hpf) hpf->cleanup(); if(lpf) lpf->cleanup(); } //Process one channel; 0=left, 1=right void Reverb::processmono(int ch, float *output, float *inputbuf) { //todo: implement the high part from lohidamp for(int j = REV_COMBS * ch; j < REV_COMBS * (ch + 1); ++j) { int &ck = combk[j]; const int comblength = comblen[j]; float &lpcombj = lpcomb[j]; for(int i = 0; i < buffersize; ++i) { float fbout = comb[j][ck] * combfb[j]; fbout = fbout * (1.0f - lohifb) + lpcombj * lohifb; lpcombj = fbout; comb[j][ck] = inputbuf[i] + fbout; output[i] += fbout; if((++ck) >= comblength) ck = 0; } } for(int j = REV_APS * ch; j < REV_APS * (1 + ch); ++j) { int &ak = apk[j]; const int aplength = aplen[j]; for(int i = 0; i < buffersize; ++i) { float tmp = ap[j][ak]; ap[j][ak] = 0.7f * tmp + output[i]; output[i] = tmp - 0.7f * ap[j][ak]; if((++ak) >= aplength) ak = 0; } } } //Effect output void Reverb::out(const Stereo &smp) { if(!Pvolume && insertion) return; float inputbuf[buffersize]; for(int i = 0; i < buffersize; ++i) inputbuf[i] = (smp.l[i] + smp.r[i]) / 2.0f; if(idelay) for(int i = 0; i < buffersize; ++i) { //Initial delay r float tmp = inputbuf[i] + idelay[idelayk] * idelayfb; inputbuf[i] = idelay[idelayk]; idelay[idelayk] = tmp; idelayk++; if(idelayk >= idelaylen) idelayk = 0; } if(bandwidth) bandwidth->process(buffersize, inputbuf); if(lpf) lpf->filterout(inputbuf); if(hpf) hpf->filterout(inputbuf); processmono(0, efxoutl, inputbuf); //left processmono(1, efxoutr, inputbuf); //right float lvol = rs / REV_COMBS * pangainL; float rvol = rs / REV_COMBS * pangainR; if(insertion != 0) { lvol *= 2.0f; rvol *= 2.0f; } for(int i = 0; i < buffersize; ++i) { efxoutl[i] *= lvol; efxoutr[i] *= rvol; } } //Parameter control void Reverb::setvolume(unsigned char _Pvolume) { Pvolume = _Pvolume; if(!insertion) { outvolume = powf(0.01f, (1.0f - Pvolume / 127.0f)) * 4.0f; volume = 1.0f; } else { volume = outvolume = Pvolume / 127.0f; if(Pvolume == 0) cleanup(); } } void Reverb::settime(unsigned char _Ptime) { Ptime = _Ptime; float t = powf(60.0f, Ptime / 127.0f) - 0.97f; for(int i = 0; i < REV_COMBS * 2; ++i) combfb[i] = -expf((float)comblen[i] / samplerate_f * logf(0.001f) / t); //the feedback is negative because it removes the DC } void Reverb::setlohidamp(unsigned char _Plohidamp) { Plohidamp = (_Plohidamp < 64) ? 64 : _Plohidamp; //remove this when the high part from lohidamp is added if(Plohidamp == 64) { lohidamptype = 0; lohifb = 0.0f; } else { if(Plohidamp < 64) lohidamptype = 1; if(Plohidamp > 64) lohidamptype = 2; float x = fabsf((float)(Plohidamp - 64) / 64.1f); lohifb = x * x; } } void Reverb::setidelay(unsigned char _Pidelay) { Pidelay = _Pidelay; float delay = powf(50.0f * Pidelay / 127.0f, 2.0f) - 1.0f; if(idelay) delete [] idelay; idelay = NULL; idelaylen = (int) (samplerate_f * delay / 1000); if(idelaylen > 1) { idelayk = 0; idelay = new float[idelaylen]; memset(idelay, 0, idelaylen * sizeof(float)); } } void Reverb::setidelayfb(unsigned char _Pidelayfb) { Pidelayfb = _Pidelayfb; idelayfb = Pidelayfb / 128.0f; } void Reverb::sethpf(unsigned char _Phpf) { Phpf = _Phpf; if(Phpf == 0) { //No HighPass if(hpf) delete hpf; hpf = NULL; } else { float fr = expf(powf(Phpf / 127.0f, 0.5f) * logf(10000.0f)) + 20.0f; if(hpf == NULL) hpf = new AnalogFilter(3, fr, 1, 0, samplerate, buffersize); else hpf->setfreq(fr); } } void Reverb::setlpf(unsigned char _Plpf) { Plpf = _Plpf; if(Plpf == 127) { //No LowPass if(lpf) delete lpf; lpf = NULL; } else { float fr = expf(powf(Plpf / 127.0f, 0.5f) * logf(25000.0f)) + 40.0f; if(!lpf) lpf = new AnalogFilter(2, fr, 1, 0, samplerate, buffersize); else lpf->setfreq(fr); } } void Reverb::settype(unsigned char _Ptype) { Ptype = _Ptype; const int NUM_TYPES = 3; const int combtunings[NUM_TYPES][REV_COMBS] = { //this is unused (for random) {0, 0, 0, 0, 0, 0, 0, 0 }, //Freeverb by Jezar at Dreampoint {1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 }, //duplicate of Freeverb by Jezar at Dreampoint {1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 } }; const int aptunings[NUM_TYPES][REV_APS] = { //this is unused (for random) {0, 0, 0, 0 }, //Freeverb by Jezar at Dreampoint {225, 341, 441, 556 }, //duplicate of Freeverb by Jezar at Dreampoint {225, 341, 441, 556 } }; if(Ptype >= NUM_TYPES) Ptype = NUM_TYPES - 1; // adjust the combs according to the samplerate float samplerate_adjust = samplerate_f / 44100.0f; float tmp; for(int i = 0; i < REV_COMBS * 2; ++i) { if(Ptype == 0) tmp = 800.0f + (int)(RND * 1400.0f); else tmp = combtunings[Ptype][i % REV_COMBS]; tmp *= roomsize; if(i > REV_COMBS) tmp += 23.0f; tmp *= samplerate_adjust; //adjust the combs according to the samplerate if(tmp < 10.0f) tmp = 10.0f; comblen[i] = (int) tmp; combk[i] = 0; lpcomb[i] = 0; if(comb[i]) delete [] comb[i]; comb[i] = new float[comblen[i]]; } for(int i = 0; i < REV_APS * 2; ++i) { if(Ptype == 0) tmp = 500 + (int)(RND * 500.0f); else tmp = aptunings[Ptype][i % REV_APS]; tmp *= roomsize; if(i > REV_APS) tmp += 23.0f; tmp *= samplerate_adjust; //adjust the combs according to the samplerate if(tmp < 10) tmp = 10; aplen[i] = (int) tmp; apk[i] = 0; if(ap[i]) delete [] ap[i]; ap[i] = new float[aplen[i]]; } delete bandwidth; bandwidth = NULL; if(Ptype == 2) { //bandwidth //TODO the size of the unison buffer may be too small, though this has //not been verified yet. //As this cannot be resized in a RT context, a good upper bound should //be found bandwidth = new Unison(buffersize / 4 + 1, 2.0f, samplerate_f); bandwidth->setSize(50); bandwidth->setBaseFrequency(1.0f); } settime(Ptime); cleanup(); } void Reverb::setroomsize(unsigned char _Proomsize) { Proomsize = _Proomsize; if(!Proomsize) this->Proomsize = 64; //this is because the older versions consider roomsize=0 roomsize = (this->Proomsize - 64.0f) / 64.0f; if(roomsize > 0.0f) roomsize *= 2.0f; roomsize = powf(10.0f, roomsize); rs = sqrtf(roomsize); settype(Ptype); } void Reverb::setbandwidth(unsigned char _Pbandwidth) { Pbandwidth = _Pbandwidth; float v = Pbandwidth / 127.0f; if(bandwidth) bandwidth->setBandwidth(powf(v, 2.0f) * 200.0f); } void Reverb::setpreset(unsigned char npreset) { const int PRESET_SIZE = 13; const int NUM_PRESETS = 13; unsigned char presets[NUM_PRESETS][PRESET_SIZE] = { //Cathedral1 {80, 64, 63, 24, 0, 0, 0, 85, 5, 83, 1, 64, 20}, //Cathedral2 {80, 64, 69, 35, 0, 0, 0, 127, 0, 71, 0, 64, 20}, //Cathedral3 {80, 64, 69, 24, 0, 0, 0, 127, 75, 78, 1, 85, 20}, //Hall1 {90, 64, 51, 10, 0, 0, 0, 127, 21, 78, 1, 64, 20}, //Hall2 {90, 64, 53, 20, 0, 0, 0, 127, 75, 71, 1, 64, 20}, //Room1 {100, 64, 33, 0, 0, 0, 0, 127, 0, 106, 0, 30, 20}, //Room2 {100, 64, 21, 26, 0, 0, 0, 62, 0, 77, 1, 45, 20}, //Basement {110, 64, 14, 0, 0, 0, 0, 127, 5, 71, 0, 25, 20}, //Tunnel {85, 80, 84, 20, 42, 0, 0, 51, 0, 78, 1, 105, 20}, //Echoed1 {95, 64, 26, 60, 71, 0, 0, 114, 0, 64, 1, 64, 20}, //Echoed2 {90, 64, 40, 88, 71, 0, 0, 114, 0, 88, 1, 64, 20}, //VeryLong1 {90, 64, 93, 15, 0, 0, 0, 114, 0, 77, 0, 95, 20}, //VeryLong2 {90, 64, 111, 30, 0, 0, 0, 114, 90, 74, 1, 80, 20} }; if(npreset >= NUM_PRESETS) npreset = NUM_PRESETS - 1; for(int n = 0; n < PRESET_SIZE; ++n) changepar(n, presets[npreset][n]); if(insertion) changepar(0, presets[npreset][0] / 2); //lower the volume if reverb is insertion effect Ppreset = npreset; } void Reverb::changepar(int npar, unsigned char value) { switch(npar) { case 0: setvolume(value); break; case 1: setpanning(value); break; case 2: settime(value); break; case 3: setidelay(value); break; case 4: setidelayfb(value); break; // case 5: // setrdelay(value); // break; // case 6: // seterbalance(value); // break; case 7: setlpf(value); break; case 8: sethpf(value); break; case 9: setlohidamp(value); break; case 10: settype(value); break; case 11: setroomsize(value); break; case 12: setbandwidth(value); break; } } unsigned char Reverb::getpar(int npar) const { switch(npar) { case 0: return Pvolume; case 1: return Ppanning; case 2: return Ptime; case 3: return Pidelay; case 4: return Pidelayfb; case 7: return Plpf; case 8: return Phpf; case 9: return Plohidamp; case 10: return Ptype; case 11: return Proomsize; case 12: return Pbandwidth; default: return 0; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h000066400000000000000000000062101247673406200246250ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Reverb.h - Reverberation effect Copyright (C) 2002-2009 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef REVERB_H #define REVERB_H #include "Effect.h" #define REV_COMBS 8 #define REV_APS 4 /**Creates Reverberation Effects*/ class Reverb:public Effect { public: Reverb(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~Reverb(); void out(const Stereo &smp); void cleanup(void); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); unsigned char getpar(int npar) const; private: //Parametrii unsigned char Pvolume; unsigned char Ptime; //duration unsigned char Pidelay; //initial delay unsigned char Pidelayfb; //initial feedback unsigned char Plpf; unsigned char Phpf; unsigned char Plohidamp; //Low/HighFrequency Damping unsigned char Ptype; //reverb type unsigned char Proomsize; //room size unsigned char Pbandwidth; //bandwidth //parameter control void setvolume(unsigned char _Pvolume); void settime(unsigned char _Ptime); void setlohidamp(unsigned char _Plohidamp); void setidelay(unsigned char _Pidelay); void setidelayfb(unsigned char _Pidelayfb); void sethpf(unsigned char _Phpf); void setlpf(unsigned char _Plpf); void settype(unsigned char _Ptype); void setroomsize(unsigned char _Proomsize); void setbandwidth(unsigned char _Pbandwidth); void processmono(int ch, float *output, float *inputbuf); //Parameters int lohidamptype; //0=disable, 1=highdamp (lowpass), 2=lowdamp (highpass) int idelaylen; int idelayk; float lohifb; float idelayfb; float roomsize; float rs; //rs is used to "normalise" the volume according to the roomsize int comblen[REV_COMBS * 2]; int aplen[REV_APS * 2]; class Unison * bandwidth; //Internal Variables float *comb[REV_COMBS * 2]; int combk[REV_COMBS * 2]; float combfb[REV_COMBS * 2]; //feedback-ul fiecarui filtru "comb" float lpcomb[REV_COMBS * 2]; //pentru Filtrul LowPass float *ap[REV_APS * 2]; int apk[REV_APS * 2]; float *idelay; class AnalogFilter * lpf, *hpf; //filters }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/000077500000000000000000000000001247673406200225445ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp000066400000000000000000000256331247673406200241340ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Bank.cpp - Instrument Bank Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2010-2010 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Bank.h" #include #include #include #include #include #include #include #include #include #include #include #include "Config.h" #include "Util.h" #include "Part.h" #define INSTRUMENT_EXTENSION ".xiz" //if this file exists into a directory, this make the directory to be considered as a bank, even if it not contains a instrument file #define FORCE_BANK_DIR_FILE ".bankdir" using namespace std; Bank::Bank() :defaultinsname(" ") { clearbank(); bankfiletitle = dirname; loadbank(config.cfg.currentBankDir); } Bank::~Bank() { clearbank(); } /* * Get the name of an instrument from the bank */ string Bank::getname(unsigned int ninstrument) { if(emptyslot(ninstrument)) return defaultinsname; return ins[ninstrument].name; } /* * Get the numbered name of an instrument from the bank */ string Bank::getnamenumbered(unsigned int ninstrument) { if(emptyslot(ninstrument)) return defaultinsname; return stringFrom(ninstrument + 1) + ". " + getname(ninstrument); } /* * Changes the name of an instrument (and the filename) */ void Bank::setname(unsigned int ninstrument, const string &newname, int newslot) { if(emptyslot(ninstrument)) return; string newfilename; char tmpfilename[100 + 1]; tmpfilename[100] = 0; if(newslot >= 0) snprintf(tmpfilename, 100, "%4d-%s", newslot + 1, newname.c_str()); else snprintf(tmpfilename, 100, "%4d-%s", ninstrument + 1, newname.c_str()); //add the zeroes at the start of filename for(int i = 0; i < 4; ++i) if(tmpfilename[i] == ' ') tmpfilename[i] = '0'; newfilename = dirname + '/' + legalizeFilename(tmpfilename) + ".xiz"; rename(ins[ninstrument].filename.c_str(), newfilename.c_str()); ins[ninstrument].filename = newfilename; ins[ninstrument].name = newname; } /* * Check if there is no instrument on a slot from the bank */ bool Bank::emptyslot(unsigned int ninstrument) { if(ninstrument >= BANK_SIZE) return true; if(ins[ninstrument].filename.empty()) return true; if(ins[ninstrument].used) return false; else return true; } /* * Removes the instrument from the bank */ void Bank::clearslot(unsigned int ninstrument) { if(emptyslot(ninstrument)) return; remove(ins[ninstrument].filename.c_str()); deletefrombank(ninstrument); } /* * Save the instrument to a slot */ void Bank::savetoslot(unsigned int ninstrument, Part *part) { clearslot(ninstrument); const int maxfilename = 200; char tmpfilename[maxfilename + 20]; ZERO(tmpfilename, maxfilename + 20); snprintf(tmpfilename, maxfilename, "%4d-%s", ninstrument + 1, (char *)part->Pname); //add the zeroes at the start of filename for(int i = 0; i < 4; ++i) if(tmpfilename[i] == ' ') tmpfilename[i] = '0'; string filename = dirname + '/' + legalizeFilename(tmpfilename) + ".xiz"; remove(filename.c_str()); part->saveXML(filename.c_str()); addtobank(ninstrument, legalizeFilename(tmpfilename) + ".xiz", (char *) part->Pname); } /* * Loads the instrument from the bank */ void Bank::loadfromslot(unsigned int ninstrument, Part *part) { if(emptyslot(ninstrument)) return; part->AllNotesOff(); part->defaultsinstrument(); part->loadXMLinstrument(ins[ninstrument].filename.c_str()); } /* * Makes current a bank directory */ int Bank::loadbank(string bankdirname) { DIR *dir = opendir(bankdirname.c_str()); clearbank(); if(dir == NULL) return -1; dirname = bankdirname; bankfiletitle = dirname; struct dirent *fn; while((fn = readdir(dir))) { const char *filename = fn->d_name; //check for extension if(strstr(filename, INSTRUMENT_EXTENSION) == NULL) continue; //verify if the name is like this NNNN-name (where N is a digit) int no = 0; unsigned int startname = 0; for(unsigned int i = 0; i < 4; ++i) { if(strlen(filename) <= i) break; if((filename[i] >= '0') && (filename[i] <= '9')) { no = no * 10 + (filename[i] - '0'); startname++; } } if((startname + 1) < strlen(filename)) startname++; //to take out the "-" string name = filename; //remove the file extension for(int i = name.size() - 1; i >= 2; i--) if(name[i] == '.') { name = name.substr(0, i); break; } if(no != 0) //the instrument position in the bank is found addtobank(no - 1, filename, name.substr(startname)); else addtobank(-1, filename, name); } closedir(dir); if(!dirname.empty()) config.cfg.currentBankDir = dirname; return 0; } /* * Makes a new bank, put it on a file and makes it current bank */ int Bank::newbank(string newbankdirname) { string bankdir; bankdir = config.cfg.bankRootDirList[0]; if(((bankdir[bankdir.size() - 1]) != '/') && ((bankdir[bankdir.size() - 1]) != '\\')) bankdir += "/"; bankdir += newbankdirname; #ifdef WIN32 if(mkdir(bankdir.c_str()) < 0) #else if(mkdir(bankdir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) < 0) #endif return -1; const string tmpfilename = bankdir + '/' + FORCE_BANK_DIR_FILE; FILE *tmpfile = fopen(tmpfilename.c_str(), "w+"); fclose(tmpfile); return loadbank(bankdir); } /* * Check if the bank is locked (i.e. the file opened was readonly) */ int Bank::locked() { return dirname.empty(); } /* * Swaps a slot with another */ void Bank::swapslot(unsigned int n1, unsigned int n2) { if((n1 == n2) || (locked())) return; if(emptyslot(n1) && (emptyslot(n2))) return; if(emptyslot(n1)) //change n1 to n2 in order to make swap(n1, n2); if(emptyslot(n2)) { //this is just a movement from slot1 to slot2 setname(n1, getname(n1), n2); ins[n2] = ins[n1]; ins[n1] = ins_t(); } else { //if both slots are used if(ins[n1].name == ins[n2].name) //change the name of the second instrument if the name are equal ins[n2].name += "2"; setname(n1, getname(n1), n2); setname(n2, getname(n2), n1); swap(ins[n2], ins[n1]); } } bool Bank::bankstruct::operator<(const bankstruct &b) const { return name < b.name; } /* * Re-scan for directories containing instrument banks */ void Bank::rescanforbanks() { //remove old banks banks.clear(); for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(!config.cfg.bankRootDirList[i].empty()) scanrootdir(config.cfg.bankRootDirList[i]); //sort the banks sort(banks.begin(), banks.end()); //remove duplicate bank names int dupl = 0; for(int j = 0; j < (int) banks.size() - 1; ++j) for(int i = j + 1; i < (int) banks.size(); ++i) { if(banks[i].name == banks[j].name) { //add a [1] to the first bankname and [n] to others banks[i].name = banks[i].name + '[' + stringFrom(dupl + 2) + ']'; if(dupl == 0) banks[j].name += "[1]"; dupl++; } else dupl = 0; } } // private stuff void Bank::scanrootdir(string rootdir) { DIR *dir = opendir(rootdir.c_str()); if(dir == NULL) return; bankstruct bank; const char *separator = "/"; if(rootdir.size()) { char tmp = rootdir[rootdir.size() - 1]; if((tmp == '/') || (tmp == '\\')) separator = ""; } struct dirent *fn; while((fn = readdir(dir))) { const char *dirname = fn->d_name; if(dirname[0] == '.') continue; bank.dir = rootdir + separator + dirname + '/'; bank.name = dirname; //find out if the directory contains at least 1 instrument bool isbank = false; DIR *d = opendir(bank.dir.c_str()); if(d == NULL) continue; struct dirent *fname; while((fname = readdir(d))) { if((strstr(fname->d_name, INSTRUMENT_EXTENSION) != NULL) || (strstr(fname->d_name, FORCE_BANK_DIR_FILE) != NULL)) { isbank = true; break; //could put a #instrument counter here instead } } if(isbank) banks.push_back(bank); closedir(d); } closedir(dir); } void Bank::clearbank() { for(int i = 0; i < BANK_SIZE; ++i) ins[i] = ins_t(); bankfiletitle.clear(); dirname.clear(); } int Bank::addtobank(int pos, string filename, string name) { if((pos >= 0) && (pos < BANK_SIZE)) { if(ins[pos].used) pos = -1; //force it to find a new free position } else if(pos >= BANK_SIZE) pos = -1; if(pos < 0) //find a free position for(int i = BANK_SIZE - 1; i >= 0; i--) if(!ins[i].used) { pos = i; break; } if(pos < 0) return -1; //the bank is full deletefrombank(pos); ins[pos].used = true; ins[pos].name = name; ins[pos].filename = dirname + '/' + filename; //see if PADsynth is used if(config.cfg.CheckPADsynth) { XMLwrapper xml; xml.loadXMLfile(ins[pos].filename); ins[pos].info.PADsynth_used = xml.hasPadSynth(); } else ins[pos].info.PADsynth_used = false; return 0; } bool Bank::isPADsynth_used(unsigned int ninstrument) { if(config.cfg.CheckPADsynth == 0) return 0; else return ins[ninstrument].info.PADsynth_used; } void Bank::deletefrombank(int pos) { if((pos < 0) || (pos >= BANK_SIZE)) return; ins[pos] = ins_t(); } Bank::ins_t::ins_t() :used(false), name(""), filename("") { info.PADsynth_used = false; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h000066400000000000000000000060671247673406200236010ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Bank.h - Instrument Bank Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef BANK_H #define BANK_H #include #include //entries in a bank #define BANK_SIZE 160 /**The instrument Bank*/ class Bank { public: /**Constructor*/ Bank(); ~Bank(); std::string getname(unsigned int ninstrument); std::string getnamenumbered(unsigned int ninstrument); void setname(unsigned int ninstrument, const std::string &newname, int newslot); //if newslot==-1 then this is ignored, else it will be put on that slot bool isPADsynth_used(unsigned int ninstrument); /**returns true when slot is empty*/ bool emptyslot(unsigned int ninstrument); /**Empties out the selected slot*/ void clearslot(unsigned int ninstrument); /**Saves the given Part to slot*/ void savetoslot(unsigned int ninstrument, class Part * part); /**Loads the given slot into a Part*/ void loadfromslot(unsigned int ninstrument, class Part * part); /**Swaps Slots*/ void swapslot(unsigned int n1, unsigned int n2); int loadbank(std::string bankdirname); int newbank(std::string newbankdirname); std::string bankfiletitle; //this is shown on the UI of the bank (the title of the window) int locked(); void rescanforbanks(); struct bankstruct { bool operator<(const bankstruct &b) const; std::string dir; std::string name; }; std::vector banks; private: //it adds a filename to the bank //if pos is -1 it try to find a position //returns -1 if the bank is full, or 0 if the instrument was added int addtobank(int pos, std::string filename, std::string name); void deletefrombank(int pos); void clearbank(); std::string defaultinsname; struct ins_t { ins_t(); bool used; std::string name; std::string filename; struct { bool PADsynth_used; } info; } ins[BANK_SIZE]; std::string dirname; void scanrootdir(std::string rootdir); //scans a root dir for banks }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/CMakeLists.txt000066400000000000000000000007161247673406200253100ustar00rootroot00000000000000include_directories(${MXML_INCLUDE_DIR}) set(zynaddsubfx_misc_SRCS Misc/Bank.cpp Misc/Config.cpp Misc/Dump.cpp Misc/Master.cpp Misc/Microtonal.cpp Misc/Part.cpp Misc/Util.cpp Misc/XMLwrapper.cpp Misc/Recorder.cpp Misc/WavFile.cpp Misc/WaveShapeSmps.cpp ) if(LashEnable) set(zynaddsubfx_misc_SRCS ${zynaddsubfx_misc_SRCS} Misc/LASHClient.cpp PARENT_SCOPE) else() set(zynaddsubfx_misc_SRCS ${zynaddsubfx_misc_SRCS} PARENT_SCOPE) endif() lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp000066400000000000000000000251041247673406200244570ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Config.cpp - Configuration file functions Copyright (C) 2003-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "Config.h" #include "XMLwrapper.h" using namespace std; Config::Config() : workingDir( NULL ) {} void Config::init() { maxstringsize = MAX_STRING_SIZE; //for ui //defaults cfg.SampleRate = 44100; cfg.SoundBufferSize = 256; cfg.OscilSize = 1024; cfg.SwapStereo = 0; cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); cfg.DumpFile = "zynaddsubfx_dump.txt"; cfg.WindowsWaveOutId = 0; cfg.WindowsMidiInId = 0; cfg.BankUIAutoClose = 0; cfg.DumpNotesToFile = 0; cfg.DumpAppend = 1; cfg.GzipCompression = 3; cfg.Interpolation = 0; cfg.CheckPADsynth = 1; cfg.IgnoreProgramChange = 0; cfg.UserInterfaceMode = 0; cfg.VirKeybLayout = 1; winwavemax = 1; winmidimax = 1; //try to find out how many input midi devices are there winmididevices = new winmidionedevice[winmidimax]; for(int i = 0; i < winmidimax; ++i) { winmididevices[i].name = new char[MAX_STRING_SIZE]; for(int j = 0; j < MAX_STRING_SIZE; ++j) winmididevices[i].name[j] = '\0'; } //get the midi input devices name cfg.currentBankDir = "./testbnk"; char filename[MAX_STRING_SIZE]; getConfigFileName(filename, MAX_STRING_SIZE); readConfig(filename); if(cfg.bankRootDirList[0].empty()) { //banks cfg.bankRootDirList[0] = "~/banks"; cfg.bankRootDirList[1] = "./"; cfg.bankRootDirList[2] = "/usr/share/zynaddsubfx/banks"; cfg.bankRootDirList[3] = "/usr/local/share/zynaddsubfx/banks"; #ifdef __APPLE__ cfg.bankRootDirList[4] = "../Resources/banks"; #else cfg.bankRootDirList[4] = "../banks"; #endif cfg.bankRootDirList[5] = "banks"; } if(cfg.presetsDirList[0].empty()) { //presets cfg.presetsDirList[0] = "./"; #ifdef __APPLE__ cfg.presetsDirList[1] = "../Resources/presets"; #else cfg.presetsDirList[1] = "../presets"; #endif cfg.presetsDirList[2] = "presets"; cfg.presetsDirList[3] = "/usr/share/zynaddsubfx/presets"; cfg.presetsDirList[4] = "/usr/local/share/zynaddsubfx/presets"; } cfg.LinuxALSAaudioDev = "default"; cfg.nameTag = ""; } Config::~Config() { delete [] cfg.LinuxOSSWaveOutDev; delete [] cfg.LinuxOSSSeqInDev; for(int i = 0; i < winmidimax; ++i) delete [] winmididevices[i].name; delete [] winmididevices; } void Config::save() { char filename[MAX_STRING_SIZE]; getConfigFileName(filename, MAX_STRING_SIZE); saveConfig(filename); } void Config::clearbankrootdirlist() { for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) cfg.bankRootDirList[i].clear(); } void Config::clearpresetsdirlist() { for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) cfg.presetsDirList[i].clear(); } void Config::readConfig(const char *filename) { XMLwrapper xmlcfg; if(xmlcfg.loadXMLfile(filename) < 0) return; if(xmlcfg.enterbranch("CONFIGURATION")) { cfg.SampleRate = xmlcfg.getpar("sample_rate", cfg.SampleRate, 4000, 1024000); cfg.SoundBufferSize = xmlcfg.getpar("sound_buffer_size", cfg.SoundBufferSize, 16, 8192); cfg.OscilSize = xmlcfg.getpar("oscil_size", cfg.OscilSize, MAX_AD_HARMONICS * 2, 131072); cfg.SwapStereo = xmlcfg.getpar("swap_stereo", cfg.SwapStereo, 0, 1); cfg.BankUIAutoClose = xmlcfg.getpar("bank_window_auto_close", cfg.BankUIAutoClose, 0, 1); cfg.DumpNotesToFile = xmlcfg.getpar("dump_notes_to_file", cfg.DumpNotesToFile, 0, 1); cfg.DumpAppend = xmlcfg.getpar("dump_append", cfg.DumpAppend, 0, 1); cfg.DumpFile = xmlcfg.getparstr("dump_file", ""); cfg.GzipCompression = xmlcfg.getpar("gzip_compression", cfg.GzipCompression, 0, 9); cfg.currentBankDir = xmlcfg.getparstr("bank_current", ""); cfg.Interpolation = xmlcfg.getpar("interpolation", cfg.Interpolation, 0, 1); cfg.CheckPADsynth = xmlcfg.getpar("check_pad_synth", cfg.CheckPADsynth, 0, 1); cfg.IgnoreProgramChange = xmlcfg.getpar("ignore_program_change", cfg.IgnoreProgramChange, 0, 1); cfg.UserInterfaceMode = xmlcfg.getpar("user_interface_mode", cfg.UserInterfaceMode, 0, 2); cfg.VirKeybLayout = xmlcfg.getpar("virtual_keyboard_layout", cfg.VirKeybLayout, 0, 10); //get bankroot dirs for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(xmlcfg.enterbranch("BANKROOT", i)) { cfg.bankRootDirList[i] = xmlcfg.getparstr("bank_root", ""); xmlcfg.exitbranch(); } //get preset root dirs for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(xmlcfg.enterbranch("PRESETSROOT", i)) { cfg.presetsDirList[i] = xmlcfg.getparstr("presets_root", ""); xmlcfg.exitbranch(); } //linux stuff xmlcfg.getparstr("linux_oss_wave_out_dev", cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE); xmlcfg.getparstr("linux_oss_seq_in_dev", cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE); //windows stuff cfg.WindowsWaveOutId = xmlcfg.getpar("windows_wave_out_id", cfg.WindowsWaveOutId, 0, winwavemax); cfg.WindowsMidiInId = xmlcfg.getpar("windows_midi_in_id", cfg.WindowsMidiInId, 0, winmidimax); xmlcfg.exitbranch(); } cfg.OscilSize = (int) powf(2, ceil(logf(cfg.OscilSize - 1.0f) / logf(2.0f))); } void Config::saveConfig(const char *filename) { XMLwrapper *xmlcfg = new XMLwrapper(); xmlcfg->beginbranch("CONFIGURATION"); xmlcfg->addpar("sample_rate", cfg.SampleRate); xmlcfg->addpar("sound_buffer_size", cfg.SoundBufferSize); xmlcfg->addpar("oscil_size", cfg.OscilSize); xmlcfg->addpar("swap_stereo", cfg.SwapStereo); xmlcfg->addpar("bank_window_auto_close", cfg.BankUIAutoClose); xmlcfg->addpar("dump_notes_to_file", cfg.DumpNotesToFile); xmlcfg->addpar("dump_append", cfg.DumpAppend); xmlcfg->addparstr("dump_file", cfg.DumpFile); xmlcfg->addpar("gzip_compression", cfg.GzipCompression); xmlcfg->addpar("check_pad_synth", cfg.CheckPADsynth); xmlcfg->addpar("ignore_program_change", cfg.IgnoreProgramChange); xmlcfg->addparstr("bank_current", cfg.currentBankDir); xmlcfg->addpar("user_interface_mode", cfg.UserInterfaceMode); xmlcfg->addpar("virtual_keyboard_layout", cfg.VirKeybLayout); for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(!cfg.bankRootDirList[i].empty()) { xmlcfg->beginbranch("BANKROOT", i); xmlcfg->addparstr("bank_root", cfg.bankRootDirList[i]); xmlcfg->endbranch(); } for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(!cfg.presetsDirList[i].empty()) { xmlcfg->beginbranch("PRESETSROOT", i); xmlcfg->addparstr("presets_root", cfg.presetsDirList[i]); xmlcfg->endbranch(); } xmlcfg->addpar("interpolation", cfg.Interpolation); //linux stuff xmlcfg->addparstr("linux_oss_wave_out_dev", cfg.LinuxOSSWaveOutDev); xmlcfg->addparstr("linux_oss_seq_in_dev", cfg.LinuxOSSSeqInDev); //windows stuff xmlcfg->addpar("windows_wave_out_id", cfg.WindowsWaveOutId); xmlcfg->addpar("windows_midi_in_id", cfg.WindowsMidiInId); xmlcfg->endbranch(); int tmp = cfg.GzipCompression; cfg.GzipCompression = 0; xmlcfg->saveXMLfile(filename); cfg.GzipCompression = tmp; delete (xmlcfg); } void Config::getConfigFileName(char *name, int namesize) { name[0] = 0; if( workingDir != NULL ) { snprintf(name, namesize, "%s%s", workingDir, ".zynaddsubfxXML.cfg"); } else { snprintf(name, namesize, "%s%s", getenv("HOME"), "/.zynaddsubfxXML.cfg"); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h000066400000000000000000000045331247673406200241270ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Config.h - Configuration file functions Copyright (C) 2003-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CONFIG_H #define CONFIG_H #include "../globals.h" #include #define MAX_STRING_SIZE 4000 #define MAX_BANK_ROOT_DIRS 100 /**Configuration file functions*/ class Config { public: /** Constructor*/ Config(); /** Destructor*/ ~Config(); struct { char *LinuxOSSWaveOutDev, *LinuxOSSSeqInDev; int SampleRate, SoundBufferSize, OscilSize, SwapStereo; int WindowsWaveOutId, WindowsMidiInId; int BankUIAutoClose; int DumpNotesToFile, DumpAppend; int GzipCompression; int Interpolation; std::string DumpFile; std::string bankRootDirList[MAX_BANK_ROOT_DIRS], currentBankDir; std::string presetsDirList[MAX_BANK_ROOT_DIRS]; int CheckPADsynth; int IgnoreProgramChange; int UserInterfaceMode; int VirKeybLayout; std::string LinuxALSAaudioDev; std::string nameTag; } cfg; int winwavemax, winmidimax; //number of wave/midi devices on Windows int maxstringsize; char * workingDir; struct winmidionedevice { char *name; }; winmidionedevice *winmididevices; void clearbankrootdirlist(); void clearpresetsdirlist(); void init(); void save(); private: void readConfig(const char *filename); void saveConfig(const char *filename); void getConfigFileName(char *name, int namesize); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h000066400000000000000000000062441247673406200243430ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Control.h - Defines a variable that can be controled from a frontend Copyright (C) 2009 Harald Hvaal Author: Harald Hvaal This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _CONTROL_H_ #define _CONTROL_H_ #include class Control { public: /** * The parent is the logical owner of this control. Parent should only * be null for the root node. * The id is a string uniquely identifying this control within the * context of the parent control. No spaces or dots are allowed in this * id. * Children id's are denoted by ., so that one * can refer to any control in the hierarchy by separating them with * dots. Example: Main.AddSynth.FrequencyLFO.Amplitude */ Control(Control *parent, string id); /** * Will recursively get the XML representation for all the subcontrols. * Used for saving to file and copy-pasting settings */ string getXMLRepresentation(); /** * Set the value of this (and possibly subcomponents as well) based on * a xml description. */ void restoreFromXML(string xml); /** * Register a controluser. This will cause this user to be notified * whenever the contents of the control changes. */ void registerControlUser(ControlUser *user); /** * This should return a string representation of the controls internal * value */ virtual string getStringRepresentation() = 0; }; class FloatControl:public Control { public: /** * Set the value of this control. If the ControlUser variable is set, * then this user will not be updated with the new value. This is to * avoid setting a value being set back to the source that set it * (which would be redundant, or possibly causing infinite setValue * loops). * NOTE: this function is thread-safe (using a mutex internally) */ void setValue(float value, ControlUser *user = NULL); /** * Reimplemented from Control */ virtual string getStringRepresentation(); float value(); }; class ControlUser { public: /** * Pure virtual method, to notify the controluser that the value has * been changed internally, and needs to be read again. */ virtual void controlUpdated(Control *control) = 0; }; #endif /* _CONTROL_H_ */ lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp000066400000000000000000000060341247673406200241600ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Dump.cpp - It dumps the notes to a text file Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "Util.h" #include "Dump.h" Dump dump; Dump::Dump() { file = NULL; tick = 0; k = 0; keyspressed = 0; } Dump::~Dump() { if(file != NULL) { int duration = tick * synth->buffersize_f / synth->samplerate_f; fprintf( file, "\n# statistics: duration = %d seconds; keyspressed = %d\n\n\n\n", duration, keyspressed); fclose(file); } } void Dump::startnow() { if(file != NULL) return; //the file is already open if(config.cfg.DumpNotesToFile != 0) { if(config.cfg.DumpAppend != 0) file = fopen(config.cfg.DumpFile.c_str(), "a"); else file = fopen(config.cfg.DumpFile.c_str(), "w"); if(file == NULL) return; if(config.cfg.DumpAppend != 0) fprintf(file, "%s", "#************************************\n"); time_t tm = time(NULL); fprintf(file, "#date/time = %s\n", ctime(&tm)); fprintf(file, "#1 tick = %g milliseconds\n", synth->buffersize_f * 1000.0f / synth->samplerate_f); fprintf(file, "SAMPLERATE = %d\n", synth->samplerate); fprintf(file, "TICKSIZE = %d #samples\n", synth->buffersize); fprintf(file, "\n\nSTART\n"); } } void Dump::inctick() { tick++; } void Dump::dumpnote(char chan, char note, char vel) { if(file == NULL) return; if(note == 0) return; if(vel == 0) fprintf(file, "n %d -> %d %d \n", tick, chan, note); //note off else fprintf(file, "N %d -> %d %d %d \n", tick, chan, note, vel); //note on if(vel != 0) keyspressed++; #ifndef JACKAUDIOOUT if(k++ > 25) { fflush(file); k = 0; } #endif } void Dump::dumpcontroller(char chan, unsigned int type, int par) { if(file == NULL) return; switch(type) { case C_pitchwheel: fprintf(file, "P %d -> %d %d\n", tick, chan, par); break; default: fprintf(file, "C %d -> %d %d %d\n", tick, chan, type, par); break; } #ifndef JACKAUDIOOUT if(k++ > 25) { fflush(file); k = 0; } #endif } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h000066400000000000000000000041021247673406200236170ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Dump.h - It dumps the notes to a text file Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef DUMP_H #define DUMP_H #include /**Object used to dump the notes into a text file * \todo see if this object should have knowledge about the file * that it will write to * \todo upgrade from stdio to iostream*/ class Dump { public: /**Constructor*/ Dump(); /**Destructor * Closes the dumpfile*/ ~Dump(); /**Open dumpfile and prepare it for dumps * \todo see if this fits better in the constructor*/ void startnow(); /**Tick the timestamp*/ void inctick(); /**Dump Note to dumpfile * @param chan The channel of the note * @param note The note * @param vel The velocity of the note*/ void dumpnote(char chan, char note, char vel); /** Dump the Controller * @param chan The channel of the Controller * @param type The type * @param par The value of the controller * \todo figure out what type is exactly meaning*/ void dumpcontroller(char chan, unsigned int type, int par); private: FILE *file; int tick; int k; //This appears to be a constant used to flush the file //periodically when JACK is used int keyspressed; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp000066400000000000000000000056001247673406200251370ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer LASHClient.cpp - LASH support Copyright (C) 2006-2009 Lars Luthman Author: Lars Luthman This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "LASHClient.h" LASHClient::LASHClient(int *argc, char ***argv) { client = lash_init(lash_extract_args(argc, argv), "ZynAddSubFX", LASH_Config_File, LASH_PROTOCOL(2, 0)); } void LASHClient::setalsaid(int id) { if(lash_enabled(client)) if(id != -1) lash_alsa_client_id(client, id); } void LASHClient::setjackname(const char *name) { if(lash_enabled(client)) if(name != NULL) { lash_jack_client_name(client, name); lash_event_t *event = lash_event_new_with_type(LASH_Client_Name); lash_event_set_string(event, name); lash_send_event(client, event); } } LASHClient::Event LASHClient::checkevents(std::string &filename) { if(!lash_enabled(client)) return NoEvent; Event received = NoEvent; lash_event_t *event; while((event = lash_get_event(client))) { // save if(lash_event_get_type(event) == LASH_Save_File) { std::cerr << "LASH event: LASH_Save_File" << std::endl; filename = std::string(lash_event_get_string(event)) + "/master.xmz"; received = Save; break; } // restore else if(lash_event_get_type(event) == LASH_Restore_File) { std::cerr << "LASH event: LASH_Restore_File" << std::endl; filename = std::string(lash_event_get_string(event)) + "/master.xmz"; received = Restore; break; } // quit else if(lash_event_get_type(event) == LASH_Quit) { std::cerr << "LASH event: LASH_Quit" << std::endl; received = Quit; break; } lash_event_destroy(event); } return received; } void LASHClient::confirmevent(Event event) { if(event == Save) lash_send_event(client, lash_event_new_with_type(LASH_Save_File)); else if(event == Restore) lash_send_event(client, lash_event_new_with_type(LASH_Restore_File)); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h000066400000000000000000000033061247673406200246050ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer LASHClient.h - LASH support Copyright (C) 2006-2009 Lars Luthman Author: Lars Luthman This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef LASHClient_h #define LASHClient_h #include #include #include /** This class wraps up some functions for initialising and polling * the LASH daemon.*/ class LASHClient { public: /**Enum to represent the LASH events that are currently handled*/ enum Event { Save, Restore, Quit, NoEvent }; /** Constructor * @param argc number of arguments * @param argv the text arguments*/ LASHClient(int *argc, char ***argv); /**set the ALSA id * @param id new ALSA id*/ void setalsaid(int id); /**Set the JACK name * @param name the new name*/ void setjackname(const char *name); Event checkevents(std::string &filename); void confirmevent(Event event); private: lash_client_t *client; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp000066400000000000000000000551261247673406200245140ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Master.cpp - It sends Midi Messages to Parts, receives samples from parts, process them with system/insertion effects and mix them Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Master.h" #include "Part.h" #include "../Params/LFOParams.h" #include "../Effects/EffectMgr.h" #include "../DSP/FFTwrapper.h" #include #include #include #include #include #include #include using namespace std; vuData::vuData(void) :outpeakl(0.0f), outpeakr(0.0f), maxoutpeakl(0.0f), maxoutpeakr(0.0f), rmspeakl(0.0f), rmspeakr(0.0f), clipped(0) {} static Master* masterInstance = NULL; Master::Master() { swaplr = 0; off = 0; smps = 0; bufl = new float[synth->buffersize]; bufr = new float[synth->buffersize]; pthread_mutex_init(&mutex, NULL); pthread_mutex_init(&vumutex, NULL); fft = new FFTwrapper(synth->oscilsize); shutup = 0; for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { vuoutpeakpart[npart] = 1e-9; fakepeakpart[npart] = 0; } for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) part[npart] = new Part(µtonal, fft, &mutex); //Insertion Effects init for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) insefx[nefx] = new EffectMgr(1, &mutex); //System Effects init for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) sysefx[nefx] = new EffectMgr(0, &mutex); defaults(); } void Master::defaults() { volume = 1.0f; setPvolume(80); setPkeyshift(64); for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { part[npart]->defaults(); part[npart]->Prcvchn = npart % NUM_MIDI_CHANNELS; } partonoff(0, 1); //enable the first part for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) { insefx[nefx]->defaults(); Pinsparts[nefx] = -1; } //System Effects init for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) { sysefx[nefx]->defaults(); for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) setPsysefxvol(npart, nefx, 0); for(int nefxto = 0; nefxto < NUM_SYS_EFX; ++nefxto) setPsysefxsend(nefx, nefxto, 0); } microtonal.defaults(); ShutUp(); } bool Master::mutexLock(lockset request) { switch(request) { case MUTEX_TRYLOCK: return !pthread_mutex_trylock(&mutex); case MUTEX_LOCK: return !pthread_mutex_lock(&mutex); case MUTEX_UNLOCK: return !pthread_mutex_unlock(&mutex); } return false; } Master &Master::getInstance() { if (!masterInstance) masterInstance = new Master; return *masterInstance; } void Master::deleteInstance() { if (masterInstance) { delete masterInstance; masterInstance = NULL; } } /* * Note On Messages (velocity=0 for NoteOff) */ void Master::noteOn(char chan, char note, char velocity) { if(velocity) { for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) if(chan == part[npart]->Prcvchn) { fakepeakpart[npart] = velocity * 2; if(part[npart]->Penabled) part[npart]->NoteOn(note, velocity, keyshift); } } else this->noteOff(chan, note); HDDRecorder.triggernow(); } /* * Note Off Messages */ void Master::noteOff(char chan, char note) { for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) if((chan == part[npart]->Prcvchn) && part[npart]->Penabled) part[npart]->NoteOff(note); } /* * Pressure Messages (velocity=0 for NoteOff) */ void Master::polyphonicAftertouch(char chan, char note, char velocity) { if(velocity) { for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) if(chan == part[npart]->Prcvchn) if(part[npart]->Penabled) part[npart]->PolyphonicAftertouch(note, velocity, keyshift); } else this->noteOff(chan, note); } /* * Controllers */ void Master::setController(char chan, int type, int par) { if((type == C_dataentryhi) || (type == C_dataentrylo) || (type == C_nrpnhi) || (type == C_nrpnlo)) { //Process RPN and NRPN by the Master (ignore the chan) ctl.setparameternumber(type, par); int parhi = -1, parlo = -1, valhi = -1, vallo = -1; if(ctl.getnrpn(&parhi, &parlo, &valhi, &vallo) == 0) //this is NRPN //fprintf(stderr,"rcv. NRPN: %d %d %d %d\n",parhi,parlo,valhi,vallo); switch(parhi) { case 0x04: //System Effects if(parlo < NUM_SYS_EFX) sysefx[parlo]->seteffectpar_nolock(valhi, vallo); ; break; case 0x08: //Insertion Effects if(parlo < NUM_INS_EFX) insefx[parlo]->seteffectpar_nolock(valhi, vallo); ; break; } ; } else if(type == C_bankselectmsb) { // Change current bank if(((unsigned int)par < bank.banks.size()) && (bank.banks[par].dir != bank.bankfiletitle)) bank.loadbank(bank.banks[par].dir); } else { //other controllers for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) //Send the controller to all part assigned to the channel if((chan == part[npart]->Prcvchn) && (part[npart]->Penabled != 0)) part[npart]->SetController(type, par); ; if(type == C_allsoundsoff) { //cleanup insertion/system FX for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) sysefx[nefx]->cleanup(); for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) insefx[nefx]->cleanup(); } } } void Master::setProgram(char chan, unsigned int pgm) { if(config.cfg.IgnoreProgramChange) return; for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) if(chan == part[npart]->Prcvchn) { bank.loadfromslot(pgm, part[npart]); //Hack to get pad note parameters to update //this is not real time safe and makes assumptions about the calling //convention of this function... pthread_mutex_unlock(&mutex); part[npart]->applyparameters(); pthread_mutex_lock(&mutex); } } void Master::vuUpdate(const float *outl, const float *outr) { //Peak computation (for vumeters) vu.outpeakl = 1e-12; vu.outpeakr = 1e-12; for(int i = 0; i < synth->buffersize; ++i) { if(fabs(outl[i]) > vu.outpeakl) vu.outpeakl = fabs(outl[i]); if(fabs(outr[i]) > vu.outpeakr) vu.outpeakr = fabs(outr[i]); } if((vu.outpeakl > 1.0f) || (vu.outpeakr > 1.0f)) vu.clipped = 1; if(vu.maxoutpeakl < vu.outpeakl) vu.maxoutpeakl = vu.outpeakl; if(vu.maxoutpeakr < vu.outpeakr) vu.maxoutpeakr = vu.outpeakr; //RMS Peak computation (for vumeters) vu.rmspeakl = 1e-12; vu.rmspeakr = 1e-12; for(int i = 0; i < synth->buffersize; ++i) { vu.rmspeakl += outl[i] * outl[i]; vu.rmspeakr += outr[i] * outr[i]; } vu.rmspeakl = sqrt(vu.rmspeakl / synth->buffersize_f); vu.rmspeakr = sqrt(vu.rmspeakr / synth->buffersize_f); //Part Peak computation (for Part vumeters or fake part vumeters) for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { vuoutpeakpart[npart] = 1.0e-12f; if(part[npart]->Penabled != 0) { float *outl = part[npart]->partoutl, *outr = part[npart]->partoutr; for(int i = 0; i < synth->buffersize; ++i) { float tmp = fabs(outl[i] + outr[i]); if(tmp > vuoutpeakpart[npart]) vuoutpeakpart[npart] = tmp; } vuoutpeakpart[npart] *= volume; } else if(fakepeakpart[npart] > 1) fakepeakpart[npart]--; } } /* * Enable/Disable a part */ void Master::partonoff(int npart, int what) { if(npart >= NUM_MIDI_PARTS) return; if(what == 0) { //disable part fakepeakpart[npart] = 0; part[npart]->Penabled = 0; part[npart]->cleanup(); for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) { if(Pinsparts[nefx] == npart) insefx[nefx]->cleanup(); ; } } else { //enabled part[npart]->Penabled = 1; fakepeakpart[npart] = 0; } } /* * Master audio out (the final sound) */ void Master::AudioOut(float *outl, float *outr) { //Swaps the Left channel with Right Channel if(swaplr) swap(outl, outr); //clean up the output samples (should not be needed?) memset(outl, 0, synth->bufferbytes); memset(outr, 0, synth->bufferbytes); //Compute part samples and store them part[npart]->partoutl,partoutr for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { if(part[npart]->Penabled != 0 && !pthread_mutex_trylock(&part[npart]->load_mutex)) { part[npart]->ComputePartSmps(); pthread_mutex_unlock(&part[npart]->load_mutex); } } //Insertion effects for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) if(Pinsparts[nefx] >= 0) { int efxpart = Pinsparts[nefx]; if(part[efxpart]->Penabled) insefx[nefx]->out(part[efxpart]->partoutl, part[efxpart]->partoutr); } //Apply the part volumes and pannings (after insertion effects) for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { if(part[npart]->Penabled == 0) continue; Stereo newvol(part[npart]->volume), oldvol(part[npart]->oldvolumel, part[npart]->oldvolumer); float pan = part[npart]->panning; if(pan < 0.5f) newvol.l *= pan * 2.0f; else newvol.r *= (1.0f - pan) * 2.0f; //the volume or the panning has changed and needs interpolation if(ABOVE_AMPLITUDE_THRESHOLD(oldvol.l, newvol.l) || ABOVE_AMPLITUDE_THRESHOLD(oldvol.r, newvol.r)) { for(int i = 0; i < synth->buffersize; ++i) { Stereo vol(INTERPOLATE_AMPLITUDE(oldvol.l, newvol.l, i, synth->buffersize), INTERPOLATE_AMPLITUDE(oldvol.r, newvol.r, i, synth->buffersize)); part[npart]->partoutl[i] *= vol.l; part[npart]->partoutr[i] *= vol.r; } part[npart]->oldvolumel = newvol.l; part[npart]->oldvolumer = newvol.r; } else for(int i = 0; i < synth->buffersize; ++i) { //the volume did not changed part[npart]->partoutl[i] *= newvol.l; part[npart]->partoutr[i] *= newvol.r; } } //System effects for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) { if(sysefx[nefx]->geteffect() == 0) continue; //the effect is disabled float tmpmixl[synth->buffersize]; float tmpmixr[synth->buffersize]; //Clean up the samples used by the system effects memset(tmpmixl, 0, synth->bufferbytes); memset(tmpmixr, 0, synth->bufferbytes); //Mix the channels according to the part settings about System Effect for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { //skip if the part has no output to effect if(Psysefxvol[nefx][npart] == 0) continue; //skip if the part is disabled if(part[npart]->Penabled == 0) continue; //the output volume of each part to system effect const float vol = sysefxvol[nefx][npart]; for(int i = 0; i < synth->buffersize; ++i) { tmpmixl[i] += part[npart]->partoutl[i] * vol; tmpmixr[i] += part[npart]->partoutr[i] * vol; } } // system effect send to next ones for(int nefxfrom = 0; nefxfrom < nefx; ++nefxfrom) if(Psysefxsend[nefxfrom][nefx] != 0) { const float vol = sysefxsend[nefxfrom][nefx]; for(int i = 0; i < synth->buffersize; ++i) { tmpmixl[i] += sysefx[nefxfrom]->efxoutl[i] * vol; tmpmixr[i] += sysefx[nefxfrom]->efxoutr[i] * vol; } } sysefx[nefx]->out(tmpmixl, tmpmixr); //Add the System Effect to sound output const float outvol = sysefx[nefx]->sysefxgetvolume(); for(int i = 0; i < synth->buffersize; ++i) { outl[i] += tmpmixl[i] * outvol; outr[i] += tmpmixr[i] * outvol; } } //Mix all parts for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) if(part[npart]->Penabled) //only mix active parts for(int i = 0; i < synth->buffersize; ++i) { //the volume did not changed outl[i] += part[npart]->partoutl[i]; outr[i] += part[npart]->partoutr[i]; } //Insertion effects for Master Out for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) if(Pinsparts[nefx] == -2) insefx[nefx]->out(outl, outr); //Master Volume for(int i = 0; i < synth->buffersize; ++i) { outl[i] *= volume; outr[i] *= volume; } if(!pthread_mutex_trylock(&vumutex)) { vuUpdate(outl, outr); pthread_mutex_unlock(&vumutex); } //Shutup if it is asked (with fade-out) if(shutup) { for(int i = 0; i < synth->buffersize; ++i) { float tmp = (synth->buffersize_f - i) / synth->buffersize_f; outl[i] *= tmp; outr[i] *= tmp; } ShutUp(); } //update the LFO's time LFOParams::time++; dump.inctick(); } //TODO review the respective code from yoshimi for this //If memory serves correctly, libsamplerate was used void Master::GetAudioOutSamples(size_t nsamples, unsigned samplerate, float *outl, float *outr) { off_t out_off = 0; //Fail when resampling rather than doing a poor job if(synth->samplerate != samplerate) { printf("darn it: %d vs %d\n", synth->samplerate, samplerate); return; } while(nsamples) { //use all available samples if(nsamples >= smps) { memcpy(outl + out_off, bufl + off, sizeof(float) * smps); memcpy(outr + out_off, bufr + off, sizeof(float) * smps); nsamples -= smps; //generate samples AudioOut(bufl, bufr); off = 0; out_off += smps; smps = synth->buffersize; } else { //use some samples memcpy(outl + out_off, bufl + off, sizeof(float) * nsamples); memcpy(outr + out_off, bufr + off, sizeof(float) * nsamples); smps -= nsamples; off += nsamples; nsamples = 0; } } } Master::~Master() { delete []bufl; delete []bufr; for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) delete part[npart]; for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) delete insefx[nefx]; for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) delete sysefx[nefx]; delete fft; pthread_mutex_destroy(&mutex); pthread_mutex_destroy(&vumutex); } /* * Parameter control */ void Master::setPvolume(char Pvolume_) { Pvolume = Pvolume_; volume = dB2rap((Pvolume - 96.0f) / 96.0f * 40.0f); } void Master::setPkeyshift(char Pkeyshift_) { Pkeyshift = Pkeyshift_; keyshift = (int)Pkeyshift - 64; } void Master::setPsysefxvol(int Ppart, int Pefx, char Pvol) { Psysefxvol[Pefx][Ppart] = Pvol; sysefxvol[Pefx][Ppart] = powf(0.1f, (1.0f - Pvol / 96.0f) * 2.0f); } void Master::setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol) { Psysefxsend[Pefxfrom][Pefxto] = Pvol; sysefxsend[Pefxfrom][Pefxto] = powf(0.1f, (1.0f - Pvol / 96.0f) * 2.0f); } /* * Panic! (Clean up all parts and effects) */ void Master::ShutUp() { for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { part[npart]->cleanup(); fakepeakpart[npart] = 0; } for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) insefx[nefx]->cleanup(); for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) sysefx[nefx]->cleanup(); vuresetpeaks(); shutup = 0; } /* * Reset peaks and clear the "cliped" flag (for VU-meter) */ void Master::vuresetpeaks() { pthread_mutex_lock(&vumutex); vu.outpeakl = 1e-9; vu.outpeakr = 1e-9; vu.maxoutpeakl = 1e-9; vu.maxoutpeakr = 1e-9; vu.clipped = 0; pthread_mutex_unlock(&vumutex); } vuData Master::getVuData() { vuData tmp; pthread_mutex_lock(&vumutex); tmp = vu; pthread_mutex_unlock(&vumutex); return tmp; } void Master::applyparameters(bool lockmutex) { for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) part[npart]->applyparameters(lockmutex); } void Master::add2XML(XMLwrapper *xml) { xml->addpar("volume", Pvolume); xml->addpar("key_shift", Pkeyshift); xml->addparbool("nrpn_receive", ctl.NRPN.receive); xml->beginbranch("MICROTONAL"); microtonal.add2XML(xml); xml->endbranch(); for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { xml->beginbranch("PART", npart); part[npart]->add2XML(xml); xml->endbranch(); } xml->beginbranch("SYSTEM_EFFECTS"); for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) { xml->beginbranch("SYSTEM_EFFECT", nefx); xml->beginbranch("EFFECT"); sysefx[nefx]->add2XML(xml); xml->endbranch(); for(int pefx = 0; pefx < NUM_MIDI_PARTS; ++pefx) { xml->beginbranch("VOLUME", pefx); xml->addpar("vol", Psysefxvol[nefx][pefx]); xml->endbranch(); } for(int tonefx = nefx + 1; tonefx < NUM_SYS_EFX; ++tonefx) { xml->beginbranch("SENDTO", tonefx); xml->addpar("send_vol", Psysefxsend[nefx][tonefx]); xml->endbranch(); } xml->endbranch(); } xml->endbranch(); xml->beginbranch("INSERTION_EFFECTS"); for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) { xml->beginbranch("INSERTION_EFFECT", nefx); xml->addpar("part", Pinsparts[nefx]); xml->beginbranch("EFFECT"); insefx[nefx]->add2XML(xml); xml->endbranch(); xml->endbranch(); } xml->endbranch(); } int Master::getalldata(char **data) { XMLwrapper *xml = new XMLwrapper(); xml->beginbranch("MASTER"); pthread_mutex_lock(&mutex); add2XML(xml); pthread_mutex_unlock(&mutex); xml->endbranch(); *data = xml->getXMLdata(); delete (xml); return strlen(*data) + 1; } void Master::putalldata(char *data, int /*size*/) { XMLwrapper *xml = new XMLwrapper(); if(!xml->putXMLdata(data)) { delete (xml); return; } if(xml->enterbranch("MASTER") == 0) return; pthread_mutex_lock(&mutex); getfromXML(xml); pthread_mutex_unlock(&mutex); xml->exitbranch(); delete (xml); } int Master::saveXML(const char *filename) { XMLwrapper *xml = new XMLwrapper(); xml->beginbranch("MASTER"); add2XML(xml); xml->endbranch(); int result = xml->saveXMLfile(filename); delete (xml); return result; } int Master::loadXML(const char *filename) { XMLwrapper *xml = new XMLwrapper(); if(xml->loadXMLfile(filename) < 0) { delete (xml); return -1; } if(xml->enterbranch("MASTER") == 0) return -10; getfromXML(xml); xml->exitbranch(); delete (xml); return 0; } void Master::getfromXML(XMLwrapper *xml) { setPvolume(xml->getpar127("volume", Pvolume)); setPkeyshift(xml->getpar127("key_shift", Pkeyshift)); ctl.NRPN.receive = xml->getparbool("nrpn_receive", ctl.NRPN.receive); part[0]->Penabled = 0; for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) { if(xml->enterbranch("PART", npart) == 0) continue; part[npart]->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("MICROTONAL")) { microtonal.getfromXML(xml); xml->exitbranch(); } sysefx[0]->changeeffect(0); if(xml->enterbranch("SYSTEM_EFFECTS")) { for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) { if(xml->enterbranch("SYSTEM_EFFECT", nefx) == 0) continue; if(xml->enterbranch("EFFECT")) { sysefx[nefx]->getfromXML(xml); xml->exitbranch(); } for(int partefx = 0; partefx < NUM_MIDI_PARTS; ++partefx) { if(xml->enterbranch("VOLUME", partefx) == 0) continue; setPsysefxvol(partefx, nefx, xml->getpar127("vol", Psysefxvol[partefx][nefx])); xml->exitbranch(); } for(int tonefx = nefx + 1; tonefx < NUM_SYS_EFX; ++tonefx) { if(xml->enterbranch("SENDTO", tonefx) == 0) continue; setPsysefxsend(nefx, tonefx, xml->getpar127("send_vol", Psysefxsend[nefx][tonefx])); xml->exitbranch(); } xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("INSERTION_EFFECTS")) { for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) { if(xml->enterbranch("INSERTION_EFFECT", nefx) == 0) continue; Pinsparts[nefx] = xml->getpar("part", Pinsparts[nefx], -2, NUM_MIDI_PARTS); if(xml->enterbranch("EFFECT")) { insefx[nefx]->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h000066400000000000000000000125651247673406200241610ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Master.h - It sends Midi Messages to Parts, receives samples from parts, process them with system/insertion effects and mix them Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef MASTER_H #define MASTER_H #include #include "../globals.h" #include "Microtonal.h" #include "Bank.h" #include "Recorder.h" #include "Dump.h" #include "XMLwrapper.h" #include "../Params/Controller.h" typedef enum { MUTEX_TRYLOCK, MUTEX_LOCK, MUTEX_UNLOCK } lockset; extern Dump dump; struct vuData { vuData(void); float outpeakl, outpeakr, maxoutpeakl, maxoutpeakr, rmspeakl, rmspeakr; int clipped; }; /** It sends Midi Messages to Parts, receives samples from parts, * process them with system/insertion effects and mix them */ class Master { public: /** Constructor TODO make private*/ Master(); /** Destructor*/ ~Master(); static Master &getInstance(); static void deleteInstance(); /**Saves all settings to a XML file * @return 0 for ok or <0 if there is an error*/ int saveXML(const char *filename); /**This adds the parameters to the XML data*/ void add2XML(XMLwrapper *xml); void defaults(); /**loads all settings from a XML file * @return 0 for ok or -1 if there is an error*/ int loadXML(const char *filename); void applyparameters(bool lockmutex = true); void getfromXML(XMLwrapper *xml); /**get all data to a newly allocated array (used for VST) * @return the datasize*/ int getalldata(char **data); /**put all data from the *data array to zynaddsubfx parameters (used for VST)*/ void putalldata(char *data, int size); //Mutex control /**Control the Master's mutex state. * @param lockset either trylock, lock, or unlock. * @return true when successful false otherwise.*/ bool mutexLock(lockset request); //Midi IN void noteOn(char chan, char note, char velocity); void noteOff(char chan, char note); void polyphonicAftertouch(char chan, char note, char velocity); void setController(char chan, int type, int par); void setProgram(char chan, unsigned int pgm); //void NRPN... void ShutUp(); int shutup; void vuUpdate(const float *outl, const float *outr); /**Audio Output*/ void AudioOut(float *outl, float *outr); /**Audio Output (for callback mode). This allows the program to be controled by an external program*/ void GetAudioOutSamples(size_t nsamples, unsigned samplerate, float *outl, float *outr); void partonoff(int npart, int what); /**parts \todo see if this can be made to be dynamic*/ class Part * part[NUM_MIDI_PARTS]; //parameters unsigned char Pvolume; unsigned char Pkeyshift; unsigned char Psysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS]; unsigned char Psysefxsend[NUM_SYS_EFX][NUM_SYS_EFX]; //parameters control void setPvolume(char Pvolume_); void setPkeyshift(char Pkeyshift_); void setPsysefxvol(int Ppart, int Pefx, char Pvol); void setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol); //effects class EffectMgr * sysefx[NUM_SYS_EFX]; //system class EffectMgr * insefx[NUM_INS_EFX]; //insertion // void swapcopyeffects(int what,int type,int neff1,int neff2); //HDD recorder Recorder HDDRecorder; //part that's apply the insertion effect; -1 to disable short int Pinsparts[NUM_INS_EFX]; //peaks for VU-meter void vuresetpeaks(); //get VU-meter data vuData getVuData(); //peaks for part VU-meters /**\todo synchronize this with a mutex*/ float vuoutpeakpart[NUM_MIDI_PARTS]; unsigned char fakepeakpart[NUM_MIDI_PARTS]; //this is used to compute the "peak" when the part is disabled Controller ctl; bool swaplr; //if L and R are swapped //other objects Microtonal microtonal; Bank bank; class FFTwrapper * fft; pthread_mutex_t mutex; pthread_mutex_t vumutex; private: vuData vu; float volume; float sysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS]; float sysefxsend[NUM_SYS_EFX][NUM_SYS_EFX]; int keyshift; //information relevent to generating plugin audio samples float *bufl; float *bufr; off_t off; size_t smps; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp000066400000000000000000000466571247673406200254010ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Microtonal.cpp - Tuning settings and microtonal capabilities Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "Microtonal.h" #define MAX_LINE_SIZE 80 Microtonal::Microtonal() { Pname = new unsigned char[MICROTONAL_MAX_NAME_LEN]; Pcomment = new unsigned char[MICROTONAL_MAX_NAME_LEN]; defaults(); } void Microtonal::defaults() { Pinvertupdown = 0; Pinvertupdowncenter = 60; octavesize = 12; Penabled = 0; PAnote = 69; PAfreq = 440.0f; Pscaleshift = 64; Pfirstkey = 0; Plastkey = 127; Pmiddlenote = 60; Pmapsize = 12; Pmappingenabled = 0; for(int i = 0; i < 128; ++i) Pmapping[i] = i; for(int i = 0; i < MAX_OCTAVE_SIZE; ++i) { octave[i].tuning = tmpoctave[i].tuning = powf( 2, (i % octavesize + 1) / 12.0f); octave[i].type = tmpoctave[i].type = 1; octave[i].x1 = tmpoctave[i].x1 = (i % octavesize + 1) * 100; octave[i].x2 = tmpoctave[i].x2 = 0; } octave[11].type = 2; octave[11].x1 = 2; octave[11].x2 = 1; for(int i = 0; i < MICROTONAL_MAX_NAME_LEN; ++i) { Pname[i] = '\0'; Pcomment[i] = '\0'; } snprintf((char *) Pname, MICROTONAL_MAX_NAME_LEN, "12tET"); snprintf((char *) Pcomment, MICROTONAL_MAX_NAME_LEN, "Equal Temperament 12 notes per octave"); Pglobalfinedetune = 64; } Microtonal::~Microtonal() { delete [] Pname; delete [] Pcomment; } /* * Get the size of the octave */ unsigned char Microtonal::getoctavesize() const { if(Penabled != 0) return octavesize; else return 12; } /* * Get the frequency according the note number */ float Microtonal::getnotefreq(int note, int keyshift) const { // in this function will appears many times things like this: // var=(a+b*100)%b // I had written this way because if I use var=a%b gives unwanted results when a<0 // This is the same with divisions. if((Pinvertupdown != 0) && ((Pmappingenabled == 0) || (Penabled == 0))) note = (int) Pinvertupdowncenter * 2 - note; //compute global fine detune float globalfinedetunerap = powf(2.0f, (Pglobalfinedetune - 64.0f) / 1200.0f); //-64.0f .. 63.0f cents if(Penabled == 0) return powf(2.0f, (note - PAnote + keyshift) / 12.0f) * PAfreq * globalfinedetunerap; //12tET int scaleshift = ((int)Pscaleshift - 64 + (int) octavesize * 100) % octavesize; //compute the keyshift float rap_keyshift = 1.0f; if(keyshift != 0) { int kskey = (keyshift + (int)octavesize * 100) % octavesize; int ksoct = (keyshift + (int)octavesize * 100) / octavesize - 100; rap_keyshift = (kskey == 0) ? (1.0f) : (octave[kskey - 1].tuning); rap_keyshift *= powf(octave[octavesize - 1].tuning, ksoct); } //if the mapping is enabled if(Pmappingenabled != 0) { if((note < Pfirstkey) || (note > Plastkey)) return -1.0f; //Compute how many mapped keys are from middle note to reference note //and find out the proportion between the freq. of middle note and "A" note int tmp = PAnote - Pmiddlenote, minus = 0; if(tmp < 0) { tmp = -tmp; minus = 1; } int deltanote = 0; for(int i = 0; i < tmp; ++i) if(Pmapping[i % Pmapsize] >= 0) deltanote++; float rap_anote_middlenote = (deltanote == 0) ? (1.0f) : (octave[(deltanote - 1) % octavesize].tuning); if(deltanote != 0) rap_anote_middlenote *= powf(octave[octavesize - 1].tuning, (deltanote - 1) / octavesize); if(minus != 0) rap_anote_middlenote = 1.0f / rap_anote_middlenote; //Convert from note (midi) to degree (note from the tunning) int degoct = (note - (int)Pmiddlenote + (int) Pmapsize * 200) / (int)Pmapsize - 200; int degkey = (note - Pmiddlenote + (int)Pmapsize * 100) % Pmapsize; degkey = Pmapping[degkey]; if(degkey < 0) return -1.0f; //this key is not mapped //invert the keyboard upside-down if it is asked for //TODO: do the right way by using Pinvertupdowncenter if(Pinvertupdown != 0) { degkey = octavesize - degkey - 1; degoct = -degoct; } //compute the frequency of the note degkey = degkey + scaleshift; degoct += degkey / octavesize; degkey %= octavesize; float freq = (degkey == 0) ? (1.0f) : octave[degkey - 1].tuning; freq *= powf(octave[octavesize - 1].tuning, degoct); freq *= PAfreq / rap_anote_middlenote; freq *= globalfinedetunerap; if(scaleshift != 0) freq /= octave[scaleshift - 1].tuning; return freq * rap_keyshift; } else { //if the mapping is disabled int nt = note - PAnote + scaleshift; int ntkey = (nt + (int)octavesize * 100) % octavesize; int ntoct = (nt - ntkey) / octavesize; float oct = octave[octavesize - 1].tuning; float freq = octave[(ntkey + octavesize - 1) % octavesize].tuning * powf(oct, ntoct) * PAfreq; if(ntkey == 0) freq /= oct; if(scaleshift != 0) freq /= octave[scaleshift - 1].tuning; // fprintf(stderr,"note=%d freq=%.3f cents=%d\n",note,freq,(int)floor(logf(freq/PAfreq)/logf(2.0f)*1200.0f+0.5f)); freq *= globalfinedetunerap; return freq * rap_keyshift; } } bool Microtonal::operator==(const Microtonal µ) const { return !(*this != micro); } bool Microtonal::operator!=(const Microtonal µ) const { //A simple macro to test equality MiCRotonal EQuals (not the perfect //approach, but good enough) #define MCREQ(x) if(x != micro.x) \ return true //for floats #define FMCREQ(x) if(!((x < micro.x + 0.0001f) && (x > micro.x - 0.0001f))) \ return true MCREQ(Pinvertupdown); MCREQ(Pinvertupdowncenter); MCREQ(octavesize); MCREQ(Penabled); MCREQ(PAnote); FMCREQ(PAfreq); MCREQ(Pscaleshift); MCREQ(Pfirstkey); MCREQ(Plastkey); MCREQ(Pmiddlenote); MCREQ(Pmapsize); MCREQ(Pmappingenabled); for(int i = 0; i < 128; ++i) MCREQ(Pmapping[i]); for(int i = 0; i < octavesize; ++i) { FMCREQ(octave[i].tuning); MCREQ(octave[i].type); MCREQ(octave[i].x1); MCREQ(octave[i].x2); } if(strcmp((const char *)this->Pname, (const char *)micro.Pname)) return true; if(strcmp((const char *)this->Pcomment, (const char *)micro.Pcomment)) return true; MCREQ(Pglobalfinedetune); return false; //undefine macros, as they are no longer needed #undef MCREQ #undef FMCREQ } /* * Convert a line to tunings; returns -1 if it ok */ int Microtonal::linetotunings(unsigned int nline, const char *line) { int x1 = -1, x2 = -1, type = -1; float x = -1.0f, tmp, tuning = 1.0f; if(strstr(line, "/") == NULL) { if(strstr(line, ".") == NULL) { // M case (M=M/1) sscanf(line, "%d", &x1); x2 = 1; type = 2; //division } else { // float number case sscanf(line, "%f", &x); if(x < 0.000001f) return 1; type = 1; //float type(cents) } } else { // M/N case sscanf(line, "%d/%d", &x1, &x2); if((x1 < 0) || (x2 < 0)) return 1; if(x2 == 0) x2 = 1; type = 2; //division } if(x1 <= 0) x1 = 1; //not allow zero frequency sounds (consider 0 as 1) //convert to float if the number are too big if((type == 2) && ((x1 > (128 * 128 * 128 - 1)) || (x2 > (128 * 128 * 128 - 1)))) { type = 1; x = ((float) x1) / x2; } switch(type) { case 1: x1 = (int) floor(x); tmp = fmod(x, 1.0f); x2 = (int) (floor(tmp * 1e6)); tuning = powf(2.0f, x / 1200.0f); break; case 2: x = ((float)x1) / x2; tuning = x; break; } tmpoctave[nline].tuning = tuning; tmpoctave[nline].type = type; tmpoctave[nline].x1 = x1; tmpoctave[nline].x2 = x2; return -1; //ok } /* * Convert the text to tunnings */ int Microtonal::texttotunings(const char *text) { unsigned int i, k = 0, nl = 0; char *lin; lin = new char[MAX_LINE_SIZE + 1]; while(k < strlen(text)) { for(i = 0; i < MAX_LINE_SIZE; ++i) { lin[i] = text[k++]; if(lin[i] < 0x20) break; } lin[i] = '\0'; if(strlen(lin) == 0) continue; int err = linetotunings(nl, lin); if(err != -1) { delete [] lin; return nl; //Parse error } nl++; } delete [] lin; if(nl > MAX_OCTAVE_SIZE) nl = MAX_OCTAVE_SIZE; if(nl == 0) return -2; //the input is empty octavesize = nl; for(i = 0; i < octavesize; ++i) { octave[i].tuning = tmpoctave[i].tuning; octave[i].type = tmpoctave[i].type; octave[i].x1 = tmpoctave[i].x1; octave[i].x2 = tmpoctave[i].x2; } return -1; //ok } /* * Convert the text to mapping */ void Microtonal::texttomapping(const char *text) { unsigned int i, k = 0; char *lin; lin = new char[MAX_LINE_SIZE + 1]; for(i = 0; i < 128; ++i) Pmapping[i] = -1; int tx = 0; while(k < strlen(text)) { for(i = 0; i < MAX_LINE_SIZE; ++i) { lin[i] = text[k++]; if(lin[i] < 0x20) break; } lin[i] = '\0'; if(strlen(lin) == 0) continue; int tmp = 0; if(sscanf(lin, "%d", &tmp) == 0) tmp = -1; if(tmp < -1) tmp = -1; Pmapping[tx] = tmp; if((tx++) > 127) break; } delete [] lin; if(tx == 0) tx = 1; Pmapsize = tx; } /* * Convert tunning to text line */ void Microtonal::tuningtoline(int n, char *line, int maxn) { if((n > octavesize) || (n > MAX_OCTAVE_SIZE)) { line[0] = '\0'; return; } if(octave[n].type == 1) snprintf(line, maxn, "%d.%06d", octave[n].x1, octave[n].x2); if(octave[n].type == 2) snprintf(line, maxn, "%d/%d", octave[n].x1, octave[n].x2); } int Microtonal::loadline(FILE *file, char *line) { do { if(fgets(line, 500, file) == 0) return 1; } while(line[0] == '!'); return 0; } /* * Loads the tunnings from a scl file */ int Microtonal::loadscl(const char *filename) { FILE *file = fopen(filename, "r"); char tmp[500]; fseek(file, 0, SEEK_SET); //loads the short description if(loadline(file, &tmp[0]) != 0) return 2; for(int i = 0; i < 500; ++i) if(tmp[i] < 32) tmp[i] = 0; snprintf((char *) Pname, MICROTONAL_MAX_NAME_LEN, "%s", tmp); snprintf((char *) Pcomment, MICROTONAL_MAX_NAME_LEN, "%s", tmp); //loads the number of the notes if(loadline(file, &tmp[0]) != 0) return 2; int nnotes = MAX_OCTAVE_SIZE; sscanf(&tmp[0], "%d", &nnotes); if(nnotes > MAX_OCTAVE_SIZE) return 2; //load the tunnings for(int nline = 0; nline < nnotes; ++nline) { if(loadline(file, &tmp[0]) != 0) return 2; linetotunings(nline, &tmp[0]); } fclose(file); octavesize = nnotes; for(int i = 0; i < octavesize; ++i) { octave[i].tuning = tmpoctave[i].tuning; octave[i].type = tmpoctave[i].type; octave[i].x1 = tmpoctave[i].x1; octave[i].x2 = tmpoctave[i].x2; } return 0; } /* * Loads the mapping from a kbm file */ int Microtonal::loadkbm(const char *filename) { FILE *file = fopen(filename, "r"); int x; char tmp[500]; fseek(file, 0, SEEK_SET); //loads the mapsize if(loadline(file, &tmp[0]) != 0) return 2; if(sscanf(&tmp[0], "%d", &x) == 0) return 2; if(x < 1) x = 0; if(x > 127) x = 127; //just in case... Pmapsize = x; //loads first MIDI note to retune if(loadline(file, &tmp[0]) != 0) return 2; if(sscanf(&tmp[0], "%d", &x) == 0) return 2; if(x < 1) x = 0; if(x > 127) x = 127; //just in case... Pfirstkey = x; //loads last MIDI note to retune if(loadline(file, &tmp[0]) != 0) return 2; if(sscanf(&tmp[0], "%d", &x) == 0) return 2; if(x < 1) x = 0; if(x > 127) x = 127; //just in case... Plastkey = x; //loads last the middle note where scale fro scale degree=0 if(loadline(file, &tmp[0]) != 0) return 2; if(sscanf(&tmp[0], "%d", &x) == 0) return 2; if(x < 1) x = 0; if(x > 127) x = 127; //just in case... Pmiddlenote = x; //loads the reference note if(loadline(file, &tmp[0]) != 0) return 2; if(sscanf(&tmp[0], "%d", &x) == 0) return 2; if(x < 1) x = 0; if(x > 127) x = 127; //just in case... PAnote = x; //loads the reference freq. if(loadline(file, &tmp[0]) != 0) return 2; float tmpPAfreq = 440.0f; if(sscanf(&tmp[0], "%f", &tmpPAfreq) == 0) return 2; PAfreq = tmpPAfreq; //the scale degree(which is the octave) is not loaded, it is obtained by the tunnings with getoctavesize() method if(loadline(file, &tmp[0]) != 0) return 2; //load the mappings if(Pmapsize != 0) { for(int nline = 0; nline < Pmapsize; ++nline) { if(loadline(file, &tmp[0]) != 0) return 2; if(sscanf(&tmp[0], "%d", &x) == 0) x = -1; Pmapping[nline] = x; } Pmappingenabled = 1; } else { Pmappingenabled = 0; Pmapping[0] = 0; Pmapsize = 1; } fclose(file); return 0; } void Microtonal::add2XML(XMLwrapper *xml) const { xml->addparstr("name", (char *) Pname); xml->addparstr("comment", (char *) Pcomment); xml->addparbool("invert_up_down", Pinvertupdown); xml->addpar("invert_up_down_center", Pinvertupdowncenter); xml->addparbool("enabled", Penabled); xml->addpar("global_fine_detune", Pglobalfinedetune); xml->addpar("a_note", PAnote); xml->addparreal("a_freq", PAfreq); if((Penabled == 0) && (xml->minimal)) return; xml->beginbranch("SCALE"); xml->addpar("scale_shift", Pscaleshift); xml->addpar("first_key", Pfirstkey); xml->addpar("last_key", Plastkey); xml->addpar("middle_note", Pmiddlenote); xml->beginbranch("OCTAVE"); xml->addpar("octave_size", octavesize); for(int i = 0; i < octavesize; ++i) { xml->beginbranch("DEGREE", i); if(octave[i].type == 1) xml->addparreal("cents", octave[i].tuning); ; if(octave[i].type == 2) { xml->addpar("numerator", octave[i].x1); xml->addpar("denominator", octave[i].x2); } xml->endbranch(); } xml->endbranch(); xml->beginbranch("KEYBOARD_MAPPING"); xml->addpar("map_size", Pmapsize); xml->addpar("mapping_enabled", Pmappingenabled); for(int i = 0; i < Pmapsize; ++i) { xml->beginbranch("KEYMAP", i); xml->addpar("degree", Pmapping[i]); xml->endbranch(); } xml->endbranch(); xml->endbranch(); } void Microtonal::getfromXML(XMLwrapper *xml) { xml->getparstr("name", (char *) Pname, MICROTONAL_MAX_NAME_LEN); xml->getparstr("comment", (char *) Pcomment, MICROTONAL_MAX_NAME_LEN); Pinvertupdown = xml->getparbool("invert_up_down", Pinvertupdown); Pinvertupdowncenter = xml->getpar127("invert_up_down_center", Pinvertupdowncenter); Penabled = xml->getparbool("enabled", Penabled); Pglobalfinedetune = xml->getpar127("global_fine_detune", Pglobalfinedetune); PAnote = xml->getpar127("a_note", PAnote); PAfreq = xml->getparreal("a_freq", PAfreq, 1.0f, 10000.0f); if(xml->enterbranch("SCALE")) { Pscaleshift = xml->getpar127("scale_shift", Pscaleshift); Pfirstkey = xml->getpar127("first_key", Pfirstkey); Plastkey = xml->getpar127("last_key", Plastkey); Pmiddlenote = xml->getpar127("middle_note", Pmiddlenote); if(xml->enterbranch("OCTAVE")) { octavesize = xml->getpar127("octave_size", octavesize); for(int i = 0; i < octavesize; ++i) { if(xml->enterbranch("DEGREE", i) == 0) continue; octave[i].x2 = 0; octave[i].tuning = xml->getparreal("cents", octave[i].tuning); octave[i].x1 = xml->getpar127("numerator", octave[i].x1); octave[i].x2 = xml->getpar127("denominator", octave[i].x2); if(octave[i].x2 != 0) octave[i].type = 2; else { octave[i].type = 1; //populate fields for display float x = logf(octave[i].tuning) / LOG_2 * 1200.0f; octave[i].x1 = (int) floor(x); octave[i].x2 = (int) (floor(fmodf(x, 1.0f) * 1e6)); } xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("KEYBOARD_MAPPING")) { Pmapsize = xml->getpar127("map_size", Pmapsize); Pmappingenabled = xml->getpar127("mapping_enabled", Pmappingenabled); for(int i = 0; i < Pmapsize; ++i) { if(xml->enterbranch("KEYMAP", i) == 0) continue; Pmapping[i] = xml->getpar127("degree", Pmapping[i]); xml->exitbranch(); } xml->exitbranch(); } xml->exitbranch(); } } int Microtonal::saveXML(const char *filename) const { XMLwrapper *xml = new XMLwrapper(); xml->beginbranch("MICROTONAL"); add2XML(xml); xml->endbranch(); int result = xml->saveXMLfile(filename); delete (xml); return result; } int Microtonal::loadXML(const char *filename) { XMLwrapper *xml = new XMLwrapper(); if(xml->loadXMLfile(filename) < 0) { delete (xml); return -1; } if(xml->enterbranch("MICROTONAL") == 0) return -10; getfromXML(xml); xml->exitbranch(); delete (xml); return 0; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h000066400000000000000000000100771247673406200250310ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Microtonal.h - Tuning settings and microtonal capabilities Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef MICROTONAL_H #define MICROTONAL_H #include "../globals.h" #include "XMLwrapper.h" #define MAX_OCTAVE_SIZE 128 #define MICROTONAL_MAX_NAME_LEN 120 #include /**Tuning settings and microtonal capabilities*/ class Microtonal { public: /**Constructor*/ Microtonal(); /**Destructor*/ ~Microtonal(); void defaults(); /**Calculates the frequency for a given note */ float getnotefreq(int note, int keyshift) const; //Parameters /**if the keys are inversed (the pitch is lower to keys from the right direction)*/ unsigned char Pinvertupdown; /**the central key of the inversion*/ unsigned char Pinvertupdowncenter; /**0 for 12 key temperate scale, 1 for microtonal*/ unsigned char Penabled; /**the note of "A" key*/ unsigned char PAnote; /**the frequency of the "A" note*/ float PAfreq; /**if the scale is "tuned" to a note, you can tune to other note*/ unsigned char Pscaleshift; //first and last key (to retune) unsigned char Pfirstkey; unsigned char Plastkey; /**The middle note where scale degree 0 is mapped to*/ unsigned char Pmiddlenote; /**Map size*/ unsigned char Pmapsize; /**Mapping ON/OFF*/ unsigned char Pmappingenabled; /**Mapping (keys)*/ short int Pmapping[128]; /**Fine detune to be applied to all notes*/ unsigned char Pglobalfinedetune; // Functions /** Return the current octave size*/ unsigned char getoctavesize() const; /**Convert tunning to string*/ void tuningtoline(int n, char *line, int maxn); /**load the tunnings from a .scl file*/ int loadscl(const char *filename); /**load the mapping from .kbm file*/ int loadkbm(const char *filename); /**Load text into the internal tunings * *\todo better description*/ int texttotunings(const char *text); /**Load text into the internal mappings * *\todo better description*/ void texttomapping(const char *text); /**Name of Microtonal tuning*/ unsigned char *Pname; /**Comment about the tuning*/ unsigned char *Pcomment; void add2XML(XMLwrapper *xml) const; void getfromXML(XMLwrapper *xml); int saveXML(const char *filename) const; int loadXML(const char *filename); //simple operators primarily for debug bool operator==(const Microtonal µ) const; bool operator!=(const Microtonal µ) const; private: int linetotunings(unsigned int nline, const char *line); int loadline(FILE *file, char *line); //loads a line from the text file, while ignoring the lines beggining with "!" unsigned char octavesize; struct { unsigned char type; //1 for cents or 2 for division // the real tuning (eg. +1.05946f for one halftone) // or 2.0f for one octave float tuning; //the real tunning is x1/x2 unsigned int x1, x2; } octave[MAX_OCTAVE_SIZE], tmpoctave[MAX_OCTAVE_SIZE]; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp000066400000000000000000001354521247673406200241700ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Part.cpp - Part implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Part.h" #include "Microtonal.h" #include "Util.h" #include "XMLwrapper.h" #include "../Effects/EffectMgr.h" #include "../Params/ADnoteParameters.h" #include "../Params/SUBnoteParameters.h" #include "../Params/PADnoteParameters.h" #include "../Synth/ADnote.h" #include "../Synth/SUBnote.h" #include "../Synth/PADnote.h" #include "../DSP/FFTwrapper.h" #include #include #include Part::Part(Microtonal *microtonal_, FFTwrapper *fft_, pthread_mutex_t *mutex_) { microtonal = microtonal_; fft = fft_; mutex = mutex_; pthread_mutex_init(&load_mutex, NULL); partoutl = new float [synth->buffersize]; partoutr = new float [synth->buffersize]; for(int n = 0; n < NUM_KIT_ITEMS; ++n) { kit[n].Pname = new unsigned char [PART_MAX_NAME_LEN]; kit[n].adpars = NULL; kit[n].subpars = NULL; kit[n].padpars = NULL; } kit[0].adpars = new ADnoteParameters(fft); kit[0].subpars = new SUBnoteParameters(); kit[0].padpars = new PADnoteParameters(fft, mutex); //Part's Insertion Effects init for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) { partefx[nefx] = new EffectMgr(1, mutex); Pefxbypass[nefx] = false; } for(int n = 0; n < NUM_PART_EFX + 1; ++n) { partfxinputl[n] = new float [synth->buffersize]; partfxinputr[n] = new float [synth->buffersize]; } killallnotes = 0; oldfreq = -1.0f; for(int i = 0; i < POLIPHONY; ++i) { partnote[i].status = KEY_OFF; partnote[i].note = -1; partnote[i].itemsplaying = 0; for(int j = 0; j < NUM_KIT_ITEMS; ++j) { partnote[i].kititem[j].adnote = NULL; partnote[i].kititem[j].subnote = NULL; partnote[i].kititem[j].padnote = NULL; } partnote[i].time = 0; } cleanup(); Pname = new unsigned char [PART_MAX_NAME_LEN]; oldvolumel = oldvolumer = 0.5f; lastnote = -1; lastpos = 0; // lastpos will store previously used NoteOn(...)'s pos. lastlegatomodevalid = false; // To store previous legatomodevalid value. defaults(); } void Part::defaults() { Penabled = 0; Pminkey = 0; Pmaxkey = 127; Pnoteon = 1; Ppolymode = 1; Plegatomode = 0; setPvolume(96); Pkeyshift = 64; Prcvchn = 0; setPpanning(64); Pvelsns = 64; Pveloffs = 64; Pkeylimit = 15; defaultsinstrument(); ctl.defaults(); } void Part::defaultsinstrument() { ZERO(Pname, PART_MAX_NAME_LEN); info.Ptype = 0; ZERO(info.Pauthor, MAX_INFO_TEXT_SIZE + 1); ZERO(info.Pcomments, MAX_INFO_TEXT_SIZE + 1); Pkitmode = 0; Pdrummode = 0; for(int n = 0; n < NUM_KIT_ITEMS; ++n) { kit[n].Penabled = 0; kit[n].Pmuted = 0; kit[n].Pminkey = 0; kit[n].Pmaxkey = 127; kit[n].Padenabled = 0; kit[n].Psubenabled = 0; kit[n].Ppadenabled = 0; ZERO(kit[n].Pname, PART_MAX_NAME_LEN); kit[n].Psendtoparteffect = 0; if(n != 0) setkititemstatus(n, 0); } kit[0].Penabled = 1; kit[0].Padenabled = 1; kit[0].adpars->defaults(); kit[0].subpars->defaults(); kit[0].padpars->defaults(); for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) { partefx[nefx]->defaults(); Pefxroute[nefx] = 0; //route to next effect } } /* * Cleanup the part */ void Part::cleanup(bool final_) { for(int k = 0; k < POLIPHONY; ++k) KillNotePos(k); for(int i = 0; i < synth->buffersize; ++i) { partoutl[i] = final_ ? 0.0f : denormalkillbuf[i]; partoutr[i] = final_ ? 0.0f : denormalkillbuf[i]; } ctl.resetall(); for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) partefx[nefx]->cleanup(); for(int n = 0; n < NUM_PART_EFX + 1; ++n) for(int i = 0; i < synth->buffersize; ++i) { partfxinputl[n][i] = final_ ? 0.0f : denormalkillbuf[i]; partfxinputr[n][i] = final_ ? 0.0f : denormalkillbuf[i]; } } Part::~Part() { cleanup(true); for(int n = 0; n < NUM_KIT_ITEMS; ++n) { if(kit[n].adpars != NULL) delete (kit[n].adpars); if(kit[n].subpars != NULL) delete (kit[n].subpars); if(kit[n].padpars != NULL) delete (kit[n].padpars); kit[n].adpars = NULL; kit[n].subpars = NULL; kit[n].padpars = NULL; delete [] kit[n].Pname; } delete [] Pname; delete [] partoutl; delete [] partoutr; for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) delete (partefx[nefx]); for(int n = 0; n < NUM_PART_EFX + 1; ++n) { delete [] partfxinputl[n]; delete [] partfxinputr[n]; } } /* * Note On Messages */ void Part::NoteOn(unsigned char note, unsigned char velocity, int masterkeyshift) { int i, pos; // Legato and MonoMem used vars: int posb = POLIPHONY - 1; // Just a dummy initial value. bool legatomodevalid = false; //true when legato mode is determined applicable. bool doinglegato = false; // true when we determined we do a legato note. bool ismonofirstnote = false; /*(In Mono/Legato) true when we determined no other notes are held down or sustained.*/ int lastnotecopy = lastnote; //Useful after lastnote has been changed. if(Pnoteon == 0) return; if((note < Pminkey) || (note > Pmaxkey)) return; // MonoMem stuff: if(Ppolymode == 0) { // If Poly is off monomemnotes.push_back(note); // Add note to the list. monomem[note].velocity = velocity; // Store this note's velocity. monomem[note].mkeyshift = masterkeyshift; /* Store masterkeyshift too, I'm not sure why though... */ if((partnote[lastpos].status != KEY_PLAYING) && (partnote[lastpos].status != KEY_RELASED_AND_SUSTAINED)) ismonofirstnote = true; // No other keys are held or sustained. } else // Poly mode is On so just make sure the list is empty. if(not monomemnotes.empty()) monomemnotes.clear(); lastnote = note; pos = -1; for(i = 0; i < POLIPHONY; ++i) if(partnote[i].status == KEY_OFF) { pos = i; break; } if((Plegatomode != 0) && (Pdrummode == 0)) { if(Ppolymode != 0) { fprintf( stderr, "ZynAddSubFX WARNING: Poly and Legato modes are both On, that should not happen ! ... Disabling Legato mode ! - (Part.cpp::NoteOn(..))\n"); Plegatomode = 0; } else { // Legato mode is on and applicable. legatomodevalid = true; if((not ismonofirstnote) && (lastlegatomodevalid)) { // At least one other key is held or sustained, and the // previous note was played while in valid legato mode. doinglegato = true; // So we'll do a legato note. pos = lastpos; // A legato note uses same pos as previous.. posb = lastposb; // .. same goes for posb. } else { // Legato mode is valid, but this is only a first note. for(i = 0; i < POLIPHONY; ++i) if((partnote[i].status == KEY_PLAYING) || (partnote[i].status == KEY_RELASED_AND_SUSTAINED)) RelaseNotePos(i); // Set posb posb = (pos + 1) % POLIPHONY; //We really want it (if the following fails) for(i = 0; i < POLIPHONY; ++i) if((partnote[i].status == KEY_OFF) && (pos != i)) { posb = i; break; } } lastposb = posb; // Keep a trace of used posb } } else // Legato mode is either off or non-applicable. if(Ppolymode == 0) { //if the mode is 'mono' turn off all other notes for(i = 0; i < POLIPHONY; ++i) if(partnote[i].status == KEY_PLAYING) RelaseNotePos(i); RelaseSustainedKeys(); } lastlegatomodevalid = legatomodevalid; if(pos == -1) //test fprintf(stderr, "%s", "NOTES TOO MANY (> POLIPHONY) - (Part.cpp::NoteOn(..))\n"); else { //start the note partnote[pos].status = KEY_PLAYING; partnote[pos].note = note; if(legatomodevalid) { partnote[posb].status = KEY_PLAYING; partnote[posb].note = note; } //this computes the velocity sensing of the part float vel = VelF(velocity / 127.0f, Pvelsns); //compute the velocity offset vel += (Pveloffs - 64.0f) / 64.0f; if(vel < 0.0f) vel = 0.0f; else if(vel > 1.0f) vel = 1.0f; //compute the keyshift int partkeyshift = (int)Pkeyshift - 64; int keyshift = masterkeyshift + partkeyshift; //initialise note frequency float notebasefreq; if(Pdrummode == 0) { notebasefreq = microtonal->getnotefreq(note, keyshift); if(notebasefreq < 0.0f) return; //the key is no mapped } else notebasefreq = 440.0f * powf(2.0f, (note - 69.0f) / 12.0f); ; //Portamento if(oldfreq < 1.0f) oldfreq = notebasefreq; //this is only the first note is played // For Mono/Legato: Force Portamento Off on first // notes. That means it is required that the previous note is // still held down or sustained for the Portamento to activate // (that's like Legato). int portamento = 0; if((Ppolymode != 0) || (not ismonofirstnote)) // I added a third argument to the // ctl.initportamento(...) function to be able // to tell it if we're doing a legato note. portamento = ctl.initportamento(oldfreq, notebasefreq, doinglegato); if(portamento != 0) ctl.portamento.noteusing = pos; oldfreq = notebasefreq; lastpos = pos; // Keep a trace of used pos. if(doinglegato) { // Do Legato note if(Pkitmode == 0) { // "normal mode" legato note if((kit[0].Padenabled != 0) && (partnote[pos].kititem[0].adnote != NULL) && (partnote[posb].kititem[0].adnote != NULL)) { partnote[pos].kititem[0].adnote->legatonote(notebasefreq, vel, portamento, note, true); //'true' is to tell it it's being called from here. partnote[posb].kititem[0].adnote->legatonote(notebasefreq, vel, portamento, note, true); } if((kit[0].Psubenabled != 0) && (partnote[pos].kititem[0].subnote != NULL) && (partnote[posb].kititem[0].subnote != NULL)) { partnote[pos].kititem[0].subnote->legatonote( notebasefreq, vel, portamento, note, true); partnote[posb].kititem[0].subnote->legatonote( notebasefreq, vel, portamento, note, true); } if((kit[0].Ppadenabled != 0) && (partnote[pos].kititem[0].padnote != NULL) && (partnote[posb].kititem[0].padnote != NULL)) { partnote[pos].kititem[0].padnote->legatonote( notebasefreq, vel, portamento, note, true); partnote[posb].kititem[0].padnote->legatonote( notebasefreq, vel, portamento, note, true); } } else { // "kit mode" legato note int ci = 0; for(int item = 0; item < NUM_KIT_ITEMS; ++item) { if(kit[item].Pmuted != 0) continue; if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey)) continue; if((lastnotecopy < kit[item].Pminkey) || (lastnotecopy > kit[item].Pmaxkey)) continue; // We will not perform legato across 2 key regions. partnote[pos].kititem[ci].sendtoparteffect = (kit[item].Psendtoparteffect < NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX); //if this parameter is 127 for "unprocessed" partnote[posb].kititem[ci].sendtoparteffect = (kit[item].Psendtoparteffect < NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX); if((kit[item].Padenabled != 0) && (kit[item].adpars != NULL) && (partnote[pos].kititem[ci].adnote != NULL) && (partnote[posb].kititem[ci].adnote != NULL)) { partnote[pos].kititem[ci].adnote->legatonote( notebasefreq, vel, portamento, note, true); partnote[posb].kititem[ci].adnote->legatonote( notebasefreq, vel, portamento, note, true); } if((kit[item].Psubenabled != 0) && (kit[item].subpars != NULL) && (partnote[pos].kititem[ci].subnote != NULL) && (partnote[posb].kititem[ci].subnote != NULL)) { partnote[pos].kititem[ci].subnote->legatonote( notebasefreq, vel, portamento, note, true); partnote[posb].kititem[ci].subnote->legatonote( notebasefreq, vel, portamento, note, true); } if((kit[item].Ppadenabled != 0) && (kit[item].padpars != NULL) && (partnote[pos].kititem[ci].padnote != NULL) && (partnote[posb].kititem[ci].padnote != NULL)) { partnote[pos].kititem[ci].padnote->legatonote( notebasefreq, vel, portamento, note, true); partnote[posb].kititem[ci].padnote->legatonote( notebasefreq, vel, portamento, note, true); } if((kit[item].adpars != NULL) || (kit[item].subpars != NULL) || (kit[item].padpars != NULL)) { ci++; if(((kit[item].Padenabled != 0) || (kit[item].Psubenabled != 0) || (kit[item].Ppadenabled != 0)) && (Pkitmode == 2)) break; } } if(ci == 0) { // No legato were performed at all, so pretend nothing happened: monomemnotes.pop_back(); // Remove last note from the list. lastnote = lastnotecopy; // Set lastnote back to previous value. } } return; // Ok, Legato note done, return. } partnote[pos].itemsplaying = 0; if(legatomodevalid) partnote[posb].itemsplaying = 0; if(Pkitmode == 0) { //init the notes for the "normal mode" partnote[pos].kititem[0].sendtoparteffect = 0; if(kit[0].Padenabled != 0) partnote[pos].kititem[0].adnote = new ADnote(kit[0].adpars, &ctl, notebasefreq, vel, portamento, note, false); if(kit[0].Psubenabled != 0) partnote[pos].kititem[0].subnote = new SUBnote(kit[0].subpars, &ctl, notebasefreq, vel, portamento, note, false); if(kit[0].Ppadenabled != 0) partnote[pos].kititem[0].padnote = new PADnote(kit[0].padpars, &ctl, notebasefreq, vel, portamento, note, false); if((kit[0].Padenabled != 0) || (kit[0].Psubenabled != 0) || (kit[0].Ppadenabled != 0)) partnote[pos].itemsplaying++; // Spawn another note (but silent) if legatomodevalid==true if(legatomodevalid) { partnote[posb].kititem[0].sendtoparteffect = 0; if(kit[0].Padenabled != 0) partnote[posb].kititem[0].adnote = new ADnote(kit[0].adpars, &ctl, notebasefreq, vel, portamento, note, true); //true for silent. if(kit[0].Psubenabled != 0) partnote[posb].kititem[0].subnote = new SUBnote( kit[0].subpars, &ctl, notebasefreq, vel, portamento, note, true); if(kit[0].Ppadenabled != 0) partnote[posb].kititem[0].padnote = new PADnote( kit[0].padpars, &ctl, notebasefreq, vel, portamento, note, true); if((kit[0].Padenabled != 0) || (kit[0].Psubenabled != 0) || (kit[0].Ppadenabled != 0)) partnote[posb].itemsplaying++; } } else //init the notes for the "kit mode" for(int item = 0; item < NUM_KIT_ITEMS; ++item) { if(kit[item].Pmuted != 0) continue; if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey)) continue; int ci = partnote[pos].itemsplaying; //ci=current item //if this parameter is 127 for "unprocessed" partnote[pos].kititem[ci].sendtoparteffect = (kit[item].Psendtoparteffect < NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX); if((kit[item].adpars != NULL) && ((kit[item].Padenabled) != 0)) partnote[pos].kititem[ci].adnote = new ADnote( kit[item].adpars, &ctl, notebasefreq, vel, portamento, note, false); if((kit[item].subpars != NULL) && ((kit[item].Psubenabled) != 0)) partnote[pos].kititem[ci].subnote = new SUBnote( kit[item].subpars, &ctl, notebasefreq, vel, portamento, note, false); if((kit[item].padpars != NULL) && ((kit[item].Ppadenabled) != 0)) partnote[pos].kititem[ci].padnote = new PADnote( kit[item].padpars, &ctl, notebasefreq, vel, portamento, note, false); // Spawn another note (but silent) if legatomodevalid==true if(legatomodevalid) { partnote[posb].kititem[ci].sendtoparteffect = (kit[item].Psendtoparteffect < NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX); //if this parameter is 127 for "unprocessed" if((kit[item].adpars != NULL) && ((kit[item].Padenabled) != 0)) partnote[posb].kititem[ci].adnote = new ADnote( kit[item].adpars, &ctl, notebasefreq, vel, portamento, note, true); //true for silent. if((kit[item].subpars != NULL) && ((kit[item].Psubenabled) != 0)) partnote[posb].kititem[ci].subnote = new SUBnote(kit[item].subpars, &ctl, notebasefreq, vel, portamento, note, true); if((kit[item].padpars != NULL) && ((kit[item].Ppadenabled) != 0)) partnote[posb].kititem[ci].padnote = new PADnote(kit[item].padpars, &ctl, notebasefreq, vel, portamento, note, true); if((kit[item].adpars != NULL) || (kit[item].subpars != NULL)) partnote[posb].itemsplaying++; } if((kit[item].adpars != NULL) || (kit[item].subpars != NULL)) { partnote[pos].itemsplaying++; if(((kit[item].Padenabled != 0) || (kit[item].Psubenabled != 0) || (kit[item].Ppadenabled != 0)) && (Pkitmode == 2)) break; } } } //this only relase the keys if there is maximum number of keys allowed setkeylimit(Pkeylimit); } /* * Note Off Messages */ void Part::NoteOff(unsigned char note) //relase the key { int i; // This note is released, so we remove it from the list. if(not monomemnotes.empty()) monomemnotes.remove(note); for(i = POLIPHONY - 1; i >= 0; i--) //first note in, is first out if there are same note multiple times if((partnote[i].status == KEY_PLAYING) && (partnote[i].note == note)) { if(ctl.sustain.sustain == 0) { //the sustain pedal is not pushed if((Ppolymode == 0) && (not monomemnotes.empty())) MonoMemRenote(); // To play most recent still held note. else RelaseNotePos(i); /// break; } else //the sustain pedal is pushed partnote[i].status = KEY_RELASED_AND_SUSTAINED; } } void Part::PolyphonicAftertouch(unsigned char note, unsigned char velocity, int masterkeyshift) { (void) masterkeyshift; if(!Pnoteon || (note < Pminkey) || (note > Pmaxkey)) return; if(Pdrummode) return; // MonoMem stuff: if(!Ppolymode) // if Poly is off monomem[note].velocity = velocity; // Store this note's velocity. for(int i = 0; i < POLIPHONY; ++i) if((partnote[i].note == note) && (partnote[i].status == KEY_PLAYING)) { /* update velocity */ // compute the velocity offset float vel = VelF(velocity / 127.0f, Pvelsns) + (Pveloffs - 64.0f) / 64.0f; vel = (vel < 0.0f) ? 0.0f : vel; vel = (vel > 1.0f) ? 1.0f : vel; if(!Pkitmode) { // "normal mode" if(kit[0].Padenabled && partnote[i].kititem[0].adnote) partnote[i].kititem[0].adnote->setVelocity(vel); if(kit[0].Psubenabled && partnote[i].kititem[0].subnote) partnote[i].kititem[0].subnote->setVelocity(vel); if(kit[0].Ppadenabled && partnote[i].kititem[0].padnote) partnote[i].kititem[0].padnote->setVelocity(vel); } else // "kit mode" for(int item = 0; item < NUM_KIT_ITEMS; ++item) { if(kit[item].Pmuted) continue; if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey)) continue; if(kit[item].Padenabled && partnote[i].kititem[item].adnote) partnote[i].kititem[item].adnote->setVelocity(vel); if(kit[item].Psubenabled && partnote[i].kititem[item].subnote) partnote[i].kititem[item].subnote->setVelocity(vel); if(kit[item].Ppadenabled && partnote[i].kititem[item].padnote) partnote[i].kititem[item].padnote->setVelocity(vel); } } } /* * Controllers */ void Part::SetController(unsigned int type, int par) { switch(type) { case C_pitchwheel: ctl.setpitchwheel(par); break; case C_expression: ctl.setexpression(par); setPvolume(Pvolume); //update the volume break; case C_portamento: ctl.setportamento(par); break; case C_panning: ctl.setpanning(par); setPpanning(Ppanning); //update the panning break; case C_filtercutoff: ctl.setfiltercutoff(par); break; case C_filterq: ctl.setfilterq(par); break; case C_bandwidth: ctl.setbandwidth(par); break; case C_modwheel: ctl.setmodwheel(par); break; case C_fmamp: ctl.setfmamp(par); break; case C_volume: ctl.setvolume(par); if(ctl.volume.receive != 0) volume = ctl.volume.volume; else setPvolume(Pvolume); break; case C_sustain: ctl.setsustain(par); if(ctl.sustain.sustain == 0) RelaseSustainedKeys(); break; case C_allsoundsoff: AllNotesOff(); //Panic break; case C_resetallcontrollers: ctl.resetall(); RelaseSustainedKeys(); if(ctl.volume.receive != 0) volume = ctl.volume.volume; else setPvolume(Pvolume); setPvolume(Pvolume); //update the volume setPpanning(Ppanning); //update the panning for(int item = 0; item < NUM_KIT_ITEMS; ++item) { if(kit[item].adpars == NULL) continue; kit[item].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_center, 1.0f); kit[item].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_bandwidth, 1.0f); } //more update to add here if I add controllers break; case C_allnotesoff: RelaseAllKeys(); break; case C_resonance_center: ctl.setresonancecenter(par); for(int item = 0; item < NUM_KIT_ITEMS; ++item) { if(kit[item].adpars == NULL) continue; kit[item].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_center, ctl.resonancecenter.relcenter); } break; case C_resonance_bandwidth: ctl.setresonancebw(par); kit[0].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_bandwidth, ctl.resonancebandwidth.relbw); break; } } /* * Relase the sustained keys */ void Part::RelaseSustainedKeys() { // Let's call MonoMemRenote() on some conditions: if((Ppolymode == 0) && (not monomemnotes.empty())) if(monomemnotes.back() != lastnote) // Sustain controller manipulation would cause repeated same note respawn without this check. MonoMemRenote(); // To play most recent still held note. for(int i = 0; i < POLIPHONY; ++i) if(partnote[i].status == KEY_RELASED_AND_SUSTAINED) RelaseNotePos(i); } /* * Relase all keys */ void Part::RelaseAllKeys() { for(int i = 0; i < POLIPHONY; ++i) if((partnote[i].status != KEY_RELASED) && (partnote[i].status != KEY_OFF)) //thanks to Frank Neumann RelaseNotePos(i); } // Call NoteOn(...) with the most recent still held key as new note // (Made for Mono/Legato). void Part::MonoMemRenote() { unsigned char mmrtempnote = monomemnotes.back(); // Last list element. monomemnotes.pop_back(); // We remove it, will be added again in NoteOn(...). if(Pnoteon == 0) RelaseNotePos(lastpos); else NoteOn(mmrtempnote, monomem[mmrtempnote].velocity, monomem[mmrtempnote].mkeyshift); } /* * Release note at position */ void Part::RelaseNotePos(int pos) { for(int j = 0; j < NUM_KIT_ITEMS; ++j) { if(partnote[pos].kititem[j].adnote != NULL) if(partnote[pos].kititem[j].adnote) partnote[pos].kititem[j].adnote->relasekey(); if(partnote[pos].kititem[j].subnote != NULL) if(partnote[pos].kititem[j].subnote != NULL) partnote[pos].kititem[j].subnote->relasekey(); if(partnote[pos].kititem[j].padnote != NULL) if(partnote[pos].kititem[j].padnote) partnote[pos].kititem[j].padnote->relasekey(); } partnote[pos].status = KEY_RELASED; } /* * Kill note at position */ void Part::KillNotePos(int pos) { partnote[pos].status = KEY_OFF; partnote[pos].note = -1; partnote[pos].time = 0; partnote[pos].itemsplaying = 0; for(int j = 0; j < NUM_KIT_ITEMS; ++j) { if(partnote[pos].kititem[j].adnote != NULL) { delete (partnote[pos].kititem[j].adnote); partnote[pos].kititem[j].adnote = NULL; } if(partnote[pos].kititem[j].subnote != NULL) { delete (partnote[pos].kititem[j].subnote); partnote[pos].kititem[j].subnote = NULL; } if(partnote[pos].kititem[j].padnote != NULL) { delete (partnote[pos].kititem[j].padnote); partnote[pos].kititem[j].padnote = NULL; } } if(pos == ctl.portamento.noteusing) { ctl.portamento.noteusing = -1; ctl.portamento.used = 0; } } /* * Set Part's key limit */ void Part::setkeylimit(unsigned char Pkeylimit) { this->Pkeylimit = Pkeylimit; int keylimit = Pkeylimit; if(keylimit == 0) keylimit = POLIPHONY - 5; //release old keys if the number of notes>keylimit if(Ppolymode != 0) { int notecount = 0; for(int i = 0; i < POLIPHONY; ++i) if((partnote[i].status == KEY_PLAYING) || (partnote[i].status == KEY_RELASED_AND_SUSTAINED)) notecount++; int oldestnotepos = -1; if(notecount > keylimit) //find out the oldest note for(int i = 0; i < POLIPHONY; ++i) { int maxtime = 0; if(((partnote[i].status == KEY_PLAYING) || (partnote[i].status == KEY_RELASED_AND_SUSTAINED)) && (partnote[i].time > maxtime)) { maxtime = partnote[i].time; oldestnotepos = i; } } if(oldestnotepos != -1) RelaseNotePos(oldestnotepos); } } /* * Prepare all notes to be turned off */ void Part::AllNotesOff() { killallnotes = 1; } void Part::RunNote(unsigned int k) { unsigned noteplay = 0; for(int item = 0; item < partnote[k].itemsplaying; ++item) { int sendcurrenttofx = partnote[k].kititem[item].sendtoparteffect; for(unsigned type = 0; type < 3; ++type) { //Select a note SynthNote **note = NULL; if(type == 0) note = &partnote[k].kititem[item].adnote; else if(type == 1) note = &partnote[k].kititem[item].subnote; else if(type == 2) note = &partnote[k].kititem[item].padnote; //Process if it exists if(!(*note)) continue; noteplay++; float tmpoutr[synth->buffersize]; float tmpoutl[synth->buffersize]; (*note)->noteout(&tmpoutl[0], &tmpoutr[0]); if((*note)->finished()) { delete (*note); (*note) = NULL; } for(int i = 0; i < synth->buffersize; ++i) { //add the note to part(mix) partfxinputl[sendcurrenttofx][i] += tmpoutl[i]; partfxinputr[sendcurrenttofx][i] += tmpoutr[i]; } } } //Kill note if there is no synth on that note if(noteplay == 0) KillNotePos(k); } /* * Compute Part samples and store them in the partoutl[] and partoutr[] */ void Part::ComputePartSmps() { for(unsigned nefx = 0; nefx < NUM_PART_EFX + 1; ++nefx) for(int i = 0; i < synth->buffersize; ++i) { partfxinputl[nefx][i] = 0.0f; partfxinputr[nefx][i] = 0.0f; } for(unsigned k = 0; k < POLIPHONY; ++k) { if(partnote[k].status == KEY_OFF) continue; partnote[k].time++; //get the sampledata of the note and kill it if it's finished RunNote(k); } //Apply part's effects and mix them for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) { if(!Pefxbypass[nefx]) { partefx[nefx]->out(partfxinputl[nefx], partfxinputr[nefx]); if(Pefxroute[nefx] == 2) for(int i = 0; i < synth->buffersize; ++i) { partfxinputl[nefx + 1][i] += partefx[nefx]->efxoutl[i]; partfxinputr[nefx + 1][i] += partefx[nefx]->efxoutr[i]; } } int routeto = ((Pefxroute[nefx] == 0) ? nefx + 1 : NUM_PART_EFX); for(int i = 0; i < synth->buffersize; ++i) { partfxinputl[routeto][i] += partfxinputl[nefx][i]; partfxinputr[routeto][i] += partfxinputr[nefx][i]; } } for(int i = 0; i < synth->buffersize; ++i) { partoutl[i] = partfxinputl[NUM_PART_EFX][i]; partoutr[i] = partfxinputr[NUM_PART_EFX][i]; } //Kill All Notes if killallnotes!=0 if(killallnotes != 0) { for(int i = 0; i < synth->buffersize; ++i) { float tmp = (synth->buffersize_f - i) / synth->buffersize_f; partoutl[i] *= tmp; partoutr[i] *= tmp; } for(int k = 0; k < POLIPHONY; ++k) KillNotePos(k); killallnotes = 0; for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) partefx[nefx]->cleanup(); monomemnotes.clear(); } ctl.updateportamento(); } /* * Parameter control */ void Part::setPvolume(char Pvolume_) { Pvolume = Pvolume_; volume = dB2rap((Pvolume - 96.0f) / 96.0f * 40.0f) * ctl.expression.relvolume; } void Part::setPpanning(char Ppanning_) { Ppanning = Ppanning_; panning = Ppanning / 127.0f + ctl.panning.pan; if(panning < 0.0f) panning = 0.0f; else if(panning > 1.0f) panning = 1.0f; } /* * Enable or disable a kit item */ void Part::setkititemstatus(int kititem, int Penabled_) { if((kititem == 0) || (kititem >= NUM_KIT_ITEMS)) return; //nonexistent kit item and the first kit item is always enabled kit[kititem].Penabled = Penabled_; bool resetallnotes = false; if(Penabled_ == 0) { if(kit[kititem].adpars != NULL) delete (kit[kititem].adpars); if(kit[kititem].subpars != NULL) delete (kit[kititem].subpars); if(kit[kititem].padpars != NULL) { delete (kit[kititem].padpars); resetallnotes = true; } kit[kititem].adpars = NULL; kit[kititem].subpars = NULL; kit[kititem].padpars = NULL; kit[kititem].Pname[0] = '\0'; } else { if(kit[kititem].adpars == NULL) kit[kititem].adpars = new ADnoteParameters(fft); if(kit[kititem].subpars == NULL) kit[kititem].subpars = new SUBnoteParameters(); if(kit[kititem].padpars == NULL) kit[kititem].padpars = new PADnoteParameters(fft, mutex); } if(resetallnotes) for(int k = 0; k < POLIPHONY; ++k) KillNotePos(k); } void Part::add2XMLinstrument(XMLwrapper *xml) { xml->beginbranch("INFO"); xml->addparstr("name", (char *)Pname); xml->addparstr("author", (char *)info.Pauthor); xml->addparstr("comments", (char *)info.Pcomments); xml->addpar("type", info.Ptype); xml->endbranch(); xml->beginbranch("INSTRUMENT_KIT"); xml->addpar("kit_mode", Pkitmode); xml->addparbool("drum_mode", Pdrummode); for(int i = 0; i < NUM_KIT_ITEMS; ++i) { xml->beginbranch("INSTRUMENT_KIT_ITEM", i); xml->addparbool("enabled", kit[i].Penabled); if(kit[i].Penabled != 0) { xml->addparstr("name", (char *)kit[i].Pname); xml->addparbool("muted", kit[i].Pmuted); xml->addpar("min_key", kit[i].Pminkey); xml->addpar("max_key", kit[i].Pmaxkey); xml->addpar("send_to_instrument_effect", kit[i].Psendtoparteffect); xml->addparbool("add_enabled", kit[i].Padenabled); if((kit[i].Padenabled != 0) && (kit[i].adpars != NULL)) { xml->beginbranch("ADD_SYNTH_PARAMETERS"); kit[i].adpars->add2XML(xml); xml->endbranch(); } xml->addparbool("sub_enabled", kit[i].Psubenabled); if((kit[i].Psubenabled != 0) && (kit[i].subpars != NULL)) { xml->beginbranch("SUB_SYNTH_PARAMETERS"); kit[i].subpars->add2XML(xml); xml->endbranch(); } xml->addparbool("pad_enabled", kit[i].Ppadenabled); if((kit[i].Ppadenabled != 0) && (kit[i].padpars != NULL)) { xml->beginbranch("PAD_SYNTH_PARAMETERS"); kit[i].padpars->add2XML(xml); xml->endbranch(); } } xml->endbranch(); } xml->endbranch(); xml->beginbranch("INSTRUMENT_EFFECTS"); for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) { xml->beginbranch("INSTRUMENT_EFFECT", nefx); xml->beginbranch("EFFECT"); partefx[nefx]->add2XML(xml); xml->endbranch(); xml->addpar("route", Pefxroute[nefx]); partefx[nefx]->setdryonly(Pefxroute[nefx] == 2); xml->addparbool("bypass", Pefxbypass[nefx]); xml->endbranch(); } xml->endbranch(); } void Part::add2XML(XMLwrapper *xml) { //parameters xml->addparbool("enabled", Penabled); if((Penabled == 0) && (xml->minimal)) return; xml->addpar("volume", Pvolume); xml->addpar("panning", Ppanning); xml->addpar("min_key", Pminkey); xml->addpar("max_key", Pmaxkey); xml->addpar("key_shift", Pkeyshift); xml->addpar("rcv_chn", Prcvchn); xml->addpar("velocity_sensing", Pvelsns); xml->addpar("velocity_offset", Pveloffs); xml->addparbool("note_on", Pnoteon); xml->addparbool("poly_mode", Ppolymode); xml->addpar("legato_mode", Plegatomode); xml->addpar("key_limit", Pkeylimit); xml->beginbranch("INSTRUMENT"); add2XMLinstrument(xml); xml->endbranch(); xml->beginbranch("CONTROLLER"); ctl.add2XML(xml); xml->endbranch(); } int Part::saveXML(const char *filename) { XMLwrapper *xml; xml = new XMLwrapper(); xml->beginbranch("INSTRUMENT"); add2XMLinstrument(xml); xml->endbranch(); int result = xml->saveXMLfile(filename); delete (xml); return result; } int Part::loadXMLinstrument(const char *filename) /*{*/ { XMLwrapper *xml = new XMLwrapper(); if(xml->loadXMLfile(filename) < 0) { delete (xml); return -1; } if(xml->enterbranch("INSTRUMENT") == 0) return -10; getfromXMLinstrument(xml); xml->exitbranch(); delete (xml); return 0; } /*}*/ void Part::applyparameters(bool lockmutex) /*{*/ { for(int n = 0; n < NUM_KIT_ITEMS; ++n) if((kit[n].padpars != NULL) && (kit[n].Ppadenabled != 0)) kit[n].padpars->applyparameters(lockmutex); } /*}*/ void Part::getfromXMLinstrument(XMLwrapper *xml) { if(xml->enterbranch("INFO")) { xml->getparstr("name", (char *)Pname, PART_MAX_NAME_LEN); xml->getparstr("author", (char *)info.Pauthor, MAX_INFO_TEXT_SIZE); xml->getparstr("comments", (char *)info.Pcomments, MAX_INFO_TEXT_SIZE); info.Ptype = xml->getpar("type", info.Ptype, 0, 16); xml->exitbranch(); } if(xml->enterbranch("INSTRUMENT_KIT")) { Pkitmode = xml->getpar127("kit_mode", Pkitmode); Pdrummode = xml->getparbool("drum_mode", Pdrummode); setkititemstatus(0, 0); for(int i = 0; i < NUM_KIT_ITEMS; ++i) { if(xml->enterbranch("INSTRUMENT_KIT_ITEM", i) == 0) continue; setkititemstatus(i, xml->getparbool("enabled", kit[i].Penabled)); if(kit[i].Penabled == 0) { xml->exitbranch(); continue; } xml->getparstr("name", (char *)kit[i].Pname, PART_MAX_NAME_LEN); kit[i].Pmuted = xml->getparbool("muted", kit[i].Pmuted); kit[i].Pminkey = xml->getpar127("min_key", kit[i].Pminkey); kit[i].Pmaxkey = xml->getpar127("max_key", kit[i].Pmaxkey); kit[i].Psendtoparteffect = xml->getpar127( "send_to_instrument_effect", kit[i].Psendtoparteffect); kit[i].Padenabled = xml->getparbool("add_enabled", kit[i].Padenabled); if(xml->enterbranch("ADD_SYNTH_PARAMETERS")) { kit[i].adpars->getfromXML(xml); xml->exitbranch(); } kit[i].Psubenabled = xml->getparbool("sub_enabled", kit[i].Psubenabled); if(xml->enterbranch("SUB_SYNTH_PARAMETERS")) { kit[i].subpars->getfromXML(xml); xml->exitbranch(); } kit[i].Ppadenabled = xml->getparbool("pad_enabled", kit[i].Ppadenabled); if(xml->enterbranch("PAD_SYNTH_PARAMETERS")) { kit[i].padpars->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("INSTRUMENT_EFFECTS")) { for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) { if(xml->enterbranch("INSTRUMENT_EFFECT", nefx) == 0) continue; if(xml->enterbranch("EFFECT")) { partefx[nefx]->getfromXML(xml); xml->exitbranch(); } Pefxroute[nefx] = xml->getpar("route", Pefxroute[nefx], 0, NUM_PART_EFX); partefx[nefx]->setdryonly(Pefxroute[nefx] == 2); Pefxbypass[nefx] = xml->getparbool("bypass", Pefxbypass[nefx]); xml->exitbranch(); } xml->exitbranch(); } } void Part::getfromXML(XMLwrapper *xml) { Penabled = xml->getparbool("enabled", Penabled); setPvolume(xml->getpar127("volume", Pvolume)); setPpanning(xml->getpar127("panning", Ppanning)); Pminkey = xml->getpar127("min_key", Pminkey); Pmaxkey = xml->getpar127("max_key", Pmaxkey); Pkeyshift = xml->getpar127("key_shift", Pkeyshift); Prcvchn = xml->getpar127("rcv_chn", Prcvchn); Pvelsns = xml->getpar127("velocity_sensing", Pvelsns); Pveloffs = xml->getpar127("velocity_offset", Pveloffs); Pnoteon = xml->getparbool("note_on", Pnoteon); Ppolymode = xml->getparbool("poly_mode", Ppolymode); Plegatomode = xml->getparbool("legato_mode", Plegatomode); //older versions if(!Plegatomode) Plegatomode = xml->getpar127("legato_mode", Plegatomode); Pkeylimit = xml->getpar127("key_limit", Pkeylimit); if(xml->enterbranch("INSTRUMENT")) { getfromXMLinstrument(xml); xml->exitbranch(); } if(xml->enterbranch("CONTROLLER")) { ctl.getfromXML(xml); xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h000066400000000000000000000164321247673406200236310ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Part.h - Part implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PART_H #define PART_H #define MAX_INFO_TEXT_SIZE 1000 #include "../globals.h" #include "../Params/Controller.h" #include "../Misc/Microtonal.h" #include #include // For the monomemnotes list. class EffectMgr; class ADnoteParameters; class SUBnoteParameters; class PADnoteParameters; class SynthNote; class XMLWrapper; class FFTwrapper; /** Part implementation*/ class Part { public: /**Constructor * @param microtonal_ Pointer to the microtonal object * @param fft_ Pointer to the FFTwrapper * @param mutex_ Pointer to the master pthread_mutex_t*/ Part(Microtonal *microtonal_, FFTwrapper *fft_, pthread_mutex_t *mutex_); /**Destructor*/ ~Part(); // Midi commands implemented void NoteOn(unsigned char note, unsigned char velocity, int masterkeyshift); void NoteOff(unsigned char note); void PolyphonicAftertouch(unsigned char note, unsigned char velocity, int masterkeyshift); void AllNotesOff(); //panic void SetController(unsigned int type, int par); void RelaseSustainedKeys(); //this is called when the sustain pedal is relased void RelaseAllKeys(); //this is called on AllNotesOff controller /* The synthesizer part output */ void ComputePartSmps(); //Part output //instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank) //saves the instrument settings to a XML file //returns 0 for ok or <0 if there is an error int saveXML(const char *filename); int loadXMLinstrument(const char *filename); void add2XML(XMLwrapper *xml); void add2XMLinstrument(XMLwrapper *xml); void defaults(); void defaultsinstrument(); void applyparameters(bool lockmutex = true); void getfromXML(XMLwrapper *xml); void getfromXMLinstrument(XMLwrapper *xml); void cleanup(bool final = false); //the part's kit struct { unsigned char Penabled, Pmuted, Pminkey, Pmaxkey; unsigned char *Pname; unsigned char Padenabled, Psubenabled, Ppadenabled; unsigned char Psendtoparteffect; ADnoteParameters *adpars; SUBnoteParameters *subpars; PADnoteParameters *padpars; } kit[NUM_KIT_ITEMS]; //Part parameters void setkeylimit(unsigned char Pkeylimit); void setkititemstatus(int kititem, int Penabled_); unsigned char Penabled; /** monomemnotes; // A list to remember held notes. struct { unsigned char velocity; int mkeyshift; // I'm not sure masterkeyshift should be remembered. } monomem[256]; /* 256 is to cover all possible note values. monomem[] is used in conjunction with the list to store the velocity and masterkeyshift values of a given note (the list only store note values). For example 'monomem[note].velocity' would be the velocity value of the note 'note'.*/ PartNotes partnote[POLIPHONY]; float oldfreq; //this is used for portamento Microtonal *microtonal; FFTwrapper *fft; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp000066400000000000000000000327151247673406200256660ustar00rootroot00000000000000/* * QtXmlWrapper.cpp - a QtXml based XML backend for ZynAddSubxFX * * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /* File derived from QtXmlWrapper.C: */ /* ZynAddSubFX - a software synthesizer QtXmlWrapper.C - XML wrapper Copyright (C) 2003-2005 Nasca Octavian Paul Copyright (C) 2009-2009 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "QtXmlWrapper.h" #include #include #include #include #include "lmmsconfig.h" #include "../globals.h" #include "Util.h" struct XmlData { XmlData() : m_doc( "ZynAddSubFX-data" ) { } QDomDocument m_doc; QDomElement m_node; QDomElement m_info; QDomElement addparams( const char *name, unsigned int params, ... ); } ; QtXmlWrapper::QtXmlWrapper() : d( new XmlData ) { version.Major = 2; version.Minor = 4; version.Revision = 1; minimal = true; d->m_node = d->m_doc.createElement( "ZynAddSubFX-data" ); d->m_node.setAttribute( "version-major", QString::number( version.Major ) ); d->m_node.setAttribute( "version-minor", QString::number( version.Minor ) ); d->m_node.setAttribute( "version-revision", QString::number( version.Revision ) ); d->m_node.setAttribute( "ZynAddSubFX-author", "Nasca Octavian Paul" ); d->m_doc.appendChild( d->m_node ); //make the empty branch that will contain the information parameters d->m_info = d->addparams("INFORMATION", 0); //save zynaddsubfx specifications beginbranch("BASE_PARAMETERS"); addpar("max_midi_parts", NUM_MIDI_PARTS); addpar("max_kit_items_per_instrument", NUM_KIT_ITEMS); addpar("max_system_effects", NUM_SYS_EFX); addpar("max_insertion_effects", NUM_INS_EFX); addpar("max_instrument_effects", NUM_PART_EFX); addpar("max_addsynth_voices", NUM_VOICES); endbranch(); } QtXmlWrapper::~QtXmlWrapper() { delete d; } void QtXmlWrapper::setPadSynth(bool enabled) { /**@bug this might create multiple nodes when only one is needed*/ QDomElement oldNode = d->m_node; d->m_node = d->m_info; //Info storing addparbool("PADsynth_used", enabled); d->m_node = oldNode; } QDomElement findElement( QDomElement root, const QString & tagname, const QString & attrname, const QString & attrval ) { QDomNodeList list = root.elementsByTagName( tagname ); for( int i = 0; i < list.size(); ++i ) { QDomNode n = list.at( i ); if( n.isElement() ) { QDomElement e = n.toElement(); if( e.hasAttribute( attrname ) && e.attribute( attrname ) == attrval ) { return e; } } } return QDomElement(); } bool QtXmlWrapper::hasPadSynth() const { /**Right now this has a copied implementation of setparbool, so this should * be reworked as XMLwrapper evolves*/ QDomElement tmp = d->m_doc.elementsByTagName( "INFORMATION" ).at( 0 ).toElement(); QDomElement parameter = findElement( tmp, "par_bool", "name", "PADsynth_used" ); if( !parameter.isNull() ) { const QString val = parameter.attribute( "value" ).toLower(); return val[0] == 'y'; } return false; } /* SAVE XML members */ int QtXmlWrapper::saveXMLfile(const std::string &filename) const { char *xmldata = getXMLdata(); if(xmldata == NULL) return -2; int compression = config.cfg.GzipCompression; int result = dosavefile(filename.c_str(), compression, xmldata); delete[] xmldata; return result; } char *QtXmlWrapper::getXMLdata() const { QString xml = d->m_doc.toString( 1 ); return qstrdup( xml.toUtf8().constData() ); } int QtXmlWrapper::dosavefile(const char *filename, int compression, const char *xmldata) const { if(compression == 0) { FILE *file; file = fopen(filename, "w"); if(file == NULL) return -1; fputs(xmldata, file); fclose(file); } else { if(compression > 9) compression = 9; if(compression < 1) compression = 1; char options[10]; snprintf(options, 10, "wb%d", compression); gzFile gzfile; gzfile = gzopen(filename, options); if(gzfile == NULL) return -1; gzputs(gzfile, xmldata); gzclose(gzfile); } return 0; } void QtXmlWrapper::addpar(const std::string &name, int val) { d->addparams("par", 2, "name", name.c_str(), "value", stringFrom( val).c_str()); } void QtXmlWrapper::addparreal(const std::string &name, float val) { d->addparams("par_real", 2, "name", name.c_str(), "value", stringFrom(val).c_str()); } void QtXmlWrapper::addparbool(const std::string &name, int val) { if(val != 0) d->addparams("par_bool", 2, "name", name.c_str(), "value", "yes"); else d->addparams("par_bool", 2, "name", name.c_str(), "value", "no"); } void QtXmlWrapper::addparstr(const std::string &name, const std::string &val) { QDomElement e = d->m_doc.createElement( "string" ); e.setAttribute( "name", name.c_str() ); e.appendChild( d->m_doc.createTextNode( val.c_str() ) ); d->m_node.appendChild( e ); } void QtXmlWrapper::beginbranch(const std::string &name) { d->m_node = d->addparams(name.c_str(), 0); } void QtXmlWrapper::beginbranch(const std::string &name, int id) { d->m_node = d->addparams(name.c_str(), 1, "id", stringFrom(id).c_str()); } void QtXmlWrapper::endbranch() { d->m_node = d->m_node.parentNode().toElement(); } /* LOAD XML members */ int QtXmlWrapper::loadXMLfile(const std::string &filename) { const char *xmldata = doloadfile(filename.c_str()); if(xmldata == NULL) { qDebug() << "QtXmlWrapper::loadXMLfile(): empty data"; return -1; //the file could not be loaded or uncompressed } QByteArray b( xmldata ); while( !b.isEmpty() && b[0] != '<' ) { // remove first blank line b.remove( 0, 1 ); } if( !d->m_doc.setContent( b ) ) { qDebug() << "QtXmlWrapper::loadXMLfile(): could not set document content"; delete[] xmldata; return -2; } delete[] xmldata; d->m_node = d->m_doc.elementsByTagName( "ZynAddSubFX-data" ).at( 0 ).toElement(); if( d->m_node.isNull() || !d->m_node.isElement() ) { qDebug() << "QtXmlWrapper::loadXMLfile(): missing root node"; return -3; //the XML doesnt embbed zynaddsubfx data } QDomElement root = d->m_node.toElement(); //fetch version information version.Major = root.attribute( "version-major").toInt(); version.Minor = root.attribute( "version-minor").toInt(); version.Revision = root.attribute( "version-revision").toInt(); return 0; } char *QtXmlWrapper::doloadfile(const std::string &filename) const { char *xmldata = NULL; gzFile gzfile = gzopen(filename.c_str(), "rb"); if(gzfile != NULL) { //The possibly compressed file opened std::stringstream strBuf; //reading stream const int bufSize = 500; //fetch size char fetchBuf[bufSize + 1]; //fetch buffer int read = 0; //chars read in last fetch fetchBuf[bufSize] = 0; //force null termination while(bufSize == (read = gzread(gzfile, fetchBuf, bufSize))) strBuf << fetchBuf; fetchBuf[read] = 0; //Truncate last partial read strBuf << fetchBuf; gzclose(gzfile); //Place data in output format std::string tmp = strBuf.str(); xmldata = new char[tmp.size() + 1]; strncpy(xmldata, tmp.c_str(), tmp.size() + 1); } return xmldata; } bool QtXmlWrapper::putXMLdata(const char *xmldata) { d->m_doc.setContent( QString::fromUtf8( xmldata ) ); d->m_node = d->m_doc.elementsByTagName( "ZynAddSubFX-data" ).at( 0 ).toElement(); if( d->m_node.isNull() ) { return false; } return true; } int QtXmlWrapper::enterbranch(const std::string &name) { QDomElement tmp = d->m_node.firstChildElement( name.c_str() ); if( tmp.isNull() ) { return 0; } d->m_node = tmp; return 1; } int QtXmlWrapper::enterbranch(const std::string &name, int id) { QDomElement tmp = findElement( d->m_node, name.c_str(), "id", QString::number( id ) ); if( tmp.isNull() ) { return 0; } d->m_node = tmp; return 1; } void QtXmlWrapper::exitbranch() { d->m_node = d->m_node.parentNode().toElement(); } int QtXmlWrapper::getbranchid(int min, int max) const { if( !d->m_node.isElement() ) { return min; } QDomElement tmp = d->m_node.toElement(); if( !tmp.hasAttribute( "id" ) ) { return min; } int id = tmp.attribute( "id" ).toInt(); if((min == 0) && (max == 0)) return id; if(id < min) id = min; else if(id > max) id = max; return id; } int QtXmlWrapper::getpar(const std::string &name, int defaultpar, int min, int max) const { QDomElement tmp = findElement( d->m_node, "par", "name", name.c_str() ); if( tmp.isNull() || !tmp.hasAttribute( "value" ) ) { return defaultpar; } int val = tmp.attribute( "value" ).toInt(); if(val < min) val = min; else if(val > max) val = max; return val; } int QtXmlWrapper::getpar127(const std::string &name, int defaultpar) const { return getpar(name, defaultpar, 0, 127); } int QtXmlWrapper::getparbool(const std::string &name, int defaultpar) const { QDomElement tmp = findElement( d->m_node, "par_bool", "name", name.c_str() ); if( tmp.isNull() || !tmp.hasAttribute( "value" ) ) { return defaultpar; } const QString val = tmp.attribute( "value" ).toLower(); if( val[0] == 'y' ) { return 1; } return 0; } void QtXmlWrapper::getparstr(const std::string &name, char *par, int maxstrlen) const { ZERO(par, maxstrlen); QDomNode tmp = findElement( d->m_node, "string", "name", name.c_str() ); if( tmp.isNull() || !tmp.hasChildNodes() ) { return; } tmp = tmp.firstChild(); if( tmp.nodeType() == QDomNode::ElementNode ) { snprintf(par, maxstrlen, "%s", tmp.toElement().tagName().toUtf8().constData() ); return; } if( tmp.nodeType() == QDomNode::TextNode ) { snprintf(par, maxstrlen, "%s", tmp.toText().data().toUtf8().constData() ); return; } } std::string QtXmlWrapper::getparstr(const std::string &name, const std::string &defaultpar) const { QDomNode tmp = findElement( d->m_node, "string", "name", name.c_str() ); if( tmp.isNull() || !tmp.hasChildNodes() ) { return defaultpar; } tmp = tmp.firstChild(); if( tmp.nodeType() == QDomNode::ElementNode && !tmp.toElement().tagName().isEmpty() ) { return tmp.toElement().tagName().toUtf8().constData(); } if( tmp.nodeType() == QDomNode::TextNode && !tmp.toText().data().isEmpty() ) { return tmp.toText().data().toUtf8().constData(); } return defaultpar; } float QtXmlWrapper::getparreal(const char *name, float defaultpar) const { QDomElement tmp = findElement( d->m_node, "par_real", "name", name ); if( tmp.isNull() || !tmp.hasAttribute( "value" ) ) { return defaultpar; } return tmp.attribute( "value" ).toFloat(); } float QtXmlWrapper::getparreal(const char *name, float defaultpar, float min, float max) const { float result = getparreal(name, defaultpar); if(result < min) result = min; else if(result > max) result = max; return result; } /** Private members **/ QDomElement XmlData::addparams(const char *name, unsigned int params, ...) { /**@todo make this function send out a good error message if something goes * wrong**/ QDomElement element = m_doc.createElement( name ); m_node.appendChild( element ); if(params) { va_list variableList; va_start(variableList, params); const char *ParamName; const char *ParamValue; while(params--) { ParamName = va_arg(variableList, const char *); ParamValue = va_arg(variableList, const char *); element.setAttribute( ParamName, ParamValue); } } return element; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h000066400000000000000000000072431247673406200253310ustar00rootroot00000000000000/* * QtXmlWrapper.h - a QtXml based XML backend for ZynAddSubxFX * * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /* File derived from XMLwrapper.h: */ /* ZynAddSubFX - a software synthesizer XMLwrapper.h - XML wrapper Copyright (C) 2003-2005 Nasca Octavian Paul Copyright (C) 2009-2009 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef QT_XML_WRAPPER_H #define QT_XML_WRAPPER_H #include "../globals.h" #include #include #include #include #define QtXmlWrapper XMLwrapper struct XmlData; class QtXmlWrapper { public: QtXmlWrapper(); ~QtXmlWrapper(); int saveXMLfile( const std::string & filename ) const; int loadXMLfile( const std::string & filename ); char *getXMLdata() const; bool putXMLdata( const char *xmldata ); void addpar( const std::string & name, int val ); void addparreal( const std::string & name, float val); void addparbool( const std::string & name, int val ); void addparstr( const std::string & name, const std::string & val ); void beginbranch( const std::string & name ); void beginbranch( const std::string & name, int id ); void endbranch(); int enterbranch( const std::string & name ); int enterbranch( const std::string & name, int id ); void exitbranch(); int getbranchid( int min, int max ) const; int getpar( const std::string & name, int defaultpar, int min, int max ) const; int getpar127( const std::string & name, int defaultpar ) const; int getparbool( const std::string & name, int defaultpar ) const; void getparstr( const std::string & name, char * par, int maxstrlen ) const; std::string getparstr( const std::string & name, const std::string & defaultpar ) const; float getparreal( const char * name, float defaultpar ) const; float getparreal(const char *name, float defaultpar, float min, float max) const; bool minimal; /** #include "Recorder.h" #include "WavFile.h" #include "../Nio/Nio.h" Recorder::Recorder() :status(0), notetrigger(0) {} Recorder::~Recorder() { if(recording() == 1) stop(); } int Recorder::preparefile(std::string filename_, int overwrite) { if(!overwrite) { struct stat fileinfo; int statr; statr = stat(filename_.c_str(), &fileinfo); if(statr == 0) //file exists return 1; } Nio::waveNew(new WavFile(filename_, synth->samplerate, 2)); status = 1; //ready return 0; } void Recorder::start() { notetrigger = 0; status = 2; //recording } void Recorder::stop() { Nio::waveStop(); Nio::waveStart(); status = 0; } void Recorder::pause() { status = 0; Nio::waveStop(); } int Recorder::recording() { if((status == 2) && (notetrigger != 0)) return 1; else return 0; } void Recorder::triggernow() { if(status == 2) { if(notetrigger != 1) Nio::waveStart(); notetrigger = 1; } } //TODO move recorder inside nio system lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h000066400000000000000000000026641247673406200244720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Recorder.h - Records sound to a file Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef RECORDER_H #define RECORDER_H #include #include "../globals.h" /**Records sound to a file*/ class Recorder { public: Recorder(); ~Recorder(); /**Prepare the given file. * @returns 1 if the file exists */ int preparefile(std::string filename_, int overwrite); void start(); void stop(); void pause(); int recording(); void triggernow(); /** Status: * 0 - not ready(no file selected), * 1 - ready * 2 - recording */ int status; private: int notetrigger; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp000066400000000000000000000021461247673406200245140ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Stereo.cpp - Object for storing a pair of objects Copyright (C) 2009-2009 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ template Stereo::Stereo(const T &left, const T &right) :l(left), r(right) {} template Stereo::Stereo(const T &val) :l(val), r(val) {} template Stereo &Stereo::operator=(const Stereo &nstr) { l = nstr.l; r = nstr.r; return *this; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h000066400000000000000000000023261247673406200241610ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Stereo.h - Object for storing a pair of objects Copyright (C) 2009-2009 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef STEREO_H #define STEREO_H template struct Stereo { public: Stereo(const T &left, const T &right); /**Initializes Stereo with left and right set to val * @param val the value for both channels*/ Stereo(const T &val); ~Stereo() {} Stereo &operator=(const Stereo &smp); //data T l, r; }; #include "Stereo.cpp" #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp000066400000000000000000000131261247673406200241700ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Util.cpp - Miscellaneous functions Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Util.h" #include #include #include #include #ifndef WIN32 #include #endif #include #include #include #include #include #include #ifdef HAVE_SCHEDULER #include #endif prng_t prng_state = 0x1234; Config config; float *denormalkillbuf; /* * Transform the velocity according the scaling parameter (velocity sensing) */ float VelF(float velocity, unsigned char scaling) { float x; x = powf(VELOCITY_MAX_SCALE, (64.0f - scaling) / 64.0f); if((scaling == 127) || (velocity > 0.99f)) return 1.0f; else return powf(velocity, x); } /* * Get the detune in cents */ float getdetune(unsigned char type, unsigned short int coarsedetune, unsigned short int finedetune) { float det = 0.0f, octdet = 0.0f, cdet = 0.0f, findet = 0.0f; //Get Octave int octave = coarsedetune / 1024; if(octave >= 8) octave -= 16; octdet = octave * 1200.0f; //Coarse and fine detune int cdetune = coarsedetune % 1024; if(cdetune > 512) cdetune -= 1024; int fdetune = finedetune - 8192; switch(type) { // case 1: is used for the default (see below) case 2: cdet = fabs(cdetune * 10.0f); findet = fabs(fdetune / 8192.0f) * 10.0f; break; case 3: cdet = fabs(cdetune * 100); findet = powf(10, fabs(fdetune / 8192.0f) * 3.0f) / 10.0f - 0.1f; break; case 4: cdet = fabs(cdetune * 701.95500087f); //perfect fifth findet = (powf(2, fabs(fdetune / 8192.0f) * 12.0f) - 1.0f) / 4095 * 1200; break; //case ...: need to update N_DETUNE_TYPES, if you'll add more default: cdet = fabs(cdetune * 50.0f); findet = fabs(fdetune / 8192.0f) * 35.0f; //almost like "Paul's Sound Designer 2" break; } if(finedetune < 8192) findet = -findet; if(cdetune < 0) cdet = -cdet; det = octdet + cdet + findet; return det; } bool fileexists(const char *filename) { struct stat tmp; int result = stat(filename, &tmp); if(result >= 0) return true; return false; } void set_realtime() { #ifdef HAVE_SCHEDULER sched_param sc; sc.sched_priority = 60; //if you want get "sched_setscheduler undeclared" from compilation, //you can safely remove the folowing line: sched_setscheduler(0, SCHED_FIFO, &sc); //if (err==0) printf("Real-time"); #endif } void os_sleep(long length) { usleep(length); } std::string legalizeFilename(std::string filename) { for(int i = 0; i < (int) filename.size(); ++i) { char c = filename[i]; if(!(isdigit(c) || isalpha(c) || (c == '-') || (c == ' '))) filename[i] = '_'; } return filename; } void invSignal(float *sig, size_t len) { for(size_t i = 0; i < len; ++i) sig[i] *= -1.0f; } //Some memory pools for short term buffer use //(avoid the use of new in RT thread(s)) struct pool_entry { bool free; float *dat; }; typedef std::vector pool_t; typedef pool_t::iterator pool_itr_t; pool_t pool; float *getTmpBuffer() { for(pool_itr_t itr = pool.begin(); itr != pool.end(); ++itr) if(itr->free) { //Use Pool itr->free = false; return itr->dat; } pool_entry p; //Extend Pool p.free = false; p.dat = new float[synth->buffersize]; pool.push_back(p); return p.dat; } void returnTmpBuffer(float *buf) { for(pool_itr_t itr = pool.begin(); itr != pool.end(); ++itr) if(itr->dat == buf) { //Return to Pool itr->free = true; return; } fprintf(stderr, "ERROR: invalid buffer returned %s %d\n", __FILE__, __LINE__); } void clearTmpBuffers(void) { for(pool_itr_t itr = pool.begin(); itr != pool.end(); ++itr) { #ifndef WIN32 if(!itr->free) //Warn about used buffers warn("Temporary buffer (%p) about to be freed may be in use", itr->dat); #endif delete [] itr->dat; } pool.clear(); } float SYNTH_T::numRandom() { return RND; } float interpolate(const float *data, size_t len, float pos) { assert(len > (size_t)pos + 1); const int l_pos = (int)pos, r_pos = l_pos + 1; const float leftness = pos - l_pos; return data[l_pos] * leftness + data[r_pos] * (1.0f - leftness); } float cinterpolate(const float *data, size_t len, float pos) { const int l_pos = ((int)pos) % len, r_pos = (l_pos + 1) % len; const float leftness = pos - l_pos; return data[l_pos] * leftness + data[r_pos] * (1.0f - leftness); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h000066400000000000000000000054571247673406200236450ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Util.h - Miscellaneous functions Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef UTIL_H #define UTIL_H #include #include #include #include "Config.h" #include "../globals.h" //Velocity Sensing function extern float VelF(float velocity, unsigned char scaling); bool fileexists(const char *filename); #define N_DETUNE_TYPES 4 //the number of detune types extern float getdetune(unsigned char type, unsigned short int coarsedetune, unsigned short int finedetune); /**Try to set current thread to realtime priority program priority * \todo see if the right pid is being sent * \todo see if this is having desired effect, if not then look at * pthread_attr_t*/ void set_realtime(); /**Os independent sleep in microsecond*/ void os_sleep(long length); std::string legalizeFilename(std::string filename); extern float *denormalkillbuf; /** std::string stringFrom(T x) { std::stringstream ss; ss << x; return ss.str(); } template T stringTo(const char *x) { std::string str = x != NULL ? x : "0"; //should work for the basic float/int std::stringstream ss(str); T ans; ss >> ans; return ans; } template T limit(T val, T min, T max) { return val < min ? min : (val > max ? max : val); } //Random number generator typedef uint32_t prng_t; extern prng_t prng_state; // Portable Pseudo-Random Number Generator inline prng_t prng_r(prng_t &p) { return p = p * 1103515245 + 12345; } inline prng_t prng(void) { return prng_r(prng_state) & 0x7fffffff; } inline void sprng(prng_t p) { prng_state = p; } /* * The random generator (0.0f..1.0f) */ # define INT32_MAX (2147483647) #define RND (prng() / (INT32_MAX * 1.0f)) //Linear Interpolation float interpolate(const float *data, size_t len, float pos); //Linear circular interpolation float cinterpolate(const float *data, size_t len, float pos); #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp000066400000000000000000000055011247673406200246060ustar00rootroot00000000000000/* Copyright (C) 2006 Nasca Octavian Paul Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "WavFile.h" using namespace std; WavFile::WavFile(string filename, int samplerate, int channels) :sampleswritten(0), samplerate(samplerate), channels(channels), file(fopen(filename.c_str(), "w")) { if(file) { cout << "INFO: Making space for wave file header" << endl; //making space for the header written at destruction char tmp[44]; memset(tmp, 0, 44 * sizeof(char)); fwrite(tmp, 1, 44, file); } } WavFile::~WavFile() { if(file) { cout << "INFO: Writing wave file header" << endl; unsigned int chunksize; rewind(file); fwrite("RIFF", 4, 1, file); chunksize = sampleswritten * 4 + 36; fwrite(&chunksize, 4, 1, file); fwrite("WAVEfmt ", 8, 1, file); chunksize = 16; fwrite(&chunksize, 4, 1, file); unsigned short int formattag = 1; //uncompresed wave fwrite(&formattag, 2, 1, file); unsigned short int nchannels = channels; //stereo fwrite(&nchannels, 2, 1, file); unsigned int samplerate_ = samplerate; //samplerate fwrite(&samplerate_, 4, 1, file); unsigned int bytespersec = samplerate * 2 * channels; //bytes/sec fwrite(&bytespersec, 4, 1, file); unsigned short int blockalign = 2 * channels; //2 channels * 16 bits/8 fwrite(&blockalign, 2, 1, file); unsigned short int bitspersample = 16; fwrite(&bitspersample, 2, 1, file); fwrite("data", 4, 1, file); chunksize = sampleswritten * blockalign; fwrite(&chunksize, 4, 1, file); fclose(file); file = NULL; } } bool WavFile::good() const { return file; } void WavFile::writeStereoSamples(int nsmps, short int *smps) { if(file) { fwrite(smps, nsmps, 4, file); sampleswritten += nsmps; } } void WavFile::writeMonoSamples(int nsmps, short int *smps) { if(file) { fwrite(smps, nsmps, 2, file); sampleswritten += nsmps; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h000066400000000000000000000024051247673406200242530ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer WavFile.h - Records sound to a file Copyright (C) 2008 Nasca Octavian Paul Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WAVFILE_H #define WAVFILE_H #include class WavFile { public: WavFile(std::string filename, int samplerate, int channels); ~WavFile(); bool good() const; void writeMonoSamples(int nsmps, short int *smps); void writeStereoSamples(int nsmps, short int *smps); private: int sampleswritten; int samplerate; int channels; FILE *file; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp000066400000000000000000000140211247673406200257740ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer WaveShapeSmps.cpp - Sample Distortion Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "WaveShapeSmps.h" #include void waveShapeSmps(int n, float *smps, unsigned char type, unsigned char drive) { int i; float ws = drive / 127.0f; float tmpv; switch(type) { case 1: ws = powf(10, ws * ws * 3.0f) - 1.0f + 0.001f; //Arctangent for(i = 0; i < n; ++i) smps[i] = atanf(smps[i] * ws) / atanf(ws); break; case 2: ws = ws * ws * 32.0f + 0.0001f; //Asymmetric if(ws < 1.0f) tmpv = sinf(ws) + 0.1f; else tmpv = 1.1f; for(i = 0; i < n; ++i) smps[i] = sinf(smps[i] * (0.1f + ws - ws * smps[i])) / tmpv; ; break; case 3: ws = ws * ws * ws * 20.0f + 0.0001f; //Pow for(i = 0; i < n; ++i) { smps[i] *= ws; if(fabs(smps[i]) < 1.0f) { smps[i] = (smps[i] - powf(smps[i], 3.0f)) * 3.0f; if(ws < 1.0f) smps[i] /= ws; } else smps[i] = 0.0f; } break; case 4: ws = ws * ws * ws * 32.0f + 0.0001f; //Sine if(ws < 1.57f) tmpv = sinf(ws); else tmpv = 1.0f; for(i = 0; i < n; ++i) smps[i] = sinf(smps[i] * ws) / tmpv; break; case 5: ws = ws * ws + 0.000001f; //Quantisize for(i = 0; i < n; ++i) smps[i] = floor(smps[i] / ws + 0.5f) * ws; break; case 6: ws = ws * ws * ws * 32 + 0.0001f; //Zigzag if(ws < 1.0f) tmpv = sinf(ws); else tmpv = 1.0f; for(i = 0; i < n; ++i) smps[i] = asinf(sinf(smps[i] * ws)) / tmpv; break; case 7: ws = powf(2.0f, -ws * ws * 8.0f); //Limiter for(i = 0; i < n; ++i) { float tmp = smps[i]; if(fabs(tmp) > ws) { if(tmp >= 0.0f) smps[i] = 1.0f; else smps[i] = -1.0f; } else smps[i] /= ws; } break; case 8: ws = powf(2.0f, -ws * ws * 8.0f); //Upper Limiter for(i = 0; i < n; ++i) { float tmp = smps[i]; if(tmp > ws) smps[i] = ws; smps[i] *= 2.0f; } break; case 9: ws = powf(2.0f, -ws * ws * 8.0f); //Lower Limiter for(i = 0; i < n; ++i) { float tmp = smps[i]; if(tmp < -ws) smps[i] = -ws; smps[i] *= 2.0f; } break; case 10: ws = (powf(2.0f, ws * 6.0f) - 1.0f) / powf(2.0f, 6.0f); //Inverse Limiter for(i = 0; i < n; ++i) { float tmp = smps[i]; if(fabs(tmp) > ws) { if(tmp >= 0.0f) smps[i] = tmp - ws; else smps[i] = tmp + ws; } else smps[i] = 0; } break; case 11: ws = powf(5, ws * ws * 1.0f) - 1.0f; //Clip for(i = 0; i < n; ++i) smps[i] = smps[i] * (ws + 0.5f) * 0.9999f - floor( 0.5f + smps[i] * (ws + 0.5f) * 0.9999f); break; case 12: ws = ws * ws * ws * 30 + 0.001f; //Asym2 if(ws < 0.3f) tmpv = ws; else tmpv = 1.0f; for(i = 0; i < n; ++i) { float tmp = smps[i] * ws; if((tmp > -2.0f) && (tmp < 1.0f)) smps[i] = tmp * (1.0f - tmp) * (tmp + 2.0f) / tmpv; else smps[i] = 0.0f; } break; case 13: ws = ws * ws * ws * 32.0f + 0.0001f; //Pow2 if(ws < 1.0f) tmpv = ws * (1 + ws) / 2.0f; else tmpv = 1.0f; for(i = 0; i < n; ++i) { float tmp = smps[i] * ws; if((tmp > -1.0f) && (tmp < 1.618034f)) smps[i] = tmp * (1.0f - tmp) / tmpv; else if(tmp > 0.0f) smps[i] = -1.0f; else smps[i] = -2.0f; } break; case 14: ws = powf(ws, 5.0f) * 80.0f + 0.0001f; //sigmoid if(ws > 10.0f) tmpv = 0.5f; else tmpv = 0.5f - 1.0f / (expf(ws) + 1.0f); for(i = 0; i < n; ++i) { float tmp = smps[i] * ws; if(tmp < -10.0f) tmp = -10.0f; else if(tmp > 10.0f) tmp = 10.0f; tmp = 0.5f - 1.0f / (expf(tmp) + 1.0f); smps[i] = tmp / tmpv; } break; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h000066400000000000000000000021121247673406200254370ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer WaveShapeSmps.h - Sample distortions Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WAVESHAPESMPS_H #define WAVESHAPESMPS_H //Waveshaping(called by Distorsion effect and waveshape from OscilGen) void waveShapeSmps(int n, float *smps, unsigned char type, unsigned char drive); #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp000066400000000000000000000433241247673406200253170ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer XMLwrapper.cpp - XML wrapper Copyright (C) 2003-2005 Nasca Octavian Paul Copyright (C) 2009-2009 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "XMLwrapper.h" #include #include #include #include #include #include #include #include "../globals.h" #include "Util.h" using namespace std; int xml_k = 0; bool verbose = false; const char *XMLwrapper_whitespace_callback(mxml_node_t *node, int where) { const char *name = node->value.element.name; if((where == MXML_WS_BEFORE_OPEN) && (!strcmp(name, "?xml"))) return NULL; if((where == MXML_WS_BEFORE_CLOSE) && (!strcmp(name, "string"))) return NULL; if((where == MXML_WS_BEFORE_OPEN) || (where == MXML_WS_BEFORE_CLOSE)) /* const char *tmp=node->value.element.name; if (tmp!=NULL) { if ((strstr(tmp,"par")!=tmp)&&(strstr(tmp,"string")!=tmp)) { printf("%s ",tmp); if (where==MXML_WS_BEFORE_OPEN) xml_k++; if (where==MXML_WS_BEFORE_CLOSE) xml_k--; if (xml_k>=STACKSIZE) xml_k=STACKSIZE-1; if (xml_k<0) xml_k=0; printf("%d\n",xml_k); printf("\n"); }; }; int i=0; for (i=1;i(mxmlFindElement( const_cast(node), const_cast(top), name, attr, value, descend)); } //temporary const overload of mxmlElementGetAttr const char *mxmlElementGetAttr(const mxml_node_t *node, const char *name) { return mxmlElementGetAttr(const_cast(node), name); } XMLwrapper::XMLwrapper() { version.Major = 2; version.Minor = 4; version.Revision = 4; minimal = true; node = tree = mxmlNewElement(MXML_NO_PARENT, "?xml version=\"1.0f\" encoding=\"UTF-8\"?"); /* for mxml 2.1f (and older) tree=mxmlNewElement(MXML_NO_PARENT,"?xml"); mxmlElementSetAttr(tree,"version","1.0f"); mxmlElementSetAttr(tree,"encoding","UTF-8"); */ mxml_node_t *doctype = mxmlNewElement(tree, "!DOCTYPE"); mxmlElementSetAttr(doctype, "ZynAddSubFX-data", NULL); node = root = addparams("ZynAddSubFX-data", 4, "version-major", stringFrom( version.Major).c_str(), "version-minor", stringFrom( version.Minor).c_str(), "version-revision", stringFrom(version.Revision).c_str(), "ZynAddSubFX-author", "Nasca Octavian Paul"); //make the empty branch that will contain the information parameters info = addparams("INFORMATION", 0); //save zynaddsubfx specifications beginbranch("BASE_PARAMETERS"); addpar("max_midi_parts", NUM_MIDI_PARTS); addpar("max_kit_items_per_instrument", NUM_KIT_ITEMS); addpar("max_system_effects", NUM_SYS_EFX); addpar("max_insertion_effects", NUM_INS_EFX); addpar("max_instrument_effects", NUM_PART_EFX); addpar("max_addsynth_voices", NUM_VOICES); endbranch(); } XMLwrapper::~XMLwrapper() { if(tree) mxmlDelete(tree); } void XMLwrapper::setPadSynth(bool enabled) { /**@bug this might create multiple nodes when only one is needed*/ mxml_node_t *oldnode = node; node = info; //Info storing addparbool("PADsynth_used", enabled); node = oldnode; } bool XMLwrapper::hasPadSynth() const { /**Right now this has a copied implementation of setparbool, so this should * be reworked as XMLwrapper evolves*/ mxml_node_t *tmp = mxmlFindElement(tree, tree, "INFORMATION", NULL, NULL, MXML_DESCEND); mxml_node_t *parameter = mxmlFindElement(tmp, tmp, "par_bool", "name", "PADsynth_used", MXML_DESCEND_FIRST); if(parameter == NULL) //no information availiable return false; const char *strval = mxmlElementGetAttr(parameter, "value"); if(strval == NULL) //no information available return false; if((strval[0] == 'Y') || (strval[0] == 'y')) return true; else return false; } /* SAVE XML members */ int XMLwrapper::saveXMLfile(const string &filename) const { char *xmldata = getXMLdata(); if(xmldata == NULL) return -2; int compression = config.cfg.GzipCompression; int result = dosavefile(filename.c_str(), compression, xmldata); free(xmldata); return result; } char *XMLwrapper::getXMLdata() const { xml_k = 0; char *xmldata = mxmlSaveAllocString(tree, XMLwrapper_whitespace_callback); return xmldata; } int XMLwrapper::dosavefile(const char *filename, int compression, const char *xmldata) const { if(compression == 0) { FILE *file; file = fopen(filename, "w"); if(file == NULL) return -1; fputs(xmldata, file); fclose(file); } else { if(compression > 9) compression = 9; if(compression < 1) compression = 1; char options[10]; snprintf(options, 10, "wb%d", compression); gzFile gzfile; gzfile = gzopen(filename, options); if(gzfile == NULL) return -1; gzputs(gzfile, xmldata); gzclose(gzfile); } return 0; } void XMLwrapper::addpar(const string &name, int val) { addparams("par", 2, "name", name.c_str(), "value", stringFrom( val).c_str()); } void XMLwrapper::addparreal(const string &name, float val) { addparams("par_real", 2, "name", name.c_str(), "value", stringFrom(val).c_str()); } void XMLwrapper::addparbool(const string &name, int val) { if(val != 0) addparams("par_bool", 2, "name", name.c_str(), "value", "yes"); else addparams("par_bool", 2, "name", name.c_str(), "value", "no"); } void XMLwrapper::addparstr(const string &name, const string &val) { mxml_node_t *element = mxmlNewElement(node, "string"); mxmlElementSetAttr(element, "name", name.c_str()); mxmlNewText(element, 0, val.c_str()); } void XMLwrapper::beginbranch(const string &name) { if(verbose) cout << "beginbranch()" << name << endl; node = addparams(name.c_str(), 0); } void XMLwrapper::beginbranch(const string &name, int id) { if(verbose) cout << "beginbranch(" << id << ")" << name << endl; node = addparams(name.c_str(), 1, "id", stringFrom(id).c_str()); } void XMLwrapper::endbranch() { if(verbose) cout << "endbranch()" << node << "-" << node->value.element.name << " To " << node->parent << "-" << node->parent->value.element.name << endl; node = node->parent; } //workaround for memory leak const char *trimLeadingWhite(const char *c) { while(isspace(*c)) ++c; return c; } /* LOAD XML members */ int XMLwrapper::loadXMLfile(const string &filename) { if(tree != NULL) mxmlDelete(tree); tree = NULL; const char *xmldata = doloadfile(filename.c_str()); if(xmldata == NULL) return -1; //the file could not be loaded or uncompressed root = tree = mxmlLoadString(NULL, trimLeadingWhite( xmldata), MXML_OPAQUE_CALLBACK); delete[] xmldata; if(tree == NULL) return -2; //this is not XML node = root = mxmlFindElement(tree, tree, "ZynAddSubFX-data", NULL, NULL, MXML_DESCEND); if(root == NULL) return -3; //the XML doesnt embbed zynaddsubfx data //fetch version information version.Major = stringTo(mxmlElementGetAttr(root, "version-major")); version.Minor = stringTo(mxmlElementGetAttr(root, "version-minor")); version.Revision = stringTo(mxmlElementGetAttr(root, "version-revision")); if(verbose) cout << "loadXMLfile() version: " << version.Major << '.' << version.Minor << '.' << version.Revision << endl; return 0; } char *XMLwrapper::doloadfile(const string &filename) const { char *xmldata = NULL; gzFile gzfile = gzopen(filename.c_str(), "rb"); if(gzfile != NULL) { //The possibly compressed file opened stringstream strBuf; //reading stream const int bufSize = 500; //fetch size char fetchBuf[bufSize + 1]; //fetch buffer int read = 0; //chars read in last fetch fetchBuf[bufSize] = 0; //force null termination while(bufSize == (read = gzread(gzfile, fetchBuf, bufSize))) strBuf << fetchBuf; fetchBuf[read] = 0; //Truncate last partial read strBuf << fetchBuf; gzclose(gzfile); //Place data in output format string tmp = strBuf.str(); xmldata = new char[tmp.size() + 1]; strncpy(xmldata, tmp.c_str(), tmp.size() + 1); } return xmldata; } bool XMLwrapper::putXMLdata(const char *xmldata) { if(tree != NULL) mxmlDelete(tree); tree = NULL; if(xmldata == NULL) return false; root = tree = mxmlLoadString(NULL, trimLeadingWhite( xmldata), MXML_OPAQUE_CALLBACK); if(tree == NULL) return false; node = root = mxmlFindElement(tree, tree, "ZynAddSubFX-data", NULL, NULL, MXML_DESCEND); if(root == NULL) return false; return true; } int XMLwrapper::enterbranch(const string &name) { if(verbose) cout << "enterbranch() " << name << endl; mxml_node_t *tmp = mxmlFindElement(node, node, name.c_str(), NULL, NULL, MXML_DESCEND_FIRST); if(tmp == NULL) return 0; node = tmp; return 1; } int XMLwrapper::enterbranch(const string &name, int id) { if(verbose) cout << "enterbranch(" << id << ") " << name << endl; mxml_node_t *tmp = mxmlFindElement(node, node, name.c_str(), "id", stringFrom( id).c_str(), MXML_DESCEND_FIRST); if(tmp == NULL) return 0; node = tmp; return 1; } void XMLwrapper::exitbranch() { if(verbose) cout << "exitbranch()" << node << "-" << node->value.element.name << " To " << node->parent << "-" << node->parent->value.element.name << endl; node = node->parent; } int XMLwrapper::getbranchid(int min, int max) const { int id = stringTo(mxmlElementGetAttr(node, "id")); if((min == 0) && (max == 0)) return id; if(id < min) id = min; else if(id > max) id = max; return id; } int XMLwrapper::getpar(const string &name, int defaultpar, int min, int max) const { const mxml_node_t *tmp = mxmlFindElement(node, node, "par", "name", name.c_str(), MXML_DESCEND_FIRST); if(tmp == NULL) return defaultpar; const char *strval = mxmlElementGetAttr(tmp, "value"); if(strval == NULL) return defaultpar; int val = stringTo(strval); if(val < min) val = min; else if(val > max) val = max; return val; } int XMLwrapper::getpar127(const string &name, int defaultpar) const { return getpar(name, defaultpar, 0, 127); } int XMLwrapper::getparbool(const string &name, int defaultpar) const { const mxml_node_t *tmp = mxmlFindElement(node, node, "par_bool", "name", name.c_str(), MXML_DESCEND_FIRST); if(tmp == NULL) return defaultpar; const char *strval = mxmlElementGetAttr(tmp, "value"); if(strval == NULL) return defaultpar; if((strval[0] == 'Y') || (strval[0] == 'y')) return 1; else return 0; } void XMLwrapper::getparstr(const string &name, char *par, int maxstrlen) const { ZERO(par, maxstrlen); const mxml_node_t *tmp = mxmlFindElement(node, node, "string", "name", name.c_str(), MXML_DESCEND_FIRST); if(tmp == NULL) return; if(tmp->child == NULL) return; if(tmp->child->type == MXML_OPAQUE) { snprintf(par, maxstrlen, "%s", tmp->child->value.element.name); return; } if((tmp->child->type == MXML_TEXT) && (tmp->child->value.text.string != NULL)) { snprintf(par, maxstrlen, "%s", tmp->child->value.text.string); return; } } string XMLwrapper::getparstr(const string &name, const std::string &defaultpar) const { const mxml_node_t *tmp = mxmlFindElement(node, node, "string", "name", name.c_str(), MXML_DESCEND_FIRST); if((tmp == NULL) || (tmp->child == NULL)) return defaultpar; if((tmp->child->type == MXML_OPAQUE) && (tmp->child->value.element.name != NULL)) return tmp->child->value.element.name; if((tmp->child->type == MXML_TEXT) && (tmp->child->value.text.string != NULL)) return tmp->child->value.text.string; return defaultpar; } float XMLwrapper::getparreal(const char *name, float defaultpar) const { const mxml_node_t *tmp = mxmlFindElement(node, node, "par_real", "name", name, MXML_DESCEND_FIRST); if(tmp == NULL) return defaultpar; const char *strval = mxmlElementGetAttr(tmp, "value"); if(strval == NULL) return defaultpar; return stringTo(strval); } float XMLwrapper::getparreal(const char *name, float defaultpar, float min, float max) const { float result = getparreal(name, defaultpar); if(result < min) result = min; else if(result > max) result = max; return result; } /** Private members **/ mxml_node_t *XMLwrapper::addparams(const char *name, unsigned int params, ...) const { /**@todo make this function send out a good error message if something goes * wrong**/ mxml_node_t *element = mxmlNewElement(node, name); if(params) { va_list variableList; va_start(variableList, params); const char *ParamName; const char *ParamValue; while(params--) { ParamName = va_arg(variableList, const char *); ParamValue = va_arg(variableList, const char *); if(verbose) cout << "addparams()[" << params << "]=" << name << " " << ParamName << "=\"" << ParamValue << "\"" << endl; mxmlElementSetAttr(element, ParamName, ParamValue); } } return element; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h000066400000000000000000000220471247673406200247630ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer XMLwrapper.h - XML wrapper Copyright (C) 2003-2005 Nasca Octavian Paul Copyright (C) 2009-2009 Mark McCurry Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #if 1 #include "QtXmlWrapper.h" #else #include #include #ifndef float #define float float #endif #ifndef XML_WRAPPER_H #define XML_WRAPPER_H /**Mxml wrapper*/ class XMLwrapper { public: /** * Constructor. * Will Construct the object and fill in top level branch * */ XMLwrapper(); /**Destructor*/ ~XMLwrapper(); /** * Saves the XML to a file. * @param filename the name of the destination file. * @returns 0 if ok or -1 if the file cannot be saved. */ int saveXMLfile(const std::string &filename) const; /** * Return XML tree as a string. * Note: The string must be freed with free() to deallocate * @returns a newly allocated NULL terminated string of the XML data. */ char *getXMLdata() const; /** * Add simple parameter. * @param name The name of the mXML node. * @param val The string value of the mXml node */ void addpar(const std::string &name, int val); /** * Adds a realtype parameter. * @param name The name of the mXML node. * @param val The float value of the node. */ void addparreal(const std::string &name, float val); /** * Add boolean parameter. * \todo Fix this reverse boolean logic. * @param name The name of the mXML node. * @param val The boolean value of the node (0->"yes";else->"no"). */ void addparbool(const std::string &name, int val); /** * Add string parameter. * @param name The name of the mXML node. * @param val The string value of the node. */ void addparstr(const std::string &name, const std::string &val); /** * Create a new branch. * @param name Name of new branch * @see void endbranch() */ void beginbranch(const std::string &name); /** * Create a new branch. * @param name Name of new branch * @param id "id" value of branch * @see void endbranch() */ void beginbranch(const std::string &name, int id); /**Closes new branches. * This must be called to exit each branch created by beginbranch( ). * @see void beginbranch(const std::string &name) * @see void beginbranch(const std::string &name, int id) */ void endbranch(); /** * Loads file into XMLwrapper. * @param filename file to be loaded * @returns 0 if ok or -1 if the file cannot be loaded */ int loadXMLfile(const std::string &filename); /** * Loads string into XMLwrapper. * @param xmldata NULL terminated string of XML data. * @returns true if successful. */ bool putXMLdata(const char *xmldata); /** * Enters the branch. * @param name Name of branch. * @returns 1 if is ok, or 0 otherwise. */ int enterbranch(const std::string &name); /** * Enter into the branch \c name with id \c id. * @param name Name of branch. * @param id Value of branch's "id". * @returns 1 if is ok, or 0 otherwise. */ int enterbranch(const std::string &name, int id); /**Exits from a branch*/ void exitbranch(); /**Get the the branch_id and limits it between the min and max. * if min==max==0, it will not limit it * if there isn't any id, will return min * this must be called only imediately after enterbranch() */ int getbranchid(int min, int max) const; /** * Returns the integer value stored in node name. * It returns the integer value between the limits min and max. * If min==max==0, then the value will not be limited. * If there is no location named name, then defaultpar will be returned. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. * @param min The minimum return value. * @param max The maximum return value. */ int getpar(const std::string &name, int defaultpar, int min, int max) const; /** * Returns the integer value stored in the node with range [0,127]. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ int getpar127(const std::string &name, int defaultpar) const; /** * Returns the boolean value stored in the node. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ int getparbool(const std::string &name, int defaultpar) const; /** * Get the string value stored in the node. * @param name The parameter name. * @param par Pointer to destination string * @param maxstrlen Max string length for destination */ void getparstr(const std::string &name, char *par, int maxstrlen) const; /** * Get the string value stored in the node. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ std::string getparstr(const std::string &name, const std::string &defaultpar) const; /** * Returns the real value stored in the node. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ float getparreal(const char *name, float defaultpar) const; /** * Returns the real value stored in the node. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. * @param min The minimum value * @param max The maximum value */ float getparreal(const char *name, float defaultpar, float min, float max) const; bool minimal; /** * * @param name The name of the xml node * @param params The number of the attributes * @param ... const char * pairs that are in the format attribute_name, * attribute_value */ mxml_node_t *addparams(const char *name, unsigned int params, ...) const; /**@todo keep these numbers up to date*/ struct { int Major; /**. */ #include #include using namespace std; #include "../Misc/Util.h" #include "../Misc/Config.h" #include "InMgr.h" #include "AlsaEngine.h" AlsaEngine::AlsaEngine() :AudioOut() { audio.buffer = new short[synth->buffersize * 2]; name = "ALSA"; audio.handle = NULL; midi.handle = NULL; midi.alsaId = -1; midi.pThread = 0; } AlsaEngine::~AlsaEngine() { Stop(); delete[] audio.buffer; } void *AlsaEngine::_AudioThread(void *arg) { return (static_cast(arg))->AudioThread(); } void *AlsaEngine::AudioThread() { set_realtime(); return processAudio(); } bool AlsaEngine::Start() { return openAudio() && openMidi(); } void AlsaEngine::Stop() { if(getMidiEn()) setMidiEn(false); if(getAudioEn()) setAudioEn(false); snd_config_update_free_global(); } void AlsaEngine::setMidiEn(bool nval) { if(nval) openMidi(); else stopMidi(); } bool AlsaEngine::getMidiEn() const { return midi.handle; } void AlsaEngine::setAudioEn(bool nval) { if(nval) openAudio(); else stopAudio(); } bool AlsaEngine::getAudioEn() const { return audio.handle; } void *AlsaEngine::_MidiThread(void *arg) { return static_cast(arg)->MidiThread(); } void *AlsaEngine::MidiThread(void) { snd_seq_event_t *event; MidiEvent ev; set_realtime(); while(snd_seq_event_input(midi.handle, &event) > 0) { //ensure ev is empty ev.channel = 0; ev.num = 0; ev.value = 0; ev.type = 0; if(!event) continue; switch(event->type) { case SND_SEQ_EVENT_NOTEON: if(event->data.note.note) { ev.type = M_NOTE; ev.channel = event->data.note.channel; ev.num = event->data.note.note; ev.value = event->data.note.velocity; InMgr::getInstance().putEvent(ev); } break; case SND_SEQ_EVENT_NOTEOFF: ev.type = M_NOTE; ev.channel = event->data.note.channel; ev.num = event->data.note.note; ev.value = 0; InMgr::getInstance().putEvent(ev); break; case SND_SEQ_EVENT_KEYPRESS: ev.type = M_PRESSURE; ev.channel = event->data.note.channel; ev.num = event->data.note.note; ev.value = event->data.note.velocity; InMgr::getInstance().putEvent(ev); break; case SND_SEQ_EVENT_PITCHBEND: ev.type = M_CONTROLLER; ev.channel = event->data.control.channel; ev.num = C_pitchwheel; ev.value = event->data.control.value; InMgr::getInstance().putEvent(ev); break; case SND_SEQ_EVENT_CONTROLLER: ev.type = M_CONTROLLER; ev.channel = event->data.control.channel; ev.num = event->data.control.param; ev.value = event->data.control.value; InMgr::getInstance().putEvent(ev); break; case SND_SEQ_EVENT_PGMCHANGE: ev.type = M_PGMCHANGE; ev.channel = event->data.control.channel; ev.num = event->data.control.value; InMgr::getInstance().putEvent(ev); break; case SND_SEQ_EVENT_RESET: // reset to power-on state ev.type = M_CONTROLLER; ev.channel = event->data.control.channel; ev.num = C_resetallcontrollers; ev.value = 0; InMgr::getInstance().putEvent(ev); break; case SND_SEQ_EVENT_PORT_SUBSCRIBED: // ports connected if(true) cout << "Info, alsa midi port connected" << endl; break; case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: // ports disconnected if(true) cout << "Info, alsa midi port disconnected" << endl; break; case SND_SEQ_EVENT_SYSEX: // system exclusive case SND_SEQ_EVENT_SENSING: // midi device still there break; default: if(true) cout << "Info, other non-handled midi event, type: " << (int)event->type << endl; break; } snd_seq_free_event(event); } return NULL; } bool AlsaEngine::openMidi() { if(getMidiEn()) return true; int alsaport; midi.handle = NULL; if(snd_seq_open(&midi.handle, "default", SND_SEQ_OPEN_INPUT, 0) != 0) return false; snd_seq_set_client_name(midi.handle, "ZynAddSubFX"); alsaport = snd_seq_create_simple_port( midi.handle, "ZynAddSubFX", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_SYNTH); if(alsaport < 0) return false; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&midi.pThread, &attr, _MidiThread, this); return true; } void AlsaEngine::stopMidi() { if(!getMidiEn()) return; snd_seq_t *handle = midi.handle; if((NULL != midi.handle) && midi.pThread) pthread_cancel(midi.pThread); midi.handle = NULL; if(handle) snd_seq_close(handle); } short *AlsaEngine::interleave(const Stereo &smps) { /**\todo TODO fix repeated allocation*/ short *shortInterleaved = audio.buffer; memset(shortInterleaved, 0, bufferSize * 2 * sizeof(short)); int idx = 0; //possible off by one error here double scaled; for(int frame = 0; frame < bufferSize; ++frame) { // with a nod to libsamplerate ... scaled = smps.l[frame] * (8.0f * 0x10000000); shortInterleaved[idx++] = (short int)(lrint(scaled) >> 16); scaled = smps.r[frame] * (8.0f * 0x10000000); shortInterleaved[idx++] = (short int)(lrint(scaled) >> 16); } return shortInterleaved; } bool AlsaEngine::openAudio() { if(getAudioEn()) return true; int rc = 0; /* Open PCM device for playback. */ audio.handle = NULL; rc = snd_pcm_open(&audio.handle, "hw:0", SND_PCM_STREAM_PLAYBACK, 0); if(rc < 0) { fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc)); return false; } /* Allocate a hardware parameters object. */ snd_pcm_hw_params_alloca(&audio.params); /* Fill it in with default values. */ snd_pcm_hw_params_any(audio.handle, audio.params); /* Set the desired hardware parameters. */ /* Interleaved mode */ snd_pcm_hw_params_set_access(audio.handle, audio.params, SND_PCM_ACCESS_RW_INTERLEAVED); /* Signed 16-bit little-endian format */ snd_pcm_hw_params_set_format(audio.handle, audio.params, SND_PCM_FORMAT_S16_LE); /* Two channels (stereo) */ snd_pcm_hw_params_set_channels(audio.handle, audio.params, 2); audio.sampleRate = synth->samplerate; snd_pcm_hw_params_set_rate_near(audio.handle, audio.params, &audio.sampleRate, NULL); audio.frames = 512; snd_pcm_hw_params_set_period_size_near(audio.handle, audio.params, &audio.frames, NULL); audio.periods = 4; snd_pcm_hw_params_set_periods_near(audio.handle, audio.params, &audio.periods, NULL); /* Write the parameters to the driver */ rc = snd_pcm_hw_params(audio.handle, audio.params); if(rc < 0) { fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc)); return false; } /* Set buffer size (in frames). The resulting latency is given by */ /* latency = periodsize * periods / (rate * bytes_per_frame) */ snd_pcm_hw_params_set_buffer_size(audio.handle, audio.params, synth->buffersize); //snd_pcm_hw_params_get_period_size(audio.params, &audio.frames, NULL); //snd_pcm_hw_params_get_period_time(audio.params, &val, NULL); pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(&audio.pThread, &attr, _AudioThread, this); return true; } void AlsaEngine::stopAudio() { if(!getAudioEn()) return; snd_pcm_t *handle = audio.handle; audio.handle = NULL; pthread_join(audio.pThread, NULL); snd_pcm_drain(handle); if(snd_pcm_close(handle)) cout << "Error: in snd_pcm_close " << __LINE__ << ' ' << __FILE__ << endl; } void *AlsaEngine::processAudio() { while(audio.handle) { audio.buffer = interleave(getNext()); snd_pcm_t *handle = audio.handle; int rc = snd_pcm_writei(handle, audio.buffer, synth->buffersize); if(rc == -EPIPE) { /* EPIPE means underrun */ cerr << "underrun occurred" << endl; snd_pcm_prepare(handle); } else if(rc < 0) cerr << "error from writei: " << snd_strerror(rc) << endl; } return NULL; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h000066400000000000000000000040521247673406200245560ustar00rootroot00000000000000/* AlsaEngine.h Copyright 2009, Alan Calvert 2010, Mark McCurry This file is part of ZynAddSubFX, which 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. ZynAddSubFX 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 ZynAddSubFX. If not, see . */ #ifndef ALSA_ENGINE_H #define ALSA_ENGINE_H #include #include #include #include #include "AudioOut.h" #include "MidiIn.h" #include "OutMgr.h" #include "../Misc/Stereo.h" class AlsaEngine:public AudioOut, MidiIn { public: AlsaEngine(); ~AlsaEngine(); bool Start(); void Stop(); void setAudioEn(bool nval); bool getAudioEn() const; void setMidiEn(bool nval); bool getMidiEn() const; protected: void *AudioThread(); static void *_AudioThread(void *arg); void *MidiThread(); static void *_MidiThread(void *arg); private: bool openMidi(); void stopMidi(); bool openAudio(); void stopAudio(); short *interleave(const Stereo &smps); struct { std::string device; snd_seq_t *handle; int alsaId; pthread_t pThread; } midi; struct { snd_pcm_t *handle; snd_pcm_hw_params_t *params; unsigned int sampleRate; snd_pcm_uframes_t frames; unsigned int periods; short *buffer; pthread_t pThread; } audio; void *processAudio(); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp000066400000000000000000000026011247673406200246320ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AudioOut.h - Audio Output superclass Copyright (C) 2009-2010 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "SafeQueue.h" using namespace std; #include "OutMgr.h" #include "../Misc/Master.h" #include "AudioOut.h" AudioOut::AudioOut() :samplerate(synth->samplerate), bufferSize(synth->buffersize) {} AudioOut::~AudioOut() {} void AudioOut::setSamplerate(int _samplerate) { samplerate = _samplerate; } int AudioOut::getSampleRate() { return samplerate; } void AudioOut::setBufferSize(int _bufferSize) { bufferSize = _bufferSize; } const Stereo AudioOut::getNext() { return OutMgr::getInstance().tick(bufferSize); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h000066400000000000000000000033531247673406200243040ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AudioOut.h - Audio Output superclass Copyright (C) 2009-2010 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef AUDIO_OUT_H #define AUDIO_OUT_H #include "../Misc/Stereo.h" #include "../globals.h" #include "Engine.h" class AudioOut:public virtual Engine { public: AudioOut(); virtual ~AudioOut(); /**Sets the Sample Rate of this Output * (used for getNext()).*/ void setSamplerate(int _samplerate); /**Sets the Samples required per Out of this driver * not a realtime opperation */ int getSampleRate(); void setBufferSize(int _bufferSize); /**Sets the Frame Size for output*/ void bufferingSize(int nBuffering); int bufferingSize(); virtual void setAudioEn(bool nval) = 0; virtual bool getAudioEn() const = 0; protected: /**Get the next sample for output. * (has nsamples sampled at a rate of samplerate)*/ const Stereo getNext(); int samplerate; int bufferSize; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/CMakeLists.txt000066400000000000000000000021701247673406200251360ustar00rootroot00000000000000#Defaults: # - Wave Output (enabled with the record function) # - Null Output # - Null Output Running by default # - Managed with OutMgr set(zynaddsubfx_nio_SRCS WavEngine.cpp NulEngine.cpp AudioOut.cpp MidiIn.cpp OutMgr.cpp InMgr.cpp Engine.cpp EngineMgr.cpp Nio.cpp ) set(zynaddsubfx_nio_lib ) add_definitions(-DOUT_DEFAULT="${DefaultOutput}") add_definitions(-DIN_DEFAULT="${DefaultInput}") if(JackEnable) include_directories(${JACK_INCLUDE_DIR}) list(APPEND zynaddsubfx_nio_SRCS JackEngine.cpp) list(APPEND zynaddsubfx_nio_lib ${JACK_LIBRARIES}) endif(JackEnable) if(PaEnable) include_directories(${PORTAUDIO_INCLUDE_DIR}) list(APPEND zynaddsubfx_nio_SRCS PaEngine.cpp) list(APPEND zynaddsubfx_nio_lib ${PORTAUDIO_LIBRARIES}) endif(PaEnable) if(AlsaEnable) list(APPEND zynaddsubfx_nio_SRCS AlsaEngine.cpp) list(APPEND zynaddsubfx_nio_lib ${ASOUND_LIBRARY}) endif(AlsaEnable) if(OssEnable) list(APPEND zynaddsubfx_nio_SRCS OssEngine.cpp) endif(OssEnable) add_library(zynaddsubfx_nio STATIC ${zynaddsubfx_nio_SRCS} ) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp000066400000000000000000000015611247673406200243120ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Engine.cpp - Audio Driver base class Copyright (C) 2009-2010 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Engine.h" Engine::Engine() {} Engine::~Engine() {} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h000066400000000000000000000022711247673406200237560ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Engine.h - Audio Driver base class Copyright (C) 2009-2010 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ENGINE_H #define ENGINE_H #include /**Marker for input/output driver*/ class Engine { public: Engine(); virtual ~Engine(); /**Start the Driver with all capabilities * @return true on success*/ virtual bool Start() = 0; /**Completely stop the Driver*/ virtual void Stop() = 0; std::string name; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.cpp000066400000000000000000000076221247673406200247640ustar00rootroot00000000000000#include "EngineMgr.h" #include #include #include "Nio.h" #include "InMgr.h" #include "OutMgr.h" #include "AudioOut.h" #include "MidiIn.h" #include "NulEngine.h" #if OSS #include "OssEngine.h" #endif #if ALSA #include "AlsaEngine.h" #endif #if JACK #include "JackEngine.h" #endif #if PORTAUDIO #include "PaEngine.h" #endif using namespace std; EngineMgr &EngineMgr::getInstance() { static EngineMgr instance; return instance; } EngineMgr::EngineMgr() { Engine *defaultEng = new NulEngine(); //conditional compiling mess (but contained) engines.push_back(defaultEng); #if OSS engines.push_back(new OssEngine()); #endif #if ALSA engines.push_back(new AlsaEngine()); #endif #if JACK engines.push_back(new JackEngine()); #endif #if PORTAUDIO engines.push_back(new PaEngine()); #endif defaultOut = dynamic_cast(defaultEng); defaultIn = dynamic_cast(defaultEng); //Accept command line/compile time options if(!Nio::defaultSink.empty()) setOutDefault(Nio::defaultSink); if(!Nio::defaultSource.empty()) setInDefault(Nio::defaultSource); } EngineMgr::~EngineMgr() { for(list::iterator itr = engines.begin(); itr != engines.end(); ++itr) delete *itr; } Engine *EngineMgr::getEng(string name) { transform(name.begin(), name.end(), name.begin(), ::toupper); for(list::iterator itr = engines.begin(); itr != engines.end(); ++itr) if((*itr)->name == name) return *itr; return NULL; } bool EngineMgr::start() { bool expected = true; if(!(defaultOut && defaultIn)) { cerr << "ERROR: It looks like someone broke the Nio Output\n" << " Attempting to recover by defaulting to the\n" << " Null Engine." << endl; defaultOut = dynamic_cast(getEng("NULL")); defaultIn = dynamic_cast(getEng("NULL")); } OutMgr::getInstance(). currentOut = defaultOut; InMgr::getInstance(). current = defaultIn; //open up the default output(s) cout << "Starting Audio: " << defaultOut->name << endl; defaultOut->setAudioEn(true); if(defaultOut->getAudioEn()) cout << "Audio Started" << endl; else { expected = false; cerr << "ERROR: The default audio output failed to open!" << endl; OutMgr::getInstance(). currentOut = dynamic_cast(getEng("NULL")); OutMgr::getInstance(). currentOut->setAudioEn(true); } cout << "Starting MIDI: " << defaultIn->name << endl; defaultIn->setMidiEn(true); if(defaultIn->getMidiEn()) cout << "MIDI Started" << endl; else { //recover expected = false; cerr << "ERROR: The default MIDI input failed to open!" << endl; InMgr::getInstance(). current = dynamic_cast(getEng("NULL")); InMgr::getInstance(). current->setMidiEn(true); } //Show if expected drivers were booted return expected; } void EngineMgr::stop() { for(list::iterator itr = engines.begin(); itr != engines.end(); ++itr) (*itr)->Stop(); } bool EngineMgr::setInDefault(string name) { MidiIn *chosen; if((chosen = dynamic_cast(getEng(name)))) { //got the input defaultIn = chosen; return true; } //Warn user cerr << "Error: " << name << " is not a recognized MIDI input source" << endl; cerr << " Defaulting to the NULL input source" << endl; return false; } bool EngineMgr::setOutDefault(string name) { AudioOut *chosen; if((chosen = dynamic_cast(getEng(name)))) { //got the output defaultOut = chosen; return true; } //Warn user cerr << "Error: " << name << " is not a recognized audio backend" << endl; cerr << " Defaulting to the NULL audio backend" << endl; return false; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.h000066400000000000000000000015431247673406200244250ustar00rootroot00000000000000#ifndef ENGINE_MGR_H #define ENGINE_MGR_H #include #include #include "Engine.h" class MidiIn; class AudioOut; class OutMgr; /**Container/Owner of the long lived Engines*/ class EngineMgr { public: static EngineMgr &getInstance(); ~EngineMgr(); /**Gets requested engine * @param name case unsensitive name of engine * @return pointer to Engine or NULL */ Engine *getEng(std::string name); /**Start up defaults*/ bool start(); /**Stop all engines*/ void stop(); std::list engines; //return false on failure bool setInDefault(std::string name); bool setOutDefault(std::string name); //default I/O AudioOut *defaultOut; MidiIn *defaultIn; private: EngineMgr(); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp000066400000000000000000000063141247673406200241220ustar00rootroot00000000000000#include "InMgr.h" #include "MidiIn.h" #include "EngineMgr.h" #include "../Misc/Master.h" #include using namespace std; ostream &operator<<(ostream &out, const MidiEvent &ev) { switch(ev.type) { case M_NOTE: out << "MidiNote: note(" << ev.num << ")\n" << " channel(" << ev.channel << ")\n" << " velocity(" << ev.value << ")"; break; case M_CONTROLLER: out << "MidiCtl: controller(" << ev.num << ")\n" << " channel(" << ev.channel << ")\n" << " value(" << ev.value << ")"; break; case M_PGMCHANGE: out << "PgmChange: program(" << ev.num << ")\n" << " channel(" << ev.channel << ")"; break; } return out; } MidiEvent::MidiEvent() :channel(0), type(0), num(0), value(0), time(0) {} InMgr &InMgr::getInstance() { static InMgr instance; return instance; } InMgr::InMgr() :queue(100), master(Master::getInstance()) { current = NULL; work.init(PTHREAD_PROCESS_PRIVATE, 0); } InMgr::~InMgr() { //lets stop the consumer thread } void InMgr::putEvent(MidiEvent ev) { if(queue.push(ev)) //check for error cerr << "ERROR: Midi Ringbuffer is FULL" << endl; else work.post(); } void InMgr::flush(unsigned frameStart, unsigned frameStop) { MidiEvent ev; while(!work.trywait()) { queue.peak(ev); if(ev.time < (int)frameStart || ev.time > (int)frameStop) { //Back out of transaction work.post(); //printf("%d vs [%d..%d]\n",ev.time, frameStart, frameStop); break; } queue.pop(ev); //cout << ev << endl; switch(ev.type) { case M_NOTE: dump.dumpnote(ev.channel, ev.num, ev.value); if(ev.value) master.noteOn(ev.channel, ev.num, ev.value); else master.noteOff(ev.channel, ev.num); break; case M_CONTROLLER: dump.dumpcontroller(ev.channel, ev.num, ev.value); master.setController(ev.channel, ev.num, ev.value); break; case M_PGMCHANGE: master.setProgram(ev.channel, ev.num); break; case M_PRESSURE: master.polyphonicAftertouch(ev.channel, ev.num, ev.value); break; } } } bool InMgr::empty(void) const { int semvalue = work.getvalue(); return semvalue <= 0; } bool InMgr::setSource(string name) { MidiIn *src = getIn(name); if(!src) return false; if(current) current->setMidiEn(false); current = src; current->setMidiEn(true); bool success = current->getMidiEn(); //Keep system in a valid state (aka with a running driver) if(!success) (current = getIn("NULL"))->setMidiEn(true); return success; } string InMgr::getSource() const { if(current) return current->name; else return "ERROR"; } MidiIn *InMgr::getIn(string name) { EngineMgr &eng = EngineMgr::getInstance(); return dynamic_cast(eng.getEng(name)); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h000066400000000000000000000024241247673406200235650ustar00rootroot00000000000000#ifndef INMGR_H #define INMGR_H #include #include "ZynSema.h" #include "SafeQueue.h" enum midi_type { M_NOTE = 1, M_CONTROLLER = 2, M_PGMCHANGE = 3, M_PRESSURE = 4 }; //type=1 for note, type=2 for controller, type=3 for program change //type=4 for polyphonic aftertouch struct MidiEvent { MidiEvent(); int channel; //the midi channel for the event int type; //type=1 for note, type=2 for controller int num; //note, controller or program number int value; //velocity or controller value int time; //time offset of event (used only in jack->jack case at the moment) }; //super simple class to manage the inputs class InMgr { public: static InMgr &getInstance(); ~InMgr(); void putEvent(MidiEvent ev); /**Flush the Midi Queue*/ void flush(unsigned frameStart, unsigned frameStop); bool empty() const; bool setSource(std::string name); std::string getSource() const; friend class EngineMgr; private: InMgr(); class MidiIn *getIn(std::string name); SafeQueue queue; mutable ZynSema work; class MidiIn * current; /**the link to the rest of zyn*/ class Master & master; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp000066400000000000000000000255001247673406200251020ustar00rootroot00000000000000/* JackEngine.cpp Copyright 2009, Alan Calvert This file is part of yoshimi, which 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. yoshimi 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 yoshimi. If not, see . */ #include #include #include #include #include #include #include "Nio.h" #include "InMgr.h" #include "JackEngine.h" using namespace std; extern char *instance_name; JackEngine::JackEngine() :AudioOut(), jackClient(NULL) { name = "JACK"; audio.jackSamplerate = 0; audio.jackNframes = 0; for(int i = 0; i < 2; ++i) { audio.ports[i] = NULL; audio.portBuffs[i] = NULL; } midi.inport = NULL; midi.jack_sync = false; } bool JackEngine::connectServer(string server) { bool autostart_jack = true; if(jackClient) return true; string clientname = "zynaddsubfx"; string postfix = Nio::getPostfix(); if(!postfix.empty()) clientname += "_" + postfix; jack_status_t jackstatus; bool use_server_name = server.size() && server.compare("default") != 0; jack_options_t jopts = (jack_options_t) (((!instance_name && use_server_name) ? JackServerName : JackNullOption) | ((autostart_jack) ? JackNullOption : JackNoStartServer)); if(instance_name) jackClient = jack_client_open(instance_name, jopts, &jackstatus); else { if(use_server_name) jackClient = jack_client_open( clientname.c_str(), jopts, &jackstatus, server.c_str()); else jackClient = jack_client_open( clientname.c_str(), jopts, &jackstatus); } if(NULL != jackClient) return true; else cerr << "Error, failed to open jack client on server: " << server << " status " << jackstatus << endl; return false; } bool JackEngine::connectJack() { connectServer(""); if(NULL != jackClient) { setBufferSize(jack_get_buffer_size(jackClient)); int chk; jack_set_error_function(_errorCallback); jack_set_info_function(_infoCallback); if(jack_set_buffer_size_callback(jackClient, _bufferSizeCallback, this)) cerr << "Error setting the bufferSize callback" << endl; if((chk = jack_set_xrun_callback(jackClient, _xrunCallback, this))) cerr << "Error setting jack xrun callback" << endl; if(jack_set_process_callback(jackClient, _processCallback, this)) { cerr << "Error, JackEngine failed to set process callback" << endl; return false; } if(jack_activate(jackClient)) { cerr << "Error, failed to activate jack client" << endl; return false; } return true; } else cerr << "Error, NULL jackClient through Start()" << endl; return false; } void JackEngine::disconnectJack() { if(jackClient) { cout << "Deactivating and closing JACK client" << endl; jack_deactivate(jackClient); jack_client_close(jackClient); jackClient = NULL; } } bool JackEngine::Start() { return openMidi() && openAudio(); } void JackEngine::Stop() { stopMidi(); stopAudio(); } void JackEngine::setMidiEn(bool nval) { if(nval) openMidi(); else stopMidi(); } bool JackEngine::getMidiEn() const { return midi.inport; } void JackEngine::setAudioEn(bool nval) { if(nval) openAudio(); else stopAudio(); } bool JackEngine::getAudioEn() const { return audio.ports[0]; } bool JackEngine::openAudio() { if(getAudioEn()) return true; if(!getMidiEn()) if(!connectJack()) return false; const char *portnames[] = { "out_1", "out_2" }; for(int port = 0; port < 2; ++port) audio.ports[port] = jack_port_register( jackClient, portnames[port], JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput | JackPortIsTerminal, 0); if((NULL != audio.ports[0]) && (NULL != audio.ports[1])) { audio.jackSamplerate = jack_get_sample_rate(jackClient); audio.jackNframes = jack_get_buffer_size(jackClient); samplerate = audio.jackSamplerate; bufferSize = audio.jackNframes; //Attempt to autoConnect when specified if(Nio::autoConnect) { const char **outPorts = jack_get_ports( jackClient, NULL, NULL, JackPortIsPhysical | JackPortIsInput); if(outPorts != NULL) { //Verify that stereo is available assert(outPorts[0]); assert(outPorts[1]); //Connect to physical outputs jack_connect(jackClient, jack_port_name( audio.ports[0]), outPorts[0]); jack_connect(jackClient, jack_port_name( audio.ports[1]), outPorts[1]); } else cerr << "Warning, No outputs to autoconnect to" << endl; } midi.jack_sync = true; return true; } else cerr << "Error, failed to register jack audio ports" << endl; midi.jack_sync = false; return false; } void JackEngine::stopAudio() { for(int i = 0; i < 2; ++i) { jack_port_t *port = audio.ports[i]; audio.ports[i] = NULL; if(NULL != port) jack_port_unregister(jackClient, port); } midi.jack_sync = false; if(!getMidiEn()) disconnectJack(); } bool JackEngine::openMidi() { if(getMidiEn()) return true; if(!getAudioEn()) if(!connectJack()) return false; midi.inport = jack_port_register(jackClient, "midi_input", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput | JackPortIsTerminal, 0); return midi.inport; } void JackEngine::stopMidi() { jack_port_t *port = midi.inport; midi.inport = NULL; if(port) jack_port_unregister(jackClient, port); if(!getAudioEn()) disconnectJack(); } int JackEngine::clientId() { if(NULL != jackClient) return (long)jack_client_thread_id(jackClient); else return -1; } string JackEngine::clientName() { if(NULL != jackClient) return string(jack_get_client_name(jackClient)); else cerr << "Error, clientName() with null jackClient" << endl; return string("Oh, yoshimi :-("); } int JackEngine::_processCallback(jack_nframes_t nframes, void *arg) { return static_cast(arg)->processCallback(nframes); } int JackEngine::processCallback(jack_nframes_t nframes) { bool okaudio = true; handleMidi(nframes); if((NULL != audio.ports[0]) && (NULL != audio.ports[1])) okaudio = processAudio(nframes); return okaudio ? 0 : -1; } bool JackEngine::processAudio(jack_nframes_t nframes) { for(int port = 0; port < 2; ++port) { audio.portBuffs[port] = (jsample_t *)jack_port_get_buffer(audio.ports[port], nframes); if(NULL == audio.portBuffs[port]) { cerr << "Error, failed to get jack audio port buffer: " << port << endl; return false; } } Stereo smp = getNext(); //Assumes size of smp.l == nframes memcpy(audio.portBuffs[0], smp.l, bufferSize * sizeof(float)); memcpy(audio.portBuffs[1], smp.r, bufferSize * sizeof(float)); return true; } int JackEngine::_xrunCallback(void *) { cerr << "Jack reports xrun" << endl; return 0; } void JackEngine::_errorCallback(const char *msg) { cerr << "Jack reports error: " << msg << endl; } void JackEngine::_infoCallback(const char *msg) { cerr << "Jack info message: " << msg << endl; } int JackEngine::_bufferSizeCallback(jack_nframes_t nframes, void *arg) { return static_cast(arg)->bufferSizeCallback(nframes); } int JackEngine::bufferSizeCallback(jack_nframes_t nframes) { cerr << "Jack buffer resized" << endl; setBufferSize(nframes); return 0; } void JackEngine::handleMidi(unsigned long frames) { if(!midi.inport) return; void *midi_buf = jack_port_get_buffer(midi.inport, frames); jack_midi_event_t jack_midi_event; jack_nframes_t event_index = 0; unsigned char *midi_data; unsigned char type; while(jack_midi_event_get(&jack_midi_event, midi_buf, event_index++) == 0) { MidiEvent ev; midi_data = jack_midi_event.buffer; type = midi_data[0] & 0xF0; ev.channel = midi_data[0] & 0x0F; ev.time = midi.jack_sync ? jack_midi_event.time : 0; switch(type) { case 0x80: /* note-off */ ev.type = M_NOTE; ev.num = midi_data[1]; ev.value = 0; InMgr::getInstance().putEvent(ev); break; case 0x90: /* note-on */ ev.type = M_NOTE; ev.num = midi_data[1]; ev.value = midi_data[2]; InMgr::getInstance().putEvent(ev); break; case 0xA0: /* pressure, aftertouch */ ev.type = M_PRESSURE; ev.num = midi_data[1]; ev.value = midi_data[2]; InMgr::getInstance().putEvent(ev); break; case 0xB0: /* controller */ ev.type = M_CONTROLLER; ev.num = midi_data[1]; ev.value = midi_data[2]; InMgr::getInstance().putEvent(ev); break; case 0xC0: /* program change */ ev.type = M_PGMCHANGE; ev.num = midi_data[1]; ev.value = 0; InMgr::getInstance().putEvent(ev); break; case 0xE0: /* pitch bend */ ev.type = M_CONTROLLER; ev.num = C_pitchwheel; ev.value = ((midi_data[2] << 7) | midi_data[1]) - 8192; InMgr::getInstance().putEvent(ev); break; /* XXX TODO: handle MSB/LSB controllers and RPNs and NRPNs */ } } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h000066400000000000000000000046361247673406200245560ustar00rootroot00000000000000/* JackEngine.h Copyright 2009, Alan Calvert This file is part of yoshimi, which 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. yoshimi 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 yoshimi. If not, see . */ #ifndef JACK_ENGINE_H #define JACK_ENGINE_H #include #include #include #include #include #include "MidiIn.h" #include "AudioOut.h" typedef jack_default_audio_sample_t jsample_t; class JackEngine:public AudioOut, MidiIn { public: JackEngine(); ~JackEngine() { } bool Start(); void Stop(); void setMidiEn(bool nval); bool getMidiEn() const; void setAudioEn(bool nval); bool getAudioEn() const; int getBuffersize() { return audio.jackNframes; } std::string clientName(); int clientId(); protected: int processCallback(jack_nframes_t nframes); static int _processCallback(jack_nframes_t nframes, void *arg); int bufferSizeCallback(jack_nframes_t nframes); static int _bufferSizeCallback(jack_nframes_t nframes, void *arg); static void _errorCallback(const char *msg); static void _infoCallback(const char *msg); static int _xrunCallback(void *arg); private: bool connectServer(std::string server); bool connectJack(); void disconnectJack(); bool openAudio(); void stopAudio(); bool processAudio(jack_nframes_t nframes); bool openMidi(); void stopMidi(); jack_client_t *jackClient; struct audio { unsigned int jackSamplerate; unsigned int jackNframes; jack_port_t *ports[2]; jsample_t *portBuffs[2]; } audio; struct midi { jack_port_t *inport; bool jack_sync; } midi; void handleMidi(unsigned long frames); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp000066400000000000000000000050031247673406200242510ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer MidiIn.C - This class is inherited by all the Midi input classes Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "MidiIn.h" #include "../globals.h" #include "InMgr.h" void MidiIn::midiProcess(unsigned char head, unsigned char num, unsigned char value) { MidiEvent ev; unsigned char chan = head & 0x0f; switch(head & 0xf0) { case 0x80: //Note Off ev.type = M_NOTE; ev.channel = chan; ev.num = num; ev.value = 0; InMgr::getInstance().putEvent(ev); break; case 0x90: //Note On ev.type = M_NOTE; ev.channel = chan; ev.num = num; ev.value = value; InMgr::getInstance().putEvent(ev); break; case 0xA0: /* pressure, aftertouch */ ev.type = M_PRESSURE; ev.channel = chan; ev.num = num; ev.value = value; InMgr::getInstance().putEvent(ev); break; case 0xb0: //Controller ev.type = M_CONTROLLER; ev.channel = chan; ev.num = num; ev.value = value; InMgr::getInstance().putEvent(ev); break; case 0xc0: //Program Change ev.type = M_PGMCHANGE; ev.channel = chan; ev.num = num; ev.value = 0; InMgr::getInstance().putEvent(ev); break; case 0xe0: //Pitch Wheel ev.type = M_CONTROLLER; ev.channel = chan; ev.num = C_pitchwheel; ev.value = (num + value * (int) 128) - 8192; InMgr::getInstance().putEvent(ev); break; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h000066400000000000000000000026541247673406200237270ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer MidiIn.h - This class is inherited by all the Midi input classes Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2009-2010 Mark McCurry Author: Nasca Octavian Paula Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef MIDI_IN_H #define MIDI_IN_H #include "Engine.h" /**This class is inherited by all the Midi input classes*/ class MidiIn:public virtual Engine { public: /**Enables or disables driver based upon value*/ virtual void setMidiEn(bool nval) = 0; /**Returns if driver is initialized*/ virtual bool getMidiEn() const = 0; static void midiProcess(unsigned char head, unsigned char num, unsigned char value); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.cpp000066400000000000000000000050201247673406200236240ustar00rootroot00000000000000#include "Nio.h" #include "OutMgr.h" #include "InMgr.h" #include "EngineMgr.h" #include "MidiIn.h" #include "AudioOut.h" #include "WavEngine.h" #include #include using std::string; using std::set; using std::cerr; using std::endl; InMgr *in = NULL; OutMgr *out = NULL; EngineMgr *eng = NULL; string postfix; bool Nio::autoConnect = false; string Nio::defaultSource = IN_DEFAULT; string Nio::defaultSink = OUT_DEFAULT; void Nio::init(void) { in = &InMgr::getInstance(); //Enable input wrapper out = &OutMgr::getInstance(); //Initialize the Output Systems eng = &EngineMgr::getInstance(); //Initialize The Engines } bool Nio::start() { init(); return eng->start(); } void Nio::stop() { eng->stop(); } void Nio::setDefaultSource(string name) { std::transform(name.begin(), name.end(), name.begin(), ::toupper); defaultSource = name; } void Nio::setDefaultSink(string name) { std::transform(name.begin(), name.end(), name.begin(), ::toupper); defaultSink = name; } bool Nio::setSource(string name) { return in->setSource(name); } bool Nio::setSink(string name) { return out->setSink(name); } void Nio::setPostfix(std::string post) { postfix = post; } std::string Nio::getPostfix(void) { return postfix; } set Nio::getSources(void) { set sources; for(std::list::iterator itr = eng->engines.begin(); itr != eng->engines.end(); ++itr) if(dynamic_cast(*itr)) sources.insert((*itr)->name); return sources; } set Nio::getSinks(void) { set sinks; for(std::list::iterator itr = eng->engines.begin(); itr != eng->engines.end(); ++itr) if(dynamic_cast(*itr)) sinks.insert((*itr)->name); return sinks; } string Nio::getSource() { return in->getSource(); } string Nio::getSink() { return out->getSink(); } #if JACK #include void Nio::preferedSampleRate(unsigned &rate) { jack_client_t *client = jack_client_open("temp-client", JackNoStartServer, 0); if(client) { rate = jack_get_sample_rate(client); jack_client_close(client); } } #else void Nio::preferedSampleRate(unsigned &) {} #endif void Nio::waveNew(class WavFile *wave) { out->wave->newFile(wave); } void Nio::waveStart(void) { out->wave->Start(); } void Nio::waveStop(void) { out->wave->Stop(); } void Nio::waveEnd(void) { out->wave->destroyFile(); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.h000066400000000000000000000017271247673406200233030ustar00rootroot00000000000000#ifndef NIO_H #define NIO_H #include #include class WavFile; /**Interface to Nio Subsystem * * Should be only externally included header */ namespace Nio { void init(void); bool start(void); void stop(void); void setDefaultSource(std::string name); void setDefaultSink(std::string name); bool setSource(std::string name); bool setSink(std::string name); void setPostfix(std::string post); std::string getPostfix(void); std::set getSources(void); std::set getSinks(void); std::string getSource(void); std::string getSink(void); //Get the prefered sample rate from jack (if running) void preferedSampleRate(unsigned &rate); //Wave writing void waveNew(class WavFile *wave); void waveStart(void); void waveStop(void); void waveEnd(void); extern bool autoConnect; extern std::string defaultSource; extern std::string defaultSink; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp000066400000000000000000000057311247673406200247740ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer OSSaudiooutput.C - Audio output for Open Sound System Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "NulEngine.h" #include "../globals.h" #include #include using namespace std; NulEngine::NulEngine() :AudioOut(), pThread(NULL) { name = "NULL"; playing_until.tv_sec = 0; playing_until.tv_usec = 0; } void *NulEngine::_AudioThread(void *arg) { return (static_cast(arg))->AudioThread(); } void *NulEngine::AudioThread() { while(pThread) { getNext(); struct timeval now; int remaining = 0; gettimeofday(&now, NULL); if((playing_until.tv_usec == 0) && (playing_until.tv_sec == 0)) { playing_until.tv_usec = now.tv_usec; playing_until.tv_sec = now.tv_sec; } else { remaining = (playing_until.tv_usec - now.tv_usec) + (playing_until.tv_sec - now.tv_sec) * 1000000; if(remaining > 10000) //Don't sleep() less than 10ms. //This will add latency... usleep(remaining - 10000); if(remaining < 0) cerr << "WARNING - too late" << endl; } playing_until.tv_usec += synth->buffersize * 1000000 / synth->samplerate; if(remaining < 0) playing_until.tv_usec -= remaining; playing_until.tv_sec += playing_until.tv_usec / 1000000; playing_until.tv_usec %= 1000000; } return NULL; } NulEngine::~NulEngine() {} bool NulEngine::Start() { setAudioEn(true); return getAudioEn(); } void NulEngine::Stop() { setAudioEn(false); } void NulEngine::setAudioEn(bool nval) { if(nval) { if(!getAudioEn()) { pthread_t *thread = new pthread_t; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pThread = thread; pthread_create(pThread, &attr, _AudioThread, this); } } else if(getAudioEn()) { pthread_t *thread = pThread; pThread = NULL; pthread_join(*thread, NULL); delete thread; } } bool NulEngine::getAudioEn() const { return pThread; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h000066400000000000000000000026641247673406200244430ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer NulEngine.h - Dummy In/Out driver Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef NUL_ENGINE_H #define NUL_ENGINE_H #include #include #include "../globals.h" #include "AudioOut.h" #include "MidiIn.h" class NulEngine:public AudioOut, MidiIn { public: NulEngine(); ~NulEngine(); bool Start(); void Stop(); void setAudioEn(bool nval); bool getAudioEn() const; void setMidiEn(bool) {} bool getMidiEn() const {return true; } protected: void *AudioThread(); static void *_AudioThread(void *arg); private: struct timeval playing_until; pthread_t *pThread; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp000066400000000000000000000151151247673406200247770ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer OSSaudiooutput.C - Audio output for Open Sound System Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "OssEngine.h" #include "../Misc/Util.h" #include "../globals.h" #include #include #include #include #include #include #include #include #include #include "InMgr.h" using namespace std; OssEngine::OssEngine() :AudioOut(), engThread(NULL) { name = "OSS"; midi.handle = -1; audio.handle = -1; audio.smps = new short[synth->buffersize * 2]; memset(audio.smps, 0, synth->bufferbytes); } OssEngine::~OssEngine() { Stop(); delete [] audio.smps; } bool OssEngine::openAudio() { if(audio.handle != -1) return true; //already open int snd_bitsize = 16; int snd_fragment = 0x00080009; //fragment size (?); int snd_stereo = 1; //stereo; int snd_format = AFMT_S16_LE; int snd_samplerate = synth->samplerate; const char *device = config.cfg.LinuxOSSWaveOutDev; if(getenv("DSP_DEVICE")) device = getenv("DSP_DEVICE"); audio.handle = open(device, O_WRONLY, 0); if(audio.handle == -1) { cerr << "ERROR - I can't open the " << device << '.' << endl; return false; } ioctl(audio.handle, SNDCTL_DSP_RESET, NULL); ioctl(audio.handle, SNDCTL_DSP_SETFMT, &snd_format); ioctl(audio.handle, SNDCTL_DSP_STEREO, &snd_stereo); ioctl(audio.handle, SNDCTL_DSP_SPEED, &snd_samplerate); ioctl(audio.handle, SNDCTL_DSP_SAMPLESIZE, &snd_bitsize); ioctl(audio.handle, SNDCTL_DSP_SETFRAGMENT, &snd_fragment); if(!getMidiEn()) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); engThread = new pthread_t; pthread_create(engThread, &attr, _thread, this); } return true; } void OssEngine::stopAudio() { int handle = audio.handle; if(handle == -1) //already closed return; audio.handle = -1; if(!getMidiEn() && engThread) pthread_join(*engThread, NULL); delete engThread; engThread = NULL; close(handle); } bool OssEngine::Start() { bool good = true; if(!openAudio()) { cerr << "Failed to open OSS audio" << endl; good = false; } if(!openMidi()) { cerr << "Failed to open OSS midi" << endl; good = false; } return good; } void OssEngine::Stop() { stopAudio(); stopMidi(); } void OssEngine::setMidiEn(bool nval) { if(nval) openMidi(); else stopMidi(); } bool OssEngine::getMidiEn() const { return midi.handle != -1; } void OssEngine::setAudioEn(bool nval) { if(nval) openAudio(); else stopAudio(); } bool OssEngine::getAudioEn() const { return audio.handle != -1; } bool OssEngine::openMidi() { int handle = midi.handle; if(handle != -1) return true; //already open handle = open(config.cfg.LinuxOSSSeqInDev, O_RDONLY, 0); if(-1 == handle) return false; midi.handle = handle; if(!getAudioEn()) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); engThread = new pthread_t; pthread_create(engThread, &attr, _thread, this); } return true; } void OssEngine::stopMidi() { int handle = midi.handle; if(handle == -1) //already closed return; midi.handle = -1; if(!getAudioEn() && engThread) { pthread_join(*engThread, NULL); delete engThread; engThread = NULL; } close(handle); } void *OssEngine::_thread(void *arg) { return (static_cast(arg))->thread(); } void *OssEngine::thread() { unsigned char tmp[4] = {0, 0, 0, 0}; set_realtime(); while(getAudioEn() || getMidiEn()) { if(getAudioEn()) { const Stereo smps = getNext(); float l, r; for(int i = 0; i < synth->buffersize; ++i) { l = smps.l[i]; r = smps.r[i]; if(l < -1.0f) l = -1.0f; else if(l > 1.0f) l = 1.0f; if(r < -1.0f) r = -1.0f; else if(r > 1.0f) r = 1.0f; audio.smps[i * 2] = (short int) (l * 32767.0f); audio.smps[i * 2 + 1] = (short int) (r * 32767.0f); } int handle = audio.handle; if(handle != -1) write(handle, audio.smps, synth->buffersize * 4); // *2 because is 16 bit, again * 2 because is stereo else break; } //Collect up to 30 midi events for(int k = 0; k < 30 && getMidiEn(); ++k) { static char escaped; memset(tmp, 0, 4); if(escaped) { tmp[0] = escaped; escaped = 0; } else { getMidi(tmp); if(!(tmp[0] & 0x80)) continue; } getMidi(tmp + 1); if(tmp[1] & 0x80) { escaped = tmp[1]; tmp[1] = 0; } else { getMidi(tmp + 2); if(tmp[2] & 0x80) { escaped = tmp[2]; tmp[2] = 0; } else { getMidi(tmp + 3); if(tmp[3] & 0x80) { escaped = tmp[3]; tmp[3] = 0; } } } midiProcess(tmp[0], tmp[1], tmp[2]); } } pthread_exit(NULL); return NULL; } void OssEngine::getMidi(unsigned char *midiPtr) { read(midi.handle, midiPtr, 1); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h000066400000000000000000000034531247673406200244460ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer OSSaudiooutput.h - Audio output for Open Sound System Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef OSS_ENGINE_H #define OSS_ENGINE_H #include #include "../globals.h" #include "AudioOut.h" #include "MidiIn.h" class OssEngine:public AudioOut, MidiIn { public: OssEngine(); ~OssEngine(); bool Start(); void Stop(); void setAudioEn(bool nval); bool getAudioEn() const; void setMidiEn(bool nval); bool getMidiEn() const; protected: void *thread(); static void *_thread(void *arg); private: pthread_t *engThread; //Audio bool openAudio(); void stopAudio(); struct audio { int handle; short int *smps; //Samples to be sent to soundcard bool en; } audio; //Midi bool openMidi(); void stopMidi(); void getMidi(unsigned char *midiPtr); struct midi { int handle; bool en; bool run; } midi; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.cpp000066400000000000000000000111661247673406200243240ustar00rootroot00000000000000#include "OutMgr.h" #include #include #include #include "AudioOut.h" #include "Engine.h" #include "EngineMgr.h" #include "InMgr.h" #include "WavEngine.h" #include "../Misc/Master.h" #include "../Misc/Util.h" //for set_realtime() using namespace std; OutMgr &OutMgr::getInstance() { static OutMgr instance; return instance; } OutMgr::OutMgr() :wave(new WavEngine()), priBuf(new float[4096], new float[4096]), priBuffCurrent(priBuf), master(Master::getInstance()) { currentOut = NULL; stales = 0; master = Master::getInstance(); //init samples outr = new float[synth->buffersize]; outl = new float[synth->buffersize]; memset(outl, 0, synth->bufferbytes); memset(outr, 0, synth->bufferbytes); } OutMgr::~OutMgr() { delete wave; delete [] priBuf.l; delete [] priBuf.r; delete [] outr; delete [] outl; } /* Sequence of a tick * 1) Lets remove old/stale samples * 2) Apply appliciable midi events * 3) Lets see if we need to generate samples * 4) Lets generate some * 5) Goto 2 if more are needed * 6) Lets return those samples to the primary and secondary outputs * 7) Lets wait for another tick */ const Stereo OutMgr::tick(unsigned int frameSize) { InMgr &midi = InMgr::getInstance(); //SysEv->execute(); removeStaleSmps(); int i=0; while(frameSize > storedSmps()) { if(!midi.empty()) { pthread_mutex_lock(&(master.mutex)); midi.flush(i*synth->buffersize, (i+1)*synth->buffersize); pthread_mutex_unlock(&(master.mutex)); } pthread_mutex_lock(&(master.mutex)); master.AudioOut(outl, outr); pthread_mutex_unlock(&(master.mutex)); addSmps(outl, outr); i++; } stales = frameSize; return priBuf; } AudioOut *OutMgr::getOut(string name) { return dynamic_cast(EngineMgr::getInstance().getEng(name)); } string OutMgr::getDriver() const { return currentOut->name; } bool OutMgr::setSink(string name) { AudioOut *sink = getOut(name); if(!sink) return false; if(currentOut) currentOut->setAudioEn(false); currentOut = sink; currentOut->setAudioEn(true); bool success = currentOut->getAudioEn(); //Keep system in a valid state (aka with a running driver) if(!success) (currentOut = getOut("NULL"))->setAudioEn(true); return success; } string OutMgr::getSink() const { if(currentOut) return currentOut->name; else { cerr << "BUG: No current output in OutMgr " << __LINE__ << endl; return "ERROR"; } return "ERROR"; } //perform a cheap linear interpolation for resampling //This will result in some distortion at frame boundries //returns number of samples produced static size_t resample(float *dest, const float *src, float s_in, float s_out, size_t elms) { size_t out_elms = elms * s_out / s_in; float r_pos = 0.0f; for(int i = 0; i < (int)out_elms; ++i, r_pos += s_in / s_out) dest[i] = interpolate(src, elms, r_pos); return out_elms; } void OutMgr::addSmps(float *l, float *r) { //allow wave file to syphon off stream wave->push(Stereo(l, r), synth->buffersize); const int s_out = currentOut->getSampleRate(), s_sys = synth->samplerate; if(s_out != s_sys) { //we need to resample const size_t steps = resample(priBuffCurrent.l, l, s_sys, s_out, synth->buffersize); resample(priBuffCurrent.r, r, s_sys, s_out, synth->buffersize); priBuffCurrent.l += steps; priBuffCurrent.r += steps; } else { //just copy the samples memcpy(priBuffCurrent.l, l, synth->bufferbytes); memcpy(priBuffCurrent.r, r, synth->bufferbytes); priBuffCurrent.l += synth->buffersize; priBuffCurrent.r += synth->buffersize; } } void OutMgr::removeStaleSmps() { if(!stales) return; const int leftover = storedSmps() - stales; assert(leftover > -1); //leftover samples [seen at very low latencies] if(leftover) { memmove(priBuf.l, priBuffCurrent.l - leftover, leftover * sizeof(float)); memmove(priBuf.r, priBuffCurrent.r - leftover, leftover * sizeof(float)); priBuffCurrent.l = priBuf.l + leftover; priBuffCurrent.r = priBuf.r + leftover; } else priBuffCurrent = priBuf; stales = 0; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.h000066400000000000000000000031411247673406200237630ustar00rootroot00000000000000#ifndef OUTMGR_H #define OUTMGR_H #include "../Misc/Stereo.h" #include #include #include #include class AudioOut; class OutMgr { public: static OutMgr &getInstance(); ~OutMgr(); /**Execute a tick*/ const Stereo tick(unsigned int frameSize); /**Request a new set of samples * @param n number of requested samples (defaults to 1) * @return -1 for locking issues 0 for valid request*/ void requestSamples(unsigned int n = 1); /**Gets requested driver * @param name case unsensitive name of driver * @return pointer to Audio Out or NULL */ AudioOut *getOut(std::string name); /**Gets the name of the first running driver * Deprecated * @return if no running output, "" is returned */ std::string getDriver() const; bool setSink(std::string name); std::string getSink() const; class WavEngine * wave; /** priBuf; //buffer for primary drivers Stereo priBuffCurrent; //current array accessor float *outl; float *outr; class Master & master; int stales; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp000066400000000000000000000057401247673406200245760ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PaEngine.cpp - Audio output for PortAudio Copyright (C) 2002 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "PaEngine.h" #include using namespace std; PaEngine::PaEngine() :stream(NULL) { name = "PA"; } PaEngine::~PaEngine() { Stop(); } bool PaEngine::Start() { if(getAudioEn()) return true; Pa_Initialize(); PaStreamParameters outputParameters; outputParameters.device = Pa_GetDefaultOutputDevice(); if(outputParameters.device == paNoDevice) { cerr << "Error: No default output device." << endl; Pa_Terminate(); return false; } outputParameters.channelCount = 2; /* stereo output */ outputParameters.sampleFormat = paFloat32; /* 32 bit floating point output */ outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency; outputParameters.hostApiSpecificStreamInfo = NULL; Pa_OpenStream(&stream, NULL, &outputParameters, synth->samplerate, synth->buffersize, 0, PAprocess, (void *) this); Pa_StartStream(stream); return true; } void PaEngine::setAudioEn(bool nval) { if(nval) Start(); else Stop(); } bool PaEngine::getAudioEn() const { return stream; } int PaEngine::PAprocess(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo *outTime, PaStreamCallbackFlags flags, void *userData) { (void) inputBuffer; (void) outTime; (void) flags; return static_cast(userData)->process((float *) outputBuffer, framesPerBuffer); } int PaEngine::process(float *out, unsigned long framesPerBuffer) { const Stereo smp = getNext(); for(unsigned i = 0; i < framesPerBuffer; ++i) { *out++ = smp.l[i]; *out++ = smp.r[i]; } return 0; } void PaEngine::Stop() { if(!getAudioEn()) return; Pa_StopStream(stream); Pa_CloseStream(stream); stream = NULL; Pa_Terminate(); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h000066400000000000000000000031411247673406200242340ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PAaudiooutput.h - Audio output for PortAudio Copyright (C) 2002 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PA_ENGINE_H #define PA_ENGINE_H #include #include "../globals.h" #include "AudioOut.h" class PaEngine:public AudioOut { public: PaEngine(); ~PaEngine(); bool Start(); void Stop(); void setAudioEn(bool nval); bool getAudioEn() const; protected: static int PAprocess(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo *outTime, PaStreamCallbackFlags flags, void *userData); int process(float *out, unsigned long framesPerBuffer); private: PaStream *stream; }; void PAfinish(); #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp000066400000000000000000000030311247673406200247620ustar00rootroot00000000000000 template SafeQueue::SafeQueue(size_t maxlen) :writePtr(0), readPtr(0), bufSize(maxlen) { w_space.init(PTHREAD_PROCESS_PRIVATE, maxlen - 1); r_space.init(PTHREAD_PROCESS_PRIVATE, 0); buffer = new T[maxlen]; } template SafeQueue::~SafeQueue() { delete [] buffer; } template unsigned int SafeQueue::size() const { return rSpace(); } template unsigned int SafeQueue::rSpace() const { return r_space.getvalue(); } template unsigned int SafeQueue::wSpace() const { return w_space.getvalue(); } template int SafeQueue::push(const T &in) { if(!wSpace()) return -1; //ok, there is space to write size_t w = (writePtr + 1) % bufSize; buffer[w] = in; writePtr = w; //adjust ranges w_space.wait(); //guaranteed not to wait r_space.post(); return 0; } template int SafeQueue::peak(T &out) const { if(!rSpace()) return -1; //ok, there is space to read size_t r = (readPtr + 1) % bufSize; out = buffer[r]; return 0; } template int SafeQueue::pop(T &out) { if(!rSpace()) return -1; //ok, there is space to read size_t r = (readPtr + 1) % bufSize; out = buffer[r]; readPtr = r; //adjust ranges r_space.wait(); //guaranteed not to wait w_space.post(); return 0; } template void SafeQueue::clear() { //thread unsafe while(!r_space.trywait()) w_space.post(); readPtr = writePtr; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h000066400000000000000000000017071247673406200244370ustar00rootroot00000000000000 #ifndef SAFEQUEUE_H #define SAFEQUEUE_H #include #include "ZynSema.h" #include #include /** * C++ thread safe lockless queue * Based off of jack's ringbuffer*/ template class SafeQueue { public: SafeQueue(size_t maxlen); ~SafeQueue(); /**Return read size*/ unsigned int size() const; /**Returns 0 for normal * Returns -1 on error*/ int push(const T &in); int peak(T &out) const; int pop(T &out); //clears reading space void clear(); private: unsigned int wSpace() const; unsigned int rSpace() const; //write space mutable ZynSema w_space; //read space mutable ZynSema r_space; //next writing spot size_t writePtr; //next reading spot size_t readPtr; const size_t bufSize; T *buffer; }; #include "SafeQueue.cpp" #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp000066400000000000000000000060721247673406200247720ustar00rootroot00000000000000/* Copyright (C) 2006 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "WavEngine.h" #include #include #include #include "../Misc/WavFile.h" #include "../Misc/Util.h" using namespace std; WavEngine::WavEngine() :AudioOut(), file(NULL), buffer(synth->samplerate * 4), pThread(NULL) { work.init(PTHREAD_PROCESS_PRIVATE, 0); } WavEngine::~WavEngine() { Stop(); destroyFile(); } bool WavEngine::openAudio() { return file && file->good(); } bool WavEngine::Start() { if(pThread) return true; pThread = new pthread_t; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(pThread, &attr, _AudioThread, this); return true; } void WavEngine::Stop() { if(!pThread) return; pthread_t *tmp = pThread; pThread = NULL; work.post(); pthread_join(*tmp, NULL); delete pThread; } void WavEngine::push(Stereo smps, size_t len) { if(!pThread) return; //copy the input [overflow when needed] for(size_t i = 0; i < len; ++i) { buffer.push(*smps.l++); buffer.push(*smps.r++); } work.post(); } void WavEngine::newFile(WavFile *_file) { //ensure system is clean destroyFile(); file = _file; //check state if(!file->good()) cerr << "ERROR: WavEngine handed bad file output WavEngine::newFile()" << endl; } void WavEngine::destroyFile() { if(file) delete file; file = NULL; } void *WavEngine::_AudioThread(void *arg) { return (static_cast(arg))->AudioThread(); } void *WavEngine::AudioThread() { short *recordbuf_16bit = new short[2 * synth->buffersize]; while(!work.wait() && pThread) { for(int i = 0; i < synth->buffersize; ++i) { float left = 0.0f, right = 0.0f; buffer.pop(left); buffer.pop(right); recordbuf_16bit[2 * i] = limit((int)(left * 32767.0f), -32768, 32767); recordbuf_16bit[2 * i + 1] = limit((int)(right * 32767.0f), -32768, 32767); } file->writeStereoSamples(synth->buffersize, recordbuf_16bit); } delete[] recordbuf_16bit; return NULL; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h000066400000000000000000000030751247673406200244370ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer WavEngine.h - Records sound to a file Copyright (C) 2008 Nasca Octavian Paul Author: Nasca Octavian Paul Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WAVENGINE_H #define WAVENGINE_H #include "AudioOut.h" #include #include #include "ZynSema.h" #include "SafeQueue.h" class WavFile; class WavEngine:public AudioOut { public: WavEngine(); ~WavEngine(); bool openAudio(); bool Start(); void Stop(); void setAudioEn(bool /*nval*/) {} bool getAudioEn() const {return true; } void push(Stereo smps, size_t len); void newFile(WavFile *_file); void destroyFile(); protected: void *AudioThread(); static void *_AudioThread(void *arg); private: WavFile *file; ZynSema work; SafeQueue buffer; pthread_t *pThread; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h000066400000000000000000000035511247673406200241410ustar00rootroot00000000000000#ifndef ZYNSEMA_H #define ZYNSEMA_H #if defined __APPLE__ || defined WIN32 #include class ZynSema { public: ZynSema (void) : _count (0) { } ~ZynSema (void) { pthread_mutex_destroy (&_mutex); pthread_cond_destroy (&_cond); } int init (int, int v) { _count = v; return pthread_mutex_init (&_mutex, 0) || pthread_cond_init (&_cond, 0); } int post (void) { pthread_mutex_lock (&_mutex); if (++_count == 1) pthread_cond_signal (&_cond); pthread_mutex_unlock (&_mutex); return 0; } int wait (void) { pthread_mutex_lock (&_mutex); while (_count < 1) pthread_cond_wait (&_cond, &_mutex); --_count; pthread_mutex_unlock (&_mutex); return 0; } int trywait (void) { if (pthread_mutex_trylock (&_mutex)) return -1; if (_count < 1) { pthread_mutex_unlock (&_mutex); return -1; } --_count; pthread_mutex_unlock (&_mutex); return 0; } int getvalue (void) const { return _count; } private: int _count; pthread_mutex_t _mutex; pthread_cond_t _cond; }; #else // POSIX sempahore #include class ZynSema { public: ZynSema (void) { } ~ZynSema (void) { sem_destroy (&_sema); } int init (int s, int v) { return sem_init (&_sema, s, v); } int post (void) { return sem_post (&_sema); } int wait (void) { return sem_wait (&_sema); } int trywait (void) { return sem_trywait (&_sema); } int getvalue(void) { int v = 0; sem_getvalue(&_sema, &v); return v; } private: sem_t _sema; }; #endif // POSIX semapore #endif // ZYNSEMA_H lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Output/000077500000000000000000000000001247673406200231515ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp000066400000000000000000000610411247673406200267240ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer DSSIaudiooutput.cpp - Audio functions for DSSI Copyright (C) 2002 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Inital working DSSI output code contributed by Stephen G. Parry */ //this file contains code used from trivial_synth.c from //the DSSI (published by Steve Harris under public domain) as a template. #include "DSSIaudiooutput.h" #include "../Misc/Config.h" #include "../Misc/Bank.h" #include "../Misc/Util.h" #include #include using std::string; using std::vector; //Dummy variables and functions for linking purposes const char *instance_name = 0; class WavFile; namespace Nio { bool start(void){return 1;}; void stop(void){}; void waveNew(WavFile *){} void waveStart(void){} void waveStop(void){} void waveEnd(void){} } // // Static stubs for LADSPA member functions // // LADSPA is essentially a C handle based API; This plug-in implementation is // a C++ OO one so we need stub functions to map from C API calls to C++ object // method calls. void DSSIaudiooutput::stub_connectPort(LADSPA_Handle instance, unsigned long port, LADSPA_Data *data) { getInstance(instance)->connectPort(port, data); } void DSSIaudiooutput::stub_activate(LADSPA_Handle instance) { getInstance(instance)->activate(); } void DSSIaudiooutput::stub_run(LADSPA_Handle instance, unsigned long sample_count) { getInstance(instance)->run(sample_count); } void DSSIaudiooutput::stub_deactivate(LADSPA_Handle instance) { getInstance(instance)->deactivate(); } void DSSIaudiooutput::stub_cleanup(LADSPA_Handle instance) { DSSIaudiooutput *plugin_instance = getInstance(instance); plugin_instance->cleanup(); delete plugin_instance; } const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { return DSSIaudiooutput::getLadspaDescriptor(index); } // // Static stubs for DSSI member functions // // DSSI is essentially a C handle based API; This plug-in implementation is // a C++ OO one so we need stub functions to map from C API calls to C++ object // method calls. const DSSI_Program_Descriptor *DSSIaudiooutput::stub_getProgram( LADSPA_Handle instance, unsigned long index) { return getInstance(instance)->getProgram(index); } void DSSIaudiooutput::stub_selectProgram(LADSPA_Handle instance, unsigned long bank, unsigned long program) { getInstance(instance)->selectProgram(bank, program); } int DSSIaudiooutput::stub_getMidiControllerForPort(LADSPA_Handle instance, unsigned long port) { return getInstance(instance)->getMidiControllerForPort(port); } void DSSIaudiooutput::stub_runSynth(LADSPA_Handle instance, unsigned long sample_count, snd_seq_event_t *events, unsigned long event_count) { getInstance(instance)->runSynth(sample_count, events, event_count); } const DSSI_Descriptor *dssi_descriptor(unsigned long index) { return DSSIaudiooutput::getDssiDescriptor(index); } // // LADSPA member functions // /** * Instantiates a plug-in. * * This LADSPA member function instantiates a plug-in. * Note that instance initialisation should generally occur in * activate() rather than here. * * Zyn Implementation * ------------------ * This implementation creates a C++ class object and hides its pointer * in the handle by type casting. * * @param descriptor [in] the descriptor for this plug-in * @param s_rate [in] the sample rate * @return the plug-in instance handle if successful else NULL */ LADSPA_Handle DSSIaudiooutput::instantiate(const LADSPA_Descriptor *descriptor, unsigned long s_rate) { if(descriptor->UniqueID == dssiDescriptor->LADSPA_Plugin->UniqueID) return (LADSPA_Handle)(new DSSIaudiooutput(s_rate)); else return NULL; } /** * Connects a port on an instantiated plug-in. * * This LADSPA member function connects a port on an instantiated plug-in to a * memory location at which a block of data for the port will be read/written. * The data location is expected to be an array of LADSPA_Data for audio ports * or a single LADSPA_Data value for control ports. Memory issues will be * managed by the host. The plug-in must read/write the data at these locations * every time run() or run_adding() is called and the data present at the time * of this connection call should not be considered meaningful. * * Zyn Implementation * ------------------ * The buffer pointers are stored as member variables * * @param port [in] the port to be connected * @param data [in] the data buffer to write to / read from */ void DSSIaudiooutput::connectPort(unsigned long port, LADSPA_Data *data) { switch(port) { case 0: outl = data; break; case 1: outr = data; break; } } /** * Initialises a plug-in instance and activates it for use. * * This LADSPA member function initialises a plug-in instance and activates it * for use. This is separated from instantiate() to aid real-time support and * so that hosts can reinitialise a plug-in instance by calling deactivate() and * then activate(). In this case the plug-in instance must reset all state * information dependent on the history of the plug-in instance except for any * data locations provided by connect_port() and any gain set by * set_run_adding_gain(). * * Zyn Implementation * ------------------ * Currently this does nothing; Care must be taken as to code placed here as * too much code here seems to cause time-out problems in jack-dssi-host. */ void DSSIaudiooutput::activate() {} /** * Runs an instance of a plug-in for a block. * * This LADSPA member function runs an instance of a plug-in for a block. * Note that if an activate() function exists then it must be called before * run() or run_adding(). If deactivate() is called for a plug-in instance then * the plug-in instance may not be reused until activate() has been called again. * * Zyn Implementation * ------------------ * This is a LADSPA function that does not process any MIDI events; it is hence * implemented by simply calling runSynth() with an empty event list. * * @param sample_count [in] the block size (in samples) for which the plug-in instance may run */ void DSSIaudiooutput::run(unsigned long sample_count) { runSynth(sample_count, NULL, (unsigned long)0); } /** * Counterpart to activate(). * * This LADSPA member function is the counterpart to activate() (see above). * Deactivation is not similar to pausing as the plug-in instance will be * reinitialised when activate() is called to reuse it. * * Zyn Implementation * ------------------ * Currently this function does nothing. */ void DSSIaudiooutput::deactivate() {} /** * Deletes a plug-in instance that is no longer required. * * LADSPA member function; once an instance of a plug-in has been finished with * it can be deleted using this function. The instance handle ceases to be * valid after this call. * * If activate() was called for a plug-in instance then a corresponding call to * deactivate() must be made before cleanup() is called. * * Zyn Implementation * ------------------ * Currently cleanup is deferred to the destructor that is invoked after cleanup() */ void DSSIaudiooutput::cleanup() {} /** * Initial entry point for the LADSPA plug-in library. * * This LADSPA function is the initial entry point for the plug-in library. * The LADSPA host looks for this entry point in each shared library object it * finds and then calls the function to enumerate the plug-ins within the * library. * * Zyn Implementation * ------------------ * As the Zyn plug-in is a DSSI plug-in, the LADSPA descriptor is embedded inside * the DSSI descriptor, which is created by DSSIaudiooutput::initDssiDescriptor() * statically when the library is loaded. This function then merely returns a pointer * to that embedded descriptor. * * @param index [in] the index number of the plug-in within the library. * @return if index is in range, a pointer to the plug-in descriptor is returned, else NULL */ const LADSPA_Descriptor *DSSIaudiooutput::getLadspaDescriptor( unsigned long index) { if((index > 0) || (dssiDescriptor == NULL)) return NULL; else return dssiDescriptor->LADSPA_Plugin; } // // DSSI member functions // /** * Provides a description of a program available on this synth. * * This DSSI member function pointer provides a description of a program (named * preset sound) available on this synth. * * Zyn Implementation * ------------------ * The instruments in all Zyn's bank directories, as shown by the `instrument * -> show instrument bank` command, are enumerated to the host by this * function, allowing access to all those instruments. * The first time an instrument is requested, the bank it is in and any * unmapped ones preceding that are mapped; all the instruments names and * filenames from those banks are stored in the programMap member variable for * later use. This is done on demand in this way, rather than up front in one * go because loading all the instrument names in one go can lead to timeouts * and zombies. * * @param index [in] index into the plug-in's list of * programs, not a program number as represented by the Program * field of the DSSI_Program_Descriptor. (This distinction is * needed to support synths that use non-contiguous program or * bank numbers.) * @return a DSSI_Program_Descriptor pointer that is * guaranteed to be valid only until the next call to get_program, * deactivate, or configure, on the same plug-in instance, or NULL if index is out of range. */ const DSSI_Program_Descriptor *DSSIaudiooutput::getProgram(unsigned long index) { static DSSI_Program_Descriptor retVal; /* Make sure we have the list of banks loaded */ initBanks(); /* Make sure that the bank containing the instrument has been mapped */ while(index >= programMap.size() && mapNextBank()) /* DO NOTHING MORE */; if(index >= programMap.size()) /* No more instruments */ return NULL; else { /* OK, return the instrument */ retVal.Name = programMap[index].name.c_str(); retVal.Program = programMap[index].program; retVal.Bank = programMap[index].bank; return &retVal; } } /** * Selects a new program for this synth. * * This DSSI member function selects a new program for this synth. The program * change will take effect immediately at the start of the next run_synth() * call. An invalid bank / instrument combination is ignored. * * Zyn Implementation * ------------------ * the banks and instruments are as shown in the `instrument -> show instrument * bank` command in Zyn. The bank no is a 1-based index into the list of banks * Zyn loads and shows in the drop down and the program number is the * instrument within that bank. * * @param bank [in] the bank number to select * @param program [in] the program number within the bank to select */ void DSSIaudiooutput::selectProgram(unsigned long bank, unsigned long program) { initBanks(); // cerr << "selectProgram(" << (bank & 0x7F) << ':' << ((bank >> 7) & 0x7F) << "," << program << ")" << '\n'; if((bank < master->bank.banks.size()) && (program < BANK_SIZE)) { const std::string bankdir = master->bank.banks[bank].dir; if(!bankdir.empty()) { pthread_mutex_lock(&master->mutex); /* We have to turn off the CheckPADsynth functionality, else * the program change takes way too long and we get timeouts * and hence zombies (!) */ int save = config.cfg.CheckPADsynth; config.cfg.CheckPADsynth = 0; /* Load the bank... */ master->bank.loadbank(bankdir); /* restore the CheckPADsynth flag */ config.cfg.CheckPADsynth = save; /* Now load the instrument... */ master->bank.loadfromslot((unsigned int)program, master->part[0]); pthread_mutex_unlock(&master->mutex); } } } /** * Returns the MIDI controller number or NRPN for a input control port * * This DSSI member function returns the MIDI controller number or NRPN that * should be mapped to the given input control port. If the given port should * not have any MIDI controller mapped to it, the function will return DSSI_NONE. * The behaviour of this function is undefined if the given port * number does not correspond to an input control port. * * Zyn Implementation * ------------------ * Currently Zyn does not define any controller ports, but may do in the future. * * @param port [in] the input controller port * @return the CC and NRPN values shifted and ORed together. */ int DSSIaudiooutput::getMidiControllerForPort(unsigned long /*port*/) { return DSSI_NONE; } /** * Runs the synth for a block. * * This DSSI member function runs the synth for a block. This is identical in * function to the LADSPA run() function, except that it also supplies events * to the synth. * * Zyn Implementation * ------------------ * Zyn implements synthesis in Master::GetAudioOutSamples; runSynth calls this * function in chunks delimited by the sample_count and the frame indexes in * the events block, calling the appropriate NoteOn, NoteOff and SetController * members of Master to process the events supplied between each chunk. * * @param sample_count [in] the block size (in samples) for which the synth * instance may run. * @param events [in] The Events pointer points to a block of ALSA * sequencer events, used to communicate MIDI and related events to the synth. * Each event must be timestamped relative to the start of the block, * (mis)using the ALSA "tick time" field as a frame count. The host is * responsible for ensuring that events with differing timestamps are already * ordered by time. Must not include NOTE (only NOTE_ON / NOTE_OFF), LSB or MSB * events. * @param event_count [in] the number of entries in the `events` block */ void DSSIaudiooutput::runSynth(unsigned long sample_count, snd_seq_event_t *events, unsigned long event_count) { unsigned long from_frame = 0; unsigned long event_index = 0; unsigned long next_event_frame = 0; unsigned long to_frame = 0; pthread_mutex_lock(&master->mutex); do { /* Find the time of the next event, if any */ if((events == NULL) || (event_index >= event_count)) next_event_frame = ULONG_MAX; else next_event_frame = events[event_index].time.tick; /* find the end of the sub-sample to be processed this time round... */ /* if the next event falls within the desired sample interval... */ if((next_event_frame < sample_count) && (next_event_frame >= to_frame)) /* set the end to be at that event */ to_frame = next_event_frame; else /* ...else go for the whole remaining sample */ to_frame = sample_count; if(from_frame < to_frame) { // call master to fill from `from_frame` to `to_frame`: master->GetAudioOutSamples(to_frame - from_frame, (int)sampleRate, &(outl[from_frame]), &(outr[from_frame])); // next sub-sample please... from_frame = to_frame; } // Now process any event(s) at the current timing point while(events != NULL && event_index < event_count && events[event_index].time.tick == to_frame) { if(events[event_index].type == SND_SEQ_EVENT_NOTEON) master->noteOn(events[event_index].data.note.channel, events[event_index].data.note.note, events[event_index].data.note.velocity); else if(events[event_index].type == SND_SEQ_EVENT_NOTEOFF) master->noteOff(events[event_index].data.note.channel, events[event_index].data.note.note); else if(events[event_index].type == SND_SEQ_EVENT_CONTROLLER) master->setController(events[event_index].data.control.channel, events[event_index].data.control.param, events[event_index].data.control.value); else {} event_index++; } // Keep going until we have the desired total length of sample... } while(to_frame < sample_count); pthread_mutex_unlock(&master->mutex); } /** * Initial entry point for the DSSI plug-in library. * * This DSSI function is the initial entry point for the plug-in library. * The DSSI host looks for this entry point in each shared library object it * finds and then calls the function to enumerate the plug-ins within the * library. * * Zyn Implementation * ------------------ * The descriptor is created statically by DSSIaudiooutput::initDssiDescriptor() * when the plug-in library is loaded. This function merely returns a pointer to * that descriptor. * * @param index [in] the index number of the plug-in within the library. * @return if index is in range, a pointer to the plug-in descriptor is returned, else NULL */ const DSSI_Descriptor *DSSIaudiooutput::getDssiDescriptor(unsigned long index) { if((index > 0) || (dssiDescriptor == NULL)) return NULL; else return dssiDescriptor; } // // Internal member functions // // Initialise the DSSI descriptor, statically: DSSI_Descriptor *DSSIaudiooutput::dssiDescriptor = DSSIaudiooutput::initDssiDescriptor(); /** * Initializes the DSSI (and LADSPA) descriptor, returning it is an object. */ DSSI_Descriptor *DSSIaudiooutput::initDssiDescriptor() { DSSI_Descriptor *newDssiDescriptor = new DSSI_Descriptor; LADSPA_PortDescriptor *newPortDescriptors; const char **newPortNames; LADSPA_PortRangeHint *newPortRangeHints; if(newDssiDescriptor) { LADSPA_Descriptor *newLadspaDescriptor = new LADSPA_Descriptor; if(newLadspaDescriptor) { newLadspaDescriptor->UniqueID = 100; newLadspaDescriptor->Label = "ZASF"; newLadspaDescriptor->Properties = 0; newLadspaDescriptor->Name = "ZynAddSubFX"; newLadspaDescriptor->Maker = "Nasca Octavian Paul "; newLadspaDescriptor->Copyright = "GNU General Public License v.2"; newLadspaDescriptor->PortCount = 2; newPortNames = new const char *[newLadspaDescriptor->PortCount]; newPortNames[0] = "Output L"; newPortNames[1] = "Output R"; newLadspaDescriptor->PortNames = newPortNames; newPortDescriptors = new LADSPA_PortDescriptor[newLadspaDescriptor->PortCount]; newPortDescriptors[0] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; newPortDescriptors[1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; newLadspaDescriptor->PortDescriptors = newPortDescriptors; newPortRangeHints = new LADSPA_PortRangeHint[newLadspaDescriptor->PortCount]; newPortRangeHints[0].HintDescriptor = 0; newPortRangeHints[1].HintDescriptor = 0; newLadspaDescriptor->PortRangeHints = newPortRangeHints; newLadspaDescriptor->activate = stub_activate; newLadspaDescriptor->cleanup = stub_cleanup; newLadspaDescriptor->connect_port = stub_connectPort; newLadspaDescriptor->deactivate = stub_deactivate; newLadspaDescriptor->instantiate = instantiate; newLadspaDescriptor->run = stub_run; newLadspaDescriptor->run_adding = NULL; newLadspaDescriptor->set_run_adding_gain = NULL; } newDssiDescriptor->LADSPA_Plugin = newLadspaDescriptor; newDssiDescriptor->DSSI_API_Version = 1; newDssiDescriptor->configure = NULL; newDssiDescriptor->get_program = stub_getProgram; newDssiDescriptor->get_midi_controller_for_port = stub_getMidiControllerForPort; newDssiDescriptor->select_program = stub_selectProgram; newDssiDescriptor->run_synth = stub_runSynth; newDssiDescriptor->run_synth_adding = NULL; newDssiDescriptor->run_multiple_synths = NULL; newDssiDescriptor->run_multiple_synths_adding = NULL; } dssiDescriptor = newDssiDescriptor; return dssiDescriptor; } /** * Converts a LADSPA / DSSI handle into a DSSIaudiooutput instance. * * @param instance [in] * @return the instance */ DSSIaudiooutput *DSSIaudiooutput::getInstance(LADSPA_Handle instance) { return (DSSIaudiooutput *)(instance); } SYNTH_T *synth; /** * The private sole constructor for the DSSIaudiooutput class. * * Only ever called via instantiate(). * @param sampleRate [in] the sample rate to be used by the synth. * @return */ DSSIaudiooutput::DSSIaudiooutput(unsigned long sampleRate) { synth = new SYNTH_T; synth->samplerate = sampleRate; this->sampleRate = sampleRate; this->banksInited = false; config.init(); sprng(time(NULL)); denormalkillbuf = new float [synth->buffersize]; for(int i = 0; i < synth->buffersize; i++) denormalkillbuf[i] = (RND - 0.5f) * 1e-16; synth->alias(); this->master = new Master(); } /** * The destructor for the DSSIaudiooutput class * @return */ DSSIaudiooutput::~DSSIaudiooutput() {} /** * Ensures the list of bank (directories) has been initialised. */ void DSSIaudiooutput::initBanks(void) { if(!banksInited) { pthread_mutex_lock(&master->mutex); master->bank.rescanforbanks(); banksInited = true; pthread_mutex_unlock(&master->mutex); } } /** * constructor for the internally used ProgramDescriptor class * * @param _bank [in] bank number * @param _program [in] program number * @param _name [in] instrument / sample name * @return */ DSSIaudiooutput::ProgramDescriptor::ProgramDescriptor(unsigned long _bank, unsigned long _program, char *_name) :bank(_bank), program(_program), name(_name) {} /** * The map of programs available; held as a single shared statically allocated object. */ vector DSSIaudiooutput::programMap = vector(); /** * Index controlling the map of banks */ long DSSIaudiooutput::bankNoToMap = 1; /** * Queries and maps the next available bank of instruments. * * If the program index requested to getProgram() lies beyond the banks mapped to date, * this member function is called to map the next one. * @return true if a new bank has been found and mapped, else false. */ bool DSSIaudiooutput::mapNextBank() { pthread_mutex_lock(&master->mutex); Bank &bank = master->bank; bool retval; if((bankNoToMap >= (int)bank.banks.size()) || bank.banks[bankNoToMap].dir.empty()) retval = false; else { bank.loadbank(bank.banks[bankNoToMap].dir); for(unsigned long instrument = 0; instrument < BANK_SIZE; ++instrument) { string insName = bank.getname(instrument); if(!insName.empty() && (insName[0] != '\0') && (insName[0] != ' ')) programMap.push_back(ProgramDescriptor(bankNoToMap, instrument, const_cast( insName.c_str()))); } bankNoToMap++; retval = true; } pthread_mutex_unlock(&master->mutex); return retval; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h000066400000000000000000000102761247673406200263750ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer VSTaudiooutput.h - Audio output for VST Copyright (C) 2002 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef VST_AUDIO_OUTPUT_H #define VST_AUDIO_OUTPUT_H #include #include "../globals.h" #include "../Misc/Master.h" #include #include #include class DSSIaudiooutput { public: // // Static stubs for LADSPA member functions // static void stub_connectPort(LADSPA_Handle instance, unsigned long port, LADSPA_Data *data); static void stub_activate(LADSPA_Handle instance); static void stub_run(LADSPA_Handle instance, unsigned long sample_count); static void stub_deactivate(LADSPA_Handle Instance); static void stub_cleanup(LADSPA_Handle instance); // // Static stubs for DSSI member functions // static const DSSI_Program_Descriptor *stub_getProgram( LADSPA_Handle instance, unsigned long Index); static void stub_selectProgram(LADSPA_Handle instance, unsigned long bank, unsigned long program); static int stub_getMidiControllerForPort(LADSPA_Handle instance, unsigned long port); static void stub_runSynth(LADSPA_Handle instance, unsigned long sample_count, snd_seq_event_t *events, unsigned long event_count); /* * LADSPA member functions */ static LADSPA_Handle instantiate(const LADSPA_Descriptor *descriptor, unsigned long s_rate); void connectPort(unsigned long port, LADSPA_Data *data); void activate(); void run(unsigned long sample_count); void deactivate(); void cleanup(); static const LADSPA_Descriptor *getLadspaDescriptor(unsigned long index); /* * DSSI member functions */ const DSSI_Program_Descriptor *getProgram(unsigned long Index); void selectProgram(unsigned long bank, unsigned long program); int getMidiControllerForPort(unsigned long port); void runSynth(unsigned long sample_count, snd_seq_event_t *events, unsigned long event_count); static const DSSI_Descriptor *getDssiDescriptor(unsigned long index); struct ProgramDescriptor { unsigned long bank; unsigned long program; std::string name; ProgramDescriptor(unsigned long _bank, unsigned long _program, char *_name); }; private: DSSIaudiooutput(unsigned long sampleRate); ~DSSIaudiooutput(); static DSSI_Descriptor *initDssiDescriptor(); static DSSIaudiooutput *getInstance(LADSPA_Handle instance); void initBanks(); bool mapNextBank(); LADSPA_Data *outl; LADSPA_Data *outr; long sampleRate; Master *master; static DSSI_Descriptor *dssiDescriptor; static std::string bankDirNames[]; static std::vector programMap; /** * Flag controlling the list of bank directories */ bool banksInited; static long bankNoToMap; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/000077500000000000000000000000001247673406200230745ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp000066400000000000000000000565731247673406200270160ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer ADnoteParameters.cpp - Parameters for ADnote (ADsynth) Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "ADnoteParameters.h" #include "EnvelopeParams.h" #include "LFOParams.h" #include "../Misc/XMLwrapper.h" #include "../DSP/FFTwrapper.h" #include "../Synth/OscilGen.h" #include "../Synth/Resonance.h" #include "FilterParams.h" int ADnote_unison_sizes[] = {1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 25, 30, 40, 50, 0}; ADnoteParameters::ADnoteParameters(FFTwrapper *fft_) :PresetsArray() { setpresettype("Padsynth"); fft = fft_; for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) EnableVoice(nvoice); defaults(); } ADnoteGlobalParam::ADnoteGlobalParam() { FreqEnvelope = new EnvelopeParams(0, 0); FreqEnvelope->ASRinit(64, 50, 64, 60); FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0); AmpEnvelope = new EnvelopeParams(64, 1); AmpEnvelope->ADSRinit_dB(0, 40, 127, 25); AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1); GlobalFilter = new FilterParams(2, 94, 40); FilterEnvelope = new EnvelopeParams(0, 1); FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64); FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2); Reson = new Resonance(); } void ADnoteParameters::defaults() { //Default Parameters GlobalPar.defaults(); for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) defaults(nvoice); VoicePar[0].Enabled = 1; } void ADnoteGlobalParam::defaults() { /* Frequency Global Parameters */ PStereo = 1; //stereo PDetune = 8192; //zero PCoarseDetune = 0; PDetuneType = 1; FreqEnvelope->defaults(); FreqLfo->defaults(); PBandwidth = 64; /* Amplitude Global Parameters */ PVolume = 90; PPanning = 64; //center PAmpVelocityScaleFunction = 64; AmpEnvelope->defaults(); AmpLfo->defaults(); PPunchStrength = 0; PPunchTime = 60; PPunchStretch = 64; PPunchVelocitySensing = 72; Hrandgrouping = 0; /* Filter Global Parameters*/ PFilterVelocityScale = 64; PFilterVelocityScaleFunction = 64; GlobalFilter->defaults(); FilterEnvelope->defaults(); FilterLfo->defaults(); Reson->defaults(); } /* * Defaults a voice */ void ADnoteParameters::defaults(int n) { VoicePar[n].defaults(); } void ADnoteVoiceParam::defaults() { Enabled = 0; Unison_size = 1; Unison_frequency_spread = 60; Unison_stereo_spread = 64; Unison_vibratto = 64; Unison_vibratto_speed = 64; Unison_invert_phase = 0; Unison_phase_randomness = 127; Type = 0; Pfixedfreq = 0; PfixedfreqET = 0; Presonance = 1; Pfilterbypass = 0; Pextoscil = -1; PextFMoscil = -1; Poscilphase = 64; PFMoscilphase = 64; PDelay = 0; PVolume = 100; PVolumeminus = 0; PPanning = 64; //center PDetune = 8192; //8192=0 PCoarseDetune = 0; PDetuneType = 0; PFreqLfoEnabled = 0; PFreqEnvelopeEnabled = 0; PAmpEnvelopeEnabled = 0; PAmpLfoEnabled = 0; PAmpVelocityScaleFunction = 127; PFilterEnabled = 0; PFilterEnvelopeEnabled = 0; PFilterLfoEnabled = 0; PFMEnabled = 0; //I use the internal oscillator (-1) PFMVoice = -1; PFMVolume = 90; PFMVolumeDamp = 64; PFMDetune = 8192; PFMCoarseDetune = 0; PFMDetuneType = 0; PFMFreqEnvelopeEnabled = 0; PFMAmpEnvelopeEnabled = 0; PFMVelocityScaleFunction = 64; OscilSmp->defaults(); FMSmp->defaults(); AmpEnvelope->defaults(); AmpLfo->defaults(); FreqEnvelope->defaults(); FreqLfo->defaults(); VoiceFilter->defaults(); FilterEnvelope->defaults(); FilterLfo->defaults(); FMFreqEnvelope->defaults(); FMAmpEnvelope->defaults(); } /* * Init the voice parameters */ void ADnoteParameters::EnableVoice(int nvoice) { VoicePar[nvoice].enable(fft, GlobalPar.Reson); } void ADnoteVoiceParam::enable(FFTwrapper *fft, Resonance *Reson) { OscilSmp = new OscilGen(fft, Reson); FMSmp = new OscilGen(fft, NULL); AmpEnvelope = new EnvelopeParams(64, 1); AmpEnvelope->ADSRinit_dB(0, 100, 127, 100); AmpLfo = new LFOParams(90, 32, 64, 0, 0, 30, 0, 1); FreqEnvelope = new EnvelopeParams(0, 0); FreqEnvelope->ASRinit(30, 40, 64, 60); FreqLfo = new LFOParams(50, 40, 0, 0, 0, 0, 0, 0); VoiceFilter = new FilterParams(2, 50, 60); FilterEnvelope = new EnvelopeParams(0, 0); FilterEnvelope->ADSRinit_filter(90, 70, 40, 70, 10, 40); FilterLfo = new LFOParams(50, 20, 64, 0, 0, 0, 0, 2); FMFreqEnvelope = new EnvelopeParams(0, 0); FMFreqEnvelope->ASRinit(20, 90, 40, 80); FMAmpEnvelope = new EnvelopeParams(64, 1); FMAmpEnvelope->ADSRinit(80, 90, 127, 100); } /* * Get the Multiplier of the fine detunes of the voices */ float ADnoteParameters::getBandwidthDetuneMultiplier() { float bw = (GlobalPar.PBandwidth - 64.0f) / 64.0f; bw = powf(2.0f, bw * powf(fabs(bw), 0.2f) * 5.0f); return bw; } /* * Get the unison spread in cents for a voice */ float ADnoteParameters::getUnisonFrequencySpreadCents(int nvoice) { float unison_spread = VoicePar[nvoice].Unison_frequency_spread / 127.0f; unison_spread = powf(unison_spread * 2.0f, 2.0f) * 50.0f; //cents return unison_spread; } /* * Kill the voice */ void ADnoteParameters::KillVoice(int nvoice) { VoicePar[nvoice].kill(); } void ADnoteVoiceParam::kill() { delete OscilSmp; delete FMSmp; delete AmpEnvelope; delete AmpLfo; delete FreqEnvelope; delete FreqLfo; delete VoiceFilter; delete FilterEnvelope; delete FilterLfo; delete FMFreqEnvelope; delete FMAmpEnvelope; } ADnoteGlobalParam::~ADnoteGlobalParam() { delete FreqEnvelope; delete FreqLfo; delete AmpEnvelope; delete AmpLfo; delete GlobalFilter; delete FilterEnvelope; delete FilterLfo; delete Reson; } ADnoteParameters::~ADnoteParameters() { for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) KillVoice(nvoice); } int ADnoteParameters::get_unison_size_index(int nvoice) { int index = 0; if(nvoice >= NUM_VOICES) return 0; int unison = VoicePar[nvoice].Unison_size; while(1) { if(ADnote_unison_sizes[index] >= unison) return index; if(ADnote_unison_sizes[index] == 0) return index - 1; index++; } return 0; } void ADnoteParameters::set_unison_size_index(int nvoice, int index) { int unison = 1; for(int i = 0; i <= index; ++i) { unison = ADnote_unison_sizes[i]; if(unison == 0) { unison = ADnote_unison_sizes[i - 1]; break; } } VoicePar[nvoice].Unison_size = unison; } void ADnoteParameters::add2XMLsection(XMLwrapper *xml, int n) { int nvoice = n; if(nvoice >= NUM_VOICES) return; int oscilused = 0, fmoscilused = 0; //if the oscil or fmoscil are used by another voice for(int i = 0; i < NUM_VOICES; ++i) { if(VoicePar[i].Pextoscil == nvoice) oscilused = 1; if(VoicePar[i].PextFMoscil == nvoice) fmoscilused = 1; } xml->addparbool("enabled", VoicePar[nvoice].Enabled); if(((VoicePar[nvoice].Enabled == 0) && (oscilused == 0) && (fmoscilused == 0)) && (xml->minimal)) return; VoicePar[nvoice].add2XML(xml, fmoscilused); } void ADnoteVoiceParam::add2XML(XMLwrapper *xml, bool fmoscilused) { xml->addpar("type", Type); xml->addpar("unison_size", Unison_size); xml->addpar("unison_frequency_spread", Unison_frequency_spread); xml->addpar("unison_stereo_spread", Unison_stereo_spread); xml->addpar("unison_vibratto", Unison_vibratto); xml->addpar("unison_vibratto_speed", Unison_vibratto_speed); xml->addpar("unison_invert_phase", Unison_invert_phase); xml->addpar("unison_phase_randomness", Unison_phase_randomness); xml->addpar("delay", PDelay); xml->addparbool("resonance", Presonance); xml->addpar("ext_oscil", Pextoscil); xml->addpar("ext_fm_oscil", PextFMoscil); xml->addpar("oscil_phase", Poscilphase); xml->addpar("oscil_fm_phase", PFMoscilphase); xml->addparbool("filter_enabled", PFilterEnabled); xml->addparbool("filter_bypass", Pfilterbypass); xml->addpar("fm_enabled", PFMEnabled); xml->beginbranch("OSCIL"); OscilSmp->add2XML(xml); xml->endbranch(); xml->beginbranch("AMPLITUDE_PARAMETERS"); xml->addpar("panning", PPanning); xml->addpar("volume", PVolume); xml->addparbool("volume_minus", PVolumeminus); xml->addpar("velocity_sensing", PAmpVelocityScaleFunction); xml->addparbool("amp_envelope_enabled", PAmpEnvelopeEnabled); if((PAmpEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("AMPLITUDE_ENVELOPE"); AmpEnvelope->add2XML(xml); xml->endbranch(); } xml->addparbool("amp_lfo_enabled", PAmpLfoEnabled); if((PAmpLfoEnabled != 0) || (!xml->minimal)) { xml->beginbranch("AMPLITUDE_LFO"); AmpLfo->add2XML(xml); xml->endbranch(); } xml->endbranch(); xml->beginbranch("FREQUENCY_PARAMETERS"); xml->addparbool("fixed_freq", Pfixedfreq); xml->addpar("fixed_freq_et", PfixedfreqET); xml->addpar("detune", PDetune); xml->addpar("coarse_detune", PCoarseDetune); xml->addpar("detune_type", PDetuneType); xml->addparbool("freq_envelope_enabled", PFreqEnvelopeEnabled); if((PFreqEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->add2XML(xml); xml->endbranch(); } xml->addparbool("freq_lfo_enabled", PFreqLfoEnabled); if((PFreqLfoEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FREQUENCY_LFO"); FreqLfo->add2XML(xml); xml->endbranch(); } xml->endbranch(); if((PFilterEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FILTER_PARAMETERS"); xml->beginbranch("FILTER"); VoiceFilter->add2XML(xml); xml->endbranch(); xml->addparbool("filter_envelope_enabled", PFilterEnvelopeEnabled); if((PFilterEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FILTER_ENVELOPE"); FilterEnvelope->add2XML(xml); xml->endbranch(); } xml->addparbool("filter_lfo_enabled", PFilterLfoEnabled); if((PFilterLfoEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FILTER_LFO"); FilterLfo->add2XML(xml); xml->endbranch(); } xml->endbranch(); } if((PFMEnabled != 0) || (fmoscilused != 0) || (!xml->minimal)) { xml->beginbranch("FM_PARAMETERS"); xml->addpar("input_voice", PFMVoice); xml->addpar("volume", PFMVolume); xml->addpar("volume_damp", PFMVolumeDamp); xml->addpar("velocity_sensing", PFMVelocityScaleFunction); xml->addparbool("amp_envelope_enabled", PFMAmpEnvelopeEnabled); if((PFMAmpEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("AMPLITUDE_ENVELOPE"); FMAmpEnvelope->add2XML(xml); xml->endbranch(); } xml->beginbranch("MODULATOR"); xml->addpar("detune", PFMDetune); xml->addpar("coarse_detune", PFMCoarseDetune); xml->addpar("detune_type", PFMDetuneType); xml->addparbool("freq_envelope_enabled", PFMFreqEnvelopeEnabled); if((PFMFreqEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FREQUENCY_ENVELOPE"); FMFreqEnvelope->add2XML(xml); xml->endbranch(); } xml->beginbranch("OSCIL"); FMSmp->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->endbranch(); } } void ADnoteGlobalParam::add2XML(XMLwrapper *xml) { xml->addparbool("stereo", PStereo); xml->beginbranch("AMPLITUDE_PARAMETERS"); xml->addpar("volume", PVolume); xml->addpar("panning", PPanning); xml->addpar("velocity_sensing", PAmpVelocityScaleFunction); xml->addpar("punch_strength", PPunchStrength); xml->addpar("punch_time", PPunchTime); xml->addpar("punch_stretch", PPunchStretch); xml->addpar("punch_velocity_sensing", PPunchVelocitySensing); xml->addpar("harmonic_randomness_grouping", Hrandgrouping); xml->beginbranch("AMPLITUDE_ENVELOPE"); AmpEnvelope->add2XML(xml); xml->endbranch(); xml->beginbranch("AMPLITUDE_LFO"); AmpLfo->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->beginbranch("FREQUENCY_PARAMETERS"); xml->addpar("detune", PDetune); xml->addpar("coarse_detune", PCoarseDetune); xml->addpar("detune_type", PDetuneType); xml->addpar("bandwidth", PBandwidth); xml->beginbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->add2XML(xml); xml->endbranch(); xml->beginbranch("FREQUENCY_LFO"); FreqLfo->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->beginbranch("FILTER_PARAMETERS"); xml->addpar("velocity_sensing_amplitude", PFilterVelocityScale); xml->addpar("velocity_sensing", PFilterVelocityScaleFunction); xml->beginbranch("FILTER"); GlobalFilter->add2XML(xml); xml->endbranch(); xml->beginbranch("FILTER_ENVELOPE"); FilterEnvelope->add2XML(xml); xml->endbranch(); xml->beginbranch("FILTER_LFO"); FilterLfo->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->beginbranch("RESONANCE"); Reson->add2XML(xml); xml->endbranch(); } void ADnoteParameters::add2XML(XMLwrapper *xml) { GlobalPar.add2XML(xml); for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { xml->beginbranch("VOICE", nvoice); add2XMLsection(xml, nvoice); xml->endbranch(); } } void ADnoteGlobalParam::getfromXML(XMLwrapper *xml) { PStereo = xml->getparbool("stereo", PStereo); if(xml->enterbranch("AMPLITUDE_PARAMETERS")) { PVolume = xml->getpar127("volume", PVolume); PPanning = xml->getpar127("panning", PPanning); PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing", PAmpVelocityScaleFunction); PPunchStrength = xml->getpar127("punch_strength", PPunchStrength); PPunchTime = xml->getpar127("punch_time", PPunchTime); PPunchStretch = xml->getpar127("punch_stretch", PPunchStretch); PPunchVelocitySensing = xml->getpar127("punch_velocity_sensing", PPunchVelocitySensing); Hrandgrouping = xml->getpar127("harmonic_randomness_grouping", Hrandgrouping); if(xml->enterbranch("AMPLITUDE_ENVELOPE")) { AmpEnvelope->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("AMPLITUDE_LFO")) { AmpLfo->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("FREQUENCY_PARAMETERS")) { PDetune = xml->getpar("detune", PDetune, 0, 16383); PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383); PDetuneType = xml->getpar127("detune_type", PDetuneType); PBandwidth = xml->getpar127("bandwidth", PBandwidth); xml->enterbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->getfromXML(xml); xml->exitbranch(); xml->enterbranch("FREQUENCY_LFO"); FreqLfo->getfromXML(xml); xml->exitbranch(); xml->exitbranch(); } if(xml->enterbranch("FILTER_PARAMETERS")) { PFilterVelocityScale = xml->getpar127("velocity_sensing_amplitude", PFilterVelocityScale); PFilterVelocityScaleFunction = xml->getpar127( "velocity_sensing", PFilterVelocityScaleFunction); xml->enterbranch("FILTER"); GlobalFilter->getfromXML(xml); xml->exitbranch(); xml->enterbranch("FILTER_ENVELOPE"); FilterEnvelope->getfromXML(xml); xml->exitbranch(); xml->enterbranch("FILTER_LFO"); FilterLfo->getfromXML(xml); xml->exitbranch(); xml->exitbranch(); } if(xml->enterbranch("RESONANCE")) { Reson->getfromXML(xml); xml->exitbranch(); } } void ADnoteParameters::getfromXML(XMLwrapper *xml) { GlobalPar.getfromXML(xml); for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { VoicePar[nvoice].Enabled = 0; if(xml->enterbranch("VOICE", nvoice) == 0) continue; getfromXMLsection(xml, nvoice); xml->exitbranch(); } } void ADnoteParameters::getfromXMLsection(XMLwrapper *xml, int n) { int nvoice = n; if(nvoice >= NUM_VOICES) return; VoicePar[nvoice].getfromXML(xml, nvoice); } void ADnoteVoiceParam::getfromXML(XMLwrapper *xml, unsigned nvoice) { Enabled = xml->getparbool("enabled", 0); Unison_size = xml->getpar127("unison_size", Unison_size); Unison_frequency_spread = xml->getpar127("unison_frequency_spread", Unison_frequency_spread); Unison_stereo_spread = xml->getpar127("unison_stereo_spread", Unison_stereo_spread); Unison_vibratto = xml->getpar127("unison_vibratto", Unison_vibratto); Unison_vibratto_speed = xml->getpar127("unison_vibratto_speed", Unison_vibratto_speed); Unison_invert_phase = xml->getpar127("unison_invert_phase", Unison_invert_phase); Unison_phase_randomness = xml->getpar127("unison_phase_randomness", Unison_phase_randomness); Type = xml->getpar127("type", Type); PDelay = xml->getpar127("delay", PDelay); Presonance = xml->getparbool("resonance", Presonance); Pextoscil = xml->getpar("ext_oscil", -1, -1, nvoice - 1); PextFMoscil = xml->getpar("ext_fm_oscil", -1, -1, nvoice - 1); Poscilphase = xml->getpar127("oscil_phase", Poscilphase); PFMoscilphase = xml->getpar127("oscil_fm_phase", PFMoscilphase); PFilterEnabled = xml->getparbool("filter_enabled", PFilterEnabled); Pfilterbypass = xml->getparbool("filter_bypass", Pfilterbypass); PFMEnabled = xml->getpar127("fm_enabled", PFMEnabled); if(xml->enterbranch("OSCIL")) { OscilSmp->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("AMPLITUDE_PARAMETERS")) { PPanning = xml->getpar127("panning", PPanning); PVolume = xml->getpar127("volume", PVolume); PVolumeminus = xml->getparbool("volume_minus", PVolumeminus); PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing", PAmpVelocityScaleFunction); PAmpEnvelopeEnabled = xml->getparbool("amp_envelope_enabled", PAmpEnvelopeEnabled); if(xml->enterbranch("AMPLITUDE_ENVELOPE")) { AmpEnvelope->getfromXML(xml); xml->exitbranch(); } PAmpLfoEnabled = xml->getparbool("amp_lfo_enabled", PAmpLfoEnabled); if(xml->enterbranch("AMPLITUDE_LFO")) { AmpLfo->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("FREQUENCY_PARAMETERS")) { Pfixedfreq = xml->getparbool("fixed_freq", Pfixedfreq); PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET); PDetune = xml->getpar("detune", PDetune, 0, 16383); PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383); PDetuneType = xml->getpar127("detune_type", PDetuneType); PFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled", PFreqEnvelopeEnabled); if(xml->enterbranch("FREQUENCY_ENVELOPE")) { FreqEnvelope->getfromXML(xml); xml->exitbranch(); } PFreqLfoEnabled = xml->getparbool("freq_lfo_enabled", PFreqLfoEnabled); if(xml->enterbranch("FREQUENCY_LFO")) { FreqLfo->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("FILTER_PARAMETERS")) { if(xml->enterbranch("FILTER")) { VoiceFilter->getfromXML(xml); xml->exitbranch(); } PFilterEnvelopeEnabled = xml->getparbool("filter_envelope_enabled", PFilterEnvelopeEnabled); if(xml->enterbranch("FILTER_ENVELOPE")) { FilterEnvelope->getfromXML(xml); xml->exitbranch(); } PFilterLfoEnabled = xml->getparbool("filter_lfo_enabled", PFilterLfoEnabled); if(xml->enterbranch("FILTER_LFO")) { FilterLfo->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("FM_PARAMETERS")) { PFMVoice = xml->getpar("input_voice", PFMVoice, -1, nvoice - 1); PFMVolume = xml->getpar127("volume", PFMVolume); PFMVolumeDamp = xml->getpar127("volume_damp", PFMVolumeDamp); PFMVelocityScaleFunction = xml->getpar127("velocity_sensing", PFMVelocityScaleFunction); PFMAmpEnvelopeEnabled = xml->getparbool("amp_envelope_enabled", PFMAmpEnvelopeEnabled); if(xml->enterbranch("AMPLITUDE_ENVELOPE")) { FMAmpEnvelope->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("MODULATOR")) { PFMDetune = xml->getpar("detune", PFMDetune, 0, 16383); PFMCoarseDetune = xml->getpar("coarse_detune", PFMCoarseDetune, 0, 16383); PFMDetuneType = xml->getpar127("detune_type", PFMDetuneType); PFMFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled", PFMFreqEnvelopeEnabled); if(xml->enterbranch("FREQUENCY_ENVELOPE")) { FMFreqEnvelope->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("OSCIL")) { FMSmp->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h000066400000000000000000000212241247673406200264440ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer ADnoteParameters.h - Parameters for ADnote (ADsynth) Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef AD_NOTE_PARAMETERS_H #define AD_NOTE_PARAMETERS_H #include "../globals.h" #include "../Misc/Util.h" #include "PresetsArray.h" class EnvelopeParams; class LFOParams; class FilterParams; class Resonance; class OscilGen; class FFTwrapper; enum FMTYPE { NONE, MORPH, RING_MOD, PHASE_MOD, FREQ_MOD, PITCH_MOD }; extern int ADnote_unison_sizes[]; /*****************************************************************/ /* GLOBAL PARAMETERS */ /*****************************************************************/ struct ADnoteGlobalParam { ADnoteGlobalParam(); ~ADnoteGlobalParam(); void defaults(); void add2XML(XMLwrapper *xml); void getfromXML(XMLwrapper *xml); /* The instrument type - MONO/STEREO If the mode is MONO, the panning of voices are not used Stereo=1, Mono=0. */ unsigned char PStereo; /****************************************** * FREQUENCY GLOBAL PARAMETERS * ******************************************/ unsigned short int PDetune; //fine detune unsigned short int PCoarseDetune; //coarse detune+octave unsigned char PDetuneType; //detune type unsigned char PBandwidth; //how much the relative fine detunes of the voices are changed EnvelopeParams *FreqEnvelope; //Frequency Envelope LFOParams *FreqLfo; //Frequency LFO /******************************************** * AMPLITUDE GLOBAL PARAMETERS * ********************************************/ /* Panning - 0 - random 1 - left 64 - center 127 - right */ unsigned char PPanning; unsigned char PVolume; unsigned char PAmpVelocityScaleFunction; EnvelopeParams *AmpEnvelope; LFOParams *AmpLfo; unsigned char PPunchStrength, PPunchTime, PPunchStretch, PPunchVelocitySensing; /****************************************** * FILTER GLOBAL PARAMETERS * ******************************************/ FilterParams *GlobalFilter; // filter velocity sensing unsigned char PFilterVelocityScale; // filter velocity sensing unsigned char PFilterVelocityScaleFunction; EnvelopeParams *FilterEnvelope; LFOParams *FilterLfo; // RESONANCE Resonance *Reson; //how the randomness is applied to the harmonics on more voices using the same oscillator unsigned char Hrandgrouping; }; /***********************************************************/ /* VOICE PARAMETERS */ /***********************************************************/ struct ADnoteVoiceParam { void getfromXML(XMLwrapper *xml, unsigned nvoice); void add2XML(XMLwrapper *xml, bool fmoscilused); void defaults(); void enable(FFTwrapper *fft, Resonance *Reson); void kill(); /** If the voice is enabled */ unsigned char Enabled; /** How many subvoices are used in this voice */ unsigned char Unison_size; /** How subvoices are spread */ unsigned char Unison_frequency_spread; /** How much phase randomization */ unsigned char Unison_phase_randomness; /** Stereo spread of the subvoices*/ unsigned char Unison_stereo_spread; /** Vibratto of the subvoices (which makes the unison more "natural")*/ unsigned char Unison_vibratto; /** Medium speed of the vibratto of the subvoices*/ unsigned char Unison_vibratto_speed; /** Unison invert phase */ unsigned char Unison_invert_phase; //0=none,1=random,2=50%,3=33%,4=25% /** Type of the voice (0=Sound,1=Noise)*/ unsigned char Type; /** Voice Delay */ unsigned char PDelay; /** If the resonance is enabled for this voice */ unsigned char Presonance; // What external oscil should I use, -1 for internal OscilSmp&FMSmp short int Pextoscil, PextFMoscil; // it is not allowed that the externoscil,externFMoscil => current voice // oscillator phases unsigned char Poscilphase, PFMoscilphase; // filter bypass unsigned char Pfilterbypass; /** Voice oscillator */ OscilGen *OscilSmp; /********************************** * FREQUENCY PARAMETERS * **********************************/ /** If the base frequency is fixed to 440 Hz*/ unsigned char Pfixedfreq; /* Equal temperate (this is used only if the Pfixedfreq is enabled) If this parameter is 0, the frequency is fixed (to 440 Hz); if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */ unsigned char PfixedfreqET; /** Fine detune */ unsigned short int PDetune; /** Coarse detune + octave */ unsigned short int PCoarseDetune; /** Detune type */ unsigned char PDetuneType; /* Frequency Envelope */ unsigned char PFreqEnvelopeEnabled; EnvelopeParams *FreqEnvelope; /* Frequency LFO */ unsigned char PFreqLfoEnabled; LFOParams *FreqLfo; /*************************** * AMPLITUDE PARAMETERS * ***************************/ /* Panning 0 - random 1 - left 64 - center 127 - right The Panning is ignored if the instrument is mono */ unsigned char PPanning; /* Voice Volume */ unsigned char PVolume; /* If the Volume negative */ unsigned char PVolumeminus; /* Velocity sensing */ unsigned char PAmpVelocityScaleFunction; /* Amplitude Envelope */ unsigned char PAmpEnvelopeEnabled; EnvelopeParams *AmpEnvelope; /* Amplitude LFO */ unsigned char PAmpLfoEnabled; LFOParams *AmpLfo; /************************* * FILTER PARAMETERS * *************************/ /* Voice Filter */ unsigned char PFilterEnabled; FilterParams *VoiceFilter; /* Filter Envelope */ unsigned char PFilterEnvelopeEnabled; EnvelopeParams *FilterEnvelope; /* LFO Envelope */ unsigned char PFilterLfoEnabled; LFOParams *FilterLfo; /**************************** * MODULLATOR PARAMETERS * ****************************/ /* Modullator Parameters (0=off,1=Morph,2=RM,3=PM,4=FM.. */ unsigned char PFMEnabled; /* Voice that I use as modullator instead of FMSmp. It is -1 if I use FMSmp(default). It maynot be equal or bigger than current voice */ short int PFMVoice; /* Modullator oscillator */ OscilGen *FMSmp; /* Modullator Volume */ unsigned char PFMVolume; /* Modullator damping at higher frequencies */ unsigned char PFMVolumeDamp; /* Modullator Velocity Sensing */ unsigned char PFMVelocityScaleFunction; /* Fine Detune of the Modullator*/ unsigned short int PFMDetune; /* Coarse Detune of the Modullator */ unsigned short int PFMCoarseDetune; /* The detune type */ unsigned char PFMDetuneType; /* Frequency Envelope of the Modullator */ unsigned char PFMFreqEnvelopeEnabled; EnvelopeParams *FMFreqEnvelope; /* Frequency Envelope of the Modullator */ unsigned char PFMAmpEnvelopeEnabled; EnvelopeParams *FMAmpEnvelope; }; class ADnoteParameters:public PresetsArray { public: ADnoteParameters(FFTwrapper *fft_); ~ADnoteParameters(); ADnoteGlobalParam GlobalPar; ADnoteVoiceParam VoicePar[NUM_VOICES]; void defaults(); void add2XML(XMLwrapper *xml); void getfromXML(XMLwrapper *xml); float getBandwidthDetuneMultiplier(); float getUnisonFrequencySpreadCents(int nvoice); int get_unison_size_index(int nvoice); void set_unison_size_index(int nvoice, int index); private: void defaults(int n); //n is the nvoice void EnableVoice(int nvoice); void KillVoice(int nvoice); FFTwrapper *fft; void add2XMLsection(XMLwrapper *xml, int n); void getfromXMLsection(XMLwrapper *xml, int n); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/CMakeLists.txt000066400000000000000000000004541247673406200256370ustar00rootroot00000000000000set(zynaddsubfx_params_SRCS Params/ADnoteParameters.cpp Params/Controller.cpp Params/EnvelopeParams.cpp Params/FilterParams.cpp Params/LFOParams.cpp Params/PADnoteParameters.cpp Params/Presets.cpp Params/PresetsArray.cpp Params/PresetsStore.cpp Params/SUBnoteParameters.cpp PARENT_SCOPE ) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp000066400000000000000000000327111247673406200257270ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Controller.cpp - (Midi) Controllers implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Controller.h" #include #include Controller::Controller() { defaults(); resetall(); } Controller::~Controller() {} void Controller::defaults() { setpitchwheelbendrange(100); //1 halftones expression.receive = 1; panning.depth = 64; filtercutoff.depth = 64; filterq.depth = 64; bandwidth.depth = 64; bandwidth.exponential = 0; modwheel.depth = 80; modwheel.exponential = 0; fmamp.receive = 1; volume.receive = 1; sustain.receive = 1; NRPN.receive = 1; portamento.portamento = 0; portamento.used = 0; portamento.proportional = 0; portamento.propRate = 80; portamento.propDepth = 90; portamento.receive = 1; portamento.time = 64; portamento.updowntimestretch = 64; portamento.pitchthresh = 3; portamento.pitchthreshtype = 1; portamento.noteusing = -1; resonancecenter.depth = 64; resonancebandwidth.depth = 64; initportamento(440.0f, 440.0f, false); // Now has a third argument setportamento(0); } void Controller::resetall() { setpitchwheel(0); //center setexpression(127); setpanning(64); setfiltercutoff(64); setfilterq(64); setbandwidth(64); setmodwheel(64); setfmamp(127); setvolume(127); setsustain(0); setresonancecenter(64); setresonancebw(64); //reset the NRPN NRPN.parhi = -1; NRPN.parlo = -1; NRPN.valhi = -1; NRPN.vallo = -1; } void Controller::setpitchwheel(int value) { pitchwheel.data = value; float cents = value / 8192.0f; cents *= pitchwheel.bendrange; pitchwheel.relfreq = powf(2, cents / 1200.0f); //fprintf(stderr,"%ld %ld -> %.3f\n",pitchwheel.bendrange,pitchwheel.data,pitchwheel.relfreq);fflush(stderr); } void Controller::setpitchwheelbendrange(unsigned short int value) { pitchwheel.bendrange = value; } void Controller::setexpression(int value) { expression.data = value; if(expression.receive != 0) expression.relvolume = value / 127.0f; else expression.relvolume = 1.0f; } void Controller::setpanning(int value) { panning.data = value; panning.pan = (value / 128.0f - 0.5f) * (panning.depth / 64.0f); } void Controller::setfiltercutoff(int value) { filtercutoff.data = value; filtercutoff.relfreq = (value - 64.0f) * filtercutoff.depth / 4096.0f * 3.321928f; //3.3219f..=ln2(10) } void Controller::setfilterq(int value) { filterq.data = value; filterq.relq = powf(30.0f, (value - 64.0f) / 64.0f * (filterq.depth / 64.0f)); } void Controller::setbandwidth(int value) { bandwidth.data = value; if(bandwidth.exponential == 0) { float tmp = powf(25.0f, powf(bandwidth.depth / 127.0f, 1.5f)) - 1.0f; if((value < 64) && (bandwidth.depth >= 64)) tmp = 1.0f; bandwidth.relbw = (value / 64.0f - 1.0f) * tmp + 1.0f; if(bandwidth.relbw < 0.01f) bandwidth.relbw = 0.01f; } else bandwidth.relbw = powf(25.0f, (value - 64.0f) / 64.0f * (bandwidth.depth / 64.0f)); ; } void Controller::setmodwheel(int value) { modwheel.data = value; if(modwheel.exponential == 0) { float tmp = powf(25.0f, powf(modwheel.depth / 127.0f, 1.5f) * 2.0f) / 25.0f; if((value < 64) && (modwheel.depth >= 64)) tmp = 1.0f; modwheel.relmod = (value / 64.0f - 1.0f) * tmp + 1.0f; if(modwheel.relmod < 0.0f) modwheel.relmod = 0.0f; } else modwheel.relmod = powf(25.0f, (value - 64.0f) / 64.0f * (modwheel.depth / 80.0f)); } void Controller::setfmamp(int value) { fmamp.data = value; fmamp.relamp = value / 127.0f; if(fmamp.receive != 0) fmamp.relamp = value / 127.0f; else fmamp.relamp = 1.0f; } void Controller::setvolume(int value) { volume.data = value; if(volume.receive != 0) volume.volume = powf(0.1f, (127 - value) / 127.0f * 2.0f); else volume.volume = 1.0f; } void Controller::setsustain(int value) { sustain.data = value; if(sustain.receive != 0) sustain.sustain = ((value < 64) ? 0 : 1); else sustain.sustain = 0; } void Controller::setportamento(int value) { portamento.data = value; if(portamento.receive != 0) portamento.portamento = ((value < 64) ? 0 : 1); } int Controller::initportamento(float oldfreq, float newfreq, bool legatoflag) { portamento.x = 0.0f; if(legatoflag) { // Legato in progress if(portamento.portamento == 0) return 0; } else // No legato, do the original if...return if((portamento.used != 0) || (portamento.portamento == 0)) return 0; ; float portamentotime = powf(100.0f, portamento.time / 127.0f) / 50.0f; //portamento time in seconds if(portamento.proportional) { //If there is a min(float,float) and a max(float,float) then they //could be used here //Linear functors could also make this nicer if(oldfreq > newfreq) //2 is the center of propRate portamentotime *= powf(oldfreq / newfreq / (portamento.propRate / 127.0f * 3 + .05), (portamento.propDepth / 127.0f * 1.6f + .2)); else //1 is the center of propDepth portamentotime *= powf(newfreq / oldfreq / (portamento.propRate / 127.0f * 3 + .05), (portamento.propDepth / 127.0f * 1.6f + .2)); } if((portamento.updowntimestretch >= 64) && (newfreq < oldfreq)) { if(portamento.updowntimestretch == 127) return 0; portamentotime *= powf(0.1f, (portamento.updowntimestretch - 64) / 63.0f); } if((portamento.updowntimestretch < 64) && (newfreq > oldfreq)) { if(portamento.updowntimestretch == 0) return 0; portamentotime *= powf(0.1f, (64.0f - portamento.updowntimestretch) / 64.0f); } //printf("%f->%f : Time %f\n",oldfreq,newfreq,portamentotime); portamento.dx = synth->buffersize_f / (portamentotime * synth->samplerate_f); portamento.origfreqrap = oldfreq / newfreq; float tmprap = ((portamento.origfreqrap > 1.0f) ? (portamento.origfreqrap) : (1.0f / portamento.origfreqrap)); float thresholdrap = powf(2.0f, portamento.pitchthresh / 12.0f); if((portamento.pitchthreshtype == 0) && (tmprap - 0.00001f > thresholdrap)) return 0; if((portamento.pitchthreshtype == 1) && (tmprap + 0.00001f < thresholdrap)) return 0; portamento.used = 1; portamento.freqrap = portamento.origfreqrap; return 1; } void Controller::updateportamento() { if(portamento.used == 0) return; portamento.x += portamento.dx; if(portamento.x > 1.0f) { portamento.x = 1.0f; portamento.used = 0; } portamento.freqrap = (1.0f - portamento.x) * portamento.origfreqrap + portamento.x; } void Controller::setresonancecenter(int value) { resonancecenter.data = value; resonancecenter.relcenter = powf(3.0f, (value - 64.0f) / 64.0f * (resonancecenter.depth / 64.0f)); } void Controller::setresonancebw(int value) { resonancebandwidth.data = value; resonancebandwidth.relbw = powf(1.5f, (value - 64.0f) / 64.0f * (resonancebandwidth.depth / 127.0f)); } //Returns 0 if there is NRPN or 1 if there is not int Controller::getnrpn(int *parhi, int *parlo, int *valhi, int *vallo) { if(NRPN.receive == 0) return 1; if((NRPN.parhi < 0) || (NRPN.parlo < 0) || (NRPN.valhi < 0) || (NRPN.vallo < 0)) return 1; *parhi = NRPN.parhi; *parlo = NRPN.parlo; *valhi = NRPN.valhi; *vallo = NRPN.vallo; return 0; } void Controller::setparameternumber(unsigned int type, int value) { switch(type) { case C_nrpnhi: NRPN.parhi = value; NRPN.valhi = -1; NRPN.vallo = -1; //clear the values break; case C_nrpnlo: NRPN.parlo = value; NRPN.valhi = -1; NRPN.vallo = -1; //clear the values break; case C_dataentryhi: if((NRPN.parhi >= 0) && (NRPN.parlo >= 0)) NRPN.valhi = value; break; case C_dataentrylo: if((NRPN.parhi >= 0) && (NRPN.parlo >= 0)) NRPN.vallo = value; break; } } void Controller::add2XML(XMLwrapper *xml) { xml->addpar("pitchwheel_bendrange", pitchwheel.bendrange); xml->addparbool("expression_receive", expression.receive); xml->addpar("panning_depth", panning.depth); xml->addpar("filter_cutoff_depth", filtercutoff.depth); xml->addpar("filter_q_depth", filterq.depth); xml->addpar("bandwidth_depth", bandwidth.depth); xml->addpar("mod_wheel_depth", modwheel.depth); xml->addparbool("mod_wheel_exponential", modwheel.exponential); xml->addparbool("fm_amp_receive", fmamp.receive); xml->addparbool("volume_receive", volume.receive); xml->addparbool("sustain_receive", sustain.receive); xml->addparbool("portamento_receive", portamento.receive); xml->addpar("portamento_time", portamento.time); xml->addpar("portamento_pitchthresh", portamento.pitchthresh); xml->addpar("portamento_pitchthreshtype", portamento.pitchthreshtype); xml->addpar("portamento_portamento", portamento.portamento); xml->addpar("portamento_updowntimestretch", portamento.updowntimestretch); xml->addpar("portamento_proportional", portamento.proportional); xml->addpar("portamento_proprate", portamento.propRate); xml->addpar("portamento_propdepth", portamento.propDepth); xml->addpar("resonance_center_depth", resonancecenter.depth); xml->addpar("resonance_bandwidth_depth", resonancebandwidth.depth); } void Controller::getfromXML(XMLwrapper *xml) { pitchwheel.bendrange = xml->getpar("pitchwheel_bendrange", pitchwheel.bendrange, -6400, 6400); expression.receive = xml->getparbool("expression_receive", expression.receive); panning.depth = xml->getpar127("panning_depth", panning.depth); filtercutoff.depth = xml->getpar127("filter_cutoff_depth", filtercutoff.depth); filterq.depth = xml->getpar127("filter_q_depth", filterq.depth); bandwidth.depth = xml->getpar127("bandwidth_depth", bandwidth.depth); modwheel.depth = xml->getpar127("mod_wheel_depth", modwheel.depth); modwheel.exponential = xml->getparbool("mod_wheel_exponential", modwheel.exponential); fmamp.receive = xml->getparbool("fm_amp_receive", fmamp.receive); volume.receive = xml->getparbool("volume_receive", volume.receive); sustain.receive = xml->getparbool("sustain_receive", sustain.receive); portamento.receive = xml->getparbool("portamento_receive", portamento.receive); portamento.time = xml->getpar127("portamento_time", portamento.time); portamento.pitchthresh = xml->getpar127("portamento_pitchthresh", portamento.pitchthresh); portamento.pitchthreshtype = xml->getpar127("portamento_pitchthreshtype", portamento.pitchthreshtype); portamento.portamento = xml->getpar127("portamento_portamento", portamento.portamento); portamento.updowntimestretch = xml->getpar127( "portamento_updowntimestretch", portamento.updowntimestretch); portamento.proportional = xml->getpar127("portamento_proportional", portamento.proportional); portamento.propRate = xml->getpar127("portamento_proprate", portamento.propRate); portamento.propDepth = xml->getpar127("portamento_propdepth", portamento.propDepth); resonancecenter.depth = xml->getpar127("resonance_center_depth", resonancecenter.depth); resonancebandwidth.depth = xml->getpar127("resonance_bandwidth_depth", resonancebandwidth.depth); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h000066400000000000000000000161341247673406200253750ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Controller.h - (Midi) Controllers implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CONTROLLER_H #define CONTROLLER_H #include "../globals.h" #include "../Misc/XMLwrapper.h" /**(Midi) Controllers implementation*/ class Controller { public: Controller(); ~Controller(); void resetall(); void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); //Controllers functions void setpitchwheel(int value); void setpitchwheelbendrange(unsigned short int value); void setexpression(int value); void setpanning(int value); void setfiltercutoff(int value); void setfilterq(int value); void setbandwidth(int value); void setmodwheel(int value); void setfmamp(int value); void setvolume(int value); void setsustain(int value); /**Enable or disable portamento * @param value 0-127 MIDI value (greater than 64 enables)*/ void setportamento(int value); void setresonancecenter(int value); void setresonancebw(int value); void setparameternumber(unsigned int type, int value); //used for RPN and NRPN's int getnrpn(int *parhi, int *parlo, int *valhi, int *vallo); /** * Initialize a portamento * * @param oldfreq Starting frequency of the portamento (Hz) * @param newfreq Ending frequency of the portamento (Hz) * @param legatoflag true when legato is in progress, false otherwise * @returns 1 if properly initialized, 0 otherwise*/ int initportamento(float oldfreq, float newfreq, bool legatoflag); /**Update portamento's freqrap to next value based upon dx*/ void updateportamento(); // Controllers values struct { //Pitch Wheel int data; short int bendrange; //bendrange is in cents float relfreq; //the relative frequency (default is 1.0f) } pitchwheel; struct { //Expression int data; float relvolume; unsigned char receive; } expression; struct { //Panning int data; float pan; unsigned char depth; } panning; struct { //Filter cutoff int data; float relfreq; unsigned char depth; } filtercutoff; struct { //Filter Q int data; float relq; unsigned char depth; } filterq; struct { //Bandwidth int data; float relbw; unsigned char depth; unsigned char exponential; } bandwidth; struct { //Modulation Wheel int data; float relmod; unsigned char depth; unsigned char exponential; } modwheel; struct { //FM amplitude int data; float relamp; unsigned char receive; } fmamp; struct { //Volume int data; float volume; unsigned char receive; } volume; struct { //Sustain int data, sustain; unsigned char receive; } sustain; struct { /** #include #include #include "EnvelopeParams.h" EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_, unsigned char Pforcedrelease_):Presets() { int i; PA_dt = 10; PD_dt = 10; PR_dt = 10; PA_val = 64; PD_val = 64; PS_val = 64; PR_val = 64; for(i = 0; i < MAX_ENVELOPE_POINTS; ++i) { Penvdt[i] = 32; Penvval[i] = 64; } Penvdt[0] = 0; //no used Penvsustain = 1; Penvpoints = 1; Envmode = 1; Penvstretch = Penvstretch_; Pforcedrelease = Pforcedrelease_; Pfreemode = 1; Plinearenvelope = 0; store2defaults(); } EnvelopeParams::~EnvelopeParams() {} float EnvelopeParams::getdt(char i) { float result = (powf(2.0f, Penvdt[(int)i] / 127.0f * 12.0f) - 1.0f) * 10.0f; //miliseconds return result; } /* * ADSR/ASR... initialisations */ void EnvelopeParams::ADSRinit(char A_dt, char D_dt, char S_val, char R_dt) { setpresettype("Penvamplitude"); Envmode = 1; PA_dt = A_dt; PD_dt = D_dt; PS_val = S_val; PR_dt = R_dt; Pfreemode = 0; converttofree(); store2defaults(); } void EnvelopeParams::ADSRinit_dB(char A_dt, char D_dt, char S_val, char R_dt) { setpresettype("Penvamplitude"); Envmode = 2; PA_dt = A_dt; PD_dt = D_dt; PS_val = S_val; PR_dt = R_dt; Pfreemode = 0; converttofree(); store2defaults(); } void EnvelopeParams::ASRinit(char A_val, char A_dt, char R_val, char R_dt) { setpresettype("Penvfrequency"); Envmode = 3; PA_val = A_val; PA_dt = A_dt; PR_val = R_val; PR_dt = R_dt; Pfreemode = 0; converttofree(); store2defaults(); } void EnvelopeParams::ADSRinit_filter(char A_val, char A_dt, char D_val, char D_dt, char R_dt, char R_val) { setpresettype("Penvfilter"); Envmode = 4; PA_val = A_val; PA_dt = A_dt; PD_val = D_val; PD_dt = D_dt; PR_dt = R_dt; PR_val = R_val; Pfreemode = 0; converttofree(); store2defaults(); } void EnvelopeParams::ASRinit_bw(char A_val, char A_dt, char R_val, char R_dt) { setpresettype("Penvbandwidth"); Envmode = 5; PA_val = A_val; PA_dt = A_dt; PR_val = R_val; PR_dt = R_dt; Pfreemode = 0; converttofree(); store2defaults(); } /* * Convert the Envelope to freemode */ void EnvelopeParams::converttofree() { switch(Envmode) { case 1: Penvpoints = 4; Penvsustain = 2; Penvval[0] = 0; Penvdt[1] = PA_dt; Penvval[1] = 127; Penvdt[2] = PD_dt; Penvval[2] = PS_val; Penvdt[3] = PR_dt; Penvval[3] = 0; break; case 2: Penvpoints = 4; Penvsustain = 2; Penvval[0] = 0; Penvdt[1] = PA_dt; Penvval[1] = 127; Penvdt[2] = PD_dt; Penvval[2] = PS_val; Penvdt[3] = PR_dt; Penvval[3] = 0; break; case 3: Penvpoints = 3; Penvsustain = 1; Penvval[0] = PA_val; Penvdt[1] = PA_dt; Penvval[1] = 64; Penvdt[2] = PR_dt; Penvval[2] = PR_val; break; case 4: Penvpoints = 4; Penvsustain = 2; Penvval[0] = PA_val; Penvdt[1] = PA_dt; Penvval[1] = PD_val; Penvdt[2] = PD_dt; Penvval[2] = 64; Penvdt[3] = PR_dt; Penvval[3] = PR_val; break; case 5: Penvpoints = 3; Penvsustain = 1; Penvval[0] = PA_val; Penvdt[1] = PA_dt; Penvval[1] = 64; Penvdt[2] = PR_dt; Penvval[2] = PR_val; break; } } void EnvelopeParams::add2XML(XMLwrapper *xml) { xml->addparbool("free_mode", Pfreemode); xml->addpar("env_points", Penvpoints); xml->addpar("env_sustain", Penvsustain); xml->addpar("env_stretch", Penvstretch); xml->addparbool("forced_release", Pforcedrelease); xml->addparbool("linear_envelope", Plinearenvelope); xml->addpar("A_dt", PA_dt); xml->addpar("D_dt", PD_dt); xml->addpar("R_dt", PR_dt); xml->addpar("A_val", PA_val); xml->addpar("D_val", PD_val); xml->addpar("S_val", PS_val); xml->addpar("R_val", PR_val); if((Pfreemode != 0) || (!xml->minimal)) for(int i = 0; i < Penvpoints; ++i) { xml->beginbranch("POINT", i); if(i != 0) xml->addpar("dt", Penvdt[i]); xml->addpar("val", Penvval[i]); xml->endbranch(); } } void EnvelopeParams::getfromXML(XMLwrapper *xml) { Pfreemode = xml->getparbool("free_mode", Pfreemode); Penvpoints = xml->getpar127("env_points", Penvpoints); Penvsustain = xml->getpar127("env_sustain", Penvsustain); Penvstretch = xml->getpar127("env_stretch", Penvstretch); Pforcedrelease = xml->getparbool("forced_release", Pforcedrelease); Plinearenvelope = xml->getparbool("linear_envelope", Plinearenvelope); PA_dt = xml->getpar127("A_dt", PA_dt); PD_dt = xml->getpar127("D_dt", PD_dt); PR_dt = xml->getpar127("R_dt", PR_dt); PA_val = xml->getpar127("A_val", PA_val); PD_val = xml->getpar127("D_val", PD_val); PS_val = xml->getpar127("S_val", PS_val); PR_val = xml->getpar127("R_val", PR_val); for(int i = 0; i < Penvpoints; ++i) { if(xml->enterbranch("POINT", i) == 0) continue; if(i != 0) Penvdt[i] = xml->getpar127("dt", Penvdt[i]); Penvval[i] = xml->getpar127("val", Penvval[i]); xml->exitbranch(); } if(!Pfreemode) converttofree(); } void EnvelopeParams::defaults() { Penvstretch = Denvstretch; Pforcedrelease = Dforcedrelease; Plinearenvelope = Dlinearenvelope; PA_dt = DA_dt; PD_dt = DD_dt; PR_dt = DR_dt; PA_val = DA_val; PD_val = DD_val; PS_val = DS_val; PR_val = DR_val; Pfreemode = 0; converttofree(); } void EnvelopeParams::store2defaults() { Denvstretch = Penvstretch; Dforcedrelease = Pforcedrelease; Dlinearenvelope = Plinearenvelope; DA_dt = PA_dt; DD_dt = PD_dt; DR_dt = PR_dt; DA_val = PA_val; DD_val = PD_val; DS_val = PS_val; DR_val = PR_val; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h000066400000000000000000000060641247673406200261740ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EnvelopeParams.h - Parameters for Envelope Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ENVELOPE_PARAMS_H #define ENVELOPE_PARAMS_H #include "../globals.h" #include "../Misc/XMLwrapper.h" #include "Presets.h" #define MAX_ENVELOPE_POINTS 40 #define MIN_ENVELOPE_DB -400 class EnvelopeParams:public Presets { public: EnvelopeParams(unsigned char Penvstretch_, unsigned char Pforcedrelease_); ~EnvelopeParams(); void ADSRinit(char A_dt, char D_dt, char S_val, char R_dt); void ADSRinit_dB(char A_dt, char D_dt, char S_val, char R_dt); void ASRinit(char A_val, char A_dt, char R_val, char R_dt); void ADSRinit_filter(char A_val, char A_dt, char D_val, char D_dt, char R_dt, char R_val); void ASRinit_bw(char A_val, char A_dt, char R_val, char R_dt); void converttofree(); void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); float getdt(char i); /* MIDI Parameters */ unsigned char Pfreemode; //1 daca este in modul free sau 0 daca este in mod ADSR,ASR,... unsigned char Penvpoints; unsigned char Penvsustain; //127 pentru dezactivat unsigned char Penvdt[MAX_ENVELOPE_POINTS]; unsigned char Penvval[MAX_ENVELOPE_POINTS]; unsigned char Penvstretch; //64=normal stretch (piano-like), 0=no stretch unsigned char Pforcedrelease; //0 - OFF, 1 - ON unsigned char Plinearenvelope; //if the amplitude envelope is linear unsigned char PA_dt, PD_dt, PR_dt, PA_val, PD_val, PS_val, PR_val; int Envmode; // 1 for ADSR parameters (linear amplitude) // 2 for ADSR_dB parameters (dB amplitude) // 3 for ASR parameters (frequency LFO) // 4 for ADSR_filter parameters (filter parameters) // 5 for ASR_bw parameters (bandwidth parameters) private: void store2defaults(); /* Default parameters */ unsigned char Denvstretch; unsigned char Dforcedrelease; unsigned char Dlinearenvelope; unsigned char DA_dt, DD_dt, DR_dt, DA_val, DD_val, DS_val, DR_val; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp000066400000000000000000000265541247673406200262050ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer FilterParams.cpp - Parameters for filter Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "FilterParams.h" #include "../Misc/Util.h" #include #include #include FilterParams::FilterParams(unsigned char Ptype_, unsigned char Pfreq_, unsigned char Pq_) :PresetsArray() { setpresettype("Pfilter"); Dtype = Ptype_; Dfreq = Pfreq_; Dq = Pq_; changed = false; defaults(); } FilterParams::~FilterParams() {} void FilterParams::defaults() { Ptype = Dtype; Pfreq = Dfreq; Pq = Dq; Pstages = 0; Pfreqtrack = 64; Pgain = 64; Pcategory = 0; Pnumformants = 3; Pformantslowness = 64; for(int j = 0; j < FF_MAX_VOWELS; ++j) defaults(j); ; Psequencesize = 3; for(int i = 0; i < FF_MAX_SEQUENCE; ++i) Psequence[i].nvowel = i % FF_MAX_VOWELS; Psequencestretch = 40; Psequencereversed = 0; Pcenterfreq = 64; //1 kHz Poctavesfreq = 64; Pvowelclearness = 64; } void FilterParams::defaults(int n) { int j = n; for(int i = 0; i < FF_MAX_FORMANTS; ++i) { Pvowels[j].formants[i].freq = (int)(RND * 127.0f); //some random freqs Pvowels[j].formants[i].q = 64; Pvowels[j].formants[i].amp = 127; } } /* * Get the parameters from other FilterParams */ void FilterParams::getfromFilterParams(FilterParams *pars) { defaults(); if(pars == NULL) return; Ptype = pars->Ptype; Pfreq = pars->Pfreq; Pq = pars->Pq; Pstages = pars->Pstages; Pfreqtrack = pars->Pfreqtrack; Pgain = pars->Pgain; Pcategory = pars->Pcategory; Pnumformants = pars->Pnumformants; Pformantslowness = pars->Pformantslowness; for(int j = 0; j < FF_MAX_VOWELS; ++j) for(int i = 0; i < FF_MAX_FORMANTS; ++i) { Pvowels[j].formants[i].freq = pars->Pvowels[j].formants[i].freq; Pvowels[j].formants[i].q = pars->Pvowels[j].formants[i].q; Pvowels[j].formants[i].amp = pars->Pvowels[j].formants[i].amp; } Psequencesize = pars->Psequencesize; for(int i = 0; i < FF_MAX_SEQUENCE; ++i) Psequence[i].nvowel = pars->Psequence[i].nvowel; Psequencestretch = pars->Psequencestretch; Psequencereversed = pars->Psequencereversed; Pcenterfreq = pars->Pcenterfreq; Poctavesfreq = pars->Poctavesfreq; Pvowelclearness = pars->Pvowelclearness; } /* * Parameter control */ float FilterParams::getfreq() { return (Pfreq / 64.0f - 1.0f) * 5.0f; } float FilterParams::getq() { return expf(powf((float) Pq / 127.0f, 2) * logf(1000.0f)) - 0.9f; } float FilterParams::getfreqtracking(float notefreq) { return logf(notefreq / 440.0f) * (Pfreqtrack - 64.0f) / (64.0f * LOG_2); } float FilterParams::getgain() { return (Pgain / 64.0f - 1.0f) * 30.0f; //-30..30dB } /* * Get the center frequency of the formant's graph */ float FilterParams::getcenterfreq() { return 10000.0f * powf(10, -(1.0f - Pcenterfreq / 127.0f) * 2.0f); } /* * Get the number of octave that the formant functions applies to */ float FilterParams::getoctavesfreq() { return 0.25f + 10.0f * Poctavesfreq / 127.0f; } /* * Get the frequency from x, where x is [0..1] */ float FilterParams::getfreqx(float x) { if(x > 1.0f) x = 1.0f; float octf = powf(2.0f, getoctavesfreq()); return getcenterfreq() / sqrt(octf) * powf(octf, x); } /* * Get the x coordinate from frequency (used by the UI) */ float FilterParams::getfreqpos(float freq) { return (logf(freq) - logf(getfreqx(0.0f))) / logf(2.0f) / getoctavesfreq(); } /* * Get the freq. response of the formant filter */ void FilterParams::formantfilterH(int nvowel, int nfreqs, float *freqs) { float c[3], d[3]; float filter_freq, filter_q, filter_amp; float omega, sn, cs, alpha; for(int i = 0; i < nfreqs; ++i) freqs[i] = 0.0f; //for each formant... for(int nformant = 0; nformant < Pnumformants; ++nformant) { //compute formant parameters(frequency,amplitude,etc.) filter_freq = getformantfreq(Pvowels[nvowel].formants[nformant].freq); filter_q = getformantq(Pvowels[nvowel].formants[nformant].q) * getq(); if(Pstages > 0) filter_q = (filter_q > 1.0f ? powf(filter_q, 1.0f / (Pstages + 1)) : filter_q); filter_amp = getformantamp(Pvowels[nvowel].formants[nformant].amp); if(filter_freq <= (synth->samplerate / 2 - 100.0f)) { omega = 2 * PI * filter_freq / synth->samplerate_f; sn = sinf(omega); cs = cosf(omega); alpha = sn / (2 * filter_q); float tmp = 1 + alpha; c[0] = alpha / tmp *sqrt(filter_q + 1); c[1] = 0; c[2] = -alpha / tmp *sqrt(filter_q + 1); d[1] = -2 * cs / tmp * (-1); d[2] = (1 - alpha) / tmp * (-1); } else continue; for(int i = 0; i < nfreqs; ++i) { float freq = getfreqx(i / (float) nfreqs); if(freq > synth->samplerate / 2) { for(int tmp = i; tmp < nfreqs; ++tmp) freqs[tmp] = 0.0f; break; } float fr = freq / synth->samplerate * PI * 2.0f; float x = c[0], y = 0.0f; for(int n = 1; n < 3; ++n) { x += cosf(n * fr) * c[n]; y -= sinf(n * fr) * c[n]; } float h = x * x + y * y; x = 1.0f; y = 0.0f; for(int n = 1; n < 3; ++n) { x -= cosf(n * fr) * d[n]; y += sinf(n * fr) * d[n]; } h = h / (x * x + y * y); freqs[i] += powf(h, (Pstages + 1.0f) / 2.0f) * filter_amp; } } for(int i = 0; i < nfreqs; ++i) { if(freqs[i] > 0.000000001f) freqs[i] = rap2dB(freqs[i]) + getgain(); else freqs[i] = -90.0f; } } /* * Transforms a parameter to the real value */ float FilterParams::getformantfreq(unsigned char freq) { float result = getfreqx(freq / 127.0f); return result; } float FilterParams::getformantamp(unsigned char amp) { float result = powf(0.1f, (1.0f - amp / 127.0f) * 4.0f); return result; } float FilterParams::getformantq(unsigned char q) { //temp float result = powf(25.0f, (q - 32.0f) / 64.0f); return result; } void FilterParams::add2XMLsection(XMLwrapper *xml, int n) { int nvowel = n; for(int nformant = 0; nformant < FF_MAX_FORMANTS; ++nformant) { xml->beginbranch("FORMANT", nformant); xml->addpar("freq", Pvowels[nvowel].formants[nformant].freq); xml->addpar("amp", Pvowels[nvowel].formants[nformant].amp); xml->addpar("q", Pvowels[nvowel].formants[nformant].q); xml->endbranch(); } } void FilterParams::add2XML(XMLwrapper *xml) { //filter parameters xml->addpar("category", Pcategory); xml->addpar("type", Ptype); xml->addpar("freq", Pfreq); xml->addpar("q", Pq); xml->addpar("stages", Pstages); xml->addpar("freq_track", Pfreqtrack); xml->addpar("gain", Pgain); //formant filter parameters if((Pcategory == 1) || (!xml->minimal)) { xml->beginbranch("FORMANT_FILTER"); xml->addpar("num_formants", Pnumformants); xml->addpar("formant_slowness", Pformantslowness); xml->addpar("vowel_clearness", Pvowelclearness); xml->addpar("center_freq", Pcenterfreq); xml->addpar("octaves_freq", Poctavesfreq); for(int nvowel = 0; nvowel < FF_MAX_VOWELS; ++nvowel) { xml->beginbranch("VOWEL", nvowel); add2XMLsection(xml, nvowel); xml->endbranch(); } xml->addpar("sequence_size", Psequencesize); xml->addpar("sequence_stretch", Psequencestretch); xml->addparbool("sequence_reversed", Psequencereversed); for(int nseq = 0; nseq < FF_MAX_SEQUENCE; ++nseq) { xml->beginbranch("SEQUENCE_POS", nseq); xml->addpar("vowel_id", Psequence[nseq].nvowel); xml->endbranch(); } xml->endbranch(); } } void FilterParams::getfromXMLsection(XMLwrapper *xml, int n) { int nvowel = n; for(int nformant = 0; nformant < FF_MAX_FORMANTS; ++nformant) { if(xml->enterbranch("FORMANT", nformant) == 0) continue; Pvowels[nvowel].formants[nformant].freq = xml->getpar127( "freq", Pvowels[nvowel ].formants[nformant].freq); Pvowels[nvowel].formants[nformant].amp = xml->getpar127( "amp", Pvowels[nvowel ].formants[nformant].amp); Pvowels[nvowel].formants[nformant].q = xml->getpar127("q", Pvowels[nvowel].formants[nformant].q); xml->exitbranch(); } } void FilterParams::getfromXML(XMLwrapper *xml) { //filter parameters Pcategory = xml->getpar127("category", Pcategory); Ptype = xml->getpar127("type", Ptype); Pfreq = xml->getpar127("freq", Pfreq); Pq = xml->getpar127("q", Pq); Pstages = xml->getpar127("stages", Pstages); Pfreqtrack = xml->getpar127("freq_track", Pfreqtrack); Pgain = xml->getpar127("gain", Pgain); //formant filter parameters if(xml->enterbranch("FORMANT_FILTER")) { Pnumformants = xml->getpar127("num_formants", Pnumformants); Pformantslowness = xml->getpar127("formant_slowness", Pformantslowness); Pvowelclearness = xml->getpar127("vowel_clearness", Pvowelclearness); Pcenterfreq = xml->getpar127("center_freq", Pcenterfreq); Poctavesfreq = xml->getpar127("octaves_freq", Poctavesfreq); for(int nvowel = 0; nvowel < FF_MAX_VOWELS; ++nvowel) { if(xml->enterbranch("VOWEL", nvowel) == 0) continue; getfromXMLsection(xml, nvowel); xml->exitbranch(); } Psequencesize = xml->getpar127("sequence_size", Psequencesize); Psequencestretch = xml->getpar127("sequence_stretch", Psequencestretch); Psequencereversed = xml->getparbool("sequence_reversed", Psequencereversed); for(int nseq = 0; nseq < FF_MAX_SEQUENCE; ++nseq) { if(xml->enterbranch("SEQUENCE_POS", nseq) == 0) continue; Psequence[nseq].nvowel = xml->getpar("vowel_id", Psequence[nseq].nvowel, 0, FF_MAX_VOWELS - 1); xml->exitbranch(); } xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h000066400000000000000000000070451247673406200256440ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer FilterParams.h - Parameters for filter Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef FILTER_PARAMS_H #define FILTER_PARAMS_H #include "../globals.h" #include "../Misc/XMLwrapper.h" #include "PresetsArray.h" class FilterParams:public PresetsArray { public: FilterParams(unsigned char Ptype_, unsigned char Pfreq, unsigned char Pq_); ~FilterParams(); void add2XML(XMLwrapper *xml); void add2XMLsection(XMLwrapper *xml, int n); void defaults(); void getfromXML(XMLwrapper *xml); void getfromXMLsection(XMLwrapper *xml, int n); void getfromFilterParams(FilterParams *pars); float getfreq(); float getq(); float getfreqtracking(float notefreq); float getgain(); unsigned char Pcategory; //Filter category (Analog/Formant/StVar) unsigned char Ptype; // Filter type (for analog lpf,hpf,bpf..) unsigned char Pfreq; // Frequency (64-central frequency) unsigned char Pq; // Q parameters (resonance or bandwidth) unsigned char Pstages; //filter stages+1 unsigned char Pfreqtrack; //how the filter frequency is changing according the note frequency unsigned char Pgain; //filter's output gain //Formant filter parameters unsigned char Pnumformants; //how many formants are used unsigned char Pformantslowness; //how slow varies the formants unsigned char Pvowelclearness; //how vowels are kept clean (how much try to avoid "mixed" vowels) unsigned char Pcenterfreq, Poctavesfreq; //the center frequency of the res. func., and the number of octaves struct { struct { unsigned char freq, amp, q; //frequency,amplitude,Q } formants[FF_MAX_FORMANTS]; } Pvowels[FF_MAX_VOWELS]; unsigned char Psequencesize; //how many vowels are in the sequence unsigned char Psequencestretch; //how the sequence is stretched (how the input from filter envelopes/LFOs/etc. is "stretched") unsigned char Psequencereversed; //if the input from filter envelopes/LFOs/etc. is reversed(negated) struct { unsigned char nvowel; //the vowel from the position } Psequence[FF_MAX_SEQUENCE]; float getcenterfreq(); float getoctavesfreq(); float getfreqpos(float freq); float getfreqx(float x); void formantfilterH(int nvowel, int nfreqs, float *freqs); //used by UI float getformantfreq(unsigned char freq); float getformantamp(unsigned char amp); float getformantq(unsigned char q); bool changed; private: void defaults(int n); //stored default parameters unsigned char Dtype; unsigned char Dfreq; unsigned char Dq; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp000066400000000000000000000060371247673406200253720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer LFOParams.cpp - Parameters for LFO Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "../globals.h" #include "LFOParams.h" int LFOParams::time; LFOParams::LFOParams(char Pfreq_, char Pintensity_, char Pstartphase_, char PLFOtype_, char Prandomness_, char Pdelay_, char Pcontinous_, char fel_):Presets() { switch(fel_) { case 0: setpresettype("Plfofrequency"); break; case 1: setpresettype("Plfoamplitude"); break; case 2: setpresettype("Plfofilter"); break; } Dfreq = Pfreq_; Dintensity = Pintensity_; Dstartphase = Pstartphase_; DLFOtype = PLFOtype_; Drandomness = Prandomness_; Ddelay = Pdelay_; Dcontinous = Pcontinous_; fel = fel_; time = 0; defaults(); } LFOParams::~LFOParams() {} void LFOParams::defaults() { Pfreq = Dfreq / 127.0f; Pintensity = Dintensity; Pstartphase = Dstartphase; PLFOtype = DLFOtype; Prandomness = Drandomness; Pdelay = Ddelay; Pcontinous = Dcontinous; Pfreqrand = 0; Pstretch = 64; } void LFOParams::add2XML(XMLwrapper *xml) { xml->addparreal("freq", Pfreq); xml->addpar("intensity", Pintensity); xml->addpar("start_phase", Pstartphase); xml->addpar("lfo_type", PLFOtype); xml->addpar("randomness_amplitude", Prandomness); xml->addpar("randomness_frequency", Pfreqrand); xml->addpar("delay", Pdelay); xml->addpar("stretch", Pstretch); xml->addparbool("continous", Pcontinous); } void LFOParams::getfromXML(XMLwrapper *xml) { Pfreq = xml->getparreal("freq", Pfreq, 0.0f, 1.0f); Pintensity = xml->getpar127("intensity", Pintensity); Pstartphase = xml->getpar127("start_phase", Pstartphase); PLFOtype = xml->getpar127("lfo_type", PLFOtype); Prandomness = xml->getpar127("randomness_amplitude", Prandomness); Pfreqrand = xml->getpar127("randomness_frequency", Pfreqrand); Pdelay = xml->getpar127("delay", Pdelay); Pstretch = xml->getpar127("stretch", Pstretch); Pcontinous = xml->getparbool("continous", Pcontinous); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h000066400000000000000000000046301247673406200250340ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer LFOParams.h - Parameters for LFO Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef LFO_PARAMS_H #define LFO_PARAMS_H #include "../Misc/XMLwrapper.h" #include "Presets.h" class LFOParams:public Presets { public: LFOParams(char Pfreq_, char Pintensity_, char Pstartphase_, char PLFOtype_, char Prandomness_, char Pdelay_, char Pcontinous, char fel_); ~LFOParams(); void add2XML(XMLwrapper *xml); void defaults(); /**Loads the LFO from the xml*/ void getfromXML(XMLwrapper *xml); /* MIDI Parameters*/ float Pfreq; /** #include "PADnoteParameters.h" #include "../Misc/WavFile.h" PADnoteParameters::PADnoteParameters(FFTwrapper *fft_, pthread_mutex_t *mutex_):Presets() { setpresettype("Ppadsynth"); fft = fft_; mutex = mutex_; resonance = new Resonance(); oscilgen = new OscilGen(fft_, resonance); oscilgen->ADvsPAD = true; FreqEnvelope = new EnvelopeParams(0, 0); FreqEnvelope->ASRinit(64, 50, 64, 60); FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0); AmpEnvelope = new EnvelopeParams(64, 1); AmpEnvelope->ADSRinit_dB(0, 40, 127, 25); AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1); GlobalFilter = new FilterParams(2, 94, 40); FilterEnvelope = new EnvelopeParams(0, 1); FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64); FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2); for(int i = 0; i < PAD_MAX_SAMPLES; ++i) sample[i].smp = NULL; newsample.smp = NULL; defaults(); } PADnoteParameters::~PADnoteParameters() { deletesamples(); delete (oscilgen); delete (resonance); delete (FreqEnvelope); delete (FreqLfo); delete (AmpEnvelope); delete (AmpLfo); delete (GlobalFilter); delete (FilterEnvelope); delete (FilterLfo); } void PADnoteParameters::defaults() { Pmode = 0; Php.base.type = 0; Php.base.par1 = 80; Php.freqmult = 0; Php.modulator.par1 = 0; Php.modulator.freq = 30; Php.width = 127; Php.amp.type = 0; Php.amp.mode = 0; Php.amp.par1 = 80; Php.amp.par2 = 64; Php.autoscale = true; Php.onehalf = 0; setPbandwidth(500); Pbwscale = 0; resonance->defaults(); oscilgen->defaults(); Phrpos.type = 0; Phrpos.par1 = 64; Phrpos.par2 = 64; Phrpos.par3 = 0; Pquality.samplesize = 3; Pquality.basenote = 4; Pquality.oct = 3; Pquality.smpoct = 2; PStereo = 1; //stereo /* Frequency Global Parameters */ Pfixedfreq = 0; PfixedfreqET = 0; PDetune = 8192; //zero PCoarseDetune = 0; PDetuneType = 1; FreqEnvelope->defaults(); FreqLfo->defaults(); /* Amplitude Global Parameters */ PVolume = 90; PPanning = 64; //center PAmpVelocityScaleFunction = 64; AmpEnvelope->defaults(); AmpLfo->defaults(); PPunchStrength = 0; PPunchTime = 60; PPunchStretch = 64; PPunchVelocitySensing = 72; /* Filter Global Parameters*/ PFilterVelocityScale = 64; PFilterVelocityScaleFunction = 64; GlobalFilter->defaults(); FilterEnvelope->defaults(); FilterLfo->defaults(); deletesamples(); } void PADnoteParameters::deletesample(int n) { if((n < 0) || (n >= PAD_MAX_SAMPLES)) return; if(sample[n].smp != NULL) { delete[] sample[n].smp; sample[n].smp = NULL; } sample[n].size = 0; sample[n].basefreq = 440.0f; } void PADnoteParameters::deletesamples() { for(int i = 0; i < PAD_MAX_SAMPLES; ++i) deletesample(i); } /* * Get the harmonic profile (i.e. the frequency distributio of a single harmonic) */ float PADnoteParameters::getprofile(float *smp, int size) { for(int i = 0; i < size; ++i) smp[i] = 0.0f; const int supersample = 16; float basepar = powf(2.0f, (1.0f - Php.base.par1 / 127.0f) * 12.0f); float freqmult = floor(powf(2.0f, Php.freqmult / 127.0f * 5.0f) + 0.000001f); float modfreq = floor(powf(2.0f, Php.modulator.freq / 127.0f * 5.0f) + 0.000001f); float modpar1 = powf(Php.modulator.par1 / 127.0f, 4.0f) * 5.0f / sqrt( modfreq); float amppar1 = powf(2.0f, powf(Php.amp.par1 / 127.0f, 2.0f) * 10.0f) - 0.999f; float amppar2 = (1.0f - Php.amp.par2 / 127.0f) * 0.998f + 0.001f; float width = powf(150.0f / (Php.width + 22.0f), 2.0f); for(int i = 0; i < size * supersample; ++i) { bool makezero = false; float x = i * 1.0f / (size * (float) supersample); float origx = x; //do the sizing (width) x = (x - 0.5f) * width + 0.5f; if(x < 0.0f) { x = 0.0f; makezero = true; } else if(x > 1.0f) { x = 1.0f; makezero = true; } //compute the full profile or one half switch(Php.onehalf) { case 1: x = x * 0.5f + 0.5f; break; case 2: x = x * 0.5f; break; } float x_before_freq_mult = x; //do the frequency multiplier x *= freqmult; //do the modulation of the profile x += sinf(x_before_freq_mult * 3.1415926f * modfreq) * modpar1; x = fmod(x + 1000.0f, 1.0f) * 2.0f - 1.0f; //this is the base function of the profile float f; switch(Php.base.type) { case 1: f = expf(-(x * x) * basepar); if(f < 0.4f) f = 0.0f; else f = 1.0f; break; case 2: f = expf(-(fabs(x)) * sqrt(basepar)); break; default: f = expf(-(x * x) * basepar); break; } if(makezero) f = 0.0f; float amp = 1.0f; origx = origx * 2.0f - 1.0f; //compute the amplitude multiplier switch(Php.amp.type) { case 1: amp = expf(-(origx * origx) * 10.0f * amppar1); break; case 2: amp = 0.5f * (1.0f + cosf(3.1415926f * origx * sqrt(amppar1 * 4.0f + 1.0f))); break; case 3: amp = 1.0f / (powf(origx * (amppar1 * 2.0f + 0.8f), 14.0f) + 1.0f); break; } //apply the amplitude multiplier float finalsmp = f; if(Php.amp.type != 0) switch(Php.amp.mode) { case 0: finalsmp = amp * (1.0f - amppar2) + finalsmp * amppar2; break; case 1: finalsmp *= amp * (1.0f - amppar2) + amppar2; break; case 2: finalsmp = finalsmp / (amp + powf(amppar2, 4.0f) * 20.0f + 0.0001f); break; case 3: finalsmp = amp / (finalsmp + powf(amppar2, 4.0f) * 20.0f + 0.0001f); break; } ; smp[i / supersample] += finalsmp / supersample; } //normalize the profile (make the max. to be equal to 1.0f) float max = 0.0f; for(int i = 0; i < size; ++i) { if(smp[i] < 0.0f) smp[i] = 0.0f; if(smp[i] > max) max = smp[i]; } if(max < 0.00001f) max = 1.0f; for(int i = 0; i < size; ++i) smp[i] /= max; if(!Php.autoscale) return 0.5f; //compute the estimated perceived bandwidth float sum = 0.0f; int i; for(i = 0; i < size / 2 - 2; ++i) { sum += smp[i] * smp[i] + smp[size - i - 1] * smp[size - i - 1]; if(sum >= 4.0f) break; } float result = 1.0f - 2.0f * i / (float) size; return result; } /* * Compute the real bandwidth in cents and returns it * Also, sets the bandwidth parameter */ float PADnoteParameters::setPbandwidth(int Pbandwidth) { this->Pbandwidth = Pbandwidth; float result = powf(Pbandwidth / 1000.0f, 1.1f); result = powf(10.0f, result * 4.0f) * 0.25f; return result; } /* * Get the harmonic(overtone) position */ float PADnoteParameters::getNhr(int n) { float result = 1.0f; float par1 = powf(10.0f, -(1.0f - Phrpos.par1 / 255.0f) * 3.0f); float par2 = Phrpos.par2 / 255.0f; float n0 = n - 1.0f; float tmp = 0.0f; int thresh = 0; switch(Phrpos.type) { case 1: thresh = (int)(par2 * par2 * 100.0f) + 1; if(n < thresh) result = n; else result = 1.0f + n0 + (n0 - thresh + 1.0f) * par1 * 8.0f; break; case 2: thresh = (int)(par2 * par2 * 100.0f) + 1; if(n < thresh) result = n; else result = 1.0f + n0 - (n0 - thresh + 1.0f) * par1 * 0.90f; break; case 3: tmp = par1 * 100.0f + 1.0f; result = powf(n0 / tmp, 1.0f - par2 * 0.8f) * tmp + 1.0f; break; case 4: result = n0 * (1.0f - par1) + powf(n0 * 0.1f, par2 * 3.0f + 1.0f) * par1 * 10.0f + 1.0f; break; case 5: result = n0 + sinf(n0 * par2 * par2 * PI * 0.999f) * sqrt(par1) * 2.0f + 1.0f; break; case 6: tmp = powf(par2 * 2.0f, 2.0f) + 0.1f; result = n0 * powf(1.0f + par1 * powf(n0 * 0.8f, tmp), tmp) + 1.0f; break; case 7: result = (n + Phrpos.par1 / 255.0f) / (Phrpos.par1 / 255.0f + 1); break; default: result = n; break; } float par3 = Phrpos.par3 / 255.0f; float iresult = floor(result + 0.5f); float dresult = result - iresult; result = iresult + (1.0f - par3) * dresult; return result; } /* * Generates the long spectrum for Bandwidth mode (only amplitudes are generated; phases will be random) */ void PADnoteParameters::generatespectrum_bandwidthMode(float *spectrum, int size, float basefreq, float *profile, int profilesize, float bwadjust) { for(int i = 0; i < size; ++i) spectrum[i] = 0.0f; float harmonics[synth->oscilsize / 2]; for(int i = 0; i < synth->oscilsize / 2; ++i) harmonics[i] = 0.0f; //get the harmonic structure from the oscillator (I am using the frequency amplitudes, only) oscilgen->get(harmonics, basefreq, false); //normalize float max = 0.0f; for(int i = 0; i < synth->oscilsize / 2; ++i) if(harmonics[i] > max) max = harmonics[i]; if(max < 0.000001f) max = 1; for(int i = 0; i < synth->oscilsize / 2; ++i) harmonics[i] /= max; for(int nh = 1; nh < synth->oscilsize / 2; ++nh) { //for each harmonic float realfreq = getNhr(nh) * basefreq; if(realfreq > synth->samplerate_f * 0.49999f) break; if(realfreq < 20.0f) break; if(harmonics[nh - 1] < 1e-4) continue; //compute the bandwidth of each harmonic float bandwidthcents = setPbandwidth(Pbandwidth); float bw = (powf(2.0f, bandwidthcents / 1200.0f) - 1.0f) * basefreq / bwadjust; float power = 1.0f; switch(Pbwscale) { case 0: power = 1.0f; break; case 1: power = 0.0f; break; case 2: power = 0.25f; break; case 3: power = 0.5f; break; case 4: power = 0.75f; break; case 5: power = 1.5f; break; case 6: power = 2.0f; break; case 7: power = -0.5f; break; } bw = bw * powf(realfreq / basefreq, power); int ibw = (int)((bw / (synth->samplerate_f * 0.5f) * size)) + 1; float amp = harmonics[nh - 1]; if(resonance->Penabled) amp *= resonance->getfreqresponse(realfreq); if(ibw > profilesize) { //if the bandwidth is larger than the profilesize float rap = sqrt((float)profilesize / (float)ibw); int cfreq = (int) (realfreq / (synth->samplerate_f * 0.5f) * size) - ibw / 2; for(int i = 0; i < ibw; ++i) { int src = (int)(i * rap * rap); int spfreq = i + cfreq; if(spfreq < 0) continue; if(spfreq >= size) break; spectrum[spfreq] += amp * profile[src] * rap; } } else { //if the bandwidth is smaller than the profilesize float rap = sqrt((float)ibw / (float)profilesize); float ibasefreq = realfreq / (synth->samplerate_f * 0.5f) * size; for(int i = 0; i < profilesize; ++i) { float idfreq = i / (float)profilesize - 0.5f; idfreq *= ibw; int spfreq = (int) (idfreq + ibasefreq); float fspfreq = fmodf((float)idfreq + ibasefreq, 1.0f); if(spfreq <= 0) continue; if(spfreq >= size - 1) break; spectrum[spfreq] += amp * profile[i] * rap * (1.0f - fspfreq); spectrum[spfreq + 1] += amp * profile[i] * rap * fspfreq; } } } } /* * Generates the long spectrum for non-Bandwidth modes (only amplitudes are generated; phases will be random) */ void PADnoteParameters::generatespectrum_otherModes(float *spectrum, int size, float basefreq) { for(int i = 0; i < size; ++i) spectrum[i] = 0.0f; float harmonics[synth->oscilsize / 2]; for(int i = 0; i < synth->oscilsize / 2; ++i) harmonics[i] = 0.0f; //get the harmonic structure from the oscillator (I am using the frequency amplitudes, only) oscilgen->get(harmonics, basefreq, false); //normalize float max = 0.0f; for(int i = 0; i < synth->oscilsize / 2; ++i) if(harmonics[i] > max) max = harmonics[i]; if(max < 0.000001f) max = 1; for(int i = 0; i < synth->oscilsize / 2; ++i) harmonics[i] /= max; for(int nh = 1; nh < synth->oscilsize / 2; ++nh) { //for each harmonic float realfreq = getNhr(nh) * basefreq; ///sa fac aici interpolarea si sa am grija daca frecv descresc if(realfreq > synth->samplerate_f * 0.49999f) break; if(realfreq < 20.0f) break; // if (harmonics[nh-1]<1e-4) continue; float amp = harmonics[nh - 1]; if(resonance->Penabled) amp *= resonance->getfreqresponse(realfreq); int cfreq = (int) (realfreq / (synth->samplerate_f * 0.5f) * size); spectrum[cfreq] = amp + 1e-9; } if(Pmode != 1) { int old = 0; for(int k = 1; k < size; ++k) if((spectrum[k] > 1e-10) || (k == (size - 1))) { int delta = k - old; float val1 = spectrum[old]; float val2 = spectrum[k]; float idelta = 1.0f / delta; for(int i = 0; i < delta; ++i) { float x = idelta * i; spectrum[old + i] = val1 * (1.0f - x) + val2 * x; } old = k; } } } /* * Applies the parameters (i.e. computes all the samples, based on parameters); */ void PADnoteParameters::applyparameters(bool lockmutex) { const int samplesize = (((int) 1) << (Pquality.samplesize + 14)); int spectrumsize = samplesize / 2; float *spectrum = new float[spectrumsize]; int profilesize = 512; float profile[profilesize]; float bwadjust = getprofile(profile, profilesize); // for (int i=0;ifreqs2smps(fftfreqs, newsample.smp); //that's all; here is the only ifft for the whole sample; no windows are used ;-) //normalize(rms) float rms = 0.0f; for(int i = 0; i < samplesize; ++i) rms += newsample.smp[i] * newsample.smp[i]; rms = sqrt(rms); if(rms < 0.000001f) rms = 1.0f; rms *= sqrt(262144.0f / samplesize); for(int i = 0; i < samplesize; ++i) newsample.smp[i] *= 1.0f / rms * 50.0f; //prepare extra samples used by the linear or cubic interpolation for(int i = 0; i < extra_samples; ++i) newsample.smp[i + samplesize] = newsample.smp[i]; //replace the current sample with the new computed sample if(lockmutex) { pthread_mutex_lock(mutex); deletesample(nsample); sample[nsample].smp = newsample.smp; sample[nsample].size = samplesize; sample[nsample].basefreq = basefreq * basefreqadjust; pthread_mutex_unlock(mutex); } else { deletesample(nsample); sample[nsample].smp = newsample.smp; sample[nsample].size = samplesize; sample[nsample].basefreq = basefreq * basefreqadjust; } newsample.smp = NULL; } delete (fft); delete[] fftfreqs; delete[] spectrum; //delete the additional samples that might exists and are not useful if(lockmutex) { pthread_mutex_lock(mutex); for(int i = samplemax; i < PAD_MAX_SAMPLES; ++i) deletesample(i); pthread_mutex_unlock(mutex); } else for(int i = samplemax; i < PAD_MAX_SAMPLES; ++i) deletesample(i); ; } void PADnoteParameters::export2wav(std::string basefilename) { applyparameters(true); basefilename += "_PADsynth_"; for(int k = 0; k < PAD_MAX_SAMPLES; ++k) { if(sample[k].smp == NULL) continue; char tmpstr[20]; snprintf(tmpstr, 20, "_%02d", k + 1); std::string filename = basefilename + std::string(tmpstr) + ".wav"; WavFile wav(filename, synth->samplerate, 1); if(wav.good()) { int nsmps = sample[k].size; short int *smps = new short int[nsmps]; for(int i = 0; i < nsmps; ++i) smps[i] = (short int)(sample[k].smp[i] * 32767.0f); wav.writeMonoSamples(nsmps, smps); } } } void PADnoteParameters::add2XML(XMLwrapper *xml) { xml->setPadSynth(true); xml->addparbool("stereo", PStereo); xml->addpar("mode", Pmode); xml->addpar("bandwidth", Pbandwidth); xml->addpar("bandwidth_scale", Pbwscale); xml->beginbranch("HARMONIC_PROFILE"); xml->addpar("base_type", Php.base.type); xml->addpar("base_par1", Php.base.par1); xml->addpar("frequency_multiplier", Php.freqmult); xml->addpar("modulator_par1", Php.modulator.par1); xml->addpar("modulator_frequency", Php.modulator.freq); xml->addpar("width", Php.width); xml->addpar("amplitude_multiplier_type", Php.amp.type); xml->addpar("amplitude_multiplier_mode", Php.amp.mode); xml->addpar("amplitude_multiplier_par1", Php.amp.par1); xml->addpar("amplitude_multiplier_par2", Php.amp.par2); xml->addparbool("autoscale", Php.autoscale); xml->addpar("one_half", Php.onehalf); xml->endbranch(); xml->beginbranch("OSCIL"); oscilgen->add2XML(xml); xml->endbranch(); xml->beginbranch("RESONANCE"); resonance->add2XML(xml); xml->endbranch(); xml->beginbranch("HARMONIC_POSITION"); xml->addpar("type", Phrpos.type); xml->addpar("parameter1", Phrpos.par1); xml->addpar("parameter2", Phrpos.par2); xml->addpar("parameter3", Phrpos.par3); xml->endbranch(); xml->beginbranch("SAMPLE_QUALITY"); xml->addpar("samplesize", Pquality.samplesize); xml->addpar("basenote", Pquality.basenote); xml->addpar("octaves", Pquality.oct); xml->addpar("samples_per_octave", Pquality.smpoct); xml->endbranch(); xml->beginbranch("AMPLITUDE_PARAMETERS"); xml->addpar("volume", PVolume); xml->addpar("panning", PPanning); xml->addpar("velocity_sensing", PAmpVelocityScaleFunction); xml->addpar("punch_strength", PPunchStrength); xml->addpar("punch_time", PPunchTime); xml->addpar("punch_stretch", PPunchStretch); xml->addpar("punch_velocity_sensing", PPunchVelocitySensing); xml->beginbranch("AMPLITUDE_ENVELOPE"); AmpEnvelope->add2XML(xml); xml->endbranch(); xml->beginbranch("AMPLITUDE_LFO"); AmpLfo->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->beginbranch("FREQUENCY_PARAMETERS"); xml->addpar("fixed_freq", Pfixedfreq); xml->addpar("fixed_freq_et", PfixedfreqET); xml->addpar("detune", PDetune); xml->addpar("coarse_detune", PCoarseDetune); xml->addpar("detune_type", PDetuneType); xml->beginbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->add2XML(xml); xml->endbranch(); xml->beginbranch("FREQUENCY_LFO"); FreqLfo->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->beginbranch("FILTER_PARAMETERS"); xml->addpar("velocity_sensing_amplitude", PFilterVelocityScale); xml->addpar("velocity_sensing", PFilterVelocityScaleFunction); xml->beginbranch("FILTER"); GlobalFilter->add2XML(xml); xml->endbranch(); xml->beginbranch("FILTER_ENVELOPE"); FilterEnvelope->add2XML(xml); xml->endbranch(); xml->beginbranch("FILTER_LFO"); FilterLfo->add2XML(xml); xml->endbranch(); xml->endbranch(); } void PADnoteParameters::getfromXML(XMLwrapper *xml) { PStereo = xml->getparbool("stereo", PStereo); Pmode = xml->getpar127("mode", 0); Pbandwidth = xml->getpar("bandwidth", Pbandwidth, 0, 1000); Pbwscale = xml->getpar127("bandwidth_scale", Pbwscale); if(xml->enterbranch("HARMONIC_PROFILE")) { Php.base.type = xml->getpar127("base_type", Php.base.type); Php.base.par1 = xml->getpar127("base_par1", Php.base.par1); Php.freqmult = xml->getpar127("frequency_multiplier", Php.freqmult); Php.modulator.par1 = xml->getpar127("modulator_par1", Php.modulator.par1); Php.modulator.freq = xml->getpar127("modulator_frequency", Php.modulator.freq); Php.width = xml->getpar127("width", Php.width); Php.amp.type = xml->getpar127("amplitude_multiplier_type", Php.amp.type); Php.amp.mode = xml->getpar127("amplitude_multiplier_mode", Php.amp.mode); Php.amp.par1 = xml->getpar127("amplitude_multiplier_par1", Php.amp.par1); Php.amp.par2 = xml->getpar127("amplitude_multiplier_par2", Php.amp.par2); Php.autoscale = xml->getparbool("autoscale", Php.autoscale); Php.onehalf = xml->getpar127("one_half", Php.onehalf); xml->exitbranch(); } if(xml->enterbranch("OSCIL")) { oscilgen->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("RESONANCE")) { resonance->getfromXML(xml); xml->exitbranch(); } if(xml->enterbranch("HARMONIC_POSITION")) { Phrpos.type = xml->getpar127("type", Phrpos.type); Phrpos.par1 = xml->getpar("parameter1", Phrpos.par1, 0, 255); Phrpos.par2 = xml->getpar("parameter2", Phrpos.par2, 0, 255); Phrpos.par3 = xml->getpar("parameter3", Phrpos.par3, 0, 255); xml->exitbranch(); } if(xml->enterbranch("SAMPLE_QUALITY")) { Pquality.samplesize = xml->getpar127("samplesize", Pquality.samplesize); Pquality.basenote = xml->getpar127("basenote", Pquality.basenote); Pquality.oct = xml->getpar127("octaves", Pquality.oct); Pquality.smpoct = xml->getpar127("samples_per_octave", Pquality.smpoct); xml->exitbranch(); } if(xml->enterbranch("AMPLITUDE_PARAMETERS")) { PVolume = xml->getpar127("volume", PVolume); PPanning = xml->getpar127("panning", PPanning); PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing", PAmpVelocityScaleFunction); PPunchStrength = xml->getpar127("punch_strength", PPunchStrength); PPunchTime = xml->getpar127("punch_time", PPunchTime); PPunchStretch = xml->getpar127("punch_stretch", PPunchStretch); PPunchVelocitySensing = xml->getpar127("punch_velocity_sensing", PPunchVelocitySensing); xml->enterbranch("AMPLITUDE_ENVELOPE"); AmpEnvelope->getfromXML(xml); xml->exitbranch(); xml->enterbranch("AMPLITUDE_LFO"); AmpLfo->getfromXML(xml); xml->exitbranch(); xml->exitbranch(); } if(xml->enterbranch("FREQUENCY_PARAMETERS")) { Pfixedfreq = xml->getpar127("fixed_freq", Pfixedfreq); PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET); PDetune = xml->getpar("detune", PDetune, 0, 16383); PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383); PDetuneType = xml->getpar127("detune_type", PDetuneType); xml->enterbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->getfromXML(xml); xml->exitbranch(); xml->enterbranch("FREQUENCY_LFO"); FreqLfo->getfromXML(xml); xml->exitbranch(); xml->exitbranch(); } if(xml->enterbranch("FILTER_PARAMETERS")) { PFilterVelocityScale = xml->getpar127("velocity_sensing_amplitude", PFilterVelocityScale); PFilterVelocityScaleFunction = xml->getpar127( "velocity_sensing", PFilterVelocityScaleFunction); xml->enterbranch("FILTER"); GlobalFilter->getfromXML(xml); xml->exitbranch(); xml->enterbranch("FILTER_ENVELOPE"); FilterEnvelope->getfromXML(xml); xml->exitbranch(); xml->enterbranch("FILTER_LFO"); FilterLfo->getfromXML(xml); xml->exitbranch(); xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h000066400000000000000000000135101247673406200265630ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PADnoteParameters.h - Parameters for PADnote (PADsynth) Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PAD_NOTE_PARAMETERS_H #define PAD_NOTE_PARAMETERS_H #include "../Misc/XMLwrapper.h" #include "../DSP/FFTwrapper.h" #include "../globals.h" #include "../Synth/OscilGen.h" #include "../Synth/Resonance.h" #include "../Misc/Util.h" #include "EnvelopeParams.h" #include "LFOParams.h" #include "FilterParams.h" #include "Presets.h" #include #include class PADnoteParameters:public Presets { public: PADnoteParameters(FFTwrapper *fft_, pthread_mutex_t *mutex_); ~PADnoteParameters(); void defaults(); void add2XML(XMLwrapper *xml); void getfromXML(XMLwrapper *xml); //returns a value between 0.0f-1.0f that represents the estimation perceived bandwidth float getprofile(float *smp, int size); //parameters //the mode: 0 - bandwidth, 1 - discrete (bandwidth=0), 2 - continous //the harmonic profile is used only on mode 0 unsigned char Pmode; //Harmonic profile (the frequency distribution of a single harmonic) struct { struct { //base function unsigned char type; unsigned char par1; } base; unsigned char freqmult; //frequency multiplier of the distribution struct { //the modulator of the distribution unsigned char par1; unsigned char freq; } modulator; unsigned char width; //the width of the resulting function after the modulation struct { //the amplitude multiplier of the harmonic profile unsigned char mode; unsigned char type; unsigned char par1; unsigned char par2; } amp; bool autoscale; //if the scale of the harmonic profile is computed automaticaly unsigned char onehalf; //what part of the base function is used to make the distribution } Php; unsigned int Pbandwidth; //the values are from 0 to 1000 unsigned char Pbwscale; //how the bandwidth is increased according to the harmonic's frequency struct { //where are positioned the harmonics (on integer multimplier or different places) unsigned char type; unsigned char par1, par2, par3; //0..255 } Phrpos; struct { //quality of the samples (how many samples, the length of them,etc.) unsigned char samplesize; unsigned char basenote, oct, smpoct; } Pquality; //frequency parameters //If the base frequency is fixed to 440 Hz unsigned char Pfixedfreq; /* Equal temperate (this is used only if the Pfixedfreq is enabled) If this parameter is 0, the frequency is fixed (to 440 Hz); if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */ unsigned char PfixedfreqET; unsigned short int PDetune; //fine detune unsigned short int PCoarseDetune; //coarse detune+octave unsigned char PDetuneType; //detune type EnvelopeParams *FreqEnvelope; //Frequency Envelope LFOParams *FreqLfo; //Frequency LFO //Amplitude parameters unsigned char PStereo; /* Panning - 0 - random 1 - left 64 - center 127 - right */ unsigned char PPanning; unsigned char PVolume; unsigned char PAmpVelocityScaleFunction; EnvelopeParams *AmpEnvelope; LFOParams *AmpLfo; unsigned char PPunchStrength, PPunchTime, PPunchStretch, PPunchVelocitySensing; //Filter Parameters FilterParams *GlobalFilter; // filter velocity sensing unsigned char PFilterVelocityScale; // filter velocity sensing unsigned char PFilterVelocityScaleFunction; EnvelopeParams *FilterEnvelope; LFOParams *FilterLfo; float setPbandwidth(int Pbandwidth); //returns the BandWidth in cents float getNhr(int n); //gets the n-th overtone position relatively to N harmonic void applyparameters(bool lockmutex); void export2wav(std::string basefilename); OscilGen *oscilgen; Resonance *resonance; struct { int size; float basefreq; float *smp; } sample[PAD_MAX_SAMPLES], newsample; private: void generatespectrum_bandwidthMode(float *spectrum, int size, float basefreq, float *profile, int profilesize, float bwadjust); void generatespectrum_otherModes(float *spectrum, int size, float basefreq); void deletesamples(); void deletesample(int n); FFTwrapper *fft; pthread_mutex_t *mutex; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp000066400000000000000000000050331247673406200252260ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Presets.cpp - Presets and Clipboard management Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "Presets.h" #include Presets::Presets() { type[0] = 0; } Presets::~Presets() {} void Presets::setpresettype(const char *type) { strcpy(this->type, type); } void Presets::copy(const char *name) { XMLwrapper *xml = new XMLwrapper(); //used only for the clipboard if(name == NULL) xml->minimal = false; char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); //strcat(type, "n"); if(name == NULL) if(strstr(type, "Plfo") != NULL) strcpy(type, "Plfo"); xml->beginbranch(type); add2XML(xml); xml->endbranch(); if(name == NULL) presetsstore.copyclipboard(xml, type); else presetsstore.copypreset(xml, type, name); delete (xml); } void Presets::paste(int npreset) { char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); //strcat(type, "n"); if(npreset == 0) if(strstr(type, "Plfo") != NULL) strcpy(type, "Plfo"); XMLwrapper *xml = new XMLwrapper(); if(npreset == 0) { if(!checkclipboardtype()) { delete (xml); return; } if(!presetsstore.pasteclipboard(xml)) { delete (xml); return; } } else if(!presetsstore.pastepreset(xml, npreset)) { delete (xml); return; } if(xml->enterbranch(type) == 0) return; defaults(); getfromXML(xml); xml->exitbranch(); delete (xml); } bool Presets::checkclipboardtype() { return presetsstore.checkclipboardtype(type); } void Presets::rescanforpresets() { presetsstore.rescanforpresets(type); } void Presets::deletepreset(int npreset) { presetsstore.deletepreset(npreset); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h000066400000000000000000000031761247673406200247010ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Presets.h - Presets and Clipboard management Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PRESETS_H #define PRESETS_H #include "../Misc/XMLwrapper.h" #include "PresetsStore.h" /**Presets and Clipboard management*/ class Presets { friend class PresetsArray; public: Presets(); virtual ~Presets(); virtual void copy(const char *name); /** PresetsArray::PresetsArray() { type[0] = 0; nelement = -1; } PresetsArray::~PresetsArray() {} void PresetsArray::setpresettype(const char *type) { strcpy(this->type, type); } void PresetsArray::copy(const char *name) { XMLwrapper *xml = new XMLwrapper(); //used only for the clipboard if(name == NULL) xml->minimal = false; char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); if(nelement != -1) strcat(type, "n"); if(name == NULL) if(strstr(type, "Plfo") != NULL) strcpy(type, "Plfo"); ; xml->beginbranch(type); if(nelement == -1) add2XML(xml); else add2XMLsection(xml, nelement); xml->endbranch(); if(name == NULL) presetsstore.copyclipboard(xml, type); else presetsstore.copypreset(xml, type, name); delete (xml); nelement = -1; } void PresetsArray::paste(int npreset) { char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); if(nelement != -1) strcat(type, "n"); if(npreset == 0) if(strstr(type, "Plfo") != NULL) strcpy(type, "Plfo"); ; XMLwrapper *xml = new XMLwrapper(); if(npreset == 0) { if(!checkclipboardtype()) { nelement = -1; delete (xml); return; } if(!presetsstore.pasteclipboard(xml)) { delete (xml); nelement = -1; return; } } else if(!presetsstore.pastepreset(xml, npreset)) { delete (xml); nelement = -1; return; } if(xml->enterbranch(type) == 0) { nelement = -1; return; } if(nelement == -1) { defaults(); getfromXML(xml); } else { defaults(nelement); getfromXMLsection(xml, nelement); } xml->exitbranch(); delete (xml); nelement = -1; } bool PresetsArray::checkclipboardtype() { char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); if(nelement != -1) strcat(type, "n"); return presetsstore.checkclipboardtype(type); } void PresetsArray::rescanforpresets() { char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); if(nelement != -1) strcat(type, "n"); presetsstore.rescanforpresets(type); } void PresetsArray::setelement(int n) { nelement = n; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h000066400000000000000000000035351247673406200256770ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PresetsArray.h - PresetsArray and Clipboard management Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PRESETSARRAY_H #define PRESETSARRAY_H #include "../Misc/XMLwrapper.h" #include "Presets.h" /**PresetsArray and Clipboard management*/ class PresetsArray:public Presets { public: PresetsArray(); virtual ~PresetsArray(); void copy(const char *name); /** #include #include #include #include #include #include #include "PresetsStore.h" #include "../Misc/Util.h" using namespace std; PresetsStore presetsstore; PresetsStore::PresetsStore() { clipboard.data = NULL; clipboard.type[0] = 0; } PresetsStore::~PresetsStore() { if(clipboard.data != NULL) free(clipboard.data); clearpresets(); } //Clipboard management void PresetsStore::copyclipboard(XMLwrapper *xml, char *type) { strcpy(clipboard.type, type); if(clipboard.data != NULL) free(clipboard.data); clipboard.data = xml->getXMLdata(); } bool PresetsStore::pasteclipboard(XMLwrapper *xml) { if(clipboard.data != NULL) xml->putXMLdata(clipboard.data); else return false; return true; } bool PresetsStore::checkclipboardtype(const char *type) { //makes LFO's compatible if((strstr(type, "Plfo") != NULL) && (strstr(clipboard.type, "Plfo") != NULL)) return true; return strcmp(type, clipboard.type) == 0; } //Presets management void PresetsStore::clearpresets() { presets.clear(); } //a helper function that compares 2 presets[] bool PresetsStore::presetstruct::operator<(const presetstruct &b) const { return name < b.name; } void PresetsStore::rescanforpresets(const string &type) { //std::cout << "Scanning For Presets" << std::endl; //std::cout << "Of Type: " << type << std::endl; clearpresets(); string ftype = "." + type.substr(1) + ".xpz"; for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) { if(config.cfg.presetsDirList[i].empty()) continue; //open directory string dirname = config.cfg.presetsDirList[i]; DIR *dir = opendir(dirname.c_str()); if(dir == NULL) continue; struct dirent *fn; //check all files in directory while((fn = readdir(dir))) { string filename = fn->d_name; if(filename.find(ftype) == string::npos) continue; //ensure proper path is formed char tmpc = dirname[dirname.size() - 1]; const char *tmps; if((tmpc == '/') || (tmpc == '\\')) tmps = ""; else tmps = "/"; string location = "" + dirname + tmps + filename; //trim file type off of name string name = filename.substr(0, filename.find(ftype)); //put on list presets.push_back(presetstruct(location, name)); } closedir(dir); } //sort the presets sort(presets.begin(), presets.end()); } void PresetsStore::copypreset(XMLwrapper *xml, char *type, string name) { if(config.cfg.presetsDirList[0].empty()) return; //make the filenames legal name = legalizeFilename(name); //make path legal const string dirname = config.cfg.presetsDirList[0]; char tmpc = dirname[dirname.size() - 1]; const char *tmps; if((tmpc == '/') || (tmpc == '\\')) tmps = ""; else tmps = "/"; string filename("" + dirname + tmps + name + "." + &type[1] + ".xpz"); xml->saveXMLfile(filename); } bool PresetsStore::pastepreset(XMLwrapper *xml, unsigned int npreset) { npreset--; if(npreset >= presets.size()) return false; string filename = presets[npreset].file; if(filename.empty()) return false; bool result = (xml->loadXMLfile(filename) >= 0); return result; } void PresetsStore::deletepreset(unsigned int npreset) { npreset--; if(npreset >= presets.size()) return; string filename = presets[npreset].file; if(filename.empty()) return; remove(filename.c_str()); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h000066400000000000000000000040061247673406200257070ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PresetsStore.cpp - Presets and Clipboard store Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PRESETSTORE_H #define PRESETSTORE_H #include #include #include "../Misc/XMLwrapper.h" #include "../Misc/Config.h" #define MAX_PRESETTYPE_SIZE 30 class PresetsStore { public: PresetsStore(); ~PresetsStore(); //Clipboard stuff void copyclipboard(XMLwrapper *xml, char *type); bool pasteclipboard(XMLwrapper *xml); bool checkclipboardtype(const char *type); //presets stuff void copypreset(XMLwrapper *xml, char *type, std::string name); bool pastepreset(XMLwrapper *xml, unsigned int npreset); void deletepreset(unsigned int npreset); struct presetstruct { presetstruct(std::string _file, std::string _name) :file(_file), name(_name) {} bool operator<(const presetstruct &b) const; std::string file; std::string name; }; std::vector presets; void rescanforpresets(const std::string &type); private: struct { char *data; char type[MAX_PRESETTYPE_SIZE]; } clipboard; void clearpresets(); }; extern PresetsStore presetsstore; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp000066400000000000000000000247611247673406200271550ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer SUBnoteParameters.cpp - Parameters for SUBnote (SUBsynth) Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "../globals.h" #include "SUBnoteParameters.h" #include #include SUBnoteParameters::SUBnoteParameters():Presets() { setpresettype("Psubsynth"); AmpEnvelope = new EnvelopeParams(64, 1); AmpEnvelope->ADSRinit_dB(0, 40, 127, 25); FreqEnvelope = new EnvelopeParams(64, 0); FreqEnvelope->ASRinit(30, 50, 64, 60); BandWidthEnvelope = new EnvelopeParams(64, 0); BandWidthEnvelope->ASRinit_bw(100, 70, 64, 60); GlobalFilter = new FilterParams(2, 80, 40); GlobalFilterEnvelope = new EnvelopeParams(0, 1); GlobalFilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64); defaults(); } void SUBnoteParameters::defaults() { PVolume = 96; PPanning = 64; PAmpVelocityScaleFunction = 90; Pfixedfreq = 0; PfixedfreqET = 0; Pnumstages = 2; Pbandwidth = 40; Phmagtype = 0; Pbwscale = 64; Pstereo = 1; Pstart = 1; PDetune = 8192; PCoarseDetune = 0; PDetuneType = 1; PFreqEnvelopeEnabled = 0; PBandWidthEnvelopeEnabled = 0; POvertoneSpread.type = 0; POvertoneSpread.par1 = 0; POvertoneSpread.par2 = 0; POvertoneSpread.par3 = 0; updateFrequencyMultipliers(); for(int n = 0; n < MAX_SUB_HARMONICS; ++n) { Phmag[n] = 0; Phrelbw[n] = 64; } Phmag[0] = 127; PGlobalFilterEnabled = 0; PGlobalFilterVelocityScale = 64; PGlobalFilterVelocityScaleFunction = 64; AmpEnvelope->defaults(); FreqEnvelope->defaults(); BandWidthEnvelope->defaults(); GlobalFilter->defaults(); GlobalFilterEnvelope->defaults(); } SUBnoteParameters::~SUBnoteParameters() { delete (AmpEnvelope); delete (FreqEnvelope); delete (BandWidthEnvelope); delete (GlobalFilter); delete (GlobalFilterEnvelope); } void SUBnoteParameters::add2XML(XMLwrapper *xml) { xml->addpar("num_stages", Pnumstages); xml->addpar("harmonic_mag_type", Phmagtype); xml->addpar("start", Pstart); xml->beginbranch("HARMONICS"); for(int i = 0; i < MAX_SUB_HARMONICS; ++i) { if((Phmag[i] == 0) && (xml->minimal)) continue; xml->beginbranch("HARMONIC", i); xml->addpar("mag", Phmag[i]); xml->addpar("relbw", Phrelbw[i]); xml->endbranch(); } xml->endbranch(); xml->beginbranch("AMPLITUDE_PARAMETERS"); xml->addparbool("stereo", Pstereo); xml->addpar("volume", PVolume); xml->addpar("panning", PPanning); xml->addpar("velocity_sensing", PAmpVelocityScaleFunction); xml->beginbranch("AMPLITUDE_ENVELOPE"); AmpEnvelope->add2XML(xml); xml->endbranch(); xml->endbranch(); xml->beginbranch("FREQUENCY_PARAMETERS"); xml->addparbool("fixed_freq", Pfixedfreq); xml->addpar("fixed_freq_et", PfixedfreqET); xml->addpar("detune", PDetune); xml->addpar("coarse_detune", PCoarseDetune); xml->addpar("overtone_spread_type", POvertoneSpread.type); xml->addpar("overtone_spread_par1", POvertoneSpread.par1); xml->addpar("overtone_spread_par2", POvertoneSpread.par2); xml->addpar("overtone_spread_par3", POvertoneSpread.par3); xml->addpar("detune_type", PDetuneType); xml->addpar("bandwidth", Pbandwidth); xml->addpar("bandwidth_scale", Pbwscale); xml->addparbool("freq_envelope_enabled", PFreqEnvelopeEnabled); if((PFreqEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->add2XML(xml); xml->endbranch(); } xml->addparbool("band_width_envelope_enabled", PBandWidthEnvelopeEnabled); if((PBandWidthEnvelopeEnabled != 0) || (!xml->minimal)) { xml->beginbranch("BANDWIDTH_ENVELOPE"); BandWidthEnvelope->add2XML(xml); xml->endbranch(); } xml->endbranch(); xml->beginbranch("FILTER_PARAMETERS"); xml->addparbool("enabled", PGlobalFilterEnabled); if((PGlobalFilterEnabled != 0) || (!xml->minimal)) { xml->beginbranch("FILTER"); GlobalFilter->add2XML(xml); xml->endbranch(); xml->addpar("filter_velocity_sensing", PGlobalFilterVelocityScaleFunction); xml->addpar("filter_velocity_sensing_amplitude", PGlobalFilterVelocityScale); xml->beginbranch("FILTER_ENVELOPE"); GlobalFilterEnvelope->add2XML(xml); xml->endbranch(); } xml->endbranch(); } void SUBnoteParameters::updateFrequencyMultipliers(void) { float par1 = POvertoneSpread.par1 / 255.0f; float par1pow = powf(10.0f, -(1.0f - POvertoneSpread.par1 / 255.0f) * 3.0f); float par2 = POvertoneSpread.par2 / 255.0f; float par3 = 1.0f - POvertoneSpread.par3 / 255.0f; float result; float tmp = 0.0f; int thresh = 0; for(int n = 0; n < MAX_SUB_HARMONICS; ++n) { float n1 = n + 1.0f; switch(POvertoneSpread.type) { case 1: thresh = (int)(100.0f * par2 * par2) + 1; if (n1 < thresh) result = n1; else result = n1 + 8.0f * (n1 - thresh) * par1pow; break; case 2: thresh = (int)(100.0f * par2 * par2) + 1; if (n1 < thresh) result = n1; else result = n1 + 0.9f * (thresh - n1) * par1pow; break; case 3: tmp = par1pow * 100.0f + 1.0f; result = powf(n / tmp, 1.0f - 0.8f * par2) * tmp + 1.0f; break; case 4: result = n * (1.0f - par1pow) + powf(0.1f * n, 3.0f * par2 + 1.0f) * 10.0f * par1pow + 1.0f; break; case 5: result = n1 + 2.0f * sinf(n * par2 * par2 * PI * 0.999f) * sqrt(par1pow); break; case 6: tmp = powf(2.0f * par2, 2.0f) + 0.1f; result = n * powf(par1 * powf(0.8f * n, tmp) + 1.0f, tmp) + 1.0f; break; case 7: result = (n1 + par1) / (par1 + 1); break; default: result = n1; } float iresult = floor(result + 0.5f); POvertoneFreqMult[n] = iresult + par3 * (result - iresult); } } void SUBnoteParameters::getfromXML(XMLwrapper *xml) { Pnumstages = xml->getpar127("num_stages", Pnumstages); Phmagtype = xml->getpar127("harmonic_mag_type", Phmagtype); Pstart = xml->getpar127("start", Pstart); if(xml->enterbranch("HARMONICS")) { Phmag[0] = 0; for(int i = 0; i < MAX_SUB_HARMONICS; ++i) { if(xml->enterbranch("HARMONIC", i) == 0) continue; Phmag[i] = xml->getpar127("mag", Phmag[i]); Phrelbw[i] = xml->getpar127("relbw", Phrelbw[i]); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("AMPLITUDE_PARAMETERS")) { Pstereo = xml->getparbool("stereo", Pstereo); PVolume = xml->getpar127("volume", PVolume); PPanning = xml->getpar127("panning", PPanning); PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing", PAmpVelocityScaleFunction); if(xml->enterbranch("AMPLITUDE_ENVELOPE")) { AmpEnvelope->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("FREQUENCY_PARAMETERS")) { Pfixedfreq = xml->getparbool("fixed_freq", Pfixedfreq); PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET); PDetune = xml->getpar("detune", PDetune, 0, 16383); PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383); POvertoneSpread.type = xml->getpar127("overtone_spread_type", POvertoneSpread.type); POvertoneSpread.par1 = xml->getpar("overtone_spread_par1", POvertoneSpread.par1, 0, 255); POvertoneSpread.par2 = xml->getpar("overtone_spread_par2", POvertoneSpread.par2, 0, 255); POvertoneSpread.par3 = xml->getpar("overtone_spread_par3", POvertoneSpread.par3, 0, 255); updateFrequencyMultipliers(); PDetuneType = xml->getpar127("detune_type", PDetuneType); Pbandwidth = xml->getpar127("bandwidth", Pbandwidth); Pbwscale = xml->getpar127("bandwidth_scale", Pbwscale); PFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled", PFreqEnvelopeEnabled); if(xml->enterbranch("FREQUENCY_ENVELOPE")) { FreqEnvelope->getfromXML(xml); xml->exitbranch(); } PBandWidthEnvelopeEnabled = xml->getparbool( "band_width_envelope_enabled", PBandWidthEnvelopeEnabled); if(xml->enterbranch("BANDWIDTH_ENVELOPE")) { BandWidthEnvelope->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } if(xml->enterbranch("FILTER_PARAMETERS")) { PGlobalFilterEnabled = xml->getparbool("enabled", PGlobalFilterEnabled); if(xml->enterbranch("FILTER")) { GlobalFilter->getfromXML(xml); xml->exitbranch(); } PGlobalFilterVelocityScaleFunction = xml->getpar127( "filter_velocity_sensing", PGlobalFilterVelocityScaleFunction); PGlobalFilterVelocityScale = xml->getpar127( "filter_velocity_sensing_amplitude", PGlobalFilterVelocityScale); if(xml->enterbranch("FILTER_ENVELOPE")) { GlobalFilterEnvelope->getfromXML(xml); xml->exitbranch(); } xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h000066400000000000000000000066361247673406200266230ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer SUBnoteParameters.h - Parameters for SUBnote (SUBsynth) Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SUB_NOTE_PARAMETERS_H #define SUB_NOTE_PARAMETERS_H #include "../globals.h" #include "../Misc/XMLwrapper.h" #include "EnvelopeParams.h" #include "FilterParams.h" #include "Presets.h" class SUBnoteParameters:public Presets { public: SUBnoteParameters(); ~SUBnoteParameters(); void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); void updateFrequencyMultipliers(void); //Parameters //AMPLITUDE PARAMETRERS unsigned char Pstereo; //0 for mono,1 for stereo unsigned char PVolume; unsigned char PPanning; unsigned char PAmpVelocityScaleFunction; EnvelopeParams *AmpEnvelope; //Frequency Parameters unsigned short int PDetune; unsigned short int PCoarseDetune; unsigned char PDetuneType; unsigned char PFreqEnvelopeEnabled; EnvelopeParams *FreqEnvelope; unsigned char PBandWidthEnvelopeEnabled; EnvelopeParams *BandWidthEnvelope; //Filter Parameters (Global) unsigned char PGlobalFilterEnabled; FilterParams *GlobalFilter; unsigned char PGlobalFilterVelocityScale; unsigned char PGlobalFilterVelocityScaleFunction; EnvelopeParams *GlobalFilterEnvelope; //Other Parameters //If the base frequency is fixed to 440 Hz unsigned char Pfixedfreq; /* Equal temperate (this is used only if the Pfixedfreq is enabled) If this parameter is 0, the frequency is fixed (to 440 Hz); if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */ unsigned char PfixedfreqET; // Overtone spread parameters struct { unsigned char type; unsigned char par1; unsigned char par2; unsigned char par3; } POvertoneSpread; float POvertoneFreqMult[MAX_SUB_HARMONICS]; //how many times the filters are applied unsigned char Pnumstages; //bandwidth unsigned char Pbandwidth; //How the magnitudes are computed (0=linear,1=-60dB,2=-60dB) unsigned char Phmagtype; //Magnitudes unsigned char Phmag[MAX_SUB_HARMONICS]; //Relative BandWidth ("64"=1.0f) unsigned char Phrelbw[MAX_SUB_HARMONICS]; //how much the bandwidth is increased according to lower/higher frequency; 64-default unsigned char Pbwscale; //how the harmonics start("0"=0,"1"=random,"2"=1) unsigned char Pstart; private: }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/000077500000000000000000000000001247673406200227565ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp000066400000000000000000002051171247673406200246420ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer ADnote.cpp - The "additive" synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "../globals.h" #include "../Misc/Util.h" #include "../DSP/Filter.h" #include "OscilGen.h" #include "ADnote.h" ADnote::ADnote(ADnoteParameters *pars, Controller *ctl_, float freq, float velocity, int portamento_, int midinote_, bool besilent) :SynthNote(freq, velocity, portamento_, midinote_, besilent) { tmpwavel = new float [synth->buffersize]; tmpwaver = new float [synth->buffersize]; bypassl = new float [synth->buffersize]; bypassr = new float [synth->buffersize]; partparams = pars; ctl = ctl_; portamento = portamento_; midinote = midinote_; NoteEnabled = ON; basefreq = freq; if(velocity > 1.0f) velocity = 1.0f; this->velocity = velocity; time = 0.0f; stereo = pars->GlobalPar.PStereo; NoteGlobalPar.Detune = getdetune(pars->GlobalPar.PDetuneType, pars->GlobalPar.PCoarseDetune, pars->GlobalPar.PDetune); bandwidthDetuneMultiplier = pars->getBandwidthDetuneMultiplier(); if(pars->GlobalPar.PPanning == 0) NoteGlobalPar.Panning = RND; else NoteGlobalPar.Panning = pars->GlobalPar.PPanning / 128.0f; NoteGlobalPar.FilterCenterPitch = pars->GlobalPar.GlobalFilter->getfreq() //center freq + pars->GlobalPar.PFilterVelocityScale / 127.0f * 6.0f //velocity sensing * (VelF(velocity, pars->GlobalPar. PFilterVelocityScaleFunction) - 1); if(pars->GlobalPar.PPunchStrength != 0) { NoteGlobalPar.Punch.Enabled = 1; NoteGlobalPar.Punch.t = 1.0f; //start from 1.0f and to 0.0f NoteGlobalPar.Punch.initialvalue = ((powf(10, 1.5f * pars->GlobalPar.PPunchStrength / 127.0f) - 1.0f) * VelF(velocity, pars->GlobalPar.PPunchVelocitySensing)); float time = powf(10, 3.0f * pars->GlobalPar.PPunchTime / 127.0f) / 10000.0f; //0.1f .. 100 ms float stretch = powf(440.0f / freq, pars->GlobalPar.PPunchStretch / 64.0f); NoteGlobalPar.Punch.dt = 1.0f / (time * synth->samplerate_f * stretch); } else NoteGlobalPar.Punch.Enabled = 0; for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { pars->VoicePar[nvoice].OscilSmp->newrandseed(prng()); NoteVoicePar[nvoice].OscilSmp = NULL; NoteVoicePar[nvoice].FMSmp = NULL; NoteVoicePar[nvoice].VoiceOut = NULL; NoteVoicePar[nvoice].FMVoice = -1; unison_size[nvoice] = 1; if(pars->VoicePar[nvoice].Enabled == 0) { NoteVoicePar[nvoice].Enabled = OFF; continue; //the voice is disabled } unison_stereo_spread[nvoice] = pars->VoicePar[nvoice].Unison_stereo_spread / 127.0f; int unison = pars->VoicePar[nvoice].Unison_size; if(unison < 1) unison = 1; //compute unison unison_size[nvoice] = unison; unison_base_freq_rap[nvoice] = new float[unison]; unison_freq_rap[nvoice] = new float[unison]; unison_invert_phase[nvoice] = new bool[unison]; float unison_spread = pars->getUnisonFrequencySpreadCents( nvoice); float unison_real_spread = powf(2.0f, (unison_spread * 0.5f) / 1200.0f); float unison_vibratto_a = pars->VoicePar[nvoice].Unison_vibratto / 127.0f; //0.0f .. 1.0f switch(unison) { case 1: unison_base_freq_rap[nvoice][0] = 1.0f; //if the unison is not used, always make the only subvoice to have the default note break; case 2: { //unison for 2 subvoices unison_base_freq_rap[nvoice][0] = 1.0f / unison_real_spread; unison_base_freq_rap[nvoice][1] = unison_real_spread; }; break; default: { //unison for more than 2 subvoices float unison_values[unison]; float min = -1e-6, max = 1e-6; for(int k = 0; k < unison; ++k) { float step = (k / (float) (unison - 1)) * 2.0f - 1.0f; //this makes the unison spread more uniform float val = step + (RND * 2.0f - 1.0f) / (unison - 1); unison_values[k] = val; if (min > val) { min = val; } if (max < val) { max = val; } } float diff = max - min; for(int k = 0; k < unison; ++k) { unison_values[k] = (unison_values[k] - (max + min) * 0.5f) / diff; //the lowest value will be -1 and the highest will be 1 unison_base_freq_rap[nvoice][k] = powf(2.0f, (unison_spread * unison_values[k]) / 1200); } }; } //unison vibrattos if(unison > 1) for(int k = 0; k < unison; ++k) //reduce the frequency difference for larger vibrattos unison_base_freq_rap[nvoice][k] = 1.0f + (unison_base_freq_rap[ nvoice][k] - 1.0f) * (1.0f - unison_vibratto_a); unison_vibratto[nvoice].step = new float[unison]; unison_vibratto[nvoice].position = new float[unison]; unison_vibratto[nvoice].amplitude = (unison_real_spread - 1.0f) * unison_vibratto_a; float increments_per_second = synth->samplerate_f / synth->buffersize_f; float vibratto_base_period = 0.25f * powf( 2.0f, (1.0f - pars->VoicePar[nvoice]. Unison_vibratto_speed / 127.0f) * 4.0f); for(int k = 0; k < unison; ++k) { unison_vibratto[nvoice].position[k] = RND * 1.8f - 0.9f; //make period to vary randomly from 50% to 200% vibratto base period float vibratto_period = vibratto_base_period * powf(2.0f, RND * 2.0f - 1.0f); float m = 4.0f / (vibratto_period * increments_per_second); if(RND < 0.5f) m = -m; unison_vibratto[nvoice].step[k] = m; } if(unison == 1) { //no vibratto for a single voice unison_vibratto[nvoice].step[0] = 0.0f; unison_vibratto[nvoice].position[0] = 0.0f; unison_vibratto[nvoice].amplitude = 0.0f; } //phase invert for unison unison_invert_phase[nvoice][0] = false; if(unison != 1) { int inv = pars->VoicePar[nvoice].Unison_invert_phase; switch(inv) { case 0: for(int k = 0; k < unison; ++k) unison_invert_phase[nvoice][k] = false; break; case 1: for(int k = 0; k < unison; ++k) unison_invert_phase[nvoice][k] = (RND > 0.5f); break; default: for(int k = 0; k < unison; ++k) unison_invert_phase[nvoice][k] = (k % inv == 0) ? true : false; break; } } oscfreqhi[nvoice] = new int[unison]; oscfreqlo[nvoice] = new float[unison]; oscfreqhiFM[nvoice] = new unsigned int[unison]; oscfreqloFM[nvoice] = new float[unison]; oscposhi[nvoice] = new int[unison]; oscposlo[nvoice] = new float[unison]; oscposhiFM[nvoice] = new unsigned int[unison]; oscposloFM[nvoice] = new float[unison]; NoteVoicePar[nvoice].Enabled = ON; NoteVoicePar[nvoice].fixedfreq = pars->VoicePar[nvoice].Pfixedfreq; NoteVoicePar[nvoice].fixedfreqET = pars->VoicePar[nvoice].PfixedfreqET; //use the Globalpars.detunetype if the detunetype is 0 if(pars->VoicePar[nvoice].PDetuneType != 0) { NoteVoicePar[nvoice].Detune = getdetune( pars->VoicePar[nvoice].PDetuneType, pars->VoicePar[nvoice]. PCoarseDetune, 8192); //coarse detune NoteVoicePar[nvoice].FineDetune = getdetune( pars->VoicePar[nvoice].PDetuneType, 0, pars->VoicePar[nvoice].PDetune); //fine detune } else { NoteVoicePar[nvoice].Detune = getdetune( pars->GlobalPar.PDetuneType, pars->VoicePar[nvoice]. PCoarseDetune, 8192); //coarse detune NoteVoicePar[nvoice].FineDetune = getdetune( pars->GlobalPar.PDetuneType, 0, pars->VoicePar[nvoice].PDetune); //fine detune } if(pars->VoicePar[nvoice].PFMDetuneType != 0) NoteVoicePar[nvoice].FMDetune = getdetune( pars->VoicePar[nvoice].PFMDetuneType, pars->VoicePar[nvoice]. PFMCoarseDetune, pars->VoicePar[nvoice].PFMDetune); else NoteVoicePar[nvoice].FMDetune = getdetune( pars->GlobalPar.PDetuneType, pars->VoicePar[nvoice]. PFMCoarseDetune, pars->VoicePar[nvoice].PFMDetune); for(int k = 0; k < unison; ++k) { oscposhi[nvoice][k] = 0; oscposlo[nvoice][k] = 0.0f; oscposhiFM[nvoice][k] = 0; oscposloFM[nvoice][k] = 0.0f; } //the extra points contains the first point NoteVoicePar[nvoice].OscilSmp = new float[synth->oscilsize + OSCIL_SMP_EXTRA_SAMPLES]; //Get the voice's oscil or external's voice oscil int vc = nvoice; if(pars->VoicePar[nvoice].Pextoscil != -1) vc = pars->VoicePar[nvoice].Pextoscil; if(!pars->GlobalPar.Hrandgrouping) pars->VoicePar[vc].OscilSmp->newrandseed(prng()); int oscposhi_start = pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp, getvoicebasefreq(nvoice), pars->VoicePar[nvoice].Presonance); //I store the first elments to the last position for speedups for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i) NoteVoicePar[nvoice].OscilSmp[synth->oscilsize + i] = NoteVoicePar[nvoice].OscilSmp[i]; oscposhi_start += (int)((pars->VoicePar[nvoice].Poscilphase - 64.0f) / 128.0f * synth->oscilsize + synth->oscilsize * 4); oscposhi_start %= synth->oscilsize; for(int k = 0; k < unison; ++k) { oscposhi[nvoice][k] = oscposhi_start; //put random starting point for other subvoices oscposhi_start = (int)(RND * pars->VoicePar[nvoice].Unison_phase_randomness / 127.0f * (synth->oscilsize - 1)); } NoteVoicePar[nvoice].FreqLfo = NULL; NoteVoicePar[nvoice].FreqEnvelope = NULL; NoteVoicePar[nvoice].AmpLfo = NULL; NoteVoicePar[nvoice].AmpEnvelope = NULL; NoteVoicePar[nvoice].VoiceFilterL = NULL; NoteVoicePar[nvoice].VoiceFilterR = NULL; NoteVoicePar[nvoice].FilterEnvelope = NULL; NoteVoicePar[nvoice].FilterLfo = NULL; NoteVoicePar[nvoice].FilterCenterPitch = pars->VoicePar[nvoice].VoiceFilter->getfreq(); NoteVoicePar[nvoice].filterbypass = pars->VoicePar[nvoice].Pfilterbypass; switch(pars->VoicePar[nvoice].PFMEnabled) { case 1: NoteVoicePar[nvoice].FMEnabled = MORPH; break; case 2: NoteVoicePar[nvoice].FMEnabled = RING_MOD; break; case 3: NoteVoicePar[nvoice].FMEnabled = PHASE_MOD; break; case 4: NoteVoicePar[nvoice].FMEnabled = FREQ_MOD; break; case 5: NoteVoicePar[nvoice].FMEnabled = PITCH_MOD; break; default: NoteVoicePar[nvoice].FMEnabled = NONE; } NoteVoicePar[nvoice].FMVoice = pars->VoicePar[nvoice].PFMVoice; NoteVoicePar[nvoice].FMFreqEnvelope = NULL; NoteVoicePar[nvoice].FMAmpEnvelope = NULL; //Compute the Voice's modulator volume (incl. damping) float fmvoldamp = powf(440.0f / getvoicebasefreq( nvoice), pars->VoicePar[nvoice].PFMVolumeDamp / 64.0f - 1.0f); switch(NoteVoicePar[nvoice].FMEnabled) { case PHASE_MOD: fmvoldamp = powf(440.0f / getvoicebasefreq( nvoice), pars->VoicePar[nvoice].PFMVolumeDamp / 64.0f); NoteVoicePar[nvoice].FMVolume = (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f; break; case FREQ_MOD: NoteVoicePar[nvoice].FMVolume = (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f; break; // case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars->VoicePar[nvoice].PFMVolume/127.0f*8.0f)*fmvoldamp;//??????????? // break; default: if(fmvoldamp > 1.0f) fmvoldamp = 1.0f; NoteVoicePar[nvoice].FMVolume = pars->VoicePar[nvoice].PFMVolume / 127.0f * fmvoldamp; } //Voice's modulator velocity sensing NoteVoicePar[nvoice].FMVolume *= VelF(velocity, partparams->VoicePar[nvoice].PFMVelocityScaleFunction); FMoldsmp[nvoice] = new float [unison]; for(int k = 0; k < unison; ++k) FMoldsmp[nvoice][k] = 0.0f; //this is for FM (integration) firsttick[nvoice] = 1; NoteVoicePar[nvoice].DelayTicks = (int)((expf(pars->VoicePar[nvoice].PDelay / 127.0f * logf(50.0f)) - 1.0f) / synth->buffersize_f / 10.0f * synth->samplerate_f); } max_unison = 1; for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) if(unison_size[nvoice] > max_unison) max_unison = unison_size[nvoice]; tmpwave_unison = new float *[max_unison]; for(int k = 0; k < max_unison; ++k) { tmpwave_unison[k] = new float[synth->buffersize]; memset(tmpwave_unison[k], 0, synth->bufferbytes); } initparameters(); } // ADlegatonote: This function is (mostly) a copy of ADnote(...) and // initparameters() stuck together with some lines removed so that it // only alter the already playing note (to perform legato). It is // possible I left stuff that is not required for this. void ADnote::legatonote(float freq, float velocity, int portamento_, int midinote_, bool externcall) { ADnoteParameters *pars = partparams; // Manage legato stuff if(legato.update(freq, velocity, portamento_, midinote_, externcall)) return; portamento = portamento_; midinote = midinote_; basefreq = freq; if(velocity > 1.0f) velocity = 1.0f; this->velocity = velocity; NoteGlobalPar.Detune = getdetune(pars->GlobalPar.PDetuneType, pars->GlobalPar.PCoarseDetune, pars->GlobalPar.PDetune); bandwidthDetuneMultiplier = pars->getBandwidthDetuneMultiplier(); if(pars->GlobalPar.PPanning == 0) NoteGlobalPar.Panning = RND; else NoteGlobalPar.Panning = pars->GlobalPar.PPanning / 128.0f; //center freq NoteGlobalPar.FilterCenterPitch = pars->GlobalPar.GlobalFilter->getfreq() + pars->GlobalPar.PFilterVelocityScale / 127.0f * 6.0f //velocity sensing * (VelF(velocity, pars->GlobalPar. PFilterVelocityScaleFunction) - 1); for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { if(NoteVoicePar[nvoice].Enabled == OFF) continue; //(gf) Stay the same as first note in legato. NoteVoicePar[nvoice].fixedfreq = pars->VoicePar[nvoice].Pfixedfreq; NoteVoicePar[nvoice].fixedfreqET = pars->VoicePar[nvoice].PfixedfreqET; //use the Globalpars.detunetype if the detunetype is 0 if(pars->VoicePar[nvoice].PDetuneType != 0) { NoteVoicePar[nvoice].Detune = getdetune( pars->VoicePar[nvoice].PDetuneType, pars->VoicePar[nvoice].PCoarseDetune, 8192); //coarse detune NoteVoicePar[nvoice].FineDetune = getdetune( pars->VoicePar[nvoice].PDetuneType, 0, pars->VoicePar[nvoice].PDetune); //fine detune } else { NoteVoicePar[nvoice].Detune = getdetune( pars->GlobalPar.PDetuneType, pars->VoicePar[nvoice].PCoarseDetune, 8192); //coarse detune NoteVoicePar[nvoice].FineDetune = getdetune( pars->GlobalPar.PDetuneType, 0, pars->VoicePar[nvoice].PDetune); //fine detune } if(pars->VoicePar[nvoice].PFMDetuneType != 0) NoteVoicePar[nvoice].FMDetune = getdetune( pars->VoicePar[nvoice].PFMDetuneType, pars->VoicePar[nvoice].PFMCoarseDetune, pars->VoicePar[nvoice].PFMDetune); else NoteVoicePar[nvoice].FMDetune = getdetune( pars->GlobalPar.PDetuneType, pars->VoicePar[nvoice].PFMCoarseDetune, pars->VoicePar[nvoice].PFMDetune); //Get the voice's oscil or external's voice oscil int vc = nvoice; if(pars->VoicePar[nvoice].Pextoscil != -1) vc = pars->VoicePar[nvoice].Pextoscil; if(!pars->GlobalPar.Hrandgrouping) pars->VoicePar[vc].OscilSmp->newrandseed(prng()); pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp, getvoicebasefreq(nvoice), pars->VoicePar[nvoice].Presonance); //(gf)Modif of the above line. //I store the first elments to the last position for speedups for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i) NoteVoicePar[nvoice].OscilSmp[synth->oscilsize + i] = NoteVoicePar[nvoice].OscilSmp[i]; NoteVoicePar[nvoice].FilterCenterPitch = pars->VoicePar[nvoice].VoiceFilter->getfreq(); NoteVoicePar[nvoice].filterbypass = pars->VoicePar[nvoice].Pfilterbypass; NoteVoicePar[nvoice].FMVoice = pars->VoicePar[nvoice].PFMVoice; //Compute the Voice's modulator volume (incl. damping) float fmvoldamp = powf(440.0f / getvoicebasefreq(nvoice), pars->VoicePar[nvoice].PFMVolumeDamp / 64.0f - 1.0f); switch(NoteVoicePar[nvoice].FMEnabled) { case PHASE_MOD: fmvoldamp = powf(440.0f / getvoicebasefreq( nvoice), pars->VoicePar[nvoice].PFMVolumeDamp / 64.0f); NoteVoicePar[nvoice].FMVolume = (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f; break; case FREQ_MOD: NoteVoicePar[nvoice].FMVolume = (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f; break; // case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars->VoicePar[nvoice].PFMVolume/127.0f*8.0f)*fmvoldamp;//??????????? // break; default: if(fmvoldamp > 1.0f) fmvoldamp = 1.0f; NoteVoicePar[nvoice].FMVolume = pars->VoicePar[nvoice].PFMVolume / 127.0f * fmvoldamp; } //Voice's modulator velocity sensing NoteVoicePar[nvoice].FMVolume *= VelF(velocity, partparams->VoicePar[nvoice].PFMVelocityScaleFunction); NoteVoicePar[nvoice].DelayTicks = (int)((expf(pars->VoicePar[nvoice].PDelay / 127.0f * logf(50.0f)) - 1.0f) / synth->buffersize_f / 10.0f * synth->samplerate_f); } /// initparameters(); /////////////// // Altered content of initparameters(): int tmp[NUM_VOICES]; NoteGlobalPar.Volume = 4.0f * powf(0.1f, 3.0f * (1.0f - partparams->GlobalPar.PVolume / 96.0f)) //-60 dB .. 0 dB * VelF( velocity, partparams->GlobalPar. PAmpVelocityScaleFunction); //velocity sensing globalnewamplitude = NoteGlobalPar.Volume * NoteGlobalPar.AmpEnvelope->envout_dB() * NoteGlobalPar.AmpLfo->amplfoout(); NoteGlobalPar.FilterQ = partparams->GlobalPar.GlobalFilter->getq(); NoteGlobalPar.FilterFreqTracking = partparams->GlobalPar.GlobalFilter->getfreqtracking(basefreq); // Forbids the Modulation Voice to be greater or equal than voice for(int i = 0; i < NUM_VOICES; ++i) if(NoteVoicePar[i].FMVoice >= i) NoteVoicePar[i].FMVoice = -1; // Voice Parameter init for(unsigned nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { if(NoteVoicePar[nvoice].Enabled == 0) continue; NoteVoicePar[nvoice].noisetype = partparams->VoicePar[nvoice].Type; /* Voice Amplitude Parameters Init */ NoteVoicePar[nvoice].Volume = powf(0.1f, 3.0f * (1.0f - partparams->VoicePar[nvoice].PVolume / 127.0f)) // -60 dB .. 0 dB * VelF(velocity, partparams->VoicePar[nvoice].PAmpVelocityScaleFunction); //velocity if(partparams->VoicePar[nvoice].PVolumeminus != 0) NoteVoicePar[nvoice].Volume = -NoteVoicePar[nvoice].Volume; if(partparams->VoicePar[nvoice].PPanning == 0) NoteVoicePar[nvoice].Panning = RND; // random panning else NoteVoicePar[nvoice].Panning = partparams->VoicePar[nvoice].PPanning / 128.0f; newamplitude[nvoice] = 1.0f; if((partparams->VoicePar[nvoice].PAmpEnvelopeEnabled != 0) && (NoteVoicePar[nvoice].AmpEnvelope != NULL)) newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB(); if((partparams->VoicePar[nvoice].PAmpLfoEnabled != 0) && (NoteVoicePar[nvoice].AmpLfo != NULL)) newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout(); NoteVoicePar[nvoice].FilterFreqTracking = partparams->VoicePar[nvoice].VoiceFilter->getfreqtracking(basefreq); /* Voice Modulation Parameters Init */ if((NoteVoicePar[nvoice].FMEnabled != NONE) && (NoteVoicePar[nvoice].FMVoice < 0)) { partparams->VoicePar[nvoice].FMSmp->newrandseed(prng()); //Perform Anti-aliasing only on MORPH or RING MODULATION int vc = nvoice; if(partparams->VoicePar[nvoice].PextFMoscil != -1) vc = partparams->VoicePar[nvoice].PextFMoscil; if(!partparams->GlobalPar.Hrandgrouping) partparams->VoicePar[vc].FMSmp->newrandseed(prng()); for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i) NoteVoicePar[nvoice].FMSmp[synth->oscilsize + i] = NoteVoicePar[nvoice].FMSmp[i]; } FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume * ctl->fmamp.relamp; if((partparams->VoicePar[nvoice].PFMAmpEnvelopeEnabled != 0) && (NoteVoicePar[nvoice].FMAmpEnvelope != NULL)) FMnewamplitude[nvoice] *= NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB(); } for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { for(unsigned i = nvoice + 1; i < NUM_VOICES; ++i) tmp[i] = 0; for(unsigned i = nvoice + 1; i < NUM_VOICES; ++i) if((NoteVoicePar[i].FMVoice == nvoice) && (tmp[i] == 0)) tmp[i] = 1; } } /* * Kill a voice of ADnote */ void ADnote::KillVoice(int nvoice) { delete [] oscfreqhi[nvoice]; delete [] oscfreqlo[nvoice]; delete [] oscfreqhiFM[nvoice]; delete [] oscfreqloFM[nvoice]; delete [] oscposhi[nvoice]; delete [] oscposlo[nvoice]; delete [] oscposhiFM[nvoice]; delete [] oscposloFM[nvoice]; delete [] unison_base_freq_rap[nvoice]; delete [] unison_freq_rap[nvoice]; delete [] unison_invert_phase[nvoice]; delete [] FMoldsmp[nvoice]; delete [] unison_vibratto[nvoice].step; delete [] unison_vibratto[nvoice].position; NoteVoicePar[nvoice].kill(); } /* * Kill the note */ void ADnote::KillNote() { for(unsigned nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { if(NoteVoicePar[nvoice].Enabled == ON) KillVoice(nvoice); if(NoteVoicePar[nvoice].VoiceOut) delete NoteVoicePar[nvoice].VoiceOut; NoteVoicePar[nvoice].VoiceOut = NULL; } NoteGlobalPar.kill(); NoteEnabled = OFF; } ADnote::~ADnote() { if(NoteEnabled == ON) KillNote(); delete [] tmpwavel; delete [] tmpwaver; delete [] bypassl; delete [] bypassr; for(int k = 0; k < max_unison; ++k) delete[] tmpwave_unison[k]; delete[] tmpwave_unison; } /* * Init the parameters */ void ADnote::initparameters() { int tmp[NUM_VOICES]; // Global Parameters NoteGlobalPar.initparameters(partparams->GlobalPar, basefreq, velocity, stereo); NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output globalnewamplitude = NoteGlobalPar.Volume * NoteGlobalPar.AmpEnvelope->envout_dB() * NoteGlobalPar.AmpLfo->amplfoout(); // Forbids the Modulation Voice to be greater or equal than voice for(int i = 0; i < NUM_VOICES; ++i) if(NoteVoicePar[i].FMVoice >= i) NoteVoicePar[i].FMVoice = -1; // Voice Parameter init for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { Voice &vce = NoteVoicePar[nvoice]; ADnoteVoiceParam ¶m = partparams->VoicePar[nvoice]; if(vce.Enabled == 0) continue; vce.noisetype = param.Type; /* Voice Amplitude Parameters Init */ vce.Volume = powf(0.1f, 3.0f * (1.0f - param.PVolume / 127.0f)) // -60dB..0dB * VelF(velocity, param.PAmpVelocityScaleFunction); if(param.PVolumeminus) vce.Volume = -vce.Volume; if(param.PPanning == 0) vce.Panning = RND; // random panning else vce.Panning = param.PPanning / 128.0f; newamplitude[nvoice] = 1.0f; if(param.PAmpEnvelopeEnabled) { vce.AmpEnvelope = new Envelope(param.AmpEnvelope, basefreq); vce.AmpEnvelope->envout_dB(); //discard the first envelope sample newamplitude[nvoice] *= vce.AmpEnvelope->envout_dB(); } if(param.PAmpLfoEnabled) { vce.AmpLfo = new LFO(param.AmpLfo, basefreq); newamplitude[nvoice] *= vce.AmpLfo->amplfoout(); } /* Voice Frequency Parameters Init */ if(param.PFreqEnvelopeEnabled != 0) vce.FreqEnvelope = new Envelope(param.FreqEnvelope, basefreq); if(param.PFreqLfoEnabled != 0) vce.FreqLfo = new LFO(param.FreqLfo, basefreq); /* Voice Filter Parameters Init */ if(param.PFilterEnabled != 0) { vce.VoiceFilterL = Filter::generate(param.VoiceFilter); vce.VoiceFilterR = Filter::generate(param.VoiceFilter); } if(param.PFilterEnvelopeEnabled != 0) vce.FilterEnvelope = new Envelope(param.FilterEnvelope, basefreq); if(param.PFilterLfoEnabled != 0) vce.FilterLfo = new LFO(param.FilterLfo, basefreq); vce.FilterFreqTracking = param.VoiceFilter->getfreqtracking(basefreq); /* Voice Modulation Parameters Init */ if((vce.FMEnabled != NONE) && (vce.FMVoice < 0)) { param.FMSmp->newrandseed(prng()); vce.FMSmp = new float[synth->oscilsize + OSCIL_SMP_EXTRA_SAMPLES]; //Perform Anti-aliasing only on MORPH or RING MODULATION int vc = nvoice; if(param.PextFMoscil != -1) vc = param.PextFMoscil; float tmp = 1.0f; if((partparams->VoicePar[vc].FMSmp->Padaptiveharmonics != 0) || (vce.FMEnabled == MORPH) || (vce.FMEnabled == RING_MOD)) tmp = getFMvoicebasefreq(nvoice); if(!partparams->GlobalPar.Hrandgrouping) partparams->VoicePar[vc].FMSmp->newrandseed(prng()); for(int k = 0; k < unison_size[nvoice]; ++k) oscposhiFM[nvoice][k] = (oscposhi[nvoice][k] + partparams->VoicePar[vc].FMSmp->get( vce.FMSmp, tmp)) % synth->oscilsize; for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i) vce.FMSmp[synth->oscilsize + i] = vce.FMSmp[i]; int oscposhiFM_add = (int)((param.PFMoscilphase - 64.0f) / 128.0f * synth->oscilsize + synth->oscilsize * 4); for(int k = 0; k < unison_size[nvoice]; ++k) { oscposhiFM[nvoice][k] += oscposhiFM_add; oscposhiFM[nvoice][k] %= synth->oscilsize; } } if(param.PFMFreqEnvelopeEnabled != 0) vce.FMFreqEnvelope = new Envelope(param.FMFreqEnvelope, basefreq); FMnewamplitude[nvoice] = vce.FMVolume * ctl->fmamp.relamp; if(param.PFMAmpEnvelopeEnabled != 0) { vce.FMAmpEnvelope = new Envelope(param.FMAmpEnvelope, basefreq); FMnewamplitude[nvoice] *= vce.FMAmpEnvelope->envout_dB(); } } for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { for(int i = nvoice + 1; i < NUM_VOICES; ++i) tmp[i] = 0; for(int i = nvoice + 1; i < NUM_VOICES; ++i) if((NoteVoicePar[i].FMVoice == nvoice) && (tmp[i] == 0)) { NoteVoicePar[nvoice].VoiceOut = new float[synth->buffersize]; tmp[i] = 1; } if(NoteVoicePar[nvoice].VoiceOut) memset(NoteVoicePar[nvoice].VoiceOut, 0, synth->bufferbytes); } } /* * Computes the relative frequency of each unison voice and it's vibratto * This must be called before setfreq* functions */ void ADnote::compute_unison_freq_rap(int nvoice) { if(unison_size[nvoice] == 1) { //no unison unison_freq_rap[nvoice][0] = 1.0f; return; } float relbw = ctl->bandwidth.relbw * bandwidthDetuneMultiplier; for(int k = 0; k < unison_size[nvoice]; ++k) { float pos = unison_vibratto[nvoice].position[k]; float step = unison_vibratto[nvoice].step[k]; pos += step; if(pos <= -1.0f) { pos = -1.0f; step = -step; } if(pos >= 1.0f) { pos = 1.0f; step = -step; } float vibratto_val = (pos - 0.333333333f * pos * pos * pos) * 1.5f; //make the vibratto lfo smoother unison_freq_rap[nvoice][k] = 1.0f + ((unison_base_freq_rap[nvoice][k] - 1.0f) + vibratto_val * unison_vibratto[nvoice].amplitude) * relbw; unison_vibratto[nvoice].position[k] = pos; step = unison_vibratto[nvoice].step[k] = step; } } /* * Computes the frequency of an oscillator */ void ADnote::setfreq(int nvoice, float in_freq) { for(int k = 0; k < unison_size[nvoice]; ++k) { float freq = fabs(in_freq) * unison_freq_rap[nvoice][k]; float speed = freq * synth->oscilsize_f / synth->samplerate_f; if(speed > synth->oscilsize_f) speed = synth->oscilsize_f; F2I(speed, oscfreqhi[nvoice][k]); oscfreqlo[nvoice][k] = speed - floor(speed); } } /* * Computes the frequency of an modullator oscillator */ void ADnote::setfreqFM(int nvoice, float in_freq) { for(int k = 0; k < unison_size[nvoice]; ++k) { float freq = fabs(in_freq) * unison_freq_rap[nvoice][k]; float speed = freq * synth->oscilsize_f / synth->samplerate_f; if(speed > synth->samplerate_f) speed = synth->samplerate_f; F2I(speed, oscfreqhiFM[nvoice][k]); oscfreqloFM[nvoice][k] = speed - floor(speed); } } /* * Get Voice base frequency */ float ADnote::getvoicebasefreq(int nvoice) const { float detune = NoteVoicePar[nvoice].Detune / 100.0f + NoteVoicePar[nvoice].FineDetune / 100.0f * ctl->bandwidth.relbw * bandwidthDetuneMultiplier + NoteGlobalPar.Detune / 100.0f; if(NoteVoicePar[nvoice].fixedfreq == 0) return this->basefreq * powf(2, detune / 12.0f); else { //the fixed freq is enabled float fixedfreq = 440.0f; int fixedfreqET = NoteVoicePar[nvoice].fixedfreqET; if(fixedfreqET != 0) { //if the frequency varies according the keyboard note float tmp = (midinote - 69.0f) / 12.0f * (powf(2.0f, (fixedfreqET - 1) / 63.0f) - 1.0f); if(fixedfreqET <= 64) fixedfreq *= powf(2.0f, tmp); else fixedfreq *= powf(3.0f, tmp); } return fixedfreq * powf(2.0f, detune / 12.0f); } } /* * Get Voice's Modullator base frequency */ float ADnote::getFMvoicebasefreq(int nvoice) const { float detune = NoteVoicePar[nvoice].FMDetune / 100.0f; return getvoicebasefreq(nvoice) * powf(2, detune / 12.0f); } /* * Computes all the parameters for each tick */ void ADnote::computecurrentparameters() { int nvoice; float voicefreq, voicepitch, filterpitch, filterfreq, FMfreq, FMrelativepitch, globalpitch, globalfilterpitch; globalpitch = 0.01f * (NoteGlobalPar.FreqEnvelope->envout() + NoteGlobalPar.FreqLfo->lfoout() * ctl->modwheel.relmod); globaloldamplitude = globalnewamplitude; globalnewamplitude = NoteGlobalPar.Volume * NoteGlobalPar.AmpEnvelope->envout_dB() * NoteGlobalPar.AmpLfo->amplfoout(); globalfilterpitch = NoteGlobalPar.FilterEnvelope->envout() + NoteGlobalPar.FilterLfo->lfoout() + NoteGlobalPar.FilterCenterPitch; float tmpfilterfreq = globalfilterpitch + ctl->filtercutoff.relfreq + NoteGlobalPar.FilterFreqTracking; tmpfilterfreq = Filter::getrealfreq(tmpfilterfreq); float globalfilterq = NoteGlobalPar.FilterQ * ctl->filterq.relq; NoteGlobalPar.GlobalFilterL->setfreq_and_q(tmpfilterfreq, globalfilterq); if(stereo != 0) NoteGlobalPar.GlobalFilterR->setfreq_and_q(tmpfilterfreq, globalfilterq); //compute the portamento, if it is used by this note float portamentofreqrap = 1.0f; if(portamento != 0) { //this voice use portamento portamentofreqrap = ctl->portamento.freqrap; if(ctl->portamento.used == 0) //the portamento has finished portamento = 0; //this note is no longer "portamented" } //compute parameters for all voices for(nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { if(NoteVoicePar[nvoice].Enabled != ON) continue; NoteVoicePar[nvoice].DelayTicks -= 1; if(NoteVoicePar[nvoice].DelayTicks > 0) continue; compute_unison_freq_rap(nvoice); /*******************/ /* Voice Amplitude */ /*******************/ oldamplitude[nvoice] = newamplitude[nvoice]; newamplitude[nvoice] = 1.0f; if(NoteVoicePar[nvoice].AmpEnvelope != NULL) newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB(); if(NoteVoicePar[nvoice].AmpLfo != NULL) newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout(); /****************/ /* Voice Filter */ /****************/ if(NoteVoicePar[nvoice].VoiceFilterL != NULL) { filterpitch = NoteVoicePar[nvoice].FilterCenterPitch; if(NoteVoicePar[nvoice].FilterEnvelope != NULL) filterpitch += NoteVoicePar[nvoice].FilterEnvelope->envout(); if(NoteVoicePar[nvoice].FilterLfo != NULL) filterpitch += NoteVoicePar[nvoice].FilterLfo->lfoout(); filterfreq = filterpitch + NoteVoicePar[nvoice].FilterFreqTracking; filterfreq = Filter::getrealfreq(filterfreq); NoteVoicePar[nvoice].VoiceFilterL->setfreq(filterfreq); if(stereo && NoteVoicePar[nvoice].VoiceFilterR) NoteVoicePar[nvoice].VoiceFilterR->setfreq(filterfreq); } if(NoteVoicePar[nvoice].noisetype == 0) { //compute only if the voice isn't noise /*******************/ /* Voice Frequency */ /*******************/ voicepitch = 0.0f; if(NoteVoicePar[nvoice].FreqLfo != NULL) voicepitch += NoteVoicePar[nvoice].FreqLfo->lfoout() / 100.0f * ctl->bandwidth.relbw; if(NoteVoicePar[nvoice].FreqEnvelope != NULL) voicepitch += NoteVoicePar[nvoice].FreqEnvelope->envout() / 100.0f; voicefreq = getvoicebasefreq(nvoice) * powf(2, (voicepitch + globalpitch) / 12.0f); //Hz frequency voicefreq *= ctl->pitchwheel.relfreq; //change the frequency by the controller setfreq(nvoice, voicefreq * portamentofreqrap); /***************/ /* Modulator */ /***************/ if(NoteVoicePar[nvoice].FMEnabled != NONE) { FMrelativepitch = NoteVoicePar[nvoice].FMDetune / 100.0f; if(NoteVoicePar[nvoice].FMFreqEnvelope != NULL) FMrelativepitch += NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100; FMfreq = powf(2.0f, FMrelativepitch / 12.0f) * voicefreq * portamentofreqrap; setfreqFM(nvoice, FMfreq); FMoldamplitude[nvoice] = FMnewamplitude[nvoice]; FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume * ctl->fmamp.relamp; if(NoteVoicePar[nvoice].FMAmpEnvelope != NULL) FMnewamplitude[nvoice] *= NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB(); } } } time += synth->buffersize_f / synth->samplerate_f; } /* * Fadein in a way that removes clicks but keep sound "punchy" */ inline void ADnote::fadein(float *smps) const { int zerocrossings = 0; for(int i = 1; i < synth->buffersize; ++i) if((smps[i - 1] < 0.0f) && (smps[i] > 0.0f)) zerocrossings++; //this is only the possitive crossings float tmp = (synth->buffersize_f - 1.0f) / (zerocrossings + 1) / 3.0f; if(tmp < 8.0f) tmp = 8.0f; int n; F2I(tmp, n); //how many samples is the fade-in if(n > synth->buffersize) n = synth->buffersize; for(int i = 0; i < n; ++i) { //fade-in float tmp = 0.5f - cosf((float)i / (float) n * PI) * 0.5f; smps[i] *= tmp; } } /* * Computes the Oscillator (Without Modulation) - LinearInterpolation */ /* As the code here is a bit odd due to optimization, here is what happens * First the current possition and frequency are retrieved from the running * state. These are broken up into high and low portions to indicate how many * samples are skipped in one step and how many fractional samples are skipped. * Outside of this method the fractional samples are just handled with floating * point code, but that's a bit slower than it needs to be. In this code the low * portions are known to exist between 0.0 and 1.0 and it is known that they are * stored in single precision floating point IEEE numbers. This implies that * a maximum of 24 bits are significant. The below code does your standard * linear interpolation that you'll see throughout this codebase, but by * sticking to integers for tracking the overflow of the low portion, around 15% * of the execution time was shaved off in the ADnote test. */ inline void ADnote::ComputeVoiceOscillator_LinearInterpolation(int nvoice) { for(int k = 0; k < unison_size[nvoice]; ++k) { int poshi = oscposhi[nvoice][k]; int poslo = oscposlo[nvoice][k] * (1<<24); int freqhi = oscfreqhi[nvoice][k]; int freqlo = oscfreqlo[nvoice][k] * (1<<24); float *smps = NoteVoicePar[nvoice].OscilSmp; float *tw = tmpwave_unison[k]; assert(oscfreqlo[nvoice][k] < 1.0f); for(int i = 0; i < synth->buffersize; ++i) { tw[i] = (smps[poshi] * ((1<<24) - poslo) + smps[poshi + 1] * poslo)/(1.0f*(1<<24)); poslo += freqlo; poshi += freqhi + (poslo>>24); poslo &= 0xffffff; poshi &= synth->oscilsize - 1; } oscposhi[nvoice][k] = poshi; oscposlo[nvoice][k] = poslo/(1.0f*(1<<24)); } } /* * Computes the Oscillator (Without Modulation) - CubicInterpolation * The differences from the Linear are to little to deserve to be used. This is because I am using a large synth->oscilsize (>512) inline void ADnote::ComputeVoiceOscillator_CubicInterpolation(int nvoice){ int i,poshi; float poslo; poshi=oscposhi[nvoice]; poslo=oscposlo[nvoice]; float *smps=NoteVoicePar[nvoice].OscilSmp; float xm1,x0,x1,x2,a,b,c; for (i=0;ibuffersize;i++){ xm1=smps[poshi]; x0=smps[poshi+1]; x1=smps[poshi+2]; x2=smps[poshi+3]; a=(3.0f * (x0-x1) - xm1 + x2) / 2.0f; b = 2.0f*x1 + xm1 - (5.0f*x0 + x2) / 2.0f; c = (x1 - xm1) / 2.0f; tmpwave[i]=(((a * poslo) + b) * poslo + c) * poslo + x0; printf("a\n"); //tmpwave[i]=smps[poshi]*(1.0f-poslo)+smps[poshi+1]*poslo; poslo+=oscfreqlo[nvoice]; if (poslo>=1.0f) { poslo-=1.0f; poshi++; }; poshi+=oscfreqhi[nvoice]; poshi&=synth->oscilsize-1; }; oscposhi[nvoice]=poshi; oscposlo[nvoice]=poslo; }; */ /* * Computes the Oscillator (Morphing) */ inline void ADnote::ComputeVoiceOscillatorMorph(int nvoice) { int i; float amp; ComputeVoiceOscillator_LinearInterpolation(nvoice); if(FMnewamplitude[nvoice] > 1.0f) FMnewamplitude[nvoice] = 1.0f; if(FMoldamplitude[nvoice] > 1.0f) FMoldamplitude[nvoice] = 1.0f; if(NoteVoicePar[nvoice].FMVoice >= 0) { //if I use VoiceOut[] as modullator int FMVoice = NoteVoicePar[nvoice].FMVoice; for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) { amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice], FMnewamplitude[nvoice], i, synth->buffersize); tw[i] = tw[i] * (1.0f - amp) + amp * NoteVoicePar[FMVoice].VoiceOut[i]; } } } else for(int k = 0; k < unison_size[nvoice]; ++k) { int poshiFM = oscposhiFM[nvoice][k]; float posloFM = oscposloFM[nvoice][k]; int freqhiFM = oscfreqhiFM[nvoice][k]; float freqloFM = oscfreqloFM[nvoice][k]; float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) { amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice], FMnewamplitude[nvoice], i, synth->buffersize); tw[i] = tw[i] * (1.0f - amp) + amp * (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1 - posloFM) + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM); posloFM += freqloFM; if(posloFM >= 1.0f) { posloFM -= 1.0f; poshiFM++; } poshiFM += freqhiFM; poshiFM &= synth->oscilsize - 1; } oscposhiFM[nvoice][k] = poshiFM; oscposloFM[nvoice][k] = posloFM; } } /* * Computes the Oscillator (Ring Modulation) */ inline void ADnote::ComputeVoiceOscillatorRingModulation(int nvoice) { int i; float amp; ComputeVoiceOscillator_LinearInterpolation(nvoice); if(FMnewamplitude[nvoice] > 1.0f) FMnewamplitude[nvoice] = 1.0f; if(FMoldamplitude[nvoice] > 1.0f) FMoldamplitude[nvoice] = 1.0f; if(NoteVoicePar[nvoice].FMVoice >= 0) // if I use VoiceOut[] as modullator for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) { amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice], FMnewamplitude[nvoice], i, synth->buffersize); int FMVoice = NoteVoicePar[nvoice].FMVoice; tw[i] *= (1.0f - amp) + amp * NoteVoicePar[FMVoice].VoiceOut[i]; } } else for(int k = 0; k < unison_size[nvoice]; ++k) { int poshiFM = oscposhiFM[nvoice][k]; float posloFM = oscposloFM[nvoice][k]; int freqhiFM = oscfreqhiFM[nvoice][k]; float freqloFM = oscfreqloFM[nvoice][k]; float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) { amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice], FMnewamplitude[nvoice], i, synth->buffersize); tw[i] *= (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1.0f - posloFM) + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM) * amp + (1.0f - amp); posloFM += freqloFM; if(posloFM >= 1.0f) { posloFM -= 1.0f; poshiFM++; } poshiFM += freqhiFM; poshiFM &= synth->oscilsize - 1; } oscposhiFM[nvoice][k] = poshiFM; oscposloFM[nvoice][k] = posloFM; } } /* * Computes the Oscillator (Phase Modulation or Frequency Modulation) */ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice, int FMmode) { int carposhi = 0; int i, FMmodfreqhi = 0; float FMmodfreqlo = 0, carposlo = 0; if(NoteVoicePar[nvoice].FMVoice >= 0) //if I use VoiceOut[] as modulator for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; memcpy(tw, NoteVoicePar[NoteVoicePar[nvoice].FMVoice].VoiceOut, synth->bufferbytes); } else //Compute the modulator and store it in tmpwave_unison[][] for(int k = 0; k < unison_size[nvoice]; ++k) { int poshiFM = oscposhiFM[nvoice][k]; float posloFM = oscposloFM[nvoice][k]; int freqhiFM = oscfreqhiFM[nvoice][k]; float freqloFM = oscfreqloFM[nvoice][k]; float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) { tw[i] = (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1.0f - posloFM) + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM); posloFM += freqloFM; if(posloFM >= 1.0f) { posloFM = fmod(posloFM, 1.0f); poshiFM++; } poshiFM += freqhiFM; poshiFM &= synth->oscilsize - 1; } oscposhiFM[nvoice][k] = poshiFM; oscposloFM[nvoice][k] = posloFM; } // Amplitude interpolation if(ABOVE_AMPLITUDE_THRESHOLD(FMoldamplitude[nvoice], FMnewamplitude[nvoice])) for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) tw[i] *= INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice], FMnewamplitude[nvoice], i, synth->buffersize); } else for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) tw[i] *= FMnewamplitude[nvoice]; } //normalize: makes all sample-rates, oscil_sizes to produce same sound if(FMmode != 0) { //Frequency modulation float normalize = synth->oscilsize_f / 262144.0f * 44100.0f / synth->samplerate_f; for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; float fmold = FMoldsmp[nvoice][k]; for(i = 0; i < synth->buffersize; ++i) { fmold = fmod(fmold + tw[i] * normalize, synth->oscilsize); tw[i] = fmold; } FMoldsmp[nvoice][k] = fmold; } } else { //Phase modulation float normalize = synth->oscilsize_f / 262144.0f; for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; for(i = 0; i < synth->buffersize; ++i) tw[i] *= normalize; } } //do the modulation for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; int poshi = oscposhi[nvoice][k]; float poslo = oscposlo[nvoice][k]; int freqhi = oscfreqhi[nvoice][k]; float freqlo = oscfreqlo[nvoice][k]; for(i = 0; i < synth->buffersize; ++i) { F2I(tw[i], FMmodfreqhi); FMmodfreqlo = fmod(tw[i] + 0.0000000001f, 1.0f); if(FMmodfreqhi < 0) FMmodfreqlo++; //carrier carposhi = poshi + FMmodfreqhi; carposlo = poslo + FMmodfreqlo; if(carposlo >= 1.0f) { carposhi++; carposlo = fmod(carposlo, 1.0f); } carposhi &= (synth->oscilsize - 1); tw[i] = NoteVoicePar[nvoice].OscilSmp[carposhi] * (1.0f - carposlo) + NoteVoicePar[nvoice].OscilSmp[carposhi + 1] * carposlo; poslo += freqlo; if(poslo >= 1.0f) { poslo = fmod(poslo, 1.0f); poshi++; } poshi += freqhi; poshi &= synth->oscilsize - 1; } oscposhi[nvoice][k] = poshi; oscposlo[nvoice][k] = poslo; } } /*Calculeaza Oscilatorul cu PITCH MODULATION*/ inline void ADnote::ComputeVoiceOscillatorPitchModulation(int /*nvoice*/) { //TODO } /* * Computes the Noise */ inline void ADnote::ComputeVoiceNoise(int nvoice) { for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; for(int i = 0; i < synth->buffersize; ++i) tw[i] = RND * 2.0f - 1.0f; } } /* * Compute the ADnote samples * Returns 0 if the note is finished */ int ADnote::noteout(float *outl, float *outr) { memcpy(outl, denormalkillbuf, synth->bufferbytes); memcpy(outr, denormalkillbuf, synth->bufferbytes); if(NoteEnabled == OFF) return 0; memset(bypassl, 0, synth->bufferbytes); memset(bypassr, 0, synth->bufferbytes); computecurrentparameters(); for(unsigned nvoice = 0; nvoice < NUM_VOICES; ++nvoice) { if((NoteVoicePar[nvoice].Enabled != ON) || (NoteVoicePar[nvoice].DelayTicks > 0)) continue; if(NoteVoicePar[nvoice].noisetype == 0) //voice mode=sound switch(NoteVoicePar[nvoice].FMEnabled) { case MORPH: ComputeVoiceOscillatorMorph(nvoice); break; case RING_MOD: ComputeVoiceOscillatorRingModulation(nvoice); break; case PHASE_MOD: ComputeVoiceOscillatorFrequencyModulation(nvoice, 0); break; case FREQ_MOD: ComputeVoiceOscillatorFrequencyModulation(nvoice, 1); break; //case PITCH_MOD:ComputeVoiceOscillatorPitchModulation(nvoice);break; default: ComputeVoiceOscillator_LinearInterpolation(nvoice); //if (config.cfg.Interpolation) ComputeVoiceOscillator_CubicInterpolation(nvoice); } else ComputeVoiceNoise(nvoice); // Voice Processing //mix subvoices into voice memset(tmpwavel, 0, synth->bufferbytes); if(stereo) memset(tmpwaver, 0, synth->bufferbytes); for(int k = 0; k < unison_size[nvoice]; ++k) { float *tw = tmpwave_unison[k]; if(stereo) { float stereo_pos = 0; if(unison_size[nvoice] > 1) stereo_pos = k / (float)(unison_size[nvoice] - 1) * 2.0f - 1.0f; float stereo_spread = unison_stereo_spread[nvoice] * 2.0f; //between 0 and 2.0f if(stereo_spread > 1.0f) { float stereo_pos_1 = (stereo_pos >= 0.0f) ? 1.0f : -1.0f; stereo_pos = (2.0f - stereo_spread) * stereo_pos + (stereo_spread - 1.0f) * stereo_pos_1; } else stereo_pos *= stereo_spread; if(unison_size[nvoice] == 1) stereo_pos = 0.0f; float panning = (stereo_pos + 1.0f) * 0.5f; float lvol = (1.0f - panning) * 2.0f; if(lvol > 1.0f) lvol = 1.0f; float rvol = panning * 2.0f; if(rvol > 1.0f) rvol = 1.0f; if(unison_invert_phase[nvoice][k]) { lvol = -lvol; rvol = -rvol; } for(int i = 0; i < synth->buffersize; ++i) tmpwavel[i] += tw[i] * lvol; for(int i = 0; i < synth->buffersize; ++i) tmpwaver[i] += tw[i] * rvol; } else for(int i = 0; i < synth->buffersize; ++i) tmpwavel[i] += tw[i]; } float unison_amplitude = 1.0f / sqrt(unison_size[nvoice]); //reduce the amplitude for large unison sizes // Amplitude float oldam = oldamplitude[nvoice] * unison_amplitude; float newam = newamplitude[nvoice] * unison_amplitude; if(ABOVE_AMPLITUDE_THRESHOLD(oldam, newam)) { int rest = synth->buffersize; //test if the amplitude if raising and the difference is high if((newam > oldam) && ((newam - oldam) > 0.25f)) { rest = 10; if(rest > synth->buffersize) rest = synth->buffersize; for(int i = 0; i < synth->buffersize - rest; ++i) tmpwavel[i] *= oldam; if(stereo) for(int i = 0; i < synth->buffersize - rest; ++i) tmpwaver[i] *= oldam; } // Amplitude interpolation for(int i = 0; i < rest; ++i) { float amp = INTERPOLATE_AMPLITUDE(oldam, newam, i, rest); tmpwavel[i + (synth->buffersize - rest)] *= amp; if(stereo) tmpwaver[i + (synth->buffersize - rest)] *= amp; } } else { for(int i = 0; i < synth->buffersize; ++i) tmpwavel[i] *= newam; if(stereo) for(int i = 0; i < synth->buffersize; ++i) tmpwaver[i] *= newam; } // Fade in if(firsttick[nvoice] != 0) { fadein(&tmpwavel[0]); if(stereo) fadein(&tmpwaver[0]); firsttick[nvoice] = 0; } // Filter if(NoteVoicePar[nvoice].VoiceFilterL != NULL) NoteVoicePar[nvoice].VoiceFilterL->filterout(&tmpwavel[0]); if((stereo) && (NoteVoicePar[nvoice].VoiceFilterR != NULL)) NoteVoicePar[nvoice].VoiceFilterR->filterout(&tmpwaver[0]); //check if the amplitude envelope is finished, if yes, the voice will be fadeout if(NoteVoicePar[nvoice].AmpEnvelope != NULL) if(NoteVoicePar[nvoice].AmpEnvelope->finished() != 0) { for(int i = 0; i < synth->buffersize; ++i) tmpwavel[i] *= 1.0f - (float)i / synth->buffersize_f; if(stereo) for(int i = 0; i < synth->buffersize; ++i) tmpwaver[i] *= 1.0f - (float)i / synth->buffersize_f; } //the voice is killed later // Put the ADnote samples in VoiceOut (without appling Global volume, because I wish to use this voice as a modullator) if(NoteVoicePar[nvoice].VoiceOut != NULL) { if(stereo) for(int i = 0; i < synth->buffersize; ++i) NoteVoicePar[nvoice].VoiceOut[i] = tmpwavel[i] + tmpwaver[i]; else //mono for(int i = 0; i < synth->buffersize; ++i) NoteVoicePar[nvoice].VoiceOut[i] = tmpwavel[i]; } // Add the voice that do not bypass the filter to out if(NoteVoicePar[nvoice].filterbypass == 0) { //no bypass if(stereo) for(int i = 0; i < synth->buffersize; ++i) { //stereo outl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume * NoteVoicePar[nvoice].Panning * 2.0f; outr[i] += tmpwaver[i] * NoteVoicePar[nvoice].Volume * (1.0f - NoteVoicePar[nvoice].Panning) * 2.0f; } else for(int i = 0; i < synth->buffersize; ++i) //mono outl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume; } else { //bypass the filter if(stereo) for(int i = 0; i < synth->buffersize; ++i) { //stereo bypassl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume * NoteVoicePar[nvoice].Panning * 2.0f; bypassr[i] += tmpwaver[i] * NoteVoicePar[nvoice].Volume * (1.0f - NoteVoicePar[nvoice].Panning) * 2.0f; } else for(int i = 0; i < synth->buffersize; ++i) //mono bypassl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume; } // chech if there is necesary to proces the voice longer (if the Amplitude envelope isn't finished) if(NoteVoicePar[nvoice].AmpEnvelope != NULL) if(NoteVoicePar[nvoice].AmpEnvelope->finished() != 0) KillVoice(nvoice); } //Processing Global parameters NoteGlobalPar.GlobalFilterL->filterout(&outl[0]); if(stereo == 0) { //set the right channel=left channel memcpy(outr, outl, synth->bufferbytes); memcpy(bypassr, bypassl, synth->bufferbytes); } else NoteGlobalPar.GlobalFilterR->filterout(&outr[0]); for(int i = 0; i < synth->buffersize; ++i) { outl[i] += bypassl[i]; outr[i] += bypassr[i]; } if(ABOVE_AMPLITUDE_THRESHOLD(globaloldamplitude, globalnewamplitude)) // Amplitude Interpolation for(int i = 0; i < synth->buffersize; ++i) { float tmpvol = INTERPOLATE_AMPLITUDE(globaloldamplitude, globalnewamplitude, i, synth->buffersize); outl[i] *= tmpvol * NoteGlobalPar.Panning; outr[i] *= tmpvol * (1.0f - NoteGlobalPar.Panning); } else for(int i = 0; i < synth->buffersize; ++i) { outl[i] *= globalnewamplitude * NoteGlobalPar.Panning; outr[i] *= globalnewamplitude * (1.0f - NoteGlobalPar.Panning); } //Apply the punch if(NoteGlobalPar.Punch.Enabled != 0) for(int i = 0; i < synth->buffersize; ++i) { float punchamp = NoteGlobalPar.Punch.initialvalue * NoteGlobalPar.Punch.t + 1.0f; outl[i] *= punchamp; outr[i] *= punchamp; NoteGlobalPar.Punch.t -= NoteGlobalPar.Punch.dt; if(NoteGlobalPar.Punch.t < 0.0f) { NoteGlobalPar.Punch.Enabled = 0; break; } } // Apply legato-specific sound signal modifications legato.apply(*this, outl, outr); // Check if the global amplitude is finished. // If it does, disable the note if(NoteGlobalPar.AmpEnvelope->finished()) { for(int i = 0; i < synth->buffersize; ++i) { //fade-out float tmp = 1.0f - (float)i / synth->buffersize_f; outl[i] *= tmp; outr[i] *= tmp; } KillNote(); } return 1; } /* * Relase the key (NoteOff) */ void ADnote::relasekey() { for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) NoteVoicePar[nvoice].releasekey(); NoteGlobalPar.FreqEnvelope->relasekey(); NoteGlobalPar.FilterEnvelope->relasekey(); NoteGlobalPar.AmpEnvelope->relasekey(); } /* * Check if the note is finished */ int ADnote::finished() const { if(NoteEnabled == ON) return 0; else return 1; } void ADnote::Voice::releasekey() { if(!Enabled) return; if(AmpEnvelope) AmpEnvelope->relasekey(); if(FreqEnvelope) FreqEnvelope->relasekey(); if(FilterEnvelope) FilterEnvelope->relasekey(); if(FMFreqEnvelope) FMFreqEnvelope->relasekey(); if(FMAmpEnvelope) FMAmpEnvelope->relasekey(); } template static inline void nullify(T &t) {delete t; t = NULL; } template static inline void arrayNullify(T &t) {delete [] t; t = NULL; } void ADnote::Voice::kill() { arrayNullify(OscilSmp); nullify(FreqEnvelope); nullify(FreqLfo); nullify(AmpEnvelope); nullify(AmpLfo); nullify(VoiceFilterL); nullify(VoiceFilterR); nullify(FilterEnvelope); nullify(FilterLfo); nullify(FMFreqEnvelope); nullify(FMAmpEnvelope); if((FMEnabled != NONE) && (FMVoice < 0)) { delete[] FMSmp; FMSmp = NULL; } if(VoiceOut) memset(VoiceOut, 0, synth->bufferbytes); //do not delete, yet: perhaps is used by another voice Enabled = OFF; } void ADnote::Global::kill() { nullify(FreqEnvelope); nullify(FreqLfo); nullify(AmpEnvelope); nullify(AmpLfo); nullify(GlobalFilterL); nullify(GlobalFilterR); nullify(FilterEnvelope); nullify(FilterLfo); } void ADnote::Global::initparameters(const ADnoteGlobalParam ¶m, float basefreq, float velocity, bool stereo) { FreqEnvelope = new Envelope(param.FreqEnvelope, basefreq); FreqLfo = new LFO(param.FreqLfo, basefreq); AmpEnvelope = new Envelope(param.AmpEnvelope, basefreq); AmpLfo = new LFO(param.AmpLfo, basefreq); Volume = 4.0f * powf(0.1f, 3.0f * (1.0f - param.PVolume / 96.0f)) //-60 dB .. 0 dB * VelF(velocity, param.PAmpVelocityScaleFunction); //sensing GlobalFilterL = Filter::generate(param.GlobalFilter); if(stereo) GlobalFilterR = Filter::generate(param.GlobalFilter); else GlobalFilterR = NULL; FilterEnvelope = new Envelope(param.FilterEnvelope, basefreq); FilterLfo = new LFO(param.FilterLfo, basefreq); FilterQ = param.GlobalFilter->getq(); FilterFreqTracking = param.GlobalFilter->getfreqtracking(basefreq); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h000066400000000000000000000254251247673406200243110ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer ADnote.h - The "additive" synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef AD_NOTE_H #define AD_NOTE_H #include "SynthNote.h" #include "Envelope.h" #include "LFO.h" #include "../Params/ADnoteParameters.h" #include "../Params/Controller.h" //Globals /**FM amplitude tune*/ #define FM_AMP_MULTIPLIER 14.71280603f #define OSCIL_SMP_EXTRA_SAMPLES 5 /**The "additive" synthesizer*/ class ADnote:public SynthNote { public: /**Constructor. * @param pars Note Parameters * @param ctl_ Pointer to system Controller * @param freq Base frequency for note * @param velocity Velocity of note * @param portamento_ 1 if the note has portamento * @param midinote_ The midi number of the note * @param besilent Start silent note if true*/ ADnote(ADnoteParameters *pars, Controller *ctl_, float freq, float velocity, int portamento_, int midinote_, bool besilent); /**Destructor*/ ~ADnote(); /**Alters the playing note for legato effect*/ void legatonote(float freq, float velocity, int portamento_, int midinote_, bool externcall); int noteout(float *outl, float *outr); void relasekey(); int finished() const; private: /**Changes the frequency of an oscillator. * @param nvoice voice to run computations on * @param in_freq new frequency*/ void setfreq(int nvoice, float in_freq); /**Set the frequency of the modulator oscillator*/ void setfreqFM(int nvoice, float in_freq); /**Computes relative frequency for unison and unison's vibratto. * Note: Must be called before setfreq* functions.*/ void compute_unison_freq_rap(int nvoice); /**Compute parameters for next tick*/ void computecurrentparameters(); /**Initializes All Parameters*/ void initparameters(); /**Deallocate/Cleanup given voice*/ void KillVoice(int nvoice); /**Deallocate Note resources and voice resources*/ void KillNote(); /**Get the Voice's base frequency*/ inline float getvoicebasefreq(int nvoice) const; /**Get modulator's base frequency*/ inline float getFMvoicebasefreq(int nvoice) const; /**Compute the Oscillator's samples. * Affects tmpwave_unison and updates oscposhi/oscposlo*/ inline void ComputeVoiceOscillator_LinearInterpolation(int nvoice); /**Compute the Oscillator's samples. * Affects tmpwave_unison and updates oscposhi/oscposlo * @todo remove this declaration if it is commented out*/ inline void ComputeVoiceOscillator_CubicInterpolation(int nvoice); /**Computes the Oscillator samples with morphing. * updates tmpwave_unison*/ inline void ComputeVoiceOscillatorMorph(int nvoice); /**Computes the Ring Modulated Oscillator.*/ inline void ComputeVoiceOscillatorRingModulation(int nvoice); /**Computes the Frequency Modulated Oscillator. * @param FMmode modulation type 0=Phase 1=Frequency*/ inline void ComputeVoiceOscillatorFrequencyModulation(int nvoice, int FMmode); // inline void ComputeVoiceOscillatorFrequencyModulation(int nvoice); /**TODO*/ inline void ComputeVoiceOscillatorPitchModulation(int nvoice); /**Generate Noise Samples for Voice*/ inline void ComputeVoiceNoise(int nvoice); /**Fadein in a way that removes clicks but keep sound "punchy"*/ inline void fadein(float *smps) const; //GLOBALS ADnoteParameters *partparams; unsigned char stereo; //if the note is stereo (allows note Panning) int midinote; float velocity, basefreq; ONOFFTYPE NoteEnabled; Controller *ctl; /*****************************************************************/ /* GLOBAL PARAMETERS */ /*****************************************************************/ struct Global { void kill(); void initparameters(const ADnoteGlobalParam ¶m, float basefreq, float velocity, bool stereo); /****************************************** * FREQUENCY GLOBAL PARAMETERS * ******************************************/ float Detune; //cents Envelope *FreqEnvelope; LFO *FreqLfo; /******************************************** * AMPLITUDE GLOBAL PARAMETERS * ********************************************/ float Volume; // [ 0 .. 1 ] float Panning; // [ 0 .. 1 ] Envelope *AmpEnvelope; LFO *AmpLfo; struct { int Enabled; float initialvalue, dt, t; } Punch; /****************************************** * FILTER GLOBAL PARAMETERS * ******************************************/ class Filter * GlobalFilterL, *GlobalFilterR; float FilterCenterPitch; //octaves float FilterQ; float FilterFreqTracking; Envelope *FilterEnvelope; LFO *FilterLfo; } NoteGlobalPar; /***********************************************************/ /* VOICE PARAMETERS */ /***********************************************************/ struct Voice { void releasekey(); void kill(); /* If the voice is enabled */ ONOFFTYPE Enabled; /* Voice Type (sound/noise)*/ int noisetype; /* Filter Bypass */ int filterbypass; /* Delay (ticks) */ int DelayTicks; /* Waveform of the Voice */ float *OscilSmp; /************************************ * FREQUENCY PARAMETERS * ************************************/ int fixedfreq; //if the frequency is fixed to 440 Hz int fixedfreqET; //if the "fixed" frequency varies according to the note (ET) // cents = basefreq*VoiceDetune float Detune, FineDetune; Envelope *FreqEnvelope; LFO *FreqLfo; /*************************** * AMPLITUDE PARAMETERS * ***************************/ /* Panning 0.0f=left, 0.5f - center, 1.0f = right */ float Panning; float Volume; // [-1.0f .. 1.0f] Envelope *AmpEnvelope; LFO *AmpLfo; /************************* * FILTER PARAMETERS * *************************/ class Filter * VoiceFilterL; class Filter * VoiceFilterR; float FilterCenterPitch; /* Filter center Pitch*/ float FilterFreqTracking; Envelope *FilterEnvelope; LFO *FilterLfo; /**************************** * MODULLATOR PARAMETERS * ****************************/ FMTYPE FMEnabled; int FMVoice; // Voice Output used by other voices if use this as modullator float *VoiceOut; /* Wave of the Voice */ float *FMSmp; float FMVolume; float FMDetune; //in cents Envelope *FMFreqEnvelope; Envelope *FMAmpEnvelope; } NoteVoicePar[NUM_VOICES]; /********************************************************/ /* INTERNAL VALUES OF THE NOTE AND OF THE VOICES */ /********************************************************/ //time from the start of the note float time; //the size of unison for a single voice int unison_size[NUM_VOICES]; //the stereo spread of the unison subvoices (0.0f=mono,1.0f=max) float unison_stereo_spread[NUM_VOICES]; //fractional part (skip) float *oscposlo[NUM_VOICES], *oscfreqlo[NUM_VOICES]; //integer part (skip) int *oscposhi[NUM_VOICES], *oscfreqhi[NUM_VOICES]; //fractional part (skip) of the Modullator float *oscposloFM[NUM_VOICES], *oscfreqloFM[NUM_VOICES]; //the unison base_value float *unison_base_freq_rap[NUM_VOICES]; //how the unison subvoice's frequency is changed (1.0f for no change) float *unison_freq_rap[NUM_VOICES]; //which subvoice has phase inverted bool *unison_invert_phase[NUM_VOICES]; //unison vibratto struct { float amplitude; //amplitude which be added to unison_freq_rap float *step; //value which increments the position float *position; //between -1.0f and 1.0f } unison_vibratto[NUM_VOICES]; //integer part (skip) of the Modullator unsigned int *oscposhiFM[NUM_VOICES], *oscfreqhiFM[NUM_VOICES]; //used to compute and interpolate the amplitudes of voices and modullators float oldamplitude[NUM_VOICES], newamplitude[NUM_VOICES], FMoldamplitude[NUM_VOICES], FMnewamplitude[NUM_VOICES]; //used by Frequency Modulation (for integration) float *FMoldsmp[NUM_VOICES]; //temporary buffer float *tmpwavel; float *tmpwaver; int max_unison; float **tmpwave_unison; //Filter bypass samples float *bypassl, *bypassr; //interpolate the amplitudes float globaloldamplitude, globalnewamplitude; //1 - if it is the fitst tick (used to fade in the sound) char firsttick[NUM_VOICES]; //1 if the note has portamento int portamento; //how the fine detunes are made bigger or smaller float bandwidthDetuneMultiplier; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/CMakeLists.txt000066400000000000000000000003041247673406200255130ustar00rootroot00000000000000set(zynaddsubfx_synth_SRCS Synth/SynthNote.cpp Synth/ADnote.cpp Synth/Envelope.cpp Synth/LFO.cpp Synth/OscilGen.cpp Synth/PADnote.cpp Synth/Resonance.cpp Synth/SUBnote.cpp PARENT_SCOPE ) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp000066400000000000000000000130211247673406200252340ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Envelope.cpp - Envelope implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "Envelope.h" #include "../Params/EnvelopeParams.h" Envelope::Envelope(EnvelopeParams *envpars, float basefreq) { int i; envpoints = envpars->Penvpoints; if(envpoints > MAX_ENVELOPE_POINTS) envpoints = MAX_ENVELOPE_POINTS; envsustain = (envpars->Penvsustain == 0) ? -1 : envpars->Penvsustain; forcedrelase = envpars->Pforcedrelease; envstretch = powf(440.0f / basefreq, envpars->Penvstretch / 64.0f); linearenvelope = envpars->Plinearenvelope; if(envpars->Pfreemode == 0) envpars->converttofree(); float bufferdt = synth->buffersize_f / synth->samplerate_f; int mode = envpars->Envmode; //for amplitude envelopes if((mode == 1) && (linearenvelope == 0)) mode = 2; //change to log envelope if((mode == 2) && (linearenvelope != 0)) mode = 1; //change to linear for(i = 0; i < MAX_ENVELOPE_POINTS; ++i) { float tmp = envpars->getdt(i) / 1000.0f * envstretch; if(tmp > bufferdt) envdt[i] = bufferdt / tmp; else envdt[i] = 2.0f; //any value larger than 1 switch(mode) { case 2: envval[i] = (1.0f - envpars->Penvval[i] / 127.0f) * -40; break; case 3: envval[i] = (powf(2, 6.0f * fabs(envpars->Penvval[i] - 64.0f) / 64.0f) - 1.0f) * 100.0f; if(envpars->Penvval[i] < 64) envval[i] = -envval[i]; break; case 4: envval[i] = (envpars->Penvval[i] - 64.0f) / 64.0f * 6.0f; //6 octaves (filtru) break; case 5: envval[i] = (envpars->Penvval[i] - 64.0f) / 64.0f * 10; break; default: envval[i] = envpars->Penvval[i] / 127.0f; } } envdt[0] = 1.0f; currentpoint = 1; //the envelope starts from 1 keyreleased = false; t = 0.0f; envfinish = false; inct = envdt[1]; envoutval = 0.0f; } Envelope::~Envelope() {} /* * Relase the key (note envelope) */ void Envelope::relasekey() { if(keyreleased) return; keyreleased = true; if(forcedrelase != 0) t = 0.0f; } /* * Envelope Output */ float Envelope::envout() { float out; if(envfinish) { //if the envelope is finished envoutval = envval[envpoints - 1]; return envoutval; } if((currentpoint == envsustain + 1) && !keyreleased) { //if it is sustaining now envoutval = envval[envsustain]; return envoutval; } if(keyreleased && (forcedrelase != 0)) { //do the forced release int tmp = (envsustain < 0) ? (envpoints - 1) : (envsustain + 1); //if there is no sustain point, use the last point for release if(envdt[tmp] < 0.00000001f) out = envval[tmp]; else out = envoutval + (envval[tmp] - envoutval) * t; t += envdt[tmp] * envstretch; if(t >= 1.0f) { currentpoint = envsustain + 2; forcedrelase = 0; t = 0.0f; inct = envdt[currentpoint]; if((currentpoint >= envpoints) || (envsustain < 0)) envfinish = true; } return out; } if(inct >= 1.0f) out = envval[currentpoint]; else out = envval[currentpoint - 1] + (envval[currentpoint] - envval[currentpoint - 1]) * t; t += inct; if(t >= 1.0f) { if(currentpoint >= envpoints - 1) envfinish = true; else currentpoint++; t = 0.0f; inct = envdt[currentpoint]; } envoutval = out; return out; } inline float Envelope::env_dB2rap(float db) { return (powf(10.0f, db / 20.0f) - 0.01)/.99f; } inline float Envelope::env_rap2dB(float rap) { return 20.0f * log10f(rap * 0.99f + 0.01); } /* * Envelope Output (dB) */ float Envelope::envout_dB() { float out; if(linearenvelope != 0) return envout(); if((currentpoint == 1) && (!keyreleased || (forcedrelase == 0))) { //first point is always lineary interpolated float v1 = env_dB2rap(envval[0]); float v2 = env_dB2rap(envval[1]); out = v1 + (v2 - v1) * t; t += inct; if(t >= 1.0f) { t = 0.0f; inct = envdt[2]; currentpoint++; out = v2; } if(out > 0.001f) envoutval = env_rap2dB(out); else envoutval = MIN_ENVELOPE_DB; } else out = env_dB2rap(envout()); return out; } bool Envelope::finished() const { return envfinish; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h000066400000000000000000000037631247673406200247150ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Envelope.h - Envelope implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ENVELOPE_H #define ENVELOPE_H #include "../globals.h" #include "../Params/EnvelopeParams.h" /**Implementation of a general Envelope*/ class Envelope { public: /**Constructor*/ Envelope(class EnvelopeParams *envpars, float basefreq); /**Destructor*/ ~Envelope(); void relasekey(); float envout(); float envout_dB(); /**Determines the status of the Envelope * @return returns 1 if the envelope is finished*/ bool finished() const; private: float env_rap2dB(float rap); float env_dB2rap(float db); int envpoints; int envsustain; //"-1" means disabled float envdt[MAX_ENVELOPE_POINTS]; //millisecons float envval[MAX_ENVELOPE_POINTS]; // [0.0f .. 1.0f] float envstretch; int linearenvelope; int currentpoint; //current envelope point (starts from 1) int forcedrelase; bool keyreleased; //if the key was released bool envfinish; float t; // the time from the last point float inct; // the time increment float envoutval; //used to do the forced release }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp000066400000000000000000000115251247673406200241060ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer LFO.cpp - LFO implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "LFO.h" #include "../Misc/Util.h" #include #include #include LFO::LFO(LFOParams *lfopars, float basefreq) { if(lfopars->Pstretch == 0) lfopars->Pstretch = 1; float lfostretch = powf(basefreq / 440.0f, (lfopars->Pstretch - 64.0f) / 63.0f); //max 2x/octave float lfofreq = (powf(2, lfopars->Pfreq * 10.0f) - 1.0f) / 12.0f * lfostretch; incx = fabs(lfofreq) * synth->buffersize_f / synth->samplerate_f; if(lfopars->Pcontinous == 0) { if(lfopars->Pstartphase == 0) x = RND; else x = fmod((lfopars->Pstartphase - 64.0f) / 127.0f + 1.0f, 1.0f); } else { float tmp = fmod(lfopars->time * incx, 1.0f); x = fmod((lfopars->Pstartphase - 64.0f) / 127.0f + 1.0f + tmp, 1.0f); } //Limit the Frequency(or else...) if(incx > 0.49999999f) incx = 0.499999999f; lfornd = lfopars->Prandomness / 127.0f; if(lfornd < 0.0f) lfornd = 0.0f; else if(lfornd > 1.0f) lfornd = 1.0f; // lfofreqrnd=powf(lfopars->Pfreqrand/127.0f,2.0f)*2.0f*4.0f; lfofreqrnd = powf(lfopars->Pfreqrand / 127.0f, 2.0f) * 4.0f; switch(lfopars->fel) { case 1: lfointensity = lfopars->Pintensity / 127.0f; break; case 2: lfointensity = lfopars->Pintensity / 127.0f * 4.0f; break; //in octave default: lfointensity = powf(2, lfopars->Pintensity / 127.0f * 11.0f) - 1.0f; //in centi x -= 0.25f; //chance the starting phase break; } amp1 = (1 - lfornd) + lfornd * RND; amp2 = (1 - lfornd) + lfornd * RND; lfotype = lfopars->PLFOtype; lfodelay = lfopars->Pdelay / 127.0f * 4.0f; //0..4 sec incrnd = nextincrnd = 1.0f; freqrndenabled = (lfopars->Pfreqrand != 0); computenextincrnd(); computenextincrnd(); //twice because I want incrnd & nextincrnd to be random } LFO::~LFO() {} /* * LFO out */ float LFO::lfoout() { float out; switch(lfotype) { case 1: //LFO_TRIANGLE if((x >= 0.0f) && (x < 0.25f)) out = 4.0f * x; else if((x > 0.25f) && (x < 0.75f)) out = 2 - 4 * x; else out = 4.0f * x - 4.0f; break; case 2: //LFO_SQUARE if(x < 0.5f) out = -1; else out = 1; break; case 3: //LFO_RAMPUP out = (x - 0.5f) * 2.0f; break; case 4: //LFO_RAMPDOWN out = (0.5f - x) * 2.0f; break; case 5: //LFO_EXP_DOWN 1 out = powf(0.05f, x) * 2.0f - 1.0f; break; case 6: //LFO_EXP_DOWN 2 out = powf(0.001f, x) * 2.0f - 1.0f; break; default: out = cosf(x * 2.0f * PI); //LFO_SINE } if((lfotype == 0) || (lfotype == 1)) out *= lfointensity * (amp1 + x * (amp2 - amp1)); else out *= lfointensity * amp2; if(lfodelay < 0.00001f) { if(freqrndenabled == 0) x += incx; else { float tmp = (incrnd * (1.0f - x) + nextincrnd * x); if(tmp > 1.0f) tmp = 1.0f; else if(tmp < 0.0f) tmp = 0.0f; x += incx * tmp; } if(x >= 1) { x = fmod(x, 1.0f); amp1 = amp2; amp2 = (1 - lfornd) + lfornd * RND; computenextincrnd(); } } else lfodelay -= synth->buffersize_f / synth->samplerate_f; return out; } /* * LFO out (for amplitude) */ float LFO::amplfoout() { float out; out = 1.0f - lfointensity + lfoout(); if(out < -1.0f) out = -1.0f; else if(out > 1.0f) out = 1.0f; return out; } void LFO::computenextincrnd() { if(freqrndenabled == 0) return; incrnd = nextincrnd; nextincrnd = powf(0.5f, lfofreqrnd) + RND * (powf(2.0f, lfofreqrnd) - 1.0f); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h000066400000000000000000000031431247673406200235500ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer LFO.h - LFO implementation Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef LFO_H #define LFO_H #include "../globals.h" #include "../Params/LFOParams.h" /**Class for creating Low Frequency Ocillators*/ class LFO { public: /**Constructor * * @param lfopars pointer to a LFOParams object * @param basefreq base frequency of LFO */ LFO(LFOParams *lfopars, float basefreq); /**Deconstructor*/ ~LFO(); float lfoout(); float amplfoout(); private: float x; float incx, incrnd, nextincrnd; float amp1, amp2; // used for randomness float lfointensity; float lfornd, lfofreqrnd; float lfodelay; /**\todo see if an enum would be better here*/ char lfotype; int freqrndenabled; void computenextincrnd(); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp000066400000000000000000001173641247673406200252010ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer OscilGen.cpp - Waveform generator for ADnote Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "OscilGen.h" #include "../Misc/WaveShapeSmps.h" #include #include #include #include //operations on FFTfreqs inline void clearAll(fft_t *freqs) { memset(freqs, 0, synth->oscilsize / 2 * sizeof(fft_t)); } inline void clearDC(fft_t *freqs) { freqs[0] = fft_t(0.0f, 0.0f); } //return magnitude squared inline float normal(const fft_t *freqs, off_t x) { return norm(freqs[x]); } //return magnitude inline float abs(const fft_t *freqs, off_t x) { return abs(freqs[x]); } //return angle aka phase from a sine (not cosine wave) inline float arg(const fft_t *freqs, off_t x) { const fft_t tmp(freqs[x].imag(), freqs[x].real()); return arg(tmp); } /** * Take frequency spectrum and ensure values are normalized based upon * magnitude to 0<=x<=1 */ void normalize(fft_t *freqs) { float normMax = 0.0f; for(int i = 0; i < synth->oscilsize / 2; ++i) { //magnitude squared const float norm = normal(freqs, i); if(normMax < norm) normMax = norm; } const float max = sqrt(normMax); if(max < 1e-8) //data is all ~zero, do not amplify noise return; for(int i = 0; i < synth->oscilsize / 2; ++i) freqs[i] /= max; } //Full RMS normalize void rmsNormalize(fft_t *freqs) { float sum = 0.0f; for(int i = 1; i < synth->oscilsize / 2; ++i) sum += normal(freqs, i); if(sum < 0.000001f) return; //data is all ~zero, do not amplify noise const float gain = 1.0f / sqrt(sum); for(int i = 1; i < synth->oscilsize / 2; ++i) freqs[i] *= gain; } #define DIFF(par) (old ## par != P ## par) OscilGen::OscilGen(FFTwrapper *fft_, Resonance *res_):Presets() { assert(fft_); setpresettype("Poscilgen"); fft = fft_; res = res_; tmpsmps = new float[synth->oscilsize]; outoscilFFTfreqs = new fft_t[synth->oscilsize / 2]; oscilFFTfreqs = new fft_t[synth->oscilsize / 2]; basefuncFFTfreqs = new fft_t[synth->oscilsize / 2]; randseed = 1; ADvsPAD = false; defaults(); } OscilGen::~OscilGen() { delete[] tmpsmps; delete[] outoscilFFTfreqs; delete[] basefuncFFTfreqs; delete[] oscilFFTfreqs; } void OscilGen::defaults() { oldbasefunc = 0; oldbasepar = 64; oldhmagtype = 0; oldwaveshapingfunction = 0; oldwaveshaping = 64; oldbasefuncmodulation = 0; oldharmonicshift = 0; oldbasefuncmodulationpar1 = 0; oldbasefuncmodulationpar2 = 0; oldbasefuncmodulationpar3 = 0; oldmodulation = 0; oldmodulationpar1 = 0; oldmodulationpar2 = 0; oldmodulationpar3 = 0; for(int i = 0; i < MAX_AD_HARMONICS; ++i) { hmag[i] = 0.0f; hphase[i] = 0.0f; Phmag[i] = 64; Phphase[i] = 64; } Phmag[0] = 127; Phmagtype = 0; if(ADvsPAD) Prand = 127; //max phase randomness (usefull if the oscil will be imported to a ADsynth from a PADsynth else Prand = 64; //no randomness Pcurrentbasefunc = 0; Pbasefuncpar = 64; Pbasefuncmodulation = 0; Pbasefuncmodulationpar1 = 64; Pbasefuncmodulationpar2 = 64; Pbasefuncmodulationpar3 = 32; Pmodulation = 0; Pmodulationpar1 = 64; Pmodulationpar2 = 64; Pmodulationpar3 = 32; Pwaveshapingfunction = 0; Pwaveshaping = 64; Pfiltertype = 0; Pfilterpar1 = 64; Pfilterpar2 = 64; Pfilterbeforews = 0; Psatype = 0; Psapar = 64; Pamprandpower = 64; Pamprandtype = 0; Pharmonicshift = 0; Pharmonicshiftfirst = 0; Padaptiveharmonics = 0; Padaptiveharmonicspower = 100; Padaptiveharmonicsbasefreq = 128; Padaptiveharmonicspar = 50; clearAll(oscilFFTfreqs); clearAll(basefuncFFTfreqs); oscilprepared = 0; oldfilterpars = 0; oldsapars = 0; prepare(); } void OscilGen::convert2sine() { float mag[MAX_AD_HARMONICS], phase[MAX_AD_HARMONICS]; float oscil[synth->oscilsize]; fft_t *freqs = new fft_t[synth->oscilsize / 2]; get(oscil, -1.0f); FFTwrapper *fft = new FFTwrapper(synth->oscilsize); fft->smps2freqs(oscil, freqs); delete (fft); normalize(freqs); mag[0] = 0; phase[0] = 0; for(int i = 0; i < MAX_AD_HARMONICS; ++i) { mag[i] = abs(freqs, i + 1); phase[i] = arg(freqs, i + 1); } defaults(); for(int i = 0; i < MAX_AD_HARMONICS - 1; ++i) { float newmag = mag[i]; float newphase = phase[i]; Phmag[i] = (int) ((newmag) * 64.0f) + 64; Phphase[i] = 64 - (int) (64.0f * newphase / PI); if(Phphase[i] > 127) Phphase[i] = 127; if(Phmag[i] == 64) Phphase[i] = 64; } delete[] freqs; prepare(); } /* * Get the base function */ void OscilGen::getbasefunction(float *smps) { int i; float par = (Pbasefuncpar + 0.5f) / 128.0f; if(Pbasefuncpar == 64) par = 0.5f; float basefuncmodulationpar1 = Pbasefuncmodulationpar1 / 127.0f, basefuncmodulationpar2 = Pbasefuncmodulationpar2 / 127.0f, basefuncmodulationpar3 = Pbasefuncmodulationpar3 / 127.0f; switch(Pbasefuncmodulation) { case 1: basefuncmodulationpar1 = (powf(2, basefuncmodulationpar1 * 5.0f) - 1.0f) / 10.0f; basefuncmodulationpar3 = floor((powf(2, basefuncmodulationpar3 * 5.0f) - 1.0f)); if(basefuncmodulationpar3 < 0.9999f) basefuncmodulationpar3 = -1.0f; break; case 2: basefuncmodulationpar1 = (powf(2, basefuncmodulationpar1 * 5.0f) - 1.0f) / 10.0f; basefuncmodulationpar3 = 1.0f + floor((powf(2, basefuncmodulationpar3 * 5.0f) - 1.0f)); break; case 3: basefuncmodulationpar1 = (powf(2, basefuncmodulationpar1 * 7.0f) - 1.0f) / 10.0f; basefuncmodulationpar3 = 0.01f + (powf(2, basefuncmodulationpar3 * 16.0f) - 1.0f) / 10.0f; break; } base_func func = getBaseFunction(Pcurrentbasefunc); for(i = 0; i < synth->oscilsize; ++i) { float t = i * 1.0f / synth->oscilsize; switch(Pbasefuncmodulation) { case 1: t = t * basefuncmodulationpar3 + sinf( (t + basefuncmodulationpar2) * 2.0f * PI) * basefuncmodulationpar1; //rev break; case 2: t = t + sinf( (t * basefuncmodulationpar3 + basefuncmodulationpar2) * 2.0f * PI) * basefuncmodulationpar1; //sine break; case 3: t = t + powf((1.0f - cosf( (t + basefuncmodulationpar2) * 2.0f * PI)) * 0.5f, basefuncmodulationpar3) * basefuncmodulationpar1; //power break; } t = t - floor(t); if(func) smps[i] = func(t, par); else smps[i] = -sinf(2.0f * PI * i / synth->oscilsize); } } /* * Filter the oscillator */ void OscilGen::oscilfilter() { if(Pfiltertype == 0) return; const float par = 1.0f - Pfilterpar1 / 128.0f; const float par2 = Pfilterpar2 / 127.0f; filter_func filter = getFilter(Pfiltertype); for(int i = 1; i < synth->oscilsize / 2; ++i) oscilFFTfreqs[i] *= filter(i, par, par2); normalize(oscilFFTfreqs); } /* * Change the base function */ void OscilGen::changebasefunction() { if(Pcurrentbasefunc != 0) { getbasefunction(tmpsmps); fft->smps2freqs(tmpsmps, basefuncFFTfreqs); clearDC(basefuncFFTfreqs); } else //in this case basefuncFFTfreqs are not used clearAll(basefuncFFTfreqs); oscilprepared = 0; oldbasefunc = Pcurrentbasefunc; oldbasepar = Pbasefuncpar; oldbasefuncmodulation = Pbasefuncmodulation; oldbasefuncmodulationpar1 = Pbasefuncmodulationpar1; oldbasefuncmodulationpar2 = Pbasefuncmodulationpar2; oldbasefuncmodulationpar3 = Pbasefuncmodulationpar3; } inline void normalize(float *smps, size_t N) { //Find max float max = 0.0f; for(size_t i = 0; i < N; ++i) if(max < fabs(smps[i])) max = fabs(smps[i]); if(max < 0.00001f) max = 1.0f; //Normalize to +-1 for(size_t i = 0; i < N; ++i) smps[i] /= max; } /* * Waveshape */ void OscilGen::waveshape() { oldwaveshapingfunction = Pwaveshapingfunction; oldwaveshaping = Pwaveshaping; if(Pwaveshapingfunction == 0) return; clearDC(oscilFFTfreqs); //reduce the amplitude of the freqs near the nyquist for(int i = 1; i < synth->oscilsize / 8; ++i) { float gain = i / (synth->oscilsize / 8.0f); oscilFFTfreqs[synth->oscilsize / 2 - i] *= gain; } fft->freqs2smps(oscilFFTfreqs, tmpsmps); //Normalize normalize(tmpsmps, synth->oscilsize); //Do the waveshaping waveShapeSmps(synth->oscilsize, tmpsmps, Pwaveshapingfunction, Pwaveshaping); fft->smps2freqs(tmpsmps, oscilFFTfreqs); //perform FFT } /* * Do the Frequency Modulation of the Oscil */ void OscilGen::modulation() { int i; oldmodulation = Pmodulation; oldmodulationpar1 = Pmodulationpar1; oldmodulationpar2 = Pmodulationpar2; oldmodulationpar3 = Pmodulationpar3; if(Pmodulation == 0) return; float modulationpar1 = Pmodulationpar1 / 127.0f, modulationpar2 = 0.5f - Pmodulationpar2 / 127.0f, modulationpar3 = Pmodulationpar3 / 127.0f; switch(Pmodulation) { case 1: modulationpar1 = (powf(2, modulationpar1 * 7.0f) - 1.0f) / 100.0f; modulationpar3 = floor((powf(2, modulationpar3 * 5.0f) - 1.0f)); if(modulationpar3 < 0.9999f) modulationpar3 = -1.0f; break; case 2: modulationpar1 = (powf(2, modulationpar1 * 7.0f) - 1.0f) / 100.0f; modulationpar3 = 1.0f + floor((powf(2, modulationpar3 * 5.0f) - 1.0f)); break; case 3: modulationpar1 = (powf(2, modulationpar1 * 9.0f) - 1.0f) / 100.0f; modulationpar3 = 0.01f + (powf(2, modulationpar3 * 16.0f) - 1.0f) / 10.0f; break; } clearDC(oscilFFTfreqs); //remove the DC //reduce the amplitude of the freqs near the nyquist for(i = 1; i < synth->oscilsize / 8; ++i) { float tmp = i / (synth->oscilsize / 8.0f); oscilFFTfreqs[synth->oscilsize / 2 - i] *= tmp; } fft->freqs2smps(oscilFFTfreqs, tmpsmps); int extra_points = 2; float *in = new float[synth->oscilsize + extra_points]; //Normalize normalize(tmpsmps, synth->oscilsize); for(i = 0; i < synth->oscilsize; ++i) in[i] = tmpsmps[i]; for(i = 0; i < extra_points; ++i) in[i + synth->oscilsize] = tmpsmps[i]; //Do the modulation for(i = 0; i < synth->oscilsize; ++i) { float t = i * 1.0f / synth->oscilsize; switch(Pmodulation) { case 1: t = t * modulationpar3 + sinf((t + modulationpar2) * 2.0f * PI) * modulationpar1; //rev break; case 2: t = t + sinf((t * modulationpar3 + modulationpar2) * 2.0f * PI) * modulationpar1; //sine break; case 3: t = t + powf((1.0f - cosf( (t + modulationpar2) * 2.0f * PI)) * 0.5f, modulationpar3) * modulationpar1; //power break; } t = (t - floor(t)) * synth->oscilsize; int poshi = (int) t; float poslo = t - floor(t); tmpsmps[i] = in[poshi] * (1.0f - poslo) + in[poshi + 1] * poslo; } delete [] in; fft->smps2freqs(tmpsmps, oscilFFTfreqs); //perform FFT } /* * Adjust the spectrum */ void OscilGen::spectrumadjust() { if(Psatype == 0) return; float par = Psapar / 127.0f; switch(Psatype) { case 1: par = 1.0f - par * 2.0f; if(par >= 0.0f) par = powf(5.0f, par); else par = powf(8.0f, par); break; case 2: par = powf(10.0f, (1.0f - par) * 3.0f) * 0.001f; break; case 3: par = powf(10.0f, (1.0f - par) * 3.0f) * 0.001f; break; } normalize(oscilFFTfreqs); for(int i = 0; i < synth->oscilsize / 2; ++i) { float mag = abs(oscilFFTfreqs, i); float phase = M_PI_2 - arg(oscilFFTfreqs, i); switch(Psatype) { case 1: mag = powf(mag, par); break; case 2: if(mag < par) mag = 0.0f; break; case 3: mag /= par; if(mag > 1.0f) mag = 1.0f; break; } oscilFFTfreqs[i] = std::polar(mag, phase); } } void OscilGen::shiftharmonics() { if(Pharmonicshift == 0) return; int harmonicshift = -Pharmonicshift; fft_t h; if(harmonicshift > 0) for(int i = synth->oscilsize / 2 - 2; i >= 0; i--) { int oldh = i - harmonicshift; if(oldh < 0) h = 0.0f; else h = oscilFFTfreqs[oldh + 1]; oscilFFTfreqs[i + 1] = h; } else for(int i = 0; i < synth->oscilsize / 2 - 1; ++i) { int oldh = i + abs(harmonicshift); if(oldh >= (synth->oscilsize / 2 - 1)) h = 0.0f; else { h = oscilFFTfreqs[oldh + 1]; if(abs(h) < 0.000001f) h = 0.0f; } oscilFFTfreqs[i + 1] = h; } clearDC(oscilFFTfreqs); } /* * Prepare the Oscillator */ void OscilGen::prepare() { if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc) || DIFF(basefuncmodulation) || DIFF(basefuncmodulationpar1) || DIFF(basefuncmodulationpar2) || DIFF(basefuncmodulationpar3)) changebasefunction(); for(int i = 0; i < MAX_AD_HARMONICS; ++i) hphase[i] = (Phphase[i] - 64.0f) / 64.0f * PI / (i + 1); for(int i = 0; i < MAX_AD_HARMONICS; ++i) { const float hmagnew = 1.0f - fabs(Phmag[i] / 64.0f - 1.0f); switch(Phmagtype) { case 1: hmag[i] = expf(hmagnew * logf(0.01f)); break; case 2: hmag[i] = expf(hmagnew * logf(0.001f)); break; case 3: hmag[i] = expf(hmagnew * logf(0.0001f)); break; case 4: hmag[i] = expf(hmagnew * logf(0.00001f)); break; default: hmag[i] = 1.0f - hmagnew; break; } if(Phmag[i] < 64) hmag[i] = -hmag[i]; } //remove the harmonics where Phmag[i]==64 for(int i = 0; i < MAX_AD_HARMONICS; ++i) if(Phmag[i] == 64) hmag[i] = 0.0f; clearAll(oscilFFTfreqs); if(Pcurrentbasefunc == 0) //the sine case for(int i = 0; i < MAX_AD_HARMONICS - 1; ++i) { oscilFFTfreqs[i + 1] = std::complex(-hmag[i] * sinf(hphase[i] * (i + 1)) / 2.0f, hmag[i] * cosf(hphase[i] * (i + 1)) / 2.0f); } else for(int j = 0; j < MAX_AD_HARMONICS; ++j) { if(Phmag[j] == 64) continue; for(int i = 1; i < synth->oscilsize / 2; ++i) { int k = i * (j + 1); if(k >= synth->oscilsize / 2) break; oscilFFTfreqs[k] += basefuncFFTfreqs[i] * std::polar( hmag[j], hphase[j] * k); } } if(Pharmonicshiftfirst != 0) shiftharmonics(); if(Pfilterbeforews == 0) { waveshape(); oscilfilter(); } else { oscilfilter(); waveshape(); } modulation(); spectrumadjust(); if(Pharmonicshiftfirst == 0) shiftharmonics(); clearDC(oscilFFTfreqs); oldhmagtype = Phmagtype; oldharmonicshift = Pharmonicshift + Pharmonicshiftfirst * 256; oscilprepared = 1; } void OscilGen::adaptiveharmonic(fft_t *f, float freq) { if(Padaptiveharmonics == 0 /*||(freq<1.0f)*/) return; if(freq < 1.0f) freq = 440.0f; fft_t *inf = new fft_t[synth->oscilsize / 2]; for(int i = 0; i < synth->oscilsize / 2; ++i) inf[i] = f[i]; clearAll(f); clearDC(inf); float hc = 0.0f, hs = 0.0f; float basefreq = 30.0f * powf(10.0f, Padaptiveharmonicsbasefreq / 128.0f); float power = (Padaptiveharmonicspower + 1.0f) / 101.0f; float rap = freq / basefreq; rap = powf(rap, power); bool down = false; if(rap > 1.0f) { rap = 1.0f / rap; down = true; } for(int i = 0; i < synth->oscilsize / 2 - 2; ++i) { float h = i * rap; int high = (int)(i * rap); float low = fmod(h, 1.0f); if(high >= (synth->oscilsize / 2 - 2)) break; else { if(down) { f[high] = std::complex(f[high].real() + inf[i].real() * (1.0f - low), f[high].imag() + inf[i].imag() * (1.0f - low)); f[high + 1] = std::complex(f[high + 1].real() + inf[i].real() * low, f[high + 1].imag() + inf[i].imag() * low); } else { hc = inf[high].real() * (1.0f - low) + inf[high + 1].real() * low; hs = inf[high].imag() * (1.0f - low) + inf[high + 1].imag() * low; } if(fabs(hc) < 0.000001f) hc = 0.0f; if(fabs(hs) < 0.000001f) hs = 0.0f; } if(!down) { if(i == 0) { //corect the aplitude of the first harmonic hc *= rap; hs *= rap; } f[i] = fft_t(hc, hs); } } f[1] += f[0]; clearDC(f); delete[] inf; } void OscilGen::adaptiveharmonicpostprocess(fft_t *f, int size) { if(Padaptiveharmonics <= 1) return; fft_t *inf = new fft_t[size]; float par = Padaptiveharmonicspar * 0.01f; par = 1.0f - powf((1.0f - par), 1.5f); for(int i = 0; i < size; ++i) { inf[i] = f[i] * par; f[i] *= (1.0f - par); } if(Padaptiveharmonics == 2) { //2n+1 for(int i = 0; i < size; ++i) if((i % 2) == 0) f[i] += inf[i]; //i=0 pt prima armonica,etc. } else { //celelalte moduri int nh = (Padaptiveharmonics - 3) / 2 + 2; int sub_vs_add = (Padaptiveharmonics - 3) % 2; if(sub_vs_add == 0) { for(int i = 0; i < size; ++i) if(((i + 1) % nh) == 0) f[i] += inf[i]; } else for(int i = 0; i < size / nh - 1; ++i) f[(i + 1) * nh - 1] += inf[i]; } delete [] inf; } void OscilGen::newrandseed(unsigned int randseed) { this->randseed = randseed; } bool OscilGen::needPrepare(void) { bool outdated = false; //Check function parameters if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc) || DIFF(hmagtype) || DIFF(waveshaping) || DIFF(waveshapingfunction)) outdated = true; //Check filter parameters if(oldfilterpars != Pfiltertype * 256 + Pfilterpar1 + Pfilterpar2 * 65536 + Pfilterbeforews * 16777216) { outdated = true; oldfilterpars = Pfiltertype * 256 + Pfilterpar1 + Pfilterpar2 * 65536 + Pfilterbeforews * 16777216; } //Check spectrum adjustments if(oldsapars != Psatype * 256 + Psapar) { outdated = true; oldsapars = Psatype * 256 + Psapar; } //Check function modulation if(DIFF(basefuncmodulation) || DIFF(basefuncmodulationpar1) || DIFF(basefuncmodulationpar2) || DIFF(basefuncmodulationpar3)) outdated = true; //Check overall modulation if(DIFF(modulation) || DIFF(modulationpar1) || DIFF(modulationpar2) || DIFF(modulationpar3)) outdated = true; //Check harmonic shifts if(oldharmonicshift != Pharmonicshift + Pharmonicshiftfirst * 256) outdated = true; return outdated == true || oscilprepared == false; } /* * Get the oscillator function */ short int OscilGen::get(float *smps, float freqHz, int resonance) { if(needPrepare()) prepare(); int outpos = (int)((RND * 2.0f - 1.0f) * synth->oscilsize_f * (Prand - 64.0f) / 64.0f); outpos = (outpos + 2 * synth->oscilsize) % synth->oscilsize; clearAll(outoscilFFTfreqs); int nyquist = (int)(0.5f * synth->samplerate_f / fabs(freqHz)) + 2; if(ADvsPAD) nyquist = (int)(synth->oscilsize / 2); if(nyquist > synth->oscilsize / 2) nyquist = synth->oscilsize / 2; //Process harmonics { int realnyquist = nyquist; if(Padaptiveharmonics != 0) nyquist = synth->oscilsize / 2; for(int i = 1; i < nyquist - 1; ++i) outoscilFFTfreqs[i] = oscilFFTfreqs[i]; adaptiveharmonic(outoscilFFTfreqs, freqHz); adaptiveharmonicpostprocess(&outoscilFFTfreqs[1], synth->oscilsize / 2 - 1); nyquist = realnyquist; } if(Padaptiveharmonics) //do the antialiasing in the case of adaptive harmonics for(int i = nyquist; i < synth->oscilsize / 2; ++i) outoscilFFTfreqs[i] = fft_t(0.0f, 0.0f); // Randomness (each harmonic), the block type is computed // in ADnote by setting start position according to this setting if((Prand > 64) && (freqHz >= 0.0f) && (!ADvsPAD)) { const float rnd = PI * powf((Prand - 64.0f) / 64.0f, 2.0f); for(int i = 1; i < nyquist - 1; ++i) //to Nyquist only for AntiAliasing outoscilFFTfreqs[i] *= std::polar(1.0f, (float)(rnd * i * RND)); } //Harmonic Amplitude Randomness if((freqHz > 0.1f) && (!ADvsPAD)) { unsigned int realrnd = prng(); sprng(randseed); float power = Pamprandpower / 127.0f; float normalize = 1.0f / (1.2f - power); switch(Pamprandtype) { case 1: power = power * 2.0f - 0.5f; power = powf(15.0f, power); for(int i = 1; i < nyquist - 1; ++i) outoscilFFTfreqs[i] *= powf(RND, power) * normalize; break; case 2: power = power * 2.0f - 0.5f; power = powf(15.0f, power) * 2.0f; float rndfreq = 2 * PI * RND; for(int i = 1; i < nyquist - 1; ++i) outoscilFFTfreqs[i] *= powf(fabs(sinf(i * rndfreq)), power) * normalize; break; } sprng(realrnd + 1); } if((freqHz > 0.1f) && (resonance != 0)) res->applyres(nyquist - 1, outoscilFFTfreqs, freqHz); rmsNormalize(outoscilFFTfreqs); if((ADvsPAD) && (freqHz > 0.1f)) //in this case the smps will contain the freqs for(int i = 1; i < synth->oscilsize / 2; ++i) smps[i - 1] = abs(outoscilFFTfreqs, i); else { fft->freqs2smps(outoscilFFTfreqs, smps); for(int i = 0; i < synth->oscilsize; ++i) smps[i] *= 0.25f; //correct the amplitude } if(Prand < 64) return outpos; else return 0; } /* * Get the spectrum of the oscillator for the UI */ void OscilGen::getspectrum(int n, float *spc, int what) { if(n > synth->oscilsize / 2) n = synth->oscilsize / 2; for(int i = 1; i < n; ++i) { if(what == 0) spc[i - 1] = abs(oscilFFTfreqs, i); else { if(Pcurrentbasefunc == 0) spc[i - 1] = ((i == 1) ? (1.0f) : (0.0f)); else spc[i - 1] = abs(basefuncFFTfreqs, i); } } if(what == 0) { for(int i = 0; i < n; ++i) outoscilFFTfreqs[i] = fft_t(spc[i], spc[i]); memset(outoscilFFTfreqs + n, 0, (synth->oscilsize / 2 - n) * sizeof(fft_t)); adaptiveharmonic(outoscilFFTfreqs, 0.0f); adaptiveharmonicpostprocess(outoscilFFTfreqs, n - 1); for(int i = 0; i < n; ++i) spc[i] = outoscilFFTfreqs[i].imag(); } } /* * Convert the oscillator as base function */ void OscilGen::useasbase() { for(int i = 0; i < synth->oscilsize / 2; ++i) basefuncFFTfreqs[i] = oscilFFTfreqs[i]; oldbasefunc = Pcurrentbasefunc = 127; prepare(); } /* * Get the base function for UI */ void OscilGen::getcurrentbasefunction(float *smps) { if(Pcurrentbasefunc != 0) fft->freqs2smps(basefuncFFTfreqs, smps); else getbasefunction(smps); //the sine case } void OscilGen::add2XML(XMLwrapper *xml) { xml->addpar("harmonic_mag_type", Phmagtype); xml->addpar("base_function", Pcurrentbasefunc); xml->addpar("base_function_par", Pbasefuncpar); xml->addpar("base_function_modulation", Pbasefuncmodulation); xml->addpar("base_function_modulation_par1", Pbasefuncmodulationpar1); xml->addpar("base_function_modulation_par2", Pbasefuncmodulationpar2); xml->addpar("base_function_modulation_par3", Pbasefuncmodulationpar3); xml->addpar("modulation", Pmodulation); xml->addpar("modulation_par1", Pmodulationpar1); xml->addpar("modulation_par2", Pmodulationpar2); xml->addpar("modulation_par3", Pmodulationpar3); xml->addpar("wave_shaping", Pwaveshaping); xml->addpar("wave_shaping_function", Pwaveshapingfunction); xml->addpar("filter_type", Pfiltertype); xml->addpar("filter_par1", Pfilterpar1); xml->addpar("filter_par2", Pfilterpar2); xml->addpar("filter_before_wave_shaping", Pfilterbeforews); xml->addpar("spectrum_adjust_type", Psatype); xml->addpar("spectrum_adjust_par", Psapar); xml->addpar("rand", Prand); xml->addpar("amp_rand_type", Pamprandtype); xml->addpar("amp_rand_power", Pamprandpower); xml->addpar("harmonic_shift", Pharmonicshift); xml->addparbool("harmonic_shift_first", Pharmonicshiftfirst); xml->addpar("adaptive_harmonics", Padaptiveharmonics); xml->addpar("adaptive_harmonics_base_frequency", Padaptiveharmonicsbasefreq); xml->addpar("adaptive_harmonics_power", Padaptiveharmonicspower); xml->beginbranch("HARMONICS"); for(int n = 0; n < MAX_AD_HARMONICS; ++n) { if((Phmag[n] == 64) && (Phphase[n] == 64)) continue; xml->beginbranch("HARMONIC", n + 1); xml->addpar("mag", Phmag[n]); xml->addpar("phase", Phphase[n]); xml->endbranch(); } xml->endbranch(); if(Pcurrentbasefunc == 127) { normalize(basefuncFFTfreqs); xml->beginbranch("BASE_FUNCTION"); for(int i = 1; i < synth->oscilsize / 2; ++i) { float xc = basefuncFFTfreqs[i].real(); float xs = basefuncFFTfreqs[i].imag(); if((fabs(xs) > 0.00001f) && (fabs(xs) > 0.00001f)) { xml->beginbranch("BF_HARMONIC", i); xml->addparreal("cos", xc); xml->addparreal("sin", xs); xml->endbranch(); } } xml->endbranch(); } } void OscilGen::getfromXML(XMLwrapper *xml) { Phmagtype = xml->getpar127("harmonic_mag_type", Phmagtype); Pcurrentbasefunc = xml->getpar127("base_function", Pcurrentbasefunc); Pbasefuncpar = xml->getpar127("base_function_par", Pbasefuncpar); Pbasefuncmodulation = xml->getpar127("base_function_modulation", Pbasefuncmodulation); Pbasefuncmodulationpar1 = xml->getpar127("base_function_modulation_par1", Pbasefuncmodulationpar1); Pbasefuncmodulationpar2 = xml->getpar127("base_function_modulation_par2", Pbasefuncmodulationpar2); Pbasefuncmodulationpar3 = xml->getpar127("base_function_modulation_par3", Pbasefuncmodulationpar3); Pmodulation = xml->getpar127("modulation", Pmodulation); Pmodulationpar1 = xml->getpar127("modulation_par1", Pmodulationpar1); Pmodulationpar2 = xml->getpar127("modulation_par2", Pmodulationpar2); Pmodulationpar3 = xml->getpar127("modulation_par3", Pmodulationpar3); Pwaveshaping = xml->getpar127("wave_shaping", Pwaveshaping); Pwaveshapingfunction = xml->getpar127("wave_shaping_function", Pwaveshapingfunction); Pfiltertype = xml->getpar127("filter_type", Pfiltertype); Pfilterpar1 = xml->getpar127("filter_par1", Pfilterpar1); Pfilterpar2 = xml->getpar127("filter_par2", Pfilterpar2); Pfilterbeforews = xml->getpar127("filter_before_wave_shaping", Pfilterbeforews); Psatype = xml->getpar127("spectrum_adjust_type", Psatype); Psapar = xml->getpar127("spectrum_adjust_par", Psapar); Prand = xml->getpar127("rand", Prand); Pamprandtype = xml->getpar127("amp_rand_type", Pamprandtype); Pamprandpower = xml->getpar127("amp_rand_power", Pamprandpower); Pharmonicshift = xml->getpar("harmonic_shift", Pharmonicshift, -64, 64); Pharmonicshiftfirst = xml->getparbool("harmonic_shift_first", Pharmonicshiftfirst); Padaptiveharmonics = xml->getpar("adaptive_harmonics", Padaptiveharmonics, 0, 127); Padaptiveharmonicsbasefreq = xml->getpar( "adaptive_harmonics_base_frequency", Padaptiveharmonicsbasefreq, 0, 255); Padaptiveharmonicspower = xml->getpar("adaptive_harmonics_power", Padaptiveharmonicspower, 0, 200); if(xml->enterbranch("HARMONICS")) { Phmag[0] = 64; Phphase[0] = 64; for(int n = 0; n < MAX_AD_HARMONICS; ++n) { if(xml->enterbranch("HARMONIC", n + 1) == 0) continue; Phmag[n] = xml->getpar127("mag", 64); Phphase[n] = xml->getpar127("phase", 64); xml->exitbranch(); } xml->exitbranch(); } if(Pcurrentbasefunc != 0) changebasefunction(); if(xml->enterbranch("BASE_FUNCTION")) { for(int i = 1; i < synth->oscilsize / 2; ++i) if(xml->enterbranch("BF_HARMONIC", i)) { basefuncFFTfreqs[i] = std::complex(xml->getparreal("cos", 0.0f), xml->getparreal("sin", 0.0f)); xml->exitbranch(); } xml->exitbranch(); clearDC(basefuncFFTfreqs); normalize(basefuncFFTfreqs); } } //Define basic functions #define FUNC(b) float basefunc_ ## b(float x, float a) FUNC(pulse) { return (fmod(x, 1.0f) < a) ? -1.0f : 1.0f; } FUNC(saw) { if(a < 0.00001f) a = 0.00001f; else if(a > 0.99999f) a = 0.99999f; x = fmod(x, 1); if(x < a) return x / a * 2.0f - 1.0f; else return (1.0f - x) / (1.0f - a) * 2.0f - 1.0f; } FUNC(triangle) { x = fmod(x + 0.25f, 1); a = 1 - a; if(a < 0.00001f) a = 0.00001f; if(x < 0.5f) x = x * 4 - 1.0f; else x = (1.0f - x) * 4 - 1.0f; x /= -a; if(x < -1.0f) x = -1.0f; if(x > 1.0f) x = 1.0f; return x; } FUNC(power) { x = fmod(x, 1); if(a < 0.00001f) a = 0.00001f; else if(a > 0.99999f) a = 0.99999f; return powf(x, expf((a - 0.5f) * 10.0f)) * 2.0f - 1.0f; } FUNC(gauss) { x = fmod(x, 1) * 2.0f - 1.0f; if(a < 0.00001f) a = 0.00001f; return expf(-x * x * (expf(a * 8) + 5.0f)) * 2.0f - 1.0f; } FUNC(diode) { if(a < 0.00001f) a = 0.00001f; else if(a > 0.99999f) a = 0.99999f; a = a * 2.0f - 1.0f; x = cosf((x + 0.5f) * 2.0f * PI) - a; if(x < 0.0f) x = 0.0f; return x / (1.0f - a) * 2 - 1.0f; } FUNC(abssine) { x = fmod(x, 1); if(a < 0.00001f) a = 0.00001f; else if(a > 0.99999f) a = 0.99999f; return sinf(powf(x, expf((a - 0.5f) * 5.0f)) * PI) * 2.0f - 1.0f; } FUNC(pulsesine) { if(a < 0.00001f) a = 0.00001f; x = (fmod(x, 1) - 0.5f) * expf((a - 0.5f) * logf(128)); if(x < -0.5f) x = -0.5f; else if(x > 0.5f) x = 0.5f; x = sinf(x * PI * 2.0f); return x; } FUNC(stretchsine) { x = fmod(x + 0.5f, 1) * 2.0f - 1.0f; a = (a - 0.5f) * 4; if(a > 0.0f) a *= 2; a = powf(3.0f, a); float b = powf(fabs(x), a); if(x < 0) b = -b; return -sinf(b * PI); } FUNC(chirp) { x = fmod(x, 1.0f) * 2.0f * PI; a = (a - 0.5f) * 4; if(a < 0.0f) a *= 2.0f; a = powf(3.0f, a); return sinf(x / 2.0f) * sinf(a * x * x); } FUNC(absstretchsine) { x = fmod(x + 0.5f, 1) * 2.0f - 1.0f; a = (a - 0.5f) * 9; a = powf(3.0f, a); float b = powf(fabs(x), a); if(x < 0) b = -b; return -powf(sinf(b * PI), 2); } FUNC(chebyshev) { a = a * a * a * 30.0f + 1.0f; return cosf(acosf(x * 2.0f - 1.0f) * a); } FUNC(sqr) { a = a * a * a * a * 160.0f + 0.001f; return -atanf(sinf(x * 2.0f * PI) * a); } FUNC(spike) { float b = a * 0.66666; // the width of the range: if a == 0.5, b == 0.33333 if(x < 0.5) { if(x < (0.5 - (b / 2.0))) return 0.0; else { x = (x + (b / 2) - 0.5) * (2.0 / b); // shift to zero, and expand to range from 0 to 1 return x * (2.0 / b); // this is the slope: 1 / (b / 2) } } else { if(x > (0.5 + (b / 2.0))) return 0.0; else { x = (x - 0.5) * (2.0 / b); return (1 - x) * (2.0 / b); } } } FUNC(circle) { // a is parameter: 0 -> 0.5 -> 1 // O.5 = circle float b, y; b = 2 - (a * 2); // b goes from 2 to 0 x = x * 4; if(x < 2) { x = x - 1; // x goes from -1 to 1 if((x < -b) || (x > b)) y = 0; else y = sqrt(1 - (pow(x, 2) / pow(b, 2))); // normally * a^2, but a stays 1 } else { x = x - 3; // x goes from -1 to 1 as well if((x < -b) || (x > b)) y = 0; else y = -sqrt(1 - (pow(x, 2) / pow(b, 2))); } return y; } typedef float (*base_func)(float, float); base_func getBaseFunction(unsigned char func) { if(!func) return NULL; if(func == 127) //should be the custom wave return NULL; func--; assert(func < 15); base_func functions[] = { basefunc_triangle, basefunc_pulse, basefunc_saw, basefunc_power, basefunc_gauss, basefunc_diode, basefunc_abssine, basefunc_pulsesine, basefunc_stretchsine, basefunc_chirp, basefunc_absstretchsine, basefunc_chebyshev, basefunc_sqr, basefunc_spike, basefunc_circle, }; return functions[func]; } //And filters #define FILTER(x) float osc_ ## x(unsigned int i, float par, float par2) FILTER(lp) { float gain = powf(1.0f - par * par * par * 0.99f, i); float tmp = par2 * par2 * par2 * par2 * 0.5f + 0.0001f; if(gain < tmp) gain = powf(gain, 10.0f) / powf(tmp, 9.0f); return gain; } FILTER(hp1) { float gain = 1.0f - powf(1.0f - par * par, i + 1); return powf(gain, par2 * 2.0f + 0.1f); } FILTER(hp1b) { if(par < 0.2f) par = par * 0.25f + 0.15f; float gain = 1.0f - powf(1.0f - par * par * 0.999f + 0.001f, i * 0.05f * i + 1.0f); float tmp = powf(5.0f, par2 * 2.0f); return powf(gain, tmp); } FILTER(bp1) { float gain = i + 1 - powf(2, (1.0f - par) * 7.5f); gain = 1.0f / (1.0f + gain * gain / (i + 1.0f)); float tmp = powf(5.0f, par2 * 2.0f); gain = powf(gain, tmp); if(gain < 1e-5) gain = 1e-5; return gain; } FILTER(bs1) { float gain = i + 1 - powf(2, (1.0f - par) * 7.5f); gain = powf(atanf(gain / (i / 10.0f + 1)) / 1.57f, 6); return powf(gain, par2 * par2 * 3.9f + 0.1f); } FILTER(lp2) { return (i + 1 > powf(2, (1.0f - par) * 10) ? 0.0f : 1.0f) * par2 + (1.0f - par2); } FILTER(hp2) { if(par == 1) return 1.0f; return (i + 1 > powf(2, (1.0f - par) * 7) ? 1.0f : 0.0f) * par2 + (1.0f - par2); } FILTER(bp2) { return (fabs(powf(2, (1.0f - par) * 7) - i) > i / 2 + 1 ? 0.0f : 1.0f) * par2 + (1.0f - par2); } FILTER(bs2) { return (fabs(powf(2, (1.0f - par) * 7) - i) < i / 2 + 1 ? 0.0f : 1.0f) * par2 + (1.0f - par2); } bool floatEq(float a, float b) { const float fudge = .01; return a + fudge > b && a - fudge < b; } FILTER(cos) { float tmp = powf(5.0f, par2 * 2.0f - 1.0f); tmp = powf(i / 32.0f, tmp) * 32.0f; if(floatEq(par2 * 127.0f, 64.0f)) tmp = i; float gain = cosf(par * par * PI / 2.0f * tmp); gain *= gain; return gain; } FILTER(sin) { float tmp = powf(5.0f, par2 * 2.0f - 1.0f); tmp = powf(i / 32.0f, tmp) * 32.0f; if(floatEq(par2 * 127.0f, 64.0f)) tmp = i; float gain = sinf(par * par * PI / 2.0f * tmp); gain *= gain; return gain; } FILTER(low_shelf) { float p2 = 1.0f - par + 0.2f; float x = i / (64.0f * p2 * p2); if(x < 0.0f) x = 0.0f; else if(x > 1.0f) x = 1.0f; float tmp = powf(1.0f - par2, 2.0f); return cosf(x * PI) * (1.0f - tmp) + 1.01f + tmp; } FILTER(s) { unsigned int tmp = (int) (powf(2.0f, (1.0f - par) * 7.2f)); float gain = 1.0f; if(i == tmp) gain = powf(2.0f, par2 * par2 * 8.0f); return gain; } #undef FILTER typedef float (*filter_func)(unsigned int, float, float); filter_func getFilter(unsigned char func) { if(!func) return NULL; func--; assert(func < 13); filter_func functions[] = { osc_lp, osc_hp1, osc_hp1b, osc_bp1, osc_bs1, osc_lp2, osc_hp2, osc_bp2, osc_bs2, osc_cos, osc_sin, osc_low_shelf, osc_s }; return functions[func]; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h000066400000000000000000000152021247673406200246320ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer OscilGen.h - Waveform generator for ADnote Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef OSCIL_GEN_H #define OSCIL_GEN_H #include "../globals.h" #include "../Misc/XMLwrapper.h" #include "../DSP/FFTwrapper.h" #include "../Params/Presets.h" #include "Resonance.h" class OscilGen:public Presets { public: OscilGen(FFTwrapper *fft_, Resonance *res_); ~OscilGen(); /**computes the full spectrum of oscil from harmonics,phases and basefunc*/ void prepare(); /**do the antialiasing(cut off higher freqs.),apply randomness and do a IFFT*/ //returns where should I start getting samples, used in block type randomness short get(float *smps, float freqHz, int resonance = 0); //if freqHz is smaller than 0, return the "un-randomized" sample for UI void getbasefunction(float *smps); //called by UI void getspectrum(int n, float *spc, int what); //what=0 pt. oscil,1 pt. basefunc void getcurrentbasefunction(float *smps); /**convert oscil to base function*/ void useasbase(); void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); void convert2sine(); //Parameters /** * The hmag and hphase starts counting from 0, so the first harmonic(1) has the index 0, * 2-nd harmonic has index 1, ..the 128 harminic has index 127 */ unsigned char Phmag[MAX_AD_HARMONICS], Phphase[MAX_AD_HARMONICS]; //the MIDI parameters for mag. and phases /**The Type of magnitude: * 0 - Linear * 1 - dB scale (-40) * 2 - dB scale (-60) * 3 - dB scale (-80) * 4 - dB scale (-100)*/ unsigned char Phmagtype; unsigned char Pcurrentbasefunc; //The base function used - 0=sin, 1=... unsigned char Pbasefuncpar; //the parameter of the base function unsigned char Pbasefuncmodulation; //what modulation is applied to the basefunc unsigned char Pbasefuncmodulationpar1, Pbasefuncmodulationpar2, Pbasefuncmodulationpar3; //the parameter of the base function modulation /*the Randomness: 64=no randomness 63..0 - block type randomness - 0 is maximum 65..127 - each harmonic randomness - 127 is maximum*/ unsigned char Prand; unsigned char Pwaveshaping, Pwaveshapingfunction; unsigned char Pfiltertype, Pfilterpar1, Pfilterpar2; unsigned char Pfilterbeforews; unsigned char Psatype, Psapar; //spectrum adjust unsigned char Pamprandpower, Pamprandtype; //amplitude randomness int Pharmonicshift; //how the harmonics are shifted int Pharmonicshiftfirst; //if the harmonic shift is done before waveshaping and filter unsigned char Padaptiveharmonics; //the adaptive harmonics status (off=0,on=1,etc..) unsigned char Padaptiveharmonicsbasefreq; //the base frequency of the adaptive harmonic (30..3000Hz) unsigned char Padaptiveharmonicspower; //the strength of the effect (0=off,100=full) unsigned char Padaptiveharmonicspar; //the parameters in 2,3,4.. modes of adaptive harmonics unsigned char Pmodulation; //what modulation is applied to the oscil unsigned char Pmodulationpar1, Pmodulationpar2, Pmodulationpar3; //the parameter of the parameters //makes a new random seed for Amplitude Randomness //this should be called every note on event void newrandseed(unsigned int randseed); bool ADvsPAD; //if it is used by ADsynth or by PADsynth private: //This array stores some termporary data and it has OSCIL_SIZE elements float *tmpsmps; fft_t *outoscilFFTfreqs; float hmag[MAX_AD_HARMONICS], hphase[MAX_AD_HARMONICS]; //the magnituides and the phases of the sine/nonsine harmonics // private: FFTwrapper *fft; //computes the basefunction and make the FFT; newbasefunc<0 = same basefunc void changebasefunction(); //Waveshaping void waveshape(); //Filter the oscillator accotding to Pfiltertype and Pfilterpar void oscilfilter(); //Adjust the spectrum void spectrumadjust(); //Shift the harmonics void shiftharmonics(); //Do the oscil modulation stuff void modulation(); //Check system for needed updates bool needPrepare(void); //Do the adaptive harmonic stuff void adaptiveharmonic(fft_t *f, float freq); //Do the adaptive harmonic postprocessing (2n+1,2xS,2xA,etc..) //this function is called even for the user interface //this can be called for the sine and components, and for the spectrum //(that's why the sine and cosine components should be processed with a separate call) void adaptiveharmonicpostprocess(fft_t *f, int size); //Internal Data unsigned char oldbasefunc, oldbasepar, oldhmagtype, oldwaveshapingfunction, oldwaveshaping; int oldfilterpars, oldsapars, oldbasefuncmodulation, oldbasefuncmodulationpar1, oldbasefuncmodulationpar2, oldbasefuncmodulationpar3, oldharmonicshift; int oldmodulation, oldmodulationpar1, oldmodulationpar2, oldmodulationpar3; fft_t *basefuncFFTfreqs; //Base Function Frequencies fft_t *oscilFFTfreqs; //Oscillator Frequencies - this is different than the hamonics set-up by the user, it may contains time-domain data if the antialiasing is turned off int oscilprepared; //1 if the oscil is prepared, 0 if it is not prepared and is need to call ::prepare() before ::get() Resonance *res; unsigned int randseed; }; typedef float (*filter_func)(unsigned int, float, float); filter_func getFilter(unsigned char func); typedef float (*base_func)(float, float); base_func getBaseFunction(unsigned char func); #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp000066400000000000000000000335671247673406200247720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer pADnote.cpp - The "pad" synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "PADnote.h" #include "../Misc/Config.h" #include "../DSP/Filter.h" PADnote::PADnote(PADnoteParameters *parameters, Controller *ctl_, float freq, float velocity, int portamento_, int midinote, bool besilent) :SynthNote(freq, velocity, portamento_, midinote, besilent) { pars = parameters; ctl = ctl_; firsttime = true; setup(freq, velocity, portamento_, midinote); } void PADnote::setup(float freq, float velocity, int portamento_, int midinote, bool legato) { portamento = portamento_; this->velocity = velocity; finished_ = false; if(pars->Pfixedfreq == 0) basefreq = freq; else { basefreq = 440.0f; int fixedfreqET = pars->PfixedfreqET; if(fixedfreqET != 0) { //if the frequency varies according the keyboard note float tmp = (midinote - 69.0f) / 12.0f * (powf(2.0f, (fixedfreqET - 1) / 63.0f) - 1.0f); if(fixedfreqET <= 64) basefreq *= powf(2.0f, tmp); else basefreq *= powf(3.0f, tmp); } } firsttime = true; released = false; realfreq = basefreq; if(!legato) NoteGlobalPar.Detune = getdetune(pars->PDetuneType, pars->PCoarseDetune, pars->PDetune); //find out the closest note float logfreq = logf(basefreq * powf(2.0f, NoteGlobalPar.Detune / 1200.0f)); float mindist = fabs(logfreq - logf(pars->sample[0].basefreq + 0.0001f)); nsample = 0; for(int i = 1; i < PAD_MAX_SAMPLES; ++i) { if(pars->sample[i].smp == NULL) break; float dist = fabs(logfreq - logf(pars->sample[i].basefreq + 0.0001f)); if(dist < mindist) { nsample = i; mindist = dist; } } int size = pars->sample[nsample].size; if(size == 0) size = 1; if(!legato) { //not sure poshi_l = (int)(RND * (size - 1)); if(pars->PStereo != 0) poshi_r = (poshi_l + size / 2) % size; else poshi_r = poshi_l; poslo = 0.0f; } if(pars->PPanning == 0) NoteGlobalPar.Panning = RND; else NoteGlobalPar.Panning = pars->PPanning / 128.0f; NoteGlobalPar.FilterCenterPitch = pars->GlobalFilter->getfreq() //center freq + pars->PFilterVelocityScale / 127.0f * 6.0f //velocity sensing * (VelF(velocity, pars-> PFilterVelocityScaleFunction) - 1); if(!legato) { if(pars->PPunchStrength != 0) { NoteGlobalPar.Punch.Enabled = 1; NoteGlobalPar.Punch.t = 1.0f; //start from 1.0f and to 0.0f NoteGlobalPar.Punch.initialvalue = ((powf(10, 1.5f * pars->PPunchStrength / 127.0f) - 1.0f) * VelF(velocity, pars->PPunchVelocitySensing)); float time = powf(10, 3.0f * pars->PPunchTime / 127.0f) / 10000.0f; //0.1f .. 100 ms float stretch = powf(440.0f / freq, pars->PPunchStretch / 64.0f); NoteGlobalPar.Punch.dt = 1.0f / (time * synth->samplerate_f * stretch); } else NoteGlobalPar.Punch.Enabled = 0; NoteGlobalPar.FreqEnvelope = new Envelope(pars->FreqEnvelope, basefreq); NoteGlobalPar.FreqLfo = new LFO(pars->FreqLfo, basefreq); NoteGlobalPar.AmpEnvelope = new Envelope(pars->AmpEnvelope, basefreq); NoteGlobalPar.AmpLfo = new LFO(pars->AmpLfo, basefreq); } NoteGlobalPar.Volume = 4.0f * powf(0.1f, 3.0f * (1.0f - pars->PVolume / 96.0f)) //-60 dB .. 0 dB * VelF(velocity, pars->PAmpVelocityScaleFunction); //velocity sensing NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output globaloldamplitude = globalnewamplitude = NoteGlobalPar.Volume * NoteGlobalPar.AmpEnvelope-> envout_dB() * NoteGlobalPar.AmpLfo->amplfoout(); if(!legato) { NoteGlobalPar.GlobalFilterL = Filter::generate(pars->GlobalFilter); NoteGlobalPar.GlobalFilterR = Filter::generate(pars->GlobalFilter); NoteGlobalPar.FilterEnvelope = new Envelope(pars->FilterEnvelope, basefreq); NoteGlobalPar.FilterLfo = new LFO(pars->FilterLfo, basefreq); } NoteGlobalPar.FilterQ = pars->GlobalFilter->getq(); NoteGlobalPar.FilterFreqTracking = pars->GlobalFilter->getfreqtracking( basefreq); if(pars->sample[nsample].smp == NULL) { finished_ = true; return; } } void PADnote::legatonote(float freq, float velocity, int portamento_, int midinote, bool externcall) { // Manage legato stuff if(legato.update(freq, velocity, portamento_, midinote, externcall)) return; setup(freq, velocity, portamento_, midinote, true); } PADnote::~PADnote() { delete (NoteGlobalPar.FreqEnvelope); delete (NoteGlobalPar.FreqLfo); delete (NoteGlobalPar.AmpEnvelope); delete (NoteGlobalPar.AmpLfo); delete (NoteGlobalPar.GlobalFilterL); delete (NoteGlobalPar.GlobalFilterR); delete (NoteGlobalPar.FilterEnvelope); delete (NoteGlobalPar.FilterLfo); } inline void PADnote::fadein(float *smps) { int zerocrossings = 0; for(int i = 1; i < synth->buffersize; ++i) if((smps[i - 1] < 0.0f) && (smps[i] > 0.0f)) zerocrossings++; //this is only the possitive crossings float tmp = (synth->buffersize_f - 1.0f) / (zerocrossings + 1) / 3.0f; if(tmp < 8.0f) tmp = 8.0f; int n; F2I(tmp, n); //how many samples is the fade-in if(n > synth->buffersize) n = synth->buffersize; for(int i = 0; i < n; ++i) { //fade-in float tmp = 0.5f - cosf((float)i / (float) n * PI) * 0.5f; smps[i] *= tmp; } } void PADnote::computecurrentparameters() { float globalpitch, globalfilterpitch; globalpitch = 0.01f * (NoteGlobalPar.FreqEnvelope->envout() + NoteGlobalPar.FreqLfo->lfoout() * ctl->modwheel.relmod + NoteGlobalPar.Detune); globaloldamplitude = globalnewamplitude; globalnewamplitude = NoteGlobalPar.Volume * NoteGlobalPar.AmpEnvelope->envout_dB() * NoteGlobalPar.AmpLfo->amplfoout(); globalfilterpitch = NoteGlobalPar.FilterEnvelope->envout() + NoteGlobalPar.FilterLfo->lfoout() + NoteGlobalPar.FilterCenterPitch; float tmpfilterfreq = globalfilterpitch + ctl->filtercutoff.relfreq + NoteGlobalPar.FilterFreqTracking; tmpfilterfreq = Filter::getrealfreq(tmpfilterfreq); float globalfilterq = NoteGlobalPar.FilterQ * ctl->filterq.relq; NoteGlobalPar.GlobalFilterL->setfreq_and_q(tmpfilterfreq, globalfilterq); NoteGlobalPar.GlobalFilterR->setfreq_and_q(tmpfilterfreq, globalfilterq); //compute the portamento, if it is used by this note float portamentofreqrap = 1.0f; if(portamento != 0) { //this voice use portamento portamentofreqrap = ctl->portamento.freqrap; if(ctl->portamento.used == 0) //the portamento has finished portamento = 0; //this note is no longer "portamented" ; } realfreq = basefreq * portamentofreqrap * powf(2.0f, globalpitch / 12.0f) * ctl->pitchwheel.relfreq; } int PADnote::Compute_Linear(float *outl, float *outr, int freqhi, float freqlo) { float *smps = pars->sample[nsample].smp; if(smps == NULL) { finished_ = true; return 1; } int size = pars->sample[nsample].size; for(int i = 0; i < synth->buffersize; ++i) { poshi_l += freqhi; poshi_r += freqhi; poslo += freqlo; if(poslo >= 1.0f) { poshi_l += 1; poshi_r += 1; poslo -= 1.0f; } if(poshi_l >= size) poshi_l %= size; if(poshi_r >= size) poshi_r %= size; outl[i] = smps[poshi_l] * (1.0f - poslo) + smps[poshi_l + 1] * poslo; outr[i] = smps[poshi_r] * (1.0f - poslo) + smps[poshi_r + 1] * poslo; } return 1; } int PADnote::Compute_Cubic(float *outl, float *outr, int freqhi, float freqlo) { float *smps = pars->sample[nsample].smp; if(smps == NULL) { finished_ = true; return 1; } int size = pars->sample[nsample].size; float xm1, x0, x1, x2, a, b, c; for(int i = 0; i < synth->buffersize; ++i) { poshi_l += freqhi; poshi_r += freqhi; poslo += freqlo; if(poslo >= 1.0f) { poshi_l += 1; poshi_r += 1; poslo -= 1.0f; } if(poshi_l >= size) poshi_l %= size; if(poshi_r >= size) poshi_r %= size; //left xm1 = smps[poshi_l]; x0 = smps[poshi_l + 1]; x1 = smps[poshi_l + 2]; x2 = smps[poshi_l + 3]; a = (3.0f * (x0 - x1) - xm1 + x2) * 0.5f; b = 2.0f * x1 + xm1 - (5.0f * x0 + x2) * 0.5f; c = (x1 - xm1) * 0.5f; outl[i] = (((a * poslo) + b) * poslo + c) * poslo + x0; //right xm1 = smps[poshi_r]; x0 = smps[poshi_r + 1]; x1 = smps[poshi_r + 2]; x2 = smps[poshi_r + 3]; a = (3.0f * (x0 - x1) - xm1 + x2) * 0.5f; b = 2.0f * x1 + xm1 - (5.0f * x0 + x2) * 0.5f; c = (x1 - xm1) * 0.5f; outr[i] = (((a * poslo) + b) * poslo + c) * poslo + x0; } return 1; } int PADnote::noteout(float *outl, float *outr) { computecurrentparameters(); float *smps = pars->sample[nsample].smp; if(smps == NULL) { for(int i = 0; i < synth->buffersize; ++i) { outl[i] = 0.0f; outr[i] = 0.0f; } return 1; } float smpfreq = pars->sample[nsample].basefreq; float freqrap = realfreq / smpfreq; int freqhi = (int) (floor(freqrap)); float freqlo = freqrap - floor(freqrap); if(config.cfg.Interpolation) Compute_Cubic(outl, outr, freqhi, freqlo); else Compute_Linear(outl, outr, freqhi, freqlo); if(firsttime) { fadein(outl); fadein(outr); firsttime = false; } NoteGlobalPar.GlobalFilterL->filterout(outl); NoteGlobalPar.GlobalFilterR->filterout(outr); //Apply the punch if(NoteGlobalPar.Punch.Enabled != 0) for(int i = 0; i < synth->buffersize; ++i) { float punchamp = NoteGlobalPar.Punch.initialvalue * NoteGlobalPar.Punch.t + 1.0f; outl[i] *= punchamp; outr[i] *= punchamp; NoteGlobalPar.Punch.t -= NoteGlobalPar.Punch.dt; if(NoteGlobalPar.Punch.t < 0.0f) { NoteGlobalPar.Punch.Enabled = 0; break; } } if(ABOVE_AMPLITUDE_THRESHOLD(globaloldamplitude, globalnewamplitude)) // Amplitude Interpolation for(int i = 0; i < synth->buffersize; ++i) { float tmpvol = INTERPOLATE_AMPLITUDE(globaloldamplitude, globalnewamplitude, i, synth->buffersize); outl[i] *= tmpvol * NoteGlobalPar.Panning; outr[i] *= tmpvol * (1.0f - NoteGlobalPar.Panning); } else for(int i = 0; i < synth->buffersize; ++i) { outl[i] *= globalnewamplitude * NoteGlobalPar.Panning; outr[i] *= globalnewamplitude * (1.0f - NoteGlobalPar.Panning); } // Apply legato-specific sound signal modifications legato.apply(*this, outl, outr); // Check if the global amplitude is finished. // If it does, disable the note if(NoteGlobalPar.AmpEnvelope->finished() != 0) { for(int i = 0; i < synth->buffersize; ++i) { //fade-out float tmp = 1.0f - (float)i / synth->buffersize_f; outl[i] *= tmp; outr[i] *= tmp; } finished_ = 1; } return 1; } int PADnote::finished() const { return finished_; } void PADnote::relasekey() { NoteGlobalPar.FreqEnvelope->relasekey(); NoteGlobalPar.FilterEnvelope->relasekey(); NoteGlobalPar.AmpEnvelope->relasekey(); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h000066400000000000000000000070561247673406200244310ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PADnote.h - The "pad" synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PAD_NOTE_H #define PAD_NOTE_H #include "SynthNote.h" #include "../globals.h" #include "../Params/PADnoteParameters.h" #include "../Params/Controller.h" #include "Envelope.h" #include "LFO.h" #include "../Params/Controller.h" /**The "pad" synthesizer*/ class PADnote:public SynthNote { public: PADnote(PADnoteParameters *parameters, Controller *ctl_, float freq, float velocity, int portamento_, int midinote, bool besilent); ~PADnote(); void legatonote(float freq, float velocity, int portamento_, int midinote, bool externcall); int noteout(float *outl, float *outr); int finished() const; void relasekey(); private: void setup(float freq, float velocity, int portamento_, int midinote, bool legato = false); void fadein(float *smps); void computecurrentparameters(); bool finished_; PADnoteParameters *pars; int poshi_l, poshi_r; float poslo; float basefreq; bool firsttime, released; int nsample, portamento; int Compute_Linear(float *outl, float *outr, int freqhi, float freqlo); int Compute_Cubic(float *outl, float *outr, int freqhi, float freqlo); struct { /****************************************** * FREQUENCY GLOBAL PARAMETERS * ******************************************/ float Detune; //cents Envelope *FreqEnvelope; LFO *FreqLfo; /******************************************** * AMPLITUDE GLOBAL PARAMETERS * ********************************************/ float Volume; // [ 0 .. 1 ] float Panning; // [ 0 .. 1 ] Envelope *AmpEnvelope; LFO *AmpLfo; struct { int Enabled; float initialvalue, dt, t; } Punch; /****************************************** * FILTER GLOBAL PARAMETERS * ******************************************/ class Filter * GlobalFilterL, *GlobalFilterR; float FilterCenterPitch; //octaves float FilterQ; float FilterFreqTracking; Envelope *FilterEnvelope; LFO *FilterLfo; } NoteGlobalPar; float globaloldamplitude, globalnewamplitude, velocity, realfreq; Controller *ctl; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp000066400000000000000000000160101247673406200253750ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Resonance.cpp - Resonance Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "Resonance.h" Resonance::Resonance():Presets() { setpresettype("Presonance"); defaults(); } Resonance::~Resonance() {} void Resonance::defaults() { Penabled = 0; PmaxdB = 20; Pcenterfreq = 64; //1 kHz Poctavesfreq = 64; Pprotectthefundamental = 0; ctlcenter = 1.0f; ctlbw = 1.0f; for(int i = 0; i < N_RES_POINTS; ++i) Prespoints[i] = 64; } /* * Set a point of resonance function with a value */ void Resonance::setpoint(int n, unsigned char p) { if((n < 0) || (n >= N_RES_POINTS)) return; Prespoints[n] = p; } /* * Apply the resonance to FFT data */ void Resonance::applyres(int n, fft_t *fftdata, float freq) { if(Penabled == 0) return; //if the resonance is disabled float sum = 0.0f, l1 = logf(getfreqx(0.0f) * ctlcenter), l2 = logf(2.0f) * getoctavesfreq() * ctlbw; for(int i = 0; i < N_RES_POINTS; ++i) if(sum < Prespoints[i]) sum = Prespoints[i]; if(sum < 1.0f) sum = 1.0f; for(int i = 1; i < n; ++i) { float x = (logf(freq * i) - l1) / l2; //compute where the n-th hamonics fits to the graph if(x < 0.0f) x = 0.0f; x *= N_RES_POINTS; float dx = x - floor(x); x = floor(x); int kx1 = (int)x; if(kx1 >= N_RES_POINTS) kx1 = N_RES_POINTS - 1; int kx2 = kx1 + 1; if(kx2 >= N_RES_POINTS) kx2 = N_RES_POINTS - 1; float y = (Prespoints[kx1] * (1.0f - dx) + Prespoints[kx2] * dx) / 127.0f - sum / 127.0f; y = powf(10.0f, y * PmaxdB / 20.0f); if((Pprotectthefundamental != 0) && (i == 1)) y = 1.0f; fftdata[i] *= y; } } /* * Gets the response at the frequency "freq" */ float Resonance::getfreqresponse(float freq) { float l1 = logf(getfreqx(0.0f) * ctlcenter), l2 = logf(2.0f) * getoctavesfreq() * ctlbw, sum = 0.0f; for(int i = 0; i < N_RES_POINTS; ++i) if(sum < Prespoints[i]) sum = Prespoints[i]; if(sum < 1.0f) sum = 1.0f; float x = (logf(freq) - l1) / l2; //compute where the n-th hamonics fits to the graph if(x < 0.0f) x = 0.0f; x *= N_RES_POINTS; float dx = x - floor(x); x = floor(x); int kx1 = (int)x; if(kx1 >= N_RES_POINTS) kx1 = N_RES_POINTS - 1; int kx2 = kx1 + 1; if(kx2 >= N_RES_POINTS) kx2 = N_RES_POINTS - 1; float result = (Prespoints[kx1] * (1.0f - dx) + Prespoints[kx2] * dx) / 127.0f - sum / 127.0f; result = powf(10.0f, result * PmaxdB / 20.0f); return result; } /* * Smooth the resonance function */ void Resonance::smooth() { float old = Prespoints[0]; for(int i = 0; i < N_RES_POINTS; ++i) { old = old * 0.4f + Prespoints[i] * 0.6f; Prespoints[i] = (int) old; } old = Prespoints[N_RES_POINTS - 1]; for(int i = N_RES_POINTS - 1; i > 0; i--) { old = old * 0.4f + Prespoints[i] * 0.6f; Prespoints[i] = (int) old + 1; if(Prespoints[i] > 127) Prespoints[i] = 127; } } /* * Randomize the resonance function */ void Resonance::randomize(int type) { int r = (int)(RND * 127.0f); for(int i = 0; i < N_RES_POINTS; ++i) { Prespoints[i] = r; if((RND < 0.1f) && (type == 0)) r = (int)(RND * 127.0f); if((RND < 0.3f) && (type == 1)) r = (int)(RND * 127.0f); if(type == 2) r = (int)(RND * 127.0f); } smooth(); } /* * Interpolate the peaks */ void Resonance::interpolatepeaks(int type) { int x1 = 0, y1 = Prespoints[0]; for(int i = 1; i < N_RES_POINTS; ++i) if((Prespoints[i] != 64) || (i + 1 == N_RES_POINTS)) { int y2 = Prespoints[i]; for(int k = 0; k < i - x1; ++k) { float x = (float) k / (i - x1); if(type == 0) x = (1 - cosf(x * PI)) * 0.5f; Prespoints[x1 + k] = (int)(y1 * (1.0f - x) + y2 * x); } x1 = i; y1 = y2; } } /* * Get the frequency from x, where x is [0..1]; x is the x coordinate */ float Resonance::getfreqx(float x) { if(x > 1.0f) x = 1.0f; float octf = powf(2.0f, getoctavesfreq()); return getcenterfreq() / sqrt(octf) * powf(octf, x); } /* * Get the x coordinate from frequency (used by the UI) */ float Resonance::getfreqpos(float freq) { return (logf(freq) - logf(getfreqx(0.0f))) / logf(2.0f) / getoctavesfreq(); } /* * Get the center frequency of the resonance graph */ float Resonance::getcenterfreq() { return 10000.0f * powf(10, -(1.0f - Pcenterfreq / 127.0f) * 2.0f); } /* * Get the number of octave that the resonance functions applies to */ float Resonance::getoctavesfreq() { return 0.25f + 10.0f * Poctavesfreq / 127.0f; } void Resonance::sendcontroller(MidiControllers ctl, float par) { if(ctl == C_resonance_center) ctlcenter = par; else ctlbw = par; } void Resonance::add2XML(XMLwrapper *xml) { xml->addparbool("enabled", Penabled); if((Penabled == 0) && (xml->minimal)) return; xml->addpar("max_db", PmaxdB); xml->addpar("center_freq", Pcenterfreq); xml->addpar("octaves_freq", Poctavesfreq); xml->addparbool("protect_fundamental_frequency", Pprotectthefundamental); xml->addpar("resonance_points", N_RES_POINTS); for(int i = 0; i < N_RES_POINTS; ++i) { xml->beginbranch("RESPOINT", i); xml->addpar("val", Prespoints[i]); xml->endbranch(); } } void Resonance::getfromXML(XMLwrapper *xml) { Penabled = xml->getparbool("enabled", Penabled); PmaxdB = xml->getpar127("max_db", PmaxdB); Pcenterfreq = xml->getpar127("center_freq", Pcenterfreq); Poctavesfreq = xml->getpar127("octaves_freq", Poctavesfreq); Pprotectthefundamental = xml->getparbool("protect_fundamental_frequency", Pprotectthefundamental); for(int i = 0; i < N_RES_POINTS; ++i) { if(xml->enterbranch("RESPOINT", i) == 0) continue; Prespoints[i] = xml->getpar127("val", Prespoints[i]); xml->exitbranch(); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h000066400000000000000000000044251247673406200250510ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Resonance.h - Resonance Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef RESONANCE_H #define RESONANCE_H #include "../globals.h" #include "../Misc/Util.h" #include "../Misc/XMLwrapper.h" #include "../Params/Presets.h" #include "../DSP/FFTwrapper.h" #define N_RES_POINTS 256 class Resonance:public Presets { public: Resonance(); ~Resonance(); void setpoint(int n, unsigned char p); void applyres(int n, fft_t *fftdata, float freq); void smooth(); void interpolatepeaks(int type); void randomize(int type); void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); float getfreqpos(float freq); float getfreqx(float x); float getfreqresponse(float freq); float getcenterfreq(); float getoctavesfreq(); void sendcontroller(MidiControllers ctl, float par); //parameters unsigned char Penabled; //if the ressonance is enabled unsigned char Prespoints[N_RES_POINTS]; //how many points define the resonance function unsigned char PmaxdB; //how many dB the signal may be amplified unsigned char Pcenterfreq, Poctavesfreq; //the center frequency of the res. func., and the number of octaves unsigned char Pprotectthefundamental; //the fundamental (1-st harmonic) is not damped, even it resonance function is low //controllers float ctlcenter; //center frequency(relative) float ctlbw; //bandwidth(relative) private: }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp000066400000000000000000000443301247673406200250050ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer SUBnote.cpp - The "subtractive" synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "../globals.h" #include "SUBnote.h" #include "../Misc/Util.h" SUBnote::SUBnote(SUBnoteParameters *parameters, Controller *ctl_, float freq, float velocity, int portamento_, int midinote, bool besilent) :SynthNote(freq, velocity, portamento_, midinote, besilent) { pars = parameters; ctl = ctl_; NoteEnabled = ON; setup(freq, velocity, portamento_, midinote); } void SUBnote::setup(float freq, float velocity, int portamento_, int midinote, bool legato) { portamento = portamento_; NoteEnabled = ON; volume = powf(0.1f, 3.0f * (1.0f - pars->PVolume / 96.0f)); //-60 dB .. 0 dB volume *= VelF(velocity, pars->PAmpVelocityScaleFunction); if(pars->PPanning != 0) panning = pars->PPanning / 127.0f; else panning = RND; if(!legato) { numstages = pars->Pnumstages; stereo = pars->Pstereo; start = pars->Pstart; firsttick = 1; } int pos[MAX_SUB_HARMONICS]; if(pars->Pfixedfreq == 0) basefreq = freq; else { basefreq = 440.0f; int fixedfreqET = pars->PfixedfreqET; if(fixedfreqET != 0) { //if the frequency varies according the keyboard note float tmp = (midinote - 69.0f) / 12.0f * (powf(2.0f, (fixedfreqET - 1) / 63.0f) - 1.0f); if(fixedfreqET <= 64) basefreq *= powf(2.0f, tmp); else basefreq *= powf(3.0f, tmp); } } float detune = getdetune(pars->PDetuneType, pars->PCoarseDetune, pars->PDetune); basefreq *= powf(2.0f, detune / 1200.0f); //detune // basefreq*=ctl->pitchwheel.relfreq;//pitch wheel //global filter GlobalFilterCenterPitch = pars->GlobalFilter->getfreq() //center freq + (pars->PGlobalFilterVelocityScale / 127.0f * 6.0f) //velocity sensing * (VelF(velocity, pars->PGlobalFilterVelocityScaleFunction) - 1); if(!legato) { GlobalFilterL = NULL; GlobalFilterR = NULL; GlobalFilterEnvelope = NULL; } int harmonics = 0; //select only harmonics that desire to compute for(int n = 0; n < MAX_SUB_HARMONICS; ++n) { if(pars->Phmag[n] == 0) continue; pos[harmonics++] = n; } if(!legato) firstnumharmonics = numharmonics = harmonics; else { if(harmonics > firstnumharmonics) numharmonics = firstnumharmonics; else numharmonics = harmonics; } if(numharmonics == 0) { NoteEnabled = OFF; return; } if(!legato) { lfilter = new bpfilter[numstages * numharmonics]; if(stereo != 0) rfilter = new bpfilter[numstages * numharmonics]; } //how much the amplitude is normalised (because the harmonics) float reduceamp = 0.0f; for(int n = 0; n < numharmonics; ++n) { float freq = basefreq * pars->POvertoneFreqMult[pos[n]]; overtone_freq[n] = freq; overtone_rolloff[n] = computerolloff(freq); //the bandwidth is not absolute(Hz); it is relative to frequency float bw = powf(10, (pars->Pbandwidth - 127.0f) / 127.0f * 4) * numstages; //Bandwidth Scale bw *= powf(1000 / freq, (pars->Pbwscale - 64.0f) / 64.0f * 3.0f); //Relative BandWidth bw *= powf(100, (pars->Phrelbw[pos[n]] - 64.0f) / 64.0f); if(bw > 25.0f) bw = 25.0f; //try to keep same amplitude on all freqs and bw. (empirically) float gain = sqrt(1500.0f / (bw * freq)); float hmagnew = 1.0f - pars->Phmag[pos[n]] / 127.0f; float hgain; switch(pars->Phmagtype) { case 1: hgain = expf(hmagnew * logf(0.01f)); break; case 2: hgain = expf(hmagnew * logf(0.001f)); break; case 3: hgain = expf(hmagnew * logf(0.0001f)); break; case 4: hgain = expf(hmagnew * logf(0.00001f)); break; default: hgain = 1.0f - hmagnew; } gain *= hgain; reduceamp += hgain; for(int nph = 0; nph < numstages; ++nph) { float amp = 1.0f; if(nph == 0) amp = gain; initfilter(lfilter[nph + n * numstages], freq, bw, amp, hgain); if(stereo != 0) initfilter(rfilter[nph + n * numstages], freq, bw, amp, hgain); } } if(reduceamp < 0.001f) reduceamp = 1.0f; volume /= reduceamp; oldpitchwheel = 0; oldbandwidth = 64; if(!legato) { if(pars->Pfixedfreq == 0) initparameters(basefreq); else initparameters(basefreq / 440.0f * freq); } else { if(pars->Pfixedfreq == 0) freq = basefreq; else freq *= basefreq / 440.0f; if(pars->PGlobalFilterEnabled != 0) { globalfiltercenterq = pars->GlobalFilter->getq(); GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking( basefreq); } } oldamplitude = newamplitude; } void SUBnote::legatonote(float freq, float velocity, int portamento_, int midinote, bool externcall) { // Manage legato stuff if(legato.update(freq, velocity, portamento_, midinote, externcall)) return; setup(freq, velocity, portamento_, midinote, true); } SUBnote::~SUBnote() { if(NoteEnabled != OFF) KillNote(); } /* * Kill the note */ void SUBnote::KillNote() { if(NoteEnabled != OFF) { delete [] lfilter; lfilter = NULL; if(stereo != 0) delete [] rfilter; rfilter = NULL; delete AmpEnvelope; delete FreqEnvelope; delete BandWidthEnvelope; delete GlobalFilterL; delete GlobalFilterR; delete GlobalFilterEnvelope; NoteEnabled = OFF; } } /* * Compute the filters coefficients */ void SUBnote::computefiltercoefs(bpfilter &filter, float freq, float bw, float gain) { if(freq > synth->samplerate_f / 2.0f - 200.0f) freq = synth->samplerate_f / 2.0f - 200.0f; float omega = 2.0f * PI * freq / synth->samplerate_f; float sn = sinf(omega); float cs = cosf(omega); float alpha = sn * sinh(LOG_2 / 2.0f * bw * omega / sn); if(alpha > 1) alpha = 1; if(alpha > bw) alpha = bw; filter.b0 = alpha / (1.0f + alpha) * filter.amp * gain; filter.b2 = -alpha / (1.0f + alpha) * filter.amp * gain; filter.a1 = -2.0f * cs / (1.0f + alpha); filter.a2 = (1.0f - alpha) / (1.0f + alpha); } /* * Initialise the filters */ void SUBnote::initfilter(bpfilter &filter, float freq, float bw, float amp, float mag) { filter.xn1 = 0.0f; filter.xn2 = 0.0f; if(start == 0) { filter.yn1 = 0.0f; filter.yn2 = 0.0f; } else { float a = 0.1f * mag; //empirically float p = RND * 2.0f * PI; if(start == 1) a *= RND; filter.yn1 = a * cosf(p); filter.yn2 = a * cosf(p + freq * 2.0f * PI / synth->samplerate_f); //correct the error of computation the start amplitude //at very high frequencies if(freq > synth->samplerate_f * 0.96f) { filter.yn1 = 0.0f; filter.yn2 = 0.0f; } } filter.amp = amp; filter.freq = freq; filter.bw = bw; computefiltercoefs(filter, freq, bw, 1.0f); } /* * Do the filtering */ inline void SubFilterA(const float coeff[4], float &src, float work[4]) { work[3] = src*coeff[0]+work[1]*coeff[1]+work[2]*coeff[2]+work[3]*coeff[3]; work[1] = src; src = work[3]; } inline void SubFilterB(const float coeff[4], float &src, float work[4]) { work[2] = src*coeff[0]+work[0]*coeff[1]+work[3]*coeff[2]+work[2]*coeff[3]; work[0] = src; src = work[2]; } //This dance is designed to minimize unneeded memory operations which can result //in quite a bit of wasted time void SUBnote::filter(bpfilter &filter, float *smps) { assert(synth->buffersize % 8 == 0); float coeff[4] = {filter.b0, filter.b2, -filter.a1, -filter.a2}; float work[4] = {filter.xn1, filter.xn2, filter.yn1, filter.yn2}; for(int i = 0; i < synth->buffersize; i += 8) { SubFilterA(coeff, smps[i + 0], work); SubFilterB(coeff, smps[i + 1], work); SubFilterA(coeff, smps[i + 2], work); SubFilterB(coeff, smps[i + 3], work); SubFilterA(coeff, smps[i + 4], work); SubFilterB(coeff, smps[i + 5], work); SubFilterA(coeff, smps[i + 6], work); SubFilterB(coeff, smps[i + 7], work); } filter.xn1 = work[0]; filter.xn2 = work[1]; filter.yn1 = work[2]; filter.yn2 = work[3]; } /* * Init Parameters */ void SUBnote::initparameters(float freq) { AmpEnvelope = new Envelope(pars->AmpEnvelope, freq); if(pars->PFreqEnvelopeEnabled != 0) FreqEnvelope = new Envelope(pars->FreqEnvelope, freq); else FreqEnvelope = NULL; if(pars->PBandWidthEnvelopeEnabled != 0) BandWidthEnvelope = new Envelope(pars->BandWidthEnvelope, freq); else BandWidthEnvelope = NULL; if(pars->PGlobalFilterEnabled != 0) { globalfiltercenterq = pars->GlobalFilter->getq(); GlobalFilterL = Filter::generate(pars->GlobalFilter); if(stereo) GlobalFilterR = Filter::generate(pars->GlobalFilter); GlobalFilterEnvelope = new Envelope(pars->GlobalFilterEnvelope, freq); GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking(basefreq); } computecurrentparameters(); } /* * Compute how much to reduce amplitude near nyquist or subaudible frequencies. */ float SUBnote::computerolloff(float freq) { const float lower_limit = 10.0f; const float lower_width = 10.0f; const float upper_width = 200.0f; float upper_limit = synth->samplerate / 2.0f; if (freq > lower_limit + lower_width && freq < upper_limit - upper_width) return 1.0f; if (freq <= lower_limit || freq >= upper_limit) return 0.0f; if (freq <= lower_limit + lower_width) return (1.0f - cosf(M_PI * (freq - lower_limit) / lower_width)) / 2.0f; return (1.0f - cosf(M_PI * (freq - upper_limit) / upper_width)) / 2.0f; } /* * Compute Parameters of SUBnote for each tick */ void SUBnote::computecurrentparameters() { if((FreqEnvelope != NULL) || (BandWidthEnvelope != NULL) || (oldpitchwheel != ctl->pitchwheel.data) || (oldbandwidth != ctl->bandwidth.data) || (portamento != 0)) { float envfreq = 1.0f; float envbw = 1.0f; float gain = 1.0f; if(FreqEnvelope != NULL) { envfreq = FreqEnvelope->envout() / 1200; envfreq = powf(2.0f, envfreq); } envfreq *= ctl->pitchwheel.relfreq; //pitch wheel if(portamento != 0) { //portamento is used envfreq *= ctl->portamento.freqrap; if(ctl->portamento.used == 0) //the portamento has finished portamento = 0; //this note is no longer "portamented" ; } if(BandWidthEnvelope != NULL) { envbw = BandWidthEnvelope->envout(); envbw = powf(2, envbw); } envbw *= ctl->bandwidth.relbw; //bandwidth controller float tmpgain = 1.0f / sqrt(envbw * envfreq); for(int n = 0; n < numharmonics; ++n) { overtone_rolloff[n] = computerolloff(overtone_freq[n] * envfreq); } for(int n = 0; n < numharmonics; ++n) for(int nph = 0; nph < numstages; ++nph) { if(nph == 0) gain = tmpgain; else gain = 1.0f; computefiltercoefs(lfilter[nph + n * numstages], lfilter[nph + n * numstages].freq * envfreq, lfilter[nph + n * numstages].bw * envbw, gain); } if(stereo != 0) for(int n = 0; n < numharmonics; ++n) for(int nph = 0; nph < numstages; ++nph) { if(nph == 0) gain = tmpgain; else gain = 1.0f; computefiltercoefs( rfilter[nph + n * numstages], rfilter[nph + n * numstages].freq * envfreq, rfilter[nph + n * numstages].bw * envbw, gain); } oldbandwidth = ctl->bandwidth.data; oldpitchwheel = ctl->pitchwheel.data; } newamplitude = volume * AmpEnvelope->envout_dB() * 2.0f; //Filter if(GlobalFilterL != NULL) { float globalfilterpitch = GlobalFilterCenterPitch + GlobalFilterEnvelope->envout(); float filterfreq = globalfilterpitch + ctl->filtercutoff.relfreq + GlobalFilterFreqTracking; filterfreq = Filter::getrealfreq(filterfreq); GlobalFilterL->setfreq_and_q(filterfreq, globalfiltercenterq * ctl->filterq.relq); if(GlobalFilterR != NULL) GlobalFilterR->setfreq_and_q( filterfreq, globalfiltercenterq * ctl->filterq.relq); } } /* * Note Output */ int SUBnote::noteout(float *outl, float *outr) { memcpy(outl, denormalkillbuf, synth->bufferbytes); memcpy(outr, denormalkillbuf, synth->bufferbytes); if(NoteEnabled == OFF) return 0; float tmprnd[synth->buffersize]; float tmpsmp[synth->buffersize]; //left channel for(int i = 0; i < synth->buffersize; ++i) tmprnd[i] = RND * 2.0f - 1.0f; for(int n = 0; n < numharmonics; ++n) { float rolloff = overtone_rolloff[n]; memcpy(tmpsmp, tmprnd, synth->bufferbytes); for(int nph = 0; nph < numstages; ++nph) filter(lfilter[nph + n * numstages], tmpsmp); for(int i = 0; i < synth->buffersize; ++i) outl[i] += tmpsmp[i] * rolloff; } if(GlobalFilterL != NULL) GlobalFilterL->filterout(&outl[0]); //right channel if(stereo != 0) { for(int i = 0; i < synth->buffersize; ++i) tmprnd[i] = RND * 2.0f - 1.0f; for(int n = 0; n < numharmonics; ++n) { float rolloff = overtone_rolloff[n]; memcpy(tmpsmp, tmprnd, synth->bufferbytes); for(int nph = 0; nph < numstages; ++nph) filter(rfilter[nph + n * numstages], tmpsmp); for(int i = 0; i < synth->buffersize; ++i) outr[i] += tmpsmp[i] * rolloff; } if(GlobalFilterR != NULL) GlobalFilterR->filterout(&outr[0]); } else memcpy(outr, outl, synth->bufferbytes); if(firsttick != 0) { int n = 10; if(n > synth->buffersize) n = synth->buffersize; for(int i = 0; i < n; ++i) { float ampfadein = 0.5f - 0.5f * cosf( (float) i / (float) n * PI); outl[i] *= ampfadein; outr[i] *= ampfadein; } firsttick = 0; } if(ABOVE_AMPLITUDE_THRESHOLD(oldamplitude, newamplitude)) // Amplitude interpolation for(int i = 0; i < synth->buffersize; ++i) { float tmpvol = INTERPOLATE_AMPLITUDE(oldamplitude, newamplitude, i, synth->buffersize); outl[i] *= tmpvol * panning; outr[i] *= tmpvol * (1.0f - panning); } else for(int i = 0; i < synth->buffersize; ++i) { outl[i] *= newamplitude * panning; outr[i] *= newamplitude * (1.0f - panning); } oldamplitude = newamplitude; computecurrentparameters(); // Apply legato-specific sound signal modifications legato.apply(*this, outl, outr); // Check if the note needs to be computed more if(AmpEnvelope->finished() != 0) { for(int i = 0; i < synth->buffersize; ++i) { //fade-out float tmp = 1.0f - (float)i / synth->buffersize_f; outl[i] *= tmp; outr[i] *= tmp; } KillNote(); } return 1; } /* * Relase Key (Note Off) */ void SUBnote::relasekey() { AmpEnvelope->relasekey(); if(FreqEnvelope) FreqEnvelope->relasekey(); if(BandWidthEnvelope) BandWidthEnvelope->relasekey(); if(GlobalFilterEnvelope) GlobalFilterEnvelope->relasekey(); } /* * Check if the note is finished */ int SUBnote::finished() const { if(NoteEnabled == OFF) return 1; else return 0; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h000066400000000000000000000071171247673406200244540ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer SUBnote.h - The subtractive synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SUB_NOTE_H #define SUB_NOTE_H #include "SynthNote.h" #include "../globals.h" #include "../Params/SUBnoteParameters.h" #include "../Params/Controller.h" #include "Envelope.h" #include "../DSP/Filter.h" class SUBnote:public SynthNote { public: SUBnote(SUBnoteParameters *parameters, Controller *ctl_, float freq, float velocity, int portamento_, int midinote, bool besilent); ~SUBnote(); void legatonote(float freq, float velocity, int portamento_, int midinote, bool externcall); int noteout(float *outl, float *outr); //note output,return 0 if the note is finished void relasekey(); int finished() const; private: void setup(float freq, float velocity, int portamento_, int midinote, bool legato = false); void computecurrentparameters(); void initparameters(float freq); void KillNote(); SUBnoteParameters *pars; //parameters int stereo; int numstages; //number of stages of filters int numharmonics; //number of harmonics (after the too higher hamonics are removed) int firstnumharmonics; //To keep track of the first note's numharmonics value, useful in legato mode. int start; //how the harmonics start float basefreq; float panning; Envelope *AmpEnvelope; Envelope *FreqEnvelope; Envelope *BandWidthEnvelope; Filter *GlobalFilterL, *GlobalFilterR; Envelope *GlobalFilterEnvelope; //internal values ONOFFTYPE NoteEnabled; int firsttick, portamento; float volume, oldamplitude, newamplitude; float GlobalFilterCenterPitch; //octaves float GlobalFilterFreqTracking; struct bpfilter { float freq, bw, amp; //filter parameters float a1, a2, b0, b2; //filter coefs. b1=0 float xn1, xn2, yn1, yn2; //filter internal values }; void initfilter(bpfilter &filter, float freq, float bw, float amp, float mag); float computerolloff(float freq); void computefiltercoefs(bpfilter &filter, float freq, float bw, float gain); inline void filter(bpfilter &filter, float *smps); bpfilter *lfilter, *rfilter; float overtone_rolloff[MAX_SUB_HARMONICS]; float overtone_freq[MAX_SUB_HARMONICS]; Controller *ctl; int oldpitchwheel, oldbandwidth; float globalfiltercenterq; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.cpp000066400000000000000000000107151247673406200254210ustar00rootroot00000000000000#include "SynthNote.h" #include "../globals.h" #include SynthNote::SynthNote(float freq, float vel, int port, int note, bool quiet) :legato(freq, vel, port, note, quiet) {} SynthNote::Legato::Legato(float freq, float vel, int port, int note, bool quiet) { // Initialise some legato-specific vars msg = LM_Norm; fade.length = (int)(synth->samplerate_f * 0.005f); // 0.005f seems ok. if(fade.length < 1) fade.length = 1; // (if something's fishy) fade.step = (1.0f / fade.length); decounter = -10; param.freq = freq; param.vel = vel; param.portamento = port; param.midinote = note; lastfreq = 0.0f; silent = quiet; } int SynthNote::Legato::update(float freq, float velocity, int portamento_, int midinote_, bool externcall) { if(externcall) msg = LM_Norm; if(msg != LM_CatchUp) { lastfreq = param.freq; param.freq = freq; param.vel = velocity; param.portamento = portamento_; param.midinote = midinote_; if(msg == LM_Norm) { if(silent) { fade.m = 0.0f; msg = LM_FadeIn; } else { fade.m = 1.0f; msg = LM_FadeOut; return 1; } } if(msg == LM_ToNorm) msg = LM_Norm; } return 0; } void SynthNote::Legato::apply(SynthNote ¬e, float *outl, float *outr) { if(silent) // Silencer if(msg != LM_FadeIn) { memset(outl, 0, synth->bufferbytes); memset(outr, 0, synth->bufferbytes); } switch(msg) { case LM_CatchUp: // Continue the catch-up... if(decounter == -10) decounter = fade.length; //Yea, could be done without the loop... for(int i = 0; i < synth->buffersize; ++i) { decounter--; if(decounter < 1) { // Catching-up done, we can finally set // the note to the actual parameters. decounter = -10; msg = LM_ToNorm; note.legatonote(param.freq, param.vel, param.portamento, param.midinote, false); break; } } break; case LM_FadeIn: // Fade-in if(decounter == -10) decounter = fade.length; silent = false; for(int i = 0; i < synth->buffersize; ++i) { decounter--; if(decounter < 1) { decounter = -10; msg = LM_Norm; break; } fade.m += fade.step; outl[i] *= fade.m; outr[i] *= fade.m; } break; case LM_FadeOut: // Fade-out, then set the catch-up if(decounter == -10) decounter = fade.length; for(int i = 0; i < synth->buffersize; ++i) { decounter--; if(decounter < 1) { for(int j = i; j < synth->buffersize; ++j) { outl[j] = 0.0f; outr[j] = 0.0f; } decounter = -10; silent = true; // Fading-out done, now set the catch-up : decounter = fade.length; msg = LM_CatchUp; //This freq should make this now silent note to catch-up/resync //with the heard note for the same length it stayed at the //previous freq during the fadeout. float catchupfreq = param.freq * (param.freq / lastfreq); note.legatonote(catchupfreq, param.vel, param.portamento, param.midinote, false); break; } fade.m -= fade.step; outl[i] *= fade.m; outr[i] *= fade.m; } break; default: break; } } void SynthNote::setVelocity(float velocity_) { legato.setSilent(true); //Let legato.update(...) returns 0. legatonote(legato.getFreq(), velocity_, legato.getPortamento(), legato.getMidinote(), true); legato.setDecounter(0); //avoid chopping sound due fade-in } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h000066400000000000000000000060641247673406200250700ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer Note.h - Abstract Base Class for synthesizers Copyright (C) 2010-2010 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SYNTH_NOTE_H #define SYNTH_NOTE_H #include "../globals.h" #include "../Params/FilterParams.h" class SynthNote { public: SynthNote(float freq, float vel, int port, int note, bool quiet); virtual ~SynthNote() {} /**Compute Output Samples * @return 0 if note is finished*/ virtual int noteout(float *outl, float *outr) = 0; //TODO fix this spelling error [noisey commit] /**Release the key for the note and start release portion of envelopes.*/ virtual void relasekey() = 0; /**Return if note is finished. * @return finished=1 unfinished=0*/ virtual int finished() const = 0; virtual void legatonote(float freq, float velocity, int portamento_, int midinote_, bool externcall) = 0; /* For polyphonic aftertouch needed */ void setVelocity(float velocity_); protected: // Legato transitions class Legato { public: Legato(float freq, float vel, int port, int note, bool quiet); void apply(SynthNote ¬e, float *outl, float *outr); int update(float freq, float velocity, int portamento_, int midinote_, bool externalcall); private: bool silent; float lastfreq; LegatoMsg msg; int decounter; struct { // Fade In/Out vars int length; float m, step; } fade; struct { // Note parameters float freq, vel; int portamento, midinote; } param; public: /* Some get routines for legatonote calls (aftertouch feature)*/ float getFreq() {return param.freq; } float getVelocity() {return param.vel; } int getPortamento() {return param.portamento; } int getMidinote() {return param.midinote; } void setSilent(bool silent_) {silent = silent_; } void setDecounter(int decounter_) {decounter = decounter_; } } legato; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/000077500000000000000000000000001247673406200227535ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h000066400000000000000000000141771247673406200251500ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AdNoteTest.h - CxxTest for Synth/ADnote Copyright (C) 2009-2011 Mark McCurry Copyright (C) 2009 Harald Hvaal Authors: Mark McCurry, Harald Hvaal This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "../Misc/Master.h" #include "../Misc/Util.h" #include "../Synth/ADnote.h" #include "../Params/Presets.h" #include "../DSP/FFTwrapper.h" #include "../globals.h" SYNTH_T *synth; using namespace std; class AdNoteTest:public CxxTest::TestSuite { public: ADnote *note; Master *master; FFTwrapper *fft; Controller *controller; unsigned char testnote; float *outR, *outL; void setUp() { //First the sensible settings and variables that have to be set: synth = new SYNTH_T; synth->buffersize = 256; outL = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) *(outL + i) = 0; outR = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) *(outR + i) = 0; //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = 0; //phew, glad to get thouse out of my way. took me a lot of sweat and gdb to get this far... fft = new FFTwrapper(synth->oscilsize); //prepare the default settings ADnoteParameters *defaultPreset = new ADnoteParameters(fft); //Assert defaults TS_ASSERT(!defaultPreset->VoicePar[1].Enabled); XMLwrapper *wrap = new XMLwrapper(); cout << string(SOURCE_DIR) + string("/guitar-adnote.xmz") << endl; wrap->loadXMLfile(string(SOURCE_DIR) + string("/guitar-adnote.xmz")); TS_ASSERT(wrap->enterbranch("MASTER")); TS_ASSERT(wrap->enterbranch("PART", 0)); TS_ASSERT(wrap->enterbranch("INSTRUMENT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0)); TS_ASSERT(wrap->enterbranch("ADD_SYNTH_PARAMETERS")); defaultPreset->getfromXML(wrap); //defaultPreset->defaults(); //verify xml was loaded TS_ASSERT(defaultPreset->VoicePar[1].Enabled); controller = new Controller(); //lets go with.... 50! as a nice note testnote = 50; float freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f); note = new ADnote(defaultPreset, controller, freq, 120, 0, testnote, false); delete defaultPreset; delete wrap; } void willNoteBeRunButIsHereForLinkingReasonsHowsThisForCamelCaseEh() { master = new Master(); } void tearDown() { delete note; delete controller; delete fft; delete [] outL; delete [] outR; delete [] denormalkillbuf; FFT_cleanup(); delete synth; } void testDefaults() { int sampleCount = 0; //#define WRITE_OUTPUT #ifdef WRITE_OUTPUT ofstream file("adnoteout", ios::out); #endif note->noteout(outL, outR); #ifdef WRITE_OUTPUT for(int i = 0; i < synth->buffersize; ++i) file << outL[i] << std::endl; #endif sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.254609f, 0.0001f); note->relasekey(); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.102197f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.111261f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.021375f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.149149f, 0.0001f); while(!note->finished()) { note->noteout(outL, outR); #ifdef WRITE_OUTPUT for(int i = 0; i < synth->buffersize; ++i) file << outL[i] << std::endl; #endif sampleCount += synth->buffersize; } #ifdef WRITE_OUTPUT file.close(); #endif TS_ASSERT_EQUALS(sampleCount, 9472); } #define OUTPUT_PROFILE #ifdef OUTPUT_PROFILE void testSpeed() { const int samps = 15000; int t_on = clock(); // timer before calling func for(int i = 0; i < samps; ++i) note->noteout(outL, outR); int t_off = clock(); // timer when func returns printf("AdNoteTest: %f seconds for %d Samples to be generated.\n", (static_cast(t_off - t_on)) / CLOCKS_PER_SEC, samps); } #endif }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/CMakeLists.txt000066400000000000000000000037041247673406200255170ustar00rootroot00000000000000#for tests looking for files stored in the source dir add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") CXXTEST_ADD_TEST(ControllerTest ControllerTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ControllerTest.h) CXXTEST_ADD_TEST(EchoTest EchoTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/EchoTest.h) #CXXTEST_ADD_TEST(SampleTest SampleTest.h) CXXTEST_ADD_TEST(MicrotonalTest MicrotonalTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MicrotonalTest.h) CXXTEST_ADD_TEST(XMLwrapperTest XMLwrapper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/XMLwrapperTest.h) CXXTEST_ADD_TEST(ADnoteTest AdNoteTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/AdNoteTest.h) CXXTEST_ADD_TEST(SUBnoteTest SubNoteTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/SubNoteTest.h) CXXTEST_ADD_TEST(OscilGenTest OscilGenTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/OscilGenTest.h) CXXTEST_ADD_TEST(RandTest RandTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/RandTest.h) CXXTEST_ADD_TEST(PADnoteTest PadNoteTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/PadNoteTest.h) CXXTEST_ADD_TEST(PluginTest PluginTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/PluginTest.h) CXXTEST_ADD_TEST(UnisonTest UnisonTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UnisonTest.h) #Extra libraries added to make test and full compilation use the same library #links for quirky compilers set(test_lib zynaddsubfx_core ${ZLIB_LIBRARY} ${FFTW_LIBRARIES} ${MXML_LIBRARIES} pthread) message(STATUS "Linking tests with: ${test_lib}") target_link_libraries(ADnoteTest ${test_lib}) target_link_libraries(SUBnoteTest ${test_lib}) target_link_libraries(ControllerTest ${test_lib}) target_link_libraries(EchoTest ${test_lib}) target_link_libraries(MicrotonalTest ${test_lib}) target_link_libraries(OscilGenTest ${test_lib}) target_link_libraries(XMLwrapperTest ${test_lib}) target_link_libraries(RandTest ${test_lib}) target_link_libraries(PADnoteTest ${test_lib}) target_link_libraries(PluginTest zynaddsubfx_core zynaddsubfx_nio ${OS_LIBRARIES} ${AUDIO_LIBRARIES}) target_link_libraries(UnisonTest ${test_lib}) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h000066400000000000000000000051131247673406200261070ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer ControllerTest.h - CxxTest for Params/Controller Copyright (C) 2009-2011 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "../Params/Controller.h" #include "../globals.h" SYNTH_T *synth; class ControllerTest:public CxxTest::TestSuite { public: void setUp() { synth = new SYNTH_T; testCtl = new Controller(); } void tearDown() { delete testCtl; delete synth; } void testPortamentoRange() { //Initialize portamento testCtl->setportamento(127); testCtl->portamento.time = 127; testCtl->initportamento(40.0f, 400.0f, false); //Bounds Check while(testCtl->portamento.used) { TS_ASSERT((0.0f <= testCtl->portamento.x) && (testCtl->portamento.x <= 1.0f)); TS_ASSERT((0.1f <= testCtl->portamento.freqrap) && (testCtl->portamento.freqrap <= 1.0f)); testCtl->updateportamento(); } TS_ASSERT((0.0f <= testCtl->portamento.x) && (testCtl->portamento.x <= 1.0f)); TS_ASSERT((0.1f <= testCtl->portamento.freqrap) && (testCtl->portamento.freqrap <= 1.0f)); } void testPortamentoValue() { testCtl->setportamento(127); testCtl->portamento.time = 127; testCtl->initportamento(40.0f, 400.0f, false); int i; for(i = 0; i < 10; ++i) testCtl->updateportamento(); //Assert that the numbers are the same as they were at release TS_ASSERT_DELTA(testCtl->portamento.x, 0.0290249f, 0.000001f) TS_ASSERT_DELTA(testCtl->portamento.freqrap, 0.126122f, 0.000001f) } private: Controller *testCtl; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h000066400000000000000000000104321247673406200246420ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer EchoTest.h - CxxTest for Effect/Echo Copyright (C) 2009-2011 Mark McCurry Copyright (C) 2009 Harald Hvaal Authors: Mark McCurry, Harald Hvaal This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "../Effects/Echo.h" #include "../globals.h" SYNTH_T *synth; using namespace std; class EchoTest:public CxxTest::TestSuite { public: void setUp() { synth = new SYNTH_T; outL = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) outL[i] = 0.0f; outR = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) outR[i] = 0.0f; input = new Stereo(new float[synth->buffersize], new float[synth->buffersize]); for(int i = 0; i < synth->buffersize; ++i) input->l[i] = input->r[i] = 0.0f; testFX = new Echo(true, outL, outR, 44100, 256); } void tearDown() { delete[] input->r; delete[] input->l; delete input; delete[] outL; delete[] outR; delete testFX; delete synth; } void testInit() { //Make sure that the output will be zero at start //(given a zero input) testFX->out(*input); for(int i = 0; i < synth->buffersize; ++i) { TS_ASSERT_DELTA(outL[i], 0.0f, 0.0001f); TS_ASSERT_DELTA(outR[i], 0.0f, 0.0001f); } } void testClear() { char DELAY = 2; testFX->changepar(DELAY, 127); //flood with high input for(int i = 0; i < synth->buffersize; ++i) input->r[i] = input->l[i] = 1.0f; for(int i = 0; i < 500; ++i) testFX->out(*input); for(int i = 0; i < synth->buffersize; ++i) { TS_ASSERT_DIFFERS(outL[i], 0.0f); TS_ASSERT_DIFFERS(outR[i], 0.0f) } //After making sure the internal buffer has a nonzero value //cleanup //Then get the next output, which should be zereoed out if DELAY //is large enough testFX->cleanup(); testFX->out(*input); for(int i = 0; i < synth->buffersize; ++i) { TS_ASSERT_DELTA(outL[i], 0.0f, 0.0001f); TS_ASSERT_DELTA(outR[i], 0.0f, 0.0001f); } } //Insures that the proper decay occurs with high feedback void testDecaywFb() { //flood with high input for(int i = 0; i < synth->buffersize; ++i) input->r[i] = input->l[i] = 1.0f; char FEEDBACK = 5; testFX->changepar(FEEDBACK, 127); for(int i = 0; i < 100; ++i) testFX->out(*input); for(int i = 0; i < synth->buffersize; ++i) { TS_ASSERT_DIFFERS(outL[i], 0.0f); TS_ASSERT_DIFFERS(outR[i], 0.0f) } float amp = abs(outL[0] + outR[0]) / 2; //reset input to zero for(int i = 0; i < synth->buffersize; ++i) input->r[i] = input->l[i] = 0.0f; //give the echo time to fade based upon zero input and high feedback for(int i = 0; i < 50; ++i) testFX->out(*input); TS_ASSERT_LESS_THAN_EQUALS(abs(outL[0] + outR[0]) / 2, amp); } private: Stereo *input; float *outR, *outL; Echo *testFX; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h000066400000000000000000000113561247673406200261010ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer MicrotonalTest.h - CxxTest for Misc/Microtonal Copyright (C) 2009-2012 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "../Misc/Microtonal.h" #include #include #include #include "../globals.h" SYNTH_T *synth; using namespace std; class MicrotonalTest:public CxxTest::TestSuite { public: void setUp() { synth = new SYNTH_T; testMicro = new Microtonal(); } void tearDown() { delete testMicro; delete synth; } //Verifies that the object is initialized correctly void testinit() { TS_ASSERT_EQUALS(testMicro->Pinvertupdown, 0); TS_ASSERT_EQUALS(testMicro->Pinvertupdowncenter, 60); TS_ASSERT_EQUALS(testMicro->getoctavesize(), 12); TS_ASSERT_EQUALS(testMicro->Penabled, 0); TS_ASSERT_EQUALS(testMicro->PAnote, 69); TS_ASSERT_EQUALS(testMicro->PAfreq, 440.0f); TS_ASSERT_EQUALS(testMicro->Pscaleshift, 64); TS_ASSERT_EQUALS(testMicro->Pfirstkey, 0); TS_ASSERT_EQUALS(testMicro->Plastkey, 127); TS_ASSERT_EQUALS(testMicro->Pmiddlenote, 60); TS_ASSERT_EQUALS(testMicro->Pmapsize, 12); TS_ASSERT_EQUALS(testMicro->Pmappingenabled, 0); TS_ASSERT_EQUALS(testMicro->Pglobalfinedetune, 64); TS_ASSERT_EQUALS(string((const char *)testMicro->Pname), "12tET"); TS_ASSERT_EQUALS(string( (const char *)testMicro->Pcomment), "Equal Temperament 12 notes per octave"); for(int i = 0; i < 128; ++i) TS_ASSERT_EQUALS(testMicro->Pmapping[i], i); TS_ASSERT_DELTA(testMicro->getnotefreq(19, 0), 24.4997f, 0.0001f); } //Tests saving/loading to XML void testXML() { //Gah, the XMLwrapper is a twisted maze testMicro->Penabled = 1; XMLwrapper xml; xml.beginbranch("Dummy"); //this should not be needed, but odd behavior //seems to exist from MICROTONAL being on the //top of the stack xml.beginbranch("MICROTONAL"); testMicro->add2XML(&xml); xml.endbranch(); xml.endbranch(); char *tmp = xml.getXMLdata(); Microtonal other; other.Penabled = 1; strcpy((char *)other.Pname, "Myname"); //will be nicer with strings TS_ASSERT(*testMicro != other); //sanity check TS_ASSERT(xml.enterbranch("Dummy")); TS_ASSERT(xml.enterbranch("MICROTONAL")); other.getfromXML(&xml); xml.exitbranch(); xml.exitbranch(); char *tmpo = xml.getXMLdata(); TS_ASSERT(!strcmp(tmp, tmpo)); free(tmp); free(tmpo); } #if 0 /**\todo Test Saving/loading from file*/ //Test texttomapping TODO finish void _testTextToMapping() { //the mapping is from old documentation for "Intense Diatonic" scale const char *mapping[12] = {"0", "x", "1", "x", "2", "3", "x", "4", "x", "5", "x", "6"}; //for(int i=0;i<20;++i) // cout << i << ':' << testMicro->getnotefreq(i,0) << endl; // // octave size == 7 // find dead notes } //Test texttotunings TODO finish void _testTextToTunings() { //the tuning is from old documentation for "Intense Diatonic" scale const char *tuning[7] = {"9/8", "5/4", "4/3", "3/2", "5/3", "15/8", "2/1"}; const int numTunings = 7; //for(int i=0;i<20;++i) // cout << i << ':' << testMicro->getnotefreq(i,0) << endl; // go to middle key and verify the proportions } /**\TODO test loading from scl and kbm files*/ #endif private: Microtonal *testMicro; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h000066400000000000000000000117041247673406200254720ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AdNoteTest.h - CxxTest for Synth/OscilGen Copyright (C) 20011-2012 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "../Synth/OscilGen.h" #include "../globals.h" SYNTH_T *synth; using namespace std; class OscilGenTest:public CxxTest::TestSuite { public: float freq; float *outR, *outL; FFTwrapper *fft; OscilGen *oscil; void setUp() { synth = new SYNTH_T; //First the sensible settings and variables that have to be set: synth->buffersize = 256; synth->oscilsize = 1024; outL = new float[synth->oscilsize]; outR = new float[synth->oscilsize]; memset(outL, 0, sizeof(float) * synth->oscilsize); memset(outR, 0, sizeof(float) * synth->oscilsize); //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = 0; //prepare the default settings fft = new FFTwrapper(synth->oscilsize); oscil = new OscilGen(fft, NULL); //Assert defaults [TODO] XMLwrapper *wrap = new XMLwrapper(); wrap->loadXMLfile(string(SOURCE_DIR) + string("/guitar-adnote.xmz")); TS_ASSERT(wrap->enterbranch("MASTER")); TS_ASSERT(wrap->enterbranch("PART", 0)); TS_ASSERT(wrap->enterbranch("INSTRUMENT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0)); TS_ASSERT(wrap->enterbranch("ADD_SYNTH_PARAMETERS")); TS_ASSERT(wrap->enterbranch("VOICE", 0)); TS_ASSERT(wrap->enterbranch("OSCIL")); oscil->getfromXML(wrap); delete wrap; //verify xml was loaded [TODO] //lets go with.... 50! as a nice note const char testnote = 50; freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f); } void tearDown() { delete oscil; delete fft; delete[] outL; delete[] outR; delete[] denormalkillbuf; FFT_cleanup(); delete synth; } //verifies that initialization occurs void testInit(void) { oscil->get(outL, freq); } void testOutput(void) { oscil->get(outL, freq); TS_ASSERT_DELTA(outL[23], -0.044547f, 0.0001f); TS_ASSERT_DELTA(outL[129], -0.018169f, 0.0001f); TS_ASSERT_DELTA(outL[586], 0.045647f, 0.0001f); TS_ASSERT_DELTA(outL[1023], -0.038334f, 0.0001f); } void testSpectrum(void) { oscil->getspectrum(synth->oscilsize / 2, outR, 1); TS_ASSERT_DELTA(outR[0], 350.698059f, 0.0001f); TS_ASSERT_DELTA(outR[1], 228.889267f, 0.0001f); TS_ASSERT_DELTA(outR[2], 62.187931f, 0.0001f); TS_ASSERT_DELTA(outR[3], 22.295225f, 0.0001f); TS_ASSERT_DELTA(outR[4], 6.942001f, 0.0001f); TS_ASSERT_DELTA(outR[26], 0.015110f, 0.0001f); TS_ASSERT_DELTA(outR[47], 0.003425f, 0.0001f); TS_ASSERT_DELTA(outR[65], 0.001293f, 0.0001f); } //performance testing void testSpeed() { const int samps = 15000; int t_on = clock(); // timer before calling func for(int i = 0; i < samps; ++i) oscil->prepare(); int t_off = clock(); // timer when func returns printf("OscilGenTest: %f seconds for %d prepares.\n", (static_cast(t_off - t_on)) / CLOCKS_PER_SEC, samps); t_on = clock(); // timer before calling func for(int i = 0; i < samps; ++i) oscil->get(outL, freq); t_off = clock(); // timer when func returns printf("OscilGenTest: %f seconds for %d gets.\n", (static_cast(t_off - t_on)) / CLOCKS_PER_SEC, samps); } }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h000066400000000000000000000142551247673406200253250ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PadNoteTest.h - CxxTest for Synth/PADnote Copyright (C) 20012 zco Author: zco This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ //Based Upon AdNoteTest.h and SubNoteTest.h #include #include #include #include #include #include "../Misc/Master.h" #include "../Misc/Util.h" #include "../Synth/PADnote.h" #include "../Params/Presets.h" #include "../DSP/FFTwrapper.h" #include "../globals.h" SYNTH_T *synth; using namespace std; class PadNoteTest:public CxxTest::TestSuite { public: PADnote *note; Master *master; FFTwrapper *fft; Controller *controller; unsigned char testnote; float *outR, *outL; void setUp() { synth = new SYNTH_T; //First the sensible settings and variables that have to be set: synth->buffersize = 256; outL = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) *(outL + i) = 0; outR = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) *(outR + i) = 0; //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = 0; //phew, glad to get thouse out of my way. took me a lot of sweat and gdb to get this far... fft = new FFTwrapper(synth->oscilsize); //prepare the default settings PADnoteParameters *defaultPreset = new PADnoteParameters(fft,NULL); //Assert defaults ///TS_ASSERT(!defaultPreset->VoicePar[1].Enabled); XMLwrapper *wrap = new XMLwrapper(); cout << string(SOURCE_DIR) + string("/guitar-adnote.xmz") << endl; wrap->loadXMLfile(string(SOURCE_DIR) + string("/guitar-adnote.xmz")); TS_ASSERT(wrap->enterbranch("MASTER")); TS_ASSERT(wrap->enterbranch("PART", 2)); TS_ASSERT(wrap->enterbranch("INSTRUMENT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0)); TS_ASSERT(wrap->enterbranch("PAD_SYNTH_PARAMETERS")); defaultPreset->getfromXML(wrap); //defaultPreset->defaults(); defaultPreset->applyparameters(false); //verify xml was loaded ///TS_ASSERT(defaultPreset->VoicePar[1].Enabled); controller = new Controller(); //lets go with.... 50! as a nice note testnote = 50; float freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f); note = new PADnote(defaultPreset, controller, freq, 120, 0, testnote, false); //delete defaultPreset; delete wrap; } void willNoteBeRunButIsHereForLinkingReasonsHowsThisForCamelCaseEh() { master = new Master(); } void tearDown() { delete note; delete controller; delete fft; delete [] outL; delete [] outR; delete [] denormalkillbuf; FFT_cleanup(); delete synth; } void testDefaults() { int sampleCount = 0; //#define WRITE_OUTPUT #ifdef WRITE_OUTPUT ofstream file("padnoteout", ios::out); #endif note->noteout(outL, outR); #ifdef WRITE_OUTPUT for(int i = 0; i < synth->buffersize; ++i) file << outL[i] << std::endl; #endif sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.0660f, 0.0001f); note->relasekey(); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.0729f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.060818f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.036895f, 0.0005f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.006623f, 0.0001f); while(!note->finished()) { note->noteout(outL, outR); #ifdef WRITE_OUTPUT for(int i = 0; i < synth->buffersize; ++i) file << outL[i] << std::endl; #endif sampleCount += synth->buffersize; } #ifdef WRITE_OUTPUT file.close(); #endif TS_ASSERT_EQUALS(sampleCount, 2304); } #define OUTPUT_PROFILE #ifdef OUTPUT_PROFILE void testSpeed() { const int samps = 15000; int t_on = clock(); // timer before calling func for(int i = 0; i < samps; ++i) note->noteout(outL, outR); int t_off = clock(); // timer when func returns printf("PadNoteTest: %f seconds for %d Samples to be generated.\n", (static_cast(t_off - t_on)) / CLOCKS_PER_SEC, samps); } #endif }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h000066400000000000000000000067701247673406200252340ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer PluginTest.h - CxxTest for embedding zyn Copyright (C) 2013-2013 Mark McCurry Authors: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "../Misc/Master.h" #include "../Misc/Util.h" #include "../globals.h" SYNTH_T *synth; using namespace std; char *instance_name=(char*)""; class PluginTest:public CxxTest::TestSuite { public: void setUp() { synth = new SYNTH_T; synth->buffersize = 256; synth->samplerate = 48000; synth->alias(); outL = new float[1024]; for(int i = 0; i < synth->buffersize; ++i) outL[i] = 0.0f; outR = new float[1024]; for(int i = 0; i < synth->buffersize; ++i) outR[i] = 0.0f; //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = 0; for(int i = 0; i < 16; ++i) master[i] = new Master(); } void tearDown() { for(int i = 0; i < 16; ++i) delete master[i]; delete[] outL; delete[] outR; delete synth; } void testInit() { for(int x=0; x<100; ++x) for(int i=0; i<16; ++i) master[i]->GetAudioOutSamples(rand()%1025, synth->samplerate, outL, outR); } void testPanic() { master[0]->setController(0, 0x64, 0); master[0]->noteOn(0,64,64); master[0]->AudioOut(outL, outR); float sum = 0.0f; for(int i = 0; i < synth->buffersize; ++i) sum += fabs(outL[i]); TS_ASSERT_LESS_THAN(0.1f, sum); } string loadfile(string fname) const { std::ifstream t(fname.c_str()); std::string str((std::istreambuf_iterator(t)), std::istreambuf_iterator()); return str; } void testLoadSave(void) { const string fname = string(SOURCE_DIR) + "/guitar-adnote.xmz"; const string fdata = string("\n") + loadfile(fname); char *result = NULL; master[0]->putalldata((char*)fdata.c_str(), fdata.length()); int res = master[0]->getalldata(&result); TS_ASSERT_EQUALS(fdata.length()+1, res); TS_ASSERT(fdata == result); } private: float *outR, *outL; Master *master[16]; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h000066400000000000000000000025411247673406200246520ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer RandTest.h - CxxTest for Pseudo-Random Number Generator Copyright (C) 2009-2009 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "../Misc/Util.h" SYNTH_T *synth; #include #include #include class RandTest:public CxxTest::TestSuite { public: void testPRNG(void) { //verify RND returns expected pattern when unseeded TS_ASSERT_DELTA(RND, 0.607781, 0.00001); TS_ASSERT_DELTA(RND, 0.591761, 0.00001); TS_ASSERT_DELTA(RND, 0.186133, 0.00001); TS_ASSERT_DELTA(RND, 0.286319, 0.00001); TS_ASSERT_DELTA(RND, 0.511766, 0.00001); } }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h000066400000000000000000000132201247673406200253410ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AdNoteTest.h - CxxTest for Synth/SUBnote Copyright (C) 2009-2011 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ //Based Upon AdNoteTest.h #include #include #include #include #include #include "../Misc/Master.h" #include "../Misc/Util.h" #include "../Synth/SUBnote.h" #include "../Params/Presets.h" #include "../globals.h" SYNTH_T *synth; using namespace std; class SubNoteTest:public CxxTest::TestSuite { public: SUBnote *note; Master *master; Controller *controller; unsigned char testnote; float *outR, *outL; void setUp() { synth = new SYNTH_T; //First the sensible settings and variables that have to be set: synth->buffersize = 256; outL = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) *(outL + i) = 0; outR = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) *(outR + i) = 0; //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = 0; //prepare the default settings SUBnoteParameters *defaultPreset = new SUBnoteParameters(); XMLwrapper *wrap = new XMLwrapper(); wrap->loadXMLfile(string(SOURCE_DIR) + string("/guitar-adnote.xmz")); TS_ASSERT(wrap->enterbranch("MASTER")); TS_ASSERT(wrap->enterbranch("PART", 1)); TS_ASSERT(wrap->enterbranch("INSTRUMENT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT")); TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0)); TS_ASSERT(wrap->enterbranch("SUB_SYNTH_PARAMETERS")); defaultPreset->getfromXML(wrap); controller = new Controller(); //lets go with.... 50! as a nice note testnote = 50; float freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f); note = new SUBnote(defaultPreset, controller, freq, 120, 0, testnote, false); delete wrap; delete defaultPreset; } void willNoteBeRunButIsHereForLinkingReasonsHowsThisForCamelCaseEh() { master = new Master(); } void tearDown() { delete controller; delete note; delete [] outL; delete [] outR; delete [] denormalkillbuf; delete synth; } void testDefaults() { //Note: if these tests fail it is due to the relationship between //global.h::RND and SUBnote.cpp int sampleCount = 0; //#define WRITE_OUTPUT #ifdef WRITE_OUTPUT ofstream file("subnoteout", ios::out); #endif note->noteout(outL, outR); #ifdef WRITE_OUTPUT for(int i = 0; i < synth->buffersize; ++i) file << outL[i] << std::endl; #endif sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.0000f, 0.0001f); note->relasekey(); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.0016f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.0000f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.0013f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.0002f, 0.0001f); while(!note->finished()) { note->noteout(outL, outR); #ifdef WRITE_OUTPUT for(int i = 0; i < synth->buffersize; ++i) file << outL[i] << std::endl; #endif sampleCount += synth->buffersize; } #ifdef WRITE_OUTPUT file.close(); #endif TS_ASSERT_EQUALS(sampleCount, 2304); } #define OUTPUT_PROFILE #ifdef OUTPUT_PROFILE void testSpeed() { const int samps = 15000; int t_on = clock(); // timer before calling func for(int i = 0; i < samps; ++i) note->noteout(outL, outR); int t_off = clock(); // timer when func returns printf("SubNoteTest: %f seconds for %d Samples to be generated.\n", (static_cast(t_off - t_on)) / CLOCKS_PER_SEC, samps); } #endif }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h000066400000000000000000000141051247673406200252400ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer AdNoteTest.h - CxxTest for Synth/ADnote Copyright (C) 2009-2011 Mark McCurry Copyright (C) 2009 Harald Hvaal Authors: Mark McCurry, Harald Hvaal This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "../Misc/Util.h" #include "../Synth/ADnote.h" #include "../Synth/OscilGen.h" #include "../Params/Presets.h" #include "../DSP/FFTwrapper.h" #include "../globals.h" SYNTH_T *synth; using namespace std; #define BUF 256 class AdNoteTest:public CxxTest::TestSuite { public: ADnote *note; FFTwrapper *fft; Controller *controller; unsigned char testnote; ADnoteParameters *params; float freq; float outR[BUF], outL[BUF]; void setUp() { //First the sensible settings and variables that have to be set: synth = new SYNTH_T; synth->buffersize = BUF; memset(outL,0,sizeof(outL)); memset(outR,0,sizeof(outR)); //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[BUF]; memset(denormalkillbuf, 0, sizeof(float)*BUF); fft = new FFTwrapper(BUF); //prepare the default settings params = new ADnoteParameters(fft); //sawtooth to make things a bit more interesting params->VoicePar[0].OscilSmp->Pcurrentbasefunc = 3; controller = new Controller(); //lets go with.... 50! as a nice note testnote = 50; freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f); } void tearDown() { delete note; delete controller; delete fft; delete [] denormalkillbuf; FFT_cleanup(); delete synth; delete params; } void run_test(int a, int b, int c, int d, int e, int f, float values[4]) { sprng(0); params->set_unison_size_index(0,a); params->VoicePar[0].Unison_frequency_spread = b; params->VoicePar[0].Unison_stereo_spread = c; params->VoicePar[0].Unison_vibratto = d; params->VoicePar[0].Unison_vibratto_speed = e; params->VoicePar[0].Unison_invert_phase = f; note = new ADnote(params, controller, freq, 120, 0, testnote, false); note->noteout(outL, outR); TS_ASSERT_DELTA(outL[80], values[0], 1e-5); //printf("{%f,", outL[80]); note->noteout(outL, outR); TS_ASSERT_DELTA(outR[90], values[1], 1e-5); //printf("%f,", outR[90]); note->noteout(outL, outR); TS_ASSERT_DELTA(outL[20], values[2], 1e-5); //printf("%f,", outL[20]); note->noteout(outL, outR); TS_ASSERT_DELTA(outR[200], values[3], 1e-5); //printf("%f},\n", outR[200]); } void testUnison() { sprng(0xbeef); float data[][4] = { {-0.034547,0.034349,-0.000000,0.138284}, {0.023612,-0.093842,0.000000,-0.040384}, {-0.015980,0.001871,-0.014463,-0.000726}, {-0.040970,-0.000275,0.000000,-0.121016}, {0.019250,-0.045252,0.000270,0.105372}, {-0.086575,0.001130,-0.018921,0.001329}, {0.009203,-0.006176,0.017344,-0.003316}, {0.029411,-0.000248,-0.112797,-0.012883}, {0.043657,-0.014062,-0.003374,-0.071821}, {0.007973,0.068019,-0.038900,0.047639}, {-0.002055,0.011170,-0.058152,-0.043493}, {-0.005298,0.000605,-0.070932,-0.005678}, {0.025028,-0.027742,0.020985,-0.015417}, {0.074349,0.000640,0.080613,0.066636}, {-0.045721,0.000279,0.009819,0.032202}, }; int freq_spread[15]; int stereo_spread[15]; int vibrato[15]; int vibrato_speed[15]; int inv_phase[15]; for(int i=0; i<15; ++i) { freq_spread[i] = prng()%0x7f; stereo_spread[i] = prng()%0x7f; vibrato[i] = prng()%0x7f; vibrato_speed[i] = prng()%0x7f; inv_phase[i] = prng()%5; } for(int i=0; i<15; ++i) { run_test(i, freq_spread[i], stereo_spread[i], vibrato[i], vibrato_speed[i], inv_phase[i], data[i]); } #if 0 int sampleCount = 0; sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.254609f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.102197f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.111422f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], -0.021375f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; TS_ASSERT_DELTA(outL[255], 0.149882f, 0.0001f); #endif } }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h000066400000000000000000000040151247673406200260250ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer XMLwrapperTest.h - CxxTest for Misc/XMLwrapper Copyright (C) 2009-2009 Mark McCurry Author: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "../Misc/XMLwrapper.h" #include #include "../globals.h" SYNTH_T *synth; using namespace std; class XMLwrapperTest:public CxxTest::TestSuite { public: void setUp() { xmla = new XMLwrapper; xmlb = new XMLwrapper; } void testAddPar() { xmla->addpar("my Pa*_ramet@er", 75); TS_ASSERT_EQUALS(xmla->getpar("my Pa*_ramet@er", 0, -200, 200), 75); } //here to verify that no leaks occur void testLoad() { string location = string(SOURCE_DIR) + string( "/Tests/guitar-adnote.xmz"); xmla->loadXMLfile(location); } void testAnotherLoad() { string dat = "\n\n\ \n\ \n\ \n"; xmlb->putXMLdata(dat.c_str()); } void tearDown() { delete xmla; delete xmlb; } private: XMLwrapper *xmla; XMLwrapper *xmlb; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz000066400000000000000000003473111247673406200262670ustar00rootroot00000000000000 12tET Equal Temperament 12 notes per octave Dist Guitar 2 lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/000077500000000000000000000000001247673406200221665ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl000066400000000000000000001426211247673406200241270ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include "../Params/ADnoteParameters.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "../Misc/Master.h"} {public } decl {\#include "ResonanceUI.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include "WidgetPDial.h"} {public } decl {\#include "EnvelopeUI.h"} {public } decl {\#include "LFOUI.h"} {public } decl {\#include "FilterUI.h"} {public } decl {\#include "OscilGenUI.h"} {public } decl {\#include "PresetsUI.h"} {public } class ADvoicelistitem {open : {public Fl_Group} } { Function {make_window()} {open private } { Fl_Window ADnoteVoiceListItem {open private xywh {262 736 615 100} type Double box UP_FRAME class Fl_Group visible } { Fl_Group voicelistitemgroup { private xywh {50 0 570 25} code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();} } { Fl_Value_Slider voicevolume { callback {pars->VoicePar[nvoice].PVolume=(int)o->value();} tooltip Volume xywh {90 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PVolume);} } Fl_Check_Button voiceresonanceenabled { callback {pars->VoicePar[nvoice].Presonance=(int)o->value();} tooltip {Resonance On/Off} xywh {245 7 15 17} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 11 align 4 code0 {o->value(pars->VoicePar[nvoice].Presonance);} } Fl_Value_Slider voicelfofreq { callback {pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();} tooltip {Frequency LFO amount} xywh {500 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);} } Fl_Dial voicepanning { callback {pars->VoicePar[nvoice].PPanning=(int) o->value();} tooltip {Panning (leftmost is Random)} xywh {215 5 20 20} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PPanning);} class WidgetPDial } Fl_Group voiceoscil {open xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);} code2 {if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}} } {} Fl_Value_Output detunevalueoutput { callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());} xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());} } Fl_Slider voicedetune { callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192; detunevalueoutput->do_callback();} tooltip {Fine Detune (cents)} xywh {315 5 185 20} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);} } Fl_Box noiselabel { label N callback {if (pars->VoicePar[nvoice].Type==0) { o->hide(); voiceresonanceenabled->activate(); detunevalueoutput->activate(); voicedetune->activate(); voicelfofreq->activate(); voiceoscil->activate(); } else { o->show(); voiceresonanceenabled->deactivate(); detunevalueoutput->deactivate(); voicedetune->deactivate(); voicelfofreq->deactivate(); voiceoscil->deactivate(); };} xywh {65 5 20 20} labelfont 1 labelsize 13 labelcolor 53 code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();} } } Fl_Check_Button voiceenabled { label 01 callback {pars->VoicePar[nvoice].Enabled=(int)o->value(); if (o->value()==0) voicelistitemgroup->deactivate(); else voicelistitemgroup->activate(); o->redraw();} private xywh {30 5 20 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4 code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));} code1 {o->value(pars->VoicePar[nvoice].Enabled);} } } } Function {ADvoicelistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {nvoice=0; pars=NULL;} {} } Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} { code {pars=parameters; nvoice=nvoice_; master=master_; make_window(); ADnoteVoiceListItem->show(); end();} {} } Function {refreshlist()} {} { code {voiceenabled->value(pars->VoicePar[nvoice].Enabled); voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance); voicevolume->value(pars->VoicePar[nvoice].PVolume); voicedetune->value(pars->VoicePar[nvoice].PDetune-8192); voicepanning->value(pars->VoicePar[nvoice].PPanning); voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity); if (pars->VoicePar[nvoice].Pextoscil != -1) { osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master); } else osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master); if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate(); else voicelistitemgroup->activate(); detunevalueoutput->do_callback(); noiselabel->do_callback(); ADnoteVoiceListItem->redraw();} {} } Function {~ADvoicelistitem()} {} { code {ADnoteVoiceListItem->hide(); //delete(ADnoteVoiceListItem);} {} } decl {ADnoteParameters *pars;} {} decl {int nvoice;} {} decl {Oscilloscope *osc;} {} decl {Master *master;} {} } class ADvoiceUI {open : {public Fl_Group} } { Function {make_window()} {open } { Fl_Window ADnoteVoiceParameters { label Voice open xywh {863 89 765 595} type Double box NO_BOX class Fl_Group visible } { Fl_Group voiceparametersgroup {open xywh {0 0 770 590} color 48 code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();} } { Fl_Group voicemodegroup {open xywh {0 5 770 585} color 64 } { Fl_Group voiceFMparametersgroup { label MODULATOR open xywh {530 5 230 580} box UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 code0 {if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();} } { Fl_Group modfrequency { label {Mod.FREQUENCY} xywh {535 220 220 155} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Group voiceFMfreqenvgroup { label {ADSynth Modulator - Frequency Envelope} xywh {540 300 210 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->VoicePar[nvoice].FMFreqEnvelope);} code1 {if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value(); if (o->value()==0) voiceFMfreqenvgroup->deactivate(); else voiceFMfreqenvgroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {545 305 50 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);} } Fl_Counter {} { label {Coarse Det.} callback {int k=(int) o->value(); if (k<0) k+=1024; pars->VoicePar[nvoice].PFMCoarseDetune = k+ (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;} tooltip {Coarse Detune} xywh {685 280 60 15} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11 code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;} code1 {if (k>=512) k-=1024;} code2 {o->value(k);} code3 {o->lstep(10);} } Fl_Counter {} { label Octave callback {int k=(int) o->value(); if (k<0) k+=16; pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+ pars->VoicePar[nvoice].PFMCoarseDetune%1024;} tooltip Octave xywh {625 280 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;} code1 {if (k>=8) k-=16;} code2 {o->value(k);} } Fl_Slider {} { callback {pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192; fmdetunevalueoutput->do_callback();} tooltip {Fine Detune (cents)} xywh {590 245 155 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->VoicePar[nvoice].PFMDetune-8192);} } Fl_Value_Output fmdetunevalueoutput { label Detune callback {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));} xywh {540 245 45 18} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8 code0 {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));} code1 {//o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));} } Fl_Choice {} { label {Detune Type} callback {pars->VoicePar[nvoice].PFMDetuneType=(int) o->value(); fmdetunevalueoutput->do_callback();} open xywh {540 280 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code1 {o->value(pars->VoicePar[nvoice].PFMDetuneType);} } {} } Fl_Group {} { label {Mod.AMPLITUDE} xywh {535 60 220 160} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Value_Slider {} { label Vol callback {pars->VoicePar[nvoice].PFMVolume=(int)o->value();} tooltip Volume xywh {540 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PFMVolume);} } Fl_Value_Slider {} { label {V.Sns} callback {pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();} tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);} } Fl_Group voiceFMampenvgroup { label {ADSynth Modulator - Amplitude Envelope} open xywh {540 145 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->VoicePar[nvoice].FMAmpEnvelope);} code1 {if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value(); if (o->value()==0) voiceFMampenvgroup->deactivate(); else voiceFMampenvgroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {545 150 50 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);} } Fl_Value_Slider {} { label {F.Damp} callback {pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;} tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 minimum -64 maximum 63 step 1 code0 {o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);} } } Fl_Group modoscil {open xywh {535 365 220 220} } { Fl_Group fmoscil {open xywh {535 440 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 code0 {oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;} code2 {oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);} } {} Fl_Box {} { label {Mod.Oscillator} xywh {535 375 155 20} labelfont 1 align 20 } Fl_Button changeFMoscilbutton { label Change callback {if (oscedit!=NULL) delete(oscedit); int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil; oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,NULL,master);} xywh {700 380 55 15} box THIN_UP_BOX labelfont 1 labelsize 11 code0 {if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);} } Fl_Slider {} { label Phase callback {pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value(); oscFM->phase=64-(int) o->value(); fmoscil->redraw();} xywh {645 415 105 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1 code0 {o->value(64-pars->VoicePar[nvoice].PFMoscilphase);} } Fl_Choice {} { label Use callback {pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1; if ((int) o->value() != 0) { oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master); changeFMoscilbutton->labelcolor(FL_BLUE); } else { oscFM->init(pars->VoicePar[nvoice].FMSmp,master); changeFMoscilbutton->labelcolor(FL_BLACK); }; voiceFMparametersgroup->redraw();} open xywh {560 410 75 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10 code0 {o->add("Internal");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code3 {o->value(pars->VoicePar[nvoice].PextFMoscil+1);} } {} } Fl_Choice {} { label {External Mod.} callback {pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1; if ((int) o->value() != 0) { modoscil->deactivate(); modfrequency->deactivate(); } else { modoscil->activate(); modfrequency->activate(); }; voiceFMparametersgroup->redraw();} open xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("OFF");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code2 {o->value(pars->VoicePar[nvoice].PFMVoice+1);} code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}} } {} } Fl_Choice {} { label {Type:} callback {pars->VoicePar[nvoice].PFMEnabled=(int)o->value(); if (o->value()==0) voiceFMparametersgroup->deactivate(); else voiceFMparametersgroup->activate(); o->redraw();} xywh {535 40 80 20} down_box BORDER_BOX align 5 code0 {o->value(pars->VoicePar[nvoice].PFMEnabled);} } { MenuItem {} { label OFF xywh {40 40 100 20} labelfont 1 } MenuItem {} { label MORPH xywh {50 50 100 20} labelfont 1 } MenuItem {} { label RING xywh {60 60 100 20} labelfont 1 } MenuItem {} { label PM xywh {70 70 100 20} labelfont 1 } MenuItem {} { label FM xywh {80 80 100 20} labelfont 1 } MenuItem {} { label PITCH xywh {90 90 100 20} labelfont 1 deactivate } } Fl_Group {} { label FREQUENCY xywh {5 265 525 120} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Group voicefreqenvgroup { label {ADSynth Voice - Frequency Envelope} open xywh {10 305 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->VoicePar[nvoice].FreqEnvelope);} code1 {if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value(); if (o->value()==0) voicefreqenvgroup->deactivate(); else voicefreqenvgroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {15 310 50 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);} } Fl_Group voicefreqlfogroup { label {Frequency LFO } open xywh {220 305 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->VoicePar[nvoice].FreqLfo);} code1 {if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();} class LFOUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value(); if (o->value()==0) voicefreqlfogroup->deactivate(); else voicefreqlfogroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {225 311 55 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);} } Fl_Counter {} { label Octave callback {int k=(int) o->value(); if (k<0) k+=16; pars->VoicePar[nvoice].PCoarseDetune = k*1024+ pars->VoicePar[nvoice].PCoarseDetune%1024;} tooltip Octave xywh {470 285 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 code0 {int k=pars->VoicePar[nvoice].PCoarseDetune/1024;} code1 {if (k>=8) k-=16;} code2 {o->value(k);} } Fl_Counter {} { label {Coarse Det.} callback {int k=(int) o->value(); if (k<0) k+=1024; pars->VoicePar[nvoice].PCoarseDetune = k+ (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;} tooltip {Coarse Detune} xywh {455 355 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11 code0 {int k=pars->VoicePar[nvoice].PCoarseDetune%1024;} code1 {if (k>=512) k-=1024;} code2 {o->value(k);} code3 {o->lstep(10);} } Fl_Slider {} { callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192; detunevalueoutput->do_callback();} tooltip {Fine Detune (cents)} xywh {58 287 392 13} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);} } Fl_Value_Output detunevalueoutput { label Detune callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());} xywh {10 287 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 code0 {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());} } Fl_Check_Button {} { label 440Hz callback {int x=(int) o->value(); pars->VoicePar[nvoice].Pfixedfreq=x; if (x==0) fixedfreqetdial->deactivate(); else fixedfreqetdial->activate();} tooltip {Set the voice base frequency to 440Hz} xywh {345 268 55 15} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].Pfixedfreq);} } Fl_Dial fixedfreqetdial { label {Eq.T.} callback {pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();} tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PfixedfreqET);} code1 {if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();} class WidgetPDial } Fl_Choice {} { label {Detune Type} callback {pars->VoicePar[nvoice].PDetuneType=(int) o->value(); detunevalueoutput->do_callback();} open xywh {455 320 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code1 {o->value(pars->VoicePar[nvoice].PDetuneType);} } {} } Fl_Group voiceoscil { xywh {80 390 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;} code2 {osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);} } {} Fl_Button changevoiceoscilbutton { label Change callback {if (oscedit!=NULL) delete(oscedit); int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil; oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,NULL,master);} xywh {5 490 65 20} box THIN_UP_BOX labelfont 1 labelsize 11 code0 {if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);} } Fl_Box {} { label {Voice Oscillator} xywh {5 390 75 35} labelfont 1 labelsize 12 align 128 } Fl_Slider {} { label Phase callback {pars->VoicePar[nvoice].Poscilphase=64-(int)o->value(); osc->phase=64-(int) o->value(); voiceoscil->redraw();} xywh {10 435 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1 code0 {o->value(64-pars->VoicePar[nvoice].Poscilphase);} } Fl_Check_Button {} { label {R.} callback {pars->VoicePar[nvoice].Presonance=(int) o->value();} tooltip {Resonance On/Off} xywh {210 5 35 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].Presonance);} } Fl_Choice {} { label {Use Oscil.} callback {pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1; if ((int) o->value() != 0) { osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master); changevoiceoscilbutton->labelcolor(FL_BLUE); } else { osc->init(pars->VoicePar[nvoice].OscilSmp,master); changevoiceoscilbutton->labelcolor(FL_BLACK); }; voiceparametersgroup->redraw(); voiceonbutton->redraw();} open xywh {5 470 65 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("Internal");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);} } {} Fl_Group {} {open xywh {5 540 520 50} box UP_FRAME } { Fl_Dial {} { label Stereo callback {pars->VoicePar[nvoice].Unison_stereo_spread=(int)o->value();} tooltip {Stereo Spread} xywh {322 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_stereo_spread);} class WidgetPDial } Fl_Choice {} { label Unison callback {pars->set_unison_size_index(nvoice,(int) o->value());} open tooltip {Unison size} xywh {10 560 75 20} down_box BORDER_BOX labelfont 1 align 5 textfont 1 textsize 10 code0 {o->add("OFF");char tmp[100];for (int i=1;ADnote_unison_sizes[i];i++){snprintf(tmp,100,"size %d",ADnote_unison_sizes[i]);o->add(tmp);};} code1 {o->value(pars->get_unison_size_index(nvoice));} } {} Fl_Dial {} { label Vibrato callback {pars->VoicePar[nvoice].Unison_vibratto=(int)o->value();} tooltip Vibrato xywh {364 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto);} class WidgetPDial } Fl_Choice {} { label Invert callback {pars->VoicePar[nvoice].Unison_invert_phase=(int) o->value();} open tooltip {Phase Invert} xywh {445 560 65 15} down_box BORDER_BOX labelsize 11 align 5 textfont 1 textsize 10 code0 {o->add("None");o->add("Random");char tmp[100];for (int i=2;i<=5;i++){snprintf(tmp,100,"%d %%",100/i);o->add(tmp);};} code1 {o->value(pars->VoicePar[nvoice].Unison_invert_phase);} } {} Fl_Slider {} { label {Frequency Spread} callback {pars->VoicePar[nvoice].Unison_frequency_spread=(int)o->value(); unisonspreadoutput->do_callback();} tooltip {Frequency Spread of the Unison} xywh {95 562 125 13} type {Horz Knob} box FLAT_BOX labelsize 12 align 1 maximum 127 step 1 value 64 code0 {o->value(pars->VoicePar[nvoice].Unison_frequency_spread);} } Fl_Value_Output unisonspreadoutput { label {(cents)} callback {o->value(pars->getUnisonFrequencySpreadCents(nvoice));} xywh {225 560 40 15} labelsize 10 align 5 maximum 1000 step 0.1 textfont 1 textsize 10 code0 {o->value(pars->getUnisonFrequencySpreadCents(nvoice));} } Fl_Dial {} { label {V.speed} callback {pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();} selected tooltip {Vibrato Average Speed} xywh {406 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto_speed);} class WidgetPDial } Fl_Dial {} { label {Ph.rand} callback {pars->VoicePar[nvoice].Unison_phase_randomness=(int)o->value();} tooltip {Phase randomness} xywh {280 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_phase_randomness);} class WidgetPDial } } } Fl_Group {} { label AMPLITUDE open xywh {5 40 240 220} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Value_Slider {} { label Vol callback {pars->VoicePar[nvoice].PVolume=(int)o->value();} tooltip Volume xywh {10 60 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PVolume);} } Fl_Value_Slider {} { label {V.Sns} callback {pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();} tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);} } Fl_Group voiceampenvgroup { label {ADSynth Voice - Amplitude Envelope} open xywh {10 105 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->VoicePar[nvoice].AmpEnvelope);} code1 {if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Dial {} { label Pan callback {pars->VoicePar[nvoice].PPanning=(int) o->value();} tooltip {Panning (leftmost is Random)} xywh {210 60 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PPanning);} class WidgetPDial } Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value(); if (o->value()==0) voiceampenvgroup->deactivate(); else voiceampenvgroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {15 110 50 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);} } Fl_Group voiceamplfogroup { label {Amplitude LFO } open xywh {10 180 230 75} box FLAT_BOX color 47 align 144 code0 {o->init(pars->VoicePar[nvoice].AmpLfo);} code1 {if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();} class LFOUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value(); if (o->value()==0) voiceamplfogroup->deactivate(); else voiceamplfogroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {15 185 55 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);} } Fl_Check_Button {} { label Minus callback {pars->VoicePar[nvoice].PVolumeminus=(int)o->value();} xywh {10 45 50 10} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->VoicePar[nvoice].PVolumeminus);} } } Fl_Group voicefiltergroup { label FILTER open xywh {245 5 285 260} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 code0 {if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();} } { Fl_Group {} { label {ADsynth Voice - Filter} open xywh {250 30 275 75} box FLAT_BOX color 50 align 144 code0 {o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);} class FilterUI } {} Fl_Group voicefilterenvgroup { label {ADSynth Voice - Filter Envelope} open xywh {250 115 275 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->VoicePar[nvoice].FilterEnvelope);} code1 {if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value(); if (o->value()==0) voicefilterenvgroup->deactivate(); else voicefilterenvgroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {255 119 55 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);} } Fl_Group voicefilterlfogroup { label {Filter LFO } open xywh {250 190 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->VoicePar[nvoice].FilterLfo);} code1 {if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();} class LFOUI } {} Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value(); if (o->value()==0) voicefilterlfogroup->deactivate(); else voicefilterlfogroup->activate(); o->redraw();} tooltip {Forced Relase} xywh {255 196 55 10} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);} } } Fl_Group {} { label 01 xywh {5 5 55 35} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 16 code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));} } {} Fl_Choice {} { callback {int x=(int) o->value(); pars->VoicePar[nvoice].Type=x; if (x==0) voicemodegroup->activate(); else voicemodegroup->deactivate(); noiselabel->do_callback();} tooltip {Oscillator Type (sound/noise)} xywh {5 515 65 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10 code0 {o->value(pars->VoicePar[nvoice].Type);} code1 {if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();} } { MenuItem {} { label Sound xywh {5 5 100 20} labelfont 1 labelsize 11 } MenuItem {} { label NOISE xywh {15 15 100 20} labelfont 1 labelsize 11 labelcolor 1 } } Fl_Check_Button bypassfiltercheckbutton { label {Bypass Global F.} callback {pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();} xywh {425 10 100 20} down_box DOWN_BOX labelfont 1 labelsize 10 align 148 code0 {o->value(pars->VoicePar[nvoice].Pfilterbypass);} } Fl_Group {} {open xywh {115 5 95 35} box THIN_UP_BOX } { Fl_Value_Slider {} { label Delay callback {pars->VoicePar[nvoice].PDelay=(int)o->value();} tooltip Volume xywh {120 21 84 12} type {Horz Knob} box FLAT_BOX labelsize 11 align 5 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].PDelay);} } } Fl_Check_Button {} { label On callback {pars->VoicePar[nvoice].PFilterEnabled=(int)o->value(); if (o->value()==0) voicefiltergroup->deactivate(); else voicefiltergroup->activate(); o->redraw(); bypassfiltercheckbutton->redraw();} tooltip {Enable Filter} xywh {250 15 60 15} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->VoicePar[nvoice].PFilterEnabled);} } Fl_Box noiselabel { label {White Noise} callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();} xywh {150 430 300 65} labelfont 1 labelsize 50 labelcolor 53 code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();} } } Fl_Check_Button voiceonbutton { label On callback {pars->VoicePar[nvoice].Enabled=(int)o->value(); if (o->value()==0) voiceparametersgroup->deactivate(); else voiceparametersgroup->activate(); o->redraw();} xywh {60 5 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {o->value(pars->VoicePar[nvoice].Enabled);} } } } Function {ADvoiceUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {nvoice=0; pars=NULL; oscedit=NULL;} {} } Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {open } { code {pars=parameters; nvoice=nvoice_; master=master_; make_window(); end(); ADnoteVoiceParameters->show();} {} } Function {~ADvoiceUI()} {open } { code {ADnoteVoiceParameters->hide(); hide(); if (oscedit!=NULL) { delete(oscedit); }; //delete (ADnoteVoiceParameters);} {} } decl {int nvoice;} {} decl {ADnoteParameters *pars;} {} decl {OscilEditor *oscedit;} {} decl {Oscilloscope *osc;} {} decl {Oscilloscope *oscFM;} {} decl {Master *master;} {} } class ADnoteUI {open : {public PresetsUI_} } { Function {make_window()} {open private } { Fl_Window ADnoteGlobalParameters { label {ADsynth Global Parameters of the Instrument} open xywh {457 319 540 430} type Double visible } { Fl_Group {} { label FREQUENCY open xywh {5 280 530 115} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Group freqenv { label {ADSynth Global - Frequency Envelope} open xywh {10 320 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->GlobalPar.FreqEnvelope);} class EnvelopeUI } {} Fl_Counter octave { label Octave callback {int k=(int) o->value(); if (k<0) k+=16; pars->GlobalPar.PCoarseDetune = k*1024+ pars->GlobalPar.PCoarseDetune%1024;} tooltip Octave xywh {455 300 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 code0 {int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;} code2 {o->value(k);} } Fl_Counter coarsedet { label {Coarse det.} callback {int k=(int) o->value(); if (k<0) k+=1024; pars->GlobalPar.PCoarseDetune = k+ (pars->GlobalPar.PCoarseDetune/1024)*1024;} tooltip {Coarse Detune} xywh {460 370 60 20} type Simple labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11 code0 {int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;} code2 {o->value(k);} code3 {o->lstep(10);} } Fl_Group freqlfo { label {Frequency LFO } open xywh {220 320 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->GlobalPar.FreqLfo);} class LFOUI } {} Fl_Slider freq { callback {pars->GlobalPar.PDetune=(int)o->value()+8192; detunevalueoutput->do_callback();} tooltip {Fine Detune (cents)} xywh {60 300 385 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->GlobalPar.PDetune-8192);} } Fl_Value_Output detunevalueoutput { label Detune callback {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));} xywh {12 300 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 code0 {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));} } Fl_Choice detunetype { label {Detune Type} callback {pars->GlobalPar.PDetuneType=(int) o->value()+1; detunevalueoutput->do_callback();} open xywh {455 340 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code1 {o->value(pars->GlobalPar.PDetuneType-1);} } {} Fl_Dial {} { label relBW callback {pars->GlobalPar.PBandwidth=(int) o->value(); pars->getBandwidthDetuneMultiplier(); for (int i=0;irefreshlist(); };} tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {505 295 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PBandwidth);} class WidgetPDial } } Fl_Group {} { label AMPLITUDE xywh {5 5 240 260} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Value_Slider volume { label Vol callback {pars->GlobalPar.PVolume=(int)o->value();} tooltip Volume xywh {10 30 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PVolume);} } Fl_Value_Slider vsns { label {V.Sns} callback {pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();} tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PAmpVelocityScaleFunction);} } Fl_Dial pan { label Pan callback {pars->GlobalPar.PPanning=(int) o->value();} tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PPanning);} class WidgetPDial } Fl_Dial pstr { label {P.Str.} callback {pars->GlobalPar.PPunchStrength=(int) o->value();} tooltip {Punch Strength} xywh {125 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PPunchStrength);} class WidgetPDial } Fl_Dial pt { label {P.t.} callback {pars->GlobalPar.PPunchTime=(int) o->value();} tooltip {Punch Time (duration)} xywh {155 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PPunchTime);} class WidgetPDial } Fl_Dial pstc { label {P.Stc.} callback {pars->GlobalPar.PPunchStretch=(int) o->value();} tooltip {Punch Stretch} xywh {185 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PPunchStretch);} class WidgetPDial } Fl_Dial pvel { label {P.Vel.} callback {pars->GlobalPar.PPunchVelocitySensing=(int) o->value();} tooltip {Punch Velocity Sensing} xywh {215 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->GlobalPar.PPunchVelocitySensing);} class WidgetPDial } Fl_Group ampenv { label {ADSynth Global - Amplitude Envelope} open xywh {10 75 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->GlobalPar.AmpEnvelope);} class EnvelopeUI } {} Fl_Group amplfo { label {Amplitude LFO } open xywh {10 150 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->GlobalPar.AmpLfo);} class LFOUI } {} Fl_Check_Button rndgrp { label {Rnd Grp} callback {pars->GlobalPar.Hrandgrouping=(int) o->value();} tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 235 40 25} down_box DOWN_BOX labelsize 10 align 148 code0 {o->value(pars->GlobalPar.Hrandgrouping);} } } Fl_Group {} { label FILTER open selected xywh {250 5 285 265} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Group filterenv { label {ADSynth Global - Filter Envelope} open xywh {255 118 275 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->GlobalPar.FilterEnvelope);} class EnvelopeUI } {} Fl_Group filterlfo { label {Filter LFO} open xywh {255 195 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->GlobalPar.FilterLfo);} class LFOUI } {} Fl_Group filterui { label {ADsynth Global - Filter} open xywh {255 35 275 75} box FLAT_BOX color 50 align 144 code0 {o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);} class FilterUI } {} } Fl_Check_Button stereo { label Stereo callback {pars->GlobalPar.PStereo=(int) o->value();} xywh {5 230 65 35} down_box DOWN_BOX labelsize 11 code0 {o->value(pars->GlobalPar.PStereo);} } Fl_Button {} { label {Show Voice List} callback {for (int i=0;irefreshlist(); } ADnoteVoiceList->show();} xywh {180 400 125 25} labelsize 12 } Fl_Button {} { label {Show Voice Parameters} callback {ADnoteVoice->show();} xywh {5 400 170 25} labelsize 12 } Fl_Button {} { label Close callback {ADnoteGlobalParameters->hide();} xywh {475 400 60 25} box THIN_UP_BOX } Fl_Button {} { label Resonance callback {resui->resonancewindow->redraw(); resui->resonancewindow->show();} tooltip Resonance xywh {309 400 86 25} box THIN_UP_BOX labelsize 12 } Fl_Button {} { label C callback {presetsui->copyArray(pars);} xywh {405 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->pasteArray(pars,this);} xywh {435 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Window ADnoteVoice { label {ADsynth Voice Parameters} open xywh {1142 229 765 630} type Double visible } { Fl_Group advoice {open xywh {0 0 765 595} code0 {o->init(pars,nvoice,master);} code1 {o->show();} class ADvoiceUI } {} Fl_Button {} { label {Close Window} callback {ADnoteVoice->hide();} xywh {305 601 195 25} box THIN_UP_BOX labelfont 1 } Fl_Counter currentvoicecounter { label {Current Voice} callback {nvoice=(int)o->value()-1; advoice->hide(); ADnoteVoice->remove(advoice); delete advoice; advoice=new ADvoiceUI(0,0,765,590); ADnoteVoice->add(advoice); advoice->init(pars,nvoice,master); advoice->show(); ADnoteVoice->redraw();} xywh {10 601 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 13 code0 {o->bounds(1,NUM_VOICES);} } Fl_Button {} { label C callback {presetsui->copy(pars,nvoice);} xywh {705 609 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this,nvoice);} xywh {735 609 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Window ADnoteVoiceList { label {ADsynth Voices list} xywh {32 266 650 260} type Double hide } { Fl_Text_Display {} { label {No.} xywh {10 15 30 10} box FLAT_BOX labelfont 1 labelsize 11 } Fl_Text_Display {} { label Vol xywh {145 15 30 10} box FLAT_BOX labelfont 1 labelsize 11 } Fl_Text_Display {} { label Detune xywh {384 15 25 10} box FLAT_BOX labelfont 1 labelsize 11 } Fl_Text_Display {} { label Pan xywh {210 15 30 10} box FLAT_BOX labelfont 1 labelsize 11 } Fl_Text_Display {} { label {Vib. Depth} xywh {560 15 30 10} box FLAT_BOX labelfont 1 labelsize 11 } Fl_Text_Display {} { label {R.} xywh {245 15 25 10} box FLAT_BOX labelfont 1 labelsize 11 } Fl_Button {} { label {Hide Voice List} callback {ADnoteVoiceList->hide();} xywh {255 237 125 20} } Fl_Scroll {} {open xywh {0 15 640 220} type VERTICAL box THIN_UP_BOX } { Fl_Pack {} {open xywh {0 20 620 210} code0 {for (int i=0;iinit(pars,i,master);}} } {} } } } Function {ADnoteUI(ADnoteParameters *parameters,Master *master_)} {} { code {pars=parameters; master=master_; nvoice=0; resui=new ResonanceUI(pars->GlobalPar.Reson); make_window();} {} } Function {~ADnoteUI()} {} { code {ADnoteVoiceList->hide(); ADnoteGlobalParameters->hide(); ADnoteVoice->hide(); delete(ADnoteVoiceList); delete(ADnoteGlobalParameters); delete(ADnoteVoice); delete(resui);} {} } Function {refresh()} {} { code {volume->value(pars->GlobalPar.PVolume); vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction); pan->value(pars->GlobalPar.PPanning); stereo->value(pars->GlobalPar.PStereo); rndgrp->value(pars->GlobalPar.Hrandgrouping); pstr->value(pars->GlobalPar.PPunchStrength); pt->value(pars->GlobalPar.PPunchTime); pstc->value(pars->GlobalPar.PPunchStretch); pvel->value(pars->GlobalPar.PPunchVelocitySensing); detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune)); freq->value(pars->GlobalPar.PDetune-8192); int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16; octave->value(k); detunetype->value(pars->GlobalPar.PDetuneType-1); k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024; coarsedet->value(k); amplfo->refresh(); freqlfo->refresh(); filterlfo->refresh(); ampenv->refresh(); freqenv->refresh(); filterenv->refresh(); filterui->refresh(); for (int i=0;irefreshlist(); resui->refresh(); currentvoicecounter->do_callback();} {} } decl {ADnoteParameters *pars;} {} decl {ResonanceUI *resui;} {} decl {Master *master;} {} decl {int nvoice;} {} decl {ADvoicelistitem *voicelistitem[NUM_VOICES];} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl000066400000000000000000000255331247673406200236320ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../Misc/Master.h"} {public } decl {\#include "../Misc/Part.h"} {public } decl {\#include "../Misc/Bank.h"} {public } decl {\#include "../Misc/Config.h"} {public } decl {\#include "../Misc/Util.h"} {public } class BankProcess_ {} { Function {process()} {open return_type {virtual void} } { code {;} {} } decl {Bank *bank;} {public } } class BankSlot {open : {public Fl_Button,BankProcess_} } { Function {BankSlot(int x,int y, int w, int h, const char *label=0):Fl_Button(x,y,w,h,label)} {open } { code {what=NULL; whatslot=NULL; nslot=0; nselected=NULL;} {selected } } Function {handle(int event)} {return_type int } { code {if (what==NULL) return(0); if (Fl::event_inside(this)){ *what=0;*whatslot=nslot; if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1; if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2; if (event==FL_PUSH) highlight=1; }else highlight=0; int tmp=Fl_Button::handle(event); if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)(); return(tmp);} {} } Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_)} {} { code {nslot=nslot_; what=what_; whatslot=whatslot_; fnc=fnc_; bp=bp_; bank=bank_; nselected=nselected_; box(FL_THIN_UP_BOX); labelfont(0); labelsize(13); align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); highlight=0; refresh();} {} } Function {refresh()} {} { code {if (bank->emptyslot(nslot)) color(46); else if (bank->isPADsynth_used(nslot)) color(124); else color(51); if (*nselected==nslot) color(6); copy_label(bank->getnamenumbered(nslot).c_str());} {} } decl {int *what,*whatslot,nslot,highlight, *nselected;} {} decl {void (BankProcess_:: *fnc)(void);} {} decl {BankProcess_ *bp;} {} } class BankUI {open : {public BankProcess_} } { Function {make_window()} {open } { Fl_Window bankuiwindow { label Bank xywh {492 406 785 575} type Double code0 {o->label(bank->bankfiletitle.c_str());} code1 {if (bank->bankfiletitle.empty()) o->label ("Choose a bank from the bank list on the left (or go to settings if to configure the bank location) or choose 'New Bank...' to make a new bank.");} visible } { Fl_Button {} { label Close callback {bankuiwindow->hide();} xywh {705 546 70 24} box THIN_UP_BOX } Fl_Group {} { xywh {5 34 772 491} box ENGRAVED_FRAME } { Fl_Pack {} { xywh {10 39 150 481} box BORDER_FRAME code0 {o->box(FL_FLAT_BOX);} code1 {for (int i=0;i<32;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};} } {} Fl_Pack {} { xywh {163 39 150 481} box BORDER_FRAME code0 {o->box(FL_FLAT_BOX);} code1 {for (int i=32;i<64;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};} } {} Fl_Pack {} { xywh {316 39 150 481} box BORDER_FRAME code0 {o->box(FL_FLAT_BOX);} code1 {for (int i=64;i<96;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};} } {} Fl_Pack {} { xywh {469 39 150 481} box BORDER_FRAME code0 {o->box(FL_FLAT_BOX);} code1 {for (int i=96;i<128;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};} } {} Fl_Pack {} { xywh {622 39 150 481} box BORDER_FRAME code0 {o->box(FL_FLAT_BOX);} code1 {for (int i=128;i<160;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};} } {} } Fl_Group modeselect { xywh {5 528 425 42} box ENGRAVED_BOX } { Fl_Check_Button writebutton { label WRITE callback {if (o->value()>0.5) mode=2; removeselection();} xywh {116 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {if (bank->locked()) o->deactivate();} } Fl_Check_Button readbutton { label READ selected callback {if (o->value()>0.5) mode=1; removeselection();} xywh {11 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {o->value(1);} } Fl_Check_Button clearbutton { label CLEAR callback {if (o->value()>0.5) mode=3; removeselection();} xywh {221 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {if (bank->locked()) o->deactivate();} } Fl_Check_Button swapbutton { label SWAP callback {if (o->value()>0.5) mode=4; removeselection();} xywh {325 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {if (bank->locked()) o->deactivate();} } } Fl_Button {} { label {New Bank...} callback {const char *dirname; dirname=fl_input("New empty Bank:"); if (dirname==NULL) return; int result=bank->newbank(dirname); if (result!=0) fl_alert("Error: Could not make a new bank (directory).."); refreshmainwindow();} xywh {685 5 93 25} labelfont 1 labelsize 11 align 128 } Fl_Check_Button {} { label {auto close} callback {config.cfg.BankUIAutoClose=(int) o->value();} tooltip {automatically close the bank window if the instrument is loaded} xywh {705 529 60 15} down_box DOWN_BOX labelsize 10 code0 {o->value(config.cfg.BankUIAutoClose);} } Fl_Choice banklist { callback {int n=o->value(); std::string dirname=bank->banks[n].dir; if (dirname.empty()) return; if (bank->loadbank(dirname)==2) fl_alert("Error: Could not load the bank from the directory\\n%s.",dirname.c_str()); for (int i=0;irefresh(); refreshmainwindow();} xywh {5 8 220 20} down_box BORDER_BOX labelfont 1 align 0 textfont 1 textsize 11 } {} Fl_Button {} { label {Refresh bank list} callback {rescan_for_banks(); banklist->value(0);} tooltip {Refresh the bank list (rescan)} xywh {230 8 105 20} box THIN_UP_BOX color 50 labelsize 11 } Fl_Check_Button {} { label {Show PADsynth status} callback {config.cfg.CheckPADsynth=(int) o->value(); refreshmainwindow();} xywh {435 530 150 15} down_box DOWN_BOX labelsize 11 code0 {o->value(config.cfg.CheckPADsynth);} } } } Function {BankUI(Master *master_,int *npart_)} {} { code {fnc=&BankProcess_::process; master=master_; npart=npart_; bank=&master_->bank; what=0; nselected=-1; make_window(); mode=1;} {} } Function {~BankUI()} {return_type virtual } { code {bankuiwindow->hide(); delete(bankuiwindow);} {} } Function {show()} {} { code {bankuiwindow->show(); simplesetmode(config.cfg.UserInterfaceMode==2);} {} } Function {hide()} {} { code {bankuiwindow->hide();} {} } Function {init(Fl_Valuator *cbwig_)} {} { code {cbwig=cbwig_; rescan_for_banks();} {} } Function {process()} {return_type void } { code {int slot=this->slot; if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot const char *tmp=fl_input("Slot (instrument) name:",bank->getname(slot).c_str()); if (tmp!=NULL) bank->setname(slot,tmp,-1); bs[slot]->refresh(); }; if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot pthread_mutex_lock(&master->part[*npart]->load_mutex); bank->loadfromslot(slot,master->part[*npart]); pthread_mutex_unlock(&master->part[*npart]->load_mutex); master->part[*npart]->applyparameters(); snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot).c_str()); cbwig->do_callback(); if (config.cfg.BankUIAutoClose!=0) bankuiwindow->hide(); }; if ((what==1)&&(mode==2)){//save(write) to slot if (!bank->emptyslot(slot)){ if (!fl_choice("Overwrite the slot no. %d ?","No","Yes",NULL,slot+1)) goto nooverwriteslot; }; pthread_mutex_lock(&master->part[*npart]->load_mutex); bank->savetoslot(slot,master->part[*npart]); pthread_mutex_unlock(&master->part[*npart]->load_mutex); bs[slot]->refresh(); mode=1;readbutton->value(1);writebutton->value(0); nooverwriteslot:; }; if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot if (fl_choice("Clear the slot no. %d ?","No","Yes",NULL,slot+1)){ bank->clearslot(slot); bs[slot]->refresh(); }; }; if (mode==4){//swap bool done=false; if ((what==1)&&(nselected>=0)){ bank->swapslot(nselected,slot); int ns=nselected; nselected=-1; bs[slot]->refresh(); bs[ns]->refresh(); done=true; }; if (((nselected<0)||(what==2))&&(!done)){ int ns=nselected; nselected=slot; if (ns>0) bs[ns]->refresh(); bs[slot]->refresh(); }; }; if (mode!=4) refreshmainwindow();} {} } Function {refreshmainwindow()} {} { code {bankuiwindow->label(bank->bankfiletitle.c_str()); mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0); nselected=-1; if (bank->locked()){ writebutton->deactivate(); clearbutton->deactivate(); swapbutton->deactivate(); } else { writebutton->activate(); clearbutton->activate(); swapbutton->activate(); }; for (int i=0;irefresh();} {} } Function {removeselection()} {} { code {if (nselected>=0) { int ns=nselected; nselected=-1; bs[ns]->refresh(); };} {} } Function {rescan_for_banks()} {} { code {banklist->clear(); bank->rescanforbanks(); for (unsigned int i=0;ibanks.size();i++) { banklist->add(bank->banks[i].name.c_str()); } if (banklist->size() == 0) banklist->add(" ");} {} } Function {simplesetmode(bool beginnerui)} {} { code {readbutton->value(1); mode=1; removeselection(); if (beginnerui) modeselect->hide(); else modeselect->show();} {} } decl {BankSlot *bs[BANK_SIZE];} {} decl {int slot,what;//"what"=what button is pressed} {} decl {int mode,*npart,nselected;} {} decl {Master *master;} {} decl {void (BankProcess_::* fnc)(void);} {} decl {Fl_Valuator *cbwig;} {public } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/CMakeLists.txt000066400000000000000000000017471247673406200247370ustar00rootroot00000000000000set(UI_fl_files ADnoteUI.fl BankUI.fl ConfigUI.fl EffUI.fl EnvelopeUI.fl FilterUI.fl LFOUI.fl MasterUI.fl MicrotonalUI.fl OscilGenUI.fl PADnoteUI.fl PartUI.fl PresetsUI.fl ResonanceUI.fl SUBnoteUI.fl VirKeyboard.fl ) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set_source_files_properties(UI/MasterUI.h PROPERTIES GENERATED 1) fltk_wrap_ui(zynaddsubfx_gui ${UI_fl_files}) add_definitions(-DPIXMAP_PATH="${CMAKE_INSTALL_PREFIX}/share/zynaddsubfx/pixmaps/") add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") if(LibloEnable) set(zynaddsubfx_gui_FLTK_UI_SRCS ${zynaddsubfx_gui_FLTK_UI_SRCS} NSM.C NSM/Client.C) endif() add_library(zynaddsubfx_gui STATIC ${UI_objs} ${zynaddsubfx_gui_FLTK_UI_SRCS} NioUI.cpp WidgetPDial.cpp ) if(NtkGui) target_link_libraries(zynaddsubfx_gui ${NTK_LIBRARIES}) endif(NtkGui) if(FltkGui) target_link_libraries(zynaddsubfx_gui ${FLTK_LIBRARIES}) endif(FltkGui) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl000066400000000000000000000313731247673406200241630ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0302 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {private local } decl {//License: GNU GPL version 2 or later} {private local } decl {\#include } {public local } decl {\#include } {public local } decl {\#include } {public local } decl {\#include } {public local } decl {\#include "../globals.h"} {public local } decl {\#include "../Misc/Util.h"} {public local } decl {\#include "../Misc/Dump.h"} {public local } decl {extern Dump dump;} {public local } class ConfigUI {} { Function {make_window()} {} { Fl_Window configwindow { label {ZynAddSubFX Settings} callback {writebankcfg(); o->hide();} xywh {554 443 510 370} type Double visible } { Fl_Tabs {} { xywh {5 5 500 330} } { Fl_Group {} { label {Main settings} xywh {5 25 500 310} } { Fl_Group {} { label {Sample Rate} xywh {15 45 165 30} box ENGRAVED_FRAME } { Fl_Choice {} { callback {if ((int)o->value()==0) samplerateinput->activate(); else samplerateinput->deactivate(); int samplerates[8]={44100,16000,22050,32000,44100,48000,88200,96000}; config.cfg.SampleRate=samplerates[(int)o->value()]; setsamplerateinput();} xywh {20 50 85 20} down_box BORDER_BOX textsize 10 code0 {o->value(getsamplerateorder());} } { MenuItem {} { label Custom xywh {10 10 100 20} labelfont 1 } MenuItem {} { label 16000Hz xywh {30 30 100 20} labelfont 1 } MenuItem {} { label 22050Hz xywh {20 20 100 20} labelfont 1 } MenuItem {} { label 32000Hz xywh {30 30 100 20} labelfont 1 } MenuItem {} { label 44100Hz xywh {40 40 100 20} labelfont 1 } MenuItem {} { label 48000Hz xywh {50 50 100 20} labelfont 1 } MenuItem {} { label 88200Hz xywh {60 60 100 20} labelfont 1 } MenuItem {} { label 96000Hz xywh {70 70 100 20} labelfont 1 } } Fl_Input samplerateinput { callback {char *tmp; config.cfg.SampleRate=strtoul(o->value(),&tmp,10);} xywh {115 50 60 20} type Int textfont 1 code0 {setsamplerateinput();} code1 {if (getsamplerateorder()!=0) o->deactivate();} } } Fl_Input {} { label {Buffer Size} callback {char *tmp; config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);} tooltip {Internal Sound Buffer Size (samples)} xywh {190 45 60 20} type Int labelsize 11 align 129 textfont 1 code0 {char *tmpbuf=new char[100];o->cut(0,o->maximum_size());} code1 {snprintf(tmpbuf,100,"%d",config.cfg.SoundBufferSize);o->insert(tmpbuf);} code2 {delete []tmpbuf;} } Fl_Check_Button {} { label {Swap Stereo } callback {config.cfg.SwapStereo=(int) o->value();} xywh {15 80 95 20} box NO_BOX labelsize 11 code0 {o->value(config.cfg.SwapStereo);} } Fl_Choice {} { label OscilSize callback {config.cfg.OscilSize=128<value();} tooltip {ADSynth Oscillator Size (samples)} xywh {175 80 75 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 10 code0 {o->value( (int) (log(config.cfg.OscilSize/128.0-1.0)/log(2)) +1);} } { MenuItem {} { label 128 xywh {25 25 100 20} labelfont 1 } MenuItem {} { label 256 xywh {35 35 100 20} labelfont 1 } MenuItem {} { label 512 xywh {45 45 100 20} labelfont 1 } MenuItem {} { label 1024 xywh {45 45 100 20} labelfont 1 } MenuItem {} { label 2048 xywh {55 55 100 20} labelfont 1 } MenuItem {} { label 4096 xywh {55 55 100 20} labelfont 1 } MenuItem {} { label 8192 xywh {65 65 100 20} labelfont 1 } MenuItem {} { label 16384 xywh {75 75 100 20} labelfont 1 } } Fl_Box {} { label {Most settings has effect only after ZynAddSubFX is restarted.} xywh {10 300 235 30} labelfont 1 labelsize 11 align 128 } Fl_Box {} { label {Read the Readme.txt for other settings} xywh {10 280 240 15} labelfont 1 labelsize 11 align 128 } Fl_Group {} { xywh {15 125 230 85} box ENGRAVED_BOX } { Fl_File_Input {} { label {Dump File} callback {config.cfg.DumpFile = o->value();} xywh {20 170 220 35} align 5 code0 {o->insert(config.cfg.DumpFile.c_str());} } Fl_Check_Button {} { label {Dump notes} callback {config.cfg.DumpNotesToFile=(int) o->value(); dump.startnow();//this has effect only if this option was disabled} xywh {20 130 110 20} down_box DOWN_BOX code0 {o->value(config.cfg.DumpNotesToFile);} } Fl_Check_Button {} { label Append callback {config.cfg.DumpAppend=(int) o->value();} xywh {160 130 80 20} down_box DOWN_BOX code0 {o->value(config.cfg.DumpAppend);} } } Fl_Counter {} { label {XML compression level} callback {config.cfg.GzipCompression=(int) o->value();} tooltip {gzip compression level (0 - uncompressed)} xywh {20 215 65 15} type Simple labelsize 11 align 8 minimum 0 maximum 9 step 1 code0 {o->value(config.cfg.GzipCompression);} } Fl_Choice {} { label {PADsynth Interpolation} callback {config.cfg.Interpolation=(int) o->value();} xywh {175 105 75 15} down_box BORDER_BOX labelsize 10 textsize 11 code0 {o->value(config.cfg.Interpolation);} } { MenuItem {} { label {Linear(fast)} xywh {0 0 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Cubic(slow)} xywh {10 10 100 20} labelfont 1 labelsize 10 } } Fl_Choice {} { label {Virtual Keyboard Layout} callback {config.cfg.VirKeybLayout=(int) o->value();;} xywh {155 235 85 20} down_box BORDER_BOX labelsize 12 textfont 1 textsize 11 code0 {o->value(config.cfg.VirKeybLayout);} } { MenuItem {} { label { } xywh {5 5 100 20} labelfont 1 labelsize 11 deactivate } MenuItem {} { label QWERTY xywh {15 15 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Dvorak xywh {25 25 100 20} labelfont 1 labelsize 11 } MenuItem {} { label QWERTZ xywh {35 35 100 20} labelfont 1 labelsize 11 } MenuItem {} { label AZERTY xywh {45 45 100 20} labelfont 1 labelsize 11 } } Fl_Check_Button {} { label {Ignore MIDI Program Change} callback {config.cfg.IgnoreProgramChange=(int) o->value();} xywh {10 255 220 20} down_box DOWN_BOX code0 {o->value(config.cfg.IgnoreProgramChange);} } } Fl_Group {} { label {Bank root dirs} xywh {5 25 500 285} hide } { Fl_Browser rootsbrowse { callback {activatebutton_rootdir(o->value()!=0);} xywh {15 35 485 220} type Hold } Fl_Button {} { label {Add root directory...} callback {const char *dirname; dirname=fl_dir_chooser("Add a root directory for banks:",NULL,0); if (dirname==NULL) return; rootsbrowse->add(dirname);} xywh {15 265 80 35} box THIN_UP_BOX align 128 } Fl_Button removerootdirbutton { label {Remove root dir...} callback {if (rootsbrowse->value()!=0) { rootsbrowse->remove(rootsbrowse->value()); }; activatebutton_rootdir(false);} xywh {105 265 80 35} box THIN_UP_BOX align 128 code0 {o->deactivate();} } Fl_Button makedefaultrootdirbutton { label {Make default} callback {int n=rootsbrowse->value(); if (n!=0) { rootsbrowse->move(1,n); rootsbrowse->value(1); rootsbrowse->redraw(); }; activatebutton_rootdir(true);} xywh {190 265 80 35} box THIN_UP_BOX align 128 code0 {o->deactivate();} } } Fl_Group {} { label {Presets dirs} xywh {5 25 500 285} hide } { Fl_Browser presetbrowse { callback {activatebutton_presetdir(o->value()!=0);} xywh {15 35 485 220} type Hold } Fl_Button {} { label {Add preset directory...} callback {const char *dirname; dirname=fl_dir_chooser("Add a preset directory :",NULL,0); if (dirname==NULL) return; presetbrowse->add(dirname);} xywh {15 265 80 35} box THIN_UP_BOX align 128 } Fl_Button removepresetbutton { label {Remove preset dir...} callback {if (presetbrowse->value()!=0) { presetbrowse->remove(presetbrowse->value()); }; activatebutton_presetdir(false);} xywh {105 265 80 35} box THIN_UP_BOX align 128 code0 {o->deactivate();} } Fl_Button makedefaultpresetbutton { label {Make default} callback {int n=presetbrowse->value(); if (n!=0) { presetbrowse->move(1,n); presetbrowse->value(1); presetbrowse->redraw(); }; activatebutton_presetdir(true);} xywh {190 265 80 35} box THIN_UP_BOX align 128 code0 {o->deactivate();} } } } Fl_Button {} { label Close callback {configwindow->hide(); writebankcfg(); writepresetcfg();} xywh {200 345 105 20} box THIN_UP_BOX } } } Function {ConfigUI()} {} { code {make_window(); readbankcfg(); readpresetcfg();} {} } Function {activatebutton_rootdir(bool active)} {} { code {if (active) { removerootdirbutton->activate(); makedefaultrootdirbutton->activate(); }else{ removerootdirbutton->deactivate(); makedefaultrootdirbutton->deactivate(); };} {} } Function {activatebutton_presetdir(bool active)} {} { code {if (active) { removepresetbutton->activate(); makedefaultpresetbutton->activate(); }else{ removepresetbutton->deactivate(); makedefaultpresetbutton->deactivate(); };} {} } Function {readbankcfg()} {} { code {rootsbrowse->clear(); for (int i=0;iadd(config.cfg.bankRootDirList[i].c_str()); };} {} } Function {writebankcfg()} {} { code {config.clearbankrootdirlist(); for (int n=0;nsize();n++){ config.cfg.bankRootDirList[n] = rootsbrowse->text(n+1); };} {} } Function {readpresetcfg()} {} { code {presetbrowse->clear(); for(int i=0;iadd(config.cfg.presetsDirList[i].c_str()); };} {} } Function {writepresetcfg()} {} { code {config.clearpresetsdirlist(); for (int n=0;nsize();n++) config.cfg.presetsDirList[n] = presetbrowse->text(n+1);} {} } Function {getsamplerateorder()} {return_type int } { code {int smpr=config.cfg.SampleRate; int order=0; switch(smpr){ case 16000:order=1;break; case 22050:order=2;break; case 32000:order=3;break; case 44100:order=4;break; case 48000:order=5;break; case 88200:order=6;break; case 96000:order=7;break; default:order=0;break; }; return(order);} {} } Function {setsamplerateinput()} {return_type void } { code {char *tmpbuf=new char[100]; samplerateinput->cut(0,samplerateinput->maximum_size()); snprintf(tmpbuf,100,"%d",config.cfg.SampleRate); samplerateinput->insert(tmpbuf); delete []tmpbuf;} {} } Function {show()} {} { code {configwindow->show();} {} } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/EffUI.fl000066400000000000000000002237311247673406200234570ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../globals.h"} {public } decl {\#include "WidgetPDial.h"} {public } decl {\#include "EnvelopeUI.h"} {public } decl {\#include "FilterUI.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "../Effects/EffectMgr.h"} {public } decl {\#include "PresetsUI.h"} {public } decl {\#include "common.H"} {public } class EQGraph {: {public Fl_Box} } { Function {EQGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {eff=NULL; maxdB=30;} {} } Function {init(EffectMgr *eff_)} {} { code {eff=eff_; oldx=-1; khzval=-1;} {} } Function {draw_freq_line(float freq,int type)} {} { code {fl_color(FL_GRAY); float freqx=getfreqpos(freq); switch(type){ case 0:if (active_r()) fl_color(FL_WHITE); else fl_color(205,205,205); fl_line_style(FL_SOLID); break; case 1:fl_line_style(FL_DOT);break; case 2:fl_line_style(FL_DASH);break; }; if ((freqx>0.0)&&(freqx<1.0)) fl_line(x()+(int) (freqx*w()),y(), x()+(int) (freqx*w()),y()+h());} {} } Function {draw()} {} { code {int ox=x(),oy=y(),lx=w(),ly=h(),i; double iy,oiy; float freqx; if (active_r()) fl_color(fl_darker(FL_GRAY)); else fl_color(FL_GRAY); fl_rectf(ox,oy,lx,ly); //draw the lines fl_color(fl_lighter( FL_GRAY)); fl_line_style(FL_SOLID); fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2); freqx=getfreqpos(1000.0); if ((freqx>0.0)&&(freqx<1.0)) fl_line(ox+(int) (freqx*lx),oy, ox+(int) (freqx*lx),oy+ly); for (i=1;i<10;i++){ if(i==1){ draw_freq_line(i*100.0,0); draw_freq_line(i*1000.0,0); }else if (i==5){ draw_freq_line(i*10.0,2); draw_freq_line(i*100.0,2); draw_freq_line(i*1000.0,2); }else{ draw_freq_line(i*10.0,1); draw_freq_line(i*100.0,1); draw_freq_line(i*1000.0,1); }; }; draw_freq_line(10000.0,0); draw_freq_line(20000.0,1); fl_line_style(FL_DOT); int GY=6;if (lysynth->samplerate/2) break; iy=getresponse(ly,frq); if ((oiy>=0) && (oiy=0) && (iygetEQfreqresponse(freq); int idbresp=(int) ((dbresp/maxdB+1.0)*maxy/2.0); //fprintf(stderr,"%.5f\\n",(dbresp/maxdB+1.0)*maxy/2.0); return(idbresp);} {} } Function {getfreqx(float x)} {return_type float } { code {if (x>1.0) x=1.0; return(20.0*pow((float)1000.0,x));} {} } Function {getfreqpos(float freq)} {return_type float } { code {if (freq<0.00001) freq=0.00001; return(log(freq/20.0)/log(1000.0));} {} } decl {int oldx;} {} decl {float khzval;} {public } decl {EffectMgr *eff;} {} decl {int maxdB;} {} } class EffUI {open : {public Fl_Group,public PresetsUI_} } { Function {EffUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {eff=NULL; filterwindow=NULL;} {} } Function {~EffUI()} {} { code {effnullwindow->hide();//delete (effnullwindow); effreverbwindow->hide();//delete (effreverbwindow); effechowindow->hide();//delete (effechowindow); effchoruswindow->hide();//delete (effchoruswindow); effphaserwindow->hide();//delete (effphaserwindow); effalienwahwindow->hide();//delete (effalienwahwindow); effdistorsionwindow->hide();//delete (effdistorsionwindow); effeqwindow->hide();//delete (effeqwindow); effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow); if (filterwindow!=NULL){ filterwindow->hide(); delete(filterwindow); };} {} } Function {make_null_window()} {open } { Fl_Window effnullwindow { label {No Effect} xywh {612 881 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 16 code0 {set_module_parameters(o);} class Fl_Group visible } {} } Function {make_reverb_window()} {open } { Fl_Window effreverbwindow { label Reverb open xywh {377 636 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice revp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Cathedral 1} xywh {10 10 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Cathedral 2} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Cathedral 3} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Hall 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Hall 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Room 1} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Room 2} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Basement xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Tunnel xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echoed 1} xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echoed 2} xywh {110 110 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Very Long 1} xywh {120 120 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Very Long 2} xywh {130 130 100 20} labelfont 1 labelsize 10 } } Fl_Choice revp10 { label Type callback {eff->seteffectpar(10,(int) o->value()); if (eff->geteffectpar(10)==2) revp12->activate(); else revp12->deactivate();} xywh {110 15 85 15} down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label Random xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Freeverb xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Bandwidth xywh {40 40 100 20} labelfont 1 labelsize 10 } } Fl_Dial revp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp2 { label Time callback {eff->seteffectpar(2,(int) o->value());} tooltip {Duration of Effect} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp3 { label {I.del} callback {eff->seteffectpar(3,(int) o->value());} tooltip {Initial Delay} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial revp4 { label {I.delfb} callback {eff->seteffectpar(4,(int) o->value());} tooltip {Initial Delay Feedback} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp12 { label bw callback {eff->seteffectpar(12,(int) o->value());} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 deactivate code0 {if (eff->geteffectpar(10)==2) o->activate();} class WidgetPDial } Fl_Dial revp6 { label {E/R} callback {eff->seteffectpar(6,(int) o->value());} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 deactivate class WidgetPDial } Fl_Dial revp7 { label LPF callback {eff->seteffectpar(7,(int) o->value());} tooltip {Low Pass Filter} xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp8 { label HPF callback {eff->seteffectpar(8,(int) o->value());} tooltip {High Pass Filter} xywh {305 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp9 { label Damp callback {eff->seteffectpar(9,(int) o->value());} tooltip Dampening xywh {340 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 minimum 64 maximum 127 step 1 class WidgetPDial } Fl_Dial revp11 { label {R.S.} callback {int x=64; if (Fl::event_button1()) x=(int)o->value(); else o->value(x); eff->seteffectpar(11,x);} tooltip RoomSize xywh {200 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 8 align 8 minimum 1 maximum 127 step 1 class WidgetPDial } } } Function {make_echo_window()} {open } { Fl_Window effechowindow { label Echo xywh {897 611 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice echop { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Echo 1} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echo 2} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echo 3} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Simple Echo} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Canyon xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Panning Echo 1} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Panning Echo 2} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Panning Echo 3} xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Feedback Echo} xywh {100 100 100 20} labelfont 1 labelsize 10 } } Fl_Dial echop0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial echop1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial echop2 { label Delay callback {eff->seteffectpar(2,(int) o->value());} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial echop3 { label {LRdl.} callback {eff->seteffectpar(3,(int) o->value());} tooltip {Delay Between L/R} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial echop4 { label {LRc.} callback {eff->seteffectpar(4,(int) o->value());} tooltip {L/R Crossover} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial echop5 { label {Fb.} callback {eff->seteffectpar(5,(int) o->value());} tooltip Feedback xywh {195 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial echop6 { label Damp callback {eff->seteffectpar(6,(int) o->value());} tooltip Dampening xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } } } Function {make_chorus_window()} {open } { Fl_Window effchoruswindow { label Chorus open xywh {467 742 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice chorusp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Chorus 1} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Chorus 2} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Chorus 3} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Celeste 1} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Celeste 2} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 1} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 2} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 3} xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 4} xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 5} xywh {110 110 100 20} labelfont 1 labelsize 10 } } Fl_Dial chorusp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp3 { label Rnd callback {eff->seteffectpar(3,(int) o->value());} tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial chorusp5 { label {St.df} callback {eff->seteffectpar(5,(int) o->value());} tooltip {L/R Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp6 { label Dpth callback {eff->seteffectpar(6,(int) o->value());} tooltip {LFO Depth} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp7 { label Delay callback {eff->seteffectpar(7,(int) o->value());} xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp8 { label Fb callback {eff->seteffectpar(8,(int) o->value());} tooltip Feedback xywh {305 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp9 { label {L/R} callback {eff->seteffectpar(9,(int) o->value());} tooltip {Channel Routing} xywh {340 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Check_Button {} { label Flange callback {eff->seteffectpar(10,(int) o->value());} xywh {120 10 55 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10 hide deactivate code0 {o->value(eff->geteffectpar(10));} } Fl_Check_Button chorusp11 { label Substract callback {eff->seteffectpar(11,(int) o->value());} tooltip {inverts the output} xywh {185 10 70 20} box THIN_UP_BOX down_box DOWN_BOX color 51 labelsize 10 } Fl_Choice chorusp4 { label {LFO type} callback {eff->seteffectpar(4,(int) o->value());} tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8 } { MenuItem {} { label SINE xywh {15 15 100 20} labelfont 1 labelsize 10 } MenuItem {} { label TRI xywh {25 25 100 20} labelfont 1 labelsize 10 } } } } Function {make_phaser_window()} {open } { Fl_Window effphaserwindow { label Phaser open xywh {101 232 380 95} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice phaserp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 100 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Phaser 1} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 2} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 3} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 4} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 5} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 6} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {APhaser 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {APhaser 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {APhaser 3} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {APhaser 4} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {APhaser 5} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {APhaser 6} xywh {90 90 100 20} labelfont 1 labelsize 10 } } Fl_Dial phaserp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO frequency} xywh {85 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp3 { label Rnd callback {eff->seteffectpar(3,(int) o->value());} tooltip {LFO randomness} xywh {120 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Choice phaserp4 { label LFO callback {eff->seteffectpar(4,(int) o->value());} tooltip {LFO function} xywh {245 55 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8 } { MenuItem {} { label SIN xywh {15 15 100 20} labelfont 1 labelsize 10 } MenuItem {} { label TRI xywh {25 25 100 20} labelfont 1 labelsize 10 } } Fl_Dial phaserp5 { label {St.df} callback {eff->seteffectpar(5,(int) o->value());} tooltip {Left/Right Channel Phase Shift} xywh {155 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp6 { label Dpth callback {eff->seteffectpar(6,(int) o->value());} tooltip {LFO Depth} xywh {120 5 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 maximum 127 class WidgetPDial } Fl_Dial phaserp7 { label Fb callback {eff->seteffectpar(7,(int) o->value());} tooltip Feedback xywh {185 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Counter phaserp8 { label Stages callback {eff->seteffectpar(8,(int) o->value());} xywh {290 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1 code0 {o->range(1,MAX_PHASER_STAGES);} } Fl_Dial phaserp9 { label {L/R} callback {eff->seteffectpar(9,(int) o->value());} tooltip {Channel Routing} xywh {215 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Check_Button phaserp10 { label Substract callback {eff->seteffectpar(10,(int) o->value());} selected tooltip {inverts output} xywh {200 10 74 20} box THIN_UP_BOX down_box DOWN_BOX color 51 labelfont 1 labelsize 10 } Fl_Dial phaserp11 { label Phase callback {eff->seteffectpar(11,(int) o->value());} xywh {155 5 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 maximum 127 class WidgetPDial } Fl_Check_Button phaserp12 { label {hyp.} callback {eff->seteffectpar(12,(int) o->value());} tooltip hyper xywh {245 35 55 15} down_box DOWN_BOX } Fl_Dial phaserp13 { label dist callback {eff->seteffectpar(13,(int) o->value());} tooltip Distortion xywh {340 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Check_Button phaserp14 { label Analog callback {eff->seteffectpar(14,(int) o->value());} xywh {305 35 70 15} down_box DOWN_BOX } } } Function {make_alienwah_window()} {open } { Fl_Window effalienwahwindow { label AlienWah xywh {253 353 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice awp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Alienwah 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Alienwah 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Alienwah 3} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Alienwah 4} xywh {70 70 100 20} labelfont 1 labelsize 10 } } Fl_Dial awp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp3 { label Rnd callback {eff->seteffectpar(3,(int) o->value());} tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial awp5 { label {St.df} callback {eff->seteffectpar(5,(int) o->value());} tooltip {Left/Right Channel Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp6 { label Dpth callback {eff->seteffectpar(6,(int) o->value());} tooltip Depth xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp7 { label Fb callback {eff->seteffectpar(7,(int) o->value());} tooltip Feedback xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp9 { label {L/R} callback {eff->seteffectpar(9,(int) o->value());} xywh {345 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Choice awp4 { label {LFO type} callback {eff->seteffectpar(4,(int) o->value());} tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8 } { MenuItem {} { label SINE xywh {15 15 100 20} labelfont 1 labelsize 10 } MenuItem {} { label TRI xywh {25 25 100 20} labelfont 1 labelsize 10 } } Fl_Dial awp10 { label Phase callback {eff->seteffectpar(10,(int) o->value());} xywh {160 5 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Counter awp8 { label Delay callback {eff->seteffectpar(8,(int) o->value());} xywh {305 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1 code0 {o->range(1,MAX_ALIENWAH_DELAY);} } } } Function {make_distorsion_window()} {open } { Fl_Window effdistorsionwindow { label Distortion open xywh {544 217 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice distp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Overdrive 1} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Overdrive 2} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {A. Exciter 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {A. Exciter 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Guitar Amp} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Quantisize xywh {60 60 100 20} labelfont 1 labelsize 10 } } Fl_Dial distp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial distp1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial distp2 { label {LRc.} callback {eff->seteffectpar(2,(int) o->value());} tooltip {L/R Mix} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial distp3 { label Drive callback {eff->seteffectpar(3,(int) o->value());} tooltip {Input Amplification} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial distp4 { label Level callback {eff->seteffectpar(4,(int) o->value());} tooltip {Output Amplification} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial distp7 { label LPF callback {eff->seteffectpar(7,(int) o->value());} tooltip {Low Pass Filter} xywh {285 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial distp8 { label HPF callback {eff->seteffectpar(8,(int) o->value());} tooltip {High Pass Filter} xywh {320 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Choice distp5 { label Type callback {eff->seteffectpar(5,(int) o->value());} xywh {190 50 60 20} box UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 align 2 textsize 10 } { MenuItem {} { label Atan xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Asym1 xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sine xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Qnts xywh {95 95 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Zigzg xywh {105 105 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lmt xywh {115 115 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LmtU xywh {125 125 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LmtL xywh {135 135 100 20} labelfont 1 labelsize 10 } MenuItem {} { label ILmt xywh {147 147 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Clip xywh {157 157 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Asym2 xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow2 xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sgm xywh {95 95 100 20} labelfont 1 labelsize 10 } } Fl_Check_Button distp6 { label {Neg.} callback {eff->seteffectpar(6,(int) o->value());} xywh {260 55 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2 } Fl_Check_Button distp9 { label {St.} callback {eff->seteffectpar(9,(int) o->value());} tooltip Stereo xywh {355 60 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2 } Fl_Check_Button distp10 { label PF callback {eff->seteffectpar(10,(int) o->value());} tooltip {Applies the filters(before or after) the distorsion} xywh {355 44 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 1 } } } Function {make_eq_window()} {open } { Fl_Window effeqwindow { label EQ open xywh {682 881 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Dial eqp0 { label Gain callback {eff->seteffectpar(0,(int) o->value()); eqgraph->redraw();} xywh {10 35 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Counter bandcounter { label {B.} callback {eqband=(int) o->value(); int npb=eqband*5+10; int type=eff->geteffectpar(npb); typechoice->value(type); if (type>6) gaindial->activate(); else gaindial->deactivate(); if (type==0) bandgroup->deactivate(); else bandgroup->activate(); int freq=eff->geteffectpar(npb+1); freqdial->value(freq); int gain=eff->geteffectpar(npb+2); gaindial->value(gain); int q=eff->geteffectpar(npb+3); qdial->value(q); int dbl=eff->geteffectpar(npb+4); stagescounter->value(dbl);} tooltip {Band no.} xywh {240 20 45 15} type Simple labelfont 1 labelsize 11 align 1 minimum 0 maximum 1 step 1 textfont 1 textsize 11 code0 {o->bounds(0,MAX_EQ_BANDS-1);} } Fl_Group bandgroup { xywh {245 40 130 50} box ENGRAVED_FRAME code0 {if (eff->geteffectpar(10)==0) o->deactivate();} } { Fl_Dial freqdial { label Freq callback {int np=eqband*5+11; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} xywh {250 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 class WidgetPDial } Fl_Dial gaindial { label Gain callback {int np=eqband*5+12; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} xywh {280 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 step 1 class WidgetPDial } Fl_Dial qdial { label Q callback {int np=eqband*5+13; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} tooltip {Resonance/Bandwidth} xywh {310 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 class WidgetPDial } Fl_Counter stagescounter { label {St.} callback {int np=eqband*5+14; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} tooltip {Additional filter stages} xywh {340 60 30 15} type Simple labelfont 1 labelsize 10 minimum 1 maximum 127 step 1 textfont 1 textsize 11 code0 {o->bounds(0,MAX_FILTER_STAGES-1);} } } Fl_Choice typechoice { label {T.} callback {int np=eqband*5+10; eff->seteffectpar(np,(int) o->value()); bandcounter->do_callback(); eqgraph->redraw();} tooltip Type xywh {290 20 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 when 6 textsize 10 } { MenuItem {} { label OFF xywh {0 0 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lp1 xywh {10 10 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Hp1 xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lp2 xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Hp2 xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Bp2 xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label N2 xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pk xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LSh xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HSh xywh {80 80 100 20} labelfont 1 labelsize 10 } } Fl_Box eqgraph { xywh {45 10 190 75} box BORDER_BOX color 50 code0 {o->init(eff);} class EQGraph } } } Function {make_dynamicfilter_window()} {open } { Fl_Window effdynamicfilterwindow { label DynFilter open xywh {819 290 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25 code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice dfp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label WahWah xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AutoWah xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sweep xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label VocalMorph1 xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label VocalMorph2 xywh {60 60 100 20} labelfont 1 labelsize 10 } } Fl_Dial dfp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp1 { label Pan callback {eff->seteffectpar(1,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp3 { label Rnd callback {eff->seteffectpar(3,(int) o->value());} tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial dfp5 { label {St.df} callback {eff->seteffectpar(5,(int) o->value());} tooltip {Left/Right Channel Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp6 { label LfoD callback {eff->seteffectpar(6,(int) o->value());} tooltip {LFO Depth} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Choice dfp4 { label {LFO type} callback {eff->seteffectpar(4,(int) o->value());} tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8 } { MenuItem {} { label SINE xywh {15 15 100 20} labelfont 1 labelsize 10 } MenuItem {} { label TRI xywh {25 25 100 20} labelfont 1 labelsize 10 } } Fl_Button {} { label Filter callback {filterwindow->show();} xywh {115 10 55 25} box THIN_UP_BOX } Fl_Group {} { xywh {270 40 105 45} box UP_FRAME color 51 } { Fl_Dial dfp7 { label {A.S.} callback {eff->seteffectpar(7,(int) o->value());} tooltip {Filter vs Amplitude} xywh {275 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp9 { label {A.M} callback {eff->seteffectpar(9,(int) o->value());} tooltip {rate that amplitude changes the filter} xywh {305 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Check_Button dfp8 { label {A.Inv.} callback {eff->seteffectpar(8,(int) o->value());} tooltip {enable for filter frequency to lower with higher input amplitude} xywh {345 55 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2 } } } } Function {make_filter_window()} {open } { Fl_Window filterwindow { label {Filter Parameters for DynFilter Eff.} xywh {801 474 290 110} type Double code0 {set_module_parameters(o);} visible } { Fl_Group {} { label {DynFilter effect - Filter} xywh {5 5 275 75} box FLAT_BOX color 50 align 144 code0 {o->init(eff->filterpars,NULL,NULL);} code1 {o->use_for_dynamic_filter();} class FilterUI } {} Fl_Button {} { label Close callback {filterwindow->hide();} xywh {105 85 70 20} box THIN_UP_BOX } } } Function {init(EffectMgr *eff_)} {} { code {eff=eff_; make_null_window(); make_reverb_window(); make_echo_window(); make_chorus_window(); make_phaser_window(); make_alienwah_window(); make_distorsion_window(); make_eq_window(); make_dynamicfilter_window(); int px=this->parent()->x(); int py=this->parent()->y(); effnullwindow->position(px,py); effreverbwindow->position(px,py); effechowindow->position(px,py); effchoruswindow->position(px,py); effphaserwindow->position(px,py); effalienwahwindow->position(px,py); effdistorsionwindow->position(px,py); effeqwindow->position(px,py); effdynamicfilterwindow->position(px,py); refresh(eff);} {} } Function {refresh(EffectMgr *eff_)} {open } { code {eff=eff_; this->hide(); effnullwindow->hide(); effreverbwindow->hide(); effechowindow->hide(); effchoruswindow->hide(); effphaserwindow->hide(); effalienwahwindow->hide(); effdistorsionwindow->hide(); effeqwindow->hide(); effdynamicfilterwindow->hide(); eqband=0; if (filterwindow!=NULL){ filterwindow->hide(); delete(filterwindow); filterwindow=NULL; }; switch(eff->geteffect()){ case 1: revp->value(eff->getpreset()); revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W"); revp1->value(eff->geteffectpar(1)); revp2->value(eff->geteffectpar(2)); revp3->value(eff->geteffectpar(3)); revp4->value(eff->geteffectpar(4)); //revp5->value(eff->geteffectpar(5)); revp6->value(eff->geteffectpar(6)); revp7->value(eff->geteffectpar(7)); revp8->value(eff->geteffectpar(8)); revp9->value(eff->geteffectpar(9)); revp10->value(eff->geteffectpar(10)); revp11->value(eff->geteffectpar(11)); revp12->value(eff->geteffectpar(12)); effreverbwindow->show(); break; case 2: echop->value(eff->getpreset()); echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W"); echop1->value(eff->geteffectpar(1)); echop2->value(eff->geteffectpar(2)); echop3->value(eff->geteffectpar(3)); echop4->value(eff->geteffectpar(4)); echop5->value(eff->geteffectpar(5)); echop6->value(eff->geteffectpar(6)); effechowindow->show(); break; case 3: chorusp->value(eff->getpreset()); chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W"); chorusp1->value(eff->geteffectpar(1)); chorusp2->value(eff->geteffectpar(2)); chorusp3->value(eff->geteffectpar(3)); chorusp4->value(eff->geteffectpar(4)); chorusp5->value(eff->geteffectpar(5)); chorusp6->value(eff->geteffectpar(6)); chorusp7->value(eff->geteffectpar(7)); chorusp8->value(eff->geteffectpar(8)); chorusp9->value(eff->geteffectpar(9)); chorusp11->value(eff->geteffectpar(11)); effchoruswindow->show(); break; case 4: phaserp->value(eff->getpreset()); phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W"); phaserp1->value(eff->geteffectpar(1)); phaserp2->value(eff->geteffectpar(2)); phaserp3->value(eff->geteffectpar(3)); phaserp4->value(eff->geteffectpar(4)); phaserp5->value(eff->geteffectpar(5)); phaserp6->value(eff->geteffectpar(6)); phaserp7->value(eff->geteffectpar(7)); phaserp8->value(eff->geteffectpar(8)); phaserp9->value(eff->geteffectpar(9)); phaserp10->value(eff->geteffectpar(10)); phaserp11->value(eff->geteffectpar(11)); phaserp12->value(eff->geteffectpar(12)); phaserp13->value(eff->geteffectpar(13)); phaserp14->value(eff->geteffectpar(14)); effphaserwindow->show(); break; case 5: awp->value(eff->getpreset()); awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W"); awp1->value(eff->geteffectpar(1)); awp2->value(eff->geteffectpar(2)); awp3->value(eff->geteffectpar(3)); awp4->value(eff->geteffectpar(4)); awp5->value(eff->geteffectpar(5)); awp6->value(eff->geteffectpar(6)); awp7->value(eff->geteffectpar(7)); awp8->value(eff->geteffectpar(8)); awp9->value(eff->geteffectpar(9)); awp10->value(eff->geteffectpar(10)); effalienwahwindow->show(); break; case 6: distp->value(eff->getpreset()); distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W"); distp1->value(eff->geteffectpar(1)); distp2->value(eff->geteffectpar(2)); distp3->value(eff->geteffectpar(3)); distp4->value(eff->geteffectpar(4)); distp5->value(eff->geteffectpar(5)); distp6->value(eff->geteffectpar(6)); distp7->value(eff->geteffectpar(7)); distp8->value(eff->geteffectpar(8)); distp9->value(eff->geteffectpar(9)); distp10->value(eff->geteffectpar(10)); effdistorsionwindow->show(); break; case 7:eqband=0; eqp0->value(eff->geteffectpar(0)); bandcounter->value(eqband); bandcounter->do_callback(); typechoice->value(eff->geteffectpar(10)); eqgraph->redraw(); freqdial->value(eff->geteffectpar(11)); gaindial->value(eff->geteffectpar(12)); if (eff->geteffectpar(10)<6) gaindial->deactivate(); qdial->value(eff->geteffectpar(13)); stagescounter->value(eff->geteffectpar(14)); eqgraph->init(eff); effeqwindow->show(); break; case 8:make_filter_window(); dfp->value(eff->getpreset()); dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W"); dfp1->value(eff->geteffectpar(1)); dfp2->value(eff->geteffectpar(2)); dfp3->value(eff->geteffectpar(3)); dfp4->value(eff->geteffectpar(4)); dfp5->value(eff->geteffectpar(5)); dfp6->value(eff->geteffectpar(6)); dfp7->value(eff->geteffectpar(7)); dfp8->value(eff->geteffectpar(8)); dfp9->value(eff->geteffectpar(9)); effdynamicfilterwindow->show(); break; default:effnullwindow->show(); break; }; this->show();} {} } Function {refresh()} {open } { code {refresh(eff);} {} } decl {EffectMgr *eff;} {} decl {int eqband;} {} } class SimpleEffUI {open : {public Fl_Group,public PresetsUI_} } { Function {SimpleEffUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {eff=NULL;} {} } Function {~SimpleEffUI()} {} { code {effnullwindow->hide();//delete (effnullwindow); effreverbwindow->hide();//delete (effreverbwindow); effechowindow->hide();//delete (effechowindow); effchoruswindow->hide();//delete (effchoruswindow); effphaserwindow->hide();//delete (effphaserwindow); effalienwahwindow->hide();//delete (effalienwahwindow); effdistorsionwindow->hide();//delete (effdistorsionwindow); effeqwindow->hide();//delete (effeqwindow); effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);} {} } Function {make_null_window()} {open } { Fl_Window effnullwindow { label {No Effect} open xywh {1047 755 230 95} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 16 code0 {set_module_parameters(o);} class Fl_Group visible } {} } Function {make_reverb_window()} {open } { Fl_Window effreverbwindow { label Reverb open xywh {1047 463 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice revp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Cathedral 1} xywh {10 10 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Cathedral 2} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Cathedral 3} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Hall 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Hall 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Room 1} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Room 2} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Basement xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Tunnel xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echoed 1} xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echoed 2} xywh {110 110 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Very Long 1} xywh {120 120 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Very Long 2} xywh {130 130 100 20} labelfont 1 labelsize 10 } } Fl_Dial revp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp2 { label Time callback {eff->seteffectpar(2,(int) o->value());} tooltip {Duration of Reverb} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial revp3 { label {I.del} callback {eff->seteffectpar(3,(int) o->value());} tooltip {Initial Delay} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial revp9 { label Damp callback {eff->seteffectpar(9,(int) o->value());} tooltip Dampening xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 minimum 64 maximum 127 step 1 class WidgetPDial } } } Function {make_echo_window()} {open } { Fl_Window effechowindow { label Echo open xywh {428 823 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice echop { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Echo 1} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echo 2} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Echo 3} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Simple Echo} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Canyon xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Panning Echo 1} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Panning Echo 2} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Panning Echo 3} xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Feedback Echo} xywh {100 100 100 20} labelfont 1 labelsize 10 } } Fl_Dial echop0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial echop2 { label Delay callback {eff->seteffectpar(2,(int) o->value());} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial echop5 { label {Fb.} callback {eff->seteffectpar(5,(int) o->value());} tooltip Feedback xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } } } Function {make_chorus_window()} {open } { Fl_Window effchoruswindow { label Chorus open xywh {719 588 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice chorusp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Chorus 1} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Chorus 2} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Chorus 3} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Celeste 1} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Celeste 2} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 1} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 2} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 3} xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 4} xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Flange 5} xywh {110 110 100 20} labelfont 1 labelsize 10 } } Fl_Dial chorusp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO Frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp6 { label Dpth callback {eff->seteffectpar(6,(int) o->value());} tooltip Depth xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp7 { label Delay callback {eff->seteffectpar(7,(int) o->value());} xywh {115 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial chorusp8 { label Fb callback {eff->seteffectpar(8,(int) o->value());} tooltip Feedback xywh {150 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Check_Button {} { label Flange callback {eff->seteffectpar(10,(int) o->value());} xywh {120 10 55 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10 hide deactivate code0 {o->value(eff->geteffectpar(10));} } } } Function {make_phaser_window()} {open } { Fl_Window effphaserwindow { label Phaser open xywh {1047 831 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice phaserp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 0 labelfont 1 labelsize 10 labelcolor 55 align 5 textfont 1 textsize 10 textcolor 7 } { MenuItem {} { label {Phaser 1} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 2} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 3} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 4} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 5} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Phaser 6} xywh {80 80 100 20} labelfont 1 labelsize 10 } } Fl_Dial phaserp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp5 { label {St.df} callback {eff->seteffectpar(5,(int) o->value());} tooltip {Left/Right Channel Phase Shift} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp6 { label Dpth callback {eff->seteffectpar(6,(int) o->value());} tooltip Depth xywh {115 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial phaserp7 { label Fb callback {eff->seteffectpar(7,(int) o->value());} tooltip Feedback xywh {150 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Counter phaserp8 { label Stages callback {eff->seteffectpar(8,(int) o->value());} xywh {185 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1 code0 {o->range(1,MAX_PHASER_STAGES);} } } } Function {make_alienwah_window()} {open } { Fl_Window effalienwahwindow { label AlienWah open xywh {403 480 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice awp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Alienwah 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Alienwah 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Alienwah 3} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Alienwah 4} xywh {70 70 100 20} labelfont 1 labelsize 10 } } Fl_Dial awp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial awp6 { label Dpth callback {eff->seteffectpar(6,(int) o->value());} tooltip Depth xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Counter awp8 { label Delay callback {eff->seteffectpar(8,(int) o->value());} xywh {125 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1 code0 {o->range(1,MAX_ALIENWAH_DELAY);} } } } Function {make_distorsion_window()} {open } { Fl_Window effdistorsionwindow { label Distortion open xywh {353 881 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice distp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label {Overdrive 1} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Overdrive 2} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {A. Exciter 1} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {A. Exciter 2} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Guitar Amp} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Quantisize xywh {60 60 100 20} labelfont 1 labelsize 10 } } Fl_Dial distp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial distp3 { label Drive callback {eff->seteffectpar(3,(int) o->value());} tooltip {Input amplification} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 class WidgetPDial } Fl_Dial distp4 { label Level callback {eff->seteffectpar(4,(int) o->value());} tooltip {Output Amplification} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial distp7 { label LPF callback {eff->seteffectpar(7,(int) o->value());} tooltip {Low Pass Filter} xywh {190 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Choice distp5 { label Type callback {eff->seteffectpar(5,(int) o->value());} xywh {120 50 60 20} box UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 align 2 textsize 10 } { MenuItem {} { label Atan xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Asym1 xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sine xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Qnts xywh {95 95 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Zigzg xywh {105 105 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lmt xywh {115 115 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LmtU xywh {125 125 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LmtL xywh {135 135 100 20} labelfont 1 labelsize 10 } MenuItem {} { label ILmt xywh {147 147 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Clip xywh {157 157 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Asym2 xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow2 xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sgm xywh {95 95 100 20} labelfont 1 labelsize 10 } } } } Function {make_eq_window()} {open } { Fl_Window effeqwindow { label EQ open xywh {1047 881 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Counter bandcounter { label Band callback {eqband=(int) o->value(); int npb=eqband*5+10; int type=eff->geteffectpar(npb); typechoice->value(type); if (type>6) gaindial->activate(); else gaindial->deactivate(); if (type==0) bandgroup->deactivate(); else bandgroup->activate(); int freq=eff->geteffectpar(npb+1); freqdial->value(freq); int gain=eff->geteffectpar(npb+2); gaindial->value(gain); int q=eff->geteffectpar(npb+3); qdial->value(q); int dbl=eff->geteffectpar(npb+4); stagescounter->value(dbl);} tooltip {Band no.} xywh {85 15 45 15} type Simple labelfont 1 labelsize 11 align 1 minimum 0 maximum 1 step 1 textfont 1 textsize 11 code0 {o->bounds(0,MAX_EQ_BANDS-1);} } Fl_Group bandgroup { xywh {5 5 75 85} box UP_FRAME code0 {if (eff->geteffectpar(10)==0) o->deactivate();} } { Fl_Dial freqdial { label Freq callback {int np=eqband*5+11; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} xywh {10 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 class WidgetPDial } Fl_Dial gaindial { label Gain callback {int np=eqband*5+12; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} xywh {45 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 step 1 class WidgetPDial } Fl_Dial qdial { label Q callback {int np=eqband*5+13; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} tooltip {Bandwidth/Resonance} xywh {10 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 class WidgetPDial } Fl_Counter stagescounter { label Stages callback {int np=eqband*5+14; eff->seteffectpar(np,(int) o->value()); eqgraph->redraw();} tooltip {Additional filter stages} xywh {40 55 30 15} type Simple labelfont 1 labelsize 10 minimum 1 maximum 127 step 1 textfont 1 textsize 11 code0 {o->bounds(0,MAX_FILTER_STAGES-1);} } } Fl_Choice typechoice { label Type callback {int np=eqband*5+10; eff->seteffectpar(np,(int) o->value()); bandcounter->do_callback(); eqgraph->redraw();} tooltip Type xywh {135 15 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 when 6 textsize 10 } { MenuItem {} { label OFF xywh {10 10 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lp1 xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Hp1 xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lp2 xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Hp2 xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Bp2 xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label N2 xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pk xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LSh xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HSh xywh {90 90 100 20} labelfont 1 labelsize 10 } } Fl_Box eqgraph { xywh {85 35 140 55} box BORDER_BOX color 50 code0 {o->init(eff);} class EQGraph } } } Function {make_dynamicfilter_window()} {open } { Fl_Window effdynamicfilterwindow { label DynFilter open xywh {965 527 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25 code3 {set_module_parameters(o);} class Fl_Group visible } { Fl_Choice dfp { label Preset callback {eff->changepreset((int)o->value()); refresh(eff);} xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 } { MenuItem {} { label WahWah xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AutoWah xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sweep xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label VocalMorph1 xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label VocalMorph2 xywh {60 60 100 20} labelfont 1 labelsize 10 } } Fl_Dial dfp0 { label Vol callback {eff->seteffectpar(0,(int) o->value());} tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp2 { label Freq callback {eff->seteffectpar(2,(int) o->value());} tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp6 { label LfoD callback {eff->seteffectpar(6,(int) o->value());} tooltip {LFO depth} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Group {} { xywh {115 40 65 45} box UP_FRAME } { Fl_Dial dfp7 { label {A.S.} callback {eff->seteffectpar(7,(int) o->value());} tooltip {how filter varies with amplitude} xywh {120 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } Fl_Dial dfp9 { label {A.M} callback {eff->seteffectpar(9,(int) o->value());} tooltip {how quickly the filter varies with amplitude} xywh {150 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 class WidgetPDial } } } } Function {init(EffectMgr *eff_)} {open } { code {eff=eff_; make_null_window(); make_reverb_window(); make_echo_window(); make_chorus_window(); make_phaser_window(); make_alienwah_window(); make_distorsion_window(); make_eq_window(); make_dynamicfilter_window(); int px=this->parent()->x(); int py=this->parent()->y(); effnullwindow->position(px,py); effreverbwindow->position(px,py); effechowindow->position(px,py); effchoruswindow->position(px,py); effphaserwindow->position(px,py); effalienwahwindow->position(px,py); effdistorsionwindow->position(px,py); effeqwindow->position(px,py); effdynamicfilterwindow->position(px,py); refresh(eff);} {} } Function {refresh(EffectMgr *eff_)} {} { code {eff=eff_; this->hide(); effnullwindow->hide(); effreverbwindow->hide(); effechowindow->hide(); effchoruswindow->hide(); effphaserwindow->hide(); effalienwahwindow->hide(); effdistorsionwindow->hide(); effeqwindow->hide(); effdynamicfilterwindow->hide(); eqband=0; switch(eff->geteffect()){ case 1: revp->value(eff->getpreset()); revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W"); revp2->value(eff->geteffectpar(2)); revp3->value(eff->geteffectpar(3)); revp9->value(eff->geteffectpar(9)); effreverbwindow->show(); break; case 2: echop->value(eff->getpreset()); echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W"); echop2->value(eff->geteffectpar(2)); echop5->value(eff->geteffectpar(5)); effechowindow->show(); break; case 3: chorusp->value(eff->getpreset()); chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W"); chorusp2->value(eff->geteffectpar(2)); chorusp6->value(eff->geteffectpar(6)); chorusp7->value(eff->geteffectpar(7)); chorusp8->value(eff->geteffectpar(8)); effchoruswindow->show(); break; case 4: phaserp->value(eff->getpreset()); phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W"); phaserp2->value(eff->geteffectpar(2)); phaserp5->value(eff->geteffectpar(5)); phaserp6->value(eff->geteffectpar(6)); phaserp7->value(eff->geteffectpar(7)); phaserp8->value(eff->geteffectpar(8)); effphaserwindow->show(); break; case 5: awp->value(eff->getpreset()); awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W"); awp2->value(eff->geteffectpar(2)); awp6->value(eff->geteffectpar(6)); awp8->value(eff->geteffectpar(8)); effalienwahwindow->show(); break; case 6: distp->value(eff->getpreset()); distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W"); distp3->value(eff->geteffectpar(3)); distp4->value(eff->geteffectpar(4)); distp5->value(eff->geteffectpar(5)); distp7->value(eff->geteffectpar(7)); effdistorsionwindow->show(); break; case 7: bandcounter->value(eqband); bandcounter->do_callback(); typechoice->value(eff->geteffectpar(10)); eqgraph->redraw(); freqdial->value(eff->geteffectpar(11)); gaindial->value(eff->geteffectpar(12)); if (eff->geteffectpar(10)<6) gaindial->deactivate(); qdial->value(eff->geteffectpar(13)); stagescounter->value(eff->geteffectpar(14)); eqgraph->init(eff); effeqwindow->show(); break; case 8: dfp->value(eff->getpreset()); dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W"); dfp2->value(eff->geteffectpar(2)); dfp6->value(eff->geteffectpar(6)); dfp7->value(eff->geteffectpar(7)); dfp9->value(eff->geteffectpar(9)); effdynamicfilterwindow->show(); break; default:effnullwindow->show(); break; }; this->show();} {} } Function {refresh()} {} { code {refresh(eff);} {} } decl {EffectMgr *eff;} {} decl {int eqband;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl000066400000000000000000000645371247673406200245430ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include "WidgetPDial.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../globals.h"} {public } decl {\#include } {public } decl {\#include "../Params/EnvelopeParams.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "PresetsUI.h"} {public } decl {\#include "common.H"} {public } class EnvelopeFreeEdit {: {public Fl_Box} } { Function {EnvelopeFreeEdit(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {env=NULL; pair=NULL;} {} } Function {init(EnvelopeParams *env_)} {} { code {env=env_; oldx=-1; currentpoint=-1; cpx=0; lastpoint=-1; ctrldown=false;} {} } Function {setpair(Fl_Box *pair_)} {} { code {pair=pair_;} {} } Function {getpointx(int n)} {return_type int } { code {int lx=w()-10; int npoints=env->Penvpoints; float sum=0; for (int i=1;igetdt(i)+1; float sumbefore=0;//the sum of all points before the computed point for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1; return((int) (sumbefore/(float) sum*lx));} {} } Function {getpointy(int n)} {return_type int } { code {int ly=h()-10; return((int) ((1.0-env->Penvval[n]/127.0)*ly));} {} } Function {getnearest(int x,int y)} {return_type int } { code {x-=5;y-=5; int nearestpoint=0; int nearestval=1000000;//a big value for (int i=0;iPenvpoints;i++){ int distance=abs(x-getpointx(i))+abs(y-getpointy(i)); if (distancePfreemode==0) env->converttofree(); int npoints=env->Penvpoints; if (active_r()) fl_color(FL_BLACK); else fl_color(90,90,90); if (!active_r()) currentpoint=-1; fl_rectf(ox,oy,lx,ly); ox+=5;oy+=5;lx-=10;ly-=10; //draw the lines fl_color(FL_GRAY); fl_line_style(FL_SOLID); fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2); //draws the evelope points and lines Fl_Color alb=FL_WHITE; if (!active_r()) alb=fl_rgb_color(180,180,180); fl_color(alb); int oldxx=0,xx=0,oldyy=0,yy=getpointy(0); fl_rectf(ox-3,oy+yy-3,6,6); for (int i=1;i=0){ fl_color(FL_CYAN); fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10); }; //draw the sustain position if (env->Penvsustain>0){ fl_color(FL_YELLOW); xx=getpointx(env->Penvsustain); fl_line(ox+xx,oy+0,ox+xx,oy+ly); }; //Show the envelope duration and the current line duration fl_font(FL_HELVETICA|FL_BOLD,10); float time=0.0; if (currentpoint<=0 && (!ctrldown||lastpoint <= 0)){ fl_color(alb); for (int i=1;igetdt(i); } else { fl_color(255,0,0); time=env->getdt(lastpoint); }; char tmpstr[20]; if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time); else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0); fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0); if (lastpoint>=0){ snprintf((char *)&tmpstr,20,"%d", env->Penvval[lastpoint]); fl_draw(tmpstr,ox+lx-20,oy+ly-23,20,10,FL_ALIGN_RIGHT,NULL,0); }} {} } Function {handle(int event)} {return_type int } { code {int x_=Fl::event_x()-x(); int y_=Fl::event_y()-y(); // Some window magic makes us lose focus, so reassert it. if (event==FL_ENTER) Fl::focus(this); if ((event==FL_KEYDOWN || event==FL_KEYUP)){ int key = Fl::event_key(); if (key==FL_Control_L || key==FL_Control_R){ ctrldown = (event==FL_KEYDOWN); redraw(); if (pair!=NULL) pair->redraw(); } } if (event==FL_MOUSEWHEEL && lastpoint>=0) { if (!ctrldown) { int ny=env->Penvval[lastpoint] - Fl::event_dy(); env->Penvval[lastpoint]=ny < 0 ? 0 : ny > 127 ? 127 : ny; } else if (lastpoint > 0) { int newdt = Fl::event_dy() + env->Penvdt[lastpoint]; env->Penvdt[lastpoint] = newdt < 0 ? 0 : newdt > 127 ? 127 : newdt; } redraw(); if (pair!=NULL) pair->redraw(); } if (event==FL_PUSH) { currentpoint=getnearest(x_,y_); cpx=x_; cpdt=env->Penvdt[currentpoint]; lastpoint=currentpoint; redraw(); if (pair!=NULL) pair->redraw(); }; if (event==FL_RELEASE){ currentpoint=-1; redraw(); if (pair!=NULL) pair->redraw(); }; if ((event==FL_DRAG)&&(currentpoint>=0)){ int ny=127-(int) (y_*127.0/h()); if (ny<0) ny=0;if (ny>127) ny=127; env->Penvval[currentpoint]=ny; int dx=(int)((x_-cpx)*0.1); int newdt=cpdt+dx; if (newdt<0) newdt=0;if (newdt>127) newdt=127; if (currentpoint!=0) env->Penvdt[currentpoint]=newdt; else env->Penvdt[currentpoint]=0; redraw(); if (pair!=NULL) pair->redraw(); }; return(1);} {} } decl {Fl_Box *pair;} {} decl {EnvelopeParams *env;} {} decl {int oldx;} {} decl {int currentpoint,cpx,cpdt;} {} decl {int lastpoint;} {public } decl {bool ctrldown;} {} } class EnvelopeUI {open : {public Fl_Group,PresetsUI_} } { Function {EnvelopeUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {env=NULL; freemodeeditwindow=NULL; envADSR=NULL; envASR=NULL; envADSRfilter=NULL; envASRbw=NULL; envfree=NULL;} {} } Function {~EnvelopeUI()} {} { code {envwindow->hide(); hide(); freemodeeditwindow->hide(); delete (freemodeeditwindow);} {} } Function {make_freemode_edit_window()} {open } { Fl_Window freemodeeditwindow { label Envelope xywh {702 269 575 180} type Double visible } { Fl_Box freeedit { label Envelope xywh {5 5 565 145} box FLAT_BOX color 0 code0 {o->init(env);} class EnvelopeFreeEdit } Fl_Button addpoint { label {Add point} callback {int curpoint=freeedit->lastpoint; if (curpoint<0) return; //if (curpoint>=env->Penvpoints-1) return; if (env->Penvpoints>=MAX_ENVELOPE_POINTS) return; for (int i=env->Penvpoints;i>=curpoint+1;i--){ env->Penvdt[i]=env->Penvdt[i-1]; env->Penvval[i]=env->Penvval[i-1]; }; if (curpoint==0) { env->Penvdt[1]=64; }; env->Penvpoints++; if (curpoint<=env->Penvsustain) env->Penvsustain++; freeedit->lastpoint+=1; freeedit->redraw(); envfree->redraw(); sustaincounter->value(env->Penvsustain); sustaincounter->maximum(env->Penvpoints-2);} xywh {115 155 80 20} box THIN_UP_BOX labelsize 11 code0 {if (env->Pfreemode==0) o->hide();} } Fl_Button deletepoint { label {Delete point} callback {int curpoint=freeedit->lastpoint; if (curpoint<1) return; if (curpoint>=env->Penvpoints-1) return; if (env->Penvpoints<=3) return; for (int i=curpoint+1;iPenvpoints;i++){ env->Penvdt[i-1]=env->Penvdt[i]; env->Penvval[i-1]=env->Penvval[i]; }; env->Penvpoints--; if (curpoint<=env->Penvsustain) env->Penvsustain--; freeedit->lastpoint-=1; freeedit->redraw(); envfree->redraw(); sustaincounter->value(env->Penvsustain); sustaincounter->maximum(env->Penvpoints-2);} xywh {200 155 80 20} box THIN_UP_BOX labelsize 11 code0 {if (env->Pfreemode==0) o->hide();} } Fl_Check_Button freemodebutton { label FreeMode callback {reinit(); freeedit->lastpoint=-1; freeedit->redraw();} tooltip {Enable or disable the freemode} xywh {10 155 95 20} labelsize 11 } Fl_Check_Button forcedreleasecheck { label frcR callback {env->Pforcedrelease=(int)o->value();} tooltip {Forced Relase} xywh {410 165 40 15} down_box DOWN_BOX labelsize 10 code0 {o->value(env->Pforcedrelease);} code1 {if (env->Pfreemode==0) o->hide();} } Fl_Dial envstretchdial { label {Str.} callback {env->Penvstretch=(int)o->value();} tooltip {Envelope stretch (on lower notes make the envelope longer)} xywh {380 155 25 25} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1 code0 {o->value(env->Penvstretch);} code1 {if (env->Pfreemode==0) o->hide();} class WidgetPDial } Fl_Button {} { label Close callback {freemodeeditwindow->hide();} xywh {510 155 60 20} box THIN_UP_BOX } Fl_Check_Button linearenvelopecheck { label L callback {env->Plinearenvelope=(int)o->value();} tooltip {Linear Envelope} xywh {410 151 30 15} down_box DOWN_BOX labelsize 10 code0 {o->value(env->Plinearenvelope);} code1 {if ((env->Pfreemode==0)||(env->Envmode>2)) o->hide();} } Fl_Counter sustaincounter { label Sust callback {env->Penvsustain=(int) o->value(); freeedit->redraw(); envfree->redraw();} tooltip {Sustain (0 is disabled)} xywh {315 155 40 15} type Simple labelsize 11 align 4 minimum 0 maximum 127 step 1 code0 {o->value(env->Penvsustain);} code1 {if (env->Pfreemode==0) o->hide();} code2 {o->maximum(env->Penvpoints-2);} } Fl_Button {} { label C callback {presetsui->copy(env);} xywh {465 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} xywh {482 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } Function {make_ADSR_window()} {open } { Fl_Window envADSR {open xywh {344 788 205 70} type Double color 50 labelfont 1 class Fl_Group visible } { Fl_Group {} { label {Amplitude Envelope} xywh {0 0 205 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 code0 {set_module_parameters(o);} } { Fl_Dial e1adt { label {A.dt} callback {env->PA_dt=(int)o->value(); freeedit->redraw();} tooltip {Attack time} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_dt);} class WidgetPDial } Fl_Dial e1ddt { label {D.dt} callback {env->PD_dt=(int)o->value(); freeedit->redraw();} tooltip {Decay time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PD_dt);} class WidgetPDial } Fl_Dial e1rdt { label {R.dt} callback {env->PR_dt=(int)o->value(); freeedit->redraw();} tooltip {Release time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_dt);} class WidgetPDial } Fl_Dial e1sval { label {S.val} callback {env->PS_val=(int)o->value(); freeedit->redraw();} tooltip {Sustain value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PS_val);} class WidgetPDial } Fl_Check_Button e1forcedrelease { label frcR callback {env->Pforcedrelease=(int)o->value();} tooltip {Forced Relase} xywh {180 35 20 15} down_box DOWN_BOX labelsize 10 align 6 code0 {o->value(env->Pforcedrelease);} } Fl_Dial e1envstretch { label Stretch callback {env->Penvstretch=(int)o->value();} tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->Penvstretch);} class WidgetPDial } Fl_Button {} { label E callback {freemodeeditwindow->show();} tooltip {Envelope window} xywh {185 5 15 15} labelfont 1 labelsize 10 } Fl_Check_Button e1linearenvelope { label L callback {env->Plinearenvelope=(int)o->value();} tooltip {The evelope is linear} xywh {180 20 15 15} down_box DOWN_BOX labelsize 10 align 4 code0 {o->value(env->Plinearenvelope);} } Fl_Button {} { label C callback {presetsui->copy(env);} xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } } Function {make_ASR_window()} {open } { Fl_Window envASR {open xywh {648 667 210 70} type Double class Fl_Group visible } { Fl_Group {} { label {Frequency Envelope} xywh {0 0 210 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 code0 {set_module_parameters(o);} } { Fl_Dial e2aval { label {A.val} callback {env->PA_val=(int)o->value(); freeedit->redraw();} tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_val);} class WidgetPDial } Fl_Dial e2adt { label {A.dt} callback {env->PA_dt=(int)o->value(); freeedit->redraw();} tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_dt);} class WidgetPDial } Fl_Dial e2rval { label {R.val} callback {env->PR_val=(int)o->value(); freeedit->redraw();} tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_val);} class WidgetPDial } Fl_Dial e2rdt { label {R.dt} callback {env->PR_dt=(int)o->value(); freeedit->redraw();} tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_dt);} class WidgetPDial } Fl_Dial e2envstretch { label Stretch callback {env->Penvstretch=(int)o->value();} tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->Penvstretch);} class WidgetPDial } Fl_Check_Button e2forcedrelease { label frcR callback {env->Pforcedrelease=(int)o->value();} tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6 code0 {o->value(env->Pforcedrelease);} } Fl_Button {} { label C callback {presetsui->copy(env);} xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } Fl_Button {} { label E callback {freemodeeditwindow->show();} tooltip {Envelope window} xywh {190 5 15 15} labelfont 1 labelsize 10 } } } Function {make_ADSRfilter_window()} {open } { Fl_Window envADSRfilter {open selected xywh {627 569 275 70} type Double color 50 labelfont 1 class Fl_Group visible } { Fl_Group {} { label {Filter Envelope} xywh {0 0 275 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 code0 {set_module_parameters(o);} } { Fl_Dial e3aval { label {A.val} callback {env->PA_val=(int)o->value(); freeedit->redraw();} tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_val);} class WidgetPDial } Fl_Dial e3adt { label {A.dt} callback {env->PA_dt=(int)o->value(); freeedit->redraw();} tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_dt);} class WidgetPDial } Fl_Dial e3dval { label {D.val} callback {env->PD_val=(int)o->value(); freeedit->redraw();} tooltip {decay value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PD_val);} class WidgetPDial } Fl_Dial e3ddt { label {D.dt} callback {env->PD_dt=(int)o->value(); freeedit->redraw();} tooltip {decay time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PD_dt);} class WidgetPDial } Fl_Dial e3rdt { label {R.dt} callback {env->PR_dt=(int)o->value(); freeedit->redraw();} tooltip {Release time} xywh {145 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_dt);} class WidgetPDial } Fl_Dial e3rval { label {R.val} callback {env->PR_val=(int)o->value(); freeedit->redraw();} tooltip {Release value} xywh {180 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_val);} class WidgetPDial } Fl_Dial e3envstretch { label Stretch callback {env->Penvstretch=(int)o->value();} tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {215 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->Penvstretch);} class WidgetPDial } Fl_Check_Button e3forcedrelease { label frcR callback {env->Pforcedrelease=(int)o->value();} tooltip {Forced Relase} xywh {250 30 15 20} down_box DOWN_BOX labelsize 10 align 6 code0 {o->value(env->Pforcedrelease);} } Fl_Button {} { label E callback {freemodeeditwindow->show();} xywh {255 5 15 15} labelfont 1 labelsize 10 } Fl_Button {} { label C callback {presetsui->copy(env);} xywh {220 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} xywh {237 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } } Function {make_ASRbw_window()} {open } { Fl_Window envASRbw {open xywh {362 642 210 70} type Double code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Group {} { label {BandWidth Envelope} xywh {0 0 210 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 code0 {set_module_parameters(o);} } { Fl_Dial e4aval { label {A.val} callback {env->PA_val=(int)o->value(); freeedit->redraw();} tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_val);} class WidgetPDial } Fl_Dial e4adt { label {A.dt} callback {env->PA_dt=(int)o->value(); freeedit->redraw();} tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PA_dt);} class WidgetPDial } Fl_Dial e4rval { label {R.val} callback {env->PR_val=(int)o->value(); freeedit->redraw();} tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_val);} class WidgetPDial } Fl_Dial e4rdt { label {R.dt} callback {env->PR_dt=(int)o->value(); freeedit->redraw();} tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->PR_dt);} class WidgetPDial } Fl_Dial e4envstretch { label Stretch callback {env->Penvstretch=(int)o->value();} tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(env->Penvstretch);} class WidgetPDial } Fl_Check_Button e4forcedrelease { label frcR callback {env->Pforcedrelease=(int)o->value();} tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6 code0 {o->value(env->Pforcedrelease);} } Fl_Button {} { label C callback {presetsui->copy(env);} xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } Fl_Button {} { label E callback {freemodeeditwindow->show();} xywh {190 5 15 15} labelfont 1 labelsize 10 } } } Function {make_free_window()} {open } { Fl_Window envfree {open xywh {376 436 205 70} type Double color 50 labelfont 1 resizable code0 {set_module_parameters(o);} class Fl_Group visible } { Fl_Group envfreegroup { label {Amplitude Envelope} xywh {0 0 205 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 resizable code0 {set_module_parameters(o);} } { Fl_Box freeeditsmall { label Envelope callback {envfree->redraw();} xywh {5 20 195 45} box FLAT_BOX color 0 resizable code0 {o->init(env);} class EnvelopeFreeEdit } Fl_Button {} { label E callback {freemodeeditwindow->show();} xywh {185 5 15 15} labelfont 1 labelsize 10 } Fl_Button {} { label C callback {presetsui->copy(env);} xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } } Function {init(EnvelopeParams *env_)} {open } { code {env=env_; make_ADSR_window(); make_ASR_window(); make_ADSRfilter_window(); make_ASRbw_window(); make_free_window(); make_freemode_edit_window(); envwindow=NULL; if (env->Envmode==3) envfreegroup->label("Frequency Envelope"); if (env->Envmode==4) envfreegroup->label("Filter Envelope"); if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope"); freemodeeditwindow->label(this->label()); freeeditsmall->setpair(freeedit); freeedit->setpair(freeeditsmall); refresh();} {} } Function {reinit()} {} { code {if (env->Pfreemode!=0){ int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL); if (env->Pfreemode!=0) freemodebutton->value(1); else freemodebutton->value(0); if (answer==0) return; }; if (env->Pfreemode==0) env->Pfreemode=1; else env->Pfreemode=0; hide(); int winx=freemodeeditwindow->x(); int winy=freemodeeditwindow->y(); freemodeeditwindow->hide(); envwindow->hide(); Fl_Group *par=envwindow->parent(); par->hide(); refresh(); envwindow->show(); par->redraw(); par->show(); show(); freemodeeditwindow->position(winx,winy); freemodeeditwindow->show(); if (env->Pfreemode!=0) { freemodebutton->value(1); addpoint->show(); deletepoint->show(); forcedreleasecheck->show(); }else{ freemodebutton->value(0); addpoint->hide(); deletepoint->hide(); forcedreleasecheck->hide(); };} {} } Function {refresh()} {open } { code {freemodebutton->value(env->Pfreemode); sustaincounter->value(env->Penvsustain); if (env->Pfreemode==0) sustaincounter->hide(); else sustaincounter->show(); sustaincounter->maximum(env->Penvpoints-2); envstretchdial->value(env->Penvstretch); if (env->Pfreemode==0) envstretchdial->hide(); else envstretchdial->show(); linearenvelopecheck->value(env->Plinearenvelope); if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide(); else linearenvelopecheck->show(); forcedreleasecheck->value(env->Pforcedrelease); if (env->Pfreemode==0) forcedreleasecheck->hide(); else forcedreleasecheck->show(); if (env->Pfreemode==0){ addpoint->hide(); deletepoint->hide(); } else { addpoint->show(); deletepoint->show(); } freeedit->redraw(); if (env->Pfreemode==0){ switch(env->Envmode){ case(1): case(2): e1adt->value(env->PA_dt); e1ddt->value(env->PD_dt); e1sval->value(env->PS_val); e1rdt->value(env->PR_dt); e1envstretch->value(env->Penvstretch); e1linearenvelope->value(env->Plinearenvelope); e1forcedrelease->value(env->Pforcedrelease); break; case(3): e2aval->value(env->PA_val); e2adt->value(env->PA_dt); e2rdt->value(env->PR_dt); e2rval->value(env->PR_val); e2envstretch->value(env->Penvstretch); e2forcedrelease->value(env->Pforcedrelease); break; case(4): e3aval->value(env->PA_val); e3adt->value(env->PA_dt); e3dval->value(env->PD_val); e3ddt->value(env->PD_dt); e3rdt->value(env->PR_dt); e3rval->value(env->PR_val); e3envstretch->value(env->Penvstretch); e3forcedrelease->value(env->Pforcedrelease); break; case(5): e4aval->value(env->PA_val); e4adt->value(env->PA_dt); e4rdt->value(env->PR_dt); e4rval->value(env->PR_val); e4envstretch->value(env->Penvstretch); e4forcedrelease->value(env->Pforcedrelease); break; default: break; }; }else{ envfree->redraw(); }; envADSR->hide(); envASR->hide(); envADSRfilter->hide(); envASRbw->hide(); envfree->hide(); if (env->Pfreemode==0){ switch(env->Envmode){ case(1): case(2): envwindow=envADSR; break; case(3): envwindow=envASR; break; case(4): envwindow=envADSRfilter; break; case(5): envwindow=envASRbw; break; default: break; }; }else{ envwindow=envfree; }; envwindow->resize(this->x(),this->y(),this->w(),this->h()); envwindow->show();} {} } decl {EnvelopeParams *env;} {} decl {Fl_Group *envwindow;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl000066400000000000000000000471301247673406200242010ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include "WidgetPDial.h"} {public } decl {\#include } {} decl {\#include } {global } decl {\#include } {global } decl {\#include "../globals.h"} {public } decl {\#include } {public } decl {\#include "../Params/FilterParams.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "PresetsUI.h"} {public } decl {\#include "common.H"} {public } class FormantFilterGraph {open : {public Fl_Box} } { Function {FormantFilterGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {pars=NULL; nvowel=NULL; nformant=NULL; graphpoints=NULL;} {} } Function {init(FilterParams *pars_,int *nvowel_,int *nformant_)} {} { code {pars=pars_; nvowel=nvowel_; nformant=nformant_; oldx=-1; graphpoints=new float [w()];} {} } Function {draw_freq_line(float freq,int type)} {} { code {float freqx=pars->getfreqpos(freq); switch(type){ case 0:fl_line_style(FL_SOLID);break; case 1:fl_line_style(FL_DOT);break; case 2:fl_line_style(FL_DASH);break; }; if ((freqx>0.0)&&(freqx<1.0)) fl_line(x()+(int) (freqx*w()),y(), x()+(int) (freqx*w()),y()+h());} {} } Function {draw()} {open } { code {int maxdB=30; int ox=x(),oy=y(),lx=w(),ly=h(),i,oiy; float freqx; fl_color(FL_BLACK); fl_rectf(ox,oy,lx,ly); //draw the lines fl_color(FL_GRAY); fl_line_style(FL_SOLID); //fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2); freqx=pars->getfreqpos(1000.0); if ((freqx>0.0)&&(freqx<1.0)) fl_line(ox+(int) (freqx*lx),oy, ox+(int) (freqx*lx),oy+ly); for (i=1;i<10;i++){ if(i==1){ draw_freq_line(i*100.0,0); draw_freq_line(i*1000.0,0); }else if (i==5){ draw_freq_line(i*100.0,2); draw_freq_line(i*1000.0,2); }else{ draw_freq_line(i*100.0,1); draw_freq_line(i*1000.0,1); }; }; draw_freq_line(10000.0,0); draw_freq_line(20000.0,1); fl_line_style(FL_DOT); int GY=10;if (lyPnumformants){ draw_freq_line(pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq),2); //show some information (like current formant frequency,amplitude) char tmpstr[20]; snprintf(tmpstr,20,"%.2f kHz",pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq)*0.001); fl_draw(tmpstr,ox+1,oy+1,40,12,FL_ALIGN_LEFT,NULL,0); snprintf(tmpstr,20,"%d dB",(int)( rap2dB(1e-9 + pars->getformantamp(pars->Pvowels[*nvowel].formants[*nformant].amp)) + pars->getgain() )); fl_draw(tmpstr,ox+1,oy+15,40,12,FL_ALIGN_LEFT,NULL,0); }; //draw the data fl_color(FL_RED); fl_line_style(FL_SOLID); pars->formantfilterH(*nvowel,lx,graphpoints); fl_line_style( FL_SOLID, 2 ); fl_begin_line(); oiy=(int) ((graphpoints[0]/maxdB+1.0)*ly/2.0); for (i=1;i=0)&&(oiy>=0)&&(iyhide(); formantparswindow->hide(); hide(); //delete (filterui); delete (formantparswindow);} {} } Function {make_window()} {open } { Fl_Window filterui {open xywh {498 346 275 70} type Double color 50 labelfont 1 class Fl_Group visible } { Fl_Group filterparamswindow { label {Filter Parameters} xywh {0 0 275 75} box UP_FRAME color 183 labeltype ENGRAVED_LABEL labelsize 10 align 17 code0 {set_module_parameters( o );} } { Fl_Choice analogfiltertypechoice { label FilterType callback {pars->Ptype=(int)o->value(); pars->changed=true;} tooltip {The Filter type} xywh {10 50 50 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code1 {o->value(pars->Ptype);} } { MenuItem {} { label LPF1 xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HPF1 xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LPF2 xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HPF2 xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label BPF2 xywh {82 82 100 20} labelfont 1 labelsize 10 } MenuItem {} { label NF2 xywh {94 94 100 20} labelfont 1 labelsize 10 } MenuItem {} { label PkF2 xywh {104 104 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LSh2 xywh {114 114 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HSh2 xywh {124 124 100 20} labelfont 1 labelsize 10 } } Fl_Choice svfiltertypechoice { label FilterType callback {pars->Ptype=(int)o->value(); pars->changed=true;} tooltip {The Filter type} xywh {10 50 50 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code1 {o->value(pars->Ptype);} } { MenuItem {} { label 1LPF xywh {134 134 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 1HPF xywh {144 144 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 1BPF xywh {154 154 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 1NF xywh {164 164 100 20} labelfont 1 labelsize 10 } } Fl_Choice filtertype { label Category callback {switchcategory((int)o->value()); pars->changed=true;} tooltip {The Category of the Filter (Analog/Formantic/etc.)} xywh {10 20 60 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code0 {o->value(pars->Pcategory);} } { MenuItem {} { label Analog xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Formant xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label StVarF xywh {70 70 100 20} labelfont 1 labelsize 10 } } Fl_Dial cfreqdial { label {C.Freq} callback {pars->Pfreq=(int)o->value();} tooltip {Center Frequency of the Filter or the base position in the vowel's sequence} xywh {75 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->Pfreq);} class WidgetPDial } Fl_Dial qdial { label Q callback {pars->Pq=(int)o->value(); formantfiltergraph->redraw();} tooltip {Filter resonance or bandwidth} xywh {110 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->Pq);} class WidgetPDial } Fl_Dial freqtrdial { label {freq.tr.} callback {pars->Pfreqtrack=(int) o->value();} tooltip {Filter frequency tracking (left is negative, middle is 0, and right is positive)} xywh {215 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->Pfreqtrack);} class WidgetPDial } Fl_Dial vsnsadial { label {V.SnsA.} callback {if (velsnsamp!=NULL) *velsnsamp=(int)o->value();} tooltip {Velocity sensing amount of the Filter} xywh {145 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial vsnsdial { label {V.Sns.} callback {if (velsns!=NULL) *velsns=(int)o->value();} tooltip {Velocity Sensing Function of the Filter} xywh {180 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial gaindial { label gain callback {pars->Pgain=(int)o->value(); formantfiltergraph->redraw(); pars->changed=true;} tooltip {Filter output gain/damp} xywh {250 35 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->Pgain);} class WidgetPDial } Fl_Choice stcounter { label St callback {pars->Pstages=(int)o->value(); formantfiltergraph->redraw(); pars->changed=true;} open tooltip {Filter stages (in order to increase dB/oct. value and the order of the filter)} xywh {235 5 35 15} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10 code1 {for (int i=0;iadd(tmp);};} code2 {o->value(pars->Pstages);} } {} } Fl_Button editbutton { label Edit callback {formantparswindow->show();} xywh {15 40 50 25} labelfont 1 labelsize 11 } Fl_Button {} { label C callback {presetsui->copyArray(pars);} xywh {186 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->pasteArray(pars,this);} xywh {203 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } Function {make_formant_window()} {open } { Fl_Window formantparswindow { label {Formant Filter Parameters} selected xywh {518 473 700 205} type Double visible } { Fl_Group {} { xywh {485 47 105 113} box THIN_UP_BOX } { Fl_Counter {} { label {Formant } callback {nformant=(int) o->value(); update_formant_window(); formantfiltergraph->redraw();} xywh {545 80 40 15} type Simple labelfont 1 labelsize 10 align 4 minimum 0 maximum 127 step 1 textsize 10 code0 {o->bounds(0,FF_MAX_FORMANTS-1);} code1 {o->value(nformant);} } Fl_Counter {} { label {Vowel no.} callback {nvowel=(int) o->value(); update_formant_window(); formantfiltergraph->redraw();} xywh {545 55 40 20} type Simple labelfont 1 labelsize 10 align 4 minimum 0 maximum 127 step 1 textfont 1 textsize 11 code0 {o->bounds(0,FF_MAX_VOWELS-1);} code1 {o->value(nvowel);} } Fl_Group formantparsgroup { xywh {490 105 95 50} box ENGRAVED_FRAME } { Fl_Dial formant_freq_dial { label freq callback {pars->Pvowels[nvowel].formants[nformant].freq=(int) o->value(); formantfiltergraph->redraw(); pars->changed=true;} tooltip {Formant frequency} xywh {495 115 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial formant_q_dial { label Q callback {pars->Pvowels[nvowel].formants[nformant].q=(int) o->value(); formantfiltergraph->redraw(); pars->changed=true;} tooltip {Formant's Q} xywh {525 115 24 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial formant_amp_dial { label amp callback {pars->Pvowels[nvowel].formants[nformant].amp=(int) o->value(); formantfiltergraph->redraw(); pars->changed=true;} tooltip {Formant amplitude} xywh {555 115 24 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } } } Fl_Group {} { xywh {590 47 100 113} box THIN_UP_BOX } { Fl_Counter {} { label {Seq.Size} callback {pars->Psequencesize=(int) o->value(); update_formant_window(); pars->changed=true;} xywh {595 62 55 20} type Simple labelfont 1 labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 11 code0 {o->bounds(1,FF_MAX_SEQUENCE-1);} code1 {o->value(pars->Psequencesize);} } Fl_Counter {} { label {S.Pos.} callback {nseqpos=(int) o->value(); update_formant_window(); pars->changed=true;} tooltip {Current position from the sequence} xywh {595 97 40 15} type Simple labelfont 1 labelsize 10 align 9 minimum 0 maximum 127 step 1 textsize 10 code0 {o->bounds(0,FF_MAX_SEQUENCE-2);} code1 {o->value(nseqpos);} } Fl_Counter vowel_counter { label Vowel callback {pars->Psequence[nseqpos].nvowel=(int) o->value(); pars->changed=true;} xywh {640 97 40 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textsize 10 code0 {o->bounds(0,FF_MAX_VOWELS-1);} } Fl_Check_Button {} { label {Neg.Input} callback {pars->Psequencereversed=(int) o->value(); pars->changed=true;} tooltip {Negate the input from LFO/envelopes/etc.} xywh {625 132 60 20} down_box DOWN_BOX labelsize 10 code0 {o->value(pars->Psequencereversed);} } Fl_Dial strchdial { label Strch callback {pars->Psequencestretch=(int) o->value(); pars->changed=true;} tooltip {Sequence Stretch} xywh {595 130 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Psequencestretch);} class WidgetPDial } } Fl_Counter {} { label {Num.Formants} callback {pars->Pnumformants=(int) o->value(); update_formant_window(); pars->changed=true; formantfiltergraph->redraw();} xywh {485 15 65 20} type Simple labelfont 1 labelsize 10 align 5 minimum 0 maximum 127 step 1 code0 {o->bounds(1,FF_MAX_FORMANTS);} code1 {o->value(pars->Pnumformants);} } Fl_Dial frsldial { label {Fr.Sl.} callback {pars->Pformantslowness=(int) o->value(); pars->changed=true;} tooltip {Formant's Slowness (Morphing)} xywh {565 15 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Pformantslowness);} class WidgetPDial } Fl_Value_Output centerfreqvo { label {C.f.} callback {o->value(pars->getcenterfreq()/1000.0);} tooltip {Center Frequency (kHz)} xywh {515 164 33 18} when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1 code0 {o->value(pars->getcenterfreq()/1000.0);} } Fl_Value_Output octavesfreqvo { label {Oct.} callback {o->value(pars->getoctavesfreq());} tooltip {No. of octaves} xywh {515 182 33 18} when 3 minimum 1 maximum 127 step 1 value 5 textfont 1 code0 {o->value(pars->getoctavesfreq());} } Fl_Slider cfknob { callback {pars->Pcenterfreq=(int)o->value(); centerfreqvo->do_callback(); formantfiltergraph->redraw(); pars->changed=true;} xywh {551 167 84 15} type {Horz Knob} box FLAT_BOX maximum 127 code0 {o->value(pars->Pcenterfreq);} } Fl_Slider octknob { callback {pars->Poctavesfreq=(int)o->value(); octavesfreqvo->do_callback(); formantfiltergraph->redraw();} xywh {551 185 84 15} type {Horz Knob} box FLAT_BOX maximum 127 code0 {o->value(pars->Poctavesfreq);} } Fl_Box formantfiltergraph { xywh {5 5 475 195} box BORDER_BOX code0 {o->init(pars,&nvowel,&nformant);} class FormantFilterGraph } Fl_Dial wvknob { label {Vw.Cl.} callback {pars->Pvowelclearness=(int) o->value(); pars->changed=true;} tooltip {Vowel "clearness" (how the mixed vowels are avoided)} xywh {600 15 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Pvowelclearness);} class WidgetPDial } Fl_Button {} { label Close callback {formantparswindow->hide();} xywh {645 180 50 25} box THIN_UP_BOX } Fl_Button {} { label C callback {presetsui->copy(pars,nvowel);} xywh {635 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this,nvowel);} xywh {665 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Box {} { label Vowel xywh {635 10 55 15} } } } Function {update_formant_window()} {open } { code {formant_freq_dial->value(pars->Pvowels[nvowel].formants[nformant].freq); formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q); formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp); if (nformantPnumformants) formantparsgroup->activate(); else formantparsgroup->deactivate(); if (nseqposPsequencesize) vowel_counter->activate(); else vowel_counter->deactivate(); vowel_counter->value(pars->Psequence[nseqpos].nvowel);} {} } Function {refresh()} {} { code {update_formant_window(); formantfiltergraph->redraw(); if (pars->Pcategory==2) svfiltertypechoice->value(pars->Ptype); if (pars->Pcategory==0) analogfiltertypechoice->value(pars->Ptype); filtertype->value(pars->Pcategory); cfreqdial->value(pars->Pfreq); qdial->value(pars->Pq); freqtrdial->value(pars->Pfreqtrack); gaindial->value(pars->Pgain); stcounter->value(pars->Pstages); int categ=pars->Pcategory; if ((categ==0)||(categ==2)) { if (categ==0) { analogfiltertypechoice->show(); svfiltertypechoice->hide(); } else { svfiltertypechoice->show(); analogfiltertypechoice->hide(); }; editbutton->hide(); formantparswindow->hide(); cfreqdial->label("C.freq"); } else { analogfiltertypechoice->hide(); svfiltertypechoice->hide(); editbutton->show(); cfreqdial->label("BS.pos"); }; filterparamswindow->redraw();} {} } Function {init(FilterParams *filterpars_,unsigned char *velsnsamp_,unsigned char *velsns_)} {} { code {pars=filterpars_; velsnsamp=velsnsamp_; velsns=velsns_; make_window(); end(); make_formant_window(); filterui->resize(this->x(),this->y(),this->w(),this->h()); if (velsnsamp==NULL){ vsnsadial->deactivate(); vsnsadial->value(127); } else vsnsadial->value(*velsnsamp); if (velsns==NULL){ vsnsdial->deactivate(); vsnsdial->value(127); } else vsnsdial->value(*velsns); switchcategory(pars->Pcategory); formantparswindow->label(this->label()); update_formant_window();} {} } Function {switchcategory(int newcat)} {open } { code {if (pars->Pcategory!=newcat){ pars->Pgain=64; gaindial->value(64); analogfiltertypechoice->value(0); analogfiltertypechoice->do_callback(); svfiltertypechoice->value(0); svfiltertypechoice->do_callback(); }; pars->Pcategory=newcat; refresh();} {} } Function {use_for_dynamic_filter()} {open } { code {freqtrdial->deactivate(); gaindial->when(0); cfknob->when(FL_WHEN_RELEASE); octknob->when(FL_WHEN_RELEASE); frsldial->when(0); wvknob->when(0); formant_freq_dial->when(0); formant_q_dial->when(0); formant_amp_dial->when(0); strchdial->when(0);} {} } decl {FilterParams *pars;} {} decl {unsigned char *velsnsamp,*velsns;} {} decl {int nvowel,nformant,nseqpos;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl000066400000000000000000000122641247673406200233740ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include "WidgetPDial.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../globals.h"} {public } decl {\#include } {public } decl {\#include "../Params/LFOParams.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "PresetsUI.h"} {public } decl {\#include "common.H"} {public } class LFOUI {open : {public Fl_Group, PresetsUI_} } { Function {LFOUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {pars=NULL;} {} } Function {~LFOUI()} {} { code {lfoui->hide(); hide(); //delete (lfoui);} {} } Function {make_window()} {open } { Fl_Window lfoui {open selected xywh {630 351 230 70} type Double color 50 labelfont 1 class Fl_Group visible } { Fl_Group lfoparamswindow { label LFO xywh {0 0 230 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 code0 {set_module_parameters(o);} } { Fl_Dial freq { label {Freq.} callback {pars->Pfreq=o->value();} tooltip {LFO Frequency} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 step 1e-05 class WidgetPDial } Fl_Dial intensity { label Depth callback {pars->Pintensity=(int)o->value();} tooltip {LFO Amount} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial delay { label Delay callback {pars->Pdelay=(int)o->value();} tooltip {LFO delay} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial startphase { label Start callback {pars->Pstartphase=(int)o->value();} tooltip {LFO Startphase (leftmost is Random)} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial randomness { label {A.R.} callback {pars->Prandomness=(int)o->value();} tooltip {LFO Amplitude Randomness} xywh {180 7 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Choice LFOtype { label Type callback {pars->PLFOtype=(int)o->value();} tooltip {LFO function} xywh {180 40 45 15} down_box BORDER_BOX labelsize 10 align 2 textsize 8 } { MenuItem {} { label SINE xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label TRI xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label SQR xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {R.up} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {R.dn} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label E1dn xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label E2dn xywh {70 70 100 20} labelfont 1 labelsize 10 } } Fl_Check_Button continous { label {C.} callback {pars->Pcontinous=(int)o->value();} tooltip {Continous LFO} xywh {165 35 15 15} down_box DOWN_BOX labelsize 10 align 2 } Fl_Dial freqrand { label {F.R.} callback {pars->Pfreqrand=(int)o->value();} tooltip {LFO Frequency Randomness} xywh {205 7 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Dial stretch { label {Str.} callback {pars->Pstretch=(int)o->value();} tooltip {LFO stretch} xywh {144 30 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 class WidgetPDial } Fl_Button {} { label C callback {presetsui->copy(pars);} xywh {145 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this);} xywh {162 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } } Function {refresh()} {} { code {freq->value(pars->Pfreq); intensity->value(pars->Pintensity); startphase->value(pars->Pstartphase); delay->value(pars->Pdelay); continous->value(pars->Pcontinous); stretch->value(pars->Pstretch); randomness->value(pars->Prandomness); freqrand->value(pars->Pfreqrand); LFOtype->value(pars->PLFOtype);} {} } Function {init(LFOParams *lfopars_)} {} { code {pars=lfopars_; make_window(); end(); refresh(); lfoui->resize(this->x(),this->y(),this->w(),this->h()); lfoparamswindow->label(this->label());} {} } decl {LFOParams *pars;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl000066400000000000000000001662051247673406200242140ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2009 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "WidgetPDial.h"} {public } decl {\#include "ADnoteUI.h"} {public } decl {\#include "SUBnoteUI.h"} {public } decl {\#include "EffUI.h"} {public } decl {\#include "VirKeyboard.h"} {public } decl {\#include "ConfigUI.h"} {public } decl {\#include "BankUI.h"} {public } decl {\#include "PartUI.h"} {public } decl {\#include "MicrotonalUI.h"} {public } decl {\#include "PresetsUI.h"} {public } decl {\#include "NioUI.h"} {public global } decl {\#include "../Misc/Master.h"} {public } decl {\#include "../Misc/Part.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "common.H"} {public } decl {\#if USE_NSM \#include "NSM.H" extern NSM_Client *nsm; \#endif} {public } decl {\#include "../globals.h"} {public } class VUMeter {: {public Fl_Box} } { Function {VUMeter(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {master=NULL; npart=-1;} {} } Function {init(Master *master_,int part_)} {} { code {//the "part_" parameters sets the part (if it is >=0), else it sets the master master=master_; label(NULL); npart=part_; olddbl=0.0; olddbr=0.0; oldrmsdbl=0.0; oldrmsdbr=0.0;} {} } Function {draw_master()} {} { code {\#define MIN_DB (-48) int ox=x(); int oy=y(); int lx=w(); int ly=h(); vuData data = master->getVuData(); //pthread_mutex_lock(&master->mutex); float dbl=rap2dB(data.outpeakl); float dbr=rap2dB(data.outpeakr); float rmsdbl=rap2dB(data.rmspeakl); float rmsdbr=rap2dB(data.rmspeakr); float maxdbl=rap2dB(data.maxoutpeakl); float maxdbr=rap2dB(data.maxoutpeakr); int clipped=data.clipped; //pthread_mutex_unlock(&master->mutex); dbl=(MIN_DB-dbl)/MIN_DB; if (dbl<0.0) dbl=0.0; else if (dbl>1.0)dbl=1.0; dbr=(MIN_DB-dbr)/MIN_DB; if (dbr<0.0) dbr=0.0; else if (dbr>1.0) dbr=1.0; dbl=dbl*0.4+olddbl*0.6; dbr=dbr*0.4+olddbr*0.6; if ( damage() & FL_DAMAGE_USER1 ) { if ( olddbl == dbl && olddbr == dbr ) return; } olddbl=dbl; olddbr=dbr; \#define VULENX (lx-35) \#define VULENY (ly/2-3) dbl*=VULENX;dbr*=VULENX; int idbl=(int) dbl; int idbr=(int) dbr; //compute RMS - start rmsdbl=(MIN_DB-rmsdbl)/MIN_DB; if (rmsdbl<0.0) rmsdbl=0.0; else if (rmsdbl>1.0) rmsdbl=1.0; rmsdbr=(MIN_DB-rmsdbr)/MIN_DB; if (rmsdbr<0.0) rmsdbr=0.0; else if (rmsdbr>1.0) rmsdbr=1.0; rmsdbl=rmsdbl*0.4+oldrmsdbl*0.6; rmsdbr=rmsdbr*0.4+oldrmsdbr*0.6; oldrmsdbl=rmsdbl; oldrmsdbr=rmsdbr; rmsdbl*=VULENX;rmsdbr*=VULENX; int irmsdbl=(int) rmsdbl; int irmsdbr=(int) rmsdbr; //compute RMS - end //draw the vu-meter lines //db fl_rectf(ox,oy,idbr,VULENY,0,200,255); fl_rectf(ox,oy+ly/2,idbl,VULENY,0,200,255); //black fl_rectf(ox+idbr,oy,VULENX-idbr,VULENY,0,0,0); fl_rectf(ox+idbl,oy+ly/2,VULENX-idbl,VULENY,0,0,0); //draw the scales float tmp=VULENX*1.0/MIN_DB; for (int i=1;i<1-MIN_DB;i++){ int tx=VULENX+(int) (tmp*i); fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,160,200); if (i%5==0) fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,230,240); if (i%10==0) fl_rectf(ox+tx-1,oy,2,VULENY+ly/2,0,225,255); }; //rms if (irmsdbr>2) fl_rectf(ox+irmsdbr-1,oy,3,VULENY,255,255,0); if (irmsdbl>2) fl_rectf(ox+irmsdbl-1,oy+ly/2,3,VULENY,255,255,0); //draw the red box if clipping has occured if (clipped==0) fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,0,0,10); else fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,250,10,10); //draw the maxdB fl_font(FL_HELVETICA|FL_BOLD,10); fl_color(255,255,255); char tmpstr[10]; if ((maxdbl>MIN_DB-20)){ snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbr); fl_draw(tmpstr,ox+VULENX+1,oy+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0); }; if ((maxdbr>MIN_DB-20)){ snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbl); fl_draw(tmpstr,ox+VULENX+1,oy+ly/2+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0); };} {} } Function {draw_part()} {} { code {\#define MIN_DB (-48) int ox=x(); int oy=y(); int lx=w(); int ly=h(); if (!active_r()){ pthread_mutex_lock(&master->vumutex); int fakedb=master->fakepeakpart[npart]; pthread_mutex_unlock(&master->vumutex); fl_rectf(ox,oy,lx,ly,140,140,140); if (fakedb>0){ fakedb=(int)(fakedb/255.0*ly)+4; fl_rectf(ox+2,oy+ly-fakedb,lx-4,fakedb,0,0,0); }; return; }; //draw the vu lines pthread_mutex_lock(&master->vumutex); float db=rap2dB(master->vuoutpeakpart[npart]); pthread_mutex_unlock(&master->vumutex); db=(MIN_DB-db)/MIN_DB; if (db<0.0) db=0.0; else if (db>1.0) db=1.0; db*=ly-2; int idb=(int) db; fl_rectf(ox,oy+ly-idb,lx,idb,0,200,255); fl_rectf(ox,oy,lx,ly-idb,0,0,0); //draw the scales float tmp=ly*1.0/MIN_DB; for (int i=1;i<1-MIN_DB;i++){ int ty=ly+(int) (tmp*i); if (i%5==0) fl_rectf(ox,oy+ly-ty,lx,1,0,160,200); if (i%10==0) fl_rectf(ox,oy+ly-ty,lx,1,0,230,240); };} {} } Function {draw()} {} { code {if (npart>=0) draw_part(); else draw_master();} {} } Function {tickdraw(VUMeter *o)} {return_type {static void} } { code {o->damage(FL_DAMAGE_USER1);} {} } Function {tick(void *v)} {return_type {static void} } { code {tickdraw((VUMeter *) v); Fl::repeat_timeout(1.0/18.0,tick,v);//18 fps} {} } Function {handle(int event)} {return_type int } { code {switch(event){ case FL_SHOW: Fl::add_timeout(1.0/18.0,tick,this); break; case FL_HIDE: Fl::remove_timeout(tick,this); break; case FL_PUSH: if (npart>=0) break; pthread_mutex_lock(&master->mutex); master->vuresetpeaks(); pthread_mutex_unlock(&master->mutex); break; }; return(1);} {} } decl {Master *master;} {} decl {int npart;} {} decl {float olddbl,olddbr;} {} decl {float oldrmsdbl,oldrmsdbr;} {} } class SysEffSend {open : {public WidgetPDial} } { Function {SysEffSend(int x,int y, int w, int h, const char *label=0):WidgetPDial(x,y,w,h,label)} {} { code {master=NULL; neff1=0; neff2=0;} {} } Function {init(Master *master_,int neff1_,int neff2_)} {} { code {neff1=neff1_; neff2=neff2_; master=master_; minimum(0); maximum(127); step(1); labelfont(1); labelsize(10); align(FL_ALIGN_TOP); value(master->Psysefxsend[neff1][neff2]); char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1); this->copy_label(tmp);} {} } Function {~SysEffSend()} {} { code {hide();} {} } Function {handle(int event)} {return_type int } { code {if ((event==FL_PUSH) || (event==FL_DRAG)){ master->setPsysefxsend(neff1,neff2,(int) value()); }; return(WidgetPDial::handle(event));} {} } decl {Master *master;} {} decl {int neff1;} {} decl {int neff2;} {} } class Panellistitem {open : {public Fl_Group} } { Function {make_window()} {open private } { Fl_Window panellistitem {open private xywh {608 711 100 260} type Double box FLAT_BOX class Fl_Group visible } { Fl_Group panellistitemgroup {open private xywh {0 20 70 240} box UP_FRAME code0 {if (master->part[npart]->Penabled==0) o->deactivate();} code1 {set_module_parameters( o );} } { Fl_Group {} { xywh {45 65 15 110} box ENGRAVED_FRAME } { Fl_Box {} { label {V U} xywh {45 65 15 110} box FLAT_BOX color 0 selection_color 75 labelcolor 55 align 128 code0 {o->init(master,npart);} class VUMeter } } Fl_Button partname { label { } callback {if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; bankui->show();} xywh {5 27 60 30} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 208 } Fl_Slider partvolume { callback {master->part[npart]->setPvolume((int) o->value());} xywh {10 65 30 110} type {Vert Knob} box FLAT_BOX minimum 127 maximum 0 step 1 value 127 code0 {o->value(master->part[npart]->Pvolume);} } Fl_Dial partpanning { callback {master->part[npart]->setPpanning((int) o->value());} xywh {20 180 30 30} maximum 127 step 1 code0 {o->value(master->part[npart]->Ppanning);} class WidgetPDial } Fl_Button {} { label edit callback {if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); };} xywh {15 235 40 20} labelsize 10 } Fl_Choice partrcv { callback {master->part[npart]->Prcvchn=(int) o->value();} tooltip {receive from Midi channel} xywh {10 213 50 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {char nrstr[10]; for(int i=0;iadd(nrstr); else o->add("Dr10");};} code1 {o->value(master->part[npart]->Prcvchn);} } {} } Fl_Check_Button partenabled { label 01 callback {pthread_mutex_lock(&master->mutex); master->partonoff(npart,(int) o->value()); pthread_mutex_unlock(&master->mutex); if ((int) o->value()==0) panellistitemgroup->deactivate(); else { panellistitemgroup->activate(); if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; }; o->redraw();} private xywh {5 0 45 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24 code0 {char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);} code1 {o->value(master->part[npart]->Penabled);} } } } Function {Panellistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {npart=0; master=NULL; bankui=NULL;} {} } Function {init(Master *master_, int npart_,BankUI *bankui_)} {} { code {npart=npart_; master=master_; bankui=bankui_; make_window(); panellistitem->show(); end();} {} } Function {refresh()} {} { code {partenabled->value(master->part[npart]->Penabled); if (master->part[npart]->Penabled!=0) panellistitemgroup->activate(); else panellistitemgroup->deactivate(); partvolume->value(master->part[npart]->Pvolume); partpanning->value(master->part[npart]->Ppanning); partrcv->value(master->part[npart]->Prcvchn); partname->label((char *)master->part[npart]->Pname); if ((int)bankui->cbwig->value()!=(npart+1)) panellistitemgroup->color(fl_rgb_color(160,160,160)); else panellistitemgroup->color(fl_rgb_color(50,190,240)); panellistitemgroup->redraw();} {} } Function {~Panellistitem()} {} { code {panellistitem->hide(); //delete(panellistitem);} {} } decl {int npart;} {} decl {Master *master;} {} decl {BankUI *bankui;} {} } class MasterUI {open } { Function {make_window()} {open } { Fl_Window masterwindow { label zynaddsubfx callback {if (( \#ifdef PLUGINVERSION 1 \#elif USE_NSM (nsm && nsm->is_active()) \#else 0 \#endif || fl_choice("Exit and leave the unsaved data?","No","Yes",NULL))) { config.save(); *exitprogram=1; }; } open xywh {80 370 390 525} type Double xclass zynaddsubfx visible } { Fl_Menu_Bar mastermenu { xywh {-5 0 690 25} } { Submenu {} { label {&File} xywh {0 0 100 20} } { MenuItem {} { label {&New (erase all)...} callback {do_new_master();} xywh {20 20 100 20} } MenuItem {} { label {&Open Parameters...} callback {\#if USE_NSM if ( nsm && nsm->is_active() ) { do_load_master(); do_save_master( nsm->project_filename ); } else \#endif { do_load_master(); }} xywh {20 20 100 20} } MenuItem {} { label {&Save All Parameters...} callback {\#if USE_NSM if ( nsm && nsm->is_active() ) { do_save_master( nsm->project_filename ); } else \#endif { do_save_master(); }} xywh {10 10 100 20} divider } MenuItem {} { label {&Load Scale Settings...} callback {char *filename; filename=fl_file_chooser("Open:","({*.xsz})",NULL,0); if (filename==NULL) return; pthread_mutex_lock(&master->mutex); //clear all parameters master->microtonal.defaults(); //load the data int result=master->microtonal.loadXML(filename); pthread_mutex_unlock(&master->mutex); delete microtonalui; microtonalui=new MicrotonalUI(&master->microtonal); if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a scale file."); else if (result<0) fl_alert("Error: Could not load the file.");} xywh {35 35 100 20} } MenuItem {} { label {Save Sc&ale Settings ..} callback {char *filename; int result=0; filename=fl_file_chooser("Save:","({*.xsz})",NULL,0); if (filename==NULL) return; filename=fl_filename_setext(filename,".xsz"); result=fileexists(filename); if (result) { result=0; if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return; }; pthread_mutex_lock(&master->mutex); result=master->microtonal.saveXML(filename); pthread_mutex_unlock(&master->mutex); if (result<0) fl_alert("Error: Could not save the file."); updatepanel();} xywh {25 25 100 20} } MenuItem {} { label {Show Scale Settings...} callback {microtonalui->show();} xywh {0 0 100 20} divider } MenuItem {} { label {&Settings...} callback {configui->show();} xywh {25 25 100 20} } MenuItem {} { label {N&io Settings} callback {nioui.refresh(); nioui.show();} xywh {0 0 36 21} divider } MenuItem {} { label {&Copyright...} callback {aboutwindow->show();} xywh {15 15 100 20} divider } MenuItem {} { label {E&xit} callback {masterwindow->do_callback();} xywh {10 10 100 20} } } Submenu {} { label {&Instrument} xywh {10 10 100 20} } { MenuItem {} { label {&Clear Instrument...} callback {if (fl_choice("Clear instrument's parameters ?","No","Yes",NULL)){ // int npart=(int)npartcounter->value()-1; pthread_mutex_lock(&master->mutex); master->part[npart]->defaultsinstrument(); pthread_mutex_unlock(&master->mutex); npartcounter->do_callback(); }; updatepanel();} xywh {35 35 100 20} } MenuItem {} { label {&Open Instrument...} callback {const char *filename; filename=fl_file_chooser("Load:","({*.xiz})",NULL,0); if (filename==NULL) return; pthread_mutex_lock(&master->mutex); // int npart=(int)npartcounter->value()-1; //clear all instrument parameters, first master->part[npart]->defaultsinstrument(); //load the instr. parameters int result=master->part[npart]->loadXMLinstrument(filename); pthread_mutex_unlock(&master->mutex); master->part[npart]->applyparameters(); npartcounter->do_callback(); updatepanel(); if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file."); else if (result<0) fl_alert("Error: Could not load the file.");} xywh {30 30 100 20} } MenuItem {} { label {&Save Instrument ...} callback {char *filename; filename=fl_file_chooser("Save:","({*.xiz})",NULL,0); if (filename==NULL) return; filename=fl_filename_setext(filename,".xiz"); int result=fileexists(filename); if (result) { result=0; if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return; }; pthread_mutex_lock(&master->mutex); result=master->part[npart]->saveXML(filename); pthread_mutex_unlock(&master->mutex); if (result<0) fl_alert("Error: Could not save the file."); updatepanel();} xywh {20 20 100 20} divider } MenuItem {} { label {Show Instrument &Bank...} callback {bankui->show();} xywh {0 0 100 20} divider } MenuItem {} { label {&Virtual Keyboard...} callback {virkeyboard->show();} xywh {10 10 100 20} } } Submenu recordmenu { label {&Record} xywh {0 0 100 20} } { MenuItem {} { label {&Choose WAV file...} callback {char *filename; recordbutton->deactivate(); pausebutton->deactivate(); pauselabel->deactivate(); stopbutton->deactivate(); filename=fl_file_chooser("Record to audio file:","(*.wav)",NULL,0); if (filename==NULL) return; fl_filename_setext(filename,".wav"); int result=master->HDDRecorder.preparefile(filename,0); if (result==1) { result=0; if (fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) master->HDDRecorder.preparefile(filename,1); }; if (result==0) recordbutton->activate(); if (result!=0) fl_alert("Error: Could not save the file.");} xywh {0 0 100 20} } } Submenu {} { label Misc xywh {10 10 100 20} } { MenuItem {} { label {Switch User Interface Mode} callback {if (fl_choice("Switch the User Interface to Beginner mode ?","No","Yes",NULL)){ masterwindow->hide(); refresh_master_ui(); simplemasterwindow->show(); config.cfg.UserInterfaceMode=2; };} xywh {10 10 100 20} } } } Fl_Dial mastervolumedial { label {Master Volume} callback {master->setPvolume((int) o->value());} tooltip {Master Volume} xywh {15 32 55 55} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 code0 {o->value(master->Pvolume);} class WidgetPDial } Fl_Counter masterkeyshiftcounter { label {Master KeyShift} callback {master->setPkeyshift((int) o->value()+64);} xywh {150 97 120 23} type Simple labelsize 9 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->value(master->Pkeyshift-64);} } Fl_Button {} { label {Panic!} callback {virkeyboard->relaseallkeys(); pthread_mutex_lock(&master->mutex); master->shutup=1; pthread_mutex_unlock(&master->mutex);} xywh {280 29 105 53} color 90 labelfont 1 } Fl_Group partuigroup {open xywh {0 310 390 205} } { Fl_Group partui {open selected xywh {0 310 383 175} code0 {o->init(master->part[0],master,0,bankui);} code1 {o->show();} class PartUI } {} } Fl_Tabs {} {open xywh {0 145 390 165} box UP_FRAME } { Fl_Group {} { label {System Effects} open xywh {0 162 390 145} labelsize 15 align 9 } { Fl_Counter syseffnocounter { label {Sys.Effect No.} callback {nsyseff=(int) o->value()-1; sysefftype->value(master->sysefx[nsyseff]->geteffect()); syseffectui->refresh(master->sysefx[nsyseff]);} xywh {5 181 80 22} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_SYS_EFX);} code1 {o->value(nsyseff+1);} } Fl_Choice sysefftype { label EffType callback {pthread_mutex_lock(&master->mutex); master->sysefx[nsyseff]->changeeffect((int) o->value()); pthread_mutex_unlock(&master->mutex); syseffectui->refresh(master->sysefx[nsyseff]);} xywh {285 176 100 22} down_box BORDER_BOX labelsize 10 code0 {o->value(master->sysefx[nsyseff]->geteffect());} } { MenuItem {} { label {No Effect} xywh {10 10 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {90 90 100 20} labelfont 1 labelsize 10 } } Fl_Group syseffectuigroup {open xywh {5 203 380 95} color 48 } { Fl_Group syseffectui { xywh {5 203 380 95} code0 {o->init(master->sysefx[nsyseff]);} class EffUI } {} } Fl_Button {} { label {Send to...} callback {syseffsendwindow->show();} xywh {90 181 85 22} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Button {} { label C callback {presetsui->copy(master->sysefx[nsyseff]);} xywh {180 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->sysefx[nsyseff],syseffectui); pthread_mutex_unlock(&master->mutex);} xywh {210 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Group {} { label {Insertion Effects} open xywh {0 165 390 145} labelsize 15 align 9 hide } { Fl_Counter inseffnocounter { label {Ins.Effect No.} callback {ninseff=(int) o->value()-1; insefftype->value(master->insefx[ninseff]->geteffect()); inseffpart->value(master->Pinsparts[ninseff]+2); inseffectui->refresh(master->insefx[ninseff]); if (master->Pinsparts[ninseff]!=-1) { insefftype->activate(); inseffectui->activate(); inseffectuigroup->activate(); } else { insefftype->deactivate(); inseffectui->deactivate(); inseffectuigroup->deactivate(); };} xywh {5 183 80 22} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_INS_EFX);} code1 {o->value(ninseff+1);} } Fl_Choice insefftype { label EffType callback {pthread_mutex_lock(&master->mutex); master->insefx[ninseff]->changeeffect((int) o->value()); pthread_mutex_unlock(&master->mutex); inseffectui->refresh(master->insefx[ninseff]); inseffectui->show();} xywh {285 173 100 22} down_box BORDER_BOX labelsize 10 code0 {o->value(master->insefx[ninseff]->geteffect());} code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();} } { MenuItem {} { label {No Effect} xywh {25 25 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {100 100 100 20} labelfont 1 labelsize 10 } } Fl_Group inseffectuigroup {open xywh {5 205 380 95} box FLAT_BOX color 48 } { Fl_Group inseffectui { xywh {5 205 380 90} box UP_FRAME code0 {o->init(master->insefx[ninseff]);} code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();} class EffUI } {} } Fl_Choice inseffpart { label {Insert To.} callback {master->Pinsparts[ninseff]=(int) o->value()-2; if ((int) o->value()==1){ inseffectuigroup->deactivate(); insefftype->deactivate(); inseffectui->deactivate(); } else { inseffectuigroup->activate(); insefftype->activate(); inseffectui->activate(); }; master->insefx[ninseff]->cleanup();} open xywh {95 183 80 22} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10 code0 {o->add("Master Out");o->add("Off");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code3 {o->value(master->Pinsparts[ninseff]+2);} } {} Fl_Button {} { label C callback {presetsui->copy(master->insefx[ninseff]);} xywh {180 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->insefx[ninseff],inseffectui); pthread_mutex_unlock(&master->mutex);} xywh {210 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } } Fl_Button {} { label Scales callback {microtonalui->show();} xywh {320 87 65 23} color 51 labelfont 1 } Fl_Group {} { xywh {150 40 117 45} box UP_FRAME } { Fl_Button recordbutton { label {Rec.} callback {o->deactivate(); recordmenu->deactivate(); recordmenu->label("&Record(*)"); stopbutton->activate(); pausebutton->activate(); pauselabel->activate(); master->HDDRecorder.start(); master->vuresetpeaks(); mastermenu->redraw();} tooltip {Start Recording} xywh {159 46 21 21} box ROUND_UP_BOX color 88 labelfont 1 labelsize 10 align 2 deactivate } Fl_Button stopbutton { label Stop callback {o->deactivate(); master->HDDRecorder.stop(); recordbutton->deactivate(); pausebutton->deactivate(); pauselabel->deactivate(); recordmenu->activate(); recordmenu->label("&Record"); mastermenu->redraw();} tooltip {Stop Recording and close the audio file} xywh {237 46 21 21} box THIN_UP_BOX color 4 labelfont 1 labelsize 10 align 2 deactivate } Fl_Button pausebutton { label {@||} callback {o->deactivate(); master->HDDRecorder.pause(); recordbutton->activate(); mastermenu->redraw();} tooltip {Pause Recording} xywh {198 46 21 21} box THIN_UP_BOX color 4 selection_color 4 labelfont 1 labelcolor 3 align 16 deactivate } Fl_Box pauselabel { label Pause xywh {192 66 30 15} labelfont 1 labelsize 10 deactivate } } Fl_Group {} {open xywh {1 490 389 55} } { Fl_Box {} { label {VU-Meter} xywh {5 490 380 30} box FLAT_BOX color 48 selection_color 75 code0 {o->init(master,-1);} class VUMeter } } Fl_Check_Button nrpnbutton { label NRPN callback {master->ctl.NRPN.receive=(int) o->value();} tooltip {Receive NRPNs} xywh {10 115 60 25} down_box DOWN_BOX labelsize 12 code0 {o->value(master->ctl.NRPN.receive);} } Fl_Counter npartcounter { callback {int nval=(int) o->value()-1; partuigroup->remove(partui); delete partui; partui=new PartUI(0,0,765,525); partuigroup->add(partui); partui->init(master->part[nval],master,nval,bankui); partui->redraw(); o->redraw(); npart=nval; updatepanel(); simplenpartcounter->value(nval+1); simplenpartcounter->do_callback();} tooltip {The part number} xywh {5 312 50 18} type Simple labelfont 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_MIDI_PARTS);} code1 {bankui->init(o);} } Fl_Button {} { label vK callback {virkeyboard->show();} tooltip {Virtual Keyboard} xywh {280 87 40 23} color 51 labelfont 1 } Fl_Group {} {open xywh {85 32 55 110} box UP_FRAME } { Fl_Button {} { label Reset callback {globalfinedetuneslider->value(64.0); globalfinedetuneslider->do_callback();} tooltip {Master fine detune reset} xywh {90 37 45 23} box THIN_UP_BOX labelsize 10 } Fl_Dial globalfinedetuneslider { label {Fine Detune} callback {master->microtonal.Pglobalfinedetune=(int) o->value();} tooltip {global fine detune} xywh {90 68 45 45} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 value 64 code0 {o->value(master->microtonal.Pglobalfinedetune);} class WidgetPDial } } Fl_Button {} { label {Panel Window} callback {updatepanel(); panelwindow->show();} tooltip {Panel Window} xywh {280 112 105 23} color 51 labelfont 1 labelsize 10 } Fl_Button sm_indicator1 { label SM xywh {350 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate } } Fl_Window aboutwindow { label {Copyright...} xywh {411 344 365 280} type Double hide } { Fl_Box {} { label {Copyright (c) 2002-2009 Nasca O. PAUL and others. Please read AUTHORS.txt} xywh {15 35 335 55} labeltype EMBOSSED_LABEL labelsize 15 align 208 } Fl_Box {} { label {This is free software; you may redistribute it and/or modify it under the terms of the version 2 (or any later version) of the GNU General Public License as published by the Free Software Fundation. This program comes with ABSOLUTELY NO WARRANTY. See the version 2 (or any later version) of the GNU General Public License for details.} xywh {15 90 335 145} labelfont 1 labelsize 11 align 144 } Fl_Button {} { label {Close this window} callback {aboutwindow->hide();} xywh {80 245 190 25} box THIN_UP_BOX labelsize 11 } Fl_Box {} { label ZynAddSubFX xywh {15 5 335 30} labeltype EMBOSSED_LABEL labelfont 1 labelsize 20 align 16 } } Fl_Window syseffsendwindow { label {System Effects Send} xywh {171 234 120 250} type Double hide resizable } { Fl_Scroll {} {open xywh {0 45 120 170} box FLAT_BOX resizable code0 {for (int neff1=0;neff1x()+(neff2-1)*35,o->y()+15+neff1*50,30,30);syseffsend[neff1][neff2]->label("aaa");syseffsend[neff1][neff2]->init(master,neff1,neff2);};} } {} Fl_Button {} { label Close callback {syseffsendwindow->hide();} xywh {25 220 80 25} box THIN_UP_BOX } Fl_Box {} { label {Send system effect's output to other system effects} xywh {5 5 110 35} labelsize 10 align 192 } } Fl_Window panelwindow { label {ZynAddSubFX Panel} xywh {89 59 630 635} type Double hide } { Fl_Scroll {} { xywh {0 5 570 310} type HORIZONTAL box THIN_UP_BOX } { Fl_Pack {} { xywh {5 10 560 285} type HORIZONTAL code0 {for (int i=0;iinit(master,i,bankui);}} } {} } Fl_Scroll {} { xywh {0 320 570 310} type HORIZONTAL box THIN_UP_BOX } { Fl_Pack {} { xywh {5 325 560 285} type HORIZONTAL code0 {for (int i=NUM_MIDI_PARTS/2;iinit(master,i,bankui);}} } {} } Fl_Button {} { label Close callback {panelwindow->hide(); updatepanel();} xywh {575 605 50 25} box THIN_UP_BOX labelsize 13 } Fl_Button {} { label Refresh callback {updatepanel();} xywh {575 570 55 25} box THIN_UP_BOX labelsize 13 } } Fl_Window simplemasterwindow { label ZynAddSubFX callback {\#ifndef PLUGINVERSION if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL)) \#endif { config.save(); *exitprogram=1; }; } open xywh {283 262 600 335} type Double visible } { Fl_Menu_Bar simplemastermenu { xywh {0 0 690 25} } { Submenu {} { label {&File} xywh {10 10 100 20} } { MenuItem {} { label {&New (erase all)...} callback {do_new_master();} xywh {30 30 100 20} } MenuItem {} { label {&Open Parameters...} callback {do_load_master();} xywh {30 30 100 20} } MenuItem {} { label {&Save All Parameters...} callback {\#if USE_NSM if ( nsm && nsm->is_active() ) { do_save_master( nsm->project_filename ); } else \#endif { do_save_master(); }} xywh {20 20 100 20} divider } MenuItem {} { label {&Settings...} callback {configui->show();} xywh {35 35 100 20} divider } MenuItem {} { label {&Copyright...} callback {aboutwindow->show();} xywh {25 25 100 20} divider } MenuItem {} { label {E&xit} callback {masterwindow->do_callback();} xywh {20 20 100 20} } } Submenu {} { label {&Instrument} xywh {20 20 100 20} } { MenuItem {} { label {&Open Instrument...} callback {const char *filename; filename=fl_file_chooser("Load:","({*.xiz})",NULL,0); if (filename==NULL) return; pthread_mutex_lock(&master->mutex); // int npart=(int)npartcounter->value()-1; //clear all instrument parameters, first master->part[npart]->defaultsinstrument(); //load the instr. parameters int result=master->part[npart]->loadXMLinstrument(filename); pthread_mutex_unlock(&master->mutex); master->part[npart]->applyparameters(); simplenpartcounter->do_callback(); if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file."); else if (result<0) fl_alert("Error: Could not load the file.");} xywh {40 40 100 20} } MenuItem {} { label {Show Instrument &Bank...} callback {bankui->show();} xywh {10 10 100 20} divider } } Submenu {} { label Misc xywh {0 0 100 20} } { MenuItem {} { label {Switch User Interface Mode} callback {if (fl_choice("Switch the User Interface to Advanced mode ?","No","Yes",NULL)){ simplemasterwindow->hide(); refresh_master_ui(); masterwindow->show(); config.cfg.UserInterfaceMode=1; };} xywh {0 0 100 20} } } } Fl_Group simplelistitemgroup {open private xywh {125 65 215 145} box UP_FRAME code0 {if (master->part[npart]->Penabled==0) o->deactivate();} } { Fl_Button partname { callback {if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; bankui->show();} xywh {130 72 205 18} box THIN_DOWN_BOX down_box FLAT_BOX color 50 labelfont 1 labelsize 11 align 208 } Fl_Slider partpanning { label Pan callback {master->part[npart]->setPpanning((int) o->value());} xywh {185 95 145 15} type {Horz Knob} box FLAT_BOX labelsize 11 maximum 127 step 1 value 64 code0 {o->value(master->part[npart]->Ppanning);} } Fl_Choice partrcv { label {Midi Channel Receive} callback {virkeys->relaseallkeys(0); master->part[npart]->Prcvchn=(int) o->value(); virkeys->midich=(int) o->value();} open tooltip {receive from Midi channel} xywh {140 157 65 18} down_box BORDER_BOX labelsize 10 align 130 textfont 1 code0 {char nrstr[10]; for(int i=0;iadd(nrstr); else o->add("Dr10");};} code1 {o->value(master->part[npart]->Prcvchn);} } {} Fl_Dial partvolume { callback {master->part[npart]->setPvolume((int) o->value());} xywh {135 95 45 40} labelsize 9 maximum 127 step 1 code0 {o->value(master->part[npart]->Pvolume);} class WidgetPDial } Fl_Box {} { label Volume xywh {130 130 55 20} labelsize 10 } Fl_Check_Button simplepartportamento { label Portamento callback {master->part[npart]->ctl.portamento.portamento=(int) o->value();} tooltip {Enable/Disable the portamento} xywh {193 127 79 23} down_box DOWN_BOX labelsize 9 code0 {o->value(master->part[npart]->ctl.portamento.portamento);} } Fl_Counter simpleminkcounter { label {Min.key} callback {master->part[npart]->Pminkey=(int) o->value(); if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED); else o->textcolor(FL_BLACK);} tooltip {Minimum key (that the part receives NoteOn messages)} xywh {210 158 40 15} type Simple labelsize 10 minimum 0 maximum 127 step 1 textsize 10 code0 {o->value(master->part[npart]->Pminkey);} } Fl_Counter simplemaxkcounter { label {Max.key} callback {master->part[npart]->Pmaxkey=(int) o->value(); if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED); else o->textcolor(FL_BLACK);} tooltip {Maximum key (that the part receives NoteOn messages)} xywh {255 158 40 15} type Simple labelsize 10 minimum 0 maximum 127 step 1 textsize 10 code0 {o->value(master->part[npart]->Pmaxkey);} } Fl_Button {} { label m callback {if (master->part[npart]->lastnote>=0) simpleminkcounter->value(master->part[npart]->lastnote); simpleminkcounter->do_callback(); simplemaxkcounter->do_callback();} tooltip {set the minimum key to the last pressed key} xywh {230 188 15 12} box THIN_UP_BOX labelsize 10 } Fl_Button {} { label M callback {if (master->part[npart]->lastnote>=0) simplemaxkcounter->value(master->part[npart]->lastnote); simplemaxkcounter->do_callback(); simpleminkcounter->do_callback();} tooltip {set the maximum key to the last pressed key} xywh {260 188 15 12} box THIN_UP_BOX labelsize 10 } Fl_Button {} { label R callback {simpleminkcounter->value(0); simpleminkcounter->do_callback(); simplemaxkcounter->value(127); simplemaxkcounter->do_callback();} tooltip {reset the minimum key to 0 and maximum key to 127} xywh {245 188 15 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Counter simplepartkeyshiftcounter { label KeyShift callback {master->part[npart]->Pkeyshift=(int) o->value()+64;} xywh {280 120 50 20} type Simple labelsize 11 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->value(master->part[npart]->Pkeyshift-64);} } Fl_Dial simplesyseffsend { callback {master->setPsysefxvol(npart,nsyseff,(int) o->value());} xywh {300 160 30 30} maximum 127 step 1 class WidgetPDial } Fl_Box {} { label Effect xywh {295 190 40 15} labelsize 10 } } Fl_Check_Button partenabled { label Enabled callback {pthread_mutex_lock(&master->mutex); master->partonoff(npart,(int) o->value()); pthread_mutex_unlock(&master->mutex); if ((int) o->value()==0) simplelistitemgroup->deactivate(); else { simplelistitemgroup->activate(); if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; }; o->redraw();} private xywh {250 40 85 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24 code0 {//char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);} code1 {o->value(master->part[npart]->Penabled);} } Fl_Box virkeys { label Keyboard xywh {5 215 590 80} box BORDER_BOX color 17 code0 {o->init(master);} class VirKeys } Fl_Group {} {open xywh {340 30 255 185} } { Fl_Tabs {} {open xywh {345 35 245 175} box UP_FRAME align 18 } { Fl_Group {} { label {System Effects} open xywh {345 55 245 155} box UP_FRAME labelfont 1 labelsize 12 align 18 } { Fl_Counter simplesyseffnocounter { label {Sys.Effect No.} callback {nsyseff=(int) o->value()-1; simplesysefftype->value(master->sysefx[nsyseff]->geteffect()); simplesyseffectui->refresh(master->sysefx[nsyseff]); simplerefresh();} xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_SYS_EFX);} code1 {o->value(nsyseff+1);} } Fl_Choice simplesysefftype { label EffType callback {pthread_mutex_lock(&master->mutex); master->sysefx[nsyseff]->changeeffect((int) o->value()); pthread_mutex_unlock(&master->mutex); simplesyseffectui->refresh(master->sysefx[nsyseff]);} xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5 code0 {o->value(master->sysefx[nsyseff]->geteffect());} } { MenuItem {} { label {No Effect} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {100 100 100 20} labelfont 1 labelsize 10 } } Fl_Group simplesyseffectuigroup {open xywh {350 95 235 95} color 48 } { Fl_Group simplesyseffectui { xywh {350 95 234 95} code0 {o->init(master->sysefx[nsyseff]);} class SimpleEffUI } {} } Fl_Button {} { label {Send to...} callback {syseffsendwindow->show();} xywh {435 75 75 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->sysefx[nsyseff],simplesyseffectui); pthread_mutex_unlock(&master->mutex);} xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Group {} { label {Insertion Effects} xywh {345 55 245 155} box UP_FRAME labelfont 1 labelsize 12 align 18 hide } { Fl_Counter simpleinseffnocounter { label {Ins.Effect No.} callback {ninseff=(int) o->value()-1; simpleinsefftype->value(master->insefx[ninseff]->geteffect()); simpleinseffpart->value(master->Pinsparts[ninseff]+2); simpleinseffectui->refresh(master->insefx[ninseff]); if (master->Pinsparts[ninseff]!=-1) { simpleinsefftype->activate(); simpleinseffectui->activate(); simpleinseffectuigroup->activate(); } else { simpleinsefftype->deactivate(); simpleinseffectui->deactivate(); simpleinseffectuigroup->deactivate(); };} xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_INS_EFX);} code1 {o->value(ninseff+1);} } Fl_Choice simpleinsefftype { label EffType callback {pthread_mutex_lock(&master->mutex); master->insefx[ninseff]->changeeffect((int) o->value()); pthread_mutex_unlock(&master->mutex); simpleinseffectui->refresh(master->insefx[ninseff]); simpleinseffectui->show();} xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5 code0 {o->value(master->insefx[ninseff]->geteffect());} code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();} } { MenuItem {} { label {No Effect} xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {110 110 100 20} labelfont 1 labelsize 10 } } Fl_Group simpleinseffectuigroup { xywh {350 95 234 95} box FLAT_BOX color 48 } { Fl_Group simpleinseffectui { xywh {350 95 234 95} code0 {o->init(master->insefx[ninseff]);} code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();} class SimpleEffUI } {} } Fl_Choice simpleinseffpart { label {Insert To.} callback {master->Pinsparts[ninseff]=(int) o->value()-2; if ((int) o->value()==1){ simpleinseffectuigroup->deactivate(); simpleinsefftype->deactivate(); simpleinseffectui->deactivate(); } else { simpleinseffectuigroup->activate(); simpleinsefftype->activate(); simpleinseffectui->activate(); }; master->insefx[ninseff]->cleanup();} open xywh {435 75 80 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10 code0 {o->add("Master Out");o->add("Off");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code3 {o->value(master->Pinsparts[ninseff]+2);} } {} Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->insefx[ninseff],simpleinseffectui); pthread_mutex_unlock(&master->mutex);} xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } } } Fl_Group {} {open xywh {5 300 590 30} box ENGRAVED_FRAME } { Fl_Box {} { label {VU-Meter} xywh {5 300 590 30} box FLAT_BOX color 41 selection_color 75 code0 {o->init(master,-1);} class VUMeter } } Fl_Dial simplemastervolumedial { label {Master Volume} callback {master->setPvolume((int) o->value());} tooltip {Master Volume} xywh {10 35 40 40} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1 code0 {o->value(master->Pvolume);} class WidgetPDial } Fl_Counter simplemasterkeyshiftcounter { label {Master KeyShift} callback {master->setPkeyshift((int) o->value()+64);} xywh {15 110 90 20} labelsize 11 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->value(master->Pkeyshift-64);} } Fl_Button {} { label {Stop ALL sounds!} callback {virkeyboard->relaseallkeys(); pthread_mutex_lock(&master->mutex); master->shutup=1; pthread_mutex_unlock(&master->mutex);} xywh {5 149 115 31} color 90 labelfont 1 labelsize 10 } Fl_Button {} { label Reset callback {simpleglobalfinedetuneslider->value(64.0); simpleglobalfinedetuneslider->do_callback();} tooltip {Master fine detune reset} xywh {70 30 50 17} box THIN_UP_BOX labelsize 11 align 128 } Fl_Dial simpleglobalfinedetuneslider { label {Fine Detune} callback {master->microtonal.Pglobalfinedetune=(int) o->value();} tooltip {global fine detune} xywh {80 50 30 30} box ROUND_UP_BOX labelsize 11 align 130 maximum 127 step 1 value 64 code0 {o->value(master->microtonal.Pglobalfinedetune);} class WidgetPDial } Fl_Counter simplenpartcounter { label Part callback {virkeys->relaseallkeys(0); npartcounter->value(o->value()); npart=(int) o->value()-1; simplerefresh(); virkeys->midich=master->part[npart]->Prcvchn;} tooltip {The part number} xywh {170 40 70 20} type Simple labelfont 1 align 4 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_MIDI_PARTS);} } Fl_Counter {} { label {Keyb.Oct.} callback {virkeys->relaseallkeys(0); virkeys->midioct=(int) o->value(); virkeys->take_focus();} tooltip {Midi Octave} xywh {5 190 55 20} type Simple labelsize 11 align 8 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11 code0 {o->value(virkeys->midioct);} } Fl_Button sm_indicator2 { label SM xywh {560 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate } } Fl_Window selectuiwindow { label {User Interface mode} callback {*exitprogram=1;} xywh {342 246 430 250} type Double hide non_modal } { Fl_Box {} { label {Welcome to ZynAddSubFX} xywh {5 5 425 40} labeltype SHADOW_LABEL labelfont 1 labelsize 26 } Fl_Box {} { label {Please choose the interface mode:} xywh {10 50 265 25} labelfont 1 labelsize 13 } Fl_Button {} { label Advanced callback {config.cfg.UserInterfaceMode=1; masterwindow->show(); selectuiwindow->hide();} xywh {10 165 100 35} color 229 labelfont 1 labelsize 16 } Fl_Box {} { label {.. if you have used ZynAddSubFX before, or you like to have full controll to all parameters.} xywh {110 165 310 35} labelfont 1 labelsize 11 align 144 } Fl_Button {} { label Beginner callback {simplemasterwindow->show(); selectuiwindow->hide(); config.cfg.UserInterfaceMode=2;} xywh {10 80 100 65} color 238 labelfont 1 labelsize 16 } Fl_Box {} { label {..if you are a beginner, you prefer using presets or you prefer to use simpler user interfaces. Most functionality of ZynAddSubFX will be hidden in this mode to make simple the learning/using it.} xywh {110 75 320 75} labelfont 1 labelsize 11 align 144 } Fl_Box {} { label {You can switch the interface modes anytime you want.} xywh {30 215 360 25} box BORDER_BOX color 51 labelfont 1 labelsize 11 align 144 } } } Function {updatesendwindow()} {} { code {for (int neff1=0;neff1value(master->Psysefxsend[neff1][neff2]);} {} } Function {updatepanel()} {} { code {for (int npart=0;npartrefresh(); };} {} } Function {setfilelabel(const char *filename)} {} { code {if (filename!=NULL) snprintf(&masterwindowlabel[0],100,"%s - ZynAddSubFX",fl_filename_name(filename)); else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX"); masterwindowlabel[99]='\\0'; masterwindow->label(&masterwindowlabel[0]); simplemasterwindow->label(&masterwindowlabel[0]);} {} } Function {MasterUI(Master *master_,int *exitprogram_)} {} { code {master=master_; exitprogram=exitprogram_; ninseff=0; nsyseff=0; npart=0; for (int i=0;imicrotonal); virkeyboard=new VirKeyboard(master); bankui=new BankUI(master,&npart); configui=new ConfigUI(); make_window(); \#ifdef OS_WINDOWS masterwindow->icon((char *)LoadIcon(GetModuleHandle(NULL), "zynaddsubfx_icon")); \#endif presetsui=new PresetsUI(); setfilelabel(NULL); swapefftype=0; simplerefresh();} {} } Function {~MasterUI()} {} { code {masterwindow->hide(); delete masterwindow; simplemasterwindow->hide(); delete simplemasterwindow; aboutwindow->hide(); delete aboutwindow; syseffsendwindow->hide(); delete syseffsendwindow; delete virkeyboard; delete microtonalui; delete bankui; delete configui; delete presetsui; delete panelwindow; delete selectuiwindow;} {} } Function {showUI()} {} { code {switch (config.cfg.UserInterfaceMode){ case 0:selectuiwindow->show(); break; case 1:masterwindow->show(); break; case 2:simplemasterwindow->show(); break; };} {} } Function {simplerefresh()} {} { code {partenabled->value(master->part[npart]->Penabled); if (master->part[npart]->Penabled!=0) simplelistitemgroup->activate(); else simplelistitemgroup->deactivate(); partvolume->value(master->part[npart]->Pvolume); partpanning->value(master->part[npart]->Ppanning); partrcv->value(master->part[npart]->Prcvchn); if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname); else partname->label("Click here to load a instrument"); simplelistitemgroup->redraw(); simplepartportamento->value(master->part[npart]->ctl.portamento.portamento); simpleminkcounter->value(master->part[npart]->Pminkey); simplemaxkcounter->value(master->part[npart]->Pmaxkey); simplepartkeyshiftcounter->value(master->part[npart]->Pkeyshift-64); simplesyseffsend->value(master->Psysefxvol[nsyseff][npart]);} {} } Function {do_new_master_unconditional()} {} { code {delete microtonalui; pthread_mutex_lock(&master->mutex); master->defaults(); pthread_mutex_unlock(&master->mutex); npartcounter->value(1); refresh_master_ui(); updatepanel();} {} } Function {do_new_master()} {} { code {if (fl_choice("Clear *ALL* the parameters ?","No","Yes",NULL)){ do_new_master_unconditional(); }} {} } Function {do_load_master_unconditional(const char *filename, const char *display_name)} {return_type int } { code {pthread_mutex_lock(&master->mutex); //clear all parameters master->defaults(); //load the data int result=master->loadXML(filename); master->applyparameters(false); pthread_mutex_unlock(&master->mutex); npartcounter->value(1); refresh_master_ui(); updatepanel(); if (result>=0) setfilelabel(display_name); return result;} {} } Function {do_load_master(const char* file = NULL)} {} { code {const char *filename; if (file == NULL) { filename=fl_file_chooser("Open:","({*.xmz})",NULL,0); if (filename==NULL) return; } else { filename = file; } int result = do_load_master_unconditional( filename, filename ); if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a zynaddsubfx parameters file."); else if (result<0) fl_alert("Error: Could not load the file.");} {} } Function {do_save_master(const char* file = NULL)} {} { code {const char *filename; char *tmp; int result=0; if (file == NULL) { tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0); if (tmp==NULL) return; tmp=fl_filename_setext(tmp,".xmz"); filename=tmp; result=fileexists(tmp); if (result) { result=0; if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return; } } else { filename = file; } pthread_mutex_lock(&master->mutex); result=master->saveXML(filename); pthread_mutex_unlock(&master->mutex); if (result<0) fl_alert("Error: Could not save the file."); else { \#if USE_NSM if ( nsm && nsm->is_active() ) setfilelabel( nsm->display_name ); else \#endif setfilelabel(filename); } updatepanel();} {} } Function {refresh_master_ui()} {} { code {ninseff=0; nsyseff=0; npart=0; //the Master UI npartcounter->do_callback(); syseffnocounter->do_callback(); inseffnocounter->do_callback(); masterkeyshiftcounter->value(master->Pkeyshift-64); mastervolumedial->value(master->Pvolume); globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune); microtonalui=new MicrotonalUI(&master->microtonal); nrpnbutton->value(master->ctl.NRPN.receive); updatesendwindow(); updatepanel(); //the simle MasterUI simplenpartcounter->value(1); simplesyseffnocounter->value(1); simpleinseffnocounter->value(1); simplenpartcounter->do_callback(); simplesyseffnocounter->do_callback(); simpleinseffnocounter->do_callback(); simplemasterkeyshiftcounter->value(master->Pkeyshift-64); simplemastervolumedial->value(master->Pvolume); simpleglobalfinedetuneslider->value(master->microtonal.Pglobalfinedetune); virkeys->midich=master->part[npart]->Prcvchn; simplerefresh(); bankui->hide();} {} } decl {Master *master;} {} decl {MicrotonalUI *microtonalui;} {} decl {BankUI *bankui;} {} decl {int ninseff,npart;} {} decl {int nsyseff;} {} decl {int *exitprogram;} {} decl {SysEffSend *syseffsend[NUM_SYS_EFX][NUM_SYS_EFX];} {} decl {VirKeyboard *virkeyboard;} {} decl {ConfigUI *configui;} {} decl {int swapefftype;} {} decl {char masterwindowlabel[100];} {} decl {Panellistitem *panellistitem[NUM_MIDI_PARTS];} {} decl {NioUI nioui;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/MicrotonalUI.fl000066400000000000000000000244431247673406200250650ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0106 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../Misc/Microtonal.h"} {public } class MicrotonalUI {} { Function {make_window()} {} { Fl_Window microtonaluiwindow { label Scales xywh {99 164 405 450} type Double hide } { Fl_Group {} { tooltip {Center where the note's freqs. are turned upside-down} xywh {249 2 155 45} box ENGRAVED_FRAME } { Fl_Check_Button {} { label {Invert keys} callback {microtonal->Pinvertupdown=(int) o->value(); if (microtonal->Pinvertupdown==0) centerinvertcounter->deactivate(); else centerinvertcounter->activate();} tooltip {Turn upside-down the note frequencies} xywh {254 13 55 30} down_box DOWN_BOX labelfont 1 labelsize 11 align 148 code0 {o->value(microtonal->Pinvertupdown);} } Fl_Counter centerinvertcounter { label Center callback {microtonal->Pinvertupdowncenter=(int) o->value();} xywh {319 13 80 20} labelfont 1 labelsize 11 align 130 minimum 0 maximum 127 step 1 textfont 1 code0 {o->lstep(microtonal->getoctavesize());} code1 {o->value(microtonal->Pinvertupdowncenter);} code2 {if (microtonal->Pinvertupdown==0) o->deactivate();} } } Fl_Group microtonalgroup {selected xywh {3 49 402 398} box ENGRAVED_FRAME code0 {if (microtonal->Penabled==0) o->deactivate();} } { Fl_Button applybutton { label Retune callback {apply();} tooltip {Retune the synth accorging to the inputs from "Tunnings" and "Keyboard Mappings"} xywh {8 413 107 28} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 } Fl_Value_Output octavesizeoutput { label {nts./oct.} callback {o->value(microtonal->getoctavesize());} tooltip {Notes/Octave} xywh {150 423 35 17} labelsize 10 align 5 maximum 500 step 1 value 12 textfont 1 code0 {o->value(microtonal->getoctavesize());} } Fl_Input nameinput { label {Name:} callback {snprintf((char *)microtonal->Pname,MICROTONAL_MAX_NAME_LEN,"%s",o->value());} xywh {8 64 285 25} labelfont 1 labelsize 11 align 5 code0 {o->insert((char *)microtonal->Pname);} } Fl_Input tuningsinput { label {Tunings:} xywh {8 144 182 264} type Multiline labelfont 1 labelsize 11 align 5 when 2 code0 {updateTuningsInput();} } Fl_Input commentinput { label {Comment:} callback {snprintf((char *)microtonal->Pcomment,MICROTONAL_MAX_NAME_LEN,"%s",o->value());} xywh {8 104 391 25} labelfont 1 labelsize 11 align 5 code0 {o->insert((char *)microtonal->Pcomment);} } Fl_Counter {} { label Shift callback {microtonal->Pscaleshift=(int) o->value()+64;} xywh {313 69 70 20} type Simple labelsize 11 align 1 minimum -63 maximum 64 step 1 textfont 1 code0 {o->value(microtonal->Pscaleshift-64);} } Fl_Button {} { label {Import .SCL file} callback {const char *filename; filename=fl_file_chooser("Open:","(*.scl)",NULL,0); if (filename==NULL) return; int result=microtonal->loadscl(filename); if (result==0) { updateTuningsInput(); nameinput->cut(0,nameinput->maximum_size()); nameinput->insert((char *)microtonal->Pname); nameinput->position(0); commentinput->cut(0,commentinput->maximum_size()); commentinput->insert((char *)microtonal->Pname); commentinput->position(0); tuningsinput->position(0); octavesizeoutput->do_callback(); } else { fl_alert("Error: Could not load the file."); };} tooltip {Inport Scala .scl file (tunnings)} xywh {243 411 84 15} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Group keymappinggroup { label {Keyboard Mapping} open xywh {193 144 206 264} box ENGRAVED_BOX labelfont 1 labelsize 11 } { Fl_Input mappinginput { xywh {250 147 146 258} type Multiline labelfont 1 labelsize 11 align 5 when 2 code0 {updateMappingInput();} } Fl_Counter firstnotecounter { label {First note} callback {microtonal->Pfirstkey=(int) o->value();} tooltip {First MIDI note number} xywh {199 195 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 11 code0 {o->value(microtonal->Pfirstkey);} } Fl_Counter lastnotecounter { label {Last note} callback {microtonal->Plastkey=(int) o->value();} tooltip {Last MIDI note number} xywh {199 225 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 127 textfont 1 textsize 11 code0 {o->value(microtonal->Plastkey);} } Fl_Counter middlenotecounter { label {Midle note} callback {microtonal->Pmiddlenote=(int) o->value();} tooltip {Midle note (where scale degree 0 is mapped to)} xywh {199 267 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 60 textfont 1 textsize 11 code0 {o->value(microtonal->Pmiddlenote);} } Fl_Value_Output mapsizeoutput { label {Map Size} callback {o->value(microtonal->Pmapsize);} xywh {201 382 44 20} labelsize 10 align 5 maximum 500 step 1 value 12 textfont 1 code0 {o->value(microtonal->Pmapsize);} } } Fl_Check_Button mappingenabledbutton { label ON callback {int x=(int) o->value(); microtonal->Pmappingenabled=x; if (x==0) keymappinggroup->deactivate(); else keymappinggroup->activate(); o->show();} tooltip {Enable the Mapping (otherwise the mapping is linear)} xywh {198 150 48 21} box FLAT_BOX down_box DOWN_BOX labelfont 1 code0 {o->value(microtonal->Pmappingenabled);} code1 {if (microtonal->Pmappingenabled==0) keymappinggroup->deactivate();} } Fl_Button {} { label {Import .kbm file} callback {const char *filename; filename=fl_file_chooser("Open:","(*.kbm)",NULL,0); if (filename==NULL) return; int result=microtonal->loadkbm(filename); if (result==0) { updateMappingInput(); mappinginput->position(0); mapsizeoutput->do_callback(); firstnotecounter->value(microtonal->Pfirstkey); lastnotecounter->value(microtonal->Plastkey); middlenotecounter->value(microtonal->Pmiddlenote); mapsizeoutput->do_callback(); mappingenabledbutton->value(microtonal->Pmappingenabled); mappingenabledbutton->do_callback(); afreqinput->value(microtonal->PAfreq); anotecounter->value(microtonal->PAnote); anotecounter->do_callback(); } else { fl_alert("Error: Could not load the file."); };} tooltip {Inport Scala .kbm file (keyboard mapping)} xywh {243 428 84 16} box THIN_UP_BOX labelfont 1 labelsize 10 } } Fl_Group {} { xywh {108 2 140 45} box ENGRAVED_FRAME } { Fl_Counter anotecounter { label {"A" Note} callback {microtonal->PAnote=(int) o->value(); if (microtonal->getnotefreq(microtonal->PAnote,0)<0.0) o->textcolor(FL_RED); else o->textcolor(FL_BLACK); o->redraw();} tooltip {The "A" note (the reference note for which freq. ("A" freq) is given)} xywh {173 17 65 20} labelfont 1 labelsize 10 align 129 minimum 0 maximum 127 step 1 value 69 textfont 1 textsize 10 code0 {o->lstep(12);} code1 {o->value(microtonal->PAnote);} } Fl_Value_Input afreqinput { label {"A" Freq.} callback {microtonal->PAfreq=o->value();} tooltip {The freq. of "A" note (default=440.0)} xywh {118 17 45 20} labelfont 1 labelsize 10 align 1 minimum 1 maximum 20000 step 0.001 value 440 textfont 1 textsize 10 code0 {o->value(microtonal->PAfreq);} } } Fl_Button {} { label Close callback {microtonaluiwindow->hide();} xywh {333 413 67 28} box THIN_UP_BOX } Fl_Check_Button {} { label {Enable Microtonal} callback {microtonal->Penabled=(int) o->value(); if (microtonal->Penabled==0) microtonalgroup->deactivate(); else microtonalgroup->activate();} xywh {3 3 102 45} box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11 align 148 code0 {o->value(microtonal->Penabled);} } } } Function {updateTuningsInput()} {} { code {char *tmpbuf=new char[100]; tuningsinput->cut(0,tuningsinput->maximum_size()); for (int i=0;igetoctavesize();i++){ if (i!=0) tuningsinput->insert("\\n"); microtonal->tuningtoline(i,tmpbuf,100); tuningsinput->insert(tmpbuf); }; delete []tmpbuf;} {} } Function {updateMappingInput()} {} { code {char *tmpbuf=new char[100]; mappinginput->cut(0,tuningsinput->maximum_size()); for (int i=0;iPmapsize;i++){ if (i!=0) mappinginput->insert("\\n"); if ((microtonal->Pmapping[i])==-1) snprintf(tmpbuf,100,"x"); else snprintf(tmpbuf,100,"%d",microtonal->Pmapping[i]); mappinginput->insert(tmpbuf); }; delete []tmpbuf;} {} } Function {MicrotonalUI(Microtonal *microtonal_)} {} { code {microtonal=microtonal_; make_window();} {} } Function {~MicrotonalUI()} {} { code {microtonaluiwindow->hide(); delete(microtonaluiwindow);} {} } Function {show()} {} { code {microtonaluiwindow->show();} {} } Function {apply()} {} { code {int err=microtonal->texttotunings(tuningsinput->value()); if (err>=0) fl_alert("Parse Error: The input may contain only numbers (like 232.59)\\n or divisions (like 121/64)."); if (err==-2) fl_alert("Parse Error: The input is empty."); octavesizeoutput->do_callback(); microtonal->texttomapping(mappinginput->value()); mapsizeoutput->do_callback(); anotecounter->do_callback(); //applybutton->color(FL_GRAY);} {} } decl {Microtonal *microtonal;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.C000066400000000000000000000122511247673406200227300ustar00rootroot00000000000000 /*******************************************************************************/ /* Copyright (C) 2012 Jonathan Moore Liles */ /* */ /* This program is free software; you can redistribute it and/or modify it */ /* under the terms of the GNU General Public License as published by the */ /* Free Software Foundation; either version 2 of the License, or (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; see the file COPYING. If not,write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*******************************************************************************/ #include "NSM.H" #include "../Nio/Nio.h" #include "MasterUI.h" #include #include #include #include #include extern int Pexitprogram; extern MasterUI *ui; extern NSM_Client *nsm; extern char *instance_name; NSM_Client::NSM_Client() { project_filename = 0; display_name = 0; } int command_open(const char *name, const char *display_name, const char *client_id, char **out_msg); int command_save(char **out_msg); int NSM_Client::command_save(char **out_msg) { (void) out_msg; int r = ERR_OK; ui->do_save_master(project_filename); return r; } int NSM_Client::command_open(const char *name, const char *display_name, const char *client_id, char **out_msg) { Nio::stop(); if(instance_name) free(instance_name); instance_name = strdup(client_id); Nio::start(); char *new_filename; asprintf(&new_filename, "%s.xmz", name); struct stat st; int r = ERR_OK; if(0 == stat(new_filename, &st)) { if(ui->do_load_master_unconditional(new_filename, display_name) < 0) { *out_msg = strdup("Failed to load for unknown reason"); r = ERR_GENERAL; return r; } } else ui->do_new_master_unconditional(); if(project_filename) free(project_filename); if(this->display_name) free(this->display_name); project_filename = new_filename; this->display_name = strdup(display_name); return r; } static void save_callback(Fl_Widget *, void *v) { MasterUI *ui = static_cast(v); ui->do_save_master(); } void NSM_Client::command_active(bool active) { if(active) { Fl_Menu_Item *m; //TODO see if there is a cleaner way of doing this without voiding //constness if((m=const_cast(ui->mastermenu->find_item( "&File/&Open Parameters...")))) m->label("&Import Parameters..."); if((m=const_cast(ui->simplemastermenu->find_item( "&File/&Open Parameters...")))) m->label("&Import Parameters..."); //TODO get this menu entry inserted at the right point if((m=const_cast(ui->mastermenu->find_item("&File/&Export Parameters...")))) m->show(); else ui->mastermenu->add("&File/&Export Parameters...",0,save_callback,ui); if((m=const_cast(ui->simplemastermenu->find_item("&File/&Export Parameters...")))) m->show(); else ui->simplemastermenu->add("&File/&Export Parameters...",0,save_callback,ui); ui->sm_indicator1->value(1); ui->sm_indicator2->value(1); ui->sm_indicator1->tooltip(session_manager_name()); ui->sm_indicator2->tooltip(session_manager_name()); } else { Fl_Menu_Item *m; if((m=const_cast(ui->mastermenu->find_item( "&File/&Import Parameters...")))) m->label("&Open Parameters..."); if((m=const_cast(ui->simplemastermenu->find_item( "&File/&Open Parameters...")))) m->label("&Open Parameters..."); if((m=const_cast(ui->mastermenu->find_item("&File/&Export Parameters...")))) m->hide(); if((m=const_cast(ui->simplemastermenu->find_item("&File/&Export Parameters...")))) m->hide(); ui->sm_indicator1->value(0); ui->sm_indicator2->value(0); ui->sm_indicator1->tooltip(NULL); ui->sm_indicator2->tooltip(NULL); } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.H000066400000000000000000000035571247673406200227460ustar00rootroot00000000000000 /*******************************************************************************/ /* Copyright (C) 2012 Jonathan Moore Liles */ /* */ /* This program is free software; you can redistribute it and/or modify it */ /* under the terms of the GNU General Public License as published by the */ /* Free Software Foundation; either version 2 of the License, or (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; see the file COPYING. If not,write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*******************************************************************************/ #pragma once #if USE_NSM #include "NSM/Client.H" class NSM_Client:public NSM::Client { public: char *project_filename; char *display_name; NSM_Client(); ~NSM_Client() { } protected: int command_open(const char *name, const char *display_name, const char *client_id, char **out_msg); int command_save(char **out_msg); void command_active(bool active); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/000077500000000000000000000000001247673406200226235ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.C000066400000000000000000000276641247673406200241640ustar00rootroot00000000000000 /*******************************************************************************/ /* Copyright (C) 2012 Jonathan Moore Liles */ /* */ /* This program is free software; you can redistribute it and/or modify it */ /* under the terms of the GNU General Public License as published by the */ /* Free Software Foundation; either version 2 of the License, or (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; see the file COPYING. If not,write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*******************************************************************************/ #include "Client.H" #include #include #include #include #pragma GCC diagnostic ignored "-Wunused-parameter" namespace NSM { /************************/ /* OSC Message Handlers */ /************************/ #undef OSC_REPLY #undef OSC_REPLY_ERR #define OSC_REPLY(value) lo_send_from(((NSM::Client *)user_data)->nsm_addr, \ ((NSM::Client *)user_data)->_server, \ LO_TT_IMMEDIATE, \ "/reply", \ "ss", \ path, \ value) #define OSC_REPLY_ERR(errcode, value) lo_send_from( \ ((NSM::Client *)user_data)->nsm_addr, \ ((NSM::Client *)user_data)->_server, \ LO_TT_IMMEDIATE, \ "/error", \ "sis", \ path, \ errcode, \ value) Client::Client() { nsm_addr = 0; nsm_client_id = 0; _session_manager_name = 0; nsm_is_active = false; _server = 0; _st = 0; } Client::~Client() { if(_st) stop(); if(_st) lo_server_thread_free(_st); else lo_server_free(_server); } void Client::announce(const char *application_name, const char *capabilities, const char *process_name) { // MESSAGE( "Announcing to NSM" ); lo_address to = lo_address_new_from_url(nsm_url); if(!to) // MESSAGE( "Bad address" ); return; int pid = (int)getpid(); lo_send_from(to, _server, LO_TT_IMMEDIATE, "/nsm/server/announce", "sssiii", application_name, capabilities, process_name, 1, /* api_major_version */ 0, /* api_minor_version */ pid); lo_address_free(to); } void Client::progress(float p) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/progress", "f", p); } void Client::is_dirty(void) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/is_dirty", ""); } void Client::is_clean(void) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/is_clean", ""); } void Client::message(int priority, const char *msg) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/message", "is", priority, msg); } void Client::broadcast(lo_message msg) { if(nsm_is_active) lo_send_message_from(nsm_addr, _server, "/nsm/server/broadcast", msg); } void Client::check(int timeout) { if(lo_server_wait(_server, timeout)) while(lo_server_recv_noblock(_server, 0)) {} } void Client::start() { lo_server_thread_start(_st); } void Client::stop() { lo_server_thread_stop(_st); } int Client::init(const char *nsm_url) { this->nsm_url = nsm_url; lo_address addr = lo_address_new_from_url(nsm_url); int proto = lo_address_get_protocol(addr); lo_address_free(addr); _server = lo_server_new_with_proto(NULL, proto, NULL); if(!_server) return -1; lo_server_add_method(_server, "/error", "sis", &Client::osc_error, this); lo_server_add_method(_server, "/reply", "ssss", &Client::osc_announce_reply, this); lo_server_add_method(_server, "/nsm/client/open", "sss", &Client::osc_open, this); lo_server_add_method(_server, "/nsm/client/save", "", &Client::osc_save, this); lo_server_add_method(_server, "/nsm/client/session_is_loaded", "", &Client::osc_session_is_loaded, this); lo_server_add_method(_server, NULL, NULL, &Client::osc_broadcast, this); return 0; } int Client::init_thread(const char *nsm_url) { this->nsm_url = nsm_url; lo_address addr = lo_address_new_from_url(nsm_url); int proto = lo_address_get_protocol(addr); lo_address_free(addr); _st = lo_server_thread_new_with_proto(NULL, proto, NULL); _server = lo_server_thread_get_server(_st); if(!_server || !_st) return -1; lo_server_thread_add_method(_st, "/error", "sis", &Client::osc_error, this); lo_server_thread_add_method(_st, "/reply", "ssss", &Client::osc_announce_reply, this); lo_server_thread_add_method(_st, "/nsm/client/open", "sss", &Client::osc_open, this); lo_server_thread_add_method(_st, "/nsm/client/save", "", &Client::osc_save, this); lo_server_thread_add_method(_st, "/nsm/client/session_is_loaded", "", &Client::osc_session_is_loaded, this); lo_server_thread_add_method(_st, NULL, NULL, &Client::osc_broadcast, this); return 0; } /************************/ /* OSC Message Handlers */ /************************/ int Client::osc_broadcast(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { return ((NSM::Client *)user_data)->command_broadcast(path, msg); } int Client::osc_save(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { char *out_msg = NULL; int r = ((NSM::Client *)user_data)->command_save(&out_msg); if(r) OSC_REPLY_ERR(r, (out_msg ? out_msg : "")); else OSC_REPLY("OK"); if(out_msg) free(out_msg); return 0; } int Client::osc_open(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { char *out_msg = NULL; NSM::Client *nsm = (NSM::Client *)user_data; nsm->nsm_client_id = strdup(&argv[2]->s); int r = ((NSM::Client *)user_data)->command_open(&argv[0]->s, &argv[1]->s, &argv[2]->s, &out_msg); if(r) OSC_REPLY_ERR(r, (out_msg ? out_msg : "")); else OSC_REPLY("OK"); if(out_msg) free(out_msg); return 0; } int Client::osc_session_is_loaded(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { NSM::Client *nsm = (NSM::Client *)user_data; nsm->command_session_is_loaded(); return 0; } int Client::osc_error(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { if(strcmp(&argv[0]->s, "/nsm/server/announce")) return -1; NSM::Client *nsm = (NSM::Client *)user_data; // WARNING( "Failed to register with NSM: %s", &argv[2]->s ); nsm->nsm_is_active = false; nsm->command_active(nsm->nsm_is_active); return 0; } int Client::osc_announce_reply(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { if(strcmp(&argv[0]->s, "/nsm/server/announce")) return -1; NSM::Client *nsm = (NSM::Client *)user_data; // MESSAGE( "Successfully registered. NSM says: %s", &argv[1]->s ); nsm->nsm_is_active = true; nsm->_session_manager_name = strdup(&argv[2]->s); nsm->nsm_addr = lo_address_new_from_url(lo_address_get_url(lo_message_get_source( msg))); nsm->command_active(nsm->nsm_is_active); return 0; } }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.H000066400000000000000000000133551247673406200241610ustar00rootroot00000000000000 /*******************************************************************************/ /* Copyright (C) 2012 Jonathan Moore Liles */ /* */ /* This program is free software; you can redistribute it and/or modify it */ /* under the terms of the GNU General Public License as published by the */ /* Free Software Foundation; either version 2 of the License, or (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; see the file COPYING. If not,write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*******************************************************************************/ #pragma once #include namespace NSM { class Client { private: const char *nsm_url; lo_server _server; lo_server_thread _st; lo_address nsm_addr; bool nsm_is_active; char *nsm_client_id; char *_session_manager_name; public: enum { ERR_OK = 0, ERR_GENERAL = -1, ERR_INCOMPATIBLE_API = -2, ERR_BLACKLISTED = -3, ERR_LAUNCH_FAILED = -4, ERR_NO_SUCH_FILE = -5, ERR_NO_SESSION_OPEN = -6, ERR_UNSAVED_CHANGES = -7, ERR_NOT_NOW = -8 }; Client(); virtual ~Client(); bool is_active(void) { return nsm_is_active; } const char *session_manager_name(void) { return _session_manager_name; } /* Client->Server methods */ void is_dirty(void); void is_clean(void); void progress(float f); void message(int priority, const char *msg); void announce(const char *appliction_name, const char *capabilities, const char *process_name); void broadcast(lo_message msg); /* init without threading */ int init(const char *nsm_url); /* init with threading */ int init_thread(const char *nsm_url); /* call this periodically to check for new messages */ void check(int timeout = 0); /* or call these to start and stop a thread (must do your own locking in handler!) */ void start(void); void stop(void); protected: /* Server->Client methods */ virtual int command_open(const char *name, const char *display_name, const char *client_id, char **out_msg) = 0; virtual int command_save(char **out_msg) = 0; virtual void command_active(bool) { } virtual void command_session_is_loaded(void) { } /* invoked when an unrecognized message is received. Should return 0 if you handled it, -1 otherwise. */ virtual int command_broadcast(const char *, lo_message) { return -1; } private: /* osc handlers */ static int osc_open(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data); static int osc_save(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data); static int osc_announce_reply(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data); static int osc_error(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data); static int osc_session_is_loaded(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data); static int osc_broadcast(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data); }; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.cpp000066400000000000000000000037611247673406200236640ustar00rootroot00000000000000#include "NioUI.h" #include "../Nio/Nio.h" #include #include #include #include #include #include #include #include #include #include using namespace std; NioUI::NioUI() :Fl_Window(200, 100, 400, 400, "New IO Controls") { //hm, I appear to be leaking memory Fl_Group *settings = new Fl_Group(0, 20, 400, 400 - 35, "Settings"); { audio = new Fl_Choice(60, 80, 100, 25, "Audio"); audio->callback(audioCallback); midi = new Fl_Choice(60, 100, 100, 25, "Midi"); midi->callback(midiCallback); } settings->end(); //initialize midi list { set midiList = Nio::getSources(); string source = Nio::getSource(); int midival = 0; for(set::iterator itr = midiList.begin(); itr != midiList.end(); ++itr) { midi->add(itr->c_str()); if(*itr == source) midival = midi->size() - 2; } midi->value(midival); } //initialize audio list { set audioList = Nio::getSinks(); string sink = Nio::getSink(); int audioval = 0; for(set::iterator itr = audioList.begin(); itr != audioList.end(); ++itr) { audio->add(itr->c_str()); if(*itr == sink) audioval = audio->size() - 2; } audio->value(audioval); } resizable(this); size_range(400, 300); } NioUI::~NioUI() {} void NioUI::refresh() {} void NioUI::midiCallback(Fl_Widget *c) { bool good = Nio::setSource(static_cast(c)->text()); static_cast(c)->textcolor(fl_rgb_color(255 * !good, 0, 0)); } void NioUI::audioCallback(Fl_Widget *c) { bool good = Nio::setSink(static_cast(c)->text()); static_cast(c)->textcolor(fl_rgb_color(255 * !good, 0, 0)); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.h000066400000000000000000000005571247673406200233310ustar00rootroot00000000000000#ifndef NIOUI_H #define NIOUI_H #include #include class NioUI:public Fl_Window { public: NioUI(); ~NioUI(); void refresh(); private: class Fl_Choice * midi; class Fl_Choice * audio; static void midiCallback(Fl_Widget *c); static void audioCallback(Fl_Widget *c); }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl000066400000000000000000001017671247673406200244660ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include "../Synth/OscilGen.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "../Misc/Master.h"} {public } decl {\#include "ResonanceUI.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include "WidgetPDial.h"} {public } decl {\#include "EnvelopeUI.h"} {public } decl {\#include "LFOUI.h"} {public } decl {\#include "FilterUI.h"} {public } decl {\#include "PresetsUI.h"} {public } decl {\#include } {public } class OscilSpectrum {: {public Fl_Box} } { Function {OscilSpectrum(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {oscil=NULL;} {} } Function {init(OscilGen *oscil_,int oscbase_,Master *master_)} {} { code {oscil=oscil_; oscbase=oscbase_; master=master_;} {} } Function {draw()} {} { code {int ox=x(),oy=y(),lx=w(),ly=h(),i; const int maxdb=60;//must be multiple of 10 int GX=2; int n=lx/GX-1; if (n>synth->oscilsize/2) n=synth->oscilsize/2; float x; float* spc=new float[n]; for (i=0;imutex); if (oscbase==0) oscil->getspectrum(n,spc,0); else oscil->getspectrum(n,spc,1); pthread_mutex_unlock(&master->mutex); //normalize float max=0; for (i=0;iactive_r()) fl_color(this->parent()->selection_color()); else fl_color(this->parent()->color()); fl_line_style(FL_DOT); for (i=1;iactive_r()) fl_color(this->parent()->labelcolor()); else fl_color(this->parent()->color()); fl_line_style(0); //draws the spectrum for (i=0;idB2rap(-maxdb)) x=rap2dB(x)/maxdb+1; else x=0; int val=(int) ((ly-2)*x); if (val>0) fl_line(ox+tmp,oy+ly-2-val,ox+tmp,oy+ly-2); } delete [] spc;} {} } decl {OscilGen *oscil;} {} decl {int oscbase;} {} decl {Master *master;} {} } class PSlider {: {public Fl_Slider} } { Function {PSlider(int x,int y, int w, int h, const char *label=0):Fl_Slider(x,y,w,h,label)} {} { code {;} {} } Function {handle(int event)} {return_type int } { code {int X=x(),Y=y(),W=w(),H=h(); if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event)); if (!Fl::event_inside(X,Y,W,H)) { if (event==FL_DRAG){ Fl_Slider::handle(FL_RELEASE); Fl_Slider::handle(FL_LEAVE); deactivate(); activate(); return(1); }else{ return(Fl_Slider::handle(event)); }; } else { //Fl_Slider::handle(FL_FOCUS); Fl_Slider::handle(FL_PUSH); }; return(1);} {} } } class Oscilloscope {open : {public Fl_Box} } { Function {Oscilloscope(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {open } { code {oscil=NULL; phase=64; oscbase=0; box(FL_FLAT_BOX);} {} } Function {init(OscilGen *oscil_,Master *master_)} {} { code {oscil=oscil_; master=master_;} {} } Function {init(OscilGen *oscil_,int oscbase_,Master *master_)} {} { code {oscil=oscil_; oscbase=oscbase_; master=master_;} {} } Function {init(OscilGen *oscil_,int oscbase_,int phase_,Master *master_)} {} { code {oscil=oscil_; oscbase=oscbase_; phase=phase_; master=master_;} {} } Function {draw()} {open } { code {int ox=x(),oy=y(),lx=w(),ly=h()-1,i; float smps[synth->oscilsize]; pthread_mutex_lock(&master->mutex); if (oscbase==0) oscil->get(smps,-1.0); else oscil->getcurrentbasefunction(smps); pthread_mutex_unlock(&master->mutex); if (damage()!=1){ fl_color( fl_color_average( FL_BLACK, FL_BACKGROUND_COLOR, 0.5 )); fl_rectf(ox,oy,lx,ly); }; //normalize float max=0; for (i=0;ioscilsize;i++) if (maxactive_r()) fl_color(this->parent()->labelcolor()); else fl_color(this->parent()->color()); int GX=16;if (lxactive_r()) fl_color(this->parent()->selection_color()); else fl_color(this->parent()->labelcolor()); int lw=2; //if ((lx<135)||(ly<135)) lw=1; fl_line_style(FL_SOLID,lw); fl_begin_line(); double ph=((phase-64.0)/128.0*synth->oscilsize+synth->oscilsize); for (i=1;ioscilsize*i/lx)+ph; double y2=smps[k2%synth->oscilsize]/max; fl_vertex(i+ox,y2*ly/2.0+oy+ly/2); }; fl_end_line(); fl_line_style(FL_SOLID,0);} {} } decl {OscilGen *oscil;} {} decl {int oscbase;} {} decl {int phase;} {public } decl {Master *master;} {} } class Oscilharmonic {: {public Fl_Group} } { Function {make_window()} {open private } { Fl_Window harmonic {open private xywh {338 259 100 225} type Double box FLAT_BOX class Fl_Group visible } { Fl_Slider mag { callback {int x=64; if (Fl::event_button3()) o->value(x); else x=127-(int)o->value(); if (x==64) o->selection_color(0); else o->selection_color(222); pthread_mutex_lock(&master->mutex); oscil->Phmag[n]=x; if (x==64) { oscil->Phphase[n]=64; phase->value(64); }; oscil->prepare(); pthread_mutex_unlock(&master->mutex); display->redraw(); oldosc->redraw(); if (cbwidget!=NULL) { cbwidget->do_callback(); applybutton->color(FL_RED); applybutton->redraw(); };} xywh {0 15 15 115} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64 code0 {o->value(127-oscil->Phmag[n]);} code1 {if (oscil->Phmag[n]==64) o->selection_color(0);} class PSlider } Fl_Slider phase { callback {int x=64; if (Fl::event_button3()) o->value(x); else x=(int)o->value(); pthread_mutex_lock(&master->mutex); oscil->Phphase[n]=x; oscil->prepare(); pthread_mutex_unlock(&master->mutex); display->redraw(); oldosc->redraw(); if (cbwidget!=NULL) { cbwidget->do_callback(); applybutton->color(FL_RED); applybutton->redraw(); };} xywh {0 135 15 75} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64 code0 {o->value(oscil->Phphase[n]);} class PSlider } Fl_Box {} { xywh {15 70 5 5} box FLAT_BOX color 45 } Fl_Box {} { xywh {15 170 5 5} box FLAT_BOX color 45 } Fl_Box {} { label 01 xywh {0 210 20 15} labelfont 1 labelsize 9 align 20 code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));} } Fl_Box {} { label 01 xywh {0 0 20 15} labelfont 1 labelsize 9 align 20 code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));} } } } Function {Oscilharmonic(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {n=0; oscil=NULL; display=NULL; applybutton=NULL; cbwidget=NULL;} {} } Function {init(OscilGen *oscil_,int n_,Fl_Group *display_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *applybutton_, Master *master_)} {} { code {oscil=oscil_; n=n_; display=display_; master=master_; oldosc=oldosc_; cbwidget=cbwidget_; applybutton=applybutton_; make_window(); end(); harmonic->show();} {} } Function {refresh()} {} { code {mag->value(127-oscil->Phmag[n]); phase->value(oscil->Phphase[n]); if (oscil->Phmag[n]==64) mag->selection_color(0); else mag->selection_color(222);} {} } Function {~Oscilharmonic()} {} { code {harmonic->hide(); //delete(harmonic);} {} } decl {OscilGen *oscil;} {} decl {Fl_Group *display;} {} decl {int n;} {} decl {Fl_Widget *oldosc,*cbwidget,*applybutton;} {} decl {Master *master;} {} } class OscilEditor {open : {public PresetsUI_} } { Function {make_window()} {open } { Fl_Window osceditUI { label {ADsynth Oscillator Editor} open xywh {542 193 735 595} type Double code0 {if (oscil->ADvsPAD) o->label("PADsynth Harmonic Content Editor");} visible } { Fl_Button applybutton { label Apply callback {applybutton->color(FL_GRAY); applybutton->redraw(); if (cbapplywidget!=NULL) { cbapplywidget->do_callback(); cbapplywidget->color(FL_GRAY); cbapplywidget->redraw(); };} xywh {300 280 60 20} box THIN_UP_BOX labelfont 1 code0 {if (!oscil->ADvsPAD) o->hide();} } Fl_Group oscildisplaygroup { xywh {5 5 360 300} box UP_FRAME } { Fl_Group {} {open xywh {10 85 350 190} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 code0 {Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {osc->init(oscil,master);} } {} Fl_Box {} { label Oscillator xywh {120 10 110 20} labelfont 1 } Fl_Value_Slider rndslider { label rnd callback {oscil->Prand=(int)o->value()+64; oscildisplaygroup->redraw(); oldosc->redraw();} tooltip {Oscilator Phase Randomness: smaller than 0 is "group", larger than 0 is for each harmonic} xywh {140 285 100 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1 code0 {if (oscil->ADvsPAD) o->hide();} } Fl_Group {} {open xywh {10 30 350 50} box THIN_DOWN_BOX color 32 selection_color 218 labelcolor 63 code0 {OscilSpectrum *spc=new OscilSpectrum(o->x(),o->y(),o->w(),o->h(),"");} code1 {spc->init(oscil,0,master);} } {} Fl_Group {} { xywh {246 277 115 25} box UP_FRAME code0 {if (oscil->ADvsPAD) o->hide();} } { Fl_Choice hrndtype { label {H.rnd} callback {oscil->Pamprandtype=(int) o->value();} tooltip {Harmonic Amplitude Randomness} xywh {281 282 50 15} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sin xywh {80 80 100 20} labelfont 1 labelsize 10 } } Fl_Dial hrnddial { callback {oscil->Pamprandpower=(int) o->value();} tooltip {Oscillator's spectrum adjust parameter} xywh {338 280 18 18} maximum 127 step 1 class WidgetPDial } } } Fl_Group basefuncdisplaygroup {open selected xywh {365 5 360 300} box UP_FRAME } { Fl_Group {} { xywh {370 85 350 190} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 code0 {Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {osc->init(oscil,1,master);} } {} Fl_Dial bfslider { callback {oscil->Pbasefuncpar=(int)o->value()+64; basefuncdisplaygroup->redraw(); bfparval->value(oscil->Pbasefuncpar-64); redrawoscil();} tooltip {Base Function Parameter} xywh {520 280 20 20} minimum -64 maximum 63 step 1 class WidgetPDial } Fl_Choice bftype { label {Base.F..} callback {oscil->Pcurrentbasefunc=(int) o->value(); basefuncdisplaygroup->redraw(); redrawoscil(); if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate(); else basefuncmodulation->activate();} xywh {370 285 90 15} down_box BORDER_BOX labelsize 10 align 5 textsize 11 } { MenuItem {} { label Sine xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Triangle xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Pulse xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Saw xywh {40 40 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Power xywh {50 50 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Gauss xywh {50 50 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Diode xywh {60 60 100 20} labelfont 1 labelsize 11 } MenuItem {} { label AbsSine xywh {70 70 100 20} labelfont 1 labelsize 11 } MenuItem {} { label PulseSine xywh {80 80 100 20} labelfont 1 labelsize 11 } MenuItem {} { label StrchSine xywh {90 90 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Chirp xywh {100 100 100 20} labelfont 1 labelsize 11 } MenuItem {} { label AbsStrSine xywh {102 102 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Chebyshev xywh {112 112 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Sqr xywh {122 122 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Spike xywh {122 122 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Circle xywh {122 122 100 20} labelfont 1 labelsize 11 } } Fl_Box {} { label {Base Func.} xywh {480 10 110 20} labelfont 1 } Fl_Group {} {open xywh {370 30 350 50} box THIN_DOWN_BOX color 32 selection_color 218 labelcolor 63 code0 {OscilSpectrum *spc=new OscilSpectrum (o->x(),o->y(),o->w(),o->h(),"");} code1 {spc->init(oscil,1,master);} } {} Fl_Value_Output bfparval { label {Par.} xywh {490 285 25 15} labelsize 12 minimum -63 maximum 63 step 1 } Fl_Group basefuncmodulation { xywh {550 276 169 25} box UP_FRAME code0 {if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();} } { Fl_Choice bfmodtype { label {B.F.Mod.} callback {oscil->Pbasefuncmodulation=(int) o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} tooltip {Base function modulation} xywh {601 281 50 15} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Rev xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sine xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {80 80 100 20} labelfont 1 labelsize 10 } } Fl_Dial bfmodpar1 { callback {oscil->Pbasefuncmodulationpar1=(int)o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} tooltip {Oscillator's modulation parameter 1} xywh {659 281 15 15} maximum 127 step 1 class WidgetPDial } Fl_Dial bfmodpar2 { callback {oscil->Pbasefuncmodulationpar2=(int)o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} tooltip {Oscillator's modulation parameter 2} xywh {679 281 15 15} maximum 127 step 1 class WidgetPDial } Fl_Dial bfmodpar3 { callback {oscil->Pbasefuncmodulationpar3=(int)o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} tooltip {Oscillator's modulation parameter 3} xywh {699 281 15 15} maximum 127 step 1 class WidgetPDial } } } Fl_Choice magtype { label {Mag.Type} callback {oscil->Phmagtype=(int) o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} xywh {70 280 65 20} down_box BORDER_BOX labelsize 11 textsize 11 } { MenuItem {} { label Linear xywh {0 0 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-40dB} xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-60dB} xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-80dB} xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-100dB} xywh {40 40 100 20} labelfont 1 labelsize 11 } } Fl_Button {} { label {Use as base} callback {oscil->useasbase(); if (autoclearbutton->value()){ for (int i=0;imag->value(64); oscil->Phmag[i]=64; h[i]->phase->value(64); oscil->Phphase[i]=64; }; oscil->Phmag[0]=127; oscil->Pharmonicshift=0; harmonicshiftcounter->value(0); h[0]->mag->value(0); wshbutton->value(0); wshbutton->do_callback(); fltbutton->value(0); fltbutton->do_callback(); sabutton->value(0); sabutton->do_callback(); }; pthread_mutex_lock(&master->mutex); for (int i=0;iPhmag[i]==64) h[i]->mag->selection_color(0); else h[i]->mag->selection_color(222); }; oscil->prepare(); pthread_mutex_unlock(&master->mutex); basefuncdisplaygroup->redraw(); redrawoscil();} tooltip {Use this Oscillator as base function} xywh {5 313 85 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Button {} { label Close callback {osceditUI->hide();} xywh {668 565 62 25} box THIN_UP_BOX } Fl_Button {} { label Clear callback {if (!fl_choice("Clear the harmonics settings?","No","Yes",NULL)) return; for (int i=0;imag->value(64); oscil->Phmag[i]=64; h[i]->phase->value(64); oscil->Phphase[i]=64; }; oscil->Phmag[0]=127; h[0]->mag->value(0); for (int i=0;iPhmag[i]==64) h[i]->mag->selection_color(0); else h[i]->mag->selection_color(222); }; //harmonics->redraw(); pthread_mutex_lock(&master->mutex); oscil->prepare(); pthread_mutex_unlock(&master->mutex); redrawoscil();} xywh {670 505 55 15} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Group {} { xywh {136 308 150 30} box UP_FRAME } { Fl_Choice wshbutton { label {Wsh.} callback {oscil->Pwaveshapingfunction=(int) o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} open tooltip {Waveshaping function} xywh {166 313 55 20} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None xywh {25 25 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Atan xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Asym1 xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sine xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Qnts xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Zigzg xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Lmt xywh {95 95 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LmtU xywh {105 105 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LmtL xywh {115 115 100 20} labelfont 1 labelsize 10 } MenuItem {} { label ILmt xywh {127 127 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Clip xywh {137 137 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Asym2 xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow2 xywh {95 95 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sgm xywh {90 90 100 20} labelfont 1 labelsize 10 } } Fl_Dial wshpar { callback {oscil->Pwaveshaping=(int)o->value()+64; wsparval->value(oscil->Pwaveshaping-64); redrawoscil();} tooltip {Waveshaping Parameter} xywh {261 313 20 20} minimum -64 maximum 63 step 1 class WidgetPDial } Fl_Value_Output wsparval { xywh {229 316 25 15} labelsize 12 minimum -63 maximum 63 step 1 } } Fl_Check_Button autoclearbutton { label {Clr.} tooltip {Auto clear when using the oscillator as base function} xywh {94 313 38 20} box THIN_UP_BOX value 1 labelfont 1 labelsize 10 } Fl_Group {} { xywh {287 308 155 30} box UP_FRAME } { Fl_Choice fltbutton { label Filter callback {oscil->Pfiltertype=(int) o->value(); redrawoscil();} tooltip {Oscillator's filter type} xywh {317 313 50 20} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LP1 xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HP1a xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HP1b xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label BP1 xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label BS1 xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LP2 xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label HP2 xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label BP2 xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label BS2 xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Cos xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sin xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label LSh xywh {95 95 100 20} labelfont 1 labelsize 10 } MenuItem {} { label S xywh {105 105 100 20} labelfont 1 labelsize 10 } } Fl_Dial filtervalue1 { callback {oscil->Pfilterpar1=(int)o->value(); redrawoscil();} tooltip {Oscillator's filter parameter1} xywh {369 313 20 20} maximum 127 step 1 class WidgetPDial } Fl_Check_Button filterpref { label p callback {oscil->Pfilterbeforews=(int)o->value(); redrawoscil();} tooltip {Apply the filter before the waveshaping} xywh {417 313 20 20} down_box DOWN_BOX labelsize 10 align 24 } Fl_Dial filtervalue2 { callback {oscil->Pfilterpar2=(int)o->value(); redrawoscil();} tooltip {Oscillator's filter parameter2} xywh {394 313 20 20} maximum 127 step 1 class WidgetPDial } } Fl_Group {} { xywh {594 308 135 30} box UP_FRAME } { Fl_Choice sabutton { label {Sp.adj.} callback {oscil->Psatype=(int) o->value(); redrawoscil();} tooltip {Oscillator's spectrum adjust} xywh {635 313 60 20} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label ThrsD xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label ThrsU xywh {85 85 100 20} labelfont 1 labelsize 10 } } Fl_Dial sadjpar { callback {oscil->Psapar=(int)o->value(); redrawoscil();} tooltip {Oscillator's spectrum adjust parameter} xywh {702 313 20 20} maximum 127 step 1 class WidgetPDial } } Fl_Group {} { xywh {665 340 65 65} box UP_FRAME } { Fl_Counter harmonicshiftcounter { label {Harmonic Shift} callback {oscil->Pharmonicshift=(int)o->value(); redrawoscil();} xywh {670 365 55 15} type Simple labelsize 10 align 129 minimum -64 maximum 64 step 1 textfont 1 textsize 10 } Fl_Check_Button harmonicshiftpre { label preH callback {oscil->Pharmonicshiftfirst=(int)o->value(); redrawoscil();} tooltip {Apply the harmonic shift before the waveshaping and filtering} xywh {690 385 34 15} down_box DOWN_BOX labelsize 10 align 24 } Fl_Button {} { label R callback {oscil->Pharmonicshift=0; harmonicshiftcounter->value(0); redrawoscil();} xywh {670 385 20 15} box THIN_UP_BOX labelfont 1 labelsize 10 } } Fl_Group {} {open xywh {665 410 65 90} box UP_FRAME } { Fl_Choice adhrtype { label {Adpt.Harm.} callback {oscil->Padaptiveharmonics=(int) o->value(); redrawoscil();} tooltip {The type of the addaptive harmonics} xywh {670 425 55 15} down_box BORDER_BOX labelsize 10 align 129 when 6 textsize 10 } { MenuItem {} { label OFF xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label ON xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Square xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 2xSub xywh {110 110 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 2xAdd xywh {120 120 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 3xSub xywh {120 120 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 3xAdd xywh {130 130 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 4xSub xywh {130 130 100 20} labelfont 1 labelsize 10 } MenuItem {} { label 4xAdd xywh {140 140 100 20} labelfont 1 labelsize 10 } } Fl_Dial adhrpow { label pow callback {oscil->Padaptiveharmonicspower=(int)o->value(); redrawoscil();} tooltip {Adaptive harmonics power} xywh {700 460 25 25} labelsize 10 maximum 200 step 1 class WidgetPDial } Fl_Dial adhrbf { label baseF callback {oscil->Padaptiveharmonicsbasefreq=(int)o->value(); redrawoscil();} tooltip {Adaptive harmonics base frequency} xywh {670 460 25 25} labelsize 10 maximum 255 step 1 class WidgetPDial } Fl_Slider adhrpar { callback {oscil->Padaptiveharmonicspar=(int)o->value(); redrawoscil();} xywh {670 445 55 10} type {Horz Knob} box FLAT_BOX maximum 100 step 1 value 50 } } Fl_Group {} { xywh {443 308 150 30} box UP_FRAME } { Fl_Choice modtype { label {Mod.} callback {oscil->Pmodulation=(int) o->value(); redrawoscil();} tooltip modulation xywh {476 315 50 15} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Rev xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sine xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Pow xywh {90 90 100 20} labelfont 1 labelsize 10 } } Fl_Dial modpar1 { callback {oscil->Pmodulationpar1=(int)o->value(); redrawoscil();} tooltip {Oscillator's modulation parameter 1} xywh {534 315 15 15} maximum 127 step 1 class WidgetPDial } Fl_Dial modpar2 { callback {oscil->Pmodulationpar2=(int)o->value(); redrawoscil();} tooltip {Oscillator's modulation parameter 2} xywh {554 315 15 15} maximum 127 step 1 class WidgetPDial } Fl_Dial modpar3 { callback {oscil->Pmodulationpar3=(int)o->value(); redrawoscil();} tooltip {Oscillator's modulation parameter 3} xywh {574 315 15 15} maximum 127 step 1 class WidgetPDial } } Fl_Button {} { label Sine callback {if (!fl_choice("Convert to SINE?","No","Yes",NULL)) return; pthread_mutex_lock(&master->mutex); oscil->convert2sine(); pthread_mutex_unlock(&master->mutex); redrawoscil(); refresh();} xywh {670 525 55 15} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Button {} { label C callback {presetsui->copy(oscil);} xywh {670 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(oscil,this);} xywh {700 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Scroll _this_has_to_be_the_last { xywh {5 340 660 250} type HORIZONTAL box FLAT_BOX } { Fl_Pack harmonics {open xywh {10 345 650 225} type HORIZONTAL code0 {for (int i=0;ih(),"");h[i]->init(oscil,i,oscildisplaygroup,oldosc,cbwidget,applybutton,master);}} } {} } } } Function {OscilEditor(OscilGen *oscil_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *cbapplywidget_,Master *master_)} {} { code {oscil=oscil_; oldosc=oldosc_; cbwidget=cbwidget_; cbapplywidget=cbapplywidget_; master=master_; make_window(); refresh(); osceditUI->show();} {} } Function {~OscilEditor()} {} { code {osceditUI->hide(); //for (int i=0;ivalue(oscil->Phmagtype); rndslider->value(oscil->Prand-64); hrndtype->value(oscil->Pamprandtype); hrnddial->value(oscil->Pamprandpower); bftype->value(oscil->Pcurrentbasefunc); bfparval->value(oscil->Pbasefuncpar-64); bfslider->value(oscil->Pbasefuncpar-64); bfmodtype->value(oscil->Pbasefuncmodulation); bfmodpar1->value(oscil->Pbasefuncmodulationpar1); bfmodpar2->value(oscil->Pbasefuncmodulationpar2); bfmodpar3->value(oscil->Pbasefuncmodulationpar3); wshbutton->value(oscil->Pwaveshapingfunction); wsparval->value(oscil->Pwaveshaping-64); wshpar->value(oscil->Pwaveshaping-64); fltbutton->value(oscil->Pfiltertype); filtervalue1->value(oscil->Pfilterpar1); filtervalue2->value(oscil->Pfilterpar2); filterpref->value(oscil->Pfilterbeforews); modtype->value(oscil->Pmodulation); modpar1->value(oscil->Pmodulationpar1); modpar2->value(oscil->Pmodulationpar2); modpar3->value(oscil->Pmodulationpar3); sabutton->value(oscil->Psatype); sadjpar->value(oscil->Psapar); harmonicshiftcounter->value(oscil->Pharmonicshift); harmonicshiftpre->value(oscil->Pharmonicshiftfirst); adhrtype->value(oscil->Padaptiveharmonics); adhrbf->value(oscil->Padaptiveharmonicsbasefreq); adhrpow->value(oscil->Padaptiveharmonicspower); adhrtype->value(oscil->Padaptiveharmonicspar); for (int i=0;irefresh(); pthread_mutex_lock(&master->mutex); oscil->prepare(); pthread_mutex_unlock(&master->mutex); basefuncdisplaygroup->redraw(); redrawoscil();} {} } Function {redrawoscil()} {} { code {oscildisplaygroup->redraw(); oldosc->redraw(); if (cbwidget!=NULL) { cbwidget->do_callback(); applybutton->color(FL_RED); applybutton->redraw(); };} {} } decl {OscilGen *oscil;} {} decl {Fl_Widget *oldosc,*cbwidget,*cbapplywidget;} {} decl {Oscilharmonic *h[MAX_AD_HARMONICS];} {} decl {Master *master;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl000066400000000000000000001064141247673406200242470ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {\#include "../Params/PADnoteParameters.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "../Misc/Master.h"} {public } decl {\#include "ResonanceUI.h"} {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include "WidgetPDial.h"} {public } decl {\#include "EnvelopeUI.h"} {public } decl {\#include "LFOUI.h"} {public } decl {\#include "FilterUI.h"} {public } decl {\#include "OscilGenUI.h"} {public } decl {\#include "PresetsUI.h"} {public } class PADnoteHarmonicProfile {: {public Fl_Box} } { Function {PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {pars=NULL;} {} } Function {init(PADnoteParameters *pars,Master *master_)} {} { code {master=master_; this->pars=pars;} {} } Function {draw()} {} { code {int ox=x(),oy=y(),lx=w(),ly=h(); if (!visible()) return; float smps[lx]; float realbw=pars->getprofile(smps,lx); bool active=active_r(); //draw the equivalent bandwidth if (active) fl_color(220,220,220); else fl_color(160,165,165); fl_line_style(FL_DASH); int rbw=(int)(realbw*(lx-1.0)/2.0); fl_begin_line(); for (int i=lx/2-rbw;i<(lx/2+rbw);i++) { fl_vertex(ox+i,oy); } fl_end_line(); fl_line_style(FL_DASH); if (active) fl_color(200,200,200); else fl_color(160,160,160); for (int i=1;i<10;i++){ int kx=(int)(lx/10.0*i); fl_line( ox + kx, oy, ox + kx, oy + ly - 1 ); }; for (int i=1;i<5;i++){ int ky=(int)(ly/5.0*i); fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1); }; fl_color(120,120,120); fl_line_style(FL_DASH); fl_line(ox+lx/2,oy,ox+lx/2,oy+ly); //draw the graph fl_line_style(FL_SOLID); if (active) fl_color(180,210,240); else fl_color(150,150,155); fl_begin_polygon(); fl_vertex( ox, oy + h() ); for (int i=0;i0) // { // fl_vertex(ox+i-1,oy+ly-2-old); // fl_vertex(ox+i,oy+ly-2-val); // } }; fl_vertex( ox + w(), oy + h() ); fl_end_polygon(); fl_line_style(FL_DASH); if (active) fl_color(0,100,220); else fl_color(150,160,170); fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1); fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1); fl_line_style(0);} {} } decl {Master *master;} {} decl {PADnoteParameters *pars;} {public } } class PADnoteOvertonePosition {: {public Fl_Box} } { Function {PADnoteOvertonePosition(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {pars=NULL;} {} } Function {init(PADnoteParameters *pars,Master *master_)} {} { code {master=master_; this->pars=pars;} {} } Function {draw()} {} { code {if (!visible()) return; const int maxdb=60; int ox=x(),oy=y(),lx=w(),ly=h(); const int maxharmonic=64; for (int i=1;ioscilsize/2; float spc[n]; for (int i=0;imutex); pars->oscilgen->getspectrum(n,spc,0); pthread_mutex_unlock(&master->mutex); //normalize float max=0; for (int i=0;igetNhr(i); int kx=(int)(lx/(float)maxharmonic*nhr); if ((kx<0)||(kx>lx)) continue; spectrum[kx]=spc[i-1]/max+1e-9; }; fl_color(180,0,0); fl_line_style(0); if (pars->Pmode==2){ int old=0; for (int i=1;i1e-10)||(i==(lx-1))){ int delta=i-old; float val1=spectrum[old]; float val2=spectrum[i]; float idelta=1.0/delta; for (int j=0;jdB2rap(-maxdb)) x=rap2dB(x)/maxdb+1; else continue; int yy=(int)(x*ly); fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1); };} {} } decl {Master *master;} {} decl {PADnoteParameters *pars;} {public } } class PADnoteUI {open : {public PresetsUI_} } { Function {PADnoteUI(PADnoteParameters *parameters,Master *master_)} {open } { code {pars=parameters; master=master_; oscui=NULL; resui=new ResonanceUI(pars->resonance); make_window();} {} } Function {make_window()} {open } { Fl_Window padnotewindow { label {PAD synth Parameters} open xywh {288 386 535 435} type Double visible } { Fl_Tabs {} { callback {if (o->value()!=harmonicstructuregroup) applybutton->hide(); else applybutton->show();} open xywh {0 0 535 395} box UP_FRAME } { Fl_Group harmonicstructuregroup { label {Harmonic Structure} open selected xywh {0 20 535 375} box UP_FRAME } { Fl_Group bwprofilegroup { xywh {5 30 90 260} box UP_FRAME code0 {if (pars->Pmode!=0) o->deactivate();} } { Fl_Dial hpbasepar1 { label Width callback {pars->Php.base.par1=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {20 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.base.par1);} class WidgetPDial } Fl_Choice hpbasetype { label {Base Type} callback {pars->Php.base.type=o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {15 45 75 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code0 {o->value(pars->Php.base.type);} } { MenuItem {} { label Gauss xywh {15 15 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Square xywh {25 25 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DoubleExp xywh {35 35 100 20} labelfont 1 labelsize 10 } } Fl_Dial hpfreqmult { label FreqMlt callback {pars->Php.freqmult=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {55 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.freqmult);} class WidgetPDial } Fl_Dial hpmpar1 { label Str callback {pars->Php.modulator.par1=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {15 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.modulator.par1);} class WidgetPDial } Fl_Dial hpmfreq { label SFreq callback {pars->Php.modulator.freq=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {40 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.modulator.freq);} class WidgetPDial } Fl_Group {} { xywh {10 160 80 105} box BORDER_BOX } { Fl_Choice hpamptype { label AmpMultiplier callback {pars->Php.amp.type=o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {15 175 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code0 {o->value(pars->Php.amp.type);} } { MenuItem {} { label OFF xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Gauss xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Sine xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Flat xywh {75 75 100 20} labelfont 1 labelsize 10 } } Fl_Choice hpampmode { label AmpMode callback {pars->Php.amp.mode=o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {15 205 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code0 {o->value(pars->Php.amp.mode);} } { MenuItem {} { label Sum xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Mult xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Div1 xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Div2 xywh {90 90 100 20} labelfont 1 labelsize 10 } } Fl_Dial hpamppar1 { label Par1 callback {pars->Php.amp.par1=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {15 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.amp.par1);} class WidgetPDial } Fl_Dial hpamppar2 { label Par2 callback {pars->Php.amp.par2=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {55 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.amp.par2);} class WidgetPDial } } Fl_Check_Button hpautoscale { label autoscale callback {pars->Php.autoscale=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {10 270 60 15} down_box DOWN_BOX labelsize 10 code0 {o->value(pars->Php.autoscale);} } Fl_Choice hponehalf { callback {pars->Php.onehalf=o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {10 143 80 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code0 {o->value(pars->Php.onehalf);} } { MenuItem {} { label Full xywh {25 25 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Upper Half} xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Lower Half} xywh {35 35 100 20} labelfont 1 labelsize 10 } } Fl_Dial hpwidth { label Size callback {pars->Php.width=(int) o->value(); hprofile->redraw(); cbwidget->do_callback();} xywh {65 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Php.width);} class WidgetPDial } } Fl_Group {} { xywh {100 155 270 135} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 align 6 code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {osc->init(pars->oscilgen,master);} } {} Fl_Button {} { label Change callback {if (oscui!=NULL) delete (oscui); oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);} xywh {375 270 60 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Box cbwidget { label {Harmonic Content} callback {overtonepos->redraw(); applybutton->color(FL_RED); applybutton->redraw();} xywh {125 135 205 20} align 16 } Fl_Button {} { label Resonance callback {resui->resonancewindow->redraw(); resui->resonancewindow->show(); resui->setcbwidget(cbwidget,applybutton);} xywh {375 225 80 20} box THIN_UP_BOX } Fl_Dial bwdial { label BandWidth callback {bwcents->value(pars->setPbandwidth((int) o->value())); cbwidget->do_callback();} xywh {15 295 35 35} box ROUND_UP_BOX labelsize 10 maximum 1000 step 1 code0 {o->value(pars->Pbandwidth);} code1 {if (pars->Pmode!=0) o->deactivate();} class WidgetPDial } Fl_Value_Output bwcents { label cents xywh {55 305 55 15} labelsize 10 align 6 maximum 10000 step 0.1 code0 {o->value(pars->setPbandwidth(pars->Pbandwidth));} code1 {if (pars->Pmode!=0) o->deactivate();} } Fl_Group {} { xywh {315 295 215 45} box UP_FRAME } { Fl_Choice hrpostype { label OvertonesPosition callback {pars->Phrpos.type=o->value(); overtonepos->redraw(); cbwidget->do_callback();} xywh {325 310 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11 code0 {o->value(pars->Phrpos.type);} } { MenuItem {} { label Harmonic xywh {70 70 100 20} labelfont 1 labelsize 11 } MenuItem {} { label ShiftU xywh {80 80 100 20} labelfont 1 labelsize 11 } MenuItem {} { label ShiftL xywh {90 90 100 20} labelfont 1 labelsize 11 } MenuItem {} { label PowerU xywh {90 90 100 20} labelfont 1 labelsize 11 } MenuItem {} { label PowerL xywh {100 100 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Sine xywh {110 110 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Power xywh {120 120 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Shift selected xywh {130 130 100 20} labelfont 1 labelsize 11 } } Fl_Dial hrpospar1 { label Par1 callback {pars->Phrpos.par1=(int) o->value(); overtonepos->redraw(); cbwidget->do_callback();} xywh {425 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1 code0 {o->value(pars->Phrpos.par1);} class WidgetPDial } Fl_Dial hrpospar2 { label Par2 callback {pars->Phrpos.par2=(int) o->value(); overtonepos->redraw(); cbwidget->do_callback();} xywh {460 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1 code0 {o->value(pars->Phrpos.par2);} class WidgetPDial } Fl_Dial hrpospar3 { label ForceH callback {pars->Phrpos.par3=(int) o->value(); overtonepos->redraw(); cbwidget->do_callback();} xywh {495 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1 code0 {o->value(pars->Phrpos.par3);} class WidgetPDial } } Fl_Choice bwscale { label {Bandwidth Scale} callback {pars->Pbwscale=(int) o->value(); cbwidget->do_callback();} xywh {120 305 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11 code0 {o->value(pars->Pbwscale);} code1 {if (pars->Pmode!=0) o->deactivate();} } { MenuItem {} { label Normal xywh {95 95 100 20} labelfont 1 labelsize 11 } MenuItem {} { label EqualHz xywh {105 105 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Quater xywh {115 115 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Half xywh {125 125 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {75%} xywh {135 135 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {150%} xywh {145 145 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Double xywh {145 145 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Inv.Half} xywh {155 155 100 20} labelfont 1 labelsize 11 } } Fl_Group overtonepos { xywh {5 345 525 45} box FLAT_BOX color 51 selection_color 218 labelcolor 63 code0 {PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");} code1 {opui->init(pars,master);} } {} Fl_Choice qsamplesize { label {Sample Size} callback {pars->Pquality.samplesize=(int) o->value(); cbwidget->do_callback();} xywh {375 190 115 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11 code0 {o->value(pars->Pquality.samplesize);} } { MenuItem {} { label {16k (Tiny)} xywh {155 155 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 32k xywh {165 165 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {64k (Small)} xywh {175 175 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 128k xywh {185 185 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {256k (Normal)} xywh {205 205 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 512k xywh {200 200 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {1M (Big)} xywh {205 205 100 20} labelfont 1 labelsize 11 } } Fl_Choice qsmpoct { label {smp/oct} callback {pars->Pquality.smpoct=(int) o->value(); cbwidget->do_callback();} xywh {430 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11 code0 {o->value(pars->Pquality.smpoct);} } { MenuItem {} { label {0.5} xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 1 xywh {0 0 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 2 xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 3 xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 4 xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 6 xywh {40 40 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 12 xywh {50 50 100 20} labelfont 1 labelsize 11 } } Fl_Choice qoct { label {no.oct} callback {pars->Pquality.oct=(int) o->value(); cbwidget->do_callback();} xywh {480 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11 code0 {o->value(pars->Pquality.oct);} } { MenuItem {} { label 1 xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 2 xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 3 xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 4 xywh {40 40 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 5 xywh {50 50 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 6 xywh {60 60 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 7 xywh {70 70 100 20} labelfont 1 labelsize 11 } MenuItem {} { label 8 xywh {80 80 100 20} labelfont 1 labelsize 11 } } Fl_Choice qbasenote { label base callback {pars->Pquality.basenote=(int) o->value(); cbwidget->do_callback();} xywh {375 155 50 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11 code0 {o->value(pars->Pquality.basenote);} } { MenuItem {} { label {C-2} xywh {10 10 100 20} labelfont 1 } MenuItem {} { label {G-2} xywh {20 20 100 20} labelfont 1 } MenuItem {} { label {C-3} xywh {20 20 100 20} labelfont 1 } MenuItem {} { label {G-3} xywh {30 30 100 20} labelfont 1 } MenuItem {} { label {C-4} xywh {30 30 100 20} labelfont 1 } MenuItem {} { label {G-4} xywh {40 40 100 20} labelfont 1 } MenuItem {} { label {C-5} xywh {40 40 100 20} labelfont 1 } MenuItem {} { label {G-5} xywh {50 50 100 20} labelfont 1 } MenuItem {} { label {G-6} xywh {60 60 100 20} labelfont 1 } } Fl_Group hprofile { xywh {100 45 430 90} box FLAT_BOX color 51 selection_color 218 labelcolor 63 code0 {PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");} code1 {hpui->init(pars,master);} code2 {if (pars->Pmode!=0) { o->deactivate(); o->color(48);};} } {} Fl_Box {} { label {Profile of One Harmonic (Frequency Distribution)} xywh {160 25 315 20} } Fl_Choice spectrummode { label {Spectrum Mode} callback {pars->Pmode=(int) o->value(); if (pars->Pmode==0){ bwprofilegroup->activate(); bwdial->activate(); bwcents->activate(); hprofile->activate(); hprofile->color(51); bwscale->activate(); } else { bwprofilegroup->deactivate(); bwdial->deactivate(); bwcents->deactivate(); hprofile->deactivate(); hprofile->color(48); bwscale->deactivate(); }; cbwidget->do_callback();} xywh {220 305 90 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 11 code0 {o->value(pars->Pmode);} } { MenuItem {} { label Bandwidth xywh {105 105 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Discrete xywh {125 125 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Continous xywh {115 115 100 20} labelfont 1 labelsize 11 } } } Fl_Group {} { label {Envelopes&LFOs} open xywh {0 20 535 375} box UP_FRAME hide } { Fl_Group {} { label FREQUENCY xywh {5 275 525 115} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Group freqenv { label {PADSynth - Frequency Envelope} open xywh {10 315 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->FreqEnvelope);} class EnvelopeUI } {} Fl_Counter octave { label Octave callback {int k=(int) o->value(); if (k<0) k+=16; pars->PCoarseDetune = k*1024+ pars->PCoarseDetune%1024;} tooltip Octave xywh {470 295 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 code0 {int k=pars->PCoarseDetune/1024;} code1 {if (k>=8) k-=16;} code2 {o->value(k);} } Fl_Counter coarsedet { label {Coarse det.} callback {int k=(int) o->value(); if (k<0) k+=1024; pars->PCoarseDetune = k+ (pars->PCoarseDetune/1024)*1024;} tooltip {Coarse Detune} xywh {455 365 70 20} type Simple labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11 code0 {int k=pars->PCoarseDetune%1024;} code1 {if (k>=512) k-=1024;} code2 {o->value(k);} code3 {o->lstep(10);} } Fl_Group freqlfo { label {Frequency LFO } open xywh {215 315 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->FreqLfo);} class LFOUI } {} Fl_Slider detune { callback {pars->PDetune=(int)o->value()+8192; detunevalueoutput->do_callback();} tooltip {Fine Detune (cents)} xywh {60 295 295 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->PDetune-8192);} } Fl_Value_Output detunevalueoutput { label Detune callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));} xywh {12 295 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));} } Fl_Choice detunetype { label {Detune Type} callback {pars->PDetuneType=(int) o->value()+1; detunevalueoutput->do_callback();} open xywh {450 330 75 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code1 {o->value(pars->PDetuneType-1);} } {} Fl_Check_Button hz440 { label 440Hz callback {int x=(int) o->value(); pars->Pfixedfreq=x; if (x==0) fixedfreqetdial->deactivate(); else fixedfreqetdial->activate();} tooltip {set the base frequency to 440Hz} xywh {365 295 50 15} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->Pfixedfreq);} } Fl_Dial fixedfreqetdial { label {Eq.T.} callback {pars->PfixedfreqET=(int) o->value();} tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1 code0 {o->value(pars->PfixedfreqET);} code1 {if (pars->Pfixedfreq==0) o->deactivate();} class WidgetPDial } } Fl_Group {} { label AMPLITUDE xywh {5 25 240 250} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Value_Slider volume { label Vol callback {pars->PVolume=(int)o->value();} tooltip Volume xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->PVolume);} } Fl_Value_Slider vsns { label {V.Sns} callback {pars->PAmpVelocityScaleFunction=(int) o->value();} tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->PAmpVelocityScaleFunction);} } Fl_Dial pan { label Pan callback {pars->PPanning=(int) o->value();} tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->PPanning);} class WidgetPDial } Fl_Dial pstr { label {P.Str.} callback {pars->PPunchStrength=(int) o->value();} tooltip {Punch Strength} xywh {125 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->PPunchStrength);} class WidgetPDial } Fl_Dial pt { label {P.t.} callback {pars->PPunchTime=(int) o->value();} tooltip {Punch Time (duration)} xywh {155 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->PPunchTime);} class WidgetPDial } Fl_Dial pstc { label {P.Stc.} callback {pars->PPunchStretch=(int) o->value();} tooltip {Punch Stretch} xywh {185 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->PPunchStretch);} class WidgetPDial } Fl_Dial pvel { label {P.Vel.} callback {pars->PPunchVelocitySensing=(int) o->value();} tooltip {Punch Velocity Sensing} xywh {215 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->PPunchVelocitySensing);} class WidgetPDial } Fl_Group ampenv { label {PADSynth - Amplitude Envelope} open xywh {10 95 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->AmpEnvelope);} class EnvelopeUI } {} Fl_Group amplfo { label {Amplitude LFO } open xywh {10 165 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->AmpLfo);} class LFOUI } {} Fl_Check_Button stereo { label Stereo callback {pars->PStereo=(int) o->value(); hprofile->redraw();} xywh {15 245 70 25} down_box DOWN_BOX code0 {o->value(pars->PStereo);} } } Fl_Group {} { label FILTER xywh {245 25 285 250} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 } { Fl_Group filterenv { label {PADSynth - Filter Envelope} open xywh {250 130 275 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->FilterEnvelope);} class EnvelopeUI } {} Fl_Group filterlfo { label {Filter LFO } open xywh {250 200 230 70} box FLAT_BOX color 47 align 144 code0 {o->init(pars->FilterLfo);} class LFOUI } {} Fl_Group filterui { label {PADsynth - Filter} open xywh {250 55 275 75} box FLAT_BOX color 50 align 144 code0 {o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);} class FilterUI } {} } } } Fl_Button applybutton { label {Apply Changes} callback {pars->applyparameters(true); o->color(FL_GRAY); if (oscui!=NULL) { oscui->applybutton->color(FL_GRAY); oscui->applybutton->redraw(); }; if (resui!=NULL) { resui->applybutton->color(FL_GRAY); resui->applybutton->redraw(); };} xywh {300 400 135 30} box THIN_UP_BOX code0 {o->color(FL_RED);} } Fl_Button {} { label Close callback {padnotewindow->hide();} xywh {440 400 90 30} box THIN_UP_BOX } Fl_Button {} { label C callback {presetsui->copy(pars);} xywh {65 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this);} xywh {95 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label export callback {char *filename; filename=fl_file_chooser("Export samples:","(*.wav)",NULL,0); if (filename==NULL) return; fl_filename_setext(filename,""); pars->export2wav(filename);} tooltip {export samples as wav file} xywh {5 400 55 30} box THIN_UP_BOX color 51 labelsize 11 align 128 } } } Function {refresh()} {} { code {volume->value(pars->PVolume); vsns->value(pars->PAmpVelocityScaleFunction); pan->value(pars->PPanning); stereo->value(pars->PStereo); pstr->value(pars->PPunchStrength); pt->value(pars->PPunchTime); pstc->value(pars->PPunchStretch); pvel->value(pars->PPunchVelocitySensing); detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune)); detune->value(pars->PDetune-8192); int k=pars->PCoarseDetune/1024;if (k>=8) k-=16; octave->value(k); detunetype->value(pars->PDetuneType-1); k=pars->PCoarseDetune%1024;if (k>=512) k-=1024; coarsedet->value(k); hz440->value(pars->Pfixedfreq); fixedfreqetdial->value(pars->PfixedfreqET); amplfo->refresh(); freqlfo->refresh(); filterlfo->refresh(); ampenv->refresh(); freqenv->refresh(); filterenv->refresh(); filterui->refresh(); /* harmonic structure parametrs */ resui->refresh(); if (oscui!=NULL) oscui->refresh(); hpbasetype->value(pars->Php.base.type); hpbasepar1->value(pars->Php.base.par1); hpfreqmult->value(pars->Php.freqmult); hpmpar1->value(pars->Php.modulator.par1); hpmfreq->value(pars->Php.modulator.freq); hpwidth->value(pars->Php.width); hponehalf->value(pars->Php.onehalf); hpamptype->value(pars->Php.amp.type); hpampmode->value(pars->Php.amp.mode); hpamppar1->value(pars->Php.amp.par1); hpamppar2->value(pars->Php.amp.par2); hpautoscale->value(pars->Php.autoscale); bwdial->value(pars->Pbandwidth); if (pars->Pmode==0){ bwprofilegroup->activate(); bwdial->activate(); bwcents->activate(); hprofile->activate(); hprofile->color(51); bwscale->activate(); } else { bwprofilegroup->deactivate(); bwdial->deactivate(); bwcents->deactivate(); hprofile->deactivate(); hprofile->color(48); bwscale->activate(); }; spectrummode->value(pars->Pmode); qbasenote->value(pars->Pquality.basenote); qsmpoct->value(pars->Pquality.smpoct); qoct->value(pars->Pquality.oct); qsamplesize->value(pars->Pquality.samplesize); hrpostype->value(pars->Phrpos.type); hrpospar1->value(pars->Phrpos.par1); hrpospar2->value(pars->Phrpos.par2); hrpospar3->value(pars->Phrpos.par3); hprofile->redraw(); overtonepos->redraw(); osc->redraw(); pars->applyparameters(true); applybutton->color(FL_GRAY); applybutton->parent()->redraw();} {} } Function {~PADnoteUI()} {} { code {delete(oscui); delete(resui); padnotewindow->hide(); delete(padnotewindow);} {} } decl {PADnoteParameters *pars;} {public } decl {Master *master;} {public } decl {OscilEditor *oscui;} {public } decl {Oscilloscope *osc;} {public } decl {ResonanceUI *resui;} {public } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl000066400000000000000000001163341247673406200236650ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "WidgetPDial.h"} {public } decl {\#include "EffUI.h"} {public } decl {\#include "BankUI.h"} {public } decl {\#include "ADnoteUI.h"} {public } decl {\#include "SUBnoteUI.h"} {public } decl {\#include "PADnoteUI.h"} {public } decl {\#include "../Misc/Config.h"} {public } decl {\#include "../Misc/Master.h"} {public } decl {\#include "../Misc/Part.h"} {public } class PartSysEffSend {open : {public Fl_Group} } { Function {make_window()} {open private } { Fl_Window syseffsend { private xywh {589 129 100 100} type Double box FLAT_BOX class Fl_Group visible } { Fl_Dial {} { label 01 callback {master->setPsysefxvol(npart,neff,(int) o->value());} xywh {0 0 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 130 maximum 127 step 1 code0 {o->size(25,25);} code1 {o->value(master->Psysefxvol[neff][npart]);} code2 {char tmp[10];snprintf(tmp,10,"%d",neff+1);o->copy_label(tmp);} class WidgetPDial } } } Function {PartSysEffSend(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {master=NULL; neff=0; npart=0;} {} } Function {init(Master *master_,int npart_,int neff_)} {} { code {npart=npart_; neff=neff_; master=master_; make_window(); syseffsend->show(); end();} {} } Function {~PartSysEffSend()} {} { code {syseffsend->hide(); //delete(syseffsend);} {} } decl {Master *master;} {} decl {int neff;} {} decl {int npart;} {} } class PartKitItem {open : {public Fl_Group} } { Function {make_window()} {open private } { Fl_Window partkititem { private xywh {473 406 670 100} type Double box FLAT_BOX class Fl_Group visible } { Fl_Group partkititemgroup { private xywh {55 0 605 20} code0 {if (part->kit[n].Penabled==0) o->deactivate();} } { Fl_Counter minkcounter { callback {part->kit[n].Pminkey=(int)o->value();} xywh {225 0 55 15} type Simple minimum 0 maximum 128 step 1 code0 {o->value(part->kit[n].Pminkey);} } Fl_Button {} { label m callback {if (part->lastnote>=0) minkcounter->value(part->lastnote); minkcounter->do_callback(); maxkcounter->do_callback();} tooltip {set the minimum key to the last pressed key} xywh {285 3 15 12} box THIN_UP_BOX labelsize 10 } Fl_Button {} { label M callback {if (part->lastnote>=0) maxkcounter->value(part->lastnote); maxkcounter->do_callback(); minkcounter->do_callback();} tooltip {set the maximum key to the last pressed key} xywh {315 3 15 12} box THIN_UP_BOX labelsize 10 } Fl_Button {} { label R callback {minkcounter->value(0); minkcounter->do_callback(); maxkcounter->value(127); maxkcounter->do_callback();} tooltip {reset the minimum key to 0 and maximum key to 127} xywh {300 3 15 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Button adeditbutton { label edit callback {partui->showparameters(n,0);} xywh {420 0 40 15} box THIN_UP_BOX labelsize 11 code0 {if (part->kit[n].Padenabled==0) o->deactivate();} code1 {if (n==0) o->hide();} } Fl_Button subeditbutton { label edit callback {partui->showparameters(n,1);} xywh {490 0 40 15} box THIN_UP_BOX labelsize 11 code0 {if (part->kit[n].Psubenabled==0) o->deactivate();} code1 {if (n==0) o->hide();} } Fl_Check_Button mutedcheck { callback {part->kit[n].Pmuted=(int)o->value();} private xywh {60 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4 code0 {o->value(part->kit[n].Pmuted);} } Fl_Counter maxkcounter { callback {part->kit[n].Pmaxkey=(int)o->value();} xywh {335 0 55 15} type Simple minimum 0 maximum 128 step 1 code0 {o->value(part->kit[n].Pmaxkey);} } Fl_Button labelbutton { label {Bass Drum} callback {const char *tmp=fl_input("Kit item name:",(const char *)part->kit[n].Pname); if (tmp!=NULL) snprintf((char *)part->kit[n].Pname,PART_MAX_NAME_LEN,"%s",tmp);} xywh {90 0 130 15} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 20 code0 {o->label((char *)part->kit[n].Pname);} } Fl_Check_Button adcheck { callback {part->kit[n].Padenabled=(int)o->value(); if (part->kit[n].Padenabled!=0) adeditbutton->activate(); else adeditbutton->deactivate();} private xywh {400 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4 code0 {o->value(part->kit[n].Padenabled);} code1 {if (n==0) o->hide();} } Fl_Check_Button subcheck { callback {part->kit[n].Psubenabled=(int)o->value(); if (part->kit[n].Psubenabled!=0) subeditbutton->activate(); else subeditbutton->deactivate();} private xywh {470 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4 code0 {o->value(part->kit[n].Psubenabled);} code1 {if (n==0) o->hide();} } Fl_Choice sendtoeffect { callback {if (o->value()!=0) part->kit[n].Psendtoparteffect=(int)o->value()-1; else part->kit[n].Psendtoparteffect=127;} open xywh {615 0 45 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("OFF");char nrstr[10]; for(int i=0;iadd(nrstr);};} code1 {o->value(part->kit[n].Psendtoparteffect+1);if (part->kit[n].Psendtoparteffect==127) o->value(0);} } {} Fl_Button padeditbutton { label edit callback {partui->showparameters(n,2);} xywh {560 0 40 15} box THIN_UP_BOX labelsize 11 code0 {if (part->kit[n].Ppadenabled==0) o->deactivate();} code1 {if (n==0) o->hide();} } Fl_Check_Button padcheck { callback {part->kit[n].Ppadenabled=(int)o->value(); if (part->kit[n].Ppadenabled!=0) padeditbutton->activate(); else padeditbutton->deactivate();} private xywh {540 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4 code0 {o->value(part->kit[n].Ppadenabled);} code1 {if (n==0) o->hide();} } } Fl_Check_Button enabledcheck { label 01 callback {int answer=1; if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL); if (answer!=0){ pthread_mutex_lock(&master->mutex); part->setkititemstatus(n,(int) o->value()); pthread_mutex_unlock(&master->mutex); if (o->value()==0) partkititemgroup->deactivate(); else partkititemgroup->activate(); o->redraw(); partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0 } else o->value(1);} private xywh {30 0 20 15} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4 code0 {snprintf(label,10,"%d",n+1);o->label(label);} code1 {o->value(part->kit[n].Penabled);} code2 {if (n==0) o->deactivate();} } } } Function {PartKitItem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {n=0; part=NULL;} {} } Function {refresh()} {} { code {enabledcheck->value(part->kit[n].Penabled); if (part->kit[n].Penabled==0) partkititemgroup->deactivate(); else partkititemgroup->activate(); mutedcheck->value(part->kit[n].Pmuted); labelbutton->label((char *)part->kit[n].Pname); minkcounter->value(part->kit[n].Pminkey); maxkcounter->value(part->kit[n].Pmaxkey); adcheck->value(part->kit[n].Padenabled); adcheck->do_callback(); subcheck->value(part->kit[n].Psubenabled); subcheck->do_callback(); sendtoeffect->value(part->kit[n].Psendtoparteffect+1); if (part->kit[n].Psendtoparteffect==127) sendtoeffect->value(0); this->redraw();} { callback {int answer=1; if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL); if (answer!=0){ pthread_mutex_lock(&master->mutex); part->setkititemstatus(n,(int) o->value()); pthread_mutex_unlock(&master->mutex); if (o->value()==0) partkititemgroup->deactivate(); else partkititemgroup->activate(); o->redraw(); partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0 } else o->value(1);} } } Function {init(Part *part_,int n_,Master *master_,class PartUI *partui_)} {} { code {part=part_; n=n_; partui=partui_; master=master_; make_window(); //partkititem->show(); end();} {} } Function {~PartKitItem()} {} { code {partkititem->hide(); //delete(partkititem);} {} } decl {Part *part;} {} decl {int n;} {} decl {Master *master;} {} decl {char label[10];} {} decl {class PartUI *partui;} {} } class PartUI {open : {public Fl_Group} } { Function {make_window()} {open private } { Fl_Window partgroup {open private xywh {688 264 385 180} type Double box FLAT_BOX class Fl_Group visible } { Fl_Group partgroupui {open xywh {0 0 385 180} code0 {if (part->Penabled==0) o->deactivate();} } { Fl_Dial {} { label Pan callback {part->setPpanning((int) o->value());} xywh {50 40 25 25} box ROUND_UP_BOX labelsize 11 maximum 127 step 1 code0 {o->value(part->Ppanning);} class WidgetPDial } Fl_Counter {} { label KeyShift callback {part->Pkeyshift=(int) o->value()+64;} xywh {195 45 90 20} labelsize 11 align 1 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->value(part->Pkeyshift-64);} } Fl_Scroll {} {open xywh {166 91 125 49} box UP_BOX labelfont 1 labelsize 10 align 21 } { Fl_Pack {} {open xywh {171 96 115 35} type HORIZONTAL code0 {o->spacing(5);} code1 {for (int i=0;iinit(master,npart,i);}} } {} } Fl_Button {} { label {Grand Piano} callback {int event=Fl::event_button(); if (event==FL_RIGHT_MOUSE){ const char *tmp=fl_input("Instrument name:",(const char *)part->Pname); if (tmp!=NULL) snprintf((char *)part->Pname,PART_MAX_NAME_LEN,"%s",tmp); } else { if (event==FL_LEFT_MOUSE) bankui->show(); else instrumenteditwindow->show(); };} tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {195 5 185 20} box UP_FRAME down_box DOWN_FRAME labelfont 1 labelsize 11 align 84 code0 {o->label((char *)part->Pname);} } Fl_Box {} { label {To Sys.Efx.} xywh {166 81 95 10} labelfont 1 labelsize 10 } Fl_Check_Button {} { label NoteOn callback {part->Pnoteon=(int) o->value();} tooltip {set if the part receives NoteOn messages} xywh {10 155 65 20} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(part->Pnoteon);} } Fl_Counter minkcounter { label {Min.k} callback {part->Pminkey=(int) o->value(); if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED); else o->textcolor(FL_BLACK);} tooltip {Minimum key (that the part receives NoteOn messages)} xywh {295 125 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10 code0 {o->value(part->Pminkey);} } Fl_Counter maxkcounter { label {Max.k} callback {part->Pmaxkey=(int) o->value(); if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED); else o->textcolor(FL_BLACK);} tooltip {Maximum key (that the part receives NoteOn messages)} xywh {340 125 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10 code0 {o->value(part->Pmaxkey);} } Fl_Dial {} { label Volume callback {part->setPvolume((int) o->value());} tooltip {Part Volume} xywh {10 35 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1 code0 {o->value(part->Pvolume);} class WidgetPDial } Fl_Dial {} { label {Vel.Ofs.} callback {part->Pveloffs=(int) o->value();} tooltip {Velocity Offset} xywh {135 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(part->Pveloffs);} class WidgetPDial } Fl_Dial {} { label {Vel.Sns.} callback {part->Pvelsns=(int) o->value();} tooltip {Velocity Sensing Function} xywh {95 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(part->Pvelsns);} class WidgetPDial } Fl_Button {} { label Controllers callback {ctlwindow->show();} xywh {295 90 85 30} labelfont 1 labelsize 11 } Fl_Check_Button {} { label Portamento callback {part->ctl.portamento.portamento=(int) o->value();} tooltip {Enable/Disable the portamento} xywh {95 155 88 20} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(part->ctl.portamento.portamento);} } Fl_Button {} { label {Edit instrument} callback {instrumenteditwindow->show();} xywh {15 90 130 30} color 52 labelfont 1 labelsize 13 } Fl_Button {} { label m callback {if (part->lastnote>=0) minkcounter->value(part->lastnote); minkcounter->do_callback(); maxkcounter->do_callback();} tooltip {set the minimum key to the last pressed key} xywh {315 155 15 12} box THIN_UP_BOX labelsize 10 } Fl_Button {} { label M callback {if (part->lastnote>=0) maxkcounter->value(part->lastnote); maxkcounter->do_callback(); minkcounter->do_callback();} tooltip {set the maximum key to the last pressed key} xywh {345 155 15 12} box THIN_UP_BOX labelsize 10 } Fl_Button {} { label R callback {minkcounter->value(0); minkcounter->do_callback(); maxkcounter->value(127); maxkcounter->do_callback();} tooltip {reset the minimum key to 0 and maximum key to 127} xywh {330 155 15 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Choice {} { label {MIDI Chn.Rcv.} callback {part->Prcvchn=(int) o->value();} open tooltip {receive from Midi channel} xywh {310 45 70 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {char nrstr[10]; for(int i=0;iadd(nrstr); else o->add("Drms10");};} code1 {o->value(part->Prcvchn);} } {} Fl_Choice keylimitlist { label KLmt callback {int val=0; val=atoi(o->text()); part->setkeylimit(val);} open tooltip {Key Limit} xywh {215 155 50 20} down_box BORDER_BOX labelsize 10 align 8 textfont 1 textsize 10 } {} Fl_Choice {} { label {Mode :} callback {if ((int) o->value()==0){ /* Poly (implies no legato) */ part->Ppolymode=1; part->Plegatomode=0; } else { if ((int) o->value()==1){ /* Mono (implies no legato) */ part->Ppolymode=0; part->Plegatomode=0; } else { if ((int) o->value()==2){ /* Legato (implies mono) */ part->Ppolymode=0; part->Plegatomode=1; }; }; };} open tooltip {Poly, Mono or Legato mode} xywh {80 130 64 18} down_box BORDER_BOX labelfont 1 labelsize 11 textfont 1 textsize 10 code0 {o->add("Poly"); o->add("Mono"); o->add("Legato");} code1 {if (part->Ppolymode!=0) o->value(0); else o->value(1);} code2 {if (part->Ppolymode==0 && part->Plegatomode!=0) o->value(2);} } {} } Fl_Check_Button {} { label Enabled callback {pthread_mutex_lock(&master->mutex); master->partonoff(npart,(int) o->value()); pthread_mutex_unlock(&master->mutex); if (part->Penabled==0) partgroupui->deactivate(); else partgroupui->activate();} xywh {90 5 75 20} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(part->Penabled);} } } Fl_Window ctlwindow { label Controllers open private xywh {777 261 500 130} type Double box FLAT_BOX visible } { Fl_Check_Button {} { label Expr callback {part->ctl.expression.receive=(int) o->value();} tooltip {Expression enable} xywh {155 55 45 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(part->ctl.expression.receive);} } Fl_Dial {} { label PanDpth callback {part->ctl.panning.depth=(int) o->value();} tooltip {Panning Depth} xywh {10 55 30 30} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.panning.depth);} class WidgetPDial } Fl_Dial {} { label FltCut callback {part->ctl.filtercutoff.depth=(int) o->value();} tooltip {Filter Cutoff depth} xywh {90 55 30 30} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.filtercutoff.depth);} class WidgetPDial } Fl_Dial {} { label FltQ callback {part->ctl.filterq.depth=(int) o->value();} tooltip {Filter Q depth} xywh {50 55 30 30} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.filterq.depth);} class WidgetPDial } Fl_Dial {} { label BwDpth callback {part->ctl.bandwidth.depth=(int) o->value();} tooltip {BandWidth depth} xywh {125 10 30 30} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.bandwidth.depth);} class WidgetPDial } Fl_Dial {} { label ModWh callback {part->ctl.modwheel.depth=(int) o->value();} tooltip {Modulation Wheel depth} xywh {50 10 30 30} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.modwheel.depth);} class WidgetPDial } Fl_Counter {} { label {PWheelB.Rng (cents)} callback {part->ctl.pitchwheel.bendrange=(int) o->value();} tooltip {Pitch Wheel Bend Range (cents)} xywh {165 15 110 20} labelsize 10 align 1 minimum -6400 maximum 6400 step 1 code0 {o->value(part->ctl.pitchwheel.bendrange);} code1 {o->lstep(100);} } Fl_Check_Button {} { label FMamp callback {part->ctl.fmamp.receive=(int) o->value();} tooltip {FM amplitude enable} xywh {205 55 60 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(part->ctl.fmamp.receive);} } Fl_Check_Button {} { label Vol callback {part->ctl.volume.receive=(int) o->value();} tooltip {Volume enable} xywh {155 80 45 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(part->ctl.volume.receive);} } Fl_Check_Button {} { label Sustain callback {part->ctl.sustain.receive=(int) o->value(); if (part->ctl.sustain.receive==0) { part->RelaseSustainedKeys(); part->ctl.setsustain(0); };} tooltip {Sustain pedal enable} xywh {205 80 60 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(part->ctl.sustain.receive);} } Fl_Button {} { label Close callback {ctlwindow->hide();} xywh {400 107 95 20} box THIN_UP_BOX } Fl_Button {} { label {Reset all controllers} callback {part->SetController(C_resetallcontrollers,0);} xywh {5 107 210 20} box THIN_UP_BOX } Fl_Group {} { label Portamento xywh {280 15 160 90} box UP_FRAME labelsize 10 } { Fl_Check_Button {} { label Rcv callback {part->ctl.portamento.receive=(int) o->value();} tooltip {Receive Portamento Controllers} xywh {285 20 40 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(part->ctl.portamento.receive);} } Fl_Dial {} { label time callback {part->ctl.portamento.time=(int) o->value();} tooltip {Portamento time} xywh {285 60 25 25} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.portamento.time);} class WidgetPDial } Fl_Counter {} { label thresh callback {part->ctl.portamento.pitchthresh=(int) o->value();} tooltip {Minimum or max. difference of the notes in order to do the portamento (x 100 cents)} xywh {340 20 50 20} type Simple labelsize 10 minimum 0 maximum 127 step 1 code0 {o->value(part->ctl.portamento.pitchthresh);} } Fl_Check_Button {} { label {th.type} callback {part->ctl.portamento.pitchthreshtype=(int) o->value();} tooltip {Threshold type (min/max)} xywh {365 70 15 15} down_box DOWN_BOX labelsize 10 align 2 code0 {o->value(part->ctl.portamento.pitchthreshtype);} } Fl_Box {} { label {x100 cnt.} xywh {340 50 55 15} labelsize 10 align 16 } Fl_Dial {} { label {t.dn/up} callback {int x=(int) o->value(); part->ctl.portamento.updowntimestretch=x;} tooltip {Portamento time stretch (up/down)} xywh {315 60 25 25} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.portamento.updowntimestretch);} class WidgetPDial } Fl_Dial propta { label {Prp.Rate} callback {part->ctl.portamento.propRate=(int) o->value();} tooltip {Distance required to double change from nonpropotinal portamento time} xywh {405 20 25 25} labelsize 9 maximum 127 step 1 code0 {o->value(part->ctl.portamento.propRate);} class WidgetPDial } Fl_Dial proptb { label {Prp.Dpth} callback {part->ctl.portamento.propDepth=(int) o->value();} tooltip {The difference from nonproportinal portamento} xywh {405 60 25 25} labelsize 9 maximum 127 step 1 code0 {o->value(part->ctl.portamento.propDepth);} class WidgetPDial } Fl_Check_Button {} { label {Proprt.} callback {part->ctl.portamento.proportional=(int) o->value(); if(o->value()){propta->activate();proptb->activate();} else {propta->deactivate();proptb->deactivate();}} tooltip {Enable Proportinal Portamento (over fixed Portamento)} xywh {285 40 50 15} box THIN_UP_BOX down_box DOWN_BOX labelsize 9 code0 {o->value(part->ctl.portamento.proportional);} code1 {if(o->value()){propta->activate();proptb->activate();}} code2 {else {propta->deactivate();proptb->deactivate();}} } } Fl_Group {} { label Resonance xywh {445 15 50 90} box UP_FRAME labelsize 10 } { Fl_Dial {} { label BWdpth callback {part->ctl.resonancebandwidth.depth=(int) o->value();} tooltip {BandWidth controller depth} xywh {455 60 25 25} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.resonancebandwidth.depth);} class WidgetPDial } Fl_Dial {} { label CFdpth callback {part->ctl.resonancecenter.depth=(int) o->value();} tooltip {Center Frequency controller Depth} xywh {455 20 25 25} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.resonancecenter.depth);} class WidgetPDial } } Fl_Check_Button {} { label {Exp MWh} callback {part->ctl.modwheel.exponential=(int) o->value();} tooltip {Exponential modulation wheel} xywh {10 15 40 25} down_box DOWN_BOX labelsize 10 align 148 code0 {o->value(part->ctl.modwheel.exponential);} } Fl_Check_Button {} { label {Exp BW} callback {part->ctl.bandwidth.exponential=(int) o->value();} tooltip {Exponential BandWidth Controller} xywh {85 15 35 25} down_box DOWN_BOX labelsize 10 align 148 code0 {o->value(part->ctl.bandwidth.exponential);} } } Fl_Window partfx { label {Part's Insert Effects} selected private xywh {554 660 390 145} type Double box FLAT_BOX visible } { Fl_Counter inseffnocounter { label {FX No.} callback {ninseff=(int) o->value()-1; insefftype->value(part->partefx[ninseff]->geteffect()); //insefftype->do_callback(); inseffectui->refresh(part->partefx[ninseff]); int x=part->Pefxroute[ninseff]; if (x==127) x=1; bypasseff->value(part->Pefxbypass[ninseff]); sendtochoice->value(x);} xywh {5 110 80 20} type Simple labelfont 1 align 6 minimum 1 maximum 127 step 1 textfont 1 code0 {o->bounds(1,NUM_PART_EFX);} code1 {o->value(ninseff+1);} } Fl_Choice insefftype { label EffType callback {pthread_mutex_lock(part->mutex); part->partefx[ninseff]->changeeffect((int) o->value()); pthread_mutex_unlock(part->mutex); inseffectui->refresh(part->partefx[ninseff]);} xywh {155 110 70 15} down_box BORDER_BOX labelsize 10 align 6 code0 {o->value(part->partefx[ninseff]->geteffect());} } { MenuItem {} { label {No Effect} xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {110 110 100 20} labelfont 1 labelsize 10 } } Fl_Group inseffectuigroup { xywh {5 5 380 100} box FLAT_BOX color 48 } { Fl_Group inseffectui { xywh {5 5 380 95} code0 {o->init(part->partefx[ninseff]);} class EffUI } {} } Fl_Button {} { label Close callback {partfx->hide();} xywh {325 115 60 20} box THIN_UP_BOX } Fl_Choice sendtochoice { label {Send To.} callback {int x=(int) o->value(); part->Pefxroute[ninseff]=x; if (x==2) part->partefx[ninseff]->setdryonly(true); else part->partefx[ninseff]->setdryonly(false);} xywh {235 110 80 15} down_box BORDER_BOX labelsize 10 align 6 code0 {int x=part->Pefxroute[ninseff]; if (x==127) x=1;} code1 {o->value(x);} } { MenuItem {} { label {Next Effect} xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Part Out} xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {Dry Out} xywh {65 65 100 20} labelfont 1 labelsize 10 } } Fl_Check_Button bypasseff { label bypass callback {part->Pefxbypass[ninseff]=(((int)o->value())!=0);} tooltip {if the effect is not used (is bypassed)} xywh {90 110 60 15} down_box DOWN_BOX labelsize 11 code0 {int x=part->Pefxbypass[ninseff];o->value(x);} } Fl_Button {} { label C callback {presetsui->copy(part->partefx[ninseff]);} xywh {90 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(part->partefx[ninseff],inseffectui); pthread_mutex_unlock(&master->mutex);} xywh {120 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Window instrumentkitlist { label {Instrument Kit} open xywh {586 566 670 370} type Double box FLAT_BOX visible } { Fl_Button {} { label {Close Window} callback {instrumentkitlist->hide();} xywh {375 350 160 20} box THIN_UP_BOX } Fl_Scroll kitlist {open xywh {0 15 670 330} type VERTICAL box UP_FRAME code0 {if (part->Pkitmode==0) o->deactivate();} } { Fl_Pack {} { xywh {0 20 670 320} code0 {for (int i=0;iinit(part,i,master,this);}} } {} } Fl_Box {} { label {No.} xywh {5 0 25 15} labelfont 1 labelsize 11 align 18 } Fl_Box {} { label {M.} xywh {55 0 25 15} labelfont 1 labelsize 11 align 18 } Fl_Box {} { label {Min.k} xywh {235 0 40 15} labelfont 1 labelsize 11 align 18 } Fl_Box {} { label {Max.k} xywh {345 0 40 15} labelfont 1 labelsize 11 align 18 } Fl_Box {} { label ADsynth xywh {405 0 50 15} labelfont 1 labelsize 11 align 18 } Fl_Box {} { label SUBsynth xywh {470 0 60 15} labelfont 1 labelsize 11 align 18 } Fl_Choice {} { label Mode callback {part->Pkitmode=(int) o->value(); if (part->Pkitmode==0) { kitlist->deactivate(); } else { kitlist->activate(); };} xywh {35 350 70 15} down_box BORDER_BOX labelsize 11 textfont 1 textsize 11 code0 {o->value(part->Pkitmode);} } { MenuItem {} { label OFF xywh {0 0 100 20} labelfont 1 labelsize 11 } MenuItem {} { label MULTI xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label SINGLE xywh {20 20 100 20} labelfont 1 labelsize 11 } } Fl_Check_Button {} { label {Drum mode} callback {part->Pdrummode=(int) o->value();} xywh {285 350 70 15} down_box DOWN_BOX labelsize 10 code0 {o->value(part->Pdrummode);} } Fl_Box {} { label {FX.r.} xywh {620 0 30 15} labelfont 1 labelsize 11 align 18 } Fl_Box {} { label PADsynth xywh {540 0 60 15} labelfont 1 labelsize 11 align 18 } } Fl_Window instrumenteditwindow { label {Instrument Edit} open xywh {247 621 395 360} type Double box FLAT_BOX visible } { Fl_Group {} { xywh {0 220 395 110} box UP_FRAME } { Fl_Group {} { label PADsynth xywh {205 245 100 80} box ENGRAVED_FRAME labelfont 1 } { Fl_Button padeditbutton { label Edit callback {showparameters(0,2);} xywh {215 280 80 35} color 51 selection_color 51 labelfont 1 labelsize 13 align 128 code0 {if (part->kit[0].Ppadenabled==0) o->deactivate();} } Fl_Check_Button padsynenabledcheck { label Enabled callback {int x=(int) o->value(); part->kit[0].Ppadenabled=x; if (x==0) padeditbutton->deactivate(); else padeditbutton->activate();} tooltip {enable/disable PADsynth} xywh {215 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11 code1 {o->value(part->kit[0].Ppadenabled);} } } Fl_Group {} { label ADsynth xywh {5 245 100 80} box ENGRAVED_FRAME labelfont 1 } { Fl_Check_Button adsynenabledcheck { label Enabled callback {int x=(int) o->value(); part->kit[0].Padenabled=x; if (x==0) adeditbutton->deactivate(); else adeditbutton->activate();} tooltip {enable/disable ADsynth} xywh {15 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11 code1 {o->value(part->kit[0].Padenabled);} } Fl_Button adeditbutton { label Edit callback {showparameters(0,0);} xywh {15 281 80 34} color 51 selection_color 51 labelfont 1 labelsize 13 align 128 code0 {if (part->kit[0].Padenabled==0) o->deactivate();} } } Fl_Group {} { label SUBsynth xywh {105 245 100 80} box ENGRAVED_FRAME labelfont 1 } { Fl_Check_Button subsynenabledcheck { label Enabled callback {int x=(int) o->value(); part->kit[0].Psubenabled=x; if (x==0) subeditbutton->deactivate(); else subeditbutton->activate();} tooltip {enable/disable SUBsynth} xywh {115 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11 code1 {o->value(part->kit[0].Psubenabled);} } Fl_Button subeditbutton { label Edit callback {showparameters(0,1);} xywh {115 280 80 35} color 51 selection_color 51 labelfont 1 labelsize 13 align 128 code0 {if (part->kit[0].Psubenabled==0) o->deactivate();} } } Fl_Button {} { label {Kit Edit} callback {instrumentkitlist->show();} xywh {310 245 80 35} color 51 selection_color 51 labelfont 1 align 128 } Fl_Button {} { label Effects callback {partfx->show();} xywh {310 290 80 35} color 51 selection_color 51 labelfont 1 labelsize 13 } } Fl_Group {} { xywh {0 5 395 215} box UP_FRAME } { Fl_Input {} { label {Author and Copyright} callback {snprintf((char *)part->info.Pauthor,MAX_INFO_TEXT_SIZE,"%s",o->value());} xywh {5 60 385 50} type Multiline color 124 labelsize 10 align 5 code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);} code1 {o->value((char *) &part->info.Pauthor);} } Fl_Input {} { label Comments callback {snprintf((char *)part->info.Pcomments,MAX_INFO_TEXT_SIZE,"%s",o->value());} xywh {5 125 385 90} type Multiline color 124 labelsize 11 align 5 code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);} code1 {o->value((char *) &part->info.Pcomments);} } Fl_Choice {} { label {Type:} callback {part->info.Ptype=o->value();} xywh {5 25 155 20} down_box BORDER_BOX labelfont 1 labelsize 11 align 5 textsize 10 code0 {o->value(part->info.Ptype);} } { MenuItem {} { label {--------------------------} xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Piano xywh {10 10 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Chromatic Percussion} xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Organ xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Guitar xywh {40 40 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Bass xywh {50 50 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Solo Strings} xywh {60 60 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Ensemble xywh {70 70 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Brass xywh {80 80 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Reed xywh {90 90 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Pipe xywh {100 100 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Synth Lead} xywh {110 110 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Synth Pad} xywh {120 120 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Synth Effects} xywh {130 130 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Ethnic xywh {140 140 100 20} labelfont 1 labelsize 11 } MenuItem {} { label Percussive xywh {150 150 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Sound Effects} xywh {160 160 100 20} labelfont 1 labelsize 11 } } } Fl_Button {} { label Close callback {instrumenteditwindow->hide();} xywh {150 335 95 25} box THIN_UP_BOX } } } Function {PartUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {part=NULL; adnoteui=NULL; subnoteui=NULL; padnoteui=NULL; lastkititem=-1;} {} } Function {init(Part *part_,Master *master_,int npart_,BankUI *bankui_)} {} { code {bankui=bankui_; part=part_; npart=npart_; master=master_; ninseff=0; make_window(); \#ifdef NTK_GUI adsynenabledcheck->selection_color(55); subsynenabledcheck->selection_color(55); padsynenabledcheck->selection_color(55); \#endif partgroup->position(this->parent()->x()+2,this->parent()->y()+2); partgroup->show(); end(); //if (config.ui.showinstrumentinfo!=0) instrumenteditwindow->show(); int klimits[]={1,2,3,4,5,6,7,8,9,10,15,20,30,50,100,0}; keylimitlist->add("OFF"); int k=0; int val=-1; char tmp[10]; while (klimits[k]!=0){ sprintf(tmp,"%d",klimits[k]); keylimitlist->add(tmp); if (val==-1){ if (klimits[k]>part->Pkeylimit) val=k; }; k++; }; if (val==-1) val=k; keylimitlist->value(val);} {} } Function {showparameters(int kititem,int engine)} {} { code {if (engine==-1){//this is used if I want to clear the engine from the part if (kititem==lastkititem) kititem=-1; else kititem=lastkititem; }; if (kititem!=lastkititem){ if (adnoteui!=NULL) delete (adnoteui); if (subnoteui!=NULL) delete (subnoteui); if (padnoteui!=NULL) delete (padnoteui); adnoteui=NULL;subnoteui=NULL;padnoteui=NULL; lastkititem=kititem; if (kititem>=NUM_KIT_ITEMS) return;//bad kit item if (kititem<0) return; if (part->kit[kititem].adpars!=NULL) adnoteui=new ADnoteUI(part->kit[kititem].adpars,master); if (part->kit[kititem].subpars!=NULL) subnoteui=new SUBnoteUI(part->kit[kititem].subpars); if (part->kit[kititem].padpars!=NULL) padnoteui=new PADnoteUI(part->kit[kititem].padpars,master); }; if ((engine==0)&&(adnoteui!=NULL)) adnoteui->ADnoteGlobalParameters->show(); if ((engine==1)&&(subnoteui!=NULL)) subnoteui->SUBparameters->show(); if ((engine==2)&&(adnoteui!=NULL)) padnoteui->padnotewindow->show();} {} } Function {~PartUI()} {} { code {if (adnoteui!=NULL) delete (adnoteui); if (subnoteui!=NULL) delete (subnoteui); if (padnoteui!=NULL) delete (padnoteui); partgroup->hide(); //delete(partgroup); ctlwindow->hide(); delete(ctlwindow); partfx->hide(); delete(partfx); instrumentkitlist->hide(); delete(instrumentkitlist); instrumenteditwindow->hide(); delete(instrumenteditwindow);} {} } decl {Part *part;} {} decl {Master *master;} {} decl {BankUI *bankui;} {} decl {ADnoteUI *adnoteui;} {} decl {SUBnoteUI *subnoteui;} {} decl {PADnoteUI *padnoteui;} {} decl {PartSysEffSend *psyef[NUM_SYS_EFX];} {} decl {int npart;} {} decl {int ninseff;} {} decl {int lastkititem;} {} decl {PartKitItem *partkititem[NUM_KIT_ITEMS];} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/PresetsUI.fl000066400000000000000000000151271247673406200244020ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {\#include } {selected public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../Params/PresetsArray.h"} {} decl {\#include "../Params/Presets.h"} {public } class PresetsUI_ {} { Function {refresh()} {open return_type {virtual void} } { code {;} {} } Function {~PresetsUI_()} {open return_type virtual } { code {;} {} } } class PresetsUI {} { Function {PresetsUI()} {} { code {p=NULL; make_window();} {} } Function {~PresetsUI()} {} { code {copywin->hide();delete(copywin); pastewin->hide();delete(pastewin);} {} } Function {make_window()} {} { Fl_Window copywin { label {Copy to Clipboard/Preset} xywh {190 173 265 430} type Double box THIN_UP_BOX color 238 hide modal } { Fl_Browser copybrowse { callback {int val=o->value(); if (val!=0){ presetname->cut(0,presetname->maximum_size()); presetname->insert(o->text(val)); };} xywh {10 25 245 320} type Select } Fl_Button copypbutton { label {Copy to Preset} callback {const char *tmp=presetname->value(); if (tmp!=NULL) { if (strlen(tmp)>0){ p->copy(tmp); copywin->hide(); }; };} xywh {145 355 110 20} box THIN_UP_BOX } Fl_Button copybutton { label {Copy to Clipboard} callback {p->copy(NULL); copywin->hide();} xywh {25 385 90 35} box THIN_UP_BOX align 192 } Fl_Button {} { label Cancel callback {copywin->hide();} xywh {160 385 80 35} box THIN_UP_BOX align 192 } Fl_Box {} { label {Type:} xywh {10 5 40 15} labelsize 11 align 20 } Fl_Box copytypetext { xywh {50 5 205 15} box FLAT_BOX color 238 labelfont 1 labelsize 11 align 20 } Fl_Input presetname { callback {const char *tmp=o->value(); if (tmp==NULL) tmp=""; if (strlen(tmp)>0) { copybutton->deactivate(); copypbutton->activate(); } else { copybutton->activate(); copypbutton->deactivate(); };} xywh {10 355 130 20} when 1 } } Fl_Window pastewin { label {Paste from Clipboard/Preset} xywh {463 173 265 430} type Double box THIN_UP_BOX color 238 hide modal } { Fl_Browser pastebrowse { callback {if (o->value()==0) { pastepbutton->deactivate(); deletepbutton->deactivate(); }else{ pastepbutton->activate(); deletepbutton->activate(); };} xywh {10 25 245 320} type Hold } Fl_Button pastepbutton { label {Paste from Preset} callback {int n=pastebrowse->value(); if (n!=0) p->paste(n); pastewin->hide(); pui->refresh();} xywh {10 355 160 20} box THIN_UP_BOX } Fl_Button pastebutton { label {Paste from Clipboard} callback {p->paste(0); pastewin->hide(); pui->refresh();} xywh {25 385 90 35} box THIN_UP_BOX align 192 } Fl_Button {} { label Cancel callback {pastewin->hide();} xywh {160 385 80 35} box THIN_UP_BOX align 192 } Fl_Box pastetypetext { xywh {55 5 200 15} box FLAT_BOX color 238 labelfont 1 labelsize 11 align 20 } Fl_Box {} { label {Type:} xywh {15 5 40 15} labelsize 11 align 20 } Fl_Button deletepbutton { label Delete callback {int n=pastebrowse->value(); if (this->p_is_PresetArray) { PresetsArray *pre = dynamic_cast(p); if (n!=0) pre->deletepreset(n); rescanArray(); } else { if (n!=0) p->deletepreset(n); rescan(); }} selected xywh {180 355 75 20} box THIN_UP_BOX } } } Function {copy(Presets *p)} {} { code {copybutton->activate(); copypbutton->deactivate(); this->p=p; this->pui=NULL; bool but=(Fl::event_button()!=FL_LEFT_MOUSE); presetname->cut(0,presetname->maximum_size()); if (but) p->copy(NULL); else { rescan(); copytypetext->label(&p->type[1]); copywin->show(); };} {} } Function {paste(Presets *p,PresetsUI_ *pui)} {} { code {this->p=p; this->pui=pui; bool but=(Fl::event_button()!=FL_LEFT_MOUSE); pastepbutton->deactivate(); deletepbutton->deactivate(); if (but) { p->paste(0); pui->refresh(); } else { rescan(); pastetypetext->label(&p->type[1]); if (p->checkclipboardtype()) pastebutton->activate(); else pastebutton->deactivate(); this->p_is_PresetArray = false; pastewin->show(); };} {} } Function {copy(Presets *p,int n)} {} { code {PresetsArray *pre = dynamic_cast(p); if(pre) pre->setelement(n); copyArray(p);} {} } Function {paste(Presets *p,PresetsUI_ *pui,int n)} {} { code {PresetsArray *pre = dynamic_cast(p); if(pre) pre->setelement(n); pasteArray(p,pui);} {} } Function {rescan()} {} { code {copybrowse->clear(); pastebrowse->clear(); p->rescanforpresets(); for (unsigned int i=0;iadd(name.c_str()); pastebrowse->add(name.c_str()); };} {} } decl {Presets *p;} {public local } decl {PresetsUI_ *pui;} {public local } Function {copyArray(Presets *p)} {open } { code {PresetsArray *pre = dynamic_cast(p); copybutton->activate(); copypbutton->deactivate(); this->p=p; this->pui=NULL; bool but=(Fl::event_button()!=FL_LEFT_MOUSE); presetname->cut(0,presetname->maximum_size()); if (but) pre->copy(NULL); else { rescanArray(); copytypetext->label(&pre->type[1]); copywin->show(); };} {} } Function {pasteArray(Presets *p,PresetsUI_ *pui)} {open } { code {PresetsArray *pre = dynamic_cast(p); this->p=p; this->pui=pui; bool but=(Fl::event_button()!=FL_LEFT_MOUSE); pastepbutton->deactivate(); deletepbutton->deactivate(); if (but) { pre->paste(0); pui->refresh(); } else { rescanArray(); pastetypetext->label(&pre->type[1]); if (pre->checkclipboardtype()) pastebutton->activate(); else pastebutton->deactivate(); this->p_is_PresetArray = true; pastewin->show(); };} {} } Function {rescanArray()} {open } { code {PresetsArray *pre = dynamic_cast(p); copybrowse->clear(); pastebrowse->clear(); pre->rescanforpresets(); for (unsigned int i=0;iadd(name.c_str()); pastebrowse->add(name.c_str()); };} {} } decl {bool p_is_PresetArray;} {public } } decl {PresetsUI *presetsui;} {public } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl000066400000000000000000000256671247673406200247040ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include } {} decl {\#include "../Synth/Resonance.h"} {public } decl {\#include "WidgetPDial.h"} {public } decl {\#include "PresetsUI.h"} {public } class ResonanceGraph {open : {public Fl_Box} } { Function {ResonanceGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {respar=NULL; cbwidget=NULL; applybutton=NULL;} {} } Function {init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_)} {} { code {respar=respar_; khzvalue=khzvalue_; dbvalue=dbvalue_; oldx=-1; khzval=-1;} {} } Function {draw_freq_line(float freq,int type)} {open } { code {float freqx=respar->getfreqpos(freq); switch(type){ case 0:fl_line_style(FL_SOLID);break; case 1:fl_line_style(FL_DOT);break; case 2:fl_line_style(FL_DASH);break; }; if ((freqx>0.0)&&(freqx<1.0)) fl_line(x()+(int) (freqx*w()),y(), x()+(int) (freqx*w()),y()+h());} {} } Function {draw()} {open } { code {int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy; float freqx; fl_color(FL_DARK1); fl_rectf(ox,oy,lx,ly); //draw the lines fl_color(FL_GRAY); fl_line_style(FL_SOLID); fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2); freqx=respar->getfreqpos(1000.0); if ((freqx>0.0)&&(freqx<1.0)) fl_line(ox+(int) (freqx*lx),oy, ox+(int) (freqx*lx),oy+ly); for (i=1;i<10;i++){ if(i==1){ draw_freq_line(i*100.0,0); draw_freq_line(i*1000.0,0); }else if (i==5){ draw_freq_line(i*100.0,2); draw_freq_line(i*1000.0,2); }else{ draw_freq_line(i*100.0,1); draw_freq_line(i*1000.0,1); }; }; draw_freq_line(10000.0,0); draw_freq_line(20000.0,1); fl_line_style(FL_DOT); int GY=10;if (lyPrespoints[0]/128.0*ly); for (i=1;iPrespoints[i]/128.0*ly); fl_vertex(ox+ix,oy+ly-oiy); oiy=iy; }; fl_end_line(); fl_line_style(FL_SOLID,0);} {selected } } Function {handle(int event)} {return_type int } { code {int x_=Fl::event_x()-x(); int y_=Fl::event_y()-y(); if ( (x_>=0)&&(x_=0)&&(y_value(respar->getfreqx(x_*1.0/w())/1000.0); dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB); }; if ((event==FL_PUSH)||(event==FL_DRAG)){ int leftbutton=1; if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0; if (x_<0) x_=0;if (y_<0) y_=0; if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1; if ((oldx<0)||(oldx==x_)){ int sn=(int)(x_*1.0/w()*N_RES_POINTS); int sp=127-(int)(y_*1.0/h()*127); if (leftbutton!=0) respar->setpoint(sn,sp); else respar->setpoint(sn,64); } else { int x1=oldx; int x2=x_; int y1=oldy; int y2=y_; if (oldx>x_){ x1=x_;y1=y_; x2=oldx;y2=oldy; }; for (int i=0;isetpoint(sn,sp); else respar->setpoint(sn,64); }; }; oldx=x_;oldy=y_; redraw(); }; if (event==FL_RELEASE) { oldx=-1; if (cbwidget!=NULL) { cbwidget->do_callback(); if (applybutton!=NULL) { applybutton->color(FL_RED); applybutton->redraw(); }; }; }; return(1);} {} } Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton)} {} { code {this->cbwidget=cbwidget; this->applybutton=applybutton;} {} } decl {Fl_Value_Output *khzvalue;} {} decl {Fl_Value_Output *dbvalue;} {} decl {Resonance *respar;} {} decl {int oldx,oldy;} {} decl {float khzval;} {public } decl {Fl_Widget *cbwidget,*applybutton;} {} } class ResonanceUI {open : PresetsUI_ } { Function {make_window()} {open } { Fl_Window resonancewindow { label Resonance open xywh {120 70 780 305} type Double hide } { Fl_Value_Output khzvalue { label kHz xywh {415 264 45 18} labelsize 12 align 8 minimum 0.001 maximum 48 step 0.01 textfont 1 textsize 12 code0 {//this widget must be before the calling widgets} } Fl_Value_Output dbvalue { label dB xywh {415 282 45 18} labelsize 12 align 8 minimum -150 maximum 150 step 0.1 textfont 1 textsize 12 code0 {//this widget must be before the calling widgets} } Fl_Group {} { xywh {6 5 768 256} box BORDER_BOX code0 {rg=new ResonanceGraph(o->x(),o->y(),o->w(),o->h(),"");} code1 {rg->init(respar,khzvalue,dbvalue);} code2 {rg->show();} } {} Fl_Button {} { label Close callback {resonancewindow->hide();} xywh {690 283 84 17} box THIN_UP_BOX } Fl_Button {} { label Zero callback {for (int i=0;isetpoint(i,64); resonancewindow->redraw(); redrawPADnoteApply();} tooltip {Clear the resonance function} xywh {491 264 66 15} box THIN_UP_BOX labelfont 1 labelsize 12 } Fl_Button {} { label Smooth callback {respar->smooth(); resonancewindow->redraw(); redrawPADnoteApply();} tooltip {Smooth the resonance function} xywh {491 282 66 18} box THIN_UP_BOX labelfont 1 labelsize 12 } Fl_Check_Button enabled { label Enable callback {respar->Penabled=(int) o->value(); redrawPADnoteApply();} xywh {6 270 78 27} box THIN_UP_BOX down_box DOWN_BOX code0 {o->value(respar->Penabled);} } Fl_Roller maxdb { callback {maxdbvo->value(o->value()); respar->PmaxdB=(int) o->value(); redrawPADnoteApply();} xywh {90 282 84 15} type Horizontal minimum 1 maximum 90 step 1 value 30 } Fl_Value_Output maxdbvo { label {Max.} callback {o->value(respar->PmaxdB);} tooltip {The Maximum amplitude (dB)} xywh {126 264 24 18} labelsize 12 minimum 1 maximum 127 step 1 value 30 textfont 1 textsize 12 code0 {o->value(respar->PmaxdB);} } Fl_Box {} { label dB xywh {150 264 24 18} } Fl_Value_Output centerfreqvo { label {C.f.} callback {o->value(respar->getcenterfreq()/1000.0);} tooltip {Center Frequency (kHz)} xywh {210 264 33 18} labelsize 12 when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1 textsize 12 code0 {o->value(respar->getcenterfreq()/1000.0);} } Fl_Value_Output octavesfreqvo { label {Oct.} callback {o->value(respar->getoctavesfreq());} tooltip {No. of octaves} xywh {210 282 33 18} labelsize 12 when 3 minimum 1 maximum 127 step 1 value 30 textfont 1 textsize 12 code0 {o->value(respar->getoctavesfreq());} } Fl_Button {} { label RND2 callback {respar->randomize(1); resonancewindow->redraw(); redrawPADnoteApply();} tooltip {Randomize the resonance function} xywh {566 276 42 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Button {} { label RND1 callback {respar->randomize(0); resonancewindow->redraw(); redrawPADnoteApply();} tooltip {Randomize the resonance function} xywh {566 264 42 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Button {} { label RND3 callback {respar->randomize(2); resonancewindow->redraw(); redrawPADnoteApply();} tooltip {Randomize the resonance function} xywh {566 288 42 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Check_Button p1st { label {P.1st} callback {respar->Pprotectthefundamental=(int) o->value(); redrawPADnoteApply();} tooltip {Protect the fundamental frequency (do not damp the first harmonic)} xywh {365 285 45 15} down_box DOWN_BOX labelsize 10 code0 {o->value(respar->Pprotectthefundamental);} } Fl_Button {} { label InterpP callback {int type; if (Fl::event_button()==FL_LEFT_MOUSE) type=0; else type=1; respar->interpolatepeaks(type); resonancewindow->redraw(); redrawPADnoteApply();} tooltip {Interpolate the peaks} xywh {365 265 46 15} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Dial centerfreq { label {C.f.} callback {respar->Pcenterfreq=(int)o->value(); centerfreqvo->do_callback(); rg->redraw(); redrawPADnoteApply();} xywh {245 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(respar->Pcenterfreq);} class WidgetPDial } Fl_Dial octavesfreq { label {Oct.} callback {respar->Poctavesfreq=(int)o->value(); octavesfreqvo->do_callback(); rg->redraw(); redrawPADnoteApply();} xywh {280 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(respar->Poctavesfreq);} class WidgetPDial } Fl_Button {} { label C callback {presetsui->copy(respar);} xywh {625 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(respar,this);} xywh {655 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button applybutton { label Apply callback {applybutton->color(FL_GRAY); applybutton->redraw(); if (cbapplywidget!=NULL) { cbapplywidget->do_callback(); cbapplywidget->color(FL_GRAY); cbapplywidget->redraw(); };} xywh {690 265 85 15} box THIN_UP_BOX labelfont 1 labelsize 11 } } } Function {ResonanceUI(Resonance *respar_)} {} { code {respar=respar_; cbwidget=NULL; cbapplywidget=NULL; make_window(); applybutton->hide();} {} } Function {~ResonanceUI()} {} { code {resonancewindow->hide();} {} } Function {redrawPADnoteApply()} {} { code {if (cbwidget!=NULL) { cbwidget->do_callback(); applybutton->color(FL_RED); applybutton->redraw(); };} {} } Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget)} {} { code {this->cbwidget=cbwidget; this->cbapplywidget=cbapplywidget; rg->setcbwidget(cbwidget,applybutton); applybutton->show();} {} } Function {refresh()} {} { code {redrawPADnoteApply(); enabled->value(respar->Penabled); maxdb->value(respar->PmaxdB); maxdbvo->value(respar->PmaxdB); centerfreqvo->value(respar->getcenterfreq()/1000.0); octavesfreqvo->value(respar->getoctavesfreq()); centerfreq->value(respar->Pcenterfreq); octavesfreq->value(respar->Poctavesfreq); p1st->value(respar->Pprotectthefundamental); rg->redraw();} {} } decl {Resonance *respar;} {public } decl {ResonanceGraph *rg;} {} decl {Fl_Widget *cbwidget,*cbapplywidget;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl000066400000000000000000000440041247673406200242700ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../globals.h"} {public } decl {\#include "WidgetPDial.h"} {public } decl {\#include "EnvelopeUI.h"} {public } decl {\#include "FilterUI.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "../Params/SUBnoteParameters.h"} {public } decl {\#include "PresetsUI.h"} {public } class SUBnoteharmonic {: {public Fl_Group} } { Function {make_window()} {private } { Fl_Window harmonic { xywh {1257 22 90 305} type Double hide class Fl_Group } { Fl_Slider mag { callback {int x=0; if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value(); else o->value(127-x); pars->Phmag[n]=x; if (pars->Phmag[n]==0) o->selection_color(0); else o->selection_color(222);} tooltip {harmonic's magnitude} xywh {0 15 10 135} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 127 code0 {o->value(127-pars->Phmag[n]);} code1 {if (pars->Phmag[n]==0) o->selection_color(0);} } Fl_Slider bw { callback {int x=64; if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value(); else o->value(x); pars->Phrelbw[n]=x;} tooltip {harmonic's bandwidth} xywh {0 157 10 130} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64 code0 {o->value(127-pars->Phrelbw[n]);} } Fl_Box {} { xywh {10 219 5 5} box FLAT_BOX color 45 code0 {if (n+1==MAX_SUB_HARMONICS) o->hide();} } Fl_Box {} { label 01 xywh {0 288 10 15} labelfont 1 labelsize 9 align 20 code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));} } Fl_Box {} { label 01 xywh {0 0 10 15} labelfont 1 labelsize 9 align 20 code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));} } } } Function {SUBnoteharmonic(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} { code {n=0;} {} } Function {init(SUBnoteParameters *pars_,int n_)} {} { code {pars=pars_; n=n_; make_window(); harmonic->show(); end();} {} } Function {refresh()} {} { code {mag->value(127-pars->Phmag[n]); if (pars->Phmag[n]==0) mag->selection_color(0); bw->value(127-pars->Phrelbw[n]);} {} } Function {~SUBnoteharmonic()} {} { code {harmonic->hide(); hide(); //delete(harmonic);} {} } decl {SUBnoteParameters *pars;} {} decl {int n;} {} } class SUBnoteUI {open : {public PresetsUI_} } { Function {make_window()} {open } { Fl_Window SUBparameters { label {SUBsynth Parameters} open xywh {213 147 735 470} type Double visible } { Fl_Scroll {} { label scroll open xywh {5 140 434 325} type HORIZONTAL box FLAT_BOX labeltype NO_LABEL } { Fl_Pack harmonics { xywh {5 145 430 325} type HORIZONTAL code0 {for (int i=0;ih(),"");h[i]->init(pars,i);}} } {} } Fl_Button {} { label Close callback {SUBparameters->hide();} xywh {625 446 105 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Group {} { label AMPLITUDE open xywh {5 5 215 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 } { Fl_Value_Slider vol { label Vol callback {pars->PVolume=(int)o->value();} tooltip Volume xywh {10 25 140 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->PVolume);} } Fl_Value_Slider vsns { label {V.Sns} callback {pars->PAmpVelocityScaleFunction=(int) o->value();} tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 45 140 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1 code0 {o->value(pars->PAmpVelocityScaleFunction);} } Fl_Dial pan { label Pan callback {pars->PPanning=(int) o->value();} tooltip {Panning (leftmost is Random)} xywh {185 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 code0 {o->value(pars->PPanning);} class WidgetPDial } Fl_Group ampenv { label {SUBsynth - Amplitude Envelope} open xywh {10 65 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->AmpEnvelope);} class EnvelopeUI } {} } Fl_Group {} { xywh {495 406 235 35} box UP_FRAME } { Fl_Counter filterstages { label {Filter Stages} callback {pars->Pnumstages=(int) o->value();} tooltip {How many times the noise is filtered} xywh {515 421 45 15} type Simple labelfont 1 labelsize 10 align 1 minimum 1 maximum 5 step 1 textsize 10 code0 {o->value(pars->Pnumstages);} } Fl_Choice magtype { label {Mag.Type} callback {pars->Phmagtype=(int) o->value();} xywh {585 421 65 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11 code0 {o->value(pars->Phmagtype);} } { MenuItem {} { label Linear xywh {20 20 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-40dB} xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-60dB} xywh {40 40 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-80dB} xywh {50 50 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {-100dB} xywh {60 60 100 20} labelfont 1 labelsize 11 } } Fl_Choice start { label Start callback {pars->Pstart=(int) o->value();} open xywh {670 421 50 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11 code0 {o->value(pars->Pstart);} } { MenuItem {} { label Zero xywh {30 30 100 20} labelfont 1 labelsize 11 } MenuItem {} { label RND xywh {40 40 100 20} labelfont 1 labelsize 11 } MenuItem {} { label {Max.} xywh {50 50 100 20} labelfont 1 labelsize 11 } } } Fl_Group freqsettingsui { label FREQUENCY open xywh {440 5 295 146} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 } { Fl_Group freqenvelopegroup { label {SUBsynth - Frequency Envelope} open xywh {445 75 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->FreqEnvelope);} code1 {if (pars->PFreqEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Check_Button freqee { label Enabled callback {pars->PFreqEnvelopeEnabled=o->value(); if (o->value()==0) freqenvelopegroup->deactivate(); else freqenvelopegroup->activate(); o->show(); freqsettingsui->redraw();} xywh {445 77 55 15} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->PFreqEnvelopeEnabled);} } Fl_Counter octave { label Octave callback {int k=(int) o->value(); if (k<0) k+=16; pars->PCoarseDetune = k*1024+ pars->PCoarseDetune%1024;} tooltip Octave xywh {670 58 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 code0 {int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;} code2 {o->value(k);} } Fl_Counter coarsedet { label {Coarse Det.} callback {int k=(int) o->value(); if (k<0) k+=1024; pars->PCoarseDetune = k+ (pars->PCoarseDetune/1024)*1024;} tooltip {Coarse Detune} xywh {655 125 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11 code0 {int k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;} code2 {o->value(k);} code3 {o->lstep(10);} } Fl_Slider detune { callback {pars->PDetune=(int)o->value()+8192; detunevalueoutput->do_callback();} tooltip {Fine Detune (cents)} xywh {495 27 230 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->PDetune-8192);} } Fl_Value_Output detunevalueoutput { label Detune callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));} xywh {448 27 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));} } Fl_Check_Button hz440 { label 440Hz callback {int x=(int) o->value(); pars->Pfixedfreq=x; if (x==0) fixedfreqetdial->deactivate(); else fixedfreqetdial->activate();} tooltip {set the base frequency to 440Hz} xywh {555 53 50 15} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->Pfixedfreq);} } Fl_Dial fixedfreqetdial { label {Eq.T.} callback {pars->PfixedfreqET=(int) o->value();} tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {610 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1 code0 {o->value(pars->PfixedfreqET);} code1 {if (pars->Pfixedfreq==0) o->deactivate();} class WidgetPDial } Fl_Choice detunetype { label {Detune Type} callback {pars->PDetuneType=(int) o->value()+1; detunevalueoutput->do_callback();} open xywh {655 94 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code1 {o->value(pars->PDetuneType-1);} } {} } Fl_Check_Button stereo { label Stereo callback {pars->Pstereo=(int) o->value();} xywh {440 406 55 35} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(pars->Pstereo);} } Fl_Button {} { label Clear callback {for (int i=0;imag->value(127); pars->Phmag[i]=0; h[i]->bw->value(64); pars->Phrelbw[i]=64; }; pars->Phmag[0]=127; h[0]->mag->value(0); SUBparameters->redraw();} tooltip {Clear the harmonics} xywh {445 446 70 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Group bandwidthsettingsui { label BANDWIDTH xywh {220 5 220 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 } { Fl_Group bandwidthenvelopegroup { label {SUBsynth - BandWidth Envelope} open xywh {225 65 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->BandWidthEnvelope);} code1 {if (pars->PBandWidthEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI } {} Fl_Check_Button bwee { label Enabled callback {pars->PBandWidthEnvelopeEnabled=o->value(); if (o->value()==0) bandwidthenvelopegroup->deactivate(); else bandwidthenvelopegroup->activate(); o->show(); bandwidthsettingsui->redraw();} xywh {225 67 55 15} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->PBandWidthEnvelopeEnabled);} } Fl_Value_Slider bandwidth { label {Band Width} callback {pars->Pbandwidth=(int) o->value();} xywh {225 40 115 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->Pbandwidth);} } Fl_Value_Slider bwidthscale { label {B.Width Scale} callback {pars->Pbwscale=(int) o->value()+64;} tooltip {How much I increase the BandWidth according to lower/higher harmonics} xywh {345 40 90 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 1 minimum -64 maximum 63 step 1 code0 {o->value(pars->Pbwscale-64);} } } Fl_Group globalfiltergroup { label FILTER xywh {440 221 290 185} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 code0 {if (pars->PGlobalFilterEnabled==0) o->deactivate();} } { Fl_Group filterenv { label {SUBsynth - Filter Envelope} open xywh {445 331 275 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->GlobalFilterEnvelope);} class EnvelopeUI } {} Fl_Group filterui { label {SUBsynthl - Filter} open xywh {445 246 275 75} box FLAT_BOX color 50 align 144 code0 {o->init(pars->GlobalFilter,&pars->PGlobalFilterVelocityScale,&pars->PGlobalFilterVelocityScaleFunction);} class FilterUI } {} } Fl_Check_Button filtere { label Enabled callback {pars->PGlobalFilterEnabled=o->value(); if (o->value()==0) globalfiltergroup->deactivate(); else globalfiltergroup->activate(); o->show(); globalfiltergroup->redraw();} xywh {445 226 85 20} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->PGlobalFilterEnabled);} } Fl_Button {} { label C callback {presetsui->copy(pars);} xywh {540 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this);} xywh {570 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Group {} { label OVERTONES open xywh {440 151 220 70} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 } { Fl_Choice spreadtype { label OvertonesPosition callback {pars->POvertoneSpread.type = (int)o->value(); pars->updateFrequencyMultipliers();} open xywh {450 190 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 10 code0 {o->value(pars->POvertoneSpread.type);} } { MenuItem {} { label Harmonic xywh {0 0 34 20} labelfont 1 labelsize 11 } MenuItem {} { label ShiftU xywh {10 10 34 20} labelfont 1 labelsize 11 } MenuItem {} { label ShiftL xywh {20 20 34 20} labelfont 1 labelsize 11 } MenuItem {} { label PowerU xywh {20 20 34 20} labelfont 1 labelsize 11 } MenuItem {} { label PowerL xywh {30 30 34 20} labelfont 1 labelsize 11 } MenuItem {} { label Sine xywh {40 40 34 20} labelfont 1 labelsize 11 } MenuItem {} { label Power xywh {50 50 34 20} labelfont 1 labelsize 11 } MenuItem {} { label Shift selected xywh {20 20 34 20} labelfont 1 labelsize 11 } } Fl_Dial spreadpar1 { label Par1 callback {pars->POvertoneSpread.par1 = o->value(); pars->updateFrequencyMultipliers();} xywh {548 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1 code0 {o->value(pars->POvertoneSpread.par1);} class WidgetPDial } Fl_Dial spreadpar2 { label Par2 callback {pars->POvertoneSpread.par2 = o->value(); pars->updateFrequencyMultipliers();} xywh {583 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1 code0 {o->value(pars->POvertoneSpread.par2);} class WidgetPDial } Fl_Dial spreadpar3 { label ForceH callback {pars->POvertoneSpread.par3 = o->value(); pars->updateFrequencyMultipliers();} xywh {618 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1 code0 {o->value(pars->POvertoneSpread.par3);} class WidgetPDial } } } } Function {refresh()} {} { code {for (int i=0;irefresh(); vol->value(pars->PVolume); vsns->value(pars->PAmpVelocityScaleFunction); pan->value(pars->PPanning); bandwidth->value(pars->Pbandwidth); bwidthscale->value(pars->Pbwscale-64); bwee->value(pars->PBandWidthEnvelopeEnabled); if (pars->PBandWidthEnvelopeEnabled==0) bandwidthenvelopegroup->deactivate(); else bandwidthenvelopegroup->activate(); bwee->show(); bandwidthsettingsui->redraw(); detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune)); spreadtype->value(pars->POvertoneSpread.type); spreadpar1->value(pars->POvertoneSpread.par1); spreadpar2->value(pars->POvertoneSpread.par2); spreadpar3->value(pars->POvertoneSpread.par3); freqee->value(pars->PFreqEnvelopeEnabled); if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate(); else freqenvelopegroup->activate(); freqee->show(); freqsettingsui->redraw(); detune->value(pars->PDetune-8192); hz440->value(pars->Pfixedfreq); fixedfreqetdial->value(pars->PfixedfreqET); int k=pars->PCoarseDetune/1024;if (k>=8) k-=16; octave->value(k); detunetype->value(pars->PDetuneType-1); k=pars->PCoarseDetune%1024;if (k>=512) k-=1024; coarsedet->value(k); filtere->value(pars->PGlobalFilterEnabled); if (pars->PGlobalFilterEnabled==0) globalfiltergroup->deactivate(); else globalfiltergroup->activate(); filtere->show(); globalfiltergroup->redraw(); stereo->value(pars->Pstereo); filterstages->value(pars->Pnumstages); magtype->value(pars->Phmagtype); start->value(pars->Pstart); ampenv->refresh(); bandwidthenvelopegroup->refresh(); freqenvelopegroup->refresh(); filterui->refresh(); filterenv->refresh();} {} } Function {SUBnoteUI(SUBnoteParameters *parameters)} {} { code {pars=parameters; make_window();} {} } Function {~SUBnoteUI()} {} { code {//for (int i=0;ihide(); delete(SUBparameters);} {} } decl {SUBnoteParameters *pars;} {} decl {SUBnoteharmonic *h[MAX_SUB_HARMONICS];} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/VirKeyboard.fl000066400000000000000000000342411247673406200247360ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} decl {//License: GNU GPL version 2 or later} {} decl {\#include } {public } decl {\#include } {public } decl {\#include } {public } decl {\#include "../globals.h"} {public } decl {\#include "../Misc/Master.h"} {public } decl {\#include "../Misc/Util.h"} {public } decl {\#include "WidgetPDial.h"} {public } decl {\#include "common.H"} {public } decl {\#ifdef NTK_GUI \#include "FL/Fl_Shared_Image.H" \#endif} {public } decl {const int keyspos[12]={0,-1,1,-2,2,3,-4,4,-5,5,-6,6};} {} decl {const int keysoct1qwerty[]={'q','2','w','3','e','r','5','t','6','y','7','u','i','9','o','0','p','[','=',']','\\\\',FL_Enter,0};} {} decl {const int keysoct2qwerty[]={'z','s','x','d','c','v','g','b','h','n','j','m',',','l','.',';','/',0};} {} decl {const int keysoct1dw[]={'\\'','2',',','3','.','p','5','y','6','f','7','g','c','9','r','0','l','/',']','=','\\\\',FL_Enter,0};} {} decl {const int keysoct2dw[]={';','o','q','e','j','k','i','x','d','b','h','m','w','n','v','s','z',0};} {} decl {const int keysoct1qwertz[]={'q','2','w','3','e','r','5','t','6','z','7','u','i','9','o','0','p',252,'\\'','+','\\\\',FL_Enter,0};} {} decl {const int keysoct2qwertz[]={'y','s','x','d','c','v','g','b','h','n','j','m',',','l','.',246,'-',0};} {} decl {const int keysoct1az[]={'a',233,'z','\\"','e','r','(','t','-','y',232,'u','i',231,'o',224,'p',65106,'=','$',0};} {} decl {const int keysoct2az[]={'w','s','x','d','c','v','g','b','h','n','j',',',';','l',':','m','!',0};} {} class VirKeys {: {public Fl_Box} } { decl {static const int N_OCT=6;} {} decl {static const int SIZE_WHITE=14;} {} decl {static const int SIZE_BLACK=8;} {} Function {VirKeys(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {master=NULL;} {} } Function {init(Master *master_)} {} { code {master=master_; for (int i=0;i=0){//white keys if (pressed[i]==0) key = white_up; else key = white_down; key->draw( ox + (kv + 7 * noct ) * white_up->w() + 3, oy ); } } for (i=0;idraw( ox + (kv + 7 * noct ) * white_up->w() - black_up->w() / 2 + 2, oy ); } } \#else if (damage()!=1){ fl_color(250,240,230); fl_rectf(ox,oy,lx,ly); fl_color(FL_BLACK); fl_line(ox,oy,ox+lx,oy); fl_line(ox,oy+ly,ox+lx,oy+ly); for (i=0;i=0){//white keys if (pressed[i]==0) fl_color(250,240,230); else fl_color(FL_BLUE); fl_rectf(ox+(kv+7*noct)*SIZE_WHITE+3,oy+ly*3/5+2, SIZE_WHITE-4,ly*2/5-3); } else {//black keys kv=keyspos[(i+1)%12]; if (pressed[i]==0) fl_color(FL_BLACK); else fl_color(FL_BLUE); fl_rectf(ox+(kv+7*noct)*SIZE_WHITE-SIZE_BLACK/2+2,oy+2, SIZE_BLACK-3,ly*3/5-5); } } \#endif} {} } Function {handle(int event)} {return_type int } { code {int i; int ly=h(); int x_=Fl::event_x()-x(); int y_=Fl::event_y()-y(); if ( (x_<0)&&(x_>w()) && (y_<0)&&(y_>h())){ return(0); }; if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){ int kpos=-1; if (y_>ly*3/5){//white keys int pos=x_/SIZE_WHITE; if (pos<0) return(1); for (i=0;i<12;i++) { if (pos%7==keyspos[i]) { kpos=pos/7*12+i; break; }; }; } else {//black keys int pos=(x_+SIZE_WHITE/2)/SIZE_WHITE; if (pos<0) return(1); for (i=1;i<12;i++) { if (pos%7==-keyspos[i]) { kpos=pos/7*12+i; break; }; }; }; if ((kpos!=-1)&&((event==FL_PUSH)||(event==FL_DRAG))&& (Fl::event_shift()==0)) { presskey(kpos,1,1); }; if ((event==FL_PUSH)&&(Fl::event_shift()!=0)) { if (pressed[kpos]==0) presskey(kpos,0,1); else relasekey(kpos,1); }; if ((event==FL_RELEASE)&&(Fl::event_shift()==0)) relaseallkeys(1); take_focus(); }; const int *keysoct1=keysoct1qwerty; const int *keysoct2=keysoct2qwerty; if (config.cfg.VirKeybLayout==2) { keysoct1=keysoct1dw; keysoct2=keysoct2dw; }else if (config.cfg.VirKeybLayout==3) { keysoct1=keysoct1qwertz; keysoct2=keysoct2qwertz; }else if (config.cfg.VirKeybLayout==4) { keysoct1=keysoct1az; keysoct2=keysoct2az; }; if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){ int key=Fl::event_key(); int kpos=-1; for (i=0;keysoct1[i]!=0;i++) if (key==keysoct1[i]) kpos=i+12*keyoct1; for (i=0;keysoct2[i]!=0;i++) if (key==keysoct2[i]) kpos=i+12*keyoct2; if (kpos==-1) return(0); if ((event==FL_KEYUP) && (Fl::event_key(key)==0) && (Fl::get_key(key)!=0)) return(0); if (event==FL_KEYDOWN) presskey(kpos,0,2); else relasekey(kpos,2); }; return(1);} {} } Function {presskey(int nk,int exclusive,int type)} {} { code {//Exclusive means that multiple keys can be pressed at once //when the user uses the shift key if (nk>=N_OCT*12) return; if ((nk<0)&&(exclusive==0)) { relaseallkeys(type); return; }; if (nk<0) return; if (pressed[nk]!=0) return;//the key is already pressed if (exclusive!=0) relaseallkeys(type); pressed[nk]=type; damage(1); float vel=midivel; if (rndvelocity!=0){ vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity; }; pthread_mutex_lock(&master->mutex); master->noteOn(midich,nk+midioct*12,(int)vel); pthread_mutex_unlock(&master->mutex);} {} } Function {relasekey(int nk,int type)} {} { code {if ((nk<0)||(nk>=N_OCT*12)) return; if (pressed[nk]==0) return;//the key is not pressed if ((type!=0)&&(pressed[nk]!=type)) return; pressed[nk]=0; damage(1); pthread_mutex_lock(&master->mutex); master->noteOff(midich,nk+12*midioct); pthread_mutex_unlock(&master->mutex);} {} } Function {relaseallkeys(int type)} {} { code {for (int i=0;ihide();} open xywh {100 597 650 130} type Double visible } { Fl_Box virkeys { label Keyboard xywh {10 10 590 80} box FLAT_BOX color 17 code0 {o->init(master);} class VirKeys } Fl_Counter {} { label {"qwer.." Oct} callback {relaseallkeys(); virkeys->keyoct1=(int) o->value(); virkeys->take_focus();} tooltip {keys "q2w3er5t6y..." octave} xywh {380 95 45 15} type Simple labelsize 10 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 10 code0 {o->value(virkeys->keyoct1);} } Fl_Counter {} { label {"zxcv.." Oct} callback {relaseallkeys(); virkeys->keyoct2=(int) o->value(); virkeys->take_focus();} tooltip {keys "zsxdcvgbh..." octave} xywh {380 110 45 15} type Simple labelsize 10 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 10 code0 {o->value(virkeys->keyoct2);} } Fl_Value_Slider {} { label Vel callback {virkeys->midivel=(int) o->value(); virkeys->take_focus();} selected tooltip Velocity xywh {95 105 100 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum 1 maximum 127 step 1 code0 {o->value(virkeys->midivel);} } Fl_Counter {} { label {Oct.} callback {relaseallkeys(); virkeys->midioct=(int) o->value(); virkeys->take_focus();} tooltip {Midi Octave} xywh {255 100 55 20} type Simple labelsize 11 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11 code0 {o->value(virkeys->midioct);} } Fl_Button {} { label Close callback {relaseallkeys(); virkeyboardwindow->hide();} xywh {545 105 55 20} box THIN_UP_BOX } Fl_Value_Slider {} { label Cval callback {int ctl=midictl; pthread_mutex_lock(&master->mutex); master->setController(virkeys->midich,ctl,(int) o->value()); pthread_mutex_unlock(&master->mutex); virkeys->take_focus();} tooltip {Controller value} xywh {605 10 15 115} type {Vert Fill} box ENGRAVED_BOX selection_color 229 labelsize 8 align 5 minimum 127 maximum 0 step 1 value 64 textsize 7 } Fl_Choice {} { label Controller callback {switch((int) o->value()+1){ case 1: midictl=C_modwheel; break; case 2: midictl=C_volume; break; case 3: midictl=C_panning; break; case 4: midictl=C_expression; break; case 5: midictl=C_sustain; break; case 6: midictl=C_portamento; break; case 7: midictl=C_filterq; break; case 8: midictl=C_filtercutoff; break; case 9: midictl=C_bandwidth; break; case 10: midictl=C_fmamp; break; case 11: midictl=C_resonance_center; break; case 12: midictl=C_resonance_bandwidth; break; default: midictl=C_NULL; break; }; virkeys->take_focus();} xywh {435 105 100 15} down_box BORDER_BOX labelsize 10 align 5 when 6 textfont 1 textsize 10 code0 {midictl=C_filtercutoff;o->value(7);} } { MenuItem {} { label {01: Mod.Wheel} xywh {0 0 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {07: Volume} xywh {10 10 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {10: Panning} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {11: Expression} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {64: Sustain} xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {65: Portamento} xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {71: Filter Q} xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {74: Filter Freq.} xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {75: Bandwidth} xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {76: FM Gain} xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {77: Res. c. freq} xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label {78: Res. bw.} xywh {110 110 100 20} labelfont 1 labelsize 10 } } Fl_Roller pitchwheelroller { label Pwh callback {pthread_mutex_lock(&master->mutex); master->setController(virkeys->midich,C_pitchwheel,-(int) o->value()); pthread_mutex_unlock(&master->mutex); virkeys->take_focus();} tooltip {Pitch Wheel} xywh {625 10 20 95} labelsize 8 align 1 when 3 minimum -8192 maximum 8192 step 64 } Fl_Button {} { label R callback {pitchwheelroller->value(0); pitchwheelroller->do_callback();} tooltip {Reset Pitch Bend} xywh {625 110 20 15} box THIN_UP_BOX labelfont 1 } Fl_Dial {} { label Vrnd callback {virkeys->rndvelocity=(int) o->value();} tooltip {Velocity Randomness} xywh {205 105 20 20} box ROUND_UP_BOX labelsize 10 align 129 maximum 127 step 1 code0 {o->value(virkeys->rndvelocity);} class WidgetPDial } Fl_Choice partrcv { label {MIDI Ch.} callback {relaseallkeys(); virkeys->midich=(int) o->value(); virkeys->take_focus();} open tooltip {Send to Midi Channel} xywh {20 105 65 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {char nrstr[10]; for(int i=0;iadd(nrstr); else o->add("Drum10");};} code1 {o->value(virkeys->midich);} } {} } } Function {VirKeyboard(Master *master_)} {} { code {master=master_; midictl=75; make_window();} {} } Function {~VirKeyboard()} {} { code {delete virkeyboardwindow;} {} } Function {show()} {} { code {virkeyboardwindow->show();} {} } Function {relaseallkeys()} {} { code {virkeys->relaseallkeys(0);} {} } decl {Master *master;} {} decl {int midictl;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.cpp000066400000000000000000000133271247673406200250350ustar00rootroot00000000000000// generated by Fast Light User Interface Designer (fluid) version 1.0107f #include "WidgetPDial.h" #include #include #include #include #include #include #include #include #include "../Misc/Util.h" //Copyright (c) 2003-2005 Nasca Octavian Paul //License: GNU GPL version 2 or later using namespace std; class TipWin:public Fl_Menu_Window { public: TipWin(); void draw(); void showValue(float f); void setText(const char *c); void showText(); private: void redraw(); const char *getStr() const; string tip; string text; bool textmode; }; TipWin::TipWin():Fl_Menu_Window(1, 1) { set_override(); end(); } void TipWin::draw() { //setup window draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Color(175)); fl_color(Fl_Tooltip::textcolor()); fl_font(labelfont(), labelsize()); //Draw the current string fl_draw(getStr(), 3, 3, w() - 6, h() - 6, Fl_Align(FL_ALIGN_LEFT | FL_ALIGN_WRAP)); } void TipWin::showValue(float f) { //convert the value to a string char tmp[10]; snprintf(tmp, 9, "%.2f", f); tip = tmp; textmode = false; redraw(); show(); } void TipWin::setText(const char *c) { text = c; textmode = true; redraw(); } void TipWin::showText() { if(!text.empty()) { textmode = true; redraw(); show(); } } void TipWin::redraw() { // Recalc size of window fl_font(labelfont(), labelsize()); int W = 0, H = 0; fl_measure(getStr(), W, H, 0); //provide a bit of extra space W += 8; H += 4; size(W, H); Fl_Menu_Window::redraw(); } const char *TipWin::getStr() const { return (textmode ? text : tip).c_str(); } //static int numobj = 0; WidgetPDial::WidgetPDial(int x, int y, int w, int h, const char *label) :Fl_Dial(x, y, w, h, label), oldvalue(0.0f), pos(false), textset(false) { //cout << "[" << label << "] There are now " << ++numobj << endl; Fl_Group *save = Fl_Group::current(); tipwin = new TipWin(); tipwin->hide(); Fl_Group::current(save); } WidgetPDial::~WidgetPDial() { //cout << "There are now " << --numobj << endl; delete tipwin; } int WidgetPDial::handle(int event) { //#ifdef NTK_GUI // return Fl_Dial::handle( event ); //#else double dragsize, min = minimum(), max = maximum(); int my; switch(event) { case FL_PUSH: oldvalue = value(); case FL_DRAG: getPos(); my = -(Fl::event_y() - y() - h() / 2); dragsize = 200.0f; if(Fl::event_state(FL_BUTTON1) == 0) dragsize *= 10; value(limit(oldvalue + my / dragsize * (max - min), min, max)); tipwin->showValue(value()); value_damage(); if(this->when() != 0) do_callback(); return 1; case FL_MOUSEWHEEL: if (Fl::belowmouse() != this) return 1; my = - Fl::event_dy(); dragsize = 200.0f; if(Fl::event_state(FL_CTRL) != 0) dragsize *= 10; value(limit(value() + my / dragsize * (max - min), min, max)); tipwin->showValue(value()); value_damage(); if(this->when() != 0) do_callback(); return 1; case FL_ENTER: getPos(); tipwin->showText(); return 1; case FL_HIDE: case FL_LEAVE: tipwin->hide(); resetPos(); break; case FL_RELEASE: tipwin->hide(); resetPos(); if(this->when() == 0) do_callback(); return 1; break; } return 0; //#endif } void WidgetPDial::draw() { #ifdef NTK_GUI box( FL_NO_BOX ); Fl_Dial::draw(); return; #else const int cx = x(), cy = y(), sx = w(), sy = h(); const double a1 = angle1(), a2 = angle2(); const double val = (value() - minimum()) / (maximum() - minimum()); // even radius produces less artifacts if no antialiasing is avail const int rad = (sx > sy ? sy : sx) &~1; /* clears the button background */ pdialcolor(160, 160, 160); fl_pie(cx - 2, cy - 2, rad + 4, rad + 4, 0, 360); /* dark outline */ fl_color(60, 60, 60); fl_pie(cx - 1, cy - 1, rad + 2, rad + 2, 0, 360); /* Draws the button faceplate, min/max */ pdialcolor(110, 110, 115); fl_pie(cx, cy, rad, rad, 270 - a2, 270 - a1); /* knob center */ if (rad > 8) { pdialcolor(140, 140, 145); fl_pie(cx + 4, cy + 4, rad - 8, rad - 8, 0, 360); } /* value circle */ double a = -(a2 - a1) * val - a1; fl_line_style(0, 2, 0); pdialcolor(0, 200, 0); fl_arc(cx + 1, cy + 1, rad - 2, rad - 2, a - 90, a1 - 180); fl_line_style(0); /* draw value line */ int ll = rad/4; if (ll < 2) ll = 2; fl_push_matrix(); fl_translate(cx + rad / 2, cy + rad / 2); fl_rotate(a - 90.0f); fl_translate(rad / 2, 0); fl_begin_polygon(); pdialcolor(0, 0, 0); fl_vertex(-ll, 0); fl_vertex(0, 0); fl_end_polygon(); fl_pop_matrix(); #endif } void WidgetPDial::pdialcolor(int r, int g, int b) { if(active_r()) fl_color(r, g, b); else fl_color(160 - (160 - r) / 3, 160 - (160 - b) / 3, 160 - (160 - b) / 3); } void WidgetPDial::tooltip(const char *c) { tipwin->setText(c); textset = true; } void WidgetPDial::getPos() { if(!pos) { tipwin->position(Fl::event_x_root(), Fl::event_y_root() + 20); pos = true; } } void WidgetPDial::resetPos() { pos = false; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.h000066400000000000000000000011231247673406200244710ustar00rootroot00000000000000// generated by Fast Light User Interface Designer (fluid) version 1.0107f #ifndef WIDGETPDIAL_h #define WIDGETPDIAL_h #include class WidgetPDial:public Fl_Dial { public: WidgetPDial(int x, int y, int w, int h, const char *label = 0); ~WidgetPDial(); int handle(int event); void draw(); void pdialcolor(int r, int g, int b); void tooltip(const char *c); private: void getPos(); void resetPos(); double oldvalue; bool pos; bool textset; class TipWin * tipwin; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/UI/common.H000066400000000000000000000031251247673406200235700ustar00rootroot00000000000000 /*******************************************************************************/ /* Copyright (C) 2012 Jonathan Moore Liles */ /* */ /* This program is free software; you can redistribute it and/or modify it */ /* under the terms of the GNU General Public License as published by the */ /* Free Software Foundation; either version 2 of the License, or (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; see the file COPYING. If not,write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*******************************************************************************/ class Fl_Widget; extern void set_module_parameters ( Fl_Widget * ); #ifdef FLTK_GUI #define fl_color_add_alpha( x,y ) x #undef FL_NO_BOX #undef FL_UP_FRAME #define FL_NO_BOX FL_FLAT_BOX #define FL_UP_FRAME FL_UP_BOX #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/globals.h000066400000000000000000000142541247673406200234530ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer globals.h - it contains program settings and the program capabilities like number of parts, of effects Copyright (C) 2002-2005 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef GLOBALS_H #define GLOBALS_H #include /** * The number of harmonics of additive synth * This must be smaller than OSCIL_SIZE/2 */ #define MAX_AD_HARMONICS 128 /** * The number of harmonics of substractive */ #define MAX_SUB_HARMONICS 64 /* * The maximum number of samples that are used for 1 PADsynth instrument(or item) */ #define PAD_MAX_SAMPLES 64 /* * Number of parts */ #define NUM_MIDI_PARTS 16 /* * Number of Midi channes */ #define NUM_MIDI_CHANNELS 16 /* * The number of voices of additive synth for a single note */ #define NUM_VOICES 8 /* * The poliphony (notes) */ #define POLIPHONY 128 /* * Number of system effects */ #define NUM_SYS_EFX 4 /* * Number of insertion effects */ #define NUM_INS_EFX 8 /* * Number of part's insertion effects */ #define NUM_PART_EFX 3 /* * Maximum number of the instrument on a part */ #define NUM_KIT_ITEMS 16 /* * How is applied the velocity sensing */ #define VELOCITY_MAX_SCALE 8.0f /* * The maximum length of instrument's name */ #define PART_MAX_NAME_LEN 30 /* * The maximum number of bands of the equaliser */ #define MAX_EQ_BANDS 8 #if (MAX_EQ_BANDS >= 20) #error "Too many EQ bands in globals.h" #endif /* * Maximum filter stages */ #define MAX_FILTER_STAGES 5 /* * Formant filter (FF) limits */ #define FF_MAX_VOWELS 6 #define FF_MAX_FORMANTS 12 #define FF_MAX_SEQUENCE 8 #define LOG_2 0.693147181f #define PI 3.1415926536f #define LOG_10 2.302585093f /* * The threshold for the amplitude interpolation used if the amplitude * is changed (by LFO's or Envelope's). If the change of the amplitude * is below this, the amplitude is not interpolated */ #define AMPLITUDE_INTERPOLATION_THRESHOLD 0.0001f /* * How the amplitude threshold is computed */ #define ABOVE_AMPLITUDE_THRESHOLD(a, b) ((2.0f * fabs((b) - (a)) \ / (fabs((b) + (a) \ + 0.0000000001f))) > \ AMPLITUDE_INTERPOLATION_THRESHOLD) /* * Interpolate Amplitude */ #define INTERPOLATE_AMPLITUDE(a, b, x, size) ((a) \ + ((b) \ - (a)) * (float)(x) \ / (float) (size)) /* * dB */ #define dB2rap(dB) ((expf((dB) * LOG_10 / 20.0f))) #define rap2dB(rap) ((20 * logf(rap) / LOG_10)) #define ZERO(data, size) {char *data_ = (char *) data; for(int i = 0; \ i < size; \ i++) \ data_[i] = 0; } #define ZERO_float(data, size) {float *data_ = (float *) data; \ for(int i = 0; \ i < size; \ i++) \ data_[i] = 0.0f; } enum ONOFFTYPE { OFF = 0, ON = 1 }; enum MidiControllers { C_bankselectmsb = 0, C_pitchwheel = 1000, C_NULL = 1001, C_expression = 11, C_panning = 10, C_bankselectlsb = 32, C_filtercutoff = 74, C_filterq = 71, C_bandwidth = 75, C_modwheel = 1, C_fmamp = 76, C_volume = 7, C_sustain = 64, C_allnotesoff = 123, C_allsoundsoff = 120, C_resetallcontrollers = 121, C_portamento = 65, C_resonance_center = 77, C_resonance_bandwidth = 78, C_dataentryhi = 0x06, C_dataentrylo = 0x26, C_nrpnhi = 99, C_nrpnlo = 98 }; enum LegatoMsg { LM_Norm, LM_FadeIn, LM_FadeOut, LM_CatchUp, LM_ToNorm }; //is like i=(int)(floor(f)) #ifdef ASM_F2I_YES #define F2I(f, \ i) __asm__ __volatile__ ("fistpl %0" : "=m" (i) : "t" (f \ - \ 0.49999999f) \ : "st"); #else #define F2I(f, i) (i) = ((f > 0) ? ((int)(f)) : ((int)(f - 1.0f))); #endif #ifndef O_BINARY #define O_BINARY 0 #endif //temporary include for synth->{samplerate/buffersize} members struct SYNTH_T { SYNTH_T(void) :samplerate(44100), buffersize(256), oscilsize(1024) { alias(); } /**Sampling rate*/ unsigned int samplerate; /** * The size of a sound buffer (or the granularity) * All internal transfer of sound data use buffer of this size * All parameters are constant during this period of time, exception * some parameters(like amplitudes) which are linear interpolated. * If you increase this you'll ecounter big latencies, but if you * decrease this the CPU requirements gets high. */ int buffersize; /** * The size of ADnote Oscillator * Decrease this => poor quality * Increase this => CPU requirements gets high (only at start of the note) */ int oscilsize; //Alias for above terms float samplerate_f; float halfsamplerate_f; float buffersize_f; int bufferbytes; float oscilsize_f; inline void alias(void) { halfsamplerate_f = (samplerate_f = samplerate) / 2.0f; buffersize_f = buffersize; bufferbytes = buffersize * sizeof(float); oscilsize_f = oscilsize; } static float numRandom(void); //defined in Util.cpp for now }; extern SYNTH_T *synth; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp000066400000000000000000000341631247673406200233100ustar00rootroot00000000000000/* ZynAddSubFX - a software synthesizer main.cpp - Main file of the synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul Copyright (C) 2012-2014 Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. 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 (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "UI/common.H" #include #include #include #include #include #include #include #include #include "DSP/FFTwrapper.h" #include "Misc/Master.h" #include "Misc/Part.h" #include "Misc/Util.h" #include "Misc/Dump.h" extern Dump dump; //Nio System #include "Nio/Nio.h" #ifndef DISABLE_GUI #ifdef QT_GUI #include #include "masterui.h" QApplication *app; #elif defined FLTK_GUI #include "UI/MasterUI.h" #elif defined NTK_GUI #include "UI/MasterUI.h" #include #include #include #include #endif // FLTK_GUI MasterUI *ui; #endif //DISABLE_GUI using namespace std; pthread_t thr4; Master *master; SYNTH_T *synth; int swaplr = 0; //1 for left-right swapping int Pexitprogram = 0; //if the UI set this to 1, the program will exit #if LASH #include "Misc/LASHClient.h" LASHClient *lash = NULL; #endif #if USE_NSM #include "UI/NSM.H" NSM_Client *nsm = 0; #endif char *instance_name = 0; void exitprogram(); //cleanup on signaled exit void sigterm_exit(int /*sig*/) { Pexitprogram = 1; } #ifndef DISABLE_GUI #ifdef NTK_GUI static Fl_Tiled_Image *module_backdrop; #endif void set_module_parameters ( Fl_Widget *o ) { #ifdef NTK_GUI o->box( FL_DOWN_FRAME ); o->align( o->align() | FL_ALIGN_IMAGE_BACKDROP ); o->color( FL_BLACK ); o->image( module_backdrop ); o->labeltype( FL_SHADOW_LABEL ); #else o->box( FL_PLASTIC_UP_BOX ); o->color( FL_CYAN ); o->labeltype( FL_EMBOSSED_LABEL ); #endif } #endif /* * Program initialisation */ void initprogram(void) { cerr.precision(1); cerr << std::fixed; cerr << "\nSample Rate = \t\t" << synth->samplerate << endl; cerr << "Sound Buffer Size = \t" << synth->buffersize << " samples" << endl; cerr << "Internal latency = \t" << synth->buffersize_f * 1000.0f / synth->samplerate_f << " ms" << endl; cerr << "ADsynth Oscil.Size = \t" << synth->oscilsize << " samples" << endl; master = &Master::getInstance(); master->swaplr = swaplr; signal(SIGINT, sigterm_exit); signal(SIGTERM, sigterm_exit); } /* * Program exit */ void exitprogram() { //ensure that everything has stopped with the mutex wait pthread_mutex_lock(&master->mutex); pthread_mutex_unlock(&master->mutex); Nio::stop(); #ifndef DISABLE_GUI delete ui; #endif #if LASH if(lash) delete lash; #endif #if USE_NSM if(nsm) delete nsm; #endif delete [] denormalkillbuf; FFT_cleanup(); Master::deleteInstance(); } int main(int argc, char *argv[]) { synth = new SYNTH_T; config.init(); dump.startnow(); int noui = 0; cerr << "\nZynAddSubFX - Copyright (c) 2002-2011 Nasca Octavian Paul and others" << endl; cerr << " Copyright (c) 2009-2014 Mark McCurry [active maintainer]" << endl; cerr << "Compiled: " << __DATE__ << " " << __TIME__ << endl; cerr << "This program is free software (GNU GPL v.2 or later) and \n"; cerr << "it comes with ABSOLUTELY NO WARRANTY.\n" << endl; if(argc == 1) cerr << "Try 'zynaddsubfx --help' for command-line options." << endl; /* Get the settings from the Config*/ synth->samplerate = config.cfg.SampleRate; synth->buffersize = config.cfg.SoundBufferSize; synth->oscilsize = config.cfg.OscilSize; swaplr = config.cfg.SwapStereo; Nio::preferedSampleRate(synth->samplerate); synth->alias(); //build aliases sprng(time(NULL)); /* Parse command-line options */ struct option opts[] = { { "load", 2, NULL, 'l' }, { "load-instrument", 2, NULL, 'L' }, { "sample-rate", 2, NULL, 'r' }, { "buffer-size", 2, NULL, 'b' }, { "oscil-size", 2, NULL, 'o' }, { "dump", 2, NULL, 'D' }, { "swap", 2, NULL, 'S' }, { "no-gui", 2, NULL, 'U' }, { "dummy", 2, NULL, 'Y' }, { "help", 2, NULL, 'h' }, { "version", 2, NULL, 'v' }, { "named", 1, NULL, 'N' }, { "auto-connect", 0, NULL, 'a' }, { "output", 1, NULL, 'O' }, { "input", 1, NULL, 'I' }, { "exec-after-init", 1, NULL, 'e' }, { 0, 0, 0, 0 } }; opterr = 0; int option_index = 0, opt, exitwithhelp = 0, exitwithversion = 0; string loadfile, loadinstrument, execAfterInit; while(1) { int tmp = 0; /**\todo check this process for a small memory leak*/ opt = getopt_long(argc, argv, "l:L:r:b:o:I:O:N:e:hvaSDUY", opts, &option_index); char *optarguments = optarg; #define GETOP(x) if(optarguments) \ x = optarguments #define GETOPNUM(x) if(optarguments) \ x = atoi(optarguments) if(opt == -1) break; switch(opt) { case 'h': exitwithhelp = 1; break; case 'v': exitwithversion = 1; break; case 'Y': /* this command a dummy command (has NO effect) and is used because I need for NSIS installer (NSIS sometimes forces a command line for a program, even if I don't need that; eg. when I want to add a icon to a shortcut. */ break; case 'U': noui = 1; break; case 'l': GETOP(loadfile); break; case 'L': GETOP(loadinstrument); break; case 'r': GETOPNUM(synth->samplerate); if(synth->samplerate < 4000) { cerr << "ERROR:Incorrect sample rate: " << optarguments << endl; exit(1); } break; case 'b': GETOPNUM(synth->buffersize); if(synth->buffersize < 2) { cerr << "ERROR:Incorrect buffer size: " << optarguments << endl; exit(1); } break; case 'o': if(optarguments) synth->oscilsize = tmp = atoi(optarguments); if(synth->oscilsize < MAX_AD_HARMONICS * 2) synth->oscilsize = MAX_AD_HARMONICS * 2; synth->oscilsize = (int) powf(2, ceil(logf(synth->oscilsize - 1.0f) / logf(2.0f))); if(tmp != synth->oscilsize) cerr << "synth->oscilsize is wrong (must be 2^n) or too small. Adjusting to " << synth->oscilsize << "." << endl; break; case 'S': swaplr = 1; break; case 'D': dump.startnow(); break; case 'N': Nio::setPostfix(optarguments); break; case 'I': if(optarguments) Nio::setDefaultSource(optarguments); break; case 'O': if(optarguments) Nio::setDefaultSink(optarguments); break; case 'a': Nio::autoConnect = true; break; case 'e': GETOP(execAfterInit); break; case '?': cerr << "ERROR:Bad option or parameter.\n" << endl; exitwithhelp = 1; break; } } synth->alias(); if(exitwithversion) { cout << "Version: " << VERSION << endl; return 0; } if(exitwithhelp != 0) { cout << "Usage: zynaddsubfx [OPTION]\n\n" << " -h , --help \t\t\t\t Display command-line help and exit\n" << " -v , --version \t\t\t Display version and exit\n" << " -l file, --load=FILE\t\t\t Loads a .xmz file\n" << " -L file, --load-instrument=FILE\t Loads a .xiz file\n" << " -r SR, --sample-rate=SR\t\t Set the sample rate SR\n" << " -b BS, --buffer-size=SR\t\t Set the buffer size (granularity)\n" << " -o OS, --oscil-size=OS\t\t Set the ADsynth oscil. size\n" << " -S , --swap\t\t\t\t Swap Left <--> Right\n" << " -D , --dump\t\t\t\t Dumps midi note ON/OFF commands\n" << " -U , --no-gui\t\t\t\t Run ZynAddSubFX without user interface\n" << " -N , --named\t\t\t\t Postfix IO Name when possible\n" << " -a , --auto-connect\t\t\t AutoConnect when using JACK\n" << " -O , --output\t\t\t\t Set Output Engine\n" << " -I , --input\t\t\t\t Set Input Engine\n" << " -e , --exec-after-init\t\t Run post-initialization script\n" << endl; return 0; } //produce denormal buf denormalkillbuf = new float [synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = (RND - 0.5f) * 1e-16; initprogram(); if(!loadfile.empty()) { int tmp = master->loadXML(loadfile.c_str()); if(tmp < 0) { cerr << "ERROR: Could not load master file " << loadfile << "." << endl; exit(1); } else { master->applyparameters(); cout << "Master file loaded." << endl; } } if(!loadinstrument.empty()) { int loadtopart = 0; int tmp = master->part[loadtopart]->loadXMLinstrument( loadinstrument.c_str()); if(tmp < 0) { cerr << "ERROR: Could not load instrument file " << loadinstrument << '.' << endl; exit(1); } else { master->part[loadtopart]->applyparameters(); cout << "Instrument file loaded." << endl; } } //Run the Nio system bool ioGood = Nio::start(); if(!execAfterInit.empty()) { cout << "Executing user supplied command: " << execAfterInit << endl; if(system(execAfterInit.c_str()) == -1) cerr << "Command Failed..." << endl; } #ifndef DISABLE_GUI #ifdef NTK_GUI fl_register_images(); Fl_Tooltip::textcolor(0x0); Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL); if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/knob.png")) Fl_Dial::default_image(img); else Fl_Dial::default_image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/knob.png")); if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/window_backdrop.png")) Fl::scheme_bg(new Fl_Tiled_Image(img)); else Fl::scheme_bg(new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/window_backdrop.png"))); if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/module_backdrop.png")) module_backdrop = new Fl_Tiled_Image(img); else module_backdrop = new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/module_backdrop.png")); Fl::background( 50, 50, 50 ); Fl::background2( 70, 70, 70 ); Fl::foreground( 255,255,255 ); #endif ui = new MasterUI(master, &Pexitprogram); if ( !noui) { ui->showUI(); if(!ioGood) fl_alert( "Default IO did not initialize.\nDefaulting to NULL backend."); } #endif #ifndef DISABLE_GUI #if USE_NSM char *nsm_url = getenv("NSM_URL"); if(nsm_url) { nsm = new NSM_Client; if(!nsm->init(nsm_url)) nsm->announce("ZynAddSubFX", ":switch:", argv[0]); else { delete nsm; nsm = NULL; } } #endif #endif #if USE_NSM if(!nsm) #endif { #if LASH lash = new LASHClient(&argc, &argv); #ifndef DISABLE_GUI ui->sm_indicator1->value(1); ui->sm_indicator2->value(1); ui->sm_indicator1->tooltip("LASH"); ui->sm_indicator2->tooltip("LASH"); #endif #endif } while(Pexitprogram == 0) { #ifndef DISABLE_GUI #if USE_NSM if(nsm) { nsm->check(); goto done; } #endif #if LASH { string filename; switch(lash->checkevents(filename)) { case LASHClient::Save: ui->do_save_master(filename.c_str()); lash->confirmevent(LASHClient::Save); break; case LASHClient::Restore: ui->do_load_master(filename.c_str()); lash->confirmevent(LASHClient::Restore); break; case LASHClient::Quit: Pexitprogram = 1; default: break; } } #endif //LASH #if USE_NSM done: #endif Fl::wait(0.02f); #else usleep(100000); #endif } exitprogram(); return 0; } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/style.cfg000066400000000000000000001470371247673406200227170ustar00rootroot00000000000000# Uncrustify 0.53 # # General options # # The type of line endings newlines = lf # auto/lf/crlf/cr # The original size of tabs in the input input_tab_size = 4 # number # The size of tabs in the output (only used if align_with_tabs=true) output_tab_size = 4 # number # The ascii value of the string escape char, usually 92 (\) or 94 (^). (Pawn) string_escape_char = 92 # number # Alternate string escape char for Pawn. Only works right before the quote char. string_escape_char2 = 0 # number # # Indenting # # The number of columns to indent per level. # Usually 2, 3, 4, or 8. indent_columns = 4 # number # How to use tabs when indenting code # 0=spaces only # 1=indent with tabs, align with spaces # 2=indent and align with tabs indent_with_tabs = 0 # number # Whether to indent strings broken by '\' so that they line up indent_align_string = true # false/true # The number of spaces to indent multi-line XML strings. # Requires indent_align_string=True indent_xml_string = 0 # number # Spaces to indent '{' from level indent_brace = 0 # number # Whether braces are indented to the body level indent_braces = false # false/true # Disabled indenting function braces if indent_braces is true indent_braces_no_func = false # false/true # Indent based on the size of the brace parent, ie 'if' => 3 spaces, 'for' => 4 spaces, etc. indent_brace_parent = false # false/true # Whether the 'namespace' body is indented indent_namespace = true # false/true # Whether the 'extern "C"' body is indented indent_extern = true # false/true # Whether the 'class' body is indented indent_class = true # false/true # Whether to indent the stuff after a leading class colon indent_class_colon = true # false/true # False=treat 'else\nif' as 'else if' for indenting purposes # True=indent the 'if' one level indent_else_if = false # false/true # Amount to indent variable declarations after a open brace. neg=relative, pos=absolute indent_var_def_blk = 0 # number # True: indent continued function call parameters one indent level # False: align parameters under the open paren indent_func_call_param = false # false/true # Same as indent_func_call_param, but for function defs indent_func_def_param = false # false/true # Same as indent_func_call_param, but for function protos indent_func_proto_param = false # false/true # Same as indent_func_call_param, but for class declarations indent_func_class_param = false # false/true # Same as indent_func_call_param, but for class variable constructors indent_func_ctor_var_param = false # false/true # Same as indent_func_call_param, but for templates indent_template_param = false # false/true # Double the indent for indent_func_xxx_param options indent_func_param_double = false # false/true # Indentation column for standalone 'const' function decl/proto qualifier indent_func_const = 0 # number # Indentation column for standalone 'throw' function decl/proto qualifier indent_func_throw = 0 # number # The number of spaces to indent a continued '->' or '.' # Usually set to 0, 1, or indent_columns. indent_member = 0 # number # Spaces to indent single line ('//') comments on lines before code indent_sing_line_comments = 0 # number # If set, will indent trailing single line ('//') comments relative # to the code instead of trying to keep the same absolute column indent_relative_single_line_comments = false # false/true # Spaces to indent 'case' from 'switch' # Usually 0 or indent_columns. indent_switch_case = 4 # number # Spaces to shift the 'case' line, without affecting any other lines # Usually 0. indent_case_shift = 0 # number # Spaces to indent '{' from 'case'. # By default, the brace will appear under the 'c' in case. # Usually set to 0 or indent_columns. indent_case_brace = 0 # number # Whether to indent comments found in first column indent_col1_comment = false # false/true # How to indent goto labels # >0 : absolute column where 1 is the leftmost column # <=0 : subtract from brace indent indent_label = 1 # number # Same as indent_label, but for access specifiers that are followed by a colon indent_access_spec = 1 # number # Indent the code after an access specifier by one level. # If set, this option forces 'indent_access_spec=0' indent_access_spec_body = true # false/true # If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended) indent_paren_nl = false # false/true # Controls the indent of a close paren after a newline. # 0: Indent to body level # 1: Align under the open paren # 2: Indent to the brace level indent_paren_close = 1 # number # Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren indent_comma_paren = false # false/true # Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren indent_bool_paren = false # false/true # If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended) indent_square_nl = false # false/true # Don't change the relative indent of ESQL/C 'EXEC SQL' bodies indent_preserve_sql = false # false/true # Align continued statements at the '='. Default=True # If FALSE or the '=' is followed by a newline, the next line is indent one tab. indent_align_assign = true # false/true # # Spacing options # # Add or remove space around arithmetic operator '+', '-', '/', '*', etc sp_arith = force # ignore/add/remove/force # Add or remove space around assignment operator '=', '+=', etc sp_assign = force # ignore/add/remove/force # Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign. sp_before_assign = ignore # ignore/add/remove/force # Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign. sp_after_assign = ignore # ignore/add/remove/force # Add or remove space around assignment '=' in enum sp_enum_assign = force # ignore/add/remove/force # Add or remove space before assignment '=' in enum. Overrides sp_enum_assign. sp_enum_before_assign = ignore # ignore/add/remove/force # Add or remove space after assignment '=' in enum. Overrides sp_enum_assign. sp_enum_after_assign = ignore # ignore/add/remove/force # Add or remove space around preprocessor '##' concatenation operator sp_pp_concat = add # ignore/add/remove/force # Add or remove space after preprocessor '#' stringify operator sp_pp_stringify = add # ignore/add/remove/force # Add or remove space around boolean operators '&&' and '||' sp_bool = force # ignore/add/remove/force # Add or remove space around compare operator '<', '>', '==', etc sp_compare = force # ignore/add/remove/force # Add or remove space inside '(' and ')' sp_inside_paren = remove # ignore/add/remove/force # Add or remove space between nested parens sp_paren_paren = remove # ignore/add/remove/force # Whether to balance spaces inside nested parens sp_balance_nested_parens = false # false/true # Add or remove space between ')' and '{' sp_paren_brace = force # ignore/add/remove/force # Add or remove space before pointer star '*' sp_before_ptr_star = force # ignore/add/remove/force # Add or remove space before pointer star '*' that isn't followed by a variable name # If set to 'ignore', sp_before_ptr_star is used instead. sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force # Add or remove space between pointer stars '*' sp_between_ptr_star = remove # ignore/add/remove/force # Add or remove space after pointer star '*', if followed by a word. sp_after_ptr_star = remove # ignore/add/remove/force # Add or remove space after a pointer star '*', if followed by a func proto/def. sp_after_ptr_star_func = remove # ignore/add/remove/force # Add or remove space before a pointer star '*', if followed by a func proto/def. sp_before_ptr_star_func = force # ignore/add/remove/force # Add or remove space before a reference sign '&' sp_before_byref = force # ignore/add/remove/force # Add or remove space before a reference sign '&' that isn't followed by a variable name # If set to 'ignore', sp_before_byref is used instead. sp_before_unnamed_byref = ignore # ignore/add/remove/force # Add or remove space after reference sign '&', if followed by a word. sp_after_byref = remove # ignore/add/remove/force # Add or remove space after a reference sign '&', if followed by a func proto/def. sp_after_byref_func = ignore # ignore/add/remove/force # Add or remove space before a reference sign '&', if followed by a func proto/def. sp_before_byref_func = ignore # ignore/add/remove/force # Add or remove space between type and word sp_after_type = remove # ignore/add/remove/force # Add or remove space in 'template <' vs 'template<'. # If set to ignore, sp_before_angle is used. sp_template_angle = ignore # ignore/add/remove/force # Add or remove space before '<>' sp_before_angle = remove # ignore/add/remove/force # Add or remove space inside '<' and '>' sp_inside_angle = remove # ignore/add/remove/force # Add or remove space after '<>' sp_after_angle = ignore # ignore/add/remove/force # Add or remove space between '<>' and '(' as found in 'new List();' sp_angle_paren = remove # ignore/add/remove/force # Add or remove space between '<>' and a word as in 'List m;' sp_angle_word = ignore # ignore/add/remove/force # Add or remove space before '(' of 'if', 'for', 'switch', and 'while' sp_before_sparen = remove # ignore/add/remove/force # Add or remove space inside if-condition '(' and ')' sp_inside_sparen = remove # ignore/add/remove/force # Add or remove space before if-condition ')'. Overrides sp_inside_sparen. sp_inside_sparen_close = remove # ignore/add/remove/force # Add or remove space after ')' of 'if', 'for', 'switch', and 'while' sp_after_sparen = remove # ignore/add/remove/force # Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while' sp_sparen_brace = force # ignore/add/remove/force # Add or remove space between 'invariant' and '(' in the D language. sp_invariant_paren = ignore # ignore/add/remove/force # Add or remove space after the ')' in 'invariant (C) c' in the D language. sp_after_invariant_paren = ignore # ignore/add/remove/force # Add or remove space before empty statement ';' on 'if', 'for' and 'while' sp_special_semi = ignore # ignore/add/remove/force # Add or remove space before ';' sp_before_semi = remove # ignore/add/remove/force # Add or remove space before ';' in non-empty 'for' statements sp_before_semi_for = remove # ignore/add/remove/force # Add or remove space before a semicolon of an empty part of a for statment. sp_before_semi_for_empty = remove # ignore/add/remove/force # Add or remove space after the final semicolon of an empty part of a for statment: for ( ; ; ). sp_after_semi_for_empty = remove # ignore/add/remove/force # Add or remove space before '[' (except '[]') sp_before_square = ignore # ignore/add/remove/force # Add or remove space before '[]' sp_before_squares = ignore # ignore/add/remove/force # Add or remove space inside '[' and ']' sp_inside_square = remove # ignore/add/remove/force # Add or remove space after ',' sp_after_comma = force # ignore/add/remove/force # Add or remove space before ',' sp_before_comma = remove # ignore/add/remove/force # Add or remove space after class ':' sp_after_class_colon = remove # ignore/add/remove/force # Add or remove space before class ':' sp_before_class_colon = remove # ignore/add/remove/force # Add or remove space before case ':' sp_before_case_colon = remove # ignore/add/remove/force # Add or remove space between 'operator' and operator sign sp_after_operator = ignore # ignore/add/remove/force # Add or remove space between the operator symbol and the open paren, as in 'operator ++(' sp_after_operator_sym = ignore # ignore/add/remove/force # Add or remove space after C/D cast, ie 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a' sp_after_cast = ignore # ignore/add/remove/force # Add or remove spaces inside cast parens sp_inside_paren_cast = remove # ignore/add/remove/force # Add or remove space between the type and open paren in a C++ cast, ie 'int(exp)' vs 'int (exp)' sp_cpp_cast_paren = remove # ignore/add/remove/force # Add or remove space between 'sizeof' and '(' sp_sizeof_paren = remove # ignore/add/remove/force # Add or remove space after the tag keyword (Pawn) sp_after_tag = ignore # ignore/add/remove/force # Add or remove space inside enum '{' and '}' sp_inside_braces_enum = ignore # ignore/add/remove/force # Add or remove space inside struct/union '{' and '}' sp_inside_braces_struct = remove # ignore/add/remove/force # Add or remove space inside '{' and '}' sp_inside_braces = ignore # ignore/add/remove/force # Add or remove space inside '{}' sp_inside_braces_empty = ignore # ignore/add/remove/force # Add or remove space between return type and function name # A minimum of 1 is forced except for pointer return types. sp_type_func = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function declaration sp_func_proto_paren = remove # ignore/add/remove/force # Add or remove space between function name and '(' on function definition sp_func_def_paren = remove # ignore/add/remove/force # Add or remove space inside empty function '()' sp_inside_fparens = remove # ignore/add/remove/force # Add or remove space inside function '(' and ')' sp_inside_fparen = remove # ignore/add/remove/force # Add or remove space between ']' and '(' when part of a function call. sp_square_fparen = ignore # ignore/add/remove/force # Add or remove space between ')' and '{' of function sp_fparen_brace = force # ignore/add/remove/force # Add or remove space between function name and '(' on function calls sp_func_call_paren = remove # ignore/add/remove/force # Add or remove space between the user function name and '(' on function calls # You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file. sp_func_call_user_paren = ignore # ignore/add/remove/force # Add or remove space between a constructor/destructor and the open paren sp_func_class_paren = remove # ignore/add/remove/force # Add or remove space between 'return' and '(' sp_return_paren = remove # ignore/add/remove/force # Add or remove space between '__attribute__' and '(' sp_attribute_paren = ignore # ignore/add/remove/force # Add or remove space between 'defined' and '(' in '#if defined (FOO)' sp_defined_paren = ignore # ignore/add/remove/force # Add or remove space between 'throw' and '(' in 'throw (something)' sp_throw_paren = ignore # ignore/add/remove/force # Add or remove space between macro and value sp_macro = ignore # ignore/add/remove/force # Add or remove space between macro function ')' and value sp_macro_func = ignore # ignore/add/remove/force # Add or remove space between 'else' and '{' if on the same line sp_else_brace = force # ignore/add/remove/force # Add or remove space between '}' and 'else' if on the same line sp_brace_else = ignore # ignore/add/remove/force # Add or remove space between '}' and the name of a typedef on the same line sp_brace_typedef = ignore # ignore/add/remove/force # Add or remove space between 'catch' and '{' if on the same line sp_catch_brace = ignore # ignore/add/remove/force # Add or remove space between '}' and 'catch' if on the same line sp_brace_catch = ignore # ignore/add/remove/force # Add or remove space between 'finally' and '{' if on the same line sp_finally_brace = ignore # ignore/add/remove/force # Add or remove space between '}' and 'finally' if on the same line sp_brace_finally = ignore # ignore/add/remove/force # Add or remove space between 'try' and '{' if on the same line sp_try_brace = ignore # ignore/add/remove/force # Add or remove space between get/set and '{' if on the same line sp_getset_brace = ignore # ignore/add/remove/force # Add or remove space before the '::' operator sp_before_dc = remove # ignore/add/remove/force # Add or remove space after the '::' operator sp_after_dc = remove # ignore/add/remove/force # Add or remove around the D named array initializer ':' operator sp_d_array_colon = ignore # ignore/add/remove/force # Add or remove space after the '!' (not) operator. sp_not = remove # ignore/add/remove/force # Add or remove space after the '~' (invert) operator. sp_inv = remove # ignore/add/remove/force # Add or remove space after the '&' (address-of) operator. # This does not affect the spacing after a '&' that is part of a type. sp_addr = remove # ignore/add/remove/force # Add or remove space around the '.' or '->' operators sp_member = remove # ignore/add/remove/force # Add or remove space after the '*' (dereference) operator. # This does not affect the spacing after a '*' that is part of a type. sp_deref = remove # ignore/add/remove/force # Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7' sp_sign = remove # ignore/add/remove/force # Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;' sp_incdec = remove # ignore/add/remove/force # Add or remove space before a backslash-newline at the end of a line sp_before_nl_cont = force # ignore/add/remove/force # Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;' sp_after_oc_scope = ignore # ignore/add/remove/force # Add or remove space after the colon in message specs # '-(int) f:(int) x;' vs '-(int) f: (int) x;' sp_after_oc_colon = ignore # ignore/add/remove/force # Add or remove space before the colon in message specs # '-(int) f: (int) x;' vs '-(int) f : (int) x;' sp_before_oc_colon = ignore # ignore/add/remove/force # Add or remove space after the colon in message specs # '[object setValue:1];' vs '[object setValue: 1];' sp_after_send_oc_colon = ignore # ignore/add/remove/force # Add or remove space before the colon in message specs # '[object setValue:1];' vs '[object setValue :1];' sp_before_send_oc_colon = ignore # ignore/add/remove/force # Add or remove space after the (type) in message specs # '-(int) f: (int) x;' vs '-(int) f: (int)x;' sp_after_oc_type = ignore # ignore/add/remove/force # Add or remove space around the ':' in 'b ? t : f' sp_cond_colon = ignore # ignore/add/remove/force # Add or remove space around the '?' in 'b ? t : f' sp_cond_question = ignore # ignore/add/remove/force # Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here. sp_case_label = ignore # ignore/add/remove/force # Control the space around the D '..' operator. sp_range = ignore # ignore/add/remove/force # Control the space after the opening of a C++ comment '// A' vs '//A' sp_cmt_cpp_start = ignore # ignore/add/remove/force # # Code alignment (not left column spaces/tabs) # # Whether to keep non-indenting tabs align_keep_tabs = false # false/true # Whether to use tabs for alinging align_with_tabs = false # false/true # Whether to bump out to the next tab when aligning align_on_tabstop = false # false/true # Whether to left-align numbers align_number_left = false # false/true # Align variable definitions in prototypes and functions align_func_params = false # false/true # Align parameters in single-line functions that have the same name. # The function names must already be aligned with each other. align_same_func_call_params = false # false/true # The span for aligning variable definitions (0=don't align) align_var_def_span = 1 # number # How to align the star in variable definitions. # 0=Part of the type 'void * foo;' # 1=Part of the variable 'void *foo;' # 2=Dangling 'void *foo;' align_var_def_star_style = 2 # number # How to align the '&' in variable definitions. # 0=Part of the type # 1=Part of the variable # 2=Dangling align_var_def_amp_style = 2 # number # The threshold for aligning variable definitions (0=no limit) align_var_def_thresh = 5 # number # The gap for aligning variable definitions align_var_def_gap = 1 # number # Whether to align the colon in struct bit fields align_var_def_colon = false # false/true # Whether to align any attribute after the variable name align_var_def_attribute = false # false/true # Whether to align inline struct/enum/union variable definitions align_var_def_inline = false # false/true # The span for aligning on '=' in assignments (0=don't align) align_assign_span = 1 # number # The threshold for aligning on '=' in assignments (0=no limit) align_assign_thresh = 5 # number # The span for aligning on '=' in enums (0=don't align) align_enum_equ_span = 1 # number # The threshold for aligning on '=' in enums (0=no limit) align_enum_equ_thresh = 5 # number # The span for aligning struct/union (0=don't align) align_var_struct_span = 1 # number # The threshold for aligning struct/union member definitions (0=no limit) align_var_struct_thresh = 5 # number # The gap for aligning struct/union member definitions align_var_struct_gap = 0 # number # The span for aligning struct initializer values (0=don't align) align_struct_init_span = 1 # number # The minimum space between the type and the synonym of a typedef align_typedef_gap = 0 # number # The span for aligning single-line typedefs (0=don't align) align_typedef_span = 1 # number # How to align typedef'd functions with other typedefs # 0: Don't mix them at all # 1: align the open paren with the types # 2: align the function type name with the other type names align_typedef_func = 0 # number # Controls the positioning of the '*' in typedefs. Just try it. # 0: Align on typdef type, ignore '*' # 1: The '*' is part of type name: typedef int *pint; # 2: The '*' is part of the type, but dangling: typedef int *pint; align_typedef_star_style = 0 # number # Controls the positioning of the '&' in typedefs. Just try it. # 0: Align on typdef type, ignore '&' # 1: The '&' is part of type name: typedef int &pint; # 2: The '&' is part of the type, but dangling: typedef int &pint; align_typedef_amp_style = 0 # number # The span for aligning comments that end lines (0=don't align) align_right_cmt_span = 0 # number # If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment align_right_cmt_mix = false # false/true # If a trailing comment is more than this number of columns away from the text it follows, # it will qualify for being aligned. align_right_cmt_gap = 0 # number # Align trailing comment at or beyond column N; 'pulls in' comments as a bonus side effect (0=ignore) align_right_cmt_at_col = 0 # number # The span for aligning function prototypes (0=don't align) align_func_proto_span = 0 # number # Minimum gap between the return type and the function name. align_func_proto_gap = 0 # number # Align function protos on the 'operator' keyword instead of what follows align_on_operator = false # false/true # Whether to mix aligning prototype and variable declarations. # If true, align_var_def_XXX options are used instead of align_func_proto_XXX options. align_mix_var_proto = false # false/true # Align single-line functions with function prototypes, uses align_func_proto_span align_single_line_func = false # false/true # Aligning the open brace of single-line functions. # Requires align_single_line_func=true, uses align_func_proto_span align_single_line_brace = false # false/true # Gap for align_single_line_brace. align_single_line_brace_gap = 0 # number # The span for aligning ObjC msg spec (0=don't align) align_oc_msg_spec_span = 0 # number # Whether to align macros wrapped with a backslash and a newline. # This will not work right if the macro contains a multi-line comment. align_nl_cont = false # false/true # The minimum space between label and value of a preprocessor define align_pp_define_gap = 0 # number # The span for aligning on '#define' bodies (0=don't align) align_pp_define_span = 0 # number # Align lines that start with '<<' with previous '<<'. Default=true align_left_shift = true # false/true # # Newline adding and removing options # # Whether to collapse empty blocks between '{' and '}' nl_collapse_empty_body = true # false/true # Don't split one-line braced assignments - 'foo_t f = { 1, 2 };' nl_assign_leave_one_liners = true # false/true # Don't split one-line braced statements inside a class xx { } body nl_class_leave_one_liners = false # false/true # Don't split one-line enums: 'enum foo { BAR = 15 };' nl_enum_leave_one_liners = false # false/true # Don't split one-line get or set functions nl_getset_leave_one_liners = true # false/true # Don't split one-line function definitions - 'int foo() { return 0; }' nl_func_leave_one_liners = true # false/true # Don't split one-line if/else statements - 'if(a) b++;' nl_if_leave_one_liners = false # false/true # Add or remove newlines at the start of the file nl_start_of_file = ignore # ignore/add/remove/force # The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force' nl_start_of_file_min = 0 # number # Add or remove newline at the end of the file nl_end_of_file = force # ignore/add/remove/force # The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force') nl_end_of_file_min = 1 # number # Add or remove newline between '=' and '{' nl_assign_brace = ignore # ignore/add/remove/force # Add or remove newline between '=' and '[' (D only) nl_assign_square = ignore # ignore/add/remove/force # Add or remove newline after '= [' (D only). Will also affect the newline before the ']' nl_after_square_assign = ignore # ignore/add/remove/force # The number of newlines after a block of variable definitions nl_func_var_def_blk = 0 # number # Add or remove newline between a function call's ')' and '{', as in: # list_for_each(item, &list) { } nl_fcall_brace = force # ignore/add/remove/force # Add or remove newline between 'enum' and '{' nl_enum_brace = remove # ignore/add/remove/force # Add or remove newline between 'struct and '{' nl_struct_brace = remove # ignore/add/remove/force # Add or remove newline between 'union' and '{' nl_union_brace = remove # ignore/add/remove/force # Add or remove newline between 'if' and '{' nl_if_brace = remove # ignore/add/remove/force # Add or remove newline between '}' and 'else' nl_brace_else = force # ignore/add/remove/force # Add or remove newline between 'else if' and '{' # If set to ignore, nl_if_brace is used instead nl_elseif_brace = ignore # ignore/add/remove/force # Add or remove newline between 'else' and '{' nl_else_brace = remove # ignore/add/remove/force # Add or remove newline between 'else' and 'if' nl_else_if = add # ignore/add/remove/force # Add or remove newline between '}' and 'finally' nl_brace_finally = force # ignore/add/remove/force # Add or remove newline between 'finally' and '{' nl_finally_brace = remove # ignore/add/remove/force # Add or remove newline between 'try' and '{' nl_try_brace = remove # ignore/add/remove/force # Add or remove newline between get/set and '{' nl_getset_brace = ignore # ignore/add/remove/force # Add or remove newline between 'for' and '{' nl_for_brace = remove # ignore/add/remove/force # Add or remove newline between 'catch' and '{' nl_catch_brace = remove # ignore/add/remove/force # Add or remove newline between '}' and 'catch' nl_brace_catch = force # ignore/add/remove/force # Add or remove newline between 'while' and '{' nl_while_brace = remove # ignore/add/remove/force # Add or remove newline between 'do' and '{' nl_do_brace = remove # ignore/add/remove/force # Add or remove newline between '}' and 'while' of 'do' statement nl_brace_while = remove # ignore/add/remove/force # Add or remove newline between 'switch' and '{' nl_switch_brace = remove # ignore/add/remove/force # Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc. # Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace. nl_multi_line_cond = false # false/true # Force a newline in a define after the macro name for multi-line defines. nl_multi_line_define = false # false/true # Whether to put a newline before 'case' statement nl_before_case = false # false/true # Add or remove newline between ')' and 'throw' nl_before_throw = ignore # ignore/add/remove/force # Whether to put a newline after 'case' statement nl_after_case = false # false/true # Newline between namespace and { nl_namespace_brace = ignore # ignore/add/remove/force # Add or remove newline between 'template<>' and whatever follows. nl_template_class = ignore # ignore/add/remove/force # Add or remove newline between 'class' and '{' nl_class_brace = force # ignore/add/remove/force # Add or remove newline after each ',' in the constructor member initialization nl_class_init_args = ignore # ignore/add/remove/force # Add or remove newline between return type and function name in definition nl_func_type_name = ignore # ignore/add/remove/force # Add or remove newline between function scope and name in a definition # Controls the newline after '::' in 'void A::f() { }' nl_func_scope_name = ignore # ignore/add/remove/force # Add or remove newline between return type and function name in a prototype nl_func_proto_type_name = ignore # ignore/add/remove/force # Add or remove newline between a function name and the opening '(' nl_func_paren = remove # ignore/add/remove/force # Add or remove newline after '(' in a function declaration nl_func_decl_start = ignore # ignore/add/remove/force # Add or remove newline after each ',' in a function declaration nl_func_decl_args = ignore # ignore/add/remove/force # Add or remove newline before the ')' in a function declaration nl_func_decl_end = ignore # ignore/add/remove/force # Add or remove newline between function signature and '{' nl_fdef_brace = ignore # ignore/add/remove/force # Whether to put a newline after 'return' statement nl_after_return = false # false/true # Add or remove a newline between the return keyword and return expression. nl_return_expr = ignore # ignore/add/remove/force # Whether to put a newline after semicolons, except in 'for' statements nl_after_semicolon = false # false/true # Whether to put a newline after brace open. # This also adds a newline before the matching brace close. nl_after_brace_open = true # false/true # If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is # placed between the open brace and a trailing single-line comment. nl_after_brace_open_cmt = false # false/true # Whether to put a newline after a virtual brace open. # These occur in un-braced if/while/do/for statement bodies. nl_after_vbrace_open = true # false/true # Whether to put a newline after a brace close. # Does not apply if followed by a necessary ';'. nl_after_brace_close = false # false/true # Whether to alter newlines in '#define' macros nl_define_macro = false # false/true # Whether to not put blanks after '#ifxx', '#elxx', or before '#endif' nl_squeeze_ifdef = false # false/true # Add or remove newline before 'if' nl_before_if = ignore # ignore/add/remove/force # Add or remove newline after 'if' nl_after_if = ignore # ignore/add/remove/force # Add or remove newline before 'for' nl_before_for = ignore # ignore/add/remove/force # Add or remove newline after 'for' nl_after_for = ignore # ignore/add/remove/force # Add or remove newline before 'while' nl_before_while = ignore # ignore/add/remove/force # Add or remove newline after 'while' nl_after_while = ignore # ignore/add/remove/force # Add or remove newline before 'switch' nl_before_switch = ignore # ignore/add/remove/force # Add or remove newline after 'switch' nl_after_switch = ignore # ignore/add/remove/force # Add or remove newline before 'do' nl_before_do = ignore # ignore/add/remove/force # Add or remove newline after 'do' nl_after_do = ignore # ignore/add/remove/force # Whether to double-space commented-entries in struct/enum nl_ds_struct_enum_cmt = false # false/true # Whether to double-space before the close brace of a struct/union/enum nl_ds_struct_enum_close_brace = false # false/true # Add or remove a newline around a class colon. # Related to pos_class_colon, nl_class_init_args, and pos_comma. nl_class_colon = ignore # ignore/add/remove/force # Change simple unbraced if statements into a one-liner # 'if(b)\n i++;' => 'if(b) i++;' nl_create_if_one_liner = false # false/true # Change simple unbraced for statements into a one-liner # 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);' nl_create_for_one_liner = false # false/true # Change simple unbraced while statements into a one-liner # 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);' nl_create_while_one_liner = false # false/true # # Positioning options # # The position of arithmetic operators in wrapped expressions pos_arith = lead # ignore/lead/trail # The position of assignment in wrapped expressions pos_assign = trail # ignore/lead/trail # The position of boolean operators in wrapped expressions pos_bool = lead # ignore/lead/trail # The position of the comma in wrapped expressions pos_comma = trail # ignore/lead/trail # The position of the comma in the constructor initialization list pos_class_comma = trail # ignore/lead/trail # The position of colons between constructor and member initialization pos_class_colon = lead # ignore/lead/trail # # Line Splitting options # # Try to limit code width to N number of columns code_width = 80 # number # Whether to fully split long 'for' statements at semi-colons ls_for_split_full = true # false/true # Whether to fully split long function protos/calls at commas ls_func_split_full = true # false/true # # Blank line options # # The maximum consecutive newlines nl_max = 0 # number # The number of newlines after a function prototype, if followed by another function prototype nl_after_func_proto = 0 # number # The number of newlines after a function prototype, if not followed by another function prototype nl_after_func_proto_group = 0 # number # The number of newlines after '}' of a multi-line function body nl_after_func_body = 0 # number # The number of newlines after '}' of a single line function body nl_after_func_body_one_liner = 0 # number # The minimum number of newlines before a multi-line comment. # Doesn't apply if after a brace open or another multi-line comment. nl_before_block_comment = 0 # number # The minimum number of newlines before a single-line C comment. # Doesn't apply if after a brace open or other single-line C comments. nl_before_c_comment = 0 # number # The minimum number of newlines before a CPP comment. # Doesn't apply if after a brace open or other CPP comments. nl_before_cpp_comment = 0 # number # Whether to force a newline after a mulit-line comment. nl_after_multiline_comment = false # false/true # The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. # Will not change the newline count if after a brace open. # 0 = No change. nl_before_access_spec = 0 # number # The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. # 0 = No change. nl_after_access_spec = 0 # number # The number of newlines between a function def and the function comment. # 0 = No change. nl_comment_func_def = 0 # number # The number of newlines after a try-catch-finally block that isn't followed by a brace close. # 0 = No change. nl_after_try_catch_finally = 0 # number # The number of newlines before and after a property, indexer or event decl. # 0 = No change. nl_around_cs_property = 0 # number # The number of newlines between the get/set/add/remove handlers in C#. # 0 = No change. nl_between_get_set = 0 # number # Whether to remove blank lines after '{' eat_blanks_after_open_brace = true # false/true # Whether to remove blank lines before '}' eat_blanks_before_close_brace = true # false/true # # Code modifying options (non-whitespace) # # Add or remove braces on single-line 'do' statement mod_full_brace_do = ignore # ignore/add/remove/force # Add or remove braces on single-line 'for' statement mod_full_brace_for = remove # ignore/add/remove/force # Add or remove braces on single-line function defintions. (Pawn) mod_full_brace_function = ignore # ignore/add/remove/force # Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'. mod_full_brace_if = remove # ignore/add/remove/force # Don't remove braces around statements that span N newlines mod_full_brace_nl = 0 # number # Add or remove braces on single-line 'while' statement mod_full_brace_while = ignore # ignore/add/remove/force # Add or remove unnecessary paren on 'return' statement mod_paren_on_return = remove # ignore/add/remove/force # Whether to change optional semicolons to real semicolons mod_pawn_semicolon = false # false/true # Add parens on 'while' and 'if' statement around bools mod_full_paren_if_bool = true # false/true # Whether to remove superfluous semicolons mod_remove_extra_semicolon = true # false/true # If a function body exceeds the specified number of newlines and doesn't have a comment after # the close brace, a comment will be added. mod_add_long_function_closebrace_comment = 0 # number # If a switch body exceeds the specified number of newlines and doesn't have a comment after # the close brace, a comment will be added. mod_add_long_switch_closebrace_comment = 0 # number # If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after # the #else, a comment will be added. mod_add_long_ifdef_endif_comment = 0 # number # If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after # the #endif, a comment will be added. mod_add_long_ifdef_else_comment = 0 # number # If TRUE, will sort consecutive single-line 'import' statements [Java, D] mod_sort_import = false # false/true # If TRUE, will sort consecutive single-line 'using' statements [C#] mod_sort_using = false # false/true # If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C] # This is generally a bad idea, as it may break your code. mod_sort_include = false # false/true # If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace. mod_move_case_break = false # false/true # If TRUE, it will remove a void 'return;' that appears as the last statement in a function. mod_remove_empty_return = false # false/true # # Comment modifications # # Try to wrap comments at cmt_width columns cmt_width = 0 # number # If false, disable all multi-line comment changes, including cmt_width and leading chars. # Default is true. cmt_indent_multi = false # false/true # Whether to group c-comments that look like they are in a block cmt_c_group = false # false/true # Whether to put an empty '/*' on the first line of the combined c-comment cmt_c_nl_start = false # false/true # Whether to put a newline before the closing '*/' of the combined c-comment cmt_c_nl_end = false # false/true # Whether to group cpp-comments that look like they are in a block cmt_cpp_group = false # false/true # Whether to put an empty '/*' on the first line of the combined cpp-comment cmt_cpp_nl_start = false # false/true # Whether to put a newline before the closing '*/' of the combined cpp-comment cmt_cpp_nl_end = false # false/true # Whether to change cpp-comments into c-comments cmt_cpp_to_c = false # false/true # Whether to put a star on subsequent comment lines cmt_star_cont = false # false/true # The number of spaces to insert at the start of subsequent comment lines cmt_sp_before_star_cont = 0 # number # The number of spaces to insert after the star on subsequent comment lines cmt_sp_after_star_cont = 1 # number # For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of # the comment are the same length. Default=True cmt_multi_check_last = true # false/true # The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment. # Will substitue $(filename) with the current file's name. cmt_insert_file_header = "" # string # The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment. # Will substitue $(filename) with the current file's name. cmt_insert_file_footer = "" # string # The filename that contains text to insert before a function implementation if the function isn't preceeded with a C/C++ comment. # Will substitue $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff. # Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... } cmt_insert_func_header = "" # string # The filename that contains text to insert before a class if the class isn't preceeded with a C/C++ comment. # Will substitue $(class) with the class name. cmt_insert_class_header = "" # string # If a preprocessor is encountered when stepping backwards from a function name, then # this option decides whether the comment should be inserted. # Affects cmt_insert_func_header and cmt_insert_class_header. cmt_insert_before_preproc = false # false/true # # Preprocessor options # # Control indent of preprocessors inside #if blocks at brace level 0 pp_indent = ignore # ignore/add/remove/force # Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false) pp_indent_at_level = false # false/true # If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1. pp_indent_count = 1 # number # Add or remove space after # based on pp_level of #if blocks pp_space = ignore # ignore/add/remove/force # Sets the number of spaces added with pp_space pp_space_count = 0 # number # The indent for #region and #endregion in C# and '#pragma region' in C/C++ pp_indent_region = 0 # number # Whether to indent the code between #region and #endregion pp_region_indent_code = false # false/true # If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level pp_indent_if = 0 # number # Control whether to indent the code between #if, #else and #endif when not at file-level pp_if_indent_code = false # false/true # Whether to indent '#define' at the brace level (true) or from column 1 (false) pp_define_at_level = false # false/true # You can force a token to be a type with the 'type' option. # Example: # type myfoo1 myfoo2 # # You can create custom macro-based indentation using macro-open, # macro-else and macro-close. # Example: # macro-open BEGIN_TEMPLATE_MESSAGE_MAP # macro-open BEGIN_MESSAGE_MAP # macro-close END_MESSAGE_MAP # # You can assign any keyword to any type with the set option. # set func_call_user _ N_ # # The full syntax description of all custom definition config entries # is shown below: # # define custom tokens as: # - embed whitespace in token using '' escape character, or # put token in quotes # - these: ' " and ` are recognized as quote delimiters # # type token1 token2 token3 ... # ^ optionally specify multiple tokens on a single line # define def_token output_token # ^ output_token is optional, then NULL is assumed # macro-open token # macro-close token # macro-else token # set id token1 token2 ... # ^ optionally specify multiple tokens on a single line # ^ id is one of the names in token_enum.h sans the CT_ prefix, # e.g. PP_PRAGMA # # all tokens are separated by any mix of ',' commas, '=' equal signs # and whitespace (space, tab) # lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/style.sh000077500000000000000000000004601247673406200225610ustar00rootroot00000000000000#!/bin/sh uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.h$"` uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.cpp$"` #cover nsm code uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.H$"` uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.C$"` lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-alsa.desktop000066400000000000000000000003101247673406200257260ustar00rootroot00000000000000[Desktop Entry] Name=ZynAddSubFX - Alsa Comment=A powerful realtime software synthesizer Exec=zynaddsubfx -I alsa -O alsa Icon=zynaddsubfx Terminal=false Type=Application Categories=AudioVideo;Audio; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-jack.desktop000066400000000000000000000003101247673406200257160ustar00rootroot00000000000000[Desktop Entry] Name=ZynAddSubFX - Jack Comment=A powerful realtime software synthesizer Exec=zynaddsubfx -I jack -O jack Icon=zynaddsubfx Terminal=false Type=Application Categories=AudioVideo;Audio; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.ico000066400000000000000000000226761247673406200241340ustar00rootroot0000000000000000 %(0` KaK'(4(%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%ç̘~}}}}}}}}}}}}&/%䕉~~}}}||{zzzyxxxh^VKJ=KJ=KF>KC>KC>KC>f\Ux:~}}}zoh{{zzyyQUAly NFAx;9pjf=:8=:7{tyyq{RXEly NFAy<:EB?lfbpgaSYFly OGBz image/svg+xml lmms-1.1.3/src/000077500000000000000000000000001247673406200132665ustar00rootroot00000000000000lmms-1.1.3/src/core/000077500000000000000000000000001247673406200142165ustar00rootroot00000000000000lmms-1.1.3/src/core/AutomatableModel.cpp000066400000000000000000000325521247673406200201500ustar00rootroot00000000000000/* * AutomatableModel.cpp - some implementations of AutomatableModel-class * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "AutomatableModel.h" #include "AutomationPattern.h" #include "ControllerConnection.h" #include "lmms_math.h" float AutomatableModel::s_copiedValue = 0; AutomatableModel::AutomatableModel( DataType type, const float val, const float min, const float max, const float step, Model* parent, const QString & displayName, bool defaultConstructed ) : Model( parent, displayName, defaultConstructed ), m_dataType( type ), m_scaleType( Linear ), m_value( val ), m_initValue( val ), m_minValue( min ), m_maxValue( max ), m_step( step ), m_range( max - min ), m_centerValue( m_minValue ), m_valueChanged( false ), m_setValueDepth( 0 ), m_hasLinkedModels( false ), m_controllerConnection( NULL ) { setInitValue( val ); } AutomatableModel::~AutomatableModel() { while( m_linkedModels.empty() == false ) { m_linkedModels.last()->unlinkModel( this ); m_linkedModels.erase( m_linkedModels.end() - 1 ); } if( m_controllerConnection ) { delete m_controllerConnection; } emit destroyed( id() ); } bool AutomatableModel::isAutomated() const { return AutomationPattern::isAutomated( this ); } void AutomatableModel::saveSettings( QDomDocument& doc, QDomElement& element, const QString& name ) { if( isAutomated() || m_scaleType != Linear ) { // automation needs tuple of data (name, id, value) // scale type also needs an extra value // => it must be appended as a node QDomElement me = doc.createElement( name ); me.setAttribute( "id", id() ); me.setAttribute( "value", m_value ); me.setAttribute( "scale_type", m_scaleType == Logarithmic ? "log" : "linear" ); element.appendChild( me ); } else { // non automation, linear scale (default), can be saved as attribute element.setAttribute( name, m_value ); } if( m_controllerConnection ) { QDomElement controllerElement; // get "connection" element (and create it if needed) QDomNode node = element.namedItem( "connection" ); if( node.isElement() ) { controllerElement = node.toElement(); } else { controllerElement = doc.createElement( "connection" ); element.appendChild( controllerElement ); } QDomElement element = doc.createElement( name ); m_controllerConnection->saveSettings( doc, element ); controllerElement.appendChild( element ); } } void AutomatableModel::loadSettings( const QDomElement& element, const QString& name ) { // compat code QDomNode node = element.namedItem( AutomationPattern::classNodeName() ); if( node.isElement() ) { node = node.namedItem( name ); if( node.isElement() ) { AutomationPattern * p = AutomationPattern::globalAutomationPattern( this ); p->loadSettings( node.toElement() ); setValue( p->valueAt( 0 ) ); // in older projects we sometimes have odd automations // with just one value in - eliminate if necessary if( !p->hasAutomation() ) { delete p; } return; } // logscales were not existing at this point of time // so they can be ignored } QDomNode connectionNode = element.namedItem( "connection" ); // reads controller connection if( connectionNode.isElement() ) { QDomNode thisConnection = connectionNode.toElement().namedItem( name ); if( thisConnection.isElement() ) { setControllerConnection( new ControllerConnection( (Controller*)NULL ) ); m_controllerConnection->loadSettings( thisConnection.toElement() ); //m_controllerConnection->setTargetName( displayName() ); } } // models can be stored as elements (port00) or attributes (port10): // // // // element => there is automation data, or scaletype information node = element.namedItem( name ); if( node.isElement() ) { changeID( node.toElement().attribute( "id" ).toInt() ); setValue( node.toElement().attribute( "value" ).toFloat() ); if( node.toElement().hasAttribute( "scale_type" ) ) { if( node.toElement().attribute( "scale_type" ) == "linear" ) { setScaleType( Linear ); } else if( node.toElement().attribute( "scale_type" ) == "log" ) { setScaleType( Logarithmic ); } } } else if( element.hasAttribute( name ) ) // attribute => read the element's value from the attribute list { setInitValue( element.attribute( name ).toFloat() ); } else { reset(); } } void AutomatableModel::setValue( const float value ) { ++m_setValueDepth; const float old_val = m_value; m_value = fittedValue( value ); if( old_val != m_value ) { // add changes to history so user can undo it addJournalCheckPoint(); // notify linked models for( AutoModelVector::Iterator it = m_linkedModels.begin(); it != m_linkedModels.end(); ++it ) { if( (*it)->m_setValueDepth < 1 && (*it)->fittedValue( value ) != (*it)->m_value ) { bool journalling = (*it)->testAndSetJournalling( isJournalling() ); (*it)->setValue( value ); (*it)->setJournalling( journalling ); } } m_valueChanged = true; emit dataChanged(); } else { emit dataUnchanged(); } --m_setValueDepth; } template T AutomatableModel::logToLinearScale( T value ) const { return castValue( ::logToLinearScale( minValue(), maxValue(), static_cast( value ) ) ); } float AutomatableModel::scaledValue( float value ) const { return m_scaleType == Linear ? value : logToLinearScale( ( value - minValue() ) / m_range ); } float AutomatableModel::inverseScaledValue( float value ) const { return m_scaleType == Linear ? value : ::linearToLogScale( minValue(), maxValue(), value ); } QString AutomatableModel::displayValue( const float val ) const { switch( m_dataType ) { case Float: return QString::number( castValue( scaledValue( val ) ) ); case Integer: return QString::number( castValue( scaledValue( val ) ) ); case Bool: return QString::number( castValue( scaledValue( val ) ) ); } return "0"; } //! @todo: this should be moved into a maths header template void roundAt( T& value, const T& where, const T& step_size ) { if( qAbs( value - where ) < typeInfo::minEps() * qAbs( step_size ) ) { value = where; } } template void AutomatableModel::roundAt( T& value, const T& where ) const { ::roundAt(value, where, m_step); } void AutomatableModel::setAutomatedValue( const float value ) { ++m_setValueDepth; const float oldValue = m_value; const float scaled_value = scaledValue( value ); m_value = fittedValue( scaled_value ); if( oldValue != m_value ) { // notify linked models for( AutoModelVector::Iterator it = m_linkedModels.begin(); it != m_linkedModels.end(); ++it ) { if( (*it)->m_setValueDepth < 1 && !(*it)->fittedValue( m_value ) != (*it)->m_value ) { (*it)->setAutomatedValue( value ); } } m_valueChanged = true; emit dataChanged(); } --m_setValueDepth; } void AutomatableModel::setRange( const float min, const float max, const float step ) { if( ( m_maxValue != max ) || ( m_minValue != min ) ) { m_minValue = min; m_maxValue = max; if( m_minValue > m_maxValue ) { qSwap( m_minValue, m_maxValue ); } m_range = m_maxValue - m_minValue; setStep( step ); // re-adjust value setValue( value() ); emit propertiesChanged(); } } void AutomatableModel::setStep( const float step ) { if( m_step != step ) { m_step = step; emit propertiesChanged(); } } float AutomatableModel::fittedValue( float value ) const { value = tLimit( value, m_minValue, m_maxValue ); if( m_step != 0 ) { value = nearbyintf( value / m_step ) * m_step; } roundAt( value, m_maxValue ); roundAt( value, m_minValue ); roundAt( value, 0.0f ); if( value < m_minValue ) { return m_minValue; } else if( value > m_maxValue ) { return m_maxValue; } return value; } void AutomatableModel::linkModel( AutomatableModel* model ) { if( !m_linkedModels.contains( model ) && model != this ) { m_linkedModels.push_back( model ); m_hasLinkedModels = true; if( !model->hasLinkedModels() ) { QObject::connect( this, SIGNAL( dataChanged() ), model, SIGNAL( dataChanged() ) ); } } } void AutomatableModel::unlinkModel( AutomatableModel* model ) { AutoModelVector::Iterator it = qFind( m_linkedModels.begin(), m_linkedModels.end(), model ); if( it != m_linkedModels.end() ) { m_linkedModels.erase( it ); } m_hasLinkedModels = !m_linkedModels.isEmpty(); } void AutomatableModel::linkModels( AutomatableModel* model1, AutomatableModel* model2 ) { model1->linkModel( model2 ); model2->linkModel( model1 ); } void AutomatableModel::unlinkModels( AutomatableModel* model1, AutomatableModel* model2 ) { model1->unlinkModel( model2 ); model2->unlinkModel( model1 ); } void AutomatableModel::unlinkAllModels() { foreach( AutomatableModel* model, m_linkedModels ) { unlinkModels( this, model ); } m_hasLinkedModels = false; } void AutomatableModel::setControllerConnection( ControllerConnection* c ) { m_controllerConnection = c; if( c ) { QObject::connect( m_controllerConnection, SIGNAL( valueChanged() ), this, SIGNAL( dataChanged() ) ); QObject::connect( m_controllerConnection, SIGNAL( destroyed() ), this, SLOT( unlinkControllerConnection() ) ); m_valueChanged = true; emit dataChanged(); } } float AutomatableModel::controllerValue( int frameOffset ) const { if( m_controllerConnection ) { float v = 0; switch(m_scaleType) { case Linear: v = minValue() + ( range() * controllerConnection()->currentValue( frameOffset ) ); break; case Logarithmic: v = logToLinearScale( controllerConnection()->currentValue( frameOffset )); break; default: qFatal("AutomatableModel::controllerValue(int)" "lacks implementation for a scale type"); break; } if( typeInfo::isEqual( m_step, 1 ) ) { return qRound( v ); } return v; } AutomatableModel* lm = m_linkedModels.first(); if( lm->controllerConnection() ) { return fittedValue( lm->controllerValue( frameOffset ) ); } return fittedValue( lm->m_value ); } void AutomatableModel::unlinkControllerConnection() { if( m_controllerConnection ) { m_controllerConnection->disconnect( this ); } m_controllerConnection = NULL; } void AutomatableModel::setInitValue( const float value ) { m_initValue = fittedValue( value ); bool journalling = testAndSetJournalling( false ); setValue( value ); setJournalling( journalling ); emit initValueChanged( value ); } void AutomatableModel::reset() { setValue( initValue() ); } void AutomatableModel::copyValue() { s_copiedValue = value(); } void AutomatableModel::pasteValue() { setValue( copiedValue() ); } float AutomatableModel::globalAutomationValueAt( const MidiTime& time ) { // get patterns that connect to this model QVector patterns = AutomationPattern::patternsForModel( this ); if( patterns.isEmpty() ) { // if no such patterns exist, return current value return m_value; } else { // of those patterns: // find the patterns which overlap with the miditime position QVector patternsInRange; for( QVector::ConstIterator it = patterns.begin(); it != patterns.end(); it++ ) { int s = ( *it )->startPosition(); int e = ( *it )->endPosition(); if( s <= time && e >= time ) { patternsInRange += ( *it ); } } AutomationPattern * latestPattern = NULL; if( ! patternsInRange.isEmpty() ) { // if there are more than one overlapping patterns, just use the first one because // multiple pattern behaviour is undefined anyway latestPattern = patternsInRange[0]; } else // if we find no patterns at the exact miditime, we need to search for the last pattern before time and use that { int latestPosition = 0; for( QVector::ConstIterator it = patterns.begin(); it != patterns.end(); it++ ) { int e = ( *it )->endPosition(); if( e <= time && e > latestPosition ) { latestPosition = e; latestPattern = ( *it ); } } } if( latestPattern ) { // scale/fit the value appropriately and return it const float value = latestPattern->valueAt( time - latestPattern->startPosition() ); const float scaled_value = scaledValue( value ); return fittedValue( scaled_value ); } // if we still find no pattern, the value at that time is undefined so // just return current value as the best we can do else return m_value; } } #include "moc_AutomatableModel.cxx" lmms-1.1.3/src/core/AutomationPattern.cpp000066400000000000000000000435311247673406200204060ustar00rootroot00000000000000/* * AutomationPattern.cpp - implementation of class AutomationPattern which * holds dynamic values * * Copyright (c) 2008-2014 Tobias Doerffel * Copyright (c) 2006-2008 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "AutomationPattern.h" #include "AutomationPatternView.h" #include "AutomationEditor.h" #include "AutomationTrack.h" #include "ProjectJournal.h" #include "bb_track_container.h" #include "song.h" #include "text_float.h" #include "embed.h" const float AutomationPattern::DEFAULT_MIN_VALUE = 0; const float AutomationPattern::DEFAULT_MAX_VALUE = 1; AutomationPattern::AutomationPattern( AutomationTrack * _auto_track ) : trackContentObject( _auto_track ), m_autoTrack( _auto_track ), m_objects(), m_tension( 1.0 ), m_progressionType( DiscreteProgression ), m_dragging( false ), m_isRecording( false ), m_lastRecordedValue( 0 ) { changeLength( MidiTime( 1, 0 ) ); } AutomationPattern::AutomationPattern( const AutomationPattern & _pat_to_copy ) : trackContentObject( _pat_to_copy.m_autoTrack ), m_autoTrack( _pat_to_copy.m_autoTrack ), m_objects( _pat_to_copy.m_objects ), m_tension( _pat_to_copy.m_tension ), m_progressionType( _pat_to_copy.m_progressionType ) { for( timeMap::const_iterator it = _pat_to_copy.m_timeMap.begin(); it != _pat_to_copy.m_timeMap.end(); ++it ) { m_timeMap[it.key()] = it.value(); m_tangents[it.key()] = _pat_to_copy.m_tangents[it.key()]; } } AutomationPattern::~AutomationPattern() { if( engine::automationEditor() && engine::automationEditor()->currentPattern() == this ) { engine::automationEditor()->setCurrentPattern( NULL ); } } void AutomationPattern::addObject( AutomatableModel * _obj, bool _search_dup ) { if( _search_dup ) { for( objectVector::iterator it = m_objects.begin(); it != m_objects.end(); ++it ) { if( *it == _obj ) { textFloat::displayMessage( _obj->displayName(), tr( "Model is already connected " "to this pattern." ), embed::getIconPixmap( "automation" ), 2000 ); return; } } } // the automation track is unconnected and there is nothing in the track if( m_objects.isEmpty() && hasAutomation() == false ) { // then initialize first value putValue( MidiTime(0), _obj->inverseScaledValue( _obj->value() ), false ); } m_objects += _obj; connect( _obj, SIGNAL( destroyed( jo_id_t ) ), this, SLOT( objectDestroyed( jo_id_t ) ), Qt::DirectConnection ); emit dataChanged(); } void AutomationPattern::setProgressionType( ProgressionTypes _new_progression_type ) { if ( _new_progression_type == DiscreteProgression || _new_progression_type == LinearProgression || _new_progression_type == CubicHermiteProgression ) { m_progressionType = _new_progression_type; emit dataChanged(); } } void AutomationPattern::setTension( QString _new_tension ) { bool ok; float nt = _new_tension.toFloat( & ok ); if( ok && nt > -0.01 && nt < 1.01 ) { m_tension = _new_tension.toFloat(); } } const AutomatableModel * AutomationPattern::firstObject() const { AutomatableModel * m; if( !m_objects.isEmpty() && ( m = m_objects.first() ) != NULL ) { return m; } static FloatModel _fm( 0, DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, 0.001 ); return &_fm; } MidiTime AutomationPattern::length() const { if( m_timeMap.isEmpty() ) return 0; timeMap::const_iterator it = m_timeMap.end(); return MidiTime( qMax( MidiTime( (it-1).key() ).getTact() + 1, 1 ), 0 ); } MidiTime AutomationPattern::putValue( const MidiTime & _time, const float _value, const bool _quant_pos ) { cleanObjects(); MidiTime newTime = _quant_pos && engine::automationEditor() ? note::quantized( _time, engine::automationEditor()->quantization() ) : _time; m_timeMap[newTime] = _value; timeMap::const_iterator it = m_timeMap.find( newTime ); if( it != m_timeMap.begin() ) { it--; } generateTangents(it, 3); // we need to maximize our length in case we're part of a hidden // automation track as the user can't resize this pattern if( getTrack() && getTrack()->type() == track::HiddenAutomationTrack ) { changeLength( length() ); } emit dataChanged(); return newTime; } void AutomationPattern::removeValue( const MidiTime & _time, const bool _quant_pos ) { cleanObjects(); MidiTime newTime = _quant_pos && engine::automationEditor() ? note::quantized( _time, engine::automationEditor()->quantization() ) : _time; m_timeMap.remove( newTime ); m_tangents.remove( newTime ); timeMap::const_iterator it = m_timeMap.lowerBound( newTime ); if( it != m_timeMap.begin() ) { it--; } generateTangents(it, 3); if( getTrack() && getTrack()->type() == track::HiddenAutomationTrack ) { changeLength( length() ); } emit dataChanged(); } /** * @brief Set the position of the point that is being draged. * Calling this function will also automatically set m_dragging to true, * which applyDragValue() have to be called to m_dragging. * @param the time(x position) of the point being dragged * @param the value(y position) of the point being dragged * @param true to snip x position * @return */ MidiTime AutomationPattern::setDragValue( const MidiTime & _time, const float _value, const bool _quant_pos ) { if( m_dragging == false ) { MidiTime newTime = _quant_pos && engine::automationEditor() ? note::quantized( _time, engine::automationEditor()->quantization() ) : _time; this->removeValue( newTime ); m_oldTimeMap = m_timeMap; m_dragging = true; } //Restore to the state before it the point were being dragged m_timeMap = m_oldTimeMap; for( timeMap::const_iterator it = m_timeMap.begin(); it != m_timeMap.end(); it++ ) { generateTangents(it, 3); } return this->putValue( _time, _value, _quant_pos ); } /** * @brief After the point is dragged, this function is called to apply the change. */ void AutomationPattern::applyDragValue() { m_dragging = false; } float AutomationPattern::valueAt( const MidiTime & _time ) const { if( m_timeMap.isEmpty() ) { return 0; } if( m_timeMap.contains( _time ) ) { return m_timeMap[_time]; } // lowerBound returns next value with greater key, therefore we take // the previous element to get the current value timeMap::ConstIterator v = m_timeMap.lowerBound( _time ); if( v == m_timeMap.begin() ) { return 0; } if( v == m_timeMap.end() ) { return (v-1).value(); } return valueAt( v-1, _time - (v-1).key() ); } float AutomationPattern::valueAt( timeMap::const_iterator v, int offset ) const { if( m_progressionType == DiscreteProgression || v == m_timeMap.end() ) { return v.value(); } else if( m_progressionType == LinearProgression ) { float slope = ((v+1).value() - v.value()) / ((v+1).key() - v.key()); return v.value() + offset * slope; } else /* CubicHermiteProgression */ { // Implements a Cubic Hermite spline as explained at: // http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Unit_interval_.280.2C_1.29 // // Note that we are not interpolating a 2 dimensional point over // time as the article describes. We are interpolating a single // value: y. To make this work we map the values of x that this // segment spans to values of t for t = 0.0 -> 1.0 and scale the // tangents _m1 and _m2 int numValues = ((v+1).key() - v.key()); float t = (float) offset / (float) numValues; float m1 = (m_tangents[v.key()]) * numValues * m_tension; float m2 = (m_tangents[(v+1).key()]) * numValues * m_tension; return ( 2*pow(t,3) - 3*pow(t,2) + 1 ) * v.value() + ( pow(t,3) - 2*pow(t,2) + t) * m1 + ( -2*pow(t,3) + 3*pow(t,2) ) * (v+1).value() + ( pow(t,3) - pow(t,2) ) * m2; } } float *AutomationPattern::valuesAfter( const MidiTime & _time ) const { timeMap::ConstIterator v = m_timeMap.lowerBound( _time ); if( v == m_timeMap.end() || (v+1) == m_timeMap.end() ) { return NULL; } int numValues = (v+1).key() - v.key(); float *ret = new float[numValues]; for( int i = 0; i < numValues; i++ ) { ret[i] = valueAt( v, i ); } return ret; } void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "pos", startPosition() ); _this.setAttribute( "len", trackContentObject::length() ); _this.setAttribute( "name", name() ); _this.setAttribute( "prog", QString::number( progressionType() ) ); _this.setAttribute( "tens", QString::number( getTension() ) ); _this.setAttribute( "mute", QString::number( isMuted() ) ); for( timeMap::const_iterator it = m_timeMap.begin(); it != m_timeMap.end(); ++it ) { QDomElement element = _doc.createElement( "time" ); element.setAttribute( "pos", it.key() ); element.setAttribute( "value", it.value() ); _this.appendChild( element ); } for( objectVector::const_iterator it = m_objects.begin(); it != m_objects.end(); ++it ) { if( *it ) { QDomElement element = _doc.createElement( "object" ); element.setAttribute( "id", ( *it )->id() ); _this.appendChild( element ); } } } void AutomationPattern::loadSettings( const QDomElement & _this ) { clear(); movePosition( _this.attribute( "pos" ).toInt() ); setName( _this.attribute( "name" ) ); setProgressionType( static_cast( _this.attribute( "prog" ).toInt() ) ); setTension( _this.attribute( "tens" ) ); setMuted(_this.attribute( "mute", QString::number( false ) ).toInt() ); for( QDomNode node = _this.firstChild(); !node.isNull(); node = node.nextSibling() ) { QDomElement element = node.toElement(); if( element.isNull() ) { continue; } if( element.tagName() == "time" ) { m_timeMap[element.attribute( "pos" ).toInt()] = element.attribute( "value" ).toFloat(); } else if( element.tagName() == "object" ) { m_idsToResolve << element.attribute( "id" ).toInt(); } } int len = _this.attribute( "len" ).toInt(); if( len <= 0 ) { len = length(); } changeLength( len ); generateTangents(); } const QString AutomationPattern::name() const { if( !trackContentObject::name().isEmpty() ) { return trackContentObject::name(); } if( !m_objects.isEmpty() && m_objects.first() != NULL ) { return m_objects.first()->fullDisplayName(); } return tr( "Drag a control while pressing " ); } void AutomationPattern::processMidiTime( const MidiTime & time ) { if( ! isRecording() ) { if( time >= 0 && hasAutomation() ) { const float val = valueAt( time ); for( objectVector::iterator it = m_objects.begin(); it != m_objects.end(); ++it ) { if( *it ) { ( *it )->setAutomatedValue( val ); } } } } else { if( time >= 0 && ! m_objects.isEmpty() ) { const float value = static_cast( firstObject()->value() ); if( value != m_lastRecordedValue ) { putValue( time, value, true ); m_lastRecordedValue = value; } else if( valueAt( time ) != value ) { removeValue( time, false ); } } } } trackContentObjectView * AutomationPattern::createView( trackView * _tv ) { return new AutomationPatternView( this, _tv ); } bool AutomationPattern::isAutomated( const AutomatableModel * _m ) { TrackContainer::TrackList l; l += engine::getSong()->tracks(); l += engine::getBBTrackContainer()->tracks(); l += engine::getSong()->globalAutomationTrack(); for( TrackContainer::TrackList::ConstIterator it = l.begin(); it != l.end(); ++it ) { if( ( *it )->type() == track::AutomationTrack || ( *it )->type() == track::HiddenAutomationTrack ) { const track::tcoVector & v = ( *it )->getTCOs(); for( track::tcoVector::ConstIterator j = v.begin(); j != v.end(); ++j ) { const AutomationPattern * a = dynamic_cast( *j ); if( a && a->hasAutomation() ) { for( objectVector::const_iterator k = a->m_objects.begin(); k != a->m_objects.end(); ++k ) { if( *k == _m ) { return true; } } } } } } return false; } /*! \brief returns a list of all the automation patterns everywhere that are connected to a specific model * \param _m the model we want to look for */ QVector AutomationPattern::patternsForModel( const AutomatableModel * _m ) { QVector patterns; TrackContainer::TrackList l; l += engine::getSong()->tracks(); l += engine::getBBTrackContainer()->tracks(); l += engine::getSong()->globalAutomationTrack(); // go through all tracks... for( TrackContainer::TrackList::ConstIterator it = l.begin(); it != l.end(); ++it ) { // we want only automation tracks... if( ( *it )->type() == track::AutomationTrack || ( *it )->type() == track::HiddenAutomationTrack ) { // get patterns in those tracks.... const track::tcoVector & v = ( *it )->getTCOs(); // go through all the patterns... for( track::tcoVector::ConstIterator j = v.begin(); j != v.end(); ++j ) { AutomationPattern * a = dynamic_cast( *j ); // check that the pattern has automation if( a && a->hasAutomation() ) { // now check is the pattern is connected to the model we want by going through all the connections // of the pattern bool has_object = false; for( objectVector::const_iterator k = a->m_objects.begin(); k != a->m_objects.end(); ++k ) { if( *k == _m ) { has_object = true; } } // if the patterns is connected to the model, add it to the list if( has_object ) { patterns += a; } } } } } return patterns; } AutomationPattern * AutomationPattern::globalAutomationPattern( AutomatableModel * _m ) { AutomationTrack * t = engine::getSong()->globalAutomationTrack(); track::tcoVector v = t->getTCOs(); for( track::tcoVector::const_iterator j = v.begin(); j != v.end(); ++j ) { AutomationPattern * a = dynamic_cast( *j ); if( a ) { for( objectVector::const_iterator k = a->m_objects.begin(); k != a->m_objects.end(); ++k ) { if( *k == _m ) { return a; } } } } AutomationPattern * a = new AutomationPattern( t ); a->addObject( _m, false ); return a; } void AutomationPattern::resolveAllIDs() { TrackContainer::TrackList l = engine::getSong()->tracks() + engine::getBBTrackContainer()->tracks(); l += engine::getSong()->globalAutomationTrack(); for( TrackContainer::TrackList::iterator it = l.begin(); it != l.end(); ++it ) { if( ( *it )->type() == track::AutomationTrack || ( *it )->type() == track::HiddenAutomationTrack ) { track::tcoVector v = ( *it )->getTCOs(); for( track::tcoVector::iterator j = v.begin(); j != v.end(); ++j ) { AutomationPattern * a = dynamic_cast( *j ); if( a ) { for( QVector::Iterator k = a->m_idsToResolve.begin(); k != a->m_idsToResolve.end(); ++k ) { JournallingObject * o = engine::projectJournal()-> journallingObject( *k ); if( o && dynamic_cast( o ) ) { a->addObject( dynamic_cast( o ), false ); } } a->m_idsToResolve.clear(); a->dataChanged(); } } } } } void AutomationPattern::clear() { m_timeMap.clear(); m_tangents.clear(); emit dataChanged(); if( engine::automationEditor() && engine::automationEditor()->currentPattern() == this ) { engine::automationEditor()->update(); } } void AutomationPattern::openInAutomationEditor() { engine::automationEditor()->setCurrentPattern( this ); engine::automationEditor()->parentWidget()->show(); engine::automationEditor()->setFocus(); } void AutomationPattern::objectDestroyed( jo_id_t _id ) { // TODO: distict between temporary removal (e.g. LADSPA controls // when switching samplerate) and real deletions because in the latter // case we had to remove ourselves if we're the global automation // pattern of the destroyed object m_idsToResolve += _id; for( objectVector::Iterator objIt = m_objects.begin(); objIt != m_objects.end(); objIt++ ) { Q_ASSERT( !(*objIt).isNull() ); if( (*objIt)->id() == _id ) { //Assign to objIt so that this loop work even break; is removed. objIt = m_objects.erase( objIt ); break; } } emit dataChanged(); } void AutomationPattern::cleanObjects() { for( objectVector::iterator it = m_objects.begin(); it != m_objects.end(); ) { if( *it ) { ++it; } else { it = m_objects.erase( it ); } } } void AutomationPattern::generateTangents() { generateTangents(m_timeMap.begin(), m_timeMap.size()); } void AutomationPattern::generateTangents( timeMap::const_iterator it, int numToGenerate ) { if( m_timeMap.size() < 2 ) { m_tangents[it.key()] = 0; return; } for( int i = 0; i < numToGenerate; i++ ) { if( it == m_timeMap.begin() ) { m_tangents[it.key()] = ( (it+1).value() - (it).value() ) / ( (it+1).key() - (it).key() ); } else if( it+1 == m_timeMap.end() ) { m_tangents[it.key()] = 0; return; } else { m_tangents[it.key()] = ( (it+1).value() - (it-1).value() ) / ( (it+1).key() - (it-1).key() ); } it++; } } #include "moc_AutomationPattern.cxx" lmms-1.1.3/src/core/BandLimitedWave.cpp000066400000000000000000000166621247673406200177340ustar00rootroot00000000000000/* * BandLimitedWave.h - helper functions for band-limited * waveform generation * * Copyright (c) 2014 Vesa Kivimäki * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "BandLimitedWave.h" WaveMipMap BandLimitedWave::s_waveforms[4] = { }; bool BandLimitedWave::s_wavesGenerated = false; QString BandLimitedWave::s_wavetableDir = ""; QDataStream& operator<< ( QDataStream &out, WaveMipMap &waveMipMap ) { for( int tbl = 0; tbl <= MAXTBL; tbl++ ) { for( int i = 0; i < TLENS[tbl]; i++ ) { out << waveMipMap.sampleAt( tbl, i ); } } return out; } QDataStream& operator>> ( QDataStream &in, WaveMipMap &waveMipMap ) { sample_t sample; for( int tbl = 0; tbl <= MAXTBL; tbl++ ) { for( int i = 0; i < TLENS[tbl]; i++ ) { in >> sample; waveMipMap.setSampleAt( tbl, i, sample ); } } return in; } void BandLimitedWave::generateWaves() { // don't generate if they already exist if( s_wavesGenerated ) return; int i; // set wavetable directory s_wavetableDir = configManager::inst()->dataDir() + "wavetables/"; // set wavetable files QFile saw_file( s_wavetableDir + "saw.bin" ); QFile sqr_file( s_wavetableDir + "sqr.bin" ); QFile tri_file( s_wavetableDir + "tri.bin" ); QFile moog_file( s_wavetableDir + "moog.bin" ); // saw wave - BLSaw // check for file and use it if exists if( saw_file.exists() ) { saw_file.open( QIODevice::ReadOnly ); QDataStream in( &saw_file ); in >> s_waveforms[ BandLimitedWave::BLSaw ]; saw_file.close(); } else { for( i = 0; i <= MAXTBL; i++ ) { const int len = TLENS[i]; //const double om = 1.0 / len; double max = 0.0; for( int ph = 0; ph < len; ph++ ) { int harm = 1; double s = 0.0f; double hlen; do { hlen = static_cast( len ) / static_cast( harm ); const double amp = -1.0 / static_cast( harm ); //const double a2 = cos( om * harm * F_2PI ); s += amp * /*a2 **/sin( static_cast( ph * harm ) / static_cast( len ) * F_2PI ); harm++; } while( hlen > 2.0 ); s_waveforms[ BandLimitedWave::BLSaw ].setSampleAt( i, ph, s ); max = qMax( max, qAbs( s ) ); } // normalize for( int ph = 0; ph < len; ph++ ) { sample_t s = s_waveforms[ BandLimitedWave::BLSaw ].sampleAt( i, ph ) / max; s_waveforms[ BandLimitedWave::BLSaw ].setSampleAt( i, ph, s ); } } } // square wave - BLSquare // check for file and use it if exists if( sqr_file.exists() ) { sqr_file.open( QIODevice::ReadOnly ); QDataStream in( &sqr_file ); in >> s_waveforms[ BandLimitedWave::BLSquare ]; sqr_file.close(); } else { for( i = 0; i <= MAXTBL; i++ ) { const int len = TLENS[i]; //const double om = 1.0 / len; double max = 0.0; for( int ph = 0; ph < len; ph++ ) { int harm = 1; double s = 0.0f; double hlen; do { hlen = static_cast( len ) / static_cast( harm ); const double amp = 1.0 / static_cast( harm ); //const double a2 = cos( om * harm * F_2PI ); s += amp * /*a2 **/ sin( static_cast( ph * harm ) / static_cast( len ) * F_2PI ); harm += 2; } while( hlen > 2.0 ); s_waveforms[ BandLimitedWave::BLSquare ].setSampleAt( i, ph, s ); max = qMax( max, qAbs( s ) ); } // normalize for( int ph = 0; ph < len; ph++ ) { sample_t s = s_waveforms[ BandLimitedWave::BLSquare ].sampleAt( i, ph ) / max; s_waveforms[ BandLimitedWave::BLSquare ].setSampleAt( i, ph, s ); } } } // triangle wave - BLTriangle if( tri_file.exists() ) { tri_file.open( QIODevice::ReadOnly ); QDataStream in( &tri_file ); in >> s_waveforms[ BandLimitedWave::BLTriangle ]; tri_file.close(); } else { for( i = 0; i <= MAXTBL; i++ ) { const int len = TLENS[i]; //const double om = 1.0 / len; double max = 0.0; for( int ph = 0; ph < len; ph++ ) { int harm = 1; double s = 0.0f; double hlen; do { hlen = static_cast( len ) / static_cast( harm ); const double amp = 1.0 / static_cast( harm * harm ); //const double a2 = cos( om * harm * F_2PI ); s += amp * /*a2 **/ sin( ( static_cast( ph * harm ) / static_cast( len ) + ( ( harm + 1 ) % 4 == 0 ? 0.5 : 0.0 ) ) * F_2PI ); harm += 2; } while( hlen > 2.0 ); s_waveforms[ BandLimitedWave::BLTriangle ].setSampleAt( i, ph, s ); max = qMax( max, qAbs( s ) ); } // normalize for( int ph = 0; ph < len; ph++ ) { sample_t s = s_waveforms[ BandLimitedWave::BLTriangle ].sampleAt( i, ph ) / max; s_waveforms[ BandLimitedWave::BLTriangle ].setSampleAt( i, ph, s ); } } } // moog saw wave - BLMoog // basically, just add in triangle + 270-phase saw if( moog_file.exists() ) { moog_file.open( QIODevice::ReadOnly ); QDataStream in( &moog_file ); in >> s_waveforms[ BandLimitedWave::BLMoog ]; moog_file.close(); } else { for( i = 0; i <= MAXTBL; i++ ) { const int len = TLENS[i]; for( int ph = 0; ph < len; ph++ ) { const int sawph = ( ph + static_cast( len * 0.75 ) ) % len; const sample_t saw = s_waveforms[ BandLimitedWave::BLSaw ].sampleAt( i, sawph ); const sample_t tri = s_waveforms[ BandLimitedWave::BLTriangle ].sampleAt( i, ph ); s_waveforms[ BandLimitedWave::BLMoog ].setSampleAt( i, ph, ( saw + tri ) * 0.5f ); } } } // set the generated flag so we don't load/generate them again needlessly s_wavesGenerated = true; // generate files, serialize mipmaps as QDataStreams and save them on disk // // normally these are now provided with LMMS as pre-generated so we don't have to do this, // but I'm leaving the code here in case it's needed in the future // (maybe we add more waveforms or change the generation code or mipmap format, etc.) /* // if you want to generate the files, you need to set the filenames and paths here - // can't use the usual wavetable directory here as it can require permissions on // some systems... QFile sawfile( "path-to-wavetables/saw.bin" ); QFile sqrfile( "path-to-wavetables/sqr.bin" ); QFile trifile( "path-to-wavetables/tri.bin" ); QFile moogfile( "path-to-wavetables/moog.bin" ); sawfile.open( QIODevice::WriteOnly ); QDataStream sawout( &sawfile ); sawout << s_waveforms[ BandLimitedWave::BLSaw ]; sawfile.close(); sqrfile.open( QIODevice::WriteOnly ); QDataStream sqrout( &sqrfile ); sqrout << s_waveforms[ BandLimitedWave::BLSquare ]; sqrfile.close(); trifile.open( QIODevice::WriteOnly ); QDataStream triout( &trifile ); triout << s_waveforms[ BandLimitedWave::BLTriangle ]; trifile.close(); moogfile.open( QIODevice::WriteOnly ); QDataStream moogout( &moogfile ); moogout << s_waveforms[ BandLimitedWave::BLMoog ]; moogfile.close(); */ } lmms-1.1.3/src/core/Clipboard.cpp000066400000000000000000000026351247673406200166270ustar00rootroot00000000000000/* * Clipboard.cpp - the clipboard for patterns, notes etc. * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Clipboard.h" #include "JournallingObject.h" Clipboard::Map Clipboard::content; void Clipboard::copy( JournallingObject * _obj ) { QDomDocument doc; QDomElement parent = doc.createElement( "Clipboard" ); _obj->saveState( doc, parent ); content[_obj->nodeName()] = parent.firstChild().toElement(); } const QDomElement * Clipboard::getContent( const QString & _node_name ) { if( content.find( _node_name ) != content.end() ) { return &content[_node_name]; } return NULL; } lmms-1.1.3/src/core/ComboBoxModel.cpp000066400000000000000000000030541247673406200174150ustar00rootroot00000000000000/* * ComboBoxModel.cpp - implementation of ComboBoxModel * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ComboBoxModel.h" #include "embed.h" void ComboBoxModel::addItem( const QString& item, PixmapLoader* loader ) { m_items.push_back( qMakePair( item, loader ) ); setRange( 0, m_items.size() - 1 ); } void ComboBoxModel::clear() { setRange( 0, 0 ); foreach( const Item& i, m_items ) { delete i.second; } m_items.clear(); emit propertiesChanged(); } int ComboBoxModel::findText( const QString& txt ) const { for( QVector::ConstIterator it = m_items.begin(); it != m_items.end(); ++it ) { if( ( *it ).first == txt ) { return it - m_items.begin(); } } return -1; } #include "moc_ComboBoxModel.cxx" lmms-1.1.3/src/core/Controller.cpp000066400000000000000000000137171247673406200170560ustar00rootroot00000000000000/* * Controller.cpp - implementation of class controller which handles * remote-control of AutomatableModels * * Copyright (c) 2008 Paul Giblock * Copyright (c) 2014 Lukas W * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "song.h" #include "engine.h" #include "Mixer.h" #include "Controller.h" #include "ControllerConnection.h" #include "ControllerDialog.h" #include "LfoController.h" #include "MidiController.h" #include "PeakController.h" unsigned int Controller::s_frames = 0; QVector Controller::s_controllers; Controller::Controller( ControllerTypes _type, Model * _parent, const QString & _display_name ) : Model( _parent, _display_name ), JournallingObject(), m_connectionCount( 0 ), m_type( _type ) { if( _type != DummyController && _type != MidiController ) { s_controllers.append( this ); // Determine which name to use for ( uint i=s_controllers.size(); ; i++ ) { QString new_name = QString( tr( "Controller %1" ) ) .arg( i ); // Check if name is already in use bool name_used = false; QVector::const_iterator it; for ( it = s_controllers.constBegin(); it != s_controllers.constEnd(); ++it ) { if ( (*it)->name() == new_name ) { name_used = true; break; } } if ( ! name_used ) { m_name = new_name; break; } } } } Controller::~Controller() { int idx = s_controllers.indexOf( this ); if( idx >= 0 ) { s_controllers.remove( idx ); } if( engine::getSong() ) { engine::getSong()->removeController( this ); } // Remove connections by destroyed signal } // Get current value, with an offset into the current buffer for sample exactness float Controller::currentValue( int _offset ) { if( _offset == 0 || isSampleExact() ) { m_currentValue = fittedValue( value( _offset ) ); } return m_currentValue; } float Controller::value( int _offset ) { return 0.5f; } // Get position in frames unsigned int Controller::runningFrames() { return s_frames; } // Get position in seconds float Controller::runningTime() { return s_frames / engine::mixer()->processingSampleRate(); } void Controller::triggerFrameCounter() { for( int i = 0; i < s_controllers.size(); ++i ) { // This signal is for updating values for both stubborn knobs and for // painting. If we ever get all the widgets to use or at least check // currentValue() then we can throttle the signal and only use it for // GUI. emit s_controllers.at(i)->valueChanged(); } s_frames += engine::mixer()->framesPerPeriod(); //emit s_signaler.triggerValueChanged(); } void Controller::resetFrameCounter() { s_frames = 0; } Controller * Controller::create( ControllerTypes _ct, Model * _parent ) { static Controller * dummy = NULL; Controller * c = NULL; switch( _ct ) { case Controller::DummyController: if( dummy ) c = dummy; else { c = new Controller( DummyController, NULL, QString() ); dummy = c; } break; case Controller::LfoController: c = new ::LfoController( _parent ); break; case Controller::PeakController: //Already instantiated in EffectChain::loadSettings() Q_ASSERT( false ); break; case Controller::MidiController: c = new ::MidiController( _parent ); break; default: break; } return( c ); } Controller * Controller::create( const QDomElement & _this, Model * _parent ) { Controller * c; if( _this.attribute( "type" ).toInt() == Controller::PeakController ) { c = PeakController::getControllerBySetting( _this ); } else { c = create( static_cast( _this.attribute( "type" ).toInt() ), _parent ); } if( c != NULL ) { c->restoreState( _this ); } return( c ); } bool Controller::hasModel( const Model * m ) { QObjectList chldren = children(); for( int i = 0; i < chldren.size(); ++i ) { QObject * c = chldren.at(i); AutomatableModel * am = qobject_cast(c); if( am != NULL ) { if( am == m ) { return true; } ControllerConnection * cc = am->controllerConnection(); if( cc != NULL ) { if( cc->getController()->hasModel( m ) ) { return true; } } } } return false; } void Controller::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "type", type() ); _this.setAttribute( "name", name() ); } void Controller::loadSettings( const QDomElement & _this ) { if( _this.attribute( "type" ).toInt() != type() ) { qWarning( "controller-type does not match controller-type of " "settings-node!\n" ); } setName( _this.attribute( "name" ) ); } QString Controller::nodeName() const { return( "Controller" ); } ControllerDialog * Controller::createDialog( QWidget * _parent ) { ControllerDialog * d = new ControllerDialog( this, _parent ); return d; } void Controller::addConnection( ControllerConnection * ) { m_connectionCount++; } void Controller::removeConnection( ControllerConnection * ) { m_connectionCount--; Q_ASSERT( m_connectionCount >= 0 ); } int Controller::connectionCount() const{ return m_connectionCount; } #include "moc_Controller.cxx" lmms-1.1.3/src/core/ControllerConnection.cpp000066400000000000000000000120041247673406200210620ustar00rootroot00000000000000/* * ControllerConnection.cpp - implementation of class controller connection * which handles the link between AutomatableModels and controllers * * Copyright (c) 2008 Paul Giblock * Copyright (c) 2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "song.h" #include "engine.h" #include "Mixer.h" #include "ControllerConnection.h" ControllerConnectionVector ControllerConnection::s_connections; ControllerConnection::ControllerConnection( Controller * _controller ) : m_controller( NULL ), m_controllerId( -1 ), m_ownsController( false ) { if( _controller != NULL ) { setController( _controller ); } else { m_controller = Controller::create( Controller::DummyController, NULL ); } s_connections.append( this ); } ControllerConnection::ControllerConnection( int _controllerId ) : m_controller( Controller::create( Controller::DummyController, NULL ) ), m_controllerId( _controllerId ), m_ownsController( false ) { s_connections.append( this ); } ControllerConnection::~ControllerConnection() { if( m_controller && m_controller->type() != Controller::DummyController ) { m_controller->removeConnection( this ); } s_connections.remove( s_connections.indexOf( this ) ); if( m_ownsController ) { delete m_controller; } } void ControllerConnection::setController( int /*_controllerId*/ ) { } void ControllerConnection::setController( Controller * _controller ) { if( m_ownsController && m_controller ) { delete m_controller; m_controller = NULL; } if( m_controller && m_controller->type() != Controller::DummyController ) { m_controller->removeConnection( this ); } if( !_controller ) { m_controller = Controller::create( Controller::DummyController, NULL ); } else { m_controller = _controller; } m_controllerId = -1; if( _controller->type() != Controller::DummyController ) { _controller->addConnection( this ); QObject::connect( _controller, SIGNAL( valueChanged() ), this, SIGNAL( valueChanged() ) ); } m_ownsController = ( _controller->type() == Controller::MidiController ); // If we don't own the controller, allow deletion of controller // to delete the connection if( !m_ownsController ) { QObject::connect( _controller, SIGNAL( destroyed() ), this, SLOT( deleteConnection() ) ); } } inline void ControllerConnection::setTargetName( const QString & _name ) { m_targetName = _name; if( m_controller ) { // m_controller->getMidiPort()->setName( _name ); } } /* * A connection may not be finalized. This means, the connection should exist, * but the controller does not yet exist. This happens when loading. Even * loading connections last won't help, since there can be connections BETWEEN * controllers. So, we remember the controller-ID and use a dummyController * instead. Once the song is loaded, finalizeConnections() connects to the proper controllers */ void ControllerConnection::finalizeConnections() { for( int i = 0; i < s_connections.size(); ++i ) { ControllerConnection * c = s_connections[i]; if ( !c->isFinalized() && c->m_controllerId < engine::getSong()->controllers().size() ) { c->setController( engine::getSong()-> controllers().at( c->m_controllerId ) ); } } } void ControllerConnection::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( engine::getSong() ) { if( m_ownsController ) { m_controller->saveState( _doc, _this ); } else { int id = engine::getSong()->controllers().indexOf( m_controller ); if( id >= 0 ) { _this.setAttribute( "id", id ); } } } } void ControllerConnection::loadSettings( const QDomElement & _this ) { QDomNode node = _this.firstChild(); if( !node.isNull() ) { setController( Controller::create( node.toElement(), engine::getSong() ) ); } else { if( _this.attribute( "id" ).toInt() >= 0 ) { m_controllerId = _this.attribute( "id" ).toInt(); } else { qWarning( "controller index invalid\n" ); m_controllerId = -1; } m_controller = Controller::create( Controller::DummyController, NULL ); } } void ControllerConnection::deleteConnection() { delete this; } #include "moc_ControllerConnection.cxx" lmms-1.1.3/src/core/DataFile.cpp000066400000000000000000000440051247673406200163760ustar00rootroot00000000000000/* * DataFile.cpp - implementation of class DataFile * * Copyright (c) 2004-2014 Tobias Doerffel * Copyright (c) 2012-2013 Paul Giblock

    * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "DataFile.h" #include #include #include #include #include #include #include "config_mgr.h" #include "project_version.h" #include "SongEditor.h" #include "Effect.h" #include "lmmsversion.h" #include "base64.h" // bbTCO::defaultColor() #include "bb_track.h" DataFile::typeDescStruct DataFile::s_types[DataFile::TypeCount] = { { DataFile::UnknownType, "unknown" }, { DataFile::SongProject, "song" }, { DataFile::SongProjectTemplate, "songtemplate" }, { DataFile::InstrumentTrackSettings, "instrumenttracksettings" }, { DataFile::DragNDropData, "dnddata" }, { DataFile::ClipboardData, "clipboard-data" }, { DataFile::JournalData, "journaldata" }, { DataFile::EffectSettings, "effectsettings" } } ; DataFile::LocaleHelper::LocaleHelper( Mode mode ) { switch( mode ) { case ModeLoad: // set a locale for which QString::fromFloat() returns valid values if // floating point separator is a comma - otherwise we would fail to load // older projects made by people from various countries due to their // locale settings QLocale::setDefault( QLocale::German ); break; case ModeSave: // set default locale to C so that floating point decimals are rendered to // strings with periods as decimal point instead of commas in some countries QLocale::setDefault( QLocale::C ); default: break; } } DataFile::LocaleHelper::~LocaleHelper() { // revert to original locale QLocale::setDefault( QLocale::system() ); } DataFile::DataFile( Type type ) : QDomDocument( "lmms-project" ), m_content(), m_head(), m_type( type ) { appendChild( createProcessingInstruction("xml", "version=\"1.0\"")); QDomElement root = createElement( "lmms-project" ); root.setAttribute( "version", LDF_VERSION_STRING ); root.setAttribute( "type", typeName( type ) ); root.setAttribute( "creator", "LMMS" ); root.setAttribute( "creatorversion", LMMS_VERSION ); appendChild( root ); m_head = createElement( "head" ); root.appendChild( m_head ); m_content = createElement( typeName( type ) ); root.appendChild( m_content ); } DataFile::DataFile( const QString & _fileName ) : QDomDocument(), m_content(), m_head() { QFile inFile( _fileName ); if( !inFile.open( QIODevice::ReadOnly ) ) { QMessageBox::critical( NULL, SongEditor::tr( "Could not open file" ), SongEditor::tr( "Could not open file %1. You probably " "have no permissions to read this " "file.\n Please make sure to have at " "least read permissions to the file " "and try again." ).arg( _fileName ) ); return; } loadData( inFile.readAll(), _fileName ); } DataFile::DataFile( const QByteArray & _data ) : QDomDocument(), m_content(), m_head() { loadData( _data, "" ); } DataFile::~DataFile() { } QString DataFile::nameWithExtension( const QString & _fn ) const { switch( type() ) { case SongProject: if( _fn.section( '.', -1 ) != "mmp" && _fn.section( '.', -1 ) != "mpt" && _fn.section( '.', -1 ) != "mmpz" ) { if( configManager::inst()->value( "app", "nommpz" ).toInt() == 0 ) { return _fn + ".mmpz"; } return _fn + ".mmp"; } break; case SongProjectTemplate: if( _fn.section( '.',-1 ) != "mpt" ) { return _fn + ".mpt"; } break; case InstrumentTrackSettings: if( _fn.section( '.', -1 ) != "xpf" ) { return _fn + ".xpf"; } break; default: ; } return _fn; } void DataFile::write( QTextStream & _strm ) { if( type() == SongProject || type() == SongProjectTemplate || type() == InstrumentTrackSettings ) { cleanMetaNodes( documentElement() ); } save(_strm, 2); } bool DataFile::writeFile( const QString& filename ) { const QString fullName = nameWithExtension( filename ); const QString fullNameTemp = fullName + ".new"; const QString fullNameBak = fullName + ".bak"; QFile outfile( fullNameTemp ); if( !outfile.open( QIODevice::WriteOnly | QIODevice::Truncate ) ) { QMessageBox::critical( NULL, SongEditor::tr( "Could not write file" ), SongEditor::tr( "Could not open %1 for writing. You probably are not permitted to " "write to this file. Please make sure you have write-access to " "the file and try again." ).arg( fullName ) ); return false; } if( fullName.section( '.', -1 ) == "mmpz" ) { QString xml; QTextStream ts( &xml ); write( ts ); outfile.write( qCompress( xml.toUtf8() ) ); } else { QTextStream ts( &outfile ); write( ts ); } outfile.close(); // make sure the file has been written correctly if( QFileInfo( outfile.fileName() ).size() > 0 ) { // remove old backup file QFile::remove( fullNameBak ); // move current file to backup file QFile::rename( fullName, fullNameBak ); // move temporary file to current file QFile::rename( fullNameTemp, fullName ); return true; } return false; } DataFile::Type DataFile::type( const QString& typeName ) { for( int i = 0; i < TypeCount; ++i ) { if( s_types[i].m_name == typeName ) { return static_cast( i ); } } // compat code if( typeName == "channelsettings" ) { return DataFile::InstrumentTrackSettings; } return UnknownType; } QString DataFile::typeName( Type type ) { if( type >= UnknownType && type < TypeCount ) { return s_types[type].m_name; } return s_types[UnknownType].m_name; } void DataFile::cleanMetaNodes( QDomElement _de ) { QDomNode node = _de.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( node.toElement().attribute( "metadata" ).toInt() ) { QDomNode ns = node.nextSibling(); _de.removeChild( node ); node = ns; continue; } if( node.hasChildNodes() ) { cleanMetaNodes( node.toElement() ); } } node = node.nextSibling(); } } void DataFile::upgrade() { projectVersion version = documentElement().attribute( "creatorversion" ). replace( "svn", "" ); if( version < "0.2.1-20070501" ) { QDomNodeList list = elementsByTagName( "arpandchords" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "arpdir" ) ) { int arpdir = el.attribute( "arpdir" ).toInt(); if( arpdir > 0 ) { el.setAttribute( "arpdir", arpdir - 1 ); } else { el.setAttribute( "arpdisabled", "1" ); } } } list = elementsByTagName( "sampletrack" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.attribute( "vol" ) != "" ) { el.setAttribute( "vol", el.attribute( "vol" ).toFloat() * 100.0f ); } else { QDomNode node = el.namedItem( "automation-pattern" ); if( !node.isElement() || !node.namedItem( "vol" ).isElement() ) { el.setAttribute( "vol", 100.0f ); } } } list = elementsByTagName( "ladspacontrols" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QDomNode anode = el.namedItem( "automation-pattern" ); QDomNode node = anode.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { QString name = node.nodeName(); if( name.endsWith( "link" ) ) { el.setAttribute( name, node.namedItem( "time" ) .toElement() .attribute( "value" ) ); QDomNode oldNode = node; node = node.nextSibling(); anode.removeChild( oldNode ); continue; } } node = node.nextSibling(); } } QDomNode node = m_head.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( node.nodeName() == "bpm" ) { int value = node.toElement().attribute( "value" ).toInt(); if( value > 0 ) { m_head.setAttribute( "bpm", value ); QDomNode oldNode = node; node = node.nextSibling(); m_head.removeChild( oldNode ); continue; } } else if( node.nodeName() == "mastervol" ) { int value = node.toElement().attribute( "value" ).toInt(); if( value > 0 ) { m_head.setAttribute( "mastervol", value ); QDomNode oldNode = node; node = node.nextSibling(); m_head.removeChild( oldNode ); continue; } } else if( node.nodeName() == "masterpitch" ) { m_head.setAttribute( "masterpitch", -node.toElement().attribute( "value" ).toInt() ); QDomNode oldNode = node; node = node.nextSibling(); m_head.removeChild( oldNode ); continue; } } node = node.nextSibling(); } } if( version < "0.2.1-20070508" ) { QDomNodeList list = elementsByTagName( "arpandchords" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "chorddisabled" ) ) { el.setAttribute( "chord-enabled", !el.attribute( "chorddisabled" ) .toInt() ); el.setAttribute( "arp-enabled", !el.attribute( "arpdisabled" ) .toInt() ); } else if( !el.hasAttribute( "chord-enabled" ) ) { el.setAttribute( "chord-enabled", true ); el.setAttribute( "arp-enabled", el.attribute( "arpdir" ).toInt() != 0 ); } } while( !( list = elementsByTagName( "channeltrack" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "instrumenttrack" ); } list = elementsByTagName( "instrumenttrack" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "vol" ) ) { float value = el.attribute( "vol" ).toFloat(); value = roundf( value * 0.585786438f ); el.setAttribute( "vol", value ); } else { QDomNodeList vol_list = el.namedItem( "automation-pattern" ) .namedItem( "vol" ).toElement() .elementsByTagName( "time" ); for( int j = 0; !vol_list.item( j ).isNull(); ++j ) { QDomElement timeEl = list.item( j ) .toElement(); int value = timeEl.attribute( "value" ) .toInt(); value = (int)roundf( value * 0.585786438f ); timeEl.setAttribute( "value", value ); } } } } if( version < "0.3.0-rc2" ) { QDomNodeList list = elementsByTagName( "arpandchords" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.attribute( "arpdir" ).toInt() > 0 ) { el.setAttribute( "arpdir", el.attribute( "arpdir" ).toInt() - 1 ); } } } if( version < "0.3.0" ) { QDomNodeList list; while( !( list = elementsByTagName( "pluckedstringsynth" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "vibedstrings" ); el.setAttribute( "active0", 1 ); } while( !( list = elementsByTagName( "lb303" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "lb302" ); } while( !( list = elementsByTagName( "channelsettings" ) ). isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "instrumenttracksettings" ); } } if( version < "0.4.0-20080104" ) { QDomNodeList list = elementsByTagName( "fx" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "fxdisabled" ) && el.attribute( "fxdisabled" ).toInt() == 0 ) { el.setAttribute( "enabled", 1 ); } } } if( version < "0.4.0-20080118" ) { QDomNodeList list; while( !( list = elementsByTagName( "fx" ) ).isEmpty() ) { QDomElement fxchain = list.item( 0 ).toElement(); fxchain.setTagName( "fxchain" ); QDomNode rack = list.item( 0 ).firstChild(); QDomNodeList effects = rack.childNodes(); // move items one level up while( effects.count() ) { fxchain.appendChild( effects.at( 0 ) ); } fxchain.setAttribute( "numofeffects", rack.toElement().attribute( "numofeffects" ) ); fxchain.removeChild( rack ); } } if( version < "0.4.0-20080129" ) { QDomNodeList list; while( !( list = elementsByTagName( "arpandchords" ) ).isEmpty() ) { QDomElement aac = list.item( 0 ).toElement(); aac.setTagName( "arpeggiator" ); QDomNode cloned = aac.cloneNode(); cloned.toElement().setTagName( "chordcreator" ); aac.parentNode().appendChild( cloned ); } } if( version < "0.4.0-20080409" ) { QStringList s; s << "note" << "pattern" << "bbtco" << "sampletco" << "time"; for( QStringList::iterator it = s.begin(); it < s.end(); ++it ) { QDomNodeList list = elementsByTagName( *it ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); el.setAttribute( "pos", el.attribute( "pos" ).toInt()*3 ); el.setAttribute( "len", el.attribute( "len" ).toInt()*3 ); } } QDomNodeList list = elementsByTagName( "timeline" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); el.setAttribute( "lp0pos", el.attribute( "lp0pos" ).toInt()*3 ); el.setAttribute( "lp1pos", el.attribute( "lp1pos" ).toInt()*3 ); } } if( version < "0.4.0-20080607" ) { QDomNodeList list; while( !( list = elementsByTagName( "midi" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "midiport" ); } } if( version < "0.4.0-20080622" ) { QDomNodeList list; while( !( list = elementsByTagName( "automation-pattern" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "automationpattern" ); } list = elementsByTagName( "bbtrack" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QString s = el.attribute( "name" ); s.replace( QRegExp( "^Beat/Baseline " ), "Beat/Bassline " ); el.setAttribute( "name", s ); } } if( version < "0.4.0-beta1" ) { // convert binary effect-key-blobs to XML QDomNodeList list; list = elementsByTagName( "effect" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QString k = el.attribute( "key" ); if( !k.isEmpty() ) { const QList l = base64::decode( k, QVariant::List ).toList(); if( !l.isEmpty() ) { QString name = l[0].toString(); QVariant u = l[1]; EffectKey::AttributeMap m; // VST-effect? if( u.type() == QVariant::String ) { m["file"] = u.toString(); } // LADSPA-effect? else if( u.type() == QVariant::StringList ) { const QStringList sl = u.toStringList(); m["plugin"] = sl.value( 0 ); m["file"] = sl.value( 1 ); } EffectKey key( NULL, name, m ); el.appendChild( key.saveXML( *this ) ); } } } } if( version < "0.4.0-rc2" ) { QDomNodeList list = elementsByTagName( "audiofileprocessor" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QString s = el.attribute( "src" ); s.replace( "drumsynth/misc ", "drumsynth/misc_" ); s.replace( "drumsynth/r&b", "drumsynth/r_n_b" ); s.replace( "drumsynth/r_b", "drumsynth/r_n_b" ); el.setAttribute( "src", s ); } list = elementsByTagName( "lb302" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); int s = el.attribute( "shape" ).toInt(); if( s >= 1 ) { s--; } el.setAttribute( "shape", QString("%1").arg(s) ); } } // update document meta data documentElement().setAttribute( "version", LDF_VERSION_STRING ); documentElement().setAttribute( "type", typeName( type() ) ); documentElement().setAttribute( "creator", "LMMS" ); documentElement().setAttribute( "creatorversion", LMMS_VERSION ); if( type() == SongProject || type() == SongProjectTemplate ) { // Time-signature if ( !m_head.hasAttribute( "timesig_numerator" ) ) { m_head.setAttribute( "timesig_numerator", 4 ); m_head.setAttribute( "timesig_denominator", 4 ); } if( !m_head.hasAttribute( "mastervol" ) ) { m_head.setAttribute( "mastervol", 100 ); } } //printf("%s\n", toString( 2 ).toUtf8().constData()); } void DataFile::loadData( const QByteArray & _data, const QString & _sourceFile ) { QString errorMsg; int line = -1, col = -1; if( !setContent( _data, &errorMsg, &line, &col ) ) { // parsing failed? then try to uncompress data QByteArray uncompressed = qUncompress( _data ); if( !uncompressed.isEmpty() ) { if( setContent( uncompressed, &errorMsg, &line, &col ) ) { line = col = -1; } } if( line >= 0 && col >= 0 ) { qWarning() << "at line" << line << "column" << errorMsg; QMessageBox::critical( NULL, SongEditor::tr( "Error in file" ), SongEditor::tr( "The file %1 seems to contain " "errors and therefore can't be " "loaded." ). arg( _sourceFile ) ); return; } } QDomElement root = documentElement(); m_type = type( root.attribute( "type" ) ); m_head = root.elementsByTagName( "head" ).item( 0 ).toElement(); if( root.hasAttribute( "creatorversion" ) && root.attribute( "creatorversion" ) != LMMS_VERSION ) { upgrade(); } m_content = root.elementsByTagName( typeName( m_type ) ). item( 0 ).toElement(); } lmms-1.1.3/src/core/Effect.cpp000066400000000000000000000114201247673406200161140ustar00rootroot00000000000000/* * Effect.cpp - base-class for effects * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "Effect.h" #include "engine.h" #include "EffectChain.h" #include "EffectControls.h" #include "EffectView.h" Effect::Effect( const Plugin::Descriptor * _desc, Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Plugin( _desc, _parent ), m_parent( NULL ), m_key( _key ? *_key : Descriptor::SubPluginFeatures::Key() ), m_processors( 1 ), m_okay( true ), m_noRun( false ), m_running( false ), m_bufferCount( 0 ), m_enabledModel( true, this, tr( "Effect enabled" ) ), m_wetDryModel( 1.0f, -1.0f, 1.0f, 0.01f, this, tr( "Wet/Dry mix" ) ), m_gateModel( 0.0f, 0.0f, 1.0f, 0.01f, this, tr( "Gate" ) ), m_autoQuitModel( 1.0f, 1.0f, 8000.0f, 100.0f, 1.0f, this, tr( "Decay" ) ) { m_srcState[0] = m_srcState[1] = NULL; reinitSRC(); } Effect::~Effect() { for( int i = 0; i < 2; ++i ) { if( m_srcState[i] != NULL ) { src_delete( m_srcState[i] ); } } } void Effect::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_enabledModel.saveSettings( _doc, _this, "on" ); m_wetDryModel.saveSettings( _doc, _this, "wet" ); m_autoQuitModel.saveSettings( _doc, _this, "autoquit" ); m_gateModel.saveSettings( _doc, _this, "gate" ); controls()->saveState( _doc, _this ); } void Effect::loadSettings( const QDomElement & _this ) { m_enabledModel.loadSettings( _this, "on" ); m_wetDryModel.loadSettings( _this, "wet" ); m_autoQuitModel.loadSettings( _this, "autoquit" ); m_gateModel.loadSettings( _this, "gate" ); QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( controls()->nodeName() == node.nodeName() ) { controls()->restoreState( node.toElement() ); } } node = node.nextSibling(); } } Effect * Effect::instantiate( const QString& pluginName, Model * _parent, Descriptor::SubPluginFeatures::Key * _key ) { Plugin * p = Plugin::instantiate( pluginName, _parent, _key ); // check whether instantiated plugin is an effect if( dynamic_cast( p ) != NULL ) { // everything ok, so return pointer Effect * effect = dynamic_cast( p ); effect->m_parent = dynamic_cast(_parent); return effect; } // not quite... so delete plugin and leave it up to the caller to instantiate a DummyEffect delete p; return NULL; } void Effect::checkGate( double _out_sum ) { // Check whether we need to continue processing input. Restart the // counter if the threshold has been exceeded. if( _out_sum - gate() <= typeInfo::minEps() ) { incrementBufferCount(); if( bufferCount() > timeout() ) { stopRunning(); resetBufferCount(); } } else { resetBufferCount(); } } PluginView * Effect::instantiateView( QWidget * _parent ) { return new EffectView( this, _parent ); } void Effect::reinitSRC() { for( int i = 0; i < 2; ++i ) { if( m_srcState[i] != NULL ) { src_delete( m_srcState[i] ); } int error; if( ( m_srcState[i] = src_new( engine::mixer()->currentQualitySettings(). libsrcInterpolation(), DEFAULT_CHANNELS, &error ) ) == NULL ) { qFatal( "Error: src_new() failed in effect.cpp!\n" ); } } } void Effect::resample( int _i, const sampleFrame * _src_buf, sample_rate_t _src_sr, sampleFrame * _dst_buf, sample_rate_t _dst_sr, f_cnt_t _frames ) { if( m_srcState[_i] == NULL ) { return; } m_srcData[_i].input_frames = _frames; m_srcData[_i].output_frames = engine::mixer()->framesPerPeriod(); m_srcData[_i].data_in = (float *) _src_buf[0]; m_srcData[_i].data_out = _dst_buf[0]; m_srcData[_i].src_ratio = (double) _dst_sr / _src_sr; m_srcData[_i].end_of_input = 0; int error; if( ( error = src_process( m_srcState[_i], &m_srcData[_i] ) ) ) { qFatal( "Effect::resample(): error while resampling: %s\n", src_strerror( error ) ); } } #include "moc_Effect.cxx" lmms-1.1.3/src/core/EffectChain.cpp000066400000000000000000000120021247673406200170540ustar00rootroot00000000000000/* * EffectChain.cpp - class for processing and effects chain * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "EffectChain.h" #include "Effect.h" #include "engine.h" #include "debug.h" #include "DummyEffect.h" EffectChain::EffectChain( Model * _parent ) : Model( _parent ), SerializingObject(), m_enabledModel( false, NULL, tr( "Effects enabled" ) ) { } EffectChain::~EffectChain() { clear(); } void EffectChain::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "enabled", m_enabledModel.value() ); _this.setAttribute( "numofeffects", m_effects.count() ); for( EffectList::Iterator it = m_effects.begin(); it != m_effects.end(); it++ ) { if( dynamic_cast( *it ) ) { _this.appendChild( dynamic_cast( *it )->originalPluginData() ); } else { QDomElement ef = ( *it )->saveState( _doc, _this ); ef.setAttribute( "name", ( *it )->descriptor()->name ); ef.appendChild( ( *it )->key().saveXML( _doc ) ); } } } void EffectChain::loadSettings( const QDomElement & _this ) { clear(); m_enabledModel.setValue( _this.attribute( "enabled" ).toInt() ); const int plugin_cnt = _this.attribute( "numofeffects" ).toInt(); QDomNode node = _this.firstChild(); int fx_loaded = 0; while( !node.isNull() && fx_loaded < plugin_cnt ) { if( node.isElement() && node.nodeName() == "effect" ) { QDomElement effectData = node.toElement(); const QString name = effectData.attribute( "name" ); EffectKey key( effectData.elementsByTagName( "key" ).item( 0 ).toElement() ); Effect* e = Effect::instantiate( name, this, &key ); if( e != NULL && e->isOkay() && e->nodeName() == node.nodeName() ) { e->restoreState( effectData ); } else { delete e; e = new DummyEffect( parentModel(), effectData ); } m_effects.push_back( e ); ++fx_loaded; } node = node.nextSibling(); } emit dataChanged(); } void EffectChain::appendEffect( Effect * _effect ) { engine::mixer()->lock(); m_effects.append( _effect ); engine::mixer()->unlock(); emit dataChanged(); } void EffectChain::removeEffect( Effect * _effect ) { engine::mixer()->lock(); m_effects.erase( qFind( m_effects.begin(), m_effects.end(), _effect ) ); engine::mixer()->unlock(); emit dataChanged(); } void EffectChain::moveDown( Effect * _effect ) { if( _effect != m_effects.last() ) { int i = 0; for( EffectList::Iterator it = m_effects.begin(); it != m_effects.end(); it++, i++ ) { if( *it == _effect ) { break; } } Effect * temp = m_effects[i + 1]; m_effects[i + 1] = _effect; m_effects[i] = temp; } } void EffectChain::moveUp( Effect * _effect ) { if( _effect != m_effects.first() ) { int i = 0; for( EffectList::Iterator it = m_effects.begin(); it != m_effects.end(); it++, i++ ) { if( *it == _effect ) { break; } } Effect * temp = m_effects[i - 1]; m_effects[i - 1] = _effect; m_effects[i] = temp; } } bool EffectChain::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames, bool hasInputNoise ) { if( m_enabledModel.value() == false ) { return false; } bool moreEffects = false; for( EffectList::Iterator it = m_effects.begin(); it != m_effects.end(); ++it ) { if( hasInputNoise || ( *it )->isRunning() ) { moreEffects |= ( *it )->processAudioBuffer( _buf, _frames ); } #ifdef LMMS_DEBUG for( int f = 0; f < _frames; ++f ) { if( fabs( _buf[f][0] ) > 5 || fabs( _buf[f][1] ) > 5 ) { it = m_effects.end()-1; printf( "numerical overflow after processing " "plugin \"%s\"\n", ( *it )-> publicName().toUtf8().constData() ); break; } } #endif } return moreEffects; } void EffectChain::startRunning() { if( m_enabledModel.value() == false ) { return; } for( EffectList::Iterator it = m_effects.begin(); it != m_effects.end(); it++ ) { ( *it )->startRunning(); } } void EffectChain::clear() { emit aboutToClear(); m_enabledModel.setValue( false ); for( int i = 0; i < m_effects.count(); ++i ) { delete m_effects[i]; } m_effects.clear(); } #include "moc_EffectChain.cxx" lmms-1.1.3/src/core/EnvelopeAndLfoParameters.cpp000066400000000000000000000335061247673406200216160ustar00rootroot00000000000000/* * EnvelopeAndLfoParameters.cpp - class EnvelopeAndLfoParameters * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "EnvelopeAndLfoParameters.h" #include "debug.h" #include "engine.h" #include "Mixer.h" #include "Oscillator.h" // how long should be each envelope-segment maximal (e.g. attack)? extern const float SECS_PER_ENV_SEGMENT = 5.0f; // how long should be one LFO-oscillation maximal? extern const float SECS_PER_LFO_OSCILLATION = 20.0f; EnvelopeAndLfoParameters::LfoInstances * EnvelopeAndLfoParameters::s_lfoInstances = NULL; void EnvelopeAndLfoParameters::LfoInstances::trigger() { QMutexLocker m( &m_lfoListMutex ); for( LfoList::Iterator it = m_lfos.begin(); it != m_lfos.end(); ++it ) { ( *it )->m_lfoFrame += engine::mixer()->framesPerPeriod(); ( *it )->m_bad_lfoShapeData = true; } } void EnvelopeAndLfoParameters::LfoInstances::reset() { QMutexLocker m( &m_lfoListMutex ); for( LfoList::Iterator it = m_lfos.begin(); it != m_lfos.end(); ++it ) { ( *it )->m_lfoFrame = 0; ( *it )->m_bad_lfoShapeData = true; } } void EnvelopeAndLfoParameters::LfoInstances::add( EnvelopeAndLfoParameters * lfo ) { QMutexLocker m( &m_lfoListMutex ); m_lfos.append( lfo ); } void EnvelopeAndLfoParameters::LfoInstances::remove( EnvelopeAndLfoParameters * lfo ) { QMutexLocker m( &m_lfoListMutex ); m_lfos.removeAll( lfo ); } EnvelopeAndLfoParameters::EnvelopeAndLfoParameters( float _value_for_zero_amount, Model * _parent ) : Model( _parent ), m_used( false ), m_predelayModel( 0.0, 0.0, 2.0, 0.001, this, tr( "Predelay" ) ), m_attackModel( 0.0, 0.0, 2.0, 0.001, this, tr( "Attack" ) ), m_holdModel( 0.5, 0.0, 2.0, 0.001, this, tr( "Hold" ) ), m_decayModel( 0.5, 0.0, 2.0, 0.001, this, tr( "Decay" ) ), m_sustainModel( 0.5, 0.0, 1.0, 0.001, this, tr( "Sustain" ) ), m_releaseModel( 0.1, 0.0, 2.0, 0.001, this, tr( "Release" ) ), m_amountModel( 0.0, -1.0, 1.0, 0.005, this, tr( "Modulation" ) ), m_valueForZeroAmount( _value_for_zero_amount ), m_pahdEnv( NULL ), m_rEnv( NULL ), m_lfoPredelayModel( 0.0, 0.0, 1.0, 0.001, this, tr( "LFO Predelay" ) ), m_lfoAttackModel( 0.0, 0.0, 1.0, 0.001, this, tr( "LFO Attack" ) ), m_lfoSpeedModel( 0.1, 0.001, 1.0, 0.0001, SECS_PER_LFO_OSCILLATION * 1000.0, this, tr( "LFO speed" ) ), m_lfoAmountModel( 0.0, -1.0, 1.0, 0.005, this, tr( "LFO Modulation" ) ), m_lfoWaveModel( SineWave, 0, NumLfoShapes, this, tr( "LFO Wave Shape" ) ), m_x100Model( false, this, tr( "Freq x 100" ) ), m_controlEnvAmountModel( false, this, tr( "Modulate Env-Amount" ) ), m_lfoFrame( 0 ), m_lfoAmountIsZero( false ), m_lfoShapeData( NULL ) { m_amountModel.setCenterValue( 0 ); m_lfoAmountModel.setCenterValue( 0 ); if( s_lfoInstances == NULL ) { s_lfoInstances = new LfoInstances(); } instances()->add( this ); connect( &m_predelayModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_attackModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_holdModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_decayModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_sustainModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_releaseModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_amountModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_lfoPredelayModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_lfoAttackModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_lfoSpeedModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_lfoAmountModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_lfoWaveModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( &m_x100Model, SIGNAL( dataChanged() ), this, SLOT( updateSampleVars() ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSampleVars() ) ); m_lfoShapeData = new sample_t[engine::mixer()->framesPerPeriod()]; updateSampleVars(); } EnvelopeAndLfoParameters::~EnvelopeAndLfoParameters() { m_predelayModel.disconnect( this ); m_attackModel.disconnect( this ); m_holdModel.disconnect( this ); m_decayModel.disconnect( this ); m_sustainModel.disconnect( this ); m_releaseModel.disconnect( this ); m_amountModel.disconnect( this ); m_lfoPredelayModel.disconnect( this ); m_lfoAttackModel.disconnect( this ); m_lfoSpeedModel.disconnect( this ); m_lfoAmountModel.disconnect( this ); m_lfoWaveModel.disconnect( this ); m_x100Model.disconnect( this ); delete[] m_pahdEnv; delete[] m_rEnv; delete[] m_lfoShapeData; instances()->remove( this ); if( instances()->isEmpty() ) { delete instances(); s_lfoInstances = NULL; } } inline sample_t EnvelopeAndLfoParameters::lfoShapeSample( fpp_t _frame_offset ) { f_cnt_t frame = ( m_lfoFrame + _frame_offset ) % m_lfoOscillationFrames; const float phase = frame / static_cast( m_lfoOscillationFrames ); sample_t shape_sample; switch( m_lfoWaveModel.value() ) { case TriangleWave: shape_sample = Oscillator::triangleSample( phase ); break; case SquareWave: shape_sample = Oscillator::squareSample( phase ); break; case SawWave: shape_sample = Oscillator::sawSample( phase ); break; case UserDefinedWave: shape_sample = m_userWave.userWaveSample( phase ); break; case RandomWave: if( frame == 0 ) { m_random = Oscillator::noiseSample( 0.0f ); } shape_sample = m_random; break; case SineWave: default: shape_sample = Oscillator::sinSample( phase ); break; } return shape_sample * m_lfoAmount; } void EnvelopeAndLfoParameters::updateLfoShapeData() { const fpp_t frames = engine::mixer()->framesPerPeriod(); for( fpp_t offset = 0; offset < frames; ++offset ) { m_lfoShapeData[offset] = lfoShapeSample( offset ); } m_bad_lfoShapeData = false; } inline void EnvelopeAndLfoParameters::fillLfoLevel( float * _buf, f_cnt_t _frame, const fpp_t _frames ) { if( m_lfoAmountIsZero || _frame <= m_lfoPredelayFrames ) { for( fpp_t offset = 0; offset < _frames; ++offset ) { *_buf++ = 0.0f; } return; } _frame -= m_lfoPredelayFrames; if( m_bad_lfoShapeData ) { updateLfoShapeData(); } fpp_t offset = 0; const float lafI = 1.0f / m_lfoAttackFrames; for( ; offset < _frames && _frame < m_lfoAttackFrames; ++offset, ++_frame ) { *_buf++ = m_lfoShapeData[offset] * _frame * lafI; } for( ; offset < _frames; ++offset ) { *_buf++ = m_lfoShapeData[offset]; } } void EnvelopeAndLfoParameters::fillLevel( float * _buf, f_cnt_t _frame, const f_cnt_t _release_begin, const fpp_t _frames ) { if( _frame < 0 || _release_begin < 0 ) { return; } fillLfoLevel( _buf, _frame, _frames ); for( fpp_t offset = 0; offset < _frames; ++offset, ++_buf, ++_frame ) { float env_level; if( _frame < _release_begin ) { if( _frame < m_pahdFrames ) { env_level = m_pahdEnv[_frame]; } else { env_level = m_sustainLevel; } } else if( ( _frame - _release_begin ) < m_rFrames ) { env_level = m_rEnv[_frame - _release_begin] * ( ( _release_begin < m_pahdFrames ) ? m_pahdEnv[_release_begin] : m_sustainLevel ); } else { env_level = 0.0f; } // at this point, *_buf is LFO level *_buf = m_controlEnvAmountModel.value() ? env_level * ( 0.5f + *_buf ) : env_level + *_buf; } } void EnvelopeAndLfoParameters::saveSettings( QDomDocument & _doc, QDomElement & _parent ) { m_predelayModel.saveSettings( _doc, _parent, "pdel" ); m_attackModel.saveSettings( _doc, _parent, "att" ); m_holdModel.saveSettings( _doc, _parent, "hold" ); m_decayModel.saveSettings( _doc, _parent, "dec" ); m_sustainModel.saveSettings( _doc, _parent, "sustain" ); m_releaseModel.saveSettings( _doc, _parent, "rel" ); m_amountModel.saveSettings( _doc, _parent, "amt" ); m_lfoWaveModel.saveSettings( _doc, _parent, "lshp" ); m_lfoPredelayModel.saveSettings( _doc, _parent, "lpdel" ); m_lfoAttackModel.saveSettings( _doc, _parent, "latt" ); m_lfoSpeedModel.saveSettings( _doc, _parent, "lspd" ); m_lfoAmountModel.saveSettings( _doc, _parent, "lamt" ); m_x100Model.saveSettings( _doc, _parent, "x100" ); m_controlEnvAmountModel.saveSettings( _doc, _parent, "ctlenvamt" ); _parent.setAttribute( "userwavefile", m_userWave.audioFile() ); } void EnvelopeAndLfoParameters::loadSettings( const QDomElement & _this ) { m_predelayModel.loadSettings( _this, "pdel" ); m_attackModel.loadSettings( _this, "att" ); m_holdModel.loadSettings( _this, "hold" ); m_decayModel.loadSettings( _this, "dec" ); m_sustainModel.loadSettings( _this, "sustain" ); m_releaseModel.loadSettings( _this, "rel" ); m_amountModel.loadSettings( _this, "amt" ); m_lfoWaveModel.loadSettings( _this, "lshp" ); m_lfoPredelayModel.loadSettings( _this, "lpdel" ); m_lfoAttackModel.loadSettings( _this, "latt" ); m_lfoSpeedModel.loadSettings( _this, "lspd" ); m_lfoAmountModel.loadSettings( _this, "lamt" ); m_x100Model.loadSettings( _this, "x100" ); m_controlEnvAmountModel.loadSettings( _this, "ctlenvamt" ); /* ### TODO: Old reversed sustain kept for backward compatibility with 4.15 file format*/ if( _this.hasAttribute( "sus" ) ) { m_sustainModel.loadSettings( _this, "sus" ); m_sustainModel.setValue( 1.0 - m_sustainModel.value() ); } // ### TODO: /* // Keep compatibility with version 2.1 file format if( _this.hasAttribute( "lfosyncmode" ) ) { m_lfoSpeedKnob->setSyncMode( ( TempoSyncKnob::TtempoSyncMode ) _this.attribute( "lfosyncmode" ).toInt() ); }*/ m_userWave.setAudioFile( _this.attribute( "userwavefile" ) ); updateSampleVars(); } void EnvelopeAndLfoParameters::updateSampleVars() { engine::mixer()->lock(); const float frames_per_env_seg = SECS_PER_ENV_SEGMENT * engine::mixer()->processingSampleRate(); // TODO: Remove the expKnobVals, time should be linear const f_cnt_t predelay_frames = static_cast( frames_per_env_seg * expKnobVal( m_predelayModel.value() ) ); const f_cnt_t attack_frames = static_cast( frames_per_env_seg * expKnobVal( m_attackModel.value() ) ); const f_cnt_t hold_frames = static_cast( frames_per_env_seg * expKnobVal( m_holdModel.value() ) ); const f_cnt_t decay_frames = static_cast( frames_per_env_seg * expKnobVal( m_decayModel.value() * ( 1 - m_sustainModel.value() ) ) ); m_sustainLevel = m_sustainModel.value(); m_amount = m_amountModel.value(); if( m_amount >= 0 ) { m_amountAdd = ( 1.0f - m_amount ) * m_valueForZeroAmount; } else { m_amountAdd = m_valueForZeroAmount; } m_pahdFrames = predelay_frames + attack_frames + hold_frames + decay_frames; m_rFrames = static_cast( frames_per_env_seg * expKnobVal( m_releaseModel.value() ) ); if( static_cast( floorf( m_amount * 1000.0f ) ) == 0 ) { //m_pahdFrames = 0; m_rFrames = 0; } delete[] m_pahdEnv; delete[] m_rEnv; m_pahdEnv = new sample_t[m_pahdFrames]; m_rEnv = new sample_t[m_rFrames]; const float aa = m_amountAdd; for( f_cnt_t i = 0; i < predelay_frames; ++i ) { m_pahdEnv[i] = aa; } f_cnt_t add = predelay_frames; const float afI = ( 1.0f / attack_frames ) * m_amount; for( f_cnt_t i = 0; i < attack_frames; ++i ) { m_pahdEnv[add+i] = i * afI + aa; } add += attack_frames; const float amsum = m_amount + m_amountAdd; for( f_cnt_t i = 0; i < hold_frames; ++i ) { m_pahdEnv[add + i] = amsum; } add += hold_frames; const float dfI = ( 1.0 / decay_frames ) * ( m_sustainLevel -1 ) * m_amount; for( f_cnt_t i = 0; i < decay_frames; ++i ) { /* m_pahdEnv[add + i] = ( m_sustainLevel + ( 1.0f - (float)i / decay_frames ) * ( 1.0f - m_sustainLevel ) ) * m_amount + m_amountAdd; */ m_pahdEnv[add + i] = amsum + i*dfI; } const float rfI = ( 1.0f / m_rFrames ) * m_amount; for( f_cnt_t i = 0; i < m_rFrames; ++i ) { m_rEnv[i] = (float)( m_rFrames - i ) * rfI; } // save this calculation in real-time-part m_sustainLevel = m_sustainLevel * m_amount + m_amountAdd; const float frames_per_lfo_oscillation = SECS_PER_LFO_OSCILLATION * engine::mixer()->processingSampleRate(); m_lfoPredelayFrames = static_cast( frames_per_lfo_oscillation * expKnobVal( m_lfoPredelayModel.value() ) ); m_lfoAttackFrames = static_cast( frames_per_lfo_oscillation * expKnobVal( m_lfoAttackModel.value() ) ); m_lfoOscillationFrames = static_cast( frames_per_lfo_oscillation * m_lfoSpeedModel.value() ); if( m_x100Model.value() ) { m_lfoOscillationFrames /= 100; } m_lfoAmount = m_lfoAmountModel.value() * 0.5f; m_used = true; if( static_cast( floorf( m_lfoAmount * 1000.0f ) ) == 0 ) { m_lfoAmountIsZero = true; if( static_cast( floorf( m_amount * 1000.0f ) ) == 0 ) { m_used = false; } } else { m_lfoAmountIsZero = false; } m_bad_lfoShapeData = true; emit dataChanged(); engine::mixer()->unlock(); } #include "moc_EnvelopeAndLfoParameters.cxx" lmms-1.1.3/src/core/FxMixer.cpp000066400000000000000000000376551247673406200163240ustar00rootroot00000000000000/* * FxMixer.cpp - effect mixer for LMMS * * Copyright (c) 2008-2011 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "FxMixer.h" #include "MixerWorkerThread.h" #include "MixHelpers.h" #include "Effect.h" #include "song.h" #include "InstrumentTrack.h" #include "bb_track_container.h" FxRoute::FxRoute( FxChannel * from, FxChannel * to, float amount ) : m_from( from ), m_to( to ), m_amount( amount, 0, 1, 0.001, NULL, tr( "Amount to send from channel %1 to channel %2" ).arg( m_from->m_channelIndex ).arg( m_to->m_channelIndex ) ) { //qDebug( "created: %d to %d", m_from->m_channelIndex, m_to->m_channelIndex ); // create send amount model } FxRoute::~FxRoute() { } void FxRoute::updateName() { m_amount.setDisplayName( tr( "Amount to send from channel %1 to channel %2" ).arg( m_from->m_channelIndex ).arg( m_to->m_channelIndex ) ); } FxChannel::FxChannel( int idx, Model * _parent ) : m_fxChain( NULL ), m_hasInput( false ), m_stillRunning( false ), m_peakLeft( 0.0f ), m_peakRight( 0.0f ), m_buffer( new sampleFrame[engine::mixer()->framesPerPeriod()] ), m_muteModel( false, _parent ), m_volumeModel( 1.0, 0.0, 2.0, 0.01, _parent ), m_name(), m_lock(), m_channelIndex( idx ), m_queued( false ), m_dependenciesMet( 0 ) { engine::mixer()->clearAudioBuffer( m_buffer, engine::mixer()->framesPerPeriod() ); } FxChannel::~FxChannel() { delete[] m_buffer; } inline void FxChannel::processed() { foreach( FxRoute * receiverRoute, m_sends ) { if( receiverRoute->receiver()->m_muted == false ) { receiverRoute->receiver()->incrementDeps(); } } } void FxChannel::incrementDeps() { int i = m_dependenciesMet.fetchAndAddOrdered( 1 ) + 1; if( i >= m_receives.size() && ! m_queued ) { m_queued = true; MixerWorkerThread::addJob( this ); } } void FxChannel::doProcessing( sampleFrame * _buf ) { const fpp_t fpp = engine::mixer()->framesPerPeriod(); // ignore the passed _buf // always use m_buffer // this is just an auxilliary buffer if doProcessing() // needs one for processing while running // particularly important for playHandles, so Instruments // can operate on this buffer the whole time // this improves cache hit rate _buf = m_buffer; if( m_muted == false ) { foreach( FxRoute * senderRoute, m_receives ) { FxChannel * sender = senderRoute->sender(); FloatModel * sendModel = senderRoute->amount(); if( ! sendModel ) qFatal( "Error: no send model found from %d to %d", senderRoute->senderIndex(), m_channelIndex ); if( sender->m_hasInput || sender->m_stillRunning ) { // get the send level... const float amt = sendModel->value(); // mix it's output with this one's output sampleFrame * ch_buf = sender->m_buffer; const float v = sender->m_volumeModel.value() * amt; for( f_cnt_t f = 0; f < fpp; ++f ) { _buf[f][0] += ch_buf[f][0] * v; _buf[f][1] += ch_buf[f][1] * v; } m_hasInput = true; } } const float v = m_volumeModel.value(); if( m_hasInput ) { // only start fxchain when we have input... m_fxChain.startRunning(); } m_stillRunning = m_fxChain.processAudioBuffer( _buf, fpp, m_hasInput ); m_peakLeft = qMax( m_peakLeft, engine::mixer()->peakValueLeft( _buf, fpp ) * v ); m_peakRight = qMax( m_peakRight, engine::mixer()->peakValueRight( _buf, fpp ) * v ); } else { m_peakLeft = m_peakRight = 0.0f; } // increment dependency counter of all receivers processed(); } FxMixer::FxMixer() : Model( NULL ), JournallingObject(), m_fxChannels() { // create master channel createChannel(); } FxMixer::~FxMixer() { while( ! m_fxRoutes.isEmpty() ) { deleteChannelSend( m_fxRoutes.first() ); } for( int i = 0; i < m_fxChannels.size(); ++i ) { delete m_fxChannels[i]; } } int FxMixer::createChannel() { const int index = m_fxChannels.size(); // create new channel m_fxChannels.push_back( new FxChannel( index, this ) ); // reset channel state clearChannel( index ); return index; } void FxMixer::deleteChannel( int index ) { m_fxChannels[index]->m_lock.lock(); FxChannel * ch = m_fxChannels[index]; // go through every instrument and adjust for the channel index change TrackContainer::TrackList tracks; tracks += engine::getSong()->tracks(); tracks += engine::getBBTrackContainer()->tracks(); foreach( track* t, tracks ) { if( t->type() == track::InstrumentTrack ) { InstrumentTrack* inst = dynamic_cast( t ); int val = inst->effectChannelModel()->value(0); if( val == index ) { // we are deleting this track's fx send // send to master inst->effectChannelModel()->setValue(0); } else if( val > index ) { // subtract 1 to make up for the missing channel inst->effectChannelModel()->setValue(val-1); } } } // delete all of this channel's sends and receives while( ! ch->m_sends.isEmpty() ) { deleteChannelSend( ch->m_sends.first() ); } while( ! ch->m_receives.isEmpty() ) { deleteChannelSend( ch->m_receives.first() ); } // actually delete the channel delete m_fxChannels[index]; m_fxChannels.remove(index); for( int i = index; i < m_fxChannels.size(); ++i ) { validateChannelName( i, i + 1 ); } } void FxMixer::moveChannelLeft( int index ) { // can't move master or first channel if( index <= 1 || index >= m_fxChannels.size() ) { return; } // channels to swap int a = index - 1, b = index; // go through every instrument and adjust for the channel index change QVector songTrackList = engine::getSong()->tracks(); QVector bbTrackList = engine::getBBTrackContainer()->tracks(); QVector trackLists[] = {songTrackList, bbTrackList}; for(int tl=0; tl<2; ++tl) { QVector trackList = trackLists[tl]; for(int i=0; itype() == track::InstrumentTrack ) { InstrumentTrack * inst = (InstrumentTrack *) trackList[i]; int val = inst->effectChannelModel()->value(0); if( val == a ) { inst->effectChannelModel()->setValue(b); } else if( val == b ) { inst->effectChannelModel()->setValue(a); } } } } // actually do the swap FxChannel * tmpChannel = m_fxChannels[a]; m_fxChannels[a] = m_fxChannels[b]; m_fxChannels[b] = tmpChannel; validateChannelName( a, b ); validateChannelName( b, a ); } void FxMixer::moveChannelRight( int index ) { moveChannelLeft( index + 1 ); } FxRoute * FxMixer::createChannelSend( fx_ch_t fromChannel, fx_ch_t toChannel, float amount ) { // qDebug( "requested: %d to %d", fromChannel, toChannel ); // find the existing connection FxChannel * from = m_fxChannels[fromChannel]; FxChannel * to = m_fxChannels[toChannel]; for( int i=0; im_sends.size(); ++i ) { if( from->m_sends[i]->receiver() == to ) { // simply adjust the amount from->m_sends[i]->amount()->setValue( amount ); return from->m_sends[i]; } } // connection does not exist. create a new one return createRoute( from, to, amount ); } FxRoute * FxMixer::createRoute( FxChannel * from, FxChannel * to, float amount ) { if( from == to ) { return NULL; } m_sendsMutex.lock(); FxRoute * route = new FxRoute( from, to, amount ); // add us to from's sends from->m_sends.append( route ); // add us to to's receives to->m_receives.append( route ); // add us to fxmixer's list engine::fxMixer()->m_fxRoutes.append( route ); m_sendsMutex.unlock(); return route; } // delete the connection made by createChannelSend void FxMixer::deleteChannelSend( fx_ch_t fromChannel, fx_ch_t toChannel ) { // delete the send FxChannel * from = m_fxChannels[fromChannel]; FxChannel * to = m_fxChannels[toChannel]; // find and delete the send entry for( int i = 0; i < from->m_sends.size(); ++i ) { if( from->m_sends[i]->receiver() == to ) { deleteChannelSend( from->m_sends[i] ); break; } } } void FxMixer::deleteChannelSend( FxRoute * route ) { m_sendsMutex.lock(); // remove us from from's sends route->sender()->m_sends.remove( route->sender()->m_sends.indexOf( route ) ); // remove us from to's receives route->receiver()->m_receives.remove( route->receiver()->m_receives.indexOf( route ) ); // remove us from fxmixer's list engine::fxMixer()->m_fxRoutes.remove( engine::fxMixer()->m_fxRoutes.indexOf( route ) ); delete route; m_sendsMutex.unlock(); } bool FxMixer::isInfiniteLoop( fx_ch_t sendFrom, fx_ch_t sendTo ) { if( sendFrom == sendTo ) return true; FxChannel * from = m_fxChannels[sendFrom]; FxChannel * to = m_fxChannels[sendTo]; bool b = checkInfiniteLoop( from, to ); return b; } bool FxMixer::checkInfiniteLoop( FxChannel * from, FxChannel * to ) { // can't send master to anything if( from == m_fxChannels[0] ) { return true; } // can't send channel to itself if( from == to ) { return true; } // follow sendTo's outputs recursively looking for something that sends // to sendFrom for( int i=0; i < to->m_sends.size(); ++i ) { if( checkInfiniteLoop( from, to->m_sends[i]->receiver() ) ) { return true; } } return false; } // how much does fromChannel send its output to the input of toChannel? FloatModel * FxMixer::channelSendModel( fx_ch_t fromChannel, fx_ch_t toChannel ) { if( fromChannel == toChannel ) { return NULL; } FxChannel * from = m_fxChannels[fromChannel]; FxChannel * to = m_fxChannels[toChannel]; foreach( FxRoute * route, from->m_sends ) { if( route->receiver() == to ) { return route->amount(); } } return NULL; } void FxMixer::mixToChannel( const sampleFrame * _buf, fx_ch_t _ch ) { if( m_fxChannels[_ch]->m_muteModel.value() == false ) { m_fxChannels[_ch]->m_lock.lock(); MixHelpers::add( m_fxChannels[_ch]->m_buffer, _buf, engine::mixer()->framesPerPeriod() ); m_fxChannels[_ch]->m_hasInput = true; m_fxChannels[_ch]->m_lock.unlock(); } } void FxMixer::prepareMasterMix() { engine::mixer()->clearAudioBuffer( m_fxChannels[0]->m_buffer, engine::mixer()->framesPerPeriod() ); } void FxMixer::masterMix( sampleFrame * _buf ) { const int fpp = engine::mixer()->framesPerPeriod(); if( m_sendsMutex.tryLock() ) { // add the channels that have no dependencies (no incoming senders, ie. no receives) // to the jobqueue. The channels that have receives get added when their senders get processed, which // is detected by dependency counting. // also instantly add all muted channels as they don't need to care about their senders, and can just increment the deps of // their recipients right away. MixerWorkerThread::resetJobQueue( MixerWorkerThread::JobQueue::Dynamic ); foreach( FxChannel * ch, m_fxChannels ) { ch->m_muted = ch->m_muteModel.value(); if( ch->m_muted ) // instantly "process" muted channels { ch->processed(); ch->done(); } else if( ch->m_receives.size() == 0 ) { ch->m_queued = true; MixerWorkerThread::addJob( ch ); } } while( m_fxChannels[0]->state() != ThreadableJob::Done ) { MixerWorkerThread::startAndWaitForJobs(); } m_sendsMutex.unlock(); } const float v = m_fxChannels[0]->m_volumeModel.value(); MixHelpers::addSanitizedMultiplied( _buf, m_fxChannels[0]->m_buffer, v, fpp ); // clear all channel buffers and // reset channel process state for( int i = 0; i < numChannels(); ++i) { engine::mixer()->clearAudioBuffer( m_fxChannels[i]->m_buffer, engine::mixer()->framesPerPeriod() ); m_fxChannels[i]->reset(); m_fxChannels[i]->m_queued = false; // also reset hasInput m_fxChannels[i]->m_hasInput = false; m_fxChannels[i]->m_dependenciesMet = 0; } } void FxMixer::clear() { while( m_fxChannels.size() > 1 ) { deleteChannel(1); } clearChannel(0); } void FxMixer::clearChannel(fx_ch_t index) { FxChannel * ch = m_fxChannels[index]; ch->m_fxChain.clear(); ch->m_volumeModel.setValue( 1.0f ); ch->m_muteModel.setValue( false ); ch->m_name = ( index == 0 ) ? tr( "Master" ) : tr( "FX %1" ).arg( index ); ch->m_volumeModel.setDisplayName( ch->m_name ); // send only to master if( index > 0) { // delete existing sends while( ! ch->m_sends.isEmpty() ) { deleteChannelSend( ch->m_sends.first() ); } // add send to master createChannelSend( index, 0 ); } // delete receives while( ! ch->m_receives.isEmpty() ) { deleteChannelSend( ch->m_receives.first() ); } } void FxMixer::saveSettings( QDomDocument & _doc, QDomElement & _this ) { // save channels for( int i = 0; i < m_fxChannels.size(); ++i ) { FxChannel * ch = m_fxChannels[i]; QDomElement fxch = _doc.createElement( QString( "fxchannel" ) ); _this.appendChild( fxch ); ch->m_fxChain.saveState( _doc, fxch ); ch->m_volumeModel.saveSettings( _doc, fxch, "volume" ); ch->m_muteModel.saveSettings( _doc, fxch, "muted" ); fxch.setAttribute( "num", i ); fxch.setAttribute( "name", ch->m_name ); // add the channel sends for( int si = 0; si < ch->m_sends.size(); ++si ) { QDomElement sendsDom = _doc.createElement( QString( "send" ) ); fxch.appendChild( sendsDom ); sendsDom.setAttribute( "channel", ch->m_sends[si]->receiverIndex() ); ch->m_sends[si]->amount()->saveSettings( _doc, sendsDom, "amount" ); } } } // make sure we have at least num channels void FxMixer::allocateChannelsTo(int num) { while( num > m_fxChannels.size() - 1 ) { createChannel(); // delete the default send to master deleteChannelSend( m_fxChannels.size()-1, 0 ); } } void FxMixer::loadSettings( const QDomElement & _this ) { clear(); QDomNode node = _this.firstChild(); bool thereIsASend = false; while( ! node.isNull() ) { QDomElement fxch = node.toElement(); // index of the channel we are about to load int num = fxch.attribute( "num" ).toInt(); // allocate enough channels allocateChannelsTo( num ); m_fxChannels[num]->m_volumeModel.loadSettings( fxch, "volume" ); m_fxChannels[num]->m_muteModel.loadSettings( fxch, "muted" ); m_fxChannels[num]->m_name = fxch.attribute( "name" ); m_fxChannels[num]->m_fxChain.restoreState( fxch.firstChildElement( m_fxChannels[num]->m_fxChain.nodeName() ) ); // mixer sends QDomNodeList chData = fxch.childNodes(); for( unsigned int i=0; iamount()->loadSettings( chDataItem, "amount" ); } } node = node.nextSibling(); } // check for old format. 65 fx channels and no explicit sends. if( ! thereIsASend && m_fxChannels.size() == 65 ) { // create a send from every channel into master for( int i=1; im_name == tr( "FX %1" ).arg( oldIndex ) ) { fxc->m_name = tr( "FX %1" ).arg( index ); } // set correct channel index fxc->m_channelIndex = index; // now check all routes and update names of the send models foreach( FxRoute * r, fxc->m_sends ) { r->updateName(); } foreach( FxRoute * r, fxc->m_receives ) { r->updateName(); } } #include "moc_FxMixer.cxx" lmms-1.1.3/src/core/ImportFilter.cpp000066400000000000000000000057421247673406200173520ustar00rootroot00000000000000/* * ImportFilter.cpp - base-class for all import-filters (MIDI, FLP etc) * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "ImportFilter.h" #include "engine.h" #include "TrackContainer.h" #include "ProjectJournal.h" ImportFilter::ImportFilter( const QString & _file_name, const Descriptor * _descriptor ) : Plugin( _descriptor, NULL ), m_file( _file_name ) { } ImportFilter::~ImportFilter() { } void ImportFilter::import( const QString & _file_to_import, TrackContainer* tc ) { DescriptorList d; Plugin::getDescriptorsOfAvailPlugins( d ); bool successful = false; char * s = qstrdup( _file_to_import.toUtf8().constData() ); // do not record changes while importing files const bool j = engine::projectJournal()->isJournalling(); engine::projectJournal()->setJournalling( false ); for( Plugin::DescriptorList::ConstIterator it = d.begin(); it != d.end(); ++it ) { if( it->type == Plugin::ImportFilter ) { Plugin * p = Plugin::instantiate( it->name, NULL, s ); if( dynamic_cast( p ) != NULL && dynamic_cast( p )->tryImport( tc ) == true ) { delete p; successful = true; break; } delete p; } } engine::projectJournal()->setJournalling( j ); delete[] s; if( successful == false ) { QMessageBox::information( NULL, TrackContainer::tr( "Couldn't import file" ), TrackContainer::tr( "Couldn't find a filter for " "importing file %1.\n" "You should convert this file " "into a format supported by " "LMMS using another software." ).arg( _file_to_import ), QMessageBox::Ok, QMessageBox::NoButton ); } } bool ImportFilter::openFile() { if( m_file.open( QFile::ReadOnly ) == false ) { QMessageBox::critical( NULL, TrackContainer::tr( "Couldn't open file" ), TrackContainer::tr( "Couldn't open file %1 " "for reading.\nPlease make " "sure you have read-" "permission to the file and " "the directory containing the " "file and try again!" ).arg( m_file.fileName() ), QMessageBox::Ok, QMessageBox::NoButton ); return false; } return true; } lmms-1.1.3/src/core/InlineAutomation.cpp000066400000000000000000000032131247673406200202000ustar00rootroot00000000000000/* * InlineAutomation.cpp - class for automating something "inline" * * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "InlineAutomation.h" void InlineAutomation::saveSettings( QDomDocument & _doc, QDomElement & _parent ) { if( hasAutomation() ) { QDomElement ap = _doc.createElement( AutomationPattern::classNodeName() ); QDomElement v = _doc.createElement( nodeName() ); automationPattern()->saveSettings( _doc, v ); ap.appendChild( v ); _parent.appendChild( ap ); } } void InlineAutomation::loadSettings( const QDomElement & _this ) { QDomNode node = _this.namedItem( AutomationPattern::classNodeName() ); if( node.isElement() ) { node = node.namedItem( nodeName() ); if( node.isElement() ) { automationPattern()->loadSettings( node.toElement() ); } } } lmms-1.1.3/src/core/Instrument.cpp000066400000000000000000000054561247673406200171040ustar00rootroot00000000000000/* * Instrument.cpp - base-class for all instrument-plugins (synths, samplers etc) * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Instrument.h" #include "InstrumentTrack.h" #include "DummyInstrument.h" #include "NotePlayHandle.h" #include "embed.h" #include "engine.h" Instrument::Instrument( InstrumentTrack * _instrument_track, const Descriptor * _descriptor ) : Plugin( _descriptor, NULL/* _instrument_track*/ ), m_instrumentTrack( _instrument_track ) { } Instrument::~Instrument() { } void Instrument::play( sampleFrame * ) { } void Instrument::deleteNotePluginData( NotePlayHandle * ) { } f_cnt_t Instrument::beatLen( NotePlayHandle * ) const { return( 0 ); } Instrument * Instrument::instantiate( const QString & _plugin_name, InstrumentTrack * _instrument_track ) { Plugin * p = Plugin::instantiate( _plugin_name, _instrument_track, _instrument_track ); // check whether instantiated plugin is an instrument if( dynamic_cast( p ) != NULL ) { // everything ok, so return pointer return dynamic_cast( p ); } // not quite... so delete plugin and return dummy instrument delete p; return( new DummyInstrument( _instrument_track ) ); } bool Instrument::isFromTrack( const track * _track ) const { return( m_instrumentTrack == _track ); } void Instrument::applyRelease( sampleFrame * buf, const NotePlayHandle * _n ) { const fpp_t frames = _n->framesLeftForCurrentPeriod(); const fpp_t fpp = engine::mixer()->framesPerPeriod(); const f_cnt_t fl = _n->framesLeft(); if( fl <= desiredReleaseFrames()+fpp ) { for( fpp_t f = (fpp_t)( ( fl > desiredReleaseFrames() ) ? ( qMax( fpp - desiredReleaseFrames(), 0 ) + fl % fpp ) : 0 ); f < frames; ++f ) { const float fac = (float)( fl-f-1 ) / desiredReleaseFrames(); for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { buf[f][ch] *= fac; } } } } QString Instrument::fullDisplayName() const { return instrumentTrack()->displayName(); } lmms-1.1.3/src/core/InstrumentFunctions.cpp000066400000000000000000000523331247673406200207710ustar00rootroot00000000000000/* * InstrumentFunctions.cpp - models for instrument-function-tab * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "InstrumentFunctions.h" #include "embed.h" #include "engine.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" #include "PresetPreviewPlayHandle.h" InstrumentFunctionNoteStacking::ChordTable::Init InstrumentFunctionNoteStacking::ChordTable::s_initTable[] = { { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "octave" ), { 0, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Major" ), { 0, 4, 7, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Majb5" ), { 0, 4, 6, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "minor" ), { 0, 3, 7, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "minb5" ), { 0, 3, 6, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "sus2" ), { 0, 2, 7, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "sus4" ), { 0, 5, 7, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "aug" ), { 0, 4, 8, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "augsus4" ), { 0, 5, 8, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "tri" ), { 0, 3, 6, 9, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "6" ), { 0, 4, 7, 9, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "6sus4" ), { 0, 5, 7, 9, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "6add9" ), { 0, 4, 7, 9, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m6" ), { 0, 3, 7, 9, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m6add9" ), { 0, 3, 7, 9, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7" ), { 0, 4, 7, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7sus4" ), { 0, 5, 7, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7#5" ), { 0, 4, 8, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7b5" ), { 0, 4, 6, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7#9" ), { 0, 4, 7, 10, 15, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7b9" ), { 0, 4, 7, 10, 13, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7#5#9" ), { 0, 4, 8, 10, 15, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7#5b9" ), { 0, 4, 8, 10, 13, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7b5b9" ), { 0, 4, 6, 10, 13, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7add11" ), { 0, 4, 7, 10, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7add13" ), { 0, 4, 7, 10, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "7#11" ), { 0, 4, 7, 10, 18, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj7" ), { 0, 4, 7, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj7b5" ), { 0, 4, 6, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj7#5" ), { 0, 4, 8, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj7#11" ), { 0, 4, 7, 11, 18, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj7add13" ), { 0, 4, 7, 11, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m7" ), { 0, 3, 7, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m7b5" ), { 0, 3, 6, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m7b9" ), { 0, 3, 7, 10, 13, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m7add11" ), { 0, 3, 7, 10, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m7add13" ), { 0, 3, 7, 10, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m-Maj7" ), { 0, 3, 7, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m-Maj7add11" ), { 0, 3, 7, 11, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m-Maj7add13" ), { 0, 3, 7, 11, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "9" ), { 0, 4, 7, 10, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "9sus4" ), { 0, 5, 7, 10, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "add9" ), { 0, 4, 7, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "9#5" ), { 0, 4, 8, 10, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "9b5" ), { 0, 4, 6, 10, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "9#11" ), { 0, 4, 7, 10, 14, 18, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "9b13" ), { 0, 4, 7, 10, 14, 20, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj9" ), { 0, 4, 7, 11, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj9sus4" ), { 0, 5, 7, 11, 15, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj9#5" ), { 0, 4, 8, 11, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj9#11" ), { 0, 4, 7, 11, 14, 18, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m9" ), { 0, 3, 7, 10, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "madd9" ), { 0, 3, 7, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m9b5" ), { 0, 3, 6, 10, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m9-Maj7" ), { 0, 3, 7, 11, 14, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "11" ), { 0, 4, 7, 10, 14, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "11b9" ), { 0, 4, 7, 10, 13, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj11" ), { 0, 4, 7, 11, 14, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m11" ), { 0, 3, 7, 10, 14, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m-Maj11" ), { 0, 3, 7, 11, 14, 17, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "13" ), { 0, 4, 7, 10, 14, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "13#9" ), { 0, 4, 7, 10, 15, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "13b9" ), { 0, 4, 7, 10, 13, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "13b5b9" ), { 0, 4, 6, 10, 13, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Maj13" ), { 0, 4, 7, 11, 14, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m13" ), { 0, 3, 7, 10, 14, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "m-Maj13" ), { 0, 3, 7, 11, 14, 21, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Major" ), { 0, 2, 4, 5, 7, 9, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Harmonic minor" ), { 0, 2, 3, 5, 7, 8, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Melodic minor" ), { 0, 2, 3, 5, 7, 9, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Whole tone" ), { 0, 2, 4, 6, 8, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Diminished" ), { 0, 2, 3, 5, 6, 8, 9, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Major pentatonic" ), { 0, 2, 4, 7, 9, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Minor pentatonic" ), { 0, 3, 5, 7, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Jap in sen" ), { 0, 1, 5, 7, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Major bebop" ), { 0, 2, 4, 5, 7, 8, 9, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Dominant bebop" ), { 0, 2, 4, 5, 7, 9, 10, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Blues" ), { 0, 3, 5, 6, 7, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Arabic" ), { 0, 1, 4, 5, 7, 8, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Enigmatic" ), { 0, 1, 4, 6, 8, 10, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Neopolitan" ), { 0, 1, 3, 5, 7, 9, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Neopolitan minor" ), { 0, 1, 3, 5, 7, 8, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Hungarian minor" ), { 0, 2, 3, 6, 7, 8, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Dorian" ), { 0, 2, 3, 5, 7, 9, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Phrygolydian" ), { 0, 1, 3, 5, 7, 8, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Lydian" ), { 0, 2, 4, 6, 7, 9, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Mixolydian" ), { 0, 2, 4, 5, 7, 9, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Aeolian" ), { 0, 2, 3, 5, 7, 8, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Locrian" ), { 0, 1, 3, 5, 6, 8, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Minor" ), { 0, 2, 3, 5, 7, 8, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Chromatic" ), { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Half-Whole Diminished" ), { 0, 1, 3, 4, 6, 7, 9, 10, -1 } }, { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "5" ), { 0, 7, -1 } } } ; InstrumentFunctionNoteStacking::Chord::Chord( const char * n, const ChordSemiTones & semi_tones ) : m_name( InstrumentFunctionNoteStacking::tr( n ) ) { for( m_size = 0; m_size < MAX_CHORD_POLYPHONY; m_size++ ) { if( semi_tones[m_size] == -1 ) { break; } m_semiTones[m_size] = semi_tones[m_size]; } } bool InstrumentFunctionNoteStacking::Chord::hasSemiTone( int8_t semi_tone ) const { for( int i = 0; i < size(); ++i ) { if( semi_tone == m_semiTones[i] ) { return true; } } return false; } InstrumentFunctionNoteStacking::ChordTable::ChordTable() : QVector() { for( int i = 0; i < static_cast( sizeof s_initTable / sizeof *s_initTable ); i++ ) { push_back( Chord( s_initTable[i].m_name, s_initTable[i].m_semiTones ) ); } } const InstrumentFunctionNoteStacking::Chord & InstrumentFunctionNoteStacking::ChordTable::getByName( const QString & name, bool is_scale ) const { for( int i = 0; i < size(); i++ ) { if( at( i ).getName() == name && is_scale == at( i ).isScale() ) return at( i ); } static Chord empty; return empty; } InstrumentFunctionNoteStacking::InstrumentFunctionNoteStacking( Model * _parent ) : Model( _parent, tr( "Chords" ) ), m_chordsEnabledModel( false, this ), m_chordsModel( this, tr( "Chord type" ) ), m_chordRangeModel( 1.0f, 1.0f, 9.0f, 1.0f, this, tr( "Chord range" ) ) { const ChordTable & chord_table = ChordTable::getInstance(); for( int i = 0; i < chord_table.size(); ++i ) { m_chordsModel.addItem( chord_table[i].getName() ); } } InstrumentFunctionNoteStacking::~InstrumentFunctionNoteStacking() { } void InstrumentFunctionNoteStacking::processNote( NotePlayHandle * _n ) { const int base_note_key = _n->key(); const ChordTable & chord_table = ChordTable::getInstance(); // we add chord-subnotes to note if either note is a base-note and // arpeggio is not used or note is part of an arpeggio // at the same time we only add sub-notes if nothing of the note was // played yet, because otherwise we would add chord-subnotes every // time an audio-buffer is rendered... if( ( _n->origin() == NotePlayHandle::OriginArpeggio || ( _n->hasParent() == false && _n->instrumentTrack()->isArpeggioEnabled() == false ) ) && _n->totalFramesPlayed() == 0 && m_chordsEnabledModel.value() == true && ! _n->isReleased() ) { // then insert sub-notes for chord const int selected_chord = m_chordsModel.value(); for( int octave_cnt = 0; octave_cnt < m_chordRangeModel.value(); ++octave_cnt ) { const int sub_note_key_base = base_note_key + octave_cnt * KeysPerOctave; // process all notes in the chord for( int i = 0; i < chord_table[selected_chord].size(); ++i ) { // add interval to sub-note-key const int sub_note_key = sub_note_key_base + (int) chord_table[selected_chord][i]; // maybe we're out of range -> let's get outta // here! if( sub_note_key > NumKeys ) { break; } // create copy of base-note note note_copy( _n->length(), 0, sub_note_key, _n->getVolume(), _n->getPanning(), _n->detuning() ); // create sub-note-play-handle, only note is // different new NotePlayHandle( _n->instrumentTrack(), _n->offset(), _n->frames(), note_copy, _n, -1, NotePlayHandle::OriginNoteStacking ); } } } } void InstrumentFunctionNoteStacking::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_chordsEnabledModel.saveSettings( _doc, _this, "chord-enabled" ); m_chordsModel.saveSettings( _doc, _this, "chord" ); m_chordRangeModel.saveSettings( _doc, _this, "chordrange" ); } void InstrumentFunctionNoteStacking::loadSettings( const QDomElement & _this ) { m_chordsEnabledModel.loadSettings( _this, "chord-enabled" ); m_chordsModel.loadSettings( _this, "chord" ); m_chordRangeModel.loadSettings( _this, "chordrange" ); } InstrumentFunctionArpeggio::InstrumentFunctionArpeggio( Model * _parent ) : Model( _parent, tr( "Arpeggio" ) ), m_arpEnabledModel( false ), m_arpModel( this, tr( "Arpeggio type" ) ), m_arpRangeModel( 1.0f, 1.0f, 9.0f, 1.0f, this, tr( "Arpeggio range" ) ), m_arpTimeModel( 100.0f, 25.0f, 2000.0f, 1.0f, 2000, this, tr( "Arpeggio time" ) ), m_arpGateModel( 100.0f, 1.0f, 200.0f, 1.0f, this, tr( "Arpeggio gate" ) ), m_arpDirectionModel( this, tr( "Arpeggio direction" ) ), m_arpModeModel( this, tr( "Arpeggio mode" ) ) { const InstrumentFunctionNoteStacking::ChordTable & chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); for( int i = 0; i < chord_table.size(); ++i ) { m_arpModel.addItem( chord_table[i].getName() ); } m_arpDirectionModel.addItem( tr( "Up" ), new PixmapLoader( "arp_up" ) ); m_arpDirectionModel.addItem( tr( "Down" ), new PixmapLoader( "arp_down" ) ); m_arpDirectionModel.addItem( tr( "Up and down" ), new PixmapLoader( "arp_up_and_down" ) ); m_arpDirectionModel.addItem( tr( "Random" ), new PixmapLoader( "arp_random" ) ); m_arpDirectionModel.addItem( tr( "Down and up" ), new PixmapLoader( "arp_up_and_down" ) ); m_arpDirectionModel.setInitValue( ArpDirUp ); m_arpModeModel.addItem( tr( "Free" ), new PixmapLoader( "arp_free" ) ); m_arpModeModel.addItem( tr( "Sort" ), new PixmapLoader( "arp_sort" ) ); m_arpModeModel.addItem( tr( "Sync" ), new PixmapLoader( "arp_sync" ) ); } InstrumentFunctionArpeggio::~InstrumentFunctionArpeggio() { } void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n ) { const int base_note_key = _n->key(); if( _n->origin() == NotePlayHandle::OriginArpeggio || _n->origin() == NotePlayHandle::OriginNoteStacking || !m_arpEnabledModel.value() || ( _n->isReleased() && _n->releaseFramesDone() >= _n->actualReleaseFramesToDo() ) ) { return; } const int selected_arp = m_arpModel.value(); ConstNotePlayHandleList cnphv = NotePlayHandle::nphsOfInstrumentTrack( _n->instrumentTrack() ); if( m_arpModeModel.value() != FreeMode && cnphv.size() == 0 ) { // maybe we're playing only a preset-preview-note? cnphv = PresetPreviewPlayHandle::nphsOfInstrumentTrack( _n->instrumentTrack() ); if( cnphv.size() == 0 ) { // still nothing found here, so lets return //return; cnphv.push_back( _n ); } } const InstrumentFunctionNoteStacking::ChordTable & chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); const int cur_chord_size = chord_table[selected_arp].size(); const int range = (int)( cur_chord_size * m_arpRangeModel.value() ); const int total_range = range * cnphv.size(); // number of frames that every note should be played const f_cnt_t arp_frames = (f_cnt_t)( m_arpTimeModel.value() / 1000.0f * engine::mixer()->processingSampleRate() ); const f_cnt_t gated_frames = (f_cnt_t)( m_arpGateModel.value() * arp_frames / 100.0f ); // used for calculating remaining frames for arp-note, we have to add // arp_frames-1, otherwise the first arp-note will not be setup // correctly... -> arp_frames frames silence at the start of every note! int cur_frame = ( ( m_arpModeModel.value() != FreeMode ) ? cnphv.first()->totalFramesPlayed() : _n->totalFramesPlayed() ) + arp_frames - 1; // used for loop f_cnt_t frames_processed = 0; while( frames_processed < engine::mixer()->framesPerPeriod() ) { const f_cnt_t remaining_frames_for_cur_arp = arp_frames - ( cur_frame % arp_frames ); // does current arp-note fill whole audio-buffer? if( remaining_frames_for_cur_arp > engine::mixer()->framesPerPeriod() ) { // then we don't have to do something! break; } frames_processed += remaining_frames_for_cur_arp; // init with zero int cur_arp_idx = 0; // in sorted mode: is it our turn or do we have to be quiet for // now? if( m_arpModeModel.value() == SortMode && ( ( cur_frame / arp_frames ) % total_range ) / range != (f_cnt_t) _n->index() ) { // update counters frames_processed += arp_frames; cur_frame += arp_frames; continue; } const int dir = m_arpDirectionModel.value(); // process according to arpeggio-direction... if( dir == ArpDirUp ) { cur_arp_idx = ( cur_frame / arp_frames ) % range; } else if( dir == ArpDirDown ) { cur_arp_idx = range - ( cur_frame / arp_frames ) % range - 1; } else if( dir == ArpDirUpAndDown && range > 1 ) { // imagine, we had to play the arp once up and then // once down -> makes 2 * range possible notes... // because we don't play the lower and upper notes // twice, we have to subtract 2 cur_arp_idx = ( cur_frame / arp_frames ) % ( range * 2 - 2 ); // if greater than range, we have to play down... // looks like the code for arp_dir==DOWN... :) if( cur_arp_idx >= range ) { cur_arp_idx = range - cur_arp_idx % ( range - 1 ) - 1; } } else if( dir == ArpDirDownAndUp && range > 1 ) { // copied from ArpDirUpAndDown above cur_arp_idx = ( cur_frame / arp_frames ) % ( range * 2 - 2 ); // if greater than range, we have to play down... // looks like the code for arp_dir==DOWN... :) if( cur_arp_idx >= range ) { cur_arp_idx = range - cur_arp_idx % ( range - 1 ) - 1; } // inverts direction cur_arp_idx = range - cur_arp_idx - 1; } else if( dir == ArpDirRandom ) { // just pick a random chord-index cur_arp_idx = (int)( range * ( (float) rand() / (float) RAND_MAX ) ); } // now calculate final key for our arp-note const int sub_note_key = base_note_key + (cur_arp_idx / cur_chord_size ) * KeysPerOctave + chord_table[selected_arp][cur_arp_idx % cur_chord_size]; // range-checking if( sub_note_key >= NumKeys || sub_note_key < 0 || engine::mixer()->criticalXRuns() ) { continue; } float vol_level = 1.0f; if( _n->isReleased() ) { vol_level = _n->volumeLevel( cur_frame + gated_frames ); } // create new arp-note // create sub-note-play-handle, only ptr to note is different // and is_arp_note=true new NotePlayHandle( _n->instrumentTrack(), ( ( m_arpModeModel.value() != FreeMode ) ? cnphv.first()->offset() : _n->offset() ) + frames_processed, gated_frames, note( MidiTime( 0 ), MidiTime( 0 ), sub_note_key, (volume_t) qRound( _n->getVolume() * vol_level ), _n->getPanning(), _n->detuning() ), _n, -1, NotePlayHandle::OriginArpeggio ); // update counters frames_processed += arp_frames; cur_frame += arp_frames; } } void InstrumentFunctionArpeggio::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_arpEnabledModel.saveSettings( _doc, _this, "arp-enabled" ); m_arpModel.saveSettings( _doc, _this, "arp" ); m_arpRangeModel.saveSettings( _doc, _this, "arprange" ); m_arpTimeModel.saveSettings( _doc, _this, "arptime" ); m_arpGateModel.saveSettings( _doc, _this, "arpgate" ); m_arpDirectionModel.saveSettings( _doc, _this, "arpdir" ); m_arpModeModel.saveSettings( _doc, _this, "arpmode" ); } void InstrumentFunctionArpeggio::loadSettings( const QDomElement & _this ) { m_arpEnabledModel.loadSettings( _this, "arp-enabled" ); m_arpModel.loadSettings( _this, "arp" ); m_arpRangeModel.loadSettings( _this, "arprange" ); m_arpTimeModel.loadSettings( _this, "arptime" ); m_arpGateModel.loadSettings( _this, "arpgate" ); m_arpDirectionModel.loadSettings( _this, "arpdir" ); /* // Keep compatibility with version 0.2.1 file format if( _this.hasAttribute( "arpsyncmode" ) ) { m_arpTimeKnob->setSyncMode( ( tempoSyncKnob::tempoSyncMode ) _this.attribute( "arpsyncmode" ).toInt() ); }*/ m_arpModeModel.loadSettings( _this, "arpmode" ); } #include "moc_InstrumentFunctions.cxx" lmms-1.1.3/src/core/InstrumentSoundShaping.cpp000066400000000000000000000256301247673406200214230ustar00rootroot00000000000000/* * InstrumentSoundShaping.cpp - implementation of class InstrumentSoundShaping * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "InstrumentSoundShaping.h" #include "basic_filters.h" #include "embed.h" #include "engine.h" #include "EnvelopeAndLfoParameters.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" const float CUT_FREQ_MULTIPLIER = 6000.0f; const float RES_MULTIPLIER = 2.0f; const float RES_PRECISION = 1000.0f; // names for env- and lfo-targets - first is name being displayed to user // and second one is used internally, e.g. for saving/restoring settings const QString __targetNames[InstrumentSoundShaping::NumTargets][3] = { { InstrumentSoundShaping::tr( "VOLUME" ), "vol", InstrumentSoundShaping::tr( "Volume" ) }, /* InstrumentSoundShaping::tr( "Pan" ), InstrumentSoundShaping::tr( "Pitch" ),*/ { InstrumentSoundShaping::tr( "CUTOFF" ), "cut", InstrumentSoundShaping::tr( "Cutoff frequency" ) }, { InstrumentSoundShaping::tr( "RESO" ), "res", InstrumentSoundShaping::tr( "Resonance" ) } } ; InstrumentSoundShaping::InstrumentSoundShaping( InstrumentTrack * _instrument_track ) : Model( _instrument_track, tr( "Envelopes/LFOs" ) ), m_instrumentTrack( _instrument_track ), m_filterEnabledModel( false, this ), m_filterModel( this, tr( "Filter type" ) ), m_filterCutModel( 14000.0, 1.0, 14000.0, 1.0, this, tr( "Cutoff frequency" ) ), m_filterResModel( 0.5, basicFilters<>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance" ) ) { for( int i = 0; i < NumTargets; ++i ) { float value_for_zero_amount = 0.0; if( i == Volume ) { value_for_zero_amount = 1.0; } m_envLfoParameters[i] = new EnvelopeAndLfoParameters( value_for_zero_amount, this ); m_envLfoParameters[i]->setDisplayName( tr( __targetNames[i][2].toUtf8().constData() ) ); } m_filterModel.addItem( tr( "LowPass" ), new PixmapLoader( "filter_lp" ) ); m_filterModel.addItem( tr( "HiPass" ), new PixmapLoader( "filter_hp" ) ); m_filterModel.addItem( tr( "BandPass csg" ), new PixmapLoader( "filter_bp" ) ); m_filterModel.addItem( tr( "BandPass czpg" ), new PixmapLoader( "filter_bp" ) ); m_filterModel.addItem( tr( "Notch" ), new PixmapLoader( "filter_notch" ) ); m_filterModel.addItem( tr( "Allpass" ), new PixmapLoader( "filter_ap" ) ); m_filterModel.addItem( tr( "Moog" ), new PixmapLoader( "filter_lp" ) ); m_filterModel.addItem( tr( "2x LowPass" ), new PixmapLoader( "filter_2lp" ) ); m_filterModel.addItem( tr( "RC LowPass 12dB" ), new PixmapLoader( "filter_lp" ) ); m_filterModel.addItem( tr( "RC BandPass 12dB" ), new PixmapLoader( "filter_bp" ) ); m_filterModel.addItem( tr( "RC HighPass 12dB" ), new PixmapLoader( "filter_hp" ) ); m_filterModel.addItem( tr( "RC LowPass 24dB" ), new PixmapLoader( "filter_lp" ) ); m_filterModel.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) ); m_filterModel.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) ); m_filterModel.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) ); } InstrumentSoundShaping::~InstrumentSoundShaping() { } float InstrumentSoundShaping::volumeLevel( NotePlayHandle* n, const f_cnt_t frame ) { f_cnt_t envReleaseBegin = frame - n->releaseFramesDone() + n->framesBeforeRelease(); if( n->isReleased() == false ) { envReleaseBegin += engine::mixer()->framesPerPeriod(); } float level; m_envLfoParameters[Volume]->fillLevel( &level, frame, envReleaseBegin, 1 ); return level; } void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer, const fpp_t frames, NotePlayHandle* n ) { const f_cnt_t envTotalFrames = n->totalFramesPlayed(); f_cnt_t envReleaseBegin = envTotalFrames - n->releaseFramesDone() + n->framesBeforeRelease(); if( n->isReleased() == false ) { envReleaseBegin += engine::mixer()->framesPerPeriod(); } // because of optimizations, there's special code for several cases: // - cut- and res-lfo/envelope active // - cut-lfo/envelope active // - res-lfo/envelope active // - no lfo/envelope active but filter is used // only use filter, if it is really needed if( m_filterEnabledModel.value() ) { int old_filter_cut = 0; int old_filter_res = 0; if( n->m_filter == NULL ) { n->m_filter = new basicFilters<>( engine::mixer()->processingSampleRate() ); } n->m_filter->setFilterType( m_filterModel.value() ); #ifdef __GNUC__ float cut_buf[frames]; float res_buf[frames]; #else float * cut_buf = NULL; float * res_buf = NULL; #endif if( m_envLfoParameters[Cut]->isUsed() ) { #ifndef __GNUC__ cut_buf = new float[frames]; #endif m_envLfoParameters[Cut]->fillLevel( cut_buf, envTotalFrames, envReleaseBegin, frames ); } if( m_envLfoParameters[Resonance]->isUsed() ) { #ifndef __GNUC__ res_buf = new float[frames]; #endif m_envLfoParameters[Resonance]->fillLevel( res_buf, envTotalFrames, envReleaseBegin, frames ); } const float fcv = m_filterCutModel.value(); const float frv = m_filterResModel.value(); if( m_envLfoParameters[Cut]->isUsed() && m_envLfoParameters[Resonance]->isUsed() ) { for( fpp_t frame = 0; frame < frames; ++frame ) { const float new_cut_val = EnvelopeAndLfoParameters::expKnobVal( cut_buf[frame] ) * CUT_FREQ_MULTIPLIER + fcv; const float new_res_val = frv + RES_MULTIPLIER * res_buf[frame]; if( static_cast( new_cut_val ) != old_filter_cut || static_cast( new_res_val*RES_PRECISION ) != old_filter_res ) { n->m_filter->calcFilterCoeffs( new_cut_val, new_res_val ); old_filter_cut = static_cast( new_cut_val ); old_filter_res = static_cast( new_res_val*RES_PRECISION ); } buffer[frame][0] = n->m_filter->update( buffer[frame][0], 0 ); buffer[frame][1] = n->m_filter->update( buffer[frame][1], 1 ); } } else if( m_envLfoParameters[Cut]->isUsed() ) { for( fpp_t frame = 0; frame < frames; ++frame ) { float new_cut_val = EnvelopeAndLfoParameters::expKnobVal( cut_buf[frame] ) * CUT_FREQ_MULTIPLIER + fcv; if( static_cast( new_cut_val ) != old_filter_cut ) { n->m_filter->calcFilterCoeffs( new_cut_val, frv ); old_filter_cut = static_cast( new_cut_val ); } buffer[frame][0] = n->m_filter->update( buffer[frame][0], 0 ); buffer[frame][1] = n->m_filter->update( buffer[frame][1], 1 ); } } else if( m_envLfoParameters[Resonance]->isUsed() ) { for( fpp_t frame = 0; frame < frames; ++frame ) { float new_res_val = frv + RES_MULTIPLIER * res_buf[frame]; if( static_cast( new_res_val*RES_PRECISION ) != old_filter_res ) { n->m_filter->calcFilterCoeffs( fcv, new_res_val ); old_filter_res = static_cast( new_res_val*RES_PRECISION ); } buffer[frame][0] = n->m_filter->update( buffer[frame][0], 0 ); buffer[frame][1] = n->m_filter->update( buffer[frame][1], 1 ); } } else { n->m_filter->calcFilterCoeffs( fcv, frv ); for( fpp_t frame = 0; frame < frames; ++frame ) { buffer[frame][0] = n->m_filter->update( buffer[frame][0], 0 ); buffer[frame][1] = n->m_filter->update( buffer[frame][1], 1 ); } } #ifndef __GNUC__ delete[] cut_buf; delete[] res_buf; #endif } if( m_envLfoParameters[Volume]->isUsed() ) { #ifdef __GNUC__ float vol_buf[frames]; #else float * vol_buf = new float[frames]; #endif m_envLfoParameters[Volume]->fillLevel( vol_buf, envTotalFrames, envReleaseBegin, frames ); for( fpp_t frame = 0; frame < frames; ++frame ) { float vol_level = vol_buf[frame]; vol_level = vol_level * vol_level; buffer[frame][0] = vol_level * buffer[frame][0]; buffer[frame][1] = vol_level * buffer[frame][1]; } #ifndef __GNUC__ delete[] vol_buf; #endif } /* else if( m_envLfoParameters[Volume]->isUsed() == false && m_envLfoParameters[PANNING]->isUsed() ) { // only use panning-envelope... for( fpp_t frame = 0; frame < frames; ++frame ) { float vol_level = pan_buf[frame]; vol_level = vol_level*vol_level; for( ch_cnt_t chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl ) { buffer[frame][chnl] = vol_level * buffer[frame][chnl]; } } }*/ } f_cnt_t InstrumentSoundShaping::envFrames( const bool _only_vol ) const { f_cnt_t ret_val = m_envLfoParameters[Volume]->PAHD_Frames(); if( _only_vol == false ) { for( int i = Volume+1; i < NumTargets; ++i ) { if( m_envLfoParameters[i]->isUsed() && m_envLfoParameters[i]->PAHD_Frames() > ret_val ) { ret_val = m_envLfoParameters[i]->PAHD_Frames(); } } } return ret_val; } f_cnt_t InstrumentSoundShaping::releaseFrames() const { if( m_envLfoParameters[Volume]->isUsed() ) { return m_envLfoParameters[Volume]->releaseFrames(); } f_cnt_t ret_val = m_instrumentTrack->instrument() ? m_instrumentTrack->instrument()->desiredReleaseFrames() : 0; for( int i = Volume+1; i < NumTargets; ++i ) { if( m_envLfoParameters[i]->isUsed() ) { ret_val = qMax( ret_val, m_envLfoParameters[i]->releaseFrames() ); } } return ret_val; } void InstrumentSoundShaping::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_filterModel.saveSettings( _doc, _this, "ftype" ); m_filterCutModel.saveSettings( _doc, _this, "fcut" ); m_filterResModel.saveSettings( _doc, _this, "fres" ); m_filterEnabledModel.saveSettings( _doc, _this, "fwet" ); for( int i = 0; i < NumTargets; ++i ) { m_envLfoParameters[i]->saveState( _doc, _this ).setTagName( m_envLfoParameters[i]->nodeName() + QString( __targetNames[i][1] ).toLower() ); } } void InstrumentSoundShaping::loadSettings( const QDomElement & _this ) { m_filterModel.loadSettings( _this, "ftype" ); m_filterCutModel.loadSettings( _this, "fcut" ); m_filterResModel.loadSettings( _this, "fres" ); m_filterEnabledModel.loadSettings( _this, "fwet" ); QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { for( int i = 0; i < NumTargets; ++i ) { if( node.nodeName() == m_envLfoParameters[i]->nodeName() + QString( __targetNames[i][1] ). toLower() ) { m_envLfoParameters[i]->restoreState( node.toElement() ); } } } node = node.nextSibling(); } } #include "moc_InstrumentSoundShaping.cxx" lmms-1.1.3/src/core/JournallingObject.cpp000066400000000000000000000060631247673406200203420ustar00rootroot00000000000000/* * JournallingObject.cpp - implementation of journalling-object related stuff * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "JournallingObject.h" #include "AutomatableModel.h" #include "ProjectJournal.h" #include "base64.h" #include "engine.h" JournallingObject::JournallingObject() : SerializingObject(), m_id( engine::projectJournal()->allocID( this ) ), m_journalling( true ), m_journallingStateStack() { } JournallingObject::~JournallingObject() { if( engine::projectJournal() ) { engine::projectJournal()->freeID( id() ); } } void JournallingObject::addJournalCheckPoint() { if( isJournalling() ) { engine::projectJournal()->addJournalCheckPoint( this ); } } QDomElement JournallingObject::saveState( QDomDocument & _doc, QDomElement & _parent ) { if( isJournalling() ) { QDomElement _this = SerializingObject::saveState( _doc, _parent ); QDomElement journalNode = _doc.createElement( "journallingObject" ); journalNode.setAttribute( "id", id() ); journalNode.setAttribute( "metadata", true ); _this.appendChild( journalNode ); return _this; } else { return QDomElement(); } } void JournallingObject::restoreState( const QDomElement & _this ) { SerializingObject::restoreState( _this ); saveJournallingState( false ); // search for journal-node QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( node.isElement() && node.nodeName() == "journal" ) { const jo_id_t new_id = node.toElement().attribute( "id" ).toInt(); if( new_id ) { changeID( new_id ); } } node = node.nextSibling(); } restoreJournallingState(); } void JournallingObject::changeID( jo_id_t _id ) { if( id() != _id ) { JournallingObject * jo = engine::projectJournal()-> journallingObject( _id ); if( jo != NULL ) { QString used_by = jo->nodeName(); if( used_by == "automatablemodel" && dynamic_cast( jo ) ) { used_by += ":" + dynamic_cast( jo )-> displayName(); } fprintf( stderr, "JO-ID %d already in use by %s!\n", (int) _id, used_by.toUtf8().constData() ); return; } engine::projectJournal()->reallocID( _id, this ); m_id = _id; } } lmms-1.1.3/src/core/LadspaControl.cpp000066400000000000000000000164021247673406200174720ustar00rootroot00000000000000/* * LadspaControl.cpp - model for controlling a LADSPA port * * Copyright (c) 2008-2014 Tobias Doerffel * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "LadspaControl.h" #include "LadspaBase.h" LadspaControl::LadspaControl( Model * _parent, port_desc_t * _port, bool _link ) : Model( _parent ), m_link( _link ), m_port( _port ), m_linkEnabledModel( _link, this, tr( "Link channels" ) ), m_toggledModel( false, this, m_port->name ), m_knobModel( 0, 0, 0, 1, this, m_port->name ), m_tempoSyncKnobModel( 0, 0, 0, 1, m_port->max, this, m_port->name ) { if( m_link ) { connect( &m_linkEnabledModel, SIGNAL( dataChanged() ), this, SLOT( linkStateChanged() ) ); } switch( m_port->data_type ) { case TOGGLED: connect( &m_toggledModel, SIGNAL( dataChanged() ), this, SLOT( ledChanged() ) ); if( m_port->def == 1.0f ) { m_toggledModel.setValue( true ); } // TODO: careful: we must prevent saved scales m_toggledModel.setScaleLogarithmic( m_port->suggests_logscale ); break; case INTEGER: m_knobModel.setRange( static_cast( m_port->max ), static_cast( m_port->min ), 1 + static_cast( m_port->max - m_port->min ) / 400 ); m_knobModel.setInitValue( static_cast( m_port->def ) ); connect( &m_knobModel, SIGNAL( dataChanged() ), this, SLOT( knobChanged() ) ); // TODO: careful: we must prevent saved scales m_knobModel.setScaleLogarithmic( m_port->suggests_logscale ); break; case FLOATING: m_knobModel.setRange( m_port->min, m_port->max, ( m_port->max - m_port->min ) / ( m_port->name.toUpper() == "GAIN" && m_port->max == 10.0f ? 4000.0f : ( m_port->suggests_logscale ? 8000.0f : 800.0f ) ) ); m_knobModel.setInitValue( m_port->def ); connect( &m_knobModel, SIGNAL( dataChanged() ), this, SLOT( knobChanged() ) ); // TODO: careful: we must prevent saved scales m_knobModel.setScaleLogarithmic( m_port->suggests_logscale ); break; case TIME: m_tempoSyncKnobModel.setRange( m_port->min, m_port->max, ( m_port->max - m_port->min ) / 800.0f ); m_tempoSyncKnobModel.setInitValue( m_port->def ); connect( &m_tempoSyncKnobModel, SIGNAL( dataChanged() ), this, SLOT( tempoKnobChanged() ) ); // TODO: careful: we must prevent saved scales m_tempoSyncKnobModel.setScaleLogarithmic( m_port->suggests_logscale ); break; default: break; } } LadspaControl::~LadspaControl() { } LADSPA_Data LadspaControl::value() { switch( m_port->data_type ) { case TOGGLED: return static_cast( m_toggledModel.value() ); case INTEGER: case FLOATING: return static_cast( m_knobModel.value() ); case TIME: return static_cast( m_tempoSyncKnobModel.value() ); default: qWarning( "LadspaControl::value(): BAD BAD BAD\n" ); break; } return 0; } void LadspaControl::setValue( LADSPA_Data _value ) { switch( m_port->data_type ) { case TOGGLED: m_toggledModel.setValue( static_cast( _value ) ); break; case INTEGER: m_knobModel.setValue( static_cast( _value ) ); break; case FLOATING: m_knobModel.setValue( static_cast( _value ) ); break; case TIME: m_tempoSyncKnobModel.setValue( static_cast( _value ) ); break; default: printf("LadspaControl::setValue BAD BAD BAD\n"); break; } } void LadspaControl::saveSettings( QDomDocument& doc, QDomElement& parent, const QString& name ) { QDomElement e = doc.createElement( name ); if( m_link ) { m_linkEnabledModel.saveSettings( doc, e, "link" ); } switch( m_port->data_type ) { case TOGGLED: m_toggledModel.saveSettings( doc, e, "data" ); break; case INTEGER: case FLOATING: m_knobModel.saveSettings( doc, e, "data" ); break; case TIME: m_tempoSyncKnobModel.saveSettings( doc, e, "data" ); break; default: printf("LadspaControl::saveSettings BAD BAD BAD\n"); break; } parent.appendChild( e ); } void LadspaControl::loadSettings( const QDomElement& parent, const QString& name ) { QString dataModelName = "data"; QString linkModelName = "link"; QDomElement e = parent.namedItem( name ).toElement(); // COMPAT < 1.0.0: detect old data format where there's either no dedicated sub // element or there's a direct sub element with automation link information if( e.isNull() || e.hasAttribute( "id" ) ) { dataModelName = name; linkModelName = name + "link"; e = parent; } if( m_link ) { m_linkEnabledModel.loadSettings( e, linkModelName ); } switch( m_port->data_type ) { case TOGGLED: m_toggledModel.loadSettings( e, dataModelName ); break; case INTEGER: case FLOATING: m_knobModel.loadSettings( e, dataModelName ); break; case TIME: m_tempoSyncKnobModel.loadSettings( e, dataModelName ); break; default: printf("LadspaControl::loadSettings BAD BAD BAD\n"); break; } } void LadspaControl::linkControls( LadspaControl * _control ) { switch( m_port->data_type ) { case TOGGLED: BoolModel::linkModels( &m_toggledModel, _control->toggledModel() ); break; case INTEGER: case FLOATING: FloatModel::linkModels( &m_knobModel, _control->knobModel() ); break; case TIME: TempoSyncKnobModel::linkModels( &m_tempoSyncKnobModel, _control->tempoSyncKnobModel() ); break; default: break; } } void LadspaControl::ledChanged() { emit changed( m_port->port_id, static_cast( m_toggledModel.value() ) ); } void LadspaControl::knobChanged() { emit changed( m_port->port_id, static_cast( m_knobModel.value() ) ); } void LadspaControl::tempoKnobChanged() { emit changed( m_port->port_id, static_cast( m_tempoSyncKnobModel.value() ) ); } void LadspaControl::unlinkControls( LadspaControl * _control ) { switch( m_port->data_type ) { case TOGGLED: BoolModel::unlinkModels( &m_toggledModel, _control->toggledModel() ); break; case INTEGER: case FLOATING: FloatModel::unlinkModels( &m_knobModel, _control->knobModel() ); break; case TIME: TempoSyncKnobModel::unlinkModels( &m_tempoSyncKnobModel, _control->tempoSyncKnobModel() ); break; default: break; } } void LadspaControl::linkStateChanged() { emit linkChanged( m_port->control_id, m_linkEnabledModel.value() ); } void LadspaControl::setLink( bool _state ) { m_linkEnabledModel.setValue( _state ); } #include "moc_LadspaControl.cxx" lmms-1.1.3/src/core/LfoController.cpp000066400000000000000000000144241247673406200175130ustar00rootroot00000000000000/* * LfoController.cpp - implementation of class controller which handles * remote-control of AutomatableModels * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "song.h" #include "engine.h" #include "Mixer.h" #include "LfoController.h" #include "ControllerDialog.h" //const float TWO_PI = 6.28318531f; LfoController::LfoController( Model * _parent ) : Controller( Controller::LfoController, _parent, tr( "LFO Controller" ) ), m_baseModel( 0.5, 0.0, 1.0, 0.001, this, tr( "Base value" ) ), m_speedModel( 2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Oscillator speed" ) ), m_amountModel( 1.0, -1.0, 1.0, 0.005, this, tr( "Oscillator amount" ) ), m_phaseModel( 0.0, 0.0, 360.0, 4.0, this, tr( "Oscillator phase" ) ), m_waveModel( Oscillator::SineWave, 0, Oscillator::NumWaveShapes, this, tr( "Oscillator waveform" ) ), m_multiplierModel( 0, 0, 2, this, tr( "Frequency Multiplier" ) ), m_duration( 1000 ), m_phaseCorrection( 0 ), m_phaseOffset( 0 ), m_sampleFunction( &Oscillator::sinSample ), m_userDefSampleBuffer( new SampleBuffer ) { connect( &m_waveModel, SIGNAL( dataChanged() ), this, SLOT( updateSampleFunction() ) ); } LfoController::~LfoController() { sharedObject::unref( m_userDefSampleBuffer ); m_baseModel.disconnect( this ); m_speedModel.disconnect( this ); m_amountModel.disconnect( this ); m_phaseModel.disconnect( this ); m_waveModel.disconnect( this ); m_multiplierModel.disconnect( this ); } // This code took forever to get right. It can // definately be optimized. // The code should probably be integrated with the oscillator class. But I // don't know how to use oscillator because it is so confusing float LfoController::value( int _offset ) { int frame = runningFrames() + _offset + m_phaseCorrection; //If the song is playing, sync the value with the time of the song. if( engine::getSong()->isPlaying() || engine::getSong()->isExporting() ) { // The new duration in frames // (Samples/Second) / (periods/second) = (Samples/cycle) float newDurationF = engine::mixer()->processingSampleRate() * m_speedModel.value(); switch(m_multiplierModel.value() ) { case 1: newDurationF /= 100.0; break; case 2: newDurationF *= 100.0; break; default: break; } m_phaseOffset = qRound( m_phaseModel.value() * newDurationF / 360.0 ); int newDuration = static_cast( newDurationF ); m_phaseCorrection = static_cast(engine::getSong()->getTicks()*engine::framesPerTick())%newDuration + m_phaseOffset; // re-run the first calculation again frame = m_phaseCorrection + _offset; } // speedModel 0..1 fast..slow 0ms..20000ms // duration m_duration // // frames / (20seconds of frames) float sampleFrame = float( frame+m_phaseOffset ) / (engine::mixer()->processingSampleRate() * m_speedModel.value() ); switch(m_multiplierModel.value() ) { case 1: sampleFrame *= 100.0; break; case 2: sampleFrame /= 100.0; break; default: break; } // 44100 frames/sec return m_baseModel.value() + ( m_amountModel.value() * ( m_sampleFunction != NULL ? m_sampleFunction(sampleFrame): m_userDefSampleBuffer->userWaveSample(sampleFrame) ) / 2.0f ); } void LfoController::updateSampleFunction() { switch( m_waveModel.value() ) { case Oscillator::SineWave: m_sampleFunction = &Oscillator::sinSample; break; case Oscillator::TriangleWave: m_sampleFunction = &Oscillator::triangleSample; break; case Oscillator::SawWave: m_sampleFunction = &Oscillator::sawSample; break; case Oscillator::SquareWave: m_sampleFunction = &Oscillator::squareSample; break; case Oscillator::MoogSawWave: m_sampleFunction = &Oscillator::moogSawSample; break; case Oscillator::ExponentialWave: m_sampleFunction = &Oscillator::expSample; break; case Oscillator::WhiteNoise: m_sampleFunction = &Oscillator::noiseSample; break; case Oscillator::UserDefinedWave: m_sampleFunction = NULL; /*TODO: If C++11 is allowed, should change the type of m_sampleFunction be std::function and use the line below: */ //m_sampleFunction = &(m_userDefSampleBuffer->userWaveSample) break; } } void LfoController::saveSettings( QDomDocument & _doc, QDomElement & _this ) { Controller::saveSettings( _doc, _this ); m_baseModel.saveSettings( _doc, _this, "base" ); m_speedModel.saveSettings( _doc, _this, "speed" ); m_amountModel.saveSettings( _doc, _this, "amount" ); m_phaseModel.saveSettings( _doc, _this, "phase" ); m_waveModel.saveSettings( _doc, _this, "wave" ); m_multiplierModel.saveSettings( _doc, _this, "multiplier" ); _this.setAttribute( "userwavefile" , m_userDefSampleBuffer->audioFile() ); } void LfoController::loadSettings( const QDomElement & _this ) { Controller::loadSettings( _this ); m_baseModel.loadSettings( _this, "base" ); m_speedModel.loadSettings( _this, "speed" ); m_amountModel.loadSettings( _this, "amount" ); m_phaseModel.loadSettings( _this, "phase" ); m_waveModel.loadSettings( _this, "wave" ); m_multiplierModel.loadSettings( _this, "multiplier" ); m_userDefSampleBuffer->setAudioFile( _this.attribute("userwavefile" ) ); updateSampleFunction(); } QString LfoController::nodeName() const { return( "lfocontroller" ); } ControllerDialog * LfoController::createDialog( QWidget * _parent ) { return new LfoControllerDialog( this, _parent ); } #include "moc_LfoController.cxx" lmms-1.1.3/src/core/MemoryHelper.cpp000066400000000000000000000034441247673406200173370ustar00rootroot00000000000000/* * Copyright (c) 2014 Simon Symeonidis * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "lmms_basics.h" #include "MemoryHelper.h" /** * Allocate a number of bytes and return them. * @param byteNum is the number of bytes */ void* MemoryHelper::alignedMalloc( int byteNum ) { char *ptr, *ptr2, *aligned_ptr; int align_mask = ALIGN_SIZE - 1; ptr = static_cast( malloc( byteNum + ALIGN_SIZE + sizeof( int ) ) ); if( ptr == NULL ) return NULL; ptr2 = ptr + sizeof( int ); aligned_ptr = ptr2 + ( ALIGN_SIZE - ( ( size_t ) ptr2 & align_mask ) ); ptr2 = aligned_ptr - sizeof( int ); *( ( int* ) ptr2 ) = ( int )( aligned_ptr - ptr ); return aligned_ptr; } /** * Free an aligned buffer * @param _buffer is the buffer to free */ void MemoryHelper::alignedFree( void* _buffer ) { if( _buffer ) { int *ptr2 = static_cast( _buffer ) - 1; _buffer = static_cast( _buffer ) - *ptr2; free( _buffer ); } } lmms-1.1.3/src/core/MeterModel.cpp000066400000000000000000000041611247673406200167610ustar00rootroot00000000000000/* * MeterModel.cpp - model for meter specification * * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "MeterModel.h" #include "AutomationPattern.h" MeterModel::MeterModel( ::Model * _parent ) : Model( _parent ), m_numeratorModel( 4, 1, 32, this, tr( "Numerator" ) ), m_denominatorModel( 4, 1, 32, this, tr( "Denominator" ) ) { connect( &m_numeratorModel, SIGNAL( dataChanged() ), this, SIGNAL( dataChanged() ) ); connect( &m_denominatorModel, SIGNAL( dataChanged() ), this, SIGNAL( dataChanged() ) ); } MeterModel::~MeterModel() { } void MeterModel::reset() { m_numeratorModel.setValue( 4 ); m_denominatorModel.setValue( 4 ); AutomationPattern::globalAutomationPattern( &m_numeratorModel )->clear(); AutomationPattern::globalAutomationPattern( &m_denominatorModel )->clear(); } void MeterModel::saveSettings( QDomDocument & _doc, QDomElement & _this, const QString & _name ) { m_numeratorModel.saveSettings( _doc, _this, _name + "_numerator" ); m_denominatorModel.saveSettings( _doc, _this, _name + "_denominator" ); } void MeterModel::loadSettings( const QDomElement & _this, const QString & _name ) { m_numeratorModel.loadSettings( _this, _name + "_numerator" ); m_denominatorModel.loadSettings( _this, _name + "_denominator" ); } #include "moc_MeterModel.cxx" lmms-1.1.3/src/core/MixHelpers.cpp000066400000000000000000000105061247673406200170040ustar00rootroot00000000000000/* * MixHelpers.cpp - helper functions for mixing buffers * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lmms_math.h" #include "MixHelpers.h" namespace MixHelpers { /*! \brief Function for applying MIXOP on all sample frames */ template static inline void run( sampleFrame* dst, const sampleFrame* src, int frames, const MIXOP& OP ) { for( int i = 0; i < frames; ++i ) { OP( dst[i], src[i] ); } } /*! \brief Function for applying MIXOP on all sample frames - split source */ template static inline void run( sampleFrame* dst, const sample_t* srcLeft, const sample_t* srcRight, int frames, const MIXOP& OP ) { for( int i = 0; i < frames; ++i ) { const sampleFrame src = { srcLeft[i], srcRight[i] }; OP( dst[i], src ); } } bool isSilent( const sampleFrame* src, int frames ) { const float silenceThreshold = 0.0000001f; for( int i = 0; i < frames; ++i ) { if( fabsf( src[i][0] ) >= silenceThreshold || fabsf( src[i][1] ) >= silenceThreshold ) { return false; } } return true; } struct AddOp { void operator()( sampleFrame& dst, const sampleFrame& src ) const { dst[0] += src[0]; dst[1] += src[1]; } } ; void add( sampleFrame* dst, const sampleFrame* src, int frames ) { run<>( dst, src, frames, AddOp() ); } struct AddMultipliedOp { AddMultipliedOp( float coeff ) : m_coeff( coeff ) { } void operator()( sampleFrame& dst, const sampleFrame& src ) const { dst[0] += src[0] * m_coeff; dst[1] += src[1] * m_coeff; } const float m_coeff; } ; void addMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames ) { run<>( dst, src, frames, AddMultipliedOp(coeffSrc) ); } struct AddSanitizedMultipliedOp { AddSanitizedMultipliedOp( float coeff ) : m_coeff( coeff ) { } void operator()( sampleFrame& dst, const sampleFrame& src ) const { dst[0] += ( isinff( src[0] ) || isnanf( src[0] ) ) ? 0.0f : src[0] * m_coeff; dst[1] += ( isinff( src[1] ) || isnanf( src[1] ) ) ? 0.0f : src[1] * m_coeff; } const float m_coeff; }; void addSanitizedMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames ) { run<>( dst, src, frames, AddSanitizedMultipliedOp(coeffSrc) ); } struct AddMultipliedStereoOp { AddMultipliedStereoOp( float coeffLeft, float coeffRight ) { m_coeffs[0] = coeffLeft; m_coeffs[1] = coeffRight; } void operator()( sampleFrame& dst, const sampleFrame& src ) const { dst[0] += src[0] * m_coeffs[0]; dst[1] += src[1] * m_coeffs[1]; } float m_coeffs[2]; } ; void addMultipliedStereo( sampleFrame* dst, const sampleFrame* src, float coeffSrcLeft, float coeffSrcRight, int frames ) { run<>( dst, src, frames, AddMultipliedStereoOp(coeffSrcLeft, coeffSrcRight) ); } struct MultiplyAndAddMultipliedOp { MultiplyAndAddMultipliedOp( float coeffDst, float coeffSrc ) { m_coeffs[0] = coeffDst; m_coeffs[1] = coeffSrc; } void operator()( sampleFrame& dst, const sampleFrame& src ) const { dst[0] = dst[0]*m_coeffs[0] + src[0]*m_coeffs[1]; dst[1] = dst[1]*m_coeffs[0] + src[1]*m_coeffs[1]; } float m_coeffs[2]; } ; void multiplyAndAddMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffDst, float coeffSrc, int frames ) { run<>( dst, src, frames, MultiplyAndAddMultipliedOp(coeffDst, coeffSrc) ); } void multiplyAndAddMultipliedJoined( sampleFrame* dst, const sample_t* srcLeft, const sample_t* srcRight, float coeffDst, float coeffSrc, int frames ) { run<>( dst, srcLeft, srcRight, frames, MultiplyAndAddMultipliedOp(coeffDst, coeffSrc) ); } } lmms-1.1.3/src/core/Mixer.cpp000066400000000000000000000447561247673406200160260ustar00rootroot00000000000000/* * Mixer.cpp - audio-device-independent mixer for LMMS * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "Mixer.h" #include "FxMixer.h" #include "MixHelpers.h" #include "MixerWorkerThread.h" #include "song.h" #include "templates.h" #include "EnvelopeAndLfoParameters.h" #include "NotePlayHandle.h" #include "InstrumentTrack.h" #include "debug.h" #include "engine.h" #include "config_mgr.h" #include "SamplePlayHandle.h" #include "PianoRoll.h" #include "atomic_int.h" // platform-specific audio-interface-classes #include "AudioAlsa.h" #include "AudioJack.h" #include "AudioOss.h" #include "AudioPortAudio.h" #include "AudioPulseAudio.h" #include "AudioSdl.h" #include "AudioDummy.h" // platform-specific midi-interface-classes #include "MidiAlsaRaw.h" #include "MidiAlsaSeq.h" #include "MidiOss.h" #include "MidiWinMM.h" #include "MidiDummy.h" #include "MemoryHelper.h" Mixer::Mixer() : m_framesPerPeriod( DEFAULT_BUFFER_SIZE ), m_workingBuf( NULL ), m_inputBufferRead( 0 ), m_inputBufferWrite( 1 ), m_readBuf( NULL ), m_writeBuf( NULL ), m_workers(), m_numWorkers( QThread::idealThreadCount()-1 ), m_queueReadyWaitCond(), m_qualitySettings( qualitySettings::Mode_Draft ), m_masterGain( 1.0f ), m_audioDev( NULL ), m_oldAudioDev( NULL ), m_globalMutex( QMutex::Recursive ), m_profiler() { for( int i = 0; i < 2; ++i ) { m_inputBufferFrames[i] = 0; m_inputBufferSize[i] = DEFAULT_BUFFER_SIZE * 100; m_inputBuffer[i] = new sampleFrame[ DEFAULT_BUFFER_SIZE * 100 ]; clearAudioBuffer( m_inputBuffer[i], m_inputBufferSize[i] ); } // just rendering? if( !engine::hasGUI() ) { m_framesPerPeriod = DEFAULT_BUFFER_SIZE; m_fifo = new fifo( 1 ); } else if( configManager::inst()->value( "mixer", "framesperaudiobuffer" ).toInt() >= 32 ) { m_framesPerPeriod = (fpp_t) configManager::inst()->value( "mixer", "framesperaudiobuffer" ).toInt(); if( m_framesPerPeriod > DEFAULT_BUFFER_SIZE ) { m_fifo = new fifo( m_framesPerPeriod / DEFAULT_BUFFER_SIZE ); m_framesPerPeriod = DEFAULT_BUFFER_SIZE; } else { m_fifo = new fifo( 1 ); } } else { configManager::inst()->setValue( "mixer", "framesperaudiobuffer", QString::number( m_framesPerPeriod ) ); m_fifo = new fifo( 1 ); } m_workingBuf = (sampleFrame*) MemoryHelper::alignedMalloc( m_framesPerPeriod * sizeof( sampleFrame ) ); for( int i = 0; i < 3; i++ ) { m_readBuf = (surroundSampleFrame*) MemoryHelper::alignedMalloc( m_framesPerPeriod * sizeof( surroundSampleFrame ) ); clearAudioBuffer( m_readBuf, m_framesPerPeriod ); m_bufferPool.push_back( m_readBuf ); } for( int i = 0; i < m_numWorkers+1; ++i ) { MixerWorkerThread * wt = new MixerWorkerThread( this ); if( i < m_numWorkers ) { wt->start( QThread::TimeCriticalPriority ); } m_workers.push_back( wt ); } m_poolDepth = 2; m_readBuffer = 0; m_writeBuffer = 1; } Mixer::~Mixer() { for( int w = 0; w < m_numWorkers; ++w ) { m_workers[w]->quit(); } MixerWorkerThread::startAndWaitForJobs(); for( int w = 0; w < m_numWorkers; ++w ) { m_workers[w]->wait( 500 ); } while( m_fifo->available() ) { delete[] m_fifo->read(); } delete m_fifo; delete m_audioDev; delete m_midiClient; for( int i = 0; i < 3; i++ ) { MemoryHelper::alignedFree( m_bufferPool[i] ); } MemoryHelper::alignedFree( m_workingBuf ); for( int i = 0; i < 2; ++i ) { delete[] m_inputBuffer[i]; } } void Mixer::initDevices() { m_audioDev = tryAudioDevices(); m_midiClient = tryMidiClients(); } void Mixer::startProcessing( bool _needs_fifo ) { if( _needs_fifo ) { m_fifoWriter = new fifoWriter( this, m_fifo ); m_fifoWriter->start( QThread::HighPriority ); } else { m_fifoWriter = NULL; } m_audioDev->startProcessing(); } void Mixer::stopProcessing() { if( m_fifoWriter != NULL ) { m_fifoWriter->finish(); m_audioDev->stopProcessing(); m_fifoWriter->wait( 1000 ); m_fifoWriter->terminate(); delete m_fifoWriter; m_fifoWriter = NULL; } else { m_audioDev->stopProcessing(); } } sample_rate_t Mixer::baseSampleRate() const { sample_rate_t sr = configManager::inst()->value( "mixer", "samplerate" ).toInt(); if( sr < 44100 ) { sr = 44100; } return sr; } sample_rate_t Mixer::outputSampleRate() const { return m_audioDev != NULL ? m_audioDev->sampleRate() : baseSampleRate(); } sample_rate_t Mixer::inputSampleRate() const { return m_audioDev != NULL ? m_audioDev->sampleRate() : baseSampleRate(); } sample_rate_t Mixer::processingSampleRate() const { return outputSampleRate() * m_qualitySettings.sampleRateMultiplier(); } bool Mixer::criticalXRuns() const { return cpuLoad() >= 99 && engine::getSong()->isExporting() == false; } void Mixer::pushInputFrames( sampleFrame * _ab, const f_cnt_t _frames ) { lockInputFrames(); f_cnt_t frames = m_inputBufferFrames[ m_inputBufferWrite ]; int size = m_inputBufferSize[ m_inputBufferWrite ]; sampleFrame * buf = m_inputBuffer[ m_inputBufferWrite ]; if( frames + _frames > size ) { size = qMax( size * 2, frames + _frames ); sampleFrame * ab = new sampleFrame[ size ]; memcpy( ab, buf, frames * sizeof( sampleFrame ) ); delete [] buf; m_inputBufferSize[ m_inputBufferWrite ] = size; m_inputBuffer[ m_inputBufferWrite ] = ab; buf = ab; } memcpy( &buf[ frames ], _ab, _frames * sizeof( sampleFrame ) ); m_inputBufferFrames[ m_inputBufferWrite ] += _frames; unlockInputFrames(); } const surroundSampleFrame * Mixer::renderNextBuffer() { m_profiler.startPeriod(); static song::playPos last_metro_pos = -1; song::playPos p = engine::getSong()->getPlayPos( song::Mode_PlayPattern ); if( engine::getSong()->playMode() == song::Mode_PlayPattern && engine::pianoRoll()->isRecording() == true && p != last_metro_pos && p.getTicks() % (DefaultTicksPerTact / 4 ) == 0 ) { addPlayHandle( new SamplePlayHandle( "misc/metronome01.ogg" ) ); last_metro_pos = p; } lockInputFrames(); // swap buffer m_inputBufferWrite = ( m_inputBufferWrite + 1 ) % 2; m_inputBufferRead = ( m_inputBufferRead + 1 ) % 2; // clear new write buffer m_inputBufferFrames[ m_inputBufferWrite ] = 0; unlockInputFrames(); // now we have to make sure no other thread does anything bad // while we're acting... lock(); // remove all play-handles that have to be deleted and delete // them if they still exist... // maybe this algorithm could be optimized... ConstPlayHandleList::Iterator it_rem = m_playHandlesToRemove.begin(); while( it_rem != m_playHandlesToRemove.end() ) { PlayHandleList::Iterator it = qFind( m_playHandles.begin(), m_playHandles.end(), *it_rem ); if( it != m_playHandles.end() ) { delete *it; m_playHandles.erase( it ); } it_rem = m_playHandlesToRemove.erase( it_rem ); } // rotate buffers m_writeBuffer = ( m_writeBuffer + 1 ) % m_poolDepth; m_readBuffer = ( m_readBuffer + 1 ) % m_poolDepth; m_writeBuf = m_bufferPool[m_writeBuffer]; m_readBuf = m_bufferPool[m_readBuffer]; // clear last audio-buffer clearAudioBuffer( m_writeBuf, m_framesPerPeriod ); // prepare master mix (clear internal buffers etc.) engine::fxMixer()->prepareMasterMix(); // create play-handles for new notes, samples etc. engine::getSong()->processNextBuffer(); // STAGE 1: run and render all play handles MixerWorkerThread::fillJobQueue( m_playHandles ); MixerWorkerThread::startAndWaitForJobs(); // removed all play handles which are done for( PlayHandleList::Iterator it = m_playHandles.begin(); it != m_playHandles.end(); ) { if( ( *it )->affinityMatters() && ( *it )->affinity() != QThread::currentThread() ) { ++it; continue; } if( ( *it )->isFinished() ) { delete *it; it = m_playHandles.erase( it ); } else { ++it; } } // STAGE 2: process effects of all instrument- and sampletracks MixerWorkerThread::fillJobQueue >( m_audioPorts ); MixerWorkerThread::startAndWaitForJobs(); // STAGE 3: do master mix in FX mixer engine::fxMixer()->masterMix( m_writeBuf ); unlock(); emit nextAudioBuffer(); // and trigger LFOs EnvelopeAndLfoParameters::instances()->trigger(); Controller::triggerFrameCounter(); m_profiler.finishPeriod( processingSampleRate(), m_framesPerPeriod ); return m_readBuf; } // removes all play-handles. this is necessary, when the song is stopped -> // all remaining notes etc. would be played until their end void Mixer::clear() { // TODO: m_midiClient->noteOffAll(); lock(); for( PlayHandleList::Iterator it = m_playHandles.begin(); it != m_playHandles.end(); ++it ) { // we must not delete instrument-play-handles as they exist // during the whole lifetime of an instrument if( ( *it )->type() != PlayHandle::TypeInstrumentPlayHandle ) { m_playHandlesToRemove.push_back( *it ); } } unlock(); } void Mixer::bufferToPort( const sampleFrame * _buf, const fpp_t _frames, const f_cnt_t _offset, stereoVolumeVector _vv, AudioPort * _port ) { const int start_frame = _offset % m_framesPerPeriod; int end_frame = start_frame + _frames; const int loop1_frame = qMin( end_frame, m_framesPerPeriod ); _port->lockFirstBuffer(); MixHelpers::addMultipliedStereo( _port->firstBuffer()+start_frame, // dst _buf, // src _vv.vol[0], _vv.vol[1], // coeff left/right loop1_frame - start_frame ); // frame count _port->unlockFirstBuffer(); _port->lockSecondBuffer(); if( end_frame > m_framesPerPeriod ) { const int frames_done = m_framesPerPeriod - start_frame; end_frame -= m_framesPerPeriod; end_frame = qMin( end_frame, m_framesPerPeriod ); MixHelpers::addMultipliedStereo( _port->secondBuffer(), // dst _buf+frames_done, // src _vv.vol[0], _vv.vol[1], // coeff left/right end_frame ); // frame count // we used both buffers so set flags _port->m_bufferUsage = AudioPort::BothBuffers; } else if( _port->m_bufferUsage == AudioPort::NoUsage ) { // only first buffer touched _port->m_bufferUsage = AudioPort::FirstBuffer; } _port->unlockSecondBuffer(); } void Mixer::clearAudioBuffer( sampleFrame * _ab, const f_cnt_t _frames, const f_cnt_t _offset ) { memset( _ab+_offset, 0, sizeof( *_ab ) * _frames ); } #ifndef LMMS_DISABLE_SURROUND void Mixer::clearAudioBuffer( surroundSampleFrame * _ab, const f_cnt_t _frames, const f_cnt_t _offset ) { memset( _ab+_offset, 0, sizeof( *_ab ) * _frames ); } #endif float Mixer::peakValueLeft( sampleFrame * _ab, const f_cnt_t _frames ) { float p = 0.0f; for( f_cnt_t f = 0; f < _frames; ++f ) { p = qMax( p, qAbs( _ab[f][0] ) ); } return p; } float Mixer::peakValueRight( sampleFrame * _ab, const f_cnt_t _frames ) { float p = 0.0f; for( f_cnt_t f = 0; f < _frames; ++f ) { p = qMax( p, qAbs( _ab[f][1] ) ); } return p; } void Mixer::changeQuality( const struct qualitySettings & _qs ) { // don't delete the audio-device stopProcessing(); m_qualitySettings = _qs; m_audioDev->applyQualitySettings(); emit sampleRateChanged(); emit qualitySettingsChanged(); startProcessing(); } void Mixer::setAudioDevice( AudioDevice * _dev ) { stopProcessing(); m_oldAudioDev = m_audioDev; if( _dev == NULL ) { printf( "param _dev == NULL in Mixer::setAudioDevice(...). " "Trying any working audio-device\n" ); m_audioDev = tryAudioDevices(); } else { m_audioDev = _dev; } emit sampleRateChanged(); startProcessing(); } void Mixer::setAudioDevice( AudioDevice * _dev, const struct qualitySettings & _qs, bool _needs_fifo ) { // don't delete the audio-device stopProcessing(); m_qualitySettings = _qs; m_oldAudioDev = m_audioDev; if( _dev == NULL ) { printf( "param _dev == NULL in Mixer::setAudioDevice(...). " "Trying any working audio-device\n" ); m_audioDev = tryAudioDevices(); } else { m_audioDev = _dev; } emit qualitySettingsChanged(); emit sampleRateChanged(); startProcessing( _needs_fifo ); } void Mixer::restoreAudioDevice() { if( m_oldAudioDev != NULL ) { stopProcessing(); delete m_audioDev; m_audioDev = m_oldAudioDev; emit sampleRateChanged(); m_oldAudioDev = NULL; startProcessing(); } } void Mixer::removeAudioPort( AudioPort * _port ) { QVector::Iterator it = qFind( m_audioPorts.begin(), m_audioPorts.end(), _port ); if( it != m_audioPorts.end() ) { lock(); m_audioPorts.erase( it ); unlock(); } } void Mixer::removePlayHandle( PlayHandle * _ph ) { lock(); // check thread affinity as we must not delete play-handles // which were created in a thread different than mixer thread if( _ph->affinityMatters() && _ph->affinity() == QThread::currentThread() ) { PlayHandleList::Iterator it = qFind( m_playHandles.begin(), m_playHandles.end(), _ph ); if( it != m_playHandles.end() ) { m_playHandles.erase( it ); delete _ph; } } else { m_playHandlesToRemove.push_back( _ph ); } unlock(); } void Mixer::removePlayHandles( track * _track, bool removeIPHs ) { lock(); PlayHandleList::Iterator it = m_playHandles.begin(); while( it != m_playHandles.end() ) { if( ( *it )->isFromTrack( _track ) && ( removeIPHs || ( *it )->type() != PlayHandle::TypeInstrumentPlayHandle ) ) { delete *it; it = m_playHandles.erase( it ); } else { ++it; } } unlock(); } bool Mixer::hasNotePlayHandles() { lock(); for( PlayHandleList::Iterator it = m_playHandles.begin(); it != m_playHandles.end(); ++it ) { if( (*it)->type() == PlayHandle::TypeNotePlayHandle ) { unlock(); return true; } } unlock(); return false; } AudioDevice * Mixer::tryAudioDevices() { bool success_ful = false; AudioDevice * dev = NULL; QString dev_name = configManager::inst()->value( "mixer", "audiodev" ); if( dev_name == AudioDummy::name() ) { dev_name = ""; } #ifdef LMMS_HAVE_ALSA if( dev_name == AudioAlsa::name() || dev_name == "" ) { dev = new AudioAlsa( success_ful, this ); if( success_ful ) { m_audioDevName = AudioAlsa::name(); return dev; } delete dev; } #endif #ifdef LMMS_HAVE_PULSEAUDIO if( dev_name == AudioPulseAudio::name() || dev_name == "" ) { dev = new AudioPulseAudio( success_ful, this ); if( success_ful ) { m_audioDevName = AudioPulseAudio::name(); return dev; } delete dev; } #endif #ifdef LMMS_HAVE_OSS if( dev_name == AudioOss::name() || dev_name == "" ) { dev = new AudioOss( success_ful, this ); if( success_ful ) { m_audioDevName = AudioOss::name(); return dev; } delete dev; } #endif #ifdef LMMS_HAVE_JACK if( dev_name == AudioJack::name() || dev_name == "" ) { dev = new AudioJack( success_ful, this ); if( success_ful ) { m_audioDevName = AudioJack::name(); return dev; } delete dev; } #endif #ifdef LMMS_HAVE_SDL if( dev_name == AudioSdl::name() || dev_name == "" ) { dev = new AudioSdl( success_ful, this ); if( success_ful ) { m_audioDevName = AudioSdl::name(); return dev; } delete dev; } #endif #ifdef LMMS_HAVE_PORTAUDIO if( dev_name == AudioPortAudio::name() || dev_name == "" ) { dev = new AudioPortAudio( success_ful, this ); if( success_ful ) { m_audioDevName = AudioPortAudio::name(); return dev; } delete dev; } #endif // add more device-classes here... //dev = new audioXXXX( SAMPLE_RATES[m_qualityLevel], success_ful, this ); //if( sucess_ful ) //{ // return dev; //} //delete dev printf( "No audio-driver working - falling back to dummy-audio-" "driver\nYou can render your songs and listen to the output " "files...\n" ); m_audioDevName = AudioDummy::name(); return new AudioDummy( success_ful, this ); } MidiClient * Mixer::tryMidiClients() { QString client_name = configManager::inst()->value( "mixer", "mididev" ); #ifdef LMMS_HAVE_ALSA if( client_name == MidiAlsaSeq::name() || client_name == "" ) { MidiAlsaSeq * malsas = new MidiAlsaSeq; if( malsas->isRunning() ) { m_midiClientName = MidiAlsaSeq::name(); return malsas; } delete malsas; } if( client_name == MidiAlsaRaw::name() || client_name == "" ) { MidiAlsaRaw * malsar = new MidiAlsaRaw; if( malsar->isRunning() ) { m_midiClientName = MidiAlsaRaw::name(); return malsar; } delete malsar; } #endif #ifdef LMMS_HAVE_OSS if( client_name == MidiOss::name() || client_name == "" ) { MidiOss * moss = new MidiOss; if( moss->isRunning() ) { m_midiClientName = MidiOss::name(); return moss; } delete moss; } #endif #ifdef LMMS_BUILD_WIN32 if( client_name == MidiWinMM::name() || client_name == "" ) { MidiWinMM * mwmm = new MidiWinMM; // if( moss->isRunning() ) { m_midiClientName = MidiWinMM::name(); return mwmm; } delete mwmm; } #endif printf( "Couldn't create MIDI-client, neither with ALSA nor with " "OSS. Will use dummy-MIDI-client.\n" ); m_midiClientName = MidiDummy::name(); return new MidiDummy; } Mixer::fifoWriter::fifoWriter( Mixer* mixer, fifo * _fifo ) : m_mixer( mixer ), m_fifo( _fifo ), m_writing( true ) { } void Mixer::fifoWriter::finish() { m_writing = false; } void Mixer::fifoWriter::run() { // set denormal protection for this thread #ifdef __SSE3__ /* DAZ flag */ _MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON ); #endif #ifdef __SSE__ /* FTZ flag */ _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON ); #endif #if 0 #ifdef LMMS_BUILD_LINUX #ifdef LMMS_HAVE_SCHED_H cpu_set_t mask; CPU_ZERO( &mask ); CPU_SET( 0, &mask ); sched_setaffinity( 0, sizeof( mask ), &mask ); #endif #endif #endif const fpp_t frames = m_mixer->framesPerPeriod(); while( m_writing ) { surroundSampleFrame * buffer = new surroundSampleFrame[frames]; const surroundSampleFrame * b = m_mixer->renderNextBuffer(); memcpy( buffer, b, frames * sizeof( surroundSampleFrame ) ); m_fifo->write( buffer ); } m_fifo->write( NULL ); } #include "moc_Mixer.cxx" lmms-1.1.3/src/core/MixerProfiler.cpp000066400000000000000000000032421247673406200175120ustar00rootroot00000000000000/* * MixerProfiler.cpp - class for profiling performance of Mixer * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "MixerProfiler.h" MixerProfiler::MixerProfiler() : m_periodTimer(), m_cpuLoad( 0 ), m_outputFile() { } MixerProfiler::~MixerProfiler() { } void MixerProfiler::finishPeriod( sample_rate_t sampleRate, fpp_t framesPerPeriod ) { int periodElapsed = m_periodTimer.elapsed(); const float newCpuLoad = periodElapsed / 10000.0f * sampleRate / framesPerPeriod; m_cpuLoad = qBound( 0, ( newCpuLoad * 0.1f + m_cpuLoad * 0.9f ), 100 ); if( m_outputFile.isOpen() ) { m_outputFile.write( QString( "%1\n" ).arg( periodElapsed ).toLatin1() ); } } void MixerProfiler::setOutputFile( const QString& outputFile ) { m_outputFile.close(); m_outputFile.setFileName( outputFile ); m_outputFile.open( QFile::WriteOnly | QFile::Truncate ); } lmms-1.1.3/src/core/MixerWorkerThread.cpp000066400000000000000000000074041247673406200203350ustar00rootroot00000000000000/* * MixerWorkerThread.cpp - implementation of MixerWorkerThread * * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "MixerWorkerThread.h" #include "engine.h" MixerWorkerThread::JobQueue MixerWorkerThread::globalJobQueue; QWaitCondition * MixerWorkerThread::queueReadyWaitCond = NULL; QList MixerWorkerThread::workerThreads; // implementation of internal JobQueue void MixerWorkerThread::JobQueue::reset( OperationMode _opMode ) { m_queueSize = 0; m_itemsDone = 0; m_opMode = _opMode; } void MixerWorkerThread::JobQueue::addJob( ThreadableJob * _job ) { if( _job->requiresProcessing() ) { // update job state _job->queue(); // actually queue the job via atomic operations m_items[m_queueSize.fetchAndAddOrdered(1)] = _job; } } void MixerWorkerThread::JobQueue::run( sampleFrame * _buffer ) { bool processedJob = true; while( processedJob && (int) m_itemsDone < (int) m_queueSize ) { processedJob = false; for( int i = 0; i < m_queueSize; ++i ) { ThreadableJob * job = m_items[i].fetchAndStoreOrdered( NULL ); if( job ) { job->process( _buffer ); processedJob = true; m_itemsDone.fetchAndAddOrdered( 1 ); } } // always exit loop if we're not in dynamic mode processedJob = processedJob && ( m_opMode == Dynamic ); } } void MixerWorkerThread::JobQueue::wait() { while( (int) m_itemsDone < (int) m_queueSize ) { #if defined(LMMS_HOST_X86) || defined(LMMS_HOST_X86_64) asm( "pause" ); #endif } } // implementation of worker threads MixerWorkerThread::MixerWorkerThread( Mixer* mixer ) : QThread( mixer ), m_workingBuf( new sampleFrame[mixer->framesPerPeriod()] ), m_quit( false ) { // initialize global static data if( queueReadyWaitCond == NULL ) { queueReadyWaitCond = new QWaitCondition; } // keep track of all instantiated worker threads - this is used for // processing the last worker thread "inline", see comments in // MixerWorkerThread::startAndWaitForJobs() for details workerThreads << this; resetJobQueue(); } MixerWorkerThread::~MixerWorkerThread() { delete[] m_workingBuf; workerThreads.removeAll( this ); } void MixerWorkerThread::quit() { m_quit = true; resetJobQueue(); } void MixerWorkerThread::startAndWaitForJobs() { queueReadyWaitCond->wakeAll(); // The last worker-thread is never started. Instead it's processed "inline" // i.e. within the global Mixer thread. This way we can reduce latencies // that otherwise would be caused by synchronizing with another thread. globalJobQueue.run( workerThreads.last()->m_workingBuf ); globalJobQueue.wait(); } void MixerWorkerThread::run() { // set denormal protection for this thread #ifdef __SSE3__ /* DAZ flag */ _MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON ); #endif #ifdef __SSE__ /* FTZ flag */ _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON ); #endif QMutex m; while( m_quit == false ) { m.lock(); queueReadyWaitCond->wait( &m ); globalJobQueue.run( m_workingBuf ); m.unlock(); } } lmms-1.1.3/src/core/Model.cpp000066400000000000000000000024061247673406200157640ustar00rootroot00000000000000/* * Model.cpp - implementation of Model base class * * Copyright (c) 2007-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Model.h" QString Model::fullDisplayName() const { const QString & n = displayName(); if( parentModel() ) { const QString p = parentModel()->fullDisplayName(); if( n.isEmpty() && p.isEmpty() ) { return QString::null; } else if( p.isEmpty() ) { return n; } return p + ">" + n; } return n; } #include "moc_Model.cxx" lmms-1.1.3/src/core/NotePlayHandle.cpp000066400000000000000000000324141247673406200175750ustar00rootroot00000000000000/* * NotePlayHandle.cpp - implementation of class NotePlayHandle which manages * playback of a single note by an instrument * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "NotePlayHandle.h" #include "basic_filters.h" #include "config_mgr.h" #include "DetuningHelper.h" #include "InstrumentSoundShaping.h" #include "InstrumentTrack.h" #include "MidiEvent.h" #include "MidiPort.h" #include "song.h" NotePlayHandle::BaseDetuning::BaseDetuning( DetuningHelper *detuning ) : m_value( detuning ? detuning->automationPattern()->valueAt( 0 ) : 0 ) { } NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack, const f_cnt_t _offset, const f_cnt_t _frames, const note& n, NotePlayHandle *parent, int midiEventChannel, Origin origin ) : PlayHandle( TypeNotePlayHandle, _offset ), note( n.length(), n.pos(), n.key(), n.getVolume(), n.getPanning(), n.detuning() ), m_pluginData( NULL ), m_filter( NULL ), m_instrumentTrack( instrumentTrack ), m_frames( 0 ), m_totalFramesPlayed( 0 ), m_framesBeforeRelease( 0 ), m_releaseFramesToDo( 0 ), m_releaseFramesDone( 0 ), m_scheduledNoteOff( -1 ), m_released( false ), m_hasParent( parent != NULL ), m_hadChildren( false ), m_muted( false ), m_bbTrack( NULL ), m_origTempo( engine::getSong()->getTempo() ), m_origBaseNote( instrumentTrack->baseNote() ), m_frequency( 0 ), m_unpitchedFrequency( 0 ), m_baseDetuning( NULL ), m_songGlobalParentOffset( 0 ), m_midiChannel( midiEventChannel >= 0 ? midiEventChannel : instrumentTrack->midiPort()->realOutputChannel() ), m_origin( origin ) { if( hasParent() == false ) { m_baseDetuning = new BaseDetuning( detuning() ); m_instrumentTrack->m_processHandles.push_back( this ); } else { m_baseDetuning = parent->m_baseDetuning; parent->m_subNotes.push_back( this ); parent->m_hadChildren = true; m_bbTrack = parent->m_bbTrack; } updateFrequency(); setFrames( _frames ); // inform attached components about new MIDI note (used for recording in Piano Roll) if( m_origin == OriginMidiInput ) { m_instrumentTrack->midiNoteOn( *this ); } if( hasParent() || ! m_instrumentTrack->isArpeggioEnabled() ) { const int baseVelocity = m_instrumentTrack->midiPort()->baseVelocity(); // send MidiNoteOn event m_instrumentTrack->processOutEvent( MidiEvent( MidiNoteOn, midiChannel(), midiKey(), midiVelocity( baseVelocity ) ), MidiTime::fromFrames( offset(), engine::framesPerTick() ), offset() ); } } NotePlayHandle::~NotePlayHandle() { noteOff( 0 ); if( m_scheduledNoteOff >= 0 ) // ensure that scheduled noteoffs get triggered if somehow the nph got destructed prematurely { m_instrumentTrack->processOutEvent( MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ), MidiTime::fromFrames( m_scheduledNoteOff, engine::framesPerTick() ), m_scheduledNoteOff ); } if( hasParent() == false ) { delete m_baseDetuning; m_instrumentTrack->m_processHandles.removeAll( this ); } if( m_pluginData != NULL ) { m_instrumentTrack->deleteNotePluginData( this ); } if( m_instrumentTrack->m_notes[key()] == this ) { m_instrumentTrack->m_notes[key()] = NULL; } for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ++it ) { delete *it; } m_subNotes.clear(); delete m_filter; } void NotePlayHandle::setVolume( volume_t _volume ) { note::setVolume( _volume ); const int baseVelocity = m_instrumentTrack->midiPort()->baseVelocity(); m_instrumentTrack->processOutEvent( MidiEvent( MidiKeyPressure, midiChannel(), midiKey(), midiVelocity( baseVelocity ) ) ); } void NotePlayHandle::setPanning( panning_t panning ) { note::setPanning( panning ); MidiEvent event( MidiMetaEvent, midiChannel(), midiKey(), panningToMidi( panning ) ); event.setMetaEvent( MidiNotePanning ); m_instrumentTrack->processOutEvent( event ); } int NotePlayHandle::midiKey() const { return key() - m_origBaseNote + instrumentTrack()->baseNote(); } void NotePlayHandle::play( sampleFrame * _working_buffer ) { if( m_scheduledNoteOff >= 0 ) // always trigger scheduled noteoffs, because they're only scheduled if the note is released { if( m_scheduledNoteOff < engine::mixer()->framesPerPeriod() ) { m_instrumentTrack->processOutEvent( MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ), MidiTime::fromFrames( m_scheduledNoteOff, engine::framesPerTick() ), m_scheduledNoteOff ); m_scheduledNoteOff = -1; } else { m_scheduledNoteOff -= engine::mixer()->framesPerPeriod(); } } if( m_muted ) { return; } if( m_released == false && instrumentTrack()->isSustainPedalPressed() == false && m_totalFramesPlayed + engine::mixer()->framesPerPeriod() > m_frames ) { noteOff( m_frames - m_totalFramesPlayed ); } // under some circumstances we're called even if there's nothing to play // therefore do an additional check which fixes crash e.g. when // decreasing release of an instrument-track while the note is active if( framesLeft() > 0 ) { // play note! m_instrumentTrack->playNote( this, _working_buffer ); } if( m_released ) { f_cnt_t todo = engine::mixer()->framesPerPeriod(); // if this note is base-note for arpeggio, always set // m_releaseFramesToDo to bigger value than m_releaseFramesDone // because we do not allow NotePlayHandle::isFinished() to be true // until all sub-notes are completely played and no new ones // are inserted by arpAndChordsTabWidget::processNote() if( ! m_subNotes.isEmpty() ) { m_releaseFramesToDo = m_releaseFramesDone + 2 * engine::mixer()->framesPerPeriod(); } // look whether we have frames left to be done before release if( m_framesBeforeRelease ) { // yes, then look whether these samples can be played // within one audio-buffer if( m_framesBeforeRelease <= engine::mixer()->framesPerPeriod() ) { // yes, then we did less releaseFramesDone todo -= m_framesBeforeRelease; m_framesBeforeRelease = 0; } else { // no, then just decrease framesBeforeRelease // and wait for next loop... (we're not in // release-phase yet) todo = 0; m_framesBeforeRelease -= engine::mixer()->framesPerPeriod(); } } // look whether we're in release-phase if( todo && m_releaseFramesDone < m_releaseFramesToDo ) { // check whether we have to do more frames in current // loop than left in current loop if( m_releaseFramesToDo - m_releaseFramesDone >= todo ) { // yes, then increase number of release-frames // done m_releaseFramesDone += todo; } else { // no, we did all in this loop! m_releaseFramesDone = m_releaseFramesToDo; } } } // play sub-notes (e.g. chords) for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ) { ( *it )->play( _working_buffer ); if( ( *it )->isFinished() ) { delete *it; it = m_subNotes.erase( it ); } else { ++it; } } // update internal data m_totalFramesPlayed += engine::mixer()->framesPerPeriod(); } f_cnt_t NotePlayHandle::framesLeft() const { if( instrumentTrack()->isSustainPedalPressed() ) { return 4*engine::mixer()->framesPerPeriod(); } else if( m_released && actualReleaseFramesToDo() == 0 ) { return m_framesBeforeRelease; } else if( m_released ) { return m_framesBeforeRelease + m_releaseFramesToDo - m_releaseFramesDone; } return m_frames+actualReleaseFramesToDo()-m_totalFramesPlayed; } fpp_t NotePlayHandle::framesLeftForCurrentPeriod() const { return (fpp_t) qMin( framesLeft(), engine::mixer()->framesPerPeriod() ); } bool NotePlayHandle::isFromTrack( const track * _track ) const { return m_instrumentTrack == _track || m_bbTrack == _track; } void NotePlayHandle::noteOff( const f_cnt_t _s ) { if( m_released ) { return; } // first note-off all sub-notes for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ++it ) { ( *it )->noteOff( _s ); } // then set some variables indicating release-state m_framesBeforeRelease = _s; m_releaseFramesToDo = qMax( 0, actualReleaseFramesToDo() ); if( hasParent() || ! m_instrumentTrack->isArpeggioEnabled() ) { // send MidiNoteOff event f_cnt_t realOffset = offset() + _s; // get actual frameoffset of release, in global time if( realOffset < engine::mixer()->framesPerPeriod() ) // if release happens during this period, trigger midievent { m_instrumentTrack->processOutEvent( MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ), MidiTime::fromFrames( realOffset, engine::framesPerTick() ), realOffset ); } else // if release flows over to next period, use m_scheduledNoteOff to trigger it later { m_scheduledNoteOff = realOffset - engine::mixer()->framesPerPeriod(); } } // inform attached components about MIDI finished (used for recording in Piano Roll) if( m_origin == OriginMidiInput ) { setLength( MidiTime( static_cast( totalFramesPlayed() / engine::framesPerTick() ) ) ); m_instrumentTrack->midiNoteOff( *this ); } m_released = true; } f_cnt_t NotePlayHandle::actualReleaseFramesToDo() const { return m_instrumentTrack->m_soundShaping.releaseFrames(); } void NotePlayHandle::setFrames( const f_cnt_t _frames ) { m_frames = _frames; if( m_frames == 0 ) { m_frames = m_instrumentTrack->beatLen( this ); } m_origFrames = m_frames; } float NotePlayHandle::volumeLevel( const f_cnt_t _frame ) { return m_instrumentTrack->m_soundShaping.volumeLevel( this, _frame ); } void NotePlayHandle::mute() { // mute all sub-notes for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ++it ) { ( *it )->mute(); } m_muted = true; } int NotePlayHandle::index() const { const PlayHandleList & playHandles = engine::mixer()->playHandles(); int idx = 0; for( PlayHandleList::ConstIterator it = playHandles.begin(); it != playHandles.end(); ++it ) { const NotePlayHandle * nph = dynamic_cast( *it ); if( nph == NULL || nph->m_instrumentTrack != m_instrumentTrack || nph->isReleased() ) { continue; } if( nph == this ) { break; } ++idx; } return idx; } ConstNotePlayHandleList NotePlayHandle::nphsOfInstrumentTrack( const InstrumentTrack * _it, bool _all_ph ) { const PlayHandleList & playHandles = engine::mixer()->playHandles(); ConstNotePlayHandleList cnphv; for( PlayHandleList::ConstIterator it = playHandles.begin(); it != playHandles.end(); ++it ) { const NotePlayHandle * nph = dynamic_cast( *it ); if( nph != NULL && nph->m_instrumentTrack == _it && ( nph->isReleased() == false || _all_ph == true ) ) { cnphv.push_back( nph ); } } return cnphv; } bool NotePlayHandle::operator==( const NotePlayHandle & _nph ) const { return length() == _nph.length() && pos() == _nph.pos() && key() == _nph.key() && getVolume() == _nph.getVolume() && getPanning() == _nph.getPanning() && m_instrumentTrack == _nph.m_instrumentTrack && m_frames == _nph.m_frames && offset() == _nph.offset() && m_totalFramesPlayed == _nph.m_totalFramesPlayed && m_released == _nph.m_released && m_hasParent == _nph.m_hasParent && m_origBaseNote == _nph.m_origBaseNote && m_muted == _nph.m_muted && m_midiChannel == _nph.m_midiChannel && m_origin == _nph.m_origin; } void NotePlayHandle::updateFrequency() { const float pitch = ( key() - m_instrumentTrack->baseNoteModel()->value() + engine::getSong()->masterPitch() + m_baseDetuning->value() ) / 12.0f; m_frequency = BaseFreq * powf( 2.0f, pitch + m_instrumentTrack->pitchModel()->value() / ( 100 * 12.0f ) ); m_unpitchedFrequency = BaseFreq * powf( 2.0f, pitch ); for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ++it ) { ( *it )->updateFrequency(); } } void NotePlayHandle::processMidiTime( const MidiTime& time ) { if( detuning() && time >= songGlobalParentOffset()+pos() ) { const float v = detuning()->automationPattern()->valueAt( time - songGlobalParentOffset() - pos() ); if( !typeInfo::isEqual( v, m_baseDetuning->value() ) ) { m_baseDetuning->setValue( v ); updateFrequency(); } } } void NotePlayHandle::resize( const bpm_t _new_tempo ) { double completed = m_totalFramesPlayed / (double) m_frames; double new_frames = m_origFrames * m_origTempo / (double) _new_tempo; m_frames = (f_cnt_t)new_frames; m_totalFramesPlayed = (f_cnt_t)( completed * new_frames ); for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ++it ) { ( *it )->resize( _new_tempo ); } } lmms-1.1.3/src/core/Oscillator.cpp000066400000000000000000000272521247673406200170450ustar00rootroot00000000000000/* * Oscillator.cpp - implementation of powerful oscillator-class * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "Oscillator.h" #include "engine.h" #include "Mixer.h" #include "AutomatableModel.h" Oscillator::Oscillator( const IntModel * _wave_shape_model, const IntModel * _mod_algo_model, const float & _freq, const float & _detuning, const float & _phase_offset, const float & _volume, Oscillator * _sub_osc ) : m_waveShapeModel( _wave_shape_model ), m_modulationAlgoModel( _mod_algo_model ), m_freq( _freq ), m_detuning( _detuning ), m_volume( _volume ), m_ext_phaseOffset( _phase_offset ), m_subOsc( _sub_osc ), m_phaseOffset( _phase_offset ), m_phase( _phase_offset ), m_userWave( NULL ) { } void Oscillator::update( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { if( m_freq >= engine::mixer()->processingSampleRate() / 2 ) { Mixer::clearAudioBuffer( _ab, _frames ); return; } if( m_subOsc != NULL ) { switch( m_modulationAlgoModel->value() ) { case PhaseModulation: updatePM( _ab, _frames, _chnl ); break; case AmplitudeModulation: updateAM( _ab, _frames, _chnl ); break; case SignalMix: updateMix( _ab, _frames, _chnl ); break; case SynchronizedBySubOsc: updateSync( _ab, _frames, _chnl ); break; case FrequencyModulation: updateFM( _ab, _frames, _chnl ); } } else { updateNoSub( _ab, _frames, _chnl ); } } void Oscillator::updateNoSub( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { switch( m_waveShapeModel->value() ) { case SineWave: default: updateNoSub( _ab, _frames, _chnl ); break; case TriangleWave: updateNoSub( _ab, _frames, _chnl ); break; case SawWave: updateNoSub( _ab, _frames, _chnl ); break; case SquareWave: updateNoSub( _ab, _frames, _chnl ); break; case MoogSawWave: updateNoSub( _ab, _frames, _chnl ); break; case ExponentialWave: updateNoSub( _ab, _frames, _chnl ); break; case WhiteNoise: updateNoSub( _ab, _frames, _chnl ); break; case UserDefinedWave: updateNoSub( _ab, _frames, _chnl ); break; } } void Oscillator::updatePM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { switch( m_waveShapeModel->value() ) { case SineWave: default: updatePM( _ab, _frames, _chnl ); break; case TriangleWave: updatePM( _ab, _frames, _chnl ); break; case SawWave: updatePM( _ab, _frames, _chnl ); break; case SquareWave: updatePM( _ab, _frames, _chnl ); break; case MoogSawWave: updatePM( _ab, _frames, _chnl ); break; case ExponentialWave: updatePM( _ab, _frames, _chnl ); break; case WhiteNoise: updatePM( _ab, _frames, _chnl ); break; case UserDefinedWave: updatePM( _ab, _frames, _chnl ); break; } } void Oscillator::updateAM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { switch( m_waveShapeModel->value() ) { case SineWave: default: updateAM( _ab, _frames, _chnl ); break; case TriangleWave: updateAM( _ab, _frames, _chnl ); break; case SawWave: updateAM( _ab, _frames, _chnl ); break; case SquareWave: updateAM( _ab, _frames, _chnl ); break; case MoogSawWave: updateAM( _ab, _frames, _chnl ); break; case ExponentialWave: updateAM( _ab, _frames, _chnl ); break; case WhiteNoise: updateAM( _ab, _frames, _chnl ); break; case UserDefinedWave: updateAM( _ab, _frames, _chnl ); break; } } void Oscillator::updateMix( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { switch( m_waveShapeModel->value() ) { case SineWave: default: updateMix( _ab, _frames, _chnl ); break; case TriangleWave: updateMix( _ab, _frames, _chnl ); break; case SawWave: updateMix( _ab, _frames, _chnl ); break; case SquareWave: updateMix( _ab, _frames, _chnl ); break; case MoogSawWave: updateMix( _ab, _frames, _chnl ); break; case ExponentialWave: updateMix( _ab, _frames, _chnl ); break; case WhiteNoise: updateMix( _ab, _frames, _chnl ); break; case UserDefinedWave: updateMix( _ab, _frames, _chnl ); break; } } void Oscillator::updateSync( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { switch( m_waveShapeModel->value() ) { case SineWave: default: updateSync( _ab, _frames, _chnl ); break; case TriangleWave: updateSync( _ab, _frames, _chnl ); break; case SawWave: updateSync( _ab, _frames, _chnl ); break; case SquareWave: updateSync( _ab, _frames, _chnl ); break; case MoogSawWave: updateSync( _ab, _frames, _chnl ); break; case ExponentialWave: updateSync( _ab, _frames, _chnl ); break; case WhiteNoise: updateSync( _ab, _frames, _chnl ); break; case UserDefinedWave: updateSync( _ab, _frames, _chnl ); break; } } void Oscillator::updateFM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { switch( m_waveShapeModel->value() ) { case SineWave: default: updateFM( _ab, _frames, _chnl ); break; case TriangleWave: updateFM( _ab, _frames, _chnl ); break; case SawWave: updateFM( _ab, _frames, _chnl ); break; case SquareWave: updateFM( _ab, _frames, _chnl ); break; case MoogSawWave: updateFM( _ab, _frames, _chnl ); break; case ExponentialWave: updateFM( _ab, _frames, _chnl ); break; case WhiteNoise: updateFM( _ab, _frames, _chnl ); break; case UserDefinedWave: updateFM( _ab, _frames, _chnl ); break; } } // should be called every time phase-offset is changed... inline void Oscillator::recalcPhase() { if( !typeInfo::isEqual( m_phaseOffset, m_ext_phaseOffset ) ) { m_phase -= m_phaseOffset; m_phaseOffset = m_ext_phaseOffset; m_phase += m_phaseOffset; } m_phase = absFraction( m_phase )+2; // make sure we're not running // negative when doing PM } inline bool Oscillator::syncOk( float _osc_coeff ) { const float v1 = m_phase; m_phase += _osc_coeff; // check whether m_phase is in next period return( floorf( m_phase ) > floorf( v1 ) ); } float Oscillator::syncInit( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { if( m_subOsc != NULL ) { m_subOsc->update( _ab, _frames, _chnl ); } recalcPhase(); return( m_freq * m_detuning ); } // if we have no sub-osc, we can't do any modulation... just get our samples template void Oscillator::updateNoSub( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { recalcPhase(); const float osc_coeff = m_freq * m_detuning; for( fpp_t frame = 0; frame < _frames; ++frame ) { _ab[frame][_chnl] = getSample( m_phase ) * m_volume; m_phase += osc_coeff; } } // do pm by using sub-osc as modulator template void Oscillator::updatePM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { m_subOsc->update( _ab, _frames, _chnl ); recalcPhase(); const float osc_coeff = m_freq * m_detuning; for( fpp_t frame = 0; frame < _frames; ++frame ) { _ab[frame][_chnl] = getSample( m_phase + _ab[frame][_chnl] ) * m_volume; m_phase += osc_coeff; } } // do am by using sub-osc as modulator template void Oscillator::updateAM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { m_subOsc->update( _ab, _frames, _chnl ); recalcPhase(); const float osc_coeff = m_freq * m_detuning; for( fpp_t frame = 0; frame < _frames; ++frame ) { _ab[frame][_chnl] *= getSample( m_phase ) * m_volume; m_phase += osc_coeff; } } // do mix by using sub-osc as mix-sample template void Oscillator::updateMix( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { m_subOsc->update( _ab, _frames, _chnl ); recalcPhase(); const float osc_coeff = m_freq * m_detuning; for( fpp_t frame = 0; frame < _frames; ++frame ) { _ab[frame][_chnl] += getSample( m_phase ) * m_volume; m_phase += osc_coeff; } } // sync with sub-osc (every time sub-osc starts new period, we also start new // period) template void Oscillator::updateSync( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { const float sub_osc_coeff = m_subOsc->syncInit( _ab, _frames, _chnl ); recalcPhase(); const float osc_coeff = m_freq * m_detuning; for( fpp_t frame = 0; frame < _frames ; ++frame ) { if( m_subOsc->syncOk( sub_osc_coeff ) ) { m_phase = m_phaseOffset; } _ab[frame][_chnl] = getSample( m_phase ) * m_volume; m_phase += osc_coeff; } } // do fm by using sub-osc as modulator template void Oscillator::updateFM( sampleFrame * _ab, const fpp_t _frames, const ch_cnt_t _chnl ) { m_subOsc->update( _ab, _frames, _chnl ); recalcPhase(); const float osc_coeff = m_freq * m_detuning; const float sampleRateCorrection = 44100.0f / engine::mixer()->processingSampleRate(); for( fpp_t frame = 0; frame < _frames; ++frame ) { m_phase += _ab[frame][_chnl] * sampleRateCorrection; _ab[frame][_chnl] = getSample( m_phase ) * m_volume; m_phase += osc_coeff; } } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( sinSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( triangleSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( sawSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( squareSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( moogSawSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( expSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( noiseSample( _sample ) ); } template<> inline sample_t Oscillator::getSample( const float _sample ) { return( userWaveSample( _sample ) ); } lmms-1.1.3/src/core/PeakController.cpp000066400000000000000000000121601247673406200176460ustar00rootroot00000000000000/* * PeakController.cpp - implementation of class controller which handles * remote-control of AutomatableModels * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "song.h" #include "engine.h" #include "Mixer.h" #include "PeakController.h" #include "EffectChain.h" #include "ControllerDialog.h" #include "plugins/peak_controller_effect/peak_controller_effect.h" #include "PresetPreviewPlayHandle.h" PeakControllerEffectVector PeakController::s_effects; int PeakController::m_getCount; int PeakController::m_loadCount; bool PeakController::m_buggedFile; PeakController::PeakController( Model * _parent, PeakControllerEffect * _peak_effect ) : Controller( Controller::PeakController, _parent, tr( "Peak Controller" ) ), m_peakEffect( _peak_effect ) { if( m_peakEffect ) { connect( m_peakEffect, SIGNAL( destroyed( ) ), this, SLOT( handleDestroyedEffect( ) ) ); } } PeakController::~PeakController() { //EffectChain::loadSettings() appends effect to EffectChain::m_effects //When it's previewing, EffectChain::loadSettings() is not called //Therefore, we shouldn't call removeEffect() as it is not even appended. //NB: Most XML setting are loaded on preview, except controller fx. if( m_peakEffect != NULL && m_peakEffect->effectChain() != NULL && PresetPreviewPlayHandle::isPreviewing() == false ) { m_peakEffect->effectChain()->removeEffect( m_peakEffect ); } } float PeakController::value( int _offset ) { if( m_peakEffect ) { return m_peakEffect->lastSample(); } return( 0 ); } void PeakController::handleDestroyedEffect( ) { // possible race condition... //printf("disconnecting effect\n"); disconnect( m_peakEffect ); m_peakEffect = NULL; //deleteLater(); delete this; } void PeakController::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( m_peakEffect ) { Controller::saveSettings( _doc, _this ); _this.setAttribute( "effectId", m_peakEffect->m_effectId ); } } void PeakController::loadSettings( const QDomElement & _this ) { Controller::loadSettings( _this ); int effectId = _this.attribute( "effectId" ).toInt(); if( m_buggedFile == true ) { effectId = m_loadCount++; } PeakControllerEffectVector::Iterator i; for( i = s_effects.begin(); i != s_effects.end(); ++i ) { if( (*i)->m_effectId == effectId ) { m_peakEffect = *i; return; } } } //Backward compatibility function for bug in <= 0.4.15 void PeakController::initGetControllerBySetting() { m_loadCount = 0; m_getCount = 0; m_buggedFile = false; } PeakController * PeakController::getControllerBySetting(const QDomElement & _this ) { int effectId = _this.attribute( "effectId" ).toInt(); PeakControllerEffectVector::Iterator i; //Backward compatibility for bug in <= 0.4.15 . For >= 1.0.0 , //foundCount should always be 1 because m_effectId is initialized with rand() int foundCount = 0; if( m_buggedFile == false ) { for( i = s_effects.begin(); i != s_effects.end(); ++i ) { if( (*i)->m_effectId == effectId ) { foundCount++; } } if( foundCount >= 2 ) { m_buggedFile = true; int newEffectId = 0; for( i = s_effects.begin(); i != s_effects.end(); ++i ) { (*i)->m_effectId = newEffectId++; } QMessageBox msgBox; msgBox.setIcon( QMessageBox::Information ); msgBox.setWindowTitle( tr("Peak Controller Bug") ); msgBox.setText( tr("Due to a bug in older version of LMMS, the peak " "controllers may not be connect properly. " "Please ensure that peak controllers are connected " "properly and re-save this file. " "Sorry for any inconvenience caused.") ); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); } } if( m_buggedFile == true ) { effectId = m_getCount; } m_getCount++; //NB: m_getCount should be increased even m_buggedFile is false for( i = s_effects.begin(); i != s_effects.end(); ++i ) { if( (*i)->m_effectId == effectId ) { return (*i)->controller(); } } return NULL; } QString PeakController::nodeName() const { return( "Peakcontroller" ); } ControllerDialog * PeakController::createDialog( QWidget * _parent ) { return new PeakControllerDialog( this, _parent ); } #include "moc_PeakController.cxx" lmms-1.1.3/src/core/Piano.cpp000066400000000000000000000054331247673406200157750ustar00rootroot00000000000000/* * Piano.cpp - implementation of piano-widget used in instrument-track-window * for testing + according model class * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /** \file Piano.cpp * \brief A piano keyboard to play notes on in the instrument plugin window. */ /* * \mainpage Instrument plugin keyboard display classes * * \section introduction Introduction * * \todo fill this out * \todo write isWhite inline function and replace throughout */ #include "Piano.h" #include "InstrumentTrack.h" #include "MidiEvent.h" #include "MidiEventProcessor.h" /*! \brief Create a new keyboard display * * \param _it the InstrumentTrack window to attach to */ Piano::Piano( InstrumentTrack* track ) : Model( NULL ), /*!< base class ctor */ m_instrumentTrack( track ), m_midiEvProc( track ) /*!< the InstrumentTrack Model */ { for( int i = 0; i < NumKeys; ++i ) { m_pressedKeys[i] = false; } } /*! \brief Destroy this new keyboard display * */ Piano::~Piano() { } /*! \brief Turn a key on or off * * \param key the key number to change * \param state the state to set the key to */ void Piano::setKeyState( int key, bool state ) { if( isValidKey( key ) ) { m_pressedKeys[key] = state; emit dataChanged(); } } /*! \brief Handle a note being pressed on our keyboard display * * \param key the key being pressed */ void Piano::handleKeyPress( int key, int midiVelocity ) { if( midiVelocity == -1 ) { midiVelocity = m_instrumentTrack->midiPort()->baseVelocity(); } if( isValidKey( key ) ) { m_midiEvProc->processInEvent( MidiEvent( MidiNoteOn, -1, key, midiVelocity ) ); m_pressedKeys[key] = true; } } /*! \brief Handle a note being released on our keyboard display * * \param key the key being releassed */ void Piano::handleKeyRelease( int key ) { if( isValidKey( key ) ) { m_midiEvProc->processInEvent( MidiEvent( MidiNoteOff, -1, key, 0 ) ); m_pressedKeys[key] = false; } } #include "moc_Piano.cxx" lmms-1.1.3/src/core/Plugin.cpp000066400000000000000000000116071247673406200161650ustar00rootroot00000000000000/* * Plugin.cpp - implementation of plugin-class including plugin-loader * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "Plugin.h" #include "embed.h" #include "engine.h" #include "Mixer.h" #include "config_mgr.h" #include "DummyPlugin.h" #include "AutomatableModel.h" static PixmapLoader __dummy_loader; static Plugin::Descriptor dummy_plugin_descriptor = { "dummy", "dummy", QT_TRANSLATE_NOOP( "pluginBrowser", "no description" ), "Tobias Doerffel ", 0x0100, Plugin::Undefined, &__dummy_loader, NULL } ; Plugin::Plugin( const Descriptor * _descriptor, Model * parent ) : Model( parent ), JournallingObject(), m_descriptor( _descriptor ) { if( m_descriptor == NULL ) { m_descriptor = &dummy_plugin_descriptor; } } Plugin::~Plugin() { } void Plugin::loadFile( const QString & ) { } AutomatableModel * Plugin::childModel( const QString & ) { static FloatModel fm; return &fm; } Plugin * Plugin::instantiate( const QString & pluginName, Model * parent, void * data ) { QLibrary pluginLibrary( configManager::inst()->pluginDir() + pluginName ); if( pluginLibrary.load() == false ) { if( engine::hasGUI() ) { QMessageBox::information( NULL, tr( "Plugin not found" ), tr( "The plugin \"%1\" wasn't found or could not be loaded!\nReason: \"%2\"" ). arg( pluginName ).arg( pluginLibrary.errorString() ), QMessageBox::Ok | QMessageBox::Default ); } return new DummyPlugin(); } InstantiationHook instantiationHook = ( InstantiationHook ) pluginLibrary.resolve( "lmms_plugin_main" ); if( instantiationHook == NULL ) { if( engine::hasGUI() ) { QMessageBox::information( NULL, tr( "Error while loading plugin" ), tr( "Failed to load plugin \"%1\"!").arg( pluginName ), QMessageBox::Ok | QMessageBox::Default ); } return new DummyPlugin(); } Plugin * inst = instantiationHook( parent, data ); return inst; } void Plugin::getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors ) { QDir directory( configManager::inst()->pluginDir() ); #ifdef LMMS_BUILD_WIN32 QFileInfoList list = directory.entryInfoList( QStringList( "*.dll" ) ); #else QFileInfoList list = directory.entryInfoList( QStringList( "lib*.so" ) ); #endif foreach( const QFileInfo& f, list ) { QLibrary( f.absoluteFilePath() ).load(); } foreach( const QFileInfo& f, list ) { QLibrary pluginLibrary( f.absoluteFilePath() ); if( pluginLibrary.load() == false || pluginLibrary.resolve( "lmms_plugin_main" ) == NULL ) { continue; } QString descriptorName = f.baseName() + "_plugin_descriptor"; if( descriptorName.left( 3 ) == "lib" ) { descriptorName = descriptorName.mid( 3 ); } Descriptor* pluginDescriptor = (Descriptor *) pluginLibrary.resolve( descriptorName.toUtf8().constData() ); if( pluginDescriptor == NULL ) { qWarning() << tr( "LMMS plugin %1 does not have a plugin descriptor named %2!" ). arg( f.absoluteFilePath() ).arg( descriptorName ); continue; } pluginDescriptors += *pluginDescriptor; } } PluginView * Plugin::createView( QWidget * parent ) { PluginView * pv = instantiateView( parent ); if( pv != NULL ) { pv->setModel( this ); } return pv; } Plugin::Descriptor::SubPluginFeatures::Key::Key( const QDomElement & _key ) : desc( NULL ), name( _key.attribute( "key" ) ), attributes() { QDomNodeList l = _key.elementsByTagName( "attribute" ); for( int i = 0; !l.item( i ).isNull(); ++i ) { QDomElement e = l.item( i ).toElement(); attributes[e.attribute( "name" )] = e.attribute( "value" ); } } QDomElement Plugin::Descriptor::SubPluginFeatures::Key::saveXML( QDomDocument & _doc ) const { QDomElement e = _doc.createElement( "key" ); for( AttributeMap::ConstIterator it = attributes.begin(); it != attributes.end(); ++it ) { QDomElement a = _doc.createElement( "attribute" ); a.setAttribute( "name", it.key() ); a.setAttribute( "value", it.value() ); e.appendChild( a ); } return e; } #include "moc_Plugin.cxx" lmms-1.1.3/src/core/PresetPreviewPlayHandle.cpp000066400000000000000000000124561247673406200215000ustar00rootroot00000000000000/* * PresetPreviewPlayHandle.cpp - implementation of class PresetPreviewPlayHandle * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "PresetPreviewPlayHandle.h" #include "debug.h" #include "engine.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "MidiPort.h" #include "DataFile.h" #include "NotePlayHandle.h" #include "ProjectJournal.h" #include "TrackContainer.h" // invisible track-container which is needed as parent for preview-channels class PreviewTrackContainer : public TrackContainer { public: PreviewTrackContainer() : m_previewInstrumentTrack( NULL ), m_previewNote( NULL ), m_dataMutex() { setJournalling( FALSE ); m_previewInstrumentTrack = dynamic_cast( track::create( track::InstrumentTrack, this ) ); m_previewInstrumentTrack->setJournalling( FALSE ); } virtual ~PreviewTrackContainer() { } virtual QString nodeName() const { return "previewtrackcontainer"; } InstrumentTrack* previewInstrumentTrack() { return m_previewInstrumentTrack; } NotePlayHandle* previewNote() { return m_previewNote; } void setPreviewNote( NotePlayHandle * _note ) { m_previewNote = _note; } void lockData() { m_dataMutex.lock(); } void unlockData() { m_dataMutex.unlock(); } bool isPreviewing() { bool ret = !m_dataMutex.tryLock(); if( ret == false ) { m_dataMutex.unlock(); } return ret; } private: InstrumentTrack* m_previewInstrumentTrack; NotePlayHandle* m_previewNote; QMutex m_dataMutex; friend class PresetPreviewPlayHandle; } ; PreviewTrackContainer * PresetPreviewPlayHandle::s_previewTC; PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, bool _load_by_plugin ) : PlayHandle( TypePresetPreviewHandle ), m_previewNote( NULL ) { s_previewTC->lockData(); if( s_previewTC->previewNote() != NULL ) { s_previewTC->previewNote()->mute(); } const bool j = engine::projectJournal()->isJournalling(); engine::projectJournal()->setJournalling( FALSE ); engine::setSuppressMessages( true ); if( _load_by_plugin ) { Instrument * i = s_previewTC->previewInstrumentTrack()->instrument(); const QString ext = QFileInfo( _preset_file ). suffix().toLower(); if( i == NULL || !i->descriptor()->supportsFileType( ext ) ) { i = s_previewTC->previewInstrumentTrack()-> loadInstrument( engine::pluginFileHandling()[ext] ); } if( i != NULL ) { i->loadFile( _preset_file ); } } else { DataFile dataFile( _preset_file ); s_previewTC->previewInstrumentTrack()-> loadTrackSpecificSettings( dataFile.content().firstChild().toElement() ); } engine::setSuppressMessages( false ); // make sure, our preset-preview-track does not appear in any MIDI- // devices list, so just disable receiving/sending MIDI-events at all s_previewTC->previewInstrumentTrack()-> midiPort()->setMode( MidiPort::Disabled ); // create note-play-handle for it m_previewNote = new NotePlayHandle( s_previewTC->previewInstrumentTrack(), 0, typeInfo::max() / 2, note( 0, 0, DefaultKey, 100 ) ); s_previewTC->setPreviewNote( m_previewNote ); s_previewTC->unlockData(); engine::projectJournal()->setJournalling( j ); } PresetPreviewPlayHandle::~PresetPreviewPlayHandle() { s_previewTC->lockData(); // not muted by other preset-preview-handle? if( !m_previewNote->isMuted() ) { // then set according state s_previewTC->setPreviewNote( NULL ); } delete m_previewNote; s_previewTC->unlockData(); } void PresetPreviewPlayHandle::play( sampleFrame * _working_buffer ) { m_previewNote->play( _working_buffer ); } bool PresetPreviewPlayHandle::isFinished() const { return m_previewNote->isMuted(); } bool PresetPreviewPlayHandle::isFromTrack( const track * _track ) const { return s_previewTC->previewInstrumentTrack() == _track; } void PresetPreviewPlayHandle::init() { if( !s_previewTC ) { s_previewTC = new PreviewTrackContainer; } } void PresetPreviewPlayHandle::cleanup() { delete s_previewTC; s_previewTC = NULL; } ConstNotePlayHandleList PresetPreviewPlayHandle::nphsOfInstrumentTrack( const InstrumentTrack * _it ) { ConstNotePlayHandleList cnphv; s_previewTC->lockData(); if( s_previewTC->previewNote() != NULL && s_previewTC->previewNote()->instrumentTrack() == _it ) { cnphv.push_back( s_previewTC->previewNote() ); } s_previewTC->unlockData(); return cnphv; } bool PresetPreviewPlayHandle::isPreviewing() { return s_previewTC->isPreviewing(); } lmms-1.1.3/src/core/ProjectJournal.cpp000066400000000000000000000073351247673406200176730ustar00rootroot00000000000000/* * ProjectJournal.cpp - implementation of ProjectJournal * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "ProjectJournal.h" #include "engine.h" #include "JournallingObject.h" #include "song.h" const int ProjectJournal::MAX_UNDO_STATES = 100; // TODO: make this configurable in settings ProjectJournal::ProjectJournal() : m_joIDs(), m_undoCheckPoints(), m_redoCheckPoints(), m_journalling( false ) { } ProjectJournal::~ProjectJournal() { } void ProjectJournal::undo() { while( !m_undoCheckPoints.isEmpty() ) { CheckPoint c = m_undoCheckPoints.pop(); JournallingObject *jo = m_joIDs[c.joID]; if( jo ) { DataFile curState( DataFile::JournalData ); jo->saveState( curState, curState.content() ); m_redoCheckPoints.push( CheckPoint( c.joID, curState ) ); bool prev = isJournalling(); setJournalling( false ); jo->restoreState( c.data.content().firstChildElement() ); setJournalling( prev ); engine::getSong()->setModified(); break; } } } void ProjectJournal::redo() { while( !m_redoCheckPoints.isEmpty() ) { CheckPoint c = m_redoCheckPoints.pop(); JournallingObject *jo = m_joIDs[c.joID]; if( jo ) { DataFile curState( DataFile::JournalData ); jo->saveState( curState, curState.content() ); m_undoCheckPoints.push( CheckPoint( c.joID, curState ) ); bool prev = isJournalling(); setJournalling( false ); jo->restoreState( c.data.content().firstChildElement() ); setJournalling( prev ); engine::getSong()->setModified(); break; } } } void ProjectJournal::addJournalCheckPoint( JournallingObject *jo ) { if( isJournalling() ) { m_redoCheckPoints.clear(); DataFile dataFile( DataFile::JournalData ); jo->saveState( dataFile, dataFile.content() ); m_undoCheckPoints.push( CheckPoint( jo->id(), dataFile ) ); if( m_undoCheckPoints.size() > MAX_UNDO_STATES ) { m_undoCheckPoints.remove( 0, m_undoCheckPoints.size() - MAX_UNDO_STATES ); } } } jo_id_t ProjectJournal::allocID( JournallingObject * _obj ) { const jo_id_t EO_ID_MAX = (1 << 23)-1; jo_id_t id; while( m_joIDs.contains( id = static_cast( (jo_id_t)rand()*(jo_id_t)rand() % EO_ID_MAX ) ) ) { } m_joIDs[id] = _obj; //printf("new id: %d\n", id ); return id; } void ProjectJournal::reallocID( const jo_id_t _id, JournallingObject * _obj ) { //printf("realloc %d %d\n", _id, _obj ); // if( m_joIDs.contains( _id ) ) { m_joIDs[_id] = _obj; } } void ProjectJournal::clearJournal() { m_undoCheckPoints.clear(); m_redoCheckPoints.clear(); for( JoIdMap::Iterator it = m_joIDs.begin(); it != m_joIDs.end(); ) { if( it.value() == NULL ) { it = m_joIDs.erase( it ); } else { ++it; } } } void ProjectJournal::stopAllJournalling() { for( JoIdMap::Iterator it = m_joIDs.begin(); it != m_joIDs.end(); ++it) { if( it.value() != NULL ) { it.value()->setJournalling(false); } } setJournalling(false); } lmms-1.1.3/src/core/ProjectRenderer.cpp000066400000000000000000000116741247673406200200300ustar00rootroot00000000000000/* * ProjectRenderer.cpp - ProjectRenderer-class for easily rendering projects * * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "ProjectRenderer.h" #include "song.h" #include "engine.h" #include "AudioFileWave.h" #include "AudioFileOgg.h" #ifdef LMMS_HAVE_SCHED_H #include #endif #include FileEncodeDevice __fileEncodeDevices[] = { { ProjectRenderer::WaveFile, QT_TRANSLATE_NOOP( "ProjectRenderer", "WAV-File (*.wav)" ), ".wav", &AudioFileWave::getInst }, { ProjectRenderer::OggFile, QT_TRANSLATE_NOOP( "ProjectRenderer", "Compressed OGG-File (*.ogg)" ), ".ogg", #ifdef LMMS_HAVE_OGGVORBIS &AudioFileOgg::getInst #else NULL #endif }, // ... insert your own file-encoder-infos here... may be one day the // user can add own encoders inside the program... { ProjectRenderer::NumFileFormats, NULL, NULL, NULL } } ; ProjectRenderer::ProjectRenderer( const Mixer::qualitySettings & _qs, const OutputSettings & _os, ExportFileFormats _file_format, const QString & _out_file ) : QThread( engine::mixer() ), m_fileDev( NULL ), m_qualitySettings( _qs ), m_oldQualitySettings( engine::mixer()->currentQualitySettings() ), m_progress( 0 ), m_abort( false ) { if( __fileEncodeDevices[_file_format].m_getDevInst == NULL ) { return; } bool success_ful = false; m_fileDev = __fileEncodeDevices[_file_format].m_getDevInst( _os.samplerate, DEFAULT_CHANNELS, success_ful, _out_file, _os.vbr, _os.bitrate, _os.bitrate - 64, _os.bitrate + 64, _os.depth == Depth_32Bit ? 32 : 16, engine::mixer() ); if( success_ful == false ) { delete m_fileDev; m_fileDev = NULL; } } ProjectRenderer::~ProjectRenderer() { } // little help-function for getting file-format from a file-extension (only for // registered file-encoders) ProjectRenderer::ExportFileFormats ProjectRenderer::getFileFormatFromExtension( const QString & _ext ) { int idx = 0; while( __fileEncodeDevices[idx].m_fileFormat != NumFileFormats ) { if( QString( __fileEncodeDevices[idx].m_extension ) == _ext ) { return( __fileEncodeDevices[idx].m_fileFormat ); } ++idx; } return( WaveFile ); // default } void ProjectRenderer::startProcessing() { if( isReady() ) { // have to do mixer stuff with GUI-thread-affinity in order to // make slots connected to sampleRateChanged()-signals being // called immediately engine::mixer()->setAudioDevice( m_fileDev, m_qualitySettings, false ); start( #ifndef LMMS_BUILD_WIN32 QThread::HighPriority #endif ); } } void ProjectRenderer::run() { #if 0 #ifdef LMMS_BUILD_LINUX #ifdef LMMS_HAVE_SCHED_H cpu_set_t mask; CPU_ZERO( &mask ); CPU_SET( 0, &mask ); sched_setaffinity( 0, sizeof( mask ), &mask ); #endif #endif #endif engine::getSong()->startExport(); song::playPos & pp = engine::getSong()->getPlayPos( song::Mode_PlaySong ); m_progress = 0; const int sl = ( engine::getSong()->length() + 1 ) * 192; while( engine::getSong()->isExportDone() == false && engine::getSong()->isExporting() == true && !m_abort ) { m_fileDev->processNextBuffer(); const int nprog = pp * 100 / sl; if( m_progress != nprog ) { m_progress = nprog; emit progressChanged( m_progress ); } } engine::getSong()->stopExport(); const QString f = m_fileDev->outputFile(); engine::mixer()->restoreAudioDevice(); // also deletes audio-dev engine::mixer()->changeQuality( m_oldQualitySettings ); // if the user aborted export-process, the file has to be deleted if( m_abort ) { QFile( f ).remove(); } } void ProjectRenderer::abortProcessing() { m_abort = true; } void ProjectRenderer::updateConsoleProgress() { const int cols = 50; static int rot = 0; char buf[80]; char prog[cols+1]; for( int i = 0; i < cols; ++i ) { prog[i] = ( i*100/cols <= m_progress ? '-' : ' ' ); } prog[cols] = 0; const char * activity = (const char *) "|/-\\"; memset( buf, 0, sizeof( buf ) ); sprintf( buf, "\r|%s| %3d%% %c ", prog, m_progress, activity[rot] ); rot = ( rot+1 ) % 4; fprintf( stderr, "%s", buf ); fflush( stderr ); } #include "moc_ProjectRenderer.cxx" lmms-1.1.3/src/core/RemotePlugin.cpp000066400000000000000000000173251247673406200173440ustar00rootroot00000000000000/* * RemotePlugin.cpp - base class providing RPC like mechanisms * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #define COMPILE_REMOTE_PLUGIN_BASE //#define DEBUG_REMOTE_PLUGIN #ifdef DEBUG_REMOTE_PLUGIN #include #endif #include "RemotePlugin.h" #include "Mixer.h" #include "engine.h" #include "config_mgr.h" #include #ifdef LMMS_HAVE_UNISTD_H #include #endif // simple helper thread monitoring our RemotePlugin - if process terminates // unexpectedly invalidate plugin so LMMS doesn't lock up ProcessWatcher::ProcessWatcher( RemotePlugin * _p ) : QThread(), m_plugin( _p ), m_quit( false ) { } void ProcessWatcher::run() { while( !m_quit && m_plugin->isRunning() ) { msleep( 200 ); } if( !m_quit ) { fprintf( stderr, "remote plugin died! invalidating now.\n" ); m_plugin->invalidate(); } } RemotePlugin::RemotePlugin() : RemotePluginBase( new shmFifo(), new shmFifo() ), m_failed( true ), m_process(), m_watcher( this ), m_commMutex( QMutex::Recursive ), m_splitChannels( false ), #ifdef USE_QT_SHMEM m_shmObj(), #else m_shmID( 0 ), #endif m_shmSize( 0 ), m_shm( NULL ), m_inputCount( DEFAULT_CHANNELS ), m_outputCount( DEFAULT_CHANNELS ) { } RemotePlugin::~RemotePlugin() { m_watcher.quit(); m_watcher.wait(); if( m_failed == false ) { if( isRunning() ) { lock(); sendMessage( IdQuit ); m_process.waitForFinished( 1000 ); if( m_process.state() != QProcess::NotRunning ) { m_process.terminate(); m_process.kill(); } unlock(); } #ifndef USE_QT_SHMEM shmdt( m_shm ); shmctl( m_shmID, IPC_RMID, NULL ); #endif } } bool RemotePlugin::init( const QString &pluginExecutable, bool waitForInitDoneMsg ) { lock(); if( m_failed ) { reset( new shmFifo(), new shmFifo() ); m_failed = false; } QString exec = configManager::inst()->pluginDir() + QDir::separator() + pluginExecutable; QStringList args; // swap in and out for bidirectional communication args << QString::number( out()->shmKey() ); args << QString::number( in()->shmKey() ); #ifndef DEBUG_REMOTE_PLUGIN m_process.setProcessChannelMode( QProcess::ForwardedChannels ); m_process.setWorkingDirectory( QCoreApplication::applicationDirPath() ); m_process.start( exec, args ); m_watcher.start( QThread::LowestPriority ); #else qDebug() << exec << args; #endif resizeSharedProcessingMemory(); if( waitForInitDoneMsg ) { waitForInitDone(); } unlock(); return failed(); } bool RemotePlugin::process( const sampleFrame * _in_buf, sampleFrame * _out_buf ) { const fpp_t frames = engine::mixer()->framesPerPeriod(); if( m_failed || !isRunning() ) { if( _out_buf != NULL ) { engine::mixer()->clearAudioBuffer( _out_buf, frames ); } return false; } if( m_shm == NULL ) { // m_shm being zero means we didn't initialize everything so // far so process one message each time (and hope we get // information like SHM-key etc.) until we process messages // in a later stage of this procedure if( m_shmSize == 0 ) { lock(); fetchAndProcessAllMessages(); unlock(); } if( _out_buf != NULL ) { engine::mixer()->clearAudioBuffer( _out_buf, frames ); } return false; } memset( m_shm, 0, m_shmSize ); ch_cnt_t inputs = qMin( m_inputCount, DEFAULT_CHANNELS ); if( _in_buf != NULL && inputs > 0 ) { if( m_splitChannels ) { for( ch_cnt_t ch = 0; ch < inputs; ++ch ) { for( fpp_t frame = 0; frame < frames; ++frame ) { m_shm[ch * frames + frame] = _in_buf[frame][ch]; } } } else if( inputs == DEFAULT_CHANNELS ) { memcpy( m_shm, _in_buf, frames * BYTES_PER_FRAME ); } else { sampleFrame * o = (sampleFrame *) m_shm; for( ch_cnt_t ch = 0; ch < inputs; ++ch ) { for( fpp_t frame = 0; frame < frames; ++frame ) { o[frame][ch] = _in_buf[frame][ch]; } } } } lock(); sendMessage( IdStartProcessing ); if( m_failed || _out_buf == NULL || m_outputCount == 0 ) { unlock(); return false; } waitForMessage( IdProcessingDone ); unlock(); const ch_cnt_t outputs = qMin( m_outputCount, DEFAULT_CHANNELS ); if( m_splitChannels ) { for( ch_cnt_t ch = 0; ch < outputs; ++ch ) { for( fpp_t frame = 0; frame < frames; ++frame ) { _out_buf[frame][ch] = m_shm[( m_inputCount+ch )* frames + frame]; } } } else if( outputs == DEFAULT_CHANNELS ) { memcpy( _out_buf, m_shm + m_inputCount * frames, frames * BYTES_PER_FRAME ); } else { sampleFrame * o = (sampleFrame *) ( m_shm + m_inputCount*frames ); // clear buffer, if plugin didn't fill up both channels engine::mixer()->clearAudioBuffer( _out_buf, frames ); for( ch_cnt_t ch = 0; ch < qMin( DEFAULT_CHANNELS, outputs ); ++ch ) { for( fpp_t frame = 0; frame < frames; ++frame ) { _out_buf[frame][ch] = o[frame][ch]; } } } return true; } void RemotePlugin::processMidiEvent( const MidiEvent & _e, const f_cnt_t _offset ) { message m( IdMidiEvent ); m.addInt( _e.type() ); m.addInt( _e.channel() ); m.addInt( _e.param( 0 ) ); m.addInt( _e.param( 1 ) ); m.addInt( _offset ); lock(); sendMessage( m ); unlock(); } void RemotePlugin::resizeSharedProcessingMemory() { const size_t s = ( m_inputCount+m_outputCount ) * engine::mixer()->framesPerPeriod() * sizeof( float ); if( m_shm != NULL ) { #ifdef USE_QT_SHMEM m_shmObj.detach(); #else shmdt( m_shm ); shmctl( m_shmID, IPC_RMID, NULL ); #endif } static int shm_key = 0; #ifdef USE_QT_SHMEM do { m_shmObj.setKey( QString( "%1" ).arg( ++shm_key ) ); m_shmObj.create( s ); } while( m_shmObj.error() != QSharedMemory::NoError ); m_shm = (float *) m_shmObj.data(); #else while( ( m_shmID = shmget( ++shm_key, s, IPC_CREAT | IPC_EXCL | 0600 ) ) == -1 ) { } m_shm = (float *) shmat( m_shmID, 0, 0 ); #endif m_shmSize = s; sendMessage( message( IdChangeSharedMemoryKey ). addInt( shm_key ).addInt( m_shmSize ) ); } bool RemotePlugin::processMessage( const message & _m ) { lock(); message reply_message( _m.id ); bool reply = false; switch( _m.id ) { case IdUndefined: return false; case IdInitDone: reply = true; break; case IdSampleRateInformation: reply = true; reply_message.addInt( engine::mixer()->processingSampleRate() ); break; case IdBufferSizeInformation: reply = true; reply_message.addInt( engine::mixer()->framesPerPeriod() ); break; case IdChangeInputCount: m_inputCount = _m.getInt( 0 ); resizeSharedProcessingMemory(); break; case IdChangeOutputCount: m_outputCount = _m.getInt( 0 ); resizeSharedProcessingMemory(); break; case IdDebugMessage: fprintf( stderr, "RemotePlugin::DebugMessage: %s", _m.getString( 0 ).c_str() ); break; case IdProcessingDone: case IdQuit: default: break; } if( reply ) { sendMessage( reply_message ); } unlock(); return true; } #include "moc_RemotePlugin.cxx" lmms-1.1.3/src/core/SampleBuffer.cpp000066400000000000000000001003421247673406200172750ustar00rootroot00000000000000/* * SampleBuffer.cpp - container-class SampleBuffer * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "SampleBuffer.h" #include #include #include #include #include #include #include #define OV_EXCLUDE_STATIC_CALLBACKS #ifdef LMMS_HAVE_OGGVORBIS #include #endif #ifdef LMMS_HAVE_FLAC_STREAM_ENCODER_H #include #endif #ifdef LMMS_HAVE_FLAC_STREAM_DECODER_H #include #endif #include "base64.h" #include "config_mgr.h" #include "debug.h" #include "drumsynth.h" #include "endian_handling.h" #include "engine.h" #include "interpolation.h" #include "templates.h" #include "FileDialog.h" SampleBuffer::SampleBuffer( const QString & _audio_file, bool _is_base64_data ) : m_audioFile( ( _is_base64_data == true ) ? "" : _audio_file ), m_origData( NULL ), m_origFrames( 0 ), m_data( NULL ), m_frames( 0 ), m_startFrame( 0 ), m_endFrame( 0 ), m_loopStartFrame( 0 ), m_loopEndFrame( 0 ), m_amplification( 1.0f ), m_reversed( false ), m_frequency( BaseFreq ), m_sampleRate( engine::mixer()->baseSampleRate() ) { if( _is_base64_data == true ) { loadFromBase64( _audio_file ); } update(); } SampleBuffer::SampleBuffer( const sampleFrame * _data, const f_cnt_t _frames ) : m_audioFile( "" ), m_origData( NULL ), m_origFrames( 0 ), m_data( NULL ), m_frames( 0 ), m_startFrame( 0 ), m_endFrame( 0 ), m_loopStartFrame( 0 ), m_loopEndFrame( 0 ), m_amplification( 1.0f ), m_reversed( false ), m_frequency( BaseFreq ), m_sampleRate( engine::mixer()->baseSampleRate() ) { if( _frames > 0 ) { m_origData = new sampleFrame[_frames]; memcpy( m_origData, _data, _frames * BYTES_PER_FRAME ); m_origFrames = _frames; } update(); } SampleBuffer::SampleBuffer( const f_cnt_t _frames ) : m_audioFile( "" ), m_origData( NULL ), m_origFrames( 0 ), m_data( NULL ), m_frames( 0 ), m_startFrame( 0 ), m_endFrame( 0 ), m_loopStartFrame( 0 ), m_loopEndFrame( 0 ), m_amplification( 1.0f ), m_reversed( false ), m_frequency( BaseFreq ), m_sampleRate( engine::mixer()->baseSampleRate() ) { if( _frames > 0 ) { m_origData = new sampleFrame[_frames]; memset( m_origData, 0, _frames * BYTES_PER_FRAME ); m_origFrames = _frames; } update(); } SampleBuffer::~SampleBuffer() { delete[] m_origData; delete[] m_data; } void SampleBuffer::update( bool _keep_settings ) { const bool lock = ( m_data != NULL ); if( lock ) { engine::mixer()->lock(); delete[] m_data; } if( m_audioFile.isEmpty() && m_origData != NULL && m_origFrames > 0 ) { // TODO: reverse- and amplification-property is not covered // by following code... m_data = new sampleFrame[m_origFrames]; memcpy( m_data, m_origData, m_origFrames * BYTES_PER_FRAME ); if( _keep_settings == false ) { m_frames = m_origFrames; m_loopStartFrame = m_startFrame = 0; m_loopEndFrame = m_endFrame = m_frames; } } else if( !m_audioFile.isEmpty() ) { QString file = tryToMakeAbsolute( m_audioFile ); #ifdef LMMS_BUILD_WIN32 char * f = qstrdup( file.toLocal8Bit().constData() ); #else char * f = qstrdup( file.toUtf8().constData() ); #endif int_sample_t * buf = NULL; sample_t * fbuf = NULL; ch_cnt_t channels = DEFAULT_CHANNELS; sample_rate_t samplerate = engine::mixer()->baseSampleRate(); m_frames = 0; const QFileInfo fileInfo( file ); if( fileInfo.size() > 100*1024*1024 ) { qWarning( "refusing to load sample files bigger " "than 100 MB" ); } else { #ifdef LMMS_HAVE_OGGVORBIS // workaround for a bug in libsndfile or our libsndfile decoder // causing some OGG files to be distorted -> try with OGG Vorbis // decoder first if filename extension matches "ogg" if( m_frames == 0 && fileInfo.suffix() == "ogg" ) { m_frames = decodeSampleOGGVorbis( f, buf, channels, samplerate ); } #endif if( m_frames == 0 ) { m_frames = decodeSampleSF( f, fbuf, channels, samplerate ); } #ifdef LMMS_HAVE_OGGVORBIS if( m_frames == 0 ) { m_frames = decodeSampleOGGVorbis( f, buf, channels, samplerate ); } #endif if( m_frames == 0 ) { m_frames = decodeSampleDS( f, buf, channels, samplerate ); } delete[] f; if ( m_frames == 0 ) // if still no frames, bail { // sample couldn't be decoded, create buffer containing // one sample-frame m_data = new sampleFrame[1]; memset( m_data, 0, sizeof( *m_data ) ); m_frames = 1; m_loopStartFrame = m_startFrame = 0; m_loopEndFrame = m_endFrame = 1; } else // otherwise normalize sample rate { normalizeSampleRate( samplerate, _keep_settings ); } } } else { // neither an audio-file nor a buffer to copy from, so create // buffer containing one sample-frame m_data = new sampleFrame[1]; memset( m_data, 0, sizeof( *m_data ) ); m_frames = 1; m_loopStartFrame = m_startFrame = 0; m_loopEndFrame = m_endFrame = 1; } if( lock ) { engine::mixer()->unlock(); } emit sampleUpdated(); } void SampleBuffer::convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames, int _channels) { // following code transforms int-samples into // float-samples and does amplifying & reversing const float fac = 1 / OUTPUT_SAMPLE_MULTIPLIER; m_data = new sampleFrame[_frames]; const int ch = ( _channels > 1 ) ? 1 : 0; // if reversing is on, we also reverse when // scaling if( m_reversed ) { int idx = ( _frames - 1 ) * _channels; for( f_cnt_t frame = 0; frame < _frames; ++frame ) { m_data[frame][0] = _ibuf[idx+0] * fac; m_data[frame][1] = _ibuf[idx+ch] * fac; idx -= _channels; } } else { int idx = 0; for( f_cnt_t frame = 0; frame < _frames; ++frame ) { m_data[frame][0] = _ibuf[idx+0] * fac; m_data[frame][1] = _ibuf[idx+ch] * fac; idx += _channels; } } delete[] _ibuf; } void SampleBuffer::directFloatWrite ( sample_t * & _fbuf, f_cnt_t _frames, int _channels) { m_data = new sampleFrame[_frames]; const int ch = ( _channels > 1 ) ? 1 : 0; // if reversing is on, we also reverse when // scaling if( m_reversed ) { int idx = ( _frames - 1 ) * _channels; for( f_cnt_t frame = 0; frame < _frames; ++frame ) { m_data[frame][0] = _fbuf[idx+0]; m_data[frame][1] = _fbuf[idx+ch]; idx -= _channels; } } else { int idx = 0; for( f_cnt_t frame = 0; frame < _frames; ++frame ) { m_data[frame][0] = _fbuf[idx+0]; m_data[frame][1] = _fbuf[idx+ch]; idx += _channels; } } delete[] _fbuf; } void SampleBuffer::normalizeSampleRate( const sample_rate_t _src_sr, bool _keep_settings ) { // do samplerate-conversion to our default-samplerate if( _src_sr != engine::mixer()->baseSampleRate() ) { SampleBuffer * resampled = resample( this, _src_sr, engine::mixer()->baseSampleRate() ); delete[] m_data; m_frames = resampled->frames(); m_data = new sampleFrame[m_frames]; memcpy( m_data, resampled->data(), m_frames * sizeof( sampleFrame ) ); delete resampled; } if( _keep_settings == false ) { // update frame-variables m_loopStartFrame = m_startFrame = 0; m_loopEndFrame = m_endFrame = m_frames; } } f_cnt_t SampleBuffer::decodeSampleSF( const char * _f, sample_t * & _buf, ch_cnt_t & _channels, sample_rate_t & _samplerate ) { SNDFILE * snd_file; SF_INFO sf_info; f_cnt_t frames = 0; bool sf_rr = false; if( ( snd_file = sf_open( _f, SFM_READ, &sf_info ) ) != NULL ) { frames = sf_info.frames; _buf = new sample_t[sf_info.channels * frames]; sf_rr = sf_read_float( snd_file, _buf, sf_info.channels * frames ); if( sf_rr < sf_info.channels * frames ) { #ifdef DEBUG_LMMS qDebug( "SampleBuffer::decodeSampleSF(): could not read" " sample %s: %s", _f, sf_strerror( NULL ) ); #endif } _channels = sf_info.channels; _samplerate = sf_info.samplerate; sf_close( snd_file ); } else { #ifdef DEBUG_LMMS qDebug( "SampleBuffer::decodeSampleSF(): could not load " "sample %s: %s", _f, sf_strerror( NULL ) ); #endif } //write down either directly or convert i->f depending on file type if ( frames > 0 && _buf != NULL ) { directFloatWrite ( _buf, frames, _channels); } return frames; } #ifdef LMMS_HAVE_OGGVORBIS // callback-functions for reading ogg-file size_t qfileReadCallback( void * _ptr, size_t _size, size_t _n, void * _udata ) { return static_cast( _udata )->read( (char*) _ptr, _size * _n ); } int qfileSeekCallback( void * _udata, ogg_int64_t _offset, int _whence ) { QFile * f = static_cast( _udata ); if( _whence == SEEK_CUR ) { f->seek( f->pos() + _offset ); } else if( _whence == SEEK_END ) { f->seek( f->size() + _offset ); } else { f->seek( _offset ); } return 0; } int qfileCloseCallback( void * _udata ) { delete static_cast( _udata ); return 0; } long qfileTellCallback( void * _udata ) { return static_cast( _udata )->pos(); } f_cnt_t SampleBuffer::decodeSampleOGGVorbis( const char * _f, int_sample_t * & _buf, ch_cnt_t & _channels, sample_rate_t & _samplerate ) { static ov_callbacks callbacks = { qfileReadCallback, qfileSeekCallback, qfileCloseCallback, qfileTellCallback } ; OggVorbis_File vf; f_cnt_t frames = 0; QFile * f = new QFile( _f ); if( f->open( QFile::ReadOnly ) == false ) { delete f; return 0; } int err = ov_open_callbacks( f, &vf, NULL, 0, callbacks ); if( err < 0 ) { switch( err ) { case OV_EREAD: printf( "SampleBuffer::decodeSampleOGGVorbis():" " media read error\n" ); break; case OV_ENOTVORBIS: /* printf( "SampleBuffer::decodeSampleOGGVorbis():" " not an Ogg Vorbis file\n" );*/ break; case OV_EVERSION: printf( "SampleBuffer::decodeSampleOGGVorbis():" " vorbis version mismatch\n" ); break; case OV_EBADHEADER: printf( "SampleBuffer::decodeSampleOGGVorbis():" " invalid Vorbis bitstream header\n" ); break; case OV_EFAULT: printf( "SampleBuffer::decodeSampleOgg(): " "internal logic fault\n" ); break; } delete f; return 0; } ov_pcm_seek( &vf, 0 ); _channels = ov_info( &vf, -1 )->channels; _samplerate = ov_info( &vf, -1 )->rate; ogg_int64_t total = ov_pcm_total( &vf, -1 ); _buf = new int_sample_t[total * _channels]; int bitstream = 0; long bytes_read = 0; do { bytes_read = ov_read( &vf, (char *) &_buf[frames * _channels], ( total - frames ) * _channels * BYTES_PER_INT_SAMPLE, isLittleEndian() ? 0 : 1, BYTES_PER_INT_SAMPLE, 1, &bitstream ); if( bytes_read < 0 ) { break; } frames += bytes_read / ( _channels * BYTES_PER_INT_SAMPLE ); } while( bytes_read != 0 && bitstream == 0 ); ov_clear( &vf ); // if buffer isn't empty, convert it to float and write it down if ( frames > 0 && _buf != NULL ) { convertIntToFloat ( _buf, frames, _channels); } return frames; } #endif f_cnt_t SampleBuffer::decodeSampleDS( const char * _f, int_sample_t * & _buf, ch_cnt_t & _channels, sample_rate_t & _samplerate ) { DrumSynth ds; f_cnt_t frames = ds.GetDSFileSamples( _f, _buf, _channels, _samplerate ); if ( frames > 0 && _buf != NULL ) { convertIntToFloat ( _buf, frames, _channels); } return frames; } bool SampleBuffer::play( sampleFrame * _ab, handleState * _state, const fpp_t _frames, const float _freq, const LoopMode _loopmode ) { QMutexLocker ml( &m_varLock ); f_cnt_t startFrame = m_startFrame; f_cnt_t endFrame = m_endFrame; f_cnt_t loopStartFrame = m_loopStartFrame; f_cnt_t loopEndFrame = m_loopEndFrame; if( endFrame == 0 || _frames == 0 ) { return false; } // variable for determining if we should currently be playing backwards in a ping-pong loop bool is_backwards = _state->isBackwards(); const double freq_factor = (double) _freq / (double) m_frequency * m_sampleRate / engine::mixer()->processingSampleRate(); // calculate how many frames we have in requested pitch const f_cnt_t total_frames_for_current_pitch = static_cast( ( endFrame - startFrame ) / freq_factor ); if( total_frames_for_current_pitch == 0 ) { return false; } // this holds the number of the first frame to play f_cnt_t play_frame = _state->m_frameIndex; if( play_frame < startFrame ) { play_frame = startFrame; } if( _loopmode == LoopOff ) { if( play_frame >= endFrame ) { return false; } if( ( endFrame - play_frame ) / freq_factor == 0 ) return false; } else if( _loopmode == LoopOn ) { play_frame = getLoopedIndex( play_frame, loopStartFrame, loopEndFrame ); } else { play_frame = getPingPongIndex( play_frame, loopStartFrame, loopEndFrame ); } sampleFrame * tmp = NULL; // check whether we have to change pitch... if( freq_factor != 1.0 || _state->m_varyingPitch ) { SRC_DATA src_data; // Generate output f_cnt_t fragment_size = (f_cnt_t)( _frames * freq_factor ) + MARGIN[ _state->interpolationMode() ]; src_data.data_in = getSampleFragment( play_frame, fragment_size, _loopmode, &tmp, &is_backwards, loopStartFrame, loopEndFrame, endFrame )[0]; src_data.data_out = _ab[0]; src_data.input_frames = fragment_size; src_data.output_frames = _frames; src_data.src_ratio = 1.0 / freq_factor; src_data.end_of_input = 0; int error = src_process( _state->m_resamplingData, &src_data ); if( error ) { printf( "SampleBuffer: error while resampling: %s\n", src_strerror( error ) ); } if( src_data.output_frames_gen > _frames ) { printf( "SampleBuffer: not enough frames: %ld / %d\n", src_data.output_frames_gen, _frames ); } // Advance switch( _loopmode ) { case LoopOff: play_frame += src_data.input_frames_used; break; case LoopOn: play_frame += src_data.input_frames_used; play_frame = getLoopedIndex( play_frame, loopStartFrame, loopEndFrame ); break; case LoopPingPong: { f_cnt_t left = src_data.input_frames_used; if( _state->isBackwards() ) { play_frame -= src_data.input_frames_used; if( play_frame < loopStartFrame ) { left -= ( loopStartFrame - play_frame ); play_frame = loopStartFrame; } else left = 0; } play_frame += left; play_frame = getPingPongIndex( play_frame, loopStartFrame, loopEndFrame ); break; } } } else { // we don't have to pitch, so we just copy the sample-data // as is into pitched-copy-buffer // Generate output memcpy( _ab, getSampleFragment( play_frame, _frames, _loopmode, &tmp, &is_backwards, loopStartFrame, loopEndFrame, endFrame ), _frames * BYTES_PER_FRAME ); // Advance switch( _loopmode ) { case LoopOff: play_frame += _frames; break; case LoopOn: play_frame += _frames; play_frame = getLoopedIndex( play_frame, loopStartFrame, loopEndFrame ); break; case LoopPingPong: { f_cnt_t left = _frames; if( _state->isBackwards() ) { play_frame -= _frames; if( play_frame < loopStartFrame ) { left -= ( loopStartFrame - play_frame ); play_frame = loopStartFrame; } else left = 0; } play_frame += left; play_frame = getPingPongIndex( play_frame, loopStartFrame, loopEndFrame ); break; } } } if( tmp != NULL ) delete[] tmp; _state->setBackwards( is_backwards ); _state->setFrameIndex( play_frame ); for( fpp_t i = 0; i < _frames; ++i ) { _ab[i][0] *= m_amplification; _ab[i][1] *= m_amplification; } return true; } sampleFrame * SampleBuffer::getSampleFragment( f_cnt_t _index, f_cnt_t _frames, LoopMode _loopmode, sampleFrame * * _tmp, bool * _backwards, f_cnt_t _loopstart, f_cnt_t _loopend, f_cnt_t _end ) const { if( _loopmode == LoopOff ) { if( _index + _frames <= _end ) { return m_data + _index; } } else if( _loopmode == LoopOn ) { if( _index + _frames <= _loopend ) { return m_data + _index; } } else { if( ! *_backwards && _index + _frames < _loopend ) return m_data + _index; } *_tmp = new sampleFrame[_frames]; if( _loopmode == LoopOff ) { f_cnt_t available = _end - _index; memcpy( *_tmp, m_data + _index, available * BYTES_PER_FRAME ); memset( *_tmp + available, 0, ( _frames - available ) * BYTES_PER_FRAME ); } else if( _loopmode == LoopOn ) { f_cnt_t copied = qMin( _frames, _loopend - _index ); memcpy( *_tmp, m_data + _index, copied * BYTES_PER_FRAME ); f_cnt_t loop_frames = _loopend - _loopstart; while( copied < _frames ) { f_cnt_t todo = qMin( _frames - copied, loop_frames ); memcpy( *_tmp + copied, m_data + _loopstart, todo * BYTES_PER_FRAME ); copied += todo; } } else { f_cnt_t pos = _index; bool backwards = pos < _loopstart ? false : *_backwards; f_cnt_t copied = 0; if( backwards ) { copied = qMin( _frames, pos - _loopstart ); for( int i=0; i < copied; i++ ) { (*_tmp)[i][0] = m_data[ pos - i ][0]; (*_tmp)[i][1] = m_data[ pos - i ][1]; } pos -= copied; if( pos == _loopstart ) backwards = false; } else { copied = qMin( _frames, _loopend - pos ); memcpy( *_tmp, m_data + pos, copied * BYTES_PER_FRAME ); pos += copied; if( pos == _loopend ) backwards = true; } while( copied < _frames ) { if( backwards ) { f_cnt_t todo = qMin( _frames - copied, pos - _loopstart ); for ( int i=0; i < todo; i++ ) { (*_tmp)[ copied + i ][0] = m_data[ pos - i ][0]; (*_tmp)[ copied + i ][1] = m_data[ pos - i ][1]; } pos -= todo; copied += todo; if( pos <= _loopstart ) backwards = false; } else { f_cnt_t todo = qMin( _frames - copied, _loopend - pos ); memcpy( *_tmp + copied, m_data + pos, todo * BYTES_PER_FRAME ); pos += todo; copied += todo; if( pos >= _loopend ) backwards = true; } } *_backwards = backwards; } return *_tmp; } f_cnt_t SampleBuffer::getLoopedIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const { if( _index < _endf ) { return _index; } return _startf + ( _index - _startf ) % ( _endf - _startf ); } f_cnt_t SampleBuffer::getPingPongIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const { if( _index < _endf ) { return _index; } const f_cnt_t looplen = _endf - _startf; const f_cnt_t looppos = ( _index - _endf ) % ( looplen*2 ); return ( looppos < looplen ) ? _endf - looppos : _startf + ( looppos - looplen ); } void SampleBuffer::visualize( QPainter & _p, const QRect & _dr, const QRect & _clip, f_cnt_t _from_frame, f_cnt_t _to_frame ) { if( m_frames == 0 ) return; const bool focus_on_range = _to_frame <= m_frames && 0 <= _from_frame && _from_frame < _to_frame; // _p.setClipRect( _clip ); // _p.setPen( QColor( 0x22, 0xFF, 0x44 ) ); //_p.setPen( QColor( 64, 224, 160 ) ); const int w = _dr.width(); const int h = _dr.height(); const int yb = h / 2 + _dr.y(); const float y_space = h*0.5f; const int nb_frames = focus_on_range ? _to_frame - _from_frame : m_frames; if( nb_frames < 60000 ) { _p.setRenderHint( QPainter::Antialiasing ); QColor c = _p.pen().color(); _p.setPen( QPen( c, 0.7 ) ); } const int fpp = tLimit( nb_frames / w, 1, 20 ); QPoint * l = new QPoint[nb_frames / fpp + 1]; QPoint * r = new QPoint[nb_frames / fpp + 1]; int n = 0; const int xb = _dr.x(); const int first = focus_on_range ? _from_frame : 0; const int last = focus_on_range ? _to_frame : m_frames; for( int frame = first; frame < last; frame += fpp ) { l[n] = QPoint( xb + ( (frame - first) * double( w ) / nb_frames ), (int)( yb - ( m_data[frame][0] * y_space * m_amplification ) ) ); r[n] = QPoint( xb + ( (frame - first) * double( w ) / nb_frames ), (int)( yb - ( m_data[frame][1] * y_space * m_amplification ) ) ); ++n; } _p.drawPolyline( l, nb_frames / fpp ); _p.drawPolyline( r, nb_frames / fpp ); delete[] l; delete[] r; } QString SampleBuffer::openAudioFile() const { FileDialog ofd( NULL, tr( "Open audio file" ) ); QString dir; if( !m_audioFile.isEmpty() ) { QString f = m_audioFile; if( QFileInfo( f ).isRelative() ) { f = configManager::inst()->userSamplesDir() + f; if( QFileInfo( f ).exists() == false ) { f = configManager::inst()->factorySamplesDir() + m_audioFile; } } dir = QFileInfo( f ).absolutePath(); } else { dir = configManager::inst()->userSamplesDir(); } // change dir to position of previously opened file ofd.setDirectory( dir ); ofd.setFileMode( FileDialog::ExistingFiles ); // set filters QStringList types; types << tr( "All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc " "*.aif *.aiff *.au *.raw)" ) << tr( "Wave-Files (*.wav)" ) << tr( "OGG-Files (*.ogg)" ) << tr( "DrumSynth-Files (*.ds)" ) << tr( "FLAC-Files (*.flac)" ) << tr( "SPEEX-Files (*.spx)" ) //<< tr( "MP3-Files (*.mp3)" ) //<< tr( "MIDI-Files (*.mid)" ) << tr( "VOC-Files (*.voc)" ) << tr( "AIFF-Files (*.aif *.aiff)" ) << tr( "AU-Files (*.au)" ) << tr( "RAW-Files (*.raw)" ) //<< tr( "MOD-Files (*.mod)" ) ; ofd.setFilters( types ); if( !m_audioFile.isEmpty() ) { // select previously opened file ofd.selectFile( QFileInfo( m_audioFile ).fileName() ); } if( ofd.exec () == QDialog::Accepted ) { if( ofd.selectedFiles().isEmpty() ) { return QString::null; } return tryToMakeRelative( ofd.selectedFiles()[0] ); } return QString::null; } QString SampleBuffer::openAndSetAudioFile() { QString fileName = this->openAudioFile(); if(!fileName.isEmpty()) { this->setAudioFile( fileName ); } return fileName; } QString SampleBuffer::openAndSetWaveformFile() { if( m_audioFile.isEmpty() ) { m_audioFile = configManager::inst()->factorySamplesDir() + "waveforms/10saw.flac"; } QString fileName = this->openAudioFile(); if(!fileName.isEmpty()) { this->setAudioFile( fileName ); } else { m_audioFile = ""; } return fileName; } #undef LMMS_HAVE_FLAC_STREAM_ENCODER_H /* not yet... */ #undef LMMS_HAVE_FLAC_STREAM_DECODER_H #ifdef LMMS_HAVE_FLAC_STREAM_ENCODER_H FLAC__StreamEncoderWriteStatus flacStreamEncoderWriteCallback( const FLAC__StreamEncoder * /*_encoder*/, const FLAC__byte _buffer[], unsigned int/* _samples*/, unsigned int _bytes, unsigned int/* _current_frame*/, void * _client_data ) { /* if( _bytes == 0 ) { return FLAC__STREAM_ENCODER_WRITE_STATUS_OK; }*/ return ( static_cast( _client_data )->write( (const char *) _buffer, _bytes ) == (int) _bytes ) ? FLAC__STREAM_ENCODER_WRITE_STATUS_OK : FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; } void flacStreamEncoderMetadataCallback( const FLAC__StreamEncoder *, const FLAC__StreamMetadata * _metadata, void * _client_data ) { QBuffer * b = static_cast( _client_data ); b->seek( 0 ); b->write( (const char *) _metadata, sizeof( *_metadata ) ); } #endif QString & SampleBuffer::toBase64( QString & _dst ) const { #ifdef LMMS_HAVE_FLAC_STREAM_ENCODER_H const f_cnt_t FRAMES_PER_BUF = 1152; FLAC__StreamEncoder * flac_enc = FLAC__stream_encoder_new(); FLAC__stream_encoder_set_channels( flac_enc, DEFAULT_CHANNELS ); FLAC__stream_encoder_set_blocksize( flac_enc, FRAMES_PER_BUF ); /* FLAC__stream_encoder_set_do_exhaustive_model_search( flac_enc, true ); FLAC__stream_encoder_set_do_mid_side_stereo( flac_enc, true );*/ FLAC__stream_encoder_set_sample_rate( flac_enc, engine::mixer()->sampleRate() ); QBuffer ba_writer; ba_writer.open( QBuffer::WriteOnly ); FLAC__stream_encoder_set_write_callback( flac_enc, flacStreamEncoderWriteCallback ); FLAC__stream_encoder_set_metadata_callback( flac_enc, flacStreamEncoderMetadataCallback ); FLAC__stream_encoder_set_client_data( flac_enc, &ba_writer ); if( FLAC__stream_encoder_init( flac_enc ) != FLAC__STREAM_ENCODER_OK ) { printf( "error within FLAC__stream_encoder_init()!\n" ); } f_cnt_t frame_cnt = 0; while( frame_cnt < m_frames ) { f_cnt_t remaining = qMin( FRAMES_PER_BUF, m_frames - frame_cnt ); FLAC__int32 buf[FRAMES_PER_BUF * DEFAULT_CHANNELS]; for( f_cnt_t f = 0; f < remaining; ++f ) { for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { buf[f*DEFAULT_CHANNELS+ch] = (FLAC__int32)( Mixer::clip( m_data[f+frame_cnt][ch] ) * OUTPUT_SAMPLE_MULTIPLIER ); } } FLAC__stream_encoder_process_interleaved( flac_enc, buf, remaining ); frame_cnt += remaining; } FLAC__stream_encoder_finish( flac_enc ); FLAC__stream_encoder_delete( flac_enc ); printf("%d %d\n", frame_cnt, (int)ba_writer.size() ); ba_writer.close(); base64::encode( ba_writer.buffer().data(), ba_writer.buffer().size(), _dst ); #else /* LMMS_HAVE_FLAC_STREAM_ENCODER_H */ base64::encode( (const char *) m_data, m_frames * sizeof( sampleFrame ), _dst ); #endif /* LMMS_HAVE_FLAC_STREAM_ENCODER_H */ return _dst; } SampleBuffer * SampleBuffer::resample( sampleFrame * _data, const f_cnt_t _frames, const sample_rate_t _src_sr, const sample_rate_t _dst_sr ) { const f_cnt_t dst_frames = static_cast( _frames / (float) _src_sr * (float) _dst_sr ); SampleBuffer * dst_sb = new SampleBuffer( dst_frames ); sampleFrame * dst_buf = dst_sb->m_origData; // yeah, libsamplerate, let's rock with sinc-interpolation! int error; SRC_STATE * state; if( ( state = src_new( SRC_SINC_MEDIUM_QUALITY, DEFAULT_CHANNELS, &error ) ) != NULL ) { SRC_DATA src_data; src_data.end_of_input = 1; src_data.data_in = _data[0]; src_data.data_out = dst_buf[0]; src_data.input_frames = _frames; src_data.output_frames = dst_frames; src_data.src_ratio = (double) _dst_sr / _src_sr; if( ( error = src_process( state, &src_data ) ) ) { printf( "SampleBuffer: error while resampling: %s\n", src_strerror( error ) ); } src_delete( state ); } else { printf( "Error: src_new() failed in sample_buffer.cpp!\n" ); } dst_sb->update(); return dst_sb; } void SampleBuffer::setAudioFile( const QString & _audio_file ) { m_audioFile = tryToMakeRelative( _audio_file ); update(); } #ifdef LMMS_HAVE_FLAC_STREAM_DECODER_H struct flacStreamDecoderClientData { QBuffer * read_buffer; QBuffer * write_buffer; } ; FLAC__StreamDecoderReadStatus flacStreamDecoderReadCallback( const FLAC__StreamDecoder * /*_decoder*/, FLAC__byte * _buffer, unsigned int * _bytes, void * _client_data ) { int res = static_cast( _client_data )->read_buffer->read( (char *) _buffer, *_bytes ); if( res > 0 ) { *_bytes = res; return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; } *_bytes = 0; return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; } FLAC__StreamDecoderWriteStatus flacStreamDecoderWriteCallback( const FLAC__StreamDecoder * /*_decoder*/, const FLAC__Frame * _frame, const FLAC__int32 * const _buffer[], void * _client_data ) { if( _frame->header.channels != 2 ) { printf( "channels != 2 in " "flacStreamDecoderWriteCallback()\n" ); return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; } if( _frame->header.bits_per_sample != 16 ) { printf( "bits_per_sample != 16 in " "flacStreamDecoderWriteCallback()\n" ); return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; } const f_cnt_t frames = _frame->header.blocksize; for( f_cnt_t frame = 0; frame < frames; ++frame ) { sampleFrame sframe = { _buffer[0][frame] / OUTPUT_SAMPLE_MULTIPLIER, _buffer[1][frame] / OUTPUT_SAMPLE_MULTIPLIER } ; static_cast( _client_data )->write_buffer->write( (const char *) sframe, sizeof( sframe ) ); } return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } void flacStreamDecoderMetadataCallback( const FLAC__StreamDecoder *, const FLAC__StreamMetadata *, void * /*_client_data*/ ) { printf("stream decoder metadata callback\n"); /* QBuffer * b = static_cast( _client_data ); b->seek( 0 ); b->write( (const char *) _metadata, sizeof( *_metadata ) );*/ } void flacStreamDecoderErrorCallback( const FLAC__StreamDecoder *, FLAC__StreamDecoderErrorStatus _status, void * /*_client_data*/ ) { printf("error callback! %d\n", _status); // what to do now?? } #endif void SampleBuffer::loadFromBase64( const QString & _data ) { char * dst = NULL; int dsize = 0; base64::decode( _data, &dst, &dsize ); #ifdef LMMS_HAVE_FLAC_STREAM_DECODER_H QByteArray orig_data = QByteArray::fromRawData( dst, dsize ); QBuffer ba_reader( &orig_data ); ba_reader.open( QBuffer::ReadOnly ); QBuffer ba_writer; ba_writer.open( QBuffer::WriteOnly ); flacStreamDecoderClientData cdata = { &ba_reader, &ba_writer } ; FLAC__StreamDecoder * flac_dec = FLAC__stream_decoder_new(); FLAC__stream_decoder_set_read_callback( flac_dec, flacStreamDecoderReadCallback ); FLAC__stream_decoder_set_write_callback( flac_dec, flacStreamDecoderWriteCallback ); FLAC__stream_decoder_set_error_callback( flac_dec, flacStreamDecoderErrorCallback ); FLAC__stream_decoder_set_metadata_callback( flac_dec, flacStreamDecoderMetadataCallback ); FLAC__stream_decoder_set_client_data( flac_dec, &cdata ); FLAC__stream_decoder_init( flac_dec ); FLAC__stream_decoder_process_until_end_of_stream( flac_dec ); FLAC__stream_decoder_finish( flac_dec ); FLAC__stream_decoder_delete( flac_dec ); ba_reader.close(); orig_data = ba_writer.buffer(); printf("%d\n", (int) orig_data.size() ); m_origFrames = orig_data.size() / sizeof( sampleFrame ); delete[] m_origData; m_origData = new sampleFrame[m_origFrames]; memcpy( m_origData, orig_data.data(), orig_data.size() ); #else /* LMMS_HAVE_FLAC_STREAM_DECODER_H */ m_origFrames = dsize / sizeof( sampleFrame ); delete[] m_origData; m_origData = new sampleFrame[m_origFrames]; memcpy( m_origData, dst, dsize ); #endif delete[] dst; m_audioFile = QString(); update(); } void SampleBuffer::setStartFrame( const f_cnt_t _s ) { m_varLock.lock(); m_startFrame = _s; m_varLock.unlock(); } void SampleBuffer::setEndFrame( const f_cnt_t _e ) { m_varLock.lock(); m_endFrame = _e; m_varLock.unlock(); } void SampleBuffer::setAmplification( float _a ) { m_amplification = _a; emit sampleUpdated(); } void SampleBuffer::setReversed( bool _on ) { m_reversed = _on; update( true ); } QString SampleBuffer::tryToMakeRelative( const QString & _file ) { if( QFileInfo( _file ).isRelative() == false ) { QString f = QString( _file ).replace( QDir::separator(), '/' ); QString fsd = configManager::inst()->factorySamplesDir(); QString usd = configManager::inst()->userSamplesDir(); fsd.replace( QDir::separator(), '/' ); usd.replace( QDir::separator(), '/' ); if( f.startsWith( fsd ) ) { return QString( f ).mid( fsd.length() ); } else if( f.startsWith( usd ) ) { return QString( f ).mid( usd.length() ); } } return _file; } QString SampleBuffer::tryToMakeAbsolute( const QString & _file ) { if( QFileInfo( _file ).isAbsolute() ) { return _file; } QString f = configManager::inst()->userSamplesDir() + _file; if( QFileInfo( f ).exists() ) { return f; } return configManager::inst()->factorySamplesDir() + _file; } SampleBuffer::handleState::handleState( bool _varying_pitch, int interpolation_mode ) : m_frameIndex( 0 ), m_varyingPitch( _varying_pitch ), m_isBackwards( false ) { int error; m_interpolationMode = interpolation_mode; if( ( m_resamplingData = src_new( interpolation_mode, DEFAULT_CHANNELS, &error ) ) == NULL ) { qDebug( "Error: src_new() failed in sample_buffer.cpp!\n" ); } } SampleBuffer::handleState::~handleState() { src_delete( m_resamplingData ); } #include "moc_SampleBuffer.cxx" /* vim: set tw=0 noexpandtab: */ lmms-1.1.3/src/core/SamplePlayHandle.cpp000066400000000000000000000071341247673406200201120ustar00rootroot00000000000000/* * SamplePlayHandle.cpp - implementation of class SamplePlayHandle * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "SamplePlayHandle.h" #include "AudioPort.h" #include "bb_track.h" #include "engine.h" #include "InstrumentTrack.h" #include "Pattern.h" #include "SampleBuffer.h" #include "SampleTrack.h" SamplePlayHandle::SamplePlayHandle( const QString& sampleFile ) : PlayHandle( TypeSamplePlayHandle ), m_sampleBuffer( new SampleBuffer( sampleFile ) ), m_doneMayReturnTrue( true ), m_frame( 0 ), m_audioPort( new AudioPort( "SamplePlayHandle", false ) ), m_ownAudioPort( true ), m_defaultVolumeModel( DefaultVolume, MinVolume, MaxVolume, 1 ), m_volumeModel( &m_defaultVolumeModel ), m_track( NULL ), m_bbTrack( NULL ) { } SamplePlayHandle::SamplePlayHandle( SampleBuffer* sampleBuffer ) : PlayHandle( TypeSamplePlayHandle ), m_sampleBuffer( sharedObject::ref( sampleBuffer ) ), m_doneMayReturnTrue( true ), m_frame( 0 ), m_audioPort( new AudioPort( "SamplePlayHandle", false ) ), m_ownAudioPort( true ), m_defaultVolumeModel( DefaultVolume, MinVolume, MaxVolume, 1 ), m_volumeModel( &m_defaultVolumeModel ), m_track( NULL ), m_bbTrack( NULL ) { } SamplePlayHandle::SamplePlayHandle( SampleTCO* tco ) : PlayHandle( TypeSamplePlayHandle ), m_sampleBuffer( sharedObject::ref( tco->sampleBuffer() ) ), m_doneMayReturnTrue( true ), m_frame( 0 ), m_audioPort( ( (SampleTrack *)tco->getTrack() )->audioPort() ), m_ownAudioPort( false ), m_defaultVolumeModel( DefaultVolume, MinVolume, MaxVolume, 1 ), m_volumeModel( &m_defaultVolumeModel ), m_track( tco->getTrack() ), m_bbTrack( NULL ) { } SamplePlayHandle::~SamplePlayHandle() { sharedObject::unref( m_sampleBuffer ); if( m_ownAudioPort ) { delete m_audioPort; } } void SamplePlayHandle::play( sampleFrame * _working_buffer ) { //play( 0, _try_parallelizing ); if( framesDone() >= totalFrames() ) { return; } const fpp_t frames = engine::mixer()->framesPerPeriod(); if( !( m_track && m_track->isMuted() ) && !( m_bbTrack && m_bbTrack->isMuted() ) ) { stereoVolumeVector v = { { m_volumeModel->value() / DefaultVolume, m_volumeModel->value() / DefaultVolume } }; m_sampleBuffer->play( _working_buffer, &m_state, frames, BaseFreq ); engine::mixer()->bufferToPort( _working_buffer, frames, offset(), v, m_audioPort ); } m_frame += frames; } bool SamplePlayHandle::isFinished() const { return framesDone() >= totalFrames() && m_doneMayReturnTrue == true; } bool SamplePlayHandle::isFromTrack( const track * _track ) const { return m_track == _track || m_bbTrack == _track; } f_cnt_t SamplePlayHandle::totalFrames() const { return ( m_sampleBuffer->endFrame() - m_sampleBuffer->startFrame() ) * ( engine::mixer()->processingSampleRate() / engine::mixer()->baseSampleRate() ); } lmms-1.1.3/src/core/SampleRecordHandle.cpp000066400000000000000000000066601247673406200204260ustar00rootroot00000000000000/* * SampleRecordHandle.cpp - implementation of class SampleRecordHandle * * Copyright (c) 2008 Csaba Hruska * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "SampleRecordHandle.h" #include "bb_track.h" #include "engine.h" #include "InstrumentTrack.h" #include "Pattern.h" #include "SampleBuffer.h" #include "SampleTrack.h" SampleRecordHandle::SampleRecordHandle( SampleTCO* tco ) : PlayHandle( TypeSamplePlayHandle ), m_framesRecorded( 0 ), m_minLength( tco->length() ), m_track( tco->getTrack() ), m_bbTrack( NULL ), m_tco( tco ) { } SampleRecordHandle::~SampleRecordHandle() { if( !m_buffers.empty() ) { SampleBuffer* sb; createSampleBuffer( &sb ); m_tco->setSampleBuffer( sb ); } while( !m_buffers.empty() ) { delete[] m_buffers.front().first; m_buffers.erase( m_buffers.begin() ); } m_tco->setRecord( false ); } void SampleRecordHandle::play( sampleFrame * /*_working_buffer*/ ) { const sampleFrame * recbuf = engine::mixer()->inputBuffer(); const f_cnt_t frames = engine::mixer()->inputBufferFrames(); writeBuffer( recbuf, frames ); m_framesRecorded += frames; MidiTime len = (tick_t)( m_framesRecorded / engine::framesPerTick() ); if( len > m_minLength ) { // m_tco->changeLength( len ); m_minLength = len; } } bool SampleRecordHandle::isFinished() const { return false; } bool SampleRecordHandle::isFromTrack( const track * _track ) const { return( m_track == _track || m_bbTrack == _track ); } f_cnt_t SampleRecordHandle::framesRecorded() const { return( m_framesRecorded ); } void SampleRecordHandle::createSampleBuffer( SampleBuffer** sampleBuf ) { const f_cnt_t frames = framesRecorded(); // create buffer to store all recorded buffers in sampleFrame * data = new sampleFrame[frames]; // make sure buffer is cleaned up properly at the end... sampleFrame * data_ptr = data; #ifdef LMMS_DEBUG assert( data != NULL ); #endif // now copy all buffers into big buffer for( bufferList::const_iterator it = m_buffers.begin(); it != m_buffers.end(); ++it ) { memcpy( data_ptr, ( *it ).first, ( *it ).second * sizeof( sampleFrame ) ); data_ptr += ( *it ).second; } // create according sample-buffer out of big buffer *sampleBuf = new SampleBuffer( data, frames ); ( *sampleBuf)->setSampleRate( engine::mixer()->inputSampleRate() ); delete[] data; } void SampleRecordHandle::writeBuffer( const sampleFrame * _ab, const f_cnt_t _frames ) { sampleFrame * buf = new sampleFrame[_frames]; for( f_cnt_t frame = 0; frame < _frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl ) { buf[frame][chnl] = _ab[frame][chnl]; } } m_buffers.push_back( qMakePair( buf, _frames ) ); } lmms-1.1.3/src/core/SerializingObject.cpp000066400000000000000000000037371247673406200203430ustar00rootroot00000000000000/* * SerializingObject.cpp - implementation of SerializingObject * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "SerializingObject.h" SerializingObject::SerializingObject() : m_hook( NULL ) { } SerializingObject::~SerializingObject() { if( m_hook ) { m_hook->m_hookedIn = NULL; } } QDomElement SerializingObject::saveState( QDomDocument& doc, QDomElement& parent ) { QDomElement element = doc.createElement( nodeName() ); parent.appendChild( element ); saveSettings( doc, element ); if( hook() ) { hook()->saveSettings( doc, element ); } return element; } void SerializingObject::restoreState( const QDomElement& element ) { loadSettings( element ); if( hook() ) { hook()->loadSettings( element ); } } void SerializingObject::setHook( SerializingObjectHook* hook ) { if( m_hook ) { m_hook->m_hookedIn = NULL; } m_hook = hook; if( m_hook ) { m_hook->m_hookedIn = this; } } void SerializingObject::saveSettings( QDomDocument& doc, QDomElement& element ) { Q_UNUSED(doc) Q_UNUSED(element) } void SerializingObject::loadSettings( const QDomElement& element ) { Q_UNUSED(element) } lmms-1.1.3/src/core/TempoSyncKnobModel.cpp000066400000000000000000000101461247673406200204400ustar00rootroot00000000000000/* * TempoSyncKnobModel.cpp - adds bpm to ms conversion for knob class * * Copyright (c) 2005-2007 Danny McRae * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "TempoSyncKnobModel.h" #include "engine.h" #include "song.h" TempoSyncKnobModel::TempoSyncKnobModel( const float _val, const float _min, const float _max, const float _step, const float _scale, Model * _parent, const QString & _display_name ) : FloatModel( _val, _min, _max, _step, _parent, _display_name ), m_tempoSyncMode( SyncNone ), m_tempoLastSyncMode( SyncNone ), m_scale( _scale ), m_custom( _parent ) { connect( engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( calculateTempoSyncTime( bpm_t ) ) ); } TempoSyncKnobModel::~TempoSyncKnobModel() { } void TempoSyncKnobModel::setTempoSync( QAction * _item ) { setTempoSync( _item->data().toInt() ); } void TempoSyncKnobModel::setTempoSync( int _note_type ) { setSyncMode( ( TempoSyncMode ) _note_type ); engine::getSong()->setModified(); } void TempoSyncKnobModel::calculateTempoSyncTime( bpm_t _bpm ) { float conversionFactor = 1.0; if( m_tempoSyncMode ) { switch( m_tempoSyncMode ) { case SyncCustom: conversionFactor = static_cast( m_custom.getDenominator() ) / static_cast( m_custom.getNumerator() ); break; case SyncDoubleWholeNote: conversionFactor = 0.125; break; case SyncWholeNote: conversionFactor = 0.25; break; case SyncHalfNote: conversionFactor = 0.5; break; case SyncQuarterNote: conversionFactor = 1.0; break; case SyncEighthNote: conversionFactor = 2.0; break; case SyncSixteenthNote: conversionFactor = 4.0; break; case SyncThirtysecondNote: conversionFactor = 8.0; break; default: ; } bool journalling = testAndSetJournalling( false ); float oneUnit = 60000.0 / ( _bpm * conversionFactor * m_scale ); setValue( oneUnit * maxValue() ); setJournalling( journalling ); } if( m_tempoSyncMode != m_tempoLastSyncMode ) { emit syncModeChanged( m_tempoSyncMode ); m_tempoLastSyncMode = m_tempoSyncMode; } } void TempoSyncKnobModel::saveSettings( QDomDocument & _doc, QDomElement & _this, const QString & _name ) { _this.setAttribute( "syncmode", (int) syncMode() ); m_custom.saveSettings( _doc, _this, _name ); FloatModel::saveSettings( _doc, _this, _name ); } void TempoSyncKnobModel::loadSettings( const QDomElement & _this, const QString & _name ) { setSyncMode( ( TempoSyncMode ) _this.attribute( "syncmode" ).toInt() ); m_custom.loadSettings( _this, _name ); FloatModel::loadSettings( _this, _name ); } void TempoSyncKnobModel::setSyncMode( TempoSyncMode _new_mode ) { if( m_tempoSyncMode != _new_mode ) { m_tempoSyncMode = _new_mode; if( _new_mode == SyncCustom ) { connect( &m_custom, SIGNAL( dataChanged() ), this, SLOT( updateCustom() ) ); } } calculateTempoSyncTime( engine::getSong()->getTempo() ); } void TempoSyncKnobModel::setScale( float _new_scale ) { m_scale = _new_scale; calculateTempoSyncTime( engine::getSong()->getTempo() ); emit scaleChanged( _new_scale ); } void TempoSyncKnobModel::updateCustom() { setSyncMode( SyncCustom ); } #include "moc_TempoSyncKnobModel.cxx" lmms-1.1.3/src/core/ToolPlugin.cpp000066400000000000000000000030701247673406200170160ustar00rootroot00000000000000/* * ToolPlugin.cpp - base class for all tool plugins (graphs, extensions, etc) * * Copyright (c) 2006-2008 Javier Serrano Polo * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ToolPlugin.h" ToolPlugin::ToolPlugin( const Descriptor * _descriptor, Model * _parent ) : Plugin( _descriptor, _parent ) { } ToolPlugin::~ToolPlugin() { } ToolPlugin * ToolPlugin::instantiate( const QString & _plugin_name, Model * _parent ) { Plugin * p = Plugin::instantiate( _plugin_name, _parent, NULL ); // check whether instantiated plugin is a tool if( p->type() == Plugin::Tool ) { // everything ok, so return pointer return dynamic_cast( p ); } // not quite... so delete plugin delete p; return NULL; } lmms-1.1.3/src/core/TrackContainer.cpp000066400000000000000000000112471247673406200176360ustar00rootroot00000000000000/* * TrackContainer.cpp - implementation of base class for all trackcontainers * like Song-Editor, BB-Editor... * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "TrackContainer.h" #include "InstrumentTrack.h" #include "engine.h" #include "MainWindow.h" #include "song.h" TrackContainer::TrackContainer() : Model( NULL ), JournallingObject(), m_tracksMutex(), m_tracks() { } TrackContainer::~TrackContainer() { clearAllTracks(); } void TrackContainer::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setTagName( classNodeName() ); _this.setAttribute( "type", nodeName() ); // save settings of each track m_tracksMutex.lockForRead(); for( int i = 0; i < m_tracks.size(); ++i ) { m_tracks[i]->saveState( _doc, _this ); } m_tracksMutex.unlock(); } void TrackContainer::loadSettings( const QDomElement & _this ) { bool journalRestore = _this.parentNode().nodeName() == "journaldata"; if( journalRestore ) { clearAllTracks(); } static QProgressDialog * pd = NULL; bool was_null = ( pd == NULL ); int start_val = 0; if( !journalRestore && engine::hasGUI() ) { if( pd == NULL ) { pd = new QProgressDialog( tr( "Loading project..." ), tr( "Cancel" ), 0, _this.childNodes().count(), engine::mainWindow() ); pd->setWindowModality( Qt::ApplicationModal ); pd->setWindowTitle( tr( "Please wait..." ) ); pd->show(); } else { start_val = pd->value(); pd->setMaximum( pd->maximum() + _this.childNodes().count() ); } } QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( pd != NULL ) { pd->setValue( pd->value() + 1 ); QCoreApplication::instance()->processEvents( QEventLoop::AllEvents, 100 ); if( pd->wasCanceled() ) { break; } } if( node.isElement() && !node.toElement().attribute( "metadata" ).toInt() ) { track::create( node.toElement(), this ); } node = node.nextSibling(); } if( pd != NULL ) { pd->setValue( start_val + _this.childNodes().count() ); if( was_null ) { delete pd; pd = NULL; } } } int TrackContainer::countTracks( track::TrackTypes _tt ) const { int cnt = 0; m_tracksMutex.lockForRead(); for( int i = 0; i < m_tracks.size(); ++i ) { if( m_tracks[i]->type() == _tt || _tt == track::NumTrackTypes ) { ++cnt; } } m_tracksMutex.unlock(); return( cnt ); } void TrackContainer::addTrack( track * _track ) { if( _track->type() != track::HiddenAutomationTrack ) { m_tracksMutex.lockForWrite(); m_tracks.push_back( _track ); m_tracksMutex.unlock(); emit trackAdded( _track ); } } void TrackContainer::removeTrack( track * _track ) { int index = m_tracks.indexOf( _track ); if( index != -1 ) { // If the track is solo, all other tracks are muted. Change this before removing the solo track: if (_track->isSolo()) { _track->setSolo(false); } m_tracksMutex.lockForWrite(); m_tracks.remove( index ); m_tracksMutex.unlock(); if( engine::getSong() ) { engine::getSong()->setModified(); } } } void TrackContainer::updateAfterTrackAdd() { } void TrackContainer::clearAllTracks() { //m_tracksMutex.lockForWrite(); while( !m_tracks.isEmpty() ) { delete m_tracks.first(); } //m_tracksMutex.unlock(); } bool TrackContainer::isEmpty() const { for( TrackList::const_iterator it = m_tracks.begin(); it != m_tracks.end(); ++it ) { if( !( *it )->getTCOs().isEmpty() ) { return false; } } return true; } DummyTrackContainer::DummyTrackContainer() : TrackContainer(), m_dummyInstrumentTrack( NULL ) { setJournalling( false ); m_dummyInstrumentTrack = dynamic_cast( track::create( track::InstrumentTrack, this ) ); m_dummyInstrumentTrack->setJournalling( false ); } #include "moc_TrackContainer.cxx" lmms-1.1.3/src/core/VstSyncController.cpp000066400000000000000000000105671247673406200204100ustar00rootroot00000000000000/* * VstSyncController.cpp - manage synchronization between LMMS and VST plugins * * Copyright (c) 2014 Tobias Doerffel * Copyright (c) 2013 Mike Choi * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "config_mgr.h" #include "engine.h" #include "lmmsconfig.h" #include "Mixer.h" #include "VstSyncController.h" #ifdef LMMS_BUILD_WIN32 #ifndef USE_QT_SHMEM #define USE_QT_SHMEM #endif #endif #ifndef USE_QT_SHMEM #include #include #include #include #include #include #endif VstSyncController::VstSyncController() : m_syncData( NULL ), m_shmID( -1 ), m_shm( "/usr/bin/lmms" ) { if( configManager::inst()->value( "ui", "syncvstplugins" ).toInt() ) { connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSampleRate() ) ); #ifdef USE_QT_SHMEM if ( m_shm.create( sizeof( VstSyncData ) ) ) { m_syncData = (VstSyncData*) m_shm.data(); } else { qWarning() << QString( "Failed to allocate shared memory for VST sync: %1" ).arg( m_shm.errorString() ); } #else key_t key; // make the key: if( ( key = ftok( VST_SNC_SHM_KEY_FILE, 'R' ) ) == -1 ) { qWarning( "VstSyncController: ftok() failed" ); } else { // connect to shared memory segment if( ( m_shmID = shmget( key, sizeof( VstSyncData ), 0644 | IPC_CREAT ) ) == -1 ) { qWarning( "VstSyncController: shmget() failed" ); } else { // attach segment m_syncData = (VstSyncData *)shmat( m_shmID, 0, 0 ); if( m_syncData == (VstSyncData *)( -1 ) ) { qWarning( "VstSyncController: shmat() failed" ); } } } #endif } else { qWarning( "VST sync support disabled in your configuration" ); } if( m_syncData == NULL ) { m_syncData = new VstSyncData; m_syncData->hasSHM = false; } else { m_syncData->hasSHM = true; } m_syncData->isPlaying = false; m_syncData->m_bufferSize = engine::mixer()->framesPerPeriod(); m_syncData->timeSigNumer = 4; m_syncData->timeSigDenom = 4; updateSampleRate(); } VstSyncController::~VstSyncController() { if( m_syncData->hasSHM == false ) { delete m_syncData; } else { #ifdef USE_QT_SHMEM if( m_shm.data() ) { // detach shared memory, delete it: m_shm.detach(); } #else if( shmdt( m_syncData ) != -1 ) { shmctl( m_shmID, IPC_RMID, NULL ); } else { qWarning( "VstSyncController: shmdt() failed" ); } #endif } } void VstSyncController::setAbsolutePosition( int ticks ) { #ifdef VST_SNC_LATENCY m_syncData->ppqPos = ( ( ticks + 0 ) / (float)48 ) - m_syncData->m_latency; #else m_syncData->ppqPos = ( ( ticks + 0 ) / (float)48 ); #endif } void VstSyncController::setTempo( int newTempo ) { m_syncData->m_bpm = newTempo; #ifdef VST_SNC_LATENCY m_syncData->m_latency = m_syncData->m_bufferSize * newTempo / ( (float) m_syncData->m_sampleRate * 60 ); #endif } void VstSyncController::startCycle( int startTick, int endTick ) { m_syncData->isCycle = true; m_syncData->cycleStart = startTick / (float)48; m_syncData->cycleEnd = endTick / (float)48; } void VstSyncController::update() { m_syncData->m_bufferSize = engine::mixer()->framesPerPeriod(); #ifdef VST_SNC_LATENCY m_syncData->m_latency = m_syncData->m_bufferSize * m_syncData->m_bpm / ( (float) m_syncData->m_sampleRate * 60 ); #endif } void VstSyncController::updateSampleRate() { m_syncData->m_sampleRate = engine::mixer()->processingSampleRate(); #ifdef VST_SNC_LATENCY m_syncData->m_latency = m_syncData->m_bufferSize * m_syncData->m_bpm / ( (float) m_syncData->m_sampleRate * 60 ); #endif } #include "moc_VstSyncController.cxx" lmms-1.1.3/src/core/audio/000077500000000000000000000000001247673406200153175ustar00rootroot00000000000000lmms-1.1.3/src/core/audio/AudioAlsa.cpp000066400000000000000000000266341247673406200177000ustar00rootroot00000000000000/* * audio_alsa.cpp - device-class which implements ALSA-PCM-output * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "AudioAlsa.h" #ifdef LMMS_HAVE_ALSA #include "endian_handling.h" #include "config_mgr.h" #include "engine.h" #include "LcdSpinBox.h" #include "gui_templates.h" #include "templates.h" AudioAlsa::AudioAlsa( bool & _success_ful, Mixer* _mixer ) : AudioDevice( tLimit( configManager::inst()->value( "audioalsa", "channels" ).toInt(), DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ), m_handle( NULL ), m_hwParams( NULL ), m_swParams( NULL ), m_convertEndian( false ) { _success_ful = false; int err; if( ( err = snd_pcm_open( &m_handle, probeDevice().toAscii().constData(), SND_PCM_STREAM_PLAYBACK, 0 ) ) < 0 ) { printf( "Playback open error: %s\n", snd_strerror( err ) ); return; } snd_pcm_hw_params_malloc( &m_hwParams ); snd_pcm_sw_params_malloc( &m_swParams ); if( ( err = setHWParams( channels(), SND_PCM_ACCESS_RW_INTERLEAVED ) ) < 0 ) { printf( "Setting of hwparams failed: %s\n", snd_strerror( err ) ); return; } if( ( err = setSWParams() ) < 0 ) { printf( "Setting of swparams failed: %s\n", snd_strerror( err ) ); return; } // set FD_CLOEXEC flag for all file descriptors so forked processes // do not inherit them struct pollfd * ufds; int count = snd_pcm_poll_descriptors_count( m_handle ); ufds = new pollfd[count]; snd_pcm_poll_descriptors( m_handle, ufds, count ); for( int i = 0; i < qMax( 3, count ); ++i ) { const int fd = ( i >= count ) ? ufds[0].fd+i : ufds[i].fd; int oldflags = fcntl( fd, F_GETFD, 0 ); if( oldflags < 0 ) continue; oldflags |= FD_CLOEXEC; fcntl( fd, F_SETFD, oldflags ); } delete[] ufds; _success_ful = true; } AudioAlsa::~AudioAlsa() { stopProcessing(); if( m_handle != NULL ) { snd_pcm_close( m_handle ); } if( m_hwParams != NULL ) { snd_pcm_hw_params_free( m_hwParams ); } if( m_swParams != NULL ) { snd_pcm_sw_params_free( m_swParams ); } } QString AudioAlsa::probeDevice() { QString dev = configManager::inst()->value( "audioalsa", "device" ); if( dev == "" ) { if( getenv( "AUDIODEV" ) != NULL ) { return getenv( "AUDIODEV" ); } return "default"; } return dev; } int AudioAlsa::handleError( int _err ) { if( _err == -EPIPE ) { // under-run _err = snd_pcm_prepare( m_handle ); if( _err < 0 ) printf( "Can't recover from underrun, prepare " "failed: %s\n", snd_strerror( _err ) ); return ( 0 ); } #ifdef ESTRPIPE else if( _err == -ESTRPIPE ) { while( ( _err = snd_pcm_resume( m_handle ) ) == -EAGAIN ) { sleep( 1 ); // wait until the suspend flag // is released } if( _err < 0 ) { _err = snd_pcm_prepare( m_handle ); if( _err < 0 ) printf( "Can't recover from suspend, prepare " "failed: %s\n", snd_strerror( _err ) ); } return ( 0 ); } #endif return _err; } void AudioAlsa::startProcessing() { if( !isRunning() ) { start( QThread::HighPriority ); } } void AudioAlsa::stopProcessing() { if( isRunning() ) { wait( 1000 ); terminate(); } } void AudioAlsa::applyQualitySettings() { if( hqAudio() ) { setSampleRate( engine::mixer()->processingSampleRate() ); if( m_handle != NULL ) { snd_pcm_close( m_handle ); } int err; if( ( err = snd_pcm_open( &m_handle, probeDevice().toAscii().constData(), SND_PCM_STREAM_PLAYBACK, 0 ) ) < 0 ) { printf( "Playback open error: %s\n", snd_strerror( err ) ); return; } if( ( err = setHWParams( channels(), SND_PCM_ACCESS_RW_INTERLEAVED ) ) < 0 ) { printf( "Setting of hwparams failed: %s\n", snd_strerror( err ) ); return; } if( ( err = setSWParams() ) < 0 ) { printf( "Setting of swparams failed: %s\n", snd_strerror( err ) ); return; } } AudioDevice::applyQualitySettings(); } void AudioAlsa::run() { surroundSampleFrame * temp = new surroundSampleFrame[mixer()->framesPerPeriod()]; int_sample_t * outbuf = new int_sample_t[mixer()->framesPerPeriod() * channels()]; int_sample_t * pcmbuf = new int_sample_t[m_periodSize * channels()]; int outbuf_size = mixer()->framesPerPeriod() * channels(); int outbuf_pos = 0; int pcmbuf_size = m_periodSize * channels(); bool quit = false; while( quit == false ) { int_sample_t * ptr = pcmbuf; int len = pcmbuf_size; while( len ) { if( outbuf_pos == 0 ) { // frames depend on the sample rate const fpp_t frames = getNextBuffer( temp ); if( !frames ) { quit = true; memset( ptr, 0, len * sizeof( int_sample_t ) ); break; } outbuf_size = frames * channels(); convertToS16( temp, frames, mixer()->masterGain(), outbuf, m_convertEndian ); } int min_len = qMin( len, outbuf_size - outbuf_pos ); memcpy( ptr, outbuf + outbuf_pos, min_len * sizeof( int_sample_t ) ); ptr += min_len; len -= min_len; outbuf_pos += min_len; outbuf_pos %= outbuf_size; } f_cnt_t frames = m_periodSize; ptr = pcmbuf; while( frames ) { int err = snd_pcm_writei( m_handle, ptr, frames ); if( err == -EAGAIN ) { continue; } if( err < 0 ) { if( handleError( err ) < 0 ) { printf( "Write error: %s\n", snd_strerror( err ) ); } break; // skip this buffer } ptr += err * channels(); frames -= err; } } delete[] temp; delete[] outbuf; delete[] pcmbuf; } int AudioAlsa::setHWParams( const ch_cnt_t _channels, snd_pcm_access_t _access ) { int err, dir; // choose all parameters if( ( err = snd_pcm_hw_params_any( m_handle, m_hwParams ) ) < 0 ) { printf( "Broken configuration for playback: no configurations " "available: %s\n", snd_strerror( err ) ); return err; } // set the interleaved read/write format if( ( err = snd_pcm_hw_params_set_access( m_handle, m_hwParams, _access ) ) < 0 ) { printf( "Access type not available for playback: %s\n", snd_strerror( err ) ); return err; } // set the sample format if( ( snd_pcm_hw_params_set_format( m_handle, m_hwParams, SND_PCM_FORMAT_S16_LE ) ) < 0 ) { if( ( snd_pcm_hw_params_set_format( m_handle, m_hwParams, SND_PCM_FORMAT_S16_BE ) ) < 0 ) { printf( "Neither little- nor big-endian available for " "playback: %s\n", snd_strerror( err ) ); return err; } m_convertEndian = isLittleEndian(); } else { m_convertEndian = !isLittleEndian(); } // set the count of channels if( ( err = snd_pcm_hw_params_set_channels( m_handle, m_hwParams, _channels ) ) < 0 ) { printf( "Channel count (%i) not available for playbacks: %s\n" "(Does your soundcard not support surround?)\n", _channels, snd_strerror( err ) ); return err; } // set the sample rate if( ( err = snd_pcm_hw_params_set_rate( m_handle, m_hwParams, sampleRate(), 0 ) ) < 0 ) { if( ( err = snd_pcm_hw_params_set_rate( m_handle, m_hwParams, mixer()->baseSampleRate(), 0 ) ) < 0 ) { printf( "Could not set sample rate: %s\n", snd_strerror( err ) ); return err; } } m_periodSize = mixer()->framesPerPeriod(); m_bufferSize = m_periodSize * 8; dir = 0; err = snd_pcm_hw_params_set_period_size_near( m_handle, m_hwParams, &m_periodSize, &dir ); if( err < 0 ) { printf( "Unable to set period size %lu for playback: %s\n", m_periodSize, snd_strerror( err ) ); return err; } dir = 0; err = snd_pcm_hw_params_get_period_size( m_hwParams, &m_periodSize, &dir ); if( err < 0 ) { printf( "Unable to get period size for playback: %s\n", snd_strerror( err ) ); } dir = 0; err = snd_pcm_hw_params_set_buffer_size_near( m_handle, m_hwParams, &m_bufferSize ); if( err < 0 ) { printf( "Unable to set buffer size %lu for playback: %s\n", m_bufferSize, snd_strerror( err ) ); return ( err ); } err = snd_pcm_hw_params_get_buffer_size( m_hwParams, &m_bufferSize ); if( 2 * m_periodSize > m_bufferSize ) { printf( "buffer to small, could not use\n" ); return ( err ); } // write the parameters to device err = snd_pcm_hw_params( m_handle, m_hwParams ); if( err < 0 ) { printf( "Unable to set hw params for playback: %s\n", snd_strerror( err ) ); return ( err ); } return ( 0 ); // all ok } int AudioAlsa::setSWParams() { int err; // get the current swparams if( ( err = snd_pcm_sw_params_current( m_handle, m_swParams ) ) < 0 ) { printf( "Unable to determine current swparams for playback: %s" "\n", snd_strerror( err ) ); return err; } // start the transfer when a period is full if( ( err = snd_pcm_sw_params_set_start_threshold( m_handle, m_swParams, m_periodSize ) ) < 0 ) { printf( "Unable to set start threshold mode for playback: %s\n", snd_strerror( err ) ); return err; } // allow the transfer when at least m_periodSize samples can be // processed if( ( err = snd_pcm_sw_params_set_avail_min( m_handle, m_swParams, m_periodSize ) ) < 0 ) { printf( "Unable to set avail min for playback: %s\n", snd_strerror( err ) ); return err; } // align all transfers to 1 sample #if SND_LIB_VERSION < ((1<<16)|(0)|16) if( ( err = snd_pcm_sw_params_set_xfer_align( m_handle, m_swParams, 1 ) ) < 0 ) { printf( "Unable to set transfer align for playback: %s\n", snd_strerror( err ) ); return err; } #endif // write the parameters to the playback device if( ( err = snd_pcm_sw_params( m_handle, m_swParams ) ) < 0 ) { printf( "Unable to set sw params for playback: %s\n", snd_strerror( err ) ); return err; } return 0; // all ok } AudioAlsa::setupWidget::setupWidget( QWidget * _parent ) : AudioDevice::setupWidget( AudioAlsa::name(), _parent ) { m_device = new QLineEdit( AudioAlsa::probeDevice(), this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); LcdSpinBoxModel * m = new LcdSpinBoxModel( /* this */ ); m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS ); m->setStep( 2 ); m->setValue( configManager::inst()->value( "audioalsa", "channels" ).toInt() ); m_channels = new LcdSpinBox( 1, this ); m_channels->setModel( m ); m_channels->setLabel( tr( "CHANNELS" ) ); m_channels->move( 180, 20 ); } AudioAlsa::setupWidget::~setupWidget() { delete m_channels->model(); } void AudioAlsa::setupWidget::saveSettings() { configManager::inst()->setValue( "audioalsa", "device", m_device->text() ); configManager::inst()->setValue( "audioalsa", "channels", QString::number( m_channels->value() ) ); } #endif lmms-1.1.3/src/core/audio/AudioDevice.cpp000066400000000000000000000117021247673406200202050ustar00rootroot00000000000000/* * AudioDevice.cpp - base-class for audio-devices used by LMMS-mixer * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "AudioDevice.h" #include "config_mgr.h" #include "debug.h" AudioDevice::AudioDevice( const ch_cnt_t _channels, Mixer* _mixer ) : m_supportsCapture( false ), m_sampleRate( _mixer->processingSampleRate() ), m_channels( _channels ), m_mixer( _mixer ), m_buffer( new surroundSampleFrame[mixer()->framesPerPeriod()] ) { int error; if( ( m_srcState = src_new( mixer()->currentQualitySettings().libsrcInterpolation(), SURROUND_CHANNELS, &error ) ) == NULL ) { printf( "Error: src_new() failed in audio_device.cpp!\n" ); } } AudioDevice::~AudioDevice() { src_delete( m_srcState ); delete[] m_buffer; m_devMutex.tryLock(); unlock(); } void AudioDevice::processNextBuffer() { const fpp_t frames = getNextBuffer( m_buffer ); if( frames ) { writeBuffer( m_buffer, frames, mixer()->masterGain() ); } else { m_inProcess = false; } } fpp_t AudioDevice::getNextBuffer( surroundSampleFrame * _ab ) { fpp_t frames = mixer()->framesPerPeriod(); const surroundSampleFrame * b = mixer()->nextBuffer(); if( !b ) { return 0; } // make sure, no other thread is accessing device lock(); // resample if necessary if( mixer()->processingSampleRate() != m_sampleRate ) { resample( b, frames, _ab, mixer()->processingSampleRate(), m_sampleRate ); frames = frames * m_sampleRate / mixer()->processingSampleRate(); } else { memcpy( _ab, b, frames * sizeof( surroundSampleFrame ) ); } // release lock unlock(); if( mixer()->hasFifoWriter() ) { delete[] b; } return frames; } void AudioDevice::stopProcessing() { if( mixer()->hasFifoWriter() ) { while( m_inProcess ) { processNextBuffer(); } } } void AudioDevice::applyQualitySettings() { src_delete( m_srcState ); int error; if( ( m_srcState = src_new( mixer()->currentQualitySettings().libsrcInterpolation(), SURROUND_CHANNELS, &error ) ) == NULL ) { printf( "Error: src_new() failed in audio_device.cpp!\n" ); } } void AudioDevice::registerPort( AudioPort * ) { } void AudioDevice::unregisterPort( AudioPort * _port ) { } void AudioDevice::renamePort( AudioPort * ) { } void AudioDevice::resample( const surroundSampleFrame * _src, const fpp_t _frames, surroundSampleFrame * _dst, const sample_rate_t _src_sr, const sample_rate_t _dst_sr ) { if( m_srcState == NULL ) { return; } m_srcData.input_frames = _frames; m_srcData.output_frames = _frames; m_srcData.data_in = (float *) _src[0]; m_srcData.data_out = _dst[0]; m_srcData.src_ratio = (double) _dst_sr / _src_sr; m_srcData.end_of_input = 0; int error; if( ( error = src_process( m_srcState, &m_srcData ) ) ) { printf( "AudioDevice::resample(): error while resampling: %s\n", src_strerror( error ) ); } } int AudioDevice::convertToS16( const surroundSampleFrame * _ab, const fpp_t _frames, const float _master_gain, int_sample_t * _output_buffer, const bool _convert_endian ) { if( _convert_endian ) { int_sample_t temp; for( fpp_t frame = 0; frame < _frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < channels(); ++chnl ) { temp = static_cast( Mixer::clip( _ab[frame][chnl] * _master_gain ) * OUTPUT_SAMPLE_MULTIPLIER ); ( _output_buffer + frame * channels() )[chnl] = ( temp & 0x00ff ) << 8 | ( temp & 0xff00 ) >> 8; } } } else { for( fpp_t frame = 0; frame < _frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < channels(); ++chnl ) { ( _output_buffer + frame * channels() )[chnl] = static_cast( Mixer::clip( _ab[frame][chnl] * _master_gain ) * OUTPUT_SAMPLE_MULTIPLIER ); } } } return _frames * channels() * BYTES_PER_INT_SAMPLE; } void AudioDevice::clearS16Buffer( int_sample_t * _outbuf, const fpp_t _frames ) { #ifdef LMMS_DEBUG assert( _outbuf != NULL ); #endif memset( _outbuf, 0, _frames * channels() * BYTES_PER_INT_SAMPLE ); } bool AudioDevice::hqAudio() const { return configManager::inst()->value( "mixer", "hqaudio" ).toInt(); } lmms-1.1.3/src/core/audio/AudioFileDevice.cpp000066400000000000000000000044351247673406200210120ustar00rootroot00000000000000/* * AudioFileDevice.cpp - base-class for audio-device-classes which write * their output into a file * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "AudioFileDevice.h" #include "export_project_dialog.h" AudioFileDevice::AudioFileDevice( const sample_rate_t _sample_rate, const ch_cnt_t _channels, const QString & _file, const bool _use_vbr, const bitrate_t _nom_bitrate, const bitrate_t _min_bitrate, const bitrate_t _max_bitrate, const int _depth, Mixer* _mixer ) : AudioDevice( _channels, _mixer ), m_outputFile( _file ), m_useVbr( _use_vbr ), m_nomBitrate( _nom_bitrate ), m_minBitrate( _min_bitrate ), m_maxBitrate( _max_bitrate ), m_depth( _depth ) { setSampleRate( _sample_rate ); if( m_outputFile.open( QFile::WriteOnly | QFile::Truncate ) == false ) { QMessageBox::critical( NULL, exportProjectDialog::tr( "Could not open file" ), exportProjectDialog::tr( "Could not open file %1 " "for writing.\nPlease make " "sure you have write-" "permission to the file and " "the directory containing the " "file and try again!" ).arg( _file ), QMessageBox::Ok, QMessageBox::NoButton ); } } AudioFileDevice::~AudioFileDevice() { m_outputFile.close(); } int AudioFileDevice::writeData( const void* data, int len ) { if( m_outputFile.isOpen() ) { return m_outputFile.write( (const char *) data, len ); } return -1; } lmms-1.1.3/src/core/audio/AudioFileOgg.cpp000066400000000000000000000141441247673406200203250ustar00rootroot00000000000000/* * AudioFileOgg.cpp - audio-device which encodes wave-stream and writes it * into an OGG-file. This is used for song-export. * * This file is based on encode.c from vorbis-tools-source, for more information * see below. * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioFileOgg.h" #ifdef LMMS_HAVE_OGGVORBIS #include #include AudioFileOgg::AudioFileOgg( const sample_rate_t _sample_rate, const ch_cnt_t _channels, bool & _success_ful, const QString & _file, const bool _use_vbr, const bitrate_t _nom_bitrate, const bitrate_t _min_bitrate, const bitrate_t _max_bitrate, const int _depth, Mixer* _mixer ) : AudioFileDevice( _sample_rate, _channels, _file, _use_vbr, _nom_bitrate, _min_bitrate, _max_bitrate, _depth, _mixer ) { m_ok = _success_ful = outputFileOpened() && startEncoding(); } AudioFileOgg::~AudioFileOgg() { finishEncoding(); } inline int AudioFileOgg::writePage() { int written = writeData( m_og.header, m_og.header_len ); written += writeData( m_og.body, m_og.body_len ); return written; } bool AudioFileOgg::startEncoding() { vorbis_comment vc; const char * comments = "Cool=This song has been made using Linux " "MultiMedia Studio"; int comment_length = strlen( comments ); char * user_comments = new char[comment_length + 1]; strcpy( user_comments, comments ); vc.user_comments = &user_comments; vc.comment_lengths = &comment_length; vc.comments = 1; vc.vendor = NULL; m_channels = channels(); // vbr enabled? if( useVBR() == 0 ) { m_minBitrate = nominalBitrate(); // min for vbr m_maxBitrate = nominalBitrate(); // max for vbr } else { m_minBitrate = minBitrate(); // min for vbr m_maxBitrate = maxBitrate(); // max for vbr } m_rate = sampleRate(); // default-samplerate if( m_rate > 48000 ) { m_rate = 48000; setSampleRate( 48000 ); } m_serialNo = 0; // track-num? m_comments = &vc; // comments for ogg-file // Have vorbisenc choose a mode for us vorbis_info_init( &m_vi ); if( vorbis_encode_setup_managed( &m_vi, m_channels, m_rate, ( m_maxBitrate > 0 )? m_maxBitrate * 1000 : -1, nominalBitrate() * 1000, ( m_minBitrate > 0 )? m_minBitrate * 1000 : -1 ) ) { printf( "Mode initialization failed: invalid parameters for " "bitrate\n" ); vorbis_info_clear( &m_vi ); return false; } if( useVBR() == false ) { vorbis_encode_ctl( &m_vi, OV_ECTL_RATEMANAGE_AVG, NULL ); } else if( useVBR() == true ) { // Turn off management entirely (if it was turned on). vorbis_encode_ctl( &m_vi, OV_ECTL_RATEMANAGE_SET, NULL ); } vorbis_encode_setup_init( &m_vi ); // Now, set up the analysis engine, stream encoder, and other // preparation before the encoding begins. vorbis_analysis_init( &m_vd, &m_vi ); vorbis_block_init( &m_vd, &m_vb ); ogg_stream_init( &m_os, m_serialNo ); // Now, build the three header packets and send through to the stream // output stage (but defer actual file output until the main encode // loop) ogg_packet header_main; ogg_packet header_comments; ogg_packet header_codebooks; int result; // Build the packets vorbis_analysis_headerout( &m_vd, m_comments, &header_main, &header_comments, &header_codebooks ); // And stream them out ogg_stream_packetin( &m_os, &header_main ); ogg_stream_packetin( &m_os, &header_comments ); ogg_stream_packetin( &m_os, &header_codebooks ); while( ( result = ogg_stream_flush( &m_os, &m_og ) ) ) { if( !result ) { break; } int ret = writePage(); if( ret != m_og.header_len + m_og.body_len ) { // clean up finishEncoding(); delete[] user_comments; return false; } } delete[] user_comments; return true; } void AudioFileOgg::writeBuffer( const surroundSampleFrame * _ab, const fpp_t _frames, const float _master_gain ) { int eos = 0; float * * buffer = vorbis_analysis_buffer( &m_vd, _frames * BYTES_PER_SAMPLE * channels() ); for( fpp_t frame = 0; frame < _frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < channels(); ++chnl ) { buffer[chnl][frame] = _ab[frame][chnl] * _master_gain; } } vorbis_analysis_wrote( &m_vd, _frames ); // While we can get enough data from the library to analyse, // one block at a time... while( vorbis_analysis_blockout( &m_vd, &m_vb ) == 1 ) { // Do the main analysis, creating a packet vorbis_analysis( &m_vb, NULL ); vorbis_bitrate_addblock( &m_vb ); while( vorbis_bitrate_flushpacket( &m_vd, &m_op ) ) { // Add packet to bitstream ogg_stream_packetin( &m_os, &m_op ); // If we've gone over a page boundary, we can do // actual output, so do so (for however many pages // are available) while( !eos ) { int result = ogg_stream_pageout( &m_os, &m_og ); if( !result ) { break; } int ret = writePage(); if( ret != m_og.header_len + m_og.body_len ) { printf( "failed writing to " "outstream\n" ); return; } if( ogg_page_eos( &m_og ) ) { eos = 1; } } } } } void AudioFileOgg::finishEncoding() { if( m_ok ) { // just for flushing buffers... writeBuffer( NULL, 0, 0.0f ); // clean up ogg_stream_clear( &m_os ); vorbis_block_clear( &m_vb ); vorbis_dsp_clear( &m_vd ); vorbis_info_clear( &m_vi ); } } #endif lmms-1.1.3/src/core/audio/AudioFileWave.cpp000066400000000000000000000056731247673406200205220ustar00rootroot00000000000000/* * AudioFileWave.cpp - audio-device which encodes wave-stream and writes it * into a WAVE-file. This is used for song-export. * * Copyright (c) 2004-2013 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioFileWave.h" #include "endian_handling.h" AudioFileWave::AudioFileWave( const sample_rate_t _sample_rate, const ch_cnt_t _channels, bool & _success_ful, const QString & _file, const bool _use_vbr, const bitrate_t _nom_bitrate, const bitrate_t _min_bitrate, const bitrate_t _max_bitrate, const int _depth, Mixer* _mixer ) : AudioFileDevice( _sample_rate, _channels, _file, _use_vbr, _nom_bitrate, _min_bitrate, _max_bitrate, _depth, _mixer ), m_sf( NULL ) { _success_ful = outputFileOpened() && startEncoding(); } AudioFileWave::~AudioFileWave() { finishEncoding(); } bool AudioFileWave::startEncoding() { m_si.samplerate = sampleRate(); m_si.channels = channels(); m_si.frames = mixer()->framesPerPeriod(); m_si.sections = 1; m_si.seekable = 0; switch( depth() ) { case 32: m_si.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; break; case 16: default: m_si.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; break; } m_sf = sf_open( #ifdef LMMS_BUILD_WIN32 outputFile().toLocal8Bit().constData(), #else outputFile().toUtf8().constData(), #endif SFM_WRITE, &m_si ); sf_set_string ( m_sf, SF_STR_SOFTWARE, "LMMS" ); return true; } void AudioFileWave::writeBuffer( const surroundSampleFrame * _ab, const fpp_t _frames, const float _master_gain ) { if( depth() == 32 ) { float * buf = new float[_frames*channels()]; for( fpp_t frame = 0; frame < _frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < channels(); ++chnl ) { buf[frame*channels()+chnl] = _ab[frame][chnl] * _master_gain; } } sf_writef_float( m_sf, buf, _frames ); delete[] buf; } else { int_sample_t * buf = new int_sample_t[_frames * channels()]; convertToS16( _ab, _frames, _master_gain, buf, !isLittleEndian() ); sf_writef_short( m_sf, buf, _frames ); delete[] buf; } } void AudioFileWave::finishEncoding() { if( m_sf ) { sf_close( m_sf ); } } lmms-1.1.3/src/core/audio/AudioJack.cpp000066400000000000000000000240311247673406200176550ustar00rootroot00000000000000/* * AudioJack.cpp - support for JACK transport * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioJack.h" #ifdef LMMS_HAVE_JACK #include #include #include #include #include "debug.h" #include "engine.h" #include "templates.h" #include "gui_templates.h" #include "config_mgr.h" #include "LcdSpinBox.h" #include "AudioPort.h" #include "MainWindow.h" AudioJack::AudioJack( bool & _success_ful, Mixer* _mixer ) : AudioDevice( tLimit( configManager::inst()->value( "audiojack", "channels" ).toInt(), DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ), m_client( NULL ), m_active( false ), m_stopSemaphore( 1 ), m_tempOutBufs( new jack_default_audio_sample_t *[channels()] ), m_outBuf( new surroundSampleFrame[mixer()->framesPerPeriod()] ), m_framesDoneInCurBuf( 0 ), m_framesToDoInCurBuf( 0 ) { _success_ful = initJackClient(); if( _success_ful ) { m_stopSemaphore.acquire(); connect( this, SIGNAL( zombified() ), this, SLOT( restartAfterZombified() ), Qt::QueuedConnection ); } } AudioJack::~AudioJack() { m_stopSemaphore.release(); #ifdef AUDIO_PORT_SUPPORT while( m_portMap.size() ) { unregisterPort( m_portMap.begin().key() ); } #endif if( m_client != NULL ) { if( m_active ) { jack_deactivate( m_client ); } jack_client_close( m_client ); } delete[] m_tempOutBufs; delete[] m_outBuf; } void AudioJack::restartAfterZombified() { if( initJackClient() ) { m_active = false; startProcessing(); QMessageBox::information( engine::mainWindow(), tr( "JACK client restarted" ), tr( "LMMS was kicked by JACK for some reason. " "Therefore the JACK backend of LMMS has been " "restarted. You will have to make manual " "connections again." ) ); } else { QMessageBox::information( engine::mainWindow(), tr( "JACK server down" ), tr( "The JACK server seems to have been shutdown " "and starting a new instance failed. " "Therefore LMMS is unable to proceed. " "You should save your project and restart " "JACK and LMMS." ) ); } } bool AudioJack::initJackClient() { QString clientName = configManager::inst()->value( "audiojack", "clientname" ); if( clientName.isEmpty() ) { clientName = "lmms"; } const char * serverName = NULL; jack_status_t status; m_client = jack_client_open( clientName.toAscii().constData(), JackNullOption, &status, serverName ); if( m_client == NULL ) { printf( "jack_client_open() failed, status 0x%2.0x\n", status ); if( status & JackServerFailed ) { printf( "Could not connect to JACK server.\n" ); } return false; } if( status & JackNameNotUnique ) { printf( "there's already a client with name '%s', so unique " "name '%s' was assigned\n", clientName. toAscii().constData(), jack_get_client_name( m_client ) ); } // set process-callback jack_set_process_callback( m_client, staticProcessCallback, this ); // set shutdown-callback jack_on_shutdown( m_client, shutdownCallback, this ); if( jack_get_sample_rate( m_client ) != sampleRate() ) { setSampleRate( jack_get_sample_rate( m_client ) ); } for( ch_cnt_t ch = 0; ch < channels(); ++ch ) { QString name = QString( "master out " ) + ( ( ch % 2 ) ? "R" : "L" ) + QString::number( ch / 2 + 1 ); m_outputPorts.push_back( jack_port_register( m_client, name.toAscii().constData(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ) ); if( m_outputPorts.back() == NULL ) { printf( "no more JACK-ports available!\n" ); return false; } } return true; } void AudioJack::startProcessing() { m_stopped = false; if( m_active || m_client == NULL ) { return; } if( jack_activate( m_client ) ) { printf( "cannot activate client\n" ); return; } m_active = true; // try to sync JACK's and LMMS's buffer-size // jack_set_buffer_size( m_client, mixer()->framesPerPeriod() ); const char * * ports = jack_get_ports( m_client, NULL, NULL, JackPortIsPhysical | JackPortIsInput ); if( ports == NULL ) { printf( "no physical playback ports. you'll have to do " "connections at your own!\n" ); } else { for( ch_cnt_t ch = 0; ch < channels(); ++ch ) { if( jack_connect( m_client, jack_port_name( m_outputPorts[ch] ), ports[ch] ) ) { printf( "cannot connect output ports. you'll " "have to do connections at your own!\n" ); } } } free( ports ); } void AudioJack::stopProcessing() { m_stopSemaphore.acquire(); } void AudioJack::applyQualitySettings() { if( hqAudio() ) { setSampleRate( engine::mixer()->processingSampleRate() ); if( jack_get_sample_rate( m_client ) != sampleRate() ) { setSampleRate( jack_get_sample_rate( m_client ) ); } } AudioDevice::applyQualitySettings(); } void AudioJack::registerPort( AudioPort * _port ) { #ifdef AUDIO_PORT_SUPPORT // make sure, port is not already registered unregisterPort( _port ); const QString name[2] = { _port->name() + " L", _port->name() + " R" } ; for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { m_portMap[_port].ports[ch] = jack_port_register( m_client, name[ch].toAscii().constData(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); } #endif } void AudioJack::unregisterPort( AudioPort * _port ) { #ifdef AUDIO_PORT_SUPPORT if( m_portMap.contains( _port ) ) { for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { if( m_portMap[_port].ports[ch] != NULL ) { jack_port_unregister( m_client, m_portMap[_port].ports[ch] ); } } m_portMap.erase( m_portMap.find( _port ) ); } #endif } void AudioJack::renamePort( AudioPort * _port ) { #ifdef AUDIO_PORT_SUPPORT if( m_portMap.contains( _port ) ) { const QString name[2] = { _port->name() + " L", _port->name() + " R" }; for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { jack_port_set_name( m_portMap[_port].ports[ch], name[ch].toAscii().constData() ); } } #endif } int AudioJack::processCallback( jack_nframes_t _nframes, void * _udata ) { for( int c = 0; c < channels(); ++c ) { m_tempOutBufs[c] = (jack_default_audio_sample_t *) jack_port_get_buffer( m_outputPorts[c], _nframes ); } #ifdef AUDIO_PORT_SUPPORT const int frames = qMin( _nframes, mixer()->framesPerPeriod() ); for( jackPortMap::iterator it = m_portMap.begin(); it != m_portMap.end(); ++it ) { for( ch_cnt_t ch = 0; ch < channels(); ++ch ) { if( it.data().ports[ch] == NULL ) { continue; } jack_default_audio_sample_t * buf = (jack_default_audio_sample_t *) jack_port_get_buffer( it.data().ports[ch], _nframes ); for( int frame = 0; frame < frames; ++frame ) { buf[frame] = it.key()->firstBuffer()[frame][ch]; } } } #endif jack_nframes_t done = 0; while( done < _nframes && m_stopped == false ) { jack_nframes_t todo = qMin( _nframes, m_framesToDoInCurBuf - m_framesDoneInCurBuf ); const float gain = mixer()->masterGain(); for( int c = 0; c < channels(); ++c ) { jack_default_audio_sample_t * o = m_tempOutBufs[c]; for( jack_nframes_t frame = 0; frame < todo; ++frame ) { o[done+frame] = m_outBuf[m_framesDoneInCurBuf+frame][c] * gain; } } done += todo; m_framesDoneInCurBuf += todo; if( m_framesDoneInCurBuf == m_framesToDoInCurBuf ) { m_framesToDoInCurBuf = getNextBuffer( m_outBuf ); if( !m_framesToDoInCurBuf ) { m_stopped = true; m_stopSemaphore.release(); } m_framesDoneInCurBuf = 0; } } if( m_stopped == true ) { for( int c = 0; c < channels(); ++c ) { jack_default_audio_sample_t * b = m_tempOutBufs[c] + done; memset( b, 0, sizeof( *b ) * ( _nframes - done ) ); } } return 0; } int AudioJack::staticProcessCallback( jack_nframes_t _nframes, void * _udata ) { return static_cast( _udata )-> processCallback( _nframes, _udata ); } void AudioJack::shutdownCallback( void * _udata ) { AudioJack * _this = static_cast( _udata ); _this->m_client = NULL; _this->zombified(); } AudioJack::setupWidget::setupWidget( QWidget * _parent ) : AudioDevice::setupWidget( AudioJack::name(), _parent ) { QString cn = configManager::inst()->value( "audiojack", "clientname" ); if( cn.isEmpty() ) { cn = "lmms"; } m_clientName = new QLineEdit( cn, this ); m_clientName->setGeometry( 10, 20, 160, 20 ); QLabel * cn_lbl = new QLabel( tr( "CLIENT-NAME" ), this ); cn_lbl->setFont( pointSize<7>( cn_lbl->font() ) ); cn_lbl->setGeometry( 10, 40, 160, 10 ); LcdSpinBoxModel * m = new LcdSpinBoxModel( /* this */ ); m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS ); m->setStep( 2 ); m->setValue( configManager::inst()->value( "audiojack", "channels" ).toInt() ); m_channels = new LcdSpinBox( 1, this ); m_channels->setModel( m ); m_channels->setLabel( tr( "CHANNELS" ) ); m_channels->move( 180, 20 ); } AudioJack::setupWidget::~setupWidget() { delete m_channels->model(); } void AudioJack::setupWidget::saveSettings() { configManager::inst()->setValue( "audiojack", "clientname", m_clientName->text() ); configManager::inst()->setValue( "audiojack", "channels", QString::number( m_channels->value() ) ); } #include "moc_AudioJack.cxx" #endif lmms-1.1.3/src/core/audio/AudioOss.cpp000066400000000000000000000167671247673406200175720ustar00rootroot00000000000000/* * AudioOss.cpp - device-class that implements OSS-PCM-output * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioOss.h" #ifdef LMMS_HAVE_OSS #include #include #include #include "endian_handling.h" #include "LcdSpinBox.h" #include "engine.h" #include "gui_templates.h" #include "templates.h" #ifdef LMMS_HAVE_UNISTD_H #include #endif #ifdef LMMS_HAVE_FCNTL_H #include #endif #ifdef LMMS_HAVE_SYS_IOCTL_H #include #endif #ifdef LMMS_HAVE_STDLIB_H #include #endif #ifdef LMMS_HAVE_SYS_SOUNDCARD_H // This is recommended by OSS #include #elif defined(LMMS_HAVE_SOUNDCARD_H) // This is installed on some systems #include #endif #include "config_mgr.h" #ifndef _PATH_DEV_DSP #ifdef __OpenBSD__ #define _PATH_DEV_DSP "/dev/audio" #else #define _PATH_DEV_DSP "/dev/dsp" #endif #endif AudioOss::AudioOss( bool & _success_ful, Mixer* _mixer ) : AudioDevice( tLimit( configManager::inst()->value( "audiooss", "channels" ).toInt(), DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ), m_convertEndian( false ) { _success_ful = false; m_audioFD = open( probeDevice().toAscii().constData(), O_WRONLY, 0 ); if( m_audioFD == -1 ) { printf( "AudioOss: failed opening audio-device\n" ); return; } // Make the file descriptor use blocking writes with fcntl() if ( fcntl( m_audioFD, F_SETFL, fcntl( m_audioFD, F_GETFL ) & ~O_NONBLOCK ) < 0 ) { printf( "could not set audio blocking mode\n" ); return; } // set FD_CLOEXEC flag for file descriptor so forked processes // do not inherit it fcntl( m_audioFD, F_SETFD, fcntl( m_audioFD, F_GETFD ) | FD_CLOEXEC ); int frag_spec; for( frag_spec = 0; static_cast( 0x01 << frag_spec ) < mixer()->framesPerPeriod() * channels() * BYTES_PER_INT_SAMPLE; ++frag_spec ) { } frag_spec |= 0x00020000; // two fragments, for low latency if ( ioctl( m_audioFD, SNDCTL_DSP_SETFRAGMENT, &frag_spec ) < 0 ) { perror( "SNDCTL_DSP_SETFRAGMENT" ); printf( "Warning: Couldn't set audio fragment size\n" ); } unsigned int value; // Get a list of supported hardware formats if ( ioctl( m_audioFD, SNDCTL_DSP_GETFMTS, &value ) < 0 ) { perror( "SNDCTL_DSP_GETFMTS" ); printf( "Couldn't get audio format list\n" ); return; } // Set the audio format if( value & AFMT_S16_LE ) { value = AFMT_S16_LE; } else if( value & AFMT_S16_BE ) { value = AFMT_S16_BE; } else { printf(" Soundcard doesn't support signed 16-bit-data\n"); } if ( ioctl( m_audioFD, SNDCTL_DSP_SETFMT, &value ) < 0 ) { perror( "SNDCTL_DSP_SETFMT" ); printf( "Couldn't set audio format\n" ); return; } if( ( isLittleEndian() && ( value == AFMT_S16_BE ) ) || ( !isLittleEndian() && ( value == AFMT_S16_LE ) ) ) { m_convertEndian = true; } // Set the number of channels of output value = channels(); if ( ioctl( m_audioFD, SNDCTL_DSP_CHANNELS, &value ) < 0 ) { perror( "SNDCTL_DSP_CHANNELS" ); printf( "Cannot set the number of channels\n" ); return; } if( value != channels() ) { printf( "Couldn't set number of channels\n" ); return; } // Set the DSP frequency value = sampleRate(); if ( ioctl( m_audioFD, SNDCTL_DSP_SPEED, &value ) < 0 ) { perror( "SNDCTL_DSP_SPEED" ); printf( "Couldn't set audio frequency\n" ); return; } if( value != sampleRate() ) { value = mixer()->baseSampleRate(); if ( ioctl( m_audioFD, SNDCTL_DSP_SPEED, &value ) < 0 ) { perror( "SNDCTL_DSP_SPEED" ); printf( "Couldn't set audio frequency\n" ); return; } setSampleRate( value ); } _success_ful = true; } AudioOss::~AudioOss() { stopProcessing(); close( m_audioFD ); } QString AudioOss::probeDevice() { QString dev = configManager::inst()->value( "AudioOss", "Device" ); if( dev.isEmpty() ) { char * adev = getenv( "AUDIODEV" ); // Is there a standard // variable name? if( adev != NULL ) { dev = adev; } else { dev = _PATH_DEV_DSP; // default device } } // if the first open fails, look for other devices if( QFileInfo( dev ).isWritable() == false ) { int instance = -1; while( 1 ) { dev = _PATH_DEV_DSP + QString::number( ++instance ); if( !QFileInfo( dev ).exists() ) { dev = _PATH_DEV_DSP; break; } if( QFileInfo( dev ).isWritable() ) { break; } } } return dev; } void AudioOss::startProcessing() { if( !isRunning() ) { start( QThread::HighPriority ); } } void AudioOss::stopProcessing() { if( isRunning() ) { wait( 1000 ); terminate(); } } void AudioOss::applyQualitySettings() { if( hqAudio() ) { setSampleRate( engine::mixer()->processingSampleRate() ); unsigned int value = sampleRate(); if ( ioctl( m_audioFD, SNDCTL_DSP_SPEED, &value ) < 0 ) { perror( "SNDCTL_DSP_SPEED" ); printf( "Couldn't set audio frequency\n" ); return; } if( value != sampleRate() ) { value = mixer()->baseSampleRate(); if ( ioctl( m_audioFD, SNDCTL_DSP_SPEED, &value ) < 0 ) { perror( "SNDCTL_DSP_SPEED" ); printf( "Couldn't set audio frequency\n" ); return; } setSampleRate( value ); } } AudioDevice::applyQualitySettings(); } void AudioOss::run() { surroundSampleFrame * temp = new surroundSampleFrame[mixer()->framesPerPeriod()]; int_sample_t * outbuf = new int_sample_t[mixer()->framesPerPeriod() * channels()]; while( true ) { const fpp_t frames = getNextBuffer( temp ); if( !frames ) { break; } int bytes = convertToS16( temp, frames, mixer()->masterGain(), outbuf, m_convertEndian ); if( write( m_audioFD, outbuf, bytes ) != bytes ) { break; } } delete[] temp; delete[] outbuf; } AudioOss::setupWidget::setupWidget( QWidget * _parent ) : AudioDevice::setupWidget( AudioOss::name(), _parent ) { m_device = new QLineEdit( probeDevice(), this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); LcdSpinBoxModel * m = new LcdSpinBoxModel( /* this */ ); m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS ); m->setStep( 2 ); m->setValue( configManager::inst()->value( "audiooss", "channels" ).toInt() ); m_channels = new LcdSpinBox( 1, this ); m_channels->setModel( m ); m_channels->setLabel( tr( "CHANNELS" ) ); m_channels->move( 180, 20 ); } AudioOss::setupWidget::~setupWidget() { delete m_channels->model(); } void AudioOss::setupWidget::saveSettings() { configManager::inst()->setValue( "audiooss", "device", m_device->text() ); configManager::inst()->setValue( "audiooss", "channels", QString::number( m_channels->value() ) ); } #endif lmms-1.1.3/src/core/audio/AudioPort.cpp000066400000000000000000000062341247673406200177360ustar00rootroot00000000000000/* * AudioPort.cpp - base-class for objects providing sound at a port * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioPort.h" #include "AudioDevice.h" #include "EffectChain.h" #include "FxMixer.h" #include "engine.h" AudioPort::AudioPort( const QString & _name, bool _has_effect_chain ) : m_bufferUsage( NoUsage ), m_firstBuffer( new sampleFrame[engine::mixer()->framesPerPeriod()] ), m_secondBuffer( new sampleFrame[ engine::mixer()->framesPerPeriod()] ), m_extOutputEnabled( false ), m_nextFxChannel( 0 ), m_name( "unnamed port" ), m_effects( _has_effect_chain ? new EffectChain( NULL ) : NULL ) { engine::mixer()->clearAudioBuffer( m_firstBuffer, engine::mixer()->framesPerPeriod() ); engine::mixer()->clearAudioBuffer( m_secondBuffer, engine::mixer()->framesPerPeriod() ); engine::mixer()->addAudioPort( this ); setExtOutputEnabled( true ); } AudioPort::~AudioPort() { setExtOutputEnabled( false ); engine::mixer()->removeAudioPort( this ); delete[] m_firstBuffer; delete[] m_secondBuffer; delete m_effects; } void AudioPort::nextPeriod() { m_firstBufferLock.lock(); engine::mixer()->clearAudioBuffer( m_firstBuffer, engine::mixer()->framesPerPeriod() ); qSwap( m_firstBuffer, m_secondBuffer ); // this is how we decrease state of buffer-usage ;-) m_bufferUsage = ( m_bufferUsage != NoUsage ) ? ( ( m_bufferUsage == FirstBuffer ) ? NoUsage : FirstBuffer ) : NoUsage; m_firstBufferLock.unlock(); } void AudioPort::setExtOutputEnabled( bool _enabled ) { if( _enabled != m_extOutputEnabled ) { m_extOutputEnabled = _enabled; if( m_extOutputEnabled ) { engine::mixer()->audioDev()->registerPort( this ); } else { engine::mixer()->audioDev()->unregisterPort( this ); } } } void AudioPort::setName( const QString & _name ) { m_name = _name; engine::mixer()->audioDev()->renamePort( this ); } bool AudioPort::processEffects() { if( m_effects ) { lockFirstBuffer(); bool hasInputNoise = m_bufferUsage != NoUsage; bool more = m_effects->processAudioBuffer( m_firstBuffer, engine::mixer()->framesPerPeriod(), hasInputNoise ); unlockFirstBuffer(); return more; } return false; } void AudioPort::doProcessing( sampleFrame * ) { const bool me = processEffects(); if( me || m_bufferUsage != NoUsage ) { engine::fxMixer()->mixToChannel( firstBuffer(), nextFxChannel() ); nextPeriod(); } } lmms-1.1.3/src/core/audio/AudioPortAudio.cpp000066400000000000000000000273011247673406200207160ustar00rootroot00000000000000/* * AudioPortAudio.cpp - device-class that performs PCM-output via PortAudio * * Copyright (c) 2008 Csaba Hruska * Copyright (c) 2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioPortAudio.h" #ifndef LMMS_HAVE_PORTAUDIO void AudioPortAudioSetupUtil::updateDevices() { } void AudioPortAudioSetupUtil::updateChannels() { } #endif #ifdef LMMS_HAVE_PORTAUDIO #include #include #include "engine.h" #include "debug.h" #include "config_mgr.h" #include "gui_templates.h" #include "templates.h" #include "combobox.h" #include "LcdSpinBox.h" AudioPortAudio::AudioPortAudio( bool & _success_ful, Mixer * _mixer ) : AudioDevice( tLimit( configManager::inst()->value( "audioportaudio", "channels" ).toInt(), DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ), m_paStream( NULL ), m_wasPAInitError( false ), m_outBuf( new surroundSampleFrame[mixer()->framesPerPeriod()] ), m_outBufPos( 0 ), m_stopSemaphore( 1 ) { _success_ful = false; m_outBufSize = mixer()->framesPerPeriod(); PaError err = Pa_Initialize(); if( err != paNoError ) { printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) ); m_wasPAInitError = true; return; } if( Pa_GetDeviceCount() <= 0 ) { return; } const QString& backend = configManager::inst()->value( "audioportaudio", "backend" ); const QString& device = configManager::inst()->value( "audioportaudio", "device" ); PaDeviceIndex inDevIdx = -1; PaDeviceIndex outDevIdx = -1; const PaDeviceInfo * di; for( int i = 0; i < Pa_GetDeviceCount(); ++i ) { di = Pa_GetDeviceInfo( i ); if( di->name == device && Pa_GetHostApiInfo( di->hostApi )->name == backend ) { inDevIdx = i; outDevIdx = i; } } if( inDevIdx < 0 ) { inDevIdx = Pa_GetDefaultInputDevice(); } if( outDevIdx < 0 ) { outDevIdx = Pa_GetDefaultOutputDevice(); } if( inDevIdx < 0 || outDevIdx < 0 ) { return; } double inLatency = 0;//(double)mixer()->framesPerPeriod() / (double)sampleRate(); double outLatency = 0;//(double)mixer()->framesPerPeriod() / (double)sampleRate(); //inLatency = Pa_GetDeviceInfo( inDevIdx )->defaultLowInputLatency; //outLatency = Pa_GetDeviceInfo( outDevIdx )->defaultLowOutputLatency; const int samples = mixer()->framesPerPeriod(); // Configure output parameters. m_outputParameters.device = outDevIdx; m_outputParameters.channelCount = channels(); m_outputParameters.sampleFormat = paFloat32; // 32 bit floating point output m_outputParameters.suggestedLatency = outLatency; m_outputParameters.hostApiSpecificStreamInfo = NULL; // Configure input parameters. m_inputParameters.device = inDevIdx; m_inputParameters.channelCount = DEFAULT_CHANNELS; m_inputParameters.sampleFormat = paFloat32; // 32 bit floating point input m_inputParameters.suggestedLatency = inLatency; m_inputParameters.hostApiSpecificStreamInfo = NULL; // Open an audio I/O stream. err = Pa_OpenStream( &m_paStream, supportsCapture() ? &m_inputParameters : NULL, // The input parameter &m_outputParameters, // The outputparameter sampleRate(), samples, paNoFlag, // Don't use any flags _process_callback, // our callback function this ); if( err == paInvalidDevice && sampleRate() < 48000 ) { printf("Pa_OpenStream() failed with 44,1 KHz, trying again with 48 KHz\n"); // some backends or drivers do not allow 32 bit floating point data // with a samplerate of 44100 Hz setSampleRate( 48000 ); err = Pa_OpenStream( &m_paStream, supportsCapture() ? &m_inputParameters : NULL, // The input parameter &m_outputParameters, // The outputparameter sampleRate(), samples, paNoFlag, // Don't use any flags _process_callback, // our callback function this ); } if( err != paNoError ) { printf( "Couldn't open PortAudio: %s\n", Pa_GetErrorText( err ) ); return; } printf( "Input device: '%s' backend: '%s'\n", Pa_GetDeviceInfo( inDevIdx )->name, Pa_GetHostApiInfo( Pa_GetDeviceInfo( inDevIdx )->hostApi )->name ); printf( "Output device: '%s' backend: '%s'\n", Pa_GetDeviceInfo( outDevIdx )->name, Pa_GetHostApiInfo( Pa_GetDeviceInfo( outDevIdx )->hostApi )->name ); m_stopSemaphore.acquire(); // TODO: debug Mixer::pushInputFrames() //m_supportsCapture = true; _success_ful = true; } AudioPortAudio::~AudioPortAudio() { stopProcessing(); m_stopSemaphore.release(); if( !m_wasPAInitError ) { Pa_Terminate(); } delete[] m_outBuf; } void AudioPortAudio::startProcessing() { m_stopped = false; PaError err = Pa_StartStream( m_paStream ); if( err != paNoError ) { m_stopped = true; printf( "PortAudio error: %s\n", Pa_GetErrorText( err ) ); } } void AudioPortAudio::stopProcessing() { if( m_paStream && Pa_IsStreamActive( m_paStream ) ) { m_stopSemaphore.acquire(); PaError err = Pa_StopStream( m_paStream ); if( err != paNoError ) { printf( "PortAudio error: %s\n", Pa_GetErrorText( err ) ); } } } void AudioPortAudio::applyQualitySettings() { if( hqAudio() ) { setSampleRate( engine::mixer()->processingSampleRate() ); int samples = mixer()->framesPerPeriod(); PaError err = Pa_OpenStream( &m_paStream, supportsCapture() ? &m_inputParameters : NULL, // The input parameter &m_outputParameters, // The outputparameter sampleRate(), samples, paNoFlag, // Don't use any flags _process_callback, // our callback function this ); if( err != paNoError ) { printf( "Couldn't open PortAudio: %s\n", Pa_GetErrorText( err ) ); return; } } AudioDevice::applyQualitySettings(); } int AudioPortAudio::process_callback( const float *_inputBuffer, float * _outputBuffer, unsigned long _framesPerBuffer ) { if( supportsCapture() ) { mixer()->pushInputFrames( (sampleFrame*)_inputBuffer, _framesPerBuffer ); } if( m_stopped ) { memset( _outputBuffer, 0, _framesPerBuffer * channels() * sizeof(float) ); return paComplete; } while( _framesPerBuffer ) { if( m_outBufPos == 0 ) { // frames depend on the sample rate const fpp_t frames = getNextBuffer( m_outBuf ); if( !frames ) { m_stopped = true; m_stopSemaphore.release(); memset( _outputBuffer, 0, _framesPerBuffer * channels() * sizeof(float) ); return paComplete; } m_outBufSize = frames; } const int min_len = qMin( (int)_framesPerBuffer, m_outBufSize - m_outBufPos ); float master_gain = mixer()->masterGain(); for( fpp_t frame = 0; frame < min_len; ++frame ) { for( ch_cnt_t chnl = 0; chnl < channels(); ++chnl ) { ( _outputBuffer + frame * channels() )[chnl] = Mixer::clip( m_outBuf[frame][chnl] * master_gain ); } } _outputBuffer += min_len * channels(); _framesPerBuffer -= min_len; m_outBufPos += min_len; m_outBufPos %= m_outBufSize; } return paContinue; } int AudioPortAudio::_process_callback( const void *_inputBuffer, void * _outputBuffer, unsigned long _framesPerBuffer, const PaStreamCallbackTimeInfo * _timeInfo, PaStreamCallbackFlags _statusFlags, void * _arg ) { Q_UNUSED(_timeInfo); Q_UNUSED(_statusFlags); AudioPortAudio * _this = static_cast (_arg); return _this->process_callback( (const float*)_inputBuffer, (float*)_outputBuffer, _framesPerBuffer ); } void AudioPortAudioSetupUtil::updateDevices() { PaError err = Pa_Initialize(); if( err != paNoError ) { printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) ); return; } // get active backend const QString& backend = m_backendModel.currentText(); int hostApi = 0; const PaHostApiInfo * hi; for( int i = 0; i < Pa_GetHostApiCount(); ++i ) { hi = Pa_GetHostApiInfo( i ); if( backend == hi->name ) { hostApi = i; break; } } // get devices for selected backend m_deviceModel.clear(); const PaDeviceInfo * di; for( int i = 0; i < Pa_GetDeviceCount(); ++i ) { di = Pa_GetDeviceInfo( i ); if( di->hostApi == hostApi ) { m_deviceModel.addItem( di->name ); } } Pa_Terminate(); } void AudioPortAudioSetupUtil::updateChannels() { PaError err = Pa_Initialize(); if( err != paNoError ) { printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) ); return; } // get active backend Pa_Terminate(); } AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) : AudioDevice::setupWidget( AudioPortAudio::name(), _parent ) { m_backend = new comboBox( this, "BACKEND" ); m_backend->setGeometry( 64, 15, 260, 20 ); QLabel * backend_lbl = new QLabel( tr( "BACKEND" ), this ); backend_lbl->setFont( pointSize<7>( backend_lbl->font() ) ); backend_lbl->move( 8, 18 ); m_device = new comboBox( this, "DEVICE" ); m_device->setGeometry( 64, 35, 260, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->move( 8, 38 ); /* LcdSpinBoxModel * m = new LcdSpinBoxModel( ); m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS ); m->setStep( 2 ); m->setValue( configManager::inst()->value( "audioportaudio", "channels" ).toInt() ); m_channels = new LcdSpinBox( 1, this ); m_channels->setModel( m ); m_channels->setLabel( tr( "CHANNELS" ) ); m_channels->move( 308, 20 );*/ // Setup models PaError err = Pa_Initialize(); if( err != paNoError ) { printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) ); return; } // todo: setup backend model const PaHostApiInfo * hi; for( int i = 0; i < Pa_GetHostApiCount(); ++i ) { hi = Pa_GetHostApiInfo( i ); m_setupUtil.m_backendModel.addItem( hi->name ); } Pa_Terminate(); const QString& backend = configManager::inst()->value( "audioportaudio", "backend" ); const QString& device = configManager::inst()->value( "audioportaudio", "device" ); int i = qMax( 0, m_setupUtil.m_backendModel.findText( backend ) ); m_setupUtil.m_backendModel.setValue( i ); m_setupUtil.updateDevices(); i = qMax( 0, m_setupUtil.m_deviceModel.findText( device ) ); m_setupUtil.m_deviceModel.setValue( i ); connect( &m_setupUtil.m_backendModel, SIGNAL( dataChanged() ), &m_setupUtil, SLOT( updateDevices() ) ); connect( &m_setupUtil.m_deviceModel, SIGNAL( dataChanged() ), &m_setupUtil, SLOT( updateChannels() ) ); m_backend->setModel( &m_setupUtil.m_backendModel ); m_device->setModel( &m_setupUtil.m_deviceModel ); } AudioPortAudio::setupWidget::~setupWidget() { disconnect( &m_setupUtil.m_backendModel, SIGNAL( dataChanged() ), &m_setupUtil, SLOT( updateDevices() ) ); disconnect( &m_setupUtil.m_deviceModel, SIGNAL( dataChanged() ), &m_setupUtil, SLOT( updateChannels() ) ); } void AudioPortAudio::setupWidget::saveSettings() { configManager::inst()->setValue( "audioportaudio", "backend", m_setupUtil.m_backendModel.currentText() ); configManager::inst()->setValue( "audioportaudio", "device", m_setupUtil.m_deviceModel.currentText() ); /* configManager::inst()->setValue( "audioportaudio", "channels", QString::number( m_channels->value() ) );*/ } #endif #include "moc_AudioPortAudio.cxx" lmms-1.1.3/src/core/audio/AudioPulseAudio.cpp000066400000000000000000000160071247673406200210630ustar00rootroot00000000000000/* * AudioPulseAudio.cpp - device-class which implements PulseAudio-output * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "AudioPulseAudio.h" #ifdef LMMS_HAVE_PULSEAUDIO #include "endian_handling.h" #include "config_mgr.h" #include "LcdSpinBox.h" #include "gui_templates.h" #include "templates.h" #include "engine.h" static void stream_write_callback(pa_stream *s, size_t length, void *userdata) { static_cast( userdata )->streamWriteCallback( s, length ); } AudioPulseAudio::AudioPulseAudio( bool & _success_ful, Mixer* _mixer ) : AudioDevice( tLimit( configManager::inst()->value( "audiopa", "channels" ).toInt(), DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ), m_s( NULL ), m_quit( false ), m_convertEndian( false ) { _success_ful = false; m_sampleSpec.format = PA_SAMPLE_S16LE; m_sampleSpec.rate = sampleRate(); m_sampleSpec.channels = channels(); _success_ful = true; } AudioPulseAudio::~AudioPulseAudio() { stopProcessing(); } QString AudioPulseAudio::probeDevice() { QString dev = configManager::inst()->value( "audiopa", "device" ); if( dev.isEmpty() ) { if( getenv( "AUDIODEV" ) != NULL ) { return getenv( "AUDIODEV" ); } return "default"; } return dev; } void AudioPulseAudio::startProcessing() { if( !isRunning() ) { start( QThread::HighPriority ); } } void AudioPulseAudio::stopProcessing() { if( isRunning() ) { wait( 1000 ); terminate(); } } void AudioPulseAudio::applyQualitySettings() { if( hqAudio() ) { // setSampleRate( engine::mixer()->processingSampleRate() ); } AudioDevice::applyQualitySettings(); } /* This routine is called whenever the stream state changes */ static void stream_state_callback( pa_stream *s, void * userdata ) { switch( pa_stream_get_state( s ) ) { case PA_STREAM_CREATING: case PA_STREAM_TERMINATED: break; case PA_STREAM_READY: qDebug( "Stream successfully created\n" ); break; case PA_STREAM_FAILED: default: qCritical( "Stream errror: %s\n", pa_strerror(pa_context_errno( pa_stream_get_context( s ) ) ) ); } } /* This is called whenever the context status changes */ static void context_state_callback(pa_context *c, void *userdata) { AudioPulseAudio * _this = static_cast( userdata ); switch( pa_context_get_state( c ) ) { case PA_CONTEXT_CONNECTING: case PA_CONTEXT_AUTHORIZING: case PA_CONTEXT_SETTING_NAME: break; case PA_CONTEXT_READY: { qDebug( "Connection established.\n" ); _this->m_s = pa_stream_new( c, "lmms", &_this->m_sampleSpec, NULL); pa_stream_set_state_callback( _this->m_s, stream_state_callback, _this ); pa_stream_set_write_callback( _this->m_s, stream_write_callback, _this ); pa_buffer_attr buffer_attr; buffer_attr.maxlength = (uint32_t)(-1); // play silence in case of buffer underun instead of using default rewind buffer_attr.prebuf = 0; buffer_attr.minreq = (uint32_t)(-1); buffer_attr.fragsize = (uint32_t)(-1); double latency = (double)( engine::mixer()->framesPerPeriod() ) / (double)_this->sampleRate(); // ask PulseAudio for the desired latency (which might not be approved) buffer_attr.tlength = pa_usec_to_bytes( latency * PA_USEC_PER_MSEC, &_this->m_sampleSpec ); pa_stream_connect_playback( _this->m_s, NULL, &buffer_attr, PA_STREAM_ADJUST_LATENCY, NULL, // volume NULL ); break; } case PA_CONTEXT_TERMINATED: break; case PA_CONTEXT_FAILED: default: qCritical( "Connection failure: %s\n", pa_strerror( pa_context_errno( c ) ) ); } } void AudioPulseAudio::run() { pa_mainloop * mainLoop = pa_mainloop_new(); if( !mainLoop ) { qCritical( "pa_mainloop_new() failed.\n" ); return; } pa_mainloop_api * mainloop_api = pa_mainloop_get_api( mainLoop ); pa_context *context = pa_context_new( mainloop_api, "lmms" ); if ( context == NULL ) { qCritical( "pa_context_new() failed." ); return; } pa_context_set_state_callback( context, context_state_callback, this ); // connect the context pa_context_connect( context, NULL, (pa_context_flags) 0, NULL ); // run the main loop int ret = 0; m_quit = false; while( m_quit == false && pa_mainloop_iterate( mainLoop, 1, &ret ) >= 0 ) { } pa_stream_disconnect( m_s ); pa_stream_unref( m_s ); pa_context_disconnect( context ); pa_context_unref( context ); pa_mainloop_free( mainLoop ); } void AudioPulseAudio::streamWriteCallback( pa_stream *s, size_t length ) { const fpp_t fpp = mixer()->framesPerPeriod(); surroundSampleFrame * temp = new surroundSampleFrame[fpp]; int_sample_t* pcmbuf = (int_sample_t *)pa_xmalloc( fpp * channels() * sizeof(int_sample_t) ); size_t fd = 0; while( fd < length/4 && m_quit == false ) { const fpp_t frames = getNextBuffer( temp ); if( !frames ) { m_quit = true; break; } int bytes = convertToS16( temp, frames, mixer()->masterGain(), pcmbuf, m_convertEndian ); if( bytes > 0 ) { pa_stream_write( m_s, pcmbuf, bytes, NULL, 0, PA_SEEK_RELATIVE ); } fd += frames; } pa_xfree( pcmbuf ); delete[] temp; } AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) : AudioDevice::setupWidget( AudioPulseAudio::name(), _parent ) { m_device = new QLineEdit( AudioPulseAudio::probeDevice(), this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); LcdSpinBoxModel * m = new LcdSpinBoxModel( /* this */ ); m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS ); m->setStep( 2 ); m->setValue( configManager::inst()->value( "audiopa", "channels" ).toInt() ); m_channels = new LcdSpinBox( 1, this ); m_channels->setModel( m ); m_channels->setLabel( tr( "CHANNELS" ) ); m_channels->move( 180, 20 ); } AudioPulseAudio::setupWidget::~setupWidget() { delete m_channels->model(); } void AudioPulseAudio::setupWidget::saveSettings() { configManager::inst()->setValue( "audiopa", "device", m_device->text() ); configManager::inst()->setValue( "audiopa", "channels", QString::number( m_channels->value() ) ); } #endif lmms-1.1.3/src/core/audio/AudioSampleRecorder.cpp000066400000000000000000000054131247673406200217170ustar00rootroot00000000000000/* * AudioSampleRecorder.cpp - device-class that implements recording * audio-buffers into RAM * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioSampleRecorder.h" #include "SampleBuffer.h" #include "debug.h" AudioSampleRecorder::AudioSampleRecorder( const ch_cnt_t _channels, bool & _success_ful, Mixer * _mixer ) : AudioDevice( _channels, _mixer ), m_buffers() { _success_ful = true; } AudioSampleRecorder::~AudioSampleRecorder() { while( !m_buffers.empty() ) { delete[] m_buffers.front().first; m_buffers.erase( m_buffers.begin() ); } } f_cnt_t AudioSampleRecorder::framesRecorded() const { f_cnt_t frames = 0; for( BufferList::ConstIterator it = m_buffers.begin(); it != m_buffers.end(); ++it ) { frames += ( *it ).second; } return frames; } void AudioSampleRecorder::createSampleBuffer( SampleBuffer** sampleBuf ) { const f_cnt_t frames = framesRecorded(); // create buffer to store all recorded buffers in sampleFrame * data = new sampleFrame[frames]; // make sure buffer is cleaned up properly at the end... sampleFrame * data_ptr = data; #ifdef LMMS_DEBUG assert( data != NULL ); #endif // now copy all buffers into big buffer for( BufferList::ConstIterator it = m_buffers.begin(); it != m_buffers.end(); ++it ) { memcpy( data_ptr, ( *it ).first, ( *it ).second * sizeof( sampleFrame ) ); data_ptr += ( *it ).second; } // create according sample-buffer out of big buffer *sampleBuf = new SampleBuffer( data, frames ); ( *sampleBuf )->setSampleRate( sampleRate() ); delete[] data; } void AudioSampleRecorder::writeBuffer( const surroundSampleFrame * _ab, const fpp_t _frames, const float ) { sampleFrame * buf = new sampleFrame[_frames]; for( fpp_t frame = 0; frame < _frames; ++frame ) { for( ch_cnt_t chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl ) { buf[frame][chnl] = _ab[frame][chnl]; } } m_buffers.push_back( qMakePair( buf, _frames ) ); } lmms-1.1.3/src/core/audio/AudioSdl.cpp000066400000000000000000000114671247673406200175400ustar00rootroot00000000000000/* * AudioSdl.cpp - device-class that performs PCM-output via SDL * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AudioSdl.h" #ifdef LMMS_HAVE_SDL #include #include #include "engine.h" #include "debug.h" #include "config_mgr.h" #include "gui_templates.h" #include "templates.h" AudioSdl::AudioSdl( bool & _success_ful, Mixer* _mixer ) : AudioDevice( DEFAULT_CHANNELS, _mixer ), m_outBuf( new surroundSampleFrame[mixer()->framesPerPeriod()] ), m_convertedBufPos( 0 ), m_convertEndian( false ), m_stopSemaphore( 1 ) { _success_ful = false; m_convertedBufSize = mixer()->framesPerPeriod() * channels() * sizeof( int_sample_t ); m_convertedBuf = new Uint8[m_convertedBufSize]; if( SDL_Init( SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE ) < 0 ) { qCritical( "Couldn't initialize SDL: %s\n", SDL_GetError() ); return; } m_audioHandle.freq = sampleRate(); m_audioHandle.format = AUDIO_S16SYS; // we want it in byte-order // of system, so we don't have // to convert the buffers m_audioHandle.channels = channels(); m_audioHandle.samples = qMax( 1024, mixer()->framesPerPeriod()*2 ); m_audioHandle.callback = sdlAudioCallback; m_audioHandle.userdata = this; SDL_AudioSpec actual; // open the audio device, forcing the desired format if( SDL_OpenAudio( &m_audioHandle, &actual ) < 0 ) { qCritical( "Couldn't open SDL-audio: %s\n", SDL_GetError() ); return; } m_convertEndian = ( m_audioHandle.format != actual.format ); m_stopSemaphore.acquire(); _success_ful = true; } AudioSdl::~AudioSdl() { stopProcessing(); m_stopSemaphore.release(); SDL_CloseAudio(); SDL_Quit(); delete[] m_convertedBuf; delete[] m_outBuf; } void AudioSdl::startProcessing() { m_stopped = false; SDL_PauseAudio( 0 ); } void AudioSdl::stopProcessing() { if( SDL_GetAudioStatus() == SDL_AUDIO_PLAYING ) { m_stopSemaphore.acquire(); SDL_LockAudio(); SDL_PauseAudio( 1 ); SDL_UnlockAudio(); } } void AudioSdl::applyQualitySettings() { if( 0 )//hqAudio() ) { SDL_CloseAudio(); setSampleRate( engine::mixer()->processingSampleRate() ); m_audioHandle.freq = sampleRate(); SDL_AudioSpec actual; // open the audio device, forcing the desired format if( SDL_OpenAudio( &m_audioHandle, &actual ) < 0 ) { qCritical( "Couldn't open SDL-audio: %s\n", SDL_GetError() ); } } AudioDevice::applyQualitySettings(); } void AudioSdl::sdlAudioCallback( void * _udata, Uint8 * _buf, int _len ) { AudioSdl * _this = static_cast( _udata ); _this->sdlAudioCallback( _buf, _len ); } void AudioSdl::sdlAudioCallback( Uint8 * _buf, int _len ) { if( m_stopped ) { memset( _buf, 0, _len ); return; } while( _len ) { if( m_convertedBufPos == 0 ) { // frames depend on the sample rate const fpp_t frames = getNextBuffer( m_outBuf ); if( !frames ) { m_stopped = true; m_stopSemaphore.release(); memset( _buf, 0, _len ); return; } m_convertedBufSize = frames * channels() * sizeof( int_sample_t ); convertToS16( m_outBuf, frames, mixer()->masterGain(), (int_sample_t *)m_convertedBuf, m_convertEndian ); } const int min_len = qMin( _len, m_convertedBufSize - m_convertedBufPos ); memcpy( _buf, m_convertedBuf + m_convertedBufPos, min_len ); _buf += min_len; _len -= min_len; m_convertedBufPos += min_len; m_convertedBufPos %= m_convertedBufSize; } } AudioSdl::setupWidget::setupWidget( QWidget * _parent ) : AudioDevice::setupWidget( AudioSdl::name(), _parent ) { QString dev = configManager::inst()->value( "audiosdl", "device" ); m_device = new QLineEdit( dev, this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); } AudioSdl::setupWidget::~setupWidget() { } void AudioSdl::setupWidget::saveSettings() { configManager::inst()->setValue( "audiosdl", "device", m_device->text() ); } #endif lmms-1.1.3/src/core/base64.cpp000066400000000000000000000034401247673406200160070ustar00rootroot00000000000000/* * base64.cpp - namespace base64 with methods for encoding/decoding binary data * to/from base64 * * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "base64.h" #include "lmms_basics.h" #include #include namespace base64 { QString encode( const QVariant & _data ) { QBuffer buf; buf.open( QBuffer::WriteOnly ); QDataStream out( &buf ); out << _data; QByteArray data = buf.buffer(); QString dst; encode( data.constData(), data.size(), dst ); return( dst ); } QVariant decode( const QString & _b64, QVariant::Type _force_type ) { char * dst = NULL; int dsize = 0; base64::decode( _b64, &dst, &dsize ); QByteArray ba( dst, dsize ); QBuffer buf( &ba ); buf.open( QBuffer::ReadOnly ); QDataStream in( &buf ); QVariant ret; in >> ret; if( _force_type != QVariant::Invalid && ret.type() != _force_type ) { buf.reset(); in.setVersion( QDataStream::Qt_3_3 ); in >> ret; } delete[] dst; return( ret ); } } ; lmms-1.1.3/src/core/bb_track_container.cpp000066400000000000000000000120641247673406200205360ustar00rootroot00000000000000/* * bb_track_container.cpp - model-component of BB-Editor * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "bb_track_container.h" #include "bb_track.h" #include "combobox.h" #include "embed.h" #include "engine.h" #include "song.h" bbTrackContainer::bbTrackContainer() : TrackContainer(), m_bbComboBoxModel( this ) { connect( &m_bbComboBoxModel, SIGNAL( dataChanged() ), this, SLOT( currentBBChanged() ) ); // we *always* want to receive updates even in case BB actually did // not change upon setCurrentBB()-call connect( &m_bbComboBoxModel, SIGNAL( dataUnchanged() ), this, SLOT( currentBBChanged() ) ); } bbTrackContainer::~bbTrackContainer() { } bool bbTrackContainer::play( MidiTime _start, fpp_t _frames, f_cnt_t _offset, int _tco_num ) { bool played_a_note = false; if( lengthOfBB( _tco_num ) <= 0 ) { return false; } _start = _start % ( lengthOfBB( _tco_num ) * MidiTime::ticksPerTact() ); TrackList tl = tracks(); for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { if( ( *it )->play( _start, _frames, _offset, _tco_num ) ) { played_a_note = true; } } return played_a_note; } void bbTrackContainer::updateAfterTrackAdd() { if( numOfBBs() == 0 && !engine::getSong()->isLoadingProject() ) { engine::getSong()->addBBTrack(); } // make sure, new track(s) have TCOs for every beat/bassline for( int i = 0; i < qMax( 1, numOfBBs() ); ++i ) { createTCOsForBB( i ); } } tact_t bbTrackContainer::lengthOfBB( int _bb ) { MidiTime max_length = MidiTime::ticksPerTact(); const TrackList & tl = tracks(); for( TrackList::const_iterator it = tl.begin(); it != tl.end(); ++it ) { max_length = qMax( max_length, ( *it )->getTCO( _bb )->length() ); } return max_length.nextFullTact(); } int bbTrackContainer::numOfBBs() const { return engine::getSong()->countTracks( track::BBTrack ); } void bbTrackContainer::removeBB( int _bb ) { TrackList tl = tracks(); for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { delete ( *it )->getTCO( _bb ); ( *it )->removeTact( _bb * DefaultTicksPerTact ); } if( _bb <= currentBB() ) { setCurrentBB( qMax( currentBB() - 1, 0 ) ); } } void bbTrackContainer::swapBB( int _bb1, int _bb2 ) { TrackList tl = tracks(); for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { ( *it )->swapPositionOfTCOs( _bb1, _bb2 ); } updateComboBox(); } void bbTrackContainer::updateBBTrack( trackContentObject * _tco ) { bbTrack * t = bbTrack::findBBTrack( _tco->startPosition() / DefaultTicksPerTact ); if( t != NULL ) { t->dataChanged(); } } void bbTrackContainer::fixIncorrectPositions() { TrackList tl = tracks(); for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { for( int i = 0; i < numOfBBs(); ++i ) { ( *it )->getTCO( i )->movePosition( MidiTime( i, 0 ) ); } } } void bbTrackContainer::play() { if( engine::getSong()->playMode() != song::Mode_PlayBB ) { engine::getSong()->playBB(); } else { engine::getSong()->togglePause(); } } void bbTrackContainer::stop() { engine::getSong()->stop(); } void bbTrackContainer::updateComboBox() { const int cur_bb = currentBB(); m_bbComboBoxModel.clear(); for( int i = 0; i < numOfBBs(); ++i ) { bbTrack * bbt = bbTrack::findBBTrack( i ); m_bbComboBoxModel.addItem( bbt->name() ); } setCurrentBB( cur_bb ); } void bbTrackContainer::currentBBChanged() { // first make sure, all channels have a TCO at current BB createTCOsForBB( currentBB() ); // now update all track-labels (the current one has to become white, // the others gray) TrackList tl = engine::getSong()->tracks(); for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { if( ( *it )->type() == track::BBTrack ) { ( *it )->dataChanged(); } } } void bbTrackContainer::createTCOsForBB( int _bb ) { if( numOfBBs() == 0 || engine::getSong()->isLoadingProject() ) { return; } TrackList tl = tracks(); for( int i = 0; i < tl.size(); ++i ) { while( tl[i]->numOfTCOs() < _bb + 1 ) { MidiTime position = MidiTime( tl[i]->numOfTCOs(), 0 ); trackContentObject * tco = tl[i]->createTCO( position ); tco->movePosition( position ); tco->changeLength( MidiTime( 1, 0 ) ); } } } #include "moc_bb_track_container.cxx" lmms-1.1.3/src/core/config_mgr.cpp000066400000000000000000000261541247673406200170440ustar00rootroot00000000000000/* * config_mgr.cpp - implementation of class configManager * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include "lmmsversion.h" #include "config_mgr.h" #include "MainWindow.h" static inline QString ensureTrailingSlash( const QString & _s ) { if( _s.right( 1 ) != QDir::separator() ) { return( _s + QDir::separator() ); } return( _s ); } configManager * configManager::s_instanceOfMe = NULL; configManager::configManager() : m_lmmsRcFile( QDir::home().absolutePath() + QDir::separator() + ".lmmsrc.xml" ), m_workingDir( QDir::home().absolutePath() + QDir::separator() + "lmms" + QDir::separator() ), m_dataDir( qApp->applicationDirPath() #ifdef LMMS_BUILD_WIN32 + QDir::separator() + "data" + QDir::separator() #else .section( '/', 0, -2 ) + "/share/lmms/" #endif ), m_artworkDir( defaultArtworkDir() ), #ifdef LMMS_BUILD_WIN32 m_pluginDir( qApp->applicationDirPath() + QDir::separator() + "plugins" + QDir::separator() ), #else m_pluginDir( qApp->applicationDirPath() + '/' + PLUGIN_DIR ), #endif m_vstDir( m_workingDir + "vst" + QDir::separator() ), m_flDir( QDir::home().absolutePath() ) { } configManager::~configManager() { saveConfigFile(); } void configManager::setWorkingDir( const QString & _wd ) { m_workingDir = ensureTrailingSlash( _wd ); } void configManager::setVSTDir( const QString & _vd ) { m_vstDir = ensureTrailingSlash( _vd ); } void configManager::setArtworkDir( const QString & _ad ) { m_artworkDir = ensureTrailingSlash( _ad ); } void configManager::setFLDir( const QString & _fd ) { m_flDir = ensureTrailingSlash( _fd ); } void configManager::setLADSPADir( const QString & _fd ) { m_ladDir = _fd; } void configManager::setSTKDir( const QString & _fd ) { #ifdef LMMS_HAVE_STK m_stkDir = ensureTrailingSlash( _fd ); #endif } void configManager::setDefaultSoundfont( const QString & _sf ) { #ifdef LMMS_HAVE_FLUIDSYNTH m_defaultSoundfont = _sf; #endif } void configManager::setBackgroundArtwork( const QString & _ba ) { #ifdef LMMS_HAVE_FLUIDSYNTH m_backgroundArtwork = _ba; #endif } void configManager::addRecentlyOpenedProject( const QString & _file ) { m_recentlyOpenedProjects.removeAll( _file ); if( m_recentlyOpenedProjects.size() > 15 ) { m_recentlyOpenedProjects.removeLast(); } m_recentlyOpenedProjects.push_front( _file ); configManager::inst()->saveConfigFile(); } const QString & configManager::value( const QString & _class, const QString & _attribute ) const { if( m_settings.contains( _class ) ) { for( stringPairVector::const_iterator it = m_settings[_class].begin(); it != m_settings[_class].end(); ++it ) { if( ( *it ).first == _attribute ) { return( ( *it ).second ); } } } static QString empty; return( empty ); } void configManager::setValue( const QString & _class, const QString & _attribute, const QString & _value ) { if( m_settings.contains( _class ) ) { for( stringPairVector::iterator it = m_settings[_class].begin(); it != m_settings[_class].end(); ++it ) { if( ( *it ).first == _attribute ) { ( *it ).second = _value; return; } } } // not in map yet, so we have to add it... m_settings[_class].push_back( qMakePair( _attribute, _value ) ); } #ifdef LMMS_BUILD_WIN32 #include #include // taken from qt-win-opensource-src-4.2.2/src/corelib/io/qsettings.cpp static QString windowsConfigPath( int _type ) { QString result; QLibrary library( "shell32" ); typedef BOOL( WINAPI* GetSpecialFolderPath )( HWND, char *, int, BOOL ); GetSpecialFolderPath SHGetSpecialFolderPath = (GetSpecialFolderPath) library.resolve( "SHGetSpecialFolderPathA" ); if( SHGetSpecialFolderPath ) { char path[MAX_PATH]; SHGetSpecialFolderPath( 0, path, _type, false ); result = QString::fromLocal8Bit( path ); } return result; } #endif void configManager::loadConfigFile() { // read the XML file and create DOM tree QFile cfg_file( m_lmmsRcFile ); QDomDocument dom_tree; if( cfg_file.open( QIODevice::ReadOnly ) ) { QString errorString; int errorLine, errorCol; if( dom_tree.setContent( &cfg_file, false, &errorString, &errorLine, &errorCol ) ) { // get the head information from the DOM QDomElement root = dom_tree.documentElement(); QDomNode node = root.firstChild(); // create the settings-map out of the DOM while( !node.isNull() ) { if( node.isElement() && node.toElement().hasAttributes () ) { stringPairVector attr; QDomNamedNodeMap node_attr = node.toElement().attributes(); for( int i = 0; i < node_attr.count(); ++i ) { QDomNode n = node_attr.item( i ); if( n.isAttr() ) { attr.push_back( qMakePair( n.toAttr().name(), n.toAttr().value() ) ); } } m_settings[node.nodeName()] = attr; } else if( node.nodeName() == "recentfiles" ) { m_recentlyOpenedProjects.clear(); QDomNode n = node.firstChild(); while( !n.isNull() ) { if( n.isElement() && n.toElement().hasAttributes() ) { m_recentlyOpenedProjects << n.toElement().attribute( "path" ); } n = n.nextSibling(); } } node = node.nextSibling(); } // don't use dated theme folders as they break the UI (i.e. 0.4 != 1.0, etc) bool use_artwork_path = root.attribute( "version" ).startsWith( QString::number( LMMS_VERSION_MAJOR ) + "." + QString::number( LMMS_VERSION_MINOR ) ); if( use_artwork_path && value( "paths", "artwork" ) != "" ) { m_artworkDir = value( "paths", "artwork" ); if( !QDir( m_artworkDir ).exists() ) { m_artworkDir = defaultArtworkDir(); } if( m_artworkDir.right( 1 ) != QDir::separator() ) { m_artworkDir += QDir::separator(); } } setWorkingDir( value( "paths", "workingdir" ) ); setVSTDir( value( "paths", "vstdir" ) ); setFLDir( value( "paths", "fldir" ) ); setLADSPADir( value( "paths", "laddir" ) ); #ifdef LMMS_HAVE_STK setSTKDir( value( "paths", "stkdir" ) ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH setDefaultSoundfont( value( "paths", "defaultsf2" ) ); #endif setBackgroundArtwork( value( "paths", "backgroundartwork" ) ); } else if( QApplication::type() == QApplication::GuiClient ) { QMessageBox::warning( NULL, MainWindow::tr( "Configuration file" ), MainWindow::tr( "Error while parsing configuration file at line %1:%2: %3" ). arg( errorLine ). arg( errorCol ). arg( errorString ) ); } cfg_file.close(); } if( m_vstDir.isEmpty() || m_vstDir == QDir::separator() || !QDir( m_vstDir ).exists() ) { #ifdef LMMS_BUILD_WIN32 m_vstDir = windowsConfigPath( CSIDL_PROGRAM_FILES ) + QDir::separator() + "VstPlugins"; #else m_vstDir = ensureTrailingSlash( QDir::home().absolutePath() ); #endif } if( m_flDir.isEmpty() || m_flDir == QDir::separator() ) { m_flDir = ensureTrailingSlash( QDir::home().absolutePath() ); } if( m_ladDir.isEmpty() || m_ladDir == QDir::separator() || ( !m_ladDir.contains( ':' ) && !QDir( m_ladDir ).exists() ) ) { #if defined(LMMS_BUILD_WIN32) m_ladDir = m_pluginDir + "ladspa" + QDir::separator(); #elif defined(LMMS_BUILD_APPLE) m_ladDir = qApp->applicationDirPath() + "/../lib/lmms/ladspa/"; #else m_ladDir = qApp->applicationDirPath() + '/' + LIB_DIR + "/ladspa/"; #endif } #ifdef LMMS_HAVE_STK if( m_stkDir.isEmpty() || m_stkDir == QDir::separator() || !QDir( m_stkDir ).exists() ) { #if defined(LMMS_BUILD_WIN32) m_stkDir = m_dataDir + "stk/rawwaves/"; #elif defined(LMMS_BUILD_APPLE) m_stkDir = qApp->applicationDirPath() + "/../share/stk/rawwaves/"; #else m_stkDir = "/usr/share/stk/rawwaves/"; #endif } #endif QDir::setSearchPaths( "resources", QStringList() << artworkDir() << defaultArtworkDir() ); if( !QDir( m_workingDir ).exists() && QApplication::type() == QApplication::GuiClient && QMessageBox::question( 0, MainWindow::tr( "Working directory" ), MainWindow::tr( "The LMMS working directory %1 does not " "exist. Create it now? You can change the directory " "later via Edit -> Settings." ).arg( m_workingDir ), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { QDir().mkpath( m_workingDir ); } if( QDir( m_workingDir ).exists() ) { QDir().mkpath( userProjectsDir() ); QDir().mkpath( userSamplesDir() ); QDir().mkpath( userPresetsDir() ); } } void configManager::saveConfigFile() { setValue( "paths", "artwork", m_artworkDir ); setValue( "paths", "workingdir", m_workingDir ); setValue( "paths", "vstdir", m_vstDir ); setValue( "paths", "fldir", m_flDir ); setValue( "paths", "laddir", m_ladDir ); #ifdef LMMS_HAVE_STK setValue( "paths", "stkdir", m_stkDir ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH setValue( "paths", "defaultsf2", m_defaultSoundfont ); #endif setValue( "paths", "backgroundartwork", m_backgroundArtwork ); QDomDocument doc( "lmms-config-file" ); QDomElement lmms_config = doc.createElement( "lmms" ); lmms_config.setAttribute( "version", LMMS_VERSION ); doc.appendChild( lmms_config ); for( settingsMap::iterator it = m_settings.begin(); it != m_settings.end(); ++it ) { QDomElement n = doc.createElement( it.key() ); for( stringPairVector::iterator it2 = ( *it ).begin(); it2 != ( *it ).end(); ++it2 ) { n.setAttribute( ( *it2 ).first, ( *it2 ).second ); } lmms_config.appendChild( n ); } QDomElement recent_files = doc.createElement( "recentfiles" ); for( QStringList::iterator it = m_recentlyOpenedProjects.begin(); it != m_recentlyOpenedProjects.end(); ++it ) { QDomElement n = doc.createElement( "file" ); n.setAttribute( "path", *it ); recent_files.appendChild( n ); } lmms_config.appendChild( recent_files ); QString xml = "\n" + doc.toString( 2 ); QFile outfile( m_lmmsRcFile ); if( !outfile.open( QIODevice::WriteOnly | QIODevice::Truncate ) ) { QMessageBox::critical( NULL, MainWindow::tr( "Could not save config-file" ), MainWindow::tr( "Could not save configuration file %1. " "You're probably not permitted to " "write to this file.\n" "Please make sure you have write-" "access to the file and try again." ). arg( m_lmmsRcFile ) ); return; } outfile.write( xml.toUtf8() ); outfile.close(); } lmms-1.1.3/src/core/drumsynth.cpp000066400000000000000000000536231247673406200167700ustar00rootroot00000000000000/* * drumsynth.cpp - DrumSynth DS file renderer * * Copyright (c) 1998-2000 Paul Kellett (mda-vst.com) * Copyright (c) 2007 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "drumsynth.h" #include "lmmsconfig.h" #include #include #include #include //sin(), exp(), etc. #include //sscanf(), sprintf() #include //RAND_MAX #ifdef LMMS_BUILD_WIN32 #define powf pow #endif using namespace std; #define WORD __u16 #define DWORD __u32 #define WAVE_FORMAT_PCM 0x0001 // const int Fs = 44100; const float TwoPi = 6.2831853f; const int MAX = 0; const int ENV = 1; const int PNT = 2; const int dENV = 3; const int NEXTT = 4; // Bah, I'll move these into the class once I sepearate DrumsynthFile from DrumSynth // llama float envpts[8][3][32]; //envelope/time-level/point float envData[8][6]; //envelope running status int chkOn[8], sliLev[8]; //section on/off and level float timestretch; //overall time scaling short DD[1200], clippoint; float DF[1200]; float phi[1200]; long wavewords, wavemode=0; float mem_t=1.0f, mem_o=1.0f, mem_n=1.0f, mem_b=1.0f, mem_tune=1.0f, mem_time=1.0f; int DrumSynth::LongestEnv(void) { long e, eon, p; float l=0.f; for(e=1; e<7; e++) //3 { eon = e - 1; if(eon>2) eon=eon-1; p = 0; while (envpts[e][0][p + 1] >= 0.f) p++; envData[e][MAX] = envpts[e][0][p] * timestretch; if(chkOn[eon]==1) if(envData[e][MAX]>l) l=envData[e][MAX]; } //l *= timestretch; return 2400 + (1200 * (int)(l / 1200)); } float DrumSynth::LoudestEnv(void) { float loudest=0.f; int i=0; while (i<5) //2 { if(chkOn[i]==1) if(sliLev[i]>loudest) loudest=(float)sliLev[i]; i++; } return (loudest * loudest); } void DrumSynth::UpdateEnv(int e, long t) { float endEnv, dT; //0.2's added envData[e][NEXTT] = envpts[e][0][(long)(envData[e][PNT] + 1.f)] * timestretch; //get next point if(envData[e][NEXTT] < 0) envData[e][NEXTT] = 442000 * timestretch; //if end point, hold envData[e][ENV] = envpts[e][1][(long)(envData[e][PNT] + 0.f)] * 0.01f; //this level endEnv = envpts[e][1][(long)(envData[e][PNT] + 1.f)] * 0.01f; //next level dT = envData[e][NEXTT] - (float)t; if(dT < 1.0) dT = 1.0; envData[e][dENV] = (endEnv - envData[e][ENV]) / dT; envData[e][PNT] = envData[e][PNT] + 1.0f; } void DrumSynth::GetEnv(int env, const char *sec, const char *key, const char *ini) { char en[256], s[8]; int i=0, o=0, ep=0; GetPrivateProfileString(sec, key, "0,0 100,0", en, sizeof(en), ini); en[255]=0; //be safe! while(en[i]!=0) { if(en[i] == ',') { if(sscanf(s, "%f", &envpts[env][0][ep])==0) envpts[env][0][ep] = 0.f; o=0; } else if(en[i] == ' ') { if(sscanf(s, "%f", &envpts[env][1][ep])==0) envpts[env][1][ep] = 0.f; o=0; ep++; } else { s[o]=en[i]; o++; s[o]=0; } i++; } if(sscanf(s, "%f", &envpts[env][1][ep])==0) envpts[env][1][ep] = 0.f; envpts[env][0][ep + 1] = -1; envData[env][MAX] = envpts[env][0][ep]; } float DrumSynth::waveform(float ph, int form) { float w; switch (form) { case 0: w = (float)sin(fmod(ph,TwoPi)); break; //sine case 1: w = (float)fabs(2.0f*(float)sin(fmod(0.5f*ph,TwoPi)))-1.f; break; //sine^2 case 2: while(ph1.f) w=2.f-w; break; case 3: w = ph - TwoPi * (float)(int)(ph / TwoPi); //saw w = (0.3183098f * w) - 1.f; break; default: w = (sin(fmod(ph,TwoPi))>0.0)? 1.f: -1.f; break; //square } return w; } int DrumSynth::GetPrivateProfileString(const char *sec, const char *key, const char *def, char *buffer, int size, const char *file) { ifstream is; bool inSection = false; char *line; char *k, *b; int len = 0; line = (char*)malloc(200); is.open (file, ifstream::in); while (is.good()) { if (!inSection) { is.ignore( numeric_limits::max(), '['); if (!is.eof()) { is.getline(line, 200, ']'); if (strcasecmp(line, sec)==0) { inSection = true; } } } else if (!is.eof()) { is.getline(line, 200); if (line[0] == '[') break; k = strtok(line, " \t="); b = strtok(NULL, "\n\r\0"); if (k != 0 && strcasecmp(k, key)==0) { if (b==0) { len = 0; buffer[0] = 0; } else { k = (char *)(b + strlen(b)-1); while ( (k>=b) && (*k==' ' || *k=='\t') ) --k; *(k+1) = '\0'; len = strlen(b); if (len > size-1) len = size-1; strncpy(buffer, b, len+1); } break; } } } if (len == 0) { len = strlen(def); strncpy(buffer, def, size); } is.close(); free(line); return len; } int DrumSynth::GetPrivateProfileInt(const char *sec, const char *key, int def, const char *file) { char tmp[16]; int i=0; GetPrivateProfileString(sec, key, "", tmp, sizeof(tmp), file); sscanf(tmp, "%d", &i); if(tmp[0]==0) i=def; return i; } float DrumSynth::GetPrivateProfileFloat(const char *sec, const char *key, float def, const char *file) { char tmp[16]; float f=0.f; GetPrivateProfileString(sec, key, "", tmp, sizeof(tmp), file); sscanf(tmp, "%f", &f); if(tmp[0]==0) f=def; return f; } // Constantly opening and scanning each file for the setting really sucks. // But, the original did this, and we know it works. Will store file into // an associative array or something once we have a datastructure to load in to. // llama int DrumSynth::GetDSFileSamples(const char *dsfile, int16_t *&wave, int channels, sample_rate_t Fs) { //input file char sec[32]; char ver[32]; char comment[256]; int commentLen=0; //generation long Length, tpos=0, tplus, totmp, t, i, j; float x[3] = {0.f, 0.f, 0.f}; float MasterTune, randmax, randmax2; int MainFilter, HighPass; long NON, NT, TON, DiON, TDroop=0, DStep; float a, b=0.f, c=0.f, d=0.f, g, TT=0.f, TL, NL, F1, F2; float TphiStart=0.f, Tphi, TDroopRate, ddF, DAtten, DGain; long BON, BON2, BFStep, BFStep2, botmp; float BdF=0.f, BdF2=0.f, BPhi, BPhi2, BF, BF2, BQ, BQ2, BL, BL2; long OON, OF1Sync=0, OF2Sync=0, OMode, OW1, OW2; float Ophi1, Ophi2, OF1, OF2, OL, Ot=0 /*PG: init */, OBal1, OBal2, ODrive; float Ocf1, Ocf2, OcF, OcQ, OcA, Oc[6][2]; //overtone cymbal mode float Oc0=0.0f, Oc1=0.0f, Oc2=0.0f; float MFfb, MFtmp, MFres, MFin=0.f, MFout=0.f; float DownAve; long DownStart, DownEnd, jj; if(wavemode==0) //semi-real-time adjustments if working in memory!! { mem_t = 1.0f; mem_o = 1.0f; mem_n = 1.0f; mem_b = 1.0f; mem_tune = 0.0f; mem_time = 1.0f; } //try to read version from input file strcpy(sec, "General"); GetPrivateProfileString(sec,"Version","",ver,sizeof(ver),dsfile); ver[9]=0; if(strcasecmp(ver, "DrumSynth") != 0) {return 0;} //input fail if(ver[11] != '1' && ver[11] != '2') {return 0;} //version fail //read master parameters GetPrivateProfileString(sec,"Comment","",comment,sizeof(comment),dsfile); while((comment[commentLen]!=0) && (commentLen<254)) commentLen++; if(commentLen==0) { comment[0]=32; comment[1]=0; commentLen=1;} comment[commentLen+1]=0; commentLen++; if((commentLen % 2)==1) commentLen++; timestretch = .01f * mem_time * GetPrivateProfileFloat(sec,"Stretch",100.0,dsfile); if(timestretch<0.2f) timestretch=0.2f; if(timestretch>10.f) timestretch=10.f; DGain = 1.0f; //leave this here! DGain = (float)powf(10.0, 0.05 * GetPrivateProfileFloat(sec,"Level",0,dsfile)); MasterTune = GetPrivateProfileFloat(sec,"Tuning",0.0,dsfile); MasterTune = (float)powf(1.0594631f, MasterTune + mem_tune); MainFilter = 2 * GetPrivateProfileInt(sec,"Filter",0,dsfile); MFres = 0.0101f * GetPrivateProfileFloat(sec,"Resonance",0.0,dsfile); MFres = (float)powf(MFres, 0.5f); HighPass = GetPrivateProfileInt(sec,"HighPass",0,dsfile); GetEnv(7, sec, "FilterEnv", dsfile); //read noise parameters strcpy(sec, "Noise"); chkOn[1] = GetPrivateProfileInt(sec,"On",0,dsfile); sliLev[1] = GetPrivateProfileInt(sec,"Level",0,dsfile); NT = GetPrivateProfileInt(sec,"Slope",0,dsfile); GetEnv(2, sec, "Envelope", dsfile); NON = chkOn[1]; NL = (float)(sliLev[1] * sliLev[1]) * mem_n; if(NT<0) { a = 1.f + (NT / 105.f); d = -NT / 105.f; g = (1.f + 0.0005f * NT * NT) * NL; } else { a = 1.f; b = -NT / 50.f; c = (float)fabs((float)NT) / 100.f; g = NL; } //if(GetPrivateProfileInt(sec,"FixedSeq",0,dsfile)!=0) //srand(1); //fixed random sequence //read tone parameters strcpy(sec, "Tone"); chkOn[0] = GetPrivateProfileInt(sec,"On",0,dsfile); TON = chkOn[0]; sliLev[0] = GetPrivateProfileInt(sec,"Level",128,dsfile); TL = (float)(sliLev[0] * sliLev[0]) * mem_t; GetEnv(1, sec, "Envelope", dsfile); F1 = MasterTune * TwoPi * GetPrivateProfileFloat(sec,"F1",200.0,dsfile) / Fs; if(fabs(F1)<0.001f) F1=0.001f; //to prevent overtone ratio div0 F2 = MasterTune * TwoPi * GetPrivateProfileFloat(sec,"F2",120.0,dsfile) / Fs; TDroopRate = GetPrivateProfileFloat(sec,"Droop",0.f,dsfile); if(TDroopRate>0.f) { TDroopRate = (float)powf(10.0f, (TDroopRate - 20.0f) / 30.0f); TDroopRate = TDroopRate * -4.f / envData[1][MAX]; TDroop = 1; F2 = F1+((F2-F1)/(1.f-(float)exp(TDroopRate * envData[1][MAX]))); ddF = F1 - F2; } else ddF = F2-F1; Tphi = GetPrivateProfileFloat(sec,"Phase",90.f,dsfile) / 57.29578f; //degrees>radians //read overtone parameters strcpy(sec, "Overtones"); chkOn[2] = GetPrivateProfileInt(sec,"On",0,dsfile); OON = chkOn[2]; sliLev[2] = GetPrivateProfileInt(sec,"Level",128,dsfile); OL = (float)(sliLev[2] * sliLev[2]) * mem_o; GetEnv(3, sec, "Envelope1", dsfile); GetEnv(4, sec, "Envelope2", dsfile); OMode = GetPrivateProfileInt(sec,"Method",2,dsfile); OF1 = MasterTune * TwoPi * GetPrivateProfileFloat(sec,"F1",200.0,dsfile) / Fs; OF2 = MasterTune * TwoPi * GetPrivateProfileFloat(sec,"F2",120.0,dsfile) / Fs; OW1 = GetPrivateProfileInt(sec,"Wave1",0,dsfile); OW2 = GetPrivateProfileInt(sec,"Wave2",0,dsfile); OBal2 = (float)GetPrivateProfileInt(sec,"Param",50,dsfile); ODrive = (float)powf(OBal2, 3.0f) / (float)powf(50.0f, 3.0f); OBal2 *= 0.01f; OBal1 = 1.f - OBal2; Ophi1 = Tphi; Ophi2 = Tphi; if(MainFilter==0) MainFilter = GetPrivateProfileInt(sec,"Filter",0,dsfile); if((GetPrivateProfileInt(sec,"Track1",0,dsfile)==1) && (TON==1)) { OF1Sync = 1; OF1 = OF1 / F1; } if((GetPrivateProfileInt(sec,"Track2",0,dsfile)==1) && (TON==1)) { OF2Sync = 1; OF2 = OF2 / F1; } OcA = 0.28f + OBal1 * OBal1; //overtone cymbal mode OcQ = OcA * OcA; OcF = (1.8f - 0.7f * OcQ) * 0.92f; //multiply by env 2 OcA *= 1.0f + 4.0f * OBal1; //level is a compromise! Ocf1 = TwoPi / OF1; Ocf2 = TwoPi / OF2; for(i=0; i<6; i++) Oc[i][0] = Oc[i][1] = Ocf1 + (Ocf2 - Ocf1) * 0.2f * (float)i; //read noise band parameters strcpy(sec, "NoiseBand"); chkOn[3] = GetPrivateProfileInt(sec,"On",0,dsfile); BON = chkOn[3]; sliLev[3] = GetPrivateProfileInt(sec,"Level",128,dsfile); BL = (float)(sliLev[3] * sliLev[3]) * mem_b; BF = MasterTune * TwoPi * GetPrivateProfileFloat(sec,"F",1000.0,dsfile) / Fs; BPhi = TwoPi / 8.f; GetEnv(5, sec, "Envelope", dsfile); BFStep = GetPrivateProfileInt(sec,"dF",50,dsfile); BQ = (float)BFStep; BQ = BQ * BQ / (10000.f-6600.f*((float)sqrt(BF)-0.19f)); BFStep = 1 + (int)((40.f - (BFStep / 2.5f)) / (BQ + 1.f + (1.f * BF))); strcpy(sec, "NoiseBand2"); chkOn[4] = GetPrivateProfileInt(sec,"On",0,dsfile); BON2 = chkOn[4]; sliLev[4] = GetPrivateProfileInt(sec,"Level",128,dsfile); BL2 = (float)(sliLev[4] * sliLev[4]) * mem_b; BF2 = MasterTune * TwoPi * GetPrivateProfileFloat(sec,"F",1000.0,dsfile) / Fs; BPhi2 = TwoPi / 8.f; GetEnv(6, sec, "Envelope", dsfile); BFStep2 = GetPrivateProfileInt(sec,"dF",50,dsfile); BQ2 = (float)BFStep2; BQ2 = BQ2 * BQ2 / (10000.f-6600.f*((float)sqrt(BF2)-0.19f)); BFStep2 = 1 + (int)((40 - (BFStep2 / 2.5)) / (BQ2 + 1 + (1 * BF2))); //read distortion parameters strcpy(sec, "Distortion"); chkOn[5] = GetPrivateProfileInt(sec,"On",0,dsfile); DiON = chkOn[5]; DStep = 1 + GetPrivateProfileInt(sec,"Rate",0,dsfile); if(DStep==7) DStep=20; if(DStep==6) DStep=10; if(DStep==5) DStep=8; clippoint = 32700; DAtten = 1.0f; if(DiON==1) { DAtten = DGain * (short)LoudestEnv(); if(DAtten>32700) clippoint=32700; else clippoint=(short)DAtten; DAtten = (float)powf(2.0, 2.0 * GetPrivateProfileInt(sec,"Bits",0,dsfile)); DGain = DAtten * DGain * (float)powf(10.0, 0.05 * GetPrivateProfileInt(sec,"Clipping",0,dsfile)); } //prepare envelopes randmax = 1.f / RAND_MAX; randmax2 = 2.f * randmax; for (i=1;i<8;i++) { envData[i][NEXTT]=0; envData[i][PNT]=0; } Length = LongestEnv(); //allocate the buffer //if(wave!=NULL) free(wave); //wave = new int16_t[channels * (Length + 1280)]; //wave memory buffer wave = new int16_t[channels * Length]; //wave memory buffer if(wave==NULL) {return 0;} wavewords = 0; /* if(wavemode==0) { //open output file fp = fopen(wavfile, "wb"); if(!fp) {return 3;} //output fail //set up INFO chunk WI.list = 0x5453494C; WI.listLength = 36 + commentLen; WI.info = 0x4F464E49; WI.isft = 0x54465349; WI.isftLength = 16; strcpy(WI.software, "DrumSynth v2.0 "); WI.software[15]=0; WI.icmt = 0x544D4349; WI.icmtLength = commentLen; //write WAV header WH.riff = 0x46464952; WH.riffLength = 36 + (2 * Length) + 44 + commentLen; WH.wave = 0x45564157; WH.fmt = 0x20746D66; WH.waveLength = 16; WH.wFormatTag = WAVE_FORMAT_PCM; WH.nChannels = 1; WH.nSamplesPerSec = Fs; WH.nAvgBytesPerSec = 2 * Fs; WH.nBlockAlign = 2; WH.wBitsPerSample = 16; WH.data = 0x61746164; WH.dataLength = 2 * Length; fwrite(&WH, 1, 44, fp); } */ //generate tpos = 0; while(tpos=envData[2][MAX]) NON=0; } else { for(j=0; j<1200; j++) DF[j]=0.f; } if(TON==1) //tone { TphiStart = Tphi; if(TDroop==1) { for(t=tpos; t<=tplus; t++) phi[t - tpos] = F2 + (ddF * (float)exp(t * TDroopRate)); } else { for(t=tpos; t<=tplus; t++) phi[t - tpos] = F1 + (t / envData[1][MAX]) * ddF; } for(t=tpos; t<=tplus; t++) { totmp = t - tpos; if(t < envData[1][NEXTT]) envData[1][ENV] = envData[1][ENV] + envData[1][dENV]; else UpdateEnv(1, t); Tphi = Tphi + phi[totmp]; DF[totmp] += TL * envData[1][ENV] * (float)sin(fmod(Tphi,TwoPi));//overflow? } if(t>=envData[1][MAX]) TON=0; } else for(j=0; j<1200; j++) phi[j]=F2; //for overtone sync if(BON==1) //noise band 1 { for(t=tpos; t<=tplus; t++) { if(t < envData[5][NEXTT]) envData[5][ENV] = envData[5][ENV] + envData[5][dENV]; else UpdateEnv(5, t); if((t % BFStep) == 0) BdF = randmax * (float)rand() - 0.5f; BPhi = BPhi + BF + BQ * BdF; botmp = t - tpos; DF[botmp] = DF[botmp] + (float)cos(fmod(BPhi,TwoPi)) * envData[5][ENV] * BL; } if(t>=envData[5][MAX]) BON=0; } if(BON2==1) //noise band 2 { for(t=tpos; t<=tplus; t++) { if(t < envData[6][NEXTT]) envData[6][ENV] = envData[6][ENV] + envData[6][dENV]; else UpdateEnv(6, t); if((t % BFStep2) == 0) BdF2 = randmax * (float)rand() - 0.5f; BPhi2 = BPhi2 + BF2 + BQ2 * BdF2; botmp = t - tpos; DF[botmp] = DF[botmp] + (float)cos(fmod(BPhi2,TwoPi)) * envData[6][ENV] * BL2; } if(t>=envData[6][MAX]) BON2=0; } for (t=tpos; t<=tplus; t++) { if(OON==1) //overtones { if(t=envData[3][MAX]) //wait for OT2 { envData[3][ENV] = 0; envData[3][dENV] = 0; envData[3][NEXTT] = 999999; } else UpdateEnv(3, t); } // if(t=envData[4][MAX]) //wait for OT1 { envData[4][ENV] = 0; envData[4][dENV] = 0; envData[4][NEXTT] = 999999; } else UpdateEnv(4, t); } // TphiStart = TphiStart + phi[t - tpos]; if(OF1Sync==1) Ophi1 = TphiStart * OF1; else Ophi1 = Ophi1 + OF1; if(OF2Sync==1) Ophi2 = TphiStart * OF2; else Ophi2 = Ophi2 + OF2; Ot=0.0f; switch (OMode) { case 0: //add Ot = OBal1 * envData[3][ENV] * waveform(Ophi1, OW1); Ot = OL * (Ot + OBal2 * envData[4][ENV] * waveform(Ophi2, OW2)); break; case 1: //FM Ot = ODrive * envData[4][ENV] * waveform(Ophi2, OW2); Ot = OL * envData[3][ENV] * waveform(Ophi1 + Ot, OW1); break; case 2: //RM Ot = (1 - ODrive / 8) + (((ODrive / 8) * envData[4][ENV]) * waveform(Ophi2, OW2)); Ot = OL * envData[3][ENV] * waveform(Ophi1, OW1) * Ot; break; case 3: //808 Cymbal for(j=0; j<6; j++) { Oc[j][0] += 1.0f; if(Oc[j][0]>Oc[j][1]) { Oc[j][0] -= Oc[j][1]; Ot = OL * envData[3][ENV]; } } Ocf1 = envData[4][ENV] * OcF; //filter freq Oc0 += Ocf1 * Oc1; Oc1 += Ocf1 * (Ot + Oc2 - OcQ * Oc1 - Oc0); //bpf Oc2 = Ot; Ot = Oc1; break; } } if(MainFilter==1) //filter overtones { if(t0.2f) MFfb = 1.001f - (float)powf(10.0f, MFtmp - 1); else MFfb = 0.999f - 0.7824f * MFtmp; MFtmp = Ot + MFres * (1.f + (1.f/MFfb)) * (MFin - MFout); MFin = MFfb * (MFin - MFtmp) + MFtmp; MFout = MFfb * (MFout - MFin) + MFin; DF[t - tpos] = DF[t - tpos] + (MFout - (HighPass * Ot)); } else if(MainFilter==2) //filter all { if(t0.2f) MFfb = 1.001f - (float)powf(10.0f, MFtmp - 1); else MFfb = 0.999f - 0.7824f * MFtmp; MFtmp = DF[t - tpos] + Ot + MFres * (1.f + (1.f/MFfb)) * (MFin - MFout); MFin = MFfb * (MFin - MFtmp) + MFtmp; MFout = MFfb * (MFout - MFin) + MFin; DF[t - tpos] = MFout - (HighPass * (DF[t - tpos] + Ot)); } // PG: Ot is uninitialized else DF[t - tpos] = DF[t - tpos] + Ot; //no filter } if(DiON==1) //bit resolution { for(j=0; j<1200; j++) DF[j] = DGain * (int)(DF[j] / DAtten); for(j=0; j<1200; j+=DStep) //downsampling { DownAve = 0; DownStart = j; DownEnd = j + DStep - 1; for(jj = DownStart; jj<=DownEnd; jj++) DownAve = DownAve + DF[jj]; DownAve = DownAve / DStep; for(jj = DownStart; jj<=DownEnd; jj++) DF[jj] = DownAve; } } else for(j=0; j<1200; j++) DF[j] *= DGain; for(j = 0; j<1200; j++) //clipping + output { if(DF[j] > clippoint) wave[wavewords++] = clippoint; else if(DF[j] < -clippoint) wave[wavewords++] = -clippoint; else wave[wavewords++] = (short)DF[j]; for (int c = 1; c < channels; c++) { wave[wavewords] = wave[wavewords-1]; wavewords++; } } tpos = tpos + 1200; } /* if(wavemode==0) { fwrite(wave, 2, Length, fp); //write data fwrite(&WI, 1, 44, fp); //write INFO chunk fwrite(&comment, 1, commentLen, fp); fclose(fp); } wavemode = 0; //force compatibility!! */ return Length; } lmms-1.1.3/src/core/engine.cpp000066400000000000000000000110571247673406200161730ustar00rootroot00000000000000/* * engine.cpp - implementation of LMMS' engine-system * * Copyright (c) 2006-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "engine.h" #include "AutomationEditor.h" #include "bb_editor.h" #include "bb_track_container.h" #include "config_mgr.h" #include "ControllerRackView.h" #include "FxMixer.h" #include "FxMixerView.h" #include "InstrumentTrack.h" #include "ladspa_2_lmms.h" #include "MainWindow.h" #include "Mixer.h" #include "Pattern.h" #include "PianoRoll.h" #include "PresetPreviewPlayHandle.h" #include "ProjectJournal.h" #include "project_notes.h" #include "Plugin.h" #include "SongEditor.h" #include "song.h" #include "BandLimitedWave.h" bool engine::s_hasGUI = true; bool engine::s_suppressMessages = false; float engine::s_framesPerTick; Mixer* engine::s_mixer = NULL; FxMixer * engine::s_fxMixer = NULL; FxMixerView * engine::s_fxMixerView = NULL; MainWindow * engine::s_mainWindow = NULL; bbTrackContainer * engine::s_bbTrackContainer = NULL; song * engine::s_song = NULL; SongEditor* engine::s_songEditor = NULL; AutomationEditor * engine::s_automationEditor = NULL; bbEditor * engine::s_bbEditor = NULL; PianoRoll* engine::s_pianoRoll = NULL; projectNotes * engine::s_projectNotes = NULL; ProjectJournal * engine::s_projectJournal = NULL; ladspa2LMMS * engine::s_ladspaManager = NULL; DummyTrackContainer * engine::s_dummyTC = NULL; ControllerRackView * engine::s_controllerRackView = NULL; QMap engine::s_pluginFileHandling; void engine::init( const bool _has_gui ) { s_hasGUI = _has_gui; // generate (load from file) bandlimited wavetables BandLimitedWave::generateWaves(); initPluginFileHandling(); s_projectJournal = new ProjectJournal; s_mixer = new Mixer; s_song = new song; s_fxMixer = new FxMixer; s_bbTrackContainer = new bbTrackContainer; s_ladspaManager = new ladspa2LMMS; s_projectJournal->setJournalling( true ); s_mixer->initDevices(); if( s_hasGUI ) { s_mainWindow = new MainWindow; s_songEditor = new SongEditor( s_song ); s_fxMixerView = new FxMixerView; s_controllerRackView = new ControllerRackView; s_projectNotes = new projectNotes; s_bbEditor = new bbEditor( s_bbTrackContainer ); s_pianoRoll = new PianoRoll; s_automationEditor = new AutomationEditor; s_mainWindow->finalize(); } PresetPreviewPlayHandle::init(); s_dummyTC = new DummyTrackContainer; s_mixer->startProcessing(); } void engine::destroy() { s_projectJournal->stopAllJournalling(); s_mixer->stopProcessing(); deleteHelper( &s_projectNotes ); deleteHelper( &s_songEditor ); deleteHelper( &s_bbEditor ); deleteHelper( &s_pianoRoll ); deleteHelper( &s_automationEditor ); deleteHelper( &s_fxMixerView ); PresetPreviewPlayHandle::cleanup(); InstrumentTrackView::cleanupWindowCache(); s_song->clearProject(); deleteHelper( &s_bbTrackContainer ); deleteHelper( &s_dummyTC ); deleteHelper( &s_mixer ); deleteHelper( &s_fxMixer ); deleteHelper( &s_ladspaManager ); //delete configManager::inst(); deleteHelper( &s_projectJournal ); s_mainWindow = NULL; deleteHelper( &s_song ); delete configManager::inst(); } void engine::updateFramesPerTick() { s_framesPerTick = s_mixer->processingSampleRate() * 60.0f * 4 / DefaultTicksPerTact / s_song->getTempo(); } void engine::initPluginFileHandling() { Plugin::DescriptorList pluginDescriptors; Plugin::getDescriptorsOfAvailPlugins( pluginDescriptors ); for( Plugin::DescriptorList::ConstIterator it = pluginDescriptors.begin(); it != pluginDescriptors.end(); ++it ) { if( it->type == Plugin::Instrument ) { const QStringList & ext = QString( it->supportedFileTypes ). split( QChar( ',' ) ); for( QStringList::const_iterator itExt = ext.begin(); itExt != ext.end(); ++itExt ) { s_pluginFileHandling[*itExt] = it->name; } } } } lmms-1.1.3/src/core/fft_helpers.cpp000066400000000000000000000121561247673406200172300ustar00rootroot00000000000000/* * fft_helpers.cpp - some functions around FFT analysis * * Copyright (c) 2008-2012 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "fft_helpers.h" #include "lmms_math.h" /* returns biggest value from abs_spectrum[spec_size] array returns -1 on error */ float maximum(float *abs_spectrum, unsigned int spec_size) { float maxi=0; unsigned int i; if ( abs_spectrum==NULL ) return -1; if (spec_size<=0) return -1; for ( i=0; imaxi ) maxi=abs_spectrum[i]; } return maxi; } /* apply hanning or hamming window to channel returns -1 on error */ int hanming(float *timebuffer, int length, WINDOWS type) { int i; float alpha; if ( (timebuffer==NULL)||(length<=0) ) return -1; switch (type) { case HAMMING: alpha=0.54; break; case HANNING: default: alpha=0.5; break; } for ( i=0; i num_new returns 0 on success, else -1 */ int compressbands(float *absspec_buffer, float *compressedband, int num_old, int num_new, int bottom, int top) { float ratio; int i, usefromold; float j; float j_min, j_max; if ( (absspec_buffer==NULL)||(compressedband==NULL) ) return -1; if ( num_old=num_old ) top=num_old-1; usefromold=num_old-(num_old-top)-bottom; ratio=(float)usefromold/(float)num_new; // foreach new subband for ( i=0; i * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ladspa_2_lmms.h" ladspa2LMMS::ladspa2LMMS() { l_sortable_plugin_t plugins = getSortedPlugins(); for( l_sortable_plugin_t::iterator it = plugins.begin(); it != plugins.end(); it++ ) { ladspa_key_t key = (*it).second; ladspaManagerDescription * desc = getDescription( key ); if( desc->type == SOURCE ) { m_instruments.append( qMakePair( getName( key ), key ) ); } else if( desc->type == TRANSFER && ( desc->inputChannels == desc->outputChannels && ( desc->inputChannels == 1 || desc->inputChannels == 2 || desc->inputChannels == 4 )/* && isRealTimeCapable( key )*/ ) ) { m_validEffects.append( qMakePair( getName( key ), key ) ); } else if( desc->type == TRANSFER && ( desc->inputChannels != desc->outputChannels || ( desc->inputChannels != 1 && desc->inputChannels != 2 && desc->inputChannels != 4 ) || !isRealTimeCapable( key ) ) ) { m_invalidEffects.append( qMakePair( getName( key ), key ) ); } else if( desc->type == SINK ) { m_analysisTools.append( qMakePair( getName( key ), key ) ); } else if( desc->type == OTHER ) { m_otherPlugins.append( qMakePair( getName( key ), key ) ); } } } ladspa2LMMS::~ladspa2LMMS() { } QString ladspa2LMMS::getShortName( const ladspa_key_t & _key ) { QString name = getName( _key ); if( name.indexOf( "(" ) > 0 ) { name = name.left( name.indexOf( "(" ) ); } if( name.indexOf( " - " ) > 0 ) { name = name.left( name.indexOf( " - " ) ); } if( name.indexOf( " " ) > 0 ) { name = name.left( name.indexOf( " " ) ); } Qt::CaseSensitivity cs = Qt::CaseInsensitive; if( name.indexOf( " with ", 0, cs ) > 0 ) { name = name.left( name.indexOf( " with ", 0, cs ) ); } if( name.indexOf( ",", 0, cs ) > 0 ) { name = name.left( name.indexOf( ",", 0, cs ) ); } if( name.length() > 40 ) { int i = 40; while( name[i] != ' ' && i > 0 ) { i--; } name = name.left( i ); } if( name.length() == 0 ) { name = "LADSPA Plugin"; } return name; } lmms-1.1.3/src/core/ladspa_manager.cpp000066400000000000000000000544341247673406200176720ustar00rootroot00000000000000/* * ladspa_manager.cpp - a class to manage loading and instantiation * of ladspa plugins * * Copyright (c) 2005-2008 Danny McRae * Copyright (c) 2011-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "config_mgr.h" #include "ladspa_manager.h" ladspaManager::ladspaManager() { QStringList ladspaDirectories = QString( getenv( "LADSPA_PATH" ) ). split( LADSPA_PATH_SEPERATOR ); ladspaDirectories += configManager::inst()->ladspaDir().split( ',' ); ladspaDirectories.push_back( configManager::inst()->pluginDir() + "ladspa" ); #ifndef LMMS_BUILD_WIN32 ladspaDirectories.push_back( qApp->applicationDirPath() + '/' + LIB_DIR + "ladspa" ); ladspaDirectories.push_back( "/usr/lib/ladspa" ); ladspaDirectories.push_back( "/usr/lib64/ladspa" ); ladspaDirectories.push_back( "/usr/local/lib/ladspa" ); ladspaDirectories.push_back( "/usr/local/lib64/ladspa" ); ladspaDirectories.push_back( "/Library/Audio/Plug-Ins/LADSPA" ); #endif for( QStringList::iterator it = ladspaDirectories.begin(); it != ladspaDirectories.end(); ++it ) { QDir directory( ( *it ) ); QFileInfoList list = directory.entryInfoList(); for( QFileInfoList::iterator file = list.begin(); file != list.end(); ++file ) { const QFileInfo & f = *file; if( !f.isFile() || f.fileName().right( 3 ).toLower() != #ifdef LMMS_BUILD_WIN32 "dll" #else ".so" #endif ) { continue; } QLibrary plugin_lib( f.absoluteFilePath() ); if( plugin_lib.load() == true ) { LADSPA_Descriptor_Function descriptorFunction = ( LADSPA_Descriptor_Function ) plugin_lib.resolve( "ladspa_descriptor" ); if( descriptorFunction != NULL ) { addPlugins( descriptorFunction, f.fileName() ); } } else { qWarning() << plugin_lib.errorString(); } } } l_ladspa_key_t keys = m_ladspaManagerMap.keys(); for( l_ladspa_key_t::iterator it = keys.begin(); it != keys.end(); it++ ) { m_sortedPlugins.append( qMakePair( getName( *it ), *it ) ); } qSort( m_sortedPlugins ); } ladspaManager::~ladspaManager() { for( ladspaManagerMapType::iterator it = m_ladspaManagerMap.begin(); it != m_ladspaManagerMap.end(); ++it ) { delete it.value(); } } ladspaManagerDescription * ladspaManager::getDescription( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { return( m_ladspaManagerMap[_plugin] ); } else { return( NULL ); } } void ladspaManager::addPlugins( LADSPA_Descriptor_Function _descriptor_func, const QString & _file ) { const LADSPA_Descriptor * descriptor; for( long pluginIndex = 0; ( descriptor = _descriptor_func( pluginIndex ) ) != NULL; ++pluginIndex ) { ladspa_key_t key( _file, QString( descriptor->Label ) ); if( m_ladspaManagerMap.contains( key ) ) { continue; } ladspaManagerDescription * plugIn = new ladspaManagerDescription; plugIn->descriptorFunction = _descriptor_func; plugIn->index = pluginIndex; plugIn->inputChannels = getPluginInputs( descriptor ); plugIn->outputChannels = getPluginOutputs( descriptor ); if( plugIn->inputChannels == 0 && plugIn->outputChannels > 0 ) { plugIn->type = SOURCE; } else if( plugIn->inputChannels > 0 && plugIn->outputChannels > 0 ) { plugIn->type = TRANSFER; } else if( plugIn->inputChannels > 0 && plugIn->outputChannels == 0 ) { plugIn->type = SINK; } else { plugIn->type = OTHER; } m_ladspaManagerMap[key] = plugIn; } } uint16_t ladspaManager::getPluginInputs( const LADSPA_Descriptor * _descriptor ) { uint16_t inputs = 0; for( uint16_t port = 0; port < _descriptor->PortCount; port++ ) { if( LADSPA_IS_PORT_INPUT( _descriptor->PortDescriptors[port] ) && LADSPA_IS_PORT_AUDIO( _descriptor->PortDescriptors[port] ) ) { QString name = QString( _descriptor->PortNames[port] ); if( name.toUpper().contains( "IN" ) ) { inputs++; } } } return inputs; } uint16_t ladspaManager::getPluginOutputs( const LADSPA_Descriptor * _descriptor ) { uint16_t outputs = 0; for( uint16_t port = 0; port < _descriptor->PortCount; port++ ) { if( LADSPA_IS_PORT_OUTPUT( _descriptor->PortDescriptors[port] ) && LADSPA_IS_PORT_AUDIO( _descriptor->PortDescriptors[port] ) ) { QString name = QString( _descriptor->PortNames[port] ); if( name.toUpper().contains( "OUT" ) ) { outputs++; } } } return outputs; } l_sortable_plugin_t ladspaManager::getSortedPlugins() { return( m_sortedPlugins ); } QString ladspaManager::getLabel( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( QString( descriptor->Label ) ); } else { return( QString( "" ) ); } } bool ladspaManager::hasRealTimeDependency( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_REALTIME( descriptor->Properties ) ); } else { return( false ); } } bool ladspaManager::isInplaceBroken( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_INPLACE_BROKEN( descriptor->Properties ) ); } else { return( false ); } } bool ladspaManager::isRealTimeCapable( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_HARD_RT_CAPABLE( descriptor->Properties ) ); } else { return( false ); } } QString ladspaManager::getName( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( QString( descriptor->Name ) ); } else { return( QString( "" ) ); } } QString ladspaManager::getMaker( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( QString( descriptor->Maker ) ); } else { return( QString( "" ) ); } } QString ladspaManager::getCopyright( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( QString( descriptor->Copyright ) ); } else { return( QString( "" ) ); } } uint32_t ladspaManager::getPortCount( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( descriptor->PortCount ); } else { return( 0 ); } } bool ladspaManager::isPortInput( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_PORT_INPUT ( descriptor->PortDescriptors[_port] ) ); } else { return( false ); } } bool ladspaManager::isPortOutput( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_PORT_OUTPUT ( descriptor->PortDescriptors[_port] ) ); } else { return( false ); } } bool ladspaManager::isPortAudio( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_PORT_AUDIO ( descriptor->PortDescriptors[_port] ) ); } else { return( false ); } } bool ladspaManager::isPortControl( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( LADSPA_IS_PORT_CONTROL ( descriptor->PortDescriptors[_port] ) ); } else { return( false ); } } bool ladspaManager::areHintsSampleRateDependent( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; return( LADSPA_IS_HINT_SAMPLE_RATE ( hintDescriptor ) ); } else { return( false ); } } float ladspaManager::getLowerBound( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; if( LADSPA_IS_HINT_BOUNDED_BELOW( hintDescriptor ) ) { return( descriptor->PortRangeHints[_port].LowerBound ); } else { return( NOHINT ); } } else { return( NOHINT ); } } float ladspaManager::getUpperBound( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; if( LADSPA_IS_HINT_BOUNDED_ABOVE( hintDescriptor ) ) { return( descriptor->PortRangeHints[_port].UpperBound ); } else { return( NOHINT ); } } else { return( NOHINT ); } } bool ladspaManager::isPortToggled( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; return( LADSPA_IS_HINT_TOGGLED( hintDescriptor ) ); } else { return( false ); } } float ladspaManager::getDefaultSetting( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; switch( hintDescriptor & LADSPA_HINT_DEFAULT_MASK ) { case LADSPA_HINT_DEFAULT_NONE: return( NOHINT ); case LADSPA_HINT_DEFAULT_MINIMUM: return( descriptor->PortRangeHints[_port]. LowerBound ); case LADSPA_HINT_DEFAULT_LOW: if( LADSPA_IS_HINT_LOGARITHMIC ( hintDescriptor ) ) { return( exp( log( descriptor->PortRangeHints[_port].LowerBound ) * 0.75 + log( descriptor->PortRangeHints[_port].UpperBound ) * 0.25 ) ); } else { return( descriptor->PortRangeHints[_port].LowerBound * 0.75 + descriptor->PortRangeHints[_port].UpperBound * 0.25 ); } case LADSPA_HINT_DEFAULT_MIDDLE: if( LADSPA_IS_HINT_LOGARITHMIC ( hintDescriptor ) ) { return( sqrt( descriptor->PortRangeHints[_port].LowerBound * descriptor->PortRangeHints[_port].UpperBound ) ); } else { return( 0.5 * ( descriptor->PortRangeHints[_port].LowerBound + descriptor->PortRangeHints[_port].UpperBound ) ); } case LADSPA_HINT_DEFAULT_HIGH: if( LADSPA_IS_HINT_LOGARITHMIC ( hintDescriptor ) ) { return( exp( log( descriptor->PortRangeHints[_port].LowerBound ) * 0.25 + log( descriptor->PortRangeHints[_port].UpperBound ) * 0.75 ) ); } else { return( descriptor->PortRangeHints[_port].LowerBound * 0.25 + descriptor->PortRangeHints[_port].UpperBound * 0.75 ); } case LADSPA_HINT_DEFAULT_MAXIMUM: return( descriptor->PortRangeHints[_port].UpperBound ); case LADSPA_HINT_DEFAULT_0: return( 0.0 ); case LADSPA_HINT_DEFAULT_1: return( 1.0 ); case LADSPA_HINT_DEFAULT_100: return( 100.0 ); case LADSPA_HINT_DEFAULT_440: return( 440.0 ); default: return( NOHINT ); } } else { return( NOHINT ); } } bool ladspaManager::isLogarithmic( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; return( LADSPA_IS_HINT_LOGARITHMIC( hintDescriptor ) ); } else { return( false ); } } bool ladspaManager::isInteger( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); LADSPA_PortRangeHintDescriptor hintDescriptor = descriptor->PortRangeHints[_port].HintDescriptor; return( LADSPA_IS_HINT_INTEGER( hintDescriptor ) ); } else { return( false ); } } QString ladspaManager::getPortName( const ladspa_key_t & _plugin, uint32_t _port ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( QString( descriptor->PortNames[_port] ) ); } else { return( QString( "" ) ); } } const void * ladspaManager::getImplementationData( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( descriptor->ImplementationData ); } else { return( NULL ); } } const LADSPA_Descriptor * ladspaManager::getDescriptor( const ladspa_key_t & _plugin ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( descriptor ); } else { return( NULL ); } } LADSPA_Handle ladspaManager::instantiate( const ladspa_key_t & _plugin, uint32_t _sample_rate ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); return( ( descriptor->instantiate ) ( descriptor, _sample_rate ) ); } else { return( NULL ); } } bool ladspaManager::connectPort( const ladspa_key_t & _plugin, LADSPA_Handle _instance, uint32_t _port, LADSPA_Data * _data_location ) { if( m_ladspaManagerMap.contains( _plugin ) && _port < getPortCount( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->connect_port != NULL ) { ( descriptor->connect_port ) ( _instance, _port, _data_location ); return( true ); } } return( false ); } bool ladspaManager::activate( const ladspa_key_t & _plugin, LADSPA_Handle _instance ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->activate != NULL ) { ( descriptor->activate ) ( _instance ); return( true ); } } return( false ); } bool ladspaManager::run( const ladspa_key_t & _plugin, LADSPA_Handle _instance, uint32_t _sample_count ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->run != NULL ) { ( descriptor->run ) ( _instance, _sample_count ); return( true ); } } return( false ); } bool ladspaManager::runAdding( const ladspa_key_t & _plugin, LADSPA_Handle _instance, uint32_t _sample_count ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->run_adding != NULL && descriptor->set_run_adding_gain != NULL ) { ( descriptor->run_adding ) ( _instance, _sample_count ); return( true ); } } return( false ); } bool ladspaManager::setRunAddingGain( const ladspa_key_t & _plugin, LADSPA_Handle _instance, LADSPA_Data _gain ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->run_adding != NULL && descriptor->set_run_adding_gain != NULL ) { ( descriptor->set_run_adding_gain ) ( _instance, _gain ); return( true ); } } return( false ); } bool ladspaManager::deactivate( const ladspa_key_t & _plugin, LADSPA_Handle _instance ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->deactivate != NULL ) { ( descriptor->deactivate ) ( _instance ); return( true ); } } return( false ); } bool ladspaManager::cleanup( const ladspa_key_t & _plugin, LADSPA_Handle _instance ) { if( m_ladspaManagerMap.contains( _plugin ) ) { LADSPA_Descriptor_Function descriptorFunction = m_ladspaManagerMap[_plugin]->descriptorFunction; const LADSPA_Descriptor * descriptor = descriptorFunction( m_ladspaManagerMap[_plugin]->index ); if( descriptor->cleanup != NULL ) { ( descriptor->cleanup ) ( _instance ); return( true ); } } return( false ); } lmms-1.1.3/src/core/main.cpp000066400000000000000000000336401247673406200156540ustar00rootroot00000000000000/* * main.cpp - just main.cpp which is starting up app... * * Copyright (c) 2004-2014 Tobias Doerffel * Copyright (c) 2012-2013 Paul Giblock

    * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lmmsconfig.h" #include "lmmsversion.h" #include "versioninfo.h" // denormals stripping #ifdef __SSE__ #include #endif #ifdef __SSE3__ #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #ifdef LMMS_HAVE_SCHED_H #include #endif #ifdef LMMS_HAVE_SYS_TIME_H #include #endif #ifdef LMMS_HAVE_PROCESS_H #include #endif #ifdef LMMS_HAVE_UNISTD_H #include #endif #include "config_mgr.h" #include "embed.h" #include "engine.h" #include "LmmsStyle.h" #include "ImportFilter.h" #include "MainWindow.h" #include "ProjectRenderer.h" #include "DataFile.h" #include "song.h" #include "LmmsPalette.h" static inline QString baseName( const QString & _file ) { return( QFileInfo( _file ).absolutePath() + "/" + QFileInfo( _file ).completeBaseName() ); } inline void loadTranslation( const QString & _tname, const QString & _dir = configManager::inst()->localeDir() ) { QTranslator * t = new QTranslator( QCoreApplication::instance() ); QString name = _tname + ".qm"; t->load( name, _dir ); QCoreApplication::instance()->installTranslator( t ); } int main( int argc, char * * argv ) { // intialize RNG srand( getpid() + time( 0 ) ); // set denormal protection for this thread #ifdef __SSE3__ /* DAZ flag */ _MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON ); #endif #ifdef __SSE__ /* FTZ flag */ _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON ); #endif bool core_only = false; bool fullscreen = true; bool exit_after_import = false; QString file_to_load, file_to_save, file_to_import, render_out, profilerOutputFile; for( int i = 1; i < argc; ++i ) { if( argc > i && ( ( QString( argv[i] ) == "--render" || QString( argv[i] ) == "-r" ) || ( QString( argv[i] ) == "--help" || QString( argv[i] ) == "-h" ) ) ) { core_only = true; } else if( argc > i && QString( argv[i] ) == "-geometry" ) { // option -geometry is filtered by Qt later, // so we need to check its presence now to // determine, if the application should run in // fullscreen mode (default, no -geometry given). fullscreen = false; } } QCoreApplication * app = core_only ? new QCoreApplication( argc, argv ) : new QApplication( argc, argv ) ; Mixer::qualitySettings qs( Mixer::qualitySettings::Mode_HighQuality ); ProjectRenderer::OutputSettings os( 44100, false, 160, ProjectRenderer::Depth_16Bit ); ProjectRenderer::ExportFileFormats eff = ProjectRenderer::WaveFile; for( int i = 1; i < argc; ++i ) { if( QString( argv[i] ) == "--version" || QString( argv[i] ) == "-v" ) { printf( "LMMS %s\n(%s %s, Qt %s, %s)\n\n" "Copyright (c) 2004-2014 LMMS developers.\n\n" "This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public\n" "License as published by the Free Software Foundation; either\n" "version 2 of the License, or (at your option) any later version.\n\n" "Try \"%s --help\" for more information.\n\n", LMMS_VERSION, PLATFORM, MACHINE, QT_VERSION_STR, GCC_VERSION, argv[0] ); return( EXIT_SUCCESS ); } else if( argc > i && ( QString( argv[i] ) == "--help" || QString( argv[i] ) == "-h" ) ) { printf( "LMMS %s\n" "Copyright (c) 2004-2014 LMMS developers.\n\n" "usage: lmms [ -r ] [ options ]\n" " [ -u ]\n" " [ -d ]\n" " [ -h ]\n" " [ ]\n\n" "-r, --render render given project file\n" "-o, --output render into \n" "-f, --output-format specify format of render-output where\n" " format is either 'wav' or 'ogg'.\n" "-s, --samplerate specify output samplerate in Hz\n" " range: 44100 (default) to 192000\n" "-b, --bitrate specify output bitrate in kHz\n" " default: 160.\n" "-i, --interpolation specify interpolation method\n" " possible values:\n" " - linear\n" " - sincfastest (default)\n" " - sincmedium\n" " - sincbest\n" "-x, --oversampling specify oversampling\n" " possible values: 1, 2, 4, 8\n" " default: 2\n" "-u, --upgrade [out] upgrade file and save as \n" " standard out is used if no output file is specifed\n" "-d, --dump dump XML of compressed file \n" "-v, --version show version information and exit.\n" "-h, --help show this usage information and exit.\n\n", LMMS_VERSION ); return( EXIT_SUCCESS ); } else if( argc > i+1 && ( QString( argv[i] ) == "--upgrade" || QString( argv[i] ) == "-u" ) ) { QString inFile( argv[i + 1] ); DataFile dataFile( inFile ); if (argc > i+2) { const QString outFile = argv[i + 2]; dataFile.writeFile( outFile ); } else { QTextStream ts( stdout ); dataFile.write( ts ); fflush( stdout ); } return( EXIT_SUCCESS ); } else if( argc > i && ( QString( argv[i] ) == "--dump" || QString( argv[i] ) == "-d" ) ) { QFile f( argv[i + 1] ); f.open( QIODevice::ReadOnly ); QString d = qUncompress( f.readAll() ); printf( "%s\n", d.toUtf8().constData() ); return( EXIT_SUCCESS ); } else if( argc > i && ( QString( argv[i] ) == "--render" || QString( argv[i] ) == "-r" ) ) { file_to_load = QString( argv[i + 1] ); render_out = baseName( file_to_load ) + "."; ++i; } else if( argc > i && ( QString( argv[i] ) == "--output" || QString( argv[i] ) == "-o" ) ) { render_out = baseName( QString( argv[i + 1] ) ) + "."; ++i; } else if( argc > i && ( QString( argv[i] ) == "--format" || QString( argv[i] ) == "-f" ) ) { const QString ext = QString( argv[i + 1] ); if( ext == "wav" ) { eff = ProjectRenderer::WaveFile; } #ifdef LMMS_HAVE_OGGVORBIS else if( ext == "ogg" ) { eff = ProjectRenderer::OggFile; } #endif else { printf( "\nInvalid output format %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); return( EXIT_FAILURE ); } ++i; } else if( argc > i && ( QString( argv[i] ) == "--samplerate" || QString( argv[i] ) == "-s" ) ) { sample_rate_t sr = QString( argv[i + 1] ).toUInt(); if( sr >= 44100 && sr <= 192000 ) { os.samplerate = sr; } else { printf( "\nInvalid samplerate %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); return( EXIT_FAILURE ); } ++i; } else if( argc > i && ( QString( argv[i] ) == "--bitrate" || QString( argv[i] ) == "-b" ) ) { int br = QString( argv[i + 1] ).toUInt(); if( br >= 64 && br <= 384 ) { os.bitrate = br; } else { printf( "\nInvalid bitrate %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); return( EXIT_FAILURE ); } ++i; } else if( argc > i && ( QString( argv[i] ) == "--interpolation" || QString( argv[i] ) == "-i" ) ) { const QString ip = QString( argv[i + 1] ); if( ip == "linear" ) { qs.interpolation = Mixer::qualitySettings::Interpolation_Linear; } else if( ip == "sincfastest" ) { qs.interpolation = Mixer::qualitySettings::Interpolation_SincFastest; } else if( ip == "sincmedium" ) { qs.interpolation = Mixer::qualitySettings::Interpolation_SincMedium; } else if( ip == "sincbest" ) { qs.interpolation = Mixer::qualitySettings::Interpolation_SincBest; } else { printf( "\nInvalid interpolation method %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); return( EXIT_FAILURE ); } ++i; } else if( argc > i && ( QString( argv[i] ) == "--oversampling" || QString( argv[i] ) == "-x" ) ) { int o = QString( argv[i + 1] ).toUInt(); switch( o ) { case 1: qs.oversampling = Mixer::qualitySettings::Oversampling_None; break; case 2: qs.oversampling = Mixer::qualitySettings::Oversampling_2x; break; case 4: qs.oversampling = Mixer::qualitySettings::Oversampling_4x; break; case 8: qs.oversampling = Mixer::qualitySettings::Oversampling_8x; break; default: printf( "\nInvalid oversampling %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); return( EXIT_FAILURE ); } ++i; } else if( argc > i && ( QString( argv[i] ) == "--import" ) ) { file_to_import = argv[i+1]; ++i; // exit after import? (only for debugging) if( argc > i && QString( argv[i+1] ) == "-e" ) { exit_after_import = true; } } else if( argc > i && ( QString( argv[i] ) == "--profile" || QString( argv[i] ) == "-p" ) ) { profilerOutputFile = argv[i+1]; ++i; } else { if( argv[i][0] == '-' ) { printf( "\nInvalid option %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i], argv[0] ); return( EXIT_FAILURE ); } file_to_load = argv[i]; } } QString pos = QLocale::system().name().left( 2 ); #ifdef LMMS_BUILD_WIN32 #undef QT_TRANSLATIONS_DIR #define QT_TRANSLATIONS_DIR configManager::inst()->localeDir() #endif #ifdef QT_TRANSLATIONS_DIR // load translation for Qt-widgets/-dialogs loadTranslation( QString( "qt_" ) + pos, QString( QT_TRANSLATIONS_DIR ) ); #endif // load actual translation for LMMS loadTranslation( pos ); // try to set realtime priority #ifdef LMMS_BUILD_LINUX #ifdef LMMS_HAVE_SCHED_H #ifndef __OpenBSD__ struct sched_param sparam; sparam.sched_priority = ( sched_get_priority_max( SCHED_FIFO ) + sched_get_priority_min( SCHED_FIFO ) ) / 2; if( sched_setscheduler( 0, SCHED_FIFO, &sparam ) == -1 ) { printf( "Notice: could not set realtime priority.\n" ); } #endif #endif #endif configManager::inst()->loadConfigFile(); if( render_out.isEmpty() ) { // init style and palette LmmsStyle * lmmsstyle = new LmmsStyle(); QApplication::setStyle( lmmsstyle ); LmmsPalette * lmmspal = new LmmsPalette( NULL, lmmsstyle ); QPalette lpal = lmmspal->palette(); QApplication::setPalette( lpal ); LmmsStyle::s_palette = &lpal; // show splash screen QSplashScreen splashScreen( embed::getIconPixmap( "splash" ) ); splashScreen.show(); splashScreen.showMessage( MainWindow::tr( "Version %1" ).arg( LMMS_VERSION ), Qt::AlignRight | Qt::AlignBottom, Qt::white ); qApp->processEvents(); // init central engine which handles all components of LMMS engine::init(); splashScreen.hide(); // re-intialize RNG - shared libraries might have srand() or // srandom() calls in their init procedure srand( getpid() + time( 0 ) ); // recover a file? QString recoveryFile = QDir(configManager::inst()->workingDir()).absoluteFilePath("recover.mmp"); if( QFileInfo(recoveryFile).exists() && QMessageBox::question( engine::mainWindow(), MainWindow::tr( "Project recovery" ), MainWindow::tr( "It looks like the last session did not end properly. " "Do you want to recover the project of this session?" ), QMessageBox::Yes | QMessageBox::No ) == QMessageBox::Yes ) { file_to_load = recoveryFile; } // we try to load given file if( !file_to_load.isEmpty() ) { engine::mainWindow()->show(); if( fullscreen ) { engine::mainWindow()->showMaximized(); } if( file_to_load == recoveryFile ) { engine::getSong()->createNewProjectFromTemplate( file_to_load ); } else { engine::getSong()->loadProject( file_to_load ); } } else if( !file_to_import.isEmpty() ) { ImportFilter::import( file_to_import, engine::getSong() ); if( exit_after_import ) { return 0; } engine::mainWindow()->show(); if( fullscreen ) { engine::mainWindow()->showMaximized(); } } else { engine::getSong()->createNewProject(); // [Settel] workaround: showMaximized() doesn't work with // FVWM2 unless the window is already visible -> show() first engine::mainWindow()->show(); if( fullscreen ) { engine::mainWindow()->showMaximized(); } } } else { // we're going to render our song engine::init( false ); printf( "loading project...\n" ); engine::getSong()->loadProject( file_to_load ); printf( "done\n" ); // create renderer ProjectRenderer * r = new ProjectRenderer( qs, os, eff, render_out + QString( ( eff == ProjectRenderer::WaveFile ) ? "wav" : "ogg" ) ); QCoreApplication::instance()->connect( r, SIGNAL( finished() ), SLOT( quit() ) ); // timer for progress-updates QTimer * t = new QTimer( r ); r->connect( t, SIGNAL( timeout() ), SLOT( updateConsoleProgress() ) ); t->start( 200 ); if( profilerOutputFile.isEmpty() == false ) { engine::mixer()->profiler().setOutputFile( profilerOutputFile ); } // start now! r->startProcessing(); } const int ret = app->exec(); delete app; return( ret ); } /* vim: set tw=0 noexpandtab: */ lmms-1.1.3/src/core/midi/000077500000000000000000000000001247673406200151405ustar00rootroot00000000000000lmms-1.1.3/src/core/midi/MidiAlsaRaw.cpp000066400000000000000000000103151247673406200200010ustar00rootroot00000000000000/* * MidiAlsaRaw.cpp - MIDI client for RawMIDI via ALSA * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "MidiAlsaRaw.h" #include "config_mgr.h" #include "gui_templates.h" #ifdef LMMS_HAVE_ALSA MidiAlsaRaw::MidiAlsaRaw() : MidiClientRaw(), m_inputp( &m_input ), m_outputp( &m_output ), m_quit( false ) { int err; if( ( err = snd_rawmidi_open( m_inputp, m_outputp, probeDevice().toAscii().constData(), 0 ) ) < 0 ) { printf( "cannot open MIDI-device: %s\n", snd_strerror( err ) ); return; } snd_rawmidi_read( m_input, NULL, 0 ); snd_rawmidi_nonblock( m_input, 1 ); m_npfds = snd_rawmidi_poll_descriptors_count( m_input ); m_pfds = new pollfd[m_npfds]; snd_rawmidi_poll_descriptors( m_input, m_pfds, m_npfds ); start( QThread::LowPriority ); } MidiAlsaRaw::~MidiAlsaRaw() { if( isRunning() ) { m_quit = true; wait( 1000 ); terminate(); snd_rawmidi_close( m_input ); snd_rawmidi_close( m_output ); delete[] m_pfds; } } QString MidiAlsaRaw::probeDevice() { QString dev = configManager::inst()->value( "MidiAlsaRaw", "Device" ); if( dev == "" ) { if( getenv( "MIDIDEV" ) != NULL ) { return getenv( "MIDIDEV" ); } return "default"; } return dev; } void MidiAlsaRaw::sendByte( unsigned char c ) { snd_rawmidi_write( m_output, &c, sizeof( c ) ); } void MidiAlsaRaw::run() { unsigned char buf[128]; //int cnt = 0; while( m_quit == false ) { msleep( 5 ); // must do that, otherwise this thread takes // too much CPU-time, even with LowPriority... int err = poll( m_pfds, m_npfds, 10000 ); if( err < 0 && errno == EINTR ) { printf( "MidiAlsaRaw::run(): Got EINTR while " "polling. Will stop polling MIDI-events from " "MIDI-port.\n" ); break; } if( err < 0 ) { printf( "poll failed: %s\nWill stop polling " "MIDI-events from MIDI-port.\n", strerror( errno ) ); break; } if( err == 0 ) { //printf( "there seems to be no active MIDI-device %d\n", ++cnt ); continue; } unsigned short revents; if( ( err = snd_rawmidi_poll_descriptors_revents( m_input, m_pfds, m_npfds, &revents ) ) < 0 ) { printf( "cannot get poll events: %s\nWill stop polling " "MIDI-events from MIDI-port.\n", snd_strerror( errno ) ); break; } if( revents & ( POLLERR | POLLHUP ) ) { printf( "POLLERR or POLLHUP\n" ); break; } if( !( revents & POLLIN ) ) { continue; } err = snd_rawmidi_read( m_input, buf, sizeof( buf ) ); if( err == -EAGAIN ) { continue; } if( err < 0 ) { printf( "cannot read from port \"%s\": %s\nWill stop " "polling MIDI-events from MIDI-port.\n", /*port_name*/"default", snd_strerror( err ) ); break; } if( err == 0 ) { continue; } for( int i = 0; i < err; ++i ) { parseData( buf[i] ); } } } MidiAlsaRaw::setupWidget::setupWidget( QWidget * _parent ) : MidiClientRaw::setupWidget( MidiAlsaRaw::name(), _parent ) { m_device = new QLineEdit( MidiAlsaRaw::probeDevice(), this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); } MidiAlsaRaw::setupWidget::~setupWidget() { } void MidiAlsaRaw::setupWidget::saveSettings() { configManager::inst()->setValue( "MidiAlsaRaw", "Device", m_device->text() ); } #endif lmms-1.1.3/src/core/midi/MidiAlsaSeq.cpp000066400000000000000000000403631247673406200200060ustar00rootroot00000000000000/* * MidiAlsaSeq.cpp - ALSA sequencer client * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "MidiAlsaSeq.h" #include "config_mgr.h" #include "engine.h" #include "gui_templates.h" #include "song.h" #include "MidiPort.h" #include "MidiTime.h" #include "note.h" #ifdef LMMS_HAVE_ALSA const int EventPollTimeOut = 250; // static helper functions static QString __portName( snd_seq_client_info_t * _cinfo, snd_seq_port_info_t * _pinfo ) { return QString( "%1:%2 %3:%4" ). arg( snd_seq_port_info_get_client( _pinfo ) ). arg( snd_seq_port_info_get_port( _pinfo ) ). arg( snd_seq_client_info_get_name( _cinfo ) ). arg( snd_seq_port_info_get_name( _pinfo ) ); } static QString __portName( snd_seq_t * _seq, const snd_seq_addr_t * _addr ) { snd_seq_client_info_t * cinfo; snd_seq_port_info_t * pinfo; snd_seq_client_info_malloc( &cinfo ); snd_seq_port_info_malloc( &pinfo ); snd_seq_get_any_port_info( _seq, _addr->client, _addr->port, pinfo ); snd_seq_get_any_client_info( _seq, _addr->client, cinfo ); const QString name = __portName( cinfo, pinfo ); snd_seq_client_info_free( cinfo ); snd_seq_port_info_free( pinfo ); return name; } MidiAlsaSeq::MidiAlsaSeq() : MidiClient(), m_seqMutex(), m_seqHandle( NULL ), m_queueID( -1 ), m_quit( false ), m_portListUpdateTimer( this ) { int err; if( ( err = snd_seq_open( &m_seqHandle, probeDevice().toAscii().constData(), SND_SEQ_OPEN_DUPLEX, 0 ) ) < 0 ) { fprintf( stderr, "cannot open sequencer: %s\n", snd_strerror( err ) ); return; } snd_seq_set_client_name( m_seqHandle, "LMMS" ); m_queueID = snd_seq_alloc_queue( m_seqHandle ); snd_seq_queue_tempo_t * tempo; snd_seq_queue_tempo_malloc( &tempo ); snd_seq_queue_tempo_set_tempo( tempo, 6000000 / engine::getSong()->getTempo() ); snd_seq_queue_tempo_set_ppq( tempo, 16 ); snd_seq_set_queue_tempo( m_seqHandle, m_queueID, tempo ); snd_seq_queue_tempo_free( tempo ); snd_seq_start_queue( m_seqHandle, m_queueID, NULL ); changeQueueTempo( engine::getSong()->getTempo() ); connect( engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( changeQueueTempo( bpm_t ) ) ); // initial list-update updatePortList(); connect( &m_portListUpdateTimer, SIGNAL( timeout() ), this, SLOT( updatePortList() ) ); // we check for port-changes every second m_portListUpdateTimer.start( 1000 ); // use a pipe to detect shutdown if( pipe( m_pipe ) == -1 ) { perror( __FILE__ ": pipe" ); } start( QThread::IdlePriority ); } MidiAlsaSeq::~MidiAlsaSeq() { if( isRunning() ) { m_quit = true; wait( EventPollTimeOut*2 ); m_seqMutex.lock(); snd_seq_stop_queue( m_seqHandle, m_queueID, NULL ); snd_seq_free_queue( m_seqHandle, m_queueID ); snd_seq_close( m_seqHandle ); m_seqMutex.unlock(); } } QString MidiAlsaSeq::probeDevice() { QString dev = configManager::inst()->value( "Midialsaseq", "device" ); if( dev.isEmpty() ) { if( getenv( "MIDIDEV" ) != NULL ) { return getenv( "MIDIDEV" ); } return "default"; } return dev; } void MidiAlsaSeq::processOutEvent( const MidiEvent& event, const MidiTime& time, const MidiPort* port ) { // HACK!!! - need a better solution which isn't that easy since we // cannot store const-ptrs in our map because we need to call non-const // methods of MIDI-port - it's a mess... MidiPort* p = const_cast( port ); snd_seq_event_t ev; snd_seq_ev_clear( &ev ); snd_seq_ev_set_source( &ev, ( m_portIDs[p][1] != -1 ) ? m_portIDs[p][1] : m_portIDs[p][0] ); snd_seq_ev_set_subs( &ev ); snd_seq_ev_schedule_tick( &ev, m_queueID, 1, static_cast( time ) ); ev.queue = m_queueID; switch( event.type() ) { case MidiNoteOn: snd_seq_ev_set_noteon( &ev, event.channel(), event.key() + KeysPerOctave, event.velocity() ); break; case MidiNoteOff: snd_seq_ev_set_noteoff( &ev, event.channel(), event.key() + KeysPerOctave, event.velocity() ); break; case MidiKeyPressure: snd_seq_ev_set_keypress( &ev, event.channel(), event.key() + KeysPerOctave, event.velocity() ); break; case MidiControlChange: snd_seq_ev_set_controller( &ev, event.channel(), event.controllerNumber(), event.controllerValue() ); break; case MidiProgramChange: snd_seq_ev_set_pgmchange( &ev, event.channel(), event.program() ); break; case MidiChannelPressure: snd_seq_ev_set_chanpress( &ev, event.channel(), event.channelPressure() ); break; case MidiPitchBend: snd_seq_ev_set_pitchbend( &ev, event.channel(), event.param( 0 ) - 8192 ); break; default: qWarning( "MidiAlsaSeq: unhandled output event %d\n", (int) event.type() ); return; } m_seqMutex.lock(); snd_seq_event_output( m_seqHandle, &ev ); snd_seq_drain_output( m_seqHandle ); m_seqMutex.unlock(); } void MidiAlsaSeq::applyPortMode( MidiPort * _port ) { m_seqMutex.lock(); // determine port-capabilities unsigned int caps[2] = { 0, 0 }; switch( _port->mode() ) { case MidiPort::Duplex: caps[1] |= SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ; case MidiPort::Input: caps[0] |= SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE; break; case MidiPort::Output: caps[1] |= SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ; break; default: break; } for( int i = 0; i < 2; ++i ) { if( caps[i] != 0 ) { // no port there yet? if( m_portIDs[_port][i] == -1 ) { // then create one; m_portIDs[_port][i] = snd_seq_create_simple_port( m_seqHandle, _port->displayName().toUtf8().constData(), caps[i], SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION ); continue; } snd_seq_port_info_t * port_info; snd_seq_port_info_malloc( &port_info ); snd_seq_get_port_info( m_seqHandle, m_portIDs[_port][i], port_info ); snd_seq_port_info_set_capability( port_info, caps[i] ); snd_seq_set_port_info( m_seqHandle, m_portIDs[_port][i], port_info ); snd_seq_port_info_free( port_info ); } // still a port there although no caps? ( = dummy port) else if( m_portIDs[_port][i] != -1 ) { // then remove this port snd_seq_delete_simple_port( m_seqHandle, m_portIDs[_port][i] ); m_portIDs[_port][i] = -1; } } m_seqMutex.unlock(); } void MidiAlsaSeq::applyPortName( MidiPort * _port ) { m_seqMutex.lock(); for( int i = 0; i < 2; ++i ) { if( m_portIDs[_port][i] == -1 ) { continue; } snd_seq_port_info_t * port_info; snd_seq_port_info_malloc( &port_info ); snd_seq_get_port_info( m_seqHandle, m_portIDs[_port][i], port_info ); snd_seq_port_info_set_name( port_info, _port->displayName().toUtf8().constData() ); snd_seq_set_port_info( m_seqHandle, m_portIDs[_port][i], port_info ); snd_seq_port_info_free( port_info ); } m_seqMutex.unlock(); } void MidiAlsaSeq::removePort( MidiPort * _port ) { if( m_portIDs.contains( _port ) ) { m_seqMutex.lock(); snd_seq_delete_simple_port( m_seqHandle, m_portIDs[_port][0] ); snd_seq_delete_simple_port( m_seqHandle, m_portIDs[_port][1] ); m_seqMutex.unlock(); m_portIDs.remove( _port ); } MidiClient::removePort( _port ); } QString MidiAlsaSeq::sourcePortName( const MidiEvent & _event ) const { if( _event.sourcePort() ) { const snd_seq_addr_t * addr = static_cast( _event.sourcePort() ); return __portName( m_seqHandle, addr ); } return MidiClient::sourcePortName( _event ); } void MidiAlsaSeq::subscribeReadablePort( MidiPort * _port, const QString & _dest, bool _subscribe ) { if( !m_portIDs.contains( _port ) || m_portIDs[_port][0] < 0 ) { return; } m_seqMutex.lock(); snd_seq_addr_t sender; if( snd_seq_parse_address( m_seqHandle, &sender, _dest.section( ' ', 0, 0 ).toAscii().constData() ) ) { fprintf( stderr, "error parsing sender-address!\n" ); m_seqMutex.unlock(); return; } snd_seq_port_info_t * port_info; snd_seq_port_info_malloc( &port_info ); snd_seq_get_port_info( m_seqHandle, m_portIDs[_port][0], port_info ); const snd_seq_addr_t * dest = snd_seq_port_info_get_addr( port_info ); snd_seq_port_subscribe_t * subs; snd_seq_port_subscribe_malloc( &subs ); snd_seq_port_subscribe_set_sender( subs, &sender ); snd_seq_port_subscribe_set_dest( subs, dest ); if( _subscribe ) { snd_seq_subscribe_port( m_seqHandle, subs ); } else { snd_seq_unsubscribe_port( m_seqHandle, subs ); } snd_seq_port_subscribe_free( subs ); snd_seq_port_info_free( port_info ); m_seqMutex.unlock(); } void MidiAlsaSeq::subscribeWritablePort( MidiPort * _port, const QString & _dest, bool _subscribe ) { if( !m_portIDs.contains( _port ) ) { return; } const int pid = m_portIDs[_port][1] < 0 ? m_portIDs[_port][0] : m_portIDs[_port][1]; if( pid < 0 ) { return; } m_seqMutex.lock(); snd_seq_addr_t dest; if( snd_seq_parse_address( m_seqHandle, &dest, _dest.section( ' ', 0, 0 ).toAscii().constData() ) ) { fprintf( stderr, "error parsing dest-address!\n" ); m_seqMutex.unlock(); return; } snd_seq_port_info_t * port_info; snd_seq_port_info_malloc( &port_info ); snd_seq_get_port_info( m_seqHandle, pid, port_info ); const snd_seq_addr_t * sender = snd_seq_port_info_get_addr( port_info ); snd_seq_port_subscribe_t * subs; snd_seq_port_subscribe_malloc( &subs ); snd_seq_port_subscribe_set_sender( subs, sender ); snd_seq_port_subscribe_set_dest( subs, &dest ); if( _subscribe ) { snd_seq_subscribe_port( m_seqHandle, subs ); } else { snd_seq_unsubscribe_port( m_seqHandle, subs ); } snd_seq_port_subscribe_free( subs ); snd_seq_port_info_free( port_info ); m_seqMutex.unlock(); } void MidiAlsaSeq::run() { // watch the pipe and sequencer input events int pollfd_count = snd_seq_poll_descriptors_count( m_seqHandle, POLLIN ); struct pollfd * pollfd_set = new struct pollfd[pollfd_count + 1]; snd_seq_poll_descriptors( m_seqHandle, pollfd_set + 1, pollfd_count, POLLIN ); pollfd_set[0].fd = m_pipe[0]; pollfd_set[0].events = POLLIN; ++pollfd_count; while( m_quit == false ) { int pollRet = poll( pollfd_set, pollfd_count, EventPollTimeOut ); if( pollRet == 0 ) { continue; } else if( pollRet == -1 ) { // gdb may interrupt the poll if( errno == EINTR ) { continue; } qCritical( "error while polling ALSA sequencer handle" ); break; } // shutdown? if( m_quit ) { break; } m_seqMutex.lock(); // while event queue is not empty while( snd_seq_event_input_pending( m_seqHandle, true ) > 0 ) { snd_seq_event_t * ev; if( snd_seq_event_input( m_seqHandle, &ev ) < 0 ) { m_seqMutex.unlock(); qCritical( "error while fetching MIDI event from sequencer" ); break; } m_seqMutex.unlock(); snd_seq_addr_t * source = NULL; MidiPort * dest = NULL; for( int i = 0; i < m_portIDs.size(); ++i ) { if( m_portIDs.values()[i][0] == ev->dest.port ) { dest = m_portIDs.keys()[i]; } if( ( m_portIDs.values()[i][1] != -1 && m_portIDs.values()[i][1] == ev->source.port ) || m_portIDs.values()[i][0] == ev->source.port ) { source = &ev->source; } } if( dest == NULL ) { continue; } switch( ev->type ) { case SND_SEQ_EVENT_NOTEON: dest->processInEvent( MidiEvent( MidiNoteOn, ev->data.note.channel, ev->data.note.note - KeysPerOctave, ev->data.note.velocity, source ), MidiTime( ev->time.tick ) ); break; case SND_SEQ_EVENT_NOTEOFF: dest->processInEvent( MidiEvent( MidiNoteOff, ev->data.note.channel, ev->data.note.note - KeysPerOctave, ev->data.note.velocity, source ), MidiTime( ev->time.tick) ); break; case SND_SEQ_EVENT_KEYPRESS: dest->processInEvent( MidiEvent( MidiKeyPressure, ev->data.note.channel, ev->data.note.note - KeysPerOctave, ev->data.note.velocity, source ), MidiTime() ); break; case SND_SEQ_EVENT_CONTROLLER: dest->processInEvent( MidiEvent( MidiControlChange, ev->data.control.channel, ev->data.control.param, ev->data.control.value, source ), MidiTime() ); break; case SND_SEQ_EVENT_PGMCHANGE: dest->processInEvent( MidiEvent( MidiProgramChange, ev->data.control.channel, ev->data.control.param, ev->data.control.value, source ), MidiTime() ); break; case SND_SEQ_EVENT_CHANPRESS: dest->processInEvent( MidiEvent( MidiChannelPressure, ev->data.control.channel, ev->data.control.param, ev->data.control.value, source ), MidiTime() ); break; case SND_SEQ_EVENT_PITCHBEND: dest->processInEvent( MidiEvent( MidiPitchBend, ev->data.control.channel, ev->data.control.value + 8192, 0, source ), MidiTime() ); break; case SND_SEQ_EVENT_SENSING: case SND_SEQ_EVENT_CLOCK: break; default: fprintf( stderr, "ALSA-sequencer: unhandled input " "event %d\n", ev->type ); break; } // end switch m_seqMutex.lock(); } // end while m_seqMutex.unlock(); } delete[] pollfd_set; } void MidiAlsaSeq::changeQueueTempo( bpm_t _bpm ) { m_seqMutex.lock(); snd_seq_change_queue_tempo( m_seqHandle, m_queueID, 60000000 / (int) _bpm, NULL ); snd_seq_drain_output( m_seqHandle ); m_seqMutex.unlock(); } void MidiAlsaSeq::updatePortList() { QStringList readablePorts; QStringList writablePorts; // get input- and output-ports snd_seq_client_info_t * cinfo; snd_seq_port_info_t * pinfo; snd_seq_client_info_malloc( &cinfo ); snd_seq_port_info_malloc( &pinfo ); snd_seq_client_info_set_client( cinfo, -1 ); m_seqMutex.lock(); while( snd_seq_query_next_client( m_seqHandle, cinfo ) >= 0 ) { int client = snd_seq_client_info_get_client( cinfo ); snd_seq_port_info_set_client( pinfo, client ); snd_seq_port_info_set_port( pinfo, -1 ); while( snd_seq_query_next_port( m_seqHandle, pinfo ) >= 0 ) { // we need both READ and SUBS_READ if( ( snd_seq_port_info_get_capability( pinfo ) & ( SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ ) ) == ( SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ ) ) { readablePorts.push_back( __portName( cinfo, pinfo ) ); } if( ( snd_seq_port_info_get_capability( pinfo ) & ( SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE ) ) == ( SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE ) ) { writablePorts.push_back( __portName( cinfo, pinfo ) ); } } } m_seqMutex.unlock(); snd_seq_client_info_free( cinfo ); snd_seq_port_info_free( pinfo ); if( m_readablePorts != readablePorts ) { m_readablePorts = readablePorts; emit readablePortsChanged(); } if( m_writablePorts != writablePorts ) { m_writablePorts = writablePorts; emit writablePortsChanged(); } } MidiAlsaSeq::setupWidget::setupWidget( QWidget * _parent ) : MidiClient::setupWidget( MidiAlsaSeq::name(), _parent ) { m_device = new QLineEdit( MidiAlsaSeq::probeDevice(), this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); } MidiAlsaSeq::setupWidget::~setupWidget() { } void MidiAlsaSeq::setupWidget::saveSettings() { configManager::inst()->setValue( "Midialsaseq", "device", m_device->text() ); } #include "moc_MidiAlsaSeq.cxx" #endif lmms-1.1.3/src/core/midi/MidiClient.cpp000066400000000000000000000200271247673406200176660ustar00rootroot00000000000000/* * MidiClient.cpp - base-class for MIDI-clients like ALSA-sequencer-client * * Copyright (c) 2005-2014 Tobias Doerffel * This file partly contains code from Fluidsynth, Peter Hanappe * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "MidiClient.h" #include "MidiPort.h" #include "note.h" MidiClient::MidiClient() { } MidiClient::~MidiClient() { //TODO: noteOffAll(); / clear all ports } void MidiClient::applyPortMode( MidiPort* ) { } void MidiClient::applyPortName( MidiPort* ) { } void MidiClient::addPort( MidiPort* port ) { m_midiPorts.push_back( port ); } void MidiClient::removePort( MidiPort* port ) { QVector::Iterator it = qFind( m_midiPorts.begin(), m_midiPorts.end(), port ); if( it != m_midiPorts.end() ) { m_midiPorts.erase( it ); } } void MidiClient::subscribeReadablePort( MidiPort*, const QString& , bool ) { } void MidiClient::subscribeWritablePort( MidiPort* , const QString& , bool ) { } MidiClientRaw::MidiClientRaw() { } MidiClientRaw::~MidiClientRaw() { } void MidiClientRaw::parseData( const unsigned char c ) { /*********************************************************************/ /* 'Process' system real-time messages */ /*********************************************************************/ /* There are not too many real-time messages that are of interest here. * They can occur anywhere, even in the middle of a noteon message! * Real-time range: 0xF8 .. 0xFF * Note: Real-time does not affect (running) status. */ if( c >= 0xF8 ) { if( c == MidiSystemReset ) { m_midiParseData.m_midiEvent.setType( MidiSystemReset ); m_midiParseData.m_status = 0; processParsedEvent(); } return; } /*********************************************************************/ /* 'Process' system common messages (again, just skip them) */ /*********************************************************************/ /* There are no system common messages that are of interest here. * System common range: 0xF0 .. 0xF7 */ if( c > 0xF0 ) { /* MIDI spec say: To ignore a non-real-time message, just discard all * data up to the next status byte. And our parser will ignore data * that is received without a valid status. * Note: system common cancels running status. */ m_midiParseData.m_status = 0; return; } /*********************************************************************/ /* Process voice category messages: */ /*********************************************************************/ /* Now that we have handled realtime and system common messages, only * voice messages are left. * Only a status byte has bit # 7 set. * So no matter the status of the parser (in case we have lost sync), * as soon as a byte >= 0x80 comes in, we are dealing with a status byte * and start a new event. */ if( c & 0x80 ) { m_midiParseData.m_channel = c & 0x0F; m_midiParseData.m_status = c & 0xF0; /* The event consumes x bytes of data... (subtract 1 for the status byte) */ m_midiParseData.m_bytesTotal = eventLength( m_midiParseData.m_status ) - 1; /* of which we have read 0 at this time. */ m_midiParseData.m_bytes = 0; return; } /*********************************************************************/ /* Process data */ /*********************************************************************/ /* If we made it this far, then the received char belongs to the data * of the last event. */ if( m_midiParseData.m_status == 0 ) { /* We are not interested in the event currently received. Discard the data. */ return; } /* Store the first couple of bytes */ if( m_midiParseData.m_bytes < RAW_MIDI_PARSE_BUF_SIZE ) { m_midiParseData.m_buffer[m_midiParseData.m_bytes] = c; } ++m_midiParseData.m_bytes; /* Do we still need more data to get this event complete? */ if( m_midiParseData.m_bytes < m_midiParseData.m_bytesTotal ) { return; } /*********************************************************************/ /* Send the event */ /*********************************************************************/ /* The event is ready-to-go. About 'running status': * * The MIDI protocol has a built-in compression mechanism. If several * similar events are sent in-a-row, for example note-ons, then the * event type is only sent once. For this case, the last event type * (status) is remembered. * We simply keep the status as it is, just reset the parameter counter. * If another status byte comes in, it will overwrite the status. */ m_midiParseData.m_midiEvent.setType( static_cast( m_midiParseData.m_status ) ); m_midiParseData.m_midiEvent.setChannel( m_midiParseData.m_channel ); m_midiParseData.m_bytes = 0; /* Related to running status! */ switch( m_midiParseData.m_midiEvent.type() ) { case MidiNoteOff: case MidiNoteOn: case MidiKeyPressure: case MidiProgramChange: case MidiChannelPressure: m_midiParseData.m_midiEvent.setKey( m_midiParseData.m_buffer[0] - KeysPerOctave ); m_midiParseData.m_midiEvent.setVelocity( m_midiParseData.m_buffer[1] ); break; case MidiControlChange: m_midiParseData.m_midiEvent.setControllerNumber( m_midiParseData.m_buffer[0] ); m_midiParseData.m_midiEvent.setControllerValue( m_midiParseData.m_buffer[1] ); break; case MidiPitchBend: // Pitch-bend is transmitted with 14-bit precision. // Note: '|' does here the same as '+' (no common bits), // but might be faster m_midiParseData.m_midiEvent.setPitchBend( ( m_midiParseData.m_buffer[1] * 128 ) | m_midiParseData.m_buffer[0] ); break; default: // Unlikely return; } processParsedEvent(); } void MidiClientRaw::processParsedEvent() { for( int i = 0; i < m_midiPorts.size(); ++i ) { m_midiPorts[i]->processInEvent( m_midiParseData.m_midiEvent ); } } void MidiClientRaw::processOutEvent( const MidiEvent& event, const MidiTime & , const MidiPort* port ) { // TODO: also evaluate _time and queue event if necessary switch( event.type() ) { case MidiNoteOn: case MidiNoteOff: case MidiKeyPressure: sendByte( event.type() | event.channel() ); sendByte( event.key() + KeysPerOctave ); sendByte( event.velocity() ); break; default: qWarning( "MidiClientRaw: unhandled MIDI-event %d\n", (int) event.type() ); break; } } // Taken from Nagano Daisuke's USB-MIDI driver static const unsigned char REMAINS_F0F6[] = { 0, /* 0xF0 */ 2, /* 0XF1 */ 3, /* 0XF2 */ 2, /* 0XF3 */ 2, /* 0XF4 (Undefined by MIDI Spec, and subject to change) */ 2, /* 0XF5 (Undefined by MIDI Spec, and subject to change) */ 1 /* 0XF6 */ } ; static const unsigned char REMAINS_80E0[] = { 3, /* 0x8X Note Off */ 3, /* 0x9X Note On */ 3, /* 0xAX Poly-key pressure */ 3, /* 0xBX Control Change */ 2, /* 0xCX Program Change */ 2, /* 0xDX Channel pressure */ 3 /* 0xEX PitchBend Change */ } ; // Returns the length of the MIDI message starting with _event. // Taken from Nagano Daisuke's USB-MIDI driver int MidiClientRaw::eventLength( const unsigned char event ) { if ( event < 0xF0 ) { return REMAINS_80E0[( ( event - 0x80 ) >> 4 ) & 0x0F]; } else if ( event < 0xF7 ) { return REMAINS_F0F6[event - 0xF0]; } return 1; } lmms-1.1.3/src/core/midi/MidiController.cpp000066400000000000000000000062271247673406200206010ustar00rootroot00000000000000/* * MidiController.cpp - implementation of class midi-controller which handles * MIDI control change messages * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "song.h" #include "engine.h" #include "Mixer.h" #include "MidiClient.h" #include "MidiController.h" MidiController::MidiController( Model * _parent ) : Controller( Controller::MidiController, _parent, tr( "MIDI Controller" ) ), MidiEventProcessor(), m_midiPort( tr( "unnamed_midi_controller" ), engine::mixer()->midiClient(), this, this, MidiPort::Input ), m_lastValue( 0.0f ) { connect( &m_midiPort, SIGNAL( modeChanged() ), this, SLOT( updateName() ) ); } MidiController::~MidiController() { } float MidiController::value( int _offset ) { return m_lastValue; } void MidiController::updateName() { setName( QString("MIDI ch%1 ctrl%2"). arg( m_midiPort.inputChannel() ). arg( m_midiPort.inputController() ) ); } void MidiController::processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset ) { unsigned char controllerNum; switch( event.type() ) { case MidiControlChange: controllerNum = event.controllerNumber(); if( m_midiPort.inputController() == controllerNum + 1 && ( m_midiPort.inputChannel() == event.channel() + 1 || m_midiPort.inputChannel() == 0 ) ) { unsigned char val = event.controllerValue(); m_lastValue = (float)( val ) / 127.0f; emit valueChanged(); } break; default: // Don't care - maybe add special cases for pitch and mod later break; } } void MidiController::subscribeReadablePorts( const MidiPort::Map & _map ) { for( MidiPort::Map::ConstIterator it = _map.constBegin(); it != _map.constEnd(); ++it ) { m_midiPort.subscribeReadablePort( it.key(), *it ); } } void MidiController::saveSettings( QDomDocument & _doc, QDomElement & _this ) { Controller::saveSettings( _doc, _this ); m_midiPort.saveSettings( _doc, _this ); } void MidiController::loadSettings( const QDomElement & _this ) { Controller::loadSettings( _this ); m_midiPort.loadSettings( _this ); updateName(); } QString MidiController::nodeName() const { return( "Midicontroller" ); } ControllerDialog * MidiController::createDialog( QWidget * _parent ) { return NULL; } #include "moc_MidiController.cxx" lmms-1.1.3/src/core/midi/MidiOss.cpp000066400000000000000000000050641247673406200172200ustar00rootroot00000000000000/* * MidiOss.cpp - OSS raw MIDI client * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "MidiOss.h" #ifdef LMMS_HAVE_OSS #include #include #ifdef LMMS_HAVE_STDLIB_H #include #endif #include "config_mgr.h" #include "gui_templates.h" MidiOss::MidiOss() : MidiClientRaw(), m_midiDev( probeDevice() ), m_quit( false ) { // only start thread, if opening of MIDI-device is successful, // otherwise isRunning()==false indicates error if( m_midiDev.open( QIODevice::ReadWrite ) || m_midiDev.open( QIODevice::ReadOnly ) ) { start( QThread::LowPriority ); } } MidiOss::~MidiOss() { if( isRunning() ) { m_quit = true; wait( 1000 ); terminate(); } } QString MidiOss::probeDevice() { QString dev = configManager::inst()->value( "midioss", "device" ); if( dev.isEmpty() ) { if( getenv( "MIDIDEV" ) != NULL ) { return getenv( "MIDIDEV" ); } return "/dev/midi"; } return dev; } void MidiOss::sendByte( const unsigned char c ) { m_midiDev.putChar( c ); } void MidiOss::run() { while( m_quit == false && m_midiDev.isOpen() ) { char c; if( !m_midiDev.getChar( &c ) ) { continue; } parseData( c ); } } MidiOss::setupWidget::setupWidget( QWidget * _parent ) : MidiClientRaw::setupWidget( MidiOss::name(), _parent ) { m_device = new QLineEdit( MidiOss::probeDevice(), this ); m_device->setGeometry( 10, 20, 160, 20 ); QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) ); dev_lbl->setGeometry( 10, 40, 160, 10 ); } MidiOss::setupWidget::~setupWidget() { } void MidiOss::setupWidget::saveSettings() { configManager::inst()->setValue( "midioss", "device", m_device->text() ); } #endif lmms-1.1.3/src/core/midi/MidiPort.cpp000066400000000000000000000250661247673406200174040ustar00rootroot00000000000000/* * MidiPort.cpp - abstraction of MIDI-ports which are part of LMMS's MIDI- * sequencing system * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "MidiPort.h" #include "MidiClient.h" #include "song.h" MidiPort::MidiPort( const QString& name, MidiClient* client, MidiEventProcessor* eventProcessor, Model* parent, Mode mode ) : Model( parent ), m_readablePortsMenu( NULL ), m_writablePortsMenu( NULL ), m_midiClient( client ), m_midiEventProcessor( eventProcessor ), m_mode( mode ), m_inputChannelModel( 0, 0, MidiChannelCount, this, tr( "Input channel" ) ), m_outputChannelModel( 1, 1, MidiChannelCount, this, tr( "Output channel" ) ), m_inputControllerModel( 0, 0, MidiControllerCount, this, tr( "Input controller" ) ), m_outputControllerModel( 0, 0, MidiControllerCount, this, tr( "Output controller" ) ), m_fixedInputVelocityModel( -1, -1, MidiMaxVelocity, this, tr( "Fixed input velocity" ) ), m_fixedOutputVelocityModel( -1, -1, MidiMaxVelocity, this, tr( "Fixed output velocity" ) ), m_fixedOutputNoteModel( -1, -1, MidiMaxKey, this, tr( "Fixed output note" ) ), m_outputProgramModel( 1, 1, MidiProgramCount, this, tr( "Output MIDI program" ) ), m_baseVelocityModel( MidiMaxVelocity/2, 1, MidiMaxVelocity, this, tr( "Base velocity" ) ), m_readableModel( false, this, tr( "Receive MIDI-events" ) ), m_writableModel( false, this, tr( "Send MIDI-events" ) ) { m_midiClient->addPort( this ); m_readableModel.setValue( m_mode == Input || m_mode == Duplex ); m_writableModel.setValue( m_mode == Output || m_mode == Duplex ); connect( &m_readableModel, SIGNAL( dataChanged() ), this, SLOT( updateMidiPortMode() ) ); connect( &m_writableModel, SIGNAL( dataChanged() ), this, SLOT( updateMidiPortMode() ) ); connect( &m_outputProgramModel, SIGNAL( dataChanged() ), this, SLOT( updateOutputProgram() ) ); // when using with non-raw-clients we can provide buttons showing // our port-menus when being clicked if( m_midiClient->isRaw() == false ) { updateReadablePorts(); updateWritablePorts(); // we want to get informed about port-changes! m_midiClient->connectRPChanged( this, SLOT( updateReadablePorts() ) ); m_midiClient->connectWPChanged( this, SLOT( updateWritablePorts() ) ); } updateMidiPortMode(); } MidiPort::~MidiPort() { // unsubscribe ports m_readableModel.setValue( false ); m_writableModel.setValue( false ); // and finally unregister ourself m_midiClient->removePort( this ); } void MidiPort::setName( const QString& name ) { setDisplayName( name ); m_midiClient->applyPortName( this ); } void MidiPort::setMode( Mode mode ) { m_mode = mode; m_midiClient->applyPortMode( this ); } void MidiPort::processInEvent( const MidiEvent& event, const MidiTime& time ) { // mask event if( isInputEnabled() && ( inputChannel() == 0 || inputChannel()-1 == event.channel() ) ) { MidiEvent inEvent = event; if( event.type() == MidiNoteOn || event.type() == MidiNoteOff || event.type() == MidiKeyPressure ) { if( inEvent.key() < 0 || inEvent.key() >= NumKeys ) { return; } } if( fixedInputVelocity() >= 0 && inEvent.velocity() > 0 ) { inEvent.setVelocity( fixedInputVelocity() ); } m_midiEventProcessor->processInEvent( inEvent, time ); } } void MidiPort::processOutEvent( const MidiEvent& event, const MidiTime& time ) { // mask event if( isOutputEnabled() && realOutputChannel() == event.channel() ) { MidiEvent outEvent = event; if( fixedOutputVelocity() >= 0 && event.velocity() > 0 && ( event.type() == MidiNoteOn || event.type() == MidiKeyPressure ) ) { outEvent.setVelocity( fixedOutputVelocity() ); } m_midiClient->processOutEvent( outEvent, time, this ); } } void MidiPort::saveSettings( QDomDocument& doc, QDomElement& thisElement ) { m_inputChannelModel.saveSettings( doc, thisElement, "inputchannel" ); m_outputChannelModel.saveSettings( doc, thisElement, "outputchannel" ); m_inputControllerModel.saveSettings( doc, thisElement, "inputcontroller" ); m_outputControllerModel.saveSettings( doc, thisElement, "outputcontroller" ); m_fixedInputVelocityModel.saveSettings( doc, thisElement, "fixedinputvelocity" ); m_fixedOutputVelocityModel.saveSettings( doc, thisElement, "fixedoutputvelocity" ); m_fixedOutputNoteModel.saveSettings( doc, thisElement, "fixedoutputnote" ); m_outputProgramModel.saveSettings( doc, thisElement, "outputprogram" ); m_baseVelocityModel.saveSettings( doc, thisElement, "basevelocity" ); m_readableModel.saveSettings( doc, thisElement, "readable" ); m_writableModel.saveSettings( doc, thisElement, "writable" ); if( isInputEnabled() ) { QString rp; for( Map::ConstIterator it = m_readablePorts.begin(); it != m_readablePorts.end(); ++it ) { if( it.value() ) { rp += it.key() + ","; } } // cut off comma if( rp.length() > 0 ) { rp.truncate( rp.length() - 1 ); } thisElement.setAttribute( "inports", rp ); } if( isOutputEnabled() ) { QString wp; for( Map::ConstIterator it = m_writablePorts.begin(); it != m_writablePorts.end(); ++it ) { if( it.value() ) { wp += it.key() + ","; } } // cut off comma if( wp.length() > 0 ) { wp.truncate( wp.length() - 1 ); } thisElement.setAttribute( "outports", wp ); } } void MidiPort::loadSettings( const QDomElement& thisElement ) { m_inputChannelModel.loadSettings( thisElement, "inputchannel" ); m_outputChannelModel.loadSettings( thisElement, "outputchannel" ); m_inputControllerModel.loadSettings( thisElement, "inputcontroller" ); m_outputControllerModel.loadSettings( thisElement, "outputcontroller" ); m_fixedInputVelocityModel.loadSettings( thisElement, "fixedinputvelocity" ); m_fixedOutputVelocityModel.loadSettings( thisElement, "fixedoutputvelocity" ); m_outputProgramModel.loadSettings( thisElement, "outputprogram" ); m_baseVelocityModel.loadSettings( thisElement, "basevelocity" ); m_readableModel.loadSettings( thisElement, "readable" ); m_writableModel.loadSettings( thisElement, "writable" ); // restore connections if( isInputEnabled() ) { QStringList rp = thisElement.attribute( "inports" ).split( ',' ); for( Map::ConstIterator it = m_readablePorts.begin(); it != m_readablePorts.end(); ++it ) { if( it.value() != ( rp.indexOf( it.key() ) != -1 ) ) { subscribeReadablePort( it.key() ); } } emit readablePortsChanged(); } if( isOutputEnabled() ) { QStringList wp = thisElement.attribute( "outports" ).split( ',' ); for( Map::ConstIterator it = m_writablePorts.begin(); it != m_writablePorts.end(); ++it ) { if( it.value() != ( wp.indexOf( it.key() ) != -1 ) ) { subscribeWritablePort( it.key() ); } } emit writablePortsChanged(); } if( thisElement.hasAttribute( "basevelocity" ) == false ) { // for projects created by LMMS < 0.9.92 there's no value for the base // velocity and for compat reasons we have to stick with maximum velocity // which did not allow note volumes > 100% m_baseVelocityModel.setValue( MidiMaxVelocity ); } } void MidiPort::subscribeReadablePort( const QString& port, bool subscribe ) { m_readablePorts[port] = subscribe; // make sure, MIDI-port is configured for input if( subscribe == true && !isInputEnabled() ) { m_readableModel.setValue( true ); } m_midiClient->subscribeReadablePort( this, port, subscribe ); } void MidiPort::subscribeWritablePort( const QString& port, bool subscribe ) { m_writablePorts[port] = subscribe; // make sure, MIDI-port is configured for output if( subscribe == true && !isOutputEnabled() ) { m_writableModel.setValue( true ); } m_midiClient->subscribeWritablePort( this, port, subscribe ); } void MidiPort::updateMidiPortMode() { // this small lookup-table makes everything easier static const Modes modeTable[2][2] = { { Disabled, Output }, { Input, Duplex } } ; setMode( modeTable[m_readableModel.value()][m_writableModel.value()] ); // check whether we have to dis-check items in connection-menu if( !isInputEnabled() ) { for( Map::ConstIterator it = m_readablePorts.begin(); it != m_readablePorts.end(); ++it ) { // subscribed? if( it.value() ) { subscribeReadablePort( it.key(), false ); } } } if( !isOutputEnabled() ) { for( Map::ConstIterator it = m_writablePorts.begin(); it != m_writablePorts.end(); ++it ) { // subscribed? if( it.value() ) { subscribeWritablePort( it.key(), false ); } } } emit readablePortsChanged(); emit writablePortsChanged(); emit modeChanged(); engine::getSong()->setModified(); } void MidiPort::updateReadablePorts() { // first save all selected ports QStringList selectedPorts; for( Map::ConstIterator it = m_readablePorts.begin(); it != m_readablePorts.end(); ++it ) { if( it.value() ) { selectedPorts.push_back( it.key() ); } } m_readablePorts.clear(); const QStringList& wp = m_midiClient->readablePorts(); // now insert new ports and restore selections for( QStringList::ConstIterator it = wp.begin(); it != wp.end(); ++it ) { m_readablePorts[*it] = ( selectedPorts.indexOf( *it ) != -1 ); } emit readablePortsChanged(); } void MidiPort::updateWritablePorts() { // first save all selected ports QStringList selectedPorts; for( Map::ConstIterator it = m_writablePorts.begin(); it != m_writablePorts.end(); ++it ) { if( it.value() ) { selectedPorts.push_back( it.key() ); } } m_writablePorts.clear(); const QStringList & wp = m_midiClient->writablePorts(); // now insert new ports and restore selections for( QStringList::ConstIterator it = wp.begin(); it != wp.end(); ++it ) { m_writablePorts[*it] = ( selectedPorts.indexOf( *it ) != -1 ); } emit writablePortsChanged(); } void MidiPort::updateOutputProgram() { processOutEvent( MidiEvent( MidiProgramChange, realOutputChannel(), outputProgram()-1 ) ); } #include "moc_MidiPort.cxx" lmms-1.1.3/src/core/midi/MidiWinMM.cpp000066400000000000000000000147351247673406200174500ustar00rootroot00000000000000/* * MidiWinMM.cpp - WinMM MIDI client * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "MidiWinMM.h" #include "config_mgr.h" #include "engine.h" #include "gui_templates.h" #include "MidiPort.h" #include "note.h" #ifdef LMMS_BUILD_WIN32 MidiWinMM::MidiWinMM() : MidiClient(), m_inputDevices(), m_outputDevices(), m_inputSubs(), m_outputSubs() { openDevices(); } MidiWinMM::~MidiWinMM() { closeDevices(); } void MidiWinMM::processOutEvent( const MidiEvent& event, const MidiTime& time, const MidiPort* port ) { const DWORD shortMsg = ( event.type() + event.channel() ) + ( ( event.param( 0 ) & 0xff ) << 8 ) + ( ( event.param( 1 ) & 0xff ) << 16 ); QStringList outDevs; for( SubMap::ConstIterator it = m_outputSubs.begin(); it != m_outputSubs.end(); ++it ) { for( MidiPortList::ConstIterator jt = it.value().begin(); jt != it.value().end(); ++jt ) { if( *jt == port ) { outDevs += it.key(); break; } } } for( QMap::Iterator it = m_outputDevices.begin(); it != m_outputDevices.end(); ++it ) { if( outDevs.contains( *it ) ) { midiOutShortMsg( it.key(), shortMsg ); } } } void MidiWinMM::applyPortMode( MidiPort* port ) { // make sure no subscriptions exist which are not possible with // current port-mode if( !port->isInputEnabled() ) { for( SubMap::Iterator it = m_inputSubs.begin(); it != m_inputSubs.end(); ++it ) { it.value().removeAll( port ); } } if( !port->isOutputEnabled() ) { for( SubMap::Iterator it = m_outputSubs.begin(); it != m_outputSubs.end(); ++it ) { it.value().removeAll( port ); } } } void MidiWinMM::removePort( MidiPort* port ) { for( SubMap::Iterator it = m_inputSubs.begin(); it != m_inputSubs.end(); ++it ) { it.value().removeAll( port ); } for( SubMap::Iterator it = m_outputSubs.begin(); it != m_outputSubs.end(); ++it ) { it.value().removeAll( port ); } MidiClient::removePort( port ); } QString MidiWinMM::sourcePortName( const MidiEvent& event ) const { if( event.sourcePort() ) { return m_inputDevices.value( *static_cast( event.sourcePort() ) ); } return MidiClient::sourcePortName( event ); } void MidiWinMM::subscribeReadablePort( MidiPort* port, const QString& dest, bool subscribe ) { if( subscribe && port->isInputEnabled() == false ) { qWarning( "port %s can't be (un)subscribed!\n", port->displayName().toAscii().constData() ); return; } m_inputSubs[dest].removeAll( port ); if( subscribe ) { m_inputSubs[dest].push_back( port ); } } void MidiWinMM::subscribeWritablePort( MidiPort* port, const QString& dest, bool subscribe ) { if( subscribe && port->isOutputEnabled() == false ) { qWarning( "port %s can't be (un)subscribed!\n", port->displayName().toAscii().constData() ); return; } m_outputSubs[dest].removeAll( port ); if( subscribe ) { m_outputSubs[dest].push_back( port ); } } void WINAPI CALLBACK MidiWinMM::inputCallback( HMIDIIN hm, UINT msg, DWORD_PTR inst, DWORD_PTR param1, DWORD_PTR param2 ) { if( msg == MIM_DATA ) { ( (MidiWinMM *) inst )->handleInputEvent( hm, param1 ); } } void MidiWinMM::handleInputEvent( HMIDIIN hm, DWORD ev ) { const int cmd = ev & 0xff; if( cmd == MidiActiveSensing ) { return; } const int par1 = ( ev >> 8 ) & 0xff; const int par2 = ev >> 16; const MidiEventTypes cmdtype = static_cast( cmd & 0xf0 ); const int chan = cmd & 0x0f; const QString d = m_inputDevices.value( hm ); if( d.isEmpty() || !m_inputSubs.contains( d ) ) { return; } const MidiPortList & l = m_inputSubs[d]; for( MidiPortList::ConstIterator it = l.begin(); it != l.end(); ++it ) { switch( cmdtype ) { case MidiNoteOn: case MidiNoteOff: case MidiKeyPressure: ( *it )->processInEvent( MidiEvent( cmdtype, chan, par1 - KeysPerOctave, par2 & 0xff, &hm ) ); break; case MidiControlChange: case MidiProgramChange: case MidiChannelPressure: ( *it )->processInEvent( MidiEvent( cmdtype, chan, par1, par2 & 0xff, &hm ) ); break; case MidiPitchBend: ( *it )->processInEvent( MidiEvent( cmdtype, chan, par1 + par2*128, 0, &hm ) ); break; default: qWarning( "MidiWinMM: unhandled input event %d\n", cmdtype ); break; } } } void MidiWinMM::updateDeviceList() { closeDevices(); openDevices(); emit readablePortsChanged(); emit writablePortsChanged(); } void MidiWinMM::closeDevices() { m_inputSubs.clear(); m_outputSubs.clear(); QMapIterator i( m_inputDevices ); while( i.hasNext() ) { midiInClose( i.next().key() ); } QMapIterator o( m_outputDevices ); while( o.hasNext() ) { midiOutClose( o.next().key() ); } m_inputDevices.clear(); m_outputDevices.clear(); } void MidiWinMM::openDevices() { m_inputDevices.clear(); for( unsigned int i = 0; i < midiInGetNumDevs(); ++i ) { MIDIINCAPS c; midiInGetDevCaps( i, &c, sizeof( c ) ); HMIDIIN hm = 0; MMRESULT res = midiInOpen( &hm, i, (DWORD_PTR) &inputCallback, (DWORD_PTR) this, CALLBACK_FUNCTION ); if( res == MMSYSERR_NOERROR ) { m_inputDevices[hm] = qstrdup( c.szPname ); midiInStart( hm ); } } m_outputDevices.clear(); for( unsigned int i = 0; i < midiOutGetNumDevs(); ++i ) { MIDIOUTCAPS c; midiOutGetDevCaps( i, &c, sizeof( c ) ); HMIDIOUT hm = 0; MMRESULT res = midiOutOpen( &hm, i, 0, 0, CALLBACK_NULL ); if( res == MMSYSERR_NOERROR ) { m_outputDevices[hm] = qstrdup( c.szPname ); } } } MidiWinMM::setupWidget::setupWidget( QWidget* parent ) : MidiClient::setupWidget( MidiWinMM::name(), parent ) { } MidiWinMM::setupWidget::~setupWidget() { } #include "moc_MidiWinMM.cxx" #endif lmms-1.1.3/src/core/note.cpp000066400000000000000000000107121247673406200156700ustar00rootroot00000000000000/* * note.cpp - implementation of class note * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "note.h" #include "DetuningHelper.h" #include "templates.h" note::note( const MidiTime & _length, const MidiTime & _pos, int _key, volume_t _volume, panning_t _panning, DetuningHelper * _detuning ) : m_selected( false ), m_oldKey( qBound( 0, _key, NumKeys ) ), m_oldPos( _pos ), m_oldLength( _length ), m_isPlaying( false ), m_key( qBound( 0, _key, NumKeys ) ), m_volume( qBound( MinVolume, _volume, MaxVolume ) ), m_panning( qBound( PanningLeft, _panning, PanningRight ) ), m_length( _length ), m_pos( _pos ), m_detuning( NULL ) { if( _detuning ) { m_detuning = sharedObject::ref( _detuning ); } else { createDetuning(); } } note::note( const note & _note ) : SerializingObject( _note ), m_selected( _note.m_selected ), m_oldKey( _note.m_oldKey ), m_oldPos( _note.m_oldPos ), m_oldLength( _note.m_oldLength ), m_isPlaying( _note.m_isPlaying ), m_key( _note.m_key), m_volume( _note.m_volume ), m_panning( _note.m_panning ), m_length( _note.m_length ), m_pos( _note.m_pos ), m_detuning( NULL ) { if( _note.m_detuning ) { m_detuning = sharedObject::ref( _note.m_detuning ); } } note::~note() { if( m_detuning ) { sharedObject::unref( m_detuning ); } } void note::setLength( const MidiTime & _length ) { m_length = _length; } void note::setPos( const MidiTime & _pos ) { m_pos = _pos; } void note::setKey( const int _key ) { const int k = qBound( 0, _key, NumKeys ); m_key = k; } void note::setVolume( volume_t _volume ) { const volume_t v = qBound( MinVolume, _volume, MaxVolume ); m_volume = v; } void note::setPanning( panning_t _panning ) { const panning_t p = qBound( PanningLeft, _panning, PanningRight ); m_panning = p; } MidiTime note::quantized( const MidiTime & _m, const int _q_grid ) { float p = ( (float) _m / _q_grid ); if( p - floorf( p ) < 0.5f ) { return( static_cast( p ) * _q_grid ); } return( static_cast( p + 1 ) * _q_grid ); } void note::quantizeLength( const int _q_grid ) { setLength( quantized( length(), _q_grid ) ); if( length() == 0 ) { setLength( _q_grid ); } } void note::quantizePos( const int _q_grid ) { setPos( quantized( pos(), _q_grid ) ); } void note::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "key", m_key ); _this.setAttribute( "vol", m_volume ); _this.setAttribute( "pan", m_panning ); _this.setAttribute( "len", m_length ); _this.setAttribute( "pos", m_pos ); if( m_detuning && m_length ) { m_detuning->saveSettings( _doc, _this ); } } void note::loadSettings( const QDomElement & _this ) { const int oldKey = _this.attribute( "tone" ).toInt() + _this.attribute( "oct" ).toInt() * KeysPerOctave; m_key = qMax( oldKey, _this.attribute( "key" ).toInt() ); m_volume = _this.attribute( "vol" ).toInt(); m_panning = _this.attribute( "pan" ).toInt(); m_length = _this.attribute( "len" ).toInt(); m_pos = _this.attribute( "pos" ).toInt(); if( _this.hasChildNodes() ) { createDetuning(); m_detuning->loadSettings( _this ); } } void note::editDetuningPattern() { createDetuning(); m_detuning->automationPattern()->openInAutomationEditor(); } void note::createDetuning() { if( m_detuning == NULL ) { m_detuning = new DetuningHelper; (void) m_detuning->automationPattern(); m_detuning->setRange( -MaxDetuning, MaxDetuning, 0.5f ); m_detuning->automationPattern()->setProgressionType( AutomationPattern::LinearProgression ); } } bool note::hasDetuningInfo() const { return m_detuning && m_detuning->hasAutomation(); } lmms-1.1.3/src/core/project_version.cpp000066400000000000000000000035211247673406200201360ustar00rootroot00000000000000/* * project_version.cpp - compare versions in import upgrades * * Copyright (c) 2007 Javier Serrano Polo * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "project_version.h" int projectVersion::compare( const projectVersion & _v1, const projectVersion & _v2 ) { int n1, n2; // Major n1 = _v1.section( '.', 0, 0 ).toInt(); n2 = _v2.section( '.', 0, 0 ).toInt(); if( n1 != n2 ) { return n1 - n2; } // Minor n1 = _v1.section( '.', 1, 1 ).toInt(); n2 = _v2.section( '.', 1, 1 ).toInt(); if( n1 != n2 ) { return n1 - n2; } // Release n1 = _v1.section( '.', 2 ).section( '-', 0, 0 ).toInt(); n2 = _v2.section( '.', 2 ).section( '-', 0, 0 ).toInt(); if( n1 != n2 ) { return n1 - n2; } // Build const QString b1 = _v1.section( '.', 2 ).section( '-', 1 ); const QString b2 = _v2.section( '.', 2 ).section( '-', 1 ); // make sure 0.x.y > 0.x.y-patch if( b1.isEmpty() ) { return 1; } if( b2.isEmpty() ) { return -1; } return QString::compare( b1, b2 ); } lmms-1.1.3/src/core/song.cpp000066400000000000000000000661171247673406200157030ustar00rootroot00000000000000/* * song.cpp - root of the model tree * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "song.h" #include "AutomationTrack.h" #include "AutomationEditor.h" #include "bb_editor.h" #include "bb_track.h" #include "bb_track_container.h" #include "config_mgr.h" #include "ControllerRackView.h" #include "ControllerConnection.h" #include "embed.h" #include "EnvelopeAndLfoParameters.h" #include "export_project_dialog.h" #include "FxMixer.h" #include "FxMixerView.h" #include "ImportFilter.h" #include "InstrumentTrack.h" #include "MainWindow.h" #include "FileDialog.h" #include "MidiClient.h" #include "DataFile.h" #include "NotePlayHandle.h" #include "Pattern.h" #include "PianoRoll.h" #include "ProjectJournal.h" #include "project_notes.h" #include "ProjectRenderer.h" #include "rename_dialog.h" #include "SongEditor.h" #include "templates.h" #include "text_float.h" #include "timeline.h" #include "PeakController.h" tick_t MidiTime::s_ticksPerTact = DefaultTicksPerTact; song::song() : TrackContainer(), m_globalAutomationTrack( dynamic_cast( track::create( track::HiddenAutomationTrack, this ) ) ), m_tempoModel( DefaultTempo, MinTempo, MaxTempo, this, tr( "Tempo" ) ), m_timeSigModel( this ), m_oldTicksPerTact( DefaultTicksPerTact ), m_masterVolumeModel( 100, 0, 200, this, tr( "Master volume" ) ), m_masterPitchModel( 0, -12, 12, this, tr( "Master pitch" ) ), m_fileName(), m_oldFileName(), m_modified( false ), m_recording( false ), m_exporting( false ), m_exportLoop( false ), m_playing( false ), m_paused( false ), m_loadingProject( false ), m_playMode( Mode_None ), m_length( 0 ), m_trackToPlay( NULL ), m_patternToPlay( NULL ), m_loopPattern( false ), m_elapsedMilliSeconds( 0 ), m_elapsedTicks( 0 ), m_elapsedTacts( 0 ) { connect( &m_tempoModel, SIGNAL( dataChanged() ), this, SLOT( setTempo() ) ); connect( &m_tempoModel, SIGNAL( dataUnchanged() ), this, SLOT( setTempo() ) ); connect( &m_timeSigModel, SIGNAL( dataChanged() ), this, SLOT( setTimeSignature() ) ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateFramesPerTick() ) ); connect( &m_masterVolumeModel, SIGNAL( dataChanged() ), this, SLOT( masterVolumeChanged() ) ); /* connect( &m_masterPitchModel, SIGNAL( dataChanged() ), this, SLOT( masterPitchChanged() ) );*/ qRegisterMetaType( "note" ); } song::~song() { m_playing = false; delete m_globalAutomationTrack; } void song::masterVolumeChanged() { engine::mixer()->setMasterGain( m_masterVolumeModel.value() / 100.0f ); } void song::setTempo() { const bpm_t tempo = (bpm_t) m_tempoModel.value(); engine::mixer()->lock(); PlayHandleList & playHandles = engine::mixer()->playHandles(); for( PlayHandleList::Iterator it = playHandles.begin(); it != playHandles.end(); ++it ) { NotePlayHandle * nph = dynamic_cast( *it ); if( nph && !nph->isReleased() ) { nph->resize( tempo ); } } engine::mixer()->unlock(); engine::updateFramesPerTick(); m_vstSyncController.setTempo( tempo ); emit tempoChanged( tempo ); } void song::setTimeSignature() { MidiTime::setTicksPerTact( ticksPerTact() ); emit timeSignatureChanged( m_oldTicksPerTact, ticksPerTact() ); emit dataChanged(); m_oldTicksPerTact = ticksPerTact(); m_vstSyncController.setTimeSignature( getTimeSigModel().getNumerator(), getTimeSigModel().getDenominator() ); } void song::savePos() { timeLine * tl = m_playPos[m_playMode].m_timeLine; if( tl != NULL ) { tl->savePos( m_playPos[m_playMode] ); } } void song::processNextBuffer() { if( m_playing == false ) { return; } TrackList track_list; int tco_num = -1; switch( m_playMode ) { case Mode_PlaySong: track_list = tracks(); // at song-start we have to reset the LFOs if( m_playPos[Mode_PlaySong] == 0 ) { EnvelopeAndLfoParameters::instances()->reset(); } break; case Mode_PlayTrack: track_list.push_back( m_trackToPlay ); break; case Mode_PlayBB: if( engine::getBBTrackContainer()->numOfBBs() > 0 ) { tco_num = engine::getBBTrackContainer()-> currentBB(); track_list.push_back( bbTrack::findBBTrack( tco_num ) ); } break; case Mode_PlayPattern: if( m_patternToPlay != NULL ) { tco_num = m_patternToPlay->getTrack()-> getTCONum( m_patternToPlay ); track_list.push_back( m_patternToPlay->getTrack() ); } break; default: return; } if( track_list.empty() == true ) { return; } // check for looping-mode and act if necessary timeLine * tl = m_playPos[m_playMode].m_timeLine; bool check_loop = tl != NULL && m_exporting == false && tl->loopPointsEnabled(); if( check_loop ) { if( m_playPos[m_playMode] < tl->loopBegin() || m_playPos[m_playMode] >= tl->loopEnd() ) { m_elapsedMilliSeconds = (tl->loopBegin().getTicks()*60*1000/48)/getTempo(); m_playPos[m_playMode].setTicks( tl->loopBegin().getTicks() ); } } f_cnt_t total_frames_played = 0; const float frames_per_tick = engine::framesPerTick(); while( total_frames_played < engine::mixer()->framesPerPeriod() ) { m_vstSyncController.update(); f_cnt_t played_frames = engine::mixer()->framesPerPeriod() - total_frames_played; float current_frame = m_playPos[m_playMode].currentFrame(); // did we play a tick? if( current_frame >= frames_per_tick ) { int ticks = m_playPos[m_playMode].getTicks() + (int)( current_frame / frames_per_tick ); m_vstSyncController.setAbsolutePosition( ticks ); // did we play a whole tact? if( ticks >= MidiTime::ticksPerTact() ) { // per default we just continue playing even if // there's no more stuff to play // (song-play-mode) int max_tact = m_playPos[m_playMode].getTact() + 2; // then decide whether to go over to next tact // or to loop back to first tact if( m_playMode == Mode_PlayBB ) { max_tact = engine::getBBTrackContainer() ->lengthOfCurrentBB(); } else if( m_playMode == Mode_PlayPattern && m_loopPattern == true && tl != NULL && tl->loopPointsEnabled() == false ) { max_tact = m_patternToPlay->length() .getTact(); } // end of played object reached? if( m_playPos[m_playMode].getTact() + 1 >= max_tact ) { // then start from beginning and keep // offset ticks = ticks % ( max_tact * MidiTime::ticksPerTact() ); // wrap milli second counter m_elapsedMilliSeconds = ( ticks * 60 * 1000 / 48 ) / getTempo(); m_vstSyncController.setAbsolutePosition( ticks ); } } m_playPos[m_playMode].setTicks( ticks ); if( check_loop ) { m_vstSyncController.startCycle( tl->loopBegin().getTicks(), tl->loopEnd().getTicks() ); if( m_playPos[m_playMode] >= tl->loopEnd() ) { m_playPos[m_playMode].setTicks( tl->loopBegin().getTicks() ); m_elapsedMilliSeconds = ((tl->loopBegin().getTicks())*60*1000/48)/getTempo(); } } else { m_vstSyncController.stopCycle(); } current_frame = fmodf( current_frame, frames_per_tick ); m_playPos[m_playMode].setCurrentFrame( current_frame ); } f_cnt_t last_frames = (f_cnt_t)frames_per_tick - (f_cnt_t) current_frame; // skip last frame fraction if( last_frames == 0 ) { ++total_frames_played; m_playPos[m_playMode].setCurrentFrame( current_frame + 1.0f ); continue; } // do we have some samples left in this tick but these are // less then samples we have to play? if( last_frames < played_frames ) { // then set played_samples to remaining samples, the // rest will be played in next loop played_frames = last_frames; } if( (f_cnt_t) current_frame == 0 ) { if( m_playMode == Mode_PlaySong ) { m_globalAutomationTrack->play( m_playPos[m_playMode], played_frames, total_frames_played, tco_num ); } // loop through all tracks and play them for( int i = 0; i < track_list.size(); ++i ) { track_list[i]->play( m_playPos[m_playMode], played_frames, total_frames_played, tco_num ); } } // update frame-counters total_frames_played += played_frames; m_playPos[m_playMode].setCurrentFrame( played_frames + current_frame ); m_elapsedMilliSeconds += (((played_frames/frames_per_tick)*60*1000/48)/getTempo()); m_elapsedTacts = m_playPos[Mode_PlaySong].getTact(); m_elapsedTicks = (m_playPos[Mode_PlaySong].getTicks()%ticksPerTact())/48; } } void song::playSong() { m_recording = false; if( isStopped() == false ) { stop(); } m_playMode = Mode_PlaySong; m_playing = true; m_paused = false; m_vstSyncController.setPlaybackState( true ); savePos(); emit playbackStateChanged(); } void song::record() { m_recording = true; // TODO: Implement } void song::playAndRecord() { playSong(); m_recording = true; } void song::playTrack( track * _trackToPlay ) { if( isStopped() == false ) { stop(); } m_trackToPlay = _trackToPlay; m_playMode = Mode_PlayTrack; m_playing = true; m_paused = false; m_vstSyncController.setPlaybackState( true ); savePos(); emit playbackStateChanged(); } void song::playBB() { if( isStopped() == false ) { stop(); } m_playMode = Mode_PlayBB; m_playing = true; m_paused = false; m_vstSyncController.setPlaybackState( true ); savePos(); emit playbackStateChanged(); } void song::playPattern( Pattern* patternToPlay, bool _loop ) { if( isStopped() == false ) { stop(); } m_patternToPlay = patternToPlay; m_loopPattern = _loop; if( m_patternToPlay != NULL ) { m_playMode = Mode_PlayPattern; m_playing = true; m_paused = false; } savePos(); emit playbackStateChanged(); } void song::updateLength() { m_length = 0; m_tracksMutex.lockForRead(); for( TrackList::const_iterator it = tracks().begin(); it != tracks().end(); ++it ) { const tact_t cur = ( *it )->length(); if( cur > m_length ) { m_length = cur; } } m_tracksMutex.unlock(); emit lengthChanged( m_length ); } void song::setPlayPos( tick_t _ticks, PlayModes _play_mode ) { m_elapsedTicks += m_playPos[_play_mode].getTicks() - _ticks; m_elapsedMilliSeconds += (((( _ticks - m_playPos[_play_mode].getTicks()))*60*1000/48)/getTempo()); m_playPos[_play_mode].setTicks( _ticks ); m_playPos[_play_mode].setCurrentFrame( 0.0f ); } void song::togglePause() { if( m_paused == true ) { m_playing = true; m_paused = false; } else { m_playing = false; m_paused = true; } m_vstSyncController.setPlaybackState( m_playing ); emit playbackStateChanged(); } void song::stop() { // do not stop/reset things again if we're stopped already if( m_playMode == Mode_None ) { return; } timeLine * tl = m_playPos[m_playMode].m_timeLine; m_playing = false; m_paused = false; m_recording = true; if( tl != NULL ) { switch( tl->behaviourAtStop() ) { case timeLine::BackToZero: m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; break; case timeLine::BackToStart: if( tl->savedPos() >= 0 ) { m_playPos[m_playMode].setTicks( tl->savedPos().getTicks() ); m_elapsedMilliSeconds = (((tl->savedPos().getTicks())*60*1000/48)/getTempo()); tl->savePos( -1 ); } break; case timeLine::KeepStopPosition: default: break; } } else { m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; } m_playPos[m_playMode].setCurrentFrame( 0 ); m_vstSyncController.setPlaybackState( m_exporting ); m_vstSyncController.setAbsolutePosition( m_playPos[m_playMode].getTicks() ); // remove all note-play-handles that are active engine::mixer()->clear(); m_playMode = Mode_None; emit playbackStateChanged(); } void song::startExport() { stop(); playSong(); m_exporting = true; m_vstSyncController.setPlaybackState( true ); } void song::stopExport() { stop(); m_exporting = false; m_exportLoop = false; m_vstSyncController.setPlaybackState( m_playing ); } void song::insertBar() { m_tracksMutex.lockForRead(); for( TrackList::const_iterator it = tracks().begin(); it != tracks().end(); ++it ) { ( *it )->insertTact( m_playPos[Mode_PlaySong] ); } m_tracksMutex.unlock(); } void song::removeBar() { m_tracksMutex.lockForRead(); for( TrackList::const_iterator it = tracks().begin(); it != tracks().end(); ++it ) { ( *it )->removeTact( m_playPos[Mode_PlaySong] ); } m_tracksMutex.unlock(); } void song::addBBTrack() { engine::mixer()->lock(); track * t = track::create( track::BBTrack, this ); engine::getBBTrackContainer()->setCurrentBB( dynamic_cast( t )->index() ); engine::mixer()->unlock(); } void song::addSampleTrack() { engine::mixer()->lock(); (void) track::create( track::SampleTrack, this ); engine::mixer()->unlock(); } void song::addAutomationTrack() { engine::mixer()->lock(); (void) track::create( track::AutomationTrack, this ); engine::mixer()->unlock(); } bpm_t song::getTempo() { return (bpm_t) m_tempoModel.value(); } AutomationPattern * song::tempoAutomationPattern() { return AutomationPattern::globalAutomationPattern( &m_tempoModel ); } void song::clearProject() { engine::projectJournal()->setJournalling( false ); if( m_playing ) { stop(); } for( int i = 0; i < Mode_Count; i++ ) { setPlayPos( 0, ( PlayModes )i ); } engine::mixer()->lock(); if( engine::getBBEditor() ) { engine::getBBEditor()->clearAllTracks(); } if( engine::songEditor() ) { engine::songEditor()->clearAllTracks(); } if( engine::fxMixerView() ) { engine::fxMixerView()->clear(); } QCoreApplication::sendPostedEvents(); engine::getBBTrackContainer()->clearAllTracks(); clearAllTracks(); engine::fxMixer()->clear(); if( engine::automationEditor() ) { engine::automationEditor()->setCurrentPattern( NULL ); } if( engine::pianoRoll() ) { engine::pianoRoll()->reset(); } m_tempoModel.reset(); m_masterVolumeModel.reset(); m_masterPitchModel.reset(); m_timeSigModel.reset(); AutomationPattern::globalAutomationPattern( &m_tempoModel )->clear(); AutomationPattern::globalAutomationPattern( &m_masterVolumeModel )-> clear(); AutomationPattern::globalAutomationPattern( &m_masterPitchModel )-> clear(); engine::mixer()->unlock(); if( engine::getProjectNotes() ) { engine::getProjectNotes()->clear(); } // Move to function while( !m_controllers.empty() ) { delete m_controllers.last(); } emit dataChanged(); engine::projectJournal()->clearJournal(); engine::projectJournal()->setJournalling( true ); InstrumentTrackView::cleanupWindowCache(); } // create new file void song::createNewProject() { QString default_template = configManager::inst()->userProjectsDir() + "templates/default.mpt"; if( QFile::exists( default_template ) ) { createNewProjectFromTemplate( default_template ); return; } default_template = configManager::inst()->factoryProjectsDir() + "templates/default.mpt"; if( QFile::exists( default_template ) ) { createNewProjectFromTemplate( default_template ); return; } m_loadingProject = true; clearProject(); engine::projectJournal()->setJournalling( false ); m_fileName = m_oldFileName = ""; track * t; t = track::create( track::InstrumentTrack, this ); dynamic_cast( t )->loadInstrument( "tripleoscillator" ); t = track::create( track::InstrumentTrack, engine::getBBTrackContainer() ); dynamic_cast( t )->loadInstrument( "kicker" ); track::create( track::SampleTrack, this ); track::create( track::BBTrack, this ); track::create( track::AutomationTrack, this ); m_tempoModel.setInitValue( DefaultTempo ); m_timeSigModel.reset(); m_masterVolumeModel.setInitValue( 100 ); m_masterPitchModel.setInitValue( 0 ); QCoreApplication::instance()->processEvents(); m_loadingProject = false; engine::getBBTrackContainer()->updateAfterTrackAdd(); engine::projectJournal()->setJournalling( true ); QCoreApplication::sendPostedEvents(); m_modified = false; if( engine::mainWindow() ) { engine::mainWindow()->resetWindowTitle(); } } void song::createNewProjectFromTemplate( const QString & _template ) { loadProject( _template ); // clear file-name so that user doesn't overwrite template when // saving... m_fileName = m_oldFileName = ""; // update window title if( engine::mainWindow() ) { engine::mainWindow()->resetWindowTitle(); } } // load given song void song::loadProject( const QString & _file_name ) { QDomNode node; m_loadingProject = true; clearProject(); engine::projectJournal()->setJournalling( false ); m_fileName = _file_name; m_oldFileName = _file_name; DataFile dataFile( m_fileName ); // if file could not be opened, head-node is null and we create // new project if( dataFile.head().isNull() ) { createNewProject(); return; } DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeLoad ); engine::mixer()->lock(); // get the header information from the DOM m_tempoModel.loadSettings( dataFile.head(), "bpm" ); m_timeSigModel.loadSettings( dataFile.head(), "timesig" ); m_masterVolumeModel.loadSettings( dataFile.head(), "mastervol" ); m_masterPitchModel.loadSettings( dataFile.head(), "masterpitch" ); if( m_playPos[Mode_PlaySong].m_timeLine ) { // reset loop-point-state m_playPos[Mode_PlaySong].m_timeLine->toggleLoopPoints( 0 ); } if( !dataFile.content().firstChildElement( "track" ).isNull() ) { m_globalAutomationTrack->restoreState( dataFile.content(). firstChildElement( "track" ) ); } //Backward compatibility for LMMS <= 0.4.15 PeakController::initGetControllerBySetting(); // Load mixer first to be able to set the correct range for FX channels node = dataFile.content().firstChildElement( engine::fxMixer()->nodeName() ); if( !node.isNull() ) { engine::fxMixer()->restoreState( node.toElement() ); if( engine::hasGUI() ) { // refresh FxMixerView engine::fxMixerView()->refreshDisplay(); } } node = dataFile.content().firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( node.nodeName() == "trackcontainer" ) { ( (JournallingObject *)( this ) )->restoreState( node.toElement() ); } else if( node.nodeName() == "controllers" ) { restoreControllerStates( node.toElement() ); } else if( engine::hasGUI() ) { if( node.nodeName() == engine::getControllerRackView()->nodeName() ) { engine::getControllerRackView()->restoreState( node.toElement() ); } else if( node.nodeName() == engine::pianoRoll()->nodeName() ) { engine::pianoRoll()->restoreState( node.toElement() ); } else if( node.nodeName() == engine::automationEditor()->nodeName() ) { engine::automationEditor()->restoreState( node.toElement() ); } else if( node.nodeName() == engine::getProjectNotes()->nodeName() ) { engine::getProjectNotes()->SerializingObject::restoreState( node.toElement() ); } else if( node.nodeName() == m_playPos[Mode_PlaySong].m_timeLine->nodeName() ) { m_playPos[Mode_PlaySong].m_timeLine->restoreState( node.toElement() ); } } } node = node.nextSibling(); } // quirk for fixing projects with broken positions of TCOs inside // BB-tracks engine::getBBTrackContainer()->fixIncorrectPositions(); // Connect controller links to their controllers // now that everything is loaded ControllerConnection::finalizeConnections(); // resolve all IDs so that autoModels are automated AutomationPattern::resolveAllIDs(); engine::mixer()->unlock(); configManager::inst()->addRecentlyOpenedProject( _file_name ); engine::projectJournal()->setJournalling( true ); emit projectLoaded(); m_loadingProject = false; m_modified = false; if( engine::mainWindow() ) { engine::mainWindow()->resetWindowTitle(); } } // only save current song as _filename and do nothing else bool song::saveProjectFile( const QString & _filename ) { DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeSave ); DataFile dataFile( DataFile::SongProject ); m_tempoModel.saveSettings( dataFile, dataFile.head(), "bpm" ); m_timeSigModel.saveSettings( dataFile, dataFile.head(), "timesig" ); m_masterVolumeModel.saveSettings( dataFile, dataFile.head(), "mastervol" ); m_masterPitchModel.saveSettings( dataFile, dataFile.head(), "masterpitch" ); saveState( dataFile, dataFile.content() ); m_globalAutomationTrack->saveState( dataFile, dataFile.content() ); engine::fxMixer()->saveState( dataFile, dataFile.content() ); if( engine::hasGUI() ) { engine::getControllerRackView()->saveState( dataFile, dataFile.content() ); engine::pianoRoll()->saveState( dataFile, dataFile.content() ); engine::automationEditor()->saveState( dataFile, dataFile.content() ); engine::getProjectNotes()->SerializingObject::saveState( dataFile, dataFile.content() ); m_playPos[Mode_PlaySong].m_timeLine->saveState( dataFile, dataFile.content() ); } saveControllerStates( dataFile, dataFile.content() ); return dataFile.writeFile( _filename ); } // save current song and update the gui bool song::guiSaveProject() { DataFile dataFile( DataFile::SongProject ); m_fileName = dataFile.nameWithExtension( m_fileName ); if( saveProjectFile( m_fileName ) && engine::hasGUI() ) { textFloat::displayMessage( tr( "Project saved" ), tr( "The project %1 is now saved." ).arg( m_fileName ), embed::getIconPixmap( "project_save", 24, 24 ), 2000 ); configManager::inst()->addRecentlyOpenedProject( m_fileName ); m_modified = false; engine::mainWindow()->resetWindowTitle(); } else if( engine::hasGUI() ) { textFloat::displayMessage( tr( "Project NOT saved." ), tr( "The project %1 was not saved!" ).arg( m_fileName ), embed::getIconPixmap( "error" ), 4000 ); return false; } return true; } // save current song in given filename bool song::guiSaveProjectAs( const QString & _file_name ) { QString o = m_oldFileName; m_oldFileName = m_fileName; m_fileName = _file_name; if( guiSaveProject() == false ) { m_fileName = m_oldFileName; m_oldFileName = o; return false; } m_oldFileName = m_fileName; return true; } void song::importProject() { FileDialog ofd( NULL, tr( "Import file" ), configManager::inst()->userProjectsDir(), tr("MIDI sequences") + " (*.mid *.midi *.rmi);;" + tr("FL Studio projects") + " (*.flp);;" + tr("Hydrogen projects") + " (*.h2song);;" + tr("All file types") + " (*.*)"); ofd.setFileMode( FileDialog::ExistingFiles ); if( ofd.exec () == QDialog::Accepted && !ofd.selectedFiles().isEmpty() ) { ImportFilter::import( ofd.selectedFiles()[0], this ); } } void song::saveControllerStates( QDomDocument & _doc, QDomElement & _this ) { // save settings of controllers QDomElement controllersNode =_doc.createElement( "controllers" ); _this.appendChild( controllersNode ); for( int i = 0; i < m_controllers.size(); ++i ) { m_controllers[i]->saveState( _doc, controllersNode ); } } void song::restoreControllerStates( const QDomElement & _this ) { QDomNode node = _this.firstChild(); while( !node.isNull() ) { Controller * c = Controller::create( node.toElement(), this ); Q_ASSERT( c != NULL ); /* For PeakController, addController() was called in * PeakControllerEffect::PeakControllerEffect(). * This line removes the previously added controller for PeakController * without affecting the order of controllers in Controller Rack */ engine::getSong()->removeController( c ); addController( c ); node = node.nextSibling(); } } void song::exportProjectTracks() { exportProject(true); } void song::exportProject(bool multiExport) { if( isEmpty() ) { QMessageBox::information( engine::mainWindow(), tr( "Empty project" ), tr( "This project is empty so exporting makes " "no sense. Please put some items into " "Song Editor first!" ) ); return; } FileDialog efd( engine::mainWindow() ); if (multiExport) { efd.setFileMode( FileDialog::Directory); efd.setWindowTitle( tr( "Select directory for writing exported tracks..." ) ); if( !m_fileName.isEmpty() ) { efd.setDirectory( QFileInfo( m_fileName ).absolutePath() ); } } else { efd.setFileMode( FileDialog::AnyFile ); int idx = 0; QStringList types; while( __fileEncodeDevices[idx].m_fileFormat != ProjectRenderer::NumFileFormats ) { types << tr( __fileEncodeDevices[idx].m_description ); ++idx; } efd.setFilters( types ); QString base_filename; if( !m_fileName.isEmpty() ) { efd.setDirectory( QFileInfo( m_fileName ).absolutePath() ); base_filename = QFileInfo( m_fileName ).completeBaseName(); } else { efd.setDirectory( configManager::inst()->userProjectsDir() ); base_filename = tr( "untitled" ); } efd.selectFile( base_filename + __fileEncodeDevices[0].m_extension ); efd.setWindowTitle( tr( "Select file for project-export..." ) ); } efd.setAcceptMode( FileDialog::AcceptSave ); if( efd.exec() == QDialog::Accepted && !efd.selectedFiles().isEmpty() && !efd.selectedFiles()[0].isEmpty() ) { QString suffix = ""; if ( !multiExport ) { int stx = efd.selectedNameFilter().indexOf( "(*." ); int etx = efd.selectedNameFilter().indexOf( ")" ); if ( stx > 0 && etx > stx ) { // Get first extension from selected dropdown. // i.e. ".wav" from "WAV-File (*.wav), Dummy-File (*.dum)" suffix = efd.selectedNameFilter().mid( stx + 2, etx - stx - 2 ).split( " " )[0].trimmed(); if ( efd.selectedFiles()[0].endsWith( suffix ) ) { suffix = ""; } } } const QString export_file_name = efd.selectedFiles()[0] + suffix; exportProjectDialog epd( export_file_name, engine::mainWindow(), multiExport ); epd.exec(); } } void song::updateFramesPerTick() { engine::updateFramesPerTick(); } void song::setModified() { if( !m_loadingProject ) { m_modified = true; if( engine::mainWindow() && QThread::currentThread() == engine::mainWindow()->thread() ) { engine::mainWindow()->resetWindowTitle(); } } } void song::addController( Controller * _c ) { if( _c != NULL && !m_controllers.contains( _c ) ) { m_controllers.append( _c ); emit dataChanged(); } } void song::removeController( Controller * _controller ) { int index = m_controllers.indexOf( _controller ); if( index != -1 ) { m_controllers.remove( index ); if( engine::getSong() ) { engine::getSong()->setModified(); } emit dataChanged(); } } #include "moc_song.cxx" lmms-1.1.3/src/core/timeline.cpp000066400000000000000000000233431247673406200165350ustar00rootroot00000000000000/* * timeline.cpp - class timeLine, representing a time-line with position marker * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "timeline.h" #include "embed.h" #include "engine.h" #include "templates.h" #include "nstate_button.h" #include "MainWindow.h" #include "text_float.h" #if QT_VERSION < 0x040800 #define MiddleButton MidButton #endif QPixmap * timeLine::s_timeLinePixmap = NULL; QPixmap * timeLine::s_posMarkerPixmap = NULL; QPixmap * timeLine::s_loopPointBeginPixmap = NULL; QPixmap * timeLine::s_loopPointEndPixmap = NULL; timeLine::timeLine( const int _xoff, const int _yoff, const float _ppt, song::playPos & _pos, const MidiTime & _begin, QWidget * _parent ) : QWidget( _parent ), m_autoScroll( AutoScrollEnabled ), m_loopPoints( LoopPointsDisabled ), m_behaviourAtStop( BackToZero ), m_changedPosition( true ), m_xOffset( _xoff ), m_posMarkerX( 0 ), m_ppt( _ppt ), m_pos( _pos ), m_begin( _begin ), m_savedPos( -1 ), m_hint( NULL ), m_action( NoAction ), m_moveXOff( 0 ) { m_loopPos[0] = 0; m_loopPos[1] = DefaultTicksPerTact; if( s_timeLinePixmap == NULL ) { s_timeLinePixmap = new QPixmap( embed::getIconPixmap( "timeline" ) ); } if( s_posMarkerPixmap == NULL ) { s_posMarkerPixmap = new QPixmap( embed::getIconPixmap( "playpos_marker" ) ); } if( s_loopPointBeginPixmap == NULL ) { s_loopPointBeginPixmap = new QPixmap( embed::getIconPixmap( "loop_point_b" ) ); } if( s_loopPointEndPixmap == NULL ) { s_loopPointEndPixmap = new QPixmap( embed::getIconPixmap( "loop_point_e" ) ); } setAttribute( Qt::WA_OpaquePaintEvent, true ); move( 0, _yoff ); setFixedHeight( s_timeLinePixmap->height() ); m_xOffset -= s_posMarkerPixmap->width() / 2; m_pos.m_timeLine = this; QTimer * update_timer = new QTimer( this ); connect( update_timer, SIGNAL( timeout() ), this, SLOT( updatePosition() ) ); update_timer->start( 50 ); } timeLine::~timeLine() { if( engine::songEditor() ) { m_pos.m_timeLine = NULL; } delete m_hint; } void timeLine::addToolButtons( QWidget * _tool_bar ) { nStateButton * autoScroll = new nStateButton( _tool_bar ); autoScroll->setGeneralToolTip( tr( "Enable/disable auto-scrolling" ) ); autoScroll->addState( embed::getIconPixmap( "autoscroll_on" ) ); autoScroll->addState( embed::getIconPixmap( "autoscroll_off" ) ); connect( autoScroll, SIGNAL( changedState( int ) ), this, SLOT( toggleAutoScroll( int ) ) ); nStateButton * loopPoints = new nStateButton( _tool_bar ); loopPoints->setGeneralToolTip( tr( "Enable/disable loop-points" ) ); loopPoints->addState( embed::getIconPixmap( "loop_points_off" ) ); loopPoints->addState( embed::getIconPixmap( "loop_points_on" ) ); connect( loopPoints, SIGNAL( changedState( int ) ), this, SLOT( toggleLoopPoints( int ) ) ); connect( this, SIGNAL( loopPointStateLoaded( int ) ), loopPoints, SLOT( changeState( int ) ) ); nStateButton * behaviourAtStop = new nStateButton( _tool_bar ); behaviourAtStop->addState( embed::getIconPixmap( "back_to_zero" ), tr( "After stopping go back to begin" ) ); behaviourAtStop->addState( embed::getIconPixmap( "back_to_start" ), tr( "After stopping go back to " "position at which playing was " "started" ) ); behaviourAtStop->addState( embed::getIconPixmap( "keep_stop_position" ), tr( "After stopping keep position" ) ); connect( behaviourAtStop, SIGNAL( changedState( int ) ), this, SLOT( toggleBehaviourAtStop( int ) ) ); QBoxLayout * layout = dynamic_cast( _tool_bar->layout() ); layout->addWidget( autoScroll ); layout->addWidget( loopPoints ); layout->addWidget( behaviourAtStop ); } void timeLine::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "lp0pos", (int) loopBegin() ); _this.setAttribute( "lp1pos", (int) loopEnd() ); _this.setAttribute( "lpstate", m_loopPoints ); } void timeLine::loadSettings( const QDomElement & _this ) { m_loopPos[0] = _this.attribute( "lp0pos" ).toInt(); m_loopPos[1] = _this.attribute( "lp1pos" ).toInt(); m_loopPoints = static_cast( _this.attribute( "lpstate" ).toInt() ); update(); emit loopPointStateLoaded( m_loopPoints ); } void timeLine::updatePosition( const MidiTime & ) { const int new_x = markerX( m_pos ); if( new_x != m_posMarkerX ) { m_posMarkerX = new_x; m_changedPosition = true; emit positionChanged( m_pos ); update(); } } void timeLine::toggleAutoScroll( int _n ) { m_autoScroll = static_cast( _n ); } void timeLine::toggleLoopPoints( int _n ) { m_loopPoints = static_cast( _n ); update(); } void timeLine::toggleBehaviourAtStop( int _n ) { m_behaviourAtStop = static_cast( _n ); } void timeLine::paintEvent( QPaintEvent * ) { QPainter p( this ); QColor bg_color = QApplication::palette().color( QPalette::Active, QPalette::Background ); QLinearGradient g( 0, 0, 0, height() ); g.setColorAt( 0, bg_color.lighter( 150 ) ); g.setColorAt( 1, bg_color.darker( 150 ) ); p.fillRect( 0, 0, width(), height(), g ); p.setClipRect( m_xOffset, 0, width() - m_xOffset, height() ); p.setPen( QColor( 0, 0, 0 ) ); p.setOpacity( loopPointsEnabled() ? 0.9 : 0.2 ); p.drawPixmap( markerX( loopBegin() )+2, 2, *s_loopPointBeginPixmap ); p.drawPixmap( markerX( loopEnd() )+2, 2, *s_loopPointEndPixmap ); p.setOpacity( 1.0 ); tact_t tact_num = m_begin.getTact(); int x = m_xOffset + s_posMarkerPixmap->width() / 2 - ( ( static_cast( m_begin * m_ppt ) / MidiTime::ticksPerTact() ) % static_cast( m_ppt ) ); p.setPen( QColor( 192, 192, 192 ) ); for( int i = 0; x + i * m_ppt < width(); ++i ) { const int cx = x + qRound( i * m_ppt ); p.drawLine( cx, 5, cx, height() - 6 ); ++tact_num; if( ( tact_num - 1 ) % qMax( 1, qRound( 1.0f / 3.0f * MidiTime::ticksPerTact() / m_ppt ) ) == 0 ) { const QString s = QString::number( tact_num ); p.drawText( cx + qRound( ( m_ppt - p.fontMetrics(). width( s ) ) / 2 ), height() - p.fontMetrics().height() / 2, s ); } } p.setOpacity( 0.6 ); p.drawPixmap( m_posMarkerX, height() - s_posMarkerPixmap->height(), *s_posMarkerPixmap ); } void timeLine::mousePressEvent( QMouseEvent* event ) { if( event->x() < m_xOffset ) { return; } if( event->button() == Qt::LeftButton ) { m_action = MovePositionMarker; if( event->x() - m_xOffset < s_posMarkerPixmap->width() ) { m_moveXOff = event->x() - m_xOffset; } else { m_moveXOff = s_posMarkerPixmap->width() / 2; } } else if( event->button() == Qt::RightButton || event->button() == Qt::MiddleButton ) { m_moveXOff = s_posMarkerPixmap->width() / 2; const MidiTime t = m_begin + static_cast( event->x() * MidiTime::ticksPerTact() / m_ppt ); if( m_loopPos[0] > m_loopPos[1] ) { qSwap( m_loopPos[0], m_loopPos[1] ); } if( ( event->modifiers() & Qt::ShiftModifier ) || event->button() == Qt::MiddleButton ) { m_action = MoveLoopBegin; } else { m_action = MoveLoopEnd; } m_loopPos[( m_action == MoveLoopBegin ) ? 0 : 1] = t; } if( m_action == MoveLoopBegin ) { delete m_hint; m_hint = textFloat::displayMessage( tr( "Hint" ), tr( "Press to disable magnetic loop points." ), embed::getIconPixmap( "hint" ), 0 ); } else if( m_action == MoveLoopEnd ) { delete m_hint; m_hint = textFloat::displayMessage( tr( "Hint" ), tr( "Hold to move the begin loop point; Press to disable magnetic loop points." ), embed::getIconPixmap( "hint" ), 0 ); } mouseMoveEvent( event ); } void timeLine::mouseMoveEvent( QMouseEvent* event ) { const MidiTime t = m_begin + static_cast( qMax( event->x() - m_xOffset - m_moveXOff, 0 ) * MidiTime::ticksPerTact() / m_ppt ); switch( m_action ) { case MovePositionMarker: m_pos.setTicks( t.getTicks() ); engine::getSong()->setMilliSeconds(((((t.getTicks()))*60*1000/48)/engine::getSong()->getTempo())); m_pos.setCurrentFrame( 0 ); updatePosition(); break; case MoveLoopBegin: case MoveLoopEnd: { const int i = m_action - MoveLoopBegin; if( event->modifiers() & Qt::ControlModifier ) { // no ctrl-press-hint when having ctrl pressed delete m_hint; m_hint = NULL; m_loopPos[i] = t; } else { m_loopPos[i] = t.toNearestTact(); } // Catch begin == end if( m_loopPos[0] == m_loopPos[1] ) { // Note, swap 1 and 0 below and the behavior "skips" the other // marking instead of pushing it. if( m_action == MoveLoopBegin ) m_loopPos[0] -= MidiTime::ticksPerTact(); else m_loopPos[1] += MidiTime::ticksPerTact(); } update(); break; } default: break; } } void timeLine::mouseReleaseEvent( QMouseEvent* event ) { delete m_hint; m_hint = NULL; m_action = NoAction; } #include "moc_timeline.cxx" lmms-1.1.3/src/core/track.cpp000066400000000000000000001703061247673406200160350ustar00rootroot00000000000000/* * track.cpp - implementation of classes concerning tracks -> necessary for * all track-like objects (beat/bassline, sample-track...) * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /** \file track.cpp * \brief All classes concerning tracks and track-like objects */ /* * \mainpage Track classes * * \section introduction Introduction * * \todo fill this out */ #include "track.h" #include #include #include #include #include #include #include #include "AutomationPattern.h" #include "AutomationTrack.h" #include "bb_editor.h" #include "bb_track.h" #include "bb_track_container.h" #include "config_mgr.h" #include "Clipboard.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "MainWindow.h" #include "DataFile.h" #include "pixmap_button.h" #include "ProjectJournal.h" #include "SampleTrack.h" #include "song.h" #include "string_pair_drag.h" #include "templates.h" #include "text_float.h" #include "tooltip.h" #include "TrackContainer.h" /*! The width of the resize grip in pixels */ const int RESIZE_GRIP_WIDTH = 4; /*! The size of the track buttons in pixels */ const int TRACK_OP_BTN_WIDTH = 20; const int TRACK_OP_BTN_HEIGHT = 14; /*! A pointer for that text bubble used when moving segments, etc. * * In a number of situations, LMMS displays a floating text bubble * beside the cursor as you move or resize elements of a track about. * This pointer keeps track of it, as you only ever need one at a time. */ textFloat * trackContentObjectView::s_textFloat = NULL; // =========================================================================== // trackContentObject // =========================================================================== /*! \brief Create a new trackContentObject * * Creates a new track content object for the given track. * * \param _track The track that will contain the new object */ trackContentObject::trackContentObject( track * _track ) : Model( _track ), m_track( _track ), m_name( QString::null ), m_startPosition(), m_length(), m_mutedModel( false, this, tr( "Muted" ) ) { if( getTrack() ) { getTrack()->addTCO( this ); } setJournalling( false ); movePosition( 0 ); changeLength( 0 ); setJournalling( true ); } /*! \brief Destroy a trackContentObject * * Destroys the given track content object. * */ trackContentObject::~trackContentObject() { emit destroyedTCO(); if( getTrack() ) { getTrack()->removeTCO( this ); } } /*! \brief Move this trackContentObject's position in time * * If the track content object has moved, update its position. We * also add a journal entry for undo and update the display. * * \param _pos The new position of the track content object. */ void trackContentObject::movePosition( const MidiTime & _pos ) { if( m_startPosition != _pos ) { m_startPosition = _pos; engine::getSong()->updateLength(); } emit positionChanged(); } /*! \brief Change the length of this trackContentObject * * If the track content object's length has chaanged, update it. We * also add a journal entry for undo and update the display. * * \param _length The new length of the track content object. */ void trackContentObject::changeLength( const MidiTime & _length ) { if( m_length != _length ) { m_length = _length; engine::getSong()->updateLength(); } emit lengthChanged(); } /*! \brief Copy this trackContentObject to the clipboard. * * Copies this track content object to the clipboard. */ void trackContentObject::copy() { Clipboard::copy( this ); } /*! \brief Pastes this trackContentObject into a track. * * Pastes this track content object into a track. * * \param _je The journal entry to undo */ void trackContentObject::paste() { if( Clipboard::getContent( nodeName() ) != NULL ) { const MidiTime pos = startPosition(); restoreState( *( Clipboard::getContent( nodeName() ) ) ); movePosition( pos ); } } /*! \brief Mutes this trackContentObject * * Restore the previous state of this track content object. This will * restore the position or the length of the track content object * depending on what was changed. * * \param _je The journal entry to undo */ void trackContentObject::toggleMute() { m_mutedModel.setValue( !m_mutedModel.value() ); emit dataChanged(); } // =========================================================================== // trackContentObjectView // =========================================================================== /*! \brief Create a new trackContentObjectView * * Creates a new track content object view for the given * track content object in the given track view. * * \param _tco The track content object to be displayed * \param _tv The track view that will contain the new object */ trackContentObjectView::trackContentObjectView( trackContentObject * _tco, trackView * _tv ) : selectableObject( _tv->getTrackContentWidget() ), ModelView( NULL, this ), m_tco( _tco ), m_trackView( _tv ), m_action( NoAction ), m_autoResize( false ), m_initialMouseX( 0 ), m_hint( NULL ), m_fgColor( 0, 0, 0 ), m_textColor( 0, 0, 0 ) { if( s_textFloat == NULL ) { s_textFloat = new textFloat; s_textFloat->setPixmap( embed::getIconPixmap( "clock" ) ); } setAttribute( Qt::WA_OpaquePaintEvent, true ); setAttribute( Qt::WA_DeleteOnClose, true ); setFocusPolicy( Qt::StrongFocus ); setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); move( 0, 1 ); show(); setFixedHeight( _tv->getTrackContentWidget()->height() - 2 ); setAcceptDrops( true ); setMouseTracking( true ); connect( m_tco, SIGNAL( lengthChanged() ), this, SLOT( updateLength() ) ); connect( m_tco, SIGNAL( positionChanged() ), this, SLOT( updatePosition() ) ); connect( m_tco, SIGNAL( destroyedTCO() ), this, SLOT( close() ) ); setModel( m_tco ); m_trackView->getTrackContentWidget()->addTCOView( this ); } /*! \brief Destroy a trackContentObjectView * * Destroys the given track content object view. * */ trackContentObjectView::~trackContentObjectView() { delete m_hint; // we have to give our track-container the focus because otherwise the // op-buttons of our track-widgets could become focus and when the user // presses space for playing song, just one of these buttons is pressed // which results in unwanted effects m_trackView->trackContainerView()->setFocus(); } /*! \brief Does this trackContentObjectView have a fixed TCO? * * Returns whether the containing trackView has fixed * TCOs. * * \todo What the hell is a TCO here - track content object? And in * what circumstance are they fixed? */ bool trackContentObjectView::fixedTCOs() { return m_trackView->trackContainerView()->fixedTCOs(); } // qproperty access functions, to be inherited & used by TCOviews //! \brief CSS theming qproperty access method QColor trackContentObjectView::fgColor() const { return m_fgColor; } //! \brief CSS theming qproperty access method QColor trackContentObjectView::textColor() const { return m_textColor; } //! \brief CSS theming qproperty access method void trackContentObjectView::setFgColor( const QColor & _c ) { m_fgColor = QColor( _c ); } //! \brief CSS theming qproperty access method void trackContentObjectView::setTextColor( const QColor & _c ) { m_textColor = QColor( _c ); } /*! \brief Close a trackContentObjectView * * Closes a track content object view by asking the track * view to remove us and then asking the QWidget to close us. * * \return Boolean state of whether the QWidget was able to close. */ bool trackContentObjectView::close() { m_trackView->getTrackContentWidget()->removeTCOView( this ); return QWidget::close(); } /*! \brief Removes a trackContentObjectView from its track view. * * Like the close() method, this asks the track view to remove this * track content object view. However, the track content object is * scheduled for later deletion rather than closed immediately. * */ void trackContentObjectView::remove() { m_trackView->getTrack()->addJournalCheckPoint(); // delete ourself close(); m_tco->deleteLater(); } /*! \brief Cut this trackContentObjectView from its track to the clipboard. * * Perform the 'cut' action of the clipboard - copies the track content * object to the clipboard and then removes it from the track. */ void trackContentObjectView::cut() { m_tco->copy(); remove(); } /*! \brief Updates a trackContentObjectView's length * * If this track content object view has a fixed TCO, then we must * keep the width of our parent. Otherwise, calculate our width from * the track content object's length in pixels adding in the border. * */ void trackContentObjectView::updateLength() { if( fixedTCOs() ) { setFixedWidth( parentWidget()->width() ); } else { setFixedWidth( static_cast( m_tco->length() * pixelsPerTact() / MidiTime::ticksPerTact() ) + 1 /*+ TCO_BORDER_WIDTH * 2-1*/ ); } m_trackView->trackContainerView()->update(); } /*! \brief Updates a trackContentObjectView's position. * * Ask our track view to change our position. Then make sure that the * track view is updated in case this position has changed the track * view's length. * */ void trackContentObjectView::updatePosition() { m_trackView->getTrackContentWidget()->changePosition(); // moving a TCO can result in change of song-length etc., // therefore we update the track-container m_trackView->trackContainerView()->update(); } /*! \brief Change the trackContentObjectView's display when something * being dragged enters it. * * We need to notify Qt to change our display if something being * dragged has entered our 'airspace'. * * \param _dee The QDragEnterEvent to watch. */ void trackContentObjectView::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, "tco_" + QString::number( m_tco->getTrack()->type() ) ); } /*! \brief Handle something being dropped on this trackContentObjectView. * * When something has been dropped on this trackContentObjectView, and * it's a track content object, then use an instance of our dataFile reader * to take the xml of the track content object and turn it into something * we can write over our current state. * * \param _de The QDropEvent to handle. */ void trackContentObjectView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == ( "tco_" + QString::number( m_tco->getTrack()->type() ) ) ) { // value contains our XML-data so simply create a // DataFile which does the rest for us... DataFile dataFile( value.toUtf8() ); // at least save position before getting to moved to somewhere // the user doesn't expect... MidiTime pos = m_tco->startPosition(); m_tco->restoreState( dataFile.content().firstChild().toElement() ); m_tco->movePosition( pos ); AutomationPattern::resolveAllIDs(); _de->accept(); } } /*! \brief Handle a dragged selection leaving our 'airspace'. * * \param _e The QEvent to watch. */ void trackContentObjectView::leaveEvent( QEvent * _e ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } if( _e != NULL ) { QWidget::leaveEvent( _e ); } } /*! \brief Handle a mouse press on this trackContentObjectView. * * Handles the various ways in which a trackContentObjectView can be * used with a click of a mouse button. * * * If our container supports rubber band selection then handle * selection events. * * or if shift-left button, add this object to the selection * * or if ctrl-left button, start a drag-copy event * * or if just plain left button, resize if we're resizeable * * or if ctrl-middle button, mute the track content object * * or if middle button, maybe delete the track content object. * * \param _me The QMouseEvent to handle. */ void trackContentObjectView::mousePressEvent( QMouseEvent * _me ) { if( m_trackView->trackContainerView()->allowRubberband() == true && _me->button() == Qt::LeftButton ) { // if rubberband is active, we can be selected if( !m_trackView->trackContainerView()->rubberBandActive() ) { if( _me->modifiers() & Qt::ControlModifier ) { setSelected( !isSelected() ); } else if( isSelected() == true ) { m_action = MoveSelection; m_initialMouseX = _me->x(); } } else { selectableObject::mousePressEvent( _me ); } return; } else if( _me->button() == Qt::LeftButton && _me->modifiers() & Qt::ControlModifier ) { // start drag-action DataFile dataFile( DataFile::DragNDropData ); m_tco->saveState( dataFile, dataFile.content() ); QPixmap thumbnail = QPixmap::grabWidget( this ).scaled( 128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation ); new stringPairDrag( QString( "tco_%1" ).arg( m_tco->getTrack()->type() ), dataFile.toString(), thumbnail, this ); } else if( _me->button() == Qt::LeftButton && /* engine::mainWindow()->isShiftPressed() == false &&*/ fixedTCOs() == false ) { m_tco->addJournalCheckPoint(); // move or resize m_tco->setJournalling( false ); m_initialMouseX = _me->x(); if( _me->x() < width() - RESIZE_GRIP_WIDTH ) { m_action = Move; m_oldTime = m_tco->startPosition(); QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); s_textFloat->setTitle( tr( "Current position" ) ); delete m_hint; m_hint = textFloat::displayMessage( tr( "Hint" ), tr( "Press and drag to make " "a copy." ), embed::getIconPixmap( "hint" ), 0 ); } else if( m_autoResize == false ) { m_action = Resize; m_oldTime = m_tco->length(); QCursor c( Qt::SizeHorCursor ); QApplication::setOverrideCursor( c ); s_textFloat->setTitle( tr( "Current length" ) ); delete m_hint; m_hint = textFloat::displayMessage( tr( "Hint" ), tr( "Press for free " "resizing." ), embed::getIconPixmap( "hint" ), 0 ); } // s_textFloat->reparent( this ); // setup text-float as if TCO was already moved/resized mouseMoveEvent( _me ); s_textFloat->show(); } else if( _me->button() == Qt::RightButton ) { if( _me->modifiers() & Qt::ControlModifier ) { m_tco->toggleMute(); } else if( _me->modifiers() & Qt::ShiftModifier && fixedTCOs() == false ) { remove(); } } else if( _me->button() == Qt::MidButton ) { if( _me->modifiers() & Qt::ControlModifier ) { m_tco->toggleMute(); } else if( fixedTCOs() == false ) { remove(); } } } /*! \brief Handle a mouse movement (drag) on this trackContentObjectView. * * Handles the various ways in which a trackContentObjectView can be * used with a mouse drag. * * * If in move mode, move ourselves in the track, * * or if in move-selection mode, move the entire selection, * * or if in resize mode, resize ourselves, * * otherwise ??? * * \param _me The QMouseEvent to handle. * \todo what does the final else case do here? */ void trackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) { if( _me->modifiers() & Qt::ControlModifier ) { delete m_hint; m_hint = NULL; } const float ppt = m_trackView->trackContainerView()->pixelsPerTact(); if( m_action == Move ) { const int x = mapToParent( _me->pos() ).x() - m_initialMouseX; MidiTime t = qMax( 0, (int) m_trackView->trackContainerView()->currentPosition()+ static_cast( x * MidiTime::ticksPerTact() / ppt ) ); if( ! ( _me->modifiers() & Qt::ControlModifier ) && _me->button() == Qt::NoButton ) { t = t.toNearestTact(); } m_tco->movePosition( t ); m_trackView->getTrackContentWidget()->changePosition(); s_textFloat->setText( QString( "%1:%2" ). arg( m_tco->startPosition().getTact() + 1 ). arg( m_tco->startPosition().getTicks() % MidiTime::ticksPerTact() ) ); s_textFloat->moveGlobal( this, QPoint( width() + 2, height() + 2 ) ); } else if( m_action == MoveSelection ) { const int dx = _me->x() - m_initialMouseX; QVector so = m_trackView->trackContainerView()->selectedObjects(); QVector tcos; MidiTime smallest_pos, t; // find out smallest position of all selected objects for not // moving an object before zero for( QVector::iterator it = so.begin(); it != so.end(); ++it ) { trackContentObjectView * tcov = dynamic_cast( *it ); if( tcov == NULL ) { continue; } trackContentObject * tco = tcov->m_tco; tcos.push_back( tco ); smallest_pos = qMin( smallest_pos, (int)tco->startPosition() + static_cast( dx * MidiTime::ticksPerTact() / ppt ) ); } for( QVector::iterator it = tcos.begin(); it != tcos.end(); ++it ) { t = ( *it )->startPosition() + static_cast( dx *MidiTime::ticksPerTact() / ppt )-smallest_pos; if( ! ( _me->modifiers() & Qt::AltModifier ) && _me->button() == Qt::NoButton ) { t = t.toNearestTact(); } ( *it )->movePosition( t ); } } else if( m_action == Resize ) { MidiTime t = qMax( MidiTime::ticksPerTact() / 16, static_cast( _me->x() * MidiTime::ticksPerTact() / ppt ) ); if( ! ( _me->modifiers() & Qt::ControlModifier ) && _me->button() == Qt::NoButton ) { t = qMax( MidiTime::ticksPerTact(), t.toNearestTact() ); } m_tco->changeLength( t ); s_textFloat->setText( tr( "%1:%2 (%3:%4 to %5:%6)" ). arg( m_tco->length().getTact() ). arg( m_tco->length().getTicks() % MidiTime::ticksPerTact() ). arg( m_tco->startPosition().getTact() + 1 ). arg( m_tco->startPosition().getTicks() % MidiTime::ticksPerTact() ). arg( m_tco->endPosition().getTact() + 1 ). arg( m_tco->endPosition().getTicks() % MidiTime::ticksPerTact() ) ); s_textFloat->moveGlobal( this, QPoint( width() + 2, height() + 2) ); } else { if( _me->x() > width() - RESIZE_GRIP_WIDTH ) { if( QApplication::overrideCursor() != NULL && QApplication::overrideCursor()->shape() != Qt::SizeHorCursor ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } } QCursor c( Qt::SizeHorCursor ); QApplication::setOverrideCursor( c ); } else { leaveEvent( NULL ); } } } /*! \brief Handle a mouse release on this trackContentObjectView. * * If we're in move or resize mode, journal the change as appropriate. * Then tidy up. * * \param _me The QMouseEvent to handle. */ void trackContentObjectView::mouseReleaseEvent( QMouseEvent * _me ) { if( m_action == Move || m_action == Resize ) { m_tco->setJournalling( true ); } m_action = NoAction; delete m_hint; m_hint = NULL; s_textFloat->hide(); leaveEvent( NULL ); selectableObject::mouseReleaseEvent( _me ); } /*! \brief Set up the context menu for this trackContentObjectView. * * Set up the various context menu events that can apply to a * track content object view. * * \param _cme The QContextMenuEvent to add the actions to. */ void trackContentObjectView::contextMenuEvent( QContextMenuEvent * _cme ) { if( _cme->modifiers() ) { return; } QMenu contextMenu( this ); if( fixedTCOs() == false ) { contextMenu.addAction( embed::getIconPixmap( "cancel" ), tr( "Delete (middle mousebutton)" ), this, SLOT( remove() ) ); contextMenu.addSeparator(); contextMenu.addAction( embed::getIconPixmap( "edit_cut" ), tr( "Cut" ), this, SLOT( cut() ) ); } contextMenu.addAction( embed::getIconPixmap( "edit_copy" ), tr( "Copy" ), m_tco, SLOT( copy() ) ); contextMenu.addAction( embed::getIconPixmap( "edit_paste" ), tr( "Paste" ), m_tco, SLOT( paste() ) ); contextMenu.addSeparator(); contextMenu.addAction( embed::getIconPixmap( "muted" ), tr( "Mute/unmute ( + middle click)" ), m_tco, SLOT( toggleMute() ) ); constructContextMenu( &contextMenu ); contextMenu.exec( QCursor::pos() ); } /*! \brief How many pixels a tact (bar) takes for this trackContentObjectView. * * \return the number of pixels per tact (bar). */ float trackContentObjectView::pixelsPerTact() { return m_trackView->trackContainerView()->pixelsPerTact(); } /*! \brief Set whether this trackContentObjectView can resize. * * \param _e The boolean state of whether this track content object view * is allowed to resize. */ void trackContentObjectView::setAutoResizeEnabled( bool _e ) { m_autoResize = _e; } // =========================================================================== // trackContentWidget // =========================================================================== /*! \brief Create a new trackContentWidget * * Creates a new track content widget for the given track. * The content widget comprises the 'grip bar' and the 'tools' button * for the track's context menu. * * \param _track The parent track. */ trackContentWidget::trackContentWidget( trackView * _parent ) : QWidget( _parent ), m_trackView( _parent ) { setAcceptDrops( true ); connect( _parent->trackContainerView(), SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( changePosition( const MidiTime & ) ) ); setStyle( QApplication::style() ); updateBackground(); } /*! \brief Destroy this trackContentWidget * * Destroys the trackContentWidget. */ trackContentWidget::~trackContentWidget() { } void trackContentWidget::updateBackground() { const int tactsPerBar = 4; const TrackContainerView * tcv = m_trackView->trackContainerView(); // Assume even-pixels-per-tact. Makes sense, should be like this anyways int ppt = static_cast( tcv->pixelsPerTact() ); int w = ppt * tactsPerBar; int h = height(); m_background = QPixmap( w * 2, height() ); QPainter pmp( &m_background ); pmp.fillRect( 0, 0, w, h, darkerColor() ); pmp.fillRect( w, 0, w , h, lighterColor() ); // draw lines pmp.setPen( QPen( QColor( 0, 0, 0, 160 ), 1 ) ); // horizontal line pmp.drawLine( 0, h-1, w*2, h-1 ); // vertical lines for( float x = 0; x < w * 2; x += ppt ) { pmp.drawLine( QLineF( x, 0.0, x, h ) ); } pmp.setPen( QPen( QColor( 140, 140, 140, 64 ), 1 ) ); for( float x = 1.0; x < w * 2; x += ppt ) { pmp.drawLine( QLineF( x, 0.0, x, h ) ); } pmp.end(); // Force redraw update(); } /*! \brief Adds a trackContentObjectView to this widget. * * Adds a(nother) trackContentObjectView to our list of views. We also * check that our position is up-to-date. * * \param _tcov The trackContentObjectView to add. */ void trackContentWidget::addTCOView( trackContentObjectView * _tcov ) { trackContentObject * tco = _tcov->getTrackContentObject(); m_tcoViews.push_back( _tcov ); tco->saveJournallingState( false ); changePosition(); tco->restoreJournallingState(); } /*! \brief Removes the given trackContentObjectView to this widget. * * Removes the given trackContentObjectView from our list of views. * * \param _tcov The trackContentObjectView to add. */ void trackContentWidget::removeTCOView( trackContentObjectView * _tcov ) { tcoViewVector::iterator it = qFind( m_tcoViews.begin(), m_tcoViews.end(), _tcov ); if( it != m_tcoViews.end() ) { m_tcoViews.erase( it ); engine::getSong()->setModified(); } } /*! \brief Update ourselves by updating all the tCOViews attached. * */ void trackContentWidget::update() { for( tcoViewVector::iterator it = m_tcoViews.begin(); it != m_tcoViews.end(); ++it ) { ( *it )->setFixedHeight( height() - 2 ); ( *it )->update(); } QWidget::update(); } // resposible for moving track-content-widgets to appropriate position after // change of visible viewport /*! \brief Move the trackContentWidget to a new place in time * * \param _new_pos The MIDI time to move to. */ void trackContentWidget::changePosition( const MidiTime & _new_pos ) { if( m_trackView->trackContainerView() == engine::getBBEditor() ) { const int cur_bb = engine::getBBTrackContainer()->currentBB(); setUpdatesEnabled( false ); // first show TCO for current BB... for( tcoViewVector::iterator it = m_tcoViews.begin(); it != m_tcoViews.end(); ++it ) { if( ( *it )->getTrackContentObject()-> startPosition().getTact() == cur_bb ) { ( *it )->move( 0, ( *it )->y() ); ( *it )->raise(); ( *it )->show(); } else { ( *it )->lower(); } } // ...then hide others to avoid flickering for( tcoViewVector::iterator it = m_tcoViews.begin(); it != m_tcoViews.end(); ++it ) { if( ( *it )->getTrackContentObject()-> startPosition().getTact() != cur_bb ) { ( *it )->hide(); } } setUpdatesEnabled( true ); return; } MidiTime pos = _new_pos; if( pos < 0 ) { pos = m_trackView->trackContainerView()->currentPosition(); } const int begin = pos; const int end = endPosition( pos ); const float ppt = m_trackView->trackContainerView()->pixelsPerTact(); setUpdatesEnabled( false ); for( tcoViewVector::iterator it = m_tcoViews.begin(); it != m_tcoViews.end(); ++it ) { trackContentObjectView * tcov = *it; trackContentObject * tco = tcov->getTrackContentObject(); tco->changeLength( tco->length() ); const int ts = tco->startPosition(); const int te = tco->endPosition()-3; if( ( ts >= begin && ts <= end ) || ( te >= begin && te <= end ) || ( ts <= begin && te >= end ) ) { tcov->move( static_cast( ( ts - begin ) * ppt / MidiTime::ticksPerTact() ), tcov->y() ); if( !tcov->isVisible() ) { tcov->show(); } } else { tcov->move( -tcov->width()-10, tcov->y() ); } } setUpdatesEnabled( true ); // redraw background // update(); } /*! \brief Respond to a drag enter event on the trackContentWidget * * \param _dee the Drag Enter Event to respond to */ void trackContentWidget::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, "tco_" + QString::number( getTrack()->type() ) ); } /*! \brief Respond to a drop event on the trackContentWidget * * \param _de the Drop Event to respond to */ void trackContentWidget::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == ( "tco_" + QString::number( getTrack()->type() ) ) && m_trackView->trackContainerView()->fixedTCOs() == false ) { const MidiTime pos = getPosition( _de->pos().x() ).getTact() * MidiTime::ticksPerTact(); getTrack()->addJournalCheckPoint(); trackContentObject * tco = getTrack()->createTCO( pos ); // value contains our XML-data so simply create a // DataFile which does the rest for us... DataFile dataFile( value.toUtf8() ); // at least save position before getting moved to somewhere // the user doesn't expect... tco->restoreState( dataFile.content().firstChild().toElement() ); tco->movePosition( pos ); AutomationPattern::resolveAllIDs(); _de->accept(); } } /*! \brief Respond to a mouse press on the trackContentWidget * * \param _me the mouse press event to respond to */ void trackContentWidget::mousePressEvent( QMouseEvent * _me ) { if( m_trackView->trackContainerView()->allowRubberband() == true ) { QWidget::mousePressEvent( _me ); } else if( _me->modifiers() & Qt::ShiftModifier ) { QWidget::mousePressEvent( _me ); } else if( _me->button() == Qt::LeftButton && !m_trackView->trackContainerView()->fixedTCOs() ) { const MidiTime pos = getPosition( _me->x() ).getTact() * MidiTime::ticksPerTact(); trackContentObject * tco = getTrack()->createTCO( pos ); tco->saveJournallingState( false ); tco->movePosition( pos ); tco->restoreJournallingState(); } } /*! \brief Repaint the trackContentWidget on command * * \param _pe the Paint Event to respond to */ void trackContentWidget::paintEvent( QPaintEvent * _pe ) { // Assume even-pixels-per-tact. Makes sense, should be like this anyways const TrackContainerView * tcv = m_trackView->trackContainerView(); int ppt = static_cast( tcv->pixelsPerTact() ); QPainter p( this ); // Don't draw background on BB-Editor if( m_trackView->trackContainerView() != engine::getBBEditor() ) { p.drawTiledPixmap( rect(), m_background, QPoint( tcv->currentPosition().getTact() * ppt, 0 ) ); } } /*! \brief Updates the background tile pixmap on size changes. * * \param resizeEvent the resize event to pass to base class */ void trackContentWidget::resizeEvent( QResizeEvent * resizeEvent ) { // Update backgroud updateBackground(); // Force redraw QWidget::resizeEvent( resizeEvent ); } /*! \brief Return the track shown by the trackContentWidget * */ track * trackContentWidget::getTrack() { return m_trackView->getTrack(); } /*! \brief Return the position of the trackContentWidget in Tacts. * * \param _mouse_x the mouse's current X position in pixels. */ MidiTime trackContentWidget::getPosition( int _mouse_x ) { return MidiTime( m_trackView->trackContainerView()-> currentPosition() + _mouse_x * MidiTime::ticksPerTact() / static_cast( m_trackView-> trackContainerView()->pixelsPerTact() ) ); } /*! \brief Return the end position of the trackContentWidget in Tacts. * * \param _pos_start the starting position of the Widget (from getPosition()) */ MidiTime trackContentWidget::endPosition( const MidiTime & _pos_start ) { const float ppt = m_trackView->trackContainerView()->pixelsPerTact(); const int w = width(); return _pos_start + static_cast( w * MidiTime::ticksPerTact() / ppt ); } // qproperty access methods //! \brief CSS theming qproperty access method QBrush trackContentWidget::darkerColor() const { return m_darkerColor; } //! \brief CSS theming qproperty access method QBrush trackContentWidget::lighterColor() const { return m_lighterColor; } //! \brief CSS theming qproperty access method void trackContentWidget::setDarkerColor( const QBrush & c ) { m_darkerColor = c; } //! \brief CSS theming qproperty access method void trackContentWidget::setLighterColor( const QBrush & c ) { m_lighterColor = c; } // =========================================================================== // trackOperationsWidget // =========================================================================== QPixmap * trackOperationsWidget::s_grip = NULL; /*!< grip pixmap */ /*! \brief Create a new trackOperationsWidget * * The trackOperationsWidget is the grip and the mute button of a track. * * \param _parent the trackView to contain this widget */ trackOperationsWidget::trackOperationsWidget( trackView * _parent ) : QWidget( _parent ), /*!< The parent widget */ m_trackView( _parent ) /*!< The parent track view */ { if( s_grip == NULL ) { s_grip = new QPixmap( embed::getIconPixmap( "track_op_grip" ) ); } toolTip::add( this, tr( "Press while clicking on move-grip " "to begin a new drag'n'drop-action." ) ); QMenu * to_menu = new QMenu( this ); to_menu->setFont( pointSize<9>( to_menu->font() ) ); connect( to_menu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); setObjectName( "automationEnabled" ); m_trackOps = new QPushButton( this ); m_trackOps->move( 12, 1 ); m_trackOps->setFocusPolicy( Qt::NoFocus ); m_trackOps->setMenu( to_menu ); toolTip::add( m_trackOps, tr( "Actions for this track" ) ); m_muteBtn = new pixmapButton( this, tr( "Mute" ) ); m_muteBtn->setActiveGraphic( embed::getIconPixmap( "led_off" ) ); m_muteBtn->setInactiveGraphic( embed::getIconPixmap( "led_green" ) ); m_muteBtn->setCheckable( true ); m_soloBtn = new pixmapButton( this, tr( "Solo" ) ); m_soloBtn->setActiveGraphic( embed::getIconPixmap( "led_red" ) ); m_soloBtn->setInactiveGraphic( embed::getIconPixmap( "led_off" ) ); m_soloBtn->setCheckable( true ); if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { m_muteBtn->move( 46, 0 ); m_soloBtn->move( 46, 16 ); } else { m_muteBtn->move( 46, 8 ); m_soloBtn->move( 62, 8 ); } m_muteBtn->show(); toolTip::add( m_muteBtn, tr( "Mute this track" ) ); m_soloBtn->show(); toolTip::add( m_soloBtn, tr( "Solo" ) ); connect( this, SIGNAL( trackRemovalScheduled( trackView * ) ), m_trackView->trackContainerView(), SLOT( deleteTrackView( trackView * ) ), Qt::QueuedConnection ); } /*! \brief Destroy an existing trackOperationsWidget * */ trackOperationsWidget::~trackOperationsWidget() { } /*! \brief Respond to trackOperationsWidget mouse events * * If it's the left mouse button, and Ctrl is held down, and we're * not a Beat+Bassline Editor track, then start a new drag event to * copy this track. * * Otherwise, ignore all other events. * * \param _me The mouse event to respond to. */ void trackOperationsWidget::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && _me->modifiers() & Qt::ControlModifier && m_trackView->getTrack()->type() != track::BBTrack ) { DataFile dataFile( DataFile::DragNDropData ); m_trackView->getTrack()->saveState( dataFile, dataFile.content() ); new stringPairDrag( QString( "track_%1" ).arg( m_trackView->getTrack()->type() ), dataFile.toString(), QPixmap::grabWidget( m_trackView->getTrackSettingsWidget() ), this ); } else if( _me->button() == Qt::LeftButton ) { // track-widget (parent-widget) initiates track-move _me->ignore(); } } /*! \brief Repaint the trackOperationsWidget * * If we're not moving, and in the Beat+Bassline Editor, then turn * automation on or off depending on its previous state and show * ourselves. * * Otherwise, hide ourselves. * * \todo Flesh this out a bit - is it correct? * \param _pe The paint event to respond to */ void trackOperationsWidget::paintEvent( QPaintEvent * _pe ) { QPainter p( this ); p.fillRect( rect(), palette().brush(QPalette::Background) ); if( m_trackView->isMovingTrack() == false ) { p.drawPixmap( 2, 2, *s_grip ); m_trackOps->show(); m_muteBtn->show(); } else { m_trackOps->hide(); m_muteBtn->hide(); } } /*! \brief Clone this track * */ void trackOperationsWidget::cloneTrack() { engine::mixer()->lock(); m_trackView->getTrack()->clone(); engine::mixer()->unlock(); } /*! \brief Clear this track - clears all TCOs from the track */ void trackOperationsWidget::clearTrack() { engine::mixer()->lock(); m_trackView->getTrack()->deleteTCOs(); engine::mixer()->unlock(); } /*! \brief Remove this track from the track list * */ void trackOperationsWidget::removeTrack() { emit trackRemovalScheduled( m_trackView ); } /*! \brief Update the trackOperationsWidget context menu * * For all track types, we have the Clone and Remove options. * For instrument-tracks we also offer the MIDI-control-menu * For automation tracks, extra options: turn on/off recording * on all TCOs (same should be added for sample tracks when * sampletrack recording is implemented) */ void trackOperationsWidget::updateMenu() { QMenu * to_menu = m_trackOps->menu(); to_menu->clear(); to_menu->addAction( embed::getIconPixmap( "edit_copy", 16, 16 ), tr( "Clone this track" ), this, SLOT( cloneTrack() ) ); to_menu->addAction( embed::getIconPixmap( "cancel", 16, 16 ), tr( "Remove this track" ), this, SLOT( removeTrack() ) ); if( ! m_trackView->trackContainerView()->fixedTCOs() ) { to_menu->addAction( tr( "Clear this track" ), this, SLOT( clearTrack() ) ); } if( dynamic_cast( m_trackView ) ) { to_menu->addSeparator(); to_menu->addMenu( dynamic_cast( m_trackView )->midiMenu() ); } if( dynamic_cast( m_trackView ) ) { to_menu->addAction( tr( "Turn all recording on" ), this, SLOT( recordingOn() ) ); to_menu->addAction( tr( "Turn all recording off" ), this, SLOT( recordingOff() ) ); } } void trackOperationsWidget::recordingOn() { AutomationTrackView * atv = dynamic_cast( m_trackView ); if( atv ) { const track::tcoVector & tcov = atv->getTrack()->getTCOs(); for( track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); it++ ) { AutomationPattern * ap = dynamic_cast( *it ); if( ap ) { ap->setRecording( true ); } } atv->update(); } } void trackOperationsWidget::recordingOff() { AutomationTrackView * atv = dynamic_cast( m_trackView ); if( atv ) { const track::tcoVector & tcov = atv->getTrack()->getTCOs(); for( track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); it++ ) { AutomationPattern * ap = dynamic_cast( *it ); if( ap ) { ap->setRecording( false ); } } atv->update(); } } // =========================================================================== // track // =========================================================================== /*! \brief Create a new (empty) track object * * The track object is the whole track, linking its contents, its * automation, name, type, and so forth. * * \param _type The type of track (Song Editor or Beat+Bassline Editor) * \param _tc The track Container object to encapsulate in this track. * * \todo check the definitions of all the properties - are they OK? */ track::track( TrackTypes _type, TrackContainer * _tc ) : Model( _tc ), /*!< The track Model */ m_trackContainer( _tc ), /*!< The track container object */ m_type( _type ), /*!< The track type */ m_name(), /*!< The track's name */ m_mutedModel( false, this, tr( "Muted" ) ), /*!< For controlling track muting */ m_soloModel( false, this, tr( "Solo" ) ), /*!< For controlling track soloing */ m_simpleSerializingMode( false ), m_trackContentObjects() /*!< The track content objects (segments) */ { m_trackContainer->addTrack( this ); m_height = -1; } /*! \brief Destroy this track * * If the track container is a Beat+Bassline container, step through * its list of tracks and remove us. * * Then delete the trackContentObject's contents, remove this track from * the track container. * * Finally step through this track's automation and forget all of them. */ track::~track() { emit destroyedTrack(); while( !m_trackContentObjects.isEmpty() ) { delete m_trackContentObjects.last(); } m_trackContainer->removeTrack( this ); } /*! \brief Create a track based on the given track type and container. * * \param _tt The type of track to create * \param _tc The track container to attach to */ track * track::create( TrackTypes _tt, TrackContainer * _tc ) { track * t = NULL; switch( _tt ) { case InstrumentTrack: t = new ::InstrumentTrack( _tc ); break; case BBTrack: t = new bbTrack( _tc ); break; case SampleTrack: t = new ::SampleTrack( _tc ); break; // case EVENT_TRACK: // case VIDEO_TRACK: case AutomationTrack: t = new ::AutomationTrack( _tc ); break; case HiddenAutomationTrack: t = new ::AutomationTrack( _tc, true ); break; default: break; } _tc->updateAfterTrackAdd(); return t; } /*! \brief Create a track inside TrackContainer from track type in a QDomElement and restore state from XML * * \param _this The QDomElement containing the type of track to create * \param _tc The track container to attach to */ track * track::create( const QDomElement & _this, TrackContainer * _tc ) { track * t = create( static_cast( _this.attribute( "type" ).toInt() ), _tc ); if( t != NULL ) { t->restoreState( _this ); } return t; } /*! \brief Clone a track from this track * */ void track::clone() { QDomDocument doc; QDomElement parent = doc.createElement( "clone" ); saveState( doc, parent ); create( parent.firstChild().toElement(), m_trackContainer ); } /*! \brief Save this track's settings to file * * We save the track type and its muted state and solo state, then append the track- * specific settings. Then we iterate through the trackContentObjects * and save all their states in turn. * * \param _doc The QDomDocument to use to save * \param _this The The QDomElement to save into * \todo Does this accurately describe the parameters? I think not!? * \todo Save the track height */ void track::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( !m_simpleSerializingMode ) { _this.setTagName( "track" ); } _this.setAttribute( "type", type() ); _this.setAttribute( "name", name() ); _this.setAttribute( "muted", isMuted() ); _this.setAttribute( "solo", isSolo() ); if( m_height >= MINIMAL_TRACK_HEIGHT ) { _this.setAttribute( "height", m_height ); } QDomElement ts_de = _doc.createElement( nodeName() ); // let actual track (InstrumentTrack, bbTrack, sampleTrack etc.) save // its settings _this.appendChild( ts_de ); saveTrackSpecificSettings( _doc, ts_de ); if( m_simpleSerializingMode ) { m_simpleSerializingMode = false; return; } // now save settings of all TCO's for( tcoVector::const_iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { ( *it )->saveState( _doc, _this ); } } /*! \brief Load the settings from a file * * We load the track's type and muted state and solo state, then clear out our * current trackContentObject. * * Then we step through the QDomElement's children and load the * track-specific settings and trackContentObjects states from it * one at a time. * * \param _this the QDomElement to load track settings from * \todo Load the track height. */ void track::loadSettings( const QDomElement & _this ) { if( _this.attribute( "type" ).toInt() != type() ) { qWarning( "Current track-type does not match track-type of " "settings-node!\n" ); } setName( _this.hasAttribute( "name" ) ? _this.attribute( "name" ) : _this.firstChild().toElement().attribute( "name" ) ); setMuted( _this.attribute( "muted" ).toInt() ); setSolo( _this.attribute( "solo" ).toInt() ); if( m_simpleSerializingMode ) { QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( node.isElement() && node.nodeName() == nodeName() ) { loadTrackSpecificSettings( node.toElement() ); break; } node = node.nextSibling(); } m_simpleSerializingMode = false; return; } while( !m_trackContentObjects.empty() ) { delete m_trackContentObjects.front(); // m_trackContentObjects.erase( m_trackContentObjects.begin() ); } QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( node.nodeName() == nodeName() ) { loadTrackSpecificSettings( node.toElement() ); } else if( !node.toElement().attribute( "metadata" ).toInt() ) { trackContentObject * tco = createTCO( MidiTime( 0 ) ); tco->restoreState( node.toElement() ); saveJournallingState( false ); restoreJournallingState(); } } node = node.nextSibling(); } if( _this.attribute( "height" ).toInt() >= MINIMAL_TRACK_HEIGHT && _this.attribute( "height" ).toInt() <= DEFAULT_TRACK_HEIGHT ) // workaround for #3585927, tobydox/2012-11-11 { m_height = _this.attribute( "height" ).toInt(); } } /*! \brief Add another trackContentObject into this track * * \param _tco The trackContentObject to attach to this track. */ trackContentObject * track::addTCO( trackContentObject * _tco ) { m_trackContentObjects.push_back( _tco ); emit trackContentObjectAdded( _tco ); return _tco; // just for convenience } /*! \brief Remove a given trackContentObject from this track * * \param _tco The trackContentObject to remove from this track. */ void track::removeTCO( trackContentObject * _tco ) { tcoVector::iterator it = qFind( m_trackContentObjects.begin(), m_trackContentObjects.end(), _tco ); if( it != m_trackContentObjects.end() ) { m_trackContentObjects.erase( it ); if( engine::getSong() ) { engine::getSong()->updateLength(); engine::getSong()->setModified(); } } } /*! \brief Remove all TCOs from this track */ void track::deleteTCOs() { while( ! m_trackContentObjects.isEmpty() ) { delete m_trackContentObjects.first(); } } /*! \brief Return the number of trackContentObjects we contain * * \return the number of trackContentObjects we currently contain. */ int track::numOfTCOs() { return m_trackContentObjects.size(); } /*! \brief Get a trackContentObject by number * * If the TCO number is less than our TCO array size then fetch that * numbered object from the array. Otherwise we warn the user that * we've somehow requested a TCO that is too large, and create a new * TCO for them. * \param _tco_number The number of the trackContentObject to fetch. * \return the given trackContentObject or a new one if out of range. * \todo reject TCO numbers less than zero. * \todo if we create a TCO here, should we somehow attach it to the * track? */ trackContentObject * track::getTCO( int _tco_num ) { if( _tco_num < m_trackContentObjects.size() ) { return m_trackContentObjects[_tco_num]; } printf( "called track::getTCO( %d ), " "but TCO %d doesn't exist\n", _tco_num, _tco_num ); return createTCO( _tco_num * MidiTime::ticksPerTact() ); } /*! \brief Determine the given trackContentObject's number in our array. * * \param _tco The trackContentObject to search for. * \return its number in our array. */ int track::getTCONum( trackContentObject * _tco ) { // for( int i = 0; i < getTrackContentWidget()->numOfTCOs(); ++i ) tcoVector::iterator it = qFind( m_trackContentObjects.begin(), m_trackContentObjects.end(), _tco ); if( it != m_trackContentObjects.end() ) { /* if( getTCO( i ) == _tco ) { return i; }*/ return it - m_trackContentObjects.begin(); } qWarning( "track::getTCONum(...) -> _tco not found!\n" ); return 0; } /*! \brief Retrieve a list of trackContentObjects that fall within a period. * * Here we're interested in a range of trackContentObjects that fall * completely within a given time period - their start must be no earlier * than the given start time and their end must be no later than the given * end time. * * We return the TCOs we find in order by time, earliest TCOs first. * * \param _tco_c The list to contain the found trackContentObjects. * \param _start The MIDI start time of the range. * \param _end The MIDI endi time of the range. */ void track::getTCOsInRange( tcoVector & _tco_v, const MidiTime & _start, const MidiTime & _end ) { for( tcoVector::iterator it_o = m_trackContentObjects.begin(); it_o != m_trackContentObjects.end(); ++it_o ) { trackContentObject * tco = ( *it_o ); int s = tco->startPosition(); int e = tco->endPosition(); if( ( s <= _end ) && ( e >= _start ) ) { // ok, TCO is posated within given range // now let's search according position for TCO in list // -> list is ordered by TCO's position afterwards bool inserted = false; for( tcoVector::iterator it = _tco_v.begin(); it != _tco_v.end(); ++it ) { if( ( *it )->startPosition() >= s ) { _tco_v.insert( it, tco ); inserted = true; break; } } if( inserted == false ) { // no TCOs found posated behind current TCO... _tco_v.push_back( tco ); } } } } /*! \brief Swap the position of two trackContentObjects. * * First, we arrange to swap the positions of the two TCOs in the * trackContentObjects list. Then we swap their start times as well. * * \param _tco_num1 The first trackContentObject to swap. * \param _tco_num2 The second trackContentObject to swap. */ void track::swapPositionOfTCOs( int _tco_num1, int _tco_num2 ) { qSwap( m_trackContentObjects[_tco_num1], m_trackContentObjects[_tco_num2] ); const MidiTime pos = m_trackContentObjects[_tco_num1]->startPosition(); m_trackContentObjects[_tco_num1]->movePosition( m_trackContentObjects[_tco_num2]->startPosition() ); m_trackContentObjects[_tco_num2]->movePosition( pos ); } /*! \brief Move all the trackContentObjects after a certain time later by one bar. * * \param _pos The time at which we want to insert the bar. * \todo if we stepped through this list last to first, and the list was * in ascending order by TCO time, once we hit a TCO that was earlier * than the insert time, we could fall out of the loop early. */ void track::insertTact( const MidiTime & _pos ) { // we'll increase the position of every TCO, positioned behind _pos, by // one tact for( tcoVector::iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { if( ( *it )->startPosition() >= _pos ) { ( *it )->movePosition( (*it)->startPosition() + MidiTime::ticksPerTact() ); } } } /*! \brief Move all the trackContentObjects after a certain time earlier by one bar. * * \param _pos The time at which we want to remove the bar. */ void track::removeTact( const MidiTime & _pos ) { // we'll decrease the position of every TCO, positioned behind _pos, by // one tact for( tcoVector::iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { if( ( *it )->startPosition() >= _pos ) { ( *it )->movePosition( qMax( ( *it )->startPosition() - MidiTime::ticksPerTact(), 0 ) ); } } } /*! \brief Return the length of the entire track in bars * * We step through our list of TCOs and determine their end position, * keeping track of the latest time found in ticks. Then we return * that in bars by dividing by the number of ticks per bar. */ tact_t track::length() const { // find last end-position tick_t last = 0; for( tcoVector::const_iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { const tick_t cur = ( *it )->endPosition(); if( cur > last ) { last = cur; } } return last / MidiTime::ticksPerTact(); } /*! \brief Invert the track's solo state. * * We have to go through all the tracks determining if any other track * is already soloed. Then we have to save the mute state of all tracks, * and set our mute state to on and all the others to off. */ void track::toggleSolo() { const TrackContainer::TrackList & tl = m_trackContainer->tracks(); bool solo_before = false; for( TrackContainer::TrackList::const_iterator it = tl.begin(); it != tl.end(); ++it ) { if( *it != this ) { if( ( *it )->m_soloModel.value() ) { solo_before = true; break; } } } const bool solo = m_soloModel.value(); for( TrackContainer::TrackList::const_iterator it = tl.begin(); it != tl.end(); ++it ) { if( solo ) { // save mute-state in case no track was solo before if( !solo_before ) { ( *it )->m_mutedBeforeSolo = ( *it )->isMuted(); } ( *it )->setMuted( *it == this ? false : true ); if( *it != this ) { ( *it )->m_soloModel.setValue( false ); } } else if( !solo_before ) { ( *it )->setMuted( ( *it )->m_mutedBeforeSolo ); } } } // =========================================================================== // trackView // =========================================================================== /*! \brief Create a new track View. * * The track View is handles the actual display of the track, including * displaying its various widgets and the track segments. * * \param _track The track to display. * \param _tcv The track Container View for us to be displayed in. * \todo Is my description of these properties correct? */ trackView::trackView( track * _track, TrackContainerView * _tcv ) : QWidget( _tcv->contentWidget() ), /*!< The Track Container View's content widget. */ ModelView( NULL, this ), /*!< The model view of this track */ m_track( _track ), /*!< The track we're displaying */ m_trackContainerView( _tcv ), /*!< The track Container View we're displayed in */ m_trackOperationsWidget( this ), /*!< Our trackOperationsWidget */ m_trackSettingsWidget( this ), /*!< Our trackSettingsWidget */ m_trackContentWidget( this ), /*!< Our trackContentWidget */ m_action( NoAction ) /*!< The action we're currently performing */ { setAutoFillBackground( true ); QPalette pal; pal.setColor( backgroundRole(), QColor( 32, 36, 40 ) ); setPalette( pal ); m_trackSettingsWidget.setAutoFillBackground( true ); QHBoxLayout * layout = new QHBoxLayout( this ); layout->setMargin( 0 ); layout->setSpacing( 0 ); layout->addWidget( &m_trackOperationsWidget ); layout->addWidget( &m_trackSettingsWidget ); layout->addWidget( &m_trackContentWidget, 1 ); setFixedHeight( m_track->getHeight() ); resizeEvent( NULL ); setAcceptDrops( true ); setAttribute( Qt::WA_DeleteOnClose, true ); connect( m_track, SIGNAL( destroyedTrack() ), this, SLOT( close() ) ); connect( m_track, SIGNAL( trackContentObjectAdded( trackContentObject * ) ), this, SLOT( createTCOView( trackContentObject * ) ), Qt::QueuedConnection ); connect( &m_track->m_mutedModel, SIGNAL( dataChanged() ), &m_trackContentWidget, SLOT( update() ) ); connect( &m_track->m_soloModel, SIGNAL( dataChanged() ), m_track, SLOT( toggleSolo() ) ); // create views for already existing TCOs for( track::tcoVector::iterator it = m_track->m_trackContentObjects.begin(); it != m_track->m_trackContentObjects.end(); ++it ) { createTCOView( *it ); } m_trackContainerView->addTrackView( this ); } /*! \brief Destroy this track View. * */ trackView::~trackView() { } /*! \brief Resize this track View. * * \param _re the Resize Event to handle. */ void trackView::resizeEvent( QResizeEvent * _re ) { if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { m_trackOperationsWidget.setFixedSize( TRACK_OP_WIDTH_COMPACT, height() - 1 ); m_trackSettingsWidget.setFixedSize( DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT, height() - 1 ); } else { m_trackOperationsWidget.setFixedSize( TRACK_OP_WIDTH, height() - 1 ); m_trackSettingsWidget.setFixedSize( DEFAULT_SETTINGS_WIDGET_WIDTH, height() - 1 ); } m_trackContentWidget.setFixedHeight( height() ); } /*! \brief Update this track View and all its content objects. * */ void trackView::update() { m_trackContentWidget.update(); if( !m_trackContainerView->fixedTCOs() ) { m_trackContentWidget.changePosition(); } QWidget::update(); } /*! \brief Close this track View. * */ bool trackView::close() { m_trackContainerView->removeTrackView( this ); return QWidget::close(); } /*! \brief Register that the model of this track View has changed. * */ void trackView::modelChanged() { m_track = castModel(); assert( m_track != NULL ); connect( m_track, SIGNAL( destroyedTrack() ), this, SLOT( close() ) ); m_trackOperationsWidget.m_muteBtn->setModel( &m_track->m_mutedModel ); m_trackOperationsWidget.m_soloBtn->setModel( &m_track->m_soloModel ); ModelView::modelChanged(); setFixedHeight( m_track->getHeight() ); } /*! \brief Start a drag event on this track View. * * \param _dee the DragEnterEvent to start. */ void trackView::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, "track_" + QString::number( m_track->type() ) ); } /*! \brief Accept a drop event on this track View. * * We only accept drop events that are of the same type as this track. * If so, we decode the data from the drop event by just feeding it * back into the engine as a state. * * \param _de the DropEvent to handle. */ void trackView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == ( "track_" + QString::number( m_track->type() ) ) ) { // value contains our XML-data so simply create a // DataFile which does the rest for us... DataFile dataFile( value.toUtf8() ); engine::mixer()->lock(); m_track->restoreState( dataFile.content().firstChild().toElement() ); engine::mixer()->unlock(); _de->accept(); } } /*! \brief Handle a mouse press event on this track View. * * If this track container supports rubber band selection, let the * widget handle that and don't bother with any other handling. * * If the left mouse button is pressed, we handle two things. If * SHIFT is pressed, then we resize vertically. Otherwise we start * the process of moving this track to a new position. * * Otherwise we let the widget handle the mouse event as normal. * * \param _me the MouseEvent to handle. */ void trackView::mousePressEvent( QMouseEvent * _me ) { // If previously dragged too small, restore on shift-leftclick if( height() < DEFAULT_TRACK_HEIGHT && _me->modifiers() & Qt::ShiftModifier && _me->button() == Qt::LeftButton ) { setFixedHeight( DEFAULT_TRACK_HEIGHT ); m_track->setHeight( DEFAULT_TRACK_HEIGHT ); } if( m_trackContainerView->allowRubberband() == true ) { QWidget::mousePressEvent( _me ); } else if( _me->button() == Qt::LeftButton ) { if( _me->modifiers() & Qt::ShiftModifier ) { m_action = ResizeTrack; QCursor::setPos( mapToGlobal( QPoint( _me->x(), height() ) ) ); QCursor c( Qt::SizeVerCursor); QApplication::setOverrideCursor( c ); } else { m_action = MoveTrack; QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); // update because in move-mode, all elements in // track-op-widgets are hidden as a visual feedback m_trackOperationsWidget.update(); } _me->accept(); } else { QWidget::mousePressEvent( _me ); } } /*! \brief Handle a mouse move event on this track View. * * If this track container supports rubber band selection, let the * widget handle that and don't bother with any other handling. * * Otherwise if we've started the move process (from mousePressEvent()) * then move ourselves into that position, reordering the track list * with moveTrackViewUp() and moveTrackViewDown() to suit. We make a * note of this in the undo journal in case the user wants to undo this * move. * * Likewise if we've started a resize process, handle this too, making * sure that we never go below the minimum track height. * * \param _me the MouseEvent to handle. */ void trackView::mouseMoveEvent( QMouseEvent * _me ) { if( m_trackContainerView->allowRubberband() == true ) { QWidget::mouseMoveEvent( _me ); } else if( m_action == MoveTrack ) { // look which track-widget the mouse-cursor is over const int y_pos = m_trackContainerView->contentWidget()->mapFromGlobal( _me->globalPos() ).y(); const trackView * track_at_y = m_trackContainerView->trackViewAt( y_pos ); // debug code // qDebug( "y position %d", y_pos ); // a track-widget not equal to ourself? if( track_at_y != NULL && track_at_y != this ) { // then move us up/down there! if( _me->y() < 0 ) { m_trackContainerView->moveTrackViewUp( this ); } else { m_trackContainerView->moveTrackViewDown( this ); } } } else if( m_action == ResizeTrack ) { setFixedHeight( qMax( _me->y(), MINIMAL_TRACK_HEIGHT ) ); m_trackContainerView->realignTracks(); m_track->setHeight( height() ); } if( height() < DEFAULT_TRACK_HEIGHT ) { toolTip::add( this, m_track->m_name ); } } /*! \brief Handle a mouse release event on this track View. * * \param _me the MouseEvent to handle. */ void trackView::mouseReleaseEvent( QMouseEvent * _me ) { m_action = NoAction; while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } m_trackOperationsWidget.update(); QWidget::mouseReleaseEvent( _me ); } /*! \brief Repaint this track View. * * \param _pe the PaintEvent to start. */ void trackView::paintEvent( QPaintEvent * _pe ) { QStyleOption opt; opt.initFrom( this ); QPainter p( this ); style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this ); } /*! \brief Create a trackContentObject View in this track View. * * \param _tco the trackContentObject to create the view for. * \todo is this a good description for what this method does? */ void trackView::createTCOView( trackContentObject * _tco ) { _tco->createView( this ); } #include "moc_track.cxx" lmms-1.1.3/src/gui/000077500000000000000000000000001247673406200140525ustar00rootroot00000000000000lmms-1.1.3/src/gui/AutomatableModelView.cpp000066400000000000000000000140641247673406200206350ustar00rootroot00000000000000/* * AutomatableModelView.cpp - implementation of AutomatableModelView * * Copyright (c) 2011-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "AutomatableModelView.h" #include "AutomationPattern.h" #include "ControllerConnectionDialog.h" #include "ControllerConnection.h" #include "embed.h" #include "MainWindow.h" #include "string_pair_drag.h" AutomatableModelView::AutomatableModelView( ::Model* model, QWidget* _this ) : ModelView( model, _this ), m_description( QString::null ), m_unit( QString::null ) { widget()->setAcceptDrops( true ); widget()->setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); } AutomatableModelView::~AutomatableModelView() { } void AutomatableModelView::addDefaultActions( QMenu* menu ) { AutomatableModel* model = modelUntyped(); AutomatableModelViewSlots* amvSlots = new AutomatableModelViewSlots( this, menu ); menu->addAction( embed::getIconPixmap( "reload" ), AutomatableModel::tr( "&Reset (%1%2)" ). arg( model->displayValue( model->initValue() ) ). arg( m_unit ), model, SLOT( reset() ) ); menu->addSeparator(); menu->addAction( embed::getIconPixmap( "edit_copy" ), AutomatableModel::tr( "&Copy value (%1%2)" ). arg( model->displayValue( model->value() ) ). arg( m_unit ), model, SLOT( copyValue() ) ); menu->addAction( embed::getIconPixmap( "edit_paste" ), AutomatableModel::tr( "&Paste value (%1%2)"). arg( model->displayValue( AutomatableModel::copiedValue() ) ). arg( m_unit ), model, SLOT( pasteValue() ) ); menu->addSeparator(); menu->addAction( embed::getIconPixmap( "automation" ), AutomatableModel::tr( "Edit song-global automation" ), amvSlots, SLOT( editSongGlobalAutomation() ) ); menu->addAction( QPixmap(), AutomatableModel::tr( "Remove song-global automation" ), amvSlots, SLOT( removeSongGlobalAutomation() ) ); menu->addSeparator(); if( model->hasLinkedModels() ) { menu->addAction( embed::getIconPixmap( "edit-delete" ), AutomatableModel::tr( "Remove all linked controls" ), amvSlots, SLOT( unlinkAllModels() ) ); menu->addSeparator(); } QString controllerTxt; if( model->controllerConnection() ) { Controller* cont = model->controllerConnection()->getController(); if( cont ) { controllerTxt = AutomatableModel::tr( "Connected to %1" ).arg( cont->name() ); } else { controllerTxt = AutomatableModel::tr( "Connected to controller" ); } QMenu* contMenu = menu->addMenu( embed::getIconPixmap( "controller" ), controllerTxt ); contMenu->addAction( embed::getIconPixmap( "controller" ), AutomatableModel::tr("Edit connection..."), amvSlots, SLOT( execConnectionDialog() ) ); contMenu->addAction( embed::getIconPixmap( "cancel" ), AutomatableModel::tr("Remove connection"), amvSlots, SLOT( removeConnection() ) ); } else { menu->addAction( embed::getIconPixmap( "controller" ), AutomatableModel::tr("Connect to controller..."), amvSlots, SLOT( execConnectionDialog() ) ); } } void AutomatableModelView::setModel( Model* model, bool isOldModelValid ) { ModelView::setModel( model, isOldModelValid ); } void AutomatableModelView::mousePressEvent( QMouseEvent* event ) { if( event->button() == Qt::LeftButton && event->modifiers() & Qt::ControlModifier ) { new stringPairDrag( "automatable_model", QString::number( modelUntyped()->id() ), QPixmap(), widget() ); event->accept(); } else if( event->button() == Qt::MidButton ) { modelUntyped()->reset(); } } AutomatableModelViewSlots::AutomatableModelViewSlots( AutomatableModelView* amv, QObject* parent ) : QObject(), m_amv( amv ) { connect( parent, SIGNAL( destroyed() ), this, SLOT( deleteLater() ), Qt::QueuedConnection ); } void AutomatableModelViewSlots::execConnectionDialog() { // TODO[pg]: Display a dialog with list of controllers currently in the song // in addition to any system MIDI controllers AutomatableModel* m = m_amv->modelUntyped(); m->displayName(); ControllerConnectionDialog d( (QWidget*) engine::mainWindow(), m ); if( d.exec() == 1 ) { // Actually chose something if( d.chosenController() ) { // Update if( m->controllerConnection() ) { m->controllerConnection()->setController( d.chosenController() ); } // New else { ControllerConnection* cc = new ControllerConnection( d.chosenController() ); m->setControllerConnection( cc ); //cc->setTargetName( m->displayName() ); } } // no controller, so delete existing connection else { removeConnection(); } } } void AutomatableModelViewSlots::removeConnection() { AutomatableModel* m = m_amv->modelUntyped(); if( m->controllerConnection() ) { delete m->controllerConnection(); m->setControllerConnection( NULL ); } } void AutomatableModelViewSlots::editSongGlobalAutomation() { AutomationPattern::globalAutomationPattern( m_amv->modelUntyped() )->openInAutomationEditor(); } void AutomatableModelViewSlots::removeSongGlobalAutomation() { delete AutomationPattern::globalAutomationPattern( m_amv->modelUntyped() ); } void AutomatableModelViewSlots::unlinkAllModels() { m_amv->modelUntyped()->unlinkAllModels(); } #include "moc_AutomatableModelView.cxx" lmms-1.1.3/src/gui/AutomationEditor.cpp000066400000000000000000001565671247673406200200710ustar00rootroot00000000000000/* * AutomationEditor.cpp - implementation of AutomationEditor which is used for * actual setting of dynamic values * * Copyright (c) 2008-2014 Tobias Doerffel * Copyright (c) 2008-2013 Paul Giblock * Copyright (c) 2006-2008 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AutomationEditor.h" #include #include #include #include #include #include #include #include #include #include #include #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include #include "SongEditor.h" #include "MainWindow.h" #include "embed.h" #include "engine.h" #include "pixmap_button.h" #include "templates.h" #include "gui_templates.h" #include "timeline.h" #include "tooltip.h" #include "tool_button.h" #include "text_float.h" #include "combobox.h" #include "bb_track_container.h" #include "PianoRoll.h" #include "debug.h" #include "MeterModel.h" QPixmap * AutomationEditor::s_toolDraw = NULL; QPixmap * AutomationEditor::s_toolErase = NULL; QPixmap * AutomationEditor::s_toolSelect = NULL; QPixmap * AutomationEditor::s_toolMove = NULL; AutomationEditor::AutomationEditor() : QWidget(), m_zoomingXModel(), m_zoomingYModel(), m_quantizeModel(), m_patternMutex( QMutex::Recursive ), m_pattern( NULL ), m_minLevel( 0 ), m_maxLevel( 0 ), m_step( 1 ), m_scrollLevel( 0 ), m_bottomLevel( 0 ), m_topLevel( 0 ), m_currentPosition(), m_action( NONE ), m_moveStartLevel( 0 ), m_moveStartTick( 0 ), m_drawLastLevel( 0.0f ), m_drawLastTick( 0 ), m_ppt( DEFAULT_PPT ), m_y_delta( DEFAULT_Y_DELTA ), m_y_auto( TRUE ), m_editMode( DRAW ), m_scrollBack( FALSE ), m_gridColor( 0,0,0 ), m_graphColor(), m_vertexColor( 0,0,0 ), m_scaleColor() { connect( this, SIGNAL( currentPatternChanged() ), this, SLOT( updateAfterPatternChange() ), Qt::QueuedConnection ); connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( update() ) ); // init pixmaps if( s_toolDraw == NULL ) { s_toolDraw = new QPixmap( embed::getIconPixmap( "edit_draw" ) ); } if( s_toolErase == NULL ) { s_toolErase= new QPixmap( embed::getIconPixmap( "edit_erase" ) ); } if( s_toolSelect == NULL ) { s_toolSelect = new QPixmap( embed::getIconPixmap( "edit_select" ) ); } if( s_toolMove == NULL ) { s_toolMove = new QPixmap( embed::getIconPixmap( "edit_move" ) ); } setAttribute( Qt::WA_OpaquePaintEvent, true ); // add time-line m_timeLine = new timeLine( VALUES_WIDTH, 32, m_ppt, engine::getSong()->getPlayPos( song::Mode_PlayAutomationPattern ), m_currentPosition, this ); connect( this, SIGNAL( positionChanged( const MidiTime & ) ), m_timeLine, SLOT( updatePosition( const MidiTime & ) ) ); connect( m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( updatePosition( const MidiTime & ) ) ); m_toolBar = new QWidget( this ); m_toolBar->setFixedHeight( 32 ); m_toolBar->move( 0, 0 ); m_toolBar->setAutoFillBackground( TRUE ); QPalette pal; pal.setBrush( m_toolBar->backgroundRole(), embed::getIconPixmap( "toolbar_bg" ) ); m_toolBar->setPalette( pal ); QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); tb_layout->setMargin( 0 ); tb_layout->setSpacing( 0 ); // init control-buttons at the top m_playButton = new toolButton( embed::getIconPixmap( "play" ), tr( "Play/pause current pattern (Space)" ), this, SLOT( play() ), m_toolBar ); m_stopButton = new toolButton( embed::getIconPixmap( "stop" ), tr( "Stop playing of current pattern (Space)" ), this, SLOT( stop() ), m_toolBar ); m_playButton->setObjectName( "playButton" ); m_stopButton->setObjectName( "stopButton" ); m_playButton->setWhatsThis( tr( "Click here if you want to play the current pattern. " "This is useful while editing it. The pattern is " "automatically looped when the end is reached." ) ); m_stopButton->setWhatsThis( tr( "Click here if you want to stop playing of the " "current pattern." ) ); removeSelection(); // init scrollbars m_leftRightScroll = new QScrollBar( Qt::Horizontal, this ); m_leftRightScroll->setSingleStep( 1 ); connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ), this, SLOT( horScrolled( int ) ) ); m_topBottomScroll = new QScrollBar( Qt::Vertical, this ); m_topBottomScroll->setSingleStep( 1 ); m_topBottomScroll->setPageStep( 20 ); connect( m_topBottomScroll, SIGNAL( valueChanged( int ) ), this, SLOT( verScrolled( int ) ) ); // init edit-buttons at the top m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ), tr( "Draw mode (Shift+D)" ), this, SLOT( drawButtonToggled() ), m_toolBar ); m_drawButton->setCheckable( TRUE ); m_drawButton->setChecked( TRUE ); m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ), tr( "Erase mode (Shift+E)" ), this, SLOT( eraseButtonToggled() ), m_toolBar ); m_eraseButton->setCheckable( TRUE ); //TODO: m_selectButton and m_moveButton are broken. /*m_selectButton = new toolButton( embed::getIconPixmap( "edit_select" ), tr( "Select mode (Shift+S)" ), this, SLOT( selectButtonToggled() ), m_toolBar ); m_selectButton->setCheckable( TRUE ); m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ), tr( "Move selection mode (Shift+M)" ), this, SLOT( moveButtonToggled() ), m_toolBar ); m_moveButton->setCheckable( TRUE );*/ QButtonGroup * tool_button_group = new QButtonGroup( this ); tool_button_group->addButton( m_drawButton ); tool_button_group->addButton( m_eraseButton ); //tool_button_group->addButton( m_selectButton ); //tool_button_group->addButton( m_moveButton ); tool_button_group->setExclusive( TRUE ); m_drawButton->setWhatsThis( tr( "Click here and draw-mode will be activated. In this " "mode you can add and move single values. This " "is the default mode which is used most of the time. " "You can also press 'Shift+D' on your keyboard to " "activate this mode." ) ); m_eraseButton->setWhatsThis( tr( "Click here and erase-mode will be activated. In this " "mode you can erase single values. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); /*m_selectButton->setWhatsThis( tr( "Click here and select-mode will be activated. In this " "mode you can select values. This is necessary " "if you want to cut, copy, paste, delete, or move " "values. You can also press 'Shift+S' on your keyboard " "to activate this mode." ) ); m_moveButton->setWhatsThis( tr( "If you click here, move-mode will be activated. In this " "mode you can move the values you selected in select-" "mode. You can also press 'Shift+M' on your keyboard " "to activate this mode." ) );*/ m_discreteButton = new toolButton( embed::getIconPixmap( "progression_discrete" ), tr( "Discrete progression" ), this, SLOT( discreteButtonToggled() ), m_toolBar ); m_discreteButton->setCheckable( true ); m_discreteButton->setChecked( true ); m_linearButton = new toolButton( embed::getIconPixmap( "progression_linear" ), tr( "Linear progression" ), this, SLOT( linearButtonToggled() ), m_toolBar ); m_linearButton->setCheckable( true ); m_cubicHermiteButton = new toolButton( embed::getIconPixmap( "progression_cubic_hermite" ), tr( "Cubic Hermite progression" ), this, SLOT( cubicHermiteButtonToggled() ), m_toolBar ); m_cubicHermiteButton->setCheckable( true ); // setup tension-stuff m_tensionKnob = new knob( knobSmall_17, this, "Tension" ); m_tensionModel = new FloatModel(1.0, 0.0, 1.0, 0.01); connect( m_tensionModel, SIGNAL( dataChanged() ), this, SLOT( tensionChanged() ) ); QLabel * tension_lbl = new QLabel( m_toolBar ); tension_lbl->setText( tr("Tension: ") ); tool_button_group = new QButtonGroup( this ); tool_button_group->addButton( m_discreteButton ); tool_button_group->addButton( m_linearButton ); tool_button_group->addButton( m_cubicHermiteButton ); tool_button_group->setExclusive( true ); m_discreteButton->setWhatsThis( tr( "Click here to choose discrete progressions for this " "automation pattern. The value of the connected " "object will remain constant between control points " "and be set immediately to the new value when each " "control point is reached." ) ); m_linearButton->setWhatsThis( tr( "Click here to choose linear progressions for this " "automation pattern. The value of the connected " "object will change at a steady rate over time " "between control points to reach the correct value at " "each control point without a sudden change." ) ); m_cubicHermiteButton->setWhatsThis( tr( "Click here to choose cubic hermite progressions for this " "automation pattern. The value of the connected " "object will change in a smooth curve and ease in to " "the peaks and valleys." ) ); m_cutButton = new toolButton( embed::getIconPixmap( "edit_cut" ), tr( "Cut selected values (Ctrl+X)" ), this, SLOT( cutSelectedValues() ), m_toolBar ); m_copyButton = new toolButton( embed::getIconPixmap( "edit_copy" ), tr( "Copy selected values (Ctrl+C)" ), this, SLOT( copySelectedValues() ), m_toolBar ); m_pasteButton = new toolButton( embed::getIconPixmap( "edit_paste" ), tr( "Paste values from clipboard " "(Ctrl+V)" ), this, SLOT( pasteValues() ), m_toolBar ); m_cutButton->setWhatsThis( tr( "Click here and selected values will be cut into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); m_copyButton->setWhatsThis( tr( "Click here and selected values will be copied into " "the clipboard. You can paste them anywhere in any " "pattern by clicking on the paste button." ) ); m_pasteButton->setWhatsThis( tr( "Click here and the values from the clipboard will be " "pasted at the first visible measure." ) ); // setup zooming-stuff QLabel * zoom_x_lbl = new QLabel( m_toolBar ); zoom_x_lbl->setPixmap( embed::getIconPixmap( "zoom_x" ) ); m_zoomingXComboBox = new comboBox( m_toolBar ); m_zoomingXComboBox->setFixedSize( 80, 22 ); for( int i = 0; i < 6; ++i ) { m_zoomingXModel.addItem( QString::number( 25 << i ) + "%" ); } m_zoomingXModel.setValue( m_zoomingXModel.findText( "100%" ) ); m_zoomingXComboBox->setModel( &m_zoomingXModel ); connect( &m_zoomingXModel, SIGNAL( dataChanged() ), this, SLOT( zoomingXChanged() ) ); QLabel * zoom_y_lbl = new QLabel( m_toolBar ); zoom_y_lbl->setPixmap( embed::getIconPixmap( "zoom_y" ) ); m_zoomingYComboBox = new comboBox( m_toolBar ); m_zoomingYComboBox->setFixedSize( 80, 22 ); m_zoomingYModel.addItem( "Auto" ); for( int i = 0; i < 7; ++i ) { m_zoomingYModel.addItem( QString::number( 25 << i ) + "%" ); } m_zoomingYModel.setValue( m_zoomingYModel.findText( "Auto" ) ); m_zoomingYComboBox->setModel( &m_zoomingYModel ); connect( &m_zoomingYModel, SIGNAL( dataChanged() ), this, SLOT( zoomingYChanged() ) ); // setup quantize-stuff QLabel * quantize_lbl = new QLabel( m_toolBar ); quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); m_quantizeComboBox = new comboBox( m_toolBar ); m_quantizeComboBox->setFixedSize( 60, 22 ); for( int i = 0; i < 7; ++i ) { m_quantizeModel.addItem( "1/" + QString::number( 1 << i ) ); } m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); m_quantizeComboBox->setModel( &m_quantizeModel ); tb_layout->addSpacing( 5 ); tb_layout->addWidget( m_playButton ); tb_layout->addWidget( m_stopButton ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_drawButton ); tb_layout->addWidget( m_eraseButton ); //tb_layout->addWidget( m_selectButton ); //tb_layout->addWidget( m_moveButton ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_discreteButton ); tb_layout->addWidget( m_linearButton ); tb_layout->addWidget( m_cubicHermiteButton ); tb_layout->addSpacing( 5 ); tb_layout->addWidget( tension_lbl ); tb_layout->addSpacing( 5 ); tb_layout->addWidget( m_tensionKnob ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_cutButton ); tb_layout->addWidget( m_copyButton ); tb_layout->addWidget( m_pasteButton ); tb_layout->addSpacing( 10 ); m_timeLine->addToolButtons( m_toolBar ); tb_layout->addSpacing( 15 ); tb_layout->addWidget( zoom_x_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_zoomingXComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( zoom_y_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_zoomingYComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( quantize_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_quantizeComboBox ); tb_layout->addStretch(); // setup our actual window setFocusPolicy( Qt::StrongFocus ); setFocus(); setWindowIcon( embed::getIconPixmap( "automation" ) ); setCurrentPattern( NULL ); setMouseTracking( TRUE ); setMinimumSize( tb_layout->minimumSize().width(), 128 ); // add us to workspace if( engine::mainWindow()->workspace() ) { engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->resize( INITIAL_WIDTH, INITIAL_HEIGHT ); parentWidget()->move( 5, 5 ); parentWidget()->hide(); } else { resize( INITIAL_WIDTH, INITIAL_HEIGHT ); hide(); } } AutomationEditor::~AutomationEditor() { m_zoomingXModel.disconnect(); m_zoomingYModel.disconnect(); m_quantizeModel.disconnect(); m_tensionModel->disconnect(); delete m_tensionModel; } void AutomationEditor::setCurrentPattern( AutomationPattern * _new_pattern ) { m_patternMutex.lock(); m_pattern = _new_pattern; m_patternMutex.unlock(); emit currentPatternChanged(); } void AutomationEditor::saveSettings( QDomDocument & _doc, QDomElement & _this ) { MainWindow::saveWidgetState( this, _this ); } void AutomationEditor::loadSettings( const QDomElement & _this ) { MainWindow::restoreWidgetState( this, _this ); } void AutomationEditor::setPauseIcon( bool pause ) { if( pause == true ) { m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); } else { m_playButton->setIcon( embed::getIconPixmap( "play" ) ); } } // qproperty access methods QColor AutomationEditor::gridColor() const { return m_gridColor; } QBrush AutomationEditor::graphColor() const { return m_graphColor; } QColor AutomationEditor::vertexColor() const { return m_vertexColor; } QBrush AutomationEditor::scaleColor() const { return m_scaleColor; } void AutomationEditor::setGridColor( const QColor & c ) { m_gridColor = c; } void AutomationEditor::setGraphColor( const QBrush & c ) { m_graphColor = c; } void AutomationEditor::setVertexColor( const QColor & c ) { m_vertexColor = c; } void AutomationEditor::setScaleColor( const QBrush & c ) { m_scaleColor = c; } void AutomationEditor::updateAfterPatternChange() { QMutexLocker m( &m_patternMutex ); m_currentPosition = 0; if( !validPattern() ) { setWindowTitle( tr( "Automation Editor - no pattern" ) ); m_minLevel = m_maxLevel = m_scrollLevel = 0; m_step = 1; resizeEvent( NULL ); return; } if( m_pattern->progressionType() == AutomationPattern::DiscreteProgression && !m_discreteButton->isChecked() ) { m_discreteButton->setChecked( true ); } if( m_pattern->progressionType() == AutomationPattern::LinearProgression && !m_linearButton->isChecked() ) { m_linearButton->setChecked( true ); } if( m_pattern->progressionType() == AutomationPattern::CubicHermiteProgression && !m_cubicHermiteButton->isChecked() ) { m_cubicHermiteButton->setChecked( true ); } m_minLevel = m_pattern->firstObject()->minValue(); m_maxLevel = m_pattern->firstObject()->maxValue(); m_step = m_pattern->firstObject()->step(); m_scrollLevel = ( m_minLevel + m_maxLevel ) / 2; // resizeEvent() does the rest for us (scrolling, range-checking // of levels and so on...) resizeEvent( NULL ); setWindowTitle( tr( "Automation Editor - %1" ).arg( m_pattern->name() ) ); update(); } void AutomationEditor::update() { QWidget::update(); QMutexLocker m( &m_patternMutex ); // Note detuning? if( m_pattern && !m_pattern->getTrack() ) { engine::pianoRoll()->update(); } } void AutomationEditor::removeSelection() { m_selectStartTick = 0; m_selectedTick = 0; m_selectStartLevel = 0; m_selectedLevels = 0; } void AutomationEditor::closeEvent( QCloseEvent * _ce ) { QApplication::restoreOverrideCursor(); if( parentWidget() ) { parentWidget()->hide(); } else { hide(); } _ce->ignore(); } void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) { switch( _ke->key() ) { case Qt::Key_Up: m_topBottomScroll->setValue( m_topBottomScroll->value() - 1 ); _ke->accept(); break; case Qt::Key_Down: m_topBottomScroll->setValue( m_topBottomScroll->value() + 1 ); _ke->accept(); break; case Qt::Key_Left: if( ( m_timeLine->pos() -= 16 ) < 0 ) { m_timeLine->pos().setTicks( 0 ); } m_timeLine->updatePosition(); _ke->accept(); break; case Qt::Key_Right: m_timeLine->pos() += 16; m_timeLine->updatePosition(); _ke->accept(); break; case Qt::Key_C: if( _ke->modifiers() & Qt::ControlModifier ) { copySelectedValues(); _ke->accept(); } break; case Qt::Key_X: if( _ke->modifiers() & Qt::ControlModifier ) { cutSelectedValues(); _ke->accept(); } break; case Qt::Key_V: if( _ke->modifiers() & Qt::ControlModifier ) { pasteValues(); _ke->accept(); } break; //TODO: m_selectButton and m_moveButton are broken. /*case Qt::Key_A: if( _ke->modifiers() & Qt::ControlModifier ) { m_selectButton->setChecked( TRUE ); selectAll(); update(); _ke->accept(); } break;*/ case Qt::Key_D: if( _ke->modifiers() & Qt::ShiftModifier ) { m_drawButton->setChecked( TRUE ); _ke->accept(); } break; case Qt::Key_E: if( _ke->modifiers() & Qt::ShiftModifier ) { m_eraseButton->setChecked( TRUE ); _ke->accept(); } break; //TODO: m_selectButton and m_moveButton are broken. /*case Qt::Key_S: if( _ke->modifiers() & Qt::ShiftModifier ) { m_selectButton->setChecked( TRUE ); _ke->accept(); } break; case Qt::Key_M: if( _ke->modifiers() & Qt::ShiftModifier ) { m_moveButton->setChecked( TRUE ); _ke->accept(); } break;*/ case Qt::Key_Delete: deleteSelectedValues(); _ke->accept(); break; case Qt::Key_Space: if( engine::getSong()->isPlaying() ) { stop(); } else { play(); } _ke->accept(); break; case Qt::Key_Home: m_timeLine->pos().setTicks( 0 ); m_timeLine->updatePosition(); _ke->accept(); break; default: break; } } void AutomationEditor::leaveEvent( QEvent * _e ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } QWidget::leaveEvent( _e ); } void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) { int deltax = qRound( qAbs( _x1 - _x0 ) ); float deltay = qAbs( _y1 - _y0 ); int x = _x0; float y = _y0; int xstep; int ystep; if( deltax < quantization() ) { return; } deltax /= quantization(); float yscale = deltay / ( deltax ); if( _x0 < _x1) { xstep = quantization(); } else { xstep = -( quantization() ); } if( _y0 < _y1 ) { ystep = 1; } else { ystep = -1; } int i = 0; while( i < deltax ) { y = _y0 + ( ystep * yscale * i ); x += xstep; i += 1; m_pattern->removeValue( MidiTime( x ) ); m_pattern->putValue( MidiTime( x ), y ); } } void AutomationEditor::disableTensionKnob() { m_tensionKnob->setEnabled( false ); } void AutomationEditor::mousePressEvent( QMouseEvent * _me ) { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } if( _me->y() > TOP_MARGIN ) { float level = getLevel( _me->y() ); int x = _me->x(); if( x > VALUES_WIDTH ) { // set or move value x -= VALUES_WIDTH; // get tick in which the user clicked int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get time map of current pattern timeMap & time_map = m_pattern->getTimeMap(); // will be our iterator in the following loop timeMap::iterator it = time_map.begin(); // loop through whole time-map... while( it != time_map.end() ) { MidiTime len = 4; // and check whether the user clicked on an // existing value if( pos_ticks >= it.key() && len > 0 && ( it+1==time_map.end() || pos_ticks <= (it+1).key() ) && ( pos_ticks<= it.key() + MidiTime::ticksPerTact() *4 / m_ppt ) && level <= it.value() ) { break; } ++it; } // left button?? if( _me->button() == Qt::LeftButton && m_editMode == DRAW ) { // Connect the dots if( _me->modifiers() & Qt::ShiftModifier ) { drawLine( m_drawLastTick, m_drawLastLevel, pos_ticks, level ); } m_drawLastTick = pos_ticks; m_drawLastLevel = level; // did it reach end of map because // there's no value?? if( it == time_map.end() ) { // then set new value MidiTime value_pos( pos_ticks ); MidiTime new_time = m_pattern->setDragValue( value_pos, level ); // reset it so that it can be used for // ops (move, resize) after this // code-block it = time_map.find( new_time ); } // move it m_action = MOVE_VALUE; int aligned_x = (int)( (float)( ( it.key() - m_currentPosition ) * m_ppt ) / MidiTime::ticksPerTact() ); m_moveXOffset = x - aligned_x - 1; // set move-cursor QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); engine::getSong()->setModified(); } else if( ( _me->button() == Qt::RightButton && m_editMode == DRAW ) || m_editMode == ERASE ) { // erase single value if( it != time_map.end() ) { m_pattern->removeValue( it.key() ); engine::getSong()->setModified(); } m_action = NONE; } else if( _me->button() == Qt::LeftButton && m_editMode == SELECT ) { // select an area of values m_selectStartTick = pos_ticks; m_selectedTick = 0; m_selectStartLevel = level; m_selectedLevels = 1; m_action = SELECT_VALUES; } else if( _me->button() == Qt::RightButton && m_editMode == SELECT ) { // when clicking right in select-move, we // switch to move-mode m_moveButton->setChecked( TRUE ); } else if( _me->button() == Qt::LeftButton && m_editMode == MOVE ) { // move selection (including selected values) // save position where move-process began m_moveStartTick = pos_ticks; m_moveStartLevel = level; m_action = MOVE_SELECTION; engine::getSong()->setModified(); } else if( _me->button() == Qt::RightButton && m_editMode == MOVE ) { // when clicking right in select-move, we // switch to draw-mode m_drawButton->setChecked( TRUE ); } update(); } } } void AutomationEditor::mouseReleaseEvent( QMouseEvent * _me ) { if( m_editMode == DRAW ) { if( m_action == MOVE_VALUE ) { m_pattern->applyDragValue(); } QApplication::restoreOverrideCursor(); } m_action = NONE; } #include void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { update(); return; } if( _me->y() > TOP_MARGIN ) { float level = getLevel( _me->y() ); int x = _me->x(); if( _me->x() <= VALUES_WIDTH ) { update(); return; } x -= VALUES_WIDTH; if( m_action == MOVE_VALUE ) { x -= m_moveXOffset; } int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; if( _me->buttons() & Qt::LeftButton && m_editMode == DRAW ) { if( m_action == MOVE_VALUE ) { // moving value if( pos_ticks < 0 ) { pos_ticks = 0; } drawLine( m_drawLastTick, m_drawLastLevel, pos_ticks, level ); m_drawLastTick = pos_ticks; m_drawLastLevel = level; // we moved the value so the value has to be // moved properly according to new starting- // time in the time map of pattern m_pattern->setDragValue( MidiTime( pos_ticks ), level ); } engine::getSong()->setModified(); } else if( ( _me->buttons() & Qt::RightButton && m_editMode == DRAW ) || ( _me->buttons() & Qt::LeftButton && m_editMode == ERASE ) ) { m_pattern->removeValue( MidiTime( pos_ticks ) ); } else if( _me->buttons() & Qt::NoButton && m_editMode == DRAW ) { // set move- or resize-cursor // get time map of current pattern timeMap & time_map = m_pattern->getTimeMap(); // will be our iterator in the following loop timeMap::iterator it = time_map.begin(); // loop through whole time map... for( ; it != time_map.end(); ++it ) { // and check whether the cursor is over an // existing value if( pos_ticks >= it.key() && ( it+1==time_map.end() || pos_ticks <= (it+1).key() ) && level <= it.value() ) { break; } } // did it reach end of map because there's // no value?? if( it != time_map.end() ) { if( QApplication::overrideCursor() ) { if( QApplication::overrideCursor()->shape() != Qt::SizeAllCursor ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); } } else { QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); } } else { // the cursor is over no value, so restore // cursor while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } } } else if( _me->buttons() & Qt::LeftButton && m_editMode == SELECT && m_action == SELECT_VALUES ) { // change size of selection if( x < 0 && m_currentPosition > 0 ) { x = 0; QCursor::setPos( mapToGlobal( QPoint( VALUES_WIDTH, _me->y() ) ) ); if( m_currentPosition >= 4 ) { m_leftRightScroll->setValue( m_currentPosition - 4 ); } else { m_leftRightScroll->setValue( 0 ); } } else if( x > width() - VALUES_WIDTH ) { x = width() - VALUES_WIDTH; QCursor::setPos( mapToGlobal( QPoint( width(), _me->y() ) ) ); m_leftRightScroll->setValue( m_currentPosition + 4 ); } // get tick in which the cursor is posated int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; m_selectedTick = pos_ticks - m_selectStartTick; if( (int) m_selectStartTick + m_selectedTick < 0 ) { m_selectedTick = -qRound( m_selectStartTick ); } m_selectedLevels = level - m_selectStartLevel; if( level <= m_selectStartLevel ) { --m_selectedLevels; } } else if( _me->buttons() & Qt::LeftButton && m_editMode == MOVE && m_action == MOVE_SELECTION ) { // move selection + selected values // do horizontal move-stuff int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; int ticks_diff = pos_ticks - m_moveStartTick; if( m_selectedTick > 0 ) { if( (int) m_selectStartTick + ticks_diff < 0 ) { ticks_diff = -m_selectStartTick; } } else { if( (int) m_selectStartTick + m_selectedTick + ticks_diff < 0 ) { ticks_diff = -( m_selectStartTick + m_selectedTick ); } } m_selectStartTick += ticks_diff; int tact_diff = ticks_diff / MidiTime::ticksPerTact(); ticks_diff = ticks_diff % MidiTime::ticksPerTact(); // do vertical move-stuff float level_diff = level - m_moveStartLevel; if( m_selectedLevels > 0 ) { if( m_selectStartLevel + level_diff < m_minLevel ) { level_diff = m_minLevel - m_selectStartLevel; } else if( m_selectStartLevel + m_selectedLevels + level_diff > m_maxLevel ) { level_diff = m_maxLevel - m_selectStartLevel - m_selectedLevels; } } else { if( m_selectStartLevel + m_selectedLevels + level_diff < m_minLevel ) { level_diff = m_minLevel - m_selectStartLevel - m_selectedLevels; } else if( m_selectStartLevel + level_diff > m_maxLevel ) { level_diff = m_maxLevel - m_selectStartLevel; } } m_selectStartLevel += level_diff; timeMap new_selValuesForMove; for( timeMap::iterator it = m_selValuesForMove.begin(); it != m_selValuesForMove.end(); ++it ) { MidiTime new_value_pos; if( it.key() ) { int value_tact = ( it.key() / MidiTime::ticksPerTact() ) + tact_diff; int value_ticks = ( it.key() % MidiTime::ticksPerTact() ) + ticks_diff; // ensure value_ticks range if( value_ticks / MidiTime::ticksPerTact() ) { value_tact += value_ticks / MidiTime::ticksPerTact(); value_ticks %= MidiTime::ticksPerTact(); } m_pattern->removeValue( it.key() ); new_value_pos = MidiTime( value_tact, value_ticks ); } new_selValuesForMove[ m_pattern->putValue( new_value_pos, it.value () + level_diff, FALSE )] = it.value() + level_diff; } m_selValuesForMove = new_selValuesForMove; m_moveStartTick = pos_ticks; m_moveStartLevel = level; } } else { if( _me->buttons() & Qt::LeftButton && m_editMode == SELECT && m_action == SELECT_VALUES ) { int x = _me->x() - VALUES_WIDTH; if( x < 0 && m_currentPosition > 0 ) { x = 0; QCursor::setPos( mapToGlobal( QPoint( VALUES_WIDTH, _me->y() ) ) ); if( m_currentPosition >= 4 ) { m_leftRightScroll->setValue( m_currentPosition - 4 ); } else { m_leftRightScroll->setValue( 0 ); } } else if( x > width() - VALUES_WIDTH ) { x = width() - VALUES_WIDTH; QCursor::setPos( mapToGlobal( QPoint( width(), _me->y() ) ) ); m_leftRightScroll->setValue( m_currentPosition + 4 ); } // get tick in which the cursor is posated int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; m_selectedTick = pos_ticks - m_selectStartTick; if( (int) m_selectStartTick + m_selectedTick < 0 ) { m_selectedTick = -qRound( m_selectStartTick ); } float level = getLevel( _me->y() ); if( level <= m_bottomLevel ) { QCursor::setPos( mapToGlobal( QPoint( _me->x(), height() - SCROLLBAR_SIZE ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() + 1 ); level = m_bottomLevel; } else if( level >= m_topLevel ) { QCursor::setPos( mapToGlobal( QPoint( _me->x(), TOP_MARGIN ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() - 1 ); level = m_topLevel; } m_selectedLevels = level - m_selectStartLevel; if( level <= m_selectStartLevel ) { --m_selectedLevels; } } QApplication::restoreOverrideCursor(); } update(); } inline void AutomationEditor::drawCross( QPainter & _p ) { QPoint mouse_pos = mapFromGlobal( QCursor::pos() ); float level = getLevel( mouse_pos.y() ); int grid_bottom = height() - SCROLLBAR_SIZE - 1; float cross_y = m_y_auto ? grid_bottom - ( ( grid_bottom - TOP_MARGIN ) * ( level - m_minLevel ) / (float)( m_maxLevel - m_minLevel ) ) : grid_bottom - ( level - m_bottomLevel ) * m_y_delta; _p.setPen( QColor( 0xFF, 0x33, 0x33 ) ); _p.drawLine( VALUES_WIDTH, (int) cross_y, width(), (int) cross_y ); _p.drawLine( mouse_pos.x(), TOP_MARGIN, mouse_pos.x(), height() - SCROLLBAR_SIZE ); QPoint tt_pos = QCursor::pos(); tt_pos.ry() -= 64; tt_pos.rx() += 32; float scaledLevel = m_pattern->firstObject()->scaledValue( level ); QToolTip::showText( tt_pos, QString::number( scaledLevel ), this ); } inline void AutomationEditor::drawAutomationPoint( QPainter & p, timeMap::iterator it ) { int x = xCoordOfTick( it.key() ); int y = yCoordOfLevel( it.value() ); const int outerRadius = qBound( 2, ( m_ppt * quantization() ) / 576, 5 ); // man, getting this calculation right took forever p.setPen( QPen( vertexColor().lighter( 200 ) ) ); p.setBrush( QBrush( vertexColor() ) ); p.drawEllipse( x - outerRadius, y - outerRadius, outerRadius * 2, outerRadius * 2 ); } void AutomationEditor::paintEvent( QPaintEvent * _pe ) { QMutexLocker m( &m_patternMutex ); QStyleOption opt; opt.initFrom( this ); QPainter p( this ); style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this ); // get foreground color QColor fgColor = p.pen().brush().color(); // get background color and fill background QBrush bgColor = p.background(); p.fillRect( 0, 0, width(), height(), bgColor ); // set font-size to 8 p.setFont( pointSize<8>( p.font() ) ); int grid_height = height() - TOP_MARGIN - SCROLLBAR_SIZE; // start drawing at the bottom int grid_bottom = height() - SCROLLBAR_SIZE - 1; p.fillRect( 0, TOP_MARGIN, VALUES_WIDTH, height() - TOP_MARGIN, scaleColor() ); // print value numbers int font_height = p.fontMetrics().height(); Qt::Alignment text_flags = (Qt::Alignment)( Qt::AlignRight | Qt::AlignVCenter ); if( validPattern() ) { if( m_y_auto ) { int y[] = { grid_bottom, TOP_MARGIN + font_height / 2 }; float level[] = { m_minLevel, m_maxLevel }; for( int i = 0; i < 2; ++i ) { const QString & label = m_pattern->firstObject() ->displayValue( level[i] ); p.setPen( QApplication::palette().color( QPalette::Active, QPalette::Shadow ) ); p.drawText( 1, y[i] - font_height + 1, VALUES_WIDTH - 10, 2 * font_height, text_flags, label ); p.setPen( fgColor ); p.drawText( 0, y[i] - font_height, VALUES_WIDTH - 10, 2 * font_height, text_flags, label ); } } else { int y; int level = (int) m_bottomLevel; int printable = qMax( 1, 5 * DEFAULT_Y_DELTA / m_y_delta ); int module = level % printable; if( module ) { int inv_module = ( printable - module ) % printable; level += inv_module; } for( ; level <= m_topLevel; level += printable ) { const QString & label = m_pattern->firstObject() ->displayValue( level ); y = yCoordOfLevel( level ); p.setPen( QApplication::palette().color( QPalette::Active, QPalette::Shadow ) ); p.drawText( 1, y - font_height + 1, VALUES_WIDTH - 10, 2 * font_height, text_flags, label ); p.setPen( fgColor ); p.drawText( 0, y - font_height, VALUES_WIDTH - 10, 2 * font_height, text_flags, label ); } } } // set clipping area, because we are not allowed to paint over // keyboard... p.setClipRect( VALUES_WIDTH, TOP_MARGIN, width() - VALUES_WIDTH, grid_height ); // draw vertical raster QColor lineColor = QColor( gridColor() ); if( m_pattern ) { int tick, x; int x_line_end = (int)( m_y_auto || m_topLevel < m_maxLevel ? TOP_MARGIN : grid_bottom - ( m_topLevel - m_bottomLevel ) * m_y_delta ); // 3 independent loops, because quantization might not divide evenly into // exotic denominators (e.g. 7/11 time), which are allowed ATM. // First quantization grid... for( tick = m_currentPosition - m_currentPosition % quantization(), x = xCoordOfTick( tick ); x<=width(); tick += quantization(), x = xCoordOfTick( tick ) ) { lineColor.setAlpha( 80 ); p.setPen( lineColor ); p.drawLine( x, grid_bottom, x, x_line_end ); } // Then beat grid int ticksPerBeat = DefaultTicksPerTact / engine::getSong()->getTimeSigModel().getDenominator(); for( tick = m_currentPosition - m_currentPosition % ticksPerBeat, x = xCoordOfTick( tick ); x<=width(); tick += ticksPerBeat, x = xCoordOfTick( tick ) ) { lineColor.setAlpha( 160 ); p.setPen( lineColor ); p.drawLine( x, grid_bottom, x, x_line_end ); } // and finally bars for( tick = m_currentPosition - m_currentPosition % MidiTime::ticksPerTact(), x = xCoordOfTick( tick ); x<=width(); tick += MidiTime::ticksPerTact(), x = xCoordOfTick( tick ) ) { lineColor.setAlpha( 255 ); p.setPen( lineColor ); p.drawLine( x, grid_bottom, x, x_line_end ); } /// \todo move this horizontal line drawing code into the same loop as the value ticks? if( m_y_auto ) { lineColor.setAlpha( 160 ); QPen pen( lineColor ); p.setPen( pen ); p.drawLine( VALUES_WIDTH, grid_bottom, width(), grid_bottom ); pen.setStyle( Qt::DotLine ); p.setPen( pen ); float y_delta = ( grid_bottom - TOP_MARGIN ) / 8.0f; for( int i = 1; i < 8; ++i ) { int y = (int)( grid_bottom - i * y_delta ); p.drawLine( VALUES_WIDTH, y, width(), y ); } } else { float y; for( int level = (int)m_bottomLevel; level <= m_topLevel; level++) { y = yCoordOfLevel( (float)level ); if( level % 5 == 0 ) { lineColor.setAlpha( 160 ); p.setPen( lineColor ); } else { lineColor.setAlpha( 80 ); p.setPen( lineColor ); } // draw level line p.drawLine( VALUES_WIDTH, (int) y, width(), (int) y ); } } } // following code draws all visible values // setup selection-vars int sel_pos_start = m_selectStartTick; int sel_pos_end = m_selectStartTick + m_selectedTick; if( sel_pos_start > sel_pos_end ) { qSwap( sel_pos_start, sel_pos_end ); } float selLevel_start = m_selectStartLevel; float selLevel_end = selLevel_start + m_selectedLevels; if( selLevel_start > selLevel_end ) { qSwap( selLevel_start, selLevel_end ); } if( validPattern() ) { int len_ticks = 4; timeMap & time_map = m_pattern->getTimeMap(); //Don't bother doing/rendering anything if there is no automation points if( time_map.size() > 0 ) { timeMap::iterator it = time_map.begin(); while( it+1 != time_map.end() ) { // skip this section if it occurs completely before the // visible area int next_x = xCoordOfTick( (it+1).key() ); if( next_x < 0 ) { ++it; continue; } int x = xCoordOfTick( it.key() ); if( x > width() ) { break; } bool is_selected = FALSE; // if we're in move-mode, we may only draw // values in selected area, that have originally // been selected and not values that are now in // selection because the user moved it... if( m_editMode == MOVE ) { if( m_selValuesForMove.contains( it.key() ) ) { is_selected = TRUE; } } else if( it.value() >= selLevel_start && it.value() <= selLevel_end && it.key() >= sel_pos_start && it.key() + len_ticks <= sel_pos_end ) { is_selected = TRUE; } float *values = m_pattern->valuesAfter( it.key() ); for( int i = 0; i < (it+1).key() - it.key(); i++ ) { drawLevelTick( p, it.key() + i, values[i], is_selected ); } delete [] values; // Draw circle drawAutomationPoint(p, it); ++it; } for( int i = it.key(), x = xCoordOfTick( i ); x <= width(); i++, x = xCoordOfTick( i ) ) { // TODO: Find out if the section after the last control // point is able to be selected and if so set this // boolean correctly drawLevelTick( p, i, it.value(), false ); } // Draw circle(the last one) drawAutomationPoint(p, it); } } else { QFont f = p.font(); f.setBold( TRUE ); p.setFont( pointSize<14>( f ) ); p.setPen( QApplication::palette().color( QPalette::Active, QPalette::BrightText ) ); p.drawText( VALUES_WIDTH + 20, TOP_MARGIN + 40, width() - VALUES_WIDTH - 20 - SCROLLBAR_SIZE, grid_height - 40, Qt::TextWordWrap, tr( "Please open an automation pattern with " "the context menu of a control!" ) ); } // now draw selection-frame int x = ( sel_pos_start - m_currentPosition ) * m_ppt / MidiTime::ticksPerTact(); int w = ( sel_pos_end - sel_pos_start ) * m_ppt / MidiTime::ticksPerTact(); int y, h; if( m_y_auto ) { y = (int)( grid_bottom - ( ( grid_bottom - TOP_MARGIN ) * ( selLevel_start - m_minLevel ) / (float)( m_maxLevel - m_minLevel ) ) ); h = (int)( grid_bottom - ( ( grid_bottom - TOP_MARGIN ) * ( selLevel_end - m_minLevel ) / (float)( m_maxLevel - m_minLevel ) ) - y ); } else { y = (int)( grid_bottom - ( selLevel_start - m_bottomLevel ) * m_y_delta ); h = (int)( ( selLevel_start - selLevel_end ) * m_y_delta ); } p.setPen( QColor( 0, 64, 192 ) ); p.drawRect( x + VALUES_WIDTH, y, w, h ); // TODO: Get this out of paint event int l = validPattern() ? (int) m_pattern->length() : 0; // reset scroll-range if( m_leftRightScroll->maximum() != l ) { m_leftRightScroll->setRange( 0, l ); m_leftRightScroll->setPageStep( l ); } if( validPattern() ) { drawCross( p ); } const QPixmap * cursor = NULL; // draw current edit-mode-icon below the cursor switch( m_editMode ) { case DRAW: cursor = s_toolDraw; break; case ERASE: cursor = s_toolErase; break; case SELECT: cursor = s_toolSelect; break; case MOVE: cursor = s_toolMove; break; } p.drawPixmap( mapFromGlobal( QCursor::pos() ) + QPoint( 8, 8 ), *cursor ); } int AutomationEditor::xCoordOfTick( int _tick ) { return VALUES_WIDTH + ( ( _tick - m_currentPosition ) * m_ppt / MidiTime::ticksPerTact() ); } int AutomationEditor::yCoordOfLevel( float _level ) { int grid_bottom = height() - SCROLLBAR_SIZE - 1; if( m_y_auto ) { return (int)( grid_bottom - ( grid_bottom - TOP_MARGIN ) * ( _level - m_minLevel ) / ( m_maxLevel - m_minLevel ) ); } else { return (int)( grid_bottom - ( _level - m_bottomLevel ) * m_y_delta ); } } void AutomationEditor::drawLevelTick( QPainter & _p, int _tick, float _level, bool _is_selected ) { int grid_bottom = height() - SCROLLBAR_SIZE - 1; const int x = xCoordOfTick( _tick ); int rect_width = xCoordOfTick( _tick+1 ) - x; // is the level in visible area? if( ( _level >= m_bottomLevel && _level <= m_topLevel ) || ( _level > m_topLevel && m_topLevel >= 0 ) || ( _level < m_bottomLevel && m_bottomLevel <= 0 ) ) { int y_start = yCoordOfLevel( _level ); int rect_height; if( m_y_auto ) { int y_end = (int)( grid_bottom + ( grid_bottom - TOP_MARGIN ) * m_minLevel / ( m_maxLevel - m_minLevel ) ); rect_height = y_end - y_start; } else { rect_height = (int)( _level * m_y_delta ); } QBrush currentColor = _is_selected ? QBrush( QColor( 0x00, 0x40, 0xC0 ) ) : graphColor(); _p.fillRect( x, y_start, rect_width, rect_height, currentColor ); } else { printf("not in range\n"); } } // responsible for moving/resizing scrollbars after window-resizing void AutomationEditor::resizeEvent( QResizeEvent * ) { m_leftRightScroll->setGeometry( VALUES_WIDTH, height() - SCROLLBAR_SIZE, width() - VALUES_WIDTH, SCROLLBAR_SIZE ); int grid_height = height() - TOP_MARGIN - SCROLLBAR_SIZE; m_topBottomScroll->setGeometry( width() - SCROLLBAR_SIZE, TOP_MARGIN, SCROLLBAR_SIZE, grid_height ); int half_grid = grid_height / 2; int total_pixels = (int)( ( m_maxLevel - m_minLevel ) * m_y_delta + 1 ); if( !m_y_auto && grid_height < total_pixels ) { int min_scroll = (int)( m_minLevel + floorf( half_grid / (float)m_y_delta ) ); int max_scroll = (int)( m_maxLevel - (int)floorf( ( grid_height - half_grid ) / (float)m_y_delta ) ); m_topBottomScroll->setRange( min_scroll, max_scroll ); } else { m_topBottomScroll->setRange( (int) m_scrollLevel, (int) m_scrollLevel ); } m_topBottomScroll->setValue( (int) m_scrollLevel ); if( engine::getSong() ) { engine::getSong()->getPlayPos( song::Mode_PlayAutomationPattern ).m_timeLine->setFixedWidth( width() ); } m_toolBar->setFixedWidth( width() ); updateTopBottomLevels(); update(); } void AutomationEditor::wheelEvent( QWheelEvent * _we ) { _we->accept(); if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::ShiftModifier ) { int y = m_zoomingYModel.value(); if( _we->delta() > 0 ) { y++; } if( _we->delta() < 0 ) { y--; } y = qBound( 0, y, m_zoomingYModel.size() - 1 ); m_zoomingYModel.setValue( y ); } else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier ) { int q = m_quantizeModel.value(); if( _we->delta() > 0 ) { q--; } if( _we->delta() < 0 ) { q++; } q = qBound( 0, q, m_quantizeModel.size() - 1 ); m_quantizeModel.setValue( q ); update(); } else if( _we->modifiers() & Qt::ControlModifier ) { int x = m_zoomingXModel.value(); if( _we->delta() > 0 ) { x++; } if( _we->delta() < 0 ) { x--; } x = qBound( 0, x, m_zoomingXModel.size() - 1 ); m_zoomingXModel.setValue( x ); } else if( _we->modifiers() & Qt::ShiftModifier || _we->orientation() == Qt::Horizontal ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - _we->delta() * 2 / 15 ); } else { m_topBottomScroll->setValue( m_topBottomScroll->value() - _we->delta() / 30 ); } } float AutomationEditor::getLevel( int _y ) { int level_line_y = height() - SCROLLBAR_SIZE - 1; // pressed level float level = roundf( ( m_bottomLevel + ( m_y_auto ? ( m_maxLevel - m_minLevel ) * ( level_line_y - _y ) / (float)( level_line_y - ( TOP_MARGIN + 2 ) ) : ( level_line_y - _y ) / (float)m_y_delta ) ) / m_step ) * m_step; // some range-checking-stuff level = qBound( m_bottomLevel, level, m_topLevel ); return( level ); } inline bool AutomationEditor::inBBEditor() { QMutexLocker m( &m_patternMutex ); return( validPattern() && m_pattern->getTrack()->trackContainer() == engine::getBBTrackContainer() ); } void AutomationEditor::play() { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } if( !m_pattern->getTrack() ) { if( engine::getSong()->playMode() != song::Mode_PlayPattern ) { engine::getSong()->stop(); engine::getSong()->playPattern( (Pattern *) engine::pianoRoll()->currentPattern() ); } else if( engine::getSong()->isStopped() == false ) { engine::getSong()->togglePause(); } else { engine::getSong()->playPattern( (Pattern *) engine::pianoRoll()->currentPattern() ); } } else if( inBBEditor() ) { engine::getBBTrackContainer()->play(); } else { if( engine::getSong()->isStopped() == true ) { engine::getSong()->playSong(); } else { engine::getSong()->togglePause(); } } setPauseIcon( engine::getSong()->isPlaying() ); } void AutomationEditor::stop() { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } if( m_pattern->getTrack() && inBBEditor() ) { engine::getBBTrackContainer()->stop(); } else { engine::getSong()->stop(); } m_scrollBack = TRUE; } void AutomationEditor::horScrolled( int _new_pos ) { m_currentPosition = _new_pos; emit positionChanged( m_currentPosition ); update(); } void AutomationEditor::verScrolled( int _new_pos ) { m_scrollLevel = _new_pos; updateTopBottomLevels(); update(); } void AutomationEditor::drawButtonToggled() { m_editMode = DRAW; removeSelection(); update(); } void AutomationEditor::eraseButtonToggled() { m_editMode = ERASE; removeSelection(); update(); } void AutomationEditor::selectButtonToggled() { m_editMode = SELECT; removeSelection(); update(); } void AutomationEditor::moveButtonToggled() { m_editMode = MOVE; m_selValuesForMove.clear(); getSelectedValues( m_selValuesForMove ); update(); } void AutomationEditor::discreteButtonToggled() { if ( validPattern() ) { QMutexLocker m( &m_patternMutex ); disableTensionKnob(); m_pattern->setProgressionType( AutomationPattern::DiscreteProgression ); engine::getSong()->setModified(); update(); } } void AutomationEditor::linearButtonToggled() { if ( validPattern() ) { QMutexLocker m( &m_patternMutex ); disableTensionKnob(); m_pattern->setProgressionType( AutomationPattern::LinearProgression ); engine::getSong()->setModified(); update(); } } void AutomationEditor::cubicHermiteButtonToggled() { if ( validPattern() ) { m_tensionKnob->setModel( m_tensionModel ); m_tensionKnob->setEnabled( true ); toolTip::add( m_tensionKnob, tr( "Tension value for spline" ) ); m_tensionKnob->setWhatsThis( tr( "A higher tension value may make a smoother curve " "but overshoot some values. A low tension " "value will cause the slope of the curve to " "level off at each control point." ) ); m_pattern->setProgressionType( AutomationPattern::CubicHermiteProgression ); engine::getSong()->setModified(); update(); } } void AutomationEditor::tensionChanged() { m_pattern->setTension( QString::number( m_tensionModel->value() ) ); update(); } void AutomationEditor::selectAll() { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } timeMap & time_map = m_pattern->getTimeMap(); timeMap::iterator it = time_map.begin(); m_selectStartTick = 0; m_selectedTick = m_pattern->length(); m_selectStartLevel = it.value(); m_selectedLevels = 1; while( ++it != time_map.end() ) { const float level = it.value(); if( level < m_selectStartLevel ) { // if we move start-level down, we have to add // the difference between old and new start-level // to m_selectedLevels, otherwise the selection // is just moved down... m_selectedLevels += m_selectStartLevel - level; m_selectStartLevel = level; } else if( level >= m_selectStartLevel + m_selectedLevels ) { m_selectedLevels = level - m_selectStartLevel + 1; } } } // returns vector with pointers to all selected values void AutomationEditor::getSelectedValues( timeMap & _selected_values ) { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } int sel_pos_start = m_selectStartTick; int sel_pos_end = sel_pos_start + m_selectedTick; if( sel_pos_start > sel_pos_end ) { qSwap( sel_pos_start, sel_pos_end ); } float selLevel_start = m_selectStartLevel; float selLevel_end = selLevel_start + m_selectedLevels; if( selLevel_start > selLevel_end ) { qSwap( selLevel_start, selLevel_end ); } timeMap & time_map = m_pattern->getTimeMap(); for( timeMap::iterator it = time_map.begin(); it != time_map.end(); ++it ) { //TODO: Add constant tick_t len_ticks = MidiTime::ticksPerTact() / 16; float level = it.value(); tick_t pos_ticks = it.key(); if( level >= selLevel_start && level <= selLevel_end && pos_ticks >= sel_pos_start && pos_ticks + len_ticks <= sel_pos_end ) { _selected_values[it.key()] = level; } } } void AutomationEditor::copySelectedValues() { m_valuesToCopy.clear(); timeMap selected_values; getSelectedValues( selected_values ); if( !selected_values.isEmpty() ) { for( timeMap::iterator it = selected_values.begin(); it != selected_values.end(); ++it ) { m_valuesToCopy[it.key()] = it.value(); } textFloat::displayMessage( tr( "Values copied" ), tr( "All selected values were copied to the " "clipboard." ), embed::getIconPixmap( "edit_copy" ), 2000 ); } } void AutomationEditor::cutSelectedValues() { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } m_valuesToCopy.clear(); timeMap selected_values; getSelectedValues( selected_values ); if( !selected_values.isEmpty() ) { engine::getSong()->setModified(); for( timeMap::iterator it = selected_values.begin(); it != selected_values.end(); ++it ) { m_valuesToCopy[it.key()] = it.value(); m_pattern->removeValue( it.key() ); } } update(); engine::songEditor()->update(); } void AutomationEditor::pasteValues() { QMutexLocker m( &m_patternMutex ); if( validPattern() && !m_valuesToCopy.isEmpty() ) { for( timeMap::iterator it = m_valuesToCopy.begin(); it != m_valuesToCopy.end(); ++it ) { m_pattern->putValue( it.key() + m_currentPosition, it.value() ); } // we only have to do the following lines if we pasted at // least one value... engine::getSong()->setModified(); update(); engine::songEditor()->update(); } } void AutomationEditor::deleteSelectedValues() { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) { return; } timeMap selected_values; getSelectedValues( selected_values ); const bool update_after_delete = !selected_values.empty(); for( timeMap::iterator it = selected_values.begin(); it != selected_values.end(); ++it ) { m_pattern->removeValue( it.key() ); } if( update_after_delete == TRUE ) { engine::getSong()->setModified(); update(); engine::songEditor()->update(); } } void AutomationEditor::updatePosition( const MidiTime & _t ) { if( ( engine::getSong()->isPlaying() && engine::getSong()->playMode() == song::Mode_PlayAutomationPattern ) || m_scrollBack == TRUE ) { const int w = width() - VALUES_WIDTH; if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) { m_leftRightScroll->setValue( _t.getTact() * MidiTime::ticksPerTact() ); } else if( _t < m_currentPosition ) { MidiTime t = qMax( _t - w * MidiTime::ticksPerTact() * MidiTime::ticksPerTact() / m_ppt, 0 ); m_leftRightScroll->setValue( t.getTact() * MidiTime::ticksPerTact() ); } m_scrollBack = FALSE; } } void AutomationEditor::zoomingXChanged() { const QString & zfac = m_zoomingXModel.currentText(); m_ppt = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PPT / 100; #ifdef LMMS_DEBUG assert( m_ppt > 0 ); #endif m_timeLine->setPixelsPerTact( m_ppt ); update(); } void AutomationEditor::zoomingYChanged() { const QString & zfac = m_zoomingYModel.currentText(); m_y_auto = zfac == "Auto"; if( !m_y_auto ) { m_y_delta = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_Y_DELTA / 100; } #ifdef LMMS_DEBUG assert( m_y_delta > 0 ); #endif resizeEvent( NULL ); } int AutomationEditor::quantization() const { return( DefaultTicksPerTact / m_quantizeComboBox->model()->currentText().right( m_quantizeComboBox->model()->currentText().length() - 2 ).toInt() ); } void AutomationEditor::updateTopBottomLevels() { if( m_y_auto ) { m_bottomLevel = m_minLevel; m_topLevel = m_maxLevel; return; } int total_pixels = (int)( ( m_maxLevel - m_minLevel ) * m_y_delta + 1 ); int grid_height = height() - TOP_MARGIN - SCROLLBAR_SIZE; int half_grid = grid_height / 2; if( total_pixels > grid_height ) { int centralLevel = (int)( m_minLevel + m_maxLevel - m_scrollLevel ); m_bottomLevel = centralLevel - ( half_grid / (float)m_y_delta ); if( m_bottomLevel < m_minLevel ) { m_bottomLevel = m_minLevel; m_topLevel = m_minLevel + (int)floorf( grid_height / (float)m_y_delta ); } else { m_topLevel = m_bottomLevel + (int)floorf( grid_height / (float)m_y_delta ); if( m_topLevel > m_maxLevel ) { m_topLevel = m_maxLevel; m_bottomLevel = m_maxLevel - (int)floorf( grid_height / (float)m_y_delta ); } } } else { m_bottomLevel = m_minLevel; m_topLevel = m_maxLevel; } } #include "moc_AutomationEditor.cxx" lmms-1.1.3/src/gui/AutomationPatternView.cpp000066400000000000000000000242451247673406200210760ustar00rootroot00000000000000/* * AutomationPatternView.cpp - implementation of view for AutomationPattern * * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "AutomationPatternView.h" #include "AutomationEditor.h" #include "AutomationPattern.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "ProjectJournal.h" #include "rename_dialog.h" #include "string_pair_drag.h" #include "tooltip.h" QPixmap * AutomationPatternView::s_pat_rec = NULL; AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern, trackView * _parent ) : trackContentObjectView( _pattern, _parent ), m_pat( _pattern ), m_paintPixmap(), m_needsUpdate( true ) { connect( m_pat, SIGNAL( dataChanged() ), this, SLOT( update() ) ); connect( engine::automationEditor(), SIGNAL( currentPatternChanged() ), this, SLOT( update() ) ); setAttribute( Qt::WA_OpaquePaintEvent, true ); setFixedHeight( parentWidget()->height() - 2 ); setAutoResizeEnabled( false ); toolTip::add( this, tr( "double-click to open this pattern in " "automation editor" ) ); setStyle( QApplication::style() ); if( s_pat_rec == NULL ) { s_pat_rec = new QPixmap( embed::getIconPixmap( "pat_rec" ) ); } } AutomationPatternView::~AutomationPatternView() { } void AutomationPatternView::update() { m_needsUpdate = true; if( fixedTCOs() ) { m_pat->changeLength( m_pat->length() ); } trackContentObjectView::update(); } void AutomationPatternView::resetName() { m_pat->setName( QString::null ); } void AutomationPatternView::changeName() { QString s = m_pat->name(); renameDialog rename_dlg( s ); rename_dlg.exec(); m_pat->setName( s ); update(); } void AutomationPatternView::disconnectObject( QAction * _a ) { JournallingObject * j = engine::projectJournal()-> journallingObject( _a->data().toInt() ); if( j && dynamic_cast( j ) ) { float oldMin = m_pat->getMin(); float oldMax = m_pat->getMax(); m_pat->m_objects.erase( qFind( m_pat->m_objects.begin(), m_pat->m_objects.end(), dynamic_cast( j ) ) ); update(); //If automation editor is opened, update its display after disconnection if( engine::automationEditor() ) { engine::automationEditor()->updateAfterPatternChange(); } //if there is no more connection connected to the AutomationPattern if( m_pat->m_objects.size() == 0 ) { //scale the points to fit the new min. and max. value this->scaleTimemapToFit( oldMin, oldMax ); } } } void AutomationPatternView::toggleRecording() { m_pat->setRecording( ! m_pat->isRecording() ); update(); } void AutomationPatternView::constructContextMenu( QMenu * _cm ) { QAction * a = new QAction( embed::getIconPixmap( "automation" ), tr( "Open in Automation editor" ), _cm ); _cm->insertAction( _cm->actions()[0], a ); connect( a, SIGNAL( triggered( bool ) ), m_pat, SLOT( openInAutomationEditor() ) ); _cm->insertSeparator( _cm->actions()[1] ); _cm->addSeparator(); _cm->addAction( embed::getIconPixmap( "edit_erase" ), tr( "Clear" ), m_pat, SLOT( clear() ) ); _cm->addSeparator(); _cm->addAction( embed::getIconPixmap( "reload" ), tr( "Reset name" ), this, SLOT( resetName() ) ); _cm->addAction( embed::getIconPixmap( "edit_rename" ), tr( "Change name" ), this, SLOT( changeName() ) ); _cm->addAction( embed::getIconPixmap( "record" ), tr( "Set/clear record" ), this, SLOT( toggleRecording() ) ); if( !m_pat->m_objects.isEmpty() ) { _cm->addSeparator(); QMenu * m = new QMenu( tr( "%1 Connections" ). arg( m_pat->m_objects.count() ), _cm ); for( AutomationPattern::objectVector::iterator it = m_pat->m_objects.begin(); it != m_pat->m_objects.end(); ++it ) { if( *it ) { a = new QAction( tr( "Disconnect \"%1\"" ). arg( ( *it )->fullDisplayName() ), m ); a->setData( ( *it )->id() ); m->addAction( a ); } } connect( m, SIGNAL( triggered( QAction * ) ), this, SLOT( disconnectObject( QAction * ) ) ); _cm->addMenu( m ); } _cm->addSeparator(); } void AutomationPatternView::mouseDoubleClickEvent( QMouseEvent * _me ) { if( _me->button() != Qt::LeftButton ) { _me->ignore(); return; } m_pat->openInAutomationEditor(); } void AutomationPatternView::paintEvent( QPaintEvent * ) { if( m_needsUpdate == false ) { QPainter p( this ); p.drawPixmap( 0, 0, m_paintPixmap ); return; } QPainter _p( this ); const QColor styleColor = _p.pen().brush().color(); m_needsUpdate = false; if( m_paintPixmap.isNull() == true || m_paintPixmap.size() != size() ) { m_paintPixmap = QPixmap( size() ); } QPainter p( &m_paintPixmap ); QLinearGradient lingrad( 0, 0, 0, height() ); QColor c; if( !( m_pat->getTrack()->isMuted() || m_pat->isMuted() ) ) c = isSelected() ? QColor( 0, 0, 224 ) : styleColor; else c = QColor( 80,80,80 ); lingrad.setColorAt( 1, c.darker( 300 ) ); lingrad.setColorAt( 0, c ); p.setBrush( lingrad ); if( engine::automationEditor()->currentPattern() == m_pat ) p.setPen( c.lighter( 160 ) ); else p.setPen( c.lighter( 130 ) ); p.drawRect( 1, 1, width()-3, height()-3 ); const float ppt = fixedTCOs() ? ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH ) / (float) m_pat->length().getTact() : pixelsPerTact(); const int x_base = TCO_BORDER_WIDTH; p.setPen( c.darker( 300 ) ); for( tact_t t = 1; t < m_pat->length().getTact(); ++t ) { const int tx = x_base + static_cast( ppt * t ) - 1; if( tx < ( width() - TCO_BORDER_WIDTH*2 ) ) { p.drawLine( tx, TCO_BORDER_WIDTH, tx, 5 ); p.drawLine( tx, height() - ( 4 + 2 * TCO_BORDER_WIDTH ), tx, height() - 2 * TCO_BORDER_WIDTH ); } } const float min = m_pat->firstObject()->minValue(); const float max = m_pat->firstObject()->maxValue(); const float y_scale = max - min; const float h = ( height() - 2*TCO_BORDER_WIDTH ) / y_scale; p.translate( 0.0f, max * height() / y_scale - TCO_BORDER_WIDTH ); p.scale( 1.0f, -h ); QLinearGradient lin2grad( 0, min, 0, max ); lin2grad.setColorAt( 1, fgColor().lighter( 150 ) ); lin2grad.setColorAt( 0.5, fgColor() ); lin2grad.setColorAt( 0, fgColor().darker( 150 ) ); for( AutomationPattern::timeMap::const_iterator it = m_pat->getTimeMap().begin(); it != m_pat->getTimeMap().end(); ++it ) { if( it+1 == m_pat->getTimeMap().end() ) { const float x1 = x_base + it.key() * ppt / MidiTime::ticksPerTact(); const float x2 = (float)( width() - TCO_BORDER_WIDTH ); if( x1 > ( width() - TCO_BORDER_WIDTH ) ) break; p.fillRect( QRectF( x1, 0.0f, x2-x1, it.value() ), lin2grad ); break; } float *values = m_pat->valuesAfter( it.key() ); for( int i = it.key(); i < (it+1).key(); i++ ) { float value = values[i - it.key()]; const float x1 = x_base + i * ppt / MidiTime::ticksPerTact(); const float x2 = x_base + (i+1) * ppt / MidiTime::ticksPerTact(); if( x1 > ( width() - TCO_BORDER_WIDTH ) ) break; p.fillRect( QRectF( x1, 0.0f, x2-x1, value ), lin2grad ); } delete [] values; } p.resetMatrix(); // recording icon for when recording automation if( m_pat->isRecording() ) { p.drawPixmap( 4, 14, *s_pat_rec ); } // outer edge p.setBrush( QBrush() ); if( engine::automationEditor()->currentPattern() == m_pat ) p.setPen( c.lighter( 130 ) ); else p.setPen( c.darker( 300 ) ); p.drawRect( 0, 0, width()-1, height()-1 ); // pattern name p.setFont( pointSize<8>( p.font() ) ); QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() ) ? QColor( 30, 30, 30 ) : textColor(); p.setPen( QColor( 0, 0, 0 ) ); p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() ); p.setPen( text_color ); p.drawText( 3, p.fontMetrics().height(), m_pat->name() ); if( m_pat->isMuted() ) { p.drawPixmap( 3, p.fontMetrics().height() + 1, embed::getIconPixmap( "muted", 16, 16 ) ); } p.end(); _p.drawPixmap( 0, 0, m_paintPixmap ); } void AutomationPatternView::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, "automatable_model" ); if( !_dee->isAccepted() ) { trackContentObjectView::dragEnterEvent( _dee ); } } void AutomationPatternView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString val = stringPairDrag::decodeValue( _de ); if( type == "automatable_model" ) { AutomatableModel * mod = dynamic_cast( engine::projectJournal()-> journallingObject( val.toInt() ) ); if( mod != NULL ) { m_pat->addObject( mod ); } update(); if( engine::automationEditor() && engine::automationEditor()->currentPattern() == m_pat ) { engine::automationEditor()->setCurrentPattern( m_pat ); } } else { trackContentObjectView::dropEvent( _de ); } } /** * @brief Preserves the auto points over different scale */ void AutomationPatternView::scaleTimemapToFit( float oldMin, float oldMax ) { float newMin = m_pat->getMin(); float newMax = m_pat->getMax(); if( oldMin == newMin && oldMax == newMax ) { return; } for( AutomationPattern::timeMap::iterator it = m_pat->m_timeMap.begin(); it != m_pat->m_timeMap.end(); ++it ) { if( *it < oldMin ) { *it = oldMin; } else if( *it > oldMax ) { *it = oldMax; } *it = (*it-oldMin)*(newMax-newMin)/(oldMax-oldMin)+newMin; } m_pat->generateTangents(); } #include "moc_AutomationPatternView.cxx" lmms-1.1.3/src/gui/ControllerConnectionDialog.cpp000066400000000000000000000260241247673406200220450ustar00rootroot00000000000000/* * ControllerConnectionDialog.cpp - dialog allowing the user to create and * modify links between controllers and models * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include "ControllerConnectionDialog.h" #include "ControllerConnection.h" #include "MidiController.h" #include "MidiClient.h" #include "MidiPortMenu.h" #include "LcdSpinBox.h" #include "led_checkbox.h" #include "combobox.h" #include "tab_widget.h" #include "group_box.h" #include "song.h" #include "tool_button.h" #include "gui_templates.h" #include "embed.h" class AutoDetectMidiController : public MidiController { public: AutoDetectMidiController( Model* parent ) : MidiController( parent ), m_detectedMidiChannel( 0 ), m_detectedMidiController( 0 ) { updateName(); } virtual ~AutoDetectMidiController() { } virtual void processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 ) { if( event.type() == MidiControlChange && ( m_midiPort.inputChannel() == 0 || m_midiPort.inputChannel() == event.channel() + 1 ) ) { m_detectedMidiChannel = event.channel() + 1; m_detectedMidiController = event.controllerNumber() + 1; m_detectedMidiPort = engine::mixer()->midiClient()->sourcePortName( event ); emit valueChanged(); } } // Would be a nice copy ctor, but too hard to add copy ctor because // model has none. MidiController* copyToMidiController( Model* parent ) { MidiController* c = new MidiController( parent ); c->m_midiPort.setInputChannel( m_midiPort.inputChannel() ); c->m_midiPort.setInputController( m_midiPort.inputController() ); c->subscribeReadablePorts( m_midiPort.readablePorts() ); c->updateName(); return c; } void useDetected() { m_midiPort.setInputChannel( m_detectedMidiChannel ); m_midiPort.setInputController( m_detectedMidiController ); const MidiPort::Map& map = m_midiPort.readablePorts(); for( MidiPort::Map::ConstIterator it = map.begin(); it != map.end(); ++it ) { m_midiPort.subscribeReadablePort( it.key(), m_detectedMidiPort.isEmpty() || ( it.key() == m_detectedMidiPort ) ); } } public slots: void reset() { m_midiPort.setInputChannel( 0 ); m_midiPort.setInputController( 0 ); } private: int m_detectedMidiChannel; int m_detectedMidiController; QString m_detectedMidiPort; } ; ControllerConnectionDialog::ControllerConnectionDialog( QWidget * _parent, const AutomatableModel * _target_model ) : QDialog( _parent ), m_readablePorts( NULL ), m_midiAutoDetect( false ), m_controller( NULL ), m_targetModel( _target_model ), m_midiController( NULL ) { setWindowIcon( embed::getIconPixmap( "setup_audio" ) ); setWindowTitle( tr( "Connection Settings" ) ); setModal( true ); // Midi stuff m_midiGroupBox = new groupBox( tr( "MIDI CONTROLLER" ), this ); m_midiGroupBox->setGeometry( 8, 10, 240, 80 ); connect( m_midiGroupBox->model(), SIGNAL( dataChanged() ), this, SLOT( midiToggled() ) ); m_midiChannelSpinBox = new LcdSpinBox( 2, m_midiGroupBox, tr( "Input channel" ) ); m_midiChannelSpinBox->addTextForValue( 0, "--" ); m_midiChannelSpinBox->setLabel( tr( "CHANNEL" ) ); m_midiChannelSpinBox->move( 8, 24 ); m_midiControllerSpinBox = new LcdSpinBox( 3, m_midiGroupBox, tr( "Input controller" ) ); m_midiControllerSpinBox->addTextForValue( 0, "---" ); m_midiControllerSpinBox->setLabel( tr( "CONTROLLER" ) ); m_midiControllerSpinBox->move( 68, 24 ); m_midiAutoDetectCheckBox = new ledCheckBox( tr("Auto Detect"), m_midiGroupBox, tr("Auto Detect") ); m_midiAutoDetectCheckBox->setModel( &m_midiAutoDetect ); m_midiAutoDetectCheckBox->move( 8, 60 ); connect( &m_midiAutoDetect, SIGNAL( dataChanged() ), this, SLOT( autoDetectToggled() ) ); // when using with non-raw-clients we can provide buttons showing // our port-menus when being clicked if( !engine::mixer()->midiClient()->isRaw() ) { m_readablePorts = new MidiPortMenu( MidiPort::Input ); connect( m_readablePorts, SIGNAL( triggered( QAction * ) ), this, SLOT( enableAutoDetect( QAction * ) ) ); toolButton * rp_btn = new toolButton( m_midiGroupBox ); rp_btn->setText( tr( "MIDI-devices to receive " "MIDI-events from" ) ); rp_btn->setIcon( embed::getIconPixmap( "piano" ) ); rp_btn->setGeometry( 160, 24, 32, 32 ); rp_btn->setMenu( m_readablePorts ); rp_btn->setPopupMode( QToolButton::InstantPopup ); } // User stuff m_userGroupBox = new groupBox( tr( "USER CONTROLLER" ), this ); m_userGroupBox->setGeometry( 8, 100, 240, 60 ); connect( m_userGroupBox->model(), SIGNAL( dataChanged() ), this, SLOT( userToggled() ) ); m_userController = new comboBox( m_userGroupBox, "Controller" ); m_userController->setGeometry( 10, 24, 200, 22 ); for( int i = 0; i < engine::getSong()->controllers().size(); ++i ) { Controller * c = engine::getSong()->controllers().at( i ); m_userController->model()->addItem( c->name() ); } // Mapping functions m_mappingBox = new tabWidget( tr( "MAPPING FUNCTION" ), this ); m_mappingBox->setGeometry( 8, 170, 240, 64 ); m_mappingFunction = new QLineEdit( m_mappingBox ); m_mappingFunction->setGeometry( 10, 20, 170, 16 ); m_mappingFunction->setText( "input" ); m_mappingFunction->setReadOnly( true ); // Buttons QWidget * buttons = new QWidget( this ); buttons->setGeometry( 8, 240, 240, 32 ); QHBoxLayout * btn_layout = new QHBoxLayout( buttons ); btn_layout->setSpacing( 0 ); btn_layout->setMargin( 0 ); QPushButton * select_btn = new QPushButton( embed::getIconPixmap( "add" ), tr( "OK" ), buttons ); connect( select_btn, SIGNAL( clicked() ), this, SLOT( selectController() ) ); QPushButton * cancel_btn = new QPushButton( embed::getIconPixmap( "cancel" ), tr( "Cancel" ), buttons ); connect( cancel_btn, SIGNAL( clicked() ), this, SLOT( reject() ) ); btn_layout->addStretch(); btn_layout->addSpacing( 10 ); btn_layout->addWidget( select_btn ); btn_layout->addSpacing( 10 ); btn_layout->addWidget( cancel_btn ); btn_layout->addSpacing( 10 ); setFixedSize( 256, 280 ); // Crazy MIDI View stuff // TODO, handle by making this a model for the Dialog "view" ControllerConnection * cc = NULL; if( m_targetModel ) { cc = m_targetModel->controllerConnection(); if( cc && cc->getController()->type() != Controller::DummyController && engine::getSong() ) { if ( cc->getController()->type() == Controller::MidiController ) { m_midiGroupBox->model()->setValue( true ); // ensure controller is created midiToggled(); MidiController * cont = (MidiController*)( cc->getController() ); m_midiChannelSpinBox->model()->setValue( cont->m_midiPort.inputChannel() ); m_midiControllerSpinBox->model()->setValue( cont->m_midiPort.inputController() ); m_midiController->subscribeReadablePorts( static_cast( cc->getController() )->m_midiPort.readablePorts() ); } else { int idx = engine::getSong()->controllers().indexOf( cc->getController() ); if( idx >= 0 ) { m_userGroupBox->model()->setValue( true ); m_userController->model()->setValue( idx ); } } } } if( !cc ) { m_midiGroupBox->model()->setValue( true ); } show(); } ControllerConnectionDialog::~ControllerConnectionDialog() { delete m_readablePorts; delete m_midiController; } void ControllerConnectionDialog::selectController() { // Midi if( m_midiGroupBox->model()->value() > 0 ) { if( m_midiControllerSpinBox->model()->value() > 0 ) { MidiController * mc; mc = m_midiController->copyToMidiController( engine::getSong() ); /* if( m_targetModel->getTrack() && !m_targetModel->getTrack()->displayName().isEmpty() ) { mc->m_midiPort.setName( QString( "%1 (%2)" ). arg( m_targetModel->getTrack()->displayName() ). arg( m_targetModel->displayName() ) ); } else { mc->m_midiPort.setName( m_targetModel->displayName() ); } */ mc->m_midiPort.setName( m_targetModel->fullDisplayName() ); m_controller = mc; } } // User else { if( m_userGroupBox->model()->value() > 0 && engine::getSong()->controllers().size() ) { m_controller = engine::getSong()->controllers().at( m_userController->model()->value() ); } if( m_controller && m_controller->hasModel( m_targetModel ) ) { QMessageBox::warning(this, tr("LMMS"), tr("Cycle Detected.")); return; } } accept(); } void ControllerConnectionDialog::midiToggled() { int enabled = m_midiGroupBox->model()->value(); if( enabled != 0 ) { if( m_userGroupBox->model()->value() != 0 ) { m_userGroupBox->model()->setValue( 0 ); } if( !m_midiController ) { m_midiController = new AutoDetectMidiController( engine::getSong() ); MidiPort::Map map = m_midiController->m_midiPort.readablePorts(); for( MidiPort::Map::Iterator it = map.begin(); it != map.end(); ++it ) { it.value() = true; } m_midiController->subscribeReadablePorts( map ); m_midiChannelSpinBox->setModel( &m_midiController->m_midiPort.m_inputChannelModel ); m_midiControllerSpinBox->setModel( &m_midiController->m_midiPort.m_inputControllerModel ); if( m_readablePorts ) { m_readablePorts->setModel( &m_midiController->m_midiPort ); } connect( m_midiController, SIGNAL( valueChanged() ), this, SLOT( midiValueChanged() ) ); } } m_midiAutoDetect.setValue( enabled ); m_midiChannelSpinBox->setEnabled( enabled ); m_midiControllerSpinBox->setEnabled( enabled ); m_midiAutoDetectCheckBox->setEnabled( enabled ); } void ControllerConnectionDialog::userToggled() { int enabled = m_userGroupBox->model()->value(); if( enabled != 0 && m_midiGroupBox->model()->value() != 0 ) { m_midiGroupBox->model()->setValue( 0 ); } m_userController->setEnabled( enabled ); } void ControllerConnectionDialog::autoDetectToggled() { if( m_midiAutoDetect.value() ) { m_midiController->reset(); } } void ControllerConnectionDialog::midiValueChanged() { if( m_midiAutoDetect.value() ) { m_midiController->useDetected(); if( m_readablePorts ) { m_readablePorts->updateMenu(); } } } void ControllerConnectionDialog::enableAutoDetect( QAction * _a ) { if( _a->isChecked() ) { m_midiAutoDetectCheckBox->model()->setValue( true ); } } #include "moc_ControllerConnectionDialog.cxx" lmms-1.1.3/src/gui/ControllerDialog.cpp000066400000000000000000000025541247673406200200270ustar00rootroot00000000000000/* * ControllerDialog.cpp - per-controller-specific view for changing a * controller's settings * * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "ControllerDialog.h" #include "Controller.h" ControllerDialog::ControllerDialog( Controller * _controller, QWidget * _parent ) : QWidget( _parent ), ModelView( _controller, this ) { } ControllerDialog::~ControllerDialog() { } void ControllerDialog::closeEvent( QCloseEvent * _ce ) { _ce->ignore(); emit closed(); } #include "moc_ControllerDialog.cxx" lmms-1.1.3/src/gui/EffectControlDialog.cpp000066400000000000000000000030371247673406200204360ustar00rootroot00000000000000/* * EffectControlDialog.cpp - base-class for effect-dialogs for displaying * and editing control port values * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "EffectControlDialog.h" #include "EffectControls.h" #include "Effect.h" EffectControlDialog::EffectControlDialog( EffectControls * _controls ) : QWidget( NULL ), ModelView( _controls, this ), m_effectControls( _controls ) { setWindowTitle( m_effectControls->effect()->displayName() ); } EffectControlDialog::~EffectControlDialog() { } void EffectControlDialog::closeEvent( QCloseEvent * _ce ) { _ce->ignore(); emit closed(); } #include "moc_EffectControlDialog.cxx" lmms-1.1.3/src/gui/EffectSelectDialog.cpp000066400000000000000000000126701247673406200202400ustar00rootroot00000000000000/* * EffectSelectDialog.cpp - dialog to choose effect plugin * * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "EffectSelectDialog.h" #include "ui_EffectSelectDialog.h" #include "gui_templates.h" #include "embed.h" EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) : QDialog( _parent ), ui( new Ui::EffectSelectDialog ), m_sourceModel(), m_model(), m_descriptionWidget( NULL ) { ui->setupUi( this ); setWindowIcon( embed::getIconPixmap( "setup_audio" ) ); // query effects Plugin::getDescriptorsOfAvailPlugins( m_pluginDescriptors ); EffectKeyList subPluginEffectKeys; for( Plugin::DescriptorList::ConstIterator it = m_pluginDescriptors.begin(); it != m_pluginDescriptors.end(); ++it ) { if( it->type != Plugin::Effect ) { continue; } if( it->subPluginFeatures ) { it->subPluginFeatures->listSubPluginKeys( // as iterators are always stated to be not // equal with pointers, we dereference the // iterator and take the address of the item, // so we're on the safe side and the compiler // likely will reduce that to just "it" &( *it ), subPluginEffectKeys ); } else { m_effectKeys << EffectKey( &( *it ), it->name ); } } m_effectKeys += subPluginEffectKeys; // and fill our source model QStringList pluginNames; for( EffectKeyList::ConstIterator it = m_effectKeys.begin(); it != m_effectKeys.end(); ++it ) { if( ( *it ).desc->subPluginFeatures ) { pluginNames += QString( "%1: %2" ).arg( ( *it ).desc->displayName, ( *it ).name ); } else { pluginNames += ( *it ).desc->displayName; } } int row = 0; for( QStringList::ConstIterator it = pluginNames.begin(); it != pluginNames.end(); ++it ) { m_sourceModel.setItem( row, 0, new QStandardItem( *it ) ); ++row; } // setup filtering m_model.setSourceModel( &m_sourceModel ); m_model.setFilterCaseSensitivity( Qt::CaseInsensitive ); connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), &m_model, SLOT( setFilterRegExp( const QString & ) ) ); connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateSelection() ) ); ui->pluginList->setModel( &m_model ); // setup selection model QItemSelectionModel * selectionModel = new QItemSelectionModel( &m_model ); ui->pluginList->setSelectionModel( selectionModel ); connect( selectionModel, SIGNAL( currentRowChanged( const QModelIndex &, const QModelIndex & ) ), SLOT( rowChanged( const QModelIndex &, const QModelIndex & ) ) ); connect( ui->pluginList, SIGNAL( doubleClicked( const QModelIndex & ) ), SLOT( acceptSelection() ) ); // try to accept current selection when pressing "OK" connect( ui->buttonBox, SIGNAL( accepted() ), this, SLOT( acceptSelection() ) ); updateSelection(); show(); } EffectSelectDialog::~EffectSelectDialog() { delete ui; } Effect * EffectSelectDialog::instantiateSelectedPlugin( EffectChain * _parent ) { if( !m_currentSelection.name.isEmpty() && m_currentSelection.desc ) { return Effect::instantiate( m_currentSelection.desc->name, _parent, &m_currentSelection ); } return NULL; } void EffectSelectDialog::acceptSelection() { if( m_currentSelection.isValid() ) { accept(); } } void EffectSelectDialog::rowChanged( const QModelIndex & _idx, const QModelIndex & ) { delete m_descriptionWidget; m_descriptionWidget = NULL; if( m_model.mapToSource( _idx ).row() < 0 ) { // invalidate current selection m_currentSelection = Plugin::Descriptor::SubPluginFeatures::Key(); } else { m_currentSelection = m_effectKeys[m_model.mapToSource( _idx ).row()]; } if( m_currentSelection.desc && m_currentSelection.desc->subPluginFeatures ) { m_descriptionWidget = new QWidget; QVBoxLayout * l = new QVBoxLayout( m_descriptionWidget ); l->setMargin( 4 ); l->setSpacing( 0 ); ui->scrollArea->setWidget( m_descriptionWidget ); m_currentSelection.desc->subPluginFeatures-> fillDescriptionWidget( m_descriptionWidget, &m_currentSelection ); foreach( QWidget * w, m_descriptionWidget->findChildren() ) { if( w->parent() == m_descriptionWidget ) { l->addWidget( w ); } } l->setSizeConstraint( QLayout::SetFixedSize ); m_descriptionWidget->show(); } } void EffectSelectDialog::updateSelection() { // no valid selection anymore due to changed filter? if( ui->pluginList->selectionModel()->selection().size() <= 0 ) { // then select our first item ui->pluginList->selectionModel()->select( m_model.index( 0, 0 ), QItemSelectionModel::ClearAndSelect ); rowChanged( m_model.index( 0, 0 ), QModelIndex() ); } } #include "moc_EffectSelectDialog.cxx" lmms-1.1.3/src/gui/FileBrowser.cpp000066400000000000000000000543731247673406200170150ustar00rootroot00000000000000/* * FileBrowser.cpp - implementation of the project-, preset- and * sample-file-browser * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include "FileBrowser.h" #include "bb_track_container.h" #include "config_mgr.h" #include "debug.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "ImportFilter.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "MainWindow.h" #include "DataFile.h" #include "PresetPreviewPlayHandle.h" #include "SamplePlayHandle.h" #include "song.h" #include "string_pair_drag.h" #include "text_float.h" enum TreeWidgetItemTypes { TypeFileItem = QTreeWidgetItem::UserType, TypeDirectoryItem } ; FileBrowser::FileBrowser(const QString & directories, const QString & filter, const QString & title, const QPixmap & pm, QWidget * parent, bool dirs_as_items ) : SideBarWidget( title, pm, parent ), m_directories( directories ), m_filter( filter ), m_dirsAsItems( dirs_as_items ) { setWindowTitle( tr( "Browser" ) ); m_l = new FileBrowserTreeWidget( contentParent() ); addContentWidget( m_l ); QWidget * ops = new QWidget( contentParent() ); ops->setFixedHeight( 24 ); QHBoxLayout * opl = new QHBoxLayout( ops ); opl->setMargin( 0 ); opl->setSpacing( 0 ); m_filterEdit = new QLineEdit( ops ); connect( m_filterEdit, SIGNAL( textEdited( const QString & ) ), this, SLOT( filterItems( const QString & ) ) ); QPushButton * reload_btn = new QPushButton( embed::getIconPixmap( "reload" ), QString::null, ops ); connect( reload_btn, SIGNAL( clicked() ), this, SLOT( reloadTree() ) ); opl->addWidget( m_filterEdit ); opl->addSpacing( 5 ); opl->addWidget( reload_btn ); addContentWidget( ops ); reloadTree(); show(); } FileBrowser::~FileBrowser() { } void FileBrowser::filterItems( const QString & filter ) { const bool show_all = filter.isEmpty(); for( int i = 0; i < m_l->topLevelItemCount(); ++i ) { QTreeWidgetItem * it = m_l->topLevelItem( i ); // show all items if filter is empty if( show_all ) { it->setHidden( false ); if( it->childCount() ) { filterItems( it, filter ); } } // is directory? else if( it->childCount() ) { // matches filter? if( it->text( 0 ). contains( filter, Qt::CaseInsensitive ) ) { // yes, then show everything below it->setHidden( false ); filterItems( it, QString::null ); } else { // only show if item below matches filter it->setHidden( !filterItems( it, filter ) ); } } // a standard item (i.e. no file or directory item?) else if( it->type() == QTreeWidgetItem::Type ) { // hide in every case when filtering it->setHidden( true ); } else { // file matches filter? it->setHidden( !it->text( 0 ). contains( filter, Qt::CaseInsensitive ) ); } } } bool FileBrowser::filterItems(QTreeWidgetItem * item, const QString & filter ) { const bool show_all = filter.isEmpty(); bool matched = false; for( int i = 0; i < item->childCount(); ++i ) { QTreeWidgetItem * it = item->child( i ); bool cm = false; // whether current item matched // show all items if filter is empty if( show_all ) { it->setHidden( false ); if( it->childCount() ) { filterItems( it, filter ); } } // is directory? else if( it->childCount() ) { // matches filter? if( it->text( 0 ). contains( filter, Qt::CaseInsensitive ) ) { // yes, then show everything below it->setHidden( false ); filterItems( it, QString::null ); cm = true; } else { // only show if item below matches filter cm = filterItems( it, filter ); it->setHidden( !cm ); } } // a standard item (i.e. no file or directory item?) else if( it->type() == QTreeWidgetItem::Type ) { // hide in every case when filtering it->setHidden( true ); } else { // file matches filter? cm = it->text( 0 ). contains( filter, Qt::CaseInsensitive ); it->setHidden( !cm ); } if( cm ) { matched = true; } } return matched; } void FileBrowser::reloadTree( void ) { const QString text = m_filterEdit->text(); m_filterEdit->clear(); m_l->clear(); QStringList paths = m_directories.split( '*' ); for( QStringList::iterator it = paths.begin(); it != paths.end(); ++it ) { addItems( *it ); } m_filterEdit->setText( text ); filterItems( text ); } void FileBrowser::addItems(const QString & path ) { if( m_dirsAsItems ) { m_l->addTopLevelItem( new Directory( path, QString::null, m_filter ) ); return; } QDir cdir( path ); QStringList files = cdir.entryList( QDir::Dirs, QDir::Name ); for( QStringList::const_iterator it = files.constBegin(); it != files.constEnd(); ++it ) { QString cur_file = *it; if( cur_file[0] != '.' ) { bool orphan = true; for( int i = 0; i < m_l->topLevelItemCount(); ++i ) { Directory * d = dynamic_cast( m_l->topLevelItem( i ) ); if( d == NULL || cur_file < d->text( 0 ) ) { m_l->insertTopLevelItem( i, new Directory( cur_file, path, m_filter ) ); orphan = false; break; } else if( cur_file == d->text( 0 ) ) { d->addDirectory( path ); orphan = false; break; } } if( orphan ) { m_l->addTopLevelItem( new Directory( cur_file, path, m_filter ) ); } } } files = cdir.entryList( QDir::Files, QDir::Name ); for( QStringList::const_iterator it = files.constBegin(); it != files.constEnd(); ++it ) { QString cur_file = *it; if( cur_file[0] != '.' ) { // TODO: don't insert instead of removing, order changed // remove existing file-items QList existing = m_l->findItems( cur_file, Qt::MatchFixedString ); if( !existing.empty() ) { delete existing.front(); } (void) new FileItem( m_l, cur_file, path ); } } } void FileBrowser::keyPressEvent(QKeyEvent * ke ) { if( ke->key() == Qt::Key_F5 ) { reloadTree(); } else { ke->ignore(); } } FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) : QTreeWidget( parent ), m_mousePressed( false ), m_pressPos(), m_previewPlayHandle( NULL ), m_pphMutex( QMutex::Recursive ), m_contextMenuItem( NULL ) { setColumnCount( 1 ); headerItem()->setHidden( true ); setSortingEnabled( false ); setFont( pointSizeF( font(), 7.5f ) ); connect( this, SIGNAL( itemDoubleClicked( QTreeWidgetItem *, int ) ), SLOT( activateListItem( QTreeWidgetItem *, int ) ) ); connect( this, SIGNAL( itemCollapsed( QTreeWidgetItem * ) ), SLOT( updateDirectory( QTreeWidgetItem * ) ) ); connect( this, SIGNAL( itemExpanded( QTreeWidgetItem * ) ), SLOT( updateDirectory( QTreeWidgetItem * ) ) ); } FileBrowserTreeWidget::~FileBrowserTreeWidget() { } void FileBrowserTreeWidget::contextMenuEvent(QContextMenuEvent * e ) { FileItem * f = dynamic_cast( itemAt( e->pos() ) ); if( f != NULL && ( f->handling() == FileItem::LoadAsPreset || f->handling() == FileItem::LoadByPlugin ) ) { m_contextMenuItem = f; QMenu contextMenu( this ); contextMenu.addAction( tr( "Send to active instrument-track" ), this, SLOT( sendToActiveInstrumentTrack() ) ); contextMenu.addAction( tr( "Open in new instrument-track/" "Song-Editor" ), this, SLOT( openInNewInstrumentTrackSE() ) ); contextMenu.addAction( tr( "Open in new instrument-track/" "B+B Editor" ), this, SLOT( openInNewInstrumentTrackBBE() ) ); contextMenu.exec( e->globalPos() ); m_contextMenuItem = NULL; } } void FileBrowserTreeWidget::mousePressEvent(QMouseEvent * me ) { QTreeWidget::mousePressEvent( me ); if( me->button() != Qt::LeftButton ) { return; } QTreeWidgetItem * i = itemAt( me->pos() ); if ( i ) { // TODO: Restrict to visible selection // if ( _me->x() > header()->cellPos( header()->mapToActual( 0 ) ) // + treeStepSize() * ( i->depth() + ( rootIsDecorated() ? // 1 : 0 ) ) + itemMargin() || // _me->x() < header()->cellPos( // header()->mapToActual( 0 ) ) ) // { m_pressPos = me->pos(); m_mousePressed = true; // } } FileItem * f = dynamic_cast( i ); if( f != NULL ) { m_pphMutex.lock(); if( m_previewPlayHandle != NULL ) { engine::mixer()->removePlayHandle( m_previewPlayHandle ); m_previewPlayHandle = NULL; } // in special case of sample-files we do not care about // handling() rather than directly creating a SamplePlayHandle if( f->type() == FileItem::SampleFile ) { textFloat * tf = textFloat::displayMessage( tr( "Loading sample" ), tr( "Please wait, loading sample for " "preview..." ), embed::getIconPixmap( "sample_file", 24, 24 ), 0 ); qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); SamplePlayHandle * s = new SamplePlayHandle( f->fullName() ); s->setDoneMayReturnTrue( false ); m_previewPlayHandle = s; delete tf; } else if( f->type() != FileItem::VstPluginFile && ( f->handling() == FileItem::LoadAsPreset || f->handling() == FileItem::LoadByPlugin ) ) { m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin ); } if( m_previewPlayHandle != NULL ) { if( !engine::mixer()->addPlayHandle( m_previewPlayHandle ) ) { m_previewPlayHandle = NULL; } } m_pphMutex.unlock(); } } void FileBrowserTreeWidget::mouseMoveEvent( QMouseEvent * me ) { if( m_mousePressed == true && ( m_pressPos - me->pos() ).manhattanLength() > QApplication::startDragDistance() ) { // make sure any playback is stopped mouseReleaseEvent( NULL ); FileItem * f = dynamic_cast( itemAt( m_pressPos ) ); if( f != NULL ) { switch( f->type() ) { case FileItem::PresetFile: new stringPairDrag( f->handling() == FileItem::LoadAsPreset ? "presetfile" : "pluginpresetfile", f->fullName(), embed::getIconPixmap( "preset_file" ), this ); break; case FileItem::SampleFile: new stringPairDrag( "samplefile", f->fullName(), embed::getIconPixmap( "sample_file" ), this ); break; case FileItem::SoundFontFile: new stringPairDrag( "soundfontfile", f->fullName(), embed::getIconPixmap( "soundfont_file" ), this ); break; case FileItem::VstPluginFile: new stringPairDrag( "vstpluginfile", f->fullName(), embed::getIconPixmap( "vst_plugin_file" ), this ); break; case FileItem::MidiFile: // don't allow dragging FLP-files as FLP import filter clears project // without asking // case fileItem::FlpFile: new stringPairDrag( "importedproject", f->fullName(), embed::getIconPixmap( "midi_file" ), this ); break; default: break; } } } } void FileBrowserTreeWidget::mouseReleaseEvent(QMouseEvent * me ) { m_mousePressed = false; m_pphMutex.lock(); if( m_previewPlayHandle != NULL ) { // if there're samples shorter than 3 seconds, we don't // stop them if the user releases mouse-button... if( m_previewPlayHandle->type() == PlayHandle::TypeSamplePlayHandle ) { SamplePlayHandle * s = dynamic_cast( m_previewPlayHandle ); if( s && s->totalFrames() - s->framesDone() <= static_cast( engine::mixer()-> processingSampleRate() * 3 ) ) { s->setDoneMayReturnTrue( true ); m_previewPlayHandle = NULL; m_pphMutex.unlock(); return; } } engine::mixer()->removePlayHandle( m_previewPlayHandle ); m_previewPlayHandle = NULL; } m_pphMutex.unlock(); } void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it ) { engine::mixer()->lock(); switch( f->handling() ) { case FileItem::LoadAsProject: if( engine::mainWindow()->mayChangeProject() ) { engine::getSong()->loadProject( f->fullName() ); } break; case FileItem::LoadByPlugin: { const QString e = f->extension(); Instrument * i = it->instrument(); if( i == NULL || !i->descriptor()->supportsFileType( e ) ) { i = it->loadInstrument( engine::pluginFileHandling()[e] ); } i->loadFile( f->fullName() ); break; } case FileItem::LoadAsPreset: { DataFile dataFile( f->fullName() ); InstrumentTrack::removeMidiPortNode( dataFile ); it->setSimpleSerializing(); it->loadSettings( dataFile.content().toElement() ); break; } case FileItem::ImportAsProject: if( f->type() == FileItem::FlpFile && !engine::mainWindow()->mayChangeProject() ) { break; } ImportFilter::import( f->fullName(), engine::getSong() ); break; case FileItem::NotSupported: default: break; } engine::mixer()->unlock(); } void FileBrowserTreeWidget::activateListItem(QTreeWidgetItem * item, int column ) { FileItem * f = dynamic_cast( item ); if( f == NULL ) { return; } if( f->handling() == FileItem::LoadAsProject || f->handling() == FileItem::ImportAsProject ) { handleFile( f, NULL ); } else if( f->handling() != FileItem::NotSupported ) { engine::mixer()->lock(); InstrumentTrack * it = dynamic_cast( track::create( track::InstrumentTrack, engine::getBBTrackContainer() ) ); handleFile( f, it ); engine::mixer()->unlock(); } } void FileBrowserTreeWidget::openInNewInstrumentTrack( TrackContainer* tc ) { if( m_contextMenuItem->handling() == FileItem::LoadAsPreset || m_contextMenuItem->handling() == FileItem::LoadByPlugin ) { engine::mixer()->lock(); InstrumentTrack * it = dynamic_cast( track::create( track::InstrumentTrack, tc ) ); handleFile( m_contextMenuItem, it ); engine::mixer()->unlock(); } } void FileBrowserTreeWidget::openInNewInstrumentTrackBBE( void ) { openInNewInstrumentTrack( engine::getBBTrackContainer() ); } void FileBrowserTreeWidget::openInNewInstrumentTrackSE( void ) { openInNewInstrumentTrack( engine::getSong() ); } void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void ) { // get all windows opened in the workspace QList pl = engine::mainWindow()->workspace()-> subWindowList( QMdiArea::StackingOrder ); QListIterator w( pl ); w.toBack(); // now we travel through the window-list until we find an // instrument-track while( w.hasPrevious() ) { InstrumentTrackWindow * itw = dynamic_cast( w.previous()->widget() ); if( itw != NULL && itw->isHidden() == false ) { handleFile( m_contextMenuItem, itw->model() ); break; } } } void FileBrowserTreeWidget::updateDirectory(QTreeWidgetItem * item ) { Directory * dir = dynamic_cast( item ); if( dir != NULL ) { dir->update(); } } QPixmap * Directory::s_folderPixmap = NULL; QPixmap * Directory::s_folderOpenedPixmap = NULL; QPixmap * Directory::s_folderLockedPixmap = NULL; Directory::Directory(const QString & filename, const QString & path, const QString & filter ) : QTreeWidgetItem( QStringList( filename ), TypeDirectoryItem ), m_directories( path ), m_filter( filter ) { initPixmaps(); setChildIndicatorPolicy( QTreeWidgetItem::ShowIndicator ); if( !QDir( fullName() ).isReadable() ) { setIcon( 0, *s_folderLockedPixmap ); } else { setIcon( 0, *s_folderPixmap ); } } void Directory::initPixmaps( void ) { if( s_folderPixmap == NULL ) { s_folderPixmap = new QPixmap( embed::getIconPixmap( "folder" ) ); } if( s_folderOpenedPixmap == NULL ) { s_folderOpenedPixmap = new QPixmap( embed::getIconPixmap( "folder_opened" ) ); } if( s_folderLockedPixmap == NULL ) { s_folderLockedPixmap = new QPixmap( embed::getIconPixmap( "folder_locked" ) ); } } void Directory::update( void ) { if( !isExpanded() ) { setIcon( 0, *s_folderPixmap ); return; } setIcon( 0, *s_folderOpenedPixmap ); if( !childCount() ) { for( QStringList::iterator it = m_directories.begin(); it != m_directories.end(); ++it ) { int top_index = childCount(); if( addItems( fullName( *it ) ) && ( *it ).contains( configManager::inst()->dataDir() ) ) { QTreeWidgetItem * sep = new QTreeWidgetItem; sep->setText( 0, FileBrowserTreeWidget::tr( "--- Factory files ---" ) ); sep->setIcon( 0, embed::getIconPixmap( "factory_files" ) ); insertChild( top_index, sep ); } } } } bool Directory::addItems(const QString & path ) { QDir thisDir( path ); if( !thisDir.isReadable() ) { return false; } treeWidget()->setUpdatesEnabled( false ); bool added_something = false; QStringList files = thisDir.entryList( QDir::Dirs, QDir::Name ); for( QStringList::const_iterator it = files.constBegin(); it != files.constEnd(); ++it ) { QString cur_file = *it; if( cur_file[0] != '.' ) { bool orphan = true; for( int i = 0; i < childCount(); ++i ) { Directory * d = dynamic_cast( child( i ) ); if( d == NULL || cur_file < d->text( 0 ) ) { insertChild( i, new Directory( cur_file, path, m_filter ) ); orphan = false; break; } else if( cur_file == d->text( 0 ) ) { d->addDirectory( path ); orphan = false; break; } } if( orphan ) { addChild( new Directory( cur_file, path, m_filter ) ); } added_something = true; } } QList items; files = thisDir.entryList( QDir::Files, QDir::Name ); for( QStringList::const_iterator it = files.constBegin(); it != files.constEnd(); ++it ) { QString cur_file = *it; if( cur_file[0] != '.' && thisDir.match( m_filter, cur_file.toLower() ) ) { items << new FileItem( cur_file, path ); added_something = true; } } addChildren( items ); treeWidget()->setUpdatesEnabled( true ); return added_something; } QPixmap * FileItem::s_projectFilePixmap = NULL; QPixmap * FileItem::s_presetFilePixmap = NULL; QPixmap * FileItem::s_sampleFilePixmap = NULL; QPixmap * FileItem::s_soundfontFilePixmap = NULL; QPixmap * FileItem::s_vstPluginFilePixmap = NULL; QPixmap * FileItem::s_midiFilePixmap = NULL; QPixmap * FileItem::s_flpFilePixmap = NULL; QPixmap * FileItem::s_unknownFilePixmap = NULL; FileItem::FileItem(QTreeWidget * parent, const QString & name, const QString & path ) : QTreeWidgetItem( parent, QStringList( name) , TypeFileItem ), m_path( path ) { determineFileType(); initPixmaps(); } FileItem::FileItem(const QString & name, const QString & path ) : QTreeWidgetItem( QStringList( name ), TypeFileItem ), m_path( path ) { determineFileType(); initPixmaps(); } void FileItem::initPixmaps( void ) { if( s_projectFilePixmap == NULL ) { s_projectFilePixmap = new QPixmap( embed::getIconPixmap( "project_file", 16, 16 ) ); } if( s_presetFilePixmap == NULL ) { s_presetFilePixmap = new QPixmap( embed::getIconPixmap( "preset_file", 16, 16 ) ); } if( s_sampleFilePixmap == NULL ) { s_sampleFilePixmap = new QPixmap( embed::getIconPixmap( "sample_file", 16, 16 ) ); } if ( s_soundfontFilePixmap == NULL ) { s_soundfontFilePixmap = new QPixmap( embed::getIconPixmap( "soundfont_file", 16, 16 ) ); } if ( s_vstPluginFilePixmap == NULL ) { s_vstPluginFilePixmap = new QPixmap( embed::getIconPixmap( "vst_plugin_file", 16, 16 ) ); } if( s_midiFilePixmap == NULL ) { s_midiFilePixmap = new QPixmap( embed::getIconPixmap( "midi_file", 16, 16 ) ); } if( s_flpFilePixmap == NULL ) { s_flpFilePixmap = new QPixmap( embed::getIconPixmap( "midi_file", 16, 16 ) ); } if( s_unknownFilePixmap == NULL ) { s_unknownFilePixmap = new QPixmap( embed::getIconPixmap( "unknown_file" ) ); } switch( m_type ) { case ProjectFile: setIcon( 0, *s_projectFilePixmap ); break; case PresetFile: setIcon( 0, *s_presetFilePixmap ); break; case SoundFontFile: setIcon( 0, *s_soundfontFilePixmap ); break; case VstPluginFile: setIcon( 0, *s_vstPluginFilePixmap ); break; case SampleFile: case PatchFile: // TODO setIcon( 0, *s_sampleFilePixmap ); break; case MidiFile: setIcon( 0, *s_midiFilePixmap ); break; case FlpFile: setIcon( 0, *s_flpFilePixmap ); break; case UnknownFile: default: setIcon( 0, *s_unknownFilePixmap ); break; } } void FileItem::determineFileType( void ) { m_handling = NotSupported; const QString ext = extension(); if( ext == "mmp" || ext == "mpt" || ext == "mmpz" ) { m_type = ProjectFile; m_handling = LoadAsProject; } else if( ext == "xpf" || ext == "xml" ) { m_type = PresetFile; m_handling = LoadAsPreset; } else if( ext == "xiz" && engine::pluginFileHandling().contains( ext ) ) { m_type = PresetFile; m_handling = LoadByPlugin; } else if( ext == "sf2" ) { m_type = SoundFontFile; } else if( ext == "pat" ) { m_type = PatchFile; } else if( ext == "mid" ) { m_type = MidiFile; m_handling = ImportAsProject; } else if( ext == "flp" ) { m_type = FlpFile; m_handling = ImportAsProject; } else if( ext == "dll" ) { m_type = VstPluginFile; m_handling = LoadByPlugin; } else { m_type = UnknownFile; } if( m_handling == NotSupported && !ext.isEmpty() && engine::pluginFileHandling().contains( ext ) ) { m_handling = LoadByPlugin; // classify as sample if not classified by anything yet but can // be handled by a certain plugin if( m_type == UnknownFile ) { m_type = SampleFile; } } } QString FileItem::extension( void ) { return extension( fullName() ); } QString FileItem::extension(const QString & file ) { return QFileInfo( file ).suffix().toLower(); } #include "moc_FileBrowser.cxx" lmms-1.1.3/src/gui/Forms/000077500000000000000000000000001247673406200151405ustar00rootroot00000000000000lmms-1.1.3/src/gui/Forms/EffectSelectDialog.ui000066400000000000000000000052541247673406200211610ustar00rootroot00000000000000 EffectSelectDialog 0 0 585 547 Add effect true 10 500 250 Qt::ScrollBarAlwaysOff QAbstractItemView::SelectRows 0 200 16777215 210 Plugin description QFrame::NoFrame 0 0 497 109 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox rejected() EffectSelectDialog reject() 316 260 286 274 lmms-1.1.3/src/gui/FxMixerView.cpp000066400000000000000000000327701247673406200170040ustar00rootroot00000000000000/* * FxMixerView.cpp - effect-mixer-view for LMMS * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "FxMixerView.h" #include "knob.h" #include "engine.h" #include "embed.h" #include "MainWindow.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "song.h" #include "bb_track_container.h" FxMixerView::FxMixerView() : QWidget(), ModelView( NULL, this ), SerializingObjectHook() { FxMixer * m = engine::fxMixer(); m->setHook( this ); //QPalette pal = palette(); //pal.setColor( QPalette::Background, QColor( 72, 76, 88 ) ); //setPalette( pal ); setAutoFillBackground( true ); setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ); setWindowTitle( tr( "FX-Mixer" ) ); setWindowIcon( embed::getIconPixmap( "fx_mixer" ) ); // main-layout QHBoxLayout * ml = new QHBoxLayout; // Channel area m_channelAreaWidget = new QWidget; chLayout = new QHBoxLayout( m_channelAreaWidget ); chLayout->setSizeConstraint( QLayout::SetMinimumSize ); chLayout->setSpacing( 0 ); chLayout->setMargin( 0 ); m_channelAreaWidget->setLayout(chLayout); // create rack layout before creating the first channel m_racksWidget = new QWidget; m_racksLayout = new QStackedLayout( m_racksWidget ); m_racksLayout->setContentsMargins( 0, 0, 0, 0 ); m_racksWidget->setLayout( m_racksLayout ); // add master channel m_fxChannelViews.resize( m->numChannels() ); m_fxChannelViews[0] = new FxChannelView( this, this, 0 ); m_racksLayout->addWidget( m_fxChannelViews[0]->m_rackView ); FxChannelView * masterView = m_fxChannelViews[0]; ml->addWidget( masterView->m_fxLine, 0, Qt::AlignTop ); QSize fxLineSize = masterView->m_fxLine->size(); // add mixer channels for( int i = 1; i < m_fxChannelViews.size(); ++i ) { m_fxChannelViews[i] = new FxChannelView(m_channelAreaWidget, this, i); chLayout->addWidget( m_fxChannelViews[i]->m_fxLine ); } // add the scrolling section to the main layout // class solely for scroll area to pass key presses down class ChannelArea : public QScrollArea { public: ChannelArea( QWidget * parent, FxMixerView * mv ) : QScrollArea( parent ), m_mv( mv ) {} ~ChannelArea() {} virtual void keyPressEvent( QKeyEvent * e ) { m_mv->keyPressEvent( e ); } private: FxMixerView * m_mv; }; channelArea = new ChannelArea( this, this ); channelArea->setWidget( m_channelAreaWidget ); channelArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); channelArea->setFrameStyle( QFrame::NoFrame ); channelArea->setMinimumWidth( fxLineSize.width() * 6 ); channelArea->setFixedHeight( fxLineSize.height() + style()->pixelMetric( QStyle::PM_ScrollBarExtent ) ); ml->addWidget( channelArea, 1, Qt::AlignTop ); // show the add new effect channel button QPushButton * newChannelBtn = new QPushButton( embed::getIconPixmap( "new_channel" ), QString::null, this ); newChannelBtn->setObjectName( "newChannelBtn" ); newChannelBtn->setFixedSize( fxLineSize ); connect( newChannelBtn, SIGNAL( clicked() ), this, SLOT( addNewChannel() ) ); ml->addWidget( newChannelBtn, 0, Qt::AlignTop ); // add the stacked layout for the effect racks of fx channels ml->addWidget( m_racksWidget, 0, Qt::AlignTop | Qt::AlignRight ); setCurrentFxLine( m_fxChannelViews[0]->m_fxLine ); setLayout( ml ); updateGeometry(); // timer for updating faders connect( engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateFaders() ) ); // add ourself to workspace QMdiSubWindow * subWin = engine::mainWindow()->workspace()->addSubWindow( this ); Qt::WindowFlags flags = subWin->windowFlags(); flags &= ~Qt::WindowMaximizeButtonHint; subWin->setWindowFlags( flags ); layout()->setSizeConstraint( QLayout::SetMinimumSize ); subWin->layout()->setSizeConstraint( QLayout::SetMinAndMaxSize ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->move( 5, 310 ); // we want to receive dataChanged-signals in order to update setModel( m ); } FxMixerView::~FxMixerView() { for (int i=0; icreateChannel(); m_fxChannelViews.push_back(new FxChannelView(m_channelAreaWidget, this, newChannelIndex)); chLayout->addWidget( m_fxChannelViews[newChannelIndex]->m_fxLine ); m_racksLayout->addWidget( m_fxChannelViews[newChannelIndex]->m_rackView ); updateFxLine(newChannelIndex); updateMaxChannelSelector(); } void FxMixerView::refreshDisplay() { // delete all views and re-add them for( int i = 1; iremoveWidget(m_fxChannelViews[i]->m_fxLine); m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView ); delete m_fxChannelViews[i]->m_fader; delete m_fxChannelViews[i]->m_muteBtn; delete m_fxChannelViews[i]->m_fxLine; delete m_fxChannelViews[i]->m_rackView; delete m_fxChannelViews[i]; } m_channelAreaWidget->adjustSize(); // re-add the views m_fxChannelViews.resize(engine::fxMixer()->numChannels()); for( int i = 1; i < m_fxChannelViews.size(); ++i ) { m_fxChannelViews[i] = new FxChannelView(m_channelAreaWidget, this, i); chLayout->addWidget(m_fxChannelViews[i]->m_fxLine); m_racksLayout->addWidget( m_fxChannelViews[i]->m_rackView ); } // set selected fx line to 0 setCurrentFxLine( 0 ); // update all fx lines for( int i = 0; i < m_fxChannelViews.size(); ++i ) { updateFxLine( i ); } updateMaxChannelSelector(); } // update the and max. channel number for every instrument void FxMixerView::updateMaxChannelSelector() { QVector songTrackList = engine::getSong()->tracks(); QVector bbTrackList = engine::getBBTrackContainer()->tracks(); QVector trackLists[] = {songTrackList, bbTrackList}; for(int tl=0; tl<2; ++tl) { QVector trackList = trackLists[tl]; for(int i=0; itype() == track::InstrumentTrack ) { InstrumentTrack * inst = (InstrumentTrack *) trackList[i]; inst->effectChannelModel()->setRange(0, m_fxChannelViews.size()-1,1); } } } } void FxMixerView::saveSettings( QDomDocument & _doc, QDomElement & _this ) { MainWindow::saveWidgetState( this, _this ); } void FxMixerView::loadSettings( const QDomElement & _this ) { MainWindow::restoreWidgetState( this, _this ); } FxMixerView::FxChannelView::FxChannelView(QWidget * _parent, FxMixerView * _mv, int _chIndex ) { m_fxLine = new FxLine(_parent, _mv, _chIndex); FxMixer * m = engine::fxMixer(); m_fader = new fader( &m->effectChannel(_chIndex)->m_volumeModel, tr( "FX Fader %1" ).arg( _chIndex ), m_fxLine ); m_fader->move( 16-m_fader->width()/2, m_fxLine->height()- m_fader->height()-5 ); m_muteBtn = new pixmapButton( m_fxLine, tr( "Mute" ) ); m_muteBtn->setModel( &m->effectChannel(_chIndex)->m_muteModel ); m_muteBtn->setActiveGraphic( embed::getIconPixmap( "led_off" ) ); m_muteBtn->setInactiveGraphic( embed::getIconPixmap( "led_green" ) ); m_muteBtn->setCheckable( true ); m_muteBtn->move( 9, m_fader->y()-16); toolTip::add( m_muteBtn, tr( "Mute this FX channel" ) ); // Create EffectRack for the channel m_rackView = new EffectRackView( &m->effectChannel(_chIndex)->m_fxChain, _mv->m_racksWidget ); m_rackView->setFixedSize( 245, FxLine::FxLineHeight ); } void FxMixerView::setCurrentFxLine( FxLine * _line ) { // select m_currentFxLine = _line; m_racksLayout->setCurrentWidget( m_fxChannelViews[ _line->channelIndex() ]->m_rackView ); // set up send knob for(int i = 0; i < m_fxChannelViews.size(); ++i) { updateFxLine(i); } } void FxMixerView::updateFxLine(int index) { FxMixer * mix = engine::fxMixer(); // does current channel send to this channel? int selIndex = m_currentFxLine->channelIndex(); FxLine * thisLine = m_fxChannelViews[index]->m_fxLine; FloatModel * sendModel = mix->channelSendModel(selIndex, index); if( sendModel == NULL ) { // does not send, hide send knob thisLine->m_sendKnob->setVisible(false); } else { // it does send, show knob and connect thisLine->m_sendKnob->setVisible(true); thisLine->m_sendKnob->setModel(sendModel); } // disable the send button if it would cause an infinite loop thisLine->m_sendBtn->setVisible(! mix->isInfiniteLoop(selIndex, index)); thisLine->m_sendBtn->updateLightStatus(); thisLine->update(); } void FxMixerView::deleteChannel(int index) { // can't delete master if( index == 0 ) return; // remember selected line int selLine = m_currentFxLine->channelIndex(); // delete the real channel engine::fxMixer()->deleteChannel(index); // delete the view chLayout->removeWidget(m_fxChannelViews[index]->m_fxLine); m_racksLayout->removeWidget( m_fxChannelViews[index]->m_rackView ); delete m_fxChannelViews[index]->m_fader; delete m_fxChannelViews[index]->m_muteBtn; delete m_fxChannelViews[index]->m_fxLine; delete m_fxChannelViews[index]->m_rackView; delete m_fxChannelViews[index]; m_channelAreaWidget->adjustSize(); // make sure every channel knows what index it is for(int i=0; i index ) { m_fxChannelViews[i]->m_fxLine->setChannelIndex(i-1); } } m_fxChannelViews.remove(index); // select the next channel if( selLine >= m_fxChannelViews.size() ) { selLine = m_fxChannelViews.size()-1; } setCurrentFxLine(selLine); updateMaxChannelSelector(); } void FxMixerView::moveChannelLeft(int index) { // can't move master or first channel left or last channel right if( index <= 1 || index >= m_fxChannelViews.size() ) return; int selIndex = m_currentFxLine->channelIndex(); FxMixer * mix = engine::fxMixer(); mix->moveChannelLeft(index); // refresh the two mixer views for( int i = index-1; i <= index; ++i ) { // delete the mixer view int replaceIndex = chLayout->indexOf(m_fxChannelViews[i]->m_fxLine); chLayout->removeWidget(m_fxChannelViews[i]->m_fxLine); m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView ); delete m_fxChannelViews[i]->m_fader; delete m_fxChannelViews[i]->m_muteBtn; delete m_fxChannelViews[i]; // add it again m_fxChannelViews[i] = new FxChannelView( m_channelAreaWidget, this, i ); chLayout->insertWidget( replaceIndex, m_fxChannelViews[i]->m_fxLine ); m_racksLayout->insertWidget( replaceIndex, m_fxChannelViews[i]->m_rackView ); } // keep selected channel if( selIndex == index ) { selIndex = index-1; } else if( selIndex == index - 1 ) { selIndex = index; } setCurrentFxLine(selIndex); } void FxMixerView::moveChannelRight(int index) { moveChannelLeft(index+1); } void FxMixerView::keyPressEvent(QKeyEvent * e) { switch(e->key()) { case Qt::Key_Delete: deleteChannel(m_currentFxLine->channelIndex()); break; case Qt::Key_Left: if( e->modifiers() & Qt::AltModifier ) { moveChannelLeft( m_currentFxLine->channelIndex() ); } else { // select channel to the left setCurrentFxLine( m_currentFxLine->channelIndex()-1 ); } break; case Qt::Key_Right: if( e->modifiers() & Qt::AltModifier ) { moveChannelRight( m_currentFxLine->channelIndex() ); } else { // select channel to the right setCurrentFxLine( m_currentFxLine->channelIndex()+1 ); } break; } } void FxMixerView::setCurrentFxLine( int _line ) { if( _line >= 0 && _line < m_fxChannelViews.size() ) { setCurrentFxLine( m_fxChannelViews[_line]->m_fxLine ); } } void FxMixerView::clear() { engine::fxMixer()->clear(); refreshDisplay(); } void FxMixerView::updateFaders() { FxMixer * m = engine::fxMixer(); // apply master gain m->m_fxChannels[0]->m_peakLeft *= engine::mixer()->masterGain(); m->m_fxChannels[0]->m_peakRight *= engine::mixer()->masterGain(); for( int i = 0; i < m_fxChannelViews.size(); ++i ) { const float opl = m_fxChannelViews[i]->m_fader->getPeak_L(); const float opr = m_fxChannelViews[i]->m_fader->getPeak_R(); const float fall_off = 1.2; if( m->m_fxChannels[i]->m_peakLeft > opl ) { m_fxChannelViews[i]->m_fader->setPeak_L( m->m_fxChannels[i]->m_peakLeft ); m->m_fxChannels[i]->m_peakLeft = 0; } else { m_fxChannelViews[i]->m_fader->setPeak_L( opl/fall_off ); } if( m->m_fxChannels[i]->m_peakRight > opr ) { m_fxChannelViews[i]->m_fader->setPeak_R( m->m_fxChannels[i]->m_peakRight ); m->m_fxChannels[i]->m_peakRight = 0; } else { m_fxChannelViews[i]->m_fader->setPeak_R( opr/fall_off ); } } } #include "moc_FxMixerView.cxx" lmms-1.1.3/src/gui/InstrumentView.cpp000066400000000000000000000036121247673406200175630ustar00rootroot00000000000000/* * InstrumentView.cpp - base-class for views of all Instruments * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "InstrumentView.h" #include "embed.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "string_pair_drag.h" InstrumentView::InstrumentView( Instrument * _Instrument, QWidget * _parent ) : PluginView( _Instrument, _parent ) { setModel( _Instrument ); setFixedSize( 250, 250 ); setAttribute( Qt::WA_DeleteOnClose, TRUE ); } InstrumentView::~InstrumentView() { if( instrumentTrackWindow() ) { instrumentTrackWindow()->m_instrumentView = NULL; } } void InstrumentView::setModel( Model * _model, bool ) { if( dynamic_cast( _model ) != NULL ) { ModelView::setModel( _model ); instrumentTrackWindow()->setWindowIcon( model()->descriptor()->logo->pixmap() ); connect( model(), SIGNAL( destroyed( QObject * ) ), this, SLOT( close() ) ); } } InstrumentTrackWindow * InstrumentView::instrumentTrackWindow( void ) { return( dynamic_cast( parentWidget()->parentWidget() ) ); } lmms-1.1.3/src/gui/LfoControllerDialog.cpp000066400000000000000000000245621247673406200204730ustar00rootroot00000000000000/* * LfoControllerDialog.cpp - per-controller-specific view for changing a * controller's settings * * Copyright (c) 2008-2009 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include "caption_menu.h" #include "gui_templates.h" #include "embed.h" #include "engine.h" #include "led_checkbox.h" #include "MainWindow.h" #include "tooltip.h" #include "LfoController.h" #include "ControllerDialog.h" #include "knob.h" #include "TempoSyncKnob.h" #include "pixmap_button.h" const int CD_ENV_KNOBS_LBL_Y = 20; const int CD_KNOB_X_SPACING = 32; const int CD_LFO_SHAPES_X = 6; const int CD_LFO_SHAPES_Y = 36; const int CD_LFO_GRAPH_X = 6; const int CD_LFO_GRAPH_Y = CD_ENV_KNOBS_LBL_Y+15; const int CD_LFO_CD_KNOB_Y = CD_LFO_GRAPH_Y-2; const int CD_LFO_BASE_CD_KNOB_X = CD_LFO_SHAPES_X + 64; const int CD_LFO_SPEED_CD_KNOB_X = CD_LFO_BASE_CD_KNOB_X+CD_KNOB_X_SPACING; const int CD_LFO_AMOUNT_CD_KNOB_X = CD_LFO_SPEED_CD_KNOB_X+CD_KNOB_X_SPACING; const int CD_LFO_PHASE_CD_KNOB_X = CD_LFO_AMOUNT_CD_KNOB_X+CD_KNOB_X_SPACING; const int CD_LFO_MULTIPLIER_X = CD_LFO_PHASE_CD_KNOB_X+CD_KNOB_X_SPACING; LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent ) : ControllerDialog( _model, _parent ) { QString title = tr( "LFO" ); title.append( " (" ); title.append( _model->name() ); title.append( ")" ); setWindowTitle( title ); setWindowIcon( embed::getIconPixmap( "controller" ) ); setFixedSize( 240, 80 ); toolTip::add( this, tr( "LFO Controller" ) ); m_baseKnob = new knob( knobBright_26, this ); m_baseKnob->setLabel( tr( "BASE" ) ); m_baseKnob->move( CD_LFO_BASE_CD_KNOB_X, CD_LFO_CD_KNOB_Y ); m_baseKnob->setHintText( tr( "Base amount:" ) + " ", "" ); m_baseKnob->setWhatsThis( tr("todo") ); m_speedKnob = new TempoSyncKnob( knobBright_26, this ); m_speedKnob->setLabel( tr( "SPD" ) ); m_speedKnob->move( CD_LFO_SPEED_CD_KNOB_X, CD_LFO_CD_KNOB_Y ); m_speedKnob->setHintText( tr( "LFO-speed:" ) + " ", "" ); m_speedKnob->setWhatsThis( tr( "Use this knob for setting speed of the LFO. The " "bigger this value the faster the LFO oscillates and " "the faster the effect." ) ); m_amountKnob = new knob( knobBright_26, this ); m_amountKnob->setLabel( tr( "AMT" ) ); m_amountKnob->move( CD_LFO_AMOUNT_CD_KNOB_X, CD_LFO_CD_KNOB_Y ); m_amountKnob->setHintText( tr( "Modulation amount:" ) + " ", "" ); m_amountKnob->setWhatsThis( tr( "Use this knob for setting modulation amount of the " "LFO. The bigger this value, the more the connected " "control (e.g. volume or cutoff-frequency) will " "be influenced by the LFO." ) ); m_phaseKnob = new knob( knobBright_26, this ); m_phaseKnob->setLabel( tr( "PHS" ) ); m_phaseKnob->move( CD_LFO_PHASE_CD_KNOB_X, CD_LFO_CD_KNOB_Y ); m_phaseKnob->setHintText( tr( "Phase offset:" ) + " ", "" + tr( "degrees" ) ); m_phaseKnob->setWhatsThis( tr( "With this knob you can set the phase offset of " "the LFO. That means you can move the " "point within an oscillation where the " "oscillator begins to oscillate. For example " "if you have a sine-wave and have a phase-" "offset of 180 degrees the wave will first go " "down. It's the same with a square-wave." ) ); pixmapButton * sin_wave_btn = new pixmapButton( this, NULL ); sin_wave_btn->move( CD_LFO_SHAPES_X, CD_LFO_SHAPES_Y ); sin_wave_btn->setActiveGraphic( embed::getIconPixmap( "sin_wave_active" ) ); sin_wave_btn->setInactiveGraphic( embed::getIconPixmap( "sin_wave_inactive" ) ); toolTip::add( sin_wave_btn, tr( "Click here for a sine-wave." ) ); pixmapButton * triangle_wave_btn = new pixmapButton( this, NULL ); triangle_wave_btn->move( CD_LFO_SHAPES_X + 15, CD_LFO_SHAPES_Y ); triangle_wave_btn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); triangle_wave_btn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); toolTip::add( triangle_wave_btn, tr( "Click here for a triangle-wave." ) ); pixmapButton * saw_wave_btn = new pixmapButton( this, NULL ); saw_wave_btn->move( CD_LFO_SHAPES_X + 30, CD_LFO_SHAPES_Y ); saw_wave_btn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); saw_wave_btn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); toolTip::add( saw_wave_btn, tr( "Click here for a saw-wave." ) ); pixmapButton * sqr_wave_btn = new pixmapButton( this, NULL ); sqr_wave_btn->move( CD_LFO_SHAPES_X + 45, CD_LFO_SHAPES_Y ); sqr_wave_btn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); sqr_wave_btn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); toolTip::add( sqr_wave_btn, tr( "Click here for a square-wave." ) ); pixmapButton * moog_saw_wave_btn = new pixmapButton( this, NULL ); moog_saw_wave_btn->move( CD_LFO_SHAPES_X, CD_LFO_SHAPES_Y + 15 ); moog_saw_wave_btn->setActiveGraphic( embed::getIconPixmap( "moog_saw_wave_active" ) ); moog_saw_wave_btn->setInactiveGraphic( embed::getIconPixmap( "moog_saw_wave_inactive" ) ); toolTip::add( moog_saw_wave_btn, tr( "Click here for a moog saw-wave." ) ); pixmapButton * exp_wave_btn = new pixmapButton( this, NULL ); exp_wave_btn->move( CD_LFO_SHAPES_X + 15, CD_LFO_SHAPES_Y + 15 ); exp_wave_btn->setActiveGraphic( embed::getIconPixmap( "exp_wave_active" ) ); exp_wave_btn->setInactiveGraphic( embed::getIconPixmap( "exp_wave_inactive" ) ); toolTip::add( exp_wave_btn, tr( "Click here for an exponential wave." ) ); pixmapButton * white_noise_btn = new pixmapButton( this, NULL ); white_noise_btn->move( CD_LFO_SHAPES_X + 30, CD_LFO_SHAPES_Y + 15 ); white_noise_btn->setActiveGraphic( embed::getIconPixmap( "white_noise_wave_active" ) ); white_noise_btn->setInactiveGraphic( embed::getIconPixmap( "white_noise_wave_inactive" ) ); toolTip::add( white_noise_btn, tr( "Click here for white-noise." ) ); m_userWaveBtn = new pixmapButton( this, NULL ); m_userWaveBtn->move( CD_LFO_SHAPES_X + 45, CD_LFO_SHAPES_Y + 15 ); m_userWaveBtn->setActiveGraphic( embed::getIconPixmap( "usr_wave_active" ) ); m_userWaveBtn->setInactiveGraphic( embed::getIconPixmap( "usr_wave_inactive" ) ); connect( m_userWaveBtn, SIGNAL( doubleClicked() ), this, SLOT( askUserDefWave() ) ); toolTip::add( m_userWaveBtn, tr( "Click here for a user-defined shape.\nDouble click to pick a file." ) ); m_waveBtnGrp = new automatableButtonGroup( this ); m_waveBtnGrp->addButton( sin_wave_btn ); m_waveBtnGrp->addButton( triangle_wave_btn ); m_waveBtnGrp->addButton( saw_wave_btn ); m_waveBtnGrp->addButton( sqr_wave_btn ); m_waveBtnGrp->addButton( moog_saw_wave_btn ); m_waveBtnGrp->addButton( exp_wave_btn ); m_waveBtnGrp->addButton( white_noise_btn ); m_waveBtnGrp->addButton( m_userWaveBtn ); pixmapButton * x1 = new pixmapButton( this, NULL ); x1->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y ); x1->setActiveGraphic( embed::getIconPixmap( "lfo_x1_active" ) ); x1->setInactiveGraphic( embed::getIconPixmap( "lfo_x1_inactive" ) ); pixmapButton * x100 = new pixmapButton( this, NULL ); x100->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y - 15 ); x100->setActiveGraphic( embed::getIconPixmap( "lfo_x100_active" ) ); x100->setInactiveGraphic( embed::getIconPixmap( "lfo_x100_inactive" ) ); pixmapButton * d100 = new pixmapButton( this, NULL ); d100->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y + 15 ); d100->setActiveGraphic( embed::getIconPixmap( "lfo_d100_active" ) ); d100->setInactiveGraphic( embed::getIconPixmap( "lfo_d100_inactive" ) ); m_multiplierBtnGrp = new automatableButtonGroup( this ); m_multiplierBtnGrp->addButton( x1 ); m_multiplierBtnGrp->addButton( x100 ); m_multiplierBtnGrp->addButton( d100 ); setModel( _model ); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), embed::getIconPixmap( "lfo_controller_artwork" ) ); setPalette( pal ); } LfoControllerDialog::~LfoControllerDialog() { m_userWaveBtn->disconnect( this ); //delete m_subWindow; } void LfoControllerDialog::askUserDefWave() { SampleBuffer * sampleBuffer = dynamic_cast(this->model())-> m_userDefSampleBuffer; QString fileName = sampleBuffer->openAndSetWaveformFile(); if( fileName.isEmpty() == false ) { // TODO: toolTip::add( m_userWaveBtn, sampleBuffer->audioFile() ); } } void LfoControllerDialog::contextMenuEvent( QContextMenuEvent * ) { /* QPointer contextMenu = new captionMenu( getEffect()->publicName() ); contextMenu->addAction( embed::getIconPixmap( "arp_up_on" ), tr( "Move &up" ), this, SLOT( moveUp() ) ); contextMenu->addAction( embed::getIconPixmap( "arp_down_on" ), tr( "Move &down" ), this, SLOT( moveDown() ) ); contextMenu->addSeparator(); contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "&Remove this plugin" ), this, SLOT( deletePlugin() ) ); contextMenu->addSeparator(); contextMenu->addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), this, SLOT( displayHelp() ) ); contextMenu->exec( QCursor::pos() ); delete contextMenu; */ } /* void lfoControllerDialog::paintEvent( QPaintEvent * _pe ) { QWidget::paintEvent( _pe ); } */ void LfoControllerDialog::modelChanged() { m_lfo = castModel(); m_baseKnob->setModel( &m_lfo->m_baseModel ); m_speedKnob->setModel( &m_lfo->m_speedModel ); m_amountKnob->setModel( &m_lfo->m_amountModel ); m_phaseKnob->setModel( &m_lfo->m_phaseModel ); m_waveBtnGrp->setModel( &m_lfo->m_waveModel ); m_multiplierBtnGrp->setModel( &m_lfo->m_multiplierModel ); } lmms-1.1.3/src/gui/LmmsPalette.cpp000066400000000000000000000060511247673406200170070ustar00rootroot00000000000000/* * LmmsPalette.cpp - dummy class for fetching palette qproperties from CSS * * * Copyright (c) 2007-2014 Vesa Kivimäki * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "LmmsPalette.h" #include "LmmsStyle.h" LmmsPalette::LmmsPalette( QWidget * parent, QStyle * stylearg ) : QWidget( parent ), /* sane defaults in case fetching from stylesheet fails*/ m_background( 91, 101, 113 ), m_windowText( 240, 240, 240 ), m_base( 128, 128, 128 ), m_text( 224, 224, 224 ), m_button( 201, 201, 201 ), m_shadow( 0,0,0 ), m_buttonText( 0,0,0 ), m_brightText( 74, 253, 133 ), m_highlight( 100, 100, 100 ), m_highlightedText( 255, 255, 255 ), m_toolTipText( 0, 0, 0 ), m_toolTipBase( 128, 128, 128 ) { setStyle( stylearg ); stylearg->polish( this ); ensurePolished(); } LmmsPalette::~LmmsPalette() { } #define ACCESSMET( read, write ) \ QColor LmmsPalette:: read () const \ { return m_##read ; } \ void LmmsPalette:: write ( const QColor & c ) \ { m_##read = QColor( c ); } ACCESSMET( background, setBackground ) ACCESSMET( windowText, setWindowText ) ACCESSMET( base, setBase ) ACCESSMET( text, setText ) ACCESSMET( button, setButton ) ACCESSMET( shadow, setShadow ) ACCESSMET( buttonText, setButtonText ) ACCESSMET( brightText, setBrightText ) ACCESSMET( highlight, setHighlight ) ACCESSMET( highlightedText, setHighlightedText ) ACCESSMET( toolTipText, setToolTipText ) ACCESSMET( toolTipBase, setToolTipBase ) QPalette LmmsPalette::palette() const { QPalette pal = QApplication::style()->standardPalette(); pal.setColor( QPalette::Background, background() ); pal.setColor( QPalette::WindowText, windowText() ); pal.setColor( QPalette::Base, base() ); pal.setColor( QPalette::ButtonText, buttonText() ); pal.setColor( QPalette::BrightText, brightText() ); pal.setColor( QPalette::Text, text() ); pal.setColor( QPalette::Button, button() ); pal.setColor( QPalette::Shadow, shadow() ); pal.setColor( QPalette::Highlight, highlight() ); pal.setColor( QPalette::HighlightedText, highlightedText() ); pal.setBrush( QPalette::ToolTipText, QBrush( toolTipText() ) ); pal.setBrush( QPalette::ToolTipBase, QBrush( toolTipBase() ) ); return pal; } #include "moc_LmmsPalette.cxx" lmms-1.1.3/src/gui/LmmsStyle.cpp000066400000000000000000000523741247673406200165220ustar00rootroot00000000000000/* * LmmsStyle.cpp - the graphical style used by LMMS to create a consistent * interface * * Copyright (c) 2007-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "LmmsStyle.h" #include "LmmsPalette.h" const int BUTTON_LENGTH = 24; static const char * const s_scrollbarArrowUpXpm[] = { "7 6 8 1", " g None", ". g #000000", "+ g #101010", "@ g #A0A0A0", "# g #C0C0C0", "$ g #FFFFFF", "% g #808080", "& g #202020", "..+@+..", "..#$#..", ".%$$$%.", "&$$$$$&", "@$$$$$@", "@#####@"}; static const char * const s_scrollbarArrowRightXpm[] = { "6 7 8 1", " c None", ". c #A0A0A0", "+ c #202020", "@ c #000000", "# c #C0C0C0", "$ c #FFFFFF", "% c #808080", "& c #101010", "..+@@@", "#$$%@@", "#$$$#&", "#$$$$.", "#$$$#&", "#$$%@@", "..+@@@"}; static const char * const s_scrollbarArrowDownXpm[] = { "7 6 8 1", " g None", ". g #000000", "+ g #101010", "@ g #A0A0A0", "# g #C0C0C0", "$ g #FFFFFF", "% g #808080", "& g #202020", "@#####@", "@$$$$$@", "&$$$$$&", ".%$$$%.", "..#$#..", "..+@+.."}; static const char * const s_scrollbarArrowLeftXpm[] = { "6 7 8 1", " g None", ". g #000000", "+ g #202020", "@ g #A0A0A0", "# g #808080", "$ g #FFFFFF", "% g #C0C0C0", "& g #101010", "...+@@", "..#$$%", "&%$$$%", "@$$$$%", "&%$$$%", "..#$$%", "...+@@"}; QPalette * LmmsStyle::s_palette = NULL; QLinearGradient getGradient( const QColor & _col, const QRectF & _rect ) { QLinearGradient g( _rect.topLeft(), _rect.bottomLeft() ); qreal hue = _col.hueF(); qreal value = _col.valueF(); qreal saturation = _col.saturationF(); QColor c = _col; c.setHsvF( hue, 0.42 * saturation, 0.98 * value ); // TODO: pattern: 1.08 g.setColorAt( 0, c ); c.setHsvF( hue, 0.58 * saturation, 0.95 * value ); // TODO: pattern: 1.05 g.setColorAt( 0.25, c ); c.setHsvF( hue, 0.70 * saturation, 0.93 * value ); // TODO: pattern: 1.03 g.setColorAt( 0.5, c ); c.setHsvF( hue, 0.95 * saturation, 0.9 * value ); g.setColorAt( 0.501, c ); c.setHsvF( hue * 0.95, 0.95 * saturation, 0.95 * value ); g.setColorAt( 0.75, c ); c.setHsvF( hue * 0.90, 0.95 * saturation, 1 * value ); g.setColorAt( 1.0, c ); return g; } QLinearGradient darken( const QLinearGradient & _gradient ) { QGradientStops stops = _gradient.stops(); for (int i = 0; i < stops.size(); ++i) { QColor color = stops.at(i).second; stops[i].second = color.lighter(133); } QLinearGradient g = _gradient; g.setStops(stops); return g; } void drawPath( QPainter *p, const QPainterPath &path, const QColor &col, const QColor &borderCol, bool dark = false ) { const QRectF pathRect = path.boundingRect(); const QLinearGradient baseGradient = getGradient(col, pathRect); const QLinearGradient darkGradient = darken(baseGradient); p->setOpacity(0.25); // glow if (dark) p->strokePath(path, QPen(darkGradient, 4)); else p->strokePath(path, QPen(baseGradient, 4)); p->setOpacity(1.0); // fill if (dark) p->fillPath(path, darkGradient); else p->fillPath(path, baseGradient); // TODO: Remove?? /* QLinearGradient g(pathRect.topLeft(), pathRect.topRight()); g.setCoordinateMode(QGradient::ObjectBoundingMode); p->setOpacity(0.2); p->fillPath(path, g);*/ // END: Remove?? p->setOpacity(0.5); // highlight (bb) if (dark) p->strokePath(path, QPen(borderCol.lighter(133), 2)); else p->strokePath(path, QPen(borderCol, 2)); } LmmsStyle::LmmsStyle() : QPlastiqueStyle() { QFile file( "resources:style.css" ); file.open( QIODevice::ReadOnly ); qApp->setStyleSheet( file.readAll() ); if( s_palette != NULL ) { qApp->setPalette( *s_palette ); } } QPalette LmmsStyle::standardPalette( void ) const { if( s_palette != NULL) { return * s_palette; } QPalette pal = QPlastiqueStyle::standardPalette(); return( pal ); } /* void LmmsStyle::drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const { switch( element ) { case CE_ScrollBarAddLine: if( const QStyleOptionSlider * scrollBar = qstyleoption_cast( option ) ) { bool horizontal = scrollBar->orientation == Qt::Horizontal; bool isEnabled = scrollBar->state & State_Enabled; bool sunken = scrollBar->state & State_Sunken; bool hover = scrollBar->state & State_MouseOver; QString pixmapName = getCacheKey( QLatin1String( "ScrollBarAddLine" ), option, option->rect.size() ); QPixmap cache; if( !QPixmapCache::find( pixmapName, cache ) ) { cache = QPixmap( option->rect.size() ); QPainter cachePainter( &cache ); cache.fill( QColor( 48, 48, 48 ) ); QColor sliderColor; QColor blurColor; hoverColors(sunken, hover, scrollBar->activeSubControls & SC_ScrollBarAddLine && isEnabled, sliderColor, blurColor); int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget ); cachePainter.setPen( QPen( sliderColor, 0 ) ); if( horizontal ) { int r = cache.rect().right(); cachePainter.fillRect(0, 2, BUTTON_LENGTH-2, scrollBarExtent-4, sliderColor); cachePainter.drawLine( r, 4, r, scrollBarExtent - 5 ); cachePainter.drawLine( r - 1, 3, r - 1, scrollBarExtent - 4 ); const QPointF points[4] = { QPoint( r, 3 ), QPoint( r, scrollBarExtent - 4 ), QPoint( r - 1, 2 ), QPoint( r - 1, scrollBarExtent - 3 )}; cachePainter.setPen( QPen( blurColor, 0 ) ); cachePainter.drawPoints( points, 4 ); QImage arrow = colorizeXpm( s_scrollbarArrowRightXpm, option->palette.foreground().color() ); if( ( scrollBar->activeSubControls & SC_ScrollBarAddLine ) && sunken ) { cachePainter.translate( 1, 1 ); } cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow ); } else { int b = cache.rect().bottom(); cachePainter.fillRect( 2, 0, scrollBarExtent - 4, BUTTON_LENGTH - 2, sliderColor ); cachePainter.drawLine( 4, b, scrollBarExtent - 5, b ); cachePainter.drawLine( 3, b - 1, scrollBarExtent - 4, b - 1 ); const QPointF points[4] = { QPoint( 3, b ), QPoint( scrollBarExtent - 4, b ), QPoint( 2, b - 1 ), QPoint( scrollBarExtent - 3, b - 1 )}; cachePainter.setPen( QPen( blurColor, 0 ) ); cachePainter.drawPoints( points, 4 ); QImage arrow = colorizeXpm( s_scrollbarArrowDownXpm, option->palette.foreground().color() ); if( ( scrollBar->activeSubControls & SC_ScrollBarAddLine ) && sunken ) { cachePainter.translate( 1, 1 ); } cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow ); } QPixmapCache::insert( pixmapName, cache ); } painter->drawPixmap( option->rect.topLeft(), cache ); } break; case CE_ScrollBarSubLine: if(const QStyleOptionSlider *scrollBar = qstyleoption_cast( option ) ) { bool horizontal = scrollBar->orientation == Qt::Horizontal; bool isEnabled = scrollBar->state & State_Enabled; bool sunken = scrollBar->state & State_Sunken; bool hover = scrollBar->state & State_MouseOver; QString pixmapName = getCacheKey( QLatin1String( "ScrollBarSubLine" ), option, option->rect.size() ); QPixmap cache; if( !QPixmapCache::find( pixmapName, cache ) ) { cache = QPixmap( option->rect.size() ); QPainter cachePainter( &cache ); cache.fill( QColor( 48, 48, 48 ) ); // TODO: Fill with CSS background QColor sliderColor; QColor blurColor; hoverColors(sunken, hover, scrollBar->activeSubControls & SC_ScrollBarSubLine && isEnabled, sliderColor, blurColor); int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget ); cachePainter.setPen( QPen( sliderColor, 0 ) ); if( horizontal ) { cachePainter.fillRect( 2, 2, BUTTON_LENGTH - 2, scrollBarExtent - 4, sliderColor ); cachePainter.drawLine( 0, 4, 0, scrollBarExtent - 5 ); cachePainter.drawLine( 1, 3, 1, scrollBarExtent - 4 ); const QPointF points[4] = { QPoint( 0, 3 ), QPoint( 0, scrollBarExtent - 4 ), QPoint( 1, 2 ), QPoint( 1, scrollBarExtent - 3 )}; cachePainter.setPen( QPen( blurColor, 0 ) ); cachePainter.drawPoints( points, 4 ); QImage arrow = colorizeXpm( s_scrollbarArrowLeftXpm, option->palette.foreground().color() ); if( ( scrollBar->activeSubControls & SC_ScrollBarSubLine ) && sunken ) { cachePainter.translate( 1, 1 ); } cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow ); } else { cachePainter.fillRect( 2, 2, scrollBarExtent - 4, BUTTON_LENGTH - 2, sliderColor ); cachePainter.drawLine( 4, 0, scrollBarExtent - 5, 0 ); cachePainter.drawLine( 3, 1, scrollBarExtent - 4, 1 ); const QPointF points[4] = { QPoint( 3, 0 ), QPoint( scrollBarExtent - 4, 0 ), QPoint( 2, 1 ), QPoint( scrollBarExtent - 3, 1 )}; cachePainter.setPen( QPen( blurColor, 0 ) ); cachePainter.drawPoints( points, 4 ); QImage arrow = colorizeXpm( s_scrollbarArrowUpXpm, option->palette.foreground().color() ); if( ( scrollBar->activeSubControls & SC_ScrollBarSubLine ) && sunken ) { cachePainter.translate( 1, 1 ); } cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow ); } QPixmapCache::insert( pixmapName, cache ); } painter->drawPixmap( option->rect.topLeft(), cache ); } break; case CE_ScrollBarSubPage: case CE_ScrollBarAddPage: break; case CE_ScrollBarSlider: if( const QStyleOptionSlider* scrollBar = qstyleoption_cast( option ) ) { bool horizontal = scrollBar->orientation == Qt::Horizontal; bool isEnabled = scrollBar->state & State_Enabled; bool sunken = scrollBar->state & State_Sunken; bool hover = scrollBar->state & State_MouseOver; QColor sliderColor, blendColor; hoverColors( sunken, hover, (scrollBar->activeSubControls & SC_ScrollBarSlider) && isEnabled, sliderColor, blendColor); QRect rc = scrollBar->rect; if( horizontal ) { painter->fillRect( rc.left(), rc.top() + 2, rc.width(), rc.height() - 4, sliderColor ); } else { painter->fillRect( rc.left() + 2, rc.top(), rc.width() - 4, rc.height(), sliderColor ); } } break; default: QPlastiqueStyle::drawControl( element, option, painter, widget ); break; } } */ void LmmsStyle::drawComplexControl( ComplexControl control, const QStyleOptionComplex * option, QPainter *painter, const QWidget *widget ) const { // fix broken titlebar styling on win32 if( control == CC_TitleBar ) { const QStyleOptionTitleBar * titleBar = qstyleoption_cast(option ); if( titleBar ) { QStyleOptionTitleBar so( *titleBar ); so.palette = standardPalette(); so.palette.setColor( QPalette::HighlightedText, ( titleBar->titleBarState & State_Active ) ? QColor( 255, 255, 255 ) : QColor( 192, 192, 192 ) ); so.palette.setColor( QPalette::Text, QColor( 64, 64, 64 ) ); QPlastiqueStyle::drawComplexControl( control, &so, painter, widget ); return; } } /* else if( control == CC_ScrollBar ) { painter->fillRect( option->rect, QApplication::palette().color( QPalette::Active, QPalette::Background ) ); }*/ QPlastiqueStyle::drawComplexControl( control, option, painter, widget ); } void LmmsStyle::drawPrimitive( PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if( element == QStyle::PE_Frame || element == QStyle::PE_FrameLineEdit || element == QStyle::PE_PanelLineEdit ) { const QRect rect = option->rect; QColor black = QColor( 0, 0, 0 ); QColor shadow = option->palette.shadow().color(); QColor highlight = option->palette.highlight().color(); int a100 = 165; int a75 = static_cast( a100 * .75 ); int a50 = static_cast( a100 * .6 ); int a25 = static_cast( a100 * .33 ); QLine lines[4]; QPoint points[4]; // black inside lines // 50% black.setAlpha(a100); painter->setPen(QPen(black, 0)); lines[0] = QLine(rect.left() + 2, rect.top() + 1, rect.right() - 2, rect.top() + 1); lines[1] = QLine(rect.left() + 2, rect.bottom() - 1, rect.right() - 2, rect.bottom() - 1); lines[2] = QLine(rect.left() + 1, rect.top() + 2, rect.left() + 1, rect.bottom() - 2); lines[3] = QLine(rect.right() - 1, rect.top() + 2, rect.right() - 1, rect.bottom() - 2); painter->drawLines(lines, 4); // black inside dots black.setAlpha(a50); painter->setPen(QPen(black, 0)); points[0] = QPoint(rect.left() + 2, rect.top() + 2); points[1] = QPoint(rect.left() + 2, rect.bottom() - 2); points[2] = QPoint(rect.right() - 2, rect.top() + 2); points[3] = QPoint(rect.right() - 2, rect.bottom() - 2); painter->drawPoints(points, 4); // outside lines - shadow // 100% shadow.setAlpha(a75); painter->setPen(QPen(shadow, 0)); lines[0] = QLine(rect.left() + 2, rect.top(), rect.right() - 2, rect.top()); lines[1] = QLine(rect.left(), rect.top() + 2, rect.left(), rect.bottom() - 2); painter->drawLines(lines, 2); // outside corner dots - shadow // 75% shadow.setAlpha(a50); painter->setPen(QPen(shadow, 0)); points[0] = QPoint(rect.left() + 1, rect.top() + 1); points[1] = QPoint(rect.right() - 1, rect.top() + 1); painter->drawPoints(points, 2); // outside end dots - shadow // 50% shadow.setAlpha(a25); painter->setPen(QPen(shadow, 0)); points[0] = QPoint(rect.left() + 1, rect.top()); points[1] = QPoint(rect.left(), rect.top() + 1); points[2] = QPoint(rect.right() - 1, rect.top()); points[3] = QPoint(rect.left(), rect.bottom() - 1); painter->drawPoints(points, 4); // outside lines - highlight // 100% highlight.setAlpha(a75); painter->setPen(QPen(highlight, 0)); lines[0] = QLine(rect.left() + 2, rect.bottom(), rect.right() - 2, rect.bottom()); lines[1] = QLine(rect.right(), rect.top() + 2, rect.right(), rect.bottom() - 2); painter->drawLines(lines, 2); // outside corner dots - highlight // 75% highlight.setAlpha(a50); painter->setPen(QPen(highlight, 0)); points[0] = QPoint(rect.left() + 1, rect.bottom() - 1); points[1] = QPoint(rect.right() - 1, rect.bottom() - 1); painter->drawPoints(points, 2); // outside end dots - highlight // 50% highlight.setAlpha(a25); painter->setPen(QPen(highlight, 0)); points[0] = QPoint(rect.right() - 1, rect.bottom()); points[1] = QPoint(rect.right(), rect.bottom() - 1); points[2] = QPoint(rect.left() + 1, rect.bottom()); points[3] = QPoint(rect.right(), rect.top() + 1); painter->drawPoints(points, 4); } else { QPlastiqueStyle::drawPrimitive( element, option, painter, widget ); } } int LmmsStyle::pixelMetric( PixelMetric _metric, const QStyleOption * _option, const QWidget * _widget ) const { switch( _metric ) { case QStyle::PM_ButtonMargin: return 3; case QStyle::PM_ButtonIconSize: return 20; case QStyle::PM_ToolBarItemMargin: return 1; case QStyle::PM_ToolBarItemSpacing: return 2; case QStyle::PM_TitleBarHeight: return 24; default: return QPlastiqueStyle::pixelMetric( _metric, _option, _widget ); } } // QStyle::SH_TitleBar_NoBorder /* QSize LmmsStyle::sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const { if( type == CT_ScrollBar ) { if( const QStyleOptionSlider * scrollBar = qstyleoption_cast( option ) ) { int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget ); int scrollBarSliderMinimum = pixelMetric( PM_ScrollBarSliderMin, option, widget ); if( scrollBar->orientation == Qt::Horizontal ) { return QSize( BUTTON_LENGTH * 2 + scrollBarSliderMinimum, scrollBarExtent ); } else { return QSize( scrollBarExtent, BUTTON_LENGTH * 2 + scrollBarSliderMinimum ); } } } return QPlastiqueStyle::sizeFromContents( type, option, size, widget ); } */ /* QRect LmmsStyle::subControlRect( ComplexControl control, const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const { QRect rect = QPlastiqueStyle::subControlRect( control, option, subControl, widget ); switch( control ) { case CC_ScrollBar: if( const QStyleOptionSlider* scrollBar = qstyleoption_cast( option ) ) { int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, scrollBar, widget ); int sliderMaxLength = ( ( scrollBar->orientation == Qt::Horizontal ) ? scrollBar->rect.width() : scrollBar->rect.height() ) - ( BUTTON_LENGTH * 2 + 6 ); int sliderMinLength = pixelMetric( PM_ScrollBarSliderMin, scrollBar, widget ); int sliderLength; // calculate slider length if( scrollBar->maximum != scrollBar->minimum ) { uint valueRange = scrollBar->maximum - scrollBar->minimum; sliderLength = ( scrollBar->pageStep * sliderMaxLength ) / ( valueRange + scrollBar->pageStep ); if( sliderLength < sliderMinLength || valueRange > ( INT_MAX ) / 2 ) { sliderLength = sliderMinLength; } if( sliderLength > sliderMaxLength ) { sliderLength = sliderMaxLength; } } else { sliderLength = sliderMaxLength; } int sliderStart = BUTTON_LENGTH + 3 + sliderPositionFromValue( scrollBar->minimum, scrollBar->maximum, scrollBar->sliderPosition, sliderMaxLength - sliderLength, scrollBar->upsideDown ); QRect scrollBarRect = scrollBar->rect; switch( subControl ) { case SC_ScrollBarSubLine: // top/left button if( scrollBar->orientation == Qt::Horizontal ) { rect.setRect( scrollBarRect.left() + 2, scrollBarRect.top(), BUTTON_LENGTH, scrollBarExtent ); } else { rect.setRect( scrollBarRect.left(), scrollBarRect.top() + 2, scrollBarExtent, BUTTON_LENGTH ); } break; case SC_ScrollBarAddLine: // bottom/right button if( scrollBar->orientation == Qt::Horizontal ) { rect.setRect( scrollBarRect.right() - 1 - BUTTON_LENGTH, scrollBarRect.top(), BUTTON_LENGTH, scrollBarExtent ); } else { rect.setRect( scrollBarRect.left(), scrollBarRect.bottom() - 1 - BUTTON_LENGTH, scrollBarExtent, BUTTON_LENGTH ); } break; case SC_ScrollBarSubPage: if( scrollBar->orientation == Qt::Horizontal ) { rect.setRect( scrollBarRect.left() + 2 + BUTTON_LENGTH, scrollBarRect.top(), sliderStart - ( scrollBarRect.left() + 2 + BUTTON_LENGTH ), scrollBarExtent ); } else { rect.setRect( scrollBarRect.left(), scrollBarRect.top() + 2 + BUTTON_LENGTH, scrollBarExtent, sliderStart - ( scrollBarRect.left() + 2 + BUTTON_LENGTH ) ); } break; case SC_ScrollBarAddPage: if( scrollBar->orientation == Qt::Horizontal ) { rect.setRect( sliderStart + sliderLength, 0, sliderMaxLength - sliderStart - sliderLength, scrollBarExtent ); } else rect.setRect( 0, sliderStart + sliderLength, scrollBarExtent, sliderMaxLength - sliderStart - sliderLength ); break; case SC_ScrollBarGroove: if( scrollBar->orientation == Qt::Horizontal ) { rect = scrollBarRect.adjusted( BUTTON_LENGTH, 0, -BUTTON_LENGTH, 0 ); } else { rect = scrollBarRect.adjusted( 0, BUTTON_LENGTH, 0, -BUTTON_LENGTH ); } break; case SC_ScrollBarSlider: if( scrollBar->orientation == Qt::Horizontal ) { rect.setRect( sliderStart, 0, sliderLength, scrollBarExtent ); } else { rect.setRect( 0, sliderStart, scrollBarExtent, sliderLength ); } break; default: break; } rect = visualRect( scrollBar->direction, scrollBarRect, rect ); } break; default: break; } return rect; } */ QImage LmmsStyle::colorizeXpm( const char * const * xpm, const QBrush& fill ) const { QImage arrowXpm( xpm ); QImage arrow( arrowXpm.size(), QImage::Format_ARGB32 ); QPainter arrowPainter( &arrow ); arrowPainter.fillRect( arrow.rect(), fill ); arrowPainter.end(); arrow.setAlphaChannel( arrowXpm ); return arrow; } void LmmsStyle::hoverColors( bool sunken, bool hover, bool active, QColor& color, QColor& blend ) const { if( active ) { if( sunken ) { color = QColor( 75, 75, 75 ); blend = QColor( 65, 65, 65 ); } else if( hover ) { color = QColor( 100, 100, 100 ); blend = QColor( 75, 75, 75 ); } else { color = QColor( 21, 21, 21 ); blend = QColor( 33, 33, 33 ); } } else { color = QColor( 21, 21, 21 ); blend = QColor( 33, 33, 33 ); } } lmms-1.1.3/src/gui/MainWindow.cpp000066400000000000000000000705031247673406200166370ustar00rootroot00000000000000/* * MainWindow.cpp - implementation of LMMS-main-window * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include "lmmsversion.h" #include "MainWindow.h" #include "bb_editor.h" #include "SongEditor.h" #include "song.h" #include "PianoRoll.h" #include "embed.h" #include "engine.h" #include "FxMixerView.h" #include "InstrumentTrack.h" #include "PianoView.h" #include "about_dialog.h" #include "ControllerRackView.h" #include "FileBrowser.h" #include "plugin_browser.h" #include "SideBar.h" #include "config_mgr.h" #include "Mixer.h" #include "PluginView.h" #include "project_notes.h" #include "setup_dialog.h" #include "AudioDummy.h" #include "ToolPlugin.h" #include "tool_button.h" #include "ProjectJournal.h" #include "AutomationEditor.h" #include "templates.h" #include "FileDialog.h" #include "VersionedSaveDialog.h" MainWindow::MainWindow() : m_workspace( NULL ), m_templatesMenu( NULL ), m_recentlyOpenedProjectsMenu( NULL ), m_toolsMenu( NULL ), m_autoSaveTimer( this ) { setAttribute( Qt::WA_DeleteOnClose ); QWidget * main_widget = new QWidget( this ); QVBoxLayout * vbox = new QVBoxLayout( main_widget ); vbox->setSpacing( 0 ); vbox->setMargin( 0 ); QWidget * w = new QWidget( main_widget ); QHBoxLayout * hbox = new QHBoxLayout( w ); hbox->setSpacing( 0 ); hbox->setMargin( 0 ); SideBar * sideBar = new SideBar( Qt::Vertical, w ); QSplitter * splitter = new QSplitter( Qt::Horizontal, w ); splitter->setChildrenCollapsible( FALSE ); QString wdir = configManager::inst()->workingDir(); sideBar->appendTab( new PluginBrowser( splitter ) ); sideBar->appendTab( new FileBrowser( configManager::inst()->userProjectsDir() + "*" + configManager::inst()->factoryProjectsDir(), "*.mmp *.mmpz *.xml *.mid *.flp", tr( "My projects" ), embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ), splitter ) ); sideBar->appendTab( new FileBrowser( configManager::inst()->userSamplesDir() + "*" + configManager::inst()->factorySamplesDir(), "*", tr( "My samples" ), embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ), splitter ) ); sideBar->appendTab( new FileBrowser( configManager::inst()->userPresetsDir() + "*" + configManager::inst()->factoryPresetsDir(), "*.xpf *.cs.xml *.xiz", tr( "My presets" ), embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ), splitter ) ); sideBar->appendTab( new FileBrowser( QDir::homePath(), "*", tr( "My home" ), embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ), splitter ) ); QStringList root_paths; #ifdef LMMS_BUILD_APPLE root_paths += "/Volumes"; #else QFileInfoList drives = QDir::drives(); foreach( const QFileInfo & drive, drives ) { root_paths += drive.absolutePath(); } #endif sideBar->appendTab( new FileBrowser( root_paths.join( "*" ), "*", #ifdef LMMS_BUILD_WIN32 tr( "My computer" ), #elif defined(LMMS_BUILD_APPLE) tr( "Volumes" ), #else tr( "Root directory" ), #endif embed::getIconPixmap( "computer" ).transformed( QTransform().rotate( 90 ) ), splitter, #ifdef LMMS_BUILD_WIN32 true #else false #endif ) ); m_workspace = new QMdiArea( splitter ); // Load background QString bgArtwork = configManager::inst()->backgroundArtwork(); QImage bgImage; if( !bgArtwork.isEmpty() ) { bgImage = QImage( bgArtwork ); } if( !bgImage.isNull() ) { m_workspace->setBackground( bgImage ); } else { m_workspace->setBackground( Qt::NoBrush ); } m_workspace->setOption( QMdiArea::DontMaximizeSubWindowOnActivation ); m_workspace->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_workspace->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); hbox->addWidget( sideBar ); hbox->addWidget( splitter ); // create global-toolbar at the top of our window m_toolBar = new QWidget( main_widget ); m_toolBar->setObjectName( "mainToolbar" ); m_toolBar->setFixedHeight( 64 ); m_toolBar->move( 0, 0 ); // add layout for organizing quite complex toolbar-layouting m_toolBarLayout = new QGridLayout( m_toolBar/*, 2, 1*/ ); m_toolBarLayout->setMargin( 0 ); m_toolBarLayout->setSpacing( 0 ); vbox->addWidget( m_toolBar ); vbox->addWidget( w ); setCentralWidget( main_widget ); m_updateTimer.start( 1000 / 20, this ); // 20 fps if( configManager::inst()->value( "ui", "enableautosave" ).toInt() ) { // connect auto save connect(&m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(autoSave())); m_autoSaveTimer.start(1000 * 60); // 1 minute } connect( engine::getSong(), SIGNAL( playbackStateChanged() ), this, SLOT( updatePlayPauseIcons() ) ); } MainWindow::~MainWindow() { for( QList::iterator it = m_tools.begin(); it != m_tools.end(); ++it ) { Model * m = ( *it )->model(); delete *it; delete m; } // TODO: Close tools // destroy engine which will do further cleanups etc. engine::destroy(); } void MainWindow::finalize() { resetWindowTitle(); setWindowIcon( embed::getIconPixmap( "icon" ) ); // project-popup-menu QMenu * project_menu = new QMenu( this ); menuBar()->addMenu( project_menu )->setText( tr( "&Project" ) ); project_menu->addAction( embed::getIconPixmap( "project_new" ), tr( "&New" ), this, SLOT( createNewProject() ), Qt::CTRL + Qt::Key_N ); project_menu->addAction( embed::getIconPixmap( "project_open" ), tr( "&Open..." ), this, SLOT( openProject() ), Qt::CTRL + Qt::Key_O ); m_recentlyOpenedProjectsMenu = project_menu->addMenu( embed::getIconPixmap( "project_open_recent" ), tr( "Recently opened projects" ) ); connect( m_recentlyOpenedProjectsMenu, SIGNAL( aboutToShow() ), this, SLOT( updateRecentlyOpenedProjectsMenu() ) ); connect( m_recentlyOpenedProjectsMenu, SIGNAL( triggered( QAction * ) ), this, SLOT( openRecentlyOpenedProject( QAction * ) ) ); project_menu->addAction( embed::getIconPixmap( "project_save" ), tr( "&Save" ), this, SLOT( saveProject() ), Qt::CTRL + Qt::Key_S ); project_menu->addAction( embed::getIconPixmap( "project_save" ), tr( "Save as new &version" ), this, SLOT( saveProjectAsNewVersion() ), Qt::CTRL + Qt::ALT + Qt::Key_S ); project_menu->addAction( embed::getIconPixmap( "project_saveas" ), tr( "Save &As..." ), this, SLOT( saveProjectAs() ), Qt::CTRL + Qt::SHIFT + Qt::Key_S ); project_menu->addSeparator(); project_menu->addAction( embed::getIconPixmap( "project_import" ), tr( "Import..." ), engine::getSong(), SLOT( importProject() ) ); project_menu->addAction( embed::getIconPixmap( "project_export" ), tr( "E&xport..." ), engine::getSong(), SLOT( exportProject() ), Qt::CTRL + Qt::Key_E ); project_menu->addAction( embed::getIconPixmap( "project_export" ), tr( "E&xport tracks..." ), engine::getSong(), SLOT( exportProjectTracks() ), Qt::CTRL + Qt::SHIFT + Qt::Key_E ); project_menu->addSeparator(); project_menu->addAction( embed::getIconPixmap( "exit" ), tr( "&Quit" ), qApp, SLOT( closeAllWindows() ), Qt::CTRL + Qt::Key_Q ); QMenu * edit_menu = new QMenu( this ); menuBar()->addMenu( edit_menu )->setText( tr( "&Edit" ) ); edit_menu->addAction( embed::getIconPixmap( "edit_undo" ), tr( "Undo" ), this, SLOT( undo() ), Qt::CTRL + Qt::Key_Z ); edit_menu->addAction( embed::getIconPixmap( "edit_redo" ), tr( "Redo" ), this, SLOT( redo() ), Qt::CTRL + Qt::Key_Y ); edit_menu->addSeparator(); edit_menu->addAction( embed::getIconPixmap( "setup_general" ), tr( "Settings" ), this, SLOT( showSettingsDialog() ) ); m_toolsMenu = new QMenu( this ); Plugin::DescriptorList pluginDescriptors; Plugin::getDescriptorsOfAvailPlugins( pluginDescriptors ); for( Plugin::DescriptorList::ConstIterator it = pluginDescriptors.begin(); it != pluginDescriptors.end(); ++it ) { if( it->type == Plugin::Tool ) { m_toolsMenu->addAction( it->logo->pixmap(), it->displayName ); m_tools.push_back( ToolPlugin::instantiate( it->name, /*this*/NULL )->createView( this ) ); } } if( !m_toolsMenu->isEmpty() ) { menuBar()->addMenu( m_toolsMenu )->setText( tr( "&Tools" ) ); connect( m_toolsMenu, SIGNAL( triggered( QAction * ) ), this, SLOT( showTool( QAction * ) ) ); } // help-popup-menu QMenu * help_menu = new QMenu( this ); menuBar()->addMenu( help_menu )->setText( tr( "&Help" ) ); // May use offline help if( TRUE ) { help_menu->addAction( embed::getIconPixmap( "help" ), tr( "Online help" ), this, SLOT( browseHelp() ) ); } else { help_menu->addAction( embed::getIconPixmap( "help" ), tr( "Help" ), this, SLOT( help() ) ); } help_menu->addAction( embed::getIconPixmap( "whatsthis" ), tr( "What's this?" ), this, SLOT( enterWhatsThisMode() ) ); help_menu->addSeparator(); help_menu->addAction( embed::getIconPixmap( "icon" ), tr( "About" ), this, SLOT( aboutLMMS() ) ); // create tool-buttons toolButton * project_new = new toolButton( embed::getIconPixmap( "project_new" ), tr( "Create new project" ), this, SLOT( createNewProject() ), m_toolBar ); toolButton * project_new_from_template = new toolButton( embed::getIconPixmap( "project_new_from_template" ), tr( "Create new project from template" ), this, SLOT( emptySlot() ), m_toolBar ); m_templatesMenu = new QMenu( project_new_from_template ); connect( m_templatesMenu, SIGNAL( aboutToShow() ), this, SLOT( fillTemplatesMenu() ) ); connect( m_templatesMenu, SIGNAL( triggered( QAction * ) ), this, SLOT( createNewProjectFromTemplate( QAction * ) ) ); project_new_from_template->setMenu( m_templatesMenu ); project_new_from_template->setPopupMode( toolButton::InstantPopup ); toolButton * project_open = new toolButton( embed::getIconPixmap( "project_open" ), tr( "Open existing project" ), this, SLOT( openProject() ), m_toolBar ); toolButton * project_open_recent = new toolButton( embed::getIconPixmap( "project_open_recent" ), tr( "Recently opened project" ), this, SLOT( emptySlot() ), m_toolBar ); project_open_recent->setMenu( m_recentlyOpenedProjectsMenu ); project_open_recent->setPopupMode( toolButton::InstantPopup ); toolButton * project_save = new toolButton( embed::getIconPixmap( "project_save" ), tr( "Save current project" ), this, SLOT( saveProject() ), m_toolBar ); toolButton * project_export = new toolButton( embed::getIconPixmap( "project_export" ), tr( "Export current project" ), engine::getSong(), SLOT( exportProject() ), m_toolBar ); toolButton * whatsthis = new toolButton( embed::getIconPixmap( "whatsthis" ), tr( "What's this?" ), this, SLOT( enterWhatsThisMode() ), m_toolBar ); m_toolBarLayout->setColumnMinimumWidth( 0, 5 ); m_toolBarLayout->addWidget( project_new, 0, 1 ); m_toolBarLayout->addWidget( project_new_from_template, 0, 2 ); m_toolBarLayout->addWidget( project_open, 0, 3 ); m_toolBarLayout->addWidget( project_open_recent, 0, 4 ); m_toolBarLayout->addWidget( project_save, 0, 5 ); m_toolBarLayout->addWidget( project_export, 0, 6 ); m_toolBarLayout->addWidget( whatsthis, 0, 7 ); // window-toolbar toolButton * song_editor_window = new toolButton( embed::getIconPixmap( "songeditor" ), tr( "Show/hide Song-Editor" ) + " (F5)", this, SLOT( toggleSongEditorWin() ), m_toolBar ); song_editor_window->setShortcut( Qt::Key_F5 ); song_editor_window->setWhatsThis( tr( "By pressing this button, you can show or hide the " "Song-Editor. With the help of the Song-Editor you can " "edit song-playlist and specify when which track " "should be played. " "You can also insert and move samples (e.g. " "rap samples) directly into the playlist." ) ); toolButton * bb_editor_window = new toolButton( embed::getIconPixmap( "bb_track_btn" ), tr( "Show/hide Beat+Bassline Editor" ) + " (F6)", this, SLOT( toggleBBEditorWin() ), m_toolBar ); bb_editor_window->setShortcut( Qt::Key_F6 ); bb_editor_window->setWhatsThis( tr( "By pressing this button, you can show or hide the " "Beat+Bassline Editor. The Beat+Bassline Editor is " "needed for creating beats, and for opening, adding, and " "removing channels, and for cutting, copying and pasting " "beat and bassline-patterns, and for other things like " "that." ) ); toolButton * piano_roll_window = new toolButton( embed::getIconPixmap( "piano" ), tr( "Show/hide Piano-Roll" ) + " (F7)", this, SLOT( togglePianoRollWin() ), m_toolBar ); piano_roll_window->setShortcut( Qt::Key_F7 ); piano_roll_window->setWhatsThis( tr( "Click here to show or hide the " "Piano-Roll. With the help of the Piano-Roll " "you can edit melodies in an easy way." ) ); toolButton * automation_editor_window = new toolButton( embed::getIconPixmap( "automation" ), tr( "Show/hide Automation Editor" ) + " (F8)", this, SLOT( toggleAutomationEditorWin() ), m_toolBar ); automation_editor_window->setShortcut( Qt::Key_F8 ); automation_editor_window->setWhatsThis( tr( "Click here to show or hide the " "Automation Editor. With the help of the " "Automation Editor you can edit dynamic values " "in an easy way." ) ); toolButton * fx_mixer_window = new toolButton( embed::getIconPixmap( "fx_mixer" ), tr( "Show/hide FX Mixer" ) + " (F9)", this, SLOT( toggleFxMixerWin() ), m_toolBar ); fx_mixer_window->setShortcut( Qt::Key_F9 ); fx_mixer_window->setWhatsThis( tr( "Click here to show or hide the " "FX Mixer. The FX Mixer is a very powerful tool " "for managing effects for your song. You can insert " "effects into different effect-channels." ) ); toolButton * project_notes_window = new toolButton( embed::getIconPixmap( "project_notes" ), tr( "Show/hide project notes" ) + " (F10)", this, SLOT( toggleProjectNotesWin() ), m_toolBar ); project_notes_window->setShortcut( Qt::Key_F10 ); project_notes_window->setWhatsThis( tr( "Click here to show or hide the " "project notes window. In this window you can put " "down your project notes.") ); toolButton * controllers_window = new toolButton( embed::getIconPixmap( "controller" ), tr( "Show/hide controller rack" ) + " (F11)", this, SLOT( toggleControllerRack() ), m_toolBar ); controllers_window->setShortcut( Qt::Key_F11 ); m_toolBarLayout->addWidget( song_editor_window, 1, 1 ); m_toolBarLayout->addWidget( bb_editor_window, 1, 2 ); m_toolBarLayout->addWidget( piano_roll_window, 1, 3 ); m_toolBarLayout->addWidget( automation_editor_window, 1, 4 ); m_toolBarLayout->addWidget( fx_mixer_window, 1, 5 ); m_toolBarLayout->addWidget( project_notes_window, 1, 6 ); m_toolBarLayout->addWidget( controllers_window, 1, 7 ); m_toolBarLayout->setColumnStretch( 100, 1 ); // setup-dialog opened before? if( !configManager::inst()->value( "app", "configured" ).toInt() ) { configManager::inst()->setValue( "app", "configured", "1" ); // no, so show it that user can setup everything setupDialog sd; sd.exec(); } // look whether mixer could use a audio-interface beside AudioDummy else if( engine::mixer()->audioDevName() == AudioDummy::name() ) { // no, so we offer setup-dialog with audio-settings... setupDialog sd( setupDialog::AudioSettings ); sd.exec(); } // reset window title every time we change the state of a subwindow to show the correct title foreach( QMdiSubWindow * subWindow, workspace()->subWindowList() ) { connect( subWindow, SIGNAL( windowStateChanged(Qt::WindowStates,Qt::WindowStates) ), this, SLOT( resetWindowTitle() ) ); } } int MainWindow::addWidgetToToolBar( QWidget * _w, int _row, int _col ) { int col = ( _col == -1 ) ? m_toolBarLayout->columnCount() + 7 : _col; if( _w->height() > 32 || _row == -1 ) { m_toolBarLayout->addWidget( _w, 0, col, 2, 1 ); } else { m_toolBarLayout->addWidget( _w, _row, col ); } return( col ); } void MainWindow::addSpacingToToolBar( int _size ) { m_toolBarLayout->setColumnMinimumWidth( m_toolBarLayout->columnCount() + 7, _size ); } void MainWindow::resetWindowTitle() { QString title = ""; if( engine::getSong()->projectFileName() != "" ) { title = QFileInfo( engine::getSong()->projectFileName() ).completeBaseName(); } if( title == "" ) { title = tr( "Untitled" ); } if( engine::getSong()->isModified() ) { title += '*'; } setWindowTitle( title + " - " + tr( "LMMS %1" ).arg( LMMS_VERSION ) ); } bool MainWindow::mayChangeProject() { engine::getSong()->stop(); if( !engine::getSong()->isModified() ) { return( TRUE ); } QMessageBox mb( tr( "Project not saved" ), tr( "The current project was modified since " "last saving. Do you want to save it " "now?" ), QMessageBox::Question, QMessageBox::Save, QMessageBox::Discard, QMessageBox::Cancel, this ); int answer = mb.exec(); if( answer == QMessageBox::Save ) { return( saveProject() ); } else if( answer == QMessageBox::Discard ) { return( TRUE ); } return( FALSE ); } void MainWindow::clearKeyModifiers() { m_keyMods.m_ctrl = FALSE; m_keyMods.m_shift = FALSE; m_keyMods.m_alt = FALSE; } void MainWindow::saveWidgetState( QWidget * _w, QDomElement & _de ) { if( _w->parentWidget() != NULL && _w->parentWidget()->inherits( "QMdiSubWindow" ) ) { _w = _w->parentWidget(); } _de.setAttribute( "x", _w->x() ); _de.setAttribute( "y", _w->y() ); _de.setAttribute( "visible", _w->isVisible() ); _de.setAttribute( "minimized", _w->isMinimized() ); _de.setAttribute( "maximized", _w->isMaximized() ); _de.setAttribute( "width", _w->width() ); _de.setAttribute( "height", _w->height() ); } void MainWindow::restoreWidgetState( QWidget * _w, const QDomElement & _de ) { QRect r( qMax( 0, _de.attribute( "x" ).toInt() ), qMax( 0, _de.attribute( "y" ).toInt() ), qMax( 100, _de.attribute( "width" ).toInt() ), qMax( 100, _de.attribute( "height" ).toInt() ) ); if( _de.hasAttribute( "visible" ) && !r.isNull() ) { if ( _w->parentWidget() != NULL && _w->parentWidget()->inherits( "QMdiSubWindow" ) ) { _w = _w->parentWidget(); } _w->resize( r.size() ); _w->move( r.topLeft() ); _w->setVisible( _de.attribute( "visible" ).toInt() ); _w->setWindowState( _de.attribute( "minimized" ).toInt() ? ( _w->windowState() | Qt::WindowMinimized ) : ( _w->windowState() & ~Qt::WindowMinimized ) ); _w->setWindowState( _de.attribute( "maximized" ).toInt() ? ( _w->windowState() | Qt::WindowMaximized ) : ( _w->windowState() & ~Qt::WindowMaximized ) ); } } void MainWindow::emptySlot() { } void MainWindow::enterWhatsThisMode() { QWhatsThis::enterWhatsThisMode(); } void MainWindow::createNewProject() { if( mayChangeProject() ) { engine::getSong()->createNewProject(); } } void MainWindow::createNewProjectFromTemplate( QAction * _idx ) { if( m_templatesMenu != NULL && mayChangeProject() ) { QString dir_base = m_templatesMenu->actions().indexOf( _idx ) >= m_custom_templates_count ? configManager::inst()->factoryProjectsDir() : configManager::inst()->userProjectsDir(); engine::getSong()->createNewProjectFromTemplate( dir_base + "templates/" + _idx->text() + ".mpt" ); } } void MainWindow::openProject() { if( mayChangeProject() ) { FileDialog ofd( this, tr( "Open project" ), "", tr( "LMMS (*.mmp *.mmpz)" ) ); ofd.setDirectory( configManager::inst()->userProjectsDir() ); ofd.setFileMode( FileDialog::ExistingFiles ); if( ofd.exec () == QDialog::Accepted && !ofd.selectedFiles().isEmpty() ) { setCursor( Qt::WaitCursor ); engine::getSong()->loadProject( ofd.selectedFiles()[0] ); setCursor( Qt::ArrowCursor ); } } } void MainWindow::updateRecentlyOpenedProjectsMenu() { m_recentlyOpenedProjectsMenu->clear(); QStringList rup = configManager::inst()->recentlyOpenedProjects(); for( QStringList::iterator it = rup.begin(); it != rup.end(); ++it ) { m_recentlyOpenedProjectsMenu->addAction( embed::getIconPixmap( "project_file" ), *it ); } } void MainWindow::openRecentlyOpenedProject( QAction * _action ) { if ( mayChangeProject() ) { const QString & f = _action->text(); setCursor( Qt::WaitCursor ); engine::getSong()->loadProject( f ); configManager::inst()->addRecentlyOpenedProject( f ); setCursor( Qt::ArrowCursor ); } } bool MainWindow::saveProject() { if( engine::getSong()->projectFileName() == "" ) { return( saveProjectAs() ); } else { engine::getSong()->guiSaveProject(); } return( TRUE ); } bool MainWindow::saveProjectAs() { VersionedSaveDialog sfd( this, tr( "Save project" ), "", tr( "LMMS Project (*.mmpz *.mmp);;" "LMMS Project Template (*.mpt)" ) ); QString f = engine::getSong()->projectFileName(); if( f != "" ) { sfd.setDirectory( QFileInfo( f ).absolutePath() ); sfd.selectFile( QFileInfo( f ).fileName() ); } else { sfd.setDirectory( configManager::inst()->userProjectsDir() ); } if( sfd.exec () == FileDialog::Accepted && !sfd.selectedFiles().isEmpty() && sfd.selectedFiles()[0] != "" ) { engine::getSong()->guiSaveProjectAs( sfd.selectedFiles()[0] ); return( TRUE ); } return( FALSE ); } bool MainWindow::saveProjectAsNewVersion() { QString fileName = engine::getSong()->projectFileName(); if( fileName == "" ) { return saveProjectAs(); } else { do VersionedSaveDialog::changeFileNameVersion( fileName, true ); while ( QFile( fileName ).exists() ); engine::getSong()->guiSaveProjectAs( fileName ); return true; } } void MainWindow::showSettingsDialog() { setupDialog sd; sd.exec(); } void MainWindow::aboutLMMS() { aboutDialog().exec(); } void MainWindow::help() { QMessageBox::information( this, tr( "Help not available" ), tr( "Currently there's no help " "available in LMMS.\n" "Please visit " "http://lmms.sf.net/wiki " "for documentation on LMMS." ), QMessageBox::Ok ); } void MainWindow::toggleWindow( QWidget *window, bool forceShow ) { QWidget *parent = window->parentWidget(); if( forceShow || m_workspace->activeSubWindow() != parent || parent->isHidden() ) { parent->show(); window->show(); window->setFocus(); } else { parent->hide(); } // Workaround for Qt Bug #260116 m_workspace->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_workspace->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_workspace->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_workspace->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); } void MainWindow::toggleBBEditorWin( bool forceShow ) { toggleWindow( engine::getBBEditor(), forceShow ); } void MainWindow::toggleSongEditorWin() { toggleWindow( engine::songEditor() ); } void MainWindow::toggleProjectNotesWin() { toggleWindow( engine::getProjectNotes() ); } void MainWindow::togglePianoRollWin() { toggleWindow( engine::pianoRoll() ); } void MainWindow::toggleAutomationEditorWin() { toggleWindow( engine::automationEditor() ); } void MainWindow::toggleFxMixerWin() { toggleWindow( engine::fxMixerView() ); } void MainWindow::toggleControllerRack() { toggleWindow( engine::getControllerRackView() ); } void MainWindow::updatePlayPauseIcons() { engine::songEditor()->setPauseIcon( false ); engine::automationEditor()->setPauseIcon( false ); engine::getBBEditor()->setPauseIcon( false ); engine::pianoRoll()->setPauseIcon( false ); if( engine::getSong()->isPlaying() ) { switch( engine::getSong()->playMode() ) { case song::Mode_PlaySong: engine::songEditor()->setPauseIcon( true ); break; case song::Mode_PlayAutomationPattern: engine::automationEditor()->setPauseIcon( true ); break; case song::Mode_PlayBB: engine::getBBEditor()->setPauseIcon( true ); break; case song::Mode_PlayPattern: engine::pianoRoll()->setPauseIcon( true ); break; default: break; } } } void MainWindow::undo() { engine::projectJournal()->undo(); } void MainWindow::redo() { engine::projectJournal()->redo(); } void MainWindow::closeEvent( QCloseEvent * _ce ) { if( mayChangeProject() ) { // delete recovery file QDir working(configManager::inst()->workingDir()); working.remove("recover.mmp"); _ce->accept(); } else { _ce->ignore(); } } void MainWindow::focusOutEvent( QFocusEvent * _fe ) { // when loosing focus we do not receive key-(release!)-events anymore, // so we might miss release-events of one the modifiers we're watching! clearKeyModifiers(); QMainWindow::leaveEvent( _fe ); } void MainWindow::keyPressEvent( QKeyEvent * _ke ) { switch( _ke->key() ) { case Qt::Key_Control: m_keyMods.m_ctrl = TRUE; break; case Qt::Key_Shift: m_keyMods.m_shift = TRUE; break; case Qt::Key_Alt: m_keyMods.m_alt = TRUE; break; default: { InstrumentTrackWindow * w = InstrumentTrackView::topLevelInstrumentTrackWindow(); if( w ) { w->pianoView()->keyPressEvent( _ke ); } if( !_ke->isAccepted() ) { QMainWindow::keyPressEvent( _ke ); } } } } void MainWindow::keyReleaseEvent( QKeyEvent * _ke ) { switch( _ke->key() ) { case Qt::Key_Control: m_keyMods.m_ctrl = FALSE; break; case Qt::Key_Shift: m_keyMods.m_shift = FALSE; break; case Qt::Key_Alt: m_keyMods.m_alt = FALSE; break; default: if( InstrumentTrackView::topLevelInstrumentTrackWindow() ) { InstrumentTrackView::topLevelInstrumentTrackWindow()-> pianoView()->keyReleaseEvent( _ke ); } if( !_ke->isAccepted() ) { QMainWindow::keyReleaseEvent( _ke ); } } } void MainWindow::timerEvent( QTimerEvent * _te) { emit periodicUpdate(); } void MainWindow::fillTemplatesMenu() { m_templatesMenu->clear(); QDir user_d( configManager::inst()->userProjectsDir() + "templates" ); QStringList templates = user_d.entryList( QStringList( "*.mpt" ), QDir::Files | QDir::Readable ); m_custom_templates_count = templates.count(); for( QStringList::iterator it = templates.begin(); it != templates.end(); ++it ) { m_templatesMenu->addAction( embed::getIconPixmap( "project_file" ), ( *it ).left( ( *it ).length() - 4 ) ); } QDir d( configManager::inst()->factoryProjectsDir() + "templates" ); templates = d.entryList( QStringList( "*.mpt" ), QDir::Files | QDir::Readable ); if( m_custom_templates_count > 0 && !templates.isEmpty() ) { m_templatesMenu->addSeparator(); } for( QStringList::iterator it = templates.begin(); it != templates.end(); ++it ) { m_templatesMenu->addAction( embed::getIconPixmap( "project_file" ), ( *it ).left( ( *it ).length() - 4 ) ); } } void MainWindow::showTool( QAction * _idx ) { PluginView * p = m_tools[m_toolsMenu->actions().indexOf( _idx )]; p->show(); p->parentWidget()->show(); p->setFocus(); } void MainWindow::browseHelp() { // file:// alternative for offline help QString url = "http://lmms.sf.net/wiki/index.php?title=Main_Page"; QDesktopServices::openUrl( url ); // TODO: Handle error } void MainWindow::autoSave() { if( !( engine::getSong()->isPlaying() || engine::getSong()->isExporting() ) ) { QDir work(configManager::inst()->workingDir()); engine::getSong()->saveProjectFile(work.absoluteFilePath("recover.mmp")); } else { // try again in 10 seconds QTimer::singleShot( 10*1000, this, SLOT( autoSave() ) ); } } #include "moc_MainWindow.cxx" lmms-1.1.3/src/gui/ModelView.cpp000066400000000000000000000033261247673406200164550ustar00rootroot00000000000000/* * ModelView.cpp - implementation of ModelView * * Copyright (c) 2007-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "ModelView.h" ModelView::ModelView( Model* model, QWidget* widget ) : m_widget( widget ), m_model( model ) { } ModelView::~ModelView() { if( m_model != NULL && m_model->isDefaultConstructed() ) { delete m_model; } } void ModelView::setModel( Model* model, bool isOldModelValid ) { if( isOldModelValid && m_model != NULL ) { if( m_model->isDefaultConstructed() ) { delete m_model; } else { m_model->disconnect( widget() ); } } m_model = model; doConnections(); widget()->update(); modelChanged(); } void ModelView::doConnections() { if( m_model != NULL ) { QObject::connect( m_model, SIGNAL( dataChanged() ), widget(), SLOT( update() ) ); QObject::connect( m_model, SIGNAL( propertiesChanged() ), widget(), SLOT( update() ) ); } } lmms-1.1.3/src/gui/PeakControllerDialog.cpp000066400000000000000000000043631247673406200206300ustar00rootroot00000000000000/* * PeakController_Dialog.cpp - per-controller-specific view for changing a * controller's settings * * Copyright (c) 2008-2009 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include "caption_menu.h" #include "gui_templates.h" #include "embed.h" #include "engine.h" #include "MainWindow.h" #include "tooltip.h" #include "PeakController.h" #include "ControllerDialog.h" #include "knob.h" #include "TempoSyncKnob.h" #include "pixmap_button.h" PeakControllerDialog::PeakControllerDialog( Controller * _model, QWidget * _parent ) : ControllerDialog( _model, _parent ) { setWindowTitle( tr( "PEAK" ) ); setWindowIcon( embed::getIconPixmap( "controller" ) ); setFixedSize( 256, 64 ); toolTip::add( this, tr( "LFO Controller" ) ); QLabel * l = new QLabel( this ); l->setText( "Use FX's controls" ); l->move(10, 10); setModel( _model ); } PeakControllerDialog::~PeakControllerDialog() { } /* void effectView::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } void effectView::closeEffects() { m_subWindow->hide(); m_show = true; } */ void PeakControllerDialog::contextMenuEvent( QContextMenuEvent * ) { } void PeakControllerDialog::paintEvent( QPaintEvent * ) { QPainter p( this ); } void PeakControllerDialog::modelChanged() { m_peakController = castModel(); } lmms-1.1.3/src/gui/PianoRoll.cpp000066400000000000000000003210271247673406200164620ustar00rootroot00000000000000/* * PianoRoll.cpp - implementation of piano roll which is used for actual * writing of melodies * * Copyright (c) 2004-2014 Tobias Doerffel * Copyright (c) 2008 Andrew Kelley * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include #include #include "config_mgr.h" #include "PianoRoll.h" #include "bb_track_container.h" #include "Clipboard.h" #include "combobox.h" #include "debug.h" #include "DetuningHelper.h" #include "embed.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "MainWindow.h" #include "MidiEvent.h" #include "DataFile.h" #include "Pattern.h" #include "Piano.h" #include "pixmap_button.h" #include "song.h" #include "SongEditor.h" #include "templates.h" #include "text_float.h" #include "timeline.h" #include "tool_button.h" #include "text_float.h" #if QT_VERSION < 0x040800 #define MiddleButton MidButton #endif typedef AutomationPattern::timeMap timeMap; extern Keys whiteKeys[]; // defined in piano_widget.cpp // some constants... const int INITIAL_PIANOROLL_HEIGHT = 480; const int SCROLLBAR_SIZE = 16; const int PIANO_X = 0; const int WHITE_KEY_WIDTH = 64; const int BLACK_KEY_WIDTH = 41; const int WHITE_KEY_SMALL_HEIGHT = 18; const int WHITE_KEY_BIG_HEIGHT = 24; const int BLACK_KEY_HEIGHT = 16; const int C_KEY_LABEL_X = WHITE_KEY_WIDTH - 19; const int KEY_LINE_HEIGHT = 12; const int OCTAVE_HEIGHT = KEY_LINE_HEIGHT * KeysPerOctave; // = 12 * 12; const int NOTE_EDIT_RESIZE_BAR = 6; const int NOTE_EDIT_MIN_HEIGHT = 50; const int KEY_AREA_MIN_HEIGHT = 100; const int PR_BOTTOM_MARGIN = SCROLLBAR_SIZE; const int PR_TOP_MARGIN = 48; const int PR_RIGHT_MARGIN = SCROLLBAR_SIZE; // width of area used for resizing (the grip at the end of a note) const int RESIZE_AREA_WIDTH = 4; // width of line for setting volume/panning of note const int NE_LINE_WIDTH = 3; // key where to start const int INITIAL_START_KEY = Key_C + Octave_4 * KeysPerOctave; // number of each note to provide in quantization and note lengths const int NUM_EVEN_LENGTHS = 6; const int NUM_TRIPLET_LENGTHS = 5; QPixmap * PianoRoll::s_whiteKeySmallPm = NULL; QPixmap * PianoRoll::s_whiteKeySmallPressedPm = NULL; QPixmap * PianoRoll::s_whiteKeyBigPm = NULL; QPixmap * PianoRoll::s_whiteKeyBigPressedPm = NULL; QPixmap * PianoRoll::s_blackKeyPm = NULL; QPixmap * PianoRoll::s_blackKeyPressedPm = NULL; QPixmap * PianoRoll::s_toolDraw = NULL; QPixmap * PianoRoll::s_toolErase = NULL; QPixmap * PianoRoll::s_toolSelect = NULL; QPixmap * PianoRoll::s_toolMove = NULL; QPixmap * PianoRoll::s_toolOpen = NULL; textFloat * PianoRoll::s_textFloat = NULL; // used for drawing of piano PianoRoll::PianoRollKeyTypes PianoRoll::prKeyOrder[] = { PR_WHITE_KEY_SMALL, PR_BLACK_KEY, PR_WHITE_KEY_BIG, PR_BLACK_KEY, PR_WHITE_KEY_SMALL, PR_WHITE_KEY_SMALL, PR_BLACK_KEY, PR_WHITE_KEY_BIG, PR_BLACK_KEY, PR_WHITE_KEY_BIG, PR_BLACK_KEY, PR_WHITE_KEY_SMALL } ; const int DEFAULT_PR_PPT = KEY_LINE_HEIGHT * DefaultStepsPerTact; PianoRoll::PianoRoll() : m_nemStr( QVector() ), m_noteEditMenu( NULL ), m_semiToneMarkerMenu( NULL ), m_zoomingModel(), m_quantizeModel(), m_noteLenModel(), m_pattern( NULL ), m_currentPosition(), m_recording( false ), m_currentNote( NULL ), m_action( ActionNone ), m_noteEditMode( NoteEditVolume ), m_moveBoundaryLeft( 0 ), m_moveBoundaryTop( 0 ), m_moveBoundaryRight( 0 ), m_moveBoundaryBottom( 0 ), m_mouseDownKey( 0 ), m_mouseDownTick( 0 ), m_lastMouseX( 0 ), m_lastMouseY( 0 ), m_oldNotesEditHeight( 100 ), m_notesEditHeight( 100 ), m_ppt( DEFAULT_PR_PPT ), m_lenOfNewNotes( MidiTime( 0, DefaultTicksPerTact/4 ) ), m_lastNoteVolume( DefaultVolume ), m_lastNotePanning( DefaultPanning ), m_startKey( INITIAL_START_KEY ), m_lastKey( 0 ), m_editMode( ModeDraw ), m_mouseDownLeft( false ), m_mouseDownRight( false ), m_scrollBack( false ), m_gridColor( 0, 0, 0 ), m_noteModeColor( 0, 0, 0 ), m_noteColor( 0, 0, 0 ), m_barColor( 0, 0, 0 ) { // gui names of edit modes m_nemStr.push_back( tr( "Note Volume" ) ); m_nemStr.push_back( tr( "Note Panning" ) ); QSignalMapper * signalMapper = new QSignalMapper( this ); m_noteEditMenu = new QMenu( this ); m_noteEditMenu->clear(); for( int i=0; isetMapping( act, i ); m_noteEditMenu->addAction( act ); } connect( signalMapper, SIGNAL(mapped(int)), this, SLOT(changeNoteEditMode(int)) ); signalMapper = new QSignalMapper( this ); m_semiToneMarkerMenu = new QMenu( this ); QAction * act = new QAction( tr("Mark/unmark current semitone"), this ); connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); signalMapper->setMapping( act, static_cast( stmaMarkCurrentSemiTone ) ); m_semiToneMarkerMenu->addAction( act ); act = new QAction( tr("Mark current scale"), this ); act->setEnabled( false ); connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); connect( this, SIGNAL(semiToneMarkerMenuScaleSetEnabled(bool)), act, SLOT(setEnabled(bool)) ); signalMapper->setMapping( act, static_cast( stmaMarkCurrentScale ) ); m_semiToneMarkerMenu->addAction( act ); act = new QAction( tr("Mark current chord"), this ); act->setEnabled( false ); connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); connect( this, SIGNAL(semiToneMarkerMenuChordSetEnabled(bool)), act, SLOT(setEnabled(bool)) ); signalMapper->setMapping( act, static_cast( stmaMarkCurrentChord ) ); m_semiToneMarkerMenu->addAction( act ); act = new QAction( tr("Unmark all"), this ); connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); signalMapper->setMapping( act, static_cast( stmaUnmarkAll ) ); m_semiToneMarkerMenu->addAction( act ); connect( signalMapper, SIGNAL(mapped(int)), this, SLOT(markSemiTone(int)) ); // init pixmaps if( s_whiteKeySmallPm == NULL ) { s_whiteKeySmallPm = new QPixmap( embed::getIconPixmap( "pr_white_key_small" ) ); } if( s_whiteKeySmallPressedPm == NULL ) { s_whiteKeySmallPressedPm = new QPixmap( embed::getIconPixmap( "pr_white_key_small_pressed" ) ); } if( s_whiteKeyBigPm == NULL ) { s_whiteKeyBigPm = new QPixmap( embed::getIconPixmap( "pr_white_key_big" ) ); } if( s_whiteKeyBigPressedPm == NULL ) { s_whiteKeyBigPressedPm = new QPixmap( embed::getIconPixmap( "pr_white_key_big_pressed" ) ); } if( s_blackKeyPm == NULL ) { s_blackKeyPm = new QPixmap( embed::getIconPixmap( "pr_black_key" ) ); } if( s_blackKeyPressedPm == NULL ) { s_blackKeyPressedPm = new QPixmap( embed::getIconPixmap( "pr_black_key_pressed" ) ); } if( s_toolDraw == NULL ) { s_toolDraw = new QPixmap( embed::getIconPixmap( "edit_draw" ) ); } if( s_toolErase == NULL ) { s_toolErase= new QPixmap( embed::getIconPixmap( "edit_erase" ) ); } if( s_toolSelect == NULL ) { s_toolSelect = new QPixmap( embed::getIconPixmap( "edit_select" ) ); } if( s_toolMove == NULL ) { s_toolMove = new QPixmap( embed::getIconPixmap( "edit_move" ) ); } if( s_toolOpen == NULL ) { s_toolOpen = new QPixmap( embed::getIconPixmap( "automation" ) ); } // init text-float if( s_textFloat == NULL ) { s_textFloat = new textFloat; } setAttribute( Qt::WA_OpaquePaintEvent, true ); // add time-line m_timeLine = new timeLine( WHITE_KEY_WIDTH, 32, m_ppt, engine::getSong()->getPlayPos( song::Mode_PlayPattern ), m_currentPosition, this ); connect( this, SIGNAL( positionChanged( const MidiTime & ) ), m_timeLine, SLOT( updatePosition( const MidiTime & ) ) ); connect( m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( updatePosition( const MidiTime & ) ) ); // update timeline when in record-accompany mode connect( engine::getSong()->getPlayPos( song::Mode_PlaySong ).m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( updatePositionAccompany( const MidiTime & ) ) ); // TODO /* connect( engine::getSong()->getPlayPos( song::Mode_PlayBB ).m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( updatePositionAccompany( const MidiTime & ) ) );*/ m_toolBar = new QWidget( this ); m_toolBar->setFixedHeight( 32 ); m_toolBar->move( 0, 0 ); m_toolBar->setAutoFillBackground( true ); QPalette pal; pal.setBrush( m_toolBar->backgroundRole(), embed::getIconPixmap( "toolbar_bg" ) ); m_toolBar->setPalette( pal ); QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); tb_layout->setMargin( 0 ); tb_layout->setSpacing( 0 ); // init control-buttons at the top m_playButton = new toolButton( embed::getIconPixmap( "play" ), tr( "Play/pause current pattern (Space)" ), this, SLOT( play() ), m_toolBar ); m_recordButton = new toolButton( embed::getIconPixmap( "record" ), tr( "Record notes from MIDI-device/channel-piano" ), this, SLOT( record() ), m_toolBar ); m_recordAccompanyButton = new toolButton( embed::getIconPixmap( "record_accompany" ), tr( "Record notes from MIDI-device/channel-piano while playing song or BB track" ), this, SLOT( recordAccompany() ), m_toolBar ); m_stopButton = new toolButton( embed::getIconPixmap( "stop" ), tr( "Stop playing of current pattern (Space)" ), this, SLOT( stop() ), m_toolBar ); m_playButton->setObjectName( "playButton" ); m_stopButton->setObjectName( "stopButton" ); m_recordButton->setObjectName( "recordButton" ); m_recordAccompanyButton->setObjectName( "recordAccompanyButton" ); m_playButton->setWhatsThis( tr( "Click here to play the current pattern. " "This is useful while editing it. The pattern is " "automatically looped when its end is reached." ) ); m_recordButton->setWhatsThis( tr( "Click here to record notes from a MIDI-" "device or the virtual test-piano of the according " "channel-window to the current pattern. When recording " "all notes you play will be written to this pattern " "and you can play and edit them afterwards." ) ); m_recordAccompanyButton->setWhatsThis( tr( "Click here to record notes from a MIDI-" "device or the virtual test-piano of the according " "channel-window to the current pattern. When recording " "all notes you play will be written to this pattern " "and you will hear the song or BB track in the background." ) ); m_stopButton->setWhatsThis( tr( "Click here to stop playback of current pattern." ) ); removeSelection(); // init scrollbars m_leftRightScroll = new QScrollBar( Qt::Horizontal, this ); m_leftRightScroll->setSingleStep( 1 ); connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ), this, SLOT( horScrolled( int ) ) ); m_topBottomScroll = new QScrollBar( Qt::Vertical, this ); m_topBottomScroll->setSingleStep( 1 ); m_topBottomScroll->setPageStep( 20 ); connect( m_topBottomScroll, SIGNAL( valueChanged( int ) ), this, SLOT( verScrolled( int ) ) ); // init edit-buttons at the top m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ), tr( "Draw mode (Shift+D)" ), this, SLOT( drawButtonToggled() ), m_toolBar ); m_drawButton->setCheckable( true ); m_drawButton->setChecked( true ); m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ), tr( "Erase mode (Shift+E)" ), this, SLOT( eraseButtonToggled() ), m_toolBar ); m_eraseButton->setCheckable( true ); m_selectButton = new toolButton( embed::getIconPixmap( "edit_select" ), tr( "Select mode (Shift+S)" ), this, SLOT( selectButtonToggled() ), m_toolBar ); m_selectButton->setCheckable( true ); m_detuneButton = new toolButton( embed::getIconPixmap( "automation"), tr( "Detune mode (Shift+T)" ), this, SLOT( detuneButtonToggled() ), m_toolBar ); m_detuneButton->setCheckable( true ); QButtonGroup * tool_button_group = new QButtonGroup( this ); tool_button_group->addButton( m_drawButton ); tool_button_group->addButton( m_eraseButton ); tool_button_group->addButton( m_selectButton ); tool_button_group->addButton( m_detuneButton ); tool_button_group->setExclusive( true ); m_drawButton->setWhatsThis( tr( "Click here and draw mode will be activated. In this " "mode you can add, resize and move notes. This " "is the default mode which is used most of the time. " "You can also press 'Shift+D' on your keyboard to " "activate this mode. In this mode, hold Ctrl to " "temporarily go into select mode." ) ); m_eraseButton->setWhatsThis( tr( "Click here and erase mode will be activated. In this " "mode you can erase notes. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); m_selectButton->setWhatsThis( tr( "Click here and select mode will be activated. " "In this mode you can select notes. Alternatively, " "you can hold Ctrl in draw mode to temporarily use " "select mode." ) ); m_detuneButton->setWhatsThis( tr( "Click here and detune mode will be activated. " "In this mode you can click a note to open its " "automation detuning. You can utilize this to slide " "notes from one to another. You can also press " "'Shift+T' on your keyboard to activate this mode." ) ); m_cutButton = new toolButton( embed::getIconPixmap( "edit_cut" ), tr( "Cut selected notes (Ctrl+X)" ), this, SLOT( cutSelectedNotes() ), m_toolBar ); m_copyButton = new toolButton( embed::getIconPixmap( "edit_copy" ), tr( "Copy selected notes (Ctrl+C)" ), this, SLOT( copySelectedNotes() ), m_toolBar ); m_pasteButton = new toolButton( embed::getIconPixmap( "edit_paste" ), tr( "Paste notes from clipboard " "(Ctrl+V)" ), this, SLOT( pasteNotes() ), m_toolBar ); m_cutButton->setWhatsThis( tr( "Click here and the selected notes will be cut into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); m_copyButton->setWhatsThis( tr( "Click here and the selected notes will be copied into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); m_pasteButton->setWhatsThis( tr( "Click here and the notes from the clipboard will be " "pasted at the first visible measure." ) ); QLabel * zoom_lbl = new QLabel( m_toolBar ); zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); // setup zooming-stuff for( int i = 0; i < 6; ++i ) { m_zoomingModel.addItem( QString::number( 25 << i ) + "%" ); } m_zoomingModel.setValue( m_zoomingModel.findText( "100%" ) ); connect( &m_zoomingModel, SIGNAL( dataChanged() ), this, SLOT( zoomingChanged() ) ); m_zoomingComboBox = new comboBox( m_toolBar ); m_zoomingComboBox->setModel( &m_zoomingModel ); m_zoomingComboBox->setFixedSize( 64, 22 ); // setup quantize-stuff QLabel * quantize_lbl = new QLabel( m_toolBar ); quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); m_quantizeModel.addItem( tr( "Note lock" ) ); for( int i = 0; i <= NUM_EVEN_LENGTHS; ++i ) { m_quantizeModel.addItem( "1/" + QString::number( 1 << i ) ); } for( int i = 0; i < NUM_TRIPLET_LENGTHS; ++i ) { m_quantizeModel.addItem( "1/" + QString::number( (1 << i) * 3 ) ); } m_quantizeModel.addItem( "1/192" ); m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); m_quantizeComboBox = new comboBox( m_toolBar ); m_quantizeComboBox->setModel( &m_quantizeModel ); m_quantizeComboBox->setFixedSize( 64, 22 ); connect( &m_quantizeModel, SIGNAL( dataChanged() ), this, SLOT( quantizeChanged() ) ); // setup note-len-stuff QLabel * note_len_lbl = new QLabel( m_toolBar ); note_len_lbl->setPixmap( embed::getIconPixmap( "note" ) ); m_noteLenModel.addItem( tr( "Last note" ), new PixmapLoader( "edit_draw" ) ); const QString pixmaps[] = { "whole", "half", "quarter", "eighth", "sixteenth", "thirtysecond", "triplethalf", "tripletquarter", "tripleteighth", "tripletsixteenth", "tripletthirtysecond" } ; for( int i = 0; i < NUM_EVEN_LENGTHS; ++i ) { m_noteLenModel.addItem( "1/" + QString::number( 1 << i ), new PixmapLoader( "note_" + pixmaps[i] ) ); } for( int i = 0; i < NUM_TRIPLET_LENGTHS; ++i ) { m_noteLenModel.addItem( "1/" + QString::number( (1 << i) * 3 ), new PixmapLoader( "note_" + pixmaps[i+NUM_EVEN_LENGTHS] ) ); } m_noteLenModel.setValue( 0 ); m_noteLenComboBox = new comboBox( m_toolBar ); m_noteLenComboBox->setModel( &m_noteLenModel ); m_noteLenComboBox->setFixedSize( 105, 22 ); // Note length change can cause a redraw if Q is set to lock connect( &m_noteLenModel, SIGNAL( dataChanged() ), this, SLOT( quantizeChanged() ) ); const InstrumentFunctionNoteStacking::ChordTable & chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); // setup scale-stuff QLabel * scale_lbl = new QLabel( m_toolBar ); scale_lbl->setPixmap( embed::getIconPixmap( "scale" ) ); m_scaleModel.addItem( tr("No scale") ); for( int i = 0; i < chord_table.size(); ++i ) { if( chord_table[i].isScale() ) { m_scaleModel.addItem( chord_table[i].getName() ); } } m_scaleModel.setValue( 0 ); m_scaleComboBox = new comboBox( m_toolBar ); m_scaleComboBox->setModel( &m_scaleModel ); m_scaleComboBox->setFixedSize( 105, 22 ); // change can update m_semiToneMarkerMenu connect( &m_scaleModel, SIGNAL( dataChanged() ), this, SLOT( updateSemiToneMarkerMenu() ) ); // setup chord-stuff QLabel * chord_lbl = new QLabel( m_toolBar ); chord_lbl->setPixmap( embed::getIconPixmap( "chord" ) ); m_chordModel.addItem( tr("No chord") ); for( int i = 0; i < chord_table.size(); ++i ) { if( ! chord_table[i].isScale() ) { m_chordModel.addItem( chord_table[i].getName() ); } } m_chordModel.setValue( 0 ); m_chordComboBox = new comboBox( m_toolBar ); m_chordComboBox->setModel( &m_chordModel ); m_chordComboBox->setFixedSize( 105, 22 ); // change can update m_semiToneMarkerMenu connect( &m_chordModel, SIGNAL( dataChanged() ), this, SLOT( updateSemiToneMarkerMenu() ) ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_playButton ); tb_layout->addWidget( m_recordButton ); tb_layout->addWidget( m_recordAccompanyButton ); tb_layout->addWidget( m_stopButton ); tb_layout->addSpacing( 7 ); tb_layout->addWidget( m_drawButton ); tb_layout->addWidget( m_eraseButton ); tb_layout->addWidget( m_selectButton ); tb_layout->addWidget( m_detuneButton ); tb_layout->addSpacing( 7 ); tb_layout->addWidget( m_cutButton ); tb_layout->addWidget( m_copyButton ); tb_layout->addWidget( m_pasteButton ); tb_layout->addSpacing( 7 ); m_timeLine->addToolButtons( m_toolBar ); tb_layout->addSpacing( 7 ); tb_layout->addWidget( zoom_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_zoomingComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( quantize_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_quantizeComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( note_len_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_noteLenComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( scale_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_scaleComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( chord_lbl ); tb_layout->addSpacing( 4 ); tb_layout->addWidget( m_chordComboBox ); tb_layout->addStretch(); m_zoomingComboBox->setWhatsThis( tr( "This controls the magnification of an axis. " "It can be helpful to choose magnification for a specific " "task. For ordinary editing, the magnification should be " "fitted to your smallest notes. " ) ); m_quantizeComboBox->setWhatsThis( tr( "The 'Q' stands for quantization, and controls the grid size " "notes and control points snap to. " "With smaller quantization values, you can draw shorter notes " "in Piano Roll, and more exact control points in the " "Automation Editor." ) ); m_noteLenComboBox->setWhatsThis( tr( "This lets you select the length of new notes. " "'Last Note' means that LMMS will use the note length of " "the note you last edited" ) ); m_scaleComboBox->setWhatsThis( tr( "The feature is directly connected to the context-menu " "on the virtual keyboard, to the left in Piano Roll. " "After you have chosen the scale you want " "in this drop-down menu, " "you can right click on a desired key in the virtual keyboard, " "and then choose 'Mark current Scale'. " "LMMS will highlight all notes that belongs to the chosen scale, " "and in the key you have selected!" ) ); m_chordComboBox->setWhatsThis( tr( "Let you select a chord which LMMS then can draw or highlight." "You can find the most common chords in this drop-down menu. " "After you have selected a chord, click anywhere to place the chord, and right " "click on the virtual keyboard to open context menu and highlight the chord. " "To return to single note placement, you need to choose 'No chord' " "in this drop-down menu." ) ); // setup our actual window setFocusPolicy( Qt::StrongFocus ); setFocus(); setWindowIcon( embed::getIconPixmap( "piano" ) ); setCurrentPattern( NULL ); setMouseTracking( true ); setMinimumSize( tb_layout->minimumSize().width(), 160 ); // add us to workspace if( engine::mainWindow()->workspace() ) { engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setMinimumSize( tb_layout->minimumSize().width()+10, 200 ); parentWidget()->resize( tb_layout->minimumSize().width()+10, INITIAL_PIANOROLL_HEIGHT ); parentWidget()->move( 5, 5 ); parentWidget()->hide(); } else { resize( tb_layout->minimumSize().width(), INITIAL_PIANOROLL_HEIGHT ); hide(); } connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( update() ) ); } void PianoRoll::reset() { m_lastNoteVolume = DefaultVolume; m_lastNotePanning = DefaultPanning; } void PianoRoll::changeNoteEditMode( int i ) { m_noteEditMode = (noteEditMode) i; repaint(); } void PianoRoll::markSemiTone( int i ) { const int key = getKey( mapFromGlobal( m_semiToneMarkerMenu->pos() ).y() ); const InstrumentFunctionNoteStacking::Chord * chord = 0; switch( static_cast( i ) ) { case stmaUnmarkAll: m_markedSemiTones.clear(); break; case stmaMarkCurrentSemiTone: { QList::iterator i = qFind( m_markedSemiTones.begin(), m_markedSemiTones.end(), key ); if( i != m_markedSemiTones.end() ) { m_markedSemiTones.erase( i ); } else { m_markedSemiTones.push_back( key ); } break; } case stmaMarkCurrentScale: chord = & InstrumentFunctionNoteStacking::ChordTable::getInstance() .getScaleByName( m_scaleModel.currentText() ); case stmaMarkCurrentChord: { if( ! chord ) { chord = & InstrumentFunctionNoteStacking::ChordTable::getInstance() .getChordByName( m_chordModel.currentText() ); } if( chord->isEmpty() ) { break; } else if( chord->isScale() ) { m_markedSemiTones.clear(); } const int first = chord->isScale() ? 0 : key; const int last = chord->isScale() ? NumKeys : key + chord->last(); const int cap = ( chord->isScale() || chord->last() == 0 ) ? KeysPerOctave : chord->last(); for( int i = first; i <= last; i++ ) { //if( chord->hasSemiTone( std::abs( key - i ) % cap ) ) if( chord->hasSemiTone( ( i + cap - ( key % cap ) ) % cap ) ) { m_markedSemiTones.push_back( i ); } } break; } default: ; } qSort( m_markedSemiTones.begin(), m_markedSemiTones.end(), qGreater() ); QList::iterator new_end = std::unique( m_markedSemiTones.begin(), m_markedSemiTones.end() ); m_markedSemiTones.erase( new_end, m_markedSemiTones.end() ); } PianoRoll::~PianoRoll() { } void PianoRoll::setCurrentPattern( Pattern* newPattern ) { if( hasValidPattern() ) { m_pattern->instrumentTrack()->disconnect( this ); } // force the song-editor to stop playing if it played pattern before if( engine::getSong()->isPlaying() && engine::getSong()->playMode() == song::Mode_PlayPattern ) { engine::getSong()->playPattern( NULL ); } // set new data m_pattern = newPattern; m_currentPosition = 0; m_currentNote = NULL; m_startKey = INITIAL_START_KEY; if( hasValidPattern() == false ) { //resizeEvent( NULL ); setWindowTitle( tr( "Piano-Roll - no pattern" ) ); update(); emit currentPatternChanged(); return; } m_leftRightScroll->setValue( 0 ); const NoteVector & notes = m_pattern->notes(); int central_key = 0; if( notes.empty() == false ) { // determine the central key so that we can scroll to it int total_notes = 0; for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { if( ( *it )->length() > 0 ) { central_key += ( *it )->key(); ++total_notes; } } if( total_notes > 0 ) { central_key = central_key / total_notes - ( KeysPerOctave * NumOctaves - m_totalKeysToScroll ) / 2; m_startKey = tLimit( central_key, 0, NumOctaves * KeysPerOctave ); } } // resizeEvent() does the rest for us (scrolling, range-checking // of start-notes and so on...) resizeEvent( NULL ); // make sure to always get informed about the pattern being destroyed connect( m_pattern, SIGNAL( destroyedPattern( Pattern* ) ), this, SLOT( hidePattern( Pattern* ) ) ); connect( m_pattern->instrumentTrack(), SIGNAL( midiNoteOn( const note& ) ), this, SLOT( startRecordNote( const note& ) ) ); connect( m_pattern->instrumentTrack(), SIGNAL( midiNoteOff( const note& ) ), this, SLOT( finishRecordNote( const note& ) ) ); connect( m_pattern->instrumentTrack()->pianoModel(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); setWindowTitle( tr( "Piano-Roll - %1" ).arg( m_pattern->name() ) ); update(); emit currentPatternChanged(); } void PianoRoll::hidePattern( Pattern* pattern ) { if( m_pattern == pattern ) { setCurrentPattern( NULL ); } } void PianoRoll::saveSettings( QDomDocument & _doc, QDomElement & _this ) { MainWindow::saveWidgetState( this, _this ); } void PianoRoll::loadSettings( const QDomElement & _this ) { MainWindow::restoreWidgetState( this, _this ); } void PianoRoll::setPauseIcon( bool pause ) { if( pause == true ) { m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); } else { m_playButton->setIcon( embed::getIconPixmap( "play" ) ); } } /** \brief qproperty access implementation */ QColor PianoRoll::gridColor() const { return m_gridColor; } void PianoRoll::setGridColor( const QColor & c ) { m_gridColor = c; } QColor PianoRoll::noteModeColor() const { return m_noteModeColor; } void PianoRoll::setNoteModeColor( const QColor & c ) { m_noteModeColor = c; } QColor PianoRoll::noteColor() const { return m_noteColor; } void PianoRoll::setNoteColor( const QColor & c ) { m_noteColor = c; } QColor PianoRoll::barColor() const { return m_barColor; } void PianoRoll::setBarColor( const QColor & c ) { m_barColor = c; } inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y, int _width, note * _n, const QColor & noteCol ) { ++_x; ++_y; _width -= 2; if( _width <= 0 ) { _width = 2; } int volVal = qMin( 255, 25 + (int) ( ( (float)( _n->getVolume() - MinVolume ) ) / ( (float)( MaxVolume - MinVolume ) ) * 230.0f) ); float rightPercent = qMin( 1.0f, ( (float)( _n->getPanning() - PanningLeft ) ) / ( (float)( PanningRight - PanningLeft ) ) * 2.0f ); float leftPercent = qMin( 1.0f, ( (float)( PanningRight - _n->getPanning() ) ) / ( (float)( PanningRight - PanningLeft ) ) * 2.0f ); QColor col = QColor( noteCol ); if( _n->length() < 0 ) { //step note col.setRgb( 0, 255, 0 ); _p.fillRect( _x, _y, _width, KEY_LINE_HEIGHT - 2, col ); } else if( _n->selected() ) { col.setRgb( 0x00, 0x40, 0xC0 ); _p.fillRect( _x, _y, _width, KEY_LINE_HEIGHT - 2, col ); } else { // adjust note to make it a bit faded if it has a lower volume // in stereo using gradients QColor lcol = QColor::fromHsv( col.hue(), col.saturation(), volVal * leftPercent ); QColor rcol = QColor::fromHsv( col.hue(), col.saturation(), volVal * rightPercent ); col = QColor::fromHsv( col.hue(), col.saturation(), volVal ); QLinearGradient gradient( _x, _y, _x+_width, _y+KEY_LINE_HEIGHT ); gradient.setColorAt( 0, lcol ); gradient.setColorAt( 1, rcol ); _p.setBrush( gradient ); _p.setPen( Qt::NoPen ); _p.drawRect( _x, _y, _width, KEY_LINE_HEIGHT-1 ); } // hilighting lines around the note _p.setPen( Qt::SolidLine ); _p.setBrush( Qt::NoBrush ); col = QColor( noteCol ); _p.setPen( QColor::fromHsv( col.hue(), col.saturation(), qMin( 255, volVal*1.7f ) ) ); _p.drawLine( _x, _y, _x + _width, _y ); _p.drawLine( _x, _y, _x, _y + KEY_LINE_HEIGHT - 2 ); col = QColor( noteCol ); _p.setPen( QColor::fromHsv( col.hue(), col.saturation(), volVal/1.7 ) ); _p.drawLine( _x + _width, _y, _x + _width, _y + KEY_LINE_HEIGHT - 2 ); _p.drawLine( _x, _y + KEY_LINE_HEIGHT - 2, _x + _width, _y + KEY_LINE_HEIGHT - 2 ); // that little tab thing on the end hinting at the user // to resize the note _p.setPen( noteCol.lighter( 200 ) ); if( _width > 2 ) { _p.drawLine( _x + _width - 3, _y + 2, _x + _width - 3, _y + KEY_LINE_HEIGHT - 4 ); } _p.drawLine( _x + _width - 1, _y + 2, _x + _width - 1, _y + KEY_LINE_HEIGHT - 4 ); _p.drawLine( _x + _width - 2, _y + 2, _x + _width - 2, _y + KEY_LINE_HEIGHT - 4 ); } inline void PianoRoll::drawDetuningInfo( QPainter & _p, note * _n, int _x, int _y ) { int middle_y = _y + KEY_LINE_HEIGHT / 2; _p.setPen( noteColor() ); int old_x = 0; int old_y = 0; timeMap & map = _n->detuning()->automationPattern()->getTimeMap(); for( timeMap::ConstIterator it = map.begin(); it != map.end(); ++it ) { int pos_ticks = it.key(); if( pos_ticks > _n->length() ) { break; } int pos_x = _x + pos_ticks * m_ppt / MidiTime::ticksPerTact(); const float level = it.value(); int pos_y = (int)( middle_y - level * KEY_LINE_HEIGHT ); if( old_x != 0 && old_y != 0 ) { switch( _n->detuning()->automationPattern()->progressionType() ) { case AutomationPattern::DiscreteProgression: _p.drawLine( old_x, old_y, pos_x, old_y ); _p.drawLine( pos_x, old_y, pos_x, pos_y ); break; case AutomationPattern::CubicHermiteProgression: /* TODO */ case AutomationPattern::LinearProgression: _p.drawLine( old_x, old_y, pos_x, pos_y ); break; } } _p.drawLine( pos_x - 1, pos_y, pos_x + 1, pos_y ); _p.drawLine( pos_x, pos_y - 1, pos_x, pos_y + 1 ); old_x = pos_x; old_y = pos_y; } } void PianoRoll::removeSelection() { m_selectStartTick = 0; m_selectedTick = 0; m_selectStartKey = 0; m_selectedKeys = 0; } void PianoRoll::clearSelectedNotes() { if( m_pattern != NULL ) { // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { ( *it )->setSelected( false ); ++it; } } } void PianoRoll::closeEvent( QCloseEvent * _ce ) { QApplication::restoreOverrideCursor(); if( parentWidget() ) { parentWidget()->hide(); } else { hide(); } _ce->ignore(); } void PianoRoll::shiftSemiTone( int amount ) // shift notes by amount semitones { bool useAllNotes = ! isSelection(); const NoteVector & notes = m_pattern->notes(); for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { // if none are selected, move all notes, otherwise // only move selected notes if( useAllNotes || ( *it )->selected() ) { ( *it )->setKey( ( *it )->key() + amount ); } } // we modified the song update(); engine::songEditor()->update(); } void PianoRoll::shiftPos( int amount ) //shift notes pos by amount { bool useAllNotes = ! isSelection(); const NoteVector & notes = m_pattern->notes(); bool first = true; for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { // if none are selected, move all notes, otherwise // only move selected notes if( ( *it )->selected() || (useAllNotes && ( *it )->length() > 0) ) { // don't let notes go to out of bounds if( first ) { m_moveBoundaryLeft = ( *it )->pos(); if( m_moveBoundaryLeft + amount < 0 ) { amount += 0 - (amount + m_moveBoundaryLeft); } first = false; } ( *it )->setPos( ( *it )->pos() + amount ); } } // we modified the song update(); engine::songEditor()->update(); } bool PianoRoll::isSelection() const // are any notes selected? { const NoteVector & notes = m_pattern->notes(); for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { if( ( *it )->selected() ) { return true; } } return false; } int PianoRoll::selectionCount() const // how many notes are selected? { int sum = 0; const NoteVector & notes = m_pattern->notes(); for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { if( ( *it )->selected() ) { ++sum; } } return sum; } void PianoRoll::keyPressEvent( QKeyEvent* event ) { if( hasValidPattern() && event->modifiers() == Qt::NoModifier ) { const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave; if( event->isAutoRepeat() == false && key_num > -1 ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key_num ); event->accept(); } } switch( event->key() ) { case Qt::Key_Up: if( ( event->modifiers() & Qt::ControlModifier ) && m_action == ActionNone ) { // shift selection up an octave // if nothing selected, shift _everything_ shiftSemiTone( +12 ); } else if((event->modifiers() & Qt::ShiftModifier) && m_action == ActionNone) { // Move selected notes up by one semitone shiftSemiTone( 1 ); } else { // scroll m_topBottomScroll->setValue( m_topBottomScroll->value() - cm_scrollAmtVert ); // if they are moving notes around or resizing, // recalculate the note/resize position if( m_action == ActionMoveNote || m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, event->modifiers() & Qt::AltModifier, event->modifiers() & Qt::ShiftModifier ); } } event->accept(); break; case Qt::Key_Down: if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone ) { // shift selection down an octave // if nothing selected, shift _everything_ shiftSemiTone( -12 ); } else if((event->modifiers() & Qt::ShiftModifier) && m_action == ActionNone) { // Move selected notes down by one semitone shiftSemiTone( -1 ); } else { // scroll m_topBottomScroll->setValue( m_topBottomScroll->value() + cm_scrollAmtVert ); // if they are moving notes around or resizing, // recalculate the note/resize position if( m_action == ActionMoveNote || m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, event->modifiers() & Qt::AltModifier, event->modifiers() & Qt::ShiftModifier ); } } event->accept(); break; case Qt::Key_Left: if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone ) { // Move selected notes by one bar to the left shiftPos( - MidiTime::ticksPerTact() ); } else if( event->modifiers() & Qt::ShiftModifier && m_action == ActionNone) { // move notes bool quantized = ! ( event->modifiers() & Qt::AltModifier ); int amt = quantized ? quantization() : 1; shiftPos( -amt ); } else { // scroll m_leftRightScroll->setValue( m_leftRightScroll->value() - cm_scrollAmtHoriz ); // if they are moving notes around or resizing, // recalculate the note/resize position if( m_action == ActionMoveNote || m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, event->modifiers() & Qt::AltModifier, event->modifiers() & Qt::ShiftModifier ); } } event->accept(); break; case Qt::Key_Right: if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone) { // Move selected notes by one bar to the right shiftPos( MidiTime::ticksPerTact() ); } else if( event->modifiers() & Qt::ShiftModifier && m_action == ActionNone) { // move notes bool quantized = !( event->modifiers() & Qt::AltModifier ); int amt = quantized ? quantization() : 1; shiftPos( +amt ); } else { // scroll m_leftRightScroll->setValue( m_leftRightScroll->value() + cm_scrollAmtHoriz ); // if they are moving notes around or resizing, // recalculate the note/resize position if( m_action == ActionMoveNote || m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, event->modifiers() & Qt::AltModifier, event->modifiers() & Qt::ShiftModifier ); } } event->accept(); break; case Qt::Key_C: if( event->modifiers() & Qt::ControlModifier ) { event->accept(); copySelectedNotes(); } break; case Qt::Key_X: if( event->modifiers() & Qt::ControlModifier ) { event->accept(); cutSelectedNotes(); } break; case Qt::Key_V: if( event->modifiers() & Qt::ControlModifier ) { event->accept(); pasteNotes(); } break; case Qt::Key_A: if( event->modifiers() & Qt::ControlModifier ) { event->accept(); selectAll(); update(); } break; case Qt::Key_D: if( event->modifiers() & Qt::ShiftModifier ) { event->accept(); m_drawButton->setChecked( true ); } break; case Qt::Key_E: if( event->modifiers() & Qt::ShiftModifier ) { event->accept(); m_eraseButton->setChecked( true ); } break; case Qt::Key_S: if( event->modifiers() & Qt::ShiftModifier ) { event->accept(); m_selectButton->setChecked( true ); } break; case Qt::Key_T: if( event->modifiers() & Qt::ShiftModifier ) { event->accept(); m_detuneButton->setChecked( true ); } break; case Qt::Key_Delete: deleteSelectedNotes(); event->accept(); break; case Qt::Key_Space: if( engine::getSong()->isPlaying() ) { stop(); } else { play(); } event->accept(); break; case Qt::Key_Home: m_timeLine->pos().setTicks( 0 ); m_timeLine->updatePosition(); event->accept(); break; case Qt::Key_0: case Qt::Key_1: case Qt::Key_2: case Qt::Key_3: case Qt::Key_4: case Qt::Key_5: case Qt::Key_6: case Qt::Key_7: case Qt::Key_8: case Qt::Key_9: { int len = 1 + event->key() - Qt::Key_0; if( len == 10 ) { len = 0; } if( event->modifiers() & ( Qt::ControlModifier | Qt::KeypadModifier ) ) { m_noteLenModel.setValue( len ); event->accept(); } else if( event->modifiers() & Qt::AltModifier ) { m_quantizeModel.setValue( len ); event->accept(); } break; } case Qt::Key_Control: m_ctrlMode = m_editMode; m_editMode = ModeSelect; QApplication::changeOverrideCursor( Qt::ArrowCursor ); event->accept(); break; default: break; } update(); } void PianoRoll::keyReleaseEvent( QKeyEvent* event ) { if( hasValidPattern() && event->modifiers() == Qt::NoModifier ) { const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave; if( event->isAutoRepeat() == false && key_num > -1 ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( key_num ); event->accept(); } } switch( event->key() ) { case Qt::Key_Control: computeSelectedNotes( event->modifiers() & Qt::ShiftModifier); m_editMode = m_ctrlMode; update(); break; // update after undo/redo case Qt::Key_Z: case Qt::Key_R: if( hasValidPattern() && event->modifiers() == Qt::ControlModifier ) { update(); } break; } update(); } void PianoRoll::leaveEvent( QEvent * _e ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } QWidget::leaveEvent( _e ); s_textFloat->hide(); } inline int PianoRoll::noteEditTop() const { return height() - PR_BOTTOM_MARGIN - m_notesEditHeight + NOTE_EDIT_RESIZE_BAR; } inline int PianoRoll::noteEditBottom() const { return height() - PR_BOTTOM_MARGIN; } inline int PianoRoll::noteEditRight() const { return width() - PR_RIGHT_MARGIN; } inline int PianoRoll::noteEditLeft() const { return WHITE_KEY_WIDTH; } inline int PianoRoll::keyAreaTop() const { return PR_TOP_MARGIN; } inline int PianoRoll::keyAreaBottom() const { return height() - PR_BOTTOM_MARGIN - m_notesEditHeight; } void PianoRoll::mousePressEvent( QMouseEvent * _me ) { m_startedWithShift = _me->modifiers() & Qt::ShiftModifier; if( hasValidPattern() == false ) { return; } if( m_editMode == ModeEditDetuning && noteUnderMouse() ) { noteUnderMouse()->editDetuningPattern(); return; } // if holding control, go to selection mode if( _me->modifiers() & Qt::ControlModifier && m_editMode != ModeSelect ) { m_ctrlMode = m_editMode; m_editMode = ModeSelect; QApplication::changeOverrideCursor( QCursor( Qt::ArrowCursor ) ); update(); } // keep track of the point where the user clicked down if( _me->button() == Qt::LeftButton ) { m_moveStartX = _me->x(); m_moveStartY = _me->y(); } if( _me->y() > keyAreaBottom() && _me->y() < noteEditTop() ) { // resizing the note edit area m_action = ActionResizeNoteEditArea; m_oldNotesEditHeight = m_notesEditHeight; return; } if( _me->y() > PR_TOP_MARGIN ) { bool edit_note = ( _me->y() > noteEditTop() ); int key_num = getKey( _me->y() ); int x = _me->x(); if( x > WHITE_KEY_WIDTH ) { // set, move or resize note x -= WHITE_KEY_WIDTH; // get tick in which the user clicked int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin()+notes.size()-1; // loop through whole note-vector... for( int i = 0; i < notes.size(); ++i ) { MidiTime len = ( *it )->length(); if( len < 0 ) { len = 4; } // and check whether the user clicked on an // existing note or an edit-line if( pos_ticks >= ( *it )->pos() && len > 0 && ( ( edit_note == false && pos_ticks <= ( *it )->pos() + len && ( *it )->key() == key_num ) || ( edit_note == true && pos_ticks <= ( *it )->pos() + NE_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt ) ) ) { break; } --it; } // first check whether the user clicked in note-edit- // area if( edit_note == true ) { m_pattern->addJournalCheckPoint(); // scribble note edit changes mouseMoveEvent( _me ); return; } // left button?? else if( _me->button() == Qt::LeftButton && m_editMode == ModeDraw ) { // whether this action creates new note(s) or not bool is_new_note = false; note * created_new_note = NULL; // did it reach end of vector because // there's no note?? if( it == notes.begin()-1 ) { is_new_note = true; m_pattern->addJournalCheckPoint(); m_pattern->setType( Pattern::MelodyPattern ); // then set new note // clear selection and select this new note clearSelectedNotes(); // +32 to quanitize the note correctly when placing notes with // the mouse. We do this here instead of in note.quantized // because live notes should still be quantized at the half. MidiTime note_pos( pos_ticks - ( quantization() / 2 ) ); MidiTime note_len( newNoteLen() ); note new_note( note_len, note_pos, key_num ); new_note.setSelected( true ); new_note.setPanning( m_lastNotePanning ); new_note.setVolume( m_lastNoteVolume ); created_new_note = m_pattern->addNote( new_note ); const InstrumentFunctionNoteStacking::Chord & chord = InstrumentFunctionNoteStacking::ChordTable::getInstance() .getChordByName( m_chordModel.currentText() ); if( ! chord.isEmpty() ) { // if a chord is selected, create following notes in chord // or arpeggio mode const bool arpeggio = _me->modifiers() & Qt::ShiftModifier; for( int i = 1; i < chord.size(); i++ ) { if( arpeggio ) { note_pos += note_len; } note new_note( note_len, note_pos, key_num + chord[i] ); new_note.setSelected( true ); new_note.setPanning( m_lastNotePanning ); new_note.setVolume( m_lastNoteVolume ); m_pattern->addNote( new_note ); } } // reset it so that it can be used for // ops (move, resize) after this // code-block it = notes.begin(); while( it != notes.end() && *it != created_new_note ) { ++it; } } m_currentNote = *it; m_lastNotePanning = ( *it )->getPanning(); m_lastNoteVolume = ( *it )->getVolume(); m_lenOfNewNotes = ( *it )->length(); // remember which key and tick we started with m_mouseDownKey = m_startKey; m_mouseDownTick = m_currentPosition; bool first = true; it = notes.begin(); while( it != notes.end() ) { // remember note starting positions ( *it )->setOldKey( ( *it )->key() ); ( *it )->setOldPos( ( *it )->pos() ); ( *it )->setOldLength( ( *it )->length() ); if( ( *it )->selected() ) { // figure out the bounding box of all the selected notes if( first ) { m_moveBoundaryLeft = ( *it )->pos().getTicks(); m_moveBoundaryRight = ( *it )->pos() + ( *it )->length(); m_moveBoundaryBottom = ( *it )->key(); m_moveBoundaryTop = ( *it )->key(); first = false; } else { m_moveBoundaryLeft = qMin( ( *it )->pos().getTicks(), m_moveBoundaryLeft ); m_moveBoundaryRight = qMax( ( *it )->pos() + ( *it )->length(), m_moveBoundaryRight ); m_moveBoundaryBottom = qMin( ( *it )->key(), m_moveBoundaryBottom ); m_moveBoundaryTop = qMax( ( *it )->key(), m_moveBoundaryTop ); } } ++it; } // if clicked on an unselected note, remove selection // and select that new note if( ! m_currentNote->selected() ) { clearSelectedNotes(); m_currentNote->setSelected( true ); m_moveBoundaryLeft = m_currentNote->pos().getTicks(); m_moveBoundaryRight = m_currentNote->pos() + m_currentNote->length(); m_moveBoundaryBottom = m_currentNote->key(); m_moveBoundaryTop = m_currentNote->key(); } // clicked at the "tail" of the note? if( pos_ticks*m_ppt/MidiTime::ticksPerTact() > ( m_currentNote->pos() + m_currentNote->length() )*m_ppt/ MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH && m_currentNote->length() > 0 ) { m_pattern->addJournalCheckPoint(); // then resize the note m_action = ActionResizeNote; // set resize-cursor QCursor c( Qt::SizeHorCursor ); QApplication::setOverrideCursor( c ); } else { if( !created_new_note ) { m_pattern->addJournalCheckPoint(); } // otherwise move it m_action = ActionMoveNote; // set move-cursor QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); // if they're holding shift, copy all selected notes if( //*it != created_new_note && ! is_new_note && _me->modifiers() & Qt::ShiftModifier ) { // vector to hold new notes until we're through the loop QVector newNotes; it = notes.begin(); while( it != notes.end() ) { if( ( *it )->selected() ) { // copy this note note noteCopy( (note) **it ); newNotes.push_back( noteCopy ); } ++it; } if( newNotes.size() != 0 ) { //put notes from vector into piano roll for( int i=0; iaddNote( newNotes[i] ); newNote->setSelected( false ); } // added new notes, so must update engine, song, etc engine::getSong()->setModified(); update(); engine::songEditor()->update(); } } // play the note testPlayNote( m_currentNote ); } engine::getSong()->setModified(); } else if( ( _me->buttons() == Qt::RightButton && m_editMode == ModeDraw ) || m_editMode == ModeErase ) { // erase single note m_mouseDownRight = true; if( it != notes.begin()-1 ) { m_pattern->addJournalCheckPoint(); if( ( *it )->length() > 0 ) { m_pattern->removeNote( *it ); } else { ( *it )->setLength( 0 ); m_pattern->dataChanged(); } engine::getSong()->setModified(); } } else if( _me->button() == Qt::LeftButton && m_editMode == ModeSelect ) { // select an area of notes m_selectStartTick = pos_ticks; m_selectedTick = 0; m_selectStartKey = key_num; m_selectedKeys = 1; m_action = ActionSelectNotes; // call mousemove to fix glitch where selection // appears in wrong spot on mousedown mouseMoveEvent( _me ); } update(); } else if( _me->y() < keyAreaBottom() ) { // clicked on keyboard on the left if( _me->buttons() == Qt::RightButton ) { // right click, tone marker contextual menu m_semiToneMarkerMenu->popup( mapToGlobal( QPoint( _me->x(), _me->y() ) ) ); } else { // left click - play the note m_lastKey = key_num; //if( ! m_recording && ! engine::getSong()->isPlaying() ) { int v = ( (float) x ) / ( (float) WHITE_KEY_WIDTH ) * MidiDefaultVelocity; m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key_num, v ); } } } else { if( _me->buttons() == Qt::LeftButton ) { // clicked in the box below the keys to the left of note edit area m_noteEditMode = (noteEditMode)(((int)m_noteEditMode)+1); if( m_noteEditMode == NoteEditCount ) { m_noteEditMode = (noteEditMode)0; } repaint(); } else if( _me->buttons() == Qt::RightButton ) { // pop menu asking which one they want to edit m_noteEditMenu->popup( mapToGlobal( QPoint( _me->x(), _me->y() ) ) ); } } } } void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) { if( hasValidPattern() == false ) { return; } // if they clicked in the note edit area, enter value for the volume bar if( _me->x() > noteEditLeft() && _me->x() < noteEditRight() && _me->y() > noteEditTop() && _me->y() < noteEditBottom() ) { // get values for going through notes int pixel_range = 4; int x = _me->x() - WHITE_KEY_WIDTH; const int ticks_start = ( x-pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; const int ticks_end = ( x+pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; const int ticks_middle = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get note-vector of current pattern NoteVector notes; notes += m_pattern->notes(); // go through notes to figure out which one we want to change NoteVector nv; foreach( note * i, notes ) { if( i->pos().getTicks() >= ticks_start && i->pos().getTicks() <= ticks_end && i->length().getTicks() != 0 && ( i->selected() || ! isSelection() ) ) { nv += i; } } // make sure we're on a note if( nv.size() > 0 ) { note * closest = NULL; int closest_dist = 9999999; // if we caught multiple notes, find the closest... if( nv.size() > 1 ) { foreach( note * i, nv ) { const int dist = qAbs( i->pos().getTicks() - ticks_middle ); if( dist < closest_dist ) { closest = i; closest_dist = dist; } } // ... then remove all notes from the vector that aren't on the same exact time NoteVector::Iterator it = nv.begin(); while( it != nv.end() ) { if( ( *it )->pos().getTicks() != closest->pos().getTicks() ) { it = nv.erase( it ); } else { it++; } } } enterValue( &nv ); } } } void PianoRoll::testPlayNote( note * n ) { m_lastKey = n->key(); if( n->isPlaying() == false && m_recording == false ) { n->setIsPlaying( true ); const int baseVelocity = m_pattern->instrumentTrack()->midiPort()->baseVelocity(); m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( n->key(), n->midiVelocity( baseVelocity ) ); MidiEvent event( MidiMetaEvent, -1, n->key(), panningToMidi( n->getPanning() ) ); event.setMetaEvent( MidiNotePanning ); m_pattern->instrumentTrack()->processInEvent( event, 0 ); } } void PianoRoll::pauseTestNotes( bool _pause ) { const NoteVector & notes = m_pattern->notes(); NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { if( ( *it )->isPlaying() ) { if( _pause ) { // stop note m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( ( *it )->key() ); } else { // start note ( *it )->setIsPlaying( false ); testPlayNote( *it ); } } ++it; } } void PianoRoll::testPlayKey( int key, int velocity, int pan ) { // turn off old key m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( m_lastKey ); // remember which one we're playing m_lastKey = key; // play new key m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key, velocity ); } void PianoRoll::computeSelectedNotes(bool shift) { if( m_selectStartTick == 0 && m_selectedTick == 0 && m_selectStartKey == 0 && m_selectedKeys == 0 ) { // don't bother, there's no selection return; } // setup selection-vars int sel_pos_start = m_selectStartTick; int sel_pos_end = m_selectStartTick+m_selectedTick; if( sel_pos_start > sel_pos_end ) { qSwap( sel_pos_start, sel_pos_end ); } int sel_key_start = m_selectStartKey - m_startKey + 1; int sel_key_end = sel_key_start + m_selectedKeys; if( sel_key_start > sel_key_end ) { qSwap( sel_key_start, sel_key_end ); } //int y_base = noteEditTop() - 1; if( hasValidPattern() == true ) { const NoteVector & notes = m_pattern->notes(); for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { // make a new selection unless they're holding shift if( ! shift ) { ( *it )->setSelected( false ); } int len_ticks = ( *it )->length(); if( len_ticks == 0 ) { continue; } else if( len_ticks < 0 ) { len_ticks = 4; } const int key = ( *it )->key() - m_startKey + 1; int pos_ticks = ( *it )->pos(); // if the selection even barely overlaps the note if( key > sel_key_start && key <= sel_key_end && pos_ticks + len_ticks > sel_pos_start && pos_ticks < sel_pos_end ) { // remove from selection when holding shift if( shift && ( *it )->selected() ) { ( *it )->setSelected(false); } else { ( *it )->setSelected(true); } } } } removeSelection(); update(); } void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) { s_textFloat->hide(); bool mustRepaint = false; if( _me->button() & Qt::LeftButton ) { m_mouseDownLeft = false; mustRepaint = true; } if( _me->button() & Qt::RightButton ) { m_mouseDownRight = false; mustRepaint = true; } if( _me->button() & Qt::LeftButton && m_editMode == ModeSelect && m_action == ActionSelectNotes ) { // select the notes within the selection rectangle and // then destroy the selection rectangle computeSelectedNotes( _me->modifiers() & Qt::ShiftModifier ); } else if( _me->button() & Qt::LeftButton && m_action == ActionMoveNote ) { // we moved one or more notes so they have to be // moved properly according to new starting- // time in the note-array of pattern m_pattern->rearrangeAllNotes(); } if( _me->button() & Qt::LeftButton && ( m_action == ActionMoveNote || m_action == ActionResizeNote ) ) { // if we only moved one note, deselect it so we can // edit the notes in the note edit area if( selectionCount() == 1 ) { clearSelectedNotes(); } } if( hasValidPattern() == true ) { // turn off all notes that are playing const NoteVector & notes = m_pattern->notes(); NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { if( ( *it )->isPlaying() ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( ( *it )->key() ); ( *it )->setIsPlaying( false ); } ++it; } // stop playing keys that we let go of m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( m_lastKey ); } m_currentNote = NULL; m_action = ActionNone; if( m_editMode == ModeDraw ) { QApplication::restoreOverrideCursor(); } if( mustRepaint ) { repaint(); } } void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) { if( hasValidPattern() == false ) { update(); return; } if( m_action == ActionNone && _me->buttons() == 0 ) { if( _me->y() > keyAreaBottom() && _me->y() < noteEditTop() ) { QApplication::setOverrideCursor( QCursor( Qt::SizeVerCursor ) ); return; } } else if( m_action == ActionResizeNoteEditArea ) { // change m_notesEditHeight and then repaint m_notesEditHeight = tLimit( m_oldNotesEditHeight - ( _me->y() - m_moveStartY ), NOTE_EDIT_MIN_HEIGHT, height() - PR_TOP_MARGIN - NOTE_EDIT_RESIZE_BAR - PR_BOTTOM_MARGIN - KEY_AREA_MIN_HEIGHT ); repaint(); return; } if( _me->y() > PR_TOP_MARGIN || m_action != ActionNone ) { bool edit_note = ( _me->y() > noteEditTop() ) && m_action != ActionSelectNotes; int key_num = getKey( _me->y() ); int x = _me->x(); // see if they clicked on the keyboard on the left if( x < WHITE_KEY_WIDTH && m_action == ActionNone && ! edit_note && key_num != m_lastKey && _me->buttons() & Qt::LeftButton ) { // clicked on a key, play the note testPlayKey( key_num, ( (float) x ) / ( (float) WHITE_KEY_WIDTH ) * MidiDefaultVelocity, 0 ); update(); return; } x -= WHITE_KEY_WIDTH; if( _me->buttons() & Qt::LeftButton && m_editMode == ModeDraw && (m_action == ActionMoveNote || m_action == ActionResizeNote ) ) { // handle moving notes and resizing them bool replay_note = key_num != m_lastKey && m_action == ActionMoveNote; if( replay_note || ( m_action == ActionMoveNote && ( _me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) ) { pauseTestNotes(); } dragNotes( _me->x(), _me->y(), _me->modifiers() & Qt::AltModifier, _me->modifiers() & Qt::ShiftModifier ); if( replay_note && m_action == ActionMoveNote && ! ( ( _me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) ) { pauseTestNotes( false ); } } else if( ( edit_note == true || m_action == ActionChangeNoteProperty ) && ( _me->buttons() & Qt::LeftButton || _me->buttons() & Qt::MiddleButton || ( _me->buttons() & Qt::RightButton && _me->modifiers() & Qt::ShiftModifier ) ) ) { // editing note properties // Change notes within a certain pixel range of where // the mouse cursor is int pixel_range = 14; // convert to ticks so that we can check which notes // are in the range int ticks_start = ( x-pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; int ticks_end = ( x+pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // determine what volume/panning to set note to // if middle-click, set to defaults volume_t vol; panning_t pan; if( _me->buttons() & Qt::LeftButton ) { vol = tLimit( MinVolume + ( ( (float)noteEditBottom() ) - ( (float)_me->y() ) ) / ( (float)( noteEditBottom() - noteEditTop() ) ) * ( MaxVolume - MinVolume ), MinVolume, MaxVolume ); pan = tLimit( PanningLeft + ( (float)( noteEditBottom() - _me->y() ) ) / ( (float)( noteEditBottom() - noteEditTop() ) ) * ( (float)( PanningRight - PanningLeft ) ), PanningLeft, PanningRight); } else { vol = DefaultVolume; pan = DefaultPanning; } if( m_noteEditMode == NoteEditVolume ) { m_lastNoteVolume = vol; //! \todo display velocity for MIDI-based instruments // possibly dBV values too? not sure if it makes sense for note volumes... s_textFloat->setText( tr("Volume: %1%").arg( vol ) ); } else if( m_noteEditMode == NoteEditPanning ) { m_lastNotePanning = pan; if( pan < 0 ) { s_textFloat->setText( tr("Panning: %1% left").arg( qAbs( pan ) ) ); } else if( pan > 0 ) { s_textFloat->setText( tr("Panning: %1% right").arg( qAbs( pan ) ) ); } else { s_textFloat->setText( tr("Panning: center") ); } } // loop through vector bool on_note = false; bool use_selection = isSelection(); NoteVector::ConstIterator it = notes.begin()+notes.size()-1; for( int i = 0; i < notes.size(); ++i ) { note * n = *it; if( n->pos().getTicks() >= ticks_start && n->pos().getTicks() <= ticks_end && n->length().getTicks() != 0 && ( n->selected() || ! use_selection ) ) { on_note = true; m_pattern->dataChanged(); // play the note so that the user can tell how loud it is // and where it is panned testPlayNote( n ); if( m_noteEditMode == NoteEditVolume ) { n->setVolume( vol ); const int baseVelocity = m_pattern->instrumentTrack()->midiPort()->baseVelocity(); m_pattern->instrumentTrack()->processInEvent( MidiEvent( MidiKeyPressure, -1, n->key(), n->midiVelocity( baseVelocity ) ) ); } else if( m_noteEditMode == NoteEditPanning ) { n->setPanning( pan ); MidiEvent evt( MidiMetaEvent, -1, n->key(), panningToMidi( pan ) ); evt.setMetaEvent( MidiNotePanning ); m_pattern->instrumentTrack()->processInEvent( evt ); } } else { if( n->isPlaying() ) { // mouse not over this note, stop playing it. m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( n->key() ); n->setIsPlaying( false ); } } // set textfloat visible if we're on a note if( on_note ) { s_textFloat->moveGlobal( this, QPoint( _me->x() + 4, _me->y() + 16 ) ); s_textFloat->show(); } else { s_textFloat->hide(); } --it; } } else if( _me->buttons() == Qt::NoButton && m_editMode == ModeDraw ) { // set move- or resize-cursor // get tick in which the cursor is posated int pos_ticks = ( x * MidiTime::ticksPerTact() ) / m_ppt + m_currentPosition; // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin()+notes.size()-1; // loop through whole note-vector... for( int i = 0; i < notes.size(); ++i ) { // and check whether the cursor is over an // existing note if( pos_ticks >= ( *it )->pos() && pos_ticks <= ( *it )->pos() + ( *it )->length() && ( *it )->key() == key_num && ( *it )->length() > 0 ) { break; } --it; } // did it reach end of vector because there's // no note?? if( it != notes.begin()-1 ) { // cursor at the "tail" of the note? if( ( *it )->length() > 0 && pos_ticks*m_ppt / MidiTime::ticksPerTact() > ( ( *it )->pos() + ( *it )->length() )*m_ppt/ MidiTime::ticksPerTact()- RESIZE_AREA_WIDTH ) { if( QApplication::overrideCursor() ) { if( QApplication::overrideCursor()->shape() != Qt::SizeHorCursor ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } QCursor c( Qt::SizeHorCursor ); QApplication::setOverrideCursor( c ); } } else { QCursor c( Qt::SizeHorCursor ); QApplication::setOverrideCursor( c ); } } else { if( QApplication::overrideCursor() ) { if( QApplication::overrideCursor()->shape() != Qt::SizeAllCursor ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); } } else { QCursor c( Qt::SizeAllCursor ); QApplication::setOverrideCursor( c ); } } } else { // the cursor is over no note, so restore cursor while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } } } else if( _me->buttons() & Qt::LeftButton && m_editMode == ModeSelect && m_action == ActionSelectNotes ) { // change size of selection // get tick in which the cursor is posated int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; m_selectedTick = pos_ticks - m_selectStartTick; if( (int) m_selectStartTick + m_selectedTick < 0 ) { m_selectedTick = -static_cast( m_selectStartTick ); } m_selectedKeys = key_num - m_selectStartKey; if( key_num <= m_selectStartKey ) { --m_selectedKeys; } } else if( m_editMode == ModeDraw && _me->buttons() & Qt::RightButton ) { // holding down right-click to delete notes // get tick in which the user clicked int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin(); // loop through whole note-vector... while( it != notes.end() ) { MidiTime len = ( *it )->length(); if( len < 0 ) { len = 4; } // and check whether the user clicked on an // existing note or an edit-line if( pos_ticks >= ( *it )->pos() && len > 0 && ( ( edit_note == false && pos_ticks <= ( *it )->pos() + len && ( *it )->key() == key_num ) || ( edit_note == true && pos_ticks <= ( *it )->pos() + NE_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt ) ) ) { // delete this note if( it != notes.end() ) { if( ( *it )->length() > 0 ) { m_pattern->removeNote( *it ); } else { ( *it )->setLength( 0 ); m_pattern->dataChanged(); } engine::getSong()->setModified(); } } else { ++it; } } } } else { if( _me->buttons() & Qt::LeftButton && m_editMode == ModeSelect && m_action == ActionSelectNotes ) { int x = _me->x() - WHITE_KEY_WIDTH; if( x < 0 && m_currentPosition > 0 ) { x = 0; QCursor::setPos( mapToGlobal( QPoint( WHITE_KEY_WIDTH, _me->y() ) ) ); if( m_currentPosition >= 4 ) { m_leftRightScroll->setValue( m_currentPosition - 4 ); } else { m_leftRightScroll->setValue( 0 ); } } else if( x > width() - WHITE_KEY_WIDTH ) { x = width() - WHITE_KEY_WIDTH; QCursor::setPos( mapToGlobal( QPoint( width(), _me->y() ) ) ); m_leftRightScroll->setValue( m_currentPosition + 4 ); } // get tick in which the cursor is posated int pos_ticks = x * MidiTime::ticksPerTact()/ m_ppt + m_currentPosition; m_selectedTick = pos_ticks - m_selectStartTick; if( (int) m_selectStartTick + m_selectedTick < 0 ) { m_selectedTick = -static_cast( m_selectStartTick ); } int key_num = getKey( _me->y() ); int visible_keys = ( height() - PR_TOP_MARGIN - PR_BOTTOM_MARGIN - m_notesEditHeight ) / KEY_LINE_HEIGHT + 2; const int s_key = m_startKey - 1; if( key_num <= s_key ) { QCursor::setPos( mapToGlobal( QPoint( _me->x(), keyAreaBottom() ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() + 1 ); key_num = s_key; } else if( key_num >= s_key + visible_keys ) { QCursor::setPos( mapToGlobal( QPoint( _me->x(), PR_TOP_MARGIN ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() - 1 ); key_num = s_key + visible_keys; } m_selectedKeys = key_num - m_selectStartKey; if( key_num <= m_selectStartKey ) { --m_selectedKeys; } } QApplication::restoreOverrideCursor(); } m_lastMouseX = _me->x(); m_lastMouseY = _me->y(); update(); } void PianoRoll::dragNotes( int x, int y, bool alt, bool shift ) { // dragging one or more notes around // convert pixels to ticks and keys int off_x = x - m_moveStartX; int off_ticks = off_x * MidiTime::ticksPerTact() / m_ppt; int off_key = getKey( y ) - getKey( m_moveStartY ); // handle scroll changes while dragging off_ticks -= m_mouseDownTick - m_currentPosition; off_key -= m_mouseDownKey - m_startKey; // if they're not holding alt, quantize the offset if( ! alt ) { off_ticks = floor( off_ticks / quantization() ) * quantization(); } // make sure notes won't go outside boundary conditions if( m_action == ActionMoveNote && ! ( shift && ! m_startedWithShift ) ) { if( m_moveBoundaryLeft + off_ticks < 0 ) { off_ticks += 0 - (off_ticks + m_moveBoundaryLeft); } if( m_moveBoundaryTop + off_key > NumKeys ) { off_key -= NumKeys - (m_moveBoundaryTop + off_key); } if( m_moveBoundaryBottom + off_key < 0 ) { off_key += 0 - (m_moveBoundaryBottom + off_key); } } int shift_offset = 0; int shift_ref_pos = -1; // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { const int pos = ( *it )->pos().getTicks(); // when resizing a note and holding shift: shift the following // notes to preserve the melody if( m_action == ActionResizeNote && shift ) { int shifted_pos = ( *it )->oldPos().getTicks() + shift_offset; if( shifted_pos && pos == shift_ref_pos ) { shifted_pos -= off_ticks; } ( *it )->setPos( MidiTime( shifted_pos ) ); } if( ( *it )->selected() ) { if( m_action == ActionMoveNote && ! ( shift && ! m_startedWithShift ) ) { // moving note int pos_ticks = ( *it )->oldPos().getTicks() + off_ticks; int key_num = ( *it )->oldKey() + off_key; if( pos_ticks < 0 ) { pos_ticks = 0; } // upper/lower bound checks on key_num if( key_num < 0 ) { key_num = 0; } else if( key_num > NumKeys ) { key_num = NumKeys; } ( *it )->setPos( MidiTime( pos_ticks ) ); ( *it )->setKey( key_num ); } else if( m_action == ActionResizeNote ) { // resizing note int ticks_new = ( *it )->oldLength().getTicks() + off_ticks; if( ticks_new <= 0 ) { ticks_new = 1; } else if( shift ) { // when holding shift: update the offset used to shift // the following notes if( pos > shift_ref_pos ) { shift_offset += off_ticks; shift_ref_pos = pos; } } ( *it )->setLength( MidiTime( ticks_new ) ); m_lenOfNewNotes = ( *it )->length(); } else if( m_action == ActionMoveNote && ( shift && ! m_startedWithShift ) ) { // quick resize, toggled by holding shift after starting a note move, but not before int ticks_new = ( *it )->oldLength().getTicks() + off_ticks; if( ticks_new <= 0 ) { ticks_new = 1; } ( *it )->setLength( MidiTime( ticks_new ) ); m_lenOfNewNotes = ( *it )->length(); } } ++it; } m_pattern->dataChanged(); engine::getSong()->setModified(); } static QString calculateNoteLabel(QString note, int octave) { if(note.isEmpty()) return ""; return note + QString::number(octave); } static void printNoteHeights(QPainter& p, int bottom, int width, int startKey) { assert(Key_C == 0); assert(Key_H == 11); struct KeyLabel { QString key, minor, major; }; const KeyLabel labels[12] = { {QObject::tr("C", "Note name")}, {"", QObject::tr("Db", "Note name"), QObject::tr("C#", "Note name")}, {QObject::tr("D", "Note name")}, {"", QObject::tr("Eb", "Note name"), QObject::tr("D#", "Note name")}, {QObject::tr("E", "Note name"), QObject::tr("Fb", "Note name")}, {"F"}, {"", QObject::tr("Gb", "Note name"), QObject::tr("F#", "Note name")}, {QObject::tr("G", "Note name")}, {"", QObject::tr("Ab", "Note name"),QObject::tr( "G#", "Note name")}, {QObject::tr("A", "Note name")}, {"", QObject::tr("Bb", "Note name"),QObject::tr( "A#", "Note name")}, {QObject::tr("B", "Note name")} }; p.setFont( pointSize( p.font() ) ); p.setPen( QColor( 255, 255, 255 ) ); for( int y = bottom, key = startKey; y > PR_TOP_MARGIN; y -= KEY_LINE_HEIGHT, key++) { const unsigned note = key % KeysPerOctave; assert( note < ( sizeof( labels ) / sizeof( *labels) )); const KeyLabel& noteLabel( labels[note] ); const int octave = key / KeysPerOctave; const KeyLabel notes = { calculateNoteLabel(noteLabel.key, octave), calculateNoteLabel(noteLabel.minor, octave), calculateNoteLabel(noteLabel.major, octave), }; const int drawWidth( width - WHITE_KEY_WIDTH ); const int hspace = 300; const int columnCount = drawWidth/hspace + 1; for(int col = 0; col < columnCount; col++) { const int subOffset = 42; const int x = subOffset + hspace/2 + hspace * col; p.drawText( WHITE_KEY_WIDTH + x, y, notes.key); p.drawText( WHITE_KEY_WIDTH + x - subOffset, y, notes.minor); p.drawText( WHITE_KEY_WIDTH + x + subOffset, y, notes.major); } } } void PianoRoll::paintEvent( QPaintEvent * _pe ) { QColor horizCol = QColor( gridColor() ); QColor vertCol = QColor( gridColor() ); QStyleOption opt; opt.initFrom( this ); QPainter p( this ); style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this ); QBrush bgColor = p.background(); // fill with bg color p.fillRect( 0,0, width(), height(), bgColor ); // set font-size to 8 p.setFont( pointSize<8>( p.font() ) ); // y_offset is used to align the piano-keys on the key-lines int y_offset = 0; // calculate y_offset according to first key switch( prKeyOrder[m_startKey % KeysPerOctave] ) { case PR_BLACK_KEY: y_offset = KEY_LINE_HEIGHT/4; break; case PR_WHITE_KEY_BIG: y_offset = KEY_LINE_HEIGHT/2; break; case PR_WHITE_KEY_SMALL: if( prKeyOrder[( ( m_startKey + 1 ) % KeysPerOctave)] != PR_BLACK_KEY ) { y_offset = KEY_LINE_HEIGHT / 2; } break; } // start drawing at the bottom int key_line_y = keyAreaBottom() - 1; // used for aligning black-keys later int first_white_key_height = WHITE_KEY_SMALL_HEIGHT; // key-counter - only needed for finding out whether the processed // key is the first one int keys_processed = 0; int key = m_startKey; // display note marks before drawing other lines for( int i = 0; i < m_markedSemiTones.size(); i++ ) { const int key_num = m_markedSemiTones.at( i ); const int y = keyAreaBottom() + 5 - KEY_LINE_HEIGHT * ( key_num - m_startKey + 1 ); if( y > keyAreaBottom() ) { break; } p.fillRect( WHITE_KEY_WIDTH+1, y-KEY_LINE_HEIGHT/2, width() - 10, KEY_LINE_HEIGHT, QColor( 0, 80 - ( key_num % KeysPerOctave ) * 3, 64 + key_num / 2) ); } // draw all white keys... for( int y = key_line_y + 1 + y_offset; y > PR_TOP_MARGIN; key_line_y -= KEY_LINE_HEIGHT, ++keys_processed ) { // check for white key that is only half visible on the // bottom of piano-roll if( keys_processed == 0 && prKeyOrder[m_startKey % KeysPerOctave] == PR_BLACK_KEY ) { // draw it! p.drawPixmap( PIANO_X, y - WHITE_KEY_SMALL_HEIGHT, *s_whiteKeySmallPm ); // update y-pos y -= WHITE_KEY_SMALL_HEIGHT / 2; // move first black key down (we didn't draw whole // white key so black key needs to be lifted down) // (default for first_white_key_height = // WHITE_KEY_SMALL_HEIGHT, so WHITE_KEY_SMALL_HEIGHT/2 // is smaller) first_white_key_height = WHITE_KEY_SMALL_HEIGHT / 2; } // check whether to draw a big or a small white key if( prKeyOrder[key % KeysPerOctave] == PR_WHITE_KEY_SMALL ) { // draw a small one while checking if it is pressed or not if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) ) { p.drawPixmap( PIANO_X, y - WHITE_KEY_SMALL_HEIGHT, *s_whiteKeySmallPressedPm ); } else { p.drawPixmap( PIANO_X, y - WHITE_KEY_SMALL_HEIGHT, *s_whiteKeySmallPm ); } // update y-pos y -= WHITE_KEY_SMALL_HEIGHT; } else if( prKeyOrder[key % KeysPerOctave] == PR_WHITE_KEY_BIG ) { // draw a big one while checking if it is pressed or not if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) ) { p.drawPixmap( PIANO_X, y - WHITE_KEY_BIG_HEIGHT, *s_whiteKeyBigPressedPm ); } else { p.drawPixmap( PIANO_X, y-WHITE_KEY_BIG_HEIGHT, *s_whiteKeyBigPm ); } // if a big white key has been the first key, // black keys needs to be lifted up if( keys_processed == 0 ) { first_white_key_height = WHITE_KEY_BIG_HEIGHT; } // update y-pos y -= WHITE_KEY_BIG_HEIGHT; } // label C-keys... if( static_cast( key % KeysPerOctave ) == Key_C ) { const QString cLabel = "C" + QString::number( static_cast( key / KeysPerOctave ) ); p.setPen( QColor( 240, 240, 240 ) ); p.drawText( C_KEY_LABEL_X + 1, y+14, cLabel ); p.setPen( QColor( 0, 0, 0 ) ); p.drawText( C_KEY_LABEL_X, y + 13, cLabel ); horizCol.setAlpha( 192 ); } else { horizCol.setAlpha( 128 ); } // draw key-line p.setPen( horizCol ); p.drawLine( WHITE_KEY_WIDTH, key_line_y, width(), key_line_y ); ++key; } // reset all values, because now we're going to draw all black keys key = m_startKey; keys_processed = 0; int white_cnt = 0; // and go! for( int y = keyAreaBottom() + y_offset; y > PR_TOP_MARGIN; ++keys_processed ) { // check for black key that is only half visible on the bottom // of piano-roll if( keys_processed == 0 // current key may not be a black one && prKeyOrder[key % KeysPerOctave] != PR_BLACK_KEY // but the previous one must be black (we must check this // because there might be two white keys (E-F) && prKeyOrder[( key - 1 ) % KeysPerOctave] == PR_BLACK_KEY ) { // draw the black key! p.drawPixmap( PIANO_X, y - BLACK_KEY_HEIGHT / 2, *s_blackKeyPm ); // is the one after the start-note a black key?? if( prKeyOrder[( key + 1 ) % KeysPerOctave] != PR_BLACK_KEY ) { // no, then move it up! y -= KEY_LINE_HEIGHT / 2; } } // current key black? if( prKeyOrder[key % KeysPerOctave] == PR_BLACK_KEY) { // then draw it (calculation of y very complicated, // but that's the only working solution, sorry...) // check if the key is pressed or not if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) ) { p.drawPixmap( PIANO_X, y - ( first_white_key_height - WHITE_KEY_SMALL_HEIGHT ) - WHITE_KEY_SMALL_HEIGHT/2 - 1 - BLACK_KEY_HEIGHT, *s_blackKeyPressedPm ); } else { p.drawPixmap( PIANO_X, y - ( first_white_key_height - WHITE_KEY_SMALL_HEIGHT ) - WHITE_KEY_SMALL_HEIGHT/2 - 1 - BLACK_KEY_HEIGHT, *s_blackKeyPm ); } // update y-pos y -= WHITE_KEY_BIG_HEIGHT; // reset white-counter white_cnt = 0; } else { // simple workaround for increasing x if there were // two white keys (e.g. between E and F) ++white_cnt; if( white_cnt > 1 ) { y -= WHITE_KEY_BIG_HEIGHT/2; } } ++key; } // erase the area below the piano, because there might be keys that // should be only half-visible p.fillRect( QRect( 0, keyAreaBottom(), WHITE_KEY_WIDTH, noteEditBottom()-keyAreaBottom() ), bgColor ); // display note editing info QFont f = p.font(); f.setBold( false ); p.setFont( pointSize<10>( f ) ); p.setPen( noteModeColor() ); p.drawText( QRect( 0, keyAreaBottom(), WHITE_KEY_WIDTH, noteEditBottom() - keyAreaBottom() ), Qt::AlignCenter | Qt::TextWordWrap, m_nemStr.at( m_noteEditMode ) + ":" ); // set clipping area, because we are not allowed to paint over // keyboard... p.setClipRect( WHITE_KEY_WIDTH, PR_TOP_MARGIN, width() - WHITE_KEY_WIDTH, height() - PR_TOP_MARGIN - PR_BOTTOM_MARGIN ); // draw vertical raster // triplet mode occurs if the note duration isn't a multiple of 3 bool triplets = ( quantization() % 3 != 0 ); int spt = MidiTime::stepsPerTact(); float pp16th = (float)m_ppt / spt; int bpt = DefaultBeatsPerTact; if ( triplets ) { spt = static_cast(1.5 * spt); bpt = static_cast(bpt * 2.0/3.0); pp16th *= 2.0/3.0; } int tact_16th = m_currentPosition / bpt; const int offset = ( m_currentPosition % bpt ) * m_ppt / MidiTime::ticksPerTact(); bool show32nds = ( m_zoomingModel.value() > 3 ); // we need float here as odd time signatures might produce rounding // errors else and thus an unusable grid for( float x = WHITE_KEY_WIDTH - offset; x < width(); x += pp16th, ++tact_16th ) { if( x >= WHITE_KEY_WIDTH ) { // every tact-start needs to be a bright line if( tact_16th % spt == 0 ) { p.setPen( gridColor() ); } // normal line else if( tact_16th % 4 == 0 ) { vertCol.setAlpha( 160 ); p.setPen( vertCol ); } // weak line else { vertCol.setAlpha( 128 ); p.setPen( vertCol ); } p.drawLine( (int)x, PR_TOP_MARGIN, (int)x, height() - PR_BOTTOM_MARGIN ); // extra 32nd's line if( show32nds ) { vertCol.setAlpha( 80 ); p.setPen( vertCol ); p.drawLine( (int)(x + pp16th/2) , PR_TOP_MARGIN, (int)(x + pp16th/2), height() - PR_BOTTOM_MARGIN ); } } } // following code draws all notes in visible area // and the note editing stuff (volume, panning, etc) // setup selection-vars int sel_pos_start = m_selectStartTick; int sel_pos_end = m_selectStartTick+m_selectedTick; if( sel_pos_start > sel_pos_end ) { qSwap( sel_pos_start, sel_pos_end ); } int sel_key_start = m_selectStartKey - m_startKey + 1; int sel_key_end = sel_key_start + m_selectedKeys; if( sel_key_start > sel_key_end ) { qSwap( sel_key_start, sel_key_end ); } int y_base = keyAreaBottom() - 1; if( hasValidPattern() == true ) { p.setClipRect( WHITE_KEY_WIDTH, PR_TOP_MARGIN, width() - WHITE_KEY_WIDTH, height() - PR_TOP_MARGIN ); const NoteVector & notes = m_pattern->notes(); const int visible_keys = ( keyAreaBottom()-keyAreaTop() ) / KEY_LINE_HEIGHT + 2; QPolygon editHandles; for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { int len_ticks = ( *it )->length(); if( len_ticks == 0 ) { continue; } else if( len_ticks < 0 ) { len_ticks = 4; } const int key = ( *it )->key() - m_startKey + 1; int pos_ticks = ( *it )->pos(); int note_width = len_ticks * m_ppt / MidiTime::ticksPerTact(); const int x = ( pos_ticks - m_currentPosition ) * m_ppt / MidiTime::ticksPerTact(); // skip this note if not in visible area at all if( !( x + note_width >= 0 && x <= width() - WHITE_KEY_WIDTH ) ) { continue; } // is the note in visible area? if( key > 0 && key <= visible_keys ) { // we've done and checked all, let's draw the // note drawNoteRect( p, x + WHITE_KEY_WIDTH, y_base - key * KEY_LINE_HEIGHT, note_width, *it, noteColor() ); } // draw note editing stuff int editHandleTop = 0; if( m_noteEditMode == NoteEditVolume ) { QColor color = barColor().lighter( 30 + ( ( *it )->getVolume() * 90 / MaxVolume ) ); if( ( *it )->selected() ) { color.setRgb( 0x00, 0x40, 0xC0 ); } p.setPen( QPen( color, NE_LINE_WIDTH ) ); editHandleTop = noteEditBottom() - ( (float)( ( *it )->getVolume() - MinVolume ) ) / ( (float)( MaxVolume - MinVolume ) ) * ( (float)( noteEditBottom() - noteEditTop() ) ); p.drawLine( noteEditLeft() + x, editHandleTop, noteEditLeft() + x, noteEditBottom() ); } else if( m_noteEditMode == NoteEditPanning ) { QColor color( noteColor() ); if( ( *it )->selected() ) { color.setRgb( 0x00, 0x40, 0xC0 ); } p.setPen( QPen( color, NE_LINE_WIDTH ) ); editHandleTop = noteEditBottom() - ( (float)( ( *it )->getPanning() - PanningLeft ) ) / ( (float)( (PanningRight - PanningLeft ) ) ) * ( (float)( noteEditBottom() - noteEditTop() ) ); p.drawLine( noteEditLeft() + x, noteEditTop() + ( (float)( noteEditBottom() - noteEditTop() ) ) / 2.0f, noteEditLeft() + x, editHandleTop ); } editHandles << QPoint( x + noteEditLeft(), editHandleTop+1 ); if( ( *it )->hasDetuningInfo() ) { drawDetuningInfo( p, *it, x + WHITE_KEY_WIDTH, y_base - key * KEY_LINE_HEIGHT ); } } p.setPen( QPen( noteColor(), NE_LINE_WIDTH+2 ) ); p.drawPoints( editHandles ); } else { QFont f = p.font(); f.setBold( true ); p.setFont( pointSize<14>( f ) ); p.setPen( QApplication::palette().color( QPalette::Active, QPalette::BrightText ) ); p.drawText( WHITE_KEY_WIDTH + 20, PR_TOP_MARGIN + 40, tr( "Please open a pattern by double-clicking " "on it!" ) ); } p.setClipRect( WHITE_KEY_WIDTH, PR_TOP_MARGIN, width() - WHITE_KEY_WIDTH, height() - PR_TOP_MARGIN - m_notesEditHeight - PR_BOTTOM_MARGIN ); // now draw selection-frame int x = ( ( sel_pos_start - m_currentPosition ) * m_ppt ) / MidiTime::ticksPerTact(); int w = ( ( ( sel_pos_end - m_currentPosition ) * m_ppt ) / MidiTime::ticksPerTact() ) - x; int y = (int) y_base - sel_key_start * KEY_LINE_HEIGHT; int h = (int) y_base - sel_key_end * KEY_LINE_HEIGHT - y; p.setPen( QColor( 0, 64, 192 ) ); p.drawRect( x + WHITE_KEY_WIDTH, y, w, h ); // TODO: Get this out of paint event int l = ( hasValidPattern() == true )? (int) m_pattern->length() : 0; // reset scroll-range if( m_leftRightScroll->maximum() != l ) { m_leftRightScroll->setRange( 0, l ); m_leftRightScroll->setPageStep( l ); } // set alpha for horizontal lines horizCol.setAlpha( 64 ); // horizontal line for the key under the cursor if( hasValidPattern() == true ) { int key_num = getKey( mapFromGlobal( QCursor::pos() ).y() ); p.fillRect( 10, keyAreaBottom() + 3 - KEY_LINE_HEIGHT * ( key_num - m_startKey + 1 ), width() - 10, KEY_LINE_HEIGHT - 7, horizCol ); } // bar to resize note edit area p.setClipRect( 0, 0, width(), height() ); p.fillRect( QRect( 0, keyAreaBottom(), width()-PR_RIGHT_MARGIN, NOTE_EDIT_RESIZE_BAR ), horizCol ); const QPixmap * cursor = NULL; // draw current edit-mode-icon below the cursor switch( m_editMode ) { case ModeDraw: if( m_mouseDownRight ) { cursor = s_toolErase; } else if( m_action == ActionMoveNote ) { cursor = s_toolMove; } else { cursor = s_toolDraw; } break; case ModeErase: cursor = s_toolErase; break; case ModeSelect: cursor = s_toolSelect; break; case ModeEditDetuning: cursor = s_toolOpen; break; } if( cursor != NULL ) { p.drawPixmap( mapFromGlobal( QCursor::pos() ) + QPoint( 8, 8 ), *cursor ); } if( configManager::inst()->value( "ui", "printnotelabels").toInt() ) { printNoteHeights(p, keyAreaBottom(), width(), m_startKey); } } // responsible for moving/resizing scrollbars after window-resizing void PianoRoll::resizeEvent( QResizeEvent * ) { m_leftRightScroll->setGeometry( WHITE_KEY_WIDTH, height() - SCROLLBAR_SIZE, width()-WHITE_KEY_WIDTH, SCROLLBAR_SIZE ); m_topBottomScroll->setGeometry( width() - SCROLLBAR_SIZE, PR_TOP_MARGIN, SCROLLBAR_SIZE, height() - PR_TOP_MARGIN - SCROLLBAR_SIZE ); int total_pixels = OCTAVE_HEIGHT * NumOctaves - ( height() - PR_TOP_MARGIN - PR_BOTTOM_MARGIN - m_notesEditHeight ); m_totalKeysToScroll = total_pixels * KeysPerOctave / OCTAVE_HEIGHT; m_topBottomScroll->setRange( 0, m_totalKeysToScroll ); if( m_startKey > m_totalKeysToScroll ) { m_startKey = m_totalKeysToScroll; } m_topBottomScroll->setValue( m_totalKeysToScroll - m_startKey ); engine::getSong()->getPlayPos( song::Mode_PlayPattern ).m_timeLine->setFixedWidth( width() ); m_toolBar->setFixedWidth( width() ); update(); } void PianoRoll::wheelEvent( QWheelEvent * _we ) { _we->accept(); // handle wheel events for note edit area - for editing note vol/pan with mousewheel if( _we->x() > noteEditLeft() && _we->x() < noteEditRight() && _we->y() > noteEditTop() && _we->y() < noteEditBottom() ) { // get values for going through notes int pixel_range = 8; int x = _we->x() - WHITE_KEY_WIDTH; int ticks_start = ( x-pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; int ticks_end = ( x+pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get note-vector of current pattern NoteVector notes; notes += m_pattern->notes(); // go through notes to figure out which one we want to change NoteVector nv; foreach( note * i, notes ) { if( i->pos().getTicks() >= ticks_start && i->pos().getTicks() <= ticks_end && i->length().getTicks() != 0 && ( i->selected() || ! isSelection() ) ) { nv += i; } } if( nv.size() > 0 ) { const int step = _we->delta() > 0 ? 1.0 : -1.0; if( m_noteEditMode == NoteEditVolume ) { foreach( note * n, nv ) { volume_t vol = tLimit( n->getVolume() + step, MinVolume, MaxVolume ); n->setVolume( vol ); } s_textFloat->setText( tr("Volume: %1%").arg( nv[0]->getVolume() ) ); } else if( m_noteEditMode == NoteEditPanning ) { foreach( note * n, nv ) { panning_t pan = tLimit( n->getPanning() + step, PanningLeft, PanningRight ); n->setPanning( pan ); } panning_t pan = nv[0]->getPanning(); if( pan < 0 ) { s_textFloat->setText( tr("Panning: %1% left").arg( qAbs( pan ) ) ); } else if( pan > 0 ) { s_textFloat->setText( tr("Panning: %1% right").arg( qAbs( pan ) ) ); } else { s_textFloat->setText( tr("Panning: center") ); } } if( nv.size() == 1 ) { s_textFloat->moveGlobal( this, QPoint( _we->x() + 4, _we->y() + 16 ) ); s_textFloat->setVisibilityTimeOut( 1000 ); } update(); } } // not in note edit area, so handle scrolling/zooming and quantization change else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier ) { int q = m_quantizeModel.value(); if( _we->delta() > 0 ) { q--; } if( _we->delta() < 0 ) { q++; } q = qBound( 0, q, m_quantizeModel.size() - 1 ); m_quantizeModel.setValue( q ); } else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::ShiftModifier ) { int l = m_noteLenModel.value(); if( _we->delta() > 0 ) { l--; } if( _we->delta() < 0 ) { l++; } l = qBound( 0, l, m_noteLenModel.size() - 1 ); m_noteLenModel.setValue( l ); } else if( _we->modifiers() & Qt::ControlModifier ) { int z = m_zoomingModel.value(); if( _we->delta() > 0 ) { z++; } if( _we->delta() < 0 ) { z--; } z = qBound( 0, z, m_zoomingModel.size() - 1 ); // update combobox with zooming-factor m_zoomingModel.setValue( z ); } else if( _we->modifiers() & Qt::ShiftModifier || _we->orientation() == Qt::Horizontal ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - _we->delta() * 2 / 15 ); } else { m_topBottomScroll->setValue( m_topBottomScroll->value() - _we->delta() / 30 ); } } int PianoRoll::getKey( int _y ) const { int key_line_y = keyAreaBottom() - 1; // pressed key on piano int key_num = ( key_line_y - _y ) / KEY_LINE_HEIGHT; key_num += m_startKey; // some range-checking-stuff if( key_num < 0 ) { key_num = 0; } if( key_num >= KeysPerOctave * NumOctaves ) { key_num = KeysPerOctave * NumOctaves - 1; } return key_num; } song::PlayModes PianoRoll::desiredPlayModeForAccompany() const { if( m_pattern->getTrack()->trackContainer() == engine::getBBTrackContainer() ) { return song::Mode_PlayBB; } return song::Mode_PlaySong; } void PianoRoll::play() { if( hasValidPattern() == false ) { return; } if( engine::getSong()->playMode() != song::Mode_PlayPattern ) { engine::getSong()->playPattern( m_pattern ); } else { engine::getSong()->togglePause(); } } void PianoRoll::record() { if( engine::getSong()->isPlaying() ) { stop(); } if( m_recording == true || hasValidPattern() == false ) { return; } m_recording = true; engine::getSong()->playPattern( m_pattern, false ); } void PianoRoll::recordAccompany() { if( engine::getSong()->isPlaying() ) { stop(); } if( m_recording == true || hasValidPattern() == false ) { return; } m_recording = true; if( m_pattern->getTrack()->trackContainer() == engine::getSong() ) { engine::getSong()->playSong(); } else { engine::getSong()->playBB(); } } void PianoRoll::stop() { engine::getSong()->stop(); m_recording = false; m_scrollBack = true; } void PianoRoll::startRecordNote( const note & _n ) { if( m_recording == true && hasValidPattern() == true && engine::getSong()->isPlaying() && ( engine::getSong()->playMode() == desiredPlayModeForAccompany() || engine::getSong()->playMode() == song::Mode_PlayPattern ) ) { MidiTime sub; if( engine::getSong()->playMode() == song::Mode_PlaySong ) { sub = m_pattern->startPosition(); } note n( 1, engine::getSong()->getPlayPos( engine::getSong()->playMode() ) - sub, _n.key(), _n.getVolume(), _n.getPanning() ); if( n.pos() >= 0 ) { m_recordingNotes << n; } } } void PianoRoll::finishRecordNote( const note & _n ) { if( m_recording == true && hasValidPattern() == true && engine::getSong()->isPlaying() && ( engine::getSong()->playMode() == desiredPlayModeForAccompany() || engine::getSong()->playMode() == song::Mode_PlayPattern ) ) { for( QList::Iterator it = m_recordingNotes.begin(); it != m_recordingNotes.end(); ++it ) { if( it->key() == _n.key() ) { note n( _n.length(), it->pos(), it->key(), it->getVolume(), it->getPanning() ); n.quantizeLength( quantization() ); m_pattern->addNote( n ); update(); m_recordingNotes.erase( it ); break; } } } } void PianoRoll::horScrolled( int _new_pos ) { m_currentPosition = _new_pos; emit positionChanged( m_currentPosition ); update(); } void PianoRoll::verScrolled( int _new_pos ) { // revert value m_startKey = m_totalKeysToScroll - _new_pos; update(); } void PianoRoll::drawButtonToggled() { m_editMode = ModeDraw; update(); } void PianoRoll::eraseButtonToggled() { m_editMode = ModeErase; update(); } void PianoRoll::selectButtonToggled() { m_editMode = ModeSelect; update(); } void PianoRoll::detuneButtonToggled() { m_editMode = ModeEditDetuning; update(); } void PianoRoll::selectAll() { if( hasValidPattern() == false ) { return; } const NoteVector & notes = m_pattern->notes(); // if first_time = true, we HAVE to set the vars for select bool first_time = true; for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { int len_ticks = ( *it )->length(); if( len_ticks > 0 ) { const int key = ( *it )->key(); int pos_ticks = ( *it )->pos(); if( key <= m_selectStartKey || first_time ) { // if we move start-key down, we have to add // the difference between old and new start-key // to m_selectedKeys, otherwise the selection // is just moved down... m_selectedKeys += m_selectStartKey - ( key - 1 ); m_selectStartKey = key - 1; } if( key >= m_selectedKeys+m_selectStartKey || first_time ) { m_selectedKeys = key - m_selectStartKey; } if( pos_ticks < m_selectStartTick || first_time ) { m_selectStartTick = pos_ticks; } if( pos_ticks + len_ticks > m_selectStartTick + m_selectedTick || first_time ) { m_selectedTick = pos_ticks + len_ticks - m_selectStartTick; } first_time = false; } } } // returns vector with pointers to all selected notes void PianoRoll::getSelectedNotes( NoteVector & _selected_notes ) { if( hasValidPattern() == false ) { return; } const NoteVector & notes = m_pattern->notes(); for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { if( ( *it )->selected() ) { _selected_notes.push_back( *it ); } } } void PianoRoll::enterValue( NoteVector* nv ) { if( m_noteEditMode == NoteEditVolume ) { bool ok; int new_val; new_val = QInputDialog::getInt( this, "Piano roll: note volume", tr( "Please enter a new value between %1 and %2:" ). arg( MinVolume ).arg( MaxVolume ), (*nv)[0]->getVolume(), MinVolume, MaxVolume, 1, &ok ); if( ok ) { foreach( note * n, *nv ) { n->setVolume( new_val ); } m_lastNoteVolume = new_val; } } else if( m_noteEditMode == NoteEditPanning ) { bool ok; int new_val; new_val = QInputDialog::getInt( this, "Piano roll: note panning", tr( "Please enter a new value between %1 and %2:" ). arg( PanningLeft ).arg( PanningRight ), (*nv)[0]->getPanning(), PanningLeft, PanningRight, 1, &ok ); if( ok ) { foreach( note * n, *nv ) { n->setPanning( new_val ); } m_lastNotePanning = new_val; } } } void PianoRoll::copy_to_clipboard( const NoteVector & _notes ) const { DataFile dataFile( DataFile::ClipboardData ); QDomElement note_list = dataFile.createElement( "note-list" ); dataFile.content().appendChild( note_list ); MidiTime start_pos( _notes.front()->pos().getTact(), 0 ); for( NoteVector::ConstIterator it = _notes.begin(); it != _notes.end(); ++it ) { note clip_note( **it ); clip_note.setPos( clip_note.pos( start_pos ) ); clip_note.saveState( dataFile, note_list ); } QMimeData * clip_content = new QMimeData; clip_content->setData( Clipboard::mimeType(), dataFile.toString().toUtf8() ); QApplication::clipboard()->setMimeData( clip_content, QClipboard::Clipboard ); } void PianoRoll::copySelectedNotes() { NoteVector selected_notes; getSelectedNotes( selected_notes ); if( selected_notes.empty() == false ) { copy_to_clipboard( selected_notes ); } } void PianoRoll::cutSelectedNotes() { if( hasValidPattern() == false ) { return; } NoteVector selected_notes; getSelectedNotes( selected_notes ); if( selected_notes.empty() == false ) { copy_to_clipboard( selected_notes ); engine::getSong()->setModified(); for( NoteVector::Iterator it = selected_notes.begin(); it != selected_notes.end(); ++it ) { // note (the memory of it) is also deleted by // pattern::removeNote(...) so we don't have to do that m_pattern->removeNote( *it ); } } update(); engine::songEditor()->update(); } void PianoRoll::pasteNotes() { if( hasValidPattern() == false ) { return; } QString value = QApplication::clipboard() ->mimeData( QClipboard::Clipboard ) ->data( Clipboard::mimeType() ); if( !value.isEmpty() ) { DataFile dataFile( value.toUtf8() ); QDomNodeList list = dataFile.elementsByTagName( note::classNodeName() ); // remove selection and select the newly pasted notes clearSelectedNotes(); if( !list.isEmpty() ) { m_pattern->addJournalCheckPoint(); } for( int i = 0; !list.item( i ).isNull(); ++i ) { // create the note note cur_note; cur_note.restoreState( list.item( i ).toElement() ); cur_note.setPos( cur_note.pos() + m_timeLine->pos() ); // select it cur_note.setSelected( true ); // add to pattern m_pattern->addNote( cur_note ); } // we only have to do the following lines if we pasted at // least one note... engine::getSong()->setModified(); m_ctrlMode = ModeDraw; m_drawButton->setChecked( true ); update(); engine::songEditor()->update(); } } void PianoRoll::deleteSelectedNotes() { if( hasValidPattern() == false ) { return; } bool update_after_delete = false; m_pattern->addJournalCheckPoint(); // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { if( ( *it )->selected() ) { // delete this note m_pattern->removeNote( ( *it ) ); update_after_delete = true; // start over, make sure we get all the notes it = notes.begin(); } else { ++it; } } if( update_after_delete == true ) { engine::getSong()->setModified(); update(); engine::songEditor()->update(); } } void PianoRoll::autoScroll( const MidiTime & _t ) { const int w = width() - WHITE_KEY_WIDTH; if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) { m_leftRightScroll->setValue( _t.getTact() * MidiTime::ticksPerTact() ); } else if( _t < m_currentPosition ) { MidiTime t = qMax( _t - w * MidiTime::ticksPerTact() * MidiTime::ticksPerTact() / m_ppt, 0 ); m_leftRightScroll->setValue( t.getTact() * MidiTime::ticksPerTact() ); } m_scrollBack = false; } void PianoRoll::updatePosition( const MidiTime & _t ) { if( ( engine::getSong()->isPlaying() && engine::getSong()->playMode() == song::Mode_PlayPattern && m_timeLine->autoScroll() == timeLine::AutoScrollEnabled ) || m_scrollBack == true ) { autoScroll( _t ); } } void PianoRoll::updatePositionAccompany( const MidiTime & _t ) { song * s = engine::getSong(); if( m_recording && hasValidPattern() && s->playMode() != song::Mode_PlayPattern ) { MidiTime pos = _t; if( s->playMode() != song::Mode_PlayBB ) { pos -= m_pattern->startPosition(); } if( (int) pos > 0 ) { s->getPlayPos( song::Mode_PlayPattern ).setTicks( pos ); autoScroll( pos ); } } } void PianoRoll::zoomingChanged() { const QString & zfac = m_zoomingModel.currentText(); m_ppt = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PR_PPT / 100; #ifdef LMMS_DEBUG assert( m_ppt > 0 ); #endif m_timeLine->setPixelsPerTact( m_ppt ); update(); } void PianoRoll::quantizeChanged() { update(); } int PianoRoll::quantization() const { if( m_quantizeModel.value() == 0 ) { if( m_noteLenModel.value() > 0 ) { return newNoteLen(); } else { return DefaultTicksPerTact / 16; } } return DefaultTicksPerTact / m_quantizeModel.currentText().right( m_quantizeModel.currentText().length() - 2 ).toInt(); } void PianoRoll::updateSemiToneMarkerMenu() { const InstrumentFunctionNoteStacking::Chord & scale = InstrumentFunctionNoteStacking::ChordTable::getInstance() .getScaleByName( m_scaleModel.currentText() ); const InstrumentFunctionNoteStacking::Chord & chord = InstrumentFunctionNoteStacking::ChordTable::getInstance() .getChordByName( m_chordModel.currentText() ); emit semiToneMarkerMenuScaleSetEnabled( ! scale.isEmpty() ); emit semiToneMarkerMenuChordSetEnabled( ! chord.isEmpty() ); } MidiTime PianoRoll::newNoteLen() const { if( m_noteLenModel.value() == 0 ) { return m_lenOfNewNotes; } return DefaultTicksPerTact / m_noteLenModel.currentText().right( m_noteLenModel.currentText().length() - 2 ).toInt(); } bool PianoRoll::mouseOverNote() { return hasValidPattern() && noteUnderMouse() != NULL; } note * PianoRoll::noteUnderMouse() { QPoint pos = mapFromGlobal( QCursor::pos() ); // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); if( pos.x() <= WHITE_KEY_WIDTH || pos.x() > width() - SCROLLBAR_SIZE || pos.y() < PR_TOP_MARGIN || pos.y() > keyAreaBottom() ) { return NULL; } int key_num = getKey( pos.y() ); int pos_ticks = ( pos.x() - WHITE_KEY_WIDTH ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // will be our iterator in the following loop NoteVector::ConstIterator it = notes.begin()+notes.size()-1; // loop through whole note-vector... int i; for( i = 0; i < notes.size(); ++i ) { // and check whether the cursor is over an // existing note if( pos_ticks >= ( *it )->pos() && pos_ticks <= ( *it )->pos() + ( *it )->length() && ( *it )->key() == key_num && ( *it )->length() > 0 ) { break; } --it; } if( i == notes.size() ) { return NULL; } return *it; } #include "moc_PianoRoll.cxx" lmms-1.1.3/src/gui/PianoView.cpp000066400000000000000000000602321247673406200164620ustar00rootroot00000000000000/* * Piano.cpp - implementation of piano-widget used in instrument-track-window * for testing + according model class * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /** \file piano.cpp * \brief A piano keyboard to play notes on in the instrument plugin window. */ /* * \mainpage Instrument plugin keyboard display classes * * \section introduction Introduction * * \todo fill this out * \todo write isWhite inline function and replace throughout */ #include #include #include #include #include #include "PianoView.h" #include "caption_menu.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "knob.h" #include "string_pair_drag.h" #include "MainWindow.h" #include "MidiEvent.h" #include "templates.h" #include "update_event.h" /*! The black / white order of keys as they appear on the keyboard. */ const Piano::KeyTypes KEY_ORDER[] = { // C CIS D DIS Piano::WhiteKey, Piano::BlackKey, Piano::WhiteKey, Piano::BlackKey, // E F FIS G Piano::WhiteKey, Piano::WhiteKey, Piano::BlackKey, Piano::WhiteKey, // GIS A B H Piano::BlackKey, Piano::WhiteKey, Piano::BlackKey, Piano::WhiteKey } ; /*! The scale of C Major - white keys only. */ Keys WhiteKeys[] = { Key_C, Key_D, Key_E, Key_F, Key_G, Key_A, Key_H } ; QPixmap * PianoView::s_whiteKeyPm = NULL; /*!< A white key released */ QPixmap * PianoView::s_blackKeyPm = NULL; /*!< A black key released */ QPixmap * PianoView::s_whiteKeyPressedPm = NULL; /*!< A white key pressed */ QPixmap * PianoView::s_blackKeyPressedPm = NULL; /*!< A black key pressed */ const int PIANO_BASE = 11; /*!< The height of the root note display */ const int PW_WHITE_KEY_WIDTH = 10; /*!< The width of a white key */ const int PW_BLACK_KEY_WIDTH = 8; /*!< The width of a black key */ const int PW_WHITE_KEY_HEIGHT = 57; /*!< The height of a white key */ const int PW_BLACK_KEY_HEIGHT = 38; /*!< The height of a black key */ const int LABEL_TEXT_SIZE = 7; /*!< The height of the key label text */ /*! \brief Create a new keyboard display view * * \param _parent the parent instrument plugin window * \todo are the descriptions of the m_startkey and m_lastkey properties correct? */ PianoView::PianoView( QWidget * _parent ) : QWidget( _parent ), /*!< Our parent */ ModelView( NULL, this ), /*!< Our view Model */ m_piano( NULL ), /*!< Our piano Model */ m_startKey( Key_C + Octave_3*KeysPerOctave ), /*!< The first key displayed? */ m_lastKey( -1 ) /*!< The last key displayed? */ { if( s_whiteKeyPm == NULL ) { s_whiteKeyPm = new QPixmap( embed::getIconPixmap( "white_key" ) ); } if( s_blackKeyPm == NULL ) { s_blackKeyPm = new QPixmap( embed::getIconPixmap( "black_key" ) ); } if( s_whiteKeyPressedPm == NULL ) { s_whiteKeyPressedPm = new QPixmap( embed::getIconPixmap( "white_key_pressed" ) ); } if ( s_blackKeyPressedPm == NULL ) { s_blackKeyPressedPm = new QPixmap( embed::getIconPixmap( "black_key_pressed" ) ); } setAttribute( Qt::WA_OpaquePaintEvent, true ); setFocusPolicy( Qt::StrongFocus ); setMaximumWidth( WhiteKeysPerOctave * NumOctaves * PW_WHITE_KEY_WIDTH ); // create scrollbar at the bottom m_pianoScroll = new QScrollBar( Qt::Horizontal, this ); m_pianoScroll->setSingleStep( 1 ); m_pianoScroll->setPageStep( 20 ); m_pianoScroll->setValue( Octave_3 * WhiteKeysPerOctave ); // and connect it to this widget connect( m_pianoScroll, SIGNAL( valueChanged( int ) ), this, SLOT( pianoScrolled( int ) ) ); // create a layout for ourselves QVBoxLayout * layout = new QVBoxLayout( this ); layout->setSpacing( 0 ); layout->setMargin( 0 ); layout->addSpacing( PIANO_BASE+PW_WHITE_KEY_HEIGHT ); layout->addWidget( m_pianoScroll ); } /*! \brief Destroy this piano display view * */ PianoView::~PianoView() { } /*! \brief Map a keyboard key being pressed to a note in our keyboard view * * \param _k The keyboard scan code of the key being pressed. * \todo check the scan codes for ',' = c, 'L' = c#, '.' = d, ':' = d#, * '/' = d, '[' = f', '=' = f'#, ']' = g' - Paul's additions */ int PianoView::getKeyFromKeyEvent( QKeyEvent * _ke ) { #ifdef LMMS_BUILD_APPLE const int k = _ke->nativeVirtualKey(); #else const int k = _ke->nativeScanCode(); #endif #ifdef LMMS_BUILD_WIN32 switch( k ) { case 44: return 0; // Z = C case 31: return 1; // S = C# case 45: return 2; // X = D case 32: return 3; // D = D# case 46: return 4; // C = E case 47: return 5; // V = F case 34: return 6; // G = F# case 48: return 7; // B = G case 35: return 8; // H = G# case 49: return 9; // N = A case 36: return 10; // J = A# case 50: return 11; // M = B case 51: return 12; // , = c case 38: return 13; // L = c# case 52: return 14; // . = d case 39: return 15; // ; = d# //case 86: return 16; // / = e case 53: return 16; // / = e case 16: return 12; // Q = c case 3: return 13; // 2 = c# case 17: return 14; // W = d case 4: return 15; // 3 = d# case 18: return 16; // E = e case 19: return 17; // R = f case 6: return 18; // 5 = f# case 20: return 19; // T = g case 7: return 20; // 6 = g# case 21: return 21; // Y = a case 8: return 22; // 7 = a# case 22: return 23; // U = b case 23: return 24; // I = c' case 10: return 25; // 9 = c'# case 24: return 26; // O = d' case 11: return 27; // 0 = d'# case 25: return 28; // P = e' case 26: return 29; // [ case 13: return 30; // = case 27: return 31; // ] } #endif #ifdef LMMS_BUILD_LINUX switch( k ) { case 52: return 0; // Z = C case 39: return 1; // S = C# case 53: return 2; // X = D case 40: return 3; // D = D# case 54: return 4; // C = E case 55: return 5; // V = F case 42: return 6; // G = F# case 56: return 7; // B = G case 43: return 8; // H = G# case 57: return 9; // N = A case 44: return 10; // J = A# case 58: return 11; // M = B case 59: return 12; // , = c case 46: return 13; // L = c# case 60: return 14; // . = d case 47: return 15; // ; = d# case 61: return 16; // / = e case 24: return 12; // Q = c case 11: return 13; // 2 = c# case 25: return 14; // W = d case 12: return 15; // 3 = d# case 26: return 16; // E = e case 27: return 17; // R = f case 14: return 18; // 5 = f# case 28: return 19; // T = g case 15: return 20; // 6 = g# case 29: return 21; // Y = a case 16: return 22; // 7 = a# case 30: return 23; // U = b case 31: return 24; // I = c' case 18: return 25; // 9 = c'# case 32: return 26; // O = d' case 19: return 27; // 0 = d'# case 33: return 28; // P = e' case 34: return 29; // [ case 21: return 30; // = case 35: return 31; // ] } #endif #ifdef LMMS_BUILD_APPLE switch( k ) { case 6: return 0; // Z = C case 1: return 1; // S = C# case 7: return 2; // X = D case 2: return 3; // D = D# case 8: return 4; // C = E case 9: return 5; // V = F case 5: return 6; // G = F# case 11: return 7; // B = G case 4: return 8; // H = G# case 45: return 9; // N = A case 38: return 10; // J = A# case 46: return 11; // M = B case 43: return 12; // , = c case 37: return 13; // L = c# case 47: return 14; // . = d case 41: return 15; // ; = d# case 44: return 16; // / = e case 12: return 12; // Q = c case 19: return 13; // 2 = c# case 13: return 14; // W = d case 20: return 15; // 3 = d# case 14: return 16; // E = e case 15: return 17; // R = f case 23: return 18; // 5 = f# case 17: return 19; // T = g case 22: return 20; // 6 = g# case 16: return 21; // Y = a case 26: return 22; // 7 = a# case 32: return 23; // U = b case 34: return 24; // I = c' case 25: return 25; // 9 = c'# case 31: return 26; // O = d' case 29: return 27; // 0 = d'# case 35: return 28; // P = e' } #endif return -100; } /*! \brief Register a change to this piano display view * */ void PianoView::modelChanged() { m_piano = castModel(); if( m_piano != NULL ) { connect( m_piano->instrumentTrack()->baseNoteModel(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); } } // gets the key from the given mouse-position /*! \brief Get the key from the mouse position in the piano display * * First we determine it roughly by the position of the point given in * white key widths from our start. We then add in any black keys that * might have been skipped over (they take a key number, but no 'white * key' space). We then add in our starting key number. * * We then determine whether it was a black key that was pressed by * checking whether it was within the vertical range of black keys. * Black keys sit exactly between white keys on this keyboard, so * we then shift the note down or up if we were in the left or right * half of the white note. We only do this, of course, if the white * note has a black key on that side, so to speak. * * This function returns const because there is a linear mapping from * the point given to the key returned that never changes. * * \param _p The point that the mouse was pressed. */ int PianoView::getKeyFromMouse( const QPoint & _p ) const { int key_num = (int)( (float) _p.x() / (float) PW_WHITE_KEY_WIDTH ); for( int i = 0; i <= key_num; ++i ) { if( KEY_ORDER[( m_startKey+i ) % KeysPerOctave] == Piano::BlackKey ) { ++key_num; } } key_num += m_startKey; // is it a black key? if( _p.y() < PIANO_BASE + PW_BLACK_KEY_HEIGHT ) { // then do extra checking whether the mouse-cursor is over // a black key if( key_num > 0 && KEY_ORDER[(key_num-1 ) % KeysPerOctave] == Piano::BlackKey && _p.x() % PW_WHITE_KEY_WIDTH <= ( PW_WHITE_KEY_WIDTH / 2 ) - ( PW_BLACK_KEY_WIDTH / 2 ) ) { --key_num; } if( key_num < NumKeys - 1 && KEY_ORDER[( key_num + 1 ) % KeysPerOctave] == Piano::BlackKey && _p.x() % PW_WHITE_KEY_WIDTH >= ( PW_WHITE_KEY_WIDTH - PW_BLACK_KEY_WIDTH / 2 ) ) { ++key_num; } } // some range-checking-stuff return tLimit( key_num, 0, NumKeys - 1 ); } // handler for scrolling-event /*! \brief Handle the scrolling on the piano display view * * We need to update our start key position based on the new position. * * \param _new_pos the new key position. */ void PianoView::pianoScrolled( int _new_pos ) { m_startKey = WhiteKeys[_new_pos % WhiteKeysPerOctave]+ ( _new_pos / WhiteKeysPerOctave ) * KeysPerOctave; update(); } /*! \brief Handle a context menu selection on the piano display view * * \param _me the ContextMenuEvent to handle. * \todo Is this right, or does this create the context menu? */ void PianoView::contextMenuEvent( QContextMenuEvent * _me ) { if( _me->pos().y() > PIANO_BASE || m_piano == NULL ) { QWidget::contextMenuEvent( _me ); return; } captionMenu contextMenu( tr( "Base note" ) ); AutomatableModelView amv( m_piano->instrumentTrack()->baseNoteModel(), &contextMenu ); amv.addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); } // handler for mouse-click-event /*! \brief Handle a mouse click on this piano display view * * We first determine the key number using the getKeyFromMouse() method. * * If we're below the 'root key selection' area, * we set the volume of the note to be proportional to the vertical * position on the keyboard - lower down the key is louder, within the * boundaries of the (white or black) key pressed. We then tell the * instrument to play that note, scaling for MIDI max loudness = 127. * * If we're in the 'root key selection' area, of course, we set the * root key to be that key. * * We finally update ourselves to show the key press * * \param _me the mouse click to handle. */ void PianoView::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && m_piano != NULL ) { // get pressed key int key_num = getKeyFromMouse( _me->pos() ); if( _me->pos().y() > PIANO_BASE ) { int y_diff = _me->pos().y() - PIANO_BASE; int velocity = (int)( ( float ) y_diff / ( ( KEY_ORDER[key_num % KeysPerOctave] == Piano::WhiteKey ) ? PW_WHITE_KEY_HEIGHT : PW_BLACK_KEY_HEIGHT ) * (float) m_piano->instrumentTrack()->midiPort()->baseVelocity() ); if( y_diff < 0 ) { velocity = 0; } else if( y_diff > ( ( KEY_ORDER[key_num % KeysPerOctave] == Piano::WhiteKey ) ? PW_WHITE_KEY_HEIGHT : PW_BLACK_KEY_HEIGHT ) ) { velocity = m_piano->instrumentTrack()->midiPort()->baseVelocity(); } // set note on m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOn, -1, key_num, velocity ) ); m_piano->setKeyState( key_num, true ); m_lastKey = key_num; emit keyPressed( key_num ); } else { if( _me->modifiers() & Qt::ControlModifier ) { new stringPairDrag( "automatable_model", QString::number( m_piano->instrumentTrack()->baseNoteModel()->id() ), QPixmap(), this ); _me->accept(); } else { m_piano->instrumentTrack()->baseNoteModel()->setInitValue( (float) key_num ); emit baseNoteChanged(); } } // and let the user see that he pressed a key... :) update(); } } // handler for mouse-release-event /*! \brief Handle a mouse release event on the piano display view * * If a key was pressed by the in the mousePressEvent() function, we * turn the note off. * * \param _me the mousePressEvent to handle. */ void PianoView::mouseReleaseEvent( QMouseEvent * ) { if( m_lastKey != -1 ) { if( m_piano != NULL ) { m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, -1, m_lastKey, 0 ) ); m_piano->setKeyState( m_lastKey, false ); } // and let the user see that he released a key... :) update(); m_lastKey = -1; } } // handler for mouse-move-event /*! \brief Handle a mouse move event on the piano display view * * This handles the user dragging the mouse across the keys. It uses * code from mousePressEvent() and mouseReleaseEvent(), also correcting * for if the mouse movement has stayed within one key and if the mouse * has moved outside the vertical area of the keyboard (which is still * allowed but won't make the volume go up to 11). * * \param _me the ContextMenuEvent to handle. * \todo Paul Wayper thinks that this code should be refactored to * reduce or remove the duplication between this, the mousePressEvent() * and mouseReleaseEvent() methods. */ void PianoView::mouseMoveEvent( QMouseEvent * _me ) { if( m_piano == NULL ) { return; } int key_num = getKeyFromMouse( _me->pos() ); int y_diff = _me->pos().y() - PIANO_BASE; int velocity = (int)( (float) y_diff / ( ( KEY_ORDER[key_num % KeysPerOctave] == Piano::WhiteKey ) ? PW_WHITE_KEY_HEIGHT : PW_BLACK_KEY_HEIGHT ) * (float) m_piano->instrumentTrack()->midiPort()->baseVelocity() ); // maybe the user moved the mouse-cursor above or under the // piano-widget while holding left button so check that and // correct volume if necessary if( y_diff < 0 ) { velocity = 0; } else if( y_diff > ( ( KEY_ORDER[key_num % KeysPerOctave] == Piano::WhiteKey ) ? PW_WHITE_KEY_HEIGHT : PW_BLACK_KEY_HEIGHT ) ) { velocity = m_piano->instrumentTrack()->midiPort()->baseVelocity(); } // is the calculated key different from current key? (could be the // user just moved the cursor one pixel left but on the same key) if( key_num != m_lastKey ) { if( m_lastKey != -1 ) { m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, -1, m_lastKey, 0 ) ); m_piano->setKeyState( m_lastKey, false ); m_lastKey = -1; } if( _me->buttons() & Qt::LeftButton ) { if( _me->pos().y() > PIANO_BASE ) { m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOn, -1, key_num, velocity ) ); m_piano->setKeyState( key_num, true ); m_lastKey = key_num; } else { m_piano->instrumentTrack()->baseNoteModel()->setInitValue( (float) key_num ); } } // and let the user see that he pressed a key... :) update(); } else if( m_piano->isKeyPressed( key_num ) ) { m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiKeyPressure, -1, key_num, velocity ) ); } } /*! \brief Handle a key press event on the piano display view * * We determine our key number from the getKeyFromKeyEvent() method, * and pass the event on to the piano's handleKeyPress() method if * auto-repeat is off. * * \param _ke the KeyEvent to handle. */ void PianoView::keyPressEvent( QKeyEvent * _ke ) { const int key_num = getKeyFromKeyEvent( _ke ) + ( DefaultOctave - 1 ) * KeysPerOctave; if( _ke->isAutoRepeat() == false && key_num > -1 ) { if( m_piano != NULL ) { m_piano->handleKeyPress( key_num ); _ke->accept(); update(); } } else { _ke->ignore(); } } /*! \brief Handle a key release event on the piano display view * * The same logic as the keyPressEvent() method. * * \param _ke the KeyEvent to handle. */ void PianoView::keyReleaseEvent( QKeyEvent * _ke ) { const int key_num = getKeyFromKeyEvent( _ke ) + ( DefaultOctave - 1 ) * KeysPerOctave; if( _ke->isAutoRepeat() == false && key_num > -1 ) { if( m_piano != NULL ) { m_piano->handleKeyRelease( key_num ); _ke->accept(); update(); } } else { _ke->ignore(); } } /*! \brief Handle the focus leaving the piano display view * * Turn off all notes if we lose focus. * * \todo Is there supposed to be a parameter given here? */ void PianoView::focusOutEvent( QFocusEvent * ) { if( m_piano == NULL ) { return; } // focus just switched to another control inside the instrument track // window we live in? if( parentWidget()->parentWidget()->focusWidget() != this && parentWidget()->parentWidget()->focusWidget() != NULL && !parentWidget()->parentWidget()-> focusWidget()->inherits( "QLineEdit" ) ) { // then reclaim keyboard focus! setFocus(); return; } // if we loose focus, we HAVE to note off all running notes because // we don't receive key-release-events anymore and so the notes would // hang otherwise for( int i = 0; i < NumKeys; ++i ) { m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, -1, i, 0 ) ); m_piano->setKeyState( i, false ); } update(); } /*! \brief update scrollbar range after resize * * After resizing we need to adjust range of scrollbar for not allowing * to scroll too far to the right. * * \param _event resize-event object (unused) */ void PianoView::resizeEvent( QResizeEvent * _event ) { QWidget::resizeEvent( _event ); m_pianoScroll->setRange( 0, WhiteKeysPerOctave * NumOctaves - (int) ceil( (float) width() / PW_WHITE_KEY_WIDTH ) ); } /*! \brief Convert a key number to an X coordinate in the piano display view * * We can immediately discard the trivial case of when the key number is * less than our starting key. We then iterate through the keys from the * start key to this key, adding the width of each key as we go. For * black keys, and the first white key if there is no black key between * two white keys, we add half a white key width; for that second white * key, we add a whole width. That takes us to the boundary of a white * key - subtract half a width to get to the middle. * * \param _key_num the keyboard key to translate * \todo is this description of what the method does correct? * \todo replace the final subtract with initialising x to width/2. */ int PianoView::getKeyX( int _key_num ) const { int k = m_startKey; if( _key_num < m_startKey ) { return ( _key_num - k ) * PW_WHITE_KEY_WIDTH / 2; } int x = 0; int white_cnt = 0; while( k <= _key_num ) { if( KEY_ORDER[k % KeysPerOctave] == Piano::WhiteKey ) { ++white_cnt; if( white_cnt > 1 ) { x += PW_WHITE_KEY_WIDTH; } else { x += PW_WHITE_KEY_WIDTH/2; } } else { white_cnt = 0; x += PW_WHITE_KEY_WIDTH/2; } ++k; } x -= PW_WHITE_KEY_WIDTH / 2; return x; } /*! \brief Paint the piano display view in response to an event * * This method draws the piano and the 'root note' base. It draws * the base first, then all the white keys, then all the black keys. * * \todo Is there supposed to be a parameter given here? */ void PianoView::paintEvent( QPaintEvent * ) { QPainter p( this ); // set smaller font for printing number of every octave p.setFont( pointSize( p.font() ) ); // draw blue bar above the actual keyboard (there will be the labels // for all C's) QLinearGradient g( 0, 0, 0, PIANO_BASE-3 ); g.setColorAt( 0, Qt::black ); g.setColorAt( 0.1, QColor( 96, 96, 96 ) ); g.setColorAt( 1, Qt::black ); p.fillRect( QRect( 0, 1, width(), PIANO_BASE-2 ), g ); // draw stuff above the actual keyboard p.setPen( Qt::black ); p.drawLine( 0, 0, width(), 0 ); p.drawLine( 0, PIANO_BASE-1, width(), PIANO_BASE-1 ); p.setPen( Qt::white ); const int base_key = ( m_piano != NULL ) ? m_piano->instrumentTrack()->baseNoteModel()->value() : 0; g.setColorAt( 0, QApplication::palette().color( QPalette::Active, QPalette::BrightText ).darker(220) ); g.setColorAt( 0.1, QApplication::palette().color( QPalette::Active, QPalette::BrightText ) ); g.setColorAt( 1, QApplication::palette().color( QPalette::Active, QPalette::BrightText ) ); if( KEY_ORDER[base_key % KeysPerOctave] == Piano::WhiteKey ) { p.fillRect( QRect( getKeyX( base_key ), 1, PW_WHITE_KEY_WIDTH-1, PIANO_BASE-2 ), g ); } else { p.fillRect( QRect( getKeyX( base_key ) + 1, 1, PW_BLACK_KEY_WIDTH - 1, PIANO_BASE - 2 ), g ); } int cur_key = m_startKey; // draw all white keys... for( int x = 0; x < width(); ) { while( KEY_ORDER[cur_key%KeysPerOctave] != Piano::WhiteKey ) { ++cur_key; } // draw pressed or not pressed key, depending on state of // current key if( m_piano && m_piano->isKeyPressed( cur_key ) ) { p.drawPixmap( x, PIANO_BASE, *s_whiteKeyPressedPm ); } else { p.drawPixmap( x, PIANO_BASE, *s_whiteKeyPm ); } x += PW_WHITE_KEY_WIDTH; if( (Keys) (cur_key%KeysPerOctave) == Key_C ) { // label key of note C with "C" and number of current // octave p.drawText( x - PW_WHITE_KEY_WIDTH, LABEL_TEXT_SIZE + 2, QString( "C" ) + QString::number( cur_key / KeysPerOctave, 10 ) ); } ++cur_key; } // reset all values, because now we're going to draw all black keys cur_key = m_startKey; int white_cnt = 0; int startKey = m_startKey; if( startKey > 0 && KEY_ORDER[(Keys)(--startKey) % KeysPerOctave] == Piano::BlackKey ) { if( m_piano && m_piano->isKeyPressed( startKey ) ) { p.drawPixmap( 0 - PW_WHITE_KEY_WIDTH / 2, PIANO_BASE, *s_blackKeyPressedPm ); } else { p.drawPixmap( 0 - PW_WHITE_KEY_WIDTH / 2, PIANO_BASE, *s_blackKeyPm ); } } // now draw all black keys... for( int x = 0; x < width(); ) { if( KEY_ORDER[cur_key%KeysPerOctave] == Piano::BlackKey ) { // draw pressed or not pressed key, depending on // state of current key if( m_piano && m_piano->isKeyPressed( cur_key ) ) { p.drawPixmap( x + PW_WHITE_KEY_WIDTH / 2, PIANO_BASE, *s_blackKeyPressedPm ); } else { p.drawPixmap( x + PW_WHITE_KEY_WIDTH / 2, PIANO_BASE, *s_blackKeyPm ); } x += PW_WHITE_KEY_WIDTH; white_cnt = 0; } else { // simple workaround for increasing x if there were two // white keys (e.g. between E and F) ++white_cnt; if( white_cnt > 1 ) { x += PW_WHITE_KEY_WIDTH; } } ++cur_key; } } #include "moc_PianoView.cxx" lmms-1.1.3/src/gui/SongEditor.cpp000066400000000000000000000510401247673406200166330ustar00rootroot00000000000000/* * SongEditor.cpp - basic window for song-editing * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include "SongEditor.h" #include "automatable_slider.h" #include "combobox.h" #include "config_mgr.h" #include "cpuload_widget.h" #include "embed.h" #include "LcdSpinBox.h" #include "MainWindow.h" #include "MeterDialog.h" #include "text_float.h" #include "timeline.h" #include "tool_button.h" #include "tooltip.h" #include "visualization_widget.h" #include "TimeDisplayWidget.h" #include "AudioDevice.h" #include "PianoRoll.h" #include "config_mgr.h" positionLine::positionLine( QWidget * _parent ) : QWidget( _parent ) { setFixedWidth( 1 ); setAttribute( Qt::WA_NoSystemBackground, true ); } void positionLine::paintEvent( QPaintEvent * _pe ) { QPainter p( this ); p.fillRect( rect(), QColor( 255, 255, 255, 153 ) ); } SongEditor::SongEditor( song * _song ) : TrackContainerView( _song ), m_s( _song ), m_scrollBack( false ), m_smoothScroll( configManager::inst()->value( "ui", "smoothscroll" ).toInt() ) { setWindowTitle( tr( "Song-Editor" ) ); setWindowIcon( embed::getIconPixmap( "songeditor" ) ); setFocusPolicy( Qt::StrongFocus ); setFocus(); // create time-line int widgetTotal = configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt()==1 ? DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT + TRACK_OP_WIDTH_COMPACT : DEFAULT_SETTINGS_WIDGET_WIDTH + TRACK_OP_WIDTH; m_timeLine = new timeLine( widgetTotal, 32, pixelsPerTact(), m_s->m_playPos[song::Mode_PlaySong], m_currentPosition, this ); connect( this, SIGNAL( positionChanged( const MidiTime & ) ), m_s->m_playPos[song::Mode_PlaySong].m_timeLine, SLOT( updatePosition( const MidiTime & ) ) ); connect( m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( updatePosition( const MidiTime & ) ) ); m_positionLine = new positionLine( this ); // let's get notified when loading a project connect( m_s, SIGNAL( projectLoaded() ), this, SLOT( adjustUiAfterProjectLoad() ) ); // add some essential widgets to global tool-bar QWidget * tb = engine::mainWindow()->toolBar(); engine::mainWindow()->addSpacingToToolBar( 10 ); m_tempoSpinBox = new LcdSpinBox( 3, tb, tr( "Tempo" ) ); m_tempoSpinBox->setModel( &m_s->m_tempoModel ); m_tempoSpinBox->setLabel( tr( "TEMPO/BPM" ) ); toolTip::add( m_tempoSpinBox, tr( "tempo of song" ) ); m_tempoSpinBox->setWhatsThis( tr( "The tempo of a song is specified in beats per minute " "(BPM). If you want to change the tempo of your " "song, change this value. Every measure has four beats, " "so the tempo in BPM specifies, how many measures / 4 " "should be played within a minute (or how many measures " "should be played within four minutes)." ) ); int tempoSpinBoxCol = engine::mainWindow()->addWidgetToToolBar( m_tempoSpinBox, 0 ); #if 0 toolButton * hq_btn = new toolButton( embed::getIconPixmap( "hq_mode" ), tr( "High quality mode" ), NULL, NULL, tb ); hq_btn->setCheckable( TRUE ); connect( hq_btn, SIGNAL( toggled( bool ) ), this, SLOT( setHighQuality( bool ) ) ); hq_btn->setFixedWidth( 42 ); engine::mainWindow()->addWidgetToToolBar( hq_btn, 1, col ); #endif engine::mainWindow()->addWidgetToToolBar( new TimeDisplayWidget, 1, tempoSpinBoxCol ); engine::mainWindow()->addSpacingToToolBar( 10 ); m_timeSigDisplay = new MeterDialog( this, TRUE ); m_timeSigDisplay->setModel( &m_s->m_timeSigModel ); engine::mainWindow()->addWidgetToToolBar( m_timeSigDisplay ); engine::mainWindow()->addSpacingToToolBar( 10 ); QLabel * master_vol_lbl = new QLabel( tb ); master_vol_lbl->setPixmap( embed::getIconPixmap( "master_volume" ) ); m_masterVolumeSlider = new automatableSlider( tb, tr( "Master volume" ) ); m_masterVolumeSlider->setModel( &m_s->m_masterVolumeModel ); m_masterVolumeSlider->setOrientation( Qt::Vertical ); m_masterVolumeSlider->setPageStep( 1 ); m_masterVolumeSlider->setTickPosition( QSlider::TicksLeft ); m_masterVolumeSlider->setFixedSize( 26, 60 ); m_masterVolumeSlider->setTickInterval( 50 ); toolTip::add( m_masterVolumeSlider, tr( "master volume" ) ); connect( m_masterVolumeSlider, SIGNAL( logicValueChanged( int ) ), this, SLOT( masterVolumeChanged( int ) ) ); connect( m_masterVolumeSlider, SIGNAL( sliderPressed() ), this, SLOT( masterVolumePressed() ) ); connect( m_masterVolumeSlider, SIGNAL( logicSliderMoved( int ) ), this, SLOT( masterVolumeMoved( int ) ) ); connect( m_masterVolumeSlider, SIGNAL( sliderReleased() ), this, SLOT( masterVolumeReleased() ) ); m_mvsStatus = new textFloat; m_mvsStatus->setTitle( tr( "Master volume" ) ); m_mvsStatus->setPixmap( embed::getIconPixmap( "master_volume" ) ); engine::mainWindow()->addWidgetToToolBar( master_vol_lbl ); engine::mainWindow()->addWidgetToToolBar( m_masterVolumeSlider ); engine::mainWindow()->addSpacingToToolBar( 10 ); QLabel * master_pitch_lbl = new QLabel( tb ); master_pitch_lbl->setPixmap( embed::getIconPixmap( "master_pitch" ) ); master_pitch_lbl->setFixedHeight( 64 ); m_masterPitchSlider = new automatableSlider( tb, tr( "Master pitch" ) ); m_masterPitchSlider->setModel( &m_s->m_masterPitchModel ); m_masterPitchSlider->setOrientation( Qt::Vertical ); m_masterPitchSlider->setPageStep( 1 ); m_masterPitchSlider->setTickPosition( QSlider::TicksLeft ); m_masterPitchSlider->setFixedSize( 26, 60 ); m_masterPitchSlider->setTickInterval( 12 ); toolTip::add( m_masterPitchSlider, tr( "master pitch" ) ); connect( m_masterPitchSlider, SIGNAL( logicValueChanged( int ) ), this, SLOT( masterPitchChanged( int ) ) ); connect( m_masterPitchSlider, SIGNAL( sliderPressed() ), this, SLOT( masterPitchPressed() ) ); connect( m_masterPitchSlider, SIGNAL( logicSliderMoved( int ) ), this, SLOT( masterPitchMoved( int ) ) ); connect( m_masterPitchSlider, SIGNAL( sliderReleased() ), this, SLOT( masterPitchReleased() ) ); m_mpsStatus = new textFloat; m_mpsStatus->setTitle( tr( "Master pitch" ) ); m_mpsStatus->setPixmap( embed::getIconPixmap( "master_pitch" ) ); engine::mainWindow()->addWidgetToToolBar( master_pitch_lbl ); engine::mainWindow()->addWidgetToToolBar( m_masterPitchSlider ); engine::mainWindow()->addSpacingToToolBar( 10 ); // create widget for visualization- and cpu-load-widget QWidget * vc_w = new QWidget( tb ); QVBoxLayout * vcw_layout = new QVBoxLayout( vc_w ); vcw_layout->setMargin( 0 ); vcw_layout->setSpacing( 0 ); //vcw_layout->addStretch(); vcw_layout->addWidget( new visualizationWidget( embed::getIconPixmap( "output_graph" ), vc_w ) ); vcw_layout->addWidget( new cpuloadWidget( vc_w ) ); vcw_layout->addStretch(); engine::mainWindow()->addWidgetToToolBar( vc_w ); // create own toolbar m_toolBar = new QWidget( this ); m_toolBar->setFixedHeight( 32 ); m_toolBar->setAutoFillBackground( true ); QPalette pal; pal.setBrush( m_toolBar->backgroundRole(), embed::getIconPixmap( "toolbar_bg" ) ); m_toolBar->setPalette( pal ); static_cast( layout() )->insertWidget( 0, m_toolBar ); static_cast( layout() )->insertWidget( 1, m_timeLine ); QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); tb_layout->setMargin( 0 ); tb_layout->setSpacing( 0 ); // fill own tool-bar m_playButton = new toolButton( embed::getIconPixmap( "play" ), tr( "Play song (Space)" ), this, SLOT( play() ), m_toolBar ); m_playButton->setObjectName( "playButton" ); m_recordButton = new toolButton( embed::getIconPixmap( "record" ), tr( "Record samples from Audio-device" ), this, SLOT( record() ), m_toolBar ); m_recordButton->setObjectName( "recordButton" ); m_recordAccompanyButton = new toolButton( embed::getIconPixmap( "record_accompany" ), tr( "Record samples from Audio-device while playing " "song or BB track" ), this, SLOT( recordAccompany() ), m_toolBar ); m_recordAccompanyButton->setObjectName( "recordAccompanyButton" ); // FIXME: disable record button while it is not implemented m_recordButton->setDisabled( true ); // disable record buttons if capturing is not supported if( !engine::mixer()->audioDev()->supportsCapture() ) { m_recordButton->setDisabled( true ); m_recordAccompanyButton->setDisabled( true ); } m_stopButton = new toolButton( embed::getIconPixmap( "stop" ), tr( "Stop song (Space)" ), this, SLOT( stop() ), m_toolBar ); m_stopButton->setObjectName( "stopButton" ); m_addBBTrackButton = new toolButton( embed::getIconPixmap( "add_bb_track" ), tr( "Add beat/bassline" ), m_s, SLOT( addBBTrack() ), m_toolBar ); m_addSampleTrackButton = new toolButton( embed::getIconPixmap( "add_sample_track" ), tr( "Add sample-track" ), m_s, SLOT( addSampleTrack() ), m_toolBar ); m_addAutomationTrackButton = new toolButton( embed::getIconPixmap( "add_automation" ), tr( "Add automation-track" ), m_s, SLOT( addAutomationTrack() ), m_toolBar ); m_drawModeButton = new toolButton( embed::getIconPixmap( "edit_draw" ), tr( "Draw mode" ), NULL, NULL, m_toolBar ); m_drawModeButton->setCheckable( true ); m_drawModeButton->setChecked( true ); m_editModeButton = new toolButton( embed::getIconPixmap( "edit_select" ), tr( "Edit mode (select and move)" ), NULL, NULL, m_toolBar ); m_editModeButton->setCheckable( true ); QButtonGroup * tool_button_group = new QButtonGroup( this ); tool_button_group->addButton( m_drawModeButton ); tool_button_group->addButton( m_editModeButton ); tool_button_group->setExclusive( true ); #if 0 #warning TODO QWhatsThis::add( m_playButton, tr( "Click here, if you want to play " "your whole song. Playing will " "be started at the " "song-position-marker (green). " "You can also move it while " "playing." ) ); QWhatsThis::add( m_stopButton, tr ( "Click here, if you want to stop " "playing of your song. The " "song-position-marker will be " "set to the start of your song." ) ); /* QWhatsThis::add( m_insertBarButton, tr( "If you click here, a " "bar will " "be inserted at the " "current bar." ) ); QWhatsThis::add( m_removeBarButton, tr( "If you click here, the " "current bar will be " "removed." ) );*/ #endif QLabel * zoom_lbl = new QLabel( m_toolBar ); zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); // setup zooming-stuff m_zoomingComboBox = new comboBox( m_toolBar ); m_zoomingComboBox->setFixedSize( 80, 22 ); m_zoomingComboBox->move( 580, 4 ); for( int i = 0; i < 7; ++i ) { m_zoomingComboBox->model()->addItem( QString::number( 25 << i ) + "%" ); } m_zoomingComboBox->model()->setInitValue( m_zoomingComboBox->model()->findText( "100%" ) ); connect( m_zoomingComboBox->model(), SIGNAL( dataChanged() ), this, SLOT( zoomingChanged() ) ); tb_layout->addSpacing( 5 ); tb_layout->addWidget( m_playButton ); tb_layout->addWidget( m_recordButton ); tb_layout->addWidget( m_recordAccompanyButton ); tb_layout->addWidget( m_stopButton ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_addBBTrackButton ); tb_layout->addWidget( m_addSampleTrackButton ); tb_layout->addWidget( m_addAutomationTrackButton ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_drawModeButton ); tb_layout->addWidget( m_editModeButton ); tb_layout->addSpacing( 10 ); m_timeLine->addToolButtons( m_toolBar ); tb_layout->addSpacing( 15 ); tb_layout->addWidget( zoom_lbl ); tb_layout->addSpacing( 5 ); tb_layout->addWidget( m_zoomingComboBox ); tb_layout->addStretch(); m_leftRightScroll = new QScrollBar( Qt::Horizontal, this ); m_leftRightScroll->setMinimum( 0 ); m_leftRightScroll->setMaximum( 0 ); m_leftRightScroll->setSingleStep( 1 ); m_leftRightScroll->setPageStep( 20 ); static_cast( layout() )->addWidget( m_leftRightScroll ); connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ), this, SLOT( scrolled( int ) ) ); connect( m_s, SIGNAL( lengthChanged( int ) ), this, SLOT( updateScrollBar( int ) ) ); engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->resize( 600, 300 ); parentWidget()->move( 5, 5 ); parentWidget()->show(); } SongEditor::~SongEditor() { } void SongEditor::setHighQuality( bool _hq ) { engine::mixer()->changeQuality( Mixer::qualitySettings( _hq ? Mixer::qualitySettings::Mode_HighQuality : Mixer::qualitySettings::Mode_Draft ) ); } void SongEditor::scrolled( int _new_pos ) { update(); emit positionChanged( m_currentPosition = MidiTime( _new_pos, 0 ) ); } void SongEditor::setPauseIcon( bool pause ) { if( pause == true ) { m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); } else { m_playButton->setIcon( embed::getIconPixmap( "play" ) ); } } void SongEditor::play() { if( engine::getSong()->playMode() != song::Mode_PlaySong ) { engine::getSong()->playSong(); } else { engine::getSong()->togglePause(); } } void SongEditor::record() { m_s->record(); } void SongEditor::recordAccompany() { m_s->playAndRecord(); } void SongEditor::stop() { m_s->stop(); engine::pianoRoll()->stopRecording(); } void SongEditor::keyPressEvent( QKeyEvent * _ke ) { if( /*_ke->modifiers() & Qt::ShiftModifier*/ engine::mainWindow()->isShiftPressed() == TRUE && _ke->key() == Qt::Key_Insert ) { m_s->insertBar(); } else if(/* _ke->modifiers() & Qt::ShiftModifier &&*/ engine::mainWindow()->isShiftPressed() == TRUE && _ke->key() == Qt::Key_Delete ) { m_s->removeBar(); } else if( _ke->key() == Qt::Key_Left ) { tick_t t = m_s->currentTick() - MidiTime::ticksPerTact(); if( t >= 0 ) { m_s->setPlayPos( t, song::Mode_PlaySong ); } } else if( _ke->key() == Qt::Key_Right ) { tick_t t = m_s->currentTick() + MidiTime::ticksPerTact(); if( t < MaxSongLength ) { m_s->setPlayPos( t, song::Mode_PlaySong ); } } else if( _ke->key() == Qt::Key_Space ) { if( m_s->isPlaying() ) { stop(); } else { play(); } } else if( _ke->key() == Qt::Key_Home ) { m_s->setPlayPos( 0, song::Mode_PlaySong ); } else { QWidget::keyPressEvent( _ke ); } } void SongEditor::wheelEvent( QWheelEvent * _we ) { if( engine::mainWindow()->isCtrlPressed() == TRUE ) { if( _we->delta() > 0 ) { setPixelsPerTact( (int) qMin( pixelsPerTact() * 2, 256.0f ) ); } else if( pixelsPerTact() >= 8 ) { setPixelsPerTact( (int) pixelsPerTact() / 2 ); } // update combobox with zooming-factor m_zoomingComboBox->model()->setValue( m_zoomingComboBox->model()->findText( QString::number( static_cast( pixelsPerTact() * 100 / DEFAULT_PIXELS_PER_TACT ) ) + "%" ) ); // update timeline m_s->m_playPos[song::Mode_PlaySong].m_timeLine-> setPixelsPerTact( pixelsPerTact() ); // and make sure, all TCO's are resized and relocated realignTracks(); } else if( engine::mainWindow()->isShiftPressed() == TRUE ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - _we->delta() / 30 ); } else { _we->ignore(); return; } _we->accept(); } void SongEditor::masterVolumeChanged( int _new_val ) { masterVolumeMoved( _new_val ); if( m_mvsStatus->isVisible() == FALSE && m_s->m_loadingProject == FALSE && m_masterVolumeSlider->showStatus() ) { m_mvsStatus->moveGlobal( m_masterVolumeSlider, QPoint( m_masterVolumeSlider->width() + 2, -2 ) ); m_mvsStatus->setVisibilityTimeOut( 1000 ); } engine::mixer()->setMasterGain( _new_val / 100.0f ); } void SongEditor::masterVolumePressed( void ) { m_mvsStatus->moveGlobal( m_masterVolumeSlider, QPoint( m_masterVolumeSlider->width() + 2, -2 ) ); m_mvsStatus->show(); masterVolumeMoved( m_s->m_masterVolumeModel.value() ); } void SongEditor::masterVolumeMoved( int _new_val ) { m_mvsStatus->setText( tr( "Value: %1%" ).arg( _new_val ) ); } void SongEditor::masterVolumeReleased( void ) { m_mvsStatus->hide(); } void SongEditor::masterPitchChanged( int _new_val ) { masterPitchMoved( _new_val ); if( m_mpsStatus->isVisible() == FALSE && m_s->m_loadingProject == FALSE && m_masterPitchSlider->showStatus() ) { m_mpsStatus->moveGlobal( m_masterPitchSlider, QPoint( m_masterPitchSlider->width() + 2, -2 ) ); m_mpsStatus->setVisibilityTimeOut( 1000 ); } } void SongEditor::masterPitchPressed( void ) { m_mpsStatus->moveGlobal( m_masterPitchSlider, QPoint( m_masterPitchSlider->width() + 2, -2 ) ); m_mpsStatus->show(); masterPitchMoved( m_s->m_masterPitchModel.value() ); } void SongEditor::masterPitchMoved( int _new_val ) { m_mpsStatus->setText( tr( "Value: %1 semitones").arg( _new_val ) ); } void SongEditor::masterPitchReleased( void ) { m_mpsStatus->hide(); } void SongEditor::updateScrollBar( int _len ) { m_leftRightScroll->setMaximum( _len ); } static inline void animateScroll( QScrollBar *scrollBar, int newVal, bool smoothScroll ) { if( smoothScroll == false ) { scrollBar->setValue( newVal ); } else { // do smooth scroll animation using QTimeLine QTimeLine *t = scrollBar->findChild(); if( t == NULL ) { t = new QTimeLine( 600, scrollBar ); t->setFrameRange( scrollBar->value(), newVal ); t->connect( t, SIGNAL( finished() ), SLOT( deleteLater() ) ); scrollBar->connect( t, SIGNAL( frameChanged( int ) ), SLOT( setValue( int ) ) ); t->start(); } else { // smooth scrolling is still active, therefore just update the end frame t->setEndFrame( newVal ); } } } void SongEditor::updatePosition( const MidiTime & _t ) { int widgetWidth, trackOpWidth; if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT; trackOpWidth = TRACK_OP_WIDTH_COMPACT; } else { widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH; trackOpWidth = TRACK_OP_WIDTH; } if( ( m_s->isPlaying() && m_s->m_playMode == song::Mode_PlaySong && m_timeLine->autoScroll() == timeLine::AutoScrollEnabled) || m_scrollBack == true ) { const int w = width() - widgetWidth - trackOpWidth - 32; // rough estimation for width of right scrollbar if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / pixelsPerTact() ) { animateScroll( m_leftRightScroll, _t.getTact(), m_smoothScroll ); } else if( _t < m_currentPosition ) { MidiTime t = qMax( (int)( _t - w * MidiTime::ticksPerTact() / pixelsPerTact() ), 0 ); animateScroll( m_leftRightScroll, t.getTact(), m_smoothScroll ); } m_scrollBack = false; } const int x = m_s->m_playPos[song::Mode_PlaySong].m_timeLine-> markerX( _t ) + 8; if( x >= trackOpWidth + widgetWidth -1 ) { m_positionLine->show(); m_positionLine->move( x, 50 ); } else { m_positionLine->hide(); } m_positionLine->setFixedHeight( height() ); } void SongEditor::zoomingChanged() { const QString & zfac = m_zoomingComboBox->model()->currentText(); setPixelsPerTact( zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PIXELS_PER_TACT / 100 ); m_s->m_playPos[song::Mode_PlaySong].m_timeLine-> setPixelsPerTact( pixelsPerTact() ); realignTracks(); } void SongEditor::adjustUiAfterProjectLoad() { //if( isMaximized() ) { // make sure to bring us to front as the song editor is the central // widget in a song and when just opening a song in order to listen to // it, it's very annyoing to manually bring up the song editor each time engine::mainWindow()->workspace()->setActiveSubWindow( qobject_cast( parentWidget() ) ); } scrolled( 0 ); } bool SongEditor::allowRubberband() const { return( m_editModeButton->isChecked() ); } #include "moc_SongEditor.cxx" /* vim: set tw=0 noexpandtab: */ lmms-1.1.3/src/gui/ToolPluginView.cpp000066400000000000000000000027441247673406200175140ustar00rootroot00000000000000/* * ToolPluginView.cpp - implementation of ToolPluginView * * Copyright (c) 2006-2008 Javier Serrano Polo * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "ToolPlugin.h" #include "ToolPluginView.h" #include #include #include "embed.h" #include "engine.h" #include "MainWindow.h" ToolPluginView::ToolPluginView( ToolPlugin * _toolPlugin ) : PluginView( _toolPlugin, NULL ) { engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); setWindowTitle( _toolPlugin->displayName() ); setWindowIcon( _toolPlugin->descriptor()->logo->pixmap() ); } lmms-1.1.3/src/gui/TrackContainerView.cpp000066400000000000000000000230171247673406200203230ustar00rootroot00000000000000/* * TrackContainerView.cpp - view-component for TrackContainer * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "TrackContainerView.h" #include "TrackContainer.h" #include "bb_track.h" #include "MainWindow.h" #include "debug.h" #include "FileBrowser.h" #include "ImportFilter.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "DataFile.h" #include "rubberband.h" #include "song.h" #include "string_pair_drag.h" #include "track.h" TrackContainerView::TrackContainerView( TrackContainer * _tc ) : QWidget(), ModelView( NULL, this ), JournallingObject(), SerializingObjectHook(), m_currentPosition( 0, 0 ), m_tc( _tc ), m_trackViews(), m_scrollArea( new scrollArea( this ) ), m_ppt( DEFAULT_PIXELS_PER_TACT ), m_rubberBand( new rubberBand( m_scrollArea ) ), m_origin() { m_tc->setHook( this ); QVBoxLayout * layout = new QVBoxLayout( this ); layout->setMargin( 0 ); layout->setSpacing( 0 ); layout->addWidget( m_scrollArea ); QWidget * scrollContent = new QWidget; m_scrollLayout = new QVBoxLayout( scrollContent ); m_scrollLayout->setMargin( 0 ); m_scrollLayout->setSpacing( 0 ); m_scrollLayout->setSizeConstraint( QLayout::SetMinAndMaxSize ); m_scrollArea->setWidget( scrollContent ); m_scrollArea->show(); m_rubberBand->hide(); setAcceptDrops( true ); connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( realignTracks() ) ); connect( m_tc, SIGNAL( trackAdded( track * ) ), this, SLOT( createTrackView( track * ) ), Qt::QueuedConnection ); } TrackContainerView::~TrackContainerView() { while( !m_trackViews.empty() ) { delete m_trackViews.takeLast(); } } void TrackContainerView::saveSettings( QDomDocument & _doc, QDomElement & _this ) { MainWindow::saveWidgetState( this, _this ); } void TrackContainerView::loadSettings( const QDomElement & _this ) { MainWindow::restoreWidgetState( this, _this ); } trackView * TrackContainerView::addTrackView( trackView * _tv ) { m_trackViews.push_back( _tv ); m_scrollLayout->addWidget( _tv ); connect( this, SIGNAL( positionChanged( const MidiTime & ) ), _tv->getTrackContentWidget(), SLOT( changePosition( const MidiTime & ) ) ); realignTracks(); return( _tv ); } void TrackContainerView::removeTrackView( trackView * _tv ) { int index = m_trackViews.indexOf( _tv ); if( index != -1 ) { m_trackViews.removeAt( index ); disconnect( _tv ); m_scrollLayout->removeWidget( _tv ); realignTracks(); if( engine::getSong() ) { engine::getSong()->setModified(); } } } void TrackContainerView::moveTrackViewUp( trackView * _tv ) { for( int i = 1; i < m_trackViews.size(); ++i ) { trackView * t = m_trackViews[i]; if( t == _tv ) { bbTrack::swapBBTracks( t->getTrack(), m_trackViews[i - 1]->getTrack() ); m_scrollLayout->removeWidget( t ); m_scrollLayout->insertWidget( i - 1, t ); qSwap( m_tc->m_tracks[i-1], m_tc->m_tracks[i] ); m_trackViews.swap( i - 1, i ); realignTracks(); break; } } } void TrackContainerView::moveTrackViewDown( trackView * _tv ) { for( int i = 0; i < m_trackViews.size()-1; ++i ) { trackView * t = m_trackViews[i]; if( t == _tv ) { bbTrack::swapBBTracks( t->getTrack(), m_trackViews[i + 1]->getTrack() ); m_scrollLayout->removeWidget( t ); m_scrollLayout->insertWidget( i + 1, t ); qSwap( m_tc->m_tracks[i], m_tc->m_tracks[i+1] ); m_trackViews.swap( i, i + 1 ); realignTracks(); break; } } } void TrackContainerView::realignTracks() { QWidget * content = m_scrollArea->widget(); content->setFixedWidth( width() - m_scrollArea->verticalScrollBar()->width() ); content->setFixedHeight( content->minimumSizeHint().height() ); for( trackViewList::iterator it = m_trackViews.begin(); it != m_trackViews.end(); ++it ) { ( *it )->show(); ( *it )->update(); } } void TrackContainerView::createTrackView( track * _t ) { //m_tc->addJournalCheckPoint(); _t->createView( this ); } void TrackContainerView::deleteTrackView( trackView * _tv ) { //m_tc->addJournalCheckPoint(); track * t = _tv->getTrack(); removeTrackView( _tv ); delete _tv; engine::mixer()->lock(); delete t; engine::mixer()->unlock(); } const trackView * TrackContainerView::trackViewAt( const int _y ) const { const int abs_y = _y + m_scrollArea->verticalScrollBar()->value(); int y_cnt = 0; // debug code // qDebug( "abs_y %d", abs_y ); for( trackViewList::const_iterator it = m_trackViews.begin(); it != m_trackViews.end(); ++it ) { const int y_cnt1 = y_cnt; y_cnt += ( *it )->height(); if( abs_y >= y_cnt1 && abs_y < y_cnt ) { return( *it ); } } return( NULL ); } bool TrackContainerView::allowRubberband() const { return( false ); } void TrackContainerView::setPixelsPerTact( int _ppt ) { m_ppt = _ppt; // tell all TrackContentWidgets to update their background tile pixmap for( trackViewList::Iterator it = m_trackViews.begin(); it != m_trackViews.end(); ++it ) { ( *it )->getTrackContentWidget()->updateBackground(); } } void TrackContainerView::clearAllTracks() { while( !m_trackViews.empty() ) { trackView * tv = m_trackViews.takeLast(); track * t = tv->getTrack(); delete tv; delete t; } } void TrackContainerView::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, QString( "presetfile,pluginpresetfile,samplefile,instrument," "importedproject,soundfontfile,vstpluginfile," "track_%1,track_%2" ). arg( track::InstrumentTrack ). arg( track::SampleTrack ) ); } void TrackContainerView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); engine::mixer()->lock(); if( type == "instrument" ) { InstrumentTrack * it = dynamic_cast( track::create( track::InstrumentTrack, m_tc ) ); it->loadInstrument( value ); //it->toggledInstrumentTrackButton( true ); _de->accept(); } else if( type == "samplefile" || type == "pluginpresetfile" || type == "soundfontfile" || type == "vstpluginfile") { InstrumentTrack * it = dynamic_cast( track::create( track::InstrumentTrack, m_tc ) ); Instrument * i = it->loadInstrument( engine::pluginFileHandling()[FileItem::extension( value )]); i->loadFile( value ); //it->toggledInstrumentTrackButton( true ); _de->accept(); } else if( type == "presetfile" ) { DataFile dataFile( value ); InstrumentTrack * it = dynamic_cast( track::create( track::InstrumentTrack, m_tc ) ); it->setSimpleSerializing(); it->loadSettings( dataFile.content().toElement() ); //it->toggledInstrumentTrackButton( true ); _de->accept(); } else if( type == "importedproject" ) { ImportFilter::import( value, m_tc ); _de->accept(); } else if( type.left( 6 ) == "track_" ) { DataFile dataFile( value.toUtf8() ); track::create( dataFile.content().firstChild().toElement(), m_tc ); _de->accept(); } engine::mixer()->unlock(); } void TrackContainerView::mousePressEvent( QMouseEvent * _me ) { if( allowRubberband() == true ) { m_origin = m_scrollArea->mapFromParent( _me->pos() ); m_rubberBand->setGeometry( QRect( m_origin, QSize() ) ); m_rubberBand->show(); } QWidget::mousePressEvent( _me ); } void TrackContainerView::mouseMoveEvent( QMouseEvent * _me ) { if( rubberBandActive() == true ) { m_rubberBand->setGeometry( QRect( m_origin, m_scrollArea->mapFromParent( _me->pos() ) ). normalized() ); } QWidget::mouseMoveEvent( _me ); } void TrackContainerView::mouseReleaseEvent( QMouseEvent * _me ) { m_rubberBand->hide(); QWidget::mouseReleaseEvent( _me ); } void TrackContainerView::resizeEvent( QResizeEvent * _re ) { realignTracks(); QWidget::resizeEvent( _re ); } TrackContainerView::scrollArea::scrollArea( TrackContainerView * _parent ) : QScrollArea( _parent ), m_trackContainerView( _parent ) { setFrameStyle( QFrame::NoFrame ); setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); } TrackContainerView::scrollArea::~scrollArea() { } void TrackContainerView::scrollArea::wheelEvent( QWheelEvent * _we ) { // always pass wheel-event to parent-widget (song-editor // bb-editor etc.) because they might want to use it for zooming // or scrolling left/right if a modifier-key is pressed, otherwise // they do not accept it and we pass it up to QScrollArea m_trackContainerView->wheelEvent( _we ); if( !_we->isAccepted() ) { QScrollArea::wheelEvent( _we ); } } #include "moc_TrackContainerView.cxx" lmms-1.1.3/src/gui/about_dialog.cpp000066400000000000000000000031051247673406200172060ustar00rootroot00000000000000/* * about_dialog.cpp - implementation of about-dialog * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lmmsversion.h" #include "about_dialog.h" #include "embed.h" #include "engine.h" #include "MainWindow.h" #include "versioninfo.h" aboutDialog::aboutDialog() : QDialog( engine::mainWindow() ), Ui::AboutDialog() { setupUi( this ); iconLabel->setPixmap( embed::getIconPixmap( "icon", 64, 64 ) ); versionLabel->setText( versionLabel->text(). arg( LMMS_VERSION ). arg( PLATFORM ). arg( MACHINE ). arg( QT_VERSION_STR ). arg( GCC_VERSION ) ); authorLabel->setPlainText( embed::getText( "AUTHORS" ) ); licenseLabel->setPlainText( embed::getText( "COPYING" ) ); involvedLabel->setPlainText( embed::getText( "CONTRIBUTORS" ) ); } lmms-1.1.3/src/gui/bb_editor.cpp000066400000000000000000000160771247673406200165220ustar00rootroot00000000000000/* * bb_editor.cpp - basic main-window for editing of beats and basslines * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "bb_editor.h" #include "bb_track_container.h" #include "embed.h" #include "MainWindow.h" #include "song.h" #include "tool_button.h" #include "config_mgr.h" #include "DataFile.h" #include "string_pair_drag.h" #include "TrackContainer.h" #include "Pattern.h" bbEditor::bbEditor( bbTrackContainer* tc ) : TrackContainerView( tc ), m_bbtc( tc ) { // create toolbar m_toolBar = new QWidget; m_toolBar->setFixedHeight( 32 ); m_toolBar->move( 0, 0 ); m_toolBar->setAutoFillBackground( true ); QPalette pal; pal.setBrush( m_toolBar->backgroundRole(), embed::getIconPixmap( "toolbar_bg" ) ); m_toolBar->setPalette( pal ); static_cast( layout() )->insertWidget( 0, m_toolBar ); QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); tb_layout->setSpacing( 0 ); tb_layout->setMargin( 0 ); setWindowIcon( embed::getIconPixmap( "bb_track_btn" ) ); setWindowTitle( tr( "Beat+Bassline Editor" ) ); // TODO: Use style sheet if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { setMinimumWidth( TRACK_OP_WIDTH_COMPACT + DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT + 2 * TCO_BORDER_WIDTH + 264 ); } else { setMinimumWidth( TRACK_OP_WIDTH + DEFAULT_SETTINGS_WIDGET_WIDTH + 2 * TCO_BORDER_WIDTH + 264 ); } m_playButton = new toolButton( embed::getIconPixmap( "play" ), tr( "Play/pause current beat/bassline (Space)" ), this, SLOT( play() ), m_toolBar ); m_stopButton = new toolButton( embed::getIconPixmap( "stop" ), tr( "Stop playback of current beat/bassline (Space)" ), this, SLOT( stop() ), m_toolBar ); m_playButton->setObjectName( "playButton" ); m_stopButton->setObjectName( "stopButton" ); toolButton * add_bb_track = new toolButton( embed::getIconPixmap( "add_bb_track" ), tr( "Add beat/bassline" ), engine::getSong(), SLOT( addBBTrack() ), m_toolBar ); toolButton * add_automation_track = new toolButton( embed::getIconPixmap( "add_automation" ), tr( "Add automation-track" ), this, SLOT( addAutomationTrack() ), m_toolBar ); toolButton * remove_bar = new toolButton( embed::getIconPixmap( "step_btn_remove" ), tr( "Remove steps" ), this, SLOT( removeSteps() ), m_toolBar ); toolButton * add_bar = new toolButton( embed::getIconPixmap( "step_btn_add" ), tr( "Add steps" ), this, SLOT( addSteps() ), m_toolBar ); m_playButton->setWhatsThis( tr( "Click here to play the current " "beat/bassline. The beat/bassline is automatically " "looped when its end is reached." ) ); m_stopButton->setWhatsThis( tr( "Click here to stop playing of current " "beat/bassline." ) ); m_bbComboBox = new comboBox( m_toolBar ); m_bbComboBox->setFixedSize( 200, 22 ); m_bbComboBox->setModel( &tc->m_bbComboBoxModel ); tb_layout->addSpacing( 5 ); tb_layout->addWidget( m_playButton ); tb_layout->addWidget( m_stopButton ); tb_layout->addSpacing( 20 ); tb_layout->addWidget( m_bbComboBox ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( add_bb_track ); tb_layout->addWidget( add_automation_track ); tb_layout->addStretch(); tb_layout->addWidget( remove_bar ); tb_layout->addWidget( add_bar ); tb_layout->addSpacing( 15 ); engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->layout()->setSizeConstraint( QLayout::SetMinimumSize ); parentWidget()->resize( minimumWidth(), 300 ); parentWidget()->move( 610, 5 ); parentWidget()->show(); setModel( tc ); connect( &tc->m_bbComboBoxModel, SIGNAL( dataChanged() ), this, SLOT( updatePosition() ) ); } bbEditor::~bbEditor() { } void bbEditor::dropEvent( QDropEvent * de ) { QString type = stringPairDrag::decodeKey( de ); QString value = stringPairDrag::decodeValue( de ); if( type.left( 6 ) == "track_" ) { DataFile dataFile( value.toUtf8() ); track * t = track::create( dataFile.content().firstChild().toElement(), model() ); t->deleteTCOs(); m_bbtc->updateAfterTrackAdd(); de->accept(); } else { TrackContainerView::dropEvent( de ); } } void bbEditor::removeBBView( int _bb ) { foreach( trackView* view, trackViews() ) { view->getTrackContentWidget()->removeTCOView( _bb ); } } void bbEditor::setPauseIcon( bool pause ) { if( pause == true ) { m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); } else { m_playButton->setIcon( embed::getIconPixmap( "play" ) ); } } void bbEditor::play() { if( engine::getSong()->playMode() != song::Mode_PlayBB ) { engine::getSong()->playBB(); } else { engine::getSong()->togglePause(); } } void bbEditor::stop() { engine::getSong()->stop(); } void bbEditor::updatePosition() { //realignTracks(); emit positionChanged( m_currentPosition ); } void bbEditor::addAutomationTrack() { (void) track::create( track::AutomationTrack, model() ); } void bbEditor::addSteps() { TrackContainer::TrackList tl = model()->tracks(); for( TrackContainer::TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { if( ( *it )->type() == track::InstrumentTrack ) { Pattern* p = static_cast( ( *it )->getTCO( m_bbtc->currentBB() ) ); p->addSteps(); } } } void bbEditor::removeSteps() { TrackContainer::TrackList tl = model()->tracks(); for( TrackContainer::TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { if( ( *it )->type() == track::InstrumentTrack ) { Pattern* p = static_cast( ( *it )->getTCO( m_bbtc->currentBB() ) ); p->removeSteps(); } } } void bbEditor::keyPressEvent( QKeyEvent * _ke ) { if ( _ke->key() == Qt::Key_Space ) { if( engine::getSong()->isPlaying() ) { stop(); } else { play(); } } else if ( _ke->key() == Qt::Key_Plus ) { if( m_bbtc->currentBB()+ 1 < m_bbtc->numOfBBs() ) { m_bbtc->setCurrentBB( m_bbtc->currentBB() + 1 ); } } else if ( _ke->key() == Qt::Key_Minus ) { if( m_bbtc->currentBB() > 0 ) { m_bbtc->setCurrentBB( m_bbtc->currentBB() - 1 ); } } else { // ignore event and pass to parent-widget _ke->ignore(); } } #include "moc_bb_editor.cxx" lmms-1.1.3/src/gui/dialogs/000077500000000000000000000000001247673406200154745ustar00rootroot00000000000000lmms-1.1.3/src/gui/dialogs/FileDialog.cpp000066400000000000000000000046241247673406200202050ustar00rootroot00000000000000/* * FileDialog.cpp - implementation of class FileDialog * * Copyright (c) 2014 Lukas W * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "config_mgr.h" #include "FileDialog.h" FileDialog::FileDialog( QWidget *parent, const QString &caption, const QString &directory, const QString &filter ) : QFileDialog( parent, caption, directory, filter ) { #if QT_VERSION >= 0x040806 setOption( QFileDialog::DontUseCustomDirectoryIcons ); #endif // Add additional locations to the sidebar QList urls = sidebarUrls(); urls << QUrl::fromLocalFile( QDesktopServices::storageLocation( QDesktopServices::DesktopLocation ) ); // Find downloads directory QDir downloadDir( QDir::homePath() + "/Downloads" ); if ( ! downloadDir.exists() ) downloadDir = QDesktopServices::storageLocation( QDesktopServices::DocumentsLocation ) + "/Downloads"; if ( downloadDir.exists() ) urls << QUrl::fromLocalFile( downloadDir.absolutePath() ); urls << QUrl::fromLocalFile( QDesktopServices::storageLocation( QDesktopServices::MusicLocation ) ); urls << QUrl::fromLocalFile( configManager::inst()->workingDir() ); // Add `/Volumes` directory on OS X systems, this allows the user to browse // external disk drives. #ifdef LMMS_BUILD_APPLE QDir volumesDir( QDir("/Volumes") ); if ( volumesDir.exists() ) urls << QUrl::fromLocalFile( volumesDir.absolutePath() ); #endif setSidebarUrls(urls); } void FileDialog::clearSelection() { QListView *view = findChild(); Q_ASSERT( view ); view->clearSelection(); } #include "moc_FileDialog.cxx" lmms-1.1.3/src/gui/dialogs/VersionedSaveDialog.cpp000066400000000000000000000076231247673406200221050ustar00rootroot00000000000000/* * VersionedSaveDialog.cpp - implementation of class VersionedSaveDialog * * Copyright (c) 2014 Lukas W * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "VersionedSaveDialog.h" VersionedSaveDialog::VersionedSaveDialog( QWidget *parent, const QString &caption, const QString &directory, const QString &filter ) : FileDialog(parent, caption, directory, filter) { setAcceptMode( QFileDialog::AcceptSave ); setFileMode( QFileDialog::AnyFile ); // Create + and - buttons QPushButton *plusButton( new QPushButton( "+", this) ); plusButton->setToolTip( tr( "Increment version number" ) ); QPushButton *minusButton( new QPushButton( "-", this ) ); minusButton->setToolTip( tr( "Decrement version number" ) ); plusButton->setFixedWidth( plusButton->fontMetrics().width( "+" ) + 30 ); minusButton->setFixedWidth( minusButton->fontMetrics().width( "+" ) + 30 ); // Add buttons to grid layout. For doing this, remove the lineEdit and // replace it with a HBox containing lineEdit and the buttons. QGridLayout *layout = dynamic_cast( this->layout() ); QWidget *lineEdit = findChild(); layout->removeWidget( lineEdit ); QHBoxLayout* hLayout( new QHBoxLayout() ); hLayout->addWidget( lineEdit ); hLayout->addWidget( plusButton ); hLayout->addWidget( minusButton ); layout->addLayout( hLayout, 2, 1 ); // Connect + and - buttons connect( plusButton, SIGNAL( clicked() ), this, SLOT( incrementVersion() )); connect( minusButton, SIGNAL( clicked() ), this, SLOT( decrementVersion() )); } bool VersionedSaveDialog::changeFileNameVersion(QString &fileName, bool increment ) { static QRegExp regexp( "-\\d+(\\.\\w+)?$" ); int idx = regexp.indexIn( fileName ); // For file names without extension (no ".mmpz") int insertIndex = fileName.lastIndexOf( '.' ); if ( insertIndex < idx+1 ) insertIndex = fileName.size(); if ( idx == -1 ) { // Can't decrement if there is no version number if ( increment == false ) return false; else fileName.insert( insertIndex, "-01" ); } else { // Find current version number QString number = fileName.mid( idx+1, insertIndex - idx - 1 ); bool ok; ushort version = number.toUShort( &ok ); Q_ASSERT( ok ); // Can't decrement 0 if ( !increment and version == 0 ) return false; // Replace version number version = increment ? version + 1 : version - 1; QString newnumber = QString( "%1" ).arg( version, 2, 10, QChar( '0' ) ); fileName.replace( idx+1, number.length(), newnumber ); } return true; } void VersionedSaveDialog::incrementVersion() { const QStringList& selected = selectedFiles(); if ( selected.size() != 1 ) return; QString file = selected[0]; changeFileNameVersion( file, true ); clearSelection(); selectFile( file ); } void VersionedSaveDialog::decrementVersion() { const QStringList& selected = selectedFiles(); if ( selected.size() != 1 ) return; QString file = selected[0]; changeFileNameVersion( file, false ); clearSelection(); selectFile( file ); } #include "moc_VersionedSaveDialog.cxx" lmms-1.1.3/src/gui/dialogs/about_dialog.ui000066400000000000000000000202561247673406200204710ustar00rootroot00000000000000 AboutDialog 0 0 558 357 About LMMS 8 8 8 8 8 64 64 font:12pt; font-weight:bold; LMMS Version %1 (%2/%3, Qt %4, %5) Qt::Horizontal 40 20 0 About Qt::Vertical QSizePolicy::Fixed 20 10 LMMS - easy music production for everyone true Qt::Vertical QSizePolicy::Fixed 20 10 Copyright (c) 2004-2014, LMMS developers true Qt::Vertical QSizePolicy::Fixed 20 10 <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> true Qt::Vertical 20 40 Authors true Involved Contributors ordered by number of commits: true Translation true Current language not translated (or native English). If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer! License true Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() AboutDialog accept() 248 254 157 274 buttonBox rejected() AboutDialog reject() 316 260 286 274 lmms-1.1.3/src/gui/dialogs/export_project.ui000066400000000000000000000230401247673406200211010ustar00rootroot00000000000000 ExportProjectDialog 0 0 519 412 Export project Output -1 9 File format: Samplerate: 44100 Hz 48000 Hz 88200 Hz 96000 Hz 192000 Hz -1 0 Bitrate: 2 64 KBit/s 128 KBit/s 160 KBit/s 192 KBit/s 256 KBit/s 320 KBit/s 0 Depth: 16 Bit Integer 32 Bit Float Qt::Vertical QSizePolicy::Fixed 1 10 Please note that not all of the parameters above apply for all file formats. true Qt::Vertical 163 20 Quality settings Interpolation: 1 Zero Order Hold Sinc Fastest Sinc Medium (recommended) Sinc Best (very slow!) Oversampling (use with care!): 1x (None) 2x 4x 8x Export as loop (remove end silence) Qt::Vertical 20 40 Qt::Horizontal 40 20 Start Cancel false 0 cancelButton clicked() ExportProjectDialog reject() 357 293 202 175 lmms-1.1.3/src/gui/embed.cpp000066400000000000000000000044031247673406200156330ustar00rootroot00000000000000/* * embed.cpp - misc stuff for using embedded resources (linked into binary) * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "embed.h" #include "config_mgr.h" #ifndef PLUGIN_NAME namespace embed #else namespace PLUGIN_NAME #endif { #include "embedded_resources.h" QPixmap getIconPixmap( const char * _name, int _w, int _h ) { if( _w == -1 || _h == -1 ) { QString name = QString( _name ) + ".png"; #ifdef PLUGIN_NAME QPixmap p( configManager::inst()->artworkDir() + "plugins/" + STRINGIFY( PLUGIN_NAME ) + "_" + name ); if( p.isNull() ) { p = QPixmap( configManager::inst()->artworkDir() + name ); } #else // look whether icon is in artwork-dir QPixmap p( configManager::inst()->artworkDir() + name ); #endif if( p.isNull() ) { // nothing found, so look in default-artwork-dir p = QPixmap( configManager::inst()->defaultArtworkDir() + name ); } if( p.isNull() ) { const embed::descriptor & e = findEmbeddedData( name.toUtf8().constData() ); // found? if( QString( e.name ) == name ) { p.loadFromData( e.data, e.size ); } else { p = QPixmap( 1, 1 ); } } return p; } return getIconPixmap( _name ). scaled( _w, _h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } QString getText( const char * _name ) { const embed::descriptor & e = findEmbeddedData( _name ); return QString::fromUtf8( (const char *) e.data, e.size ); } } lmms-1.1.3/src/gui/export_project_dialog.cpp000066400000000000000000000176101247673406200211510ustar00rootroot00000000000000/* * export_project_dialog.cpp - implementation of dialog for exporting project * * Copyright (c) 2004-2013 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "export_project_dialog.h" #include "song.h" #include "engine.h" #include "MainWindow.h" #include "bb_track_container.h" #include "bb_track.h" exportProjectDialog::exportProjectDialog( const QString & _file_name, QWidget * _parent, bool multi_export=false ) : QDialog( _parent ), Ui::ExportProjectDialog(), m_fileName( _file_name ), m_fileExtension(), m_multiExport( multi_export ), m_activeRenderer( NULL ) { setupUi( this ); setWindowTitle( tr( "Export project to %1" ).arg( QFileInfo( _file_name ).fileName() ) ); // get the extension of the chosen file QStringList parts = _file_name.split( '.' ); QString fileExt; if( parts.size() > 0 ) { fileExt = "." + parts[parts.size()-1]; } int cbIndex = 0; for( int i = 0; i < ProjectRenderer::NumFileFormats; ++i ) { if( __fileEncodeDevices[i].m_getDevInst != NULL ) { // get the extension of this format QString renderExt = __fileEncodeDevices[i].m_extension; // add to combo box fileFormatCB->addItem( ProjectRenderer::tr( __fileEncodeDevices[i].m_description ) ); // if this is our extension, select it if( QString::compare( renderExt, fileExt, Qt::CaseInsensitive ) == 0 ) { fileFormatCB->setCurrentIndex( cbIndex ); } cbIndex++; } } connect( startButton, SIGNAL( clicked() ), this, SLOT( startBtnClicked() ) ); } exportProjectDialog::~exportProjectDialog() { for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) { delete (*it); } } void exportProjectDialog::reject() { for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) { (*it)->abortProcessing(); } if( m_activeRenderer ) { m_activeRenderer->abortProcessing(); } QDialog::reject(); } void exportProjectDialog::accept() { // If more to render, kick off next render job if( m_renderers.isEmpty() == false ) { popRender(); } else { // If done, then reset mute states while( m_unmuted.isEmpty() == false ) { track* restoreTrack = m_unmuted.back(); m_unmuted.pop_back(); restoreTrack->setMuted( false ); } QDialog::accept(); } } void exportProjectDialog::closeEvent( QCloseEvent * _ce ) { for( RenderVector::ConstIterator it = m_renderers.begin(); it != m_renderers.end(); ++it ) { if( (*it)->isRunning() ) { (*it)->abortProcessing(); } } if( m_activeRenderer && m_activeRenderer->isRunning() ) { m_activeRenderer->abortProcessing(); } QDialog::closeEvent( _ce ); } void exportProjectDialog::popRender() { if( m_multiExport && m_tracksToRender.isEmpty() == false ) { track* renderTrack = m_tracksToRender.back(); m_tracksToRender.pop_back(); // Set must states for song tracks for( TrackVector::ConstIterator it = m_unmuted.begin(); it != m_unmuted.end(); ++it ) { if( (*it) == renderTrack ) { (*it)->setMuted( false ); } else { (*it)->setMuted( true ); } } } // Pop next render job and start m_activeRenderer = m_renderers.back(); m_renderers.pop_back(); render( m_activeRenderer ); } void exportProjectDialog::multiRender() { m_dirName = m_fileName; QString path = QDir(m_fileName).filePath("text.txt"); int x = 1; const TrackContainer::TrackList & tl = engine::getSong()->tracks(); // Check for all unmuted tracks. Remember list. for( TrackContainer::TrackList::ConstIterator it = tl.begin(); it != tl.end(); ++it ) { track* tk = (*it); track::TrackTypes type = tk->type(); // Don't mute automation tracks if ( tk->isMuted() == false && ( type == track::InstrumentTrack || type == track::SampleTrack ) ) { m_unmuted.push_back(tk); QString nextName = tk->name(); nextName = nextName.remove(QRegExp("[^a-zA-Z]")); QString name = QString( "%1_%2%3" ).arg( x++ ).arg( nextName ).arg( m_fileExtension ); m_fileName = QDir(m_dirName).filePath(name); prepRender(); } else if (! tk->isMuted() && type == track::BBTrack ) { m_unmutedBB.push_back(tk); } } const TrackContainer::TrackList t2 = engine::getBBTrackContainer()->tracks(); for( TrackContainer::TrackList::ConstIterator it = t2.begin(); it != t2.end(); ++it ) { track* tk = (*it); if ( tk->isMuted() == false ) { m_unmuted.push_back(tk); QString nextName = tk->name(); nextName = nextName.remove(QRegExp("[^a-zA-Z]")); QString name = QString( "%1_%2%3" ).arg( x++ ).arg( nextName ).arg( m_fileExtension ); m_fileName = QDir(m_dirName).filePath(name); prepRender(); } } m_tracksToRender = m_unmuted; popRender(); } ProjectRenderer* exportProjectDialog::prepRender() { Mixer::qualitySettings qs = Mixer::qualitySettings( static_cast(interpolationCB->currentIndex()), static_cast(oversamplingCB->currentIndex()) ); const int samplerates[5] = { 44100, 48000, 88200, 96000, 192000 }; const int bitrates[6] = { 64, 128, 160, 192, 256, 320 }; ProjectRenderer::OutputSettings os = ProjectRenderer::OutputSettings( samplerates[ samplerateCB->currentIndex() ], false, bitrates[ bitrateCB->currentIndex() ], static_cast( depthCB->currentIndex() ) ); engine::getSong()->setExportLoop( exportLoopCB->isChecked() ); ProjectRenderer* renderer = new ProjectRenderer( qs, os, m_ft, m_fileName ); m_renderers.push_back(renderer); return renderer; } void exportProjectDialog::render( ProjectRenderer* renderer ) { if( renderer->isReady() ) { connect( renderer, SIGNAL( progressChanged( int ) ), progressBar, SLOT( setValue( int ) ) ); connect( renderer, SIGNAL( progressChanged( int ) ), this, SLOT( updateTitleBar( int ) )) ; connect( renderer, SIGNAL( finished() ), this, SLOT( accept() ) ); connect( renderer, SIGNAL( finished() ), engine::mainWindow(), SLOT( resetWindowTitle() ) ); renderer->startProcessing(); } else { accept(); } } void exportProjectDialog::startBtnClicked() { m_ft = ProjectRenderer::NumFileFormats; for( int i = 0; i < ProjectRenderer::NumFileFormats; ++i ) { if( fileFormatCB->currentText() == ProjectRenderer::tr( __fileEncodeDevices[i].m_description ) ) { m_ft = __fileEncodeDevices[i].m_fileFormat; m_fileExtension = QString( QLatin1String( __fileEncodeDevices[i].m_extension ) ); break; } } if( m_ft == ProjectRenderer::NumFileFormats ) { QMessageBox::information( this, tr( "Error" ), tr( "Error while determining file-encoder device. " "Please try to choose a different output " "format." ) ); reject(); return; } startButton->setEnabled( false ); progressBar->setEnabled( true ); updateTitleBar( 0 ); if (m_multiExport==true) { multiRender(); } else { prepRender(); popRender(); } } void exportProjectDialog::updateTitleBar( int _prog ) { engine::mainWindow()->setWindowTitle( tr( "Rendering: %1%" ).arg( _prog ) ); } #include "moc_export_project_dialog.cxx" /* vim: set tw=0 noexpandtab: */ lmms-1.1.3/src/gui/plugin_browser.cpp000066400000000000000000000125121247673406200176200ustar00rootroot00000000000000/* * plugin_browser.cpp - implementation of the plugin-browser * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include // for std::sort #include "plugin_browser.h" #include "embed.h" #include "debug.h" #include "templates.h" #include "gui_templates.h" #include "string_pair_drag.h" bool pluginBefore( const Plugin::Descriptor& d1, const Plugin::Descriptor& d2 ) { return qstricmp( d1.displayName, d2.displayName ) < 0 ? true : false; } PluginBrowser::PluginBrowser( QWidget * _parent ) : SideBarWidget( tr( "Instrument plugins" ), embed::getIconPixmap( "plugins" ).transformed( QTransform().rotate( 90 ) ), _parent ) { setWindowTitle( tr( "Instrument browser" ) ); m_view = new QWidget( contentParent() ); //m_view->setFrameShape( QFrame::NoFrame ); addContentWidget( m_view ); QVBoxLayout * view_layout = new QVBoxLayout( m_view ); view_layout->setMargin( 5 ); view_layout->setSpacing( 5 ); QLabel * hint = new QLabel( tr( "Drag an instrument " "into either the Song-Editor, the " "Beat+Bassline Editor or into an " "existing instrument track." ), m_view ); hint->setFont( pointSize<8>( hint->font() ) ); hint->setWordWrap( true ); QScrollArea* scrollarea = new QScrollArea( m_view ); PluginDescList* descList = new PluginDescList( m_view ); scrollarea->setWidget(descList); scrollarea->setWidgetResizable(true); view_layout->addWidget(hint); view_layout->addWidget(scrollarea); } PluginBrowser::~PluginBrowser() { } PluginDescList::PluginDescList(QWidget *parent) : QWidget(parent) { QVBoxLayout* layout = new QVBoxLayout(this); Plugin::getDescriptorsOfAvailPlugins( m_pluginDescriptors ); std::sort(m_pluginDescriptors.begin(), m_pluginDescriptors.end(), pluginBefore); for(Plugin::DescriptorList::const_iterator it = m_pluginDescriptors.constBegin(); it != m_pluginDescriptors.constEnd(); it++) { if( it->type == Plugin::Instrument ) { PluginDescWidget* p = new PluginDescWidget( *it, this ); p->show(); layout->addWidget(p); } } setLayout(layout); layout->addStretch(); } PluginDescWidget::PluginDescWidget( const Plugin::Descriptor & _pd, QWidget * _parent ) : QWidget( _parent ), m_updateTimer( this ), m_pluginDescriptor( _pd ), m_logo( _pd.logo->pixmap() ), m_mouseOver( false ), m_targetHeight( 24 ) { connect( &m_updateTimer, SIGNAL( timeout() ), SLOT( updateHeight() ) ); setFixedHeight( m_targetHeight ); setMouseTracking( true ); setCursor( Qt::PointingHandCursor ); } PluginDescWidget::~PluginDescWidget() { } void PluginDescWidget::paintEvent( QPaintEvent * ) { const QColor fill_color = m_mouseOver ? QColor( 224, 224, 224 ) : QColor( 192, 192, 192 ); QPainter p( this ); p.fillRect( rect(), fill_color ); const int s = 16 + ( 32 * ( tLimit( height(), 24, 60 ) - 24 ) ) / ( 60 - 24 ); const QSize logo_size( s, s ); QPixmap logo = m_logo.scaled( logo_size, Qt::KeepAspectRatio, Qt::SmoothTransformation ); p.setPen( QColor( 64, 64, 64 ) ); p.drawRect( 0, 0, rect().right(), rect().bottom() ); p.drawPixmap( 4, 4, logo ); QFont f = pointSize<8>( p.font() ); f.setBold( true ); p.setFont( f ); p.drawText( 10 + logo_size.width(), 15, m_pluginDescriptor.displayName ); if( height() > 24 || m_mouseOver ) { f.setBold( false ); p.setFont( pointSize<8>( f ) ); QRect br; p.drawText( 10 + logo_size.width(), 20, width() - 58 - 5, 999, Qt::TextWordWrap, PluginBrowser::tr( m_pluginDescriptor.description ), &br ); if( m_mouseOver ) { m_targetHeight = qMax( 60, 25 + br.height() ); } } } void PluginDescWidget::enterEvent( QEvent * _e ) { m_mouseOver = true; m_targetHeight = height() + 1; updateHeight(); QWidget::enterEvent( _e ); } void PluginDescWidget::leaveEvent( QEvent * _e ) { m_mouseOver = false; m_targetHeight = 24; updateHeight(); QWidget::leaveEvent( _e ); } void PluginDescWidget::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton ) { new stringPairDrag( "instrument", m_pluginDescriptor.name, m_logo, this ); leaveEvent( _me ); } } void PluginDescWidget::updateHeight() { if( m_targetHeight > height() ) { setFixedHeight( height() + 1 ); } else if( m_targetHeight < height() ) { setFixedHeight( height() - 1 ); } else { m_updateTimer.stop(); return; } if( !m_updateTimer.isActive() ) { m_updateTimer.start( 15 ); } } #include "moc_plugin_browser.cxx" lmms-1.1.3/src/gui/setup_dialog.cpp000066400000000000000000001030751247673406200172430ustar00rootroot00000000000000/* * setup_dialog.cpp - dialog for setting up LMMS * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include "setup_dialog.h" #include "tab_bar.h" #include "tab_button.h" #include "tab_widget.h" #include "gui_templates.h" #include "Mixer.h" #include "ProjectJournal.h" #include "config_mgr.h" #include "embed.h" #include "engine.h" #include "debug.h" #include "tooltip.h" #include "led_checkbox.h" #include "LcdSpinBox.h" #include "FileDialog.h" // platform-specific audio-interface-classes #include "AudioAlsa.h" #include "AudioJack.h" #include "AudioOss.h" #include "AudioPortAudio.h" #include "AudioPulseAudio.h" #include "AudioSdl.h" #include "AudioDummy.h" // platform-specific midi-interface-classes #include "MidiAlsaRaw.h" #include "MidiAlsaSeq.h" #include "MidiOss.h" #include "MidiWinMM.h" #include "MidiDummy.h" inline void labelWidget( QWidget * _w, const QString & _txt ) { QLabel * title = new QLabel( _txt, _w ); QFont f = title->font(); f.setBold( true ); title->setFont( pointSize<12>( f ) ); #ifdef LMMS_DEBUG assert( dynamic_cast( _w->layout() ) != NULL ); #endif dynamic_cast( _w->layout() )->addSpacing( 5 ); dynamic_cast( _w->layout() )->addWidget( title ); dynamic_cast( _w->layout() )->addSpacing( 10 ); } setupDialog::setupDialog( ConfigTabs _tab_to_open ) : m_bufferSize( configManager::inst()->value( "mixer", "framesperaudiobuffer" ).toInt() ), m_toolTips( !configManager::inst()->value( "tooltips", "disabled" ).toInt() ), m_warnAfterSetup( !configManager::inst()->value( "app", "nomsgaftersetup" ).toInt() ), m_displaydBV( configManager::inst()->value( "app", "displaydbv" ).toInt() ), m_MMPZ( !configManager::inst()->value( "app", "nommpz" ).toInt() ), m_hqAudioDev( configManager::inst()->value( "mixer", "hqaudio" ).toInt() ), m_workingDir( configManager::inst()->workingDir() ), m_vstDir( configManager::inst()->vstDir() ), m_artworkDir( configManager::inst()->artworkDir() ), m_flDir( configManager::inst()->flDir() ), m_ladDir( configManager::inst()->ladspaDir() ), #ifdef LMMS_HAVE_FLUIDSYNTH m_defaultSoundfont( configManager::inst()->defaultSoundfont() ), #endif #ifdef LMMS_HAVE_STK m_stkDir( configManager::inst()->stkDir() ), #endif m_backgroundArtwork( configManager::inst()->backgroundArtwork() ), m_smoothScroll( configManager::inst()->value( "ui", "smoothscroll" ).toInt() ), m_enableAutoSave( configManager::inst()->value( "ui", "enableautosave" ).toInt() ), m_oneInstrumentTrackWindow( configManager::inst()->value( "ui", "oneinstrumenttrackwindow" ).toInt() ), m_compactTrackButtons( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ), m_syncVSTPlugins( configManager::inst()->value( "ui", "syncvstplugins" ).toInt() ), m_animateAFP(configManager::inst()->value( "ui", "animateafp").toInt() ), m_printNoteLabels(configManager::inst()->value( "ui", "printnotelabels").toInt() ), m_displayWaveform(configManager::inst()->value( "ui", "displaywaveform").toInt() ) { setWindowIcon( embed::getIconPixmap( "setup_general" ) ); setWindowTitle( tr( "Setup LMMS" ) ); setModal( true ); engine::projectJournal()->setJournalling( false ); QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setSpacing( 0 ); vlayout->setMargin( 0 ); QWidget * settings = new QWidget( this ); QHBoxLayout * hlayout = new QHBoxLayout( settings ); hlayout->setSpacing( 0 ); hlayout->setMargin( 0 ); m_tabBar = new tabBar( settings, QBoxLayout::TopToBottom ); m_tabBar->setExclusive( true ); m_tabBar->setFixedWidth( 72 ); QWidget * ws = new QWidget( settings ); int wsHeight = 370; #ifdef LMMS_HAVE_STK wsHeight += 50; #endif #ifdef LMMS_HAVE_FLUIDSYNTH wsHeight += 50; #endif ws->setFixedSize( 360, wsHeight ); QWidget * general = new QWidget( ws ); general->setFixedSize( 360, 240 ); QVBoxLayout * gen_layout = new QVBoxLayout( general ); gen_layout->setSpacing( 0 ); gen_layout->setMargin( 0 ); labelWidget( general, tr( "General settings" ) ); tabWidget * bufsize_tw = new tabWidget( tr( "BUFFER SIZE" ), general ); bufsize_tw->setFixedHeight( 80 ); m_bufSizeSlider = new QSlider( Qt::Horizontal, bufsize_tw ); m_bufSizeSlider->setRange( 1, 256 ); m_bufSizeSlider->setTickPosition( QSlider::TicksBelow ); m_bufSizeSlider->setPageStep( 8 ); m_bufSizeSlider->setTickInterval( 8 ); m_bufSizeSlider->setGeometry( 10, 16, 340, 18 ); m_bufSizeSlider->setValue( m_bufferSize / 64 ); connect( m_bufSizeSlider, SIGNAL( valueChanged( int ) ), this, SLOT( setBufferSize( int ) ) ); m_bufSizeLbl = new QLabel( bufsize_tw ); m_bufSizeLbl->setGeometry( 10, 40, 200, 24 ); setBufferSize( m_bufSizeSlider->value() ); QPushButton * bufsize_reset_btn = new QPushButton( embed::getIconPixmap( "reload" ), "", bufsize_tw ); bufsize_reset_btn->setGeometry( 290, 40, 28, 28 ); connect( bufsize_reset_btn, SIGNAL( clicked() ), this, SLOT( resetBufSize() ) ); toolTip::add( bufsize_reset_btn, tr( "Reset to default-value" ) ); QPushButton * bufsize_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", bufsize_tw ); bufsize_help_btn->setGeometry( 320, 40, 28, 28 ); connect( bufsize_help_btn, SIGNAL( clicked() ), this, SLOT( displayBufSizeHelp() ) ); tabWidget * misc_tw = new tabWidget( tr( "MISC" ), general ); const int XDelta = 10; const int YDelta = 18; const int HeaderSize = 30; int labelNumber = 0; ledCheckBox * enable_tooltips = new ledCheckBox( tr( "Enable tooltips" ), misc_tw ); labelNumber++; enable_tooltips->move( XDelta, YDelta*labelNumber ); enable_tooltips->setChecked( m_toolTips ); connect( enable_tooltips, SIGNAL( toggled( bool ) ), this, SLOT( toggleToolTips( bool ) ) ); ledCheckBox * restart_msg = new ledCheckBox( tr( "Show restart warning after changing settings" ), misc_tw ); labelNumber++; restart_msg->move( XDelta, YDelta*labelNumber ); restart_msg->setChecked( m_warnAfterSetup ); connect( restart_msg, SIGNAL( toggled( bool ) ), this, SLOT( toggleWarnAfterSetup( bool ) ) ); ledCheckBox * dbv = new ledCheckBox( tr( "Display volume as dBV " ), misc_tw ); labelNumber++; dbv->move( XDelta, YDelta*labelNumber ); dbv->setChecked( m_displaydBV ); connect( dbv, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisplaydBV( bool ) ) ); ledCheckBox * mmpz = new ledCheckBox( tr( "Compress project files per default" ), misc_tw ); labelNumber++; mmpz->move( XDelta, YDelta*labelNumber ); mmpz->setChecked( m_MMPZ ); connect( mmpz, SIGNAL( toggled( bool ) ), this, SLOT( toggleMMPZ( bool ) ) ); ledCheckBox * oneitw = new ledCheckBox( tr( "One instrument track window mode" ), misc_tw ); labelNumber++; oneitw->move( XDelta, YDelta*labelNumber ); oneitw->setChecked( m_oneInstrumentTrackWindow ); connect( oneitw, SIGNAL( toggled( bool ) ), this, SLOT( toggleOneInstrumentTrackWindow( bool ) ) ); ledCheckBox * hqaudio = new ledCheckBox( tr( "HQ-mode for output audio-device" ), misc_tw ); labelNumber++; hqaudio->move( XDelta, YDelta*labelNumber ); hqaudio->setChecked( m_hqAudioDev ); connect( hqaudio, SIGNAL( toggled( bool ) ), this, SLOT( toggleHQAudioDev( bool ) ) ); ledCheckBox * compacttracks = new ledCheckBox( tr( "Compact track buttons" ), misc_tw ); labelNumber++; compacttracks->move( XDelta, YDelta*labelNumber ); compacttracks->setChecked( m_compactTrackButtons ); connect( compacttracks, SIGNAL( toggled( bool ) ), this, SLOT( toggleCompactTrackButtons( bool ) ) ); ledCheckBox * syncVST = new ledCheckBox( tr( "Sync VST plugins to host playback" ), misc_tw ); labelNumber++; syncVST->move( XDelta, YDelta*labelNumber ); syncVST->setChecked( m_syncVSTPlugins ); connect( syncVST, SIGNAL( toggled( bool ) ), this, SLOT( toggleSyncVSTPlugins( bool ) ) ); ledCheckBox * noteLabels = new ledCheckBox( tr( "Enable note labels in piano roll" ), misc_tw ); labelNumber++; noteLabels->move( XDelta, YDelta*labelNumber ); noteLabels->setChecked( m_printNoteLabels ); connect( noteLabels, SIGNAL( toggled( bool ) ), this, SLOT( toggleNoteLabels( bool ) ) ); ledCheckBox * displayWaveform = new ledCheckBox( tr( "Enable waveform display by default" ), misc_tw ); labelNumber++; displayWaveform->move( XDelta, YDelta*labelNumber ); displayWaveform->setChecked( m_displayWaveform ); connect( displayWaveform, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisplayWaveform( bool ) ) ); misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize ); gen_layout->addWidget( bufsize_tw ); gen_layout->addSpacing( 10 ); gen_layout->addWidget( misc_tw ); gen_layout->addStretch(); QWidget * paths = new QWidget( ws ); int pathsHeight = 370; #ifdef LMMS_HAVE_STK pathsHeight += 55; #endif #ifdef LMMS_HAVE_FLUIDSYNTH pathsHeight += 55; #endif paths->setFixedSize( 360, pathsHeight ); QVBoxLayout * dir_layout = new QVBoxLayout( paths ); dir_layout->setSpacing( 0 ); dir_layout->setMargin( 0 ); labelWidget( paths, tr( "Paths" ) ); // working-dir tabWidget * lmms_wd_tw = new tabWidget( tr( "LMMS working directory" ).toUpper(), paths ); lmms_wd_tw->setFixedHeight( 48 ); m_wdLineEdit = new QLineEdit( m_workingDir, lmms_wd_tw ); m_wdLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_wdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setWorkingDir( const QString & ) ) ); QPushButton * workingdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", lmms_wd_tw ); workingdir_select_btn->setFixedSize( 24, 24 ); workingdir_select_btn->move( 320, 16 ); connect( workingdir_select_btn, SIGNAL( clicked() ), this, SLOT( openWorkingDir() ) ); // vst-dir tabWidget * vst_tw = new tabWidget( tr( "VST-plugin directory" ).toUpper(), paths ); vst_tw->setFixedHeight( 48 ); m_vdLineEdit = new QLineEdit( m_vstDir, vst_tw ); m_vdLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_vdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setVSTDir( const QString & ) ) ); QPushButton * vstdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", vst_tw ); vstdir_select_btn->setFixedSize( 24, 24 ); vstdir_select_btn->move( 320, 16 ); connect( vstdir_select_btn, SIGNAL( clicked() ), this, SLOT( openVSTDir() ) ); // artwork-dir tabWidget * artwork_tw = new tabWidget( tr( "Artwork directory" ).toUpper(), paths ); artwork_tw->setFixedHeight( 48 ); m_adLineEdit = new QLineEdit( m_artworkDir, artwork_tw ); m_adLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_adLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setArtworkDir( const QString & ) ) ); QPushButton * artworkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", artwork_tw ); artworkdir_select_btn->setFixedSize( 24, 24 ); artworkdir_select_btn->move( 320, 16 ); connect( artworkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openArtworkDir() ) ); // background artwork file tabWidget * backgroundArtwork_tw = new tabWidget( tr( "Background artwork" ).toUpper(), paths ); backgroundArtwork_tw->setFixedHeight( 48 ); m_baLineEdit = new QLineEdit( m_backgroundArtwork, backgroundArtwork_tw ); m_baLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_baLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setBackgroundArtwork( const QString & ) ) ); QPushButton * backgroundartworkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", backgroundArtwork_tw ); backgroundartworkdir_select_btn->setFixedSize( 24, 24 ); backgroundartworkdir_select_btn->move( 320, 16 ); connect( backgroundartworkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openBackgroundArtwork() ) ); // FL Studio-dir tabWidget * fl_tw = new tabWidget( tr( "FL Studio installation directory" ).toUpper(), paths ); fl_tw->setFixedHeight( 48 ); m_fdLineEdit = new QLineEdit( m_flDir, fl_tw ); m_fdLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_fdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setFLDir( const QString & ) ) ); QPushButton * fldir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", fl_tw ); fldir_select_btn->setFixedSize( 24, 24 ); fldir_select_btn->move( 320, 16 ); connect( fldir_select_btn, SIGNAL( clicked() ), this, SLOT( openFLDir() ) ); // LADSPA-dir tabWidget * lad_tw = new tabWidget( tr( "LADSPA plugin paths" ).toUpper(), paths ); lad_tw->setFixedHeight( 48 ); m_ladLineEdit = new QLineEdit( m_ladDir, lad_tw ); m_ladLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_ladLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setLADSPADir( const QString & ) ) ); QPushButton * laddir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", lad_tw ); laddir_select_btn->setFixedSize( 24, 24 ); laddir_select_btn->move( 320, 16 ); connect( laddir_select_btn, SIGNAL( clicked() ), this, SLOT( openLADSPADir() ) ); #ifdef LMMS_HAVE_STK // STK-dir tabWidget * stk_tw = new tabWidget( tr( "STK rawwave directory" ).toUpper(), paths ); stk_tw->setFixedHeight( 48 ); m_stkLineEdit = new QLineEdit( m_stkDir, stk_tw ); m_stkLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_stkLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setSTKDir( const QString & ) ) ); QPushButton * stkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", stk_tw ); stkdir_select_btn->setFixedSize( 24, 24 ); stkdir_select_btn->move( 320, 16 ); connect( stkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openSTKDir() ) ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH // Soundfont tabWidget * sf_tw = new tabWidget( tr( "Default Soundfont File" ).toUpper(), paths ); sf_tw->setFixedHeight( 48 ); m_sfLineEdit = new QLineEdit( m_defaultSoundfont, sf_tw ); m_sfLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_sfLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setDefaultSoundfont( const QString & ) ) ); QPushButton * sf_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", sf_tw ); sf_select_btn->setFixedSize( 24, 24 ); sf_select_btn->move( 320, 16 ); connect( sf_select_btn, SIGNAL( clicked() ), this, SLOT( openDefaultSoundfont() ) ); #endif dir_layout->addWidget( lmms_wd_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( vst_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( artwork_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( backgroundArtwork_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( fl_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( lad_tw ); #ifdef LMMS_HAVE_STK dir_layout->addSpacing( 10 ); dir_layout->addWidget( stk_tw ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH dir_layout->addSpacing( 10 ); dir_layout->addWidget( sf_tw ); #endif dir_layout->addStretch(); QWidget * performance = new QWidget( ws ); performance->setFixedSize( 360, 240 ); QVBoxLayout * perf_layout = new QVBoxLayout( performance ); perf_layout->setSpacing( 0 ); perf_layout->setMargin( 0 ); labelWidget( performance, tr( "Performance settings" ) ); tabWidget * ui_fx_tw = new tabWidget( tr( "UI effects vs. " "performance" ).toUpper(), performance ); ui_fx_tw->setFixedHeight( 80 ); ledCheckBox * smoothScroll = new ledCheckBox( tr( "Smooth scroll in Song Editor" ), ui_fx_tw ); smoothScroll->move( 10, 20 ); smoothScroll->setChecked( m_smoothScroll ); connect( smoothScroll, SIGNAL( toggled( bool ) ), this, SLOT( toggleSmoothScroll( bool ) ) ); ledCheckBox * autoSave = new ledCheckBox( tr( "Enable auto save feature" ), ui_fx_tw ); autoSave->move( 10, 40 ); autoSave->setChecked( m_enableAutoSave ); connect( autoSave, SIGNAL( toggled( bool ) ), this, SLOT( toggleAutoSave( bool ) ) ); ledCheckBox * animAFP = new ledCheckBox( tr( "Show playback cursor in AudioFileProcessor" ), ui_fx_tw ); animAFP->move( 10, 60 ); animAFP->setChecked( m_animateAFP ); connect( animAFP, SIGNAL( toggled( bool ) ), this, SLOT( toggleAnimateAFP( bool ) ) ); perf_layout->addWidget( ui_fx_tw ); perf_layout->addStretch(); QWidget * audio = new QWidget( ws ); audio->setFixedSize( 360, 200 ); QVBoxLayout * audio_layout = new QVBoxLayout( audio ); audio_layout->setSpacing( 0 ); audio_layout->setMargin( 0 ); labelWidget( audio, tr( "Audio settings" ) ); tabWidget * audioiface_tw = new tabWidget( tr( "AUDIO INTERFACE" ), audio ); audioiface_tw->setFixedHeight( 60 ); m_audioInterfaces = new QComboBox( audioiface_tw ); m_audioInterfaces->setGeometry( 10, 20, 240, 22 ); QPushButton * audio_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", audioiface_tw ); audio_help_btn->setGeometry( 320, 20, 28, 28 ); connect( audio_help_btn, SIGNAL( clicked() ), this, SLOT( displayAudioHelp() ) ); // create ifaces-settings-widget QWidget * asw = new QWidget( audio ); asw->setFixedHeight( 60 ); QHBoxLayout * asw_layout = new QHBoxLayout( asw ); asw_layout->setSpacing( 0 ); asw_layout->setMargin( 0 ); //asw_layout->setAutoAdd( true ); #ifdef LMMS_HAVE_JACK m_audioIfaceSetupWidgets[AudioJack::name()] = new AudioJack::setupWidget( asw ); #endif #ifdef LMMS_HAVE_ALSA m_audioIfaceSetupWidgets[AudioAlsa::name()] = new AudioAlsa::setupWidget( asw ); #endif #ifdef LMMS_HAVE_PULSEAUDIO m_audioIfaceSetupWidgets[AudioPulseAudio::name()] = new AudioPulseAudio::setupWidget( asw ); #endif #ifdef LMMS_HAVE_PORTAUDIO m_audioIfaceSetupWidgets[AudioPortAudio::name()] = new AudioPortAudio::setupWidget( asw ); #endif #ifdef LMMS_HAVE_SDL m_audioIfaceSetupWidgets[AudioSdl::name()] = new AudioSdl::setupWidget( asw ); #endif #ifdef LMMS_HAVE_OSS m_audioIfaceSetupWidgets[AudioOss::name()] = new AudioOss::setupWidget( asw ); #endif m_audioIfaceSetupWidgets[AudioDummy::name()] = new AudioDummy::setupWidget( asw ); for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { m_audioIfaceNames[tr( it.key().toAscii())] = it.key(); } for( trMap::iterator it = m_audioIfaceNames.begin(); it != m_audioIfaceNames.end(); ++it ) { QWidget * audioWidget = m_audioIfaceSetupWidgets[it.value()]; audioWidget->hide(); asw_layout->addWidget( audioWidget ); m_audioInterfaces->addItem( it.key() ); } m_audioInterfaces->setCurrentIndex( m_audioInterfaces->findText( tr( engine::mixer()->audioDevName().toAscii() ) ) ); m_audioIfaceSetupWidgets[engine::mixer()->audioDevName()]->show(); connect( m_audioInterfaces, SIGNAL( activated( const QString & ) ), this, SLOT( audioInterfaceChanged( const QString & ) ) ); audio_layout->addWidget( audioiface_tw ); audio_layout->addSpacing( 20 ); audio_layout->addWidget( asw ); audio_layout->addStretch(); QWidget * midi = new QWidget( ws ); QVBoxLayout * midi_layout = new QVBoxLayout( midi ); midi_layout->setSpacing( 0 ); midi_layout->setMargin( 0 ); labelWidget( midi, tr( "MIDI settings" ) ); tabWidget * midiiface_tw = new tabWidget( tr( "MIDI INTERFACE" ), midi ); midiiface_tw->setFixedHeight( 60 ); m_midiInterfaces = new QComboBox( midiiface_tw ); m_midiInterfaces->setGeometry( 10, 20, 240, 22 ); QPushButton * midi_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", midiiface_tw ); midi_help_btn->setGeometry( 320, 20, 28, 28 ); connect( midi_help_btn, SIGNAL( clicked() ), this, SLOT( displayMIDIHelp() ) ); // create ifaces-settings-widget QWidget * msw = new QWidget( midi ); msw->setFixedHeight( 60 ); QHBoxLayout * msw_layout = new QHBoxLayout( msw ); msw_layout->setSpacing( 0 ); msw_layout->setMargin( 0 ); //msw_layout->setAutoAdd( true ); #ifdef LMMS_HAVE_ALSA m_midiIfaceSetupWidgets[MidiAlsaSeq::name()] = new MidiAlsaSeq::setupWidget( msw ); m_midiIfaceSetupWidgets[MidiAlsaRaw::name()] = new MidiAlsaRaw::setupWidget( msw ); #endif #ifdef LMMS_HAVE_OSS m_midiIfaceSetupWidgets[MidiOss::name()] = new MidiOss::setupWidget( msw ); #endif #ifdef LMMS_BUILD_WIN32 m_midiIfaceSetupWidgets[MidiWinMM::name()] = new MidiWinMM::setupWidget( msw ); #endif m_midiIfaceSetupWidgets[MidiDummy::name()] = new MidiDummy::setupWidget( msw ); for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin(); it != m_midiIfaceSetupWidgets.end(); ++it ) { m_midiIfaceNames[tr( it.key().toAscii())] = it.key(); } for( trMap::iterator it = m_midiIfaceNames.begin(); it != m_midiIfaceNames.end(); ++it ) { QWidget * midiWidget = m_midiIfaceSetupWidgets[it.value()]; midiWidget->hide(); msw_layout->addWidget( midiWidget ); m_midiInterfaces->addItem( it.key() ); } m_midiInterfaces->setCurrentIndex( m_midiInterfaces->findText( tr( engine::mixer()->midiClientName().toAscii() ) ) ); m_midiIfaceSetupWidgets[engine::mixer()->midiClientName()]->show(); connect( m_midiInterfaces, SIGNAL( activated( const QString & ) ), this, SLOT( midiInterfaceChanged( const QString & ) ) ); midi_layout->addWidget( midiiface_tw ); midi_layout->addSpacing( 20 ); midi_layout->addWidget( msw ); midi_layout->addStretch(); m_tabBar->addTab( general, tr( "General settings" ), 0, false, true )->setIcon( embed::getIconPixmap( "setup_general" ) ); m_tabBar->addTab( paths, tr( "Paths" ), 1, false, true )->setIcon( embed::getIconPixmap( "setup_directories" ) ); m_tabBar->addTab( performance, tr( "Performance settings" ), 2, false, true )->setIcon( embed::getIconPixmap( "setup_performance" ) ); m_tabBar->addTab( audio, tr( "Audio settings" ), 3, false, true )->setIcon( embed::getIconPixmap( "setup_audio" ) ); m_tabBar->addTab( midi, tr( "MIDI settings" ), 4, true, true )->setIcon( embed::getIconPixmap( "setup_midi" ) ); m_tabBar->setActiveTab( _tab_to_open ); hlayout->addWidget( m_tabBar ); hlayout->addSpacing( 10 ); hlayout->addWidget( ws ); hlayout->addSpacing( 10 ); hlayout->addStretch(); QWidget * buttons = new QWidget( this ); QHBoxLayout * btn_layout = new QHBoxLayout( buttons ); btn_layout->setSpacing( 0 ); btn_layout->setMargin( 0 ); QPushButton * ok_btn = new QPushButton( embed::getIconPixmap( "apply" ), tr( "OK" ), buttons ); connect( ok_btn, SIGNAL( clicked() ), this, SLOT( accept() ) ); QPushButton * cancel_btn = new QPushButton( embed::getIconPixmap( "cancel" ), tr( "Cancel" ), buttons ); connect( cancel_btn, SIGNAL( clicked() ), this, SLOT( reject() ) ); btn_layout->addStretch(); btn_layout->addSpacing( 10 ); btn_layout->addWidget( ok_btn ); btn_layout->addSpacing( 10 ); btn_layout->addWidget( cancel_btn ); btn_layout->addSpacing( 10 ); vlayout->addWidget( settings ); vlayout->addSpacing( 10 ); vlayout->addWidget( buttons ); vlayout->addSpacing( 10 ); vlayout->addStretch(); show(); } setupDialog::~setupDialog() { engine::projectJournal()->setJournalling( true ); } void setupDialog::accept() { configManager::inst()->setValue( "mixer", "framesperaudiobuffer", QString::number( m_bufferSize ) ); configManager::inst()->setValue( "mixer", "audiodev", m_audioIfaceNames[m_audioInterfaces->currentText()] ); configManager::inst()->setValue( "mixer", "mididev", m_midiIfaceNames[m_midiInterfaces->currentText()] ); configManager::inst()->setValue( "tooltips", "disabled", QString::number( !m_toolTips ) ); configManager::inst()->setValue( "app", "nomsgaftersetup", QString::number( !m_warnAfterSetup ) ); configManager::inst()->setValue( "app", "displaydbv", QString::number( m_displaydBV ) ); configManager::inst()->setValue( "app", "nommpz", QString::number( !m_MMPZ ) ); configManager::inst()->setValue( "mixer", "hqaudio", QString::number( m_hqAudioDev ) ); configManager::inst()->setValue( "ui", "smoothscroll", QString::number( m_smoothScroll ) ); configManager::inst()->setValue( "ui", "enableautosave", QString::number( m_enableAutoSave ) ); configManager::inst()->setValue( "ui", "oneinstrumenttrackwindow", QString::number( m_oneInstrumentTrackWindow ) ); configManager::inst()->setValue( "ui", "compacttrackbuttons", QString::number( m_compactTrackButtons ) ); configManager::inst()->setValue( "ui", "syncvstplugins", QString::number( m_syncVSTPlugins ) ); configManager::inst()->setValue( "ui", "animateafp", QString::number( m_animateAFP ) ); configManager::inst()->setValue( "ui", "printnotelabels", QString::number( m_printNoteLabels ) ); configManager::inst()->setValue( "ui", "displaywaveform", QString::number( m_displayWaveform ) ); configManager::inst()->setWorkingDir( m_workingDir ); configManager::inst()->setVSTDir( m_vstDir ); configManager::inst()->setArtworkDir( m_artworkDir ); configManager::inst()->setFLDir( m_flDir ); configManager::inst()->setLADSPADir( m_ladDir ); #ifdef LMMS_HAVE_FLUIDSYNTH configManager::inst()->setDefaultSoundfont( m_defaultSoundfont ); #endif #ifdef LMMS_HAVE_STK configManager::inst()->setSTKDir( m_stkDir ); #endif configManager::inst()->setBackgroundArtwork( m_backgroundArtwork ); // tell all audio-settings-widget to save their settings for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { it.value()->saveSettings(); } // tell all MIDI-settings-widget to save their settings for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin(); it != m_midiIfaceSetupWidgets.end(); ++it ) { it.value()->saveSettings(); } configManager::inst()->saveConfigFile(); QDialog::accept(); if( m_warnAfterSetup ) { QMessageBox::information( NULL, tr( "Restart LMMS" ), tr( "Please note that most changes " "won't take effect until " "you restart LMMS!" ), QMessageBox::Ok ); } } void setupDialog::setBufferSize( int _value ) { const int step = DEFAULT_BUFFER_SIZE / 64; if( _value > step && _value % step ) { int mod_value = _value % step; if( mod_value < step / 2 ) { m_bufSizeSlider->setValue( _value - mod_value ); } else { m_bufSizeSlider->setValue( _value + step - mod_value ); } return; } if( m_bufSizeSlider->value() != _value ) { m_bufSizeSlider->setValue( _value ); } m_bufferSize = _value * 64; m_bufSizeLbl->setText( tr( "Frames: %1\nLatency: %2 ms" ).arg( m_bufferSize ).arg( 1000.0f * m_bufferSize / engine::mixer()->processingSampleRate(), 0, 'f', 1 ) ); } void setupDialog::resetBufSize() { setBufferSize( DEFAULT_BUFFER_SIZE / 64 ); } void setupDialog::displayBufSizeHelp() { QWhatsThis::showText( QCursor::pos(), tr( "Here you can setup the internal buffer-size " "used by LMMS. Smaller values result " "in a lower latency but also may cause " "unusable sound or bad performance, " "especially on older computers or " "systems with a non-realtime " "kernel." ) ); } void setupDialog::toggleToolTips( bool _enabled ) { m_toolTips = _enabled; } void setupDialog::toggleWarnAfterSetup( bool _enabled ) { m_warnAfterSetup = _enabled; } void setupDialog::toggleDisplaydBV( bool _enabled ) { m_displaydBV = _enabled; } void setupDialog::toggleMMPZ( bool _enabled ) { m_MMPZ = _enabled; } void setupDialog::toggleHQAudioDev( bool _enabled ) { m_hqAudioDev = _enabled; } void setupDialog::toggleSmoothScroll( bool _enabled ) { m_smoothScroll = _enabled; } void setupDialog::toggleAutoSave( bool _enabled ) { m_enableAutoSave = _enabled; } void setupDialog::toggleCompactTrackButtons( bool _enabled ) { m_compactTrackButtons = _enabled; } void setupDialog::toggleSyncVSTPlugins( bool _enabled ) { m_syncVSTPlugins = _enabled; } void setupDialog::toggleAnimateAFP( bool _enabled ) { m_animateAFP = _enabled; } void setupDialog::toggleNoteLabels( bool en ) { m_printNoteLabels = en; } void setupDialog::toggleDisplayWaveform( bool en ) { m_displayWaveform = en; } void setupDialog::toggleOneInstrumentTrackWindow( bool _enabled ) { m_oneInstrumentTrackWindow = _enabled; } void setupDialog::openWorkingDir() { QString new_dir = FileDialog::getExistingDirectory( this, tr( "Choose LMMS working directory" ), m_workingDir ); if( new_dir != QString::null ) { m_wdLineEdit->setText( new_dir ); } } void setupDialog::setWorkingDir( const QString & _wd ) { m_workingDir = _wd; } void setupDialog::openVSTDir() { QString new_dir = FileDialog::getExistingDirectory( this, tr( "Choose your VST-plugin directory" ), m_vstDir ); if( new_dir != QString::null ) { m_vdLineEdit->setText( new_dir ); } } void setupDialog::setVSTDir( const QString & _vd ) { m_vstDir = _vd; } void setupDialog::openArtworkDir() { QString new_dir = FileDialog::getExistingDirectory( this, tr( "Choose artwork-theme directory" ), m_artworkDir ); if( new_dir != QString::null ) { m_adLineEdit->setText( new_dir ); } } void setupDialog::setArtworkDir( const QString & _ad ) { m_artworkDir = _ad; } void setupDialog::openFLDir() { QString new_dir = FileDialog::getExistingDirectory( this, tr( "Choose FL Studio installation directory" ), m_flDir ); if( new_dir != QString::null ) { m_fdLineEdit->setText( new_dir ); } } void setupDialog::openLADSPADir() { QString new_dir = FileDialog::getExistingDirectory( this, tr( "Choose LADSPA plugin directory" ), m_ladDir ); if( new_dir != QString::null ) { if( m_ladLineEdit->text() == "" ) { m_ladLineEdit->setText( new_dir ); } else { m_ladLineEdit->setText( m_ladLineEdit->text() + "," + new_dir ); } } } void setupDialog::openSTKDir() { #ifdef LMMS_HAVE_STK QString new_dir = FileDialog::getExistingDirectory( this, tr( "Choose STK rawwave directory" ), m_stkDir ); if( new_dir != QString::null ) { m_stkLineEdit->setText( new_dir ); } #endif } void setupDialog::openDefaultSoundfont() { #ifdef LMMS_HAVE_FLUIDSYNTH QString new_file = FileDialog::getOpenFileName( this, tr( "Choose default SoundFont" ), m_defaultSoundfont, "SoundFont2 Files (*.sf2)" ); if( new_file != QString::null ) { m_sfLineEdit->setText( new_file ); } #endif } void setupDialog::openBackgroundArtwork() { QList fileTypesList = QImageReader::supportedImageFormats(); QString fileTypes; for( int i = 0; i < fileTypesList.count(); i++ ) { if( fileTypesList[i] != fileTypesList[i].toUpper() ) { if( !fileTypes.isEmpty() ) { fileTypes += " "; } fileTypes += "*." + QString( fileTypesList[i] ); } } QString dir = ( m_backgroundArtwork.isEmpty() ) ? m_artworkDir : m_backgroundArtwork; QString new_file = FileDialog::getOpenFileName( this, tr( "Choose background artwork" ), dir, "Image Files (" + fileTypes + ")" ); if( new_file != QString::null ) { m_baLineEdit->setText( new_file ); } } void setupDialog::setFLDir( const QString & _fd ) { m_flDir = _fd; } void setupDialog::setLADSPADir( const QString & _fd ) { m_ladDir = _fd; } void setupDialog::setSTKDir( const QString & _fd ) { #ifdef LMMS_HAVE_STK m_stkDir = _fd; #endif } void setupDialog::setDefaultSoundfont( const QString & _sf ) { #ifdef LMMS_HAVE_FLUIDSYNTH m_defaultSoundfont = _sf; #endif } void setupDialog::setBackgroundArtwork( const QString & _ba ) { #ifdef LMMS_HAVE_FLUIDSYNTH m_backgroundArtwork = _ba; #endif } void setupDialog::audioInterfaceChanged( const QString & _iface ) { for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { it.value()->hide(); } m_audioIfaceSetupWidgets[m_audioIfaceNames[_iface]]->show(); } void setupDialog::displayAudioHelp() { QWhatsThis::showText( QCursor::pos(), tr( "Here you can select your preferred " "audio-interface. Depending on the " "configuration of your system during " "compilation time you can choose " "between ALSA, JACK, OSS and more. " "Below you see a box which offers " "controls to setup the selected " "audio-interface." ) ); } void setupDialog::midiInterfaceChanged( const QString & _iface ) { for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin(); it != m_midiIfaceSetupWidgets.end(); ++it ) { it.value()->hide(); } m_midiIfaceSetupWidgets[m_midiIfaceNames[_iface]]->show(); } void setupDialog::displayMIDIHelp() { QWhatsThis::showText( QCursor::pos(), tr( "Here you can select your preferred " "MIDI-interface. Depending on the " "configuration of your system during " "compilation time you can choose " "between ALSA, OSS and more. " "Below you see a box which offers " "controls to setup the selected " "MIDI-interface." ) ); } #include "moc_setup_dialog.cxx" lmms-1.1.3/src/gui/string_pair_drag.cpp000066400000000000000000000051671247673406200201050ustar00rootroot00000000000000/* * string_pair_drag.cpp - class stringPairDrag which provides general support * for drag'n'drop of string-pairs and which is the base * for all drag'n'drop-actions within LMMS * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "string_pair_drag.h" #include "engine.h" #include "MainWindow.h" stringPairDrag::stringPairDrag( const QString & _key, const QString & _value, const QPixmap & _icon, QWidget * _w ) : QDrag( _w ) { if( _icon.isNull() && _w ) { setPixmap( QPixmap::grabWidget( _w ).scaled( 64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); } else { setPixmap( _icon ); } QString txt = _key + ":" + _value; QMimeData * m = new QMimeData(); m->setData( mimeType(), txt.toAscii() ); setMimeData( m ); start( Qt::IgnoreAction ); } stringPairDrag::~stringPairDrag() { // during a drag, we might have lost key-press-events, so reset // modifiers of main-win if( engine::mainWindow() ) { engine::mainWindow()->clearKeyModifiers(); } } bool stringPairDrag::processDragEnterEvent( QDragEnterEvent * _dee, const QString & _allowed_keys ) { if( !_dee->mimeData()->hasFormat( mimeType() ) ) { return( FALSE ); } QString txt = _dee->mimeData()->data( mimeType() ); if( _allowed_keys.split( ',' ).contains( txt.section( ':', 0, 0 ) ) ) { _dee->acceptProposedAction(); return( TRUE ); } _dee->ignore(); return( FALSE ); } QString stringPairDrag::decodeKey( QDropEvent * _de ) { return( QString( _de->mimeData()->data( mimeType() ) ).section( ':', 0, 0 ) ); } QString stringPairDrag::decodeValue( QDropEvent * _de ) { return( QString( _de->mimeData()->data( mimeType() ) ).section( ':', 1, -1 ) ); } lmms-1.1.3/src/gui/widgets/000077500000000000000000000000001247673406200155205ustar00rootroot00000000000000lmms-1.1.3/src/gui/widgets/ControllerRackView.cpp000066400000000000000000000113451247673406200220070ustar00rootroot00000000000000/* * ControllerRackView.cpp - view for song's controllers * * Copyright (c) 2008-2009 Paul Giblock * Copyright (c) 2010-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include "song.h" #include "embed.h" #include "MainWindow.h" #include "group_box.h" #include "ControllerRackView.h" #include "ControllerView.h" #include "LfoController.h" ControllerRackView::ControllerRackView( ) : QWidget() { setMinimumWidth( 250 ); setMaximumWidth( 250 ); resize( 250, 160 ); setWindowIcon( embed::getIconPixmap( "controller" ) ); setWindowTitle( tr( "Controller Rack" ) ); m_scrollArea = new QScrollArea( this ); m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_scrollArea->setPalette( QApplication::palette( m_scrollArea ) ); m_scrollArea->setMinimumHeight( 64 ); m_addButton = new QPushButton( this ); m_addButton->setText( tr( "Add" ) ); QWidget * w = new QWidget(); m_scrollArea->setWidget( w ); connect( m_addButton, SIGNAL( clicked() ), this, SLOT( addController() ) ); connect( engine::getSong(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); QVBoxLayout * layout = new QVBoxLayout(); layout->addWidget( m_scrollArea ); layout->addWidget( m_addButton ); this->setLayout( layout ); QMdiSubWindow * subWin = engine::mainWindow()->workspace()->addSubWindow( this ); // No maximize button Qt::WindowFlags flags = subWin->windowFlags(); flags &= ~Qt::WindowMaximizeButtonHint; subWin->setWindowFlags( flags ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->move( 880, 310 ); } ControllerRackView::~ControllerRackView() { // delete scroll-area with all children delete m_scrollArea; } void ControllerRackView::saveSettings( QDomDocument & _doc, QDomElement & _this ) { MainWindow::saveWidgetState( this, _this ); } void ControllerRackView::loadSettings( const QDomElement & _this ) { MainWindow::restoreWidgetState( this, _this ); } void ControllerRackView::deleteController( ControllerView * _view ) { Controller * c = _view->getController(); int connectionCount = c->connectionCount(); if( connectionCount > 0 ) { QMessageBox msgBox; msgBox.setIcon( QMessageBox::Question ); msgBox.setWindowTitle( tr("Confirm Delete") ); msgBox.setText( tr("Confirm delete? There are existing connection(s) " "associted with this controller. There is no way to undo.") ); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); if( msgBox.exec() != QMessageBox::Ok ) { return; } } m_controllerViews.erase( qFind( m_controllerViews.begin(), m_controllerViews.end(), _view ) ); delete _view; delete c; update(); } void ControllerRackView::update() { QWidget * w = m_scrollArea->widget(); song * s = engine::getSong(); setUpdatesEnabled( false ); int i = 0; for( i = 0; i < m_controllerViews.size(); ++i ) { delete m_controllerViews[i]; } m_controllerViews.clear(); for( i = 0; i < s->m_controllers.size(); ++i ) { ControllerView * v = new ControllerView( s->m_controllers[i], w ); connect( v, SIGNAL( deleteController( ControllerView * ) ), this, SLOT( deleteController( ControllerView * ) ), Qt::QueuedConnection ); m_controllerViews.append( v ); v->move( 0, i*32 ); v->show(); } w->setFixedSize( 210, i*32 ); setUpdatesEnabled( true ); QWidget::update(); } void ControllerRackView::addController() { // TODO: Eventually let the user pick from available controller types engine::getSong()->addController( new LfoController( engine::getSong() ) ); update(); // fix bug which always made ControllerRackView loose focus when adding // new controller setFocus(); } #include "moc_ControllerRackView.cxx" lmms-1.1.3/src/gui/widgets/ControllerView.cpp000066400000000000000000000105571247673406200212120ustar00rootroot00000000000000/* * ControllerView.cpp - view-component for an controller * * Copyright (c) 2008-2009 Paul Giblock * Copyright (c) 2011-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include "ControllerView.h" #include "caption_menu.h" #include "ControllerDialog.h" #include "gui_templates.h" #include "embed.h" #include "engine.h" #include "led_checkbox.h" #include "MainWindow.h" #include "tooltip.h" ControllerView::ControllerView( Controller * _model, QWidget * _parent ) : QWidget( _parent ), ModelView( _model, this ), m_bg( embed::getIconPixmap( "controller_bg" ) ), m_subWindow( NULL ), m_controllerDlg( NULL ), m_show( true ) { setFixedSize( 210, 32 ); QPushButton * ctls_btn = new QPushButton( tr( "Controls" ), this ); QFont f = ctls_btn->font(); ctls_btn->setFont( pointSize<8>( f ) ); ctls_btn->setGeometry( 140, 2, 50, 14 ); connect( ctls_btn, SIGNAL( clicked() ), this, SLOT( editControls() ) ); m_controllerDlg = getController()->createDialog( engine::mainWindow()->workspace() ); m_subWindow = engine::mainWindow()->workspace()->addSubWindow( m_controllerDlg ); Qt::WindowFlags flags = m_subWindow->windowFlags(); flags &= ~Qt::WindowMaximizeButtonHint; m_subWindow->setWindowFlags( flags ); m_subWindow->setFixedSize( m_subWindow->size() ); m_subWindow->setWindowIcon( m_controllerDlg->windowIcon() ); connect( m_controllerDlg, SIGNAL( closed() ), this, SLOT( closeControls() ) ); m_subWindow->hide(); setWhatsThis( tr( "Controllers are able to automate the value of a knob, " "slider, and other controls." ) ); setModel( _model ); } ControllerView::~ControllerView() { delete m_subWindow; } void ControllerView::editControls() { if( m_show ) { m_subWindow->show(); m_subWindow->raise(); m_show = false; } else { m_subWindow->hide(); m_show = true; } } void ControllerView::closeControls() { m_subWindow->hide(); m_show = true; } void ControllerView::deleteController() { emit( deleteController( this ) ); } void ControllerView::paintEvent( QPaintEvent * ) { QPainter p( this ); p.drawPixmap( 0, 0, m_bg ); QFont f = pointSizeF( font(), 7.5f ); f.setBold( true ); p.setFont( f ); Controller * c = castModel(); p.setPen( QColor( 64, 64, 64 ) ); p.drawText( 7, 13, c->displayName() ); p.setPen( Qt::white ); p.drawText( 6, 12, c->displayName() ); f.setBold( false ); p.setFont( f ); p.drawText( 8, 26, c->name() ); } void ControllerView::mouseDoubleClickEvent( QMouseEvent * event ) { bool ok; Controller * c = castModel(); QString new_name = QInputDialog::getText( this, tr( "Rename controller" ), tr( "Enter the new name for this controller" ), QLineEdit::Normal, c->name() , &ok ); if( ok && !new_name.isEmpty() ) { c->setName( new_name ); update(); } } void ControllerView::modelChanged() { } void ControllerView::contextMenuEvent( QContextMenuEvent * ) { QPointer contextMenu = new captionMenu( model()->displayName(), this ); contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "&Remove this plugin" ), this, SLOT( deleteController() ) ); contextMenu->addSeparator(); contextMenu->addHelpAction(); contextMenu->exec( QCursor::pos() ); delete contextMenu; } void ControllerView::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().center() ), whatsThis() ); } #include "moc_ControllerView.cxx" lmms-1.1.3/src/gui/widgets/EffectRackView.cpp000066400000000000000000000134261247673406200210620ustar00rootroot00000000000000/* * EffectRackView.cpp - view for effectChain model * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include "EffectRackView.h" #include "EffectSelectDialog.h" #include "EffectView.h" #include "group_box.h" EffectRackView::EffectRackView( EffectChain* model, QWidget* parent ) : QWidget( parent ), ModelView( NULL, this ) { QVBoxLayout* mainLayout = new QVBoxLayout( this ); mainLayout->setMargin( 5 ); m_effectsGroupBox = new groupBox( tr( "EFFECTS CHAIN" ) ); mainLayout->addWidget( m_effectsGroupBox ); QVBoxLayout* effectsLayout = new QVBoxLayout( m_effectsGroupBox ); effectsLayout->setSpacing( 0 ); effectsLayout->setContentsMargins( 2, m_effectsGroupBox->titleBarHeight() + 2, 2, 2 ); m_scrollArea = new QScrollArea; m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_scrollArea->setPalette( QApplication::palette( m_scrollArea ) ); m_scrollArea->setFrameStyle( QFrame::NoFrame ); m_scrollArea->setWidget( new QWidget ); effectsLayout->addWidget( m_scrollArea ); QPushButton* addButton = new QPushButton; addButton->setText( tr( "Add effect" ) ); effectsLayout->addWidget( addButton ); connect( addButton, SIGNAL( clicked() ), this, SLOT( addEffect() ) ); m_lastY = 0; setModel( model ); } EffectRackView::~EffectRackView() { clearViews(); } void EffectRackView::clearViews() { for( QVector::Iterator it = m_effectViews.begin(); it != m_effectViews.end(); ++it ) { delete *it; } m_effectViews.clear(); } void EffectRackView::moveUp( EffectView* view ) { fxChain()->moveUp( view->effect() ); if( view != m_effectViews.first() ) { int i = 0; for( QVector::Iterator it = m_effectViews.begin(); it != m_effectViews.end(); it++, i++ ) { if( *it == view ) { break; } } EffectView * temp = m_effectViews[ i - 1 ]; m_effectViews[i - 1] = view; m_effectViews[i] = temp; update(); } } void EffectRackView::moveDown( EffectView* view ) { if( view != m_effectViews.last() ) { // moving next effect up is the same moveUp( *( qFind( m_effectViews.begin(), m_effectViews.end(), view ) + 1 ) ); } } void EffectRackView::deletePlugin( EffectView* view ) { Effect * e = view->effect(); m_effectViews.erase( qFind( m_effectViews.begin(), m_effectViews.end(), view ) ); delete view; fxChain()->removeEffect( e ); e->deleteLater(); update(); } void EffectRackView::update() { QWidget * w = m_scrollArea->widget(); QVector view_map( qMax( fxChain()->m_effects.size(), m_effectViews.size() ), false ); for( QVector::Iterator it = fxChain()->m_effects.begin(); it != fxChain()->m_effects.end(); ++it ) { int i = 0; for( QVector::Iterator vit = m_effectViews.begin(); vit != m_effectViews.end(); ++vit, ++i ) { if( ( *vit )->model() == *it ) { view_map[i] = true; break; } } if( i >= m_effectViews.size() ) { EffectView * view = new EffectView( *it, w ); connect( view, SIGNAL( moveUp( EffectView * ) ), this, SLOT( moveUp( EffectView * ) ) ); connect( view, SIGNAL( moveDown( EffectView * ) ), this, SLOT( moveDown( EffectView * ) ) ); connect( view, SIGNAL( deletePlugin( EffectView * ) ), this, SLOT( deletePlugin( EffectView * ) ), Qt::QueuedConnection ); view->show(); m_effectViews.append( view ); if( i < view_map.size() ) { view_map[i] = true; } else { view_map.append( true ); } } } int i = 0, nView = 0; const int EffectViewMargin = 3; m_lastY = EffectViewMargin; for( QVector::Iterator it = m_effectViews.begin(); it != m_effectViews.end(); i++ ) { if( i < view_map.size() && view_map[i] == false ) { delete m_effectViews[nView]; it = m_effectViews.erase( it ); } else { ( *it )->move( EffectViewMargin, m_lastY ); m_lastY += ( *it )->height(); ++nView; ++it; } } w->setFixedSize( 210 + 2*EffectViewMargin, m_lastY ); QWidget::update(); } void EffectRackView::addEffect() { EffectSelectDialog esd( this ); esd.exec(); if( esd.result() == QDialog::Rejected ) { return; } Effect * fx = esd.instantiateSelectedPlugin( fxChain() ); fxChain()->m_enabledModel.setValue( true ); fxChain()->appendEffect( fx ); update(); // Find the effectView, and show the controls for( QVector::Iterator vit = m_effectViews.begin(); vit != m_effectViews.end(); ++vit ) { if( ( *vit )->effect() == fx ) { ( *vit )->editControls(); break; } } } void EffectRackView::modelChanged() { //clearViews(); m_effectsGroupBox->setModel( &fxChain()->m_enabledModel ); connect( fxChain(), SIGNAL( aboutToClear() ), this, SLOT( clearViews() ) ); update(); } #include "moc_EffectRackView.cxx" lmms-1.1.3/src/gui/widgets/EffectView.cpp000066400000000000000000000173051247673406200202610ustar00rootroot00000000000000/* * EffectView.cpp - view-component for an effect * * Copyright (c) 2006-2007 Danny McRae * Copyright (c) 2007-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "EffectView.h" #include "DummyEffect.h" #include "caption_menu.h" #include "EffectControls.h" #include "EffectControlDialog.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "knob.h" #include "led_checkbox.h" #include "MainWindow.h" #include "TempoSyncKnob.h" #include "tooltip.h" EffectView::EffectView( Effect * _model, QWidget * _parent ) : PluginView( _model, _parent ), m_bg( embed::getIconPixmap( "effect_plugin" ) ), m_subWindow( NULL ), m_controlView( NULL ) { setFixedSize( 210, 60 ); // Disable effects that are of type "DummyEffect" bool isEnabled = !dynamic_cast( effect() ); m_bypass = new ledCheckBox( this, "", isEnabled ? ledCheckBox::Green : ledCheckBox::Red ); m_bypass->move( 3, 3 ); m_bypass->setEnabled( isEnabled ); m_bypass->setWhatsThis( tr( "Toggles the effect on or off." ) ); toolTip::add( m_bypass, tr( "On/Off" ) ); m_wetDry = new knob( knobBright_26, this ); m_wetDry->setLabel( tr( "W/D" ) ); m_wetDry->move( 27, 5 ); m_wetDry->setEnabled( isEnabled ); m_wetDry->setHintText( tr( "Wet Level:" ) + " ", "" ); m_wetDry->setWhatsThis( tr( "The Wet/Dry knob sets the ratio between " "the input signal and the effect signal that " "forms the output." ) ); m_autoQuit = new TempoSyncKnob( knobBright_26, this ); m_autoQuit->setLabel( tr( "DECAY" ) ); m_autoQuit->move( 60, 5 ); m_autoQuit->setEnabled( isEnabled ); m_autoQuit->setHintText( tr( "Time:" ) + " ", "ms" ); m_autoQuit->setWhatsThis( tr( "The Decay knob controls how many buffers of silence must pass before the " "plugin stops processing. Smaller values will reduce the CPU overhead but " "run the risk of clipping the tail on delay and reverb effects." ) ); m_gate = new knob( knobBright_26, this ); m_gate->setLabel( tr( "GATE" ) ); m_gate->move( 93, 5 ); m_gate->setEnabled( isEnabled ); m_gate->setHintText( tr( "Gate:" ) + " ", "" ); m_gate->setWhatsThis( tr( "The Gate knob controls the signal level that is considered to be 'silence' " "while deciding when to stop processing signals." ) ); setModel( _model ); if( effect()->controls()->controlCount() > 0 ) { QPushButton * ctls_btn = new QPushButton( tr( "Controls" ), this ); QFont f = ctls_btn->font(); ctls_btn->setFont( pointSize<8>( f ) ); ctls_btn->setGeometry( 140, 14, 50, 20 ); connect( ctls_btn, SIGNAL( clicked() ), this, SLOT( editControls() ) ); m_controlView = effect()->controls()->createView(); if( m_controlView ) { m_subWindow = engine::mainWindow()->workspace()->addSubWindow( m_controlView, Qt::SubWindow | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint ); m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); m_subWindow->setFixedSize( m_subWindow->size() ); connect( m_controlView, SIGNAL( closed() ), this, SLOT( closeEffects() ) ); m_subWindow->hide(); } } setWhatsThis( tr( "Effect plugins function as a chained series of effects where the signal will " "be processed from top to bottom.\n\n" "The On/Off switch allows you to bypass a given plugin at any point in " "time.\n\n" "The Wet/Dry knob controls the balance between the input signal and the " "effected signal that is the resulting output from the effect. The input " "for the stage is the output from the previous stage. So, the 'dry' signal " "for effects lower in the chain contains all of the previous effects.\n\n" "The Decay knob controls how long the signal will continue to be processed " "after the notes have been released. The effect will stop processing signals " "when the volume has dropped below a given threshold for a given length of " "time. This knob sets the 'given length of time'. Longer times will require " "more CPU, so this number should be set low for most effects. It needs to be " "bumped up for effects that produce lengthy periods of silence, e.g. " "delays.\n\n" "The Gate knob controls the 'given threshold' for the effect's auto shutdown. " "The clock for the 'given length of time' will begin as soon as the processed " "signal level drops below the level specified with this knob.\n\n" "The Controls button opens a dialog for editing the effect's parameters.\n\n" "Right clicking will bring up a context menu where you can change the order " "in which the effects are processed or delete an effect altogether." ) ); //move above vst effect view creation //setModel( _model ); } EffectView::~EffectView() { #ifdef LMMS_BUILD_LINUX delete m_subWindow; #else if( m_subWindow ) { // otherwise on win32 build VST GUI can get lost m_subWindow->hide(); } #endif } void EffectView::editControls() { if( m_subWindow ) { if( !m_subWindow->isVisible() ) { m_subWindow->show(); m_subWindow->raise(); effect()->controls()->setViewVisible( true ); } else { m_subWindow->hide(); effect()->controls()->setViewVisible( false ); } } } void EffectView::moveUp() { emit moveUp( this ); } void EffectView::moveDown() { emit moveDown( this ); } void EffectView::deletePlugin() { emit deletePlugin( this ); } void EffectView::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } void EffectView::closeEffects() { if( m_subWindow ) { m_subWindow->hide(); } effect()->controls()->setViewVisible( false ); } void EffectView::contextMenuEvent( QContextMenuEvent * ) { QPointer contextMenu = new captionMenu( model()->displayName(), this ); contextMenu->addAction( embed::getIconPixmap( "arp_up" ), tr( "Move &up" ), this, SLOT( moveUp() ) ); contextMenu->addAction( embed::getIconPixmap( "arp_down" ), tr( "Move &down" ), this, SLOT( moveDown() ) ); contextMenu->addSeparator(); contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "&Remove this plugin" ), this, SLOT( deletePlugin() ) ); contextMenu->addSeparator(); contextMenu->addHelpAction(); contextMenu->exec( QCursor::pos() ); delete contextMenu; } void EffectView::paintEvent( QPaintEvent * ) { QPainter p( this ); p.drawPixmap( 0, 0, m_bg ); QFont f = pointSizeF( font(), 7.5f ); f.setBold( true ); p.setFont( f ); p.setPen( palette().shadow().color() ); p.drawText( 6, 55, model()->displayName() ); p.setPen( palette().text().color() ); p.drawText( 5, 54, model()->displayName() ); } void EffectView::modelChanged() { m_bypass->setModel( &effect()->m_enabledModel ); m_wetDry->setModel( &effect()->m_wetDryModel ); m_autoQuit->setModel( &effect()->m_autoQuitModel ); m_gate->setModel( &effect()->m_gateModel ); } #include "moc_EffectView.cxx" lmms-1.1.3/src/gui/widgets/EnvelopeAndLfoView.cpp000066400000000000000000000463621247673406200217330ustar00rootroot00000000000000/* * EnvelopeAndLfoView.cpp - widget which is m_used by envelope/lfo/filter- * tab of instrument track window * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "EnvelopeAndLfoView.h" #include "EnvelopeAndLfoParameters.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "knob.h" #include "led_checkbox.h" #include "Mixer.h" #include "DataFile.h" #include "Oscillator.h" #include "pixmap_button.h" #include "string_pair_drag.h" #include "TempoSyncKnob.h" #include "text_float.h" #include "tooltip.h" #include "track.h" extern const float SECS_PER_ENV_SEGMENT; extern const float SECS_PER_LFO_OSCILLATION; const int ENV_GRAPH_X = 6; const int ENV_GRAPH_Y = 6; const int ENV_KNOBS_Y = 43; const int ENV_KNOBS_LBL_Y = ENV_KNOBS_Y+35; const int KNOB_X_SPACING = 32; const int PREDELAY_KNOB_X = 6; const int ATTACK_KNOB_X = PREDELAY_KNOB_X+KNOB_X_SPACING; const int HOLD_KNOB_X = ATTACK_KNOB_X+KNOB_X_SPACING; const int DECAY_KNOB_X = HOLD_KNOB_X+KNOB_X_SPACING; const int SUSTAIN_KNOB_X = DECAY_KNOB_X+KNOB_X_SPACING; const int RELEASE_KNOB_X = SUSTAIN_KNOB_X+KNOB_X_SPACING; const int AMOUNT_KNOB_X = RELEASE_KNOB_X+KNOB_X_SPACING; const int TIME_UNIT_WIDTH = 40; const int LFO_GRAPH_X = 6; const int LFO_GRAPH_Y = ENV_KNOBS_LBL_Y+14; const int LFO_KNOB_Y = LFO_GRAPH_Y-2; const int LFO_PREDELAY_KNOB_X = LFO_GRAPH_X + 100; const int LFO_ATTACK_KNOB_X = LFO_PREDELAY_KNOB_X+KNOB_X_SPACING; const int LFO_SPEED_KNOB_X = LFO_ATTACK_KNOB_X+KNOB_X_SPACING; const int LFO_AMOUNT_KNOB_X = LFO_SPEED_KNOB_X+KNOB_X_SPACING; const int LFO_SHAPES_X = LFO_GRAPH_X;//PREDELAY_KNOB_X; const int LFO_SHAPES_Y = LFO_GRAPH_Y + 50; QPixmap * EnvelopeAndLfoView::s_envGraph = NULL; QPixmap * EnvelopeAndLfoView::s_lfoGraph = NULL; EnvelopeAndLfoView::EnvelopeAndLfoView( QWidget * _parent ) : QWidget( _parent ), ModelView( NULL, this ), m_params( NULL ) { if( s_envGraph == NULL ) { s_envGraph = new QPixmap( embed::getIconPixmap( "envelope_graph" ) ); } if( s_lfoGraph == NULL ) { s_lfoGraph = new QPixmap( embed::getIconPixmap( "lfo_graph" ) ); } m_predelayKnob = new knob( knobBright_26, this ); m_predelayKnob->setLabel( tr( "DEL" ) ); m_predelayKnob->move( PREDELAY_KNOB_X, ENV_KNOBS_Y ); m_predelayKnob->setHintText( tr( "Predelay:" ) + " ", "" ); m_predelayKnob->setWhatsThis( tr( "Use this knob for setting predelay of the current " "envelope. The bigger this value the longer the time " "before start of actual envelope." ) ); m_attackKnob = new knob( knobBright_26, this ); m_attackKnob->setLabel( tr( "ATT" ) ); m_attackKnob->move( ATTACK_KNOB_X, ENV_KNOBS_Y ); m_attackKnob->setHintText( tr( "Attack:" )+" ", "" ); m_attackKnob->setWhatsThis( tr( "Use this knob for setting attack-time of the current " "envelope. The bigger this value the longer the " "envelope needs to increase to attack-level. " "Choose a small value for instruments like pianos " "and a big value for strings." ) ); m_holdKnob = new knob( knobBright_26, this ); m_holdKnob->setLabel( tr( "HOLD" ) ); m_holdKnob->move( HOLD_KNOB_X, ENV_KNOBS_Y ); m_holdKnob->setHintText( tr( "Hold:" ) + " ", "" ); m_holdKnob->setWhatsThis( tr( "Use this knob for setting hold-time of the current " "envelope. The bigger this value the longer the " "envelope holds attack-level before it begins to " "decrease to sustain-level." ) ); m_decayKnob = new knob( knobBright_26, this ); m_decayKnob->setLabel( tr( "DEC" ) ); m_decayKnob->move( DECAY_KNOB_X, ENV_KNOBS_Y ); m_decayKnob->setHintText( tr( "Decay:" ) + " ", "" ); m_decayKnob->setWhatsThis( tr( "Use this knob for setting decay-time of the current " "envelope. The bigger this value the longer the " "envelope needs to decrease from attack-level to " "sustain-level. Choose a small value for instruments " "like pianos." ) ); m_sustainKnob = new knob( knobBright_26, this ); m_sustainKnob->setLabel( tr( "SUST" ) ); m_sustainKnob->move( SUSTAIN_KNOB_X, ENV_KNOBS_Y ); m_sustainKnob->setHintText( tr( "Sustain:" ) + " ", "" ); m_sustainKnob->setWhatsThis( tr( "Use this knob for setting sustain-level of the current " "envelope. The bigger this value the higher the level " "on which the envelope stays before going down to " "zero." ) ); m_releaseKnob = new knob( knobBright_26, this ); m_releaseKnob->setLabel( tr( "REL" ) ); m_releaseKnob->move( RELEASE_KNOB_X, ENV_KNOBS_Y ); m_releaseKnob->setHintText( tr( "Release:" ) + " ", "" ); m_releaseKnob->setWhatsThis( tr( "Use this knob for setting release-time of the current " "envelope. The bigger this value the longer the " "envelope needs to decrease from sustain-level to " "zero. Choose a big value for soft instruments like " "strings." ) ); m_amountKnob = new knob( knobBright_26, this ); m_amountKnob->setLabel( tr( "AMT" ) ); m_amountKnob->move( AMOUNT_KNOB_X, ENV_GRAPH_Y ); m_amountKnob->setHintText( tr( "Modulation amount:" ) + " ", "" ); m_amountKnob->setWhatsThis( tr( "Use this knob for setting modulation amount of the " "current envelope. The bigger this value the more the " "according size (e.g. volume or cutoff-frequency) " "will be influenced by this envelope." ) ); m_lfoPredelayKnob = new knob( knobBright_26, this ); m_lfoPredelayKnob->setLabel( tr( "DEL" ) ); m_lfoPredelayKnob->move( LFO_PREDELAY_KNOB_X, LFO_KNOB_Y ); m_lfoPredelayKnob->setHintText( tr( "LFO predelay:" ) + " ", "" ); m_lfoPredelayKnob->setWhatsThis( tr( "Use this knob for setting predelay-time of the current " "LFO. The bigger this value the the time until the " "LFO starts to oscillate." ) ); m_lfoAttackKnob = new knob( knobBright_26, this ); m_lfoAttackKnob->setLabel( tr( "ATT" ) ); m_lfoAttackKnob->move( LFO_ATTACK_KNOB_X, LFO_KNOB_Y ); m_lfoAttackKnob->setHintText( tr( "LFO- attack:" ) + " ", "" ); m_lfoAttackKnob->setWhatsThis( tr( "Use this knob for setting attack-time of the current LFO. " "The bigger this value the longer the LFO needs to " "increase its amplitude to maximum." ) ); m_lfoSpeedKnob = new TempoSyncKnob( knobBright_26, this ); m_lfoSpeedKnob->setLabel( tr( "SPD" ) ); m_lfoSpeedKnob->move( LFO_SPEED_KNOB_X, LFO_KNOB_Y ); m_lfoSpeedKnob->setHintText( tr( "LFO speed:" ) + " ", "" ); m_lfoSpeedKnob->setWhatsThis( tr( "Use this knob for setting speed of the current LFO. The " "bigger this value the faster the LFO oscillates and " "the faster will be your effect." ) ); m_lfoAmountKnob = new knob( knobBright_26, this ); m_lfoAmountKnob->setLabel( tr( "AMT" ) ); m_lfoAmountKnob->move( LFO_AMOUNT_KNOB_X, LFO_KNOB_Y ); m_lfoAmountKnob->setHintText( tr( "Modulation amount:" ) + " ", "" ); m_lfoAmountKnob->setWhatsThis( tr( "Use this knob for setting modulation amount of the " "current LFO. The bigger this value the more the " "selected size (e.g. volume or cutoff-frequency) will " "be influenced by this LFO." ) ); pixmapButton * sin_lfo_btn = new pixmapButton( this, NULL ); sin_lfo_btn->move( LFO_SHAPES_X, LFO_SHAPES_Y ); sin_lfo_btn->setActiveGraphic( embed::getIconPixmap( "sin_wave_active" ) ); sin_lfo_btn->setInactiveGraphic( embed::getIconPixmap( "sin_wave_inactive" ) ); sin_lfo_btn->setWhatsThis( tr( "Click here for a sine-wave." ) ); pixmapButton * triangle_lfo_btn = new pixmapButton( this, NULL ); triangle_lfo_btn->move( LFO_SHAPES_X+15, LFO_SHAPES_Y ); triangle_lfo_btn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); triangle_lfo_btn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); triangle_lfo_btn->setWhatsThis( tr( "Click here for a triangle-wave." ) ); pixmapButton * saw_lfo_btn = new pixmapButton( this, NULL ); saw_lfo_btn->move( LFO_SHAPES_X+30, LFO_SHAPES_Y ); saw_lfo_btn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); saw_lfo_btn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); saw_lfo_btn->setWhatsThis( tr( "Click here for a saw-wave for current." ) ); pixmapButton * sqr_lfo_btn = new pixmapButton( this, NULL ); sqr_lfo_btn->move( LFO_SHAPES_X+45, LFO_SHAPES_Y ); sqr_lfo_btn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); sqr_lfo_btn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); sqr_lfo_btn->setWhatsThis( tr( "Click here for a square-wave." ) ); m_userLfoBtn = new pixmapButton( this, NULL ); m_userLfoBtn->move( LFO_SHAPES_X+75, LFO_SHAPES_Y ); m_userLfoBtn->setActiveGraphic( embed::getIconPixmap( "usr_wave_active" ) ); m_userLfoBtn->setInactiveGraphic( embed::getIconPixmap( "usr_wave_inactive" ) ); m_userLfoBtn->setWhatsThis( tr( "Click here for a user-defined wave. " "Afterwards, drag an according sample-" "file onto the LFO graph." ) ); connect( m_userLfoBtn, SIGNAL( toggled( bool ) ), this, SLOT( lfoUserWaveChanged() ) ); pixmapButton * random_lfo_btn = new pixmapButton( this, NULL ); random_lfo_btn->move( LFO_SHAPES_X+60, LFO_SHAPES_Y ); random_lfo_btn->setActiveGraphic( embed::getIconPixmap( "random_wave_active" ) ); random_lfo_btn->setInactiveGraphic( embed::getIconPixmap( "random_wave_inactive" ) ); random_lfo_btn->setWhatsThis( tr( "Click here for random wave." ) ); m_lfoWaveBtnGrp = new automatableButtonGroup( this ); m_lfoWaveBtnGrp->addButton( sin_lfo_btn ); m_lfoWaveBtnGrp->addButton( triangle_lfo_btn ); m_lfoWaveBtnGrp->addButton( saw_lfo_btn ); m_lfoWaveBtnGrp->addButton( sqr_lfo_btn ); m_lfoWaveBtnGrp->addButton( m_userLfoBtn ); m_lfoWaveBtnGrp->addButton( random_lfo_btn ); m_x100Cb = new ledCheckBox( tr( "FREQ x 100" ), this ); m_x100Cb->setFont( pointSizeF( m_x100Cb->font(), 6.5 ) ); m_x100Cb->move( LFO_PREDELAY_KNOB_X, LFO_GRAPH_Y + 36 ); m_x100Cb->setWhatsThis( tr( "Click here if the frequency of this LFO should be " "multiplied by 100." ) ); toolTip::add( m_x100Cb, tr( "multiply LFO-frequency by 100" ) ); m_controlEnvAmountCb = new ledCheckBox( tr( "MODULATE ENV-AMOUNT" ), this ); m_controlEnvAmountCb->move( LFO_PREDELAY_KNOB_X, LFO_GRAPH_Y + 54 ); m_controlEnvAmountCb->setFont( pointSizeF( m_controlEnvAmountCb->font(), 6.5 ) ); m_controlEnvAmountCb ->setWhatsThis( tr( "Click here to make the envelope-amount controlled by this " "LFO." ) ); toolTip::add( m_controlEnvAmountCb, tr( "control envelope-amount by this LFO" ) ); setAcceptDrops( true ); } EnvelopeAndLfoView::~EnvelopeAndLfoView() { delete m_lfoWaveBtnGrp; } void EnvelopeAndLfoView::modelChanged() { m_params = castModel(); m_predelayKnob->setModel( &m_params->m_predelayModel ); m_attackKnob->setModel( &m_params->m_attackModel ); m_holdKnob->setModel( &m_params->m_holdModel ); m_decayKnob->setModel( &m_params->m_decayModel ); m_sustainKnob->setModel( &m_params->m_sustainModel ); m_releaseKnob->setModel( &m_params->m_releaseModel ); m_amountKnob->setModel( &m_params->m_amountModel ); m_lfoPredelayKnob->setModel( &m_params->m_lfoPredelayModel ); m_lfoAttackKnob->setModel( &m_params->m_lfoAttackModel ); m_lfoSpeedKnob->setModel( &m_params->m_lfoSpeedModel ); m_lfoAmountKnob->setModel( &m_params->m_lfoAmountModel ); m_lfoWaveBtnGrp->setModel( &m_params->m_lfoWaveModel ); m_x100Cb->setModel( &m_params->m_x100Model ); m_controlEnvAmountCb->setModel( &m_params->m_controlEnvAmountModel ); } void EnvelopeAndLfoView::mousePressEvent( QMouseEvent * _me ) { if( _me->button() != Qt::LeftButton ) { return; } if( QRect( ENV_GRAPH_X, ENV_GRAPH_Y, s_envGraph->width(), s_envGraph->height() ).contains( _me->pos() ) == true ) { if( m_params->m_amountModel.value() < 1.0f ) { m_params->m_amountModel.setValue( 1.0f ); } else { m_params->m_amountModel.setValue( 0.0f ); } } else if( QRect( LFO_GRAPH_X, LFO_GRAPH_Y, s_lfoGraph->width(), s_lfoGraph->height() ).contains( _me->pos() ) == true ) { if( m_params->m_lfoAmountModel.value() < 1.0f ) { m_params->m_lfoAmountModel.setValue( 1.0f ); } else { m_params->m_lfoAmountModel.setValue( 0.0f ); } } } void EnvelopeAndLfoView::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, QString( "samplefile,tco_%1" ).arg( track::SampleTrack ) ); } void EnvelopeAndLfoView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == "samplefile" ) { m_params->m_userWave.setAudioFile( stringPairDrag::decodeValue( _de ) ); m_userLfoBtn->model()->setValue( true ); _de->accept(); } else if( type == QString( "tco_%1" ).arg( track::SampleTrack ) ) { DataFile dataFile( value.toUtf8() ); m_params->m_userWave.setAudioFile( dataFile.content().firstChild().toElement(). attribute( "src" ) ); m_userLfoBtn->model()->setValue( true ); _de->accept(); } } void EnvelopeAndLfoView::paintEvent( QPaintEvent * ) { QPainter p( this ); p.setRenderHint( QPainter::Antialiasing ); // draw envelope-graph p.drawPixmap( ENV_GRAPH_X, ENV_GRAPH_Y, *s_envGraph ); // draw LFO-graph p.drawPixmap( LFO_GRAPH_X, LFO_GRAPH_Y, *s_lfoGraph ); p.setFont( pointSize<8>( p.font() ) ); const float gray_amount = 1.0f - fabsf( m_amountKnob->value() ); p.setPen( QPen( QColor( static_cast( 96 * gray_amount ), static_cast( 255 - 159 * gray_amount ), static_cast( 128 - 32 * gray_amount ) ), 2 ) ); const QColor end_points_color( 0x99, 0xAF, 0xFF ); const QColor end_points_bg_color( 0, 0, 2 ); const int y_base = ENV_GRAPH_Y + s_envGraph->height() - 3; const int avail_height = s_envGraph->height() - 6; int x1 = static_cast( m_predelayKnob->value() * TIME_UNIT_WIDTH ); int x2 = x1 + static_cast( m_attackKnob->value() * TIME_UNIT_WIDTH ); int x3 = x2 + static_cast( m_holdKnob->value() * TIME_UNIT_WIDTH ); int x4 = x3 + static_cast( ( m_decayKnob->value() * ( 1 - m_sustainKnob->value() ) ) * TIME_UNIT_WIDTH ); int x5 = x4 + static_cast( m_releaseKnob->value() * TIME_UNIT_WIDTH ); if( x5 > 174 ) { x1 = ( x1 * 174 ) / x5; x2 = ( x2 * 174 ) / x5; x3 = ( x3 * 174 ) / x5; x4 = ( x4 * 174 ) / x5; x5 = ( x5 * 174 ) / x5; } x1 += ENV_GRAPH_X + 2; x2 += ENV_GRAPH_X + 2; x3 += ENV_GRAPH_X + 2; x4 += ENV_GRAPH_X + 2; x5 += ENV_GRAPH_X + 2; p.drawLine( x1, y_base, x2, y_base - avail_height ); p.fillRect( x1 - 1, y_base - 2, 4, 4, end_points_bg_color ); p.fillRect( x1, y_base - 1, 2, 2, end_points_color ); p.drawLine( x2, y_base - avail_height, x3, y_base - avail_height ); p.fillRect( x2 - 1, y_base - 2 - avail_height, 4, 4, end_points_bg_color ); p.fillRect( x2, y_base - 1 - avail_height, 2, 2, end_points_color ); p.drawLine( x3, y_base-avail_height, x4, static_cast( y_base - avail_height + ( 1 - m_sustainKnob->value() ) * avail_height ) ); p.fillRect( x3 - 1, y_base - 2 - avail_height, 4, 4, end_points_bg_color ); p.fillRect( x3, y_base - 1 - avail_height, 2, 2, end_points_color ); p.drawLine( x4, static_cast( y_base - avail_height + ( 1 - m_sustainKnob->value() ) * avail_height ), x5, y_base ); p.fillRect( x4 - 1, static_cast( y_base - avail_height + ( 1 - m_sustainKnob->value() ) * avail_height ) - 2, 4, 4, end_points_bg_color ); p.fillRect( x4, static_cast( y_base - avail_height + ( 1 - m_sustainKnob->value() ) * avail_height ) - 1, 2, 2, end_points_color ); p.fillRect( x5 - 1, y_base - 2, 4, 4, end_points_bg_color ); p.fillRect( x5, y_base - 1, 2, 2, end_points_color ); int LFO_GRAPH_W = s_lfoGraph->width() - 6; // substract border int LFO_GRAPH_H = s_lfoGraph->height() - 6; // substract border int graph_x_base = LFO_GRAPH_X + 3; int graph_y_base = LFO_GRAPH_Y + 3 + LFO_GRAPH_H / 2; const float frames_for_graph = SECS_PER_LFO_OSCILLATION * engine::mixer()->baseSampleRate() / 10; const float lfo_gray_amount = 1.0f - fabsf( m_lfoAmountKnob->value() ); p.setPen( QPen( QColor( static_cast( 96 * lfo_gray_amount ), static_cast( 255 - 159 * lfo_gray_amount ), static_cast( 128 - 32 * lfo_gray_amount ) ), 1.5 ) ); float osc_frames = m_params->m_lfoOscillationFrames; if( m_params->m_x100Model.value() ) { osc_frames *= 100.0f; } float old_y = 0; for( int x = 0; x <= LFO_GRAPH_W; ++x ) { float val = 0.0; float cur_sample = x * frames_for_graph / LFO_GRAPH_W; if( static_cast( cur_sample ) > m_params->m_lfoPredelayFrames ) { float phase = ( cur_sample -= m_params->m_lfoPredelayFrames ) / osc_frames; switch( m_params->m_lfoWaveModel.value() ) { case EnvelopeAndLfoParameters::SineWave: val = Oscillator::sinSample( phase ); break; case EnvelopeAndLfoParameters::TriangleWave: val = Oscillator::triangleSample( phase ); break; case EnvelopeAndLfoParameters::SawWave: val = Oscillator::sawSample( phase ); break; case EnvelopeAndLfoParameters::SquareWave: val = Oscillator::squareSample( phase ); break; case EnvelopeAndLfoParameters::RandomWave: if( x % (int)( 900 * m_lfoSpeedKnob->value() + 1 ) == 0 ) { m_randomGraph = Oscillator::noiseSample( 0.0f ); } val = m_randomGraph; break; case EnvelopeAndLfoParameters::UserDefinedWave: val = m_params->m_userWave. userWaveSample( phase ); break; } if( static_cast( cur_sample ) <= m_params->m_lfoAttackFrames ) { val *= cur_sample / m_params->m_lfoAttackFrames; } } float cur_y = -LFO_GRAPH_H / 2.0f * val; p.drawLine( QLineF( graph_x_base + x - 1, graph_y_base + old_y, graph_x_base + x, graph_y_base + cur_y ) ); old_y = cur_y; } p.setPen( QColor( 201, 201, 225 ) ); int ms_per_osc = static_cast( SECS_PER_LFO_OSCILLATION * m_lfoSpeedKnob->value() * 1000.0f ); p.drawText( LFO_GRAPH_X + 4, LFO_GRAPH_Y + s_lfoGraph->height() - 6, tr( "ms/LFO:" ) ); p.drawText( LFO_GRAPH_X + 52, LFO_GRAPH_Y + s_lfoGraph->height() - 6, QString::number( ms_per_osc ) ); } void EnvelopeAndLfoView::lfoUserWaveChanged() { if( m_params->m_lfoWaveModel.value() == EnvelopeAndLfoParameters::UserDefinedWave ) { if( m_params->m_userWave.frames() <= 1 ) { textFloat::displayMessage( tr( "Hint" ), tr( "Drag a sample from somewhere and drop " "it in this window." ), embed::getIconPixmap( "hint" ), 3000 ); } } } #include "moc_EnvelopeAndLfoView.cxx" lmms-1.1.3/src/gui/widgets/FxLine.cpp000066400000000000000000000155761247673406200174270ustar00rootroot00000000000000/* * FxLine.cpp - FX line widget * * Copyright (c) 2009 Andrew Kelley * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "FxLine.h" #include #include #include #include #include #include "FxMixer.h" #include "FxMixerView.h" #include "embed.h" #include "engine.h" #include "SendButtonIndicator.h" #include "gui_templates.h" #include "caption_menu.h" const int FxLine::FxLineHeight = 287; QPixmap * FxLine::s_sendBgArrow = NULL; QPixmap * FxLine::s_receiveBgArrow = NULL; FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : QWidget( _parent ), m_mv( _mv ), m_channelIndex( _channelIndex ) { if( ! s_sendBgArrow ) { s_sendBgArrow = new QPixmap( embed::getIconPixmap( "send_bg_arrow", 29, 56 ) ); } if( ! s_receiveBgArrow ) { s_receiveBgArrow = new QPixmap( embed::getIconPixmap( "receive_bg_arrow", 29, 56 ) ); } setFixedSize( 33, FxLineHeight ); setAttribute( Qt::WA_OpaquePaintEvent, true ); setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); // mixer sends knob m_sendKnob = new knob( knobBright_26, this, tr("Channel send amount") ); m_sendKnob->move( 3, 22 ); m_sendKnob->setVisible(false); // send button indicator m_sendBtn = new SendButtonIndicator( this, this, m_mv ); m_sendBtn->move( 2, 2 ); // channel number m_lcd = new LcdWidget( 2, this ); m_lcd->setValue( m_channelIndex ); m_lcd->move( 4, 58 ); m_lcd->setMarginWidth( 1 ); setWhatsThis( tr( "The FX channel receives input from one or more instrument tracks.\n " "It in turn can be routed to multiple other FX channels. LMMS automatically " "takes care of preventing infinite loops for you and doesn't allow making " "a connection that would result in an infinite loop.\n\n" "In order to route the channel to another channel, select the FX channel " "and click on the \"send\" button on the channel you want to send to. " "The knob under the send button controls the level of signal that is sent " "to the channel.\n\n" "You can remove and move FX channels in the context menu, which is accessed " "by right-clicking the FX channel.\n") ); } FxLine::~FxLine() { delete m_sendKnob; delete m_sendBtn; delete m_lcd; } void FxLine::setChannelIndex(int index) { m_channelIndex = index; m_lcd->setValue( m_channelIndex ); m_lcd->update(); } void FxLine::drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis, bool receiveFromThis ) { int width = fxLine->rect().width(); int height = fxLine->rect().height(); QColor sh_color = QApplication::palette().color( QPalette::Active, QPalette::Shadow ); QColor te_color = p->pen().brush().color(); QColor bt_color = QApplication::palette().color( QPalette::Active, QPalette::BrightText ); p->fillRect( fxLine->rect(), isActive ? fxLine->backgroundActive() : p->background() ); p->setPen( QColor( 255, 255, 255, isActive ? 100 : 50 ) ); p->drawRect( 1, 1, width-3, height-3 ); p->setPen( isActive ? sh_color : QColor( 0, 0, 0, 50 ) ); p->drawRect( 0, 0, width-1, height-1 ); // draw the mixer send background if( sendToThis ) { p->drawPixmap( 2, 0, 29, 56, *s_sendBgArrow ); } else if( receiveFromThis ) { p->drawPixmap( 2, 0, 29, 56, *s_receiveBgArrow ); } // draw the channel name p->rotate( -90 ); p->setFont( pointSizeF( fxLine->font(), 7.5f ) ); p->setPen( sh_color ); p->drawText( -146, 21, name ); p->setPen( isActive ? bt_color : te_color ); p->drawText( -145, 20, name ); } void FxLine::paintEvent( QPaintEvent * ) { FxMixer * mix = engine::fxMixer(); bool sendToThis = mix->channelSendModel( m_mv->currentFxLine()->m_channelIndex, m_channelIndex ) != NULL; bool receiveFromThis = mix->channelSendModel( m_channelIndex, m_mv->currentFxLine()->m_channelIndex ) != NULL; QPainter painter; painter.begin( this ); drawFxLine( &painter, this, mix->effectChannel( m_channelIndex )->m_name, m_mv->currentFxLine() == this, sendToThis, receiveFromThis ); painter.end(); } void FxLine::mousePressEvent( QMouseEvent * ) { m_mv->setCurrentFxLine( this ); } void FxLine::mouseDoubleClickEvent( QMouseEvent * ) { renameChannel(); } void FxLine::contextMenuEvent( QContextMenuEvent * ) { FxMixer * mix = engine::fxMixer(); QPointer contextMenu = new captionMenu( mix->effectChannel( m_channelIndex )->m_name, this ); if( m_channelIndex != 0 ) // no move-options in master { contextMenu->addAction( tr( "Move &left" ), this, SLOT( moveChannelLeft() ) ); contextMenu->addAction( tr( "Move &right" ), this, SLOT( moveChannelRight() ) ); } contextMenu->addAction( tr( "Rename &channel" ), this, SLOT( renameChannel() ) ); contextMenu->addSeparator(); if( m_channelIndex != 0 ) // no remove-option in master { contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "R&emove channel" ), this, SLOT( removeChannel() ) ); contextMenu->addSeparator(); } contextMenu->addHelpAction(); contextMenu->exec( QCursor::pos() ); delete contextMenu; } void FxLine::renameChannel() { bool ok; FxMixer * mix = engine::fxMixer(); QString new_name = QInputDialog::getText( this, FxMixerView::tr( "Rename FX channel" ), FxMixerView::tr( "Enter the new name for this " "FX channel" ), QLineEdit::Normal, mix->effectChannel(m_channelIndex)->m_name, &ok ); if( ok && !new_name.isEmpty() ) { mix->effectChannel( m_channelIndex )->m_name = new_name; update(); } } void FxLine::removeChannel() { FxMixerView * mix = engine::fxMixerView(); mix->deleteChannel( m_channelIndex ); } void FxLine::moveChannelLeft() { FxMixerView * mix = engine::fxMixerView(); mix->moveChannelLeft( m_channelIndex ); } void FxLine::moveChannelRight() { FxMixerView * mix = engine::fxMixerView(); mix->moveChannelRight( m_channelIndex ); } void FxLine::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } QBrush FxLine::backgroundActive() const { return m_backgroundActive; } void FxLine::setBackgroundActive( const QBrush & c ) { m_backgroundActive = c; } #include "moc_FxLine.cxx" lmms-1.1.3/src/gui/widgets/InstrumentFunctionViews.cpp000066400000000000000000000153131247673406200231230ustar00rootroot00000000000000/* * InstrumentFunctionViews.cpp - view for instrument-functions-tab * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "InstrumentFunctions.h" #include "InstrumentFunctionViews.h" #include "combobox.h" #include "embed.h" #include "engine.h" #include "group_box.h" #include "gui_templates.h" #include "knob.h" #include "pixmap_button.h" #include "TempoSyncKnob.h" #include "tooltip.h" InstrumentFunctionNoteStackingView::InstrumentFunctionNoteStackingView( InstrumentFunctionNoteStacking* cc, QWidget* parent ) : QWidget( parent ), ModelView( NULL, this ), m_cc( cc ), m_chordsGroupBox( new groupBox( tr( "STACKING" ) ) ), m_chordsComboBox( new comboBox() ), m_chordRangeKnob( new knob( knobBright_26 ) ) { QHBoxLayout* topLayout = new QHBoxLayout( this ); topLayout->setMargin( 0 ); topLayout->addWidget( m_chordsGroupBox ); QGridLayout* mainLayout = new QGridLayout( m_chordsGroupBox ); mainLayout->setContentsMargins( 8, 18, 8, 8 ); mainLayout->setColumnStretch( 0, 1 ); mainLayout->setHorizontalSpacing( 20 ); mainLayout->setVerticalSpacing( 1 ); QLabel* chordLabel = new QLabel( tr( "Chord:" ) ); chordLabel->setFont( pointSize<8>( chordLabel->font() ) ); m_chordRangeKnob->setLabel( tr( "RANGE" ) ); m_chordRangeKnob->setHintText( tr( "Chord range:" ) + " ", " " + tr( "octave(s)" ) ); m_chordRangeKnob->setWhatsThis( tr( "Use this knob for setting the chord range in octaves. " "The selected chord will be played within specified " "number of octaves." ) ); mainLayout->addWidget( chordLabel, 0, 0 ); mainLayout->addWidget( m_chordsComboBox, 1, 0 ); mainLayout->addWidget( m_chordRangeKnob, 0, 1, 2, 1, Qt::AlignHCenter ); } InstrumentFunctionNoteStackingView::~InstrumentFunctionNoteStackingView() { delete m_chordsGroupBox; } void InstrumentFunctionNoteStackingView::modelChanged() { m_cc = castModel(); m_chordsGroupBox->setModel( &m_cc->m_chordsEnabledModel ); m_chordsComboBox->setModel( &m_cc->m_chordsModel ); m_chordRangeKnob->setModel( &m_cc->m_chordRangeModel ); } InstrumentFunctionArpeggioView::InstrumentFunctionArpeggioView( InstrumentFunctionArpeggio* arp, QWidget* parent ) : QWidget( parent ), ModelView( NULL, this ), m_a( arp ), m_arpGroupBox( new groupBox( tr( "ARPEGGIO" ) ) ), m_arpComboBox( new comboBox() ), m_arpRangeKnob( new knob( knobBright_26 ) ), m_arpTimeKnob( new TempoSyncKnob( knobBright_26 ) ), m_arpGateKnob( new knob( knobBright_26 ) ), m_arpDirectionComboBox( new comboBox() ), m_arpModeComboBox( new comboBox() ) { QHBoxLayout* topLayout = new QHBoxLayout( this ); topLayout->setMargin( 0 ); topLayout->addWidget( m_arpGroupBox ); QGridLayout* mainLayout = new QGridLayout( m_arpGroupBox ); mainLayout->setContentsMargins( 8, 18, 8, 8 ); mainLayout->setColumnStretch( 0, 1 ); mainLayout->setHorizontalSpacing( 20 ); mainLayout->setVerticalSpacing( 1 ); m_arpGroupBox->setWhatsThis( tr( "An arpeggio is a method playing (especially plucked) " "instruments, which makes the music much livelier. " "The strings of such instruments (e.g. harps) are " "plucked like chords. The only difference is that " "this is done in a sequential order, so the notes are " "not played at the same time. Typical arpeggios are " "major or minor triads, but there are a lot of other " "possible chords, you can select." ) ); m_arpRangeKnob->setLabel( tr( "RANGE" ) ); m_arpRangeKnob->setHintText( tr( "Arpeggio range:" ) + " ", " " + tr( "octave(s)" ) ); m_arpRangeKnob->setWhatsThis( tr( "Use this knob for setting the arpeggio range in octaves. " "The selected arpeggio will be played within specified " "number of octaves." ) ); m_arpTimeKnob->setLabel( tr( "TIME" ) ); m_arpTimeKnob->setHintText( tr( "Arpeggio time:" ) + " ", " " + tr( "ms" ) ); m_arpTimeKnob->setWhatsThis( tr( "Use this knob for setting the arpeggio time in " "milliseconds. The arpeggio time specifies how long " "each arpeggio-tone should be played." ) ); m_arpGateKnob->setLabel( tr( "GATE" ) ); m_arpGateKnob->setHintText( tr( "Arpeggio gate:" ) + " ", tr( "%" ) ); m_arpGateKnob->setWhatsThis( tr( "Use this knob for setting the arpeggio gate. The " "arpeggio gate specifies the percent of a whole " "arpeggio-tone that should be played. With this you " "can make cool staccato arpeggios." ) ); QLabel* arpChordLabel = new QLabel( tr( "Chord:" ) ); arpChordLabel->setFont( pointSize<8>( arpChordLabel->font() ) ); QLabel* arpDirectionLabel = new QLabel( tr( "Direction:" ) ); arpDirectionLabel->setFont( pointSize<8>( arpDirectionLabel->font() ) ); QLabel* arpModeLabel = new QLabel( tr( "Mode:" ) ); arpModeLabel->setFont( pointSize<8>( arpModeLabel->font() ) ); mainLayout->addWidget( arpChordLabel, 0, 0 ); mainLayout->addWidget( m_arpComboBox, 1, 0 ); mainLayout->addWidget( arpDirectionLabel, 3, 0 ); mainLayout->addWidget( m_arpDirectionComboBox, 4, 0 ); mainLayout->addWidget( arpModeLabel, 6, 0 ); mainLayout->addWidget( m_arpModeComboBox, 7, 0 ); mainLayout->addWidget( m_arpRangeKnob, 0, 1, 2, 1, Qt::AlignHCenter ); mainLayout->addWidget( m_arpTimeKnob, 3, 1, 2, 1, Qt::AlignHCenter ); mainLayout->addWidget( m_arpGateKnob, 6, 1, 2, 1, Qt::AlignHCenter ); mainLayout->setRowMinimumHeight( 2, 10 ); mainLayout->setRowMinimumHeight( 5, 10 ); } InstrumentFunctionArpeggioView::~InstrumentFunctionArpeggioView() { delete m_arpGroupBox; } void InstrumentFunctionArpeggioView::modelChanged() { m_a = castModel(); m_arpGroupBox->setModel( &m_a->m_arpEnabledModel ); m_arpComboBox->setModel( &m_a->m_arpModel ); m_arpRangeKnob->setModel( &m_a->m_arpRangeModel ); m_arpTimeKnob->setModel( &m_a->m_arpTimeModel ); m_arpGateKnob->setModel( &m_a->m_arpGateModel ); m_arpDirectionComboBox->setModel( &m_a->m_arpDirectionModel ); m_arpModeComboBox->setModel( &m_a->m_arpModeModel ); } #include "moc_InstrumentFunctionViews.cxx" lmms-1.1.3/src/gui/widgets/InstrumentMidiIOView.cpp000066400000000000000000000163701247673406200222710ustar00rootroot00000000000000/* * InstrumentMidiIOView.cpp - MIDI-IO-View * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "InstrumentMidiIOView.h" #include "MidiPortMenu.h" #include "engine.h" #include "embed.h" #include "group_box.h" #include "gui_templates.h" #include "LcdSpinBox.h" #include "MidiClient.h" #include "Mixer.h" #include "tooltip.h" InstrumentMidiIOView::InstrumentMidiIOView( QWidget* parent ) : QWidget( parent ), ModelView( NULL, this ), m_rpBtn( NULL ), m_wpBtn( NULL ) { QVBoxLayout* layout = new QVBoxLayout( this ); layout->setMargin( 5 ); m_midiInputGroupBox = new groupBox( tr( "ENABLE MIDI INPUT" ) ); layout->addWidget( m_midiInputGroupBox ); QHBoxLayout* midiInputLayout = new QHBoxLayout( m_midiInputGroupBox ); midiInputLayout->setContentsMargins( 8, 18, 8, 8 ); midiInputLayout->setSpacing( 6 ); m_inputChannelSpinBox = new LcdSpinBox( 2, m_midiInputGroupBox ); m_inputChannelSpinBox->addTextForValue( 0, "--" ); m_inputChannelSpinBox->setLabel( tr( "CHANNEL" ) ); m_inputChannelSpinBox->setEnabled( false ); midiInputLayout->addWidget( m_inputChannelSpinBox ); m_fixedInputVelocitySpinBox = new LcdSpinBox( 3, m_midiInputGroupBox ); m_fixedInputVelocitySpinBox->setDisplayOffset( 1 ); m_fixedInputVelocitySpinBox->addTextForValue( 0, "---" ); m_fixedInputVelocitySpinBox->setLabel( tr( "VELOCITY" ) ); m_fixedInputVelocitySpinBox->setEnabled( false ); midiInputLayout->addWidget( m_fixedInputVelocitySpinBox ); midiInputLayout->addStretch(); connect( m_midiInputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_inputChannelSpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiInputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_fixedInputVelocitySpinBox, SLOT( setEnabled( bool ) ) ); m_midiOutputGroupBox = new groupBox( tr( "ENABLE MIDI OUTPUT" ) ); layout->addWidget( m_midiOutputGroupBox ); QHBoxLayout* midiOutputLayout = new QHBoxLayout( m_midiOutputGroupBox ); midiOutputLayout->setContentsMargins( 8, 18, 8, 8 ); midiOutputLayout->setSpacing( 6 ); m_outputChannelSpinBox = new LcdSpinBox( 2, m_midiOutputGroupBox ); m_outputChannelSpinBox->setLabel( tr( "CHANNEL" ) ); m_outputChannelSpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_outputChannelSpinBox ); m_fixedOutputVelocitySpinBox = new LcdSpinBox( 3, m_midiOutputGroupBox ); m_fixedOutputVelocitySpinBox->setDisplayOffset( 1 ); m_fixedOutputVelocitySpinBox->addTextForValue( 0, "---" ); m_fixedOutputVelocitySpinBox->setLabel( tr( "VELOCITY" ) ); m_fixedOutputVelocitySpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_fixedOutputVelocitySpinBox ); m_outputProgramSpinBox = new LcdSpinBox( 3, m_midiOutputGroupBox ); m_outputProgramSpinBox->setLabel( tr( "PROGRAM" ) ); m_outputProgramSpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_outputProgramSpinBox ); m_fixedOutputNoteSpinBox = new LcdSpinBox( 3, m_midiOutputGroupBox ); m_fixedOutputNoteSpinBox->setDisplayOffset( 1 ); m_fixedOutputNoteSpinBox->addTextForValue( 0, "---" ); m_fixedOutputNoteSpinBox->setLabel( tr( "NOTE" ) ); m_fixedOutputNoteSpinBox->setEnabled( false ); midiOutputLayout->addWidget( m_fixedOutputNoteSpinBox ); midiOutputLayout->addStretch(); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_outputChannelSpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_fixedOutputVelocitySpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_outputProgramSpinBox, SLOT( setEnabled( bool ) ) ); connect( m_midiOutputGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_fixedOutputNoteSpinBox, SLOT( setEnabled( bool ) ) ); if( !engine::mixer()->midiClient()->isRaw() ) { m_rpBtn = new QToolButton; m_rpBtn->setMinimumSize( 32, 32 ); m_rpBtn->setText( tr( "MIDI devices to receive MIDI events from" ) ); m_rpBtn->setIcon( embed::getIconPixmap( "piano" ) ); m_rpBtn->setPopupMode( QToolButton::InstantPopup ); midiInputLayout->insertSpacing( 0, 4 ); midiInputLayout->insertWidget( 0, m_rpBtn ); m_wpBtn = new QToolButton; m_wpBtn->setMinimumSize( 32, 32 ); m_wpBtn->setText( tr( "MIDI devices to send MIDI events to" ) ); m_wpBtn->setIcon( embed::getIconPixmap( "piano" ) ); m_wpBtn->setPopupMode( QToolButton::InstantPopup ); midiOutputLayout->insertSpacing( 0, 4 ); midiOutputLayout->insertWidget( 0, m_wpBtn ); } #define PROVIDE_CUSTOM_BASE_VELOCITY_UI #ifdef PROVIDE_CUSTOM_BASE_VELOCITY_UI groupBox* baseVelocityGroupBox = new groupBox( tr( "CUSTOM BASE VELOCITY" ) ); layout->addWidget( baseVelocityGroupBox ); QVBoxLayout* baseVelocityLayout = new QVBoxLayout( baseVelocityGroupBox ); baseVelocityLayout->setContentsMargins( 8, 18, 8, 8 ); baseVelocityLayout->setSpacing( 6 ); QLabel* baseVelocityHelp = new QLabel( tr( "Specify the velocity normalization base for MIDI-based instruments at note volume 100%" ) ); baseVelocityHelp->setWordWrap( true ); baseVelocityHelp->setFont( pointSize<8>( baseVelocityHelp->font() ) ); baseVelocityLayout->addWidget( baseVelocityHelp ); m_baseVelocitySpinBox = new LcdSpinBox( 3, baseVelocityGroupBox ); m_baseVelocitySpinBox->setLabel( tr( "BASE VELOCITY" ) ); m_baseVelocitySpinBox->setEnabled( false ); baseVelocityLayout->addWidget( m_baseVelocitySpinBox ); connect( baseVelocityGroupBox->ledButton(), SIGNAL( toggled( bool ) ), m_baseVelocitySpinBox, SLOT( setEnabled( bool ) ) ); #endif layout->addStretch(); } InstrumentMidiIOView::~InstrumentMidiIOView() { } void InstrumentMidiIOView::modelChanged() { MidiPort * mp = castModel(); m_midiInputGroupBox->setModel( &mp->m_readableModel ); m_inputChannelSpinBox->setModel( &mp->m_inputChannelModel ); m_fixedInputVelocitySpinBox->setModel( &mp->m_fixedInputVelocityModel ); m_midiOutputGroupBox->setModel( &mp->m_writableModel ); m_outputChannelSpinBox->setModel( &mp->m_outputChannelModel ); m_fixedOutputVelocitySpinBox->setModel( &mp->m_fixedOutputVelocityModel ); m_fixedOutputNoteSpinBox->setModel( &mp->m_fixedOutputNoteModel ); m_outputProgramSpinBox->setModel( &mp->m_outputProgramModel ); #ifdef PROVIDE_CUSTOM_BASE_VELOCITY_UI m_baseVelocitySpinBox->setModel( &mp->m_baseVelocityModel ); #endif if( m_rpBtn ) { m_rpBtn->setMenu( mp->m_readablePortsMenu ); } if( m_wpBtn ) { m_wpBtn->setMenu( mp->m_writablePortsMenu ); } } #include "moc_InstrumentMidiIOView.cxx" lmms-1.1.3/src/gui/widgets/InstrumentSoundShapingView.cpp000066400000000000000000000132001247673406200235460ustar00rootroot00000000000000/* * InstrumentSoundShapingView.cpp - view for InstrumentSoundShaping class * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "InstrumentSoundShapingView.h" #include "EnvelopeAndLfoParameters.h" #include "EnvelopeAndLfoView.h" #include "combobox.h" #include "group_box.h" #include "gui_templates.h" #include "knob.h" #include "tab_widget.h" const int TARGETS_TABWIDGET_X = 4; const int TARGETS_TABWIDGET_Y = 5; const int TARGETS_TABWIDGET_WIDTH = 242; const int TARGETS_TABWIDGET_HEIGTH = 175; const int FILTER_GROUPBOX_X = TARGETS_TABWIDGET_X; const int FILTER_GROUPBOX_Y = TARGETS_TABWIDGET_Y+TARGETS_TABWIDGET_HEIGTH+5; const int FILTER_GROUPBOX_WIDTH = TARGETS_TABWIDGET_WIDTH; const int FILTER_GROUPBOX_HEIGHT = 245-FILTER_GROUPBOX_Y; InstrumentSoundShapingView::InstrumentSoundShapingView( QWidget * _parent ) : QWidget( _parent ), ModelView( NULL, this ), m_ss( NULL ) { m_targetsTabWidget = new tabWidget( tr( "TARGET" ), this ); m_targetsTabWidget->setGeometry( TARGETS_TABWIDGET_X, TARGETS_TABWIDGET_Y, TARGETS_TABWIDGET_WIDTH, TARGETS_TABWIDGET_HEIGTH ); m_targetsTabWidget->setWhatsThis( tr( "These tabs contain envelopes. They're very important for " "modifying a sound, in that they are almost " "always necessary for substractive synthesis. For " "example if you have a volume envelope, you can set " "when the sound should have a specific volume. " "If you want to create some soft strings then your " "sound has to fade in and out very softly. This can be " "done by setting large attack and release times. " "It's the same for other envelope targets like " "panning, cutoff frequency for the used filter and so on. " "Just monkey around with it! You can really make cool " "sounds out of a saw-wave with just some " "envelopes...!" ) ); for( int i = 0; i < InstrumentSoundShaping::NumTargets; ++i ) { m_envLfoViews[i] = new EnvelopeAndLfoView( m_targetsTabWidget ); m_targetsTabWidget->addTab( m_envLfoViews[i], tr( __targetNames[i][0].toUtf8().constData() ) ); } m_filterGroupBox = new groupBox( tr( "FILTER" ), this ); m_filterGroupBox->setGeometry( FILTER_GROUPBOX_X, FILTER_GROUPBOX_Y, FILTER_GROUPBOX_WIDTH, FILTER_GROUPBOX_HEIGHT ); m_filterComboBox = new comboBox( m_filterGroupBox ); m_filterComboBox->setGeometry( 14, 22, 120, 22 ); m_filterComboBox->setFont( pointSize<8>( m_filterComboBox->font() ) ); m_filterComboBox->setWhatsThis( tr( "Here you can select the built-in filter you want to use " "for this instrument-track. Filters are very important " "for changing the characteristics of a sound." ) ); m_filterCutKnob = new knob( knobBright_26, m_filterGroupBox ); m_filterCutKnob->setLabel( tr( "FREQ" ) ); m_filterCutKnob->move( 140, 18 ); m_filterCutKnob->setHintText( tr( "cutoff frequency:" ) + " ", " " + tr( "Hz" ) ); m_filterCutKnob->setWhatsThis( tr( "Use this knob for setting the cutoff frequency for the " "selected filter. The cutoff frequency specifies the " "frequency for cutting the signal by a filter. For " "example a lowpass-filter cuts all frequencies above " "the cutoff frequency. A highpass-filter cuts all " "frequencies below cutoff frequency, and so on..." ) ); m_filterResKnob = new knob( knobBright_26, m_filterGroupBox ); m_filterResKnob->setLabel( tr( "RESO" ) ); m_filterResKnob->move( 196, 18 ); m_filterResKnob->setHintText( tr( "Resonance:" ) + " ", "" ); m_filterResKnob->setWhatsThis( tr( "Use this knob for setting Q/Resonance for the selected " "filter. Q/Resonance tells the filter how much it " "should amplify frequencies near Cutoff-frequency." ) ); m_singleStreamInfoLabel = new QLabel( tr( "Envelopes, LFOs and filters are not supported by the current instrument." ), this ); m_singleStreamInfoLabel->setWordWrap( true ); m_singleStreamInfoLabel->setFont( pointSize<8>( m_singleStreamInfoLabel->font() ) ); m_singleStreamInfoLabel->setGeometry( TARGETS_TABWIDGET_X, TARGETS_TABWIDGET_Y, TARGETS_TABWIDGET_WIDTH, TARGETS_TABWIDGET_HEIGTH ); } InstrumentSoundShapingView::~InstrumentSoundShapingView() { delete m_targetsTabWidget; } void InstrumentSoundShapingView::setFunctionsHidden( bool hidden ) { m_targetsTabWidget->setHidden( hidden ); m_filterGroupBox->setHidden( hidden ); m_singleStreamInfoLabel->setHidden( !hidden ); } void InstrumentSoundShapingView::modelChanged() { m_ss = castModel(); m_filterGroupBox->setModel( &m_ss->m_filterEnabledModel ); m_filterComboBox->setModel( &m_ss->m_filterModel ); m_filterCutKnob->setModel( &m_ss->m_filterCutModel ); m_filterResKnob->setModel( &m_ss->m_filterResModel ); for( int i = 0; i < InstrumentSoundShaping::NumTargets; ++i ) { m_envLfoViews[i]->setModel( m_ss->m_envLfoParameters[i] ); } } #include "moc_InstrumentSoundShapingView.cxx" lmms-1.1.3/src/gui/widgets/LadspaControlView.cpp000066400000000000000000000056401247673406200216310ustar00rootroot00000000000000/* * LadspaControlView.cpp - widget for controlling a LADSPA port * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "LadspaControl.h" #include "LadspaControlView.h" #include "LadspaBase.h" #include "led_checkbox.h" #include "TempoSyncKnob.h" #include "tooltip.h" LadspaControlView::LadspaControlView( QWidget * _parent, LadspaControl * _ctl ) : QWidget( _parent ), ModelView( _ctl, this ), m_ctl( _ctl ) { QHBoxLayout * layout = new QHBoxLayout( this ); layout->setMargin( 0 ); layout->setSpacing( 0 ); ledCheckBox * link = NULL; if( m_ctl->m_link ) { link = new ledCheckBox( "", this ); link->setModel( &m_ctl->m_linkEnabledModel ); toolTip::add( link, tr( "Link channels" ) ); layout->addWidget( link ); } knob * knb = NULL; switch( m_ctl->port()->data_type ) { case TOGGLED: { ledCheckBox * toggle = new ledCheckBox( m_ctl->port()->name, this, QString::null, ledCheckBox::Green ); toggle->setModel( m_ctl->toggledModel() ); layout->addWidget( toggle ); if( link != NULL ) { setFixedSize( link->width() + toggle->width(), toggle->height() ); } else { setFixedSize( toggle->width(), toggle->height() ); } break; } case INTEGER: case FLOATING: knb = new knob( knobBright_26, this, m_ctl->port()->name ); break; case TIME: knb = new TempoSyncKnob( knobBright_26, this, m_ctl->port()->name ); break; default: break; } if( knb != NULL ) { if( m_ctl->port()->data_type != TIME ) { knb->setModel( m_ctl->knobModel() ); } else { knb->setModel( m_ctl->tempoSyncKnobModel() ); } knb->setLabel( m_ctl->port()->name ); knb->setHintText( tr( "Value:" ) + " ", "" ); knb->setWhatsThis( tr( "Sorry, no help available." ) ); layout->addWidget( knb ); if( link != NULL ) { setFixedSize( link->width() + knb->width(), knb->height() ); } else { setFixedSize( knb->width(), knb->height() ); } } } LadspaControlView::~LadspaControlView() { } #include "moc_LadspaControlView.cxx" lmms-1.1.3/src/gui/widgets/LcdSpinBox.cpp000066400000000000000000000103751247673406200202370ustar00rootroot00000000000000/* * lcd_spinbox.cpp - class LcdSpinBox, an improved QLCDNumber * * Copyright (c) 2005-2014 Tobias Doerffel * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include "LcdSpinBox.h" #include "caption_menu.h" #include "engine.h" #include "embed.h" #include "gui_templates.h" #include "templates.h" #include "MainWindow.h" LcdSpinBox::LcdSpinBox( int numDigits, QWidget* parent, const QString& name ) : LcdWidget( numDigits, parent, name ), IntModelView( new IntModel( 0, 0, 0, NULL, name, true ), this ), m_mouseMoving( false ), m_origMousePos(), m_displayOffset( 0 ) { } LcdSpinBox::LcdSpinBox( int numDigits, const QString& style, QWidget* parent, const QString& name ) : LcdWidget( numDigits, parent, name ), IntModelView( new IntModel( 0, 0, 0, NULL, name, true ), this ), m_mouseMoving( false ), m_origMousePos(), m_displayOffset( 0 ) { } LcdSpinBox::~LcdSpinBox() { } void LcdSpinBox::update() { setValue( model()->value() + m_displayOffset ); QWidget::update(); } void LcdSpinBox::contextMenuEvent( QContextMenuEvent* event ) { // for the case, the user clicked right while pressing left mouse- // button, the context-menu appears while mouse-cursor is still hidden // and it isn't shown again until user does something which causes // an QApplication::restoreOverrideCursor()-call... mouseReleaseEvent( NULL ); captionMenu contextMenu( model()->displayName() ); addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); } void LcdSpinBox::mousePressEvent( QMouseEvent* event ) { if( event->button() == Qt::LeftButton && ! ( event->modifiers() & Qt::ControlModifier ) && event->y() < cellHeight() + 2 ) { m_mouseMoving = true; m_origMousePos = event->globalPos(); QApplication::setOverrideCursor( Qt::BlankCursor ); AutomatableModel *thisModel = model(); if( thisModel ) { thisModel->addJournalCheckPoint(); thisModel->saveJournallingState( false ); } } else { IntModelView::mousePressEvent( event ); } } void LcdSpinBox::mouseMoveEvent( QMouseEvent* event ) { if( m_mouseMoving ) { int dy = event->globalY() - m_origMousePos.y(); if( engine::mainWindow()->isShiftPressed() ) dy = qBound( -4, dy/4, 4 ); if( dy > 1 || dy < -1 ) { model()->setInitValue( model()->value() - dy / 2 * model()->step() ); emit manualChange(); QCursor::setPos( m_origMousePos ); } } } void LcdSpinBox::mouseReleaseEvent( QMouseEvent* ) { if( m_mouseMoving ) { model()->restoreJournallingState(); QCursor::setPos( m_origMousePos ); QApplication::restoreOverrideCursor(); m_mouseMoving = false; } } void LcdSpinBox::wheelEvent( QWheelEvent * _we ) { _we->accept(); model()->setInitValue( model()->value() + ( ( _we->delta() > 0 ) ? 1 : -1 ) * model()->step() ); emit manualChange(); } void LcdSpinBox::mouseDoubleClickEvent( QMouseEvent * ) { enterValue(); } void LcdSpinBox::enterValue() { bool ok; int new_val; new_val = QInputDialog::getInt( this, windowTitle(), tr( "Please enter a new value between %1 and %2:" ). arg( model()->minValue() ). arg( model()->maxValue() ), model()->value(), model()->minValue(), model()->maxValue(), 4, &ok ); if( ok ) { model()->setValue( new_val ); } } #include "moc_LcdSpinBox.cxx" lmms-1.1.3/src/gui/widgets/LcdWidget.cpp000066400000000000000000000127211247673406200200750ustar00rootroot00000000000000/* * LcdWidget.cpp - a widget for displaying numbers in LCD style * * Copyright (c) 2005-2014 Tobias Doerffel * Copyright (c) 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include "LcdWidget.h" #include "engine.h" #include "embed.h" #include "gui_templates.h" #include "MainWindow.h" //! @todo: in C++11, we can use delegating ctors #define DEFAULT_LCDWIDGET_INITIALIZER_LIST \ QWidget( parent ), \ m_label() LcdWidget::LcdWidget( QWidget* parent, const QString& name ) : DEFAULT_LCDWIDGET_INITIALIZER_LIST, m_numDigits( 1 ) { initUi( name ); } LcdWidget::LcdWidget( int numDigits, QWidget* parent, const QString& name ) : DEFAULT_LCDWIDGET_INITIALIZER_LIST, m_numDigits( numDigits ) { initUi( name ); } LcdWidget::LcdWidget( int numDigits, const QString& style, QWidget* parent, const QString& name ) : DEFAULT_LCDWIDGET_INITIALIZER_LIST, m_numDigits( numDigits ) { initUi( name, style ); } #undef DEFAULT_LCDWIDGET_INITIALIZER_LIST LcdWidget::~LcdWidget() { delete m_lcdPixmap; } void LcdWidget::setValue( int value ) { QString s = m_textForValue[value]; if( s.isEmpty() ) { s = QString::number( value ); // TODO: if pad == true /* while( (int) s.length() < m_numDigits ) { s = "0" + s; } */ } m_display = s; update(); } void LcdWidget::paintEvent( QPaintEvent* ) { QPainter p( this ); QSize cellSize( m_cellWidth, m_cellHeight ); QRect cellRect( 0, 0, m_cellWidth, m_cellHeight ); int margin = 1; // QStyle::PM_DefaultFrameWidth; //int lcdWidth = m_cellWidth * m_numDigits + (margin*m_marginWidth)*2; // p.translate( width() / 2 - lcdWidth / 2, 0 ); p.save(); p.translate( margin, margin ); // Left Margin p.drawPixmap( cellRect, *m_lcdPixmap, QRect( QPoint( charsPerPixmap*m_cellWidth, isEnabled()?0:m_cellHeight ), cellSize ) ); p.translate( m_marginWidth, 0 ); // Padding for( int i=0; i < m_numDigits - m_display.length(); i++ ) { p.drawPixmap( cellRect, *m_lcdPixmap, QRect( QPoint( 10 * m_cellWidth, isEnabled()?0:m_cellHeight) , cellSize ) ); p.translate( m_cellWidth, 0 ); } // Digits for( int i=0; i < m_display.length(); i++ ) { int val = m_display[i].digitValue(); if( val < 0 ) { if( m_display[i] == '-' ) val = 11; else val = 10; } p.drawPixmap( cellRect, *m_lcdPixmap, QRect( QPoint( val*m_cellWidth, isEnabled()?0:m_cellHeight ), cellSize ) ); p.translate( m_cellWidth, 0 ); } // Right Margin p.drawPixmap( QRect( 0, 0, m_marginWidth-1, m_cellHeight ), *m_lcdPixmap, QRect( charsPerPixmap*m_cellWidth, isEnabled()?0:m_cellHeight, m_cellWidth / 2, m_cellHeight ) ); p.restore(); // Border QStyleOptionFrame opt; opt.initFrom( this ); opt.state = QStyle::State_Sunken; opt.rect = QRect( 0, 0, m_cellWidth * m_numDigits + (margin+m_marginWidth)*2 - 1, m_cellHeight + (margin*2) ); style()->drawPrimitive( QStyle::PE_Frame, &opt, &p, this ); p.resetTransform(); // Label if( !m_label.isEmpty() ) { p.setFont( pointSizeF( p.font(), 6.5 ) ); p.setPen( QColor( 64, 64, 64 ) ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2 + 1, height(), m_label ); p.setPen( QColor( 255, 255, 255 ) ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2, height() - 1, m_label ); } } void LcdWidget::setLabel( const QString & _txt ) { m_label = _txt; updateSize(); } void LcdWidget::setMarginWidth( int _width ) { m_marginWidth = _width; updateSize(); } void LcdWidget::updateSize() { int margin = 1; if (m_label.isEmpty()) { setFixedSize( m_cellWidth * m_numDigits + 2*(margin+m_marginWidth), m_cellHeight + (2*margin) ); } else { setFixedSize( qMax( m_cellWidth * m_numDigits + 2*(margin+m_marginWidth), QFontMetrics( pointSizeF( font(), 6.5 ) ).width( m_label ) ), m_cellHeight + (2*margin) + 9 ); } update(); } void LcdWidget::initUi(const QString& name , const QString& style) { setEnabled( true ); setWindowTitle( name ); // We should make a factory for these or something. //m_lcdPixmap = new QPixmap( embed::getIconPixmap( QString( "lcd_" + style ).toUtf8().constData() ) ); //m_lcdPixmap = new QPixmap( embed::getIconPixmap( "lcd_19green" ) ); // TODO!! m_lcdPixmap = new QPixmap( embed::getIconPixmap( QString( "lcd_" + style ).toUtf8().constData() ) ); m_cellWidth = m_lcdPixmap->size().width() / LcdWidget::charsPerPixmap; m_cellHeight = m_lcdPixmap->size().height() / 2; m_marginWidth = m_cellWidth / 2; updateSize(); } #include "moc_LcdWidget.cxx" lmms-1.1.3/src/gui/widgets/MeterDialog.cpp000066400000000000000000000055731247673406200204320ustar00rootroot00000000000000/* * MeterDialog.cpp - dialog for entering meter settings * * Copyright (c) 2008-2009 Tobias Doerffel * Copyright (c) 2006-2008 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "MeterDialog.h" #include "MeterModel.h" #include "embed.h" #include "gui_templates.h" #include "LcdSpinBox.h" MeterDialog::MeterDialog( QWidget * _parent, bool _simple ) : QWidget( _parent ), ModelView( NULL, this ) { QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setSpacing( 0 ); vlayout->setMargin( 0 ); QWidget * num = new QWidget( this ); QHBoxLayout * num_layout = new QHBoxLayout( num ); num_layout->setSpacing( 0 ); num_layout->setMargin( 0 ); m_numerator = new LcdSpinBox( 2, num, tr( "Meter Numerator" ) ); num_layout->addWidget( m_numerator ); if( !_simple ) { QLabel * num_label = new QLabel( tr( "Meter Numerator" ), num ); QFont f = num_label->font(); num_label->setFont( pointSize<7>( f ) ); num_layout->addSpacing( 5 ); num_layout->addWidget( num_label ); } num_layout->addStretch(); QWidget * den = new QWidget( this ); QHBoxLayout * den_layout = new QHBoxLayout( den ); den_layout->setSpacing( 0 ); den_layout->setMargin( 0 ); m_denominator = new LcdSpinBox( 2, den, tr( "Meter Denominator" ) ); if( _simple ) { m_denominator->setLabel( tr( "TIME SIG" ) ); } den_layout->addWidget( m_denominator ); if( !_simple ) { QLabel * den_label = new QLabel( tr( "Meter Denominator" ), den ); QFont f = den_label->font(); den_label->setFont( pointSize<7>( f ) ); den_layout->addSpacing( 5 ); den_layout->addWidget( den_label ); } den_layout->addStretch(); vlayout->addSpacing( _simple ? 1 : 3 ); vlayout->addWidget( num ); vlayout->addSpacing( 2 ); vlayout->addWidget( den ); vlayout->addStretch(); } MeterDialog::~MeterDialog() { } void MeterDialog::modelChanged() { MeterModel * mm = castModel(); m_numerator->setModel( &mm->numeratorModel() ); m_denominator->setModel( &mm->denominatorModel() ); } #include "moc_MeterDialog.cxx" lmms-1.1.3/src/gui/widgets/MidiPortMenu.cpp000066400000000000000000000045551247673406200206110ustar00rootroot00000000000000/* * MidiPortMenu.cpp - a menu for subscribing a MidiPort to several external * MIDI ports * * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "MidiPortMenu.h" #include "gui_templates.h" MidiPortMenu::MidiPortMenu( MidiPort::Modes _mode ) : ModelView( NULL, this ), m_mode( _mode ) { setFont( pointSize<9>( font() ) ); connect( this, SIGNAL( triggered( QAction * ) ), this, SLOT( activatedPort( QAction * ) ) ); } MidiPortMenu::~MidiPortMenu() { } void MidiPortMenu::modelChanged() { MidiPort * mp = castModel(); if( m_mode == MidiPort::Input ) { connect( mp, SIGNAL( readablePortsChanged() ), this, SLOT( updateMenu() ) ); } else if( m_mode == MidiPort::Output ) { connect( mp, SIGNAL( writablePortsChanged() ), this, SLOT( updateMenu() ) ); } updateMenu(); } void MidiPortMenu::activatedPort( QAction * _item ) { if( m_mode == MidiPort::Input ) { castModel()->subscribeReadablePort( _item->text(), _item->isChecked() ); } else if( m_mode == MidiPort::Output ) { castModel()->subscribeWritablePort( _item->text(), _item->isChecked() ); } } void MidiPortMenu::updateMenu() { MidiPort * mp = castModel(); const MidiPort::Map & map = ( m_mode == MidiPort::Input ) ? mp->readablePorts() : mp->writablePorts(); clear(); for( MidiPort::Map::ConstIterator it = map.begin(); it != map.end(); ++it ) { QAction * a = addAction( it.key() ); a->setCheckable( true ); a->setChecked( it.value() ); } } #include "moc_MidiPortMenu.cxx" lmms-1.1.3/src/gui/widgets/SendButtonIndicator.cpp000066400000000000000000000030331247673406200221450ustar00rootroot00000000000000#include "SendButtonIndicator.h" #include "engine.h" #include "FxMixer.h" #include "Model.h" QPixmap * SendButtonIndicator::s_qpmOff = NULL; QPixmap * SendButtonIndicator::s_qpmOn = NULL; SendButtonIndicator:: SendButtonIndicator( QWidget * _parent, FxLine * _owner, FxMixerView * _mv) : QLabel( _parent ), m_parent( _owner ), m_mv( _mv ) { if( ! s_qpmOff ) { s_qpmOff = new QPixmap( embed::getIconPixmap( "mixer_send_off", 29, 20 ) ); } if( ! s_qpmOn ) { s_qpmOn = new QPixmap( embed::getIconPixmap( "mixer_send_on", 29, 20 ) ); } // don't do any initializing yet, because the FxMixerView and FxLine // that were passed to this constructor are not done with their constructors // yet. setPixmap( *s_qpmOff ); } void SendButtonIndicator::mousePressEvent( QMouseEvent * e ) { FxMixer * mix = engine::fxMixer(); int from = m_mv->currentFxLine()->channelIndex(); int to = m_parent->channelIndex(); FloatModel * sendModel = mix->channelSendModel(from, to); if( sendModel == NULL ) { // not sending. create a mixer send. mix->createChannelSend( from, to ); } else { // sending. delete the mixer send. mix->deleteChannelSend( from, to ); } m_mv->updateFxLine(m_parent->channelIndex()); updateLightStatus(); } FloatModel * SendButtonIndicator::getSendModel() { FxMixer * mix = engine::fxMixer(); return mix->channelSendModel( m_mv->currentFxLine()->channelIndex(), m_parent->channelIndex()); } void SendButtonIndicator::updateLightStatus() { setPixmap( getSendModel() == NULL ? *s_qpmOff : *s_qpmOn ); } lmms-1.1.3/src/gui/widgets/SideBar.cpp000066400000000000000000000067711247673406200175500ustar00rootroot00000000000000/* * SideBar.cpp - side-bar in LMMS' MainWindow * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "SideBar.h" #include "SideBarWidget.h" #include "tooltip.h" // internal helper class allowing to create QToolButtons with // vertical orientation class SideBarButton : public QToolButton { public: SideBarButton( Qt::Orientation _orientation, QWidget * _parent ) : QToolButton( _parent ), m_orientation( _orientation ) { } virtual ~SideBarButton() { } Qt::Orientation orientation() const { return m_orientation; } virtual QSize sizeHint() const { QSize s = QToolButton::sizeHint(); s.setWidth( s.width() + 8 ); if( orientation() == Qt::Horizontal ) { return s; } return QSize( s.height(), s.width() ); } protected: virtual void paintEvent( QPaintEvent * ) { QStylePainter p( this ); QStyleOptionToolButton opt; initStyleOption( &opt ); if( orientation() == Qt::Vertical ) { const QSize s = sizeHint(); p.rotate( 270 ); p.translate( -s.height(), 0 ); opt.rect = QRect( 0, 0, s.height(), s.width() ); } p.drawComplexControl( QStyle::CC_ToolButton, opt ); } private: Qt::Orientation m_orientation; } ; SideBar::SideBar( Qt::Orientation _orientation, QWidget * _parent ) : QToolBar( _parent ), m_btnGroup( this ) { setOrientation( _orientation ); setIconSize( QSize( 16, 16 ) ); m_btnGroup.setExclusive( false ); connect( &m_btnGroup, SIGNAL( buttonClicked( QAbstractButton * ) ), this, SLOT( toggleButton( QAbstractButton * ) ) ); } SideBar::~SideBar() { } void SideBar::appendTab( SideBarWidget * _sbw ) { SideBarButton * btn = new SideBarButton( orientation(), this ); btn->setText( _sbw->title() ); btn->setIcon( _sbw->icon() ); btn->setCheckable( true ); m_widgets[btn] = _sbw; m_btnGroup.addButton( btn ); addWidget( btn ); _sbw->hide(); _sbw->setMinimumWidth( 200 ); toolTip::add( btn, _sbw->title() ); } void SideBar::toggleButton( QAbstractButton * _btn ) { QToolButton * toolButton = NULL; QWidget * activeWidget = NULL; for( ButtonMap::Iterator it = m_widgets.begin(); it != m_widgets.end(); ++it ) { QToolButton * curBtn = it.key(); if( curBtn != _btn ) { curBtn->setChecked( false ); curBtn->setToolButtonStyle( Qt::ToolButtonIconOnly ); } else { toolButton = it.key(); activeWidget = it.value(); } if( it.value() ) { it.value()->hide(); } } if( toolButton && activeWidget ) { activeWidget->setVisible( _btn->isChecked() ); toolButton->setToolButtonStyle( _btn->isChecked() ? Qt::ToolButtonTextBesideIcon : Qt::ToolButtonIconOnly ); } } #include "moc_SideBar.cxx" lmms-1.1.3/src/gui/widgets/SideBarWidget.cpp000066400000000000000000000042171247673406200207050ustar00rootroot00000000000000/* * SideBarWidget.cpp - implementation of base-widget for side-bar * * Copyright (c) 2004-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "SideBarWidget.h" #include "gui_templates.h" SideBarWidget::SideBarWidget( const QString & _title, const QPixmap & _icon, QWidget * _parent ) : QWidget( _parent ), m_title( _title ), m_icon( _icon ) { m_contents = new QWidget( this ); m_layout = new QVBoxLayout( m_contents ); m_layout->setSpacing( 5 ); m_layout->setMargin( 0 ); } SideBarWidget::~SideBarWidget() { } void SideBarWidget::paintEvent( QPaintEvent * ) { const int TITLE_FONT_HEIGHT = 13; QPainter p( this ); p.fillRect( 0, 0, width(), 27, palette().highlight().color() ); QFont f = p.font(); f.setBold( true ); p.setFont( pointSize( f ) ); p.setPen( palette().highlightedText().color() ); const int tx = m_icon.width()+4; const int ty = 2+TITLE_FONT_HEIGHT; p.drawText( tx, ty, m_title ); p.drawLine( tx, ty+4, width()-4, ty+4 ); p.drawPixmap( 2, 2, m_icon.transformed( QTransform().rotate( -90 ) ) ); } void SideBarWidget::resizeEvent( QResizeEvent * ) { const int MARGIN = 6; m_contents->setGeometry( MARGIN, 40 + MARGIN, width() - MARGIN * 2, height() - MARGIN * 2 - 40 ); } #include "moc_SideBarWidget.cxx" lmms-1.1.3/src/gui/widgets/TimeDisplayWidget.cpp000066400000000000000000000062451247673406200216230ustar00rootroot00000000000000/* * TimeDisplayWidget.cpp - widget for displaying current playback time * * Copyright (c) 2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "TimeDisplayWidget.h" #include "MainWindow.h" #include "engine.h" #include "tooltip.h" #include "song.h" TimeDisplayWidget::TimeDisplayWidget() : QWidget(), m_displayMode( MinutesSeconds ), m_spinBoxesLayout( this ), m_majorLCD( 3, this ), m_minorLCD( 3, this ), m_milliSecondsLCD( 3, this ) { m_spinBoxesLayout.setSpacing( 0 ); m_spinBoxesLayout.setMargin( 0 ); m_spinBoxesLayout.addWidget( &m_majorLCD ); m_spinBoxesLayout.addWidget( &m_minorLCD ); m_spinBoxesLayout.addWidget( &m_milliSecondsLCD ); setMaximumHeight( 32 ); toolTip::add( this, tr( "click to change time units" ) ); // update labels of LCD spinboxes setDisplayMode( m_displayMode ); connect( engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateTime() ) ); } TimeDisplayWidget::~TimeDisplayWidget() { } void TimeDisplayWidget::setDisplayMode( DisplayMode displayMode ) { m_displayMode = displayMode; switch( m_displayMode ) { case MinutesSeconds: m_majorLCD.setLabel( "MIN" ); m_minorLCD.setLabel( "SEC" ); m_milliSecondsLCD.setLabel( "MSEC" ); break; case BarsTicks: m_majorLCD.setLabel( "BAR" ); m_minorLCD.setLabel( "BEAT" ); m_milliSecondsLCD.setLabel( "TICK" ); break; default: break; } } void TimeDisplayWidget::updateTime() { song* s = engine::getSong(); switch( m_displayMode ) { case MinutesSeconds: m_majorLCD.setValue( s->getMilliseconds() / 60000 ); m_minorLCD.setValue( ( s->getMilliseconds() / 1000 ) % 60 ); m_milliSecondsLCD.setValue( s->getMilliseconds() % 1000 ); break; case BarsTicks: m_majorLCD.setValue( s->getTacts() + 1 ); m_minorLCD.setValue( ( s->getTicks() % s->ticksPerTact() ) / ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) +1 ); ; m_milliSecondsLCD.setValue( ( s->getTicks() % s->ticksPerTact() ) % ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) ); break; default: break; } } void TimeDisplayWidget::mousePressEvent( QMouseEvent* mouseEvent ) { if( mouseEvent->button() == Qt::LeftButton ) { if( m_displayMode == MinutesSeconds ) { setDisplayMode( BarsTicks ); } else { setDisplayMode( MinutesSeconds ); } } } #include "moc_TimeDisplayWidget.cxx" lmms-1.1.3/src/gui/widgets/automatable_button.cpp000066400000000000000000000126641247673406200221260ustar00rootroot00000000000000/* * automatable_button.cpp - implementation of class automatableButton and * automatableButtonGroup * * Copyright (c) 2006-2011 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "automatable_button.h" #include #include #include "caption_menu.h" #include "engine.h" #include "embed.h" #include "MainWindow.h" #include "string_pair_drag.h" automatableButton::automatableButton( QWidget * _parent, const QString & _name ) : QPushButton( _parent ), BoolModelView( new BoolModel( false, NULL, _name, true ), this ), m_group( NULL ) { setWindowTitle( _name ); doConnections(); setFocusPolicy( Qt::NoFocus ); } automatableButton::~automatableButton() { if( m_group != NULL ) { m_group->removeButton( this ); } } void automatableButton::modelChanged() { if( QPushButton::isChecked() != model()->value() ) { QPushButton::setChecked( model()->value() ); } } void automatableButton::update() { if( QPushButton::isChecked() != model()->value() ) { QPushButton::setChecked( model()->value() ); } QPushButton::update(); } void automatableButton::contextMenuEvent( QContextMenuEvent * _me ) { // for the case, the user clicked right while pressing left mouse- // button, the context-menu appears while mouse-cursor is still hidden // and it isn't shown again until user does something which causes // an QApplication::restoreOverrideCursor()-call... mouseReleaseEvent( NULL ); if ( m_group != NULL ) { captionMenu contextMenu( m_group->model()->displayName() ); m_group->addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); } else { captionMenu contextMenu( model()->displayName() ); addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); } } void automatableButton::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && ! ( _me->modifiers() & Qt::ControlModifier ) ) { // User simply clicked, toggle if needed if( isCheckable() ) { toggle(); } _me->accept(); } else { // Ctrl-clicked, need to prepare drag-drop if( m_group ) { // A group, we must get process it instead AutomatableModelView* groupView = (AutomatableModelView*)m_group; new stringPairDrag( "automatable_model", QString::number( groupView->modelUntyped()->id() ), QPixmap(), widget() ); // TODO: ^^ Maybe use a predefined icon instead of the button they happened to select _me->accept(); } else { // Otherwise, drag the standalone button AutomatableModelView::mousePressEvent( _me ); QPushButton::mousePressEvent( _me ); } } } void automatableButton::mouseReleaseEvent( QMouseEvent * _me ) { if( _me && _me->button() == Qt::LeftButton ) { emit clicked(); } } void automatableButton::toggle() { if( isCheckable() && m_group != NULL ) { if( model()->value() == false ) { m_group->activateButton( this ); } } else { model()->setValue( !model()->value() ); } } automatableButtonGroup::automatableButtonGroup( QWidget * _parent, const QString & _name ) : QWidget( _parent ), IntModelView( new IntModel( 0, 0, 0, NULL, _name, true ), this ) { hide(); setWindowTitle( _name ); } automatableButtonGroup::~automatableButtonGroup() { for( QList::iterator it = m_buttons.begin(); it != m_buttons.end(); ++it ) { ( *it )->m_group = NULL; } } void automatableButtonGroup::addButton( automatableButton * _btn ) { _btn->m_group = this; _btn->setCheckable( true ); _btn->model()->setValue( false ); // disable journalling as we're recording changes of states of // button-group members on our own _btn->model()->setJournalling( false ); m_buttons.push_back( _btn ); model()->setRange( 0, m_buttons.size() - 1 ); updateButtons(); } void automatableButtonGroup::removeButton( automatableButton * _btn ) { m_buttons.erase( qFind( m_buttons.begin(), m_buttons.end(), _btn ) ); _btn->m_group = NULL; } void automatableButtonGroup::activateButton( automatableButton * _btn ) { if( _btn != m_buttons[model()->value()] && m_buttons.indexOf( _btn ) != -1 ) { model()->setValue( m_buttons.indexOf( _btn ) ); foreach( automatableButton * btn, m_buttons ) { btn->update(); } } } void automatableButtonGroup::modelChanged() { connect( model(), SIGNAL( dataChanged() ), this, SLOT( updateButtons() ) ); IntModelView::modelChanged(); updateButtons(); } void automatableButtonGroup::updateButtons() { model()->setRange( 0, m_buttons.size() - 1 ); int i = 0; foreach( automatableButton * btn, m_buttons ) { btn->model()->setValue( i == model()->value() ); ++i; } } #include "moc_automatable_button.cxx" lmms-1.1.3/src/gui/widgets/automatable_slider.cpp000066400000000000000000000057501247673406200220730ustar00rootroot00000000000000/* * automatable_slider.cpp - implementation of class automatableSlider * * Copyright (c) 2006-2007 Javier Serrano Polo * Copyright (c) 2007-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "automatable_slider.h" #include #include #include "caption_menu.h" #include "embed.h" #include "engine.h" #include "MainWindow.h" automatableSlider::automatableSlider( QWidget * _parent, const QString & _name ) : QSlider( _parent ), IntModelView( new IntModel( 0, 0, 0, NULL, _name, true ), this ), m_showStatus( false ) { setWindowTitle( _name ); connect( this, SIGNAL( valueChanged( int ) ), this, SLOT( changeValue( int ) ) ); connect( this, SIGNAL( sliderMoved( int ) ), this, SLOT( moveSlider( int ) ) ); } automatableSlider::~automatableSlider() { } void automatableSlider::contextMenuEvent( QContextMenuEvent * _me ) { captionMenu contextMenu( model()->displayName() ); addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); } void automatableSlider::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && ! ( _me->modifiers() & Qt::ControlModifier ) ) { m_showStatus = true; QSlider::mousePressEvent( _me ); } else { IntModelView::mousePressEvent( _me ); } } void automatableSlider::mouseReleaseEvent( QMouseEvent * _me ) { m_showStatus = false; QSlider::mouseReleaseEvent( _me ); } void automatableSlider::wheelEvent( QWheelEvent * _me ) { bool old_status = m_showStatus; m_showStatus = true; QSlider::wheelEvent( _me ); m_showStatus = old_status; } void automatableSlider::modelChanged() { QSlider::setRange( model()->minValue(), model()->maxValue() ); updateSlider(); connect( model(), SIGNAL( dataChanged() ), this, SLOT( updateSlider() ) ); } void automatableSlider::changeValue( int _value ) { model()->setValue( _value ); emit logicValueChanged( model()->value() ); } void automatableSlider::moveSlider( int _value ) { model()->setValue( _value ); emit logicSliderMoved( model()->value() ); } void automatableSlider::updateSlider() { QSlider::setValue( model()->value() ); } #include "moc_automatable_slider.cxx" lmms-1.1.3/src/gui/widgets/caption_menu.cpp000066400000000000000000000031351247673406200207070ustar00rootroot00000000000000/* * caption_menu.cpp - context menu with a caption * * Copyright (c) 2007 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "caption_menu.h" #include "embed.h" captionMenu::captionMenu( const QString & _title, QWidget * _parent ) : QMenu( _title, _parent ) { QAction * caption = addAction( _title ); caption->setEnabled( false ); } captionMenu::~captionMenu() { } void captionMenu::addHelpAction() { QWidget* parent = (QWidget*) this->parent(); if (parent == NULL) return; if (! parent->whatsThis().isEmpty()) { addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), parent, SLOT( displayHelp() ) ); } else { QAction* helpAction = addAction( embed::getIconPixmap("help"), tr("Help (not available)") ); helpAction->setDisabled(true); } } #include "moc_caption_menu.cxx" lmms-1.1.3/src/gui/widgets/combobox.cpp000066400000000000000000000132371247673406200200420ustar00rootroot00000000000000/* * combobox.cpp - implementation of LMMS combobox * * Copyright (c) 2006-2014 Tobias Doerffel * Copyright (c) 2008-2009 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "combobox.h" #include #include #include #include #include #include #include #include "caption_menu.h" #include "engine.h" #include "embed.h" #include "gui_templates.h" #include "MainWindow.h" QPixmap * comboBox::s_background = NULL; QPixmap * comboBox::s_arrow = NULL; QPixmap * comboBox::s_arrowSelected = NULL; const int CB_ARROW_BTN_WIDTH = 20; comboBox::comboBox( QWidget * _parent, const QString & _name ) : QWidget( _parent ), IntModelView( new ComboBoxModel( NULL, QString::null, true ), this ), m_menu( this ), m_pressed( false ) { if( s_background == NULL ) { s_background = new QPixmap( embed::getIconPixmap( "combobox_bg" ) ); } if( s_arrow == NULL ) { s_arrow = new QPixmap( embed::getIconPixmap( "combobox_arrow" ) ); } if( s_arrowSelected == NULL ) { s_arrowSelected = new QPixmap( embed::getIconPixmap( "combobox_arrow_selected" ) ); } setFont( pointSize<9>( font() ) ); m_menu.setFont( pointSize<8>( m_menu.font() ) ); connect( &m_menu, SIGNAL( triggered( QAction * ) ), this, SLOT( setItem( QAction * ) ) ); setWindowTitle( _name ); doConnections(); } comboBox::~comboBox() { } QSize comboBox::sizeHint() const { int maxTextWidth = 0; for( int i = 0; model() && i < model()->size(); ++i ) { int w = fontMetrics().width( model()->itemText( i ) ); if( w > maxTextWidth ) { maxTextWidth = w; } } return QSize( 32 + maxTextWidth, 22 ); } void comboBox::contextMenuEvent( QContextMenuEvent * event ) { if( model() == NULL || event->x() <= width() - CB_ARROW_BTN_WIDTH ) { QWidget::contextMenuEvent( event ); return; } captionMenu contextMenu( model()->displayName() ); addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); } void comboBox::mousePressEvent( QMouseEvent* event ) { if( model() == NULL ) { return; } if( event->button() == Qt::LeftButton && ! ( event->modifiers() & Qt::ControlModifier ) ) { if( event->x() > width() - CB_ARROW_BTN_WIDTH ) { m_pressed = true; update(); m_menu.clear(); for( int i = 0; i < model()->size(); ++i ) { QAction * a = m_menu.addAction( model()->itemPixmap( i ) ? model()->itemPixmap( i )->pixmap() : QPixmap(), model()->itemText( i ) ); a->setData( i ); } QPoint gpos = mapToGlobal( QPoint( 0, height() ) ); if( gpos.y() + m_menu.sizeHint().height() < qApp->desktop()->height() ) { m_menu.exec( gpos ); } else { m_menu.exec( mapToGlobal( QPoint( width(), 0 ) ) ); } m_pressed = false; update(); } else if( event->button() == Qt::LeftButton ) { model()->setInitValue( model()->value() + 1 ); update(); } } else if( event->button() == Qt::RightButton ) { model()->setInitValue( model()->value() - 1 ); update(); } else { IntModelView::mousePressEvent( event ); } } void comboBox::paintEvent( QPaintEvent * _pe ) { QPainter p( this ); p.fillRect( 2, 2, width()-2, height()-4, *s_background ); QColor shadow = palette().shadow().color(); QColor highlight = palette().highlight().color(); shadow.setAlpha( 124 ); highlight.setAlpha( 124 ); // button-separator p.setPen( shadow ); p.drawLine( width() - CB_ARROW_BTN_WIDTH - 1, 1, width() - CB_ARROW_BTN_WIDTH - 1, height() - 3 ); p.setPen( highlight ); p.drawLine( width() - CB_ARROW_BTN_WIDTH, 1, width() - CB_ARROW_BTN_WIDTH, height() - 3 ); // Border QStyleOptionFrame opt; opt.initFrom( this ); opt.state = 0; style()->drawPrimitive( QStyle::PE_Frame, &opt, &p, this ); QPixmap * arrow = m_pressed ? s_arrowSelected : s_arrow; p.drawPixmap( width() - CB_ARROW_BTN_WIDTH + 5, 4, *arrow ); if( model() && model()->size() > 0 ) { p.setFont( font() ); p.setClipRect( QRect( 4, 2, width() - CB_ARROW_BTN_WIDTH - 8, height() - 2 ) ); QPixmap pm = model()->currentData() ? model()->currentData()->pixmap() : QPixmap(); int tx = 5; if( !pm.isNull() ) { if( pm.height() > 16 ) { pm = pm.scaledToHeight( 16, Qt::SmoothTransformation ); } p.drawPixmap( tx, 3, pm ); tx += pm.width() + 3; } const int y = ( height()+p.fontMetrics().height() ) /2; p.setPen( QColor( 64, 64, 64 ) ); p.drawText( tx+1, y-3, model()->currentText() ); p.setPen( QColor( 224, 224, 224 ) ); p.drawText( tx, y-4, model()->currentText() ); } } void comboBox::wheelEvent( QWheelEvent* event ) { if( model() ) { model()->setInitValue( model()->value() + ( ( event->delta() < 0 ) ? 1 : -1 ) ); update(); event->accept(); } } void comboBox::setItem( QAction* item ) { if( model() ) { model()->setInitValue( item->data().toInt() ); } } #include "moc_combobox.cxx" lmms-1.1.3/src/gui/widgets/cpuload_widget.cpp000066400000000000000000000050171247673406200212210ustar00rootroot00000000000000/* * cpuload_widget.cpp - widget for displaying CPU-load (partly based on * Hydrogen's CPU-load-widget) * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "cpuload_widget.h" #include "embed.h" #include "engine.h" #include "Mixer.h" cpuloadWidget::cpuloadWidget( QWidget * _parent ) : QWidget( _parent ), m_currentLoad( 0 ), m_temp(), m_background( embed::getIconPixmap( "cpuload_bg" ) ), m_leds( embed::getIconPixmap( "cpuload_leds" ) ), m_changed( true ), m_updateTimer() { setAttribute( Qt::WA_OpaquePaintEvent, true ); setFixedSize( m_background.width(), m_background.height() ); m_temp = QPixmap( width(), height() ); connect( &m_updateTimer, SIGNAL( timeout() ), this, SLOT( updateCpuLoad() ) ); m_updateTimer.start( 100 ); // update cpu-load at 10 fps } cpuloadWidget::~cpuloadWidget() { } void cpuloadWidget::paintEvent( QPaintEvent * ) { if( m_changed == true ) { m_changed = false; m_temp.fill( QColor(0,0,0,0) ); QPainter p( &m_temp ); p.drawPixmap( 0, 0, m_background ); // as load-indicator consists of small 2-pixel wide leds with // 1 pixel spacing, we have to make sure, only whole leds are // shown which we achieve by the following formula int w = ( m_leds.width() * m_currentLoad / 300 ) * 3; if( w > 0 ) { p.drawPixmap( 23, 3, m_leds, 0, 0, w, m_leds.height() ); } } QPainter p( this ); p.drawPixmap( 0, 0, m_temp ); } void cpuloadWidget::updateCpuLoad() { // smooth load-values a bit int new_load = ( m_currentLoad + engine::mixer()->cpuLoad() ) / 2; if( new_load != m_currentLoad ) { m_currentLoad = new_load; m_changed = true; update(); } } #include "moc_cpuload_widget.cxx" lmms-1.1.3/src/gui/widgets/fade_button.cpp000066400000000000000000000052371247673406200205250ustar00rootroot00000000000000/* * fade_button.cpp - implementation of fade-button * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "embed.h" #include "fade_button.h" #include "update_event.h" const float FadeDuration = 300; fadeButton::fadeButton( const QColor & _normal_color, const QColor & _activated_color, QWidget * _parent ) : QAbstractButton( _parent ), m_stateTimer(), m_normalColor( _normal_color ), m_activatedColor( _activated_color ) { setAttribute( Qt::WA_OpaquePaintEvent, true ); setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); setFocusPolicy( Qt::NoFocus ); } fadeButton::~fadeButton() { } void fadeButton::activate() { m_stateTimer.restart(); signalUpdate(); } void fadeButton::customEvent( QEvent * ) { update(); } void fadeButton::paintEvent( QPaintEvent * _pe ) { QColor col = m_normalColor; if( m_stateTimer.elapsed() < FadeDuration ) { const float state = 1 - m_stateTimer.elapsed() / FadeDuration; const int r = (int)( m_normalColor.red() * ( 1.0f - state ) + m_activatedColor.red() * state ); const int g = (int)( m_normalColor.green() * ( 1.0f - state ) + m_activatedColor.green() * state ); const int b = (int)( m_normalColor.blue() * ( 1.0f - state ) + m_activatedColor.blue() * state ); col.setRgb( r, g, b ); QTimer::singleShot( 20, this, SLOT( update() ) ); } QPainter p( this ); p.fillRect( rect(), col ); int w = rect().right(); int h = rect().bottom(); p.setPen( m_normalColor.darker(130) ); p.drawLine( w, 1, w, h ); p.drawLine( 1, h, w, h ); p.setPen( m_normalColor.lighter(130) ); p.drawLine( 0, 0, 0, h-1 ); p.drawLine( 0, 0, w, 0 ); } void fadeButton::signalUpdate() { QApplication::postEvent( this, new updateEvent() ); } #include "moc_fade_button.cxx" lmms-1.1.3/src/gui/widgets/fader.cpp000066400000000000000000000172771247673406200173230ustar00rootroot00000000000000/* * fader.cpp - fader-widget used in mixer - partly taken from Hydrogen * * Copyright (c) 2008-2012 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ /* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * * http://www.hydrogen-music.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include "fader.h" #include "embed.h" #include "engine.h" #include "caption_menu.h" #include "config_mgr.h" #include "text_float.h" #include "MainWindow.h" textFloat * fader::s_textFloat = NULL; QPixmap * fader::s_back = NULL; QPixmap * fader::s_leds = NULL; QPixmap * fader::s_knob = NULL; fader::fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : QWidget( _parent ), FloatModelView( _model, this ), m_model( _model ), m_fPeakValue_L( 0.0 ), m_fPeakValue_R( 0.0 ), m_persistentPeak_L( 0.0 ), m_persistentPeak_R( 0.0 ), m_fMinPeak( 0.01f ), m_fMaxPeak( 1.1 ), m_moveStartPoint( -1 ), m_startValue( 0 ), m_peakGreen( 0, 0, 0 ), m_peakRed( 0, 0, 0 ) { if( s_textFloat == NULL ) { s_textFloat = new textFloat; } if( ! s_back ) { s_back = new QPixmap( embed::getIconPixmap( "fader_background" ) ); } if( ! s_leds ) { s_leds = new QPixmap( embed::getIconPixmap( "fader_leds" ) ); } if( ! s_knob ) { s_knob = new QPixmap( embed::getIconPixmap( "fader_knob" ) ); } setWindowTitle( _name ); setAttribute( Qt::WA_OpaquePaintEvent, false ); setMinimumSize( 23, 116 ); setMaximumSize( 23, 116); resize( 23, 116 ); setModel( _model ); } fader::~fader() { } void fader::contextMenuEvent( QContextMenuEvent * _ev ) { captionMenu contextMenu( windowTitle() ); addDefaultActions( &contextMenu ); contextMenu.exec( QCursor::pos() ); _ev->accept(); } void fader::mouseMoveEvent( QMouseEvent *mouseEvent ) { if( m_moveStartPoint >= 0 ) { int dy = m_moveStartPoint - mouseEvent->globalY(); float delta = dy * ( m_model->maxValue() - m_model->minValue() ) / (float) ( height() - ( *s_knob ).height() ); model()->setValue( m_startValue + delta ); updateTextFloat(); } } void fader::mousePressEvent( QMouseEvent* mouseEvent ) { if( mouseEvent->button() == Qt::LeftButton && ! ( mouseEvent->modifiers() & Qt::ControlModifier ) ) { if( mouseEvent->y() >= knobPosY() - ( *s_knob ).height() && mouseEvent->y() < knobPosY() ) { updateTextFloat(); s_textFloat->show(); m_moveStartPoint = mouseEvent->globalY(); m_startValue = model()->value(); mouseEvent->accept(); } else { m_moveStartPoint = -1; } } else { AutomatableModelView::mousePressEvent( mouseEvent ); } } void fader::mouseDoubleClickEvent( QMouseEvent* mouseEvent ) { bool ok; // TODO: dbV handling int newValue = QInputDialog::getInteger( this, windowTitle(), tr( "Please enter a new value between %1 and %2:" ). arg( model()->minValue()*100 ). arg( model()->maxValue()*100 ), model()->value()*100, model()->minValue()*100, model()->maxValue()*100, 1, &ok ); if( ok ) { model()->setValue( newValue / 100.0f ); } } void fader::mouseReleaseEvent( QMouseEvent * _me ) { s_textFloat->hide(); } void fader::wheelEvent ( QWheelEvent *ev ) { ev->accept(); if ( ev->delta() > 0 ) { m_model->incValue( 1 ); } else { m_model->incValue( -1 ); } updateTextFloat(); s_textFloat->setVisibilityTimeOut( 1000 ); } /// /// Set peak value (0.0 .. 1.0) /// void fader::setPeak( float fPeak, float &targetPeak, float &persistentPeak, QTime &lastPeakTime ) { if( fPeak < m_fMinPeak ) { fPeak = m_fMinPeak; } else if( fPeak > m_fMaxPeak ) { fPeak = m_fMaxPeak; } if( targetPeak != fPeak) { targetPeak = fPeak; if( targetPeak >= persistentPeak ) { persistentPeak = targetPeak; lastPeakTime.restart(); } update(); } if( persistentPeak > 0 && lastPeakTime.elapsed() > 1500 ) { persistentPeak = qMax( 0, persistentPeak-0.05 ); update(); } } void fader::setPeak_L( float fPeak ) { setPeak( fPeak, m_fPeakValue_L, m_persistentPeak_L, m_lastPeakTime_L ); } void fader::setPeak_R( float fPeak ) { setPeak( fPeak, m_fPeakValue_R, m_persistentPeak_R, m_lastPeakTime_R ); } // update tooltip showing value and adjust position while changing fader value void fader::updateTextFloat() { if( configManager::inst()->value( "app", "displaydbv" ).toInt() ) { s_textFloat->setText( QString("Volume: %1 dBV"). arg( 20.0 * log10( model()->value() ), 3, 'f', 2 ) ); } else { s_textFloat->setText( QString("Volume: %1 %").arg( m_model->value() * 100 ) ); } s_textFloat->moveGlobal( this, QPoint( width() - ( *s_knob ).width() - 5, knobPosY() - 46 ) ); } inline int fader::calculateDisplayPeak( float fPeak ) { int peak = (int)( 116 - ( fPeak / ( m_fMaxPeak - m_fMinPeak ) ) * 116.0 ); if ( peak > 116 ) return 116; else return peak; } void fader::paintEvent( QPaintEvent * ev) { QPainter painter(this); // background painter.drawPixmap( ev->rect(), *s_back, ev->rect() ); // peak leds //float fRange = abs( m_fMaxPeak ) + abs( m_fMinPeak ); int peak_L = calculateDisplayPeak( m_fPeakValue_L - m_fMinPeak ); int persistentPeak_L = qMax( 3, calculateDisplayPeak( m_persistentPeak_L - m_fMinPeak ) ); painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), *s_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); if( m_persistentPeak_L > 0.05 ) { painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), ( m_persistentPeak_L < 1.0 ) ? peakGreen() : peakRed() ); } int peak_R = calculateDisplayPeak( m_fPeakValue_R - m_fMinPeak ); int persistentPeak_R = qMax( 3, calculateDisplayPeak( m_persistentPeak_R - m_fMinPeak ) ); painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), *s_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); if( m_persistentPeak_R > 0.05 ) { painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), ( m_persistentPeak_R < 1.0 ) ? peakGreen() : peakRed() ); } // knob painter.drawPixmap( 0, knobPosY() - ( *s_knob ).height(), *s_knob ); } QColor fader::peakGreen() const { return m_peakGreen; } QColor fader::peakRed() const { return m_peakRed; } void fader::setPeakGreen( const QColor & c ) { m_peakGreen = c; } void fader::setPeakRed( const QColor & c ) { m_peakRed = c; } #include "moc_fader.cxx" lmms-1.1.3/src/gui/widgets/graph.cpp000066400000000000000000000347501247673406200173360ustar00rootroot00000000000000/* * graph.cpp - a QT widget for displaying and manipulating waveforms * * Copyright (c) 2006-2007 Andreas Brandmaier * 2008 Paul Giblock * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "graph.h" #include "string_pair_drag.h" #include "SampleBuffer.h" #include "Oscillator.h" #include "engine.h" graph::graph( QWidget * _parent, graphStyle _style, int _width, int _height ) : QWidget( _parent ), /* TODO: size, background? */ ModelView( new graphModel( -1.0, 1.0, 128, NULL, true ), this ), m_graphStyle( _style ) { m_mouseDown = false; m_graphColor = QColor( 0xFF, 0xAA, 0x00 ); resize( _width, _height ); setAcceptDrops( true ); setCursor( Qt::CrossCursor ); graphModel * gModel = castModel(); QObject::connect( gModel, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateGraph( int, int ) ) ); QObject::connect( gModel, SIGNAL( lengthChanged( ) ), this, SLOT( updateGraph( ) ) ); } graph::~graph() { } void graph::setForeground( const QPixmap &_pixmap ) { m_foreground = _pixmap; } void graph::setGraphColor( QColor _graphcol ) { m_graphColor = _graphcol; } /* void graph::loadSampleFromFile( const QString & _filename ) { int i; // zero sample_shape for( i = 0; i < sampleLength; i++ ) { samplePointer[i] = 0; } // load user shape sampleBuffer buffer( _filename ); // copy buffer data int trimSize = fmin( size(), static_cast(buffer.frames()) ); for( i = 0; i < trimSize; i++ ) { samplePointer[i] = (float)*buffer.data()[i]; } } */ void graph::mouseMoveEvent ( QMouseEvent * _me ) { // get position int x = _me->x(); int y = _me->y(); /* static bool skip = false; if( skip ) { skip = false; return; } */ // avoid mouse leaps int diff = x - m_lastCursorX; /* if( diff >= 1 ) { x = qMin( width() - 3, m_lastCursorX + 1 ); } else if( diff <= -1 ) { x = qMax( 2, m_lastCursorX - 1 ); }*/ x = qMax( 2, qMin( x, width()-3 ) ); y = qMax( 2, qMin( y, height()-3 ) ); if( qAbs( diff ) > 1 ) { drawLineAt( x, y, m_lastCursorX ); } else { changeSampleAt( x, y ); } // update mouse if( diff != 0 ) { m_lastCursorX = x; QPoint pt = mapToGlobal( QPoint( x, y ) ); QCursor::setPos( pt.x(), pt.y() ); } // skip = true; } void graph::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton ) { if ( !( _me->modifiers() & Qt::ShiftModifier ) ) { // get position int x = _me->x(); int y = _me->y(); changeSampleAt( x, y ); // toggle mouse state m_mouseDown = true; setCursor( Qt::BlankCursor ); m_lastCursorX = x; } else { //when shift-clicking, draw a line from last position to current //position int x = _me->x(); int y = _me->y(); drawLineAt( x, y, m_lastCursorX ); m_mouseDown = true; setCursor( Qt::BlankCursor ); m_lastCursorX = x; } } } void graph::drawLineAt( int _x, int _y, int _lastx ) { float minVal = model()->minValue(); float maxVal = model()->maxValue(); if ( width() <= 4 ) { return; } float xscale = static_cast( model()->length() ) / ( width()-4 ); //consider border _x -= 2; _y -= 2; _lastx -= 2; _lastx = qMax( 0, qMin( _lastx, width()-5 ) ); float range = minVal - maxVal; float val = ( _y*range/( height()-5 ) ) + maxVal; float lastval = model() -> m_samples[ (int)( _lastx * xscale ) ]; // calculate line drawing variables int linelen = qAbs( _x - _lastx ) + 1; int xstep = _x > _lastx ? -1 : 1; float ystep = ( lastval - val ) / linelen; // draw a line for ( int i = 0; i < linelen; i++ ) { int x = (_x + (i * xstep)); // get x value model()->drawSampleAt( (int)( x * xscale ), val + (i * ystep)); } int start = qMin( _x, _x + ( ( linelen - 1 ) * xstep ) ); int end = qMax( _x, _x + ( ( linelen - 1 ) * xstep ) ); model()->samplesChanged( start, end ); } void graph::changeSampleAt( int _x, int _y ) { float minVal = model()->minValue(); float maxVal = model()->maxValue(); if ( width() <= 4 ) { return; } float xscale = static_cast( model()->length() ) / ( width()-4 ); // consider border of background image _x -= 2; _y -= 2; // subtract max from min because Qt's Y-axis is backwards float range = minVal - maxVal; float val = ( _y*range/( height()-5 ) ) + maxVal; model()->setSampleAt( (int)( _x*xscale ), val ); } void graph::mouseReleaseEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton ) { // toggle mouse state m_mouseDown = false; setCursor( Qt::CrossCursor ); update(); } } void graph::paintEvent( QPaintEvent * ) { QPainter p( this ); p.setPen( QPen( m_graphColor, 1 ) ); QColor gcol = QColor( m_graphColor.red(), m_graphColor.green(), m_graphColor.blue(), 100 ); QVector * samps = &(model()->m_samples); int length = model()->length(); const float maxVal = model()->maxValue(); const float minVal = model()->minValue(); float xscale = (float)( width()-4 ) / length; float yscale = (float)( height()-4 ) / ( minVal - maxVal ); // Max index, more useful below length--; switch( m_graphStyle ) { case graph::LinearStyle: p.setRenderHints( QPainter::Antialiasing, true ); for( int i=0; i < length; i++ ) { // Needs to be rewritten p.drawLine( 2+static_cast(i*xscale), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ), 2+static_cast((i+1)*xscale), 2+static_cast( ( (*samps)[i+1] - maxVal ) * yscale ) ); } // Draw last segment wrapped around p.drawLine(2+static_cast(length*xscale), 2+static_cast( ( (*samps)[length] - maxVal ) * yscale ), width()-3, 2+static_cast( ( (*samps)[0] - maxVal ) * yscale ) ); p.setRenderHints( QPainter::Antialiasing, false ); break; case graph::NearestStyle: for( int i=0; i < length; i++ ) { p.drawLine(2+static_cast(i*xscale), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ), 2+static_cast((i+1)*xscale), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ) ); p.drawLine(2+static_cast((i+1)*xscale), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ), 2+static_cast((i+1)*xscale), 2+static_cast( ( (*samps)[i+1] - maxVal ) * yscale ) ); } p.drawLine(2+static_cast(length*xscale), 2+static_cast( ( (*samps)[length] - maxVal ) * yscale ), width()-3, 2+static_cast( ( (*samps)[length] - maxVal ) * yscale ) ); break; case graph::LinearNonCyclicStyle: p.setRenderHints( QPainter::Antialiasing, true ); for( int i=0; i < length; i++ ) { // Needs to be rewritten p.drawLine( 2+static_cast(i*xscale), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ), 2+static_cast((i+1)*xscale), 2+static_cast( ( (*samps)[i+1] - maxVal ) * yscale ) ); } // Do not draw last segment wrapped around - hence, "non-cyclic" p.setRenderHints( QPainter::Antialiasing, false ); break; case graph::BarStyle: for( int i=0; i <= length; i++ ) { p.fillRect( 2+static_cast( i*xscale ), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ), qMax( static_cast(xscale) - 1, 1 ), qMax( static_cast( ( minVal - maxVal ) * yscale ) - static_cast( ( (*samps)[i] - maxVal ) * yscale ), 1 ), gcol ); p.setPen( QPen( m_graphColor, 1 ) ); p.drawLine( 2+static_cast(i*xscale), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ), qMax( static_cast(i*xscale) + static_cast(xscale), 2+static_cast(i*xscale) ), 2+static_cast( ( (*samps)[i] - maxVal ) * yscale ) ); } break; default: break; } // draw Pointer if( m_mouseDown ) { QPoint cursor = mapFromGlobal( QCursor::pos() ); p.setPen( QColor( 0xAA, 0xFF, 0x00, 0x70 ) ); p.drawLine( 2, cursor.y(), width()-2, cursor.y() ); p.drawLine( cursor.x(), 2, cursor.x(), height()-2 ); } p.drawPixmap( 0, 0, m_foreground ); } void graph::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString value = stringPairDrag::decodeValue( _de ); if( type == "samplefile" ) { // TODO: call setWaveToUser // loadSampleFromFile( value ); _de->accept(); } } void graph::dragEnterEvent( QDragEnterEvent * _dee ) { if( stringPairDrag::processDragEnterEvent( _dee, QString( "samplefile" ) ) == false ) { _dee->ignore(); } } void graph::modelChanged() { graphModel * gModel = castModel(); QObject::connect( gModel, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateGraph( int, int ) ) ); QObject::connect( gModel, SIGNAL( lengthChanged( ) ), this, SLOT( updateGraph( ) ) ); } void graph::updateGraph( int _startPos, int _endPos ) { // Can optimize by only drawing changed position update(); } void graph::updateGraph() { updateGraph( 0, model()->length() - 1 ); } graphModel::graphModel( float _min, float _max, int _length, ::Model * _parent, bool _default_constructed, float _step ) : Model( _parent, tr( "Graph" ), _default_constructed ), m_samples( _length ), m_minValue( _min ), m_maxValue( _max ), m_step( _step ) { } graphModel::~graphModel() { } void graphModel::setRange( float _min, float _max ) { if( _min != m_minValue || _max != m_maxValue ) { m_minValue = _min; m_maxValue = _max; if( !m_samples.isEmpty() ) { // Trim existing values for( int i=0; i < length(); i++ ) { m_samples[i] = fmaxf( _min, fminf( m_samples[i], _max ) ); } } emit rangeChanged(); } } void graphModel::setLength( int _length ) { if( _length != length() ) { m_samples.resize( _length ); emit lengthChanged(); } } void graphModel::setSampleAt( int x, float val ) { drawSampleAt( x, val ); emit samplesChanged( x, x ); } void graphModel::setSamples( const float * _samples ) { qCopy( _samples, _samples + length(), m_samples.begin()); emit samplesChanged( 0, length()-1 ); } void graphModel::setWaveToSine() { for( int i = 0; i < length(); i++ ) { m_samples[i] = Oscillator::sinSample( i / static_cast( length() ) ); } emit samplesChanged( 0, length() - 1 ); }; void graphModel::setWaveToTriangle() { for( int i = 0; i < length(); i++ ) { m_samples[i] = Oscillator::triangleSample( i / static_cast( length() ) ); } emit samplesChanged( 0, length() - 1 ); }; void graphModel::setWaveToSaw() { for( int i = 0; i < length(); i++ ) { m_samples[i] = Oscillator::sawSample( i / static_cast( length() ) ); } emit samplesChanged( 0, length() - 1 ); }; void graphModel::setWaveToSquare() { for( int i = 0; i < length(); i++ ) { m_samples[i] = Oscillator::squareSample( i / static_cast( length() ) ); } emit samplesChanged( 0, length() - 1 ); }; void graphModel::setWaveToNoise() { for( int i = 0; i < length(); i++ ) { m_samples[i] = Oscillator::noiseSample( i / static_cast( length() ) ); } emit samplesChanged( 0, length() - 1 ); }; QString graphModel::setWaveToUser() { SampleBuffer * sampleBuffer = new SampleBuffer; QString fileName = sampleBuffer->openAndSetWaveformFile(); if( fileName.isEmpty() == false ) { for( int i = 0; i < length(); i++ ) { m_samples[i] = sampleBuffer->userWaveSample( i / static_cast( length() ) ); } } sharedObject::unref( sampleBuffer ); emit samplesChanged( 0, length() - 1 ); return fileName; }; void graphModel::smooth() { // store values in temporary array QVector temp = m_samples; // Smoothing m_samples[0] = ( temp[length()-1] + ( temp[0] * 2 ) + temp[1] ) * 0.25f; for ( int i=1; i < ( length()-1 ); i++ ) { m_samples[i] = ( temp[i-1] + ( temp[i] * 2 ) + temp[i+1] ) * 0.25f; } m_samples[length()-1] = ( temp[length()-2] + ( temp[length()-1] * 2 ) + temp[0] ) * 0.25f; emit samplesChanged(0, length()-1); } void graphModel::smoothNonCyclic() { // store values in temporary array QVector temp = m_samples; // Smoothing m_samples[0] = ( ( temp[0] * 3 ) + temp[1] ) * 0.25f; for ( int i=1; i < ( length()-1 ); i++ ) { m_samples[i] = ( temp[i-1] + ( temp[i] * 2 ) + temp[i+1] ) * 0.25f; } m_samples[length()-1] = ( temp[length()-2] + ( temp[length()-1] * 3 ) ) * 0.25f; emit samplesChanged(0, length()-1); } void graphModel::normalize() { float max = 0.0001f; float avg = 0.0f; // first correct dc offset by normalizing to average for( int i = 0; i < length(); i++ ) avg += m_samples[i]; avg /= length(); for( int i = 0; i < length(); i++ ) m_samples[i] -= avg; // then maximize for( int i = 0; i < length(); i++ ) max = qMax( max, qAbs( m_samples[i] ) ); for( int i = 0; i < length(); i++ ) m_samples[i] = qBound( m_minValue, m_samples[i] / max, m_maxValue ); // signal changes if any if( max != 1.0f || avg != 0.0f ) emit samplesChanged( 0, length()-1 ); } void graphModel::invert() { const float range = m_maxValue - m_minValue; for( int i = 0; i < length(); i++ ) m_samples[i] = m_minValue + ( range - ( m_samples[i] - m_minValue ) ); emit samplesChanged( 0, length()-1 ); } void graphModel::shiftPhase( int _deg ) { // calculate offset in samples int offset = ( _deg * length() ) / 360; //multiply first because integers // store values in temporary array QVector temp = m_samples; // shift phase for( int i = 0; i < length(); i++ ) { int o = ( i + offset ) % length(); while( o < 0 ) o += length(); m_samples[i] = temp[o]; } emit samplesChanged( 0, length()-1 ); } void graphModel::drawSampleAt( int x, float val ) { //snap to the grid val -= ( m_step != 0.0 ) ? fmod( val, m_step ) * m_step : 0; // boundary crop x = qMax( 0, qMin( length()-1, x ) ); val = qMax( minValue(), qMin( maxValue(), val ) ); // change sample shape m_samples[x] = val; } #include "moc_graph.cxx" lmms-1.1.3/src/gui/widgets/group_box.cpp000066400000000000000000000064121247673406200202330ustar00rootroot00000000000000/* * group_box.cpp - groupbox for LMMS * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include #include "group_box.h" #include "embed.h" #include "gui_templates.h" groupBox::groupBox( const QString & _caption, QWidget * _parent ) : QWidget( _parent ), BoolModelView( NULL, this ), m_caption( _caption ), m_titleBarHeight( 11 ) { updatePixmap(); m_led = new pixmapButton( this, _caption ); m_led->setCheckable( true ); m_led->move( 3, 0 ); m_led->setActiveGraphic( embed::getIconPixmap( "led_green" ) ); m_led->setInactiveGraphic( embed::getIconPixmap( "led_off" ) ); setModel( new BoolModel( false, NULL, _caption, true ) ); setAutoFillBackground( true ); unsetCursor(); } groupBox::~groupBox() { delete m_led; } void groupBox::modelChanged() { m_led->setModel( model() ); } void groupBox::mousePressEvent( QMouseEvent * _me ) { if( _me->y() > 1 && _me->y() < 13 && _me->button() == Qt::LeftButton ) { model()->setValue( !model()->value() ); } } void groupBox::resizeEvent( QResizeEvent * _ev ) { updatePixmap(); QWidget::resizeEvent( _ev ); } void groupBox::updatePixmap() { QColor bg_color = QApplication::palette().color( QPalette::Active, QPalette::Background ); QPixmap pm( size() ); pm.fill( bg_color/*.dark( 132 )*/ ); QPainter p( &pm ); // outer rect p.setPen( bg_color.dark( 150 ) ); p.drawRect( 0, 0, width() - 1, height() - 1 ); // brighter line at bottom/right p.setPen( bg_color.light( 150 ) ); p.drawLine( width() - 1, 0, width() - 1, height() - 1 ); p.drawLine( 0, height() - 1, width() - 1, height() - 1 ); // draw groupbox-titlebar QLinearGradient g( 0, 0, 0, m_titleBarHeight ); g.setColorAt( 0, bg_color.darker( 250 ) ); g.setColorAt( 0.1, bg_color.lighter( 120 ) ); g.setColorAt( 1, bg_color.darker( 250 ) ); p.fillRect( 2, 2, width() - 4, m_titleBarHeight, g ); // draw line below titlebar p.setPen( bg_color.dark( 400 ) ); p.drawLine( 1, m_titleBarHeight + 1, width() - 3, m_titleBarHeight + 1 ); // black inner rect p.drawRect( 1, 1, width() - 3, height() - 3 ); //p.setPen( QColor( 255, 255, 255 ) ); p.setPen( palette().color( QPalette::Active, QPalette::Text ) ); p.setFont( pointSize<8>( font() ) ); p.drawText( 22, m_titleBarHeight, m_caption ); QPalette pal = palette(); pal.setBrush( backgroundRole(), QBrush( pm ) ); setPalette( pal ); } #include "moc_group_box.cxx" lmms-1.1.3/src/gui/widgets/knob.cpp000066400000000000000000000363461247673406200171710ustar00rootroot00000000000000/* * knob.cpp - powerful knob-widget * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #ifndef __USE_XOPEN #define __USE_XOPEN #endif #include "lmms_math.h" #include "knob.h" #include "caption_menu.h" #include "config_mgr.h" #include "ControllerConnection.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "MainWindow.h" #include "ProjectJournal.h" #include "song.h" #include "string_pair_drag.h" #include "templates.h" #include "text_float.h" textFloat * knob::s_textFloat = NULL; //! @todo: in C++11, we can use delegating ctors #define DEFAULT_KNOB_INITIALIZER_LIST \ QWidget( _parent ), \ FloatModelView( new FloatModel( 0, 0, 0, 1, NULL, _name, true ), this ), \ m_label( "" ), \ m_knobPixmap( NULL ), \ m_volumeKnob( false ), \ m_volumeRatio( 100.0, 0.0, 1000000.0 ), \ m_buttonPressed( false ), \ m_angle( -10 ) knob::knob( knobTypes _knob_num, QWidget * _parent, const QString & _name ) : DEFAULT_KNOB_INITIALIZER_LIST, m_knobNum( _knob_num ) { initUi( _name ); } knob::knob( QWidget * _parent, const QString & _name ) : DEFAULT_KNOB_INITIALIZER_LIST, m_knobNum( knobBright_26 ) { initUi( _name ); } #undef DEFAULT_KNOB_INITIALIZER_LIST void knob::initUi( const QString & _name ) { if( s_textFloat == NULL ) { s_textFloat = new textFloat; } setWindowTitle( _name ); onKnobNumUpdated(); setTotalAngle( 270.0f ); setInnerRadius( 1.0f ); setOuterRadius( 10.0f ); setFocusPolicy( Qt::ClickFocus ); doConnections(); } void knob::onKnobNumUpdated() { if( m_knobNum != knobStyled ) { m_knobPixmap = new QPixmap( embed::getIconPixmap( QString( "knob0" + QString::number( m_knobNum + 1 ) ).toUtf8().constData() ) ); setFixedSize( m_knobPixmap->width(), m_knobPixmap->height() ); } } knob::~knob() { if( m_knobPixmap ) { delete m_knobPixmap; } } void knob::setLabel( const QString & _txt ) { m_label = _txt; if( m_knobPixmap ) { setFixedSize( qMax( m_knobPixmap->width(), QFontMetrics( pointSizeF( font(), 6.5) ).width( m_label ) ), m_knobPixmap->height() + 10 ); } update(); } void knob::setTotalAngle( float _angle ) { if( _angle < 10.0 ) { m_totalAngle = 10.0; } else { m_totalAngle = _angle; } update(); } float knob::innerRadius() const { return m_innerRadius; } void knob::setInnerRadius( float _r ) { m_innerRadius = _r; } float knob::outerRadius() const { return m_outerRadius; } void knob::setOuterRadius( float _r ) { m_outerRadius = _r; } knobTypes knob::knobNum() const { return m_knobNum; } void knob::setknobNum( knobTypes _k ) { if( m_knobNum != _k ) { m_knobNum = _k; onKnobNumUpdated(); } } QPointF knob::centerPoint() const { return m_centerPoint; } float knob::centerPointX() const { return m_centerPoint.x(); } void knob::setCenterPointX( float _c ) { m_centerPoint.setX( _c ); } float knob::centerPointY() const { return m_centerPoint.y(); } void knob::setCenterPointY( float _c ) { m_centerPoint.setY( _c ); } float knob::lineWidth() const { return m_lineWidth; } void knob::setLineWidth( float _w ) { m_lineWidth = _w; } QColor knob::outerColor() const { return m_outerColor; } void knob::setOuterColor( const QColor & _c ) { m_outerColor = _c; } QColor knob::lineColor() const { return m_lineColor; } void knob::setlineColor( const QColor & _c ) { m_lineColor = _c; } QColor knob::arcColor() const { return m_arcColor; } void knob::setarcColor( const QColor & _c ) { m_arcColor = _c; } QLineF knob::calculateLine( const QPointF & _mid, float _radius, float _innerRadius ) const { const float rarc = m_angle * F_PI / 180.0; const float ca = cos( rarc ); const float sa = -sin( rarc ); return QLineF( _mid.x() - sa*_innerRadius, _mid.y() - ca*_innerRadius, _mid.x() - sa*_radius, _mid.y() - ca*_radius ); } bool knob::updateAngle() { int angle = 0; if( model() && model()->maxValue() != model()->minValue() ) { angle = angleFromValue( model()->inverseScaledValue( model()->value() ), model()->minValue(), model()->maxValue(), m_totalAngle ); } if( qAbs( angle - m_angle ) > 3 ) { m_angle = angle; return true; } return false; } void knob::drawKnob( QPainter * _p ) { if( updateAngle() == false && !m_cache.isNull() ) { _p->drawImage( 0, 0, m_cache ); return; } m_cache = QImage( size(), QImage::Format_ARGB32 ); m_cache.fill( qRgba( 0, 0, 0, 0 ) ); QPainter p( &m_cache ); QPoint mid; if( m_knobNum == knobStyled ) { p.setRenderHint( QPainter::Antialiasing ); // Perhaps this can move to setOuterRadius() if( m_outerColor.isValid() ) { QRadialGradient gradient( centerPoint(), outerRadius() ); gradient.setColorAt( 0.4, _p->pen().brush().color() ); gradient.setColorAt( 1, m_outerColor ); p.setPen( QPen( gradient, lineWidth(), Qt::SolidLine, Qt::RoundCap ) ); } else { QPen pen = p.pen(); pen.setWidth( (int) lineWidth() ); pen.setCapStyle( Qt::RoundCap ); p.setPen( pen ); } p.drawLine( calculateLine( centerPoint(), outerRadius(), innerRadius() ) ); p.end(); _p->drawImage( 0, 0, m_cache ); return; } // Old-skool knobs const float radius = m_knobPixmap->width() / 2.0f - 1; mid = QPoint( width() / 2, m_knobPixmap->height() / 2 ); p.drawPixmap( static_cast( width() / 2 - m_knobPixmap->width() / 2 ), 0, *m_knobPixmap ); p.setRenderHint( QPainter::Antialiasing ); const int centerAngle = angleFromValue( model()->inverseScaledValue( model()->centerValue() ), model()->minValue(), model()->maxValue(), m_totalAngle ); const int arcLineWidth = 2; const int arcRectSize = m_knobPixmap->width() - arcLineWidth; QColor col; if( m_knobNum == knobVintage_32 ) { col = QApplication::palette().color( QPalette::Active, QPalette::Shadow ); } else { col = QApplication::palette().color( QPalette::Active, QPalette::WindowText ); } col.setAlpha( 70 ); p.setPen( QPen( col, 2 ) ); p.drawArc( mid.x() - arcRectSize/2, 1, arcRectSize, arcRectSize, 315*16, 16*m_totalAngle ); switch( m_knobNum ) { case knobSmall_17: { p.setPen( QPen( QApplication::palette().color( QPalette::Active, QPalette::WindowText ), 2 ) ); p.drawLine( calculateLine( mid, radius-2 ) ); break; } case knobBright_26: { p.setPen( QPen( QApplication::palette().color( QPalette::Active, QPalette::WindowText ), 2 ) ); p.drawLine( calculateLine( mid, radius-5 ) ); break; } case knobDark_28: { p.setPen( QPen( QApplication::palette().color( QPalette::Active, QPalette::WindowText ), 2 ) ); const float rb = qMax( ( radius - 10 ) / 3.0, 0.0 ); const float re = qMax( ( radius - 4 ), 0.0 ); QLineF ln = calculateLine( mid, re, rb ); ln.translate( 1, 1 ); p.drawLine( ln ); break; } case knobGreen_17: { p.setPen( QPen( QApplication::palette().color( QPalette::Active, QPalette::BrightText), 2 ) ); p.drawLine( calculateLine( mid, radius ) ); break; } case knobVintage_32: { p.setPen( QPen( QApplication::palette().color( QPalette::Active, QPalette::Shadow), 2 ) ); p.drawLine( calculateLine( mid, radius-2, 2 ) ); break; } case knobStyled: break; } p.drawArc( mid.x() - arcRectSize/2, 1, arcRectSize, arcRectSize, (90-centerAngle)*16, -16*(m_angle-centerAngle) ); p.end(); _p->drawImage( 0, 0, m_cache ); } float knob::getValue( const QPoint & _p ) { float value; // arcane mathemagicks for calculating knob movement value = ( ( _p.y() + _p.y() * qMin( qAbs( _p.y() / 2.5f ), 6.0f ) ) ) / 12.0f; // if shift pressed we want slower movement if( engine::mainWindow()->isShiftPressed() ) { value /= 4.0f; value = qBound( -4.0f, value, 4.0f ); } return value * pageSize(); } void knob::contextMenuEvent( QContextMenuEvent * ) { // for the case, the user clicked right while pressing left mouse- // button, the context-menu appears while mouse-cursor is still hidden // and it isn't shown again until user does something which causes // an QApplication::restoreOverrideCursor()-call... mouseReleaseEvent( NULL ); captionMenu contextMenu( model()->displayName(), this ); addDefaultActions( &contextMenu ); contextMenu.addAction( QPixmap(), model()->isScaleLogarithmic() ? tr( "Set linear" ) : tr( "Set logarithmic" ), this, SLOT( toggleScale() ) ); contextMenu.addSeparator(); contextMenu.addHelpAction(); contextMenu.exec( QCursor::pos() ); } void knob::toggleScale() { model()->setScaleLogarithmic( ! model()->isScaleLogarithmic() ); } void knob::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, "float_value," "automatable_model" ); } void knob::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString val = stringPairDrag::decodeValue( _de ); if( type == "float_value" ) { model()->setValue( val.toFloat() ); _de->accept(); } else if( type == "automatable_model" ) { AutomatableModel * mod = dynamic_cast( engine::projectJournal()-> journallingObject( val.toInt() ) ); if( mod != NULL ) { AutomatableModel::linkModels( model(), mod ); mod->setValue( model()->value() ); } } } void knob::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && ! ( _me->modifiers() & Qt::ControlModifier ) && ! ( _me->modifiers() & Qt::ShiftModifier ) ) { AutomatableModel *thisModel = model(); if( thisModel ) { thisModel->addJournalCheckPoint(); thisModel->saveJournallingState( false ); } const QPoint & p = _me->pos(); m_origMousePos = p; m_mouseOffset = QPoint(0, 0); m_leftOver = 0.0f; emit sliderPressed(); QApplication::setOverrideCursor( Qt::BlankCursor ); s_textFloat->setText( displayValue() ); s_textFloat->moveGlobal( this, QPoint( width() + 2, 0 ) ); s_textFloat->show(); m_buttonPressed = true; } else if( _me->button() == Qt::LeftButton && engine::mainWindow()->isShiftPressed() == true ) { new stringPairDrag( "float_value", QString::number( model()->value() ), QPixmap(), this ); } else { FloatModelView::mousePressEvent( _me ); } } void knob::mouseMoveEvent( QMouseEvent * _me ) { if( m_buttonPressed && _me->pos() != m_origMousePos ) { m_mouseOffset = _me->pos() - m_origMousePos; setPosition( m_mouseOffset ); emit sliderMoved( model()->value() ); QCursor::setPos( mapToGlobal( m_origMousePos ) ); } s_textFloat->setText( displayValue() ); } void knob::mouseReleaseEvent( QMouseEvent* event ) { if( event && event->button() == Qt::LeftButton ) { AutomatableModel *thisModel = model(); if( thisModel ) { thisModel->restoreJournallingState(); } } m_buttonPressed = false; emit sliderReleased(); QApplication::restoreOverrideCursor(); s_textFloat->hide(); } void knob::focusOutEvent( QFocusEvent * _fe ) { // make sure we don't loose mouse release event mouseReleaseEvent( NULL ); QWidget::focusOutEvent( _fe ); } void knob::mouseDoubleClickEvent( QMouseEvent * ) { enterValue(); } void knob::paintEvent( QPaintEvent * _me ) { QPainter p( this ); drawKnob( &p ); if( !m_label.isEmpty() ) { p.setFont( pointSizeF( p.font(), 6.5 ) ); /* p.setPen( QColor( 64, 64, 64 ) ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2 + 1, height() - 1, m_label );*/ p.setPen( QColor( 255, 255, 255 ) ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2, height() - 2, m_label ); } } void knob::wheelEvent( QWheelEvent * _we ) { _we->accept(); const int inc = ( _we->delta() > 0 ) ? 1 : -1; model()->incValue( inc ); s_textFloat->setText( displayValue() ); s_textFloat->moveGlobal( this, QPoint( width() + 2, 0 ) ); s_textFloat->setVisibilityTimeOut( 1000 ); emit sliderMoved( model()->value() ); } void knob::setPosition( const QPoint & _p ) { const float value = getValue( _p ) + m_leftOver; const float step = model()->step(); const float oldValue = model()->value(); if( model()->isScaleLogarithmic() ) // logarithmic code { const float pos = model()->minValue() < 0 ? oldValue / qMax( qAbs( model()->maxValue() ), qAbs( model()->minValue() ) ) : ( oldValue - model()->minValue() ) / model()->range(); const float ratio = 0.1f + qAbs( pos ) * 15.f; float newValue = value * ratio; if( qAbs( newValue ) >= step ) { model()->setValue( oldValue - newValue ); m_leftOver = 0.0f; } else { m_leftOver = value; } } else // linear code { if( qAbs( value ) >= step ) { model()->setValue( oldValue - value ); m_leftOver = 0.0f; } else { m_leftOver = value; } } } void knob::enterValue() { bool ok; float new_val; if( isVolumeKnob() && configManager::inst()->value( "app", "displaydbv" ).toInt() ) { new_val = QInputDialog::getDouble( this, windowTitle(), tr( "Please enter a new value between " "-96.0 dBV and 6.0 dBV:" ), 20.0 * log10( model()->value() / 100.0 ), -96.0, 6.0, 4, &ok ); if( new_val <= -96.0 ) { new_val = 0.0f; } else { new_val = dbvToAmp( new_val ) * 100.0; } } else { new_val = QInputDialog::getDouble( this, windowTitle(), tr( "Please enter a new value between " "%1 and %2:" ). arg( model()->minValue() ). arg( model()->maxValue() ), model()->value(), model()->minValue(), model()->maxValue(), 4, &ok ); } if( ok ) { model()->setValue( new_val ); } } void knob::friendlyUpdate() { if( model()->controllerConnection() == NULL || model()->controllerConnection()->getController()->frequentUpdates() == false || Controller::runningFrames() % (256*4) == 0 ) { update(); } } QString knob::displayValue() const { if( isVolumeKnob() && configManager::inst()->value( "app", "displaydbv" ).toInt() ) { return m_description.trimmed() + QString( " %1 dBV" ). arg( 20.0 * log10( model()->value() / volumeRatio() ), 3, 'f', 2 ); } return m_description.trimmed() + QString( " %1" ). arg( model()->value() ) + m_unit; } void knob::doConnections() { if( model() != NULL ) { QObject::connect( model(), SIGNAL( dataChanged() ), this, SLOT( friendlyUpdate() ) ); QObject::connect( model(), SIGNAL( propertiesChanged() ), this, SLOT( update() ) ); } } void knob::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } #include "moc_knob.cxx" lmms-1.1.3/src/gui/widgets/led_checkbox.cpp000066400000000000000000000054631247673406200206460ustar00rootroot00000000000000/* * led_checkbox.cpp - class ledCheckBox, an improved QCheckBox * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "led_checkbox.h" #include "embed.h" #include "gui_templates.h" static const QString names[ledCheckBox::NumColors] = { "led_yellow", "led_green", "led_red" } ; //! @todo: in C++11, we can use delegating ctors #define DEFAULT_LEDCHECKBOX_INITIALIZER_LIST \ automatableButton( _parent, _name ) ledCheckBox::ledCheckBox( const QString & _text, QWidget * _parent, const QString & _name, LedColors _color ) : DEFAULT_LEDCHECKBOX_INITIALIZER_LIST, m_text( _text ) { initUi( _color ); } ledCheckBox::ledCheckBox( QWidget * _parent, const QString & _name, LedColors _color ) : DEFAULT_LEDCHECKBOX_INITIALIZER_LIST { initUi( _color ); } #undef DEFAULT_LEDCHECKBOX_INITIALIZER_LIST ledCheckBox::~ledCheckBox() { delete m_ledOnPixmap; delete m_ledOffPixmap; } void ledCheckBox::setText( const QString &s ) { m_text = s; onTextUpdated(); } void ledCheckBox::paintEvent( QPaintEvent * ) { QPainter p( this ); p.setFont( pointSize<7>( font() ) ); if( model()->value() == true ) { p.drawPixmap( 0, 0, *m_ledOnPixmap ); } else { p.drawPixmap( 0, 0, *m_ledOffPixmap ); } p.setPen( QColor( 64, 64, 64 ) ); p.drawText( m_ledOffPixmap->width() + 4, 11, text() ); p.setPen( QColor( 255, 255, 255 ) ); p.drawText( m_ledOffPixmap->width() + 3, 10, text() ); } void ledCheckBox::initUi( LedColors _color ) { setCheckable( true ); if( _color >= NumColors || _color < Yellow ) { _color = Yellow; } m_ledOnPixmap = new QPixmap( embed::getIconPixmap( names[_color].toUtf8().constData() ) ); m_ledOffPixmap = new QPixmap( embed::getIconPixmap( "led_off" ) ); setFont( pointSize<7>( font() ) ); setText( m_text ); } void ledCheckBox::onTextUpdated() { setFixedSize( m_ledOffPixmap->width() + 5 + QFontMetrics( font() ).width( text() ), m_ledOffPixmap->height() ); } #include "moc_led_checkbox.cxx" lmms-1.1.3/src/gui/widgets/nstate_button.cpp000066400000000000000000000042451247673406200211220ustar00rootroot00000000000000/* * nstate_button.cpp - implementation of n-state-button * * Copyright (c) 2005-2006 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "nstate_button.h" #include "embed.h" #include "tooltip.h" nStateButton::nStateButton( QWidget * _parent ) : toolButton( _parent ), m_generalToolTip( "" ), m_curState( -1 ) { } nStateButton::~nStateButton() { while( m_states.size() ) { m_states.erase( m_states.begin() ); } } void nStateButton::addState( const QPixmap & _pm, const QString & _tooltip ) { m_states.push_back( qMakePair( _pm, _tooltip ) ); // first inserted pixmap? if( m_states.size() == 1 ) { // then resize ourself setFixedSize( _pm.width() + 6, _pm.height() + 6 ); // and set state to first pixmap changeState( 0 ); } } void nStateButton::changeState( int _n ) { if( _n >= 0 && _n < (int) m_states.size() ) { m_curState = _n; const QString & _tooltip = ( m_states[m_curState].second != "" ) ? m_states[m_curState].second : m_generalToolTip; toolTip::add( this, _tooltip ); setIcon( m_states[m_curState].first ); emit changedState( m_curState ); } } void nStateButton::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && m_states.size() ) { changeState( ( ++m_curState ) % m_states.size() ); } toolButton::mousePressEvent( _me ); } #include "moc_nstate_button.cxx" lmms-1.1.3/src/gui/widgets/pixmap_button.cpp000066400000000000000000000051001247673406200211110ustar00rootroot00000000000000/* * pixmap_button.cpp - implementation of pixmap-button (often used as "themed" * checkboxes/radiobuttons etc) * * Copyright (c) 2004-2013 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "pixmap_button.h" #include "MainWindow.h" #include "embed.h" pixmapButton::pixmapButton( QWidget * _parent, const QString & _name ) : automatableButton( _parent, _name ), m_activePixmap(), m_inactivePixmap(), m_pressed( false ) { setActiveGraphic( embed::getIconPixmap( "led_yellow" ) ); setInactiveGraphic( embed::getIconPixmap( "led_off" ), false ); } pixmapButton::~pixmapButton() { } void pixmapButton::paintEvent( QPaintEvent * ) { QPainter p( this ); if( ( model() != NULL && model()->value() ) || m_pressed ) { if( !m_activePixmap.isNull() ) { p.drawPixmap( 0, 0, m_activePixmap ); } } else if( !m_inactivePixmap.isNull() ) { p.drawPixmap( 0, 0, m_inactivePixmap ); } } void pixmapButton::mousePressEvent( QMouseEvent * _me ) { // Show pressing graphics if this isn't checkable if( !isCheckable() ) { m_pressed = true; update(); } automatableButton::mousePressEvent( _me ); } void pixmapButton::mouseReleaseEvent( QMouseEvent * _me ) { automatableButton::mouseReleaseEvent( _me ); if( !isCheckable() ) { m_pressed = false; update(); } } void pixmapButton::mouseDoubleClickEvent( QMouseEvent * _me ) { emit doubleClicked(); _me->accept(); } void pixmapButton::setActiveGraphic( const QPixmap & _pm ) { m_activePixmap = _pm; resize( m_activePixmap.width(), m_activePixmap.height() ); } void pixmapButton::setInactiveGraphic( const QPixmap & _pm, bool _update ) { m_inactivePixmap = _pm; if( _update ) { update(); } } #include "moc_pixmap_button.cxx" lmms-1.1.3/src/gui/widgets/project_notes.cpp000066400000000000000000000237411247673406200211110ustar00rootroot00000000000000/* * project_notes.cpp - implementation of project-notes-editor * * Copyright (c) 2005-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "project_notes.h" #include #include #include #include #include #include #include #include #include #include #include #include "embed.h" #include "engine.h" #include "MainWindow.h" #include "song.h" projectNotes::projectNotes() : QMainWindow( engine::mainWindow()->workspace() ) { m_edit = new QTextEdit( this ); m_edit->setAutoFillBackground( TRUE ); QPalette pal; pal.setColor( m_edit->backgroundRole(), QColor( 64, 64, 64 ) ); m_edit->setPalette( pal ); m_edit->show(); clear(); connect( m_edit, SIGNAL( currentCharFormatChanged( const QTextCharFormat & ) ), this, SLOT( formatChanged( const QTextCharFormat & ) ) ); // connect( m_edit, SIGNAL( currentAlignmentChanged( int ) ), // this, SLOT( alignmentChanged( int ) ) ); connect( m_edit, SIGNAL( textChanged() ), engine::getSong(), SLOT( setModified() ) ); setupActions(); setCentralWidget( m_edit ); setWindowTitle( tr( "Project notes" ) ); setWindowIcon( embed::getIconPixmap( "project_notes" ) ); engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->move( 700, 10 ); parentWidget()->resize( 400, 300 ); parentWidget()->hide(); } projectNotes::~projectNotes() { } void projectNotes::clear() { m_edit->setHtml( tr( "Put down your project notes here." ) ); m_edit->selectAll(); m_edit->setTextColor( QColor( 224, 224, 224 ) ); QTextCursor cursor = m_edit->textCursor(); cursor.clearSelection(); m_edit->setTextCursor( cursor ); } void projectNotes::setText( const QString & _text ) { m_edit->setHtml( _text ); } void projectNotes::setupActions() { QToolBar * tb = addToolBar( tr( "Edit Actions" ) ); QAction * a; a = new QAction( embed::getIconPixmap( "edit_undo" ), tr( "&Undo" ), this ); a->setShortcut( tr( "Ctrl+Z" ) ); connect( a, SIGNAL( triggered() ), m_edit, SLOT( undo() ) ); tb->addAction( a ); a = new QAction( embed::getIconPixmap( "edit_redo" ), tr( "&Redo" ), this ); a->setShortcut( tr( "Ctrl+Y" ) ); connect( a, SIGNAL( triggered() ), m_edit, SLOT( redo() ) ); tb->addAction( a ); a = new QAction( embed::getIconPixmap( "edit_copy" ), tr( "&Copy" ), this ); a->setShortcut( tr( "Ctrl+C" ) ); connect( a, SIGNAL( triggered() ), m_edit, SLOT( copy() ) ); tb->addAction( a ); a = new QAction( embed::getIconPixmap( "edit_cut" ), tr( "Cu&t" ), this ); a->setShortcut( tr( "Ctrl+X" ) ); connect( a, SIGNAL( triggered() ), m_edit, SLOT( cut() ) ); tb->addAction( a ); a = new QAction( embed::getIconPixmap( "edit_paste" ), tr( "&Paste" ), this ); a->setShortcut( tr( "Ctrl+V" ) ); connect( a, SIGNAL( triggered() ), m_edit, SLOT( paste() ) ); tb->addAction( a ); tb = addToolBar( tr( "Format Actions" ) ); m_comboFont = new QComboBox( tb ); m_comboFont->setEditable( true ); QFontDatabase db; m_comboFont->addItems( db.families() ); connect( m_comboFont, SIGNAL( activated( const QString & ) ), m_edit, SLOT( setFontFamily( const QString & ) ) ); m_comboFont->lineEdit()->setText( QApplication::font().family() ); m_comboSize = new QComboBox( tb ); m_comboSize->setEditable( true ); QList sizes = db.standardSizes(); QList::Iterator it = sizes.begin(); for ( ; it != sizes.end(); ++it ) { m_comboSize->addItem( QString::number( *it ) ); } connect( m_comboSize, SIGNAL( activated( const QString & ) ), this, SLOT( textSize( const QString & ) ) ); m_comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) ); m_actionTextBold = new QAction( embed::getIconPixmap( "text_bold" ), tr( "&Bold" ), this ); m_actionTextBold->setShortcut( tr( "Ctrl+B" ) ); m_actionTextBold->setCheckable( true ); connect( m_actionTextBold, SIGNAL( triggered() ), this, SLOT( textBold() ) ); m_actionTextItalic = new QAction( embed::getIconPixmap( "text_italic" ), tr( "&Italic" ), this ); m_actionTextItalic->setShortcut( tr( "Ctrl+I" ) ); m_actionTextItalic->setCheckable( true ); connect( m_actionTextItalic, SIGNAL( triggered() ), this, SLOT( textItalic() ) ); m_actionTextUnderline = new QAction( embed::getIconPixmap( "text_under" ), tr( "&Underline" ), this ); m_actionTextUnderline->setShortcut( tr( "Ctrl+U" ) ); m_actionTextUnderline->setCheckable( true ); connect( m_actionTextUnderline, SIGNAL( triggered() ), this, SLOT( textUnderline() ) ); QActionGroup * grp = new QActionGroup( tb ); connect( grp, SIGNAL( triggered( QAction * ) ), this, SLOT( textAlign( QAction * ) ) ); m_actionAlignLeft = new QAction( embed::getIconPixmap( "text_left" ), tr( "&Left" ), m_edit ); m_actionAlignLeft->setShortcut( tr( "Ctrl+L" ) ); m_actionAlignLeft->setCheckable( true ); grp->addAction( m_actionAlignLeft ); m_actionAlignCenter = new QAction( embed::getIconPixmap( "text_center" ), tr( "C&enter" ), m_edit ); m_actionAlignCenter->setShortcutContext( Qt::WidgetShortcut ); m_actionAlignCenter->setShortcut( tr( "Ctrl+E" ) ); m_actionAlignCenter->setCheckable( true ); grp->addAction( m_actionAlignCenter ); m_actionAlignRight = new QAction( embed::getIconPixmap( "text_right" ), tr( "&Right" ), m_edit ); m_actionAlignRight->setShortcutContext( Qt::WidgetShortcut ); m_actionAlignRight->setShortcut( tr( "Ctrl+R" ) ); m_actionAlignRight->setCheckable( true ); grp->addAction( m_actionAlignRight ); m_actionAlignJustify = new QAction( embed::getIconPixmap( "text_block" ), tr( "&Justify" ), m_edit ); m_actionAlignJustify->setShortcut( tr( "Ctrl+J" ) ); m_actionAlignJustify->setCheckable( true ); grp->addAction( m_actionAlignJustify ); QPixmap pix( 16, 16 ); pix.fill( Qt::black ); m_actionTextColor = new QAction( pix, tr( "&Color..." ), this ); connect( m_actionTextColor, SIGNAL( triggered() ), this, SLOT( textColor() ) ); tb->addWidget( m_comboFont ); tb->addWidget( m_comboSize ); tb->addAction( m_actionTextBold ); tb->addAction( m_actionTextItalic ); tb->addAction( m_actionTextUnderline ); tb->addAction( m_actionAlignLeft ); tb->addAction( m_actionAlignCenter ); tb->addAction( m_actionAlignRight ); tb->addAction( m_actionAlignJustify ); tb->addAction( m_actionTextColor ); } void projectNotes::textBold() { m_edit->setFontWeight( m_actionTextBold->isChecked() ? QFont::Bold : QFont::Normal ); engine::getSong()->setModified(); } void projectNotes::textUnderline() { m_edit->setFontUnderline( m_actionTextUnderline->isChecked() ); engine::getSong()->setModified(); } void projectNotes::textItalic() { m_edit->setFontItalic( m_actionTextItalic->isChecked() ); engine::getSong()->setModified(); } void projectNotes::textFamily( const QString & _f ) { m_edit->setFontFamily( _f ); m_edit->viewport()->setFocus(); engine::getSong()->setModified(); } void projectNotes::textSize( const QString & _p ) { m_edit->setFontPointSize( _p.toInt() ); m_edit->viewport()->setFocus(); engine::getSong()->setModified(); } void projectNotes::textColor() { QColor col = QColorDialog::getColor( m_edit->textColor(), this ); if ( !col.isValid() ) { return; } m_edit->setTextColor( col ); QPixmap pix( 16, 16 ); pix.fill( Qt::black ); m_actionTextColor->setIcon( pix ); } void projectNotes::textAlign( QAction * _a ) { if( _a == m_actionAlignLeft ) { m_edit->setAlignment( Qt::AlignLeft ); } else if( _a == m_actionAlignCenter ) { m_edit->setAlignment( Qt::AlignHCenter ); } else if( _a == m_actionAlignRight ) { m_edit->setAlignment( Qt::AlignRight ); } else if( _a == m_actionAlignJustify ) { m_edit->setAlignment( Qt::AlignJustify ); } } void projectNotes::formatChanged( const QTextCharFormat & _f ) { QFont font = _f.font(); m_comboFont->lineEdit()->setText( font.family() ); m_comboSize->lineEdit()->setText( QString::number( font.pointSize() ) ); m_actionTextBold->setChecked( font.bold() ); m_actionTextItalic->setChecked( font.italic() ); m_actionTextUnderline->setChecked( font.underline() ); QPixmap pix( 16, 16 ); pix.fill( _f.foreground().color() ); m_actionTextColor->setIcon( pix ); engine::getSong()->setModified(); } void projectNotes::alignmentChanged( int _a ) { if ( _a & Qt::AlignLeft ) { m_actionAlignLeft->setChecked( true ); } else if ( ( _a & Qt::AlignHCenter ) ) { m_actionAlignCenter->setChecked( true ); } else if ( ( _a & Qt::AlignRight ) ) { m_actionAlignRight->setChecked( true ); } else if ( ( _a & Qt::AlignJustify ) ) { m_actionAlignJustify->setChecked( true ); } engine::getSong()->setModified(); } void projectNotes::saveSettings( QDomDocument & _doc, QDomElement & _this ) { MainWindow::saveWidgetState( this, _this ); QDomCDATASection ds = _doc.createCDATASection( m_edit->toHtml() ); _this.appendChild( ds ); } void projectNotes::loadSettings( const QDomElement & _this ) { MainWindow::restoreWidgetState( this, _this ); m_edit->setHtml( _this.text() ); } #include "moc_project_notes.cxx" lmms-1.1.3/src/gui/widgets/rename_dialog.cpp000066400000000000000000000035141247673406200210150ustar00rootroot00000000000000/* * rename_dialog.cpp - implementation of dialog for renaming something * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "rename_dialog.h" renameDialog::renameDialog( QString & _string ) : QDialog(), m_stringToEdit( _string ), m_originalString( _string ) { setWindowTitle( tr("Rename...") ); m_stringLE = new QLineEdit( this ); m_stringLE->setText( _string ); m_stringLE->setGeometry ( 10, 5, 220, 20 ); m_stringLE->selectAll(); connect( m_stringLE, SIGNAL( textChanged( const QString & ) ), this, SLOT( textChanged( const QString & ) ) ); connect( m_stringLE, SIGNAL( returnPressed() ), this, SLOT( accept() ) ); } renameDialog::~renameDialog() { } void renameDialog::keyPressEvent( QKeyEvent * _ke ) { if( _ke->key() == Qt::Key_Escape ) { m_stringLE->setText( m_originalString ); accept(); } } void renameDialog::textChanged( const QString & _new_string ) { m_stringToEdit = _new_string; } #include "moc_rename_dialog.cxx" lmms-1.1.3/src/gui/widgets/rubberband.cpp000066400000000000000000000043561247673406200203420ustar00rootroot00000000000000/* * rubberband.cpp - rubberband - either own implementation for Qt3 or wrapper * for Qt4 * * Copyright (c) 2006-2011 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "rubberband.h" rubberBand::rubberBand( QWidget * _parent ) : QRubberBand( Rectangle, _parent ) { } rubberBand::~rubberBand() { } QVector rubberBand::selectedObjects() const { QVector so = selectableObjects(); for( QVector::iterator it = so.begin(); it != so.end(); ) { if( ( *it )->isSelected() == false ) { it = so.erase( it ); } else { ++it; } } return( so ); } void rubberBand::resizeEvent( QResizeEvent * _re ) { QRubberBand::resizeEvent( _re ); QVector so = selectableObjects(); for( QVector::iterator it = so.begin(); it != so.end(); ++it ) { ( *it )->setSelected( QRect( pos(), size() ).intersects( QRect( ( *it )->mapTo( parentWidget(), QPoint() ), ( *it )->size() ) ) ); } } QVector rubberBand::selectableObjects() const { QVector so; if( parentWidget() == NULL ) { return( so ); } QList l = parentWidget()->findChildren(); for( QList::iterator it = l.begin(); it != l.end(); ++it ) { so.push_back( *it ); } return( so ); } #include "moc_rubberband.cxx" lmms-1.1.3/src/gui/widgets/tab_bar.cpp000066400000000000000000000112311247673406200176140ustar00rootroot00000000000000/* * tab_bar.cpp - implementation of tab-bar * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "tab_bar.h" #include "tab_button.h" #include "gui_templates.h" #include "tooltip.h" tabBar::tabBar( QWidget * _parent, QBoxLayout::Direction _dir ) : QWidget( _parent ), m_layout( new QBoxLayout( _dir, this ) ), m_exclusive( false ) { m_layout->setMargin( 8 ); m_layout->setSpacing( 0 ); setLayout( m_layout ); } tabBar::~tabBar() { } tabButton * tabBar::addTab( QWidget * _w, const QString & _text, int _id, bool _add_stretch, bool _text_is_tooltip ) { // already tab with id? if( m_tabs.contains( _id ) ) { // then remove it removeTab( _id ); } QString caption = ( _text_is_tooltip ) ? QString( "" ) : _text; // create tab-button tabButton * b = new tabButton( caption, _id, this ); connect( b, SIGNAL( clicked( int ) ), this, SLOT( tabClicked( int ) ) ); b->setIconSize( QSize( 48, 48 ) ); b->setFixedSize( 64, 64 ); b->show(); if( _text_is_tooltip ) { toolTip::add( b, _text ); } // small workaround, because QBoxLayout::addWidget(...) doesn't // work properly, so we first have to remove all tabs from the // layout and them add them in the correct order QMap >::iterator it; for( it = m_tabs.begin(); it != m_tabs.end(); ++it ) { m_layout->removeWidget( it.value().first ); } m_tabs.insert( _id, qMakePair( b, _w ) ); for( it = m_tabs.begin(); it != m_tabs.end(); ++it ) { m_layout->addWidget( it.value().first ); } if( _add_stretch ) { m_layout->addStretch(); } // we assume, parent-widget is a widget acting as widget-stack so all // widgets have the same size and only the one on the top is visible _w->setFixedSize( _w->parentWidget()->size() ); b->setFont( pointSize<8>( b->font() ) ); return( b ); } void tabBar::removeTab( int _id ) { // find tab-button and delete it if( m_tabs.find( _id ) != m_tabs.end() ) { delete m_tabs[_id].first; m_tabs.erase( m_tabs.find( _id ) ); } } void tabBar::setActiveTab( int _id ) { setTabState( _id, true ); hideAll( _id ); if( allHidden() ) { emit allWidgetsHidden(); } else { emit widgetShown(); } } int tabBar::activeTab() { QMap >::iterator it; for( it = m_tabs.begin(); it != m_tabs.end(); ++it ) { if( tabState( it.key() ) == true ) { return( it.key() ); } } return( -1 ); } bool tabBar::tabState( int _id ) { if( m_tabs.find( _id ) == m_tabs.end() ) { return( false ); } return( m_tabs[_id].first->isChecked() ); } void tabBar::setTabState( int _id, bool _checked ) { if( m_tabs.find( _id ) != m_tabs.end() ) { m_tabs[_id].first->setChecked( _checked ); } } void tabBar::hideAll( int _exception ) { QMap >::iterator it; for( it = m_tabs.begin(); it != m_tabs.end(); ++it ) { if( it.key() != _exception ) { setTabState( it.key(), false ); } it.value().second->hide(); } if( m_tabs.find( _exception ) != m_tabs.end() ) { if( tabState( _exception ) ) { m_tabs[_exception].second->show(); } else { m_tabs[_exception].second->hide(); } } } void tabBar::tabClicked( int _id ) { if( m_exclusive == true && activeTab() == -1 ) { setActiveTab( _id ); } else { bool all_hidden_before = allHidden(); // disable tabbar-buttons except the one clicked hideAll( _id ); bool now_hidden = allHidden(); if( all_hidden_before == true && now_hidden == false ) { emit widgetShown(); } else if( all_hidden_before == false && now_hidden == true ) { emit allWidgetsHidden(); } } } bool tabBar::allHidden() { QMap >::iterator it; for( it = m_tabs.begin(); it != m_tabs.end(); ++it ) { if( !it.value().second->isHidden() ) { return( false ); } } return( true ); } #include "moc_tab_bar.cxx" #include "moc_tab_button.cxx" lmms-1.1.3/src/gui/widgets/tab_widget.cpp000066400000000000000000000122541247673406200203410ustar00rootroot00000000000000/* * tab_widget.cpp - tabwidget for LMMS * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "tab_widget.h" #include #include #include #include #include "gui_templates.h" tabWidget::tabWidget( const QString & _caption, QWidget * _parent ) : QWidget( _parent ), m_activeTab( 0 ), m_caption( _caption ), m_tabheight( _caption.isEmpty() ? 11: 10 ) { setFont( pointSize<8>( font() ) ); setAutoFillBackground( true ); QColor bg_color = QApplication::palette().color( QPalette::Active, QPalette::Background ). darker( 132 ); QPalette pal = palette(); pal.setColor( QPalette::Background, bg_color ); setPalette( pal ); } tabWidget::~tabWidget() { } void tabWidget::addTab( QWidget * _w, const QString & _name, int _idx ) { setFont( pointSize<8>( font() ) ); widgetDesc d = { _w, _name, fontMetrics().width( _name ) + 10 } ; if( _idx < 0/* || m_widgets.contains( _idx ) == true*/ ) { while( m_widgets.contains( ++_idx ) == true ) { } } m_widgets[_idx] = d; _w->setFixedSize( width() - 4, height() - 14 ); _w->move( 2, 13 ); _w->hide(); if( m_widgets.contains( m_activeTab ) ) { // make sure new tab doesn't overlap current widget m_widgets[m_activeTab].w->show(); m_widgets[m_activeTab].w->raise(); } } void tabWidget::setActiveTab( int _idx ) { if( m_widgets.contains( _idx ) ) { int old_active = m_activeTab; m_activeTab = _idx; m_widgets[m_activeTab].w->raise(); m_widgets[m_activeTab].w->show(); if( old_active != _idx && m_widgets.contains( old_active ) ) { m_widgets[old_active].w->hide(); } update(); } } void tabWidget::mousePressEvent( QMouseEvent * _me ) { if( _me->y() > 1 && _me->y() < 13 ) { int cx = ( ( m_caption == "" ) ? 4 : 14 ) + fontMetrics().width( m_caption ); for( widgetStack::iterator it = m_widgets.begin(); it != m_widgets.end(); ++it ) { if( _me->x() >= cx && _me->x() <= cx + ( *it ).nwidth ) { setActiveTab( it.key() ); update(); return; } cx += ( *it ).nwidth; } } } void tabWidget::resizeEvent( QResizeEvent * ) { for( widgetStack::iterator it = m_widgets.begin(); it != m_widgets.end(); ++it ) { ( *it ).w->setFixedSize( width() - 4, height() - 14 ); } } void tabWidget::paintEvent( QPaintEvent * _pe ) { setFont( pointSize<8>( font() ) ); QPainter p( this ); QColor bg_color = QApplication::palette().color( QPalette::Active, QPalette::Background ); QLinearGradient g( 0, 0, 0, m_tabheight ); g.setColorAt( 0, bg_color.darker( 250 ) ); g.setColorAt( 0.1, bg_color.lighter( 120 ) ); g.setColorAt( 1, bg_color.darker( 250 ) ); p.fillRect( 0, 0, width() - 1, height() - 1, bg_color ); bool big_tab_captions = ( m_caption == "" ); p.setPen( bg_color.darker( 150 ) ); p.drawRect( 0, 0, width() - 1, height() - 1 ); p.setPen( bg_color.light( 150 ) ); p.drawLine( width() - 1, 0, width() - 1, height() - 1 ); p.drawLine( 0, height() - 1, width() - 1, height() - 1 ); p.setPen( QColor( 0, 0, 0 ) ); p.drawRect( 1, 1, width() - 3, height() - 3 ); p.fillRect( 2, 2, width() - 4, m_tabheight, g ); p.drawLine( 2, m_tabheight + 2, width() - 3, m_tabheight + 2); if( ! m_caption.isEmpty() ) { p.setPen( QColor( 255, 255, 255 ) ); p.drawText( 5, 11, m_caption ); } // Calculate the tabs' x (tabs are painted next to the caption) int tab_x_offset = m_caption.isEmpty() ? 4 : 14 + fontMetrics().width( m_caption ); QColor cap_col( 160, 160, 160 ); if( big_tab_captions ) { p.setFont( pointSize<8>( p.font() ) ); cap_col = QColor( 224, 224, 224 ); } else { p.setFont( pointSize<7>( p.font() ) ); } p.setPen( cap_col ); for( widgetStack::iterator it = m_widgets.begin(); it != m_widgets.end(); ++it ) { if( it.key() == m_activeTab ) { p.setPen( QColor( 32, 48, 64 ) ); p.fillRect( tab_x_offset, 2, ( *it ).nwidth - 6, 10, cap_col ); } p.drawText( tab_x_offset + 3, m_tabheight, ( *it ).name ); p.setPen( cap_col ); tab_x_offset += ( *it ).nwidth; } } void tabWidget::wheelEvent( QWheelEvent * _we ) { if (_we->y() > m_tabheight) return; _we->accept(); int dir = ( _we->delta() < 0 ) ? 1 : -1; int tab = m_activeTab; while( tab > -1 && static_cast( tab ) < m_widgets.count() ) { tab += dir; if( m_widgets.contains( tab ) ) { break; } } setActiveTab( tab ); } #include "moc_tab_widget.cxx" lmms-1.1.3/src/gui/widgets/tempo_sync_knob.cpp000066400000000000000000000173051247673406200214230ustar00rootroot00000000000000/* * TempoSyncKnob.cpp - adds bpm to ms conversion for knob class * * Copyright (c) 2005-2007 Danny McRae * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "TempoSyncKnob.h" #include "engine.h" #include "caption_menu.h" #include "embed.h" #include "MainWindow.h" #include "MeterDialog.h" #include "song.h" TempoSyncKnob::TempoSyncKnob( knobTypes _knob_num, QWidget * _parent, const QString & _name ) : knob( _knob_num, _parent, _name ), m_tempoSyncIcon( embed::getIconPixmap( "tempo_sync" ) ), m_tempoSyncDescription( tr( "Tempo Sync" ) ), m_custom( NULL ) { } TempoSyncKnob::~TempoSyncKnob() { if( m_custom ) { delete m_custom->parentWidget(); } } void TempoSyncKnob::modelChanged() { if( model() == NULL ) { qWarning( "no TempoSyncKnobModel has been set!" ); } if( m_custom != NULL ) { m_custom->setModel( &model()->m_custom ); } connect( model(), SIGNAL( syncModeChanged( TempoSyncMode ) ), this, SLOT( updateDescAndIcon() ) ); connect( this, SIGNAL( sliderMoved( float ) ), model(), SLOT( disableSync() ) ); updateDescAndIcon(); } void TempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) { mouseReleaseEvent( NULL ); captionMenu contextMenu( model()->displayName(), this ); addDefaultActions( &contextMenu ); contextMenu.addSeparator(); float limit = 60000.0f / ( engine::getSong()->getTempo() * model()->m_scale ); QMenu * syncMenu = contextMenu.addMenu( m_tempoSyncIcon, m_tempoSyncDescription ); if( limit / 8.0f <= model()->maxValue() ) { connect( syncMenu, SIGNAL( triggered( QAction * ) ), model(), SLOT( setTempoSync( QAction * ) ) ); syncMenu->addAction( embed::getIconPixmap( "note_none" ), tr( "No Sync" ) )->setData( (int) TempoSyncKnobModel::SyncNone ); if( limit / 0.125f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_double_whole" ), tr( "Eight beats" ) )->setData( (int) TempoSyncKnobModel::SyncDoubleWholeNote ); } if( limit / 0.25f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_whole" ), tr( "Whole note" ) )->setData( (int) TempoSyncKnobModel::SyncWholeNote ); } if( limit / 0.5f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_half" ), tr( "Half note" ) )->setData( (int) TempoSyncKnobModel::SyncHalfNote ); } if( limit <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_quarter" ), tr( "Quarter note" ) )->setData( (int) TempoSyncKnobModel::SyncQuarterNote ); } if( limit / 2.0f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_eighth" ), tr( "8th note" ) )->setData( (int) TempoSyncKnobModel::SyncEighthNote ); } if( limit / 4.0f <= model()->maxValue() ) { syncMenu->addAction( embed::getIconPixmap( "note_sixteenth" ), tr( "16th note" ) )->setData( (int) TempoSyncKnobModel::SyncSixteenthNote ); } syncMenu->addAction( embed::getIconPixmap( "note_thirtysecond" ), tr( "32nd note" ) )->setData( (int) TempoSyncKnobModel::SyncThirtysecondNote ); syncMenu->addAction( embed::getIconPixmap( "dont_know" ), tr( "Custom..." ), this, SLOT( showCustom() ) )->setData( (int) TempoSyncKnobModel::SyncCustom ); contextMenu.addSeparator(); } contextMenu.addHelpAction(); contextMenu.exec( QCursor::pos() ); delete syncMenu; } void TempoSyncKnob::updateDescAndIcon() { if( model()->m_tempoSyncMode ) { switch( model()->m_tempoSyncMode ) { case TempoSyncKnobModel::SyncCustom: m_tempoSyncDescription = tr( "Custom " ) + "(" + QString::number( model()->m_custom.numeratorModel().value() ) + "/" + QString::number( model()->m_custom.denominatorModel().value() ) + ")"; break; case TempoSyncKnobModel::SyncDoubleWholeNote: m_tempoSyncDescription = tr( "Synced to Eight Beats" ); break; case TempoSyncKnobModel::SyncWholeNote: m_tempoSyncDescription = tr( "Synced to Whole Note" ); break; case TempoSyncKnobModel::SyncHalfNote: m_tempoSyncDescription = tr( "Synced to Half Note" ); break; case TempoSyncKnobModel::SyncQuarterNote: m_tempoSyncDescription = tr( "Synced to Quarter Note" ); break; case TempoSyncKnobModel::SyncEighthNote: m_tempoSyncDescription = tr( "Synced to 8th Note" ); break; case TempoSyncKnobModel::SyncSixteenthNote: m_tempoSyncDescription = tr( "Synced to 16th Note" ); break; case TempoSyncKnobModel::SyncThirtysecondNote: m_tempoSyncDescription = tr( "Synced to 32nd Note" ); break; default: ; } } else { m_tempoSyncDescription = tr( "Tempo Sync" ); } if( m_custom != NULL && model()->m_tempoSyncMode != TempoSyncKnobModel::SyncCustom ) { m_custom->parentWidget()->hide(); } switch( model()->m_tempoSyncMode ) { case TempoSyncKnobModel::SyncNone: m_tempoSyncIcon = embed::getIconPixmap( "tempo_sync" ); break; case TempoSyncKnobModel::SyncCustom: m_tempoSyncIcon = embed::getIconPixmap( "dont_know" ); break; case TempoSyncKnobModel::SyncDoubleWholeNote: m_tempoSyncIcon = embed::getIconPixmap( "note_double_whole" ); break; case TempoSyncKnobModel::SyncWholeNote: m_tempoSyncIcon = embed::getIconPixmap( "note_whole" ); break; case TempoSyncKnobModel::SyncHalfNote: m_tempoSyncIcon = embed::getIconPixmap( "note_half" ); break; case TempoSyncKnobModel::SyncQuarterNote: m_tempoSyncIcon = embed::getIconPixmap( "note_quarter" ); break; case TempoSyncKnobModel::SyncEighthNote: m_tempoSyncIcon = embed::getIconPixmap( "note_eighth" ); break; case TempoSyncKnobModel::SyncSixteenthNote: m_tempoSyncIcon = embed::getIconPixmap( "note_sixteenth" ); break; case TempoSyncKnobModel::SyncThirtysecondNote: m_tempoSyncIcon = embed::getIconPixmap( "note_thirtysecond" ); break; default: qWarning( "TempoSyncKnob::calculateTempoSyncTime:" "invalid TempoSyncMode" ); break; } emit syncDescriptionChanged( m_tempoSyncDescription ); emit syncIconChanged(); } const QString & TempoSyncKnob::syncDescription() { return m_tempoSyncDescription; } void TempoSyncKnob::setSyncDescription( const QString & _new_description ) { m_tempoSyncDescription = _new_description; emit syncDescriptionChanged( _new_description ); } const QPixmap & TempoSyncKnob::syncIcon() { return m_tempoSyncIcon; } void TempoSyncKnob::setSyncIcon( const QPixmap & _new_icon ) { m_tempoSyncIcon = _new_icon; emit syncIconChanged(); } void TempoSyncKnob::showCustom() { if( m_custom == NULL ) { m_custom = new MeterDialog( engine::mainWindow()->workspace() ); engine::mainWindow()->workspace()->addSubWindow( m_custom ); m_custom->setWindowTitle( "Meter" ); m_custom->setModel( &model()->m_custom ); } m_custom->parentWidget()->show(); model()->setTempoSync( TempoSyncKnobModel::SyncCustom ); } #include "moc_TempoSyncKnob.cxx" lmms-1.1.3/src/gui/widgets/text_float.cpp000066400000000000000000000102671247673406200204030ustar00rootroot00000000000000/* * text_float.cpp - class textFloat, a floating text-label * * Copyright (c) 2005-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include "text_float.h" #include "gui_templates.h" #include "MainWindow.h" #include "engine.h" textFloat::textFloat() : QWidget( engine::mainWindow(), Qt::ToolTip ), m_title(), m_text(), m_pixmap() { resize( 20, 20 ); hide(); setAttribute( Qt::WA_TranslucentBackground, true ); setStyle( QApplication::style() ); setFont( pointSize<8>( font() ) ); } void textFloat::setTitle( const QString & _title ) { m_title = _title; updateSize(); } void textFloat::setText( const QString & _text ) { m_text = _text; updateSize(); } void textFloat::setPixmap( const QPixmap & _pixmap ) { m_pixmap = _pixmap; updateSize(); } void textFloat::setVisibilityTimeOut( int _msecs ) { QTimer::singleShot( _msecs, this, SLOT( hide() ) ); show(); } textFloat * textFloat::displayMessage( const QString & _msg, int _timeout, QWidget * _parent, int _add_y_margin ) { QWidget * mw = engine::mainWindow(); textFloat * tf = new textFloat; if( _parent != NULL ) { tf->moveGlobal( _parent, QPoint( _parent->width() + 2, 0 ) ); } else { tf->moveGlobal( mw, QPoint( 32, mw->height() - tf->height() - 8 - _add_y_margin ) ); } tf->setText( _msg ); tf->show(); if( _timeout > 0 ) { tf->setAttribute( Qt::WA_DeleteOnClose, true ); QTimer::singleShot( _timeout, tf, SLOT( close() ) ); } return( tf ); } textFloat * textFloat::displayMessage( const QString & _title, const QString & _msg, const QPixmap & _pixmap, int _timeout, QWidget * _parent ) { textFloat * tf = displayMessage( _msg, _timeout, _parent, 16 ); tf->setTitle( _title ); tf->setPixmap( _pixmap ); return( tf ); } void textFloat::paintEvent( QPaintEvent * _pe ) { QStyleOption opt; opt.init( this ); QPainter p( this ); p.fillRect( 0, 0, width(), height(), QColor( 0, 0, 0, 0 ) ); /* p.setPen( p.pen().brush().color() ); p.setBrush( p.background() );*/ p.setFont( pointSize<8>( p.font() ) ); style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this ); /* p.drawRect( 0, 0, rect().right(), rect().bottom() );*/ if( m_title.isEmpty() ) { p.drawText( opt.rect, Qt::AlignCenter, m_text ); } else { int text_x = opt.rect.left() + 2; int text_y = opt.rect.top() + 12; if( m_pixmap.isNull() == false ) { p.drawPixmap( opt.rect.topLeft() + QPoint( 5, 5 ), m_pixmap ); text_x += m_pixmap.width() + 8; } p.drawText( text_x, text_y + 16, m_text ); QFont f = p.font(); f.setBold( true ); p.setFont( f ); p.drawText( text_x, text_y, m_title ); } } void textFloat::mousePressEvent( QMouseEvent * ) { close(); } void textFloat::updateSize() { QFontMetrics metrics( pointSize<8>( font() ) ); QRect textBound = metrics.boundingRect( m_text ); if( !m_title.isEmpty() ) { QFont f = pointSize<8>( font() ); f.setBold( true ); int title_w = QFontMetrics( f ).boundingRect( m_title ).width(); if( title_w > textBound.width() ) { textBound.setWidth( title_w ); } textBound.setHeight( textBound.height() * 2 + 8 ); } if( m_pixmap.isNull() == false ) { textBound.setWidth( textBound.width() + m_pixmap.width() + 10 ); } resize( textBound.width() + 5, textBound.height()+2 ); //move( QPoint( parentWidget()->width() + 5, 5 ) ); update(); } #include "moc_text_float.cxx" lmms-1.1.3/src/gui/widgets/tool_button.cpp000066400000000000000000000050231247673406200205740ustar00rootroot00000000000000/* * tool_button.cpp - implementation of LMMS-tool-button for common (cool) look * * Copyright (c) 2005-2006 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "tool_button.h" #include "tooltip.h" const QColor toolButton::s_stdColor = QColor( 216, 216, 216 ); const QColor toolButton::s_hlColor = QColor( 240, 240, 240 ); toolButton::toolButton( const QPixmap & _pixmap, const QString & _tooltip, QObject * _receiver, const char * _slot, QWidget * _parent ) : QToolButton( _parent ), m_colorStandard( s_stdColor ), m_colorHighlighted( s_hlColor ) { setAutoFillBackground( false ); QPalette pal = palette(); pal.setColor( backgroundRole(), m_colorStandard ); pal.setColor( QPalette::Window, m_colorStandard ); pal.setColor( QPalette::Button, m_colorStandard ); setPalette( pal ); if( _receiver != NULL && _slot != NULL ) { connect( this, SIGNAL( clicked() ), _receiver, _slot ); } toolTip::add( this, _tooltip ); setFixedSize( 30, 30 ); setIcon( _pixmap ); leaveEvent( NULL ); connect( this, SIGNAL( toggled( bool ) ), this, SLOT( toggledBool( bool ) ) ); } toolButton::~toolButton() { } void toolButton::enterEvent( QEvent * ) { QPalette pal = palette(); pal.setColor( backgroundRole(), m_colorHighlighted ); pal.setColor( QPalette::Window, m_colorHighlighted ); pal.setColor( QPalette::Button, m_colorHighlighted ); setPalette( pal ); } void toolButton::leaveEvent( QEvent * ) { QPalette pal = palette(); pal.setColor( backgroundRole(), m_colorStandard ); pal.setColor( QPalette::Window, m_colorStandard ); pal.setColor( QPalette::Button, m_colorStandard ); setPalette( pal ); } void toolButton::toggledBool( bool _on ) { if( _on == true ) { emit( clicked() ); } } #include "moc_tool_button.cxx" lmms-1.1.3/src/gui/widgets/tooltip.cpp000066400000000000000000000022361247673406200177210ustar00rootroot00000000000000/* * tooltip.cpp - namespace toolTip, a tooltip-wrapper for LMMS * * Copyright (c) 2005-2006 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "tooltip.h" #include "config_mgr.h" void toolTip::add( QWidget * _w, const QString & _txt ) { if( !configManager::inst()->value( "tooltips", "disabled" ).toInt() ) { _w->setToolTip( _txt ); } } lmms-1.1.3/src/gui/widgets/track_label_button.cpp000066400000000000000000000065471247673406200220760ustar00rootroot00000000000000/* * track_label_button.cpp - implementation of class trackLabelButton, a label * which is renamable by double-clicking it * * Copyright (c) 2004-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "track_label_button.h" #include "embed.h" #include "rename_dialog.h" #include "InstrumentTrack.h" #include "Instrument.h" #include "config_mgr.h" #include "engine.h" trackLabelButton::trackLabelButton( trackView * _tv, QWidget * _parent ) : QToolButton( _parent ), m_trackView( _tv ), m_iconName() { setAttribute( Qt::WA_OpaquePaintEvent, true ); setAcceptDrops( true ); setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { setFixedSize( 32, 29 ); } else { setFixedSize( 160, 29 ); } setIconSize( QSize( 24, 24 ) ); setText( " " ); connect( m_trackView->getTrack(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); } trackLabelButton::~trackLabelButton() { } void trackLabelButton::rename() { QString txt = m_trackView->getTrack()->name(); renameDialog rename_dlg( txt ); rename_dlg.exec(); if( txt != text() ) { m_trackView->getTrack()->setName( txt ); } } void trackLabelButton::dragEnterEvent( QDragEnterEvent * _dee ) { m_trackView->dragEnterEvent( _dee ); } void trackLabelButton::dropEvent( QDropEvent * _de ) { m_trackView->dropEvent( _de ); setChecked( true ); } void trackLabelButton::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::RightButton ) { rename(); } else { QToolButton::mousePressEvent( _me ); } } void trackLabelButton::mouseDoubleClickEvent( QMouseEvent * _me ) { rename(); } void trackLabelButton::paintEvent( QPaintEvent * _pe ) { if( m_trackView->getTrack()->type() == track::InstrumentTrack ) { InstrumentTrack * it = dynamic_cast( m_trackView->getTrack() ); const PixmapLoader * pl; if( it && it->instrument() && it->instrument()->descriptor() && ( pl = it->instrument()->descriptor()->logo ) ) { if( pl->pixmapName() != m_iconName ) { m_iconName = pl->pixmapName(); setIcon( pl->pixmap() ); } } } if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { setText(""); setToolTip( m_trackView->getTrack()->displayName() ); } else { setText( m_trackView->getTrack()->displayName() ); } QToolButton::paintEvent( _pe ); } #include "moc_track_label_button.cxx" lmms-1.1.3/src/gui/widgets/visualization_widget.cpp000066400000000000000000000110361247673406200224710ustar00rootroot00000000000000/* * visualization_widget.cpp - widget for visualization of sound-data * * Copyright (c) 2005-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include "visualization_widget.h" #include "gui_templates.h" #include "MainWindow.h" #include "embed.h" #include "engine.h" #include "tooltip.h" #include "song.h" #include "config_mgr.h" visualizationWidget::visualizationWidget( const QPixmap & _bg, QWidget * _p, visualizationTypes _vtype ) : QWidget( _p ), s_background( _bg ), m_points( new QPointF[engine::mixer()->framesPerPeriod()] ), m_active( false ) { setFixedSize( s_background.width(), s_background.height() ); setAttribute( Qt::WA_OpaquePaintEvent, true ); setActive( configManager::inst()->value( "ui", "displaywaveform").toInt() ); const fpp_t frames = engine::mixer()->framesPerPeriod(); m_buffer = new sampleFrame[frames]; engine::mixer()->clearAudioBuffer( m_buffer, frames ); toolTip::add( this, tr( "click to enable/disable visualization of " "master-output" ) ); } visualizationWidget::~visualizationWidget() { delete[] m_buffer; delete[] m_points; } void visualizationWidget::updateAudioBuffer() { if( !engine::getSong()->isExporting() ) { engine::mixer()->lock(); const surroundSampleFrame * c = engine::mixer()-> currentReadBuffer(); const fpp_t fpp = engine::mixer()->framesPerPeriod(); memcpy( m_buffer, c, sizeof( surroundSampleFrame ) * fpp ); engine::mixer()->unlock(); } } void visualizationWidget::setActive( bool _active ) { m_active = _active; if( m_active ) { connect( engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); connect( engine::mixer(), SIGNAL( nextAudioBuffer() ), this, SLOT( updateAudioBuffer() ) ); } else { disconnect( engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); disconnect( engine::mixer(), SIGNAL( nextAudioBuffer() ), this, SLOT( updateAudioBuffer() ) ); // we have to update (remove last waves), // because timer doesn't do that anymore update(); } } void visualizationWidget::paintEvent( QPaintEvent * ) { QPainter p( this ); p.drawPixmap( 0, 0, s_background ); if( m_active && !engine::getSong()->isExporting() ) { float master_output = engine::mixer()->masterGain(); int w = width()-4; const float half_h = -( height() - 6 ) / 3.0 * master_output - 1; int x_base = 2; const float y_base = height()/2 - 0.5f; // p.setClipRect( 2, 2, w, height()-4 ); const fpp_t frames = engine::mixer()->framesPerPeriod(); const float max_level = qMax( Mixer::peakValueLeft( m_buffer, frames ), Mixer::peakValueRight( m_buffer, frames ) ); // and set color according to that... if( max_level * master_output < 0.9 ) { p.setPen( QColor( 71, 253, 133 ) ); } else if( max_level * master_output < 1.0 ) { p.setPen( QColor( 255, 192, 64 ) ); } else { p.setPen( QColor( 255, 64, 64 ) ); } p.setPen( QPen( p.pen().color(), 0.7 ) ); const float xd = (float) w / frames; p.setRenderHint( QPainter::Antialiasing ); // now draw all that stuff for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { for( int frame = 0; frame < frames; ++frame ) { m_points[frame] = QPointF( x_base + (float) frame * xd, y_base + ( Mixer::clip( m_buffer[frame][ch] ) * half_h ) ); } p.drawPolyline( m_points, frames ); } } else { p.setPen( QColor( 192, 192, 192 ) ); p.setFont( pointSize<7>( p.font() ) ); p.drawText( 6, height()-5, tr( "Click to enable" ) ); } } void visualizationWidget::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton ) { setActive( !m_active ); } } #include "moc_visualization_widget.cxx" lmms-1.1.3/src/tracks/000077500000000000000000000000001247673406200145555ustar00rootroot00000000000000lmms-1.1.3/src/tracks/AutomationTrack.cpp000066400000000000000000000103071247673406200203670ustar00rootroot00000000000000/* * AutomationTrack.cpp - AutomationTrack handles automation of objects without * a track * * Copyright (c) 2008-2014 Tobias Doerffel * Copyright (c) 2006-2008 Javier Serrano Polo * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "AutomationTrack.h" #include "AutomationPattern.h" #include "engine.h" #include "embed.h" #include "ProjectJournal.h" #include "string_pair_drag.h" #include "TrackContainerView.h" #include "track_label_button.h" AutomationTrack::AutomationTrack( TrackContainer* tc, bool _hidden ) : track( _hidden ? HiddenAutomationTrack : track::AutomationTrack, tc ) { setName( tr( "Automation track" ) ); } AutomationTrack::~AutomationTrack() { } bool AutomationTrack::play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _frame_base, int _tco_num ) { if( isMuted() ) { return false; } tcoVector tcos; if( _tco_num >= 0 ) { trackContentObject * tco = getTCO( _tco_num ); tcos.push_back( tco ); } else { getTCOsInRange( tcos, _start, _start + static_cast( _frames / engine::framesPerTick()) ); } for( tcoVector::iterator it = tcos.begin(); it != tcos.end(); ++it ) { AutomationPattern * p = dynamic_cast( *it ); if( p == NULL || ( *it )->isMuted() ) { continue; } MidiTime cur_start = _start; if( _tco_num < 0 ) { cur_start -= p->startPosition(); } p->processMidiTime( cur_start ); } return false; } trackView * AutomationTrack::createView( TrackContainerView* tcv ) { return new AutomationTrackView( this, tcv ); } trackContentObject * AutomationTrack::createTCO( const MidiTime & ) { return new AutomationPattern( this ); } void AutomationTrack::saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _this ) { } void AutomationTrack::loadTrackSpecificSettings( const QDomElement & _this ) { // just in case something somehow wrent wrong... if( type() == HiddenAutomationTrack ) { setMuted( false ); } } AutomationTrackView::AutomationTrackView( AutomationTrack * _at, TrackContainerView* tcv ) : trackView( _at, tcv ) { setFixedHeight( 32 ); trackLabelButton * tlb = new trackLabelButton( this, getTrackSettingsWidget() ); tlb->setIcon( embed::getIconPixmap( "automation_track" ) ); tlb->move( 3, 1 ); tlb->show(); setModel( _at ); } AutomationTrackView::~AutomationTrackView() { } void AutomationTrackView::dragEnterEvent( QDragEnterEvent * _dee ) { stringPairDrag::processDragEnterEvent( _dee, "automatable_model" ); } void AutomationTrackView::dropEvent( QDropEvent * _de ) { QString type = stringPairDrag::decodeKey( _de ); QString val = stringPairDrag::decodeValue( _de ); if( type == "automatable_model" ) { AutomatableModel * mod = dynamic_cast( engine::projectJournal()-> journallingObject( val.toInt() ) ); if( mod != NULL ) { MidiTime pos = MidiTime( trackContainerView()-> currentPosition() + ( _de->pos().x() - getTrackContentWidget()->x() ) * MidiTime::ticksPerTact() / static_cast( trackContainerView()->pixelsPerTact() ) ) .toAbsoluteTact(); if( pos.getTicks() < 0 ) { pos.setTicks( 0 ); } trackContentObject * tco = getTrack()->createTCO( pos ); AutomationPattern * pat = dynamic_cast( tco ); pat->addObject( mod ); pat->movePosition( pos ); } } update(); } #include "moc_AutomationTrack.cxx" lmms-1.1.3/src/tracks/InstrumentTrack.cpp000066400000000000000000001147341247673406200204300ustar00rootroot00000000000000/* * InstrumentTrack.cpp - implementation of instrument-track-class * (window + data-structures) * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "FileDialog.h" #include "InstrumentTrack.h" #include "AudioPort.h" #include "AutomationPattern.h" #include "bb_track.h" #include "config_mgr.h" #include "ControllerConnection.h" #include "debug.h" #include "EffectChain.h" #include "EffectRackView.h" #include "embed.h" #include "engine.h" #include "FileBrowser.h" #include "FxMixer.h" #include "FxMixerView.h" #include "InstrumentSoundShaping.h" #include "InstrumentSoundShapingView.h" #include "fade_button.h" #include "gui_templates.h" #include "Instrument.h" #include "InstrumentFunctionViews.h" #include "InstrumentMidiIOView.h" #include "knob.h" #include "LcdSpinBox.h" #include "led_checkbox.h" #include "MainWindow.h" #include "MidiClient.h" #include "MidiPortMenu.h" #include "MixHelpers.h" #include "DataFile.h" #include "NotePlayHandle.h" #include "Pattern.h" #include "PluginView.h" #include "SamplePlayHandle.h" #include "song.h" #include "string_pair_drag.h" #include "tab_widget.h" #include "tooltip.h" #include "track_label_button.h" const char * volume_help = QT_TRANSLATE_NOOP( "InstrumentTrack", "With this knob you can set " "the volume of the opened " "channel."); const int INSTRUMENT_WIDTH = 254; const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH; const int PIANO_HEIGHT = 82; const int INSTRUMENT_WINDOW_CACHE_SIZE = 8; // #### IT: InstrumentTrack::InstrumentTrack( TrackContainer* tc ) : track( track::InstrumentTrack, tc ), MidiEventProcessor(), m_audioPort( tr( "unnamed_track" ) ), m_midiPort( tr( "unnamed_track" ), engine::mixer()->midiClient(), this, this ), m_notes(), m_sustainPedalPressed( false ), m_silentBuffersProcessed( false ), m_baseNoteModel( 0, 0, KeysPerOctave * NumOctaves - 1, this, tr( "Base note" ) ), m_volumeModel( DefaultVolume, MinVolume, MaxVolume, 0.1f, this, tr( "Volume" ) ), m_panningModel( DefaultPanning, PanningLeft, PanningRight, 0.1f, this, tr( "Panning" ) ), m_pitchModel( 0, MinPitchDefault, MaxPitchDefault, 1, this, tr( "Pitch" ) ), m_pitchRangeModel( 1, 1, 24, this, tr( "Pitch range" ) ), m_effectChannelModel( 0, 0, 0, this, tr( "FX channel" ) ), m_instrument( NULL ), m_soundShaping( this ), m_arpeggio( this ), m_noteStacking( this ), m_piano( this ) { m_pitchModel.setCenterValue( 0 ); m_panningModel.setCenterValue( DefaultPanning ); m_baseNoteModel.setInitValue( DefaultKey ); connect( &m_baseNoteModel, SIGNAL( dataChanged() ), this, SLOT( updateBaseNote() ) ); connect( &m_pitchModel, SIGNAL( dataChanged() ), this, SLOT( updatePitch() ) ); connect( &m_pitchRangeModel, SIGNAL( dataChanged() ), this, SLOT( updatePitchRange() ) ); m_effectChannelModel.setRange( 0, engine::fxMixer()->numChannels()-1, 1); for( int i = 0; i < NumKeys; ++i ) { m_notes[i] = NULL; m_runningMidiNotes[i] = 0; } setName( tr( "Default preset" ) ); } int InstrumentTrack::baseNote() const { return m_baseNoteModel.value() - engine::getSong()->masterPitch(); } InstrumentTrack::~InstrumentTrack() { // kill all running notes and the iph silenceAllNotes( true ); // now we're save deleting the instrument delete m_instrument; } void InstrumentTrack::processAudioBuffer( sampleFrame* buf, const fpp_t frames, NotePlayHandle* n ) { // we must not play the sound if this InstrumentTrack is muted... if( isMuted() || ( n && n->isBbTrackMuted() ) ) { return; } // Test for silent input data if instrument provides a single stream only (i.e. driven by InstrumentPlayHandle) // We could do that in all other cases as well but the overhead for silence test is bigger than // what we potentially save. While playing a note, a NotePlayHandle-driven instrument will produce sound in // 99 of 100 cases so that test would be a waste of time. if( m_instrument->flags().testFlag( Instrument::IsSingleStreamed ) && MixHelpers::isSilent( buf, frames ) ) { // at least pass one silent buffer to allow if( m_silentBuffersProcessed ) { // skip further processing return; } m_silentBuffersProcessed = true; } else { m_silentBuffersProcessed = false; } // if effects "went to sleep" because there was no input, wake them up // now m_audioPort.effects()->startRunning(); float v_scale = (float) getVolume() / DefaultVolume; // instruments using instrument-play-handles will call this method // without any knowledge about notes, so they pass NULL for n, which // is no problem for us since we just bypass the envelopes+LFOs if( m_instrument->flags().testFlag( Instrument::IsSingleStreamed ) == false && n != NULL ) { m_soundShaping.processAudioBuffer( buf, frames, n ); v_scale *= ( (float) n->getVolume() / DefaultVolume ); } m_audioPort.setNextFxChannel( m_effectChannelModel.value() ); int framesToMix = frames; int offset = 0; int panning = m_panningModel.value(); if( n ) { framesToMix = qMin( n->framesLeftForCurrentPeriod(), framesToMix ); offset = n->offset(); panning += n->getPanning(); panning = tLimit( panning, PanningLeft, PanningRight ); } engine::mixer()->bufferToPort( buf, framesToMix, offset, panningToVolumeVector( panning, v_scale ), &m_audioPort ); } MidiEvent InstrumentTrack::applyMasterKey( const MidiEvent& event ) { MidiEvent copy( event ); switch( event.type() ) { case MidiNoteOn: case MidiNoteOff: case MidiKeyPressure: copy.setKey( masterKey( event.key() ) ); break; default: break; } return copy; } void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset ) { engine::mixer()->lock(); bool eventHandled = false; switch( event.type() ) { // we don't send MidiNoteOn, MidiNoteOff and MidiKeyPressure // events to instrument as NotePlayHandle will send them on its // own case MidiNoteOn: if( event.velocity() > 0 ) { if( m_notes[event.key()] == NULL ) { // create (timed) note-play-handle NotePlayHandle* nph = new NotePlayHandle( this, time.frames( engine::framesPerTick() ), typeInfo::max() / 2, note( MidiTime(), MidiTime(), event.key(), event.volume( midiPort()->baseVelocity() ) ), NULL, event.channel(), NotePlayHandle::OriginMidiInput ); if( engine::mixer()->addPlayHandle( nph ) ) { m_notes[event.key()] = nph; } } eventHandled = true; break; } case MidiNoteOff: if( m_notes[event.key()] != NULL ) { // do actual note off and remove internal reference to NotePlayHandle (which itself will // be deleted later automatically) m_notes[event.key()]->noteOff(); m_notes[event.key()] = NULL; } eventHandled = true; break; case MidiKeyPressure: if( m_notes[event.key()] != NULL ) { // setVolume() calls processOutEvent() with MidiKeyPressure so the // attached instrument will receive the event as well m_notes[event.key()]->setVolume( event.volume( midiPort()->baseVelocity() ) ); } eventHandled = true; break; case MidiPitchBend: // updatePitch() is connected to m_pitchModel::dataChanged() which will send out // MidiPitchBend events m_pitchModel.setValue( m_pitchModel.minValue() + event.pitchBend() * m_pitchModel.range() / MidiMaxPitchBend ); break; case MidiControlChange: if( event.controllerNumber() == MidiControllerSustain ) { if( event.controllerValue() > MidiMaxControllerValue/2 ) { m_sustainPedalPressed = true; } else { m_sustainPedalPressed = false; } } if( event.controllerNumber() == MidiControllerAllSoundOff || event.controllerNumber() == MidiControllerAllNotesOff || event.controllerNumber() == MidiControllerOmniOn || event.controllerNumber() == MidiControllerOmniOff || event.controllerNumber() == MidiControllerMonoOn || event.controllerNumber() == MidiControllerPolyOn ) { silenceAllNotes(); } break; case MidiMetaEvent: // handle special cases such as note panning switch( event.metaEvent() ) { case MidiNotePanning: if( m_notes[event.key()] != NULL ) { eventHandled = true; m_notes[event.key()]->setPanning( event.panning() ); } break; default: qWarning( "InstrumentTrack: unhandled MIDI meta event: %i", event.metaEvent() ); break; } break; default: break; } if( eventHandled == false && instrument()->handleMidiEvent( event, time, offset ) == false ) { qWarning( "InstrumentTrack: unhandled MIDI event %d", event.type() ); } engine::mixer()->unlock(); } void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset ) { // do nothing if we do not have an instrument instance (e.g. when loading settings) if( m_instrument == NULL ) { return; } const MidiEvent transposedEvent = applyMasterKey( event ); const int key = transposedEvent.key(); switch( event.type() ) { case MidiNoteOn: m_piano.setKeyState( event.key(), true ); // event.key() = original key if( key >= 0 && key < NumKeys ) { if( m_runningMidiNotes[key] > 0 ) { m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time, offset ); } ++m_runningMidiNotes[key]; m_instrument->handleMidiEvent( MidiEvent( MidiNoteOn, midiPort()->realOutputChannel(), key, event.velocity() ), time, offset ); emit newNote(); } break; case MidiNoteOff: m_piano.setKeyState( event.key(), false ); // event.key() = original key if( key >= 0 && key < NumKeys && --m_runningMidiNotes[key] <= 0 ) { m_runningMidiNotes[key] = qMax( 0, m_runningMidiNotes[key] ); m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time, offset ); } break; default: m_instrument->handleMidiEvent( transposedEvent, time, offset ); break; } // if appropriate, midi-port does futher routing m_midiPort.processOutEvent( event, time ); } void InstrumentTrack::silenceAllNotes( bool removeIPH ) { engine::mixer()->lock(); for( int i = 0; i < NumKeys; ++i ) { m_notes[i] = NULL; m_runningMidiNotes[i] = 0; } // invalidate all NotePlayHandles linked to this track m_processHandles.clear(); engine::mixer()->removePlayHandles( this, removeIPH ); engine::mixer()->unlock(); } f_cnt_t InstrumentTrack::beatLen( NotePlayHandle * _n ) const { if( m_instrument != NULL ) { const f_cnt_t len = m_instrument->beatLen( _n ); if( len > 0 ) { return len; } } return m_soundShaping.envFrames(); } void InstrumentTrack::playNote( NotePlayHandle* n, sampleFrame* workingBuffer ) { // arpeggio- and chord-widget has to do its work -> adding sub-notes // for chords/arpeggios m_noteStacking.processNote( n ); m_arpeggio.processNote( n ); if( n->isMasterNote() == false && m_instrument != NULL ) { // all is done, so now lets play the note! m_instrument->playNote( n, workingBuffer ); } } QString InstrumentTrack::instrumentName() const { if( m_instrument != NULL ) { return m_instrument->displayName(); } return QString::null; } void InstrumentTrack::deleteNotePluginData( NotePlayHandle* n ) { if( m_instrument != NULL ) { m_instrument->deleteNotePluginData( n ); } } void InstrumentTrack::setName( const QString & _new_name ) { // when changing name of track, also change name of those patterns, // which have the same name as the instrument-track for( int i = 0; i < numOfTCOs(); ++i ) { Pattern* p = dynamic_cast( getTCO( i ) ); if( ( p != NULL && p->name() == name() ) || p->name() == "" ) { p->setName( _new_name ); } } track::setName( _new_name ); m_midiPort.setName( name() ); m_audioPort.setName( name() ); emit nameChanged(); } void InstrumentTrack::updateBaseNote() { engine::mixer()->lock(); for( NotePlayHandleList::Iterator it = m_processHandles.begin(); it != m_processHandles.end(); ++it ) { ( *it )->updateFrequency(); } engine::mixer()->unlock(); } void InstrumentTrack::updatePitch() { updateBaseNote(); processOutEvent( MidiEvent( MidiPitchBend, midiPort()->realOutputChannel(), midiPitch() ) ); } void InstrumentTrack::updatePitchRange() { const int r = m_pitchRangeModel.value(); m_pitchModel.setRange( MinPitchDefault * r, MaxPitchDefault * r ); processOutEvent( MidiEvent( MidiControlChange, midiPort()->realOutputChannel(), MidiControllerRegisteredParameterNumberLSB, MidiPitchBendSensitivityRPN & 0x7F ) ); processOutEvent( MidiEvent( MidiControlChange, midiPort()->realOutputChannel(), MidiControllerRegisteredParameterNumberMSB, ( MidiPitchBendSensitivityRPN >> 8 ) & 0x7F ) ); processOutEvent( MidiEvent( MidiControlChange, midiPort()->realOutputChannel(), MidiControllerDataEntry, midiPitchRange() ) ); } int InstrumentTrack::masterKey( int _midi_key ) const { int key = baseNote(); return tLimit( _midi_key - ( key - DefaultKey ), 0, NumKeys ); } void InstrumentTrack::removeMidiPortNode( DataFile & _dataFile ) { QDomNodeList n = _dataFile.elementsByTagName( "midiport" ); n.item( 0 ).parentNode().removeChild( n.item( 0 ) ); } bool InstrumentTrack::play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _offset, int _tco_num ) { const float frames_per_tick = engine::framesPerTick(); tcoVector tcos; bbTrack * bb_track = NULL; if( _tco_num >= 0 ) { trackContentObject * tco = getTCO( _tco_num ); tcos.push_back( tco ); bb_track = bbTrack::findBBTrack( _tco_num ); } else { getTCOsInRange( tcos, _start, _start + static_cast( _frames / frames_per_tick ) ); } // Handle automation: detuning for( NotePlayHandleList::Iterator it = m_processHandles.begin(); it != m_processHandles.end(); ++it ) { ( *it )->processMidiTime( _start ); } if ( tcos.size() == 0 ) { return false; } bool played_a_note = false; // will be return variable for( tcoVector::Iterator it = tcos.begin(); it != tcos.end(); ++it ) { Pattern* p = dynamic_cast( *it ); // everything which is not a pattern or muted won't be played if( p == NULL || ( *it )->isMuted() ) { continue; } MidiTime cur_start = _start; if( _tco_num < 0 ) { cur_start -= p->startPosition(); } // get all notes from the given pattern... const NoteVector & notes = p->notes(); // ...and set our index to zero NoteVector::ConstIterator nit = notes.begin(); // very effective algorithm for playing notes that are // posated within the current sample-frame if( cur_start > 0 ) { // skip notes which are posated before start-tact while( nit != notes.end() && ( *nit )->pos() < cur_start ) { ++nit; } } note * cur_note; while( nit != notes.end() && ( cur_note = *nit )->pos() == cur_start ) { if( cur_note->length() != 0 ) { const f_cnt_t note_frames = cur_note->length().frames( frames_per_tick ); NotePlayHandle* notePlayHandle = new NotePlayHandle( this, _offset, note_frames, *cur_note ); notePlayHandle->setBBTrack( bb_track ); // are we playing global song? if( _tco_num < 0 ) { // then set song-global offset of pattern in order to // properly perform the note detuning notePlayHandle->setSongGlobalParentOffset( p->startPosition() ); } engine::mixer()->addPlayHandle( notePlayHandle ); played_a_note = true; } ++nit; } } return played_a_note; } trackContentObject * InstrumentTrack::createTCO( const MidiTime & ) { return new Pattern( this ); } trackView * InstrumentTrack::createView( TrackContainerView* tcv ) { return new InstrumentTrackView( this, tcv ); } void InstrumentTrack::saveTrackSpecificSettings( QDomDocument& doc, QDomElement & thisElement ) { m_volumeModel.saveSettings( doc, thisElement, "vol" ); m_panningModel.saveSettings( doc, thisElement, "pan" ); m_pitchModel.saveSettings( doc, thisElement, "pitch" ); m_pitchRangeModel.saveSettings( doc, thisElement, "pitchrange" ); m_effectChannelModel.saveSettings( doc, thisElement, "fxch" ); m_baseNoteModel.saveSettings( doc, thisElement, "basenote" ); if( m_instrument != NULL ) { QDomElement i = doc.createElement( "instrument" ); i.setAttribute( "name", m_instrument->descriptor()->name ); m_instrument->saveState( doc, i ); thisElement.appendChild( i ); } m_soundShaping.saveState( doc, thisElement ); m_noteStacking.saveState( doc, thisElement ); m_arpeggio.saveState( doc, thisElement ); m_midiPort.saveState( doc, thisElement ); m_audioPort.effects()->saveState( doc, thisElement ); } void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & thisElement ) { silenceAllNotes( true ); engine::mixer()->lock(); m_volumeModel.loadSettings( thisElement, "vol" ); m_panningModel.loadSettings( thisElement, "pan" ); m_pitchRangeModel.loadSettings( thisElement, "pitchrange" ); m_pitchModel.loadSettings( thisElement, "pitch" ); m_effectChannelModel.setRange( 0, engine::fxMixer()->numChannels()-1 ); m_effectChannelModel.loadSettings( thisElement, "fxch" ); m_baseNoteModel.loadSettings( thisElement, "basenote" ); // clear effect-chain just in case we load an old preset without FX-data m_audioPort.effects()->clear(); QDomNode node = thisElement.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( m_soundShaping.nodeName() == node.nodeName() ) { m_soundShaping.restoreState( node.toElement() ); } else if( m_noteStacking.nodeName() == node.nodeName() ) { m_noteStacking.restoreState( node.toElement() ); } else if( m_arpeggio.nodeName() == node.nodeName() ) { m_arpeggio.restoreState( node.toElement() ); } else if( m_midiPort.nodeName() == node.nodeName() ) { m_midiPort.restoreState( node.toElement() ); } else if( m_audioPort.effects()->nodeName() == node.nodeName() ) { m_audioPort.effects()->restoreState( node.toElement() ); } else if( node.nodeName() == "instrument" ) { delete m_instrument; m_instrument = NULL; m_instrument = Instrument::instantiate( node.toElement().attribute( "name" ), this ); m_instrument->restoreState( node.firstChildElement() ); emit instrumentChanged(); } // compat code - if node-name doesn't match any known // one, we assume that it is an instrument-plugin // which we'll try to load else if( AutomationPattern::classNodeName() != node.nodeName() && ControllerConnection::classNodeName() != node.nodeName() && !node.toElement().hasAttribute( "id" ) ) { delete m_instrument; m_instrument = NULL; m_instrument = Instrument::instantiate( node.nodeName(), this ); if( m_instrument->nodeName() == node.nodeName() ) { m_instrument->restoreState( node.toElement() ); } emit instrumentChanged(); } } node = node.nextSibling(); } updatePitchRange(); engine::mixer()->unlock(); } Instrument * InstrumentTrack::loadInstrument( const QString & _plugin_name ) { silenceAllNotes( true ); engine::mixer()->lock(); delete m_instrument; m_instrument = Instrument::instantiate( _plugin_name, this ); engine::mixer()->unlock(); setName( m_instrument->displayName() ); emit instrumentChanged(); return m_instrument; } // #### ITV: QQueue InstrumentTrackView::s_windowCache; InstrumentTrackView::InstrumentTrackView( InstrumentTrack * _it, TrackContainerView* tcv ) : trackView( _it, tcv ), m_window( NULL ), m_lastPos( -1, -1 ) { setAcceptDrops( true ); setFixedHeight( 32 ); m_tlb = new trackLabelButton( this, getTrackSettingsWidget() ); m_tlb->setCheckable( true ); m_tlb->setIcon( embed::getIconPixmap( "instrument_track" ) ); m_tlb->move( 3, 1 ); m_tlb->show(); connect( m_tlb, SIGNAL( toggled( bool ) ), this, SLOT( toggleInstrumentWindow( bool ) ) ); connect( _it, SIGNAL( nameChanged() ), m_tlb, SLOT( update() ) ); // creation of widgets for track-settings-widget int widgetWidth; if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT; } else { widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH; } m_volumeKnob = new knob( knobSmall_17, getTrackSettingsWidget(), tr( "Volume" ) ); m_volumeKnob->setVolumeKnob( true ); m_volumeKnob->setModel( &_it->m_volumeModel ); m_volumeKnob->setHintText( tr( "Volume:" ) + " ", "%" ); m_volumeKnob->move( widgetWidth-2*24, 2 ); m_volumeKnob->setLabel( tr( "VOL" ) ); m_volumeKnob->show(); m_volumeKnob->setWhatsThis( tr( volume_help ) ); m_panningKnob = new knob( knobSmall_17, getTrackSettingsWidget(), tr( "Panning" ) ); m_panningKnob->setModel( &_it->m_panningModel ); m_panningKnob->setHintText( tr( "Panning:" ) + " ", "%" ); m_panningKnob->move( widgetWidth-24, 2 ); m_panningKnob->setLabel( tr( "PAN" ) ); m_panningKnob->show(); m_midiMenu = new QMenu( tr( "MIDI" ), this ); // sequenced MIDI? if( !engine::mixer()->midiClient()->isRaw() ) { _it->m_midiPort.m_readablePortsMenu = new MidiPortMenu( MidiPort::Input ); _it->m_midiPort.m_writablePortsMenu = new MidiPortMenu( MidiPort::Output ); _it->m_midiPort.m_readablePortsMenu->setModel( &_it->m_midiPort ); _it->m_midiPort.m_writablePortsMenu->setModel( &_it->m_midiPort ); m_midiInputAction = m_midiMenu->addMenu( _it->m_midiPort.m_readablePortsMenu ); m_midiOutputAction = m_midiMenu->addMenu( _it->m_midiPort.m_writablePortsMenu ); } else { m_midiInputAction = m_midiMenu->addAction( "" ); m_midiOutputAction = m_midiMenu->addAction( "" ); m_midiInputAction->setCheckable( true ); m_midiOutputAction->setCheckable( true ); connect( m_midiInputAction, SIGNAL( changed() ), this, SLOT( midiInSelected() ) ); connect( m_midiOutputAction, SIGNAL( changed() ), this, SLOT( midiOutSelected() ) ); connect( &_it->m_midiPort, SIGNAL( modeChanged() ), this, SLOT( midiConfigChanged() ) ); } m_midiInputAction->setText( tr( "Input" ) ); m_midiOutputAction->setText( tr( "Output" ) ); m_activityIndicator = new fadeButton( QApplication::palette().color( QPalette::Active, QPalette::Background), QApplication::palette().color( QPalette::Active, QPalette::BrightText ), getTrackSettingsWidget() ); m_activityIndicator->setGeometry( widgetWidth-2*24-11, 2, 8, 28 ); m_activityIndicator->show(); connect( m_activityIndicator, SIGNAL( pressed() ), this, SLOT( activityIndicatorPressed() ) ); connect( m_activityIndicator, SIGNAL( released() ), this, SLOT( activityIndicatorReleased() ) ); connect( _it, SIGNAL( newNote() ), m_activityIndicator, SLOT( activate() ) ); setModel( _it ); } InstrumentTrackView::~InstrumentTrackView() { freeInstrumentTrackWindow(); delete model()->m_midiPort.m_readablePortsMenu; delete model()->m_midiPort.m_writablePortsMenu; } InstrumentTrackWindow * InstrumentTrackView::topLevelInstrumentTrackWindow() { InstrumentTrackWindow * w = NULL; foreach( QMdiSubWindow * sw, engine::mainWindow()->workspace()->subWindowList( QMdiArea::ActivationHistoryOrder ) ) { if( sw->isVisible() && sw->widget()->inherits( "InstrumentTrackWindow" ) ) { w = qobject_cast( sw->widget() ); } } return w; } // TODO: Add windows to free list on freeInstrumentTrackWindow. // But, don't NULL m_window or disconnect signals. This will allow windows // that are being show/hidden frequently to stay connected. void InstrumentTrackView::freeInstrumentTrackWindow() { if( m_window != NULL ) { m_lastPos = m_window->parentWidget()->pos(); if( configManager::inst()->value( "ui", "oneinstrumenttrackwindow" ).toInt() || s_windowCache.count() < INSTRUMENT_WINDOW_CACHE_SIZE ) { model()->setHook( NULL ); m_window->setInstrumentTrackView( NULL ); m_window->parentWidget()->hide(); //m_window->setModel( // engine::dummyTrackContainer()-> // dummyInstrumentTrack() ); m_window->updateInstrumentView(); s_windowCache << m_window; } else { delete m_window; } m_window = NULL; } } void InstrumentTrackView::cleanupWindowCache() { while( !s_windowCache.isEmpty() ) { delete s_windowCache.dequeue(); } } InstrumentTrackWindow * InstrumentTrackView::getInstrumentTrackWindow() { if( m_window != NULL ) { } else if( !s_windowCache.isEmpty() ) { m_window = s_windowCache.dequeue(); m_window->setInstrumentTrackView( this ); m_window->setModel( model() ); m_window->updateInstrumentView(); model()->setHook( m_window ); if( configManager::inst()-> value( "ui", "oneinstrumenttrackwindow" ).toInt() ) { s_windowCache << m_window; } else if( m_lastPos.x() > 0 || m_lastPos.y() > 0 ) { m_window->parentWidget()->move( m_lastPos ); } } else { m_window = new InstrumentTrackWindow( this ); if( configManager::inst()-> value( "ui", "oneinstrumenttrackwindow" ).toInt() ) { // first time, an InstrumentTrackWindow is opened s_windowCache << m_window; } } return m_window; } void InstrumentTrackView::dragEnterEvent( QDragEnterEvent * _dee ) { InstrumentTrackWindow::dragEnterEventGeneric( _dee ); if( !_dee->isAccepted() ) { trackView::dragEnterEvent( _dee ); } } void InstrumentTrackView::dropEvent( QDropEvent * _de ) { getInstrumentTrackWindow()->dropEvent( _de ); trackView::dropEvent( _de ); } void InstrumentTrackView::toggleInstrumentWindow( bool _on ) { getInstrumentTrackWindow()->toggleVisibility( _on ); if( !_on ) { freeInstrumentTrackWindow(); } } void InstrumentTrackView::activityIndicatorPressed() { model()->processInEvent( MidiEvent( MidiNoteOn, 0, DefaultKey, MidiDefaultVelocity ) ); } void InstrumentTrackView::activityIndicatorReleased() { model()->processInEvent( MidiEvent( MidiNoteOff, 0, DefaultKey, 0 ) ); } void InstrumentTrackView::midiInSelected() { if( model() ) { model()->m_midiPort.setReadable( m_midiInputAction->isChecked() ); } } void InstrumentTrackView::midiOutSelected() { if( model() ) { model()->m_midiPort.setWritable( m_midiOutputAction->isChecked() ); } } void InstrumentTrackView::midiConfigChanged() { m_midiInputAction->setChecked( model()->m_midiPort.isReadable() ); m_midiOutputAction->setChecked( model()->m_midiPort.isWritable() ); } class fxLineLcdSpinBox : public LcdSpinBox { public: fxLineLcdSpinBox( int _num_digits, QWidget * _parent, const QString & _name ) : LcdSpinBox( _num_digits, _parent, _name ) {} protected: virtual void mouseDoubleClickEvent ( QMouseEvent * _me ) { engine::fxMixerView()->setCurrentFxLine( model()->value() ); engine::fxMixerView()->show();// show fxMixer window engine::fxMixerView()->setFocus();// set focus to fxMixer window //engine::getFxMixerView()->raise(); } }; // #### ITW: InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : QWidget(), ModelView( NULL, this ), m_track( _itv->model() ), m_itv( _itv ), m_instrumentView( NULL ) { setAcceptDrops( true ); // init own layout + widgets setFocusPolicy( Qt::StrongFocus ); QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setMargin( 0 ); vlayout->setSpacing( 0 ); tabWidget* generalSettingsWidget = new tabWidget( tr( "GENERAL SETTINGS" ), this ); QVBoxLayout* generalSettingsLayout = new QVBoxLayout( generalSettingsWidget ); generalSettingsLayout->setContentsMargins( 8, 18, 8, 8 ); generalSettingsLayout->setSpacing( 6 ); // setup line edit for changing instrument track name m_nameLineEdit = new QLineEdit; m_nameLineEdit->setFont( pointSize<9>( m_nameLineEdit->font() ) ); connect( m_nameLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( textChanged( const QString & ) ) ); generalSettingsLayout->addWidget( m_nameLineEdit ); QHBoxLayout* basicControlsLayout = new QHBoxLayout; basicControlsLayout->setSpacing( 3 ); // set up volume knob m_volumeKnob = new knob( knobBright_26, NULL, tr( "Instrument volume" ) ); m_volumeKnob->setVolumeKnob( true ); m_volumeKnob->setHintText( tr( "Volume:" ) + " ", "%" ); m_volumeKnob->setLabel( tr( "VOL" ) ); m_volumeKnob->setWhatsThis( tr( volume_help ) ); basicControlsLayout->addWidget( m_volumeKnob ); // set up panning knob m_panningKnob = new knob( knobBright_26, NULL, tr( "Panning" ) ); m_panningKnob->setHintText( tr( "Panning:" ) + " ", "" ); m_panningKnob->setLabel( tr( "PAN" ) ); basicControlsLayout->addWidget( m_panningKnob ); basicControlsLayout->addStretch(); // set up pitch knob m_pitchKnob = new knob( knobBright_26, NULL, tr( "Pitch" ) ); m_pitchKnob->setHintText( tr( "Pitch:" ) + " ", " " + tr( "cents" ) ); m_pitchKnob->setLabel( tr( "PITCH" ) ); basicControlsLayout->addWidget( m_pitchKnob ); // set up pitch range knob m_pitchRangeSpinBox= new LcdSpinBox( 2, NULL, tr( "Pitch range (semitones)" ) ); m_pitchRangeSpinBox->setLabel( tr( "RANGE" ) ); basicControlsLayout->addWidget( m_pitchRangeSpinBox ); basicControlsLayout->addStretch(); // setup spinbox for selecting FX-channel m_effectChannelNumber = new fxLineLcdSpinBox( 2, NULL, tr( "FX channel" ) ); m_effectChannelNumber->setLabel( tr( "FX" ) ); basicControlsLayout->addWidget( m_effectChannelNumber ); basicControlsLayout->addStretch(); QPushButton* saveSettingsBtn = new QPushButton( embed::getIconPixmap( "project_save" ), QString() ); saveSettingsBtn->setMinimumSize( 32, 32 ); connect( saveSettingsBtn, SIGNAL( clicked() ), this, SLOT( saveSettingsBtnClicked() ) ); toolTip::add( saveSettingsBtn, tr( "Save current instrument track settings in a preset file" ) ); saveSettingsBtn->setWhatsThis( tr( "Click here, if you want to save current instrument track settings in a preset file. " "Later you can load this preset by double-clicking it in the preset-browser." ) ); basicControlsLayout->addWidget( saveSettingsBtn ); generalSettingsLayout->addLayout( basicControlsLayout ); m_tabWidget = new tabWidget( "", this ); m_tabWidget->setFixedHeight( INSTRUMENT_HEIGHT + 10 ); // create tab-widgets m_ssView = new InstrumentSoundShapingView( m_tabWidget ); // FUNC tab QWidget* instrumentFunctions = new QWidget( m_tabWidget ); QVBoxLayout* instrumentFunctionsLayout = new QVBoxLayout( instrumentFunctions ); instrumentFunctionsLayout->setMargin( 5 ); m_noteStackingView = new InstrumentFunctionNoteStackingView( &m_track->m_noteStacking ); m_arpeggioView = new InstrumentFunctionArpeggioView( &m_track->m_arpeggio ); instrumentFunctionsLayout->addWidget( m_noteStackingView ); instrumentFunctionsLayout->addWidget( m_arpeggioView ); instrumentFunctionsLayout->addStretch(); // MIDI tab m_midiView = new InstrumentMidiIOView( m_tabWidget ); // FX tab m_effectView = new EffectRackView( m_track->m_audioPort.effects(), m_tabWidget ); m_tabWidget->addTab( m_ssView, tr( "ENV/LFO" ), 1 ); m_tabWidget->addTab( instrumentFunctions, tr( "FUNC" ), 2 ); m_tabWidget->addTab( m_effectView, tr( "FX" ), 3 ); m_tabWidget->addTab( m_midiView, tr( "MIDI" ), 4 ); // setup piano-widget m_pianoView = new PianoView( this ); m_pianoView->setFixedSize( INSTRUMENT_WIDTH, PIANO_HEIGHT ); vlayout->addWidget( generalSettingsWidget ); vlayout->addWidget( m_tabWidget ); vlayout->addWidget( m_pianoView ); setModel( _itv->model() ); updateInstrumentView(); setFixedWidth( INSTRUMENT_WIDTH ); resize( sizeHint() ); QMdiSubWindow * subWin = engine::mainWindow()->workspace()->addSubWindow( this ); Qt::WindowFlags flags = subWin->windowFlags(); flags |= Qt::MSWindowsFixedSizeDialogHint; flags &= ~Qt::WindowMaximizeButtonHint; subWin->setWindowFlags( flags ); // Hide the Size and Maximize options from the system menu // since the dialog size is fixed. QMenu * systemMenu = subWin->systemMenu(); systemMenu->actions().at( 2 )->setVisible( false ); // Size systemMenu->actions().at( 4 )->setVisible( false ); // Maximize subWin->setWindowIcon( embed::getIconPixmap( "instrument_track" ) ); subWin->setFixedSize( subWin->size() ); subWin->hide(); } InstrumentTrackWindow::~InstrumentTrackWindow() { InstrumentTrackView::s_windowCache.removeAll( this ); delete m_instrumentView; if( engine::mainWindow()->workspace() ) { parentWidget()->hide(); parentWidget()->deleteLater(); } } void InstrumentTrackWindow::setInstrumentTrackView( InstrumentTrackView* view ) { if( m_itv && view ) { m_itv->m_tlb->setChecked( false ); } m_itv = view; } void InstrumentTrackWindow::modelChanged() { m_track = castModel(); m_nameLineEdit->setText( m_track->name() ); m_track->disconnect( SIGNAL( nameChanged() ), this ); m_track->disconnect( SIGNAL( instrumentChanged() ), this ); connect( m_track, SIGNAL( nameChanged() ), this, SLOT( updateName() ) ); connect( m_track, SIGNAL( instrumentChanged() ), this, SLOT( updateInstrumentView() ) ); m_volumeKnob->setModel( &m_track->m_volumeModel ); m_panningKnob->setModel( &m_track->m_panningModel ); m_effectChannelNumber->setModel( &m_track->m_effectChannelModel ); m_pianoView->setModel( &m_track->m_piano ); if( m_track->instrument() && m_track->instrument()->flags().testFlag( Instrument::IsNotBendable ) == false ) { m_pitchKnob->setModel( &m_track->m_pitchModel ); m_pitchRangeSpinBox->setModel( &m_track->m_pitchRangeModel ); m_pitchKnob->show(); m_pitchRangeSpinBox->show(); } else { m_pitchKnob->hide(); m_pitchKnob->setModel( NULL ); m_pitchRangeSpinBox->hide(); } m_ssView->setModel( &m_track->m_soundShaping ); m_noteStackingView->setModel( &m_track->m_noteStacking ); m_arpeggioView->setModel( &m_track->m_arpeggio ); m_midiView->setModel( &m_track->m_midiPort ); m_effectView->setModel( m_track->m_audioPort.effects() ); updateName(); } void InstrumentTrackWindow::saveSettingsBtnClicked() { FileDialog sfd( this, tr( "Save preset" ), "", tr( "XML preset file (*.xpf)" ) ); QString presetRoot = configManager::inst()->userPresetsDir(); if( !QDir( presetRoot ).exists() ) { QDir().mkdir( presetRoot ); } if( !QDir( presetRoot + m_track->instrumentName() ).exists() ) { QDir( presetRoot ).mkdir( m_track->instrumentName() ); } sfd.setAcceptMode( FileDialog::AcceptSave ); sfd.setDirectory( presetRoot + m_track->instrumentName() ); sfd.setFileMode( FileDialog::AnyFile ); if( sfd.exec() == QDialog::Accepted && !sfd.selectedFiles().isEmpty() && !sfd.selectedFiles().first().isEmpty() ) { DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeSave ); DataFile dataFile( DataFile::InstrumentTrackSettings ); m_track->setSimpleSerializing(); m_track->saveSettings( dataFile, dataFile.content() ); QString f = sfd.selectedFiles()[0]; dataFile.writeFile( f ); } } void InstrumentTrackWindow::updateName() { setWindowTitle( m_track->name().length() > 25 ? ( m_track->name().left(24)+"..." ) : m_track->name() ); if( m_nameLineEdit->text() != m_track->name() ) { m_nameLineEdit->setText( m_track->name() ); } } void InstrumentTrackWindow::updateInstrumentView() { delete m_instrumentView; if( m_track->m_instrument != NULL ) { m_instrumentView = m_track->m_instrument->createView( m_tabWidget ); m_tabWidget->addTab( m_instrumentView, tr( "PLUGIN" ), 0 ); m_tabWidget->setActiveTab( 0 ); m_ssView->setFunctionsHidden( m_track->m_instrument->flags().testFlag( Instrument::IsSingleStreamed ) ); modelChanged(); // Get the instrument window to refresh m_track->dataChanged(); // Get the text on the trackButton to change } } void InstrumentTrackWindow::textChanged( const QString& newName ) { m_track->setName( newName ); engine::getSong()->setModified(); } void InstrumentTrackWindow::toggleVisibility( bool on ) { if( on ) { show(); parentWidget()->show(); parentWidget()->raise(); } else { parentWidget()->hide(); } } void InstrumentTrackWindow::closeEvent( QCloseEvent* event ) { event->ignore(); if( engine::mainWindow()->workspace() ) { parentWidget()->hide(); } else { hide(); } m_itv->m_tlb->setFocus(); m_itv->m_tlb->setChecked( false ); } void InstrumentTrackWindow::focusInEvent( QFocusEvent* ) { m_pianoView->setFocus(); } void InstrumentTrackWindow::dragEnterEventGeneric( QDragEnterEvent* event ) { stringPairDrag::processDragEnterEvent( event, "instrument,presetfile,pluginpresetfile" ); } void InstrumentTrackWindow::dragEnterEvent( QDragEnterEvent* event ) { dragEnterEventGeneric( event ); } void InstrumentTrackWindow::dropEvent( QDropEvent* event ) { QString type = stringPairDrag::decodeKey( event ); QString value = stringPairDrag::decodeValue( event ); if( type == "instrument" ) { m_track->loadInstrument( value ); engine::getSong()->setModified(); event->accept(); } else if( type == "presetfile" ) { DataFile dataFile( value ); InstrumentTrack::removeMidiPortNode( dataFile ); m_track->setSimpleSerializing(); m_track->loadSettings( dataFile.content().toElement() ); engine::getSong()->setModified(); event->accept(); } else if( type == "pluginpresetfile" ) { const QString ext = FileItem::extension( value ); Instrument * i = m_track->instrument(); if( !i->descriptor()->supportsFileType( ext ) ) { i = m_track->loadInstrument( engine::pluginFileHandling()[ext] ); } i->loadFile( value ); event->accept(); } } void InstrumentTrackWindow::saveSettings( QDomDocument& doc, QDomElement & thisElement ) { thisElement.setAttribute( "tab", m_tabWidget->activeTab() ); MainWindow::saveWidgetState( this, thisElement ); } void InstrumentTrackWindow::loadSettings( const QDomElement& thisElement ) { m_tabWidget->setActiveTab( thisElement.attribute( "tab" ).toInt() ); MainWindow::restoreWidgetState( this, thisElement ); if( isVisible() ) { m_itv->m_tlb->setChecked( true ); } } #include "moc_InstrumentTrack.cxx" lmms-1.1.3/src/tracks/Pattern.cpp000066400000000000000000000615671247673406200167150ustar00rootroot00000000000000/* * pattern.cpp - implementation of class pattern which holds notes * * Copyright (c) 2004-2014 Tobias Doerffel * Copyright (c) 2005-2007 Danny McRae * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include "Pattern.h" #include "InstrumentTrack.h" #include "templates.h" #include "gui_templates.h" #include "embed.h" #include "engine.h" #include "PianoRoll.h" #include "TrackContainer.h" #include "rename_dialog.h" #include "SampleBuffer.h" #include "AudioSampleRecorder.h" #include "song.h" #include "tooltip.h" #include "bb_track_container.h" #include "string_pair_drag.h" #include "MainWindow.h" QPixmap * PatternView::s_stepBtnOn = NULL; QPixmap * PatternView::s_stepBtnOverlay = NULL; QPixmap * PatternView::s_stepBtnOff = NULL; QPixmap * PatternView::s_stepBtnOffLight = NULL; Pattern::Pattern( InstrumentTrack * _instrument_track ) : trackContentObject( _instrument_track ), m_instrumentTrack( _instrument_track ), m_patternType( BeatPattern ), m_steps( MidiTime::stepsPerTact() ) { setName( _instrument_track->name() ); init(); } Pattern::Pattern( const Pattern& other ) : trackContentObject( other.m_instrumentTrack ), m_instrumentTrack( other.m_instrumentTrack ), m_patternType( other.m_patternType ), m_steps( other.m_steps ) { for( NoteVector::ConstIterator it = other.m_notes.begin(); it != other.m_notes.end(); ++it ) { m_notes.push_back( new note( **it ) ); } init(); } Pattern::~Pattern() { emit destroyedPattern( this ); for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { delete *it; } m_notes.clear(); } void Pattern::init() { connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( changeTimeSignature() ) ); saveJournallingState( false ); ensureBeatNotes(); changeLength( length() ); restoreJournallingState(); } MidiTime Pattern::length() const { if( m_patternType == BeatPattern ) { return beatPatternLength(); } tick_t max_length = MidiTime::ticksPerTact(); for( NoteVector::ConstIterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->length() > 0 ) { max_length = qMax( max_length, ( *it )->endPos() ); } } return MidiTime( max_length ).nextFullTact() * MidiTime::ticksPerTact(); } MidiTime Pattern::beatPatternLength() const { tick_t max_length = MidiTime::ticksPerTact(); for( NoteVector::ConstIterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->length() < 0 ) { max_length = qMax( max_length, ( *it )->pos() + MidiTime::ticksPerTact() / MidiTime::stepsPerTact() ); } } if( m_steps != MidiTime::stepsPerTact() ) { max_length = m_steps * MidiTime::ticksPerTact() / MidiTime::stepsPerTact() ; } return MidiTime( max_length ).nextFullTact() * MidiTime::ticksPerTact(); } note * Pattern::addNote( const note & _new_note, const bool _quant_pos ) { note * new_note = new note( _new_note ); if( _quant_pos && engine::pianoRoll() ) { new_note->quantizePos( engine::pianoRoll()->quantization() ); } engine::mixer()->lock(); if( m_notes.size() == 0 || m_notes.back()->pos() <= new_note->pos() ) { m_notes.push_back( new_note ); } else { // simple algorithm for inserting the note between two // notes with smaller and greater position // maybe it could be optimized by starting in the middle and // going forward or backward but note-inserting isn't that // time-critical since it is usually not done while playing... long new_note_abs_time = new_note->pos(); NoteVector::Iterator it = m_notes.begin(); while( it != m_notes.end() && ( *it )->pos() < new_note_abs_time ) { ++it; } m_notes.insert( it, new_note ); } engine::mixer()->unlock(); checkType(); changeLength( length() ); emit dataChanged(); updateBBTrack(); return new_note; } void Pattern::removeNote( const note * _note_to_del ) { engine::mixer()->lock(); NoteVector::Iterator it = m_notes.begin(); while( it != m_notes.end() ) { if( *it == _note_to_del ) { delete *it; m_notes.erase( it ); break; } ++it; } engine::mixer()->unlock(); checkType(); changeLength( length() ); emit dataChanged(); updateBBTrack(); } // returns a pointer to the note at specified step, or NULL if note doesn't exist note * Pattern::noteAtStep( int _step ) { for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() ) { return *it; } } return NULL; } note * Pattern::rearrangeNote( const note * _note_to_proc, const bool _quant_pos ) { // just rearrange the position of the note by removing it and adding // a copy of it -> addNote inserts it at the correct position note copy_of_note( *_note_to_proc ); removeNote( _note_to_proc ); return addNote( copy_of_note, _quant_pos ); } void Pattern::rearrangeAllNotes() { // sort notes by start time qSort(m_notes.begin(), m_notes.end(), note::lessThan ); } void Pattern::clearNotes() { engine::mixer()->lock(); for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { delete *it; } m_notes.clear(); engine::mixer()->unlock(); checkType(); emit dataChanged(); } void Pattern::setStep( int _step, bool _enabled ) { for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() && ( *it )->length() <= 0 ) { ( *it )->setLength( _enabled ? -DefaultTicksPerTact : 0 ); } } } void Pattern::setType( PatternTypes _new_pattern_type ) { if( _new_pattern_type == BeatPattern || _new_pattern_type == MelodyPattern ) { m_patternType = _new_pattern_type; } } void Pattern::checkType() { NoteVector::Iterator it = m_notes.begin(); while( it != m_notes.end() ) { if( ( *it )->length() > 0 ) { setType( Pattern::MelodyPattern ); return; } ++it; } setType( Pattern::BeatPattern ); } void Pattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "type", m_patternType ); _this.setAttribute( "name", name() ); // as the target of copied/dragged pattern is always an existing // pattern, we must not store actual position, instead we store -1 // which tells loadSettings() not to mess around with position if( _this.parentNode().nodeName() == "clipboard" || _this.parentNode().nodeName() == "dnddata" ) { _this.setAttribute( "pos", -1 ); } else { _this.setAttribute( "pos", startPosition() ); } _this.setAttribute( "len", length() ); _this.setAttribute( "muted", isMuted() ); _this.setAttribute( "steps", m_steps ); // now save settings of all notes for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->length() ) { ( *it )->saveState( _doc, _this ); } } } void Pattern::loadSettings( const QDomElement & _this ) { m_patternType = static_cast( _this.attribute( "type" ).toInt() ); setName( _this.attribute( "name" ) ); if( _this.attribute( "pos" ).toInt() >= 0 ) { movePosition( _this.attribute( "pos" ).toInt() ); } changeLength( MidiTime( _this.attribute( "len" ).toInt() ) ); if( _this.attribute( "muted" ).toInt() != isMuted() ) { toggleMute(); } clearNotes(); QDomNode node = _this.firstChild(); while( !node.isNull() ) { if( node.isElement() && !node.toElement().attribute( "metadata" ).toInt() ) { note * n = new note; n->restoreState( node.toElement() ); m_notes.push_back( n ); } node = node.nextSibling(); } m_steps = _this.attribute( "steps" ).toInt(); if( m_steps == 0 ) { m_steps = MidiTime::stepsPerTact(); } ensureBeatNotes(); checkType(); emit dataChanged(); updateBBTrack(); } void Pattern::clear() { addJournalCheckPoint(); clearNotes(); ensureBeatNotes(); } void Pattern::addSteps() { m_steps += MidiTime::stepsPerTact(); ensureBeatNotes(); emit dataChanged(); updateBBTrack(); } void Pattern::removeSteps() { int _n = MidiTime::stepsPerTact(); if( _n < m_steps ) { for( int i = m_steps - _n; i < m_steps; ++i ) { for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() && ( *it )->length() <= 0 ) { removeNote( *it ); break; } } } m_steps -= _n; emit dataChanged(); } updateBBTrack(); } trackContentObjectView * Pattern::createView( trackView * _tv ) { return new PatternView( this, _tv ); } void Pattern::ensureBeatNotes() { // make sure, that all step-note exist for( int i = 0; i < m_steps; ++i ) { bool found = false; for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { // if a note in this position is the one we want if( ( *it )->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() && ( *it )->length() <= 0 ) { found = true; break; } } if( found == false ) { addNote( note( MidiTime( 0 ), MidiTime( ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() ) ), false ); } } // remove notes we no longer need: // that is, disabled notes that no longer fall to the steps of the new time sig for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ) { bool needed = false; for( int i = 0; i < m_steps; ++i ) { if( ( *it )->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() || ( *it )->length() != 0 ) { needed = true; break; } } if( needed == false ) { delete *it; it = m_notes.erase( it ); } else ++it; } } void Pattern::updateBBTrack() { if( getTrack()->trackContainer() == engine::getBBTrackContainer() ) { engine::getBBTrackContainer()->updateBBTrack( this ); } if( engine::pianoRoll() && engine::pianoRoll()->currentPattern() == this ) { engine::pianoRoll()->update(); } } bool Pattern::empty() { for( NoteVector::ConstIterator it = m_notes.begin(); it != m_notes.end(); ++it ) { if( ( *it )->length() != 0 ) { return false; } } return true; } void Pattern::changeTimeSignature() { MidiTime last_pos = MidiTime::ticksPerTact(); for( NoteVector::ConstIterator cit = m_notes.begin(); cit != m_notes.end(); ++cit ) { if( ( *cit )->length() < 0 && ( *cit )->pos() > last_pos ) { last_pos = ( *cit )->pos()+MidiTime::ticksPerTact() / MidiTime::stepsPerTact(); } } last_pos = last_pos.nextFullTact() * MidiTime::ticksPerTact(); for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ) { if( ( *it )->length() == 0 && ( *it )->pos() >= last_pos ) { delete *it; it = m_notes.erase( it ); --m_steps; } else { ++it; } } m_steps = qMax( qMax( m_steps, MidiTime::stepsPerTact() ), last_pos.getTact() * MidiTime::stepsPerTact() ); ensureBeatNotes(); updateBBTrack(); } PatternView::PatternView( Pattern* pattern, trackView* parent ) : trackContentObjectView( pattern, parent ), m_pat( pattern ), m_paintPixmap(), m_needsUpdate( true ) { connect( engine::pianoRoll(), SIGNAL( currentPatternChanged() ), this, SLOT( update() ) ); if( s_stepBtnOn == NULL ) { s_stepBtnOn = new QPixmap( embed::getIconPixmap( "step_btn_on_100" ) ); } if( s_stepBtnOverlay == NULL ) { s_stepBtnOverlay = new QPixmap( embed::getIconPixmap( "step_btn_on_yellow" ) ); } if( s_stepBtnOff == NULL ) { s_stepBtnOff = new QPixmap( embed::getIconPixmap( "step_btn_off" ) ); } if( s_stepBtnOffLight == NULL ) { s_stepBtnOffLight = new QPixmap( embed::getIconPixmap( "step_btn_off_light" ) ); } setFixedHeight( parentWidget()->height() - 2 ); setAutoResizeEnabled( false ); toolTip::add( this, tr( "double-click to open this pattern in piano-roll\n" "use mouse wheel to set volume of a step" ) ); setStyle( QApplication::style() ); } PatternView::~PatternView() { } void PatternView::update() { m_needsUpdate = true; m_pat->changeLength( m_pat->length() ); trackContentObjectView::update(); } void PatternView::openInPianoRoll() { engine::pianoRoll()->setCurrentPattern( m_pat ); engine::pianoRoll()->parentWidget()->show(); engine::pianoRoll()->setFocus(); } void PatternView::resetName() { m_pat->setName( m_pat->m_instrumentTrack->name() ); } void PatternView::changeName() { QString s = m_pat->name(); renameDialog rename_dlg( s ); rename_dlg.exec(); m_pat->setName( s ); } void PatternView::constructContextMenu( QMenu * _cm ) { QAction * a = new QAction( embed::getIconPixmap( "piano" ), tr( "Open in piano-roll" ), _cm ); _cm->insertAction( _cm->actions()[0], a ); connect( a, SIGNAL( triggered( bool ) ), this, SLOT( openInPianoRoll() ) ); _cm->insertSeparator( _cm->actions()[1] ); _cm->addSeparator(); _cm->addAction( embed::getIconPixmap( "edit_erase" ), tr( "Clear all notes" ), m_pat, SLOT( clear() ) ); _cm->addSeparator(); _cm->addAction( embed::getIconPixmap( "reload" ), tr( "Reset name" ), this, SLOT( resetName() ) ); _cm->addAction( embed::getIconPixmap( "edit_rename" ), tr( "Change name" ), this, SLOT( changeName() ) ); _cm->addSeparator(); _cm->addAction( embed::getIconPixmap( "step_btn_add" ), tr( "Add steps" ), m_pat, SLOT( addSteps() ) ); _cm->addAction( embed::getIconPixmap( "step_btn_remove" ), tr( "Remove steps" ), m_pat, SLOT( removeSteps() ) ); } void PatternView::mouseDoubleClickEvent( QMouseEvent * _me ) { if( _me->button() != Qt::LeftButton ) { _me->ignore(); return; } if( m_pat->type() == Pattern::MelodyPattern || !( m_pat->type() == Pattern::BeatPattern && ( pixelsPerTact() >= 192 || m_pat->m_steps != MidiTime::stepsPerTact() ) && _me->y() > height() - s_stepBtnOff->height() ) ) { openInPianoRoll(); } } void PatternView::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && m_pat->m_patternType == Pattern::BeatPattern && ( fixedTCOs() || pixelsPerTact() >= 96 || m_pat->m_steps != MidiTime::stepsPerTact() ) && _me->y() > height() - s_stepBtnOff->height() ) // when mouse button is pressed in beat/bassline -mode { // get the step number that was clicked on and // do calculations in floats to prevent rounding errors... float tmp = ( ( float(_me->x()) - TCO_BORDER_WIDTH ) * float( m_pat -> m_steps ) ) / float(width() - TCO_BORDER_WIDTH*2); int step = int( tmp ); // debugging to ensure we get the correct step... // qDebug( "Step (%f) %d", tmp, step ); if( step >= m_pat->m_steps ) { qDebug( "Something went wrong in pattern.cpp: step %d doesn't exist in pattern!", step ); return; } note * n = m_pat->noteAtStep( step ); // if note at step not found, ensureBeatNotes and try again if( n == NULL ) { m_pat -> ensureBeatNotes(); n = m_pat->noteAtStep( step ); if( n == NULL ) // still can't find a note? bail! { qDebug( "Something went wrong in pattern.cpp: couldn't add note at step %d!", step ); return; } } else // note at step found { if( n->length() < 0 ) { n->setLength( 0 ); // set note as enabled beat note } else { n->setLength( -DefaultTicksPerTact ); // set note as disabled beat note } } engine::getSong()->setModified(); update(); if( engine::pianoRoll()->currentPattern() == m_pat ) { engine::pianoRoll()->update(); } } else // if not in beat/bassline -mode, let parent class handle the event { trackContentObjectView::mousePressEvent( _me ); } } void PatternView::wheelEvent( QWheelEvent * _we ) { if( m_pat->m_patternType == Pattern::BeatPattern && ( fixedTCOs() || pixelsPerTact() >= 96 || m_pat->m_steps != MidiTime::stepsPerTact() ) && _we->y() > height() - s_stepBtnOff->height() ) { // get the step number that was wheeled on and // do calculations in floats to prevent rounding errors... float tmp = ( ( float(_we->x()) - TCO_BORDER_WIDTH ) * float( m_pat -> m_steps ) ) / float(width() - TCO_BORDER_WIDTH*2); int step = int( tmp ); if( step >= m_pat->m_steps ) { return; } int vol = 0; int len = 0; note * n = m_pat->noteAtStep( step ); if( n != NULL ) { vol = n->getVolume(); len = n->length(); if( len == 0 && _we->delta() > 0 ) { n->setLength( -DefaultTicksPerTact ); n->setVolume( 5 ); } else if( _we->delta() > 0 ) { n->setVolume( qMin( 100, vol + 5 ) ); } else { n->setVolume( qMax( 0, vol - 5 ) ); } engine::getSong()->setModified(); update(); if( engine::pianoRoll()->currentPattern() == m_pat ) { engine::pianoRoll()->update(); } } _we->accept(); } else { trackContentObjectView::wheelEvent( _we ); } } void PatternView::paintEvent( QPaintEvent * ) { if( m_needsUpdate == false ) { QPainter p( this ); p.drawPixmap( 0, 0, m_paintPixmap ); return; } QPainter _p( this ); const QColor styleColor = _p.pen().brush().color(); m_pat->changeLength( m_pat->length() ); m_needsUpdate = false; if( m_paintPixmap.isNull() == true || m_paintPixmap.size() != size() ) { m_paintPixmap = QPixmap( size() ); } QPainter p( &m_paintPixmap ); QLinearGradient lingrad( 0, 0, 0, height() ); QColor c; if(( m_pat->m_patternType != Pattern::BeatPattern ) && !( m_pat->getTrack()->isMuted() || m_pat->isMuted() )) c = isSelected() ? QColor( 0, 0, 224 ) : styleColor; else c = QColor( 80, 80, 80 ); if( m_pat->m_patternType != Pattern::BeatPattern ) { lingrad.setColorAt( 1, c.darker( 300 ) ); lingrad.setColorAt( 0, c ); } else { lingrad.setColorAt( 0, c.darker( 300 ) ); lingrad.setColorAt( 1, c ); } p.setBrush( lingrad ); if( engine::pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != Pattern::BeatPattern ) p.setPen( c.lighter( 130 ) ); else p.setPen( c.darker( 300 ) ); p.drawRect( QRect( 0, 0, width() - 1, height() - 1 ) ); p.setBrush( QBrush() ); if( m_pat->m_patternType != Pattern::BeatPattern ) { if( engine::pianoRoll()->currentPattern() == m_pat ) p.setPen( c.lighter( 160 ) ); else p.setPen( c.lighter( 130 ) ); p.drawRect( QRect( 1, 1, width() - 3, height() - 3 ) ); } const float ppt = fixedTCOs() ? ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH ) / (float) m_pat->length().getTact() : pixelsPerTact(); const int x_base = TCO_BORDER_WIDTH; p.setPen( c.darker( 300 ) ); for( tact_t t = 1; t < m_pat->length().getTact(); ++t ) { p.drawLine( x_base + static_cast( ppt * t ) - 1, TCO_BORDER_WIDTH, x_base + static_cast( ppt * t ) - 1, 5 ); p.drawLine( x_base + static_cast( ppt * t ) - 1, height() - ( 4 + 2 * TCO_BORDER_WIDTH ), x_base + static_cast( ppt * t ) - 1, height() - 2 * TCO_BORDER_WIDTH ); } // melody pattern paint event if( m_pat->m_patternType == Pattern::MelodyPattern ) { if( m_pat->m_notes.size() > 0 ) { // first determine the central tone so that we can // display the area where most of the m_notes are // also calculate min/max tones so the tonal range can be // properly stretched accross the pattern vertically int central_key = 0; int max_key = 0; int min_key = 9999999; int total_notes = 0; for( NoteVector::Iterator it = m_pat->m_notes.begin(); it != m_pat->m_notes.end(); ++it ) { if( ( *it )->length() > 0 ) { max_key = qMax( max_key, ( *it )->key() ); min_key = qMin( min_key, ( *it )->key() ); central_key += ( *it )->key(); ++total_notes; } } if( total_notes > 0 ) { central_key = central_key / total_notes; const int keyrange = qMax( qMax( max_key - central_key, central_key - min_key ), 1 ); // debug code // qDebug( "keyrange: %d", keyrange ); // determine height of the pattern view, sans borders const int ht = height() - 1 - TCO_BORDER_WIDTH * 2; // determine maximum height value for drawing bounds checking const int max_ht = height() - 1 - TCO_BORDER_WIDTH; // set colour based on mute status if( m_pat->getTrack()->isMuted() || m_pat->isMuted() ) { p.setPen( QColor( 160, 160, 160 ) ); } else { p.setPen( fgColor() ); } // scan through all the notes and draw them on the pattern for( NoteVector::Iterator it = m_pat->m_notes.begin(); it != m_pat->m_notes.end(); ++it ) { // calculate relative y-position const float y_key = ( float( central_key - ( *it )->key() ) / keyrange + 1.0f ) / 2; // multiply that by pattern height const int y_pos = static_cast( TCO_BORDER_WIDTH + y_key * ht ); // debug code // if( ( *it )->length() > 0 ) qDebug( "key %d, central_key %d, y_key %f, y_pos %d", ( *it )->key(), central_key, y_key, y_pos ); // check that note isn't out of bounds, and has a length if( ( *it )->length() > 0 && y_pos >= TCO_BORDER_WIDTH && y_pos <= max_ht ) { // calculate start and end x-coords of the line to be drawn const int x1 = x_base + static_cast ( ( *it )->pos() * ( ppt / MidiTime::ticksPerTact() ) ); const int x2 = x_base + static_cast ( ( ( *it )->pos() + ( *it )->length() ) * ( ppt / MidiTime::ticksPerTact() ) ); // check bounds, draw line if( x1 < width() - TCO_BORDER_WIDTH ) p.drawLine( x1, y_pos, qMin( x2, width() - TCO_BORDER_WIDTH ), y_pos ); } } } } } // beat pattern paint event else if( m_pat->m_patternType == Pattern::BeatPattern && ( fixedTCOs() || ppt >= 96 || m_pat->m_steps != MidiTime::stepsPerTact() ) ) { QPixmap stepon; QPixmap stepoverlay; QPixmap stepoff; QPixmap stepoffl; const int steps = qMax( 1, m_pat->m_steps ); const int w = width() - 2 * TCO_BORDER_WIDTH; // scale step graphics to fit the beat pattern length stepon = s_stepBtnOn->scaled( w / steps, s_stepBtnOn->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); stepoverlay = s_stepBtnOverlay->scaled( w / steps, s_stepBtnOn->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); stepoff = s_stepBtnOff->scaled( w / steps, s_stepBtnOff->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); stepoffl = s_stepBtnOffLight->scaled( w / steps, s_stepBtnOffLight->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); for( int it = 0; it < steps; it++ ) // go through all the steps in the beat pattern { note * n = m_pat->noteAtStep( it ); // figure out x and y coordinates for step graphic const int x = TCO_BORDER_WIDTH + static_cast( it * w / steps ); const int y = height() - s_stepBtnOff->height() - 1; // get volume and length of note, if noteAtStep returned null // (meaning, note at step doesn't exist for some reason) // then set both at zero, ie. treat as an off step const int vol = ( n != NULL ? n->getVolume() : 0 ); const int len = ( n != NULL ? int( n->length() ) : 0 ); if( len < 0 ) { p.drawPixmap( x, y, stepoff ); for( int i = 0; i < vol / 5 + 1; ++i ) { p.drawPixmap( x, y, stepon ); } for( int i = 0; i < ( 25 + ( vol - 75 ) ) / 5; ++i ) { p.drawPixmap( x, y, stepoverlay ); } } else if( ( it / 4 ) % 2 ) { p.drawPixmap( x, y, stepoffl ); } else { p.drawPixmap( x, y, stepoff ); } } // end for loop } p.setFont( pointSize<8>( p.font() ) ); QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() ) ? QColor( 30, 30, 30 ) : textColor(); if( m_pat->name() != m_pat->instrumentTrack()->name() ) { p.setPen( QColor( 0, 0, 0 ) ); p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() ); p.setPen( text_color ); p.drawText( 3, p.fontMetrics().height(), m_pat->name() ); } if( m_pat->isMuted() ) { p.drawPixmap( 3, p.fontMetrics().height() + 1, embed::getIconPixmap( "muted", 16, 16 ) ); } p.end(); _p.drawPixmap( 0, 0, m_paintPixmap ); } #include "moc_Pattern.cxx" lmms-1.1.3/src/tracks/SampleTrack.cpp000066400000000000000000000305151247673406200174730ustar00rootroot00000000000000/* * SampleTrack.cpp - implementation of class SampleTrack, a track which * provides arrangement of samples * * Copyright (c) 2005-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include "gui_templates.h" #include "SampleTrack.h" #include "song.h" #include "embed.h" #include "engine.h" #include "tooltip.h" #include "AudioPort.h" #include "SamplePlayHandle.h" #include "SampleRecordHandle.h" #include "string_pair_drag.h" #include "knob.h" #include "MainWindow.h" #include "EffectRackView.h" #include "track_label_button.h" #include "config_mgr.h" SampleTCO::SampleTCO( track * _track ) : trackContentObject( _track ), m_sampleBuffer( new SampleBuffer ) { saveJournallingState( false ); setSampleFile( "" ); restoreJournallingState(); // we need to receive bpm-change-events, because then we have to // change length of this TCO connect( engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( updateLength( bpm_t ) ) ); } SampleTCO::~SampleTCO() { sharedObject::unref( m_sampleBuffer ); } void SampleTCO::changeLength( const MidiTime & _length ) { trackContentObject::changeLength( qMax( static_cast( _length ), DefaultTicksPerTact ) ); } const QString & SampleTCO::sampleFile() const { return m_sampleBuffer->audioFile(); } void SampleTCO::setSampleBuffer( SampleBuffer* sb ) { sharedObject::unref( m_sampleBuffer ); m_sampleBuffer = sb; updateLength(); emit sampleChanged(); } void SampleTCO::setSampleFile( const QString & _sf ) { m_sampleBuffer->setAudioFile( _sf ); updateLength(); emit sampleChanged(); } void SampleTCO::toggleRecord() { m_recordModel.setValue( !m_recordModel.value() ); emit dataChanged(); } void SampleTCO::updateLength( bpm_t ) { changeLength( sampleLength() ); } MidiTime SampleTCO::sampleLength() const { return (int)( m_sampleBuffer->frames() / engine::framesPerTick() ); } void SampleTCO::saveSettings( QDomDocument & _doc, QDomElement & _this ) { if( _this.parentNode().nodeName() == "clipboard" ) { _this.setAttribute( "pos", -1 ); } else { _this.setAttribute( "pos", startPosition() ); } _this.setAttribute( "len", length() ); _this.setAttribute( "muted", isMuted() ); _this.setAttribute( "src", sampleFile() ); if( sampleFile() == "" ) { QString s; _this.setAttribute( "data", m_sampleBuffer->toBase64( s ) ); } // TODO: start- and end-frame } void SampleTCO::loadSettings( const QDomElement & _this ) { if( _this.attribute( "pos" ).toInt() >= 0 ) { movePosition( _this.attribute( "pos" ).toInt() ); } setSampleFile( _this.attribute( "src" ) ); if( sampleFile().isEmpty() && _this.hasAttribute( "data" ) ) { m_sampleBuffer->loadFromBase64( _this.attribute( "data" ) ); } changeLength( _this.attribute( "len" ).toInt() ); setMuted( _this.attribute( "muted" ).toInt() ); } trackContentObjectView * SampleTCO::createView( trackView * _tv ) { return new SampleTCOView( this, _tv ); } SampleTCOView::SampleTCOView( SampleTCO * _tco, trackView * _tv ) : trackContentObjectView( _tco, _tv ), m_tco( _tco ) { // update UI and tooltip updateSample(); // track future changes of SampleTCO connect( m_tco, SIGNAL( sampleChanged() ), this, SLOT( updateSample() ) ); setStyle( QApplication::style() ); } SampleTCOView::~SampleTCOView() { } void SampleTCOView::updateSample() { update(); // set tooltip to filename so that user can see what sample this // sample-tco contains toolTip::add( this, ( m_tco->m_sampleBuffer->audioFile() != "" ) ? m_tco->m_sampleBuffer->audioFile() : tr( "double-click to select sample" ) ); } void SampleTCOView::contextMenuEvent( QContextMenuEvent * _cme ) { if( _cme->modifiers() ) { return; } QMenu contextMenu( this ); if( fixedTCOs() == false ) { contextMenu.addAction( embed::getIconPixmap( "cancel" ), tr( "Delete (middle mousebutton)" ), this, SLOT( remove() ) ); contextMenu.addSeparator(); contextMenu.addAction( embed::getIconPixmap( "edit_cut" ), tr( "Cut" ), this, SLOT( cut() ) ); } contextMenu.addAction( embed::getIconPixmap( "edit_copy" ), tr( "Copy" ), m_tco, SLOT( copy() ) ); contextMenu.addAction( embed::getIconPixmap( "edit_paste" ), tr( "Paste" ), m_tco, SLOT( paste() ) ); contextMenu.addSeparator(); contextMenu.addAction( embed::getIconPixmap( "muted" ), tr( "Mute/unmute ( + middle click)" ), m_tco, SLOT( toggleMute() ) ); contextMenu.addAction( embed::getIconPixmap( "record" ), tr( "Set/clear record" ), m_tco, SLOT( toggleRecord() ) ); constructContextMenu( &contextMenu ); contextMenu.exec( QCursor::pos() ); } void SampleTCOView::dragEnterEvent( QDragEnterEvent * _dee ) { if( stringPairDrag::processDragEnterEvent( _dee, "samplefile,sampledata" ) == false ) { trackContentObjectView::dragEnterEvent( _dee ); } } void SampleTCOView::dropEvent( QDropEvent * _de ) { if( stringPairDrag::decodeKey( _de ) == "samplefile" ) { m_tco->setSampleFile( stringPairDrag::decodeValue( _de ) ); _de->accept(); } else if( stringPairDrag::decodeKey( _de ) == "sampledata" ) { m_tco->m_sampleBuffer->loadFromBase64( stringPairDrag::decodeValue( _de ) ); m_tco->updateLength(); update(); _de->accept(); engine::getSong()->setModified(); } else { trackContentObjectView::dropEvent( _de ); } } void SampleTCOView::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::LeftButton && _me->modifiers() & Qt::ControlModifier && _me->modifiers() & Qt::ShiftModifier ) { m_tco->toggleRecord(); } else { trackContentObjectView::mousePressEvent( _me ); } } void SampleTCOView::mouseDoubleClickEvent( QMouseEvent * ) { QString af = m_tco->m_sampleBuffer->openAudioFile(); if( af != "" && af != m_tco->m_sampleBuffer->audioFile() ) { m_tco->setSampleFile( af ); engine::getSong()->setModified(); } } void SampleTCOView::paintEvent( QPaintEvent * _pe ) { QPainter p( this ); const QColor styleColor = p.pen().brush().color(); QColor c; if( !( m_tco->getTrack()->isMuted() || m_tco->isMuted() ) ) c = isSelected() ? QColor( 0, 0, 224 ) : styleColor; else c = QColor( 80, 80, 80 ); QLinearGradient grad( 0, 0, 0, height() ); grad.setColorAt( 1, c.darker( 300 ) ); grad.setColorAt( 0, c ); p.setBrush( grad ); p.setPen( c.lighter( 160 ) ); p.drawRect( 1, 1, width()-3, height()-3 ); p.setBrush( QBrush() ); p.setPen( c.darker( 300 ) ); p.drawRect( 0, 0, width()-1, height()-1 ); if( m_tco->getTrack()->isMuted() || m_tco->isMuted() ) { p.setPen( QColor( 128, 128, 128 ) ); } else { p.setPen( fgColor() ); } QRect r = QRect( 1, 1, qMax( static_cast( m_tco->sampleLength() * pixelsPerTact() / DefaultTicksPerTact ), 1 ), height() - 4 ); p.setClipRect( QRect( 1, 1, width() - 2, height() - 2 ) ); m_tco->m_sampleBuffer->visualize( p, r, _pe->rect() ); if( r.width() < width() - 1 ) { p.drawLine( r.x() + r.width(), r.y() + r.height() / 2, width() - 2, r.y() + r.height() / 2 ); } p.translate( 0, 0 ); if( m_tco->isMuted() ) { p.drawPixmap( 3, 8, embed::getIconPixmap( "muted", 16, 16 ) ); } if( m_tco->isRecord() ) { p.setFont( pointSize<7>( p.font() ) ); p.setPen( QColor( 0, 0, 0 ) ); p.drawText( 10, p.fontMetrics().height()+1, "Rec" ); p.setPen( textColor() ); p.drawText( 9, p.fontMetrics().height(), "Rec" ); p.setBrush( QBrush( textColor() ) ); p.drawEllipse( 4, 5, 4, 4 ); } } SampleTrack::SampleTrack( TrackContainer* tc ) : track( track::SampleTrack, tc ), m_audioPort( tr( "Sample track" ) ), m_volumeModel( DefaultVolume, MinVolume, MaxVolume, 1.0, this, tr( "Volume" ) ) { setName( tr( "Sample track" ) ); } SampleTrack::~SampleTrack() { engine::mixer()->removePlayHandles( this ); } bool SampleTrack::play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _offset, int /*_tco_num*/ ) { m_audioPort.effects()->startRunning(); bool played_a_note = false; // will be return variable for( int i = 0; i < numOfTCOs(); ++i ) { trackContentObject * tco = getTCO( i ); if( tco->startPosition() != _start ) { continue; } SampleTCO * st = dynamic_cast( tco ); if( !st->isMuted() ) { PlayHandle* handle; if( st->isRecord() ) { if( !engine::getSong()->isRecording() ) { return played_a_note; } SampleRecordHandle* smpHandle = new SampleRecordHandle( st ); handle = smpHandle; } else { SamplePlayHandle* smpHandle = new SamplePlayHandle( st ); smpHandle->setVolumeModel( &m_volumeModel ); handle = smpHandle; } //TODO: check whether this works // handle->setBBTrack( _tco_num ); handle->setOffset( _offset ); // send it to the mixer engine::mixer()->addPlayHandle( handle ); played_a_note = true; } } return played_a_note; } trackView * SampleTrack::createView( TrackContainerView* tcv ) { return new SampleTrackView( this, tcv ); } trackContentObject * SampleTrack::createTCO( const MidiTime & ) { return new SampleTCO( this ); } void SampleTrack::saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _this ) { m_audioPort.effects()->saveState( _doc, _this ); #if 0 _this.setAttribute( "icon", tlb->pixmapFile() ); #endif m_volumeModel.saveSettings( _doc, _this, "vol" ); } void SampleTrack::loadTrackSpecificSettings( const QDomElement & _this ) { QDomNode node = _this.firstChild(); m_audioPort.effects()->clear(); while( !node.isNull() ) { if( node.isElement() ) { if( m_audioPort.effects()->nodeName() == node.nodeName() ) { m_audioPort.effects()->restoreState( node.toElement() ); } } node = node.nextSibling(); } m_volumeModel.loadSettings( _this, "vol" ); } SampleTrackView::SampleTrackView( SampleTrack * _t, TrackContainerView* tcv ) : trackView( _t, tcv ) { setFixedHeight( 32 ); trackLabelButton * tlb = new trackLabelButton( this, getTrackSettingsWidget() ); connect( tlb, SIGNAL( clicked( bool ) ), this, SLOT( showEffects() ) ); tlb->setIcon( embed::getIconPixmap( "sample_track" ) ); tlb->move( 3, 1 ); tlb->show(); m_volumeKnob = new knob( knobSmall_17, getTrackSettingsWidget(), tr( "Track volume" ) ); m_volumeKnob->setVolumeKnob( true ); m_volumeKnob->setModel( &_t->m_volumeModel ); m_volumeKnob->setHintText( tr( "Channel volume:" ) + " ", "%" ); if( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { m_volumeKnob->move( DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT-2*24, 2 ); } else { m_volumeKnob->move( DEFAULT_SETTINGS_WIDGET_WIDTH-2*24, 2 ); } m_volumeKnob->setLabel( tr( "VOL" ) ); m_volumeKnob->show(); m_effectRack = new EffectRackView( _t->audioPort()->effects() ); m_effectRack->setFixedSize( 240, 242 ); m_effWindow = engine::mainWindow()->workspace()->addSubWindow( m_effectRack ); m_effWindow->setAttribute( Qt::WA_DeleteOnClose, false ); m_effWindow->layout()->setSizeConstraint( QLayout::SetFixedSize ); m_effWindow->setWindowTitle( _t->name() ); m_effWindow->hide(); setModel( _t ); } SampleTrackView::~SampleTrackView() { m_effWindow->deleteLater(); } void SampleTrackView::showEffects() { if( m_effWindow->isHidden() ) { m_effectRack->show(); m_effWindow->show(); m_effWindow->raise(); } else { m_effWindow->hide(); } } void SampleTrackView::modelChanged() { SampleTrack * st = castModel(); m_volumeKnob->setModel( &st->m_volumeModel ); trackView::modelChanged(); } #include "moc_SampleTrack.cxx" lmms-1.1.3/src/tracks/bb_track.cpp000066400000000000000000000321211247673406200170270ustar00rootroot00000000000000/* * bb_track.cpp - implementation of class bbTrack and bbTCO * * Copyright (c) 2004-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include #include #include #include "bb_editor.h" #include "bb_track.h" #include "bb_track_container.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" #include "MainWindow.h" #include "Mixer.h" #include "rename_dialog.h" #include "song.h" #include "SongEditor.h" #include "templates.h" #include "track_label_button.h" bbTrack::infoMap bbTrack::s_infoMap; bbTCO::bbTCO( track * _track ) : trackContentObject( _track ), m_color( 128, 128, 128 ), m_useStyleColor( true ) { tact_t t = engine::getBBTrackContainer()->lengthOfBB( bbTrackIndex() ); if( t > 0 ) { saveJournallingState( false ); changeLength( MidiTime( t, 0 ) ); restoreJournallingState(); } } bbTCO::~bbTCO() { } void bbTCO::saveSettings( QDomDocument & doc, QDomElement & element ) { element.setAttribute( "name", name() ); if( element.parentNode().nodeName() == "clipboard" ) { element.setAttribute( "pos", -1 ); } else { element.setAttribute( "pos", startPosition() ); } element.setAttribute( "len", length() ); element.setAttribute( "muted", isMuted() ); element.setAttribute( "color", color() ); if( m_useStyleColor ) { element.setAttribute( "usestyle", 1 ); } else { element.setAttribute( "usestyle", 0 ); } } void bbTCO::loadSettings( const QDomElement & element ) { setName( element.attribute( "name" ) ); if( element.attribute( "pos" ).toInt() >= 0 ) { movePosition( element.attribute( "pos" ).toInt() ); } changeLength( element.attribute( "len" ).toInt() ); if( element.attribute( "muted" ).toInt() != isMuted() ) { toggleMute(); } if( element.hasAttribute( "color" ) ) { setColor( QColor( element.attribute( "color" ).toUInt() ) ); } if( element.hasAttribute( "usestyle" ) ) { if( element.attribute( "usestyle" ).toUInt() == 1 ) { m_useStyleColor = true; } else { m_useStyleColor = false; } } else { if( m_color.rgb() == qRgb( 128, 182, 175 ) || m_color.rgb() == qRgb( 64, 128, 255 ) ) // old or older default color { m_useStyleColor = true; } else { m_useStyleColor = false; } } } int bbTCO::bbTrackIndex() { return dynamic_cast( getTrack() )->index(); } trackContentObjectView * bbTCO::createView( trackView * _tv ) { return new bbTCOView( this, _tv ); } bbTCOView::bbTCOView( trackContentObject * _tco, trackView * _tv ) : trackContentObjectView( _tco, _tv ), m_bbTCO( dynamic_cast( _tco ) ) { } bbTCOView::~bbTCOView() { } void bbTCOView::constructContextMenu( QMenu * _cm ) { QAction * a = new QAction( embed::getIconPixmap( "bb_track" ), tr( "Open in Beat+Bassline-Editor" ), _cm ); _cm->insertAction( _cm->actions()[0], a ); connect( a, SIGNAL( triggered( bool ) ), this, SLOT( openInBBEditor() ) ); _cm->insertSeparator( _cm->actions()[1] ); _cm->addSeparator(); _cm->addAction( embed::getIconPixmap( "reload" ), tr( "Reset name" ), this, SLOT( resetName() ) ); _cm->addAction( embed::getIconPixmap( "edit_rename" ), tr( "Change name" ), this, SLOT( changeName() ) ); _cm->addAction( embed::getIconPixmap( "colorize" ), tr( "Change color" ), this, SLOT( changeColor() ) ); _cm->addAction( embed::getIconPixmap( "colorize" ), tr( "Reset color to default" ), this, SLOT( resetColor() ) ); } void bbTCOView::mouseDoubleClickEvent( QMouseEvent * ) { openInBBEditor(); } void bbTCOView::paintEvent( QPaintEvent * ) { QPainter p( this ); QColor col = m_bbTCO->m_useStyleColor ? p.pen().brush().color() : m_bbTCO->colorObj(); if( m_bbTCO->getTrack()->isMuted() || m_bbTCO->isMuted() ) { col = QColor( 160, 160, 160 ); } if( isSelected() == true ) { col = QColor( qMax( col.red() - 128, 0 ), qMax( col.green() - 128, 0 ), 255 ); } QLinearGradient lingrad( 0, 0, 0, height() ); lingrad.setColorAt( 0, col.light( 130 ) ); lingrad.setColorAt( 1, col.light( 70 ) ); p.fillRect( rect(), lingrad ); tact_t t = engine::getBBTrackContainer()->lengthOfBB( m_bbTCO->bbTrackIndex() ); if( m_bbTCO->length() > MidiTime::ticksPerTact() && t > 0 ) { for( int x = static_cast( t * pixelsPerTact() ); x < width()-2; x += static_cast( t * pixelsPerTact() ) ) { p.setPen( col.light( 80 ) ); p.drawLine( x, 1, x, 5 ); p.setPen( col.light( 120 ) ); p.drawLine( x, height() - 6, x, height() - 2 ); } } p.setPen( col.lighter( 130 ) ); p.drawRect( 1, 1, rect().right()-2, rect().bottom()-2 ); p.setPen( col.darker( 300 ) ); p.drawRect( 0, 0, rect().right(), rect().bottom() ); p.setFont( pointSize<8>( p.font() ) ); p.setPen( QColor( 0, 0, 0 ) ); p.drawText( 4, p.fontMetrics().height()+1, m_bbTCO->name() ); p.setPen( textColor() ); p.drawText( 3, p.fontMetrics().height(), m_bbTCO->name() ); if( m_bbTCO->isMuted() ) { p.drawPixmap( 3, p.fontMetrics().height() + 1, embed::getIconPixmap( "muted", 16, 16 ) ); } } void bbTCOView::openInBBEditor() { engine::getBBTrackContainer()->setCurrentBB( m_bbTCO->bbTrackIndex() ); engine::mainWindow()->toggleBBEditorWin( true ); } void bbTCOView::resetName() { m_bbTCO->setName( m_bbTCO->getTrack()->name() ); } void bbTCOView::changeName() { QString s = m_bbTCO->name(); renameDialog rename_dlg( s ); rename_dlg.exec(); m_bbTCO->setName( s ); } void bbTCOView::changeColor() { QColor new_color = QColorDialog::getColor( m_bbTCO->m_color ); if( ! new_color.isValid() ) { return; } if( isSelected() ) { QVector selected = engine::songEditor()->selectedObjects(); for( QVector::iterator it = selected.begin(); it != selected.end(); ++it ) { bbTCOView * bb_tcov = dynamic_cast( *it ); if( bb_tcov ) { bb_tcov->setColor( new_color ); } } } else { setColor( new_color ); } } /** \brief Makes the BB pattern use the colour defined in the stylesheet */ void bbTCOView::resetColor() { if( ! m_bbTCO->m_useStyleColor ) { m_bbTCO->m_useStyleColor = true; engine::getSong()->setModified(); update(); } bbTrack::clearLastTCOColor(); } void bbTCOView::setColor( QColor new_color ) { if( new_color.rgb() != m_bbTCO->color() ) { m_bbTCO->setColor( new_color ); m_bbTCO->m_useStyleColor = false; engine::getSong()->setModified(); update(); } bbTrack::setLastTCOColor( new_color ); } QColor * bbTrack::s_lastTCOColor = NULL; bbTrack::bbTrack( TrackContainer* tc ) : track( BBTrack, tc ) { int bbNum = s_infoMap.size(); s_infoMap[this] = bbNum; setName( tr( "Beat/Bassline %1" ).arg( bbNum ) ); engine::getBBTrackContainer()->setCurrentBB( bbNum ); engine::getBBTrackContainer()->updateComboBox(); connect( this, SIGNAL( nameChanged() ), engine::getBBTrackContainer(), SLOT( updateComboBox() ) ); } bbTrack::~bbTrack() { engine::mixer()->removePlayHandles( this ); const int bb = s_infoMap[this]; engine::getBBTrackContainer()->removeBB( bb ); for( infoMap::iterator it = s_infoMap.begin(); it != s_infoMap.end(); ++it ) { if( it.value() > bb ) { --it.value(); } } s_infoMap.remove( this ); // remove us from TC so bbTrackContainer::numOfBBs() returns a smaller // value and thus combobox-updating in bbTrackContainer works well trackContainer()->removeTrack( this ); engine::getBBTrackContainer()->updateComboBox(); } // play _frames frames of given TCO within starting with _start bool bbTrack::play( const MidiTime & _start, const fpp_t _frames, const f_cnt_t _offset, int _tco_num ) { if( isMuted() ) { return false; } if( _tco_num >= 0 ) { return engine::getBBTrackContainer()->play( _start, _frames, _offset, s_infoMap[this] ); } tcoVector tcos; getTCOsInRange( tcos, _start, _start + static_cast( _frames / engine::framesPerTick() ) ); if( tcos.size() == 0 ) { return false; } MidiTime lastPosition; MidiTime lastLen; for( tcoVector::iterator it = tcos.begin(); it != tcos.end(); ++it ) { if( !( *it )->isMuted() && ( *it )->startPosition() >= lastPosition ) { lastPosition = ( *it )->startPosition(); lastLen = ( *it )->length(); } } if( _start - lastPosition < lastLen ) { return engine::getBBTrackContainer()->play( _start - lastPosition, _frames, _offset, s_infoMap[this] ); } return false; } trackView * bbTrack::createView( TrackContainerView* tcv ) { return new bbTrackView( this, tcv ); } trackContentObject * bbTrack::createTCO( const MidiTime & _pos ) { bbTCO * bbtco = new bbTCO( this ); if( s_lastTCOColor ) { bbtco->setColor( *s_lastTCOColor ); bbtco->setUseStyleColor( false ); } return bbtco; } void bbTrack::saveTrackSpecificSettings( QDomDocument & _doc, QDomElement & _this ) { // _this.setAttribute( "icon", m_trackLabel->pixmapFile() ); /* _this.setAttribute( "current", s_infoMap[this] == engine::getBBEditor()->currentBB() );*/ if( s_infoMap[this] == 0 && _this.parentNode().parentNode().nodeName() != "clone" && _this.parentNode().parentNode().nodeName() != "journaldata" ) { ( (JournallingObject *)( engine::getBBTrackContainer() ) )-> saveState( _doc, _this ); } if( _this.parentNode().parentNode().nodeName() == "clone" ) { _this.setAttribute( "clonebbt", s_infoMap[this] ); } } void bbTrack::loadTrackSpecificSettings( const QDomElement & _this ) { /* if( _this.attribute( "icon" ) != "" ) { m_trackLabel->setPixmapFile( _this.attribute( "icon" ) ); }*/ if( _this.hasAttribute( "clonebbt" ) ) { const int src = _this.attribute( "clonebbt" ).toInt(); const int dst = s_infoMap[this]; engine::getBBTrackContainer()->createTCOsForBB( dst ); TrackContainer::TrackList tl = engine::getBBTrackContainer()->tracks(); // copy TCOs of all tracks from source BB (at bar "src") to destination // TCOs (which are created if they do not exist yet) for( TrackContainer::TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { ( *it )->getTCO( src )->copy(); ( *it )->getTCO( dst )->paste(); } setName( tr( "Clone of %1" ).arg( _this.parentNode().toElement().attribute( "name" ) ) ); } else { QDomNode node = _this.namedItem( TrackContainer::classNodeName() ); if( node.isElement() ) { ( (JournallingObject *)engine::getBBTrackContainer() )-> restoreState( node.toElement() ); } } /* doesn't work yet because bbTrack-ctor also sets current bb so if bb-tracks are created after this function is called, this doesn't help at all.... if( _this.attribute( "current" ).toInt() ) { engine::getBBEditor()->setCurrentBB( s_infoMap[this] ); }*/ } // return pointer to bbTrack specified by _bb_num bbTrack * bbTrack::findBBTrack( int _bb_num ) { for( infoMap::iterator it = s_infoMap.begin(); it != s_infoMap.end(); ++it ) { if( it.value() == _bb_num ) { return it.key(); } } return NULL; } void bbTrack::swapBBTracks( track * _track1, track * _track2 ) { bbTrack * t1 = dynamic_cast( _track1 ); bbTrack * t2 = dynamic_cast( _track2 ); if( t1 != NULL && t2 != NULL ) { qSwap( s_infoMap[t1], s_infoMap[t2] ); engine::getBBTrackContainer()->swapBB( s_infoMap[t1], s_infoMap[t2] ); engine::getBBTrackContainer()->setCurrentBB( s_infoMap[t1] ); } } bbTrackView::bbTrackView( bbTrack * _bbt, TrackContainerView* tcv ) : trackView( _bbt, tcv ), m_bbTrack( _bbt ) { setFixedHeight( 32 ); // drag'n'drop with bb-tracks only causes troubles (and makes no sense // too), so disable it setAcceptDrops( false ); m_trackLabel = new trackLabelButton( this, getTrackSettingsWidget() ); m_trackLabel->setIcon( embed::getIconPixmap( "bb_track" ) ); m_trackLabel->move( 3, 1 ); m_trackLabel->show(); connect( m_trackLabel, SIGNAL( clicked( bool ) ), this, SLOT( clickedTrackLabel() ) ); setModel( _bbt ); } bbTrackView::~bbTrackView() { engine::getBBEditor()->removeBBView( bbTrack::s_infoMap[m_bbTrack] ); } bool bbTrackView::close() { engine::getBBEditor()->removeBBView( bbTrack::s_infoMap[m_bbTrack] ); return trackView::close(); } void bbTrackView::clickedTrackLabel() { engine::getBBTrackContainer()->setCurrentBB( m_bbTrack->index() ); engine::getBBEditor()->show(); /* foreach( bbTrackView * tv, trackContainerView()->findChildren() ) { tv->m_trackLabel->update(); }*/ } #include "moc_bb_track.cxx" lmms-1.1.3/tests/000077500000000000000000000000001247673406200136415ustar00rootroot00000000000000lmms-1.1.3/tests/README000066400000000000000000000001331247673406200145160ustar00rootroot00000000000000test-files and their MD5 sums go here 16a41b09841f6893c6a621f3e7c63692 emptyproject.wav lmms-1.1.3/tests/emptyproject.mmp000066400000000000000000000356111247673406200171070ustar00rootroot00000000000000

    'I[pkXE Keβ>AQ)Yylr!P? m@iۋB>~5=e(E궘۠\HRqKѬa3R"*Uk(-C!GT~ypǏCXD5X"{h coE&% MR*@BB+-ZN(~ZiM{ҷ8, XZ 2J=ڈ t&)iᭁdm$ԇR~hxaUL8)P$w AUsDđN _ Թ0\֢~ 6缦,nMCpc;CЫgtY4\w}KH,/V^3k8j@ky?{GDzY%B|/:4XbV_@=_>k_9YH-+%&G߼Kͩ{CjH9- a$ԵkqYO$1%LPMyU7ap1H^Axv+|ۋD~Amj\`ϫC#S1h2L3Gg$Ah۟:@khA0m(6FJCddZ*o+s?l3!?cXth/9~ CAaACw!a IDAT,~| (6~\xi Vf']l@!c0Kdjld%IK}떣xMFwt3*I1"A"Ib߮ 4D6JB+ |لSkju`&Hmꥭ]hoܭcVIhjHj.:k$B-Y2r7qy l,$@X#Y$q$M&.]11t  rV 4Kc"%Et,ms`썿lr6A)|e_|€3x  Zg)I$ᎲF$q DQVg,\jLJA^qR^0)ȼoHIE"+VMM(VeI 2 clKiJ蠕F8TpQK*U:Pbm<[gEzZK"2DCWYW[p~´|؈u6u^t%w$0qά}u8'/!DL#Xaì/A$HRʸ9s/Fr, 56q.W/d BII UmlCekRuHi, ̂M!E2:l$VVsu2(ӟg$UpoLY`3{(95ZMjƱJVYve߿3ZY$R>g!y+l e-8߼yv0!ZIGj(V f⥔S ?7aMXs%cIummmX}2_r$PB T K.w*2NEf\uoS%J"8܄feNDQ i"ct:_VZA [+Siju)׸-aM|-{ˢ Gx a< Yg8 fY" %O$%5{$$_?;FH!]  eK/q5o>xmaըqϮ5 ̛uw߃R͟zeO} Ji|{qo7^;>밴b곺wz+VvDZ*}fm(66ⲫ:v+֬^JTE4BIǓ%K"~[މ+1Uq:Ws 7c@ld^j|+֬^jL !YĢ1Pt \_L)o)>;KHYH "qfRWU\.vmA"ed4H቙\q-!f6%x c{<!\( N Y|c#FOat1ʛn=~ i8'ZkCab|_\zXt7cۭ`cZ˯B0v$FKwL.)[ bX"pjdpқn]|ӕ*$l%Bg67{DJNAZ g^a]:5 R>Aҳ6<>Sgނ;%,XIHHy#waXF stJ- Rr;G/B(C :L?^P63-BDlVEa^;;zǞط Wg!sI$)R:eXgKX8mX&\w;~Ӛ7o݊{r/$fB\; +,( 0f最4.^e+:|m&3Ԭ\ͭ͸4ql!\x߰`ݚuhjnµ7߄OoM[λF%069ɾnVi0Pشi3ZZpNݼ_.j3 (ފ-7\y Xpnŝ_ }SZ FjlXqU7b5[;JIx6[ݟ@IS eMN2 jMI8$IE2Uۦ 9[C] ̦4Z_]"RGͰ\:m;oӔ4ˊ23Lx[zbFiq깋fIy|jё[gqs G^z7o6{'O}}8Үg5wlšqA+ǟ>Akbo:sK?@ &H06HwZ E?ZsxP.ϰe2WB[R042*džAKӨر1<{7z{PFCc#wt^mށVbR4WP#sJe>s{w| }O<|:f?wƠpqZ.G{ѣ\ܰmVZrJSto￁s'N VQTx~ak \t%wN\8}\D_+/tYjj;ݎ}vVE\݈UVVTΑ<Y: axnn9/x#֮]iLJthp&" y4 \Iӄ*RĉATJ$¡ b4 h_^t1{;]I 8Ȝx'pW`h!%(B#cfikci͚ ! D!{^Wuo^&p,\1d=&Żg8l [xpȲjcZ1:R{ a"̾+c٭'Ix`jM"r&Ed À&u--ըC 1W=;;(!8sk+ UJ{?`$7FE( mT瘦Du^@KXzHaLfERt291ŊDf%$PL hlȣo֮U$)} UmDjjj =ynu}B y\M[&1JMʠZ3ogOdvY|6v3Oٟ/ erڬf>fm % Z\Ȭt~@ir0.w #ã.OS-b ,ZK.C. _viחUYP(=֋QLM&H!Pll@kK+ pB!Z(1)JU?aLOM<%8gZж\ׄ2qcJƀqRiLNN(FGGPTPT5u00D.W@{{Z1w|߱LMNan#ڗPJ .Mx?1==&*s) Plh@[k+֬@ a>Q1$tN*^e TH4E9V g1ɭ-g-pW |7ߨ@R/)9j)Sa0H+ T**^/i%ƷUS+O\7 GKLRx.fLHHOIf,@BQ}{U|{y ?NBmtyXy/`Xz_$a3'2nFAQGuY\jI4MKӍt^|^x.ۊu6ȑ#Xf ֭[Gu.R`?>RA8^yl܈7`ҥHA $$ ljp襗م$ 8?s6fx.wvbʕXf-2dhޅ ) X9ݏ>8 \~9Ι _uL$Ʈ]Oc)yW4eW__[hkkNGdV+صkFG܎'z_ ԄBmWƉ;!a1( c_SaKx%^Z,8g!t> ӣƥ'F?Ă9S,bZ h6KcPDbY: +\lij>o&#mEf gˌ OURDZ,QޤuV Z6sk+&W'~멝;q߾gvzEߞ.EǺ5H--ppx'099;_ÿA\v|M9@>zR?;J|jN Kى\I\w' !k. _?u7z{n&Ke.i1c3sOIo٧_!㞫 y&;O='o~Ͻp1,[IFi^4DQ{v&%4w Jb,njX SDͰD)+ôR5>n4I،E$-ё8pA0Q9@+_pp;0[n]-&(b[[}!Ul]ؠ"Aƥ:W#jZ}^(_CC{>rׯ"J zW^֒ "㫹g#U3SZc-t>|8oTJe $]sIqA:u |;=~ֽ_A$]C֍gࡗ0>1};:|#DE814b1㓀`8u~oG} i࠿o):q~p}=]oWw+d׊ f0*VI ,QZ &MhJQiY&2Q)Xr!ouRZV;8Wj`"jbdlɢi:- d\U6 ~ }G8i%`5sx)7cnZ#s{SlG#g{?B\LE8w%Ǚs$Y퇲\6)xwJG3.)DQ>\&s<;{OZ,e NžǞ8?ՅGs֑R*LOO{{ŏ~rx2)(M݃O?3mG~rLHrmy*"f#)Ɗ! }ΤRA 9j(e A%IBx$?Vsy@7RIX ͮFZyzs@m5!K[<]M2eC.lBLY nVWZwC\g]qJqұ-bp7!3d\gB ){R'?EijҴb@J#"='0h߇c/~q?=5Rb4}{CytQ4}6FCRѳGK"œ C)HQHVL-ufq!I(QxwXh (AӖ>+REjuМnnQ/BVb%" Qfezw y.=U @3)2Uz˹ap/ wǣ"Պue}xZ3~ԁYRzIr9q$I04x/⬌G$ J Rk0pb>?;;+yK?0+\ߗ qرY|^ܽ¦"uu^pRۺ$MI#8YpYGgk-}{ɤ >ת)i$)vk؝uH>,J^g˫0"N]e1IW<$M| 0o/ 2]y'&q(}Y466@QLOO"C?̎ff5J8 s>Ci*u|r/|d﷩3X`+ɬaüy0>>'q_:=brbh/ ժҦi:k1T#PDZ,O؈8k MOWSeJV<%Y(jR"Z#ì$ӳVL+a?db(&3+@ #:\Hyh ;{JOp̓#.xNf Rv;MأԬsu:z@ 9 Rn!p2W&;YGU64e IDAT:+g4鳟E06ŊY_RY1!?y8G+:w= mmmQla|G8@k%df{).d3^]yeej[5NK;8$hͰ :$I 5I*,2sYB!_$yP\WȢ=ꙷ: tkYGuƒu`ZH65(%Sc=g= n'JEG̴!X%ZL$_̓<0vHExf'-{O:v ;|po**gqbc#P s[46')2L%ra  :z'{qM!JH!j8,Z8N(NICkG0mi10IE]*Z0[yX~|N.z61qR- 46\p rP!<>P5kXe+VgA1h6?@$HS3Xnm)/VJ/]LjSi>-Hؤ b 3y/ )!,Wџe&I0GBԒ\ ))ՑƚZJ$I(I1FF,nȫE2?yZ-4#Xސlm4!Y0T!L>ZFU~X65( Xqv0_r $mdHQuzPlFߴip %Zj4~p?9h,zYU_;"sϝ'M=%!_(`,_K-qG0Q bg&{^2d5oe:@rU<.%M ɔx i5*Jr~eVW2$MR7Fu|+u*g'14AP1 vAh[Uss Vo(蜅Xav>mށJ@ꐽgirf^ttd1IĽV\taΑ4 lJ Aͼ8J#9VdAJXuRaRTXHjĐ*hyDI',Xc8aiRXb9 .?KLͷ݊UV\Q K,I?ͯ{>?N8y-[U!W,⊷\sVymaU,WJK ,ƳItۭX IY\ކ0_W]yv[oU0Y*wmmwbUIKqٛv[jJLW*pX؈"*K<̺XD# @9A(R{Ϣ.cAX[ U|g9ܰכI!yk'ϵ|52]dxf1Lpmû&u[v/?5 1y1F/߃R -Ȍb-arb+_8p:|a,nnƥo>À /c|JReMLr E<3-qb|z(q 1A3=L2Y0},J inOMW}40G-|#g<2J2k0:9[n¹s1؀J%̅*(\*CoM&8Q$dYTX2{i#6c]752s~L3ddv̬@k/bϵT t (8·G3{+O5B 655ajzmK(F_ ܸe {Ó5"@H&͕DT xDZ>r/?~ChikŒÏepep"LLLbbue3x=r!JSt=.4ږ.ڛ[v5}ι}{Rw'kll P $ۘ9 $* @GUlKBQ4#K<δZpAۺvl}=~~?¸x#OT5. bO bey_}x?5.\e&,-/cǞ=XGpaJMB72vsbu2}r!#طo/Pw׭ú^+Qqvb47;H"gYJ$UcS,Mlc"Ja)H_Rit5e#H!r- `l23Ž+SDRElڒ^iJXc4x-7+=k\\Y)+jfRIKU|}7Of!7,z3=o%ԔKf֭p5{3ᘯ CHLH̛0}|xM7h#w?hcp !ݺ[VoG۶x|+='*K> $Ѥ ߾>|M72' … Y=lRDزi ZoBe+^|c*[^"$E?}2ħt`Uj^\o_mKS,FrIwy ;@d_OYqĩEB(l"F'22Z6YfYAVh H"KbNr<)xu gΞE3÷wx1C|1h ,9tʊ2$gG?G ߁3mb=NCgЌ4>ڻwcu4⠏'~Q¦D po܍G0N}ʠѩ;h4혒Z.\@۶hc7?\\]eJ.WVTڦE-L]S%2quzd!`x`qecLuJ7_q{JW"a4+{Pe czib{iJjLBd"&DqE0dJUf%xԗ̂唍m6-1Eۅ ]^L\Ρ?A#CiC>VHWbk᱇Ɵ?[~~yVo45)I轇m-.:ʹ1n-!"dxݩM[EɤI8ж .zt;w{mh?02uSN$9 A (RIv6-L]hffG=2M)/ҘN)!R>Jdj+wEgϰIvFT!auh4F4Z,YSiDKZuK7[؋G@I"\<p3?;ӧp׾7-<{'fb!G>u7ܴ ǘ%π GyΠ矦RD6hjjE!+ k=;*-fLzffɜHh?Z;$"I5e @$Ɍ@(h) DAk-Zۖq1پE7 Kg?L:4Q!֡SWdCcs0*ݝ Io/}>*޲ /]urvh9Zu#C, 9uEWbJ3?0=UM|{*s˴l2| pԓ p[멙8n 420LjJ+xF%5bbP$:IHM3ڠ7PF5"Θr2 hSZ7Q)ADK6%]ݒRYJxf Hh!J`*g4F*$R'ᓩ'F%P˞:FMd)g_m|?ݭB$F9eEoȗ=q3;I%e09\^89nE~1`*EW1#1ĉoAjTLTv[kRZI|宻pގ^8 14<כ@=$ʠm3i!eZc60B7X.WM>O"9|ȢWŮ#1T kSՈh3JiT|Dpy,R~y R)CwϽЊ|=d gΞŅ1 G4u޽u݁$m :@bur &3!H)E ߎ-N:sΡ?ZKI%͛k.̭[v4.ARaO'N0b'0a{|cks=Ç뮃wJRDa"?8v8/> ywkn^u=̹ܿ>@{'Vm ?l/ǟ3s'^uuks8|L {_XSA|_Jv-pD=r*'!&:_et*+h(;ɩWMleFy9H9sMt_m[|Kx{ ށ׾ر}'nz-BcqŇ~wp'I|7~ۯ?RGQ$ȓG 6sR-RBE/qiq >?z׽{ڍ׾uu;CTD ?0/]wߋ}W{~^߇yQdv}:kC ^|J>w ^7b~6tB4n][U @!%<7ᄃx͛ވ-7u{c*ծm[t51 C…x o7rv؁׽u +x[߆^:unfQyɲUqםJhBkMTc*/O_1ѣ8w4]s ^cGEm?W۰7|tGiL˪N1@ IKҥx޿đuEұcX:{Ĩic W7{Ν9~C]1K/a!%o6)PKfp>o]| O/`C֭Sa<ϟg?i<7ǎKk^xGޣөB@w?.^8c߼_\8ZmKzX\CusOAۭ/ρ[^\#1Fx07;M[Ν> [rH(ϓCēOx澿ɣ}}4n~[ 먲`{3O?|cS$+μt }Л}x'p|2R xͷH[~k$!O;%\8s&80;; mt "ALxpY|p~a&;={$Tfn'>_ p uQ)dx3n"aqB؝]> 'rI>3rj3[wYK`.\,`b$U<5gDˍ\kॗ^#]cNڶWakî=uFSh"h.V@*k$=rxO=_`aa mCO(j8r(~?r%spDs4 8p1|p% ѻkֶ8zuϽ8z_x8G}  '38 %*ڡ3@ SAfRU-8~8[<_nc88ynt .oc8dL\8qm/}]v`87Wt}񋈭øi`-Q8z(x{r+W?M@|Jj4Ղ;%eZh;rtoM)Yn*b4?GNp9.6paegtٽb2]XiE2,(-"CL543d9Mt"$%fOߋ.ŧ£:MSJAkv<HNWŨ& dB Ջ.ayȚc|8uzj{5܃Nsx"/?밲g]?ac1ϟDZ_=*>0R BYLLDiL4Is-LI2Kc?@o>1^ T4uSrY8yƷ`]3LUֹG򿿓#Ir(})%$$GskrN@3$Èg|It=4C 8vfz=GCV*4fp̧N QCIf έWU "zXX9]H )dxM-1%b?D'bo'2|ViueRR ;(m Q)I4GOVeX"w^"h16T]8{׈VB̭jS,,Zʩa0eE1(ax,9/#lJ_m颥\SaafpCe޳gϚ]pf\rXS3R߷w]4ȝ 8t]<a9KKc\0Fh"to-*a]p2 ְ[$9l^#|M ܴ=t @T:q4⊶TWȴD 4D RŢt-@:rS!S&_J@Vۖ"&NZ3oݝA.QMUI9m36x%8X[,^j!+$g'x ufaj,s]fvJH/bqV~3YSL/P+vM2&?4?׏8ưO )DR"&TbĘŝ0ϮKb8Hb3%֝Κ]}`CجSUwBHtLnv 9m[K>5{l1Ǣ )b65m2^9bEFZPㆹaR=SMbc!!-1SG칁ЊM89ؑes%@!t7:0"bgga-Y]k#]رsuжj ֭ $5^񿵤c_ 3xv#^uh=;ع{_A;m`㮃k{v>t7okN6qy9lڴW^v5T¶y[nG;l.x!wPF6(Y4T` SIG`-]8!f/+٧!J)TUe["D41Oi)i)SIֶ2(HQS#+\%!PZR;KjәBS% zHA ⮝;Y7x+Gߍ 61HZSR~co>Y(!~+~W~mck?߃{WtU`O ,v܉$ n|;ދ Phǎ;!8x 2dʮh4!vo4 :x$n>G}sbC4+ߦ3$lL#Jn` 5qFEQ]f)I8Xny$YYR[axL&TJSdy; |B9 y( *d^ĈjK_ %<$fvri;x [> qwރ*~7y]x?xߍ1|߆N]a.ts籲x;ϫ_?qWFIH CB hGq"/,A$c9LU%,]nG?1I{qyx#>O`y0 '"(nwyqfqN;cԻ0SX쯖`Rb}=yǵ D--aK/_?L׏R`[~ǰ!d-[Z{b…|ΏBg.!0 V C 7oƸimn|ϑ'XXZ*Е3qf,-/cˮ]X+W]GE G.0 8r? +Pܾe f:]Rޔ/m4ʳrSg>&<_]~}aiq 7x{k+>W meV7߂28z8[G>(4:~ Ў8?o~va8s?~;(4xE(<_m0xtzq篠~/Ǡ/}IU3B*oߎhk^ju}EydfK/"Ȇ[!P ǯ?wCP/PE;}W™:}ں /]0Ysa7s@%m1H J!CJ*8 +ë$Ae4*l ixUqʽb+I!MIj_Ϊcu`BuMx+TTR^%N} C݅g.;f->8޻7r u8p`?WWq~u$>pH!#yI\GċO?s Ќfc?.\s\Zʼndš/} ֳ/@#ĒMJX>Q|﶑RMI!B *¥SaγIh8| onoR)H Ɠ U*ssYA*R|/|Kx[zhgə8D3qII+p{r=1d섶)]/$URTpzKǺushԕ)gL"LXil)!(h V ":h;|6Ǽ0:䙻V%.-!] 0:[y%<2'A O o7Ñ#}\Bl$+1Z ӗ޶ +Dg<dQȒsؔb8S{PP!4Ra\6̠cr,"؊ۏ!BRR(ZK@ڵέøiwcQXR~ BP !x҂k`It ^XhU ]u0; %[jPC ȩfi02 dPcRy_u `]KO]jҖ: 8Na5 iѩ P G?%tn ! EKBDđiXKcP9 E+o,/MIcmL(%KQb&"#"K&%' *Z df!dM4}ȱ́6ZуTҽ#2SC䯔DnRJ\kuauŢ#)-PT"}h-ʋƎ~axQ/tTH'6S#; $t.9. IUAyhN5N,(^f,;TDx HƤePJST%fՀG@4p$;IԽYuݹ^ */op}wTo@iF1+)5Enǜ)H.*%镞}Ӷ"q ZhMZWYv V0Vh"eKɹaRIʞjy5'CJf2|.cxy7ufR 4%eYC<뜡KD)QUv76-`Kn)QTSZKJ=FĐ?so!B;K~I\p.`FضŞH)5NMwA?pT$as|pLMJԴ %w3b<ØWoסӓk f$LvSaǘe@A !-_lGS^()n m Dm WkTS;-5mI ",R#Uxp-2sS 2IvhibϬ!т "Z~^TUC]+zb9f8K DvĤĒOTхb#F;2d2̓㆚3PSBP8 1DUe-BhUh(-r`<=-QҳJ]0S6m @ǝN]b]O`X?"fz]f*Z ˋb`pWEAY]83gZhS y-;(ih #3 `b 'B@b-@]uR@TD&UC7auudGNE/Ԋm utI@[vlkC22)79EAlXIm"A F(^*y@I(vcfz)(ma" =07HH$MvAc"QtZ8@(SkDBO>xJ-- %#O|i 5P4تL՝P1`FHr#5f$lC.0;ga& vqڌ(!w=%(9HP@`Ӌ%O:[HH9٦ݺ{j ER@@:Sx%A BT<: "D|45k9j31A$@ `:);88ÎՈ@Zޱ'#"gҮѥԦ%Xa EE03EjJm۔pRoRmSq6ɢ$3ӣva2RP~#$Gض3]l`  :A $GLD $c"!xԙ )((/\ݍRQhA/J5ت2$B;j t!U{tzאTy2ZCWifϋD T:D%wю(wE ^ E1:(<-d}UF$J1qe:kܣ8NdtJd9-C ZC @T~4\Vg 8S4XIJId.C! o C$ʌhؒ9NCQS(5JAD rHa#zyƙCd=ۅ"y[Rr#JXh )*Ҕ{DM#ܚPEWUnIxUQ0`$2;]loGMk-GԐF#Zjyg4s Lb~5HRRxÔ.<&dE]eU^.2ctB)Y6xl`i°3@UZ|>e9j:s_PRc䆨$ԜsNc,&Rf\i6ʼ["$9fg C RSI")QsTJC-diC+أ 뢲3Ayb_gx7CD)U'Ћ&+O=D1VClXm.& 4x"c m,r*+Lo @jK^`@]UIEbG :%@ j\JSQt_(&RPFӛŰ?Uۆ4f !Q#XU)LNо 4M<Ɩ6d# fD A)5 TUhUA )҆hbVv{)BN15\ Et^f 0,f!DVHMf,y,x5f63=lЌFc,BbefW`KG p75DQԎ1e*5dJ4PSwDAێ11ӭpuA3 1x$*}\kqޡ"& m U2F5{hi[SFmh0D3nam DTU$<22!!dDŶH,.iH@߳0BmHՎ-Zi "}NԨ.QTV2tf:9xJdpaK=rB.p3,,} yN~ZOQbwJ 9YA Y FqY[R]1cA9Ձ1q{ @ ) 1RDhQ 9V ']YEMnnۻ80 QE )v%H(v6*z3{ظ ;oUuE7)0WZzr:@"ZV x42?l6Nd̘H1r4ae46maf+1Q D B$ՄSxiy`jJ.a4lI$ $kHwTO(qOS "k!IoTGcqe<$$$5]'ʪBR *PbyZ7!P͟O]?MHRC6=SJTBQyM)KW#/0>'S0J*Xȁ&H*[JPD HW J ঴ɑ.Me<`*n=G$I;va8kieE`a-(ysΟc4l)6ł.z4$DllЊJlIHt{vz:"O+"z)p84RSC YE|N۶֢DE 66vqCE_caϛ9-yhʡQ*qn-I(1,q,Vy')Ƽ]iH;r&wJc q9@]2 /{b[E?-띒QzkX%L5A0&up;gyxJ~`"NtmcU"Z@hDE'.n\jc䘀u,zo}Н:@9;`D+W<2XvtK1ʏ= ^Z*ҖENn"YX :xY.; Oۮ+?!BҮV I 7o;6v|Lljާg|p9z:0'խtF-DA#6j̍>QΊҜg1HQ[_G:qATy-y'͈OrUbfxCK^] .YqT$BԂ=oE$1j#3vaL:o Mr%9 !8h<(qs] r:u><& ~Ǐ̤64aV'&γ]JEl \aJV رo4 )au'A^:%Gs$7hhm,D^!O285YOGsɡ &BC)_}fQT vDIt qUI\ſ|pnMg~4yV?6.F]A&Sp[RBߎA7  ו'ňW~Ήub {q0u)ekUcHJ @Wu`ttYLaq,f360#$[ýRϩlG_@-Ǧ6"]T"z ؒ2Ncb\^*8ix}utyT5֌#%iL0Ÿ3$ɜ|N9|HiFA=U.\'0 Bdh _]ۖq'>!cN6LGbMbC-d0(GA]:{zk@ȏ#Gb&=:-fr~jٮwdIdyaL9nÕVιiy_xɘz][narPMX'ovs 4YqnsɫJ[!EPϾO$`t|MJk5F-bBY;.QANuq_̮ K.XBwQGVC/_[p{c@眾uJ_ע;$+Պ^^8Rx~BWzԮ).B}hDk?#J}t'F{BcNiDVAj$^^)'l;q^-NwZok|=`^2&Ԙ y}¢`3h7fG`{<}<^֛,#Oz)aL k7XQeNLӜr1nk^ӽyBX4+`$E*(Dx܏spFPyߖ4GnwmwufjD:J B9Ot[khc.S8ԛ&7n멳βsgYԝh#AWT.4@{\8avȾ^hϋ0Sd|BL)-j,22ڜ)|Ø?~_x6!Nґ8y<.bD 13Y4&6_g(?1&pN4m:欐ϟF ̅-Vf?}\`0TOxL0RŻ3li*a)rUjLaX#5}vJ㮩uIC2'glxq_Fsw=$c]KN%&uQjn^1C mItM7~JTK~nõ;\CWܥՌMQ;n'U cZĖ)mG/q4UELvyWhx6'3ifƫɫ`̞C`rOu0PORZh1{6yN@W`}eYn5bX*vK&Yfn P<@`5>2">Ц Rq(_cj Epܘy$tJ< -mc]Gtg ~R%+ŊׁG2@]Q۬YnPApñ^ mv`k7PzBB ౴oCn58↡`ƑMw5Y:fVOG= 7 ?*wj=cKB,|i'lPE 9|0o 6_'ju8ѺF} )L  ŌmOx<7BGiyݨGLS$ס>֥WHl:Σc60 L0ӕ&I-&P^'kгcDSsWq [XX>&5н8|R c$Fs&H!_D/q0sz/kƴ5>J#1ͅh a< רo؃'\>Kt =&G5ws,nK]8lOSWcFL Ϛ>/k:ˢK'U~ eSr4{;j)B xWR?p'Z<#fb%}kk{c4p7GnkB 7{&_r & 44!nۖȊ2Ba[?h-#`ƏD=O!2Ōr6 (-(BEhLrX$YQƻ-ų Xތ1K5"\ص0Šފyݻ;l 9DK\5ʙW-c"u@@_I0t^Sq?[.ۘy }9̛9)'9l猴oFcv=z܄ d]nQѷvk ܚڛJm*014/nSɓ.ӵ$QT} Bd: H=D..*>o`JN9R?)5D<"zyA*QH(}e-g|<3,fM}jSk`QsA7t!O\cZ;3RCrHߕEױV/QxN>X2 eC.>Ơ_gSgbw;fH6C9NcOkCq 7q <,c\̉,|uT5Z|<`9!sӼrM6}Zea^b{z' S\ƒjz F^Jnf|T{5EN3;@[p[_/f q!\3{F=ssJY)=&HF(|/"fo]zղZ8[E+X':XՁX?M̓PK5 i\Dab짣)gw+2tH0}& 4*~BEKoay? *;sBv,jlʉ]D nIGTۃN>ɕߞٓ{)y'.\ϻ2 -` 21R@w|hy?EC&6׵J(B<0% :żxs"+]bX_Vp<­\o) q|xc)+BdF<8͹~KsΖ!"#YL.S,u=):Vm߂^J0)վ>7] #k\¢[h !3ء^cuguurFح>U 6 Q$)Ta^QP-9ZX׎3'[rU1WRnܘ~⳥ba4`4tч"/2pD/dCZ{KN:Ss"Ol V[q?I տǩTn+ڸ)vvwLlج jr$fWڭ{|)FM݁琸?d6 y6sj~CLt:Mz;DYv R:o$v1wof ?Ic_G: c0Q/ꭻ%LG 9V7Arŷ^B  -:T7*,ycTEZDWWݲCp?6V-* Az=ڀ1<=wèa#H".j/D 3J#:f Eٜͮ eLs w"iIwxkc ANpI2g`LblYhgFa T0-GnFO%.6ˊ;Fz<=ή;k}HVsq.mLqZ1:' ]g> eS qϛtkCDp^#{MBDyJ1?:(E'~q X,Ϛ,b1-O 홱MT.<#fg|ύсU b$Kp)ڦX2TiDX'~Pi}"Ғvqg9#.)*6H~DV-. !\*>1KbTɼѻp~t a%υ׎֟R |a۟:BVzO2r+jywBza7/j_PTuͬh`-b13KGdig8aU stz.E;Pz%n+ /[%g}m2m @n!>;&a^v^;Ҷ,'Rp/l'Iy6QG:ۆV*!plFEjʐ):}v*]@ײD[cFט7=Kc=:j]kzu1~I+gap15Byf'x3ASʜCnf= RY_GhK$RoWw(U A 1xcS?RF=P[Ay00}ѓȀr*WnZ >3clO4]yܵ<ƫH2dt\ \T 9 ~mmX j0էEe !f>;2d DA2siNVckϦqM]`I| r\qGd2rqb֊LxmNIDXڪqOs94"}-rz"Cl(㾏ZLJM523`o5id4Hk\,5>`JcEAk:k*YJb8`O9*BԼb<RN쵯Dkx`< ΣY2h8_R8sjEi@q_5*ZZtQVBL 潕@u9<_ 4NClr?y&cdA%>::SP',s;1` 2 EZ_q͢5Z FC-IlgɑZhA + >M2rRFq M~Θ ZʫyՔC޿HMTuUYgQ@=@EM 7ZI0Ukd$BԜvyf(?/k1W׹߻֤4Aj"y!UP~BIZ]4ѦtSZhgy˅^aqt/W8SFܙPSi0āۯX,`j>zssكh, )uLΊ_M1j[]n5z@A+ЋϏt&Vfkmj!yA׼ֿ,kYJDOҋ|z@QX.O?7߼%3rrf|ޮ@7.??Ӡ 8uv{cH 2TvS^Fqr ӅQ#5 >:oM_C^5.mdZ\w6s}nw&7Y)U#@~HM!=O8.7$9k 1TG1 cZ'N7@XeXK~!btLЍH՜=~5ܞ ֛G݊&1 +"P,gw۬.<5wf \}.4-h j"q(k0?~oߙA8:\iz&c0"Uav8K;mXA1Y+/Aƾ@æ@G1ltAGLij#[pΌKʻM¼xQ|s5rhʱ \:0 D)_"&*~޴aN3\؜:LUR]q^8i:a MzA]3)EqtBeNi@{Nol.\4y PvBxӫuɞ\g꯸eߝ} T$E}K+~oȫs)"#o_41:PZ)c 凜Y7S8줣Vz GsSc4LFH l(W? 059'FzhAoi!?qކcUk}U!.l:6xm֎\KSJfȉ~;2"xZǓ)_bd+GosA.{ض }o":.=;-QWe#FΆSL*N~=Jp>c_|~պNx}҂wMWkOAc^R X}8}YG9?Q{?f\=xtvmUE,j4*FCهLX+TJ )'G÷]a5ڔJo|!;q;G/߮WH@Zj1uR5 ʽ.,qܷzNd^ǁm7%kw!r)7Wݤ_y/F&9YUzSPHƋzӍ+|`Njv^ :fTŽcmh$ ސG(o-&iK6iBI>z;SU\R1,j"0Иo~Db570Xjv!r:2i6"rbKm.KmYLkQ-bSDLH1.{ҭԺ:,؞ o߿C"kTDLXk =ج%х'BLkqO_p-x-rEwւ,Lcv t_JaZȫ _H1ɜc R''Fض 43t0yƻz #bk9D4#e1oWpVt|RD:CrSr 6ְ )gfEĎ-|}a@!ۍ'UZM>hgYpsJ;KTW)Ay؟Nt Sy "%񱥄1"y arU+́|oW ~T^Nۙ7r 6 Կm4H[+b(!4Lɶw1QI&Ɠj=ȯPKx ȸ7"yZ K\x{[u1Q>%&9+`̰tIq]cSk!ncd?u/?~oǏ`vֿ6XOj@$8B OĤ6Y.v:b=- Q=6Rd(识@9%fbFUQw̔>7??V3-+GAp$Q^K aJ !e mcPOBoE"c>l1 St2>;q o&'y6$.(:Z%]:k:{+/a׎zntXWtA*$rpAsFV| 2=ca2ŝ C@ c2`9! 4GMw6C3=EFHDrk ),w2_r㟷}rt9muo Oak@9Nlp>ot1itybevsإ%)9ߎp?yc#V汋 7Ex`_!SjYD-yꏕ*3tj~?nLe8BMՆ =[ϟ4~[:v15/P\Jve @=[7̎+~]WCGrl{yjKyYi'jf}d_9͆-CHfJviFLcjJK kS,ˌ:V3w^. RX9#Jg 1e]gCkϏJ NjxBPz:9\9#^ިypG \It"::pTTXK*qɟ]׮de]нT{W.{JiX|= QPZΑň^NbH˵*_?_x~~pڑGJ)0cɫOB+!&4EZvL)7:+ypkwx"=fP r8Ox>?SĦ ?VF'{cI$;p^U.4S\iјj=զlD)6rFTvSc̍Cdzi';Sb΃fx>R30TF@;.#R)H pS Q r1u-tڼDEM2V$hKfu_RZtQXuZK:db_?4*!fᅮ[I1{m ڢKC_{Ũ |>>8{^vӲծl7)bqaٙFDB/>(ۭd0$f`)!-5\^(B@]bF=g0K$Fž@XFM~o`5LB&6'$+M FxU?螩J Q̷"Rܐ4yq귮9&'gfDe{4[5:h$90\"Z՝E/hCiD'a2-F1}i:uh]dv [1hHŦVePj֌[8:&>]o˺*ceQ5m.ZJmrRe'cDE@]-'↠ CUP@nݭH9I[+<j]+BNQ㈧qknM//E(hô09+>E&lSOBJ!9}T%ʩLH689[_vI_t"w IA_LT6JE۶#m61C_4V,v>ɔml"E)>`]9Qil-cv&`Q<4Jq`缣߿q45}s XE!x.\p n {9ca胡9$trZH{݀40#bN.Ѽ\ #|x4RbtKVo\|%f,G.DSI-6,+)xTۗsހZCYaFLwz"T‚/!I{ox<7A(#y`8 ;cNRf+G+>9Y;e*+(0+-a*jbrADǟҌ1/,5J4's9:ދ-DDtD e4YxWz7$#Nk̞ꟷ L1Ɔ^c2$'~~9߮6nVV[_0*mcz0& 0_9'lkNve3U7K!H- ζbq{B)Wh۟Eq/||~\(gLh4H5V C:qn#x _NdžZi]M/fAxxIt5EO?($PqгZ_NjRh"gv}Xe t,`jR?x<?畋fn>[&ň<¯9|< z~j0|ܻwӺ_܄ΝJMJpsk1VsN& VxLRyxs>d6Q[ yXL-vK7SS0wu>mAKWM"8s(%_\8sZC`^{FvfhQyXX5ZMK!||㌰ly[-S,zBE& Wo`:mx3/e2Éx2v / 9#>:wd 6!S*$pecGj= 3EV)I}|<( b<'=薊:O6jpy\GKS{sL1gH2SaA}O!hR+Rx^x>o9 y  #8sTPG_l~/BiϰZ,=o8,Wrڥs rQhvP6[Ee_8P[Ö3'OrJM_̃E *GT9ńmNҌv-wk%z?,'R"-Џs]3rIV)`AT6޹7Q<ڱ]&f9< rǁށ:~̎mE޴ ݁=e֘P:BLRz$k,؄-[׽nH$>ȝFG*7M@x|>TLw1«x|Zul:bQj0;PW+ED9cv-ؔ5.7鯩+,9,`\a_ر⚳< 'hI&ZkwCYP0Ű)U =NFW97jGTC~x/ER_e7ѽ4m7}wA8`%pm7IQβ' w2*GOzxS2Q?q d}E5̉zXn=Gh _7:¥b@@46la#nIr=[׮w՘ʕwPfn+}^{&Y V˰IsP2-$p{ *RY·<^zI(1iE9l<_і{nfed"Xo!(˜hE߃O]B5WډXcNrrf® -qK荎:ӵj% ?K ",޼Wb7üFN;R8F/Dl"ϲ7[G ;Zf(K9U#29 崐B]/Mɀ~HHh4z=/r4Ҫ-r&ͳ;+lеD C'(ysr}2b^†IF=) Tlպ@^#lD_~ǭy*\ls{hbu aH([57˫clE$36zQu2tmoF4iT*0hiXsbx~<DaeWD@\73f^C04^dj@ZlK ROE /CB?A4 .Ӈ?7콰!K i2r¹9$~{Ҿ>:Bh]?퇗吊9ԻsVA0 ɥ2 'gǻ^:ޠkyRh'xB}MÜu4VI)Q=.x|Xj6z!nMރ5mf1jD}95)*I1.J{l!9c ;pV۟/Ŗo&}(/ɣPxZb$`Zjb oSW.@NqǾ?hu>"Z)^[ew?eҰC=󄼩XNYL(b!z#vy_ahuNML& rz5c+cNHlr)ĎWx~g m6‰@R~~ah]gs3"(%`ɮh7Ff\lGZ<ĺPCh= ZV]7Q5k>_ 1G G6CR^r+=a)7t?&"8ʑGʮ@5G %^ 0CdȢ^ǥf$Ǿz5cy]$tYUc4Po(?ht$As:}s3#0[PE㮖u6IDk^1C3xȸhn1+K~,7boHnw'&滋sB)u4-)h %d{_߾Q'2#CFGCXCbUL9m9QI2۬I!:`,ni)f&ԟ^PcGk (6[Mv_1 s$X!svy6t B%c|у0nQǾ7|n:]rgKN`J'<޳3{-(ƏޔC)OoLS-~Aú"9?̀0SRbW׽'=[O5N qAFVDl8~9+`\tb%CVoǑmۘ(K ]Xx޺;SphF~^&wX?"_UI ?0@1:Th6;--o(uF7 sif D-ʲSR<,8@{9 aiG@z`#%=?wtA{ԗS6N{G/0 tE !+A=+͵ԡ} 9D0t|f⍉.뼸tڲҮ3k%8:oۺVNRR* qK0-!]1Wc(|?6DIYoȗC ^W9hŴe$:rـKH0&hiH5")o|ZrE(x]^ԊmKCބGcQ&x bn^:բ70ɤ! cKƧu&mBMr'&MRH- ?EZQ}\k&Z&N~@vI ぴVJ 6zz'N?o9ŔdJ Gx:w4Z`f/5%}D1.2x)0 ²fQ]fj8+`k0JN?Q߳fHU98̫1w8k9\!g>pJ=`ȘK&$X"Gt'UH94ǁ"no7=/}N:Խ[ҏuV#ܡ( YJq];~&Zgˋյ^мNu%ǧYmZBHȒ}H(89)` ': +Vt}{mL|ХTZLG~4JBkutGDɱߟ"&ӬqIbQT d%͍)IPbcϓi\t^GOno>`۸L9oI/ NT(rME |&ܺ}ەHȱRhDXP`l>xz+b7D*ZCZs@w^|\^9W!)ϱo994B$nED@ט(}B eS&ɧ\Qb F˛\lszμҐH1uc)h#8iaw$#h̄h0܄W\R5֕ KfꖨVa!xJUj&QUy3DxTfd_ȭWm@:SV[6 }KU;{2Vz`\9kR儦hא"Yc qտۀwmIo}IC>LR;1HLvap𚹆@Brnp]rfMU3C7<UݩEnqLvٷ/q \Vg@c R-M߲l&-?H$qP ?hQr䍅_ ^}/%[y  yض]s4.nyˈS-p `bC@-6N hU-'u5jfstV"'/o ih'n5ޟ}DVCt֭i6*1݁.8F$7vOGu{~s֟6Ӧu1W z8_PA~u1'QOvp.큁yYbgg$8x]1̌= =:Zʈk<[~U9N1/L |'h2 3ir"z'3k)i9e5]9AI蟶]ShWJen֑%YrRhIr4ܰ8nH>Dbl|#|LKۅQ 5q(+r\qLcKg1Q`PRnu+ZE&FjL}c ~fsW0 *-וު"}?ֿI$74yD^hm/ ߧ :FppjhT>S[B<#\/|ɤ7 aGK:U )1qpZ+>cbVWz-!sDk VGa8;9!_Rϵ]z lP:j!qH#N菉v?6!g3IZ<١8>sƗKSDo}-M.]Gf(>6Is޸SL }jۂwHF(h+ Da qQ:wvsHWSS|{Nl/gk0ߵr3ǃ]' #}ä{nٰBjZÖ>՟G sfиE%2 /,FCWE0܂5NfyV0W9c\ᢸ lȡ3>3=>R .˞ RAp89f[ch^3L,]dmM7MD8V`8`vFK=a }~4,V˪6+yb. 硅vn^LS{GGrVIxg>`%G1xwuZS!b2FK&=1Ẓ8)B+><帘~nZiU}?OC8yw9?L9,r>|zyҧy(jߥW';y/q¼VGt,?˝6cc$a}A n)Ü &d9]#'Y[4V|,d|Vq z!D"Ss:`*0E#f9F,@FhI1~xR3{\$ހC1gXmvE$(+|'^;pZ/y sجb`,<^I=-3pAqO}rfE7'eM.Y1eɣ[`ƕgDp.$7T7'tI~?A@ w->?E榨x 4_ 5xb=Cb#%L_;0ϗz1=ǀތ%Agk-VvY|]Co: [,Eq~yQ(yl듿.y^x癐w4Iy>P[߿5C}8z/<"{OS+Bs&@.P; A>fְSѵ %< [&Somz Gzcj%-d^j IyVS#u>#&*Ȳ*gtCo)MXʋGGy5c."cpsї()p|S'wz7XW@ԒčԢ/P+wZvxb+mURP%q#:8ljںO)`w u@`mxQZɦm;;Z33ccPjji6ZޕG"|kn]GY/i!`H䴞3zJ9q{{#|xok)&8}gKXڂ,p|>R9:Й!+t~ay`֣6l)xIF% X8]1\D ~2 YI?4mm`T ƜᜉJ .l(2QVǘg@SHbg)xqs(wo)1wJvRxt(h^B4.01D u%$uVkkH&RV429D'b$ENSC\ew'qu!dPu[l )8ttk@86 lj30ȹS7i$!r6y0Ս'J39";GxyE4 (J/J7dZ vЀ K_?~p"0<Nɡ$y5Z4]fGAnFx: Bp8?!0Khbr0lݥYN}<OʡM=g)2} |RƖNuS۵8 rL>RBmpaWrN(Pu[Fx4,m ~!+L0MAy{_nh̹Ú^ }߄&3lHĴfko 4?m-TO[NKK@|}t {,X3RcCڐ  Őb ߴ@3Q!EEaG$V&&Pǿ$ ~WM櫞16gR*ky- :?D^%\rs?+tU"9ym'A+h׊>as_p,]cWY?t36C )#V8EB2\!vLy8jlD.:G&9N0q6Ec ˎidTjh֖rk7)[B;G]C$LchF} SXڨ]II)* XN:k*eL3ޕaV^nZk!OGݶ&?CoN8xRYR v/:6'3BiG1O˞ǁǝqaNqRMHHK"I{C-[hrL uU{$ٛ,N=,9rᒁaʘ$u)]QCǔ0 F6x-I59 "8KaŸ -x?~r^Iބu`QrA/CGJM‘=uMAZqAbnmhti7ki⦧uTg瘸^.fÿ o_p7;5Q0(լb[|0@`5yP\7vC'r,ǻ5v֋y͖y O}Ϗ;9SSkfn ‚g( WwKV*jmY 9 )~_ᜡrT5C٤ 8~ߍ}ɫ#cMS&\?+IFRJ5bd- ȹ;z 9 WFm//$ɧEEݚ&XXCrSF `JTa VwaE@uR>wр A/34x\UZ}ď@6VLሦL'-e7#;0"Uwsj@U9 84R`pH)_: ^E$Sz*_yR0W|@hgu5q,q7xN뗀G6sO*NϙhL~GIJ 16} #~_i FSg|sa 1J3z|;~a!X9QK"Ŕdik`c|t赡v8V;w4$ć`|P)(YĠWŽfh&7տ3:q9M/9zcK^o >9!}C(0 MO6dzHyqCtF|`fKѯqsHd9TG;)9FLV1)` Hf׶QUg7fpNQlUrQOۆ4& ՟-v8 1P3fD#f1o"3ȀrHNTtԁ{Z3[CHӼeM~o;9etT.bYͲl2^՜s/o蟈tKpGkt-c7j>)Dtr3c^W_DŽytjhgE<ϕBD+'j׫t x< KiR GXU3怘#2n6u[%|^2Ez̈́ V@Fk 9qߑ3kF:?cH,V6xNh6=E]BxcgJ =1\/|dEF\olŔC3- cuwVz zz7A7yNdZԣB)[kKx<'f#m)El dǵT?t ft0j#7FtUV4'w+ǙdFd@ jCWڗ'2niHkHA3NB$Wh17^ i) Hav01fw[+L2[pVwҮ@@#7_2I:i$7/!ۢ[G!XBrlڍi&8{Xj๳@rV/J;ZDz SP4s0M `J OU _wœo7F'` 8x\R{_W J1YlqǼV,VbT4S Cױ@DKn) !!D'47\B~Yv:DMbhƍ% MDmצ^E]w3WZ|&a k\*]F^/2:!6D;bcu|p0%D~^k5K@am3`bK !1T2/߾q=e88Crg]ߺk- K4 @Ҙc9#w@VѵEaՖ%R!ǯط1f#8 nYYW -dtͬC,} ķ]6M8V031B2XwO )3B0`!LEŔ OXN6Z]<>/ d[ =L$%/ CXx yW\K @W{\5e2V1 ?`߰n3qQDžrL2+o%cN16ݑnٶ-T*$]!19h:<9ʌU)J@-z#;9}QI;DRLێ#vkCȡ@c5EESGn|AXbq<7 獪ańI@?'͏f)=UBh1ա{_hWxnpNJ9߾#a3%fOw1L-[~'CylGAͭp+I eg Z[k7z;CꋲZe?%LԐj${PscV /aFPE 83Bz+g ׿.R~QB:;5Eބm788G1;&Tg|~'!L}X'Uۻ좄h<;!bx^;koPXQd6tUP{c@_ɟ]WS0  3fc]jU;+$2;N(.T-.u:y"rD:H)E ␀ڑTCp 6PvO=4HR31Tf L9X1{ yj) wF{jCqgj554cMS/˜υ݇W2MgRɪG[г}fHk]$a:T7՟eQ:WW/ IDAT=`AΈ[w) r}Xm&SM&;2^BMC#6&u` ?Q` \7{4ai0^&"J ň8j#:o胬{Ң@ ~>3/G4L FwwU"F:e-fARڀmC=+_35 7<@J"at7J-2Ȥ%6WPTQ^A7^ajg'afMVS_YudZF3?~k m68ř9^fO݇>R^yx<ʝRRr OIJY%6py3-.LYsm|ZC塘iDMM@AGԉ%fҗ+BxYu_ld;o)> qD|>4G8PY1`pH"\x˹s7U9 4́!:6zKͱr]zv QL9<8'KVzIWXL?~.ETPAϑc%y$h-e514oU^]ސrG5vN[xHyhFaX)mhYBc ,?O9mRMP뚕ٮni7{ Sދ2@\C]_#8xchcrV"'NJ묩CKf^187V;~gh&},"IL QpTrPO b K|r[_ șAn{H&cγPf z]TtK8V"Dyn1Ҍٝwc ahhlP`{9ԓ  [bhD1ƒv!߿~CG2jXi}̽LTPЇr>8-ˍd.V C@3YTޅ+1DUiyR{>yM^۾E邛^C0@3?z8!,a J>'uMo geHCL3a ߾k&bg; 4>9}x nT( aBBgGttE LA%1(YX+o7B~f ?>/V*uֽq)<ZSDk'󠦸;"zoAL89m!9aR?Rd]vJWɝžrxTkߗrJ[z`W"es<`p^\xe1g9ǜ0~㬨橥qt29ȌRP1]l죰ׯ{>!( fW4E:&# L̥y\x?(VPج^ފ tֿՊZ+~JkضEUΜDM9!|C˷}i[T\Iz˹7D=XT/! ĈvtnՆf_}c%Dp<,vҳ l[uе$S|7S5}H9fbs@8siݝc?vX)x{{԰L,іq9?嗟p+0 h%|cwU՟ʻW opz2uVeӸm  )G$OEC4j3L!δX&i;5jܝc5 O 0Y3 o8['uI9A50ǁgS3{du s<v夊vYnOqyT4'v[M,%RZ>v Gm!~qu^KU7E!!Er7(JI$fx n<]-Ԇxˡ v^eb+o=kWxOa ?d >&xxԉqVN;"̌C2Ә2dɔ2!bf]jgW8H$Vmt*yM>ތn|#Qf3nMEƌĘ;A)ec:P^iFiwVذC8ĕzY6z!V Z(gfIL>쁁y yЩ%{5;#Ks)餧`vvj$ae!c[FxH C_U#my]iTg-4c-muE[+^"vզ&6="a_Dۡoym'qhyi{ɝ$R[J;%-Ɗ8Sg:D1 auǯ_8?h;7f[7R+҅4JR88t }'n om jNUaB,|51H;Nw~5$O&Vy|ޢt%@w6cv|dSygdT/4aNzr'4[ÛrVwGJ>!&n^Stɍ 3ddviwrkasUJ|jBvq>tq?v{Ckfy:ZuM*~F`X! ] =<ߑ*̖5;B 8,b+@Hy6?(gzQq睖x:Z6le@taFLs~cI/niMk6>?^y~q;b>ٙL}DA36d\·5yqQref9BtT;?29-6~;fr&_:<,w^zG)'el1h﫧MakC@'yt]V?ROe >xyk#X{Lm:}z.KpƋ2ڭ/M!&jkY C{cwV oQ^BB 9e t|#yDE{ljʬEe4Df3d^]]p?oJ>n5Rpx?;\1#m"(K/H?}ڽ;k3˪|ٺ\OV}a}2b$}'ٳVKm+:)Ĥ#a3C!!vs.⋂o[|B#J=`aoB/P-Esz>Tt-*M;3F_F](yh64fYWVq>WԎLE,Yuj(wŦ"]CfALDȲ73#mK+q6PC*%N6q+NyP/%uR]Z!kFz9)Ԗ(nZI x OBƙVf}z3Ӑ{dױ"x<%ϣG\|)( spHn+^rLEF 8Q뉘#ۍ`i&s` *o;g318H)7,kpov{ .uBXFʬChSKgcprOiկZeݝ9-T/ݖ6'=6տLgfcZp>O2G wzy^_ 0ʟ/漢L@ag1t՟&noTQLPkQ1= ԤDѐ@Gl7fKeXas58se&d};G1F`,")|8&E6ߑ_ֺrɉ2{[R̾:>5+K:fT`Q;QDׁo<L06%\P$|Ssm d`_h##f\2,wnjPƟH/ͣ<GrL55~x'>]wrR_crܠIB44o9ok<;*߳yt@^2P~jrʹox8硦 {v_f.ڇ]&uttl1t icmOrHȕgcLQ㪿;/Ū8C؛yzsZZ uD¹<5b-bPJDNG3ȭ:ʯxq 6v_D6R/ JǶ2)9#8I۶9c)@{<rF~_i!ohK A=4#I7 O&tSLs=ʠNSPO!H?@vg7߬*r7mrC"(Ħs Mrj#@u6JpRnj\X|-4sE\U *oȔ|x˥(Z5ևlz `!J2 v{VHg'_qb@2'8/FYAMcl"M[LvA !; @9R<Lp!eX-} %vN< VV^PJcF>3)׍m γ9紺֊  pٻW=|[6x¬7rmMqRx?x 3I% xp>|O t&yqu(=x{v7伣V z3ĴՓĠ`y<)ACmjZCBT/|\&œrBBs?3j $x*67c/JX& #P؜Ya J`mcQZ}ٴ2įEI$cy*ZFu7[>yZ\yGM{WgJA܃y۩ mY]O Nz uN6f36{}նA`(۱v~ oǓuֆoicoosO1#~7*2ɸy˜Tۖ3߿$:8A|W֟Zp1]tWb]6407:SbsRSMlkB ͆#ԇN6%sN ѫA39<3jyDQk5 8SvEr::]leZCtiUN η\HxB4e6\V "+ph̾|qAL)~ذq"w}CG7rW" ?Vfpa/çX Cէ{ OơGK  / CIDATgno(WW7J{^M[I(§`p{]joȖ9fP4敢k? Ϗ;/ A'A] pد؄<3a"KgBwѓ,e X'k/R&)[f0^zS͘lE?Ƈ^1{l&UE`׼} ЙvsS~K]gkј3eR &r?aT×1ÇR xL}GȤP?'}!g:J?٧@-l6>읇cjy<%hj ]g(`.88ap< 5A+jp8>pt ƇMƉWΤWQL2}<z$jgY~'t2v׭I˜OI_+b xY؉\dRfB(JNSD>0nyR5륓+ʼ.R4FF90`x^|\EmXI9j0 R&_IrđE:ѽò5livߦͰҮ9.luA\I0%Y>|)<|ܩS`/M e.C C; gOew͜ +NC .)ǻKa#'gxfM{75,2#N?Uj</GS7?{h$D |pLHԀ5nܽ.}⫺p,qX&:N(%;j)8g5S;$V9H:S' 8A?]t;R {Ojեl]!駋\ϟGR6 N7rBNaZC2bkRqoo.8.ˤǔ`#)y.JVR=!˜{ǾCiMlN9tk\8hkp#iFp> &NJZ467EOvx"d:Ř/<5"t'7wY\9~~{l )svE\SحQ/IfcȗQIضM ǾEA6g T)7i;=wRjB#vnDcSX0}Au꘎6`1L ]M'$ qRa.\E މTr"_u̲p'HhޅbIk@^ 4>`1$9snʟQmeQ6#F)g竜WBf/T|S\Q439Suf@a8ް>}pu6Diל{tz)pSfIc>3uQNys> FPzrW*yK̦VtmPj}W ?^q=ihp$f7% Yad%3º*J-, @ωPgDPVؿtM!j%3b}^߲.ꟹḪ48YVJUV9 L'Wu]8յpww+'3u!~(YP91tsodO`luUF R,9OҌA JB7]d,ɥ)QkG;t{<=WNc l< dhk׃bCG8wwd=>bqyRgn+eRť뤔T+gǙ 2G)xe s_VQjfوG:Ӭ/GX(zp'C7g?`4Ndl$׎v[C~BzioȯIqC4CiFFkQpĐ^Q kuY--llȽ?Rq^9^mY/@ +g"ӼD.:nԑ&(yVGꈦ3 qPjA]ǂLJ\88Ƒ=0JX .~SU*ŒQj:Mi!]fR`@?M ;4v[aJg.RfQhtMAS2vDӯvچۛđ4ڔE}Z$u6a%|dIZ͙/t3FѢQLQJƙkon8&))[+Ǩ+M&&cq8.(r:p< 78ny"J(r{] lt\T<-8a۶ J4;5<`c(np_E=^ Hoxg#-HFϙ56#' Cy0bB$ RsI"BY;;=6@ȁ!wj5K"{ALBae}w{;(!2F4|o9nMitLYthR|7<`tPM!G>L cv#rM9?O&/h/.! N\97Dm 1,K HBڵ1 `#>* sq@OWnCa= r;\zq5B1,Y}PYkX׃wqh"ɜGHdXF|F˧CtӼwR}5X5c GA\T)uڮf9XF5DX*{*Wa MuǃiiI(ޤTQw9E Gdw te5D\`G;ʕ-v0);ݳER9o^qKf3$`Ǟ78NTC{lf<(gl95c6 SAR(4%s ,ƩJ'@Vn@ t4&DhG O@FWa;<?xk {G=XnqpsY#"Mi<~߿*#$ 2?~ݘ\z&"T!F_mbaԊzIl;u6 f 1:<>|;52htTrA\"8vfK~Ԋ'k bt#㜙 t׵FnoH84׫}&W8Ti^R;yeMJ!^>|E$UXK *"im\I Ƚ6DX>9UT[#(Dt$tt h_} 'ӇVտ3^olCGs?&TfijWa{q{Y):qQϙXQkndytMG 6ҁvu Z 0 !ng#").+g~Mc07F(NVٵ]sBrQ (3,)AtYԒN:h{GmŦf7,F̔1 [J)!|5eY {SCn ]x+BXP9q;L4j5쯱+ttӑSx>mF5 ||gxgp]盂;A$ج?*EUR*xU+ƺ΄rҬFu|Gm"IWZ Ue^I WTcBx:_ O|>_5 IwO[ "z6\9bڌ%\0GnhLu:Ҍ*̗=%~~R GE++ X2Ӯ*ªwcSQuAk#V .bΐ<P$}dP9| ` <VZ-‘E|k98g"3I`+wHp'JD3;%TVz<MQ # !8Ag:I>rzC uf@Qh.kS̓3i:|E\I9G^rrSCHeGK02g"nՇo3\d|18N r6#0%֔)w2BP]( r#+ z[WBKXfK MB|SEF']s)f#K|~fBDv~4%IENDB`lmms-1.1.3/plugins/watsyn/b1_active.png000066400000000000000000000013101247673406200200430ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME ˓tEXtCommentCreated with GIMPW0IDATH͖kTA{&&,`B" jgRATMMАM#EcsϽ̙g/_8S<4׬|hCSBʁNi2Z0^έbE,BF'>Û&:qXGN & x*!AU2%n7w<ǫ_X_^d|'[m쳗91%v`90p.ϮL* tS38f̡KD]{yn/DMy:4~z1%U!?o`E7:Xˀ[$e-E,'R8Eb~z}L|ӣЉN#{%*椏vgqV=d8"qtdi+\hѢ 3d*Y^\"[H;ʝQ 5ɔYB/:A*1 $ ;7Dfb>5*fKeME{Z;3&4I4qoo^˕EK;n/o;Sb'IENDB`lmms-1.1.3/plugins/watsyn/b1_inactive.png000066400000000000000000000006571247673406200204070ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIMEytEXtCommentCreated with GIMPWIDATH͖=0DR vQ;0k6V jI2$ CC`# h[((,PUpyCq̒$z.@u^{9q )ڹקK`6B@)E$c|PPBN;CY4`AqXDWdK$e~)i5]s]Wu] {CcR"iKU;B`&s۶=SYY XO ^IENDB`lmms-1.1.3/plugins/watsyn/b2_active.png000066400000000000000000000013741247673406200200560ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME.HtEXtCommentCreated with GIMPWdIDATH͖kQ羷3IMbaac$*"Jm7,MaAZDXXQĈ!"g1l ;܏yQ`@-ct lu^/#8Ϝ(_}^9s\~fHPxD޴KгGI`K`@lbqs UsVht4N XOV~0;5Ns ~EhMrs `2Ô$ZPJlvZI 213>f$+!7>"d\L/)7,?y %$o. @OlWucO!~?|dD&>nTM:6B$J_+S%%]85߶>qcr_*WYVڻUj ιF7((-AD:za\6vY xrzx_8)ⲳ9W5M Lnl$BBn?^fKj´XH#w֋)<|jU|P;^^?:0O4+uYh&)E}6-i_IENDB`lmms-1.1.3/plugins/watsyn/b2_inactive.png000066400000000000000000000007521247673406200204040ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME(rtEXtCommentCreated with GIMPWRIDATH͖j@MM)A $b dߡBEU0/O=`a31;LVF,g`::7vq;7LZ?OK ÐVe#,*HkhK翦CpZ 8[|A_oEik(IENDB`lmms-1.1.3/plugins/watsyn/bam_active.png000066400000000000000000000013101247673406200203000ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME;(dtEXtCommentCreated with GIMPW0IDATH͖KkSQsroMiDnז@D/ sF*~{qE} b|B"jM}Ž77"9qfVWs%VaZDXv 慣8F3BT* pZjET X*bV0~x6*2ar1ɉZѳ(\L;+֗¢UUv~t@ %;_h-"O;ze}#d\3 m8A2ʥgO> dùG5|Xy.gZ5P9d.^Ԇ H{|v @"kB6:5GGkH{f&Oef> ;f}6*f֋w)~8.z\[Kqfe?e 2a=颪O6xN;;w\.qLQ_.e, 4MRe>x4r=xGqiI|gY6pmp-b=WzNg>@IENDB`lmms-1.1.3/plugins/watsyn/bmix_active.png000066400000000000000000000016431247673406200205110ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME;ptEXtCommentCreated with GIMPW IDATH͖k\U?Hgڙ4Ѥ&Rw"-eFnn\)ΝBem@Aą "NB7;.ޛtv7q{~{ύ^r"8"Ȍe@_ާk38~z剙3~j:sp(5 **{v ̌܌p <zuNa73vsNn"\:u*1*<*w\TGU٘ck}WshvsIfsa**e~&Bc#Яk*88es>/":(_>f'r9Yip;5p:Vb[-]W}*dp`d9SSTpX:U8pc@?y$ɓI'XC HYsW^nE)0).k'"~nnadV(2l Ehьy?fGiDK5qq OdSmThF<vÙWOD*e3a'Mvq];tJӜoAԽ~<Hč$r#O_2Ď&BJř;X9.,#T!q:8!RAe`Ob2?+J5Ɖ cs6FfC2fcfC}aFnO,_[|-\=43A¾ֶoBZקfb WSIENDB`lmms-1.1.3/plugins/watsyn/bmix_inactive.png000066400000000000000000000011661247673406200210400ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME9*tEXtCommentCreated with GIMPWIDATH͖]@ ?=a?āN|$!(A,]ľt6d3s3Ӧˏo'XBӴ;!zeh6oWPJn* Dq8dY"vjEZ4MZLRDc:b&jph4z Bu)% !RbYߗJ~__g6y|B~d245 B _veY!uh4z3σM(p8|EudQJL&Ʈk\%HlX,raB;]4oUQǼ'yضaxڱX|aX(Wp\D8NilP`nr@U Ap vp85.NL&c4Mö׏ ݮl6}ӹs]f^*xk OIENDB`lmms-1.1.3/plugins/watsyn/bpm_active.png000066400000000000000000000013311247673406200203220ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIMEHtEXtCommentCreated with GIMPWAIDATH͖Okaf7ٴ%&QT\ĂG *xٳœ7?__ Q XKQM@}nMR!f`.<̼̬?wVs"a*ɉPt 9#, GVp@BU m*V,f"dDV=9-"X 1DĞ#F kF2 -=cxV^1Ͽ1O.q>AWY?q8:gkI gN0@n`X%k n<2(n0(fn#g`'ueE/r6l͙WOD 4 {Kn ^] +3v?cE/q5}l^Xwݹ t'Ms>C?=1n]Tg6~gVH:3Δ}(('oZ=h`:fҟHFsAKk@1sEx[[{ؗ*aQ@VYU7X s? sLi`IENDB`lmms-1.1.3/plugins/watsyn/bpm_inactive.png000066400000000000000000000006731247673406200206610ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME:|tEXtCommentCreated with GIMPW#IDATH͖j0O %*W/BAEh7섩.,ؕ8gܛiiq|($ITgڬa²ϾUUkA9<y|GQ~558Mq)U6`&7YAJ B[u]a9$kE!b՛sM6 4M . )b\>L.V{2wgJb_"*]\$!6D.[ dFH%۪Ԫ*77XTVUakZYV)O@CPGl-y2<;G2V<_U:X/ɸ|/m`qx'7?1hhї2En}]gdt6U?bjʞUrRzU"FZX]R%jU%YrVTZeG{%5In|Z [wg;A=A.[~gp)4s#[[r~%}l-D7+si2%۲T@+%4'?٭ᕉ5s>]!S'2h?FpU?lty;x 1A1#t:pM}˕Ā&"MR uP_LrHN M7dj=/ yU-[-E]AIENDB`lmms-1.1.3/plugins/watsyn/brm_inactive.png000066400000000000000000000010341247673406200206530ustar00rootroot00000000000000PNG  IHDR(d=bKGDR pHYs  tIME919NEtEXtCommentCreated with GIMPWIDATH͕͋0I n"PkF_xbe *((J MVvtFGfzVC(ˆ>-z^)<8,h8NkVz!T*  !凣6 ؇=BkRtS,V_ DkR*! C1t]7y$EaaO lZ!R^oj5헚eY4Mvu|7yurWş% Z r$I#z`փɄvmN1˲>Lt:M8qxZkx1Rb1\bbfb*{J)9 "!0ޏ=ogFAx{{#yOʑ|H(9ӚcdjQJ9 LΙafIڸ&1F...XV||}}My\\.8!A0a8qZJyH)ZI9c}9J vϔ/kwƹH/ L;hF IENDB`lmms-1.1.3/plugins/watsyn/load_active.png000066400000000000000000000012441247673406200204660ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME1RtEXtCommentCreated with GIMPW IDAT8e=NAivE N DH*9ľcHH^fk̎)֫JNb߀D8cfDzbfGӢ e"WAYDe !4.Msꛤ7l6{( UqpPymۯ1F* %)uJGsgU&/_/?٨=xO'IENDB`lmms-1.1.3/plugins/watsyn/load_inactive.png000066400000000000000000000011671247673406200210210ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME8 stEXtCommentCreated with GIMPWIDAT8ˍMNc1DÖ8@8pfX  di!A#`[U;8fޱD/Z12iKKK4M%sJgPUڶ=𥔁~n}nnn8;;#@=f6ADh~t:e2puuEaww^G39s3D3c82Ps"?c\05MO~-fs&R03?4֛)%D!.mK)=@F%@)x xD$䔨Ո1.~_^h8"i6DJmQǓ666]H Ƹ>/loosyz2&7IENDB`lmms-1.1.3/plugins/watsyn/logo.png000066400000000000000000000112441247673406200171550ustar00rootroot00000000000000PNG  IHDR00WbKGDC pHYs  tIME b8StEXtCommentCreated with GIMPW IDATh͚ieeyrιko=3싂,J%JMԤbfbƔ_Re/ٵUVbJc,\Q@D\``da֞^rwˇtO7=3sy+|/#hr;r]W) 9s'SU︚dT!NoܛsNuфpu[|lzu_~bӡH 5gP aUl%!t6^6ӟɁwꆁ[~+To&%.ӝ yexO\fU`XgN>:}swL02`e)44}\u[:^:ᛈoȒ&i@]TRd:T@ 4M0UMNb* >];w_$X*F"!!46$ tX>)RJfM22 Ǐ :t-R() >2d"iZP)$CH"xPJv2ۛd݋t9봭- !חvNa^=BiMעdt{m$$:iP$vD;*Xj۪5qx)';tzPr D0ZRD)VVE5Nh3tR!%HZ#)3ٽoTk۝uiˍKDZ;N: ҌNrĀ;=DG+I %BRleJ5ӳSMdc-'V+Rp`qk-B Z!#!K$MSާod%755MHA?kpBaG4JD)kpq1ա%[rxaď'\R)tmpǮ|33?\I LjR ZiZi#Ue*:,AI?|WsXr1vNw8cBy|Χ9R DiE(QZGi{ϙ;'huX-r<Dh? [@-JJ,Z~+eys&Mu} 9URE]9ZӦR{>g~b~ݷLD'ኒ8D~7Z]SrD:4 8<úUgN?=o}  i0 9T={jq~9PU5"'BZ8E !fX, kʲƅ@h4H^G>$:M#JK g\TTyM-{ȫ+/W^5kGԕA;w2NjsRO&,x+uyI]q:ӽYO'@]E@'O4$DkE<uIj$& Y`c2UYXO"le Q 傲b =ihx͙Ӕ{Bi 8p'kPU!: d:(J$0s)ynuqif-NVG{y~+J҈Qm)+CY%QE]9{$ A$|gj5;mYð#I!YW<0B&ZxS2Γ(!@)9s 1UYGP@+`+8fHJ%sףHOV ;TsǣGȋ^B6|SAZp>JIPW5"'| :x:I"R oUQS/90ȳ8mMgnb}QXYZs׮`DIc r(ejs,12! H% :lmX1ťe?ʪ+ , zYN2`ecޡӄ@ 8gE٧+uEMlԂŅeqNb\2Xk!B I gnē+ʢiQ%v֝@,l9O!cc\p$YA9Le6;J6&jvTr|@8{$Z+,b"SCm<3Ϗ? r҄65sSx%ZҊ/f|MbJCY&Z s!D+1Kc~7*J,eQuS:GU8g<(N>P.:kb:V\"@Y|ݬ*lLk/ah8f4a,+ʺ7!RVL3‘%u&c) b.fiy[ eƯ^v6!xD(8g,G/0k_'?x9guePWUtTc ,R`yD!Ch"[Q䣜:sD'@&8kG#s$iZkh%[.yV(B`c>c}q\zO]ayaT?=ZβcZi-^8JmkLc48Y]^abj1ߴr$@"'I׼,wAysQO<{?;p<CG UQ3m)z(iu]S%׼<!q"fc<$Z13;Mh Id0ޤ=htz%7ua4ZY@ >F.8ox(ё|x4E*EUV"|pk E>:KUVt-@yio:MANPJP <%HI)cǝʄ|dLvS> 1(M5u1%!P9UUQ0$J R-ӷ|{ Fqq-G% %$33H)FpD>2x X·su9EI VaU^"[Op_[w$IB$x4._pY3taAiIzboTcEE.QuSZ""~~gLZvNN5vnnI#[XɹGR." kC!{Dr# |.KY )3b')a}| ;Ea;ˡW9kf+nӷq3, ;CO <D݌Y@&14:4DK ʁq!MEͬ͠7Vk!hy,ú@p6`Pxq::;7C5>\! IRtQ`1,=Z?~Kx[O;I<Ѧ!pu;Yw8yljyW֘\M%(Uc9cM8=Պ!vgS[nRicwq4Ő:M=G5琢8WU>}?c@*y~wcgj7MI+gw?ʰ_uST(`ףSVM֑QZmZkRixe ?GK|4 __xp%p m`8 jz9~V C IENDB`lmms-1.1.3/plugins/watsyn/norm_active.png000066400000000000000000000012761247673406200205270ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME6rtEXtCommentCreated with GIMPW&IDAT8eNTA#q`07!gqd[c D s.ULFOK>{`oߨꤔ?1aJ}ʷIENDB`lmms-1.1.3/plugins/watsyn/norm_inactive.png000066400000000000000000000012011247673406200210420ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIMEtEXtCommentCreated with GIMPWIDAT8ˍ1N$1E_& "qI w $ڌHv@bvm0t VHPԫ_U.8:::3Ȕoc<:3kF"BuUED9Ӷ-P|?VUI) "8X.8x||dbAJi0B躎<]a*CE~K΃r^rJt]+50FG!LΙ4͉qAs1vooo? CX0yyya2|:f1{ (룐#{*Cqas1Ɠ)|yZbi~i)?se]4{n IENDB`lmms-1.1.3/plugins/watsyn/phl_active.png000066400000000000000000000013361247673406200203340ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME ghtEXtCommentCreated with GIMPWFIDAT8mN[Aٻ؀}Q,H4iB-H;C@(<S҅`H{l cFծ4g9#$ "BJ`Z^__K?QFvET%2D| _{;?yw 0" Ĉ*,Kv&g@{bXkI)ul6zd0RJU1,˰}B8WF#F++Xk)%,~xxH=8::BD8;;CD^<1yscm^x=WUQU>8WqyyIY*.!!2u:v Ue:9neהlllp7QUIE!⽧( )`j" jq^`qQ%u]3Lpα1F...]M'ʹF]81V,oqlJ.uGU#H@ۈAD^!01R{ORE5)I穉N=-fλκcJi-*a%P"yIENDB`lmms-1.1.3/plugins/watsyn/phl_inactive.png000066400000000000000000000012651247673406200206640ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME 1ճtEXtCommentCreated with GIMPWIDAT8ˍNA[Ŋ)l%$A )  "-t!a* hݞgowR8 PYhhv v$}cLHU-vF8h4,w,ϲ4Mu㜣( D,6бR%ySUu]cEU;6@cɲ pHQE1Ib$Iu1c JXkz""8!Nףl211$yp89?3*vnKY""Z-VVVeU=KKKyyB`mm !ҙ/٫LMM1v C}Ƈw8;kʢ HT%s{Fwww9iZԾfpr*xj@d@|||s9x 6 /918B0OWEILpc>=Z AzuunOc%DZ/uJ-ìIENDB`lmms-1.1.3/plugins/watsyn/phr_active.png000066400000000000000000000013041247673406200203350ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME*tEXtCommentCreated with GIMPW,IDAT8mJQsj*n*0ѕ*qtݗFj1},H{gc끁9g^wsAD09U;n{:WWɪEWs*…t:Ҡ NR΄,K& cF~sR3{̬UZl6b !_xB63 Tz>'''xp#t-Q77?NOOd%Bd!cWWW4 Tp Z˰AV%DJ,,K1R 9gI)sFc0M{OgZ[gc<3@f=@N3lͤ0hZQA<_9cR CUo*ekkשy/^˛8!cDU 0h!!"bssSJKΙ*FLUCPiaN9GQ<>>7>l|1~6woY_r0s)gG,|?IENDB`lmms-1.1.3/plugins/watsyn/phr_inactive.png000066400000000000000000000012371247673406200206710ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME ;tEXtCommentCreated with GIMPWIDAT8ˍJc1M/nyy).J\E qt/.wqeq&ޜYԖa B;#1Z;6Ƭ *"rxjvwwϜs'eYbA?0眩뚷7:wRŇ!f"BUUc׶sTciskۖ(0ư@qi.lQUXki0P%[F9t:t:R {...PU .fTyyIUUvi+T#XU%D]u[loo#"www!DJ s&83?&00gsc~><>@9+^py& ~MB<,̿[Z__{25B4--˒#1lQs~"B3e)_bxuM\I۶HJhsHb:NW9>zCΟNr,ZGIENDB`lmms-1.1.3/plugins/watsyn/saw_active.png000066400000000000000000000013021247673406200203340ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME# QtEXtCommentCreated with GIMPW*IDAT8mNA 3QP r@A B=S }8pSrjzDg<=KdYg i+У2c 1H pv}}}bvvvNU"vcM a<KKKV5h0c`@edYl6c:>%K98gK.Vӗ8>>9GT1oFw!U]̍1T$I"k-Iy}.Z8p1ƦxDu<<h4: 7 XIENDB`lmms-1.1.3/plugins/watsyn/saw_inactive.png000066400000000000000000000012061247673406200206660ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME wtEXtCommentCreated with GIMPWIDAT8ˍJdAnY0aW'XC1L&qq̅I'0tdvAU NEW9uJNR" QJ!pzyyy,'ƘE9gL&s8֢stJUUpi:>=OOOspp1RJ4M1F*znRʼ& " 9sth뚅L)5JwBy !Zsww51ZJiO)ᜣ* \\\pss)c@D뚺zlll09??&Lk3?7n9 blR[c=Xk}b>@H~шd_3gn\ZZn[[[cTgn&g2עDBcRJg!i1Rr&1hee{[rsmӇ+k dIENDB`lmms-1.1.3/plugins/watsyn/sin_active.png000066400000000000000000000013361247673406200203420ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME*tEXtCommentCreated with GIMPWFIDAT8eANAE_ m){#+;un  , ae,eƁZ_H)}:KD09U>^l4HdYo3eY^`0j: "D݀rrdX0 -e<<<lD!RJx1SUj"Bߧc9mFlf,ps^e4quuEJfIYV蚍Y^Ǩ*1Fy.?9@xL&eIl}X{1"+IpPUUUB*bZ3TK!Tɯ+Xk6#|NQVRL!%r{{1%DD/=)%Bo뜞2<==Q1ƿTu,ˍ5dBd0jHzF*"k.+Fo:'B|1~M)QjZ 3ݰqB@D~fWsB'?ޭ\h4:YbA|?{IENDB`lmms-1.1.3/plugins/watsyn/sin_inactive.png000066400000000000000000000012731247673406200206710ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME-}/]tEXtCommentCreated with GIMPW#IDAT8ˍJcA3wn x-D 6ZZWqlmXX A0"&{翅Ivetao;R !Z|㤔n{:h4H!H_41X dY%sL&XkZBK)5`mm !~`@J 5񘺮ޣ"Ԓ!,CEQp}}+m& c )%3!B677Y^^f0pqqsEbF"s<@ȲNp8fnTeE&-VEAߣk^^^!Ro|!뚺1PUl4 .{z@k,!L+++( 9bLcZB Hguu7-wvk9Xk]ʲၲ,qӉƘi6t:&WWW\^^~2Q 1"H|B||zM$Xk+ u㗙PJa8ɞ~---?S?Ar|{{{c܂HڶEUQU 1/_TU.ט.#1(f"3߾=Rsuu٬` T[PU scwo+1a@@wGU[35RyJ)QJAUiḩO\.yxx L "mҶ-MP+L&`frd> U] nA=(n314smMUED///LƓT):>-y||?{G;1IENDB`lmms-1.1.3/plugins/watsyn/smooth_inactive.png000066400000000000000000000012111247673406200214010ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME&|ǔtEXtCommentCreated with GIMPWIDAT8ˍNc1-Š+5E$*jjDAJZށz%$h)hHPPN=lˊja*Ko`083Uk%x~sss*gι5R !^__iǝNk̪t:e2cicsι%@c%mےRZ9cEDg}}1ưdbCRBDjXkq[ U|CƘOAMSBKVk'KKųZFt]H)s񑻻UZ+ 0yxxXt888`{{BZbȥc4'PUX̳pIR*!!L)Y/))*QQU{oooߣKomҶ-ɄM}fxLq%DcR*nϗCK)]OrDU9GpanmmbZJ;<|8BCSIENDB`lmms-1.1.3/plugins/watsyn/sqr_active.png000066400000000000000000000012571247673406200203600ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME-V|tEXtCommentCreated with GIMPWIDAT8eJAݕ Ivs A= y7;$y K/ ʡg _ UCDp @3,'''_|>gٶM "/.7)K9::{ A({-OOO<>>""%wwOI9gT#fl6#@u|vX]s톾9Hw'!!mBZsv4`##;M0͈33J)l6J)_n U%LyL;'#BpwԌ+noo'X햔R J)...PUUP+w]Wa2;k)*Z%C9=fjEu]}ι1NSJUivb[Lrj0 @Ji `ڶDX/lv{efV:0rAv 5})僪2s2&6!rΈf\y]_Ҫ)_Hu;xaIENDB`lmms-1.1.3/plugins/watsyn/sqr_inactive.png000066400000000000000000000012001247673406200206730ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIMEKbtEXtCommentCreated with GIMPWIDAT8ˍ;NdA EO}Z'5b"R2 +@LXdl3NfZU>{C,U`ھek1f7LUksvvv㽿~nRbXBd29e3]ױZB:syyb2͘fx'H)=:Vscx}}y$8=='V)%Tk-ZT_J1ooocH)\.麎vK8ޏ: BsD!G~!XJ!Dq"PUra!H]ױC Zk1s/K$ HJ%3))%BZiQJB^'yMD29gBs;h3L&rΛh11cd{{H`NNNXkz0h?Z֮Xc "WV$g/o{dxpO9?{dBU-IENDB`lmms-1.1.3/plugins/watsyn/tri_active.png000066400000000000000000000013421247673406200203440ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIMEQtEXtCommentCreated with GIMPWJIDAT8eMNAiȎM Yv$PXeArpX9A8"` $$ ̟g:G8)ZݭW_U ~db"Bc֢GGG{PTIϧr,fxGC ǼrgU9??2 Ep rBZKiTJ$ Zt:4b+,//1F#FU1`(I>z\\\pvv:ZKVg2,v1`'1jpvL7)*xhQ99Z&98W4j8'xϠguu S9:}r>|@0 2C0ZBpu,{p8n PU{WJ ! "gggjggs022VIqQXkzizlQ(T9Ge""io<cI)i$ ~=B59Q3&J8YZZ"IZh=J)Rc [[[\]]nY^^21q,*X]]qww=i1W@ j>N/Afrrz>$PFֺV~ϼ(PC>F ҈HxOD s9BQ|: Icff曈|EQ8㇇`z[zw+IENDB`lmms-1.1.3/plugins/watsyn/wavegraph.png000066400000000000000000000011441247673406200201770ustar00rootroot00000000000000PNG  IHDRi#/bKGD pHYs  tIMERtEXtCommentCreated with GIMPWIDATxMJ@Kj)龷%AJ\@Z%MPϢC&l^f&l6QDݽՀ{y{]1L|>xjcfZ18aSb1NW"x<^]d+Fj M(@8Bxp>}%`su,˭QEdfdfDD4۶C>atGP @ @ @ @ @ @         ذ .җZ`5&u]GY[(̈ imۇ}x7u#*JIENDB`lmms-1.1.3/plugins/waveshaper/000077500000000000000000000000001247673406200163255ustar00rootroot00000000000000lmms-1.1.3/plugins/waveshaper/CMakeLists.txt000066400000000000000000000003461247673406200210700ustar00rootroot00000000000000INCLUDE(BuildPlugin) BUILD_PLUGIN(waveshaper waveshaper.cpp waveshaper_controls.cpp waveshaper_control_dialog.cpp MOCFILES waveshaper_controls.h waveshaper_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") lmms-1.1.3/plugins/waveshaper/add1_active.png000066400000000000000000000016771247673406200212120ustar00rootroot00000000000000PNG  IHDR 1bKGD pHYs  tIME ,#tEXtCommentCreated with GIMPW'IDAT8˵OG?3;ޭT.=ȡ97[IEVӨQTjđ#H.8 rHQmcca^:̛;6!8T*75^y)%@ر'QXXn`L §8/nY')}a~~Yc+,I<{#6^y3eqc_~’!j>aJ7X(›(buR Xa|@JIX B4x;V~eK\qў}޾=ie<_yR 5rQZkxLC:4M C޼$Ih7S)#mjz4M 21t]XkiZlmm1SSS\]]9F)%眜PBQF G#1<|;;;w{s;Rqnh=y{Fu:"‡J)B3O%ՍeYo<|z~{{ ʲZ˗;hx;:V)E2JP@5MQ7B{EQP0HS~}PUBZDQDE\(vm9s.Ŏ$IxgbEb꣏Gv1\3115qMAw 4M1 Ed- /ȇ9笭OcZsZ-zOciiJ!EQPUuݏYYYAíOoQ%J)n˗h4ZqcEEduu4{~<5ye{iҚNNNE5eYn}FQi;H P#,Vn`@Qto`(2c<$\_Pu66 #` ! P arr,ɲ,xӏ@E,//tAvz#ykn1fJCU-V*T*U;tfD]YgE WWrrrmۼhc TM^8bƽ \% gΰC)A!s>w_* IENDB`lmms-1.1.3/plugins/waveshaper/artwork.png000066400000000000000000002022041247673406200205240ustar00rootroot00000000000000PNG  IHDR,U( pHYs  tIME) 3tEXtCommentCreated with GIMPW IDATx[&u&;kQ@qJT @$! 2He!i,YX=#桭q{^>vXqሱpw1cOjaIuA!(( r\kkZ{gюyss|^~"" ""  4@@R觳HB_H+_4߀[i 3ϕ/ 78x{7CDH`︪9912  x2Q<":sZqjtsH䐜~7K.8[ C?~mKåۿ=N>|_}??ӟj`׬w|7`0L3DY^^%{{o{$goo:T"$GG;SOD$VWGUW^9|>_ZZ>w~ nG+啕Y[]-;8~Kp6tn~FGu]xKu][^s[_Woo\r _BAк •W^wkloEKD^>_?/\}U_&d<'өk?}晧~[0:Gu]]zeG9|ڃ^m8!E) ~_ӧʻᄏ#" W\yLӲ,SO??`$ 1""80i%89'"ZL\0!z禓IaggБC Gyc$"0\UbQZpUn~pi8FNtϜ949n[UU,{K'_|o:qD)ݧO#G}_Z+?pk}B};oz{߳2L+ʫ&Ӊommj8;GD"pW,8p~믿6,1dW#;º.;t칳N; YRqt{r+/ D(~>ۻ.l^vwvt:tV1`0(_]Y^__]^Z lmu^s5GXٙw}7V󊅗F_閳I}m{ ʲzכL&x2L&KaU՝Ntx?l>0 0bDA!" i,r<0K ¥} w-9DZ"sHbYK v`duQ 2|]}UK~3ƣC);<{sp"'N;wvϵ=Tnݽ=P*R?O{1Dw{@,|>λ[@㟼(JGޞw~eee{k˯!@]W!/;4Nݸp" 8`  ! ',\queeww{yi97ڻt…,p__[7B^y?N&x7L~IH䂈kga (>rTx<ʢp!wQ0h'*"Ç=ܳg?#QD @葐OO7T!ݽu&x4f{ FXfȑA$awlSO?ϟ#!i8D`69@}_㩧ȋ ux+Jwٓ'_.Bo?9r, ǟ{'ظpA;-Haw;==^8w!iE1F$rPi"Ng6vD}Ѿכ Ο?:D$*W>N#"66o~h%do/xM&`?DNb߿_ ރ~W^ڐ f=Ǩ7H;r3^:yԫ7x^ !hČLvmS; Kd}/9O\v:51FD:x ]z١n#FWuY"*BH u(|1?߿;|≢(nv o}׭KA5t:<"W_}U;{Wx PXkB+s.l|ߪsx^AX+bBEvCn,XCc)j^ʲd<׿UKt*0ArD^/IMϨ@Ÿ<?xڿK~˯8s0Ϫ:ɓ'o( ^A4T Y?`@A"ϟ/|Wsrs5>qQ xhP" FOK栉.6DD9Gι{H Q`gg7奭`6^|sٳg%r]u !Dā 7t[oH1v˭ҫzxfwwvommm#R^eD bEx:8r`$$$(]PWV _8/λy}A;_8_0 H]~uCxWկ"RcC1p1H !֣8!ԡCUձPWuUա몎wt2ٺ۸ѵ\s¹ͯ}k9fN`&lՐzBۢT$-1rpac<OnA<#"r9 t(CvS9#rd/ݽ="(XuC( #UBv9dt3! :!:ua˂+1Ǐk@Uop8N{,^A奥n[։'8u K @@iU?|3ӱ #D@eY=쳞[͓ɬ+V$dλ"^tсh_xy_x(Z5Fe{k[x}tmuueyoӊ[[Yyœ//K]aBݲ[2sqwQqooQoPmWw~勂⊪Oٳyя|þ(ށu]cDfT[WVկ#^/t5WGK/t6x<,*fW!͇סxT1_ÙXC<"v偀6=ՠ9$e <aY;1̫yͭg丼| [cVWSL9v:m"*r6|~u;zLAG(̈ ꮆADvN,reeyk|;-`0(b̂1D,#".˃P-p;?xt:[~Obs/bYvR6 l6K3n^EC0reQוfxb``eKމPUȥ0h#PCbGQUUPxhIy& x;޹rԩ^zl>lllBc!zlme8ZYYO&{KKKD7((}]EY^ظ;yT",fZ`}ZMPPDo,L% ŀh4 h[(܍Cˆ^ظ{`;>p`-F&GBb&}}ۓf, O=-ܲ|ѧz7t;Ne`Q3{ 7/N/EgyG{oQ;q?Xއˢ{o{ۮ!JuWx Ơ;ECk]Wl asʫ:'HX!XDpzn(KFdLN":v]zǟC¢˷~۱ټ:Ҥ"NƓceY/,ommPw… ng0u5_E%2X ,QD4(m@cfV`)Q9HP /p^{ȑ#?|_"z,^+ho{{(NwƷv?x""!d"diJn}tȑ{?/\qquFQ Np>>2LgNp뭷~~~1Z/`RfcA('NPK./ǟ_^^z2Ƙ+uEQ>^9?f-ъ7,14 w---n׫t(A2K Cյ5^ay>{wwvgͭ-emJ,Bt䊲<~y_޹^O|b^㥥%_3t2O&+++ȓ? E|[ou:^{?zr:QltQY{R+sN|i2_yUύ{O9b<@FX@$(Ec)mY8* o룽x4}mM^jG?~=~72 W3g, >s?s|]BEӎ;WtR7^?OzU'=B ƙafѓ?:eyM7u]&Y,Dcc!9D,q2+ 6_y`gwC>+;vh]׎,(ʢ  1,ml8pC66y)hNUW/>.8S?NO~r}}j@gsZoAH` !Vu5l>糪|V͜gΞ_7a#ěn)TuЕ)˒F!QR*0?%a#<~aGvnEo|ǍʈRJyї|3~7cN3@X]Yyᇵch}a\BDf@N|=z裏R+9Dõ~>OOg+>k|>W^q:Tu\Q?s=JsMg~̽^ܹskkk{{{NwiynfgΜ)2GlM蠄NQ^`]W{Q0#>rat:wy+2MgnsH“CK>3h2{|^~:Ftke1D;ߺCnSv>/¼ xncu{ǟ?cdaP !-FQuC ,QGI|YQ-"()H֚#30(Eo{]^Yマ˥vss{^U_ή1!S菿_-G{{λ`8za9DgbjԛJI |衇x2/=p೸9Q^}볟׊9_s5UUt-//f3+ɓjn$ IDAT=\~嫫;SvÇfnWrΝ;GDot;]Bt*M1NzB{Sv|n瞟v`}s?rœe"s.y̳=T_,"ټa+cwm3a9vbnw[eU~uԩj#c"9J&eyo;z]~ř3g2t|e|eڸV@ȉ.@1PX',D,o?OرWuu𢃽~Ku}}!"^Mr&"M7tFNkk#sxyu(P#< 66 "c;Ї݈²vcѨ#bYD,+]tWDn<#d2n7uYu]/}ikkK!G`8W "(hmEjE@0pd E?>y>~d2 1̫yy1rBݝBIz~^3U+!sDyر}C.?C/j?tDj^:ԁs`kCb"GNϧn7 ԸcVJG̘9eHMb/m hOUbdHb \Y[:(`xe GH䜑 M#8ޠCM@L4SXlPyEmJI*?LTemx;#;(疬<7wPR)QM $D 6RL  vO3G}!᤾IZ/lbs$$ ̕:] rBB@7MUՀaj oq25+IXd蠂H0VY3-9,L7kۣ-3!yb5qnݤ;y.XnZS \4XتĜ "-NɿemؾlGֵJl!u@hOEt6?}mG5V/hopA'/ـZַ0'.uJӁ7̝$+1}2k8i5W웗+g0g°]L h;p h4&&JfPܗW&!m0\JqX}1# 6n?/Фbof1ʊsY Xy >F,u fӉn%ܘ.q B" fi1e'"2kֻB fQ7ԑd Ю٥%shQ->\#eK$Ȉ-t/&+d<0M<0SdAA"[bi NZ.=F\XtUCLhl&l7\BdXW+s? /|>E@ټ)m[%v%^Z==#5dh(m[)"j$eE<ƉHsk R <8같5r}ߣ_jnXMIKPB al$ƢPUȩbE?@k@ ؘ /P+2'Z j`/"W\ /J)*?z?E3HB#Y8)"F̈u#,Zq&6γ W߼CmJNSRIze7Di }7e >`4pC!ql\luEC&"]ixr d Hn"(bЩ4LX#Jl55$00;}[J5D1ӐJl">$ yڿ0yfԧ7̙O~Du%cd$BL(6ŰNHB[ɧꠋ @`4A#t醒.B'jjSzQ L.LD"8+6m&Ôm) ϝd&4pbᶅgެTum>TLH` lsj%(}mbi@-Q:h[")8RR.m(YtAR1J5g҉iL1*=%a&B )GZ&SnI"fHMY&d}Gjgkׅʍp1kj*+VFJ Ai4NYH(Ϲ1Ke6FV ب4/`j[4;iAx%/iSA>ld̪܁!+B̃W#_^~Jl#-um ӊH(般̮T`qg|i7Wb6!t.u;"8iF٘ O$Q [6HI3mt qLRdbe- ;$2J45 ds7DT1A$,$2rF!yGJ]YMˇRIi}W(MM]*O Qpi@ 4NshN@S"G !<&CfA ear|S>È9hm5j#:y57'[zy%K[N5Mv=i}ܑͬ̓HRRJTRK*Ѧ..N|jpQZf@К dIY6qM1W0`A`nUP(Q!r!jcƥgB1k@9"#(Q#ϘITaDj"'"58cJCڍϝu Q DQT'/ "f<Qy[XCt^H* I~)Z]U"Mhˈ 'G:hIǹmohL) Bhk)f@"]&g*d?̌>\^NjiJD}\#=xBI,Hv"A$~#RAM1@ʚk5IfCSyNnF rUu&ds% (V 1(,BM$j#"X.hOP(B:l)R 75ߡLtiBPdaҸBoL>Hp)Y)m.AV~0c ""L5H1*yqkEǢ/iClJ,-:5uoމ7zrPȟT"DFG,99r䫏#G[m^<6GEOlcVR5RYsYNS}Ù&cմ CtmgPbc?fҼF7f@ J #H&e)w,e~+,Ad4V;!pVxR[9HNlX<".q)OgzlR;pҜGDB&$nXdut@$cta1-: Sk.u]qBd.yͲPP65܀1=( հ'$fbzܦ` ZHQeDH)D({WdPR'6S*K".fr$-}F_:T+A>% >L h(96uhV\7S _rgE]}GͻKL94`d8yT%PJp2(#^@/!ƺ,5cdFw:"O:k%86_1N!qI;'@6 Kn H"Df]OG頫F%%Im'$Qo#  oκڡfC?jl,C7kkmw2P%ic&t?Y vd ˨bsN &v=Ќh}pf?NM0 $8B\:=j(=F@ 1AbNZ 椃- qN؃f.O`+-_j& +(Ɔ>ys 䢞{: G - I*rQH3~GJEN5Q3䴡 z )1$=[`v 5 `N A<:"ɑkI!3_X}w\j8& Y4c22 )OZQݩ8 Y'9Xm'Ur[ggRVۥ V`p4}3ATGm}6cbמ5C5ar"8!݆1y$X5d=6 *yڮvM%)Ymϧ@+,i"!pHe\SbQF &x% |QHU AKdXN$ԬڍioBK@4B`YMJC2jpx(1pѥ= Pˉ՗0$p!"9ʮ5'dB^ske(NLA#Lș ]+rCiv ۃedCӨ"rߡS`r5-vXbp0[,t l#0@H,0.@d~Lbǭ&;l,cQ"0~ըJ"ϲv449[=@E6T!l&A5bbQiQJ` qJC5BȄ-%[!ni 4"DgiJ1j Z6O<CqI$MtB Օ@^l`G̹ Y-BH"$-`@" yT"Y/gg!9k&sMB(Q4;N"$5'(C}Mzn,,`K̸*x9fysbj:.9DdqJZ!pSx2;AqΕ^k5k閵HҚfE(#77Lza`WNkώt`k t9i‚yX$"nSrA(ICgQ4iA@`@@l^:с3E`Q3ŔT6Lx뗚@C"AT& _ -(Ȝ[PrZ]}z$!4Qݠ\(O3giBC hfGx$IC5ub3fdӉ3阓| ẘF>"0joφId6"J c;l'!pFk]YF#B0.5Q ^hhV$ 2js$G^!1^bѪfR;Lyi&+Vdqzh',DgsIx}lK@J PQ%&tPN @NZ™ :1 es`cC2I4k]%DC'ގ @ȱS>eK:Os<3j OfT TJD`sΜ:(ͤaK(4"nd2;jˊ770MRS@Y4 vԒKC":H"ض#l=(D+ kVB"Ldi4g ‘fަ`VXjLi"97g*iL=*J#yb\ڀ S X5<{L$r48`TFfxؘNAI(au)Jy9IZM-ia,$U 5kj3Oĩb" BٵFgXDwjNhbixxjǰ)r! 8tʃ\U6K,Z)fi2R#][7*ݔ4\x (Z%˕&':oH.L>~U.J,DD;n5d)AKʒa.Hɡ Hb8k:ICY!}CLMS@  $n'Rxo>#1obȪlԼFl1WsZ0t&rC0ЛZip#~ T8_7-tlAY{Oyt ܑq\z_asHr.ƶ-T+Sm3dfHPREIKJ㒪Ƅl7so!i:@ifHuO=#a[LsunBcԉ̀L8 rlY[uN նٳ_qƖ> 8Fc2//7I2SM`:htQ\AՓCt@5*BY~KKsStD K\ћn.=2 Z1>XIIU,]%(%k†*h7SLpt9I,5OKz3H$嵜P/2S-};:р+@6Zȭ!O4?N}ru[(ג'4+C!A Y:9`HO@QQYyB/otՉ֝WrZ`ւYZpP^iGja IDATd (HJ(B `c&Q*F {R0AGeI뜢`4)-/DF`LRHdӆ`6G<dM}l3Lb:2MBF]P28@A^HZ'5>41Y~E36,Ooj-mV}#A4#p1Q#H /w0dBiI*Ԫ&B`v:@jr+I#CDQWߨO"lC8k58cA@qi#\:@jWi;, V@l("7A.& B# 7y<1i4O&SRR4,i(*u }gPkKM[wԲ*KC5$7ޙ[jCtޤ0&Č-ujnU# F#F+4eD0`F ]:LUeM@ccN!ṙsвY(1fh0Q8KBP\ibSV.v*i-6k 5rG-~[Ze$T-q3UE\jEPԘ~ ףoeK{D&<D9@Z6Ub$DɋM֭ӇSl1S*R-r/Kzl,\2Ms@C$+%=,G9bKkIڵQeC\[*I[װ&6IL+H|ufZ1N1bȝ6fᣆӄf&zL:7a34#l$ӫHH ȂG`Z͇SPDZLU5ziu{I*] odHe_ %Hn7}$l`% wj)dx*SPL/{ *}UR5RaKaFu[i絚FsK̎jEIv$SQ bNL'jf s?7YCLI*5NOςFLhWCqAwzH|.зNH/=s 4m7AhmZhU9_3AI/,[6O"{eǪ*'F>WۺFS?V0N%4Sf@т)$8Rp^3uk Wt(XQ2l-iQpJRPta1)]roAlҪ13*Axq~{X-ڳ2t"fa{ av t.@ڙC+eMPf:J!gܚ[Y;湌Om@`Ì2{{Xj3TXjQt;%l! Ů$WLb@b0%QXm6d8LDҥX[W[nJRݯ 6l1{Sb->R4 AvOV}¹ vdkX؂f [m@i~IlC}I[&"D,ƤFDq6INiH# [kmUWՙhǏ$&[}$֡m3KY}BF#[:Giڿ: UxoSnOma("jz,^WSD/J$TTS6a4-2{JphrY&`IKi:/;IƓ+&IL/*5QZV}En[s%Ai{t $nvf9b-`ݵO?h^JF{!=>M~)03f9E-c/`9lSzZlORYuz4U|0~,K ^f\ط^eXu~/Vr#ȿ{Ne (or*FzۻLеy/n}EBklA_n?h2d? 'mwS.J:+6{BJio}?sE x>Wxg{EH}A 2Ua|j)ZP%Y|`7 8O؂!A^M2g+h| XEC쪮0^ܛ$_?KcLE3mNY^ĩ^@1d{F,[+[Ut:B[c8uٚ{Dz|AW@@+2*qaG?bUI+_࢓@(EO w F$ȹa71fs0Ҡ x4P1MW2d*ؓE_9MDJ 9[2oCP ͡gx3a926.%5 a+Ԟ]ڼƿb`PmDu*2IUܙ-H,*;\0L;Tphz}Q!]C+9ǩ npt7SIT.CfifrP~/`@CL6Mm!EdƖ6*+bW#'xM5x(іV]WØBc&0~嬹 oRCIA[aώ7U&%Z'ٍXϨo2zh~3Ν˧3ӂ{~꒸:c4\sn˅V/dAPiFr\M/\}dT!mlu[EXWm_4ܐ #]Pd|ؿӪ Y*33ܿ(]zGkfq]k) l;ġQPw)߆ro>rΙ&ʯf1t@jLZ{54Zf`oQM(Mfj (z7fLZ؅y\23%mCnn tDcQ]{7<))S:FF,Eg8m0&5R/o*җŮGAq՟?GHN1v>zج&7+ii'^j9Ӌw\{?z>)Za'gQbgxwC 5.mes6+0RiR% yց6y)7\+1^l5oͺVl>Yͻ-}n9SRUw~#lU0G~ L =&Y aYk1Z: )bm|\>Xٍ@i$f'hi! ,2n |] |J5IԾib4juq?(XҗdSݰߕ!lw37_p݄ ˉTṒ_ZG~+$lف掏ӗ$S$~B5LOwz$AGg_4*K)֫=-鞌%7=%`zv)^Z(tAa $HCI1V$AyzQ̕E=zt4И@|׎-mW8yEcS Ux'^dEʙ1+VGW'P* pLm/T:g05k*^0ydpdNl+|QكjmS/lRFJq)쿖]ԟ[5:a5jڴک^W'!j/b[KR簔 AcA5t( Fĸn>gp3| (gcө!<pZ+ x?85Hݳ(X1SP!>tl8v-Pq eTʓWFs'SI rޱ̓?n#_m3¯9SH?A :n>([-Y3b#k_Np%ȼ)'s٪^f`<6%wpRx+ gq\rx)">A|{Gt4;mI8`d6܏G\ğ^wP\}ݡ+kEt73+ju*q,"èĴi+?R=2e"G?^; & 24]5Ggjˁ-ȂOQǒ!~:7iuC*mu[<_†V:mDF!ѶbqOdiI#™y2h_Ƈ%Os/ܘd8!R0o aֵGM,%-y-x4+T{ Y@m1.$IlX#D,A9wMC՛Jg7En[sPт]2.H[rhqhȻ݊Q0v޵mZ!q}dض\` 'W_>F܈3ML5F)r퇾ZA=uB\/$lMը j a֪/"d彷yn 86g?,RJ8fuZ/|rkĩUXт}Kܷt-8R>$!~GұmQ}hp%|?Z+cUҌA0ۻ+n/ g$YR4sxSV#@*8Nam'w Ch}$I÷k1(;{SXGImMn!4\#ViL8*Y#r y=CݳƊнIK:!a!rч䮥J_t"| MORf9{jK4w|~Ƅǻ8 <0c$׮1k{s(-<{7i'̉f[ ͭ ݶu[aO_tTb 5{ZqR=|98߯^G]uj#OhD=kk+Nc?/vcY<1U>M?rUrztָgK`[&]ybEV=dI.al m}瑗8mc BQ{ ;FT!1bGҢq\;sVQA\)Y`Q /{_Sd2vnB?Tshh^4M;0_З6 (J uxT>V(<ǚM @7[LH^?ߖa;Ծ$9BLF-݃Q{ "G-^ l 6 gt\bM$o eӾ+UqAYaT9 "^A3<@1Rj)Q'P ~z$GߞK?J9K4g鹿= p &R;"_m[wsiBWiGFd<󧯆|+.&; vj;?kv37͐uvjn_&"+K Z-њeC:L;aX1RfC/Ux%s2دy˕&{?4e1d=FOg.dphάEo="Q=@2(nANv瑅l7%;{HW/e'Dww{ӺM^}Y$ſHcd|-ehohkke Ɲa=װH+@򄹶Y$M~䳵JiiGMj *DM=1+1lWZDԟIB>74gm7dv YTD3kq΀B99CtEb8Z¢aj2(Y {"YFڣ\l+d!AҎ5$G\Q}kL#S(įmbCqEhLL2BkQu/> v+8meVd1uD}j͆͝Fȶ| CL2Kݽ1;fm=6t nC-acPW|cJqfU{W {ٷ{s:jQLHxB˦ sa!B YMtƴUSUt֩%1N[}Cf ae&"ThrFJJ }u:? +qH>"nHypDਐ9J7}0/jU>cÎs+~aݣ'DN` SD pϛgxĘڵo媊>G̶K; TGy7lB2ⱉ%$ƓQL2ʺ Vyk.Z kx{T0u_?P1R'e.ofXQKY=J֥AvZ>E0K(VN-m+4xZF4/mgS|"졼)JL4X]y~Iij9Z +zSofT;s"L1 ^[В@nKWSt@S IDATY/ٔ?$,n(za߼v2r)^"JYʭ4nIE8lkӻN"R™H{ K.w (shaQ140ԈSS(2SYD!Jz1 [84Bqj+/vk{h"HAdZ!rixrT},R]ҭnWn26ٟX5!g/]-;T_\yb1Mqʊ؞v_ܤglpDg싾>+ 3ݺUKIrY|h7ﺇ$ רljU 2֔&v|DcfJqb^Wz?rL˲tO`}+ȍ8!Ӝ|Oa,i]*Ya$)9M6B5Bi-n+X.Ǣg96:7@kVyKbJs5fIp+-^4ލ ##DjTWum-#C9911}d-{kE,E.N!!Q}#zpJx̑gj+m?| '뎃38, ?&/*B4'IUo[Elٛkq.%o^WCmnƨlz@U/XV (ބ|>LJ\/o}5 6t5h0a8Q^9"ˈ0V ֕3)Dw6>MCܪ9ntF+c#%Q1%Χ^bܹc rL7s] L8YBQi͞#tټ 1iMxvyՖKWOP1זJsziǶk]tjU⶘QZS4y]4_L+ӿ٭u<zj~E'՘c}TNnQ75_PSuoݡ˽cL;_oy"gq[б3@Z1X=L:/fxX*lRw?703c-0Eu<&u|)'m-fTˇ[߾&Ր[2sҞu<풌0(2^n$Ns<L[3`s/U.ˬMbq,?s=ݱIꭺ⡹}1PŊy c U}ySl"78~{26#PӈNjW.Q`*SGP:#͠9X5iN?U&=gO |rK.fpaq k"͇IwgD(b|i&EgcQ2Ƕ/VDca?L-€W?/Bj$`x6Ae\C ?.k\nz4q</heTL^CNB D2DS@=`X`WA"n886k4ũӨ婹|^;fTL]-%o)N2Q?1U+Gz̭Fײ0)g H "ctCT`F_9 HGWP8O-wY%NK(F3cq# FJe}_KXZ5uLυ֚SYG .Y?eP%w74,2(+_{6Svxj@S2.,/ Ѿ;D| K}Jqe("G4xgTq jAKs5asGuý-U";JaFY-O=%SY؎SE2h' *T[><嬩 ǰqMh:^j 6-—玕Vkg'u3Yq?P+r+lH蚥(]hi(O߳}e_e>?!FB3&r_? 6c7 vyc#||RCگ E۪ }1.]g3-)Yy{ګgnǒX:/8gLtuюy{ny'fƑhO%LzjeZ}%(#xط $g/lwK^i—v`f^F7Bw ;J4 a?bw<AbO89+k0H wc~Vi;܃;)|)d#NBr46u\%>$BnIc^ee 쯳-biz)ا4ymR,P@jiC+ vB`SneTC{*Pڰ;e\_`V{LeC=Tڣ[]GILOMݫOVu{OuQMYMv7Cs2ҲH:MOb&vz0izkgS\!CrP14Vth$L"Z};B,nA:ߢ*M/.M));R?}V'Vm`d/b` ڵdN[^|} )Eq<,JS;!In|m4**# 5{aTas#Jn7\zv#9B=k-ƭv܌NJPaUvF Z/ BhC}M,. ÕQqDE.$]1cI.T&/5 e[_Kے7,Q\q2#wއ9ht"JwY>kgMZ<װ8yCIDVrk\pIsvQP0-c2~ gzۢ4MfB&YϽEә|s'Bs%,=(ocuIHu׶6{9ַRHnrTK4IDfv*:`žEF:h=}L^ysZk*YS՝]YVO{X 6qX10u@i%5֟HMkQ}Ču3ȟam̾>N7y]f{b6-+%6x(dlǁ]Z9݇LdeW?5w/WB+h֦}|߃a|1x'z3 $ /f-ڦ=H7cqN&Bl$9K^F (=>_Ajp^ؤfT=hZ]/qZH(Q 9 7cp/]-.#K @POJWz…R0p r$c9v3d TXM1tc|M=[͞KhXz:x8- aKy0kB(WuS֖-  1YuN\Z&Rچ iM[U$"{`T;PH&ը"⯑~ܟ=^x;^쾏爛_8Rߓ<<9U?L+n %l_H-U_oc[En-?HԽ _Н4>~UۉMJuA[e=6s_Bd| a2- ?ZZ#~QV6glSZ$;ѾoHۿh`_~D@n޴;(_%)d2[ u7pR0锸fbߴma;Z1FeHB&6Ioo>-&'T<د|KHp{rHMNOO@Kq.P\Z~*!y5gWO{jl]PTT_|״HsU:te)qs͛qKlj*k "5E\x"hX9  L5Z/ttʽyqkb`?f?@վ}wtDr8]ZU}#*oԡ2Uyӄar$1 KN`ޡF#f@,7Mw( {oT̫)@sG^}!UJ+hJ1'#,bUQѲ#q.a{D9\.Fb/@6Lݬ0xG歳}-&XՋ,@}AOxYUV]k5Ȋ _y_Inʫ A-ʄ*L !IKt}ОbW B@j?,B6X'~ Iѵe8N{ ļޙM{()ZXi9V0CRm 3]'(?EȨ8jJY% ,IjF7PQBWi Ѥzҧ1msީ]=ъ/3es}x6jtL3"Z|IȌeyHݔhq5\&#tji}ICXM{"NgOl/09ETE^ <3@/a wtN[L1ꏞ`sqa཭&Ȉ0cnє4g1υ_'Y.osڙiz#2iPp4:L6Iv4U>]IW]zJ,}g vBXaN%|{p>-N$~XW i8V'}>fZ7lFFqMkxLo]Cc^S-F߾;jOWP|S_`ĤL)d I'ܾ.uq1=V׺fj vn^Y64->hFh_핲 o (_MQ19Gs@5REZa{ (l>ސ=,{}Qv%BJ288cqmxk;+&z5>?Q|#۲L]] uC.E_)-@膺*[\SgީUizح&&%|k>rMh;":ٔg̯0i!?kc52lhD[kN!v?r숆kQo *! 6ϔ986զ IDAT)%F i<$soEv15GLP){E'gẽnƿfnf:yߥSJNOmMOJ9җ$A&M:ĒF >b7q,aņz6C(R+;.ůIs.+Fty2@K[YDeM<OŨw +m@NHa6elXMgXl(u#.QkǤeu,F9H.D2b^4!{6fnґsBJbkC`*zGcznֻ q[[pLp-\f1A%jOq\Dtwȯpga0QU V>1V xD%vنGV,>(w{8niqpŒi!ǏPZl'~$iĻ^i<1{DhaH,nGg_*?kʙ|'4,@l&o62 K G%(/nO!ݫ/;\ >Ӧ#W"QC5 F_Ej(Q@(2'+kߥ.Ը{B:Б脼[59c8 &#iNuM9G{WԱV֔\ RrT17mDwJ]zH|JRV3[8T>Qj ky=PZ|DTjuHaI E fז3ԔnIőFIKVvGW~.4:W-Lu iDO2 PCYH9$Z[H6mz/}ʝ%hh' |5>n.h!-\Y5j>n ȴ X$̪M=Y.{$m'*&[Z-TrSifj|Aw for!G:\gHů[V3뵎)mn>(?*Wa);Z< O~Xśqg>EղN_6ӥBl,, ͝E?CT^5vx\90FEU?n(Wc95u%6T׾NV47ܓCK/s4mdmEKxڥб>j՛VBZ6SB cT&4La2Na6cfjO rO;nOz zʰisF%ÒBwE%YYvb` )kX.Nݏ{мr[bQd󡥐xq™OSV,]_7'1[;ͷ㠡w9[z0WD]}r6q y=عY$>΢ne3Exj脱ym^j \@Ng.::;qkE wR2Ƴv˯-6AN Oz}-f1,ѤEv=ԕAḓ|p#GLVrn-QπQ6o59 [|R[7|?9|##X*=YQz"v\3^S1$a@廎tNmJ_J,UYG9"Q ؚCZBg* ԲE6|2'K<#pw'˰ p'$N^œNNUv v~/t$!K=q#Hs:J#r-N8!q1`% &TŬmӔ1mJ"GC}eKilٲy6+4Q _ˆ-G CBԌqE2v*MWԟb;AxV} S`#V.&aJZpTMhPý +srxa 3t\Ni9*9ρ>yeYG"y:}. <~lynݧCKSZ]Ow)ٷ{y릅TStZ?>Fe*ZՐȯfLg ~aWcju:5۶Ws҆ZhGx+rdEN,sϳ{N b?8OB@m}suO՟?.wV644mM%kt9'vT}Ԙ,:A)8H{Lr=5chp ͙^(ۍZzo=eRKGuT1+Ҩ!lƯ+ xhC=t0e(y!ȣ^Ίtb?%y8\$7j@=j2^@G?s4-S qoںw!|lfҊL}(l埁qwmؤͭp4UH㍌ܻT;-_Mؾ!Q9s`7Rt ֲ=0 v2 32?1OJƽSU˭щʗ%k>CӼ6|(n@Uy#m0g_uon}cQ#ZiRK#{|߃/D McNf?ѵc2\\tIn W*ܰ# XŦϿܲ(4꽦t-7)Se(o!j{Q/K0ǩnih@Pj]zGII.4@/ 츧kbLF 2$8>&q(4 dk޽)kp-A) f:NJ!ְM R Ga ʢו)1xD:|joIE4=Y<vSiYI3$]3>,9%'lde_fj^xlH9#A:Va?V8ƅH1 6s6_ꊛ#Kڧ5NB9ۘdC2SlÖd1xXz[- X( teL?ixd}5'>y 8)dպ=QV_@e#%yiHt/{t ';%5ďjfz6CI ڧm 7ڟҭ0cDG%Yc|1859f"!Wcqi9Q$l8\˲Ij WhHѭ7Cd 2 >-uվ3dQLX.@іF}c5OmFm2=H|zxQ@otOA/"j7lOt ?|#^jlE}vYC[ҩDTPawV P0O!e$Ш9< 4y'c9NLi ER 6^ \I&:hvpM z|I凐-I+[\M<9S *pK<+<ɺ\}1VgC@ '! ]Q\0nB^/Yȼe>n:^[Ea+0!-.ܖ G9HYgnESFIo{떡vErrEDd'=U=gxّt, /=8պN UbԥҶE DnjKaDCֶauL\tè$RIhJ-`7"v8[|P*U7;ge^!qه,I &6ԜkpkE[NWly!z# P ukڅc\V ON+?i,@?,Ȓ;(U6trn,.L, ,Nm$AՇOcY|PSFFEK,5vH kEB:G5cs*$sZI%cDQEw'~M;5?{VOE1FalnSǒ꾈55/XzkZ&lBrxh|; !t Ǿ4mh K9% ϔ߸0|)7FD͋._>]dMՆcDކ#M_zO onὡY/0|ܮŢX}aWV.Q]*]YiFX0nh8Q6牽xG{vӡa$o5;{+oj֒u86 ̣OI͊ Ov74* p Gg M"70'aqU 2!ʽwX̢a-md!Xl`"赵ccg# zasf."kŬ;Wm!-s:Oi*~j*_\4_ mݷ)J]w=\0Aiܫ1m{:\K')g֮aZP85Q>`c|} P4ɦ]2;u!Z/[i=w r25s;X^PR! z"3Tx7< fɘ⾸aF;ܦ)|>/6fvÇ/XyI1X&Ԏg0 N^<с% |sr T>#*˱KG~ELō"낑2Mf]-d v`hА6=12p "w~ҋOQ^es [tFWQ%rK] uk4x!,Zd:C5EFU9ڀ9\ h2mh<ZUtaAĂ|]n‰<=ĬQhK7:nB> [5d@ϏeV]ӜWosSwgDrNmb4 7O<3w[$3_3o v=4^CC)&&F#L\-2|[ζ[K7Wco 3Lkp[_/`3*N7ؤLžeUz$Wdvj@5Qb_=c5Y /} BbtDD=ZVU Zsܦ&Ec juؽG4ƴZ~F;TiR\p|1[YP 惷#GF+i*۽Qja2^%2ӕ갌r 2ѽ8aD3J,@+LC״nRR5–K|=H.m Z Wg3vr<’ | u֭TIeYs4Aʎcy u*1?0em- 1G2)!oD6A"6( tFL &tE-AYćj6l`E=נpO1Q^Ad-HKK 7 IjB [(l6|uRk;"37e.313c沉TQHNڤV"BA!] ~ ˄xfupXzX;{žN-~Qf, \6]1:O|4 ~舔ہeNyoR*}qDmQaoP/קu7yu;^wz/ W]t$JJ/N5UJSj}u}K-zy1}Bc4ַ.߸áu5tKHĊez5LZbշ_Mz*oJ!F}j%'Xs}W.(T5 cɕW춶Uz%wd\Z=9]ʶcɺTvNc$WN kQi=ֱ.3Z l]K*- CSkaJ#f]X^LZUQN; 1[Է-mzփ3Iv87`ktǯ$Ddsm5@ԇb&%qkR,b`D_ȘbҼѲrBmEbK+56++@?5^kV 2SIȼPxCș⸿1?&6@IPIb6aTV&dL&QDmugۨ$MYMc9B|!_mf:Dr:$3ןn+#fibS7x ^(R,#XTg6}<bRဆU pjg21g[8+ڪ /l7(i6c1Zi8gE[v:RSع_5c*/WFfQwNl~Sh:O$j0xD@@QQ*goq\]_&tƛ*b,A#jEQφ3۩GA ޲MvGmu No?C-a.vNn.1Ѿ.t®M6B:eGq;гc?ěee4ڡhHКTC.넵GC!$OiČ3TT#bjR^$;KfVU ߿ ;h-dDjKIݰ^)sխRV+-l`lܸ^x$;4v'k+]Amϲ82927Nr#׼߯'#ڒ=hfq8stpHd;z+9^w,,nA@*DeC,AGpLFKېA7Ȼ+[qӐ.)U[srſASbcSq} f5t'}˹CNsL9qhmg"އ6U\}X}UK# !$]Lβا3@S]4: &,]RhrhV hg?я<=`s4r&B.Fg{^+$}TdD;RK o=(p* s:m2"ujHNFzhsmו?0&ҿmd 3X1w#mĎx+ :d~ j"XT@]u*`#B A LӐ8=Bj6tˉ$DԾ{w%YGj^k 8T5qG6!x̡aZ|Up2#\4Z]\2PⳎ46Y}%q°ƶQN(=[Tkؚ4V #X^{uW?W=b>=REUʑ )?o~T\ߪwIAoUF|kSF*{xVbo,lzk܌k*hqa3Fj-ʙLWk6!mFk$Fs<H[D$VݪڊX*l#CŅe< O@UzDD+HG! 0@8o}ݾݳ$8o srA.RRy٫:2g41@㾆;@֠fJJz !ZSf6LXOdKe@?c֯8b]gΎ1NDL-\Fsirҝ1Yqdgx+{ef/nmQ˨.+6~1ZZl19Hs?Қb[gOonη/o y BX$Ы0{S}Ѫc; ZsBv@<\}O~ʳvxj#S) k؉'_r&G0s`d-‘kócuG5*ׅgb8ZPLV&"Ӽ6[ٓ(N} APD]|Ed΍Ȯ{8o?Elرۡ Ӡ!lʚns(Pt%Sh+gb.By v>0s fC~ 8&5t}̸\&l3_^\ Hc~;<U*>(ϝ^x|4a_5!|w]h})F7=mu&rh%:Xn1I&]܉)< g_m|RZoK=3cDHA f R4I-qRmH= ^b26.9.r:3Et!Y`, R(Eޙ0MZ-Yh"d1$18(uƦMu#M^$g ]AH$+/ѥn`\q&-8'~&as3**^q[(/z`U>ҕ7׵r#e~*@I84Ԑޖ#:(`pzh0u`OC+Y1[hxW ['syq}H-t ɀ}k^ [QbhBsMVmDA@MFk"y#( ɁZk6;Vg% < k}޲nnYK gsytE:S9Pa >t (DuGs.81D!QR사t:+v/Ƅ;ǵE,dePXEL8V:e!ä#^,7%V/9)!\SR$ʦP <)eڸh4ŭ\0MB#YA毼 ͛fCk+6N2-^nيr";n<΃(HSt7?Dηvo~~O>$Q4XbQ'Jwnz\*םg05{A03ڃllE3N,UA7waǟo=ϚƖSI5v%,jMFLhx5$'o+\ُH}}\oxrt́j(drמDDAh 9~*tydϞ=/}}w}UI1 u&@GqVdr6A!Kvk?%fLy . Q]]Uxɘ@3q2d2V `S;֤o0G^* t)ZFRL @ "J޳qP[=aA8o>H:W~O26ļ&>pK{3ՙUZp7=' G1GayY4DrQF<{/ߎ$o/~_iJye 錩`ޅԦ>jpwIB5[$qzxS?R]1QO(F"҃8 Rl&\D[iRk((̄J֨o"f""u+ƥxO'mV;#Z+)R9DZGZOdvκԵʪe_Rk<~qi~Ҥ[M;_Fbh1!֤.ŸkbwzY($D[5fi͝ġ@`vOnzM6®Eu Vr"̰I}Izd1`R+l ٭{-S wUe=Ϩ-+훨 C<*tyKp tSv@p@x^rHD6dL%OF*ސ]Tq٩&X.IS$.Z/#擽)N*gYfLHHyT9KCN>(cɻi{P !xm4=꩎(4]Ǘn/v-J$д|! Œ)8 7cdI:J vOPC K$r )۹hAEK.C_wqR-л`F"8PUϞB?BU2HuxwR$^,qZ;}18ӌ~SUߡM$^MLm0_O24!tqQ;"yS7#8 $5,`T$nWQhrd{Awc㬸~]-,iНrq@cg_ӯP(T2o FN1W0ky\B@!2 qM}O;Lu))隄iQ͑nvk/pIb- 2TrGT]纺4B# 6_u=ȱ31f Q!E}`χ UR=#\)+ӌNITXf ?tr쥗<}Iк>x>mt\(gopI+WE^دc[{GzQs4V5K".[|Ns{.Y|qٝX5^WEV~Ed:l'~c"z="q"죟 ,ԣ9&&2쑙E̹ډ&ܴFrm}6[2nIw\h $|u-*~+A )9ϊ J~IcwNn2h<ʩ75\3o痜:u #ν5"xiگVȊCc""<|g?J2ܤe*;Vw^^]V!oHD|=fN!0u'ˠ =_TG#H)g}V?b-  Y?ZJhB"Kψcr+hRE"ght8ӝ՜Zkm,Z5׊Ww54ğsoWVGI" W)_mTOƎ.:Ԣ@2q^Ɩ|d3's'OT p|cs,O]Z]bD!e /&}VB'Øa.zbT)"g-[hQ!6L>IC{`'ws;J|V.,ώvply7s:Tiv1|x'C&@.ge+}GW͉~fCtkgWcuv>dhKpcUijsrѨ)6 Iw! 'mU)[EV ryՒ=m<&nByFހ{=4!8$QQ-,vQuݤ[[ ]H+ҭֿ .M?( IDAT?C}nf>:* !RJRN$S+$#ﳰ?S|ƒw3鏶lqضZȪfmҦ An,nBr5Z)`ji0ri¡n\,g)sȈ8H;"~F̜ӥ;qb^T8KTS +~!T|6ɺ`xZ#W8Ylt3@+YvѷmAP.ot H.(2xPM* jXoC"K-[Nqc s٫O)vX}>;jDW[y7ƧӇGq٘Tq_Գczٜ>=6~&Q8l [)H'QwWw,xJ>xM+R6D|<2 :tы#N_) cWX 4, q>}?CDܞh*/#G؆SM<]GQ-iAォnR?l{[8lm%PFzFۋx-qdvuGJHhbVhOj֌6$J;%#1s@SѼ yp}Z>,";?|BWFFI3* 2#"^euP&#їB,3V7?/G9xϞ* tR$13"9M=QRJ@edlHCr8'2eݸf.ڢ"=F}h=g@l>>RjnAqsiw8nޡVjJzLYDLDqţ@oݻx;SJit 9'hxfG}[ 4RԽemc<4c؋Z/2>W  ׭kd .HРhJVҤZo-f̝8YBc|{/O0:]Z!.KVDeݭ0zRQ.̘p,XTwI\ޱAM\st|>j~d4oC\:;@)! XQW7}62)z( b;FPtF۲]v [@:0-\"&q\U=}{[TgF.x ɢP.r"5R(GLQEX~;ѳFZ-B Cr\lR2ޭ_ށ1nz[zmgaqel4Ca[|`acoG$K/E^pJN%3> 6 @&=Qm Lɮ4T'e%Vj:W_Qs:;Δ?'%4վZ9@?C'U2 ) sWdX*u=Gp\Lĭ %rwAAh L&%Ɵ$_}2M&WD\ox!;V \T6Co+7rLȝN]6hxJ^QJ[l\%ʶ92\#-ǀw y8CM|kǝ2Qy=b- #&^zۙ%z{/}).8Hgt}1 \8\`XEXx5#fF487\m挌" f<Z$Ӫ:t*4kX 6[VC^оn23w:udw0Ln=g }{Od3)#;=̜G&Ջ XWvd.̳՝qGS~\Aka5Ht#U9!OӖgZ!kFHމsu#(kďklxvBJk2܄i%}uPc i<}+(NϤ}t뱃?x/?j2 ) u Vm%9A02W# ZP4v (|*4O)d:qS\VydJ0~CsbXiWwu\|-<4`,"{m rF85]WM=Wfo?[d{icgQ:<s7ŢxȽTD=Gn3N}õi{.9BkTBJ+$(R6ALE9mh4\֬vQ/9}~;Ejc##_!֜^CV*"^z;F\ZicsPX$rSyIg|G/T8 [u 5h'e킌 A&֞O 2ۏRm$0L{+\1<$h =".^e|N4+0}P%WRnb8zF4F{6z"f2p^2^)^fvt[bdZ8xj}&LhQ@#1EèvB de!&RV,JR- Ҿb2Ș ~=0Mw"ܞ O<#|x!knvzpaeNEA~+_;v V_ѓ~[Mst4o,Kf3@:&BbxDObm^6@pێZ_ɯ[!,{k_WǾ?[_o~'~7g_?``?}ۏ탇gxc]V߭ mch<|Ԋ3Ɗ۵H^4"hB!-Dq}:0d;*HUOqo4}krvQ}^ħg/tU_wo/~7~?//BK"Zw^&j#>!Zi^QT9+Niź>RhH*jmLЋ,OƅaX٩jMr*f%PAJM} KRR!hH9 ($/V qs]K d?f` =qg?W?0]Y"ae14W_2t7x\S|/%NcżJo>O?N w~O|W_^Uݠ2da2=)}MU.5- A>҈ziuNot WBG_Gdls+~7,5\>)p1-~_¹X1b0s8* tjʄ  ˪Zr6)yYԛ~^ 6݇A7<N3o|w~H(f糗_}8̱z8oonOzx??ꨗh:3=恞,kTz#jdPȼ)/l{h|VQ4B7J\-'jAq =2"q@x1fVnbc[ IO$IuMR|7>y;OsR!yދ,OrFpU-tgsPę> zi\oC^bYUaN+}c$36#F }/8ʖ+l9ZL5ah$@\/uSn' #aVYhR7/^iSj"pis H?͍Wyٳΰ敖bespxٷ~w~7 pO쩝[_7?~><vgco]+=Ow֬_ r՚:s#)~3ۏjȱ9rpg C#鷬ٳ!ȸdgZoM*IgO. zz8r` } ]g5: r ԧYI:³˽bn%sfyVO.X%1y3rw n+߾=}N3?ukyټ>ov=|o/T9ⓟ~e&hCSPFae+[j$* f̫ CiliCc5vwњbANlͧ \v='t)[>T(j>CWP})W_̔K հ E) "I0<'BQ]W^~՗?QB<}+~n wڱO>{vOGλ}SOnO.AC~c+dBcS0paܳ|nEM,pRttNX"N?SSyןG:u)Fj5#^%7ǙGSZO{oLW&EBX/͏}>j QZPO~-"k}˯'w73/K^쳗_9qQIa"Ԍ BIsse7Z~6hy>(\>$}>#*>Jr^D\J)T‡Nr=y'TDݙuVѵaE[1(6o{>2DܠYz>DX#3)&1h  2Yx,t#e[3jfn~DAdgɼhB{pCv="}đ플kЧTǗUJV_ w:xt+qB,)فllET]'0g G_kse]dr )Vi|yrDpRx4S[mmafL?H_5FJ[)Q,\,}/ʈY)'Rrxzy,oOE!$ӵQ7*wc,g hZþ\h vp"0.,njXNSr2(M&tΝ@[<5l#k吝cW~¢UB咖+Ϸ~0:䵏|BuQdwKy!A/HF{ϟ9ϟ?'?mfEVz{C/ lGdܪ=+`TW>{;xx⅐}nv/ Py8 `|Z`sp]=q^33#a.QByQ NG 9Kħ U#IZ.7NLЇ2+RB{Q@j(ȋn'Ki3!*C̿y|&1eCvk8f~#~䣯Ǔj e5m@xcEzJ풓 PN$=D{ޓ?^QK`>b#NYY2]|?|=U=yi@2XGqB[+4~%K .Yk/.d߃QkIH| ez$0B9-%E!%QɇAkTo}j‹Yo+~%Q2T( -k<մ "WRbE__#(?n!#3xd:&{Н= ZX.ӿ_v>gV:Pƕ H"pwc.@8UgOotK\LMJګLgCÇ~hhu&)z*qTg)J(S]L%隽X׆3:c&18\x 0F>bc;"Xgz.^ը ]_C8K{8# p: r*]ׁN;[uq<𓌄5P),'yV[#I!@*(_=4ҍNϵn)Vp7S`Js3#Oem.IQץZΛ$OmϲXeRj_rD&4wR=MX= SP3]k2C|cF+L:,1ITS43anCD^@GbA<{yݎ'O^̛z T? q^Fu H͵ fD+, R @/^;no1b9.}i2ޫGOwf!'fNqzrʪgC#K;͖!h]wZ4 IDAT[cE:蔒C!!ٲpQ^^p šYmu{~:~2b!V[v250|*(G+L]s–AX|^C2h; *_ioVĸ{ T LRA٫-^QQ͎(B ec%u],bY\ @sea'P@WH:ч^/JMS2cL EpQED[.+>2$]yr֨b-uz[Uҋ~"؏ѵ8x5h8ig*bO9@E.ѵRfɛO;O<Ml-i*qc YOEb/⇮w~[(me!<\cԳyR- ?,<,k:Rq'bl;u.iXv؈Yc)*ͤIpN@Ǻ4vtjRPŤĊer:Hq肻GS"!%ĎA'oyo3Zn;wQJufHxlr im!W<4N(,U&^ו3s_x[v*< cP;ĕ%H0r=4AZZ_gݸCjUJ! 9BڶG,$c9k ZESJIڎ^S剛duJ8OFӦ«!e8TT]_j(R)q̢#Whѡ4 ]Tu[T\4)@$jꑵ-+%)/BS_T$WDB|{.ƀU;CEhVzrlk2cTOT[$˫-} AD|.pXE@>VAoEF @Əp)W5nuZލĊ_wusCAQfF J(!ѹF= D69v(h̴xsӶ&Gmc8KJ!]|Xg,c tuLߐ\@K%"ӓ')NR6]T!0 ׊nNXte,1rvD%!O~bg6:d&Ɍi(s5?y0]V*< S.(Ka8Fˁ:[{@ _p9 QZZ: 1gK:wll% JVLsQYހxO)G^b kMUE6{aո@xRo%.&~ b +CJa2ES2>ɳ.R|]hn  C1w M'&I7|2 m _ oĖ=YM5"8^IVs17'T]{B Hvb)",-{%k͑%GRhμ= @r/r͟1@@tҩzS_h?&וƤnmFm+gUhN,wE.ZrF]=''aǎx,_o(6 }ϳ\D-\4ޅ *fySď 9H sц)Xd LHY=ߘ9+$(3AT12h6UHQ`tp{0j %ZcAitM oOWHStjITw5(Z=^s@Q@Th>ƔUbgܑeEM8tWoĆD,V8ӎ#I{5ۻ=V_Ƨ@v0dX OK2I{mHۓ]x (ϔ3DKVtaaI:%ڴgE3NjA]t19&hfGa{whbv =Ix}DM:HYXҪ* ǍJvNE h+ ](QDPzl=V ~EWUJT"ʖrd6üi *ƒZFmYq(<(Bg:pp@P/ NMuC,$Q4k]3*;nռY%(9<N4Ww/K֍d񖸦t-b@4z4{3ǽQUםp%mnso?$8T/L^|xy.1 Yp|V  YiwTMq#ei^(Arv?h%SA2˙ϐF{(*XCؠ0[M(V: 8`ţtQ=>ykC%Tm"=#aO2'p& dłTPSlT6#n$~AT==H,?T1[5[mJ0)MdCcM6lQ AJcYP+EWi4KeLhNrxMs6p}Fo(n݂V9"7]Vհitgl}d19MG)(bvz*W\^ʃ[qGQ,5c߰N#c Ko';"{}tTВԥr&0xZ\M cgW0ztwlXltxܻ9c>˱p+hb':HϹBm,'$ՔޡtObWtne*G:箻x\.Z/f'b^i.0b:h^5*˯>q !i2Y|g\eLyOl7&wv3t[허=z^ƍЖœ(']A<"?z `#Eڪ]趩O>/`(X&ДA5R vN%΃Э$HVV}S>s8;'y m;҂UL z`lQ$?V4/^8 w-9'@UY#Q. B?<{GWt^ߣϺIkv?,EGlpu֣S".P0<3 wW̝0ق=ZUo0dy'i`DYrw|א3Ofˆ#x[FdZO ,Mz(KVy $gvWnjM HNuvSSʼn%/>)@|xwQp4!WBQ@3"DGu asJM(ϟ?x B"hI630"̅^T J\yߠϓe6i"SL;Bͽ.39V'C( ~g0i,xP G v`ޢV:'Ga.%2/\cS\u>BY:KRN KyeEHڂ.D@ʴu ԬWw% d:A}ɊQwϨSU HrC/؎R۷~+DZ+=1M[ 8/M]L&>H!}LH9C S?r^H'\hM1Wήa#:`K4Hє1c6h ~J^mV!4ɷB'Y4SS͸LcH( p1(u"34AE3+bz\6P=*ە+xM҇s(MZ^˥ #QoxDOO(ݹjW Jj5Un{N%v\8eZL㴊&5H<&KR=P#G)|eX]x,1oh*M[$u-̧f6P2і7џޓamn&6f"J@]PO>/ K92!t!+JH=!eĉ/HO"/[}cOhX 0ܣKo7I hy*]a%URJ@ `I'zcG&L=Xjʅ4<<~f__㞆5m!68:BtFsN=`nF͌THٰAx>݆F#tMؕ;} 8ަ צ_{]+a:qu e;Z4Ncl"6d)N" g8~)}c I$6 -r8<笑M";,τ׷fe_PYRqĀLݕ~ K#>=kT7KRSQ tS7Ur~|T;07,pe;Ի&nf(HIzZA`UN5hu1x Tpn#ye b9ZrIDAT͛<ʦ1Zܼ]gsA"gX1*LIS^[^znd%{t:&0# C ÷<>ml).:w% a |`KGʬydHLd̀y No5B-bˋY0RHX?G Djl\"LsRѰa<,`]|]{۷߰mTu1MvICm\r&DgJ-DG:m??'x3Ug2H9L۷2eCZ:kt D>=%[=( ݊hwC8pgđ5Rǒ#c#ˆ {43SLĤ8ZRWTU=Sl(˜ࡌ:2eZI j+F\X0}=2a(T9I(C$ߏC)/54&-<$ lefׯ_ϘTKYT^J͉sc{`L7>^j{hdilT*i oG/tVk=&1ݸ%Uf 0q}yɵvsFڅ$Y0}DvNo9rliY/nSU<m~|iܙ~H4D9A3ɡpv\7۲XfGZܑeSw;iK+E8$ó_Z/Yt&/}S%]+R NA<{[OO=òfR0ѱQs:IENDB`lmms-1.1.3/plugins/waveshaper/logo.png000066400000000000000000000062311247673406200177750ustar00rootroot00000000000000PNG  IHDR00W `IDAThY{p?{ B@D T)tuZNաSglTi:E;EK) $:zhǡCB0uHreee;āZ"0ڌm۶7|s(?=q}mXnx zfp$Ij%.wE7o> yPs=,Pb/dbEQڴim߾/Up[O?t˩|~?>XGG=K 718z&2I+!Z|Ĵq:%,6dixxXH$c@ @رc :Ή*dN 3jkkŢl鮮NH&DGgegeSAALA @)//xݻwy&fzE+Ć4Ɗ ={ Zr'NNYe.e!xy^~p…7$]=`\. FH2le(nRᅖc>d{^ϧ֓'T) 3 n5lݺUX`vRCE)Yf }t]w޽{׽m:\hi%pRiiPOYV;RPXVXEӚoA'[OC(Vy,?à9Ԉښw/E2>S;wʯ_^pܖ<ILE *irlrOд,fWxRj,-7Er,@ay&%5]P," /@y /N`?6Oip=C.lܤa!#@s%8iQID:ҬRdW!G>L?mm"jUz ɇrp 9~9 }8!QK6<000H~Ҕ|:#Wl/y=IbsXJgtH#!#sqsq+++KЋs,(oAɸ0k׾ E37A4/VE$aS.x(OdbW_>yN>-A|4a Dh*-F_Α-XP~aamFα< `RB<9 cAz-tG:C6yYGS "݀2XTE|q&kAɒ*D ]dDP~Yss^ GtY͋p"$bw o>8kpD NJnV0߇ R.{Y`<{X("̜9F.;~8̌`EnnbJK}(I\YzzEP $ (˕Eژe١ i7jԛgx]9g,dH Vrxd +f43Qc0"C,665[R Fk)`Ѹ/= c}e˖?*Ƶ3dE w#३L=S H9rfFeX}yMnSCC\u/B{%ݫq+heԛ1ϙ٤KF <O Bi -?H DmJ=DERA$19vIev|"KY8'1 WTTU}`dbj 1s4\pԗeA&8 J~/kW xIyyR(Y_ K:]4Ō>/4H~Y{`% 1^^fzzݩ20tY ё+ESc{(,ϧ&%J`[7K=2`wCq" ŕ0\2PN,O<(v`fbAFE.|esW^Ms(Gh6jվrj#YȪzvyQQNl[bp1ņӢ%Pn#t<xFO󙛺l%#$ $}/ʋBIj@pO-,6N uYPFC#)(5AK% FAy42A9}"?柞| JjaG 5%Rw&SsYSKjJ!Ljp\R2xqfhSJiKi}"&R8t]O㴖֧ewbiM40-H JYIENDB`lmms-1.1.3/plugins/waveshaper/reset_active.png000066400000000000000000000022631247673406200215130ustar00rootroot00000000000000PNG  IHDR0 $>Q pHYs  tIME tEXtCommentCreated with GIMPW-IDATHՖoG?owvY$iL#RUJJI9P߃9p ĝRĕ0HTP!`ca$ UWڝy}}gdiixpcÐFj}Ifgm &lDP4` kfdsQ{^nMDqďϣl2;2|VwGQLj0}VWWfkzǏ7Y"+++%?z/MMѻ}FӧC z`U, GiC8Izsϡ*y(9ɠ` "W"w2ժG-;;\ZƓ?Y[[<7c0 ݢ햁c17azm\E֚Ja{7<\Kɜc4h67+nX^+&+/8h= Z8d ոE) Ð-333\|۶ [wKM*N;wp)iZApwkvZ-'JpdJ RܸqgϞּ}8(1y_.ߧﳾN\r,4e0`6Q!e!".~IY iE1QG1Z(x!vh珔kSZKKK,,,͹s?oKJ6|8Ja+8eeaYZk$AOF#D0 0 8>gc]zׯ_S$IlFqT(2TKV.ZTǨhp0Ķm0$"$%5INF`CD{(w^D^NWV!lfu'(}acEԲ,lelW.q#.]2gΜ9;K`\rA9ܬdBisu$Ʉ{"2% b Cx/N~j6,,,i#kǙ8 o"fIENDB`lmms-1.1.3/plugins/waveshaper/reset_inactive.png000066400000000000000000000022431247673406200220400ustar00rootroot00000000000000PNG  IHDR0 $>Q pHYs  tIME ;؁ntEXtCommentCreated with GIMPWIDATHՕkWsgn!.nЂZA(]lPEn.tcgl7@ *v!h!M 4H:3w>μ.#n۳ygy<9qe9IG}r[0=}NgU%G|~ vSSt]vskkkܺu pWxSSS m߽x ۶m`r[D;>#A֒+ZF)bf"AWpd211QT"Y/W86~ϯwpxtk-〠(È麗,E^""W%18FfI5qT t]Z-<8 *^0^06IIABSV hM\Z8Q pHYs  tIME ! xtEXtCommentCreated with GIMPWIDATHՖkg?;LfFjՄ&q#nIp")'C?ē"OBG4Ҁ,4)xݍm'oY =̏}<#}ֈe!c9:U9>m1}K0bcnFǐ<́o)Iɧ a"ccXB0ju~|g!?g֭||gϞ~\5=cx lnpR|^=AwIܹsg8NЮ+r9s666X]]˗,..)TU|gddu&VF1e@C^Dz,,CZ,".mcYp>8ƍڑTEt(Ȳ^ϰ,r VVVT*4[-ӧvfsx9#l7A@A/6͛AaX!88$IBZeumD8y1^B@@kM$c1$IB&2:.r5.^rn~ɓt:N&InSt ÐVz*MSTf7Ŷm8&I**Q pHYs  tIME - 4?tEXtCommentCreated with GIMPWIDATHՔoTGs3`C*l 66MU@i0B i(XH+R`de;>>'ŽAr3\QtqI4T*aEqDբwHu ߛMBn+y=a!B:˲|leX(icK4QJRPE,˲R)ZkΝ;ǭ۷88t FF1 )%bscm۶188yI^;2Y]]Ŵ >|@wY[[òlS!?߽ۍ fR e&RJ]ǏgddE=~ ֚!eϞ=,,,!V u1 5Il6>W4 &;)JJ%vM!tZ!qQcΝDQD__oko Ð X^^fǎx884 zFqp] $I>-$!<#Ib(ǘ]_RFAAaR8q=q05h@5ua}m ۲0, <Ғ~f,"%#@dOyUFh4}4QN.GV_ֺK0Kslz2ׯ)W3 BsY-Z:AY_@D7ٖgI IRX__GJIGˢ& C\G4$(IENDB`lmms-1.1.3/plugins/waveshaper/sub1_active.png000066400000000000000000000016371247673406200212470ustar00rootroot00000000000000PNG  IHDR 1bKGD pHYs  tIME ,tEXtCommentCreated with GIMPWIDAT8˵KOGU]=tGdG%dBrVذ-wϱ" ?CX 6(ók_EόaEzQUݺss,--0 1 "_s$Ih4-~]E)7rG1& C&Dz)˃534ŋz3xJ#.4G^ Pogk~{'y<~|߁8,(l+ Q!Zc-@Jxs{wT"N RDS!a38cx/QV<5AcбPN t]*ʘ^=: LV"1_hc A`LQs<GGG#njloo#" ޽4Mzt: ΊSìP,,,eycjB䄍 $azz頔cZ"(z82M$!It]k-1ژ~KEQ9yL9Ϊ2 IRUX]]((4MIӔ]R8 vۭӧ+s*%Ź/@tH2R.Z(@Vcjj ( RJ WwFAh4ܻ 3ͰI3FSqzv*Zkjc1(rOXXX@b F#T𐕕2 B(X__'4߼|z,&ZD ֆ>!H"XkNp#2seA2fghZXkSŚ-v:X[} HJRu`8D]nϳnqttp8{O1c k-9G ]T#,="LOOB,Kʲ䗟Bz?f^֙_iPXuX`u h`|6l\~4_V9‡Tk~}X~ܯnZ||7A__7qZlu-ܯ|[fSq즩r„vX\ǫ(9vܭn{H|9;>زw=l/[f:vkMN>&ğgZonfLn>dm Vz ,E~}KS3 `j:v d|nY/NN EgCg]xSnYfmm_X>y}[~1,gx]F߬渿[އڱ&n@pYd?]_ D%@/?AW Ȣ3ji?)*mrEﰝtV9;L7i)zCrM,8^\GzBi.={S=Cki_/@8dwjǟ@6 UzSdɇy!)[L'WplPO,El.(qYmE\LE;qehqum/HYğqYBE' ٜwsdÐ=g cr@O|4n.q*kN}MP l@ 2}*J{uSf _<-Q fVoڍ!C2\"\GM:}CRH26Pʬ0'>ǟR5}F;U :ջ}(ݱ&G V PO>G"Fn[ $ʅ$ݻO7Dfol6C+ܛ!4c(~־03EJk:[Ðcin\Bd09ONQԡj6aOԻ=s~CZq0"<{aò<4'iӃ*]EܑAT]=f7 's"N1;=b "+a ) ]&(ho=W9EV>/?tP=D+ ~pCPƼVp j{-wT_,DHr$]*؉F\QM|BrzۄR_E%&bߜnyWEe~T~yw:"Vъ*jذ?wvzV,:dzM ,kÈ|HnR%6qg٢(qo2>=f~sdf~I$*ǫ}R~"ւ7V`_ TF"V_?e ATHi(lg~B?hC$C +vKT 1x%.>~LB&O2G[HYV$B/_{Ƙ VJGDe[klS.rLF/_|ٟ_~ LQ!zB5G|=Xt n _'c|;%e*0[\ v}lW4iuq7凰絿ʽ:foy}z|zᄤc=b'PP֛<| )Xd=L6?{ַЦD C痲Co-A_tr$,i;Cf7&sݚ]6'/b:yxӏ=?Df\pm ʽ |̄g .3 ~msh?St Lk-hat__ݮy^:ѡFkbf“2o/dGU)m}x/)$7TytE$&>'!0vdsT^ 裵 Z>tgHht^ .h,?T`0x#(SGQ8K1v63~a~&Y/ɶ:}_BU#|.gUa4qqVOV< ֋4grFU[a*V+ OQb34w<;"9Ei% 3(er5YHU̝XuK 6{xUVtZ,7s1  4:EA?$ǯH˓$ҟѱuG̎=+Q Mzy˷<ۓ*D3ț@^Fo7>O>YjF1հfo]=750U'sHW#:1Xk0( )?XؤSq6Ie<2DjC̉(㷡 ia Cv[cױMSi5=ӿ Yv! gty8$$mDKo0d^<)[uLoEEʢ" izID!Q{y8qE㔭zy$,.$rPآz>iTEaCŴLOMuN;+JRʩZXσٜ$9< ވd |/lB@of"%Uzdc¸3bO-, !is"l}TGOhq@>sݮ9>7zݐKDbr U.M%jb 'HYTNKlսH&d9-T@؀at84tw4<Uk=>ΎOj{-u?Zⴖ<-aU_( ˓)!yX.!>S[Vؚ9=C9dKa(YD\R+P?Hn/ΰq \53`:e \KzTZ~"atFTAyFK >91yP]3dBy׷;.-^ٗ/׿nh !4Nd)_aT%S^KfʘDf0Qu T}*RF\ۛq{͇wl4=°)UC]Rz7=s>kZ%0~Tz>6hLm{{>?l(0HCøuk@MNdqAOqaL,7B76umXRŋ/qvdT;byz3*al(zsikUb v*2y4.-Bl^#Tp 5|>Tr1V9;g 8c_\M VE*~V1R2Bb @E|yZy͋T@3އ%>߭1Vi,!`12LJeLSZқ84@%Z.i?/>)a`^/q/3#DжP1t&P{];ek}x'H@S1 p^D~?_QK8$y1}'Q,|L}4*ֲŋ89 :*6܀=_}0+TRmYd(#muvi-_>o'~P۫s=w={>VWvQ|i+Vit/`ja5;h/`u{MxIauseE;rv0Zӷ?7'oU("1x~7ܜɢW6*X^rSX xnirhg+>|"Vrn,7O1;ɐ끪{|49Le{6u, b0%8)եA~1R8[`Ay0dk0F34=ӯ(0&Ge S\},|=|Pq[( Y^;ݔޭf:puRkXlnq,Ѽï(LT*W }^]T,}ݞn1,r,zF?:VTXzs_rJNOvh"ɇa2|U2v ^R L )*9s:91V+]o0 OʽFi|go6ؽz1N21jPi~ZfU qY~L0,Dioc]}#d̸=S"d|4/#Kboa݇G j&)@ٓy1d)LBa+ՈyQbu{}~:NK, QӰ1a8,Pp]jnv&ًxOۄu[XcZ[KC29ǃ8+iĸt {cT)%dCU%[dzgGNC CP~Xy@*#$͘zVoJ3\2"Ep(:)&|Sm/D@{86תL$:Tq+[g֋a+hV+AŋW8=:کcgn /$,'JPx'= PlFyoCU~++rrG ڗ<+%0C[K_"̩?1d ) -x5gY*WbG+1WXͯl^lN|~SƸ:cOϢGQuQbusNQmffðWxˏO+f9T:[ay,~VnEr.\fqΞ$e~UX;ȐSisw<-X/f5]:Ѧ˯wЏ-NꍀǴҗoX{0bN \kLLkraa yq5[{0:E|CHGj`U$aZ)zS\|Sr5 :*u< 'Yz6G B]rf~,2PNT3U2[ -|J)Ie3ժ v_헎r3sbef~Ŝjc;Xn}?KXX]NrN{r̘tӧ ^m[ NǢ, "CVՖOVu){}|G7B*Ub4_~½m+ ʉl=g$!XwZU) lz pX<6 Rۂ@Pr"9዗x{FUEڭh6E!vw("+ yVd9c)ejC髯pmxbF\ٳEcSd {:сrQ1}~cy·qb(+ni<'GG|-֓\bp5[u:b*?a-7`3vq쵌{:me o|3az+uzXlgk;$.~gڐ3Uƍ5̵X^2dෆ/!j~0E@gͅ8&P~;N~)Y?6:c,oβ0U5z#,gg )Lx:~)N\g'#j~Kg7VTW'iw2VK)Ne40J"O;.%ӯAw7IʀnAvUwʒ .,h " l c27ֺ:nnK{4n%ao`3u=$| !+&19Gx;ڃ|Љ3}B:u|qPv>|LJtɅCSYh~WN[Q9o-NEYPS0Q%UX7,XQ{+,\( (ݜ4hPo{fU{捔T\p' }hPֿXkt#р?tF#)$G9|(":#Zk|N,kuӯjiz apwloa=tnm0 ~qI$tcKUJX"7׮2BgGJ0[cQ7^C#&y T2ERm%TD~e[b@fFGt$b$pyrJ혻|Qְ`m`u2Àk",;vq|]l_෪Z_zw:Q )tD`2M۠e?L:&Ǝ`02a>$]z) FM HOKdtD:bXŦ;-"ƀib=wH>+cè Z~m[4?!bהdi G온/="Wڨt;PCǕ7`t̂(p+م"4*fjvo |Q`/xI*ild0|QۦTqP**JApZm?ܫ_G[x333oε6Ԏ=lՐ<,S5f{& IDAT5,iJ)WYwO2id0`0WE0 UE5Lk 5ngBGH/Oesv19 嫯/?zVrH ?;SQ $jUUalcPH3Xђ6̭Fw`|J|hq?hbMzLsRttkPlcUV&r8_ 39K{4a!$p5T̡jhlDȪ+Td ?maZCwc_ QIBwp@Rcq{̲,TIUͩ֩mv3Ma*璥?4eb}[Ēw,N&rY kd"&|hF[?`b[q3njnt# v{/~-ǥ#3r=q׭\g8'6/^ѧC춻س#%tq?x D85Thl3îozap3H<fW~noɜU0[ߏ~QJWgg,&QZgɼ6̅OjU@DO5]bĦf>,τah|D2*kXDP:rKT8(] Ȫ*O*c}s8 /^?ݧ Μ|~U 0M4yqZem)`ڗU-bcl;$3jf~*5w/s#Eh ~2찓`7`E1 WT,JqzڰJ 7[=o:;qde{bW:f︥G)oz;9<39QdW`7ex LJGP; u_gQL{?xE9T 7Wr^<*][0/ey4qb {h7Wbѿ|#6밠e#;`x΄X#* "m:Cm?ˉ#1J[%*./S\i-qAG-˻ωzOyПNq}!YqyVrXQ?3udAyJw8b ~ET;Éۃ<S-^=>2uDJ"DәX 9#9{U@ľ8{N^hj{7qJܼFga|lum'up}1&l@a%`l'eĵb Ȕ*C)T'OGPY)Wgy Tf>nc .xy[_'_4EQb5?aoFd|8b|% fk%KT\{f,:(Ng\Pg-}* Z'9Q!o1sa(0MSRVo[2 :ԭFLU)U,oQn4 Wp}!rU|;KʗYIx*0, %i";\p`t-.Zh:;sA%^Kw4 ]7 d[B"mW`gW8tSGG֗ALmv?x ȎIa15;_cLa0Jyv/UGL WG,qPiʟa noBEl)C7$) (wY΢_x(_0Ut8h0X^I|]jus N43:~ CմTһU/2Kٕ8%fTvL1ƣ!gm6LL,VV_׊Z/K]dcM&P:f\(Vbצ:VPa ǐeUY ө"pg$Td)e^א]$z nVhŎ#y2]]OSxߎJJO}g1M#,}',y|ђS`JBRk/ 6wk@X𦵽N}oH|W&˙xIQ-6t̞ڷ_}vON1-[X#mfp~m_'!n\TW҃o_9P(_6' bL^P4 W Y4ȋW{,"@|`_SԂ҄`INIkFޟ`~uj}%%/9 d8g ea}~o9ey AZ*EFM %auAcZiN!nHJZ QR=\ַǷz}G4Ӈ$g {0v"Cwt(#;)I=,wr]JK 5O̔bZpjyY %-9q ,]N%:~U^ G41`22?InX=d"F^nuӧ0v~?%%fDL{AYDdqx+Eiw~.Ia=^u&tR bW'gY҅S*)1ϋW YT^jXpu? "D:6)yS䃔SK>qHaW)>a1Nܛ,roREJס0 !T5aY/scU\iov{ 7bBz~s-5#0tIz{ {`:a7*M70|? é;B;7V;~"MrCGv{cӿ"*{c||$鸼7g~B.__'N{e)߳~pWT_O Tшe  T-Wr JY0wOR,,eQW/u^KClUlш(2}G3Sl}urjs$_I3Yj6UHҾ)IP8BU rD0'X3F n#pHA(o%EgTݪ^%,'Xͮ@*~5~idAhtnkC!L2 7 qIO!ӂ 9Nt|ֱ,\osF5bHx7}0j<Y%!餀M9^;07hi0}_ob_e:E^~>zm<4^EPhY4ZǼ8F^G.abA" DJ}>0CZLzs+-{\J,Q901,6c\Iu,!" TYb~Ն)Va-j!3OZ|,w\48?:1&Nˊ* ?M5՜fğʼ]jǬ@12^} ~7Q*Nd[C$0:$78AY[*eDNÓŷ 8?S0Fbat |qG`($ż {{:dM2,cհ3\}b8x[gLO ;Ҍxw#Ƹǣ$Wf&q(5ȳzPg * yTBg<9(Q%ǫ_!hz@{`aiZ`Ș rtF?OGl@ ڂ0CVėZ0FbM%'A)v+ Gbv6:91YB ?,s> Y/a"(jaJBzٿc9L[Cjv=-7W&W ) ʉ#%g9__pS"BJn1O X* Jܩ1~*A";iI ,GNńPU|YV^ek{kb;ru eC-7/(pbVDcvF|MF/F?iR'Ǧɛ<+|נOE֕X="s$$npcrc"~5>bLCa<ּ̈́*]mGKc q#0y*,"w7f*h#]Y(Ds29bvh&Mi 4~iYJ.Qھ뫈4rQb59 h7oˏ?`^q:.#q_&ĥ Tsc"aTLs^rʾJV@0'oU٩]DZEDO Sk0At ?;)CN,1dQcx-db>z}aS;$ pv&EC>Ta\^d8, Z7+{AOPuwKA^~ p1s/=>Qqi??hcUGQtс"6K"S}X̣z.nRֽ"\F}CYEREddy{!e#2KBJ~,3)@d&PFw&20nzϩUMvo <萳8sg8|9$"xbcJ-w^0B<9 -Gƥj1#qq_WȌbK;XSzykU2{to HѢEf($P(MG#Iq<֛TVֲ]_L# NYe0[[or ~zGs9 Z:",S@U PafrDE^ˁFo^0v_Y<O}v<˳o\x=]9X eAEzX2aKTw@E:V x5kHY@*'OK8朑^OX7*L 0kUN 1)D9ZďY>Ehe@Z{?f~13&v`ss|o=3߳=*#u1B"r#K%6N~y|74jX7t+g様s7{yc~yZFqZ??%)O>)'*׃՛7qq>=+UMO?Z.b~FVDc5ؿ;#f=&_[ao viH{M$6hv;cGatQd_*DvcxDg8XĨЩOe">|Q93Z'dg4es3% UPɘU}k2U?@WR՛F-~>aEhQ0}_:5{<UGdX*[NifYY%6VQLKo,0M~,TLiM|63ڋkfj]\8(翧6+jXC,[Ey/f2gxc~}Jm. *0bkQ`u}*o?z=ν?vgaf2,Yl96dAemJ\F*~.|gEnr02nPAބ)CgSBF(A^6ad%āleuH+uqy*h2S VD`1_e&׉|5wһ]OLW'>ǿ IlAr<=3czDh|NZ80L,Z6fŒRW?0ag+P}+&?Y%S[ƆWe [P4b0Neۨd LʏXG!&U1{;&ѷGy #^28 z >OGX^_IJX-\nŵ%s7?z+6.F IDAT c”affӫbL096oBl,>SU/eizE&C#,N7tcNI0UF+üf`=TĭMe.Q`x L Vq8D'Wq>fi}ղ1,ПZbƉM>Eȕ_[y;b_,ߟX{w4rO>A6ةu}p'hhm!SfЂ_OpG&aX4XN]0OdxuR6a"# #U"5'nBvƆ]ՂRѴbZO]^H+!se*w]ȐҾ*jߜ_0͆V%XeD"9;~yF{RWFmD%f*W~_~W7kT0m1xV~ ##Th!zUW֋l #x2!rɂV wٕq{v^"?1%3Pl8pl5grJqqmiLc$_#_wlnLM3EZ !uQO>E@1~~CVItb ?X8U7oEFԑ̃Lŕ/p }.J29vԢ*ә-]e~*48-O ) ˇLL5ln2+JFg!5\հ^H/dn&Xj\Huq|zmxU"fRdx&SH٤F2*fyJũ4Vtdn*ş S%S,ӊݓ؟z%]cm|$@9ygZ),KCW6Q(Q]fQbq9d%- +ӯ2,TDsVDDUHqeUŵE.T϶^ٍ78z+ETM %N{) )W\e U%EDxk|_tOfGR w~ezub0[>*e4Bo!W8ykdZ*S#۠:u@Gڤ)( %ǎuX9f>IFX/~6ط2cu}“`L1vmT̷n/ӈ[$hq#N}^2sᖭNO?}lV_GtUsh|w߽Ks n FFwY&۟Lz̯nR#eggEpsrĪ2yms0y" a. Ц/o%&)ME3'"CLrN 3=aHa&.vI,?SCVG}sqraSfg2 TtM?3liQ_fչ{)Wa}kw{wJ'.*]njEL'0HsK2}Rs_oa( };UaNs:Lda=$Ϊ$U ձCF-jX/CF6 ٹ ,Y>u~t(.2fŎHͩ, s@$ orxllJEI[IrR ] hXXo7=qYE*-efK,cO j|u:PUZ0=ŕ$r&чm'~bZ2e{bxvC"d1/7zCTvgU26Z)Y5=CЃOjѳ`%&Z߉k} 2iwGOٍI"71 AXg8u%OƨFm6L6Pi~{$Ӷ= &#c\`ddۜ%өA3 CJf|ƴ?0K ѲlQJEWZDXIv.wq>)V2!1L+;Z2Q!D#͏,# !e S& YLR^qh+-agCߌǓP"U`yu.|-~Oجަ؍i) M` f2Sx"9<<M0FG^6rg(*RR0Pcr0м~;UІAڏ[x;s+t{Brg8Зby 1tu;Y1 0@bL ؂OxH& G'jo<697oG{uw;[YWVd!;C?$aĉFB΀ r Y?T<6-iBxO}m Z9G '>0EYiv/T 0R;EyuޞO;&F(cys)QCeͅ'UYXGKT8_#(4`R!/0LJ,/kye|-~{lVKFk/.ҳFu:%=¤.bC\0 ^j.~a#*ei! μ!LdJ;=CR{iJ3wo G=)ñ= HJθ ~ns7 tj&eeiY;/6~`x2ub_<ѯC^ RVսY>حQG<@{h)=k;C8 v9A>3=$!Y x,%=%3 p%BskF0V5G}&fubEDqpTUn7FQl c^O(x CTE3Jķo_s:8Ed ne"LGfac"ܗ"̔}q :Fal{d[F3*0#1%5_C9L`m S=#N|BJS~T5ǐ#Lc ߴvC)1F1g_1nXȤ/:m M'%X{VIOYً7Zo׿2!e6\Wx ՊU$n\/J3Pn#~tkIky.uEl>_?KnpOPB[TuM1$ԻcO?jMy{baLY?S%k$r%0[YY_-|)2ۓݷ=YD!Y97rAni&E??$>}?H| ٸMnHM< e;m˄9F"ՔC]Z)so~x_,/oGuhtQ {01}vD7_Λ@.?(9b{i*K^H,֠ d9R:ѬxX5o9ry@fF%7TT_uHsJ:>cU =ĪU=W8:2QPSŨZ kNd6 /]߻Ni(vO4dO"?uZnd#>3hL8ѯ#D_Y4 ~E븲Vi~ml2ӇS["G[yjB890̹_rDNl# aS3㗸$t,*F AғLun?X&" Z9kڤhƃRRV#z8PJ&t$ɧ#_7}dxJ+Ź _fȡW9 #!ɉDkpNi$hc5F#:̸ԑ˨T.?1#3) mtvG܄#wZQpD|0/C>͘RņUgς aL^c6UR"S kDqeɟ7I `Gp2;_ZcKLFL.I:#ίMo̘V Lc(lӦr0|jԲb_h2ZAoǛCOހy <0'c\sWf1S҃oj,t2ʮ/]`.Hmy v?7穆,%7gHA& R3#55/P=FT>;<ӟf#\cn[J0"lMvd0=kFf#L&qvG $Oy@PR`A4 apFbJ'KP&i 8~ ~k45d¦QV,z96>N~e@&(=JAE{7>^1&l$IO6`8 oE;)8hmW@lC;A<0!``0tc|>6,枮f# +} %Tp~x*U\==gv.a@55!|ӃMlޅ6}9t?TÄui.,J0:rd2esm=!|O" ^u/)U#)bNq%,)L dƵ(Q%TQCiQ&~7 {y7~>P%oniL>,7Ą1Hr:!3fzf`Ydkݓ+ y`BkW/Z91w:iyIZ$U3"|-qĬt9e|231s JĆAbV -Um7=]'ztL.!S-U3{17gbs ltXX)oF"$_ïKEjpcAzfx㈤W>Gڣ ?ؓwYWwavq-:u]iX\ʔx[1gј|F铤 ?;}]3>߶VՍ8r>ICjsBJ{>ֳ+caS)f2U2|L92sovP)scw3>a=5|Pw4V0y0N0:Q*yQ29ƾʓL2=q+컟dG Jڑ0!s2Fe(e|.gyzoNf})}#Kghfk";%<|JQ;C>gOpK]]v`<($R5 C1`+yzf7wFY0U /bIHB.S¨2E XwבKs~td3Ȫ A0Ye3&)If9/-YȢf:nEly,T<+윖b%\ hmfffR&qu] rj*OXou"nUs@(i0SLץ!с5}bUc-%sYiXLZKWjVcKFo2fLMHޫVLv$#X^gZDEtp.od)vh1boV_ht# aC;we(ӿ"7#/! '84xYY3g+2s7ߺ2CWWYo|s6GxF Z%Op]r'MS04kXɕ5/0IAš^Jf8cum|&DFe*Db<Tᱝo1QdʚG-㾸Pbyut,J}Yoɒ]d~}31y'_ 11`ðKH-%J")Q_!H.㞙qNUxr|b#&D\_͒0 _rL15{ s#= Č\ ̫\p(YsSn.M@j5;VPuM_ ]AׇzwN*O,c 2F'a(90f,lBޭL7D|o*cyg *) .|ZďDIO6 xjLuh3#GCt|*.7EsCʍ+*gJ1|g`Eչ(NxQZVQz L=:T!IrZwD_466xM#KQW Hk Kjc%<8Nm-kZJkۭ{Lj"eỚ75n:7]JְYaP&A$cf)`Q30{T7Y >MI\Y.,8tF#rb0 x'r xf .ڵ(e5{vw<˧GCӳdbuGH|;K4 ؝M IDATڃ<11Frk|baKkVb'FYŹ˔4Vs5{" аQ&pjsђҢa1 ubfqµױKk>vƞhiW#LeaBWZ|ͤy0`]r2˱><Yg$d%gZO?]ld&V!x{% 3Pܨ$FisFJ2޶cuŵv|ZTSQ A[G}_ױh28ї00G"lFu{`+1vk{={?ٷf-Bεtq:A2 zSI/>0$9>" Ӗ<%lv;0Η 0>zTUX\$Z}l7RTaxm0kNI*6#xs(m_Y>a«CU ,0/%[xMr;N\_K$mVII1zAdj*z&3ga@y-k:59+ X"D9Fa~4I5K:F"i3l4ZoȂ&c};YLa#(%HovRH&aÃv|8,Τ}dccJHG+7c7AYWIoh (M)ak#&yk8Lu.#L3)A% y{CF42n@˭~}it2զL46”\THl 1_ 1M@+^̅A|UT RddӞMrifu,/b+aT'un>2$=X|dwк()3-A8 e\[3 Xcda.HTRٕWIt)WV6i h7;]: [(?@5GGEM-MFmW*{B{Fo 1৮wGDFgdGgzN޽6!uLP oVy;2yvVWsIkMVit`42;Y9+6S= >M4џtÈV!beQjVx{OÀQ!9RҾ(~vӊk4:Cy|l ''crht6jg8DJ<V_:&Pu|qNb; \ #L b֐\eT.ڐ:İlV2.F[BɖWSYXRͥ *: {Bne2D0*1#er&x:|&\qo)P-7,dE2$ƺVE*=XJU;JUjtg<*r|p/Irb-/UR]@AIJb:qhij Z( m-C_V6CԖ xH(:ht![Frܩwa<F\"-2 ̐䐬B ҞT@^;4dƬ%{NYdQv|Liv덇_K¢amXƝ0l!aYD+D=gyNE ʣdYEO&rSO3Nkwg~f ad!Xj죩..сyG|OA%l\XM"ue'ۜ$5ӹdGtiy53_hXQ̲hPk~Gu()>΋ngE௖W87rоiW- c=b4."DVHcd ,/VF%86Xh ťy<V7 :٤Zi7UCj q~K.lyp[%zr (bc3f=9w}7yEmÆW^çOwR2L)vik41G(A(V3?woT7.)ⰮS/y`HR3δ(3#FOޓaJZ;YA;յPs(q:EY 1,/N {xZ&sfހ!1ܷ.E7pv}-dۉp2Ovo i~/ۀ_h?mZ}eV*jU&ltGN*D+m´jKjE"^_k[}C2i{ zIz`_ik]8Lkk᭖lwVY"ٰ ttan,=i4y_>{ -+ 1k8 j>4:}섨hb%%d1|r8NgM"C`:?3y-y+8_ pBZy Ɵ&-~sn?D46t:Ƥ@L]V5LQ FV C+GIpS d579Ml-ъip;?W|gk&Z&WTPJP2WN"AO?[!I(E3~ ~JR|_0-zۭv0gbqF_>>8KV׶7ةCZw_\t8RnJaw>هӏh%0_#KI" f敀LxK-K Ⓐ<3?E8%LwSydEFD>H}5ٽy!_ j՞J0@(ZW`u3K$Oş4cWlN*`tn./¿i UHd,o{XWh~|n%n ~VJ eO,zUpW*A7kaLJ)i6 nsv('d.l~UqbsgŖ¸Ȕ.?΢Ԡ&@1<v]tJZ8Tx?و8]9Ex8,Ʉ!Zz~^x'm6&:{_<>e2錬̋aEpc]m6I֔C"ٲl&τz(WOa ζ(&Ċ0 ,1`8Gsm;4SC?a*J0x%-tP 'x~Tpvtl'i s P 0tW!|('ׯr(͎i!5]| W#sj1Axt < TM?&*0|3̨7W)Ɉc-NeGAA?r4(d:fGbbD >\1ɫp/,RS?`|49S|d}2\o5"Ҝ6ܕ`|%C{ !5{&v0b. vmVG!sW՚7843លnV\FUM80]Y^~ ?cvP|).4{^[ Tv0-1Hp6P{߈62Zgx+62;:&ȼu'E|?tՃ"ezmua}=wQq\N]rﯷ@+\(h VPG@ͅG1`oph]%tt?9W˗ptxn~v!\c%ue/ѯVЯКĄfmv冨+S&qzsK٨cd=cјB|NC C9TR9.\afyz8|gϳwp\B~f>*ˣFf hzRj}0FXML5*ZEʉa4̥KTrG$әlZj +#tE8;:[Wx~^ <*kLnf~Kn{fi5<]LmQIiUK N|V)3e0b@.F,WEz!]u}_(ZNT&"LúЭc2,S|XL0&7 m0/Or| < |z;!qѧfuBAKX͆R=8dC ~,F lk{c8cxl6TKi~/ϗf4=M@:TD5Z"Jv(=FIpQ?9.=EU[hBh (B B{f{!w[|.ʐgkB~?6M[e}n*B!F~^˫y6]L'T7gy}fVWxd03b.~y-/_U)(UZG:؏ 1 WՅ:DtIÇRg_d2?K\Y"%d%TNRG"Gkmd%DžB~@JAqAJu5Eo_daĝ&bJeo2aqT&ia0VV2b ?S+ޡ"ScjS`MCc0ӌ=H^<)gogs{cXOɋFwH=[3ivދ}>}Gm` ~>#Fw^`)r'gF*'xK`?pg#:]ϝ,_ka?m]`2/Sv|+p:Mhf=RpϤ's<{ū[}Z}~$(ot=Y(9}.]c?(p[۾I31m<Aň18а3VfSE yNrCDŽ !}ї@ίzơdf3^(*ȡPMP M+F(`yu!`__5>Aeʥ&WDgNRa%K/M6NX,Kbfj13%cV?of4um6RvJ; N࠴c2to!;Vlr 3yE+. ( X*N9",.m }Ƈy)Y>i@Ҁ}8Η[tC6Ev"< m71LA/~CXv+tًp|xz'{pO,$5lmϑt ) ca "lvzȻb]0UᎀX0Q_1̎Ȃ]^DdyƷ*5:}MrX93[FmWn)#8ýו ?Y)&**7AwT[=q|ܭVIp~׫ b@&h3%T)+i."KYT*#G*) qW1d4U%Svn)t+{4q'C7 L+EyGO {=<}&GG5U;ه^5LNv]&r!5`pI<1O !!Ky2B$4MZDl{1[rdA/^4ď4]2DGwn\rL..W0 J#w1XTXlr.eS_u+0f;XMAQ _Vt=9Y?#⃈lHWJ*<y1"e ,y #K ? K SIRg=Zȇܠ7-a ]q Xk9YPD'ɬ_U bBA0cn={cX~\W0y;>V>N?j;{N޿rMeS}`i*i(~wLbI_} >#2 .iX@j4`=eZFɾ(#d7F JV3} ε.N!.[~%[O?=*_i2 fn˫S^Ԛ0y&Huăd6ak5H?Fw8nx ?gҔ:~21r 1yqكE>w] %Fw]Xηc-Ȓlaka))b_ќߘGcnOv;z(C;cUJYZ.*%l0HK1>x3K;po O-]Ǟ'42:1 3hXo.; ϭwE?5 -bjڰIX>+0wޗL ||gUX-.b" N +7*1|o=ܭP Yp>n|m:5nlfvT 1K/x6="Y0Zu+Mf|2C2S] s(@LX0 Neg=kM 3 9j wk1xSwE6;a୬ Mm4./ 3*Ŗۼ׭3oq}YXa;et[MNz`u qxx!pp8gWfC˾"#JVTaJt0J糠9Ey94 xpw"C z7t >CL:FϣL#*D*PQOÃ!S /e-ʧ; ת g)n$}Hl9.(+H"h|Ķ1''vȺǀb >Z#0[X|K[Ð1HiEj&zvǩ-Œ.|=Rz'+WcQ rx9L'fC2`_D@cBzf(KAQ&ϟ;b< S0[ gab&!MrW;j8Z*4 TJ2!G4j)cL񻀊i]3.Q`%x0IWR/aZ03 5` H g7}'Bg~`Gu;ٖMca3[Ldةݛ&J`]Aı32ZcةloXivXF:U^u h&;㽫oEH)Y4miolB`yctրu0ΆL6Be`_J 9H>>gIRK ?gOj,؏*2]Y}E?I'0~eMN h"AJo79oe)R^2HZɚ{d8l>dZJ1Sh>ҥ'Ex.ۣ:K5|˩v#^%S4vz,)Ta^k>2F^-#3Mga;Pɔ]L|gmLF .UX3tc4Zk˯O?z.,&&H\hVuwϦQ)RRH~|oCTzӴb.<ڇ wy٘qN&U(+rd:P^& cW~:U^?  x{c-]u~HM~ W>c1xnK>tuj]T?*2[}K{{0}4´{dзl2HIjw}ꋼfҕMW~oϏ0a&Eڽ\ 뺈ޔf"v?AɔejdXz X]Y櫧O?]Զ#npY7ʘMObN_zu 2B{Zfт,NӏVOʼYn+48~ V]^gZxBW|"dɨldw0 ܯnDY"Oxc d~M7k'z;5u. ʖh0D-h[ %q`ȷ"ZnEAk􈱈5G7mV"`fG=:ħzRCɤM`XmѴLn ]). h ɧld4;2סkknŚ &Y|!f}E0 2]nM83A޿Iȡ|Kj"j W8f+ ]uA4 t wMO`}3=qjGy\ebj/>Zf\//NR22wbw1cK@dEf ;7 )LɓLi@U/.RD̚c0QYJpg0Lf),*ӤҺd>nj>覶0>@d ZW9L߿E|Vap= 1/hDJL"p)v,04/ψ[:FT]2r-dט<~L\ |,줰-t/=_.O'' '0h蜖>LgG7^W aSTVdWY CwћdM Yhp.%kC֖J')%_B7 @хy<:3;B ˝ZVWEdƻ_bCrT{B )ϗO6:BJB˫V+)|s`9c=8G.MMuX*[IVj}>>}\X?:!65M,^w ̧i&5MH=`%5RFt8d5F[F"0Z0 ^q) E_>{~VPl"NoRX;e6A+ף[ʐ6L>"/K Xz(%,) '`u5X.y^&%k.Opw`5N *5,,ޘI/,`_ Sipw4L߇QqvK7Ok|OGGdyճTw"Ux_a2 AAmz{0;}ߓ(9J Βtg6:-MK îǨ0_C̰a}AZqa0aZ?⌆49P PC|'jF'1 F;& 8%'^ X^erwwܼsuzj-Ez>C0xFc`냪lQvJ0q3Y[ q/Lfof{bݽǕ)>NKNla dsvsHI0'0mFl俏nM05L2G{0?~D름7".n%1 N jDH#̍0TZSgKF㋧ϖ/ +̽_zn"W@3M'8׆K|:gD+gZl:?H"?*U碶o)o24O"ԪRû 6Zϙs1n7Zerqz9Z3~׶y53C77;;;P)*B)kƞ_>})jv*$oAG n dҵr̳޾ն@d]ODA׋ShLx!l{?6kc5M*4din/鱣 鼙4:G#4a7a_i32w66&NMPK 0``ކ;0bs ~>Y}lf QRL7x:d su&rA+Q[oNEH%}~Հ N H_E?Knd8PF݂$rט?\K,JCc(Yшճ耒.-S k|IY=fuU; 6?iW^c_ںfqy ՒS_[dH {ܯ^ i,:>! qpTF\uDŰ]o @k82%8#֠.j~԰К)wmFy0x8DLEk0qO~ o=,&idak&[}2^nnN?LL;E%.)k|޲wǐtTkM8S&U_n@Pی5cGĕj .&,X}<YvvpY\ۆՕ 7VmkJI4(S8Na݅sN͞E;eu~kBR֑CQJ+#,- "Ӟ D1*s Uc 7449Y(MxIJ}%P޲L`Fc(|HiEx4Gc<(_r|4&]a ]SkV14ah/flʀ(VE)B-a̖oC+Q0a, sOjz gNNNL/#;f̾am$UeGrqzw,!YFuy >ldmn%,@k d0|N-R݅AP: o`npqU8<(*{L?/wA9:FDU'ht.Ph5;2D`Iӣ./%{0?$p&T%!ΑahX Y|ͳ[k=\ߢc_|wȩ:_ƭ(rlC=.SUa INm3gR2UEGIJ]lBH$D4_$0cvgN)Ιa`ipu~4r_l#α H=r >0y4z%).Э|38=U JI3+D Guj+u HHz1̏{):\q ~EJuPvLO$+6C,l4[zЯl {d.劧$ Fpu 0E?F/y)7btoq8idႸZGz+=(`ढB#G"1bsyTV7f/a#f;u+fa{.plzBk,p|,52`2A) 5m CFc!\_IցA:'ou<a:|K4z݄_ tj]@%cP tKOeA^Ѵ=Voo no,j.gV[ n (cl?# sh8JvlfXfC(MOjI\hpkALz3 sfL:h.dͶL?wU<( FP86TR*nr)xBmL:ϫap2Kch=>ֶ|4?ڕޣK|T{!Zg|.Ng;RbB8Md+;JIw:?"#a7wKM1?Jo0h 54ec!2(l!鷸4gdci} RQZmo{#{FQUF-OIN& M*eJnB(F < U/i'Mb۟Vp9<2`~lP`#[]%dF;/"jv+E<o?Zݙ!LOț;]քRXCp"ITDV*"|v.@5HRS_͟_<̓u2X~oO/7 ::mU2dww7YpV vU٥2¶zVg vUT(PTkA+%;fqIENDB`lmms-1.1.3/plugins/waveshaper/waveshaper.cpp000066400000000000000000000066401247673406200212040ustar00rootroot00000000000000/* * waveshaper.cpp - waveshaper effect-plugin * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2009 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "waveshaper.h" #include "lmms_math.h" #include "embed.cpp" #include "interpolation.h" extern "C" { Plugin::Descriptor PLUGIN_EXPORT waveshaper_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "Waveshaper Effect", QT_TRANSLATE_NOOP( "pluginBrowser", "plugin for waveshaping" ), "Vesa Kivimäki ", 0x0100, Plugin::Effect, new PluginPixmapLoader( "logo" ), NULL, NULL } ; } waveShaperEffect::waveShaperEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ) : Effect( &waveshaper_plugin_descriptor, _parent, _key ), m_wsControls( this ) { } waveShaperEffect::~waveShaperEffect() { } bool waveShaperEffect::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ) { if( !isEnabled() || !isRunning () ) { return( false ); } // variables for effect int i = 0; double out_sum = 0.0; const float d = dryLevel(); const float w = wetLevel(); const float input = m_wsControls.m_inputModel.value(); const float output = m_wsControls.m_outputModel.value(); const float * samples = m_wsControls.m_wavegraphModel.samples(); const bool clip = m_wsControls.m_clipModel.value(); for( fpp_t f = 0; f < _frames; ++f ) { float s[2] = { _buf[f][0], _buf[f][1] }; // apply input gain s[0] *= input; s[1] *= input; // clip if clip enabled if( clip ) { s[0] = qBound( -1.0f, s[0], 1.0f ); s[1] = qBound( -1.0f, s[1], 1.0f ); } // start effect for( i=0; i <= 1; ++i ) { const int lookup = static_cast( qAbs( s[i] ) * 200.0f ); const float frac = fraction( qAbs( s[i] ) * 200.0f ); const float posneg = s[i] < 0 ? -1.0f : 1.0f; if( lookup < 1 ) { s[i] = frac * samples[0] * posneg; } else if( lookup < 200 ) { s[i] = linearInterpolate( samples[ lookup - 1 ], samples[ lookup ], frac ) * posneg; } else { s[i] *= samples[199]; } } // apply output gain s[0] *= output; s[1] *= output; out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1]; // mix wet/dry signals _buf[f][0] = d * _buf[f][0] + w * s[0]; _buf[f][1] = d * _buf[f][1] + w * s[1]; } checkGate( out_sum / _frames ); return( isRunning() ); } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) { return( new waveShaperEffect( _parent, static_cast( _data ) ) ); } } lmms-1.1.3/plugins/waveshaper/waveshaper.h000066400000000000000000000027541247673406200206530ustar00rootroot00000000000000/* * waveshaper.h - waveshaper effect-plugin * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _WAVESHAPER_H #define _WAVESHAPER_H #include "Effect.h" #include "waveshaper_controls.h" class waveShaperEffect : public Effect { public: waveShaperEffect( Model * _parent, const Descriptor::SubPluginFeatures::Key * _key ); virtual ~waveShaperEffect(); virtual bool processAudioBuffer( sampleFrame * _buf, const fpp_t _frames ); virtual EffectControls * controls() { return( &m_wsControls ); } private: waveShaperControls m_wsControls; friend class waveShaperControls; } ; #endif lmms-1.1.3/plugins/waveshaper/waveshaper_control_dialog.cpp000066400000000000000000000115051247673406200242570ustar00rootroot00000000000000/* * waveshaper_control_dialog.cpp - control-dialog for waveshaper-effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "waveshaper_control_dialog.h" #include "waveshaper_controls.h" #include "embed.h" #include "graph.h" #include "pixmap_button.h" #include "tooltip.h" #include "led_checkbox.h" waveShaperControlDialog::waveShaperControlDialog( waveShaperControls * _controls ) : EffectControlDialog( _controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); setFixedSize( 224, 300 ); graph * waveGraph = new graph( this, graph::LinearNonCyclicStyle, 204, 205 ); waveGraph -> move( 10, 32 ); waveGraph -> setModel( &_controls -> m_wavegraphModel ); waveGraph -> setAutoFillBackground( true ); pal = QPalette(); pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap("wavegraph") ); waveGraph->setPalette( pal ); waveGraph->setGraphColor( QColor( 170, 255, 255 ) ); waveGraph -> setMaximumSize( 204, 205 ); knob * inputKnob = new knob( knobBright_26, this); inputKnob -> setVolumeKnob( true ); inputKnob -> setVolumeRatio( 1.0 ); inputKnob -> move( 14, 251 ); inputKnob->setModel( &_controls->m_inputModel ); inputKnob->setLabel( tr( "INPUT" ) ); inputKnob->setHintText( tr( "Input gain:" ) + " ", "" ); knob * outputKnob = new knob( knobBright_26, this ); outputKnob -> setVolumeKnob( true ); outputKnob -> setVolumeRatio( 1.0 ); outputKnob -> move( 54, 251 ); outputKnob->setModel( &_controls->m_outputModel ); outputKnob->setLabel( tr( "OUTPUT" ) ); outputKnob->setHintText( tr( "Output gain:" ) + " ", "" ); pixmapButton * resetButton = new pixmapButton( this, tr("Reset waveform") ); resetButton -> move( 164, 251 ); resetButton -> resize( 12, 48 ); resetButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "reset_active" ) ); resetButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "reset_inactive" ) ); toolTip::add( resetButton, tr( "Click here to reset the wavegraph back to default" ) ); pixmapButton * smoothButton = new pixmapButton( this, tr("Smooth waveform") ); smoothButton -> move( 164, 267 ); smoothButton -> resize( 12, 48 ); smoothButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_active" ) ); smoothButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_inactive" ) ); toolTip::add( smoothButton, tr( "Click here to apply smoothing to wavegraph" ) ); pixmapButton * addOneButton = new pixmapButton( this, tr("Increase graph amplitude by 1dB") ); addOneButton -> move( 133, 251 ); addOneButton -> resize( 12, 29 ); addOneButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "add1_active" ) ); addOneButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "add1_inactive" ) ); toolTip::add( addOneButton, tr( "Click here to increase wavegraph amplitude by 1dB" ) ); pixmapButton * subOneButton = new pixmapButton( this, tr("Decrease graph amplitude by 1dB") ); subOneButton -> move( 133, 267 ); subOneButton -> resize( 12, 29 ); subOneButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sub1_active" ) ); subOneButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sub1_inactive" ) ); toolTip::add( subOneButton, tr( "Click here to decrease wavegraph amplitude by 1dB" ) ); ledCheckBox * clipInputToggle = new ledCheckBox( "Clip input", this, tr( "Clip input" ), ledCheckBox::Green ); clipInputToggle -> move( 133, 283 ); clipInputToggle -> setModel( &_controls -> m_clipModel ); toolTip::add( clipInputToggle, tr( "Clip input signal to 0dB" ) ); connect( resetButton, SIGNAL (clicked () ), _controls, SLOT ( resetClicked() ) ); connect( smoothButton, SIGNAL (clicked () ), _controls, SLOT ( smoothClicked() ) ); connect( addOneButton, SIGNAL( clicked() ), _controls, SLOT( addOneClicked() ) ); connect( subOneButton, SIGNAL( clicked() ), _controls, SLOT( subOneClicked() ) ); } #include "moc_waveshaper_control_dialog.cxx" lmms-1.1.3/plugins/waveshaper/waveshaper_control_dialog.h000066400000000000000000000025241247673406200237250ustar00rootroot00000000000000/* * waveshaper_control_dialog.h - control-dialog for waveshaper-effect * * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2006-2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef _WAVESHAPER_CONTROL_DIALOG_H #define _WAVESHAPER_CONTROL_DIALOG_H #include "EffectControlDialog.h" class waveShaperControls; class waveShaperControlDialog : public EffectControlDialog { Q_OBJECT public: waveShaperControlDialog( waveShaperControls * _controls ); virtual ~waveShaperControlDialog() { } private: } ; #endif lmms-1.1.3/plugins/waveshaper/waveshaper_controls.cpp000066400000000000000000000070531247673406200231260ustar00rootroot00000000000000/* * waveshaper_controls.cpp - controls for waveshaper-effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "waveshaper_controls.h" #include "waveshaper.h" #include "base64.h" #include "graph.h" #include "engine.h" #include "song.h" #define onedB 1.1220184543019633f waveShaperControls::waveShaperControls( waveShaperEffect * _eff ) : EffectControls( _eff ), m_effect( _eff ), m_inputModel( 1.0f, 0.0f, 5.0f, 0.01f, this, tr( "Input gain" ) ), m_outputModel( 1.0f, 0.0f, 5.0f, 0.01f, this, tr( "Output gain" ) ), m_wavegraphModel( 0.0f, 1.0f, 200, this ), m_clipModel( false, this ) { connect( &m_wavegraphModel, SIGNAL( samplesChanged( int, int ) ), this, SLOT( samplesChanged( int, int ) ) ); setDefaultShape(); } void waveShaperControls::samplesChanged( int _begin, int _end) { engine::getSong()->setModified(); } void waveShaperControls::loadSettings( const QDomElement & _this ) { //load input, output knobs m_inputModel.loadSettings( _this, "inputGain" ); m_outputModel.loadSettings( _this, "outputGain" ); m_clipModel.loadSettings( _this, "clipInput" ); //load waveshape int size = 0; char * dst = 0; base64::decode( _this.attribute( "waveShape"), &dst, &size ); m_wavegraphModel.setSamples( (float*) dst ); delete[] dst; } void waveShaperControls::saveSettings( QDomDocument & _doc, QDomElement & _this ) { //save input, output knobs m_inputModel.saveSettings( _doc, _this, "inputGain" ); m_outputModel.saveSettings( _doc, _this, "outputGain" ); m_clipModel.saveSettings( _doc, _this, "clipInput" ); //save waveshape QString sampleString; base64::encode( (const char *)m_wavegraphModel.samples(), m_wavegraphModel.length() * sizeof(float), sampleString ); _this.setAttribute( "waveShape", sampleString ); } void waveShaperControls::setDefaultShape() { float shp [200] = { }; for ( int i = 0; i<200; i++) { shp[i] = ((float)i + 1.0f) / 200.0f; } m_wavegraphModel.setLength( 200 ); m_wavegraphModel.setSamples( (float*)&shp ); } void waveShaperControls::resetClicked() { setDefaultShape(); engine::getSong()->setModified(); } void waveShaperControls::smoothClicked() { m_wavegraphModel.smoothNonCyclic(); engine::getSong()->setModified(); } void waveShaperControls::addOneClicked() { for( int i=0; i<200; i++ ) { m_wavegraphModel.setSampleAt( i, qBound( 0.0f, m_wavegraphModel.samples()[i] * onedB, 1.0f ) ); } engine::getSong()->setModified(); } void waveShaperControls::subOneClicked() { for( int i=0; i<200; i++ ) { m_wavegraphModel.setSampleAt( i, qBound( 0.0f, m_wavegraphModel.samples()[i] / onedB, 1.0f ) ); } engine::getSong()->setModified(); } #include "moc_waveshaper_controls.cxx" lmms-1.1.3/plugins/waveshaper/waveshaper_controls.h000066400000000000000000000041121247673406200225640ustar00rootroot00000000000000/* * waveshaper_controls.h - controls for waveshaper-effect * * Copyright (c) 2014 Vesa Kivimäki * Copyright (c) 2008 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef WAVESHAPER_CONTROLS_H #define WAVESHAPER_CONTROLS_H #include "EffectControls.h" #include "waveshaper_control_dialog.h" #include "knob.h" #include "graph.h" class waveShaperEffect; class waveShaperControls : public EffectControls { Q_OBJECT public: waveShaperControls( waveShaperEffect * _eff ); virtual ~waveShaperControls() { } virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); inline virtual QString nodeName() const { return( "waveshapercontrols" ); } virtual void setDefaultShape(); virtual int controlCount() { return( 4 ); } virtual EffectControlDialog * createView() { return( new waveShaperControlDialog( this ) ); } private slots: void samplesChanged( int, int ); void resetClicked(); void smoothClicked(); void addOneClicked(); void subOneClicked(); private: waveShaperEffect * m_effect; FloatModel m_inputModel; FloatModel m_outputModel; graphModel m_wavegraphModel; BoolModel m_clipModel; friend class waveShaperControlDialog; friend class waveShaperEffect; } ; #endif lmms-1.1.3/plugins/zynaddsubfx/000077500000000000000000000000001247673406200165215ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/AUTHORS.txt000066400000000000000000000012651247673406200204130ustar00rootroot00000000000000Main author: Nasca Octavian Paul Developers: Mark McCurry Harald Hvaal Contributors: Gerald Folcher (legato, mono notes memory) Lars Luthman (zombie fix,jack midi, LASH support) Daniel Clemente (with a workaround of X11 repeated key bug) Emmanuel Saracco (fix for JACK output) Achim Settelmeier (QUERTZ keyboard layout for virtual keyboard) Jrmie Andri (AZERTY keyboard layout, Array index fix, OSS failsafe) Alexis Ballier (const char* <-> string mismatch, NULLMidi prototype fix) Tobias Doerffel (static-instance variables fix, missing include fix) James Morris (Memory leaks in FLTK GUI) lmms-1.1.3/plugins/zynaddsubfx/CMakeLists.txt000066400000000000000000000122101247673406200212550ustar00rootroot00000000000000INCLUDE(BuildPlugin) # definitions for ZynAddSubFX IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) ADD_DEFINITIONS(-DOS_LINUX) ELSE(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) ADD_DEFINITIONS(-DOS_WINDOWS) ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) # do not conflict with LMMS' Controller class ADD_DEFINITIONS(-DController=ZynController) # use asm optimizations when on x86 or x86_64 IF(LMMS_HOST_X86 OR LMMS_HOST_X86_64) ADD_DEFINITIONS(-DASM_F2I_YES) ENDIF(LMMS_HOST_X86 OR LMMS_HOST_X86_64) # build ZynAddSubFX with full optimizations SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-declarations") # link system-libraries when on win32 IF(LMMS_BUILD_WIN32) ADD_DEFINITIONS(-DPTW32_STATIC_LIB) ENDIF(LMMS_BUILD_WIN32) SET(FLTK_SKIP_OPENGL TRUE) SET(FLTK_SKIP_FORMS TRUE) SET(FLTK_SKIP_IMAGES TRUE) SET(FLTK_SKIP_MATH TRUE) IF(MINGW_PREFIX) SET(FLTK_SKIP_FLUID TRUE) ENDIF() FIND_PACKAGE(FLTK REQUIRED) IF(MINGW_PREFIX) SET(FLTK_FLUID_EXECUTABLE "${MINGW_PREFIX}/bin/fluid") ENDIF() IF(NOT EXISTS ${FLTK_FLUID_EXECUTABLE}) MESSAGE(FATAL_ERROR "Please install the fluid binary which is part of FLTK.") ENDIF() INCLUDE_DIRECTORIES("${FLTK_INCLUDE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" ${FFTW3F_INCLUDE_DIRS} "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_BINARY_DIR}") include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/zynaddsubfx/src/UI) ADD_DEFINITIONS(-DPLUGINVERSION) # removes exit confirmation dialogs etc. in MasterUI.fl add_subdirectory(zynaddsubfx/src/Nio) add_subdirectory(zynaddsubfx/src/UI) SET(zynaddsubfx_core_SRCS zynaddsubfx/src/DSP/AnalogFilter.cpp zynaddsubfx/src/DSP/FFTwrapper.cpp zynaddsubfx/src/DSP/Filter.cpp zynaddsubfx/src/DSP/FormantFilter.cpp zynaddsubfx/src/DSP/SVFilter.cpp zynaddsubfx/src/DSP/Unison.cpp zynaddsubfx/src/Effects/Alienwah.cpp zynaddsubfx/src/Effects/Chorus.cpp zynaddsubfx/src/Effects/Distorsion.cpp zynaddsubfx/src/Effects/DynamicFilter.cpp zynaddsubfx/src/Effects/Echo.cpp zynaddsubfx/src/Effects/Effect.cpp zynaddsubfx/src/Effects/EffectLFO.cpp zynaddsubfx/src/Effects/EffectMgr.cpp zynaddsubfx/src/Effects/EQ.cpp zynaddsubfx/src/Effects/Phaser.cpp zynaddsubfx/src/Effects/Reverb.cpp zynaddsubfx/src/Misc/Bank.cpp zynaddsubfx/src/Misc/Config.cpp zynaddsubfx/src/Misc/Dump.cpp zynaddsubfx/src/Misc/Master.cpp zynaddsubfx/src/Misc/Microtonal.cpp zynaddsubfx/src/Misc/Part.cpp zynaddsubfx/src/Misc/Util.cpp zynaddsubfx/src/Misc/QtXmlWrapper.cpp zynaddsubfx/src/Misc/Recorder.cpp zynaddsubfx/src/Misc/WavFile.cpp zynaddsubfx/src/Misc/WaveShapeSmps.cpp zynaddsubfx/src/Params/ADnoteParameters.cpp zynaddsubfx/src/Params/Controller.cpp zynaddsubfx/src/Params/EnvelopeParams.cpp zynaddsubfx/src/Params/FilterParams.cpp zynaddsubfx/src/Params/LFOParams.cpp zynaddsubfx/src/Params/PADnoteParameters.cpp zynaddsubfx/src/Params/Presets.cpp zynaddsubfx/src/Params/PresetsArray.cpp zynaddsubfx/src/Params/PresetsStore.cpp zynaddsubfx/src/Params/SUBnoteParameters.cpp zynaddsubfx/src/Synth/SynthNote.cpp zynaddsubfx/src/Synth/ADnote.cpp zynaddsubfx/src/Synth/Envelope.cpp zynaddsubfx/src/Synth/LFO.cpp zynaddsubfx/src/Synth/OscilGen.cpp zynaddsubfx/src/Synth/PADnote.cpp zynaddsubfx/src/Synth/Resonance.cpp zynaddsubfx/src/Synth/SUBnote.cpp ) ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS}) TARGET_LINK_LIBRARIES(ZynAddSubFxCore zynaddsubfx_nio ${FFTW3F_LIBRARIES} ${QT_LIBRARIES} -lz -lpthread) IF(LMMS_BUILD_WIN32) TARGET_LINK_LIBRARIES(ZynAddSubFxCore -lws2_32) INSTALL(TARGETS ZynAddSubFxCore RUNTIME DESTINATION "${PLUGIN_DIR}") ELSE(LMMS_BUILD_WIN32) INSTALL(TARGETS ZynAddSubFxCore LIBRARY DESTINATION "${PLUGIN_DIR}") ENDIF(LMMS_BUILD_WIN32) BUILD_PLUGIN(zynaddsubfx ZynAddSubFx.cpp ZynAddSubFx.h MOCFILES ZynAddSubFx.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") TARGET_LINK_LIBRARIES(zynaddsubfx ZynAddSubFxCore) IF(WIN32) SET(WINRC "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj") ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}" COMMAND "${WINDRES}" "-I\"${CMAKE_CURRENT_SOURCE_DIR}\"" "-o\"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj\"" "-i\"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc\"" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc") ENDIF(WIN32) SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}") SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) ADD_EXECUTABLE(RemoteZynAddSubFx RemoteZynAddSubFx.cpp "${WINRC}") INSTALL(TARGETS RemoteZynAddSubFx RUNTIME DESTINATION "${PLUGIN_DIR}") TARGET_LINK_LIBRARIES(RemoteZynAddSubFx zynaddsubfx_gui ZynAddSubFxCore ${FLTK_LIBRARIES} -lpthread ) # link Qt libraries when on win32 IF(LMMS_BUILD_WIN32) TARGET_LINK_LIBRARIES(RemoteZynAddSubFx ${QT_LIBRARIES}) ENDIF(LMMS_BUILD_WIN32) # FLTK needs X IF(LMMS_BUILD_LINUX) TARGET_LINK_LIBRARIES(RemoteZynAddSubFx -ldl) ENDIF(LMMS_BUILD_LINUX) IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET ZynAddSubFxCore POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/libZynAddSubFxCore.dll\"") ADD_CUSTOM_COMMAND(TARGET RemoteZynAddSubFx POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/RemoteZynAddSubFx.exe\"") ENDIF(LMMS_BUILD_WIN32) lmms-1.1.3/plugins/zynaddsubfx/COPYING000066400000000000000000000436141247673406200175640ustar00rootroot00000000000000 NOTE! The GPL below is copyrighted by the Free Software Foundation, but the instance of code that it refers to (the ZynAddSubFX application) is copyrighted by the authors (Nasca Octavian Paul and others) who actually wrote it. --------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. lmms-1.1.3/plugins/zynaddsubfx/ChangeLog000066400000000000000000002100621247673406200202740ustar00rootroot000000000000006 Mar 2002 -(dupamasa - in jur de ora 4) Mi-a venit ideea exact cum sa fac cand ma plimbam pe strada Pandurilor 7/8 Mar 2002 - Started to do diagrams 10 Mar 2002 - Started to write "voice" 11 Mar 2002 - Heard first sound 12 Mar 2002 - tested with 200 voices 16 Mar 2002 - made "Note" the main class - added vibratto - added glissando 20 Mar 2002 - started to write the Envelope class 21 Mar 2002 - Envelope written (almost) Volume envelope almost written 23 Mar 2002 - Scris relasenote(putin) Envelope-ul este si in dB "glissando" este inlocuit cu "Envelope" de frecventa started to write the LFO class 24 Mar 2002 - Corrected a bug that could crashed the synth (forgotten to disable the amp/freq envelopeenabled when killed it) 25 Mar 2002 - Started to write the Filter class (wrote only few lines) 27 Mar 2002 - Scris filtrul(putin), si FilterEnvelope 28 Mar 2002 - Adaugat la LFO si tipul "rampup" si "rampdown" Scris filterLFO si amplitudeLFO(termollo) redenumiti si aranjati parametrii Adaugat LFO delay Scris FilterEnvelope(corect) si FilterLFO(corect) 29 Mar 2002 - Adaugat RingModulation Adaugat FM/RM Amplitude si Frequency Envelope Corectat un bug minor la Envelope-ASRinit(); Adaugat FM 01 Apr 2002 - Corectat un bug care facea sa se auda paraituri la sunetele care incepeau co o faza!=0 Scris cativa dintre parametrii globali Envelop-ulire,LFO,Filter,.. 02 Apr 2002 - Curatat putin ADnote Adaugat VelocityScale la amplitudine, la FM si la Filtru Global 03 Apr 2002 - Aranjati toti parametrii ADnote in structuri 04 Apr 2002 - Mutati multi parametrii in ADnoteParameters Inceput sa scriu ADnoteParameters 05 Apr 2002 - Inceput sa scriu clase speciale pentru parametrii(midi) (LFO..) 06 Apr 2002 - Continuat sa scriu clasele speciale pentru parametrii Teoretic merge sinteza multitimbrala(Adica se poate aplea ADnote(canal,note,vel)) 07 Apr 2002 - Completat(aproape) transferul de parametri midi la cei reali 08 Apr 2002 - Added FM oscil at parameters and corrected a small FM bug 09 Apr 2002 - Inceput sa-l fac real-time 10 Apr 2002 - Merge la keyboard-ul MIDI, polifonic 27 Apr 2002 - Scris interfata la OSS, la latenta scazuta Corectat un bug care facea ca sa se execute calcule inutile, ceea ce facea ca polifonia maxima sa scada de 10 ori 29 Apr 2002 - Inceput sa scriu interfata midi(obiect) 30 Apr 2002 - Continuat putin interfata midi (dar nu am terminat) 02 Mai 2002 - Merge in timp real cu latenta scazuta, dar se mai auda niste "pacanaituri" 03 Mai 2002 - Inceput sa scriu Reverb (acum este doar ecou) "Pacanaiturile" au fost eliminate. 09 Mai 2002 - Reverb-ul suna a reverberatie 11 Mai 2002 - Adaugat cativa parametrii midi la Reverb 18 Mai 2002 - Adaugat filtrul AllPass la Reverb si adaugat parametrul Plohidamp 19 Mai 2002 - Adaugat InitialDelay (idelay) la Reverb 24 Iun 2002 - Clasa Filtru nu mai este dependenta de FilterParams(pot sa-l folosesc in alte scopuri) Corectat un bug la filtru care facea ca la rezomante scazute sa amplifice f. mult basii Adaugat High Pass Filter Rezonanta filtrului este exponentiala Adauga LPF+HPF la Reverb Inceput sa scriu Generatorul de Functii (OscilGen) 25 Iun 2002 - Scris cateva forme de unda (functii) Reverb-ul are volumul in dB si daca este zero(ca parametru) atunci se dezactiveaza 02 Iul 2002 - Adaugat inca o functie la generatorul de functii 03 Iul 2002 - Inceput sa scriu generarea de functii la OscilGen pe baza de FFT Inlaturat DC-ul de la OscilGen 04 Iul 2002 - Adaugat ANTI-ALIASING la ADnote si insumarea armonicelor se face in domeniul frecventa Corectat un bug care facea sa sune rau dac OSCIL_SIZE!=512 (era declarat de 2 ori) 12 Iul 2002 - Adaugat posibilitatea de a folosi ca modulator alta voce Adaugat parametrii MIDI la OscilGen 13 Iul 2002 - Adaugat Randomness la clasa OscilGen 15 Iul 2002 - Adaugat si Panning(incl. Randomness) => instrumentul este acum stereo 16 Iul 2002 - Adaugat Randomness la LFO (faza 0 => random) Inlaturat o eroare care facea ca amplitudinea sa nu fie interpolata 17 Iul 2002 - Volumul FM-ului este exponential Adaugat atenuare la volumul FM-ului la note inalte 23 Iul 2002 - Adaugat EnvelopeStretch Corectata o eroare care facea ca uneori sunetul sa se auda foarte tare la inceput Adaugat fade-in (f. scurt) si fade out in caz ca envelop-ul are A=0 sau R=0, a.i. sa nu se auda pacanaituri 24 Iul 2002 - Corectat Relase-ul la Envelope si adaugat ForcedRelase 25 Iul 2002 - Adaugat posibilitatea de a nu folosi AntiAliasing-ul Adaugat Frequency Modulation (nu phase modulation) Adaugat Delay la fiecare voce Adaugat Morphing la modulatie 26 Iul 2002 - Inceput sa scriu clasa Part 27 Iul 2002 - Se face controlul Midi folosind clasa Part si nu ADnote 28 Iul 2002 - Corectata o eroare care facea sa se instantieze clasa ADnoteParameters pt. fiecare nota => memoria era ocupata excesiv si "manca" din procesor. Cauza erorii este ca trimiteam obiectul ADnoteParameters ca parametru si nu referinta lui. Asta era cauza pacanaiturilor ce se auzeau daca apasam multe clape simultan. 29 Iul 2002 - Adaugat clasa Master (Permite acum mai multe instr. simultan => multitimbral) Observat o eroare la Envelope 30 Iul 2002 - Adaugat EnvelopeStretch si Forcedrelase la instantierea unui obiect EnvelopeParams Durata Sustainul-ui fortat este acceeasi indiferent de paramentrul EnvelopeStretch Adaugat Ecou 31 Iul 2002 - Daca VelocityScaleFunction=127 atunci orice vel. va face amplitudinea maxima (ca si cand vel.=127) Inceput sa scriu Interfata Utilizator 01 Aug 2002 - Toti parametrii sunt convertiti in REALTYPE direct de ADnote,de LFO Inlataurate mici probleme de AntiAliasing daca detune-ul era prea sus si la unele moduri FM Programul incepe sa fie controlabil de Interfata 02 Aug 2002 - Inlaturat o eroare stupida care facea ca sa se seteze valorile EnvelopeParams la -1 (scria din Master:: prea mult) 03 Aug 2002 - Terminata interfata pentru ADnoteParameters.GlobalPars Adaugat inca un parametru la lfo (continuous LFO) care faca ca LFO-ul sa nu inceapa la fiecare NoteOn Corectat doua erori la ...[nvoice].AmpEnvelope si ...[nvoice].FreqEnvelope Scrisa interfata pentru ADnoteParameters.VoicePars (fara FM+OSCIL...) 04 Aug 2002 - Scrisa interfata cu FM (fara Oscil) Corectate doua erori cu provire la FMampenv si FMfreqenv Inlaturat aliasing-ul la vocea FM Modificata interfata (Voice si FM-ul sunt intr-o singura fereastra) Inceput sa scriu schimbare voce curenta. 05 Aug 2002 - Adaugat interfata pentru cei mai importanti parametrii ai ADnote_VoicePar[nvoice] Inceput sa scriu interfata pentru OscilGen 06 Aug 2002 - Este mult mai usoara schimbarea vocii curente. Inceput sa scriu OscilEditor Nu mai este necesara changebasefunc() la oscil pentru a schimba basefunction, se apeleaza automat. OscilEditor este (aproape) complet Toti parametrii ADnoteParameters au UI Corectate cateva erori (cauzate de faptul ca nu am verificat daca ADnote::...Enabled!=0) 07 Aug 2002 - Corectata o eroare la envelope Adaugat afisaj spectrum la OscilEdit Adaugat parametrii noi: extenal oscillator (voice si FM) si oscilphase(si FM) si interfata pentru ei Gasite mai multe erori care apar daca misc widget-urile in timp ce cant la clape (probabil este vorba de thread-uri care trebuie sa fie sincronizate sau ceva cam asa sau memory leaks) Inceput sa scriu interfata pentru Part Adaugat bypass la filtrul global Adaugat conversia oscil-ului in basefunction Corectata o mica eroare la calcularea oscil-ului referitor la faze 08 Aug 2002 - In VoiceList valorile sunt actualizate la fiecare apasare a butonului "ShowVoiceList" si formele de unda sunt afisate corect. Corectate niste mici erori la FM Daca se foloseste ca modulator o alta voce, interfata dezativeaza unii parametrii FM daca sunt inutili Inceput sa scriu interfata si parametrii Master/Part Schimbat putin Master si Part (atentie sa nu se instantieza ADnoteParameters la fiecare apasare de tasta) Inceput sa scriu control-ul pentru Master/Parts 09 Aug 2002 - Scris parametrii Part si Master Inceput sa scriu sincronizarea intre thread-uri 10 Aug 2002 - Adaugat o noua forma de unda la OscilGen Adaugat sincronizarea intre thread-uri=>programul nu mai crapa daca in timp ce apas clapele, modific forma de unda Adaugat enable/disable ADnote Inceput sa scriu SUBnote/SUBnoteParameters Se poate canta si la SUBnote(inceput sa scriu UI pt. el) 11 Aug 2002 - Scris controlul armonicelor Adugati cativa parametrii la SUBnote Adaugat AmpEnvelope la SUBnote(si UI) 12 Aug 2002 - Adaugat Detune la SUBnote si schimbat Detune-ul la ADnote Adaugat FreqEnvelope la SUBnote 16 Aug 2002 - Corectata o eroare care facea ca VoiceOut sa fie inlaturat chiar daca era inca folosit(de alte voci) Daca "Forced Relase" este off atunci se face relase-ul liniar Adaugat BandWidth Envelope 17 Aug 2002 - Inceput sa pregatesc pentru EffectManager 18 Aug 2002 - Adaugat inca un parametru la Reverb: initial delay fb Scris efectele de insertie Inceput sa scriu efectele de sistem 19 Aug 2002 - Continuat sa scriu efectele de sistem Inceput sa scriu interfata la Efecte (Reverb - terminat, aproape) 22 Aug 2002 - Corectata o eroare la Echo Se poate schimba efectul de insertie Gasita o eroare care "crapa" programul daca schimb efectul de le Reverb (rezolvata temporar, dar cu "memory leak") 23 Aug 2002 - Corectata eroarea la Reverb (a fost din cauza ca am pus ">" in loc de ">=" :-p ) Terminat efectele de insertie(si interfata) Adaugat Effect cleanup Scrisa interfata pentru efectele sistem (cu exceptia sendto another sys eff) 24 Aug 2002 - Adaugate doua noi efecte: Chorus si Phaser 25 Aug 2002 - Nu se mai aude tacanit la Chorus daca schimb Delay/Depth Corectat o mica eroare care facea ca sa nu se afiseze Pinsparts corect Adaugat un nou efect: AlienWah Nu se mai aude tacanit la Phaser si la AlienWah la frecvente LFO f. mari 27 Aug 2002 - Adaugata o noua forma de unda: Chirp Adaugat Waveshaping la OscilGen Se poate compila si fara UI Inceput sa scriu Salvarea/Incarcarea Parametrilor 28 Aug 2002 - In ADnoteVoiceListUI se afisaza corect daca vocea este activata/dezactivata Scrisa Salvarea/Incarcarea parametrilor (cu exceptia la OSCIL::UseAsBaseFunction) Adaugat File Save/Open 29 Aug 2002 - Se poate salva si oscil::useasbase Se afiseaza corect valorile dupa incarcare 01 Sep 2002 - Adaugat "codul de intrare" sa saveload 0xfe pt. a sti de unde incepe o noua "ramura" "Codul de intrare" este folosit pentru a nu incarca "ramurile" care nu se potrivesc cu specificatiile (ex. nr. de voce sau nr. part prea mare) Adaugat header la fisier Imbunatatit OscilUI::useasbase 03 Sep 2002 - Modificat codurile de parmetrii: indicele par. sunt >= 0x80, parametrii <0x80 , controlerii speciali(urcare/coborare creanga) >=0xf0; Este util la versiunile viitoare, la forward/reverse compatibility. Inceput sa scriu clasa Microtonal si interfata pt. Microtonal 04 Sep 2002 - Adaugat Pfilterbypass la salvare (am uitat sa o pun pana acum) Aproape terminat Microtonal-ul (cu exceptia importului din fisiere .scl) 05 Sep 2002 - Facut cateva mici modificari la Microtonal si Echo Adaugat un nou parametru la ADnote: PVolumeminus Adaudat parametrii noi de Detune: Pcoarsedetune(coarse+octave) si Pdetunetype Adaugat cateva tipuri de detune 06 Sep 2002 - Adaugat posibilitatea de a folosi ADnotepars:Globalpars.Pdetudetype in loc de Pdetunetype (0 = default detunetype), asa ca nu mai trebuie sa mai modific la fiecare voce detunetype: setez la 0 si modific global-ul Facut mici modificari la MidiInput(OSS) 07 Sep 2002 - Corectata o eroare cu privire la detune si daca freq. > Nyquist Modificat driver-ul OSSmidiin Adaugat driver Alsa cu port virtual Se poate salva doar instrumentele/microtonal. Adaugata un nou fel de waveshaping(Zigzag) 08 Sep 2002 - Psysefxvol[][] sunt scalate in dB Nu mai este periculos sa inchid fereastra principala 09 Sep 2002 - Se actualizeaza corect la incarcare la Master:Psysefxvol[][],Pvolume,Pkeyshift; si alti parametrii la Part Adaugat nume la Part Panic-ul (Shut-up-ul) se aplica si la efecte Part->Penable controleaza de fapt daca Part-ul este activat/complet dezactivat. Daca se dezactiveaza un part toate notele+ efectele insertion sunt oprite. Nu mai consuma CPU daca folosesc multe part-uri. Adaugat un nou parametru la part: Pnoteon care controleaza daca part-ul primeste mesaje NoteOn Adaugarea extensiei se face automat. Adaugat LFO exp_up 1 si 2 Curatat putin de memory leaks (mai am de curatat si interfata) 10 Sep 2002 - Adaugat filtrul HPF cu un pol Interfata se inchide corect. Adaugat textul cu Copyright in interfata Traduse toate comentariile in limba engleza Adaugat licenta in fiecare fisier 11 Sep 2002 - Adaugat descriere la fiecare fisier Corectata o eroare care facea ca SUBnote sa aiba amplitudini f. mari la freq. f. inalte Adaugat cateva macro-uri la interpolarea amplitudinii 12 Sep 2002 - Modificat extensiile (*.mas.zyn ---> *.mas_zyn, la fel si celelalte) pentru a nu aparea fisiere *.mas.mas.zyn 13 Sep 2002 - Am decis numele programului: "ZynAddSubFX" (Zyn de la synthetizer (inlocuit S cu Z), Add de la additive, Sub de la substractive, FX de la effects) 14 Sep 2002 - Volumul din ADvoicelist se afiseaza corect 15 Sep 2002 - Adaugat inca 3 moduri de waveshaping Limiter, UpperLimiter, LowerLimiter 16 Sep 2002 - Adaugat Makefile 17 Sep 2002 - Corectata o mica eroare care facea ca sa nu se incarce fisierele cu data intotdeauna Nu se amplifica freq. f. inalte daca freq. filtrului este mare. Inceput sa scriu documentatia. 18 Sep 2002 - Adaugat functia de resetare a tuturor parametrilor(master si instrument) 23 Sep 2002 - Adaugat posibilitatea de a conecta efectele de insertie la iesire Master Lfo-ul la frecventa incepe de la 0 pt. startphase=0 24 Sep 2002 - Corectate niste mici erori la Chorus/Phaser Adaugat si "substract" la Chorus si Phaser Limitat tipul detune-ului la valoarea maxima 25 Sep 2002 - LANSAT PE INTERNET - PRIMA VERSIUNE (1.0.0) -------------------------------------------------------------------------------------------------- 01 Dec 2002 - Corectat niste comentarii - Inlaturat o eroare care facea ca ZynAddSubFX sa crape daca dezactivez un part utilizat - Inceput sa scriu Rezonanta 02 Dec 2002 - Terminat de scris Rezonante - Adaugat filtru trecer-banda (BPF) - Scris Recording 03 Dec 2002 - Adaugat Gain la Resonance - Adaugat "New Instrument" la meniu 06 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.1) -------------------------------------------------------------------------------------------------- 08 Dec 2002 - Inceput sa scriu Bank si interfata pentru Bank 09 Dec 2002 - adaugat si "make debug" - Continuat sa scriu Bank/UI; acum se poate folosi (dar nu salva pe HDD) 10 Dec 2002 - Terminat Bank (mai trebuie scris un "config" file pentru a alege automat ultima banka folosita) 11 Dec 2002 - Am mai lucrat ceva la Bank si am adaugat "config file" 12 Dec 2002 - Filtrul BPF suna mai tare - Nu mai ar trebui sa fie probleme la compilarea FFTwrapper.h (fftw.h) 13 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.2) -------------------------------------------------------------------------------------------------- - Corectat o eroare care facea ca programul sa crape daca salvam parametrii in timp ce cantam - LANSAT PE INTERNET - VERSIUNEA (1.0.2-1) - de acasa -------------------------------------------------------------------------------------------------- 21 Dec 2002 - Corectate mici erori (nu mai dispare "Bypass Global Filter", inlaturat zgomotul de mica amplitudine - cauzat de reverb,nu mai apare intarzierea foarte lunga de la inceput a notelor muzicale daca conectam la aseqview) - Adaugat filtru de rejectie banda (Notch) - adugat randomize la Resonance - Inceput sa scriu VU-meter-ul 22 Dec 2002 - Terminat VU-meter-ul - Schimbat modul in care efectele de insertie se calculeaza (suna mai tare un pic) - Adaugata o noua functie la OscilGen 23 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.3) -------------------------------------------------------------------------------------------------- 24 Dec 2002 - Adaugata posibilitatea de a incarca fisiere ".scl" (la Microtonal) 26 Dec 2002 - Adaugata optiunea de a folosi numai OSS-ul (fara ALSA) 27 Dec 2002 - Corectate cateva erori si modificate cateva lucruri marunte la Microtonal 28 Dec 2002 - Mici modificari la Microtonal - Panic-ul la Reverb functioneaza OK - Inceput sa scriu Scale Degree Mapping la Microtonal 29 Dec 2002 - Continuat Scale Degree Mapping la Microtonal (dar nu am terminat) 30 Dec 2002 - Corectat lucrul cu ScaleShift-ul - schimbat modul in care se face keyshift-ul (nu se mai schimba armonia, indiferent de sistem) 31 Dec 2002 - Terminat Mapping-ul la Microtonal(incl. incarcarea/salvarea) Corectat eroarea care facea ca la Microtonal sa nu se incarce de fiecare data din scl_zyn unele date * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01 Ian 2003 - Corectata o eroare la Microtonal (erau probleme la InvertKeys daca era folosit key mapping) - Adaugata un nou tip de waveshaping (Inverse Limiter) 02 Ian 2003 - Adaugat afisaj al acordului fin (cents) - Butoanele arata f. frumos (am adaugat un nou widget in loc de Fl_Dial) 03 Ian 2003 - Schimbate butoanele (putin) - Nu se mai aude un tacanit la ShutUp sau AllNotesOff - Corectat putin waveshaper-quantisize si butoanele - Inlaturata o eroare care facea ca programul sa crape daca schimbam unii parametri ale efectelor 07 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.4) -------------------------------------------------------------------------------------------------- 08 Ian 2003 - Am inlaturat de-a binelea eroarea (cu efectele - 3 Ian) 11 Ian 2003 - Corectate o mica eroare care facea ca volumul sa fie negativ la ADnote::voice[].PVolume <64 13 Ian 2003 - Corectata o mica eroare la VU-Meter - Corectata o mica eroare cu privire la panning la Reverb 15 Ian 2003 - Adaugat min/max keyresponse limits la Part - Adaugat Filtru si FiltreEnvelope la SubNote 16 Ian 2003 - Curatat codul sursa (ADnote) prin inlaturarea unor variabile - Durata fadein-ul este aleasa automat (a.i. sa nu rezulte click-uri la notele joase si nici fadein-ul audibil la notele inalte sau cu freqcvente inalte) - Corectata o mica eroare care faca ca uneori instrumentul sa nu fie salvat/sters la Bank slot-ul cerut - Imbunatatita putin interfata: La ADnote si SUBnote, butoanele care controleaza amplitudinea armonicelor sunt colorate diferit daca au amplitudinea 0 17 Ian 2003 - Corectate erori la Chorus si la Phaser care faceau ca sa sune prea 'sec' (din cauza ca wet-ul era la 50% din volum) 18 Ian 2003 - Inceput sa scriu Preset-uri la efecte 19 Ian 2003 - Adaugat Preset-urile la efecte 20 Ian 2003 - Schimbat putin HPF-ul la Reverb 21 Ian 2003 - Adaugat tuning-ul la Reverb (si Freeverb) si Roomsize - Schimata putin interfata si modificat putin widgetul Pdial 22 Ian 2003 - Amplificat volumul Reverb-ului cu 6 dB - Buffer-ul foloseste liste simplu-inlantuite, asa ca nu-i mai problema la "configuratii mari" (multe part-uri) 24 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.5) -------------------------------------------------------------------------------------------------- 26 Ian 2003 - Inceput sa scriu GetAudioOutSamples, care ar putea fi apelat in modul callback 27 Ian 2003 - Adaugat o noua fuctie la waveshaping (clip) - Adaugat suportul pentru Jack (adica programul poate rula in modul call-back ;-) ) - Inlaturata o eroare care facea ca npart sa fie foarte mare si ca programul sa crape 29 Ian 2003 - Schimbari foarte minore la OscilGen::waveshape (la clip) - Daca dau "clear" la OscilEdit, butoanele care au amplitudinea zero, sunt colorate corect 30 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.6) -------------------------------------------------------------------------------------------------- 31 Ian 2003 - Inceput sa adaug optiuni la linia de comanda - Rata de esantionare (SAMPLE_RATE) este setata la rulare si nu la compilare 01 Feb 2003 - Inca 2 variabile sunt setate la rulare (SOUND_BUFFER_SIZE si OSCIL_SIZE) - Volumul la Part se aplica doar dupa efecte de insertie - Inceput sa scriu Distorsionarea (fara filtre) 02 Feb 2003 - Schimbate modurile de distorsionare (exp -> asym1 si pow -> pow ( altul ) ) - Terminat Distorsionarea 03 Feb 2003 - Adaugata inca o functie la waveshape (asym2) - Inceput sa scriu Controller-ii - Adaugat controller-i PitchWheel,Expression,Panning,Filter Cutoff, Filter Q, BandWidth, Modulation Wheel - Panning-ul si volumul sunt interpolate - Inceput sa scriu un nou program (Controller) care timite mesaje midi (controller) catre un port ALSA - Panning-ul la Part se aplica doar dupa efecte de insertie - Panning-ul la efecte se aplica inainte de procesare 04 Feb 2003 - Adaugat posibilitatea de a seta intensitatea/dezactiva la controlleri(incl. UI) - Adaugat controler-ul FMmodulationAmplitude - Corectat o eroare la Buffer (care facea ca Buffer-ul sa nu se reseteze :-P ) 05 Feb 2003 - Corectata o eroare care facea ca programul sa consume mult din procesor (denormalisation) - Nu mai este permisa o valoare a lui OSCIL_SIZE care sa nu fie putere a lui 2 (este ajustata automat) - Adaugat controller-i Volume si Sustain Pedal, AllNotesOff, AllSoundOff, ResetAllControllers - Adaugat NRPN, adica toti parametrii efectelor pot fi controlati prin controlleri 06 Feb 2003 - Pus limite la parametrii efectelor a.i. sa nu se seteze (datorita controllerilor) la valori nevalide - Inlaturata o mica eroare la controller-ul BandWidth - Schimbat putin EffectLFO::updateparams - Controler-ul BandWidth afecteaza doar FineDetune-ul - Schimbat putin identificare controlerilor si adaugat controlleri la OSS - Schimbat putin interfata utilizator la controlleri 07 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.7) -------------------------------------------------------------------------------------------------- 08 Feb 2003 - Adaugat modul "mono"(monofonic) la part - Inceput sa scriu portamento-ul 09 Feb 2003 - Terminat portamento-ul 10 Feb 2003 - Inceput sa scriu Equaliser-ul - Inlaturata o eroare care facea ca la parametrii efectelor care sunt 0 sa nu fie incarcati 11 Feb 2003 - Terminat Equaliser-ul (adica adaugat vizualizator freq response) - Corectata o mica eroare care facea ca part-ul 0 sa fie activ chiar daca cel salvat era inactiv 12 Feb 2003 - Mici modificari la EQ (UI) - Adaugata posibilitatea de swap (stanga <--> dreapta) - Adaugat Q la filtrele shelf 13 Feb 2003 - Adaugat inca un parametru la Phaser (phase) - Curatit putin codul sursa la efecte - Adaugat system effect send to next systems effects 14 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.8) -------------------------------------------------------------------------------------------------- - cateva mici modificari (de la un patch primit de pe Internet) - adaugat keylimit la Part (si first note priority) 15 Feb 2003 - Corectata o foarte mica eroare la Part 16 Feb 2003 - Se poate aplica filtrul inainte de distorsion - Adaugat filter stages (adica filtrul se poate aplica de mai multe ori) 17 Feb 2003 - Corectata o mica eroare la Reverb si modificat putin filter-ul si UI 18 Feb 2003 - Corectata o eroare care facea ca semnalul la voice sa fie intre [-4.0..4.0] si sa faca probleme la RingModulation - Adaugat modul Noise la ADsynth(voice) pentru a putea produce si tobe - Adaugat parametrul fixed frequency la 440Hz 19 Feb 2003 - Corectata o mica eroare la ADnote (aparea un fadein nedorit) - Facute inca cateva mici modificari la ADnoteUI 20 Feb 2003 - Imbunatatit foarte mult Controller-ul si adaugat la ZynAddSubFX ca program extern - Modificat putin Waveshaper-ul (fct. L/U limit) - Corectata o eroare la SUBnote (care facea probleme la glissando) - Adaugat un nou parametru Punch la ADnote care face ca sa sune ca si cum ar fi o lovitura (f. util la Rhodes) 21 Feb 2003 - Adaugata inca o functie de distorsionare x(1-x) 23 Feb 2003 - Corectata o eroare (cu mutex) care facea ca sunetul sa fie extrem de tare, daca in timp ce cantam, modificam unii parametrii de sunet la ADnote 24 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.9) -------------------------------------------------------------------------------------------------- - Adaugata posibilitatea de a tipari notele si timpul in care au fost produse (optiunea -D) 26 Feb 2003 - Adaugat inca 2 controlleri (Resonance Center Freq. (relative) si Resonace Bandwidth(relative)) 27 Feb 2003 - Adaugata posibilitatea de a modifica parametrii (in mod direct) al oscilatorului extern 07 Mar 2003 - Portat partial(doar interfata) programul sub Windows 08 Mar 2003 - Adaugat Virtual Keyboard - Cateva mici modificari in vederea portarii pt. windows - Adaugat si controller la Virtual Keyboard 09 Mar 2003 - Adaugat pitch wheel la Virtual Keyboard si modificat putin controller-ul la VK 10 Mar 2003 - Adaugat Filter Frequency Tracking (adica modificarea frecventei filtrului in functie de frecventa notei) - Marite eficienta la LFOparams - update lfotime - Adaugat mod de normalize prin RMS - Corectate doua erori la Distorsion (negate si mono+prefiltering) 11 Mar 2003 - In Windows, nu mai este necesar functiile getopt (scrisa o functie proprie) 12 Mar 2003 - Adaugat filtru la OscilGen 13 Mar 2003 - Adaugat mai multe filtre la OscilGen - Facute optimzari la ADnote (adaugarea unui element la oscilsmp si fmsmp,etc.) si curatat putin codul sursa - Corectata o eroare care amplifica fm-ul la rate de esantionare inalte - Optimizat si curatat reverb-ul 16 Mar 2003 - Modificate optiunile de compilare in Makefile.inc si coduri sursa a.i. sa se realizeze portarea pe windows mai usor 17 Mar 2003 - Inregistrarea se face in formatul WAV si nu RAW - Adaugat trigger la recorder (se incepe inregistrarea doar cand este apasata o nota) - Adaugat interfata PortAudio - Corectata eroarea care facea ca UI sa nu ruleze pt. Windows (trebuia dat show() la UI in thread-ul 3) si corectate alte erori din windows - Si audio-ul functioneaza sub Windows - Corectata o eroare care se manifesta foarte rar(Resonance, i era de la 0 si nu de la 1) 18 Mar 2003 - Adaugat interpolare la filtru (nu se mai aud tacanaituri, daca frecventa filtrului se schimba foarte rapid si semnalul contine putine armonice) - Adaugat interfata Midi in Windows => consider ca programul este portat in Windows 19 Mar 2003 - Adaugat interfata de configurare - Corectata o eroare la OscilGen care facea ca in loc ca amplitudinile sa fie reduse la -40,..,-100dB, sa fie setate la 1 si unde era intensitate mare sa file amplificate 20 Mar 2003 - Corectata o mica eroare la interfata (uneori disparea butonul ON de la ADvoice) 21 Mar 2003 - LANSAT PE INTERNET - VERSIUNEA (1.2.0) -------------------------------------------------------------------------------------------------- - Se interpoleaza filtrul si cand se trece peste pragul Nyquist (in sus sau in jos) 22 Mar 2003 - Corectata o eroare care facea ca nr. de esantioane scrise in headerul fisierului WAV sa nu fie initializat 26 Mar 2003 - Nu mai este permisa alegerea unui fisier wav in timpul pauzei de la record - Gasita si corectata o eroare stupida (am pus la NRPN 0x98 in loc de 98 zecimal) 28 Mar 2003 - Inceput sa portez programul sub VST 29 Mar 2003 - Adaugat Master fine detune (-64.0 .. 63.0 cents) 01 Apr 2003 - Functioneaza portarea sub VST, dar mai este de lucru... 02 Apr 2003 - Modificat synth-ul a.i. sa se poate apela in mai multe instante in VST - Continuata portarea in VST 03 Apr 2003 - Continuata portarea in VST (este limitat la o singura instanta) 05 Apr 2003 - Adaugata posibilitatea de a interschimba/copia parametrii efectelor - Mici modificari la Makefile (ignora headerele inexistente la deps) 06 Apr 2003 - Adaugat posibilitatea de protectie impotriva atenuarii a notei fundamentale la rezonanta - Pitch bend-ul merge bine in Windows 07 Apr 2003 - LANSAT PE INTERNET - VERSIUNEA (1.2.1) -------------------------------------------------------------------------------------------------- - Adaugat efect la part (adica efect care face parte din instrument ;-) ) 08 Apr 2003 - Adaugata interpolare la Resonance (peak-urile le interpoleaza) 09 Apr 2003 - Interfata la Envelope este o singura clasa - Adaugat Envelope free mode (adica de orice forma) - Adaugata posibilitatea de a copia de la o voce la alta la ADnote - Release-ul este liniar (in loc de dB) 10 Apr 2003 - Adaugata afisarea ultimului fisier master salvat/incarcat - Adaugata setarea notei minime/maxime la ultima nota - Pot alege daca release-ul sa fie liniar - Facute cateva corecturi la envelope 11 Apr 2003 - Curatat codul sursa la UI si impartit in mai multe fisiere .fl - Corectate niste erori la Envelope si adaugat modul liniar/logaritmic la amplitudine 12 Apr 2003 - Inceput sa scriu kit-ul la part 13 Apr 2003 - Terminat de scris kit-ul la part+UI 14 Apr 2003 - Copierea vocilor este sub forma de clipboard - ADsyn su SUBsyn check-urile de la PartUI sunt actualizate 15 Apr 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.0) -------------------------------------------------------------------------------------------------- 16 Apr 2003 - Adaugat modul "Single" la instrument kit, care face ca sa sune doar primul instrument din kit disponibil 21 Apr 2003 - Adaugat realtime priority, care seteaza prioritatea mare la sintetizator, daca are posibilitate; merge numai pe Linux - Gasite multe erori mici(dar potential periculoase) cu ajutorul programului Valgrind 30 Apr 2003 - Adaugat "Spectrum adjust" la OscilGen, care ajusteaza intensitatile armonicelor 03 Mai 2003 - Normalizat spectrul inaintea adjust-ului la OscilGen 04 Mai 2003 - Adaugat mod "egal temperat" la fixed frequency (440Hz), util la tobe 05 Mai 2003 - Adaugat modul "Drum mode", unde sistemul este intotdeauna temperat (12tET), toate notele sunt mapate si transpose-ul este ignorat 08 Mai 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.1) -------------------------------------------------------------------------------------------------- 09 Iun 2003 - Am schimbat in .H in fisierele .fl (ca sa se poate compila si pe Debian) 10 Iun 2003 - Inceput sa modific interfata la filtru a.i. sa pot adauga filtrul formantic usor - Interfata pentru filtru este o singura clasa 12 Iun 2003 - Inceput sa scriu panoul de part-uri (care afiseaza parametrii importanti ale part-urilor) - VU-meter-ul poate afisa si intensitatea part-ului dorit (folosit la panou de part-uri) 13 Iun 2003 - Terminat panoul de part-uri - Adaugat posibilitatea de a inchide automat fereastra bancii de instrumente, cand se incarca un instrument 19 Iun 2003 - Modificat modul cum se calculeaza frecventa filtrului (se fac doar adunari si doar la urma se ridica la putere) 22 Iun 2003 - Aproape terminat filtrul formantic (fara UI) 24 Iun 2003 - Merge mai multe instante in jack (alege porturi diferite) 26 Iun 2003 - Continuat de scris filtrul formantic 29 Iun 2003 - Adaugat vu-meter fals la Panel (in caz ca partul este dezactivat si primeste note on). De asemenea se arata daca in partul dezactivat s-a cantat ceva (apare o liniuta). 09 Iul 2003 - Inceput sa scriu interfata pentru filtrul formantic 10 Iul 2003 - Continuat filtrul formantic (interfata) 11 Iul 2003 - Eroarea vine de la Makefile pt. ca nu recompileaza si clasele care folosesc o anumita clasa, daca aceasta din urma se schimba - Continuat filtrul formantic (interfata+adaugarea interpolarii la Q) 12 Iul 2003 - Adaugat la filtrul formantic setarile de amplitudine formanti si interpolarea acestora - Adaugat grafic la UI-ul filtrului formantic si alti paramatrii la filtrul formantic 13 Iul 2003 - Corectata eroarea la FormantFilter care facea ca sa nu se interpoleze intre vocale - Adaugat parametrul VowelClearness la FormantFilter care face ca sa se evite vocalele mixte 14 Iul 2003 - Inlaturat parametrul Psequence[].pos, pt. ca era confuz => fiecare vocala are zona egala - Adaugat parametrii Psequencestretch si Psequencereversed la FormantFilter - Adaugat parametrul Pgain la filtru (-30...30 dB) - Terminat de scris Filtrul Formantic - Corectata o eroare care facea ca sa nu se salveze oscilatorul la o ADnote_voce, daca vocea este dezactivata, chiar daca era folosita de o alta voce - Prima data se cauta fisierul "default.bnk_zyn" si in dir "/usr/share/zynaddsubfx" sau "/usr/local/share/zynaddsubfx" 15 Iul 2003 - Setat Pkeylimit prestabilit la 15 la Part - Activarea unui Part din interfata Panel schimba automat part-ul curent la acela - Se poate alege ca un instrument din Kit sa fie procesat incepand cu un anumit efect; si se mai poate alege ca un efect din Part sa fie trimis in afara 17 Iul 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.2) -------------------------------------------------------------------------------------------------- 21 Iul 2003 - Corectata o eroare la FilterUI care facea ca la fiecare afisare sa se initializeze FilterParames::Pgain la 64 25 Iul 2003 - Corectata o eroare care facea ca modulatia in faza/frecventa sa sune diferit la diferite rate de esantionare/oscilsize 26 Iul 2003 - Afisat corect - valoarea OSCIL_SIZE ajustata (in caz ca a fost data optiunea "-o" incorect) - In windows arata si numele la midi_in_device 04 Aug 2003 - Adaugat filtrele Peak,LowShelf,HighSelf la filtru si foloseste parametrul Gain de la interfata filtrelor 30 Aug 2003 - Adaugat un nou tip de filtru: State Variable Filter 31 Aug 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.3) -------------------------------------------------------------------------------------------------- 02 Sep 2003 - Adaugata posibilitatea de a incarca de la inceput un fisier .mas_zyn "-l" - Se poate lansa programul fara interfata utilizator ("-U") 17 Sep 2003 - Adaugat niste simple patch-uri de Frank Neumann 02 Oct 2003 - Corectata o eroare la SUBsynth care facea ca la freq inalte si Q foarte mici sa se produca filtre instabile 30 Oct 2003 - Adaugate posibilitatea (+interfata in config) de Dump (avansat) - Adaugat ModWheel liniar si facut prestabilit (si posibilitatea de a alege in interfata modul de modwheel) 04 Nov 2003 - Modificat putin interfata la ResonanceUI 05 Nov 2003 - Marita viteza prin inlocuirea de (int) cu cod de asamblare (cu.10-50% la FM,chorus,etc.) 10 Nov 2003 - Inceput sa adaug posibilitatea de a adauga comentarii la instrumente 11 Nov 2003 - Terminat de adaugat comentariile/autor/tipuri la instrumente 12 Nov 2003 - Adaugat intefata pentru FFTW3 la fftwrapper 18 Nov 2003 - Inceput sa scriu Sequencer-ul 19 Nov 2003 - Adaugat un buton "i" pt. instrument info si facut ca instrument info sa se afiseze automat daca se schimba partul (sau se incarca instrumente,etc) 20 Nov 2003 - Continuat de scris Sequencer-ul si inceput sa ii scriu interfata - Mici modificari la preset-urile de la Echo 26 Nov 2003 - Continuat de scris sequencerul - inceput sa scriu inregistrarea (fara timer) 27 Nov 2003 - Se poate inregistra (dar nu rula) - adaugat timerul de inregistrat - Frecventa maxima al filtrelor este de Nyquist-500.0 pentru a evita instabilitatea filtrelor 28 Nov 2003 - Adaugata favorizarea portamento-ului in sus sau un jos; ex. se poate face ca portamento-ul sa fie doar in sus, sau portamento-ul in jos sa fie mai scurt decat cel in jos - Inceput sa pun pe cvs la cvs.sourceforge.net 01 Dec 2003 - Am facut niste mici modificari ca urmare a unui bug-report 05 Dec 2003 - Facute cateva modificari la jack 08 Dec 2003 - Inceput sa incerc sa fac rt-safe sub jack, dar in stadiul actual suportul jack este nefunctional 11 Dec 2003 - Adaugat aleatorism la amplitudinile armonicelor 13 Dec 2003 - Adaugat LFO frequency randomness 14 Dec 2003 - Imbunatatit LFO frequency randomness 15 Dec 2003 - Corectata o mica eroare la ADnoteParameters (lipseau niste break-uri la salvarea/incarcarea parametrilor) 16 Dec 2003 - Eroarea cu break-urile se dovedeste a fi o eroare majora :( ; adica corectarea ei, necesita resalvarea tuturor instrumentelor - Am revenit la suportul vechi de JACK, dar cel nou este disponiblil ca JACK_RT (nefunctional inca) 17 Dec 2003 - Inceput sa restucturez Part-ul (am adaugat clasele Instrument,InstrumentParams) - programul nu mai este compatibil cu versiunile anterioare - RMS normalize este prestabilit la OscilGen 18 Dec 2003 - Continuat de restructurat Part-ul * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01 Feb 2004 - Revenit la versiunea din 16 Dec. 2003 - Pus iarasi RMS normalize prestabilit la OscilGen - M-am razgandit ;) nu mai restructurez part-ul; mai bine pun acolo o functie separata pentru salvari/incarcari par instrumente - Inceput sa adaug suportul XML 02 Feb 2004 - Corectata o eroare care facea ca numele la instrumentele din bank sa fie aratate gresit (nu era pus un \0 ) - Continuat suportul de XML 03 Feb 2004 - Continuat de scris suportul XML - inceput sa salvezi cativa parametrii 04 Feb 2004 - Se salveaza parametrii XML la master, part, filter, lfo, envelope, resonance si adnote (partial) 05 Feb 2004 - Se salveaza toti parametrii in XML 06 Feb 2004 - Adaugat salvarea de instrument in XML - Adaugat export la bank intr-un director XML si decis ca bank-ul sa fie un director cu mai multe fisiere xml de forma XXXX-nume.xml sau XXXX-nume.xml.gz 07 Feb 2004 - Adaugat functii de initializare si renuntat la masterdefaultbuf si instrumentdefaultbuf (adica salvarea la inceput si incarcarea bufferelor cu instrumentele prestabilite) - Corectata o mica eroare care facea ca sa se incarce subnotepars la adnotepars (eroarea a aparut azi) 08 Feb 2004 - Modificat putin formatul XML 10 Feb 2004 - Adaugata salvarea parametrilor pt. basefunction la OscilGen - Inceput sa scriu incarcarea parametrilor 11 Feb 2004 - Se pot incarca cativa parametrii de la master 12 Feb 2004 - Continuat incarcarea parametrilor XML si la part (neterminat) 13 Feb 2004 - Terminat de adaugat parametrii la incarcarea XML 14 Feb 2004 - Se poate incarca si instrumente - Rezolvata o problema la coarse detune - Corectate cateva erori la incarcarea XML-ului - Frecventa LFO-ul de la instrumente are valoare reala intre 0..1 - Corectata eroarea care facea ca functia de rezonanta sa fie trasata incorect - Adaugata compresie gzip la fisiere si decompresie automata la incarcare (folosesc biblioteca zlib) 15 Feb 2004 - O mica modificare la envelope parameters in sensul ca envelope-ul prestabilit la FM nu mai este liniar 22 Feb 2004 - Adaugat normalize Full RMS la Oscil 23 Feb 2004 - Inceput sa fac ca sa pot adauga Bank bazat pe XML (adaugat temporar clasa OldBank) 24 Feb 2004 - Continuat la Bank 25 Feb 2004 - La Bank - inceput sa scriu partea ca sa arate instrumentele din banca 26 Feb 2004 - Continuat la Bank 27 Feb 2004 - Corectate erori la snprintf (nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori - Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown) - Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator) 28 Feb 2004 - Se poate incarca si salva instrumente in Bank 01 Mar 2004 - Se pot schimba bancile de instrumente - Introduse si celelalte functii la Bank (cu exceptia salvarii/incarcarii locului bancii folosite) - Se poate importa banci din bnk_zyn 03 Mar 2004 - Terminat (teoretic) partea de XML 05 Mar 2004 - Actualizat Copyright-ul la 2004 in fisiere 08 Mar 2004 - Corectat o mica eroare la OscilGen (se aplica gain-ul rezonantei incorect) 09 Mar 2004 - Adaugata posibilitatea de stretch la LFO in functie de frecventa notei 12 Mar 2004 - Adaugata modulatie la OscilGen (functia de baza) 13 Mar 2004 - Adaugat HarmonicShift la oscilgen 15 Mar 2004 - Inceput sa scriu partea de incarcare MIDI - Inlaturata partea de recording din Sequencer 16 Mar 2004 - Inceput sa scriu partea de analiza midi 25 Mar 2004 - Continuat partea de analiza midi 28 Mar 2004 - Scris partea de incarcat fisier midi - Merge partial playerul 26 Mai 2004 - Playerul merge bine cu un canal midi (rezolvata problema cu timing-ul) 03 Iun 2004 - Adaugata partea de play speed la interfata 06 Iun 2004 - Adaugata functia sigmoid la distorsionare 12 Iun 2004 - Modificat modul cum este realizat bank-urile, adica directoarele de bank-uri exista in anumite directoare si aceste directoare sunt cautate automat de bankuri; adaugat optiunea de a se folosi mai multe bank-uri 13 Iun 2004 - Adaugat filtrul "sinus" la OscilGen - Managementul bancilor de instrumente este complet - Se cauta bancile si in '/usr/share/zynaddsubfx/banks' si '/usr/local/share/zynaddsubfx/banks' - Corectata o eroare la filter la OscilGen care filtra diferit componentele sin si cos - Adaugat posibilitatea de swap la instrumentele din bank 14 Iun 2004 - Adaugat __DATE__ si __TIME__ sa stiu cand s-a compilat - Modificat interfata la PartUI - Imbunatatit modulatia basefunc la OscilGen (adaugat inca un parametru si inca un tip de modulatie ("power")) - Adaugat inca o noua functie basefunc la OscilGen (sqr=atan(sin(x)*a)) 15 Iun 2004 - Adaugat posibilitatea de a face armonicele ca sa depinda de frecventa ("adaptive") si rezultatul suna foarte frumos pentru ca tendinta este de pastrare a frecventelor armonicelor si nu a numarului de ordine al lor 16 Iun 2004 - Inceput sa trec configul pe XML 17 Iun 2004 - Adaugat tipul threshUp la spectrum adjust - Terminat de trecut config-ul pe XML (inclusiv setarile bancilor de instrumente) 18 Iun 2004 - Incercata interpolarea cubica dar am vazut ca nu merita pentru ca OSCIL_SIZE e suficient de mare si pentru o interpolare liniara - Separat OscilGenUI din ADnoteUI - Inceput sa scriu modulul de sinteza PADnote 19 Iun 2004 - Adaugat modul liniar de controller bandwidth si modificat modul liniar la controllerul modulation wheel - Adaugata modulatia in frecventa la OsciGen 20 Iun 2004 - Nu se mai deschide automat fereastra de instrumente daca a fost deschisa si s-a descarcat un instrument - Facute mici modificari la FM-ul de la Oscil 21 Iun 2004 - Inceput sa scriu conversia in sinus 22 Iun 2004 - Continuat conversia in sinus si facut teste pentru posibilitatea de "draw" cu sliderele 23 Iun 2004 - Modificat modul in care parametrii se afiseaza la OscilGen (este o functie "refresh" care face asta) - Adaugata posibilitatea de draw la armonicele OscilGen daca se apasa tasta Shift - Corectata o mica eroare care facea imposibila modificarea amplitudinii armonicelor cu tastatura - Adaugat randomness de grup (adica se aplica acelasi randomness la toate vocile care folosesc acelasi oscilator) 24 Iun 2004 - Inlaturata setara de normalize la OscilGen. Intotdeauna normalize este Full RMS - Facute cateva imbunatatiri la interfata unde sunt inlocuite comuter-urile cu setari mai usor de inteles de catre utilizator (ex. la efectele de insertie se arata "insert to Master Out" in loc de "-2") 29 Iun 2004 - Inlaturata setarea cu gain la Resonance pentru ca este inutil (datorita faptului ca normalize este Full RMS intotdeauna) 30 Iun 2004 - Inlaturata o eroare recenta la EffectUI si modificat EffectUI in sensul ca nu trebuie sters si reinstantiat pentru a se reincarca valorile curente de efecte - Inceput sa scriu un nou efect (DynamicFilter) 01 Iul 2004 - Corectata o mica eroare la EffectUI care facea ca efectele sa nu apara activate - Continuat de scris la DynamicFiter (mai este doar de salvat parametrii si de auto-update la filtru) 02 Iul 2004 - Continuat la DynamicFilter (adaugata auto-update, adaugat preset-uri) - Terminat DynamicFilter - Corectata o eroare la EQui care facea ca sa nu se actualizeze efectul curent si sa nu se obtina graficul egalizatorului 03 Iul 2004 - Corectata o mica eroare care nu activa la EffectUI daca efectul anterior era dezactivat - Actualizat Swap/Copy la efecte ca sa proceseze si parametrii la filtre - Adaugat Bypass la efectele de instrument - Imbunatatit interfata utilizator (eliminate setarile "-1",etc.) - Scris calcularea profilului la PADsynth - Adaugat OscilGen si Resonance la PADsynth si inceput sa scriu interfata utilizator la PADsynth 04 Iul 2004 - Adaugata calcularea automata a largimii de banda echivalente si afisarea ei - Inceput sa scriu partea de sinteza la PADsynth - Auzit primul sunet la PADsynth 05 Iul 2004 - Nu mai face urat daca schimb parametrii in timp ce cant si apas apply - Adaugat harmonic scale si position la PADsynth - Se calculeaza corect si armonicele cu largime de banda mare 06 Iul 2004 - Inceput sa adaug filtre,lfo,envelopes,etc. la PADsynth 07 Iul 2004 - Corectate cateva mici erori si adaugat autoscale - Modificata putin interfata de la filtru - Adaugata interfata si parametrii la LFOs,Envelopes,Filter la PADsynth - Adaugata fereastra care arata pozitiile armonicelor si continuat de lucru la acestea 08 Iul 2004 - La pozitiile armonicelor sunt aratate si valorile lor reale in dB - Alte adaugiri minore la PADsynth - Adaugat interpolare cubica la PADsynth 09 Iul 2004 - Modificat modul cum se calculeaza profilul armonicelor la PADsynth (nu se mai ridica la patrat) - Corectate cateva erori la PADsynth - Modific amplitudinea in functie de sqrt(largime de banda) => amplitudinile armonicelor sunt echivalente cu oscil 11 Iul 2004 - Acum nu se mai intrerupe sunetul la notele care canta in timp ce sunt aplicate modificarile la parametrii - Se poate alege marimea sample-lui - Adaugat multisampling la PADsynth - Cand se incarca parametrii ADsynth se da volumul ceva mai incet ca sa corecteze faptul ca normalize-ul este doar RMS 12 Iul 2004 - Inlocuit codul de D/W sau Volume de la efecte cu un cod unic in EffectMgr - Se poate face efecte la instrumente la care doar semnalul Wet e procesat de efectele urmatoare - Modificat modul cum se calculeaza intensitatea Wet la Reverb si Echo - Corectata eroarea la FM care facea ca daca Adaptive Harmonics!=0 sa se calculeze FM-ul gresit 13 Iul 2004 - Rezonanta la PADsynth se face in functie de armonica reala si nu de numarul de ordine al armonicei - LFO,Envelope, Filters, etc. merg la PADnote - Inceput sa fac partea de aratare ca parametrii au fost schimbati (butonul "Apply" se coloreaza in rosu) 14 Iul 2004 - Butonul Apply la PADsynth se coloreaza in rosu cand se modifica ceva - Adaugat fixed freq. la PADsynth - Sunt salvati si parametrii PADsynth => consider in mod oficial ca PADsynth este complet 15 Iul 2004 - Facuta o modificare la PADnoteUI care arata foarte frumos - Completata partea de save/load si stabilite noile extensii ale fisierelor: master - .XMZ, instrument - .XIZ, microtonal - .XSZ - Inlocuit memset cu un macro (ZERO) pentru ca memset nu seteaza toate valorile ci uneori doar prima valoare cu 0 (e o optimizare la gcc care face asta) - Corectate niste erori la makefile care aveau legatura cu compilarea in windows - Corectate 2 erori referitor la Banci de instrumente 16 Iul 2004 - Adaugat inca noi tipuri de harmonic bandwidth scale - Adaugat inca un parametru la filter la OscilGen si inca un nou tip de filtru 17 Iul 2004 - Corectata o eroare care facea sa crape programul uneori dupa ce scria instrumentul in banca - Modificata optiunea -l ca sa incarce un .xmz - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre1) -------------------------------------------------------------------------------------------------- 18 Iul 2004 - Corectata o mica eroare la afisare care facea ca la PADnoteUI sa fie trasate liniile in mod gresit 19 Iul 2004 - Corectata doua mici erori (se incarca gresit parametrii filtrului de la OscilGen) - Corectata inca o mica eroare care facea ca sa nu se coloreze butonul PAD_Synth Apply in rosu la anumiti parametrii de la oscilgen - Se dezactiveaza butoanele Edit de la PartUI ca sa nu se poata edita module de sinteza inactive 20 Iul 2004 - Corectate cateva erori cu compilare pe windows 21 Iul 2004 - Corectata o mica eroare la Bank si alte erori 26 Iul 2004 - Acum este folosita biblioteca mxml-2 - Corectata o eroare care facea ca sample-ul la PADnote sa nu fie ales in functie de frecventa reala de baza (cu detune) - Mutat functiile de waveshaping in Distorsion.C/.h 27 Iul 2004 - Corectata o eroare foarte suparatoare care bloca uneori calculatorul - Adaugat inca un nou parametru la PADsynth la base function - Nu se mai arata butonul de apply parameters la PADsynth cand nu este necesar - Eliminate blocarile de cateva secunde din threadul de sunet in momentul cand se incarca un nou instrument care contine parametrii PADsynth - Adaugata schimbarea titlului ferestrei principale la load XML 29 Iul 2004 - Modificat modul cum este stocat lista de banci root dir - Gasita o eroare care facea ca sa se stearga denormalkillbuffer inaintea lui master 30 Iul 2004 - Gasite si corectate o gramada de erori (eu stergeam elemente din ferestre si fltk le stergea din nou) - Eliminate warning-urile pentru -Wall 31 Iul 2004 - Eliminate complet stergerile in plus de la UI din destructorele obiecte - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre2) -------------------------------------------------------------------------------------------------- 01 Aug 2004 - Adaugat un nou tip de OvertonesPosition la PADsynth 02 Aug 2004 - Am pus din nou schimbarea schedule-ului la valoare corecta (l-am scos dintr-o greseala) 04 Aug 2004 - Am corectat niste erori la VST - Merge VST, dar nu intotdeauna stabil (merge stabil pe vsthost.exe) - Corectata eroare care facea ca sa nu mearga MIDI - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre2 VST) -------------------------------------------------------------------------------------------------- 13 Aug 2004 - Inceput sa scriu modurile continuous si discrete la PADnote 14 Aug 2004 - Terminat modul continuous la PADnote - Corectata o mica eroare la OscilGen care facea daca adaptive harmonics e activ si phase randomness>0 sa rezulte si aleatorism in amplitudinile armonicelor - Inceput sa scriu Presets/Clipboard (Clipboardul, in stadiu actual va putea copia doar parametrii folositi si nu cei dezactivati) - Merge partial partea de Copy in clipboard 15 Aug 2004 - Corectata o eroare in main.c la pitch bend - Scos Swap/Copy la efecte si la PartUI si vechiul Copy/Paste de la ADnote voice - Merge clipboardul la Oscil, Resonance, Filter si partial la ADsynth,SUBSynth si PADsynth 16 Aug 2004 - Corectata inca o eroare la pitch bend (aratata de Krzysztof Korpiela) - Adaugat refresh si la Filtru si paste la ADnote, SUBnote si PADsynth sunt complete 17 Aug 2004 - Adaugat clipboard la LFO, Envelope, ADnoteVoice si Filter Vowel 18 Aug 2004 - In clipboard se salveaza toti parametrii (chiar si cei dezactivati) - Corectata o eroare care facea ca instrumentul sa fie incarcat la fiecare salvare in banca - Tipurile de lfo sunt compatibile intre ele la clipboard 19 Aug 2004 - Corectata o mica eroare la XMLwrapper care facea ca sa se salveze fortat toti parametrii (chiar si cei nefolositi) - Adaugata partea de salvare/incarcare a listei directoarelor unde se afla presetarile 21 Aug 2004 - Am lucrat putin la salvare/incarcare a listei dir. cu presetari 22 Aug 2004 - Corectata o eroare de compilare - Makefile-ul modificat, a.i. make-ul sa se opreasca in caz de eroare - Terminat managerul de preset-uri 23 Aug 2004 - Adaugata posibilitatea de a se vedea direct din lista cu bancile de instrumente 24 Aug 2004 - Inlaturat complet suportul pentru formatele *.mas_zyn, *.ins_zyn, *.bnk_zyn si *.scl_zyn - Ascuns Sequencer-ul de utilizator (o sa il continui mai incolo) 25 Aug 2004 - Listele de banci si de preset-uri sunt sortate - Corectate niste erori la Oscilgen care faceau ca sa se calculeze randomness chiar daca este folosit de PADsynth si pus automat parametrul randomness daca PADsynth este folosit (in caz ca se va importa la un ADsynth) - Gasita o eroare care face sa crape daca lucrez mult cu bancile de instrumente 27 Aug 2004 - Adaugata posibilitatea de a dezactiva aratarea starii PADsynth din instrumente - LANSAT PE INTERNET - VERSIUNEA (2.0.0) -------------------------------------------------------------------------------------------------- 05 Sep 2004 - Corectata o mica eroare de la SUBnote (legat de pitch wheel) 06 Sep 2004 - Eliminata variabila "disablekitloading" din Part si din UI 07 Sep 2004 - Modificat id-ul vst in 'zasf' (inainte era de 5 litere si poate cauza un crash la host) 27 Sep 2004 - Corectat un mic bug la salvare in xml la parametrul FMcoarseDetune din adnote - La VST, daca incerc sa inchid fereastra principala, se minimizeaza - Eliminate setarile cu indice '0' (zero) 28 Sep 2004 - Adaugata salvarea tuturor parametrilor in hostul VST (trebuie testat) - Adaugat installer pt. windows (cu NSIS) 29 Sep 2004 - Inceput sa scriu interfata utilizator pt. incepatori 30 Sep 2004 - Terminat de scris interfata utilizator pt. incepatori si se selecteaza la pornire modul dorit - Adaugata posibilitatea de a compila cu suport jack si oss simultan si sa se aleaga runtime ce doresc (jack/oss) 01 Oct 2004 - Corectata o mica eroare care facea ca sa nu se inchida ferestrele cu instrumente cand incarc din banca - LANSAT PE INTERNET - VERSIUNEA (2.1.0) -------------------------------------------------------------------------------------------------- 02 Oct 2004 - Corectata o eroare grava care facea ca sa nu pot schimba partul curent in interfata utilizator obisnuita 03 Oct 2004 - LANSAT PE INTERNET - VERSIUNEA (2.1.1) -------------------------------------------------------------------------------------------------- 04 Oct 2004 - Corectata o eroare care face ca in modul simple UI, sa se inverseze panning-ul - Adaugat un icon la ZynAddSubFX 10 Oct 2004 - Si controllerul de Resonance se aplica la toate item-urile din kit 12 Oct 2004 - Corectata o eroare care facea ca butoanele Addpoint si Delpoint de la Envelope sa nu fie afisate 16 Oct 2004 - Corectata o eroare care facea ca partUI-ul sa nu se actualizeze intotdeauna cand incarcam un instrument 20 Oct 2004 - Corectata o mica eroare asemanetoare cu cea din 16 Oct, dar care afecta meniul new 07 Nov 2004 - Corectata o mica eroare care facea ca sa nu se incarce corect instrumentele in linia de comanda (-l) 14 Nov 2004 - Nu mai verific in bank daca este un director sau fisier simplu, pt. ca poate sa aiba probleme 28 Nov 2004 - Curatat codul la OscilGen (acum datele sunt stocate mai bine si nu in functie de biblioteca FFTW) - Corectata o mica eroare la OscilGen cu adaptive harmonics care facea ca energia vechilor armonice sa nu se adauge in mod corect la noile armonice (la note inalte) - Sortarea nu mai este quicksort la bank si la presets pt. ca am vazut ca nu merge in windows intotdeauna - Corectata o eroare la egalizator care facea ca sa se aplice si la el par. D/W 29 Nov 2004 - Marita zona de valori la adaptive harmonics power din OscilGen - Adaugata posibilitate de a post-procesa la adaptive harmonics(adica a adauga sau a amplifica anumite armonice) 05 Dec 2004 - Corectata o eroare care facea ca functiile getChunk si setChunk sa fie supraincarcate in loc de suprascrise (dar nu am testat) - Corectata o eroare care returna gresit la canDo in vst (netestat) 17 Dec 2004 - Inceput sa folosesc Dvorak pt. VK 18 Dec 2004 - Continuat putin la VK 20 Dec 2004 - Se poate selecta la VK dintre "qwerty" si "Dvorak" - Corectata o mica erare care facea sa nu arate BWprofile dezactivat la PADnote * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 04 Ian 2005 - Corectata o mica eroare care facea ca sa nu arate Force Release la Freemode Envelope 15 Ian 2005 - Corectata o eroare la controllerul bandwidth care facea ca sa ajunga la valoarea 0 si sa dea peste cap SUBsynth 22 Ian 2005 - Inceput sa scriu suportul pt. DSSI 27 Ian 2005 - Corectata eroare care facea ca in cazul in care sunt 2 banci cu acelasi nume (sau aceeasi bank root dir sa fie selectat de 2 ori) sa produca confuzie 03 Feb 2005 - Inceput sa scriu la Microtonal ca sa se faca butonul apply de culoare rosie cand se schimba ceva 06 Feb 2005 - Facuta o mica modificare care interzice punera notelor "0" in dump si alta modificare care mareste nr. de octave calculate la PADsynth - Renuntat sa fac modificarea la Microtonal inceputa din 03 Feb, pentru ca nu am gasit cum pot schimba culoarea butonului automat cand modific un text 07 Feb 2005 - Corectata o eroare care facea ca la microtonal mapping sa nu se calculeze corect (adica sa se stocheze valoarea corecta) 12 Feb 2005 - Controllerul prestabilit la Virtual Keyboard este Filter Cutoff in loc de BandWidth - Modificate cateva preseturi la DynamicFilter - Adaugata posibilitatea de a mari sau micsora cu un parametru detune-ul vocilor de la ADnote 17 Feb 2005 - Corectate cateva erori la PADsynth care faceau ca sa se citeasca date din zone de memorie nealocata - Corectata o eroare la Bank care facea ca uneori sa crape programul cand umblam mult cu bankuri 19 Feb 2005 - Corectata o eroare care facea ca uneori sa fie calculata frecventa la ADnote=nan si programul sa crape pentru ca era folosit parametrul bandwidthDetuneMultiplier inainte de a fi calculat 21 Feb 2005 - Se afiseaza corect numele fisierului proaspat salvat in fereastra principala 26 Feb 2005 - Corectata eroarea la windows si la OSS care facea ca pitch bend sa nu fie mapat corect (trebuie verificat) 27 Feb 2005 - Se afiseaza corect valoarea lui detune in centi 28 Feb 2005 - Corectata o mica eroare care facea ca sa nu se afiseze intotdeauna corect detune-ul la ADvoice - Afisajul VU-meter la Master nu mai prezinta variatii mari in timp scurt - Adaugata afisajul RMS la VU-meter 06 Mar 2005 - Facute cateva mici modificari referitoare in special la warning-uri - Corectata o mica eroare care facea ca la un Paste sa nu se actulizeze unii parametrii ai filtrului in interfata 12 Mar 2005 - Imbunatatiri la interfata PADsynth, adica se poate da "apply" direct din OscilGenUI sau ResonanceUI 13 Mar 2005 - Facute cateva compilari in Makefile pt. compilare pt. Windows (standalone exe si vst) - Se compileaza in mod cross-compile pt. windows din linux 14 Mar 2005 - Mici modificari la afisarea RMS-ului - Actualizat textul copyright-ului la anul 2005 22 Mar 2005 - Corectata o mica eroare care facea ca la schimbari foarte lente al parametrilor sa nu se actualizeze Format Filter 25 Mar 2005 - Corectata o eroare care facea ca uneori, la anumite setari ale lui SepctrumAdjust din OscilGen sa rezulte semnal zero Corectata o mica eroare care facea ca daca se foloseste setarea 440Hz la Padsynth sa se aleaga sample-ul incorect 06 Apr 2005 - Modificat installerul pt. windows si pregatit pt. installer (folosit cross-compiling si nsis&wine) - Adaugat icon in format windows (si la installer) - Adaugat parametrul '-Y' la linia de comanda, care este folosit doar pentru installerul NSIS (parametrul este necesar pentru ca NSIS ma forteaza sa dau un parametru la program pentru ca sa adauge un icon la shortcut; zynaddsubfx ignora acest parametru) 07 Apr 2005 - Pregatit pentru release 08 Apr 2005 - Corectata o mica eroare care facea ca sa nu se incarce configul la inceput - LANSAT PE INTERNET - VERSIUNEA (2.2.0) -------------------------------------------------------------------------------------------------- 12 Apr 2005 - Actualizat pentru MXML 2.2 (nu o sa mearga pe vers. mai vechi de mxml) 27 Apr 2005 - Adaugata posibilitatea de a inlatura complet interfata grafica in Makefile.inc (in acest caz nu mai sunt necesare bibliotecile grafice ca fltk) - Adaugata posibilitatea de a incarca direct un instrument cu -L (deocamdata se poate incarca doar in part-ul 0) - LANSAT PE INTERNET - VERSIUNEA (2.2.1) -------------------------------------------------------------------------------------------------- 28 Apr 2005 - Corectata o eroare care facea ca uneori sa fie frecventa prea mare la LFO daca era folosit random - Nu mai afiseaza optionea -A in help daca nu este compilat si OSS si JACK 29 Mai 2005 - Corectata o eroare care facea ca sa nu se tina minte ultimul bank 27 Aug 2005 - Corectata o eroare care facea ca sa nu mearga functia Dump (se initializa inainte de citirea configurarilor) 21 Sep 2005 - Imbunatatit modul de scalare al profilei unei armonice la PADsynth 27 Sep 2005 - Gasita si rezolvata o posibila problema la PADsynth care facea ca sa nu se foloseasca mutex la stergerea de sample-uri (daca se aleg mai putine sample-uri decat initial) 09 Oct 2005 - Rezolvat un memory-leak la FFTwrapper * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 16 Apr 2006 - Corectata o eroare care facea ca sa nu se foloseasca insertion effect la master 20 Aug 2006 - Adaugat 88200 ca rata de esantionare 14 Sep 2006 - Se afiseaza spectrul la nota cu frecventa de 440 Hz la Oscil si pentru parametru Adaptive Harmonics 30 Oct 2006 - Adaugat un patch "standalone zombie fix stripped from Lars" - Adaugat un patch "Extended mono" si "font resizing stuff" de Gerald Folcher 31 Oct 2006 - Adaugat un patch "Extended mono v.3" de Gerald Folcher - Inlocuit fl_ask cu fl_choice in fisierele .fl - In mod prestabilit nu se mai seteaza volumul la efectul 0 - Efectele sunt numerotare de la 1 si in la "send to" din partui 01 Nov 2006 - Adaugat patch-urile de Jack Midi si LASH de Lars Luthman 06 Nov 2006 - Aplicat un patch "Fix for ALSA system lockup" de Lars Luthman 10 Nov 2006 - Aplicat un patch "zyn-extendedmono_v4_update-061110.diff.gz" de Gerald Folcher 14 Nov 2006 - Aplicat un patch "zyn-CVS-extendedmono_v5_update-061113.diff.gz" de Gerald Folcher * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 19 Mar 2007 - Aplicat un patch mic de la Daniel Clemente care este un workaround la bug-ul X11 cand tin tastele apasate mai mult timp 01 Apr 2007 - O mica modificare cu xclass zynaddsubfx in MasterUI.fl 09 Sep 2007 - Schimbata licenta la GPL 2 or other later * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 02 Ian 2008 - Corectate cateva mici erori la dezalocarea memoriei - Codul de recorder wav a fost rescris - Adaugata functia de export la sample-urile din PADsynth * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 20 Feb 2009 (Mark McCurry) - Made several functions accept 'constant char' over 'char' to prevent warnings - Changed several 'delete' operations to 'delete []' based upon the usage of 'new []' - Gave external programs Makefiles - Gave dials tooltips showing their value when they are being moved - Gave dials the ability to have normal tooltips when the mouse hovers over them - Created tooltips for the effects knobs - Standardized the code, so it could compile with pedantic without errors [it looks like some errors may have been missed] 22 Feb 2009 (Mark McCurry) - Fix improper deallocation in PresetsStore - Fixed errors with drawing of the Oscillator as reported with valgrind 07 Mar 2009 (Mark McCurry) - Added start of DocBook documentation - Incorperated JACK output patch by Emmanuel Saracco - Incorperated QUERTZ layout by Achim Settelmeier 29 Mar 2009 (Mark McCurry) - Started to use Doxygen within the Effects - Started to use const within Effects - Changing tabs->four spaces in hopes of generating a bit more consitancy - Began to use Initialization Lists - Almost all changes contained in Effects until further discussion on the style, so consistancy can be reached 28 May 2009 (Mark McCurry) - Added some more Doxygen comments - Added Audio Samples classes - Added Stereo template - Added Control class - Added DelayCtl class 20 Iun 2009 (Paul Nasca) - Bugfix: WAV export of PADsynth 10 Iul 2009 (Paul Nasca) - Update copyright info 11 Jul 2009 (Mark McCurry) - Added Proportinal Portamento - Replaced Docbook with AsciiDoc 18 Jul 2009 (Mark McCurry) - Enabled volume controller by default 20 Jul 2009 (Mark McCurry) - Incorperated AZERTY layout by sourceforge user jimee 02 Sep 2009 (Mark McCurry) - Incorperated const char* <-> string mismatch by Alexis Ballier 04 Sep 2009 (Mark McCurry) - Incorperated NULLMidiIn function prototype fix by Alexis Ballier 07 Sep 2009 (Mark McCurry) - Fixed glitch in XMLwrapper, which would prevent file loading 11 Sep 2009 (Mark McCurry) - Moved PADsynth_used from public struct to has/set methods in XMLwrapper - Created wrapper functions, so that XMLwrapper can be somewhat usable when const - Removed multiple addparam methods and replaced it with one variable argument function - Replaced int2str, real2str, str2int, and str2real from XMLwrapper with stringTo and stringFrom function templates in Util. - Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper - Removed unneeded stack from XMLwrapper 18 Sep 2009 (Mark McCurry) - Started to use versioning information in XMLwrapper - Remove last of stack helper functions in XMLwrapper - Added std::string retreval to XMLwrapper 20 Sep 2009 (Paul Nasca) - Started to implement the Unison effect for ADsynth 22 Sep 2009 (Paul Nasca) - Added vibratto and other features to Unison effect 22 Sep 2009 (Mark McCurry) - Changed temporary data for Oscilgen from static to instance recommended by Tobias Doerffel - Fixed Memory leaks in UI based upon James Morris' patch 23 Sep 2009 (Paul Nasca) - Added unison invert phase - Made unison frequency spread to depend on Bandwidth controllers and parameters - Added unison vibratto speed control and other improvements - bugfixes: Voice Amplitude Envelope and FM 24 Sep 2009 (Paul Nasca) - Small enhancements and bugfixes to Unison - Started to implement Bandwidth to the Reverb effect 25 Sep 2009 (Mark McCurry) - Allowed for XMLwrapper to retrieve strings stored in mxml TEXT fields 29 Sep 2009 (Paul Nasca) - Remove the old (FFT based) Bandwidth effect to Reverb and started rewrite it (based on multivoice chorus/unison effect) 01 Oct 2009 (Paul Nasca) - Corrected the ADsynth unison LFO rounding function - Made Unison based on Bandwidth (in cents) parameter 02 Oct 2009 (Mark McCurry) - Added OSS failsafe by Jrmie Andri 04 Oct 2009 (Mark McCurry) - fixed Ctest issues 06 Oct 2009 (Mark McCurry) - Added first simple profiling test 08 Oct 2009 (Mark McCurry) - Started to see if memset/memcpy offer performance benifits when widely used - Added basic SUBnote test 09 Oct 2009 (Mark McCurry) - Restylized codebase with uncrustify 28 Oct 2009 (Paul Nasca) - Disable "bw" control on Reverb when Bandwidth mode is not enabled 18 Nov 2009 (Mark McCurry) - Fixed segfault in VirKeyBoard 02 Dec 2009 (Paul Nasca) - Fixed a small typo on Virtual Keyboard 10 Dec 2009 (Mark McCurry) - Separated out Presets and arrayed Presets to reduce warnings from the Wextra flag - Minor change to Filter_ and FormantFilter to reduce unwanted warnings lmms-1.1.3/plugins/zynaddsubfx/FAQ.txt000066400000000000000000000027631247673406200177010ustar00rootroot00000000000000 Frequently Asked Questions -------------------------- Q1) What means "ZynAddSubFX" ? A1) The name of the program comes from 4 words: 1) Synthesizer ('S'->'Z') --> Zyn ^^^ 2) Additive Synthesis ------> Add ^^^ 3) Subtractive Synthesis ---> Sub ^^^ 4) Effects ----------------> FX So, ZynAddSubFX is a SYNthesizer with ADDitive, SUBtractive engines and effects. Q2) How can I load files from older versions of ZynAddSubFX (like *.mas_zyn,etc) A2) You need to convert them into new format. Please use 2.0.0pre1 or (recommended) 2.0.0pre2 versions of ZynAddSubFX to load old file formants and save them in the new formats Q3) How can I change the number of parts, voices to ADSynth, effects, etc. ? A3) Look in src/globals.h and change there these values. You don't have to change anything else, just recompile all. But most settings must be below 128. As the rule of the thumb if a setting is 128 or below 128, please don't make it bigger than 128. Anyway, I don't believe that you'll need more than 128 for these settings; for example you don't need 128(or more) effects same time? That's why I put the limit of 128 (using 7 bits of char). Q4) How do I enable Jack support on ZynAddSubFX ? A4) Look in "Makefile.inc" from "src/" directory for more information. It is highly recommended that the Jack samplerate to be equal to ZynAddSubFX samplerate (SAMPLE_RATE from globals.h), otherwise the resampling will be done and this will decrease the quality a bit. lmms-1.1.3/plugins/zynaddsubfx/HISTORY.txt000066400000000000000000000255111247673406200204270ustar00rootroot000000000000002.4.0 (21 Jun 2009) - extended mono functionality - legato mode - export functionality on PADsynth - inclusion of LASH client - inclusion of DSSI audio output - enabled tooltips for knobs (both description and value tooltips) - added support for newer JACK api - added quertz support for virtual keyboard - started to encorperate cxxtest for unit testing - many bugfixes - code cleanup 2.2.1 (28 Apr 2005) - made to work with mxml-2.2 (will NOT work on older versions) - it is possible to remove completely the graphical user interface (e.g. it can run without X). For this you need to modify the DISABLE_GUI option from the Makefile.inc - added a commandline -L which load a instrument (.xiz) - now it only loads to part 0 (you can use this option with -l to load a master file and after this the option -L to replace the part) 2.2.0 (8 Apr 2005) - the VST version of ZynAddSubFX is removed from the instalation until it will be more stable (hope soon :) ) - now, the instrument banks contains over 300 high quality instruments - added "Apply" a button from OscilGen window for PADsynth - added another parameter to ADsynth that controls the amount of all detunes of voices - adaptive harmonics postprocess - improved the VU-meter and added a RMS plot - Dvorak support for Virtual Keyboard - many bugs fixed and code cleanups 2.1.1 (2 Oct 2004) - Removed a big bug that prevented changing the part 2.1.0 (1 Oct 2004) - Added a installer for windows (thanks to NSIS installer ( http://nsis.sourceforge.net/ ) ). Both VST and standalone vesions are contained in the same installer. - Added a new user interface for beginners. You can switch the current user interface with that anytime do you want. - All parts, effects, etc. are counted from '1' and not from '0' - Added the posibility to compile the OSS and JACK support in the same binary (look in the Makefile.inc) - VST host should be able to save all zynaddsubfx parameters into their setups (this is untested) - Bugfixes and other 2.0.0 (27 Aug 2004) - VST version works (there are some issues/bugs but it works) - Added a advanced Clipboard and Preset module - now is possible to add user preset LFOs,Envelopes, Effects, Oscillators, Resonances, Filters, etc. - Completely removed the *.MAS_ZYN formats (masters, instruments,etc) support; use 2.0.0pre1 and 2.0.0pre2 to convert - Corrected a error to pitch bend on VST plugin (thanks to Krzysztof Korpiela) - Impoved the PADsynth module - Because the PADsynth module takes a time to load, the instrument that contains such modules are shown in different colors - Bugfixes - Other 2.0.0_pre2 (31 Iul 2004) - Updated the XMLwrapper to mxml-2.0 - Many bugfixes - Other 2.0.0_pre1 (17 Iul 2004) - Added a new powerful synth engine which is called PADsynth, you can make very beautifull pads and even some strange sounds - Now is used the XML format for all zynaddsubfx parameters(.XMZ for master parameters, .XIZ for instrument parameters and .XSZ for scale parameters).You can import older parameters. All parameters files are compressed with gzip algorithm. - Some parameters has changed and you might ecounter different sounds that you saved in the older versions of zynaddsubfx - The instrument banks are no longer single files, but directories that contains instrument .XIZ files (you can organize them even with a file manager). Also, you can use more than 1 banks easily. - Added a new effect called DynamicFilter that allows you to do WahWah,AutoWah, VocalMorpher and other effects - Speedups - Started to write a small sequencer that allows to load and play a midi file from zynaddsubfx (unfinished) - ZynAddSubFX is available from CVS, too. Please look at the sourceforge project page to get more information ( http://sourceforge.net/projects/zynaddsubfx ) - The waveform generator (OscilGen) has many new parameters :) also if you press the "Shift" key, you can draw the hamonics amplitude/phases - Many user interface improvements - You can load a file at the start of the program with "-l" command-line parameter and you can run zynaddsubfx w/o user interface with "-U" - It is possible to dump all MIDI notes into a text file - The instruments can contain comments and copyright information in order to encourage sharing of them - FFT3W library is supported - More "randomness" options - Other impovements - Many, many bugfixes - Added the full changelog (since I started to write zynaddsubfx), most is in Romanian - Other things 1.4.3 (31 Aug 2003) - added state variable filters and other types to analog filters - small user interface improvememnts - small bugfixes 1.4.2 (17 Iul 2003) - added full-featured, advanced formantic filters - added mixer panel which lets you to see/change most important part settings, and shows a vu-meters for each part - you can choose to process the instrument's kit items only with one Part effect (eg. you can make a instrument kit that contains a reverberated piano and flanged strings) - enabled to launch more instances in Jack - when is launched first time, it searches for default.bnk_zyn file into /usr/share/zynaddsubfx and /usr/local/share/zynaddsubfx directories (useful for binary packages for Linux distributions) - bugfixes 1.4.1 (8 May 2003) - added single mode to the instrument kit who alows only one item to be played same time - added "Spectrum Adjust" to the ADsynth oscillator - added "drum mode" to the instrument, where all midi keys are mapped to 12tET - added a parameter to the "440Hz" which make the freq to varies a bit according to the key pressed (very usefull to toms and other drums) - (for OSS audio out) if it is launched with root privileges, the synth will gain realtime scheduling priority - bugfixes 1.4.0 (15 Apr 2003) - added instrument's own effect (effects that are loaded/saved with the instrument) - FreeMode Envelopes: all Envelopes can have any shape (not only ADSR) - Added instrument kits: It is possible to use more than one instruments into one part (used for layered synths or drum kits) - Amplitude envelopes can be linear or logarithmic - added interpolation on the Resonance user interface - user interface improvements and cleanups of it's code - initiated a mailing list to allow users to share patches for ZynAddSubFX. Please share your ZynAddSubFX patches; look at http://lists.sourceforge.net/mailman/listinfo/zynaddsubfx-user for more information about the mailing list. 1.2.1 (6 Apr 2003) - improved filter interpolation - bugfix: wav header is written correctly - bugfix: NRPN works correctly (eg:the controller was 0x98 instead of 98), now you can controll all effects parametrer realtime via MIDI - bugfix: pitch bend works OK in windows - added master fine detune (-64..63 cents) - it is possible to swap effects or copy them - started to port ZynAddSubFX to VST (not functional, yet) - the resonace can protect the fundamental freq. against damping 1.2.0 (21 Mar 2003) - ZynAddSubFX is ported to Windows ;-) - added internal Virtual Keyboard - added Configuration window - added frequency tracking to filter - improved the OscilGen (harmonic filter, RMS normalisation, etc..) - improved the recorder (uses the WAV file format and it starts only when a key is pressed) - added filter interpolation if the frequency is changed very fast (it removes some annoying clicks) - other improovements, bugfixes, speedups and cleanups of the code 1.0.9 (24 Feb 2003) - added keylimit to Part - you can use multiple filter stages in order to make very steep filter rolloffs (eg. 48 dB/octave) - ADsynth - added noise mode and you can make fixed frequencies; added the "Punch" parameter - added an external program "Controller" which enables you to use the mouse for MIDI controllers - other improvements and bugfixes 1.0.8 (14 Feb 2003) - added mono mode and portamento - added the EQ effect - the output of a system effect can be sent to others system effects - minor bugfixes and improvements 1.0.7 (7 Feb 2003) - some settings (like samplerate) are set at runtime (by comand line) - added Distorsion effect - added controllers, and NRPNs for changing all effects parameters by midi - bugs removed and other improvements 1.0.6 (30 Jan 2003) - Added JACK output ;-) - Minor improvements and bugfixes 1.0.5 (24 Jan 2003) - The bug that crashed ZynAddSubFX if you change some effect parameters, it is realy removed (I forgot to update the file before upload) - Other bugfixes and code cleanups - Added a Global Filter to SubSynth - Added keyresponse limits to Part - Added presets to Effects - The fade is smaller on high frequecy content and larger on low frequecies; so you'll don't hear starting clicks on basses and audible fadeins on higher pitched sounds - Added tunnings to Reverb: you can choose Random of Freeverb 1.0.4 (7 Jan 2003) - It is possible to load Scala (.scl and .kbm) files - Added mapping from note number to scale degree is possible to load Scala kbm files - Corrected small bugs related to Microtonal - If you want to use ZynAddSubFX with OSS (or you don't have ALSA) you can modify the Makefile.inc file to compile with OSS only. - It is shown the real detune (in cents) - Made a new widget that replaces the Dial widget - Removed a bug that crashed ZynAddSubFX if you change some effect parameters 1.0.3 (23 Dec 2002) - small bugfixes: "Bypass Global Filter" from ADnoteUI dissapears sometimes ; removed the low amplitude noise produced by the reverb; if you "acconect" zynaddsubfx with aseqview no note was processed a long time. - added Notch Filter - added the option to randomize the ressonance function - added VU-Meter - Change the Insertion effect modes behaves (it sounds a bit louder) - Added to the project an external program called Spliter that splits the keyboard and alows you to play two instruments same time. You can use this program with ZynAddSubFX or any other synthesizer. - Added a new function to OscilGen 1.0.2-1 (13 Dec 2002) - bug found and removed: sometimes when Master/Instrument is saved, the synth crashed 1.0.2 (13 Dec 2002) - Added instrument banks - the BandPass Filter's output amplitude was increased - few fixes of FFTwrapper. See the documentation from "FFTwrapper.h" if you got error messages. 1.0.1 (6 Dec 2002) - corrected a bug that made ZynAddSubFX to crash(sometimes) if you disable a part - wrote Resonance - added the BandPass filter - added the recording feature - added "New instrument" menuitem 1.0.0 (25 Sep 2002) - first release, done a lot before it :-) lmms-1.1.3/plugins/zynaddsubfx/LocalZynAddSubFx.cpp000066400000000000000000000124471247673406200223510ustar00rootroot00000000000000/* * LocalZynAddSubFx.cpp - local implementation of ZynAddSubFx plugin * * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #include "zynaddsubfx/src/Misc/Util.h" #include #include #include "LocalZynAddSubFx.h" #include "zynaddsubfx/src/Nio/NulEngine.h" #include "zynaddsubfx/src/Misc/Master.h" #include "zynaddsubfx/src/Misc/Part.h" #include "zynaddsubfx/src/Misc/Dump.h" SYNTH_T* synth = NULL; int LocalZynAddSubFx::s_instanceCount = 0; LocalZynAddSubFx::LocalZynAddSubFx() : m_master( NULL ), m_ioEngine( NULL ) { for( int i = 0; i < NumKeys; ++i ) { m_runningNotes[i] = 0; } if( s_instanceCount == 0 ) { #ifdef LMMS_BUILD_WIN32 #ifndef __WINPTHREADS_VERSION // (non-portable) initialization of statically linked pthread library pthread_win32_process_attach_np(); pthread_win32_thread_attach_np(); #endif #endif initConfig(); synth = new SYNTH_T; synth->oscilsize = config.cfg.OscilSize; synth->alias(); srand( time( NULL ) ); denormalkillbuf = new float[synth->buffersize]; for( int i = 0; i < synth->buffersize; ++i ) { denormalkillbuf[i] = (RND-0.5)*1e-16; } } ++s_instanceCount; m_ioEngine = new NulEngine; m_master = new Master(); m_master->swaplr = 0; } LocalZynAddSubFx::~LocalZynAddSubFx() { delete m_master; delete m_ioEngine; if( --s_instanceCount == 0 ) { delete[] denormalkillbuf; } } void LocalZynAddSubFx::initConfig() { config.init(); config.cfg.GzipCompression = 0; } void LocalZynAddSubFx::setSampleRate( int sampleRate ) { synth->samplerate = sampleRate; synth->alias(); } void LocalZynAddSubFx::setBufferSize( int bufferSize ) { synth->buffersize = bufferSize; synth->alias(); } void LocalZynAddSubFx::saveXML( const std::string & _filename ) { char * name = strdup( _filename.c_str() ); m_master->saveXML( name ); free( name ); } void LocalZynAddSubFx::loadXML( const std::string & _filename ) { char * f = strdup( _filename.c_str() ); pthread_mutex_lock( &m_master->mutex ); m_master->defaults(); m_master->loadXML( f ); pthread_mutex_unlock( &m_master->mutex ); m_master->applyparameters(); unlink( f ); free( f ); } void LocalZynAddSubFx::loadPreset( const std::string & _filename, int _part ) { char * f = strdup( _filename.c_str() ); pthread_mutex_lock( &m_master->mutex ); m_master->part[_part]->defaultsinstrument(); m_master->part[_part]->loadXMLinstrument( f ); pthread_mutex_unlock( &m_master->mutex ); m_master->applyparameters(); free( f ); } void LocalZynAddSubFx::setPresetDir( const std::string & _dir ) { m_presetsDir = _dir; for( int i = 0; i < MAX_BANK_ROOT_DIRS; ++i ) { if( config.cfg.bankRootDirList[i].empty() ) { config.cfg.bankRootDirList[i] = m_presetsDir; break; } else if( config.cfg.bankRootDirList[i] == m_presetsDir ) { break; } } } void LocalZynAddSubFx::setLmmsWorkingDir( const std::string & _dir ) { if( config.workingDir != NULL ) { free( config.workingDir ); } config.workingDir = strdup( _dir.c_str() ); initConfig(); } void LocalZynAddSubFx::setPitchWheelBendRange( int semitones ) { for( int i = 0; i < NUM_MIDI_PARTS; ++i ) { m_master->part[i]->ctl.setpitchwheelbendrange( semitones * 100 ); } } void LocalZynAddSubFx::processMidiEvent( const MidiEvent& event ) { switch( event.type() ) { case MidiNoteOn: if( event.velocity() > 0 ) { if( event.key() < 0 || event.key() > MidiMaxKey ) { break; } if( m_runningNotes[event.key()] > 0 ) { m_master->noteOff( event.channel(), event.key() ); } ++m_runningNotes[event.key()]; m_master->noteOn( event.channel(), event.key(), event.velocity() ); break; } case MidiNoteOff: if( event.key() < 0 || event.key() > MidiMaxKey ) { break; } if( --m_runningNotes[event.key()] <= 0 ) { m_master->noteOff( event.channel(), event.key() ); } break; case MidiPitchBend: m_master->setController( event.channel(), C_pitchwheel, event.pitchBend()-8192 ); break; case MidiControlChange: m_master->setController( event.channel(), event.controllerNumber(), event.controllerValue() ); break; default: break; } } void LocalZynAddSubFx::processAudio( sampleFrame * _out ) { float outputl[synth->buffersize]; float outputr[synth->buffersize]; m_master->GetAudioOutSamples( synth->buffersize, synth->samplerate, outputl, outputr ); // TODO: move to MixHelpers for( int f = 0; f < synth->buffersize; ++f ) { _out[f][0] = outputl[f]; _out[f][1] = outputr[f]; } } lmms-1.1.3/plugins/zynaddsubfx/LocalZynAddSubFx.h000066400000000000000000000035201247673406200220060ustar00rootroot00000000000000/* * LocalZynAddSubFx.h - local implementation of ZynAddSubFx plugin * * Copyright (c) 2009-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef LOCAL_ZYNADDSUBFX_H #define LOCAL_ZYNADDSUBFX_H #include "MidiEvent.h" #include "note.h" class Master; class NulEngine; class LocalZynAddSubFx { public: LocalZynAddSubFx(); ~LocalZynAddSubFx(); void initConfig(); void setSampleRate( int _sampleRate ); void setBufferSize( int _bufferSize ); void saveXML( const std::string & _filename ); void loadXML( const std::string & _filename ); void loadPreset( const std::string & _filename, int _part = 0 ); void setPresetDir( const std::string & _dir ); void setLmmsWorkingDir( const std::string & _dir ); void setPitchWheelBendRange( int semitones ); void processMidiEvent( const MidiEvent& event ); void processAudio( sampleFrame * _out ); inline Master * master() { return m_master; } protected: static int s_instanceCount; std::string m_presetsDir; int m_runningNotes[NumKeys]; Master * m_master; NulEngine* m_ioEngine; } ; #endif lmms-1.1.3/plugins/zynaddsubfx/README.txt000066400000000000000000000114751247673406200202270ustar00rootroot00000000000000ZynAddSubFX ----------- It is a realtime software synthesizer for Linux and Windows with many features. Please see the docs for details. Copyright (c) 2002-2009 Nasca Octavian Paul and others contributors e-mail: zynaddsubfx AT yahoo D0T com ZynAddSubFX is free program and is distributed WITH NO WARRANTY. It is licensed under GNU General Public License version 2 (and only version 2) - see the file COPYING. --==## PLEASE SHARE YOUR INSTRUMENTS/MASTER SETTINGS ##==-- --==## MADE WITH ZynAddSubFX ##==-- Here is the mailing list where you can share your patches with others: http://lists.sourceforge.net/mailman/listinfo/zynaddsubfx-user The project page is http://sourceforge.net/projects/zynaddsubfx or http://zynaddsubfx.sourceforge.net ZynAddSubFX is also available on many Internet sites like: http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html (Planet CCRMA) http://www.hitsquad.com/smm/programs/ZynAddSubFX/ http://freshmeat.net/projects/zynaddsubfx/ http://ibiblio.org/pub/Linux/apps/sound/midi/ or search "ZynAddSubFX" on a search engine (like www.google.com). Requirements: ------------- - a fast computer - Linux (tested with RedHat 7.2,7.3,etc.) or Windows - FFTW 2.x.x or 3.x.x (tested with fftw 2.0.5, 2.1.3, and 3.1.3) - necessary for Fast Fourier computations - MXML-2.5 library from www.minixml.org - zlib library from http://www.zlib.org - this exists in most Linux distributions - (for Linux) OpenSoundSystem (OSS) (if you don't have ALSA, only) - (for Windows) pthreads, portaudio Not required, but recommended: --------------------------- - FLTK 1.x.x (tested with fltk 1.1.0, 1.1.1, 1.1.2,etc.) - ALSA 0.9.x or later (with OSS emulation, if you don't use JACK) - JACKit - if you want to use it you must enable compilation for JACK in Makefile.inc - a VST host for the VST version Compilation: ------------ If you want to compile on Windows, please read compile.win32 file. If you don't know how to compile, you may download binaries from Planet CCRMA (see above, on sites). First set what should sound input/ouput should use in Makefile.inc in src/ directory. Then "make" from the "src/" directory. Hope all goes right. If the compiler complains something about FFTwrapper.h and FFTW library headers(rfftw.h or fftw.h) please read the docs from DSP/FFTwrapper.h . To compile the Spliter, run "make" from the "Spliter" directory. To compile the Controller, run "make" from the "Controller" directory. Running on LINUX ---------------- *AUDIO OUTPUT A) OSS (Open Sound System) B) JACK (JACK Audio Connection Kit) *MIDI INPUT* There are 2 possibilities of midi inputs (depends on what you have chosen in Makefile.inc to use - OSS or ALSA). A) ALSA (Advanced Linux Sound Architecture) 1) Launch ZynAddSubFX 2) ZynAddSubFX will make a virtual MIDI port. You can connect other midi devices (like a real MIDI keyboard, midi sequencers which supports ALSA or virtual keyboard - like vkeybd). To connect, use "aconnect" or "alsa-patch-bay"; usualy the port of ZynAddSubFX is 128:0 or 129:0. 3) You are ready to play It is possible to use midi sequencer/other software that doesn't supports ALSA with ZynAddSubFX, but this is a bit more complicated. Search on Internet for "HOWTO Use MIDI Sequencers With Softsynths" by Frank Barknecht, if you want to do this. B) OSS (Open Sound System) 1) Launch ZynAddSubFX 2) Connect the MIDI keyboard As you have seen the OSS option needs a real midi keyboard. If you don't have it, you can download/install ALSA from www.alsa-project.org Running on WINDOWS ------------------ If you launch zynaddsubfx.exe and nothing happens, you need pthreadGC.dll in the same directory (or windows directory). The dll files are distribuited with ZynAddSubFX windows binaries. It might be possible that the latency will be very high. If this happens, you have to set the environment variable PA_MIN_LATENCY_MSEC to a value that represents the latency in miliseconds. Eg: (in autoexec.bat or launched before running ZynAddSubFX) "set PA_MIN_LATENCY_MSEC=50" Warning: if the value is too low, you might encounter severe dropouts on ZynAddSubFX. You'll have to set to a higher value and turn off automated background tasks (like virus scanners, email clients, etc.). If you have more cards, you can select the desired card where you can play audio with the environment variable "PA_RECOMMENDED_OUTPUT_DEVICE" Eg: "set PA_RECOMMENDED_OUTPUT_DEVICE=1" A better way to set all of this, I will put on next versions. Please send me instruments,banks,master settings,songs(midi+...xmz files) done with ZynAddSubFX. I'll appreciate this. Have fun! :-) --The ZynAddSubFX team lmms-1.1.3/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp000066400000000000000000000146001247673406200225430ustar00rootroot00000000000000/* * RemoteZynAddSubFx.cpp - ZynAddSubFx-embedding plugin * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include #ifdef LMMS_BUILD_WIN32 #include #endif #include #define BUILD_REMOTE_PLUGIN_CLIENT #include "note.h" #include "RemotePlugin.h" #include "RemoteZynAddSubFx.h" #include "LocalZynAddSubFx.h" #include "zynaddsubfx/src/Nio/Nio.h" #include "zynaddsubfx/src/UI/MasterUI.h" #include class RemoteZynAddSubFx : public RemotePluginClient, public LocalZynAddSubFx { public: RemoteZynAddSubFx( int _shm_in, int _shm_out ) : RemotePluginClient( _shm_in, _shm_out ), LocalZynAddSubFx(), m_guiSleepTime( 100 ), m_guiExit( false ) { Nio::start(); setInputCount( 0 ); sendMessage( IdInitDone ); waitForMessage( IdInitDone ); pthread_mutex_init( &m_guiMutex, NULL ); pthread_create( &m_guiThreadHandle, NULL, guiThread, this ); } virtual ~RemoteZynAddSubFx() { m_guiExit = true; #ifdef LMMS_BUILD_WIN32 Sleep( m_guiSleepTime * 2 ); #else usleep( m_guiSleepTime * 2 * 1000 ); #endif Nio::stop(); } virtual void updateSampleRate() { LocalZynAddSubFx::setSampleRate( sampleRate() ); } virtual void updateBufferSize() { LocalZynAddSubFx::setBufferSize( bufferSize() ); } void run() { message m; while( ( m = receiveMessage() ).id != IdQuit ) { pthread_mutex_lock( &m_master->mutex ); processMessage( m ); pthread_mutex_unlock( &m_master->mutex ); } } virtual bool processMessage( const message & _m ) { switch( _m.id ) { case IdQuit: break; case IdShowUI: case IdHideUI: case IdLoadSettingsFromFile: case IdLoadPresetFile: pthread_mutex_lock( &m_guiMutex ); m_guiMessages.push( _m ); pthread_mutex_unlock( &m_guiMutex ); break; case IdSaveSettingsToFile: { LocalZynAddSubFx::saveXML( _m.getString() ); sendMessage( IdSaveSettingsToFile ); break; } case IdZasfPresetDirectory: LocalZynAddSubFx::setPresetDir( _m.getString() ); break; case IdZasfLmmsWorkingDirectory: LocalZynAddSubFx::setLmmsWorkingDir( _m.getString() ); break; case IdZasfSetPitchWheelBendRange: LocalZynAddSubFx::setPitchWheelBendRange( _m.getInt() ); break; default: return RemotePluginClient::processMessage( _m ); } return true; } // all functions are called while m_master->mutex is held virtual void processMidiEvent( const MidiEvent& event, const f_cnt_t /* _offset */ ) { LocalZynAddSubFx::processMidiEvent( event ); } virtual void process( const sampleFrame * _in, sampleFrame * _out ) { LocalZynAddSubFx::processAudio( _out ); } static void * guiThread( void * _arg ) { RemoteZynAddSubFx * _this = static_cast( _arg ); _this->guiThread(); return NULL; } private: void guiThread(); const int m_guiSleepTime; pthread_t m_guiThreadHandle; pthread_mutex_t m_guiMutex; std::queue m_guiMessages; bool m_guiExit; } ; void RemoteZynAddSubFx::guiThread() { int exitProgram = 0; MasterUI * ui = NULL; while( !m_guiExit ) { if( ui ) { Fl::wait( m_guiSleepTime / 1000.0 ); } else { #ifdef LMMS_BUILD_WIN32 Sleep( m_guiSleepTime ); #else usleep( m_guiSleepTime*1000 ); #endif } if( exitProgram == 1 ) { pthread_mutex_lock( &m_master->mutex ); sendMessage( IdHideUI ); exitProgram = 0; pthread_mutex_unlock( &m_master->mutex ); } pthread_mutex_lock( &m_guiMutex ); while( m_guiMessages.size() ) { RemotePluginClient::message m = m_guiMessages.front(); m_guiMessages.pop(); switch( m.id ) { case IdShowUI: // we only create GUI if( !ui ) { Fl::scheme( "plastic" ); ui = new MasterUI( m_master, &exitProgram ); } ui->showUI(); ui->refresh_master_ui(); break; case IdLoadSettingsFromFile: { LocalZynAddSubFx::loadXML( m.getString() ); if( ui ) { ui->refresh_master_ui(); } pthread_mutex_lock( &m_master->mutex ); sendMessage( IdLoadSettingsFromFile ); pthread_mutex_unlock( &m_master->mutex ); break; } case IdLoadPresetFile: { LocalZynAddSubFx::loadPreset( m.getString(), ui ? ui->npartcounter->value()-1 : 0 ); if( ui ) { ui->npartcounter->do_callback(); ui->updatepanel(); ui->refresh_master_ui(); } pthread_mutex_lock( &m_master->mutex ); sendMessage( IdLoadPresetFile ); pthread_mutex_unlock( &m_master->mutex ); break; } default: break; } } pthread_mutex_unlock( &m_guiMutex ); } Fl::flush(); delete ui; } int main( int _argc, char * * _argv ) { if( _argc < 3 ) { fprintf( stderr, "not enough arguments\n" ); return -1; } #ifdef LMMS_BUILD_WIN32 #ifndef __WINPTHREADS_VERSION // (non-portable) initialization of statically linked pthread library pthread_win32_process_attach_np(); pthread_win32_thread_attach_np(); #endif #endif RemoteZynAddSubFx * remoteZASF = new RemoteZynAddSubFx( atoi( _argv[1] ), atoi( _argv[2] ) ); remoteZASF->run(); delete remoteZASF; #ifdef LMMS_BUILD_WIN32 #ifndef __WINPTHREADS_VERSION pthread_win32_thread_detach_np(); pthread_win32_process_detach_np(); #endif #endif return 0; } #ifdef NTK_GUI static Fl_Tiled_Image *module_backdrop; #endif void set_module_parameters ( Fl_Widget *o ) { #ifdef NTK_GUI o->box( FL_DOWN_FRAME ); o->align( o->align() | FL_ALIGN_IMAGE_BACKDROP ); o->color( FL_BLACK ); o->image( module_backdrop ); o->labeltype( FL_SHADOW_LABEL ); #else o->box( FL_PLASTIC_UP_BOX ); o->color( FL_CYAN ); o->labeltype( FL_EMBOSSED_LABEL ); #endif } lmms-1.1.3/plugins/zynaddsubfx/RemoteZynAddSubFx.h000066400000000000000000000022021247673406200222030ustar00rootroot00000000000000/* * RemoteZynAddSubFx.h - ZynAddSubFX-embedding plugin * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef REMOTE_ZYNADDSUBFX_H #define REMOTE_ZYNADDSUBFX_H #include "RemotePlugin.h" enum ZasfRemoteMessageIDs { IdZasfPresetDirectory = IdUserBase, IdZasfLmmsWorkingDirectory, IdZasfSetPitchWheelBendRange } ; #endif lmms-1.1.3/plugins/zynaddsubfx/ZynAddSubFx.cpp000066400000000000000000000413741247673406200213770ustar00rootroot00000000000000/* * ZynAddSubFx.cpp - ZynAddSubxFX-embedding plugin * * Copyright (c) 2008-2014 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #include "lmmsconfig.h" #ifndef LMMS_BUILD_APPLE #include #endif #ifdef LMMS_BUILD_APPLE #include #endif #include #include #include #include #include "ZynAddSubFx.h" #include "engine.h" #include "knob.h" #include "led_checkbox.h" #include "DataFile.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" #include "gui_templates.h" #include "string_pair_drag.h" #include "RemoteZynAddSubFx.h" #include "LocalZynAddSubFx.h" #include "ControllerConnection.h" #include "embed.cpp" #include "moc_ZynAddSubFx.cxx" extern "C" { Plugin::Descriptor PLUGIN_EXPORT zynaddsubfx_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), "ZynAddSubFX", QT_TRANSLATE_NOOP( "pluginBrowser", "Embedded ZynAddSubFX" ), "Tobias Doerffel ", 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), "xiz", NULL, } ; } ZynAddSubFxRemotePlugin::ZynAddSubFxRemotePlugin() : QObject(), RemotePlugin() { init( "RemoteZynAddSubFx", false ); } ZynAddSubFxRemotePlugin::~ZynAddSubFxRemotePlugin() { } bool ZynAddSubFxRemotePlugin::processMessage( const message & _m ) { switch( _m.id ) { case IdHideUI: emit clickedCloseButton(); return true; default: break; } return RemotePlugin::processMessage( _m ); } ZynAddSubFxInstrument::ZynAddSubFxInstrument( InstrumentTrack * _instrumentTrack ) : Instrument( _instrumentTrack, &zynaddsubfx_plugin_descriptor ), m_hasGUI( false ), m_plugin( NULL ), m_remotePlugin( NULL ), m_portamentoModel( 0, 0, 127, 1, this, tr( "Portamento" ) ), m_filterFreqModel( 64, 0, 127, 1, this, tr( "Filter Frequency" ) ), m_filterQModel( 64, 0, 127, 1, this, tr( "Filter Resonance" ) ), m_bandwidthModel( 64, 0, 127, 1, this, tr( "Bandwidth" ) ), m_fmGainModel( 127, 0, 127, 1, this, tr( "FM Gain" ) ), m_resCenterFreqModel( 64, 0, 127, 1, this, tr( "Resonance Center Frequency" ) ), m_resBandwidthModel( 64, 0, 127, 1, this, tr( "Resonance Bandwidth" ) ), m_forwardMidiCcModel( true, this, tr( "Forward MIDI Control Change Events" ) ) { initPlugin(); connect( &m_portamentoModel, SIGNAL( dataChanged() ), this, SLOT( updatePortamento() ) ); connect( &m_filterFreqModel, SIGNAL( dataChanged() ), this, SLOT( updateFilterFreq() ) ); connect( &m_filterQModel, SIGNAL( dataChanged() ), this, SLOT( updateFilterQ() ) ); connect( &m_bandwidthModel, SIGNAL( dataChanged() ), this, SLOT( updateBandwidth() ) ); connect( &m_fmGainModel, SIGNAL( dataChanged() ), this, SLOT( updateFmGain() ) ); connect( &m_resCenterFreqModel, SIGNAL( dataChanged() ), this, SLOT( updateResCenterFreq() ) ); connect( &m_resBandwidthModel, SIGNAL( dataChanged() ), this, SLOT( updateResBandwidth() ) ); // now we need a play-handle which cares for calling play() InstrumentPlayHandle * iph = new InstrumentPlayHandle( this ); engine::mixer()->addPlayHandle( iph ); connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( reloadPlugin() ) ); connect( instrumentTrack()->pitchRangeModel(), SIGNAL( dataChanged() ), this, SLOT( updatePitchRange() ) ); } ZynAddSubFxInstrument::~ZynAddSubFxInstrument() { engine::mixer()->removePlayHandles( instrumentTrack() ); m_pluginMutex.lock(); delete m_plugin; delete m_remotePlugin; m_plugin = NULL; m_remotePlugin = NULL; m_pluginMutex.unlock(); } void ZynAddSubFxInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) { m_portamentoModel.saveSettings( _doc, _this, "portamento" ); m_filterFreqModel.saveSettings( _doc, _this, "filterfreq" ); m_filterQModel.saveSettings( _doc, _this, "filterq" ); m_bandwidthModel.saveSettings( _doc, _this, "bandwidth" ); m_fmGainModel.saveSettings( _doc, _this, "fmgain" ); m_resCenterFreqModel.saveSettings( _doc, _this, "rescenterfreq" ); m_resBandwidthModel.saveSettings( _doc, _this, "resbandwidth" ); QString modifiedControllers; for( QMap::ConstIterator it = m_modifiedControllers.begin(); it != m_modifiedControllers.end(); ++it ) { if( it.value() ) { modifiedControllers += QString( "%1," ).arg( it.key() ); } } _this.setAttribute( "modifiedcontrollers", modifiedControllers ); m_forwardMidiCcModel.saveSettings( _doc, _this, "forwardmidicc" ); QTemporaryFile tf; if( tf.open() ) { const std::string fn = QSTR_TO_STDSTR( QDir::toNativeSeparators( tf.fileName() ) ); m_pluginMutex.lock(); if( m_remotePlugin ) { m_remotePlugin->lock(); m_remotePlugin->sendMessage( RemotePlugin::message( IdSaveSettingsToFile ).addString( fn ) ); m_remotePlugin->waitForMessage( IdSaveSettingsToFile ); m_remotePlugin->unlock(); } else { m_plugin->saveXML( fn ); } m_pluginMutex.unlock(); QByteArray a = tf.readAll(); QDomDocument doc( "mydoc" ); if( doc.setContent( a ) ) { QDomNode n = _doc.importNode( doc.documentElement(), true ); _this.appendChild( n ); } } } void ZynAddSubFxInstrument::loadSettings( const QDomElement & _this ) { if( !_this.hasChildNodes() ) { return; } m_portamentoModel.loadSettings( _this, "portamento" ); m_filterFreqModel.loadSettings( _this, "filterfreq" ); m_filterQModel.loadSettings( _this, "filterq" ); m_bandwidthModel.loadSettings( _this, "bandwidth" ); m_fmGainModel.loadSettings( _this, "fmgain" ); m_resCenterFreqModel.loadSettings( _this, "rescenterfreq" ); m_resBandwidthModel.loadSettings( _this, "resbandwidth" ); m_forwardMidiCcModel.loadSettings( _this, "forwardmidicc" ); QDomDocument doc; QDomElement data = _this.firstChildElement( "ZynAddSubFX-data" ); if( data.isNull() ) { data = _this.firstChildElement(); } doc.appendChild( doc.importNode( data, true ) ); QTemporaryFile tf; tf.setAutoRemove( false ); if( tf.open() ) { QByteArray a = doc.toString( 0 ).toUtf8(); tf.write( a ); tf.flush(); const std::string fn = QSTR_TO_STDSTR( QDir::toNativeSeparators( tf.fileName() ) ); m_pluginMutex.lock(); if( m_remotePlugin ) { m_remotePlugin->lock(); m_remotePlugin->sendMessage( RemotePlugin::message( IdLoadSettingsFromFile ).addString( fn ) ); m_remotePlugin->waitForMessage( IdLoadSettingsFromFile ); m_remotePlugin->unlock(); } else { m_plugin->loadXML( fn ); } m_pluginMutex.unlock(); m_modifiedControllers.clear(); foreach( const QString & c, _this.attribute( "modifiedcontrollers" ).split( ',' ) ) { if( !c.isEmpty() ) { switch( c.toInt() ) { case C_portamento: updatePortamento(); break; case C_filtercutoff: updateFilterFreq(); break; case C_filterq: updateFilterQ(); break; case C_bandwidth: updateBandwidth(); break; case C_fmamp: updateFmGain(); break; case C_resonance_center: updateResCenterFreq(); break; case C_resonance_bandwidth: updateResBandwidth(); break; default: break; } } } emit settingsChanged(); } } void ZynAddSubFxInstrument::loadFile( const QString & _file ) { const std::string fn = QSTR_TO_STDSTR( _file ); if( m_remotePlugin ) { m_remotePlugin->lock(); m_remotePlugin->sendMessage( RemotePlugin::message( IdLoadPresetFile ).addString( fn ) ); m_remotePlugin->waitForMessage( IdLoadPresetFile ); m_remotePlugin->unlock(); } else { m_pluginMutex.lock(); m_plugin->loadPreset( fn ); m_pluginMutex.unlock(); } instrumentTrack()->setName( QFileInfo( _file ).baseName().replace( QRegExp( "^[0-9]{4}-" ), QString() ) ); m_modifiedControllers.clear(); emit settingsChanged(); } QString ZynAddSubFxInstrument::nodeName() const { return zynaddsubfx_plugin_descriptor.name; } void ZynAddSubFxInstrument::play( sampleFrame * _buf ) { m_pluginMutex.lock(); if( m_remotePlugin ) { m_remotePlugin->process( NULL, _buf ); } else { m_plugin->processAudio( _buf ); } m_pluginMutex.unlock(); instrumentTrack()->processAudioBuffer( _buf, engine::mixer()->framesPerPeriod(), NULL ); } bool ZynAddSubFxInstrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset ) { // do not forward external MIDI Control Change events if the according // LED is not checked if( event.type() == MidiControlChange && event.sourcePort() != this && m_forwardMidiCcModel.value() == false ) { return true; } m_pluginMutex.lock(); if( m_remotePlugin ) { m_remotePlugin->processMidiEvent( event, 0 ); } else { m_plugin->processMidiEvent( event ); } m_pluginMutex.unlock(); return true; } void ZynAddSubFxInstrument::reloadPlugin() { // save state of current plugin instance DataFile m( DataFile::InstrumentTrackSettings ); saveSettings( m, m.content() ); // init plugin (will delete current one and create a new instance) initPlugin(); // and load the settings again loadSettings( m.content() ); } void ZynAddSubFxInstrument::updatePitchRange() { m_pluginMutex.lock(); if( m_remotePlugin ) { m_remotePlugin->sendMessage( RemotePlugin::message( IdZasfSetPitchWheelBendRange ). addInt( instrumentTrack()->midiPitchRange() ) ); } else { m_plugin->setPitchWheelBendRange( instrumentTrack()->midiPitchRange() ); } m_pluginMutex.unlock(); } #define GEN_CC_SLOT(slotname,midictl,modelname) \ void ZynAddSubFxInstrument::slotname() \ { \ sendControlChange( midictl, modelname.value() ); \ m_modifiedControllers[midictl] = true; \ } GEN_CC_SLOT(updatePortamento,C_portamento,m_portamentoModel); GEN_CC_SLOT(updateFilterFreq,C_filtercutoff,m_filterFreqModel); GEN_CC_SLOT(updateFilterQ,C_filterq,m_filterQModel); GEN_CC_SLOT(updateBandwidth,C_bandwidth,m_bandwidthModel); GEN_CC_SLOT(updateFmGain,C_fmamp,m_fmGainModel); GEN_CC_SLOT(updateResCenterFreq,C_resonance_center,m_resCenterFreqModel); GEN_CC_SLOT(updateResBandwidth,C_resonance_bandwidth,m_resBandwidthModel); void ZynAddSubFxInstrument::initPlugin() { m_pluginMutex.lock(); delete m_plugin; delete m_remotePlugin; m_plugin = NULL; m_remotePlugin = NULL; if( m_hasGUI ) { m_remotePlugin = new ZynAddSubFxRemotePlugin(); m_remotePlugin->lock(); m_remotePlugin->waitForInitDone( false ); m_remotePlugin->sendMessage( RemotePlugin::message( IdZasfLmmsWorkingDirectory ). addString( QSTR_TO_STDSTR( QString( configManager::inst()->workingDir() ) ) ) ); m_remotePlugin->sendMessage( RemotePlugin::message( IdZasfPresetDirectory ). addString( QSTR_TO_STDSTR( QString( configManager::inst()->factoryPresetsDir() + QDir::separator() + "ZynAddSubFX" ) ) ) ); m_remotePlugin->updateSampleRate( engine::mixer()->processingSampleRate() ); // temporary workaround until the VST synchronization feature gets stripped out of the RemotePluginClient class // causing not to send buffer size information requests m_remotePlugin->sendMessage( RemotePlugin::message( IdBufferSizeInformation ).addInt( engine::mixer()->framesPerPeriod() ) ); m_remotePlugin->showUI(); m_remotePlugin->unlock(); } else { m_plugin = new LocalZynAddSubFx; m_plugin->setSampleRate( engine::mixer()->processingSampleRate() ); m_plugin->setBufferSize( engine::mixer()->framesPerPeriod() ); } m_pluginMutex.unlock(); } void ZynAddSubFxInstrument::sendControlChange( MidiControllers midiCtl, float value ) { handleMidiEvent( MidiEvent( MidiControlChange, instrumentTrack()->midiPort()->realOutputChannel(), midiCtl, (int) value, this ) ); } PluginView * ZynAddSubFxInstrument::instantiateView( QWidget * _parent ) { return new ZynAddSubFxView( this, _parent ); } ZynAddSubFxView::ZynAddSubFxView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); QGridLayout * l = new QGridLayout( this ); l->setContentsMargins( 20, 80, 10, 10 ); l->setVerticalSpacing( 16 ); l->setHorizontalSpacing( 10 ); m_portamento = new knob( knobBright_26, this ); m_portamento->setHintText( tr( "Portamento:" ) + "", "" ); m_portamento->setLabel( tr( "PORT" ) ); m_filterFreq = new knob( knobBright_26, this ); m_filterFreq->setHintText( tr( "Filter Frequency:" ) + "", "" ); m_filterFreq->setLabel( tr( "FREQ" ) ); m_filterQ = new knob( knobBright_26, this ); m_filterQ->setHintText( tr( "Filter Resonance:" ) + "", "" ); m_filterQ->setLabel( tr( "RES" ) ); m_bandwidth = new knob( knobBright_26, this ); m_bandwidth->setHintText( tr( "Bandwidth:" ) + "", "" ); m_bandwidth->setLabel( tr( "BW" ) ); m_fmGain = new knob( knobBright_26, this ); m_fmGain->setHintText( tr( "FM Gain:" ) + "", "" ); m_fmGain->setLabel( tr( "FM GAIN" ) ); m_resCenterFreq = new knob( knobBright_26, this ); m_resCenterFreq->setHintText( tr( "Resonance center frequency:" ) + "", "" ); m_resCenterFreq->setLabel( tr( "RES CF" ) ); m_resBandwidth = new knob( knobBright_26, this ); m_resBandwidth->setHintText( tr( "Resonance bandwidth:" ) + "", "" ); m_resBandwidth->setLabel( tr( "RES BW" ) ); m_forwardMidiCC = new ledCheckBox( tr( "Forward MIDI Control Changes" ), this ); m_toggleUIButton = new QPushButton( tr( "Show GUI" ), this ); m_toggleUIButton->setCheckable( true ); #ifdef LMMS_BUILD_APPLE m_toggleUIButton->setEnabled( false ); #endif m_toggleUIButton->setChecked( false ); m_toggleUIButton->setIcon( embed::getIconPixmap( "zoom" ) ); m_toggleUIButton->setFont( pointSize<8>( m_toggleUIButton->font() ) ); connect( m_toggleUIButton, SIGNAL( toggled( bool ) ), this, SLOT( toggleUI() ) ); m_toggleUIButton->setWhatsThis( tr( "Click here to show or hide the graphical user interface " "(GUI) of ZynAddSubFX." ) ); l->addWidget( m_toggleUIButton, 0, 0, 1, 4 ); l->setRowStretch( 1, 5 ); l->addWidget( m_portamento, 2, 0 ); l->addWidget( m_filterFreq, 2, 1 ); l->addWidget( m_filterQ, 2, 2 ); l->addWidget( m_bandwidth, 2, 3 ); l->addWidget( m_fmGain, 3, 0 ); l->addWidget( m_resCenterFreq, 3, 1 ); l->addWidget( m_resBandwidth, 3, 2 ); l->addWidget( m_forwardMidiCC, 4, 0, 1, 4 ); l->setRowStretch( 5, 10 ); l->setColumnStretch( 4, 10 ); setAcceptDrops( true ); } ZynAddSubFxView::~ZynAddSubFxView() { } void ZynAddSubFxView::dragEnterEvent( QDragEnterEvent * _dee ) { if( _dee->mimeData()->hasFormat( stringPairDrag::mimeType() ) ) { QString txt = _dee->mimeData()->data( stringPairDrag::mimeType() ); if( txt.section( ':', 0, 0 ) == "pluginpresetfile" ) { _dee->acceptProposedAction(); } else { _dee->ignore(); } } else { _dee->ignore(); } } void ZynAddSubFxView::dropEvent( QDropEvent * _de ) { const QString type = stringPairDrag::decodeKey( _de ); const QString value = stringPairDrag::decodeValue( _de ); if( type == "pluginpresetfile" ) { castModel()->loadFile( value ); _de->accept(); return; } _de->ignore(); } void ZynAddSubFxView::modelChanged() { ZynAddSubFxInstrument * m = castModel(); // set models for controller knobs m_portamento->setModel( &m->m_portamentoModel ); m_filterFreq->setModel( &m->m_filterFreqModel ); m_filterQ->setModel( &m->m_filterQModel ); m_bandwidth->setModel( &m->m_bandwidthModel ); m_fmGain->setModel( &m->m_fmGainModel ); m_resCenterFreq->setModel( &m->m_resCenterFreqModel ); m_resBandwidth->setModel( &m->m_resBandwidthModel ); m_forwardMidiCC->setModel( &m->m_forwardMidiCcModel ); m_toggleUIButton->setChecked( m->m_hasGUI ); } void ZynAddSubFxView::toggleUI() { ZynAddSubFxInstrument * model = castModel(); if( model->m_hasGUI != m_toggleUIButton->isChecked() ) { model->m_hasGUI = m_toggleUIButton->isChecked(); model->reloadPlugin(); if( model->m_remotePlugin ) { connect( model->m_remotePlugin, SIGNAL( clickedCloseButton() ), m_toggleUIButton, SLOT( toggle() ) ); } ControllerConnection::finalizeConnections(); } } extern "C" { // necessary for getting instance out of shared lib Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) { return new ZynAddSubFxInstrument( static_cast( _data ) ); } } lmms-1.1.3/plugins/zynaddsubfx/ZynAddSubFx.h000066400000000000000000000070511247673406200210360ustar00rootroot00000000000000/* * ZynAddSubFx.h - ZynAddSubFX-embedding plugin * * Copyright (c) 2008-2010 Tobias Doerffel * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (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 (see COPYING); if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * */ #ifndef ZYNADDSUBFX_H #define ZYNADDSUBFX_H #include #include #include "AutomatableModel.h" #include "Instrument.h" #include "InstrumentView.h" #include "RemotePlugin.h" #include "zynaddsubfx/src/globals.h" class QPushButton; class LocalZynAddSubFx; class ZynAddSubFxView; class NotePlayHandle; class knob; class ledCheckBox; class ZynAddSubFxRemotePlugin : public QObject, public RemotePlugin { Q_OBJECT public: ZynAddSubFxRemotePlugin(); virtual ~ZynAddSubFxRemotePlugin(); virtual bool processMessage( const message & _m ); signals: void clickedCloseButton(); } ; class ZynAddSubFxInstrument : public Instrument { Q_OBJECT public: ZynAddSubFxInstrument( InstrumentTrack * _instrument_track ); virtual ~ZynAddSubFxInstrument(); virtual void play( sampleFrame * _working_buffer ); virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); virtual void loadFile( const QString & _file ); virtual QString nodeName() const; virtual Flags flags() const { return IsSingleStreamed | IsMidiBased; } virtual PluginView * instantiateView( QWidget * _parent ); private slots: void reloadPlugin(); void updatePitchRange(); void updatePortamento(); void updateFilterFreq(); void updateFilterQ(); void updateBandwidth(); void updateFmGain(); void updateResCenterFreq(); void updateResBandwidth(); private: void initPlugin(); void sendControlChange( MidiControllers midiCtl, float value ); bool m_hasGUI; QMutex m_pluginMutex; LocalZynAddSubFx * m_plugin; ZynAddSubFxRemotePlugin * m_remotePlugin; FloatModel m_portamentoModel; FloatModel m_filterFreqModel; FloatModel m_filterQModel; FloatModel m_bandwidthModel; FloatModel m_fmGainModel; FloatModel m_resCenterFreqModel; FloatModel m_resBandwidthModel; BoolModel m_forwardMidiCcModel; QMap m_modifiedControllers; friend class ZynAddSubFxView; signals: void settingsChanged(); } ; class ZynAddSubFxView : public InstrumentView { Q_OBJECT public: ZynAddSubFxView( Instrument * _instrument, QWidget * _parent ); virtual ~ZynAddSubFxView(); protected: virtual void dragEnterEvent( QDragEnterEvent * _dee ); virtual void dropEvent( QDropEvent * _de ); private: void modelChanged(); QPushButton * m_toggleUIButton; knob * m_portamento; knob * m_filterFreq; knob * m_filterQ; knob * m_bandwidth; knob * m_fmGain; knob * m_resCenterFreq; knob * m_resBandwidth; ledCheckBox * m_forwardMidiCC; private slots: void toggleUI(); } ; #endif lmms-1.1.3/plugins/zynaddsubfx/artwork.png000066400000000000000000002037471247673406200207350ustar00rootroot00000000000000PNG  IHDRj pHYs  tIME 9l IDATxlyeeq.\Oջ9݌ 4c(* 17NQHZM&hL?11&(A !Ƅ8$܌BC7bCӍ9gz?޵7ۂs^V=_8ǵDLDD?o Llr2#2#0)DGC#Ɍ"rS_fd_/^ZiNyЬ=`fQ ~mwOM*s7M@C=ߟ;9M0Oݜ "9B"p &LSL `&?V\/' 1(h}e&-w6"Ȍ|2?Z|1[$ Aɘ%(1{,v.)b́(n!L BfqSIۻ<,L_cDdj̈kO7E?`d@ЩcĉJʦ#&m\EOD LF.]Yq Fflff+7FJ-Z JddO,s% zG"2b?pa2f\.nDlfHsH DLL;h(ŌMlfhsȈ9vAH ̾Ti"Jm,"&b#re=%jO!3bX՘ad0B~; w4 ĠFIشM=K 02RR#R w6#$  LӦr Ē⯌@PHjD~/S=VK&(lxiwz\+O`2`q+Ғ8KIq@ش)Vb#H} 6"x`d(BƲ+yɟB3؟JbX̗GrȈ|%Ʃ'& G/7ό̤ 2S(o3߃m􅙡hmTjZ>%G}~,1i,Tv`ɍ4&S3DYF+ˌA f5*99c\2D#S=2_Si LE~V,FdG620ؘ,g#£+%"R"o"a'@HiJ#uD66&Flp_PgDHBl`2 D9@sD00~<؈763j=QA)gH"U̘fTҘ1UN`dJ 6 TT5KdX_}[يK ֬D8 #㺲cO`XD%Y X ({(`8 Wꨠ;H_A ɦHoMCpvYb:{AJʳ BȓlhK  ɑ(;mAL8IlPPS 8D r, E ӆL-GOdSHHhE4uRT%j!9@{s 3 r&a D]ErJ*md,9̓LTꞁSON~.0J0/NjSs7GOd $Oyj; ƮqqN"΃C[%LoANbV4*̜%PHIj`Vf-ew08b I6"׆Z6) $UR98cQmRUXւR3Ou~s>1K*/\Wjq3/`&w*AkP ` &f%cbHMI~AЍZF9/CR~C#5*8BU~כf\p S/+B[Q 5pcT۔a1\ a:QFP07Lyb R9$BMe;1GsFՌrfZDE3Rlq`(GN Hv,/$Lʎ8) =OmU ֥֧)ʨ8+חZG `f#-zL/Aʦ/u\}P܅"8 ?ȸZf@`2"KFy&-E %z\B 1 090CXf͋8pNU/g߫jvfəfC b;k,[38tҘ˙h=&9e%8!I֯Sl&jm +jYbFu;AjjEiUc+Z<`c#k8,៌9ĪBȬ(JXCoIY$6 8"6~dYK,} 4/] T0GuJjDlH(!77v91%-I+\s"i)NO3H5$Sm[؉P,S!}0fřڝ(*AuXDSUɁp4MSUiN:7|[$ jS >&0lȌ4Y gB|b,<Ё$IE17Ѧ5\mTہM6ݠ$L`S Lb1)@՜bB6#f6k}F\K ցuZ*)hd}Q$Y0¾z-IIݺSt=--2QaPiLDc#FUL@(`)j;&ۣ8SWuZqvVyc{#Kd%fr+L~81̣{]5ǭw~f4;W~^nH)yH}0hP0-hؗTQ&U({ b8< چRAF k D7gE)JS&IULizrtT:EHÅyJEb!TE\,%rl~-6 1a+8!_]<1qY4YqP8TYoY8d_a0)M6pIcD狇\f }:a1[a@ g8?OE* .<'m{'vua' :" mZZ͖SZFfBY 1b!( Uض~*yĚ@j{pDT IEj it|# xc[PMl`krinlxj*?ZDkkК̞νX6ɗFF wr;Q)J|b7\!LҤA*Τ1 vk$V@flČs%lDuox=]Wh4K3N;m<\b ;',EtQj`8"!)uTR)U6aJ %'+::q%`7DK pW Kf]f-\dhQWi$`1{Rݪ:0+8hm 0=3s|[’XQ2HHZ+(_/,/L eA!`3 H̔SJB0fcRD 줋ZGJ 0z#̴K)vrl\6 1"cN҉/}uN;ԝ/W7xɷ~[I6mf҆(g1Y!˜9Sz< H"S2lJdlfN=Dδ%`6m`|XRhd_La 7(a$y]Xk*h hHR F媧YLȞóA,u kDZ%GflHh~+mNi *'-ݑ23 A$ bqi ,$Q %#Qaa~OOkS97~?O8aw^\3L~R 2CXX0+EQ9f*F MV33ͪ*LhTLWUjR ԮV+ϘKX5LY5ͭ< @YVϢFA^Kޘ+Su[alٔU-ul!Bt:SUBbH, Lp-Jnf%ҜMf5x `uhOLp yXpcN;JN,1&HJLfVsM7SφS؉8WBU;u}=矾eL{ =6(VDdI([LTuU 0sILۉ)k9hfk@Y1Ej4I682c@9:t 3,+A4l. ,+)b{ dRb@UV2Db1i0pxTKQ4g>FfͦMqC"2Wh3 LaKJœArꚣ;̔TMՈx짩Y2ݰů΄MC@ cwo4bsk{r_J54=S 'xbm޼?vf#z=%gsK"TM+#k^zUfvHEfpnl6w'>* g_MV&%NESTF (X8 D l,>{|Δ*#RJl"(3i0" 0%ILhU^mfOI!KCRńTL?@ Fʌ+^0jtCfggFqS4MqΜfLf"`&RMfd5լiʹ8(IO^{ʕ"[43US9?m#SS֬MZ$hDw={FIWUI!AD.}Q%[!`XR:=7}ϩfC N3]xէ"0nECՄHLaj^ fRfl<~6v!W$"N;Ι/|i&h`ﯠ b Ftk$'`!GtI}ͪ&r 2)#7Nt yTIMַ~_"ڨjV3UD2TER_yDzc5wvpF93387Ҡaj@Xi&cPb(̴pɧ?~w~eǚΦ6w! 'aI<cRגRҤMfV>:5yw/^LP&KܨYDFå߿>^XXT ;J,Mo|[;w0hX+xLn Hees7Zp6?]dw?C]M豥&dTҶ8t;J⛕I\i{`X֑։,G 81Rfb6GWrşeq1U" $,\91Kbfė. |+K~?f-ǚ>7P(I`?Ņي+"e4МQ$I, >PrkSn_̠p[w1o2&mDijnbN",173cP&1#is000{v;8kTtA,..TM{1I,gyם3ZW2ƍĖڕgk~5V"n3sAF-~޽]gw29db+bەK~{կ`i?وmK[Xfc^RLI ٹe]eaaiCmH?1##Ԁ)Hpe&[k>vTO/!# ͛P^z'*RlJZX F B$c @9ZAIDCHL+ړ[}K%\w:_;Y|gAD|>Z42U7' IDATFLրrR)LJ \$"dI&48 A4o.[9E aL-.._?[P]תd,˼̫{;~g=QfL3IXթ:~7s-г6X}2;~}/xAAWO.ψ,rWzʩ^D6Rjee !khʜ̆KK`_`q~˺z3{H܈I6&Nc\&5lh|8̤$?pqÆo|>ijDkP)zb LN0qĈ2|XbfIq/򤼈'phte=O>???^|`iu1c^2&^iS̨2N)jFf[tx1{ O26@4_w7_עx*`;^w_F/ S%$_9+s ??}|qɪU9|2#%DH1|R8uUČjjZcNVy Q&q3.sB(bw|ǭ9_K?~31e/=e}!S #gk5g"MV:flizuK|}guur46f} pKW˻v;%%Um}D ꤅sDPefBitI&FMd3˦"gwd"$H7- FI*$%15U-QٽќTRM݄m1Ҋd---߰o~o~kffwpYJ&ap $I%IR ki$v1&'$^ Lh4뮻{~d޾#JՄ}UIe3%ҜGk8bRJ:uRdedp`YǯR 3K>1,\tE3h'23<}{ؽ[o$Qt`LDb( 1rΟ[7otM] ܼ7XFqUŤP`H8U4IE00b~'r#>\\Hnjp-2\˖՗^Yzce{l \lmd1.&---)qqDh*}R;(gp¦M6?"3sF_9SiRUUu9 }/I';םNXq㠪Z,qLiS]:a砎&>hq]%aU_u1G1ﶽS>ll"ffCg?4Mso;pVUUzgO~mַbu8Q!H"׭_kŅ;n}OܴqwnJG9d . htԪ'x!\W[-[Lf)y\ _oc]6l4=7x2K=0a~(pML0s2uK/}Mυ0q`g~H_'q~0FSO9u͚5p|ܻw/%3!H0L]$2h1OƜDjJӌڶrN;[n>EkVZ5\Z]lYdjݷ%^ JvyA+Nz˓H$%+Dp"̟%^,rd+fR0-NV?+|;SsIĩW^cǯx冓^~`0<W~Cfq3NzA^w'>>7;v %*'g*f<ܸa޹ٹe[:7;C;J$$HR~߻裎tC;G?$T 3#{s_ş|+8`ggg7me/;is~;ټqE*NpEE*fRiF06nX_n#)R0K,,z+N^\\4*G^O'~ԙ[~G>rq'!S-q:USUtR뺓$UN!"j3N}/,̿] K{x4ZzÍe(LfIɝ6{ޮ]vڛábUDۭ_iƪ2ٴ.#4[d !'vBρs{ Z *nzuIRrgeժ/\qU?S~͍ 1慅t>wvW3uMKKя~裏 ,}wu'23T,U[fU߹k]Dc- Ƌq*I SP:|{w8N}&o&!~Llݺ'?y^׼o!Ν= KKvqRqhNu] ^o _Ϳ\ o;ydLfaa/~\ЌAPh$IURRJNSnݩ뺪R%""'J_ZY5k;sFQg>33G8˔P]y_1 罹FxE]vYs~:o{ !l%\1r|v caSO+xC dnD⑎Ide8y`Iw}SW`䜷m۵bŊ =ɡ׮]\|ꩧ~ Qgu]o7f4͋{5~1KKTw;֯_aæ;*DehpS};.獆^h b ls={8۶=t埯,9g2{{.ZqЊ_W.[) u<;3{<}s _圽}ۥa`L}L{#d0a"Bj㋋ oxѶm+*97HsEt#~K^;5gs2$U$,QSS3+hݛOg:;Γ{T<V2a؏4snZj??я~]{u0YըɰL`^TT͇ѵG1&^`..&4(;wu(S-.,lE]QWa[vnu (4Ʒz2'݀JƷR֜S/cISO=5 B08ׯ޳mvv6 ~^#Fq%U՚k=~K>'Q{xI9ij~~ /xx埿j2EO}?iJoϞzO'.gD7qOLnnǣ/窺" $}#?M>3>&s0szi~i~~駟qo}9&^$_$7/cpMRk̛ʜ C!e#Rc^f߿vWY_?כF?O}=KQ֌Mi<EOOS%k2H(xEd>FJ 7 SN9ennV&-ܱlQYjIH=67|jjxuכqd ݫO9>;A8Xتy9c9ThDk׬*׌_. MdMLu4lW$gc9vvv|WN2iVwK/笖I`J=pm?7v~pqadNmhVl9[4K%p4޸qc}Mt4oܸ_vv5k׮=G} '8D$heZho;kfng^5Gl2*3 !NAղIΖR_׾s9wg'޽gf8ϪYO M R$I+I"`N`g2U3!9 &v=)R]WuŚ6Oo~[^VLmWxn{!ʉ;?}lfEDlcok{67|y睽lYbA{E|QGyqK6䥛[Uy4&u=Åjٹ>t _MU=5LV毾uM iri AUuQ;xO}u;ݪgϾ/~s '{9{߽O\3xס6%T^ԇ-Z{>^w 7zʩk֬'ݡ9ނnwfqy(pZldzթiSN[* ''5?Χ faŕkH' #dk,1DbcuOL!R] yjb DL+Rn8U=e3s}Y?sS$eez[n7qP6o8oe4kltoMv#o"W:|ժޘfn݋KHi:/c^lذ _쌳G }vfvjLRLJzKK;~ۭv †w׾܉i4yrpUwKw΁Gq~EX7Pu | ۻ;5o ΄[_jҠ{-{^Hљ^Vz heE#z!+mX0W$2RzP"9pS?p;z,PDxsC+=NdMJP[zh L Uy|܌]`UQ7-icC0!s@wULP;|pp{?YZGя~pY_xe~; o8A7V⏳EB?Ll0 Կ<ɕ+]à7nؐ>!>8tO&G޽{Z~c=VUu3^T/RҮ]V<4Jƣq=VZ7.j;3vIB$Q>Tzo|?O8^뮽NRU$m 3ʐ`pU~sgko&MlUfggcWWwV5fa I)%9b<Ҍ_xҔX$9 ") JNݭJpGfTUU%v>_NSWuuoOo{`n{'rcBn\..evE$(g'̙yt;1Z$r?~)0w֦Ѧ&knr3vΚ..xrq֭{HuqǎG3Ý2G/M4Bkv)Tܩ)Ր$Ug8Yթ(1W+V[}z=Mj[P]w=Ь_)%S1bXE<Gcx9 1Ҙ|0~Zh4*3RtBYlj,gw;;;{ Kd1K-NJO{}Hy?wpHQSf@./!0 Gc;ݮGv};lz,FRԩh#-IkkQ|Q} (;}iN`4/\ϘV[ ԠD!Muom<7 7.oms־":^OE6:Yi47ySme;֭lhVuFLRnT//8Ǻ8H~\v`}T.0 hY*Pt " e>Ne<{EﹻNޥ=uM˗/kh8 cfv¸X(,2۟!O@^ '+>ul4Dh29[3Vmq3GM3nrDtoќggf/Nf+f_iʕUXRVv[89c@,DX꺪:U[yq:XԅC헷 OܻGvUu7yޛ$ 7"|E@|bnuhtUP]]jU$HB!A M|֜ǜs}Ȱ>Zsaf^XQ%EG-߲<>^'=e;;;k~pp@ߖ4Jy8)|gg\rx̙ӧNznן{>|VO.==uwK IDATӇ{{{xv]g?'ۻ{D .$l$<z/׽u DD b@a)aveb ÿMWvOw;stۤJD!0Qk,,\^/\>~39]v;nƗW,>|}/0S)S qk.w ׭vu_a(P..b8}g>cb^}UB UrM7= 7a ׽udH?3\u_5ð(nrʰ(O}W3gnBŌϘ桻oyoooxJo? z{>vzB$|g`oԙKN_{pwXŢ,_a`g{xgO={v.Y{ONٕ,OR tt(T `Ŏ,xg;>NۓG;;߼ZRag8X,wvEEAm` B.6m>thoV-A&2jNfm, Á{co|KZo#{-5Bw~PrEK_^}y]ė .dxϻP{|>u|;=wp`oyW>UTEojb@}|zZ0,JKe]o9>p}xs6ϒ$'5=E0K7ӷ;86kql珝{[+"!BFJ]z̜CeaTO ;{\zx(‹Ω˞ygo^GA ;{O; R anoYo^͚RUfVImGV#mZjˣ__`Zo֛fYmvnQu4j(;E/j_PǟX?9H-.Ս* 4!0"l_rG>i[T2U;wGϭ/}1jv_Zo7r\M7w^xQ3Z o2+s|t\Ͼ⊷'Ao-J~;u3g.]N>?U[oַT>uw-MoMϼ'~'.9sFʐGP~7ypp E~9yrZ/~OT)eo7~.J|@kAu7h@=\w.?:6:ucZ__?ԅAT Z/z,cD##Zk^7۷} <& } PUq+yf;6 ojMzvJ/vao׀m۬כrU7qnq;mkjjʚeXj`w&1Px 8[^p 7UMIHMJ 3U5VCf0*?U(T&n^kNDMjլ?͖ZVMJYa5mj w~݃ڔAMi#kj1m݋axYn7ͷa?٨mly;-կH#JլUnz?Ҍ.…f뷿{'۱U֪m};~7[ǺjEfţոi3s?Нvtr=6qX7qclu[cλ~כg?u_oCq E BRSOӟ~M/l\xxy3q|ٳu5S:8}/:ȃs//}{7eӦ-+E[(OBfEڶow}u\?]UT&u׵}p>DM??7v˟/+?\c79pcA律DZU?r_} vqOuϕ^.Ϟ\7{k[M2rW|}zÃZ[9j㧋x/}ƥd}n߯uudt 3ٳW_}wO=-Ԩ~UUW]X,>[S'욙j3 Go|,sSm>ag</{bh e׼Ka‹&}s5;{\z㽷ˮկ}rY/=} /z _C9W]#$co~[ju|||tt^G>k~k"\\~mUMS#YDRPɱzE` yWڦ&}OM[[VU[k׆z=# rFq XDSʴZd`%A5u N ~ wO,ڬ ZC]U%#WY ]P3|MCo$E"ϨYVS+n|i&/1d*a-FڬLɬEzj6q 4b|UaL?tu|)s!jxQg>Q !aX,nyӼ8u5_.߬f5roѱ׼w]|c_rŗ=Ӗ߷ެc]-j^55."\" BBb1vbJJ#G+9H3VdWʥ8x}]G[?xgSԚ5L3Ua*?N ]ݍ׌)[QY.ܽRa|eaMFjGx1!sy̬jf%R"W,TI Y}£b׼Ǻn֛zA^Wn2{5'{{%֛fCmݬ׫W='W=CGHFFt6|-}o1fFhXPp]:v^^хg?ή]6%QrK D Y32QPL #T@bhxɕ,ijfG=)x' M )( _5;iL O3 s܉ hYN:͌:?#m,=2óB,52{ ѰfL6Ԉ֛nGs?wG9{~1Vk۶q^]Wˮ|6[׾)3_w3{-7E珏\ZX]b ^x]#&os<]Т`AURm&!5QS¬V~n\AFpfPS@܂쏪$24-.1XlBx۠iOx:9AW!؜eI9!^,LCO w D;F\3:yהD-WdY,3ٽea_)R#ӏ5P -"mlZifm-b&2)5&j$$—Z3Y^3O>p%Ziӝ>CG]/c3[W|) V+7ٛͺ֑YvsG_V 6tSbt؁P3mW͟M)\[:#2w3;t<<^3ol=QMah;@iͤq7t.4B2 fgzT^,"o FC:x[fB2)MQ'DS(=ڶf$u,+{^2z_yv.oW~ո٪j3Ǻ{x|'?K~@lZk]8}ϿzIږMq*¹~؛A҃5VLTloMWA@pO#!*p+}j&6xEj/R/JۣL(+ C [pCeRp42CQ\8r8&sS}FPH&b̑o,dE6xЃ̚&F-L(#@֫Oz[VEYd6e,ONRXV^e3؂X Dň q@Dh~VPf\j| ~{.GCnmfSC8֣ժ6DvŕG>JfWUDY3%/ 60D0iֱV,,jDv y4 @|H\Q鎻;>BU5R/wÑ=z$]!ka[0mBCk35Rm{pv?)m2 qǢx VGid o~ܡ=&3y|؏)Ѩ7J@mR5ٜz<57l #H%4sȀZWi?ܚהF$XTׁШZ7aRХϻKwz3g_ܗb:޶5XǺգo~ã|W#ҫڪR"2On 氪jSRb(sK>2~u|cm ֔l @i.{X@;XE`XS"aʵڭ`.*^wϋ 3Cd0$@RG'P1j3-u9\alB`SkgA/M1h"ҦDTGZ{GRF5y]sh1n)B g_]pc4d"K Eqzlm4q\=_<:a1ז U,ڭ1 {vtMQmx>}l^16eRKGpanfD6Д4zԯiNfOPۈ0N~0 3@0]̙M^ϩc>xa$'֚yX^RU"4 Tխfj*ʫp)wU/00IsV(73߫'s+櫆{ 4jH͜HiWj٪I]Vb,ElplE,b328egyv8a ])ɒ5H}taQS*pNu~ŝMeS[~A=-BA߁h@4~̦J⩷J 4r+- hL))X .z9J]hWa5,瀞p`+H#= {/K5܉Ӆ>Z +)$20t{>ީ+Hk 9;>(D[DX+Uk>Gؚ__6Ui3 lβBtJ3R(YϪC "!بm l1G &%*fn+몂ܤ'Mߒg?!%/D@rrѲ/S<,w|B# @\SDD`Ό"Z@ a ~VԔ mGsS'!%"1ᲡQp HS3oY? 0jkzj'O-L8 D?$G$lSnvqEضrXyz@StD9I!X:8QtAcsЕA$!OPI9`Q!WQYeDn#^0i*stbHJpN@,mGtp NX `T8m=ڴQO:OE34N{R$ŢڝfhwdTk"(ƈpd#KdM򧈬_SB?pSZbƀ8m4 j,耨,e_%`J #(sz(X@ j5+OG`$Wd('h,uc ?rߠ,ٯ,|7QRE)wClp`YcuicDDOY[N&N,tJƤF$ kiCNDYpDh3r7 )TQǰYYpd7yoq[˅- ҡ嘁6.I /(^C3и8Z 6kqbeP~]ͯ "d>S9#<=3y×_f,%Gy6zi{gfbvr66!Q ̜G {1fN?-;E1-p@y cYjX$QKwE3s5#SPQc IDATJV@qKljP8ȵ8LegED p J>D>@6'6Sla͘G)1f&M9E?A$cfqLpR@ {E#f]rwE'Hk]ByL8a(fQWɂg 9!X1B {9HL> SF@llp׈Zԗ )hcY!/Б784EKCi "f>Ƞ~fWtSV3Fnl?2h ΘHaY/BAOA$d $W7%Db6j|Fk%/< 3S,(i6oUrfDQ8 8 Q &3x9QۨFKAs3#fsm0 G=Kd Ss'A~Bb d=N9 -0C s|s*vL5ZMC!URA&c8|bL b` Wa@7gn1[tbvdG0SfUAKdW43p,EqwCHbWT'A';COC'ymUgcTs UmNӬԤj},`6p, L-Vs_zO8yKpnd@i2S:=)-'U<ڍ (F9BǏd*cpz)A kɨp>T@xQ,׉H32sVg)}<M -GkCӕw8)SA7KFH Ά`G0aÙvFcqs @a+j }XR;=EKg="#a5|OٙLԔS4eITUm'[sג7HPHH`GxwVFѶIsr3g?dT0̜ i$5Ey konp_ٮ"9򦥠$ck H~KD՝3CT)x'vPrz7Pā?!q@K7ը!=5elTZ91FTO`nyP$ղQ4F#raWzD C ю+ig3dB!5M oDbϦgxBGU 'T:>Gw5FVի^UDGD~6|73P9i&DZ#f%Ur+ƉĀDq @ 1Q5~ý( O}fւAXY>v9fvW6BԌEhz@[\ tI q!{0i-b̚z4M$+}$H1iYo)p- ̨V|~Y#wL4DoB8oɯ )7=OX'Xrtu;iV<]mi`N/U;ol6W Pn'=_BL2xOz}?c$+Fi1flYA̪ @US}mͿxqҿ@)䶦 iZU5R6Ȯ˜2G~# 'j+fuWy_}q6D3$oI}u;Ŗӽ}x0̞/=~Ig"pB&䯉O2'5fȰ{j[>S{8O/Z|ګ|?a{ԯד~Yͅ盂?ࣟ}PiiO Lamjt+o5\+ CnGa&T8"V$s"{ ƜW4wKAO^ѤmdU@iBO:֑I>O*2=vYsCSɖf+Z&+:dw]4~E6`$+dtՓ=9ufS"{>33cw3.y.T9WIe Jpj<*")'`h]r9P^)6cΩdf@Bsp-I ZGՈ>ɪ|9 BJXIDBp4P}Ϳj7lP5f( Oqʔը\杄?Z. fW()+L?c@Ƞ\;Q -@Fy/.W ^)+̔YjS!8B)VZ \ID-#-/=vq׺ ɉsQ(Qv\!nȚ`,S)u 0 %.yLlT=O1o0ܲq͈2]mh-;OIqnC!'>7!hTp4Apmz1CQ||KdJΔ'QBEmdL\u{N Hf Aaj=*DFM#8}3kC 2snJV7!imonf-8<115a*F}|4WI.caMO  Fr2!"u_.ԝLB*}Y۰M͒yKզC` - [LuSjIo֘sf?Gω] bPcC@תN7pPI02H-Y7@j0Oj\3bqkUVZUr1c.ֶiW#z.s,ChIr298Y=J@13؂`f,M9GCbs-cA U3 C,TKF8@92Ή3PZmX+ 9 šLVB UGFIoӮɠ)or5R Sՠ33H3%lXlBιi9_2 uAޚsu44`?h+t` O-Bg<%ܡX#p"һʬ$R\*"֎QBFTb:_P.CX,hsm^ ~WÊubMՖDƁڜEXuXUs_,T]Gwa̞1 p5zG uNYrq1L 4$'\E`kBlvr&ZE{ET:@Acң1q4Rz$4GPeR:#Q#c5X)_*r…H ;ͬ7R "Dq y^BИEW5gy6ql0l fnPZ^53f JȂrJ|%ErC}5H3D|{~-b!ƦrkbJm*a+wrR2.*$Pc&#Hϓ>o66xH1@|4pHUf?f7,A+M͵~j`<}q?'fUmP5o[7WC7&O}{GM \#ID ~L:bP:w^;Wr3:G1 @\/U9+)peM;,*ňzMrp\ƊN0LHMgpS2m47фOxhQ0@13@k#6IDQ4[[ MyF\h%2.c7 8- LE 0I46#FkH %K4VmJXL&H6e0}=K?pWeh̆,u۽+`ԙf!0afXa0fAj` sngdV$5(ԓ^%X6Yk434AÀOMzKF(҄odXS9#U'y)2Q;S5ZsySdFr?[os'e}I;?"H; Jg <ԍݲQ|ZبU9fb#qt9C5DՔgd ia PXs&AzL #+-G>ޒ'l!Oɩ#,}:#IC_6#9Pय2=s>Cؕ*%KXb^v3%%ڏPO|6u !}:OiF(ҼN$iz;)an>EIt۟~2զ 9uQJY`ȁjSG_&"=P΅fp;2-ĩcgc=v:I'm}!Q []34#)R닯#m#tտ^SBm6P20Q1'}26S'敘JleXg҇7KXrmV/t M lb8M<֎`"sGU֡ .<Y&f {,DiTSc#%Ǚ"ѺulO:쁋Ii?qP:{@aW9q)H/>a-}w8 Lձ` S0ZkT X+-N{`h")gW4h@>y6fDγQi7#sլݟ[`DRdž <7yfTUYh=ٍE28vNK$υԪ9sEڜ%hn^c F O2$4ItxDتZ' @C2-9,7ŕ15M <,a4;w;)E5э)9Ɩ%$2=CE$xBusEa3bf$=!O=' ThnO (IB!d6} ܹ>^eܱDŽBUɉT2HK!m-F &( 7wC }槖OJ`@CX.MI$G$eseE3l834 Jfhf x2`%VࡀHa%+v< dڦi1Z\P&^'8i5MCy5o8k+.g?N1#ZBڼ IDATN#L!nepI nNj9Ef,M6DRX'a4󣉉Kvjd.a|" X7dK1k I,2,h*[θj2=!I8QFx:G.v>N^m=ΔiDԬ!UIj.Ksg@`r(YN1 Nz٘ Xf&4כ=Ôk,=Jd4Q6v4ô?³`vI';ɜu"0wSJka2U%DC[b1wٌE* &`up&C_VWVy[&9oP'(^ޓ/g X5܆Lၵsc&B_l2KKDB+4X砑;9ת"=#?Q %)d(9Jd)XhZ)h2GwDFsi͘U2(Ij[/c\`_ϳ{o1=3@bgl;9L Ξd=#4mV-)3( ;aP!Dm`:()qI2:=@L )DVȌP:{^K`QhZ-(F',aɳ7vYHiyB1@ 6*x5?aH#*\e#bQUMNԺS*C%[Րwt JgU`v9sVvSI"zMaЪ1| }$XF|Ň6p *q1)|C*L٥d~7\Tn^&%hAДKXAkls:HUCݎP`hLPfkFE0Si#5K3J4X,NT:~yY%) (Sx1a,- ǶKFIaB`2]+]oPi Y찴ϵzfu 6(2g~Ǧ<Yˇ>$@k}>^5==a&ox{&'7BHU"Y9/bҤ3>5YKZ^ąu%h-*Fps0'(A#%f'1QcZۑ02†.&e?8YFŜYZ| M0TdWKP88$LD2ȸmR8ȱ3Pgz5 fZ,J LoygQ!m$~.3ԏ ?%A}Ʀ抃EljbRkdbLA@MLDL2uJ˟B(=Pz8M${S$·L%)'9Y&MS@ZKm٠@eSI5EZ{XUppSPJ!+3i2H3Mf/|ڂPB< lP=3\g3LP4/]/a,^,ҷPb&p@\蓚jN2US2ƙ<'ǣ 4\#I A oR`j3"g#KHu; gC h#N5ƍT.>.,Yokۖys̗4Zz۸*4B TT93Ϟc1纅-i=w@}v"Zr=;4<ԋ4Дw=[yVޠopb_׿;F\l ֓WK #NTUwOD~bgN)Zxʱ K3Tm1]Rp1ab2>%J!G:u@[?FJ6`kЩsY+Ϲ aj\XOfKߌ 熚Hŏh  Bz29t=NkxZR,F+syrfTJ맧$Z2 hRTd |C838W05 ^]SќEF_};]VDBb)q9r~1z珑lNY(|2sc VrJu=gޓ[AH}׊eQϙ5}1d{8<4UR~-! >ƛ< LrHx:t=tHLQfYʌjeWkow tOEj RmNOŅkZz5UMvMT"JIK/]BOsýeT|kC<9h'q9AR2[E26i S0ZczJĶ_~|F 2 %(qhzMfYw[>*OƉ#-;3HvihN~15-DCS`IDzOBKj(]@#1u!na㧌xRyhj5݃{CL{=z4X|sl $ᅤ9,W.9'fpp^gDjR\TdӌL\"y'Hu!Op*v/bxNp5] Uڑ3u8 vbrʁ"OKʙCRJ}keܸJ5 dbe3P큃'zf&$$0911o V7bBѬ{D"T|Jq\P -,k#Z!0CzZ" ,9?v/X_owBX e*ᮑa)hy4dF(qvSh3=C1/#T=autPqֹXK 2k?}0cEU"2S)=fJIRF-&J#hMd!N^-9O~z쒨c6[ϊϐ]ijduw8+WjK8ɌNp( s{!% *L?.ֈfND:tLp(/b )9Y7c.[9W;w35|wę㕅ѱO|Wiv)tRxQѼu";ȲWochĬ mUI ڬc@rߚ]b|tل  ."S{/c˥L!mQた~DɊ-Esͤw.fcNd8c:8G2SLV>" pfe˿Ww_|Wo?>بaN1ô|Ȟ9t_'N4qP=q$km*IYddVh @wB\5|u 4zTf vhR%G턂-&l N;wBr{HN5=-iܒshVj31-rI,y`ϧ?_΂`ʦ-lOhBڐ1Fh8r:cۥ)Y횊_> ȱ0({eDkTeV3 zi/Ytyԅ0-@Ot^ۤA}i tv6J_ܳ5 ]@@>&P45w `uDY İgvj[NPw5W\sˠ|'.ñ7wkeK޹ykU_Wt__t0/X@<HV $]6d-.˄V$*mגܫH #CjRR !B ]Vg˿Z驳FvsF }O``sSB[3`:}%le`}u)5a;uT&9D.ΡPqIxL->rFFHAo"w70& Nեg@boa +@n݌jƊTg0r;DbEfw'*2Ǚ@FX~_Q<. Ȧ^:-A_|9'T^1*/o*l5\\/'rt֔g v'8`~?ݟ JHbgmm.@ߣ33MWfEx%nP 98,| TRQSCLd\_K9x"eY|lx=pG ѻ"T ~k-콿kW#l^* !/Q=AY"72JO6p=K]=v>.{x'gXl ?}= ?߸~dހRQpdˉH}1k(w򣙓ǫ0^㲌K=SŢ3tnEKjAIK|୦A10XN9zp=kzBFr `DFʔ30{Upt/*.(NaܪtZ&'|}}QU< x/:8`'~*԰U'=hH|hq&͹>#ީuσ0LO4h.Hj<$dƖ!tZ5> G$u?Ō϶+sl(khhMYÒ'lVHFa%hC: ,Ygj WF sGc|0~w2kḚ&IVcΧ̏fC{н * [Ċ Pbfe"Rm7,$j frJI{}M>0.X=MWN\j,75^ɌB®#ݯxVVåKɃC3p~i}>;WNP}yե{z"RM,>{pvyǾ~X^%Fa4_0۲>Wi ؤE)R^ c^m| ]ApBJ˩T=DJ,@AׇyFbm3@3dIǥjwŊ]H֨xR]'rg+ˈfe8eQYm1[S2>df9qNӚW)"5}xDw|,|2#J4f2luE #u%Zq뺲HR)aP>Uzo:LhΫ:gy|g7HZf,ͫ"CW@"`QayҊj?/0}0('1&Nv \9)q"8˝!$,L,"j0z&:֊6ع1MlFFȶ9Z(\<^1-#q`b{UE[9@d>+HȜ ??7y zyIL̲@K"c[-_ ip"EOYx IDAT0YVqҹOng ؛uaQsyYf3ȒqȎ!bv~:dmG@_Q*ȿz\V=͖(mXo1 < T-f` +%uDzJ 8ތ̴E~4:8z'.evsWFW<}2'QSl6,Ն2b UO.&XW'V$_]|5OS]14,h橭rL`5r%'No)r OhxG?7 #]9VJLH'e wy8"YHRy\71 IЁX$2h;^n}pAaAMU1ZLGh-w"4')o:zLD#ڒ=fGN>>hi!ه'J;f[urζ^fu4>B'J;'Nq nՕK'|n]ZwyvړFPunsdC>}0RuWx2<"FF7M˻P @8*C igDȷ$Q i?%YIk]/bܱʲ.Aa#m֎\D 3APs {zt /XkJ>.*N rB3mj:Ǘd#şah28D.->_g[o9ֹrsKoC-mtPə50H,:dp̖K*^9O-'z2JLjwid+lYq\B@0*û.#c! tsZvJI(^y&cX"*dJغXE`?CIX2^`zV,#b`s|l\;=͈\~Phߡ]6^{"c-]#5f':&V荪iȠKl 'tch`=ȵf[{)NB2V|fȐV)7FntB TĢ#I6 Y?y\bm5wЎ;vc4/q,FSLȡ9s`k#~w[ќN{9Zϑ 4Z)Yإlե:lR7Q"1L hq!WU#Gj/dg1"dgb-x㷺@kA0yn5Yn#:fȈ"7yjR1H#%`g_C1VU`<^@A:=aD|~Jxg;];MRբXl[0 /r#VdHz'gJ,-G uZ ]:O/N&޵ f"P/;h ‚:7*T-> C6cQ#}i%Gx%mr>>+U9-_*4P^z7't}+2ǯ$^I9FD؜>xE:C*)ƣ͉=7wdDbd$ZWg oSV6I_Cx\CP)ieG%9d R+ܨV[;\, "-s W6Bni Ii=ݓ'~ N |*ZRY:"Hе@dgHl:[=, dFbt&0`P5au 2#.Xqҗ؃_81H'B4 }*0t˜HFZx['5Y&yh:wՊNuɶ|ឿ?i{StH74N{H2ͱ؊QQܓY+CvDuDr?Gk"kp+t`,nV1UUVCj.kcSXXuC3x{`4Z7ugjb ZLfWߛ~pZyf-c<Sqk`4)x2ͬ[<8W%< z-y% W'm䈘..=O,0qXWʪe}A~'i.A^*ﶧ\, \NYXeKH;gCP\9eM?~}2GW/sR[W\ b1BV=*%X)1{SЫZd6zG|qxi1N](-)6naN՛z62}䣛*} ë!."+2VG9|6*ENDU 5z,60e'}2=B &3Vw0&Q{(~2볼e7+& nș_01ēDZ'&^ED󉲻̆j1 VF.Do+6Nz<D>:hZ(nDW[l}d;u୴iلGԺ0[{Vگ!X-u%ci Mf{! bnK+Ki$딈RI;*7 ;4Tj" O+h1-q}^m;,a3Sl"?SYK}܉{^8+NkJ!hZnD!@fs]-%ȝRUu++V*g/˞gpߺfv,B Ϻ չ?L݉%a+ilف{LnR9}Ԇ]/K by gSĽRYXo"6 $ 3!e@ ,ͭOWf$1[+>z"$ww `V^KJYj\YNZG'RlJtqY 4o;̢FЃyD#r7 SS̶S!p]1*s5r>zv޽^t<dvVzV*0"j-Vtc7|#B޳iǬ!sQ-Ɣ hS G̨[{hRR̹CJ7@k"87XL-^v+,4s @~j C%7y/&l9š@0fL]}"'`>łQ~-WUYݻ?msZAde>^?DTz}{ACZV SU Xe>Zrz~1=ݓ=%"`g9HՋ3 V>}4ߤ?Uyk=Gha"XCv׎\$_";ŧ0:Smv^-Ƅ览L8BDW}3a-[ŕu| ;{a4"ړY}dg.w'#3O )C~0="..Vp|(쪵+j%> Ͻ'# g:`!ey@ ?%e]ݻ_>UkIu4K̮O* @..bd2M1⹸y;"h&g Թ:xഥ+ cگ? Gn.Yڃۍ'V4`50kE }ޚ#7Bou,!f%.aQ ]watwWmGe"Q)4 KQD-{Lg鱎OqfW:"V'V:uS͏C| ;v]F|/UV4WV>Z1cu@n,lḖZ,5㼩ϒV~DO%d{ى7iBN#@s4nWV:rz@:Sz+MX Ɂk(?7 # 9}7".,2w qT#"Qx]Q@#:b98Wsmzdb՝UXfH֝ݎo>~ ArΨ`[sgʢ㘦qٍ J2%SYgxzov\-w"/51Sz<(rI~:ڟN1YoAh&u7[dam0;Q|&@_xU:NFn)-|A"! 9v/qx b=^鶗2\(@JYΩK_?9|}fGeI7.}VjaD]vZO2?ƝP9|?9_x.% pT<7ۑC΍ 0 \,Wth 0="D"qwv= $rvp(-7\;uy?ZQrm s.1;>qVصr_Ĭ3Y5LUbMgUcD{e9.(xòuPoe힔:@8k9޶,Ndӽ*IJ>YxX`򕕎iw 2°}UI]Tهެ7$ (#Kyc5{g LN։J*itV*G^t\* dpu 59 )A̼֭aP{U7wUx`G)k KA ,kAf{vҷZPGTs'bWԑF~ h !G~$>z׊Cr |Iq76KIۊu&X l/IlrmgoNHԎDUy&dj[0q'Q1j2!M[ݎY_xmiglIK(8! TWw'gqsn}1K1nSdxqшlf^:VfvaE5%\%\ PZ!%CJ$ IDATJgI2:(M{;pQAi˿xc,eݜmN9]a iÕx;n]qTjx+:抌WX_Hto: CU19+Y5LIEZH)z2z`'T4hΑ|&8L@u>j&2d0>P2k>} 3>}e'~}i _&76a$aYGv+'Ӝwt4,eEٻzq= dz=`p`#`Iiv+P9Wf:Qx*@Vs3!8>L^Q@*0&} 7*ˎ30Sv/(Os`{ؓOO 0iff0N58"1 !"I 0d"`dnG޳IPLҳ=$k1b+E0ѳ.t52xwl )3smVﲯ:Zp\#T0XOn4kzn1w𠣾2&NAU[>N:U *aŊV雪mYUw}c=UE6ƕs) bs b* ўIJycYMc<~8dd6VAJ fFi\|K^Q,h=ŝ )@:+5[>IЍ2>dBFO(ְeu /m lz[tK|EuGZ-{ܞYLNBbBUPmOTs kzYwr`{jmZ4J xܞ4+C^UC~.AJ1dg2;Zˮ0;;Δ9B㣄uƭWS훠)ۭuvU|{ ]4:-5eYXz`Ch1*AoѾ zڮvmZʌ7 8z k,DLQRJoGŗD2#⼗"AfsYHt![(rR]>ooTQH4ѓE`5f0zVMh}LlMh.Pbaϛ32J]YASՁI"R%gThym2r"?/q{vpl SNϏ0D">]g%a.XmuݝM~]7q"0'(HY/t>)Ѻ/[=>ɳRp'=ŹKb$q}͆E>.Iɦ*-߯LE |AՁVq-$5ET|0n&0\w4rًqSzgd1ro@!lI­ajg=l\Oz9#l<+CJn Qdu6Xʂp$EɌz ?L#Ѩa-,FyuӦ /e Rʊ!M jטE^':Sia_&ڡ1G# e4*m:jw] bޱkّЧ9YP3눣F8y5G ks?P,sIMx֮-4*4I)wF&ϝQHWbGx)PD$qtYixa}fy19f:|cDs,8 YI(3/e6Kd{!w:12_R۬پEmͷK $O< r0",8~Kpby8>ooϟzIr˖z]* 7wד֡<;@W ݣ,dek:N5zU'+|0/?^.Go?oUOo僝],R6'@7V3H;BWO3Z:PJ&woƕ0pl+'P(9>}n.n& 0mٴOQ}hH%2gixr<%5Ϊq\t\2ž>JɱN>EXڪB8+"@1)9 5vl S<l,2Ξ׆g?:@H-UT3ҪX Y;)mt^MqRlqJyk1L Iy+zMi|v!Ec 5 dGY6ramDEdmXzF;p"&UǦ9k^f8ǽ5B3+\ ).FM`EdMgI(X_xn\1Ih8l)9cOT[5V5{ Q'0 ˒X˳u9bWx63'ry hؠ)wv>qEڤW>CB}8y2_~r5ww, h8]l(.rFBD3c〔Bwr+PJ`kLNv(U S%?P픞hIn(RΣK7$E=Iж1d"\>Ro,i4(; tV#N\@DUB 3XqC(H,:E#8?`|0ǁTx9F8PzT}˒Hr2IVe#vv40dE?#Ufډd>@h[f)WMySbO$Lq~7_/iRzX.*sDuO(BNNm MN79k0bR5Hf}ZMi~Zl\f47EOz~PGUYAuT/{7du| Zĥyjݢ77mc;OeK{A}I25[!Uq/DŽƦwq-TJԎp  ,r=,?#gLWfw87$!R%5ƁKҡr%k 5u1]Yt!}>尛}΋:ecM/+VYw8.JGHÒLB'3B!CbUz\}b%<‰TPZFJNːSOCLu,NJfW-sN8waZx̟५sj_YLa/NF342Ll7~[X .m "l15^(!MCi'(" :T5æy0ɜVʄgic*Biz͠ZN82'/ΉtC}(+`WxфL\Keps-2 –*WI2F 3I&? }EWD"É"ޱ%Teh{x䑵oC>0L|?28Zی3 "NH^{ZZ75NmvqƘhKP_ 56] X-6 g9bL"q&D} 09 s)z(EE9 XMqC9;!倉Rۦ]-O1\ )rqԂMbS9kCP\ M^<+0;SFңr1\| *99]e:46JXIr+\}9hYTYW«Ng8CYk;-{mX(İWG$K[XNy~~It^D!0c$$mh|l`sҖN3ph#&=O꤀zV988,9ҏH1;~$-gwx&:wC2KsIZ-h[tad~⒤Qπc62kJp2ԒC4IÓgsm +vyL^bHv)r .:{bCaws닓΁P~N2]jP~h f" _>h4‘)4w ![©jWzjۜKubp\$‡T.c:Tٱ`S#AB1I]7a *aVنLـ6¡T Hٹ!@57Q I8qiY;hõfs>?:: %JF[)=Z͌ X!c-Ygx??' %xEVk$p a# LR0H8 ݚ:EUCvd9N;(TDLǖd጖}fQIG1S9yUӶlٸũgfT)udR~Ph~Cc^ n!elzEY,%_:9a6?~&d 榠qOk566l&J3V{UoPmD[,+f*Szi/w!WYT P"/8` ':(%úOۥu \BgSGb/i"NixrvuPXz@7!j:jR]F璻|azs>RլPYN6Kԅ|>QGPSckE3 <@Sb|~9+ {9p8mKYoW'jrZ=h"Km䈔2io1U8OC̈́}"O^s1dOF༐b)XtDEe-cì(¥{hcnPh2\k)z_ҶM+B_pǿ(bv''E0 o6- IDAT25l=p5aR-==XA^2w%0X, )*HBߦZ6uO-Ә ?Ď,{98ly-sA 7ӑgp?y }vE9\0lv嶐W}A8tm"8/5C)-@{^)A2^T CE>~3[_!U1AxQo@|͒D4|rXq]e U֒ Q=_ƤiL8by 3(,r:GⰉK4=DӘ9"g̨`$=:PL3IbcP%3/>#)s8MPIf[RbZ [:NbgťGoj)Ĥg#èSQ'b@ҊS~+_8q~AB~{kMW3<>0b)d>_\R[12YEĻRf5j!ޠ(eHKDd~gcE }Ivk J)MQN+e'Z^e1[՝VIQm.%Qqu6Z`(Д?|ѳg{.E3`ЬV& i<)c3I݉r]i(1ΟPR^(Ka{$ =D3HgV(|9XZPզwTLڶ,ZO^Pj:qp/\ ܪ.iak[Qa+1h|2h j$~C#3 ͠3ӎ.r˃؎d sSݫ O!a.-d-YVQwMLѩfIG!A\6c0Rƨǂ2a09;pـdDLzG0 D?Dm 2MB͈9)4)GU#)Mx#Ds#M`Xei vLf=uMj9BVI, m—;F8~⨈{:$K*WkH:l:Emp=npaZE[Xuh0X%稜)MP혙>BC7࠻eM&Qd.\m7?⚈,<9'-1׌T&lENN|M~Ws?M&R9[W< d6 "_\F\afed-i zJj}9]ϜMLsi:̽RX( '0|X=#n4啵}1.Y PMP-3 0? c >4lt+!7ǫ#+i," pts6CQ"ë=Qր ۭGϔ+>Jj|Y6zxu#$l=.A&:yؾD]}ۢ 'x]aQ "zR(Sy 0w~IҤkCW9~M0Ǚ`Eƫ)I+C.&l?JYlcgWoвv"I0-]EIž`^n 8Ib+NynP dr \vHY8~̩rT6KQ1%y ^}ۼYbRHBk9gض XkU!N!OQZ}E*rv}(m]fQGKwKL1cI%>r K 4VaX K[b#? G`]9ۖxt"M*<Ԝ.ŞFrC"7nڠ07J S\\QhhxT\ęEL&'2ivE }3 a@0)c7 r2Deԩ<:H no ESp63kf [,=H[24 2+|VY9ztF5֒In'T?^=G3`/P8_>Գ~9aASDN#FWsxJ!ydڼ0K ?d^mwGȎYt&Ah64DjJ8hZ2EU-jX/mq&A]-d[>{}[F18EHp|kӌ?,!.h`lݒɂCC<3-xFu`N\,4! CJ5 (z q}3j3Ӆ[,Vm@ZΰO")N*3KZbmO]=9Y喛׍:E04lӴLF"fdbY@vw9>b/ʹal2 Saٕm>%Pض0O .^z(̀qfJb9C=L4 ;Q_>MM/mk1;U,|E4&iL6Fφ֭/n`r7ZKS uuI0fvUXtȒ\^S `PG@sq,$ym7NsaGՉJ?j+7HS!'YP}]uJ1׍^`.vw:du!|2*isM:j`FDdW^y)0F"8جFrj `*(\Z\ Y_}W6!ĤF\\槗T 97Fԧ/URm}Q_hOob 'J/ܬ>1JvE8h<"ԋMs6h˔: 8dD{dx)r"X@2)ibd~dWfV^XaM->"l0Q7sGcPjXpwG03[1K{ͯ)Ymsl&┴@*0~|#g-$3Ӹpzjm';s+NWN=7yQۄ8;V?a(!LT4G Ҿo&h~hd5ZIR=虒\Ο2_Sx#LҶ2D۬h}K[nF$S|ΨP͚DY[GTF).Y' z~5TBQN ~̮+x|ګ-űqk"$ N&S!j#QxE 7rcl :֋'6Nj 7m8U8 4vDY6h h3#i2MxK7㞣:'M=$FxyԔ'XH }G\+dil(6Yz`-q tX{mԯ|8UY!}zy|ȼPٽR{V3ڗlS*[MJ]"LãnAj57Ny A+ _|=rV$Xh!$: !:sWʴRGVx$L9+W4;z=86юs}Et)6;2=,(36ƧQ,Jsv.2p$..됷5(2WЭg s3}UcQe+EPMO=)VSchy`~3|DoB%&~kR|Z5dA UQOK@XB3?1w?!Zw $"Aqe^ qk%; 'șᬤzE 3ELc)Ǭzv5ʜ)˦z^P;dA&%|sUr*mhl+kk2$9_$82= )"r|7I2 b;N]搪 FĪA0Wx.mŌWe/;Q%cJ|VP&v@gG28H9:Z͍#C8(GvK""fYGDqu6GKQQ}چҖMl% [nPY"bS/CzH-/fU h͍bFJ#-hT( iz DRD?GmXMOe|ә>oabh'd?9rJ9B7*%}(QN^FE ΣnW}݃ɊWX<ʲVn.X;aQr5@.nY\ >p= CA,2%R%zLV&I~lx+-D灹m*ua-b1@Dr >DGfXrL9kI+ci]]֦ Q\w UFj6(ޒemEv'ihbiR$7/KX2` /Y&tԕ_6zzJ^Wi[I+#&9Z~U<ٮMg#p)$xTfķ\T(gh#"'~ՠy{l24=4j_7$k*/a-*~  gl`DheSi*Vt t]w"/rV GQBĄ홤kx/)Lz:Q%hT}=i8 Ewbթ%M8t]],*3A4Q6qb^wW)c c_r3qF8z\Ev:>u c*4V eag;y&q;8 WI%j}ky1j}Nmtˆ|{Rf)J槟 `vIvZ="/դF!λ3}x^OqܸSXN:F'[R5B[ Tב.* 1Dfl m,@WkQk6Xi]lhߨ&jܚ߀m%&'1(,$n5\5x,{"B!X }9/RKWqa[Ujau(uZo8ϕSh;,2˿FkEbYZU3nuT!'Y4FtmWՠ;Gː-HvUcJx%(_s^'oi+XPlHRk%^JX!"5HSDE[!ɢ@䝛K )9 荭 Zϟu+?fi0YZ,@Qeݜ{F:$rY_-E1Vq.B]]W <#dpGь$'d܎}|6P[wViGC.S.6V♋5 v6lWcE~k̪0"{,^HdFF(:^DPNmZ}Ul?Q T8D'd,:c ^#'}0q[l'49do~׻LJZ^&cs=КMzEzV!$ =Nyj㟡`idRmtJSC#lFQlfCbM?*bV0"!HCTL 8e ?}҉pr!hKb>k-佢̨}1!'.ȨAi'$2#lTHCVN0[:Cƅav]W0..״?On+aö;h#w&65˲@i/U.BFgKyGP)> 76vJdmt1 -<(`cAV=Vׯ8mq,c3ԥ5uʈ4"pmn8+w."2㡹.ZZL.wX}w|2tG~yMzHwn-odHW+Z.ʰC3#͘@~aX?I$0jeB3H)lz){!`#K'_ytU<=,Дd+ua=t2V" d{F6HW G3ؖl*YAX^U{`gчz;t7 b_ RX / 6$oebf8c:6NSvYS]<9vK>hp.Lnot^~mVO[icMt/|?nKa]՝k :|6TUkyiLWH?͒^7DPTa鯤]ݙRӦ+@-GduM~+mWKw}?]>-߬N>4r HO~o\ }wK[+pKB)egtޖMi?}%x璷𰌣bPXԆZ8;7jBDn1YI$k>?댐ܲ@T؛[k?[mtw Y>ץ2Ɩ7.,#p&.ͯ(Iȕ[&ȸ[]7qAYCkb_l]?:ڻs9%@&Tp@0,l!a[ 6_ydC"c|=&ܷ`V#h= Wdmޢa ҍ:Թ0]Uؚ;&q'׫<9`O{6oUcW4YҋMβ3~>F H"<ȋЧ2pz#)vŶ`GCR,":D䄛YV+\02vmf[o{V4n_53kZ!],N~@}[>m ~BWXͅld(%"dT*Dvi{TS vwB\%N +\7ǵ!#otsm&{mJfIL;d,=L EOF_5]%Q)vM+| uH2QxZ<-VV6+8u}a',Oerv0/wMϸUTIO;M^߈ݱ,w\Gb';lu_I.,A6Tqqh@R ]R%婵%F2oat_܄&h,b4-A,ހ7m]֣:db;>`!$("= QG e`Z0;!W.&ȳC[WӸc&Ylw88Wܢ$@yc͞VsqS]e~ e:@GdL`)?{ BP@y&IDAT>ub|X ،7`>HW$`kS-X|xەd;uƒsj-7l XSED2FR[zOd߲ϓjcyΰ* .+L+Q[M̅Wb>wr8eGlxDdR>Q}\] O@A [lSpYl'fK}:i~bXMRVOwZwOܭмcM7J QK$iv1VX{"k)\0ئ:Tdь&|{F~j'zZQ_> Xp'1h9K.Ip>[i_Xh\Ķ[ܐ;ϠHtG}ar$xϺ]{CwB OsE;{ݽ) J߁Q9Zf %\K jU2ޯ;wxb2N_GwN2lW˜{MY.T і8W͹݆bӃ<R{ƽû0H7ZEnXxO2A;-x@ݭO}5+@WL(`}l@8gz ^F "_qu'@{W9W>̻#w zþ4E`2>Rx{~ NKx.< D67UZp<>輓A?/Tо{go4kDf,nܪ!?|a /F-|3)S*M <Eg&}.'u#jhU8Yo vŋKSJCM67 .~33y)g&ۿ_\mi{Ӽo1f߶4r;p;,#Yh+'',m_9q{mO'Wj3$Dj=.xmʲYOݿcjiNh h,ĩ;/[s&SKd~Fވ@OW,. B۽~2H 5E_'BIsMܻ%{Nu⃦&0[IEEI7=>a;+h#*vIKIҌz9WΰH~W/"}Yl(χ-_m?zq`Q8Υ\~~aDk"r"~1`,ϭ<*l-*Pz}Hv/}:7aݸ컟=kVd%ؕW|3u8ZX _c[k\#ቕgP2>*Ճ3iW(7»SVk?ɚ(Of@44­-٘5\ќiDL"۳>_ c{\n4ߗfvGAgkhP?{̕KXl&CGOo ˶tZ5n"__M𦾈ɾ xUqi{~eMsji}[<ߑgaeZbxZA?\+ە٘YxW7~ok/?44^yZIENDB`lmms-1.1.3/plugins/zynaddsubfx/bugs.txt000066400000000000000000000000011247673406200202110ustar00rootroot00000000000000 lmms-1.1.3/plugins/zynaddsubfx/logo.png000066400000000000000000000070501247673406200201710ustar00rootroot00000000000000PNG  IHDR00WsBIT|d IDATh՚{p}?އH dl6 &6q vI;u$x6mөm6N<ә8Sۍ%ņD65l 6Ku/}_ؽ{wݳWtot*UIፀ Σ88Dě+ν7ߝ++|L;T5&8ys| ny`UFIn@ ~b[rA@00K\N!q9pt[L=/Q .Y(| T9s8z}GHqWl3:1]'o24F'7lew12QH JCξ*l?<{Me<3X|9!~zI~ۦ=P;cRJ\RT EExzK|r4,`/n 55|4M*9`Ax>Po {[(-휹tጯm!dÎ*p%]Ԍϝ \ruRp0))u&rktW g]T{omS{8E)Q8pU(&2#;VaYvMkZ~D"]vG_e/ʐ@R tztUs0{}^Dq>>yGqKK3&_\ኍsϠyu3 39sO~ J}R(P)J[ܖM$iR(QBNǿ{/:,?QlcLT` Fk'Y7-t_q/ /vA b 'B}aGm%-6MG_Er%lj3{ag7߼F|<<[EJ</8QwsbR^ f=.-Sg8@r1m^hfjP6%@tD Y+;r_YQ*ٻxbn_an.xRLuvI62;PWwobIޒ+T:B*$- Uڐ]0'чBP*АAia_yrmKY^ >؉mہ*W>; WQsڦ}#wbr)Khq]nxu`5T:͢%K3w73ig 2%JZJXŗ3*w.w~H4ZB]}g&6LҩڣP& 434_̜n Ej(ݱh6ufil0r,0lʧf(ĺGM21H,9-y"Î_|J!@mY3aG6w $ZtHP{?T4vl=wᱲVpyW]cZF:aDkF+h_% _hf\f2wuR''١pݶJ /VIENDB`lmms-1.1.3/plugins/zynaddsubfx/update-zynaddsubfx.sh000077500000000000000000000002011247673406200226720ustar00rootroot00000000000000#!/bin/sh rm -rf zynaddsubfx git clone git://github.com/LMMS/zynaddsubfx.git rm -rf zynaddsubfx/.git git status zynaddsubfx/ lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx.rc.in000066400000000000000000000015631247673406200220220ustar00rootroot00000000000000zynaddsubfx_icon ICON zynaddsubfx/zynaddsubfx.ico #include VS_VERSION_INFO VERSIONINFO FILEVERSION 0,2,3,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" //language ID = U.S. English, charset = Windows, Multilingual BEGIN VALUE "Comments", "ZynAddSubFX Plugin - LMMS (http://lmms.sf.net)\0" VALUE "CompanyName", "LMMS Developers\0" VALUE "FileDescription", "ZynAddSubFX LMMS Plugin\0" VALUE "FileVersion", "2.3.0/@VERSION@\0" VALUE "LegalCopyright", "Copyright (c) Nasca Octavian Paul, Mark McCurry, Harald Hvaal, Tobias Doerffel\0" VALUE "OriginalFilename", "RemoteZynAddSubFx.exe\0" VALUE "ProductName", "ZynAddSubFX/LMMS\0" VALUE "ProductVersion", "2.3.0/@VERSION@\0" END END END lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/000077500000000000000000000000001247673406200210625ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/.gitmodules000066400000000000000000000001451247673406200232370ustar00rootroot00000000000000[submodule "instruments"] path = instruments url = git://git.code.sf.net/p/zynaddsubfx/instruments lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt000066400000000000000000000025431247673406200227540ustar00rootroot00000000000000Main author: Nasca Octavian Paul Developers: Mark McCurry Harald Hvaal Contributors: Gerald Folcher (legato, mono notes memory) Lars Luthman (zombie fix,jack midi, LASH support) Daniel Clemente (with a workaround of X11 repeated key bug) Emmanuel Saracco (fix for JACK output) Achim Settelmeier (QUERTZ keyboard layout for virtual keyboard) Jrmie Andri (AZERTY keyboard layout, Array index fix, OSS failsafe) Alexis Ballier (const char* <-> string mismatch, NULLMidi prototype fix) Tobias Doerffel (static-instance variables fix, missing include fix) James Morris (Memory leaks in FLTK GUI) Alan Calvert (Portions of New IO) Stephen Parry (DSSI rebuild) Ryan Billing (APhaser) Hans Petter Selasky (OSS Midi, FreeBSD support, Bank UI bug fix) Damien Goutte-Gattat (Bank select midi support) Lieven Moors (Spike/Circle waveform) Olaf Schulz (MIDI Aftertouch support) Jonathan Liles (NSM & NTK support) Johannes Lorenz (Effect Documentation) Ilario Glasgo (Italian Doc Translation) Christopher Oliver (Unison + presets fix, mousewheel support, SUBnote overtones, unison enhancements, ...) Filipe Coelho (Globals Cleanup) Andre Sklenar (UI Pixmaps) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt000066400000000000000000000012151247673406200236210ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/") project(zynaddsubfx) set(VERSION "2.4.4") enable_testing() include(CTestConfig.cmake) #Currently the only directory that uses cmake add_subdirectory(src) install(FILES AUTHORS.txt COPYING FAQ.txt HISTORY.txt README.txt DESTINATION share/doc/zynaddsubfx ) install(FILES zynaddsubfx-jack.desktop zynaddsubfx-alsa.desktop DESTINATION share/applications) install(FILES zynaddsubfx.svg DESTINATION share/pixmaps) install(DIRECTORY instruments/banks DESTINATION share/zynaddsubfx) install(DIRECTORY instruments/examples DESTINATION share/zynaddsubfx) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/COPYING000066400000000000000000000436141247673406200221250ustar00rootroot00000000000000 NOTE! The GPL below is copyrighted by the Free Software Foundation, but the instance of code that it refers to (the ZynAddSubFX application) is copyrighted by the authors (Nasca Octavian Paul and others) who actually wrote it. --------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/CTestConfig.cmake000066400000000000000000000010511247673406200242310ustar00rootroot00000000000000## This file should be placed in the root directory of your project. ## Then modify the CMakeLists.txt file in the root directory of your ## project to incorporate the testing dashboard. ## # The following are required to uses Dart and the Cdash dashboard ## ENABLE_TESTING() ## INCLUDE(CTest) set(CTEST_PROJECT_NAME "ZynAddSubFX") set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") set(CTEST_DROP_METHOD "http") set(CTEST_DROP_SITE "fundamental-code.com") set(CTEST_DROP_LOCATION "/CDash/submit.php?project=ZynAddSubFX") set(CTEST_DROP_SITE_CDASH TRUE) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ChangeLog000066400000000000000000002130371247673406200226420ustar00rootroot000000000000006 Mar 2002 -(dupamasa - in jur de ora 4) Mi-a venit ideea exact cum sa fac cand ma plimbam pe strada Pandurilor 7/8 Mar 2002 - Started to do diagrams 10 Mar 2002 - Started to write "voice" 11 Mar 2002 - Heard first sound 12 Mar 2002 - tested with 200 voices 16 Mar 2002 - made "Note" the main class - added vibratto - added glissando 20 Mar 2002 - started to write the Envelope class 21 Mar 2002 - Envelope written (almost) Volume envelope almost written 23 Mar 2002 - Scris relasenote(putin) Envelope-ul este si in dB "glissando" este inlocuit cu "Envelope" de frecventa started to write the LFO class 24 Mar 2002 - Corrected a bug that could crashed the synth (forgotten to disable the amp/freq envelopeenabled when killed it) 25 Mar 2002 - Started to write the Filter class (wrote only few lines) 27 Mar 2002 - Scris filtrul(putin), si FilterEnvelope 28 Mar 2002 - Adaugat la LFO si tipul "rampup" si "rampdown" Scris filterLFO si amplitudeLFO(termollo) redenumiti si aranjati parametrii Adaugat LFO delay Scris FilterEnvelope(corect) si FilterLFO(corect) 29 Mar 2002 - Adaugat RingModulation Adaugat FM/RM Amplitude si Frequency Envelope Corectat un bug minor la Envelope-ASRinit(); Adaugat FM 01 Apr 2002 - Corectat un bug care facea sa se auda paraituri la sunetele care incepeau co o faza!=0 Scris cativa dintre parametrii globali Envelop-ulire,LFO,Filter,.. 02 Apr 2002 - Curatat putin ADnote Adaugat VelocityScale la amplitudine, la FM si la Filtru Global 03 Apr 2002 - Aranjati toti parametrii ADnote in structuri 04 Apr 2002 - Mutati multi parametrii in ADnoteParameters Inceput sa scriu ADnoteParameters 05 Apr 2002 - Inceput sa scriu clase speciale pentru parametrii(midi) (LFO..) 06 Apr 2002 - Continuat sa scriu clasele speciale pentru parametrii Teoretic merge sinteza multitimbrala(Adica se poate aplea ADnote(canal,note,vel)) 07 Apr 2002 - Completat(aproape) transferul de parametri midi la cei reali 08 Apr 2002 - Added FM oscil at parameters and corrected a small FM bug 09 Apr 2002 - Inceput sa-l fac real-time 10 Apr 2002 - Merge la keyboard-ul MIDI, polifonic 27 Apr 2002 - Scris interfata la OSS, la latenta scazuta Corectat un bug care facea ca sa se execute calcule inutile, ceea ce facea ca polifonia maxima sa scada de 10 ori 29 Apr 2002 - Inceput sa scriu interfata midi(obiect) 30 Apr 2002 - Continuat putin interfata midi (dar nu am terminat) 02 Mai 2002 - Merge in timp real cu latenta scazuta, dar se mai auda niste "pacanaituri" 03 Mai 2002 - Inceput sa scriu Reverb (acum este doar ecou) "Pacanaiturile" au fost eliminate. 09 Mai 2002 - Reverb-ul suna a reverberatie 11 Mai 2002 - Adaugat cativa parametrii midi la Reverb 18 Mai 2002 - Adaugat filtrul AllPass la Reverb si adaugat parametrul Plohidamp 19 Mai 2002 - Adaugat InitialDelay (idelay) la Reverb 24 Iun 2002 - Clasa Filtru nu mai este dependenta de FilterParams(pot sa-l folosesc in alte scopuri) Corectat un bug la filtru care facea ca la rezomante scazute sa amplifice f. mult basii Adaugat High Pass Filter Rezonanta filtrului este exponentiala Adauga LPF+HPF la Reverb Inceput sa scriu Generatorul de Functii (OscilGen) 25 Iun 2002 - Scris cateva forme de unda (functii) Reverb-ul are volumul in dB si daca este zero(ca parametru) atunci se dezactiveaza 02 Iul 2002 - Adaugat inca o functie la generatorul de functii 03 Iul 2002 - Inceput sa scriu generarea de functii la OscilGen pe baza de FFT Inlaturat DC-ul de la OscilGen 04 Iul 2002 - Adaugat ANTI-ALIASING la ADnote si insumarea armonicelor se face in domeniul frecventa Corectat un bug care facea sa sune rau dac OSCIL_SIZE!=512 (era declarat de 2 ori) 12 Iul 2002 - Adaugat posibilitatea de a folosi ca modulator alta voce Adaugat parametrii MIDI la OscilGen 13 Iul 2002 - Adaugat Randomness la clasa OscilGen 15 Iul 2002 - Adaugat si Panning(incl. Randomness) => instrumentul este acum stereo 16 Iul 2002 - Adaugat Randomness la LFO (faza 0 => random) Inlaturat o eroare care facea ca amplitudinea sa nu fie interpolata 17 Iul 2002 - Volumul FM-ului este exponential Adaugat atenuare la volumul FM-ului la note inalte 23 Iul 2002 - Adaugat EnvelopeStretch Corectata o eroare care facea ca uneori sunetul sa se auda foarte tare la inceput Adaugat fade-in (f. scurt) si fade out in caz ca envelop-ul are A=0 sau R=0, a.i. sa nu se auda pacanaituri 24 Iul 2002 - Corectat Relase-ul la Envelope si adaugat ForcedRelase 25 Iul 2002 - Adaugat posibilitatea de a nu folosi AntiAliasing-ul Adaugat Frequency Modulation (nu phase modulation) Adaugat Delay la fiecare voce Adaugat Morphing la modulatie 26 Iul 2002 - Inceput sa scriu clasa Part 27 Iul 2002 - Se face controlul Midi folosind clasa Part si nu ADnote 28 Iul 2002 - Corectata o eroare care facea sa se instantieze clasa ADnoteParameters pt. fiecare nota => memoria era ocupata excesiv si "manca" din procesor. Cauza erorii este ca trimiteam obiectul ADnoteParameters ca parametru si nu referinta lui. Asta era cauza pacanaiturilor ce se auzeau daca apasam multe clape simultan. 29 Iul 2002 - Adaugat clasa Master (Permite acum mai multe instr. simultan => multitimbral) Observat o eroare la Envelope 30 Iul 2002 - Adaugat EnvelopeStretch si Forcedrelase la instantierea unui obiect EnvelopeParams Durata Sustainul-ui fortat este acceeasi indiferent de paramentrul EnvelopeStretch Adaugat Ecou 31 Iul 2002 - Daca VelocityScaleFunction=127 atunci orice vel. va face amplitudinea maxima (ca si cand vel.=127) Inceput sa scriu Interfata Utilizator 01 Aug 2002 - Toti parametrii sunt convertiti in REALTYPE direct de ADnote,de LFO Inlataurate mici probleme de AntiAliasing daca detune-ul era prea sus si la unele moduri FM Programul incepe sa fie controlabil de Interfata 02 Aug 2002 - Inlaturat o eroare stupida care facea ca sa se seteze valorile EnvelopeParams la -1 (scria din Master:: prea mult) 03 Aug 2002 - Terminata interfata pentru ADnoteParameters.GlobalPars Adaugat inca un parametru la lfo (continous LFO) care faca ca LFO-ul sa nu inceapa la fiecare NoteOn Corectat doua erori la ...[nvoice].AmpEnvelope si ...[nvoice].FreqEnvelope Scrisa interfata pentru ADnoteParameters.VoicePars (fara FM+OSCIL...) 04 Aug 2002 - Scrisa interfata cu FM (fara Oscil) Corectate doua erori cu provire la FMampenv si FMfreqenv Inlaturat aliasing-ul la vocea FM Modificata interfata (Voice si FM-ul sunt intr-o singura fereastra) Inceput sa scriu schimbare voce curenta. 05 Aug 2002 - Adaugat interfata pentru cei mai importanti parametrii ai ADnote_VoicePar[nvoice] Inceput sa scriu interfata pentru OscilGen 06 Aug 2002 - Este mult mai usoara schimbarea vocii curente. Inceput sa scriu OscilEditor Nu mai este necesara changebasefunc() la oscil pentru a schimba basefunction, se apeleaza automat. OscilEditor este (aproape) complet Toti parametrii ADnoteParameters au UI Corectate cateva erori (cauzate de faptul ca nu am verificat daca ADnote::...Enabled!=0) 07 Aug 2002 - Corectata o eroare la envelope Adaugat afisaj spectrum la OscilEdit Adaugat parametrii noi: extenal oscillator (voice si FM) si oscilphase(si FM) si interfata pentru ei Gasite mai multe erori care apar daca misc widget-urile in timp ce cant la clape (probabil este vorba de thread-uri care trebuie sa fie sincronizate sau ceva cam asa sau memory leaks) Inceput sa scriu interfata pentru Part Adaugat bypass la filtrul global Adaugat conversia oscil-ului in basefunction Corectata o mica eroare la calcularea oscil-ului referitor la faze 08 Aug 2002 - In VoiceList valorile sunt actualizate la fiecare apasare a butonului "ShowVoiceList" si formele de unda sunt afisate corect. Corectate niste mici erori la FM Daca se foloseste ca modulator o alta voce, interfata dezativeaza unii parametrii FM daca sunt inutili Inceput sa scriu interfata si parametrii Master/Part Schimbat putin Master si Part (atentie sa nu se instantieza ADnoteParameters la fiecare apasare de tasta) Inceput sa scriu control-ul pentru Master/Parts 09 Aug 2002 - Scris parametrii Part si Master Inceput sa scriu sincronizarea intre thread-uri 10 Aug 2002 - Adaugat o noua forma de unda la OscilGen Adaugat sincronizarea intre thread-uri=>programul nu mai crapa daca in timp ce apas clapele, modific forma de unda Adaugat enable/disable ADnote Inceput sa scriu SUBnote/SUBnoteParameters Se poate canta si la SUBnote(inceput sa scriu UI pt. el) 11 Aug 2002 - Scris controlul armonicelor Adugati cativa parametrii la SUBnote Adaugat AmpEnvelope la SUBnote(si UI) 12 Aug 2002 - Adaugat Detune la SUBnote si schimbat Detune-ul la ADnote Adaugat FreqEnvelope la SUBnote 16 Aug 2002 - Corectata o eroare care facea ca VoiceOut sa fie inlaturat chiar daca era inca folosit(de alte voci) Daca "Forced Relase" este off atunci se face relase-ul liniar Adaugat BandWidth Envelope 17 Aug 2002 - Inceput sa pregatesc pentru EffectManager 18 Aug 2002 - Adaugat inca un parametru la Reverb: initial delay fb Scris efectele de insertie Inceput sa scriu efectele de sistem 19 Aug 2002 - Continuat sa scriu efectele de sistem Inceput sa scriu interfata la Efecte (Reverb - terminat, aproape) 22 Aug 2002 - Corectata o eroare la Echo Se poate schimba efectul de insertie Gasita o eroare care "crapa" programul daca schimb efectul de le Reverb (rezolvata temporar, dar cu "memory leak") 23 Aug 2002 - Corectata eroarea la Reverb (a fost din cauza ca am pus ">" in loc de ">=" :-p ) Terminat efectele de insertie(si interfata) Adaugat Effect cleanup Scrisa interfata pentru efectele sistem (cu exceptia sendto another sys eff) 24 Aug 2002 - Adaugate doua noi efecte: Chorus si Phaser 25 Aug 2002 - Nu se mai aude tacanit la Chorus daca schimb Delay/Depth Corectat o mica eroare care facea ca sa nu se afiseze Pinsparts corect Adaugat un nou efect: AlienWah Nu se mai aude tacanit la Phaser si la AlienWah la frecvente LFO f. mari 27 Aug 2002 - Adaugata o noua forma de unda: Chirp Adaugat Waveshaping la OscilGen Se poate compila si fara UI Inceput sa scriu Salvarea/Incarcarea Parametrilor 28 Aug 2002 - In ADnoteVoiceListUI se afisaza corect daca vocea este activata/dezactivata Scrisa Salvarea/Incarcarea parametrilor (cu exceptia la OSCIL::UseAsBaseFunction) Adaugat File Save/Open 29 Aug 2002 - Se poate salva si oscil::useasbase Se afiseaza corect valorile dupa incarcare 01 Sep 2002 - Adaugat "codul de intrare" sa saveload 0xfe pt. a sti de unde incepe o noua "ramura" "Codul de intrare" este folosit pentru a nu incarca "ramurile" care nu se potrivesc cu specificatiile (ex. nr. de voce sau nr. part prea mare) Adaugat header la fisier Imbunatatit OscilUI::useasbase 03 Sep 2002 - Modificat codurile de parmetrii: indicele par. sunt >= 0x80, parametrii <0x80 , controlerii speciali(urcare/coborare creanga) >=0xf0; Este util la versiunile viitoare, la forward/reverse compatibility. Inceput sa scriu clasa Microtonal si interfata pt. Microtonal 04 Sep 2002 - Adaugat Pfilterbypass la salvare (am uitat sa o pun pana acum) Aproape terminat Microtonal-ul (cu exceptia importului din fisiere .scl) 05 Sep 2002 - Facut cateva mici modificari la Microtonal si Echo Adaugat un nou parametru la ADnote: PVolumeminus Adaudat parametrii noi de Detune: Pcoarsedetune(coarse+octave) si Pdetunetype Adaugat cateva tipuri de detune 06 Sep 2002 - Adaugat posibilitatea de a folosi ADnotepars:Globalpars.Pdetudetype in loc de Pdetunetype (0 = default detunetype), asa ca nu mai trebuie sa mai modific la fiecare voce detunetype: setez la 0 si modific global-ul Facut mici modificari la MidiInput(OSS) 07 Sep 2002 - Corectata o eroare cu privire la detune si daca freq. > Nyquist Modificat driver-ul OSSmidiin Adaugat driver Alsa cu port virtual Se poate salva doar instrumentele/microtonal. Adaugata un nou fel de waveshaping(Zigzag) 08 Sep 2002 - Psysefxvol[][] sunt scalate in dB Nu mai este periculos sa inchid fereastra principala 09 Sep 2002 - Se actualizeaza corect la incarcare la Master:Psysefxvol[][],Pvolume,Pkeyshift; si alti parametrii la Part Adaugat nume la Part Panic-ul (Shut-up-ul) se aplica si la efecte Part->Penable controleaza de fapt daca Part-ul este activat/complet dezactivat. Daca se dezactiveaza un part toate notele+ efectele insertion sunt oprite. Nu mai consuma CPU daca folosesc multe part-uri. Adaugat un nou parametru la part: Pnoteon care controleaza daca part-ul primeste mesaje NoteOn Adaugarea extensiei se face automat. Adaugat LFO exp_up 1 si 2 Curatat putin de memory leaks (mai am de curatat si interfata) 10 Sep 2002 - Adaugat filtrul HPF cu un pol Interfata se inchide corect. Adaugat textul cu Copyright in interfata Traduse toate comentariile in limba engleza Adaugat licenta in fiecare fisier 11 Sep 2002 - Adaugat descriere la fiecare fisier Corectata o eroare care facea ca SUBnote sa aiba amplitudini f. mari la freq. f. inalte Adaugat cateva macro-uri la interpolarea amplitudinii 12 Sep 2002 - Modificat extensiile (*.mas.zyn ---> *.mas_zyn, la fel si celelalte) pentru a nu aparea fisiere *.mas.mas.zyn 13 Sep 2002 - Am decis numele programului: "ZynAddSubFX" (Zyn de la synthetizer (inlocuit S cu Z), Add de la additive, Sub de la substractive, FX de la effects) 14 Sep 2002 - Volumul din ADvoicelist se afiseaza corect 15 Sep 2002 - Adaugat inca 3 moduri de waveshaping Limiter, UpperLimiter, LowerLimiter 16 Sep 2002 - Adaugat Makefile 17 Sep 2002 - Corectata o mica eroare care facea ca sa nu se incarce fisierele cu data intotdeauna Nu se amplifica freq. f. inalte daca freq. filtrului este mare. Inceput sa scriu documentatia. 18 Sep 2002 - Adaugat functia de resetare a tuturor parametrilor(master si instrument) 23 Sep 2002 - Adaugat posibilitatea de a conecta efectele de insertie la iesire Master Lfo-ul la frecventa incepe de la 0 pt. startphase=0 24 Sep 2002 - Corectate niste mici erori la Chorus/Phaser Adaugat si "substract" la Chorus si Phaser Limitat tipul detune-ului la valoarea maxima 25 Sep 2002 - LANSAT PE INTERNET - PRIMA VERSIUNE (1.0.0) -------------------------------------------------------------------------------------------------- 01 Dec 2002 - Corectat niste comentarii - Inlaturat o eroare care facea ca ZynAddSubFX sa crape daca dezactivez un part utilizat - Inceput sa scriu Rezonanta 02 Dec 2002 - Terminat de scris Rezonante - Adaugat filtru trecer-banda (BPF) - Scris Recording 03 Dec 2002 - Adaugat Gain la Resonance - Adaugat "New Instrument" la meniu 06 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.1) -------------------------------------------------------------------------------------------------- 08 Dec 2002 - Inceput sa scriu Bank si interfata pentru Bank 09 Dec 2002 - adaugat si "make debug" - Continuat sa scriu Bank/UI; acum se poate folosi (dar nu salva pe HDD) 10 Dec 2002 - Terminat Bank (mai trebuie scris un "config" file pentru a alege automat ultima banka folosita) 11 Dec 2002 - Am mai lucrat ceva la Bank si am adaugat "config file" 12 Dec 2002 - Filtrul BPF suna mai tare - Nu mai ar trebui sa fie probleme la compilarea FFTwrapper.h (fftw.h) 13 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.2) -------------------------------------------------------------------------------------------------- - Corectat o eroare care facea ca programul sa crape daca salvam parametrii in timp ce cantam - LANSAT PE INTERNET - VERSIUNEA (1.0.2-1) - de acasa -------------------------------------------------------------------------------------------------- 21 Dec 2002 - Corectate mici erori (nu mai dispare "Bypass Global Filter", inlaturat zgomotul de mica amplitudine - cauzat de reverb,nu mai apare intarzierea foarte lunga de la inceput a notelor muzicale daca conectam la aseqview) - Adaugat filtru de rejectie banda (Notch) - adugat randomize la Resonance - Inceput sa scriu VU-meter-ul 22 Dec 2002 - Terminat VU-meter-ul - Schimbat modul in care efectele de insertie se calculeaza (suna mai tare un pic) - Adaugata o noua functie la OscilGen 23 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.3) -------------------------------------------------------------------------------------------------- 24 Dec 2002 - Adaugata posibilitatea de a incarca fisiere ".scl" (la Microtonal) 26 Dec 2002 - Adaugata optiunea de a folosi numai OSS-ul (fara ALSA) 27 Dec 2002 - Corectate cateva erori si modificate cateva lucruri marunte la Microtonal 28 Dec 2002 - Mici modificari la Microtonal - Panic-ul la Reverb functioneaza OK - Inceput sa scriu Scale Degree Mapping la Microtonal 29 Dec 2002 - Continuat Scale Degree Mapping la Microtonal (dar nu am terminat) 30 Dec 2002 - Corectat lucrul cu ScaleShift-ul - schimbat modul in care se face keyshift-ul (nu se mai schimba armonia, indiferent de sistem) 31 Dec 2002 - Terminat Mapping-ul la Microtonal(incl. incarcarea/salvarea) Corectat eroarea care facea ca la Microtonal sa nu se incarce de fiecare data din scl_zyn unele date * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01 Ian 2003 - Corectata o eroare la Microtonal (erau probleme la InvertKeys daca era folosit key mapping) - Adaugata un nou tip de waveshaping (Inverse Limiter) 02 Ian 2003 - Adaugat afisaj al acordului fin (cents) - Butoanele arata f. frumos (am adaugat un nou widget in loc de Fl_Dial) 03 Ian 2003 - Schimbate butoanele (putin) - Nu se mai aude un tacanit la ShutUp sau AllNotesOff - Corectat putin waveshaper-quantisize si butoanele - Inlaturata o eroare care facea ca programul sa crape daca schimbam unii parametri ale efectelor 07 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.4) -------------------------------------------------------------------------------------------------- 08 Ian 2003 - Am inlaturat de-a binelea eroarea (cu efectele - 3 Ian) 11 Ian 2003 - Corectate o mica eroare care facea ca volumul sa fie negativ la ADnote::voice[].PVolume <64 13 Ian 2003 - Corectata o mica eroare la VU-Meter - Corectata o mica eroare cu privire la panning la Reverb 15 Ian 2003 - Adaugat min/max keyresponse limits la Part - Adaugat Filtru si FiltreEnvelope la SubNote 16 Ian 2003 - Curatat codul sursa (ADnote) prin inlaturarea unor variabile - Durata fadein-ul este aleasa automat (a.i. sa nu rezulte click-uri la notele joase si nici fadein-ul audibil la notele inalte sau cu freqcvente inalte) - Corectata o mica eroare care faca ca uneori instrumentul sa nu fie salvat/sters la Bank slot-ul cerut - Imbunatatita putin interfata: La ADnote si SUBnote, butoanele care controleaza amplitudinea armonicelor sunt colorate diferit daca au amplitudinea 0 17 Ian 2003 - Corectate erori la Chorus si la Phaser care faceau ca sa sune prea 'sec' (din cauza ca wet-ul era la 50% din volum) 18 Ian 2003 - Inceput sa scriu Preset-uri la efecte 19 Ian 2003 - Adaugat Preset-urile la efecte 20 Ian 2003 - Schimbat putin HPF-ul la Reverb 21 Ian 2003 - Adaugat tuning-ul la Reverb (si Freeverb) si Roomsize - Schimata putin interfata si modificat putin widgetul Pdial 22 Ian 2003 - Amplificat volumul Reverb-ului cu 6 dB - Buffer-ul foloseste liste simplu-inlantuite, asa ca nu-i mai problema la "configuratii mari" (multe part-uri) 24 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.5) -------------------------------------------------------------------------------------------------- 26 Ian 2003 - Inceput sa scriu GetAudioOutSamples, care ar putea fi apelat in modul callback 27 Ian 2003 - Adaugat o noua fuctie la waveshaping (clip) - Adaugat suportul pentru Jack (adica programul poate rula in modul call-back ;-) ) - Inlaturata o eroare care facea ca npart sa fie foarte mare si ca programul sa crape 29 Ian 2003 - Schimbari foarte minore la OscilGen::waveshape (la clip) - Daca dau "clear" la OscilEdit, butoanele care au amplitudinea zero, sunt colorate corect 30 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.6) -------------------------------------------------------------------------------------------------- 31 Ian 2003 - Inceput sa adaug optiuni la linia de comanda - Rata de esantionare (SAMPLE_RATE) este setata la rulare si nu la compilare 01 Feb 2003 - Inca 2 variabile sunt setate la rulare (SOUND_BUFFER_SIZE si OSCIL_SIZE) - Volumul la Part se aplica doar dupa efecte de insertie - Inceput sa scriu Distorsionarea (fara filtre) 02 Feb 2003 - Schimbate modurile de distorsionare (exp -> asym1 si pow -> pow ( altul ) ) - Terminat Distorsionarea 03 Feb 2003 - Adaugata inca o functie la waveshape (asym2) - Inceput sa scriu Controller-ii - Adaugat controller-i PitchWheel,Expression,Panning,Filter Cutoff, Filter Q, BandWidth, Modulation Wheel - Panning-ul si volumul sunt interpolate - Inceput sa scriu un nou program (Controller) care timite mesaje midi (controller) catre un port ALSA - Panning-ul la Part se aplica doar dupa efecte de insertie - Panning-ul la efecte se aplica inainte de procesare 04 Feb 2003 - Adaugat posibilitatea de a seta intensitatea/dezactiva la controlleri(incl. UI) - Adaugat controler-ul FMmodulationAmplitude - Corectat o eroare la Buffer (care facea ca Buffer-ul sa nu se reseteze :-P ) 05 Feb 2003 - Corectata o eroare care facea ca programul sa consume mult din procesor (denormalisation) - Nu mai este permisa o valoare a lui OSCIL_SIZE care sa nu fie putere a lui 2 (este ajustata automat) - Adaugat controller-i Volume si Sustain Pedal, AllNotesOff, AllSoundOff, ResetAllControllers - Adaugat NRPN, adica toti parametrii efectelor pot fi controlati prin controlleri 06 Feb 2003 - Pus limite la parametrii efectelor a.i. sa nu se seteze (datorita controllerilor) la valori nevalide - Inlaturata o mica eroare la controller-ul BandWidth - Schimbat putin EffectLFO::updateparams - Controler-ul BandWidth afecteaza doar FineDetune-ul - Schimbat putin identificare controlerilor si adaugat controlleri la OSS - Schimbat putin interfata utilizator la controlleri 07 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.7) -------------------------------------------------------------------------------------------------- 08 Feb 2003 - Adaugat modul "mono"(monofonic) la part - Inceput sa scriu portamento-ul 09 Feb 2003 - Terminat portamento-ul 10 Feb 2003 - Inceput sa scriu Equaliser-ul - Inlaturata o eroare care facea ca la parametrii efectelor care sunt 0 sa nu fie incarcati 11 Feb 2003 - Terminat Equaliser-ul (adica adaugat vizualizator freq response) - Corectata o mica eroare care facea ca part-ul 0 sa fie activ chiar daca cel salvat era inactiv 12 Feb 2003 - Mici modificari la EQ (UI) - Adaugata posibilitatea de swap (stanga <--> dreapta) - Adaugat Q la filtrele shelf 13 Feb 2003 - Adaugat inca un parametru la Phaser (phase) - Curatit putin codul sursa la efecte - Adaugat system effect send to next systems effects 14 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.8) -------------------------------------------------------------------------------------------------- - cateva mici modificari (de la un patch primit de pe Internet) - adaugat keylimit la Part (si first note priority) 15 Feb 2003 - Corectata o foarte mica eroare la Part 16 Feb 2003 - Se poate aplica filtrul inainte de distorsion - Adaugat filter stages (adica filtrul se poate aplica de mai multe ori) 17 Feb 2003 - Corectata o mica eroare la Reverb si modificat putin filter-ul si UI 18 Feb 2003 - Corectata o eroare care facea ca semnalul la voice sa fie intre [-4.0..4.0] si sa faca probleme la RingModulation - Adaugat modul Noise la ADsynth(voice) pentru a putea produce si tobe - Adaugat parametrul fixed frequency la 440Hz 19 Feb 2003 - Corectata o mica eroare la ADnote (aparea un fadein nedorit) - Facute inca cateva mici modificari la ADnoteUI 20 Feb 2003 - Imbunatatit foarte mult Controller-ul si adaugat la ZynAddSubFX ca program extern - Modificat putin Waveshaper-ul (fct. L/U limit) - Corectata o eroare la SUBnote (care facea probleme la glissando) - Adaugat un nou parametru Punch la ADnote care face ca sa sune ca si cum ar fi o lovitura (f. util la Rhodes) 21 Feb 2003 - Adaugata inca o functie de distorsionare x(1-x) 23 Feb 2003 - Corectata o eroare (cu mutex) care facea ca sunetul sa fie extrem de tare, daca in timp ce cantam, modificam unii parametrii de sunet la ADnote 24 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.9) -------------------------------------------------------------------------------------------------- - Adaugata posibilitatea de a tipari notele si timpul in care au fost produse (optiunea -D) 26 Feb 2003 - Adaugat inca 2 controlleri (Resonance Center Freq. (relative) si Resonace Bandwidth(relative)) 27 Feb 2003 - Adaugata posibilitatea de a modifica parametrii (in mod direct) al oscilatorului extern 07 Mar 2003 - Portat partial(doar interfata) programul sub Windows 08 Mar 2003 - Adaugat Virtual Keyboard - Cateva mici modificari in vederea portarii pt. windows - Adaugat si controller la Virtual Keyboard 09 Mar 2003 - Adaugat pitch wheel la Virtual Keyboard si modificat putin controller-ul la VK 10 Mar 2003 - Adaugat Filter Frequency Tracking (adica modificarea frecventei filtrului in functie de frecventa notei) - Marite eficienta la LFOparams - update lfotime - Adaugat mod de normalize prin RMS - Corectate doua erori la Distorsion (negate si mono+prefiltering) 11 Mar 2003 - In Windows, nu mai este necesar functiile getopt (scrisa o functie proprie) 12 Mar 2003 - Adaugat filtru la OscilGen 13 Mar 2003 - Adaugat mai multe filtre la OscilGen - Facute optimzari la ADnote (adaugarea unui element la oscilsmp si fmsmp,etc.) si curatat putin codul sursa - Corectata o eroare care amplifica fm-ul la rate de esantionare inalte - Optimizat si curatat reverb-ul 16 Mar 2003 - Modificate optiunile de compilare in Makefile.inc si coduri sursa a.i. sa se realizeze portarea pe windows mai usor 17 Mar 2003 - Inregistrarea se face in formatul WAV si nu RAW - Adaugat trigger la recorder (se incepe inregistrarea doar cand este apasata o nota) - Adaugat interfata PortAudio - Corectata eroarea care facea ca UI sa nu ruleze pt. Windows (trebuia dat show() la UI in thread-ul 3) si corectate alte erori din windows - Si audio-ul functioneaza sub Windows - Corectata o eroare care se manifesta foarte rar(Resonance, i era de la 0 si nu de la 1) 18 Mar 2003 - Adaugat interpolare la filtru (nu se mai aud tacanaituri, daca frecventa filtrului se schimba foarte rapid si semnalul contine putine armonice) - Adaugat interfata Midi in Windows => consider ca programul este portat in Windows 19 Mar 2003 - Adaugat interfata de configurare - Corectata o eroare la OscilGen care facea ca in loc ca amplitudinile sa fie reduse la -40,..,-100dB, sa fie setate la 1 si unde era intensitate mare sa file amplificate 20 Mar 2003 - Corectata o mica eroare la interfata (uneori disparea butonul ON de la ADvoice) 21 Mar 2003 - LANSAT PE INTERNET - VERSIUNEA (1.2.0) -------------------------------------------------------------------------------------------------- - Se interpoleaza filtrul si cand se trece peste pragul Nyquist (in sus sau in jos) 22 Mar 2003 - Corectata o eroare care facea ca nr. de esantioane scrise in headerul fisierului WAV sa nu fie initializat 26 Mar 2003 - Nu mai este permisa alegerea unui fisier wav in timpul pauzei de la record - Gasita si corectata o eroare stupida (am pus la NRPN 0x98 in loc de 98 zecimal) 28 Mar 2003 - Inceput sa portez programul sub VST 29 Mar 2003 - Adaugat Master fine detune (-64.0 .. 63.0 cents) 01 Apr 2003 - Functioneaza portarea sub VST, dar mai este de lucru... 02 Apr 2003 - Modificat synth-ul a.i. sa se poate apela in mai multe instante in VST - Continuata portarea in VST 03 Apr 2003 - Continuata portarea in VST (este limitat la o singura instanta) 05 Apr 2003 - Adaugata posibilitatea de a interschimba/copia parametrii efectelor - Mici modificari la Makefile (ignora headerele inexistente la deps) 06 Apr 2003 - Adaugat posibilitatea de protectie impotriva atenuarii a notei fundamentale la rezonanta - Pitch bend-ul merge bine in Windows 07 Apr 2003 - LANSAT PE INTERNET - VERSIUNEA (1.2.1) -------------------------------------------------------------------------------------------------- - Adaugat efect la part (adica efect care face parte din instrument ;-) ) 08 Apr 2003 - Adaugata interpolare la Resonance (peak-urile le interpoleaza) 09 Apr 2003 - Interfata la Envelope este o singura clasa - Adaugat Envelope free mode (adica de orice forma) - Adaugata posibilitatea de a copia de la o voce la alta la ADnote - Release-ul este liniar (in loc de dB) 10 Apr 2003 - Adaugata afisarea ultimului fisier master salvat/incarcat - Adaugata setarea notei minime/maxime la ultima nota - Pot alege daca release-ul sa fie liniar - Facute cateva corecturi la envelope 11 Apr 2003 - Curatat codul sursa la UI si impartit in mai multe fisiere .fl - Corectate niste erori la Envelope si adaugat modul liniar/logaritmic la amplitudine 12 Apr 2003 - Inceput sa scriu kit-ul la part 13 Apr 2003 - Terminat de scris kit-ul la part+UI 14 Apr 2003 - Copierea vocilor este sub forma de clipboard - ADsyn su SUBsyn check-urile de la PartUI sunt actualizate 15 Apr 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.0) -------------------------------------------------------------------------------------------------- 16 Apr 2003 - Adaugat modul "Single" la instrument kit, care face ca sa sune doar primul instrument din kit disponibil 21 Apr 2003 - Adaugat realtime priority, care seteaza prioritatea mare la sintetizator, daca are posibilitate; merge numai pe Linux - Gasite multe erori mici(dar potential periculoase) cu ajutorul programului Valgrind 30 Apr 2003 - Adaugat "Spectrum adjust" la OscilGen, care ajusteaza intensitatile armonicelor 03 Mai 2003 - Normalizat spectrul inaintea adjust-ului la OscilGen 04 Mai 2003 - Adaugat mod "egal temperat" la fixed frequency (440Hz), util la tobe 05 Mai 2003 - Adaugat modul "Drum mode", unde sistemul este intotdeauna temperat (12tET), toate notele sunt mapate si transpose-ul este ignorat 08 Mai 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.1) -------------------------------------------------------------------------------------------------- 09 Iun 2003 - Am schimbat in .H in fisierele .fl (ca sa se poate compila si pe Debian) 10 Iun 2003 - Inceput sa modific interfata la filtru a.i. sa pot adauga filtrul formantic usor - Interfata pentru filtru este o singura clasa 12 Iun 2003 - Inceput sa scriu panoul de part-uri (care afiseaza parametrii importanti ale part-urilor) - VU-meter-ul poate afisa si intensitatea part-ului dorit (folosit la panou de part-uri) 13 Iun 2003 - Terminat panoul de part-uri - Adaugat posibilitatea de a inchide automat fereastra bancii de instrumente, cand se incarca un instrument 19 Iun 2003 - Modificat modul cum se calculeaza frecventa filtrului (se fac doar adunari si doar la urma se ridica la putere) 22 Iun 2003 - Aproape terminat filtrul formantic (fara UI) 24 Iun 2003 - Merge mai multe instante in jack (alege porturi diferite) 26 Iun 2003 - Continuat de scris filtrul formantic 29 Iun 2003 - Adaugat vu-meter fals la Panel (in caz ca partul este dezactivat si primeste note on). De asemenea se arata daca in partul dezactivat s-a cantat ceva (apare o liniuta). 09 Iul 2003 - Inceput sa scriu interfata pentru filtrul formantic 10 Iul 2003 - Continuat filtrul formantic (interfata) 11 Iul 2003 - Eroarea vine de la Makefile pt. ca nu recompileaza si clasele care folosesc o anumita clasa, daca aceasta din urma se schimba - Continuat filtrul formantic (interfata+adaugarea interpolarii la Q) 12 Iul 2003 - Adaugat la filtrul formantic setarile de amplitudine formanti si interpolarea acestora - Adaugat grafic la UI-ul filtrului formantic si alti paramatrii la filtrul formantic 13 Iul 2003 - Corectata eroarea la FormantFilter care facea ca sa nu se interpoleze intre vocale - Adaugat parametrul VowelClearness la FormantFilter care face ca sa se evite vocalele mixte 14 Iul 2003 - Inlaturat parametrul Psequence[].pos, pt. ca era confuz => fiecare vocala are zona egala - Adaugat parametrii Psequencestretch si Psequencereversed la FormantFilter - Adaugat parametrul Pgain la filtru (-30...30 dB) - Terminat de scris Filtrul Formantic - Corectata o eroare care facea ca sa nu se salveze oscilatorul la o ADnote_voce, daca vocea este dezactivata, chiar daca era folosita de o alta voce - Prima data se cauta fisierul "default.bnk_zyn" si in dir "/usr/share/zynaddsubfx" sau "/usr/local/share/zynaddsubfx" 15 Iul 2003 - Setat Pkeylimit prestabilit la 15 la Part - Activarea unui Part din interfata Panel schimba automat part-ul curent la acela - Se poate alege ca un instrument din Kit sa fie procesat incepand cu un anumit efect; si se mai poate alege ca un efect din Part sa fie trimis in afara 17 Iul 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.2) -------------------------------------------------------------------------------------------------- 21 Iul 2003 - Corectata o eroare la FilterUI care facea ca la fiecare afisare sa se initializeze FilterParames::Pgain la 64 25 Iul 2003 - Corectata o eroare care facea ca modulatia in faza/frecventa sa sune diferit la diferite rate de esantionare/oscilsize 26 Iul 2003 - Afisat corect - valoarea OSCIL_SIZE ajustata (in caz ca a fost data optiunea "-o" incorect) - In windows arata si numele la midi_in_device 04 Aug 2003 - Adaugat filtrele Peak,LowShelf,HighSelf la filtru si foloseste parametrul Gain de la interfata filtrelor 30 Aug 2003 - Adaugat un nou tip de filtru: State Variable Filter 31 Aug 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.3) -------------------------------------------------------------------------------------------------- 02 Sep 2003 - Adaugata posibilitatea de a incarca de la inceput un fisier .mas_zyn "-l" - Se poate lansa programul fara interfata utilizator ("-U") 17 Sep 2003 - Adaugat niste simple patch-uri de Frank Neumann 02 Oct 2003 - Corectata o eroare la SUBsynth care facea ca la freq inalte si Q foarte mici sa se produca filtre instabile 30 Oct 2003 - Adaugate posibilitatea (+interfata in config) de Dump (avansat) - Adaugat ModWheel liniar si facut prestabilit (si posibilitatea de a alege in interfata modul de modwheel) 04 Nov 2003 - Modificat putin interfata la ResonanceUI 05 Nov 2003 - Marita viteza prin inlocuirea de (int) cu cod de asamblare (cu.10-50% la FM,chorus,etc.) 10 Nov 2003 - Inceput sa adaug posibilitatea de a adauga comentarii la instrumente 11 Nov 2003 - Terminat de adaugat comentariile/autor/tipuri la instrumente 12 Nov 2003 - Adaugat intefata pentru FFTW3 la fftwrapper 18 Nov 2003 - Inceput sa scriu Sequencer-ul 19 Nov 2003 - Adaugat un buton "i" pt. instrument info si facut ca instrument info sa se afiseze automat daca se schimba partul (sau se incarca instrumente,etc) 20 Nov 2003 - Continuat de scris Sequencer-ul si inceput sa ii scriu interfata - Mici modificari la preset-urile de la Echo 26 Nov 2003 - Continuat de scris sequencerul - inceput sa scriu inregistrarea (fara timer) 27 Nov 2003 - Se poate inregistra (dar nu rula) - adaugat timerul de inregistrat - Frecventa maxima al filtrelor este de Nyquist-500.0 pentru a evita instabilitatea filtrelor 28 Nov 2003 - Adaugata favorizarea portamento-ului in sus sau un jos; ex. se poate face ca portamento-ul sa fie doar in sus, sau portamento-ul in jos sa fie mai scurt decat cel in jos - Inceput sa pun pe cvs la cvs.sourceforge.net 01 Dec 2003 - Am facut niste mici modificari ca urmare a unui bug-report 05 Dec 2003 - Facute cateva modificari la jack 08 Dec 2003 - Inceput sa incerc sa fac rt-safe sub jack, dar in stadiul actual suportul jack este nefunctional 11 Dec 2003 - Adaugat aleatorism la amplitudinile armonicelor 13 Dec 2003 - Adaugat LFO frequency randomness 14 Dec 2003 - Imbunatatit LFO frequency randomness 15 Dec 2003 - Corectata o mica eroare la ADnoteParameters (lipseau niste break-uri la salvarea/incarcarea parametrilor) 16 Dec 2003 - Eroarea cu break-urile se dovedeste a fi o eroare majora :( ; adica corectarea ei, necesita resalvarea tuturor instrumentelor - Am revenit la suportul vechi de JACK, dar cel nou este disponiblil ca JACK_RT (nefunctional inca) 17 Dec 2003 - Inceput sa restucturez Part-ul (am adaugat clasele Instrument,InstrumentParams) - programul nu mai este compatibil cu versiunile anterioare - RMS normalize este prestabilit la OscilGen 18 Dec 2003 - Continuat de restructurat Part-ul * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01 Feb 2004 - Revenit la versiunea din 16 Dec. 2003 - Pus iarasi RMS normalize prestabilit la OscilGen - M-am razgandit ;) nu mai restructurez part-ul; mai bine pun acolo o functie separata pentru salvari/incarcari par instrumente - Inceput sa adaug suportul XML 02 Feb 2004 - Corectata o eroare care facea ca numele la instrumentele din bank sa fie aratate gresit (nu era pus un \0 ) - Continuat suportul de XML 03 Feb 2004 - Continuat de scris suportul XML - inceput sa salvezi cativa parametrii 04 Feb 2004 - Se salveaza parametrii XML la master, part, filter, lfo, envelope, resonance si adnote (partial) 05 Feb 2004 - Se salveaza toti parametrii in XML 06 Feb 2004 - Adaugat salvarea de instrument in XML - Adaugat export la bank intr-un director XML si decis ca bank-ul sa fie un director cu mai multe fisiere xml de forma XXXX-nume.xml sau XXXX-nume.xml.gz 07 Feb 2004 - Adaugat functii de initializare si renuntat la masterdefaultbuf si instrumentdefaultbuf (adica salvarea la inceput si incarcarea bufferelor cu instrumentele prestabilite) - Corectata o mica eroare care facea ca sa se incarce subnotepars la adnotepars (eroarea a aparut azi) 08 Feb 2004 - Modificat putin formatul XML 10 Feb 2004 - Adaugata salvarea parametrilor pt. basefunction la OscilGen - Inceput sa scriu incarcarea parametrilor 11 Feb 2004 - Se pot incarca cativa parametrii de la master 12 Feb 2004 - Continuat incarcarea parametrilor XML si la part (neterminat) 13 Feb 2004 - Terminat de adaugat parametrii la incarcarea XML 14 Feb 2004 - Se poate incarca si instrumente - Rezolvata o problema la coarse detune - Corectate cateva erori la incarcarea XML-ului - Frecventa LFO-ul de la instrumente are valoare reala intre 0..1 - Corectata eroarea care facea ca functia de rezonanta sa fie trasata incorect - Adaugata compresie gzip la fisiere si decompresie automata la incarcare (folosesc biblioteca zlib) 15 Feb 2004 - O mica modificare la envelope parameters in sensul ca envelope-ul prestabilit la FM nu mai este liniar 22 Feb 2004 - Adaugat normalize Full RMS la Oscil 23 Feb 2004 - Inceput sa fac ca sa pot adauga Bank bazat pe XML (adaugat temporar clasa OldBank) 24 Feb 2004 - Continuat la Bank 25 Feb 2004 - La Bank - inceput sa scriu partea ca sa arate instrumentele din banca 26 Feb 2004 - Continuat la Bank 27 Feb 2004 - Corectate erori la snprintf (nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori - Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown) - Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator) 28 Feb 2004 - Se poate incarca si salva instrumente in Bank 01 Mar 2004 - Se pot schimba bancile de instrumente - Introduse si celelalte functii la Bank (cu exceptia salvarii/incarcarii locului bancii folosite) - Se poate importa banci din bnk_zyn 03 Mar 2004 - Terminat (teoretic) partea de XML 05 Mar 2004 - Actualizat Copyright-ul la 2004 in fisiere 08 Mar 2004 - Corectat o mica eroare la OscilGen (se aplica gain-ul rezonantei incorect) 09 Mar 2004 - Adaugata posibilitatea de stretch la LFO in functie de frecventa notei 12 Mar 2004 - Adaugata modulatie la OscilGen (functia de baza) 13 Mar 2004 - Adaugat HarmonicShift la oscilgen 15 Mar 2004 - Inceput sa scriu partea de incarcare MIDI - Inlaturata partea de recording din Sequencer 16 Mar 2004 - Inceput sa scriu partea de analiza midi 25 Mar 2004 - Continuat partea de analiza midi 28 Mar 2004 - Scris partea de incarcat fisier midi - Merge partial playerul 26 Mai 2004 - Playerul merge bine cu un canal midi (rezolvata problema cu timing-ul) 03 Iun 2004 - Adaugata partea de play speed la interfata 06 Iun 2004 - Adaugata functia sigmoid la distorsionare 12 Iun 2004 - Modificat modul cum este realizat bank-urile, adica directoarele de bank-uri exista in anumite directoare si aceste directoare sunt cautate automat de bankuri; adaugat optiunea de a se folosi mai multe bank-uri 13 Iun 2004 - Adaugat filtrul "sinus" la OscilGen - Managementul bancilor de instrumente este complet - Se cauta bancile si in '/usr/share/zynaddsubfx/banks' si '/usr/local/share/zynaddsubfx/banks' - Corectata o eroare la filter la OscilGen care filtra diferit componentele sin si cos - Adaugat posibilitatea de swap la instrumentele din bank 14 Iun 2004 - Adaugat __DATE__ si __TIME__ sa stiu cand s-a compilat - Modificat interfata la PartUI - Imbunatatit modulatia basefunc la OscilGen (adaugat inca un parametru si inca un tip de modulatie ("power")) - Adaugat inca o noua functie basefunc la OscilGen (sqr=atan(sin(x)*a)) 15 Iun 2004 - Adaugat posibilitatea de a face armonicele ca sa depinda de frecventa ("adaptive") si rezultatul suna foarte frumos pentru ca tendinta este de pastrare a frecventelor armonicelor si nu a numarului de ordine al lor 16 Iun 2004 - Inceput sa trec configul pe XML 17 Iun 2004 - Adaugat tipul threshUp la spectrum adjust - Terminat de trecut config-ul pe XML (inclusiv setarile bancilor de instrumente) 18 Iun 2004 - Incercata interpolarea cubica dar am vazut ca nu merita pentru ca OSCIL_SIZE e suficient de mare si pentru o interpolare liniara - Separat OscilGenUI din ADnoteUI - Inceput sa scriu modulul de sinteza PADnote 19 Iun 2004 - Adaugat modul liniar de controller bandwidth si modificat modul liniar la controllerul modulation wheel - Adaugata modulatia in frecventa la OsciGen 20 Iun 2004 - Nu se mai deschide automat fereastra de instrumente daca a fost deschisa si s-a descarcat un instrument - Facute mici modificari la FM-ul de la Oscil 21 Iun 2004 - Inceput sa scriu conversia in sinus 22 Iun 2004 - Continuat conversia in sinus si facut teste pentru posibilitatea de "draw" cu sliderele 23 Iun 2004 - Modificat modul in care parametrii se afiseaza la OscilGen (este o functie "refresh" care face asta) - Adaugata posibilitatea de draw la armonicele OscilGen daca se apasa tasta Shift - Corectata o mica eroare care facea imposibila modificarea amplitudinii armonicelor cu tastatura - Adaugat randomness de grup (adica se aplica acelasi randomness la toate vocile care folosesc acelasi oscilator) 24 Iun 2004 - Inlaturata setara de normalize la OscilGen. Intotdeauna normalize este Full RMS - Facute cateva imbunatatiri la interfata unde sunt inlocuite comuter-urile cu setari mai usor de inteles de catre utilizator (ex. la efectele de insertie se arata "insert to Master Out" in loc de "-2") 29 Iun 2004 - Inlaturata setarea cu gain la Resonance pentru ca este inutil (datorita faptului ca normalize este Full RMS intotdeauna) 30 Iun 2004 - Inlaturata o eroare recenta la EffectUI si modificat EffectUI in sensul ca nu trebuie sters si reinstantiat pentru a se reincarca valorile curente de efecte - Inceput sa scriu un nou efect (DynamicFilter) 01 Iul 2004 - Corectata o mica eroare la EffectUI care facea ca efectele sa nu apara activate - Continuat de scris la DynamicFiter (mai este doar de salvat parametrii si de auto-update la filtru) 02 Iul 2004 - Continuat la DynamicFilter (adaugata auto-update, adaugat preset-uri) - Terminat DynamicFilter - Corectata o eroare la EQui care facea ca sa nu se actualizeze efectul curent si sa nu se obtina graficul egalizatorului 03 Iul 2004 - Corectata o mica eroare care nu activa la EffectUI daca efectul anterior era dezactivat - Actualizat Swap/Copy la efecte ca sa proceseze si parametrii la filtre - Adaugat Bypass la efectele de instrument - Imbunatatit interfata utilizator (eliminate setarile "-1",etc.) - Scris calcularea profilului la PADsynth - Adaugat OscilGen si Resonance la PADsynth si inceput sa scriu interfata utilizator la PADsynth 04 Iul 2004 - Adaugata calcularea automata a largimii de banda echivalente si afisarea ei - Inceput sa scriu partea de sinteza la PADsynth - Auzit primul sunet la PADsynth 05 Iul 2004 - Nu mai face urat daca schimb parametrii in timp ce cant si apas apply - Adaugat harmonic scale si position la PADsynth - Se calculeaza corect si armonicele cu largime de banda mare 06 Iul 2004 - Inceput sa adaug filtre,lfo,envelopes,etc. la PADsynth 07 Iul 2004 - Corectate cateva mici erori si adaugat autoscale - Modificata putin interfata de la filtru - Adaugata interfata si parametrii la LFOs,Envelopes,Filter la PADsynth - Adaugata fereastra care arata pozitiile armonicelor si continuat de lucru la acestea 08 Iul 2004 - La pozitiile armonicelor sunt aratate si valorile lor reale in dB - Alte adaugiri minore la PADsynth - Adaugat interpolare cubica la PADsynth 09 Iul 2004 - Modificat modul cum se calculeaza profilul armonicelor la PADsynth (nu se mai ridica la patrat) - Corectate cateva erori la PADsynth - Modific amplitudinea in functie de sqrt(largime de banda) => amplitudinile armonicelor sunt echivalente cu oscil 11 Iul 2004 - Acum nu se mai intrerupe sunetul la notele care canta in timp ce sunt aplicate modificarile la parametrii - Se poate alege marimea sample-lui - Adaugat multisampling la PADsynth - Cand se incarca parametrii ADsynth se da volumul ceva mai incet ca sa corecteze faptul ca normalize-ul este doar RMS 12 Iul 2004 - Inlocuit codul de D/W sau Volume de la efecte cu un cod unic in EffectMgr - Se poate face efecte la instrumente la care doar semnalul Wet e procesat de efectele urmatoare - Modificat modul cum se calculeaza intensitatea Wet la Reverb si Echo - Corectata eroarea la FM care facea ca daca Adaptive Harmonics!=0 sa se calculeze FM-ul gresit 13 Iul 2004 - Rezonanta la PADsynth se face in functie de armonica reala si nu de numarul de ordine al armonicei - LFO,Envelope, Filters, etc. merg la PADnote - Inceput sa fac partea de aratare ca parametrii au fost schimbati (butonul "Apply" se coloreaza in rosu) 14 Iul 2004 - Butonul Apply la PADsynth se coloreaza in rosu cand se modifica ceva - Adaugat fixed freq. la PADsynth - Sunt salvati si parametrii PADsynth => consider in mod oficial ca PADsynth este complet 15 Iul 2004 - Facuta o modificare la PADnoteUI care arata foarte frumos - Completata partea de save/load si stabilite noile extensii ale fisierelor: master - .XMZ, instrument - .XIZ, microtonal - .XSZ - Inlocuit memset cu un macro (ZERO) pentru ca memset nu seteaza toate valorile ci uneori doar prima valoare cu 0 (e o optimizare la gcc care face asta) - Corectate niste erori la makefile care aveau legatura cu compilarea in windows - Corectate 2 erori referitor la Banci de instrumente 16 Iul 2004 - Adaugat inca noi tipuri de harmonic bandwidth scale - Adaugat inca un parametru la filter la OscilGen si inca un nou tip de filtru 17 Iul 2004 - Corectata o eroare care facea sa crape programul uneori dupa ce scria instrumentul in banca - Modificata optiunea -l ca sa incarce un .xmz - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre1) -------------------------------------------------------------------------------------------------- 18 Iul 2004 - Corectata o mica eroare la afisare care facea ca la PADnoteUI sa fie trasate liniile in mod gresit 19 Iul 2004 - Corectata doua mici erori (se incarca gresit parametrii filtrului de la OscilGen) - Corectata inca o mica eroare care facea ca sa nu se coloreze butonul PAD_Synth Apply in rosu la anumiti parametrii de la oscilgen - Se dezactiveaza butoanele Edit de la PartUI ca sa nu se poata edita module de sinteza inactive 20 Iul 2004 - Corectate cateva erori cu compilare pe windows 21 Iul 2004 - Corectata o mica eroare la Bank si alte erori 26 Iul 2004 - Acum este folosita biblioteca mxml-2 - Corectata o eroare care facea ca sample-ul la PADnote sa nu fie ales in functie de frecventa reala de baza (cu detune) - Mutat functiile de waveshaping in Distorsion.C/.h 27 Iul 2004 - Corectata o eroare foarte suparatoare care bloca uneori calculatorul - Adaugat inca un nou parametru la PADsynth la base function - Nu se mai arata butonul de apply parameters la PADsynth cand nu este necesar - Eliminate blocarile de cateva secunde din threadul de sunet in momentul cand se incarca un nou instrument care contine parametrii PADsynth - Adaugata schimbarea titlului ferestrei principale la load XML 29 Iul 2004 - Modificat modul cum este stocat lista de banci root dir - Gasita o eroare care facea ca sa se stearga denormalkillbuffer inaintea lui master 30 Iul 2004 - Gasite si corectate o gramada de erori (eu stergeam elemente din ferestre si fltk le stergea din nou) - Eliminate warning-urile pentru -Wall 31 Iul 2004 - Eliminate complet stergerile in plus de la UI din destructorele obiecte - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre2) -------------------------------------------------------------------------------------------------- 01 Aug 2004 - Adaugat un nou tip de OvertonesPosition la PADsynth 02 Aug 2004 - Am pus din nou schimbarea schedule-ului la valoare corecta (l-am scos dintr-o greseala) 04 Aug 2004 - Am corectat niste erori la VST - Merge VST, dar nu intotdeauna stabil (merge stabil pe vsthost.exe) - Corectata eroare care facea ca sa nu mearga MIDI - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre2 VST) -------------------------------------------------------------------------------------------------- 13 Aug 2004 - Inceput sa scriu modurile continous si discrete la PADnote 14 Aug 2004 - Terminat modul continous la PADnote - Corectata o mica eroare la OscilGen care facea daca adaptive harmonics e activ si phase randomness>0 sa rezulte si aleatorism in amplitudinile armonicelor - Inceput sa scriu Presets/Clipboard (Clipboardul, in stadiu actual va putea copia doar parametrii folositi si nu cei dezactivati) - Merge partial partea de Copy in clipboard 15 Aug 2004 - Corectata o eroare in main.c la pitch bend - Scos Swap/Copy la efecte si la PartUI si vechiul Copy/Paste de la ADnote voice - Merge clipboardul la Oscil, Resonance, Filter si partial la ADsynth,SUBSynth si PADsynth 16 Aug 2004 - Corectata inca o eroare la pitch bend (aratata de Krzysztof Korpiela) - Adaugat refresh si la Filtru si paste la ADnote, SUBnote si PADsynth sunt complete 17 Aug 2004 - Adaugat clipboard la LFO, Envelope, ADnoteVoice si Filter Vowel 18 Aug 2004 - In clipboard se salveaza toti parametrii (chiar si cei dezactivati) - Corectata o eroare care facea ca instrumentul sa fie incarcat la fiecare salvare in banca - Tipurile de lfo sunt compatibile intre ele la clipboard 19 Aug 2004 - Corectata o mica eroare la XMLwrapper care facea ca sa se salveze fortat toti parametrii (chiar si cei nefolositi) - Adaugata partea de salvare/incarcare a listei directoarelor unde se afla presetarile 21 Aug 2004 - Am lucrat putin la salvare/incarcare a listei dir. cu presetari 22 Aug 2004 - Corectata o eroare de compilare - Makefile-ul modificat, a.i. make-ul sa se opreasca in caz de eroare - Terminat managerul de preset-uri 23 Aug 2004 - Adaugata posibilitatea de a se vedea direct din lista cu bancile de instrumente 24 Aug 2004 - Inlaturat complet suportul pentru formatele *.mas_zyn, *.ins_zyn, *.bnk_zyn si *.scl_zyn - Ascuns Sequencer-ul de utilizator (o sa il continui mai incolo) 25 Aug 2004 - Listele de banci si de preset-uri sunt sortate - Corectate niste erori la Oscilgen care faceau ca sa se calculeze randomness chiar daca este folosit de PADsynth si pus automat parametrul randomness daca PADsynth este folosit (in caz ca se va importa la un ADsynth) - Gasita o eroare care face sa crape daca lucrez mult cu bancile de instrumente 27 Aug 2004 - Adaugata posibilitatea de a dezactiva aratarea starii PADsynth din instrumente - LANSAT PE INTERNET - VERSIUNEA (2.0.0) -------------------------------------------------------------------------------------------------- 05 Sep 2004 - Corectata o mica eroare de la SUBnote (legat de pitch wheel) 06 Sep 2004 - Eliminata variabila "disablekitloading" din Part si din UI 07 Sep 2004 - Modificat id-ul vst in 'zasf' (inainte era de 5 litere si poate cauza un crash la host) 27 Sep 2004 - Corectat un mic bug la salvare in xml la parametrul FMcoarseDetune din adnote - La VST, daca incerc sa inchid fereastra principala, se minimizeaza - Eliminate setarile cu indice '0' (zero) 28 Sep 2004 - Adaugata salvarea tuturor parametrilor in hostul VST (trebuie testat) - Adaugat installer pt. windows (cu NSIS) 29 Sep 2004 - Inceput sa scriu interfata utilizator pt. incepatori 30 Sep 2004 - Terminat de scris interfata utilizator pt. incepatori si se selecteaza la pornire modul dorit - Adaugata posibilitatea de a compila cu suport jack si oss simultan si sa se aleaga runtime ce doresc (jack/oss) 01 Oct 2004 - Corectata o mica eroare care facea ca sa nu se inchida ferestrele cu instrumente cand incarc din banca - LANSAT PE INTERNET - VERSIUNEA (2.1.0) -------------------------------------------------------------------------------------------------- 02 Oct 2004 - Corectata o eroare grava care facea ca sa nu pot schimba partul curent in interfata utilizator obisnuita 03 Oct 2004 - LANSAT PE INTERNET - VERSIUNEA (2.1.1) -------------------------------------------------------------------------------------------------- 04 Oct 2004 - Corectata o eroare care face ca in modul simple UI, sa se inverseze panning-ul - Adaugat un icon la ZynAddSubFX 10 Oct 2004 - Si controllerul de Resonance se aplica la toate item-urile din kit 12 Oct 2004 - Corectata o eroare care facea ca butoanele Addpoint si Delpoint de la Envelope sa nu fie afisate 16 Oct 2004 - Corectata o eroare care facea ca partUI-ul sa nu se actualizeze intotdeauna cand incarcam un instrument 20 Oct 2004 - Corectata o mica eroare asemanetoare cu cea din 16 Oct, dar care afecta meniul new 07 Nov 2004 - Corectata o mica eroare care facea ca sa nu se incarce corect instrumentele in linia de comanda (-l) 14 Nov 2004 - Nu mai verific in bank daca este un director sau fisier simplu, pt. ca poate sa aiba probleme 28 Nov 2004 - Curatat codul la OscilGen (acum datele sunt stocate mai bine si nu in functie de biblioteca FFTW) - Corectata o mica eroare la OscilGen cu adaptive harmonics care facea ca energia vechilor armonice sa nu se adauge in mod corect la noile armonice (la note inalte) - Sortarea nu mai este quicksort la bank si la presets pt. ca am vazut ca nu merge in windows intotdeauna - Corectata o eroare la egalizator care facea ca sa se aplice si la el par. D/W 29 Nov 2004 - Marita zona de valori la adaptive harmonics power din OscilGen - Adaugata posibilitate de a post-procesa la adaptive harmonics(adica a adauga sau a amplifica anumite armonice) 05 Dec 2004 - Corectata o eroare care facea ca functiile getChunk si setChunk sa fie supraincarcate in loc de suprascrise (dar nu am testat) - Corectata o eroare care returna gresit la canDo in vst (netestat) 17 Dec 2004 - Inceput sa folosesc Dvorak pt. VK 18 Dec 2004 - Continuat putin la VK 20 Dec 2004 - Se poate selecta la VK dintre "qwerty" si "Dvorak" - Corectata o mica erare care facea sa nu arate BWprofile dezactivat la PADnote * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 04 Ian 2005 - Corectata o mica eroare care facea ca sa nu arate Force Release la Freemode Envelope 15 Ian 2005 - Corectata o eroare la controllerul bandwidth care facea ca sa ajunga la valoarea 0 si sa dea peste cap SUBsynth 22 Ian 2005 - Inceput sa scriu suportul pt. DSSI 27 Ian 2005 - Corectata eroare care facea ca in cazul in care sunt 2 banci cu acelasi nume (sau aceeasi bank root dir sa fie selectat de 2 ori) sa produca confuzie 03 Feb 2005 - Inceput sa scriu la Microtonal ca sa se faca butonul apply de culoare rosie cand se schimba ceva 06 Feb 2005 - Facuta o mica modificare care interzice punera notelor "0" in dump si alta modificare care mareste nr. de octave calculate la PADsynth - Renuntat sa fac modificarea la Microtonal inceputa din 03 Feb, pentru ca nu am gasit cum pot schimba culoarea butonului automat cand modific un text 07 Feb 2005 - Corectata o eroare care facea ca la microtonal mapping sa nu se calculeze corect (adica sa se stocheze valoarea corecta) 12 Feb 2005 - Controllerul prestabilit la Virtual Keyboard este Filter Cutoff in loc de BandWidth - Modificate cateva preseturi la DynamicFilter - Adaugata posibilitatea de a mari sau micsora cu un parametru detune-ul vocilor de la ADnote 17 Feb 2005 - Corectate cateva erori la PADsynth care faceau ca sa se citeasca date din zone de memorie nealocata - Corectata o eroare la Bank care facea ca uneori sa crape programul cand umblam mult cu bankuri 19 Feb 2005 - Corectata o eroare care facea ca uneori sa fie calculata frecventa la ADnote=nan si programul sa crape pentru ca era folosit parametrul bandwidthDetuneMultiplier inainte de a fi calculat 21 Feb 2005 - Se afiseaza corect numele fisierului proaspat salvat in fereastra principala 26 Feb 2005 - Corectata eroarea la windows si la OSS care facea ca pitch bend sa nu fie mapat corect (trebuie verificat) 27 Feb 2005 - Se afiseaza corect valoarea lui detune in centi 28 Feb 2005 - Corectata o mica eroare care facea ca sa nu se afiseze intotdeauna corect detune-ul la ADvoice - Afisajul VU-meter la Master nu mai prezinta variatii mari in timp scurt - Adaugata afisajul RMS la VU-meter 06 Mar 2005 - Facute cateva mici modificari referitoare in special la warning-uri - Corectata o mica eroare care facea ca la un Paste sa nu se actulizeze unii parametrii ai filtrului in interfata 12 Mar 2005 - Imbunatatiri la interfata PADsynth, adica se poate da "apply" direct din OscilGenUI sau ResonanceUI 13 Mar 2005 - Facute cateva compilari in Makefile pt. compilare pt. Windows (standalone exe si vst) - Se compileaza in mod cross-compile pt. windows din linux 14 Mar 2005 - Mici modificari la afisarea RMS-ului - Actualizat textul copyright-ului la anul 2005 22 Mar 2005 - Corectata o mica eroare care facea ca la schimbari foarte lente al parametrilor sa nu se actualizeze Format Filter 25 Mar 2005 - Corectata o eroare care facea ca uneori, la anumite setari ale lui SepctrumAdjust din OscilGen sa rezulte semnal zero Corectata o mica eroare care facea ca daca se foloseste setarea 440Hz la Padsynth sa se aleaga sample-ul incorect 06 Apr 2005 - Modificat installerul pt. windows si pregatit pt. installer (folosit cross-compiling si nsis&wine) - Adaugat icon in format windows (si la installer) - Adaugat parametrul '-Y' la linia de comanda, care este folosit doar pentru installerul NSIS (parametrul este necesar pentru ca NSIS ma forteaza sa dau un parametru la program pentru ca sa adauge un icon la shortcut; zynaddsubfx ignora acest parametru) 07 Apr 2005 - Pregatit pentru release 08 Apr 2005 - Corectata o mica eroare care facea ca sa nu se incarce configul la inceput - LANSAT PE INTERNET - VERSIUNEA (2.2.0) -------------------------------------------------------------------------------------------------- 12 Apr 2005 - Actualizat pentru MXML 2.2 (nu o sa mearga pe vers. mai vechi de mxml) 27 Apr 2005 - Adaugata posibilitatea de a inlatura complet interfata grafica in Makefile.inc (in acest caz nu mai sunt necesare bibliotecile grafice ca fltk) - Adaugata posibilitatea de a incarca direct un instrument cu -L (deocamdata se poate incarca doar in part-ul 0) - LANSAT PE INTERNET - VERSIUNEA (2.2.1) -------------------------------------------------------------------------------------------------- 28 Apr 2005 - Corectata o eroare care facea ca uneori sa fie frecventa prea mare la LFO daca era folosit random - Nu mai afiseaza optionea -A in help daca nu este compilat si OSS si JACK 29 Mai 2005 - Corectata o eroare care facea ca sa nu se tina minte ultimul bank 27 Aug 2005 - Corectata o eroare care facea ca sa nu mearga functia Dump (se initializa inainte de citirea configurarilor) 21 Sep 2005 - Imbunatatit modul de scalare al profilei unei armonice la PADsynth 27 Sep 2005 - Gasita si rezolvata o posibila problema la PADsynth care facea ca sa nu se foloseasca mutex la stergerea de sample-uri (daca se aleg mai putine sample-uri decat initial) 09 Oct 2005 - Rezolvat un memory-leak la FFTwrapper * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 16 Apr 2006 - Corectata o eroare care facea ca sa nu se foloseasca insertion effect la master 20 Aug 2006 - Adaugat 88200 ca rata de esantionare 14 Sep 2006 - Se afiseaza spectrul la nota cu frecventa de 440 Hz la Oscil si pentru parametru Adaptive Harmonics 30 Oct 2006 - Adaugat un patch "standalone zombie fix stripped from Lars" - Adaugat un patch "Extended mono" si "font resizing stuff" de Gerald Folcher 31 Oct 2006 - Adaugat un patch "Extended mono v.3" de Gerald Folcher - Inlocuit fl_ask cu fl_choice in fisierele .fl - In mod prestabilit nu se mai seteaza volumul la efectul 0 - Efectele sunt numerotare de la 1 si in la "send to" din partui 01 Nov 2006 - Adaugat patch-urile de Jack Midi si LASH de Lars Luthman 06 Nov 2006 - Aplicat un patch "Fix for ALSA system lockup" de Lars Luthman 10 Nov 2006 - Aplicat un patch "zyn-extendedmono_v4_update-061110.diff.gz" de Gerald Folcher 14 Nov 2006 - Aplicat un patch "zyn-CVS-extendedmono_v5_update-061113.diff.gz" de Gerald Folcher * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 19 Mar 2007 - Aplicat un patch mic de la Daniel Clemente care este un workaround la bug-ul X11 cand tin tastele apasate mai mult timp 01 Apr 2007 - O mica modificare cu xclass zynaddsubfx in MasterUI.fl 09 Sep 2007 - Schimbata licenta la GPL 2 or other later * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 02 Ian 2008 - Corectate cateva mici erori la dezalocarea memoriei - Codul de recorder wav a fost rescris - Adaugata functia de export la sample-urile din PADsynth * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 20 Feb 2009 (Mark McCurry) - Made several functions accept 'constant char' over 'char' to prevent warnings - Changed several 'delete' operations to 'delete []' based upon the usage of 'new []' - Gave external programs Makefiles - Gave dials tooltips showing their value when they are being moved - Gave dials the ability to have normal tooltips when the mouse hovers over them - Created tooltips for the effects knobs - Standardized the code, so it could compile with pedantic without errors [it looks like some errors may have been missed] 22 Feb 2009 (Mark McCurry) - Fix improper deallocation in PresetsStore - Fixed errors with drawing of the Oscillator as reported with valgrind 07 Mar 2009 (Mark McCurry) - Added start of DocBook documentation - Incorperated JACK output patch by Emmanuel Saracco - Incorperated QUERTZ layout by Achim Settelmeier 29 Mar 2009 (Mark McCurry) - Started to use Doxygen within the Effects - Started to use const within Effects - Changing tabs->four spaces in hopes of generating a bit more consitancy - Began to use Initialization Lists - Almost all changes contained in Effects until further discussion on the style, so consistancy can be reached 28 May 2009 (Mark McCurry) - Added some more Doxygen comments - Added Audio Samples classes - Added Stereo template - Added Control class - Added DelayCtl class 20 Iun 2009 (Paul Nasca) - Bugfix: WAV export of PADsynth 10 Iul 2009 (Paul Nasca) - Update copyright info 11 Jul 2009 (Mark McCurry) - Added Proportinal Portamento - Replaced Docbook with AsciiDoc 18 Jul 2009 (Mark McCurry) - Enabled volume controller by default 20 Jul 2009 (Mark McCurry) - Incorperated AZERTY layout by sourceforge user jimee 02 Sep 2009 (Mark McCurry) - Incorperated const char* <-> string mismatch by Alexis Ballier 04 Sep 2009 (Mark McCurry) - Incorperated NULLMidiIn function prototype fix by Alexis Ballier 07 Sep 2009 (Mark McCurry) - Fixed glitch in XMLwrapper, which would prevent file loading 11 Sep 2009 (Mark McCurry) - Moved PADsynth_used from public struct to has/set methods in XMLwrapper - Created wrapper functions, so that XMLwrapper can be somewhat usable when const - Removed multiple addparam methods and replaced it with one variable argument function - Replaced int2str, real2str, str2int, and str2real from XMLwrapper with stringTo and stringFrom function templates in Util. - Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper - Removed unneeded stack from XMLwrapper 18 Sep 2009 (Mark McCurry) - Started to use versioning information in XMLwrapper - Remove last of stack helper functions in XMLwrapper - Added std::string retreval to XMLwrapper 20 Sep 2009 (Paul Nasca) - Started to implement the Unison effect for ADsynth 22 Sep 2009 (Paul Nasca) - Added vibratto and other features to Unison effect 22 Sep 2009 (Mark McCurry) - Changed temporary data for Oscilgen from static to instance recommended by Tobias Doerffel - Fixed Memory leaks in UI based upon James Morris' patch 23 Sep 2009 (Paul Nasca) - Added unison invert phase - Made unison frequency spread to depend on Bandwidth controllers and parameters - Added unison vibratto speed control and other improvements - bugfixes: Voice Amplitude Envelope and FM 24 Sep 2009 (Paul Nasca) - Small enhancements and bugfixes to Unison - Started to implement Bandwidth to the Reverb effect 25 Sep 2009 (Mark McCurry) - Allowed for XMLwrapper to retrieve strings stored in mxml TEXT fields 29 Sep 2009 (Paul Nasca) - Remove the old (FFT based) Bandwidth effect to Reverb and started rewrite it (based on multivoice chorus/unison effect) 01 Oct 2009 (Paul Nasca) - Corrected the ADsynth unison LFO rounding function - Made Unison based on Bandwidth (in cents) parameter 02 Oct 2009 (Mark McCurry) - Added OSS failsafe by Jrmie Andri 04 Oct 2009 (Mark McCurry) - fixed Ctest issues 06 Oct 2009 (Mark McCurry) - Added first simple profiling test 08 Oct 2009 (Mark McCurry) - Started to see if memset/memcpy offer performance benifits when widely used - Added basic SUBnote test 09 Oct 2009 (Mark McCurry) - Restylized codebase with uncrustify 28 Oct 2009 (Paul Nasca) - Disable "bw" control on Reverb when Bandwidth mode is not enabled 30 Oct 2009 (Mark McCurry) - Commited first stage of Nio (New IO) WIP 18 Nov 2009 (Mark McCurry) - Fixed segfault in VirKeyBoard 02 Dec 2009 (Paul Nasca) - Fixed a small typo on Virtual Keyboard 10 Dec 2009 (Mark McCurry) - Separated out Presets and arrayed Presets to reduce warnings from the Wextra flag - Minor change to Filter_ and FormantFilter to reduce unwanted warnings 13 Dec 2009 (Mark McCurry) - Deprecating Output system for the Nio system - General Code Cleanup - Adding OpenGL linking for proper compiles 14 Jan 2010 (Mark McCurry) - Fixed No UI Flag "-U" as it was previously partially initializing the gui 14 Feb 2010 (Stephen Parry) - DSSI Support Repaired 14 Feb 2010 (Mark McCurry) - Made the Echo attempt to adjust the delay instead of erasing it when length is changed 02 May 2010 (Mark McCurry) - Merging in cleanup from effects and adding APhaser by Ryan Billing 27 Jun 2010 (Mark McCurry) - Aphaser and Phaser are within same effect now 17 Aug 2010 (Paul Nasca) - small bugix on adsynth.cpp 22 May 2010 (Mark McCurry) - Mergin Nio backend 18 Aug 2011 (Mark McCurry) - Fixing DSSI subsystem 29 Oct 2011 (Damien Goutte-Gattat) - Added Bank select midi support 05 Feb 2012 (Liven Moors) - Added spike waveform to oscilator options 06 Feb 2012 (Mark McCurry) - Adding --exec-after-init option 22 Feb 2012 (Liven Moors) - Added circle waveform to oscilator options 26 Mar 2012 (Mark McCurry) - Fixed Segfault in Oscillgen 27 Mar 2012 (Mark McCurry) - Fixed chorus noise bug 14 Apr 2012 (Mark McCurry) - Removed Nio debugging code 18 Apr 2012 (Jonathan Liles) - Added Non-session-manager support 31 Mar 2012 (Olaf Schulz) - Added Midi aftertouch support Please See git log For future information lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/000077500000000000000000000000001247673406200243575ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/000077500000000000000000000000001247673406200265025ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.C000066400000000000000000000044371247673406200307410ustar00rootroot00000000000000#include "Controller.h" #include #include #include pthread_mutex_t mutex; int Pexitprogram; Controller::Controller() { //init for(int i = 0; i < 6; ++i) { pars[i].mode = 1; pars[i].val1 = 0; pars[i].val2 = 127; pars[i].nrpn.cpar = 8; pars[i].nrpn.fpar = 0; pars[i].nrpn.cval = 0; } pars[0].ctl.par = 71; pars[1].ctl.par = 74; pars[2].ctl.par = 10; pars[3].ctl.par = 11; pars[4].ctl.par = 1; pars[5].ctl.par = 75; //ALSA init snd_seq_open(&midi_out, "default", SND_SEQ_OPEN_OUTPUT, 0); char portname[50]; sprintf(portname, "Controller"); int alsaport = snd_seq_create_simple_port( midi_out, portname, SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ, SND_SEQ_PORT_TYPE_SYNTH); } Controller::~Controller() { snd_seq_close(midi_out); } void Controller::sendcontroller(int par, unsigned char val) { snd_seq_event_t midievent; snd_seq_ev_clear(&midievent); snd_seq_ev_set_controller(&midievent, Pchout, par, val); snd_seq_ev_set_subs(&midievent); snd_seq_ev_set_direct(&midievent); snd_seq_event_output_direct(midi_out, &midievent); // fprintf(stderr,"Controller: %d %d\n",par,val); } void Controller::sendnrpn(int npar, unsigned char val) { // fprintf(stderr,"NRPN: %d %d %d %d\n",pars[npar].nrpn.cpar,pars[npar].nrpn.fpar,pars[npar].nrpn.cval,val); sendcontroller(0x63, pars[npar].nrpn.cpar); sendcontroller(0x62, pars[npar].nrpn.fpar); sendcontroller(0x06, pars[npar].nrpn.cval); sendcontroller(0x26, val); // fprintf(stderr,"------------\n\n"); } void Controller::send(int npar, float xval) { if(pars[npar].mode == 0) return; int val; if(pars[npar].val1 <= pars[npar].val2) val = (int) (xval * (pars[npar].val2 - pars[npar].val1 + 1.0) * 0.9999 + pars[npar].val1); else val = (int) (xval * (pars[npar].val2 - pars[npar].val1 - 1.0) * 0.9999 + pars[npar].val1 + 1.0); switch(pars[npar].mode) { case 1: sendcontroller(pars[npar].ctl.par, val); break; //case 2:break; case 3: sendnrpn(npar, val); break; } } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.h000066400000000000000000000013631247673406200310010ustar00rootroot00000000000000#ifndef CONTROLLER_H #define CONTROLLER_H #include extern pthread_mutex_t mutex; extern int Pexitprogram; class Controller { public: Controller(); ~Controller(); void send(int npar, float xval); //parameters unsigned char Pchout; struct { unsigned char mode; //0=off,1=ctl,2=RPN,3=NRPN unsigned char val1, val2; struct { unsigned char par; } ctl; struct { unsigned char cpar, fpar, cval; } nrpn; } pars[6]; private: void sendcontroller(int par, unsigned char val); void sendnrpn(int npar, unsigned char val); snd_seq_t *midi_out; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/ControllerUI.fl000066400000000000000000000143341247673406200314130ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0110 header_name {.h} code_name {.cxx} decl {\#include } {selected public } decl {\#include } {public } decl {\#include "Controller.h"} {public } decl {Controller *controller;} {} class Pad {: {public Fl_Box} } { Function {Pad(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} { code {} {} } Function {temp_draw()} {} { code {/*int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy; float freqx; fl_color(FL_BLACK); fl_rectf(ox,oy,lx,ly); fl_color(FL_GRAY); fl_line_style(FL_SOLID); fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2); */} {} } Function {sendmidi(int button,float datax,float datay)} {} { code {controller->send(button,datax); controller->send(button+1,datay);} {} } Function {handle(int event)} {return_type int } { code {int x_=Fl::event_x()-x(); int y_=Fl::event_y()-y(); if ((event==FL_PUSH)||(event==FL_DRAG)){ if (x_<0) x_=0;if (y_<0) y_=0; if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1; float tmpx=(float) x_/(w()); float tmpy=1.0-(float) y_/h(); int b=Fl::event_buttons()>>24; if (b&1) sendmidi(0,tmpx,tmpy); if (b&2) sendmidi(2,tmpx,tmpy); if (b&4) sendmidi(4,tmpx,tmpy); }; return(1);} {} } decl {int oldx,oldy;} {} } class ControllerUI {} { Function {make_window()} {} { Fl_Window controlleruiwindow { label {Midi Controller} callback {o->hide(); exit(0);} xywh {210 213 340 410} type Double hide } { Fl_Counter {} { label {Output Channel} callback {controller->Pchout=(int) o->value();} xywh {10 13 75 22} type Simple labelsize 10 align 5 minimum 0 maximum 15 step 1 textfont 1 code0 {o->value(controller->Pchout);} } Fl_Box {} { xywh {10 80 320 320} box ENGRAVED_BOX color 176 class Pad } Fl_Choice {} { callback {nbut=(int) o->value(); refreshvalues();} xywh {10 50 75 20} down_box BORDER_BOX } { MenuItem {} { label {But.1 X} xywh {0 0 100 20} labelfont 1 labelsize 12 } MenuItem {} { label {But.1 Y} xywh {10 10 100 20} labelfont 1 labelsize 12 divider } MenuItem {} { label {But.2 X} xywh {10 10 100 20} labelfont 1 labelsize 12 } MenuItem {} { label {But.2 Y} xywh {20 20 100 20} labelfont 1 labelsize 12 divider } MenuItem {} { label {But.3 X} xywh {20 20 100 20} labelfont 1 labelsize 12 } MenuItem {} { label {But.3 Y} xywh {30 30 100 20} labelfont 1 labelsize 12 } } Fl_Group ctlgroup { xywh {95 35 60 40} box ENGRAVED_BOX } { Fl_Counter ctlcounter { label Controller callback {controller->pars[nbut].ctl.par=(int) o->value();} xywh {100 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12 } } Fl_Choice modechoice { label Mode callback {controller->pars[nbut].mode=(int) o->value(); refreshvalues();} xywh {95 13 60 20} down_box BORDER_BOX labelsize 10 align 5 } { MenuItem {} { label OFF xywh {30 30 100 20} labelfont 1 labelsize 12 } MenuItem {} { label {Ctl.} xywh {20 20 100 20} labelfont 1 labelsize 12 } MenuItem {} { label RPN xywh {30 30 100 20} labelfont 1 labelsize 12 deactivate } MenuItem {} { label NRPN xywh {40 40 100 20} labelfont 1 labelsize 12 } } Fl_Group nrpngroup { xywh {160 35 170 40} box ENGRAVED_BOX } { Fl_Counter cparcounter { label {CoarseP.} callback {controller->pars[nbut].nrpn.cpar=(int) o->value();} xywh {165 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12 } Fl_Counter fparcounter { label {FineP.} callback {controller->pars[nbut].nrpn.fpar=(int) o->value();} xywh {220 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12 } Fl_Counter cvalcounter { label {CoarseV.} callback {controller->pars[nbut].nrpn.cval=(int) o->value();} xywh {275 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12 } } Fl_Counter val1counter { label {Val.1} callback {controller->pars[nbut].val1=(int) o->value();} xywh {190 15 50 15} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 12 } Fl_Counter val2counter { label {Val.2} callback {controller->pars[nbut].val2=(int) o->value();} xywh {275 15 50 15} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 127 textfont 1 textsize 12 } Fl_Button exchangebutton { label {<->} callback {unsigned char tmp=controller->pars[nbut].val2; controller->pars[nbut].val2=controller->pars[nbut].val1; controller->pars[nbut].val1=tmp; refreshvalues();} xywh {245 15 25 15} box THIN_UP_BOX } } } Function {refreshvalues()} {} { code {modechoice->value(controller->pars[nbut].mode); val1counter->value(controller->pars[nbut].val1); val2counter->value(controller->pars[nbut].val2); ctlcounter->value(controller->pars[nbut].ctl.par); cparcounter->value(controller->pars[nbut].nrpn.cpar); fparcounter->value(controller->pars[nbut].nrpn.fpar); cvalcounter->value(controller->pars[nbut].nrpn.cval); if (controller->pars[nbut].mode!=0){ val1counter->activate(); val2counter->activate(); exchangebutton->activate(); }else{ val1counter->deactivate(); val2counter->deactivate(); exchangebutton->deactivate(); }; if (controller->pars[nbut].mode==1) ctlgroup->activate(); else ctlgroup->deactivate(); if (controller->pars[nbut].mode==3) nrpngroup->activate(); else nrpngroup->deactivate();} {} } Function {ControllerUI(Controller *controller_)} {} { code {nbut=0; controller=controller_; make_window(); refreshvalues(); controlleruiwindow->show();} {} } decl {int nbut;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/main.C000066400000000000000000000003321247673406200275300ustar00rootroot00000000000000#include "Controller.h" #include "ControllerUI.h" pthread_t thr1, thr2; Controller controller; main() { ControllerUI *controllerUI = new ControllerUI(&controller); Fl::run(); delete controllerUI; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/000077500000000000000000000000001247673406200260015ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.C000066400000000000000000000046311247673406200275330ustar00rootroot00000000000000//Copyright (c) 2002-2003 Nasca Octavian Paul //License: GNU GPL 2 #include "Spliter.h" #include pthread_mutex_t mutex; int Pexitprogram; Spliter::Spliter() { //init Psplitpoint = 60; Pchin = 0; Pchout1 = 0; Pchout2 = 1; Poct1 = 0; Poct2 = 0; //ALSA init snd_seq_open(&midi_in, "default", SND_SEQ_OPEN_INPUT, 0); snd_seq_open(&midi_out, "default", SND_SEQ_OPEN_OUTPUT, 0); char portname[50]; sprintf(portname, "Spliter IN"); int alsaport = snd_seq_create_simple_port( midi_in, portname, SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_SYNTH); sprintf(portname, "Spliter OUT"); alsaport = snd_seq_create_simple_port( midi_out, portname, SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ, SND_SEQ_PORT_TYPE_SYNTH); } Spliter::~Spliter() { snd_seq_close(midi_in); snd_seq_close(midi_out); } // This splits the Midi events from one channel to another two channels void Spliter::midievents() { snd_seq_event_t *midievent; midievent = NULL; snd_seq_event_input(midi_in, &midievent); if(midievent == NULL) return; if((midievent->type == SND_SEQ_EVENT_NOTEON) || (midievent->type == SND_SEQ_EVENT_NOTEOFF)) { int cmdchan = midievent->data.note.channel; if(cmdchan == Pchin) { snd_seq_ev_set_subs(midievent); snd_seq_ev_set_direct(midievent); if(midievent->data.note.note < Psplitpoint) { midievent->data.note.channel = Pchout1; int tmp = midievent->data.note.note; tmp += Poct1 * 12; if(tmp > 127) tmp = 127; if(tmp < 0) tmp = 0; midievent->data.note.note = tmp; } else { midievent->data.note.channel = Pchout2; int tmp = midievent->data.note.note; tmp += Poct2 * 12; if(tmp > 127) tmp = 127; if(tmp < 0) tmp = 0; midievent->data.note.note = tmp; } snd_seq_event_output_direct(midi_out, midievent); } else { snd_seq_ev_set_subs(midievent); snd_seq_ev_set_direct(midievent); snd_seq_event_output_direct(midi_out, midievent); } } snd_seq_free_event(midievent); } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.h000066400000000000000000000007731247673406200276030ustar00rootroot00000000000000//Copyright (c) 2002-2003 Nasca Octavian Paul //License: GNU GPL 2 #ifndef SPLITER_H #define SPLITER_H #include #include extern pthread_mutex_t mutex; extern int Pexitprogram; class Spliter { public: Spliter(); ~Spliter(); void midievents(); //parameters unsigned char Psplitpoint; unsigned char Pchin, Pchout1, Pchout2; signed char Poct1, Poct2; private: snd_seq_t *midi_in, *midi_out; }; #endif lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/SpliterUI.fl000066400000000000000000000043631247673406200302120ustar00rootroot00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0102 header_name {.h} code_name {.cxx} decl {//Copyright (c) 2002-2003 Nasca Octavian Paul} {selected } decl {//License: GNU GPL 2} {} decl {\#include } {public } decl {\#include "Spliter.h"} {public } class SpliterUI {} { Function {make_window()} {open } { Fl_Window spliteruiwindow { label {Midi Spliter} callback {o->hide(); exit(0);} xywh {225 187 375 72} hide } { Fl_Counter {} { label {Split note} callback {spliter->Psplitpoint=(int) o->value();} xywh {93 27 114 24} labelsize 12 align 5 minimum 0 maximum 127 step 1 value 60 textfont 1 textsize 16 code0 {o->value(spliter->Psplitpoint);} code1 {o->lstep(12);} } Fl_Counter {} { label {Input Channel} callback {spliter->Pchin=(int) o->value();} xywh {6 30 69 18} type Simple labelsize 10 align 5 minimum 0 maximum 15 step 1 textfont 1 code0 {o->value(spliter->Pchin);} } Fl_Counter {} { label {Output Channel 1} callback {spliter->Pchout1=(int) o->value();} xywh {285 18 69 18} type Simple labelsize 10 align 5 minimum 0 maximum 15 step 1 textfont 1 code0 {o->value(spliter->Pchout1);} } Fl_Counter {} { label {Output Channel 2} callback {spliter->Pchout2=(int) o->value();} xywh {285 36 69 18} type Simple labelsize 10 align 6 minimum 0 maximum 15 step 1 textfont 1 code0 {o->value(spliter->Pchout2);} } Fl_Counter {} { label {Tr.1(oct.)} callback {spliter->Poct1=(int) o->value();} tooltip {Transpose (octaves)} xywh {225 18 48 18} type Simple labelsize 10 align 5 minimum -8 maximum 8 step 1 textfont 1 code0 {o->value(spliter->Poct1);} } Fl_Counter {} { label {Tr.2(oct.)} callback {spliter->Poct2=(int) o->value();} tooltip {Transpose (octaves)} xywh {225 36 48 18} type Simple labelsize 10 align 6 minimum -8 maximum 8 step 1 textfont 1 code0 {o->value(spliter->Poct2);} } } } Function {SpliterUI(Spliter *spliter_)} {} { code {spliter=spliter_; make_window(); spliteruiwindow->show();} {} } decl {Spliter *spliter;} {} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/main.C000066400000000000000000000012471247673406200270350ustar00rootroot00000000000000//Copyright (c) 2002-2003 Nasca Octavian Paul //License: GNU GPL 2 #include #include "Spliter.h" #include "SpliterUI.h" pthread_t thr1, thr2; Spliter spliter; void *thread1(void *arg) { Fl::run(); return 0; } void *thread2(void *arg) { while(Pexitprogram == 0) spliter.midievents(); return 0; } main() { Pexitprogram = 0; SpliterUI *spliterUI = new SpliterUI(&spliter); pthread_mutex_init(&mutex, NULL); pthread_create(&thr1, NULL, thread1, NULL); pthread_create(&thr2, NULL, thread2, NULL); while(Pexitprogram == 0) { usleep(100000); } pthread_mutex_destroy(&mutex); delete spliterUI; }; lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/readme.txt000066400000000000000000000013171247673406200300010ustar00rootroot00000000000000Spliter ------ This program splits the keyboard and alows you to play two instruments same time. You can use this program with ZynAddSubFX or any other synthesizer. This requires ALSA 0.9.x. To compile it, run "make". If you want to use with ZynAddSubFX send the midi events thru Spliter with aconnect like this: - connect the keyboard port to "Spliter IN" port - connect the "Spliter OUT" to ZynAddSubFX - change the midi channels that you want to play. Be sure that the both output channels are enabled and receive NoteOn in ZynAddSubFX. If you change some settings from Spliter while you are playing to keyboard you may ecounter "stucked keys". To clear all theese press to "Panic" button from ZynAddSubFX. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/readme.txt000066400000000000000000000002231247673406200263520ustar00rootroot00000000000000These are external programs, which can use with ZynAddSubFX or any other midi device. More information is in the documentation (html - webpages). lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/FAQ.txt000066400000000000000000000030331247673406200222310ustar00rootroot00000000000000 Frequently Asked Questions -------------------------- Q1) What means "ZynAddSubFX" ? A1) The name of the program comes from 4 words: 1) Synthesizer ('S'->'Z') --> Zyn ^^^ 2) Additive Synthesis ------> Add ^^^ 3) Subtractive Synthesis ---> Sub ^^^ 4) Effects ----------------> FX So, ZynAddSubFX is a SYNthesizer with ADDitive, SUBtractive engines and effects. Q2) How can I load files from older versions of ZynAddSubFX (like *.mas_zyn,etc) A2) You need to convert them into new format. Please use 2.0.0pre1 or (recommended) 2.0.0pre2 versions of ZynAddSubFX to load old file formants and save them in the new formats Q3) How can I change the number of parts, voices to ADSynth, effects, etc. ? A3) Look in src/globals.h and change there these values. You don't have to change anything else, just recompile all. But most settings must be below 128. As the rule of the thumb if a setting is 128 or below 128, please don't make it bigger than 128. Anyway, I don't believe that you'll need more than 128 for these settings; for example you don't need 128(or more) effects same time? That's why I put the limit of 128 (using 7 bits of char). Q4) How do I enable Jack support on ZynAddSubFX ? A4) If your system has the jack libraries installed, ZynAddSubFX should automatically build with jack support. It is highly recommended that the Jack samplerate to be equal to ZynAddSubFX samplerate (SAMPLE_RATE from globals.h), otherwise the resampling will be done and this will decrease the quality a bit. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt000066400000000000000000000300161247673406200227640ustar00rootroot000000000000002.4.4 (28 Jun 2014) - Add UI Mousewheel Support - Add Spectral Adjust Parameter Rescaling - Add Subnote filter smoothing - Add Unison derandomization options - Add NSM import/export - Add NTK UI compatiability - (re)Add OSX Support - Enhance performance of ADnote and SUBnote - Enhance Installer - Fix JACK2 specific segfault - Fix possible DSSI specific segfaults - Fix Unison Regressions - Documentation additions - Misc bug fixes 2.4.3 (15 Jun 2012) - Non-session manager support - Midi aftertouch support - Documentation additions - Somewhat more sane Nio defaults - Misc bug fixes 2.4.2 (26 Feb 2012) - New IO backend support - MIDI bank select - Spike/Circle waveform - Faster subsynth - --exec-after-init flag - Version information compiled in - Misc Bug fixes 2.4.1 (27 Jun 2010) - Azerty layout - XML bug fixes - Vibrato/Unison additions - Reverb rewrite - DSSI support enabled - Adding APhaser - other bugfixes - code cleanup 2.4.0 (21 Jun 2009) - extended mono functionality - legato mode - export functionality on PADsynth - inclusion of LASH client - inclusion of DSSI audio output - enabled tooltips for knobs (both description and value tooltips) - added support for newer JACK api - added quertz support for virtual keyboard - started to encorperate cxxtest for unit testing - many bugfixes - code cleanup 2.2.1 (28 Apr 2005) - made to work with mxml-2.2 (will NOT work on older versions) - it is possible to remove completely the graphical user interface (e.g. it can run without X). For this you need to modify the DISABLE_GUI option from the Makefile.inc - added a commandline -L which load a instrument (.xiz) - now it only loads to part 0 (you can use this option with -l to load a master file and after this the option -L to replace the part) 2.2.0 (8 Apr 2005) - the VST version of ZynAddSubFX is removed from the instalation until it will be more stable (hope soon :) ) - now, the instrument banks contains over 300 high quality instruments - added "Apply" a button from OscilGen window for PADsynth - added another parameter to ADsynth that controls the amount of all detunes of voices - adaptive harmonics postprocess - improved the VU-meter and added a RMS plot - Dvorak support for Virtual Keyboard - many bugs fixed and code cleanups 2.1.1 (2 Oct 2004) - Removed a big bug that prevented changing the part 2.1.0 (1 Oct 2004) - Added a installer for windows (thanks to NSIS installer ( http://nsis.sourceforge.net/ ) ). Both VST and standalone vesions are contained in the same installer. - Added a new user interface for beginners. You can switch the current user interface with that anytime do you want. - All parts, effects, etc. are counted from '1' and not from '0' - Added the posibility to compile the OSS and JACK support in the same binary (look in the Makefile.inc) - VST host should be able to save all zynaddsubfx parameters into their setups (this is untested) - Bugfixes and other 2.0.0 (27 Aug 2004) - VST version works (there are some issues/bugs but it works) - Added a advanced Clipboard and Preset module - now is possible to add user preset LFOs,Envelopes, Effects, Oscillators, Resonances, Filters, etc. - Completely removed the *.MAS_ZYN formats (masters, instruments,etc) support; use 2.0.0pre1 and 2.0.0pre2 to convert - Corrected a error to pitch bend on VST plugin (thanks to Krzysztof Korpiela) - Impoved the PADsynth module - Because the PADsynth module takes a time to load, the instrument that contains such modules are shown in different colors - Bugfixes - Other 2.0.0_pre2 (31 Iul 2004) - Updated the XMLwrapper to mxml-2.0 - Many bugfixes - Other 2.0.0_pre1 (17 Iul 2004) - Added a new powerful synth engine which is called PADsynth, you can make very beautifull pads and even some strange sounds - Now is used the XML format for all zynaddsubfx parameters(.XMZ for master parameters, .XIZ for instrument parameters and .XSZ for scale parameters).You can import older parameters. All parameters files are compressed with gzip algorithm. - Some parameters has changed and you might ecounter different sounds that you saved in the older versions of zynaddsubfx - The instrument banks are no longer single files, but directories that contains instrument .XIZ files (you can organize them even with a file manager). Also, you can use more than 1 banks easily. - Added a new effect called DynamicFilter that allows you to do WahWah,AutoWah, VocalMorpher and other effects - Speedups - Started to write a small sequencer that allows to load and play a midi file from zynaddsubfx (unfinished) - ZynAddSubFX is available from CVS, too. Please look at the sourceforge project page to get more information ( http://sourceforge.net/projects/zynaddsubfx ) - The waveform generator (OscilGen) has many new parameters :) also if you press the "Shift" key, you can draw the hamonics amplitude/phases - Many user interface improvements - You can load a file at the start of the program with "-l" command-line parameter and you can run zynaddsubfx w/o user interface with "-U" - It is possible to dump all MIDI notes into a text file - The instruments can contain comments and copyright information in order to encourage sharing of them - FFT3W library is supported - More "randomness" options - Other impovements - Many, many bugfixes - Added the full changelog (since I started to write zynaddsubfx), most is in Romanian - Other things 1.4.3 (31 Aug 2003) - added state variable filters and other types to analog filters - small user interface improvememnts - small bugfixes 1.4.2 (17 Iul 2003) - added full-featured, advanced formantic filters - added mixer panel which lets you to see/change most important part settings, and shows a vu-meters for each part - you can choose to process the instrument's kit items only with one Part effect (eg. you can make a instrument kit that contains a reverberated piano and flanged strings) - enabled to launch more instances in Jack - when is launched first time, it searches for default.bnk_zyn file into /usr/share/zynaddsubfx and /usr/local/share/zynaddsubfx directories (useful for binary packages for Linux distributions) - bugfixes 1.4.1 (8 May 2003) - added single mode to the instrument kit who alows only one item to be played same time - added "Spectrum Adjust" to the ADsynth oscillator - added "drum mode" to the instrument, where all midi keys are mapped to 12tET - added a parameter to the "440Hz" which make the freq to varies a bit according to the key pressed (very usefull to toms and other drums) - (for OSS audio out) if it is launched with root privileges, the synth will gain realtime scheduling priority - bugfixes 1.4.0 (15 Apr 2003) - added instrument's own effect (effects that are loaded/saved with the instrument) - FreeMode Envelopes: all Envelopes can have any shape (not only ADSR) - Added instrument kits: It is possible to use more than one instruments into one part (used for layered synths or drum kits) - Amplitude envelopes can be linear or logarithmic - added interpolation on the Resonance user interface - user interface improvements and cleanups of it's code - initiated a mailing list to allow users to share patches for ZynAddSubFX. Please share your ZynAddSubFX patches; look at http://lists.sourceforge.net/mailman/listinfo/zynaddsubfx-user for more information about the mailing list. 1.2.1 (6 Apr 2003) - improved filter interpolation - bugfix: wav header is written correctly - bugfix: NRPN works correctly (eg:the controller was 0x98 instead of 98), now you can controll all effects parametrer realtime via MIDI - bugfix: pitch bend works OK in windows - added master fine detune (-64..63 cents) - it is possible to swap effects or copy them - started to port ZynAddSubFX to VST (not functional, yet) - the resonace can protect the fundamental freq. against damping 1.2.0 (21 Mar 2003) - ZynAddSubFX is ported to Windows ;-) - added internal Virtual Keyboard - added Configuration window - added frequency tracking to filter - improved the OscilGen (harmonic filter, RMS normalisation, etc..) - improved the recorder (uses the WAV file format and it starts only when a key is pressed) - added filter interpolation if the frequency is changed very fast (it removes some annoying clicks) - other improovements, bugfixes, speedups and cleanups of the code 1.0.9 (24 Feb 2003) - added keylimit to Part - you can use multiple filter stages in order to make very steep filter rolloffs (eg. 48 dB/octave) - ADsynth - added noise mode and you can make fixed frequencies; added the "Punch" parameter - added an external program "Controller" which enables you to use the mouse for MIDI controllers - other improvements and bugfixes 1.0.8 (14 Feb 2003) - added mono mode and portamento - added the EQ effect - the output of a system effect can be sent to others system effects - minor bugfixes and improvements 1.0.7 (7 Feb 2003) - some settings (like samplerate) are set at runtime (by comand line) - added Distorsion effect - added controllers, and NRPNs for changing all effects parameters by midi - bugs removed and other improvements 1.0.6 (30 Jan 2003) - Added JACK output ;-) - Minor improvements and bugfixes 1.0.5 (24 Jan 2003) - The bug that crashed ZynAddSubFX if you change some effect parameters, it is realy removed (I forgot to update the file before upload) - Other bugfixes and code cleanups - Added a Global Filter to SubSynth - Added keyresponse limits to Part - Added presets to Effects - The fade is smaller on high frequecy content and larger on low frequecies; so you'll don't hear starting clicks on basses and audible fadeins on higher pitched sounds - Added tunnings to Reverb: you can choose Random of Freeverb 1.0.4 (7 Jan 2003) - It is possible to load Scala (.scl and .kbm) files - Added mapping from note number to scale degree is possible to load Scala kbm files - Corrected small bugs related to Microtonal - If you want to use ZynAddSubFX with OSS (or you don't have ALSA) you can modify the Makefile.inc file to compile with OSS only. - It is shown the real detune (in cents) - Made a new widget that replaces the Dial widget - Removed a bug that crashed ZynAddSubFX if you change some effect parameters 1.0.3 (23 Dec 2002) - small bugfixes: "Bypass Global Filter" from ADnoteUI dissapears sometimes ; removed the low amplitude noise produced by the reverb; if you "acconect" zynaddsubfx with aseqview no note was processed a long time. - added Notch Filter - added the option to randomize the ressonance function - added VU-Meter - Change the Insertion effect modes behaves (it sounds a bit louder) - Added to the project an external program called Spliter that splits the keyboard and alows you to play two instruments same time. You can use this program with ZynAddSubFX or any other synthesizer. - Added a new function to OscilGen 1.0.2-1 (13 Dec 2002) - bug found and removed: sometimes when Master/Instrument is saved, the synth crashed 1.0.2 (13 Dec 2002) - Added instrument banks - the BandPass Filter's output amplitude was increased - few fixes of FFTwrapper. See the documentation from "FFTwrapper.h" if you got error messages. 1.0.1 (6 Dec 2002) - corrected a bug that made ZynAddSubFX to crash(sometimes) if you disable a part - wrote Resonance - added the BandPass filter - added the recording feature - added "New instrument" menuitem 1.0.0 (25 Sep 2002) - first release, done a lot before it :-) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/README.txt000066400000000000000000000073071247673406200225670ustar00rootroot00000000000000ZynAddSubFX ----------- It is a realtime software synthesizer for Linux and Windows with many features. Please see the docs for details. Copyright (c) 2002-2014 Nasca Octavian Paul and others contributors e-mail: zynaddsubfx AT yahoo D0T com ZynAddSubFX is free program and is distributed WITH NO WARRANTY. It is licensed under GNU General Public License version 2 (and only version 2) - see the file COPYING. --==## PLEASE SHARE YOUR INSTRUMENTS/MASTER SETTINGS ##==-- --==## MADE WITH ZynAddSubFX ##==-- Here is the mailing list where you can share your patches with others: http://lists.sourceforge.net/mailman/listinfo/zynaddsubfx-user The project page is http://sourceforge.net/projects/zynaddsubfx or http://zynaddsubfx.sourceforge.net ZynAddSubFX is also available on many Internet sites like: http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html (Planet CCRMA) http://www.hitsquad.com/smm/programs/ZynAddSubFX/ http://freshmeat.net/projects/zynaddsubfx/ http://ibiblio.org/pub/Linux/apps/sound/midi/ or search "ZynAddSubFX" on a search engine (like www.google.com). Requirements: ------------- - a fast computer - Linux or Windows - FFTW 3.x.x - necessary for Fast Fourier computations - MXML-2.5 or more recent library from www.minixml.org - zlib library from http://www.zlib.org - (for Linux) OpenSoundSystem (OSS) (if you don't have ALSA, only) - (for Windows) pthreads, portaudio Not required, but recommended: ------------------------------ - FLTK 1.x.x (tested with fltk 1.1.0, 1.1.1, 1.1.2,etc.) - ALSA 0.9.x or later (with OSS emulation, if you don't use JACK) - JACK - a VST host for the VST version [For more information see: http://www.kvraudio.com/forum/viewtopic.php?t=268277&sid=95be0b6c9909300d566006428bcbb97d] Compilation: ------------ For the main program see doc/build.txt. To compile the Spliter, run "make" from the "Spliter" directory. To compile the Controller, run "make" from the "Controller" directory. Running on LINUX ---------------- Under linux there are several options for both audio output and MIDI input. Defaults are set at compile time and the desired backend can be set when starting ZynAddSubFX with the '-I' and '-O' options. The currently supported backends are: - Audio Output * ALSA (Advanced Linux Sound Architecture) * OSS (Open Sound System) * JACK (JACK Audio Connection Kit) * Port Audio - MIDI Input * ALSA * OSS * JACK Running on WINDOWS ------------------ NOTE: At this time only older versions of ZynAddSubFX were compiled on windows See older versions on sf.net (ie version 2.2.1) If you launch zynaddsubfx.exe and nothing happens, you need pthreadGC.dll in the same directory (or windows directory). The dll files are distribuited with ZynAddSubFX windows binaries. It might be possible that the latency will be very high. If this happens, you have to set the environment variable PA_MIN_LATENCY_MSEC to a value that represents the latency in miliseconds. Eg: (in autoexec.bat or launched before running ZynAddSubFX) "set PA_MIN_LATENCY_MSEC=50" Warning: if the value is too low, you might encounter severe dropouts on ZynAddSubFX. You'll have to set to a higher value and turn off automated background tasks (like virus scanners, email clients, etc.). If you have more cards, you can select the desired card where you can play audio with the environment variable "PA_RECOMMENDED_OUTPUT_DEVICE" Eg: "set PA_RECOMMENDED_OUTPUT_DEVICE=1" A better way to set all of this, I will put on next versions. Please send me instruments,banks,master settings,songs(midi+...xmz files) done with ZynAddSubFX. I'll appreciate this. Have fun! :-) --The ZynAddSubFX team lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/bugs.txt000066400000000000000000000000001247673406200225510ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/cmake/000077500000000000000000000000001247673406200221425ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/cmake/FindAlsa.cmake000066400000000000000000000056611247673406200246350ustar00rootroot00000000000000# Alsa check, based on libkmid/configure.in.in. # Only the support for Alsa >= 0.9.x was included; 0.5.x was dropped (but feel free to re-add it if you need it) # It defines ... # It offers the following macros: # ALSA_CONFIGURE_FILE(config_header) - generate a config.h, typical usage: # ALSA_CONFIGURE_FILE(${CMAKE_BINARY_DIR}/config-alsa.h) # ALSA_VERSION_STRING(version_string) looks for alsa/version.h and reads the version string into # the first argument passed to the macro # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Matthias Kretz # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. include(CheckIncludeFiles) include(CheckIncludeFileCXX) include(CheckLibraryExists) # Already done by toplevel find_library(ASOUND_LIBRARY asound) set(ASOUND_LIBRARY_DIR "") if(ASOUND_LIBRARY) get_filename_component(ASOUND_LIBRARY_DIR ${ASOUND_LIBRARY} PATH) endif(ASOUND_LIBRARY) check_library_exists(asound snd_seq_create_simple_port "${ASOUND_LIBRARY_DIR}" HAVE_LIBASOUND2) if(HAVE_LIBASOUND2) message(STATUS "Found ALSA: ${ASOUND_LIBRARY}") else(HAVE_LIBASOUND2) message(STATUS "ALSA not found") endif(HAVE_LIBASOUND2) set(ALSA_FOUND ${HAVE_LIBASOUND2}) find_path(ALSA_INCLUDES alsa/version.h) macro(ALSA_VERSION_STRING _result) # check for version in alsa/version.h if(ALSA_INCLUDES) file(READ "${ALSA_INCLUDES}/alsa/version.h" _ALSA_VERSION_CONTENT) string(REGEX REPLACE ".*SND_LIB_VERSION_STR.*\"(.*)\".*" "\\1" ${_result} ${_ALSA_VERSION_CONTENT}) else(ALSA_INCLUDES) message(STATUS "ALSA version not known. ALSA output will probably not work correctly.") endif(ALSA_INCLUDES) endmacro(ALSA_VERSION_STRING _result) get_filename_component(_FIND_ALSA_MODULE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) macro(ALSA_CONFIGURE_FILE _destFile) check_include_files(sys/soundcard.h HAVE_SYS_SOUNDCARD_H) check_include_files(machine/soundcard.h HAVE_MACHINE_SOUNDCARD_H) check_include_files(linux/awe_voice.h HAVE_LINUX_AWE_VOICE_H) check_include_files(awe_voice.h HAVE_AWE_VOICE_H) check_include_files(/usr/src/sys/i386/isa/sound/awe_voice.h HAVE__USR_SRC_SYS_I386_ISA_SOUND_AWE_VOICE_H) check_include_files(/usr/src/sys/gnu/i386/isa/sound/awe_voice.h HAVE__USR_SRC_SYS_GNU_I386_ISA_SOUND_AWE_VOICE_H) check_include_file_cxx(sys/asoundlib.h HAVE_SYS_ASOUNDLIB_H) check_include_file_cxx(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H) check_library_exists(asound snd_pcm_resume "${ASOUND_LIBRARY_DIR}" ASOUND_HAS_SND_PCM_RESUME) if(ASOUND_HAS_SND_PCM_RESUME) set(HAVE_SND_PCM_RESUME 1) endif(ASOUND_HAS_SND_PCM_RESUME) configure_file(${_FIND_ALSA_MODULE_DIR}/config-alsa.h.cmake ${_destFile}) endmacro(ALSA_CONFIGURE_FILE _destFile) mark_as_advanced(ALSA_INCLUDES ASOUND_LIBRARY) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/cmake/FindCxxTest.cmake000066400000000000000000000172061247673406200253550ustar00rootroot00000000000000# - Find CxxTest # Find the CxxTest suite and declare a helper macro for creating unit tests # and integrating them with CTest. # For more details on CxxTest see http://cxxtest.tigris.org # # INPUT Variables # # CXXTEST_USE_PYTHON [deprecated since 1.3] # Only used in the case both Python & Perl # are detected on the system to control # which CxxTest code generator is used. # Valid only for CxxTest version 3. # # NOTE: In older versions of this Find Module, # this variable controlled if the Python test # generator was used instead of the Perl one, # regardless of which scripting language the # user had installed. # # CXXTEST_TESTGEN_ARGS (since CMake 2.8.3) # Specify a list of options to pass to the CxxTest code # generator. If not defined, --error-printer is # passed. # # OUTPUT Variables # # CXXTEST_FOUND # True if the CxxTest framework was found # CXXTEST_INCLUDE_DIRS # Where to find the CxxTest include directory # CXXTEST_PERL_TESTGEN_EXECUTABLE # The perl-based test generator # CXXTEST_PYTHON_TESTGEN_EXECUTABLE # The python-based test generator # CXXTEST_TESTGEN_EXECUTABLE (since CMake 2.8.3) # The test generator that is actually used (chosen using user preferences # and interpreters found in the system) # CXXTEST_TESTGEN_INTERPRETER (since CMake 2.8.3) # The full path to the Perl or Python executable on the system # # MACROS for optional use by CMake users: # # CXXTEST_ADD_TEST( ) # Creates a CxxTest runner and adds it to the CTest testing suite # Parameters: # test_name The name of the test # gen_source_file The generated source filename to be # generated by CxxTest # input_files_to_testgen The list of header files containing the # CxxTest::TestSuite's to be included in # this runner # # #============== # Example Usage: # # find_package(CxxTest) # if(CXXTEST_FOUND) # include_directories(${CXXTEST_INCLUDE_DIR}) # enable_testing() # # CXXTEST_ADD_TEST(unittest_foo foo_test.cc # ${CMAKE_CURRENT_SOURCE_DIR}/foo_test.h) # target_link_libraries(unittest_foo foo) # as needed # endif() # # This will (if CxxTest is found): # 1. Invoke the testgen executable to autogenerate foo_test.cc in the # binary tree from "foo_test.h" in the current source directory. # 2. Create an executable and test called unittest_foo. # # #============= # Example foo_test.h: # # #include # # class MyTestSuite : public CxxTest::TestSuite # { # public: # void testAddition( void ) # { # TS_ASSERT( 1 + 1 > 1 ); # TS_ASSERT_EQUALS( 1 + 1, 2 ); # } # }; # #============================================================================= # Copyright 2008-2010 Kitware, Inc. # Copyright 2008-2010 Philip Lowman # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) # Version 1.4 (11/18/10) (CMake 2.8.4) # Issue 11384: Added support to the CXX_ADD_TEST macro so header # files (containing the tests themselves) show up in # Visual Studio and other IDEs. # # Version 1.3 (8/19/10) (CMake 2.8.3) # Included patch by Simone Rossetto to check if either Python or Perl # are present in the system. Whichever intepreter that is detected # is now used to run the test generator program. If both interpreters # are detected, the CXXTEST_USE_PYTHON variable is obeyed. # # Also added support for CXXTEST_TESTGEN_ARGS, for manually specifying # options to the CxxTest code generator. # Version 1.2 (3/2/08) # Included patch from Tyler Roscoe to have the perl & python binaries # detected based on CXXTEST_INCLUDE_DIR # Version 1.1 (2/9/08) # Clarified example to illustrate need to call target_link_libraries() # Changed commands to lowercase # Added licensing info # Version 1.0 (1/8/08) # Fixed CXXTEST_INCLUDE_DIRS so it will work properly # Eliminated superfluous CXXTEST_FOUND assignment # Cleaned up and added more documentation #============================================================= # CXXTEST_ADD_TEST (public macro) #============================================================= macro(CXXTEST_ADD_TEST _cxxtest_testname _cxxtest_outfname) set(_cxxtest_real_outfname ${CMAKE_CURRENT_BINARY_DIR}/${_cxxtest_outfname}) add_custom_command( OUTPUT ${_cxxtest_real_outfname} DEPENDS ${ARGN} COMMAND ${CXXTEST_TESTGEN_INTERPRETER} ${CXXTEST_TESTGEN_EXECUTABLE} ${CXXTEST_TESTGEN_ARGS} -o ${_cxxtest_real_outfname} ${ARGN} ) set_source_files_properties(${_cxxtest_real_outfname} PROPERTIES GENERATED true) add_executable(${_cxxtest_testname} ${_cxxtest_real_outfname} ${ARGN}) if(CMAKE_RUNTIME_OUTPUT_DIRECTORY) add_test(${_cxxtest_testname} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${_cxxtest_testname}) elseif(EXECUTABLE_OUTPUT_PATH) add_test(${_cxxtest_testname} ${EXECUTABLE_OUTPUT_PATH}/${_cxxtest_testname}) else() add_test(${_cxxtest_testname} ${CMAKE_CURRENT_BINARY_DIR}/${_cxxtest_testname}) endif() endmacro(CXXTEST_ADD_TEST) #============================================================= # main() #============================================================= if(NOT DEFINED CXXTEST_TESTGEN_ARGS) set(CXXTEST_TESTGEN_ARGS --error-printer) endif() find_package(PythonInterp QUIET) find_package(Perl QUIET) find_path(CXXTEST_INCLUDE_DIR cxxtest/TestSuite.h) find_program(CXXTEST_PYTHON_TESTGEN_EXECUTABLE NAMES cxxtestgen cxxtestgen.py PATHS ${CXXTEST_INCLUDE_DIR}) find_program(CXXTEST_PERL_TESTGEN_EXECUTABLE cxxtestgen.pl PATHS ${CXXTEST_INCLUDE_DIR}) if(PYTHONINTERP_FOUND OR PERL_FOUND) include(FindPackageHandleStandardArgs) if(PYTHONINTERP_FOUND AND (CXXTEST_USE_PYTHON OR NOT PERL_FOUND OR NOT DEFINED CXXTEST_USE_PYTHON)) set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PYTHON_TESTGEN_EXECUTABLE}) set(CXXTEST_TESTGEN_INTERPRETER ${PYTHON_EXECUTABLE}) FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG CXXTEST_INCLUDE_DIR CXXTEST_PYTHON_TESTGEN_EXECUTABLE) elseif(PERL_FOUND) set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PERL_TESTGEN_EXECUTABLE}) set(CXXTEST_TESTGEN_INTERPRETER ${PERL_EXECUTABLE}) FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG CXXTEST_INCLUDE_DIR CXXTEST_PERL_TESTGEN_EXECUTABLE) endif() if(CXXTEST_FOUND) set(CXXTEST_INCLUDE_DIRS ${CXXTEST_INCLUDE_DIR}) endif() else() set(CXXTEST_FOUND false) if(NOT CxxTest_FIND_QUIETLY) if(CxxTest_FIND_REQUIRED) message(FATAL_ERROR "Neither Python nor Perl found, cannot use CxxTest, aborting!") else() message(STATUS "Neither Python nor Perl found, CxxTest will not be used.") endif() endif() endif() lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/cmake/FindJACK.cmake000066400000000000000000000005511247673406200244560ustar00rootroot00000000000000#Find JACK Audio Connection Kit include(LibFindMacros) libfind_pkg_check_modules(JACK jack) find_path(JACK_INCLUDE_DIR NAMES jack/jack.h PATHS ${JACK_INCLUDE_DIRS} ) find_library(JACK_LIBRARY NAMES jack PATHS ${JACK_LIBRARY_DIRS} ) set(JACK_PROCESS_INCLUDES JACK_INCLUDE_DIR) set(JACK_PROCESS_LIBS JACK_LIBRARY) libfind_process(JACK) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/cmake/FindOSS.cmake000066400000000000000000000005461247673406200244160ustar00rootroot00000000000000# Find OSS (Open Sound System) find_path(OSS_INCLUDE_DIR sys/soundcard.h) set(OSS_LIBRARIES True) mark_as_advanced(OSS_INCLUDE_DIR) # handle the QUIETLY and REQUIRED arguments and set OSS_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(OSS DEFAULT_MSG OSS_LIBRARIES OSS_INCLUDE_DIR) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/cmake/Findzlib.cmake000066400000000000000000000026301247673406200247060ustar00rootroot00000000000000# - Find zlib # Find the native ZLIB includes and library # # ZLIB_INCLUDE_DIRS - where to find zlib.h, etc. # ZLIB_LIBRARIES - List of libraries when using zlib. # ZLIB_FOUND - True if zlib found. #============================================================================= # Copyright 2001-2009 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) IF (ZLIB_INCLUDE_DIR) # Already in cache, be silent SET(ZLIB_FIND_QUIETLY TRUE) ENDIF (ZLIB_INCLUDE_DIR) FIND_PATH(ZLIB_INCLUDE_DIR zlib.h) SET(ZLIB_NAMES z zlib zdll) FIND_LIBRARY(ZLIB_LIBRARY NAMES ${ZLIB_NAMES} ) MARK_AS_ADVANCED( ZLIB_LIBRARY ZLIB_INCLUDE_DIR ) # Per-recommendation SET(ZLIB_INCLUDE_DIRS "${ZLIB_INCLUDE_DIR}") SET(ZLIB_LIBRARIES "${ZLIB_LIBRARY}") # handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB DEFAULT_MSG ZLIB_LIBRARIES ZLIB_INCLUDE_DIRS) lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/000077500000000000000000000000001247673406200216275ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/Doxyfile000066400000000000000000000257211247673406200233440ustar00rootroot00000000000000# Doxyfile 1.5.7 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = ZynAddSubFX PROJECT_NUMBER = 2.3.0 OUTPUT_DIRECTORY = /home/mark/zynaddsubfx/doc/dox2/ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = YES FULL_PATH_NAMES = YES STRIP_FROM_PATH = /home/mark/zynaddsubfx/src/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 5 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES TYPEDEF_HIDES_STRUCT = NO SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = YES HIDE_UNDOC_CLASSES = YES HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = /home/mark/zynaddsubfx/src/ INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.py \ *.f90 \ *.f \ *.vhd \ *.vhdl \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.PY \ *.F90 \ *.F \ *.VHD \ *.VHDL RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES HTML_DYNAMIC_SECTIONS = NO GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHG_LOCATION = DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NONE TREEVIEW_WIDTH = 250 FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = NO MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES DOT_FONTNAME = FreeSans DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = YES TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = YES CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/000077500000000000000000000000001247673406200221435ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/01-intro_IT.txt000066400000000000000000000051521247673406200246540ustar00rootroot00000000000000Come iniziare --------------- ZynAddSubFX è un sintetizzatore software piuttosto complesso, con un gran numero di controlli. Perciò l'uso di ZynAddSubFX non è sempre ovvio. Molte applicazioni sotto Linux trasportano il MIDI con AlSA e trasmettono l'audio con JACK. ZynAddSubFX può essere lanciato con questa configurazione eseguendo: ------------------------------ zynaddsubfx -I alsa -O jack -a ------------------------------ Questo imposta ALSA come driver input e JACK come driver audio, che dovrebbe tentare di connettersi automaticamente alla tua scheda audio, per via del flag -a. Se questa è la prima volta che lanci ZynAddSubFX, vedrai una schermata che ti lascia scegliere tra l'interfaccia per principianti e quella avanzata. Attualmente l'interfaccia 'beginner' è deprecata, quindi è raccomandato usare l'interfaccia 'advanced'. Ora dovresti essere in grado di vedere la finestra principale di ZynAddSubFX, dalla quale puoi impostare patch, effetti e altre configurazioni generali, ma la cosa più importante è che fornisce i collegamenti tra le patch. ZynAddSubFX è uno strumento potente con una serie di patch di base, ma la vera forza sta dietro all'abilità di creare delle patch personali. .Main Window image::./images/uimain.png[] Per un utilizzo base, potrai usare il pulsante alla destra dell'etichetta 'enabled'. Questo pulsante consentirà di selezionare lo strumento desiderato dai banchi disponibili in ZynAddSubFX. Per suonare note in ZynAddSubFX puoi usare la tastiera virtuale integrata (accessibile dal pulsante 'vK') oppure puoi connettere la tua tastiera al sistema e usare *aconnect* per connetterla in ZynAddSubFX (supponendo che si stia usando ALSA). Questa finestra principale consente l'accesso a molte features più avanzate. Di cui alcune sono: * System Effects * Insertion Effects * Recording * Part Settings (strumento impostazioni del livello) * Master Settings * Microtonal Settings Ad esempio, per utilizzare la funzione di registrazione deve essere selezionato un file wave dal menù di registrazione, poi può essere avviata con il pulsante 'record' e stoppata con il pulsante 'stop'. Questo è un modo semplice e veloce di registrare alcuni samples da ZynAddSubFX, anche se ci sono strumenti con caratteristiche più complete disponibili tramite gli strumenti di registrazione di JACK. NOTE: Dopo aver premuto 'record', il file wave non partirà la registrazione fino a quando un nuovo tasto non sarà premuto da una sorgente MIDI esterna o dalla virtual keyboard. Le proprietà dei 'System Effects' e degli 'Insertion Effects' sono accessibili e disponibili così come le proprietà di ogni strumento. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/02-filter_IT.txt000066400000000000000000000054761247673406200250200ustar00rootroot00000000000000Filters ------- :Author: Mark McCurry :Date: June 24, 2012 ZynAddSubFX offre diversi tipi di filtri, che possono essere usati per modellare lo spettro di un segnale. I parametri primari che influenzano le caratteristiche del filtro sono 'cutoff', 'resonance', 'filter stages' e il tipo di filtro '(filter type)'. * *Cutoff (frequenza di taglio)*: Questo valore determina quale frequenza segna il punto di cambiamento per il filtro. In un filtro 'low-pass' (passa-bassi) questo valore segna il punto da cui le frequenze alte verranno attenuate. * *Resonance*: La Resonance di un filtro determina l'enfatizzazione del filtro sulla frequenza di taglio. In ZynAddSubFX è rappresentata dal fattore 'Q', che è definito come la frequenza di taglio diviso la larghezza di banda '(bandwidth)'. In altre parole un più alto valore di Q causa un picco molto più stretto e risonante. * *Stages*: Il numero di fasi di filtrazione in un dato filtro descrive quanto bruscamente è in grado di applicare cambiamenti nella risposta in frequenza. I filtri analogici di base '(analog)' che ZynAddSubFX offre sono mostrati di seguito, con la frequenza centrale segnata con una linea rossa. I filtri a stato variabile '(state variable)' dovrebbero essere molto simili. image:images/filter0.png[] Come detto in precedenza, il valore Q di un filtro influenza quanto concentrata è l'energia del segnale nella frequenza di taglio; il risultato di differenti valori di Q sono mostrati sotto. TIP: Per molti suoni analogici classici, alti valori di Q sono ussati sugli 'sweeping filters'. Un semplice low-pass filter con Q alto modulato da un forte 'envelope' solitamente è sufficiente per avere un buon suono. image:images/filter1.png[] Infine, l'effetto dell'ordine del filtro può essere visto sotto. Questo è approssimativamente il numero di fasi del filtro '(filter stages)'. Per patches più complesse è importante capire che la nitidezza in più nel filtro non è gratuita, in quanto richiede molti più calcoli in corso di esecuzione; questo fenomeno è più facilmente visibile nel 'subsynth', dove è facile avere bisogno di centinaia di 'filter stages' per produrre una certa nota. image:images/filter2.png[] User Interface ~~~~~~~~~~~~~~ image:images/uifilter.png[] * *C.freq*: Cutoff frequency * *Q*: Level of resonance for the filter * *V.SnsA.*: Velocity sensing amount for filter cutoff * *V.Sns.*: Velocity sensing function * *freq.tr*: Frequency tracking amount. When this parameter is positive, higher note frequencies shift the filter's cutoff frequency higher. * *gain*: Additional gain/attenuation for filter * *St*: Filter stages lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/03-lfo_IT.txt000066400000000000000000000041671247673406200243100ustar00rootroot00000000000000LFO --- :author: Paul Nasca Introduzione ~~~~~~~~~~~~ "LFO" significa Low Frequency Oscillator. Questi oscillatori non sono usati per fare suoni da soli, ma per cambiare alcuni parametri (come le frequenze, le ampiezze o i filtri). L'LFO ha alcuni parametri di base: * *Delay*: Questo parametro imposta il tempo tra l'inizio della nota e l'inizio dell'LFO * *Start Phase*: La posizione che avrà l'LFO alla partenza * *Frequency*: La velocità dell'LFO (quanto velocemente il parametro è controllato dai cambiamenti dell'LFO) * *Depth*: L'ampiezza dell'LFO (quanto il parametro è controllato dai cambiamenti dell'LFO) image:images/lfo0.png[] Un altro importante parametro dell'LFO è la forma '(shape)'. Ci sono molti tipi di LFO in base alla forma. ZynAddSubFX supporta le seguenti forme: image:images/lfo1.png[] Un altro parametro è 'LFO Randomness' (casualità dell'LFO). Esso modifica casualmente l'ampiezza o la frequenza dell'LFO ed in ZynAddSubFX puoi scegliere quanto, con questo parametro. Nelle seguenti immagini sono mostrati alcuni esempi di casualità e come cambia la forma d'onda triangolare dell'LFO. image:images/lfo2.png[] Altri parametri sono: * *Continous mode*: Se si utilizza questa modalità, l'LFO non partirà da "zero" ad ogni nuova nota, ma sarà continuo. E' molto utile applicato sui filtri, per fare interessanti 'sweeps'. * *Stretch*: Controlla quanto la frequenza dell'LFO cambia in base alla frequenza della nota. Si può passare da 'stretch' negativo (la frequenza dell'LFO diminuisce sulle note più alte) a zero (rimane la stessa in tutte le note) a 'stretch' positivo (aumenta sulle note più alte). User Interface ~~~~~~~~~~~~~~ In ZynAddSubFX i parametri dell'LFO sono mostrati così: image:images/uilfo.jpg[] Questi parametri sono: * *Freq*: LFO Frequency * *Depth*: LFO Depth * *Start*: LFO Start Phase - Se questo knob è al valore più basso, LFO Start Phase sarà random * *Delay*: LFO Delay * *A.R.*: LFO Amplitude Randomnes * *F.R.*: LFO Frequency Randomness * *C.*: LFO Continous Mode * *Str.*: LFO Stretch - Nell'immagine sopra LFO Stretch è impostato a zero lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/04-envelope_IT.txt000066400000000000000000000111331247673406200253350ustar00rootroot00000000000000Envelopes --------- Introduzione ~~~~~~~~~~~~ Gli inviluppi controllano come cambiano nel tempo l'ampiezza, la frequenza o il filtro. Amplitude Envelopes (inviluppi di ampiezza) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Questi inviluppi controllano l'ampiezza del suono. In ZynAddSubFX, gli inviluppi di ampiezza possono essere lineari o logaritmici. Nell'immagine seguente sono mostrate le differenze tra questi inviluppi. image:images/envelope1.png[Alt text] L'inviluppo di ampiezza è diviso in: * *Attack*: Inizia all'attacco della nota (Note On). Il volume inizia da 0 al massimo. In ZynAddSubFX l'attack è sempre lineare * *Decay*: Il volume scende dal valore massimo ad un livello chiamato "Sustain level" * *Sustain*: Il volume rimane costante fino a quando il tasto non viene rilasciato (Note Off). Dopo questo, avviene l'ultima fase. * *Release*: Il volume scende a zero. Frequency Envelopes ~~~~~~~~~~~~~~~~~~~ Questi inviluppi controllano la frequenza (o, più esattamente, il 'pitch') degli oscillatori. La seguente figura disegna le fasi di questi inviluppi. image::images/envelope2.png[Alt text] La linea puntinata rappresenta il pitch reale del suono senza inviluppo. Gli inviluppi di frequenza sono divisi in 3 fasi: * *Attack*: Inizia all'attacco della nota (Note On). La frequenza inizia da un certo valore e "scivola" alla reale frequenza della nota. * *Sustain*: La frequenza è la stessa per tutto il periodo di Sustain * *Release*: Questa fase inizia con il Note Off e scala la frequenza della nota ad un certo valore Filter Envelopes ~~~~~~~~~~~~~~~~ Questi inviluppi controllano la frequenza di cutoff dei filtri e sono divisi in: image:images/envelope3.png[Alt Text] * *Attack*: Inizia all'inizio della nota (Note On). La frequenza di cutoff inizia ad un certo valore e scala ad un altro * *Decay*: La frequenza di cutoff continua a scivolare verso il valore reale della frequenza di cutoff del filtro (linea puntinata) * *Sustain*: La frequenza di cutoff è la stessa per tutto il periodo di Sustain (linea puntinata) * *Release*: Questa fase inizia con il Note Off e scala la frequenza di cutoff della nota ad un certo valore Freemode Envelopes ~~~~~~~~~~~~~~~~~~ Per tutti gli inviluppi c'è una modalità che consente all'utente di impostare un numero arbitrario di fasi e punti di controllo. Questa modalità è chiamata 'Freemode'. image:images/envelope4.png[Alt Text] L'unica fase che rimane sempre definita è il Sustain, dove gli inviluppi si bloccano fino ad un evento Note Off. User Interface ~~~~~~~~~~~~~~ Tutti i tipi di inviluppi hanno alcuni controlli comuni: * *E*: Mostra una finestra che può far vedere la vera forma dell'inviluppo o convertirlo in 'Freemode' per editarlo * *Stretch*: Come l'inviluppo è allungato in base alla nota. Sulle note più alte gli inviluppi sono più corti delle note più basse. Nel valore più a sinistra lo 'stretch' è zero. Il valore più a destra indica un allungamento del 200%; ciò significa che l'inviluppo è allungato circa 4 volte/ottava. * *frcR*: Release forzato. Se questa opzione è settata su On, il rilascio andrà al valore finale anche se la fase di Sustain non è stata completata. Di solito questo parametro è settato. I parametri degli Amplitude Evelopes in ZynAddSubFX sono: image:images/uienvelope3.jpg[Alt Text] * *A.dt*: Durata Attack * *D.dt*: Durata Decay * *S.Val*: Valore di Sustain * *R.dt*: Release time * *L*: Se questa opzione è settata l'inviluppo è lineare, altrimenti sarà logaritmico. Per i Frequency Envelopes l'interfaccia ha i seguenti parametri: image:images/uienvelope2.jpg[Alt Text] * *A.val*: Valore di Attack * *A.dt*: Durata Attack * *R.dt*: Release time * *R.val*: Valore di Release I Filter Evelopes hanno i parametri: image:images/uienvelope1.jpg[Alt Text] * *A.val*: Valore di Attack * *A.dt*: Durata di Attack * *D.val*: Valore di Decay * *D.dt*: Decay time * *R.dt*: Release time * *R.val*: Valore di Release I Freemode Envelopes hanno una finestra separata per impostare parametri e controlli: image:images/uienvelope0.jpg[] * *Control points (punti di controllo)*: Puoi muovere i punti usando il mouse. In basso a destra nella finestra viene mostrata la durata totale dell'inviluppo. Se si clicka su un control point verrà visualizzata la durata della fase in cui è quel punto. * *Freemode*: Questo pulsante attiva o disattiva la modalità 'Freemode' * *Add Point*: Aggiunge un punto dopo il punto correntemente selezionato. Puoi selezionare un punto clickandoci su. * *Delete point*: Rimuove il punto dall'inviluppo. * *Sust.*: Imposta il punto di Sustain. E' mostrato usando la linea gialla. * *Str.*: Envelope stretch lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/05-adsynth_IT.txt000066400000000000000000000045051247673406200252000ustar00rootroot00000000000000AdSynth ------- AdSynth, principalmente un motore di sintesi additiva, è uno dei tre principali motori di sintesi disponibili in ZynAddSubFX. Il concetto base di questo motore è la somma di un insieme di voci, ciascuno dei quali consiste in oscillatori. High Level (Global) ~~~~~~~~~~~~~~~~~~~ Il livello globale di AdSynth consiste negli elementi mostrati nella figura sotto: .AdSynth Global Elements image::gen/ad-note.png[scalewidth="50%",width="700"] Il livello globale di AdSynth è quasi interamente composto dagli elementi precedentemente discussi. Comunque appaiono qui alcune nuove features, come: il rilevamento di velocità '(velocity sensing)', 'punch', opzioni di detune e relativa bandwidth, resonance. .AdSynth Global Window image::images/ad-global.png[] Il rilevamento di velocità è semplicemente una trasformazione esponenziale dalla velocità della nota ad alcuni cambiamenti di parametro (!?). Il diagramma sotto mostra come il 'velocity sensing' controlla questa traslazione in tutto il range di velocity delle note possibili. .Velocity Sensing Chart image::gen/velf.png[scalewidth="50%",width="600"] Il 'punch' di una nota in AdSynth è un'amplificazione costante dell'output alla partenza della nota, con una lunghezza determinata dal 'punch time' e 'stretch' e l'ampiezza determinata da 'punch strength' e 'velocity sensing'. Il controllo relBw nel riquadro di frequenza è di fatto un moltiplicatore per "scordare" '(detuning)' tutte le voci di una nota. NOTE: TODO Talk about resonance La somma delle voci passa attraverso filtri e amplificazione per produrre il suono finale. Questro potrebbe far pensare che ad-note è solo un mucchio di post-elaborazione minore e che a questo livello molto della generazione del suono è nascosta. Voices ~~~~~~ La voce da accesso ad un configurazione simile dei parametri globali più altre cose come il modulatore, l'oscillatore e features di unison. .AdSynth Voice Window image::images/ad-voice.png[] Modulation ^^^^^^^^^^ Tra le opzioni di modulazione si può selezionare: * Morph * Ring Modulation * Phase Modulation * Frequency Modulation * Disabled Unison ^^^^^^ Unison è utile nel creare il suono tipo chorus di più oscillatori simultanei. Oscillator ~~~~~~~~~~ NOTE: TODO show waveforms, talk about distortions somewhere, etc .Oscillator Window image::images/uioscil.png[] lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/06-controller_IT.txt000066400000000000000000000037741247673406200257210ustar00rootroot00000000000000Controller --------- image::./images/uicontroller.png[] General ~~~~~~~ * *ModWh*: Modulation Wheel depth (profondità della Modulation Wheel) * *Exp MWh*: Exponential Modulation Wheel (cambia la scala di mudulazione in esponenziale) * *BwDpth*: Bandwidth Depth (profondità della Bandwidth) * *Exp BW*: Exponential Bandwidth (cambia la scala di Bandwidth in esponenziale) * *PanDpth*: Panning Depth (profondità del pan) * *FltQ*: Filter Q (resonance) depth * *FltCut* Filter Cutoff frequency depth (profondità della frequenza di taglio) * *Expr*: Attiva/disattiva Expression * *Vol*: Attiva/disattiva la ricezione di Volume controller * *FMamp*: Attiva/disattiva la ricezione di Modulation Amplitude controller (76) * *Sustain*: Attiva/disattiva sustain pedal * *PWheelB.Rng (cents)*: Pitch Wheel Bend Range (cents; 100 cents = 1 semitono) Portamento ~~~~~~~~~~ * *Rcv.*: Controlla se la parte riceve il Portamento - On/Off (65) * *time*: La durata del Portamento * *thresh*: La soglia '(Threshold)' del Portamento. Rappresenta il minimo o il massimo numero di semitoni (o centesimi di semitono) richiesti per lo start del Portamento. La differenza è calcolata tra l'ultima nota e la corrente. * *th.type*: Il tipo di Threshold Se selezionato significa che il Portamento si attiva quando la differenza delle frequenze è al di sopra della soglia ("thresh"); non selezionato si attiva quando è al di sotto della soglia. NOTE: La Threshold si riferisce alle frequenze e non alle note MIDI (si potrebbe tenere in considerazione se si usano scale microtonali). Proportional Portamento ^^^^^^^^^^^^^^^^^^^^^^ //// TODO: add graphs to explain prp.rate and prp. depth //// * *Propt.*: Se il Portamento è proporzionale al rapporto '(Ratio)' delle frequenze * *Prp. Rate*: Ratio necessaria per raddoppiare il tempo del Portamento * *Prp. Dpth* Resonance ~~~~~~~~~ * *CFdpth*: Controlla la profondità del centro della Resonance * *BWdpth*: Controlla la profondità della larghezza di banda (Bandwidth) della Resonance lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/08-saving_IT.txt000066400000000000000000000033071247673406200250170ustar00rootroot00000000000000Persistence ----------- Come la gran parte delle applicazioni ZynAddSubFX consente di salvare il tuo lavoro e ricaricarlo. Salvare tutto ~~~~~~~~~~~~~ Uno dei modi più semplici di salvare il tuo lavoro è quello di salvare l'intera sessione. Questo può essere fatto dal menu File e il risultato sarà la creazione di un .xmz file. Una volta creato, questo file conterrà le tutte le impostazioni della sessione, come le accordature microtonali, tutte le patch, tutti i tipi di effetti, ecc... Salvare delle parti ~~~~~~~~~~~~~~~~~~~ In alcuni casi salvare tutto non è quello che si desidera. Di seguito c'è un esempio di salvataggio di una patch. Patches ^^^^^^^ Per salvare una patch, si può salvare dal menu strumenti o dalla bank window. Con il menu strumenti si può solo salvare il file in una dato percorso con l'estensione .xiz. Con il menu dei banchi si può assegnare una patch ad un certo slot con un banco. Questo strumento rimarrà qui per un futuro uso fin quando non viene cancellato. Per vedere la posizione fisica del file .xiz si può controllare la finestra in File->Settings->Bank_Root_Dirs, per vedere i percorsi dei banchi. NOTE: Devi avere i permessi di scrittura per aggiungere uno strumento al banco. Presets ^^^^^^^ Avete un'impostazione favorita per un inviluppo o un oscillatore difficile da rifare? Allora i preset fanno al caso vostro. I preset consentono di salvare le impostazioni per ogni componente che supporta operazioni di copia/incolla. Questo viene fatto con i prest file (.xpz), che sono memorizzati nelle cartelle indicate da File->Settings->Preset_Root_Dirs. Riepilogo ~~~~~~~ .Riepilogo delle estensioni [literal] xmz Everything xiz Instrument xsz Scale Settings xpz Presets lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_A-mididefaults_IT.txt000066400000000000000000000007331247673406200274230ustar00rootroot00000000000000Appendice A: Default MIDI ------------------------- .Connessioni MIDI di Default [literal] 001 - Modulation Wheel 007 - Volume 010 - Pan 011 - Expression 064 - Sustain 065 - Portamento Enable 071 - Filter Q 074 - Filter Cutoff 075 - Bandwidth(*) 076 - Modulation Amplitude(*) 077 - Resonance Center Frequency(*) 078 - Resonance Bandwidth(*) 120 - All Sounds Off 121 - Reset All Controllers 123 - All Notes Off Le voci con '(*)' non rientrano nelle specifiche General Midi. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_B-build_IT.txt000066400000000000000000000046641247673406200260600ustar00rootroot00000000000000Appendice B: Compilare ZynAddSubFX -------------------------------- Introduzione a CMake ~~~~~~~~~~~~~~~~~~~~~ ************************************************************************ Note: Questa sezione è in gran parte copiata dal wiki di OpenSceneGraph: http://www.openscenegraph.org/projects/osg/wiki/Build/CMake ************************************************************************ ZynAddSubFX usa CMake come suo sistema di compilazione unificato. CMake è capace di leggere semplici build script dall'albero dei sorgenti e creare da questo un sistema di compilazione specifico per la piattaforma. Questo sistema di compilazione può avere la forma di VisualStudio project files, Unix Makefiles o XCode project files. CMake è capace di individuare automaticamente le dipendeze esterne e consente di attivare/disattivare la compilazione del modulo e di configurare varie opzioni di compilazione. L'uso di un sistema di compilazione unificato consente di evitare rotture di compilazione che erano presenti nel precedente metodo di compilazione, ovvero quello di mantenere tre obiettivi di compilazione separati per VisualStudio, Unix "make" and XCode. Si riduce anche l'onere della manutenzione per gli sviluppatori base e collaboratori. Nell'insieme, l'uso di CMake dovrebbe portare come risultato una migliore coerenza e build più stabili su ogni piattaforma per gli utenti finali e una maggiore produttività nello sviluppo di nuove versioni. Speriamo che con una maggior coerenza di builds tra piattaforme renderà più facile per gli sviluppatori utilizzare la 'development version' di ZynAddSubFX e aiutare a contribuire ai testing e alle migliorie, portando ad un codice di più alta qualità. Quick start guide ~~~~~~~~~~~~~~~~~ Per i più impazienti, qui c'è una guida veloce su come compilare immediatamente ZynAddSubFX da sorgenti. ************************************************************************ Note: Ciò presuppone che tu abbia già una copia dei sorgenti. ************************************************************************ --------------------------------- #enter the source directory cd zynaddsubfx #make a directory for an out-of-source build mkdir build cd build #generate a cmake build project here from the cmake root, which is #found in the directory below the current one cmake .. #OPTIONAL: Adjust compile variables in the Cache file: ccmake . #And finally, build as usual using make make --------------------------------- lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_C-doc_getting_IT.txt000066400000000000000000000035771247673406200272520ustar00rootroot00000000000000Appendix C: Ottenere ZynAddSubFX ------------------------------- Normalmente ci sono diversi modi per ottenere una copia di ZynAddSubFX. SourceForge:: http://sourceforge.net/projects/zynaddsubfx/files/ Distribuition:: apt/yum/others Git:: git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfxg Introduzione a Git ~~~~~~~~~~~~~~~~~~~ Per coloro che vogliono vivere "on the bleeding edge" o chi vuole essere certo che la prossima release abbia meno bug, si può avere il codice con git. Git è usato per gestire il codice sorgente di questo progetto ed è utile per ottenere velocemente e facilmente una copia "up-to-date" del codice sorgente. Ottenere il codice sorgente ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Per avere una copia dei sorgenti di ZynAddSubFX tutto il necessario da fare è: --------------------------------------------- git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfx cd zynaddsubfx #Download additional resources git submodule init git submodule update --------------------------------------------- Ora dovresti essere nella directory del codice sorgente. Per compilare facilmente si guardi l'Appendice B del manuale. Dare un'occhiata ai branch ^^^^^^^^^^^^^^^^^^^^^^^^^^ Diciamo che lo sviluppo si è esteso ad una creazione di una feature che si vuole vedere in anteprima. Per il bene di questa guida, supponiamo che il nome del branch della feature che verrà è 'foo'. ----------------------------------------- #checkout the foo branch from sourceforge git checkout --track -b foo origin/foo #lets checkout the primary branch again git checkout master #hop back to the other branch git checkout foo ---------------------------------------- Ora si dovrebbe essere in grado di cambiare branches e andare nella build-directory (come descritto in Appendice B) e ricompilare ZynAddSubFX. NOTE: Quando si usano i branches può venir meno un po' di stabilità. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/IT/zynaddsubfx_IT.txt000066400000000000000000000010111247673406200256320ustar00rootroot00000000000000Zynaddsubfx =========== :Author: Paul Nasca and Mark McCurry, translated by Ilario Glasgo include::01-intro_IT.txt[] include::02-filter_IT.txt[] include::03-lfo_IT.txt[] include::04-envelope_IT.txt[] include::05-adsynth_IT.txt[] include::06-controller_IT.txt[] ///////////////////////////// include 07-effects_IT.txt include nrpn.txt ///////////////////////////// include::08-saving_IT.txt[] include::APPENDIX_A-mididefaults_IT.txt[] include::APPENDIX_B-build_IT.txt[] include::APPENDIX_C-doc_getting_IT.txt[] lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/README.txt000066400000000000000000000002761247673406200233320ustar00rootroot00000000000000Requirements for this directory: * standalone (latex module) * pgfplots (latex module) * pst-sigsys (latex module) * auto-pst-pdf (latex module) * pst-tools (latex module) * gnuplot lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/adsynth.txt000066400000000000000000000124671247673406200240540ustar00rootroot00000000000000AdSynth ------- AdSynth, a primarily additive synthesis engine, is one of the three major synthesis engines available in ZynAddSubFX. The basic concept of this engine is the summation of a collection of voices, each of which consist of oscillators. High Level (Global) ~~~~~~~~~~~~~~~~~~~ AdSynth's global level consists of the elements shown in the below figure: .AdSynth Global Elements image::gen/ad-note.png[scalewidth="50%",width="700"] The global level of adsynth is almost entirely composed of previously discussed elements. However a few new features appear here, this includes velocity sensing, punch, detune options and realative bandwidth , and resonance. .AdSynth Global Window image::images/ad-global.png[] Velocity sensing is simply an exponental transformation from the note's velocity to some parameter change. The below diagram shows how the velocity senseing controls affects this translation over the whole range of possible note velocities. .Velocity Sensing Chart image::gen/velf.png[scalewidth="50%",width="600"] The puch of a note in AdSynth is a constant amplification to the output at the start of the note, with its length determined by the punch time and stretch and the amplitude being determined by the punch strength and velocity sensing. The relBW control in the frequency pane is effectively a multiplier for detuning all voices within an adnote. NOTE: TODO Talk about resonance The sum of the voices are passed through filters and amplification to produce the final sound. This could lead one to think that ad-note is just a bunch of minor postprocessing and at this level much of the sound generation is hidden. Voices ~~~~~~ The voice gives access to a similar setup to the global parameters and then some more, such as the modulator, oscillator, and unison features. .AdSynth Voice Window image::images/ad-voice.png[] Modulation ^^^^^^^^^^ Within the options for modulation, one can select: * Morph * Ring Modulation * Phase Modulation * Frequency Modulation * Disabled Unison ^^^^^^ Unison is useful in creating the chorus like sound of many simultaneous oscillators Oscillator ~~~~~~~~~~ The oscillator is lets you choose the basic waveform, which oscillates while the sound is playing and is then further modified. .Oscillator Window image::images/uioscil.png[] [[adsynth::oscilllator::types_of_waveshaping, Types of Waveshaping]] Types of Waveshaping ^^^^^^^^^^^^^^^^^^^^ Waveshaping can be done using the *Wsh* area in the Oscillator editor. The type of distortion has much influence on how the overtones are being placed. Sometimes, you get a "fat" bass, and sometimes, high frequencies are added, makeing the sound "crystal clear". Atan & Sigmoid ++++++++++++++ This is the default setting. It is an easy way to apply loudness to a wave without getting undesired high overtones. Thus, it can be used both for making instruments that sound like "real" ones, but also for electronic music. The transformation turns, roughly said, every amplitude into a square amplitude. Thus, sine, power, pulse and triangle turn into a usual square wave, while a saw turns into a phased square wave. A chirp wave turns into a kind of phase modulated square wave. Quants ++++++ http://en.wikipedia.org/wiki/Quantization_%28sound_processing%29[Quantization] adds high overtones early. It can be seen as an unnatural effect, which is often used for electronic music. The transformation is a bit similar to building the http://en.wikipedia.org/wiki/Riemann_sum[lower sum] of a wave, mathematically said. This means that the transformation effect turns your "endless high" sampled wave into only a few samples. The more distortion you will apply, the less samples will be used. Indeed, this is equivalent to say that more input amplification is used. To see this, here is a small sample of code, where "ws" is the (correctly scaled amount of input amplification, and "n" the number of original samples. --------------------------------- for(i = 0; i < n; ++i) smps[i] = floor(smps[i] / ws + 0.5f) * ws; --------------------------------- NOTE: If you turn on quantisation very high, you might be confused that, especially high notes, make no sound. The reason: High frequencies are "forgotten" if you sample with only few samples. Also, the sign of an amplitude can be forgotten. This behaviour might make some quantisations a bit unexpected. Limiting & Clipping +++++++++++++++++++ http://en.wikipedia.org/wiki/Limiting[Limiting] usually means that for a signal, the amplitude is modified because it exceeds its maximum value. Overdrive, as often used for guitars, is often achieved by limiting: It happens because an amplifier "overdrives" the maximum amplitude it can deliver. ZynAddSubFX has two types of limiting. Soft limiting, here as *Lmt*, means that the sound may not exceed a certain value. If the amplitude does so, it will simply be reduced to the limiting value. The overtones are generated in the lower frequencies first. Hard limiting, is also called clipping and abbreviated *Clip*. This means that if the maximum is exceeded, instead of being constant at the limiting value, the original signal still has some influence on the output signal. Still, it does not exceed the limiting value. For ZynAddSubFX, a signal exceeding the limiting value will continue to grow "in the negative". This leads to overtones being generated on the full frequency band.lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/build.txt000066400000000000000000000043011247673406200234650ustar00rootroot00000000000000Appendix B: Building ZynAddSubFX -------------------------------- Introduction to CMake ~~~~~~~~~~~~~~~~~~~~~ ******************************************************************** Note: This section is mostly copied from the OpenSceneGraph wiki, at: http://www.openscenegraph.org/projects/osg/wiki/Build/CMake ******************************************************************** ZynAddSubFX uses CMake as its unified build system. CMake is able to read simple build scripts from the source tree and create from this a platform-specific build system. This build system can be in the form of VisualStudio project files, Unix Makefiles or XCode project files. CMake is able to automatically locate external dependencies, and allows you to toggle on/off module compilation and configure various build options. The use of a unified build system has allowed to avoid build breakages that were common in the previous build method of maintaining three separate build targets for VisualStudio, Unix "make" and XCode. It also reduces the maintenance burden for core developers and contributors. Taken together usage of CMake should result in better consistency and more stable builds across all platforms for end users and a greater productivity in development of new versions. Hopefully with greater consistency of builds across platforms it will be easier for developers to use the development version of ZynAddSubFX and help contribute to its testing and refinement, leading to a high-quality code base. Quick start guide ~~~~~~~~~~~~~~~~~ For the impatient ones, here is a quick guide on how to immediately build ZynAddSubFX from source. ************************************************************** Note: This assumes that you already have a copy of the source. ************************************************************** --------------------------------- #enter the source directory cd zynaddsubfx #make a directory for an out-of-source build mkdir build cd build #generate a cmake build project here from the cmake root, which is #found in the directory below the current one cmake .. #OPTIONAL: Adjust compile variables in the Cache file: ccmake . #And finally, build as usual using make make --------------------------------- lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/controller.txt000066400000000000000000000033461247673406200245610ustar00rootroot00000000000000Controller --------- image::./images/uicontroller.png[] General ~~~~~~~ * *ModWh*: Modullation Wheel depth * *Exp MWh*: Exponental Modulation Wheel (changes modulation scale to exponental) * *BwDpth*: Bandwidth Depth * *Exp BW*: Exponental Bandwidth (changes badwidth scale to exponental) * *PanDpth*: Panning Depth * *FltQ*: Filter Q (ressonance) depth * *FltCut* Filter Cutoff frequency depth * *Expr*: enable/disable expression * *Vol*: enable/disable receiving volume controller * *FMamp*: enable/disable receiving Modulation Amplitude controller (76) * *Sustain*: enable/disable sustain pedal * *PWheelB.Rng (cents)*: Pitch Wheel Bend Range (cents; 100 cents = 1 halftone) Portamento ~~~~~~~~~~ * *Rcv.*: If the part receives portamento On/Off (65) controller * *time*: The duration of the portamento * *thresh*: The threshold of the portamento. It represents the minimum or the maximum number of halftones (or hundried cents) required to start the portamento. The difference is computed between the last note and current note. * *th.type*: The threshold type. Checked means that the portamento activates when the difference of frequencies is above the threshold ("thresh"); not checked is for below the threshold. NOTE: The threshold refers to the frequencies and not to MIDI notes (you should consider this if you use microtonal scales). Proportinal Portamento ^^^^^^^^^^^^^^^^^^^^^^ //// TODO: add graphs to explain prp.rate and prp. depth //// * *Propt.*: If the portamento is proportinal to ratio of frequencies * *Prp. Rate*: Ratio needed to double the time of portamento * *Prp. Dpth*: The divergence from Resonance ~~~~~~~~~ * *CFdpth*: resonance center controller depth * *BWdpth*: resonance bandwidth controller depth lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/effects.txt000066400000000000000000000540151247673406200240140ustar00rootroot00000000000000Effects ------- Effects are, generally, blackboxes that transform audio signals in a specified way. More exactly, the only input data for an effect in ZynAddSubFX is: * an array of samples, which is read *on line* * the current system time (used for LFOs) The output is the transformed array of samples. NOTE: As described, effects have no information about anything else. For example, key presses are not recognized. Therefore, pressing a key does not initiate the LFO. Phase knobs will always be relative to a *global* LFO, which is only dependent on the system time. ZynAddSubFX has 3 types of effects: * System Effects * Insertion Effects * Instrument Effects TODO: Describe these 3 types (their differences). [[effects::general_topics, General Topics]] General topics ~~~~~~~~~~~~~~ * *Wetness* determines the mix of the results of the effect and its input. This mix is made the effects output. If an effect is wet, it means that nothing of the input signal is bypassing the effect. If it is dry, then the effect has no effect. TODO: Difference between Volume and D/W? * *Pan* lets you apply panning, which means that the sound source can move to the right or left. Set it to 0.0 to only hear output on the right side, or to the maximum value to only hear output on the left side. * *LRc.* or *L/R* let you apply crossover. * *Filter stages* are the number of times that this filter is applied in series. So, if this number is 1, you simply have this one filter. If it is two, the sound first passes the filter, and the results then pass the same filter again. In ZynAddSubFX, the wetness is applied after all stages were passed. * *LFOs* are, as the name says, oscillators with, compared to the frequency of the sound, low frequency. They often appear in order to control the effect. They can have some of the following controls: ** *LFO Type* determines the shape of the LFO. If not present, the LFO is a sine wave. ** *Freq* determines the LFO's frequency. ** *Dpth* is a multiplier to the LFO. Thus, it determines the LFOs amplitude and its influence. ** *Rnd* is the LFO amplitude's randomness ** *St.df* lets you determine how much left and right LFO are phase shifted. 64.0 means stereo, higher values increase the right LFO relatively to the left one. ******************************************************************** Hint: Keep in mind that Effects that can be controlled by LFO can also be controlled arbitrary: Set the LFO depth to zero and manipulate the phase knob (e.g. with NRPNs or maybe via OSC in the future). ******************************************************************** Equalizer ~~~~~~~~~ Introduction ^^^^^^^^^^^^ An http://en.wikipedia.org/wiki/Filter_%28signal_processing%29[equalizer] is a filter effect that applies different volume to different frequencies of the input signal. This can, for example, be used to "filter out" unwanted frequencies. ZynAddSubFX's implementations follow the http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt["Cookbook formulae for audio EQ"] by Robert Bristow-Johnson. Filter Types ^^^^^^^^^^^^ This topic is completely discussed in <>. Usage ^^^^^ We describe all parts of the GUI here. The term passband (or often just "band") refers to the amount of frequencies which are not significantly attenuated by the filter. * *Gain* (on the left) defines an offset which is added to the complete filter. * *B.* lets you choose the passband number. Multiple passbands define one filter. This is important if you want multiple filters to be called after each other. Note that filters are commutative. * *T.* lets you choose the current filter's type, as described above. * *Freq* describes the frequencies where the filter has its poles. For some filters, this is called the "cutoff" frequency. Note, however, that a bandpass filter has two cutoff frequencies. * *Gain* is only active for some filters and sets the amount of a special peak these filters have. Note that for those filters, using the predefined gain makes them effectless. * *Resonance* lets you describe a peak at the given frequency for filters with 2 poles. This can be compared to real physical objects that have more gain at their resonance frequency. * *St.* lets you define multiple filter stages. This is equivalent to having multiple copies of the same filter in sequence. Chorus ~~~~~~ Introduction ^^^^^^^^^^^^ In a chorus, many people sing together. Even if each of them sings at exactly the same frequency, all their voices usually sound different. We say they have a different timbre. Timbre is the way we perceive sound and makes us differ between different music instruments. This is, physically, achieved by varying both the amplitude envelope and the frequency spectrum. Multiple sounds with slightly different timbres make a sound more shimmering, or powerful. This is called the chorus effect. Function ^^^^^^^^ The chorus effect can be achieved by multiple people singing together. In a concert, there are many instruments, resulting in the same effect. When making electronic music, we only have an input wave and need to generate these different timbres by ourselves. ZynAddSubFX therefore simply plays the sound, pitch modulated by an LFO, and adds this to the original sound. This explains the diagram below: The multiple pitches are generated by a delayed version of the input. This version is being pitched by an LFO. More detailled, this pitch is generated by varying the reading speed of the delayed sound; the variation amount is controlled by an LFO. image:./gen/chorus.png[width=700, title="The chorus effect. z^(-n.m) describes the delay."] TODO: Add LFO pointing to delay? Related effects to Chorus are Flangers. Flangers can be described as Chorus with very short LFO delay and little LFO depth. You can imagine a flanger as two copies of a sound playing at almost the same time. This leeds to interference, which can be clearly heared. It is popular to apply flangers to guitars, giving them more "character". Usage ^^^^^ * First, crossover is applied. * The following 5 knobs (*Freq*, *Rnd*, *LFO Type*, *St.df*, *Depth*) control the LFO for the pitch. If the depth is set to zero, the pitch will not be changed at all. * *Delay* is the time that the delayed sound is delayed "on average". Note that the delay also depends on the current pitch. * After the correct element of the sound buffer is found using the LFO, the *Fb* knob lets you set how loud it shall be played. This is mostly redundant to the *D/W* knob, but we have not applied panning and substraction yet. * Next, the singal can be negated. If the *Substract* Checkbox is activated, the amplitude is multiplied by -1. * Finally, *Pan* lets you apply panning. Distortion ~~~~~~~~~~ Introduction ^^^^^^^^^^^^ Distortion means, in general, altering a signal. Natural instruments usually produce sine like waves. A wave is transformed in an unnatural way when distortion is used. The most distorted waves are usually pulse waves. It is typical for distortion to add overtones to a sound. Distortion often increases the power and the http://en.wikipedia.org/wiki/Loudness[loudness] of a signal, while the db level is not increased. This is an important topic in the http://en.wikipedia.org/wiki/Loudness_war[Loudness War]. NOTE: As distortion increases loudness, distorted music can cause ear damage at lower volume levels. Thus, you might want to use it a bit careful. Distortion can happen in many situations when working with audio. Often, this is not wanted. In classical music, for example, distortion does not occur naturally. However, distortion can also be a wanted effect. It is typical for Rock guitars, but also present in electronic music, mostly in Dubstep and DrumNBass. The basic components of distortion are mainly * a preamplifier * the waveshaping function * filters Preamplification changes the volume before the wave is shaped, and is indeed the amount of distortion. For example, if you clip a signal, the louder the input gets, the more distortion you will get. This can have different meanings for different types of distortions, as described below. ******************************************************************** The filters are practical. A reason for using them afterwards is that distortion can lead to waves with undesired high frequency parts. Those can be filtered out using the LPF. A reason for using filters before applying is to achieve multiband distortion. ZynAddSubFX has no "real" multiband distortion by now, however. ******************************************************************** Types of Distortion ^^^^^^^^^^^^^^^^^^^ This topic is completely discussed in <>. Note that you can use the Oscillator editor in order to find out what your distortion effect does. Also note that while the Oscillator editor's distortion is limited to some oscillators you can produce in the Oscillator editor, the distortion effect can be used on every wave that you can generate with ZynAddSubFX. Function ^^^^^^^^ We explain the functionality in a diagram and list the components below. image:./gen/distort.png[width=700, title="The components of a distortion function."] * Negation is the first thing to happen. If the *Neg* Checkbox is activated, the amplitude is multiplied by -1. * Panning is applied. Note, however, that you have to activate the Stereo Checkbox, labeled *St*, before. * Pre amplification is done next. The amount can be changed using the *Drive* nob. Indeed, this is the amount of distortion. For example, if you clip a signal, the louder the input gets, the more distortion you will get. This can have different meanings for different types of distortion, as described above. * *HPF* and *LPF* are filters with 2 poles. Whether they are used before or after the waveshape, depends on the checkbox labeled *PF*. * The next step is the wave shape. This defines how the wave is actually modified. The *Type* ComboBox lets you define how. We will discuss some types below. * After the wave shape, we scale the level again. This is called output amplification. You can change the value using the *Level* knob. * Crossover is the last step. This is controlled by the knob *LR Mix* and means that afterwards, a percentage of the left side is applied to the right side, and, synchronously, the other way round. It is a kind of interpolation between left and right. If you set the LR Mix to 0.0, you will always have a stereo output. Dynamic Filter ~~~~~~~~~~~~~ Introduction ^^^^^^^^^^^^ A dynamic filter is, as the name says, a filter which changes its parameters dynamically, dependent on the input and current time. In ZynAddSubFX, frequency is the only variable parameter. It can be used as an "envelope following filter" (sometimes referenced "Auto Wah" or simply "envelope filter"). Function ^^^^^^^^ Though this filter might look a bit complicated, it is actually easy. We divide the parameters into two classes: * *Filter Parameters* are the ones you get when you click on *Filter*. They give the filter its basic settings. * *Effect Parameters* are the other ones that control how the filter changes. The filter basically works like this: The input signal is passed through a filter which dynamically changes its frequency. The frequency is an additive of: * the filter's base frequency * an LFO from the effect parameters * the "amplitude" of the input wave image:./gen/dynamic.png[width=700, title="The components of a dynamical filter"] The amplitude of the input wave is not the current amplitude, but the so called https://en.wikipedia.org/wiki/Root_mean_square["Root Mean Square (RMS)"] value. This means that we build a mean on the current amplitude and the past values. How much the new amplitude takes influence is determined by the *Amplitude Smoothness* (see below). ******************************************************************** RMS value plays an important role in the term loudness. A fully distorted signal can sound 20 db louder due to its higher RMS value. This filter takes this into account, depending on the smoothness. ******************************************************************** Usage ^^^^^ * The 4 knobs in the middle (*Freq*, *Rnd*, *LFO Type*, *St.df*) control the LFO. * Two knobs let you control the way how the RMS value of the amplitudes is measured: ** *A.M* sets the Amplitude Smoothness (this is described above). The higher you set this value, the more slow will the filter react. ** *A.Inv.*, if being set, negates the (absolute) RMS value. This will lower the filter frequency instead of increasing it. Note that this will not have much effect if the effects input is not very loud. * The following controls define the mix of the LFO and the amplitude. ** *A.S* sets the Amplitude Sensing (i.e. how much influence the amplitude shall have). ** *LfoD* sets the LFO depth. * The filter button lets you choose the filter type. * After the input signal has passed through the filter, *Pan* can apply panning. Echo ~~~~ Introduction ^^^^^^^^^^^^ The echo effect, also known as http://en.wikipedia.org/wiki/Delay_%28audio_effect%29[delay effect], simulates the natural reflection of a sound. The listener can hear the sound multiple times, usually decreasing in volume. Echos can be useful to fill empty parts of your songs with. Function ^^^^^^^^ In ZynAddSubFX, the echo is basically implemented as the addition of the current sound and a delayed version of it. The delay is implemented as in the picture below. First, we add the delayed signal to the effect input. Then, they pass an LP1. This shall simulate the effect of dampening, which means that low and especially high frequencies get lost earlier over distance than middle frequencies do. Next, the sound is delayed, and then it will be output and added to the input. image:./gen/echo.png[width="700", title="The echo includes a fb line, labeled as z^-n, and a delay."] ******************************************************************** The exact formula in the source code for the dampening effect is as follows: latexmath:[$Y(t) := (1-d) \cdot X(t) + d \cdot Y(t-1)$], where latexmath:[t] be the time index for the input buffer, latexmath:[d] be the dampening amount and latexmath:[X,Y] be the input, respective the output of the dampening. This solves to latexmath:[$Y(z) = Z(Y(t)) = (1-d) \cdot X(z) + d \cdot Y(z) \cdot z^{-1}$] latexmath:[$\Leftrightarrow H(z) := \frac{Y(z)}{X(z)} = \frac{1-d}{1 - d \cdot z^{-1}}$] which is used in latexmath:[$Y(z) = H(z) \cdot X(z)$]. So latexmath:[$H(z)$] is indeed a filter, and by looking at it, we see that it is an LP1. Note that infinite looping for d=1 is impossible. ******************************************************************** Description ^^^^^^^^^^^ * *Pan* lets you apply panning of the input. * *Delay* sets the time for one delay. * *LRdl.* means Left-Right-Delay. If it is set to the middle, then both sides are delayed equally. If not, then the left echo comes earlier and the right echo comes (the same amount) later than the average echo; or the other way round. Set the knob to 0 to hear on the right first. * *LRc.* applies crossover. * Feedback describes how much of the delay is added back to the input. Set *Fb.* to the maximum to hear an infinite echo, or to the minimum to just hear a single repeat. * The *Damp* value lets the LP1 reject higher frequencies earlier if increased. Reverb ~~~~~~ Introduction ^^^^^^^^^^^^ A http://en.wikipedia.org/wiki/Reverberation[Reverberation] actually expresses the effect of many echoes being played at the same time. This can happen in an enclosed room, where the sound can be reflected in different angles. Also, in nature, thunders approximate reverbs, because the sound is reflected in many different ways, arriving at the listener at different times. In music, reverbs are popular in many ways. Reverbs with large room size can be used to emulate sounds like in live concerts. This is useful for voices, pads, and hand claps. A small room size can simulate the sound board of string instruments, like guitars or pianos. Function ^^^^^^^^ As mentioned, a reverb consists of permanent echo. The reverb in ZynAddSubFX is more complex than the echo. After the delaying, comb filters and then allpass filters are being applied. These make the resulting sound more realistic. The parameters for these filters depend on the roomsize. For details, consider the information about https://ccrma.stanford.edu/~jos/pasp/Freeverb.html[Freeverb]. image:./gen/reverb.png[width=700, "The reverb, being similar to the echo."] Description ^^^^^^^^^^^ * The *Type* ComboBox lets you select a reverb type: ** *Freeverb* is a preset. It was proposed by Jezar at Dreampoint. ** *Bandwidth* has the same parameters for the comb and allpass filters, but it applies a unison before the LP/HP. The unison's bandwidth can be set using *bw*. ** Random chooses a random layout for comb and allpass each time the type or the roomsize is being changed. * The roomsize (*R.S.*) defines parameters only for the comb and allpass filters. * *Time* controls how long the whole reverb shall take, including how slow the volume is decreased. * The initial delay (*I.del*) is the time which the sounds need at least to return to the user. The initial delay feedback (*I.delfb*) says how much of the delayed sound is added to the input. * Low pass filter (*LPF*) and high pass filter (*HPF*) can be applied before the comb filters. * The dampening control (*Damp*) currently only allows to damp low frequencies. Its parameters are being used by the comb and allpass filters. * *Pan* lets you apply panning. This is the last thing to happen. Phaser ~~~~~~ Introduction ^^^^^^^^^^^^ The http://en.wikipedia.org/wiki/Phaser_%28effect%29[Phaser] is a special dynamic filter. The result is a sweeping sound, which is often used on instruments with a large frequency band, like guitars or strings. This makes it typical for genres like rock or funk, where it is often modulated with a pedal, but also for giving strings a warm, relaxing character. Function ^^^^^^^^ The audio signal is split into two paths. One path remains unchanged. The other one is sent to a delay line. The delay time (the so called *phase*) is made dependent on the frequency. Therefore, an all-pass filter is applied to the signal, which *preserves* the amplitude, but determines the delay time. In the end, both paths are added. The following picture describes how this works on white noise. Light blue signalises that the frequency is not present at the current time, and dark blue signalises the opposite. The dark blue peaks appear if the delay time is very short, because then, the second path almost equals the first one, which results in duplication of the signal. If the delay line is very long, then it is --- in the case of white noise --- totally at random whether the delayed signal currently duplicates the unchanged path, or whether it cancels it out to zero. This random effect results in white noise between the clear blue structures. image:./images/phaser-spectrogram.jpg[width="700", title="Spectrogram of an 8-stage phaser modulated by a sine LFO applied to white noise."] Phaser Types ^^^^^^^^^^^^ ZynAddSubFX offers different types of phasers: * Analog and "normal" phasers. Analog phasers are more complicated. They sound punchier, while normal phasers sound more fluently. However, analog filters usually need more filter stages to reach a characteristic sound. * Sine and triangle filters. Note that an analog triangle filter with many poles is a barber pole filter and can be used to generate http://en.wikipedia.org/wiki/Shepard_tone[Shepard Tones], i.e. tones that seem to increase or decrease with time, but do not really. * The LFO function can be squared. This converts the triangle wave into a hyper sine wave. The sine squared is simply a faster sine wave. * TODO: Barber is deactivated, since PLFOtype is only 0 or 1? Description ^^^^^^^^^^^ For the normal phaser, first, the LFO is generated: * There are 4 controls (*Freq*,*Rnd*,*LFO tpye*,*St.df*) that define the LFO. * *Phase* and *Depth* are applied afterwards in the usual way (TODO: I don't understand the code here for the normal phase...). For the analog phaser, *Phase* is not implemented, yet. ** If *hyp* is being set, then the LFO function is being squared. Next, the input is being used. * *Analog* decides whether the phaser is analog or "normal". * First, *Pan* applies panning to the original input in every loop. * Next, barber pole phasing is being applied (Analog only). * *Fb* applies feedback. The last sound buffer element is (after phasing) multiplied by this value and then added to the current one. For normal filter, the value is added before, for analog after the first phasing stage. * Now, *Stages* phasing stages are being applied. *dist* sets the distortion for when applying the phasing stages. This has only effect for analog phasers. * The feedback is taken now. * In the end, *Substract* inverts the signal, multiplying it by -1. Alienwah ~~~~~~~~ Introduction ^^^^^^^^^^^^ The AlienWah effect is a special, dynamic http://en.wikipedia.org/wiki/Formant[formant] filter (TODO: is this true?). Paul Nasca named it AlienWah because it sounded "a bit like wahwah, but more strange". The result of the filter is a sound varying between the vocals "Ahhhhh" (or "Uhhhhh") and "Eeeeee". Function ^^^^^^^^ The way that the filter moves between the two vocals is mainly described by an LFO. A bit easified, Paul Nasca has stated the formula (for latexmath:[$i^2=-1; R<1$]) as latexmath:[$fb=R*(\cos(\alpha)+i*\sin(\alpha))$] latexmath:[$y_n=y_{n-delay}*R*(\cos(\alpha)+i*\sin(\alpha))+x_n*(1-R)$]. The input latexmath:[$x_n$] has the real part of the samples from the wavefile and the imaginary part is zero. The output of this effect is the real part of latexmath:[$y_n$]. latexmath:[$\alpha$] is the phase. Description ^^^^^^^^^^^ * *Pan* * The following 5 controls (*Freq*,*Rnd*,*LFO tpye*,*St.df*, *Dpth*) define the LFO. ** *Fb* ** *Delay* If this value is low, the sound is turned more into a "wah-wah"-effect. ** *Phase* See latexmath:[$\alpha$] in the above formula. This lets you set where the vocal is between "Ahhhhh" and "Eeeeee". ** *L/R* applies crossover in the end of every stage. This is currently not implemented for the Analog Phaser. lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/envelope.txt000066400000000000000000000105101247673406200242020ustar00rootroot00000000000000Envelopes --------- Introduction ~~~~~~~~~~~~ Envelopes control how the amplitude, the frequency, or the filter changes over time. Amplitude Envelopes ~~~~~~~~~~~~~~~~~~~ These envelopes controls the amplitude of the sound. In ZynAddSubFX, amplitude envelopes can be linear or logarithmic. In the next image, it is shown the differences between these envelopes. image::images/envelope1.png[Alt text] The amplitude envelope is divided into: * *Attack*: Begins at the Note On. The volume starts from 0 to the maximum. In ZynAddSubFX, the attack is always linear. * *Decay*: The volume drops from the maximum value to a level called "Sustain level" * *Sustain*: The volume remains constant until the key is depressed (Note Off). After this, the last stage take place. * *Release*: The volume drops to zero Frequency Envelopes ~~~~~~~~~~~~~~~~~~~ These envelopes controls the frequency (more exactly, the pitch) of the oscillators. The following picture draws the stages of these envelopes. image::images/envelope2.png[Alt text] The dotted line represents the real pitch of the sound without the envelope. The frequency envelopes are divided into 3 stages: * *Attack*: Begins at the Note On. The frequency starts from a certain value and glides to the real frequency of the note. * *Sustain*: The frequency is the same on over the sustain period * *Release*: This stage begins on Note Off and glides the frequency of the note to a certain value Filter Envelopes ~~~~~~~~~~~~~~~~ These envelopes controls the cutoff frequency of the filters and are divided into image:images/envelope3.png[Alt Text] * *Attack*: Begins at the Note On. The cutoff frequency starts from a certain value and glides to another value * *Decay*: The cutoff frequency continues to glide to the real cutoff frequency value of the filter (dotted line) * *Sustain*: the cutoff frequency is the same on over the sustain period (dotted line) * *Release*: this stage begins on Note Off and glides the filter cutoff frequency of the note to a certain value Freemode Envelopes ~~~~~~~~~~~~~~~~~~ For all envelope there is a mode that allows the user to set an arbitrary number of stages and control points. This mode is called Freemode. image:images/envelope4.png[Alt Text] Only stage that always remains defined is the Sustain, where the envelopes freezes until a Note Off event. User Interface ~~~~~~~~~~~~~~ All the envelope types has some common controls: * *E*: Shows a window that you can view the real envelope shape or convert to free mode to edit it * *Stretch*: How the envelope is stretched according the note. On the higher notes the envelopes are shorter than lower notes. In the leftmost value, the stretch is zero. The rightmost use a stretch of 200%; this means that the envelope is stretched about 4 times/octave. * *frcR*: Forced release. This means that if this option is turned on, the release will go to the final value, even if the sustain stage is not reached. Usually, this must be set. The parameters for Amplitude Envelopes for ZynAddSubFX are: image:images/uienvelope3.jpg[Alt Text] * *A.dt*: Attack duration * *D.dt*: Decay duration * *S.Val*: Sustain value * *R.dt*: Release time * *L*: If this option is set, the envelope is linear, otherwise, it will be logarithmic For Frequency Envelopes the interface has the following parameters: image:images/uienvelope2.jpg[Alt Text] * *A.val*: Attack value * *A.dt*: Attack duration * *R.dt*: Release time * *R.val*: Release value Filter Envelopes has the parameters: image:images/uienvelope1.jpg[Alt Text] * *A.val*: Attack value * *A.dt*: Attack duration * *D.val*: Decay value * *D.dt*: Decay time * *R.dt*: Release time * *R.val*: Release value The Freemode envelopes has a separate window to set the parameters and controls: image:images/uienvelope0.jpg[] * *Control points*: You can move the points using the mouse. In the right on the windows, it is shown the total duration of the envelope. If the mouse button will be pressed on a control point, it will be shown the duration of the stage where the point is. * *FreeMode*: this button activates or deactivates the freemode mode. * *Add Point*: Adds the point next to the current selected point. You can select a point by clicking on it. * *Delete point*: Removes the point from the envelope. * *Sust.*: Set the sustain point. It is shown using the yellow line. * *Str.*: Envelope stretch lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/filter.txt000066400000000000000000000070611247673406200236610ustar00rootroot00000000000000[[filters]] Filters ------- :Author: Mark McCurry :Date: June 24, 2012 ZynAddSubFX offers several different types of filters, which can be used to shape the spectrum of a signal. The primary parameters that affect the characteristics of the filter are the cutoff, resonance, filter stages, and the filter type. * *Cutoff*: This value determines which frequency marks the changing point for the filter. In a low pass filter, this value marks the point where higher frequencies are attenuated. * *Resonance*: The resonance of a filter determines how much excess energy is present at the cutoff frequency. In ZynAddSubFX, this is represented by the Q-factor, which is defined to be the cutoff frequency divided by the bandwidth. In other words higher Q values result in a much more narrow resonant spike. * *Stages*: The number of stages in a given filter describes how sharply it is able to make changes in the frequency response. The basic 'analog' filters that ZynAddSubFX offers are shown below, with the center frequency being marked by the red line. The 'state variable' filters should look quite similar. image:images/filter0.png[] As previously mentioned, the Q value of a filter affects how concentrated the signal's energy is at the cutoff frequency; The result of differing Q values are below. TIP: For many classical analog sounds, high Q values were used on sweeping filters. A simple high Q low pass filter modulated by a strong envelope is usually sufficient to get a good sound. image:images/filter1.png[] Lastly, the affect of the order of the filter can be seen below. This is roughly synonymous with the number of stages of the filter. For more complex patches it is important to realize that the extra sharpness in the filter does not come for free as it requires many more calculations being performed; This phenomena is the most visible in subsynth, where it is easy to need several hundred filter stages to produce a given note. image:images/filter2.png[] There are different types of filters. The number of poles define what will happen at a given frequency. Mathematically, the filters are functions which have poles that correspond to that frequency. Usually, two poles mean that the function has more "steepness", and that you can set the exact value of the function at the poles by defining the "resonance value". Filters with two poles are also often referenced as http://de.wikipedia.org/wiki/Butterworth-Filter[Butterworth Filters]. ******************************************************************** For the interested, functions having poles means that we are given a quotient of polynomials. The denominator has degree 1 or 2, depending on the filter having one or two poles. In the file _DSP/AnalogFilter.cpp_, _AnalogFilter::computefiltercoefs()_ sets the coefficients (depending on the filter type), and _AnalogFilter::singlefilterout()_ shows the whole polynomial (in a formula where no quotient is needed). ******************************************************************** User Interface ~~~~~~~~~~~~~~ image:images/uifilter.png[] * *C.freq*: Cutoff frequency * *Q*: Level of resonance for the filter * *V.SnsA.*: Velocity sensing amount for filter cutoff * *V.Sns.*: Velocity sensing function * *freq.tr*: Frequency tracking amount. When this parameter is positive, higher note frequencies shift the filter's cutoff frequency higher. * *gain*: Additional gain/attenuation for filter * *St*: Filter stages NOTE: TODO add a lengthy section on the formant filter setup lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/000077500000000000000000000000001247673406200224005ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/ad-note.tex000066400000000000000000000016031247673406200244510ustar00rootroot00000000000000\documentclass{standalone} \usepackage{tikz} \usetikzlibrary{matrix,shapes,chains,scopes} \begin{document} \input{fig.sty} \begin{tikzpicture} \matrix (mtx) [matrix of nodes, row sep=5mm, column sep=5mm] { & |[lfo]| Freq LFO & |[lfo]| Filter LFO & |[lfo]| Amp LFO & &\\ |[block]| Base Fq. & |[block]| Voices & |[block]| Filter & |[block, shape=isosceles triangle]| Volume & {Output} \\ & |[env]| Freq Env& |[env]| Filter Env& |[env]| Amp Env&\\ }; { [start chain=trunk] \chainin (mtx-2-1)[join=by tip]; \chainin (mtx-2-2)[join=by tip]; \chainin (mtx-2-3)[join=by tip]; \chainin (mtx-2-4)[join=by tip]; \chainin (mtx-2-5)[join=by tip]; } \foreach \i in {2,3,4} { \draw[->] (mtx-1-\i) -- (mtx-2-\i); \draw[->] (mtx-3-\i) -- (mtx-2-\i); } \end{tikzpicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/chorus.tex000066400000000000000000000016771247673406200244400ustar00rootroot00000000000000\documentclass[12pt]{report} \pagestyle{empty} \usepackage{pst-sigsys} \usepackage{auto-pst-pdf} \begin{document} \begin{pspicture}[showgrid=false](0,-1)(8,2) %Style \psset{framesize=1 .65} \psset{style=Arrow} %In/Out \rput(0,0){\rnode{in}{$x[n]$}} \rput(8,0){\rnode{out}{$y[n]$}} %Crossover \psfblock[framesize=2 .65](1.5,0){cross}{Crossover} %Feedback over fractional delay \pscircleop(3,0){comb} \psfblock[framesize=1.2 .65](4.5,0){delay}{$z^{-n.m}$} \pnode(5.5,0){decoration} \pscircleop[operation=times](4,1){fb} \rput(4,1.5){Feedback} \ncangle[angleA=90]{decoration}{fb} \ncangle[angleA=180,angleB=90]{fb}{comb} %subtract? \pscircleop[operation=times] (6,0){sub} \rput(6,-0.5){Subtract} %Panning \pscircleop[operation=times] (7,0){pan} \rput(7,0.5){Panning} %Connections \nclist{ncline}{in,cross,comb,delay,sub,pan,out} \end{pspicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/distort.tex000066400000000000000000000016221247673406200246130ustar00rootroot00000000000000\documentclass[11pt]{report} \pagestyle{empty} \usepackage{pst-sigsys} \usepackage{auto-pst-pdf} \begin{document} \begin{pspicture}[showgrid=false](0,-2)(10,2) %Style \psset{framesize=1 .65} \psset{style=Arrow} %In/Out \rput(0,0){\rnode{in}{$x[n]$}} \rput(9.5,0){\rnode{out}{$y[n]$}} %Panning \rput(1,0.5){Panning} \pscircleop[operation=times] (1,0){pan} \ncline{in}{pan} %Preamp \rput(2,-0.5){Preamp} \pscircleop[operation=times] (2,0){preamp} \ncline{pan}{preamp} %Filtering \psfblock(3,0){fil1}{Filter} \ncline{preamp}{fil1} %Distortion \psfblock(4.5,0){shape}{$H(n)$} \ncline{fil1}{shape} %Filtering \psfblock(6,0){fil2}{Filter} \ncline{shape}{fil2} %Crossover \psfblock[framesize=1.8 .65](8,0){cross}{Crossover} \ncline{fil2}{cross} \ncline{cross}{out} \end{pspicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/dynamic.tex000066400000000000000000000017171247673406200245540ustar00rootroot00000000000000\documentclass[11pt]{report} \pagestyle{empty} \usepackage{pst-sigsys} \usepackage{auto-pst-pdf} \begin{document} \begin{pspicture}[showgrid=false](0,0)(8,2) %Style \psset{framesize=1 .65} \psset{style=Arrow} %In/Out \rput(0,0){\rnode{in}{$x[n]$}} \rput(8,0){\rnode{out}{$y[n]$}} %Smoothing \psfblock(1,1){smooth}{LPF} \rput(1,1.6){smooth} %Sensing \pscircleop[operation=times](2.5,1){sense} \rput(2.5,1.5){sense} %Combine \pscircleop(4,1){comb} %Depth \pscircleop[operation=times](5.5,1){depth} \rput(5.5,1.5){depth} %LFO \psfblock(7,1){lfo}{LFO} %Filter \psfblock(4,0){fil}{Filter} %Panning \pscircleop[operation=times] (5.5,0){pan} \rput(5.5,-0.5){Panning} %Connections \pnode(1,0){decoration} \nclist{ncline}{in,fil,pan,out} \nclist{ncline}{decoration,smooth,sense,comb,fil} \nclist{ncline}{lfo,depth,comb} \end{pspicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/echo.tex000066400000000000000000000016731247673406200240470ustar00rootroot00000000000000\documentclass[11pt]{report} \pagestyle{empty} \usepackage{pst-sigsys} \usepackage{auto-pst-pdf} \begin{document} \begin{pspicture}[showgrid=false](0,0)(8,2) %Style \psset{framesize=1 .65} \psset{style=Arrow} %In/Out \rput(0,0){\rnode{in}{$x[n]$}} \rput(8,0){\rnode{out}{$y[n]$}} %Panning \rput(1,0.5){Panning} \pscircleop[operation=times] (1,0){pan} \ncline{in}{pan} %Crossover \psfblock[framesize=1.8 .65](6,0){cross}{Crossover} %Feedback \rput(4,1.5){Feedback} \pscircleop[operation=times](4,1){fb} \ncangle[angleA=90,angleB=0]{cross}{fb} \pscircleop(2,0){combine} \ncline{pan}{combine} \ncangle[angleA=180,angleB=90]{fb}{combine} %Dampining \psfblock(3,0){hidamp}{LPF} \ncline{combine}{hidamp} %Delay \psfblock(4.3,0){delay}{$z^{-n}$} \ncline{hidamp}{delay} \ncline{delay}{cross} \ncline{cross}{out} \end{pspicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/fig.sty000066400000000000000000000006411247673406200237070ustar00rootroot00000000000000\tikzset{ >=stealth, thick, block/.style={rectangle, draw=black!50, thick, top color=white, bottom color=red!50!black!20, font=\itshape}, op/.style={circle, draw=black!50, thick, top color=white,bottom color=black!20, font=\ttfamily}, lfo/.style={block,bottom color=orange!80}, env/.style={block,bottom color=yellow!80}, tip/.style={->,shorten >=1pt} } lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/reverb.tex000066400000000000000000000023071247673406200244110ustar00rootroot00000000000000\documentclass{standalone} \usepackage{tikz} \usetikzlibrary{matrix,shapes,chains,scopes} \begin{document} \input{fig.sty} \begin{tikzpicture}[ point/.style={coordinate}, every on chain/.style={rounded corners}] %Style \matrix[row sep=5mm, column sep=5mm] { & \node (fb) {$f_b$};& \node (del) {$Delay$}; &&&&& \\ & \node[op] (pb1) {$\times$};& \node[block] (pb2) {$z^{-n}$}; & &&&& \\ \node (p1) {$x[n]$}; & \node[op] (p2) {$+$}; & \node[point] (p3) {};& \node[block] (p4) {HP/LP}; & \node[block] (p5) {Comb Filter}; & \node[block] (p6) {Allpass}; & \node (p7) {$y[n]$}; \\ }; \draw[->] (fb) -- (pb1); \draw[->] (del) -- (pb2); { [start chain=trunk] \chainin (p1)[join=by tip]; \chainin (p2)[join=by tip] ; \chainin (p3)[join=by {}]; %\chainin[join by={}] (p3); { [start branch] \chainin (pb2)[join=by tip]; \chainin (pb1)[join=by tip]; \chainin (p2)[join=by tip]; } \chainin (p4)[join=by tip]; \chainin (p5)[join=by tip]; \chainin (p6)[join=by tip]; \chainin (p7)[join=by tip]; } \end{tikzpicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/gen/velf.tex000066400000000000000000000010161247673406200240540ustar00rootroot00000000000000\documentclass{standalone} \usepackage{tikz,pgfplots} \begin{document} \begin{tikzpicture} \begin{axis}[domain=0:1,samples=128,no markers, xlabel=Note Velocity,ylabel=Param Magnitude, legend style={ cells={anchor=east}, legend pos=outer north east}] \addplot gnuplot{x^8^1}; \addlegendentry{max sensing} \addplot gnuplot{x^(8^-1)}; \addlegendentry{min sensing} \addplot gnuplot{x}; \addlegendentry{avg sensing} \end{axis} \end{tikzpicture} \end{document} lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/getting.txt000066400000000000000000000035511247673406200240350ustar00rootroot00000000000000Appendix C: Getting ZynAddSubFX ------------------------------- Usually there are several methods to obtain a copy of ZynAddSubFX. SourceForge:: http://sourceforge.net/projects/zynaddsubfx/files/ Distribuition:: apt/yum/others Git:: git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfx Introduction to Git ~~~~~~~~~~~~~~~~~~~ For those who want to live on the bleeding edge or who want to assist with making sure that the next release has fewer bugs, you will want to get aquanted with git. Git is used to manage the source code for this project and can be used to quickly and easily get an up-to-date copy of the source code. Getting the Source Code ^^^^^^^^^^^^^^^^^^^^^^^ In order to get a copy of the ZynAddSubFX source code, all that needs to be done is: --------------------------------------------- git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfx cd zynaddsubfx #Download additional resources git submodule init git submodule update --------------------------------------------- You should now be in the directory of the source code. For simple steps on building, please see Appendix B of the manual. Checking out a branch ^^^^^^^^^^^^^^^^^^^^^ Lets say that development has extended into the creation of a new feature that you want to preview. For the sake of this guide, lets assume that the name of the branch that the feature is on is foo. ----------------------------------------- #checkout the foo branch from sourceforge git checkout --track -b foo origin/foo #lets checkout the primary branch again git checkout master #hop back to the other branch git checkout foo ---------------------------------------- Now one should be able to change branches and go into the build directory (as described in Appendix B) and recompile ZynAddSubFX. NOTE: When using branches other than the master be aware that stability may suffer lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/000077500000000000000000000000001247673406200230745ustar00rootroot00000000000000lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-global.png000066400000000000000000002376241247673406200254420ustar00rootroot00000000000000PNG  IHDR+DQ pHYs+ IDATxwXߙٝm `%՘DK%_4hFܘ%ѨFDE0DD)bA3?N]X9 3;/V? <VD@@@@z+" `=GR%###>>|xz@'JQUxϳCEXO#Z;wvqqAǵ׮]Cr:АO0 UUU%%% pWkjj4A4Y7JaH^~ڴzap(ʫWN 4ou7S8Meee.VEpwvv7oBP(;z($JΏ3ܹs"u…d޽OP(lll<==_~L^]>~8'~͞޽o~ "]5kVAA6663f̸z*˲F ٳ={Mx0=MAX)akk۩Sٳg'_#yv"...*jgYYYnne2p5EEEϟ;vlmm-OUUL&988tSߟ+/;_PPP(D"4444M UUURB@"( FS]]vҥqM<(hooNwQYf `H$z}AKqww߿?%%%gϞU*^^^'H$,ˊD"???nEX[)z8'&& "t0Ϩddƍ#nܸ˷"n*((7L tqqYd bn/=z@glllO}/-,vڴi ̛7Ν;ׯ_7 ݻwO8!HG+ ` V?`< wqq4iTptt0Z%`輈gnnnAAt),, KKKdbs*رcmDqq{M&k#AAAcFt^UWW4i>`f Gqݻw```;g/㸓Ӈ~2eIII7nܸp˜1c}),,,++#" ۦY d2[TTT0 z66664MsM@ ˁ8Kcz3SBprr*//ܹs;gъ899Q믿FٳgfK٩SbLfkkkZ d"944LJ$IEP*SV;::޽{VxyyqDKS%Inݎ=Avvv\իW:N@;bgg7m4KR_ ^gg;vݻΝ  V,ZOOϽ{NHQii`ySaϟwpp:p@ei&/ݽ{7!!a Hf̘aa=KKK T*wJprrrrrؽ{?:"666aaa~~~b|:Kcǎi>}pWmll.\֭WS,?Vy^WWAr 8rFex~VD՚]t:$?~qԨQyyyR7$$͍/(X4dȐpn9̼F?M>faԩSW\._|Y"yyyC ApƍC睝ĝH$zWQBѵkW6luqqyzzI_#Ms]z_{.xxxpgϞ}̙:a0 D@}{Ndsu IMwP@|ȍ^K&3Y j8q"r~xfw=22R*t< ϳ@;b]+ .VD@@@@z+" `=gqcH\qs :<.G~~;yw֮Dqs" 8 Xd|}#6366;sr2'!x"dBEr\5u5u\!ѥy99Ǿ:@aVK.6mH$ϟҥKee%}O?W޴iWRRg}e˖v@~~ITLDb@$ 4w$%_> <D6+ND m"+H.gϔy0 4z78yd^Ч@vvvPP5oot3!"ѽu4 ` HD*$srjmv߿xVwÇI+}Ǎ;::r ***,)$22|a#+xܹÇ?n#7!8N2"A Ȩ;b!yyyZqVV|ܽ{֭['Owqqu떏g̘aI!ZXSOF?ܽ{7:: ܹ}a__vUUQQidBp%ƀôUn~^F+,| >ZD./Y>˗C۷":؍7;V,7!/[ lll>?e6-Ǖ٢rVTe?0 G)yRI |^ڐw#p]ZQOe09{ Kȇ[[I3,<֒d_h3_.Kpʹ,&c8uoyyyY|7Fg"""m"Cfggw1t,lڋwe, p142̞={hyog_O 7jJuMVU&k'CiZ&`a=8paZ%H@Q+Vسg#kjܺ2 Aw2 _-L +I =u;w.i͒]n(k% "pWw[NyjP(ĕ/jLJaݜwue9i۹} . A_1]>sTUU͚5B_!Mz cT4P:88X`E C 1੷"!!Q^jr@ 8.7Nzh!B66J(*$$ M3֬+ʼKgFi(~ `&)) ^y#0qOE5*DrMMk®EFe0rssNReoZJs+700Lyy/a**74\F/?_v^g|رc[l9pZ9xeRSRFƍ)+W͐PK*a]ӬY 듫5ss0  gQ?K;;K [(ӭM)aL/_td7s'{?aD!W7P^= &lذŚ1חڪV ถ۾9PwD*R`x`. d!ƊmZɟxI^a]Ee od@{xyy9ò,)6M?(BD..555 7멿 :t!CF{  4j+q@-lZvGG^z2ӣO>vvvJjXRɔ[^y?oۖrܜa1]2~e`X m$tnH?撩6v {_WWsl셝Cj.͛/_̷"ׯ? &MԳgO'' .H$Kjkxdp}32 9д( A RSw;\u]È9O`uj͐iǏ=c?b3ϗ%c8j֩g)Ot>?ޙP]ݬ{r3e<$l+mlH[Rbv:|Ikkj*׮H$20 ߄}IJen[zũ0 e,-y*`A0,k`Y0\D7Q5jW_|iI%"7_{WSfF}Keݖ>?  :' IB'( gvxU/7,d; ۛ.țowޥK?~Mᐶ| VDQ\| jb-hhZ$E"ȐtȊh@jՙ3 NT*>UZp'\jt_O{+׻o~8[TD'n0:VVx_$"Z{lշK~K'8fxa/M^ʏB$S:;omT&RڃA˱Vm. ) 8 ZB PFURo?ܿj ,dmQ_ptr٣'c`9"VOhx)n|Taف%K$os(3k秫6筓aؖ-[BBBݻlٲZpC#x4pZJeZ4"F^TWhCR2쉟v %N^o7)HPW^@t}n\ ~@h(+fD.C_ݹK'opە6tT7;p&!I${;gg\H#O#GyiܤٯSZݩS0 sptd:nu ګo}:{0zo2jQ% 'pBfgo>`Kj0A".+=CDkAȼC]:^#[UiWZ9uܹw{vYmE}r5k!i`E8]d2$Vv#'~p~+ i}xvIݱ\)Xw8AlhX6hKp'N'DdR\Gkm}ブyf{O-_Ez]ױ}OlAC+E,rgK^_KH)ò8i=gzJk&Mr /ڵjZ/gT &{-Vҹ{w]=OJXhmjy8YXRX7$!y5NRILJNCˮj1Y۴^؅e[9W] ִ_|2o޼yѮK/~Ǐs.i5Bv C1ᾛE>~3gmVs`ΚD†Rƥ\ݢ3&;zTje]}zs&aSӢƎ Iٞ8Eѓ/̞j$7ts6lehôUۥ!V3c}^2dY?MQC5M2'bFn+,Ws\`T2M#gs5ps,>tHuobh:q* 4o'IKD誗^{FsssӧO>vةS.]wѣG8qbΜ9AAAMZxu[+b B"e&*''=6v&*HXX\VV:F4W/c/[yd]:y;~?_%w0zǽ7c8ˋ aW^wuq+]O~y7X7T?/#e68.D~|Q ^[Tz {vNN]Ō#ѱQ\'&&eY+| VJЂkH(@kqmHH It$)7r}i {WkD1bF1su O~y保&9;-141c' o.lKvy/K,aY4еe]XXH_| ̟? uֵ]#.,YdРA\\e_}եKݛ,))iΝ4M,܎!t( Ū#)icHHCNo;{V}S_Q"F|뷶QР~~>S= T`B*HBC1!'͑Vdʕ}]rV|8pӳ t]}v||0LG@VwPv #7<I+=}WI[~i߲:K- Xt,,,ꫯ箶699yΜ97Z C ]稭J(AAA!Cf̘qƍ)S 6L~嗷o&IeʕgNuI$c#tj /`9VtaXn)..X|7{ IDAT-Z$ׯ_?{N>)syv¸|'Oֳg^x3fÆ `(3>DCv䛋' +;T@Eں&aI&m߾]$m߾ŋ8cv40 ?: V^_GDDreT*z}n ׮]lae СC_}/^+aTòBq:Eܜ/RVGR-GiuXnٳ IJmJJJ iӦ7Y΍76l؀aEQqqqgΜ/BPt7|sСP^^>ewwoԩS/B["iii'N䓯׷[nƍZ+3s5۱eFP;+}ngg0ɸj//5kx9،?իפIٵkI.--uuuF __XG0̄ \\\֭[wneڙ3g֯_m۶۷曽zz7zU__?{>}z}]|+Ə֭?<44tΜ9_|EsuhobϢ(*.nj.ժ+7رF[,xgoѱ [2a w<{l~~uXx1rH8ۆ@d=juvgKhfĉ%%%AAAiiiVR*jʕ!7~ѢE'N(..>h„ 6z6699|-o (HU|}#8C : !dzǠT*=== G:۷o={eYn.!!"pߪ1 ~?|ҤIqqqBX% Z+2BHD*4$UJ AR|(X,FW)JFAF-/lrl5 4⒟_TTğXQF}+VoI>|8ZjUyyo2VB6C o?"bG(99+)S/&fJnrނ$%H!B+@L̔}FmA?z1'(5ue]AH< 0dmٲpZw0wE[g(:x`BBԩƮ78p… cccFGGoڴ/|뭷v횘|zݺuCݵkLj[[Vh8gBfk9$F;SSϊ"[[\!FD=NPjY~dB!Y!Ţ4k[ BpȄ888988%. Er\zqX’{tw6&fJppb΄ W9!2n 6\yJȑs_ =N:ѓ_{QР>VH+" p`Xy{7s}mo-mQ(.#&h(1UЩ5,Hm<v+Z-,K017Ar|NC)jJ4SZbm0xjxxb3Z ΂@J 8H4si3$-XB/PKh xzHgG^0khE SwEo> -h-pjßiYһzo ُC:@L̔#G6At*r_$尰V* ` 4idHOt*e_,mwmSn!qgO:.a<_|Fnւν{WTMY񁝳LI689t UiJڪܨLDҪ: ,˰,2U  dI:"GlBYȄ(64}/(mm¢: nlv,ڵOnQASGO'/7c`Х3{,ھQDot>]:\:y7n}3e<˰&/ھ@wJůvӮ?5vQCMlU5 83 N n2 4MӴsF4pDhY+B F&3$ZUT&H5+ꎴ˳D Z^0aHLJvY B]yƷ N^Mpە6tT5T8{K3ߞU8xiz=׋R@ $)%-i@c@ORNt4uآqEEim:";EO 4#B$2!!!F {^xFT*5uӲv/ Ю?(,4x  5/ť~߸ s_AЁI%$$ m)Z@N"0hE"jiZȵWV s7$$*8ނ6TWAA#G΁6ۋHyyǣ_X/j5J~01cЁϋ/6aa߳u/k˥̈́g: 7aDv={:ku%}M|-IũSE[̜i]|3Yjkkuϔ["A,P{j>GyɎn:ZYW/0:C2aڪ{5ewo\ pDP2=-^t?ԕJ$)AQ#9 ROܬؙIIMGɳ5P|B.umEgbA%ȑMN+$I1\#L2CVD"Jq38Pz;wΜ9HM+MEikkO$'/_Qb䔥Kصfq#/޽k.oEEvZwqqq҆ M,gML^ L}ۺJ^9;Uy@ ڊ,x'YV0_$L%"tKz{k㛋1ow3#e6F?.~~uW]]^_T!7*UViCx6E5MUUǎmEZtuT* ئ+!d8c0:ˋBlE8a!^*))ٳgXaaab"R2wwF%HhKΝHXza ) J$]]ennJ]]ΞUҴ4@hTIsh]BC]ÍZ/*Ck[8deySaaY))ґ# b͹?gd6hwSW,D1b?ݛ?ъ,eo\ !M_?i%$$ $hhZ$E"HI "H=4Jb:T I'I V ⢌(~G,[!̙'>kE^,w^jjRh&yZ"Us7/O74 2$55U@0L]iijjGyyS=3335jhn'O ڵðhKi듓FG_rERWp-[o߅TO<ҥ[oKIRPtIIJ*z ?وa!Yf1,+H<*JKSRRvVUYIĸW^I9v-;{ȑ?\{@aA,sټׯvreOÃ-wu-/,a#!VunKs?pWM. q{5z&n;&p 1rqOJJNGZ?R~֖w? ILb-X,*G? M!:pw R*mlljqpc fY.=kW(Jw?Vt7xS*̼[Q%W(~MLt$Ihll'MjC*m_=\ia ?ob sH@aTccmuuiy+WFQ[[PWwѣFxH|p0O92 tСcGJ޹cǴj|}|sseeSRҷg~%~\MUUqqիW'MTZZzIkWMi)0  Y0zC7>`o}.-WtvvvJR!agg}钷QOUVQJӨ}""d 5 @*JFF,y{yjjP>ŗ.\ptpI)٩T*777NgΆFWWW***UWVݻwkd66[.][)".;]c:d7.@}Fm$tnH?; @γfͲ0uMFpZYYI?4Bs5bX,}JVע8܌ dϜIxr':[[4EduuE}}]kOɡ(!B_Y Fò EZA_vի ˚bm$ 0z`0hkk)ήVQz=)J{aR&!HJgFbKa!*+YXe{ggg>M N\ ,MWVVV5zW77M[D$a\v~*dB2X䚇$p' =RC nݺ}z,YQW\2u:-EMDIYg{rjO)xccòK߾}G~g83HSaV.]jgodWWTQ(Db1ӽv=zll}˻ack{ԩOeee2?X;R HӠA=9sLeq! L2/e_2%@{3Qyݛz䇋@iY3gNJhȑU=oݲIJV2 R?(ò7,4rHpum:Bw@r ͵lGMh=Ch͕!w HR-nRE&YHY'U$I$ki:ҳ,((ϕ+11SRSwH$RTʷO;ϲ'؊66joTGܱ ,/oP*]\ףK@Nbp55Az_}"%..D쓝}ȑ12s/P~Ήd;{{??0oT\ڻw`ԩS98:0A*60XϟA2lȐ!6mH$|3IiNh4j[ѫѨ%+z!'؊2eҥ?WU}vidz>|ҤI$y…߬]{bLeq h.Xrs ~5]ǎ3wBlACC= 3`(hhzۋpaY׿U,O?觟~T*?J)#<|С2:tW+4 ݨ@ihQdذ0''i3/5iQ}N\v;YXRX7$!y5NRILJNCˮjB-gN:p[oe9s&8>a„ 6/LjjjVq~8d~h5nGAEFF\Aَ ]ə N[8˵kkg⽢\NT2GGWwwk׸Ko0:8YV/r,3E 5dXvSAAsZWw?K o&5".n,>tHu/nnV____ygY IDAT{7g{^^^+V'ۼy˗["  (zR![BLyHk!ᄏǧ5[=gZ"ΰ`{Tz d2YNكf|#(͛x_#`2RRRڥóeE@C{- O4`qܸC"''sP(V\Nzxxk)))!i Q7f]Q%<=^^"Fp4&]wٹ瓎E(.9\ OzhD6#JrhV X+'XvYSv3!wYt):7o888;믿^|7o}1S+䊬ŋ[OP;_yc)(PcCu 4hc}3~?`k^}SV~,+|&"R_v톅VDno۫Ǖs!C/M_vxU/7,d@Mi8zK'R{ױ :\NI10F= FGb*N#'O܊aSBfsB}=hԜȸLlv"| a/.n^q.:/(?? 4] ׾:E|q4ZvAVbLuD ˛òlbbŕ.,iscaӚ}Fx$9dH#ɓ>}%E7̹R^>bk'oG7p[W^kc[022e<0%]ؚ7.?_DWL4 {]2EbqCeuuI)?QsZ?G[g_uІFK#q!6|.Z4lXk(& 5um=T" cctfc7Ov,=|,Y²li`{vIݱtwXFi[+|MhJ_^t?C"D&j!ՙj| :;ؽOG %pe.JڹC7_,+a0acߝg'h__lr4J,; 6_b ˨9&+ RsK䠫CCCZ Cku\"qqKMAՂ:E3E][o j^O̓ iHakΝ3t囋 NdlWaebpwpuعwbgM jaCuMР~S>KM1 %,/zs`Xv^kU5?4Hb#?sibڻX^D. ꈑG[A )-z.(^{涾!2m2;N_w\ʿ3+m60׹w}ޜaԴ#J'Nrr"].Wdd싌g 3oڐfZ1w I\wplլYߟO&+z1 ݦEf*оtH'tC s~ۚ&8\o+(b`dx"a؜oVj1Sԍ]Bqk 9|ˢW5@Ӊ+PYmi~>Yl嫇o%D")_owz?sP;ӎaJmuwywUfW$!{ >X,!`F+C"##$R`֥RV ȇ^G^-Pµ (}=- !'O=j<  5| f[ZPǎ󉉉qqq-heeen>u>W|̐m7A]ŧj~9mFk,-_OQb)}E/ko-:;?|~k"H%HjHi TF1@qgE݂c B0'BG٪7\0145 ݪ q4껎5NqیC6>iЄ@O~QYdϪoJ4JUaVOನVh@isz=i[#j B"_ReF B T*D"A* =%%m*[[O11Νh$(M,&{ KͰGAzH"IJ 77#~qQIb 4mI[Di$-a~^ƖE#d ׆$IRxY.Vz-JM!+8[e_,LIJu:Kg֎wG>TڢFZf2c5VhM*R|m``0HRj0R  b=c^F~%:E|Ahht 3;ؙIILJO wy, ʕ66E|}#>Vo.^4=YKe2K^ "]r賝IRH6 0LH\b1 6U[ 4kmpkQ/14)(88_lBNiע^s'SzJg}>7 e^Ȭj7͟M9vrb٫Y6Yڅo("2xCP8pcjpPsk~:e]zԾN2fJxLrA &o>EFt Z*\ @*vθqI%DO;ryIto4r9^ӧ!Bn:BBC{TVAd?ti4:clm4F1d$tx@WBt2"NdB]R~( IRTrhN=3 @ODI/؜S hԅ(""[?^EӴD(:=b@&$$$4,,-AJtJ%q},[0>+힦 6gA jplv:/‰h.Ճ  (($Az ItNOD2l "_Z ouEAIQxϭ]FG@vk4f=HvSCa|5j(=f!B{ƥ&hlejbɴAq `<ǭ,,\1af~ZTVSR @$y8cs2pWTyW(ۭN,{0PN @u)Əݑ Gb[2gE=};^"fylcƌFE gnۭ$DAjE`Ye)Z$IXWDGK/DnDI$#Blu^";>LG築(;Z3*ǟ:ufEAU*KK]Go,Zn:T s .nfٌFNMM]@:,+%yIP(%&OL8ʑFJ6@EEpCt hXent-TS`oAx^L|"e*'MCus+ =(KMj5MdiWDR珗D]*v-{@ :B٬, 8kWEhhho! BjuԩW 5w;{v۩SI _ nwtua;͙ ;q7ڷfą {#i7ǎ^ihhHg\D:;v eegdٴb6MnˈRR0 ]1x$Bt23IKrXI(/*Ӵ(V5JRTҴ Թf~>:pߡu7Gv`8N;vt:Ѕl^SٓKolڔW|[۶׿:}+W\f-Eӏ}orr>0ܼwPŠ[Yd@SK*? _+|MH͞->|$Rʒ#=Ȳ4cd2:H!EhT*)N0:WZ!'g{"`;i:J#"&m9DP+x@P466e@Q'*IQm7Ne}RQg$3qbJҴJ9S;t{`xfFFjz65铒".X# ǢED7i,ƪUKN4cEPSUuiZvJ~~~MhSO=U!_E TxR~~~WH|`ΜeeNى奥ǍAX.^|੊ZŤʅm{MLJj3 l>,u^N#DEH;"2*`{~njz{SK~a|]Pdff&:SEz/ / ݃cN^V)A@lO>cF^nnssѣGwܹ}۶3f<_QQQ &͛c[n@< fe-_lޜ|j\lRea.^hvv?'$8rpիUUUy޽`6޸~7۶Gx^V)SN47ߔQuNJi]RB/aR+  &&g v^'6 4ի̙3@Ph4Hkmki;u4X"jJ ^J?hܸy')y$JL|"%T*UH0) f0&L*= ECC (D illZR*##"z}bbVI w O(*Gܻwoݾc6122cY{W\iimMKKӄ{' P[S#4GNEDF;vLIcj>)I_\oa)/@ O#~/ޝ_~|+kѢEn"zV=T^~aiZEQJ%D\)AaXEsF{p'.̴X,˗/v…iӧ_mjinx +՝{c,ylгgӧ@ddh! Xx]ЕLjh0~},7/'gcnDaJ AD˱@1c KM  BKdPT^Z}U蔔زY>8m߾}A_9ЫW(Y ?J1sfԬG~%E(.N2wddtߚ5%j9o7 Λ`wԣJs#5WUcaGDDD:Hwk>b/qоi<\ID˃3U()Ӻ)'¹a%b6l;fJ?FMKQ<ֶt͚jB0s\بQoGDHYB1qŊM6A:MaGSWz|`v]իؑk8b)4u[ Ax A7^4ε{KW5mmүu&:^E7^*:Yϲ;li9ّYȨ(`ٳnE/anZS[%/};w."ΒzDAN7ޏu0>g=7fXecF\#a+X{?}Wvr]p;/HcΜ#}7a|s{<^11@Z=v쉏y??߳qᄏm̘{arljU<%VkmHIv;,ʚ߹olwրd IDAT۷MM^~fL[8DueeG33_޾]ә[[3JŭiӬs؍Do( 2OEIįg9UرwNtm̟e"v7{G+ާOwIŋ=Tˆ>]Xd^hb<-$<\jυ? <*j@uV;'.Ybik[,w=&v G:u97ヒ9% ʕg۴I>~سqz,?@moY{xXd>%~֦Oy9sG>xP֏{aWU~?`;66jBVd~qz~F~W_Adə6t1:1f6[[Qrzzڵo7Iߞ:y;~.?{w"99OY wuHkG{lA**~O9q۵kΟ_57oVtn.my5kuN۷\ʕ+VMs^~4'Ǒi?np<2@&,~DB=ᇑZcw={oIVԊ?>tDJawI"7Rys]yyͱc[xcʂ}݊4dji衏!wӦ3+)څ ȳ4^ֳO߮\Do~N9կz3G= 0v{:-.N<E,4U)#bn SS n#1~ O}<$ѸđŌ]JtRz]A71s=#[H:t= hnitʊXZ[\]M @Av_&WFI=N""0 o&lE m{]:r4,,PYg)Hrݳw,IQĞ=$Wdo."4␉._o;*]<@Fۭލ<ˊ=Ai?t&JPF$Tb"t f`pWqq#eIBDNND:* {wYY7{[{8,(f@ZڙbQEQ* #M+>gOԩ`3z(Hl0;q3Q*o^z)se]58ztYnnKCk/J[&kjiC$ Zqq#F?t*%:( UiHyD)B@4z10q$D+41P&=CwcpWx-z-zR:tO7ttʊdgN瞒,ؼbh쓜q ̙ofd|t)SC@"Zˌ++y?D'&-hлj?|uzo]5?q~Μ9zK-{xO>ܹ|oq#[AǏtL˴|q.VቼC)K &rdyļG/"u~H(HxJK3DOFd!R"[˗ÃAt Z F׬Y{FHH(BAւWTX,feXeդD(qJdY %e*l Ѵiqݻb*Q\H*СѮ/VDpСqCDqCD))SwH,^2ǿ5k<{}g}!!E /$ķb ](.ޕVCPjj]P Y[%`f:ZPoNe6byanMt=E)QEEVU$BMe llM69/o?H_oN qw߽ 7w m#. u "NbѸhA@ZTtf#I%SZm3Vw`s-C634rjj(jO `#lAɈd2΂R'Co}ao$ТiVDiБRI+*CCv;0?0n}Ou+x" Fc9NZf2t`E;=A@u~ Ξn{ zCJi:ӎDOOXEEL1cj#J"]T{HjFed<;nҤ;>.:IP$$r Ҳ,CQ:\r6/D)i:G**jD Hz7DR` #B?h4!B&$4ZeF'kYWwؐ8vxG˕O0 :=}pQzšn=_D:@*WD$}DO;%iÀRI<H{OD2"5\מvtÈnБ(*[4DZZ-h:tg+bT^ 06ۊ fQ7 `ocJ%lE=h=6!D<ϓRT74TȍD)4  ,9u03tZ(XѩTj #q},-)xx"O%%mXL8 BRm۶s_:๧Tk($T}))Np +@@13g*TBK"+J]BBرA},\xjVɦwtYZ1uu[WhvI!+Z>m9+TWBjleW^p!66vǎ~88YQDEV35nm6RA3i("L)d:]V˕+ 8o^Ñ#KBk׏-MM l@14qJR*9@Ei=X,gd2:``#ȊtL3}#[ vJ(CK+o$bYfy'IT;CDx(bYo÷Xh x)|9 A q}ƌ%JMȥd/VDbGʩS,˶M뮂u[)K z9hcǎY-vg-nlܻwobRRH¨(lv5//o񕕕f ?[ڎ?ګkWIAAXV[qϟWӴNc ̬:s4DEE%'#Gr HBsEڷo߫׮²eG]cƌ6|}|l-7p |0Cvz|q!sWAڛǮ~)cl(J۞>TjU*)@Q gv!mLEK/Bdԅy#UHWuCg2efsO2t?"/lf;%* W KI(^d1gOPTR6!}/Sv"[8iҤ}juoϔ)`4srr>bZbl_8|xӷ/ ⾌}{677=zpIɿ"*( 1[K U_~o3Lmm53gy"/+k)']  "eЙgM~--IR*UxxxmmAj3*+UV>}C_[z}O 2JQz}Oe)ǣ ~p@*COKթGܿUY5v*:%B `n'b։.;%(jܸIX"D6EWvIQ4 ']w#BC~H 2$~!n04ӴJe(D#>""/8վj46VWSvU]$Ç*j4Q}5*O=zL&R =z$&&f:Yv"BDUۭ˨#5:*2211fL&պ~^(2oX֍Q( (_m ,(:'gԩ iZQ} Kd\f q!H:tHvcU^nN4M3С> UbG&m\Xs}}Irrj^r3! "tHHO7/^ IKKohh3zEDqq$It=@TkCRR?;""Z*,WDREĖegghކsz?---"&ڵV?lí6۾}Ї}!ZmdYBA~PT&'JtCZcQIQFw2#aȨP^/i>[Y!ڰx鋭NO8(OXk4?)( 0h4IsL/+Hw@f46s[g"I 0 $D2.$Q{FDGпCw3bPa)%u (Nϗ~OOO/.Y/GGGrq_~*իf> $a"4QFFil[[4?! oXq9Nh74ׯ}`s xz xQ6 ) Apc## `} VPĢdX<_<*"6Jr*4$ygTTV ^ϙLYS{6)I59:DE>y%PZ +r`_ab~^ߕ_bG1!@4pymY,f4LLRJ=p`?W?>Zj1JKKu֬YlVURDA"7MN}Yi_Z~8^dKXjjŸefMxxdTY|?>|YqPyÕ67D1ua#tq>)I_\oa)/@ O#~/ޝ޿fӧ/ziJ `Cɦ&4! O\#|gN t9(l/ي Z ƶC{ aT\(|[v`xԡIE|Oz%g,z}O=MRÄ8Fرcgkkg+DW3_fH`wԾsod@3ÿ9=\= ޽7}Wxj4ze)0}E-V݇zϿ0rYVl"~BDD\oLg3N]^͌>;sԖxV[] zT IDATy|ƍ}o힥R/Λ`C^kZprڲ~>)[[0&O/SV2/( ~t%C$++}]W|k֜O}.C"YY=""6m 8O{/oڮ]߸1o_o%@;^ھ}+gIh%pW`YS=:]wUvc$% ]0fzii+70 C,Eq6J_Ǯb++ƍyf~'GEMxa^j<%K,mmv?wn``gڹ3,22O~?zꩄ#2lzDXd^hiwP+AF:p@v=PDNo,mm!*Tb5,Lͻⷺs-J>+:i }}MÞ3&f? l{"#-65}3w̙{8 ~W_Adə6']tbl6ºT(WtA**B߸%g]o~t'[]v%~ѯ_S}~qf%Mg}qҖW~\[zkG+]ryŊw/88Ǎ+"ՀO2 (Ѹ:QFʈ22Re"µ{n(.nkOחtds_YbY7-Uyy*+=juhm'*L&4Պs*X6dJ5 z E@k]cw={oIVTdjnnmj2hzGGiәÇt…~.s`=~|ĉJ;9rJij4^ֳO߮\p"77nJu5ǎm}) >sA~Sg144{`o6;[\:yNMh{UʈnT#v0~H"XLjTtSVzRH tR uI"NR5%Q\HGYB0ii?Jz yhv1--CZ񷫻#G.WW!/ QMzbϞWGN*+3I{Y?N6uHٱ#qYCMZ+ .ΝݾO3JBw"aã ۴IfEhU(8q@71"H},^jTt}X=.nd\HTCSQVQs#G;p\g1Qq.G"(("PRZݢEOEO""t+#ib~a`ҤǤ1D_xaʗt;СQ;ɈhvՐNQVWٓ~}geշopc1mZIv={ҦN3&FAf܉gvXEQO<JXt\׿#k .!P*o^z)sei׸5]Q[^rVG.mih|Ei{M--`imC(Ȥ :\4R~u>UUMya^oMD))+~IaC%mXb;F` z'"JO@UZ FjVz=9^) Vf;תKK@e #]y컟|~=%YY#Gn^]zhX£C{wu6J>&O^dIHϞh?? aޜ9BՎ={ң]${H䈨C~;~ܮ r߿q9UښxJHҷ&Dw# $?gY䓤Rٻ;>M?R (Xᆄ)sV_Wxڴ?u;2{/Ȉj]F`YD"=D$mV,))SwA"(HFۧnp >}1 aҤǜV=+܏^% (2&\Nt]Z40=NeD4;Ҷ'ћOxFFAjc߬4/Kp]n}tnLIrbԲ,CQ:qA#p$R*>IP$${O?XFJ$ * )Y9} `UjZ*t.2'$T*)F*Wt3BLš{D  A:D2tZ4 :kzϰ<%%} %A!Wt,"쎳:RI+(6SUueYJͩCC.~L$['R(<ϓRF$+"7,I"Xr=C&c*4Ffg6dTg bP^Vipгo_UͦT " j0l6i x6-Ճ  (($.F ]pc."j pxNMŐUYy3M1(2Nou O%%m8t(NAJmVsf :HIA i}LeVed_IM0D&r9thqB h jTVcs*5o EjO9dA;P~9T瓥KӦN%) U>M#P8OtFAqb00ܻnyǙ; $(WuEsB ${"W@ |96!luSh>-m>;R(HR~>ԩS7-bR%|"lem6 $ϓP(J1acUŝlBRSGyA$k D%':e:i:)mUU:% DQkn(N:e f{֙fEU{ќZV3 дJv =(MfeL03sGޑHZ#99G"A1f]; bgn;u 0g;\u{ "9SR5Z/]y^T"ƎU`_ ۭ 6x`ίٴbوAy$zyHcf G`_SGv!u\P}D'5v*MyAxdFJK3[[])uoJV@DQܱcN]H ?e=y/ƦMyyE˗m[]}ӧre_hA[曖qSo./ .?vBDLl, 2I0BXѨͥVS*RԮݎTXCz2n|2U*ITJDׄ0Dl7n,8|x$ah(R%m6b1eJ@`q}ЩV%bvV@@P466b@Q'*IQm7Ne}RQg$3qbJҴJ9Sw gGS,W߿-]eիWϷ̟f #XOk|[g+=38mXh9y %HJ< Qرc'Ejv=Qbx%LƐPD(%V^~lPjGƎ55E cGؔ$*`4Z[ Πur 6[/^1bDVVիW###GuQ&Ocǎzt$IVPWW2dȐ{Wr^- "oߤYC^^V<4cEPSUuiZvJ~~~MhSO=U!&oFbED}^F ˖v3f]ٳxqEWCZnR鋡A/r4㢜]9ӟHYj;%?U 2 ' YKLlb_N=pBԡGҴ{"/ Rp HDȄJƢ+4bG{"CW6d/VCC&Vi: LFqPDv࿎G&R\/s-Yd_Z[[rɓQ>},\ȎmMMMn^# BffBH:tGtϘ|;wn߶zBy#`hFVI gab(ƇjJ:My{"pa+(--xȻ`q[CXeA`h{BC rd4}ZcmDž=ujj'YnBΝaʔ)˗/Y)z著w!}\ BhhhDQ/:6:?RShZ TFFD477uuntRϿRydxgYC싽 }?shժ#xҥn޼UZtdi9CC;v2Wzs׳*Hm]^~a ii(E }EJpԅ'R^0Ɂю7D)3QdWaJDQ!-)_Ҏc . $&GAEWX#Řw:8 BTJWJJ+"BբJ[V=?c۷ }x3gz%A@R=L^ODZcQIQFz\0wDdT(}`/Nq:jVVȯ6,zbl{zeL-eG^^^ Q`Bgn6UDsD^ޡ[q9m>bO։ ρ5`g6Zc2DRdFNT__Cj|%* WqZ압ǬV,E 졇={v޽QAT(ʂ]i/^\|9bŊSAX ń7lw$P(;'>Y6/Y_DL[5kFF qaF!ug +6mUY/mn^/!JK|-j9@cw&%kZK}gb{+p`_ab~^k%^i374![jm65rvN]- fQ Mמoe\\ѣwqՈ+V̜9իN?oƹs?oohhxwY!C8ӟt7?$s'9@cwtrr"}8ߡ̀ܒ jAiBo^-2!Pč>8@,JJ(2jTA1 ݫ2#&BHtr"z"q.Qߏ É?~ԩhʵ]2YƱc1S@s]ݎ97ڹѣaؔU<I9kxb3grDշo 9;OYjo>TҖ|/$D&Y_~yjǎ-sh|ŝO~!in88Q8/gR ͝+inK$f̈>%.lFh%:*2]~-6C+b gxLXmET cc  ݛyWMY_w/N)?pQQǎ8|q4/LZ[[$MM:nj+/gV'/{ٵ륹s33Qy}O>ٻzԈc mۗ& <|xr୯J3B_|s%;آ b:JMӧk5SkiCjqg7\??zdҊDqC?sQՙ2D̉Ag")<}E7'mA3ήc''NPtBSqFFce@!8NNNPl, \\G/yx }_ѻ77b[_f8f yUѤS| b5ݿ/ru%lS߸!ݛ/YR47o* 8IO|ncRswʲ;E^ſ6|mn9%Q ,2tO*;9, p*ӠpvhOhB :tr?\/MeI D›ȠjC[Xm{՘Be0wvj[xŻv11l(o?Mim *܍$Na@=> *9"jNO@- \m+EK35Μ g]Rrt8<;?6XסWdd^jjCe%[[BB ӕrR;{2/NcUN5(<(00եnV_~+UÃaw]ӹRȄqqE/btCt0+;?oANſΐW_E]ńx{d3?bo~~ 6iE誾ӧVmNf~f~T$ǎ}jEd 6v:;AfS2 !`}622vKF/nanC\2, G]E!k4R߀]t cs>`y &a-'O9;"{W^y]å ?-# ws;9["g77n$\/'N=ѐ&PT֭kQT~J3f+ǎ%>[Rlᮨ~Æ+X\iĽtCtcۛ6ٸcLפ+L6}׀З^`: ,Ǝ}'=}id<Pܠl naԓN8;%p]Ah`:̝k+QǎVf'(h͟>ZXb8rǡ 'N4־0e Up8]1a8KcKgʴ3:\Ў zL&0yr6۳W~uG9-ݹ+ofb2L f!)fQQUGRHxhe0v*7piE%%d293-4pA*:`NmXt ETw^K[,4{2K~t룱8x*oƺu|&" Z$оalڊXEZmInIIbs88A|ț቉VbLN.A8O%&aZWg JB9+-"Z9CJ\ QTPPBUѨ5Z*BYW٤E: TXɓ/?o%Oӳ{x 9" Z*K`֌T)+*bʔѣCgl6ɴe݈͇K:@T S  Ph "*26Nŋf64E G)3ƶx֎A9bc~@8RA[t>0\}ԨG飣"E亷92>T9ZY(7 Ȅf=1_z_QQY1$Y'O>B^|1;%ENJu'__ִ(H?̙'PI A\7oA[?d2@450] G6_QnqU7U--#PkbE A"=;2 VFƃ[ FޣJXG(,vLVr:X4?<* Php7g91nܔիͳg g`&p^fOZ|…!Fa, }4FsPÇ6mɓ-[D/$&&Θ17˓dG5&:-||6!yɒ%%o%0;P>23 $%VjAj4jTEcB:LT{ŃfnO"cɓ;G~4!|Z&:z / B(zb4$d<L[1`ػzDH")W__ưN1Ҙ Zvݺu۶III<Y*GNx4Vjb2ŠZa+$1"555""}LMM}w^V3LRcd'VU*J$ٳ`VL`DDLG΂Z($dŋ$Q)D@d%%lT*),"#ӧĨQoE^CNEϝC\!\^*&Q [-@[  |2yF,D"vvvvvv}eeŋ?qŋ֮\:-{!eΞ=Ux٧NJNNq}D}ɱ?RdXuuuӧO8p@V~HIb5JBdq8 %%%"1vvv}Ȉ>{ ;}vk׮G5#(ATdVj L&&R)QU.9G晡(=03StUA=e,"DEEwTD+Bg XV0s֭ʤAZ7xiTf,(ʄFӯ_Dnm6}k׮mذ!11qԨQ=<<7!ƴ< ĈD"䚬$ԊNMM]bdggWWWP(BBBnQ[Ss8xjUԷiB ݴ"rjET洈 }"yٍ}QMlG0tojj4S_O.=fxFt:DOs…JBj ]\\lT*5q mV1aaa3f̰onn3GY円nذaĈ@*HV4$88Ex`[&>Tq*nW.G]J$c?Xu&sM,KdY"d[ZĦ[AlR1~r%p1"ӊ@PRlL&I$( mџIy<8xаAD[N,TovԩSLyܹs9NgΜeXEGr̬כohѢ7xզ1bDII iE,Xlٲ7xc…n4r J$JJVRL&EJƐC9=yE--*Bkf*^:{ٳU;? RPTrLx5tSSrO=zq->>jkk c_Ç ƍ`]zuaiyǏXjy?bt£G=z:[IGq_̆[ Cx.H$pLT̿`Spd`'hI~$P"ר)"M(t#,AN4VtAӊýPs <Bni{:!]N I޽;w^z}MMMgXvuN[m3DLOO7Q.mEhhBK$CEP@*DCL!7pM(6gǧ($dlfQ4gLuK?l'Db)J EQ(Y>AYAU755꯫FuuˀGVϞ&޽h>CK@ٳTtDM8?cVpMw P(nv<tҨQo&v3;\EQBgQ,(BKI+ul"(?2"`X,k@ HZ)h(K-!Yr BBKJ.,GEٗU"yW/c&Hxx˶m;xy?^XLL׬Y曏B1ï^J4l0GqvW乶"jzȑJg!a'O~h8PPе!>~nJ :IOs`$#!-!Q'Hlr`;;UoT%BSQ5ouhE]:V Y3fNOOfs8 {>ΊDWn۶-55?}t=<<ַE7gÄmE cP__xjBn:|q'''޽{VFA9.B;:V(r|ĈYЖ I EIW(@L۷T@*6QHxҸ>qîm hW'Rs= NH'ֈeZ)K9!zHyaai6HTmG]^k6~xۧO%LG}F$dlիW}fLVh\>VVVN>SRR Ɯ9slkEPI=#F8B  GEH@5N#g"#'>t8 qe,G #ˑرGrB`H&JO4pV![1fyZ''իW3`iӦ}gwQrÆ xɒ%ȊZlSqw+Rf̘J:zxxwuuD"2djjCd moP$r@..6=\ bN#f!$S A,ڑ]+9s_Hi%`I&̑L=$irb jD/_jM_̴'gUWW럿|Ν;KKKqwqqy^yߤR3L]?+ol6{ѢE+VqC>)Si%4l"u*Ld/ IDATAI3s$6Q:|r1!p)ZZ3{`,?=+V$~ۜ2-44/+dMM L9ZV!SY 1K\ϐ!S?d޿qZߊVb#L89t+߬ _---~)a \.ݻ<@80m43'aNv1ȰG)))111:bbb.]`vKAn0w?x.\E=&5LT*JR vLX@sD$&sv%Q(l6[0H./ς6D%<ߵk7t-Ls~^ەluug0zڵŗ/ݳGѸO }f׮Gݽ>|"g)Vmym^=~*\o$B1/OQ_^e5́/#rv~ "in88|D|?6r.Xm\Is\"6cF&sBjZRGiʶm<}{Ƿl8:NfQC^HLRvݺW4/OHZ8O#&<1Y+B`VVUUN>g6mZCCv夤wr^xaJrݻw MMM]hQntx/ڵ Zh g5:7>t@Ac)>}tKz 3IMݓ۴i ct@{Vc8.x{uep=`ѢEL J80`@olbeP21h? =RP)_ݻ/'woN^^5ee}޽8A{GEe;aiӼgho7YkkkSIGx1uluvϞ3v4wnqf&Us]]՝;]'{Wa$Jψm۾4)` Lo}5G P̘&66n3,EQR^(4aBNhOZw i#mnŞ62&ӳ_ OHHprrzw׬YںrJ޽jժ^z[֭[?Z7oTTTΟ?dyאܻ[TTLzAt9uuZgQqJ,꫽;v vqdΤ 10 J&o- -d6C{8sӹ3A{+:& uBSqFFce@!8NNNPl, ,E_8t@FGaNۣwo n|4%t}7k1cȫZ&uϞ+Wp}+dȘR@Ht q}g|C{~M7(ܱi,~8qDNNN~~C.\o߾( Z[[ F޽{j͛7Q! >b,hƌ+3̙3{"gΤSee5hQZ)X,Bg`cNp3!9&&h ^BFh4**Rcc}KX,n28u$#fg8VVVh+pTg483&:v56pɔ:KSYR":M[AJ7yxi<`0wvj[xŻv11l(o?Mim! *ݿ_oBrHI_$+8:U2$޽:/׮ݠ|<#xMwrry`=;xDg`܌wƪ/LjP8é4?'88;%/,f+0FuiJ޳V_~+UÃaw]ӹR[kv6\܉~ШT3Ҋ`W0kgwG͞İEEuu11dE}UU.5y.0ˊ,[͛VGGG2dȮ]Ν;loo'Ju,3nܸ'NݸqCTQ*h8ZA>TT@wNNE{}dZ25|ii9j' :1ϛ`26iٲ/~d3(wG\E<\za0<ޠ2pW??7?ܺ%rv~sF r># gJuhݺJT9cϿrXl%ejɉ|V߰aJ1gDW(dq2/دMG6nbX&5i D5 t<#|N CEvXݗYHOO/ҲiӦׯ`0|v;vhnn_/_{5y!C?]E_x1)) }UG"X+?l׀# 1L] >Y֭[4nji(PXx*GW J66~d2i )Gs &Du\t<#܌8 qƘ"&:bͩ^AAD"v6uTh T[[;|DP|'u!(( S`+'\J~6JG.+Ϋ75/UrJPDz1 S&$));IFihRtr Apz 6!kBr|\sAh/R:4cl+?v-,gppЄ'jk_2*8Z0%~3|+:'H'Ν;=D(//_~G}}+$''ϙ3V(*TJ 8N@.M#w,4{Πp;(9;5c=2u|$Lld3|Yy88 7mެVo0 +*f4ll??[Vq}Nb1~Nd۶m.] 蒻;:4hw}g[U=nP^t5NfFFP_odsI8\nTX,y~8~11<ٞz믻?mΝ\p3kdbج5kEx:?ϵϟo&$<ܩG";2ƘL MW{ P(qBi (26dv%]ThcfM{?Vl6mEhbQ!ZmInIIbs88A|D-3<1qxbЈ"AAA\._E1Z[[ *,, ƶx֎+bϻy.CN@MdG m}YYٞwT ,>~.|hcQV}v5ujKV,$S#W-><آhh<]b. A[)C.,zdu"?$YGLH%CP* aPjwD2 my3uf_HKyLƸ`[>tnEhhhh"w~5 :Aig MEe]w,b:# sKffY 44444IdΠyV ߣG{X,ߨu+Wz?MCRdxrrΝsN~:h4wׯ_XWMCcK؂fD@ K\.^,777?^R[4vѣGgΜV9sss{~k׮͙3'<< BB-8v={0~L2Y>lLYV\a0l6{̘1&MB+:d'ON0ИF.rt,ȹZ(++۶m۶m0 ׯuܭscQQ 0 ð'ٳd2Z'$k%!!!hB ðݻnnn3gos466nڴ͛` koIjC Yx1yE|pppSSSMMk~_~___ggxxcE%̙3GVƶx{{4L|GGJ45viR)`0dI-`2D **/dz˰_~%11U"455!W@ zׯod2ZZZ޽< b񌖓￿ddEN>M]ٳgOeeŋ?jԨzӦMLD\\ŋCCC źu8.Ibgg7c ݺu|6-!97P(.1,KT[hhhhe !Nj @ 6-MK@B#fA۸}mEhhhhYHB]aȉ"'Ol@Gc!1k]$##ÚێHzj6lAys0ꫯ d@(9^#c2\CRXx N,L.殮) IDAT/_̒6'--iiy6(--5x橿$<<`&'4K|qD x|RA .\U<xzbVVbMmAߺu+,X9PL"AQ{F9< !9JR @11Ful]o֨Q̙Sݻhh$8hhlȰa,Y\\X0u愄'ݻի rwY1ݻw[~h\&RSSܹ/~G޹s , ic9a9..,@j4JV@&X :X`EeF3 ,&! i̱"Ecjmm(|~cccUUM&el j4nkw`,1 yM"$dhuhПX ,Շ3WVvX`EPRZ_tX,XDaDј1+f!իܻwjkk%=JaiiiL,%e.Bch VժArsvwX`EBSRR^zw?*]vФs9yŒ9ٳׯz*̞=%ST8R1h[Eo;T* :' |ڵky<֭[Qv { ͳEHII:tg}hѢuPcPPB!S( \"iJ[U*JRjJR) .LT*@kE k.gϞ5]IY|<,ݻwjjjGt[F.;$dli%JR2 ȩ,%d2={\+t7$q44VC%gH+tD ALzKUIvHUg=NlT*j4Lu(yh+BALˢMV' ХFC EwqcHB@Y(~-"fE:qiwG=`iii@LL"/V].6s*--beeg{kB"4444<$e#[BԋApz FN̷ڊ<02, jBbͲ"޵B4 i >[_51ECcQ׬iߊ{7$$ihBAdcFɉV֞?c鑞=ڱ"Zd0lqQQ+*cw Z&lFuv7z;X֊b֣G=L=@.'u: 8yj߸!pܻKp᾽{7mnhxZ_ a|kqr+D=3O iߊs;G ̞=[`w}饆ʴ,'7o[MVVA^8gYVphvzzw//Gǒ"YnnUUiiiz`|Jn*..f!!ǍsH$|̘rsc_~9b JjZv iO=z׵k !4j5f{z~yKnܹsڀ·<=/f`8;W޺EV~u6vPgW!qQ{ΕWk'>ht,Ujn5fy\r9!!,d2?\778np\;cf]ᄶ_Pk {ロQW4;Vv=$xoxy{<1773g*)x+l>qB,qE" B>_(FF*/6] sU~\h011=V6558:Be_R'N׳X3gJ'r.\hΝs.\;[ xkkDRBjj II^cCիW=|P(XB!X,W;n%"X ajin~V_T==ې{ݻ'6m\rLEbO@@AAA_ ©Ӧ[[Kdm˦M`mm-jkkkZ?VVB痔<)*H$lu4uHO(REdx<#,g)@qq1QVފ)/Ͷi))"KAkkkAU @x0{ohǰ.Yx6Msӏ,yfIɃŊ+-[HjjSBի9R]]m۶;v'0 x6mb0t9x𠑑`&&&/x_|T7h"@"Yzy_t)vR`k §UU2u<.SW"|JFFff.]3 k3-<={88}fٳgb2j A^t-Xȑ#1gDmm_1DY,>jFCf ҙgm޶722 #b4NN@,&H5lvs">niP/)eBob .ԩUGuuuB֌3oi  4}}I\Ԟ$HB-Ee s |ܧq>`p8iɿHZ$FFFb8,,,66&Hxu|( zC&b4ňINNnhh@- pCToX|c@p9laaڣ;54佺s>$[ֆ4ii'Ntvu*).W"AbeftǦN<.WZ pD]MF|-vz Z3899;ICCo#- C6λRNtlҳg .ɿ 7* и۫ vB0`0ӏw5)yݶmG|ܸqx+Wd2͜9388xɒ%#FXxl%*lh~,,,֯_AU_"p.4x^E^6߃fvߍqvBO6t&HQ(k׮)222223)3f̘1èQQ ydŅ_~%1o] A ")(XR'ܐ[n9)#ԩS'H\!{{RV%PQQН|Jhryۑij pCB:8N.lxHj[TTpX_nw%7NNNǎ#133Íִ_#9_p?q/z ۼ \(oc] B7(R qy==skkSssq_R4ۈࠠliE~'ѣ{eD_Fn??zbc#1o0L3F\3W Sh11 "4"#G@ @L*sȨKD$11 *+s;è\6 L~^}Q&yyE,V;RZ$%O?T]vZMMd"7/pt LM=]@ܰ_=F.Eeu7Ge;3>A3.2ȫxUzW|L|@u- 4nk%RP0j455,Y7#zW0 sp*+;f+qo")"42x`wd2$̙3JhEqz(*C43FaBC?2 thKM=nɗ_+ P V ܻË˔)q^|@O*dyxzyymٲEE j4Ah脻w *j7:5_چi4: w$a%%< gp|-*jvzqcc>]^h}Fokkw/KžM@PPqWMEBpcbG⒥Eh|> C:2@C4 utc3Y AAc$x'HHi8nsQYkOp$njnnM-RaaaɦMϟ{膇17GDDEV*ZzzkE Mndd`P4==8; r77,5 WWUMd2|D7=:&%*0LhoJ6gbgf07O`0 &ξ@T"<:(4dDDL{ :*4=bTWhBiiv[3@*^Ո2KTZahhᰈ%'D鲁f""ݨZ$dΝ;JJJmFTs555 ;vlÆ eeevvv/^?x_ww۷:ÇQQQ---&L8z3H+V\rʔ) wޗ.]277VDow&ӀC  d0@yy&ϧ< ~>:4>*jիԌ^A7e 4f(D$&SǹH` LE%6T >lؼ4o.ڃQ2e2UΨHZQI3 /O"nZDT,QzqD݌S:5r%пw)qٹsΝ;MMMl2gbC IDAT7oΜ9y޽ b8##cΜ9f͚>}_|1f<pffݻ=zر ٳg^^^ׯ8qիW |UN4?^m``(#"Bop8 uL&Ar>Z@\ |CP\T{JJq/Yt:;tɛ3LXVZAO߿s CBS M#$jGjO3(~f DU/Q~~b{f R ׯ._|ҤI4mٲe~~~uuu+W?~tttbbX,޴i=>>;v1H$ܹ1113glllrJUUĉ- _~C 1337vHR!? 9!T*M_@(`΀a P`0*40,"bTvKE"M߾=H d|`0>qn=p^꫗]j0,HQL4+$ CbB\ "HI(=t:d~ިa11/I )-tTaOp%j4a!G6 :S"\X"TJ}wy督Gfff>}iݺuהTC?/<={jX$ 0r˗/߸q C"\"QWZpY&_B*DOOE⓾}}(P8h+ ӏ͜оĔ=[(B"*fwt ,//B AJQ:q@g^^QQF4h:mЄZA s:L.@X 1R@FӹTZf$$썉Y$A*B0U4 W d2 mt[ ^=yWEBአ s{{o2c&}yDDBa\~VVYuPSxիѳJJJHHHii[,,,*͛L7a_5k7nxgg纺}cj``PRRrqц2J@j|  fF&ST T*U ^en+"MãU;|%!srk4-dɳ0&ϣh<3\'`ðJH$DBȥ4I"/2lؼwLMx<Ǔ2B q$2DH TڣG/=<(Bh .L&S(tc3`u%%EOjQ՛7oF.\}ǩTjxx-[0 kkk[f ͏9aÆŋFGG8p`ӦMcƌ1338pqqq[l>}={\\\v]VVFF)L+WxR-|[#K(bVZ :0HXP(T* `ٷP**jKR^d+Q> >RW j DQdžJ#,he\&闈 ޥ_>pA()FFw&x@g2>Kt:Ays@qY?D.QKh1@)g!sۚҋ@< Vp΄%-yN.UQP{-"$ɵo߇a-:'G-gϞ2H={ٳozXdɒ%Kׯ_'{2LyB"""bٳgSN]M%"B],P4R)DCA3.ˊswDL}A?D"D"1J L  &/ב"ҝ:3E Y a2 2hT*a;*#<955]eXh$r>/ y<*BG&c!Q4 f!:#h(3L{{3e6 W(׮ 3505}RT) "(#Þp!Lx3;%kLGvMObUh3/BdXLMҺ n`[!T*L~T@Q(T|↏ AAwiU ; T (hB-H?FGj1B~moB ., ),),̉[ZSRRCt s:HrMロ$E|c[lmoܨþHLZt$\SSʴM'gϞR4"QQrF:gM=\W!d2IR0 I@u.2W! J |*̑YT$. iwv)TZ ^1O[m@)W!@%"@Xge=D"D" F-_NASh˖ݽ|o}3t4cV@Z$5c!3X,)bHH"dl{y şe.vuX3 bRFFJJn CBT*D"ױA0 ;Bkk4c.J@<:#f:U"G@bii1:iohhpg_4bx9s\裏 %S^?tߒ%QQ J}UɄV(gڊP($)*I$@|>B M 9.. U΃EA2UDN|TZ 2"ϡ *cBSxfZlZa$IN-d!"eeh344GQF48⚛< x,>~ \kgg'_[/~5R!yl6KOq\0 PP( P 0rfXvk`"Y *z>LB2,WxY=^H1x5ZBLQWi>gH$x Fn]""y&Bp!1LPqN0%} r &.r 1iD.ƠP(R\֬"SEb[QD"b6_Th8j1ReK ;??1B脍WfЎaHHN@[[+cJ~ Z" B!NKh|r\n2ÊՈ9 a]7j.B T*NM5Y\ |>P( )r4tr患Oa%%7__?ɺE|>a\5B^t) 8}4BtpnjL"Pak`")l6BXmyG'e+"s)*%6P6Pg#N:5A$}\Eą`x: %6lb~HWwr~ mx(oп EE=~,꥕"U Khm %*FEqG(P(TvPd_ъnk2[㙧sQQy'%'bbbF a L& B>_qpU*wK@WASPk׮ ^jL~qmmZZD,b$=@V$\PP,XI@("$'۟4k\̜9۫F.\μy ..fO8qԨQ uuuK,ٵkWKKP(5kSSSO:% W^Mrĉ +++H|ȑX??9shE884YѪE1w?R_ᰡ0]^^v7 Zg -PT*hFΆ~jkkЄ/2h4t[\ЀKǷCh_BB>U"ydf鰫4d(jFytc3 hhI۷(*Qh\"xO 8t:p; (--EC9eeei4Zll͛7CCC7lؠr.\B>}oOLLtss[`p8?c޽4СC.\CǗ&%%uBFDLCW}*KX4]?AҐ 6*; L:k)ǎJV t:x\ r"Z[ҎPn_#UH򄆞&SX5a|_1WQ6 ٳx0ޤ!c Z0Iz_]3rHzj M@QZZڭ[$mT3F144zF\<-,q\fE [!o $^Q%46atT;fPӘQ6o-!OBbE\KUwrl/-͐qu GsnzY¡F߾}v}رЅ JG\TUUmذC¹wA1\<.M6ڵkd2~ҥNNNܹsbqDDDHHNNNt}kEEER4m/^r%L&1E\\\ gjjn?o̙K,ٴiӯ]ա-4WV-VhoПc`wu7v>/1`}0z[[kB^& Z0  8";|>xj9@^ҼP AQh@[ǔ$V!K"j3f DhG]8:4(Wœit j/gɂf>wٽ{+W.]r5oood$>4iĖͬYGtq$^7nܸqzzz۶mHs%)ݴiӦM811? 5*0CGC#*}5r};7H(gj误o ^`DchF. ] W!HhU#1j\5 U;j:h2J+~^}@geY' +3`X666| qqq999ZƏ߻w]v_D_<11t;9Zu'bw< ;/JHh$  C^!2BKb.kҌpMLQK˨a~\mW &= [fJ2fdy ޅ"S!@k1}gH궁x2~z{]zBEtOMY C&ϝ;WWWgaa?|:NnݺB_l"x\24hP{hN^D˻D)ΨOmu:Х$^9'>SԲ2<̣Zx\gPjkkԙS׮] wwꁸ5[;9-3מ?E^iGR(qcDEEȄH(\dno/m\\flڤo"1#Չ˃R~ BL^^*(HR_oѢOãk("¸~;}^o-M) I h FL!(FB#*NX[(3[?M:c%ڂҋ51*}E:sJ44"^34lB-f_ghEBb_92RE\)* $$:sceG,X,1tFDyܚ hm\@Eb8jIh=jzo\U>L*V4b1R%%R i8~YwXؔdrÇM55ZD-Aڊ1/ZbU||E$FI y^Ɍ9s.5hƌpˇ:3e߾Ow}s@@D"0Sw0I\ZZ LMololx~ޙxJ{D,/r?b#yssmEBǍLM :ZFKQīali9v͝; D춶?ߟb xY|C;'++.fbz'YP&DĔLvf#%e`f1uZh2 ((`55MrJ :-j׮ 3505}RTlAcb~jꂟ~۶1 \3f+R-^?}⪳gD:i{gg/ٿ_rH$BIDAT*ȰjLHWPP߼[~ %槥ɓ;wZ88VVf[ܱcT Kڳ3g)_TT$''Oꛘ[_{QV6}_|q,>+A1\1nժTi.2((x_ fvvrydǪsH[N%aiooonf57K;|xӧ ~!ȑˇI\ЈP\q U"75#K0?f+"MD))qǎ[bېg=mk{]X,7zEjAӦ&%{l޽kkLll"ѕ#Goߦh-UU ږZ|7dfe!7Z_ofk;0 gqǎUܻWsrݺY NL`>)j޻h^dgv, _Fpt'_ߦj¹Ȥ*a_$&X<'p)4s{{3<7 >BS\qnlmY%ˋil\akCC}ccu /?(q0^K(..^x_e``0}N%2UR[D-jn~c$D|9qu喺¿*,=tL]X6"Hjg(4\e^ܗ+:HqHb$2ٹO>}]\Ҏ~X5pyhoRrAPxy+.fPP |i.-eKou $/udֻb!k\"d4tج?h/^#U[~\<@m9,X$b@Cfvv!-hKxaÆUVV~W۷ohS$C=5ٟ̿|9hĈ/HL\lngW<^nr˗ffoOPڛ"/lt/Û7F_ ht~OB>_d%VSQc߻gbm-/?W4VWSb^AA^mklV'~*#QdmA\.\.+HKCp +EӋg)Sd+ܤ$@S\rTZ"L"#23+<&-Ԃs>zFF)?, % |>%e؂aơ7D㏃+Vtuo!^K`7c'|}o]>~I@bBM-By_CeϞc>d…$2Dr=1-*ժgRQ}T:"kF_4r˞yB"љGmdi..6..O8[b()w%b2Fgh(V[ ȯ;vߺ2lU i׀ޓK:aIC___q x8::~SSӋ/lll} @0vO>nccc:Ʀ|63tG--PDȿbx)llٳ΋r?8hx<)6wP w?pyF[[G:nݢ{`*B-vy@4AAAI{{{EEEmm-1cVV֧~wߡ*l߾}sٿ?XϟKkg<2O?UA`pF:.Tm3ƭo߷BH(3Au*6TB4;H!0z?K󍅓K^w.FR05pҤ溺w&Nd P~R(d JEFNsumm,˷B&PĘҿ*СCҾ[t'ʜ9sT?,! ;"1t.yfƠR*o?GsN@hN2aXógU9IIHڳgĢEvvֆK[[' ( Ò-Zn:?xӦMg@;/SKp::1h4B0>0N~_Ycjc/z3ׯ~,2LPfmr,ufm{U1<<<\_y> N'j]:Yʵás8ݐk`s8N>kf:hVλќ􌍷sԺN2{"B:zppҟ:dqf5"ps'm렃~sP}}%%fTjUEZO5S"qWE"SlmOVTHܐ55#7˗_kvtA l:Ti2yW ]&[Հ{g*EtAtAwv]tAmBEtAt:-:蠃X,u[|MyAtm]AtAա[AtAs贈:蠃CEtAt:-:蠃)|FK2xMy  >i޺*qt!HHH^ 2.E$mb+Z޵ H݂:BצkOuBQUUS^tu:th@W:ִqQAp_ u\\\޽͛-Zg}feeVAe$ KYx\lHHtYKKKmfxCҲo߾fWWiӦׯ r'kr85k֖-[o;vPի{d͘&''D222۷E,,,4 ۅcǎeddb9vםPnTVVܹ<O>醶t҂>3 P]^_ 43Ǐ_WW.\¼y󊋋Ўf; l?O>qpphmm-((hhhJf"&&&>>hmmݷo_ߎ7s,zvZHz_?t)G^;/^`0f͚rnBP^w""hժUϟ?ohhjjj-UPPp\\|`k.meܼΝ;qqqNSC@@*о; K6}> y{{}%$$aÆ-^D"߿jjjkk ++/?)ӧOM6jԨ88pGHHiRR҇~ҥKcƌ! X,>wŋ b3g.^XSScaa1q_uYddd߿F9;;[СCnsѣG>NG899?IAΥsbmm@Pqqq</##EGG㕘~ĉ .bIClݭBqvek%O:OY=B&H,~׳.Wv<رL&޽[__1bjD(Sm@[Wb>N=z C?~zk׮Ev@UU՞={y<ٳN>gϞcƞ={~2e=zI&-\ɓ'"իʣhUWWݻ777&>>ٳgw>>>L!L4)**ŋ&Mjnn.** ߿L===.]󍍍=uD:uꔼ'*..,k̙[n}WZ|Θ1ɓ'f7oԩSH"K'Nطo_jjjSSW_}ejj-B #""$ZBbbرcwUQQqF(صk׍7֬YӣG .Zvvvx=766CO$NPg͚ֆ "Ƀ?>66ϯѣGÇҖ/_͛73hҲnݺٳg2D$HիW755iC,WUUݼy)/2sf͚O.\DP:;;8qbտ+>-d*@4I{h/+dͣ\4rNh2,+33sܹ A066N,Nm_/>qܵkמ>}޽{ٵkWϞ=ի)))˖-pww8pÇW^>}޽{d CBBʕ+___&>s6{5#GZ[[744WG"O:"=#Czg͍'߷oҔrvvnmmݽ{H"RRRhSSS?~|޽ҝ;wN>mbb2gΜ>fA}[L&^:++kԨQ={ <<ŋ,$&&J1"8Ι3g.\emmݫW#F=}+,--'L||~xxMdd$a'q!C̘1/@\fN *888""D"ѣ###CBB]]]WZU]]c_u`F5/ >w'U 1_OH,?|ӵϟ B)ԩ6E+Etz||?3oڴ ˗2dǎϟ/)):kkm۶dt+V`2=rd2O"QQQ7nܸz .4hFvL{ƿxⅩ} iiihɓ'oNKK3f믿={yyyxxݻi45jرc%K4+ laÆ-\p˖- %%%C 믿dsڴi鍍#F@"Kgd2{ѳg"Pqpp@.R9uuud2W\ihhmۖ.a@hhAMMMnnnzz:t,gɣO >,//=z42fiiBx۷_~4%j & P|*MgnB͛5sh&MڳgѣG'NH@bV,+,# //KDLL̖-[ZZZ嬂zر=ztDo߿sʕ_~e۶m>>>$`0ТGYYٮ]l٢82s"s)R+⿈P(Ozj3332%%ZkA/oݲg]֖BkLDAЊ"</;;;$$յͯRlD"L4ӧ۷O>MRi^:4mРAfmm%P^^p BgϞK.S!tRbbC||E"SiJs|1JKg ðo>uTFFFrry:^s\E䥡h';Ǘ}}}|ɓ'}}}d-[LMM%6EpDDDر#55511 GGG:ggg'>33sĉA||||||f͚p+WP(L>}ʕ%%%nnnJs.y"( x񢡡aɨ=yMzۤMs6ikkQ[PڦLIC0Ћ/98nii144$JD?x}:<Vͫ-[fnn~52Uз '##6EpDEEO>C")c/^X`'Op ;!!ͭ>;;x7n(TO) iffǎ5j%sαc|}}Lfuu5"</..wݻ7N/))9|szzzÇ߷o݅ ˑtl^^^ȭc2C>|u*r`0&Lg:Ñ#G2)SxHVu#$6Ե+WҥK/^xSrgϞ;w8UP2ۀa0SN)..rSLQLdn߾}w-**Vtwwchi"~~~Hn(COOoǎ{?lmm̘L;ݛu5333???bb{  dJPϩSVTT<|(88QYXXϳlCCØ\ԵET{nt(,,죏>R%K ƍ\\\6oLt (**B tѣGқ"8bbb.^CܢSǜ9s < ###R |soN{%K F~~3gZ[[FǏaÆS  <}%0qĭ[Ν;Z^DEAAӿ⋝;wA~9>,i8d^LLa)y=B3+L_Bj !ԚzMT({wjMʅ7~m{]һu5 7/?^P\/+Z˲u=\ں[ ѫ! HCm=|u|~@(q`]|tT8\XIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-voice.png000066400000000000000000003551421247673406200253030ustar00rootroot00000000000000PNG  IHDRlឋ pHYs+ IDATxg@WA:6Va!by41X[11ט$4c,I4MMa *HQAvmpu2.˺ ޹s;8̹瞃577Ã̙3ݒ00000000s`Fa``````xX`[NHH1%--mӦM6mnAl#.lpPG|ɽ"--'n)e̙3gΤX=E9"0BPlp]vO;b`xav0\u.Fa``````xX`BТPQ^jՌfXV[nnn0춍SLʪ*ܗMMM&MBwދ/V*/mܸ1==N$^t'N|W_RZZjlj>` 6 o|k4,8p Pn2;AAA~yMMͥKXɔ,*}:ٳ,>|8a$:7N]hĉ6}`cĉ|>ѫWgy&44ʉ)))\.+%d`#|Mjkk------* jll?G ,k͚5}˭Ana4  x; ٳg8qÿ/x/z$|GDDL0A9rV t8]x'O,^~o\]]ywy'33>8ydKK qss7n\bb" 8D" >}zPPh*4hҥӯ_zdJHPaܹsl^^^#F6mxxxh4%'On:;eFC!铔ԧO6U?Yzu@@AϫAAA-C穪bXfYף^^TVV $I8L& &>oqѨ\. BBBŝ BJU[[{a4%,[L&[vyfHNNVT:hȑ/niiYpaeel |Wj￟b|}}?SlQz?w֭[s1Lt0%%e˖-uuu^^^/B||<*_paAA#:^XO2^z5""߿`0ܹ399l6|FSZZ_ggg&$$vx,ŋQf?ߚ5k EMMͼynJ+mO?ƍ1c / QF1JC"Hh4:;;y!R ?ST"_R}Ƿm套^ڶm,ooEoܸqÆ ^tt޽{jkk~ir\\ݛ=rȜm۶z[ vR$IAΝ;+xѴgΜg}vȐ!ׯݻ7?䓱gΜH__ߒݻwڵ{xx'NhjjPOŽ;?hɡ0lƌ`ܹ&l6wN@@7/..&!!!88dƌC IOO_fS"\.=rsskkk[n݄ E4VXY2ϝ;jWXK/\[84۷o-:tPQQ899 <f[nճZV*:ǞK^^^`` Iٽ{ D"ӧ?~\.BX^^N߿4n0Z[[b1ٹF$V?>=Fٷo_AAAp̘1}]ff!C(_8uϞ=F vRh(++ Kwݯ_EP{(bcclٲyT*~|* trrZv-a`v}Y{jr\WmQ*WnIKKKee@ :.''O>w$ŋرâ꣏>p8QQQ*#GܳgORR9RXX4n8Z}ĉu֩T*///}uΝl6;>>G˳(0lժU}]zzMrȑ# DUz7l{yy-_U*Uzzmapvv)--:lA>ѱF#GT r|OOOǝryuuZFlNBE"xgggj^?~PyYYY[[[mmK{|2;;;566VWW?P=h+rT*MKKslX}g!jjjiwol!!!9Z]rW_}Jd@@O0`={^{5'''$?ᆪz"64{v%?`H$yHlnnT*X,3ge2REnJ1zY󕕕r<..^rJRo,8p zQ @p… ZS?~S%*՚&112LRٳ: М7hagQQQfuu;n݊=b_~566>@ӡFҠP( lZصkx_WEEl.))N^ZZZzOSSS||<;v,Sڿ(//~ŋF"DFFN6/^{n- SSS] sI&0jVu֑#G,gMLLtT=C}Qp6v*X~"gtl2Vkk_b8a>>>fK$NK/d^{N5-JALѣG{yyɓ'ׯO2:344TTrjs^7 G.{zzs8aÆꪪ*>ۻwo z r|Q<"Pƌc@0}^t˥?H8~9ȑ#+V0vOzh6Q h:b PZZڐ!C;/**JVIðRL[~ y0`fu*}l۷'|rF[ou?<>>^ L2EVO:5//ҥK2lÇRIѳjժe˖UUU}T̡Co)))>>}^Z$-]jy{IŠ;ZI&͟?okk+))Aܭ"N*@~بP(fРAIIIZ6++߿(pЖ=8}48p$I$YPPStb``xpM-P鵵;'ޫW/RRǺsέYd2%$$̙3-֮_ϟ?[l/r{w?gF${UT-=i Im͘={ȑ#,YTeT(Jfzvё3ً{MDDFپ}Jp8& {(;cyUV}(.~fff?ϟX VJ5r˗/ڵ>}zuuكUG]]#'DGshjjڽ{g}f #^ =D&NꫯΝ:uj``kjkkq饗Kaa/$&&}]݅ᚐSpޣP(K$888,,с{핞sgBBߓ%MF7t/...Z@1;/jU:RABw=NlxP=Z UP()SPLG/7nZ4a)Xubhmm`رL  =Rt޽+WDۦ>%'ODq Ŕ)S,Ƭh?w@xx|%'u,Pwiμ(t2wBnpȑ??G?-B30'8XaXyyyO566V:=[`z$B555xmq8ǿ=ЯN0 E6mڴyf*G}d2y睥Kzyy577_tI'&&Μ9i$ٳyʔ)>hÃVkO zP100܇ 6o9sL||<hSN-]ݿoo,YO6 mvy^z? hß~?CImmm=W^c ,h4z~b֢EVXh,XPVV֑Ah{iiiBzϡCrrr D2~ǧ9͛7{Gr. ;"٘1cvU__ߧOwwwҥKRT& .{i*N%o/bVZeQѣͯ f4z2,..UJ(RTA_Pmii9<=b*1c/7og9<{ЫW˗/0}G= ,l imkF{|֭cƌvڎ;PsoݺU DGG K. &@VV?|r*@iih$B( ޟ| 3??DsP/sεɓo w" è. -pv8H8&%XaXӏoۍaXIu1˥_f$IyNݍFӝ ii6VֹK> ĝ^ "##ais#LHJJR/"IIISNE>~ժU|L&2B+*SLqrr|ʕ+Cݺu+.//Gy-7nOڟ~{.|{n00 @ӉH,G&l8'| ՘1;|$ $`&f1 3N+xz|/4z63ͦcvE:qɝrP AlzUG}@;#FHf.\p'L <1bĈvsb6z)tb,X`2_~eԩӧOZzuvv~aaǏ۷Ɵzwygl6ٶ$*" ȑ#O>/rرsx< t3@Ē%KH QMDCu a3\O/t2,\?zpζ]6#pLJo|$dɒ+WfMmC=e%PW IDATq}(B.u!I59[w[$I{ZZ[M,.'db,Ч6.ϳSH̉$ɖ0sD€Qm}IJe:}mII6mtj/^x…s:OIIzfoܸY*7o޼y5GtFS[k{ dΜ9[oeq{gQbqyRIKKMgΜ٣1/ӭף# ͭb[v񸸸pOCKZ䕚u-817촦Rga7͕& JN[ y%Ah_/wvIG$6 Z?f gOjZR z{s\DKu 6cQ"o[ š֫ubQ7> j׵m K %Uc 2p=Mv*,,lii߿ĉmWFѩi_(icϟ6k,k۱{XfΜ٣Dk`j͹bk|A^,'K4LH=ǃqa֍WĘcO<%J,X۟Z<=G]tथmڴt/rNa`nmzp7-s$IdAy 7{jH$p8~~~f ~~99$I.4q<$$fI$)K\ z=1q ]nOpn9f$B9$ B܌xCMH$E Cj@*u(/6>Q6UU8SڕAp̮Ǧ7Em(3qح-mc,g < 'NXSSC{2223~ ^x8Fa"##&V3V9+=L&N0!7Yb4W莟G^<϶d^r$IH8/,՗V|..䳤b^\_\\~D7eRU , my r8)_&K$Hβƶ r|uCCm}=@ JPnC$i&ɍ[p.ngz|||H@oQq'< III T0EEt1t-$A#d1:Nb1QU!u=hX67/g6{ᆱ7x\4@B.g@ r8M ˖Pm@TJER8RC#d>!WK/:6$)J{99{('>klyW?KLj\>?ؗڹ`ĉ_}U^^СC;zLvOhiiP(0lǎ'5t{lBBRSq@4=jMw<QL 3pܕ`o;clp] M, pp!rM:Bo`91N7pg8Wa<Ot ) W^ὣҎHNRilTt[cطoVѫ/dz%Y.}]( Y8G$p:$?C1"J+NZo+$[Dޮn8+Fh ^R^~=a| &3b4mǀpb+pr=zj6!ǁ,wTkHvmFDD@Z P*XV_rGFF Bt\YYYVV~~~7D^ a6644\zC/J777cFofSNj `4kkk+++Q@3PN"evcu=Ѩ ;yC `; S% {hOy~*Rou> ݀xfR 1l>oܧEDZQ#:_^^ڇU__,OP"t"==k$qСKi3p㸳ܹsl^^^III.^3g3*HM 1cFTTՈorrѣQ5z/|rS.ϙ3g߾}T &LG{Acbb̙C0#H’CBB0 Bx駩 lpm%_0sdƄ|0`45h>!"d& F©9ƪ:;YZXFg/Cٚ_ )ŷLA˷ 21up*UM=5e -F{ΞlJ 1*[o1rt$568^)r#EsAv~{ |!fBaP`lLOM! Çg={luuO>\TT_͛7c7=)) ֡/)yC ۶]>F Rx Be$I^y}vR3XA64>]{*WFUBoU*?F ȸ_V_[ф;\WWd!X,dZ BpwJKK{hjj4i̘1c֬Y~_8PUUgi&lvssk.\Krʕ+FX4JKK [60SNq|Ϟ=nnn bl6o߾=8^VVvIN9l0z28E ˕u+/؇=͖JEߥ藘ZQ{2RHp8EHyXw$$ /ߟc7bEBx/OO?*Ew OLOOϊLNh<<Kܹs ˋ}h;e.uve%+-ͧs8n \,z4 w3ѕ=Ur9?)WhhJz#dع33dO7.86'"[qL& 2vkzp>|ZI:3PP!"33e VTT&Ew `W&t:Je4-x999SSS'M[?xs|MRXOjKKK+**Tm' 055)22JKK/ EKW#NZDDDtttaa!A͡ΕbOK 2K"tsa4iii;"22^6`\̚5c.uw_zaTJNNX//˫Cr9ʕE UV-Xxm6X@u֥6m?33va7r ?=??'wٵk: JJJjYYYnnnn^;vT*6BXt)Rj)U*˗+++Y,VPP7{0 ޮ11@ bʅ q 5RX,Ft/ݎEcp沧p<`ڮ /w;=~8#f++u۷XPkNi%q@5deU^}N{w(ÇQ6cǎ8G}dqnp3ruq8Cv %d$Ѣ e_zuff r  `@e[[[~ *+++**jm3ǧ_ XU@ `}Pù\.ZZt"˫jukk'%H$GBBBߏܪ<==Y,}ePT^ɀ ] )ek@r00D5C6 iY nr ^ov*ouu$>gϞg\o[i9e3wbbJJMM}ÿ;XdIXx{7Cų#/^plgϞMKKۿ?*(++ 6۸<<<~w7Ã0׮];rUl6?gϞd1116{S;v@* dz?YfEEEBBBAAN۹s'aUP( dؾ}-[(Gy[0e;S7?,[E())蔟ߊ+;pa`ް\{Pȑ'͝;X,7zZ8yXxNsgʙ_vZʩ#Si{1NJԩS㏍7FFF=zܹf?#wԦ FeȐ!(6ڷorD#IrԨQ86+;KrVc-LZvرjՕޅ`p8r388XP$$$t$Cyy}Cp##,X[~J0aB'lHAQZ$ :rd䫯Ư[7X, ^ye׭;x`[C8;;˕Je1V vt{Ri{]o͚5ח:KL2eʔ)xܹsεEt8 (ɓQ3ګf{1daDzڑ#G"򶦪yxXFڥp_ݩRtΜ9'Nhll$064x` wb'ߟv$˽|A3Qx.}23) ?ox'I%Vke 46}UŃcbF إt:ƍÆ O~SNQY : g#m#,jׯ_,))AYqz}UUUdd)S6nܨV pss0aE>s9rD(ĐHKK;yT*>wSO=E3x58[`:zx:Saa,Jjk[/N]8|o;gϞ@3aϷoQM:&D,C\t$ɈPx̙Zj+Ǐ . 0URݻw<ܿwF$9cǎ 455EGG],0v" }*65mXYtcËT.uzrmQs r.(<[!C@G(ڙ5s$IZ pң{:$77b)Jш~RjGHHH߾}ڊ5׏;f0PvXz;(СCz`ذa>-Vzs6=uܤ MV)j 5nJ(@eQ:Ve9uG])))`-}2/(b$IZ˗/F;: Fa`FAᚨt%zDI1bDTTԶmېNc>iG$˳ϝ0p ܚ&W__@;V=rykTSTg32bo#87՝;w@sWxyMu ]BCw)9wرʿH$-K=w,ӡsuum.{2 8w\aaauu\(P(SQ%=zȑӧOXuQNi[N+=HP[Z 7gP͖q4Rӳ._[ZpPkhڦzA@Cy9BϝvDEl6ꨡ\źXYa#@hJf3ten.j,`{222zJlNC|gqVA B0ͅVS|T}*FYG}ѣ))) 'd2lذa'OX,:u^OMMr-`~~~6,[NJ]:0r$>Ib, VMLb7:PnQeQQ4s8$QSl6³: BQ[ZJAQuD zFY8MOйg5Q|8~ m7:%e*M B_xCC U$BʶnqjŊ]lٲl)o,$VOX,&n9z4`ݜ\;H(@37F3w{ؾ#"c٢#v:"Ibaޑ͍Z;gD Ү,.pψ=چ IDAT{V\y\i&Trܹ5k֘LܾN?~x!CP+H|駗,Y'111%%Qs_hJ E0mړF>HIлwU˞~M}жA8==RP^κu%9-7Ow,$ɴC,j7e:Bdܜ"#֜PG: ~3:zτ {1*+l^jէ~hѢ~YT*`ƎcJ0̪#ásg22vMB(ӷLLgnRZ+K$[lF ]n6 nKZ-rfnM\ntRM JZQGhjGHaޑV> ]3wT3z8DnyPYYYVV~~~njFSPP`gkl6F /Y P*XVKB0uuueeeAPg^6R܌BS-5xȦؾt:s:ۗ橰e$&&Jׄ0 C4RSkX,d@gn%Gr9`EΡwt֑;R C]QGϨ: JijsYYI&Cg0 \zٳ'NTk]]dAׯ_7|>?00e6L6R*۷oG?+++Q:?@`$T5@ z}CCCvvvCCF*++faaH$Bd2q\X NNNuuu-Ux"ϟ}.kXX8J7A>|8** .\@Ǝ[ZZjD>P'Rz$'>_-r8\Pp\\x=Y,,LcƏ;aI p068vGCB37JtUC //dtGPwzkۑ3wCܨ5f}@؈=۩z(\.`0\r%77wݺuFn6_xD:nܸ'Oưׯ>祗^ыm  vڅ 엄eС&L@Ƙr– FԩSǎ;~xT nnnG3f̰a:ljҤIC aX:.==*?~ܸqÇ{\\\D555Kl\>p:!ceӧOݻ+؉ф4>ߢN>ֆ:B _liiVܳ@J-@*ݜ`?<Q\\ 7CM>#b8 ҥKW>}ztt *++BBAO x 67/..͍G JŋQdΛEvTzcX *jʕv#H}Y Ν[XXX^^^TTt#N@uu? ,,}x=!!!uuu%%%9sf?؛q hƍ?TWW<_yy޽{}}}їCxLqqܟuqZ7 dhFF&@z6Ao0;Gll} 8#YNbHƁ0VLE%hh4>x[U*˗+++Y,VPPJ@a`lP(={B@B[ZZN8,K">>>@"y|T?md$’%"[-Z'Z֭~ZVkVQ[+*"l!=L!If&3wd.73dL}x{ys>z{{{{eknn&bLs*J$SRRM% RTnn^okkB=ju@y\^TT'|ADrrh4nܸ)$͉.J8䞸5$d,V BIqe $I|tvd2_QwzpB4bRfG8W/`MZ8 ps[wJ圽%Z,7u䔼 x[ړ9s*(J7MFYNz@HN %rV*-"?7`ɲeBl B!O89m6e9'CJN `Yop\vӧ)ڸqΝ;뮦&dpi6p˲bàjd^Q[[ۻ\.o="ƅ ***NݻwU`0 LLDw?=477W9uocܓpѸkPRA#zpH`6A|K^67¼;8| I(kwWX%K&O9s҆\._fݻ[[[Ϟ=+KJJRSS VX{/۾==v]1o"agP%}_|!!L/vl60eY XBzyZ}$KHrĂH$ea05"e.fN22Ser&-!*gczv8CpB8AV>, sN-}P!!e%qd0>|E!ItII9@F'%TWsCeB`Á80$I.p eTj4Pjfx!PS 39N ԧ !z}Gc#2Е 2>PZm6oȨ^ qHR bPzjisY 3n>EeeeEEhPGp\VΟߏT> A&;ze;Z^p&CZ_{FHlliA7$E "n@;$!jUd=*B< J ,eUZE๑!m,tb#elzPC8N{>o|X4W$> =!;::=<(.) 50,4 bt͉'NwR_/7|Y?d,V_qܠꊐn_؋ rB"˲miKܵ8]pǕΘbh#-O9t3P:i4hDGZIHL$>V =)M`eee76~(W0$IR$>Yz|>v8yu:{uH 8FnnO> yr ER`O2*@>h GEӧOgۺuoKL20Q٣$.Up,2xGAHӃ̙].'r3ԈApݿfw-NAIX,V"BH ~_?Z4M\R ^Dٳg&fe<D(R90L!Cq@CA#:~0v ű@Fm߁RE,筷ڲe +WD±c^|Ea***֭[7b5?"\5,]t֭0vk]fo[!2en8{ &g<|W^ye+ax|w}WǏ0lڴ~6m׿">{__f$LTpI<wX2\ 99yΜ9 Νۺu+hfƌ_].MGټy~>ba.-t(WBBŝJF 7v 0х|*f!sl(?3 {>++ﯪ5kHVIB dHL.L>]^gِ7nu:]@P 8"Ă ?644 o۶m[|y@DݮP(P+8>yrk577vm/x<lxiNiB(HA=+8*Ijyf͚VIII/L&azY!ď5Q|=H~\P0i$ }y>%%%''.]zHmՈdJopfػww j P&o vqUW ͛^Q=E-Yd۶ms޷o?t]v(eҕǏ@B:dЃ.eٮ@RRJZO>$s1!RkkkOOOAAA' Ơ$HWrѣG;::P*0LUUUuYLA6o,OjtttlܸW_غuO>mju:O<sXe/BQ?bŊO?ݻwO:Uq?3gB!X 5R/-[аGf/--|7u:0$ĂЅf_P_ޚGzO Jd5񹏞pg{:dzQRpitL=U:{5tv{瑞]EG?g!daub~=4ӽsz<f͚9syyy)))-++ 6t0(,,޶m@anʕD+hhPܟ_رcUUUkP d >GiMi IDATx ;[RRRwC-[FQTffB@ |MZ}Oф/9ވyk*͐}"qg;v߳gB1iҤ/?Aiӎ;W\qN=hFQrjޯ< %4-U͚Ĵ۽4S8ƹ=&SSf0$EbyiQzxS-sU}>xD a\9y+E3H{6nsq"E+\_!_!M>!Kn}t`v0bv޽i&hvرvH VH&ƴi?dffn۶-''GՆ/dc:upxwyl>psO+9rd, K.}WVZ%^_~u-X7x;L/4rH1(Ñ8E~UÇ3g=gy{kŊ_Å-)K&-yi٫[n&-89[ﭻ@ƶų1%諂u I*܃HBkSvYFSWʤYIuHs{E9R{XjSX֋dWqu8WLcNos[2 3H8/# {fJa}/c|E 1Ud2xG@ 0!v穧 H P(LBB _M?쳀D.##~K۷oMJ08%dAB{p;8|Q=3 iТ]QLR]z1ss5*Ռ23uzL&x L&Sff&f?;{g}|>GrIy,_wǏc6mZ?ǘMMM6m_qٳgGDQ)px=5F#]HIr$Qx=(淿-( mnڵ?+a9hL_4Op6`? m۶˗cXhtv]P'EXvm]]]ssmݶxb3455d2#{8znj |yfCψA$Da=X]]ɓ|AJ?yݺux4`0!'yټyxJQԒ%Kmv=}xeʔ)rKiiiqqe˒ѣµkZoŕǡvA :!a8`zH Q`xF(q/)S~߽eee8>}:r֯_8C!+~_}ݻw:ud OƍN<矿ߵZ-lv:>OӋ/XRR2wabp}Bttu k%$\yhR !r MMM5 %%%o}?T*UUU7tyG"9(++O/rOaa^?|mnƁ]rŋEQ)a<ϧǎzW_{5Ű]@\D[%g "МRyGqwq>}scxxc1VXk͟?_H":R(6l±c550mzt")ZmpüoOJJJik,MGN<^/r4a8:;^ tժd4+3+ðɓ'XLV:y1+[%_\n]]T"}Eh^z^&q6UFP ӝܟ!NKwW8giǶm"':=;w,ȳEA@Uk4m[^^g\G %ȈH4\#tC_>{ƨ'!@dǝ%ʱ}v(++D+55)Fի Z+Ҵ-lvkzO]7\$8un Kq?>Ev:\|TuZ#(}֬/ni={s**P%(zhCd饥&pCgM꧟/JAzz:'ք?`r,7qq9 0w0RT&RRĝrU'/(eJJ5bG~Dc}u g :d+a0s[ɴR)l&ΝqZK.z{z^뮋f~Gszj:utٲ[xB\ӿn&i4ׯ^cXvv6s}Gnn.$I4 E_f_}5rQ2IUW=vkd2daG*2`㸦.)a8N~I\^r8ѴL&,Yr*ES'.P6777ݫhR癶6uSSGÍ'O cS,\Nn={$~㡽>q!3+ >oGZi?I*I0`(W(ŸHaCL<ð,3S5s&|rɪR}xv;1C\2੩n\QA"F ?x KȘpu˥6/ ]ĝ:su:pLXs0B5"Bā4B%*++ \ѸEH2ưa493~6czXW ң[֟8ļ5k~ox…{NY}дE&̞]eˡR Ǐ3f\u  Ce2{f#7SHax))eV.5UHre^>wHW[[z~~;7oo/^ʹpaw/Xp߮9z`l~z~8u+踭o(uΞ x7LBc`Х\.$˲zޮڻ4soG7_<^NӨդLF4M3 V)e9NTfT_eVykl$H縤d'E==A,K'[jFs#$VT2nFC(==]$QM̞o </Ý譽Y=hPE4L&ˋ0.S99IJtYv616K$%sxYr tΝ>𻃣njP EhAz Xeo AEϣIYVs,0 ˲]VkT^bghz=羟DT;; o55Bs<<L1vIIӦOomo?_[+.'$--j%Td?G2 Շ9+Ihq\7aj$D]ˬcBY2㭫[ZŲL\CV0ԟӦ)}JJz③LIq;mŋ,Džm0Z#bF # NPXho襗eօ,@ӵۚ ᩽{Շ@һx޼O_}Νs˽4}}S^?qpII L/wdde>uJ\Z <}%O8(Faa<nUj`hnjJ1~c^'%M\,]dwu8I @T7{TITΘqwcJP`o9_gɞ|aeYY&Mb&ܱV R bdHkdt1u\O=^?YEQQ8pn}out)Oz\iWϛ7$~F③)(zŝ2w.z((#4A P F=K3jjooAaΉ/^kn Ykܻ֜~ܹ GEs߱ٲkzu ۷mjeQSZssrZS 9'']/( RZIL&sFFvN+ػwoѨRZm( ;a„Զs- I)--դ4;|rRҴ3؁b%k Eχ88^TT$EM(,BU9\vrqQbx'*p/h ͪ$qcǎ TTTzQ1UVNH̙C/R7aG{2Dq!~&%B+X1"`<5%BOrΝKIIK}z?o~󛖖^#Xw}ݻ].?o߾*O8*7tfZ7xŋcf$rxFP֠ œۅl1 $IFq883Cql0M;ӸjG/1[kk(Go#1 D7 맻,NP5/ER3 "448 &Wȫ5UU׃d ZWS" 4FM+~TnJ (ZTŕtf HhV! GFs'na_|-b֭[CqTTT?1???''?UNG?Qww>q&;c w'83;9tvf:WO)'GoEN"Gbh~_Զߟ5{6YMUU^?^A: N hA 9a!WR %~Ow߂l}13w@(XQ7Ӧ q!(@o.ð8O'0BďTz}km83g|7F# y8P H[p?$ a:L&{g~Ot}t3͆n#bGPE8p6F5UU0*zm_#t@d*CxT^^>JL}#H}"¤"q4vBKeّ!ev8A74 }C,p8ۓ/ )*){5FB0[9rJg"hk &kǎ̝{!~W]#  <#HCffT'6F #y46 ~+䴴.$Ie .:PYY) U^^.%qD=‰ijŋH' JuQDEEE 3NkYX| 3Q9C[= ^t"x|^,8A,$S+]6Z~eqÿ) &dd:!noiGlE (WXużyغٲB۷nc8]p t3HG1dV_0}:.ɐ J  P II(DA778' į`q&.@{/pZ ,t} i$v~8yP4%$A$IdtΝ,yH4a雬1,:Gj>K4G=]A嚕+ūaN77 HB˯u+в*t3d!Ga׊ ٟufyaxt9avYOF!t&q<$e-|$H{KOcaOCTt.H`plFW (K&6 b$H7C@#@(* no*G*קCHFh0"K([۶]bp| "0F]Т%K"ߋs4(!YlYpQ[QAw׃ sw!B-XMCyD mZZl/@W8 ,GZBW(UtqtȨ9$oݺ|A` ⅨaZIB#?kV ؝g8Xq`YlVhl0$I GaX6HL>Ϫ!9pP]TU =yGS@j.]ܾg&9K"kPٚiKq8CZf"!HJy#6^Ow8$}ъ ?B%H0DD-v?˲ao݊> veO]1 ] 9 8L8Uv{HB!9 CHlm{΅ Q8GbAT>!֌ݤb荂~ >wPlڐq/J 4x~}¯ 9Bѥ AN|y2 ',>B3BU#b#!_8<ϋo'fU׬YC'78Jv8Gn^ ^تrۭ,q>Fʞ.O>㏣}wF@ ņ$$Mh8HJC.(jE ?-ϥV`90xr 1d0>\ S0SC"ܯR3+϶o~wϮ]Up1#Ѩ>q_|UXm<qHl22fY 1 U!4N3!dż3`q †YD ?eJ"[xx߶&$Y Z[nZѣsiF5%'cvv[}}|:cW#T|3:‘w0^Jr͖~k5JeeD-md"~8X0G!tI7B]V+};04 DH"DlsQ#GfΚ T R ;”D*Tc A\TE(C7CoEN+wTAN-BBz̘m +"G$I"+6NCTv .Xd lQ՝ 5LK̡ăB~~ :[\1o( @&JJ`󔐄̢P}; (ZB ]p! ֗Zmp&Ve$}4-h}PR|4 u4Q){ݤXd(zLqaEPW @t8ћ aGBP 8."R=A>  $ɲl3DD=0AC]C[8s,T8s@ ;c~Z[NB:9wAm$#ŋ vr[ }z 1̘t0 sL&551;9 WWQu8hF18CLٚ[Olӡ\cqh"@ؓ@kmm #tTQ(/Bdi^:qbD?&]0}z_MVcNTZG--ԙ3Cf9 /?-NQҌ b;["NjN+&yS<O$ FpHP@H-,(vfbo @LHJ3#JG7#Cg[>d( BmiKRZ[;n&._Lq][]y5fB#Ñ(7g0@g6#41?ve ')*9%E(_|e]|2m Clذ! ǎei(E8a`_Ghxw}4|bMUURRRNNNN[f8 zY+?? Ͻ`u5V%äq\uc &Oz%Nl:Mq%_\n]]T"}Eh^z}sZm^uu *1BMG)>~pXNgP D &b!]ŗtXIdӳ0)u 7BhJQB 3w:@3BzE(*JӉGhݎhsrľy= $5=/A355)Fի]mmYf^s{NB4f3vLVj*-3Rɳ*5ղd a8lkldo(uZEMt Dz-q>xZjjEu:u|n7NZq㸇~}vSO?t:Iԩ4wGGJQQYM_|Ң˓ {TTJ&QѦKKMΚO?=_>[[zV -==Ģϐ1s.ar׿]9 ^۸ 6|ys8ʟ~E2 q$'#+1= Q+Kr #jŽa7Pc#FLqN":a )`#77y$it"I/u(K$IʪQq5`2d2YŢOM=TSc̼6+kcCezzΞ8hRL&0 #E A.)aDϓrpiL MYHUUNVݷO\گinnnܻWѤde3mmꦦÇO^hǦY:4{7L I)7C{} AP8|?jgIRI0#@ -.+^-vOC"BZt4 游 ӷ0v14ĭU\Ba$ċ D?9`F0lN /tf⟿J ^2uFE[/?̲$nK t:H!d8IJ(:)B`lLJ$ n68u8ɤ &I477 ymm F#{<Y"rj k4$R㸷_{h2񱱴 [[[ϝ9###`0Z-TUEQNV~\je¾+SqK(! _uw-r9 r@ն,\0JiTPATPA1UWNVHEHt?|kKm>/ʱ+lgPSS$IVU!%I~'W1. IDAT$(^rE!],F@g2aQ$9~d2ht|bŸHp87}Vk0'&X֗hy "Đ$,I$ %Kz{bYxny>!555׮] BCChZiZ$kO2mp8hVc.bh .(eH#۷fZrᇆ"'NX6mbY+WѶ${{uZsxUd4Ꚛt^/09!_~bƸx1[UGy~M/H %Ib\jJDi-GvJ%QT(ȑ# 4$۰h"Zao"Ԩq.}U3<29P/l=ӸJS n'~m3?xk "nv"?S$!ϙt_ҏ~Tv %KsUU \y!Vw#aK4}=T{~%ҙªg "Tj UR=\M Ο?CQQL!dݲp<=uJEy%d_u8lKJPK\n(KsѨ;i@ ƳXm)B3|pJS TPnRՕz ~~Dh||/~A=XV}S8_418Hr={/]Zsg]cwx7m6ۊUo775 VhΙXVc2Ym6@565uZu*h4l*K9p"1wꑫW[Z$a|Y$Ųhy VmC{^?f!͛F3x8<ռFK(4w޼:d4&0۲e)Z}  8Qr5444vvN^0tKTֲ%ڴe 6<=Sb"tF@aԸ|"I`D(ϋj'V-ov$Ąy#;Օ~hdmKR4>t2LmUŋ'JU'$ՒaF.\` mk+/]ϝ>|tasu3F FGN(ia>ts:q,f\LM\"Ig.M6|AL{%GϞǑ^odd#G--۝ƒY7 j\?kNG|*]'4E>8_VyBKAS=&='d'>G%%LQҒy]VڵQq?,_~5~L&[6mtZP{uBIB 3-w66+G'y~CmxM&,IC(,ÈEܶv|CKRc oktIA:< Bko R>{֯d%v{4.zOX4X,&ƻZbm=fmKܷqcөEH.IqYXw5ÓIsZ e9xQ͈d2ٝjnnfe\Bk\u52N'l! %{{7Jwem6g?bAyjHv/^ ˹\G# tvy*0\ #?2MO`D-Ɖd‘Hu˺uPҥDO/^_hR* .5vtD{64P^…ɁL({+@Atg|dʪezB3QS@n'dMk30}0}!1zd$bp855/\_Gj8=xwz3 egX~TjNOq5JM.f2*|EԙmHRh$ ^/J&V !+{9s@S_3a|\SS1"P", ~8>=sF֦KyXMJ$p<.%0HRKcq )oFC{J2ts'QF} 4h0ָ\bϧxȼ>LdQ%u,YQV\*%TNUZiŗ!ߴη,H~'۳c3Ng)gobym̢E=R2)ES`-07Td8N>U2"NDKK'e8's,kÄLB Y7mǎYWD[֫Ҫ(pf{z0J̎t(1@T:]%*დgPVyBogْp޾u$LL 5@Q&֭5qcSӄ(0, X,znΜjKGa15 `!N1adRp].^$DH\9ıG ~vVJLCl>8Yr@W߭Vp{ACŋ >AERhE{l窪"O[7oFV >tϱ,rMԤRCw0%dDsx$ %Knԯ!D IY[퍜8lslDo\VX~lX0r00ƅ (V>y 0 k6E;%B=ra ApgQ~dJ.TLRA[ 9| G}?vx`"ID~'OҏGubvZ1<<`(G?O_|EBE+ _=׮]g>SQ.%Lc]!1ˊǏ'!rY-eYpXrGFIT!D(>@dRiL.hL"Dd0R(5dzͧOWPz j"ȇ̙ c`ك2BfH2Ȉ>A)! cj: A D3Z$ԥD 굚2JrH4% vgc1V)Qdrnj EY8K(%R((%*cL$z"b ~8b>t;vߚ5!1[rɘ2flWg)| f!sD P:D<dxofeYHkS"r\D`t=DD$!$ DBdO[=q\hdY_q @,[c̓gmUUqͺqkpII㤃V㐯s8粢ŴY':#w^]^i̊DgeILO."m>odLj%(e%R1dֲA'DD 7z8hq8 MC##R^iuaL9sΕUW fYeBPc;*wިOͻiE+^o L'Ba;0d)kFNDh)er01G UQ""!{+ȵk5--drHtwOZ5Kh>}6'88qf{nشI$8O&N g]G<=-oZ f{nUƉ nq|̴WE+=Noԙ :r>$g 4 *Yk Y SX~=U Ji^%e"a4+1왑(GL< ms[Y*)Im!N!Kcv[ f)TP T&XsTrg|f2uPC$wlش @MKKWdzWIY"Cb'Vi%RFǒ%&/={ș[N-8kUW(yfM *RQ+\m|[df&`R ᅚ:Jȗhڵ!*yެ%Czh+)Jsbf'ǁf-)]ܢE?>4M+W^';^.&~+a?ϰCSK0>?'t|̙RL`qz}ݡ^Is̛׸ahNB<WY,MMLd-yoy݂T<鰼ڊ*: 9H(JM[ʝ=52C 3\ī}!D*I$]% Id(TsiNַҊ̙.Xa!>Y#׮#?w|t>mXFF`,HܹuWc?sPCCAx~iA0?.?]] 0w}7Y`2io? ad,<|<w&A'T  96[ ),%K^ Ó{j[Z+,2Uhy?z]x^:,I{TtPw|9E0ymپ]MP'"KPC&S㭂ʔ7]]ig.] #MLFFF~Gem--~Mk1w/ŋay֭˖-_ҥK lG[.Dx3%J%ltfEx@Bc `7ޠ:l?XUu}>-7_ =l5ߎ> +GFvcL]Aᕑo^$}rҌDiVZrQ`(-b)uF Y ZWN8|r f=UWᘅb_:H6wuv#>ز?69㧞ǢX HIO=[~^^~K/͟r&.\`,V뵞F`ss$I%IImip\m#okFM$i?TDžh\[ n[ն8uuw64u(Z&'/?0n>!H?59$GɅ ߀\bK]N {/?1>_bymmaU,9hnt8{zឞrVa3p\Ų(F^ohoÆs%AAm}qR'đHk;:1):$zT]]8EfqB. *4HF"$=:g;Ss{[[Uխkj: skڭjQTPz}1KH=& B0X(2()75GCCFN<ɉ =WXo/0ǩ'" vnԕVk>}d`ID\nА$9kLduwY׷u]KŒ% _'{Ν[z;:NˮԧرE6]kF g /Y?dhY1t鬯70vhկ|>e?O $-r8@~[Z[#~Y_sǎ 7sa:p r\ܳώ P F6@+WϷ@qq5BmyΟED3,˰ ps3րLm \e&e ]k+t& `]KӴbŢ(96\d__NLDϞNU Dž0_.WMDu <@u'XLP4Wy/|d2)oe]U]ɬJH4rpTm !$IvraNH?Ai%(k6@R"(#CdcQD,AK|}}#׮ uw"*DīTҒ( eDdEQ,zNQ<XV<ثk׮ع3 ]>q"02R=祗X2u ֭[g־fO~ԩ9˗S~paU3GŢUG G"X4e,+Iz0N^[DB&C,+l@,Sccd"a&ղG2d2i4fc0h<#RsD_] cә]s"%$(yh4R!%[Q իiHp858gطo>t ԶTu[c/egSDBH$y,qJgyYNF$. QfVY|Kve,[Va0B @v6$!5=C&c>$Ξ\ /<=O<\I Iٽ}mmgޔ\QZ$bM[r˛4,˚L&H(BHH$Q$ yBĐZ\w"Pxh@%3(o4Fc,'@ f6;x0zN_I ۵Gq,v\2 -⪪d4AT(밡*::*ϱq@$cT:O[Q @Dz%gU1v !4n̲ca@JR GnEr~31& ##׈(dWver魷2;d IDATJ)HKDɀ0 S*C83fl* /BW9yr-Lpt?19Yyvk~qh[o_z~W"i3v>%;8e@݉j?OBu s.|Z 7a?_`_5\.91Ng__~7L,nSO=%Ij2Xֆ0̑~;`ƶ6246vŢ([cN !DQ ^+TªMx{Ż:;MMHy+Wݳҥ;wv5h饗^˿4ls.ZU-7ꖯX50`0MMã55`mj5s ՘LV OJr @[ya}$'Z>v# V-qnwrpP f1#t;:/GgZc!qrt:ux%Gs=~8[EQ$JH-LzĘ",cmUKR՝:_#q?1嗐A+ Y_)YEM7#{ܣַ-HbXl闿QX<2:)96I W|1u5A]QEj63:@NQKD(bț шnjj)GUB&yV'ѓ:WP,֥d'd|9 [zr\B^OTWAr/w\%U5}Ƣ"J(a@0kw_ª z]4DQlw@p9Ȱ 2[ ݙ)YJtHDnp8蒫֮['<-=M=GKDIF"b`Q8IAٖ$3zjd]t =iN Mϔd$bp855/\_GjĥNO{&#Hlƙ,/_\F9 PT[.]B$|y,=ߵ4LKJzk4x ,"yxA`YvU勛I,KMb<経̚>s qϼٕP0D NQ; dԬii!-U@D$"l&s56e C'TA"B$/ӧw"9"@21MDv'KZj6ñøy@|zPb/|@k2җv44V@F4*0&-[c@\o[㡇 plTUYg2D KX ߈(OGD& \bjVeFH&Q0T`JGy2V2K)(M*1Co8Jp%K tiYY %s ن/dnk/rqgf᷅Nws!L9z b\ap؝Z|\If TO ʆ7:ӭ2lrȉHHY$"PDRi)}26H""W I%r7u3t}D@ &@MGϨ$ţB_p|dGk̛RU5n>dVub96IN2`Ui"ȉHAJD!D"DiPPww&AwVp)9@,ku8~' ﹓1: nfC}x2iҲb])/J $1?}km{AQcKXUw*fM@Y i&H,# 4RLN(+9Qt2(M@)$+lR=K3Upw:SMIr3HMʭol޶ <|U wݿʪQyPT­۷d*nXªl((C1A(#&A1I3fPbYDDϞ9ӑNDt&[,UyD-oϪJ(G^H:۶@<4LKWUuV>5KSWGVeqFTn}&Y&JӔ)EU^Ȫ*X>qXoI4cz`cQ"n  ThAV3}H:Z[B% И}.QUw$gϟ(&zz{!-S([P"OY7lx^*(y~H }ĕ+/DYZ$ۋHX6oN[# )l>(=^2Dh:@ws)OJ# PӖ c(^rH%"c^J NǼW䉁$;gtR;9pQҥ(irP)aUB~=%6>:Ag|pz{Ig2rDaĻׯ#tIFÇUU덋O:fOIF%i*] V_;7|012tsfT%d$=W/Qfc:7|tX̸l0:rE$j5.]Vm/~22LKꏞ=+#)u'89mi4z-+2ڥY-eYn Z,kv##,˒A򶧦cDIwS)4ͦ^( #"fY,$˲(jj&H|(!gR#ȨQ.! o$:ڗQ/QQ~-aU ӻpرM'nܝ>%"rGF CF$ԬȆ @ݚ @ Zv\dUwa HAf_P׺q~]fϟ|5kaD$SӤ$D;~bh^xͫVyJ88N+Qfq"a}g'2p$~ݲn t)#/)-3Z SC!ҥƎ{CCچkX090ɒaD!vO qדi#7HlGBSL"wgp)NyjD_~=8TdemV uqzuw">.aU*o߿~FyyrSzpl55 )L1DsZM>SߏJnFjlh4X(QZ4}{vȌ%4VpFY 4ӖMZa@Q(4H(qk#LXXvB!!0G:z'|7_yE ]aD,-Q򏛂JwJ{9?%SW(82"j$@=~ڷٓ릐0̌wpxނ>%e!FBDٶёLW]JHYGhJ*55Yn%(?< sN'hexaEϝ͙3Ump8, 8ab ~64$)-A`F`)2-]H ( s.?8c1"F%9"Ќ.lIP`|Il HR8-7sU| L)3z4l޶MND8$ 3S>ٓX +z .( D^H>ˠeJ4:BYCyB2 oCrf$z3y<$kj}Hw&V,IϾ>_2q҈T3-Ѭ[~\UUijz<Çe9kr^Fva8NKֱ@ $I8H2Kܨ_C "2Doo eVAf3p$z{u--Hf…#Ga$1.\FyɃaX9-9/q [Xi N\m{x#UWUMH?J)`Aa ,+ɆD8Tͣ,BhH{d%ђSC4Di (G&֣ ![*sQ廟;v@weL5 +!+PH.ԬƈeYͥf`QK$V2gse%s 9b߱cL[|cQ} cߔZ-kil3^V8=0O|~2._ƨ^-\[_-/ml66ҏHf5Sl۷g̬'%A%d:Cbnf: >|d0H6ҶS&ZD-]lv$"kIwޡb@֣/NҴdsTTȑ?>s;wPT>8Y3PDHNj2m'w+XҢ[֙FDDcs}嫷%Ԕ9ԶҚ[9No0VTpblB ;to:9ްi|ϚRɱz͚#EDڃ1fbRVBe%R=szА 2zYCsTRN@} >O#vm:׮['ϴ/ SG)UH6[A0>QJ lfL7_"e;^Yޣs&JEDY׋tz\,iEo Nw[Q]y=3@7mݚu~F0Th6͈X0r,O"Aw$/)A d=!7|0>UUÚ $2.Z>zTSWM}b~QƬ}׫2qÌPo>DEQD{3BywSSuaw>WPA3Yܫy~-۷+MCqf1#Q9Hy@D%"/==dz=iyݻwӖ- 8!W֣VfYr]TEETC &ʅ4}2qr3TԌX NgH-㯠ҢxWbv|u92c4km$XDPrJ.l)SEQ$W fnA7oq= dzJu7T7,fFώ>H5gF]o"{C*:$˩( BYLo;Aj 5Q>s yp2M `>xȦ~z*(9n_TP&\Y6}|cs8ț`zʱTlE+[֏HpdZn"2\fkM4k"2ND4V3*+33Ļ~Fgv RL"r>LRW.d+QN4"x׉G ]ĞIRޯ>"q VTpOg@vϠכ!BAڂS{,Hl3%$ =Z^z #J|,I$cpOF^AőG!7fAڼ[YwVSS0_dd^ \D"cUUݬRvz7^D٣@Tdb{%OA13\smeÐay wV2r̴ 0rrvc'H td%BAD-+t&%/ۑ /d>pލ}_O )!ٍX È0(ĺ"Ta\i3I*^Ӣ*\A(p]}}}ljHF2yykOOt䫡.tJmb*H"ga\Dd@R&"!%GrH)$D IDAT@,Kr, 09}P*\~=W/(>}Sֻot8z{IW¤mD3z}^ mܼnd%aP@lLl)6*qsT&Q a,U~ hOGn>rSBDCE9RD|F"/].2c@6 a6\doz{wP(d4=c=F_|E3ϐcr…7[l G2Y/_Fn ,}Rf$E8`0p('u1SHx>JdCgȪψaDd2Ij6:܎|So>t[QAjQgci0w@V9H ~fxJ"KdkjhWFyh,~x?˲FC6r1( @j[mo֭l-E ZUUՆ xwYdo%K@Fj̩ܒ/G])r@*g BdOhV"do lc4}y\췯>>^~݄ *ESA;Ijl$D7H7Ps!l55dl."w56_@"%0{3#l A~_5k(dt===i-ƍ{.NDCQOK-DQd1Υ}t_>_YC“O>\@[ww4-^Kv[eID\(k7D$(mwh*e')VH$#Lǔ'!cPwwL~ۗĜJ. >nbHx䋢= -*+,o=RND>>+mzRm]F\N$g/ߤIEJ̒rwSXo/BeY87۫-Wa+iu:3Q )^"ysxb9SGdnsq$N .^._Gv֕>|C\#JKRZhu1`"rU]w7:m8-x7뮻L&Ӈ~Y5Yf{=-Z~lFY$fߔEeL ]U>@(nzK;"1q F#9"Wd(裏TqxSSlܸ_rMMMV.p8|̯AVL&SCCl&($E"IW^[f*[u…H$z_rz}CCj c`uubD"`=OCCiŋO'8k(CVߣBTK V__…h4j4h4… m>L;;;8|>,w#Zs9ˡϹ0;1^|'n__?{lKVB>OLL9l2W!ټhѢRg3gӧ=z4j4۷ڵd2kx≝;wR{}Өsj<̢Ey_Wuuu?>yuww_՞={BtZ+_ /p1_b}}/ l޼駟82JiTqbg?vh4Dpc7MZ,kf&?[%gEWb85իWO:C~3q\ssn}}}(zk4aPq¥h# WnONNBC SO-_<ׅ---x  _ܹsĬ tˌUpܹn޼;wCvڕH$X'N444,YԩS[dFhoowV {$)Lj}!JQ XVԤz!jibW 89bٰAͅ˗ׯB /Fv;G=cI@!d0.d33!GR,Ɋ'O>@Es3/mebsj+W>Ó'OK,z3~\SSc]`D4?%r 凊>g((͏z̪>Wt˗/zaB[n|lnmmp~|ҥ;w2N3rݻWNt\>ᐯMpÆ G p]wUWW3/y&fjЪ׿RI9z(*`~d2822² ַ}bY]reUUUV@ip">ts:q,f\LM\"Ig.]]ב^Ff͙r/yrN$(/_$ECت* ѳgqכ:;TV$0MyZ=|0vusZZ"3dK/^dZ/^dt:]F :W~N槄h)>  ,˲#<_8>PH*}ZAF掎2MƲl]]9_[[O?$5/^j>%oP݃qhn@Fy᰾L8I^nY_nײq#ڷMW@$KdZ嚆WB&SʕxW~|jU"!BƥK㇆ Y)4nw޽˥x4zr%p`ڿ_[_/YJ&'%HDj#'NIJ X֭WHfjޙGQd5Gf23L;  " \TDȪ, ?W]ずx(ʲ. \!LL&ݿ?63d2>|&U_WzUE Jfn6ZgAo&}aÆ]tA$$$6B$7w\Z 8A?ި6Z0hiNKKw jVE5qJcf3apD"8\.oŷ?ܔ KJJΝ;Dž,+i7Lh=areYT_͖/>}Z$%$$=Zգ~K1~ r9jzl:d:pX4{m-9~~H4l>}QD0,@5ȰtmmӉ}oQX|]pmnf1kԚPBD"``,BO6h"'%?}Y#,,,**466V*e,Zmۛ].IRibۗ3J*..>rEQ)GyĹ #F;v쨪:|ARRRwte ÐҥK._>~ &M =x !ʜی@e)`6k, Ц7oFh4deeEFF,BH3fLdddVVl8qwdZZ-EQ\Ⴣ9Ι;F466>c&L:\.GGGsۯ{5߿˥x`a~Fj4hݸDBL6;;֥ HRVɺ'-W4D"KM 5]Ȑ1σ=,4:67r_r2?ɀ#G0 9x1n</BFzF8ܐ֞<=|qe2iRJED8I:zv=JozΞ=;}Zd}N|Y4 0XXXqq1)ӧȑ#m6C=TSSDizҤI p֊ܜM긫|?x :tPEEŕ+WRRRyJeNN΁0$ɄQFa퐹1 r ~:TZZ0LTrG}}>pff&Ѓb'4_aXֿ];4Ȇ3lF}'xf&q. a۶) 6(: ȑ+vV r\2??7-%sDpBII! ޽l.r9spY϶{FIa[x0+: p??'VbqŤVbbg}!rܹܘ2z3f8Dj:n.p ,//:H~Cs]JQQQ/9Ouwk'aGQ$&:Xkj4my1,;dqqvE% 5^T*UYYٵk.\`699VE) Z*Ҷ#[^_m<:ZѲapvy8#賀O!ܓa ###?˲gΜAKr9ZnYYY1DDDSuqnbڶ{:T>e p+--}׭[|jggĉTNmц3$w@ϧamY>LC(Yb[oA -S|B=cI; " 5LY> 64 pAz t w )))3=z433K@@@@,]DpGjAtn7C{ # cnAӭ\,X麻D=G@v+(*p3gΜg , C>>00z˗@"DFF* PL\YY>s-˙3g D%<=RCkk:Ç~j5:nq?%J{D"IOOj6lr<))i֬Ywp ǎ{O>$اOv2k}OB0n|xk ccc7m4{l%IPPh,++O:m^ׯ_]QHSNocǎt ӧϾ}LbX9\XXPPPLQo {Hk_97عs'85eee˗/ߥRq*;\ IDATx $ ++a~AT@vvvUUg}ֿ \][ n hF X?]Ijjjcs`BBBb1˲$Ipq߰aMʕ+%ӧj}ꩧh =zH$bYĉ;v:ujKaN;v؉' ̞=b( T*,^'<~Ç/]nݺw}nÇw`˲΁ˀw޽gqnٞs^xqƍ$I>/*2zßZv`W*p`v%`C_h43gp̘10 п?00P"|W6M՞={㥊8}ڵk9ð5 R?ի݇?~2%%6{駟?[n}?CBB#v= ]uD"HXURT,gH wYe<4MCxСCrk6@G{zbrիܥO>O>!b}m--]T*4hAAL:m܌9tnJ%scǎv. C AdAٳg(o]PL8`X}뭷7cƌիW^VV- B"L&^VQA+̙;ӃLrk׸  M_->! Ff5h%!!$?,**aÆ-Xܼu)Stvycdža&'M4m4 Zl|f30ZbEhhhs8ƕ+WŋQP~-ƍ{}vZHhѢjպl2Dy- B1c U*UVV… o&+umEٳF\**̢"ɴiӦ_yjZu|ذaU䠁EQ۷o7k׮ݾ}T*jӦM>}: Je^233o7|jj4׮]{{X,7n܁$Tum-[:kV650lĈܟ}Nqq1EQ111W^mjj/(JN>ǑL&X,O>1cƌb M啗o޼O?(/ܴiꌻF9_RZ 裏ݛy-&M/Ϙ1aݻwhu֭]v„ z[zr ?(jѢE1bCߎ_+477{^HWc-w[K͚5kٲehӿ͛7p H$0999ATTTXwyF2'N<{ zVH$ѷv[ppppp0'9sRԨQ۶mB{1Ϟ=[]]pWTt>~[&>/R*N6-''ǽ3 {@HHȭTo=#}(0钖|n-偞>}zȑ1cƜ>}:--͡lAAA0oA1x^$t.pkrӧ@XXKiii<Z8]WW]僼="##ϟAtС+Wu=J2'' `FdBB¨Q0 vȜ)""`0dgg+ y?*--laR䖃5 }turVQQQsݻwmΜ9mJijrddfao3RY^^Ft:r3 tiwjqS.9|pQQъ+Xd 2333SWWw]w˲#G?v%%%2LP83[1 V>l6@ pG#=ܳuֺI&Wҋh||<7޲qo_||U>z괴4La!=T__s[,3gB3_d8p?hٮ\RSS9bbbx]xxdJ5a7KKK{Lw%Υ+ n?xx`Zsy:v`Y@KFӯ_УGD"N=|ZZKͥ0h \v|aUVpW=#*h4* XF`va7 wmС_̙3CBB ÇD'{iӦ,C@@W Z]UU>3psnѣK/s%&&ܹ3))oK/zꫯf͚Eŋ꒒6l0w\~Gyl555*j[n񤐞+ ߿?55Mo?F]@3q<+++00Y{k=?7xph6J$ d8-bw>(::Fѣ˻|a˖-[|9@TTc=pB ^uD4{ymݺ_Jئ`<`%K5 .Tfeggc&J'M\_ɓ'/X $$3=ho-(JNNN.//OdN-.[lŊ3gq<""klliqe322fs8Ο?zj$)z;%Ylٿ/n gff>'LctZJJٳ/^'G}Q766Ν;7aO?wܑd͛ CffC]! p3 p r:T@F{(++0[ֱ V\f7Fρe{TTqݐMʕ+Sk֬qb 8s``um-(в?! ?T G vJJJ^zt 8x@I;^4#pkO/5qZ;S&JJjjjk=ɷc:ȑ#G|UOFFnr}nm"|inwDcG@@@;)))qяKv<S,NfOF=ɧa-:Cc۰{rľ>,>y%؎Eƍ,bw1MMM]0lf|::xO7Za + /^\`}rY<Ԥ+|nO,$5͝wop?9o >`Şp?駯jll';^e]rY=]]\f>h :z4%| 4t+W ,HII_6qU5VĉKKK_{Ǐ/_v[tgXX؜9sN<~ݻwq@lW^TThiZ-뫪BCC;^Ne̙^aa͛裏Κ5W^2eJii{}'%%͟?!''g|4V4iRbbbnn,``A|Ugץ7=2SNo 秸`Xܧv( Ѧ#WW, ooW{**a[looaeST*g̘Q__zd2555;wˤa'NAAA3fH! 'ӻL&k3ّtZz4UQQ(}6Sy07! pε_~rXMMMSSJB?w܎n:6l]>'O>}OOOO֯_SO?~,S t1hgn+N2G t-,]eY6M՝72yFO5؏9tnT{G( v@wrK i:8U~OcYqs}ug|@̧I-c^C=h# Uf oC\^ m~ɾ3>|n긯E'ilvOjjjZ`O,y5-b&.w;BvOOoH@@@@@@Wa6M vG@@@@@@V{~)|,RhY%hr9Gxkt\ڶ{~ebb0l5d2 j&Ntw)z:B!I{ i9(H$JA:!44tVT*Azi⼉z N;xD*5" [$-+@@"X< G^Aifsss Mcǎ 0L,O4iڴi8bHss֭[Lbl|f30CnŊ'@qjinnv8O71ѣ,' sbrh9IJegK@8!C︣˅o0,Ǽ(ƃaaDaEE. bV&binEzyGoQS C-BMJ$۷KKYH2_1cpƒw/ͮ IrڵPSS4{lheӦM{(ڸq#lܸQ=з׹BM5sI$5 tRhOt P]qc0R0lݿ?h$;tofW<쳋/Fvώ;֭[Gt\\ /W_iE%%%7`ڵ"(++kѢEVuٲe!Xܚ/BP̘1>sJpnj+~~~g5=u-/kqkxG]:-SpCBI2\va^xTڂ>45% 0A[SN~WyhšCFDbBg()!(jYTߵ.Uرgn6b1mɂ>@ %j7qTȂ*+SS4\'wzoa2 e!!M:]`~ÆB'ň0 녅eۛ (tȐkfR*ei/8xԩu.CNNg|kҀR>Zhh(-zyGPN nl>s&6&fÆ ^p'H$F:^\22>h4F͛?SM6=ǏGNiisZV|G{MLLt!;;5&Mzg̘0ݻ?S~u֭]v„ gsz+^L^Mڶ{v w02776V 7_774|4wnmy9C}E7|4wnٳCƏW9޼޸q~aCztC묤?~:dȐ6DDD@tttuuuss9*K.>}(HKK[|yppp{=uz>.;~qrz z<?dH?>ѣS[Y񭷸E%g?t_'O׃f͚߾AQQ@Qk&)@(/r\D!]PI%1A`FaZ,l vj4%=8AmK(XxO=5yQczHTwmTF$yzx߾}7hѱ7 $u:mJ)n,Fsʈ#SOz+*@$=P]^Y,e BX`=0ۘkB44R2ôH$E!C O:yj܄?X!>&C;^7:`@UNi? w# vd eMilh0k^xԖN'e咒LP(X9r~Z3?afC?@?pgY}s=[nݲeˤIPջmc㋷oDginЇ1ۋ$2z54.)CblR[W|6-;;0T:iҤӧ@TTԂ ,Y8 . KJJ={vjj_ɓ'/X $$DPenAQTrr\.*wi4\L֮ z Oxv'+u1TWGVh *UuIIMy9AHg-׿<#Gn?KJJX䧟K,`XPb⅓'5jǦ7[J矧v@8ښZ./+ TκJ Hze;v)J$$쮪rܹsYIR7f陙/ JC oLMKm>H 4MDF0`oD+V## kN5V7=E!!&&f+=:H$D^0́6n;zrDNCYHJ0o0,"*o߾rh/ ,$!yOaaH2VU8N5|Av&+++++7#<#WF?rVoq,{ܹqc?dyY5n^{Dƅ_}E~vח_?2ӧٻAu~ii'w,p!e)Stee(!&..s4]v1l^Y-sjj }TArѦmDcJR%A]Tپ" .IV2+<9bbb8MV_j*UU3iuu4~@JCB"p YtT}UUcjQ*;Rm̥ QBTix8rI"IޢQ M3,Kh٤;=>J{kϵr5kkKkyW\9g5k8xOuƯݾxhGn63h4Je|~pčs(!ϒ[/iqQQC(T_oܓaY7!. ugznb_]2?bpYR4(Th|D";[VnH5ޫiz[Wv{DKY*$Em y{4 $ v;0A לN͊ϑ#G{X,>s딳+`֭ϛ7O>-=LJY͈{>M~~~_+ӓu/z]͚-u( ()) t;#Xb᧳U |h/v^V555aFQTXXXvv%g^* ð˗{(… =ꫯYҖ/??<z;<8W{V~Pu lשI p?$6Vn09yĐd~e@;ARoKh_o䓛?[AHu,,>;# :k֬W^yeʔ)}4  p+Z;|ժU&MJLL߁3 [hmF_IW 5XK5^A Cuaҭ@Gcem0CU%%hwc|)#t*^H4q6ro -fd~o I貛|9q~΂5TAB29| s]mm6Ji,-iaؖ-[ooaYpE)3f߿2LMMMΝ2ihĉqs{)((L6zǎ7 0 =GE:^/-.u _?;~uYt_sxq1E@EAD@A$F>Ԗ9O@*wReOד-=J>8x KQx(' 0t),>?Zvk¿i'O4G B:|AAEG';pdEG;-:={B[N+1r;qn8+--?R0+Yn 6 |ɓ'O>￧c~'ׯꩧ?04҃n=3Tܱ\ͅpU%%R}I8wzqh48ivK^CUfeRE5𷺗i4@$ QWxf")I6 $A5Ԑ-ØHJPl,{O-N?BbcuE:¹g Ix.3Ƀ**sp1u5wMӕ@ѣi~w$IQT]EEPtss UUa  a**P:j= ^CulǍV4MQQѕ+WPCwرaÆY\.|~Б2wc1禜w2fcM iaTaaeeWU%%!K$N-4PUО쵔6%qCf&^=AED e a 8Ib c/ ɃdZUIiqBA4d`X̬)nt%b5L( }32CvH XXw?A[=AMʐ d{(ťM>:0ށƙ N ݮ4 p")člywt{-`\)TnjVeggW^lٔ)Sjwpŋ7o߾hnDDĒ%K>W^yeĈ=3fZjvObb[K,f43 CDwIb Q^)QQi"[Z I^. Їѣ2]I%.]rZk^{@%1E" ngBSCg2z<PWQA).CUBBXᴙHA7EQ08|+xn8jyk-c=V]4o{dx404^=,nذI/Xqٞ[w9qRs߁/ǭ'-sY<.|).Քy.9K^kxHbcA".h$UAA2a -}BPJN-q:SGPI"sĹo(ؽ;kXh0oݸ9so:!$ŹpA 7S_#z N烺]Lk7=OGGg:?qP6NinS<$! LaV74.]eKoT90|$(6֍O!RЏx]i)j&]r{n#FDdn>=(kZ.$٦g&-u썽AE `0G)z f0icU08IQ䤤{yKa) ^  A,[pfdƵtH zҭx7;br6d`)BrĀqa5-84w{0 ZM!HKO9E!^nWGDԔm59Gp=MsD茌\)\ B:99A +[W r5_H_i 8^qŸqteIbp\yHGDnb~BgtҞ^ƖK^- l1)Z2q-?䲴iޙGQl tL@"D ;r\$". UQE zϫlHd $2NOOOOOϖNO9NWJI19`C`Ö0$= Ad j -% (JdB<@_bZ s=ǹzT(UD͡i=fLYy7 L91Z^dOX FӒYDP;` $ltH`(oA~Ul-,-.lҔuFRby?MӠTT*%%LciaK4sEQҾ=5 C~`G1`y{ȝњTu,Ċ IDAT%"K$m0** =v1 7g9oiJLo,륲-KPVj5ɖZƾws@<?v'IE&hGR#MhhN6Z%%hK01mg(yK?Ր$IQJʠ3Z82jahS|*MQL4A4IEb`H,.SRR]y45v,* IOg~ 1jPfImga;)V9LCꪪv;_FmےZ̛L_RS>pH?A Q V-ak1w}Z]S5q4޽6/&6S/) z_vDXj5ЧRd>`j.dl5nDE }*xƌǔ-= ql']Ɇqzh 泘y[2d,[Λo~$0C*` 4&IRVK ގ}?2dNLcڲ2Ne͚]$rE8ȿ)/,AN||611充z }:uUtP!ۊ, 1'`3A9^-l;0%$~7cf@~\8rT3184,:$Ĵh:ZY] NjkԴÇ%\n֤%c ہ(949"^H4[=G%XapgC@M 4 Ed۸80dŊ3Ii`簑#WJ1Nh-+aW$kUU\Z3j?|yY :( }q*&V2X7RS$VG $b1?<{/zIF-`"I1o5hm[ ػ/){ndzaĨQ?Ev $*ST:Ԗ2}tF4TiSQT$<&di`&J`,2>>f3J$I^+{z=rP^lFm[`wIүGUQQ@ZÜ\r0D3+Yj}F ⵌ=}n$"j^o5LNyrVC<2LLH9P<)MQYXɄ>!A$x-UM\!dz.GLES9Z,أq:vdΜÇ-IMLLi~>UHXUT4gPz@(CCy\r0믿3p*@9Z[gjG[p{4eeCn\HЬB#F#eD$I1dFQaZPPԘh-hqfMs fNRʼn 4'esǓqΣMzc"bطo$kV"4GCxG+ H[^DAߜ]dt|㏳6x0n_>_DK{ B_}>F9A&$Fc@|Z,W08zUl{BC$^r `O((^4U0ԠPueR$v64` 3텝i`QF#e4iSk6mRv-hI KZ ݻnjp\qhkCQuI^T1KUxs޽(H"th4QTD@ a'prt<% h*;3$[ir#YR}Bf"GA.- Eͫ&l o>LV( k^/IЂ>]%Z a;={n5aZhPT(nRNXu7IiCC}F=oUa=utL~mYY@x8:Fti I^>(2Ҿ}mi):>?:/cƍCh4i2RI6#; e%B񊴕bQ;{4->n.TԮcG`'o.7stjzӦMΝS( ,رtaÆoߞ oo1cL0?~xYbj) ~[Qb~3Qb@@#yAURDGeej`52Dz~Y4MH2j5Y'䩧O ,Q*6=n5IJ%8m?wa0}~@ dh++h'/ZM}$[Mf&KdJe̙ =تu)qĚr9ƥM`0 C2d'eRx HEʂmI$gK_eCY*ln*۴; UW&j$2?6!0$/o'''/]$7n4:CJ@YY٪UZԩS͓544ON{.|A^g 94wGףck$-bOeW|H70Zx% F(=vj܈Y]j;yajUH(0۷G 0 Nz燂#PwR F-~aa; h( P `MȦWnj9J9o/r 0k}m4IAb6NJJ^P$LC0elU.-)2׽{&-z"6LdEEūTVV6o޼/BViӦ <hرom:<<_אv%;vڣG3gJ09U*%>GL6oh ZZ KAQg'۵ymn5XUMP(' aBwOSS#&Ѣ,A-` g D/dս{IBڟ ·/rP1Z#=@S@4^KQE}˙JT|޸gLS&@MQN4.^ѱ#G8F46g*j-e46~|)*B0{VZnݺCqN[nUT߿W^IKK>(::z޽;w={6[lQT_O?jh4jZVs.6mٳg?s 7e*f^o``Bi|ZBCi++)a-5P4F9KK"^@|FVs,h*[lǒChAIa.)!H o/fMa-_gmڮ} `ob$)""Y zI0yCn AH`t(K֤Üs2WQi^꒒lUĐ:d AP]%\؜(($D]U&&q1YHXdF$#N /7A!!b> 9{Vڷo /hڵk׶o>##i/_5|={ }]t\jcӧOvK…   .?}WyyyqqqDDDttttt4tuΝ _~=z8{x t={Q%ImetH5"(qG%\Q'Z`0- Je3V``>*ǀ6\ kAi55U!)= 71SB@Pd${-H&h4DTk6j }2">аPr*LiŊrhP cLb܀j~/-Z}Ҙ3jSRi4hΗEi|ilEhhO3Q [OEL Hi1w$9A.*6Ch0Q`D{"bc߾mYUU{6mڤY-?Yn {1h?h4܏a;[Mvk׮} bŨbl޼ɓ۶mׯ^}UbܹD4j^:v}ZNB:t(*bZS < 6l-|BR6kU]M$X1/,X;"!N S/ ha` VêLŮ\5RP26%Z)X*GAoԧj衢BLdpd$IF{xPY [ ھUؔ"&0BX NHx :Κrhk3AA Uw!f ilPR8mx!05@޽fI"me%J(JG/A^߿}ۼGBt|ee%M;v8p ޷o.,, LOOI4y;vL2EP\~GYYY3fPT~kjjڷoP(/]RVV2bĈK|s=j-IWZZnݺ &@^81=2+i5G,g~uaBJ-q r?/n\ 2K4 g|EK`CQFhЖj#I4!`0E/foi++S@\~%-ՍHgkS/% dI UFmyҾ=hG=++_T9s|jQ)dOmhǞu@Ns+9Jܱ)Ӑ"m^Be)B'{=SF`؅pSրUQ"<%uI !I/,L]Rp:01AZt|TTnn bbbkFj?ܻwoժU?egg?/xH^`A|| f͚EtjjjJJJ]]/_ݩS'+Wl۶MTT vaܹ/&I$^;f̘~x/ѣԩS͛~aaavެ8i58vQf0V8`j>d_hh`\G !Ff 0 :4FR~%Fpdjg)QӀk!=% LňM8~Me.>OeX9k}Ckm)X"X[8Ccb.x4"h *"I0 ;!"s-em(J؞&? o^+-;###777//֭[nݚ>}zDDyAn׮d@@> AAAC a\YN ~w8'~i |}}׭[Im6t0hРAJOOR(MU{,  M#,P鳗j+" *( x&0Y(FB>`-`"3lF2­xD!2+SG "t٣%84Y| Ԗ-1APYa"X,bfz fIu3Sˀ"s-; W>F#JC:ĉ+6O٭[SNO6̒p >9;k]f@X 6 TMiYs lmKݻR`.6%%%YYY=? 7΁ rjjj~7tqi͚5tINNU-Fa2[ 7"[ = hyI???faC1I)ܼ ӳb i4Nqiɒ%t!ݺɩ&0VV @z`hMs={aøk9n$GWLFRӧiѧKQJF9*&jOTEFjﱸLdĖ n5p!deKH{hPQ0hPc>KU __UP*}:w=zewfJ7n%}|H??EppիV[{䈢M߇vwpXvE%^^h\B"T {jQQuu~{8߇"87,mg4lk!p~Dpm[ח6VW+.^DC_\п?J%P:'+:Z.]FZN>U_V0pBKJ,-*2.!TWRڷWm˶jhjk}RRHJݽ $Yj+W !hfZ׫_Ϟڳgy0z}wk#pb(@5*|_ʈ}~~`z:Vخ Zu:pUL O7ܼY'229bS#X&GW\)NuEElXX]MXO9a OJJB'ˌ[ j8DЧS'PEG |Y)@"|}n0$IS@mh.Cy*2HPEEI&(J}@z7_IEK1 LM5TV˵哘ihɀtjkT'Tۣ1T´9 eh(ea G [ I! vPW}7H??Zٶm݅ $&̞;ܲwdI"$2VWS w%5 񎦉3s9r$ `ʔ)k֬sÜt[ V=Ng(-ժՍ>;**J_\L#S_RBUUQ{M{ºh2?ڃ$=qB_\b Yr aaʰ020 N f%hNRZ @aqk9޲4K|B$T*sTC0LxpϝR-lqq|+.Nɠ -ɷ@Qm0?p .2!ӣF{={v*JwKs`y1VC^[ ;RꊋccF@)  ^11B}qqcW@A:BF]ʰ0}YJʰ ѣW IDATt/2+U[k4Ն ג=p}q1v"4(Rwi%[!9oY.Kf((]q1JU:\8J`}aMiʃ|jzGJU<0TV"#Hsx2, TkP-iҗXJI>ɖ2\ӵsY_HR?%F8b)Gs\?2ÃUќtP*QvtomDƦU]_UUURRzLXs:u=p!/Fa2Dqoo_*#~pH a|.alZePߧk&9[:ԐPZԩ!CՇנCQL:{j+`IT6Hзo_KFsNii)dgg:ujɒ%k֬YdyG.\8s̭[Vwߓ5vXBX2L|ϦM233qq!MOSί 0ԨM٦G8=H??/-e1r&ltCx@{B.]ʴZmHHHG 8+gu21K8 #z4 3Ոߘ12t[|}Ǎs6`T($&ꋋ޾A4P_ߠPT*"&&"kj*0[.~aÆu裏N> 3g$Dvms>炃qq]? C(cbӗ{oPZU{EFZ #n1B7x+Wfggϟ??Va0-.>Rc 1bLRiT*ǧ}{ ySHK#U*HNA n Ʒ@;~桇:tMz- tڟˡN~1D;l6ѕ& ;vh=88xp1BCee᯿m($IJ~1wк`d &҅F|}Ə3$'5BXd$?9I.#u8$bp{aW* ܹ}w5$-v?ݪPV?o޼u믿~Ugzl``02SYYN6 +1\K̙3k֬BAQTYYYYY٢E>X 2lb06fjuPPhn'nBvvvff'ǹ0 #'$IRuq={9ɤ1 WvZV*Æ 4i޽{}ݻwu&/DNOZZڼy ڵkO>]QQn:Խe˖'NTVVRhѢD֮]{ʕJCCC'LSO͞=[Hֻ{-Fc0|}}###N^wf^^^}ȵ#= pNWPPpر{=xm۶zIoܸq wa0yx.]TTTo:jժ3fܾ}[V޽v$&&.Yʕ+Hee%k%%%$IFGG۷o_~ZV*6m@HH{Gܾ}h4+ [  A<ȑ#GuuuЫW'O2 ;=z^tj~{9Gy?z;cIŋA۶m[RRb4ϟ?_TTDӴJz7 ///$$ĉIHHXv߿o._<&&&//S]]o߾ף۷wF&M9rV0`0̜9377ƍ֬Yl|?111/_.-- ._ ]v˓l_{5Ν;/Z̙3(#|||]vڵUΝ;Ϟ=ˉa*))M,| #G???[q&E{-((P*]v;wnDDSO=աCo4Ȋ`0ٳKڶmu놼 [Fh^/ݻwGc(G}4((hʪ t:]pp0JL{? !!k׮555Ov0{ws>ifҤI^^^͛7]>Nn!`gĉA(ʩSr~ի:8z(j/{~E]#k׾+$%%;w]^VXut1((AAAWꫯvݻ7xA,9wMyMt1w\ƗB$\̽{7n8p?񏌌ӧCERiӦ1cL8ԩSYƎmӦMEUWW2g]fͨQ؉w=~q}wFBO81|'|rڵbn2ZGٚez\$e˖͛7'$$p~0`p‹/8gΰa`:t'N̟?j}Yf@vvĉ'O|i {WK,>}yfϞ.HIIy͛'O>}YPoxM6-_g555SL1cƹsݳ|2$%%EFF2'U*:(***//3fLYY٦Mɴ+W~'{nϞ=6ll`0 !Ġs>䓔Ъ*=m4&wԩI:uҷoիW#44TP(6m{ݺu劊tEEE=ŋ`͚5hhhu􀀀T3gΌWT%%%h-[6w\$Qx}}}qq'|lٲ'N[P␐ &( E=zĉo#ѣFڵkK.ݺu+Jia.7nEQ;vw% -[X`R\|QQQk׮IHHXz _|O$I.]7|#_y㈈A9ݙ$tRII AHH BIݻw=x3gfggF% DQVu,v!%߳dɒK.M<^@g_pBRs@ޫvj4n1dc2=,#l21>:w}$v_|gCBB.\PWW4E"8Wzz:0gwޖXv~ 0}tϟׯ_]]ݛoyΝ;0+W~:򺺺K9r$88xԨQ{=z/555rٌ!q7xĉVqǏ?g̘R9R^^޶m?  :ydiiiHH}}}h4eeeqqq >}?eTr.Uڍi3Hf˔d6ݠe3!uCZF+*teLLݼ@\wi216NӥRƌ!S}?Ȕ,AtmZP((ݻw$lb14S7]?lg -GL\Ypf eJ}l)ْeb0&z~J4h7mڤhڶm#ڇi ϻwף%шNvaLP 6yݢwqD. j#`lK]K* cIKKۿqq1 2u𤤤,]4,,ȑ#$I2 N#RRR"""JKK.\ؽ{qơ ~ׄgϲF^Oe4 wJy Gܬ V:r`!zIIIm۶Eh |}}W^ww}3?8p`EEž}}> ((7$?6x Sb13 ^T+SoS ޟxZƍ!!!PQQ1rȝ;w}aWZy/aaa;v8q'Ο?iӦo&44tƍЊ{.6Ӛt ͎P éri(6^|G -i:n#>Q}=4Mԙt5b מS鴜2byٚ<9vSU&v<41gΜꐐ#F@TTTee%EQ6m*..V(Z>my^z=FYp!֮];WߓC 4sfoe fm@g< l~ S&ks-#YxBY;"$Tl#yMb'3F $l[!LʱK2%ifܳg!C8sy晟9sU&yڵ&..ɓׯ={ѣzꩼݻw_x166k׮u}Off&{LQ='NFcttȑ#x 6xvj4U*MW!^}՛7oX"99Yv1->dGB>J[ij6q%W(\/j4@tRN,X_={_~sz޽{`a矿Kԩϕ+Wlْꫯڤ.`P*=s Ϲ=S/ӲP(S%Bn=~@PYdM={h4W[>eΝT*vǏI$Ig0`s>رc[S[[6!|/.. )))پ}Zmddŋt"f<߿rZ~衇222^~BXjL>}ҤI[nx^OHH2eJ^46{ ۘT7cr]/ +2|xdEdf \hڍ;-j-GĮ]j{ v,޳xbtz1ؼK?̙3gX ǣ33gΜ={ ~G.]zȑQFEDDTTT 2eC=tܹBSO%&&ս'Oܹ_rׯ3r]vMBȂbl7wYhɵ9s}!#z-TK >}Yrvz*A!Ç_ iXQϜlӦMqqquuuCCEEEA٥!!!ׯGF|JRӍ3^(...//g=ZUU5j(sm~ᇨ;.;;{07UxnSXjUjjMzSr8NFVfQ}}VC'QMppp>}sss/_ ^YY! St:͛=3OY^^(:669ѣ{LIq"#l2C^>\V;wnҤI|Mǎ '' _O>پ}|PPPХK6 ]8z貲8p\NUUՠA C=6oܷo_g&R&:"Fi!PVƹh@^T*Պ+Y&%%(Zݻ=BBBV\"$I` "LAAs%Fd>Ëw)ȴ\gCz-;VGeڇ;vlΜ9ܹs7o ݺuʚ6mѣGgΜ9hР{?@1n9 "##c׿n߾=w\7;9 #wNr]va'00pڴi_}*h> ::{]u&DDD.\{EEEƍKIIj rbǏ()44Ϗ3&%%%,,dҥaaaG!Ila{+{ qqcN:СC< DDDL8[sΝ;wREӧрQ̘W֭ѣGW^][[j4werTZZi&;wn߾}<ӼǏO?{bccGO@6mzݻZm``ȑ#Ǎo߾ܹsk׮]XXSzܹ'O~Ǐaz&Mƍׯ;&&f۶mxk'O8\'?u:wzzz||ݻeiѾyWoc|bcc &&F@?]v{=رc%ƀ\';=5vynu IDATG?㏛[nȷzs_~z̾ 9~lLL̊+Uy02/LSCGH{#[L$$$|7SN+**z'8^@@͛7QF;vرcYYٗ_~yA1B~ڵ[n쒞,y OQ]VV37%42l ;,t90=#Li2k-[L[x>Me#nSdz\HJJh4qPdee{.f:gzrr +~h|ꩧڵk/^l4/__8>7[? d);9~'{†KGܸ#[Lg|qzRܺu+M֭0੿]X>p9`xԵ8"G`q.ӧ 6\t),,lʕNMMM]]1c|jɓ'0?EQ-rzʢ@65MrB':?0lLYp8uf͏VaV7!Ȥg)j [dž|`%fNY~06=Y Ys.4(<^XiRiYp鵡l^k&+`9.o%vzL=`x!4m4~~`0|GqqqO<ԩS?󄄄O>W^_-\?>vXaa! X~|Rv7absƎ >90#Ami6{!HαbV-,}1zߵr yH8OW앐Šxdwg8 V8_Lff&{L9sRDJTTTBBtڵ~aѢE˗/w^.];cǎK.;wto3gv-ɴՑN򌋱d6jݽb 2ǹT*_阵,Ii:77͛k׮U(˗/7~ӧ>}&''+ G!W/3a.~u4 K!G z]v BV]K'Lpƍ={;v -PWWv0x:9ns<i=Ȱ~OJJo{{{ׯ BR͙3'::z֬Y˖-#I$ɗ_~922~-ּvr.P8M# nL+yFbL+ߣP(~'Pf1cƠ>saoEx/)!]tٵkBӧORRҹsJKK/_ =zP@Ӵ?(( M`MԆFg6fwc4p$upg!oz_Ŝ眴*hNFhr@ym y`nɆlz-?YgH>nnaP*L\ț2Y h.G+ 57NNY=>>>ZSDEE駧Oo뛜+駟?u:]~~~\\\6m8t?VܚʮӥY"B'm|ˈLqj ,8xI ~E7LQXŬ#bJZ479,-nXl0|̙޽{WWW={v:u?qĈ:Z.ڵ߿履~m۶իM6 /bVVs=\SSkɓ'{RR1 [K`vl'Vm(B'&,fّb [q滝C4N y %VQUݑW9):㚔| ','1|ŋܹs̙>{ ̟?￟4iRttY-[+%%%̵AXƍ3fx饗zk 111/ŋ̙[2nݺu'4pWZD|ԑ S#}6Rl5'$$|g3߿?+1$$䭷40tСC2\ڵK}OYA278@ tL2CI[=.;5倰 2Y`+j:3{Ffsk{0'㹟_lL֬]J$t,r]BRRҐ!C]me1-Fr4R8._Ğ={\4GV+ӑS*HVLqG8h,CرcIx}FzLn< zi1 +=eeeAG ʕ+3334իW ={6s~~~k׮u-q9-ƈCg%%_2*͌rP|VZ:}t1zr#hLˇgژR[!Cz[R5ۏRV#FŚ5k5΅޽{4}>|x~LBQT\\#_iz۶m **))̅G۷oxTTT$%%T޽{:u_fƹ.]2{׮]1JvRiy|Dn^4<;D>Jcyu/|b=/]~M~Vϰa_(W2eḢˑl~_b.䜱XSrYRZʒOit'#% |N4؏;6gΜܹ7onݺeeeM6ѣ3g4h޽{Ə_QQ.عsQN8hN>.5jԪU222xPu^xaԩUUU/_=SZ8,,lbddd/ܹÛ[n/^lr~4,aN NhLfOoY>5]Bɚ{tqxf2l{ެo mki󕙖ఈbJݐTV~us?mH/d^!BѰ;N.]dvo.Yx1dee;VH ˳rebd;30lLc{C*݂@1U\f$G8#G(Nݐś]VoC -i$ҟcWP6OLsފUQRN(Ll5c[77.uv233yv7AK,]m#lplɴHeJ2zw#eI!q$F%tyٵkYYY.V+#D23˴.w*HN+! N((p~gs"a$eV *)Ht}~bu>>Y-qIR <}97Ғ orq' ג:H )Z2,30f0vf3J@.؟1&* ߣ =5Sޞl)D^aIUӉ֮=ozh #P!' eRlZ__2xZ̟o11GJ)5#& ze "5#TRM71147Z!t\[h/7xрjvP(| ,ٳ'g5nxդ&Mdii9nܸk׮]x%''?zhĉǏ7m8ot?Lݛ?ݻEEE)))G3(5/1a:A #J5GdH*=NU;wnTTm۶W?MIIY`A-KnӦ̙3Y,V|||˖-Y,֭[M6_ۿS%PdZB\fe2KdcEG 4qSm; (qKII! ,PP?>=sH$ٳ')իW^TSЏBz'%ܒZIR ԞLfJȵwDah_VB IDATŠuUWW;99L_}URRҙ3g8miio|zK>B?f(ئQ01T2"PK2@S nJ)@։J| N2II:Kux!8iV`dEZ tw4͌/: LF2'!!Ajh ==0-7$w6t]4 Z-:iZ+5մ2w݃v0 JO1#Jy{9- ys0[IjWI`|Nt4%6+P3`7NSεA2jݣ6>b2 BIS@ZTZAT9i;qՙUCmiI%#Yg2%U_%v wAD89&`R>+P+rM*ɸ朜 ;v R|$0]$Z 256.t\ =e[6b2UGvKTջ+`Mo|اbΜ9C}*++֦5X +:6 MX!s17_*3;P3ξW4 ь_̠G)9Jڕ=&oy{J^AZRmQп@_Bр/Ś{۵߶K9`ҿX9e;=#sl׼[Gzh .yFV^A !.2C) QbUWW{zzΟ?…wɩǏr\''>@bŋ,e˖&LqwwONN&r6lO?SC-]ꑉL)I]~"%S 5T @5o5\P[\%dJsr$*` 0D+֘Pbxyyyxxdee999y{{Ϛ5CBB֬Y3bĈ;w3?lb?~O?=}t֬YpiӦ~w46qa3U֣(qVPɤ)AÔ]Փ)w$SH]Eg+{]/xy]G=\.^|СCV\ٿH׏?~ʔ)7nrNW,Kڸq3fӧE"رcnݪXqC)F J LPCnj28G:7{ٳgWTT?x@r!n/_Jurr"& T9 ꦥa' AEbcHE+oXKڐw2]m6djXy$_{ѣm۶ܺua|ARRRUU޶mۑ#GZXXŋƍkΝ;7nqww߲e˩SV\imm]QQAZU222̙|SXq1A3JoNS4ѼOJݠ_IE3ɠ4TJ׬9XSM+|f(zUR|| ,YgϞbއn֬W_}uѰ۷Պ+,,,"##7oT.][B`Xte.GԼb}H$ Ѻ)ht2@I;W z8 A<Î;d裏>#iӦM6S"`ԩSN%ǿmfhpLGS7jNvs*X4ި% %5S=LܡC:bbb 4cWt @cE1}L; -KZJj&0z.Uf׶J206:W1n 2~e oE-WH_o%  A#¦G䭇b[[[kUЏBziJLPeσrz.ԓ2B\ *z. 7dƽp(^%11\ADh*_ZgdQqVcK CIH=F; XLa]f2L_υ &+2{AD !TIuQAA4@03,PR+5ADwȚvS裁"ל5AF >)=L!;hH$$$ bIHN|q=;ZBffBAFBBI%_kx.F* ߃= 1nwqabpl߾ĉg֬Y#FЯV_}UXX&Ocǎ[ҔN^uػw/=z2 6k>% xgU|٫.SѱfeR-hK=4>'$;G\ӔLa&9997nzuuu5NjV3'D"-srrȩSv Q?֪&%$$ `|n0 '&&& `ذaT4*6VVV`ggꚘXXXM)))&LXhQMMMIIIxxxlllLLLiiY8x`xxxxxMQ/_—/_z{{WUU-YT_t bbb$5k֤Iƌs1D*&_~={ɓ'O0ܹs%%%aaa~yHM.ٵkWXXXttRDed%_ߣLj'P0%uT{>ϵyf~"s񉏏;vl׮]Ǝ{UV'O;assm۶9rdg:ess_ӧϙ3g bx͝7oצMv5rHJ1XduMMMdd;UVVF?|Pªj2qDR~…mN:|~UUճgϖ-[gϞ]vJ `>}$Jw~x5qv5l< B {Lܒ*++{9w\kkk4i}Q^^lٲdhѢEYYYVVֵk~___@ s8ɓ'ӬΝrʆ9ު)Y6ݩSN:lrvH$ݻwtt4URRRr=rFT"ݻwSi}Jݻk׮p8111:քкu[nٳg``@ ȁ=zTc33~Æ [jUV"Mbbbxxq:GJfpVY5*P%uZSJ*Dc]VVVk׮%+5BdɒŋoٲСC...Ow* UmB7DDDq]}i>7n܈ٳRSSOUTT4i҄ᔕxďi*&/^{ⅵ!C>SWTTtm8}Jtڵk$XiYʄB!$&&DF:_08ТR8kt|컼S>>>vvv=<h"r|ԩ]v5idҥgϞVZ͛72::絵?#{xׯ_׏;_~}ݳgO߾}S \˗E111</ѣӣbbbl6͞1cF-6kL⬏ȑ#'M$߫W/54h_wIjٲ߿L 6mDďi*L_w?lݺ|̙Te˖(]?k,GGGGGG5Ǔѣ'O 8pǎeeeӧOׯ_3f߾}<ڵk6maXSLѣ1c>|سgϢ"P8k,Xl3) q z /9|>_( S*Ԇ e~nذرcw̬qpp+&t5@ =zsjjjWXrG݋}yN5jdooOzx'''Xv @K.xyy-X+EEEۍ7lv>}ϟgϞ۷o/^hzj5c JOVVV5nݻwNHHHfffYYٳItsͧNpuu>}:IP>yyy6m'`°0WWիW;wN<ĉq-ojjڵ .8p@kώ5jԨQ ŗر$[[[SYZZ;%~LSa%}MKJJ87|#^SzK”jϞ=>} pN>ݧOWZZbŊUV999=|ڴi;w$֭[S{Yb|8iݯl5GāBɓ'.]͛KRUUeaajժC7?C ˗/sN\\ܶmۄByZjuȑ͛7o >~~id !߿z;w>{,%%T;w{w#G A}}3g*ބcll+W^~-{VZP]]HЮ]'O~='} :~g}┖ڒk׮322JKKI\]]yϟ?uܹ͛7ggg@ EDUI&uuu-[$@vZyyEW\\L~޻wo=*;hg1} '*o%SӠ{?fŊ1c^z^%^xO8oy&m۶YfѰwޱc~gEEEl6{*wHWXbذaÆ w9̌bݽ{pĉ!!!oFbX={T܄L!TCu߭[7%%%SN033ر#4jԨsĚȰ#xqqqVVV+V1bĬY #F =Īn@~X,СC=ztѣGX.];bnnNҽȄDZjժUׯ2e ͖ -Zlݺu׮]P/SB!Oy%}L%BnҁfX~ :uÇ+**HH$jݺܹYfWsc^pj^D(w0@I=4''um۶իVVV6fggK( 4(44̙ӢE'Op\__߱cǪȩU&MD1Ԅ]qqqmmرcA6m^zLU&7 )SS~OSRR"&IM>Ô!CHҴi#~駟~TRRBpرGq8/_VWWRaM4Qwqjjj]^~mgg}O?յL:*B<ŋC %/_M{"'M8mPД'7@ǎ~f$3R@߾}׮]o߾ rkׯ_' ޽+ӟmiiYUUE98M1%ih6mT| _Yf<Tl6>Є^mܸNNN۷ofggx{=r,Ҩ Pd GF?N`Q\ѣG.]":6lTIaa!c Inn޼9..y0fHH܄Rf}wfƍ7c ӬY%KH pt"{ CBoۖqf{wW83dVx'Oܽ{7)qtt֯__]]-Zj%a8r)SXZZ[ _Z33ڣh(/VСݶm,,,󫪪:tp>r֭ iӦ͕+W.]4|pyBw.]X;wvtY__oaaAR]rɓ'H$|r^ /G ><99YQ *↻ҭT& y99AAS 55֎:Ekk-}>TZȖ6*@<tuƍr$vš0aY`Ƒ7EOQ)yz,t T1fbl6{ٲe#G,YRVVfffd2sN%3fػwɓ׬YCb$ QblllnnGqqСC>|(sѣGC :u mҤ 5۷۷oDD̙3/]ԲeK }߲eWZ$ N4 ٳ'I ț奦& ݠAcCQ5TZ! G0Z>Jou6M&{ݧ>,_gggi?vvmFׯ_Oo~2e oH<-66VZ̬vvv_t9[nһUx\vmٲE^[JҾ<O|]B=zdRu˵\./''cG?3dVaf M: `j3QbdddFӣG???l 0ܽtjs;ߟciܾ}ڕyٺA+L( h@>farϜ9stIKKHb#G 5uoܼydd^}tx@PgeVV֥%$hoL%`⣏X3@3Β/h@:KTR_~_ ˳0m 9wˤmc=0 Veex`]BBBBB)1g/fM+++}lIDATo߾`QI,̀IC܄ռ7izB&h,-In:Wʺ%꺺ڪښ]@/of*L$`QΣ/...!!Aă%88f4^Hj!Sj:hi54zU$y'$$$DDDר{rssСRm#@f /cGFF~' )W^}ҥ;\R S yonRudz++ ,TJ2S+xd #8|ٳgF d> G&8[ƄQ=@~ؘ(..#QQQ~~~J@ټysyy9Bŋgee5oޜl߭ǂMq-,d6233ffuuo%BL%M.]:`#H? ѧG#Cu/_7n\ƍ-,,vzR $BDKDEEEEE[ -$AB!CDDD 4HB3mCMXX\{>,++}a{\33337eJ$cݙ3gȶ\[nmժС.q5dȐ^zxp2_ߦM.۩S'63N"#YYg=& TjP(:thVVܾ}M69rAפI 2 ʉXd]8dF˗cY(΃ '''00f=zҤIZR&ffff6,lv}~J2S+ 'O,Ydܸq… 'N޽7|tѣG߽{tҺuo߾sHH4a„cǎ3o1bD^^$5P?MqHz}c3BT{RRR w^xK=M6]tįdj ߿:hv`2O9rPVV?S,Yo߾{>>>ZP#ˑd4Ґ\ 93dV4aX .O\6}… GQVV6k֬>}@pp_|ի'OxΝ;w "ʕ+2s'--z:-cE5ƍ fX‚VMݺur劂B!.Q(òyL]vqjˆٙ9.sνzzիW m'7RA*ғ/BDz9Ίד**I|I)L3zh//k*I6%.pPH+WƒvjBdt`ch8͍lh@<%PH> ~0 NyvСC;twٽ{СCBt!ܮ]wСiӦ7n8w\ZZ"u@ 03s\af*LdfϟOm?,]x\.wРA2 \tibbbV^xqƔ Gaoc}hk"=l F&jvO.]ٳ .Ԉ."Ofш}!0 4iݺu֭'r֭_2 )lҥK/_xbggsڦcGZZ.)9x)--! jqRZ?=z}ټy?0mڴm߿e˖wܑU>}n?1ɩ_~lޡCbbbnQa$᛬dCg BIf <[n)))Gn߾=nI|'KFa>^2[G&T̙3q֭ŷB%555\E׮ ǔj|>_-s&$33odffCĉ'N(^ˋ<}ӧǓjbee%/OOE"SԜz#˳Dh6}ԩٳg?~۷_f @L!:?u7t|]\\4"d~=˵,x2AcA"sO:ȼL%8}P!Ӛxԉﷸۨ `TTG:eT-fjy1}SSmm\s%YQon 357[`JO}*݇j}P0}*L*4Ior+--!ZssxM $<%55ã=TZ{R{O"#MMtjaTvh> ܧQòQ5]2?X|ↂL\f3&$30{D7h:`)41GA4F܇0@TTؼ 5$RxOI+d%bXH{Dc(|kp4@(z$Vr(//# wNTZ!jYg4UT%vO=?n}ѯ~tV#:WxNwyms<d_}$3BĠQbzbAt y@@Ω L f*L K =穔=h 033dVPb!ַ  :A (1ϕsMA=Vq#iDDD( +J !l@A {{A1AAT@AASAALLkkk} b*Gǎ  7LA$h aaA@{ALkkk <bDEEAASױ# b*݃  v  =  4%zٲed4(M !Ifff\\fDbXǞܤ$r0g1}͎bRdff[A@vb !4(i߿:! Y0AASAAL\(! ƁFaȌמd n4>j8o<}br0|QoIII͚5۱c6tCz^BBu+Y=h:?tйsjkk]\\wQȊ+;} gg}oVF%BBBu/"c{ٰa>v옍 |wpgggMNNvuuݻwCi@+W~zee%0uYLW^͜9,gXO>=vXUUSScaaAPݸqŋ׮]֭)LMMR 7oD̈́h cӥK ٽ{lr*;;{p 7Q=]UUխ[s[E4_ ?3f]yy7n !!!^=z`gΜܴi2d'wBIII\.k׮&Mjٲ%сdnnnIII={;w k֬;*"Tzzc@ԦMs:::ҿ4<߸qw^rtt|{={o-${C +WpႥeHH%''rܤ$ss>---((hܹÆ  /ׯ&/ l{5te:tzAY _լt鼆Rmf=hѢWΜ9Sߊ(G1,))tN6lmm?ʀ@HZZڞ={lll\+V6nŋQQQO>zɦMԜ;w.11ڴi\.}۷wppP 0Ν;w1gϲe6nܘ״iSss󬬬3g^zUf~UVVVV-[| QN/ hc TQQѢEݻѧO{{rPp8;[7wȑfffCȼW`ɒ%O<oϞ=gϞ5͛Կn ,24Ird[ggr&͂.6݉N9X?==}Сcff@~~~rr2|'EEE񾾾 ?\p!é DA*(( <oɒ%.--x^.]deeݻwX9~~~/_}ׯ%ؼysyzʼW._ F1cFIIIDDDuu5޼y˗O z"!bii٫W/rq(mCCC9X[["J+akkCBBFsy.![negg[ZZzzzvE$ݼyйsgzʼW߿O4ZJoBy&1tNK>]v?b|jiP[/`-p'5 Cߓiٲ%DW\ϥ+.ͽUQ!c&UzI^~HF%@ Um[^v-%%@/("{>6l8v؝;w333333kjjh_ۛեloo]vgp ݫffftڵɓ'oݺeooonn>jԨݻw_vF*BD{\'.4}:++qyyy7x`uza(Q|^xѺuMVWW m6ҥ͛7ᭉcmmݦM25FUf{葑qƜ'O:]M>}̲uѣGкukq? *g~,E:a 3 'oS^O*13͛7eeeJ &Oiii) >#;q>}pǏ7LٳgGEEiݻ/_:t(@W xOMiW-s̙2eJ jkk}}}W\)Lꫯ۶m[YY#wwM SF=&+egg_UU_]z-<<<44T4(ԩS| p8YYY:u">tF&C͵$]wg.:}&kě/77X(yFFƜ9s-[6gffyt!L~~~1lI O3IޟKK%h3|1  bh#M4ўd /)cc}= tOzHZ'ړ,A9=pA@{ө:A1AAT1Evۿ2͎b:b.D}p1DkS!&E\\U@ y"HAA1V0AASAAL{A1AAT@AASAAL{A1AAT@AAS3IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope1.png000066400000000000000000001214071247673406200255050ustar00rootroot00000000000000PNG  IHDR+鄯tIME 5LtEXtCommentCreated with The GIMPd%n IDATxuXǿ4(RRv` ҡ`kLlz @1^;T;3[<>̝;wfϝs?s(p8 YSer9 RJ-y䷒Q( yyUTT$qiO=j{]e#CK(ڬ$XkZ~.6˨D%WmRr)ZQ̌ y oٽ!()-55 ++D@WOoں{T'_CGQƆ`K XgLK* ҔWz1s/_NJLP̤FӯCD  @쌼ProWNO=}oiH @(@lQOX~CEEst`kkV?A"ZCJX%@a%@T(=Qlc@~|eP R(1PUf._gP}pUfֽ{;w/|{߿ T!؂J* sQ+KiS%d+>+UR zVN\p` \ MM[+/''[֭U)X *F>lM4*<9aa׭Z\%ʪߨI Au~6W:e M 36ȴH(@Rԩ @C.b) WSz,XSJa&ȶ6Z s32@ G4U,w:*2̆/BM]1v,b0QC[Pf @q Or^6UtaPV)SϞXp\lܱ5jD// P`J #ByN) ^DEF")) yK$\lؾ5kՂoϞr K(q UD ."V4Ƶ++1ndpzeU Aڵ Khv 6P\  =yϟOc***G0vb}p0jש#wʀʏK(] `LKEF(lVa̸qPUUVQ ꘙɍ2 `R0@$GB|7""0p0,@B\\/źm`V.yz"--PK%MQf (@Zf )KRQU֮%fe)[Q^=9e ӁalX* .ȫ(|@)>Pu=1 A_FȀPʼK-PT7/K٧ɹrvk@ʠR2".@*l20L,3PN=0-2hz2CA(PStay4a")]ҭjԬY#rڲ5W|1H`(@r0w͛8yru}}K]-[Рq|o"q %H&,((@a{aae.knp8Xy34n Ȁ\$W c%*" reGQ6eT `>00E:f :0THjթ;y8REMиY3x{x d!W4($b"P `=#R L6º 6Xp8Xq#RSY+PP q ;S(" UU8TX491K2hڼ9{Z0JÈK([ N!+1aTܻ?/ Le@\BK(@\B%Jgr' *2߿Gw//O6 20oѢLe@ \3$Wf)@A3  GQ+ׯy˷f@\B7WPBBQ'O3x }2hѪzx %%P P )r6^TT>~?4 nZjoV HLrG`($,׊Ǐv*K_H" K .؜ɼ"XjN%%%F۲nE)=C;{xw㑁 0@bSq H.W.t~VϞ<'O3`#Q̚C## e`on!V$WY &3W.tڕiEaj #J_oHLH(0Y2ݽ}HJr(~&ܹ~aa>\l#F@O_ P|>J(JJ(P dVψA\idffoQwwvP$0*b`f EL*8 @dgӦi:w2;;۽+~|^9( (V\Oo܈>>nhw//hW&Y2g28§{7$ K(AErN2RSRnډgN½$T`؜%KV$Wm Ã\D,k`Wp0\tA:uX),ZB AaVLaΒp8vcBo\_Pb $@`餷`K^ʡڤdG^(" lߴI3hܕU (^Ν[W|OL$K( 0~+JMCE 457g  * pwÏ IJrУy ur:"33[ad]UȢ"Abp8wsЯ^u3c fV+cc@ f ȀKhe62CBB`Z&[[U+r ߆ZǗ",-\]U K( U%@dg1XN&x13cpQr779 B5$$j%=c:7kA2K?Ӈ`]Tn#6: ]]46o^u3=TTUQACC5]oѠ 221Ep٣0 RY  9Ep94\..]0#\96F&&QXT4e悿pЯ[ ;A߼-A3sqiL'M0޸nB&Mh$}OD^b5 =!ޮPUSEG[deeԑChަ-Vl ټnEA&ƛ/PVm;ZbG4@lR,MXR,*V x )(s/{ (@@k(^fF˼<;;***eQURri=aϡ 8'M-`ek{NfH8z9\.{lN߈* qq( !.=lc捘0{B*I} *2qq[4v0/#/(@3M]<< D&][633aۼ .{.Z>:6mׯ \~imfzh_ [VU^hnZM `QY)pOnسe;;X[׮*9N= 0% ߾]KhkeeɃ~!uIhl߽eVH`$gJJb{ BUTTp*\e՝6ozx§^4b%{bRyǘ_nRߵOţGL ț:j8o^&ľgqhNۻ'A>pKImGc ܸzw߸l2<Ob7|dr`zCj:p Yw@Ujxp6/_qcpHOnF$c'W@P"(*gOG8U /V66iV Z+`yp~ݐ/4ZCJ ;1_Gl_CS(++I1n"B_dUQw?To_@GW6Nv=<}٭445_j?w^D|z~  W*~۲o^A~ذ.uۗ/ț >f 6.>a2!:#+j`T6^PK|N^CG.&|Efs灃F@E|Wu4ծV @>SFx%/^sss1wx 9ӚPjUDG]q73!e; dgg!gk.ND/>WRb"44xggHOK[Xp¥Oxko0GvDI,bL* g¯\ $ (Ee@AU:9sTe ]B9\nu55w x,p+.7`9twn\Ǎy6ƏE$6UlGgOGVFXʼnx~y?~UEJ8t*U¯[g| Ip=z$ ٷutd <{/PBu}T+TCog tGWϞrx)\.\ر!W uu ញ!gl ~L3C̛4E)sK89ȴbq|xGu##wU5`Y!BJ\B 0I445N%)%k/G է xO?@GO/7]}WvHFW//hU"/UgP::?zhgФy Ԭ]gⱶVQamgu Mhhh{?~Lj fCmhֲGƗO;l8ܺNzhشV004*u@egg#>z A)&Zfu[8@JTG0nl1 :zEA`-]M1ߢ{hhh`Hx0Tkش4iJhشҊq ]%Sc T !GGP@ef:ffr\vBS@Y-ِ>w&( .i|N31*JgLCeutwp0;u)IPW(DLĿf盉ܻȹP]Bie+W1`%ف l';xlVWal 3g7w S*SiCJR*{Ѫm[4kтτPs/aBf 3gw2  \PY 1aa`sPM*+H)@) > 11JrPS":/THMMaձTgU5,7Јf ?/pAw7>wF&&d% jSdE@/w~;EbbbZƐ?P0$( ((@J,3,l4%iHTMo'ar0R~]PHh1.2-(c@߭ cc7oib@ Y%Tr , 覌d+lEMU0~Tv>j4qq 88mF>tC.TA@G*m XQ7U DEF">6Ţ%I  !>N(\%`t_w73b0QhZsT,)޴pD n WaĉPRRbuV%lN"StsK|R c(gH`Z Sf|?ybR@wXX׎˜|WS׽ ,_~9pp8\p8p\p xw1mqr]i@YYYǭWp+< n^i䊎.hkmr P*@Ϊ(58u(@]BCOBjJJv רkkLS.4՝dnu߰QXY[5U_kc'o^w^T^ \=]Rf(tM)@!9ʸ<Zq.TQQAhf/qZ8n_p\a=}+<VG7^SJn%cHhԬeGHbPտRS*ʃ-%PX/gPGMTy7[pw/_V:'~&vrɏ]*]c\bx}UFEF"7x+_o6 JYY\B[ac)@1rT|LРi3  <[Wt$EG\֓ .ȕ 񌲲\,OkmFݸV}P@bdZCb y-{nwrTTxn_-AmmX;ӂT& sGiQP?y` WZjI|1XwEIXP<ޟRg Q%IQyA eqc%==)lوN1̣ v]!4P%iP: G J`4n ϐi /)ɨR*s sc{w{ c]ȸ2 HO{7#*" Ð k'JT^(@A3nDX AY ~n6zttAY]417To'fʹۇ϶iy ï **ݸCSStpr vY 9Y`)H Rk;؟0bb-b~Yz'd6ѥVaȿ(n_k1CX^Ƭ렡[ f#?v ',LoM1B㚑V4Jͪ`צ5?xL_2Ll.K$2($(Bes!G^=cX$ܽ0DE!77֎.o f )@c{_D ̬j3&Bwi ^ X6gb)@Qr}*.^ehB%$tɳ݄s_aKY42oâ9tæ )$w)ċgKlG;JMIySvugl@(KhE3Ԯ[P@ Kr?Kn)@ڹ23mD_ATDb|F;;X9滱֪[_)@\BD@gVg{0읝UR@.GArR`_b f޺- WRQSC{{Go#C8{x;ͱlD?_%TL /tfرyLI hca.DYE c-LQ(Ay504{p??}'[07`h +GgtptEmr e+rȾ0o-Z` .K\BiTnl,GinƀRRVl}qVhܼNƟtw"`Ha.Gy3>:J*l]5[+ =>D xQ5Yi۷ B  \NnQv Ά1a6lcM2JkWYXA9FhoϺ7xȘVaM @(_ACB`PVmx C#*" ;V/ǻТ]{X;Bfy2UM(QijN"POatUaes !f>I-S UF.G K.tAlBvEW%%%ˆ\}=1m7[6q#qcHM˗K(r}.}ry,;QJ]B{Ax) J-p'" oDza +Gf 9Ƿo:C*\׮\F;+kTZU&@l ۷ރYm `˴!{R3J@' * ^ Ѧ-\a< Ki@w"# /o) ˤF(@8 ߯R&?T0YmG;h =_ŝ0 ZU5uX;PES@!PY WW +YŊdggo\<&2s zҠ(b(o{ QWp'*ݿ-`hںJ#ny=_! J1ayxw_Zat @^^~l}eKa]ByV+;{>lDKh10.+w _ ~͚/`";1dt$cf^sF ™{-yJU~R!ѰqL3[yT?n_`F` M999ph돞t|  a޺5[yaauvatK޹1`Rpݏo@MC&5k[oބ X~ {opZ50+;8m'2d*^woĻ:Ǐt K79u&mmqDĂPA|ai`ovVVرq~cx8T)ȁz3"gCB~B,_=PA~u }ꌼgRLC|l N=۶ag?# |% @P/w\?oyH]<5o`X7{LE /a'AT$\%Ԭc˵_9{ ?2@6m @н {*oX#ü%;5MJ Tْ[V[֢եGEc`*U1ll zySg֬acaecltY /7Kf' cX` OM-M޽~Z Gaaު5ݺ!hdffӠܽu#`kׯ|ݻ`:vPNPSSG:U"%:zxԱ?}&5iNNwOL NGBtttڀurƳǏ`&coPljѥ'L^)R >|N`$>zރ<{hmiŘ, /_?~DhL&lF&VMع+:usW|sϻ7-PU+rFFȀ:+@z0PƌϠ|BF AjJ2ϝ`cc3LjD025"˻ׯ-h58bcy1#qd.[ϜYY (vu p8Xm'~#f\|cg.^!owvG~S$>"4hҬDqqߢo}ʽKOǏs>Dz/l;_m[} gL)Ą8T74BUmm|Xlkcזͼ6;uݻ***HNJBmmc;x230hHW?_W ʵ˗0v ì~]WUEU?BZگ8AFqd.|Yp?NЪRu /e(iV}Fظ| Θ UUj:ƫ;`T0{gyyy6Ɓ06 ,*M(blP5kFHX =2s  H ƍ/œ{wprܿyyyxɽ;8w\%Dѹ:8u>}}Ͼ]ŋGnPeA++1)I?pz8]ChvZM5f,Ew{0lPACZjhFHNJ_cZ@c¿F E hea O?$aWp0h(vPWWpTܹmU͛cJ)|S'Qn=8u\ gN#?F*hia_qA߿K'hhi'=@=xc)8zY"i%-+N]SM{ky6سi=z ;/@+߸ TTTp`\&/CFѸyKHǏ[bV KУK:{F>=fDDAMM}`ڙWOJU}opĄK;FQMwkPV,An^.(Vo@/8w &=CCK ,?S/Pn]^K܉`Ѩhm,bP GOYhjޜg'0Lls>%%.üUk4o݆W-=- GƇo`dj^V-$Fv;p0޽~;g`;6NnO>©vuPѳ#Ph;O^>y<4kTܰyyypqد_ٳ'BƋǏ>>hѶq}FAC ZwΟ8+{Gh?<V]p8lgI Tit ]:m,lѩ qҢ=7mAnk?9د_0b,397"iH}wto@UM &E!#[a`o?w&V͞ >驩H]nrO)ap7" !!6l0Y[,%0ͯgkay - Aux))p'& Q";A]Cc_|*/My7~e+^Ąx$'NzPQQ 9) )0Qjjjiҏ70V B$hU;I?UE`dBCSgC44pZHRn^R x9,^~a?Pi9X@+ƥP6C/qF<ՓGt2~I6?=AzJ vEQx8܋@vx>=v5j¼%ѠYsݾ>B5==8뀢(\޿߆'ZT\{\,]a#ںzwF{G` M-Zm*naO?NDG÷Gwٶw,++ |@0FC``OOױӦmGzk,E[o=iϰo eddus~+?Ona-S؋GMz^sWhU"3#o0~~OŰ1}x,s88{{( ոU Ohgc,=b̹;{awX;`ڲ5m,;- i)7RSxrr!pLPiP@EU M6'0wuٺ&zt}%761-!/NEe#^(,6Ap5w&&W/^~㻂1_~0F&w#c "Bv8+^|GͱaDM,7R8#{tvL~͘Mj(ۖ ǺxDQWdZh{w38`OPcܸ&V͜$woYE@ IDAT3 <%7m N~>͑+wȶ oE{ C:u#>m )^My]q`oXzQ.'\%%2D#Ǎ/0`ꭸ )GtqtVVhk%;_aC,߰IXu#c,pLEEv+h~c ǠV=g;?"[;n&A퐝ŋ-CƸV-uE}^V.0QWOCK :/ױQATza¤Vm~ PVleee LQrsrH&++i))2FRB|Q@Nv6b>}@JhjU RSS5l"4pt|*}QI `y% `~- i-yy-5e$ä'( 1%\yӊ1LT s)KB \K(yҊS }@0,%PbRϤL(@($ggfK(P `}lSeYSRJL(@1sEJ;JGl"BrB d=cܛ$LB*և?ȷKP+*=A!.H%,ˢK(y hcDP ۦ(J /DF\edP1% <ʞ+ÿkiu)Qڔ,+6(S¦zrG18JQbll+>IIPUځ͛#@ !>1?lb) 2aaL$@ҠPɬ])S } =b HBBdc-i\~.[[" (,'D? -TXOf )Ϊ(P)ǚ%3@AԵ•AUQn6X@ ZÈK()Pb**54j454QG{ws/T`?֕z1P+r%ag1X| (>0ۗ/z<UʛV,çxu540$ WOH3q %p .$0 )@&wB PLs:8:%~J6έk؈q Ml*) `EH`X*kakrd/?'3C#1Af*8r4YI(@(@4+F\BNTY\ .ۺ]={ĤPUU+ׁ c? Pd T)ÈK(# a+W<\- (,R>~bujՃV6ضfH`4gUd1 KPE>*PtdNX;~2ۿ1_K=0ϜBltt3+Yq % :(bQ&wt "A ("+3{6oISmwh2[Y]=}8֐\P$Wf ]BË8 #Ѱ9[)6[Ozs >nN:QӊE(Ƈ  D\Be $\Vٶv5F$u'!++0Qn^={BҠ+% Y\Bk.I ˍ̀kBn.nЫnX8GwϟI *g1P@%yJ: 3=ɦˋ*!k1snؿuT(\&YD) Olʸl(+V'Lѽ#I >3?@A9yFZjhDr?b D\B J)@ߊ+֠2 CNJOR?o1Bnuݛ7\C @rmxZ$+aAc] W/-xZ}8gyU0J(@(6BlLDPe]Bi)j`Ԭ( w_l]Ur `3W4ÈKbҙ >* 3+CcBQiu8sp{Pg2 g0iHJ%PʥU۹1P_ʏ,\F7t86-_BCP*a#K(RȋR1%w>rCƎ˺:~"".^ׯH1)я5q \yI(,;yS@aٷuHϚe,UaH_] CP&& (f`fҞ+OPx6=܁&+΍kC€]<{ # \lѡ`.tʕ' (<{tNXìACאPTpR]CE D*\ %N_E}TPx63+ 7m3" Jv+32[=>B0@r0&("0a^ ChФn#޴_>~y eee5A$|,Q3 # LAa $bb ȉSP^};WZzEVFΝ%  +.¼iFØZ@ftut`m(v_ڎo_E`œXd!rrrH`Fr 6 =S^#'NaՍiS@ Fرn +"Y F\BI`q e9A (W)ͫa\=%!;366a x%#6+0+@ɝGP$Ae{j ?)BؗoFY cgq+򇍸P+= mZ H{1" PQd{':V+/|\UN1i*N@^^iR f )@X3Pew h6PabÄ}k׭oPLP.qq A4frqhVʕ+@I @\B%WcP!eqg LODEsxP6lTruVrxV Y]f(@ f )6}J7MѸ1. $$! + G%*$.޸BGW [*jjP@RQǂ(( $W `R (LA.Bq!c'=>N/ 7 i)8wkkt$0LR@\BYJ+@$3ͱ 8 m[5j0 K#XPXa+yֵ;(/iR^]k]E1n+ ;#μ{f=9[YlW%k5\96dRC^d|A$Tcn+KY bٻy#nj}<q>}k|3pN\lwU \y0LZO]B J[mzT 9k;{hJ;0m /j K|X"W@ߕ"W`) K>~@ /ﵙȶSF-FtmGtT$依=|۟Chѱ+n$&2swrӗ b͂DGrn,8n߇ ")1 cS3^ UU~O,d¥\ C $!>8+ j 9s7lg?sM:+IkHжtefDΏ3޴ޝT]3+kZuك{H @U6]Wj1lϩ;>5)1W/a蔧M+r A⼹mXǡg Krm}#c sc/軄&sl6FMZ:>'M}=t?+Bݨ\U[چ biڶ#^cic7D;%%%4E飫O1S(_&Z6r,_Ql<~b p(Lѥ뀡hRVvz8w{r[מkhKs|II;nߦaНK牎Be|>Pv=NEMro[ IW U=Q3_ϱl>urUֹӊ\2Pd0iTf9#(#_nZ]A-^[.tp,p7fVl=u9GѷUmߋM|Nɳ{wĮ 4/`θDԌS~#\7 jی![R oAK/삖k<}T{G􍌙27UFͨZ~.-fmai tkhԦIIz6e{^ MVNLYrzN:HLcϻZ i%V=nms !>QŠFm;8~sɶ ۢ oy1V5iИq`}Sdц-hhjɞ|ju74̟(@\UUUUnGbB3F RN2))4fsZ kRŵ.o^{#1>[3bvfTLrpv!1>_`@ʛ 绮;{Q=O&2ʂi"_TMdg IDAT`Q_8GU02)Qh,{u޽-U) SR/IBLdPى*2)2)IB2,4c{ws},lƦf=*oTʁkwٲb =at8T.*ѺqѴT.Q-VWӺk<"W"W+@, *wAPvo\Gm0*PAɨgmgvJ1dTZvʼc8}`/-]I]Nq=Nr2"[(ʹtɱ{(S"zvbd<}S+rH`EE"yLJ֓J (a?lbrN&y$>*oQNߋC)*TV,@t:WAPLM~G3m5/? ,X0bȆ|eX@way%\)dpg˄r܊DˈMPd1Qhܺ]-PVVЦJY͜&Pp<&X?  Y@9͗\A.^CrqqmDA9ܕ͂K)X0jl޼tc;ؘhiOZ\ 3Kap r}O?%4/g d"oڸ.njENZQB3k=ɋGx%%%+UŹR+W\*ن.ayW\LerW/EĮj iMHRϡLYʔ Gx<}| ==̭l0133sM115G9*Yee_%WRR.y-(5, T2xwoh߽W3Sյ0iSYY{ǴD29ܐJ0IMI!9%RIMI%Esj))$$*r=9~rSRůgvB| '(**@ @M]Z3i 5"W@`E(J<@@no }G~B-|OL)5DgU)++]-]UV~)[O̭Y$&{& O ${Qc)T,@l~˃ ܦ[߁N*%'*T()%KZOBoK\B)&Z:ohI cc0/iǂmq(ňYJ* %T.,@òےhyRz w=uD,BOA ^?{**o;V.= ]{1]S޼x}8&ټ.12=&@n o}2.:oCK-(dDS{0wUy8ֺ{_H\:']c|&ʃar߰ |alAY@n^A002-@R s-(D${~>,@u M:ta=,76J-`)X@$Ȓ5]ՐPEc9e:,(8Yhi߻d,@?oxvg[BMWV9֯_C 敏QB RGޮ kiZM藯;W/&2Fc,X@vWg)kP gn`eȀfut~0 Rz, DFEw/_}H1.צ- `.=H1}.ng),0(,W MaRر*jTHo\VGWv vRq&SF ޠDFΊ`@3Wܕ P D^ 18@ mDvYo i;֬w v cS#S\i"Wqk2ū=g˺Ӊ! E+Ps ve6>yp6TV3{exR)r\%̭v^pmw O*ٷT0~PAs ,X@FIMMeˊYPʋ'e䁭,5Џv0,O@h`@Jư䤤}M--4n* *ٲԬ]Gtt Qs(_OTR+ k*Va \?u'3æƾ|Eмɫȿ+r~@ߖ- +,LJ WA\Bsco]BW['m:#WͨoD"*\B, k@P^+DFDм]B*}/?˻DK~Py2+55uzkHINU0FN/~ŃaҰ@Aٴ| FCIYYN%TAiԪ-F? K4N-PѲfD mѵw3nr֝NB|`ɟk"g OyʲO'mx&?"+n¹鱆~  #Aɫ]f9ٸa9rq =wpwc f/bͧ3csfmX~qм/,eA7._LaPSW/ ?0b_:.,(޿_%4~2F P=Cʞ/XmytD#y 'r~袀3o`a /8Jp6*ծJ@6f2WE<ihjq0v|[X?w:}Wae]^~ cpn}U΋>xet?m]ݢ$gX-m,ǷoZ, Z ޭ*4ԝ0U|zIU>'w.#<2_~8+ ϗ˧N{|ys{FF+&HsJ÷,m~-Ǿ>}Cj K 5]|={yPASv,[@Zl^4 (\B. yEWЦ[O Mdʯ181];s_%TKI۴-T$rhףm=}yȶЭ5&:"<Khu %T.G-igv1rP?cX1X ѫёE185$joYű\F=q;7GMgޙsv&XsR,r M@l\GCVX/ / ZwK`BՒyY".))ɫ~S <GԼS, o  -:LPɪ6 tA$%n9Άy30rTSod\H*+,<5PaJ}4)1kVb@ (R,%oC^}l -PE\ETuZN63ݹ};Y2q$%ZJuPfu8PQBR74 j(rdN֓e TP, 'TAt#//=@ӎ݊< {JJLӇĩRU*֧k*UEX1 (,{ ^>}uuA(s4h 4ص@l@YԢj&Tp߿;Y1m,A>^J Z (+++X@!ؽ4eòQA9k6Z$T8w*`źOzB~L 1kf ǵyk\ <$g NBTD8ѥ.q(W  уM, z ʽWyN?, Wa,?; Ho;WV@DgiئOW}#Bv]}<9}^p(WQ .\ ? TWURAR1٪! XRSS HYh ^ON*R,@͝5 -/w{<ډCl^0p \lJAEUH"#$(/>+8, 8}h?_sni?G:4m<<ݟίPP~wfOa,&VXXQY+a0ؔ*C:sp(W2b^JE, [ $I]UIeKg$]nRRRظd))ɴ t_9Gq+bX2c*{.|~@jJ .hj렪JhpQ ՙcK15w.>36ASK;QE T,І\9vUt 3n*eTϱ'ׯ~f,y(9USL[UJr2y<|ߏ^| 5vX;bic =~1sǖKopG/rt033fA>hף7cَ}Hx%ؗc}O6;Gy!돞AUU(~?1cFO 00/ n]zNEc9w'woީ,^`=0Mؽ2*]87^DIYo^h> K{Wv_{^,r'1!@_< F#9)c3K1x1O<^^L*6xLZBDG?y{5,Lci i`a爅Z:? vYA=04)!dT}|.̘#D UyƵ3sjbX;mkik9t05 2V 5u5NP EDXSI 'b[ʉObW޿cbW !:#iغ=w/_sDKN cphֱ>ظp6&b93?bլ)ܺFgsdz8LRNDAc3slKg7ΝE^? b9{w<{~pn6ԤI٣5~>aT&؄aA='6Q$''}#m o?f ;)L^s7K6ɸSBJWuΆ^zy7Ꚛ[alnoc K-14w;%ӠKa߳WH=5p(S6al\?7 3sIUw*CXP/_#:|zo9s0Dtn߰Xa`lLTx嫦+9[7XqG!NzW˙{2L)?[&?,Y[`ekϑx 5u ,]H(^QN.ٚ[׈5(]Mp?ֶT# aLTUeu[774bD],Cd?KheT!޽!)) K>{['BMxhzq_Ꚛvܿ|+;G|?zQ<=oɳҫ-F&t}TvMO6oH_\4' Vvԍ5j3}X?j4hO [-©|E>C)3:={Q [^2aBbH0zwµ:t nKG4scѴCW߿-g_-]XTTT1,aJ) ;i))ɴ2غxvܾp5\%Ꜭ]>z&,@C)j4nN5Ѫ.u[kt2J(ًl\ƫOe vAμuŒ~&%>{1f4s[L S LL)njj*_ҁ! ,B|yT9"4iL",L,,12L{n IDATg蛘ג Qе7Y}|bJi !%4O*57vP\ys<ں8u!2wCY$NӘҳ 101ch҂CFfD>{̂'}G7I^$ISd^Ih HIN&,?Y "471M}'Ւr\sw~}TB16M İw:˖^󖙺M1Q̸@EE63wΝkH0'|?ֹ{ACO>x U]a\"=$0Rڥ6% ?]9#s##o?ŢÄ^)lX޸?͔^5nVϚs'HIJf™\=~P?,b]9aXgoRzn_5i-s;9c!Рl|zC1/iG6w$,(ϑ(EJr2 041My(FTo\/ˇwqkO&-*s_$6qwĄxWf5 ϧ1DʝTR==$fzKHس}&^5$HZtd8_Ů%NJjƠ-]ۺ3m cELYǯ0k1zFMW\ܿUS`Tjp6ed RILↆl=}c#=x39{zf,[%Vǒ,ڴCZ#Ym֭S7ߊe"V~#fH)L2*1TgjaɔQY&cυKp]|5"ttPUQQ>J^1xT1c6 05u a8 MJvHalfeMAqL74CT.\ɋӮw_*tӭ҃ZTiM[Pek1[@߲XW^Vbj*K;{j4ln&025BLݩCr1HѠ **t,-⩤5zFb-V15uq# m$%Ջ&:"*.&@"':"_D ی BHՓ}I2س]>bWytXgwoqDz 0xC{gz{>^8{+4'nY{ ʱ-p{K[$'s`rv,bNkĮ]8-vƩ=ب̍ΓWY3cC'Xx>"-K'ȒC|xcM9eH| K abY?{ ,63uwt*l@ak2[K==2r:7٭'ms.a@?FáK٬fLxuhĜA93U>4j[e[BD[Vӳ%>t/gƍ<ߧG93=Kz4؃rq6LmYzdcourtG` P Pd ˻.I1@MJL$)!M\B|I hpb!*v8"QPOXp hIJLGt 0H?$ ڔ5u , %9Gq}~bF/^ ǹjM#_QJ 2!~xyPАûؕq<]5+籲/KES<%kf>ډChRq& uqq4SxKy{ѶPwA<>Ž[4#4Oo^qij5oCi,_>q*i(唭VMZ w翳r,M. {{wB())alfS4lӑm;]܈IoՎ#[5>yH155̬KRQ3a S1;?>^-]+7}wzƤ4͟3ѸaA?'7!dt*Yl4ҋJI\>])++clnIլwE9ܷ_n9Fq#Ʃkxt*oܟ>IuSy+n?ͣWY0a$ ZþL9JXX~y1DEN+K<\D1޳ ټ#S36>yMTWؿv9uZqS125'99 oOoZMkvO^&VAI3s >~Iuiݫ_]cɤ}@uިǶcY$&Se[o.6h',(rvv.KsTH>{ì썎ǩR5 KǣؾNpprfn+LQB~u MFtĔ}ai瀚_>q!.ťC9Oz;'c?HJLv 63봱~ \<ˇPU/ Lzvڌ9ѥZR'<$DP M5`² GW߀+k0mjwlӻ8m#a (_m}B`8o'gihP 3Kk,m(]27H. yںim_z0eebri@o?DqS;~j۪i@2{[^?}ĿGpl).RzmٖMk\aUIA#8q5EF01ZL\Z `ɚYi޼ZM\ ѺwFo̍Gsߤ@B|<3w%'JXZaQ{Tk،V3}c>A=Y}***ٴGnLYEz ۪gvoa_?ѸSa wavZ>QIo~T^б Ҿ]96}Үl\M'L럘H\^u a LU<`(6cj ˒vyKA]Tܽ*ŊgDxywoD>ˣW*F:1vb r|EDb"wI.y1ذ$44(U^Lk_ @ L9^?}k ˛Q7h2%e1yfoIӹw,?|m?$Wϧ8iu<suߚ<PQUaX2ǐ_|d8|ga{x"_>ةb Zܒn#dzn|~רRI9dzƕ΍b@pp2Jʣk"cM!A\=_()Ѵoھ=3JUM鲘ZNhQ 1ȯa,8]=}رriz:())q#Xups<:ͱMK[{,mۢu/ٵb1'wo| b9aەbxݹyӹ|/c8U*d|~\.BD2gͩhhiinu M&.Y.-yp"i/)!GJɛ 'oCCزpVjWօbjkXPoedkhfrx# #kDh0ܶ-"Qeݢ KYBtD`i_[{ & dEﶻ BMCSK+.?cʖw/wJT!ociv-[@C-^[/Wb"ğv$RRRҡu @^cܟrpRF8UA~>'p_z!¯BFݒsP9+IBu,Q_?~Eˉxpsbb"1[>LץЮw?:O;5%A-a`lBJUq(㌥=Eh`ޕ󤦦bQҎww{W73000ve m]4-`mMP&&.F DZRX"2 3sEY?ws=};{؞y +Ni}}{tqb\lO]IIT8~"Db)oGksjq clS:cE;;ٵkyWVJqaQͲ뜞l ܊gN`DxB$vEL&)ǽIYt#'yUWaHX'F U"?;]] Æߎj֕ηw@Cm OGo1b%xX~ bwjR2!8e=2wm$$/"˛>oēT`VRL%Y#-X w/{]58y𵍄aBg̰! lHT6|i۴F`hW$#5}'f]tL{z#4*ׇ4GLaq":sqywl0*4k kHD4RVo@?h%%#6~«(x/ХPƖP3=c6ãpߎZ7o=_<ᦤGݥ bwLNHDL`kg:*X gN櫆;М5ԥPxPYQN0w1eciT`Yk#@C/QTҼsHEQ\H&pJ?pX4>,U0n 30]0 j+oliN&4 "vs?T*<}FB&E;8: }81zD0P"t5,LWtA9VĴ{\ATJ{J!߬xEQ =XaVX6Qx=PIa=IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope2.png000066400000000000000000000373301247673406200255070ustar00rootroot00000000000000PNG  IHDRi$dtIME (tEXtCommentCreated with The GIMPd%n IDATxwXW. H) 1vѨI4&5f7&jl-h$1-v(*A@@z/qqinvggw9ygfAM&ɀ6͚u542HUvTJJ6P߻ j? =:葟 Q% L&Swrv^ҿWCOOۖ-QSS;ilWNV&e ^]*U^&U j_ l%_*)kg\:w6 D026vpvqټpZ֐J T^TCo@JMwP\E@PN\Uz7k\0F$(d2Q7\.y$`^`*x;P]Vb 1Jl*-9)iu™S=ڴkyڵHRPxP`Xi2ζ D ooi[JEțhΗ_vߠ4! Tĺ^ ؂J$PawQSW 2lZ=a} 0غn &P6SxY}UR T*⊾aq%B0s fX4+Dk4PHH驕J驪T1~_< 11}+FL^,(TCw&qmߡ^BJOSU-H驪*cF)(\H8;|& WTIPxQlA9 XX7+זU(I$jE 8(Go; 7.j䤦'592PHgj IE)~baUYZUi.P ~ Ul),mIlE.$ZNo%X4[ɉ`ZJ 99/SځB 8KlA:pl!5%W.G;+`ʜ4iLV;ejj* -T^),2 =]S!apru+= ڵDMMou~i꒟WDBb H?g]^VUl23yJ"ߥyK]ԙ&OQTQe*Va =^ꥧ cfBRŻV(%5wBia;=1 :8!R {]a ,Z BYӢ]O-HjXJס F]QH%fg Kv6Mq*499 Ljj[Pf[ב5hҾLYʃB5WHKI]`rr2O?OMIAR϶pL-^F;O>rΩ)5.+Ż$42K]XH^]l6BI{mKL8ȅTe'ˉKWPF<=8r$!sb _-Qy"g['OF,~͜u;fD cGa޾ESlGo˚ן4RSyggF<[Wiůn^'(u;iR{GzP=}2]uE}믬{5t0>1wnݢzzĐ>憕 )~ӳ׭gWq|Vet ic3r Bi윜srf Սǎ`ҠA=''ٳc&1E16\DW߀[p~MiOQe@Zx{EEBB|KOK 'W763|MAA'5>݉y hhh*X6cQFKKvp01|[dfӱ{/RR9mLL004F'q<^zp8üھfvH0t:S6>N-m˲f. N.]ŝVָyx_hl,,-Yr5Sgf{+o7O&ڣ'^] =z!Π1x۸yC.gX\nZ6^hhi*D-CS'j sK+HMMŴf\8GJrY\:#?s!95uuEEajfƣhlnނgzX3+T*#wJ'E CbG:}&͚$( ݽC'Ց5X1o+~N b-xM/ۊ?LqA@KGV+*V͚T-(#+k.+EUUc6=}}~ڱ`Ѥ >z>}_ȉJ=G--"(5kb*` %I<+{!{F <œIMIFKKOţ1ԟV 6]>gd24x9_&Ӽ==-֡3AuvvʼcwŎ?)WbsrV,ٻ̜CSۢj2[PFN+Y>m }T2937`i8!<,v]ΞαcܹL~~>Gw"uL pȶg̏ptu~mCn#N g`T^ -fuE/x> kݝI"_:s|:wo~ Wڱ.0~SL6\:=2|nf_<͛S333Yr[m\S33#ng|w!*2OԱܻs#VA\HAWP7-ե+Vr(V'CǾb0anv{=Fz;K^~u]|ĄtyEwubbpꀦ"x~8=~X-1*HuLIJέX4iBFfVf&c،Fff@^^B142ªx{wB’7BL 6&|AR1˕HJxLNv6-P쒑Lfz 7F]]LFFFY3FCL&#;+4 E*GfFhji#AWBCCqlr44ECL `߳?JnMqjOHTD8Ni9/(P;럕ήqi%y2 &DG< utqil uS1 D 'wԸ{wo\ѭ-ɉ ض$''+gIJL=vf2^xY5ѭBJ@zj ZhK53JqhHNN*މ\CO<CP(N=?~s7ߏ֯c"P\ bЁ-sWIJ5m@ꥋ8c:tͫ.fY7 ͣÚƻO¿ ~7n;ϟkݱŸyx@$>߷a^71 ,XF0mHMX1mH }P|h[~DVV&'XO(Ad [֭寭?sqXl1;;p!fM߶ѣ_>C1kRFFcH.~EmA]:g`VmP]]|}CC7lkc9JKV"1#INLĺy 8?ZZ@jJ q4h. X _ 9$ǡ">?Ąhhh'䧦$x23 MME ޞ娩!'7'MM-5PHG].#N4wpC3q S ;+<ЭsW7gW̭|ӯOma$>=}f}E8qNܷirwCf';~в (-⃙׮b ^g \gqb=n$țcƋqF G{tx9Fad\KW>e_%1>lx/[ɍ+Yfbߎ?8s ~ qqt.FM ۖ"(&^1R س7鏚L 0ߐ֓CϢa;8aY7._>o0Mǝ[~$%)Ӟ2C"4*f|.V(8{2z&DpyΟ:NoREyMNGh^š];pꄃkLNf߶4whENOǭ_7Wz5>^Ei¶b=YLvϿ]DܯEJf2o"EUgΘ[X'؉ t6ci?70#oPGmAuu< =_PDn?xHsk,mD.{mm+9:fqvo#Ycs Vojhl5/rK_XqzEeq!;~"_X:Uy* y{*gTΤs^pA1p?m=x1~4x"}驩| v"`?e~CSA`gX l["do,<:vA@ƕ+| FLLT #(g`NIdglRRXjJ b{Rz`y>yy"[HNL[&riܺvqՋ8) "'hdaUnϟ:Nl"rW/p>o\̑aҜwA{WpPEÇoOY5?wlZO^}0]yu MEW/f'Q/`g}צW/㲅8{xҨ` ꛚ@c/wi#ƫbF*+f}Wx _}I}Z/Q&[X,DMM Ҫ;"UO ufddp'|=ƽ;ۇ>ppn-bjRċXuz )C^^^lܜ2-;+ ttE\Vf&IEssrHJx?%6*]=}Lꋷ>Z:džw.cfi->RtD899X6m.E=OJRN=>zHb|6v'Q Q^Ӥ M3L*,%[W0|.äQcE=L9٧[.eY ;5q 1ھ\d uuiT8WIDAT߫cRSP£2}ih0 -Yl8.'O ҥ{Of,ZyZ;IlAJ& /Rmf n*#??VX#؂ *$|fF;~㾄 í'vchԪj%(HlR.edMݵ}$c1okwPs؂r. v)Pryae,9IAb  r-PBl,Q^DbB˿Ӆ-455 z}} Yyf9“ޝPOܗsNbҠ>?vŃRY&5[Q[ecY]QfKIF.ǵM[]݊)yPE7V#; /'Ow'|ӻ+޽0sr,-U-H驪sf J@ٟÅVцիpvwNw}XPn\; _@xw$l$߬Tf ^I^)o ׹urc'O{'ju!=^e+g}\=ڋk?[NJO> %Pe -1o` T`-lklK“nm1e5)4jDxɴYQBx2+k?[xѠP`A`GSjέ?nC׮8rV4 p!UؠT-<8}?Knn.^]|x_._I#sJ*` RzCI%/KA(2s?`Ӽys!U[E~gi>!T-H8*KQzݾE ڵʪ2[سq-"{kqh킗^I6b6Q-),BzIMe::xtȻӋw'gaD::bg-(wwoR%)[) %K^w/g.Xy?B\e+g^y+jj;۪geccb8{W3C6n\-Hlp5l]eza/`v`neMhjhV`TCʥr wёxt脗c|DJCd RYb *7lA-5KfF @Vv6'O0Ġqe OZEѝr2]˕ʽr#D [\H奝ˆe3S!,ҩ.m=, ^alv 13ӘYZՇ>WGlKJOlAJO40Z*Ytg=i MC{vgb ._8!Zpҋ=FG_( bw40mTJp-lA 8MRezq:w뎮'*r;m=T-TEriѝNiNb ̅$_)଺lAk=eeeqx:t{lfaIݻ(T-"py1\;^>,XVmPWW~CSk$[[lARk=-X-ى%=zZc% q]g8yX6˻>N[JlAb Rzړ`sRk=mn {vlcaӼx%EQ-lU2IG?yϮ><kQib RYb 5gRSwBu*cw%N:?L464o!ٴE]]!eRʴΜ/gOM]a§3.zozlA 8~ j&[PS [Y!6D=,"::/-+ϋi7ʭ ^>|\PD:BB)=*4ЀoreL|~\~i ;445{}#//ʦ)^>Llm:STUf[R)\ 8WDZON.HbcbԪo5<|(ϞESS /o^{k8@ *Jǒ[x [PuP(IHV5!>]}}T0&'pg !#wۇI3fӤi ԓSk&[[B502Y,mJFÕ bV5xphR![BuJlA5AAɳe9: ifײB?o_'| 󰴶--h R@WJO}alAYYyeg.mf-M[: U;PPTuS~69p 7l)Woff&DZkh±FhjiGD #=-C7``d\䆮1o(t AvV)\G{7.I.*d Iܸ|A^$P.JU 8W($/yKJO-mۻ Lsa"o'ze^;-YI7G 8)%߹ō+ @輩줹 ޘ"%k.a56bЅT;y) *U` *̮m³w̏>a M'-%V̏qhU%*a\K 2Xúr=ӱr;v~moER(*rpʗs~< %!.L41՝Nزow6ܜ<ѥwNå3'Fzj*Z4lWgnݽ'/ͤK*JbImӲ/’џ-18{ׂ'59 }C#lqL{54|1GpfIqdggMpjM^b®D5>>Y/ha׃IIL@]icl]w m$s 'p5b"LMa=lp]) //'%'6:ouS|Y-,P(e,+l&ssr7q4ippbq3{Аk|>q4?>",jjkҾAȦokXCCSb-A7yUE 'g:GCsKtMpy6,Ϻ/g3h8>H;ŃP/5m:A~~>aO/j^,l:<†摞:ӾZQ3&~n2}1#vW>x #>e1bƪzu.͞mnܾzm] J>4 >&B6/ud K< }72&.!Ne~z!FًD{zFEݜ8w zFt*zè~2xx/Si?̡R n] IJ-ޯ̦Zdef@\C/; *@e)ac'ܛk-|څmj445r$-읞7B٫39ټ3c>eWKOK_q$ ŠVMmIS;{ܼ:bT~{߿?QGc$r%,GwM^n.נa\H3"ɘj=/Q.<S#Q E_&6gClC@Rc:/6Rdxmv>=5Px-ӉLޜ8ٙLz;wBbʅܲD{uR~YMmm;^3!|QڊD3WӤ+ܽCH3V{\eb~_ &-Y&|>M;|$S%>gREE޹Qb ??ogM_1gG΋|߿X6u,Ĵp~AlmagP?"VRo-/[ Ex"ޑ/fۺUm'bzu%L|a7Bs;D=Otq H.ӃOܢعMApSs .Xw+~<6.U_ 'g5h9åkϾ?eʗP+ᓭOڗ qЙvb2= COdˑsrsrX4e ٙضrags'*{ܽy6h555339v̘TIhE !6->36.Ck\&o}>4uܦРJU 8W-WB 8Cb|_NQutIKMom]23Y0eȤ~TWW[Gbǁa9U%_,ac fؾqsQ41rMRc-~[6u@FF:zŎ7*%>ufgx-^ŵgSX-, 4ݦbv;.0gN<+\7p;2n1.l 1ؒT=9(M@qWι}G@CSKojeG;+gOqvNjRLlї>Fgh$*` ˣlR7&(]=}=xWϟ#6:%Lf?+ 7`)ԁ}F=KjN؂LuL]3mvpnZ*4jQ=Sߴ1ޅRv&od5W9}`/m[mo⼯*H(5-45n U~gO7.]]ʆ==6iWkh+ͦg`/pxƎ}&]}C+g%'s;,ϑ~Cg$%PdS+lB (WN(S¿ UJIP•ѫt{[`9ri ]*W8y`~\Eb||{=(gENeDi.%O,ܸuӇW ΔgȪ9UD(i[mᒯՉ7'L`ܼr%#bcMkCqj^q :{\IIJD#Dִf4")QeS7[Ǯy~F?N[~?@RE,:Ą"m@n^nw hچ?pR=3miJolZ:bT1Q\8G-2IkNigX9(# ;ŝ 4t"c#KI;Т+mc\!zFFdgdOlda!WHMNⷀVuvúL74FI~O<cf/,zdooo; UO-vr?bV6b )m(q1'>)GGʃP"OZrYYYhjig@}F4iaGKewo^w.Cػf'#q}}C[9I;<}DZJ r 9zbaӌ-m}C"nkrssptORq>n_AЈ!c?("pd6}hԳegfrn]Qdɉ deF bcg[yG w{}f KCDKfF:zo{'u4Lr1|z}+?ЛQ1i}>{t$wB0$rrGz cmgMK', ^Ln^@PbFBFzZø)-]:d3Ǝ7U=rk9 P>BJOlAfKliΊJSUk+@EVl+tԽgGu9=U؂TUdڍ>2Kl\c#qb>ے؂j r[xnPG}h߽OJ!UO>ʠPq&q||!驂ꥧ*+&T͞M*M,D*E "Bx{UջxʲiT#(~EEw)=}D=8v/YQFR Tc|D* TvÖue_Ei[IMEګZ&5B-* Vq*߫r"[d!B&ZZM e+Mkk`zjUs w!([ZJMJO})[^^K;xPAr2/2{¨b+B-(K+=.Ӆ$-(*]Ԓܯ={70Ardd2#'6?wϳw74T-lPSk [SkזDصsFyƵ xd%՗df 5hjfðZ շ^lC *4j=RlrrrĄ; Bҳ2| ImIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope3.png000066400000000000000000000501541247673406200255070ustar00rootroot00000000000000PNG  IHDRn'dtIME =tEXtCommentCreated with The GIMPd%n IDATxu\Kǿ K(vwU1}nnTAEx?X]vus}3sf~ D"Uu+kfb TJljC_/fuQQ1A? *?) D"s jիתiօEo8E/(Z\VP7H禠h= APTBrA&uV}ɋ'p-**W"H\fͫx?''4 JYtXSDEӫU+nݨ!Py ˨3ZlB&Mw0%)$%Ui4,JHO)¢M:2>I'lkzrYEUftV񭩥w*4@M$YV]UBĪiAP``0 LTHG L~e@r)@rdYWQ*%W.RtHfbjZqӦ6)/! S&,XR٬&je[Y XB:O2yB}%du4,#_T)5'dU?2_PRRT?/Φ~Rdi|[XQͺ2^+jԱcb#A(RӕۢU"YJX[)Xf:iji6xmݸ˖QHΘA 8w/9DdTO?O*o M Bס}5e NX̹SX4gNiݾ=imV?@@e?*Ry􏐉Rp;uQ}~ *ӠGϟgؽ lX(ߏPhK4tUEdӻWB׮ѯ{w6Aҥйs2ժQns([+/[x"'WOAk%YO(ZgUkuTέ[=U.Wݻu0ߧ\"̟9l0@o)d,4t'!{uVnDB.]SPN]<ÂUk9~UeDEF\ -U򷬧dYy57npy N2aarzRv=\ Rf--,%[ʕrv+T.Z @_MwсT1._ӓgc`h\k 955y{.o>sy;`&mQx%_d)Vo,?jŝ_tcSS/(ۦ#;jP?s3nu6?w*Ԕj5kb`hHll,'`Bʥ0_Q<3g=h@™*pѢ(Kl򷂅 ߺ </~~(]% J+3Q%S?ӺNȲTʅ hik'b1W.]R_o߸n]Yu;%J`Ooyt'"66z1a`|UN*J{[ +YW;ߏI&jERRn=yڰxZ*Uy.G.2X98wz4^}{ U7)OUTߔag/Kt_z-5ʨJ[1"G?QW/^Щys_H(,NCS5uԌQrvyѦA=gU2`ߑɈ;j8:9ѰI *$I͜蟌*χoڄѬut+u0fUJf+G3J)KWhʃ;K'3JrBrAK.9ÔcyK//>蟌 \ֻCa+CU%? ӣA\z0kg:4KB)ȫfGᔥ},>S*< CPB#.4$M]hܬ9){^ϞKEvS@ZZtѓn]9k "1f Y)WH[NP7PΦԔ dav*䚷%+_Sf?"#"Ի7^f,\,1ds7555hѫ72n-A۾ﱱ KկIP@F޽_d.׭iCB~6TdB'|~Yz[fGzQRvhi8z m:vWWA0..b굒3 ~ŊGіTհ/^`ł,=ک$2v 22</P?2m];ԫ/Ϝ̜%Kq!9M۶G],泯/MBn ǎkxxzދs+{VPJ5#֥=b: VT*iʟ9"`eyTwY+WrGRdz1MA1!AA؜ޙK(ω+׬#'XnOv"_oo˔ܱ#̟4kH}o~?lt1HRӺKwZvrC3tt4NmI/3nפe %UsUχMǪ'9l4͓<5oڹ?{w^M}\R/9}3'",4$YylȎ-HΕKܶw/$'Ȉ5 $sA6Gr׳gߵĝֲ?t]>{ w,W5f~޹MEY>o6a!ߢ%K9rz\)W"l&ߩhhj`ecuttuٲz$::>R_~CJ@ձOo(7:* CcIe M9cR/?Gˌayp:ASKO>jV(>3Sk44kj3ag0.;.3񝛊{JACݧ'q6~kj%(S C'MO6@߿~XuMyܓT&ǁ:z~{MߝDGE)} I(Q}Zà3% ƅs"SBe˃PSɋ[ASST"\Ȣ%m>}3UqOJ?#8e AҔ.MӰ0Lrr(~r3g126fL)h)~0)2ђsWk/Aْ4o߁camewgzrO~BDEFOns s ~>o` (XęА`hݥ1o脍Fx*T"(\4e4=~:3zпY,ôN>ĸy V\0"#""R!}Y)? }rvn\O5d&蟬XI5`8&Fj-:]}}\wfHX,f ,:"%PǥOeWj7iN PSW'<,GɓϞ7ϟѱ hͥGؼty 8Of-iܶSXCںN>Ⱦ}xG2e3h0>ϭ3jjj8sN  +uGRs8z`?ؽu ׬fβ-^Kβ`4FLDZ1yH:uy|.4j}r/~j֫Ϡc%u #cc-X$7s8rފxx7oCCC};q)&[ pv1O#_ wuZڹuLJ Өy ׭0A`dWK붒S&h49hCn]` %;w7ϟx0d$b1Ϟ;WMLx6ϝeNs?J q*'E*U)<""p*L5%eJlS~CI{ى sn_J([ ߾!48bˠH$⳯/A(R--m'__9@HDxhﰲ# "DDF~ݫWYZafaH$"..7/ebdSgO30L{oߠDbcs/ Gxx8y򣮮E #$83 Kttt"8(#ct%Ha`d8(/~hjjadlxKPD"DN$%쓈0L"E|\D"D"cbGKG'E"∋CCS5QwGb I[~c(=-m,m2@a3\ % id1 Đ,8}#Fj ir:բr_%#@n3s  Jh~M-22dTķp>+iEhH0_x5,L-?&_R^Lt ܦx2ܽyXa=ڸbⴲ.amk읮]Ǐ^;9~9#'Oe=9{'m:w!߽cmT]G_>bw98PN= <,6 @2@p_KAvnڀ= ܱ oo C9}GC=1sgؼj۶ wolLWFD@xăS'afaS꓏7s'c)KР`fM[nTVSҞGP~Cj$Ӧ``d 6-_›/m?ׯ004D]] ܻq OhԲ5r!/>Ԩ '#8{p{nT a>ˢqèѸ ]DEF0m`OJVk6< -|8A`os_`伴T߽0|T]<>rFNLέwz "KKW\Z&+W2O|>%+3/yNM]Xr5kE@p*m*;zZ*d\yqq ` ?=}}lЭ6kΝZ7XlynxNTryp3 GI]J&dq ,?goĨdJCh١y~a([GB\N'Wߩ'p7Mrf%Z8kjHpؔDKǞ}@Zo6o(|^P^C '[O<ߣjzYX s +VJށ@/=z%K\tBʒHVc”sR%K.;j4ok!5ǏfB߼tnЮ{oM,npqwL^kւ"'lYʵQND#++fMh4j@3h׳޲SkhgOx ع~m\[7p: {x(C*a֥ s_O!#(T,sr,խjEH9k;n@XH0zw\XX۰uOyspD]\--<<21.o2_Gs MJ IDATYMMMttk$[WmH8bbQDEF&;8 a!Vd7ޯ_&{?|Al\/>"#%r?BzJ<n_>Ȉɺ$,l#R.-:wqyvYYSi֡ <1HdFg5"#=F?he/n-4r8ߘ?m*}oZ됟]}.::,; AS[IșߝMig&?ɩSۥ]Z>֮b 4mApp*IXCJ򧷮^&o^ϜL/o^rJsgl=r"&菽>a pԅUPϥ)/6Һe+Wah7*׬ 8ά?%JqAwTۮ{/vjˑr`Ksol~ٿi-[5sqK: $i%:~PAT$ٓ4hA~26CzuRPLYiKll,cb$yZK辽̌R* ajfF047FFhm6V/^geX2lX+[Qt_ZUj5{ׯ­nTA%y~GG)J :uvi3ǏW5u5 ׯalPG0up6:C=ՓFe,,100R^~v*gnJh146b҃Р@VϜɽ; 43urV-};^7q9*BtTb IW`?|})ZBk3*Gy},?Ӻ'cY_ҼKOw.I'?74($kdSTNȟ#Y;w;Ե K6mI rb7UQ%SnI.555}'u?Үr f ǫO9,;2WgnKYLJ_$8('O3kXFR?$K6)c+ Vz&6,fan<d~96eRc]mW`ǖa1Mc:F\] %ꬂvyTo_'ʚUej0n3vjHtv*AAP(zB#!Wnklf1IظpbDҝo21OltL8; ՝ki|K/ծ+Ǘ.͚hn .ωQZ| eXW>?9Yg545iغ# [wkYMf=-:}I)V'H_[;!-Vj`蟠Z4[7:t) +T2^*G"Pb>y5nT*ڣ?%+Ui4S-v*5i7Ϝ7 k >pٌ҉WxXZ6?3tBeJ''Q%KWgloLvzF*57r =WĮ-DG,;ȃ$'I|pNh5zzr/xܿa wt5KEI "E+w -BGdagd2 SAYĭfYf il6Dec!{fv+$TnS@Ax1#LGGW55uttuŘVc޳+Ya3bWV~PM-CgߜȭZ563rF4j߅Y9u,WOC<+D)&UܾRZ^~ 7lcDGG!␁M[kh(T?IW*d*Lx󗡱)Ohұ+;/sYLY:w{e&; 3Nϋ0ɝo_ HS c|M'D()R?U߲ϼQED@VkhPE[hӻؿ~[̣n49+7h"UVH &cjf>ژYXҼ]G@@KK #ccԕ r);Q@Υd+}#Cy:[lr_˿Pt9ZvGjr,}x25J%۩' ELT$~x 4mVw;!ilG\\\?ݿ k?UONr^Y[zʶϨP'g ߾HQȢ #ǧw%㮖ZhjkKb 4%KKZ8 `am- ؾֵ=ᾭDvrOh{t*rFr@6$Sz*utq_֝Cӹr0+aܩ({߂0ㅄdINr.Ntd/w>}ֵ*ELF&3V=r!_qܓw Ƿz¾CrҊqɪcu);aTVS.k*&&{vaϞ۷bdž#wu /a ҁ\&OHP/=xrRo_&-Z T?9s0?3(lDJgFnVwiEuVx=ˁ +qVM]iNJ$XCCl2kX;s<=E5_~}ȻW/k3FNI 'X0qqqPzMFPW-Tb11hiksE,-bqq\:uxAƖ;׮H{:wM˖_5TOR*G9}rJeȱ-Ѧ!JѼ[_Ԩ+a@ )wc/?ֶ6v9dˎ:!*2wo^1S;K3հ>mZбW_թ/Ҥ>çܽvrUc0肖e*Wd kג.9Ɏ3WmaA6ͱ/s1Bq0nM2} ܎gPrUO>:G (h|"9`6$>.f]PUut _`|fB: }ڶn:"Ӄލk(WqEޢu^z>%$(UwTi^{y9J%$(BkjǽW bea7=P M--B~Re8|'\ȡ +xvƥsO̬mWocdl}d"?a:Oۖ8*)3TPo*o髌?o^qh*.Cjh֭/TȴTF]uuBD@ Ul}c@IO[v[X(vmZLMi֭U5OH M-lL&;Sj A>U^ݿvfr󗠀-8@͝r CK+WЈ=ZmV;'400S&/FͥʊAi)WJOꬢ<A[MM* Qa3^=y +UU5ŭy^_ÈaTrbCLݿ*G:痲%p5~ߺ񝚒ש(M\V Z$6:FZ?JDGMEoJ҃ G^ft2 WRYk.N:e8⾚oI,ZhIZ-#**[f%@U2JMW;mP'ҢNNw*gǣk^ř >ͶF~ {XEd+-{TTϟMdJPb5+V;m^8WJӮ})ZJ2\76!,>%[=4*N'(K G!^oFddߖv>~x\ KGgKuALL ȓWV&G4߉[g&GEhФk_OA9o;9وDj^WOF VOqC|\zvxGYIGB(kTP?-A QN#iĻO8q%딡B&U>d L}=pX\7`k7T!dԜ$gOPfr[Z)|WiNƏÛW[2zSvmX8!BM] M 21̜m]̬`!JVJ@-s:;nU-2| W2vJb॔[șsS8cQOg|Ξ_^ƅs;VS+ᴷV]SFm dnÇwo:/8@n  KiAKv}޽ΥX糗< 8ϳg27jʨ+7SR%@C/m@47",jB%~uabnnxk'ۗ/ 3GRq 8aekР@<?䳏7߾>Vv(Td5%1!A<{p"%Kcdb+'{EH`ё8qB:r?Ϟdݼ[\&ۺ 7P4j $+튏,~%4pxϟx̃/}bϞJg y)+TAK[WOsBC?W.l)TLLBz/a$A_x,![cףxkqhbfmc☦0 ݤϽ_>sBCS Ccc;H b3o<PlE4uxo_D||u,DRyҬ7~I?"PWck8)f=:O%UX(hjiMXٓQr\2eͱbE2k͸/[ȩDhHHUH߿~7a慳lZ7Ԕ*adlXLHP n]' eTN~Svl @۞v$߱w*InsbbYGfSDHFM>㦰|x}".Y&mJC!"55*mSf93Ovzt 046!8_rJT"u*jm߽|',rfN􍌰wDЈoa<{/01`T1z\q(Ϣ#1Lֆ)X4 L^^c<\<.*+Z| ѹ$\z2U||bncc25#<,;-IDATWy):ލL=yyzТ.ڃv a˄@^y`-WYi"=) &%T],.mK8cXnb$6/]Vmv,x_≣լKvT*R{L_N2 ӭaP>H~׾Ͽ>GrxZsc;Iu+ۨoyń^YH*_MկϏLC[GfmEddy  ϟxrQ.jǨI}8ɣ%폋#2ߣh> 2Ujȧܾx Pbcs%+W| ZL+UqpLehܩ7%>.Gȓ@\f_mqn. *Kܹ555,ۘps\=e PT9:EmǾ3/cN);\;y8?MZHw*U!W0Ss|޼Ԯʹ9Pl)\Tåræ4ڏk54K|۲W LAGuwΟ+?D֝(X,f1{n@Y`bnTSS0-U[?<wb'ݵ5ݲ8O- +$% t&.Ws@\n^oG.TlL6*fݔ_'܃=KATJ'dPd(St ʅcq*^ #D:`n qgʀ^\:q\iӣ/*UEK;y$Nz˧Po܃8YXž`yhAGhiQִ1L2US1&j5jI3Ej6ƚjH 첿]~? O.o:|9pՋ `IӶ.ZYA JfTfқ7:Kr~YNqY,LyL_c@DtPN5]$kN /0WiI+p<=J'͙C 6a82ywivk9Sfaǚx4Z)|ϙ4}*\ uF ȥ%.Z8^Tj5[Y~'IY"%3r^O <2yg`$X7Wqo{Pk4L{~[k4xe;_iP`gtr?F$ta3 7p{(U*^X@٭@NJyc3~ŵ}ɸD'Ry)^ĄϺ٩%aCZXsAx<%PZn !^&@G{Fjj^?Ş-9sp:kH]g~ayb O'kۜ:r fS]%c lFC"o"cǻѷʕNV,Tal !}Ӷq@2 W3zcAVR7<J` afH쐄6_!6 [ P+tHT:$ dSӘdG]L1n׻̙}o$;Y鐐vdht:,a}y_ќ3բ4M.1QK۰SS%h 4Z8ݍtHnRS%Rc nAjjifI"8%;0^?˅頾^No@g0>cj /)!W:Q4 F&;7om3<,*عӶ8I} pձ;c͍/ !n(z0&zp~ա^:eJN3Z?>'Pt%ϵ}]ɛo-usE0B0lUHXA!!}F|'TWz#'k=VWpEo>Wx ~a; VSzZiEyMkI'_Vj{RBa|xeB[-'A%^IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope4.png000066400000000000000000000425751247673406200255200ustar00rootroot00000000000000PNG  IHDR~eJtIME 0-AtEXtCommentCreated with The GIMPd%n IDATxwXW KTl`+bc&XML_5-ޢ wE\) ,K^`Ν;{Hrc6nV*V@(K1FNB Si_܉B ~'A? xĄߜu)t Mj6ݼZpqTj+Bλ ! wff-AJ^(D<6ѦPzrZ E/m3*"4iq֍I ~#5h0} ]R*Qwzi("y*yE)W/U%_UOAU"Y:{]kWƼG ?ŋmQ䋹/KUNH*Fyh+AR ̘7OMlWD?UDʦ0"S6n3~948h%r*+׮mwh,E( KE()yyYڬTJSD"lʕ{4wqQjrs/)xy\$kW/ ACR* Y2H BS? 4P6 'IY}.`9E itĥS+#SbSJK+) Kh)OVVUFJUl9xdlJlʔ/ nZ:ۨ۸no*)R6qY %!%p,Q@i/ 4//B*>ʉFH9PωkC*U'usκ W~~D"88{v6n̶͛-WR6GʠeU`K Vs+Stus`аa$$$SQ2LTD4xMED ̟ 9u8]]ؽ};ZZZתw+*T|aƴ)aΥʣiզ } 3woߦy˖eplWf*WhdzP6$мYIڴoX'PNNnh>% |拃3_;`Kg8h^$7yt}KئB)t.YCJl|iSAʬQ˾ϼ\99 v{PёoSٿHplѼ#SB+9,X BQINBY6n(Fz{((ť Z ʠe ZVV E}dz<AH6+&r^BB!WG63/OKC2DyIyթչPJ0y ÃήK^A#'|oݖߌ%^ylAJrDTD)®γJQ|A 4:vQ%u:;{2k2kg2DـW祍3 Ns+?NKw\u=xPR߾vm eS [O@ 0Oĥm;54rlذl4h̡{Ad< Z&"T\)8hY|l,nbǺ?05 ))^GJ?[C5E=sV7,ع+_n(5\t Z Z&Dfl숟-Vl˸s 郀Oȸ:/6eSD9()%9 gNo˥>ڷ-II{U*ʅl^M[DhH0!AAafa%fM37333 we(ye(ŭ:_bۚ<ν4k`m[Nqjԩ+K)\Ѽ 92Kzŋ԰caiRNN޾-]WQM~gTUU% "$8`B k!4(an9)[`n1Y0-34T)YJQf*:4XΕ^:najasɏLf倲)dߗ p8AhץAޱw?|1 J =~֖)h>rerXzz:piZ/5IIT'<, NB042k3wϹ} b֝b`h @ :*ϟ!C6\ͦ芾&sx]U|p :uԓ^r\[WQ9GofO}\8;sv_}oaM\eX^}I+3y<&͜޼e 5 f541ճ8|;o`Jwi_qWϟ%48|˨]:zzԬͯ Wsg|,>p>-۶)}2={nݽBdz9ݣˮ}ܼr3KKllk( fHPje;BG77:+m=nˠQcֻo6`k9c&~j9g[Hk¹ bd]6]\ql }bںиUlfQ2_]x;4/{u9{5j)]|GihйOt1Y0e%'mASK~4kױ)>.N2,>U g3KP )^hնn:طc;҂o= l 6 ;9cUm@%u5_9KI[,7OWe:vf]##]-݌D"~ٸσմ֬frr2:=#.6:˓g4$ys ge?d jی4v?REY#TkĔ;W.-hYc:KxˆԲ5FfnШr*Vע|\`ˋ !Qy)0Y?q:vsͳCJU`KZ&ZF%%&rpi9o߼.2ѵw_6:nUڽ #zqp?>hYć0Ԥc}ST">|@ ծˢWe Lu 2RGEUѓҭ;Q ݻuoF ^]l͡kwXYW-Qxn>:_n;`etWT]ϾHG޿1nsP*+"JIحۡ[W skf횚[``hȳ:l.!hCplDI]3KK%5ꑟ_z5X#gڴm|^x^n=[2>w#8>q2C1 zDF3 s'cʰ0j, йW7 }C#ԏ}rr;F-Zq?_|;S- zOZZDwݏsGHMM#́k5/E߭=e[SdjǥlXb9ѳ_?DGEݬl!gªrlo"՘:gؖqy%9v`2ksrmL͹v"&!i<q>[;{=~ح;5(6ܥ5ZNZڸzUХgO6m[P7x}{yEKڅ<a#Pz?;=w AOsu7kre;9S-.~Q6IVRNe:4h(O qnP^ 9&~w|KI۶`mcCv$J{G $BCx%6vë/\5k1eL1fXtIS6CKK## OXMQ/tAXR/:2dL$3A||I! I$'jƱԔi fKM#59***+ь"ɵˤDz;9 Y!5nˠ?D{=uc0u<7r1tttYr9#11ܽ}u+̥uU?U8f*`V̞+Qq1; J.G36-ECC~Js aƢMC~#q _ǣuf kƩy ݹqX +ńofR1cWLL_ LCyߒ6e06nʶc'$3/q`.np/(\r-~5k/ޢ5X8p u|?c*GkL/ ]|?c@냑)lkH&nKMGD"">AߤiU#{DGFҬu;g qhhh xo^<ǩyKt2߿yÓ84r,3KxX(n#mDpl챯H9~Uh,PohDv$}itKϟ#,==7x)]GSKD"ݿwi cS3D"x9>W/Ӭm*er!|ƋaWHDLTGc_ׁzMDέX֠i9{;zs%yGB~DD\>I𻷸\RU^<~gCF$/j,\L3^lYq3+|ˀ_Сgߌw |Ǐ|I[מaJMIaƈ8l͈%2ݤYU?HZ4XdnBke^JRbJخ\׋bhbBjj*WOp͢I{Iϡ# Ϟ?h۽MfxDG~֋A'ӸM{RSSyԨ@#P[~=CڸXFL)ѻnjdڍs6{III &ųgy m]Ie3s |Ǐ0`&Ng,VlO0eL3}}6ⁿkwaXT')1551UWI мu^B*֒ٳ,V%2#p]hjjIlѶ=:YZJ:4tbҬ9T)ju[&͚C݆Nz&fzM]P#D\# ѥw?-Uk 9~ 6Srl|~;{\b֏˰9~3Gr2eƥھanÌA>CGТ]G@7p.\1`P..iciԢ%#&}-TfôHi_U$ϸr|޿w+ɖ+}o, sUsh?޾3RVu(MS 5޼xNApu1Ѿ~[sɰgLI5oWBNcY*g/{pq11 zo;}?,=(Yyms%ϟ!11AQ^BB<>W.RDR~4dI&˷.#:2"|gNQIՀwnsn>5D**<{};=bD~#7Өekj7pB ,(#7SN"9e=U`Ȥdҥ;nuXZW(~8{! |>˧<1[I^޲}QMt%NMp<!A,Ao_cfU*x^D2Ί7fbQ8φelLtᯕ+x9?P\^^moT?نCBȬ$N!] ---_`} +6m-L|S%"ʠewRIOOG,K$'#B6TJr2IxɽXv3I $'' =!} 65kc`dXM Abc7QIJL$<4}C#tpdFV:yf`Ax :YUg IDATaY%_?{LZjk}ri}ٿH1,=_Rv]t3&K6ܪdU65챪j$%$p%޽Èrdz)}ӃhkgOɐY3e(a1O\l YgIg {%v7wfѯ+iqXER//Ar  aPF$Orb"Fƅ~kYp-Y){izz:GMCy7(&*]ܡp?"}6Í4ܿG5^#'eUu004*լQf%_wʛ/ťf*F)ܝzQyklfNN\%q11| )t!XJ^rڡWUG,g8_0Ov3_,H2ɒu,{֭)*,6:!]wxC<9n<{PMuf \9`sdESy io "?U %_|!<мPNwdTBTYnrZxn׽.#.&{.kU5u ;sJ r*;10m9x#u< $gQiEEZ%hjj*ϜCfyѡm xw`sc!)߾HSoAJ£ԊHvlyLBQ6: zF4h֒ 'e;HXP̫#6W"B|ֶR(hJ,zu?ӹsb|iiy)_|<_ƕXWJezN=9繨򇾁a6&?A(W`Fɰмb/:ϙfodL:2[lܙ͍(Y(B)rZ;S;T&6rnKܩ=iOJX$MfИ,Vѡ3eSآ-+n/:4nݎJ[.6SYp܆E'W` #-tg9ޟP*WAR9Tx1qqMVEFIyP6u bcbx)˅)&Z::}>>_f %KK54 zsS!8o؄f+4_>ddHwccys7Oyxvl&yiO:tsE!+e44]YXRj5P6EAA:gFzz3_/I4/i-UgNxxׇL}c3s܊oDnU3G? 2~pPf<۔{_Ξ}WWf;&&:JnMQ 6T^#[%%%qhv[ lآQ6%5` Z4ؕsePUoO ~NeS Ւb~ϳM3'=IIM~Td~whٮ}мsc7]2*狐2|!/>V俇Xj5rJTP %}93Y.9  aj,SMqܣ@EE97ȡMkTwNdžNYyS4mM-me^WKK ---yYFvGͺ.۳iG+[LhGNٔEll@nYdMvG%)1Of2i),0ҭGIQLB3xٳ'<%3 ծChp/=%,4Tw޻}gI=ݛW˲k<̗UlW`Ϧ񬦡N.9w b1z>^sa7sK@reyʩMjj*$"|?WS>Tn[dFTC#'lk֒۳iFUUW /uFi-UF,g]8ż>J+ZNen*(S l-ֵ+TE4X:q$/=)woFyp?G+ J(h-.eSF.z^/k;7,UlR46R=> O:*N`3oS4~KI yTeвa-ϔMYEWiӽ7=R;>Ørת[XEyY"uNŪΜ=An Trрz u2XŋǏIMM+e!A0n;u(06e Z4ʂ3߮Wϭ ga(O}ˌxgȖlSSǎڷ$׋'OƱb2rjԬ(:Pj5 LT߽%1!N0g鯅2*r%u+@ﲢu O] u :/h^(TBV'JhH}}hٮ”|qxVUbU*m/HING<?vo'žCy }vo{ohT!}I4/MSEDeyQ6ő)d噲)jbiN>@>Eo/[DTPd'VWc=j:V'2Oyǃww=z53m5fB,sEo/JFh^Iȟ(U4h9-~ @pnႊ$([W(ްe`dBVmhܪ\zz:o_IG޽3K+LM,ۜ4>eS44]ʦ䴌S6''e_be{TTm :I٣< M ͗濎+|y1RwutA$,+WRr䋢h4qhC#g/Kh+y%/ME@bi43#b=hZf}WH( JlQGC]u/{>gs u%Cg+F)wJвr5Dvj+(E*+;ɐ̪8$oФ)^$*"z΍īh^i-MFJs?B/]t7!AA2sQleSEld?)y4eS,x%_4V)ŒiAdl_7_bG.FiUy!$%W )hL,_" m[޶?A$&$kD"6v5R󫗒/fжkwZvZ$E>M˗k~:̗)*ԕ|CёlZ= ~VJlYQB۔J@7mZ2/ Ffı8*{ \=55C[7`fiEˎ]fTD8eӨ u(~Sg}F啻5+}eQ*MED']kW=yxe}*zE]CƌgU~>΍iФBNV\ t0GAs 2'(˩V[i-4/똖jus=[QP^% ϸGX{Nq#q2Ffy6{a.X5X+\>' 5-as ~&{֡[k4|w\1< c_y@]C#ۻ4Zu8{2ފ5^xRSS2k:xxׇ/BLT$ kh``lugoҶ0_=!wGa9/_ݫĠocv޽|.dݒ$Ԫ  )W}/LRb"jbS6w~ӖRܷǼRFNs<O*kH>jw^ 8j}c7suM-/M-l#B~$|n ccIŢJU:5ŵFU~n}oq?#<$D106ŦV]lCÖmI -ooĕSyПpR34¦V]ZtqáI|V=/sI#kPQQA[O65plBήkhJ>wo2WB\,hjodYekZu]N 2!6<4ٟ$--=8`/LJ7/1V9-p_ݻ;x%oУodLltf*-ZڤCdX/95(R6eiS\*>̝0 *WaՒ:z~ cwƅsO5v+UfATUU ~}F-\rISn`ꐾl<]<ק%>2m]{bhbkFXTfO/H3_*b39?.e鴉9gzo&,\9#?cߨؐns96?nڍv)%f EZj*cg-dR)Aq;v{;ܳ~PFϜېQc5;6n}%9/Tb \x_FDh?OAhY*b^:w0>c&0W]}z"ϷzVlm -_w C|}9C{2UJGB\d>iޟލW3xV(Hf p%Knܵ` ׾>+M%ugиOu[Bm=/7IDy$^N6/m٢CW&KtkSdOy/hѼH$B~9m^#XeSF&***RP'VY+7p= ];CЈtj>ag֭wVQ$*55%_ٱV2Ueu ljr=s]lsQ3Ul@~y44Xvk6t+oc&%99:hPpFE~Z+Sc"sXM;zYY}55IIN_Xpl(&VWgM~/c^Syɇ@TTT܌~_LIne)J,ݲg^Q/+I5 M[Эg^ץOo^3uIU~Xf|\ 9͏fW^0e`&]D$tHLT$Gwne?dpѭ %@-$[7}0tett%(< p{Й>WNIێvRSRz[V,Nv2ޭ-7y3C3"BCRݎy6"Rɣ v1}Ax͌6."X?63ՅmWܽztryEo_Y/f tϘ4ri~ <S?_LS=uQQQ}lj9Hw޿~|2M;v˳͓{"O9>{ž?CԘZ M%2Uqsq%~+yNФjlGd.=FN@ plu`Io$04ʶ(h^vZ<`5*MoڂQSgis=O?11 !>p54h…~#Ѻ[Ms߶}޺;طq1sŮ#4nӾ?sTj=|;bZHTD8kaDGe2cs ~ܸ/{w$"4m]=lڍ>S4y5uuf>s6ܿ6FIDATa늟DMJJ21RŦ-ONYf0k,=Ge(L^?wjв }p= $%ģ! qDcdfAUZ4l6Ovaߢ 7ƙ=U}#b"IINBȘ9 j;5ͷޞLَT2z76Ӏa|2vrShܡ+^{r q'-5-]Ӊ&91Uۈ ? yx4ut30B$NR|Uj:lv yYaw}mC>2kBIxX())hjkcQ:OϠ6.&HLH@]C3JE{o&!a.ZvvU INJ"<$A@S[MmO@вa6:zhjesT|L4HNL@M]]#cGcXu"dhA@#3BSzz:$Ɛ6Zl36:PQUE[O]Jd1q\\\TylB(X]C +J^],m< ,=1Fs7~"?-ϦV]C j25C)BZzh堒l c +-y &V`nU~7DW0W8T5%/mbp+2kTRe$hK|8b5 M=vCg&[e֨iųQ0sWHU\*>exJLdyQu'5ֶ5GLaG[JhX,+mkNn,!>ۮnʬQCɗ_4U:h^쿀 *))uoUAsklr;*:l˚U{UC?l_ OFX[ 'yi'V3l1TYjB"t.e{Ht|࿥AM-,ԩP]i-͗(eSjTnl [x9wj]LdGnH$PoaN]~1sQQO5J 'l(z%eSj%>&MKf?G> ohTN?UjS٢rJ[:xJSN E7ʻQQ/չTR}lL#!AA_>~s} EB>T$ʢ,ʢ,RJ BQW(5;IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter0.png000066400000000000000000007365571247673406200251760ustar00rootroot00000000000000PNG  IHDR-DsRGBbKGD pHYs   IDATx}w|33PBHҋ (M+6TAE"x( bC"@hfcNn}Iv=)9#"_ϿZ_nĉxqFpjժ8pߏ^{8K;3gδ;qׯ֖xСC;͚5deeiGDDs%"nݺэ7HDD3gδ;m4/ƏO@:udG} FMDD7|3mڴ.]/]/y\-|r~ gR< w2.UdvR|}cZgoX :uHNTyO?,^S^?E\\/\w܁נ׃31xaon4hD{ҧ@צ ƌY8}n?iΗUiL65V!//pCvxtf7 ^#v" Jx>`0"HQpr$?,#hV;{N}7 p x}>>H}LDŽFc+qkN{Ӎذz $͛j!ĸG-,~{~'HnohKv}ؓF5Qd۾&-Ѷ_q3A%\OBq8@D`R0&pWIGtghB[JQw1e'bP\u' 7SD,Ԯؔv7ڷ,}3N 1B` `]bኋ!.|\xp1q]`\;\|pUI(O̙{Mzq iLl N֮Y />OOao.HD:woƴM!/}‘Hs>O]\)"{"66@(BE S~H$QW!x<=1`wb 8  N80F` Aؐ%ȬY ɕlw\Ȇ?"1)IfYX,3TIVߕ-f;BYqAL|<8 ;p{/;A”h0#Fid? !&nX||'~6or34J|8" ZߖSk(1็N'δIᛯQb$Q$I"@b / gN`ҋw$ط#!<q y`J |~޳]9^oqo xDQ Ͽ9\fhwXMaauX0Sۓün$FF֪I!q3^.R$Ne^0{u2l2סZ,hιJld`5:4*`ޘ37sVp7#`[˯$KQQ񈶘]2dQtXmvT`g~c윫Y #q .!ɱoRXo;RE;{ w8$63.?g[b@ؾi#}Dk;@"@n9` {~sޜF@iY gN̩(*, pn8@Ir̖G :B(zZRRDy80q> 3,S7=뺮X|DCiG/׷nS&Q/ޕ$ /fa`8X!ttfyhlBbd Zm7*o۽2}cG ~YiuİHs #a΢ņwEQ2h]{}`F?Nouu(KsÂ: vjՐ<{) 1ڠ1,\D[XaFD =aZ?눘`NDfߘ02)%0}Om `07ڻ舘%`vx<#`_.CC P%zTI@ɼR̓\\Ng^e{_]>lcQYlrr D2 `,s{w 8r[[e _4 ?2,t!JUl6IPDrwL.pٽgtci?XצKwZY'> :ԓެM[qD$8p;̝> kYi;4'՘yC0RԎ3%]t o?JСV-; |b~ϙzޚ3{AOwy; ;DVB߄LU@IeUVIֱ W6.و+OTݾ2 jI 64Q[I4'jgм}GK>[PF6 oT/ʖVs.#NjG\3Ѯo1 3٨o`KÍMYp6r:+BOs@C"~VupW9B.5pDEpzu-ZGkXHNHrc;gdL}r#& 4JGH485iVUym$NWn+~Эu+4L F̩Saay9ɟA4%Ə}&Y6;9&$aXxNưP\RߏkVk}o?WvA>5KsϮ]q0z|pj%'`˦M^JqwuhkڤI1jm(J~n~;go %Ch#:dNNҨ];uDN )9w/ +k1jr-"IĤeZyjH"6.1qx8^&Jb0Y \K3l@̚7{/ Reo.nJoۅD}lBPU'Nˮ,E/$bM*~mNޟaG7o܈VWWLm^LP v>(a}[.h#Z#3 Z49fYQ*49_-WUb:ֵ˰\nULNV(!H0衏(Apwā1buAj-z`hTfﷵz;}:岥@uscP~C-[>fGqkF- !5Gv Rͫ~FLct'1y$AddD8^Fʗ'Ϭo]W3NJxrd˕$((1 rb8w 8OlUM.7wrǀtJ2toGs_W\<-"wJ|'ܳɋ?8'σ "p ";Szacm/[jkҊ6<1gKQسF"`)tv3%#c<'^`݃:uN,z*"!!5##' $KvXx<#‹?j$<:Ќ<҇j!,(85٧FGrH}<9Qtnf űH5zftf94ԛ:Ќ .@/N2haʼEiNQSLCr*vH1;$ atՄ16Qq'/yb+())ElB`i'6V%E)a8-JQZQ9a Ɇe}g3EL|<#w]}~Wim_8ބqΣ{ lI rCGmM}j۶E2l'7nWw8\NȊ)Bb[Ay9ާN39a 8oڻeԪl}H [ʩq}]g{D @2/-S"~'_qRO:0uT-3~ԩϔǡu֎ٺu+k׮EOfY]vӧkwޝ38̝爧Qe5EK[=ݱ-c8`gʢ;M~x&Ow eZ8dZopk^Cx*)v*t/@fhj/} sp ԻB.0,:|ݹ5HF9n#aZ.!)ztCQ۴DL:z|TpD zbc-젭SzJtڰ扠(0%1BNz,rR#&!`AS殒JvY)hOwnl5:S"#]Nh}i^qs ;'B\/.%*#gy\ *CfOZoeyvt/^hMsn!-bE׬gㄖ ]*4/0ql-⨚'JNkLFQL R #`pM.J8|L)G1!&+| A'XW2OyM:sπ{`996$ȱVpC>`˾YZc'2oQmy…5:-[&M{vy 5V`6X5~c0sT#AU6L>}b `A9tPR才R/!;ƫ~۷9$n6'Oj"ƺF@tE˜iQQ@bǾcߌgQ9v'd@IdO5(JL $3a@6L9w2F{Ds`a#F=evG_ =27E EҒ(,*FLBOxs>%* #L|89JrWE $]g]#X}z k"<12=gMfdk-7S FAl)rONFێ!*\9HR`? Ӡ`~^y\1r{OpqD^\x7]mye4χ?3FD0({w4 (WqLB r[bO`2h]6x0^r"O%4 &KL ju0q74ߠ PfVl܊Z5_ )DH8G<Jmc{A1Hp1SZBDi! n]^ېw1N IEZYˀ. qvUٗH>Nk}sgh)b:)RF-t6AQ%ӷ_aƍxt钌h[+HDشf_̞8YDAb1¹sػc$";bለv/-6E[$)!F)ɒW„s78B#$g6jPNSy ^0BFmNF-`omP &Uly(I1CT[ L/?Ѩja`P)ib}8lvp>& ,|aSx3`GACi6Ɵc@]Cr:dƼ56$WL'Gޮ@7qgtXPf6,mIcF}IHv&$ ǏQLFyv"/ZIa!L>^z|dM'D-9.WmmNxfVB 1bߘ$J"X\re,vWFvmy:C(LpqjihN!b1JI "!T3G>Y@Dp-;{\n0IAjfq^`B}{rQQ()&= [0yĹ@BHm 'M o 4J+t )2/]%> ÇwǀP=3xx׎Hd(-M 'Jj41GĀy].Rɵ)1QܗsmƀW!(1RSd$+W 7-="bnY" i<_*_EGl^'M"RY-uFϗ)eJZ؆-mwLk O#+ka'#^?~A)‹1vH_\նkkvGںn5Z\ghЬ2J qRބgND\b"RO |98٣+З(6rF}*w!I0*O4E)ĹCJJQ9#dr9B"8bqkNr}?SO.p|[\hSGaO?jΏ}gn-B+#Dи\͵vv)nvn#r"yT5 > s۶p !+Q.9q:֭us0"hak~a=i?좊vGNG~iYFl]-n؀f6ɝ#8 /"1%岲ZC=8w@\qsDϔ$x{N^ҍ ذaCll,b93g`CC5"!4 xNp`@4Z!B _kߘht21! fv-.'19Hk}M[1sR8xAQ Ȉ*L[x鐑dN6~<^c-{"<6d`xcd(5J*p 풂ZmHx(Ev:$ ѻ8k.{epYی c^.5`uHuzYCai!~^DcvY>pyaNnUZrTGjv3"%9˚v^].PKEZe5X'3o6s?0e,nx_x2*U^Jt8?vA_ 8c?f<5`xܚdx}lZ֊rIq (ApE'1el1,Z@wnc̚bbWeQJS=XnR)cyp)(} JR0 lM pP~iy-9<*9P媐TB4^P2Y!P9vs@Z\do(M 2 8ȾpF+׭[[):K^>RU0Fs2g#40mQ!)<ޑFqTު|]ytd5j#<_D8w&ENyЀr8*i#rAΥP<;ן?l66cDTlV$(IĥT)V*jE(\8…i#5I-w:|S'#>1jJBQԌҏ  (/x\bĶ GMrӧN9.ZL~>c蚕^-8 @dYSSHpBEeh8/:\q3:˛]\A;+WvYd8;RMF#z)?-~HvY#dK,CBrd?|c пe`嬷'  7Zf%yajp @/`Ye˖w۵k]лwo۱cΝl?ׯW_}v]&N[ΤIRNN_"OF6CO{ʕ߯͹qvXE.Kuems0ۑ'O|Wp!tiTJI'0][ojcbާ`D,]6rVp O0Ep \-*ׇwNf&7ߌ/,Q ̫r \K[=U Ɣu@p^3_ 喕)A?))9 8q8. A\6Xi.vU7{= yOɁm\3eq)t쌶;#)2" QͻrjSDH>Nݺ#[H9iŋT}*:HaexK}.p\t7GOtGp[x ɕlOv%W KKQGLLFU8Zs< K룟7$@r.b{)yed`' ,HIM6ɗ`(*,DQa!4݀ݺg ݯ~ n6z+(,{y{ѹ#Jp=R0W9|^AX$ ,-kև=mH'(I ^]+R}, ixVJu'#-Un#.vcKL̴YxB !w])ᰙ7#%%;= ǃgƽJ- SItP/EN"f DIB͟(OU?@8rITH Dr>0b $I IP5#+OȊw‰ez %rȆ{Qn$Yy]_}w1r׹$ ]Ĭ#;4D@J 8p)URuI894tKլZwNO3E|^YN`$J O#xm^y6@˚.ĦTR6i}s= NdQap><;al-(M*8SfUQXQa!L AC4z|O4h8/uQvU)#$ZE2rJ ft YnGOM| urirOvלyطkhmȢ(ad^ċoLp<('%<ֱ gmhMLj_11̣nr~MIHY0 #9+4ӖfR$eIe+ҀB|20&+4 Z'J@ hI(!2oy <=yZTW|4<WڴE@ M%Evx3Nn'wh q4R4-7e޼[3ZDHrR Ɯ2k{f̛.^=O^X'((tS i#Y92'ټ<|vSNv hon_\9;zٻk6KW5w ]nyb'D=G mo J^8e-r.)0㵗V= w7"+0zPi{:o^F<`Dqg?ȮtF톍!1 N}Ԭ#gATuA % -_u\Α~lthZ#!0'1ꮛ 9-Ui%C;.dצdzWfصu woFkf2Κsjڼ?z'T5Ce6dp:" Yg:^zgNoK#¯ V|8a3ۜVPrEr_?AJ;>ri!ʉeWȖEߡ]O"8qӖLkKȤʥDƀS9q` ;O7LEPk6f"aFi[/ Cދ6i܄ xHG+'cѪXcxc(ueD"p; %.0hwΞ= .)ί\p+h$LX>&~޽hب`U8o#+;1i:ۉ߻sahѦ-}6ѩu(x y >܇pa\ݩ36w3p=0q*}%q3|>/u삅Abs:&y."w.mٵj9Kn%K ݡYS~]2l82jd:0j%%hQF<~y flZKz1 Ғ#9ǏW?{ª_"٢U /]B^i޽0o5ڝhǾ܅SvF\|<\n7jdՄCqR)B0w >11xq=m*RQ5joĺC'УUan[wK)Q>g )+CllV$ϣ-xᕉ5|X,@gFaS4 ̿`hCoxf50\~~;Ш\!|3gP-=ݲgZt!<}$ge|AV3`0m  s?|5 +v\r-jeb}OESJ*5_I!bR$C?(A%j8"chp$Ee* PѻVPY1CN4|am>/ܱq/-'!~BYSq]Wnjw!3+ LMɉqanpZxp%xp/UpGB =F5-9s 5W_bGyԪ=쇛Cvݺ'mm~"xWy#eyl=vZs~ io{~CM !8JhW=Z)H, .-=J=rȞ.i @`JLsd+31rq11n7+1'l,FrʬY.=kE*_b 0Y"q0k KF{X.)]5a4lbSf%Mq6ϏV LQ$?b 5@q ΀߻ 7QjR\9(B ru1(#TCcJYp&ȨJ] R tM;UۯƻdX0-peͼ]pX(Z?3NRv4PUF?N*zyy1ђIw ]0U_g.OH2z1j9~ s&%T  ۷{u:v2axur,W{$9 r-1`V:4[Z/+x ]ZR)ɚ*(2 fAIQ>3Yz)r" w IDAT N :˲6㳟ZDZ+-g,/̤CDVЉ|bfNz;YlDwV.dӳ{&xQt4X ,40rX5n_}qYkf'>Ahj5gU  FN XrдU0PU.>kq< (\wT߶soxoذI6[ML%E9zlX"%Ir,&}x{Aiر+F0![ JxA }ٽKL4[C$//Al|b٬C;?'s0le_~YS&CElݰ/@!!(J^7Ex8r` 6_Ι˾c+{rl<0s!`o~#l_`D8~*%%֩&~Z ׬yj"̱Rٲy@~.;sD eZH`Z;V?|8q0$Fޡ~[/0t6~30V~ fOkWa>p!Ӷr1 EErr#aKE=Ǐ .-GJQЏIs7E lItD)l¡%w+pӥ :tNןѨU[lZ{݅~ G>Go=ٓg-)8 +0~ڼ/\e;XRReW=0tauyb*=]+Zjb@W DD8gSN9r0^z9]B/ɉ8ZX;x톶?:G= sp Q_z9ؿ: wn_(ujchSG KmLG$'_,qG{гOߨ _ΙW{0S>}P55'Y0tp^WO2HǞHJN>{+xz8@޵Y5Q\\Ĥ$øk˷9U>wꢭ⹟΁kɓ>I[F-2(i櫯c'd$kZKώ3_*F7aӆ `|`>nXO{ؑ jn;k&dya<(FqO Įt)Vf3K?wN+n] ᩑ1`ӡڲT}K4K~̅xpYEDYAmWw8͛ѣtcGqv6}75`J ;΅_x͋xⅱyW9{w'Tb0e_ ?lO?Aÿ6iF)9\e]Nߋ Us$oqŊvcbeMͰ'^S/++3p+r)X6Y94εkQ\m_8*Um/+'.hgĘ1#ltNT0DʐkF٤8ZL [ԯEl*>!Iw+ Eo7u{cHHNAl\\Z.n܀oL1$1Np*׌jv" BX۶l}۵/k0g yg_U+KO\S%x<*UM :y{%tkkUǴESybtniݺi>[p[%V?ܪz D{?pODQ:e$`V(K~q/bY(.*FFfVT!hzWw΂c'Tx8!ǰ"D4&e9'd 7'-W:OTnNzl25sG.mh%JZ]^g'0U(J&Kx9zy'Ѳhܬ9g{-IT&ym͒y} -+qJl(8DrYb6S@PS8q>LQخ$ciq9QokooAY9җWTWOW?T5j ^eʦZ)OJ&A,+֪5M9-R4.P\˼n{ ]nބ?@80*GuIj29lC$ 8hKR&cqiT^\NyXS)@R( ;۬`BVKGR#rjz:mg,6L-a)&j0AH-!fxSyԴtxGoVβXce\DVg f>ӿx,02f蹂s@$((0>7JzLM;^J Xƀ)(Ei$] /؈-*G!Q;֐\QeM π# !RZ/BiԽ^HPZReAѥKr+n]JSx˗ 1~(t_y߲',y&t9 j&!$^@@MPE(EAEDy. 7=@BI de~Lٙݙ$p"ٙ9g3G%a͒v}h^ЯSKLBe~p;yjϰٰ8"iZwiFdI "":?x˖G@5 U7GKht~IO#Od^{}}riƌ Rm+LG>o֫+ެT4|wz!a{=OVn,;'E"`OOCXn &^FrsSO㙑QH^>Ċ\LOL_|Uw Cպtʊ5޳rWpKNCLY2f0E ]>~֙W_˝_Gr'{nmXg `lņk.ʗ/k]|?wOt<*8K߼yS~׮]AbP .^T7x`={0 4iؾ}w?CI0wJJZy&r=cnڢE @UiF~0a„I@5'Nвe4,X:vH;v9&ݶm[""z}]HڳgwTLy>Gs" &ȿsGDDk׮={87oNgΜ!"˗/SfhĈ]vرcԤIzONs؁}նwXX HM!_  e|qU$'?nP1|̬Uwga9hi5&J'έ[cӺuT"Uy(!"X+Rʼn8v™A >YsTs^5&&O83b"Vf:1q =7ТfU &>:4Ã[ܾs=ݽwgl^N׼ X_bؼzsOc9;lܨ[MOOfCBBjS'OXU!T-U#n {w 3LIKܼv:&t8|-D jХgQ<*J%ǫ&< U˖A Lzj%\8g6֯\) zѻSj% {&<7]ʅ㏅ T㎋)%ՖfS¸c+W54ʿ/]-_xоKjX|"<yъ+(],vnۊukFxMk KR022شv5!UU^k*[DıcPx|3r죱 xܵ;ɾw./g;N:e j=[Oҁ{o.\roL'oƅ)8dzulOlƦk("75Ld ţG)bGOJRE*-qپYU :%j[iyŊPInDݎǏa֊e·8pOP4%kHNG<<VqV8<$Z(O0']^~W.]B&MI^p4 7aO,ˢltosf= 's*S /_B%gRXRٍq$<1=#]S_W{nu\۳];wFVƝ]]~tTv~Im ȘAǹ )-Ceh?'G}/$2W hpGNt7=#GUI*i m,1[}ƈۥҗDqk騼wOΟC^18lzQ9+})7"-@p.["\DyY5d6aMzjD<X0`E1\Jx')}Vb ɓ'=J GDxvsc¨OPjuh 4B*u?~w--x XnzvlY_@ZWnJxu g5 -k3l0+9^s7Q\&שƫdh ;3݆+Y>cn4l+$l,Pc>!oF; MrۍEbR@@еw?c5YP$֌CI˖Xn`;\ Wfq|T3<<Ƥ]˻90VSng ,$4 Ξ&v"&6_q/tfYQVNd" PȌR0I͸7nF=T[JƁ`2q~/ķoG|ǩx1N'l["2TX`F=t6j?pyf$@gx^6k tls([?ϝ1p9%U\[0YE~:|_`ϲ3Θ1n 1Lcܵ# d=\r11jך}Hs[~Qn]tmѾoVbYHɤk{C^ϩ 7.>r :e [+h}p8qC~aqk/8O@٘~}.>2%[lsljA%fҔ㎏-;n'qi46DbtF<<H+'ar,NҚ0>g,+Z ]'"¿91[aWѧ :Y V[+ݼE:͕S:4DƌAA靐dt/ÚOTw:W%&"_B/g&f c&d~`8XLr4/aOD<8Kqn#x~᦭/&>v V4V3혶pZTڽ<@_@xCHU(.<Ɛ!"XxeXn` ˁ h +޸ 6TVe5mvb[ V *}6}xƠP8v/-(Bxt!JP^R" . 8& JGPCA/)UreB4(vY}V́Jҭ;ftt|0ㅄ- &<nÓs @`=?#&&K昻x)J,)xN0h_s@Sh2˟ Th İ r9b`@'y"0,6LB؊a|[#E6p,)UۃK̒1-B8J#(Pɤs"%c|&NSWW&|Xz'IQK F< FJ޺ eW6;۲T'z3x_ PnnBYV#!y{x}USILDU~$b">PO  >xG A/sdUW+ztdf~xp/IWW]Dr["Ix80e͍)\4 Mw Me^m/⹘R:訌",YZ cx9 'i1@^KLfPfeYZj$k.f/VqCLv_SVg|SΨm[B0ybOƣ^LYYIn4DDzBT^Nյ"|(pOKafqglpe ULqr2;n $ݾG ͉wJA~cO4N 0]oùS'A ش{npp.,;N1#s&tm'uW < z6 O0aرn5xf~V-"`۪XO ;?| c)ؿu#\n!ix"豣b],֕KH/ J qJ[O_DDd$""h4#'\3gY>@(\"Q |ϷA P*KB(\JnDђBEL͘ Jd+`B^}~"7Z5лyگƥ'ѹ4׽N%ܺvmf ]^y,>gk:4*_ihtI MJFaйF9|1u\54/??%hVvopT9Yri [CqN:=֢vfظd>jkMZbޏ`'(!K7x}p~ng㳶۴ǘ.=e'bX=o^532 &Fr<⪠}cJ4 B|Nشl!WBK"m,߾+i?6sMQStK^ŔX:g~;:ͱi<4ف*urh[X~9ń̝T1β0YZySsLc1)I.{oS}3P?Bk0KVxd?vߦD(\4PWN< @oFǝHKEtb{̍Qj  JWғmgʉ'7%՟GHBv4rX6WcxYՌlYY)[k&)ed`S]W*۶unQJ5c 6o2=.K$p8믪Jǎ '|ahR3f UХYCRz::s;F\UypE+TϜ.^p9%~<UkXg*mۉ {p_4}ؽFX ;z4'^;?Lv͚ɟUP 㑘QQb+y n@m3"<]PwF1|0^, lƭu]Pb+žaGҝpdf7rW)[H$ly0{tJH9HeAxe s;W/]kA̟5O+/`KH{jUJ8m;'#QX,lܹSɉOJUgp7=lؼo?a3uLģW^R"T w剚>ohE'OB;} Ji"Py1(X(6GDTbV6TM~SKVFӖjȳOrժ2F\{vܠC_@u[7nhgy|˻`0 2u*p"GVI;-- Yc\0kV9=%)̾ݻ\F ;25mq014Gcȼ0g%fCEҾݖP bD߽gӰ~aUN2eT+<%|2 ɠeڑv2H\8tea`3v9ahNr!&2S ""#`MP@ C1g$asBPӥJeVz.2b18$ҚLf0fXVeADH},0. krߑj%9|7j-_G)hѾ^MZ>oۯQLfz>_[ZO1Dx&:wA|8PO0Ā@UWs9^2Fsv!yfК cMvxL)-P c޸Wɟge2҂$GI l)kJZ޼%gNu4 |7Ô;9GiJ?_z 4$ÿ^]D#ґf/㉐W)y |bݢ1%]6:_&U+Vͱb<P#3֬[ϳ& -!!qXy iEzV p"1 #3 WS{<8}#Þ-C:X&1x)@ nCMD1PjDMo~be)2zDN‚T `۩󆶥䇸r]=~4#5FI_Ȓ\,2ߕss(W"ҭxw'9<"ZX`Y/qV k |pݚp Xׯff>O4OAvpI#?e7^Geͷt @v0VLn<|jBfC,5y2x/"l+Nd8^K!ϙ5;w###Cy\|1{Vܗ[71UЁ,W.e$d1{=:ul RhCp7G1T`d_ ha@( l+|Xpqr>| ddd37#DXc 6lE1z^qǻuC33zpsT08 sKuκ43J=)C^Qcj֤Ukdd+x4W?8;8A XChx ,ݴvYSM3[dȖM|+q@3PuTq@;MB9Qcb+aXk_8U'K7U.hʉ@F܇|bJddWPx $ܼP֋᫛IF%K2/3F `yt?~=-ŀ &.`W;pp@S'y&Y8sŽs qnL_﫢RS%"AxCSf+s qCYRH\29RNaĔ Fp"P:!'D ՖzqOka[:D>>= 0d̗d$+$&g13yݣx̰~ 6­s$64zQYL&J^T a@w (MdA1T+۶RkZG֌ t#jz۽ ?iaCC}GT)Ѩ|ɀAZt1_đ*,`)&O? regV /]]bҥij]nCtZ7UмC"e4dQM G̈́'CaREX5&plǥt[-p"/ ^YLzX4~ə{-]џO3t Dhh]Ŗ:nP‘rKOB2}#2cJd:25g^a_}ߑ^p+V?Bx0-0~if-kW#` St;1 "g ʘ"ѡ5&yH$τKohg uJHg)2RZ*/Z"%%-^Vܼo@ cH/-N.P eRtf2 =OfEHfDR1'՚~`@B@A}{c_D i3)"0HL*"'I'ILf;<)ɨ% e5ֈ /TJ\ZEnD:MdV@0D+JG:^^%ӡAl#á)!ܪahjSl:wD@ĥ1> jOm#ᵛcPxJkmq8QyL+Qγ)콱_L3PcP"JSmܼI~)a MsvGR}]3! dE%M@c xTri(`>v ID VFY:voٯGuT!G$'y;#[@d|Y z~OG&f=@B7&$1hԲ Pm@bG[H $'wNpo q7R{QeZoYQۼ<AqE?&1=#֬BJ B2`sCB2;Q=ơˍ.fZVP{IVnޔ}][6fHؽS0kQ" 0|l>bYA_[t[:uM?_GrlkƆKI(Y'Ywвt4 xNɲ -us(EX6gFCX̴tb(\ΝO{  ӧX8z/ ׮b?A-]3 }۷b*ܩ^?rD4B@'Bu*5k2:W-Z/[\JD:nܸxo"k4- B;Ie/STIΠ'B3ts\fܽu EK6LQ}; wgQ־t^~n~Īߛ IDAT,Ŷ}Jڴv{6-[k#nǼg: \x^u©Emc_?o$>ef'ARz5}_ᅊ%|"mwhR2 >Yp~g:*efɓpbXrv{2xi*>٣v;:W):ĘUA+ϝ(B1u짨R7?aW|6ynZ;> {oyjX AO`UjGW:hۣ^}c|yذx>>ֶ2J c@֟=v&}Xt,>G$ݾ7qX)L] KX,?uSw1#C9y(՘KV"i ֱy %|B3C~*eJ!%BgS_ {wJ},f5 )11KSJKU}7ѫ|}tM:pJi9J H 8҈Yd#_cUK a\.`EV/lHɤ_֗lldYb.)jOrʖ0ݓ ?ɳ@DO:v#W+].]945q &3:* u$ K5Dc SѶˋhEMfKє5*ktAzaiͰo֥TMR~RG۽2ΟKIXX^?:hȨY9p{WnAL4I0.s@*_\ٛVSʚ1s\^*Cmn(VΜiv0 , Q9R٬!wS'BԓN^<.oi̍oGWz]bDՒ1x{"tbhO#~i8rY B" ˍum5YYȕ4PyϚVHfj6[I߳"zˏ)n7u˖UvuS別%I>3ƈ H:PKևoC;Ub_3޲Θuى#{V Ql UL2> Hqte\nܹy]_bUrB6U 0"d}8_Y+ӈ} K|y YgȰG)wP.="id83$<[  1l,Bl֦qE X 3,\]#4 EJ>哠$GɈʗ)aKMO#6D,!*Ƥ#d g)50ػu#^nPCȡ 3 DBjFZСJiR*C^qc/֣DFwgv^}cܿ{}7#t۟}ondc,'fi/ #ޓbkܮM.jL;AT/ڻʂ}%&tYs߁Yydu>`Yf˶K cr5"uӟgjzb3 }$7m% Y>m5V]{t,R4N/=)` UHY.ڋ/|,~yOtU W50R;t0زËԫdw|= \;И2ⓡ:{nm}rWܖr[ndr[nm-.oiڵ#itl`CAbbŋyʕlaڵKxff=.\Uʕ+:'== !!AѨR 'N{h޼_/_QOڹ-wqmC[vp93gѣG#22Ru^RRjdo&ʕ+ a> {dd$jBŊUϟ?amۢj2e={"""'NP/_<6lؠ{}v~ĉW}m6˗=zdB}}i<ǎիW,ƍa0aJ,)8jbǎ׸87oaxbƌł-Z xAȑ#?~CDcbYPll,͙3'Z?FIرctqe;|e4k-R]6UTj֬I%Kǫ4@$"sΑlV];..N9sڸq_'m߾BBB|wLn"" 6@yŽe˖/_>gӧO!deq߳gvrDDM5j nҤIs/_nhq1cvr:0͔JDD?{'N m6sѴiӈ_~.^:UV-%Zn̿ :?s^ۺu+Zl Wav>򖻸ܖr[n@5ܖr[r[nmif#_r VZكLv>lgTl6n݊Zw<1)" /7ҿ}/k+n~+8l|L^bpJ.my-gLÇq#/_ dh|8lXe;v(|*Q^ul^9XO?xozŦ^jp9ySލ'mz #ع};oyyƎt3dߤ1ԸԐ\Ё,ތTHa_A_8ys~a5<2)rOYVFeQ3ƺGw:.۟p[.L31PGߌ{4M}uK/-鋗opN$%'dA!.#7x-=N:{5Ԫy7[M99TKMhq1Ԫ]`K0{5 [@.b!Zn٬/v['Orc@TqAZ;4az-7i{ ?<3x8*VB̓knݘm`gSkcq[+YwuXƶ|7OxxM_8#+%vG.yɺPh޻gzhX*U’ٶy~#/?176n]:y=E2*5JҪׂ]yE ^os]kFّ[EfwƎᥑ Uݺ~m\?!)r㽓SR!DOLJ6 GhK?*ζi2f-Bk8m;y6*!`a19{M[&4OF`~>y ;m##"9E.3v3QY*oݴ&-Z2qb4j֜E^ZlgU'>C1- -|ꂿg}͑ƓCggl^s#]g1M]2:z^s ￟jիĉ'&%q{^lX%#)*K/#g1: pRRhq^q&}{!!;^z>B.#BX}ߋ1tp3:\r1FK.5-[kqOCpᥗ3i|?w! _IPm!S܆d8Z\iШ@yK.CZmAfU8vwƄs*_߅o86b mNhw}Aǎ[o4zweCM79*`gnQITΡdOYVz8boo Qߊ06Tb*vszˑŽwܰѣs}53UE,h4URR=u;"д,? ]c⒒#;\mW\'%-dŴ+vu>}(Y\W^N\BoK{'h-咒Qѝ?ġPٗ_*H'5k}5}sB𕗖lHy#a(Y p|h0b":bܪan kjs9#)1jF dcdVi X>H߲s4PFBQuXhM~NBP;UӻTUErPϩ҂@gar?oHg1$ك$i]AY$$iH+[Z,I IHHYFB;rq<}{D@=3200H-+4 }:oٴ{o7#z~$TUSp wNHHBV<_~9 :aY:mt]UU-|n fMμ_%%%z7ҥuVI$ E!wkO֡ YH7D"2^x\84Bl.Y7CBŊxYD" eO\@oy2@ qqyDPkBVjMf1ExKNH~8׆.=nE₎]f j֦霯0ɏi!%&'Op%+&}Khٺ5r\7(.Bp–B9 Kõl{ '%2gKht;ƭw-wfvf԰7נ=/"m6- ' `N@UT$96FwZ0 ?G_8F&ę/x_VD!hR vjj$!5}4 >}g8_{;yU5xn<7]ނA$$N׀pO[&Z}ah[RRž;ٽcSnگ?=5lծ{r }@f͞u¶"+HB*bQu |fl 8BXp;Β8$yr?|{$v`sohO yȒ%??m^QKTU#ybR8WsXpc0UtrOE9*3o۰!B@YY&Qݿnރyt! hH }ATjbt_gުqc*Bpuno5OpLRCׄDQ--.-`8[UcE4n܄'#@e$G,IU?crj!kVR\ANggI;-Gkm 7 nV.]E0xe(Š6r^2=lL<7V+/If3qnקYH-V+jX(/OUE(*+PHTr#0Փ+;_2]S|pK{?zFil;ŀ  )HN16u<.-DȁكC&,ߢܡ=s̫ (pk !~0d"KxdOy9KWTG+YPoi -^ȡ0;ef U5ExdT:xL 9ė"O5!_~|W}< f!; O >9}D PVm*frE,޴C?/`QYXJ`ePUE9p_MQEo`=F I,{ 5a7v Ʀ(>WxBfYFs,I 1a`lOǻf{7B0p ( Ufm|w&lMğL5[Ph?$JKKX'N+a G{8-h -:wrN8ΨaSVVf6!!!6܆ֹKZwEEikTfᓑAFtߢVp(8avXנ/2yxeg3;TblnuE}6ȇ"ڜS&cT?$=2?JD-,[5)DO΍F[4E7v#;V;ÊqFa"EvnFBb7h'VЄKL aGǽֵqm߁v. ij>iM͑ ѯMV#j ,O ?͵XpoGDnF'\ }A}8?a?0Oҳ2j: p0U #)SOG$V8P}"UUmǎ9 {fz !x<(e8v`168yo Fm~wѨYsGVsL(B&bA)nS%$F&77w>w>>n\?S9Im@8Y2(,4=pd2^lv-ua '&(FԌCڪ&UDȨL]۷smsmҰP-Q|^/M KMOg߫ٲao>_͞kX0655?Ʀ a`QCC{0r =yv pX$h TOg6z_r?z Ӫlߢ}%2] ÉkjЂd|/~xHa8$%2Sp 4Ij% y4gkbrTslOrzfBٺ ;U=SpJ BTqT5+TEw+$}6jcHT\ ' Z)&$lbμ6es+Y:WR<~s׵1K}gGHC"R~>1Zv< {f? "FyF9+Yr9!eJU+;u{(>O<;4CZG` fPDDbk]iiI;8G ӱ,]01G;sO1#yUcUy Eq "5Dr#`+/RZ\K#Gp(nlh"ɞ>d NWyQ9+Ԍ,ܾ/bԁ(, %jImfcpIo@OGy~=n=` z\tl>ZDbKֲ5ţe#~ށ[.#T!qf ͕.ikGfOf*,O*WNjYjq.!15;9Ŵ ƟԴ[ѱvN? cSctsJDM Ԡ ?v#9? /ŀ~}L0VN%wqiK0F M4F_}:N5@^hՔukC ђτlnr4۵l ;,]3y9E 3h+70WmMn ך{0-\u]wcI4#: I q4>9&:ɀ|ƾ*ϏC; tkj]!EL%EpN5`4%4nH\(4&fkr95}(!HyɁP9WjϕzBIee^s$mw@UEEE0% :4҇=Xn]}O=PUtOgwhaBA&k>~\A0cKdi8sw"%% 65)5͙sOlO '[^AwDx蹗hzNK*V8ʩɭ3@) żjڴ@e&$Y ٜA,&| u4JJt} uG&of-xk8F$}c j~TԚ>|HjALYZ!TDa|R^n0)xw J@UTfΙ]s ;eUcQK`_z;ه$陬 . _a ##3_ɖ |v(ŧNP^^e{2j5ǥ:~s1vE j{ad~\@Я% ~m8۴%kBrBPKKB{-cU2yʔ!"}Ug.::˯I\c3 7i ";n ÖMC8}4k-e%Y W"Qx.v/z&#^xy':\މFh[_%I6:ݹzRQQqzƤʧclYc'>O@R]~c n}Bvl̎͛0d(IUˉOHp7%*J"Ғ(!%$VK dlWɔ%x~k1N-Z[љW_`hƬp,Σ%9HuRa($@[ؖ$KHt82b]f}JAUԨjFb1\Ӱ þ]t}qq gMcX"5nJviֶ=۵~ᝒ*1TKċ3D;x!q0g>'!\:ڄue 8"D|MqQWj@v IȐm8jhNluye-p?:u֧8(HpkPuFc!;tHmxan6V)]e$`^g1Q c _p*2bNhBZ5!'CRFDJJNmv QDaC;q9vp짬Tk[ˬ:m޼sϝ1),[ 5XF]RbeWAjQ1US- AcLUa&<]݆g|Y:+톢Oj[ij1V!LdL4ԣ7z6-mZ~f_⨲f㤳 QS9|޵SrΩ(`jRZMaDм`1yw7ܼ?q1nRrkHMUTdډ-*iU =KE.rl[HM*[`in;ȝ4rJn25ـ[EԆ,a7ϲ4nՖA#0h>P'ov]۵}{,P1SAz*ehRRAedYFx*,{5pv i͹Y_˽sCU$Ŕߡ^߳8WUN85-+}Eػ:Iήf6=E;7o$gvTW-`ŢܻU8r`?Yߌ#`"}9^-do[G(e59T7g3Q`풅|%U3`IvV cG0lSwK?Ÿ"~)z IDATrA[BX[8vDS~#`}wi)^>|/*PWG9G 8oSھ[79!ؒ+"l^7iY{w͚:mzrOeEEZz)+-CBǎ󖟗k8JJ#jIJj* kSKOB:?vJ[L<|t&ԥA}_RRB}iLϬaJwh5x8rUZun}/`uٛg3e^>_3 <~~_AC3`n~?~In|qz(J\mh x$!ٲOE5GubHsvr5K;Q][zh#Fuw?R+..&99_Ao}:ύ$&%'_QjJzzanɢ˩ɬZ<1mgw]Ց/`%kXx!)i4o2k.t |\:t¡{Q> 3u ݶ]ȲLqa f@>ٳu 422c4 ^xz Ia-S[,ZN -{u /7] Uoȇ>^ hU!`GBc3<}G/xyo`~$B@Vs;|zuFtͱ/&BRXAIIN C_&KҮɬŒy]s)kɻ?hLpEt0kR'd.]LFپqOỼă羥]CTU왮Ho'ڨk(VIY$$h|!.t ȱٻs9ӣe=֏eC0M!}dGw$!`ө׭д&%%q]{$Jjraf~Yp-`q9#m5"*Sz}:q8Uxxg>9ט_}ΜmyO"زv8w7Ͻ?θy]K n~q^Zw<>|i{};Yq]š:p?JoKu8zu?Y5k!Ԭ!`x즮m! g6liվ#镪}+ӾC/#)59NsgfUxoON91eNכa_Ow 7[8CPVZSRiN B~򲍨y,׌=!HLIA ?OS|!ßZFBO4j@Nz{E[X6B8%Y{0*!fzgb1;lLI▼7mbXΔaK$/43?BBj.AbPr3vѮ];}<<Ͽ\rf-t`{3^$h6lB^j^Jig;5}: k8#WOKJ[n+ŋ7#׮#ks fdZt]l9qWOIK᜴v܅0YoԪB:sQB W?.:gL]oߎhY34vۜʹlۺ[*ܺ!4ojja; }QoDJi4ƽ7ހпG7WN㚶-upu\Ѭ߅J} ._ucN5-[2{L>?>=e^6o[/ĩ'QR Nvͪ} }0o/|8UdMÊ5ҲNdB6ayMʙx#̸>ƱcG}[T6$'=tĝps">+^pojsj@?#|xhc,^ȒKF%SG̣3``B˄(T5]YF/Fr ׸9%$07QK[Oc_۾MHsjeCyԏV "~yy܇#FMv730Yo#ap%%%靕BV|gWlıbZ;9Z\ѣyg,u8l$C3uᅌ.-dYs7ie,mڐ_+;]r8| {}*jӎY;6uA8|?k6жNMpπǸ{u:}7jLFŊA iLˑxϧD ZөRRSmwyc_seΖyx楗|QGJJK9~=DHkko0evҳO<Β?Qn=ƍ}r4%=ݠy0㱔3y7#Eg()s.[8GoeK-Bva:szz:ڴ kc{6of…3 4k .bl.tM[ڕ+)))AdZwQ^^qƛؽs]v9'zu)+/ıc<ᓱ\:Dž]acO2ɜaG699g W䂋.fM,c!]@ /DYS&-/~C_p=;SQcn̦I m hEIq1?LO5rsߌOgYr=۷5{O ? (ϧ ‚| (*( ]nz>J\gm#-+ 4ph6^X,x˽zubu(Ih$"P|ZZ^ {o 5kFQ>=OFbẍT̬xIˌ9g4K#\[^"?z_ N¼!S?Y?IIKKtq#w֪{9Hf*x-ZRqcW-COJ4p7:9Z𕕖o 42_hgy۶f |ʧГOOY&iI$%%ӗ&-[Yǖmڠ9XaSN, ݒ΄i WfQM=F{$IB ּe$#2}?Rzǻ[+%1bL&\Rhv!9֬%|`j>p.)) m۱rvK}6f˯5:Xo~%+&#`,Y0|MrϒR*ӫo?zGj֍ ?&VYG2m_ɯ38jO3oUe}gulZױy:N?F:T\*UȬ\JUP1Y̬Lf*T\Jb n+=a۔ =ܽLlnx4H*t?.CkҠwٕWĻ^?C_ _9VbQ}bk/LͩEκathGEm :j5M\t<8Ѵ:9΋NE;ʽgSS)K.t5u:D=EҎ:Ҷ[!q+-5Gλb_nvAFZ %@Μ!bzŊ!(&!Ι+:רUjm|9>sIM̉,ɖa2k&zdΝ4hPqX$q=G[o<{4c^4kXM0Uէ(FW iDD\8km[y~,XRN˨HYYYԉ\%,ٴ5h ϿQ,7lIFf%*W%+5:ۂX=o!uG,}lwPH};ވdV>XB80m ]ULe{T/bRpؠ%YB7-07DmHv_sCE(Y !f4Ck2'&&hڡ7/P՘#M*5{+Ӱb}> I@ۦr B\6iDnz_M*ĉMZZtv =b_њ#+צ:yn%+u"4IG5Q-=m*˻\˺çHϬ> r/"|>g f*}((*>|^/ϋZ^Z^LSZR\ $yX5w^RVZʥK7g5 =(xiI5i2GsqWIh?diionN:IkG3uiiL?cQUp_^Y⺲4$V!Ifv9-G@fWTahqf-7Fy7$OFppYauJ@F!BI(J"oIm)x̚{ SRRH 7µoN0;LO@!ݓa:] 䦰Ē!KPmaő0wzv;cyta.owsmP,SyzϘm\#9Q|,/-@USZkpNSͪ^g_}M9j-V"Kr9Sge\ۣ!UE$¨܍kװrɟ x+gEWoSPcP cqyҍfȬ\:R!="PU.T^FO@#:aoy(AB,BۮNBQ#{@,aB!#1*T^8܃ڞ=/ΫWG=EQaJz>];rA΃3fӪj:F5$9jؚ݅Zs#ĩV'"@,UU7 uH9urp>Mzw@B!Ϭiަe/a>U qjśSnUBm|ƷE iTZZJ֭w@N:ŶQ6UHwic횪زY1m̨֧_sŹ9bʆ:{pփ}n̸ D"T[+O=uGcC!wݱ|^zbO<Uw SӢڷd~7#T Dum|mtDVLy;ͦ!×/W^´EK@xTXV`Ɔ@KH*a)F t_IpNhJ[ٵmyy~soYK?rSU ˒% *_JO?Jdʲ@2$sG_pIv@ QU|奦{IDY| HUۢAkX A֍B24"!ji1 sUN3#ϯ}IdGrE-$e)/Z9 pktJ|>EcEdi*Tk١FѺJ+v O H:2AUz6lcNdQ+XIAktY})>є*`%/| x}}x`wnƼU釩V@ o~X5 TUTaЦj/$p=n9.DzÍϰˑ8 #DDq;*וse[N7nނfΣuks_*e .،}~J>ek.l$k'hl)] E6 IDATȞ u Ն[!>dsXKx+(6A KϦc!\ mbd}0xe΁!g? e$O1jz;g,X{Ғn#3wli rI=EtحeUBBB`pFdf,_W`SztWddL"tJwU Y0"&n>|G^=}1D|Lau_o=WTdO:W,e_Su U53KOrT'Ҙ%E$X5..>4= E)BÖ$=C`^5|Ђ$W"hac՝Q-.TrciHL8 mmLI-%P0w)L~$H5[re"IΫ74`*׊o.附gȈdcM uمB:X؄E9](i咨adKuF0]2O1B2r}ztɿ.ͷ-,8_: !I(^/"=cY ye%X>MN* dɩj |A+gl}= z=j8fZgHE3ϲzePRR]eQNLW U ]A,hG2M|4t;hAp vRb.<`FMnNFiJseV̏fMZaQĢ|zp $ZQ5k!yzU KOZfDGiKUOn%&oBĖ%o-&k:Xﻡ+gؠB<圞0?|)\ɰThT;^l' _`+Za@@_yMrW騑ԮK-%oӳϝ\ӳ䱞;Tmr_}-El kYT%g\9Тzv@Ξ6T|Oa?8SM+\K!PB㪖MػkO` EӄhP| |5jRG {.*T KدgFFϿ@V [(#Z刿Rz&rx#A׫;>g["J]#MɬR?Ee5lȐ D\AK.nt$3ر"V.I% BCq0g/۴} fsLҞ^gO3x9cn~Qpؙ*1*jS.lauCz(ߵ_cHIK]ӽdVi%gD5mKO<+}@r-3ٰG4mܭ1e}Jז,rU-JQ#l~og%j[=xkԬ%lː7GO/ȥ ؼn~cwӦj7t8XOLL5ja L=߀="z)0^+Ѵ]\wqvy>رgFzȰxu"lX@ Kٽ!`/2m*TIrTs)i21YcQQ?Vc`jЈdL];+W >qG g-ݸqUMxs'w^cڸ16e"2K`G:8J}d*뜬!%o#hiiqɓ@{9w/b܎(c?zKo"8/;6kᱻoc[]-{JvnĊŋعyBٳػc;A4=N;ɛ/QVVFYطg75pJKK'$&i+TDe1.5>tWBf,>EMINI h gv>̞=u_N2-]0Gr0gǏ1BυlZAʥڲmϛ1{vb ڼ1"n'"6MZDi6~m\8O̅|5b%+T&a߶1;vHh*i[[бbaJU u`Y [IJֽ(y`x7Ljh!ӏmnӢ@[3#/>!͋F[Z23(Ƀ8RS3a갷lɲs7{cxMtGp״AA̗3Z] J*5w6EKRDD=+TE# RUdKb/_$2O>&.^7?O(HfЈHC(P$36Nj%\Q3h-p6~=ڶa:u}GIJbT^z{Y*GM,ZdZ47Ƹ1<գǭjGZzGI =OdTƵ,R꒜{2tk^"un\E "=-VӢsw0!I_He8ԳA7y9EFͻFۚeM4 [:M,96]X2Bk/+Qq3 /ޘXv4˸&M=39Ժ>н0o13ؽk鹟L:OyGPFTY6UoGpt:㳗_z㡭OH'.;OBc X]7yQE]M[uxcJ}׷_2}8Mo r{[m-P>&+UgG~([޷Wqk~=F1dXҪ36SWf3^Fקmk1={^/̈́ -'WhBZKjd9‹qratk!wH.}mM`{_&'sa}wyxw%9?t%<}δi9dGطL"rSj5]f;{;}Z^&|0h}O+7f+{wЩC{`_zɵ21'M+ZT?ge s*_Nhzl,%Kz$&s *U⵽[$PL89o*רI``< 33 !#Sz 9nrnݸ֍ye |V.ϋ|]>_ _&;@jx9̙>|mт!oӍ+1ׯS:~>5jի9ġ}; jB*x\x>2z[!gb{2z.ƚ:=7Q+WlP+/Rq6nTTܾ s#y۴d>؏/=Cޢwgi:Ѯ^-Ə1f]O:uB֭͜[,؍F#Ţ\?wñV0Μ:4Ah eFܻ{[nzWvF|||vl)t%Aʥ?wMLr"^4\PGv_F.a>ΜvyDի$axdRL2vv8ߢ~}-KYZis*E"#iR6=,{.ݫONԮXyf9y Ô9rj '|ٻkZիK墅(@̛֭1g4xxz%| (_2t:6kLPSU*аB6R/iddקMb [-& OC7!]ݚR.OGϙAeh]2KB޼oЍnM{I33\xA#;{4}^x}ǏjoСe dO+ǭ9s;m:VW/'MB=~6i f-^ ypjz ̜9\I6;sٔ`V\F~ 'OnB_6;~4Gظ.^L?^ W'6>bJ9?z3x0W f-!4JGa#z}Z._0nUo?.jZ o3Ra\MLa?y>6K΅KS:2 )TEמo}&_2hrlKgUݡ^eʼ*];{*fsݱYkMʗd׹)QE`4}k(Z٥ Orz>C]@>am:ushX*>ϽܗߡCd@y7V>GZoUW,|ݶiS~߻G%IJJիTZ\.ݣlŊ%#B0-__|HDd&TN9,>D*DL{qb?P]5~y/ic .X%a櫖-^N1rs831ܺwbwo˱pw@3G9qb+孷9)k뻗Αty|L`hW֘_p.|-rvg8Zt!Z wrZa1gNSb%]3._Y(mάZAԖjHjmф![Z ,jgmr<#9 cVYC&5ZM1LMeigis} HI0fcLOS mߘ۲.+%I0 u)t5Ğ՛$rfrcV&~N H(MKKVFAAwbƌtTXFbA˖& wf0Zj۴4o-Rk)+Kit1DFzdOA𓹎1˨ԜXB+$Hi9b೙(7/ѤJE>@ep"we#Wdn vz|rzG 7W )+T"B%~Cd:39sKmɼyw"2p5$7rAJTLe ū 'P?Ht KfrWֽ5!X7ЩJ%'[}erZ/ZVt}%j+-4畉E6+ii ~IrSO8=t*|m0x \ ?7ccyK~=xwGf'E%??ZulI'_[ v-| !(33k Pk*Ẁa-Odݪ+XFZ"H`5|. c#lfl2n h]~ /=-Z{dmAAOF~&.괕nd`sLn6LHkuI[R:,SI/ZCC|k'r* W&BVo6H?v^;t:!HKIII:{ vT3e _dK3ewG^vvc=Ar3XԏؼSpO,F@|m2QkdRX|kǨBʫxUTDJjj#)$ۈ9$&)@(%V;;H ٜrMvxxOt9.\z "8T l ~AC? ++Nr!uW\ˬO]ZsǬp}Xv /Kiv^@e9˭ @U*[ Sȫ=(u$V/MY4;ڕPw1efمkP"[:ڡ% VnI yvVR6o6[?T]&EfMO B-dfdٻgN՝i0xfe0%_+Y#ؼmFVLMG،mp>ջ>o ii%'µ$ L,q!3IH7N/dP0~p5~z@|-MVnvDĹk+^1~[|1-|-yײcn%{EϵlʚT'֭!.4~ fmF2Se[w-yۓxv ~=xn-oILxUf[[ەR "ɖ$-IQ;W[s<\W!Ӄe=9˿#< wDF=eYִ:[`p$ s3|m1k'5e&V׺X>b7rARDX<8\$մٓ\Y#8 鏫ia>Է k$tytgm7HJJqvkЊ;{`ޞkpί{z%ʛR.I-;wGe$>K"8$D?_[W=|]$%AB3uCMδo-|m2 Tz`.Ezxisro& HOK#8W.=%9U,EhC(QfNCLSl*sM6)V5Kƚl2dR2RF*$F+UvAz_A43=õoXM1ˍ+Mz|.¶}~gef:Ȥć 3$[Lh&He BXDwI_STi+DE\"%KYl] #)(M֥,Ԍlɕ0zo\Dma'g2*E\d[.ܲ TL.v6A ).$&Y >qU)Nt23XQaXg#BB4eY4wa[nω0v59fX$~y](Da#Is-ˁgf)KzUgvFOaik=Y:>TԐh3Olx"\\_*bY.l/]JFF&ztBtpSXlna.w zZss;|-L M\_ۃ檐5*[yӾ@LNG-;̊es8ܞ>g4Us鑱q g.5cVLt|oŜcal׋{[вz%&B@]lvkd}fЙieK"Gh6KerŬt.p= [>`ƽ0w`Ԅ JYy0QA#dsm|$bn%'k4VQW|IX 9_ |Y&8wU}NPp0iibBV ZWȓOE8sJhehBpvط]=Sh˺ ףU-ci]?/b0NC$%zn~$DDF~BP5Xd&n⤪$ţh]uk v2C{H䔿';wvv+_efv_k̥s&d`u 2z|I̜0 #0lOD\, /k{w@2oDQVKb.>Šc1Jm[Y8}*~dѴYO+"l6oB0בܾq! tS,SL i= Ge,2,1￞0w|!B/&ordnLxe.RԌ+1owR|rgL|T=ݻС^ l*cRSSi;o3 %&4 2MpaV 8~Y=B߻w{f;shf.>^`W"ܽ}Y_۶,;IKMEHNUy. .>i.Um$ed8,R8&gҴkV ;7?3Pcۃ$ϰ|-ṣӤ4:\mlZ.SK%:ҁ֟LH=~A68逥I}ؠֹ"BΥif^*T摯332 u-vs_z3>Oswľp3nʟz^\wqgWs\s*ΜTCþvnZ@PPЁvpRD/ $ܻ~-Q\EFY̸հ K:>FZ;ƃ֡yͱ@f(]Iiޤi/R+, | D^/wfG'oBΓg{Ax,|56bz.,eyF)?zE]ؼќ=6d?WI)fD$UtYV,߇h\O^oӘϽHxdnxWg(Z ͻϵ#9!s7AQ(B+xAw|WG#9nJl8No0~؞j'7%ݱƏy+h =@W'fq&ұ;s|8eW'8abG9z#X}>>Ǹg9gbyTaK7Nu=m\7l"}8Dp89U\/ckN!&%iְc@: wac?+? !a G'z6~̫_ryMFF2mmo0׌_ybm4fO,pynܸ~ 4jؐ "|>| |>||'}>> w> w{@$~^޼y$ ڭ[ QR駟vvi~3ghzHĝ;wlSEu9իW$z#FϱofM6̙3̉qK/1PgOUT!663g賒>/2+V9:!Cؾ}7iYH€;w0N:E1ѿ;FffƎK 5k[XԩSԭ[̉|PX1m۶,X~Hĵk4q{cǎ4nIьJ*rJYls+۶m?ɓ'_>Cu^ ..EQ~}ׯoC\rѣGCDDzݻHDY&ժUs{˖-lܸ3g،m0lmٲ%`ɒ%HݻwjժHDjjAj IXrz>**HzIӦM=|x>AܹE Ϙ1Ccbb5t"$I~;))N:rʩ'N(m([=u3--M=V^=ydd+&&N>-a4cpxׯw[&M !@v ְuVʗ/ϑ#G0Lףi)))ܻw$:w+]4*UPǶÇ?wUT;wv,'͛lْd>LBB\j*E/'֭[FN<ɏ?D *~Ŋ`J!YW_%W\>e|-yȑ#N:es$I[n9ޥKѺukcJÇB/_>7L"##Cb׮]B!.]$m˗:uؘet"L"UMBlLFM6yUWVͩYgQ˗O4i  IDAT{233 N>3f1L߾}Eă?|Ď;lg6fOzj۷oۘ,tm[2B,WfdYVqCef -/Y3fj&HUXt){u6=dee} iO`p` ˗/gɒ%X{|iڴQ>>|O_||'}>>E)$''K##h쳚hh:tFrv넋 ;74pE#ylR ؏P-q/j&rs!ODy ] xP1뱯_Btd0e˔qL߸AjD WyE[yl8N[~ͷ76|N2~ ?{Z4oϕk3khwqCG;gi@gWr>r`_m>HX-c9awҜ'ݎp,Ou?wv6C3ӧF {^y#]6w~ْ ̷z0wt7u _Lso Cf*>:T%+53y]w"< ϟ1og?wdt4ď>eˆMM/ƪk7QT7YS*,za*J3la oxlorQ ؏`ţ Bq]lpe6s(qMRb" Ʀ6Q|ܹ}F=Yu*P*:qcK|t1ϝUǾu&+GڌlXCfŷt#)Oa q$&>dn.=Y9n]6o8r3' nNW|Uj }Ef/ĩS]6v͚Q 4 +FGSpa_Acnݨ1O7lH$W)Gjabжv5^ ݚ6еBut$]+|<~<'.]ryI8|ywoY3͚9;t`h5Zp\p9JDѳc{4^q/. 6O<׺]nAQVUGsUF Tż_!lP7&fs͹O̝2^ר'qVѢYi]gO}#$.mrp~^ߟ:G~xmƏͦ l:uB6ן6O5d2Щ{whEp^h7mGAu ۹t .a 0Fff&3>JG^txiii|x!a| "sf|6cL𩍉%<":]"l}VM(]V;Pu'ԨS%͜k"wPx8bD.߽ @۷la{ѡkWnG6UJ=w1wW |(=ߝfd,?>9܈Jb #xK!q=*o,=_/MN3c._b߇WWl""se8h3g;iӱ BmP`z6666lVf<'c9{4ذv-+.U6޹;$'ӲA٫v*s_}Ell,E#(oݸZԩELb APr=6}IF9o/Zh)Iܡ\LHGu CBC9Z!JiHA|CيJu0>|T>[~@XKʥ#a4 wsV%h-vՏgNX8v _ulVkD/*u~Q)7@NݼleCBy~*TBбpE>|g[6ᘛ{˗#]/mCNA+p@fFx3_wI;tB"沰uwL&ba4V],\ *VHb6y5!?OU\5Աph9ŗ@j9ru6&U$| "Nzz|th\'OԨ] EҤUkYsA:1#m&\\:Vn#gQ ƌߥ`[0Oxn]:D'FujYVGټ;f~!ҭ ~4`Ի;yzݎ[i׹ Qf-]K~HB|<4D_\a{tu.9j9Vn=|9 ȭ\ڄ#@jj*GTqu4 C 9/rE^zS"w$G.^&0(gQZu۳{%r/f-ZqжCGn JF6 ^934r{l,`F,D|5}:О?B0siX5FLp Q&N'+VpM6!v96!W\|8w-V?jC.;Gp\ `Ç&:L۷cxY%+V׭{ )Bu'n!Sl9N#ʵW{x6oɩcG;g5^}{A hu!XG<^^@N87r$ 7Slr@ƍ)_veʌ<۹ e nk|8;6RfMlުM)_F*˔E>O.4j\k BBm ra]UwIiج9[BֺzBr22yu b^w7!l ФXrƶcgԳ;6fLC.[D2eݏDKr;>-[,&6׸R%W]jOQ?"! &1a>_ILQeĕ)6ԙ:یuc?՛6grfg$xl%JHf--7hfE]瞶z`ŹO:7 q! ̌ ZkkmZGǵjƵ:Ԯ6w 4gr\$jkV5[(T(q\ƍlT^wȗ?G_ikBmE=x&zk^32F86[p)N5mFe.Y얶0JtUȲc{z䙶Nq% ~,fGRFquOKL$8##C7M&sQY۔PЦ!ti}z| m\6Nw[[Inlo`0x~W'$|׫Jl, ʹ~NY+lV:LK5_',!B6l23_o9g,#Y<|mJy7`u0'g#$AS9*ӝ0 rEGzurB<'B@!Z^&wt Q1F07VKlP&Bpp0Ƭ,e[1By {SVlBJPCMqJBFd>y*#Hf)z̘AfjH꜓$3#AzC$I”e$35$$`^<%$|\23Ba17,TLXB͠0LI-P(q?.wgPYUDԣ;%!?3$IR,$x\wiyR}PWMt݂(6k`Cz:?7_`r=&Ss^nqy izn {D+GhX@,g@V+Ja&r1y͓+#%Ee|˄ g0O8kT![ dTX1dEdvUh05)YY2dal4!LFP5(7H* 3^{D uuAOO? @W!/cVF.Ƙ`FJ2Aa yee$337źbnIdo$3]00XUd==1dٵ~sgʛZRD) +N%(\8U7^LFw9 xx8Q ű3E?(`sWm%N2=s?, ԤDɲдSre-'ێo%7IѼiS<+\Z͚܅]Pʜl\lQVQٶ$ora;\ۜƒpu]maL|VvJ̙iłceְ`T.;Ciآ 4~ּ;nf5??̨TxTl @\NH he!4Wq36;ssL PvmjW/Yw>NIr[ca!A[Epw6k*f kA33w?ffb%l\3BƔZN]f^NYflmSit g/rGۛ7o׮]|5i[_ho\ii^#%3bG3.?GEiԤ)s.מQ '&w|U߳FzwD R)E@AAD.4AAA;HBH3;;g6y?B7;wf)s># )(8yk|NS?2*4>w?=;Ȳb5HX >h%oɎͿf!;Ѵwz麏Cg[yC{.&$h\ D݆Ѳ63(ʀ2dw5Celw52 +A3N3pv!Ϝ< !\V*se}nmiU(_̀1РAw_\$ rI0q-(iG wda |lEjUɴ4ZY1F(~Q~ ;BSE&O# 9#*'7A}7]Kpc"@1l%_=x@SRX91z='c.V=m%o$+q`j/ƵkRSRLpBܺ9}:~Ջb{\^N`((#@s <8#sB2.P*Q*uAs1/jRiQ)'4-7nP;&nj^!v[U4f>;{V}&(;p-csRːzFSJ:Fd u>c3 e{hع(g-``a.n. /xOXx8Ǯ-[/\]\|\$q>| Su5 (Bwx#5o ĵ+WxgB0aA#c }]o~b4kosEs7ecb%7n[|E䀻~zݨ~wU96f)L5& hu8pf:lr?B]`Z.ENO%[3?]Xr&6dhah҆COJLo y eϞ؋5A! h5F`ZO"3 9Lj/R"lRY0Ʌ$]5$Jқ=KI-$%>dޥE͊썻&. -CX2,gt.ghIz{kIB(A؝IjG@R7k_C Ue'12f$5Te|IKԩIbed(c I}:'xeח iӒ(35qLrț(VU<֠W^_%" tTN\/ptz UĚrOCHIEKX,j֫.dؒuZP/Ff=gZ SAVZޚsatL~!v$k3sW$ĩ$e ww}7GbYl? ?BBB,VBX _lJmZ[zԳS!@E+.'f*ϝZkG1jQ2CB=PZ!_t%9 =5Kdnt֝{]>ʟ6/<! wLarEEʲ^F_K&X5w S[?ǚ<[4-c఍<`$7mJvmXZ.]")1Au~4ϽMّٵQF,1?n}rHQ~.2.*?ns_KH(!j9F Jx F2*WBʴnێo5,a!etbڶaĠh@k- z hx$:CX}SaJev|,=Ǯ'y$w4ԝ* 'Q|/ZGQr[0A- dnƃ n$N"Hסe * cp/ALxM .Ã5oVI٨&IA | _,bI4PX(iYB.@e 5;7Jo.pUcڀ gwX;GcFr}@ߨt<߀d$ݨ{ )1_p%%)B^nꚝhZ<6-Ls7ϛ 0sbhfW+;Le:+mz"4y˿_0{oA-sko Z]]ރ.n/XeАP-0v ?Zoe9_} 6d6lejOoi>+][*=ͮಫ3n񺺋nWz8n,3>qcݩ654}FA7$[/Atl:P!/>?qhފ[,g&%;o^&&e3all6[puP7nL5զa#:hi-4uLttd!t1+(ԓ\Z@Is8ۇJ4͖mD=`%duߺ -"e0k-¥A lӐscds&]@U43Q);Ysu6Vd̡dǮIW4I똮tR!g'\kMQr"5]Vk g] Uc׿bsJebJb=^;t_>@L<$ߺt' ~ʒDfJ n]wMWp4*el)95_m8?;%gŢd:pЪN67[wy*pUȚi*ʴTwQBFsKLG FpMZs[qSҧk܅vt]h+T|m:*-~X6c ~FrQ1EL r5YљZ) X2cV.Ϻ' ^3$,p_R~|Q2yy.2\f(7SϵgedfL+u;@r+)_箨b7 MkޡQ"̍mF_Y'h "(N$W|A^V@2}"Y/?~Oۼv:7,TE 5Pt]_(/;ǡny-n mV~ڑrJtgSߗԯDB7;ΟMLAoYYYg -ow2w ,Z>LD6\a2[&))I$%*2ZtLqxz(QF_x[:l*V[@M,l2&9eD ;S&Bl^s\,dV%|w >z{Ą;4UjUeϟxvU 676#P]of e/ρ.&7BZK۷nq͏9q_dϟ۰jnop) JfKuUC܏fuJ<:@)M)2,W+郻`Hۨ[q/]U_˿bꄄuo#z!7^IKXeϱ0Uu5_K4޾R0tV?~G ѹLmMp/6Ѳz96?D]|z9?Qzo@>]=[%w=tƅ +duN-xNݢʆgHwSD)/yD,Ӊ2垁A 8qm%kN N; eK|\;d/ē;|+ ٺ0ElEL+~K*º]a %""yb2go63@ ?oXXkM.qt3>x!> $$TJ @㫻lj]ܣ0z22*5`w+z:Npe`m*y/J.VwSGrqN9)bϰa,7E7-:؋dq8cX }1*SH'{P [& /;eRDIkRSof͌vVff UY"::/cxLb PS)k gljw+CMr;RVO$!^wrNǮ@6EP6W$ 9B7#OuS)F_з1M,R6]1$S{0V !IS(YRV,laV(W wu0bFLLPMHzBr-[3ұdԺ6C*Q;2Jg!YBh"vSܭA;msh%9@6aq\ueDd4ts9qG[=U5M\6ggFH?ɄR`]"dkfO?2k2d|z: BrE6əHa΍qh  ړV*ϦM$*:7:teΔ\-M]ͼZbNjd\foAR[ucOQPͳW6VT{E|?(t0GpM~>]Wڔwyv5ji3HMM1KB[͂10mS'xT:ǐ##k'y򕫱x V0򣹴Yw_ABOC 1_{aKys#rj}-IGdY864EKAxa0?ZΖukHET'!bA[5IWp2DTtGQn=ϚGyACu¢@^7RtʹDjNFi(r٠54 @RSqeo+q27\ƕK܌̝׵k*g^ݟAv/>3jvӁ_Rm_ :a d$),SvwO&v<y11z#!!!dg\3P(8@pF4QY-t~y ]<7k?ȓD.JfU>zO]?P!o2z}I )TT~`=Atǀ\:cFfFC䊌ljT- #X m&ƔQo IUs7*X,~F}v&vD >nP?_VoɣGR1 /pU S27>kZiRr;`'bPvmh$7t)YE CzLUHCn;v`Wض3Ym3kZ*]3rwbeb2/QS3jtjZ /$K*kh|޾JZi&ZF[7j,$(&xfeE.G.]{VŲ}O\>w˱=Cj]\Η_W@7Vkbb*ZH bbAЮ`cq7#p_]AI"3VAu\L5.U!2RKJ:+y'&@8 >%{/HEN ~6ޕfL!/3 3TMDo&'#deٹxGi IDATJ­^R7(ܺɍk/repiRTeppuM~ErR"Bqd>޾d'%M׮/$ԹsaLN9̶_#۱6?6m`[i߭XSS&pQ07t,B~=yt RSB\ ##/fnߢ[ bz|X=Ye.k}~[='CV|Of"r1J鵼h;6S>/"|9k g*i>>΁%S'xG`?h"ii d>652r|,]ɳiݥ'^f8ޙ b1ޘ^~vEK[݁d/C "s8##C]t wn` RH12ӹsEK!^2o\dJܹy{w)U2.F tN+S ''Wt4+Tbm.V*sVFeٴju4PZwJ1|1}"ADT43)s!֌0opM͝; ,43{U gƔ9{[Vdۺ۷la%C5tc͒OLOkoFE^iZ'#}z{wÏp!dD䊤L%F H9vS3ǎPTi%1J)Ox\\>K2rkV+7_ ~ILDh}1u9XҮyoGt&k#ǘ<clH!FYN=;$3`5?FW^#--S'2 $%߸6иy 'ڵX]C͚s!4I nODTȹ PTi.Ğ&:O^b ҹ_<w< !"2W?t2[ ĽID%2 `TȃacQFnb#{(>8r)1@s`s HFWkDZ}wB@|`"tы߭hR-Q !t._2+kTUp:2+kbr(SN\X eB圠( {!iF0 %;- s^):0 \8eT8m;ʀQROJCXDvnc-Y2t@RN=`rqUǹv"xgɃiܲ5/T+"s+uiG.g ҵX2nsBx{q,h?}3{{G ?~ zFc٤7~Zi0 ~mjcKC*]]&9!Vgܸr{* "\rO6Amk xs+}̀լ)<]IiՋ烣#~0@[YwR2D[tнi=78s0_{6zѮv9RSS@5Hl"l.'MhSd<(W)xC+zIj>0V` ȲM,iN51`[+X݃nPo$0%n/Y++̡QV/]/C5(Z4)W:X6{*//jBxd$V¤s&q;Sm k/Tv `UT6oKoa5-֐lvjo7a0bÏ^߽eEJj<FRex$ڣ+.&1iPlҌ4;hkT0ܽfuzy0}m3]f38oѹY4e< ac|0n3FIJE0ܺ~Lс_.&j1-]VS FȖReUCBA<(yLCDKd܀(WAع!j뽤;s5hڦ|CJ]km6b%v7Lfi)zdxv1d$û͋}}o$3#dWY`R&h|ͼ,޹hr!ko"ub)֯/p מݘU D{B_ܟFLV]zm 9j4a}Q^F<F0/,ڝ*6c37.2o(Φ ~h"2Vq o1ypI>u@5;/XGccnlj23^Yk|G`1i|+v3c;>,Z\S쁐/% 'Z%q7[c&e}w_C:z+Zm1j2|/—O=<TikHbnF˲3gr;m3M[ yl}Ο@pu.ƚ-h搰0F7rfrugO GFR82_7n#4yA/?רf kx @~ԃU5r(߯~f Tͯ9 tآ{s>} 6o+3NԳ+i)$&$ǎ ;} ~7!!!e^=j.~U+WIxB dǶmlWj-ÍkLiy+ w9) jT??p.jeڸ8q0V mM\<b"/fj*7SSޡ+qqdffr2rn_yfO rá lJ폋/K8uv]jj =ˎuu?͛LKKcelW]=}DբN%p*'QQcլ"?}=ncmvYfܷG?q'>-4!"_ Td,&Ke%viq3sř6q^J^O;И A?K1gfOVZVF0OOr&/.sq&tym[:wN%:s [٘,I*U6q"w(I&Mx^=g]f UJiz3dWy~Ѧ4{%^P:on{q*ox)KǚR6oFg}v͛`2ڳ~8v j@Xтط~]g8{_$]Z3(] {":wn\ w+V0o_, GΝP.J{(q|3|nP ii4m8_Y̪TǘKuPXa2ә4k6"%'%Kr5.YҶs;ݞQk>rotc*St{Mf+Uv#?K" ]tQ>>cqI=\Y_m-ڏtOLI˶eKݺq-9\jj*(W0oM% YcV"^{%.ܾjԃG:nn'%8.&&sӺIc.%+o֬aΝTR`ym` @Bڭ~]u;v 5]:]DHe 5zO>[epf~fLnVhlq5~Ą;v46 m )`Y)?x0r>}ޫb,ݤ$5l׮\:pޟ2a:nXﲺ~4a<߬.W{NdqriNa=o+Q}L|QhBW ?eۯ9q2>h[cǧ۬IKMCBYJ5C+iޛ7lnݼ/.q-94ڴh-[8n##~K>+YWAj=~=.?Oh9}v.mqzm_6ه@P&wm;ty:r‡cPrSm:=OGlR EW_04nF?tBr~ʘQL3 wyf,1:4kZ֮B*JbeM,=[|;>Fk{UGiu3(k҅ .ԘB8rH)d7uŢkFѰje8My8{;Kpz"EA@}6.SjU9p.)6gևxy}(kpUPj5{[fL|vE /VqQo(Bjoh88 T,V̧bKJzz:u#2*m[x4h܈&!8{2^p߬ !`MhBCCn=?x6uP;ILi3U,WnfnL,Ï8ՎP>Ԉ6|rX0g7nd^Ϸz)eȕ#%%O<ӭefIswBO*R/O5H+ŝqIԨҕ+ٱmO{\#Iqq9찇6SƏ'-=:B\cܺuks>W{E1DUba▬^&IFzKӾ_|k՚)351ΝŖEILH`(S@lLfN|7ǽr3IMI_Rf-!&|s\#*ŊQ@#"8} #)@lˤ8>f,CG.`׬uQ~pZ<X*5P:}[+.ůqij Qs` P_Dj}&G1uHjD~6mqN{ⱖ-:7g:tE|㉌KOq:ѹs<{Sr߾}v%IXCBغ^62Ӿe M".P6YCvf~?ѹKO1~B(&,6[tN<ݾT\ w?s6~E33fG>vh:+q<۽Yv^jUݸHת r(.>q NYHݻ?r6jlNzcok{;#Q1rb_G\R WUnrQJ-竕gT7 +W8='˿+2d8"#=d{.춲iHΕo[?xrUK~p5}ܳsv̝1]Px*cE՚5yy3ZM%?svz;my;NO""" ֤iSZw҅_֯灺uyn]홖.\HLB<w│SO1۳,]| Ahu;)DjNs?|7'۴#== k6?T髹}ƾݻ8{ϴHZz1 S!oweώ?rD鲊/]| O;ʮ߷@i'%&v/"%wn9z`?5xJr2~G wǞ|J{8V7-+>j_}z鲅 q-cH ٺq4n;n|.ZEHa^ hӓ IDATen^\X|0Wff&Y6QQ99+ SR mvT9vt)w3 WElbJP9Y驄DDG5l(,{١mR=|mUwf 3ǴJOCxic2ne}/=G2~Xr>_=CL3l$"J q+,|;0B\X .Le$h_G!pYv_@Ǻ5kxg|СE j5oĞp>bߜ)vd$' ~[D(Ž_e!osdnwQF%TVmfFY j66mֻq ]vy1YHY9._Njr2IKNݻ$'rO޽dYYz<{FH0ބU/3$4K#, IexuvIOK㙦N=xuIߺ` B`5reuAB8vrrCK;IO$Y {F(W/IʵƖev{v עdrH; bFhntWfrΛC.[oޯCmP@B1ޒ؁Y#h\aΝ, ~߲jB^<שZ_X IVl,(OIR_BH&OvYVd6+ ՂeBfF*/jPQ/t"pXCnԿ%I![z*lW@]6%MK"۳$ M8}(%'o>*VAj5TՠFBC(İ pV{ߗf1,RHHPflb 1TmD:$ XAIkGhn^B(7uavoY ~VveI* b 9EY,V+,Jƍȓέ%kdkaHMJԾ.ObHv y_dn'dͳ6vƻۢi CS$E\Ҷt6 V2$v%hU BݙN;Ofdܤy7A$H& -#A%)R!ɼ}EL >Wx,[nz+ԴߛufdgN@}T ͦQA~!v5  i^%K ^eD@RZ5٬A88)go/GFr$$)A@r Y% OrHGvv?&;u>eoggyzX[J)_꾋PѢ?Y5G;> 1OW։dtMFKѣpO٢M[qvt>mb&p%3NuyAnbP 2c@"MXU D>JEmcK.Ăٳ!cF\w\9 kQR7%;,"ƅ# ߗX*BYyEaBFxJ>Em2gJ$͎98C֍Py zyYնv-ak B!jll2=d ƫyTj:ʼ[;|!!X0k`(wUj.KQÔT,6bb3jPfv5Jjz.]hM┞5GΜbcc|<p$&SԵBd=xd撝t\R5b5A+YbVJ(̦v`%HINƾT/}v#j+CxJ3Nn7gT+ϡwOq=EfYcq,E軚x>z).tDjy< 3 _ywx<j^96 t u+xB~i`<g V/Dd c* (? <.'@fHvRR%ޙ"Z}#8+,+kTVQ_W\y-[о+Wt|gh4FjBt,p.oيoB83r")j,]z"㚕(q)iqC1 L/9sO={$#g35.'GM`QBx Q4s| O<Hp;U?6 NDy H֔tuE+(S@j+o JIHU.K{@Uel+1*1ȋ8`m;HP|0}Lec016qeI4淮 꾇11HLLDX P?Z$,ìBr((%pH.^&x,iVm%Ŷ=/)PDcgG]1eYnAY,~[d+Q#hf㘩>0)kQ|=yX1.S(U|>DaW06TTqϒU1 &(P-R,E"p3]"|vFV"PJVhxA y-AkTY XL7zpF CWUSSSy‹K7z5|^/eL%"BiUHԟMe2ϛf-^Snk҉Jj1]H|ĩܷW#0@@!ӉC( t#n,]3]?ǏFӧ[w/-"%4b(Zw$G*smkq|ծ "5 S/1SUĒH cm1>ׄ/(了+7ص #"нݧp:QM=pvnޤG>2dHT*gj,4 _`\H&::ʬr} Wz\0'Hj:US1iޯ_2Z3*(W~m4G77 1.@ph>$'%֜y8#^5ysyߵD.չ7JMoh]M|,HkFL9+lŊ-[ c!20<ɟwP9qnIȡw>Y3=}Z-="khy6Uhٮ@'ȕY aL*$2iq6\EmyXn ~m+TnQ,\ʋcϠGیV$(3"1# >9G5]TŴ{wtpу[c)u4"vnC>M#4saY*aL-c["`.<⡽{nrPJq!᫒[aA4%aTn7ȋKor0DSZ)%1i$'NT/}d8wM+W`@}-HrWP& E$R]hZ: S/PSQ!q˘Y,R TĵDuqHt:q-dϙ ėTX\8u:oQ=r ^g +wq8Ea.2ȉI !:U?γ'OОuU)Gf7MXڻ㖺щ5A_3(T(2doYM]a ׸AI>?5h񍚵{eb(|14(9a^kJc U ޮ'OP /{e:Q}k')sSJ]uv|f>]*/H]ߪep8p8[YѬ ~?k&(RvkVB?XȧM tb~TI$-SB3dgO9B=?"JVoW^'m[QGzeyi!f@'qj)G9O5wg@/{(ԫ\ T¬%9yM?`Y -9cWBI9?{VGj"h``lc%X\!p7>Yv˸RSB2>i~"A&y)Љ )e SͼŬ"1g4iA-=L@h^p: B,Y1bG$qRΎ:z)ٲ2cd[Nel5"2 MH#äsy/ 0~r8QJ ~\n"Ya<b)`wRf؝>hOP #K4+),e{pqmy}k/..0ظlEs ;#)e Px*a,"Ց,)Ƭ ,6z<>,Wn;QqT8 w}.j;V2ΕRed6-, #sOQ1J]Q)єZ$j:u-#!ZTe%+S%j(G1P嬈 4&qKR-p**D$yE N|%*C!c.U ĖK'"UP:qUAH~JE)撡b#zĔb R zX0 $/BzePHX`=G>Sd][ $487nGft:!L$7Ub@nyW~#J']W)pr92[0{&zw2ՔQW4u$<w*KY1"M@YM5˝o\ȧ]j59f-b| U>XO`XK*}ES@q9Yf-6 `LDiKK$gԟxʖbB=AYǎ ~`*Z`TRhTx3|kHb,ȸH6g=~-aąѻ`P&, s_`!(VJX"p@W|9& ;Q(lʗH 5ʖs.@魙z@Μ FeM1?Ef`]~;GjkPa5Inp*uZ 0-)wUEߊO-Sd&3J y6:hS3ZX*V{1 'QJpoC.ƕp`W\rcS}h`n`bMRSfT-Fe.SgK1ujd͑ØS58T\cM L0|KII1M4aѾsY?2O?T]Wӵf婴SkpF^bH3v2Q I"IL /Zm "_l?yrSΨi5xbM 'rSJ]4Y%]Iȉ7T|a dl2/X*}4q@~2 J U$Ц[~[{Z|jΨ%ԴoE0WO|>fN$c+_01#MIE} SH?utጦRLzJm-T)WR{]}%%}dhR &sm$j[$R-0[|-AۚUxB2])#8t =7%]SHPx jˊQa Ted17rTLmk4@>5q~]szd5se+US@7e.)Ubѝ I (U7=^nM]F:ޝ[1z\s9G,vbZQ_Y@6C)&~\};Sw+~æ!(0JQ|ҲTDQ8mvŨo0r<#\?:)ess귭 +1 ChX6eԓg(0ϟ>Anp1}pXQ,E~^ Q9=b*nEK\p>W8,m*'ZVx(W,/O0r aY&2f"ߖYnl*ڽ /XwƂa (fZR?X3(nFT2oFb=n[57N>j'8#K-$r7]GqdWXH8ZAa2>}lN,W^&aapj!_  ѻXl]:XX|X|j@i{bȚ-;2fĶNِ˳N}w,EFRH`߷l¨yw$$ā柶;Hu92'i;o;4SRe~:iqEn] Ai H#"΅"Y@FK<inA))ݯrzaHy6!WX[DW kB ;FXE֫$ `D/YxN / Rq:^-J;TXZJ,a%bQg56ꄷ<# ɮr uUs (VMިǸ}Q 6;s3Xom{|3$Ƴ9Y wr"R?,EprO J. cX̀--X;UѨ*W/_ĒƉ8@'Q4H06Ra#0=,(#-';̳~eE49@=Қv.|]}Lv˖Ng0 (gF,T #ﲲ;ހ_J06s16@XfT FS R9 jsys Sϒ=|MMu8p9nGTn$H&6;K|O0`m=H./+ʩwO)khe\GOe~`nؗh2P @`n?n^\)nG2 "(g>CpzxlXl+ZKOŠǑ@Aִ $BNT:d €U_9+=QE}(e |5pND/)L[wk>F]M9ǜ;Iǝj!۶j Rq\_x:UK7b^8x33AvvOoԝ .,OPn>tB~aajZYV#={|Ԓ]&D_SzCWn^G߷Q'XsJ۵wK>.S#2%D `ód/`ɮ}!0pMw*պ5V! [Thi;4kO#Br\&/};AoW Un[ EpFA+pF҈{zmKI4IUrgg,8S=.r4hC_">uj3€I3аʂ/* >R¸qb\L3S-{M>qLfpЮ7ڋN0gkpFJNJ%f%qGWZpҋD>kS}snm8|12 U)ө:q}I *:Ln<-AU uS-XKm?AHHȹWX,_%qR8(θ(/ĔRעg͆6S͉W׈qh[IcĢ_U١ynb}'|;t$.;)vp%(ek?n2\NNl\_G(IC1LKQ|,)cJchPoy>=[RP-6- ۩Q5oV\<} Gs Do'*%VVA\i&*m+Xe"e|dp(PX܍Ccކ-"{48$tA'O_v8dAb*K2D]80(/Ѻ{o,?˄o7@#0^l>iB EoXX U38w.^@V  V'*Sd-:vAyY<B1R`G&;f KK`<tKT(UKga\K:lڒhѾ#&  eqrTS6,:rfąS'pa,>l~T{rщZӽ:Lam9;q}h(EоI}&Y[ƈ'&B9%maZ 4 @c/:3D~Vzn>ǰ.q=O >5vY6lEQlq1%JT}V#MwgF8,zA)^?T-Ӓg6d|f5i0N[o|؉8v"=y¥:_yϺBEAR%ڤt|yKMGʩr7TS'̧uK [\PͪUȽHsݢg;2L TaРE[4hֻ9غ|!v,_7Pbe\ *UEJU=cw덵rޮnr[ diX{QuFz\X10@\]WRe48;w˨s╻wb-8?Zծ92 hR(ώV@kcga\17~?kfb8~<7!3б#t]R#*!^<3~AbWw@EWx!n\ :n^J.ƥ \sgu2xnNܻuMk}(KYL (S' >`ǚHII(0W-bXWna~Q_UPOǤ=@?~\c'س~%P`̟NeC-yWp,~=qEP L ?z ǯ;U|8vpرqrݒ_ $%%YJXd\>w1`ЏS0wV 8'Ƣȱ~#G\ KR_e2PvAl[m|tܳq#qס%<|e.£X^&sdӪ[T. 3toRm 1i 'N܇5sEؽ{ރ;~Csz;z}{pvφxM.d۵f7`ش/oT RS]8MsɈu@Rr?zȕKNR̒ė}Ї_3ٰ}j 4 g(GjH òp$'"%%I^#Px / D߹F]/@\:u/=~`/9Ο[7JHUs~y3 Ú_x(kruYݸgRڹSشPزl(No[vP ~ʔg,Drӆv92gρ~Wo͋gѮ`|>lv,_m:n6xz: ,{ nh8ƒ{ۉS;0x_?ž࠭|? H )|9K\N o/ - {@XXF(}ϖ o*6ݿByPt9P +R JPly/˱KW"%j6 xW@杻#{<"SlvPPPD-YJ Y0z*@|0|R@1Ugx5f2(/Y!\>CQqSQI3!8e.UJ~Spr\1K-_!9ː!9mID^֍ÿkl.}pF@L$ˡ?Rڸ{m=mx}ܶ?uӠ>Ǎmǽx׮8v_<pMuT ꎑȘSE) Ї3C(^8a돣 !o*qQCEA[`դ*ӂ38{n gzw+CRb"W(ʱm߯nLwohUMPPЫ3>cq9kqI߶ worA~2Fd̴r׃3r$&9 k-]x) ZANqoUM4hߴǏQP>h-+ҩиmG|x8/>A6\nu+{RiPTY)ۍ~@_'B%KsX4e<b_Oؼt!=kb݂Y3\9{ |͑`ךeúu᛹XNʈܳ?w_C˄9-OK N܈qXqSo 0x\.P)R2}>{ŋ'SECe@LF٪5p~3u>nJR`az&fȀI+QiNJaZP%=ofN>GxqSwo\î+9?nJ k wjˬ' Ϛ׭B!?p.Ex~JwӐ)~WlmPvhC$ŋUa} Yszu0 ֮`رj) ?=3| 螝PzM{Fm#MP54;Q/p .Kw[F\(6W':7bˈKN>;iȱnKW:6Gp$'&en$>r#Gu#?yy6[Fq wߌ|W!e|@)CpX$"wDԕ(\}6q( ؅6a~ =Tg~DmѨ`8vK̤Uﺂ0:>A kxي(VN'M S,x#8c |%+TƴTcNnـqn?C:@Aq|3479}(u<@\y@)0v8S9N `Is8D߉B2e}ܪ7<]ƅW/)yǷcc%ciVF򘤺SRy!~x&h3pe9Av(~4G#P787N13|:(&zJ*^?p*W1Ox;.Gطm#j]A>{*ɧ`}8?,V!شM>P`صfj62gEmQoMY˧l#w>aO}3m~+\T}W1)bt0\#jc{hB!SӝTG{cksbڝ^:U y,9u'λA킯4\B%J[v'm7a3IZ\<s{5[uKOL3?N5?QB*w8,1MoۆT_ gLI F%t1%) aa ]=?$p8p3ftlӵk'O?^-#XxpF_۶D^D^H#/Z,j?!Kph> (+ӘpZo23G"Tn"t(m7moՔE.K3)5aAۦRs=v<_j?OgY=uu3󱐝1]s+,gVcbp>{>z4c& b11,:~z9#NQ6SݓDRнoZ֘qzv~?aw=Te-[qskZ#KKzII߁|,69ѪE3׍7M_o{E[]C?s ?yj^i}zuj#44TwdzgϰvFT_??a֩X?o#Gp3q/}歹+B cuؠ ,]_;SVPZ}% P۰h o_/Yϟ#{\3n$孖}|&:O#9#6l:; NՊ?VgN1+ÆZO+|__-@vQ(E,YT6!!N@Z݊pM_[pTs^:m"٧aq~1.ן^߼y3;[6nDᅴ|_Q= C :tGF||fovlC8wQ,1]<7g$EhRjuDEE)DEMcФn]T+[mKXl\dHhдW.;5PB91 _"MCmڤ'j|ޜ>v 6(+JU*CzUCs:c.}.!99Yei|wӉ˖Zٲi¨_|c}7c(+x-^a ?=' rɋ!=c 2lP]hҼ%6XvM,a8y…SPHQ6pϞ5Cu+&͚r4Kd%kVGBƍӄ dPU˔ovXj_ ŏFl\_\n%zh+/bL5k` fQO.!_}ܐq2Pʢd >~,* n70yPmWXHEȗx(P8.aʏ?r)˗x Z%"#+Wtk5] :.b>|0n ƳgO#Ŷc_n8'w~p2gHhܘɓ`)wx#4}; +X N11Q (\8>..?Ӊa"v@UN'-_THvM!cF|ٮ-nR9 !.N 咉SB|<n-;| /$˗/r8թ-1ѰQ1WkWOмVUdʒŐRF>6r}NeIݺ8t⹹aӮ]wƏ'N?xyj^\<~#wb]/vɛ׭CӺuдn O.Q _%c)^\t<30__[s9v}bS,k/^b?y&~?Vo%QT]GMS8y/ټ*pMmwq ,ݾ_}:}ѕx~ ?X8FD`B$%%p cx&E-nr_J)#cc+OXKWR^;`M̛+ޮpqj0!4"򇉏(Wr4Au|?X=ש[wM7G9Q=WNT{}͛eK.*ocnyn3F Xp>IbHp:8k /0:G Ǣ9p;! dë鋗ᗩSo(x ,3K!d fCk{BEjڪϝ!c&#mݎK-9kNRظk3g)V ޽{"Ni'}%\<+GmbĄA)px>\xQ&' qq!˗/5hK0%HJJoWϞ<ƕ 6t⿈e;v.W. =q}frRf_Ǒ?KhVq5ÙS'Qll;2eΌWcז-֯v(fU(+ك ԯS$h&z#D[~ 8w$.=ZeJ:ghپ#TR|*X4k>u{z8rp?vn\5j0SR6 cը\r` E& R +cxy aX>T?yǰ Ql9  i;}NO]>>sx$wj*FNSgbۚVƯc d͊IӧÇ!E[?u*Zn;#99SƍG޽e}q=J.,ٲQLQiB)oނ-⹳W Prm3HNNƀ_uN9+b(Q,2d GBBRWr'.(!#^XwL6JFlCZ /Y:PJVL= }Bhh9i]Tyy=h@uuqתܵ?T&/:t;wp'* wD*UoKgdϑk9sf2T\ʖ_{#'_>;u w_^(_Fy0dϑUUDZøYo/LJݗI8z:ןr"a(f šD2XuVԩŊÑY'b1Xsg`!K|VzO裏QD)U~QLYCr}Y,\a2Vz<("v72DQsOG=.xeJ=D_#V\KW,5x0~4)]uq&iDj޺x ~]ub.{`r)E2g˲hӱ3&Ξ\ +ts7W߾ IkΘ6,4 ӂ3:R >58l:g y^Y)޶Ե>+6JJTue%8m5H˱~jSrs4U>ڵSSS.DŽ$Q딄x!׉OYPwڤ\SLu)w5B ;5;/&\I($m$9͡!W$\L!u{TT9] ɶj#xR#NY8uһ&ǽ 1Zsٵ:KrAJSҔkbIGr Xk-r𺔻8K<4,'6 ,xr; 9 0n @w'7 w*R! y)@~RJYPɻP`)˽o 3Ee@"i>q06|VgF)B rBISIYA1j1"\g> c"R*$z 5qeagRِ!Ark_VyO(rJp KP^&SSy0؃B%,B4 Y bP͝[H)Ǒ&8DwqzXh8~aq& }'/a'=ǵkPlY >E0\|(-"0,68's'tdbSWJEv o…``v0R$ oAI]0 BBCEVO%>X asRe4L !3*s ({NUݰ!Θޝːjj[#Klbɱ5AJsZ30e[`|22N=NN1xф?WƃT&,)/>v 5W{egDpWfYG͔/A Lo_{nP'"i3ax)ݑCQr%\y 3r[UZ -w^C0 2 r1ⱉAIm}Y֣@SgD0};4ʵ=0P./ZJ 2#CmK=qֳghZ:J->Ca'TtXkތ\ 5eMu@ZpR|KHS]&%gUDȩBdH+P?'-cvrȼdPv͛ࡨ\2Q}cB-f"{ QW%*׶rZkEA?DesOwy5l\y ʭ5K-!XkJ:i%*eY|XIHwzqm{}ƕl6Xd$б~}M51w\ړL53[V|^m۵A\4u p`mÔwטa&SʹU M\KUK.SۄJ{~rM)g kRgNL Z<0(tEg>DZ~wI/]8^m`OTbY=b@-=WJRrJ\?rr!e(XAX3J]  3YO.hw䚵$ETOFRU؈\O>[bQUkqP+!Z@2{V 9@(g!5#ǾR/LBm;k1f3݊sH +x+y#ŜIJZxs|#U NzB~s'iḲxOC>k-Z2`7_RKrͲU$uz3Λ>_ٲlV5"Q+Մ\$q_^5ctHW2 Jo+*jϲ0BB;s~]Q; &Y?CbZ( E@F1EYmj'mmRV?2,SǏnp=wPTHuC)V.Fr`SlV{g$<`^E@}<3(ׇp]kLd\FaZEJGx)֪>2xkXk s\[R7=%3zti<|Jn8l;v2A%nFf _עP`gӰ7"ݢ 5v,h[徔pjwRq`ADݺAVBd|XBg{S>8˲xF8Hd=Oase=`A<'+ߋz>d <<'2mu7'bi"N0AoaˆhҬvlތ/ px#gO T2)iDNH /ԗ~Oyk +al ec 6BǞ_`%Ș9mJ(X bHIe1$$:!n%,UBR@.$D\D֪$RxwΙ+WR#L 8OܲS3|J/[e]d2(7XtΘ49hPULPnr U|nΟN\)ZTSjosnc},Y%`Sr0`F8}/Frg͑négVذ/EKLCjNcrf,PD2T#ZE)_eW_kpel6P ܍~[7Hΐ ["Z8|쁁2-vfCNKR1 ٙ C-UURz0j@v舾={`Ư\{ 0Z#o-U VVXt K2JЄ\SC;fhs.reƂi?ěj}^e [|Q/}SCvh}!mj">۶KFE?{8(ݾzKUBUBM'QΨt_=1XeJOlL33|(XxZZOF[ׯŴEd\#'mYW 557)z-njq PS-.0(wQ]F [ EDPP@t ;{oCHyݛ{wyy>lޙwf9\Z4uM (e#HDHLt+\||d4ǃ{w>?TVv4T":hNfk&K6rtؒ$7>h1Q/ 6@).CRg:)5:v>Z?"鸺b%s*7 a\(ȡo|zp ,^eFUl'G;/^|%kL&\=GҴ][6fo* D%|,bz5k/h}GvfY}3ؘ| I=zx0{V?zH/s}=F-Zvб<2FxEH5 pX!N1{J\\((c ˃4 X{(>m@=^} W kz[ ͐tEpiE(Մs?{ω{~ǫ IDATa6` YW|98O+i)"V.IY{||m)Vwgg]POCdsӊ̞tx%)'ܕ"9N>UZ.T(X J.Kp,N3Z⌉IvÓc=/oaɆ-N{n+&c-('/qtuB |3ZQt}(ZqO;|-i44; 6og0Ά&)Y[ZaUkS-vYƃӔ" `ܽm+qqqrQzhE*u˗ˏ} g\~isg|G; 5lT?23'9Οܼ hr +BPfId ́@IvӘ:m{w3wn|r2Zɖl:ĤDân~#oX~-ø(RbU't>Ůj&U3fmkyNCYDJX2wF1\{njTʶ l n%sM=M\ԝHXj_WqRn=YjPF'fe_Oo6iFfbWjs&y2 .0hKVۛR)Q4T֓/HNJ&*Wϟ!*>Qyt6="}DMbb)%MPhjW(=<ɜ%4):bV~ gÐaxpU~5g;r ? I1DJC9@V%!bQ)$Oo+ȖK_qٸgsrk+WfȘ@ߟˇ{?ڷyܣ+7^e#dȜ6Tv!Kr? RH3lX?&G57Jua.) ]+R!Dcz̦Л,`۞t2{2~ޔ/X[sU s,ɛSPAԫGΝڹ C,GBlկe4ZCla=_k7֖ Pt]e)QaEsHk8uv , Nʃ7YXj,%x":M\vϸbZ%0nƾ QB%=͉+)l ALJVCUuOC`P-\ \j{WeLDǑ|-J/dZ|HOLUuٞ;#ph7==J%6!2{҅%!p ѦNْ|աK̢eΔ*WCwF7TgVo6fC>`|tB]Uuφb΄𵗗[֭EQV,GpM qCeb E>_ [|(8,M5 gPZuUlꮪRJ1LPb %'Qo!+Wɷ<eT:'n?ϟ>eT3˯-C$*ee-ui1!<8ȕ3"=g\L9d^oCM=0C % Qt%RV%@$'NL#&Ə%4wnSoRQfLG-6)1uA.Z.liu uamZ, @~J(S3f1:Dj_FƂ"uIQcLa[G[&Jb09Pa,M@{[x8=-y긱|ۯ? z)grILa|$wd/!tIeR D2IױI`7D >4KZ}' k+cga.IIN<_;)Pḵmh 6wkUyPHZ'H&ņSUbVkr!Gjd1%%3/lG]Rl=}J>pl߰3Q1rvTwr׎쎉pH\֘RqڤK| .Fnظccc3ZzfD=yva/0nfIZ'lWd4n%p28W;!l  N?Tg~2S9hy)޿G+}dHaL7 ĿzSb=c Gn;keƕصy#Kf `rC~S`Pׯq Sܿ>{7ؘ@f;Yu= AoPG?@NзWؾ=;ݰ9V_qˊ%,9!`l^7wmG b_;v,9.poD޹ w<`~'1>,ΛOLd^έ Y4O$?}Jąs 7Ow:8 D?CX^iVB\~<<=zx ?޹dwm2߱:Pm0Ns}F#qHJJ{q1F/bs;*BIT7._8yhzQ_'4E"._O#~[Wkw&B%yp~gL(?G$3>n[aNwkD=bw!ҩcڷ;B8{Aض|3GV̜ʼc~f =N'@~˱@Ȯmx#vg&~3zQȻwW"6&փK!$Ӵfe}pm~\zIÇ"x4?KÎ;8wʥӧ@훹q طu%ؾ#ûe,uڧ Š?_ү$E '''HNJ&>PDã퍏 ?0! 8sVEYs!0CFp1_P2?xӦxxz[a}}W%3Sp\ܓ,1Ϣ Θ~&$&b!wy(Rŕ`-~9{n^J`P!YqzC2qU*ըɣȘ93Z>yLh4$&$m6>qo#ˉ⮜'sMۄ3jkx?7ٽv"Kw>wX|Ҙ\e+܅3'4{]%4^^NwjP[niΨ`ZMݭL qXWgJn92gNn\}L"ݑ<:>/^{ '1}NɌ#?e":)?÷D޽Mܫ[WR  !2x2G!<{;rYfB)):yh=3u dGkU(P3' ڏcK‹ ۍo>=z(lhnܹ;hW+lX:XmN7wnO1t6/Z;ŠNX:}2_}ۋӸM' c~[;~ /'>.!<}He绑;N3cCw4KvlNlnLi|8ȝ؟_=mm}rgE9{^2.=͑]Y`67^fHܹ~A'{`о<;Au=Gaو}éCԶ)BҰtԕ}a_S%_??I*{o|Լ^JNx䱍N5G.:]JWfگgё1j((^kʼnÜaI6SڦKzYPpEJ;teӒ`RC*[d"o"{n=gʪO5;%*VY,c,UIsXq ;Ӡt*R 4\\beLy3Y3w&ʅsȐisud;Zؿe1xxy%4'E IDAT||? JWFɊU9}pcz}C]-Oqrj_{&ZwC*[:eVbF!i#},Y)S:K Az~B~th .WncŌ)t>2NdAtWŕHmTClnӺ,22~ZumC`߲l$VרLM)LڗG Uk3o]9GȆ;1zTL-Whh>O߬ 3pD'Ə@jf޾S -Rɿ"i4 n#t=0MZ .iLik 8muHrYsB[#P*=G٠1mkU$OX@Pj 4E"d̜fᅙ4/ g,X454floh[S0\k2bUc o?t6)qqnSb?Eb鲅<<;ImG98VT(>YCsQ*y3/&{<dʝ_7 ͝On*V;݈ g|y}/ hS:OXSNNJv._lmLtXty!svHZe,,ɴPXY}|sRuA:Uq% a>`MMlr?${(̠=n%@}0x \n#&1wƴm뫈Re2x7_˜>rH׀ [Pŕ;iOv"tTŝJ([G޽pc> (k|1POb(| bNBT-\LZԃDY6o^reE@>~~obS5vysrw{ 뻣A9D^. vthg[߲A狇!1}VW68sgFVWV 6xC|}vN1wCwyE^*oNBT|/hqLk8O]mGi<}Bۊl^;uIfN1pq&LcT*7ieQ Z:IJיE)ݾtad˖M|OF$${KS))㇃1q$|鰎kwqSZG#(;۵{KJH={DZBU)}((0pu TR7wTRIUҨCJ*n*J*J*JoT]%TRI%TRI% HEeTRI%TRI%TRIURI%TRI%TRI%UpWI%TRI%TRI'J*}ڷosm…)_:͛7(^8KN~lB${.dK*ڵK.sRRR%gΜ)R2eP`2~/^xٳ5jGJJ ˖-S| T—/_ɓT\|9lŎ;(T[ \¨Qػw/'>>yѲeK5kƲe˨][Fڱcuի*THhTRI%UpWI%,=y}+|}}YnݿGŀ $..dΝKV~*T@TTAAAnݚ\rċ/z*f$&&y$%%Ѽys֭K-RAAAT\۷oݻR>S6l@`` L2.?СC6l3gZӳgO>3e L)W\ܻwA1|ر#3g$<}Jiݺ5S=>>3gzj_@9]6ݻwW4矬_7ohȕ+u֥[n۶iӆ(2dgϬSbE*Vh .0l0&OL̙m޷qFΝ7sq\gҤIٳHZ-aaa4i֭҄[eR*TH2(PnݺŞ={Wtԉӧ0b Yh۶˼ЩS'bbb8t]v˗o߾=zRdIjժɓ'~>} ʕ+z=ZAfűtR6mĹsx9>>>͛5k_۴ЩS'zMѢE?ٺu+n"..ÇӦMϽ~&O, ׯ_RJ1p@3fԩSe޶EǏgܸq >0ԩSL>#GeʔuVceMٳg'OyBCCm}!3gdϞ=\z &w܄ӦMrȡ$* J*ɓ"K,׮]{oLL|oϞ=ףGYXk7$IΝ[l۶ztt |||Ddd5j{3g$Iͳ.(ZtOjg,QQQ"44T\rƍf=z$իgG\\=ǎ^^^ԯ__;VlݺΝ;oݺe &@Z]psnZxSN| @(QB$$$]7h@lڴ:}ѣGyxx@k.]}˖- }]4mTvV׶o.?իW̙SbРAc׮]o^ec?Ю^F 1m4,[4o< gϞMܹsEtt ʦ<.Jw!ڵDܹE||ٵիWuacF\\:t`l?k,c7eYx7}VZ @}Y)*TWTi׮ɼZʏyyyA 1c,Z/KRhQΝ;Vۏ ˠ bڵ<|J*QT)*T={\ZFp922իW۽700Yf?7SL!$$Ç'O"""`lFÙ3g(QrΟ?/~ñ.)) oooΝܹsyg͚5 :ǏsgΊ+ZzxʨJoƌ##T-[kvԩ#ѰaCG @TPiވ׫WaFTo߾vĉ, ,X ?ydٽȑ#6>\ȑ.>bp>=zd["ъ:""BvYٵw6GFFY*BZnjs<-Ν;bbbD2ed-[nR[lfzE܋)"ѥKt:QdIŋ"+VH3OS @dȐA9RS\~nSĽI&v>|lY|5Z)RI=_O%WIUR-SRRr-2wS_-]Ԧ)W._˓'xwEŅ$IPBbҤIvw!y)PxwedɒbvwOՊٳ hkbٲev{9 2e$)"CիWOO]er-4(UZ'OXm۶V~ܶڵku{DD(PMti9{: jժXbW?V=))I4ls;r+[`|K}…" @pQre,+}Ο?/j֬)!CQBbŊ>իӧfÃJ4gMFtt4W\e˖̙3F-J"*J*J*_@ڭJ*J*JஒJ*J*J*J*J*J*J*J*J*o!5J*J*?(?ŋIP3TN Izy $IN1CT(Oҥi%5J*v~~(S졡H pp]o#D~G3WA(6&!Z Y2Ӯu4pLNNffHƍUL ψ4YZV}uyOi؇+mDϑ;lbEj֟|A=jT6pi +Feɖ=o / SBZ(!>siI-4yS:t0lMNeȠ2z[:lXloڥ9IB2gV5]V8Mxo۠%e>ZҥJ޽{L>.zA: !9ruCػy<%7k._~ߪ*ES~c`pFSRR_޷kXܿO`d:v]j_ kϐqa-Ke… !ccֱ#T!Wp0Yزa[:mKrG"#X`ܑwR4SOCs XdFt| .oSW^MXٲ˟2ap&ϘW̡g..g)^$:v) {}{yMY{d̔ɦeÇx<))V v=̉~u~M|;zߴ7|%3gϡgw|kwq[eߡ9s2m,N?Ί%K8l׮\jٲl׎6=4/OON8A0YC\,X={CX\Yt4~={:gOMkA% ¹sd a)^\1Zh]1v F Kl̓+/3i 4K]۽2k2ẻ2?uoז{rj$1̛|׋xܹyoӥ9u̘>)V,Y~S2obKFsIJ+O@P l;~| m53,[ F l?y<;(\wհa6bOdיK6SYS`[?<esf1z`?[=tӟ}}#G=pٶ<1$ \)^/Yt\FOiÆf7ջݵAA4 Y1شnmm2? 66-[{vIwޱᦤPJe^|h^/0߹} @~Vn|cٺ?/wO/zOv8Eh脎Fuk1fm@%W.]ȕO^20w a?}F5hPB-_Ɗ(^Ѱ^&[h}7mJጞ2[ෑs4`ycӞ=A5l@&OH֭Mb_`܈:~%QV-5=wnJ릟ӡs3edL=/ZbۜDaΗ4dܔioFڵzhy4Ea`,7L3ӵwʆWӌ]hӾ:y2˕Q^(V? @r0u<,Zܼj0y.?OyiѸtp~sJU*Z -A&t7Yfc ʄ#;y*EMo}%,u~ݺ^=#{췂3eb%2cxyzY?|1Chf"5CdB@P OOOV,_B:u=T.R P נW- B]8>*'(8Tr4nLhw$6q JsnF ٍ ϚY3k48U}z- ;Uٹ{7Mߞ%&11CggVWmڐ+8uc_vJ&O hh2Fգw׮4mЀw-l|ոMO?oJRRYSlXo>/).u-"SHS~}ꄗfڼ(]F@|T2֬Ӧ_mv$*_fP,k&~֕ s8o/vH^Hl\ih={ӼuknDEɊR*jv2~- *ĭ7 @y}]x^ri d끃ʝGM ;7o'_~Yh7~'~||}}h^ɵ˗_:~MhR_kϏ=QGVk"H1ۇs-EKc)ϝ[Uܿ{MkVq_˳Ov#*WUδԙ{iJN= xͼ(N%jz9ur[4vsҹV}MYo_T%(P(A^ xI }f>k; .*T˹w.9&:N'Ch®XJݲ f[$I}D߾iXQ69e ӿGw6YͰaد)/7z}Ǧ5rγO9y(e :Kw6~X!=C53?,ݺCnM/$Gp,d~?tJW2eʢM9~*? z[ n6l'nFvW/%$ěCR~;w,]!KI1"bT5`dm%;nɆ S!^1^hm8# pN/yﮕXX}=d󚕌ЏrVɬTSJЏEHTSϪ͙DZVm2e=ӛzv9shܴ U*'Nyۣ[fkᄩSN ߔ(U׮ѣD\º]잱5 ۗ^ӺCGeU\׮\fӚ5|?p"=}8O?V>Jd߳:4>cL#O|9qè'gsEh[K5h R2MjA2%BdZm,U|G"s'Ν:Ŋe7'5{v<<<[7o0gwN>D W.GRF >9 ?oFUݱgO|*_ OOO*UfX;r)<C4Lbd}.{\dΖRju2dʄ2gkha]~ݝGS\<<=y!$$KV )S^wfϸpdqOpjW thZޝ>/Zɇr#")U,[9@emXTVO1q(fEL $$$O lEzl6ozkwaՒż[8QXZs?>];SReҧ ̐dx~Sjy+o^Ν:E~ܫW+P%n@Ê,yԫv! p~}RN׍t:Š`I '5w6V6ܷOfF$ 0L2}Njrԉr;}qBpO>S 7Zy:>k6v 7]c펝d +-'XNݺ?c|"+/bǑcf,,[¢ |r5_62дekrɡIJL4j6i`~pjQ*s e2rT9KV2f a?B` ٵkVɂ֭I:STi2f !110Ɋj{:'A\H BBŃ eф`ee}ۮGս={Yjv߾V缧Nz_pN9~ h9 ^x4͘tph0LRHۊK0ox{t0c\/qڏpc΂4W_%݈. ;qf;_ gs;;ׇ#=-]mn@G{;Y5 LGF݁B蚮W3gΈwMn/.ZC# ZmÚFiy>zu}6\{m㲇Ʋ'@Xu]`NEK`xp[6(K()+'-3n&?Yt EepOg; Oя&x=RBʿe-T׹f+y˲e8;mٴ {-Z[gs4IἯR<#<8~ǟKzr:Ō<+u{@nbzM!pT-dƳ461H]m".mvɳɮ G&F6g\nY wN۾oWL7Y?-pMG}+Mv^^PO;8A:2N\TubA D/`wvB4l6 \* lv;¡lv;BNQ ##p 0:DAx1%CAizQPV.fUTbEUՁlڒ:mV[ZWcGGj0ՉJ uwW^^xK0_/EE +D`tQn~.@,v;PMQ dhaj۱o: oT2@7?xBSqQIJeĹ`q4ي2eW Xkw@tФpBow%#$EP%'Y+tQKǗ$xKt)_5osfȎcsB݅m[Ѷ}ڶoCgk F0:MݗCD$(iLErs\qD޲e Z fij<@|8c4(,)A}CMCpt].*d6TU(T$A4MU) t2FHOf8fy7,cO,m}!?`O'$OD3OHD{OlUiS[]٧}8| Vnk;N9 k;qa'4 S>"yA|-&E6tBhMz1~9_~G>  |X0=`4ug@ H cp# 6@ʥCHd\\g>1%]k#AhٔT%e@Ov^N  ͉sw9/ w~o_ߗXqGb=‘'N9}R0 }(S i`* NobP[5kv7Xz5>4o݊/'#;>tcw >̭*}=}/ab(aps#2HɳLo Vm,ݤA'AlWnWn!$[P؈S©KϚOۦشy {h6 'ǟr*KKsA⋠o `sdTж]5G` ǑD7hn!WV@= 󖙛e@ۋiYfSVS4}g d>E *؁_|o<,֮ZpON܁+o#},փ l)m?@EH[A/En">cm8 v`p`CP("Ϛ `]ӂX^ rz;/>4xeE}fs':܁,FȤ/ 1BoZ,K_ ӧ@w4\ψdm9 3v7q%2gCo x{ūx h IDAT?B}SN:Lwi(a %GU&:l|{l*<rӚm.FQD3 IG ۳|SU`BU="f\YTgbH\yB_bߒ£WKp%3)goQYP wi<#;x6kZ!Hjjk{rⲫ;I ʶC6^}\}k+t',hI)41%iBD.qׄV.@=7>S '/-o4k!/(Xo7!I5a/*OfqqṷFˈZK>y͛6&̎{ޑٸxw Z &?΄2aX69q3_ (oM`tQ}X!q53JnXOyF_lR{}M(o 3YW_7!CzJ=ig'db6ڴ蜫c*CEk[Џrg'y=zvI"ثkIQ^wCx0u󣏀8g_ <18Opq7FO[6n> bqC#4=9X30Ε ' )rl;pXS_*d=#o8pF ?;Dt?s5y|^Bq@CH-؊ &[fjE S. <'C8xO!wЙdMí7׋Ʀiֹ@Լ۷ e[y|$u)͖ lqj.;K7u=(jQ{Qom83Db5S M #"{No⢳e͞z֯FN JT|KZ]kBY e;-@oQUP-ۉY50ƙe%3_t:P*hQ8 ө(`4zN%և]ZKQ^T{`՟iclBsa =g JX[lUEsN xh+zLHڕ3Ue 06f8vޜj&TJ1F6bRI"Ak?QP8I=͑vVFo/.rq7<2́(po7|c;.*R !8ʤ{tB !;PB!H6;pUQahFHs|4Y㋨2N'İ22s/{_Q'} I𦤸cGe*Dن1 i$ũ !٣- q&GmJ|C`~1x{bXhJl$VwQd.osЁ s 3He n:[YuUP[%UtTS'hiN:sG-URu4̆:W <;1*ڛT.>mgʨv@qUM`(BN +$3"= pbyc=pAXA.*As[S=qcvPG`N/ K\ys. kAtɃ3kʇ74Y'(k!@AM=]뫪aN[^IpKb8Jh(㐋 RfĒϲ r$wK ^Q[Jq։sfglYb0gs;zq/W~+no~m%lP3 T˂)Y>t7R*Iڸn֮Y{{)E%8';l bb4eRA>gy}N?| 1wRiqG0,&]KhɄsKh,#g*=C{6K3'_zv;Il$y?z Q.*lQDNW Qx Y[HYHGD&.2)q))Tm ^ \D)BR< `}@\xopU⹧Ĭ"eN;<@`STfQZIEH2ˠq`Y~$dbjxZ㗮dR8ox[&=ǫ4 {<~8?vc  n ~4O|9;? >  uQjW4Lf"[ 8Qd(og> íY_+8+i7%p#Q~F Ct޹(G%0_] #n!~&(8wc\qaWb+^ڇyZgɋb֔8Ig:/=fq7.0,fqolA& c!p\v(W8<-7%%8qgFjtCGZj>^ɖ$e$s &/q'qD}U\h><~quqɆJ6)Y d`kcwl-h>ͺ^/5Q ð"LE:)p p1G=:Ke)? )g~RpB135,%2ދi=9p'ʨ}N8 t=BA%7΢ztJV2ǜr94g0ȃDqxAn'J`N8`Ʌ#K!;<#.%23OA  ]i)so7H4 XN9cO, ሁ-7睅>G-mQ}.YP=S#?@<}DH+3/KKutt",4Lf \/&F2~a0`8l@? ^svoݒ0KP&"f һqEr?1XI&!}T2qFklvb;Ӣey@H nϿ7xxW244MNuxY DFcC՛R &#C޼f>bx%l݆ #_[O? jQX1rO;ݒB`=spocNCK7i'-F 3 4GQ2SwZl&.O#T?7Z%GI ӢA`ztb=1Z231+Lep%qoqgy \p DlYx6p\3sKᐛ;\?6gx*a펗y/7t݀֍ej>CÈ^޽M\*q}0#`|Nk Jofl/5ɹLIV4r<׷ M9 9-pY"`)Ȧ;P)t>nkNѵkd0eևE(¹ζV٘,컯_uY =}).xwYn+0**A2A2Yܞ-1RUU(.7x]QgSatnÈ5Kyz-xo+`Sq>|;2ϰ>L68Ya2l(LӦLp8oYWrw11{<̘5'bg^} LvtTa N械{%oތ;v#,I%K[E&E[\ 35iV@נ;-\͐Iźߠ7_s5Ld2gQkn)o3rO(۾CU& H k- Vҋ?(n}褂$0L-s|'+ :UM\|&OW$l4M`R&rD SW5B:U$NE!J qe_^Y*z(=|; \|G!܆N9G3}cHTle<7to '\d<,Q3AF>5Ke4n*N*iU#Sb#UPa; ՔrT>gLPn…:-!4}lB @ N*b#Ohk  #ux|-ky]/bY6/Ksg3XȽ`y>kS<`ƕvl߂loFq4 nCQ/m@[3 j0NLJ;૪PG|邧]pS`.)؎^8J~pgQ5Z\͎[V2S7kvjZnYLKz T }cΒ5٩}+H9&* p-|bsQ,[,`+ᅌT3k&[n'DRw`,6l,=`g~:{ @M\Ĭ>GQfcX&.|ŝ=S`b=ϼ/>{4?=C>vW9&X>,4Eփ2q3J&3r@??8K.w72p&K)ﭖn/jQH:B.:+bCl:B.b&EރKJ8GUae6R8= ׃8.x{jc^;ޛg/Y?Jkw4 o]O-WZz\4qTQt0 tTP `VJr]6[;,8lD/2 4s |iBF8wu Ќ l;x\9B&n xeSk>L.lx!,EFYȡ#EyuǤrxபt-%^qb,YaEo'/> fǙK/ 暄IDQi"f,}ğ/bsJȹDl xvgGKe,^S& Hr:[Y(5i;,{_|9?<{/h8B0Ѭ*rxd 9c$hPš QGgtN﹗\+q|0K&C7=SJF-# pUס8߸ㄟ u!$Eg{ԜѶa\h*;$SVn>dR;(7[Lf&O"(rSIØ}m_>wM℃b|.6 =˓n_bik}֤eFpQb߃~uӦ,X\:(ll\4Ū\T|a* gi- 睏=LN{K oO\{2t(*-oV i瞇mup(we#ʖ-7-c"Y if#Vaːw4oڈN=g]r9J+ Vޠ(ZƈlTe)5OkJIO=&enIY ew}%eUQO*[O&.S@~:Z^{o/@aI ~ñG:7je/.׀ r L:|>1٧Ҿ #k͚7ӦcGN S%W]?`:xT&L&f͞ b,p$˟gĮ^x#'dN="x|9sL嚶mPr92iM!)s`gp7n G[v,m .:4<"k|橹;e& 7V^Q8 ~$?~8'e\Pęɴg$ S|j?Yen뾨x0 q/IEnOoq$RQ (y>*8'6ek< yח.Cy'O$RYآ%SS0"PT^zpJĥʹ0{*A0Ćb~33>,A(IL.Bfƃ::t>2x*;Tt'3ǟ;AL-#r7%S~5>3{p$7V繄\>ȥ#[m>>-Ͱ혿nkG+W^1Ld*zL?Оi|>э)E?P.Ƨ9.gAYJ/i5;# &-D,iY礃k]j4^,LZqG.J*2J&˿Vl?'9$Jy} !ű\ G>XaL [Ks1\98SyDz0p䌦'BO/f]ϻO>£wފ^[бÏ??AH>(~I֎,e2)O̐MC0yvYF$~ ?N׸"q^ Bf41O&fbߚaUX'ӏatxťeXdw~X8Sqɧg>0LN̄@*( Qp$ $zp~Dx?R  y_|4]m{a:[ )ln^,32 DIᡗBo>WgC)_s?UVWrɓ=IĉJ8ދ>I\B?pB#3qCbڌ# r(  Rnf6SU?%mfAHbLNUYLnFfV,m 8u}q=Y{ě/ [7c࣏CAqq40Fγm{ל8dbHI1xiZj񷊪G3?31Otbu6͛ðh5 vY ;'θ"~E6<^-˦dPB2(aI y{Rsm߉q &ū)dfYZ*5JG9֕,Z\}ՄG |.5 Rc%̄a:#H*U%5T$P z(@ 6H0Cr'2m?N7U#e* mlpCBpa`wB QR2I R5plW%՘Jީ0{ofvl'^|SKTVW?^7x F` cl o%@ C,,6Z*hjB*>؜P[6@} ڙP[7@ u:H*EP68m!@lZmF[7- ͆޺R%嫧nWP Ǝp ]*@{TatlpaBc !@jFh(lB N pJ \p ^pNx*.7z`WyN  ӧv[9  bk\%m۸zcxas0*$&^h˪kpŗ㌋/0>{χO>DMpX>?䩨N r)i%@UQvn]d-=A1Lu2\40{=˜e43EUM!49lx6 |`,se/&3[ƬgYS\m5ae 0Լ& m#mʹh-pWaZMU8˪逳n8J+F6Znl\ زa=keu O9sX_y5uHdVVZuTVutik[V[;u[-*(H!q^{Ͻsq9'fmjW a3D(6usp/˘0 T&3,Rtp2+%!%䶎d%ŋf;8NN̝=|K%2bDTHd<@&#&KFɈ˟QTB4#2 J~dCVz( (JEAvz2BvX;DjFvBR-ԧR&-RD!UX"(6YH,R<*1:um  19=UMUr^zͅFwsR<}g#f5"DF#]k?u$ZeNov_Rx۔-m$p4~:cw| !x\:u5?C0%ϐjdZOD.G"`dJZJD"uHrok-ꨘ,YiQHmĔ+[F`dG#:4RRl7b;72۰Z8iiL;#1rzLJ* T&'wO<^IsA%9!13CTC%QEuQI]E'5A%"izWCHKFYdfH=}^IěX $JZ4R[Gc]ɼ`٠Tr h_J 8Z +G$iOuJN_F(1]2T&?C <6_o_?bPqn *<{@KR Y.GLn:#]NOEn"35Y\i'?ږgIXړ$s;2caDZ#,]HɍԸhNŠtDjn[Acf"*Zm`Q QQh9 l9 i8y'cL9ʽ`|Re" Q5ܨ },NT R̠W%7B nJ̽(с0LTiͷ7Taaɔ"q8~8+Racz zw\0 &HܡD e!D1:Cw2sLѓMRSRnԘL$9a3^B5-r!4th6a9tJZ+*UFVc2ʃR;+oqժWyU(+PYI pDҡZZ8nszjn﬏Fj-2 sJMz*39REhE1}]$)RxMLR)~xХ| Ape׸{IKML.; 5ZZJ^ $m[aUF:Z``%!etLA 5MjQ)t.lZѹ]=p~<~WYzM%SYUθR^y DWw-Lge"QRrRt_x!dcdJ_(ދ+W(4cfm]W&Ji8l> IDAT,4ӭ4x33yK%'ɂĀN|/|w(c6.϶ y*wi߽V6.$%̗,wEB~2N hDϏ>M Er 1U.5%7oҶv|>CƌҦEU4~npڶ<S rfPDK!UisNQc$J UZueYYܿ- ߼N{?_?|kŧJ5\=pvJˈBWolB!-B27g?+zs!3#̯+ז}?BJ#՚IZ{YaB'h nJ/ )Ex~^o@1r]irځ_PGo]n&wt yշ%oӭ)2(F`9:{(zgDPykZuJo`BHJ(d*E=o%ZX\KsŠPތ1 NqW7`z>xW֢V(mzly޼B2(Mj3-N 4^b R *ՠ[c$Ą/Heda47/(F(&Z~NXX*qr)Npvs:86 1 6DjK*Fġl\cfO:e?L7FY 911+NVf>%Eh &*#Ti&Pn?goCe Wcv)6;f4oێ +oxV*a>'wPHe @~|[Y4s?USb KKC}928{ Gvmޝ~jGqD<$?&i)OINI%SRHy&OFD *lQZ`ecxVwmV3/$-O% s Ñ0l4}-۶cuڴ~G櫟LfV"k?Qci~nEvAS ,7K&~nrO(1} X:C7ͫs`6IxyHTii%wPk( d̰-ra2žPAg3 RGPд]G(ʹ$NHdr4 a.sd.<N)NnUԨZxĄx[)_`*k=]Qq7=R[K#):(1R,XeEYYyw |dꔓF!QY |AЦFQx^uQoyr}2:0}B@ Q-^߅C &3D )YŁ`о ~AKt!X.~;aپ;ׯpUܸ18y]WOoܼ*鍛7޸xx"3C}2ᦈZTtzhÍ22tO'2ӉDE2ټzQX2Zfkԅlי#6t 669ʥKAv%46V)R(/I-Nx88`WGgĻG'v>F>`߶-lZyk7뎧b 94CНM&5 5/ d˔-)@I46mc9ѷ *1Nxj!%2YҰR  SN0ggd00`*1\=g2ַBNB,dd" hޒB#5vKroHxȫ]{b#sAb"xF'6>I zu 6v:8bWZ[DnaBa*kqǸ{y5ܔnHUb>3ݩgϸ{&~AUu@[iDˍ\]-J\+xEʔ<~UT&JK|M+ȟ+\h,JJ),&1rzо 3#36vR l(KlR/)C W*E˰MT(&T|T_ktƶ{A5;h)-? DP(ܷV|-DBff&233RQMrY(,,H~\nҒxQZY(\=!ɰw >.ptq45Œ7Ɛ_ Ϟ>VI|CcTZpy64iNG]LVmyiN$%&p!ZwI$NA^}IM~ơwޕٱ&~)C!fMݱd gX<[KFfxW_4eX(Z ` VRER X 9 "nPX`"a4 K%J+kb&7GimMRc2*k&ƃDʆOl֤>}FFieCfZ 'Ov޼ȰPḺv$ÿY!EZR/QO|TUW5,? z5!ׅ_ ɗe6nQhAm&yV5-h#'T1*= 7\7w?vyB WX# k%Y v w޾Y]@Mb|3ji,[&+;$UųgO)Aғ'$'E|\,Øh2ӈ@@ --[aׯ\|Q'um8sn:t@vnG;%b޵t`M@Q{7oiȔoDb|<ok۽{Zb"ź[6 "Apxv E`u^ nsg6q1@M:A۞w'MzƼODF kJ0Fvnío7_8|~?bG HL50ќܷ AMm Yqd&ﹳٿi ۖg߆]/cϚش+#pbvv{)r8ܺt AC~ln@\tűq&&n @j3 @FF:E5) rY<̛=Eſ̽s K |ضn5.Tسe#W.ɥs @ NrIjyBΜֵ\4p Ο>@;> @Ld$1#@q1\?#.IbWϟ$? @Jr2/=}ܼzY7n]* jn߸a@R߽@\>dLHJLS>E3"b:dN8JaKnnõQX(jAV6v0$-"#J+1 Vv3v슃+掳' *n޺~"wUk"F`WppuZp}@ŕMrr~:8Ѥ]'lhULD`ecK^}El +k:iSB[X*1t$9RGw~Х4 ѳ;~V7xWǟ1ϡkyi+>m]}zÔcZǿ,i?L_ocKwٛ :tf,=L܀$!5rss-[oRdż޽'V6_׺tށЦc\]YlUj!U4n*>>[zMT˗PN]ԪͦK ^ظb >~4hޒWJرoTִz v_L&Cػiitݏ#(pd"8ypBxo'9r 3/9w(G`\>{kV9\p5 2叅ܼr~Or'3'5[g<]Y{"W"˛tS}Φ'c|‚εllӼ.lރ3iIdB|8yAU hW)btdǀAe:3Y:xb)$0S bŕRqGq/޳ } 5ԭl;xp+,*~/I&wHy#w-gL+׌)t8Tw̓-K?4r,k%T܍*SɖZF'y z>BN;_ A^ {q]Rz/O~ DZ]̄~=Yu^Az232hD <*|7~-J:7|vV6 defb'cRB<i8?G\P̳'xx#uv6"A޻ef"B*~`-_ V+m.2(W !-Wc| /@z wRI`ڜܿyϜk&ngOcARƎPZYaN$:.?L 4By09bb)\:} *չp 7ⓟpU& _Tʭ+8n"8~$+N]ӥ\ܺro]󿜽`/d2p*!defqF1[0 e!'qm[Zx\L4cc'1ݰ ii?yXթ_zϹzN SYA&%5IMIFy6o8<:斖xTյF9CQ-^ ;ׯF"p \*yRiK6?̕x@@+(,x(>6QQ+0,MUC@ H _H?aU½y{(zԯJZuh5^~.Wf6gW~>~!aT Kh]6eSۋ {YlߺzYC\fgg3ﭺNԨ @n=ٽv%ȟ&f>[-`Uz{bX;oGo"VܸpFռeNgtlƒg3߼ߗó=Ze'n VK U#9 Z#%q2%ʊ!>?3=3y/fP??Bo%mشdX_Oj{֯b_+i7z6\ :{N qQǎ'=- A7u}W TRq3®_il]c>}]ōdxTyVvlX+O0"KM7K;%R) 7a/ 5k?W^ydp. 滑x2x~J>~@:E K% n^~,NW%#=>}.1_;-Kejdr9n>\={J޵׈1ܽq9Dzw D*5 }bj%ԊPPHe2ǯ<PEk=;٠1uOFs }>2ds pAd23ZޅyfgeqMkut?'wO^m=_9O?"3=wIJxL򽳥ʊf[Yu&cz1w` +r/Υep צOq\ٜz0=ə^D*֕ȵyȌ2u*llqzz-_eӢymފd~4Nj5o0wC?A{ܾzIT؊xg1y:uy-t )!'ٰ)6_jdefY]K_0QfguΗwwP:t{whzyP')!es~$V(ֶvԬߘo#{>f^+7u"BCs@ϚGLs.]v2wS1یt4M & hCV>6#Fmqj.^՟v=o>םp1NM:qQChѱ x 0_ե .=38yT*2.T'Noj3j<ή^ϭ _2Z.)-3syMӷ9(y{Ugl֥R) ȡlbIM"~_>\i|Ϩ zji?o_ nxsZ5%Vͷ;Jl_<L( rjIJVf&'.ǫMiݲqoIn '+~eSq`{*F,^ʙsMYB^/`^eNuDFPd6Jq]]5배A^ym %$JamWnXHV&EMܼBD0x@?*JE(T/V+JE(TRQ*JE(e_*TRQ*JE]j5Ϟ=舊RQL\J%&_X###9wΕsgt oXX-E۶Ҳ+~/1ǩ{paؐ!FmR櫩S9nI2Elsy1N: #R>{vv6&Of—_VP| nQLx~ə˔hӘ9m ffکD]!+h |Z͊f3f<= !!!\q7w 2lR<>ʃW/0}z4oN+W`rQ?zDح[$$wkWbǖ-Hy(X{^'71?zĂVhh!mJRh`*"v({,+D@4.9Ò?~#+3>U\ lwqSD_x.+Fd6>Bi7֍1bEϿ\OZZDb`D-K\ZJe;z#dbZfC&Wo2W/|]\pQ*u7;t ܹJnVV|>ndFpS)qS)q~lm_ yM \л4a*U\R"ǵ˗1mhϏכ {UiLfF:UU:N7mL7gOL/@yT46ؽ!F^ؑ#ݯ3gϹʦ={hܴ a #td&j"^+pLZزxPb.n7}O ZkKQޚn1iT&*k֬J{}{03- xŢbTzf?] bY+MIMMeݪU9x[Ug9~ 8:9ѬUB~x8ϟ#1!JC.s%_sgiS~0lN=BݻQ^}ԗ' ܼvjj#Iz򄀠*4jRherL< E>*Kӫ@ޝ0m%hں vZX:vNoHKM˛ƭ^Eaa;EșSxVم3ǎ}?MXIet_^}1jղQccc/ -UWgz\Yp0[7l(VqmlLĘ X<>5jQ\anѻ_?~Oƀl&|.GG] VAE~xH5ŋ؉y˖6eо}hڲ%/^;69Lb.q ZiÉÇ׸1#k/ӷSP0W(~25^]{PT"1]@-0}vnL%o/R)WBBZoII4𯌣3ׯack˯KWܠEy3|Ee?||y7Cywb2foge&=!f(G|ȘϿ(OmlmiؼEعa֝4l޲@?OO';;-ρ\^mFTR/QN]~[;1||1j8Cƌc¿pvuCf/Y_I(vNZ"p_yLh{^ :T} bرL6D4|k[J~DiixTMDݿ̌ʾȤ2ٳ r6n'Lqdgg4+UR,V "+;Oo6;?=-Ȉ{X[QAff&>~: e(a J g7׶9;;RRDwXQ=IL|wt#_sTә`Fj5 קIOR˻Hhxp?/_ |ߠ*l]xH=!!A\ Cן~Ύ7{,ffҥ4mтQfM4 &L`yڸ^yzV_πDkWP{?_`h\ SVӇE'7YCZ5 zX}3uLݻ c4{ꥥr?"fZ?ILGHOOgt}L֭\A]`}"++É#9{3 [{{F۟v= ж7Y>=JqchLeg+k ffrQ3mFVb.йycz w!0O/mmYczVԟ-r.cdc8b§hjv1cԼThg77L5ݛ7xow={ƈz篢")1uӱG/gVF1Ό ILL,7F|4 fڏ?O?\Jİe^N^H\j*ΝyݺkTrHqrB6mX_:=3xukŝGq0{ :9[u)>ɽ+.̴0˩#ؼz%*kkCFtnLZ Ǭ[Ho RڋB dta:%lqOOOgĠA۵, .G-ARZr|FF114o2_U)*V9_IIOz=}4aF JJvH֪*n΅rbck8U'\tY*(U{;{ w`jX:Q81̘-YkUXFem̈́gr ._±p4?aec̈́dRSq.[ G|fUĪZ,۾H7jAlܼ7D+jvV67._;׾kww펹BY7,K$a/{ٴnc.D=yRloB-WՕ-#;;~B 8{3W+xMj֩C B]زEo_KZl?\nւB* 6lzq/NaӺ]Zu۩ܼ~xPդg6:]vPTkeZi>}?>7vt{7vv ~s'WY}7>} n{vʨ=7֪S'ѷcx) mtZo_~ NViԬ-u AÌ/'6lMf-hپVpE/K uTJ8*,,ӫAhjԨņKtrs\\C*"53C&_拱&{,FGӤU>sO|94~Bi˨O?QϟgNِͨSn= ]D '*"F`̗Sߴ9cϕ JT$N9;G -lba+jcMs%) gTr]$%`Ŋ}f*is+ \ܸ}VUr  g3Db(цLT;c>Wc)$ f~_C/r^$<ӯݨYY96^%0jTb}~Nz aqD ;[MYGM*3.^%4vO'aTQٖOG=g_ƍgرQ~œζL5N~Z[G|ˋ &L09|z[Oi1priEU˖Ѡzu-ۤ:fpRHNN&''\J:nҵk3_js'6[䄫R5$s'6u=/z&aC-*%yۋO+%^*|ܻ/Y=\+J:QFE7:RW**/ RXXr-:/ol t?oiIz^pg=<\ח 3yL:Ej9X`;mԘsMUmSQwι{t:EνծMf jO5Gkj9Фի @*KPעޜOG0 y Sъ}۷bmkDžvBWRɊr"ՖAۓ$9a"M 7H{F [ڮKmˉqw" (\^FVsmҨ兣Sь2ϊ*--{w֨qtr#_'R>Aŗ|g%^ ^p`_ ֻёQ$&뇕uu?"6:'ս$1G<<?k <=t|R>eeeqn889.( q+Uj叹sҧ5̩Sti۶ 7f1cXl(./V>̙?_gÚ5V BB{0IS:k3뾋,4,  !,H !!$Í.L{y^ji;pqSu?=wv=n[ƌNjS?#96m9sm +-c߃?=qMv7W#^B uGØ&n5}o<}[Z|L8?<MMi{ӎ< 5'տ=>;rY/Ǿr/iTVU{>õXD(d8.nb"9Y|ӏyYע{r黻|뭜xY2oO?ꎎ?aG[2gh|v-cQb ÕM=@w%(c?|ro~TUwڙˮngRqs1LLai"LuH]f8â6?Mq/Aʕ4 "^n7lIk#M##x]x^YQt5[7\7ߒ.ᖯ׶YQ0}>vS[0,<~~T po tw9hNW^P`o'ƼxY*19>$9$o&0E8{Ѣa9 h-͔.jB{l}Ep0݅8jn+{G|@6*Nț F7fQAJbb1gHw͗nÏ9斖 .EwU8/ |4ƒa|KK -E*s+2_BD-)8PP5;:ڝNNhΊAI&SkLaʜ(@ @0'ƣ%1*ǵHg@MQ2z{{ +R TD " [v&żA i]+ҙ0EJb (M{)AZ\3gf)K,>ejBQU~5T7`w]ox'a*͖c>s|fΛօQy-.q/B Sfp/E䊻\UU[^[m,` 3>ݞ6,VT C!èF$Fu"F8DAt ~lA$)?ЏSgY~ee8+*b~]wV0 qx<=]nnAlNA$bs: v;@@G;Q43FAE.b#)HE0C!4A8@;|'! C`_J|}(J\5 vv઩c O]#m)kK&ƌw:*Ƶлq &ҽn%ҵfUѹ[j΢sj͡cږ%Q7{[ڿ*'ӹ| 53ѵ+g̥kTME%TMEo4޵)oJUxMgJv]Oh]@ ku3ݽtӍi{+AYyvanw`0 0 lv;vf1vNl Ék]ntU.CW2l qFlCsyx0jңkH8LUYufjkԎCƍԍGۺu4yZZZزv &жn&о~=uӾauƱu&jƌaMTij[7S8V*h߹Ou5]]x]YWY9޾^n vw"@@iA`p"8EQ1#4p0a'bw`ں3݅xj젬6ltaY9y;DǦ t㏣h젶e [׮vT:V-n4ZNݔ\Jԙtih_sh[غj5ѵvSZItoXKŸfz[7j:=ob} F;pڊ_O* bx y܄}^tpn863Bt! `XAIRM] S27a( 0CATÎPlPMѰ "a`'@հǮ78ٝD~T;/BA~,A$&#"44BzTF9. P"dZc$U݇èá n#máz$b]~˝7onvff^|mϞM$"3AUfD* )S(I$$ҭ{z|ThBa4pJPdl.72}R(ۍ owj;;p1صGE%=7PVD&һycӿycYt]IUV/jTz֭r$׭b$6|| P1 (LߦuYs5mo4͸iن_W;Z=+tb/"߃@?M;t$==JbC(J;J$)Q"ӶI$Cs]eob+"׍PO'Z;4ڊ &D$w*o08OGáv^=7m+/g~~}gⰣⰣ Hc!#i, v[ƂJ0N`8%ANL{US](4@MVhuG} Mc!WᡬJ{3yK?~)3pylۃ則;ocO<8y/HݒgA]YNJAEQA#-Qt|?69`y}F@) ѐ$Ȗz\KZ[,ygGuo;nprSb"}>y]>xM>| -a;{{C#q! )0M?i"2gqL fŇ2osZs(3(q)0EO<ƥ/iLz 0vB3'SN<ɞ&o_}_үbْb٘<}3eyL3sRQU{*zeHə BXڒ1׷xAi)#*y)gUU S+=5G />ںzy>3{IW\ru ("ҺE%1\ogfD~M>wGp=o uy, ?_O?&3}vc/v}O+{NQU);%R[#S {.  *TQO<8d1.fޛ@`8s>|~o},pFཱ;l̷ 3S_oK~CʹnXO{&zzزwm6 55QH]C#M64RH]cu TygILBM-Ögp2RHJa& FIst ]Egfc6J_ %n UU9 -/]⵷ C9s%M! J-aaFH剋Or!J|-/CMYycOTUWspU |}ړ&|AfΙ[(FJ%0Tab֥O?ṿ?$@?x3~vaFd /KMMtpb"SpB}!"v0GT7Xf)ܗRh`) yrI DD{/ܗ؁Is;(啕9{=a 2(0M]FC!+~n:JN5=4h8Q:MrKΖb֯ctuur筷_pE}UH1 R0TJ3\#@$Ō,0K- X=ܣ\{{37{uiUQlO7YobޤHQ\δF"u2B4_rC2bM|Qn\l7")R+J潜,Hb@X g_(YC}=/CS)dt9#dJԀPk}o?9S&%#lCǨ)yQ,#8_ 0bh1:/>?jʸq=pfX|!5 i5n2:q/+"KF'~4I,eHԉT*߲4v\҃`*֬0/[b9vs({²`*⟜i-b9l csF^HJ)FH-(7=ފmŖ_a0c:fܹ|wbhQlZ7MUSLݝ,<Ϛ3G~iu󋰌Б- K9hݴM"TD(09:YR_/]sO=fW^CϿ)j)J`HjBk}gѻg=v' 6}~x ;SkzZ hQ0bR˼G4Cyo&9q@ +;\>4A8G3섃AM#U! f!*Oanr^\u\x1DŽK^3L Pv9'>.'8Їv^UCGU-u:p6mߌ~,8ݼט7=nViBߚxZ1f)efҷr SһK*ͣw1+H_ ъ.GT`6GeIzQ|"Q#|I]tUIzIS'MBUUzbȥeuo-T66ѵy#5cӹiCl3MlCMT5gK+Mn޶-74ކjtmڈNV2еwu ]%b`e=8+b/ ߇$E瓐A C Jb4 vwC8}W31޴ҵ~ 7}/t]_V5 ti#!׺1ۼGe5[6R IDATm3|[H!ݼf63n[>Mk߼WK ۲g8k}FM[p5l^]G[uUb&׍$ׅ^VIdUFۏi @! bD(jך\ $=cZ8NݺKUO*k<%j |lP>Uv*6/60eeis8u5cy<'v,u5I"Z$.NOulexYmFF識Z{D#YKa'"6tIT {кyv*Wx33ȗ/ GbLQ5>S=H*%Tl5V6ʢê&9֌@P=fBzR=n;ʦ tnVJ/v .P`$*- zqԡ۝Y))fe-! -,>#Y!jJ&R :@/USfj5Sg%aLkQ;cnl@U\=]~^3cjOdI0X"Bs/3AEQFn睎qVpXs%sMo$Hh=lZD phVCY V WH(=4EQ-9*$UP-EȊ]B_b/.eRruD!ףrbbxmvmw~ȟ({?8&-T0q8f Ae1NaƱe$Gmv@n' m}vB b!FHTɍ"Zc&b!j IeKy/FhX{G5a[^w-lDtAW!ČyYˮүhW~M* Dac童bd 7G5O:kt\ daAWw4Ka;n'8OJR\cykDisewJt#8,aѡn˫Rrj2DU7٩AB3-R$T7n z~n*i6f<3P2{/ܗLmz{zc6tÈ)DJRҽ% y)z'Ⱦ;n wa h&3)U0({x$DzC_.P+|V˫*y(\&%?<[>919D űTL`$}=߆G_&MIk?XjN2vtUmRFSҩᴔo az6kQj^8^IR;”3^"MK,Ualn!N<^3&La_d>Ut(2x^We4ݼ I:ąlHdI#=wil`[hk[o]f+L&i^ DDӹ|ѹ\w%y@ɯ .9%hJ-r~Q3B<)k&LdYԳS2/tJ V2Jf[x{ ^1!FVq繷gڬ9)b=Eu)߇9c_~+y42QŒk>kAїߺ;'IRkޭpϿfѩ'q.;;3Z42:FvZn{1.֬yT9o=K0ZmIGKaOl%+NMPmlmo㐣␣oݴ Aum<\|М7KޛD$rP`v D(ȲKs~p9?\eb;@+Ũs$CQ0eDѕ¡+Bu16m,ް9`Hxg*(iŋ"eâ_]Am}}^/ac;:D;d0Mhk5e>XݪJ/Ez^Ft9uvtğc.I*Rq/T }qy?vR8oW3(  .>4.ͭ|z#lHu?TDj)&gr6k-Iq#+ Zѳ+/ x(zMӰ;#LSE,&E), .~s} AHHg@C# AcFDqEQ(IK9**znq__3{aʭ: !nȔ\xK^?}t7!ſ SG ec3F;3oϑ{}<.{ti5cKAdB-'ҙ &ɳE;aw Wr{oe9, s始 :&Y9>70o|)i5k324?֮DF֎v~{U<b(Lq^O37YšQ?>E_SDZIiG5<UA%R*<.M'R'SgG) 4M/<; SD=E}8T~yfaeV_~ 77s?q^L{"Sr$^#q('f6()rB3"/qF;Hg'K)UUolnU'Cմ=Yrcv2XӌI,:.ԍP1)J #Q (rފR@&PxZ`@OQ!4>uoqT8`?gٖ}rUK%I/FǁGλ:Q64,>D_0x]hZ)& HʞcFRzC.,/Gt0?9|l C7\q9,xE`gvŒ7s{ϟ]7ٿ8)$B،[O{J)Gif"ѴOD2ZGRDtT{8B}{#N?._v܉Î9.>MOa.4Eڎ8#Fz2:wo8_I$@Z` )=2m$FbxbJ WG;~~4t[nOYYlc< hE4?^{+tz)9{7 ;57pϱ(φ3R 5o`aWȥaFyģ/>NL>#+G+\tIf7J&X-iCEO>ف]އy/.P2{!QV^[ץ\sRa+5 ٢F-m0]QG{E_;~p%]ѭl+ Y$& BʐSο^_^?@QddYͪ-c;@/ڠȟČR2 [N`֥Y0B+~˦ x⑇Lhi}gڵ9 m@K\/"#ZG/: OyERL#1=kZ9b1gve*>fQGKti{8o8#sqˆ[ԯ)JٲX3fru7pqG7+ mѳN`f#蓩=Qg(!f] FAtQ08 :"$ lHA8 (Alw Pt،x60CAY yh:D l EEA섥|k)BƵD߆TL!;'N84i`5u lوV\ :;pM߱GD6*bTXe1$ r}ij̠f'SNCDJlloE=XPL̮PbuUeTqcH"(`F(HϦ+LkFDž) ڨLET+YRp;Ԩ#' eʼe3ĈiNܨI5Vm\5|>]@82nT 9戡*QEQT]8rꐃ@ U? <ڣ?17g#`3Չ oO|=8*,®ۃ _O7J}* ap{ `s2iwB~/i{mv"n#IT̨lG nj2|Ӵ3!_I8/P1!᩾.]'W{v{|$vI@XjU.fXs%uIQTQBS=[[~6 ԰F[,DUID@NFWJѰ|j1^ pZaU7Mm-h vYPM'z$bM)TcKCʪw#箸今'8BjinC/-Q&I4Zu6r5ceʶF0q(!?4*0nzjPʤS>|nRxYvtpΉ'Z%_o7^J`SWe]z`kZ)kC_F*N{'ѽn5͓\IӬq:R3e&=S>f<[|F9t,[B%ކ%S7k>[-f,V|C͔t^Fĩ]EE$6_÷ϖгvq m]?+o^UC {e nUDPkbs`sy}ҰQ 4u)MHUe'5#ng_dAS%4+B1fw Ic/GEu0>Tϋt&A1N Zvz,E#N7ᒣ݉Vǝ,2l b`_ӌ_%)  3(Mq[ӓW?oQQ>ŏB EIJ4O| Ki/i C=C)PVQ0` H9GX\QDJ ;oe^&yv'j){*'q¤%~ |y:0 Ϙsy$y^"$]c 81$age5?ըv9_'_?^gإjunjlq, be29T֩>W j)6C %Z,dh-o%iэ:l`B @NTMM=+ zW<=Mas 7Ŏaǔ{P$’oEQUU"jyGEQ^@^"|BYԝ. `(pڌjA[ ^Qs5&nik0G3'su DCytQe2 ݜ #PЯ~Z>L@n9٬Q]w W_>rUբpq4麩h1zkl5_3󳤑T>v)G.CQU4kZԠF5p;Rn91!-;R!4Vוh$EQՄqZ |ÿ(U,ݵo__3ɯ1jʴܕHTYG{M㘱G;CG@ !δ'^۳_kRE9w+-cԈ'8t5!b4dt;Rdt^LqO*#g V^QMD"v{QZ>X"!!6MUMa=]<@\4m[Fhm3j R,:[>ކL4oOqwx/'^'5c-hKTmCGܒGht|*NͽyVlq#ͩK0??EiEHku} DV" |1}i..F&mw=~?:[6o]vOEE=]sxa)Y.v{|wWsyT}=\zi\{񔗏]dROmZ@Bun٢sD6BFJ)}#sK9]jp#jz%rum]}-GHU7acJ:@0G3ݎw8 Jˣ(ȦP<{uF-cҟiE[L& stE@k$C߉^,3' IDAT域~;1M>xM֯]Cye% vޅƦ$YQU,"9Jǖ-l.vrXfZm!"e4'H$͗g~ #O<(_+yy :0ʣ )b Pqg9gʵ=vn~2:} ы50?ϘYAf۟|<| ="yp*qwb|:"?͎lWJZ񋭨S "u_zUA>^=Õkٲy5`G`(}[r"HuM{E{2d#]7ÖyS]# 8XHΜ~ŵÐk`En"}@XQËbY<(IsN?o1d]S/wmd\#峦ya$6YE~o ~;B#N?__z1;;Ǟt v[̈́&:ڶ$*U<4z cH#;Z*WzLcHʰuIn'dub-EE6Od)c9G0ߗ54>4_4OA@CdŏAiL: JT>"-ᣉ0qgI:?yt'ONh&iT2:y)1uk'N☓O+/s/Aۆ}.]e>_hZeU!& iIG*}q'Y;#wEy ͠yviE2^l47Vug/?<ľ6M yda5-آe$="TB@BvP eFjF3U&7ǷLiX4=Jƶ0nB3Vw6^b`̈́l wl~⠣qBIkVlaΧi\@xwx@^"|~p _ނL.`AIwHBHLPD*V"XIRf\TU$BW AI4ղ< m^jd[$mt4f%J./i8E?W4*_ ]>:~2ShP=L5W\,}_oFi٭jQe W *6h5[.(*eAjBa1(SPD9D*)ÂB *p B6CI䏰1ƀa>|}H?sE+L.O~|B8# k$_APX! \u# !MsM۷='NԘRdi(߽ӛﯟcEWxf%K=96}x[fB>Ń0wt%΄#_0@oc+Bߡ*I ,$230VcP1Fg R3I3V-hѹy@=. "e%e8TI)bTFZL,4*14SJ[Pj6R%Izjb=5ќvf#+ÂLG%[ceS]h nl|Rdr` LnH8L8>O%YGy[ wWFB.(e&(LHWe:^[Uin$115I*H C##QAJ4vI+4 @}R""5Rxlџ*#$T^jn$QGΟ=.(^" BIDdЏvRs\43Bİ9L c{qէ^Fjc4+~f*ST^zP .9T24H?*2U[x*af@H3Rged%daXIH XHcI ɦjQb}FEFrkf YNԱejVR{'Bab 6>3V1Jc!tXЄhۢьݕa^&SbAjתpEcf#5T8̣YL(xlIFTRAUZhA WB ^S 1Z{N%S[v`hhorI٬RLLl -k)YʌRTG]8yq{"g䙜R:!ˬq12obӢyѢK/r/WO6<-_$3ENBetdWΔÃײcZ㦦f>[C !&@bethW*$TSUft$ sJ.W+(<,1~*Õ1Y I0jA>jP=F'i[.}G1Qiq7;K(Q\IJ ]ۙ2?V >'",Lxd2]L" "A0tNA)yԠ.I]ZF7 +$ǂ5a=XHܸٞ|1޹bi\UJy;Z% %p=[6\y5~iU̩>OWtJ442fYkه36޿s+kJWAZu)^ &ffz/f/?M?EDJlr{Q޹͎k8uqLD*(VN4Ȧś:KMFHYz Cfh٥V6U^>c rR IHkak) )xMc!32 rO<'кpp`6v_;)U2G#[.-J.$M&$"q(V/gΘ{y1r=xȳk齉^qŀ]jδIASJ@)M]^ Rh_TL[vqՋڸݛ6##$:J!G1cP6.]DQ{S;cݰ)SǂTn'aN|,*XыVk ܑ9K' EPtyլC굱wrNbA֣SmQ95 ?1%s1vnXC-\{GGL̘pC'Om0:!HDW[T +Th;!DX4C3zsIxӕ,IF6!g]1Zhz1U!:" 1Eus\VN$xmk41`,2HY7~V4mہqpG-,ySN$Q1t"+`)s9N$6M&CĚh"1z'j% Di"H&箾@? g it/cځGo*ijGt=qod Ca)XDŽw^ҫU3"#e^c'>&D d#vfuB߄? þu!|s +*mH 5r\:9S9wx_?~ kQҿ$k|JR/u\la9KI1wPH~۬%'LՕmkVrV&ahh&?׸4M/m0ajfdJ,R_Wmٖ2Mh{O_edK紌*'q5Y$Vrat7w j:kZ6ZwoѬeZi| xSn\:Ϯk8} ^Yg&Le`-CH"#FF vrJJs=1Ɩ:ӼCgKGFF2}:tj˹cGx)0r##=l 0~{ׯq1>zpru&ͩӬ%.f @mDby繁Uh\?-o?]XSD7*֪KfӲ+,Cspf/wtt|XG*<]00:(Dmy@Y.U%E`LpO bbddDR) Rš~|Û7|x_m^ʻW/JK"-R ߢIs*( FV6 syM?׀4iYDO1P#8E)H\+DR9i EH ɚǗy| Xwo_>Gţ{=?k< \?w !3< 9{`B/9k+{C[!Oޱ{}`YU5 | FDpE%\0kd{v ,$`J@z'0w'>{s};!|젆,i= ~JƟ 100PW& œ۷a:QǓ6t[ KB}6W?`Y;9ůD37YX ?qe]h|=aKc{HLG% ;%ZxcF;>'_JVI֝h7h$g-e}CU*s AwvVE|YaBвri|:oZ4`p?yPnl.gߦ\>}l]K'p#;r~Nͩ{c8kϝF\ѝܼơ!mTbgپIv9yB8u#+Gv(7ΡFa9D"9gB(N٦sK'8wB GOD!R ޼",4TU(D@xxC!"Ba:چHT<1F&&C##LLB`db2%96ԌLJ|153!7l 칔gnev%w) S76&o2b.8-Bh}ߣG8s1+WճdNP`G eԬ2//X,2}{0f"ɐ3004d~iւ`=Mb4jkLY0ڍcȖU˨T۲+])P$n<\p̅Ȓ-;npi9`ه{wٲ ,Ȓ-;ܜY}x!R9y9 ,ٲbdd9[vBpp^Y OH` Nl # \[f/BC'7w +|م(BGP 0UP&&W0CA"Ebl%5/*@oZ4)\ri%s,M01U7/9k6ݼwigܾhٹ+O֋rt.0WϞsj~dɉ`*TM&.>A10dΘ۴`zhIJ=z6TlR$뎜ؘ˰t!,,h^4o!mkUf8ӱN5FYw6:֩3ɓ. ?S(ץ}.UѬs7JUmQQSԩϨ(U7fb/^2hܲxӰm'L#źӨevgmBCBhս6gZljx)mz <}NqIn^H040LTm!ĀV pcEV@:ct2PCs&R)d+o'#ьa}[X2x|s3UO -6WOVGrD7qOik[w/`0߽-)2*SrrN]V͘M{0d^T݀e+7ϟp0&"X9}<FEuiyvgLZl7hӉ|I6̛λOupu`bLXSs Ȱ`5ήl ]׽9U$Z0I$K+a:(P ոgΨ!y4jĔ71I @dcծ@V޴U: (d w=~,u O [f jekaވY cv}ocZ1SӰ:7Fҋjay۟r},R&lXI<xfaɁS߸o14hOަUblM`l\8 V2Wgl3w,@m)W G7<K 6.şbdlDR7M={Z]=a!lZ8kӦ҉0~H298AzH[ҺHj`Bwo.nu҆=,g]f>$0{IS#=Q ""4s2g~L^UqW<ə߾WլK庍e6Z˩ʞ C##,^ ya ӻ7XZ7B'vN.EJ(:;>cZ(Uϲt>hxXXb~a}xML$$8SQru:?1_7LͩZTkZ3'!j4S]ooV6y)֙#U6ˈIg0j͚D|8yMPЯqM 93I꿍Hӫ] V"*tsRU5%P!b+Toy|& =)U&ZX%GݟAeYlEF/]Ϭ!}026V6t9XDw6̝ƫ!o┫U#ccGVuxzQ ON=̩=۸qBD5n2M4g㻶eÕǺRxZ yQQHa8zU$ɫڠ){EJV SS?G"kXF/^G8w.KLZY>U<=QNr[%whFfyeˇ|xŇ'n0W,)' oט9C{c3?uN}Ʌʤm'&苯Wj 6WO# vvu$Ƌi׹f4OguK:+Qh4'Ӳxv9{_?~`ىkگ 2sVwQRUx^={.)nT {t+G.Z6ݾpI=cmkOs%_}[=NS8eYeR 7{7d*8fO1nfr*l-Bxv6Z7dxLހ|O<̄ө/T:145Muzʛ&uxMKπdnooOw )?ÖL¤:gY_>xj{{{g!tpJuR'ސ^nnao~)u [24Uʗ֕KN_ADɟa/iqbpNѵ:1:::4]/Gfc#H2~PJ *2&\d V HEEbNa{[‚4W$G$t=$Fz'0R:Y8::j}_F8og-9Yoض#N)f#~4:蓍T YO;6R0j/BYi$h!Lf&I/Q]}m#Zc4hlRrXF mV}Ea4.vpW:wm?@j 1xY T(5-˵;hZN:::&>s&uj&{ݤٱp&6"OXֱm0e'v 4cdVYKH:8ik]-1VE$ʦK{tbQ3', ]RK}3b2R>]<`h:Q&Py[,~^GO|e`G9m5[3\yv{dȖ_h91MT/Y:sp.L9%[F [c({u{cgg^v{{뎚|g~{{0|yASsedr9 !s*3ԶMZatjIEHt";1:4~O#and@UD:űRN<řW,TD\d;? ~E:sF V<חO0 lL /3_F(%M Q2JF(%dQ2~4 2JF(%dQ2JFaZ=8,,sq}dȕ\-e{ݖӺu-g$ L db:nץDFF۷ A(E++4OmNח>>jr]+s/f=VjgIhNiG?x1@vꈭVO2̝?7//~Y3Cu:M+NU B}/<{pҳ߸8;eݷk7ogfʔ!2opO/GEEEq?ojl1{\hW֬šxƅGm !Cֿ?=#ѱ!G% hפٲezYܹɕ7ofu^Bx}|XѢIQĮ3zɒ'ssPw3kT 6̩eS?F |YsОH' R2Lhҽ?Fz?}˖1pk?wo&<<\k:I15q{܋DI]}ޝDDD講|4:G铔$"/޼c޼|'L~lM:uP/_X6}:U#݌3'OҠfM~Tyx[[bR0kW)hsq8R775bU+ȑɂ,^ hSu˔"Y\o>}Ⱦ=q/ו43lٺ-ϟ=OJ%w޼o_9}wo䳟VdˑmaaiL;(0KcfnΟ;cddLwܬ4k>55  ޿gy|;wG p'ǏXZYQBEjk{l$(0dܽq'W7Sޤ%7nef)mwӱ[tfV>9r z2G?Ewܻ]p˗j/._Ơ=Yi5kMT~%Zԩg/Zuꌛ'A|c3|dJ;޷7ǯ"OvywBHp0{\P4|(fs+X(Io։EcVh y\ygh7KTNо}tv/z3 LE~J?ϟL2)2"EK*+U|JϚ2byin*[ϸ{B*ĥ xffT\gWx+ .;ǏJ(@!SiC@~ gglm3QbE 7zsÖș;w{.?TV6ܽurx|xN" _qMB% IDATJ\z4qo>߿( _8ύUgr,?~`HM<;h߽ғwlwON,_)7& beHBF8qG/\_ʙ^DD+\7w/ ԯVÆ3tl{Ak3sh#g,:z 3|$7A}훗/)5 Zɘi3^fk,FPju0~dՌߗ: 3f,LT -;=[7kk߽Uj\x{%(ыPb%:S߸bf3q+uĀhz-88!tT=GŬe?o.\8.Ųw>*Uixvm2it숽CKg u47n@.SV-.YBXT߿Ϟ;tAOOFMH Mk2e>D"bժL?7wUh"HݿϠݹ~\wvܽyS,-6q2M[x3fܹS|1K$Ώߣvs+`ԙ9>X:-;v//'гw4R0{*TJד;/7.]P靕!Rc]6tՏYcFW :SV.J~iJ+qϬZ9sR|dػ7ׯ\yVL?KJ-8{$g_'B*,wq m;uB'ʊ5jfDumMkE~000@1=e TN#ׯ1wxxԪ5]_s̒sXq3:)WDQ޿}+׸4ǒMiO كMWrMȁ:?zP; UkNB_y@Hv hfP>^=ؼz%G$k,7Æ0qj(dӓq57AD1œek(';]j98t?uR;{R:fI5p6tlK#+f̛8%3bA)F;iԺC&M'_"+r:uĀ@p޽YzƦݻɗ?V9s@"QwNjթQ,a{#н_?%Icf,ZLi|[ ~ H$,3sf'k8*'&޶$lllÓgLT*e ̚8A^ǘi3cWGml-Xk[ 065cwV6YEy[OۻC^w!7|Ey&`hh]ڣ9 ++KX,YѱW_|ҔW$myZfs.TrJ5x1Ih]ϕ$fr;c$rzxpI(uٹ3s.eB)/sgsQQQMŹi}9X~=׫V`F{NaET.RwI3ssJ)G=(SR<ׯ>uN}T+VHY$-;vmG8~Fʀ)Eۮ4f|6ȑ'OЩI^=wuJz4ďЗ1j\5| Zt`W0矼L/zqޫ+oXdɨ⛓+2eNj/Rӏ_%MP)[>}Hzݻ-X0fϙًi.0j֭cƍܿ{;v7~u{UVӧ3wo.;O2e4tk\=޺a=[7}###LB[lZZȏ; `9tѓk+Ƕ,Yx)MkՈ|vl3H$tۏMWrqݢm{/?qɝ7p\\y;VJO?6^Ys~aCe,=334Q~)֬ߐj{E"usKKn-5 f##̘J21 3|\u>ZeۥT.?ϟ=gNv>])zF[`P{~&߂ٸf  mh^N: q)FNLm4xE lɎ:%xj7hĭkט8g4LBYԬ1אguZաvL3Ցb2{jb 謬m w_ YtK@ 5K R^zEӺu  cʓG+V{\V-&ÍW)Rׯ\Qk4%+WfMDEFahhOܾyo016aaԤ8iq˗doO%4gLy&̚MQ̙2^\|eG-DvYh6 9J읜V~:PO[*3kޜ rY%xP6^Mbhվ=BePkwZw@ٲ~=Me]y3f}&A۴PhۖWSv4k$zqF AFGtlь+Vajj\Ű~}u*WQLaÙ6v  4K++,ؽk$8(6!HcH\E\.܉RDD7c%O(W>Fbbb)ĽpZg{{l[( e{ɨڬ3))w-dWhrrߟ}UeIt3*Z[2cD %/'.]R{׽}|x # ! 333ٓ5۶'>v>ʍWhY_T*E" ə 3fQB9m[9yTɃXXYQf-*T+cjf"Cs^ő?O//3֝Nt#yRz{=~= !훟I 3NH LND镕08fAhp0 [eys7ѭYCn_1d/[!N/^:ܻ0Hm Q#3u*Ͽ|<ɥSH|H~4O?#%uG{W.bԠ\߽u@ IB%+6GW 9G={JJp̌0΅S'&&8Rx û䍵 {DHdow5LLɑ'Fk#{{Bt߼{'g|CO#<<Ee2{"FN^O:05ŷ@^תX!ORJ^Z*5jIP@Ge*V{gwYAߎ%fO(Ƽ_G@ 101MXFSȣ Nz{je\p=yJz>3"=+~T* jbO9)wqWrĚD]|!)D6*NM"Z@dH.i"qy'Rc띜.,{vșR6gBP8Cnn¼Q/^?o,O +%~^wo<9%AR4)W_ȧDWg}Q|! g)٭$TySV{6UX@"/$ѓ&'s9=e\Bpv nJ󎓤s7l^`   bTDTQ^*f}"T(AAr$.f7v[Us}\m0xeD_&wqu6D#XQvhHƘV0 ^S:uWw=iZlYM(SlYU A̢ x-[N:W6nU"-kQ'qO$yjMOM-'4F|Yѳ1T\n'AU7$tL0METVnX&L#UKi}i?oXVJFXPg d0dА.L5iÅU$%pC)5J3}V*)S 5=7ݿwS=05ʶjmR2lpN*;;^ iȎBuõ+{Ye?[)i^ak7rVxlZj1~>/2ޚ (8i%躉&J,nhicBh*Ȳ!LdفiN'CSp~axgb[a"š 6Nf[`;oX:S% 4c(qjTa( >?F,3z43،jA܆6;ejO[}HD{_"{8Ŀp+a6_Oz ONwð^8n4Ebx~(@X8)Dlf@s334w03.FGie|x/} ؿg7}}L n}۶ѻl9Ã[Xb{6odڼ`Y|Zvox%̮W|%>/g/dްEM`l=Z;vйdvnvn@hA/Kh&<`{ mD4L"<'BEqh8.]I F<A$;4M0!L$فNm5E N]Iq\Z<  Up(.-FAX? b j4;؄< 6F#A=-4MkSUL]Cv04k+t6hĴ LYF-gtTیUv 2Hs ?%9;_vl(Z"Urve;[,eYB-?W\ao By礲̙M3-ObQj"AN4 Ik{;ʹuv YkVsG%!a< HO @"k#aL$pID#n7i~?j,GEqn5b ]Qp蚆B״Ie9lSH}́a8. Mr+ \^jj0 J|z os+ mD'"69] .`vxM EfvyS;6mi_8-Xu_}elÿ\sѱ`7BغkHo1m.[4`fV,gv6/#<@b#C #6>q p#3h0@=c(q/4Nj #9` c[N.k Eb*qd3C0Q 4qZQg'0H ljCOjjC_#0݋1g݋3k=I;vзt){ogedʢڲ+WgfZ͛͞Yr%]q=Mע%oicztn8v"ډLOoj&63ٲ@%c۠GMq{}hlۑFtN'np:@%)Ҝ$G# ($cTV'ra:a*cؘkhey!9 a0wlgx^v`xCwoh-M 5jj755555q=n\.nˍr rqymr 8TjJؔILU5/Cͬ9"szC3Dl6}`d*[v|[ijj2: qe3i*Ȏ,3=C <+87rom?q=Vt=+1˛_)Ůbd S8\+Sqx}8}z֦Muҋ?Oָ;ygkד#hB. պ2b\"M.Lم'O=Ž?4rđ,_``bZګkNHYYzⵞc7FYuU2şy371kVݯ}&4 (|(Jy* wT)]R2XH=~Gٟ*yh$Jer̕򎲟uk9zv$r߫^;)R%k)ʭ _yskfHi2rKL61=kUq5`QTnVAMg*۝3xKQ?1M+Lm.hˊnOɏ\ ;w>pnDx-*~Guo6-W.H [3ׯJbrAЀ551ɟwθFu4]+RNnHw_(?_(Hz6xȡ`(G.]͛Pzyp1(ʸsAW(ɶ[TZRA8۷^r*7ekYGuܹWQq43b xu /~7>4?7x2=9ybk43 .SIʒ]+!TE1p/ٷ2fƵ*9-?s'ݻvP(qSIj^ ɓ %ٲfո_=eEku4/򕹃y.8E,S#:n]:E\Y=_T~Օދ.bӫxyL~O]ϝEn-Sm~uG,]MeRSRZʙeX72Ay v'z^|qd겗LQ|,0,eJ\XTaN~J(% dZ3a`u], ]4tL]EBS0 CU0 CULĭ LMH*1Bcᜓ$8wurg>˒2άZx0̂Zl+YJ~ *{I&jXVPKY մJR̚Va):r^*ifnJsSQv>_TrﲎK|E~{1_`!m\\B^|~ܒMݯM@eKd-Tp`hHTUpz<[m,GOqz|?P+lF-k|_ζv^/Z"Rv=bcq;]VbJq H$rL>IFz?vbj*eZv1> B5gpILinCҎ23 oG7ѽ{۷@b"û,XBth'w Ҵd][ dvFB`vp=+bz+48m7ZMVޱ ¥Dv \-,'g;ćw]B|n= I #16e|ԩf&q6bDfp1"a F"jƑ^x }v i-23 ca k,q 4HĐxČGm4hŒbL#9hc{0g'q4cLZXY9xw~{^/0@߹EKM~Fwn{`c;5Ym[Y}[7ѻr5l[[}Û^wFm{Jƶfl6-a|..fz^Zz0o^G uv#Itr@[I|-gg55C$"a[!RʩbN)ppѰtR8=0k%1,MWLu00Lt%bۍs˃)VUqla]j8\xTQN'혙 R36zp:>6\8~Bp\H'3C!<r℔ևI j$ׂRSӑ>$'%63jjsKemo=Msv.^ 0"8{o:7Puf1{Z9 e\SBoGjߋ~y_S ? Enr%!tքWyb GzλDWU$wo~ 11JiDW_x~<9ȧ>Ke8LM}ځwej%'d1|iW]N^|~GXtYNpHN52+,[Oh巿sOﻂN?GFaZ|D靖6X3~*Un&x%]IwJܴ\wu1)[>ynVZ39ػg Ub+Hle(#O:)g=[ŴF٦ܒWB(*]wuKY zvoegB(zظHɪ˰$G^8SZH%HiZQy.|-\c (Y+h{:m_]m9iHi3t>KYA.5V aZ9 56޴QR,ncR@(jcsY},[ɉ z>vv\W:%""l!cz]vw-Ii]{<}{vc" cM--P8?ߺ,V$Wk4AO ujz&y2>6eˋۋ׫FճೖLtu 6j?0T`)~_7~&F S&Ԟ##l.ek&) Λ-rmHOsMcb-zUUEl9k;I_YE57~/q&@(Xb:cșxU؄[j(^'5R9^׬Tk$xᇈx}> Z sٝJLY묿6_O=^>zgԗ'Y|YB^6k*"(Cd&K98/rt6_#} ^e>>z8e9qͭm䵦]!g9i_,ZiΚ_ReٻN|l>Î,[2X|'3H,*>01Ӂd;].nr=yk6nޏ8ӳocQpDXP]h`0nM㋚1Mp8/OYҜalݴG|txJx-U-f9xd^.>4ZxbvBM9KPDjy$Vx]Rً)r*W* TuOUĬ&ڗY=mx^æ GI ,-KG?䞻~GK[7| y "bTŢ1{LI՘ traC8SwM4cعu3;na''hik*VJWb`*z.ˀj0K[T#&dPDJîQU CĻ+?+[YtgfG +teڸyhj eM嘥 inkko . ܫtǦR(ڸ)>B9-/==y3{ Ø[I/&ŋ[b?Q`oxQ.=Mx<~㴴Zz6aE,?AQ bZN53˝-.kซ Sw}ҋ$47>&kn\cR*SE'`/]w)|\rw-~N36#5EᗣjrY'y^x<=>xNxiS7p'nLgCwE =<9W*v*C*輢liTKY{}>V-i*NW;?:u/1>#a|dcD³Dab0H5[`0H "j CCcANYÁCvp:-ܴϲ@v8N;Ӂ$@v:qsAQ)_`!髯cld;흝s6*Ϭ:٤2r+-Y;O:yۭ(ƽn ~fLMe*럽+{wCz= ӷΞ^\nWJ9MQk)kY`ח*%`9i)ݫDr݀{I.$1&Gqt>; ve^>Zl>3/8CN8EKj#X IDAT^cq]^'H 55su_;_`鍫i][ﻇ|:~까l%ejUaAN.x-Dcr4)PU^Q [e*J !$wT^סT&^hLO0598ӓLNN0517=wb<VYÊr!OCސt$9%gd)9]#2ADR VB'ԋU-Zup ۚj (l&LC"SڍY0_9* 瘚d~KQ "Yddrb5S~$&gq75B|j k+ImDo$:>Jnc#:h$6iG'[jV볯8vbSZ1a]0n3S貓=[719_=#xYj55|?DAOY[[MMZưELʸT%2Z㶒qzh(NRqZIL" ][uK|l_W!݉Rb{_AKݹ`*"XMdF U$<ЊD\q0-/Zy=5\b;7_-'> vY:wBԱaܝ#{ЦpvOlnG#38B-Yd3Ah섅jEhJJ8IwQ(}QMsd2 p8q邤ӃPAtC pjC(q$n6x%$൷$b-'+Qpzx|0몕S?-\kr*izx˹<w_g|]qZS5fZb^f)D$UV뚤Twza;s:,oA NZN/P4Z%N$HۉuYS>\q&')\_4Бr3Vt[o ΌŰ_/|TLNl?Ż|=Tظ*%6m HΞ^ UD׏ P&K6bS:N$#4u1;POᑽ4.db=(.ffh7 03LAA˒LN˒eLu`S;i^=;hZn1;`BCdd/`ց2= ef OA>T3lBEpV+qp{p8ә8KK~rTdXG9u}:L,\3K>o-vm&^G;kgr۸76)~Cnd)ʩw{9C*Ƃ[S8Dyoqy|:mrIr.Η̄hjFSK = 7)a5Կ2dB{z"Fb|,w:1}NxعUױ09JZSƸ=wO^)R`x@y#Mu::Xtټs8ąW9 ZUi+SbbkT+3WJ*ujIS eL-4 "KLi~(1\r%K8](ZIy dv҆MVݼ'd ^;ey[RZ-boK+Mkr>Ϸ>$+@s"{glC}v.эix[|=ڻmDFu.!^ksg>`9l,p`gAl"i7iVu;lA+儻HUnCޮM6٪$!KUSngfJ{pե*zM9Hfٴa=qdP-sSQK.s0ssCbQNW&n^g|eu~ob/.ap8.}JfƂN-GaPc:m\ Rmƕ}Z=Ԅ BnDZ3dR2mI Q%Ɲ^׳u/^ٯ~##%;rRY ܫ\٬2fP[N]ԖspiW I]6Vs*$@5A)+]cQ^-Z~~,SK[׷rdTeͺ$r/qx-׿k!*P*ObRuԸjpIbqcc~‰)u^<xaX=^ sj _ #כ3(qLVR&R8hQWVg9IսJ>߇u4utj<# CKkGwm`jM,J+)'[23Wsp/Hr<kU9םMP1-cTn&6nc= I5r+yJjzh.z 9h-q$؃OW<6Gi6%dlEFCZQ&.Z63\x/@;^W%xY!^5 ud.5=罅oJ'&N=P:5TKJG=W[(~RsbnMSk4 P4$ 6)pDɃsmHdjZe*[B4TE.x+~8W]T9Ŀz+.:7oXW3'.JfY}45 MQqͭoz%:nU.*}9%P:Ok\*zͪq+`Wi*!IјըvU$Y4NAs\]:M1wTf1l)Aw_/ok?W^^8l羆^9ƳN]={y f)|5J?<xEX"jRjQK˅5;kWW.PP%*CTQjK'"axm 3u45 39 ecPR">uU4Q~♴㭋Tl:1t&Y(9Y=bUt^pM+LͧX'&ϥ]àd}b]RJ>:"6H48c_J:DQ$!W怕iʦ [=T%g{56.D 5v,bZ۸(jշDڌMEڜ)).JзxA{8+?r4lOQ?[s0\,FRTƽy2ka>I]Lc;^ D=EQCjK>SHex`xZOdtk<)ؑ4md7e.=ISUs.V si;{6Vצ(2U*)^(Φ[m^WܔdLݳK,N9E) !˶rH\Im]%o]? wz7L[ʢg_L=PÉ Qa<K]j&LijAԒl6&K3Idvnk23+ԌnjQKTE,qx &UITdGR$)x" Dlu N@v{&hJc>z,D 5NjjE܎65m|wG/0>!<=PFvjAځwrmx-'s$vn7xLbxWJ| WAlxWĖ]yu|ZYz ΍FݽעhC,Cۿ@ٽR%ч>G{%'ڍ93ԎD ""HfDtB*dB[jI5]Ev-QY6Ŕ=a 8-%St i %#[,F7A< f1MH0߄` "2 .RlՅF[“PRt3)2!G&1B V"Њ~/> !%`czHJ!i k.Q/4\aixΛq- FR2ejL\Axeԋ9_ BQ.&ͩ`SJhR)2R#uYʅNe+"9~7XKZ)u>J3TJSa $ )TFL쬷&ܤ2brU$)] [8p _Zv,MUISHMm0;~K}xjRJ||/f=vCw?v81@ڻѷy f2}0{َݏct'FW?;1:ؿ c1`8vw,1yrfK5&QlEm|+q!rO\Gmi#1=e& mqORbҷ0]Ip-sىiȲ41 |CGv1Tۃ[8S3wQfp7NOniGޅ210߻. z+B5ѝ .]MdFݶI n$޲ʃl}؈V%_I|V ػO.mhc8|A{qwMjFډ>=}fgszR,73&xG}~L%6N6paNO 94I15]H-;'%Vkz)URx,uR<>D,Mg`Vm?@RbwT#P~+N7!d')#BvX$3vX\6>}=d $;l튤Ґ#MZ^|yjSo-\t5]=f@(T_>p-oueۃ{<(}+m&vjjfv;!YT$sNi 38BMZXbS"$-%E5]UN!,5rx#ؖS=6nueu`-.zex|ތ<`rV,#g-˙޵E"л^ mWQ|]wLOm 15d` cT q9eUˍiȮ9P0%HSWI12!ɘJ&ɜcɠѢuCv2jN2H p%Y+;DAq*>.Ɠy$fXЯ) #SakOgjrwoE _/Xr˚?18XN?mx쓏ko)) MEegTG֣aL]VVgBf~bDfj Q!-;P:ٔO@ۆrƇjI<"L `=S!B솽raƳϡ{n@t\|cק1MW*j-ja3|5O}\5SD@SLu D&YC rI ޅ;*o ޲E] N.]_:^S;.I4/^Cvмd9B@bK4F= R[KHW%cj܊pNZ[V)Xj pr Bi9iO;ZpxvV#Mj:6ŢFp:yIa:;+$WFZ)W5g=_܊ִVWi/׫Z˭7nˑf>qYss9 ܔ*=٫ `ϮY sq]'^A,{-צT^%jMjYzE t*3DQ0ߜpfi5bzܪm(ԙ "IV46QIf]»hoޱ{8ll/Rڅ Tu>k!H s.>34E\ݢ#^^9\p{k}8]sD]O 1٫#^5be1HQ6KZPKNt |Zu $_}fN5m'&)*2 ;t2#{n7'n2u~!|)^"DBx-זN\ҘuT[%rhSUryx]NxHYu]Ke <ӯcc_O*;8\_NL`Ǯp39|Y `/EuURو#KEUZ㜷,^? 9%5Mt U )?Yy>Z +|Gq!DkB*ws(j>6`IDATs]=(<{{ųOkSI\UnO{hNo^g5kMee/店ʸ\.N>lN>c^x}<{yHW5>Y햤 ;< ͦ'Bo!PBT*t(U" AD^DTE @JB &Kzr޻s̝{=s{ TLȲq=&Qw&f=.2ORLgq<?&"H_]]︘h6\M }ܧ/m:}~U"q1%D&65q(Rry&'q?Fd5TDž%1!7wW1Aaz=[;;wNg:w4{6oאOjy BmjtS'jV2l,#x-2r[ \`h2]kqxmQ]WjWCo.Xٶ^MWyN(jgWT rLꙭ2}=Vƻxa.,SZl}=mz}XuhSb6Fj U*ji]3`F}j(݄TnZss29xeb6 M|x eȋKlafnд9 6t\T"[`smЭ9Nmm18x-6Y^[1c˺LF[7+L$;9|PNR!g)|.ÏxOd(KERi(Ri<9 .6Դe 111$%&0=C1a5GD!? *"< &caB#8(ݹHxx]@x(p $<āݳ! 62[#ڵs 4+k=1GvoG)))5 *NSơR%S'N@x~;ب(ߌ#q˿DOB"d2OH5j?zT.5sg{XGNs8mB_ v3;W.E[?pqvڶ_khM#ݻ|"9?.Cz"}Oz :h5(:Ÿ-׼+|٥%k+`\:JT勱AT& ۔yWFcS:.k5 )i8xF#CጓEAx\'rwZ{ۜ_;JBaHQjkej*II@BB|)IFD {tEJᏂ@rrAڲc5e'{B['\,XViRyWIHxxGGEe7WBRb" ,$X[{w=p yTf uEr BhV5<<}+,>p/ix{G4<w$^|w:j{Η3Ǐ w8>.rlnpoFw_aφ5ޝ[lVQ0_<#9U3?c :2K22gBh !4Gti}:B@;"1|Кhϻ%2, >C_wnZͅǸ}4Ν‰`:1û!9cGppF nO!tv]al\v^αV2m fp䏭>B4}s$f~ KI2}"‚њճhl(~fxN$%&hHeߌ JϙNJr[pvgqD##;6 {/'F'`n,zKp:JE*5@Sx O:<~B\t4uNtd{6]n8*L՚!<,jj,)ᡡxTgψxF*HNJ`ܫV'UIX(*T* LT*"(U&!̓0T8 .:"iqϞ\H94oJƈ2ZҽULiˆXjt6S,uS_Gxz>|~n\cIwo.=s ~åݶ ˎk:n_g,\o1wxVà|)|z~Ȟ_@B|yrRiV ީ\P$jWfe Kc/?Z7gm*[]gʢ)[2vgT^3d8bhz}<0wWtћ:MXiO-X5w&uV֬[:hަ{ͧ%JȞ k)J]8c 66ړDn=v8ߩ=~ұw]. 䖿"8(k飁ys$%qlN:JL}iյ7wn+++F' ;N&-ʙSxk._ݳ&\By;8-J+3R΅xWG[l B8:".: ;{{y=$>KJ.Er2d١HI kkT*:ƴTtz*~[h=^uL2άY\G1X;bcS#Crtʩ+c൥@o]w#rOd>=n82ۉgX@ Z4C6җV^73 ~Lsva)@2~nn89 C:.un)xUp7W̝s"܄YBc(^^z| wӰ`&R7R*D?kj|wnulrCЭauӫq->iל[7h-Ԃ K|gmYSWnMMUv,>naɔq$&>Og1:w_FviCfu}{<t'k۔l%!>}T?t#K8qaզkM@tUkûڏfJDRlyZK+Yeӿfa̱CtBhq7s(mO֎_1{Lu߼.#_<`%QRe?CUIJJWjb(B@ 9e4{ٳ ܋[r/]';s=꺓0$M*cDƙ\tl/flKbq-C7nb{ෟ~ 8([W,PaNnb^ РEKx)32)C+[j_42B=3Vo֖ uc{v1?}5 09fYs3|Ur;6MIUU*ڌk:pܿhf1sxa6)\R[Xuwf#PnwsY;UHLH>ӽzB=9) B 佴'%%Y{1IU*l.QniokgOW흜H|Lc%%QصXԤMn^eV,E\sH˼"4ۀ)%%Yc!a/uVUM[Т}g3p)F jXOwV>^Eݺb\;OɲY`qi+cf.`LZu͙#qgmlӄ'g4B_IlHJ~$.]s@Rg @/\ԕERDs]PQfu#GVj550MDFpxV\Jк[/;V;@n݀gM>%[Eeۅ$rb"(]"0z Q>k} {m@SrUjy7e[ÞCh9C=S*VUF.tKsN?ܱ TL4 rbl,vâ33&S -;wo*1}6c{wbךȭڛ8qa_ '䶿n%wL\2w/o9KٳvjWTh{Cih=镱uqSLf@?mźlט|mkԨ׈!T'sC'M9QӋw´YWsjy{:)Jϴɾv_{K}Akn2l[I:=nIxma]_ẹ%Vr9Vrk#69-cyMs,[ֽ eݫ⪋[ txTQŊGU)WZt_.4k13Asaj4hiP3[k7nF2=i{ Evtς/[\[}p_n*7[{NS{ [ _-:WZ}ʎqq:t؇.dk9uO_88lq Z1 ks|2~ %˕צ2ghғ< ͈s)RMoC]2܋#sL@uP˝^`|me4CO&`gա^26ý WzWLroSrR䖡5܃bpO 3LGQ^#>l{UcZ 6Ey{{uTO4V'Wx^TMsl%]|EJ(ᵉJJ &`t mLmfFdV&dLT7B/v%PbTׇ "?SItlߧ7'כ!"6~g읜tFc|6\`lzٲ=6^>b>bJ=W)9_gggddu9{q)fb& %~ZTR6m;88P7/͓( ZF!t,⣃g?:듪4O'a8SDE6mswww"_wUSx tܬDfQ?f|>j *Dk %&Iϟe9G}Μ.,ZC?3eKK/ee+%@ kUӢAg͝G=ɾ &K&x}$QBONﲋ^N QKk %~ ^ޭVv&3%>>^-7 r1AHͪ@/Il/I䣇 w%+uIc-z̤&fAER Nл{7(4˖SQSjo^KxmyM?aqttԹ  H]@p=K,EHyե(o5jHŊ~7oJ5 5kj0xƼFxf7xa:npYȠ ԪNݥOIp.$H"$H"$'V#DI$DI$DpDI$DI$DI$]I$DI$DI ?w`IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter1.png000066400000000000000000004623721247673406200251660ustar00rootroot00000000000000PNG  IHDR8sFsRGB pHYs   IDATxw|E?޽%=! $ޑR)UX**])"*B5~2z}t1%|bT]O<|W^'A&敓c|[DLp0ogcŲe l.S[6HB"RPL H3($@E @>.ӝh')_Ql,zk%"Щq}靄x~vً;ws߽xlIԯPG7n@$@VvꗉHv, ,J;: NBX;MbBuܸȊUM5)&9sT|ݳP nJz'/"ѳ 6 ˛Ad/ `^ g~D+`@0|s@;ڤu{K(q9IB7mұpEs}'SOuҳVs1͡C]tB8 Hmvȉ8NRpĈޱm;t4ƍy Y) XXuß8P#;7CxQ S35ˀ-= [Pa*())`5`XEeQ)ؠeTEJB$]0P K`G s~N{(c CՂ Uj( :>!! EPP0CChվ#i?"-<ŴI1y] {F=A)ű*q!\|a0g МCDI/R!0[e?$Qx}|/Du˰˗,{T2S\&ǡt&Rq3x=@”WZA*u(_vedx ]KVX^)K| (ʊ ob5:D)*_ńCI{mTϊLo/.!&?H9ל g&k ªDQd"aEJYYɁ#/|8"8rr&LD޽[ON@ߖ LJ39B]@!dA͆pBDRe+ /[~o~>yyliJ;A(Ӎ3,sʿ]G0A"8`  Y@yY p#]e(bˡ} a#@B@8 D "oNe] /> Pp"kLM"ݮlh^0Z0X/ P$f00hTG7laߢ +cK~Q<]1Pt!RE*)=)0- H(NK?!m`ͼ麅_W;''Rܽuii mp:E8Nl3L[]-kBٻRڦ>yy 2{ՙ N=bha撂G#rn*8u?gR`x'/{9=Z?"a jS߫R_p8ѦkOۺAPH(1?IiܧJ~[9`m}yf4PH_Lϡ`Σ&T'. ly`楅cY0׮dWý1/?8B}]l&  fl15Q(ۨu:3j~ΛG*cғbq*UbO)U,IIIHs5hלS|YDEGcωS*<Ql9wb#q6)II([^TiGNddfa(O>raeΝ|y L$=;T @hB_deP:q69?n65+,f"'$"/ߡo&bS:KlɲTH)N'I܄-D^Xgi c]J:$vmߎ:\@fFB ˼1^ă#ČNDT鲒XM Q@t88q<YHILV1onjnyhQH"nReJc#EBn]u:XVNjeЀG>hJ(3%#gv?X2iC"dvOAbš *YAdXʘ1gffXTƍ QTzٞ䋲u F KLd-Թ.Djo;tܜ4;nfɓi$cUGcF0- ժ[+u㶁ov7YM A!4˿о5zl~n]^p bqC_/#xES_0'8$r41r20βkX|(sPL3,S@(ŭsS<0bp:N'gANKEnf3tB$!A) UP?x(HH5k>[P#b|jDJ1g*I+W}epwUT7B΍Kpl64wHx?zԭhƩIw2Q/R~ĻC_4~x@$~K AL$ǯ'懳[M㝍c?'8E:Bwr.vN1SsǹS'|Kc=Bf)0q"L5R|RT{Lryg,] S$?RSyrIr /]qW."++Kљ <9THOMEX;J䟽 O {nƗL7T5WA[,_вKwp~mL1cqtNĔ)м3n6>U"&4-  EvFB#!$$#lƃSB պk/z.r hީG)n'$hLE-_ Ldzi^nͱK츻H&ϜK2$8/S&9BLcGRmǎ:dHOOð1& 8|:o>USՏ9B)Vbأ+;IcYb%u*JqW\UǶmh۸!~gb/s > lP+*W0jZ?3Xt𤦤K3dܾB*\,"Μ8#qhW&Zլl0e4))8-,ˌN [xo݀ye)dbi+ 5%̱MWőWȀ]z0(u][̣ tH8vH#uO?gGҗ)BZx5suw/|U ȇyKt{/˖.u'{"1[NȘ:o?F6g23irJ?m6fh;uLK~ҒtGNZ*23GC DՎ^NT' ˕.R A$>%3(9SdnoQNfP.e+?+Pe*Iqu#{ު ܽ.̝޼cΊH 5\y7xސF?H}gg2Y bf;X)uf@@- "2.X z6{8ᭀ`mťٟ//0&<`\InBn YԖwaSa CzuŗzjGx.qfp=S9=Uv^39ZOSҀb-/{-΁ Lߗ ݻ򷐟 B(ظUe'Ōe!s$x~Hy+V|9fQ xo!,,yr@d43 E^vTVN8rNIA^N6Y^'W~Lٞ" j2 (i_}˷W3cG3#Hii8DXqQ%/ DYTl(Q(QBD ] bJtE!Rg!9:̟x$#I^dipһ_/߬~o|db$@o^rMlo1%XQI H8s 3Iu"\QH֜$݂έFFb8qpXp*N܋Sѵfi ,iN"ϞAfVD kDJq?.u]~H9ޝXhSZq?s4lSڣ?r,Mz>.}L|9fgacxmdeVhIdo7{ڵ|.~oOۧv񦩖0z T#ø~#m$>iDf\2`n!b:Q!sxLD33-WGH^~>$@ٳcYY U琟#ѺK;S$(Lzޝ;й{|wj;/cо~8ys*D!;cFcp5?sV' ?\@C2rP:<^z a - KZ:rrP9";mCb!8s$ۣ޽sGgL)([Rޟ1"M[p3#_| ә } ŋݟ!'ϛFZb Z~'+zoدIG<|PSoȾ<{eU_5jW-I!HQQpBp8!:ppd>XkX$ƚ8Bxe7Pv)Ѵ[􇍅E,_`C66lEKwPp+,+8[xV SGYK1ِnuv(66;1lAZ"-w:n6r?mtC=˜<v);u!) aQ lĎ|Qr(A/QY֟Ћ)(JK?԰ea÷klcMN59EOu'ٞ~n4)-m[NnQn`5L壤@)~(d8`. Btee!?7N+sni)j {Ou'ݫSP)źRoʒ 1M&6 ,L~'6_uUxK,I-:v1K!E(n :A&^jE,SSs8)(-&6LMb tiTǻXƐT1Ԭ(aqFl>x "n޸ BIsE]B%T|$#;'1r &}BhP"O֨I^AVf6ƿƌKHՠ>*23@7oܢk$MW##$chdGߢ=ر{WK=3bέApbs>/m 35ly99T(]e*U+2#,y.ʂ@hD\߻SO]zsxt9P ɷڨ-g,yf%OBvl`E"TUt\EiK|E3gN:H:yYEwus+Bc  6LE㐐ŋ{AU'ѰaC֭[.\ fM6EBBB RRoN>,iPtRE[hÆ x[By6\(^=iƱTwSo'MߨC4Ya#5 b۾};ʧM\g8Y/`6iE|7nT_DΟ5#@=ptkFSD" ྽xO5A ƼUk!~@4^]}O %mRF Ѹz5n w1X'F0)xWtl7lΟ9&MD.p!9xv+2qE~JǛY "![ʕ|UGHˣr(<۹AHEXWvE*=iu&|_ՊvL$H)g{B|oZM9/Z* F&Mm> FlRQ6תűn |8{.:uO{ AEP=r~8pxOw=q o5 7t"ǷnW_9T̽#:~V9J`0o!s({{\/0|/d$"‘kT%Ii_!Wx1x8PNE9N]̻Z$+ 0ֈhuqNn݀abA#Nv QUj{?k𙙙UʐD۹m:tdET"L('= >c ̀IS@ ۤxkLٛ"8eoR&{0"N5ۙcan6wOrok@f]V wȗaɪosQ2 W=yM/fIEJ54id$*Y 7e6, ؊` IDAT:do*a-}xq,QcR26!!" eoC)X`ԃ-y|iך9kT0x?6f|mxʢU ))"J*[^!R̛(x/^DNvG fM<o춡&$t] ݵƪV 5" Ʊ$Aے9uִRY,b6o )ݭ4bC IaQFg`ϝ >4OqR^걄GP NE޵ĘoDx%K"_)GRܛxޚhReaBN|=m;tʽSRRPX qo)tL8{9&'mj"]fB)n\w`_EͪGS -' B^91j``9?}<")W6,uJ) KQct_|wGbDPQDP"Ffd}Vg\'ρ8pd¥JʭD۽):~"hS<]I0!dD⮇l^VCzj*ݒ;iJHIeH !ٙ_T)deJffB 9{ fwÄ YX˨oJ.z{EA4gN].'dK1eocOSWRP"OBKtǞ ^i,^eoM_p}ޭGK}uăs:8t5q  ~&wPhKTE,;S?^#um gΜ+Wo.{ƒafM EI3 W.GVa1'ri@SeV۰ =z-iE(dwXPN~Z5ԭG(;ߠʌApZ-l=|gM9/$1yq{7a+ЦeM7 %rB n'ӵ3Qjή,blrxgk< `9) rRҕbnV"WaBj~)5),wbGW }roeNV;l؆FڹUK`3mpxa&ڢ'n)SOj a:nߌGz2 KPStܽ [ɊAbLʙC}5G yOOASXl`U>+if{-?"cPv2drxj/# +̬Lӣ 3)؊L6vZ^x^Y:OW+'{r13Gdjw3(ǹzwQUn4V}ɾ{̳] :a,~y ^rtFܡfHH]s|l~un#uPtߕ<{cJI Ы' 2Đ}9aF&֯Yڥb_~H_.K=awQ'6SƍH)&bГQRBmsODŽ'?r$~9&isf&aǟ`Q뱺 G˶%sfLٷ)_5򚎪7Y]#2N fwy|y ']g2?!DŽbμyվ[ =ݒ5gCbfl֭)SY7/#b fOpQ |5Dĭl)ZmU[P0EDRp"P9Gi6Fx9&r;gi!ȡChڼykQ[,Fw{wZ_uAe#Hx޾~Tc<"&Vlɰ6y)q"B+b_NU׫ ND$x/d&LLڠ̤>VASUAwF EŪ0|bxY?f^A<stM"Bpa6[PXfm'$r@ag,/;0 +ͩ}iscEAod<Q0 :89DDxAƪ ?Kx7"!&ʕ w&yɖqp6v\ :s:[Y30y΢BqF钸|7Q%bt髲u5=[M踔ik{Ž";1pܷ{(U.ΞC:8$}ٙ/uBˍ=D"SP#nU(8ȽwursJĪtriڼ^^Yu,j,%0ܿeU0Jd;( XxoBU>=S}Owsr`I"08@ވft.d\*DJ3Y &S[tkN[E0FVbG6c%D:޵x*Rw3bn,K3ud[A̽R to.OWW&Ӷ~=hƋ~{z"4Ӵq'wdytJNJ¥!u^Nyp;p:!D/DNA{N''NNڴE8ЮE >D+3׼m:vAffc 4toL^K4쭚}|n%+3oٳHC'Ψ ( bM'x f]*Rek_(Wi(ui?JD1rq%N4jJcD'Z:qbI4]uEVK.ћ載q<+60s"2x3N=SR$cV%Z3KX,[΢7a)X4{)Cb!<ȣLnw;6. 7?~y$~|LOt*YGd܉cޭxBD|Ip"oܐWj`Μ(!ǃp5 10 $(bpHa  gD,1*^ Kޚ2 =Z>B4DMSE\>eC!RsG-{KͱܿCkU:\Z:_Mx=1ˉ+NOa ]׎L =ԪW3#^ǝ[}eA(P-0o/,Ν<e]eSYOp"dicA@Gb x!Y&+nP`϶8qXBwR ɩ#c¹ pL1XA횺RnހH)^GHL#CkA(ptn|x._y!Ř |U*4fhSMVoW::4`y:dǂͻ1khif:?5NSAcܽs)꒖ϦK<|n3f 5762L?8 oʨI -8-7+ch?=Y^,wԪiƅsX^b@gc}{ٌzy E+T­7Q!vnSSS\C0iH~o|47N,e<0^i=9^@? ڱG@';]$08zJ*}Y8b+-h*\Aɷ *C0G[JƌZRt^E=]Eܽ**?WŤ ɓK2#6ՎW>'%%yٽYf̙3K.~2e Ҝz9:rH*9RJm6n;wNܾ}{ש@y;͛g(5U^]aaaRJϜ9nLgnZUV"H`J)ƍ3|~޷o_Wørss6RsFF\Yfݻ켼<?~`X0x`T#8{^6m0vXgڵ\:>Sϡ^!੖ƭ8ٓxP S  V Q?e-#=lxoTzyK^KEW##Zҁ}>k@i2(c=1x$k:}p`Vj@ Vb+e#VB:s*O`Ͻ{A){v ̔^&pH?Y^/*2Egz{!\YkZ8g6(n"--ݟlW&^1<'Eԉ׎f%-\j}$&XUuݾkpŜÆApm{tn sɘ(7HN^Oŧ>QO|}$^@ORz%X5HަN5S 99FchFhF^Vq8 ^?MjD'Zb_lb2Ds˶@A/?Pjt1kXSHsIwM )xŗQ+*+ap*q \{ qq Ɣcqe̙׬۹릍Ӆxd4>LCܵ ؾgaT#Vze0PΟүW}s6(>&Fzo0x(<;`ǖI8ss ~M?} S \Ϲ}Rˀ Akaxz͝9o?Y%G|ŊHsĽ[=4qV-Ļ} i BOFq9P -@@q:yΜv`2#leLu>;f-^Ǎ 0x((Z(OA60i.q@`Hv OQJU)"/UߢEՊӠ!۾CpAYzsvAq8Jc$|uJ9iPE" frf2p@Toeծ1&2c'mIfR:ސװp׺m;tt2W=OuT~h;:I&_g^.,ALYޙkh8f޿w%bb `zS(p?WmoGY>/mP̞?7=- "#PvF™ss2JUTlN}gnfd6VoQΛ?/IVR#8"휔{a$\r_V*=;K*"4mgE~~>(JYD)/#r/%Ж_S&qJM,n)ݱݱ!wvULl֏첲@"gUX B(xGt/ǛZ1a8O\10WxܻwKAqy2>Adͦ1@)l:Rx<EF1͎j$+MLL\4Vc}rtH^ԌF=ҡnǺf4X"jWowX qahφ:"xQf!}4RIx\LR 2[zbYTrwaN37-L&Z7FG+~, VB ћٰrgnF# %W3`Ս9&e*,\DBt6S&R@x\wBSYr*kT3qwug"_lT=j5uqMKj{3Lq~{m9ٹ  eXq`q @5YNwk)azϜ8aXwQiBa+եӱP^,B8 NHLDxzecӌ (#rrc&jjw7-QS$ޗ"8sƍM;v)wf4Ǚp,SJijɳ}3e`XpYAñ18S!T7zKn Hq }\~g1?%ey'jQ!#foU+S!Rߣ!o(˗H"Hi$'.,*JɁ3?E/"$.@T;s%-)vݹaanb*KL0Ӳ8zz MB)x3TD=&3´i~;:P>˨\ 5}uka!p)rYB%E<59_2TTIz0j^ḣE0MK4? !XH sЩE3r vҕ= !1Uҡ=(C@`~-8Oq=oQO dSa_^R"͊~+/a5zPU(%tv#lb(cEbeֆMAU A0W/yܗxp󣌈,{WnݎtPvܳcW+A)Um@ܾu<۾ňlP=Q\Xb^ y#ㆾ+Ta Lyܓ*ϸ/r&QboDA(U,>5[HHXxsDUdGlj:{f᧽6ZmFYs0zطs;6n-K)՟/q-|,{,J:y'X9:鹺sgNcm2̥cؿk f r~&ȄMy]p &Hz94hDrA``Wa`UfVؽ'J+X9;K!rhq_K) F8x,TU?} "*QCGEtL,s΋iA# [aR;EO6kf>?ǐ7ǠM#'%dnQT.njd{dgen+&qZQR{z#W=XH&A 䥧驩x#?yVU&EPuT>Aq N'jHTUUd)o[@yN)kKMK$d׼|d<|.EfhxstxpN';d +F4։Yf" IDATu1Qz@jOvv|`9A'~jLrsPH0ΌAfș%,L1TAR%?jZɛ4mWŶM,Xqy ݼ~?}IZ8Y4 sqiTGykxygJrgx8#X4SσucUTGF[xPQ,Zo{Pso"[_bs^s)zy?,vYĨ9ak[!l6^<βS@)r<. ,ƚvӬϣk1~kq-,XqYL:PW$ku&-4-1Qّc*k.q)?yz+vBuA)b>5&R#C od>[Q1|&r8g%,N^kΛ5F*^Plj\'SiXƌ9gQ/>;_b٭UUMD13cڍN"|gq XF(E#"* b# )a sE[gQ- Ѥ]GW^@X6c2,EJ(PqSWīHG217)F%[⽥tWϝg*F`Xܼt29 ū@0឴B=Q@Z}ݡHp#?ܜl3G87_{lW3&cGatU8(nݸfr<)?– "Q۬LISSx(8AyP|WK.Yi_j8}f/E*5` u@(œG1gqq|kDŽ3)AtXp8$ f-p9óc{W9:yݠ# -)uͿ6Gu?G#D勢[%5KsU$"d)ə$WV* y|\^bE^@`n?}(.Mۥ bxFi?yh4BVf&>ykz)K{z=] Ds $'^"*ToQ?_)C k>=qvO̠؟{ H>cIvoـLKExd?vlwU[.GmO5+W >ft.?jWo3U|) _,y`Є)򸷫u%JP?r(q ..>G+jT͚߻]3h \׺ל@^QǾ8iĉ _U \= "4>T❳Y. .kzY_Y㽜GY}|4s&F?£?i/^?}KyGb!:`v ߃rZ_avϒrTd eʗ˗1c^ԬaCJnҨW^+K>Ȩƕ*WQťC11X=\X2'v쌁FR/)鄆+;Y9p:|xd߱P3O3(%b5GxLd {M `Ӂe\XqI*=}:`)?ӧq++rm _0q%֗CEy {k;nahݡnK5kb1pQ S0K{|.¨rվj4$+BC19$dG0͌lusN'Q?7P~q~yuu4p8`}?ʔ-bu%n,SVWE͛pf̻#"=Ͼ̾bJtׯpNe6*[EG@T fZrGu}z&EdR9܋C ЮQ}9~, 9UM2` u1 !YC^.ojrE)H]WDJ~NPB "(b}ٕ9& aRJ67gw_xĔ`X+/ЮCGܻ۶CXztɕz4(NUX˅% P8r*!?|NKc9UF4GPA4 Ny>~ _,Za*KR5I%Q0}[>x@ p/uWkPB|6(SKX;'.[ty!.=Uk1Gj}qA-!)4f)s|n6,!j[zxm4]g~g6K9JFHA $(TD$HTArFr^vټ3u{{n݇tuuSU'@>/6yD'h±";9W)HDK[E<hlZDˠs8X7ՈV!ʎӿy6)YU.L>’ A r\!CNCȴF$t&97}><Ϧ 8~%Ӱ>hE(; 9fޓǎVz? j(鄡 e7ْCj_ܨ_^8e`#01pT=,59od4Lyo"n/xIKk8vL7OP6/ը7 @)р)'J60A'voߎuY(W[oxo E6c=z`E& y\.swl|<~޺G2UV-ߏU3 F(covw ,eV2)),q'#.fCX^4"RJyΑ-{=;cH-y@0.}L<iArQEP_6CH&)r 1 LӘ!w>CʹիW0s"SŤrꬩnkZ>8ћ< ӿ\ҀT>/|麚.J}" j;x +}p$^]GW%bpu1mҝa ,l`/X(8sO (rsьĐZpU$"&\.ukjz<ұ3WU固J:8)i3q1TGh-_(=k.F+R]t`7DDTT- ЪCgH0wP\yb@']Gk'" - jHm03 ۝$ΛV&rҘQ=h}$hy0*DאN%Ȕ?z{tl3;pXlL@ǻC0G v>gb͜C{} e߂\^? K3v94haU `#>O^[N 8?q&bFhtE`Cxi F x.BŃ9}TeAqP==hS`+,Y0Ͻj7"Ф0̨ݤ.%xKS#A$PYwð5=׮IMf$+fN+Dž7}x x12[xg {7$#5o]"ήc={sޖp:Дhn^<ԪWfwPvo "BcC: r^yF&Иu}_o!.r< Oxf:(= JMoI7KxpzPeԴTڷ $`{=ZHd$_]<~O6yHPXF~Y,4ФEcTwW)hZ[zhE[xнɒ󐞖|g!B0**8DnӖX]puس z&] 1pS8be˃xC 0k |aƠGû#RLYCr㹛|e洕Pza%g؄T:nV))hhG{mE=5ޚTwՆd/T s H16 cxA_,Dy0wx[M+r&XHT]L”dhĉÇ+w^Jf̕ӞhR<7b2->[ՍmPA]8fԔێ1VcN##ZQIk"AvزStYsV,Cjj=~_T1: Cx%IH}gވϛIq%SSl8{~{>~})h޿'შ[4jGBS87թޭCp޷z.q`vLxq8k.bcw?yd,6YG?uB8sT?Y;yLҳpf˦t _ ;v7˃۷0g'8>vUj kpGFbӯQ}(P0~_%U@*ձozdD4j{lS'Xp~:| 7\bmGl|oxQ< 8s+mDŽgRj^h*{6i:fOf&"oF~)L_c_ =!۴[:RSáw/+ѷe#t4jVJƢE?yk~Ϙûw. RZNHe+WN1']x=0pęCM"[ct?޻~ "~>8ϘwT46B ki,>Ϗ䐶bLt+gPd];[ϼ6o?$2Ӑ;_~$\*Sϡc1Qr5<1%t0mTILΓ(IV Q,lYwYSʝ$hg4hk??/YQ/3v"/f,BhݴuIȻ1H+֦ո IDATqVyύԿ>ș>} տFF!fVM&}`bb@M2bmv MȤЋ}mE֭r7rLr 0{Ni9bLNi9-I&崜rZm̙6l?|9^yԪU ĉ98p .^hmCQ15kD1iҤ_nrOPLLKRtt4… өSkE3gV… t҆JOO? )R8ONJ""4RPreGsgٳuж+V"Ծ}{6mըQ#-ZcǎΝ;2227[ӲcEFFTu9%J\rd#FW^ի={ 4h &&&c=ظq׮] YoСCq@ڵqE|'ׯUeASX'Oč7tܸqׯ!++ UV5À2ue˖F͑sZNs&n:H:@W~רB :)1hՖΝ;d:ؒ,YB1ߕ+WJk֬+Ν$I+ڎUmes9 ?rereBƍaÆwԩSU-nH4m[/j9{Ni9-kn7L<F{wl~oCJ7FYdJFI7fZ^p x>(R<!W.-^_IW2#t5KE;4ݷ))tdwMƄc,thݹoݘmPx}]n@'BZU7oIIIIFEk7r;@VMFP98Q/?ϓt9{:sYamw[o fasn!W\9١m}7|0M9ut6[P6k]Ӕ\g\ykA?}lm\B6xh仺95+T@-&̑tmպE|yh<q( koG'ݑ|t!yOǼ"j<&@~1y"UV.$?_eA=#G'GwMyZU^{ݻvV|/ oU<#!gy<^ ۞FU*!3#gpK7磆 t--d_7n\=Pp cG /5lߑJ/ 7ÿ.[E[o1cܼ~T'}N)S0~7AIaW*>v "p!xE{v쐊_ cFc׶m֦jf⫩&z {wȡAlٰlwbڇT~{' F|#`U0ΜVܾ}.]BBR2Y3@|xCG,_{ÏG֭U[vm߆~ݺٳȔ4"`NS|K'v=} V6,к^-'VՉ+6E =D@xW)(js0] p3 ++?+WQ QS.]@`peJ[J.W[7n°KQ']E\z/]գ]hlaďiz,;nwZd Qz˗ 6.HdL@͛ث;?EбICaBEмVݡڻ ț 3r#wrhP9lߩս=qR_|\MKI咧N3gGX\@<[ WN2$"KNݻ1t.?{``^y,f|2[3ysгس}[ '{S|p<1o.`pӠ:۸^Ϝ8U̾GQW{p= 7]))[#ԩ>wЮ@'|P2.(R>3Oe#^At3]^=0k)[ ]TP2epobxvpW65%Uw?' **LLKKѠ|)nl=q_{T-0!G%-QBIOWPvd,%cj}'+s?abyo$Zк]{nD@˶@9&I6UQ: '8I_ݟW~'߁|$8U٤Ek}: BTl bb "~7]0uB8KGpfa^c m ~3#wG Ǩrĥ%#\ܹnGSBopomެ,e[yVj òߺE}pE8>}ipmw ڕ+H ; >#5qqTpPL;B0q?ZEˈ+Z´7?XZwH.rn4ʽ$* )}+:V?aHw)wŘ_kL!#51&cwKa]28cΞB 1".kd240(A6p !Р JIF (5҂AKC4}>nŘ͔FpIo-D/XD<<V!B;v[n,蜘OFR ^$d`?~tM`P"s.2ѸoHOv͛a=Ӄ5 ρ jƘLG?oF:<GI~ʻ*4y<.wX,)w_TX,!"ұ̀+:aHt8Vn˗v#W\#헫 _@ dF: bcILQ E0k3%=11 Q\1qAaLiK_|;6wMAnZ $oNr"6pB کT>ӆ=;xWٱ+cNMFgWNM1۔>ilOdh[uj::|b n4&LisK:[ 7Ц4VcWNJ*7\۷s!ȒӍOpir 9jLmAs-6A hȐuOtq3̉0Q̭#铋Hr#Om݁@Fe?}pY)_`9\BC)un}4Ͽ2j*8&}>[t6m Ă_[}&V(d`mAl"cHĕ+v0qSqp aŕs#yqُȀVBe>e0*ԩPD@fXqN]E\y<r3&/B;&r~1?q f}8v5asrŐsަ}z씾o}R8u&(~k4\Ê+',:ΉHyNA}k {zV8t n'F㇚'ȹio& LZڵg"s۳ok~6#XH hA2jM4LG D#YYJP!%4'F6pȎP'HՌ-d:P6o夼<U.rp.JIuq.X# #y?MH;`s*戴U,9S!LrJd3Ҥ3]1!2= P ߶i{[6m̘/ IHFEdga,feIšշ^4!LK WQTQl=|\\UFIv8bLS^i;`.WK,*YPS\}O+>L@D5@ݞ$XJ7+/rVfNg^p8`aBH}/ffSM"Ɇ:uOp=[ypLu9T5&k\Y䏠!H`zƩ$9#(JhU4%=^_Lh>Wuʬ$%&r%i)V `DQPu)  VY* U=)Ɉ-^Nʉ`Yu> 3۰9HcYh6Eb^}4˅ܹh9~Ϛ; $ܸqOo5c+tƞWQ`nl*^\ah"`1We9pkĹ|Pb1iVBö+VxIb]UePUq',Ussdb # ߎ<"mʃNV 1Sgb_TxEeǗ{aϫPj5HLUrrAMHUK7mCѻԶBr\kDvH.ihUF4;ڳCbI} !=5͖ h^U0< L5k}dti:q'r3Ii z`_&\AVrDgG6@Wl\hҬ9lz{'5X\a`Ev &KvlnNlU;!_ֈts[}bR'˓,DÇQ)o.۵֓gQJ )\n?;p Ð=}F 0 ;)ϴc+^lAS6,L謵w^A/'Ob_hӰ^< *&'n"†` AN .}^طVHkA}'fHg UrG8 SenC2Enbh,I 4"1kWQlt ;MW\Rg'kTmCamػ}voۊ(dj0@jqv9Akp ?1ዙ$ ?";pdL9>qPKOvl?䊋$L(ܸ~ _Ǎkp5$'%c]Юȝ7/ycfۊB n:%2*3-WK#w|3 FZ(4`&JKq;1i*̀w%]ݹׇ j֩OC ]q&ƹ6%HǃOȟbݪش@f{P<мehj=:d͌X"d-T$Ir5.f@X5LB8T/_J")d-W\ePN=ԨS}_MOGDLFn6wT>M۴C;h[6,]!rͤq<g2EeKkd"$d@>(Ź(9!gHSNqggeH9{!fZ*Y8\ҵ<m9y?TmOqCk3MւNVE?da8auR|. >s009[vKoM\Dƕs/LxLZšLd*Vu*_ KL " =eţ*^I>.o"vRW`hE%oX:*T=T_,ChNIcF فR9AP rlj;؁J1QͲcXTAjz4" Aie+ϕ;76"‹}zIg90?Y@id5#k]Y;`y ;h'dlFShuklaIJ KĘIRǦO!h/G=x мr|i )rŗx:[t+3(#^/ ?3ɖC5o~Ib/Xnrt<! 0 .a=h7>O>}IYƎ(ER඗P k֑3іnrcRA3BxjY0&ӔyjWƄ}GSSm9ʹ:FCi%s囥2Lsg`:)mSܑشW̟)q}Դ =Sm8vlҜ#=egsx-l@$ ][M"ݎ#XsL17X6koȟ1GѮ[O!fL,AMe8cmZedofhܪ 14ϴi:Sx90.peDGa'vnٌ7ޛ ᧅ мm[dyB,l:/njƭڀЫy#{4r嶟M } 9&s1]6jNLƍUFl8T$`Ns9ii]UƳt.T 8{DGI\: Y]0n?!$;#TGbB2epNaVW/8@kPg5/l?%KysFݤ+s.i J\B RYޛ'NN %}kv!5kcSj ~ߡcG#-9Vʼn 0j!,Wܽ 7Q1aEF:4ȾO!C@Rz; 0qO Rcs2t"0Z&)14o}K]dI8Nz|E@ O#Y]Pƽ3:yO5>Maz~bပ+}?m-QAC>2 IDATZV4?p A`,ra{_ď{5 :,72؆s,c{h͙5fks`O{c xM DFE.K=Yad{Żf{rD3T)_&mڇEukWgвTLzu($޶X4MJV!eM?g&s!ZΞAzay ѱ{e{*Fl!3'BJ=״g?ÞCyR׶Xh.22-p%{jlZ0RPpI4V/DJ1fg 'ɜC6s8}+OC^ sEɒ5Xv/m\3ݗ{ˣcfHNJ\gCmHkN!C4^kڎz&m.|[YF},^ #fkjJ2V/+PiK4j<chg7'FHAD#^s#^T:Nz6C&OQ3mG$U /?uƁvWΝ;ptNݻNc jAzP^TQEiD[wށM;/e+݃ Ge0ꕓ8Vre 6E;_u7FĢa> as=،6mp>#"PnC+T p-Xy  2ٯnq:|u$4݉. 'HϐĦ#5UB󹓘Dnݸ\8{wHJ HsMA3}"\zfz}98oOsfpy,8`߶زn5V/"` d U?h_ "`+CQOw@ /DHy|Y]t0قrUk`ܜ׬5Vϟ "c1AߍY;=?y?_M~Ÿ[5?eղ=dg1^=18K}GDdz6Dcߎm s?d\<`u'UCu1yBm2X pAp6Nq/~M*q/HNJHKwmWZo{mQwp^J%=/_"^ɴx}z<9QT*3Q_Kc֊Djx-"ں|Dⓟ7`_IXv&&,Z>L@/=Q(]:r(ܷ|YY8# zVZ#CuW/$ #@p\pGD8D!v,Rx};T})>+9ߛ8 9SGRaB{:ʵڽ_}`5pfA׻ӷG T2آ3we^Li Say(U"ԩh-ػӰS`0ihq@:;t"degsb+}sle%n@ q%_'!}dtQD0utYiixV9p. C thԔܹ}0Cs[1Mlġ}("ȧBjg+³QIhҦ=n߼+σx^ؿm3^>O*%Adptl[7asfоX{ۺ5AsGt})II8/k NmqYU<Aah+B9ϦBa{jƽ?X}8Kcx׶xY}p"l]D@X2 pZʃW`mrvhU:.;Zf{wY8{-w5 ؒC,vj$˓Vpr;mBEТSW jP8wj.=Qqvb-~vB ~w"^/bsu;A CT1qOGwêXR*Q]\=jDwP0{R&6>7>7 N*"BWG>]PFn,.uFs|7mcQFmԺ)f+ 2:Z]@1q|f ~WsoWT>BKCO)k?!wB U"~(^<@ c:DFEK@Ю*/ZY ?qsH˲](^<ۃ[ׯ#|15 CDy7˼>z,%Avm 6ւ`vnEm;ތx <3r\Ӹr6ws+m7ヌN_kjJ2s# YvRnz ;~KZ˱?jءlJsҒno ٳ+mK VsbT̤]|,+"='dBw^NvɆ6k9KDBy0?=z+׮Gc8pyc5PlnV(w}Iī;{Ni9-&LANi9-k)iJE_͙={uhf׷Cp^gs֭n :I\F1M6yjg1j,ڨQxu. F|_'zopZ.vͮ3zևӉ_zz:(XvhwNmt.233| L@DdazP>y~\qqActVxjNk)fO,v yi(:} ^W(/lgWkv 0.'}˖|ƏkWaX8w..]? "NŊHIIEuSXjW"bpGFO@Ҧ~]nS =;$j kHJL?a/k_?p/;ɸ|2b(+TF*q1u~#K% Ïv@>]J+1oLyeoW%&ϓK7Vݻ8ɣGP*hV ժ_yQ}.Z,EE,?D@q ^}W[u]{P ˍO3O QשF.]u-V/.֭[נ!j׿nT%da=w)PtBEMD..^vC"EsU8=Zc´* ."Aї_rؼan=haؼQg׋H;"EJDΏ;#=-׮^EU-F{Bf|=z7^z yoT:>jtB<޳'UMDVV:jM1uX\HIG߻nkoOʝ %LiE_Jس};O17>su?m:_;y}5d };=+֨c=l0h "fXjcxtp!ZwW ʛox kQH;VU >{NBيi))% 'ھ/?e6dffbSѶ(Ql0m $/7iN<5󙓹[#Ě`˯s>XYf״47pl/0qYo^E8X@؞N6uk֠u۶z?BP,ԄȕPX~[7S.z<+7-\sU?]Š\P#GPzuېp\$\%J_dpVExrnRۘa@ꅳ+Uʜsڹ-si-6-9 Nϡ,XM_Jz23iqjtHGdL]apctD Ȓ+Lg"|,xp$PWPq W.`񒪉DyqDYL|J 7n_l}U+c#`W0neIp$A&J&\s(K2"/ &` ޑ `u73SL|&ä\A vO`:*|r|;k(NIJR 5o`L]LA>T"δxZ,'ЮHINƹ4[Ry8I,nЮc5{ oSUe SHЫwؘ.?έZLGQ^|^ K!+5xD/wEt_uǩ=:ظxÅa,ʩLp&1E7n&b̯Y.F1 .A"+lj9sCBP۪O!o|J=3&hG31e\*Lo 'sIsb>@kטSA}^͂4TpD-mB"'ʝ (V'*UMu,r`XjUF<{m:v=}GV ~6l o[fE[ ظ\60\:` sܸ~-ZDD$vmj]YLa6n ;:M#to'A9e?Y9e#k{E+i}wVvF.޾ u4B:lKc5Fn\nCg jks7Z-5'bpN7ӧN#ܝTDFE٪qM 03;Q5 x5=z}[5 aՒÚq Ȳf>ඬnH)Gh9A>n7Gf^2[T)0g@*=n,C:bƴx<|;lݴeʗ-"~Se+Fj֭LRy9.`:]Akr\BȘ5"6fXQضi_8CE$'gvX|%]SBگp"!p\gxJթZtG&rTVNaU|" 6. PؑQEl55eQת-"t{y%SΜ>=0bd'*E)$G(9V!d)|>dܼ d˭[6Kp.}/HWT#z/="T+)Ly])KΔoeDA?i̤viP2&@T\$xe%߁18R㗮sDO#q*vcƘdPv]ؼ jQ%4  |f7`A׳x [kq?sۑܕuyaʟ~(%eϥ${ؙg%N28p"m؈ * r.;_ (EhT`$Fz/37'5jA4U C*s*^/;Z $逆xi\t;yg L򳧻<9K~ڿ/>-ʥ/#X230Sap'S!Ovwk4zX|9(l#HvEK{ tʲ2 kK*\;S奝N`GI`4QQzE:_.q;* p7\MvaM"cxUhQa׀c;/ ,k6W sYvYZ; ~/XK'/Y#fy~m8}cW%f%$09GHdDͿosvBʖ Gٙ  8"3pψ(AmLyJllwsׄ)mdloŽ^ǓqpGD0lv$$rҙa`sUBǜ++L'*Z!;]}Yj)0_МE]35";k jiV&|i)yLo"NLɬ)D畞)B;T5s1}$,> @:u!nDDdy4oqhDS$yCX%07]w "°Qqd^Sl&JU!oz !ֈ̹EPW`.ɏi[~#m6(\n9(p5J>蔹ɇsb; m.ukjwF8 #5њ ;c&n Ϝ"*#))蜸j+ N %G?pe)~+ s0%]N;2u'AE-%_)1" IDATWKQnCADDF IP@PAiAAJژcbgvgfg^|g|Χ`{:M4u.";B99@4v>Frua᯿`x;!/Tt1?m,E!>1[<$([]ޓ)F7)0s}TYoTX4=Gߨg,"frڂ #uxu|2 0 Aa\ZP| #"2 FpO,T#\E. _{}ڷ5rE|2@l`$ )SʑsloO#k&lN^F0vl,pDJsy1( L8^ʁ#+Жdm[ErV H*7'1r)M'.bצ_p>T!D;""px)&[*fzWC,XF`4`,@7rz{>+6=)؎zfB iyDŬCU| V| t鄉s?;w26UmZbop)m:08XL)-S5}3̺fgTM{Mh.yɍ{ⷍ9 )S&R w%Bp=.Y1A~(zRh :5xST㌚uowA] [/0'FY0|4hѵi.W$N{H,ڱrRLC܍Bu+\$~=z,ͅFHx1V09o&?E>$ً9E|%LPxRSRеOV(տ>j{A~J)ϙSOԝo% J|E)=gcm>Q}܁"~W"*5̝k/uᲒFB@ǭK;PAGɂZxW``)вx.S٨>LfͱۯuR*ܽsarլ2ifLY֩ ׃w_>MKGU\0t{7P"yokB4 ٓa d˙ _87͞z=[7N5l8|RNTkP͚J?x@Yr x2#KU6XtҼ8꤈Ϝ^6 1BuzIhS 8zTV?~'xT>l:p_GH(V{ zA-ÿkfED`s*8T4xF)=,#OE`{ v]EiLWPyÛ@A,alZ NWDRĠu>1#VKS_F4]: \:ܝK?{p%sb.! /Wb+We,bᜉb)d>U+\;–b!ѮZYl9v׻tH`OdbM4e`\JjKD6ARӰI@=JVVv8o!6?q>9s*DnPH}]:Vi.5$lF&q! +MRu)A8C*E 5C#Z.]ԕMYP8DĐS<}A4/U߻} 5bfja!#=5O+j ʃ\} u9/^/nCZ ?֭쑃}(UJ=}$SW2Փ[\adPY7GD! ) 55.Rw8ixz*7l7T+XNR7Wj gt ܣ$ڂ1"J岤2!%wa]oC|Pk(Q^' 4Ij%LP=gq0Hҵ}PrZX0y=+5X`aEK$_#KBaK+L\!aRM֯grLtQqu O{^;ᣠëCNˁE|;Zv. g1mp L.,Cvi k=X09wI붘?u"6iViJJ |&v^#$F.ɯnqB$2c>fgN)$xό,>_i0zaw? wom;bCX"} 쌗%YA*T^uTSP1ZW(Mݬuލ{ 5N܉s㺈q):*z (\$l*勼J)T%t%*VCg(];0{G4)A`ubmx<sVJW'>{Qm݁>5kڥOR:l] GGq- c}Z7{oǽ[k, -r]佱BJh$u0GmZr@ gdnR0{o*wWˮ#&$iM ]Tns@k I2fo,2Gyܗ^tYt^kN]lHJOrq2F=& %˕/ o=RBUbezk5Ԩ=@o֛UqFt8qY\;wJ/SL՚(U^/W! @pXg:?*J nAHNN5yIW.c7q k3!T?k9s?vƅcG\HX8"sDdT"sFT̑!  o0gbāeanu8ſYN{NVru:p`N'j2¢ŮeɄxof"R(Du kr+mÚ(QC6YG r̉>uwoGb%2NCJJ 6n>Zcĩ(S oV_(4,Y> 56'@|м!VyoR S,=]wocO1ɸe;v]|khn7\:u1ע ; PT]FPpJW!W(R$N؋B@q~/Wٲ[^*A!pT??\x%*T!u J)߽E_DR|<"DFZ*CtrqEW)U$r)UJUnzYBHsoKŜ/Ѻghd |bLy|.C= --{6G=}j٩+V+=Ń[7PQ3ż@Tx*ԮgOq4z3_" 0wlC]OAJRVlއ+ [v;ˆlI$v8ItjR{]{wA)c}`ٸXv(HK=ٳ>ARF=f7mæ*ZqiԢچIaiNBZR^6([&|=JcvBP rX )]R,4͋KM+hU<N'ܸ|@lmK flI粕kAIJzZ%Ǚk Zw[0 vo\qѨ\>FOq196g2и}l^C7EuQiKEeàvyTK',2Q .6`^ILHݺMwFrEPi _֠en\$~=s+NC1Ѣxn~)f `NC G"ET3oHb-h]XU<5F*mf5<8s>9Tc´޲=(kRåՋȕ }c&3ooooo Y7|7|'ooooooooFfFܹ5BѾ}{ܹs_}+ɭ[dO:rҽSľFǎ;=СݻC-[BAʕqiX,špGLL̿L .СC=СChР}JJ RRRtSNf͚*UԩS*T!Or 077n B!ݻѣG7o^+W'OI9?Ƀdusȁ… ܹsX 0@=z7>O{\߾}^+K,VRJ=擓uǂ (:zh]v;e3gN3͚5KtX}odfScƍ]65jE6t۷iiiϝ;-~ɒ%(^SpN] àD`PJ_aҥUϏGzJ*>'&&Vj22^;w\,X@,TT)lƆ`|rojժԩ6o,:$5j T]… Xx1._,~Ǎ74vh֬vK͑eb…\Ǐ;wz] \Rnԩ^ܹsXp!\"~޼yHHHիW}#CpJ{!o޼w#Gf][xqx+V 4'N@~4YbEƢ^znڴ RaǎÞ={*To.L6Mt֭[7kV\111[}mۦk| ߣwވElܹsZj.[ C\\"##}H#*ڵkѵkWs@@^xpooE8rN>z&X`wO ,׮]Î?O"o4h&fyw%"CЧWϬm n؀Dٲ%0ՕMtO VxX ÆjcÝ5]f˽:W~ [)J,_-^nzOԾhQɬl^NIa?zT|={!:woV-\ohشY-fYnYS̚f gۨ( -:O1̟a{n,/]_aڄq{+r)N%/J (pORx6 sZkKջ6ROvջ}Q9*Immj>ZU Psgw_ǾHmmgI9B w]s?tի8b!?A˔ÔeZBE16"ʞNU᬴ׯ^ܗ{vs1ؿ{ܻJǏc]ؿ{D#Sf{wͼmJvỷoa .ϰ([, ͘!7@ܹ1q(e-E'Oi#c ¸kRRRŋ֍hT(Y?}Ȟ#J刔5[(Y V~~a7ׯ\'Oex؁PL9߮ۄsNdF&="5-\*s_~řGE5(Wn70NDEWB¼ &G}ݼ2 jR8x{O]ҥp)WNv%a}bx[wGテOM/۶_.7.,[8@lL FOM{"<* Ϟ&kPpx!f&["ٳcԩؿ{|嗈CXx5lS'1n qZa#A>}w? (T è2J?DB\>8E+X5l߼ ?P<k~4m>|#Ľ۷Хi-^œTA#3gMЅ…0l"{ɲ8uݻ(T(=&7<fR=IV7c6V|#y uty^D{=~{J0Lˆ 1o$|b|C|ףi۷ A ug1h;o^\}[|gO~~ *V*ŋ#--=[R`Î?QT >Ƣ@1%{덫B(^4z*7n  s=[&ȨavT-E_/rhYڽnʬqS)V,bOc_8*O?Q~(oV J⏾Gŵ'#yžע9?\Gp-ٙ>~gvK@׏xd)Ԩ[y @XxxjΕ/f/_d4mia#Zp>c\8"㇏V&ȕ;Zw耏y GH0 S@BhU.qu !} bÇ9ch!*R#W.|/ )ZDn'd܈I@B|<!8w$_?l;nAvQlqoq77eN=w"%%k֢VB8~xäDUe+VFz ǃ5MV!DRB</ ~*=[6Mt~d ;0v_{K1n'  }yp> .,~?YV2p|}{Qtʓ0:m(̩3o~mYS|w#ʓW k ~qMң+PB=)ְHŹĄx42Aܛ;z!_ ,g.ck2 1M&KxxdR<,(_L5+VJkVf ǽVARaM*Vg<\yqfߐF&Y wj,3ˤ;B("DTF)usCԄxEDBGF:Bx-;"v¸_:Ut踯ALamF:+ f-t 2kU 1Ȩ ԔFkVtPB{RNvw &0HN)у"vcA)k!XJu#,C)OPwͯT`)i!#!3 g9&%iKks@.ә+e)XNc9`,'A0` et|-a mݖXJw Vr!`v8v~%dA,Yɿ>xIs OxpQ3FB3`&?~bb oY3 \#'r3. H.B)@e$8pgTɝ;N?IԅpB@Y~mZ$s$ED궧h Kp.)RI-)) ~7{FtjJzKl+z%CkX HFvDsZdf\k C93Çʝې=ݨ]XOɛӉK`칆̧ q .̧x/! DXXXD %p?n1"@b֫S) ,#yCTl–.A{:'%!ITy!R&%`og!Bˤp8 .mǘ=耫r"g8$LC3dM6-5W~W\ n֪ANeP`8i4pde :<3.p˜"} "1Jz/,'ŧG}]*:*K҆J$f^(5]E$&̄8B.x/x&}_ Wn7\C<:{H9%/ `e1WރYVZ咻"5|țW[dț^)zL^.EAw @jY*؀IX'dX!(Ɗr~.3 .OF)Pש]\nLZQ"Zqc1ow} rʃk{ZPKRl)n̸F&u$xfUZq($+1^ePJ!<^[Ej!r]&)=PɈTJ$#4$/CLgU3oo8SSSWTw6bxlJ&Rs89LL51S#v.=DhΊђ.*J#Ӂ,KM#b!:BP5{QO\t7 XtbYK5%#٠YZ[AK5KM(Yٓb$&$kmWV.{ )lOuC`\65Wރ{(%tC].}t.xu8'%FS6a e3q7*ATA} :;oyeқϲ맃!B:қQcHzqHA)=/XW;wMfujd?:h1~$.S岉z/Ȉ!{FFu'=͛J&KP4˼48nAͫBDa Ѝ륥c D ((0f)k R}ZnfY1F0j&2Qgֺ J)y\\&gϐ3Of7ъRYw;Y6bܻ}KWl$' 6.Ϗ{"0(HY'(]W^߫nfhU'-8{?g\5oO'x7R,Pagh61-5?-,Yoڄ~Ct0&n#b=okJ yCܣ|_嵩$;OE*b((`mp0yY%HpGkILX'+DKH޶ eٷj"=%Ytdd|f\F.3g#e ,IQd!'b3; ,\H% ȮR($с:Ed0[Djc vIHx &;7L@H9~7_0It3%K@BL$3d sx\F*Éu:h'.3giwË$Ft\#\Fs< 8x0|0{zRb8mB#utX!䊊̂Hd,sgP 8%*\dGd1KD&-T(#ull.66=@w/瓃8{81mXH)5X"F#!Iy0PЉɨ'K:\ʲP 4'iX4ChvQ 0C!|K$'%a܈L6v?;;tMuCB۱(PP3g(M HxeJM|ݙepfI;aY$NH@k/J&sʅraH^X jj-^~a9r[;,J{Nb!xN1(3W^īF) iNO1cu0QN@rs!y%L)ZI]ІЮqCl%|=k2ÎZ5jB;*O{% Xi.4F4aTf)BXcB\^qy=3@rU B2^梲e?e=, E ֖T_ wEpH8~ɱɞNDFzL #^t1uIҌP*d,ծ‡w}uݽE Jg/[)8@5 m[f0eQz:s~IE&U6was/#=Kxm=]kA1̆HuǧkeN#}P*hg?OHh(Fa;uh6v~2oEᘹx)f}\,FA1|$dIJlb$qR>75B^ v7[MbU(\Xp?_zz:́qLc∡:#t_pbD8)Fv7]A.N"#ÆOǍ-#ǧO!7`d e3T_.YI)u{և՛BBC ;}s ?풇gPbXӯhY8uAdt'F=RCmd42xEVo݇\Sh= {შQ¾g 2Fl 1j>Nq}ZvXk.)=mqFa[V#U҃N4Bh:Ѭc!mѪ5V=fYErb"~ݽ_Yd˙ @"yqS} Nؼv R;8{I03Ηp1 z& mf\`GUwja\-~7MjkMZ=3aO%h/B;h&;Bܺy@lt4^<pi«]Ȱ }Ec!L8aoF>Q.z-V?c U"le-&e=|>` N{9p):Iy .⥆OʆF%,(ި123,K\"^GppY^byX+tϜށ_P$5C'P!'o p2R͜FYH4%4736X5ި˕$HM3%ժt5smaN& Z%9xAQ K>jވz̋8s8?'ʅxWob6uyW{jKIV } ?W܌F.kkhDz̈́n ji} ~3CBQb )) g3D?!Ghm&OègOgG1ؠ6Vidi*~RUf `PXj <7c}ݎ7kTu], E/#|f`ayᵒ%QD)V$-"°=F;+M9gPuW' N.t,ǔG%⨐>/W%D CUQJ5 9O'`yfl0zLԬBV*gȊ BĴg1JF*jb j J%͛ OBZ=!Dp&CZ(RϦ|^/"DxH4.R쪈HP&BH͞ƠiJwp)b9.dG B)ÖD FRЗi&K(/߲;7m:b|+#TbURG*/ꯜ9̿TVjՂU dZ$k;@@G_]JrCf W|رe8Zʖ+'GL$bf8WMt=I[Py}{]xt<ۦBwCT v!}r*lX]:kdJ,dmc,) IDAT0lz$Q8}1tKc׵US%tfZIOLEϏ؍;hV{{bG=wji%4)]GY~Y?v *+tU Qcqe26;])/!7RÅf{p{cL:nZ '0pWaj㗧iM_ +}rcXn͞!F^!P&{ǴOA|~!"XbZV"mp_/((3ƍAFFf+8v:u1k3CdW$'%Yԙ~x_/M>TrS0M=Wv8g>h q n?ɺi뽸z/RSؼ#OB_4X Eދզ@vBogX3K5EuW> Ъv5T./[HKM5*}Pu"05sˇi+D`!tu IpAA6ϟ?Ű}$%g5lz7mҕнh|5~4wM5YSMRSPJIy7mU۶Fx 2؏TbF3 fH!FV חV<ǘ^ca颅bVz-OF겹+%,~촇-]t/8Wlltj&-;bӑ>,z֖Dn\x_ X;׬:FCHlz!t9Ug/7U㳹_+&K:{f!T爢SmG1[X~c7PMFCPq 8Yߨ `.bjf.BҨkfE"²)۞ LX yPH(>UߡOXw,"+G8g01G$d ݛ ezҘ`fi&RY$A<BHC ŒmC1r| Uo@3n_5QM =_W~JC6b](˂u8ܲ<]+u[˺"X'o`Yw8lxfYV̜R=RW($XeGĀH ' ')'p͹5>UH: 8gw^@&[zxvKVt:\ pٙ^3,iȈdWY*CUq'\nXü3t(Vu.L p=ZÀbyg)|TJXpq_*uAbeVԛ2,\q,sP _>'%ȳ=t] \u ̓3ŞDr@3-hHŧW^{w`傹pȧAcƺ"PIlڨH,QˋyI Y0לnn1)1@D=?%4)B6Ss.IxddX}f"NiXt _NzHl',۾EPq,WY[hH)f-+5L) T2۱@\iU<>Hy{b<"7CR?!Rh?x4;ujahԦX' a|갃 4eU3}"E@@2|Ž՗2p" INB8 ;ba Ϯ !h)H@0;Fᣑl̕>{顨0*Bho)_ _&^Hv%kVҐPh?SҩhX87}NWk %SڭՐAUkc? PA/6L#%0Z?rz8x!GbТ{<0gR2iSfhe BR ܾ~]6m[e*G@@G{3' y㥄^~Ck8,5 c)Y5[T{Q Z[^уxxj5 !2OW8Xkƾ{/X=6DzY!CFCiIcoZU!x8jԭusF#0D¨#K#P(,=_Y uhX sFZ"戩8(DwN{qWڼ͇O`XNi3BB/BP!qF)pI|4j<;7oo U6VHh8>dFz#1&8OhX Kźopd&tjoQFm~|U9cY]'SRCLd=a?}Of/Ķ5ߡch[ V~fQͲ^Δ]Hܑl>r j5٠0]L>F">68ka܇wcZ|7c"g4lV^J6j>Y[3da@PpA0V^D~pkbދZ/}z} ZGVw[U_NGzj*v|:+{R/6V.zk{a7_A9?I^Z7Z3E} {Cu/8 K]\!:ꍚR /~8j h?ǔO܉8yYR*FeYyg#a;!EThN74 )3'%3AZw``S0BP/3$, ᒗ6* ÅInDS1̧7Eo*LZ&٠Ehǚ3g:<}pU7ANv{Fw]D])ƛp6C, 0&LE\l :֯5;!(8XǮ$$f{.7~H=P.*TsI^iyٴBHx*iub(X>JzG0F˸f E kV L7|b[w!oTz'_<~|C7#WBݬj7k o40T!j}K?wx:Å t Lw4#%yvQm#1l4D+]0 dY\<~ΞճpI%'!*gnZeD*5P¡zE6rI$&Pڣ{Ͻ FԕZ:{YHBQ_#{mli.; G )>E_GT<Ȗ3rA0PnIK7/_1p(h!ԤVk!{Y8B@Q]V=TU-^%Υ&&`ߦ_pb8w'l @rQ\E^.p!8,~e+]s~d6A`Fқ4H/>lR łg3;h1Bp-]NϟAaKOQzm$&+(_bqeT 7d4^ 0%Ӱe#O8F"$<naWx||u`R~gh F +8?m|U`vpyK>;8NÖݎP$'&pdxbaChx$=zEeא#wFF3Pdȋ(S:CwFk~~UhӶ+}~HKMoG~C27C>7ܑA/un_{=~-6f}3>[ kzu@ ̈́OQU{U3>NG|0hs˧AV푖VNYk@V*/<Е̛gjϜw ¯NL',b–Ӊ`$u:H<}̖ol WΝA׋#4,@U'8M# 0~mlXzCFF6xl_Gox@ܽyCӸvwUIr;J&H*M HTQt&]AzN?IfLL2If1ץd2{fkzֳz"Ϸ{ -!--ƭ^eټɘ9 Zf(Z,55cTߘuI7h۔Rޭ)5N V=wZ>Y{NŋˤңI flkW[gN Ǻ%?ְk;nصΟ8Jz F,N;`߱EFRs9x6*zSK -##~7d^}; 2Ӵu~1"OZk*x*䯨Ӹ)(Vm̝7WN}tzN_̢U箤$'uj֩Md]TߐoqW׹u:EJV pQn鰓#O>n݌f)K, w"!99 --ݎ-fz;'dobP76Զr]8D oY RtY6^AelY TUmRd̜QVmlٶk!Y,/UJC\Jp8q*yFbbٲ;!#bz$O>Baʟf7_N.cv=zk_W!j5Vk&Vy.st _woZH4t:=Xho.1W^ imr\CmhhQH4>=u0EK%doC@a؟nms4܍ sPJrdDdT'cVf'5S֐A:ӉîEEG?A@[aY4DYxz-c7wڈLB&NfdɨRwP~o'5qvdt~>>=T>8:C_j?==!|Um1W&>B9׋V2nBjex|^xqNz;bZp>5ɀ[#/݈\2f@U"2d6~m{h=>xWmVMr 3 b:2{ E #y鍷ٳy=9#k<,55?]6p$En]Lμȕ12r4m٢ٝiO Iwz7,1e0!& ˰? >GMvC7QV  %)k{LjJݻ -zӻ><ʞ;{c񬩤&'ټWn߸M{hMΟD/Ў1!z&ij/ _s&HNJظ|) C̞'Ǝ`ϖ mTܹ}OpIץdʼSBhOv&$IҭQ;w@@Zu9v`CEr3'+9=#5{3W@#ܵ=שĥsgX(":fޯ^!y;ӭA5wx+%U@K*OppFF& LfrF}Ǣb<0~rrϹg!.YHV.[d$Gź_RAS siڛ\kW{Z0xͷcb߹>ۘ/ܧzG9 2}Z ܟGmXΝ:AٱED0k;d̜E^&Gm߽} `8o7,Mt}3;Ћp`:|?|pߧHϸ~"Lz7UXレ4m:5ݽ}Yvd$|4/6ǯ>#cEhвC#/΄j Or%xYɣc r4mz"91B(v2KitgQ{vbHh}8>!;._Dn]Ɛrػoq1ɚ-ǣ ?:!ά7Ӿ[wbt"Y 6sEߐ>ק!Sj^oGgFMV/wy cxq(aj|wlF5upp8vw,V۵+WРi3ϗsI.]~bR59ܽs̱YRtt :p؀2ꈊzh{r?ZtA'9c.%&Ȧy#Z_Zu҅ Ȳlxl1zp.Aw %9dDZ-<IsnMı?+T˖, :sFV% IDAT# sʁd0)mڢoNXT.U*/,XPn'MTt4hBm&{ .7j91~&Q(]M+!zF~vбGMy\9E'B(t| *`od{_οr*ݗq۲q# q:Ƕ^j+vsS' Ct&4Jn˶ J_CXa4Y3AV Y_QbJ!\tD/Cc\|(@doJydhZ(;wܡh%'0kTv;wjdoߨt5.^Kp֯^G?OF"of\III\<{j%jcܸvy#toӚ$f}3V=g捞ӍOXǦCYV@bjZ=K֬LOsOD *Vm*W{nOzU*2v0ڷhNbb"zO?V\\PәV*tz ]W[֯mhJU3ѦQ=nHG] "E˘֮WO*GEi>>aܹܾu!si֮yy۷oӡeK{l۲JhddII`5hfҳx,MrRW._Z⤦U+5h֨{|j[&|6 }>|-x2ovijf*'O(ЫHަ%8@w:~'~۶!#x+^!{q=zy d٤Ѣuk2j=/LK:?^x0QC>V \ <{xWxW44fڶq#3==;r :F)ck)^T=/qoxzMzS(TnXLT իܛ.f )9 N ;o置](SƏULi⟴[W:ƀmfOU} cˆ!ص "6{v5wyԴ45W|svlg椯9qLj}h|j.#kViF÷&p`IMK?ktlNw`ܝб*?XAm;vk1믙6q")qR-1)׮Ұz5W5jצU۶̘4!Kp.^5j _QZjF sMQɫ鵸 UE`89mJNI?Ax}9, @LLJ?Y/akqD5ɓ=/X-[GCH<9~v$=jaߐ,,%?agؼ([V:zV۴y s?yuGF]< qη43nq)N޸F}pBU'ٳӾ[!QMJaҼE"tB:lذaNLHolyzcbضe3%J$s&RSRY0w.oӃnǀzQ|9 -Ð}Ȕ% Q\Kļgo_|h V"$aXȐ!yWBŧ|*ɛePj5/PF-(Xlul ~m~.sW@S<[ܵ۷ɤy/wJʼn|1YÑtMUs4cL~o f={aܿ{wP5I.`cٔP!ݔ7jlr7zҒ.Uq"SVUbz֨J]}3%I>m߿zj8/AU cߐ&3yp ;e"\iI`|;Qj~siCZ1oɒjcAjB"°rΜ$Lϧ;De K8RSFFޞ{J3@8_O6Fѽ`<ڴooJnS keb3m6 2e:RSFEYo9)u&'b}?as2 !-p܊,#IC\IGV {.es i-0EOMI ˒N$7ZƄ$޽C,JÈJ{cQ^Q`!=7Z"aZne!6߾u=;vx˞bԒH;pӼ.X}%p: I(S@ZCYs,+MeaB߼xl 闓GJ0)կ J [LzIB+;RٲkʲӃ>Po*8"P$!+))| d)1n=zz&8鰧pWRsNl^+)\zȲ@YyY)Her>\B$ YdGD@RYJ?Gtt%lY:2DGK z<{r ){;WO+ɢ,Kn%,_θ)SINI!::Z;N/GHXmaӱ%z+y2$HAR l3Zwfbݗ]Ψ_c%MsfNܙ3ԬS'JxRXVIJJk'ϟ'ktҕvotQUԐτG3!Vt8l"U'o+FLK!-Y4[v% )DSEoݺ-*ʔ[8n<13L,Os{ȰBDDtj#b0@4"2f2YU d1}jVcb!c&wљ2ON οMŪUMTr+dsCLJxw/m(.<7нmTKpne[8>?ާCǎIܿqK${wo:ȤqY4ws]7i۹ 9rl֜HH١ 4,$MyuEV ta˜Ű?]NX*{J?IrLレ-/\$*RO Ip7w '!6NBQ Eloj"|fF)+2 nyeWq^=tQ 2-FիRxqe XQ+YXd䷅?!ӧJO !_e ՞ό$`1!E\I3&c%g=mר[W4Uk4õ2aAM$13~0lA$q9pָ0\31i  gz.a+wMP&9믑;RM\1I&jݟ+VFŪ|43eXd8-ڴe(faAR1(q!3MOme++ڞa!w޼~Bv©rUR6"#| 0Ҷ 1DE5ӨU+, eG;r D8+|) Yd!DmijJj__ky8c1L' Ї ] %lv&gu.ؑQQ g'=7\d=k"@[ C.n…A`B| |>m7tKϧ%d& I YxFl+Fкsbdϩ,.1J$cr/TdIrF٘["5Q)w= 冚%W̓ AFIII1A'K1cbPh/%q1/yV B{Fl4!\l%,_ΉGX{OT6[H?ݓh?x߀liZ+wI]]#EKGd PARD`&"HБ s`u鍗EFEVeȲMrxzR^%$ j)%%Bd7KP45BYIVO;J殸~S99 99! " 0,ӡ:竱c`իmn ڠJ%V(bBa5CVںjVfOKՠ/®(u?;2ȶ? `q ;N#l8]($ᚬBV:Kv:qMVg]Q}/Fc$޼4gΜ$ݎB՚YB`^/R-Oơ@x [z>*LMFX<1wR!e;COz&*SU&p8"" ,9(G i|\x9sqU.+NAݻ+eUƬͤ 5)QW#$$sHDrD7~d]Qn%JJ@ZjUȿTܪ#[zɧ$[QWI5$UR;E}_u>KpqWfcr+sF*W扬;W?'Slf:"d$%5+iiiXT#VȈ$"c2^֯^E9ur!:̚4n ɣx^ꗡ*H H,k~YR" }=zNߢSp8جn,n'""ɒIe]@fVv8lx-ٲcZ={gϐ#C ORa<5 $I.+ɳK䲶$Z,Y-WnCMRIȲPH i1h:hȐ(V4{TɗSgReR;&FDDbqCLTCNM[&Gܴy#EJtڝ5+Ӱ*Zp7Ye7VkR+1j1uX}4PHsp7FސD`uuxjJp;܁Ȉ{5lIJqJ".^xaY1 YRԋ%>9=2+VbѪ?X0wm^HjjJLEC ~ӆ }ꌫɬPVfkd~[8_kL ɒ "%K]޼*y1rkؚCXsBq\NOKDB|</\ &C_BYSgtOmX!r4V(cƄ/~oX'AΈB%2+1~`t"u$/wx#Qf,`_)D)P쉒&$C,jEP1 WËa-n@JZתSL}}U}n2Cf >BG$joaPd)v]˪% yRi]nz#bh.~9;˞6{ʚAR}]bcc a3e)5dB`Jg& ìIF@9nVf2%Q$e9Aˀqf+'&G<2l_[PU}!“[5 )0I}'i:z#ӂOWg *y!Xґb5fґp lwcjߚ~ӘK`B.6ϟ=ùgHiJ˦Ҵ>3Wl3bI^E 2 Rǹ|"'~u˘jeUVa> &`~ɐrQ?YmnEy`W l)҂ N{6vJ<眮r2jQfFwGn߸^w+j ,{,=ӉRDDTha0ڱ*jp,,aHOGJ%ɲPӃK^I$0.P_eC u6f&ʟ+ bB ˟h' ?Kț?溘 L/nB8 7w%fܳgq`'t|,%slVߧ+2UYuMR;[Te=j%)LUj̪WB]F+q YF׵P)m_qT]1C{>$߽ii()7^>u:qtrN}GӳP6+$DL;򏫊7s1 Rת.VrRIJ֪+[֛'!y KErU!.kt 1ٲLsجT+]%y/T( ?ܐzsޅɲ-*<:PQBy]jz \ɔnU2󸷀7$bb2aHWX]vwYnB!qIRVẗ́$+j tzy%o/Wi]&M.,δRn^W.ұXTi[r}hoVOqkea.(vI^9+H&][x|r(ʐ)ȨJRԃ OXBE'$ߠv!&E2-r\tsV'2sk|h B=WT+̑x!@OT4 @`Wځk-|>#kp8֍3h0ID 4רNWjZ3AR=HTAHtƋyܫ[@ 1QF '%)粫W.3sRb89A 19vBdU2De_ת>Z֊$,1>Kvq$* 0nC˺qmN`ʓ #) =TV w6hiؘ̱ĘFPUos#AqOĎ q8yEKxLgH_5I")1zMiнGe ~0QM¯Dg0n_*^ StuiA]\܊g4#}0Qrh lm"1Nr=tt$"X{:Era$jtd˞_3Yj%p'Rs±}p>f.Y~{nӪFE.9ґ٤#^$[@R>ݻPx F#ddPq ֮iř86 o8K[Dhf'C(W2mh&nNԔЂ 30>@_%r)P^h55Ti.9Z}bd=/?gY4z{vP&'xUs߷mTSO&a)1~ 8;D֟Y$)wpJ @3< ) ؽV:ڰrID煤~ DƘ0UU^*u݂mQܸZ"l߼^oNJr}/ZR`iަWGd¸JG~m91<yC ~h* :p JJaA?خ]|jC;9A`Ȝ5vl' 4>\P RA6S|)zK1{da8Sov+u2*´;%3f})BIjwY"]Vp̈́mgʼP*jđ+UڵUO7zThL!|(](+ sueUY@(G =SG Aqe9>r)gJN> >w׬7f,7 =3'0ajARtd؇b"<#~˪"զ3:U22Z>wl9r b̚ydLC\'2վQ}Ȗ'eY*նb,Y  0}9C|k@Wޙ e8ݛֱ{-y`-Sr\ TCgGp"JiMU5be{dGWm]&FIxWlNOFud%Vk*`bO+yɂy!Ȓ*L=FQ+Nokk[Cj-/7za D:̞5k64p8(:ӐBytV^3>oMzJV!L+uO۾q~~l>lhC"ʼn͑P0Mw1Aɡ:'_~ .bte;3EP;4gc8 ];͓JNP u 03cٚu]^8sоG/:꧲~> 5@uD=KbA"Y=FW3fՑ1RS:1 ,QH$U$*'Ъaݴ8Xcʭ'$$`ːKTt?wT RR"_oV/hJ'|tpuԀisU{"Ei\8i䱬\*~dӮ<,\TUN2v$M$ź+\loxVgɪpWpGBGDF[UӳS=G{Cs5*0._EqY)V1#UI2$/j @z7+-_BЩYC~7-f҆f>t`ыXi* |P" VBV6c3aWӜ䙋 W. q>p2]7d沵}2\,Rs/ k&H*+u5\< Uiɍ7n/,Je֒524=aĻX3d1dͩR| >%ᤐ#/:pfE-EnJwYz-̛X7'KlV""#ME}w~EOǑ)sI.ǶH-26`lX6o6oAw>(JqgT(uߢ*.9TAZRm*-4tF|}:ex)IA}$L }^.Og:#IQmI31qNۗsB^2"dfOHULԭ!t>(HvШEsGds $ݗsFg+{95^wU?lMZ~ϱE=p^Z]ߦSP "H5܃Y3}Ndㅻ}6z0u`gw&Q$<9oevg6oߌUX* _xs zz C՛=}_YjWXT6`@ZzUk)O:Bû/An[x>3*wveؚ25sMZsù %KsRRYs:/݁)[Q)(ȱ"=y4b;pq~Bb<}H=Pb; 8|/F"4-Cq1Cm#ٞ>AveKYd~ԇ?|E[F5Q Ӏ#fgKwx45ga«t$c|-'A 5k)-!Qݓ]5mQOV乡j幗Z QBۘӰ_.X`~d/q6)P,e DqZqM s>}-;Vͧx϶-r Vs/WoO>sFN0S͖+7?OC<?}Y962fr\ҕRlF~Zs-_ּE(3XoA󴱟szv^7DžAu5<ǟ"d'5'E̙yq3*֬CŚɚ#g`"|$ B z|ƫ6]Lt$?LEs& _h*T/HF=dI /آ cT m&=vǼ9AS^Po/V,f%z҅7 t=V$=Gq]t˖rx_g'EAb%(]*+W%WBdKYȘ%YPIM7j(i$1Z9`0= ܸ~9sst|=C+ët:)eV+z3=O֜dʚ[ׯBGlR]j,55w];عi_Ld<ôŬ^yinpt:e, ,BtLRSq8d d!)6n#'WΟ%: rp=3Ϸɛ<ٽi-+W%Cl^BOž3)]: lm*U%M#)"wnw2W'ڿ!e+Tb-dKr*f|1ҝ'QX,VAll]FRe{hj{Jix9;wȒ-;7^aLތ'?ʌ?e/8g' fNeYl]MgY\LJg/HMNKߏ1v$9׻0yǔ,_/AVf<]Y] Sի;G"ѣ3 %S ޑ. #2*a;2tv;ר/HS~Cy:]LWqm'Mu♓:|g#ܹGj8}v{%UXm*V3G!K,dΚ8s!CX.>I dϕ~ $D`ͶS*L8_Q_5 ;2Ś'ٯ_""g99-[ ̈́qHsgݾcx ]Ü^ fJN;…!oY<;K\a4OƆOyлj}>rgԼ~I2ei߰/։kWiV2f5a;4oߚoΝ[77?|2e79spN;ߖеU{'W/^aV߹Dլ{"(_:6o$[\+]6')P(mZOђɑ'7oTJd)Y11ܵbrxnJWS)TNW/;N'wɜ5N悀5@Ra%m{S8 % ]Fܹ<'fsqo5م~0Srk`lӧm9:wLRb"v蝛7IMME/̉8oٻs_nV`5,$'[g^#ǎy ᄑJٳm 6\Ʈ-#{M{ d?t$}zr)wjqo5GZZxZY/}*k!~Q`|kZ x][XSov@bX4cX6[,M(pWs+qh?_} 甌>#-0g(RSRw0ړj,dE@JeQ3eP?̋:V߁,}̱Jv ە-`D$,,ٲ3r,r1!pt3@!&+_"rѠE+Tx!Rt*֬M#T]bgy(\"EPj "c@@*=JWBEJ(& xGfs%Z==dU4dP@?#d0TS0PPa:&[֜!۞”QCp" ck4o9jouY k~]J-Mmw∈aU~<'Nج!Xl GB$oɿr7ZIO̯-Kë:ȖPH-ؾ~ ;61Y1V1Ō5g5}аBTI~p+WҫMs?Swұ^T+K8^,_u}\8GbB<>]v"4|,Nu*f o֨#L:=XkWJ: {`’3bAedAkkY+ݡNe/;L*& -N3ۡ%[3HMIbxR КmkV+ͨް =GjLvΐM˖0[d{_vaʭWa"Lk.|tĐ;e5"GHn dYv*6V-1.2e$RR@FD`q!`.;CBIKIqQ[3,0=Zi->(i-{w|Uǿ}{: RDE(ذ"QyTD(6, `AE:(Mֹ3id7|9~psg9s=sܼ{y.?̮|~ٰ:nHy=`m,|> 9~$ZG̖| '$YXCV++|_Y_w;rؙקOE z%r8uW' @R 63AW]3^b嗟p!?-Z M!?AI\Sv;ݼurXK£yi|ỘLfק[Yt\f?t7fk(?~)d&b4RN$g,O| oJ͵_\ Z!bZ10;.}r!z,V+ * G=z!d2{zBjF&PRP ˽_^;YXSp[޾Sd׋1L9o?]pE̝\{C8v ߞkU_^}t2O}EZR5YյPCL7ߚk?4¢YlYȘX.FF]w[Y]5jΐe t( ~wYAY0LL⚻bp3,+ **ʉÂe%)Ob56F~ס[OйgxQ~Sg#2;K`ܿ&s^J_yeWt:֯?77?6Cb߮L4y &!M^'i oϴ>=6ίw˲Og=7>~71tm_ [ekkD' Y/[f}e^D$_w0v}l\K?xKhmjdV=Lk<"c>voY6soa˾hW~5S9q~fFGle5}m {iYn [n|VSMo0kOE~`/6 NRn߾}|dv'[go*mӀ EE@m!Ja눌D#շ ˝lѐPwy4nH#MkFiO&6iFpH#4HiFi]#4H#MkFi䛴h4H#4H#4H#4H#4H#pH#4H#4H#4]#4H#4H#A4H#1L 4(/--e˖-׏0m5HF]#4 ]yHDHHg_t):uB$$I"22SO=ӵkWz=$;v,999/y_Ѷm~͚5{: >K/EsNٳgO_M⣫cǎiG#qH#N:r:RYYIdd$qqq'm_~mnVƌ1L^k. Brr2 ǟy("##19GGڊ ?d"!!Yi9vB0z7x'0vXv رCDbb"۷o'66Vi?N]#4:v꫽^s=>+V0sLӑ$ \mBB$1cƌ:~ᇽ$+Wֹ /D$FP-Z5_x>-.]Kff&Ǐ'33o[,y9Ґ$Gŀ$~.]ʪUx:u*CM6y'$?c5?oaƌȑ#$_F1l0~a.\Ȍ3G$~ z9shѢF[nѡC;Fff&n[&iNB#4(H4vXwraZ Ə_u"<<\nO?$]vyoܸQ"55UرC"&&F8543fw>PG}vŊ]f%K|t:EFFϱZbϱj-z饗w}O._ @ 4\.Ѯ];:oذ'O>׿ ѣG{#'''SN]j&44FitB/ɓ'{]LL r ~!k 6ѣG{\ve,^]RPPM7@NN~; ,xaΝر#;wP!CxW.b~+ݺu7h{gsa&L{f ̙3)))iwuV [zu}Q6n}ǾH{17n\5GH#4<iq~!p̙^'˲ԩ}^Ӷm[~XL4Ibʔ)54hg}oʲf>ܹs<˗/gBeѽ{w+IܼywhQ֭[~MKsiv/{C}7ɲ0Ob۷y4FHۜF\.si3̚5.о}{"""7ޠI8sjݲe g֬Y'5L0y!I^z)\r qqq=zEO?1pOIشi?3cǎ{L&:.|~zy6m(YϟjF? IFiTرǏ}}NHMMqںub…L8_~H#4 w4H ] &PQQAff&}QP4 -Y%K0j(233ILLDeꫯ5keeeߟk6dիWsSYYIΝY`I2U#4 w4H#4زe p8cǎ~DEEiFiFiFiFij8ή]i4H ;%FJNW_{ ˅j{tѣ"I4v^4)}MwogmKQE">ܦ;UV?طs;npnz}PxC1oWôĴGsnwNg>̛qeQ+ M@nwߤwN\yŘq$F&p cV4ЁyH'3^O"@w/I 2˚į3{!#F٥^ O;r:|e3g$<.zUk &MFvm_ϸ.##.ko◟Wn]}K][6n 5,g~fQ\s(8<$'r˸pڧc?1˚+`Za;xS,Y9B 8}蝷~cz]b'x˖Kٻ¤k ӳ=J&]s%opTTT4i_dt5!(\ Goh3hp2,׫ooG@J* v=OaZȦ6ԛ-X@Ёа0^|1"߷nY/4ibwѷSG<ł,_| al `@.Zقlb5> iשn\xƠY|'zX' ,27jw_ðh߹ iX4$ǰm-:ٺ )5h7nD>}gtcˮ].^s/̿キqr({/gҭM֮\` ލ=-:{AsXN1QQ|,;v9F̝w'~'( ?.zWO_~,+=gJċ۷sBfʤ ޡ  7sXkh*+xX.xSyg3NGedx~޻~\s&SZ\|R9ŴCA1܅$O"n?5Vul\EӦyI'Md|2ߍcna 7\8lW^x>غi#mCuj֭]ͺ5YfyecȲ˜Mf>SƱv~+xZЛo[/H}6-{v /MW@dt̖mfW^s jUՊz?g`df֭qmqQnǃwMA~?^C$V-s:w xb]zd2q4M>>廥K|Nw_Nh, 'dwF4{62nr))*tCnNn1/[¢ߧ ?|p:}No*vڕ?{7]~) ӟ /8/~ұl+\z{7EEt#BpĉV@Dd$6luǁ,n:6_seo-q 3#FO'b朗y{7xOT/(g@؞̄XsOUxWyWyw>_gٺq#ee\8rϝˡY|?)5ڄ2wIHJbŖX72ԪvWķ7Ǒ\l׮- _7f_wˍyև&Fbj*fyͷ)a8.^hKmb\&mT^eeeٱaWG6͟۶tβ´V+EFEŒi8t %ī+#95338Q11\~uLzl o~~\`pf{BBY.soiΨ;ī`;HMo=?gG+\> Vww}w2tߧD3vJzY3fرg:}:O=4o]zgg#t?3G!}׭}\ޟ.\ȍOՙyEBkWI|?X~ɓ3?rr{b*/.*m۱lXCBr(+)%ZQPP@hXhclrֳQ0pPpcd|tl,s3n^yIZm[ZRLiII 5<"&[#44^ŋӟ`w?>Cf>lO`Z39=ǂc٪U5( ^5 IDATCL&OL /1s5~wP^Vƞݻس{GܴiLBKY=JDd$ނbzZG8]:=e}{^yE@X,^@HkӖ6qW{ V z'%&OXJ~)xeHQ0‹L_%{vѣ,|{zouƩP1bb5"*"1'+E 諯ؼc7&vNٜwEkӵGy`2!W^wyv&;l瑒Ƶ7¤{i`ӷVdRy++Q\p@ٰg/::`?K>Cq dKIIW^ Ȇj3^Gcȱ#yiG߭[ԭ11̞8[֯pp>>_!^չGOV~n1go ls=^sOqB>!&/N{[٪6 G|?Xn7N5M,Ziädz_֣'Iσ<9'c[[e5'"*SG؛_ȫ%K(#C{F.z\~GpgpxX4_ڻo_񃇟гJӔN~|/[۠Sn$*Kӹ}XJKJڛ$$%ӹGշQ1>1ݮS'ªzh@ ֍%cx+.]Kbr q(1%]}g}Çݓذf5Em6|q;˚ѷ> JVfqwO^{fȗ˗Ѿ}mΦof&^{qj{兩ޝʬYy+fGܫ'_NSƓٵw= _})<+6l&,<jI>L% 8~;e'yclt:%EHe[##8N|e.= nw2]l:n]L募~C.~Ry`x'YNt:kW݅ngο(+cĩ=$?z|~ {[MTyM|^#F# "[o͍͞'и{`< F]B{ وj,bc kS\\LJZײB4Ԧfhv6I^l咒(\.d"MX\.g`̜27?^签7y gsIb/ҸQ8(-K aEۜ߿]{rajy wT\XU?rCKHvYt3x&M)T]v;:Bxna->v(%$Cw'pelƎGbR tK84{c.O< 1qt҅E˾teI KDߺv;HNol5LWG20GƴLnʳڦcWM0OPU+V/k*   b0t̰Iba 6NdjRhJfF5xǩ}↛B BlyXb[ś(Ct! ^fPL0DLzVIH5My r*M5& &!Z':DF{WZӲ߿Ff߾M7ř3ؓ[@\=f Ӧ"!$6:d Bo0v:ЛLv f3N[%Fge%k2La8J1c/-KdŅã(=~8 r M<I;BXb 9ل'Sr m(>EdzEնE&m#M;AIR}Զ9HhB e9 KI<'Ф4s ILqI MV%:[a&h%E#q(PXYb3p3qU#تDg2+5[q*Ta U^1< gi1hpa^)&G^^sbNH~0: g w!D ax6գV~V]v*^. 0˅$Dn$ݐUe,w«$zÉhp`0pfle!(+,KH(2,aTc (* XJr O1"(9BdR*EGLN0 1m)8El r%M; '6=۶(<@tZ[ JmCDSt$TdJ#'&Sz(a ISw8* KT4K}sXRL!a8+1lMfN:Q:=enW5cCH(r8K1E`/)I^QSkl"yT!qʏ!41U"IT"4-GK͠,(;e%<#&M'Jڦy0Sz/32)=7)?д *$$ 9&a;~ cM^):jL8K QV!,WybmH݆d7[h= L#XBBWVbZqfN'zA5t*NxMTlF*f3N^eEEn7%V *ʱa+˰SYZ5^nܽ;76G￟VFcԣAE&y0uzE0zޛhzЄcTglAЛ,j&%5FkHnDF#E&LÒT)JnD"۴ mV1H#(^mk##t@vhI'"MF  OSFWVU|y0GcX*?yaUF^ˉ)":`gQ1J!"!,k(%~4 L%ch=$4pSg UPzڀәL5A($IBo07ѣhl`VdTfT3!8B2@ U-">AX"@@ddhQ*ТSFZz耐ebڴGBGlTmx>>V^n|!(ЦGcH( "U`Q%*Ku(V9oSAxA)\QQT32GU>{wVgtVw2n7xEdd"P!if(NVOZwfITޥ%AٍQcC& "ttf+:ոhSܢw\J %D+YQA%D` SWZ^QN!ȤV{ `LXx9DEc(oV5Z7j Pp` UP_JLj *Pp{:]U }m[jԫpQRB!Ż-&NjʨPo@˅EM(@і*%Q:өGgRSl*3Wz\3GހUGkd}߄[ڕ wS'#ԧg'#O|Ękmj4,XtZu@! L˲^2zVZ ;r-yEe M]B- |xeZBG@`M $U@(R-" k FJ BuX3ĺ^)g<΄`ⵡv>ȧ`ı^f@x_Qrt&c-OZjo/)5@~QVuA]_,o-{ڋCl6سă5Jcb-iZӒjL YR%0 I4 M@WL怪6Xᲁ6,ל 6eEg}U]mJq&yc[ i}NQ Qei*U>'EДur#\=Ъrwgjh\]@5<\ ]sS |B2MS*~QޯRrڀiYP6 ńh~Uobz1L F3%1-PQp8 25R.{9G׍]ǎxŴrcZ$AV-iũ"5MQ̭q)2&ɿ'ݼ"GyҪ6ǛOIj%ƼEɛϳ uWm>6䍾:ޑzƦoAUsxuV˱,W J" oS#` I A+mFBXokT> $U xx^̀Ғ rֻ'Oy#ϫVRKϩy2t晜u-iѪ՜ikiL+[` t `YV<=_[eV^a`HP eՖuR FBWk{"@6+LMGXq??U Z^Mɲ\˫Λ;e'J[bNjEdNuL{<-iYi& ҳ;?5o绯L ~]6ODdTP1LNeE1-Iu[-i^ƴ*#Y֨P4TRBe]nP,&9(K.R]Bol)ǓU^p$ %CuPBe ,7[XG¿6N!/BM/{ GxOw_qq1Òݹ*4,ߪr!_wo,Lq @UT S7L-PBH(3w`+L-G Sk Y?f0{.zwҳ]GOǎ^-cX񋬦wta~>Czt'dZEvjb˯`pj> = e!aAi!sbq1nYp˹+yK?ϳONehj/ wp+n=A]*}I(podWl Փgd'p8@9#gڿ]wܲ|I[}k4wbM ڟ8V٭ib?X=޲`h$՛7cӫmT ~`du|r̪,))49bF18βF0-›~9>~,!=qsmj|Kb0 DgVCZkreaZ2ۜڈedt}ΠaC_Ӈ]w!0[npCc>7ҵodRBZY@PUD}[J ]P,f zrPVV7ȘhenwmV-!ћMy6}˲\wh3MMVl9oc}cTTT߭ A^kx-jtQM,`PL.hӢ~/XYw`xoELˢEV4[)UNb:P2foPw7=ڤhyog}_Nf'Z tIeMMW Z?69dTPr3SAoߢ `Ϯ]4 Wiƈ\eEa;n wy pB‘+Ѕ!"+LVdGکd4!$AjTo%ry)шpڑ Fd2&aC| `#SM`}ԓһk n/\h06*+BFq{ 7ɲM,n>_s?}>^2>nY7!Qٍ@2˅a:=QX-*t" Fn ٢-VT\BBqb Y^>4{I#6(St\, aM2/k|2Dz&S8EhZ0-YXSPy 4lDz1'bƚFbMHŖ{S\L8 aN^pct<\Qq81F(xUZ>, wY1P%ŊlDgR䍣(Oٓ`JUD26LYC/E\V.< ]d\Q I•z=C{0ħ;.>x6NMx6's/w5,cV4;UJEYVU&S>XjFuq;..7~X.y7 x6r)%zJfCT IDATX,)h -^)4{y0TqD$bXT5:|ѱTOyq)!,>cGKJ!"RPExR G֖ KI!“)=zФTʎfJ#$$S~(!T%$^)IHeqiUIbsT "U>EHH=j%Vv[Ua]HTæ9@o Y^1,GqplǏ`U*F(89.{ndlǏ`IL~04lbIj-؎}XR;Pyo,eڦYam0ĥ,816;-k7N8ŔǑ3pdaJj! i`Kƙ!&WqQ"cK ѫƆ\^p:q BT5 a@2[YB' 1>FM3tM[ |Or!!8lJPáTCu:*+<S=tS- EBCqTVb(ShRJGb+)KD$EX,."$*ѱTCEʢQ1>DQY!VdPQT ..KdbJ ej J +.M"c0[jTXw\nrۥzeunvZLJZ"ڪuUމzUl肻cL"uE6JUsZ' dSRu֔\JRΘEcB—qʻx1VGC2Ԋ4P9OFQߪS/f0OoVl،XZϕ]PMx|e'kDT@!~0Uz70HkW(5Z vb߱ QTwWc<3u fq-ҽI$&̟{f17q _DEJT)mVjWc~ WV{ 'eJgj(1DŅj7!-!)TZ XsBȪՌxHR\%97Qx?HrjZFu&E*zdÛV8UugJ&o0µjyzUUYFѥˏ=7wǮ!6RV1 Z!3Y̬ٱk?G_w/A+`7Ӳ[,{RP´gc{SV9PXl)aaav  fɌ`@LK~1:vOI%",qoMзүyED x?9%I!!9,^zv]w. t'{|ljj-[c4;|fmڴoeE?}'1x1Bs#O SU'xy3Qب!|XMǘ.~7A8nMПq7D? IMO'19LFos`GژBck09l?^X?vshI /=Cr|>²[aZ nZ?ThyLN.i%dcZhBmf[&Tǀ"r薚`jr<'b jfzݘLVQԢ̒䗀G]+}tR*}0l蒚" MgNZtNJzX-M%$y <ùrx`-l+=?町J_ 9c;gȤ}f^_ aaAT+.֢5jm#k5̼>P≃!^ri76@W]諮q;ﬖ!bV=-iQ+-3).*bޢxgUrˣÏnH흑Nyii]t/. IqJظ\ޙ7Ut}t[hY }GY\PYTpGTWDTQQ7ET\Pd7i6m&L_}%;|Ιs7>7AG3]/fl7ФEK~9~vD``KlZ|{lú|̖jda]3-Hwnl:SŴ8eaϕmL+1΅o&8c2ߵk'̚|k/wһ)DUm+}IH9- ,Ƃ/\6VѫJlF. S<l^-u5 sp }[b4t)֯-7Yju+}a15NȧȨh~fw'gL[^f݄SV2d!!檝 c7@T Wy /S JV FŅ<$5+h\ 0}i~ڶmagGXv=!j&}nZm7ލ ?S}g&^8̩Q"cAxW0-l[^åiiL+Ggy¢lccή,3YFD[FEz][3<* \|R o2^Ca*Og>.)nfvϛƳn:fiOm[h4DFEMdt4Q1DEG Bj>3#+.r@@` 5jզfDjթCډJC-xlxƼ0\ZTeZbp_R|0|${Ԥ-n$ԲQE;/7}[SuecK+:OdY!m$k̂pu^vth4"zޚ1zX?}8O ±t:>%4,B '4,\9NXx8иyszS}8Qtً8L&x̆b(7M@ T jRd ۤh!&"l&+ݷ]p0#0  EFSEpT EGQNhlu үV׮L$E"k'{us QI>{>{Ȥ&dN&I+2$dOL:~m>y-9uȆ9Ld;NDRSΟ$n#rd;% z'wM>{ɽx]>GDby)V)צz*!*KxH\b& " c~.LB1* DE~ǯ\p{nh nb LFdCn:,a{C]Uw&# d 1 AV\ G.*@0_mk|hC1)M,GcwhraHxH8rjQ`0X0ftY$AYM%8RY4HNn\FGiU̠"i$ٮ@[NZfOҪc]~(s)m!B#z ўeXYU޿3c! Ȇbt*/6}˅y rUوQuo3)/ "AҺ5w\[/XN9g{c@tQV`+1-L T@ǜeN=x/ﺛIoO%feqhzlF.E¨G\OASgV*tiVď_,fk~>SK/$!(ҏoPWkP[^c5 Au+*Urͫ0E0EXi9لǭss CD@hbĩ~vJN]yzvxضv5z}1]{GKWHD(JUD(V.LD•iCv(Ҩ4KA&@iS&@Y'+kTU2=J8}%'Bө6, lmN*l]ºu7`0mҹy{ӷu*6k=BlL>~*ٍ7?]6ܙ{*iX ث-wlIU7+{ޥeT>r?mʴ__~j4PWSi,y8VD-۶׳Wp ONN>[Iv|i_;J;L˕d0p}h{9u\KKm]wZ/oh8) ZmO˶ym|I)\CNo], q=I$UJdqwJ_]>Xb9 >g*0-zvӷ6%y6jmzz7ģ_bȠACX8{|~) MMyv_3|Ex6+De@<u֫7z;ԔDW eYl6+iQE똖J|L>@ybt,FC=oN mvobZPrDxLpƞ{5{; IDAT5oPqczv)i44TP6N@ؐUA@Ԫē/Ɠ/f.7;5+vrΞ8N7($ҧmNyP^/kBU#WSGr"l6ܧTyrū3`)y[@r^TQWt4X}n<5f:f^zӕIocZ lkԄտ,|<} w=e{H<;YgYeV %矛'0-wgVishF"p SǓ7xp:)} [Jx~xDF>}^ uXb9v>ٓpTU[a,[/,w/7/i4\MBro2C S IEJZ6GSV0̠%sWt,fgҌBq|4-#xat-ˋ˕M.\bN-w,݃. q][{@8 !BJOʹȎƹdOF&ONzן|ĒYQ'\@7䳝-o`!|i5ctxgHaQ!8]qjkV=뇮w e':p9B%_R?o( e=7cӪ/ng4j黬%YUҷ}^'Br ;ʉh*/_u*L-$6=² -F*IQ&I?< @}NN>@AC=%jMr^,VXˢSajg kB +r'Mן21\9r$l Zկ/I OiWZ|PBe2QPU0-4L YV=}|O_N=]9}0#'+79Y zYvr3U,<#w+۪MX7nu0ѳiT`%(Cex] @J ›,~qi>6V+ܥz!((D%v|J_HRՔydExV]R z+.}MЮN ^o.1N*It߯d2l[sgq-fgKVلp9ָajCxʰJSUeF%^hB&*LF+"M1ň`$}!"(X}-C(T!HEy!gNV+/۶Fb"I \ &YmaQV0obZئuӍZb瓅w}uwlH%c߂ْA8ƍg%־B*MF+٬c6Ff#hdVRC1# Ņ  `a"$ s£lBq"")/}W5d^A]Mvrt|MUQhsbG{sD5 d_Y m^rx ڂ,JdCe*Vo;wtFtd9Nt\8MT6 DAEj֡j a(Jpg\%8.}V:Ad!'ITF`D4|/B.0Žm6!itMDZ٬1*$fJ:h4*x4 V\SY=T!Q0o ІaVke-ʷ YVVc1|_#U V@X*!a yi<1d32~ǎKw>,nU2>4VY8vV%aҖ%TGkQp,)0WaቱD *SD{qP\[+8W]C9_}5R~7Z5Z[qgSl-YW0G%FI=n]4̩o?!6_'gɷhФС3C R+鑘 6RSAZ.Bq~ֆ46E+4fT'B+CUaLWMwGՉ氰es470fSRa4p)vnkp2۟}ӠY gzTBuL/Ǒ(,Wbj+򯖗M_?1̩Sgrx-dZ}^*Ηұ]o;+Ip쫬Ɯ tQS:r:Hʝ}םr^z?m5sùQcأ7Zc+I|MwehT&Z1[$aTYGv%̩3fc+m*T$Iz[l#|iVz3h#c1zӧ`yܲu19h(A^YE/By.G hǵYKV ]/3sKǽ sm:LR`i@x$# {aa%թ;U 6PLF#UXPHQ%/  Je֐Njeٰis6`I p [ *;r%^-A!!:>CGX_M㫏sZ;B ~Q6.-;i$v>? 9dQ/pUpUtZcF[oXSM&DT"|i[/0]*#<,~5o?EU+رi-NdL,{G>NVüJBV,riLW L[CL{4LEvoK)fnAHʦ7dzĜJ鋊D da6gJ_pD#^Y 7k 펟>v%î|4ѥt}?Z`P CEF@j^m7cǡ2R.^ϟwbN-ys6Se4:f;uM1_e*]k0 v] Oܴ'Xwϝ}ӰyJְ2ɃS["<\úI3:t/;n6}O[n 2i5'ô:1-zFG *6~#߈Kv +sZ1t}wύw.YisfI%cʘW& W~CKٿu_}5pZ`h.7cdz)mQB;aȮ% [aV<v/ʫdeNu4m܄&f]A^.~??ĥsg:ѾsWwFbSa!J6yA@8s~މ>y1{o^cZu땩KRzsӷϗY!* qVط7%gf]`~$5̨Vzj*;7op_It߶;s]Hjmڹv+9߼IywC3֜xӞvU:^sxU9IU MHߨ15LKر[řcfoHNh3u7+-L 3.-qs~<8Q0-ol7˗[O$| RAI  !sݪ$|lzhx$ݛ JJ(uJ#gC{~à/Qhש+7zMohOMF#}as-.۞↶NGw~ ~ش$:v"%j&ֱbZ72'uG^loKZҩ=~aʤΏ5C!iz9cҙSl]gÜ=~¼\4 u6A4hފ-[Ӡykbǻ $NA+}„9߳~ v}ȨhCzD\|z#,*pxӶ>b YeLϛp.PEL'$#!=he^rq?O!y_ݻ'!2u6yۛפ95&P5#<*ڍQuL[3]L{t^.l}"6^Eph( Í7_;[+D@X/~iEmҗ4&H(42u 9s'} ՉQޝEL n:n}6qwe{`z\z/,RP Yv*M️es[iqӭ;/;C\>{J?sF͐pePdԪ߈j5k@l| k* !x@@۾zSQc;h4 nzɔMB6fSfaLmE]3ap+-:R ssv~2SSHµ+IOLz b:B S ysx8I[~nѦ/F>J yYV)xsoE~ K6z>-6#݄Wq h60?9u(iiWr‚| )*,|l6pC #$NHޯ{- 6\BVRaR븏*he߫ߪ*zlֺvdfZJX6i}¬E|Qd|,6d3t.Lo3Xk9r dl lQ>S?۠} ߤNdL\Kp!=Vܯ.bY#\KM#7'\BVfHµT@r+R.]s2]).rD2H|Cz{Bz+sBWwd^Ύ-@fuoXrXy99^վbMb }FB&R\XE Xd(cb[r--|^>:N=}O{#F?`SsΞ>?|CS ùe3߭^ɇo+)XX s'`uL7V&?6&>!2nP/@y-i/<$Bϝ^\汻nS{v}fY2lo[Ao@xyȁ @bӣȼs_~k)/ri780:g? p~$WH/sz> IDAT' 琑4kw3录y96f7ۘz6f֚yt^ ^;_^L~{G-  m oA}yrN-K޿qFe˷@򡃬sGEcM&R.^Ϟe?).2|kS ';IcG|  ccm^]ٻz=X_s7ϟE׃3̠$Pp2nH!سkxaf~5_zF^>ɚϖ",=o} E9`K|,e ϙ5,&Bm.R.!$ |Ν<A Z澦HgΤs)7ٯC(.,d&W3|1}L\d|4?ܬ,u?&G`_ [sJ Bs-2ee $&yKq璏r B( )>r,):") kWI B©V1۴xW+r&.XʼXWnɪXs,αl6O l<әi9.(:-0#LOŃ?i!!VcĽw1c$Ԫͣ⍹RAC K͠Q}/OMz6nxqnwɠQѱ{?2{>]Gp{o0N|7Ha#$opbb:iV,ͧP^d/;x8?}N`̄W-$ؗ'_xz;c7?ߞ}{aƽ=GqL:NL6Yh!U?Wf'7;Eӧ;8m.&9M`f/J?|g2c_} Nǒȸ |IBfGza"YRӏjٲ-[Ԕ6ͷQf-~ٶfm_+?~&ͨYMBDjM?AͺI?hj'5lQCԀ N VSLjoȵ0ejի+MFjԩGVu Q7LIHKa~yըEQA>9TY}q'`0(*'2:DA^.1ȲLQA>sd5RTZ;%ʆ4v~u 7~rޝ9F=Q9Z^dr:x湊 ͘P)T}Mwq4+Ǿ>*[^ʔW*&`zzDQԨ_5^޲?oeEt]w0p1lZ+to tYe8at6gՇDCìYL:۟2`R4k.& g㞽^^4WcEun܍_RrYUfLx_|ʣ=:͗kVDn ?_Vʅs<ҒÖ_{#\KMav='Om;w%r&8WEym-u(g@CĴwZ6mE9>G{`pa^y Q>f3B@|y6!3:=3oCɀvɸF1C3Uć='XIWG zK{cm۷2~`/%ooͮMkV61hN ܰ{sDa8g@({l),,vFVwÚ9~,g&peRVJǖ@8CvQxZ{8JtMfnȸصe=<r1ԌE ^l({vl3wLgdmC,.(d¹L ϼ3 RI3IR-d9d1rL-+?cy dAj4^>xVuƼ5緟|HleZ]|45%׮Xw蜕0a}vmОnyyٹ=;ifrk%ԤgVlZ.&26z8Ylc-hҦ=~0gq7@ϸ/+dޯ~޷[iڦm::j=d׬M4@z< ~נy+{oFdD~dAHX8.G[~nJh4$5iamsl| 3M)43GӨ O`[ct!/͘L&~lOWK|j햽m/X~P6LyQdf <р, ei%AXd5Ww`p]ywVYp棑4!R~ڌAV_@THXtJd(O cl6+KuUԬ&EwHA-֘LZ\oԕf\>s%a%z 6$4<'H/A*Y(&YLӶHtFK cx; ='\Ƭ߰/}1QA׽Kgmo{(..2^1pG1 <ٷ+. Gqw1| _MUBTCg'l8} &&#TGwcCiԲ uz"י (f-d3ٹ-:w'?7Șxk"ޚ{ӺU| %\'=9u9#$?/ Cϝdvwo-bƟuLF5YtbXgtӞ{5k#ʹ#Wүز3=:u@LxjԭǨu,|£0苊`)mn&F-Fo爈%j*3LjONf:7z-%sAs|#/~QǺxQbwo: ss~s֛VMge\lLNqؿ~2cumQ~Ca]Ų/h*=3'+/W>^ݏ6GwQI y7o?>Iz β*LӺukO?h{+2ҩS_@ bE7a {/Zgbxw۷s>GM]Vfgf0;Oa\tn>4p+7X]-ҩNo6yW1au]L/=[{Vem7q  K4 sO<^Lzg*{1l6t4I kNȟBaFv~6yoO&((3w_w1tJfj 6͜wDs/ZcwKh=/ iW8e/MRz._IKC#R~oX{p`:7z7 |HDiF"ccڏi/ĥSH=qsnO Lƍ }Jfn>FYP=.IM[검/ *~8B]<ϵGњiᅲ֭Zy^//- //>߼O_____E///ρ),.?*:1o6AKߓ$Ah` 7jE퉊-c_aINNfwߡj Y˖$կD2nf-'Fvv=mJL+8}}Q1 HA<6k׮ٳ<#z'+E () ح~e8&?p'N d/|k\l%227yfhZ… |d  Nu+{uě}g.aV[nȭ;A}r,>/_8Oyl``P+){K[>dgEՓ.;5.?\ݻ蟰4H{^TfOcֳ}d/kZC{РA 锩S䓄A_o=UԷ^Ʈ|y3ss׻ LL̈Ot`2 upPTZVY 'ߙ:OXATKٕvns%Kի(WGHs.vGF0z«ĶlϦ?\f#JC3㫂_1rE9 vVF5n`<:-W]#{EloA{STl`Eł]QQ,(⵷kذ` !o1lIvMzu2sf9O-&{?lu8p^ӧ~葘gx*o-Y[됼}p=dXOX`ɂ[2#fWB#믺{}=K-$'wų[aȠ7^zN{l ]XP@8+~hGv}LD姟b9gE{vഄ孀9I MK` M9Q_WiڥźrHpIj_7䆅 OwFh+A?LE=q#tCQoSPDQy5 f 9N &ST3O22һ75kĸ'b"bi3>܄xrzql@\9aa|4ɶYTgOۺ̏>G W\#. I]k6u.ϭZsN9|T4q;[n`DF"' 8f7o M;oup)+yPX]ƿ@e%&[kN:X3N?dȢo 1}#ɓ_Z]sy1?N>(mc'jUײel˃Ļ_}/$-# :=pMc]ZnCC8ןi`a!oc )%yssٌ8}±덺O?r'pЁ,_|G&w_SǏ1#xcKJIw~۷ni0|w\-/^˃ù'O`z=6_1v8f̚rsOgQUv26Q8Kw, bb6jN=8G+a g]ri?r&NܥyN^~McraZ;r.h즧4Z-3⚫lsͿ{KyYuu|{sC˖{!SEƖLYYo_Ts1p}@T_5G`rI':pS&›o#ԱIO>gQ|o48j\F+s9 >y)Εq}Gw}=V+~btx,S3G?xHȅ7K8yکklY;c8{{,㣷$)5dq9?i27,ZYE5<|2AIL\ ٧N'"=;o>_[އI'pE3Naq34W_xwx?<-o|(n%3AA}dɹg)~/vnNB^cŹ"`㯿1g9[ÆbaĘ[nRVXԂ#N9 !ǨqG'1v1]'o@43&]q9|%e9̞3?l!;>'&>N' wr̄ 寧~{1~~-GFX٧MIbWY%~Xˮ;xͷ!o1|:r{ɇW/60- ׭#.!@֍INM%=+E'O*++xpɝ7܄V'PW[֭Ԍ :nBSUY rR^Rc0Pa(QVRP AMu5T|?dh Y0*ھW?Y_iӳ?LE ymi4LV+յ{NjKWΚ2w>|f }=.;7slf]| srxqOЏ?2 +=e--#k@(k2/5 9ƻFl\ճe z IDATqs׋=/>4>|mNq{uēlڄ˯dˆ<+A++-e'XCrЁl/D׷`X[\0}2{nk)%ٿJq\η[v0o"ԗGW7z#GgGv5֍qKV[Q d!زwX^S<Zr>9W8қ'ѳOc:6^Z[T=RMaߊC@|}n|iBE阸X jdE|bBPظx -$5_6#Foοԓq G`pn[B>ȱcy_f̻u!#sIHLO⫯aGC˱3sB$IB5YYcF}}]edkc$U|>/ZVq+7 IɁckڐtp”Ȟl_Ԧ+1wW|?o?IJ;nn _ !Z/=33V,hh Im}ҳMf3g pt:e={}G1qAck5lm4ʠc\o]sa?at\_Î9.}՗|ٝ2)4qHHT)Sy7[| W_$1)6mFHHLd`V&iqXP5]_W\w b]M-=Lm/ɉQ"FI)3q"1]-RO+2wa"s%\|i<[)kMsY`3Ŝ0yjci+-Z@ߓFJJs$dGdnyEh9L<+=LjzE~L~wMw5S+/VMsufcl!=(c'N \cNglݴg_{=pESYYd$8N~5G?7^y9peQ[UM|RRq?AiXO&z*0Ý ˟x20n'7 RB1F0z8yb%_|[/?{p>-^C0cO< $I0jj¹U?r}INn/6vso]ȃwAsxi>90l>-+̎mww篝M&2rz/T箅 y{e̽2Z6N?$jkkٷw/w{/^D~'W̾h$33:\Re6gYdddRZZ€yÏ[nu1أhW^_x|O;=DnzhmD)쯽e#zfq?ĉSh4'NRsESgcZ Vxd6)%斫.cۦM$Rr'Oac斅~FHGn/RS<'_'N'7fsʨEXk?d*|ܢS4wp`0Rloh 5\p߶ w3/]rm޾ޠuq 'nΰ 2VyFe_{Zlmܸx 763DvWۃYVYr W=no[z)8aTVy? fι"ݯ?3&>1^?rc %mss{{^WcܱLJ Ip9cN9հ2xz*nFf^tM㚠Hk1nx&z*۷n~B^qjܷNn[r3.{}=Sٺ$K^z _s-yS|u?^i1fGλb22p:|Xcl5 Xr';ob v;2RlݯގŹ{N:l4'O?U/ !B{!(G _f#Xg.94f_Rә5rnr{[ۚjf~_Q'?&ͥgigwN9xf]~}իr5EQri?܋$I\;|}>@ZMbSuqH?#&6."u3Orm7I z527f1k %ŬXdxN$ckPgVvMw~I-MzoGRW978dIEh; w,#4cG/f7Y뾣k yhՓQg\|\,jx0M_[agd@qxmsɴEU!Rޢ涻y1&$ )**ǀr;#:|}2YϤ9Udo'Jqy\3>G}t ^ FQF*tI >4R>!#QZIB|.dÎ5]hFNZӁlЀlkGgSW}lJIx'(ŘcR:CBh?{8svn$*bcqje9H4d/ju:ze^jZV?I'w$-%wڻIɥ =>tLjMMkR lIث0㪫`mch@o2u9xnVTBGIArt шBo6q8Л-ʽ-V< l81i5xJ0㨮KB"J I4TUm9֤*˱$P^%9{y)TXh(/NCY1f`/=aOYY)! WM%D\Ubpՠ⩯`PbPbUhdr5\h F&|C7O/u YPxPZEof\2z|R3c.fwGCCX0$.nR;{(*Gc00 FF#23"#+,22H$95q+An[BVsUP^#J}^ځBdj**HHMtȠ,$%;҂RszPVX@jN3IE|2zP^{О=dqhn &3v&o?!Wo3RrzP^X@bfUŇOK4jʈMN[bU`sL,N{=& AލlriFΛ>xqB7{y~!5MɲɛL,Yh$UheF}/^B^KE>h4:dp Yp>RSx$)IJD ro@S6kTC6p,hJ>7*2N0ᯘ%-xv$ICoVDFOU: 6ӋFc03[jFdrBcT[ؠLje%̘əJq4)-G9|`,ImJ{G]Ʋo~lM*D*o11{5=6ٔlUZ}ǃ5NIMUKF> R9#OB@vA䨅r)mϡ#vHkh@kr;|$ 1t$QPZFA6s?$&9C:C9pP7-?jkRCY U&y, YU_%>; C>Ƙ8UީD+: fV igMS֬--C9Tﱦfl-ZkҤu1.0%(OV[І!.!UǯW[Ey٦ Ѫ|AF1AҠ)z@~[jC'j*Vb4].Z-^^ߺ\F*ʣh7`4qm6l65XbhO]e%D*+>JKNt*%ĥQURL|jժ.-!.%RbR(W~uX٧{ba+JS[\DlF5EeP]\ Iћ]$G$D_H?C8uiRc+iSm3iGPmCFRFR |$L$ */{*}9GlVOjC}A45qՠ3[pTcNLY]1.wm581%onb7ܵz=WQtE.⽓>ZQQVBc0^ɂ@gs65[:hV|;: ÎlP5o}8נ5:} ,vuߑ->Ʉ^Ǧ L dSSsz|7p_W$ ފ"S詠 f) TbP%d(B*^ZqJaA:C¯V$\" ]S;k;3 nJmQw\f().Fӡ7*^*:2t >ߢ jcML q)iV6$%+c|6Q J7_|K<7_|N^89},;!x.3ћ,ě:\Uj V)hnbR=x?QWUI;lݸ7|>22r'ISH-HR*,r(%)^#AŋaKMGd҇l= ilE䁊#eP]UJ% Re.z)J\|P^j*1'3[e*eB{wTWAu:@A К:KӪ`:>T:bTrgCYgSHkPe͍@.LU =C .JUq 5f]r--~!WqѕWw8&TwWB h5+ ꮍߊ.LŦ;0ҶZ6;鹽tA#gJDw1FDukǟ :ؽcbکת&\a)a(1][)ij?GWѴM{7R ͦ#5\Ю;t,}!~Xٳ.WgFѺ7 9Ǵ?cӏ)ؗON\&L S2zܑpTX_xQR™#!$%-Ri^tHxG,3Dl[t)x4]Z@W%;k'|%߼UjyOsg23HIK {K aOr ^-%M7{U0 -ZYF mr|A2PLuf,Hۋ6Ȳfߵʾ(9"2;SDt݊{ L.e!0Y;֫݇E|wy,hXm oj9쨣9쨣YpAחW^O>`12)L4JHZ]ZBeg{%@9 cWGDm{rbm% Ys;##P|Օ̽6ssC{ϱ'g0%'$,| ;f`JgAáCyFy`_>Y=z2s8虗ׂvu<]{YhF)5=^ ܦb->CQ7h-uGBxn8 _p{XG簼s{%a B)tLWo^{aQkKr@viIƦsd$ Y$}TЋhJvܒE%Fg{)2sTΌ nбFl6mhD6ܵRTf>6#ED+_'}:!P^ӡSkW~ E?Yp8|L&jټ5gȈvf*@eXn6f!Eh(hW1GݮG!L/O IDATFcX+:۷qĠ:8;K9ivqW1Ԇ."PG˝R~w;p̀ތHgų˺+:$tEg c"hxmمkUEU&Bw]83g?DvJdYzGN3drg=ײhA{UL&ιⰍNcg1ҋ)|w' >l)F#5|a?!-ۥ0 lj˃ @߫ vVط.׎\8gZ/\9YSU-5Rye*nZκB2s}23(+VxˠFC!Z6,>_:B[5ک9j]'wJ޶kOnL"|YSñxU3cFwϞF ܕ}ݜpx^png?##3k{_ǽ{靷E>pÒ{Ͻl,fs`ٸګ!}y摇uIl7"uuhC}$?$V> e%jV^g?rE@LʔhO؇5:\M+ᅬ,qll;/^QLdaG D<7]klH7=qK Bl0i6#`"4XXiMxO[_/ȄcٺyrXryp\-R""_moO8IEgeEËI~yÈ^+`c#Jn1d-Qm-7=ydQ'?N)als @(I @+G/+>X٧HrJ*|9BC)+5F,2D#:S5Mr} acO'p|[JGM< #F f1E'hOͶrKO=ޠgEth䭯ca#0d?:B)ڙh1V<0Ȫr0ϫH ZEҩm׃׋F):Ъ^V^tY>F_&h5h  ^5z=ۅd4!;hLfdgZ5f,;XbkZcWIW[&6_u9drx1MW^69 _Y!>7=QXP1clްGh|;cEe9O+R(*Wҍ`t`0q;0*g}=5c-+ kbe$RSVLlJ:KϢ` Y9T'1'Iٛ}{IGO?I7ҿ>`E69x8o!uJvˡ[8XpxUkI `$Q.'>'ՅImQ1Y*"&5{y T1'$ᬮيY nɂD7*zfʺDIR0D 6 3[x-;z -ۍSY!.Wu%DՕqUW`LHUU11We)TRqVbJNY^)%gY1 0d,+˜sZ҃cj&R )0$*G]lER~>95(+^";w/IuV:|s|sN'7hyͷYp|<$|>3e˯0YBZ]!<#Bw;mobZ(k]Q fĶ&U#p!ç 5@70}Lq~ܞre2d6xbw-jEs]YH<Q0"fcܱm onIJu{u Gm-uҩ.>DBfEIʦI=(<@rN.ҳev_>))ۿ^yMZEZ^?"!3C JEJヤ&go* _Y,<.#CEĥgPWVJLr U|'$P]%>g] X\u6V/|+JE:L&5yh^ZK*l|vv?1~DRr $!ʵ *CBHZWX+ZAAU$>*{=j >"*dV׈ /ނh'VsxR+MI*RP% e04z=hhJV>UOF0nVhvШȩzAR[VE&(]4KRIWGOS'͔ VDVNY9W?|nZtV Sph`]YY9c R V~`D6IVN y;2X(F1ըdhWi7CH U9)X#Z5ehE̩ySrE}_S3$ c v!Qt*.N*LS0R*p@NE_Ph[6|SQs %9}ZM/dMU .y2y}$e<ʲGm(|&qh|^Z>@u xN#n`6jhdڵ\~ zi[OqԖ 2uXiT,2I)JhS*0'bW۫*$$PU%>GM5x5Ucp"-W} W]MVdr5(F:IZR]BdNFҩ^ !jફ`]W16GUdeXҰcNIQZ%- lY=;x%65v׫{wg 2tXXOTAھA;ICRwjf fVbnbzvr{`᭷lC 7kb!\qFlSS19]TKT,z[tX|zfhFxHˉ` x!էz䆺֬5ZU)Z$k^Fij($=ĵϾ#!1 /\gV1O9̩|:])U4e4:$Ѣ2Kn#J,Ԓ~~T׼UToFu6UD[`sj*ԄMvH"wD L-x狯Xm`~̼6koYY?N+(UhGFێ5>Ͼ='/b3szp@jr-S-Z]`jZnVidru;BL JSjwOG<ʔۯ Cwޡw^]ME H8 k߭Z] iJar:Y~,YXOJ2zq(_G Hd1O?'l^4i7~@:[7S횰r &X]]-yTC%=[\y,~ H x1!-H&g旿و܀ "jh(*YJTKqSsܔTWV蒅s 9wǐQcgݫtuX 3*V _/HJ~rvs6~oٰ7_|o%1[?/ F#"jaMUDtjoImcANj CFcy6rT#ۭx;]B4R9lABkۯc~x#ko]u, lD59REnmYt"!ӘIkw*Lfw ٩iX1 dǎ'#+  )Gh >b\(]=F LKjqIܴl7-[opc))*bwsڬv~Glݷ!mPѪ2\>RoyYHoΝ:gݨEѳw+]p̹n>={ n鸗\ARJ* >eQG7ee *p᤽& G ﶞucJ3Cj #LoۛH%3?+bU\N':Bż\RC'sEOȞ;?@mM5%%$EOᕤi7*n@8ި9@SnG+F. ՜B+o,/nޢ^=N YRe. 1匳XpϽaP.ZQ2HZMs]B'5kź~D^NApݻOL=]۶pM 9M:õ蔒I9Hю_ZvXeۖl۲}^RZ;²4 ?wԸn㢗ZEyi)-i4HqjO~:?.c9I,^20BԷx1.avc`o ) |5oo㿫@*a~ ۯBMuubl/. 6d-&6TA$3?ڵO<ۻk_;IJMc cyHZm2 J6B; 9IEccΛi]*D'$%g7u2?}GOh2E쩭Cr \9 >`ѷe!ZvGHXl݇ʭj^dB 䙏PTpg?|Ǭ`0H=޺,¥g.3:|>ɠgy}]yj^GR }%baNXG^x ȓKuEZl|k7^!}y߰ <$ p\)!N{;wuRX4Axt=ٴ1UaZ'E~Ք=;w0Z\cZBgG׺WIRZNXI)ܽZ% V29(lمeno}ݶ6#]#;y[x˵edtʸ(-=Rimy}(nٗGL&sTs[R{"f8m#Ș{oVUbds<<Z&#ۅFo@fDž?*HAgO ddBj'ˁ:m֋FiT4Πňv1(!ʽ}x]| 1xkMlx$୭@ }b*iaH]z}Z6Bi9Ð |qGMu`'<\1d]|xMW]zХSr]J޲tYxKWQ&!). Mlrm%5d^d!rʎz0Zn>"+{%(>/ u#fp5نkX׀-^iSr"nC3~G|) )*,`5<\YBqoMx<&57ʴgDPC Pݽ9$FȂ&(~';bfe/X͗Lҋ,ZٽB֚*>7e!ߤZAe,8WWUQ__fnr7\Fzقͦ18kk0U+0'$*ǒB}y d$̖NmAb22)*$6#[ Ϧ LKbKˢ[ju%EXRi(-ƚNCY 4ʋ1'PQJYM7\:ہـS\"r#Z1xjYlx[lxT(sӁhrPM5:=BQES& oIS|.˦LBR+x[R**qk*1'PE2qaJY\)#g~YpǜG^9y4؅g?;{ Yzml"=`5mXaX !;];^HMtD(A"UQD`׫ū{b( RDE"H'N$LYϓggNg*{3d|(XG9&XrNKZpm| 1؋Q$`?WfZ&:{i Jr0 $a1VdIj-8l( F*E1t.( t<,PQPk\ Yemb} IDATfJVgs荲r>*+*$k%h8*K`ġ3r_¾.gچ߰y:/?D^Nv{&-{9B'1!KyYBT*pˊJ᰻U`WݎJ#T*:FWe`EfT]ѸP}Sv~|"" N_9t-8͐@%Eh4n#eI\sxV;L'멍 F+π!#ig$$F)ơ^ު꟫JT v`^Yӣe@@`˭6AbMt 6Yӥ(fV VBj@h,Fd!_ѽcF:B]@kp/]Tѱ~nM2NJm9wF̥c`ɓ}P µJ"J\aj!] fjIie 4]B H*"Zt:/ #ol.oh*'ɿltYeZ] [MK1EA8MB*B/+"j̥d=IXs)]uǪJ$( )ʍY:Yh;(9%o>*/I7ߧˑw`z^ԟJn΋%%X87닪(BiNש@+ZRV˩E۹~HrR)5Rdp.!gV kx2u"ma Rȭ@hvml6OC~2*V+VXg~H@7.jWO<Л]{,*A78G*U@w<\c|&F>{~^.Ka)9I>W<_o{f]F^3'[oV)/k!+X gٓ\G/ygH:wO|TD^N6?n=/\U3Pwg\w^8r\~o}EH{OnWD6u_#h򼻘<.vmҲ}QqAE %^͑|qKW:t92sZko呲lrIY~ KwKúw8$ׅ-95%Eu{TϜ7sTxs|18y ..u/w Z5w<{ҭG/ױ>7NĄ[JAV`JmA77]3se%|gO5ZIFWߥz^k^yIfYssCn[{@Jwډt%5.s}Cke3L9&YYd7o&YM$huP!<ok54֯%Iɺ֛ 3g.2'ޭ9un*MYp@0!5*PrXQu?1\wÍn;Y2z'{oZ2w6YM5NktzϊP qKiO{Bcx9'`zx7!x%6~_@v?C30cn06ZjMyy9AYìxa:vʘk'`[=:=8PF/[!gƵ/kM}vxvʜL3}w2W̕q띰WJa_u@$[E5_\kp&\vl܄IWz9.߁W )G*^o42~L\OyPܽ~/j7Hg ӡ&BͻnxBFxlݛ^pڶ?ƴa9o/3X57܌gK z'j$ӇZWFHw <{,]p;sexLl?>fy sb|xV^ϟVI.ѓx>{`9û>6K!+T&ļ[$GzM::|QmWKwoF$g@nn%#FrQшfw5ɳnR"9xU#ʃʌy%qBgz,Y 6]furfݳ}3&+[^Ys /Y4XJKpms7^p7 8lvt[!@%Щ>~ wL+}Cמ} UPvAgQк}GV}9͢ױq\9Fn\xQFNFY{_@ qO-߯ѕ/1dĨzfSE0B[n-r,FɫWQSjJ%|[&oPVZ /W^!\tK )P5^wۻT Yaw%]r! %i,+Yg{]@f$&%ɈKJVaG׽t݉lVŪR5P2Ղpر+ 2:Fjvᄨ:~EONF)UTT'J+w=`uj2 |&r]YZHkцIl U6Fb+;&2FA'vut<|q؊Ƨ`+F54ڤt9&7}]jS,gMk!tMZ`9y}fkk˱hZc=~mf+'h!-:6ScⱜMJSl$gb9: SqA,dE9HI|xĹXDIe\c$TWi2M"lT-F Vb R!BN *JP~LPZQPZG:ID:J:# R "Ӑ ӑ NH@ G|T'ObOl:,TyIMQÞ: Ǧ*> v3cSP4{dBi@uBevaL5)7ͩSPzwɂAԟL_# u$9Y"#~K]4szÒ)Wkh١s][ %~pnx5s&Ou'y2O'HL, )em~D* 0%PY>&sq8,h#5EɨHeh&lJnGBV9Iwœq݌pz4a,GuD,pb+D0}|l T=66sY)2*1-07"⤌NZ~ ƬTIѢ=Gch֎{16?Ѣ凪PI MQyOXrϠ|(ڴXCk IMF- ڄT}4. {q ^R**{I!X%ŨL,ܺq*Cқg53n+FVxŽHN^zBh 6PknS-ţ!*䵹D2jAFPu^Z:jRƜpZ2h݊P](u[Vam(M.qr*!%%KJVfS<yMCNXg1qu.!jZ5HU"P$ 4IتoJo@82 BlZRkJP;j*-x(΃$(FME-Ӑ9. eSPICz+8u2ZÉ}vH'<ձ)Qɋ١_7nl:>Ѵ#ca^Mڣ>'֨žUa)͹c-x=:R"xJDU#6Uq., bIFUZ#"U91sA-6 Yŏ>HϕbZPKӳ[T'z,5 ց) ˉFUNTRvs%*օXs |`R3كpCt ^.&^VPI5 AI˨VFp~v@F*Q i &*ivK}Y3ZSЧ5U,yR1$e(@H rN mս/t˒^K1x~bF\;nf u7`9҄(}5-+iFER YU+(2%6'Pp*Zj~84 "FJ6h\Ku;DxKй~ƏsdrNҭgoJ}wVWg` e>[_BfѮsW*N:Tn3eDF0e*o~skaIF0a 'XNՙK]"jHhк%d6mN=i$ZCEq!h^}=sI1 kJjDm0`D7XPt-fԆJnPI%gxJ͆fs%9,eFrx4w@ƈǒt*H*$Z> *IVlOlՆ+![*EH%GQF*KYV#A\(j'hdR* &:NZQXӹ.5UxRW!%C/o(…VB#U,r(Ik!ΐUdTPIJh p4 e[΃MD{z?t>Q0Աkw8OAՐ٬[e+^ISkdZqx@ E}몺'8׳c{ҚdQ$yY^1j{Q}NLQ1L=g~kϛŮйGo Q[h]Y7_$+aL;+aĕ48 ǘp= C {.SW7{Ŕx +a#O5{qSB Rjs$̡0vCY` ;U+wo]φo`0$F@7~LA~≯GʞEFlUF|eQFϓT$)-sr$|T6=0e$ C#`v)!yMbץ|qgYu4i Cd7ǩ[nuɩLju]nZ^AoC՜N:WTȝ'痟y7y߯{)HCoPh:%I%C}Ъ =~/?%)Z@GQhP5W(¾zYvy%{?棷A1 vҪlHq IDAT$Lp|9ϑjIKfOGRI<*7hCn7mwOÍww#o$c;zݚO#J:h ''(`ғ:oB{Mnk2r4& /)o\dPqHj"%YIը%P,S5NI?u`cu?g?~:rMZf}Dv>z }l6+ΰ+z'*+*Q!Uv\oײ)ԙ_~QK ɶ<5@{B-;a=*Tt՗ν2GٷW~M_~ʡ?~#15~CGr#ܳ/qo4a_]=?\b]xc/Z=2ϙS ;:.=fZ3,}ve$ VSoZQ<'Py[uOIqS/DZf+?}|}c#T1^T*x~Vcp JWG@%\R7;`(x8< ]л/ ?Goן|Dl\<w!3Ja/?붭<[!m;XH5YIFE#YNBjL|fghx^޴|Ё[p^!U9ؿ=ПZ᣸g0ss&]ͬwz*͕Ue X5eS,A@$$x)P i=fmc.9sO^7;lb9JYV'mtmn4o{^U 8sa)0yc h21'&ʊg(ˣ{T*5Zǵw@A!Qp} ^]-xv6px/Etꭻعu F_o?ocث;y:wJޭgoO6$o}҉QW'r^KB[. xLOyﵗiz_<1&o;vXv퉖$j5コ\FBJh [%13WM!X4B%eP)5x 5_F%!j Ⱥ3t~ӦN+y ⧝gpUcٵ':vLEEڃ6*gi %~;w}~2mtMgYOiZ㨎A:a_e׮}uӧݷֽ3e|awzS5EGl۸y<_}e-^K>שe'rQ2[Ktه.=,$rKZɇ9 FT#y뵞 )v=ƅCxU@H3ZM)фJJͷ} u/[S$ܐuO=[k!l / g.=?~ (wc67 g،`^(n2FD0kqcm磷`ւiֺ QzlMJ6~{/ʘ4 aM@@,Rm y.Ƶ XMIlJcjrdl-'$)Μ") rPptzi$5!)=Ĵ&$.DąNػ d[O"5=Sk5p^ȕOiGb6sVmXO>9K;N(ﳏMZb;>7EnspVZ?qqΜ?"[~:<[d?=}3=#ygN{ *dUހNGӣ r3j s1\=Π `"!Z,X,f,f58UVX-ffy3VŌ,_cYYl6 hfQYYAAn9`۫f- / {:5m)FfaWP-f3ބJDT4V&Yt>e+*MHsHJM<2RVVJAN6Zpq<@bJ*'pS8WTKL4/3Oa3ǏaghvKK0"BPQZ(W(+u9*d{N++]lVUfh4X,t:=se%z(+Eg0`ހd)*shu:b8WXZ!6!<$I">%۹"*m6R2(jެ9Tٺ-9g)-.e䜥07_Han'ѩW? r9qp\| Eyyسޗ8?=[73p5Rv8]zQZR3P^V7ʋvŗbK* q7]CZ#@1$o7/ g{xӃ^5"ֽYB\an'\EպUn ,v NnSdV"m`Y97f_=|Μ:Aa^^.Bt YMIhd+h֪5$mtzj]۶ҾK7:lDb0e&ڶj:27o].DFӆԙmXO6HJMcdhEjL~;4kNf-i:iަ[7#!9V;}DFEneje.*[6cנ!G ?t8o%iǞ z]2ftɎ-v\_rx>ּ7-yGO3Μ8<ΝO ?'w|s_y^^~.%:&6(͸~2w\1yjTQ3Z[%Z{y)NB eIFl ΢u3쬋_sz:bXPk4HJuz eh:4Z-%UhqA>:)* 1shb>J&619">93vқ{Vs%M[}slݖ))*y=MޙӴz!9g9}0{| E9tCAnǠ(.[sHJˆu9sl.:*+w6q:V/Zil~ieo< n_"A~ڪ;o1gČ{!"*9Zx;7~{YD<}bj͸ISKAX$TūpϚ}Ut*3 poz#ǸEM~o:D ɱuo?f-wÈ {+ ntxUO#݊s3|i!lݰ;me];uh@ph^fV>C(eΝ+fK7cPN1񣰚- N s JxhyJx꾻9{$-G"#;x?9/r9ž=O>䏝M_@زn-{~ن@kV~'=lSޝ;Vpp޶!?O˞?㕛o?˞sd<@?v*ٿg'0߳ !jqdv ?Bp\9q59O& 7CZMYERXP^^X,U*,Cչl&4K02adL,:D%`D!P&&#Hŧ@\r qrs|rIiM@@RjiM[*קZNLMY;tBj:m^(t!@ђν⒒12o lK犊fx'M.ow6[hԸvIKI]4 u Gla}|.<~楪I~\ZǚQs{&&jGKxqOtƓkR2eCr6㺵n-[y9j`Et *9wznyz^-Y]+In ok+|SGpQF4?t\X,n0u78 n[ ڀ過m(ų.lǜa1nmV+Tj;JBJ+4i4Z-qaZ KwT*+Vҷz~P\OJ,TB,  ygO$ 1W~FAhtzS>>N`.2؛rϺ7^`E=SgWa#0L]wO;5}&$)}7eɋk)//cѤTѵrOU.zfOAfNd-UΉch1C%S;1w s#Q\w\y9omߏGܗdL|[Y 6LֽZU9l׾熻%C4:uͦ5^f Jhy^G}e""X,<s)seݡ2Ƶs;rTǽPv(ȯ?~|vl9f3o@p c~} ZF| lO5uM8uiJmknMW`z5.}O=oˡ{x6a 07DR\?5C pFAV1^6+mvwYU~*IkҢ5mʈfz0sC,<<=Ol+* `4Z,#=毿Ck'4ڼ_6σ7O㾕m~(V~fMWdncxt<ŹՑ-e촛\o=~ STڿj֭2nloտ|S.:ClR2L1nkR{߹YPuC80DD:VG(+ñ>@pm Y<ڴEC=n d-rbJj<_\]O@fd4ofznQ[g8N 7~ᓦc9>K8'|+ 1-;c,A!Dw%7X׌ʘ5Mm;l$.{ _u؎RѲ}GDV~֯;n&15At[\._*̻Vg疍HBJCOY`U'tx0\ը68\`6*]ϺT*Wdغۺwpz;qgNj z1h]z_Ą[#+r}qyYWG=V#)#./r#\LŌ& = 4__y )*n6lNÇ63`n%yӽXVoS~^kxk:S>|q=.{][7~~`gh*XQg2rL׏cjV Pb~^yÜ":w9ncţju箻j^.sePLΊ_Bw[/cEELsSQ3|TO= \\XP&La؄)W̘]zKHjƘiܾoncuKԂl#Ϻ .l$ny>Wܣ"#)++s?:H*uam:*.ֹ;N{yپ[JJjՆ+DKx*|uF琒S/fգ0O'3:FìyML$sP&v7+9IDATJM}3xgEr9%"*W_ϸ7е OVMo)մiSJrW-TMTh:vJM Hq*޲@@9}w|(SC<(9KMK׾e#?~S[0ꪓ}bɂfqK`I A:߂LD u_q検SǩسnkwW[sثy%A>So»MvlSa {Vyy􀅉bAVofO#11{V/b} Q A]kG5^oȭU˖>Ǿ}<.zRdK s+ &u+\3| Hqص{7l %.l݇u/v$=gWڦ.AR$8_Zظ=6Z7B=ı_&)OrK6 JJJkf%ɫ>mH?scvo^woFMN o;O>3bt4:]B0l݇u3c77asHMM%La S0PtI~ڶGRiaռRUy<(%#;Wm6>PK`ԪG.tca S0))La S0)LajR La S0)La +a S0)La SŠ{0)La SV0)La S00)La S0)LŇl]k\IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter2.png000066400000000000000000002277071247673406200251700ustar00rootroot00000000000000PNG  IHDR}HsRGB pHYs   IDATx}wgv2%P$fDQ@@TňAEEAsĀY(IHNqf~L;s>LtUuuuէV4 _n  =s%ץK@-ڶm JiŊٳg{8DDTQQVTTDsڅpDiIlMN@Z9}G Y =(mmש]ȵ]9ZdggɝСE ]28d]:pM!)Aݦ5k`/u$]o9W_U:67>ijM*I}fx/həkx{mmۥ,YN$m4w]sr&3GaBf6{{Fw]M@1HO=,_A ᵷC,c"H0c&//C(+N@@|q!$s0A@Z5qA玫Df*L?ֲvM+ o"@X sr"+'rrz#68p8v*9zpR<(9\ABrI$IfX dB3Ahp~"C]F;DQHx !"Xm} 3 Т1^\P8a<7V~ g=L,D yRW&D;{U [&oJk#]S"C 0Z B$)5jQ; BsYd; , P010Q" @$)+\@89N~2h\&* * m_1x0D,PɏİdML`S"P܍iZ21`jV$"Φ:j]9 --QTH"kM#q}vUǀX8 apY,r$K 2Y#$p!3;>DK22&"D@|wwI:F}*35 xb)dY5Kunum/@('9'EJK!@ǺyXRXb a$ˠ\#Kt u1J3sE aZ$'$@ٞ?ѢM0@(ܣV'ud;]M.%I =%ٟA8C_T]5$BRXT'$ & eOm(9,&@8ae sx B:: 'a8ddfyZR"*UkG{ IHm[Lj\́۷ږbv!tiP '03\Uz+a΁v:[Yo|gk, P8ɡ B2p1bl h{s\屧6Gc3c-֙e$ I ]ڴt:t4"h5Rv|| G"j1Qa2CfhW'7 }۷`6A`2ٍ," i{sr<vPRxL~#^Z!q ZZpؤgsڜŒsu7+w{gT)9 (~/o0Xj:Yd_fyO7nS ` wh8 :lQVd~' /ޚb7_pIqg.v&Zh +.kFl\ }.B QVZx/>W ^Om6oPwCGt!:|X$Vߢ:`RGS k~L3KO=4]=]p.BgK:(G@ZWqơ_~BvCVVZn gƌ$ꍟ~ǰyx^kp@&y~ \b2{ wJ7OɻFq/' УI8UKt= d"̚#{/?H]UF__IUVeeeα-ٍ;VQ0mD窋܉2'1NDBtiYަ8O`)6D@wY$CND]kۇ ٕANB<QP N .V'̦M |ijD' g|Fa.r(<91~f2%%YmԆ&Dwfsn6<S( LFvD+0pr0;ډgf% b)65I+ DY 'G}6ŦQ  =#xJ#XY ֎ (d=b$3S,] "v YVkPyη{o k/λZԪWx̖}Ӎu\ܡ%>_+{г%ms+ZLX5NofC&ªEqȲO' "B_+zORʑ mqeW&23}Gy\{>n:ᦡ#iO\4Je&G"cx=7iҤ4#^믿nv!qXn[o TN]  M6rUW0j(A6}t;O۳MQtlT+p!zU aETpxmXݻ>c%hdF~زq="-D=qY|b`BcnwtU?:6`"_|=G00n~"a]t|>{kKrTÆZ;qC;7^}S a}fhK ظO8,K2aěCzV"|;g~ {P؇Ç ߅K8icڵ îZ_8|0\>i.d|xOc[cx?/d3fٚnJ٫/&M2Z&¡CL|q8sN 24W{};W 8\|d4?ՉTVOTT u|wxc] 4l>C]3Qމ܆MRj9Ja |BԟҢ"TIe4'z*' Ir [PA4 xRlI-R\VWR'qȱ(X8: A9KNFsu_pu-w. !qYC+%$粬 }H5eq!>xΝg@ߋcבijQB*A`&Lg탎 0V`B^1E(.*FQaify]jȍ2"sb Vg uf&F€DBkR/l?~=ݷ/jԨ*T\Ͽ4ane]ְa [] sR"r}ZJBC#d<'bjBдEK\q$b1"1O>ڦ%>rw#u⑸,OD d>>/ȧ=V)v]ddddvq&$Zq v˝c~[>~=LavoڠTBɀMf!l"( gC 5g0Ac`P0-}c}I.B#&!q|lB BYi)V._ pđ!x݄Sr5w!jIBCZ7/g8}Ɛe0!$5`dY T8@kdN`|<)\?!T[- z]GZq=\jMeZ{PE+G[]e% L}.K͂8qN G"Dv')dLԩ93'_)Ixx,g"w=DBf39hj2l~s6+$΂弄j8iu?fд wiu.IJUu}-%o2*+M8Wo[Z] S][%-~W$N [ ̭y,,m:+Q];v`׺Nxa.ܻê}%*IhTKpT@%@9FM-9'WK5=3.K`w4dN!3\ep㉥utu}5{| .12$YVYP`sҢ NHBMU8 {1 /+O?H=|1w{`&kҾN{wRܸ\K牘yjE%(++H {1Ww26 |ehkV {yNLQbp&*G""x( RҢ Bm hu\;l߲-7$Yv%^P`c'>g:pؚl<Xm{a8!1=df<Cy4ضh$**\sd+>4>zNr2)k$F\@Rܼ(쉸 hg"9@?W',R'E;aU+8bį`f:ժ[Ľ?Dj~eAT}tLf-^'vcj3OHG*tnP v9.\uºDq~6iwaYjcIQrUPRB([4w9xw(\gfou+ZP!;)_ïg)#?V+֦ m[ڙ}լ-Ov|Xih!lu#b8m~`維CV*[]5ޓK PTf O{~#$5 0Mi9<+,k*3ԠNǝt2=d9Ozn,̔1D`{ E?4(Y(S7YlKزv5Zw": 'vj#f>jV3,juA;ɯnE~~rX{씏!ɄRdAe޾jJq*,7;6mP(~;μ1wO!N|f}5***p^K/st/e:1)} ߻7X;Ὗnqy<,;z 9ض~;7oY?bPZt߼.v'C~a +ǶCnض~-jԩj5k@Q>j5{rjb,m=' sbԨ]G(RB(B {QJ;m{K Swh]dž݀abG" 4`W9ժ'YcpハAVG Xxaұr_i`XWQVR[G?aP0h|ƫ6zt5F<"^}>ը.gaq2b'x¿|_i B.ӹxo|1ދ׌q-7-="=#,G߇WT.hp8XW,E$3ʶc1c}Ǻ/<ŋ'7Nt.Ÿ.tIђ.iOtI UOMp@ϕ(,,J Q6I&&^XԩLo 4? FFߣM6 "}ٸ袋0qD.bp w߿?LqS'rkL333XOw1ǘ;hԩDDTTTD護r|P(DDD۷or_YF wι]Ńi(1F+V+V&L@DDӧO۷ӴiӨLI&ц hѢE6qDDԾ}{GAE84~xFBM:DD_3&Q?HJ@)9l~GGtkv-X:t8 I]qPN,Kɬ o#B} F>zLkp"ttsp/ƥeܟgha Ibj!C 7U7 1aoa[ǜY@V.]0!_ؼq N/=oz7asUAZZȨ '[y6nǶ5q=нWd=ǿYh]3_@ý(Ȃ7`Rhݻv/:qzI9ǂ-P,:[ $9ZՙKԪS`'S櫯0D IDATxqhШ1V(0o=@D|f6Ը[6oٱ};vFSNŖ%iJpjGZݺ5 0yԕ֭Wʞ$ bH ߆usV{ޜ;OW><3_r2}ѪJy{8z(ߞXH洿WMc10u֩mG~f h9Y}EEF2WR%W^7? pVD"P88F tր3&*իWwWdT2N;IMBkrR1u25S20A\JVfΕL͜CCEd'%mrK);6l(z&M'Q!Bw.xSB!  &(G 0$bq$ =q, y:>Րhid IxS ruz o܋7'ko)*`N3qH@}nZ͉<}ϧ_,^7@İJ+1!=R%ZM|ԩSד 桘{^u- ;9JEF 5YxݞO٫χ'Ė11ﱧϼ2.-۶E v- YMYM2_ը܌ba޽s>.]>߁of~m|5u*.xcày#毫گ۷maϮSP;v'aۖ-x|v)yk' \:m OeKe%|k<^?mY;boQί?*ќK)j~8O= vժUzъdٔu=Ze-½(@cAo\)q"th+S62Z&R|VV6>['sp]BŕTQA`bd  E.SS_3c\u\Vyq.K"W? irp٨½qڴA_Esu L AP2AP<@L(Xv iwr`#O}uS g.J|혻|E`ޟ:N=,aLÆ:8;4\O @ATebqY91BqUI>i?f-j@EE9o{/aV6'N̜ocD"3<1dA 1D5YT7<xQwܪİobzcaMvɶ'a#RC&kEE\CA~:P9Ú[ 3 r<$$=XlaFd:t0S;_qARm}U9ŶEg`:9h=A<4EzϦTY7f os}`&t'0[Jc|^ G r<7`x?v2W"ZԗKD<GR_Q5,-l|D2vz`4,g6)w ZVfauDTOhsrVCZ\%]["q(75ųBGoY?c]w@97k"lX5?KSBD,y$"؊>K{|he80׵9MSUD6O9#+JAY}3/-\\ʬԞODu˳AZ`|ťegd:( {ՋNfי%<ܱdSeG6݋?&y}m"m& 1vԂ;6[obuGtnɉo ^@Zxx|=C4q5iI=^y,v^ZĀSi]>j׭vDNnn5+W${d=6f= t`&KU7jMreNUmr@ ^yf σ~,%'yYJIT|o sY9׬ ǺÉOxJ+n.0͞'^ANbt"Nsfp.7m~skʯֳhؤ5m\[4wW'[GaX Lt\tCmҐ67,*L'Rr" Ǣ P< bXcD H$ \ s9IK.V|\1&D"a$q4FǭȨSE\SOlT!6| }aY_ T0rr#'2U,8iPhJ8UYℷ;bx*dZ"U罡rG0X(  1> \[K@r&[cSh,!15,8\%`ٹ&|Bٿs*Lz)}cE ̰l'/ صc;6mp${ o Q~CWyʈfs>Ǣ][kUTeW%Lʹs"H J/x9F!By_ӵj8MnS:7gU+=o3nYW9 .Qvef<׬]/}*I>h׾u ^{iU)æZ |zoBb 4'c=:{BK|?CF+.{zkb]>xۙ*Aġ5v?Yv=yic0}a 4X|ͻ#;: O텣95Qf>rTk^}.@!B8T1J Q+Qtnrl^ G,Y_MŁ{q*ݵ)(}Ws@fv6N=,y vo%ݧg^_۷a`җ? WK"Zu\ޣ{-)^=XmCarT~?m{_ceѢE_+h߾=%]dYNIٳg0#c 'O=vZmfm˖-iMJ u{ }͛g-رczΝSNDDT\\LFQ@{ :В%KS6mqƾv&' ֭[ϥ?<M8FtI#UB/]eG}&L9r$\ԩƍ]vE<7YXM@g+yl#'œY?aάLm"1F p>#9E<~pyt #ͪ贚3c_@S9ڋ.4Ѻ_S 䬞<'9Ӡnj{FZ۱Mklٴ n͛gwNW_Kbb˦ ^- &39Цn-sf@$#EEwѯo0oM3㏕XoǡC1\eL?8'cbU9Nܶ z88O_unMwczm~$Y%+s6G%&^J[ar@y¾OXV^V> oD_~Ozw8V,E]Gz=O:P'ֵqӈpt6!iõ ?S{|1WWxzka"E P xX'rȭhޢzs.>|-ӵ,U{$߾ZmvlWC lٴ Ͽ7ZE"[\K;7Шi3T^R\8ADذncM^7yh班[Q~?_3b4lw6%K[S̫S@v(-)ƨ~QVVぇP.optw/nބo~p [nys8~*{)9ԃfハo}o>x?姙83Sֽx\t9GU1s=) Щk߼+JIx侻?훯߶|!js O\S1+ۆ +ݦF=Q~J~d/) W7*`2URyAAjYLSqYzB03KNO'lFƍF>'!uģQ]1t>jɯch{tuN|RꕲUI`MI_x&$N;/W!i~-=tK۴=ťW]3/˖acˊ%3?ּHDMf16/\ysLqHXYhme9co^Tt?`5&>Ь1Vlٮ @!hkZB$bQL3,4E+c`bȕdc\;1t}tV3 K !hKAlތb78U+ ~.z\4.I5TR̭|P D'd=VQgycs( Cmf+--EN^@7`~jޚ4~ϼ2]s-o4XJs86{PedxZ )!)Ln) _sSB* Eq'_sy} V-[:v\Rb^ybAeUhJNo?BJa :=6ivᷣgV$Jw^s.|W᫕'iwPW * &&ƺI<媲y7 $ex#++ { pu❓{_tq<5/cŐ9 L\ D"jЍ &Fu1nRJ`S֛Db5+"(\!ȅj1A d)Ģ  (&Wxk vڅ: zvVbQ;#WHⱸ!@~PƠNO2JBkn9T9!y+ E|+XSe{w(~'ܻo $I(ؽ4DQ 46BJ%X]x[x. Y"b ceX8Y m zw1pm_ΝhԤ ۷mCBIY"99rJC5Y+_򵤗efW7D o MLTcKp*)k  aS.{G`譇r,:PSL!F"e.@?|";83`|*La8)=`7:w!bhK <&( 9صv-N?D#s|Z:kA^sOoS`\طO9gz8Z~6YZ}+c3j-d} + '@@H<-WD0T5 qtVF#^Jӭ *e^`Diq1F}FFLA O1Zw/Q5Or4f "J9wv8/)_;wa&S "SA7hdz8 b́RA41(Ú+J뮪  Տ ܙ35[;ʬd^Šb&\:uWA#RƲI7ˤHrh.\Qo_˺Q-[F+3+leN^Rjj';y%԰:`A{,D 1O^ˊ4(h b̟RݻQAC!#+Dω RN\Pi)8P'Fލ3۝([@X߅AJkuosQașxI ?ϜfVvJHU.=TuaZl{lɖsDB͇\r\Zl2reZxo:×G GkkĽS )R$f0Z:^R%]lm+.tC!+HP֘U,̉1~'ڑ/[N]Ϋ^=` I ݊&9TRY88| UNPu/HO"3]7K&SkR1Ly5(Pc2q>]r NLN``Rt0ٟF| X'ປ=lT^D<Wx)A{h9X:jQ$ཌྷR|;nMj`y1ȱN?2]j^tirSLN_$cܶr*rxkVnQGhwv ?P<^ P IJ ɚwPDf_";t]Ny߷_gV5IDRL!Fe.2JI$DQ" >6QwJ#[͗{y׳13Wɒ2RyKt^[pIPBQO)>sm]| 797|7|(m&M͒ՈdeqpTk{?Q@O)l8d/"q±xyS5Sf8!%z/})6*?܁pU;.`؋j*nq3ĝ%+15Y$߼.Go^s*Wafsa`0ZS ]gȕǶ=7DgUTeŋ̝!!IJQ8\ym٩-T\!,vY-c×/Ky}H )7Yn7W:5~vnN0T| n UVfz~P7E(Rt䃶0 o%`|g5a%`jWI]=Ξ#6K}n¹?#HHfԸJ|3M(+ r=HɤKy}3699koz,ˌ;ۤCK&(X};ȔK0]Z?~޸KII||OW2]K){>`N..KTGqC IV6d"IΰTg,KjVZbs'.-,A1k6;pY )Qm%=8`9\ Mn$;8_@zJ h4(@.I|,-7BF= ]vq(^T;f mg~ <S$0ZkY`~ffzԮӾ#[E_r_dt"s`'Ya~|eT7JK}$Sk7_Dv'u,kפ͓盷Ր Lb@WpWwS0o X&$umvNn`aJS&m8wn8@-:ur /&uu?+|VzLzA6m1cdp rfA͛B*ě|]y1z|(;b/`cUி1l+tOwъ(6 Uח_^ 6\U)3TZ;m8jp'FpMZIx+fm;?G=$ ޛO3TYD-Ʌ{3ܕ93N#oAYi)HFJ%`l2 =ēwC0 GNBH,?v _O GFJ .~ؿy-Z7@q!WR`7_!Oxi. e+'rZz\TZ sF~G/GFaY͢1h8Ɍ _-C^`ϻEHKMcFMs2*Z Ϟ$a]'I ţDΛ)OA)Edh$'# (!H vLfYX%F렑m-GSX䵕(߇\"m i*5H*GRClj1ͨ٨9j4jn y ;} թ GʖR@(*@t\fͶ5ߠu ӡ9۩ߎf^mؠ' he)復}-}ۥXh5%kGSHyQRFhLzB@Ёmr̙0ҍil0fP4Fi<{)MPt:>=cu/R.B/Ƨ;j Uq5ѹ *wnc>b<ކ GzZ*ApHsؗQhuħcGdbuBzuj`ڄ?܍- V+nqa:>K{lD^|m,8  Ш`$XJ1skP Q"> 8~pj6vJUԣm6fO( ^ ִ%ym*X9wVΝ=u*RHƿݺ J#XXV4+GU}pR}"Z6oXɹ_BB Vl=(X o m5[E=^0'FO@|a5(_8T+G :o>piz x JgN`g+PQ3`8nZ3 ($OymՊ[ͫuEڄi}E00lB?q*@ȨhpH}W*WABzo\C'X9k2O Ha/0y7ܾs40=73oFH~9cb{"sE#,2g6?^ɭxn/PLYU:, il:nFo?̏'(pwz/[rF3T76oAo]9ƼEKjAg=IPP!=z+tT#0 +/AU9L}v+v`3>o-w7777777}77 }77 }77 }77 }77 }A%$$Bnݺ츴m0Axx8X}coB[xxwԭ[19pmJ)X]D DGGBo0c Ͻ^zjB`6Ѿ}{/_dddYx1!h֬TB.\ٳg f͚ ܹsX,Z1!/_DEE!22;wF iʕ8sk^i֬4iBt邘~ӺukBо}{ϟl6} e˖(U߼6o}TEVZ%Kv;_tڵRJoܸU#66_fJSj24+VP}ӦM=Yn]ZT)J){8?vX}4ָoN=p-űM{i_/4:V+_hLu<,Gymzz.X?~.g6x}-LC%K,qNVM6ȳYϹ*۾R@6*jDPȊ p/zoff& O}ިWOP c͟z2,+^׺a=oiX OƌBjj*ZթNo4QÄ!J{ 2oQcWZ]?;a8>ddfO=uJ&_-UaP2:'([`0 #^"ؙYkԭϟ4ͳoMڽBj^|÷⋅ Ѵvm:c<1^VgŸ)ϝ 4Lӧ򫼤ųgRiT)\@Lܽ}[~Oީ(_[+^֍ʥ2oZkY <?v?.[_?øBžBp<;}V-]cG,gwvNE')|ִU+Y5V-!w۶oG`1͚ cT)^T .߻9SxW _cFaEFࡠ(cǣy"!=>1w%Բ3y>ڼTP EOǤj/yذɣ}N{N]ϵk(9Ka϶ĞRhb4QXm6_5ݽ `ѨW6֫--nkP(/j(*RૅUG.47zvnq\ާ} ~]v}uaN\|bb0%/+Nym7 jŎMqMP+'eq (mbƭx1_ "%K{D{ʕI=Y *_&fW[n6o!|{aCxhFs,_^7nUReG`^ 44|^ )5G]$lF*0oOy$/7^_|Yԯ4̙X劉[7 D޺ wnW7{cpV"M3˞-0(H~)tq F&M v{ƾ,sVviiba8=MJ͛PqEq^mt:oY,X,, '[A)кc+Y rǠhRp8xZ@aۿtk:<5˕o.x jFF&BBBPHa,RPEpb4z,zCg/ *~SZuC"Eyz,/, P!:@w*\bظ 7+Wp XcįA7PUE6mqm,[1ݸ!Ϡ!cJzXޗ][6h׵#w;qm\t_)'ژ1U_?gR$?yJU" P9ѢM[&:}woGAv6qʔ(^[J}OsWoǞ#&}A7Z&'LG7C!ói<QKzאuףq P{Ǐ}xgs"v`e(U,NZm45>; {w`ƤвM;4iJ{=h1ܼqƌk&|ǀo]mtg3 EuP!*`㪕h߭Ο94DM(O* sGX`v[ܼUS8Z{e׿ۧK͛G3\+gTa{Sli*Uvl޿4B|oG>AaS@}vOۗ.鎯>eֹXS pz+հi z*DU.k6}bd$19l6$)l~F@ui4{?kZ* oN{NKg#8G[w] ^|y.OԜ Ҙ}@U cRv*/̈́CԟYX;BLӧDI.,^1_ 8wJaKOxYzJp,ߛ@)ʲB:F.DZ-`aK3qވ %a`ϙ%[ zYC[4BdB7GwDܺ{G}Ie9A) 봘QJp@,^f qT w`RB '|$`D 8PJc6ApyJ !v 9?+!a@)n;dmʼn+:Y2MAfd4&MXNB,D\ 9{f Db~~/ V XCwOlJ?VD*F$, 5=B Pa(}C4P|F *>`9!У9KdsÇp`xf.Ys@oPd&`|g;iJM6aGH>xc @6f9"L^fYϞ8f#2dRg"9'dd'̘fRe`/:`f~U@V23  b6Hk [kHN&~&0& 1#0ɓ(& z&8DWf>:BL  8GQkkgV{p`^;':|(78`Kp0q1ק޿<}Ұ-Ϟ"(2a DZ<ͼ#q"]Y*.4hL#a{=#Re,LᓱcC4z z?5ţ7Ͱy>0 R)2N͇C@|·CEGNG} 9L3'v;Ruam[>WaGDL8(sdl յE@Ha;:`luZmK ;Lle5N!5],5V~fok{z|8b$R-Utwf:-g$aG7sʂyj+ =;poa#lYѲm; & [Gm!^+!i$!5"t) sR"LxfdQP0e[R7a{=K8q+Epć( W?u}r 4bn[8l4C 2R߁AqKfI}׮Ƶk~ n\׮Yr2V&-Z-0sbXXuR6UĉniCD a|s {E׈c9L3YX,ZZZ-YĻ.jTt4ˇ:fQ4|#'~0ٳ@}R+_nQ=3G8F5$0H{+-/bB,_SEskym^o~>$*JnF5Ļ!KU0&ЉP[`#(8QѲ|y:d1Ӱ?)TDq禦:uĤɼ6 P@P,  !™#b@eEz6 ϟ=CZZRS!#= ׮\_Nɓdf"g\נ!zS>)@kkj#.o^GnCйS^Ƶ 9x]`|1˲hש*s+#tj ǜO& =aq!)GA[|$QG qDݮKc-e ;,sAX:oz8S]hܗNH+fӵ/VG.%-zݺy !9 GX+HaPӒ",*eR8E#st^3K0Q+_QuL39pLHƋjwJjw8$E]ĈsjpϙaMOH4|~ytqX@ޞyc~t~M۾Oǐq];ѣJU}An+_lZ)kWSg5dPV {+Q+'xɒ˛aW-8c\ &ɱ+7 >CuK yF@gԷ"sPX1VU3sR꠱=e*X{"*9kJc .Tp_#4yR?E0r@[ !(8T_?N3Q@ttI@۫]p] 8VWT7b{ iB|fDrһr0Ï;ew;zRh":}jKa6X6vS$C ”S&aOaba!dD/vuo/GHH>jʗ6a9-* @sW;}ʐ&E}w&iи1%J)լ?bAFj*CdiHb)hQD eY"J}ŢVzo*Dk<a`$"0,Y̽\~Z̥ &"N兘w5kqz?!-)Ϯ&0<0N5#m;Qiˣp]LWjɪ`/"w Uw}"+#OKGOJ*N&n˘]BTĄq2?&7vlY9f7rS9zcҵU[p`Q8|p?,]Zc21Mn*P9(z]1'4fIo= -Ӵ3/}R(("->GACaBc@c&̨y˨]INV (Sp0B X0fGr%PEJM*W t8iƧ'1f,|WAOX8shQ6 GT.!M-@\4*W ,LjJ`\HݸY?Ƹ鳼2'Ǻp-b]U{0TՐ-DhИ|R~  Azz:&&t?u:XƝrpaOiTϧH+yr%+cTwn4~`l\J<%)E4Gg OgBIB܄=qwhV[O{KE{p-71. _RfW %KL;W;8C€HJ~oNJPO}f:Pꓹ u-%\3}gqC}AEZ)4jx=&6󟾝z/My p5)WQFMqe pڸNmSVq8հ=D{$@{Ϩ'Fk$LP15m۰fBi,y9":n&7r^hXW 4(X4v+iߜ>0gT|V*Ŋl8L]HǃxDhgw7ԍrZo ? @5DP2~! ZG`\ϊ:XHtkHT&▫k_lձ\vbpu{=ѥ!+ݗЁz|$vGPp0Nܸ PU'W=Dz-SwlOS!S]A ̝; }*~}{ 3sf g&`9@@>EÇӼc Oe @4@VfީQ^]Э<@Plux0ɲ;zgx@ePwYpx9vǂ~pvngZ@pLp6 `?{o6w\7/] IDATo7d !3޼ò qC5x3 Pq՞j=*E8C)8G=އm"uzz:uPOoI/l6Bl; "*1yիǭ.4u-˹jRIN=b!n)X)O@ԕG(cu9NMSF( ˊlBI+VƓ0q@82sh}?)))hӰ _|<>f 2^ڋ)0a\Y\,r v+`5p"S. q&!0"w(Tnݸ. >CkFkKK8ؕ?/d^B !{s!KTf_&L`0LYL+-{,?!N5xCBaG3^{R#CÙ<=#TnG@hsb>|ا Spm [])[nFYw稊 _OF?1[9-vCs_ϘL-j8[~R`G``'S#Jm>[Z}Ycǩs#hP~U$;`!n`zOy|w6`N dԒ=RD4y/L-uͺTL"lA);.FM|i_ HFFeǝ3/)dt }զOϞy N|{$R\|QitL4!G0<g@g7àa7ď&^>7P`Y,WCm'-)gXv(:ߩ$zY =oHqPmN_vr $Xɲдu[,5 F3@Q[(bto%'bGFF6= 8CfeQKT;v!޸-:tRXH][eKi>+C؇SbW(1+& (sOBӊL4{ _Qaq#(l/Nƾtu|ƍANyp4%yV_U3)pK48>K0U$NP@}q{.Z\<_( 0iEj"c?{/AUizrz#Lòg"Qjvvg[0v GHMEIt*K /\Rm Qk)L mGxa}H`4@߉s:t)89ce,(IH^@U?ıÿxM> p`ѼcZkQ=ا]^oђ%1j@_9sEat[m OQb%NP Ξ8<8xI>QڒSO-YWQ 3@*H(qyl6k˦7mN6>/n("- ^:JDˌlT[|<,jtP⯔jNq-\'Z6uAxR=$\媨Y07~<K*&%c]o4vWH=q<~t<Oԣ(욀@x%\ӴS1cD}(%${}K,\aD[onǝ18p-kW&}W.)5(6ʜyP4i|?g}[t <VlhGzߟsg1 : ]1E]ϗ5– ل`9pR=%¦ݮG3hRBT,|׻a 0>(lY=3z]7b߮ ξ[֬_VFV/4vk#<?n݄^(.ՆDW9W䏁J5r+#B2,VpcҠakrY0l*ڹ$杬(lNLLؖ0C;]'p/˛AL V2xP(́hAa{l7:k Z+cÑ}k?-LVzMH?TY%>ǁ]ѹ~ul=~1qyC /lNA@9!w"Mfw*KzχdLhө+LI |9CQy|"qlVYkXX8 l:t ݛg.Ds~%JFAY%ÕkIK%Fv*Er|=^څrİdN^ p؀Bđ+#'"tz 1&PBFդddb'QХoؓ 95Y[%U"cO 2n]eR0B9LN-fCvB}hK&NC(5 w܁|@vE09@T =3M!2pZ {Q1p߰(+L<ILG": Dk:5F Q#Z]%00n*\ƅ u&9(Ų9ޕN^f]X-:=XAQ \FR"Omb/c1p!eocB /B@ n kn SӆwIe&k uK&عNp \&,sl r"BMV,+vQIWFdF@ HP@< 1c 4oYA=3ְO FLyϞ%cȄ(,oHav};X 8ot솽6Yc-+ k"+5?"J󱴥;l;Nƅ'iT)xFZa$f "Zܙiq*o}V8tiRCɞKM $8z{Er wa0eH{y[, JÁNǻy}*ת":6jo{HnTʤe>( .`6z c`Wɱ}(%:rP[ڶԦдmAY|S.i덖+Z ka×\GVнU3UwAp-{*kk,!^K\zp5k1b,]8 F=^-n_#Y52>R{B_EJBJcYܽ} woE0襱!9e0r tp)ܸvB<#$zBcOaUSIygˡ߱﯋J)GV|W<5Tpn]x^̤_ T+Y\4P^}0aM^Uz1d@{~8=>wݾ޷*;9} XAnG7?}!%%ap8ǯ=z: ⛽^֒r d!w\XňqEG~kٺzl*ѸaMyF%cܼѠekCZj>}QWjE_ThL]kw6wݎcӁ_8kiQGZ(l([vSxR|r+ar,W$_UJ%;i"rWj8켭b@>*6's{<9Lw"sc+ % z\N+ܼrY0(zPT5/ |d!$^O " T;l2cߕ{/Z;zh}^֧2Q]Z]gMyuJFlN9ͮ t?GTK Z2bp6RODlD_9%4v眂cPP~nDzZEٲ .BM^Ï:oG1a`X`@HhLffec.~JC&vYNXr8axh^:׸/񠱾4'bs{(rDt_̚M߬C*sㅛЯ;|'u\pHc1wYd~bw>uHȗ vOU{sqc~ F_o?򽿢۝֍U4.1]u,YRzMƧꂀRcT*}yGC/fӟǭ`vXD$f_`bn?k'`ӲHOOQھ|2Ҡ-OR2^vz8T|t/Laxf"[˿Ř1x-_ 싻\MqfױxriU$`K dģ+dytBw:83Dffܣ+?^ro: 7#0xg' owDd'(G߁l(_6T2U#GDg| 0೵[s|AsTn ϏˋKWˎ;{֯Ǐ媾2ULB5.U@T0Pd`sDXp, ㄔ8 rqcqa";O9p8y : i lو p! f,[) 26y9@9`[CKo |(_6-h+AWSqIL&L&>KFhx KƤ%A_Bb@\<}V+qpV7ϥ `Y޻G&.?Ƅob[ +E;nShV[; RSRzVؿg' ضfbGr\Txj'VmPr|<z BKb{]0r<ɇM-#<MOnhJArO=Dueܾv o~:gNsO8a۾g?@ѓ-x!Ѷx>;WyVزb JVj`W_ z(JYlZ^ky _^X7FH0l^Ʉ_}n׽PU;nąkxa<ǍPkHy'hrx S!_bHyVk&rɇg!̉T Z20a,DIpp0McJ/_n=*6}crB̌ c ax6p9(S `Xp9t\>jFңu j[7qTU\OPΟ:3ǢdA@p#ȝ'JW]V㕊QLyY<uD%c"Fk)PӇ MEx(|ߪ!uv 6ݿ8s=;ׯbᘽ~'>;-iⷽ{ [۲:Ɵ7ҵ:d 6/[Pk@%PU;|3{ U*aٔ1hئ#ogNDwz _X2q:\!5a(X:q 4|t!u¥a7KHyṢeMHgΝ=q2j5Kdr^V}UjFzJ*Ν:[FYhݥccblt9͢L&l\:MвӻHOVmΟ< !I߹ҕ$1RPHNJ T'Is#Y2a 5>rU0/>Fb,( =;?=o|_5Ҋػ}+ngln0,F$˓WxH+c3J}ݯqs~&oxJ0b 1әr# eɁR!!<|8:M8Yc|e&9ww慄C^2ZY۠EؗZ}*V=߇V>ݛ$i>o r Ӈ ,},Y/j1wB_3>\LY>kA!Ora5!!>qp akm@Gh/!̥d6@ˇ—47 _ϝg>GidWzyEi1 X*x՞&;2`9{EfF:Kw%ӂGb!HOOA}#PvoǪ3լ)xp&(^ 8c+q<] yO}<+f|-Hӑ #&kY,84ޠ1"s`xgGeKy6+:p1H[7eM}SqO݁WAp8pàZ)-FhL =lX56g}1We W j6c&qļуknCFaӲE&(u40KkܾvǠqALGL@S_ @y-ۅp-Œ-ZQ( 5+1g`PTGނѹv%Λ4]jWBxT `o)JO@nJp,4 bY} ~&x@^X|=S>]1" ZV|J[]ŕgy_E>= n^а0/ cȴyhҾ rF`t;Udf|b f Ob̢͘سV~ͷ,Ț _![ u6\ ([(>xv.'{)+HKŃ;0lb@PP(HyC._QѸC–;:`Ί2Ճhue/@;O0}B\4E@-XM[p,v;f {5C0 _i)wTrDD҃g/e^11f1{}|(R4(0>mmfF:+xbߏEFǠR\>:\ XEb%d4U׭ fm}ityF|ni@E8!<'oQ5ث$TToW*o %U6?k z!c0fFwjZz3'˕)2?h@A6dv_"(U2 IY>(k IDAToۄv?ndCqUQX`11zWxT,v\~dXv6kMG.c 4L D1yb+3j⋕@~Qz-|9cbűn\t8aڇк[xJbͺX<{O Юh,83-C׽&[,ԄKPܟT*#2R<3tBY;4/Ď we7Ǻ[|;_3+l'lkz9!_ֹʽXA{:V?Bz9wqNTkN&=f KA{WĮXvT^;WkD]X DQ(;llv$Mvlg=d&grys} ,z8owa4 kнOfZ616⓭-S/;[l%:ƩN=Fλ9yKo_liM`L_A rnwz} {rקx;Mh|8} gMa7<47ȆV75ƉÉ~'[+Z獟w0| 7zŷM/aZӑgH`{y~>[XqgW=,˿U\;~\{S~O}1>oL_ ތ;gҡP_?C|}*T]YΊsUR5S.r˿;f4`0#s!jW<`K8H4MCBM)IO8Yb|҉SZ~ƍ^СCX,zG褓N)}tI'dл@'tIW:餓N:J_'tI']뤓N:+}tI'tN:DzȦN:餓N:餓N:II褓N:餓N:餓n뤓N:餓N:餓NN:餓N:餓N:ƾN:餓N:餓N:2]N:5E{ofbڵ+ƍcw";;^z'mڴ n:*++e ıKVVq&O B'tI'b1 L0+W2l0N̙3 z}Hb믿;/HPA!Izb޽\s5̝;xϓ$IL>]4tIV$=N:":C/g߾}I_d >(?Xx1/?HDaa!#G /dذa1%_l ~-{% QPPСC4it8tI#N:"͙3GO=TJx"ĬYD0[o%ĉ=_ԟ}|~>}Xh7oNM nE5ݓN:N: ˕p AMF=ؼy3mڴ`ذaY3Fu}Y}Yv_;m?@yy9̟??!$g}6Z,K-X &;kqgGzm"<nݺa2/**";;ʄDڵk0ͼM~޼y :TW,:餓ƣN:~#Q@L:E^|1/Z(;gNسi&aZ[-;p:D9RK<@***|>QSS(4)Q:묳"^n]wHooj'DBiFuo G_~h6mJسŒ$I,\PW:~CN:Ť F'0>Yc_NSXV1b1zhv#FW_ט#В$޽{ѣG9F!2az7EN"С=z8Dn݄h裏ZzkTyq[^^,ˢ[nbb̘1@ 4(1^Lۻ`Ѷmol6ѳgOѡCH < ƍ'lْoN:I\r%nnnx0 w1b2dH$l6o](Ҩ~Sƾj_yh}cǎCkS'tҩ5HƣN:3i$^/6Mѱ̄ x뭷I'tJ<:餓N:餓N:'%ݳN:餓N:餓NR=:餓N:餓N:'%=N:餓N:Uxkj) H1)h NhYRn $e1|F7%qkQx 6nD(?8f2t`2@ SԱ#Cǎ@$?M"g%8N҆A*nt%)k7E+/$ۜtzcTYQί?bTqо} =z0tAݏeX4ѰyJ$) WRnwJcD×C*vl)W.Z}!O<`.I EW(P*9c>lX_& taMe|dr?LqRmh1헟ዏcչ?AGMa۶ЦASᏔ:iM.ty(yJݽ;wfg\}c_Q͘Ӧa0BPl_W3sP(ӧsb}?[Gt}JFz -_yӏ;=z$ij3nknIDJN?>f lW;ӧ~A躨 _lN:̆A_6`Evӂv'"F_ǭ#Ѩͭ6FڝHթk= ;~n喿L_<4yzkشacn,:9I;eӦr.$# %_1OF2tr(J:}]w3/#GG5AWW_ۆiL6-71]>>.n7GŬQ%)TH$!$!C9o-}^+$Jee%"7\}5S.'&v0Z5nE ?Yj/[g4Q篣P \sk~ CF8zÅ 8dp#<؆},WBFmXB|Ws z ᮛobْ/FۻgwIzvjcVo,j ۶l'_AҨcCHQ׿?i9nR4#"1Jo{flCZWu{]drߖ|;>;b2{wM\uշ7v*;oak{N&~׮GՉx8| >̚ArqQǠ]”Eӊ90Fu7jAÆ3s\;?6`+V+o-ɓ2Ny9| zmsRӤNek9휉 <'zm^^_XH^"[~1¤+m;Pԩw?XD&}.y;;oG~x9бwwwǭ,K^`!Fݻssm??&7T%W_话"Ogd޴kߞw)(lS7[Gmm-<:6>u~3+qCjVr>̩G ?zݻӧ7+7oc̻6|_f9 y0ue~[5msUWGSO蓏$^z-xEQ~'p֤ <{lNv2h>>{v^t1V5bwi81ΜtaJcTBk7/M|wm7+$('гoߘ+O>xn?gA aC83ttԉ?W^[fl:dYR Rܹr,vAmz\nw$ ٽ7n/|чɥ}K>$ݙ>̨ngwno۶3{qE_tՊ̾VF9z|n N9<"Аj^|&;Ӷ(egV6m6GcO>%&_3fy1ds8yvq-ELR~[^}M>ν :^^/.;8AmХ taٺ㣪>x^l|~FSLq]ǎL{6W{|~KĻ D B=~#~mݺe &0طw/eqq-?fǶm 5 ~¸Ïl߫ 88o&ޭ=νk՝<tđX G8>R{f_r]wSඩ`,ߴS=oS=?KcM^DxX21ӯ ٳhSXȮ;[UC?T{9b wd /1/q K8yc᧍Ƴ[^|O\x)lXܼ|ũ'2}=qy;+-wO7+#nuy g^p!KK6_eg[doF8|̽^X՟ɖpZQrP{M.? =izLwٓKz.=z2h|퍸 =<¶5->`?x(JFt#:Mֱi:оSg:t?r5Ҿڏufoң'}?/?^? 7^Pؖ7><ijrI ʗ+sA}؃XKy;{&4܃gCEuMcjY^̜hߣz@O/"Rjw^BK"#῟IQ1ÏLNTeRJ+0h?D?rʭ=gsogKL`" ,kz};,xe~џ@1vC2r1ּ^?pi'oy3[G絿tr쯭ABhf0c=;6#[lX 3W~6Bv!)!Pg+ȸ EAQdq[ɦ( ~[VS^fsk䵯ؾ;s c8SN6,31N6p E齳Əg$mڛL!daVk)G WUx_ }kjRN,@SROs,'Ҽ@k~oynT# NYYҞ׾bB2kmH.dS !$j^P0R/~s'-yC HRrrдj0F<&:RkԘґ:^?+B)/gTud\xJq-/&P[bwVc;֨2h6 0L(ƛ,-i*IB BZdF;PA20[}-VZLVLV;ZoDMv*Y`r8 TWot8 T{PBA^Ujz~Z/XE֨߇lQelA H&"D2R6 U6 Bs(u!$-&뻺Woh/u`dg15)ÿXƾ(جV6AH0De FߏdcXbZ`yvj9x<زVVbΦ+Oy9JHW~>%dQUZ%%dRUVÝ;OYNR9n˰r(߻jvmBM @۟*,j* x++M&j^6;/W E@٨ d4,B.3\% : sCX"dB?ǃšŚ {N.ե8ۋdrvbV\E(߾wn@nl\G~[jHŎ-ٹ{ʮUS4d;W.h(v=畴7}kGA_CnmX[/6FNTl݈cW*wl!]pz.hs,G2`_Y)+GYrkN_l 0!4*o(jCX |V+6l3ڝRp&Ę"XUљCS`U(Ř&XY&XYɕ)2, /A0l&_`bb۩VIǃ=+N*geS]Y3EUY)$QQ\3%Nwe 99Tpٶq*͛s&rS9jVg>1S{yM_N0h2`,f?Y5%YVlC]^8DM=,AOTR# i,j`1"0lv .r[fg6lZV W`/J[R bej2[~[Z gkY@lQCl6>f~S}y1F&O-Y4j,9Z:H:TYmK丵eZyyWVWT3E'[{᠎ܼҡ9Ÿ99R}ou::SCa: @jxTA*Pa|x1?/?k kb IZiGŘh׻/hSşiMMש+pwPjA0dc;1۝LeEgVNqՊjC6)>eKjVjZ4֒9Rɕ޻xhsFSXp,ѥbEK ~AuK֕Ru&"z}` Y5F3KЦIcƠ-PURkkVr69sTU)|Uyj>]? /?.OQ?/<N[nţ- 6;&Zx"ٮx_[l6a0X5!'(ŒĻy]{ z8Tצ@@Po(*v 4\UCF!maU!{TOkCswS=^.]=U= ]}#;b)%SVNB XP٦F7e͐ڸZC)TIU%y9y T:2 n7F gN,G66M[-Ip[vn~:\9x<ΰ \c|x1E,A\v5LFFo#΀!CXyKmm-\v9f nI+e!lFOP-˪.iSx^}brz t“Z5^Q$h 9fdZZ7}ߪ*Mw|9x82fE[^376q̘Qxmz>AdJE̍0D'k/%fXIcLPB΋Ef$k8b&HMflJdGOkzG,7ʔBQ'N)aez j.\y\;mzQ8hpfGͭ͝w__~ɌF"IR*2 cBΠj-Am"b7},k$c|lܸ?Ćumݯ_+֯[]lf9{ȡL8lN?8=_Xl6 W1̖D: 9NG!I1[,A~ d Kh!”¤KT_!`(M늢PUYIeETWPYQNee%}m¶[س{W$- tW߾ <0ŕrIG=~wڕyK>8$CΟ "qI_RгIgIH !ddY6 2Y(՝yz_F  2vl ۍ"ەC˅;7.]avhpqSAVx?x8VqKڹQ2mPŽoa;lwf~:Z~5N96 :y 5ΔFpW% x;Nh! LSB  5VHC-D(a[@;̶E~:$Ii|{ `l6c\99m׎vhۮH-Sضm5 , J(ľ[hӵ[\AKw^{EQ(ԉ[wrAcX{sw|>Uݓ$׬B!ˤBL + D(K$hXÐw]6Ӗ!IPDoOGߟ9'+WG?S}.9B?yFKudž[ V(Rda!A#ddaϮ]|x1&ݻQ]P(E\Jugt}~=b$4pBtNKMQ%~I#b4;~dY oDz5oųf5d~AyS(qi-4Z-he1K8r>Xcx0Kdr5H?B~T(Co揅 oi&))F9.).fiJf\??h0GX$jsaOU7 nU7\g?%?Bzyӷ@ov)IQـZC0Ec87HüoqDr-HXˈ޽x⥗2bӮ'vn7va]:P(qO G{-$2' egv8n48f~ zD 5>E$2SH G0`$' sq-)֦AX<>1x1e꟣@BlL PF,(JL$ '+ڹ]6!Y)eDf2OX4eQ[$,$ fyHhjD*-hJ:8W DxqϰC_D^fTc|NDhcs^|g<²@KmH xNQwwRK@)1jԐ1Z>F:n0h-Q0wCۉjrun^AT}O|@Wd#C(YhnE1FYi o,d^zo2YZHMBupjC }װ,73'bERg_OdY8cXqR^^U`0V(BUR(ɤ>w{q TzAP(CGPDoJn X2Ag]uuy, w~˹LW߾7Jٚք d丑+mF2ihv:p3sRHfS‹Dh.F2hq<'JRHı<_qhԍFh]UCzx_׳ifq`O-F-r58\?l1N8v;ҹ[wxOɖmC t!7dzNM-J QG(`EaWQtBQϑ "D U@%D ;"OhZ-Q"m{{%nFΝp20gw's}QcFՓem( ['Fx#yOy±<7N1mFBۀ$ Ceii\r"F꫌gQDڶ9%6sc$Rxm>K9KXgf3/vlL:%daQ1clv{]z97Oُ=6['DOBT4F_U 6 !QW hB ɂ!,|5-voj'Ґj09 TU`րrWa_^9'_i1<%\K0(@SN2}S 0gtT?<NAOFG6J$EC y=6'ՎREX:%%'RCd#hȹjgC5ŝ!Y40=ƃdsTWbpP+08KɊs`nEw`3)]ۜK6odK.1tȺ~?yٍf#S> be֏2넂A ѯխhvjVoy9֬lj=]n<%dPU6TEvav*@vLɖMuƾߵ6M>]صf5 dϫ(?]?^?\;}4?}Oрa^1eJe rNAD$/? 7LUP<OY)Drj4 PpP[=kꫮ–[YݕzJ1Y,Tۋ='oy)w^.+[V]+Tͧ:r[ U/VU`r&c&ClW]Igۧ;{<{AG EWDŽ&Q)hεRimn艪WBBff"ɠm$9Aiji9DYפ Pi\*٭i%W.4U>'I1 Q%OE̕gVjiشZ}4 q³HV+m@jy *𣻋:9U_ 40 F Y4@0١Lߨ fVC<KP&Fh7gו*H]w_CZۍYH) EZ֎lMhrK5 J f[0hZivȺ((n%, TC~g ?T̺C<SoӾcGf=Ȣ (MȄ#OYRҨ!SC3aKs6\jȜfCE AmK+kӠevM95dN[R6H6[!I& Q٘qT{.37% `.` eCYUE!պȵ]UӣzPK ֚WOEu 9PBg󳺩UU=N=VWaE2)Y{2j赗S>ߗF`b~ڧ Iר!=Csd͐`tQV A# \INڳ];or.NJPBQNȸB"vA{4#3}N7`c )k}M挧ΣRJ'?5Y=۱mҸudI40ǭgN/u^h"B<~4Q[S#"׶l< /\dIɖSA UKg49YhZ=_ bAqge^tV.XS13Zi\7B8azG4FM"~my)ƓKLxk!-{V(!%ae= G,;wa]~A,[%s_}wbJH@#hk/BiIOrC )Dr>_~D~aEsEy9*:tk PBȿ yN 8B=YfO9LΝ0x ټ"q}kM,>qZhK2eI]1 닮h|ggDp\PD@L.c,8ؼooZZ,gH '"{tqTOz~lIBNj%}Ej2U=_(ҒmPE R|* (wnܼ˽3Nc…yXmׯ(JdaW0}Fy|埳q2[|]whZ?w0P@jrΈBZB5 4P(]l\c,>[^!$n)C,/-CN=NcS<'dL0Hazq[6n`Ν>|H,˴mߞ"W14Zaᧈr}4pL ֑WP9M 2#(ӂy3.SZl -RnH/P(K>OXv-:uĝ?1jV(TƘt*\(a6'}ŗqigpڸь8`ؓ1% ,8ju$%K1VP(JCc$I”}/۷SZ\'WPE u3hDllW-9ğ$ZPp#igpvY#f\3y2e kdM랆FP[4ƓP% /.` F@dR^#a@7YLu|. y3XCO2"X,M4䐯V0YhVc;ת  3U,8 XGQRcY0ٝ*v'j aBR-6Bd&l0)&*A Q JBR)M(Zz*Qj1=Ȏ,O%g &XQ1'`y1FwyFUlsB:-$ޤ) "*vb{+EREz'$!'w7$lݨ矻{ܹsΜ9subHHY|}b3pC`8vbƱ~8v b߱c8v0n3m0dùs#Cp C8woBk g>]F6R)܋69 ϡ}h2DJHE $"\Y&*OM9[,,QP_d#jdA8 &p0^vlGh7"•pJzބ${zr 9aP&NĩӘr zꯛڠ4vrS⡋x~{=:/7n͸,^4͋v[vR^cYEQx)Xu6ћ|^[wCG2Z$C2Z uE7# V$ JBB=w p;!#'d@9ׯgq틨$o>w_{jq7PU0t*3q5+LuVfQSE}eh[Q9&Ṟqԕ`IH[R UؒR.ÞAe^3zQy`љػ^})۽9B\mLB 7J€alH|`JF|`vAlص9TFtV_ƞه};CՁ]{))B+ jwoŜ}ωs{oˮcL<2Q8*ۣq*f GZˉrPZQ)hj.؊*ͼA٪ܫPYuhhm1k*G*G)1WE ܕ%qW+N@E1$Eq)[Wi!\%RqOwBDMZ_dMRMhv{2JIp&DF}[%,^i~ZKs7#+ʱQ_^%.ڲR, ԖcMH+}MQTcJ:OTJ:UyDfP]p{Jelv*IU)RB=+-H}Y x*1⨬mQ8kYmjκj5ȲYS`R:b˅FZ$Q~ud"^q5's=N~=:Ӆ=hn8{H2FM\!S(^BI*/ $$XW dTUlI1[>+c#5ƭ4*ŸdˉΤ$cѫR WSJSjKgjJ DkjXѪ{_x!M9/!Cٟp2$TPQ!IU , HptNtCFdHZ~y c0 6Xot @LF/`OIGzSؚ{+WUA(K|c/(ckdl& XDV3GdI?|΄wkPѱ->JCqލAem#Ցiک SW ۬!et H:BT&*[~o8B i p|n )@Thmm]v]VvШΊd)vJWj]B !ymCfs+TfBɰFFw˿h2a4Z\oV%1<7qioWMژYI/=! ErvkomEYVG|Dw8Hx#ksvcJvˬ=Wӥ;5/7 A9n<*kڽ/+gՆѪn:NU:NjzTu8]() lIJGeIntHuhCf+ۍNujJ5!df3_7fM1*>_C=0q ^C#i@SzN}6 HR٪uo']4(eJte^JEY|}N,<^7NHNe{dd%\r,]6!nf:KQi3rw<^ '.'IxYt{GjlQQ݂C !}MF/i.')}&u&5VI풒vaЁIq ,Fv~Y0sz.W4p"qx m6R6ӸY0}26nŠ:e9эz7:B239I JHr}67F]MizgATL ɩ8@CCOCG6zn:] 쇍a}:dFQA> rw"'z@ hԭ|6ԈP+"53/O`'^P!_{wb2z$9a&BdYVM:0l\΀Qbb(eȘq8nPd!4(R|0(Bn9MF" u9hGW_+glJKXK!x㥾k\nW34p"H-9-.[ ~eڶk˾P4R4ufGȄ2(ܐ!ѽA3$쎁ϓ:5o&k/<586wwoL5$,Vk K \ezhd5y]^/TO-P'uK4MC/(2ߎA7'g .F#Fr0b8utB׆RN偁U@x|!Bf̙'N8<~_E Jv`PЄdJ$AȢh6`M& [|<;:]O+x ä.۳k'q 2I ow 4-EЈZ% AMNijr ٽm 'l#-gH PP6/EG4(Ӧj"oЩo$:lB0!OFf*^Ȃo2TAcBᛐh Ttۺ MéS+h4m۬f;!ʼn⪝ڷџxú1a)Act;ӟ\n[tW6^AGzXY;4 ^E`jcrȐcYoU 5 u[A6t=Pt]fDGtKhAJk94V[T4&O᳏>igCe_Rsc4HcN$i:I"ii<jL[NrG/\=ث_>Z K+="H)4Q{ 7F2vep!DPg~ǎh6[~y@A^ڦph4(B\!"H`NrpĢq5Z \/yxga/Unm]r$)jAYrtVq94 e,")-#5IHJl@۩AkhavBF+:a^!hv '16 X'g˲ԴPp,gd>#ԙ@ GF姯3șvY;3`m&s IDATe/~Ђ`fB hz$f<}_Ҡ\p 7Tμ6#i4lPYq :gP6#t;mPPc\6se ٵ^}=22j~~P)ښ|Aٖ5(rPh J+ \[3aRq-Ior CSN;]JOi'{=R9fh?j}h^`/@=xHmJE@enU^Q%٘mVȬT@v*q)s9@og`R1 fpԂ5`!W#v*vJth5Uv\5QkZ,6xNKeu)촇OCZy0ddطcV}0űCqn߀1g$m1dǹpIHűڻ]f.hӳqTi O~*;\Z6Chb+D'"J챈JD!vZG]cTKIg@x< ֵ7UQT:OhuHnK5  ` 9&+8F[IT_ fEdKR]T[X <45[,RM9-mm[,2_KMɡC N5mHR3 ;*Ӭ 4*FKxYY/bi@wVp9wU謅h QW05 P]8.{TCt"Td(-T(= B^ ;mJo8tp"=iforROŸ-hlANEsp;lIF[OrovNh,t$d) TxV'-M!dA[_8 F =ǭsx<4Hp,`4Bgh4dY&N#SvSW _?ҭ;ҭ3ӧ?延ӻ?{+=ۈʦj}> {FjaIɠ0sR*cq`NHQ^!&GE 8\ՕQj}wZE78 Kۥ02mIaFC$xZAk4!;;y]RN*GtQqJ0u:|=4&M'㥪//RXeX Ch{( )J z*KF+ڨx V[4rmkr]5YeU$kkǭ8LMi5*)K5}Fk[Vx*G$FNoKZVkʙu&Uo8HLwA%3*cݪz(9h5G- ) U" iXؠ{сs5f?ܯkh4TԠ7.:ΟVl C^eەzh ^Z{MYi807 {Wb *Fj^8~Eb|W5`4SrOrN0R2z)kV8Ъe*u`։نp0X$ Cjoez_@`**+Nkꭐz+~ƾ Qe5T$AWaQHuTvZm]FR @:jST*i^;+>}ТHNMc1أFK}y2ү`㪭FoBC=: ÁdtYvtM":ڙ{=ndnQW#I BS#Qo6azGHYy" &xiN׫y/+JKd@mdRi},* V5B^VJtft3O:M:|˼ǨIsɧ3yF^qʽ'6:8Ϡ[̶NY;@01]Y*JۣMQ HU鶽t[dWybXE !id L'Cʺ3Ufh6]1.u+),TŰ)v9PlAp+ɆǪ:&bAgHJ`'M€a K@IХW:\W^f6RoQz[=QHΦԛՌKqWn}m{-ބHy;ysDbHtFE/aLP l#lj,۴ןzIylnj<,}|*}hVC.?+mtU:0=N)Z>ZV:)U!O&ev^6Z/kԄ5["} Hmv|H]jA O܇EfknN83.8a&8ɬC-o640A~:o BfIKq]wxFqN"0B/1*PKZ4zcavA ۞A9q|}LfkQ{5 }C=X2!F16;C Jj hT&VFWz;$ L?&I}D[_J-Y RΠFwλw/>x_k陝1yvMtI%@tuؠx:iPxEe:{l,;`ګa<P"R:U_r%]|Oy3ϟM?I5Bm8%PY(֮]n z旞BN]xac.F ^ڷk1HyMwtޅ|\;0*LDkp h! ԎvOk֛t3% -Mf*:ofPLV+#Mw~19[r!nւ#G#f hBm,6;sgyyNd5_ůӊeأc8l,MG`GРOMNᅊ AA |Ee,}]R: 2n;s Tg_jNةM.q]g2guur>p"DXR}a!/9~Aac6 v۾I0-.,Œ^iGSNc !bLp -?9ͦ6kY{QhuamvtC񯜐Zk;?#ac1lBP_ϊO?f[oۋ [0|#|57=$43KAow4A;})0A[ +h/U΄ZY%EJ ?Y'cȨ1<}|V+]p̮!1(A3ҠmЛ!!ؼP֙eb3il&Μ&u57 ~|b?|G AaxBeP:NAn.na1w=2W|W|_w /~CZ\r;0"䈶`)C(g/Sk\.z,Zw$IClB"88?Xꯗ8hw"c8}bN!&\6j2@N xD7.lvAԌ,oʊO?棷eڮuz n3:7V; [}3#7>}2z\@[P]/Hk [>h u67E^/gP^yq{?ۗncNOqѡ)I~i4(JZ6};HQFcJޚF"MwĠm6&͚ͤY[-CUyWĖ ?:jڣ?lGQ=&6EH{ !@7O{ih'-#m7o v:=U<}Q&n6M^q0i3?m߾R_}>WHTl#'NaAJ*]{ߨ#C{i<84 ЄyN#l易NᘓNk/:[oW7,_:Kq-ޅpp ty G݅ `w_sđd#5pFO:P^nj %}[״F } j;۸5g?@ɯnVeْp\ك#;!:VYh[ɃAAjhV/\#t" sE ^wAE5(8Nة3RڪJnm[ؿsoemTWDfv.}s!3;\/$nmhKu k/j>duwoI!^~Qμr4*ςh]ĵo %̎,+Mˆ-B&(}33mUelްmaoۯ:xIMHIRj: Q$;[Tt_2T,@¨}HRXX֯udBb̤3QYhԼp"9 Sza0y̔znfOouJjOJ&9-t2葞ARZɩ$aGfBir7Zx}ܤm"pO(}ӿߑ\δ\z-\z-4Q?2%.uAsA YFLm BtAiOfG3bxDP宭d F}QClFbj:)i$%ēH|$cC A7`AjO{Y]zA}]m C=hm}M9H`]n#A=6Q2jvdW!Jؽ(.ȧ )WE-`ڰXl6,(vnl7WtJь&& ^VG׫[NΠh5Z%DP~ o~%ˢqN'V~(9~ǼP˲hLCK촭]Φz4:mo PN: HuZ-u5MfZ-u:"6;F"L );j%*6¼.rp (۩,+#&>¼TcP%6*J(+E7P[]IC}=fEC]QWbAvp44`0[=n0[x 0 ˨,/#w_+);THVTWSw:"l}q`6~[3(+*dDEi1olQUQF<(Q_!=ʩtLf8G-84= sP]]E8镝C<*8TP p( Cnj ;wr(-*`9IѡB~_KYq1kW~Q^Z_2TWUw9󩯩7^ahh˯vƒr4x궻/.tZz#x+&n &μ*byr‹鑑#g/$w6O}Gx2}rݷ1u\roe ׇמ|#F1z2 fSrGIHNfSy'X{ټS|,yE*J9Px`xKΎMq]|ɻDs|t {·/?σo.acijv`6o^S/'oNB]-Eyܲ4[%\w\_*.?a/-_|A~Ο1g?V˥sʍ_p>*n;4ab9[IJ౛bՋ'Jzᄐ~[O>Ȍ)'ђ%dFV\}sӏOBr*Y9+ѱfϫ0[873;x8{6@3t{$whN]M5G>*JK8zEy(+>Ġ1QR\ȡ ?"fITqpv6 l&S_SÞ2~2:voPώ4f".m 6-Î1!;6߰Qڳ INIe@AlX#( Fo03x~ Y?t;7orPGA^'>*+?d )/)!gʊ)*'wP*8OATURx }۟z g~8J ltQx={x(), )-!% IpT++GǨi *"ۿu2+`}ueQgpqs:K,B@rZFs쩐=2|f"5S2Q0qf%a 2E@fygYЩ%ex㭷I6d56f?}=ϼ_~{g,]r W&nd!~r'o)/)SO䃕?SUQΙ3_p:̟2%#p<|=zsf`ٹb Dq٧r}܃.=˯ؾr'oN;޹yEL}91f6/<4r42=s60}i 7?YBL|#c09f,],`#eՏFOʦk5o6 v}nʋstvo̡?(;p,cvEٵeEI! MIue;61x$uNlSPWkW1z4\N'&vЭYIDATj,vCM` 9ڲ^$[6/V=葑F qhu: EZ26;: FZZ #Z˅FeP\eQJXlP:;gyzYg]3˵{>g.sFf[C:?wi!ژ$sJK1'n%̹7~nM}끇8:Ԯ۪{+n]fナ]nZ,F2/pwmNk:tw_^vS%AujPn7$R!"%bP"%4ן P!<=tzfuͺ!`twؿ+>\NجnA5@o뚟~ps!.水NGv]!g˯#xO})’FqV.ق-Cw:!H BFfȭA9adV{1 cv1()BBٸd/5h ^Ùkt9yGy5W~OC۳QNEo0wV{t,LàTca20f3;6m$&>Ĕ4ਯW헗ۚq3tDR6oc'(.fӉMH+kٷ} 8646_|~ _Fڇ\[PԳ6@i$ָ?O?boLuEf2xx{"h&:gNda;(6[͗,կbѫ/qwPWǯ[bW1gLε>Ő/yxxf?cNJj*+x塻5e}'o!c'0ضq_&;f=6sՉGq̂o &>gCك'ùSFEL9LJ|!\A6A4Y:!h}0=~Yѫ)H9Cs/re2嘹\q׃ ͛jl^n3W\HjV/κF&W_6]uo̞𽌛vO;Cr|CY~#9[2xKy) >cԔ ӘuY:L>~yy?ɒ<)!o @BTn~U>Ϙ:w>w\p7<<b<\} Z;ΛkOh }}!BgP5mO7(_P̱*^L|olZ+]/nopʼnxqOuBcxdZ?s0N:qص'HVz'_|o? Ov7>">(Y;wxG>ZHLM OȓNc̴ j[}.k~/HLMc_.l\kxwl1s懲Z[v`N좦eyp8L+4#dOa~oqLupֵpY$&/x~ASD]QfT4Z&hc؎}k}Qw,* K?fKӏʞF[tyM 7Wˀ̣8o1f*3rMNew>5frpNp9&%d su:-"'bPZ7(=űDsz#na#}9COdPLMUe#s,6;J|()e`4#'v0ͣ:h1lRYV֪rFsKzQ̘:W[}E#ٻs;= P_o(jseװyZ.~\Fe}l? :\/bb}NW:4rtz:}s2dsOʃwq%WNܽN:w5=%&oVMEUyFSsTC z9G`2jA9~ǃj<5}ȻK&]j͝Ǵص+z~C'>CyY[fdƼ|S2Gܴya)ܿD%fSSUIZ 1 7*~,zv?_V~K$e0x$ssɢ;E]El?V} 36gS tn7yg_С Nrgp2lD㟌|chl4uȿYrj*+Iݗg_Ysżc I}q.]:=p1=8[yIL_-yO^K8ېeOϼٷ}+g^}߷mcX~Nj_ya>}E^qߔhĠtN~}ExM9B2h$$a]MkfgFJ%'"7td}eIa{㭷3K0Y,]g?Y:^nۡ,,ns()nb"A.JC]-?w/k;ww?3ϼozŊ)!MĠtA9o.P?ˠr>y9lgX-*&bP9Y5rdkogutl=2q]gԾzڪJ6{cZ䟀P_VUxB_tn@Oj89A_gS&0rl n&S-h ZVqvx7de;w@a"bP"%bP:/+ȍARRR0nΉ&$u٭j\ \Nk7㾛%&&SYqG~.1LHÑZ~X"3Ǐv'?$>@EE?8O\A?IlX!q^pJM p} m#Q`mVݫ{weЇ3N=%x%_Et &b4Hc8L鲳TJJJxc;9\ԻXHLDBDsA+.(YA!QNC'M'Wv ܎DqaKHSG$"HD"ُHD"D$"HD"M "D$"HD"D$"HD"D$G$"HD"D$"8HD"D$"HD"~D"D$"HD"D$"HD"DHD$"HD"D$"lc_DBIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo0.png000066400000000000000000000622371247673406200244540ustar00rootroot00000000000000PNG  IHDRtQs6tIME )7tEXtCommentCreated with The GIMPd%n IDATxu\UIǿKwݝ( kkZvݽ؁]؍twW@&\\yo=3h @ꤥePT? Ml @C'A~z !#޷IHH y=72"QN VVN ^?kR"-|  A"8)AƇeGU)|T9)O,<;;>}3N4^ήEƍw,]Z__?A0; .q Q|#~ѴIg߾|@;f1Q֊6X#^>r5\CA\ -t?{۰`|?yoReʬ߼kW */54J%52[T_zٞn8 .0! c㕩lAaA:f %UjЏJ?WA6:?!)Pd7Ug&R9dRv?p*t-rrà׏A\qSf+jqA~1R Rc4D"z(Y 6mh߹3 ʁ\@۷=yjjQCyn87?}CMեS^Y YCwf~FͲ!AtwsRhձK|>y{:]<ϛωC,Sľҵo*U{ zdDo^j6rB ͛L0+VpY+#ujҵkSʭd޼z>K֬ 11sx><6I婜%3&gȨ1g||.Sfƿ^ Wg[nbb"_ĄIsdhR-Cv0s(bmĸs0":2wn}JJc9/S*пB ӡK4 [7l} 3&Cp!,4SS*Um|ׄchd5eʗ M] s3|}|rjeٿOw4SWrau@tt4?#ϟ8l J`YTd$AA[X`bjgoo="!>&[uZhHo^$(0A(\(*WA$ghHXb``^CCתT7/=E$Ң\J(T(vs'~,˔trid  "< l /5Uj}>}|"EѽPlYʤX <{?137h}}'".6^OEWOR)^79A|c>}kx%~>cbjJJU;o@V lv EK_N]:" M…%2"?__bbbx cVǼtKTT fdƍDGSP!ttuENy^\ wCC*UGd bemMBB?ˠa;yJء<Ç)/`W᜾~"Ŋѥ+7<=ʊH`aeŤg򿞽m_ɳppn?ښO> :w>-ڴa̠ܺ~ 3qq 63f~cUDGcW0 |TY: X4op}N<VM[ph{8< ~ a̔iS V7$)91S`Db1F8lٳu3M%&&RD `Œvd.YȺKpbDFF@UjԕwlXuk GkofZ'/آ/8peֲUXP=/.sI9ow`52{:ԫEofy=Uͮۥ 9vڵg~iK*cǨU"d~RR1h}uŋRsrioN )9wbbneչ3.!1y2Ҏ{-ml0>p UvȐ#)jofp;}̛ -[ ٸg/$''KAFjvmlX~ء)P M\W%sfdzڵO|維2f/glv?XH5KPǡ.Z}UaFLĀa161ֻ'o (W2.ǩy uFAC?ʅ܁ Up:TXqq^esgʹ ӼOXH;6gӔ\x|aߩБ{126>GpPL{Il^m2kJ-$o\Ĉ>=ٮ%{Ob ;cʼnwpstdS.ͦGZ/$&&r~6aj@sME%EFKbRZDԬS'q(.ƬEȈD"jׯ/ScRMçt gˀ~ph8NHNJosfgPSQK%4-[I0"~CrYp)S!#GK {~̘80RY#ccɥgt@s:Gڦ-&v.]Kѥ)VbU2r޴)$&&f .,ȉrIvl\Ϩ?`Xn+U:DFEɡDGtkX;}jm `F Hȉ?aCٰoؒ+/.@ReB||59Pۡ!/]إҍ :de+UƹM;J@]lyqٵs͋˻?NNlۻ7͵Ȉ͜~k,_>:o <!R@;q"ϽyS.Sb/Yby/[eRr֪S WJ3?&11jkag߿'?̲39}``( j.R,e6BrR2Z7GI3ySnx>M261aʌlX=;v0eLl H.msXA-8~у"`"xsmݿϝ7ٸz5VV9zժeΉ8W#kg)sjI2eq*5jG620003'3ϸlř)]ԋꐜabmqR/E?9*-%?C##5#K"doEBBwS9y'P&ѣUX 6>Yn/T R&#YN,MFFslD=FRjc}[o&`em+To$4$;PC||x!N-\iB0wRfDrr&iD c"Əfıl9z dLKB|z8۵Аdtu7|$JsprgޫR6N_ɵ-fHXsVounrs|- .O:&h]~~blbB1{4-+_|} +kk7(0/>>bml,T3J |DXX(6 PyGbcc(T*^+5*2ϟk[6LKNN'B042J긕}"""#*23 Kl e0_װRwW@?|ؘ%$38 DEDoh]"k,/.lDX(ۻt5`XK#\~Dh5*|hqwPM`_*E!Uׄ6N Wa5qkaT~BquXC"~` Oz>/bk?Ƌ q@? JsSsA\-97r z>/ +F k\~ i^<j~H@ŕsnhJ>C;79W5\WGsUlg$=\J%\W@mdJ%S.7h. ?&R@/ AN=ˡ*7'(|\Wk|\J%߹ JqYDr 7h.Jk 'g\|^\iJ_/r|ϿO>$:߹lM6.yq'/ڥ)̴ʐ-;$:W5#;7s fՍirxFI[- ~aZkS* z 'Pb%JGtnxԁ}xOh` 6vV>-wZysfWE=FFGkd-,5Kfŋ|f87y(܌dޔI؁]6p9& HW'n]5&I :7dlʰn,wbthi;q QQپ MgBQDƿ޺{&׮EKK>r5.=Kb 3S'NpE-3i6 mz,8z%J™32zҟnx^gD)XH\7mꥋ+Mpmo@\\,=@}GG`ѼUkvģشz::: c<ЏxRR/_⨻;ׯ\")1---*TJNqiCCꦟuHזv[_zp? 1вCءsCO :)fLO5iS/XܹqY6o.sv}|WRIԵ#N?*Uס-::ng@\yJE=[7rl.V9qb^VG +P:+'\KgLi'vEgeX*^篿2o7tϠAؽG`eeWmH,βFMahlL''L 5[ /^qJ-, 0Ӧr B7Ʋl|jM5a_>fӾؗ*HKD]uh3xM[1b⟹9ǹG6q2.fm ~!~]==!޼tCnecdKV^ad.q?Ɓ2m ܺA3`D2kJc)fo&.. ™lܹnj%))YNhM|\|eN6oWOZZZ,7˖hZLINJjSINjm܄Adt$&&/Pi!GO_T?"ZZZ8tu?|8z`2LoL5-(×(Q4o^dĀL7 KTV?SƎՋ>o/93~(@bB+-LJА`jկO1{{*UƐ^`c[]̞QՋ ֕.̣˷l.ٶn-켺GN^<;L.d )ʠX8unYiյ=Ctnye"~=^cyqyo`g:!=ʏ0)o,REC JMNN&4$K++y*gN)=},ZoАb1&,ؘhVٓ ; VN EG&,۲2+R7ͅOckWPAg 4sĕ7.rg[77a N_B[[[!"&:^N^**.ssܸp33e܆ϣdJ21<,;%ʮrJYc3yr2'}L\3Fɜzeh7Ukp1CCxyG(R}V#ûw#$&&rp^I`[رy6`Za$`U+IHH`-N>{{y޾{}C\ϧODEFGbb"QQʭWSgH<5k*a85`"߱=Oiz֕D^ \*mԘ׮#x6 e%{x6j7lLj5γFTV v7dp?rgs}7׎'~#O<^X.N͂057'80k[[bWXa QQY @DG#&", ]=="##$&$!>)\ܡCN9Lǟm:> OՕ( FdvqA,\ѓf*.H(.?w KCBl>Z2j_TSWBԑCWd;;yS=Ja]۳MY˭/+-Gm݃EP.b~l`hH$---M$3LP_;בkX I]bC##011SS,015`"Pl9 RԪWAH&!1KkkvoJ5ٻmUG4Yu,Yڴz%?c{h`hdX[Cwᒲ\ƋR{; ]\3u"aJU S*_Kq N70YtݟNe\SNW5/MͺMJρ)XJ;Lf:vDFFjs߾.mإϯɋ+lD2!*,mcς\ŕkNs;l>VxH- z@\ 9`!V/Yp}:Oܧ!ji%]]=Zvġ];x^\DGFry\ڴWdnܢ%Ο%>>!mQt*O}r[J<\Ûsݹ)$%&~>~yq6.jii1x>^BBSGdƒee9ٽecqUܺ:zjOzܸx^J%>MytߺNئ>DzuBU:7iCvE[߻V/e4rk~ I?p=~$w/#Uk񈆅} nz^A-禼3۶йW~[v ?4/.˷֥ 4m.njM]jyq5xjf$%'AQpܤت3 @IhRbtڥ|۶rUc*'pwLHiަ|t1bmmJwM1k(bbbE!M6{pimնl6uJ]+g,Mєx- w|[!(.tz8ԋ'O(:z$c&J,q9(Mx)C{ܷmsY24l֜KN#r'%ܾUMù٢cNܧ42TlA%G))+ᜲ~<s߇H,OT YҼm;;̴dr?.6KOҢ}ӲcgN.2|yE?ʶ`X6(T/.+1f%iV ~N%E ۸߼|sgq)űt,ZDyk\aVZ˟:qNjˢGҨz;57󧄇jUxt`F:UW.ؿ;k SAL_i6S=]eUt3PQ= ̀JyKJ xRul$l4oӖ"ŋboR/> !@\<ݷoSϾ O]e4Zܱ#vܔ [4tqS"}.I\[sid.4Еߦٕw/)!M?T0>|[ʆkF 9Ҫ S' ^\<߿~Ell TU˺u"]4xOvRM?enit0,=}}j6p3y!H.Uɫ Vɚu]TZ-RB@\^OJ# qEDjА`-oצ 4lLQ*quoqhҌk)a⊯v!w:t֨`XUj$+5S_ݓ+alfznxVmCs>ұ;| lQ.rNlIHO_dx8[׬d߹K3[j 6uf5tG%ɝw޽~>vELnTkWY)y6ܿNݲ-0'㋧O%+T"(Р@̭sN{wA{|| #:XP3 R,4G7c_リ[XGhH?BF;w(!wپ~aR@WMA`ׇ9y#OCU*e9rNo6~:n,ڥ&xy$u4CGWW#ACRRƦ84vO$V!?ld|"#Y5jٖ+Gqy#Dp33v"VjffNN3s DfGV2sII2np&?ub%nqn𯩌ʄ5wo3UʹMT\r2k늣 a k5h[IJJʾl#G( ܇O]dj\oͺMs9Uܔ}8E^Vd4hи\gݩ{xVw} 5gqhDɲ4W%ub%zMd%{^)ݒZ@S#RJu߹Iz rRQT?Ǻ`!R"Gj5Q202DJ<{*u+mSjypbnCǾ;ɒC``ele ;9T?Ȧβ932vJ@^?C##7b6)Ζ"1J==}%DL-O$2IC&&& :Ho냕-ё<}c!O> 4$ۂ87u6]m Hw51D>}Ӈ)j_2_8tӇx9µg13P= 6%$'o;CbťΪ'u;rѧ^x=M*UHm޵s#>e ؞XJw8޿hҀd(^ zWo&:*BE#OTUWX>6)DŽ]pQz-cǪeXJ/?} ߽mB۴R*Hݶ ľL9$RܷnfFDZ$&&tD (XT=у\8v  `휿)XK[`|aBŊ=y( 7XvV-WFM-ذt|%@X(]6`ڷc7ϟq>JOflѹԒtڃ"ŋS** >Ag ƥ ._^z=&66Vz[dD8O>\>@[W2*1G:sKKU&-=,)T CH@J@61)O(P0Vw&6&) ǧ+TD >HУ"#h1OJ>G*A෮=l7gx RpLLL$",c3siQh%KbB1QJfE"XLRR %Bs::ߔ}3g,Z,ל;7.c.ܨZKE}VoD {*TXJE㡯#B۵ծoTP'kp0,4Aܰ~0E#xqYfAkӜ:/.+NʚN}:/.iޡ ήӏ:*&7"2,ޣ'yOH:B\:O)Y'gWydEV8:4>z,!Nry'hY=KG3DEt,s!֙ ]XOߤ)7.^Ш~2K޾&))IlT5ť@0,---j;:qƞ:{h}o`Xnm8~AM)RNMV2 emr:R,3M<F&rSyr2ܤTŕ5&Oc|ɘg_>}by3.nm8iT+ jhLtdw]}%qdsSK=vɞݰwy,ݹy~\S)$qjK2ՏyqYygɋUO^yyx*\J~ez;Ez <5T?)QPBrENHp MSbh¸¡E+@f% 1WG1,013GqǮJ욣fŋҠ0<,8)W!àǦIJƦ yTe.kL94K~()v/N{+=y$U7$W^\e4gON?ɰst3yqR񣠚(:m#¢cপ΅$;47o"?78,3J y#ăXƥ۵a5&ϚCoa^tCޮrox /P_ÿ#8ulLvi>29 6b)Y\7{{TJk;{ tXBk卂;(+)VkEüB ꧤp#&D!9~Za vk2㍃^\ӣ\W/]@VuL%^]N7Q:S&x<{/kБ!H?OŰ𘙜Օ3v g(N3gPK^d_y'M=1 ~:(GZrFMR+/i<%60ۀA|&GIbXwn@cC\^A"bXnDشIm=Go/NroRRsqОޓ7O] 84i3U5ιuig1=3 bXl&?vlRHXem1}řrVl{O\  (b2m8W xyV  OYJj$KS]]Ι?`DYǘRB'016Y8m#J7*eLCccbS70@^\ȿ"x4i)(CxھO4I?l,yu2.9ŭ/SX:/N}Fxνu|<ߦ"fB^&0IŻ["tZ}he% n:y|I¡s,ɩ+"^kVʽ? fxowZLo99k.mX-W>}{юKMyw(/G $N*@y:yq Gܤ肸|yGLbJKe=]>Z,| G@ .}^ts1Oɋɦ[_ v^zq^x 9tYċJhE[xqev116W,I9IG#4Ë3I1;صG3Ī2Z ,𢛻@;p1Mõċ+V-(T:tmi[#9s6&+=-~^k0mT nB% OH68`B,/o۟/Ӿ&~qy#P/EfFF~q9_ (/&o zVlY=2/_pI!~2-8c33-n2%aݿ#/~2Qᘫ?z]8yqhK3wO/B %۠ၰg~Hv1u7Q\M uu"wvg饴֫ǁ~p7 k[='=|7\ |1Jج\@g0Y7#/6/yq^xŅ8Nj<tEx{X7e2ϻmۯr6(~I  qdۯ(+.js[2m?/Y߮; SΊlMU6<JڥѶ9r@W+:"(.1ev}Q =铲ҥhTg J96Qq7:n^GέL$݉I rUZ>$zI1?~ZuF0O{o_j-3s*[tquϘޚ[^ȇbIRbY1=&-lڔϥ(),GB=q $_̼ۨ,/X *ˋ"Ӱpⷦ#ʻ/5W,Co̵ؒ%f(aIp<KfǠyzTUbaD @HtV&;%w&/N8*\i-!aUgܻog& /bwS7OsG=Η˛?Ypl*H3D10>aX|f39R]QEMŲNrggZ>Ly.ٙR053:Oiq1tBT*P|8 gشkA`ae8w;~ѱܢTxlP*LӠ I !4HōML'c I [S!6rn^r>8Sz |ߴ_5v1 } B A>s:r(BiCMba+\_+RIv톡C1YI gR!env:IUμ&&09 \t%г[u&Hɂ"== i] TjkYB073]Ot[8ڃ,Q*=tj>V ~j*Q_W7#I?PNɝ~^J!y &0> }J9MMU7`0 fn@cŰ nv?aruW/aQm1,UiP&@\ fIQϖ-RQfj^>{X% K'WW!h ˌR*^/,GJT<* (&{M̗V6 nT g/v3W ݂F{wP)f|nGʡ}HܷFFh&ܼ|+>\Õcqlc5U6CW]UYuy)st1,ϡ~R*|qeZ.0ٱf ƦXr=j}VbH ,m[[gx7*[O_FC}=ދ!#CCفQU^zy555 6j+A*/ü #1.&s<~Fx::zFţ_~+fb˙}WaǪbQ8 ޞ^sOGOMMMf006WeDxII?lx/fg^ ¢cqm8]]!AMeJPRƄAGb ߻ͱ(+.Bv5mm{69vş;7x*/o3pw骍 ܹy k@ S`/MpWе5쁸d{RxT9 چuǿK?G@x<}ۜ+Tnf002s6>_E]]bPzg %042yN- Aي1K ]bb/@j*˱НBU Ĺ lxfqVR5[p;u R;H@uE9} Q`J҆o_ldE/]'*ccZޡ:~3΅B^mӏ^<|> ٦T:45=PsfRn%IR opEC:*2ѕV4ɌNBI?:^>f-ʥƒPY^Vng`J.%^A\/WO/ F] N EA1 I*xW1,VW ѣYW' +:Ę&xڽq/eljF.qVU^R/{˹yOͺ6``TW!aey7 QwvQ.l8\k>us2 Q+7VIWOo`[!|/Ř0Q*GeJ) .VƜ/bL|J,VWa ne.(.PVo r8Hdm@K)h:~*L,5<9|!~RF~>F \O,7Z1J:::b}}k{HY]Y~UWYCZSYoMU5)eE'ܠDzIENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo1.png000066400000000000000000000646441247673406200244610ustar00rootroot00000000000000PNG  IHDR5AItIME *(=tEXtCommentCreated with The GIMPd%n IDATxwXW,H7z{k1Q%Fc4ĖifDa7( evYyvfܝ{sw9W$JyD"dcFFFbXDVe6݈MP":7?|kʣG5HTסnmfl:dH#jD_ZRE# Q + {cGGfFV6xg@:vF1Ane3A&RT:kݱ Hb`Ͼ}D,#=csh~]wZnТY`v1~[#wL> yfffq2eL1SvzUfD5}V[ H$WË bDq0 Gѻb&E T} p{ۼ)K?G4 Qi9&k|I)zP&s ?iqcUZ~q5i8r-[̙tݛKY{(du2٫b‰0{ՙkF*}Re+`!w"UXK:.U Lf)U7+v  1QQ ݛӲ%11Y)V66X]Eb1} hP<~]~L`&Քfr_G fRELJk T3)1߾]?~GG_G'Q jIH݉Ԫ&gɷaiYKXDbSq"4C#c:/s婦`&U1*h&0Ξgeqh. @??qe{04.].j*KՠVQT5kh7qV[O Rx:֮6mwgݚ5jXf%@5e1,qͯ0cٷ?_Az >|{vȭ)%#-D-n>tn5 jގS y{TD0TūǏ5y"g~tѳFC4iCMORwVvnXˣdAᣰ[6rss9_6 ;FF ,C{K[-w`ߐjOMMˋl3aM),]A137-ۘ & ŠE Snj)UTH7jJRΞ8ɵ9gg{/(Ңs?mIbmi*nV:ՔSSgp6N%y}'OA$;8ܼ037:I݌L(8ٴ6̌#Fk-a- 8.}#۽ʩgP: `ӓl :t3EVҕ}ϒ|>=۴"&*\L hon3ݶ{1CR=uq#'MJL D3aև޴.nMYdM5eT>W ;wԫ ff…8 3PPouu-[ѯcvlX 7CCslĮ8z,'b1o4sqUŴޓv]Iy=q,A (jSR O@SL5s<8uEokpb;Svs~qT6>Iaצ l_7ϞfHv:] oM[f]1)t0"ed3U}4}:|---u3A4 V={$dq,XLi0So@P#m 5mJ:ϑI9s0ňpȰ S0Qn˲Am}CdԮ\Dfͪ-==SpA~o  Ĭg[g?VoU_Yڪ43};դ0xFMǴhD":uSoתF==j)EGFLJ7V+Ǔپ=9pkVtWջWV۵zu3 Ѹ~?NM8~`3}h&7\@Ӥ& 8D"ap,xw27^k^(91y2ׯ#L{?1]`ffNd+*IQ+tj[ud,eʘTX{ݳ+ĄαjVt "0U40ƛYZ[78uyOwfFthFO淟~?)SXo$}(wץ Vlg&&yQլԦƩ)/Iq7!M 8ydbf/,V~dryqiӸ|" .}haU/7Գvv+nl^SkN^ڍ1]%SΝ:տpރoDD]ME?0b;La6 X֪FR8}FLJ561!oªMO?f[+5=y*= Dظ7D"&LaiԪM!8VooK֭ YZ>>f kmGWQ@SլLojf΄38~k&86E (TٍWbҌNɲs6a'bhh$|Yt3%&eVs wwN4_5u kh1rk[M!t3WMb{l)ҋƎ"Yrss9o/ft+ ހo>+e)L?_sfbĉ,\Dcu6y&@ҽ{6;ws\J(]ojj*;7g_104dԤ)80rWmz?VSƖ&ѵԹRMyu3U΋%?]gNу䤤JO5CC燖Δ h* $$լj%ML3eB"߂o.:6ag ªF2gDzr5~\M{ЗN̄, 8ˑ`Ӻujضn@ΝԽGZrSnVjSDԅ5vq?N?VL5SjYϟ{&wg4lhn%~Q!Bxgeו+Yp!^^|r% 5(YCY8~ /gIO5X\{$M޲X,fԤ<}2nmŅжsWįjڹ**;_Դ6cۛ_~IVVf%=[%R.Zt׹Ǚ>r(oٳgl8pwӮkwMWmRjy*;l?‚ٟ|B^jNӹǂ/bȑ {+auΝx6;6ۛQЪ}r/bwFZldߐH1aEDa_ L !5NdiC%ګ[Cp6"]2cdZybTnΤQ#ֶ ͜8Q*U6N7&:u/8}=zl't`HK/+ڜgpAcǗ h:ybݬ6R‚/.%ez-{hT ݋m˓),jP4TF)w4F3hH/r9pv>HPi:6˹{)0_/y9̷ūek,RjRM) */w"ORRXOjzz8}ӢLTΡb3}6n,5S*Q/e߽?װu_4nȭkԶgĄtmmmƉj+,T"%Pߐ |Ɩ w.`Q]{g>i]]],5wG31thΜ%5ld^XfڻMYPvLhh*Ԋn>۽G"ߟzc@:uwpNLLM IrRI|>Ise7iШuSn]ha+/PBs=xI% Ѓ(P+eddpAGB|*3͙/cun0ޯ~Q!PҒZVVXY[SӲk^XYBd=<Ҫ^t$g5Thhn&4Ք^ Rif&F&Ƿ=C\t_YTHNСGuJg^9Q@N[X`naR?tBEƍy3gp|ffX֪E4z&Lib{gǼ3c&xn:>CT7S?J feyIe4Y&m||9/]ƈq w.Zu9^^4qt,!r"V6%&ݿG;ԫ"_nVATS^ip'G9aY3r~2ûIcon:uݺ  O33 ƽ;]Φ5`hdpLc=_wY2ΝА1~E[',D\U4hC*43'))D XܼC~w@,b!=`4|5aڿ !tiтOgH Ǧ[Z :I6Tj<).XB  [Iy[7 iՆ9S&eZZ*G!=v [YBn]];~g?Or+:%3`KS'F^}G8oZ]v+ IgSΉJfR'H$b|`>#  !pr _}Rxl矑KW1?~ZyVU ҷ?v{0)Ǐ4#VV\Y=Ș)Oos12[71d$6n.~ix8O33hKYSsd.=@FO#/(0P9 >{-Y٧k_[VEǎͯkyںA܍IѨISa&PMufj )v[7ͬù'F<{')mX B704$-ҽDl /o`y>N#_tW@2h5HeΪC4TC5"ũM9>ttuqۯ-mqzv!j_% fiu3UYeXMntه'dx*ή]yhCK2hTv F5u35΋{-;|} 5N$8 V~xז͚WJ0SjG+TY)Duj"YMYiuh8vR.r?/]yO0Y^_[o8Ѥ y5PlYڤy`VGHD4jIRT8 ,3Z6x/l+m̿YQP*խѨ[\by̓1g|OIpYϟSۡ^/@u[jFe'e:fII'&2 <|퇎`*H7YS6>-pn۳>gDܿדCMk?05PxTnVAInVnx""AtD8$ݻ͝]!HM7j+MR_[2u|fdx' 9sm/ѹГsk C#c ѐKԢ munߊB^%cbjNnn4g7w5lH$bm,t~3Wuj2TSSR i١3-;t I ag8Ghiix=}}5*IRnAtx>xEGFc-j憓CFՍ:wպYujS%Km265ÿ{/B <~LHiBϜؿh郷_[ȝ9ŪşFM+kYYYĄv!gNrpphxnG6YO{V(%% ܸv mmm4wݝF3'gƓ:թMj `?43S3s\qi^j,ITS`&SKޣ[VhӧDz&_۽Orssi xŭEk Md#(=z#" #-tuui삓SfݝM䖪$FfBS f~Ν՘ '"8/"iwz )[P}Vݦ^mFdzk~B$O2: k%YD`w70g7wf'W75mZjjQMUfOR &<yzzonqW>DȘVҪcW<~D39əCh5P+ɣbuI *"?(@/#cc\]qqwg~8Ѡqc%U䬂%ZFTkW  $ÊrCC=pu5ڂf-+:S8ovV# AnOH$4uv7k[;fMs=zߣ\BR^N=ʰ137ǹ haS~}D"YHWttB+H}Bm`ۓpiA授ﯶ.޸xz3jt$Qcᅭ޾KSgW%ښi)_d1/$uĻU+\AɭaT:6o "8 $8{pک׋v ӧDDDy|GWo4B7SתM4^ɭUڤ,&?{ƅ0 уdpyڤGxl]xp #]^Chx!W9DMj"j&&$HXP>]D$7o_z /Vvv^\SǾ^}zLO':, "I{!NWoL+I fBSMLq"lVU |Œfvv6" :OxpA.5,kK>h n VFFmov + ѽY25jp\M_KήYeejj jLY0{t ABx94qtݧt!>-PW߭6!QqS5nJH}` {!3##S\q'OUajLv$T$/rb a nafn7m;uό~Az)P`Vxױ ;vY^HdH6Mt1"q-:74ă/ԪWm+A'"(ffҰi3ܼ}ܼ}ߨ@g՜ڤEc'g;93h=H&28 w?{YxRr<_+-r!"o!5Q75I*{2aA J޸vCccܼlՊ 3 cS[jLa^Ӓv{Ѯ{/ _ETH>ejV.DBc' aU^iYsTFMMHYB4kAFdh0aA>n0vt||iش,ڤ-Ѧ'=:q*_:*8ںCSʜTQ|YDUnr+z/_>2b$||0/(Rj@S㤖-S񀗣)kp kW~$uthsmuf-+ao ѐwHu3T"x>$:<  ݷGח&ի6 i"]==\}ZӲp_B-C >Olu%yyyqif:tyR%Tn:+$_zaA\B;>-?l$>XYPEfIw+ܼ}=h }CsW7ttt*vզJJ5Q}vq?Ξ>=Ia31p(V|/8_}CC׶K1!}&''{ ˇMf0'7j "kPa#mx)޾=9Wm_7jpa6g}mmLb\"''bljV'Hb1vܼz4/+o+=- Zܸr ---6jed, 0>Μq}ϟ?ƕKo O=DRRD0Y0?<)&~+\tРYsR)"Y7:wC z I{CccC`2"{117gH$N:-bk4vt5\VҊ1]IgW]у <~[hд97 Q|_L}= NƷ]G?OvDbnY`>z 8ݬM\VPMi9'21UЉwнz\hY9NaQ*_ʗ:Ry+}ͣފ7=5q\?N4h u'$U[Ӷ,w)^Bh0?n;X,Gt"w8wp7._be7O{*^hD[W.!ϙE}1~ Y>gRϟ3JKgOy !\~E(E~?n-g_dHy*(NmR3TTT9v܉$'ȘOƏs9:CxDVs%&= Fϭ;u{|ꨫK#Ggnߌ-^-[;ZT4ykD+#+9O33 :ǼoVkDXɳLE.Gݦ=99ل9I-[; ׸iw;XXEk͞Ts$UΜ8k`::զ[QR0}@Yߺ:/6m@[[^kn&u4}&ql1i,z:K[vpb^=gѢ{6%3# -CCbkvVVajf^&=y,(94kۓ@!B/ek{K?BNrT-w";+XƳM C#uh)-~M5!e|I|EftD ###EWoݽ+۽*E5esÃ9gkO>JTS ,I *fY؄˾Bh0?{a>e:{Qڦt/^Fntvvq1rrsZA]Sdgg-x-8sh~"wI蹳 f/ zqAA߹{~F7Z',吩C'N_'bieéy27^fO_7zr,V~1Gɜ?qwRo>//p{_W 9o?ͭkWu*-~#!A85jY僨TJT9< f QMɒ7I7hkcdlLzZZ1zana ?#H|:::ϕHĄLܗ: 2e|rrr57)kP]~Œ6w^L HG˿ŻE51V~ffdec[ fb@ ovj+5l4W±Sp_#Ggj ŭEkʒ_DnnPLԦ_]7ǟlX;A&@~|n$2K{FOFyDrFO^݈ax}z~' D¬c=w& ˅6nŷkW9w/֗ǏF+!1!.M<Ξ 9qێTnUxզûv鷕˪S"DnӴԦqX0=$% >KФ㇏عqq7ni&>$bGk舕-FbpSgHwt#,hծgϔj<}L dMޤ*BNnNTHOʩMzgET*"+gM;7<TV?R=[~ ?,3XmK$@D`ܜs EFdE7=}=|mL􋃕˷j/NOKY7*Q7L'`KMwubdГr aj3fRUTgZotX(mm.^B.ke\tk/aW2R^=n ++e_E֩WX;/_*;eQVU` `&CD;кSr~!s5ygf) f(e|IY0L)o%lHLH]99t۟>mm[!zƧ6%ܺMQr|FO*$+~z٠gJBB5Uj_Օg6luU&Q͔o&&'iԪM®f&U K] 5%)ÇM7f[l&ffoۂ?$H!M@=__-;?ƒeͪ Ք רɬOq ,V; jגW iM^~;v: ekǾ޸&efImB"!cs(4gOvGL!!.©`&NpҏM-)j|j6wŵ񺙪Wm0n2'&vJ6".Q,s,~%#e:;2sh"CC䢚JmR%R Kkk.Y {ڸ΍d$BJu[ M8߿*TC5 *K;Ya0r! zb!SܼvG ܎:r=#/IiO+$3)>ʍHKct Ԇ]u&(D&֦SlY 999jImfeQ͒LƿykպXY0+#ޭZӆ- 3LOO V7զ6mϷobEZwB|ټSTM5˳g&){7j*fP4 8czR*U* T~>]'c2ph~f9Y|_\it3u6Yyq0 .^J3vaҀ^ls5IUݬx֬Δ35Qgo눏jvjP͒!fL߇_.lE_O_/DknVQM::4 6kΟCFٙu?ݸ8a+*8hdgein * Ok5X\,Gt35h(__ DC[G~GDâykhΝ\X$-[crbXG?VW/\7ц_7y,V&yu3YZ}yoY LIffFKm^_ʩҡ<*׭`ccP@ IDAT.Ҕ> -hͨ ̓w}?~:={sd.yVk/V}KQF&X&0?7\&U;mVlMĹ3ӷC2Tlj:ttB!ll1a2O3cn^cl7oȂYkn\WEȂOS7i?b ߈9ňNmќySƳiD^5DMj#g026aL6,>wo iRPu[}7dj,47jj_[ܸ`BM55RS9q'"8ĄMLqWOo=0QSqJƇv$ 6S3< y{<΅.p5&R5w 'O/=ۨ "HYމku76]{ҦkOZuy͚ryr{ LE= s;eϸs3w;Wg&S_j`Jז!@MNNGdh0!ADFfF僋.4uqE[G@MeypN̬gϹMLx(‚ %u i掓{>9zzcimR0999ٽo"iriI#G'o}oC=$P/%U MV֖ˑ[o"oh_^҃^ԴS4i!iE|!m&,,j繹\|А| hI$4sqgO4®N,jZ*lJʲ@piSSs1" a!Ą£dkĶN]ljcS6u`Sֵ`c_C#Xݢ23 :yGu* 7byp??E,cc}ԩߐZvadj)F&31E,kj粀DcqlN_$//V4sQˊV6Ԩe|Wj^OLA*|GOOMBx(Q!DNrA\>թmjשm:k,EA`@M0Ǒx;{ IL'm2RCSMM126#cS\}ZsifoĒp3۱߸훱8!ZUTfBSML]DxƢ έrDP nzZ*2ֆyϞ 5k{,i୭YaS7j2DCӨfImWԦe>SC7+սOv,۷wXǁԀnh߬v Њ]<+ǪMڤwvlNbmPbAO߀NQ֎csxGByjAO߀19ou2̋7'IYﬨ+&QŪMuݏ\xԔ1֎}ZZYsuHȱ{Y1W/F3{jf2x%L:3طo:RxN 1s%]fL>LLRx::8kH$l!]!;9 ] ԔG4hDX'QgВh߱XPkAfUBJj,?Vf8upb1Vv 09KVi/)X($O*eXG?dwI{vc7^ݺI{43̞0)p3ؾ=ݻ YUECVj6Fy\ty5u PGm֎kkmֶ][[n[WբR,%HBHB ^ys{ν<|/!8`Yl19+VsMƿ&oؾ~ Ξġؿs;bRz]vm^ϡtl:?q,5-̬}>[̦_0_FWq5+y+v^6DRxwObO˙b=]_S&д}'9B.{ܽB5?8CӶ/_`ϜEu'R>k-^ K!ʚ4Mg9yι[dee\%GǢ4j'sӭIIWJpH(Gcӱ[O;k @ my1VB&sfzЙSGYl2\-ciBVmi\|Xagw0i zt+v^AJE+d~~pzЙ^Ft<|L?kTxzW"C<˜73jOо{"eThGCP޼R 34Hޑfl١qc8/:Qa#޾۶P&u^`MfYy>[XxθPQ8^7H2 9V jZderz4W.孍dhڶ#'ljѬ}'lͥSlj/艑fIy3CFb)YڡMFA3Y3' yw5hDfuDRC[7!H ifmqz"ׯaDDiYiաe#ME/]@͖i!+m]uqˎ]BӴ;/dql[+OrrvV]3|dgfOxaZubΤUNuMƊ} Voq tœZYCMK{=c2SGO[~$%2v`rYkʤL_ ҭ3ry.))ssFLi31/7_ߟla3pB<ymm mZ7/ R lR+'0J.Ԭg^ 6YBim&p>5{mJۅ=Pj5r9g#{xv6IW@Ps^>> ћ2уt'';ȖTs=) 9YY4h dk_Eᢁ]fHJ {|efP2 ,)b`>Դhց̴qRz6ٲ2eiRsfv:B.'B%ʇ PӖC5ufY!>8x2]PBaUeVfBȧ U>wV"b"D""Q9D[X$)SG89u^1u":u{?u"D>qfu#vyZm juBR\GR'+y AtWio*M9i9Alh ЕSe -yr33`lhMXgvO}/N"7K~)Ulxz?<7NW]Era8$R) 6x3nT@?7+.of蔤'JQ(6, SRs6 r6Yj_Y Iq/N"˭ NhD&*o^uM ]h%;8I(leu묔]4Ԗfx5K+7Դʼ0sQ JP*899:,&5fćGhm@/[ЦRzuVq%RSZVCԬ6PM&+@鯤R(סM96:Bl7hP^x3Ce(j,5B@MT⡼W!EF [l!' &ϕ۵I*":\4J_oV&ɉp@M +oKA/ofڼWB"Nc%eVPS_YRPFvmJes YBL'GZ+#͇}p|.JxNxzW"$- 'KO_0f6~ HHJⅳğ=ayQ@ lj.PsRf"ػq [W,ap]ώIs6e]NV&_ƻSÿzMD.8w'q{ӪkOnbȜ]r3uke qt{& Ή}9s mG$^>i3^ʼ̈́"-& PFUퟟS+Z1g["B eJB+mWh1N|*^="( wuLK,Dl^#O\[3[??`l!^xmoYm}QhyNNZ ԖiR^/_PCks-|?0ˣ'q1[ $"-мs7X2+JUӮ]K @.#sv*oVZۘTt7qb: K(Js8H ^0R8bG87q: bwgISڼq\R6凟el9npp3)Ws ʈٲ̇HRZ?lefkHnshV޴Z! 8o<"===4ܡ_` ɪ5pvu{cLznbvlP-;7'd_oݑv,JK(3]NfEUۣ@fd? QF'Et=)#9|:o?Y1}y-ZH5;BQr)}"9/:fs-9I$4ҝV773R&sSR6}]\HHX "tl&kSz"@nz]b.bv]2-:=[R0~ڃw`瓘5z7'' 9}#'+ Ŝ΋: iLw <+7 aʜY;t4wOon$\eԉNNN: eɬs>g Om$?[`B#s'GhD@ D"*3pd4i⊬R+PHJ;Mͤt~j iA@`yAaאwFL$n;*WX0e&)Kef td2+Q[d&3ۛ$#V0RfyGzԨZLO DxӪ͝JwThwe?{Ť$8=bj F0U82Yu͘ KOv'o_B5=/L9m2ƪudo&Z]/aߨW~܂VJ֡fK}m"ur]]iPӱku#ye?{ u0on8+uf/ܩ%,<:NI2cצ2Pf"q$Jq`-jT ȜKLIغ2B`/MqzC/S#/z f/hDz̝:3?g풟Ԗ+ݳܽ[72cH`@:gPۦ^N^u1W:qY339a$}ҫq0_|<(3`)L(Uƥ)8_q%̱_^4zMBY.nN|m-8Sj\uM}qЉKxt<2Oe֤1|9K@`uV8'sxNG{HILʨրyoeLgV/]۴It_~/fԬ]Ol8oNeƸᖁ^֙P2J>؍֖r6:\0iX\v:+Su1z {}7 / ~NG*e2ѝfI/s>def\K6۷ԖyQ4ʊpc1l/n #?Azdgfh9oۮMthHe2~8N 3{nȐc|z[2K:a!%!a tԬ4WJb*m#Y0jɷNFeǛlE23LYs L&cU:mxy36ofTYެ./ 0fM[݃qʜ:Fa[ټՅFQ-t$#r<+sk}%;w%y֨ɣ@XDSVcK= X>j1hyx2yB5ݛQV)ɤ$^cӥ!.VXPdQӨK 5ZlRT\|0y:_<+~/Fꄀݵ94o=L F1h(>gq "-.n +sfr9o$+3<77L*ʮM% X,ӨY 6kQ|gg:tUd;D"y{Y#-śx>$sub!I kf%FM'ɛ_k6 7w\efTڎЦ doeV߸u=a  ; v3fWsuw/쳖JGh[y3[gn`~; H7ʝ]Z ZRa#ߖ:6pf8d2j })/ils ‘z?j[ 3%"@X/.>ioA,?| b9*U zG(yܸѧF͚p^f/7"by\|\,2/%%,oKT.Q׽۷ѳKRFH<=={^8r=5.)$geBvg%C w6$P<)RDD߿^D2fHL3L%'NIv~*5j1֯g7r*.\wuuuwx{\,EE)O}| qK-]:qӦN\,pSYB`E3dVm8Awg hѪ J*Tp p;o@:Q(s@pp?-^;wxA6;wYs3 0w2;"r8Awgp;8up; ;J`ň:qp\ܴ^z{7GHKQaz;UZlLw@( gQ^ Aoc6ȸ X/rGIxl3عzWFu`7pցYYxYfx'ǏGԵ0\cHׯq[PN;]N@y1Yl, v3^=v<.K!6Dg| v;(#q=~IZ*?]!z; A_G|oyΗBww>?#R."K`NNPTǏ"IMg<ٰp(oCvB|!%!9]@;w֯%4͚=i٥K6m<"m͚H}}rH233jOݰ7V>=Z)RSWgFV422}rMFHnKLDtwG'C/, M&.n^LdaahAhRɯW=`-4#/<%4 qm*Hѹ# H AS6ah76mg%M>p1/7kTunnH}i/_Bݸ 7T4>tD }qqhWG~M/sIE}Z/ۼ9aCB$Ɉ.ztH>DS2۷P׫g˜}oNS]cSKxÍwo7gj=6E C|f;o݉ɩL\v]2kͧr\ΩY8w,*U?0XC}B`n+틐P[ݽ1om0)-tT*w.*qqw7ٓ'Yp VkX8-4n\s H>,@}gNna <3sCdtly&EfL|ޞntݯLrznǒMqV}>|$o8/rp ]ߩ+7 OKMϞ7k`q#݁ܚٓ3{__qZFZο;~9Kfxxz2sLw& FltLρWs} ?JKnRc9ԑ{wʰLDu%g [eN+׷pU.S7c82R 1CߏV &%&T*qV8%%>K6`is[~ vksXO?[]rPhӽ;'N13RRw]0Xx ^q{شvm)}F[]v&g ".f '))eঋn?sM)D"efm؈+0w/]t"=*jH!:rm}3V>7̑[_6"EEGOK,6IpSrp -{|С|駴n`6['̿j{rssӭFA&Nx|.^-[< KOPktmʒ5qȓU)DըIУƵ eউypSqb;$ܨ/< JgjV@UYq3ӿǟ:( "C_}*HOg,ܰ?Nݑpꎄ!(ݿ)pS:/vxC9r Ͱ28VܔI,_7مc70~YʝW.^}% )( Vn3 t\|y) e VF9Nǀ^إ ^l"ًs_rpSm4ȥ忍,6:0u0>~~XZݼtڍ }YxgMTZܔϝMa#s}ϟz}S\9Xt\^0EXMNjt T=1IDz5yb) yˆO ͇b%6"BqR*Vwl\XV?5nzG!mO6gƭTygJ/^nGtmbRWrd֯WEaosB.<nzbl@+`7HJPˬ]y˖o4Myy{|Zrgdaj1}xԯǧ #yH, ^öM8f؏]nz{˚rpdu´y ZYѺb>ozD2pSܒ MU&/6B`^:^ 3(?Iρaҧkk6TcoVQG]]>#ưlRUsU{yEH6_~CnƢiO҇4voZh t .ÆlZ < +2o2AGe=[iP o,_BA} Ʌ=8lr%kײfrԔ5)#=~];3v4j׫gQߙ{ȉp gw7Ɓ:^{ܔ9K-J ժM1Z"0iBrsr>f$:~DWJ?/[̕ 癱"pF=&4h֜Ln](;(r3u6{Qc ^.|Xu'ӟ)7V )?Jye_Ƞo]_B?03WfM&Ϝw]a KXF咔Lu٭ܺq#11|f\-T*YaK?˼tl-S7Rvv6}vf4nּH}+\7A`撥l^ eJ53x2%ӷl, 0U "5*k2O/42Xf:o-98&-XDbvS8;j,KgN+RX]pF-Z滷<3 ,^ٙv%;+ˆ7%-w7 )@q3,4b5c^b&Msm^'\0t uHDO96v"NRB׬A*ұK Ё7y MI`7\ Yvy1S& ]K׬aCyˮ^/ ,:Qd~v~, >++r=0(3f2W ;WgMee]ޜr7"‘H$ԬS7Oˆ_ìo^zuHoA\\)KJ6;DՍfϷS~V4Qū0RUXjpRױu *#3]DlYf3oM_T)erpyl;ӎ>#G7ujF 0mk~4`vϸ{`m7_gڸq,[gPx(F ??fDGɰahW74rM/,V)VqF޷|ћ%9S 3Wxܔݐr!Fb9n|^7oҳ oD+ٗ5);+]ם.Q8E3x^0ulyrGJmi!|fߟ%[=ϟ))ЪnǗZ_K}I]Cy7 U;>VXprb`DQdl;_pS\ ĥ y2'(?LLd,]ƢWjJJIcuƌ!6&6٭eab"{dW`ujuᚓ TY2WOө1dB!OBbq:}~//.[Zb/8j$<{3rP$xz΢f pz ,q M4de/ϛiɏ͗4vom2Y.}iR4ZmܣrLJ#R n"Ϭ1dGO:0:F ǧɳ۽;?̛G̊Xl)̚'طgO3FBlmAҧk͙KjՊ1IE.RX jL3ݻ89n 2O6^Eƒ ~\!&tvIj>[ۯ^mxܔR)݊Q^BȥPSWEln,q֮Ꮯv)D% *-s7$>xN_1dnJ7P۲o[,CY?tov0+w'_'##jؿb.m,&y]?x."CW߾4hj9>h-'s.9yXܔ*lzwq۰5 !C 9KbԬ[gзkRSK]AV^ |q3fTE3m.9c3>Wx.ϛ2 Z/۷r3:.r=vٹi= Y9."_sC8vORRرand͒l^% }{ fD8KZ%UדǏr%be?&N\8sȓ<˯[7,_?wwʙcGHOM-``8q#u"++7,[D콻t~mNBNvaE}pͫW }3I Ch?$%&phn\v aGl="q:|9k#7']-پun.z*09ןy߶>7܎Rzk϶- whHKcL6KÑ3M_G%+#Bw& s)Z-~:|n\JTd C޻QgOa"w'I IDATo浫dqQ=G8-̑hZn\ Qb" DݸZڥ.=@PԹŒTE'DݸܽyDE]Vkc',[jMJr2Ņ7oKի]@&&:'''&$ "deehHNJBPp?.wwwFB&Mhڼ9>ܺqokۨT*G*V%Q;/hQRJqqs'* O//޹g^^^4mޜ&P!0__23FѐL.$\\\bqss'.67wwr"_1gWW>D*N%777ol899JŃQУWt;֫+pvqqr2r4@ ';ZV#33A"!55]C.$R893))ȝ@HϏ5k2v`|=4 24Hy8)+J%id2j5 &נEQO"!''TJvVř EkVf&2lfe΃NCZ-ZT*ͻHL~G'k9rKF-o}ƭ(KK(|C"7d-[Xh)E%HpMdg{7jlS-ۼ\.V@ZqvqiJR[R)M[>Rz:yP C.Ӵ HRjT*afʅ1`05E*Ѹs hM@`E+UݍZu!iЬ9rM"W(\:^>SJUԬ[gg#Lڽ˛T*YNٙ*իr/~Tr„&*q29lX UUEjqqU'wOOpvu%0(gTU"R%\;~~͍,~5qsШyK<?Z}_GN=-N&77(!p"#"HLHrH>y|?t(>^h9}8i\ !1>ܼyh.#Μ8NH]{7}/ q-]]iλҙGΟ{lFmژ-^MJr2'>Lݻ#j7Gpq9عY7D7^׭X#YYY,3׬/fD׮\Sܽ}(!Z|"p]xa}#?/Dݼǹ|Bpbcbm232d]|3/' m[?q5's_܊ޟ"1!MWV9mA"KfDO{Kg4xIINfDݺɱCyB/^۶ W_"0 wy,6xyra!C#d|82Q\\*A&5 @> T+W;vGJ%2 D"WA'%R\ 7&M׏!W(P:=Ӱ< '']\P#J7 G"即 ..xxy#HX'ltH[!HqsU*Ppr7w<<;9X[I*UJwPg=APй@<~j5=` ?R)zhtL.' 7O/\T**U!vu"AUǐ2J% 5dj7ЏH;I>~TR~c톍2 HX*nVdmX4e< P?[n}d A݃5j"HT=F(P\\ݨV. QZ r..mD?"נ?]ѢM[$ u5? AݰNJ%^y 7B~UF<צ-2+33y0YK{BBff>_ӳo_Z^bM)y͜m [(!.Jx[t32у~\ 5rFZuVJ"ْ'hlAa:b+A(7 2mۧH WhG"2uVmޚЖ4O |(жx9 <4gr RJ]?UD=hګ;|ՑWڿU|;y" r.ZBUO7Ѣ;n`$TUb) /[7wvfZ%0u_PC,EѶ9yӖ*`BKEQ\K]4֧Ahv9L1:~C7Zq=O:u㭏>)#KZ,L1 t:_~CW(M ͙_&`ylL ƎeipM@5*a&ÏZ0hHZW9 /Nfז-+KY`.YYYVEbh{ƂK}"]O5Lfű}1P[Ė_bLjIC}S8ɬk7io@gŮF^~fyB^>BDeEZjJ^Hx$窬ԋLד0lϷ}VpnL3}X hlFȠϞ_✤5?%^j׎} F\Ԉ=9sKUQGI"~Æ}_vl/Q#2PHI[XwUڕ2bR$Z0hٵ[mʗHMJMEH7/U]Q{U^7j߮J.blRbcciܼ9Er'aCMBoު5 ofڨ.J_J6$%&Oieb'ZB]4Lҗ zy5Z `y1s2F&W(0n2u[VnJ}Do).0juaVYhH[6nnT'L$"==zsݚȅL!ab)fM?]~+&LaW.3}8lnvCI"fB8j^wo[ڴ{Ŧ 脌/mBJOKۯbŒԩߠC]R!-G(r˜0WVm݁KBG~|MX`1U %&ӢՋkfCQ^+aJ' G*U?{}R^ /Vӕn_QC5}6 5mIۿ 4fkO͢vFES]i%٣G+e @\hK)9|2f7W:_kȜ{Ər[{h9=+rpQW;ACn_+}&"ռt6{ٷ\BzjE /"z~7e ]Q^):Z͛ʢsvJY+sТd;#~ۓ+Vcʴ풔TJŅk<-Rt}1Պ:|GǮyukC+G#ٺm;֨ eqULߢ^Y'SRRe|RCsC;7mo:YYjMnԭ@۹~ wnJߩ;Nܶ.(u:S'ranݕC߽̆En{~6Gi)*HM(1WJsC΢} BOl Kg%Xz}BziΠ3losRɜ%KҧOg5g~i~W̜iZ&hy8'''a܈ܿWl#脬 Mn] *Wj "|TK}I_?f.Zʠ=L=>oLM1ޱ+L*ӸvȗCs^1 r[.Hβ]_:^ ;esgc8)ΒU;.KI.l>ƯV}{9Ȱw4":/ޞ3O/N9\b}mxf7ҥ#LZ4onrZ[SBPmۿE=Hv1ih'IYKܕvf`EAŖI$62-ukg;ً̨D_1t`5/V5?'v]FL?<\ @7+eBV޷/}Q byNc@ntՋڼd ΁oGJi}|^G>Fbؗl.V|e]o_٫dv=z&#j|6}yQ89Y ,Mߏ˔pQ43$-H8vO^xY.C0rh`]ѢՋ铁RD&-eyz{`Di#!)Cɺ 2wzt[6޺.L[sQ,<_k*4;_=W7")~tm`) @/PA#II l+b+,N:~dH-*۹@KP(eN `&iiiٓ+WaUy" )Tdj֮͠[ִ:^S2Əko+o/nisK-~*;vM<Zם=ȥЧX}[֭%--^(@%RSO0{z0dD)=ps\6k?i6!X(ߦU+6yFXM_.X)y(\*:Bj:ۙtUCAO`)•8):|  / Њⴿ\]Kksi u7aяX2}2{vl-ۓH@!+^_^}=7T^n4[S2׉ssc>;(z򥼨o[xLTx!t7wO&/]C&UPE[hL(f -竷f˯BڵYz>ǎqp>&ܔWyL ^u+Vp5J@'s-4e`꼃,MmlPAD.)7eElW$|~,޲K1{˜"[ƥs5ʅ 5#ͤ>WܔJocܼ&PCg"օ̟7,<+}Ӷ;wO_׋[Ǥ~x~K O%%ɸÇsl8Hԭ[̜<+=Ix>rrbQ&lYyr}\L F cu8)d\4 21D߹w?GQ$&3_\W)%\ 5hҔWڿVp^y\_V^>3>LlLt>yG,ĉ&''jl 4 k^ۓ|?k>Ukb`/IMylVIE=Dmfi,޼: kndob 2GƧ >/:zCI! :Ubt i6kaG'=dw]5{AUM)8[ Ӈ{:&kP)R%՗e__#2я%ۥs 0((#BZGP"6{S:;*>l IDATӺm;+3>aXZj*vaTZne`\5oX.5kή7NџPL(kW.`۔wdgAfz,9}EQ%3y.T y[xܔe[͚SbN^3폐"@\2w0mEKZfSsOV`K^yx͈k4hjt4^^6}2lLLժ~9%\'Svmo{ɥ:իnIB*==(Jazt#';Qapn ~5k)sH) Byg$By:e^%ZnìU:b0G̿ZjO)q2/eyHe2^{Tai Ǿvpz8 "$'=DRxBhtp/YR&^L,nЈ;vs?ӝ4NQ2"n 0+3=ooz"l]O)nNb![/;+Q^ Wdp& Ϡ Shn cѯRdϭ|fds+n;ɧ[U-\/J?S=zϽbq 1o;:71=NiR{?o,%TE{_wA>,ӟ%\G_˯pus FVK,+VNWx)c!.mh_nX{åJYErU_L̍O>{w?xVU,^ycò%p߼j:7j"t\~u FXA]w&F a4E;~TKN(>'ݤ =8uc|2 nx;ZOQ#Ecd_wAp&y`wZ}5vE}?V_'i(]}k jk͔uŤuLy0[Eՙ<4z-?hnQAt4c|_Nym9&AEs?bcy߶m/`_B7GOK>cfy.n +=unz׋e/Hܙl=L*[ȇGK Eع{x1ezj7l;u% e_ %;Em8 ƀ,X\Q^{y|>Oe7vp5<͌ͅv(-;o(7t[~mEn vRjټYMT Erep0ƫD))خ\)a?cFmVDHIAc;HT(C΢ E?l -v}3oq(BFdK"hZS؏"<ɓGFw7BJ VE%[[!#ۑEDȧ:0ڊbLaq i<)?K٭_'}E>ɓQcnd)ح_h0Hq84˒WҹB;w A2$Pl`sBf&˗Ir,! د_4*|6CjpYq] :{4<{e-[6.(υ`{,\Q2oƤ1Lصi]{y]s#Cxb~gvtfԟ5i cL&g‚{xA'\QbGg ?` 4iӮD`y{eEe$\``Li8~+ YA Ι*ztJ^2>Uw( 4b'~B^~4d$htnu'yy`>ZW&rFV\ңFV \ӻ{-b+r/ .b+2P]yJ3 ?nsf"OL>le|=8ڱNNa\G]avB\ijk(D{(+pӧx*sUl ^KHY[/l/p,wLJg$O& z=czp߼&~ןU!u$:8Q/?N\_Oåzj>P$ϒ*ʥDE|$=fMoqf(5G:*57W7F./Ww'VtdgfHgz?xQ m{RJV|Lm7&}Xߗ?J qX>z$B ѭS{Y6>pq|A}{3;\^FV"  K<'zc*>Hy=n#+׶+3W)aгПl djCN/A^NGI)JZPV-KKMEY bg3X\ݹͧcۡ23vF͚qi\Zô؉CѰcFhԬ9&7еg/A +=][7o@.#ǂiծ=lٌ)IIҥkM/х_ck1ߌ+a8#]zBRq8@ hҢ%p!,Ξ_~dgkF66t Rрr,0NF^^.:HW_/υ`goω#AT]mJ9okwCϫ]$>&wP*[{X5p^b+/7mNnޤ$&Rjh$=%Ѕ"O^u['bpw)@$ +fʿɉ`voR~~\Ɔ?Iso'sciLd xT[[+eK1M ^*o!3&S&a4qvuãg2IOKT(q O `Lu,>+2o#<njnl^J#Q~qu /7Yg{0OO. /o},mضn Hn͠X2A|{~Yu/|c`a{ {QSn22hH^A $jQAJFC!ovh50W%>6J+s363ǏѴUpj sԨ]hڽ"o6~Uظz%WW/ZB{~Qe?\ܨ߸]cFN/SV.d2sБsgy5gNOiܼukqWww^2X#aUӧŵMd}ίs5,kaa܌͝+.];ڳ驩=qz:/]{ƯJU jר ?Om턇^`% 7qߌ=?kapqsۛ;ѡtyD_JE_?ZHplلk$dGߤY!2ywgMnƐ!<5ӓəuG&[Ӱ1lZu|sgVG'".'ׯs||irgL&g# D_浞qpv#MLT$M۶CRa脗e~~ڼrܹZ u?mrV/p#'Ry孞qR(*3G_MJMD%BNSs吗mx{/66˛SGhEd2GEZar??-w fΝ"pmLn^,2BLKc]sgkb#Y2u [ɿׯPѿ*''+Q,B߱y#!NеgϻԬS&[Ӧ}{{V(;__~AT2r ߭5k|ݣaֿ֨IzZk/zd$wzZ1uܯjR5kdL.=zm}?@NQp94=w׻χRٶ~ .nTlfE$&ҴeU"mx/>*#d@5 9'r Sj F?xqÈR9ɱ\9+R*"м]WO LCΐn ߾AChܪ !'qw/Br쌝=Yt| m^|  @܌'^{ظ|][8o=pvu#%9v~x(۫<=Oh59l^ta.hn"\F5>"{yy :=W.׈$rit{4k#''+NG%ٶUjrx/Z.-O_ ɑ^^y".r#*D] GVN+tyy;̫=z"5'xv/qӬN>$&&Ξ pb(Q׮1|T^$kԘ݃N/mP*QoSo nh6S27|( p:Jn/޷*իJn( tOʤίa2JڿL&gr8Ӆk7p1 wCrN`耳+/҅4q2Z#Szuvʲh?5S$Z7Rps`Ѻ D&Ѣ(J23HOgu89ЩkD^;~D" ~F7u6`j=Ws!TYP8'Wr5N0b4~Ғ^.!ǏSreR1~fF7D`ϖY4zAY>%rlhOd4! "J.59^FxpL!hEDQ,t˖Keʠwuz}[71 8_IKP/}d9S%˜\.<oVi4dyN˜Jm2R1Mq.X 2u5˷wvٸ݇0u&y/~׸I~:8|Ύk䛫_~B(UB+o*իSzBS(jn UQv'[(-J?k(_۠Q~Y:iWxr''^ҵP>b6h$yGl[.Wa;.ާ_0̎u=y]7jъK!gCmcwŊwֆ5b*IN׬m;͚ʱprq%3-b2غzIqjФ9KgLyny[w*[:t~8IъV[nOYi{B>˲ R03T9󍓄lu"V?K p+dc;a p+ G;* p+  p+ p+~ 1ZnV[n+O繁?X|N p+ p+?x0 p+:Y] p+hV[nV[T0̭ p+ p\J GB0/˹ p+ /[nV[nOo2 p+ p+a?P3 p+R䟃aOF p+ p+>{ ' p+/̭ p+$?V[nV[/" SAD,2Kz,Kr\dihSHΜ.f~;",}5^˻ [̈>e+qJK< RjciBShxQefٌ 8mP8TC8R!}̝i+E+ybG?4ud;YF: >h;}Gk۾#Jys2nw QHf") p7!#m[P^Fq: V? g% anDtzh9~fƏybLH;P ;__LNN|;:i IfGr:@g_`vvE +#t=s!ޅ"#LOb1HX^Z & s+)dV?|Z)(##%%:u }{QFDkBPLFڈh@׸Il63r|ܿuƛp9_~ ]TAPF_?tz ~dw{ `@0pv ]˖m݂uTg`\Q@P6dժɄ,G@uO62edup^:wݞh:"ٕӷ9ih?ڥKeZZ-ErDrbo`3mzPʶxyׯ}F\U2_zS'ym{ n#BgyӻV,|]"Eܬuk艱bE]ocjjDE0k+p/iv۶"kO.KIFUl/ X׮ݳi?B7 hwB_8}*ήn OɁէchFzM+ר19tFV= "R>(ŐgUyF7]0\0Ǫ[5Ǫ?pV/f0#[0ԩêy" B߰*fOO:Ƞ#-߱;]Z-Zzwҏ uFT$ߏwnDELjvcjp.^F*E,3A&hM,+%M)2P%R%-pFiw&M1ّӣ7jN]D{|osenM=sȳ`iEpUѲ}6XGK2t!vDj-iC>C'1TlcTt#"#p^r @VgE`ǹL0T6 JP #Uj@R0/77>X(Q.P J0ԮC+b!{ r_~@ZP%?}SD49,#ybBv6Z-򄛨ODӂy ܁4 Qdr4(B(IlJ9|\g߮2㮘mfƻPlL͛ \kR7yӾ."F77-[&J:H:;xF 4A`<5ES17lDBnH(bQ!KM>8huz-4iׁܙȲ)„޺vLďRawrMvgNm1.^x!*Y>XC}P&OoAFD mOd|(+Wlk22yJ2P lg;|(d}WxA'*T'z&Y\.K6_;e2M?2 ,Psࢭ-bʗ4\$ڕ`0t1lΟCKN 7ed@yRCP!OKE**yzN L8x̟da k8`_+q޲ &m%[6Ɍ*>.A BYlkާn+ z㳯_avt*U'nȹp;3f;{N~+Fn1HIA0PLH@p.EPbqC4c~~Ecl`c=&UV?/T1jlq\΁]\A˦sh+ŽQ-DKHbHƕν_ eoccq\(~IpYrY٩DlŬb%r&M1;8 t^49z<n˖m <93жnƵ6lc==Q$$\(r\\:L 0{`ts䄮FMDM#m{>F77Ucr n=6j-hZI@6o @^ 1`+(S0[Pe&ζ"nv"JyFW|*b*>u4o<#́ȴD hL."0ڡHNBCȫVu+o˾݈ ʔd[.##W} -Z))ʥdhMiծ#;XUBT^؅]$F-17U &&ggLNR^;8[6f;;2۶9u P}'^8[WPT;;x$&GB/,M8C֥5BTF, 2RT./mZO=_G \ӥL~݈dL_7ng29/4``HLk9[.![ "EUM:s\Ǿ-%[ >KaEJ j W;w⅔ix-Cpm*P-$NSPbݹh5.3'EjN}%r6O?۟KVV~#35bYD)i-|[n˟.Ghc&J8O_#Հ˥5}eR3}NA5TzC}?hU""?=Bo*,3NQq%YX.875^`y>n/7a㊿HJL^&ݍ 70?/j{q)> wR0>lٽa-N !6 \.a 8>ZD^Ĥøz/~y.& ݤekgG&!yi(m0{ %, '+AzFf6CAx3L`#Z>߾e`'/Vzc*AIv8iw&XmdZ@Fv_e}K(~:œ1<{T+{m#W폆ppSSʤlkEv.?0cDLi˜0fFf6"d@6*L&7P$#)n@݉"= !<;*&P'iϚ؇]!<>kV P}XTrx2+tH7H7Q*`RDne?Lv$w* ܾ@l!yMHC{bY &oLJFhN[%Q* u:'#3:U & \wc~{K46ݾӰ/hں-}TFy&;/ܵ-0%1!.u|͏Lӛlۏ1ߤÿz:xHirQiQXx.39w(_È3[ɾ1V^GgG?.zAp&r3:YX.f9B"58c3?LUz9-?fx9rͨ2Wb>0b8CiVF\!z-/UQJF'gCN%*YA»a^&:ʌtҟ D?}&z9YM YzGiG|V/'_ d@^.^ U[O%el"TB0l,W4h*Szq"C$!8sŘN$M,;Æ˙oT%8  dl(/хFv=] 9GT5xU_ڄ-Γ#ߡ 7L8L6w8}*$fC`w-_}}RMK ^e,_z? ѿW&6EnLI-ڹ 'g:Ͽ:jG+2.%^Pnm!+=gOriw*pUkf[q>MNQ?^KQ͌B^s8ɓ=Sqrݩtq>c6^|mlWɩK}eJ2F'gDQD,ă?n0XŇy  ^PeKt%*H5⤧e㉏a~U--B;]8m2 F)1姼4jѲ\~ giQ ܳ{vY 7qwVN!=2G O3B5T*n"2]vye΅73h<>:lȾVW{YE.3jrXpghZr+PYj5mŗo7u%ѱKwj[䎆O"6Q<#EU/u@;.Z|6o"%1e !3'~)\t )IݹАNr#:-kW7X2kFa̚Va5D\ ȡ?ĵpvmDfz:}SVTj5IaOc6xSs !g / qq]lSdڸmlpusݏ2n̛2G8q$p[Cfz:Ir.69k;g9UY CβXt KL r<6ǏF^>̱FGϦ hs4,>E %REӧc󪿉"pFK&AJR"+Je7fyoXt11 %|OFG}49ΙaIOyHe{bGs<0s%"vn#-%+Ӹ5Ӥ|˭uIKI&h^.^ $Mvo\Ao`\)%3z[lQ=̅'$pdgexڟZ8UztnMINH\t tp &K-goXXh>"c*r>\ 9ùljMdgct% 5FٔoQ"øqGJO'>Dl݄۶wI @!<< 7$2Ӹz*vgP9pQyqWΝ{}s}Xc?}?AePmW·k+!G_6Ev/ܑ6th$\(lf߸r7n%H {4Tӵ#Up!̚ -к_#}X/ a >:(Yz_3zgjߑXfc%CJU}Kb/9Ju+piR|0]uǻHxƽL3/o>bX5jQ_ӛe0bHe<7,S?LݜX7kA]ai AKgOS~wB+ =!Kf&LΓĸXZƉ-zm3J65ܳ;m#.]t@\t$ g ,? }"B ܵ3GT*ty9<T3N5deg.U5Žlώm] P 5fڍl^TSZiU ks{ֽG>j+K@~'2e(LF0KnBzW.Ku9"8EU27i),5lxwl#K${rS1?:.eBԑ@H#;3׹v^ϑ{ z?vIOI&Yi|^'Gp<g B&^8yL0dxAB]DZJ2i\ :r9w(FHbcj59 Exw?fnN7} ՅƵ_!SSH'ew4?sN͘$ߌ'O%|vJg+dLB f3Kqɲ)6*T2پr#˘Pa0w}NFZ*7ejMi$b6ZOb\ Yih'zSHMA#.*R+y^?~H'%&fQ$D$? D!!V7eQ{Hfzi|?qQҠf<˧NנION{}]بV̔d9VA0k^^ٗkGg~cnZKZR"&䄛VzJ2z\ELrsdfH~R&\ML&S tyh,eܬc`K (b4JR!M Sdo2lX+.;}W׉.5}{l=# j~81Uiߞ$+"國cZr2_}.5/ޥL,>,7^uK=4 3Gc|<{5Tz84LyF^0ZҒ%۟Բ\9p\?}ek1mlrJ%J*[N<'R=/0(2q<&ٌ i\dd4`2i-l̢^`4`6͕:VK'd4Rj5y[=LMe VEl5 z=|LdB6'@JRrd'KHEGNV&)H\tP]a|٫ `?uXI?.E[յu5εֵs0QiE42ϳ͙:3s9NFRZE<>^}ˉ S_%|><::O*틧<;4hٖ&{Oûqr.ٓC4 Ga߿a_;y8y pNz\:StoMJґ}|xOsАO ՃUvbem~@@V3c(0`R8ox_d+Ao>z$Joi>~`LbʐbRM u7P!i4mSokJwӕjp`f}H63pb.._]<jp]hp09)TwQ/jz4 T h՘$S G2~zڙ 3\?sOTSM[PLTM͞/}AǷopt&>o&U5qpSJB4BV?Sn wFEi6j!Թ;+WOP:s{<簰^F !,F ĸjK}_\/'Y1kvI gӯ%Ӧkh C;Ҽ]txH R~S*$<9i ֤L^E4=|fI$חq3bT*T!Oc^ev0kS,[o2*պ8_}xa៛wET*K&'ԧ?e+U&9(t^6*Κ/jz4n6Mhx)Ƕ#5:yL43GL*t84LDǧcm7)_`;ʂ 0ufلc>tk)?Wh/ےOBSj?ǵ3'yr\ݨݤ956̜w NcZV%J/?x{Oϝ015R/>.6aفSzc+S˩Rܹ>z|~05=Wwpx/^/SAcS9̓MV#9:nO}\ӤRh`y4 ub SHSS'ٻu3 o:Χ1*q*z0g* ͅKC;q%3j>'É>SY-5+061ï}yhdϜY9ocY$0՟u6,n8i:ҴZї)C2aJ *-Ȯ?3d/w(\ ~bMاS!D*a~>;x %0vs#OpV|HEGϷ7-6GZP~؍I:#g+xxW*<#"4[SEE@*~5 ٻf 4~CutzS0tc1}_1EXYL_LiO'r(Ei!+ϳi&_Dx &-&ϗlb;heQkۜ[vafpGJʪ*,>;;5tOC)0ѺKny!#DLšTs a~LZBpܟ~LmۗfJ5|)MYu>y1f۸!CS?@RAUJ:e,g#Ny!w  kׄI6%M VW?('sJhQ\?}+!30A9F&4={KV4.u%yz O=c0]`g?fsRO@BSY͵53ss]CLj-MiuVX6mbaSf!J67S8#~ekȗ.ε0mH_tE 2ee8ǪGB |г/FQ::K{9mH`nX޻M ++pS2p!;79s3VnJ/-c(M?C hWV]<#}$.hԮjp.UpRputų8utz+, +U{2sTNj<&vBjyށ屟b;:z~>}bq5Wy&}ƔB:[v=11?y1uMl'3qP&/^ӪLHY.}BJĈ Ip@^q4͊>x3uh?,_Kނn CY`Vᱰ,R_ ?]1i>2u8icDGsK+޹?GO"R$4ATOLHzFZ358 ų+KK!!-Zixn[8N7Sbs; Wq^2Y5u,M:tI|Z={+Up).?KYSv}~'FƜ;]+3IJ* c#~rlW"x^8LXQгYq,]ۑa\RG LI՗ə qd4 emY%p}iɔhЈf@r,yӗ /طOvY-D~%M=>l Vm9lS[W.ʭorguܟc`h+ Ki 5GF" lOCmiEt heD=!-ہV Fo(H>'~(p͚-)Nv3|^- *P1x1lRvn|P0xIX(8D*5jggnn KW Dt@l xD_8A-G!ɻ,GxD%2H;USe?m@,s>Yr-Si܂j߿i*~W=1k`ިW.O֎:?ĉ=S$6QPahۊ{Ĵ4٢B)DX޺Q5jڬ|s p[ʱy #wٺGʠaau݇+Q*)RkϟpQMLST7(gg8QCCj5muۙaFևɽ:p>b/G:Y):RB=EZnF4RV.@3޽AkhDs7 +?53FKI`xKW{T]1{?y9bypEbQbz1MaE2RAޝKdnD8Zs B^ZCC4Vz+r/ɐہRڗSg.]-߸M#m! xpaCA{e1c&͗ezF.Gcc'>=)MXP050=j016l_{"3&=y/WZcSigu16c/[qnE2V|'".ѥ2FlZ".΃G_OF:Q0v<4w5wQgZ:{n4lӑ u&)Tp敌c9{ y>4lYq," v^:e+x(="RϤOܙ KK6,__Z;j&Y8Q\xDqxCcaŁ}ė.ݼ֮P)X.NPϏPa4V(Jeaݢ|~N[ldߌA,&L9޸#heh̲eo+6! l=sUbOd-(UM;ĩϟb˂|x +k FHqXL"IezÚeQ IDAT ,FC-Z5K Q<ŐBcbBd}Est5ؖu$\ߏm8:tNM$#b r1?r8:0t:OIEE(Y//W@9]m;ޢf>ovX>A\J\#{I} aƈ!Tg ClIhp0۾u>I \+ìOgjS!K6uv2AѺU ^bZ{G_U l#Kv+F7I>X4nwkk{Qoǜ/G^L<[(fLkt PAo_B,ųܹx W#4(X^T<yn@*ƒÅ$Z-o_x>OU(5mV,ظ6l\ VPZd^_!X۸ :\B,J53C5wb=oߠ52BRI%Wk>h1l/!F-l֯%ZuGYZK+eʢ@Y0jGGduM _@ P,sgi5H$c >R^L3-, o"DjZ}qqݕѳPlSG-.Rq^H\7\)/B_ Lj„U 11Emis([ޙ Z%3b+GK$1BAŚu24&*ҽ(ENHDWEu;S(ml)Zx|ӮWEĉ d o 6MP }a N.__}p[DƦsis 3(NKD xŖ(?)gt52Be@LcX߹Dim\Cxy]Cs7xr:2*u?aڎ<&_>D_sBO܂j:[cΆ9XH7K6 2)Q5렶Ekd6yFVFm"BCxubj&8| ՓHȘtL>a9wn}B5yz1%p4)51%]'䇦A5)}FKFѓضl^ ȣFᵋTi8]ab |W \Tb (F'Y\#?$H1-*inޅWQ_Å J)$C&ܙȴQ)@7jјcvҐOmmA,7JL!P<1%[,%o)ZJ-Dŋ4xx6Lq"^KovxcPYZa /[ ')Nl74fDT-J; ۳LJ)>e\:,FȉM+s -=L2#Ƀu PPa~=iR s&ٿcb91W"cM.{z P:Ib*U E`(.yi+eVSCXn?ȹt0uT$V!=Zr<) YDvw0fψIIϨX(9tU3kH/~=|zP88b0"Wub:lڀ<JҥƋ e!\A/gy$Jd;S @`&wn"R*X%-[_(L qƔ3K ٸh6:+fmm~ig;n^SvGT=EhMLy =Էy63GmeC\A7|FP`Jw]4302]A^s#&*"d@އ9.K.Id8Abqޯ3~,>EgLm,*8D,Ԍwc"~t9yy[ܒ!s%Zs T\Paz^^hdWR)6ڿ};D:7i%B>mdr‘ < 68&#//&8l݄bV/#z-$r9*'gjEbKBHК&qb(]dalFiTffa TxVعtM:DPkFD P` "6Dcf֎GNxIVKĔ=3ϛK] ~%wZ;W,$oF\-[BIT*6(#,Ȼk Qeʓ:DF`H\~W4&miˈu-\I`?MO)߲^.z= |ԋňĕ2{'Mk6y![ԝVLҏz?5Q69w;ZCDAQ5byJp U8H{?4>ݾ18 cLN9rbbfN.==c"H={BH G4*Z|x[dʍjߔbll\#?`s"%uEɻo;`5suOJ׿~`p+a.YmkZ3s_3yi4ߨ83:.%U`ɔ4S P9u|â9:Ҷ{"ξR"OZID81W(y6%?= PsAe2N5nh)[a>;pA&C53'xI \F=HL8ݡ!uCxHFMH+XÞh uOCC\-^2e4ˏ%*da۾*5()#k֏F `=EL&^#Jdj+r%HJpWJ&3H[H ÿ ӓ^# AVqT%JfLXЪmor<$t(γs&/]K m,n\%noXl1|Vif4g>^B?!/Y+y`㚷Թ_4#@$F3.6ZzQMMlwؼdM{<0 ʶ1>yHTzNa߸FT jz"_r<_gIr<` YO)J <1zG_ ]e_8~O0ttct~(\2~ϴdoxd'˂Q;`~ cj++TyD_Ϊ:G.^.g7<i4HxK6xa4]:<ek}|gd*o|F!_!# 7/IC˶xr`c"P59GGF0}@\ ȳ .^S8/Z-o&vQVD6y( di2~ Or53Ȓzbnk_SYf8p~7^,@ TNV2o>*`{)H"7|lM'7IΉjI0dTt&"+r'be޽!zdWLDUڸ/!PgJŚu}4, E0A+GcnɓG7oGDתHL5{cBG] *,Ar ==i@ "!;wx O,E`q FC":a֓Fضj)qq=!Yyb)U6GSOhQ8: 2s<ssqz שгM}*Uf#ROkj lT"eh۴|(/?z7 ڀ-:#;݈/JLj:?f\zB'WOPR!/C+͕s%,'H/ݑDERzMv/\B\x(G=bW".q@\&nJMg?UO6=s<;xp;ͺ=IGl" na@ 3\OOqry& ?.#^.xvx4a`i.xN4W\\{u9sFlߟ5b) "CN|>1wJs|2^>ϧh>j#CLhKXȧ/>>W;zGE"ڻy89>kw?xW >(Y2bSk4ܽp:|FlB?3}ϒ}{t&vخ?z8Ϟ}*NڏJPoHp`r9a D= <+|ػqa>#9 @Oy3.3ٹj +5ܴo٩Ncy1AH[?#BCP;-iuL۰p ;;6Ϳp@u#6&O~6&|zo>J3ѿ GZmƩÙF9O-RƔ>7+]6C۷Pdia`v|N_8K>y C;eHtWRLyt&/HA ;1U5~g KQJZC]j7n3f'_Sg* $07hмuYQ^!fp)ϴU2ƻwNِ^5wZ Qz.=ٸY| B%Kf.Kvi{ۋgOe(^>K4j5ZA˕} HzԽ8uOޢu>Q 2Iz=wƦ\?}qݽERe8p8;գTBAӎ*:;'[To2޿~IZh޵o=-B&3iÛעV4d$On^in^<Ӡ,ZΠųq)@D?SJ H,FBīG cF:gl9z2aܹp@Dux&hZn:Y7}, CCVѮPbٶh&j #Cu}tˇaegOc1N[EUߤ]ݽ#j1g&NdHf ВK˧gBL+޽+ҖCqh\ <ظ#{2A c"#@zx~N2O~gs!qܵk;{^=~@hP| >s+k|?Tgj8R!9{U{1nn?,^J?7h5y|*ϟJl=k``dkxOo_ۋc6{9o(VLEcZl104>rxZ`x]eٸags4g,$Ǜ'79Ξ`4lӑm:rn˃ӻg |8g } 487 0p8-zeQ9٤Ub::s©ezE=X;i!ܿxQKӑJeZ>n'3|Z-e <$i_$럗N%j֦yNXZ`lbXrxtOFkim͛ϸ}"T*߹ DRҠyK\^cHZ-?ܜ:$kǙCiҶ=7baв-x>xcɋ=|-+iNÙC2`(/gHe2~mRؘhiۭ;֮Y MTy~ @Vs`FjKӟ;y|A 8) 6j3'- @(YLT IDATv='!$(%;p)NI~y S`VN uK142f],;߾f3R) ' vne)\ͧ"֥~6?ϒ݇153t=?4[%l5FlͻjdDo2i$Ri2u>x/=xz&(Sglj*uossm4e1VӖH$ݹItD8fNDR &*M[ ݴ%V-NMuảDGF-Vh K[תzbim;ZаMG~˃e+&ۋzv|KVe;L-([6!A||Ol҂Kk4AҡtcniM*5P*1XJcm2jcne 2 : PATJ[LBћ0{w`acGXp j ?’r5ZrHTFѢRV ]7ks \Kf[R(!~h 3K+֨x<JbkP,mVPy;HοbWJ="\)M‘fQB%T*Qɾ`icjܻvE|U#qvNVZ%KapH004vmljWO쒟9o Cccl̐Dl >xS܊;=`ޘ*^ECu(!ɽ;tVG$%.ҕ N rE|)X `eBhrFJ%%?S^b#142d Kb %6&FPTYbc"3Ą3ӱ,[ko055T֑ddbUbFxr:j̱CeUŞ[ЍJut->DBdN<4|@SsD5;xEfcj PC{ EكhT~:.k;~?b%/;tm[G?O4cS )Ο'ѨMoqe:qVK_?_:'K[{޿znaDGom0];bd~>Nll]"&#R$@`ek'?&$T:vZ˥p1ZD?pX_:Ջ$F[AMoigۧ/"QǣhH$apP} }A3Z?KI2R*rmOdx'b_;\fMV¯F%p#cc DR>ɾxFhWȉ;R^E%o!a!0[:a o^߭0OTnK (ŋ065@b[Z2zB$2qr7jdl[ 4>Ь}n;șq™{'w.PW/h4xODXhB%nJmlw)EB"(1 f6uF&&126LjTۀq ~lב.!&*?I\dRow! E DSljZJWN>Ba#k!{2oM_7?_FG-Ӭ5SuSQ :))zv3KKǪ)pQQO@9/K KO*iѭ4oa1C`hd"5jʙX7m,o2۷.RjMDܹ9>rVOM?L88Ţ1z257cjXX`bnt4UGZ4ޯ_RR5*o̍SGX:z0FF8m!z .)TT3c3o얄$/S'obݴ?&\!3:cdbJ*5Ԛ(\ƒppvaÌ=S{)zMQӄڴ߿q-+$JMڶ{hMEibcY3w~K$2~Sw JeD|.lYm;`cIcP3qJNϘX4iLȎ-+FuuxLG>xp:{+ܻCx/?y.mjG:ٴt>ۋ ?~lہɳwo0"&V;&f,<Fy ҬOف@FAwϿy|FΘgt _\ eBFfhH ۋ;ћNӱ 9S)P(A]5JI?ЦGo.=#jу8ut>|000'ړ@C!#xr&7E"aljAf0ch_Raq!?@G]Ӵy.g0CJc"126I&QgY4 #/iH"Bٺd.W8#1J<$&j>}2U#jc `pU\8 2=`#kjam|%G7eȬ%ժdcZ%eZ[NltAE>I}PģV*1@ 3>VJB'pQ.\KO.\k烹p"E. O]p"E.ӑ"E D}Ep"?C灹p"Eo\cA'"4s"E.\~ s"E.c\x~ẀDXp"E.ϧ/,JOK[kLMZ'pL_냮>O-ɉ %:Htt>(sy?C{9g;"?-Qd7ϟN?Pf\&M'C*- Luy'ڈ/u !Q[7YP&-Zo T`15q_nO~&ڃ&D">ں,jsEUL^)?wmŠj |4 8VFI籜p'AwM[V]{)c W/$)>NzfZk'७? `%*/)ф\:%k70۴C.Ajrq SW߉33LlL ML1j♥]v \*~pD/iz:tY*ϜTUn|sԂgwy4voʣbac'4`!׀>5m)TKOK#C&EȸFM\)ɄF9'|biz:EX`\046 SGcg6j)Ch` 8Ub*+N⢣ ʶ63dU!DafiyˤR}!)!.Iy-R-7{c0ύDձutF:HK#+;2zD#F&f#$dT+dfdYYY8UvEg &%)-m  >HpZ c CS)%12GhKtsrQUvY={&.WD3z*D 7?ESK GrAO5uu=FK[m2Dvv6a$'Q#S"Ǭk݆*v_%vPQjJ2ق@L qpƵnCuTNN+2dRl]WI5C&CI| Jfh?NVfG[J_ܿv6]i\PWWg•t;H.62\9Wuy&p9N\T$zq[A=5Mxt*n^k?U|qFYdfdv @\t4j0v*o[O?cgNzX|L\f:!Œ1C8␢Y56E!}}oDGcpZh;x3IOMə2} 7$k91m%vl$ *Tw.caGG\(oNkLՁk6q4biCo&XO&3~+V/B :Fߤي=Sv +' W/(qz $4/-U>`m@Q?@@`լ)ddL]Vkx`N? ,6ުZ``W>ͮopS*}Qǰh(F#&,\sJKgN"sGzZSu':"zX`Nɢ9ӗf0+Obe|`o>K!Es9uk7ry0=]N @>|c'sĘb5h701P88~^ς9ȟ`մ6%WΜdC=;(E F $&"_;?cJ.B3/w^иM;ϓ*i޺:Zr+ ߗCޛϨ٨9L!3#S -[@ac8xϗe6+2ox_[zϷp@ƒ^\;{_ Ǟˆ?041C؄;xS~~ɫ6ܕ묝>;/Ҷs"1.V% :h{d5E?u Z}΢]Gyx6}+A^PwںF/\ͮ;5  a{qQfo_ v]yǗux߻]WS]"Iӱ)۸?yS0cFff3_k!& 2 pJt~u3+T֎?O :"-[ӲCg~P,m\MMcfiyYkfYLΙ ,Wb|I3iڶ=eXDC0B]]+rtݿ*IA>iC/ iТ5ND"-\C12 ]ݢ7ݻv鱊)}UNTz kbdbsupi/UDTS +NGT[K >: -SnCFZ{ML X;`bińeb`l±߷X}M’ZӸm{_UpyYzOTX!~*q[wN063v|پ3._PMRΩ?̪͘ ^s&0>XXRQ3547AopXޑ_F]]}#cLr *wnʚbbaMy'HJbٯRӮ-K+\(rl҂{`jeDGZM[1\>u43e)kbrЦ[j7o)e h۳? Z˕TYkF}D MLBβ[*wj-_}C}T9w}&̢AoǹZM_^DXCא.^["°)Wh}B>!&ZxiEzs<*dfί] ݾA^}iҦ]>s>OܹELTBv6ёgicGY;} VW"em S)F1PZ7©rU߿|h f-SOuݼFjr244y6ɤRNӻD&!6\W6ZZ!%:B^/Qy+eurɝti"k*/[΁Nqh>} L*%.*ȜqSEJ ~Cvv6OFIVŨR֞؈0BȐIި&jsxcVWNA [H!~/U6[) ~]z*389-or@4o["λfFE*;WS:O hپ#57FCxp驩*W5ijjʷD3Pɣb]8hlfNR171QϳsdR)0}_UY~VXI-wi!u0AȎMϞk=5 =# l߉/r9(TAX9=M--2$y!W$%[+EJb3]=}ZYА<Jq U~x%m#|%پԤUnv[n=vCZJ2'EhI$ٟa;sR145WF&f$-J 2}XjK-EN*Թ r41\n͛ݤ9pPWW.dȤ%Toج@oS+kB ce/R^f.t^%8UY>m[ @߾kW\\+&Ze74~+6&_G[GǷuc*G IDATA!!6S KEX:30$Sg|L4 ]O7^}j7m#ۮWODp OfҹX1`,2h$]$ߗwct8t IΗτh B֯Q H8wx[ AńPD !&v1cMwV<~&y,=E/`jYVnU/Ws/Nr7M؁kw%LjFu!X hhjRv= ۦ.>c6/scČ,ܼo^ldN Rg+ow"CC{ުԪN+Vzl؄so.0N3*o{555թ_b @Ӊ ~a[I(<8W>ޅ\T^V u**׬GDҴ4_D: ީO^/#--XΞ#Z!~ j̀ɳsrB۠b:ܽ ߗ`fwבA:Ĺul;Hȍ;IQ2i:o\):. k;L|kg,'V)N/d׊=4n = ^B/8}p^vn]:B>h+2b\v;sUm3fDSjPA5ԘP‚^q)JG򚂻 ɞ ߼`b"#s< FFFZj ncUI寃{ġbU LOK[}~v$.:yrZt肩URVNNVfUVW9P~N-z9PYK6/ýIeJ?hG$:H o_tR餴} -ѓIeо|8=f՜;"ojڿ@<~p&v,_4="2$/ cCcդD`hbJ߽?|UKBl V/ݛo] 6NHtt9~uξW? iZZ"Ԥɜٷfql;o/CS30Û9}=FEpyVL^d'9wГ~zsÛ]yLz|%"(fV3`2 Xrc&Y6u\gMZC-ؼ̍|m.1Cq +3h ZokРȱ*}Ӷߢ-ѡ{C9ԌMX& i<Źo 4m&de1?w$Ĕk7bkF- q,bM혴̽ ߽>O.yV~︩x/gUhhjkx({ʡfƜ;T)lY2OŠ[lp}%ehb_T쒎cޥ" ?پ"#?@@wɊswLj sQdH|ݣ/ThfԪǤX?ob`mܭ72yrv -j5Zu7i6M-MloQ V~D.y^xpoBlOdfs&Nynv4k!KFwQ;e;cUРFiSGؽkX1{P<ݼ5Z4S$^o71>`,mn|N3gVHNJ޹czZ*A/ђHL b 1D-`ekMUs\YZ.X"B)k[BIKIsP+0^vv6>deeRB7}TC_e2d2"CHOM6ߦIiz:9;-ll102)V!dR)/ޥR7N232 EK"c.mLX`斘[jzsڴjflT"?3W*\RM/χ}:aaSm@̭2g[WKB͇DWX.ӑ5+?{Ljrֶly]g߹ 9:G9❄,E \Udt&o@CMMMԤ$"E.\B >pccpѕ7$<{,M!S\+U5Og55:& uXӢعE!=1& w_!'36Ӯ IENDB`lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/doc/images/phaser-spectrogram.jpg000066400000000000000000000673711247673406200274220ustar00rootroot00000000000000JFIFC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOG" ><= , ,. *jԇIk|dz;1- > .#zgܹ@;!fwpGB. 1XA9x])g +x{g\eg38CŃ v5c$.M:} #f< < ;)rMzHӝ?ksN^SMDU*:tU }#Tǀ<\8xڰ ՜>\>p6f6˞ANlnob;CXX=@^xXO˛xLlMGu\Y3XRV2N A> v\:wn?/G%hz1ۭ2c^K\fܵcV'MΎ2ނ886 +RA֜SBejR/BZǺa?Y;z/M^{f% 6-I"`V9{LW"EYk0ҽ(@:M!+btb̧3=ǷŅXY#/*,_S-3`0BہPhqlDُ1-BH.)SfGh* \ќ9sU.bS;hS;Ԧ-sE.s o K@lt54I^ @>[lΘW9$9%ЧePکS1h`4RŽ J&"=?Wf8')H =  j)2X$ SԐd9{I Y{iR] Rg%}qSfMAh)3ݞ!xwRlf֪z6vvw;)ͥË+!"12#A 3B04C@D$2`2o_\&&yRzV~}o/ ;KBahrkp'D>;KB _hLf ARjB"oJ~?{Bў-JҾ+}Z>ўp%@=**TTrg2..-`a^Ǧm_}K4Tn]EEq7w!eUXXLbV3rI&XhSEa0r4`f*2B/83ɂ *,EK)bj+  ϩB22.r8pg+E@sj4gb1EvPdPB]9TF%#TBu8 }MK2dH9ԡ$s4kb˛qZB4ɎRfB%Ə-Nض*ɰ ˕@^0b"U@G%!ZL oApRSQV+u^EU6KKO]RρaPX[>'1א(0kYSJeO9|D$"i]ɂzQ?OOU&J/@Y ]_NRs\BtMX o12~t]+SGdlTJ=]ڰ%8t94 4⊝k[4EuAwT™ɮ]N9NҶ%2R:>Sj(>RxtAdvZ}2з=oy <ⴴQn+؅I X4UQbs׍nMbX!Ѓˈ\w;\KdBEqq`૛%q!Rԇ_*&WT gA-JrR'(21V W Z;ELef>@eyʃ?!\*E]*PƳj f2]K#P8#4NDC0bd *'NB({VT§xXN,6 yx?7 xOƵ8@('%̞O1'H])^gśLĕ&Mcf5AxTZV8[t'Qn@<:(/NE^5~CK@A&vJ_:ҴPvKd1[/o 2MvYOO]M]5#v/|7?:qр{uQCt+LgQ=Y)F|qo/?V4sQhK\7"$[Ku`i֊JMEˆ<42m@?#C@}cCj!$.2usG)gwW]X|XJ|g|~1=|Guuֱ ??V!UԢ|O]!RzT0{Dh|qh"?/5خ7[~ O"|u:xc|eI{:d0'?'%tT":7/?{/g2v>8-md6D1L4PvN.~?yӿO0yp4qF?g_ O;ߧ~Fg/d_d|{~쯙͡k>3>>0v?#ݓ*!1"A2Q0B a3?d)4d둯(\<ѓ"b/eH?&}Sq-D|eO}3E$qEQ=eRc27[>2{35>Dr9DƊx>0{RTr`w8|HQT.GRG'?MʑɃ0t#x*Dcl_)q^ ;Hcd[dB[ezDqtW/=͋\.,4qm*Ru0uȑW$K?-ϒo&2t:!GI#2&z,(l\C"ܽ+Y&25M4t:}`oclm5F 6\3ԞC6;y.eӧ)Q9*28 ~r\v9~smiL\t9y+\{1ܞ>Xع?gnGop<Ⱦ:ѩGt|nK)#tX{39ĿYk26ȓ{cu'.ر:?'0:*U3%N]^L0mN pVLօGxgxI?'zGMyȧGi-tЖ';>Ы%/,;2D='!3"/fr#mlRG(2v&{V95yfJ3="Q?e%b_3CѝOo[by! 4}2$~q'[;aer2Oqax '?O"#pB9/q]'E:,-1 ,^Eܑ{x^ؓ$E&"#Y=?5#dOq!d?3!1Aaq Q"0@2BRbp?/ʹwmo]>#:evn_ΙBΙnfT3.gKtGmԽ-O4} ֖23M2< #*oKS"V+Ցo fczx,eQi= 3!ZAlF#,{:]{2ƹ.,Ȥ#%hdXc*k{,XReEɼk*;g] jx"K繪ޕK:ebƔ~)rŕ|5TK#RƤ|it_|rԃ"u.hoOy?"SB$M8-uEKS+"lP8/)-Hi$LDfc|DdXkZgr]ir/CW5tM8عslgsȦəcs ǂD~!#̠"z呈f<$I256Z^Gd4$ebfd[R̙rbQ%3Bvt1bEINSqIԺ?+vK EBmHRC#3"ȟĬdʖBɱ0HM ~圓!=K;ԬJ%6:`#a4F+.ԝR':Kv%d_dgrٟ"bpufiI@x~:21ǂXYLNiհ#Ʉߑ?$h挝"D2:DDI:dlp*)lqNzՐ%摽9.NL3 H RI R)sD) K<ELBcٱHD(?hgb iKQ:a#ًXM T\)ø1C#jIn\NIf&3$ Azڰ{V/bNko#шHOcl.F.+Kj1@IDՈV&b#=} GDa!Yڞhd f*%1S U:43XD$! j݌NtF#C0 ?&!1 kb&3bc0!r`j ؗ\Wꪒ.kȫtaD:b|OaA澪̌

    xn:0dLlo%G,f̴Ϧsdh37ʗmtJf2/tŎ H뫯EH=2Ol^qǟ1yf"9~1 DR^1{s33ӤCO󡧋S9Kӻ^u~nuWl}6ldzVsv6^Wrll:+[y],뺮86:qȱs]g3H;Lg}S?&:;;\#tG+KKv2,ݞ97{.}SgV_j\ߑ99X~zy7/;G7^yDZ.5r{e޼OGw״K4ǚK36Ӵk;Ύ:tI3;8Ñ xض9٥ecf:̸hdfΫ͢|4Kd=7,FfW=w9>?Irڒ9\/|ڜ]m.|r='>k_|xɭ|l1f'MN4Y;vgcܸ7K]o]nw3cIa!ceh0dh|0&<ơz7>*Scv4db44]o̘!sli ]N0FF3f:&Y =8䤎&ҩ+]]8ylM{O<|xzܸ4~6L52ڌ9&s}甎Nh]w#ioI$mMѤ4k_Ѥd-} i'qW}?횵{=ܮ >;vy[.M_Skg53uw8}y75iI-:4i濶}Oέ/\ko^$w7Hbèίqx&dHdM2>c6/Ir,i3{ & liu?/|~Z;N '?gտu6Gg~n^롿8t*wMϳ(=ę3s'Z־Vya,G=]<<XrMӥЩڛrڼ9IݩLG:2>9?ۤ̎͏?4|I}A ѴIe*6}SV%/J領mmOڤd 9nO}sؽGw9guO;^/[_o{\vd}}{i N"z1922cGC!CiuhEEFMݘ~Ҝ[xsdnn.G}:ې{/o\b8y=Md?wn3_;j//ݗV_nu2'Wݜ3mtl_fnz;ifҌė= i&In1Im6cvf\s?:$:|i'?F@~fZ|IVt榇m5sjZmlG!*F.<22^odV.o#9==z$eO׵MFƲDr7чSdG&I2s]%Its$:k1Ǜ ty@Ӕo9C@پtx5k>~ Yڿ㶮c{ŦtUe2gܹ3{0Fk%3H5y0:dq2n],ØC'R1ݸ$2FKgJWHF#IK3k.WY|22:FRtQdEu?=gf&xFx֯^zxч~Mo鹞w./x־sίl~>Py7۶혐GfSe Cγ51~ч>ڋ]l7I9$Mg2Ǹuhcf_VhrhﺟF't?c ъ{y>F}L4 _++V AG ~av:qn}v١N_W]ƥ<=p^x31DƓv0+k:&*W3hIrMGTkIhaNg~t{⭇y|?~ޡØit=í?9{fƶpu{윞< l|J4ǶibwM>h .6:~[S<9G6Y)/7Nx{lnnEi9-ۙw㥝 _]cgN['ˇn]OzFn_Zm蜕4E+CnN#36q\$c&vMlS4 aʮ ;GI絹,CktV57z tȄE+H}vVlwpK'~nc;/c*]hdٌ}ho53L)؀o]&֞3ZUjcNÉ7|n?,tk^]^swg{~z>γ7Kt$c~WFm331t}fzq_0z?~3^;ߩѻ6s4)MiRM,MW==OggSMg\Gth\n/}NCjvWlK?r#?S&fzO㛝=, wp㯏nv}:, C~vZO6ëqo*w3#i21i[I>*nfqLcGҌI!:k+ f6OklNp;Yd%cߓb]O$Y;Xo']mfbYOWf8sy?QkY+I0ܧ7Y]Ou0$C;.[$yIڌsQ+3S}Fvti]wkҮ\ ^pN{7&ZN'aPoS^b85^<4ɣi61Їo$WsS;Ӭt(;6Kc1:c32~+ KccL &1>ټ՗$l?&MC۶mڌbd6'-7s[$F3:U!\`j {/$z#V27}\;Ls|<|\NIdrwq725.^~Cm>{絶;5Ʊn><8dv\#}50s:fs4M$wi4mf|IuٛMgOVrV汽攔n7+w[G&+_Ȕfbv󤳖\n']]$gI"d>Izi]1cF?H/aeilk3ǎҡ},L}n %K:d4[$]ҦҌRd nd>f6 =-JM\3|^r4ԛUKG<ɞe|CXL iM y5ufo'sv9cNݥoLdsa_SҦ3$3ӖvJgk661͓Y::ی|lQoP}wNA?3M Y{%zcŻ??继lmօt3lvn]vˡfבkrk%Y3fv>GkFclviL1{^ż(e5Y$j|M':;9k,lFӸYlOxjs=sΞW׳|t?{,v{k[n^zAn8|?ow]9_μ_6mhL׆漗0z)I0Kcs)]Zs6ɥ]:9ٱ'fmm:&pɫFC՘:cof6wlKxҖ=f6_Ý)HUN|ڎloXd:o1Εٓcێe:ՌFuvK3Ӵf_ҁ뵓L>4ٳ>˗GG~]7<*I4>ù'cZg!ჶƴFS='t;.جo)x hgs/>-L4i ?wdQnq! nͭqȝ/zH^bNۑzj}33Ѿoc:Qx5y9w1KdeL`H /foxma|494m͑mWᥴCsMo혙gW l\6%-Hf=mm\]$r@rUU*ӝeRN|Sٱڲ56JuVxjmx77١&/>?_KC2,ڥ>|hSzP:VzN .D^zΟw󡾖3=w z빙{;ֈz>2{묆)׶;K. ;S .~:#v}YT8q/|G:4wtj+0zyܝM/3$ggۡ}C>bLѣozT3Yt@1}[:xOseνSr;0)qRՊpÕ;5>G/)ۍcd.leGq#1P{Ǯ T?_vC,4"fhG}jȴkNw1gHU>~a%y[_d._uBO$ ]^Zţ kJmM/؊>n/GVO>zeQ{m]_=NO[#Yh۸DK?-I۶sy=\u]?=ythNNmΚCiJ+G^MrHL&!Ǔ1Gƫ#]wpaX rd&v8w#12u$ב1\1#$32#3]iOTffƸd9]R?k$)3Ly^ff{uq윏$/FKϭ\d׎V3u;nSg;uvFf2qyy)Fk3c6{:9Ҿϯ4Id~Eh=l9vۖ!"~OKS:~ޔ͊ Cֶ^/nOLmGwmΛw>|XO~v9̐4n|6vf{wps2ti;v\eT_KG3}4moM<;5gǩݵ̌\*}nY7x_ul~ݰY݂;33+IJp:\28ax]/{#R.^Ь> c6-6is{|R;h s6`cˇy޽i6ךKҦ<~=GjlƭwOٞK^s|I踿H2Fh|i'ĉ_o'k~uSɲ>q3N,t[ةE=&N`U$5dqvgoyw,|03#c4{sթα:ۉs'k&$ɫ<|̤fkm6my\S[M0=;<`?n:rgGvI fn]7?}\MYX&zO~x7_^Bi~|P=G2՚N^C7N?koO-[2͇_؝(:0{>>O|7lXjlݹΡ Xngv8͌sE{ir=ߑÉoycdlB߯|=nil6?K\98Զ)S7EP+ߚ?+=f^-~nmoǒ%v^://eI6w9Ʃ99|N&KM1GGhGZ9:%i%y(IVmF&i%d6cI:;.lFfl~l =aH{ffrŗPYK=y=nYa|t^o8QH5Yhqhcck.C5JjcL!cufi1fQkh2Y4KI%M:(g m2d6lQxj~XmuoُsvHRnx2YjXsjN6͑of28.#N%}=4rI&kی,7zqdΦUbiL2ztm^94>f&#=&:d>>OggSig\vakƫΪlE5HN$bNδ[ZvPǷw,sy9zյcώ>]uk S0f!㑡ݻ4d&pdY|żTt˛aȗtLWg#4ߣmhkL4/4Ӳt=4~vB|>Oz3g4,w|U[vf|!YnNW]]'ϣdLǴ CqY_G|51nx?z^s}k7m]Ѧ;i;ft$lxؤqL4mt\3gs|=ހ8ϙ=bꞻk.O7{u:f}Rχw9\ohqtӋ'?νYC<cKmzr9짥㋳0tL_2lwO:Ç̶oӡK2~1m&K^RڌvTҤݷLIKk r LzkqJdkY!:u{!MJZ`{-|W.yw:wܔe˿z)w븯UaK}5\oO?o^y ;!d]U]KχyGi߮{eJZ973oUxf[ ;v{TeDMރS~w"Yv2&h0q[+?Aet>WUMoi}i{$22G|gOB;Wfgt4[_[ |?-(ʻ\_Fy̙.pSlΛCoPmKni*NҙthFg2-i.jt&*5҆\]:9X}@&MqQ,M]hm~cc$<>ͽ^tC+}]{ffng/fѭN+Y$Ì c8rA,1][iqGq6E(Nv4=uYȴ]{SrQ{z~rY^W+si5m78a~kϯC&yΐaH3կ$my?j:5qmGӯm#;nwMIӗ^d Cz$Uq N?o=ן~v82o| ^-i㖒7>/զ݋|+e^88nݩ6=60:d.Xl2iNǾHj)w]3ڱikҦ#$^f4_2TMoFǿ\ku'3dfxLVƁdu?U/eǭ6.#s=sx-O>yi5&z>%9>ӴFr?w=lC›wRc#||_Q|ҡݮk:dtm:3v5 m0akniҎKf78_|tP{h*ke2[qkEt|30 /؉L1ㇴb׮2&=9cv?멏ljO\OgCSr䡸;?ֶTjauˑ~ogYBfKW齓:b q dןCd;R\v==-=:crԐb MZ=̗fva.+adiy?_N&{sNK{~xs&m_M:o9צ4pa:_J;7N:iNGl#mHkl$3}tYEg`~o*J 3\ AՏSȋ$;Cg:#lն3.v]NU&s5F;FWcIי%2s1C2;klBbI{X,C;ܛuo>GyM:Y^se?tfe5nEAF7~^ڙŲbdq=ueۨC۷l`SS,{ձ?rӎ&zMevG2m,#%5f2nvkG2SvSa>q\}Jwffôovq<qWvO5l-$jhL9g=|D@sY$\ Dp.LΛg'|INw۳ܛޜNy>c^gm v 1^0ʣ̎ە[m3Yi_J[ЌMvh:6'o>\o?߇c6ow?߿|r\{qe^;vL[> ;F wӟLO9v tYMyo }py8Ww&7xh;Ot+ff {~뭽.=<\޷{o=CAnsyCC?l9lt9l~SHڞ3XWxW~w^e{rҷɩ֓]F5ήg<]^Gri7~p206n5]{C\cgَn#FW>߽w͘12ь46e֓܇ِfM\;:SJ/r# BO/-g\UUiwTECX :z1{g.)/} aއ]y\gz1^x 62?6OGCe'VJĚHLGG$fae{FmGs[\zr}w =݄VݜO'M>sr{hEY>~ >W\|HRa8qXо}o޴nASr4ɢy.y}GM=; rԾfڻ b j42}6>N!nŗǷ9jxv/e1ݹPSY#iXQ3Wk=G]9t<8{ u݋Zϻs}"7),v9qgl"7u~,w\'n)ɑ\2=tia#_I0l&MIg:;l1G_MJMLyO34˿$sLl\=iOۼ{9_cff%׬kh"J ƺ<;$Q+ty;e7>=TQ^ΦˆYss&Ӳ=a2,]-6:6:sfq2ji3:3zmF.u7:Mۯ;ҙ(|_g{^3G;8ǎ]7|:ݯqu]utf=kNG.͙uYa{;aqƒ\{awm$3ildM{yyy㻳ڃ̞a4ޛыI;Jgu4;ɬxU9OggSg\W kȲpͷƬˡt7F߮П}ߕ??VǹowM?X=Ӻܵmn_~ O? ynpwNv~gs׽͑0s8:&ÃGc:=m;&$m<ϞsiVu>|f?›K : 8d?FvLYb|aٲaH1.`$Ccvm^8691?Z\b3H$Ѷm#朲s6o~sL:S.#91f|Յ0n'3S^dB%ν,>XdCGS4vc}ۧ:SO^L]2zʴ%0%Ҵ3xxGG$CJM",]YsI}1^MrcfjYU9ltf41_ lOM;°ϙ9z{m(OSmV-|YjJ&΍d%xuf6O9wThjvHi9ñy&lj)+WVg21vX}trnM]~nc02\pֳ zw.13sI:[6鈙9|G }E g3EώV͸zߏ[t;V^ۍFΟyGeIg!'ܸYg'ϻuyg .jz'69y'FnNzI2^k1vj|8y+u&+3f='㛍v쩷>t;xv|Io)pOj3O2w#~{r[ec~kv׭=|wr6rn\~qqlud}lP";&oKɅE`_9|$Y?ёn{Ο?͹yʞZ_'ǛnV-r>brpϑK=и6o]*w6];Fm훩s:^`\w=0YlH\|VUUoJ5/xs,~㻳n[o=kWOFo>lvn_Lr⪗zӌ =wv-,7o{ZoScgm|!.1;f1ŴMv:e;/sukVQ$1$<42GNcdn~l,kl 1:1t623&nOv^}adA+va6)m[)7'[Uae`q^N|orqvpfڹWnOM܍ȍoNVoґ`X}tGc{Ĺ4/fEG=2N GK7cwmNڗ_IG4C]c<|o*MGLbюodbwgu8SSӞ&I?.1!^̮twyt,mCMfpvU'lBYۑI{oOulvw;)CG'kD4ɿ94lq"?e~ȵ=19vˎ>~vCƸΓ_퉥W6MImm|ͨ4S!tvnӜӟ|dĸ8o-Mjwl&jG39'/8nygYW/dM~t7I1Fz8rf8||xGNg7i3ѭ=>A_ٳ>y~}&ɨ1%_kGʵ㳱_vN#s&\@xz]QG,sӡD]]~Rn׳woAKm[ݺ8:_Vksݽ|:?Ͽ;_hqz&W!mZ/,Ma4ЦhKaF:44iq^CѦ22eMd)ᮭsGt[w͇3غ]1OaiL{6g;7+\/gMg mggڦ5;syÐon IhƥN{K8r;>7xfL3$WeK2RJ&ͻ4#3mӑ&͙kft&۵z8}vڎCb79=z to:Ҿ0yhA.8S})كq6>ݟ7=wgc~~#i4i=ԭ/l:9<&גw΍v~OHoS˯#3#Cg$c:Z{1pd[3cۣټhǷdc}2KS֪nӋ{/h*}1\&~{7I*;\u3v{rNM9z3za"yz/͵:gXa.aU 0ejn~7ԏhU}jN\~N[cCu<ܻ9jz}}h~l\6%λ[T{ffU7nNqYٿ[\4ռWLyvGqr͒s=:KF:q_B5Ʊ9lu]kh[˲ Du]D眳2cqYFsJҹf+c$SƲD7>t[V?8s{fO_z-oַ>IYN޾|)I˩sSn/5Fؓq89ff&Hf9?./ l0Hgm'nːVM]J̸5 CjZ6D\i%Ѥevёu:OggS,g\y1qͽLM?=3. gw/;m_E^W;v/&iϗlz|Xwd[[Vqw:.b)ّ;mbx:;ơhy9zx÷IZ˷:vG#yVt1G}4s4K"ic4f223i3I;ot=Et䗘 9gv64S.(t 9.yfK^tdܱcz﷧g}}ۧ?丬{60 ^zm:I;fMV~pfؙ48 j'Cf304A#ۈcԾi6Q#M+-8-x9F{;\Jy{Hg>ˌ* *~z::ˇVr3\p[g'i>a9ic~hGbכMr֬Sܯ ]ʗ <ĭι] k蔗Xq2lqsӭ)a~>5vKXp$Do~fx 7C_ߪ*Ʊ)iO'/R ]-9Y݌Bb}_,]Y"4'Bln<2Dǵ붞˻}X~.fKgqhH㹎zСl.N0)i/w#g.e_zry5VCoT>WK4XnTk]>wwdգ7 d~bYZ}g˴jѿgs&מcR?/l͵M-d9#Ma*Y*=yevYzozy~i>t9>u?ի}CtyZɾg3cPcgMd\r2Ӧ ;q*q2mYƩ' [1ys:y%l2܍'Im\;! /d7sfFwk4̙<~z3M7ge\O2_`i|IQ7$mNv,$#s^[i&IN#f#9v2Ǐ9\۹2f8yefv6wCy͝&wz$$w GZ t/b)aݷdSkapFk8jeǸNrdZe9Nz^4* 6d6L|Kz;c:l1(w} v̎5w혒9iwIFg:Nd=w[6%.h٭uwٯ׼Jwp_yl1zgwrid#)_ڸribэtlx&fܶo|?69d̗cҡL/s4Mr?&s̡04ÑaLc:%/~3i_3FSG~Sߌ\]Kߧ'79gfxxQ U!o‹= p_2#vn>8If[4y4ObҸuC<wK$ 7鳌ؾ#ښͣ=&?-m7阚 7<:&n&Տ$I}e_$CڷRs9~l&u|&3ĉwQ̙Ia ud=Yj_;3ݏK~u׻c]+f[:`6ak}ꐧsSn43=|Zeպ!v32tI2vT34&:Urah6kG5M;"z{Md6'z;̓k RY_1֣Dr~1yYdypR+O2yWy㐏yؽH7}~O+cYǼyo9:\4_ǥ#k?d&m4:h:XMm4m CcR=o Tnf}d O MUU^x){\WG#iONjO ba}ujIk&7on;rt=9]\ |zʱt=k%O칸nϿjۻ?&9e&J#I6szFVGan~4Vo lmms-1.1.3/data/samples/bassloopes/rave_bass01.ogg000066400000000000000000000523211247673406200220350ustar00rootroot00000000000000OggSn\'6Hvorbis"V7OggSn\Cf&-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ѶI/_PT:giceZ޽;X1'k0'9Sۄ[qeDĴ .0zz= ZKk& AQ{۟VE)OFoOOMk B̓5 71Ω3~h7EȜ:27\/W55bPR [-YG)qچk_Nqx=BuQ,i:$ncn= ᅇ(yptnM|J߽r:'>=M?ܹdcszchbttڵJ'7BVҥ=nLUHJ2ZA0Ctm5*]eƂ7;`vY]Ji·]wͰyuOH֡5V"ӝ;tXҍ~Q-<ĕdfI.՘]޸qí\ZcYov`1&N0_JZG(^?dSYN nBg+o<yA%BTB1ݿOvC[68k(BK ƹo-y![䝑˷Gebd_cX.dӝ#v!h#ƪ+ !{G&cX=LpE5:۶ p|wͭ~)TdP6M,qA~k;3j;]ڲNҚ`w\ T. X+ĥI ssl8$5u Q; ϡ(GL˓f[WݤO [C:hP&Ml<>Ȩ&BnZ==bUe ˪8\㜑T Cݥk@ [,SrD?m;V~CaxpkGLدr:KŽZ=8(g"AwZ+z"q>}ҴZ\W*,Q˪eA#yQUDϡn:-Gv*،yKOEjkٮ1tK;kh&RHhUδ"ijbmdwb_XBQE@IvWT"ǹi6jk2a\vlJw[ ,[MRVX)ڶӟ [blVG?B9tLiqsܧ! z5]Xy":&=^ Ù* Gtkru~&¢ l47K6£"-M3FnoA<{3ٓRk */X SZW؎Rޤ#NCr'^Jnx(HñNJOom `]kCnt&BzM't-quiSDqXAY\nZcxSk OQa:Cq|;6;񔌽mI4׹tpވoҖarjyiJ>]~IQNZڵnj] KcʡߗJ5Sy5WO$Nܻw%=[]Ļ@t2(s4D.<>'z]+4On{89V- D N=f;PxO~F>v= 3lOX͉[_]:PGAxnU0ڶ~$58xT f_yEAXow5S"cyQޒNzi_Ñ_֍Sw]N 456jq^>$UIwU _ yBl6wjp:UC c2"8S0y:4/%m}Րھzh?!f޹Y)} 8(MIϟ2QgV/(0l-jz 8ּp2 8mMXfi;!,:,;dp p\0J[&<<ҷr$@q~\I"᲼yW A=WNL εl6 Yk8Y]֝}{Bs~Xέ6\x~ @cz0c8_w\͢d|lX6B\^V + E<{&9!|[K~=~ua"o S9. E0c!Yx+=44nc[6sB?oNjIVviތAq^-3|MSi ĩӹ4^釸ǽ-ڦ" Vhc]5'x /'/ǷO/AՖ# ҇TV|{n{,/s JYVHp,:Sb>:ZcE;HN% t좳Y\{UO{޳u"|En; r&tx}O@0Jџ~V+D#gJ RU _ G@Rc;o4c@R C%eu*OggSjn\=="Fiik}ofghrd}| PW, ZmH2yVŻi|zbo['e6% eyFhaO=79Bq.S/`kaa5=@ \T݆$3&U>4\BF"S'jUvUhmoScצ'FQ ߷g)5 `MrOm$«6d Jg6|7TË}I~Bɲy-3f 7&6(4$ c1v#`VJroɣ=cLEڵ{(:(O+tjYhZ:7J;7j5/x6Nz'*<1tاN 1f`rMy~Č8$Vm(P+a6LAӓSo8TՌkg>cC!|6z0JMcTX13GClb{(Opݞ9S]nYdI >2j~#u(1YozNm~O=XzS}65tD;n+Մm۶]ΠW]6G_g^V0M}l$,[tD#L8 Ήy_4B2B\IJ<2 KGbuUO^ `"րG(TĊxxZP+DcB/$̶{FjN|55vd gkN(JOfzB;&W?4Hy.7nOL;'3X8m@:,=1bzi&Kr˘,Zqma}U^u 4=d8Oh ]}uQ购GҋDW#Opx:db: {k,~*@4'"4]m nj-@Gv~ :F,W㟿>!G IƋxCrhZ5 |iJ<ۻ vcL\s[n,_6ZI헧yqU hq\2>/t!R<5 m7|&)n>K1\ńi.? 7;#ͱȾ 7gbl볧iAɌ[]65|-o{Q1GI Hb: dN-BMBǎU $U _oL7M))l 4=$$&IlCjzׅfqo~z9gϽr?^p ,WNKu*G:@v%l۶S/iXW-m+$mi)fZ.aAgsv`E`L9g܈taw1"d,b fă;eb#"7%C ԣ~oЎfu6sߩ7[\Zv)s6R nL;SV{ӷ^XXݏ. UXz֨7X:8:Yb7S%V*)pn> D<ixeC.l;K!x`短g&;sQ#+W]q} 90QBxfiDrfN,f U$#si[Y0]hjWq.Jhڥ4|RzZH|UJ44>ν¹sZh̼p4C#ի?btp_b@6_48I5h y;.G7iv |4ʏLm6kOi#hwoNIfwwxU ܩ9-ED* qUw?/pMeB6gmqoKP#v@k)Ηgw<4+}x(uE~7><+d#D&3i;M q}R1-2R⍖l6m=iZI!sߊjjdypcsΤuA Pňס^|(EB1XD{uj棄ޑ?,@s/ o {9K:/Yů/?=l0vBo̝&6nS2G޾Ll=ho09L )1h^yF:Ֆ4Pׄ9M(]I>톣ƌ-:^Nu\G|z*@.+9>Gz)T.tm^8-C't-}=*:ԥ[h+ͭڶmhyWwuܬ[ݺj{c&&s1:^xTT>cM8/B}6;ibg!o^\kA`z>P  и@Mwc"fZS ,y%ٶ$c[vÅ4fݨe85Pc`!7q IXl;j XT,T%zzVk"9Dn 04 38tu S? C v]lgKmt:\ Qӳ$P) ,`R芡>bv ̮FF5*l!6Oķ*IV_?'D%0#R5IIW&Rr䌹O ]>F Lת B۪ml־[' ?qm\c*aX" 2^3z$2V08=mrc(z ls981e\5N >ش/b^enYŭZ&W;TEg&]j[S"w4q쐟{V6>/٩d\h; uUMPh_՜KtihOiOwK M@wohmc,2n)[y,丹:*[ pڐ%m'S'Ww_V-XJj`~#aeV#B !s]YpҊd@DF䅳tM]\p*Z]yrDG_nÇU8 UAwcY,tnIH_S8҂RDz7`۩Y2-E?u6)K,gmڙ0(@/wZ?=jFgx{jf$?3 GABkvщjO>6Q-±(LEFn5:?)'R'lE0 U~ DMhtJ3`=e~rc◳Ot'Ҳ\]8@f IQjзlÛ1xjW4/$?hx<:`6"\Em8ӆ!>#Mq7\D>0r]Ou0x̃XJצ+45Tpr3om~l .}ks,<\J]ۯPs}T'V SٕŠ|1ƒY˾mBXQgQ>VpM.Lm?.ǵ[ i[ƪ&aX^0mA/G_ oox}Hr9Y8hSGߦgi~BxҞ&p &{[[S-l/CۇIA۞}/o<Р/!*j >y_i ĽfXGq@xPp?֝,1oR:jzY4+m>'t>?Zu;ߜvޜ,'mx+SyMzkHlqa\멨Jpms]V͜{ku_|ihkĒdk0e,vQ|тod+oB h) K+u]Oe&ݨui%?*Ǜw& <_Hmu1*Z8fWk#8ͰtF;Ph /o'fPi,ee 7 ?|ք5G1^5pzf,OXߤ%P]G"72ɸ'*u#I'EZ=vè+KkA\R{m~UJŏ-m@HBYqR[HYYXVgˋdq#q)쫁›u%Әxg4*1#"ԁK{ ڳF8!/ UEIf_ýO W `Qs<[.mH)<%]1B7 !wNN򹩄OM|) ʅB 9[jڏf"yN,L ,J0MvF=En05o{Z1iQ  accOFGougQv훭iȇo3YV/ljpC{x-Xюj-%oW)L>#L,oZƇzk6]z8bʚ+jUӾ#Kfr <϶ !Eiw]*޾f[LSP+bLSF{l){-Hě }LWJoCEVG+Q@y6D^K״\3ЏߡmE:Y:bH#fTY^':ez+zbYoy W @"]_}'JI|.OQMEڌ奇ceI$HvjG,{ƕ~O9(oK$.jBh9q'tKWխReOڝ; vBEdNیql¢6k"<\a1[v|%λN̖i7ipjOK=|Se*Z ,z:;kٓO'E*-Sꦐ9(5K lfe2:ff$?~AL@3mn9Q|mWa)䨡RC.pAtLz{5|Mp=?KQ>䊗kMqkQ$<1M]z 8XxryۚOPʭ`@t|^?$%ijOzvҷK<+ Kbym%~0,Q@(3=öNNض1'M; gOTʇ$Ys7x"c`] <}>{_LzN8;44g6cVRPӏZ,-1MqP:O #~[ TZKTi(/ m% ٚx?/^"VgXmv8lnO.=z(gK217]ӗ3ǥV|i]>p{>؊-v9?QsxWV-~jnƿT󶗗VnghnIserb)R5_0ڕX`0o/<\v+MmX_"Zt7)3H Մd[v7-NV'ek8H#N م󷑑asGF$Zh,KRzZ49d^AiX8U1oWPBڤVz駺H%Q".BJmz-im;+q?Iyd6֠ ^[I*vfW3a>s=q.R\|ΔSY$:< M3F&a,ˊÌs F}Au}TT0 i+Gt^uL׷vK9F!yqigGՊm#;}?/J[`OW$1̵mz Ҋ{Uz̀H * d U/fXjg=\ڻdߥGxٔSBգ 0s)f[e Q<,=L ':.B1$\eoYlT#k~@KI:ꦕZNzq2$5`S, yC뺧>hn s0fZS_=SSl)؍aƇH_nv$_³Nq~rat [,,MºђF\҉rt?@MOoK=wԝ|nsql iWN2vj~'1 Η,dj!vV"IPy,#FX i@SvJx1+r=yZ']\>[ Bk޾=<9 ih{3yk#S [67Nҩ93qm`&#O|/p䲦'+ئ\GrJU]M )u Zʃ;)u;٭}k~n.&'G> 6i_\{2ΉE >+#e;0-ޭ=:6Z[սI\]oԂ ]CJrU%[WzVq[T?~klK{|g %]`@kg.}*!d6A:؞IIVflRJjB#W[u3鸺+j:Z8=ye< {"H]'? 1b ulڰ+߽Pk ,RnPGkoEK꿭9 Q Q AicskA(8A1NP_̍i|E ^*%H9'*YaLϫZeP+6!Kd#o;P^ ԁV"c];+wQjNVԒ>~7_\^<3@E4ʺ*,WLu3(R rWMp}C3芵 {5w:cm+&fԴ%W3 ~+KòG*heىĶķ+7WmCYBn2rM{V`ng  WSid KW#WяEIj.5ه+o*۰~Kr7 `zer*MEjͮBTKX`!/6L \v{mYPx֮ϾLtZ^n]Է2jM\tl!V6o*:P1~\R1.B OGR?3Tw<#W7~aI_6\S<7`,hf8gg{wbV@S=.g 3q|UXhGLR3RSv? <3Âh o|&|Ϸ`,H; }zý6f7ozUŚtQ(^u=-yNm_)CDXāx݌`j<ڐq+R`}]F ~I8li5rsE j^V N~O Д[8y%ҩD9񬓌ؔj^ˎCٚ>2fՄ4@moFKv'N GLU?-P g=S|v"hD֋C WFSfT@5|G&:|=1ivӰsɫϦ2u"}nz#I܁wn,H=ĩVNضˁ=:$EU5g0vD@bG"i3/s^g:nZ88Xwe*y{uw:0H?4dtss /_A2vinM%|Ҡ~J<F_}o $1NH t X/XM6o? &HӺv O{J4f O|loOXO_?xZ.mIp #MnuW(,Fz@2wkԃZP@XLanu7g'[8UY:dY^䨬|FH3]b wrM~I[޴#vb;P[μR!Y.q紫>4[oKOmnkXr[[c){~HZ2 !,ļ;+G3r:O^CYR2ɦ(\ wʽmXEg)\3!\ՙ02KQhX"w&:jk Zm>I꺞>tw(agh 9YE:|lsqưyzM.ˋ M#`w? ߾ߕ 8EGX&|ΜvƬa5,@S`A>kW3VAHv#TSp|7l0 f{;w%y]YÁ:ؔhsbEyxBχ'yp.ڱc\>H*ɽpk۾\|fkU ۪-ɳ6:/aHYuY](۶tuϮ| 恿[/iom{5>uMw,G[,{]wmb4h0c**xa+⸨;b}xO5il?j_w+'{k/yC&6 [ñ*0fΣT+ oaKxCl,|6Öm<~ֳ = 3g  * 4?5.zyytwݮϥp֟oK(e>,(~{\AG7K*E|0Hu<~@ (7ꞛ}8nFcڛCSj[h>FtK>jPSY??Კiu̢/qUPVbLY.83ۇmyZ8O4Mྐྵƺp\HqKv"hʸyU1FG9ZBvV+u&2wK8 "2&ޒ4 EYL?t۠Q^1?ڵ<`MhI]wU15^5̅Mv:^w_9p? -:&PdyupyOMS@oj xp?<!}jqzӸ^f}y!r-;Y{0g'd}O7s0"612NgAԘR- iz Yp>Bev/}X0t˕tyL_+,voktͽhdMMb~\K=~j9MǸ_sѠl^rN񞃺ܓOOA /ڔ-St/62@-%h}WR? ]-&m_]s]@:d9fxAݱ`ٯ'q_~@ԮXzlUv_Vں#t9Xˇ t۹bu,7Y*8p&=3JbdքG#Nm 9RnAd1=#LUh:88ӥ*F,ռdؙp/b#~c}p[K5= [ioJa.5K^XW AjlD>6%[> V'N;Ik [!%SYF:mzF' '޹+y$ҲIG=ӳ[2t[>LMWؿ%3_B6)e ze%'Qgu} Bmv[R`42YJ: xhͳ͒ 'mUǟĿV]1yB֖[27z Jl7dDEUp4σ,ͧڰiŇF13dP'c(v SANm+͗C/-W"ԒkicLmr0iJ(al84ot4z(D܄OiU}4;gͱE8Ueqi(ڬlf}fsZ5Gh^/_2e~#Rl"~!OG~IV fo`fT$k9 >y%ࡕ|?"Ͽ|z-d?^2>lmms-1.1.3/data/samples/bassloopes/rave_bass02.ogg000066400000000000000000000467251247673406200220510ustar00rootroot00000000000000OggSo\T](vorbis"V7OggSo\gs-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳LAhE^AVׄNyz ŘS#9V;m~uOyڰWJppSW,i; κ& 4!- 2zHys z wCEnJ"!o-!J1Ľ01iM kWx:W͉2~}.ۼB?_oے}'Ζp&q*ي5usN@ioKP, hf:,On :Jd hM)Q8e-rp敲|\kTҊRj\,_''L&֥jl.w+o nNuŧy#i5wBJ#!:x(pB)Yu2-1]ݰ)SSrZ~-25|kX!\c| !+ Da6'jgʽƶ`V#ssgtxjXָ"QFOMPchyeȥ,^G$HUrD ,F'-"X.͹"r\&Ga;. Gǘ~C?Pa guuR_c2;yʪqt.3z^T (KjWMm>vp} JMren|2]fF+ 5(' =Ρܠ ~.~p^5n%\2PV<ԟͷ2n5|Ls*4dfLݍfhU~oSM:t^O;drCq虲,iD޺As|⹋Mۭ0^G߾[C' ;Ӭнj/w4XrO=zz5Y- >ÂnSLf1imٳei?Zv6C?ImFT%7ֳ9{fjS0њ;*r}͐a@Cd9( ßMPϽt9F]t0Fv]% pqך{^P2-s 5Sbkz+W>\ nQ,Mb y1Ӡŧo|gs\f}7 JtIW7Ƭg^37'kPL" u)S5ׇUQ*ZW4l:Í^ H7{SGnbAX4Z;hk,l⇴6p_ lt]8Y'ܲ݀TF0"bz89rB=շS3tehb_dؖk+z% ZC E͛n "N xoOR U ?3Jٯ7~")!ULd*ݐ}ctݜE^kEܖڄ}w6_1.)*aL.~6#ܶ׉-VU$~{ n}(L$]cc5bܫ9nj:~BZ>[Ţ ARg|$F,cy'ڣ)rn`= =0\ͷһhCaȸ]ܗ U.amݑC@^ ېw ZmvU֎ST[ nAb~g}dRtnҰsoP pύ6̣FKe{ mru]VI_aP%qHtH.Bn&t.V .̇8N(OQ<;[j8UcpF 鶉lPK6c|k7"4 z5J0"|m *h:%/EO.}Q(?`nS% =TLjh ;,@mA a 7= <nU?lEU_Vk1q?\qJ ц`(6)kB4R?ۀ-n px_řiIR=:&"C@V<> 1^u&mP@z؆`Bfv.2ĬTJ'0:˃%Pa (!Vx@slx`.=UeBU |WoSͳe7ZPO  `3D^ ӆ1-|1 $- @HLZ\1.ZFYZfަ jOa8! x,2\UL!R@7`cN#a|||#td;Jw3^y`;]$a%p )-M(#P[n !v m4`#|l9F_*yD(Np_7`.?6*d] ?1OggSto\K}~ d_'-P^OңYu?vC&ayxah70nm{Fa[2{:5Kzda&;,}sԍ)6,c.DFeV: mBe|e[|}եC޹miw[uW@vFSoC`a S^͛<#]hVKQH4oӠ [\?5i;k{6LȍX}{S.յ2.i'ĤOr8AenVhd9S_.lG,W߫ C1eNUNϓ|(: q V WDhWe:Ӊix`MnfUd'V1݅tSo)N n^m?:McJ{^)ߜ%!g蘬u~;e{Śm/}O=PU ls>Ջ4<\eXqs-/?$EdH3~g8DY>= 9o|j[&gN^+Kmۜ8_x{cqbndr}?v3r6 `én+HAFןݬ^4^5%wM6cffV}Pw!jkKE:Uv& . T%ژҜmW 45npѤ "K5m rrsWۡ?!_33CvYl~7{-ES|rSW8G܂T;*DHM um o @>]GWtUlz$ _`;P*B{_/p#b&?EA?{Yۢ{.< ޗg'd)uW =;E?B v*̚-X/Qkn&LrA,x`ΕZaɟb Q:A '`dV6&g>Aۋxz௑,3¿\S2¥vӍ ˚WMhhDƒd]EJbDCa]~%j2ڟ;M!ܞY( . @o=ª=׺z#hQaf;tᖊ%jY d&[T*w.{"|B`7hLJ[mhbUϼeB).e\L;mY+RNG.ՋJqz.m`_p2%|l ϫLGbFԣ$TDqƺӹ0_9;֨ýIes O\$WCk=ޖ D-XLW BIcno ђl&n`_hon9L1uڧǫun<\ho lxigLez1rFA[L$R]?t8;CXKBOm4sX3q _uZټr3ΖXvYtNW}>R@+z)$nps^nBgCKf+ kUk\.2&inJMs ͊.')K1.y= w2,H(1kC3ԁ ,M GEg'j4۝7yJ_F i64b=auY;g\:u#4q,wttah$qvkW=$bځٌB{cWWӏ ꓩF>@J(:fw=V&~x~Ù#Im3m)}>RtV:ĞlD[S h +ᝃh`]m8nPűa9!ZA k'Y>ԎfN6bp.cm-5—-o`Uκ)?h;e麩ŇT >k9)qeak*҂d$/ u;ߘk簼>+NaS:/@2քzs֡Nۉe fNlya1 ]]$߱w""9CRj=9@ȫ<;.WnOTR* WNLW6}_h~ f)ξyaY&l⇧~S۬4cǓ5yrҡW##d*EiD4hR\ڤ[v -+́26NtȐpk dE]@0?I[DdK|{DmN9~hq A ̙sr Fj`-X; ϙkkoؿ{ uiCOB᤻96 cmfw c?~vaagIX>')*=Ai I֝6-qxm9B= cET_N$ezG'c 6[2IFvrƧ&|ЭOaK5phQcH޲:nwr!2wd56N8mOJ#^Mqws1z6EI oAAkzn߉BK7BV6ͫm'NjىT8ioY#7/=-bo) 6(b+4c,l>eOWF/젮ΡOMCEGoP]adsк 7p%W(8CVoGsGs3S4V?-jQFk|nN{L@e])V=(SEc tAH\TGVPOknax,F9WKt '(E˒ Yw]jr%^Y`8zAjĎ`bJߥxR2| ;!D -;` ޅ+nBAp4~M[;QSD.3., nazxh 4IJ ǜ`_ݾ--5 sl=qC7(LՏm`ޡ 89 jH0S\Os ȿ ux:!DŸ>hMEY aTǙ%); ؋)M , w|3ֱevjcA:1s_i"2t]& @~v^; `eri$P1#ӃCg_ӶK맦 ^s^fI7l~`2VI# `"=\`;Zw3ܳS_2kAg;mMw7"IhAA^տ+8!=:FcG%b@ʮnv\.M2VMfi ;yF~ D@؎A)?ʨwm>O,so,>wI-dr>\dZ࣠$7A Kusl*gPհsͪ#SpZ ^`N͘4Z([Ts%lroVEsgNh`p:hf1ovs/,dB.}:/^g- ۂ1ٽxo~Ϲ/bVW_AnĈ?~k:bP1* > $H-Q-r*Lgwrfw=drUi&SJ༧Xw_cCp8ÆJYk< Vm%x 񱖺Jt BE=|bǔ&5A0@bKS~Sr%*5߳m9XzңnUFC<ح&ѵKqY;Snpn6l(,nŁ2o$N)1<+l 76F:Z}0] {N0~}N:TmP2ehikau;jK ^Av9QtL}~XBWN6Z,54 KD-[D(/i&}&ٗHcj&bH) RJJbJg}T 4.GZ37^=^D@)!GҀY mj;Jz?xf|a&|1sDF\'HOO҅zzkaG-D @K2smV`1rrRhn"Yi(ġon>Zc_Qr|cQ16hrK]bN[M,y_}L'IJ*p`4XDO>awwQ~wj;)%~-| L= +9l̆. PhF>R 9ܖ(;;9u#"*N) [ux˒ae[2yp{~f'JƨDvj'=ܼ]P;K%Z> r?CŊoDw|~ ܙEst}T4aM'cf+2fJdKÉm;LLOx֝Y%]&Cj3m۷ϙ kf_4v&AHY~MÃY0+[v܌FP O*NvTFߗ.a]-OKHj=8y y2٥V8g0S쁰FߘJG[ @3402ap(N? 38ݳ/YH5RVڊEUkVk(L+E: 5\Nfl{%NڃMaVS\-.z}3fX5ri/}^ATp pM `Ίdn(ԉo?c٬H_ưъƗR14 ˙_ ŽvTKO盰2^jF.$qX >D#,4a>D dxr@r;j7^Vjש9ﺟGBy`K6I0Ò %l?lT 8j譠TiTeQ]&3 *N7ꡛT[B?ITކNMF] ֺ{> Ԥf®IwzAaÄҼe[G*0> #_r] _-ad?0ni}cVE:U3/P]AS;j~F:{LoH*t]߲ ,5.t'&vDHFmaT3"kha [ @=(f %۷n+OT<ϔ㸋T 8>g~DԖފ$(DI,[; B0wqTzuW)uMz[壵Z-u}45KL-CEZ׿Z:5:6!l*$i+~|p^ ˌcQ^}{/%[pϽ{ٽ^{ъ.bu~[=cX0*#0ȕk Nk ;˅E1fÕ[ݠ~YS%m#OEP6˫o. }yYy-ld '8]ЮQFhu/dե+kr?#:G;{8^TLW1֊~~z/FۿP J<,;]qPX7i6Rj^l)dvfC L.ӂ1z"v)j8 <ۦ3V_OggSgo\?~Pfs~ $J 1š)VEgpڽ{ׇF"u9k&![&/U#s2}F& *z56 zbRC)k"*MJ9N1 !WeM DUYP֝V @L۶vֱړ447i(tO(>ܬ L{qzbm3 SѶ598͔pugE5K+{yuh*pu鎬@TLu` Qv>CN\fQ; t:d#;g'[[h|j_O&xJҦGW"zb(yFѤ&>lsk]|SCRXxr' L+*I^{ߕWp.BhXN7 sԶ"# 5vS`6-۪is㙴n>kFPUhzT~WCdƁ kSkՓflh]A&kwIZ7  2pehSJ5̱ԎZf96 )4kX%,.ڶmGk6q b2C]SD|{äGb(Yٛ$5/KԔ6KNҷfWN |iXcƬu@CYE\'й &ʓ  h4tL+=OM]ܘn_[UϑWFk~zz>y* {> ̑ {!晿[Vm.{l<0_i5JxnK)u͎.~@%v\:sKv8="r*B;r%h8Kg̽=pPf G\dL[$G-sy1-wIշZWQM܈>UPC/dD߀t29@,XjYFCfp'$[VZ 2ɛ+'MцRS` (/6I?C=߇`Nq}DՃXhԟ8o4/!̴!EfD1&MBd{a19i?:ߚ6 hR]ȈlEAC >9sz0RMpB ' mL0⟁y % +3j;Fjj`L`TD½XLq Zm`9K( +$ ?gWGJGjkiYf7a &[CR@ٖZ+oBW٤47m\P(3" kFYBnթ9&6ЋsKuN:€2^Է%uT $C`Rjzռ%?0(_]myEPRNRO aY혓G+Ҏ6`Ŝnt? \?zf;w7o/pp^, aOQ^$^ 4ؚXH&}g`df<[~߯'|q0H_ 0 2dg @t^ϧ0$ў=g')ݏo_ 'M eF–H DOYp)P`5l{Tj fʭʧ;co陿Z 0-NWʡ4?wK1J jtCO#N :+\+bbY ޾UwYu)!4+{ZJ97)տSdr> `NJNl#d;8ȵ2[]k?GWT@?nG%sS~o.elib]:ޝuATz\a#VYl0fq'hzcP~sSwbǥm1l4loKߩ N֊+p,9_qRX))n9bآi}/d-nEr](_r+OY3%lwo;BݤJڀOE1Gřd™wDRKn Ntco |Y ƝT;{0X8颷(/{[Yn :,+p.`X^EF7R:d}:,900֯5 &/gs~R/.玭&|r`9h7mA lfqQy!D CW|4P#p0Er&̑2P"M_/`) \-WWHzjx-fFS[TTfv-S>qK^O~S p'B>xꭶiwuFݢMI-^ < *B|ng=xٶuwtV-i=rۆ#J5MVoxݒ4G6fexZp S^9HCB`% L2wz;f'j*lC/%rc9Υгu )Շaf 3i8F-ʜK:;ٲﶻ;.;6LϚXz}Գ!p,XBjJ'WR|< L{j(9Ɯc)#IPzKkں{R/> 4ʲi *֨a%;. -?,·O]IҖ_y+ugg%ֳ9 OVc"?M|h(ukEeTYk*.V" K6c\7V5I}0\bdg*K$ o%kG: 3)=x{>w@Fdqȼ㐳ߎȈElljN+Q&[.etz<((cOxmZs\k̾tr \=~amK7^c.y›M] M*j~ߤi^lͺ\_ߦ"㈟t2[ e KTQX> 3#8[rt+O]u8\c6 LRK ȭAn)AK=sѾM✞M稡ӬK͈)3mgp̒ ~`SӶhCJb !`)| 9d+QnkcY?EԍPQCd1...19=;3>8>0>>B5<::<>?>=::<1//019;;1$Q.Y5 -D$0 #l# kaN =b\lLg61`D0 DƢ {iq8Jq F<VjN؎Ԙ @Z ρ%ɨdTeQ Ü)s`DcQ1`thb |ԲtU qJLQ D%bB9b! HhAq| wCi?i?o dT(aLAd Pւ/eYE, rz ?G# w`63`@Y:̂edPˇ8 !^=OAw,!X6Gf}DX@SD̙aU$6"WE϶?Hn_ը(FT`C>عc0a0 ò:/+*dvd%R,|  :D@@)L"z#-Mb%$&JXK1%V$AGroe$ցT\mc~A|EW%]efļ({OA\֫deB賨X-WK광su;u LRZF:a#|"Y8e'Ȓ%?Qk۲.X $ՑvȒ}%``Π#1䬄BpT ~b$Y^RH:OhqG@ 5؊K@dd]0B8*&my4W d-S,#%`Mb<(qP8Hq\1 gʗYA$eE$~94Wj(?8 P$(|\B)IY"5z[Ŏ "*zi7d[S6Ȳ&mv6j';;=jRb"HsCcRB#/[ tjq|\k2pT:\Dja\(CF4LefWef? ``g {b̂,+>jG|7֣1nU rÈpKu,uW}q)Rd!z<'‡(kq(/o~VDL"%&֘Ǥ;[٘AI3s{啗+|T"m1ոP;3 $CAN%Hs:`~LߦnJ[ XlVU T5ᲠPI (l5\c#2래$Tـ*qUFdR ^ Ϋ A0ZuIM'A)NZ)t,*YT[cXi5@R$> ضjbCAh9b2K.2}FX.Uő &e>C,*p}RVUNHkEZa8f* v$oly[QǵZ0-{{ӪvPLjMv1FǷ1d%,?3$v&ϼLA%2`zm; 0 oHGTڕREemW2Z(vK[o,mVzwrOV PH *_0%i-'nz0b<՗|9D26{nwcΗ{ $cs{VGp%"# #,5{aV4T$& a\|qADj""58$D20 7Ue,Gaa`Y&P @]1L$`z& 22*sӹ8Դe)DccB|ɂ}x XPb3Gڬ7\~,<A kH7ҳJl@.BF4WhʔT 4 w-<1{g5?PX SFwdD+i!*༒(_5}jӡh]cdx}FJpKPh$G]hg bʑe;F4QH& SaR8bBeQav HpUјՑrt~QŐ S[" 2#.q>‘Q4 o'3X*ᐔ@NFM&750XgHH0DȮ8ND j& Q:T[7>D'Jȉ(r( `i e `{d=cKjli×j"DgS>1qڠۧ8),r٬ArX&L9/"ݷQNMuOggS_4Y68OI'1;=10A?A4<=A5>;<31425<8=9$S/4G3" T#AES(; bm ւH{ $*JqEa> _1Ё}y+.A@6)dj4m%A$>kMDYݲV,2 @D*[QY/K@cx=A!LDN[N*LߑٍlcTI PlRIBDH9-+Y3|4f4Ҍ1kCrs,IC%jj:䵀-1>9U81K֪(!vܿZֲ mv80h ;ةTR 1&8$V,a!H֠1 rdxx.2-+HdcySB *`15e9Pe2Ѫ2g+cJ+ T?V\;f-#qpl;v ?W9VV9f(YD8`"$@2Izр(mKO,vv\JX#FߖUxGLU-CTBQ \A 8M-QRRyFJ&*wS0L0r:]WAĉK8o?wc4Q o)` mIJĄ@FHR C*Dp=OawYeA+˅fk ܑDP}:H"n[aŽʢ"xT,31栝ab[ccvb" bpHDdG^gp@@i7$^,~'qgƙޙ1;IDcKQQn8;l|2]ݒrCL$[hR1ou>rwZP?uoCCCwDq0"`=m&K]qi/be ["e ALKxD"HX6h , 1)RS$C!j"5H X$RCRr"&,Gw33({J9?w01Ej@'rBIfr0"Nrݻw{/\A @PPt!ݻ!JXI = 0: 8q,H1%q;oS^W0+|U*\@_8]:8l:!_:Ȕ 3M ^RIR,a2a+RR`e/r1lƧFK2dc/Sxc  HՃ^bRC wm ,"z1H&VPICBhBWU]'W5L"a@.sry,.y(2+8([ lJprm R@HHOggS4Y6 hE/2/4301;;8111-1/9?C@>?14:<>36:C<;|!ա2;b `$lIA,וbm=OMe;f@]ƬOrnXziRT O?$GP W7$ j %g#C,aYhaX hU\0X!k+7D3ͳ(o#8◛$l Q?H>8L,}9z[Y2IEXRFVWM7?,#]՜RxVRq-GƉ;3iן btɎiI(d̯fs%*ڎg eR Ӧ͖m? æQWfTIf+j)2ChGL3M*Lˀ*h->͗&% k'\ bqUiKNDɹ1_V$U[f/[ 0kxe)xD1ηBh"/ i(` U&m' I%xSF$Y[F/@ĂX{ 3S~I 06 <cI#S?pޚK@(P*P*:a6=at[4' KD$ъ"6PmS`x)W9 `!44%7[X.wWӪZ'"$;"(kXr"|mڛgnт#Y)efRhy 9I EIC"=zjO[6HLB4Sl,^A s#^Ga$U]Z&T֞@J0 %NdTLHN,A਀:50m<(l`J`1, J!B!)˒԰$bH& ɇ"˵g4]%t7ar T<'`okc'RBZeX'1l”A!)1K])U2y ,ht4hޯ RM6,!=*db}gB~֟R$ A(P)& !}~D210`R+i%1\F"$OSe$!d:FHW"@:a ;.^u |n'sltԇmun`ł$=&VʾZHRh뤹ZTU?9,!\MTU}A BPӄΖ $ّG!@E@E5lT<אPgM%$Mc!+^i":a-GCKde BQSa- Umd,!P̓ {j VPXyUt> :$ā$66V޶~X C2A".zݖ?HjYyS{ZkA?P>D9 QP)58UGKPneI3Қ6&um !R=6@[BX0D B SBp`\ Ӗ3 E?趰us/$,@ h$ʂK PZn2!чlqr73c$,_{=f,Q9\xQT-Mr-V8hC󼹤P 3` $q;s2` ޣfl&'g,4TUUv p纻:trpN]*GNIJؘ{6(y󂬄P# A l!@`R"A$@  2 !h YS:*$I^a" hQk1Hlb/CR NX}eaC=+12Ln}Ȅ^qrB^|bNB El1_yhfL!W K(qm"I)|H fFߢ|i@k <1&Gą Lí d4‚_EBBteS r| A*`T;C,&JR`*,bHa?F\IRSxyz81ҟRcV܀52V9l,cbIpf?*$^IAc&aT @t.Z04L0FiI">~tknDHRU $--ySb8p2Li|Ш<@gSgSڵD+R@Wb$ʹ I*'ˉd 1i߿W\Cм| B@ЪDž:f#+S!L&T)")mþ+t_lAfQ;Ld@fxIؾr'*XUE\*W )lguff[ &VXXUPEۛ Ps}< .Fa4.a5/:|gAKj `5QT Wp!B[@M@dEdXaۿ[g0(iVb%X AFb9E!at׻tg`Kj h_ 1UgYNqTHp]6ÝaLDr|i, ӳ$pӰ1yv*}Àp:q2$&2?AH/Yt1,dF @-Vra}``| ؈V3| D7Y[r"JyyV (I@%(2,A; MV2)XN,dboYzo,HF-Q[Qy ZhvLFuל8Ŵj^̋l"V%[/ ĥc255cڵ;$gq?RȆQb|iЩ$ـeT EØ3mV5|+|32H`J|žb |T BcLTTX3ߕBIdRCP.V[D%"v@li?.=ݽ&T'@"@q jP> av$ q g3X\4=7A38=A474:>>213,6?:83032:;= 232<><=963/12.19|阿o0 HY.\Do0$-G$" &-FJ")Smg/ry!`ܨV`QS"$"0xF_|̷+aq1mp0PN0tf2+I JUe&!G'atlwrK  q‚2I!8$0 s]|鉱XxP6ZA8LM 19&q gqggί~eVXVqkm`0*RXķ/C +ﲌbD H$XRXy `?J0ga `% + 0HHV|D '@V*|(L@M  %c@"`cp\@2XN/pB+ d駪Quv~*U}(ߪ8l %|0㒕1IM} L[j5ƀkb "$j`'S!bM`Ql~L6][< ۽V- 8h!MN#8FA' LMiDBsaE*B tiOM&/hЦk!@I`J0107XD@"U1d0,S`AH dt%z=]@i$TYf9,]a5b0152Y ,dguww;/)$`XB2 I9 2 tgڭ  ,(J0 Hxt2bnH b()4LDŽWPDŽo{Ib7񐶺D^<PTBN 8 # L&NAb2roT`*REElPcQ[!G#cJ&!b,x&cYeYeQ~>&hYBeCjhY,˲a(,A(AXL QyŐLL$1X>]!)Y=bȜx 1X1LI$C3{{zaa608vm$YԖR }sUNӊLCeQULB"9_7[Co`PʙM&H&;չY8=MN@{(r7d,rdV1m1HRh3()єL+RbC1@Qf=Yis+"Ei3orZJP$G> xN V< [Kyp";JdՑМL<Xx%ϧJBaѡnlTX[2! M_3F?-dDcKW2(~ S Zi pF T&b*a(Ful b2+@qNjQkd{} $6R$ bکP 59B )1!RD ,'dqI_ Z@"m?4 \D0AVpI &6Dg?5D[uuf =͡M9%(А TRMvH'*Q9Q> :e s*ղl-SCxD!}udeDEZfF`B;)5*c$>ú¥h歷᠝}C]ljx؈4hH:mb--LUTB "V,l:1ޭ@ oI?9G !IceB&bz-E,b@өcЧ!5X=L4bԛ&x%@ 8!Y|R +P]N +QYv)s%9ct2$Uţ$5[NPQEL;H  *  *8ChvفB 8ᶽEslm-1U.'=1D)8+Y0lnNQ\rVx F!a^?Y6R=g^~SF̍ D8kh՝*_ ޺cpBvNS \8ޝG 9&,LlUsbA`8HDD\D1Q")IGCҐ@Girbn]y7DSVXYt`K A@e,e6aBB[vRqs)jHDXk/v0 )cXe5= JT()nuv^ο{ cN AҥcO&g%;UPːن+1 Fq2|Flfb c3x*SU% Q- G9m}jܻ z$ 0qb"N JJrTr 7NbZ.AFSzB",j0$Qv bI!>ˮe=\ K&!D;<'El 㯯M)g oC3 sM@O8Wʋ (,n$`7#AD8D 0RH6#I[;ELUoy:O-$4 RMTd(I),7lfgLgZ?Zm3 @QKpnE%| 1iG4S/ZT՜$"da \A^GyY-ux ,Uwea6Cҿ<<`DB>TYA=WF=#.lVP:XBR)*&Pv;AD87.I$0ȒdHb<$!?$T'x@D e 7)*YR2b ߛ'QZZ5c&On!KVYsEqJZdk9LFY)SU>n}ѴK6ikk50q#Gu$"dt2 m~\&kK1D!DuPmJ[bV8:F)!QJ;a,"$Ùt;xs٘8i5LjVo[E;:tՓʷ1 )V!6.9 {Kq7D~Vqf%%;F&b-(HEwP7@ bP$YE$tԱ RJ&(;#tA"`D | "VL$|vO[H8]-{}zD<ŌB2ȚƮ "d_BFeYUBbP ?@Fd|O>OѽTY_.gxOvq4>4TB1p ^mͦiN 6al:,TR2+a j eEQ#A MQ&B$'sիz\jUg^^h#G" khXUdt_XJ촌W& u "i9*$p ck #Ԯ5a R. G"@=04!@kXJ8` /Y)c\nh#_B !E PqsSnqD˘&DLD@\KTah@$B"yᅴOLW}뽟LSc>UN- 3+jQ {[(+&bDKaىaHu}fD,%F1(k/7 0V0(IlLl1ʱ DC5TqjthB7&.lpڵALX @XlQ*jBgpIdAK Jn2)$ d"RV..}D PUdS3@ `xF#C΍a /8dB dg*ZTNT&@PQ5j*"K5AT)lLoz n{& Kv|m{& kviUUEUQYEUa:R0L1̖D(0v 5$ڛUim4A$>.c :[ϵQS2"~O\`޳a,2h1& R6 Kq6+)4HNDDRsiAM)F4īB~w\GU م} CGw:m #6zm6]% |Ί$VaB;^=Bp` y$&l8$4U|zj;k@mSctD8)#&[$T*$Y~& NY41T|ͩdb@jDZL*^Y $L ̺ȍO%~kV?EBRBr5`IJ>@Sl"@S; CNΊhG2a#baS% cL" U#.hHHHJD1$BV2AVs2%ucqp2=C" xH6X!A( ȲL%+-3N4fiٝ Y7"ю rշӓJO;涞pj9S0]¶ %QNqi@rHxҥX2KHf p@ :?׊O[ .lܱ@ &M81*xULZMq%ơTOW1TΤ$cH"ɴ(a%c%"Qș9!rcSCIt`&RW A[i}8&0keTD2HbIRw3,$QBQ^<@n: %oZB6AY;IXb ,M& 4?0N 4gt l+:m%\fdS|Zq WCN‘1ٌQ*BYjSb#ujXL[h0(%K&Ɛ$A G%_] eJ%GA8SRdᾐHl͎D&`$ qt1@Xdh ޺Y$xp)B D+KT.e ^aJ^ɇRظg"9A2틒,hP:UiAW{2R̸Kc\F.j>*9z78ڴ]Soz7"52J4toS Zbh8Ū3:6IL뭖D2*Ĥ1H8HHS(选_vLMt)y$[b,B EO>~e+, @pIħm0fX]g>I ;,ID‘E͕$EϱqK1/tmx1n!9h-^$ߠV\W1YM8`~X}a눃 RZދ_e:4K8I/kN!YsގD[y_R&LNƠ2UH.nke$J"qk 6 J(K(fs2$, |UsBep+0IG#H`Hd/&4x g (!P5 6F&l׏gѵUm9-& @Zfr#? 5yE݈7,CÚ߰j"vuԕbo&'m 1Թv6D;OggS/4Y6ͰA *98;:?0;?C/6<:/14153<8A,-,//<9?V(2]!PPcˉ)FUUUDp|f9[αv5?kgNjziӃ6[u jmช3,Z ` +N ^d#u-B4DhHACL\AM$!<< F"K fpNBr6mR-,_yd$Id,MeD Al_ժ`cjN;;n ly 4Y=4?ݎ@`)`RJUPq1aa!PыbfXcM {B??FBJu5JBK^N1xTÀd^uDS D 29!PmdR(+T+!" ɀ_HԄ鱱VAD#;YLYͭ>N 0RjSD) r&(ށ@J ( ((o]N!y\|]N!y\|/ʬUUEYd!²YÊ* Uh?81{Q,XةFHCv1")(O]]-u/fI_?r٩}VďKщ$(5(d|cmL()*7j-Śmws[5IH6Luga蚛Ͳ'8 R\CkMNt1R4@‚}S!|.1\V!?n g*g UF֪-"dH EVGŊb5Q1$$wˊZahZ& IdB B$X`ًMkj/ ,@  뷧<$J&l%Y!b^B2BĒAnRP&\"D##]a'b2SD!k+eB4o+ ܪUW]J]%,!:!D K2Smj @k0ɕMzݧ)*f[,S[L $[ޝ$ "j1-A$B ;ܱn,+tg? P@jƈ%Ld\P:ίY=l"i7Zf@eK;r_7J3ZclR<i؛X@  ^ SH :W㦟";#zYD]E[ 2`L(@0+mi#1A@BʞmBҎJF \BiPWPFm(IX Ă$ \",<&{h'0llfl0T0+P$ܘ#Z}vd D,.TT}eA ς!$FHvXY]#J(֯ &;TotaS꾊)ZB2@Rp^Ҳ&DHv4Q".RHggĎ$k6Rt!!zh~ p j@$N,0L.!1D@ )"kJap#@\ |Lp DM`1?нh+''qlYPj@" ֜q,6?˦ lPɾw32 Ix Ԝ,&\CF cyh%D'֑oVV䲳G\V՜6LAk)`V"V " $,P$H{?NwNlߐ m[G,J՗1Ɗ4U:?+mq:ze #CBj<^O}( <^Oe('He'VM,Ȣ,~۞rAQ񨈘-S&ŠhWZ"xSEMjO$aaV(d"bp`zǞQLDdbnN`HDK4a$,7 !*KxH+ @XYV bPϴHAl\ XjUS0.Ъ`cy@\P?Roz›4&Qpxm>}\kPsЁTA ODԯ| >HdQͮ`H(*ņalI0!5cE'6(L'HJB HE`'Ƌd!@f  2#l$ֺE#= 8 \1Ғ{JLNuDXBxhtb˖2 dcLrUUv~WN"ʿls۝u^٥sjAh_p%?$h)ݶ҇USPmc~ʆxFrV1bj prbXA`,{ADoall n0N!)xErW%Bh1@v mF+DLA! 0$QO!Z?. #0~Ckw;M$f5E?]aQ';0 V9GE\*BtLO.::=M&$_M+b WC~$ DF[5dRgBa1TqcPPU&*HF+ALJaU=DlEj-Z!A,] aȶDn~r5rM{#HzNF@H^,[Po-q-stpDV#n` סZ2jJ&{LD r24"78*=->#l9{^c8gY(|['0-GhU\uP[ĔU$t$.chHĎ#Ah) )J͵&B.%Ʊ$8RhO3ׄbH\֢D'[ʂ 8zaRe'"V@;d3lMvo0&dE :0#>_M*?_P2mm␲,$$eτ ?  p9MٿʖG~ =jDhf>Gpj&e蛁I1ڪ2UaF$5%LMò#$[6!PQH%ә,(C45yۮ.C 'ekB1e>JP`bј:jXL += /cR.qkN۹Z$l96%2JRZ)sb`PoK*?bțYŤcH.8 ,x8@OggSd4Y6 4R27=;200213=;:?.:9<20;B41:<7;e$˨n&֌wUR@1GIΰ0 # bT0a#b2$~vV"-j^^=$U6ZmDYmsV (ʩN$& @I J( VIKN?xGI~42Y*eEPDXc8(2TReMN6ENsc&6IꘘU*DDH$;ң6wv2:"^OqȤ'hӳX r@`-<0Vkè%dw&kF+ s|(ǐlM^hFUi9 ln}!85i^;] nFl=oނD8Y2(Yc0*c,TUD롎FCFrMG"qqQ IH2F;&15ڬ 뺢 @hѓag!( !)l;AP303GHH01Y@J]Vb ur&S̹ ;1DU:oQ*61N<6h"XES !("HA(0(Bs?si dY%!`E HIdB!y 0"xPJ XT,+, M+MR‰$ ZnU3VM֍ڦ,= vV Xفq 7VBKvm0}l@ IjOaXDWRp I׃;JdjjG5ΟQSjwm{I @hsVW$,; ,`St/l `J|sblغP6~ $U/({F .P{(JRD"@T]ǽaQOd5X)$24ZJd`+&#֕L‹SL 4wjll xvқo`JH1 2AN[̚<@sPm;h` &l*]1,PG8L!&,x+#dCd\אM+i|)b) V7bK !Nb2[SXl_cu$'+2$XMS 85ɘ5ubC*¸tk/ ^rt$X#Vl*[mhO)ePLD9DD arNܑ㢑d6dHP4 XTlnatuN d٤DҳI RF,'Dbgm5Nxo2IL |5|pW6›j&$&,)0gH:"~9K}de|cl,׭M8P]B]1b U(l A LLZ v4v:LApDW""l`=z'xbDjTqC^8 $)I3m |< S `1,RmBNXu`"x,S4L n2n0GeaCD"ğQ '\GI !56piuƴO:S`1`j^@ ,_|Jd,׼A1oB T~L i/{Fě PRf!B)ep XG B} s"@||cWJR2OAS,G A/7dN&|5Qm0R@T,"q~hHB[ v?s3׵|Ix3';(P&Q (V(9E ' ȉBTU<3 ֟^ וRR1` 8)d Ou@[͌ 1ù\|ߕ#eZ&`,QeDI(y(5)`t+Txͯ!@vtMpwMtmЩRb |HҶ6,1F}1;RntmdJFF5`=,]V6.$H@rG)|9?{-,"Lf}la)dj4sͰ>яAM`BEFYb؈=$y⌀ "qDDB-1ERDD=wسaΦ_EUUce~8(H8 @Z2I$YqD@a@h i/I GLt: 8e(' Ny BI OQ1A 1x')a W0D+D2@s{c_VY]qρ̨ne%|!6Gjd@{hbc o T\FSf͖k萨Zt6@2l: DE `L`YQ`4}4P=.,H ,6ZI2 Aކ ԒP wNbZ*DK`,-0Bƺ}uCda Z/}7 Dbʔ/.,k1,՘DtM+Z)9x`w&l v )lG杰lT27T_c%S 0~]\G ODP@[hNQRJQ~݊W*[/x@r_h$ 5=0&h5! lCTX?Z M5_hH^=;@_}"NjHe6,Q5SoIP^7LkaX쭦=ٜvuv 2Po ID\Wb]WۏW++ KX5h]%a/!V*6eANtJ Ϗ)ddgUU}f+:`-jbXXO1l$1oͦG!G\cK&WcS&m kf;` 01 8@"@p9$0 !cd81$$1\ٰuM/EC!5%ױ,"iR7%F\r6^ l>)"*)ToI@י1i½gm(owR:YYdٜM+[itjf (&@2II' xRR_?g܂(QliU궞 m0h X @7#%q# P Uv<6V"Uæg܂kp{<\(JG`I!%pI1"X,u0t ;ŤYDHk^ ~9R~4ϛus|"TN!q[#FI%]RUps!Y KeX6VZ (SH  QF1$e3OEwT~R71>3z}UAH|=y ~U &-OYV0!=g93G+@&T֠܆Gfʧq#o(}ܧM7*8c*tݏ TryLU%0g(#bpW)\ё( CA l J `". |,<貿b, UBY.ECR(1$HJ 4IM eʋXZ!UR,KXk{2LsTqK]]iƷ%d1kWPd>n}^+bܔ3"Gp*OJ+Lj @hDZ4Xܮ`^#)DaLUU%mlO׆]]q[)RcS"³ХUGcA]5&hFv4ز[%DI"Puq'30 C e0`{ vءC`Bl!džzXhX1#O HXə н\n6녲dj^Sqm(NJ+QfUAl1Q~LL+~9w _ ˣ!#$M%89) Bk1 ASK`IwY Z Ss2555g)Klb$$Q T-P `pw%Od1&XK 0̅SHH;т9,W =" `%#lT 4x?v! 4qm f#~dLA E|T KSF<RK _VC N47+sFSlk`$|ȱ,s }PUI&xmqaDBP mvIdg ﷸDӄZ kj ؑLL5*1ǯax)r4Ρ9!kDBXkED\4H `%`QT rx\Y4&="ɥ+ G9Coz')$W/tR$/B! bZVT Zsttޱ*UٵjXXi"*:yLh5z$ψ"$FƧ@ųRuۢ 8acCYzĎ4N8mU6 I#:ꐦ QJG0"$X *W1̮\ L]K>b)M,Hf x'a,"'ek$, yAAT/@HpcCYЪ \c?'^RedQFG_?D 1=A# YQ8f)1ID`@dYI$>10Pؤh B* 0'P}aԛZ, *]h|*ix4y`a0X䯐"H"%(e=˩ցbNMQQ{`@faCLR <ػI&Am8@NvM_m^• Shd,q]$JZUTUDgH IX=9k~_T֐QjtMk6t$JabB 1-B@>$c)mq RM60ZA+AWe 6в$c)X [K$1l1D @PH1.cZ;s)L`E<!?dCZr%ҹF]&dYөvcE:hpv;QSͽcUNqTL`y@l\BPM+f`Bp`қx`P9Ex* V2 ;Y|}*߮Z(K_I I+S%,8DpsϲB ;D4:$Uf;w3N%3iYJ%C ` BYoPx ]fNHV[Sñv- H;thD^֘o5ʚR1Mql U Ksv杅D"XXwNV?-ɞ~'3s >DUU1A]X+bk6HfAޛnD첏xov#$B,ufBţAU#RTE1P{KZnՉh<11cUp_we@$!Bp WnO UN,Iv\?g`A{'٤sSv"~֧ӝ͘rN0囱 AaINhúr] "3PLD `]bQ JJmu1A ܑX OggS4Y6 6//.20.,111>==231.1.8:?5350.99>03{X?9-a@s2!ШTUǯ2@@DKb6NRh tYqSRW2ԥf1c&$UtZV,%1b$A!lv2!l qdYKhBn4P^ҶbT.D لNAc*e&ƖV,_c$67J¿Kez8?F.RJu R4)hR1 )}jsF\,Xgr CW1ӡ)vLw)P`udDK /e ^m#u5:!}lG$"jan0 {K܍߶Z+!^>?RZVbIX~A]S+"Õf`}d}KwE}0 $.-IָM&%WP-)+z&faBl'U@2ȹޮ,! +jb"8рZ@K+ 0!wȈԖ"~1qNX  UOKY-,ҁT `l C!Eb Fd†@[YG-zќr 9=C#ـmܓR GT)2dG"Ag* 㱄I$1,Dt3MXh2X1bo1S6$$ ;KpMʎ$xk-k,Q\cڛ) # Ƚt$&.>60jcѡ$#1¬?zQ4U/u?[rVPV>( 1D,X?6 )խ?kՔ#X|la`x(ުJC$BzX {CȬ=7t +@9( !r CY'є@yR`BeBF(CTecEd,@{)grIb<-cv2\,"TX`{L'uQޘ 6plp(mhiQ&kävݦHMD^Ω*c2UU%G~ ]^[klf=wې^AqML'^V-)2UGxY!20a%)!rd4:p0BGF‰,p+'-B0H'@$y`d 6D,̤6pbPW˪R홗"rY/>~ŷ)CAӍ.U)zoHɸ(ULVpqv+( !H$=F XC')4fjr{XXh=Yvi$ۊՖH=+~JPC&4ZV q r0)աХ;g@I vP?dBt'cokɭ~$Q?9,ۡ8J^ߝKI"=LcnUb|L5 l\ʸpB*&Zd "wil,)zUE MRrBPJ R-cL$e@6J? av %jXC:fjϫ$aly$DeiIZ e ؂25ey"4ξZqiMEFu'i-V9&_9NFX$"͆ >EPS֪>K8MXL9 r?V.՝Aʳ 2Sz$S?(MvH?X/|j%B()UYxz $pԯT@ @ eLQI Rm2cc!Kvd<PCT'{;ZW)LBd@!c/$$ghJ(P$aY*L$9v動f!:Ҧ;:>%! @%YH52Ȃ \0φQ S/lW@"PxC0h@ƕRRe'mW I=74Q5\uf M@ZX* ǡ/Jn|F.Yk ,!muj) pRG U521b^;B2ߧ*(:sS8a%ʽ ͔@?1dm`S /G@Ў.a)*B2NJ#D(09^#[5yQ\ $O/w F"t zȂ( Vn8 l̢YC K/$9DT}m+{ `+&B$IkߘuaS QK^~w0$ Zu%6}mCzzV6Wm6$d[/x,Bei >bҁcRUxb;JZV0P)5X;l@"ER]&ϖ8as$Vs]lPP^.&dP?{t%!6AHfnޫY[z:z,HwmYtk3 E-!̚)a%ؤHȲe(#%Һ)]2ň~ Ov I ~4\YEYEY~?$k`0sGxjTU%0'Ѹb1gp(r(okbD0C*Y(&&h}ssmla"I0c[AH2q{RF c`2.UX췌 R2EJK\A(YR(gu`cRV0xR}'MI` p9tK<Z4.Cz1<,T"D,9W*j0? /32!F$%Sڌ4vjə1Z, PZMDC0 eI !l7? #\.))$V0N8)*CE [qO1 s;Q%?h = !h}|#ڽ|̸3&IWVssʓ0 뵱k/dp ΑhU,gƻq`b h,8: 3vw.̝x0LӁRߍ$IFzӆ f#̷Ps.Z(OggS4Y6 {,022/?:6? 35<<:0;9@2;<>2<>=22Dhm:DP EI*@|Ҳ(ZRKH+2'pX՚W8q_lBiRfQ! 0C@BmX< R QuwI>KOU 5Zeag%žx5bʲ4*BjdsD% FHF@jPc`u;ٌ}WzV]f1epY*@^kBA_g%ZhW;2ʲZVk0g+$GU!cL"ߥ `a^6 pPn+^aO\,P9[ rd VJ4b0'͵ʒB C((t)LR86@ V@ ETKpO# ؐòqT3H" DB`Xa!<4. HԤ? HE0Hl, 4 B 5uַneg&J$!9@7 Pܠ3\ ޜ6]iH贵:YҐikuR+Ç,+7 Xg &DAu`b>yme{JlԿ|&$QwFBbրyr - #G9(X N n"I9dO-C\,l/zK| ujd,! (~ Yke-V0)XL; DD"2@@HڤQ$)P `rƖ$8Dp<` qu:&&BYJ+"(*FpHXC(_z%#Di0:QI `W`)q&E !5I&b%2!+/;n Q0>OO[T*xn.onTU 4%;.ᲈH .*`LFq ('DS(%HI@JMR j8Xdסi2` }Y<r2j3-sdI\`.)$sI0ݢ \2qrQS$bS V('HH¸hB˜ C2XBjQ@PQUu>嘳BSE?d<+#! P5eAY@ #q0.;A8$CHr0rt> 1 H|#Co5x ,+5|(x$&``6(wޏ ~^҈t/q׿enHwbrSw'`l|N33C[[#"c3D"QӰWg|% aLLl$6M8H1D9IdEBX(CYnddKaKX M")e%+L˩mB`74!I `$%2RIʓYヅèC\H( H(i! +&dPCR:pKzp!_V$]֡L[xXJVA]ԻTO;GdѨDPQ$8Ρ˾f;[BOPjiӷcc08OPTH`+C0Ka(acvuF^@_*Lm.,k*磤VIU\xr ܥ(,rY#C.rsr*LioUePZ\8mZ1eW_R0ˆ;t(L/d9}"?*schRWNd%6wVů#f 0yf` t^ỵe1`Ҩ)8t 7V"77#$ҿkoʄeC7_ьd !E"!eY!hJ&A4S uklX ,K$U(Ƈ$IJC LH|s' I:2Bl<(JM>H5'෬f1ć@;C!9FrCF6Ɗ ,ͧAJ AUzj]Q-),!kIZ$ط,;GRfxoƀ A'C"$!\+?3ϱDN&*>YKDX4 3+m{Ld0[a+}ߡDȲ@2r!*>{4I$d;Dlw!x`cF eځOI 7 #b`0|Y()1$[/\-v̢ځl*w24&SA!9#@"qv"\,Eppj?8 *DI0!CAS,;>#q꘧sUDIF4G<.j``^,)IR8  L'H30)9bRȔ%DO 0G X[@ A\l\T˄UƅBA08e.f<]OD#6H(~g;eBl$rN\09?xj$ Ri;8/,k~4 S&b"HVy{Uczk e>Y8,stg;cHJ5 r2R$d0J@r儉F#32mkB0eY<ۧ}ƀ5"pl#'"dh E0\x\0ajDw ?p?*%z)JA8Va%q:&8$e_,OU}h9/@vf`ɡ 4 3kR}4Ol&a|46>Ts9d21gowߧOggS@;4Y6 cm@-<<=3/2//<@@eK)G it۬<FyGaXA0hl52Rr>zēXTJ )HBM!`N: ?:jZw~"An! . I$D,s:;Ȓ B& tdprqj۶F@d_] @@*!`Ln)sZH@4 9 .՚sg  \ $,p Xm~9dWH*{sm;GpZm[b&Qk`G5TfUb"AL|Ţ8+a%BB"j7a-M\DHvر kyvDa !vv4k种IH@D, aDHȄ]4饀ݦ B?(),',cc9OP.2(  «_ 8^0PI@<~-?=z\m? O=Vc! 1QLUU4%ii`#ŢqH0:6N(BHNdƬG.Ä '+WUbY7 B(@D)mGpR ?_Yo8f0V+F{ gJ㦅%|"ҋ3^ܴM ( 8GR20(?=bpRjy1>OԴye` L 1ѐeQL6][< y\24(zcp*0aDä%H50#1i'v4t7`FcJr(%lŠ!Hu hDvh|@Nr1aO;Wˆ+/Y3ubAŹd>VMTJeQ.`kŝl]juuմS[ΈY c+Dd66Hc]N mǨT #c! e FD"b3cv$&!%Pu,!((!Et"'DeC%`TY[Α3 gGkS.p2pk/ (e$uDw7RH,.贚%)z_i7Lnɇ QIͥj1 U$7-v !8c0IDɲ! "xU +P0!b[2nr=+IyRR9FI=H,QXKd< {AT&كkחg@WR}!bד{~~$$@H*9B,ٙm(ۭں_Enl, *S)DX V:AH T$¨aD+Zga8$C $Xd"]TT:DraJ6h@`ҬB,# Amb@&fKQcvմGt.]Bqj(kZc!Z(A2)Wnj`ð_7v-[e (~:9i鯷#9ͩeY˴ۑe :9_,4H2"նԎb)('::0#a'T$ hRC8Re/HHAY 6 6H BC8lBq} *YJPPW1J) (%<0#Ѽ<%ƶjY.} *mS $0Ɨ~mkF(R0K::AgٸC[!L?y %Hp~:=C9՞){ B.ENg1LQRa?`U[5ScD\ƇTK$Ix;HD dX&[@v`)P(`@` b CۢƖDȠ91 8;f0z!vXTNDH@J&9ޙYۭQ3Eo {|.ư!(Mu7 \L 2JJ€֟}搔mhhOggSt4Y6 Z6)7=9.0;@=865.166?<610135=;C=0=;:ϵp4pc*)Oqx_ #l󜘏,*2U 7j:kUJqѐcbPFN#rH&Yƀ@JB ɣL@ƒl$dDH <ȐF_ c049Iȶki|@RLDHڸl|!!ߧ곣̙1mQ_ ŢD ᝸rfX&זUgA oɀO`@'h;0 #ll^=e@ b&s{:ϪJQJPi ={[3҆;*%F Dnq 42&~l4LSUU UB fB I$*%R"W)-DS)1eQX NΙСX \R#+n"Le hj`<D@W6zbI *EmG6w~+z'^Г?}[J075|2&(t&ὐHH- Bƒp)8P$O/dWb^qN(#Z\[Ɯ'Ɉ<~kgJНT춛IG$,I|`_DHp]]FNM&c2Fqh)DHPs6pEp_~4WclU:`LF"jbhW$XFY(5 %8,'xIJVZM6?_i6sXX+*DFUdBnOIXcdQHY[J1:h!f,b #% *Qt.53H-l:b0m@8z9ٶmǶ1 w ?S"D!y{ iB" ǐkC1!6$xtFAF^!YnňI#0ĒB~\( M@'0~#jesӾ@ͷŌ,ʱ2!4XoZ1P-alEhLc*hYؤ&O&e:|@"b}ӭNɲ̀b9CX| @  E'4ƑӚT ';?\WIYBvO=BMGaz"S <Ha5r*0jTU5 @v $%EpjjrxmZ0w D.0La[82rUoɠ8+&!p\8E$ !ZI3f!DL|$ 'Di{ F޲ !b( T74bŦHJX2H-$XtC ɀz#(b6 @I1Ậ ="WtDbya7j52r6bvM}B3w"$ͲV֪,k5(&H$JRDRX!a@aA0">n+F">{`L,JA* 7mVC8dK,F 8*"@ hn-;a9DhqY_{-AlHs"^K$cLn^۫[Q(1iuU_ qYK [Y<߲e*uxӨ54إj'Yd' @0&a D%(DnZnyȍ^se1&(H@=+RHA $\$ IQ$!+$ 3BI;/ 2 23ǐ5#}M`zO4V}3,wE67r۵B 8`حs@R<Usm" $F64Ǹ)|L4U[m0Ba(h'np  d8}\㙴UI} L"Pʢ!ʄ H B`A'G+II]((R3Ta_e[0  Jb 8I7N! 0)$"BHH"$bTO2")BDuadrV+50E`l!LFHˁI2N $6HHa`\C5N1XqC,j\hr $`@<@p<lxsR6"po%Y("`L&ll뇪k֮Ut*f;4JM&p&~@n]~~!ddNNv뜩 4IbDl*Ny A2X@7deOc](pA e%PIAHM P~f.1II d6K? 0KcChM (СU R@'1!ADl_kcr5e&TU!`RFńB yߞt:ⷻzwwQ}Zlwp9/Z89,,*Ro.RX9*!bzO;Ʉ^îHL8-/퟊ F!`@J!1D!.;`lDw]VR׌z,lEtL:@[R沄h)EU5,ʢ,:Nl*c&0ڒ$Кrv|pQA4R@$>&6%YeQC9BYBa`1 %a` T('8p#` 1 C$DDe{axn42`Y֊}Fֳ#j3D8Dt"opfҢ Նg'703SxUĀ)\5}/@mSAXӡvʮ+6AQi75Ugst}w{MO[%aO_zB䫉GjTaBHJ`EJ 9qD#)#7AhD~&WQkB;C3ⷁM%^% @A؀3qt)o @4[k曍?QLc]T ѬK3ECśa\{5yQI w&!^,& xv}8hI&LWX-%+ *[ ?'e-[AJMlS\` xWzX0I@$n13=u #{"]-LYFURvՌYA:. AH$ R%>) % dqYYB{O5{# /n#ܳXʔT 0DpP (IRRJ_HDtTR$R"\!pCqqU•UQQvG_e<B:R2PJlrG*oBs( :-ϗ#][uFoNr*Lj2UIH-H]$60a)&U8&P$V:8 /I,k!bfL+8 AI."@E,/ 0VۭHJ$ i"PPN88,')!&vsN'uM|3q:{4>9{anZ}(DZ$ۋC1 ʶɷ'@|xA`~))0ys[s-W H[XfCe"V"٢VHE"8!6JtFP"8$#ܟ{ @Z`aBKPQ@ib !i`Cb$#%chJЮ 0$3igđgw5m+"3?lQsZdl*jdAγiQߺH/RbVj"`Xu7&iHA1(5y y&q:•6?a13'G:|C1UU ""vtv7*7V+C† M)eĈ豶qH&QĤcI&"8 B?mD %DB?T8NHA$$6AHH*BDZcP#\@d"JXr [!$OKfL.F%UQ.wTdkRNCH/SyDfBp(1Mhz KY $#Q$uvMlUH* x<u ̸}{!@Ȳ~'B@elX [w_gwEEJOíd7  Hf0%J;6IGwI(my߈46^4Ot:oNI2&F6f%n+ ] d{ 7HD!apHh7<  'g YAM`Q[PE ȄI0LXƩ'"]vec/ۭ0"T4pv/ Ys4YL=z4))#:tY zcUTl+ ?4׵VC&gpI|/{q U`̮ZJq5\ۥbդh/zo4K1̛h?L0FPIB"H`),Scca+C"IL?YkLHJ8/hFQq(eh`ؘh  ' (Ȥ 08p c߂Zz.Y4[= J=͟,jȈ r`2Gj+IBg0׀DXTokIƉagbę15tI)DH%+$NW)0$KP`2B !0bv2rfEˊH.BeU̲p`lY#![!uD+b) S+Rby9G'pp"Z||{`Lb;x[p]0o"| 2xLqm34`l P>K]# ;rg~Jm6 B멋iQ0E h\l$ W;MƄKAXƋ 6rQgĘ97 - )p0B4`',@Ggd𔣅+P(8^(ixgc,A XH KYn2"`{SL8o@a37Im1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒGѓ9dP ̻|gZq%|q{܍|rX,Bfczt\hӻVDҟs[ZmV0VPMO[& 2w!|~Cqdbc ٖ$B?-kjub9YXe:AO6!FM\FT;Z#UZE (:'A|~zsOY);vU}o;87 )[v*I%4Z(\ ~aә},G]8|~s-" =L,Ҩ/ 6,SqK#U}2-hD%>\r @ rI@2<_Y}M>D5L%{5LtF{pvn9Ee:5־M1^I}ތ>qM΁)w>bo[<8K^4JM7PŒ/`a[͗0V0Qnďw|G/87kK?]-}MƌY;gFa3h$'FZBMuvlْ)iou4a*{~X) !]x =.Kk:lm|oðְ# orUBK6qA+E(VZ5=;ˏV|En1`;-tÒU|PSJ|0%8.ݦJ6Fu+o(c?p8c~luOm9F;* $9 uglE+gC7^7r,UeLa0^,v LgwCtt# (ug{I陣[tSO6$\^>6S!oaP@QĶp'0X Kg80t.1HAL aQ Cz[Ax})b``EL~KiEu25Sex#.j? T4r F@C* &oTY"Q~P9 ܓ$QKɈ_bnr[oz=.KT`b t! n,E"gg(>OۺT+rh,4<1Ǩ1  &qm\'.= L<~g2`nJ}Aiu`@F(b*|鷙E?MA}٧Q+w~s(N창3[dV]Ljߺ?]5Jr^nM;a/ۗDЛݔ*duNIͷ*-DU ~Ef`Qt|z>]XzVkZǑ;װ9DH"?bD= :{L'YA"eAsֽ@Zm{K 9pE;TD6FHB|}т9ݬ{vlNsIjSh؊*pX8NzaՕ9`R(;gέ=@?th)QJ0 l ~+uxZX:6 Qvt j:*AUq'r8@KV姜`0AB`ùCϷIARHmy&q}b>|G?ٚ+ +_: Ǧ0.1%[ϣX @>>Lt L<9φ_i[t+_+FqZﹶ/6l>3F*l^Nݖ/F#=}-xYx ,Ⰵy)K3{*[}+)|)ߖuGz&P[VFKciJ)}0u iK%|-8||UK! QF/9SLZ2!͖oyLgc LF~b#-z@]%sW"u)I6n\zȳ3T@o;(T^9lK dz/*4.+p*z-03!9. N1]V 8|t\w/t7UQ4V+3^JӈX jfdNN:J˘|a%;#䶫㺆0LDwԯZLnFz{>+}]hZ^V5 lDO_秿Rm꙳G,/DCQP؃VgS]}:@YE)' ":~|bG/f†r>܍=-4z^ӑ5P7;tGSYy`r>ȑta6r{#Af(t/ᡗҾ|l8}i54I c7X̲s~u\4}~pg;T Us{ڃk:K|~;Ls.|_،N- )N*h֋Me[]X^ڵ:ʳ<yTwo׻bjo5[ 1R'[l!n)'ĩT `deb?>_gϝCJ2UO9a^jZ5 !*^Bɭ߀֜3% dEJz` Nm'l,^,-@aBV s 3<#\|߽zMo~7ݼ.2 J{nB ^UP PZH'..evRf2y[4&Cp\,QAǦ%{( ?/c=h '" -t4#b&$лEouŽ!dvz~\^ԟOl)ّ)'NmĿtJ(|6:` O>}IM3.a@, d~W) *jTTAdB=\n \z49P8(]JE@w)D/ZxJoD_[f掤 LrG.Ե]%2n? Ks|?-H ܆yy{"PZ h`'ֳ鼶<z3ey%I43uxi]!QZ^гa `tl[^9qNm>D8X͇^c>ڻ3u0JY*y,F ө%DCq`e|hjk=t7c*0_xxޚHMT`ea@OggSu\ux v&nldWg&vdjcy{~s[+#zcbbYg_dbZf{ ous[nmӠ@+c(xuzBg֪sx0 kgXSVEU1G,;YUj 8±`S~[z1`J=6v4(@OGF[qq3~y&|4j&4)ei;+ 8X&*{ĕ<}SRrxC)~s}~w-R3> Z17!=OWUS|V +o5H8_|{-lx2OR]nhl ,7.3}?i3ihOo〕 SDHՄiO]k 9C7;i{FjI#=(WXp F&UCHB:3>!w]>ǜC?\ncK\S,Ο{"~)o+SZjyo:Z*t0" }&捎.BZ|~gp.zc.S \<_h,f]mƞߡʍRJ?uO.lWb8l߷W5|~ۚ6jk AjU@bng|v9rZM{N7؈۹ħɗrYW\e[J5ۼ|F0 |~:f-bIJA=.o/=:mYOXDƊ\urq>|i"9a̯/^8))C3ʠLLOIuLfjj3h\ɱ.I }g; MX\ABQT]<(aѝJsO~!h<UJ]>(q8=R#xBL/yR'8ø~)4 plk(5w^&$uł|$,@-F16> &j>d>"npל6_xdfoW0g h)Ѽ18@77jL ̳ҟvx>)p ^~t3ȵ 1XջQk.J>8*z`y҄,&\fJdom:h5`\K O\05^w` 2xQjaCpw ޫ~g/aeG8Hli ۖEw, wXNӵu\dH*FXPq+ ^p7\;x$ëZ*ZE^X|~{bUț+]%^4?O9J痫?|.@+9v=3u/1Rܣfz|2G.~f8aXie.0+S dU{X{}_e&UKϼTeHeFQ0"~ aN1;GUف<ٌ|qK-lxU 7vEjRk@(ҵɷ{ۚV"}oQ)g:m+;a=udbdvv5T[O~0lGn 5$@)|Ʒx_Zr~^!Ob$lq irD8'.F0[ ߏ[v-sÆ$-(l/}%]LvhDCS*VZE\b^6׫;*v֧\ޮTҀ`g>|~KhsՐ1 GTM m3Cl߳;ðiJNwa7\uK=u1h>ee:g ZBQ;?h&{#{dRK(~zM>bU,V":2+8U d4 f4qN0v7c$' rn !tZB#g"@h9i+ꡏŨ]E#ijr34}>u( }pmMVq 9S"M|QN.'29T RU@Ԩ#ƒDe^r goetmYhP=n(Ơ"sG2.١^\ K~]M(ԴPc#]̓蓘qlCOG[bV}ʐ-m0gF0 *@͏Vzg Զ;qx-0 AOOggSyu\g/ 3 R ni {R`9sz1Yi1yPr#jyi}[s'Snj:,]F3""h՟?¼aW\‚99<`gJjgd$a\AKW.OWaU`Ef3aw%e_ūHV+Clmms-1.1.3/data/samples/bassloopes/techno_bass02.ogg000066400000000000000000000337121247673406200223640ustar00rootroot00000000000000OggSv\]vorbisDOOggSv\i_}Z-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒz;1uZU7)ѹ"ܽPܩ_ y!S$)’f\^~+3m8q+3DwGTY\:[Fv;;zWlLrZ;2uZb:{_]_|>T5^~#~ۆ'ۊꝻ>+L(Xf#.#MoWbvoo"P$§f ʃ( -'; ެmg.ۛzkMBDLר1gH-\:Fxǐ[vܜ+d.x~́[PEl +p;NU [p2|[00T޻%1ccl '@Uif& z/Y6L.m<ۯV$lWQe$=YVjONG0RZ`=4K&PMz=OYܩuRSأ`"  @}#EρHNaֳ`J I}o ASrN$ĬJE.#BN0{4uGݷ÷ډC$Zu7KWS8Y1\R\;CvU+ZV#O7 מ%m-{ BX'^z h!,jzQldP;!p\SCwhY1&) qr׿v+KW5}]Z;{{?efV%h0ī"= ȥg2B.3(BN d/e>3.`\?\ki٣,KO A~5R .$^(G~ϊ(+OE2zZHZ֦( ]od p8VGܢ&TBZ9r 3vڒriY MרFM%"EdVs G G6f:zjD,`T5f,Ѱ7r0IK7Kh 6- L' ĭԞO2}N x(չ`y v<R_LRrWNwk(3|Yaю S{[hɊEN/=0_[o9.}p2?0JWO_/1lަț[.s'8%yQr pyJfů7VQ-W2ZZ`Cpw!ޜs#vc2{DX'0-+grx[VOG>=k[# =.Jšނ(-;%HP ~B~+p4$ԁwci+fL)7e,ANĦk&{L8#ɅĆ^Pqݨ hT2c)o8*.G|t~+s/p;1 z]}%t}m~հLZXd vF*7J09!`=}[T8gs9s@Ux߳/}iwם16,"HU`78J1:($`;O$_mM@XdFb Uމ`.N$s{V$ ݐY#T{ xt]@ͳ7Uj$9}X@&=s0trzs(I1.VFuZ,ѥcܽߐ֖_l;n#7ݰ4%P^)%{v>ڥG<ٮ0d}7C. =ܺjAa [؛Q f?` :Zݿq9ʣ$/'v|[EАdžT7Ўob[ 3~Нzcũ\"^Ax˜Iv^&oq(‚jn ra f߂1 Cy8$0 #Į!n81`{?F"ck>j QI5ۯGUGxbhnRdndXr U)v~L nrGwKNnӣJzQ [d4溬<9{G_y}Z_VK˦HqV0}SY&P [Ӫm';:2>oP@rɊ@8{㵯KezMDZ(^|3H>DqP:p:1 2Q|54ʧ"?x 7hZ!~ woz),kVPlim7"z1R\Ē)*¦qMMz.R (uxRLKE|aW3ϥ.O׸}LLRjyϦWY%w}e_"g ^~"%0miM 2Lz5+ ZOkD1>j;~́V,|V\;`e#άEP >Kh6rtgf7s(< fH0qSriiA%7V&7+R4M9~8;L^p ><9CoE|L\ޮe٫fxT0 1Yێ~M"v0ʘ-tlQ8_~>OW}xEkDֹ"C8{VD41 I.]IB>呚rjsDp&kq8홌>^vSr4l"F3On)6 Ҡ!_?^KzߚeskJ6Vz+dtB'i_Os×TX<>~xR 7dF`bkސۺ4'k;ky{OhvtEzuqBvb[%{Gw;rO0 FEPHc=a/gwؚjoOE4*SWx,Y."T@p  hS O> {?N= T` ,~ [. ћdaPVydL|_&߉~[#M{ac1}ix -m^G\{WȄIvCMtx**_phf];y4j $bQP{y9Zr¦\J2ّ9zkijI͜Y VY9Jr(,r(  Xш#DNHކ ̕AȻ)o N "u?9rAhs* AJNPakU^:b>pl8b!OggSv\(*-&tUSVTb^]uZXXT'$%#]TTxg8c =z$ɬrq$ #m=Α>vMy2LɡU#7[ԩwBK_ѪG0F\|ʩ- u0 uzW6fҽP_2 zfq(Mܑ աiZ>Z?q1gzUQT@&)[iÛ8)}HK %!- Aw&{كZݒZq;syǙL]_jsnCpIYވD|>γ XEIfՒ~x@kH84g>ҊSg{#ɸLCQHୋi_Rw-EnkprSH.&;7.F6 5?* uvձ[y ZXФ09^>yV >CλFc@A|[3(9ያ~wF|=-Ynf  D]_gŜgY2㕫20C/vM0զ*ތ~+!lAd=,ٖ4+a`<>%Me=Mm1ֆH½y PcY  \]8 DIq\}xQ P7gAvq/lXmq8c`sg˂ĦDOO 7z-s=pWL%Fd gORPW.-}f`;BTX(,Y^C5<Ӆs\ j0.EHvz`yn$1Վֿ3xt,t }o[2jɼ!BmAz$_sTZLHO6̀yiIwryٙSW\2]G^.R3@-53wZ]ζ`U-˹h߮˗a9~2Q=tԣh m>d{Tjf[~W"M*5c9k1|L{$[X^ތ-&:}gOjtP:ղ5Nă7>>X@;Tx921?7s'OuiaƋZ__B3_._Wg{4V3,shddCf-z~^sQ&(mVw,4m/;筲?w{V4zn!V<$EONӢ >Kh<0`^~K'pωC6܇mD@BU]Fkq kX&ora> S#˒%ӧGbZݸQr{;ry%#5$o\l*) 8  S`~11epQ5HWpJ8H|SplQ#rC#A\cxČRruN;y;ȟk`VZPM}GrFjsvۯf8 j$Uҟf7:oO%e4\=!E0#&4i|$%_%-Ǡ ~J־898g#hYRBfَ۟T7Kt69/ rd+߫WmUVR@Dsz"cboq +BZZ{={E0?i  Д2IN,>pzm!j\v'jX%|QiqF$"ݝ!  tH*icƂWVeolUXSHJ Qh )| Dn4 ::緢CQ~b޶QCVibN ÿᄡ3+$Ews> cGl tR:䗰{H`[3"S2)@+nW UA@-j缚?_.Rr2ljFgkT @c.~s?:u+T6 KL[X^~Ћ"M`Q;6ܖ>Q|3ۆ=ykw;&=MѪ))K;qp+7M9;;:+G1mF<X@gqڒ^Sa(@qs;lu7 <@+Qt_Xl k9(e^{ #8]:1ƞ BL<5˱7&]ܣ_ڒU{o0Ъ”OO:jV9 Om.~mRXL-T픏~0^Oaف{鑠s㊭VYë&'Mg`Ŀd~-=Ppl8a d ''E `i|Mc"!56qh\%67r9H6Hf-RfƬ|ߑ#&zoc|<ڔ-vj8=5mٶ/J=_z PQX˗R޼.9mi|X#oQ ULdԪ[O5IhtF*㪴w.R)Kp,og2lry]X5ַ͐o}[z{꺮AAcL@$r..z뭷޺x[IIIOz꧊986æBEvϊ&i)RtaK1Tu 3&O:*=jyL3WGc ȀMߊ*ղGr71Bh :Sn(FK.oPRV,Kȑ]qh;/|8$JH7 DʨpX%2 hL18gǵ/BZ<:^͗ΡSBA eQ]XbJڒкǪ.tP҈;tfwv &HGF;zE[y)ޜnP3G9%"wM6GWrQynQ/`iMS#mTppX0ɇ}Uih~+N,>~ʳb$"^5w[ä%Ik WǮob.JjI* ǔv?$ Ϭ.R| ^~Z#(>%L{@AQj3y}]gX7TF献{C/ݥ2OtgDE44_ $c`+S<~c8eZBuxtXA7C-zC~OMxqt\zu\owċvebbإOE< ߀Ҁl*@dY. 6 p4Ա,"~*@ HpܜT2%D!M30@7(N>@^k%ph DwiQH(@lߝ_v~w{͕û#sq/<QTn69਌]!A(Gwx}) ]Ѽ#ϒ B:LyZ_81rLv^lOaoe88b!#AcV‚m6x %# 6U9W<(tݾ=>{ZmOaGpVIqbߪ8+,1"%;ǚJ3g(~U"0sK++0 }DD&0w-f\`:3bJ7, C ,֖H#Z/,_A[dg7 pާAnѩس$+Un$J}7ߗյҗ&Sב7[_=Qx_h{hxVr|7./ eաI-y+#i~zTR0e5JgL`g ζy/c$eo!z Lү7%XvL>vsEL|Ppi=ƠPLYIv;m}MuQPYTV~G# ,dlMh]t׮5uH򳩚~:a Be~{"<8g_h)q L7JfrN>/@ iUT`@ثlmms-1.1.3/data/samples/bassloopes/techno_synth01.ogg000066400000000000000000001611031247673406200225740ustar00rootroot00000000000000OggSw\!e0wvorbisDOggSw\$-vorbisXiph.Org libVorbis I 20020717vorbis)BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4s u82 b<6L*VyE#r lHX̜`"-AK(gaCgGOҠMkڦv7 lR Df!)m7qBpBoC *( # 4j#԰tUdJ&M$U .sCD9Rc"b Ndr -Wj>Z"Gٛ6]vj>̿ի쌫+:fJH>@%^ƕHl%&MUH1%'BO"֘ՕQ,fyWG/$BHj߶\GqCûVp`+jʸ~qvz,AffW.F>aV|80sj$T|$0 9.A;\9󯳋;s:\r0>/g}]CMlfy*̜M tV}R Wsz޴pwoDh@.xZVÏ~z{tp=޸:ekm 3*6c<#Q_tW94Q5IM|I>5o'&Wʘ*.Tu*;v @E<]|>&f_촪ݱ/[UU48u7[iVo7a\ǷqY~+ex?--5 <+f ymCtx_WshY4/b:ƙ4o!~7J$ o9 gDd7E^`o*wN!5f)k.(cQbZ# ODFFsY~yν'AWD7VX cƙq/|{  fdיT/{czM4i +p6Q漚8N DRoXÑH,(E{%>*qhCtBZJ\ڃ}/P:⺚:g- x-ȇR:hvb(r* ;^- Ʋ[D1`t/ I6M$!d [PNFBr`}"lqF6P I"W-6(n+'k^sɂ+Kbƫc,R,l283՝No$qZQDdeM5j-VFZ( ި΢ ÅD)m*+ UUaV ϴ(bIM;RYb{æV ,fU{HŮŠ\fmv|ؽf* b"ianb{`͊A_x\8lŊ(Z"MYNJBqץPq ^S(8D;bMFx'ru0#^qzgL.+~ /1C_oTu@3,m_q<ؘ9kakS a$P "1eC=U')aI$ :;` G"D5rUUC{+56|ǭI.Dʶ֓I*}>>bdFҭş^ʒO5NG|dClיo M0]}'HYY{:sԷ9ҿCѵ^f(`&@NNm8wnO} 9Q5 Ek}]遶SMF(u v^>@ ,|CggtlzWP>s>M>h(jj}6p}'8ܱe7>> !Z3й}$ onk1ȷZ:(tlE_9O!!bwE  KWV91s:Wgavfw}Ѣ2Jmx1K /E>5,^yf++r|,Yg&~G98uajg` 6J͌y+=\&̺>,۴dbOOͰxy_~X:BXT$ D d^\,3#ՁMy;ujSHv3p(;x9xAL /#b畀 NkCf\;)@^ZiX*DNV ~cc?_-:hrQFcng}zuaȉPt$mNGۡ' p/EBlY"DR]QRS=ژV%q>vN>Yʨ.*곪zEIR@ oTU3-83jXfXju`E֚]F< C10hM;*BsD@Iv5X `BF,D5c(E!6-0+NK 4"H,U6P* bϝ+K1A|>@gH!Go&oL#K_T緆+S:MaZ.{&ዃOggS@Xw\hu8"1B:MGA.Xd#d]^8pL  +MJPҊDb/(_#"$0 *IiUCOР7XLH6lkAhKc0t2M4I|H f(6YFZx ?5`v+ 4 JI6AvTe.hkuNT!h7tCɸ"֎"a 0AKrD[x2Ebչmjoߤlh,d-Gu!1i_;I6Ͷ6k4Be29Wo2*+*tLa>~a$.E.tDsUQZ%-K|X$Fl =lI9-\ L#!Zq6merju`z MY9`B<K {=2SqjA$qV-:-Qcr!Į$ 4LA#h,0b0 ^bI20ck+&Y#3w:#|[dH@(:339 `^up=1@HP 0TԦCvRF8H,'\v.7]%I"7ǬFըVUKZS"~p&uUV5n׾Tq%FܒX夊4/3b0ryR "A-o!VOcl1Z#W]j,CugZ#6dL֎Dvb'Q.Ӭ%r5i5q#CW 82{.y*Mjdb2Rr`AƨʙJaװcNs"f'F' 1ߴ4N #by1%%Եsƃ͂*8`{GlA!J$:O;\ȂoLO׏5b򳯘^8TO5@=)KQ|?wCF釦p[[NRս&waQUy&k&Oz)Ttb|>59|놙?/&;C@W\`+Y/u5koS.>߷C/@_eL;: pי򵳴\u}xQφf쎠ߧ^yտiNxx`HWu-^ Oc̘qT1ҡiN/l]\VuUf3nh~}s뺛iʚn=87f9.:W {%)ηSiVQ:ݧjfWq4%m`__f'qpt׿~f>,fWR3ys>KIqiA  A]_C5mq:B")*ޜs[TQZןOBTao*רrS(?g7&2Ǵ}}Wٿz{ۧvyʭFUUδ繃_13:vg5l0U',=}bynWi),䃺u~rηkC0_DΑl.WL&\'$IMu_='WwpɈ[t[c#]A!iô^U?^W2 {xWNl5B5kntU:8ۡc e[~SNpڞ'.kKJ=|qZgl~,&gbK2 `ڶ* 7IwͲN [װQ]yh{WכvkM3EV|eәjfUgi6 20$e;+Am%|$Bj a&4%"!9t xbω)#$1vg@F$Ebr8`#qEVIaV.i󖚟J&@-De慩a7:ӉV`1 ,u+l!6640P(K DMusʐPm-X@'|#6@ P8#2$k>,ڎd1Z`D Ԉu 1Ҩe`ٍkc*QMfPc[W![Qku9:TnC'ԿVŠ,VτtCK " Se MX ^iZ"֑b@b0J[pV-WUUzI DI7 Ֆ8{ઍ}Gi'_G$Wd8#1hM4Bv $"ljZx UEFC;@B Xz.elR&4A:Ymeih\AF aqXRmP C'Lz/څʡZw޴]L8^UR,7n̹Cђ\1..%`H㱊ƌOeb7SD"H >Hҕ{ Ų˸J$&pڭIe G^qjz*w*SK M?lS8$ywdx%~7grÛj,S6q<ެt!깫Ff? a)b9tP)5@undb@#r}nN>< 8*UATr`iwѯ71jCO޺EԖ޿nֶŷ'?5=vi_c?=<)~-99'O6N<6"o_}pi쳿7p߿}߰ϜOmpS}a)>po4O8_6_OggSw\!b<>>HA;Hm>BFB9(+ED5k=9~9׆1c Q`mj5w6i(_`4j4 }\1aNɨh |y2Q0~YTU< O=*hdTMLE'46O:>5StFA ds?|+9q~Yʊ@T:n$7_l##xkDXo{Uӯ8Y:wj3;E&b$FvWMe4O0b{tޒO:ԛx8?Ӟ?6 l ,Ӊc>8V|;7T-TVxVF|8_Χ#8=+$,`!#ҋ+jyً,L%XZ\)jf9#H,c^ɘV Pq196>Tֹ5qHlj *i[E 3pDXvPz]@^PIUncF$0R6U^Rĺu;bcDMa2RVڴhdXaWo a`)3d0ye@Vh K ;%%",ve$XP̰ZX, B aR5&^g08u_`+fZyxVSnjf7% ',pK<mG PF5M"aF!>鴠X B&gN$[ױZrJj#-Lcfىc% QOnI=;2I\{!==[\MvOr %# 3ZՁ4MEŔ/* ..K@+=1LN\`m~^qhTlUUU5t ۇfFyO'tqؿ}Sl?~91O0}>syjb_Ӈ]5 a8Cη3N6gݐo8s8{&p1F-/˧uٞʁ ʞ@]U";?_kѦ_>+ jcƈ'g} nnU.Z#s|Y yhQ= ZeS3mffb5pP%9XY gxC U؊ Amj:u 5] 0jb0Jf"q\AhZS dW;e216(1^2!/!. 90,{d$ЊC AF,큠C, 51ja$-J[bp%m"k2$!"l[Gt1=G1giWz }jZX`[ #C *_Ү$&.v_=xD$ƛ1fJjY uJCBZ@e6L!{?mh5f<^$TQaca& M,vB8=r} b+)d[78ΣP79հfA ʻT{F3CCikYIeCak%ŞD+$L{J"Č<btxod B!\k ;!d@c0RI|GO|TyvPnQ"x)-'1pM6ztT#qܶ8-# p`NpO^, 2 粏AbZZU@>ƼIUuʼn5LqPsp?UZ|]:_ ie-kH`ПCm=ChU12ƻir9Ϛ2YiQ*%F#/ނw14 & =OOCEmi8mquzeBPSejK7vIM`J;qFLcHz.\3null(>}ݕ[hf'NmsoҶ=Av7vbCB*q5yޮ0?E >=l@ޯ;P3Lg/@[oP}rI8dN$t9 5<9;{}8z ]=S}xʼ;7a>6 9فso%l~Uz7W/yRY8U_[/'jf38g~1EDP|0E?Q^6kOc}D!Z4L^,)뼚X\JR*UCR2~xlp+uҒ|{7Ozε̏F_ ?z)>uz:YAU/^?ubf*e|jDMo}ڱ| J>PNVO3}Ӂz |*{[_s}7@1;h8u9|;5i_OggS@w\;."\U=<89;AODHD2N@BPFDEO9S}fvֿ*?4A B;~ oocݱH3ŵ%\ \sӈESK5 ΎM4` G^[(!βx_jUfU*\ '- N^kԺCJam;]>H!}Uyû/λ`]=K;6~B]W$A1:͞L>@˝@jOi|DG&޵~S7Te֞{>gfCMNwگR~KS!OvQftzr1[Xl64yA?Vŗ?C7 Cl/Ԧ/rqIpKLFX/YvBa`Wo<" L,^Y6.UF/nB}o~VFU 02mZ_+oJEd. \ ,&TG*@Ex/Y^qE˓:q^|.l>[AC6Yx^e'Hh>ym$TGg .2ZS<.,|R>UWlZX#cTrj+)OU1?lh|)B:d)jv'a <`fB"1n"1 ¬R؜' 8Q7[3v߱qNݾ|bݟ}/k}Q+㙨E Iҷo]CIn[ 2vUζ-ʍd:6UF VAW؎a/tvl5TR x!PNptHH_OM="J 3+DhgеA"jiWtaژpz"W$VHVs!D<'PduHqԪQ*D)D(lx:FU4Pks>z|Lg$hKl:Mn^Mq;P12fjjE Hn:Ͳ"n*#',jDc㽤4aY@wϊ##BCRZ$jh PE2TC\B#F "쉌*Zz)on 8^+{`-7>,Ƨf+:>ַ+ᕜn4ք4vh#9[r(BlI c s(4C ޸HDbY쓇+N4I̘1\Iᰪi HVMī͙]U-9]LtYnE=W?\.2;7vwnvjuvQ{%ͼU뤠RUV 5w@?mNI|A;PtL9YDSMBCcթXDjhGKCu@IxB(D0i HH/ģ@2[ da)|BPV/$#1JhA_BY(z?іYU%4P@G]3Ll^/jiDn K^K#-'/dpҵGw]$#>QL_bLr +^7Ov[4+s$u'Kg?|/Lr$P'ʅw<&-I#g^,wedO;ggU]>t8 y'P90|Aς>A§[a9}<=7Yh#bDf'g6T°"ìk`Gv+K8\ȾmnN¹F\~_6W o gvRV9'NOQ5 Zb/|vv,2ԧ9??\6u?۸b[|7z]]2Zx- (זOg_|g_ؓgfVw]ȿ^=>Dt/+nz'>g撽χ=R{ޗjBMRz?BnT@"5^D!U +@B-?E>fQ"y j|2B" e .dҎ1WR8QUR \)FMq4c8ZcW[+}2jJn웪xrlN{XŞf1 ðҪD -"Jqk=+H.8H`2Rcң(ێS Rb4TEuy49ڰFjɘ3ـ_}c`/0$Ykq>h2IGDF-ᅛ Fm@f{ĥ2uIL@Q U0wj )=McBR.I$Z./\U|qRU1Ɵz{+IzrΜt'+ސn|l2x"2^j>E]qPCm5~vv3Ϊ W4uő~pz"ag{rx*i|r~J}mUUI垯k}fr8ӑ<s7gÜ~kvOϪ7+Gh,^N G=C17W8RS6 F`GlU^@jȼk β2I, ϏAg(]1OggSw\j$=OBD88CJ&50?MfG[GTKMA<8:A 2b#Pn0Ҭ_pl&{H1;Q̟CՕq~<1e1o 7G&ljmqB͜RG/nakI+'qG_)ܷg^O*(lmRw&@헸:k,@8\T^%eT$>R]G1fg 2׭҈N9;rs$9ט NpID _=Lf  3Ftf$ϼ1P*] FVLqA/sheSaUYu)}3d^EQ(nwM_O,y:KpLSO(iQzdUv|bkёJ 4RlotEcۈFٮd&FlE"}0! E 톒#,0MQR|"b6h+jG.ٸ6zU3 Z`?i+'jJwX7ZK|092+Q TֵN_ 稧oVM$Eˌ$  :6o;hm6 LZ`K7aj^̃x!%Xjcl L%T:AapւJ&\Tm0a0F6 {3gBwGH +1 v'$&1N$RDH$LYQs(8#Uzx&'ml0{Kj7(.ZHqWTazxٟgmpJ@Ud pA0bو&Fzmk+1T,H2'ׯAmGfg@0"|[cb]i$ ,r+@DiqJ53GEƁȍnkov(\ b /H @QYf1dP6.)+|kYJ@@b WgQ;'߃B=칪J GU3-aڷV^77_vӒ:tbVv,է^~,%pK,hWHB؀dvjh bUl@ UOL3SEuSDDcB"-f!3jP 2 pS2egB8¶6$˨8ʉ P`B!YOP`6:@W|rND2+KU:KBj׿e%mQ;aDiaaRw<V\HLoԝUBb<E1rVZU =-'Tlvb1FکXٴk^X ;g9p'oQ{톿קx#8" woM FkBX]F}v)ƅG{rdI;w"-%"Y.dU&|j/k3]o4 'ad6@uN7}@>m+'$P6 L6qG5CvSMx]ሃ'nzq޼DŽ0:۷GEEcZѨ^|NA ]dp'xn_esj-dْ{Ug(@_rlҹ3fCN\zt'Θp `x.Ϭ zVئ?#׃_`{o5яUNNGv:ӳkϞ'=Ϲprh>;fi/(}}|g.>>7ٿogCC5̯O^Wαp>}<$dpempqV-c@'Q+:Ec%>vV* ƱA@TPPQV!99G&ٯ\}QѨҞ+Ǖhj a)֙:G%%MI՗bqoFKK v#o5JHΒvv/ߟ:VҌ{t6&+0hw8< ?s(%Ps> PT_-6A2Ce|_@ZSyWM3 f\͜ n&dj[o`&[ڱ/F`e9Ejt-m燆,@FKo"c,V=}f`" VhAQujonkkҪRMUUj²Ǚ[sel?>M/^?ImJ{_Os4? m|ϓF;0E+3C p*8EkZԟ `[\-1% ;RVjfPw(v|/[Kk/\[1z2 &c∋ ~ElK%v^mV&W0t XmݏEC "@wv '?${Y3'ֶa>gJ:8/CrƿW~^,3a?ƁkU)8=*R$$f]6]Sjg:ɿ ۽̈́k)[#vV(hEd˴SWX.,"Bcϫqx>bnM;;<^g_&&WY Dٸd dArXqdW ]$l$2O'#19`=x-׺K%bcZA\**y몺׵%] aD$HؔRg^!)X9 @h-_%ilEf#¨=ٮOSQ,_*NZF+ZO ࡅVOvι #@; B7Ӆ@smauiV爂RI^cn)nV(XTd6M,Ǩhz}XrhhI]DYb'Er )['k%IՈCq4DF.5TfE"q쨋jP<, 1[8dTUCO !boa ڶZCv9)$L2 S"2U)CC 0̨e\@qgnA2(PY,i,&@M,F@i;P\Cl( .v#!82~kiE@hY2,JcK[\YJz`2Qj2&eTŌF6u*aR5+o{*P;h9fOggSw\JtU%'i?<>@;@?HA(KfEAAHDCGJGCCHD ;B 4`Ol~b")JiTVZLKP(6g+"=wzZD@FfѺ~02WǏ^2f Gh9WFU>ؑ&INOesĥN +LW15v3~w^ݏkTVY''9|7fS9|QLNN6,;'Lr3\9_{zN+/ڳkZ`~MX܇f:?[Vϝg ˜f$uu_]tfwJ})aqu?) 6| =gY.v~YN?tSoN5g'[Y>vc$(׆)PWΩ~@}>fEsڧO=]xn\6H`!bgFqk{vv-GOA(2RaXD T:0oUjOWhm0 mk{Va7]C[ncO4 @[Ndk:F97 񥷳&n@H78t^1c99&u9sVU0 'Qg]$7 KzwʦaV"*j@NX*a l91 gpd# MBqE`cnf$QL5cL)l0.%,* 0cd 7C@B9bgk̹y&E$Zf )=R;-WҵrD3.iBH jCh 22V8_K6op| X‘W!EFk 0j QU3 l]V6S]rYl]-f4HH1DE vWKB" a핱%tjY)A]f5 d,5G,B0вeY*lraDWjN\ 2%LB-p[#H 4#`cPo;8qp.ק/n[UvDf/]ˠfՀa% %ہD΢tQV" *J7Z "; g?᷍*nDNXvX{7|#Nj+k {[TC;]~ʆ J3ƽ.|nr,mjx(iĭ~CtO=ӯnyYvUqP+j.#5W{vuqN(=- MN? p8dzTNmL=9L+;KǂO‚?Y:H7X`Ӆ1/yH~ı`7踮r1aN 1ܤMӘݥft/ [vC4Ӫ*WM@$ ۇ/ן=Y|ߟOfkֶץm5iuϷ9yη z|Fﳫa}! gm=ӌ,>|ml8 9ٜ}ٿv~mN|;g?'Ϸ>Ϧ}[lW?k?\ $z >|a1aٟ:oˇ‹<Y: vȐrXd8:IJc@ P&kxmOdb`}']Nu _?;Om:ȓ|:ԏA눊}7vֻpr-=Nvbnzd6L)H=~SASsW v ;A\lBϷ<]O~QR{ j#ϳ<"#W%s֠. ۤ $f6V9W˲ߺs[2\[/]fyTfO2Ws*{r 4ZYPd@em#aooDJP(?$%UlVObj=Qqd@',Du61+ǡ1aЦB۟}1,+"AmEl^72^>mf/#CρDE0VqjuڕaeA,3݇z~2(D >?5B?5ʈfL v>wm\mimYC&<@aet-+&}[V83@l^7tVۡAZ~9$ (֔9цE]j[i ,ۑ7e% ix6%I>X‘HHm7/Ї#(/LD}UIQ54LȈn 1[;ݵ+gȍf[Q*(xj#qw7; @EUE](eVI+0;k11Zq,t jEW,tTU8FI5!vTX RHI w2-#䆥Rߟ0/=ⷠVBx7[ZcE<A" ?3K ~eA+R 16;F(gqDh Dp$&nO< =FHjH)TNX2ᷯ$bcM9W¬U>8!}!+ ۻZI7mçjW!+( ʍ:2Se\ČT7v̠r&B7mAbmzA2`,3յ4^ ilfgﺵOFV!2׽Z]aHFH+)̠O!;+wX Gb~||NfzQ*;@RiL c""ʕ"{"**G:kJA ^ⶩH$t͢|SGI"7`-bUkU_aVδ@`ǀ5Rh/:eeX4WOrN>d{wdH^jn_KSN V8T #8@]EX(0ZH5@51ӼHZ3%%۸E6 @rVF"{"#b8ZMCoXՉGrfQN Ql$ǹMhmʬꔙQX.'۔.e-[Z&ڎ%~ZN&R9f)̾lw K2`7#(t،@a(2Q+xV>$Rm" $&oԒ2 ƘժJ&,iKjU_wk۰_uZg)iu/Eo &d|i!HQx * PLϘ څVMU{,c8-;٠#ڠ% tQ 1N2tY;R|hΞ f7;e `m3jȎ=Y0$!ji5`9ޤ R=Is.X_4u1O:" MGqf.P[rﶨ 5^UN OggSDw\ &P!!dlMU@?<ˇ~Zɭ{@ǟjqPO]uߓӻrz8}|;ɹuMЖ}ëj:k7og_mv.COݻ2`lr9O%,/)6`8L_zii&bz^~M+KU ˛I?f~;{|6%35z7?8z|s_)j}o_;7w4?(<1O<`ztÁ|v6p 2 vBͫA#/J-%7~^uю*F= @|p6v~ѾͩU=kNζmboU}\ns{ge毾\a)-*s޹9'n9u;At/j_E:צ8_L|r7Jq a6̇i5^"ad{`Ma8?zw}>3dNi<C!7(?^ Qzm%!1اNC@H]I 5CEf=7@]иguqt5/% yk̢g.pUjḴEo͆Oo'ߟgD?m'^߭WTҝ{|)Z)獸Z&,A50l-𔫿u<|x| H:g}}{\jС8o R>3!|},f72YwoʤNu[_dC.4K!A Ng&jV Cl(*( N1CX/XծoزLȱq([2PþZ .OZXE%z`(6@wwGl67Gv :l23*e=J+Pt[?I?Ip4srV3$& Sk[hܘoEu;[U| "T3 \>VulN~gW)bߏۧyj9 M =oZg(? p&+ 2'I~+sWrs˜\ EՑ&Qu9u/W $>? B'+Od?֚r?RHWFA  ScFm#,Z?ɔOZ{Ɂ6.'cUbeEAES8;&zDl$p=bdb:P$a>=!Wdv]+2ttAUU%T*%* YchX$oo[R3B kvTjbMij (FЄ$pԀ cHh`cIHCEyUk&H9npxwE1ގ Ň<ρvXqi?< .F0z P>20Ox-TRD۴ΗgH6&@! 6LBј#'x ՐC[!\墒{TUMX@N#aa$fLdԠ&5,%%O02 UʠP5!>]\K x"hrT )עP`a @M^&9AXVcaF8'g#j@h+Z9t9@SKYj ' 6 ##8te tYyK ~Z 8rI0CO #=  40-Pk5T0 VNIUaE"!oTrÂ~ql[*زzZ񼢍g8izsXȚ^)cVD:om4]g .pbns'7[qotb>`>Du\s3wLo@40K}}_>iN4}o31ͧS/?8?='mlf39@vn/}6yvfm٧6?3@1q}'8Cm]۱1ʽ:G˞&9Q^Yo -tF(TqpU/~DA?ow0Ao* )?4IDD(U5yz:g~9ķv㧾^MόFւ-HE!?){95^}yi4Wmp|mWGF[32>AvGryґ(  rFy ~G_e>fplb4=)<ϋMl⍯94X/#֮/? Q$ei bJԙtt):}d&&]7[7jjhalx$hA*Xٮn3ά6 ¹H ǁMV9@x ]ֱwX"N\~/&^FZk iP;Їm^n\Nn PE"PS}kqFfSZ}zA-^39KPYL3B8ƨtGը( 2%8D,dt)9aE&f+2A˲LBj+)*(  T&eFDEMڂDH[ 1ƍL]B˂ J F!{A"B{8WX/ΛT8qPf[`4~1_L1gAC?hl'TW# +og~ov9_M7ZO$]m>GVVtd9MJe}K VY^ Ж实K»MSΓ_]Ks:OggSuw\ Q&bB>9B??OZVW?@5>@)'-7[iRZ=G??RLg3 %%ԷÍ5u J]a;O㫾Tۼ 眪]fo?.wVwDBO sHf6'K/:F9)?uogO `'ٛ8$*7ހ} X^Uqvm}8Łmw=gg ?}A9n_W+ϽwOFS?ttT߶v\?ITf|^0z0jo8xyoI?G.H?_ǘFEO4kėel˯=O>O'LL^F EE4kGվ fF1iokb?Nbn;:swY=SIsTl=s_tRoKaxp@a(Q3Pg μpͤ/~_ʹY$bNo ^71_?kKxQ{tllY" p  V 煂*MCһ]m薘j.s=zSj WbUk(^e tPA+kǔlU-d^Qz%dHsAR;0R ^TԾ-/[G-2$^ZX9刭T%sΥv]khp;hŅ B9 RLL~bO)0 a&TeİWjU(x!jyUR݄^$dJYxv&Y.1 :Wt`/ abް"|RC15|j:aL)3kn#d9ef߃vOdV 1 BFFioe*eUкv;I>+v`E^7rv^YbMV}+*-4zFZGh;Gj`~u*ӱ34ARqD6Cpq7 $)7 KNPd^YIKx)h6:+$K gVJ!c lq=P ^PB ] 7P$ eA*^m6/|£ Ysi=J&?=:r`݁4A r=CP[.5i.3# "*6ʊ1"!~톚%\yB^ZZú,ZUhA%N>IBmvN/94.Zu?V, +>Uj/(R:0!2`#C;}Sc'!-u0!@Cz*e;cb:1Ā`1 &KYY kiR^H( kRF"FP!]Fr6/&9GN6|gd%B1#NEZˊb_gp.m_6b c @z8Cepj- ~$NՀ+|ãv0>y}kɢU9W"-F'e&m3v^]p4rK! ?NX/NԒNa sIh$qT/ec:vAOD$!$R.l4"16*2KY*cBdN\7bز!h:B  @ M o T):k{9folNRpt򆎄 _tQ5Ѡ$u}]uEӛ!˿ZMK8ᓘ<VFdás3ŝT 09]8{z>OsT4oyzW=T*,{nKy ӦyU* E'OlH4U8ᖳOhN=?;N쟳>,c^ZC'H=Ys0@$ӕY0vJfY)\ilʒ-,K***#P ^N%KTRcvOAч/8#-կז/j7{ R[0*JM xmO?&d]Ηοivj> {^OX~= |C3>w0_'O>>ߨ?y ?=O7b*_O:?gH[ _sgy@!A :_Sd'Lgmȓ5 k}dqb5Lo>"e cK×نi @` { 0lƃN@E^](k|1ߏkc^U*ȴ3 К˩fb71}s]/oE^]::(g7=9m㭽׿Okq>e>ݐ __{Չ9:)0kSys }ܨ/{4$ܾ9b;ymsL} Lϵygf3[^L0O%sIeAf%@"93Pvޝg5ISg74p*Xi_:b ?x8QYu.kT,A*5-\<嫀mR%Uv`b-G^%M٭`v y?^Cؗw_ck];4lc Rqߍi8>jۆّ;)FJ{#c^7sß2oŇU"sǧp(aQ{OG:j' snW?\Ԝ9Wm'3C=dAg6jQ9,CXfRx٪aާ :$8FMC _NQ(i|Thgpx-H\JH-1WF\!jKa[<:&/< aikK3&',ȰɋzIB PD>O0?4nwFNb6ykJGrғz>X\}߳ݙ?^3d Z+m|RO}\5.O,W:'0m]CS[rqpRx\v\KA Q!=ٔ$OggSw\ z&GG;\}<@AGD5'hG?BACE=NUSJ=@>=BA|rO<"8( t` YCa{~sܱ FSݶ<[Ut0چ*6+&ODba %ebEF /UUiA4JưN:UvlƀfirE%Sv%A] K ;{2APMa4dFPU쮊Lp+#.bS˽ʳ838$zFC!sLRCI]ճ1:p:(尀qMrZʭh X$aWojV5L/`CY3H/M p$u*^W5h'bݞPN5DV$7펮LpV{'H@w44yy?f_p˚_*x2F@Zqz |OzdX8@5םl~Va$G;{)gf],2n_#qfdx`/k-:6yÅB',|Tdrh,I),+-+S~'vV$4cYb<'IG?"﷦ Z%%-rqc}m>+ r?5}z4Ft5S5 ">w9/2IۧQ;$ޞb; cr!Sν9].`b>lf:g_H $Z bk̐ 없ύ+ȱڟZ`uQ$SsӅ@EE2>!5Gdc3DA?i6ׇU{_[3b雗'JZ'?&7f42Fذ=ZO4~ ei3scf]Y,2[O|LV>JRGhdg_$٧fOoO;x2@TBA|bT`9&fƻa:ks1<Qxnb\BUGdDAdXIBn &(H*n^Yb/WAzD ` gNf}GV8Z=wa[H0MQZFP6G㡵&p?H}kFK\IQiUu "eCvdYmnJ IH }iTTa!bqM(F>J!V+a1YLڃnQw\, d@P ,o3{CPDZ32`i$N'2MTUTs*- "@kt "pIF%C,l5[hQBy8J ArZDBVox8peQzV U8أm[V 7D}Rh›O{fo[`}~G}4nۖP< -뱏%HTa 7F!L׿|8GN;5|*'e3H_7G* ߭1!?a+l ga!:6C 2s{wG;oȎ'– jD6OV)|hT,&DCi9g;YjR<'ϔ{aåNDabUf3)F(@M"PM?bO*Xϭh\rXR;} W" Q΂1Jn7m6fA9nnvbl X2nv*0EVہ&BOULɷ UWy tnNkqpvs-Ήp v @WxKF #2a4\rXDbX#54^`JNf{dp@"X9?巵= tn*xa1tMA ht" #mEE̦WĕU4C"#F&|ZR3Uw9yqHDFCqdP69:hZڸZ0T 1.nU U.XgAo+16 GZQL4_+u5̴YMt v_$vЄ8FQ3◜s 9mzaۣ6.( kF&!ā$#I7,tТ7y >mQc6TO-wte>mt7NknъG> ^~ouφ3tʁ3/"w.~{¿wk8d%Pp/Վu*7+4 EOiod>{O=9goNWN|O} ػ@@COUp& j2%A֟zFǾ}t[qdC ۭ;ڗ WLl),=.(ҪQ,) bg1oӟ@J> X9g w>}Tuf9}BGN{QGi1*'1 3>0?=~ ź15q`46 P8ZR`]{uw6d.={2+;dPGll \Y2a>5!A;.7T22Kc֗(#;zY .`ߩvmp(wvsBhpF<0lAl, $* pC.䩳Z#sVW.jT4뙭fώr2z %le.}QD"[d_l^첼d* JCSwO=ܭjc\k%;ַYt bEI.$)FLWƎӁQS "`!bI`Ē7ۄP  "pD+t`L F3 nu3=e:l,x v6-`Ye/f 0] @fDS:C턯}>ޏ~B7(b@;%=\y+°o/OggSw\  REFDBE`GV *vkŮӃ7lm;d|%A;5 ˆp$`^4LѱO9DD ƦV2W .d6}0{!'I`avk`QlRq(Mˎ!DCKC"}\bO@d)bw&HtX.X!J+lP:Ke=KBattMErɧi$(r"-AG6n+iԙ@B(5&eF{SnL]aRɑ֫%I$nZ0("hD!۳u v߫&VkE*:4f ede JbuRdÀ8'`*'CVQOq9 B]d.%&-G݄x$0BRNNjEFB Fn^uA!}~v6:,;}5e,I+\Bk1!{lˢe56amB.SV3PQgH$;iA +q88Ś}UCcTz EtqPa 8vi4zըVa?>9:u:cwT .CM/~XAbH/"t#(X,0k-9"GBn٬ Ն ^iHOL+ ĤWLjt"˚5HQ\Y.z찉MZWD< gnaHדp neMd~O^78'4ӾRSSj.%]q-Bړ3hzA( v뒶([g1*O'Gvjt5P. o,c͋qkaitQ+O1\^<¼2cR+"?_<Ы'HdYbM7='6f>J;QެMcwQjdA㫫ޮت*TVU36[{rlCpv׫ ^aL#[=/88GɳQS<4O@>򺆭]gyz~8\foo_޷&*s2k8߾O u6wΞjNL|}ni|?4ONl> ;p _~g5_/n}m 8ULL8>Ⲛo(cXټ)Ԃ5ujXvil"@[[t0QGpiOYswzCE٢A?/;2-? =c}r4i:Nܹdm޼GRy:^$W[d&+V Y+Sbf5d|7rbr&0yp Tb%*k]R)îİ k7БIky0 [k'xɖ-z"UK)lj4RaB/xG*M2DK=fud`88/>n`ŲRUڨeH$.RM2I<%|L̈ y0TF -)1aUU:/2jH&jiMmWH5,(*~Dž52{v#?s \Hq c&$$L˰Ҫ0鞋5r'&kϵRTY**cEր H>Ca@ mbve3Ra "P 5&Q,z ^nlS"AqWcK-$!PIR r֪c]Ϡylvvgb4RsppnglʤuA^ĵ#ȆaXao.^톕$WđD^z寭@"I M$#"c8[ޅNAQ4 u=Os%]=y0YF(Yllȶ:0PYQN$eSW ,5jk RZBQP0&!Bh0M5ޟ EMQcY36A8G0&`GbZ'kn l|b.ʄk4 {eg\jgfZEztxY` ,!bv:"~bIL3]J)H*0[J$acT i X%^j&5-b"R` * V<#Rhd;+X$P"=Ba V`Ak Xa8L >+ F]m`' a5e-XKH B a!r鍦m[ ur=6PdLkt:M,RaTGJɚj!8qd9T%4Ra""6C $r(b800Vq"Q\?V.DŽ}F 詪jB(5st,J%e Z6J{a{ח/Y'Gò[/&T"޹%'TLM?xnf*sk۲,W8EXł\\$즓Z'7Ҳ&Aq **ax`I+Gf74ÿ4V,_N2^r;ٽ +nO=AO hLVZvClX"c@yJ煅X{zznfe0 G\8o.| y  ;FlN+'>yg7&y+|ZW35c/qSՀGQsZj۪*YU)j j0m!d^'7ݛvt  }u(C *f᙮<~132ףM7YLT}>;ot|Pg7|; s=׆S;޿o$Pݛs97 ouv{8h~ݱYIs?Tt3)b-M;g)E#Y4d6hqq_45(  ]P1,:fEL^mW,+znYWgzO;t9*UUcGډ`>C~qn>+i>?O_e}߿b}o7{:@κ~;Y'a3L{Og7HlyYH$ӎe2ǙBP[n圗ӵŲ缝V U5s`4g8lP4_{M)8Tm7ef%f۲Dt,6-hLA= Cf@BPCJ;AD=+Cm;A@>>p+<_ɌpHv6lyݛl+ b@&4PLQPU^ u~i~Rd ȐŃ#{<dž"Rbźf~ 9Kn%z.b]2UH/'z~gܼ?q. FbF:S^SddUHqIh5睯ã׳}y[dsִXð$Tu*0w63d(lk7֏oƹgqÊ * I1=s6MG˘bgfBb RmƓa{r!, $xK~71o>.CoF2HZ(G܁$DL l"aXgQ"05Ng"ĹJ\{09+`S3DѾNhhDbmj(z ;^Q$X0J7 =--SU J9Ι'JK2k8<+/?O^܋UMvRZyB!> 9np4N~10ANA fOmN/c)+eeAi[>*" ^P!t! | @6`B0@}Ȳ s ^ KȲrϿG6q "ژݲŭYEZ:8r?V>ķ'Bp3N<$0׊2Fj%X-[DPA3!|XPd!uxc1ޤrpYP1:HR_QROq 06Fy94n稫KQY~L/a \Z -Vzf6Lp9O9%\Se-fZ(Xb?;7od7vc:T!|%P_exYwȺ]iRƄh}t.XRzV,2f7I! $}X⹩$p>;rF\Hh@z `ݫz6[R4Pd^OF_<5 gD,@:뛾Ag]Is(>ZR5ۄ! FDhZ8q?M*2*,äm^fD㘣5VzF誩nNKsÕ{/3j׮a*)DDnÖӴgN4gwz\ n -P0IJe) \D;*#m%H,& J ]Kױ`Y@ $,&n@p!Q #||pC8\km}{7o1!Cy.μ\.Ե.&u̫Ak=zۖ;hzKꨶ2*W5vcO-:ʳz.nTk╧ I[ąa{ꒁHc=ozz_N}f6̏]|+7ο7?6?(yzӹci 6|WY9gͦ8{3?O<}FN*?wqpa8{>'Lm9w怉:=Og2kCdzSףA{wͽ|s~ӿS}s`5MEOLl1ϿHULk^f\S9^uS9[ѫz=( +N >X|YY9q9],+W3CWO|av?8 AdS-Jg,9+1WYQL,N}zW+O|c (v;FV ^_ߞ:STWLNxBčgBauk+EgKM&Lc~ _5򼞏Ov1O}Kk,gKj)blCa!w!_M av[m@GVt'# Mu!T Dh`@}C0j OggSMw\QKoG8CCDL:`CCHDBTVl~:GzzZb,N(C̛X.! 8FձPU!_Ji\B:H" 㢶+D>X]TV=jd9ki,}jH%Ti4ڏ>?mt::&<NXmi{$=I I/pG`"C* 7svS@4^E@'")ݡB+Rw^($aGJzUL. "F2:6`ˆa],Q|&)Xk&+Rׅ2T\ S5fi42^=yn۔3*mFP {eنW^8Ps"KBG~fՀ5,?fI)‘׷Zq$agYЏ*NVL PD5:]u 2H2WZggzoT.^iί2J$Nɡ0Xm5 ahi2GV \8T,= r"-OLAƨ~bC>"C57ו^[ N+1aSMF!@F4rϹ4|0-c2@7kd^W!a.qRt"SaFqd%$R=L0cf2?lVnZvշ^U0=Yd8a)BL XxռE~v@OEcɒM +6PJƀqDII` G"kiY<z֘$Uj|UQ:fb7Ƿ5N2~pyMIs3=u[c׌y̖cIWODyUĎ%nnu<5aK҂{ {gЩaHU92L-x `n 4Q2-#.d^Ra#Y&07 k[igx/UTRLJ(RetXU|Lz%)A?oQ& 1Ww/-?*E2{',-]%ljLZwyq {d<;~ Ev >S?l9;:ߔj=v&YU=lmms-1.1.3/data/samples/bassloopes/techno_synth02.ogg000066400000000000000000002324311247673406200226000ustar00rootroot00000000000000OggSx\RvorbisDOggSx\^-vorbisXiph.Org libVorbis I 20020717vorbis)BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4s҆.ŗ]Sώs |mS{a/ ?,?wĝymnT%T߲NɯO.Dt='NIgډC[^P= QДh{yq<)o˰6LCL5kd~4$FH$ăcuDL|cV4m **Kd,KOʒa^]a@EŎg; EATv ndQP1$-nZ =a׻("B_)`)C r/D b 0`0BÖAMm+`CbČ . 70fo-%(Y`0,xlM}Mm7Nx @1د GZR ]#an9Km݈F2.@I;}n b%&>'XY}W\ ޲}0ۃ!LQ-@ ,=ͭK m~;ҫr\7K>D63OEulwTF_ך(j`3u߸V6=@r'-j`Gt@0հ)*{4ER.*)0>P٫ +EEQ!c zu A+ @ C0҇|j@7lI28c n؉(K4Qk@0DňXR:C uI RMJl?2yj]Wyi1˗@@ywP r,DZ9ӏ50@qh4)zT P 1j$txΣI}n*y{sn<a @֞tyk/q-ADϿϵ2 `ô7KaJY/_kh|Ï"M'ltNȿ{ P5ts~> j@y*W"(RDLyTUPUH/*(:Tk1WX 8*Q@8A $ Aա @5B9: Z VfU3 C< dE}xh~O Ɇ @ 9<> E@8>Ȑ˭PgH\J)yh@F$' S?6G;>0M@j[{!sĮ&M^ '6E=e# P矗  =7EZgG+G~ιb\bQCL}Z" X*>~8aai z *zQ|hxn6eaC`bj@v$@"bFi 58Bвd9F[(ǐ ` +VV(ji!~ +D4}LoZJ,b EVmF_䷅} 4~O{ rXFdz5JK99IЗ YՋn!EDg /|Er}W;Hu.i@.R3t,50 ʵNV㜣QzҸjpE/ͻ'A󽱵o)4/3-i>^8PqF_ 0NF bY0Mo=j4n7 mT_SaHnrA0_V yvlY -GU}}>W )Ba;Wr@wa~[ l4C0&@W^9w\JD I b"iW yW|o^Gg? =DkWQt?= }5Nޟx< CGTMޮ7x| }IO5v<:mUᴤ=B셴s?kt+W;#,h8 hOJ|G~_$&Jm~]v۰LW<vW,ۓSS W4՘yJJ=k5o>$Clm`Z|7/8koff9pWy`o߿$Lק9]4ɳOfyt1[D^1#fSǵuGZ1}~gמDګϮ?z='ϣNf'fHId%Fd3cïO5|ڇ}?E90~=R]هr..,93TR$@99߾v`Qk@8߾975}690glذo7>'H ۗ+ JrKUM7\3~ƺR♥m @ UQly¼$=lu9A!Pd ; ).s;kYX# 22@1k3 Y\ɜ8ipH2ai:- B7ӞvDŪ: \DqO<fA>Ov+5P&Y5Z׽ysJZ=@Cf6a{wZ{ص[̦:g'"uU2u̪>XamW9tL:3c8ve(-Y1kW g,Y"&퇮T,-K~#[$〧~#e@<?Ic*uniV|~RsӽTYio(PLiF_  gIUěqlqJI9Zlչ&FF`#?_M{E#齢 gЭp$z C{`]<|s'2ƱʹV굳b+V0"Fg))ӈ=y&@|#{ڈT)]Cm%$e[HCeYr"CŐ=.,O'40e'{"xWd~ItnΈm]l1!t)#z^Dq6d*CZFNXϛ͟g OggSGx\'}=NIF>>GE@9=9;=?t'Bl9r2mcOh5 LX=-tb~7h[L>G,RP;y8;3um~ȸ-i ϧ#q/YB)h{?j,B?i4\`߬^7z&e*YNśvfӶe9}8Q|55QKCK5R LZX`oZ iY=Y&km*m,uim0M v 분.I>c;j5ڸh:GoרI% o'NbԎ!t"i ܀X1.bxQw=\{w葽,~qdnN5}v(a|$"9{o\q[9{:2E#7;B~\r .B-pْknz e3_\>}in Sx͓]i =&L51HP۹ebxwD. 5<xb1M@b׃@&Z*N}݁ωQĽ @c>Xв,=,L7 VĽg 2M3jقd9eAF uJ,hQa$ 0zAT{0EE+ l%MB EbHG1N?̓=~{pS M"^n!*ai㲝J d;KoOuǹCs̉ ']ک_Bɋk?qgX <0sr|ig.>m\|9N;SDr~v5=^ o^P^\%w_~ׯorOu^rcFX1+78=s=>=y/8I4޿o4?N(gu}v޽om'!7g߾qMj`%IT6#f?!(C+~)oczNpQD55PD '^- znz"Wk}54ih>3p+]j L `5nA; !G:Ni E\wl6`.`+d+tmvFQX\{]+']!˓ |3@ R|hCۑuv-:},f*`0~9/7F?P[܂0- H[P^aՈc]  1cX-!&FR%(*K* 4zXaUVZ 2*VZ^Ѭ勛L~oGŃuoq@f`qjNhJ-O:*Mw戆l/)~0 P%")%dU{OYFmvѧ,X+(`"iw97+ELz2c^ĭ\`ƋcoAtOKNF,[ 2 X@o$@ߢ"4iz@ jl6Bcf6@iCWc]Q Y B1c0kxvH$IDNO{H&L5<~#us?Wuk S%afp1IIJ=gtRfn޶Z2i^K÷ff[t*G)dX(|NkyFcT{WGz|7`ƻmt $ {- ІЊ4- oVZ&jc*MؙErC!&p8H1^YPHqW`L@,ɶVh 3X!z-pUS,fym'ZjX.pge 5=S ݏ䩾Fذ:XC?=!ܥǹos=9xlf IGz4&f5qN}~iy^!lR(Bv%Gכ˾T(J9x; S@PQk+_V-\ɽ>P /X5[ܿn"y1f9DxbNż>'sf# v 0J"u>ǭf& @?ߙ@DG-V `aDUPDl+F@+pSk5 0 "-E|N\e-Xf!;1@ϑ -H4$&@LC ,1 Պ-S^fhFꗝm{vI~vO(k=}{c›)G2wo x^@r( \D8kfśGy`Տ`tR\>{T߳z~PA Ul?:xIP1o< /F?4#+O|8GZ%ve,L粙A?Op#`,]ߨ1a׺_SIx pϑj^;hwt;Bx][n:JB*JP@*=ҮjZ;ϕ9;0?g-dqUȓC ;lwNn&:1Tw؋d7f|t?Os}SyLC_߾\q`z{>s6@_? /io[  ?߿}}߿׷|vϷ׾:\9ηc@a _}Ll#٫cg? __&(J' VpOTQP@1|b~j((` lOQ8FEujI x~0l|>;8 Ed#ׁL>NNTV{;8߾iY iL_ T=7 b qz3}fa Yl|1{yη1$:eL u/ tx/@MȿHa;_>ZW].9{NGt\97ٶAܔ mA R%iγ84̪W$;\_x4tuΟ5&J!n>vLcxW \ ipNlyþcgBoEEU4 |JEiY_Tw[Ynxy% 8Tz'鋯!֭>-n6lR2d2W",6x`*lH9 ԢM;"Mh3Mlq9 #DD3&јn#N,uzm?t,8(-#7h-"Q4.O f R kkvAtCY#1qiDȅǻ~^yecbRz#ZHd:74rQ9gQUUbP@0Dػ÷xڴ&rB$?d^` HT+j bg MoȭsqG2߮` p~9kt;6`}LfzF@uW=`K@{@T,ny|k&FWX42&dg6 P|$5ֺ{*@/z' W(\.zf嵞˿ٵ!rҪC Kh9fssp Gr;Do-2**QJtS\6։wiVędZߔ <$ҹ~I3 *yJEP@`ۼڛ ww0㿨9 q6`9 WUd BQpZr1 w-`9 KHϒQρ,TWx!,YqHy$6 H )@T^.VnW$[JLHO{ ← K58ĝ{׀6* y}5X8}s P[;n2?_3ˇ*@> P: l_PP@[;r=ݦq w @d'%P3}Rϟ\4l.|('ߛ pwB PvMw>B# WeA-߹1``ଫx*1Mo=Y(`=+YbX04+VC@ti8jޔmze [@e@L˔KFz@!KUFb%5 (~Vpl鎂ol,5nަ ` w EM+@&bb,Pb^.VٲY"O? N^[ouq7 %9|XoY;{2%8R0{jvq' \ @[9xvI@K=qNTm %\?gf.' ¢shYw|[PuT,ﶱDr\ F$q\\)z nnO7bRߨRF#x> 1J)#Բ#rY1*/t׃z_e%KB` n?˛,㴦~w`\h ˄ƣSE:߷ bR?d \ڵomB!a2]>@h/;76^L͏~"8Wq8baHzigx9I$q'c֤ `>x|*YGB 7qcY;v1JV'(N @l(r܃KF_G\mCAZ [Y0^w]PzlOmC?:Er^'` w"׮˚/tzg5x# ?,PypͽFS>7EMu??0ȹWL..Rͽ6,n.?=o77*_󿏚EStmŧKjWcY1Vqa}abeUT<?,c ,L)ȑBDІyCvD0 Cd0XPWjTr*[&Q;K/~znokV7< P*q\ 8Vu3 'د|WisL87fr}(>䟿 HƗR`zxӜ]yNmfNNZ8|@Cdzzi`wO_PQkEΒ#ڽk%*:c(?&jĩgmvb~Z&G/^rz łfNYP\E-6@}׋~͇KSPUPkpO\44p@7lSߏ[nj["rQU5E*.@~g tT#kUSD?QTyU7Q0ږO] o!!O7MUoOggSx\Qd=ASHM  \4zfE"]Ibv%V}{>z.8?UUKg`/oűfoft8Æ ི{!^/u8ǯOv9w[kj/7B͌q­ B)fO Ji>%OsGx߃{ ""_aײo}Ύ3`rOP>>nn\读64^봧 ۤӘ`]˘z?**OȽ{?ug>|K/MFBU;*߾y !/P4TEUUv.!;s*@D۾:4DxL/Z3%6q& <3. \&vm˲ pC$7p  ?z=qz:rߐOJG,7fY!oUh=zXZ"ɲ,7Cȇ"?Ë'MFpxމz^WL,Iַ> ׊M 4"- I?_ma;8֣74߼:?q={uNtZϤ B .д>#VlN.ZOe"Z !>sfOXiĩ^uRFNqZQ9憎jxb#Y3N}VaiDV?-$oɉLVJ$ΧR}osCfø KO4Q;5\6Zm1i"(R(@0Hk6GvIN4k<~||x%糕ALtYzCW%p#,.f.1mzj-c}'t 1Ӡ @e|{Lkvv /5ͧri'/w(/n]-_2Т}@薯m(r-hhTs_RGE z:$"AR7vx[?7+LamuӃ<}vrN4ǣ+ (]||Q@MG_ ֦ L x-+= "2TQQS,a1O dAPCZ6Z Ę^  UR1CHbAcu``@1%"Fm)A.+ "d4P0m[! u,}Ł7LϾ<p|nBu'L=k7Q8 }OػKk dbd1sWo~X?a<9y픓xo|zx/w a9*Ċs|r~o%_~4w_i/'[ͮv c")B鏢ֆ)o'Xyn(d_\YqU{ ~ 5Sa4lQ--Psm,U`bʗ$ Of@oowsAT~(ۆV5R+,Lj ,=C(3=yّ n"B@!9R@lu#a5\B2!7m?<@](x4Ows8ix@skmYcxhZnQP%*~t~/DZ{1Y] 95\7@ŕ` 4{B@zǝO# rJC4WhS_rStύ2S @Sa91tNӧ8U)@epy1`U_y=ׇԼ{AWW8c佾vU@)@' !?KH+oDr$"qc `QPPw\ TDh-~| <Dj#SToĴU?=(6䅎"GАcӴWRw{ Whaai=݅q$WC~+LuP{,QWdeMn@`^t=ݩSdחx@_Xy6ۛ)6p;ѴXM7 ,rǾǑ'k|yh~|>hQ_7m|6|!xَ"d_ @OVs~\7z~V7 5#3e¼8OiD#[} mj5A~ܣX:&c:VcLIk?4]?cr:?[)E$`{Si )%nmmc2Xcv ~WFڃKGgT}Oҭ# @E<7umaZ=VQP]r#`bX #00}E;"o=| P)aMZ@@hno61̟W~PGXz%tB F?,BV1 H~O<ٺ%N'}[~^}Yua L+py< j1DSQ[߀~r+0H;Mj< Hh?e4E@Ge]$ȁݴ #x*?YB0@s|a)BOO" [*i):8~X^q8!܃vgǰh*Ž=X_}}!໮[tȚ{ QQ:)w 4|-Cη?2@oiċ]،[:h#L+f8)9[ڕEێ^=>GBPջԿBZ >_k8/VoyvWL1u>}he[~>T̤E`wݵlzOZģwO@PW')zX@TeYe؀7Ȓ3o槦\H~c U GM)*b>,3=N$ -2e'YaSwZ2_Y+yx_ O^m{=@X~`}@{Vy ^qptòPk~9r;XLj˧M k~nS7 Ld7gz3(.tah& jص-d:l4nT2@֬(y/A4E`HIQD%OggS@x\l (@:>=LQWPEE;:FJBBVPQ>G?ӗ\$]2kG<% Zi%e(û~g`9L>矾)`DwGohgi`ozi.?-* U m~ħ!˒/( L}Wǂʚ{ AT]ETE1O !.߹>m C>ŧϧ>`~k"B,2eTS _;p f62#nJ玟/wu"Nȥbs*} Ȍ|IVnll)z~?>u]{{_r~6v.A2`ܴ&ж*|R #C~+;3!ƣTz71밥pXWʬ\hfT$\pޗ=e9ůrL@?faFFI5 EP*G, eǟ]!Q\?{}+ &X) $>&ft"ѵJB`]nWeޑnԭnu|>|EƄ~xWE)XeХ,>IL[n=8 am9ۙ]| 6>IZh* ע 6zYͦZX%ܡ,6Ӿe~u $gYgYd gs4*:#n[;" SV@VӔTz9359mt`@gDmJ5(榃fWzscט-z=ݜ9zuhoi߹>a [X.yfLqNQz`pZj5_1CnN4UC"IkY P <9+ >~]|7̨z7Zwgg㞟T-C1 $b,:O wu3Cb5}Ovg*Mֽ񠏞 \`AO}3sy{C~=DCcPγY?2G@$&&wt~d9,e5(:p+<[ЛF"4YX1y~w-<;GE IfK~MHe#H " LF7|V"f忏lf8Fp=s/.lhWP&kP/KEe1vQ`S!@ah;N ,im'!;\C]i Hb8 ޫ!li9ФjQsu܉7>_6[f[ҹY6aY,_uJ,A+AoCWƈ8,1#[ D,U\ R t jm*ɹ0Nf[69x1kt l68CU\`N fv|p!ȡ¾ZVD*Z[BXs]FUlWuprgf[p)A8W-gj> 51(}fѐqE"Eť]늃E#A3b[ҹ^eҺY{E0E ń4ǗVPǝR#Lս 6+`븑amD-zI{m\hcKogkH#}A6B{ޮlYG5 ɠB_vJ4*|~ew+Q-~RޫTxFu]ӵa66_M5sHUc9d(eeML ŗQq?kN]1hv{3]pvףkH40 T:]߿ D8 8ۋD0PmKrݸ,P]{ZE%y*MA7od EG^2qm#Y oF#`^PH>`~[ wao`9ź=P>Ѡ'Xhy,fd5/1[eI#e5/ _5^{=jx${G™jT{Րjk9tącmvmgݟ+v'ߗevBlҝ/O:~yZVUP[@DL"UTW/E Q0ޏ7zB4S줷y}>8s!3f:i }6p`z?>}e`П'37P[??hfU4@KN=` """j( 旫($dbƔ?#|?E1T`V(gVxLZ%ׄXW疍BMOy䑇~1{_? w##x'@s p{ 8 8l~ gOCZg~wE<}Se<[_JA:99&K/˭RmCRW9w Üa>l%x ;Ei˄%t/[q@0Zy1.""j-(*~ RBb'^K sWg&vpw!,,ϻݶr+@_].>6cY y2_PK~4)u=ȞdVȷXPny\27=|FPOL@[ҒLZ?G~6^Go!a]!r^nzKV7Ųl@t.(مbOy{iNJ;剳9IeaᲵVQo NN@Dp Og ޼@R0 cg'uQ<"pmE[ώBuyLR7 XHҶu~]vL9旽Z  S+[rCpHSt*4q^ 7)'*R/J gCKiqQhnWְJ[AsˑZ'JOر0ISכ6hzr̲u.\'НoγC.5Bnw،}n͚"Uf]-wwTxؼƛi7c)m%Ɋ# FUDD",5L*Di= =h٢||^\'WOߧ|H;en)0%;FPQ@&V \)jc |b( l1UKS QTYuTO8D Z[ 4p:jjA[ %X@C@B>QSTFKCNO>@>??=?SQO [;So n*%Ū6-( ^?7M2PZ ?x4<)hcu`5(Zw5nvW ,sUwgxOpOS0#sq̶E.Lsﷷrx&@e|C>ȑ⬚*6>/ےKOǕC\Q6܍xBw QxQ^]]Be]mBԮDţ?Dhd1r`џ<3s {_Ө׊w`,?W%BU 9(GSTEL1L9-vfap{ݨP^-7Ha:d^X7q~0f;~ xk*kE7w <[Ա*cqyfnu/9Z k Pr'#:m3vw=9b;d_<N/ro~}о ]\nGw%6LCtө{% Q[_ws\{|8o|Udcӧ/``%8_~p\\(*||z3tpv&?\[hCx7ai{'41A~fW"d?VcADU]54MU. bʓq뷽KM1/_m[?>h@ae<& ->MQ|CQS_3&*" $*ˀ*|)3ՃZ;cԓLw=\|P`1*-sTqyN\>%r޿r~C}a)P5OϦ.KVa$"µ*O*P:Ypk;.vG]:ܧivtrZ^-k 7]7eɳC ;gE~yo/9}^]Y H2Ozh_~iV gŜg>|PsNl7q3UYYo7=R A:*)~uWړ|r];\m Z8;C+gxzhy1hSuxs2-f?_g:/_}3I[; O؎B\}GJf9?3qpm9gR?y¿N+7Лv5Qe6a4 9l&Or耥?meʼMI['{j51rieK$11a(%<cPt!p01Bt7w[smՎPvlf d9 <*V\$@ [b{,Dv {Ua|WK[NEMNc٭Vhf/zjsMӲtZdJK룠ن<<&[NkuNGUױA"`Z .Z\6QY2I:.&zlw"$:"m=."Jc H%$ڄ ʟ+5L?H^$ka-1&t 9 X檹*=b9CIsn'^K)Ild?OL5h;P֨T1W=d2C@Aj7Ej&# 3NGL@ xթe\\/U!Ôz$̕ ay|()NH =qsXE3]h6lUB6I$]bHZL)bTQ;G(* m=V7Av2"rP@1]@A@VYEǂ0~LPh"BB+B_ئQ`XХcqa!80&@ ,($0 (DCV.Fe}EMɛԉNp eUy@$@s{I癬Am@ǚ Xq}.v]8+稛9;.b/rUChl;7zea>{I{w[27|WUmW9@zWQ[=Z4.Ӌ3<]8u{Mٞ%AtLyU@C\MKj  qT$In0 o$U;$E6=.idz p21dp4pSK1-Rgb7nAŽ"ٵ.(o4:pH~:#]߼ $s \@ {!XIb敏vOy0\ 0wo7l?yHIḗq(E]ڳ7]VR6m[jtZ,PB(mGN`^qu^+4 7Ë8&PnO<CF# q>kI3RucI꼦ܧ06P.*0f$0vӅ%^g܇xL0M:M-׮y#|Jl湝G$bg^Ws u*9@87'?O:'ONa_r` EBv'cAQvn7IKNL5iFi4`wP'G|eG~ur+)bAbUIʸWbT iQζW>wד#z5JAb)-떻2ȁtv6FvE%gei»}l>TO/'o\x, zCaYm[ߛEw&P>|aOo$Bw_B]۪%>4[L*B-P`i5ubO|%E5HcuNiѦxcgarLndynQ oM"bϒ;@P ;UPvg@VSc ⷃsȫEvc4sd2= Ͽ"i"pd9lAI.be둞ٔ&y3]QFEV_^Uf Y %/f= q`͉"rc3=1K`@/bO xK<9;BKpϮﺒK.Dm Bƛ;; RҍaW_zuJ=~ߜ+UM9/ۏ @[C|rQ{p"߬m+  ,SۄjgStTvhӑ;=Oϋ_8?JS4$ G\/i ۓEA:<({*f >*"{U4L5T!*ЋgP"_|,0Bh  fPw (K5@w-%@;zہ$ (*G#)pٱOggS@x\ ޜSVOVTIEBOQ)AmGFe+/[{Leb:[}/o>^pqDoo Z pcn(}J9}U MOkBv]g/3v݂UT};_<%+omF±BN^< dM=2}H+Nj:q6W]LU0md=Y*MW'n|v]ᬩͥs C.^- D/=I\ zrCVz\/'?yiZo$>,jᆊ*ʻ|% ,*YPU5M'آ("v B PQwQRii`g{QTo@OF )pD4EETLQC( Ѯ*jEg{v3iؽ>5F:`;vOhG|zwz{Ly1!4Mg&- {]>Lc -*Ɠa|ߟ<įT̮`kqz߸6MF_]{<$[~ޟǯ,A@ }1vĮC #@EC1/jK_>omM6?`#,`c,,L'n5,7VC"Q=4֔6Z>SO^_gO6\*XcKGr[UkyNifp/< g53KHM5S_L2N>|KƳ|]s5~\qHWUd`Nx>3vD/*l |seȄLY{A2!;Qk[rGy_{h*xau; Nw';߿8׋mgYf.@6.RwO 30IeN<\1=V[gj`g( nx@Mӭ03TUb} \tW}ICBη}CC-`Q~6`;˹zIBvޕNE*]׷6Zr!V"1Q>YXya?RPUPL: tBz$f\P͆m3|,O~*u]䨂ψ&*)/S4ہbV˥khr֏{»˯;?'_?S߉w$oՅoH*|US($IKQzW5:q&GfVvFCnNctZO2 !:'VKtv 6`ұYPhGDV.&*& [%+rCA Z)V,rbC/+&p%8D&,h &^OF+)cDa _y$iBӏ/kL`Vm s8[{=6pw>r97Su+wz~Ӄ>~ۅsfCahI?Y%ʱfd^߫DEs܍QdGaP^[p1rι\f<5bj[<& J]A }\sY3L nip]C{O1)8KE"}:j@ DHBeK2X0eZLQ@ATL1UBEEeI`909$vh 8GB!0ѨC  )Z]b =@D; 0j K ;Hzc[HVb>uW:Z%(œIҘbaY ;('I.Q|>MQum"&}O8zkqҌ7[C,PW 7T-LŒűN@qޅn x/7N 4U+j_>rMS%Zֲk^>.>98P%&@C3d?W.w/͋'z%w(.W Х|bj5klΞZ-@ӽ 1iB'! F>u3ȵVɜm!'suz~h :>]bH.NQxqWU Ozte(UkǾ<zqQ6jKFo,4ME5.+dIw ba[Ea(PВ@EEl%IDۨBd-20A +Ĭ4Cˆ[Y SHFx}$j |bS"I9#g+vm?>nWӠ8s:.:CWj#W?LeXdl tnHAc&Tt/^WZu_Tσ+F$a_T[&So-f7Y1?OgIuZqvp/D#i|-]dZA5oy ( }).%G?6̑d)/ҥ6a_0O#_Vp4õ ,X_Ա,cti_sϩluw, |@T4q2xJ/ƫE\ӟ@:I Z=%\ͣJCz3̕C;y/@) VSRY52y(o뼯,68љ}wTK.r][Ƥgݛ$LuuMɓKMAj:bpRe,՞G3PجM%&`'^~6@1 cQTD ]nZ ")2Zt{F--$*X⬁[&{s40}Ɍj<PZ7OggS@x\ { ir~)qq9>C-A'ؾ@C?p~ {S`[nMp7oNYVcp]ThXav[եSg/qnb'Ox6?g^f{!0:A|@wo zg_=,(2^߸x 騣to>;=;3MWD zj\ޫ&Ǧ(Ԗ?,2ڽR({9j4 09{ /@>h( {!"* x ο⇍?\RnDD_Kj- cF asX 0B2bHoSePT3r0!d1-%G,pJ!2~).{}QWmm2a kl,"ӔJ 0y*x+ _$O8x-7(y7W pn i@˾dU)z# ߨPp_uoRB(C&ڒAg[;<9㯭|EJB&{[N>UE.|o 1 )x ǽ71j53m3^Ԃm<EbI3N7(Kx!y^^EA2Q{ zF9X@F$d*_)Dahn34'5-H 0ydH4D|F+5PlBHxRi@TD *P/B^.RJX,xu, ︉?6O/ oϏl@ <p>'w}UƷp Fš^d=7 ضư/csPUnSO do4w |P38͂ULj@}V=y[Jxyow_VEnvǿNNzJ!Ei.ToՓFsZAny}%J{]t<zw?' /FP $ f @vXb"!"jSP)Fl@y׶CKK ᭡eX[Av~Q(@夦qEjU ȀACXaJ@rx~s3 HQ@M Q& Mz8VgǤ^J*eCz4$Ov_ALLrHܼnW,$I _}ܨ88VnUz{Zvy@/lSgߧTTO.;g6 /Xws:O8=:kxlwMed髑oWwx >˷_tIǺ*XAKV~|s(zMuKD\@PH{`HZ|Hl\]d@n6-,+ "bl]Zm "k.h)!X^R|nlk,kLUY%{ޟ з݂) T @Fq2 *a9@S@A6*v^U$-ymb(%0g!VZPҎxT@uv1KUUtPDU1."BweX 5V`*?_ ,DhL @vWa`Q> 6H^ObZmPTli^JilŊ%pR%XP#VBL$du,Ok[ d?,1dp=/3t8] 'in{X٣{ b+)>/4J6 9WDX>/ ̼,njh;!YJd0 }ۡ-U$He6neK:%2y=zٌMFouYafSh4!uBϒf+N8 n^o oaHP`(X$3=ZL]f(vV*),&6/=@dc{NvS_xh-H5mᅘ^A4 [ Ddi,x yu}??N/ _G3v [8F$XgOLF2VŝLTHBgC$"@ڈOqF \_t:q6mΜ\r;3}saq,.=uP&DÈ*XP æ6T,PvXn\U"qn)$d H0`^U\yW312sц;{~s'kTNs.0h8?k>{5R_g7`,㆛!|~ $̎ 8|tZ=`/?o#8x}+GN"IΞ?_*A@u"K!ȉ oz7x/tH06y;U,Jl=fsL@NU+Ze hb i-g51  LIv )LHR+.✴$^//-Fq3O~/#yi;獾0'_/~e/@؏DE# :c×\%aO](2<ld@Oa=i 9d@/><]X'Oo9-Ӿ3Ha_~a1Ug׉Mm$;_4 S7l?ĵ @8Uep^}<> qp 3OggS@2x\ Jmqr~$tmX9f2Cgyg @]@H?34X*`:70ձeV- )\ڄR\6J"3Ufzwɱkg<< SyB]zBM#-(];R%nұ`X}@pq|nV.4>|'eB{("O'5}XA8h+@3Q$gUj'ʑYXHap ;tM/yd)n<| `>Ϟ?&]%d7ܻД]L<;e+oörhXH8lv[@_NUl;[0`Y2 *I <;X dcIuN,; 4 +VS%1B1۽XW &6RU`@Pѻwl"Î" 7 /JǮJla +|xG4;2`ް8Dw6-/سǪ}sҒz5^԰M4c}J ^Dr!|MOQv2оǧ8u~C~*eY|@f}ׯosd\4^&(drioibTP_}:qm޺f\P RASҫüQ` ҡ7@^ 0lR*OgRywZrc B[Bn7lMxu@Z*& 8zlL<{@z4˿~'JdyZx !W Pv__Ɓ8rY4es6 M蓯ޤ޲D9 Uտ[wJ ?5ˊ&V@izSn)QDMe@6QXvشB?udS(.KBdɿoM }Cogq$K[Xj}h2/@W<=? $~~~6c>^ (@}fK|?Q虋?m?@,o m-,uC] ӯw-w?-`ő.Lp頔,Us.sPٟa}U?x N2糿CFNCAφY q  7 (aec+_zsQd[o}W@3=sfvP` }ُ8A`sa쭭 @߽m:}ؤqi@dvMJ>* `z|- ӉJ ښܧef^PΊZۧAUTݣaܔ o`;t ~5DO~lC7 "~x#<]`Y @]wk~f. tx@Q=;I 0ց6&<;a>J.\j ?E]<},zk}? ' Ui }[˽_6FI8hXu-Oirz#yx72_{rr{kj@Jvx5 wg|s[@lc8aI^NEǢsMId&ǭNHu8;-Ő]{V4mG]VDTyb~ !,@AmzY")].tn9¡c5t|>"Q( 1o[@#a,F3sƎ]F{(= r ʼnBpq aM++/$@׌] ` QQQ`f:zvȟbw|V~X)Km' _,k(p֗c͡>p׾2瞠p@<; Kd @ YFop8{ud2=9MnOw-@hKR4i9~ i=Y>/^]I/o_T[ &:Ub^l1(wr4&iQME$ذ4V荊ۼ˦;s'O' !v'y97m ˌk`6: ])-cF~蠜\%˶$a,"a]N)QO ;0#NSR?w> 1eϼ[;v^1~-R4JҧۄLL*IϔrE8_08 vhc 8Z/*mr#~@xZftl>ߒLLڵQ/* nOO峎˖B)eezgKt/g^t[Wn}}oLȍ: _jV%.ʮ[[4]FN˾@; 9Ek[PY͒홎E ng_>T5g˥ Y ESޝk|bY/x,vv1Z.Qi,-@_JDԵuk^43|eBlm~ oYGQcY>>[Av/!9L$v"%7 䤨XHwi10mo /oQC:G27hFN;@@ L9f @ /) Rk?4 P̸R 2r}De! K7yjK]_HEz> ;kmj{S܍LpbpOs&skpk ݞO.YWhd6֒xOggS@Zx\ 40yJ\Hoq7o$g6 NZm Vn+Od, Jh5@./4QOC>pHӨOmHp>1-؅ Mnd3rֆe3YL[Pϧh?yUict0@jZ0A4˯N&_)z|&?%e +5{W6~Y$Go8֩'d0 {ˆ-mdD~ ;C@͇&WP_2#;xdP eժ*y [Dqa+YIW=~P|(0?yO^57 )\Y u$SԶ0W{Z׫)˹wr7j~_hK׶ZvӅE:vCߞk}ȕxJW$7= d,_ξ:c^5?\O}fkos{צ'-@ğibuW@|'oZGd>O~0>'PϮצhxSu>g~gS>EL]Dm[a4 QxKac?`U(Qփd氝Y:{9 @4iE@4ޞ yYJ )4+BldL}t6gljOncE [ZQGķq ˾J#g'pe-Ľ"YxL/6=vm=a#y/a?vaOpn><gK(r97 E+ {QnΞxiTF³iݏ c0x>l@ &T|u#K/]֊~>(;34awX7棿|ǚŋk^ -'ӿgx_^CoyO@Ɯg>_u6\3wq'_hxo0v01ozd(<"|:;ͷ4DޖnT_ (]áDT _@0Wɲ @ eyQ81E Oo /7^ x^·]]ʗ'G4gQ>늛W A N‹c_8BV˱jI 躧 NGŻ=Cj ^yj[Ԑ=-_J(nwp]hJ[|1^BBWy`o=9,yT]tJ["}ިʉ#[Fe>T:Q߼Pк+{ڟ>zXuq=F{[Fpˑpj[,m6X |ۜe|x <_{9P @Q=jiv3W}%eۺ᭷|-[y[?}ODT,~ΙٺxĺkL_g4Pp,n0/CLK}Jo˗v``wLyS3UdTMnoCF@ z{5 IzJYuڳ1~S;b,MkF @j( q݅ŲWP~?lWvOH}{"mO?ߞGre*Ѫ#=-݁۰nCVc|T̫R:O_L؞Tk?6A[8r_[2߼v儝׳;;⸻%v|1(g'ݏ[f,Ŋ'k4fe,p8?>K(͑w^}-̙/g3Tz0h虗L(gesl$|.] $bԟ>&MrOK|z[\,Ub{º A 2ߟ G7(v7-$vyWV}A}i3^K$uAI'G>(>}_?7c_@sqՀ)OO`ߗVrTU ]+v}zkT&<= +!|?OGD'C: >GpLh*ERb@ Sw88soRuי,lSxf}ʿ> / ܻڣ=ks;_fr:e^K_b6+י';_wwC3'.;ui`<3=9Y&_2tpMI} t.'K|8{HKߖzjO:VXj,e.n=g,tzgv W(pLI?,__gu[yzk9f.KR˝y<yI-90<~>b|Z}M!PI11}r}}v8j/?wQH0GӒt T^y?Hvynoo&%3hӵj̺~|cS՚gy~nVYN=u?H+rF =t2a:r#Cױ ]dOlMK4П(.~&V_n_]9i %BY {&{EM nKUY<^FZ +H8yxǣO\Gď};R͕~ng~ЯԅӍΧ neߏFܯ w_׿hG'g p}T~W?v\"PEDmT[iȞ}ҦL| *eo|L iZ<֭f5cɹٓs7ҶcꑰP*5-s-=9m@6AM'RKsS٘wu{MsMx'eF夓b1UL,>9Xskl`Tx2iU~6O3?EesTշM:;󀬗r 6?q_Trο=;m3w go1wo>]`zuL+s݂|r7)5L3&c^ݖ,@UE@ 0."WEQ@`ϼ7m!_]%ت98BM"{*4 Qk(vA'~I iN:n<ɸ@64~-te9~igZ_?ݸ.ɐxI> <9{ٍ&vopOه^w]^ol|yo?qE;TI5m_K䁍8)s:_~]G>9;/3@")L~o=ڧywk|8̜>W@6?l`WřtMY>XvMV/=Rx"jyi|rЛ8lK[yUCĸ AX$0 "}"*A^E~UQ.>BPTЋWH% y͜-lک[Zna6!7&/g-IIYڕ=K@^' f5|wm?c{ /Vj܎zӿx|gOm(tU-WCY{ͅp{#ZJoYU=|%I \iT@^>("T=^[jiHF_Sbwz[{9Q.?8@/P }trI-_w+ret>dy|m2@(=BM3q[ `Y'm,@aPUU[KD&l+7 mX<v p?{]B܄huB>F>*/_ Vԙ zLO ߋ `om3gNaZp[r-4n8lDZ'`3סV5ժxek* UgWU]lH} M[O |qi%s_ %@ܶck͍Q$蛪蹩C; lw7 1֗CU5F_Heej䐫*Ԝt#m_WX_ \uS>V: skq+ ska>.0;+rL;۔s)]B-md^:}=!D/_xaUճ%{qF>ݰֈ ,&/^n0ZhL:,p1ItI38j:r/Td_aV~h.z&PM; ʠps\SoOCzz} Q NMG2钽?U?ŧΏغg5_$ȣPUDGoTD/j!~`?l *Xu*x֍`7VV=)wP_~# - 9˻{!" >-⫌7.IRqZM"y¾m?> pWX[DZ˾$J2]}? n;*9a&Ϸ F/)@ H܅7-3MH@)4]ː+ ޾.DY68`^ݻ$q!X n (9mcGP?eiv__OO+ @fJ]2nc)߬OXOXUURq76 3Ug]}n!{jq`9֭\u~@? eӸyCELTP5?]$ ɲC[EEQ' `?Px|DE4gWtB, ˿$ ll@z;! [9¿J d0848GG-FFdr0[fH p ~unEk/8`nǒ~Lj <}7dy2eS2߮ff4zJ(GS yPӒWQ @ p;^1`y`sq7nvYIw(}P:o񿾑<;)oQ@dT?5TTD5^#DD%Ÿ+ *'?`8vm|'*""z  *j~.g"Hء0cl&[Fۻlew PEAQGl%䓼jG :/`]퓟7kc\,[ݾ'wƹWi+q B3 v-(L(C !o{)lG{o)梴n+nowfiN@d2s̵W$?ϸ[ϝ*,կ~:j3xVK./2LbZ3k/b<>}*+\.gӵ5֞v:4ۺ1TV ʵ[DZvPf;o~7M7uS>??EDECC;C>QU4KYTM C6,_O nx|뿩[f =}uߏGGe=˳??e o``l=VߙC>{=QhT~b[2`[aA<1W3|K՘0 O~w6g-JiSqSvbX=dr?{-~/y)ic+}n=U8g$a[K ukgZig[v`CW2@)HOCzQ~;|_Q B]zL?ƥt]\ߪl6Qov- 5)ʌ_Ro|6zEмi/[n,>8Kz}A_ڬKhzO|Nl3l|}_%Ӧn;f;u2&Rc~,c( l >=,ٶ0n&z{Ւ>(O@gwJX<ˎξJ6 #-|3 A|8ʮV-TfHn^T% ~Z nTMS(XssLtBZrW`:`7+T C@I%(>?ͅX|7}|#p^=WCO7EeG W<#wz>g;&;/zL[;>w-{R.߼q{=Ygi!XwgLq~ʝcљLr6!K/]$~*mj=UMzCq8sfg"!dDq'«Lx=o2XȃYFe݀(E?e6{Sɳt<|%,˱Q::q"nNm^gۻڵuP|J|h},k{iipOm n~>% {\Ftm|MXRkrѥdO?ME2Lh÷ qJ*u5b07.Ddb;"11p& /* 9Q&v0TPD Tde )ƺY;L_m { Il`Ea `۠!oZ6Ŧ[-VDZRQrZ"hbU(iUrAh(̚bYjgXX]=[3ؾ|^DHi\||2r kM-_WU)LݴG՛pda-QtbxJʞv5xS_Yϖ&`k7Q3ɲD=Sz2yZ4L t^ b"Sqs)g%H'1W@baaރ"h2<4h{5fO!UmιA S+MO%+t[DV yΕ*hͅhj5tr CVKWmLopH;ez\O} XeaI;i=!}tb'9@vAWn]By3{=Yݶ6q-Ș=-@sssk6i>ᶅ x5Ɠ%J 'F=Vpl)h4Wd>uvJ^%8DD h{E(j~!{Ŷʃ(# A#п~/o@|jux ٗ Dzpڏ?皵 :i@ 0ݍQ!<s\/C42l @+cQ YE}bOKN2l%9gpߝ?3ٸXR/ﲫ>ʝuWfSRGT͕axPRC➙qѶ,d@vHZϾAaرZvOgQT5=dl#y|$%^ۃݽk *n"aPG@n, K)' za@} i*FoŖZ,^`ҭC0ƖPQ{Ӱ~`XafAH: K*A ".{B I@{*K0wMCB YFjriF*4&r TAxq> W>.q VQ ~}~XX#z*9j쳛A0-Ǒw3>x/HT}TU!39gԆXC+x}\yxUO| L=Kdw'Z_ Pv9.(Z) jjg0t@+.[iUjL+S[rf)&) zy^Uy"7mC !v  CmW#8Qʐ-~K(e  PAh [ Fv*!j*Szk ws$9 d$~2b^q~h,؝!*)AOggS@x\azO?HKtZ]~9,q&5.N)6vö*gK]->mo -@w ,}Uju%b?Xk?1c<b@^7ۇRx$T2}z6~ z NXٷWxB(y\,a6\@f}v\2@mx8.l$ċw1R)WZ5HKG<_+z£zpJUNPxn?y)*+("ϟ e`wiX AUDࠏZ^UTàOWCqRKUD'Q*v 1t[U%(2 ){ K V %0Xޮ[@+ĴOEU` jZz~9V,)j6zmUK:*#dAWoa]/V^7u^h_k>78pEXu, Ǒ~l mB>Oh3v7%F'?@+/1^:+Mk:iٓM]5ܺ/l6JwþI>ćjRuM@Ŝ[D%+KgE귇V@I> ag`v ?%*@x)RpO>[ʥF zzh*UdḰj*9'"vP#]TFͯQO[A@DFET ۮi;Pҫ4},HC4y-Z}$CUuDGTui g!PkfeZ`U~),5iԲ2U'0TJHji|,&x{k\O`G`Eup> :pn H hsx\}8^h(@n~!6:6w+3P7@X1Ť_sIV2>;[ȩ_Z~ۣ(r{ǃsm~U"V(ꪃ(0F-p}13 Y)TCFUvNb+9 A~,?l?7E RJ! 7 !X>Ğ#ׯp,m5 Y'1t KֱhLS~)V$i$ xBhxh.mJ6 Xz7գ-onr{\o;f7#-@L/~XH 6dJ̼x8l?dR-2zu[' &~M2"W-@ @Kcfk.~Pyq|)D"l3F?:0wĒA(8 A?8_iP̔41%+K"m|}z'odH+c8BM%:X I&ZGHow,cm6_Н|l,nUz3Fj4ԙFyHC uKݴ@.\L7wrß[m&nƌ+Og.|q'l<__vӐmLTǯǹ  N"_ywyviVKA Қp3Qɠ-R o=$DRTtF2N-lk!TE[(7_WplZgYwXֺeH :-S|{S`*ӤE6v%oۙҚ1]cT r(8 ( [1 1,lcI@rzRZE}V-ƹWvgW \U@!a <0g%ﹴgkG5g;/k|~X2Ͻ!vWIH7I5t2{@Fk]qVPIٶC#XH&V}ߵ $lщ῝k0J ` `+X=Lr >y0Vʨ q"#rb0@Ty36fd'c1$4sFMC# İ * 3M@p*&nt!*Hix_۾ ~2*7>)QZչ 2h69C͚!@Z&n8-eְ3lM(z8(κVx6; )s0_ay5ͶOG_`qI-!Zsj^u7jeG`"b( \^:w Y&­0Sb',ӉcNg)qV1 \f7BX(^%lPK beiEGp J0nWa'Y(vUtM$\{?%S}ףa9:N@՘MGcԄy.|~A߷,ɱbRf 盡p^w~۔/[8byű)cWw7[+gR3PYn#@ѯOb1K8x_ Y3))FJ6/'3*(T~< ;OUwTsQ7~2ޕCng/ҹGZ;:J$ke{тBBd:wgBu$EX˺pJ)d SQ8[&bP8 [  ʷ}aPME"BOggS@x\(Ȇ*\/wDG {SHb(vK^K[wj<B̆>:\xw*nήǾ솻._]; HWYx%Gxs<? 9kk8N<(bOMQTdsO3י}zCgq )tK߾zD?^ }ko35ۇ`nk1@t/|L@J (* jbʓF}6T~+d cO dXma"yZC0iSګ*a"Py?)^ + (R6- z JM43^xYp{s?|WgJ8 gЇc:~#5!-LۇemON38-Ob f]kP2nxx?ؽ=+]2WtҞϲmrail|ۏUM |:p(2ec. ne]Nt3g3Os|L]3-WWC`v[\kq4L3c=.&{g/1@$7TJ!OLF خW,-Xݣ!]C5EJ@m */J m3, PG'ޛ ^UI ͎sGTE12ND\q]4>@8x܅ .{h5נ@A_jJ h\3'އp}S*g=Dr}OC=gq|| ^'(:x0>;Sc\$~J<">Q{/O@' ]H/`S ,,nX[X o*^œ+V&8v}@ӌz1}ȳ`ZhGȾ`9wʱ@e:4YMOF'{?ɦ/ŢsxʆrE'QN^tdf'5@^8a!^F,x>zM7^>Yd:47Y ЍHAkF@hX,e_)EA_oO5?^_dKCv7ek{u]Ȕ^2u39/=.}Ha+f1ܒ*O)'j?v~c~PU5TGijIZ ap#xt ƹzѷSSQ'U,}2n;Õ4 8moq5u p KȞ::R{@Ǧ}s|lI+U;6t>$ w~dJBX>W@ޜ>Aⴙ,tK_GYҟQuMZSPCZGZUٕTޙyeUvZCAGc[@P7KÁ>by'Yb6d^>yđZ_?م?4Me]~y]\~ȧfRAT/dOsTVt?Ew!"{{ 6:5!X EOSuMr_ )6cYҢ.~r"~>RUU#CUPW=#SPPU}m6.|<޴ Ѕl_ E^UW1#ziw6~x<Ѹvd.(?ifqDhUc}e B>?_<\mӀ -7Hc;8tgk1~Fx4uҺfrݧ]q3FH} p)F{οDPߤ3W^2<٩"\?; Ͽ=fz2YP@U#TR *(e-?Yl+^TUD Q9 K&Z-aoϷ }$';GFHTd{nvIa9'7M7>A~}*DZ!} >(u@~iwikS:KV6{,7'߮ ͯT6K {Pe1'v&]sc]dI{B7ͺii?v]4ɽTW275qx/k͆9~#*thflMq yQb~2^]l?x!]M-,t??/nrnH;"6*2 ABPP-!(32$@EG@;c@B62AUA@DUUU5E@f+Q3',~wiHG:4HOD(Qz|` }?u=~zU~7e5?Jq\?~sxx}e85`Nza''ژ_o$kg덃mGwZJ5.FvЅfRpbM_;?*d֐%9fyV;@9X1dzA B梡7ǟg q'sߦiOggS@x\  _醟٭p(u1y( Z^a.}> <^& KQ˿T Ad׆"*`6y}^@~zWEE~Ur& ~PA2XvoX0xQ] q= mெ+P3Pdc3[[n5G>8Jḇր%fޠ>ܐiӃ @ñ> $]=`~p8P9/W \(XQ; uVB(ֻg/s) Ь;]oDWy)?i#9?o,ҝ| DpQB@P^DԸc!Lwl.55q*{,|M&@%qggݛMnbJl)da0; Os$:qU97CWl(*/_A6g~dxpjM俦*zx."2l!]Cx*qa6SPT> c`W $I$KwWn `qOCE*>HonZu6$~xa|o ܸ^ }Cn'X8; 8aj9@[pkxq3/08wpղzZIϪ|#@jWf*㜽ȑiRW ҥ=wn s`4~JXsa4[LL8 ƀ (ؚb}*! ߭xTVXI~hDϲ| }x?-L45o uzK0.)`ʎrq,۱ 4 7ϧ p&*?@/ lwuM(^8kusW8tN)0;60Լ~q8DPP?:(+A @D~ -2CA80;Tտ|\@`;pД [ [~Æu K -Qo@T@ؿ|8-"|"CWeI 9~~Ws8+ǁ}c [\)[ 9V?`?8VUiL0 Kks3hgZA߈,/o29SB}~BYΣ+^?5!gZ2CҵPJ!gºAVK T4M 9#1 1|{s[/|q˝2`6kޛەiϻ^.{twO @|G}D,Vp<pݲA~u 1e| "8Z- ]D`ʻ A_T@EVۡ"7ET O?0z! ܾ :6HzG-#yPojF_ .е6%^Dl!I> vJ)˥ mez+8%Hc;pBH&bXN m~hW6|\(ٓ3͗G~r2*p~ E]I[Fhb e*89eP<~҇Lc%`5RݷgYxƒ^[8Z01@Wotl̵h7kA1OGnx[Y@OSCbdx!j(&ϧMT|')9=o>|)cGru hn֫ #Qѯ cx *! @Pk#0U" M rcT,H_Q!!l7mčV@#*@4wP{`(ͻ7RTBN#ì5g2 rQRxy~x8 g[%e?{wr?F:!t `#q$Su_?;mkP q12d\F2G`|yve ?-O7DԽ<۹+]\rBOw&oݝ'KTb׏iߜ9Bwok3˃[֓y \|ٗliU sgi(z[n^v}.,w&`Y/zB62X( ,dKoDxuTG 迈 rW@ UD: $xoɁoD = <=ea̬z2KZ cJG_:Q47:Ґ J υXk( T%S"~m989P'<ڑ gz8}tԥglHl : Ky}/g!cM"# hכ*~@B~GMXQ[2@Hk@#@f +@.^$t|Fj^' fj`T@̢/}Ky}~.vx f*`!=/GyŠ=*wz7*n[ d-}dCk G2.er1B˷Q@_ =2?FܻʇK z+(8v7PW7T@@~3cȈ@%'OW'ӮA"}@WyH [k>Nc&"\ϑl}<p9rp=a# k|/%xZo(yr0Wf9 up}I釦e1o.SsOGGNɣ)r-jr<Q6QqK a܃<+e}3:.;;8_L6OD~RBꚜuZ]9K?i4t~d&5O0$PTWt.=Y'3* v-_8_X2ݣJs )***  (AAf+CTE" ؖ,cX*G!d$KMg,,~$o DmT>[6N(y Ύ콭m*joDP~;OggS@Bx\"#upM;MKl¸:Jꝍ9oIZU"b׽~ܬ:^WgyWt6 USꪴ8|0g#ۑ]:9ѬE]nƞm{+:y;>XR37Ǯ6~v L=7ĔK={7kpㅿU5YxBbP`콗nܭs(,}gقy?$5;ܧYͿ3y pIWޅZ zC`~Mefw ZSđ^[oAX}6l 2,C`F2l/`!pb1.5HDPU}Bj0o1aWؙi½M8u>|N8y\ɿOf ''Dz-Fj2n"]CW{y^ +͋J2pxl=rPLNL~é󇏏ف*] B޶>P ާeMLQg2:&+Ex+ +pfd:޳)]ـu ZԞKU{8O~pOnr׬\dv|@ӯj`prW«+|P{O4" t*KZV%#g~!yH v !n)GLFo@yK7 ÷7!p@:0>dm.B1ڣv d@g16Ǻ:?o<}\}u`e;і ]4h?sλ88Gٯuok{0.nR(f È/@p?&;)r̘]mBzx oϯj o>opܹW0@zqoEszZ51Sx|v_k9u#eSMM3K 8^v|/^_x=Øis*EYd *AUn=@nK? @W-<@`l5ؖ>XT-=U is+~]Fn8(|G~ ۗ8@"R/)o>|: I[Wy;3< Ћ5_UɱT*NﺙNpV`CŻhv}9?Ѳ,هYGOٌ37?UP_bj})qdʙ9<& l}h='޼!%B_mEb\. ΒQ^Zb4>>Lo3ƣܷѸ=t@VNeo߿R:Ze:拀y>P8.ٻᷯ:뽈q-{$w;_ծ/}`|d_%ԣ&?8zy4.%x.>ic7́B\R@Eeks~_m1ߑߏjL08)ס#}G2]OoWbtw?[zapu껨 j_H{XHrhˀ%F |P 1qSUU 0 +#V/* 9bȽ{> sUj=an,NZ l;Bf0 Sd궉Hlw?hey a0P:لq`Nwigwec=;:[" "-; '|Rj@)@sNw1]Sf1ݜ&}}SW\-I  u*qŭ*xXT<$_ uDDo7=^7 и{6. x!@g]M F  A7:,e)вD7 ;? }^,Yb揈ږݾ&> s^ |xq/u;_k*tN'{Sp1۲,6.H{4o=&|YZ+^jؽN(tlH2e9h&4TڨmQ {8ÉGETyVCrpࠆr ٔhq y4*?K< F/e7ƺ_QnTxOK)L^,QnedY C/T02v#3( Ra1dk0|v:}Ẏu8,gx xS8U~0/;3I9gyhp{۰9^=K. =nlBkȷm99pTF49`ɘk|\|GwzrvzS;CQzk.L!h8P޷{EUP|xiʹ|@@ ߛ& p@o-}qS|}~O >FarTMVttj4bt[{|yܽ`nЦBf2Xj ׉U0ry绕'~M!v΃y_zD55 ~?z'u<<PUP̬k3=OggS@rx\\yJDULhOsy]R&uOw`Y̿+){`smȋ c (9Sh!Cc[A GEEŸ'8px31Q>*"< cm.  oHYL7^oq0ط=uoY*`qxLoƿqd9;5)%C l#&S>P^Kۉ͕W3j"{ TD.Up_KlMReFy>VķVZ s>I>*O׼y1;tw u>_zP50{PW ~n>/7;>Prg2 5P\]Ȫu/wQD (b5?8@TwiqaT8kQAE@DwP?*_ HvN"Q*kt>`/G|6=UARKa Wm~LC|g,']WuvZ7L>Qz|qōΓýHV0;9u6aoNJE Ib<Xq-2pd-,ƪVodu7LO`Y(yme;u@NLR>LÞ)3S]ϕ PrOm!rAQ*w&;mafڟp4q2gV / 4! Fqb֔a%W&moGT[*hHw(s&SK[ ߫MI}>~ϓrk2s)Ѷ gRv/<9N#y@Wi„3Z~JZYgYk6܂;V׸|G%"`zd8lȯ߶Y@Mٻz>M,Pc 4\=wx:p{b!zm|%R?%MDDnnQ(N1<=TP1w `-#Yvz@HqSп2f/V{V;7/^*A K+(a$_jy^aAB>9axz۟9oT G~q-.t73_3[u+)'4B̤o>=z-!e晲kf=XsB&V=*vaݡ'翯~3{|qPR ·4^xtu0`]qv0<7-SGhU@`3Ѳeb8h7d2(H6kQp~ff(F['5-Jx5lr JxyV…pi}_YRF{V0pdNQ'] hoǽұ,+#:tfP!^V@5zn.zΦy:f,0;ѭe[]OF-SHHg/͍Xor~!U~SgɃu3K~_ s`߂jr6 Pw4N\H.rQfGXoecUe k7MG$Wczm|x}]O IȖP9mo O" h1r60B*)Cq >fPA@q\$) K :e㡧Mg:ګaxX_G/Ԓ0Fq4J5޿9[煼VKﻃe Bǭ!/:i!f,}Xan¡NDt,ph5 mݝy !8D+5wU+a?K$G~|bSͣ ,0,0 .h@QH ufb>;i@]F|RU{H2ْ،]߀ Y=Oƶ+K"082:8 f*h%Fŕ6MߓQ[{y?ErټO}r/|<n\ppVQVb=RK2"ˬyϱnWm";6ڛhS]h*ReޡmOr.z4/Ӗ^t6n$k@ф(U=X)J1fg޶-Էq뉘 4=d Q ڠ`6%njm|^ q$@pE"| $ʽF0HA@T1ob7}|LSpH׀ ~v,!pi܀:E*ouZ*Z2nw8 =\$8.mJMje@Z%cq #gV/'ϕB^<8z^$9/)\].ޓ#d@:]{؁fY Kc<ޯ׏6&cǍcgv탈nslŻ""⣻34ƹ@{Mߋ|}q3GӜuUO3 Xr4_EA7t3ܚϪ7E  ` Oah[x7m n! 6I zIDQSP1͟1  ?8(88@~f\<haEcnìk$z|f-^׽3י 4lsrGajgB 8u]^ *D}9@w(cqIr[73Ir}ayy;7'f<ZWO.=^Zś8m؃=m,8פrOU<ۭ@$,*>4DPUg߿g 38AD&D@ dFl,gQ\lZMcY0{]} bvp~[n Ƈ?<jV?i -n(ژ*lL{ 8rq|L%}|&h?Y|])ޣyO}/YLɟuGK{ogrYPeh5pd|~iy6@;gS' U{ćڪʃg5#$ǯiH`ߙ;A>z';P<ҰgTE!1snvff \_|u}w43pw L?N}3dp~Oƀ^  4 F @ 8쬔o!;'G'Z=[ZVH jۅ10/y9߿6%D WQ P/}rD{x% s\rUsThrkYaoTN͘e:3fMRS-f}kZMU꾯3xh'0mjeyv1hsC= `ce[kȂѹ{IJp<\vl}@6OggSҔx\Nk97=T;FWa(a+2L65|2ucG]Y,]%sh8nq˵(bo0d`y P6en,Wp+Re`6\Aҩ߁h:{k71mBO'gUOH'gѸҒ0<=Er|&Kv_vwjOC{},="T,cz^E"`[< zSL*UQ&!o߲-o!xxHA`@Oc8hP:$)~, /V8Ő7웙u>xi<}62IfaFaYffnխ4f?#k\]OsFL)H0&+oX(Ґw7=!-_.`W`y4ɵ' hax:&@o;6e[H"SOU,[&~p>&[mYޢP}i{1q@LvoF ?2<`X;a!Isp`??'cl#xz ` h"_&p~ c#He!aUWg~`+ $9zs,j w2U L5W3%/#>{ 8Bgc͒#˞X@ B@~  TP{` 岯bkb]h++;-tNJn4g -e܄m4 ޹ۛ_ [KnvXm[ė@ %R,w<6Wd31/< hy*`\A^ "{?34@]u.0`8t- vz@If? _5NP'WCݳ/+D@0y] "*"zXUU?*8@,φBg`+2b4k "뢏;@ Á~!0zH*Υﴣ޲%;iy!N)(J dR3T?㞋Sj-*'ϰ|t|'c9 AhfNaӘϥA}  Ĭwf=5f7 w 1BWAovkȒ]@w31.g,@U\gW) Cs\wb}Li#r {P3@Y+y@R:0B'}8P~TKC(->0zwَ694nZf_,~-Ӛ^=EDkE+n GeQ(IJ>]+2C]J cf< . qWneMux(ە/访$ÿv[0ES^KhsC.MOfX;ȗ^ܝhh6h@oY@xT7?8$(cГ$[' v Hb M@PUE*Ȼ! P@U ?^ۭ}UXXW=~jTCr*ƈ2PrڴpwM$+3t=;ko@eçNiy9Y}W̲.ep55D9??12A61R@ײ>rB nb|87z%k5\N{B Cnq27kTUUU QH>1:p`apaegG]0g[OAG}}( H$D u]%%AۍtA$P.64 uC'<jÜOQ^vn&i& ]otv23tΞBqB1){#ϕbAL=d?;7 n&Uh?Pĵ!~PV"bKq_j pZВ˪9,<2l7XL|j6؁[Gs1}O+njzI}V[ICp@SC"_*gGj}÷j}#f41pXl{CAd;|+D ZCɺl[ ܊}w-Vbjs3 -wo %EVr5-)+jUQCYFwZE}@qx(8*Sh8@d4J%QPGp9B*feyDW dWK @z3S%<*3P;HHWEm#TW +ۆuBEF<C`A(0m,fM#2hj y`[РdJ'"M9ظj9ԬA$ke qx*E4}j3t&,Cb@Hu`Tobో˸=LEUE ΰeOtp8Fe(Q#GGHSa֙|تk%w'x`hjej40Ӂ 8a @A;&j6QVk::a YwXQ,ph d .SF+bGf_)fZHT6_5ȑP04逌# @Q pu'@BFB4B uΐ8% ~N%K;Rn"@ ե0Z7^5,X3N#hLaÆ]yPmLMGLox#"GڸzogL4r56Xsօ4Ad^l n鼁EOY ]a(|~۶BB(r! 2 "2P@`@EB 0P`` @@(VD1a0"QX( `2bb(`B"8u5,PHTEz,.2-(;9-r;+]́1Wòכ`;j]Q϶`XՈ>+niZ/@/r  x=K; 4 $6IA @$@ ơ-EsBP~ ^Wxa3CAۃȰeQEk< 7YB%0k˻F_lrzᣅo#ؓS4du@>љ#3鳹g9~si"Cɓ]zo޷smGqh|a/mKQE^NfY|#gRs/a(г41y..@=%얣6V}jMUD:w&o1[`gԠiy B'ia$, ;clUw]nQ#=['RbǩZh &d?BJ^V1aZpt#FJ_ Bh,]ξF=ܨx >kh=H4vy UO\Lԟ?Ʒ n_;̬Tz0^qi˕ott.9v<˷k4#`]'(Ħ Swm9n]zG2]`h.&޸us>9gp8 N|c0POPygB=ܐRRn4k9WZͨ `ES%8%`} ވ%k ͘FnIMcQ;PBJ\Nii~w;/P^Znyվ_.?r׌}])Y"]LaaϬSL/׳WSQ>Kzݢ:j8:ٶF ;Tgt&0Wj3y_*wHVZS:_4> KH`B6UkX0abY_]`\j4B2<>,;gpct}HH>@..-쓱 gQ)?W>S{(3DGnxR76yR$/7Kyva2 ^ueJ%ӿnc:jm~~hnH:>i^m^EȳE&n=:M 4: Wƹ{h@so ( W^4CT@eź/oi|&5Y0T1|ԥ? KN !|f}Q*RyW`*@sw"rM~wͣbY8wbkvۘ![xys񁾇Y N=ˀ-ў3RUc a2ΕPjq;S-,ϻSf3Q8Y's]dgsP0%hj8s>u/]lir~4΃rg=CcZءQ{3xۍǙF7Y6>NE{QXIVȋPa  ],X:Jz٘n~;ݶа( fC 6mڌIl˜3Hf$`6uRB:lLuՖ`lcL(aaGEE " *v6, ˁ m\^%חM_<~(tcuDFFVeLj>* Ȁ6,-m4#կO`쎵%`ZlcTuD6iDvdDPbgS1P{U 5 \W?Ub~^]S+.i9jNY 9rok2IQYy%XGC+ T !`@V̈A&eIxw/)*:;3* .ݗaVt\2xHL>b1?{~> ))5*p.PgS p/+R}`Tp) hʥ V0G|׸dƨPḾLA)Q{* 2x`bF~zdL$I/|a@9F IFZ)RMT, 3 n0IH!H% hEЖp`,b~pBbDQ Bbt(G0180KY%(Bo(J{QVOggS_z\'*]xssmko;0.ML68`-3֎l3{f rH#-!~Jz)PtLG+脧K/8T@H%sCHiL[}EIw^6%(}!ӝ^?nhUkI6ѿrVun+G ]bT]z<捨2h+F\gm*I>]=]o`IZ/Z˿MMn!v79m4NQL1TS;*ɞ{Ɛp @.a@gwe &X0_8pEQ@Xy߮u[NjzX ~C Zv,vt9Q?JK3dJVH-rۂ{Ej@lL5Ix}eUͽ]xN¨rv+%S'Fj^[ط|5xW_$͏"SO@^Wզizd7Tc/㐅?y4(j˻!X"Q/ 5Py($SLvpgjdԓ^aZFK2:ߢ7@MrNL-8L'Z~~nyItPS։|>f6oxvbpa }֔6 B7%0 gUm,_- [H){k_"$ZӶs'Hq-!JS[(vPqzd`lZ30>1NOnnGw[w$]&Def5y!HDS.e}v}KtxhҞ?v;䄩ף?}|u,>ηVmhl>)+~N:3X_'eK TWx4/ooJ@}ۘF?dA; lj4n#) ]ѻqۦQCS U5 &ƣj߶d#na>n?W)쒑= }NIS?LlaxO5~Vj1' I8-J%Rl`<x~=ۛ{+7hڵ@UK?Yr7=,jܣ Xm@uv97]Ic٪Ŏ&zvM%3䖿OL\8:!=4 o6b&S2g>9oz켳J,L3n%@f{?.{qTPTT2PD@PaR}@D PoMN^ k5WU`}MġUJrAj_px|Ӧxh@qS} !@*Yi0jL 9Os+WOw1I!=Q&Usf]~/G4IU_D>uќ;LfJe6Vf|fs⮳ݥb9ǹ-q ۷6>_c[sAE`~J<(&=˜ܺ0"`jс'{cܜNsʪm"HNxl}~A3 UwI8 ׃@yKB֠p|0mټyfb,$,`J&1wz+y0suV'~Dfx4/ǣux]3 ((q8-,l5_},_szKAx<8s\XA]&i><@-od1{`\>zH| *Sk36ޞК#񸛓)m?U;4y}|u{27^)]TMVˌٻSLq$Er6xSx5CR~;ORS0`^ۙ*`UuY>@J=~K˻˿$ͥ֐})Tmf|+j*4qJU n޷: "(J0'iГEUUU~AGnO. XB$aWDg#|FR a9F>§xm3FT0h/G[ X1#m`ar9 f]]GJӼlX9WÈd}z (UW @~jJ)3@J tIDj Cmc? ˲B"]KB-/sBix!JGC:I|hKH_?P%"`.>hK 9\:tUU@|W y6ϔYziFWJ|в~nTevL|fPhl?  P"8*qBR, <Tj14>^I$3P KE,=?hBjS{bYf |*֛9g_ϮPOu<|VQtWCtLHB\66טڧRɒܖ#M1Kl8fs:9S@ 9{{vsq9p6.Ru'ܳAzޔgֱ̏Qq0KeM1.E+T+Fy󌿟1k']OggS@z\PZVQRJ?O:;=;:GE.7ZGJ9Í.~ T{IUyUQ'iC7EZѩGQ-.E]mx.Jq8 (Uni֦@7[\, YLT?b_ sHHkZ.+\ښ]p߰6TwX_UMT1z %$[\³.x)ZѵzfFsui8[9`+t'{1n.z@+` `˧}5aD8;`ї)Vzqar_Pe!3HaJ}z={.C%^m d pЯ$׎P hK޸kB+,U]k<P\ $cKUU`Xfcwyuͦxhʳ^#=)lR*mK pw-2~qs\$*bu,`IxfGNtoZCpTsW4Ký6zg=ǥ?$4l2 s8Λx85Br2},qUA +0H~. ?f2Enm|%Ӈ ׵-5Qi'2hfhX?Hn'x[,Gbw:O|y֙|Ͳ0 ufH&D dz~RF5_ kЦף7SL'EEO O)촙 ɶ?+<Lgks{mT%Qo=eЭxC4L&ˤ|lMkh:p:WF:$[WE k\O&<u;US>$)@o;w;[Ĺ{:۹F# `>^HI!{m:x")@w;(,w$w+b3 (C9-~|b4+Gn=o:y4C!}uzz6?]l]'tt|r۰oG\s<=텛@=3Ncaq 5'J-k ClfcB/s=5;O7sm}6odt^|sv?>:,HfeʥyΜsV}4+7BpJ^"ye>o;7J b#t2zGO^ك0xmj}sd}>ҭ]\VC(e,Rg yK}TX|zfnilH3LhoKb,j [ahK3-xQpyt"~-6i3ט(a6A,A4('+&z A@ 1(_W3ddQq,!88(ӴFU{gH({sHj~e[ sSӼ?ڜkm֌"q2۷lKvkɗЀ!;XQtDr.Ee$**eAAs/+PsBA 3c`2'}J2vJ"m[MI @0LLWJ`$,m2PC@Vg?yTC6V!#D)Ƣ@nc\gȾ7 s|h 0nDtD2#IU{@ʁҪ @O'ϚO xI+z+_(Iړŧ߿[ۛRƴ;tSxzc+ ҃q%" :148pZ[+ v}\AɆlv=ȮQaڰNjG<i`Z HH!XA/8^,%2L ܏xϤg:Y$Ǒ!VYKাId\4x94 kre#L7PǛio yl6ZpϫBxuCV6T^TI(&тqֶóYŁ<}k CvN0gvf^3֡νu.|pd$V0LA.<=HIJ?6"E/ttdy<̍DK賟@L<+-wnI\3bإk{0y8!`59B= dz#Pí;7^4v\MMm7Σ8Q"unUUm- m݇|t ]!TvKvMK{1:/AJ6BQ6 ̃ǏTouSZB}!.ȆIYs6ʁ^4>y U@_]H0ª>?IE^|Rbba 7l)`(`:>ݚܨ>¾rϜ9^k㓧_ס" Pسl~rsqFgt9z}OggS@z\U+ =H^?<<;;;@>.'0::F?K>k<>Y ; +.= ךx:@= X8h NoLScW.+'O@U eZtzԐ TUI^}cv=w>iɽ^it>x/yfo۸#)!m0ZOl5Uhj5dsˡ_9NPyE1׾ӵE,elL&&f@-ǓJ]6~;Z>>YRI1W<+5_P%fG #f _ >yO"Yb>0͇7 1b,vvxܬFv?NVGiVm7s,n8gCէzK2^XN6QZU%h:~tK9?Wþ}즣fNЁ7r }W}giy_}cv{{j?{؃;Qej!k83i|-^oQ5{0Y40Χ._?+C;Yp'ƣj 16Wݧ=">l7i)o @`,`ͥ_ _SǾx隝:4,f5ޒ@q7 8~kJVc=%Uw.frdnK* 8b[ -=16ix$ }ݞB>|{erJb9:ay.8y1U*uwAqlyӰj*94TZσ 9bjfɬSr{1?YhyemT<zˍSCۗJ ?M aFKIaxil }쒅}t;et1kΔHax8%n)~u*Ru~ :2:$ey)nPJ1#ի *t*m2qIM c>8&m@8'f%ImK*r"+By5brOn$0V9LL>e Yd2erIa ¼:8H.c d& ubڿi\ U % StܔE^nq3_H/,o}vƂ6JzA2rg eG/ɩ\1yx%"1j^(Cܽ :~^g B䒧~b?+VSS_sJ\6r 0( t=ol|9; b'Qz~^gM1~2uY޶ P|̉Y96LH$FN e[ ?0ʌiExrӊ b8f)$DUKH.B/sFQ~~A۹(>*PUU\k=Fzz+^>U)C1ثo=Xv^4#g({ ~Ŕ7)U.A${Tt+׿_~jvM[IkFm._'qϺSt]~ë0ߢjfZuYR]>/}/8Q~^ | U#NX^ϗ<&$L]lM>a͟vD<K6Ӹ #iYIF@"!_{=pmR^ k(gv9 Q [=mQHIUU@._`5_>~Y :d+i'aI}}ٚIc q\;%)iyd?̬Ot|Ow13544(nt}Hm)}\t lf_g]A 8ȳ B<,㛆b|aXZۅKpŢa)i;|{) QP^HQ멉?jQF"įkǧ+)xJCXd7`h]ӎm28S$(xQr=8 '6 ;hԀ5ЗY-4>jd2!e@/^M;7Yh??ǹngJso2WmixrGl]eb?Q_,ٚBHjIs|;BLz9099_Ȟ=Mp'5 6KQ`Ҩ<k` S .+]'wx.6wMB\ A,ºeϤ`%u; %iej% )E$>s5+CVwZص Iҋ[>wX*u{4 m9%U ШJh^c$<~ړ \KS {NEm۷Y!Yې.Ln.ם=G[g嬣qzșv@^HY7Z8]3./ A$$6ZION~6Lq 7Zi{ #ysAe}ۤ& + QU] c$[AhJʗd fd! \Ea`, >H>%{T°Q]Gz5F.h\`Y֟|EV}_tmcչOF6_>!wжH QMCu7A3+&z~u9̈7'krq?CDM\mj~ISLejMU^M`d?Ƣ sMNCodNJk)UYYɳSBR q^o@aL)M9k f(@a.eu.^dH'X;}h >,!X9h~UCPЇ uB-b/Eu l+|`=ОǞ 1MO7X|v53] irM~yA6J n}S6BvuMJ*ŧ1+Bo;|i`f|uDPWTJ Lf'@|598س`Ny٠`_;O׸Uǫ̗m @mwo>V'dp T ldCt<ӏoS#0M +l~u靖s~ !ohUWV0[*{m@=y=6)_<|୤ƭ@LM;6qeLϾ|at}(}n~ ւ:k9x?s$YT :pp>#y;T,L ~{tzfꂨ:P}yyx ~⢹(pjsν9 3Kªwss{n/ta'\?iix6 OggSz\(B<88390=.>:<69C@DF4 \׻vlAU>q|r;Ka*cYX`ֆP'v2b%Gm.yP%k ;?%j٧}eVIr D?`'v6yk{E%PaXhȻ>u1Vi o>Z2YvtgSU2v*}\vG}C񸪇3yV|ȁjn+|5H6Q)He$'!Iv"J~m0%d [kڑ&9E@>G u">f]'9FUU0O`uD?k$oޣӇ'v̮'t~Z%6k(qſR bJ۟)`(>" $^ZuSkj|κMPh}|ΌjPT먪]>4 F.TtھrzЀfޖ xoCiw4Q*% D ^\ܪuP2Ɛ$/ [CEvCb`{4mG[hV ~Gaâq_ JԾϜVU`v'84Cr"AVx|uh;+7c6\/,\SVB}P߼ޮr҉Vl=M#L2.sxV)q3dj,]W'ǵ$"v˳U=W,goο*) (H Q93_5gg}9dmHKGkӿI*0~h~$ A7usae)Bk_-).Y@` JPgUCFQ~-p?ʏC<5>AEUUet7AaWPSN4 ׽چ竄t{OۜMzz"}қxā>ٝ0@> \e^<\O6}0[+6$f !߮{Y@0>n,'O:ϏRs 9:?yr[ Hkdl,9O Z= 5{]pQ`=n|֯oƄ]|H2chdžtGRMUᬆIiC ^X%gJF#ʐi0y)p~:R_9-Q%?,c}wr^Ǒ;F?OO8,Տ*;ЉՃzirȓ8[0<՟C浨f'KJCL⣙4Ug_f[,&<k?ZьٟdRMN7! pVټWY3{s u:@`D돫NaSb.bywMF=B 2Է-IH ƣZ[j-e!k\MPu\s7 ΐpB_QC287UgFuNU|. xùj`}\ӎd p* %eOe7B⹵|qWeכr_{b^rTӛ@ c-'=/fGK16ͤxL+XN}/qqrh\up{#<15?9G T8l21j&$5E%,@j{QyQ9OzKՔ7cऒݯ;y[<PSc쐠@k HbV' ۯ ш.\ pKsJ @Uie ]g_Yqh`ste/6$yu6|A3;}SO҅;I%Z2omqBIn=-g/lↈo( j8ӗgY ~J`̫h`Ľ&ɮz?o9ikoLK"zaV&UV&J3h:[eI¡$ z۴/T,m^砺H]l^&@@` tN˫v\{ԊG/z5LC΋YRf= b:pŢ;ye08;UtNijk0*V |0/ug)3ߊ?&dV )8# M$J1| F'шq¿ 󎍹i5CvdJ|a6GdXeVpKL?hYD>D-|ơGen[cͭ6l *ltXD"R#ݤdB 1  b4<# KF;yEҜCDd8L.z2~ Qc6,NQU&o@iHLD0s7'DԴ*["72LczÍ3T#hGj{w8f7v>YhAJXX,kA`,pw* @*jƮ&p(2ZaBFVxiU%F2{]È$d ƛi2(8 TQ 0 1X⛣ɍ%! vc]n}h>;ZfĜhu:]]_ dD[t@Uii:,p1#8_ۈ]@%PwFZUelj})knDC"jP-bZk/ vY'QUY^U)w#i{gA'=!Q` `p%WJ:EFX&V K+;[Y[H-rXe-N$(ð֢6; hXpBLK PA- pA{GRʑPzq /Ѫ-\V19 3,w@;,q $p^-Cֱ -i kт\^/]{ %ee_Α. 53GRj ^ƸfXp-ܿ6E33Wii,T6]-!w}{ ڡ^.YB\5 ?`йU|N8ۧťx?Y_ݦ%yxQ_/\}>\8U@;yGOggS*z\s.Vi^_b]MT_mTn&XPGDn$Xl*|L r" vDHe0JBc"' VpxP U6cԅͩ nCg &`uG7<yO](M+0^Jg_A6n{  ]mBNjDH<][H%UnGr{V'3.xֳT;GHf6CFUګ3=_{=q#IwH/}9ְNY9{ 7~:;UHwHDHr][] Ё%BFeo E#LooYr@pnMj#~-]fyEq3/'7k:|n~aБW53 8x:U 74:9 :+ZcFfnX{FmHOSiK wd '/;+b_moܯBJi;?{_z['闷>98?w܅h .k"m47g#Ηb`PK8/{˺XhR΍EӞ*0{z$PDӂW!g8s!iXp/k}5[Y\Vݯ EǦ"SS? YUD4QՋ'D'X@T) pZ\R;a6̰r׶W٤, V?gcoS*b ;;U޹Ǘ)&^}r0 irŜ C^Y=~V*Yw.a{yC?ĉtMRtk5<~X뵣Kp0'SM[js@ԽQƚPB_rAWu 离4ׇ>9qpTwE>; O 0̘&}5nU LU(|!<; Mo#0 !Y[))¯{*Ā1mgs㘏Ρ 8^çGWMU]/1uR+8om?=ů(9EUz,ӢkПqzHhvqkt(y|Y/wj{l|sѭbiFT6O$bO~%ٕuLԜ@L}tK#e('в~Dip`=Xb ~ott.YW{ٻzgӁսuKuuǃ={t(.h^ XM{Y* YB j΁p|R&4kp 8΃">ufl[w-.cfDF&5b Sq5Xz{CFduP+S m.LǞu[ \Uv^m{^xk4t+zH6f'\_I}}!07Oe `?͊1Lpu{<裳};O/_8a !So~:L%nV >odw\O~l)X"$p˸ aY?EQW X!i`T`^7M9/-Zco*]%|+E\} O{nrT"/@Q|tS%LT4٭=~p=\NpitÎn|gY(&-irkYz.ZFZvw:pt`-#fwO8IR_Avh qlMm@ S~Q;{gyR;ü__㚦'~ɓ4\|`i׃e?tL0J Pzgv{ ! ]%#?= M]HE!au@  [#(Łڢ!I+ #!M[ےlkV>~8"It@}v~a;;*y,vz !_m1tVtfNn{u)AS yj`6 Ǯz,xzWC@FJzz?XI2_v[" ^hź*3:8<倐 OHޗ-o״tBjy%h F՛c k)XzG2>Qg!$OF chmC ?];K fDKʲZBhW?q1H(4ж!ؼG Z3A"uʢd՟οt< ]*LEF{na3Cri j娂M@}@`y|y{x OggS@^z\ eK8N]SXa:;@@J>=.*951^}t3M᝖PDAвA ɲ`>_Ȱ)i95*%㌮}[mɐp>-χ$Z#tNb:g?@6WvKS8Gwz;gt2V{HRyeiY|mއ Y|JRfVmUz79RZT?itvЎ/e]QԉOߨ`Ao$|E(ފϮ[E_ΛSB27޿B\b/>gW֝a`u_wnV 면wi;8Z[H?CTDD 4"* bPָԅ#֚3QdAH | 6y_[4\دov&Ou=x~r؏D%oE"2|5ܲ[0j]ubJWz!++Ih@._RKw~Sq̶u3s}:[ |6rBbyz#oJHPbPѫev>H~ %Gsils|jM=CwTD oY zE̴nH4xe6n&_i w "/UuikV5, m/  `ud V \vchYVڠ:n1q._^Gh?Z܀V~%%DtRU  ,'MlASw~ݓrP3+ [J'ײVr>@!lFR3bpC*YI=Q4M/Ug\aqo>Goqx;~_ XYk Ư_ח_hd\\өzH p B 8LSol@PHHdͳmI**"K%C8Vv_  4@Y06,XWV7#,-d]3MB Vފm9V젏!Fe2UvNX68z%Uͷu&7̯Η1JWtwg rY|7۴oj1>Un]A>Sy2u7/^0quXpYT0tn&jX/.X_ON-d߿O#zŵR-ejz05 W6$ !@W&@,RfĻC)oKY`6/i}8~̡( y8$N vQ/L췓s¤frjY"<ɐWu5q"(!k~m,J~Bo(<@2c/V:lgM'LyુLs J[N>A:[/v*U/ VU A6l]ݞ d@s# C" BCAFa5h.肣[k@fN]5:9CPAg]1ܦjilU>Mgw"b<1ThԎD:t\!ÿ}5sܒpnXK!fUtX%e,8{e8ZF8( '@X 9_ІpT#HUJ MI)!8X@# V/jڻjR!BeX̌:\QYc2Β@<z@1pV6b.j0AFteBaYv;QPh¢s 8 0- b=oKtUvue{M`&fy6Cf/xDY( 8@WIdߝBpPT +%X4fEz9{Kˉ-$pTU X/gQhiI!@j "*Zz[FYr4]Y `XsPljɂ%O S^*`)R"h8h`J@!JLHe |Ϭ KhH, dfגPD^?z~73@!|[<` JW+ m e/j ՛s==m zh?p Yz'\i2 T_g\$ca4L~ز5y5;CrȰG0?\1!r^FI.X*F4 C X&@~ER1Rv.W.|`R[N*hU(89\Yn{ ScH]U1si&NddY'mdr?t|e5L9~=8ncNklr*HTP] =i(EB'~?޾!aSZ8gNTM5 9 -m;:A1Yaߙ`xx+\P$D3ӻƵ"\3m۬3XPρ;k)èaΒ0f y`z-̚E96"z =ب8>wu.\:X5sJZ3zvS iutbQO/6@*[ynΩO[/z~:-LP39d뿞 eN~}73<5 GR|7kϒN&3U$ ,|`5ig._9XRΞjA- hAW8FYSM@uo yD[yǟR5dO"iҪ3GH:Ԃ6gt1 h5b%G $Ǥ p,˱YA.UUB ]H)MCn=]u{w<|eCoy@թL毶nxk7K&70Gl^em6oߍoQ]4蓬ԋYLсߕ&G7w d=Ir꿋=F,rhdkgg ̾%48g fgop^CNTA&*2VR_+~@Ê-lCځv0@/LD ^cUY<`J ~x T>.0Wfow }H1^ve6-\\%sb&#w K*]U_^Ϩ\r˧'j1pOv]R8IixcTg?799W ֻPn۔vmrΓVݐSSSWdo9XlAe2 ^rJy?ϽWR1sX3_I4B3";%1YdJ5w:ht' 7XaEQA,B h 7,lb $]ﷻZtOKU.RfXmA/U1DL)㪨X@" Y(XF d)Q-. Y.*o/K:?}mQB 7L)”2< KaB=`2Wk=DomXL[= E {@vSKY{7b:gaVi+.e!(=NiXLe`Rk;-g਎!)O(m XVz dBxh$X *1^hr"J’C ! pFA(F>āiaӆ "&М(F؛rKՊ!_|(`hu4^{ 4|YK@~ Oi(qRNsZ\F()?@_L j> qJGY82`8V9) @Wez'~Ş"Gn _afKO$bS51#P`()JHUIuA+1 $QH%N#.M.hAP@ EٷG0 ęAN;X&f؂|C+0F*n^ĸ,X3U[+A^p ;Ҁ5Mi H^gM6栮;;9~R-$E)RڕR^5\stOa85 EAJ%+uJoKlۧG>OC|WNw{g2Ì':qlPp$_ڼ@sO7_z륅.Q[BDJX̐;ay4S,h8v}+0@$7WsװEh 0XKMs@E! @d#aa2@(xfD)h!`^-_.Qc"W-Cx;+~`0n#Qu|&p\v;RF`aݡ{:kqEY~Z< #_軉To*adx)}?|oW+%nV%};>}ع՜讯`(hAg|͗l]ȯ8SXo=1{,T-"ܓDIFve}A(BMc216 ;EOr-N<=A@gO;oiEfM֜9͛u" 7sIHf=;exQX~a/r&"SA'_ڒ_ڇ*f{pC_՚p\ޯ'5$}hvyL~ lܜ[[9#zaNd#(ΑT߮UX3`m4HJW{UQAn[v-a HP%;;n- NӲbU)}THB8ciIQkP띒FZu}3Eտ5I)Si94'~DTCdnL-QX1kS)~HSLu:xgW&˩S?=ԃ'3z4U6tPkMYiơzDvKN:,8~>M񳞾nWED듹)Ör/mq~ΛC{a9pH 8@M; QUկmj|d*f6p]02 J/łiUS]& ?4 ~Uf[!-i.)y/fgj p_?[^TKqCKo /)3 8؟>]|ؿ7ѢS"F=e32_x)e eUw=2;ʭ d飯J:8]߻uIGg22dosմ'> /7@a3[wƽ|%iԣ>?iTe(c]ޕ=ڒ)\]  =ػl?M晜9+&po`CYRha9wȡ(_")g # 6ď6CTakq@b@; OiX|RiQWVs?{t]lAI*Em@fhch{s2@,ۙ^LSfrݨ˝E2}Bz=Fkz#=ADQQ|3T )MKA}q֨u>/̋If.eJ<y%{ EfWyޖj9^?iP{jMf)`ULVhvLkAJ ~ WSEiXΫRA O/j(*E3߸ k`o/N-*dGɌr%^ (tZΧ h@o$vK%@g|P}k [Bx;WO]elhVWs.{Ͳ5Ùl${5|Oii,aŬqnX?^I|6iJT8fݺوx7[4M3glPj$%Φ@z͞[,9 i7}nEr\)o {7>_i)h y΂^ǪX**ͽ"O.zociމCܴ\Z.|!!U ObQ5>R CZ(ԬE;a$]1,a1iyO R ә{Ǔ͍^.IM,qEz#å XƎӫE=88J7>9rvF `ph7](2e03ϝxޕ\faz$6_?t$̪w6:EahZftT=&gRDTOggS@z\ A9.ARI?HHR9<<;;B@52DDDQ_W1b1SUweެ 18}߿쬽l p(V~%[To $!J0W8܀?Y1 etdz\ߏTU f851ʭjg$So_Qziiݎ 3'J9FOCXHO'S5A9*x:չݸG1dGy1M4eCsDd/I[X}U-0sx:[$R@;qG @@k3+h){ga2I`̓@`eg$zIY!6vƍJt2Og]L3}h&mU-(BC|A+*I~ ׄ@+H9">R/4dĸWë82by35#aϳbB4v@s`CGc4(gCq< ,%jmiၤZq$?+os~VUHSNUejk;Qm%rFyi;^~2V"lzAry}G= nOcUE{˭x8|pM ]™,4T(t9*>[[7w5POZ*>:F xsv @Kp3ڵׯ^G |'{l ߿q^_@pP@lm[X ].XwҴ&p5c8p  OB Jj) OP[{aZw`iK7$#P)`W鈓bϲmrmv͝3Z$áӔz&jτl1 dj0~H'v9r ڨOTg!W[C .<"%_Ӻò#xǧ C7@Zo\t61T^ӿ<ޏOߙ%{^yy~^3ހ0A# 3tb=~z(2x%"O/İT1 DarL嵖 _Q#=1PصW<uYźEţ(u,M=`)>R.10@6C] iN2y()vC@lU}:G1>]P?g.S#IZ&&YSǭ_[L S|qq-8~'|vUk:sz+#r $gSyKa_%NzőЭ<Pn^l{Nݧ3;(Ho@6` DBH~aU?oй5nb*tި ?V #8H[m߻ITxTOW(h/$l6m#3/ނo?v*;mڃ79ŪXX~ыL5ϳN<>qz6\hsewR 5 zl 4UV'65n~x?ǟ#yDͱ `c@]  {LO@`!*K^GoH$4$E)lՊVz_5 79T2W/[V5Կon^ZVwj23$XKkV@2mWd|s/;׏>@uy+g`P8,\_ߧ>EGؽڃ<9=hai(jv|2{Ks&6CX/E;΅ӏY@dMsXK@G~}QQUK<ѠRUPDFmwPPWa&+rYi0  ۀRv`5ߣ@R/5{S|UBN`(WU @`uԢNn@OׯNB۪61x{89;]yZ9 *)< AƯnwd26v}wϟ~D^bO;93OEڍӥY )8-~S?+Gq;Ls?qKõxjzG'p3Ѧg76Qm2RjR|-0} toBY|>³R+rX{2=,Ӷ 0?p|fc+VdwxϻʟfNs`}]NΉk~噯䱚vY |rcS7Z>bzNW0x=o/@1_g8Db $4@{ tZc|By1KoO+os8Tu_ DQCx8|nJ)W<x{{wMn%gCb\]1VOa}|v#~ $^rYR}pv ӽ]i/]U&'/35oYn;lVc?5 eǫO3-*0\MAZA IV嬜7}Ԏe"Rgiܞ&k< v 5M&4^Zbiii까 )V3CT~meK"E2R,p&CZbZJ2`A;I "X9-b#fLZ$S P/fx+/+єcsLv;+FUoY3m*^UBՠbF  WHv` T`!0#~hTtF31D-qЃHصm#P,0H"$1䐐 j];WYKĄ|2bWoAd55<3,' U#fhŮERxB^ 7::;<;BA1!?Bs<<Ⱥf  (CEȸ/2621؊àþm aT\$ Jm@1C(5pPpa~ ["'(#[oG/['M7jAU XI*>:#52lT[8i\Z51rQ -3mD[d^:W׶\iڤx]gqW_CpI3r^ᢖ?I=-M&l&ٸ|tm(LiT ~|%\̋U[͠ 8Ye+`O_ 6OfO4Ğ]Uo9SSut'e H,{G.ήO>f`Ȯ<ʬ2 U:s1t(uNbN1:|XLE)} PTP(1mDbi<{`*Z&I`:x{ws3coF4«(~g0F?3^G(0|' xWHDJ:A2h`d,jkA<`Ta$Z~'=i^Ğ Є,c voAm&ff_y59~!9w~R ;n hKɾ, .^m;Xyٗy0*vagu$Eb^LBqfX^ f:}q}ꩉ8DWS$8H4kIO@_tЋͣP=cޯ MjM|E7$/T_h I ʏlKBhЧ0!b~>$֗pZښe(X%$ cN $q#pЫ:ERAox{zq m g 豲Q BٗҞ_|?{]nKE~CG6稠LtIZm ďqTg!pyeYn ޝϏw'_d`1xHGęDɳ񊝝M7Mf9;; jf5Cփd|) ^ ^n{#@Ȝz~ A^uwtuxe O"VN >z~ ,N )j\\0 )bӊ 7Hmr@%JmmAiYu3KjTRhX*#33޻WrmՏ)~~,jZdǿz߲Ǵ~ݾKʑ3=:W5%324*rrL 7K~INYD10L,Nc䞮WS{_\(tS asG}$5@KSU&[N BweĔ5<]jɄ H{m3Mo~M]OU9_|yߌz>qߑg{2hk=' m&UާѨ\ksB$ð=`N֛\es1ff(ŴFq guWVk^ ; lj۷C՛q[ 72[frPlg3g?[f}uqˎTfaHЯ{.v'7iWޓ\Wp*Ia+^_o: LVe\ ~^}B}l0eڥ)ӵ"ivs9$?fUrtV6tzѽ ޕ{F zu] .=Tg_)M˼M2bn*nuTbۄv>O#0 ۣs2Xu47Wa\[k n=WŪzeeխO^ =jWo|L:t~Na]g?Gc䎑u+5c2rڛ&̺(i+]ͩ>a!hm;nnϺS-o92C{R*L& *(1@@=9cpըX%@0ru'n"T t`y6f<~ -_zÝJ j"F,$ ܫ ([ CxoYۘAQbp⾿Iq"4IT1mrۓ0MʄR ě'Ȥ'xg&Ef/TA%b0YIreѢ]84BGWE%$ {J3h<\J s,6/mK<@!!  f^4SѕA/,,lDte䴦BfXxbs33+UkGb]S}@8{5lmg@9 m^47">Jzapɑ1Y&Zb \#yS'V.)ܗ[䁝ULړ+42 fignTB.?N,T"c$TwwKӡע8$ ,~3҂9M8iZ_CS LߓJc`h﷖zvUA|}uaI)Gs{8#>ó[~*cg. O2[%3(XW)hUBH)aR˫qlÕ?X=\{kLq 1WTT@*QmW^m[sױҹ{LJΐCt>Arp GU?}f H&zZNB' ξp@Z1cM~ TjFYa#S@g6kHT6톚 >ȧStE̐89lſ9Ԇ%0k$w)%2Hé-BTǮ80|Z%#wZ?đŒF  {wofxQW%Gj?]WƶcٖT*Pt0u@_wX41ZiUe_GHf̖K:t$zq[1o+6+ fYJ;S 0iRc7.zy3ܠ@1=M5߻bp/Yks~)Zp"f L} _A yT4 HhOggS$z\ DFA3;?=<8;=C?;&6PW^^o͞wt!-cB0ψHL6v5Cu` RyW4=Dm 8 CPQ @|'[Ӕ~=V3uтUU h/AGF4 W*]`\o)K~|=J)2%i:_dUS gb?*SxYWL##Oc f>y1I ]K"]䝉T6oަ Úu^=|ZmX7 +ŵ+k8|Y$s 9T՜tthR&k+Ltqog1߁L$Oq2A4:2|d1b^U.DǬ8rKkipB(8{WKK0,mژR>SA5O \]9\i@J&op(d<%.?oӑˊ2a]\|9Tz Czi>7,f!ku20d+~>ur̬ Uh=.UfS|*rclBj/bRR3*h9Fm C]\x5 1P{̈́._Ž) /ʿ7{e:zm_Qi1@mU},Jr3C}PxGOÅXxkԴad=x3Ɵ?"&Z4qϏ,N%l%3n+;B;/ǡy#!-YCw|gջzi8QlD[_t:/귀ŝ{!#!F^w+Ǩǫw% 2 ~q֚Y}XW`EVUŃq@1EuZ 0GV@~Zk.簄n2L;tKHj;|ZoIg|lY\S- -G, ]>Frfg|MCTʯ}5U^Y 7_!Ȥ;ǯ`ȃ-z89aHLV>nrW9h/OngPf<  =V`w'|OgW5xɦvY17'rkKvENFVZޭA.hHww.t9VV(:Nh:t!1*ƴX>{ j2g9pj\ B dR{*5V>j4f`'eyy١q<_VgS.@ =iogeZq▙P*yzz)g1~WKaLo*MP4YdR˸RU 5ŏ|, 32RζɞC5qO0>H^PkQ|Z%afR8^*I'bΉ[UՅ,Q΋l>?tЅJ9f2"`ԐIV:ANլQTb&vTjy"3^gjve/LOkbLi];2IoiYn;5Y B v̮-ӝȲ AZjZ4Y! , ,Rb1P KM S8Q pn}| h5,1iiS?m2$쌩g]aJarc~赂)I|@VǠ7~$K`'AIBR:MGiUЎ5@T3rO65MAՕZ)k#ԛj#8 T!jYxPdԂ8:ؐDKCG͈.25kg79*^UUe *p܀ZI1q !\ h.us_=̄&!wV&Pd(L,,A42!/3h\H$*M|-hWح++FqQHq3<.h' Er) .!FBx*F Œ@=/F8vSR{P=@ m@m(85{.9.{1",1L0ph{^ : 7yǟ8| 4s}ux#?wsmgxfKЩ*_-q>yGio.=donsR'yBb/>jHX.169K+~q]AS8j'sm ӻ:E=O_L ( 胊7p^SLD,Ptjw6<Һ- y\_iRV M۷瑮#R?cxBdY FP@/czqt1Bk, Y<ڄ$zph}*i# ӐX$s+\5t$GS5x-K?Wa@qq*x4VR)5*H1ړaӗRz_m3܁h1Ziі)L|T߶-kYxbqECcoܽkQX~&ly ([j8 ڃš3#iLCPNu8ƌ;H k=\uq}blW}K;Q}P6_T/m\A;`Rb&7:\ D@0\ؼCQZ4> ~[-jD٬r?y9E o@@m/$MnԨ*[ᔵ;V`vGn߶ah~tv|=\/e?{E/;!:{u|BPq5$O}&#Ce5L+u~ݪ dMM/||1I̟ɾM٩Mjzﭿ_;huW*<̃}LuKgn\ޤ\Tj`/~qe~]\՞lH v= @"͞łR ؗ |sSdltAE6+@8 W-.A?N2tP/DY.ԏQ8]G gtq!TU@>?K4c/Ӄeޢۉv4z=>|py~dTՊ}:i8HViA=J6ݻg>S棝4HFo/ggc˙$9s`M3vpZx:tFDL[D~o$N9h`K';7SV|a`zR;d\wJÚEXC#+&9`'! ˌº\#_PGbƼ^:  텁)$AA 7p&Dz94,"J{=ZU6r M:ynv,lg!8>7F"yQ~CBʺM u\^ s@|&k1 Wƍd-xqp`$w]ozOggSXz\Rp"NV:<<:8DA?(0L5VHWQ<&xPg+@ҞMPZ9%_uFrC88\Kb_TKwn "{\j["Ciw/7=" 87+RA ;閮as0fl"!An}ۗ[O&{ww7E>@rKB;!ab"֢UȻz C<mq ٧Cgj~{=(sj$VUU r"џ`Y?\R49=#L)m}j?+5f ޙ~P`F`z:[%dXDp/m$[4$ō m33< Fk4o}uK C%)@@4QA( @PȺY#Xf$v0S / )ȓGh뜩-|Ӕ\ Xo>Ep 180a}ȳ/? rm@YE dDvf@H ١00*~$ ;`bcv{м:Z@IVBgzƥphصAޠFU70h/pvr RɠQ5 MW!O[{0 ŐPBEd"!~ u_.rc#7.$Xg},c搜;z[M %Z*} Ӧ?>#CMQc&l&WAOA%~"I|q0"h+.{G,0d2-@<̥ V-ہє O_堟o7|qc h1l g'wz;F77ẗv0y :8p-e1Ci%^hG7޽_Q>񩿭O_SH6#Ѝa;^Ӄɑ~J$uOb#Zל* QO5X@WdHd! G{n+#c(VgS4o܏BAi=z:YI)9!$$%§1VdwXʃP|8x.߸ŧ_,чR2cw?yf8zoLx_o[B #]Ӝ|Ҹ-]SMۚ>Nfo;&.|᧛ŗ[膤P4s?{}20=%kX򊝢]4'(NuVJ`g~O,=OzT-QKˤ<p=Oc`E^V]f'vn>O1bTHo:c^. P*f6o#ka ~:>ȳoŸ:U-ay1_bJil˖uP,8 OpXDG p&68rmUڕ_5xUC+'T;ɯ]ݺ¾RKlRZU9 ߶U{Ls9nT27K4// },G6)0٫_} ,%=0ǟ3=ul );1MBKBx@:=3:M_ EspMva?gn  &QlmK{ s@i |'ٮoɴ<㉞]`# ?e *W-PÙQEȬDӂvÓl$C (8> _j .AVXt둜[?mz/>q'-,2I޵iQO!5@?s;ق-Mn|sf]mSr|}Oif^Q:c-Y0'~?_'C{ӿP$YG{) ߠ&$(tz"KO_= s먥K$y\{yn=9UQm]]]M&NZSb*(*"i[q]lӯ@Ň-[*(+,N$0 btOV_e ښjV5J*L°M]mvyq$''f약-nٯӾ7lTp8{nhY;{R*%|} БcP"e"$Gu\*RV }eYr<^&}niqC%e`xcd־KQ9LXT|pޭ5|߼ne0ny<;ѯ4J Xh,x-dcca\㝚h*H 0һy;ɾ"Z S@3¦+"Y^ցZ%>`(;n))g^h˒ +PUU,oPǿt洱he亶փ._Qo12k6cٟ.] lW>Ys%Q{lE9MG>9b.[ߓJ=㙴}v_DR031'>@Q|GoI9UJQ2ga0+~@T~rfIl5FKǗ*dg𞝫0}6tԣԅt.}x| (p%;A,6JpK}%̺.BeZkTUdO[gzq.JٸߖRKwKVL[^9,4}De`^tl<%SWwoʌ2wc\Z{~L&Zڢœd`ECym^4"-._P]\`#H`L:~-2wMA_#HSUZ .Lt4X0t0QfP-a9K[j6Q%]dY&* pq]^y%[V=,aa1`r<}& nZkhUU!yJC?oÏ[v% W,QmZJ·##Uzf3Tms:l(ò>fα i- γƈ}M g3gF@QOjlڙ/_ףۊ9m_$`jꭾtx/`PǝSZOR%8OvfC֡?!3䢠( ʳ<Nw :;?W=XZcg.%|J ~5h[%Mp?,vdRy瀽ZUUU@WwW$^xتp6Gχy߼%e?|s|I((ptaz-C%gW~_z9==e2֜+T|%ɳ9YUuIe ųlmms-1.1.3/data/samples/bassloopes/techno_synth04.ogg000066400000000000000000002050571247673406200226060ustar00rootroot00000000000000OggS|\Xvorbis"V.OggS|\L-vorbisXiph.Org libVorbis I 20020717vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳}ڎ"ۏѳ˺M78NyO8yO?NN#W_ߟzy|yzu}q^?8tr99ޛ$vVIeV߿#?|VNnMpm91GG|sS2F:dIøX #Nܵm?'s/h"O;}Yg;3hq> ù Nf4o3Ǽd<$m2zIGLs2dNK 7M5:eY)I+O|9?õ6{s-(c }[X~*7/aׁ6ߡPmA3>>vxOOۥlfrIe6˾wtn}`dTf{Mf|L̪b3#m}b&FRG=S sOtkVs%:}._?ܚvޔOrOJ=ȳ>W#I<@eoJix|ì9姳I*%{E5ag;tGWh~ ۯx nybB>.jMħULnËTN+RҾf?뉧^.Es߳бsHKfZVg:WOӫ훝C_49۵CJr!)ԢDB*DdxZ*|⨫7,#4N :zg؅FClmb3y2$nʝjC/2sai ~ZL skfB~;so۾| Xk;/We.jv%59ogO[ \'8tȺ,}ϡ7sgHIO߮pg- N׋䦷^i.xYoުl- KxNSww:-ѻ^{5;zL)#z=[{ia=_ȦOWk~`dlx{{hE*aѵ[#gA;xs-X3x9STn;Чf ;|]nݩ?By}kH}%_P{N6`s0t<2ecW:ME3Աo0hSdOT=TUԣ͗>swWz)*ݻqxHJco>>t O *SM x/Ըhe3eт=lWƼ8ڤȺ6OQ'CwѭI/yy*}˹gs>M?W<Զvlul'>]Nl&gͫc7&Tb3/YFzc>;GOW}Lvwmʛc+ヾW{$ 7UCq86=/~|89tϷ]lQ̷A>c0pT*sA{U&ះ΋'ߓ宑[OfӢeyu8+;+.]ܳ\mb=⣻_±[ֵ{uHώ;hfwkdJ19=4y|4=g멝jGos9~|?>uc^o\}7ӤԋSc{+"7[{Uz$1iޜ>~g|zܟ=qY޿i\9q^UݾOzOWc4M-3Ø1ctcMs9ϴèkzލv˔dJ)[@@l/ax`$OmyK֮?9|xd w+[UUu2mY _>?Ug~~k%=775~8J\{t["77j22=3uxVbl;0FVIzƼQVYuN˟pl25:|~~#]G!RDmKty{iS+v83*n׏;}4vXaŐ}(0>7?oO~e{~>2]^ۮlx೽`^Y?&O5IQՕF~jՆY2Yo+|B[6jm_9-|aLr>S yuT[;\ =90=rv尪j﵉kkHq3|yNcxUY:l74SFi+Oٶ_8Ő}k1ۅssK4vӡsdR/!4YaC1o*52Iasؓ\#_͔==9>5Fza鮵u`{ͫW큜OXoUUug>ZN%k^^jM?{M] ggK/]Nj MfSZCҫs3~!7%BdMgì릠cGt9WT%]J %ŵ^%5,ԗދRɳH+#{UUt@uw;>iiv:]m{8]zjcFwKnyt٦.kZߚ>}jj̥O-f{(zm%NldRCϟY|=FiX'}WqqOggSK|\ĺӳý tU?Z:8:}U)y2ߢi#{[ԧox Yğz>az>}Vf[S)z^qlydMWS5C۔2syݔ&±USn;:{z|PާY&iIyv̡yq*VGwVˏ 4|Kr~ht8"dweg{?fqX)/ϗx8];m}n6z߹!m&uʴީyXpzv]F*q)kOߙ87ۏ}\UU}){,Vv@i3gUO={%j*n>$̗E飃ݩh۳omyۏ_Ni9{SϲNc[Wn7-YuQBѭ|ʹL0?t9:wSs}W_ڳ9"#.9nBG=6]eoz0m Zxe Z0Ln#;vCN׆轷|O}U=67JkGմ=U?nJ~ú!i!gzS)l _9M)b]M!n}p,=ڳ ٢*O؟oʓ6 \,p說q&WJrx-u3ʛj՛ͽ~qv5IiiGH[߾7憪צpȅ_rds/n;lTյrNuԻnw,e )K<CxϭO3?}zw8-> Ć5\IZ;N LwU{)>0O&O|c=󭪪֫ͤ^b( n8TiG|H'}isfTO}>uW@qrag܇[d̵͛zJaYׇ߮zӑuRh2jgYݏ!zz9,u A:3 :-j;?7҃q/UUdzrXw{ΣgRΔ\`NC_Ci^&>ǎ9n~TO]ZH>OS_3Kqh;{NL͕=u'(ctkJ;Ԥ)f9=O2oVeLS*JHCO;ru!nN6->-].-~g1kepm}f+wą=8赃^ggo\d?nOsaz<]ǟr՞Sg_>yYz~o2vM>%ɛw?֛q,׏dIds6ci؏$il~휳I:d#CFzMp=V<UCڣ=8x;BSNmmw/?>:o>Wmn:|z{A|f+.$:Ҍ>ulv\Kía_9gsձci̩}>FvkIgH"~ٷ>'5Fhfp.=\Ek1 pqHR}f.wshW>r?z:믿G폯rɇ<499Dߗ|3oOiciG@wVڃّzm08dB7fqm[ی|;K:ݷFپMf:4.Mf43MSqCx01^sΤ=н.rr~7oOmz6=o/?{1o׶g_~1yva}5QDǻ8~5g[7'rvrz|686͐ðݤf&騤|i&igO1 /2MI#Ltcw[TBi5G5 ؄W2Gx0-3x^U卷ԒE5i.ROSk&X' JΉ/m{z;>9mJ,lMAi5Z:?~o,ۧ|E앱#PΘ\i9.{d[SOs9[<:gwC9iiri'X|YO&`l۵ah+w<}F_EJSIfE]:æѥB:ws #eƖUB3͚&aeek_L҈%K.9u@GI~'>GޞqUޝ甅~w{֬BOI/[Z[|>6c>nƧ5њ>}st|Ѷ'"nZak+Mt0EfEKjcP4fnGfUh^#fBYvE;JԔŕ$He("_ޥUږS{蛵pN~v6usnusY(4ɧgo9ߦNtWvni5tjmy7YL3=tPT+JFd&Fl߱C0 /)ac>o}$ʈk7jNF{K2:ܕJԔc 5ZIVo/n`@\fe ,\UӻsӇkf⼭ē5ĸ!-S.ɃoMg}^6Zjw˨sYJ5Y.wazf}>Z }B!fyV-VZps7cj& _+>JEiVj I+ʢl~šdۙ<KMW*;%k[G"&pz {5[mqǞkZfglܞt5E=}F[e ,b[whXjcU8ң܃Si.ezrәaRZڣ Y@Z#6i݆f\_3 }F=o}ŎB;N_.!?$?κu;MlynϾ+mqvmu+Ac9zţ#v+?GF5̒}ELo7:szdgh(n,/ :DQ JF%vU~zI3ìU߾x1.}X_Eީ;.7}-oۏ_:1BUa/7Og_٩wXҜ1%6 ym4ħڰ iJmj;g*Ėg3an!-rY`S'BGUX}oB.ZRe"DD)q^?zDq YHugPg޳3\믽')]so}#Jr[5nnP-v7dҒ&8rN/=ٶy\Ǎ09_y>z}|S) zossn߻vM-<"k|A1TH2vΤOKt_r96Zܘͳ7Ϲzcn\CGk>t}AG~~w}?w9Vk5w~mnt|Z+Lq{NיgCo|v Wlsw.7Ih֐ʥqiّ=o_sFc$v |Sg43á阴J}sMDV{4m6}3mj,ZDF4X7soin+}*f˹N~ͣw|{nox5}]YMbcvq j甕=ig[Cԝ^㞧c?7N!ϻ;*uR3ڷw̾u:ާhq:7~2d&fhCfOSZwp/Ժ5zqIAܮ zK8Яm7+rp,^.媪ꍧz/#Wyetkχ?P;O77_HuZd->/VOKMn7^OG;@ݵνtl?nQ<{zݗmڄ멽M˻_kow08mgh~SVg:fob!uqnb?4c{ S42Zol #tO/f`Y׊,:CƷDF(,O-:u;_>߈Ɩ6>*K=M7nzt[u^tbN{#ݕ_֔YwgNoO]ھ&̏l٥ǹ悇f%קJ,52yYqf<|}%X.ve~~n,S|0b{vS7<6|,mMRæY՞~ٶemvΜv݌+2w[r|iMi=yёRG{wϺ ~M"@XAOwrJ@ދ,~L$tc^VUU GwV\)31}p޾99).^_6h%ʓ߶]]e3'S柛דq2y;oQXݘO%N4{_dz:]w7ן{HO5R 'ґRcz5 ~)N8_>H]G؅NΓ2ե]/i|ˑ8>5W{N/{[0m<#Ş*0/);jr;&M%=ͥ676c%hΥF?7m't~|~ܽq0Uu5(6Z;@O\7I>镞{g{j]tr;rr$Ӱze:bzs[{5dM)Yiu^!q[*~v؛|1^)T>ktSKW?wn?eܥӇ2qtM::{~̋939Φ8gN3o:vɏiH?~D?^ɐLb?gkܥwݗ=}1CZl?D8x{+sKzi}[r.7|qz6{C7u~r'9}ލe?,zك?~ڇNfCSɎ>\da6<;Lڴ~Ύ9K<9$_T4ﵙmӗVDfԩkfVǵi&&;ӗx^dvϞ퟾ו; лg끊vO?_n_Vo_}DO mߟ/twn>76Ãstxh=h=>̾.tuљ 2gz4hgWg}92?KК]F̶TjZmGG}%OggS|\/۽¾ùϿLt-CvYI!qWu YUU~FR)ܔG`cӺjd2?ݙ3Y*[mji{~E]m}w[tz~qǟv/|sӗv;)=3͌Yg>3K$79KwX+;f̨f=zf6IGةӷ"~t$^:ԒRje&Z~-qV3*diK( :ޯ{%OVUv͹;A/w,O<87ﳍb]{63Mw+ѲVm>?ҹyJz(lv BB˕czdW=%Zcz>~7:?޾w~w:3]w-szCO*=w}OuZ!KJH-*Ԕ adAjт1D:OeS++gYL/WNEӯ@7v^{xݩjAr~}^עMּg3G/ _>~ZTHZ{7p0Dz^M)]Z6J͵LJt;;%Μs)zG^;H6m浨4wqݽimG>ijܢ2LCImcJ)ayp턢ǜ!/>UpvWSʧ{9VSӶ1kF~&(coveHi1sBu|TϓQR1%-+.7ǞIrfv:tNz!E $ag _y樂3^U%<;hG+ޕfɛa^V~<l/e;.?nt ۓ"5u5ǧӹ._۾cꖹݦ|sHoy<1_0vdB)לBj?sMdgcY_{_DZyt4\>6-~:D2An sA.N ir9lVʜ|;V=8yG@pZ^t6oL>xkUuߣJg_94ٷ,efG/ǭRIq[l]1Ny[d\uK^9V?/Ӈ¨=/yJT (AlFH!(oE0ʰ'`9,窪;roy{HL<ٌaum7=G~熧]>NojswϮK6te99ڹ?a=Uwq#wa:\nR3z0~̭12uRdwsV=S8Cl64&{~X|frk.6p;.9*ԍ}ֵ;%×.t/q3Y:NS_>FNy;4o3e\<  A띩yc 55Ԟ_x8C5uro6ɚY^/!b{!}w[]llWӳ}r;Ý岥}s>g5n%ҬMKN]ޫn"ieۭ26^*1kXj]'2?Fo8yU4=WeAq[xr_:=8ܭ ]N Dl/jwd}ݵCo%m1{u޷}hl}zG9m3 r0d_}ݱ9uYvCU=o[뿵b̔ozQ/*\iEY=RTFYFVJ.DF8Fek<_U} ?,W+e8_zWǕ7sjt&W/O:Moy=Դi|Z1R+|.cGxEWܺxE[s=r; c")gp0t}{45*6anH<^X2>;Ԁ1T1%V2-ȯ2IyZr=wn=sN|,rWϊy.sHzr*Ou8}B߼ f9&J@io ӢLQՊt覯K9U}"pMO)9E71}hw9>Taj7~7g3_[JlzJ&i>~ntv*ev( Jl?ma:dݚ{(w,>V;u6>JVt1G1pFGn<إg7 XsL:GɌ(ꗭܵ=KGw;UMo SzZ^=i_{6;ç!V5_Q7>;g2ߚ t>n|U֞2[eoxm9sg=߷YJJdQ&Bք \4? +}UUZk~/G<2Z:zOu ->~{Q{}}:u=o{sۜ.7~|>vwi5knڻh_N2'ݰ|? }Aج~ZxٹzQNWw/7?߽?.~yx^?Б\-<'n%rrͻ{O 3v7<)?\=H2e9ی>f5^}\Gs]4~ss<|r|>=~]Bܿ~ãyzYv~i:T5_8;bgԦCӴ_ 7_npJ>R_bc7T5r'4Mn}k{ͧkzwB}i}i\'ud_O:MQ[{([> DN M?DpB,p\90WUUvϵխ '=x#Yn_SUUuJ\G}غ!_A>"uu'^[ܷѯ4Mhm\C+xng՟;꼾?̷nNy\7yټSNw{(N&|@ʢs UX&@b&_8+?:a*#6mɒ6ri7_zqoO;e?=)O񔄧ڀq]sݽ>ϏmG.;{5}}8'߽Ǐ/ Sw[;>N?fe95UU3qc䇵{voum5whlln4\΁nCD@?h)''mj>~T}ϐ8=wʡqX4ba!K*Ps𞄞:۬nݾN\G9^)-asMhT#zpbq-G?\)sMJLjҫOtuo#}98ۜLɸKD-J:A}Ȇ/Z^Miu薆1uO8k!.eԴ6=w}9~=sI^\L0̮fG=$),\ o\*lg+{'Z~.J+uavHuD6U M|lٯn:)OgdaVN隉2bb:pcWKj+~=|NًڢߔhJB r-ᒕU-qx5=)gLUUoveOwrm$+^ wxE=IA Ov|IKFߟ1dOyˬU,5>to*"ff5xYjiK6$ )I_@n&0Id|B߇1~O\ԟ/ңlG>n^}WW~gz݃/~Ɵ}:*/9zߜw㑱0\|6WG:;uwܥ8iɑaS=3{ͯCf*?'zػ9e,Wc*kL^lƑi}vzW<8[bH:(>o/}768\OCi{$1KꝞ;Q:^N;&d6sI} 2_30i%k4g T9YIB@Wg~00%CWse/wJlPe]ڼק6aRXV\?붬 uC]rŷzl<S|ٵ;G;㩿Ík(:03Z&ruSR6p0Zs>dk; %4mjMRJp5$ uEsv?13ؗ3UUgf}7?&ʏӘ@oR=[Zv . [|هb>gW&Z<"vgjF:BGzTnL?J{ynn_y W uK)J豺/ݖs >TUԼ =Kw&_a b}b* 3zW~su_M1 Y`b \{KnI_9<~j> AiC?jdE%K oWS'Tkh.Dyn>v)չRVyL ؒQN- ڥ1\׌kPʚiLou\Az>:JZ^ợ=FpHP\>X41shǷ_[:wlv_;|KV/m5)|,eMۏ:sehיew}ٲ~O'ծ/drjufb49>˘2P_ sy290\Mg/ WU]*,_|n gz9x{yC,go[}z-W6v>yl_[nexj2?vMvFϴN*շ*pܶxgnʼ|5\id1Y;[:xVCGӽ> Xͦ1png\ğNƲe[K{,#㴾Ҵgt&@U{ݷ(ۛM;Ƌ?xu5 4Yj۶⩇@ض%*f fRhU[f~ɼ{/LLE*9dv6!3SmnzYSv:VJ؟~]0G7(vU=D^O13abɿU^=X2;sW7;WU^%ڻaB:P6t1oQ?Gˌ)XW4h㾴*E2D$A[Rϭk׹{C^Nn8,;J eƒCØuϹ%~+ņ}`N:z.1Tts-QɞhM\5hsQ, [[a6v=^zȭq:5aa8H!8ʻc;bh)s%~;OggS|\ݷƻû .7hb*Oܩ ΂ז~t9WU,wG8]4x>n4om}^3;:L&%˖A牱w!&P&iƯW/S;[{;Yn;b{^|wt%_k,Cf[gjȾ @J,GHJ"gEv,^h{x#}2 `އ ^힞4S*uSчL˄${{k^1b ŬdZOv_7nm;74O]gb~_w5=];B?<ߞ1kl+$LiE_sC2َ|׫j/ZBJGW7 Gϝ>+Woٟ_Ϋrne$Wii jF\'M@7ZtHG1j=Fɔ>y$v ϡ<׵2̢}.CR_.}?Ƴn~[&uMN)Ғҟuy_U:Yͧ}"/v8+S?l7/ls9BϏrRJMOOiR0ݝOO{|_3Ο'ڛӓsl(eV"~gkV3<{ԆsX+V̗\v[Ñƴ^W`P$_ \/+}()Wp7ӋcPWKp>OYii6=x@n}͕zypWo^Xq޽pfn7'm+3mf;+~ܯqn}"{fbj ݫ7Y\x|_?9z Ss;/?=tNZ,wi+便uozj4#&lƒ^$tNcyM3gG?b]&Coh!{(h k3V5oy Y~(w045m+-#ͲXHO|(m6K?9ý=uwϗ:M;FH\F޺Yc_Ga:f>:6cf3m:2FܴmYԫ^ ;Y'[hXq4r`4zƑï ?p8^yu}n6aqz(kfFSz;yWۿ2fnH(Z!.57!KuS^gSXwŘz9Ua0oӡc6A/]kҿ_\Fb+ldGQ͎/9!WDwn\1%7!~٧6&)n]mJ4TUߴ4>jT}p6bϞÇZ0r/Uï~(7_]e/|CD{$^J̕MK&fth{V52\]WE~j;{^ʯ/[{$wS .3S{?K郥C޾rvV֮͸@9;N[w:zn܀$9.IۆfGH+C>RIIVCLފjFm:U3Ҩ;[WfJ՝)9íwhkrm*}jcZ^ny?`ho[q{o+S]iu] 'E6%:dq:} />#zuZg An}N_ xmu>O[߽sk^#Q-#mai_rTߣ_k]7v/4|(a:-͇qOsYtI, >[kz =ĕ۵B?37ǟI qI+^Z:|Tc֒_=tN6.㟦(N8KpvuPݏ>l?q6?Go|ɣG6 o6K=5g^5v^`v.TJ>Ðs~ևQDO5q}=i}\;sx[Œ*_Fm53~(#F:$UngTX-þrw/./^??W +\b959gϳ[-{FL>0Ue\ =YܲAkm@OevOX+[Syw \|5mFM{[ّ:=X3V̬o'ގ>Lu}c :=Ŋ{he>w`,Fqë sU՛3#`ܧ۴8W~w?\,`?y,mٮEcLf@v"H{6*i5brFb{v漏tgLRiZy9qeAsZC8 &)ԫ8 P ,V;3;l2Krzu2sbMG:6*WOџ\.x>^*}^%eѭ'UHjoƚ$xqTnO}U%k[_eJkȑ<^*eIӭG,pHE5}豳&7 }G&38bwBxY<=!,g1CHbmreys$Po+aݍ֛ec_9͑Ñc7?dz;miӣn=l':g,v(4vnMru |ٞp0Hge뾣8MxE~1yp{+WUU46^={߻C ^#ɱ'&fzfY#,޺ys8MnɿCE=u-rjߐϤ(U&~1+Lej䄫=b,i,z^eteWZ,j8Hc;i^UUr7'$Pl\o\]։ݑ4Û]in?:7Pz+ʇt]AG o71 N M:tFx&gsa|w{>ruujq8Bf Wws~kDް~ OggS|\$?ɹż>zHܯ)٣GsE\Pץ8ɱù~kJϒ9pp_2߫Cg!41=ed`< uD>@5_#-Ĵ>81/5۞h^|_R3LKgRt~EvV=5yPׅ{+*fK8zs1MxI.?.;l ݾ=cLkn˺>2y)r! zȕp_Gm7ܞrWۮ/ނ'tk/O|_Oۛ?[&Y@Cܲ_ُј|ɼrG*f9RߦCn=Ӎv#In>:Bӛ]7vkO~4knsxBimJLFd^7l<~\Mm}M{G{Nc2eolj:biI__]3|:g栠]+o1?歛Tyt Dw9{7 [ ke5e.RhzDg%x[||6~֠÷-mRyƶHWI7i:^l>ZQE4OѼ5^거GҫV{9_|ұ3Zy o`fӿo%]: Ea1S)Q0kӷn |>&<2l;=帚FkF_툏@"m #|AfwP͏l_fk&Mӿs g冱ٸV= ~j^-,6:Q(C1ѹ`m[~<}77|/ѾvS]o أd?kx!<4 fɾӡ7w?|ᱻKھ@n9{[.lM7k!ޡS /|q6>?ajB IKiɡGy_tnv^;d*QZ~>fA?|zE4s/eSPVꦧݏگ=><p7@GbfWƁΊl3Ej~uSz Զ7W?)~t׃TrnxWz>SIos&7n_補OgsdАK4agėyt&%IsssÔNVxlߊY+F/yen'L8&jyId$>j.Ul#AY. \&S qXmDvgy[mͅ8sWoy=ro)@6Lo>Gw;WкXϖ =nI3qx|mHJw\~_Vx)*ӹ;N^鰹췚4Q&^Z&U&U)-ډLwp㡘~ g9_U/R0Za]]xލՙuf}v}Dy=Yvi|=Ҋw #:M4^dI5SOha6ʼ IIéZ*Ukso)j ̻أ?gƼj"+M{KGp"?{.Lcs˾Հ*o2\ʖν:o|r'^ urq#d7@ȉ^aj#ぶ5)K)-qͬg~o[2'{,%Y!fCnJMɾe0wmA[} iyzfkCE-?XͻB.^;7Vy׷LU58u>u߿%mUAM~GNo7NQX>cnńG2^M=:~чqyng6Is];)txaYsZfZ/0<ů/|ՏY5Bݶ2V'Twq%woO!냘?}C__/*쐑t1l4{/tO^ oNqbwDcCӘ!! YYJl'wZ3լ=4GC.us[թ̕oWY;:n0PTO )YzJ)~/}h=xne8pZۏ2UV嬘^'S>RX 7{  Kdm^gcL2440ؼwّ6Ef1KN:7˫}/~cDx&QƖ{Ȥ4N8ĩ[w*iHI{z8rݺx@W6n|r}ZToXfo/opCK'o,~mIrz*uNvIrl=QzvQw;C4'S~s˼wڤ}iumcxuģHM>(C,{i]Gޙw{"z&'P姸]lڝ7{9jWU,˫y׫iCV\6?EmOCn8|6o4vIŭRm̅F@ڡ;;qr77czWٽ9Ʒ==&;kͭݒvk=C )>J5NЙ@ ukTg8-awOa12w@0`C߽.LSs7Xdfyiz'yWMij vDs;b"?Q2[|[mcι=z c_=zfxwT:4o%w/5D_kƌ1t 2.=u>ݟ֪%7w!4ߌZ&=,GȬIYSQhscq٥HM{ j >q8x`]9^v>xj 6 8ڸwC|>n\飷v-<={K'CbOk{ 7)ޒTTO7߳mtb2>wE梤aDVӇKgSR̝[=u44C>zRE`}^Mf|:%W?߿|@ڀϡ]7t{5~ߞKtM7n [[mwtSong/>/:H=%M_xlґE _}|+=yNLՎTxt2iû#ڐx+h[Fiy|KUZaUD|HuV;9z:VQc5J,j˔cv}sa"&nKym{f/rq<|!GŽ /Zf9ܾqx<䤃g? K |=Cӕv2퇤܁:u,i$F4h~S{0"K]N-ySWGnH[x;^%ݱۉ0'3wI{fTs3+ރ:g&1 {WL'M;TFá'S$i:{.8/} '\>\NCىpb7L(gƽkeh͠n>2G}[\`x>]}׍r<~^oP0㐆5:^QaGm|v7w?!op>MwFsT >ģsVg;#N蒪Oy a׾OggS5|\ ҉iƿY}Ytcإ/lLtSOrBoisj7>xܯh4s*'ckqÕ4S2 wٚl9,?HT}~Br sHRmiRM% hC+""JD]Q4z7܌G!#VëWj1b/dWgt$ozY[H7-Vo>]Ne([z6^O>pS4 |{_כ&=imN$MҮgE.8;0,cXCݩ\[uڶ[6yǟ8}mrx4:^Bûף脚qиa(8y̵/4u(mFk11?;bDsY|yUU}gwn'zO3,'0Ԝo.'A\}s?<]HӶjt)Gi%hi׆ۂje)ft~mDƭ󤭴s硵pc7Ҽ9~l3g'Pض:7mSʆCP/kkjbslOX7l(}XwV +>bqd3ҁ0Z҅!Ir:d#7/oy{W-t`/{W&g$t4<;}D?K S>GaJ<'7E"FSww@^{]^`j־oX3$͸$yO}C C#o/1ɸDBp=!MԚy. a'Rz|6O4'=xw_ Jb*L}9=(x%n/邧͓ΓrM7^c)?jZ].{濙jk|W³< b<ވ.{?7\z f:=1Ai=FLdu!k|GG\}ˁXɻo~ pM]gt= 3~`pY@˳ǝ?q}t[noxj|;>çtӇ>suym_=&`Hkh8|$@x!Sn.<'NS ȿ痛EU9TӖ~ν;{߿Vw>ku sd[lGC}LT+S^:̅YڔC4D̞,ڈx~./sأoUU% b67o6Z'NnF}ۜ>o~.'|I{߽:χv'l6X͚kax.[C5o̫ٸp:'2tw?tzDfM ;q²s&쫕69\>%T,^D0-ٷ.?gx|3ަ\=/O<U\駋} Ns/i6~>ζ̤I?0JoL5Rm|G#C <2:N]w[&yی[[,IbREhUiӵktއe v- cvU9U=C&ӔMw;@. I߸!mS?oys૜~la*,= }WݳtmE{nYH#zNmv`g3_B2SjF|zx8CT!nz]j+J`"~µ+kgr˽ƿU7|quwf;V9{u |i{/?ԂKNmon=>܀'lOo5gdr>57i*xQjq]2HSɓE/NHfߨMT"6»A&ajZZ3RmuZ`$aui5t`Dz}zaOvΏϽyu/\?/:xHP!mmD眾پ&~w8,Nvn'~xM׮.Mr Sܺlc]{&ؓ$#rxoBs^5'5ЎlZi4_J M2Wvȟ52fwvOw; &Mˋ_3~d'֣4M^f^}˹0-#vx@HUu|z@F{U6X}6 $u2^pzl:z<6:Gy{oG-[$wjqw4y9gMAK"~/_|;*iNqFrH7yaW Xѷ48xɒYN1:=*70K\o{|bep^h>P,𜙖GݝU]3Tuu &7a|×}O9v+?"hפJ1I{c=&͐ꃌzixOiȭUvNk!fa \!۩Љg""/mt$)!OggS_|\ b )º໼ڔpIlIҺɀ4cO}-Xnx=exǺ,t!{b#v@=P~?lq9ުi?ΣهwBhmz7v?VA{M>c`kg{S?wzb˔R)%L]=IJuk x|+^elߴxlxx5sPw`Eꊨy]bяN-Aߙ/KaeWU8aϋgF+K6ݬtq郎l5}ip~̱ck}43+˼oWfkL捛oIz0]#v&ME!g!Fy/冷wwlճ,|"i4 ~Dy[ 'zPr1{g*-|{N[ Rk=1Kؗ^I׍bl_V^^dn \̝Ga306ey|F'G5%mQ}ؤQiJJ} ٣q:7VZ?]/d1605M^Ȭ޵ۛ4UX{黺^7;$e[r/WtTMaM+Zi_[vۗxRl-)^'sKe)_:3je߭'|ϗx4KqSgܫ'~ޱop/2.DzIVeԦ3!|⧘e8|;vv;xFCnMʆS:"7tq5O/mI?ZT GhzE{.ػ}ZWo_y x<.+qL⿤~l}=޵?Wk_ojqqTN{s5x77yaj=oc |#717lC%W&tI-3mo2RN ~tw;^[6{C~r\/܍^y$u)F8AV}#ҷ)^rTr[#M~}#y=_;L*+*hrQٓb5}B;T8nGů8tvv7.nrmpx}k(j7l̦D>p~jngJ*@q\9~BwR_()%}돍nSޱ>tGC-;VOmT\֣jDc+?',#1&SsQqI V=mU{NWݐ\o~W C|%5:{kty7Ml޶> ({떏<}jIӌҸ;NdSs:+ЩN]jn,%Ѣskk}»1>քpd1{荃|!lygx?3o=2wn׿s/)^,[ъfCoWA~ X5,ۙ297J?=J*}a2R]҇,I={1^̰p@zso{]{Cy'{eƻۀS<Pery2sS*H9-`׽]-?wt"z6O?ķ>Shd#OwO_4Re.BY-)Qes՝vGgcO&"?ab;O?| ۫ο3;Nb OQU=j^ѺOKE.r8 xy&Rp?n3].ٖZs o^Gfy,/>`qٱp6Z$gfnvie&'~Qڔɡ!Wt7ƉZˋ2qv'2C+{Z0S,Zn;mioyP0|PԞ>]yB[^۹d1BdMt鴢{h>=(lKʳk&!yڕXmL(6 )SR5 c6+ۆxg5VB_;a ^KdIZONwNOyˌ*cߝipIElx.=~\q`q6ʲpL3o(Je٬}}޻tgJW'?I3N=qq=?l FA=~:Y!GN#.F ^0Iq*`o)>q>s٥Qtzwz3znXxATǼt5jr^mfwPxF蹡 铬j֨ll}t[vUStҰieZ/tzpS}SQ;wFB_Q>Z$u?*u'J0@rEݩ9Ԋp8YZUUf/ ɛW/Jyqؐu4oBă'=HB+k{ǩ4j>7Om3s4}5N\0J xz*OاS9{}z@VI1(^Z7 !F5BHhL Vv|imM~0SUbo65?nGss~sM泧sW}ɮ, L婜b힘Al)t+|٢~|y駆w_C ӥUz9;c!qf^KVWx(qh2}֬Je[iMFO.TW!|x/tb8mrإE$é|I>?=ZSJ3m<*Sc]Ƙѝj㧱jpݦ]GOggS|\  Mɻþ, etPU]nZnϧp-fm=WegO+-=OuO*?c_O% 7O[OSn@~>x/x>Ǘ|fǓk0[}mo&>ӽct?9WٹwDvӀUK#)t;6$[Lz1䜒#w+J;x$o=x76zLr9cMe]LAxpМ v\םCQ]HzdƁsR݅0G)fwǟI.:7sOMrܫj=`\+uscGZM[$>FN4VHԝ~hwd޺1y*(EF`~p7Q|zpgd:>uvGIXF̓`"N7Vh8͒vjOw Hwɛumy@8nN^ǻfs;^K3ii*oDIhN=Ȭy4/c^ Y/#vLY cBk3 S GDm 5wT57ӾTe&"A9p`\6h8Wlp/{[9}@vF˷mq;g?j+>ԘqsGiuZDt^v_cڻb+a^x[65mwe{>{ߢN>urvso?@{m+>z~Cg>-]nT#wLs; F;NS'8ǖC9!Im=YؼB raw[?^6MzDGgEoGAWxmXsýΔ\Ivf%{ ܫCPg~!s?[YsY&[\v[溏 x̍"ѡAT$mJU/qpz#2~f疇{>tx瞡gImt:{v ﰳ F/ޅA.1J9Rdso/vrrUeF9.aqV? \P4 0^{צԽ1돬S[ϧ7Auɛox> h| 6Ø˽ɩ;lf\bRdOش^bY!53̐ C73v?ank?elzT,p,S>GZ{) dlj0y9 p[e5%-ecLysԬ[17+MewWUv3iϚAaY\VZ /QZՏ[cr*+4}>xB4!X}}zSPzęVBQ+@jQkh];70e+/_B#q-7<틏xOտ`tCҨ⬗3!=;l;})b{Jtel^/m47j=FX]mi֨wI6S&VGۦ;9*ź{<Oe;'MJ;pF`x~\st@kJVZ0AգZH@]:eBƷ4OqJ[慄ȍ sڴsuSnwnZ>y;z:t~.s$5-ed[{{l63ݿo=r27^9֔&:tR:Q؃S=˟IBA͢\jCs~ZiТ@rygw6}l#r蛫[}t_ ~{ &5LYΆ ^ru܍7#}Ѯ'U9Bm$nS(k}e4a&{r|{l^ ??͌Q=uL ebҐ gLb}eCőZ}=OaڜE.1yn}nMEѶ. !ޙ ٓ5);tn2LzhKA㇛̖v30~7>f%jh|h-un19%Gov=#lɼ$i,,h%cVZF!6C3i_撪?8 ,嶫2UZ=XwM6o OE `_^Af硜n^`;OO?{-KmӢmfh(ii!K͇v?eJ64.;A54d׳\ktZW1KDCjZ\|LmZ^j\[eJX%Rcq8osv?}U#12ak߉5;T'|d8SǏ-_7OAw7Ooo(t׻i]_7bѽb+p1ԇ0$=gyP5>5g~;6l_|y+”—6a~T7?ZYw#1.^j샘hF,6} dR`rĎēR}p3:Qu*o:SUi qXz ~88[/|yzW@NlNv#}77,[͠jGONb}V4i@M3HJIM[i)k{ D ?sapPh #C{TD\Y"X($'Wb-E){Mլ;ޜ5$My) w`8?g=tzz<+⿯eGSO}{ho.gn!&Btjķ[Ҩ/wU/ekX=/#rdkUxFF36vխq~Sywk+蟽{mU*E5u '@,r^x<r #En@_+9wxCz}za&vr~:uMG{%iƔy5ANNfy}D45/?~=Fyo6kql:w}uj _qUJZ|u'xx?,G,<Ϙ廽pin/,S<>o_7.ryFùG?݃|:8 mi4mac:J'>hHSwl|yO{e.=v]^6/\=vqbڡߡwzY2!*=W)KLpx򌫪Thi1GVs/|cAO+ͷO:ɍx~-_wW/h |g,o|1*ŌvlqOG\>a2=Вj pTO~ػ_Kc$w!Hѹr`ge3(ƶ=nmi$Ԕ+;b\KᵣEcĝ_t[a+{l'JD3:,$W܋ gʾ}rUUUm9He^ea9/^Hήm}-zJ.hI+)mnktSW6}:6:ow=GFld2޿֩Cܽt22eBs)wWRGxl:*̚n R`uݹj ߓkoAX{[riR' N>~*U}GŔw»N/<ӗns<ϪU7L%2qj̛4Rz>v/7O4Sw9e ώ=i͖-R,v 紋®}G+O<>JԑoDhQF[쳎0R/aUU;o_ ]D Ґbm7\i|t;&9l ]=;Y$ucc"$ĕ1K8aj>ZW6!2ǻMPshx3ƒ[jCxj [0v Gp<%i{(窪2erLJ҈5Io-n4Yo4ݎf__YhZ[m2G4Zx.c6֩jڭ{+-v!Np:IX!BKxWx筚oZxpuHn\UM^ol8QKMydUx^NI6l,8좯10g~~ l aqS;:ʑD=afⓇZSOgHG|G%v-u7]C_0u͟\w> ,v8 zk'8Dsx.lg9-SUemjoʖl6C S?0mk-am0)WzkV2Rƪ ]^ DK, w?#k|qفgo \=TU;]JڳIecrC7,;FsK[61|(ܤ!O'ef wRfƪwk8ȅsNթ{= FXJ0m{ʓ seLU=/\4?YO0 o#TOfB[)g; _/tl=Ygg~5Mgo`鰣n\T'aqQ|aY_S:]qSwMᡤmqZ/R ᛇDgv)Ŵ):R,W_;` w4|=ڦj3fg ''^q@Q{ࡀ8~- }om9.Gq,2ͫװ%<3CIC+2q$W6j՞2~nq-4Nt:l+㼱[ö_Z 髈Wj1*h Zm9qוҁ_ X.G^Yu{m Nw 4?>ɍ_Spڢz˂_睟y}u s>Op?|f)C5$͌ E03ZLoNj7<'9%1ԙgVXsza:|ו xX36ʟ&J7Pw-DHKZ?< L6Npi2U?tdXUF{[pu'6Sy rXY}# ofxΚ\?^UtxU\ߏ5,j7Ty~-QJlӉrz2-un4ôxn]#a; ĘM\"1u'>.y'"|O @/+<<${4]UUueu~3 q=I? ߼{6OO7(3kuQ7| &~omHsG$m6 {ϳ;XQfzanN07hl-Ü&͸hRz~c]wsl\~tE޳ c7okJ^OQuYg' &ɡCũvp~A_G/mzs52z '-wz } _#ox̴tAAcѰ-T? |g"=>2eI=ߞ8핿qq#,^4>z\&G|3Vٻi{ȉ,M4qc4osL_oDiw~ލ99c99fc~=V:9x; HJyݩ}XyݍÎIdGi5ЅMw 2Jc|(-kxטzЗW?񄹕N8 dĭ6kV_rc?Uig#/_ Yf>"kgFݱvl|'s?a5>ߜ}h0'u;TN}_홥ݻK/N^ , Cۣ O٭^KeʂϝIKƢe.s櫑/-~5ާ@G.CsI8cR<\|} x|Lwr@ 0Ki^R:Z/3;9{Zɻ:˥שׁ_m5gs'Ăm `x~$>3xAA7wr|tk.aO{]8zQ KYiy(U@o?i^)} nrv~`RarU6[h͸q6fx?DoF[v7>ϬmƑ폚oϙ?JCɆz=ȕug^6ڳ)A;5=NָGT@:7Fv_=ʿ|k_rUU;%{3zaQh|yo2vYzz/?-4^\]s>s =i+%mV\|occҟvOg;ntC7fp:+#vC[Vc w%ps>&]N w|G\UU=CrZQH}lغCL#Ѥ-mǮ'wb$)v ޼)Ϟ gFbow [};j[+74wuOs4s T{61=CkIֱ<m'l~H_β82WبjwG o35=Zaű/&1·uea4o^ڻ]vͷ^8~-0-xls0| ug:|s5<&'ȣO2e2GvɌwCg|mGǥmFƬt_I$ϳs4-j4o=K4=Il]]%ڳgfM(7~2OTaۓ9 -=/7x';g;??{f]H34}{^;Ճz5K#taqiFێ͡#ُ\H2HhאIgt>oJT%-:[!pP ñofw5`?/)M:5³s^ˉO o[߆zstWgwF_ӧsryjk7NNW~sJn6O<6[ڧCkmMO^l\ϑsۻ%\ȤP#5^Qvߊ}|%r/<z0z6- tdRf}``J1-kO6Hׄ"Ñ ߪ*/;R=4{j/n㽺^~-ӯ>Itmai]^<y5ӶF/#pC, )'Թ<ΝܙRt~oWwrгbzp98vת=!^c$ %ȫO'<'>9R9áiǯ4z^xOsU%둟cntͱMԛUk]|mZmiO}Z׈q s[{JKÇ2;iZd_oLzȟC/>Ȧ7Sgzy q3UӍ~J//彴ęusxg r~ T[QR_"JO{9Uby8k1wۍ~M=/H.4̸oO;i/hr[pjuOjtGϙCZ6.8-h\f[L[g'jx>& 10MGw^1Dc现{{hv,/ǡًd] <(-0?md 6u/apuz:}4[>m|,'~~}5 pC3;_Qj:udv/Cߪ:yN-=\~LoOO_lo-r9};{mI m>N8_cƁ1g4OggS|\@f[ƿ͹o߼|;.Cv\_ގi3|Morw87Fw[={szya?xXc92I:g/1u{6i34 |;.c_](7Gg|VK{s}]$S'֫iSWm.=ؤO.[_ݔ<׏9Mt8n}5d"Øa9r+Jc|{\2ChiZv_Dzn oλqX9䧝=i.>?^t&wO{_fi 7N{#xAavc>?󠹿qn58ַ1 euc/GOm[ﶦ.m|7uҗ2/I~s?VK۞s\|b)yGpqҧm&N34᫓l}nl=dk8q5ٞ?ųgg{Jɣ/7~>[ &;~hf{G%ΑɯfGktrH6w1|ׇc,8y+ۛ0ǝI%=&IT4"MzQIڌ$=l;C;ϘЅE2٭Ϯ"jM}cv]yC_<$?7}r]OǞ4vY>ҙݎctji:d?69sKOFGH3L4钮H 1Gڣfa?:ә:x;gMe(:v l;r w\b|o_u+Kا4# 7v}[?/}hn?tn~tᾓp6CYhxv=pd~eq׵w'ͳa\:DJmK:4m$XRR hD;2]9$4/WQl;ucgv?;oxYs{nd$n?4ͻN5wZҭc?~&CgczyCy/I\_20ev8w8G3^`l:mZmWe|n.*=t瞟;ƟNԜ?^1nߧ/eww[/s}qUV_GjkLzrF5=nho=0Ͽtf=n .^<9վ&CݥigmUBґy^#YZh3QK3|릶벌ňfLwGw9VcO]C<d).]_p8~]~4pO+YSp~OjKnvCa/yy_8^[Fy<zv6U5Lg`fO-:Rk:O,;Gԑa^AJp-!D<$C /گ]o溡~]:S= mXIKxw]kĤ< vrYVsƸmyr,B\i>!7kjOO۳ ifZ=磻 ߞ?򡽵'(ŭޛ=Z{#㧇LV wmFxiI~NjȽ|v#&L!ݽ2ҷ/^SJx!-M3g}.dNP7Ͽ.oho;tޓX,ZUAbbm}|~U[O]Mr׶G/*6 {;u5{G="yqI#Au)1;˾g$+@'ꈐ#HWT7ٝb\z3Y0>㖸(U'6ssM wݷo 3˸OۼuÛ&ɇen?ԛ/Sr:wݒ>5=[9ϙvkfC>-҈qZ[niΚ2Fji<BwBo 3rqoʿx<&'ac5q-;AUZQ ܚ0?̣}ƍ-f3ƹ*$ogմzͯG_Ԡ\m{>8:ny~||]ĵo-I&wons~O7&k΅}k17kO?78u'r17-vƭ_z[BktÆGqЅNnoW nͦ}|yX &[tDSUGgs?8tקo6=ȓ_ښd1u 9w5Vެ"j|r}괥{[K]7Kܕʚw:G }cUIXK ?ۻ Y{kKӛm{n>;uy]x{g#s4rϥ;oR;L}1}\;tz~;>y n/v;ڑJtc2{L2^=Ι̦3YYgg"I#ґ[m[lZ^`ԆƒύPyW|ٞ\#:yJ_tCgQM?N|^,rlzfegzݹ={ ߩs19urkyv>K8o[GrKn{ssGFƔ,͔ѴggȟΔ' }kH='z/ʹN/|rܓyҜKksy /ʿW<Z+ʕ[RC;UmOggS |\5*̾úȿ¹^L\ V{ l^.1?`\SHp(幪RdjjX>׼͍xj7>>>H]Y 6]ͼe$J=aUfԍIDȻѻDD?;ww{N;oy;s[n)U[Үv'qw ^Q6=q>W31~cIi=+^f,m4ﮞqU5?;wm~=;MF7.[ߧ7l.[^ƶ$1Ÿ}3?\;='q}߷[={b ~F579f@&iN VN|T3L=ڝ7/ t^*,UIR"/ڻo|z& o,KMiԾGK6<}]l6ۋt5qЎקwO`}S4hy2 ~zftCk7[ѹgfaFnyDsn[7~|<ˌ'Y<#o32a:>f/S;#t.\=sK7 ΞJ!7>za0[8J5>+dU^Ops}*2UGUw:vqa2@2YU]n.)VѮ|Py_=i{zyL4WGΟgb8ڞW__Fh6ةլz)%L֜;f%H}0冗jϮ\e{>~ 4"[X'^qjO7ۛC\iMiٻ䃷H-= u_zz } wQd9m+(ik% mG{IhGOm^c=RL<=SȥY(It\֞~MU`EƠ}}7^L9b=<\ϧy^s^?fndA}?Gj$3MwLjSfL4cr_zNsAR:BAcg"LI9pۜ_^hFY؛qN2F;*MVf*t_yV׭6gbk$ٚ'|ߓqѦdz~y=4L5!r9}>ל%aXUޯOh7B,.hPU~͛]Ww՟Ľ+c<8W]|::];O[ѡ'F.t"N7k}{k0fe2aI{9anͷp4n1b_5ۛ J؛}GԴ!<],!CL7jjԵOƚ?> &$l.LnT  H.Rc;,YT}<; w7^Ńma'.rシΛǧ۫fOY;U>~8R2nÑ_lZ^iS:is7P YyG==¾8ӹ*t.K Ÿ;1{`˹jgI.kgMc?͛iޜ]{O'kt^ˉ^UZ-wTԽwPv]lm9ߌqo79K-цs8>7url?.[=jq¥Nfk'+<݅J^T75"_fΪKdzT=*D{NMCER1N]cbǃ|ʀف^};g^~?)Scڵn=xN_>tm%,M&AO<8׏$@bWoӋ?L _mq+dk=e4JGCǤ#cE Iy'W=F>v_~y~ΆNE32F} |]ennʞvX[vTɭГ2[_#N~lib5Ü,kj>_'FџLuID+, }goLwEH^[;ܠYgN5odgao(|>.Щ4mHTR\3bOVß_&'=LY+޲gw%ZKϲZ]3df:]u5fqAϐX)K_Mff^ǚq4ʩ LIytbkw:YܾbYeܨ {n[_ qnڴmP3|hTFSo-ofKG6}FunD;ҙh>ʿ+v73/feH!/YN!m=vc}!_FLR$QT w.*a,{6z./F}^3{f<ϔ5bSlL H'zb\( ^~IdW)SvS?XI1$wMTGh$jMK1ڗ4e'I8,O6Z+fE~ eN4E*iӭգ8*r W}_4r@|3y~2/}J}B+={Zs^/̩c}>'#zjo{yK<&[[k^cvSl8x8d-m:{K~A&*"ejP[ߢOggSJ|\3KʽйT=\٫JMQ/\YVKr_K>{}۳L՚| YwĆSߚ?}-oҟ3a<[yyvSMHϪiڔ|&wjv-CS|5YSͷԌ#28i &8YO'+ܴyR_u16iԆnjR\LO{d M~bba{S;fh=q{VUm{JUkGuL}^'|oP;n} OU՝|\|QP{OA=V<2VlCE򒶉w %$kNe:28_49(4w9cmnsnN7>{D^Q0bjJNA4nď[OwQ;09pUUۡo̟w {Hs=Nč7I׎쾒68k km}a{m&܆K4/߷ӟOcڅ1п/tW]eH0Hu'U>9?~^#t#Mt쟹bZs>W.l4ю٤Ϯn{:;q%RPWiۨjz{, vw}ff^Z_6l؟I_T"ڪ4mo&iٷmyȵj7@ޅi;ӓ| e׌7n;)/jf"%Hi)%Lz?9NƘ6ď}UU垗+潫7D׺әi+ڿ:`6K>NnbsXDzfsnuT-uPƲW_gziJO|^U4bGv;A4 \Cݭp}r*~&ݘ M+'HsjQP&R"!EewQ_x#NO޸37冾x:-u/vd}Y0܅ri_hOpI{&mnvSc>^ez݋ѪL[4Nt[w2{Psj01b$1zp!Ԙ%͔CL%ɴKjZ͚ы5j$# ~0$qa)@q*7loZ<`Wy&ꆓ˖eQv7sI,[Chi˻욞vҾ(ᣩdx:8dnHNV)HLJgrM.jфI5BwWާ^E~] 說o6)}?e>ʛgeP[x|}zdmts ۪>:O,#mlk4uf:%bljVwmH. b'tl6(!<iЗX2xm}Me/zKY T1 &ȭjqdsy~wk gsyUUk55ID=x]v0CN}{^V.>!au}@?|rO[)LA>f9ϺYofl~{3Hc˧nnvϖsrO7; e tvzi~9ڛvl>jD80FWsIܹi3}qѺ{Uwn_ 7gUUJhm^nrLJuƛ\Y rۏzEH_R ]o6uj^f/<[/Yӗ^ik4dlݯ&CdfJ&oݤǘ?S.V!~JC˦Mj\"2|׀E~B;t5q5_]|Hp=pw+W͢Gr7 <3 ȽAx]qWL\ӷٔ}؇v]n :~zXgy#dW.rˣ}|ϕyiK:q֩Ӭf*Mw MH[8!Nީӗ醎ꍓ-ߣE!7MF::oՆnm(=y~zVLA,"Qûw"7 yQW& ~zlg f}v>|ݠ.}f͘Ͻi[^`VԮ\eҏCjdצ20ER80=`'on#u9uѻ4U54 y2rl4(gC0X<zRw}XV8۽}37}JBTI҆~m4^[JRzDw.75a=ǣӵUT*_C:LnlXo8Ya8F7ZRp:Z >kIfGDÛwz}UUfͧ_Nocґέ>zwwr}6z=3</ًvmi)(xm%d˦d{Vw#>>SJ:f_7S ȩ91tD:n_g/* {) ؠLRwk#i$me@|͘JIp%eN|T`|%2ƲLd74)x|;TmITiLm/a_ۘja_)\3UgW{j4KvܛR7ћ W'Os;!=>88ȃyL[=lEVӤ7S;WxikNI[cB׽{ڹ4],^-ט[!8e:Зr54C+"9v,r.<}ZX K7rLU53Es>A@]Fp[x& W<^7۟=8 [87mbz|y\Q~kc8:n375 \L;-21,tS+JК$^*ԜRTQV!+ҩ,B;W}Ň+8-g p]-3UgΗ-vYJڝ~`9^9xk t$FQ_{F\uG7;Lr^^];w|p>=+Jx==rTU:q|+]jq+Lof~ٌOgeסg|1:Xgtʖ SHܐy[䱧<浈-$6]|eoG;;[{ri8 /[ߡiuw9xN+ou?|I5WOn>_N#OggSN|\Nܽ+t3c ʼ UbOy?g>_ykCqU└Лw}$| mGG/YD/oъ83I'޹8,K4}߹`q㷗ujӻ`,ј0zG#;Vll{nqLѝJW7vWjД|55[gk>z2ûd|;\/O7%8sg/$!{ uRrs|4JoOw߄OgOi=_]^?{n]%?H.#I\3=_#iNHw?,_}yqOۛ춻ݭ11׿o_Lg[X~O{Z;L]rR4M39T'q>g4ɼO6zT^_FҌӼ]lmms-1.1.3/data/samples/beats/000077500000000000000000000000001247673406200161525ustar00rootroot00000000000000lmms-1.1.3/data/samples/beats/909beat01.ogg000066400000000000000000001076111247673406200201740ustar00rootroot00000000000000OggSo\J'dvorbisDpOggSo\r-vorbisXiph.Org libVorbis I 20050304vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSVs)c1 kνwZ JVk1PJ%KIsmJkIcα^Sk{N-\sjc)k܂,` 2PhJ 01 4 9眔)眓9!2 RZ뜃PJkZRk1P`R cYgjˎ%y(#Y'my)['i,g+˾o뺮,˲꺮+˲ ʲ,۶n꺲,˶mq뺮G0p$<N Y d dR RH)RL("ZcZZkRJ)RJ)RJ)RJ)RJ)RJ)RRR6hJ,PhJ 0) :ÔsI(%1眃RJsRJI2礔Rk1fRi-k Z1Ji-Zs=Zsi-{ARZk9 LktBz`'EcRb1CJ1s9b1sN1ƜsAb1 BsA!9眃BsB!: B!tB!B B!A!BB!B6pR4XhJr,13H9,6!UH)ŴfFU !4dN1dZs! f 6A "\H.\]BBX@ 88'ST "" 8D02468:<>@B@OggSZo\& W)'* !*)*(&+)(&+)*()*)lߓۃcS=1iZZ;T/_EӮ#2sچؚ:_>tT`V(&Z;z O9HTUlJ7g1M%ڟg&oS^J۶xGe>Yl _:q*ukxݬnEl3:Up!q^L9f&1%O{et O\ rIkm X\N/IҺU3 7o? <>M~-sS#&mʻX)c?G Ffxh?^pc:Ntr}TX :`4{L߫Z! @#Qᶖa,8uS ,Ƿ^S>#Ϧ(ioV9'[mNvu0ǽ=yzzyU(W,\] K4ԽnXw 8د=&Yn)@I,]٣l gMyelϳIѿ ӊ1жڻgwȂj/5쥦~cMC"1AB%V:=G$} ]vpՁ)w H|\\< uW NZ,fs xfϠsNdvgw1KCtr~E=ص͵oâʑ ?մBQ؆rL(1 k Oh| ̠ $sWxvc?q7f76Γ듚5hKW#ޖ)2Q]'6rveK~Tw7; Ed?0B Z/  ,t-] -iTPt2" @iy?TwIO~r*&hwHSAq&}|Mٷ+0wle.iݠ8ٰ||BB[:puqoi[~u)U&]叀dbAD?LEʏvZ]s3;=="&ː=钁W3gDkn@Z$`{_R#G'>˾B b0=@6Jz(_kl!peSy&ݬK?2ct0f~njat֎)%y9 $9zCN=@..ZF#jYE=7'w0gk +գE^Lʼe(=y^wA>Dɨscuh4{t?qҶԐ^hFn< Z*OK剀*$ő .vD7X KQW^2p][վL8J6YOL;o>pQK=xkƟ ADLzt~WB`6ǒY9{8UHQϓfat[knb ЫOKI]apNZ^J1Gb-VFae)me3EY0;E)&\ 9UsMa%Whᵻ*]$Opw-] H0Lpbk4 pwm=qNU/m=t(TbZ#QUc>;GusI[2OxϮGbۥl%KAݓiYκae[. *Zrl*2gmiSnQ9U:Wў\>D MF+1 I\&CF׈ t[D `52cN[ffi~1r=yzK壿1 "MsCo wwz}VL_Bt:y}Zj{ڀn9ؒc iLΤV$ȣ\=IGHPҝqҴ؇ͪ]H,,,NEZ%7iр )נ38AFsJ"_/jH ]\;|q %Ƈ{(2fd3\j zJ ك?d11j`h@Sd)GPo$ӣ}!E~:[u: I0n3є-Uu/1]*3_͏y{{w-gc(]vNOgZ"kVWǃl;^wvh,5xu0G`~Tνn!E_(+ZS&.EhutKWmr  TGcrg<0xpg ^ W(r$N@&nVHe/mF[u;'_ϣţ5C2 $GV/i|{: s"CY1n޻1ca{gsV:R<:`1r:8NW,X<0O+9Ŵ^@I8myz `YH~)? Hﺨ5&s(MWB 59nM]nXmy'5LС!(({5ُ|LUg{FZJTȤh&ֳH%2yf099 ڇ́^(ꯀd)qe^[fE_$| ~)>7(eoh2CҚ`Th==+B\G{rf9փ}t6B&Ǒ~2.+.\Ϡ#cCad&6GOeu*DIw5c]lҞC:> )yթިIɚA~X*ipN(m{!y9?|wic6kJ6 ?/4=mz$͒7]fҭ%oa#V](> R Ŧ<7|F`aw 8lq _9iW,0!/5Kd̘]"Aɨw !@d6f#@Klyf%kzsst{ٮo;ێha (qFdX޽ֵvcji_d,D{.jļ.I?zdC.]>-c2=qz( }'н +e͟ӝzOSwI̗> OggS@o\ }*%+(*"# """((,!",*"#)('Z6먁?ˇc47dYJŒS飱[wbv}~{3oDZz<&fMwwd$s1Jw$r2.PG-pfIEORfVEsYNB< :<{%ޥ71O/dM\\.d2'#tubA[׽F'}^ns{Uyq3K%%_ szLF_2a3Uae^USD\?om^͔zf|M\4*ⵇ &b5ջv:;=L֦nox%uwr ٢tf{jZެ>k>m \,cF9JHQkVM5k _{\]85W;GztpڍƿT0 M x<8Caz` 3OM?MPfw1^/C? Y5(\.:}&?`dgӁ>,^S]${1'A@YRs!=se3To%jQ]ET>}r8F_J ӻ-Jst&Fmƙeq#cq^vFn0kJg_r;HD޸-"5(]=x$Z(X 'KTy[ Y=sm~L>>z?(8$([1lc7mi4ZRTVR /֬Q 6LZ4f<%j6M6]kzݸ֟ '$ZS˲b_=>YqTyŤUsNTg)@><>Gk] `UI6ahj_K3MfŤkK/݇*G_jbͪx(DwL%ѯ7jT.WF-Cf.tъfҩ_nArLbx4# Kb3IutEfF̡cص ;Kpп8lŜU/ /6ο:=zMl%^]N|hԯqyD_*ޅ5 6L4OX1Q; ֋Lɨ&J/IS3b$T떇:G߼㜝)OKkJ/R:&v9Nⵛic 6:mkT11:{*1Ao3ۏ}fyrї]z !/Wz>N2}Skb/ub"[U&v٦2w0 GB(#^p]:(j%UA7.uXγ+$:Ǣ*&(IaKCz2V!xF%jB~M/%D$uS7U<^ ]ݘϺGvtA%0b4OtCwA>yr%[}MܽojQ)HeӒ.̯֛*&{]9}2 ր7>c?decjmYg4sE9;ˡm{R0fxL5:]X$ Ww;FB6^@qW[uyƅq9٨!7 S(eH~[( OJȥ"N樮 7췿Ջ d"]S8,2\s502\l`a䉃,MNWa:n\;J䜮qpUr<9Y+7l HA_<)M{ߘx"luoQDdm31Z{kܿ56qԷ5"ngf# FmcdUAM5+Qhy_T[5p ,7]#H21IO$qQFĥqUS68j2b>z؁eOQDJ,;f]*=)J %:rAq72iۨ˘fVRvǤ5! *IIP^A`4H Fop$t1# *bLz=vqbmI5Q:S,Q5[-Րv~NHkUF0g@$0xĖ x=NmsnC%\s|^LIH~;!&1\f:+rQ~?JY\DKWp{wvya4e~<Ӳ kHzlckWD+Urn1N;?X9%Y$M Pm^˨Sk 8 iJS~am,NxVt Mj-~%U'b<<7yaE3Y(fo<$65C:qT#Z KCmǀ72'Wvb r˸-͡rjz!f`i=ۚ8vG$e ȭ* (1Jdҳڢ=c_k$@A$V5kdz64)@M&Ά'5f^YcA̔m̳8b?VNw!k" xҋEJT0cׯq>Gq])|Y.nLK@9Ճ,)[^Y;Ojn|89=؛}>EuM;t}C99̲ LJfo]ď7Zg;}ԧ c>EtO$q7..QadgG6%V6n5k_'( .B\39 d /ݍ?nʌoIFUv`٭7~|ջruRj2qX|gpdHXr -a>45DBݱ)Wr ǣ/1;{Vx$=N5lgFdfMU6;eLi$;%;;H[~mGkI0σЍDjy0J ,=3+"?Jҝ9+f jWՂ}7iF#|Txʫ7n(t蚓DϞ,M! Krkkz5͍4(@̬' $ѼdzȑQ8M.U05 =H?ůꕫ>Y5K-q/"y<''Uvx6i ݑ[S}fwit1On[^qkX/̏h'O՗ޚpMEݟ`HVGi~b]\ҬFHthPMiٝ豮+p-UMh]BW s.XeZ8BIVW=Q" y_[w'e|TTa#M.CE&VB+kSGn<ۃ:^(fTb".WlhLI9YN6umJ_pkn{у0I^m k}U'ˎX MlW@pn@)Qu5_(,cHޙ y٦nUt'b@W8Q=!FzfOlFvk3!rvGpkVgr NE>^˝&b耦@oꄆ^W \B`#Gs|ĢirWSl(xxף&ˆI4U"Sη%jZ8)ĵ?9lbC4;[VHZ3scOg6e^f+|$g^C9Q \AL4mzhhi0퇼 9 9:4fՋ'ev˶۳hClh @pn?J.HnzF͵WQdۮt؈-Sԛe;d%1^1ڼkD*7\u)>YG N-,5$\)B~Y$OM: 9u;廮H3gbO*s~xfسNI>Š+x;t?'6@0GeJgu?{΃OKRå:/E一55r` *$~F+S]]`$92*՘P}Bch4c4Dv01^ZZZLiE& 6˟VSTӸ)T&?;Uw[ gaqNV!r4Y3-̅bzw557R*zX{Y(jEuVBزbfBRJLP;Q[_t  UX)87-˝=Wut oc矿EQ;Ynlndjy9plj] boy̾li/%LEM"(hS$/\؋(.L1*.gaPrq,@cYٻDjm))\=ٓ!fI5QtH}APKyɒ&1xNkGcN ѩ.ce`/g%]􌮻Smnka9I xu tz3*73=Wͽyxi#*b,vM]Twc2$0Z.1]C̘+hى|ʈWlCkc˳Kq 7_ct_>2|!voͼ*dQk9"|a#7U~q]j)"d!t&ЉSPy.`>n˸qU+=}㣏?tamVO}]*| c \ռBZu=_lG8?=j }MD}ٱwdB5_1u|cW)FYGi iuygϫ[OggS@Uo\r*("#! !"+(IJ)&)!"" "#"')'*|g0ZN=Y4UM_-:X\ N$ YeS$i`#-u_gӒsWh͉8ERGM/ `B(Z%EB+ˡ4['KՁ>KUG(0~::Mܴ4׌LL.NXӺ-?w!*.e $ FJ*!OcIu%S-rf +WUמĬfG;oWd)0N:nobP /KnqC̃[ A*fQ"sV8қvU6j50Y~-Os{W 彅E'¾S±>oCp۪S@^nkݴ\zt#ZUq,%D/{@L1{7?Qh@慩YQ.9ERO\\EVnsίӠt9酆9k%Y;paTpJ/nه'::g~x"5Mmz*VLw՗E?@p!$Tu'i;T7Lo7mw,epTgWvmY;1y*QCS7(4-iLn|0\Qۯuٺ%~pDA ۬ uR,+4:j r#b;>ζs,kfLtjmSnLEN=յtdkk4[JFDru7dO~^U|:;G+LQf W.#R8i-i;ub4CvcZ+3칅6;H=Ɩ"^)0]MNZ6;3ş]0L6.X©JU`1?yL=l$YڨchU Pl19}0͎(qEbv m^-8z`Saz#$Y]cFP> >)677VsР*WJg<&Oedw>DWmez[srDZfthsG2Ml~* *,~:R<#[,>4YwgF@#4!P.4ӯ^Gq1X}#sg37c?vmSOuKq]]7g9D*1t qy^bgKdc!`)f1 O3#\|D&?߉v#Et-.:%{_'BrDF at-cEF<Y `=r; Z@S6E3q.!4noyjFv[H6,|QH'& ʛrC^YxjbD;vK/(0\'NZ-͜6'' i߾QٯK+ǢC&;])L6:KjA" 75gljyO,F#ַd散X_RY+KXQ0(ɵGjˮ*XrVQ6먪 n/n_lr.r"9:[|;*_I84B:3S@r=ar61,}T¨U^{FplBpQwDOocKvd;ޘ+0z "O``&,[C2*M'W$-{Ja9Ul2.G?ze8Q(fN9}]gB)cylyU_З5H ff#fՠ#Ո MovEjeIk\$ hQe phܓ dxsZ \D`?tҒ|(\;j@PMhꚣǣ۳?j^sޜW4FsvT2=Ѫ/Ҫ&lys:w2*+h@th◑ܘVH{&D=PT'x >$ Ё6Ra$\Z0a|Iκ/# !m1lSp((x; kQxtf &+:<[V^u]]uk 'mrgr ]'Cңž!G6fA7֯Hyt3304P ͒-vIrDBE6i^w^@ ƻ.b͉_ J9_bpvQ}}Rlݩ?Jn (eWNШDewt 4VF^nVQnv[[Ƀږfz|Cq"+θp e6T)O2-Npr:zyQezVaq7Ԛ5󺲣Mďǒ K[#?B\S~DjFa}*j^8nR)KVtxaPW1 $[yD 8%JM1@8$tb8u=jP?;QP0kH**YxT+譌M.Vǯ$JOV s#|FzTGɿ ʓ^2M1*?w[ڜ `+*wsMN)4XQUu/͔/i^):Lxj0w~!YYv0i񯀔Gf &Ŭ5Xv+꽽%wwl+͵A\(LP`R;/GSp3U-?n餿:tM778o:OwZif6- &fK}ӨHf wR [ɵ vQ%KP hktS_cLǞ)^tĶbF bZ"px> Zm%D֗`GR.o8fd>c1ÿI5u`Z1Æ :BL_F$3ql7yQŤ%p#sRXIo,@m1I) *o>I/b& <U2 ))Fn/:-j{-L9A%,VƬ 4p &4ٔ|OSj /3(YrL%U;Pĺq3()hD%/y\Q:]SnϋPbɪoE/iMTMuh~Tc*>л>UQUɓҌ9ʃ,j'Mm @4OVIJ63EA-Ah)a_cG>GՆu_A9x p!{y#@!jHv0^RVݼ_Yq/e$`1zF~V>X^I"S&bZዺ3gMTƙ*H@m $߸$ 1t)Vm(:{acb3#޺j&+Ma6_44Q~FA{bH)I־OE׸v]P uL&v8aJ9%q [Km0̀U 8POggSo\N.!"+*+)!!##! #,&ƭ*''+).*&/*-.>Mޔuj)EQ$e,/qd:-Lt"䰹1ɸ}5x""5^FejX %,2&5~zMh6#;^# huq_G7gެ& 7)qdYHU:@-Rz_[.e Q;숮pZ9O]"kV8 X2Cjё>]ҙ즭ܣA;eT(@.dƾ2L ']c~\LkӺ~v43g*?$S<}]n䶍[ J+\Oha&f~eD5QW+[\:GuOs6F[gbfQz{N9er*p ,L?g* 'vGЈ,!;{PɝK\JOBܓ5'57. m&G9T}rtN&yn%. ߽/9"x;0voSĮGEgs# SUV$> ^LL΄0DWmЉX+ Tg%|{k‹?nP%_O2p?Y4U\!Nֻ]Cen=iѯ{+%c9OvY=%qʤi~a+J+@Fxԃ ެgӒj`#ct5BqGG}ᾞK݇fGM*/opW2etX -t ~}S9 752$LY s}hbN96m#(T0-S~S4@Rݬ?6L9"1XUIߣzx ǏY8Șr}Kǖo aYU!$luG1v ioeAZ*HZ/x9v uOAR7(y(A#KaUvJ0<|&|y:EgVZI|H^7/gjnbk,Ϗusȱ1\C&Ea-g K0=Gp Eȟ> pGIKչ#HY_ȃNjSYQ3;s6EQ- ]LNE`+h]'͌V㻀\KE r  $?gߑ> {LL)0Ԃ퓬&Y.)DyԔf}$IF..As}c: ϥֲ~3W[j ś4M+_T-y5{:r^\@Wv¿-Z&GU)/NcDk, 1$Oy b͘oѻO}Л2 E,ċH37|E<_ȁR0!IZe[8¼ v{7Ղ+[s^~QÅensLퟱ%ոSa=<iiXf.l9wd֞JۢPZeCpt>չL,5OUN4i:e9lw^&{ (+H %qȹL*!$ 5ղl f߱aiZ(qІP3ɶ~&`iDNe1ꇑi5yʿU5W. ՛Z;WSKX5x;?{2j3njf \³URtrAּNΎڤ #"j^c|a̡xB _=\yi٩wۯ~ -I<^ub zy&Cr Mt*vbyr3{WmJ"{{u_4^JԞϦ_9Ti+ M ^vbH 5tQha] -ؕZ^.)eh O12DyMj\~mLjQK͔$7YUUskTuzl u#F$S;7c; txR~2/8+LN)=gGϘ%==^T2#y,vJϻ@a9~1*R˖GTwx\\Aɿx~ҏI\K"y+gú]mTߡGY*XeA'+4w `A~,#@':=tuB5(|s@L]q;m;C'kFvf2wj3D501c;jMxY<.o}U™W)Z$||!ەZ ̥#N9T<D:-_߂?m _cNK~c>)GZ[d$UTFD0Lo6$w{Ové9Qһ[WI$Lg:{9=7 z!fj#P2x?/2}t0IE^qRPv{c5?DQHM;n(@()]1^`a$=N)^`gv%2qZHC>N68Pe#<.ʼn d|Żm/3ya!ᨆm3Y/ @rtF$C;19(Kro` >Aߥxه~d.PM`2ED [o@b% xgͽOqkAlVTڡT9Yɱ@Gm@Jm1QPhuokn-xIcxI|] J7cy9ǡx(TF"`Y0S׹ 'HG29npۖn#ǽuu|^Be߿wϣIW^>ig5?1D|nRQ~Z͟Y>OZZ;%Ada_T YeEM}F^GTOxTIw&ڼTݼ<>ρeylO.5YZZ_-j?l)mMju&>pSqfAtcMItΫmu#.qZrZ/g>fߧ(?T DD`΀_d]<4^ҭnUe.\_22hnH.RE8yy{܏M-|vc4le}@3:6*=?UuZx4638V3>hzv\j }c:p<|8ҵ8w,UR/0q%~{tI13AEMpor$TȵH~Z`u*GMKmlջy?ElQ*f0r8"ݖ~>Ѩ違NNx J]FgnKVbącN'bCh뫠՟fQOggSo\ * +&' $" ""**+!$""--!"*'$ޜ^SƘ+VFPė;}ߓ=z VSu}&ixM}9z-a"_OӨUȨu}[AQGU^77|?6?){]pk \͍byy :t{]%V.u~- 2!+`*^nk9뀖*h`TBt%O %._>?y.1{x%T;i/1ͥնLQAc4]:*M:32C PHۊ*tӓb@78a0>jW  '&}#Hr_ż}qîż :,.SݞK:Xf$PUnS.G$lW%*/Zc+IL`^8X^{/vo⳵q#<zPzF۰kP씔"GU٭FK&3oHEfNoH`lf!B6UY~7É&8YF%˨xޅ1e0mmYg;,ºS<>G.Xp}} rcV7L#dtK[T]a{,]n(/,b{egu#7")D~`ҙ}e&gMњŘ +|+[yt6Ča QN첤sTQxTk)tKo"omV ͐E&`T)w+ݱ~۾%̼שcµ̡$r:@U[1\l/^ Yd('ةmCY!9Փa^gLvZb5]G79nqd1Qd=pU8F>dS D(@9*;71@Zb2-+; gD2sM^kN٨nG{x-H6HjصFqg_Q^H}7K[p# M},M1`R9B> ם}z*ޚ}K[YG ,Ӹf!:[<9ۨ6×-菂y;inZ ၯ|m~0`2b[Ӑ,=jvXr JgяXq눙l/V޽ u?`T8mZ]5jBg3LoAJC.iV;J`! [[kзLLB^փ\1ֈ`b`hDЬFfO)aѬG9 ]K T>?9>y>I<)|]j`Y<53Jula3! U 7J:1T뒨7fT.4M9TDyk?`:-zA4ڔFVp2~, 4h1ss_CpKV!DkGDś4!c[) */= 솈ƹmYƻU!6= O:bsI؂(ۜWKQ p$KtQ6;aD:cuك;3gѓekr~+(E_+2TiwT?ϐb4"|h1U`{Vk/"}RT$z2;wŪ=C l)s Vn{߄mg86i'[RIAHf6?e3 b9a]UyQ<ظc|?;/jV\N ݑUps:\vm21y_AMA%:I?[2K-!<0 *8fh#l}O`Ky| 5c'յ)\!c}3`dfޅ׾vsa-Q\8$M Lo]FQz\nQ @JRګM#~#>Mn nC'HC4Ǿ &soPMh yY0;=>.'-iL,MJک$@~3F cYu[(M@|DĺKF4&A0m)L-3MnoR8T^{?OnO7e_UڃP+a+b I8!S*͸muI콵/ds]Fd_ :@tfK]wkX]U|_5 ߇=oTM.x ̳l`;1U,2yDףABao]O_Y9 =G"NޠlYUtw>~mP]YP;o(g3ٞ} 9ŧ?[Ur涿V9+nw^}-ݮةVBH<2Z%DڽUre Fv@ @~"9& <_upYnKVZZ"2%z|.WŮ^V_nWxdF}=#|_3x;u}2Gۘ43ة'9BQ⏛%kT>[?a|RZ~<%1ܚڙeMF !G{Te $|C +LJ x>~M1W: ` =1ITz1CHLrzj" , oj1@XY[a28PQWyxdWvm]|r3<ҤW|6Gm`:߯"bN !:#[&'ߺmܝH8tB5O)W加B'/~^0F ,V/16|twDw] AR:ڮ.X}տgnU\a.Ϙ[W.Z1 uDҦ'qVUc6dNŰ*2Q&VM `zmLO+0g^]hwr ^5M} 5C\\R-0} }5TS Obk/o$vF;] /6}~R3]*Ee:VM#)t,)6jΐ>ԣk/k W1߫$fM~8:IuJ Q欀@[i:*PJ$X]E ><\>M{V{uJ&L#2tzJq,pDƥo FxVu1{zN5xkTث| Q}"cOkHd1zZ%H\Glͼ42S`ё-L * ">LLw$p D4Ap=J֬@4iMUC_HMiQǭx_HAor@!?P5g~ Lp oBs=s7S '( zM+MnTI q+uQQ\~0J[K%е++V̓Ä7{R(cJ( @!p\/ F{)-0,M.M?,i^;yOw~lq^1s R !).A,41yV'mX80 fVݨF>rq?6+}rAt@ @@PKcq,{7h"%^hkaO6k>GNۧU_6ǗK{9 tʘ Hg{eWayEYA֗ZdFb[qKnRʢsECw5 j7ߵp7aY0< `;k&aUeʘ C4#`*,<9".QRm蚞R;nI'vB)\zԔ~s0ũG wim: 羽8Й|d';\#&%!MrR#wo+A%V bͬ.܇OdtF9z##wbU=VVl\UŨ4v%Zn*#I7d͹# v1NtәKTHXTs0"IRzjYӴO]+~'t 3-RvIKt`~Ian Up s? YZ:8z.VW ywLM.l2r8j5L&rs5aɝYkbg HYkqQw]$Onzq7aŢ[6DT폫rTՄtʊioh^PblFˆnp$WvNÑMh,,/F;gw_\Ot559[>g5$wK;˛]|ا_hsN>o1Aa/jџ.g5qQ9f.Vu,&A=Nj|)oW5Byr>F[+ƟYq N7TD&.u:,65XEank8JVfU%|c?X5Ojo;*w)}޻QotЙ)/OM{8}"\r#Œ\Q@/ŏ=}4bto3=D錘yYo\IqJ6kjؖt ftXy5ETOggSǨo\ 7Y=-#! #!$+&(! !"&-*)!##!#++>)fh{M͒$qί@VQi p#"}Jw/|̶81XU QXvHݬYKTwa,hQO/]syN^OfSYd+W\!Iվq]*kqx"U7E~8 x9Y [ S=kȪWgikX%'fTDe2rtn6}opΒ[~U[z{jA]Tv!7M7ak>c _N.kPT͊0,>6YyiO5U>VvufVq(%CQa99J]DDWqyw~\oRՔ5 dBu =MtM>7^`EK\ey@%eTL.{}W2+wI/Hd ] ;!{SP^WW^+GH<y<ܞ2+.3Cy 'Iڅ/$MilT'LVq{IȪD9*tVrjyb>XW73@La|pT?}bVTbgǣXr?-U[rOmreQTSe^!y⹞$pti LWvK<LkE?N^SCle/[.N_\e׌ΩǏ"5{{ w|wkc^LT'Ne(,] 5zǮ+^-6|נ:V,($cɼx&NCYHK<_҆ ndzȶ+}LC\`D?)j23:_/,Cgyf^G^/Y_0zkAZz__EUx3rN#c9f} PRGuo[0]@ב;"ۺYSCS*pnIgYM*( =J*ⱗ$il&Q*Sh5Oy,fvM)vp8VuN5DV"͜ LL? otւĤ=YQ xѬp sDWI1 W,yVF~Gu~vx1QQoq.2TX##?Z\ѐJl4kS݂fh#t&y`AkVFƺ4zGV(űA2v.L2GU)5b"tH:uʳ^UJV*eA9IT6VcDL$Ssm!_nxlo|F}TΔS_0v:d$xĂv Ρ]!}՝ոxڼjݝTq ϵ@֥6D DawcYWSkK/8xI/>z^N}aͰ[ фg޾!B1 (/>YMACa{FR? O'^4:*׹,jÅ[BGN1%ע=L K^BkQȼyY؇vn_4QV @͋&o|\!o8O[Ug\",Oe@Y)d h_(bi>(ORY˩Sn8&!TÞd"sA SIk+UZCT~2A鈤S l\Hƺѹoj?o ]y_~VNd4#?h,[2(c]?ؤ2%V"3Ot[@N yTaJh#Lz{^mݫ^ Db![s6},p 6._jǚzew9C."wc=ɚqUzpߏJ-&U{GD 6$5Fr+C.ӗQC8Ӱ$ rXx6ՄJ-D"T59k}CD0ot~߱ڎZVpRӎP~364R0^g# YiA~ \4x˩Ɖ<_Ҋ .vF!,E Y}:|N^H>6TJq\&\Gk!=~}+eI9>Q֭8;8xv_gG9Qr׎=_3VJ֥.,ǝ!1PQPO UH#nTwJ))PMW-'Pl>DFZ;{ZjaG% J$P ,pgK2..]}q]ujPl.$O> 4@G|hOQ:0ҨVqxLF_@юE],5R"VY4K> Xw:zHmWׅ:mi4SB&6N\FBu'mW3B-GOJ@A~QEr-C33F`jߺ7_F%wM7_nޒxpJ ws@ ::sc~_7o:@Zt4o 0 >]xlpĞ L`m5^m{?4sn^*e*f̙ G^=c2ATێs+J'-^=ua.~ ZQefG пђ-#X:X4 9ZskxM5cԵPqF-4 >)  s&L jl>Fg:m%cI-{zR8L%Av ]w|{7nUNf e )h/6]\̊4o~c=)gkEQڼF*]X x[ |aDf>­@ ؽ$:"쵌}N9gWx[ҶE#ASdbh^kaAZ] utk×a2$y/fkO+*@S;^axIv`VXE+T(YY("Jؕtג'R2Ǯ2@} ^3.oY<s0)]1M I=IgR63q}m ggY b;d\ʫ1sPXw[k &1}tU\H}}~]\\4Y $H*}ԅ$>sSJ(UYiG,["L, ;(tp ~'%'zFSg'#O4@ٲ*dP4m)K]$ ?"5-{B: T" trd.Z,"YXk/ϩRLZo."+#b\ӏx}TE0< k 0^4gxobwN?x,'|/on Ps8lmms-1.1.3/data/samples/beats/break01.ogg000066400000000000000000000441611247673406200201030ustar00rootroot00000000000000OggS+"A !WvorbisD_OggS+"UW-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒI3f5T&~$`X;A!"MR#ǃyRdiϴW!8D׺ B |K',85- wdvHt%pux wWD\,hz$qtz.4Q9{ 5vm.0`ͺkC@Ɽ,կՖ*~ mPSueUrHȐKZ-L#v -460Ty]TGΤdA;U uɀKXw67Nq#jn|ήR:"Wmk/tvZJ<1mtCŃ2T:鬃N?XҘt.H+1PG7?J}lCrwZmv%qԅg!^E5!dsvTS;lURhn^?iٶUqփBQҘdj­p&%oף.=1󡿞#;z9}_aEI)W]2Ȩ̪#Տ!Np"JaԞcu Ы׵nJHV>{XZsfd.~Cn% cK'^ fYdC- .cMqoN++Ș6M3k΢;p'_g\ t:_wQӢtoXrb o9ܐ.#c0r˫i*-ȱ7[sBPPg,^r䑝<b1Yzc\:y1SaFL>-h@f|/@v XhD[lxZs<cE862/`!c\U;R䪴W@J@N˿5m;BŒ#ϊp165bpMtmj^ixw״ Kn&lBaA*aP +V6]Q8kV)(M O$ɶ2Rw27 `ݰ}}aBFSvcwгrzIDQ[ B+u-Bo,wxDobyzi|7]y-'zjưY|MЩdh!dMkwoE'dv $IazO&Yk _P`P d\k $v e|f->nbX uE@=&wqT$v+~Nh6@,&IH.M&zs7c0p?FDF7@~q ʴr]ci-{xI&EϱhzL3C#-+a_?X-k6ӴUvF ` Nji뙸 &5OqFh";_Uc A/zZg.X0W7e<3ZHR}&MQFJmP~Z/?wnpF3jm 6Θ]̥oBR:^[p:8 K0o~ye#/Ѥ Rk<=O;(ۅ$O.9<(.oDݎ꯻bË2W`LXy(!.BqD8W]=/a>e^*m7 L pjc 5F Z3ݝе4[<􋡢jACyy;wetpf{\Uڪz6ZT Tb;7mF~)½mqt/畻6V RǂX28ba٬v%q}˝@v1rFy࿪Im# ^ vP$^]^0P@u {EbvBڒMTۜ63N!4k,7s]@/tIH/fJN/ՅCbkE%B%F aa :9ٛlJl.g]iͥ) 8njM  qIJt,hyť(~4-!^aoP>OpmE%>޸IgⓜUnq=!/,\H k͊G< yzݥ;|t ~մa+dZ:\'AB%}#uA7DN^ I"-O;ؽDX@8cDg+q7tzb W}LF1*>!AEH hsD}K]b=jPtEn.Ag#U1$ g4f󈚻kPUoԶv(ph*j.A pRWTG#oV`@tO%1+tj,^ b9?۫ |pwrCIo}(={RRu9 bU K]ߢO/[W0~jFTSDN[ v ^Ƕ@CUUٜD|tA~;VW_uFK- M8-exqܨJ3t07ĝXC)I UHm(w\gчz ⭩]7~[hWO/7|aiFCvC|ti3,wz`V h.y7ˤtn.E\ )ܾƵ'yU;m῵ݸttщ^ Zu3nqEl_OFdɲNx/jVu2xU^JJJ,2~a`' DfR`ʕs" TJq-vG8^o:-6ttspFT u ;Ffe/|qTԤ2gmgeVe=lZ+`jsږ3Y!)Ѫq*Q-K-w) S[˪]!,Ģ8}:q"M!eoWuXj8IL^T<zIׂ oE959,0"$88Ԝ\v$OIEVݻFUZɋXRIDwd+ }@SO%Fs!'0 Oh#+Ԣ:&;b,aE@–`ZLҒ$A8#>Sڹ-jiN cB&O g~")2 &--g=U6tY j j2QJ @Vi d 9fVLc2 6N':wz??n?^u[ f=7%[t5ziiG#~J{WGp.ԂvP6ܔg<\?m`9|3&v+)L>M 4 {%=2,:H-+s\\F&7zE!Daut#HXj \.mNSe2 _jx8d9b%lB% `P7"YRMb;>Gzw<iP$1` <:#.jѺkgy CiwDեH]t ti0Nn]G6b$~9zq-] @V dz`TLIODZ M`ϒ}߫75RCgxvՌyC/~) u1"#mBD+Ёd^нsBtZjkRJgP%mf[A+EDJQ<ˠ j!fP`?@=2ZyȮ s MAvj#1,5na+4P-|m`·r1n]@@V-[a ˃l>+&.yuW%s+ Z+_4Z_Zǩani 턽U9IrL%-Jʩ['z&Wy6~6H;0C-z.@D r,3&׈ -ݟC'u$p).^C>9qzIX<]-+cJ*+)ѸUG(Zێїwb69*pDVK36`{W?oQ L̨o]*r,(M!Dؼ2rX~Eic&*H'X4跐`@z[{œttaCȬyMFd)2ak'%BoŵO)0@VUrAzG ע2s6-{ }s͍F--TrJĶ-2 rU"w̳wKF `gcK*^ љn2fZb)-${-/P0.@\Xكd:Y'@U8$ɹ.&Z#-*,="t]qkW$S']W1g ĵr WǢKʮB" 0/- ,6Tf"3pѣo-&Xo*Ȼ,C.#>m_T[VOrO:/. 8Ϣlѷ 8>蔨˜ >j]_iš`ֽqCXZEdI1@ILGl;8@|NZDs٥v~P6L}n]Sه|.G5S}kq"!hgaSOgil:oJqFgBԃPj:uM -<43!2n8`7Ba`}MI7M^Y GΕwfB|I]N.`"|q8ݖޟ|.i$qS 3ޣXB;2~7'_jz ua#jW*8Ieޯ*cEeWpՀ LEߩJ)u˽e;@ 3vٳ۵HA½QcjqA"|U$Ϸx s\^Wxd19)lY"-#; ln#Ǒ(S@(U&甕rQ`\_=~be6p"zgLh:E<}!_ڐY-/5VdіI,z&yaQ9!Zml#Qdb'>wX]1 1uw!Wcx }(T/9 - tط|&K8yc:)HE??\9335& #2R$e e轓f9I尊{OLwPXQ]arB6CIJ깃ndc*F\h5fQvw7KE8/$,j[ 3U[(ZѤjRgQ5))iێ_WE7ܢ1tUYe.'uuΫ=(~ C:ڿi/ox'Uvt@XWG2"-)H.ڤ @+ y;D䟘+PzǑVn.LP>T{9hz`ѥl+3H^gZkU%&qCRmk7#;+` .V=fVAv; gKWq*rڨ};B+ATZ~ 6qTLrZ US?qkK)-KڝT .5ɤ[5ێ=>nnTK\$) ~'( Ȉ;XDQeKp.pEI&]1/ѷjφ:Ҵ.6E.7.'sE-/iR%KhDuȎQLyqQ-a_ ֯5 QyWӤFra~FK:{f.?{Cym@vA{l3ҡY):փЇ6(o"@m^} \"?z0 uA^Lh )iFU^/9R\@S[Uz:tpFuRvs +:"3LvP͠n @^JոvO30~ ~XevU]n&]PF^'r4BƱD(.cRDw٫W4hͭBc4:T.O1})mSV!.3? L$LR'hX,8 UN1eDpvh}C?ʦ4:W gX廀g;ۥmCBߥ@zU.,llɅ$[NV3W Vj2*>J+A`cIT7RL#j&u8D3]$JȔ,?*[;u*>`p/A)mBUuG+P{35G\9%à>aP)EU}ꢢY_!E7]- > # 0\!pqwfs |4f~^#CRYH#L[fFjp-۞rK[ 5#*,c B%|-˪׽PH|Edg CyiO'u ӗ{\%Ta1I8{%-6S{;ފ.VؘZVm< nlXMQ L IWO*.fVg*shhYo:vQk=jƬDBD->|=q1`݉= %R>*Hdzko 81c;($˙6邤c28p ~ ?M&:5y +s0~%3s0LwrrboF;$yPpЩA‹h^xP P"qT-k%G$&dDH3 =WdjT00~-CN4*􃂨S;#FOrL_17$5`ނ ~?eB0s0ٮEÈ6IɀKS3M-ON<[0Mw[S9ҷR2>覠nr^z/`>+^~5P[ˮ4P?'d9h/O- @KASsl2tNHq:ź;BROQIUΖ TF nV+0@'، ;A4J227 ." ,@aѶCի^lو_[6/|'g1!ޫս'VQլ0ы/kLNzKMrHyBjɚkEݣtPIrgǰ%pt.;zidH)DXh<=b`L 3ҳm(h׶CƄɻ5lynNZ1xiob=0$I:F] 8ϛr (Sxʙo9Ue"Ȯ#?TMՈ6Exg L.V=v`?ɫR i5P!c1g& -ҾZҰ:0cTH}q*]ri)*T2JLc+ﯬq\ؾH_Sĵ@ZiT2igr~1ym /ߥ;ʼnt 3.:윫rq=h=#ГJܦݚqy5W=[ʉi[F,H\Hv@/ܓMTi㮭[kx;|̴%CU֫w0S"\M>S؅ʜnHդ ~y_R8"eg4h<ZP@uFC_2x΋R) !CMzm z9$s2ŲS:)Яa.RZqB"0.s JEHqW]p &k3&PiI<xAo=D0T'ZlqLQ~,8wXqMD*=_!߿<_:MKP &GOdo{2Qa]xkmQ1!COldPέFkl!B[\kaݺHfkueA U1mUoz`x> 2@oC4^<*Pd9pÇ{laY,Dz9 B<cٚz9ZwX cV~!j5Os.6S5!Ƒ*U\ 琴۷XR?dqzvrV0D-<ڤc CA$VZ l 6/{uLY`Xrw&&e^ܧϬ7b.4,/y.nm٠ -.](G&׺kl6NSέ#dn\b)u$:`jџL ]8^|lbR-ݱ͡O()j%? HR& &\SxS=ƃXt] 묯"ZNW@0]gAisgǎGaAzk푴[vo[^u|1hb˺Γ/a&ʽLڌTQmj=׃Ks=qG )*rFb5\-hL[p۫e8ۇ""/"`3 ?e{^WI3)=+frХ)By w t] -2 d1n5">|xk =ipFO*h%/1)nI5O2d7' 5 ?*"a[qڍ|TE5^Xb&"}F>ԝVUZgLeWdڲ>x Url<ĥ`Y NI[6+=T,zS-Xq  Z>L؛y|zF-PYUD ڴ^qdV$4\Vh ]Jd]V1ݥ&Nk,0M[sV$|rY8<v ϑZdrA({;,:ÎKǥ)uByWmGM(Nq>\0cQq/y½l*[l,a(~ =p;.PswcwlެBZ@w:H8 YY BԬEW.ԝz20oLsܐ[y A%٪b%mۅ2 - %^?%g zE -pR ρ[sQM\3G{vj]M򬈨IdTvʽe*C}]+\(V l.EnZH9ec37dvFR"ON#qe5$轄JiBoD6޾6=2jR|;;klqk/ݝu0Q&\;[y)?Su H띾X# FGm ⁞d<؟{zJnU!uZ+3tvOgu tD/x%9ߊx\; >04IL+vT{OJ/56PLQ$xT8HL]zxpD4Pܒ;Rfvc2T N:U\E~+ߗqH~da$b{ik dL7bu̳˰;w(3epr$,UJ%_Nr ;t[u;bH_!c\^_ yu0H F$J]}];u&PP 4($@.7{(%F-%J|lZiHKc ԉ18)(_wǷU"w}D؇CԝOmkց||a'33XR0}w.ٌʊf Uh{,lgQs"xoo5NOT3uaAooV oz ́'r@lmms-1.1.3/data/samples/beats/break02.ogg000066400000000000000000000554611247673406200201110ustar00rootroot00000000000000OggS,";|vorbisD_OggS,"[O/-vorbisXiph.Org libVorbis I 20020717vorbis&BCV"L ÀАU6kc(Fbj1c,Fb1c1c1c 4d@1B9Q)9ʼn0X!R̡J9 Y@H!RH!RH!RJ)b)b)r1 2褓N:$B RJk{{{{9BCV B!B!RH!b)АU KMS%S2%Sr-2-S3=3EUtUSUeueS6eS6eU6eS6eS6eՕeYeYeYeYeYe 4d #9#)8Hd`(H$YeYg陞ii iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qqqGr$ Y@R$r4Gs4sm1:7~2` 2PhȊ NA9J1!:)UAȜR1%Z%1c2礄Z Bh)Z(Z)XCRZ Z1c9)sRB)RZ˜9(R))RRsR2tJ*TR-Z)ŒR-Ŗ[RZ VR1T[1cR2礄RZ V9&J栤R3tJꠣRRS(%R[[ VR[SnB)RZk՚Z1Z))ƒRl-ƚ[RZ VJjŖkZ)X[V[Z5cX[;RZ ZXk(Rl[kXRjccZ[j[=sR5dm0`B(4d%@cdrLBcbAr9)b9(%s :))e9(%PB))B)% (pASbqBCVDZ,MSeǒz qE_.7-SD6hl,> mld>65>|(v,'uhPKbbTvQmjp֍MN_|Xd=K Gdu޶0/%ZWrvȱ4#Te hF Q 0hpq2jKޯCC$e 5"<5!h``k":>1a11i\TO[iG w>gZcہpS^?gLґ]%\oQjW'I7 I S1`3@qBkAECM$1F$PR?BϘ\j=({H*CH])1]+fAq$I3C}8">K^7rFQ|تZ8 //4@K @.0 `qDgAIc,Eb/SԇRDrmSŭc/Vw):Zl:Λ}1J+W,Y?e;mT6;cxg&L|R9:#._,aJ&3p&:cO]GC1CXp>CӅ ~(ifcNpO ]rH㦤Ǫ{#,q,[ip$5" 0AkK(E }TnT@ɢuF\6W-t@c]ӄ1[.BhA, +VSMw;MeT W&R[ŗj``a`ey,@]PpacF\Qz1Ov ,P10t<ʝ%F:O%68-h%thH(4Qgw-qJB:5YNW[:bb@nx~(uc"hO4FF6#Kﲣ@@n Ŀ[9R*RkY(Mr+4} ~R+B>3"p[%g /((l &[Cn]("^iy=!Z 7T(p3.QwTyuM-@Cq$=i 0;]m%Hb 2Wf}Xt%AR^ :3=#ÉӼ6U)gswNyu5ڢ9[Y:J tdP2kz@f31ĮfVxq؍vyh&ſ"S@yfq iSHʬw$|^?m|H!WAִN\jT >tFC7|L4ZF!gtt֍D\69Obp2zOm-Z Y =yWsxK\RClrM&!E!ɣED^S5glV T64O-JZԣ+~ݺLtJ(ECZDZn9wOpD<]\Q}]<WTZ#i -2b%_[=trY ҩR4֍_biݴwrկnM ,gE,WiJU~!h}=gRQ|}9ok_pRcy GiIi5 Nh.Wo;(! Q #>fUeU(q`A7X|/43Yo{'4O:TCdձV(׽M